[med-svn] [sra-sdk] 01/06: New upstream version 2.8.1+dfsg

Andreas Tille tille at debian.org
Wed Jan 11 10:11:27 UTC 2017


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

tille pushed a commit to branch master
in repository sra-sdk.

commit 5eec480f0ff88e122c6caf58165d6cda2199452c
Author: Andreas Tille <tille at debian.org>
Date:   Wed Jan 11 07:20:44 2017 +0100

    New upstream version 2.8.1+dfsg
---
 .github/ISSUE_TEMPLATE.md                          |    21 -
 .github/PULL_REQUEST_TEMPLATE.md                   |    13 -
 .gitignore                                         |    42 +-
 .travis.yml                                        |    20 -
 CHANGES.md                                         |   158 +
 LICENSE                                            |    66 +
 Makefile                                           |   187 +
 README-blastn                                      |   133 +
 README-vdb-config                                  |   115 +
 README.md                                          |   116 +-
 build.gradle                                       |   227 -
 build.xml                                          |    62 -
 build/.gitignore                                   |     6 +
 build/Makefile.cc                                  |    67 +
 build/Makefile.clang                               |    83 +
 build/Makefile.deb                                 |   118 +
 build/Makefile.env                                 |   414 +
 build/Makefile.gcc                                 |    92 +
 build/Makefile.icc                                 |    77 +
 build/Makefile.install                             |   143 +
 build/Makefile.linux                               |    87 +
 build/Makefile.rpm                                 |   174 +
 build/Makefile.rules                               |   110 +
 build/Makefile.scm                                 |    94 +
 build/Makefile.shell                               |   189 +
 build/Makefile.targets                             |   117 +
 build/Makefile.tools                               |    40 +
 build/Makefile.vers                                |    26 +
 .../asm-trace/asm-trace.xcodeproj/project.pbxproj  |  4444 +++
 build/Xcode/old-toolkit/.gitignore                 |     1 +
 .../old-toolkit.xcodeproj/project.pbxproj          |  2153 ++
 build/abspath.sh                                   |    31 +
 build/cc.sh                                        |   129 +
 build/check-exit-code.py                           |   131 +
 build/cp.sh                                        |    32 +
 build/gprof2dot.py                                 |  2763 ++
 build/increment-release.sh                         |    44 +
 build/ld.linux.cmn.sh                              |   158 +
 build/ld.linux.dlib.sh                             |   311 +
 build/ld.linux.exe.sh                              |   341 +
 build/ld.linux.gcc.sh                              |    53 +
 build/ld.linux.icc.sh                              |    47 +
 build/ld.linux.ln.sh                               |    98 +
 build/ld.linux.slib.sh                             |   146 +
 build/ld.rwin.dlib.sh                              |   363 +
 build/ld.rwin.exe.sh                               |   366 +
 build/ld.rwin.slib.sh                              |   123 +
 build/ld.rwin.stub.sh                              |    59 +
 build/ld.rwin.vc++.sh                              |    65 +
 build/ld.sh                                        |   596 +
 build/ld.sun.cc.sh                                 |    56 +
 build/ld.sun.cmn.sh                                |   160 +
 build/ld.sun.dlib.sh                               |   282 +
 build/ld.sun.exe.sh                                |   299 +
 build/ld.sun.ln.sh                                 |    87 +
 build/ld.sun.slib.sh                               |   135 +
 build/ld.unix.cmn.sh                               |   149 +
 build/ld.unix.slib.sh                              |   124 +
 build/libexists.sh                                 |   180 +
 build/mac.arch.sh                                  |    87 +
 build/make-defs-xf.pl                              |   108 +
 build/make-defs.pl                                 |   247 +
 build/make-vers-inc.sh                             |    46 +
 build/run_remotely.sh                              |   124 +
 build/scm-collect.sh                               |    42 +
 build/scm.sh                                       |   136 +
 build/scm.txt                                      |   117 +
 build/sra-dflt-schema.sh                           |   163 +
 build/tag-module.sh                                |   213 +
 build/valgrind.suppress                            |     6 +
 build/wait_for_file.sh                             |    65 +
 configure                                          |    45 +
 gradle/wrapper/gradle-wrapper.jar                  |   Bin 53556 -> 0 bytes
 gradle/wrapper/gradle-wrapper.properties           |     6 -
 gradlew                                            |   164 -
 scripts/explain_sam_flags.py                       |    65 -
 scripts/release_picard.sh                          |   152 -
 setup/install                                      |    45 +
 setup/install.perl                                 |  1329 +
 setup/install.prl                                  |    38 +
 setup/konfigure.perl                               |  1762 ++
 setup/os-arch.perl                                 |    22 +
 setup/os-arch.prl                                  |   106 +
 setup/package.prl                                  |    66 +
 setup/s/install                                    |    45 +
 setup/s/os.prl                                     |     2 +
 shared/Makefile                                    |    85 +
 shared/toolkit.vers                                |     1 +
 shared/toolkit.vers.c                              |     8 +
 shared/toolkit.vers.h                              |     1 +
 .../java/htsjdk/samtools/AbstractBAMFileIndex.java |   721 -
 .../htsjdk/samtools/AbstractSAMHeaderRecord.java   |   116 -
 src/main/java/htsjdk/samtools/AlignmentBlock.java  |    58 -
 .../java/htsjdk/samtools/AsyncSAMFileWriter.java   |    59 -
 .../java/htsjdk/samtools/BAMFileConstants.java     |    45 -
 src/main/java/htsjdk/samtools/BAMFileReader.java   |   913 -
 src/main/java/htsjdk/samtools/BAMFileSpan.java     |   268 -
 src/main/java/htsjdk/samtools/BAMFileWriter.java   |   200 -
 src/main/java/htsjdk/samtools/BAMIndex.java        |    67 -
 src/main/java/htsjdk/samtools/BAMIndexContent.java |    69 -
 .../java/htsjdk/samtools/BAMIndexMetaData.java     |   271 -
 src/main/java/htsjdk/samtools/BAMIndexWriter.java  |    54 -
 src/main/java/htsjdk/samtools/BAMIndexer.java      |   313 -
 .../java/htsjdk/samtools/BAMIteratorFilter.java    |    26 -
 .../BAMQueryMultipleIntervalsIteratorFilter.java   |    59 -
 src/main/java/htsjdk/samtools/BAMRecord.java       |   365 -
 src/main/java/htsjdk/samtools/BAMRecordCodec.java  |   210 -
 src/main/java/htsjdk/samtools/BamFileIoUtils.java  |   178 -
 .../java/htsjdk/samtools/BamIndexValidator.java    |   151 -
 src/main/java/htsjdk/samtools/Bin.java             |   162 -
 src/main/java/htsjdk/samtools/BinList.java         |   119 -
 .../java/htsjdk/samtools/BinaryBAMIndexWriter.java |   207 -
 .../java/htsjdk/samtools/BinaryCigarCodec.java     |    89 -
 src/main/java/htsjdk/samtools/BinaryTagCodec.java  |   425 -
 .../java/htsjdk/samtools/BinningIndexBuilder.java  |   187 -
 .../java/htsjdk/samtools/BinningIndexContent.java  |   263 -
 .../java/htsjdk/samtools/BrowseableBAMIndex.java   |    54 -
 src/main/java/htsjdk/samtools/CRAMBAIIndexer.java  |   474 -
 src/main/java/htsjdk/samtools/CRAMCRAIIndexer.java |   135 -
 .../htsjdk/samtools/CRAMContainerStreamWriter.java |   495 -
 src/main/java/htsjdk/samtools/CRAMFileReader.java  |   559 -
 src/main/java/htsjdk/samtools/CRAMFileWriter.java  |   168 -
 src/main/java/htsjdk/samtools/CRAMIterator.java    |   310 -
 .../java/htsjdk/samtools/CachingBAMFileIndex.java  |   169 -
 .../samtools/ChainedDownsamplingIterator.java      |    90 -
 src/main/java/htsjdk/samtools/Chunk.java           |   169 -
 src/main/java/htsjdk/samtools/Cigar.java           |   340 -
 src/main/java/htsjdk/samtools/CigarElement.java    |    75 -
 src/main/java/htsjdk/samtools/CigarOperator.java   |   211 -
 .../samtools/ComparableSamRecordIterator.java      |    89 -
 .../ConstantMemoryDownsamplingIterator.java        |    88 -
 .../samtools/CoordinateSortedPairInfoMap.java      |   297 -
 .../java/htsjdk/samtools/CustomReaderFactory.java  |   143 -
 .../htsjdk/samtools/DefaultSAMRecordFactory.java   |    54 -
 src/main/java/htsjdk/samtools/Defaults.java        |   174 -
 .../htsjdk/samtools/DiskBasedBAMFileIndex.java     |    78 -
 .../java/htsjdk/samtools/DownsamplingIterator.java |   113 -
 .../samtools/DownsamplingIteratorFactory.java      |   118 -
 .../htsjdk/samtools/DuplicateScoringStrategy.java  |   138 -
 src/main/java/htsjdk/samtools/DuplicateSet.java    |   184 -
 .../java/htsjdk/samtools/DuplicateSetIterator.java |   172 -
 .../htsjdk/samtools/FileTruncatedException.java    |    46 -
 src/main/java/htsjdk/samtools/FixBAMFile.java      |    46 -
 .../java/htsjdk/samtools/GenomicIndexUtil.java     |   100 -
 .../samtools/HighAccuracyDownsamplingIterator.java |   196 -
 src/main/java/htsjdk/samtools/LinearIndex.java     |   126 -
 .../htsjdk/samtools/MergingSamRecordIterator.java  |   238 -
 .../samtools/NotPrimarySkippingIterator.java       |    62 -
 src/main/java/htsjdk/samtools/QueryInterval.java   |    96 -
 .../java/htsjdk/samtools/ReservedTagConstants.java |    70 -
 .../SAMBinaryTagAndUnsignedArrayValue.java         |    65 -
 .../java/htsjdk/samtools/SAMBinaryTagAndValue.java |   251 -
 src/main/java/htsjdk/samtools/SAMException.java    |    44 -
 src/main/java/htsjdk/samtools/SAMFileHeader.java   |   399 -
 src/main/java/htsjdk/samtools/SAMFileSource.java   |    68 -
 src/main/java/htsjdk/samtools/SAMFileSpan.java     |    49 -
 src/main/java/htsjdk/samtools/SAMFileWriter.java   |    50 -
 .../java/htsjdk/samtools/SAMFileWriterFactory.java |   505 -
 .../java/htsjdk/samtools/SAMFileWriterImpl.java    |   247 -
 src/main/java/htsjdk/samtools/SAMFlag.java         |   110 -
 .../java/htsjdk/samtools/SAMFormatException.java   |    44 -
 .../htsjdk/samtools/SAMHeaderRecordComparator.java |    68 -
 src/main/java/htsjdk/samtools/SAMLineParser.java   |   487 -
 .../java/htsjdk/samtools/SAMProgramRecord.java     |   132 -
 .../java/htsjdk/samtools/SAMReadGroupRecord.java   |   165 -
 src/main/java/htsjdk/samtools/SAMRecord.java       |  2378 --
 .../java/htsjdk/samtools/SAMRecordComparator.java  |    40 -
 .../samtools/SAMRecordCoordinateComparator.java    |   105 -
 .../samtools/SAMRecordDuplicateComparator.java     |   363 -
 .../java/htsjdk/samtools/SAMRecordFactory.java     |    28 -
 .../java/htsjdk/samtools/SAMRecordIterator.java    |    52 -
 .../samtools/SAMRecordQueryHashComparator.java     |    72 -
 .../samtools/SAMRecordQueryNameComparator.java     |    89 -
 .../java/htsjdk/samtools/SAMRecordSetBuilder.java  |   576 -
 src/main/java/htsjdk/samtools/SAMRecordUtil.java   |    77 -
 .../htsjdk/samtools/SAMSequenceDictionary.java     |   355 -
 .../samtools/SAMSequenceDictionaryCodec.java       |   114 -
 .../java/htsjdk/samtools/SAMSequenceRecord.java    |   248 -
 .../java/htsjdk/samtools/SAMSortOrderChecker.java  |    89 -
 src/main/java/htsjdk/samtools/SAMTag.java          |    82 -
 src/main/java/htsjdk/samtools/SAMTagUtil.java      |   122 -
 src/main/java/htsjdk/samtools/SAMTestUtil.java     |   128 -
 .../java/htsjdk/samtools/SAMTextHeaderCodec.java   |   500 -
 src/main/java/htsjdk/samtools/SAMTextReader.java   |   253 -
 src/main/java/htsjdk/samtools/SAMTextWriter.java   |   221 -
 src/main/java/htsjdk/samtools/SAMTools.java        |   119 -
 src/main/java/htsjdk/samtools/SAMUtils.java        |  1226 -
 .../java/htsjdk/samtools/SAMValidationError.java   |   291 -
 src/main/java/htsjdk/samtools/SQTagUtil.java       |   154 -
 src/main/java/htsjdk/samtools/SRAFileReader.java   |   309 -
 src/main/java/htsjdk/samtools/SRAIndex.java        |   257 -
 src/main/java/htsjdk/samtools/SRAIterator.java     |   256 -
 .../java/htsjdk/samtools/SamFileHeaderMerger.java  |   786 -
 .../java/htsjdk/samtools/SamFileValidator.java     |   872 -
 src/main/java/htsjdk/samtools/SamFiles.java        |    98 -
 src/main/java/htsjdk/samtools/SamFlagField.java    |   203 -
 src/main/java/htsjdk/samtools/SamIndexes.java      |    94 -
 .../java/htsjdk/samtools/SamInputResource.java     |   497 -
 src/main/java/htsjdk/samtools/SamPairUtil.java     |   510 -
 src/main/java/htsjdk/samtools/SamReader.java       |   621 -
 .../java/htsjdk/samtools/SamReaderFactory.java     |   568 -
 src/main/java/htsjdk/samtools/SamStreams.java      |   164 -
 .../SecondaryOrSupplementarySkippingIterator.java  |    41 -
 .../StreamInflatingIndexingOutputStream.java       |   103 -
 .../samtools/TagValueAndUnsignedArrayFlag.java     |    42 -
 src/main/java/htsjdk/samtools/TextCigarCodec.java  |    91 -
 src/main/java/htsjdk/samtools/TextTagCodec.java    |   331 -
 .../htsjdk/samtools/TextualBAMIndexWriter.java     |   185 -
 .../java/htsjdk/samtools/ValidationStringency.java |    21 -
 .../java/htsjdk/samtools/apps/TimeChannel.java     |    58 -
 .../htsjdk/samtools/apps/TimeRandomAccessFile.java |    55 -
 src/main/java/htsjdk/samtools/cram/CRAIEntry.java  |   195 -
 src/main/java/htsjdk/samtools/cram/CRAIIndex.java  |   267 -
 .../java/htsjdk/samtools/cram/CRAMException.java   |    22 -
 .../cram/build/CompressionHeaderFactory.java       |   592 -
 .../samtools/cram/build/ContainerFactory.java      |   215 -
 .../samtools/cram/build/ContainerParser.java       |   221 -
 .../samtools/cram/build/Cram2SamRecordFactory.java |   227 -
 .../samtools/cram/build/CramContainerIterator.java |    77 -
 .../java/htsjdk/samtools/cram/build/CramIO.java    |   343 -
 .../htsjdk/samtools/cram/build/CramNormalizer.java |   347 -
 .../cram/build/CramSpanContainerIterator.java      |   100 -
 .../samtools/cram/build/Sam2CramRecordFactory.java |   374 -
 .../java/htsjdk/samtools/cram/build/Utils.java     |    54 -
 .../samtools/cram/common/CramVersionPolicies.java  |    24 -
 .../htsjdk/samtools/cram/common/CramVersions.java  |    11 -
 .../htsjdk/samtools/cram/common/IntHashMap.java    |   415 -
 .../htsjdk/samtools/cram/common/MutableInt.java    |    27 -
 .../java/htsjdk/samtools/cram/common/Version.java  |    63 -
 .../samtools/cram/digest/AbstractSerialDigest.java |    26 -
 .../samtools/cram/digest/ByteSumCombine.java       |    12 -
 .../java/htsjdk/samtools/cram/digest/Combine.java  |     6 -
 .../samtools/cram/digest/ContentDigests.java       |   217 -
 .../htsjdk/samtools/cram/digest/Crc32Hasher.java   |    42 -
 .../samtools/cram/digest/IntegerSumCombine.java    |    10 -
 .../samtools/cram/digest/MessageDigestHasher.java  |    30 -
 .../java/htsjdk/samtools/cram/digest/SERIES.java   |    34 -
 .../samtools/cram/encoding/AbstractBitCodec.java   |    56 -
 .../samtools/cram/encoding/BetaIntegerCodec.java   |    62 -
 .../cram/encoding/BetaIntegerEncoding.java         |    78 -
 .../htsjdk/samtools/cram/encoding/BitCodec.java    |    97 -
 .../cram/encoding/ByteArrayLenEncoding.java        |   146 -
 .../cram/encoding/ByteArrayStopEncoding.java       |   130 -
 .../htsjdk/samtools/cram/encoding/DataSeries.java  |    49 -
 .../samtools/cram/encoding/DataSeriesMap.java      |    29 -
 .../samtools/cram/encoding/DataSeriesType.java     |    41 -
 .../htsjdk/samtools/cram/encoding/Encoding.java    |    44 -
 .../samtools/cram/encoding/EncodingFactory.java    |   118 -
 .../cram/encoding/ExternalByteArrayCodec.java      |    76 -
 .../cram/encoding/ExternalByteArrayEncoding.java   |    63 -
 .../samtools/cram/encoding/ExternalByteCodec.java  |    64 -
 .../cram/encoding/ExternalByteEncoding.java        |    62 -
 .../samtools/cram/encoding/ExternalCompressor.java |    84 -
 .../cram/encoding/ExternalIntegerCodec.java        |    76 -
 .../cram/encoding/ExternalIntegerEncoding.java     |    62 -
 .../samtools/cram/encoding/ExternalLongCodec.java  |    65 -
 .../cram/encoding/ExternalLongEncoding.java        |    62 -
 .../samtools/cram/encoding/GammaIntegerCodec.java  |    72 -
 .../cram/encoding/GammaIntegerEncoding.java        |    73 -
 .../samtools/cram/encoding/GolombIntegerCodec.java |   101 -
 .../cram/encoding/GolombIntegerEncoding.java       |    80 -
 .../samtools/cram/encoding/GolombLongCodec.java    |   100 -
 .../samtools/cram/encoding/GolombLongEncoding.java |    73 -
 .../cram/encoding/GolombRiceIntegerCodec.java      |    87 -
 .../cram/encoding/GolombRiceIntegerEncoding.java   |    73 -
 .../htsjdk/samtools/cram/encoding/NullCodec.java   |    52 -
 .../samtools/cram/encoding/NullEncoding.java       |    57 -
 .../cram/encoding/SubexponentialIntegerCodec.java  |    99 -
 .../encoding/SubexponentialIntegerEncoding.java    |    78 -
 .../cram/encoding/huffman/HuffmanCode.java         |    99 -
 .../cram/encoding/huffman/HuffmanLeaf.java         |    28 -
 .../cram/encoding/huffman/HuffmanNode.java         |    28 -
 .../cram/encoding/huffman/HuffmanTree.java         |    30 -
 .../huffman/codec/CanonicalHuffmanByteCodec.java   |    70 -
 .../codec/CanonicalHuffmanIntegerCodec.java        |    59 -
 .../encoding/huffman/codec/HuffmanBitCode.java     |    29 -
 .../huffman/codec/HuffmanByteEncoding.java         |    91 -
 .../encoding/huffman/codec/HuffmanByteHelper.java  |   178 -
 .../encoding/huffman/codec/HuffmanIntHelper.java   |   178 -
 .../huffman/codec/HuffmanIntegerEncoding.java      |   100 -
 .../huffman/codec/HuffmanParamsCalculator.java     |   137 -
 .../samtools/cram/encoding/rans/Constants.java     |     7 -
 .../htsjdk/samtools/cram/encoding/rans/D04.java    |    86 -
 .../htsjdk/samtools/cram/encoding/rans/D14.java    |    71 -
 .../samtools/cram/encoding/rans/Decoding.java      |    93 -
 .../htsjdk/samtools/cram/encoding/rans/E04.java    |    59 -
 .../htsjdk/samtools/cram/encoding/rans/E14.java    |    88 -
 .../samtools/cram/encoding/rans/Encoding.java      |    73 -
 .../samtools/cram/encoding/rans/Frequencies.java   |   331 -
 .../htsjdk/samtools/cram/encoding/rans/RANS.java   |   172 -
 .../htsjdk/samtools/cram/encoding/rans/Utils.java  |    34 -
 .../cram/encoding/reader/AbstractReader.java       |   131 -
 .../cram/encoding/reader/CramRecordReader.java     |   212 -
 .../samtools/cram/encoding/reader/DataReader.java  |    44 -
 .../cram/encoding/reader/DataReaderFactory.java    |   228 -
 .../cram/encoding/reader/RefSeqIdReader.java       |   242 -
 .../encoding/readfeatures/BaseQualityScore.java    |    76 -
 .../samtools/cram/encoding/readfeatures/Bases.java |    76 -
 .../cram/encoding/readfeatures/Deletion.java       |    77 -
 .../cram/encoding/readfeatures/HardClip.java       |    75 -
 .../cram/encoding/readfeatures/InsertBase.java     |    77 -
 .../cram/encoding/readfeatures/Insertion.java      |    75 -
 .../cram/encoding/readfeatures/Padding.java        |    76 -
 .../cram/encoding/readfeatures/ReadBase.java       |    89 -
 .../cram/encoding/readfeatures/ReadFeature.java    |    36 -
 .../cram/encoding/readfeatures/RefSkip.java        |    76 -
 .../cram/encoding/readfeatures/Scores.java         |    79 -
 .../cram/encoding/readfeatures/SoftClip.java       |    77 -
 .../cram/encoding/readfeatures/Substitution.java   |   110 -
 .../samtools/cram/encoding/writer/DataWriter.java  |    41 -
 .../cram/encoding/writer/DataWriterFactory.java    |   109 -
 .../samtools/cram/encoding/writer/Writer.java      |   270 -
 .../htsjdk/samtools/cram/io/BitInputStream.java    |    51 -
 .../htsjdk/samtools/cram/io/BitOutputStream.java   |    73 -
 .../htsjdk/samtools/cram/io/CRC32InputStream.java  |    77 -
 .../htsjdk/samtools/cram/io/CRC32OutputStream.java |    55 -
 .../samtools/cram/io/CountingInputStream.java      |    83 -
 .../java/htsjdk/samtools/cram/io/CramArray.java    |    41 -
 src/main/java/htsjdk/samtools/cram/io/CramInt.java |    78 -
 .../samtools/cram/io/DefaultBitInputStream.java    |   115 -
 .../samtools/cram/io/DefaultBitOutputStream.java   |   178 -
 .../cram/io/ExposedByteArrayOutputStream.java      |    26 -
 .../samtools/cram/io/ExternalCompression.java      |   152 -
 src/main/java/htsjdk/samtools/cram/io/ITF8.java    |   186 -
 .../htsjdk/samtools/cram/io/InputStreamUtils.java  |    80 -
 src/main/java/htsjdk/samtools/cram/io/LTF8.java    |   193 -
 .../htsjdk/samtools/cram/lossy/BaseCategory.java   |    57 -
 .../samtools/cram/lossy/BaseCategoryType.java      |    30 -
 .../java/htsjdk/samtools/cram/lossy/Binning.java   |    76 -
 .../samtools/cram/lossy/PreservationPolicy.java    |    42 -
 .../cram/lossy/QualityScorePreservation.java       |   410 -
 .../samtools/cram/lossy/QualityScoreTreatment.java |    47 -
 .../cram/lossy/QualityScoreTreatmentType.java      |    22 -
 .../htsjdk/samtools/cram/lossy/ReadCategory.java   |    50 -
 .../samtools/cram/lossy/ReadCategoryType.java      |    29 -
 .../samtools/cram/ref/CRAMReferenceSource.java     |    22 -
 .../htsjdk/samtools/cram/ref/EnaRefService.java    |   122 -
 .../cram/ref/InMemoryReferenceSequenceFile.java    |   102 -
 .../htsjdk/samtools/cram/ref/ReferenceRegion.java  |    93 -
 .../htsjdk/samtools/cram/ref/ReferenceSource.java  |   280 -
 .../htsjdk/samtools/cram/ref/ReferenceTracks.java  |   172 -
 .../samtools/cram/structure/AlignmentSpan.java     |    92 -
 .../java/htsjdk/samtools/cram/structure/Block.java |   323 -
 .../cram/structure/BlockCompressionMethod.java     |    22 -
 .../samtools/cram/structure/BlockContentType.java  |    22 -
 .../samtools/cram/structure/CompressionHeader.java |   299 -
 .../htsjdk/samtools/cram/structure/Container.java  |    81 -
 .../samtools/cram/structure/ContainerHeaderIO.java |    96 -
 .../samtools/cram/structure/ContainerIO.java       |   237 -
 .../cram/structure/CramCompressionRecord.java      |   348 -
 .../htsjdk/samtools/cram/structure/CramHeader.java |   123 -
 .../htsjdk/samtools/cram/structure/EncodingID.java |    64 -
 .../samtools/cram/structure/EncodingKey.java       |    40 -
 .../samtools/cram/structure/EncodingParams.java    |    39 -
 .../htsjdk/samtools/cram/structure/ReadTag.java    |   487 -
 .../java/htsjdk/samtools/cram/structure/Slice.java |   245 -
 .../htsjdk/samtools/cram/structure/SliceIO.java    |   153 -
 .../cram/structure/SubstitutionMatrix.java         |   179 -
 .../htsjdk/samtools/example/ExampleSamUsage.java   |   118 -
 .../htsjdk/samtools/example/PrintReadsExample.java |    98 -
 .../htsjdk/samtools/fastq/AsyncFastqWriter.java    |    20 -
 .../htsjdk/samtools/fastq/BasicFastqWriter.java    |    89 -
 .../java/htsjdk/samtools/fastq/FastqConstants.java |    49 -
 .../java/htsjdk/samtools/fastq/FastqReader.java    |   199 -
 .../java/htsjdk/samtools/fastq/FastqRecord.java    |   124 -
 .../java/htsjdk/samtools/fastq/FastqWriter.java    |    13 -
 .../htsjdk/samtools/fastq/FastqWriterFactory.java  |    31 -
 .../samtools/filter/AbstractJavascriptFilter.java  |   159 -
 .../htsjdk/samtools/filter/AggregateFilter.java    |    79 -
 .../java/htsjdk/samtools/filter/AlignedFilter.java |    87 -
 .../samtools/filter/DuplicateReadFilter.java       |    52 -
 .../filter/FailsVendorReadQualityFilter.java       |    57 -
 .../htsjdk/samtools/filter/FilteringIterator.java  |    53 -
 .../samtools/filter/FilteringSamIterator.java      |   155 -
 .../htsjdk/samtools/filter/InsertSizeFilter.java   |    31 -
 .../htsjdk/samtools/filter/IntervalFilter.java     |   102 -
 .../samtools/filter/IntervalKeepPairFilter.java    |   108 -
 .../samtools/filter/JavascriptSamRecordFilter.java |   101 -
 .../samtools/filter/MappingQualityFilter.java      |    25 -
 .../samtools/filter/NotPrimaryAlignmentFilter.java |    54 -
 .../samtools/filter/OverclippedReadFilter.java     |    76 -
 .../htsjdk/samtools/filter/ReadNameFilter.java     |   120 -
 .../htsjdk/samtools/filter/SamRecordFilter.java    |    53 -
 .../samtools/filter/SecondaryAlignmentFilter.java  |    20 -
 .../filter/SecondaryOrSupplementaryFilter.java     |    32 -
 .../htsjdk/samtools/filter/SolexaNoiseFilter.java  |    66 -
 .../java/htsjdk/samtools/filter/TagFilter.java     |    85 -
 .../samtools/filter/WholeReadClippedFilter.java    |    64 -
 src/main/java/htsjdk/samtools/liftover/Chain.java  |   414 -
 .../java/htsjdk/samtools/liftover/LiftOver.java    |   319 -
 src/main/java/htsjdk/samtools/metrics/Header.java  |    43 -
 .../java/htsjdk/samtools/metrics/MetricBase.java   |   125 -
 .../java/htsjdk/samtools/metrics/MetricsFile.java  |   594 -
 .../java/htsjdk/samtools/metrics/StringHeader.java |    72 -
 .../htsjdk/samtools/metrics/VersionHeader.java     |    81 -
 .../reference/AbstractFastaSequenceFile.java       |   158 -
 .../samtools/reference/FastaSequenceFile.java      |   172 -
 .../samtools/reference/FastaSequenceIndex.java     |   323 -
 .../reference/IndexedFastaSequenceFile.java        |   328 -
 .../samtools/reference/ReferenceSequence.java      |    84 -
 .../samtools/reference/ReferenceSequenceFile.java  |    90 -
 .../reference/ReferenceSequenceFileFactory.java    |   136 -
 .../reference/ReferenceSequenceFileWalker.java     |   111 -
 .../seekablestream/ByteArraySeekableStream.java    |    99 -
 .../seekablestream/ISeekableStreamFactory.java     |    33 -
 .../seekablestream/SeekableBufferedStream.java     |   132 -
 .../samtools/seekablestream/SeekableFTPStream.java |   120 -
 .../seekablestream/SeekableFTPStreamHelper.java    |   166 -
 .../seekablestream/SeekableFileStream.java         |   128 -
 .../seekablestream/SeekableHTTPStream.java         |   186 -
 .../seekablestream/SeekableMemoryStream.java       |    64 -
 .../seekablestream/SeekablePathStream.java         |   121 -
 .../samtools/seekablestream/SeekableStream.java    |    69 -
 .../seekablestream/SeekableStreamFactory.java      |    97 -
 .../samtools/seekablestream/UserPasswordInput.java |    31 -
 .../java/htsjdk/samtools/sra/ReferenceCache.java   |    46 -
 .../java/htsjdk/samtools/sra/SRAAccession.java     |   177 -
 .../htsjdk/samtools/sra/SRAAlignmentIterator.java  |   209 -
 .../samtools/sra/SRAIndexedSequenceFile.java       |   112 -
 .../java/htsjdk/samtools/sra/SRALazyRecord.java    |  1056 -
 .../samtools/sra/SRAUnalignmentIterator.java       |   181 -
 src/main/java/htsjdk/samtools/sra/SRAUtils.java    |    83 -
 .../htsjdk/samtools/util/AbstractAsyncWriter.java  |   137 -
 .../htsjdk/samtools/util/AbstractIterator.java     |    85 -
 .../htsjdk/samtools/util/AbstractLocusInfo.java    |   146 -
 .../samtools/util/AbstractLocusIterator.java       |   572 -
 .../samtools/util/AbstractProgressLogger.java      |   119 -
 .../samtools/util/AbstractRecordAndOffset.java     |   130 -
 .../java/htsjdk/samtools/util/AsciiWriter.java     |    83 -
 .../samtools/util/AsyncBufferedIterator.java       |   281 -
 .../java/htsjdk/samtools/util/BinaryCodec.java     |   670 -
 .../util/BlockCompressedFilePointerUtil.java       |   101 -
 .../samtools/util/BlockCompressedInputStream.java  |   513 -
 .../samtools/util/BlockCompressedOutputStream.java |   392 -
 .../util/BlockCompressedStreamConstants.java       |   118 -
 .../java/htsjdk/samtools/util/BlockGunzipper.java  |   132 -
 .../htsjdk/samtools/util/BufferedLineReader.java   |   115 -
 src/main/java/htsjdk/samtools/util/CigarUtil.java  |   294 -
 .../htsjdk/samtools/util/CloseableIterator.java    |    63 -
 src/main/java/htsjdk/samtools/util/CloserUtil.java |    81 -
 src/main/java/htsjdk/samtools/util/CodeUtil.java   |    14 -
 .../java/htsjdk/samtools/util/CollectionUtil.java  |   191 -
 .../java/htsjdk/samtools/util/ComparableTuple.java |    28 -
 src/main/java/htsjdk/samtools/util/CoordMath.java  |    76 -
 .../htsjdk/samtools/util/CoordSpanInputSteam.java  |   100 -
 .../samtools/util/CustomGzipOutputStream.java      |    24 -
 src/main/java/htsjdk/samtools/util/DateParser.java |   337 -
 .../htsjdk/samtools/util/DelegatingIterator.java   |    35 -
 .../java/htsjdk/samtools/util/DiskBackedQueue.java |   406 -
 .../htsjdk/samtools/util/EdgeReadIterator.java     |   228 -
 .../samtools/util/EdgingRecordAndOffset.java       |   219 -
 .../java/htsjdk/samtools/util/FastLineReader.java  |   171 -
 .../htsjdk/samtools/util/FastqQualityFormat.java   |    36 -
 .../samtools/util/FileAppendStreamLRUCache.java    |    78 -
 src/main/java/htsjdk/samtools/util/FormatUtil.java |   203 -
 src/main/java/htsjdk/samtools/util/Histogram.java  |   567 -
 src/main/java/htsjdk/samtools/util/HttpUtils.java  |    80 -
 src/main/java/htsjdk/samtools/util/IOUtil.java     |   946 -
 src/main/java/htsjdk/samtools/util/Interval.java   |   202 -
 .../java/htsjdk/samtools/util/IntervalList.java    |   790 -
 .../util/IntervalListReferenceSequenceMask.java    |   125 -
 .../java/htsjdk/samtools/util/IntervalTree.java    |  1227 -
 .../java/htsjdk/samtools/util/IntervalTreeMap.java |   331 -
 .../java/htsjdk/samtools/util/IntervalUtil.java    |    76 -
 .../java/htsjdk/samtools/util/Iso8601Date.java     |    65 -
 .../java/htsjdk/samtools/util/IterableAdapter.java |    29 -
 .../htsjdk/samtools/util/IterableOnceIterator.java |    42 -
 src/main/java/htsjdk/samtools/util/Iterables.java  |    24 -
 src/main/java/htsjdk/samtools/util/Lazy.java       |    40 -
 src/main/java/htsjdk/samtools/util/LineReader.java |    51 -
 src/main/java/htsjdk/samtools/util/ListMap.java    |    48 -
 src/main/java/htsjdk/samtools/util/Locatable.java  |    25 -
 .../java/htsjdk/samtools/util/LocationAware.java   |    26 -
 src/main/java/htsjdk/samtools/util/Locus.java      |    36 -
 .../java/htsjdk/samtools/util/LocusComparator.java |    41 -
 src/main/java/htsjdk/samtools/util/LocusImpl.java  |    49 -
 src/main/java/htsjdk/samtools/util/Log.java        |   214 -
 .../samtools/util/Md5CalculatingInputStream.java   |   133 -
 .../samtools/util/Md5CalculatingOutputStream.java  |   119 -
 .../java/htsjdk/samtools/util/MergingIterator.java |   145 -
 src/main/java/htsjdk/samtools/util/Murmur3.java    |   119 -
 .../java/htsjdk/samtools/util/OverlapDetector.java |   193 -
 .../java/htsjdk/samtools/util/PeekIterator.java    |    85 -
 .../htsjdk/samtools/util/PeekableIterator.java     |    79 -
 .../samtools/util/PositionalOutputStream.java      |    65 -
 .../java/htsjdk/samtools/util/ProcessExecutor.java |   243 -
 .../java/htsjdk/samtools/util/ProgressLogger.java  |    52 -
 .../samtools/util/ProgressLoggerInterface.java     |    38 -
 .../samtools/util/QualityEncodingDetector.java     |   405 -
 .../java/htsjdk/samtools/util/QualityUtil.java     |    77 -
 .../samtools/util/ReferenceSequenceMask.java       |    55 -
 .../htsjdk/samtools/util/RelativeIso8601Date.java  |   203 -
 .../htsjdk/samtools/util/ResourceLimitedMap.java   |   105 -
 .../samtools/util/ResourceLimitedMapFunctor.java   |    47 -
 .../htsjdk/samtools/util/RuntimeEOFException.java  |    46 -
 .../htsjdk/samtools/util/RuntimeIOException.java   |    46 -
 .../samtools/util/RuntimeScriptException.java      |    45 -
 .../htsjdk/samtools/util/SamLocusIterator.java     |   292 -
 .../util/SamRecordIntervalIteratorFactory.java     |   157 -
 .../samtools/util/SamRecordTrackingBuffer.java     |   321 -
 .../htsjdk/samtools/util/SamRecordWithOrdinal.java |    56 -
 .../java/htsjdk/samtools/util/SequenceUtil.java    |  1031 -
 .../java/htsjdk/samtools/util/SnappyLoader.java    |   127 -
 .../samtools/util/SolexaQualityConverter.java      |   129 -
 .../htsjdk/samtools/util/SortingCollection.java    |   514 -
 .../samtools/util/SortingLongCollection.java       |   349 -
 src/main/java/htsjdk/samtools/util/StopWatch.java  |    76 -
 .../htsjdk/samtools/util/StringLineReader.java     |    99 -
 src/main/java/htsjdk/samtools/util/StringUtil.java |   603 -
 .../htsjdk/samtools/util/TempStreamFactory.java    |    83 -
 src/main/java/htsjdk/samtools/util/TestUtil.java   |    98 -
 .../java/htsjdk/samtools/util/TrimmingUtil.java    |    67 -
 src/main/java/htsjdk/samtools/util/Tuple.java      |    41 -
 .../util/WholeGenomeReferenceSequenceMask.java     |    80 -
 .../java/htsjdk/samtools/util/ftp/FTPClient.java   |   240 -
 .../java/htsjdk/samtools/util/ftp/FTPReply.java    |   113 -
 .../java/htsjdk/samtools/util/ftp/FTPStream.java   |    53 -
 .../java/htsjdk/samtools/util/ftp/FTPUtils.java    |   154 -
 .../htsjdk/samtools/util/zip/DeflaterFactory.java  |    48 -
 .../java/htsjdk/tribble/AbstractFeatureCodec.java  |    50 -
 .../java/htsjdk/tribble/AbstractFeatureReader.java |   193 -
 .../java/htsjdk/tribble/AsciiFeatureCodec.java     |    92 -
 .../java/htsjdk/tribble/BinaryFeatureCodec.java    |    52 -
 .../htsjdk/tribble/CloseableTribbleIterator.java   |    27 -
 src/main/java/htsjdk/tribble/Feature.java          |    43 -
 src/main/java/htsjdk/tribble/FeatureCodec.java     |   136 -
 .../java/htsjdk/tribble/FeatureCodecHeader.java    |    83 -
 src/main/java/htsjdk/tribble/FeatureReader.java    |    41 -
 src/main/java/htsjdk/tribble/NameAwareCodec.java   |    37 -
 src/main/java/htsjdk/tribble/SimpleFeature.java    |    53 -
 .../java/htsjdk/tribble/TabixFeatureReader.java    |   217 -
 src/main/java/htsjdk/tribble/Tribble.java          |   100 -
 src/main/java/htsjdk/tribble/TribbleException.java |   139 -
 .../tribble/TribbleIndexedFeatureReader.java       |   573 -
 .../java/htsjdk/tribble/annotation/Strand.java     |    52 -
 src/main/java/htsjdk/tribble/bed/BEDCodec.java     |   242 -
 src/main/java/htsjdk/tribble/bed/BEDFeature.java   |    55 -
 .../java/htsjdk/tribble/bed/FullBEDFeature.java    |   433 -
 .../java/htsjdk/tribble/bed/SimpleBEDFeature.java  |   140 -
 .../java/htsjdk/tribble/example/CountRecords.java  |   200 -
 .../htsjdk/tribble/example/ExampleBinaryCodec.java |   128 -
 .../java/htsjdk/tribble/example/IndexToTable.java  |    72 -
 .../htsjdk/tribble/example/IndicesAreEqual.java    |    76 -
 .../tribble/example/ProfileIndexReading.java       |    66 -
 .../exception/CodecLineParsingException.java       |    50 -
 .../tribble/exception/UnsortedFileException.java   |    45 -
 .../htsjdk/tribble/gelitext/DiploidGenotype.java   |    66 -
 .../htsjdk/tribble/gelitext/GeliTextCodec.java     |   117 -
 .../htsjdk/tribble/gelitext/GeliTextFeature.java   |   148 -
 .../java/htsjdk/tribble/index/AbstractIndex.java   |   451 -
 src/main/java/htsjdk/tribble/index/Block.java      |    82 -
 src/main/java/htsjdk/tribble/index/ChrIndex.java   |    55 -
 .../htsjdk/tribble/index/DynamicIndexCreator.java  |   209 -
 src/main/java/htsjdk/tribble/index/Index.java      |    99 -
 .../java/htsjdk/tribble/index/IndexCreator.java    |    57 -
 .../java/htsjdk/tribble/index/IndexFactory.java    |   515 -
 .../java/htsjdk/tribble/index/MutableIndex.java    |    36 -
 .../htsjdk/tribble/index/TribbleIndexCreator.java  |    53 -
 .../htsjdk/tribble/index/interval/Interval.java    |   115 -
 .../index/interval/IntervalIndexCreator.java       |   159 -
 .../tribble/index/interval/IntervalTree.java       |   551 -
 .../tribble/index/interval/IntervalTreeIndex.java  |   214 -
 .../htsjdk/tribble/index/linear/LinearIndex.java   |   434 -
 .../tribble/index/linear/LinearIndexCreator.java   |   126 -
 .../htsjdk/tribble/index/tabix/TabixFormat.java    |   109 -
 .../htsjdk/tribble/index/tabix/TabixIndex.java     |   366 -
 .../tribble/index/tabix/TabixIndexCreator.java     |   202 -
 .../htsjdk/tribble/readers/AsciiLineReader.java    |   185 -
 .../tribble/readers/AsciiLineReaderIterator.java   |   101 -
 .../java/htsjdk/tribble/readers/LineIterator.java  |    12 -
 .../htsjdk/tribble/readers/LineIteratorImpl.java   |    34 -
 .../java/htsjdk/tribble/readers/LineReader.java    |    43 -
 .../htsjdk/tribble/readers/LineReaderUtil.java     |    56 -
 .../tribble/readers/LongLineBufferedReader.java    |   490 -
 .../java/htsjdk/tribble/readers/Positional.java    |    60 -
 .../tribble/readers/PositionalBufferedStream.java  |   229 -
 .../tribble/readers/SynchronousLineReader.java     |    61 -
 .../tribble/readers/TabixIteratorLineReader.java   |    54 -
 .../java/htsjdk/tribble/readers/TabixReader.java   |   526 -
 src/main/java/htsjdk/tribble/readme.txt            |     1 -
 src/main/java/htsjdk/tribble/util/FTPHelper.java   |    55 -
 src/main/java/htsjdk/tribble/util/HTTPHelper.java  |   152 -
 .../tribble/util/LittleEndianInputStream.java      |   144 -
 .../tribble/util/LittleEndianOutputStream.java     |   120 -
 src/main/java/htsjdk/tribble/util/MathUtils.java   |    66 -
 .../java/htsjdk/tribble/util/ParsingUtils.java     |   478 -
 .../java/htsjdk/tribble/util/RemoteURLHelper.java  |    55 -
 src/main/java/htsjdk/tribble/util/TabixUtils.java  |   115 -
 src/main/java/htsjdk/tribble/util/URLHelper.java   |    56 -
 .../util/popgen/HardyWeinbergCalculation.java      |   149 -
 src/main/java/htsjdk/variant/bcf2/BCF2Codec.java   |   491 -
 src/main/java/htsjdk/variant/bcf2/BCF2Decoder.java |   362 -
 .../variant/bcf2/BCF2GenotypeFieldDecoders.java    |   278 -
 .../variant/bcf2/BCF2LazyGenotypesDecoder.java     |    99 -
 src/main/java/htsjdk/variant/bcf2/BCF2Type.java    |   214 -
 src/main/java/htsjdk/variant/bcf2/BCF2Utils.java   |   336 -
 src/main/java/htsjdk/variant/bcf2/BCFVersion.java  |   105 -
 .../variant/example/PrintVariantsExample.java      |   103 -
 .../java/htsjdk/variant/utils/GeneralUtils.java    |   246 -
 .../utils/SAMSequenceDictionaryExtractor.java      |   137 -
 .../java/htsjdk/variant/variantcontext/Allele.java |   546 -
 .../htsjdk/variant/variantcontext/CommonInfo.java  |   341 -
 .../variant/variantcontext/FastGenotype.java       |   173 -
 .../htsjdk/variant/variantcontext/Genotype.java    |   670 -
 .../variant/variantcontext/GenotypeBuilder.java    |   421 -
 .../variantcontext/GenotypeJEXLContext.java        |    59 -
 .../variantcontext/GenotypeLikelihoods.java        |   578 -
 .../variant/variantcontext/GenotypeType.java       |    47 -
 .../variant/variantcontext/GenotypesContext.java   |   719 -
 .../htsjdk/variant/variantcontext/JEXLMap.java     |   228 -
 .../variantcontext/JexlMissingValueTreatment.java  |    39 -
 .../variantcontext/LazyGenotypesContext.java       |   226 -
 .../variantcontext/StructuralVariantType.java      |    47 -
 .../variant/variantcontext/VariantContext.java     |  1734 --
 .../variantcontext/VariantContextBuilder.java      |   498 -
 .../variantcontext/VariantContextComparator.java   |   105 -
 .../variantcontext/VariantContextUtils.java        |   483 -
 .../variant/variantcontext/VariantJEXLContext.java |   102 -
 .../variantcontext/filter/CompoundFilter.java      |    74 -
 .../variantcontext/filter/FilteringIterator.java   |    47 -
 .../filter/FilteringVariantContextIterator.java    |   127 -
 .../filter/GenotypeQualityFilter.java              |    79 -
 .../filter/HeterozygosityFilter.java               |    84 -
 .../filter/JavascriptVariantFilter.java            |    97 -
 .../filter/PassingVariantFilter.java               |    44 -
 .../variant/variantcontext/filter/SnpFilter.java   |    44 -
 .../filter/VariantContextFilter.java               |    43 -
 .../writer/AsyncVariantContextWriter.java          |    54 -
 .../variant/variantcontext/writer/BCF2Encoder.java |   261 -
 .../variantcontext/writer/BCF2FieldEncoder.java    |   455 -
 .../variantcontext/writer/BCF2FieldWriter.java     |   323 -
 .../writer/BCF2FieldWriterManager.java             |   180 -
 .../variant/variantcontext/writer/BCF2Writer.java  |   443 -
 .../writer/IndexingVariantContextWriter.java       |   180 -
 .../writer/IntGenotypeFieldAccessors.java          |    97 -
 .../variant/variantcontext/writer/Options.java     |    41 -
 .../writer/SortingVariantContextWriter.java        |    66 -
 .../writer/SortingVariantContextWriterBase.java    |   201 -
 .../variant/variantcontext/writer/VCFWriter.java   |   231 -
 .../writer/VariantContextWriter.java               |    51 -
 .../writer/VariantContextWriterBuilder.java        |   537 -
 .../writer/VariantContextWriterFactory.java        |   282 -
 .../java/htsjdk/variant/vcf/AbstractVCFCodec.java  |   791 -
 src/main/java/htsjdk/variant/vcf/VCF3Codec.java    |   134 -
 src/main/java/htsjdk/variant/vcf/VCFCodec.java     |   161 -
 .../htsjdk/variant/vcf/VCFCompoundHeaderLine.java  |   301 -
 src/main/java/htsjdk/variant/vcf/VCFConstants.java |   130 -
 .../htsjdk/variant/vcf/VCFContigHeaderLine.java    |   118 -
 src/main/java/htsjdk/variant/vcf/VCFEncoder.java   |   382 -
 .../java/htsjdk/variant/vcf/VCFFileReader.java     |   153 -
 .../htsjdk/variant/vcf/VCFFilterHeaderLine.java    |    79 -
 .../htsjdk/variant/vcf/VCFFormatHeaderLine.java    |    63 -
 src/main/java/htsjdk/variant/vcf/VCFHeader.java    |   574 -
 .../java/htsjdk/variant/vcf/VCFHeaderLine.java     |   174 -
 .../htsjdk/variant/vcf/VCFHeaderLineCount.java     |    33 -
 .../variant/vcf/VCFHeaderLineTranslator.java       |   183 -
 .../java/htsjdk/variant/vcf/VCFHeaderLineType.java |    33 -
 .../java/htsjdk/variant/vcf/VCFHeaderVersion.java  |   138 -
 .../java/htsjdk/variant/vcf/VCFIDHeaderLine.java   |    31 -
 .../java/htsjdk/variant/vcf/VCFInfoHeaderLine.java |    61 -
 .../java/htsjdk/variant/vcf/VCFRecordCodec.java    |    64 -
 .../htsjdk/variant/vcf/VCFSimpleHeaderLine.java    |   127 -
 .../htsjdk/variant/vcf/VCFStandardHeaderLines.java |   233 -
 src/main/java/htsjdk/variant/vcf/VCFUtils.java     |   209 -
 .../htsjdk/cram/io/ExternalCompressionTest.java    |    30 -
 .../htsjdk/samtools/AbstractBAMFileIndexTest.java  |    62 -
 .../java/htsjdk/samtools/BAMCigarOverflowTest.java |    29 -
 .../java/htsjdk/samtools/BAMFileIndexTest.java     |   527 -
 .../java/htsjdk/samtools/BAMFileWriterTest.java    |   192 -
 .../java/htsjdk/samtools/BAMIndexWriterTest.java   |   227 -
 src/test/java/htsjdk/samtools/BAMIteratorTest.java |    71 -
 ...AMQueryMultipleIntervalsIteratorFilterTest.java |   146 -
 .../java/htsjdk/samtools/BAMRemoteFileTest.java    |   327 -
 src/test/java/htsjdk/samtools/BinTest.java         |    39 -
 .../java/htsjdk/samtools/CRAMBAIIndexerTest.java   |    87 -
 .../java/htsjdk/samtools/CRAMCRAIIndexerTest.java  |   183 -
 .../java/htsjdk/samtools/CRAMComplianceTest.java   |   150 -
 .../samtools/CRAMContainerStreamWriterTest.java    |   184 -
 .../java/htsjdk/samtools/CRAMEdgeCasesTest.java    |   158 -
 .../java/htsjdk/samtools/CRAMFileBAIIndexTest.java |   301 -
 .../htsjdk/samtools/CRAMFileCRAIIndexTest.java     |   368 -
 .../java/htsjdk/samtools/CRAMFileReaderTest.java   |   231 -
 .../java/htsjdk/samtools/CRAMFileWriterTest.java   |   282 -
 .../samtools/CRAMFileWriterWithIndexTest.java      |   209 -
 .../java/htsjdk/samtools/CRAMIndexQueryTest.java   |   708 -
 src/test/java/htsjdk/samtools/ChunkTest.java       |    78 -
 src/test/java/htsjdk/samtools/CigarCodecTest.java  |   110 -
 src/test/java/htsjdk/samtools/CigarTest.java       |   118 -
 .../htsjdk/samtools/DownsamplingIteratorTests.java |    87 -
 .../htsjdk/samtools/DuplicateSetIteratorTest.java  |    63 -
 .../java/htsjdk/samtools/GenomicIndexUtilTest.java |    50 -
 ...MergingSamRecordIteratorGroupCollisionTest.java |   528 -
 .../samtools/MergingSamRecordIteratorTest.java     |   312 -
 .../htsjdk/samtools/ProgramRecordChainingTest.java |    57 -
 .../samtools/SAMBinaryTagAndValueUnitTest.java     |   183 -
 src/test/java/htsjdk/samtools/SAMCloneTest.java    |    52 -
 .../htsjdk/samtools/SAMFileWriterFactoryTest.java  |   307 -
 src/test/java/htsjdk/samtools/SAMFlagTest.java     |    42 -
 .../java/htsjdk/samtools/SAMIntegerTagTest.java    |   375 -
 .../samtools/SAMRecordDuplicateComparatorTest.java |   233 -
 .../java/htsjdk/samtools/SAMRecordUnitTest.java    |  1041 -
 .../samtools/SAMSequenceDictionaryCodecTest.java   |   122 -
 .../htsjdk/samtools/SAMSequenceDictionaryTest.java |   147 -
 .../java/htsjdk/samtools/SAMTextReaderTest.java    |   137 -
 .../java/htsjdk/samtools/SAMTextWriterTest.java    |   130 -
 src/test/java/htsjdk/samtools/SAMUtilsTest.java    |   250 -
 .../htsjdk/samtools/SamFileHeaderMergerTest.java   |   265 -
 src/test/java/htsjdk/samtools/SamFilesTest.java    |    91 -
 .../java/htsjdk/samtools/SamFlagFieldTest.java     |   150 -
 .../samtools/SamHeaderRecordComparatorTest.java    |    72 -
 src/test/java/htsjdk/samtools/SamIndexesTest.java  |   193 -
 src/test/java/htsjdk/samtools/SamPairUtilTest.java |   251 -
 .../java/htsjdk/samtools/SamReaderFactoryTest.java |   468 -
 .../java/htsjdk/samtools/SamReaderSortTest.java    |   102 -
 src/test/java/htsjdk/samtools/SamReaderTest.java   |   170 -
 src/test/java/htsjdk/samtools/SamSpecIntTest.java  |    97 -
 src/test/java/htsjdk/samtools/SamStreamsTest.java  |   124 -
 .../SequenceNameTruncationAndValidationTest.java   |    98 -
 .../java/htsjdk/samtools/ValidateSamFileTest.java  |   547 -
 .../java/htsjdk/samtools/cram/CRAIEntryTest.java   |   144 -
 .../java/htsjdk/samtools/cram/CRAIIndexTest.java   |   220 -
 .../samtools/cram/LosslessRoundTripTest.java       |    68 -
 .../java/htsjdk/samtools/cram/VersionTest.java     |   106 -
 .../cram/build/CompressionHeaderFactoryTest.java   |   208 -
 .../samtools/cram/build/ContainerFactoryTest.java  |   134 -
 .../samtools/cram/build/ContainerParserTest.java   |   185 -
 .../htsjdk/samtools/cram/build/CramIOTest.java     |    82 -
 .../cram/encoding/huffman/codec/HuffmanTest.java   |   106 -
 .../samtools/cram/encoding/rans/RansTest.java      |   228 -
 .../java/htsjdk/samtools/cram/io/ITF8Test.java     |   101 -
 .../java/htsjdk/samtools/cram/io/LTF8Test.java     |    80 -
 .../cram/lossy/QualityScorePreservationTest.java   |   162 -
 .../samtools/cram/ref/EnaRefServiceTest.java       |    15 -
 .../cram/structure/CramCompressionRecordTest.java  |    68 -
 .../samtools/cram/structure/ReadTagTest.java       |   138 -
 .../htsjdk/samtools/cram/structure/SliceTests.java |    70 -
 .../cram/structure/SubstitutionMatrixTest.java     |   105 -
 .../htsjdk/samtools/fastq/FastqRecordTest.java     |   204 -
 .../htsjdk/samtools/fastq/FastqWriterTest.java     |    73 -
 .../filter/FailsVendorReadQualityFilterTest.java   |    65 -
 .../samtools/filter/InsertSizeFilterTest.java      |    43 -
 .../filter/IntervalKeepPairFilterTest.java         |   123 -
 .../filter/JavascriptSamRecordFilterTest.java      |    74 -
 .../samtools/filter/MappingQualityFilterTest.java  |    39 -
 .../samtools/filter/OverclippedReadFilterTest.java |    83 -
 .../samtools/filter/SolexaNoiseFilterTest.java     |    73 -
 .../java/htsjdk/samtools/filter/TagFilterTest.java |    77 -
 .../htsjdk/samtools/liftover/LiftOverTest.java     |   468 -
 .../htsjdk/samtools/metrics/MetricBaseTest.java    |    75 -
 .../htsjdk/samtools/metrics/MetricsFileTest.java   |   213 -
 .../htsjdk/samtools/metrics/StringHeaderTest.java  |    19 -
 .../htsjdk/samtools/metrics/VersionHeaderTest.java |    22 -
 .../reference/FakeReferenceSequenceFile.java       |    77 -
 .../samtools/reference/FastaSequenceFileTest.java  |    85 -
 .../samtools/reference/FastaSequenceIndexTest.java |   256 -
 .../reference/InMemoryReferenceSequenceFile.java   |    66 -
 .../reference/IndexedFastaSequenceFileTest.java    |   308 -
 .../ReferenceSequenceFileFactoryTests.java         |    39 -
 .../reference/ReferenceSequenceFileWalkerTest.java |    73 -
 .../samtools/reference/ReferenceSequenceTests.java |    98 -
 .../seekablestream/SeekableBufferedStreamTest.java |   162 -
 .../seekablestream/SeekableFTPStreamTest.java      |   106 -
 .../seekablestream/SeekableFileStreamTest.java     |    52 -
 .../seekablestream/SeekableMemoryStreamTest.java   |    93 -
 .../seekablestream/SeekablePathStreamTest.java     |    51 -
 .../seekablestream/SeekableStreamFactoryTest.java  |    45 -
 .../java/htsjdk/samtools/sra/AbstractSRATest.java  |    89 -
 .../java/htsjdk/samtools/sra/SRAAccessionTest.java |    28 -
 .../java/htsjdk/samtools/sra/SRAIndexTest.java     |   134 -
 .../htsjdk/samtools/sra/SRALazyRecordTest.java     |    51 -
 .../java/htsjdk/samtools/sra/SRAQueryTest.java     |    73 -
 .../java/htsjdk/samtools/sra/SRAReferenceTest.java |    95 -
 src/test/java/htsjdk/samtools/sra/SRATest.java     |   434 -
 .../samtools/util/AbstractLocusInfoTest.java       |    79 -
 .../util/AbstractLocusIteratorTestTemplate.java    |    68 -
 .../samtools/util/AbstractRecordAndOffsetTest.java |    63 -
 .../samtools/util/AsyncBufferedIteratorTest.java   |   115 -
 .../java/htsjdk/samtools/util/AsyncWriterTest.java |    77 -
 .../java/htsjdk/samtools/util/BinaryCodecTest.java |   287 -
 .../util/BlockCompressedFilePointerUtilTest.java   |    96 -
 .../util/BlockCompressedOutputStreamTest.java      |   214 -
 .../util/BlockCompressedTerminatorTest.java        |    59 -
 .../java/htsjdk/samtools/util/CigarUtilTest.java   |   143 -
 .../samtools/util/CloseableIteratorTest.java       |    31 -
 .../java/htsjdk/samtools/util/CodeUtilTest.java    |    15 -
 .../htsjdk/samtools/util/ComparableTupleTest.java  |    61 -
 .../samtools/util/CoordSpanInputSteamTest.java     |   108 -
 .../htsjdk/samtools/util/DiskBackedQueueTest.java  |   132 -
 .../htsjdk/samtools/util/EdgeReadIteratorTest.java |   402 -
 .../samtools/util/EdgingRecordAndOffsetTest.java   |    94 -
 .../java/htsjdk/samtools/util/HistogramTest.java   |   366 -
 .../htsjdk/samtools/util/IntervalListTest.java     |   520 -
 .../htsjdk/samtools/util/IntervalTreeMapTest.java  |    55 -
 .../htsjdk/samtools/util/IntervalTreeTest.java     |   187 -
 src/test/java/htsjdk/samtools/util/IoUtilTest.java |   190 -
 .../java/htsjdk/samtools/util/Iso8601DateTest.java |    57 -
 src/test/java/htsjdk/samtools/util/IupacTest.java  |    77 -
 .../htsjdk/samtools/util/MergingIteratorTest.java  |   175 -
 .../htsjdk/samtools/util/OverlapDetectorTest.java  |   240 -
 .../samtools/util/PositionalOutputStreamTest.java  |    62 -
 .../samtools/util/QualityEncodingDetectorTest.java |   109 -
 .../samtools/util/RelativeIso8601DateTest.java     |    53 -
 .../htsjdk/samtools/util/SamLocusIteratorTest.java |   673 -
 .../htsjdk/samtools/util/SequenceUtilTest.java     |   453 -
 .../samtools/util/SolexaQualityConverterTest.java  |    86 -
 .../samtools/util/SortingCollectionTest.java       |   230 -
 .../samtools/util/SortingLongCollectionTest.java   |   119 -
 .../htsjdk/samtools/util/StringLineReaderTest.java |   119 -
 .../java/htsjdk/samtools/util/StringUtilTest.java  |   122 -
 .../htsjdk/samtools/util/TrimmingUtilTest.java     |    70 -
 src/test/java/htsjdk/samtools/util/TupleTest.java  |    62 -
 .../htsjdk/tribble/AbstractFeatureReaderTest.java  |   112 -
 .../java/htsjdk/tribble/BinaryFeaturesTest.java    |    62 -
 .../java/htsjdk/tribble/FeatureReaderTest.java     |   168 -
 src/test/java/htsjdk/tribble/TestUtils.java        |    28 -
 .../tribble/TribbleIndexFeatureReaderTest.java     |    88 -
 src/test/java/htsjdk/tribble/TribbleTest.java      |    31 -
 src/test/java/htsjdk/tribble/bed/BEDCodecTest.java |   240 -
 .../java/htsjdk/tribble/gelitext/GeliTextTest.java |   100 -
 .../htsjdk/tribble/index/IndexFactoryTest.java     |   120 -
 src/test/java/htsjdk/tribble/index/IndexTest.java  |    97 -
 .../tribble/index/interval/IntervalTreeTest.java   |   153 -
 .../tribble/index/linear/LinearIndexTest.java      |   243 -
 .../htsjdk/tribble/index/tabix/TabixIndexTest.java |   144 -
 .../tribble/readers/AsciiLineReaderTest.java       |    52 -
 .../readers/LongLineBufferedReaderTest.java        |    32 -
 .../readers/PositionalBufferedStreamTest.java      |   121 -
 .../java/htsjdk/tribble/readers/ReaderTest.java    |   183 -
 .../readers/SynchronousLineReaderUnitTest.java     |    39 -
 .../htsjdk/tribble/readers/TabixReaderTest.java    |   162 -
 .../java/htsjdk/tribble/util/ParsingUtilsTest.java |   163 -
 .../htsjdk/tribble/util/ftp/FTPClientTest.java     |   247 -
 .../java/htsjdk/tribble/util/ftp/FTPUtilsTest.java |    31 -
 .../util/popgen/HardyWeinbergCalculationTest.java  |    41 -
 .../htsjdk/variant/PrintVariantsExampleTest.java   |    65 -
 src/test/java/htsjdk/variant/VariantBaseTest.java  |   278 -
 .../variant/bcf2/BCF2EncoderDecoderUnitTest.java   |   587 -
 .../htsjdk/variant/bcf2/BCF2UtilsUnitTest.java     |   228 -
 .../utils/SAMSequenceDictionaryExtractorTest.java  |    65 -
 .../variant/variantcontext/AlleleUnitTest.java     |   262 -
 .../variantcontext/GenotypeBuilderTest.java        |    75 -
 .../GenotypeLikelihoodsUnitTest.java               |   337 -
 .../variant/variantcontext/GenotypeUnitTest.java   |   107 -
 .../variantcontext/GenotypesContextUnitTest.java   |   318 -
 .../variantcontext/VariantContextBuilderTest.java  |    65 -
 .../variantcontext/VariantContextTestProvider.java |  1014 -
 .../variantcontext/VariantContextUnitTest.java     |  1621 -
 .../variantcontext/VariantJEXLContextUnitTest.java |   312 -
 .../variantcontext/filter/AllFailFilter.java       |    41 -
 .../variantcontext/filter/AllPassFilter.java       |    41 -
 .../variantcontext/filter/CompoundFilterTest.java  |    78 -
 .../FilteringVariantContextIteratorTest.java       |    88 -
 .../filter/GenotypeQualityFilterTest.java          |   105 -
 .../filter/HeterozygosityFilterTest.java           |   128 -
 .../filter/JavascriptVariantFilterTest.java        |    72 -
 .../filter/PassingVariantFilterTest.java           |    46 -
 .../variantcontext/filter/SnpFilterTest.java       |    54 -
 .../writer/TabixOnTheFlyIndexCreationTest.java     |    66 -
 .../variantcontext/writer/VCFWriterUnitTest.java   |   280 -
 .../VariantContextWriterBuilderUnitTest.java       |   399 -
 .../writer/VariantContextWritersUnitTest.java      |   163 -
 .../htsjdk/variant/vcf/AbstractVCFCodecTest.java   |    60 -
 .../htsjdk/variant/vcf/IndexFactoryUnitTest.java   |    96 -
 .../variant/vcf/VCFCompoundHeaderLineUnitTest.java |    46 -
 .../java/htsjdk/variant/vcf/VCFEncoderTest.java    |   125 -
 .../vcf/VCFHeaderLineTranslatorUnitTest.java       |    62 -
 .../htsjdk/variant/vcf/VCFHeaderLineUnitTest.java  |    43 -
 .../java/htsjdk/variant/vcf/VCFHeaderUnitTest.java |   563 -
 .../vcf/VCFStandardHeaderLinesUnitTest.java        |   204 -
 .../BAMCigarOverflowTest/CigarOverflowTest.bam     |   Bin 662 -> 0 bytes
 .../samtools/BAMFileIndexTest/index_test.bam       |   Bin 594149 -> 0 bytes
 .../samtools/BAMFileIndexTest/index_test.bam.bai   |   Bin 1621416 -> 0 bytes
 .../BAMFileIndexTest/symlink_with_index.bam        |     1 -
 .../BAMFileIndexTest/symlink_with_index.bam.bai    |     1 -
 .../symlink_without_linked_index.bam               |     1 -
 .../SAMIntegerTagTest/variousAttributes.bam        |   Bin 258 -> 0 bytes
 .../SAMIntegerTagTest/variousAttributes.sam        |     4 -
 .../SamFileHeaderMergerTest/Chromosome1to10.bam    |   Bin 3708 -> 0 bytes
 .../SamFileHeaderMergerTest/Chromosome5to9.bam     |   Bin 1991 -> 0 bytes
 .../case1/chr11sub_file1.sam                       |     5 -
 .../case1/chr11sub_file2.sam                       |    11 -
 .../case1/expected_output.sam                      |    13 -
 .../case2/chr11sub_file1.sam                       |     9 -
 .../case2/chr11sub_file2.sam                       |     7 -
 .../case2/chr11sub_file3.sam                       |     9 -
 .../case2/chr11sub_file4.sam                       |     5 -
 .../case2/expected_output.sam                      |    21 -
 .../SamFileHeaderMergerTest/unsorted_input/1.sam   |    11 -
 .../SamFileHeaderMergerTest/unsorted_input/2.sam   |    11 -
 .../reference_with_lower_and_uppercase.dict        |     3 -
 .../reference_with_lower_and_uppercase.fasta       |     4 -
 .../reference_with_lower_and_uppercase.fasta.fai   |     2 -
 .../SequenceUtil/upper_and_lowercase_read.sam      |    10 -
 .../samtools/ValidateSamFileTest/bad_index.bai     |   Bin 1621416 -> 0 bytes
 .../samtools/ValidateSamFileTest/bad_index.bam     |   Bin 594149 -> 0 bytes
 .../samtools/ValidateSamFileTest/buggyHeader.sam   |    30 -
 .../samtools/ValidateSamFileTest/duplicate_rg.sam  |    11 -
 .../ValidateSamFileTest/duplicated_reads.sam       |    17 -
 .../duplicated_reads_out_of_order.sam              |    17 -
 .../samtools/ValidateSamFileTest/hanging_tab.sam   |     3 -
 .../inappropriate_mate_cigar_string.sam            |    13 -
 .../invalid_coord_sort_order.sam                   |    27 -
 .../invalid_mate_cigar_string.sam                  |    19 -
 .../ValidateSamFileTest/invalid_platform_unit.sam  |    21 -
 .../invalid_queryname_sort_order.sam               |    27 -
 .../ValidateSamFileTest/mate_cigar_and_no_oqs.sam  |     4 -
 .../ValidateSamFileTest/mate_cigar_and_oqs.sam     |     4 -
 .../ValidateSamFileTest/missing_fields.sam         |     3 -
 .../ValidateSamFileTest/missing_platform_unit.sam  |    10 -
 .../test_samfile_version_1pt5.bam                  |   Bin 259 -> 0 bytes
 .../samtools/ValidateSamFileTest/truncated.bam     |   Bin 336031 -> 0 bytes
 .../ValidateSamFileTest/truncated_quals.sam        |     4 -
 .../samtools/ValidateSamFileTest/truncated_tag.sam |     4 -
 .../htsjdk/samtools/ValidateSamFileTest/valid.sam  |    21 -
 .../ValidateSamFileTest/zero_length_read.sam       |     3 -
 .../htsjdk/samtools/block_compressed.sam.gz        |   Bin 257 -> 0 bytes
 src/test/resources/htsjdk/samtools/compressed.bam  |   Bin 307 -> 0 bytes
 .../resources/htsjdk/samtools/compressed.sam.gz    |   Bin 238 -> 0 bytes
 .../htsjdk/samtools/coordinate_sorted.sam          |    15 -
 .../cram/CRAMException/testContigNotInRef.cram     |   Bin 3433 -> 0 bytes
 .../cram/CRAMException/testContigNotInRef.cram.bai |   Bin 96 -> 0 bytes
 .../cram/CRAMException/testContigNotInRef.dict     |     2 -
 .../cram/CRAMException/testContigNotInRef.fa       |     2 -
 .../cram/CRAMException/testContigNotInRef.fa.fai   |     1 -
 .../cram/CRAMException/testContigNotInRef.fasta    |     2 -
 ...78.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram |   Bin 47259 -> 0 bytes
 ....21.1-100.100-SeqsPerSlice.0-unMapped.cram.crai |   Bin 81 -> 0 bytes
 ...78.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram |   Bin 47796 -> 0 bytes
 ....21.1-100.100-SeqsPerSlice.1-unMapped.cram.crai |   Bin 94 -> 0 bytes
 ....20.21.1-100.100-SeqsPerSlice.500-unMapped.cram |   Bin 77664 -> 0 bytes
 ...1.1-100.100-SeqsPerSlice.500-unMapped.cram.crai |   Bin 124 -> 0 bytes
 .../htsjdk/samtools/cram/auxf#values.2.1.cram      |   Bin 11427 -> 0 bytes
 .../htsjdk/samtools/cram/auxf#values.3.0.cram      |   Bin 1586 -> 0 bytes
 .../resources/htsjdk/samtools/cram/auxf#values.sam |     5 -
 .../htsjdk/samtools/cram/auxf.alteredForMD5test.fa |     2 -
 .../samtools/cram/auxf.alteredForMD5test.fa.fai    |     1 -
 src/test/resources/htsjdk/samtools/cram/auxf.fa    |     2 -
 .../resources/htsjdk/samtools/cram/auxf.fa.fai     |     1 -
 .../htsjdk/samtools/cram/c1#bounds.2.1.cram        |   Bin 10508 -> 0 bytes
 .../htsjdk/samtools/cram/c1#bounds.3.0.cram        |   Bin 642 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#bounds.sam   |     4 -
 .../htsjdk/samtools/cram/c1#clip.2.1.cram          |   Bin 10630 -> 0 bytes
 .../htsjdk/samtools/cram/c1#clip.3.0.cram          |   Bin 771 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#clip.sam     |     8 -
 .../htsjdk/samtools/cram/c1#noseq.2.1.cram         |   Bin 10652 -> 0 bytes
 .../htsjdk/samtools/cram/c1#noseq.3.0.cram         |   Bin 797 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#noseq.sam    |    10 -
 .../htsjdk/samtools/cram/c1#pad1.2.1.cram          |   Bin 10623 -> 0 bytes
 .../htsjdk/samtools/cram/c1#pad1.3.0.cram          |   Bin 761 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#pad1.sam     |    10 -
 .../htsjdk/samtools/cram/c1#pad2.2.1.cram          |   Bin 10658 -> 0 bytes
 .../htsjdk/samtools/cram/c1#pad2.3.0.cram          |   Bin 796 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#pad2.sam     |    14 -
 .../htsjdk/samtools/cram/c1#pad3.2.1.cram          |   Bin 10697 -> 0 bytes
 .../htsjdk/samtools/cram/c1#pad3.3.0.cram          |   Bin 848 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#pad3.sam     |    14 -
 .../htsjdk/samtools/cram/c1#unknown.2.1.cram       |   Bin 10784 -> 0 bytes
 .../htsjdk/samtools/cram/c1#unknown.3.0.cram       |   Bin 949 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c1#unknown.sam  |     9 -
 src/test/resources/htsjdk/samtools/cram/c1.fa      |     2 -
 src/test/resources/htsjdk/samtools/cram/c1.fa.fai  |     1 -
 .../resources/htsjdk/samtools/cram/c2#pad.2.1.cram |   Bin 11077 -> 0 bytes
 .../resources/htsjdk/samtools/cram/c2#pad.3.0.cram |   Bin 1070 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#1.2.1.cram   |   Bin 10746 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#1.3.0.cram   |   Bin 895 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/ce#1.sam   |     2 -
 .../resources/htsjdk/samtools/cram/ce#2.2.1.cram   |   Bin 10839 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#2.3.0.cram   |   Bin 988 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/ce#2.sam   |     3 -
 .../resources/htsjdk/samtools/cram/ce#5.2.1.cram   |   Bin 11221 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#5.3.0.cram   |   Bin 1130 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/ce#5.sam   |    11 -
 .../resources/htsjdk/samtools/cram/ce#5b.2.1.cram  |   Bin 12668 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#5b.3.0.cram  |   Bin 2669 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/ce#5b.sam  |    12 -
 .../htsjdk/samtools/cram/ce#large_seq.2.1.cram     |   Bin 101355 -> 0 bytes
 .../htsjdk/samtools/cram/ce#large_seq.3.0.cram     |   Bin 84800 -> 0 bytes
 .../htsjdk/samtools/cram/ce#large_seq.sam          |     3 -
 .../htsjdk/samtools/cram/ce#supp.2.1.cram          |   Bin 10649 -> 0 bytes
 .../htsjdk/samtools/cram/ce#supp.3.0.cram          |   Bin 809 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#supp.sam     |     6 -
 .../htsjdk/samtools/cram/ce#tag_depadded.2.1.cram  |   Bin 11114 -> 0 bytes
 .../htsjdk/samtools/cram/ce#tag_depadded.3.0.cram  |   Bin 1258 -> 0 bytes
 .../htsjdk/samtools/cram/ce#tag_depadded.sam       |    11 -
 .../htsjdk/samtools/cram/ce#tag_padded.2.1.cram    |   Bin 10922 -> 0 bytes
 .../htsjdk/samtools/cram/ce#tag_padded.3.0.cram    |   Bin 1082 -> 0 bytes
 .../htsjdk/samtools/cram/ce#tag_padded.sam         |    11 -
 .../htsjdk/samtools/cram/ce#unmap.2.1.cram         |   Bin 10503 -> 0 bytes
 .../htsjdk/samtools/cram/ce#unmap.3.0.cram         |   Bin 601 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#unmap.sam    |     6 -
 .../htsjdk/samtools/cram/ce#unmap1.2.1.cram        |   Bin 11730 -> 0 bytes
 .../htsjdk/samtools/cram/ce#unmap1.3.0.cram        |   Bin 1505 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#unmap1.sam   |    20 -
 .../htsjdk/samtools/cram/ce#unmap2.2.1.cram        |   Bin 12587 -> 0 bytes
 .../htsjdk/samtools/cram/ce#unmap2.3.0.cram        |   Bin 2404 -> 0 bytes
 .../resources/htsjdk/samtools/cram/ce#unmap2.sam   |    29 -
 src/test/resources/htsjdk/samtools/cram/ce.fa      | 20803 -------------
 src/test/resources/htsjdk/samtools/cram/ce.fa.fai  |     7 -
 .../htsjdk/samtools/cram/cramQueryTest.cram        |   Bin 2863 -> 0 bytes
 .../htsjdk/samtools/cram/cramQueryTest.cram.bai    |   Bin 336 -> 0 bytes
 .../htsjdk/samtools/cram/cramQueryTestEmpty.cram   |   Bin 2183 -> 0 bytes
 .../samtools/cram/cramQueryTestEmpty.cram.bai      |   Bin 48 -> 0 bytes
 .../htsjdk/samtools/cram/cramQueryWithBAI.cram     |   Bin 8947 -> 0 bytes
 .../htsjdk/samtools/cram/cramQueryWithBAI.cram.bai |   Bin 152 -> 0 bytes
 .../htsjdk/samtools/cram/cramQueryWithCRAI.cram    |   Bin 4131 -> 0 bytes
 .../samtools/cram/cramQueryWithCRAI.cram.crai      |   Bin 59 -> 0 bytes
 .../resources/htsjdk/samtools/cram/fieldarith.sam  |    15 -
 .../samtools/cram/human_g1k_v37.20.21.1-100.dict   |     3 -
 .../samtools/cram/human_g1k_v37.20.21.1-100.fasta  |    11 -
 .../cram/human_g1k_v37.20.21.1-100.fasta.fai       |     2 -
 .../cram/human_g1k_v37.20.21.10M-10M200k.dict      |     3 -
 .../cram/human_g1k_v37.20.21.10M-10M200k.fasta     |  5002 ---
 .../cram/human_g1k_v37.20.21.10M-10M200k.fasta.fai |     2 -
 .../htsjdk/samtools/cram/io/bzip2-test.bz2         |   Bin 56 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/test.cram  |   Bin 3433 -> 0 bytes
 .../resources/htsjdk/samtools/cram/test.cram.bai   |   Bin 96 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/test.dict  |     2 -
 src/test/resources/htsjdk/samtools/cram/test.fa    |     2 -
 .../resources/htsjdk/samtools/cram/test.fa.fai     |     1 -
 src/test/resources/htsjdk/samtools/cram/test2.cram |   Bin 3433 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/test2.dict |     2 -
 src/test/resources/htsjdk/samtools/cram/test2.fa   |     2 -
 .../resources/htsjdk/samtools/cram/test2.fa.fai    |     1 -
 .../htsjdk/samtools/cram/xx#blank.2.1.cram         |   Bin 10080 -> 0 bytes
 .../htsjdk/samtools/cram/xx#blank.3.0.cram         |   Bin 140 -> 0 bytes
 .../htsjdk/samtools/cram/xx#large_aux.2.1.cram     |   Bin 35824 -> 0 bytes
 .../htsjdk/samtools/cram/xx#large_aux.3.0.cram     |   Bin 20418 -> 0 bytes
 .../htsjdk/samtools/cram/xx#large_aux.sam          |     4 -
 .../htsjdk/samtools/cram/xx#large_aux2.2.1.cram    |   Bin 10868 -> 0 bytes
 .../htsjdk/samtools/cram/xx#large_aux2.3.0.cram    |   Bin 1008 -> 0 bytes
 .../htsjdk/samtools/cram/xx#large_aux2.sam         |    11 -
 .../htsjdk/samtools/cram/xx#minimal.2.1.cram       |   Bin 10995 -> 0 bytes
 .../htsjdk/samtools/cram/xx#minimal.3.0.cram       |   Bin 1096 -> 0 bytes
 .../resources/htsjdk/samtools/cram/xx#minimal.sam  |    10 -
 .../htsjdk/samtools/cram/xx#pair.2.1.cram          |   Bin 10454 -> 0 bytes
 .../htsjdk/samtools/cram/xx#pair.3.0.cram          |   Bin 590 -> 0 bytes
 .../resources/htsjdk/samtools/cram/xx#pair.sam     |     7 -
 .../resources/htsjdk/samtools/cram/xx#rg.2.1.cram  |   Bin 10643 -> 0 bytes
 .../resources/htsjdk/samtools/cram/xx#rg.3.0.cram  |   Bin 794 -> 0 bytes
 src/test/resources/htsjdk/samtools/cram/xx#rg.sam  |    13 -
 .../htsjdk/samtools/cram/xx#tlen.2.1.cram          |   Bin 11312 -> 0 bytes
 .../htsjdk/samtools/cram/xx#tlen.3.0.cram          |   Bin 1296 -> 0 bytes
 .../htsjdk/samtools/cram/xx#tlen2.2.1.cram         |   Bin 11380 -> 0 bytes
 .../htsjdk/samtools/cram/xx#tlen2.3.0.cram         |   Bin 1359 -> 0 bytes
 .../htsjdk/samtools/cram/xx#triplet.2.1.cram       |   Bin 10853 -> 0 bytes
 .../htsjdk/samtools/cram/xx#triplet.3.0.cram       |   Bin 950 -> 0 bytes
 .../resources/htsjdk/samtools/cram/xx#triplet.sam  |     7 -
 .../htsjdk/samtools/cram/xx#unsorted.2.1.cram      |   Bin 11131 -> 0 bytes
 .../htsjdk/samtools/cram/xx#unsorted.3.0.cram      |   Bin 1262 -> 0 bytes
 .../resources/htsjdk/samtools/cram/xx#unsorted.sam |     8 -
 src/test/resources/htsjdk/samtools/cram/xx.fa      |     5 -
 src/test/resources/htsjdk/samtools/cram/xx.fa.fai  |     2 -
 .../htsjdk/samtools/cram_query_sorted.cram         |   Bin 13266 -> 0 bytes
 .../htsjdk/samtools/cram_query_sorted.fasta        |    40 -
 .../htsjdk/samtools/cram_query_sorted.fasta.fai    |     8 -
 src/test/resources/htsjdk/samtools/cram_tlen.fasta |    41 -
 .../resources/htsjdk/samtools/cram_tlen.fasta.fai  |     8 -
 .../htsjdk/samtools/cram_tlen_reads.sorted.sam     |    19 -
 .../htsjdk/samtools/cram_with_bai_index.cram       |   Bin 4213 -> 0 bytes
 .../htsjdk/samtools/cram_with_bai_index.cram.bai   |   Bin 336 -> 0 bytes
 .../htsjdk/samtools/cram_with_crai_index.cram      |   Bin 4213 -> 0 bytes
 .../htsjdk/samtools/cram_with_crai_index.cram.crai |   Bin 77 -> 0 bytes
 src/test/resources/htsjdk/samtools/empty.bai       |   Bin 8 -> 0 bytes
 src/test/resources/htsjdk/samtools/empty.bam       |   Bin 90 -> 0 bytes
 .../htsjdk/samtools/empty_no_empty_gzip_block.bai  |   Bin 8 -> 0 bytes
 .../htsjdk/samtools/empty_no_empty_gzip_block.bam  |   Bin 62 -> 0 bytes
 src/test/resources/htsjdk/samtools/hg19mini.dict   |     5 -
 src/test/resources/htsjdk/samtools/hg19mini.fasta  |   804 -
 .../resources/htsjdk/samtools/hg19mini.fasta.fai   |     4 -
 .../intervallist/IntervalListFromVCFTest.vcf       |    53 -
 .../IntervalListFromVCFTestComp.interval_list      |     7 -
 ...ntervalListFromVCFTestCompInverse.interval_list |    10 -
 ...lListFromVCFTestCompInverseManual.interval_list |    10 -
 .../intervallist/IntervalListFromVCFTestManual.vcf |    57 -
 ...IntervalListFromVCFTestManualComp.interval_list |    12 -
 .../IntervalListchr123_empty.interval_list         |     4 -
 src/test/resources/htsjdk/samtools/inttest.bam     |   Bin 329 -> 0 bytes
 src/test/resources/htsjdk/samtools/inttest.sam     |    26 -
 .../resources/htsjdk/samtools/io/5newline5.txt     |     2 -
 .../resources/htsjdk/samtools/io/slurptest.txt     |     3 -
 src/test/resources/htsjdk/samtools/issue76.bam     |   Bin 5121 -> 0 bytes
 src/test/resources/htsjdk/samtools/issue76.bam.bai |   Bin 776 -> 0 bytes
 .../htsjdk/samtools/liftover/hg18ToHg19.over.chain | 30850 -------------------
 .../htsjdk/samtools/metrics/metricsOne.metrics     |    13 -
 .../htsjdk/samtools/metrics/metricsOneCopy.metrics |    13 -
 .../metrics/metricsOneModifiedHistogram.metrics    |    14 -
 .../metrics/metricsOneModifiedMetrics.metrics      |    13 -
 .../resources/htsjdk/samtools/queryname_sorted.sam |    15 -
 .../resources/htsjdk/samtools/readWithBadRname.sam |     6 -
 .../reference/Homo_sapiens_assembly18.fasta.fai    |    45 -
 .../reference/Homo_sapiens_assembly18.trimmed.dict |     3 -
 .../Homo_sapiens_assembly18.trimmed.fasta          | 16946 ----------
 .../Homo_sapiens_assembly18.trimmed.fasta.fai      |     2 -
 .../Homo_sapiens_assembly18.trimmed.nodict.fasta   | 16946 ----------
 ...omo_sapiens_assembly18.trimmed.nodict.fasta.fai |     2 -
 .../Homo_sapiens_assembly18.trimmed.noindex.fasta  | 16946 ----------
 .../reference_with_trailing_whitespace.dict        |     3 -
 .../reference_with_trailing_whitespace.fasta       |     4 -
 .../htsjdk/samtools/reference/testing.fai          |     7 -
 src/test/resources/htsjdk/samtools/roundtrip.sam   |    16 -
 src/test/resources/htsjdk/samtools/samFilter01.js  |     2 -
 src/test/resources/htsjdk/samtools/samFilter02.js  |     9 -
 .../samtools/seekablestream/megabyteZeros.dat      |   Bin 1000000 -> 0 bytes
 .../htsjdk/samtools/seekablestream/seekTest.txt    |     5 -
 .../htsjdk/samtools/sequenceWithSpace.bam          |   Bin 391 -> 0 bytes
 .../htsjdk/samtools/sequenceWithSpace.sam          |     6 -
 .../htsjdk/samtools/serialization_test.bam         |   Bin 339 -> 0 bytes
 .../htsjdk/samtools/serialization_test.bam.bai     |   Bin 120 -> 0 bytes
 .../htsjdk/samtools/serialization_test.sam         |     8 -
 .../resources/htsjdk/samtools/sra/test_archive.sra |   Bin 1099831 -> 0 bytes
 .../resources/htsjdk/samtools/uncompressed.sam     |    15 -
 src/test/resources/htsjdk/samtools/unsorted.sam    |    15 -
 .../5k-30BB2AAXX.3.aligned.sam.fastq               | 19808 ------------
 .../illumina-as-standard.bam                       |   Bin 652 -> 0 bytes
 .../QualityEncodingDetectorTest/s_1_sequence.txt   |    40 -
 .../solexa-as-standard.bam                         |   Bin 944 -> 0 bytes
 .../solexa_full_range_as_solexa.fastq              |     8 -
 .../util/QualityEncodingDetectorTest/unmapped.sam  |    12 -
 .../htsjdk/samtools/util/defective_bgzf.bam        |   Bin 359 -> 0 bytes
 .../htsjdk/samtools/util/no_bgzf_terminator.bam    |   Bin 354 -> 0 bytes
 .../htsjdk/samtools/util/whitespace_text_file.txt  |     6 -
 src/test/resources/htsjdk/tribble/Tb.vcf.idx       |   Bin 998966 -> 0 bytes
 src/test/resources/htsjdk/tribble/basicDbSNP.dbsnp |    43 -
 ....deletions.10kbp.het.gq99.hand_curated.hg19.bed |    35 -
 ...ions.10kbp.het.gq99.hand_curated.hg19_fixed.bed |    36 -
 .../htsjdk/tribble/bed/Unigene.sample.bed          |    72 -
 .../resources/htsjdk/tribble/bed/disconcontigs.bed |     5 -
 src/test/resources/htsjdk/tribble/bed/unsorted.bed |     5 -
 .../resources/htsjdk/tribble/complexExample.vcf    |    23 -
 src/test/resources/htsjdk/tribble/fakeBed.bed      |    51 -
 src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz   |   Bin 351859 -> 0 bytes
 .../resources/htsjdk/tribble/fakeVCF.vcf.gz.tbi    |   Bin 170 -> 0 bytes
 src/test/resources/htsjdk/tribble/gwas/smallp.gwas |    20 -
 .../htsjdk/tribble/index/chrY_Y4_small.bed         |  5000 ---
 src/test/resources/htsjdk/tribble/large.txt        |   165 -
 src/test/resources/htsjdk/tribble/sites.bed        |  1000 -
 src/test/resources/htsjdk/tribble/soapsnp.txt      |    24 -
 .../resources/htsjdk/tribble/split/test.bin.part1  |   Bin 16000 -> 0 bytes
 .../resources/htsjdk/tribble/split/test.bin.part2  |   Bin 16000 -> 0 bytes
 .../resources/htsjdk/tribble/split/test.bin.part3  |   Bin 16000 -> 0 bytes
 .../resources/htsjdk/tribble/split/test.bin.split  |     3 -
 .../tabix/YRI.trio.2010_07.indel.sites.vcf.gz      |   Bin 250626 -> 0 bytes
 .../tabix/YRI.trio.2010_07.indel.sites.vcf.gz.tbi  |   Bin 32877 -> 0 bytes
 .../htsjdk/tribble/tabix/bigger.vcf.gz.tbi         |   Bin 595996 -> 0 bytes
 .../htsjdk/tribble/tabix/testTabixIndex.vcf        |    51 -
 .../htsjdk/tribble/tabix/testTabixIndex.vcf.gz     |   Bin 372 -> 0 bytes
 .../resources/htsjdk/tribble/tabix/trioDup.vcf     |    75 -
 .../resources/htsjdk/tribble/tabix/trioDup.vcf.gz  |   Bin 1353 -> 0 bytes
 .../htsjdk/tribble/tabix/trioDup.vcf.gz.tbi        |   Bin 324 -> 0 bytes
 .../resources/htsjdk/tribble/test with spaces.vcf  |    24 -
 src/test/resources/htsjdk/tribble/test.bed         |     9 -
 src/test/resources/htsjdk/tribble/test.gff         |     9 -
 .../resources/htsjdk/tribble/test.tabix.bed.gz     |   Bin 116 -> 0 bytes
 .../resources/htsjdk/tribble/test.tabix.bed.gz.tbi |   Bin 121 -> 0 bytes
 src/test/resources/htsjdk/tribble/test.vcf         |    24 -
 src/test/resources/htsjdk/tribble/test.vcf.bgz     |   Bin 849 -> 0 bytes
 src/test/resources/htsjdk/tribble/test.vcf.gz      |   Bin 822 -> 0 bytes
 src/test/resources/htsjdk/tribble/testGeliText.txt |    50 -
 .../resources/htsjdk/tribble/testIntervalList.list |     6 -
 src/test/resources/htsjdk/tribble/trio.vcf         |   100 -
 src/test/resources/htsjdk/tribble/trio.vcf.idx     |   Bin 495 -> 0 bytes
 src/test/resources/htsjdk/tribble/trioDup.vcf      |    75 -
 src/test/resources/htsjdk/tribble/vcfexample.vcf   |    12 -
 .../resources/htsjdk/tribble/vcfexample.vcf.gz     |   Bin 471 -> 0 bytes
 .../resources/htsjdk/tribble/vcfexample.vcf.gz.tbi |   Bin 114 -> 0 bytes
 .../htsjdk/tribble/vcfexample.vcf.truncated.gz     |   Bin 470 -> 0 bytes
 .../htsjdk/tribble/vcfexample.vcf.truncated.hdr.gz |   Bin 460 -> 0 bytes
 src/test/resources/htsjdk/variant/HiSeq.10000.vcf  | 10001 ------
 ...baseline.20111114.both.exome.genotypes.1000.vcf |   249 -
 .../resources/htsjdk/variant/VCF4HeaderTest.vcf    |    42 -
 .../resources/htsjdk/variant/VQSR.mixedTest.recal  |    32 -
 src/test/resources/htsjdk/variant/breakpoint.vcf   |     6 -
 .../htsjdk/variant/dbsnp_135.b37.1000.vcf          |   249 -
 .../htsjdk/variant/diagnosis_targets_testfile.vcf  |   117 -
 src/test/resources/htsjdk/variant/ex2.bgzf.bcf.csi |   Bin 130 -> 0 bytes
 src/test/resources/htsjdk/variant/ex2.vcf          |    23 -
 .../htsjdk/variant/serialization_test.bcf          |   Bin 7490 -> 0 bytes
 .../htsjdk/variant/serialization_test.bcf.idx      |   Bin 1146 -> 0 bytes
 .../htsjdk/variant/structuralvariants.vcf          |    22 -
 .../Homo_sapiens_assembly18.trimmed.dict           |     3 -
 .../Homo_sapiens_assembly18.trimmed.fasta          | 16946 ----------
 .../Homo_sapiens_assembly18.trimmed.fasta.fai      |     2 -
 .../ScreenSamReads.100.input.sam                   |    21 -
 .../empty.interval_list                            |     4 -
 .../SamSequenceDictionaryExtractor/test1.dict      |     3 -
 .../utils/SamSequenceDictionaryExtractor/test1.vcf |    53 -
 .../SamSequenceDictionaryExtractor/test1.vcf.idx   |   Bin 2283 -> 0 bytes
 .../test1_comp.interval_list                       |     8 -
 .../test2_comp.interval_list                       |     7 -
 .../test3_comp.interval_list                       |    24 -
 .../test4_comp.interval_list                       |    25 -
 .../resources/htsjdk/variant/variantFilter01.js    |     2 -
 .../resources/htsjdk/variant/variantFilter02.js    |    20 -
 .../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl  |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl   |   Bin 2004 -> 0 bytes
 .../Intensities/BaseCalls/L001/s_1_1101.filter     |   Bin 2012 -> 0 bytes
 .../125T125T/Data/Intensities/L001/s_1_1101.clocs  |   Bin 4359 -> 0 bytes
 .../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl  |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl   |   Bin 64 -> 0 bytes
 .../Intensities/BaseCalls/L001/s_1_1101.filter     |   Bin 72 -> 0 bytes
 .../sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam  |    10 -
 .../sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam  |     6 -
 .../sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam  |    10 -
 .../sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam  |    10 -
 .../sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam  |    12 -
 .../sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam  |    16 -
 .../sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam  |    12 -
 .../sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam  |    12 -
 .../sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam  |    14 -
 .../sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam  |    16 -
 .../sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam  |    12 -
 .../sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam  |    12 -
 .../net/sf/picard/illumina/25T8B25T/sams/N.sam     |    34 -
 .../sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam  |     6 -
 .../sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam  |     8 -
 src/test/resources/testng.xml                      |    20 -
 test/Makefile                                      |    66 +
 test/align-cache/CSRA_file                         |   Bin 0 -> 154937 bytes
 test/align-cache/Makefile                          |    60 +
 test/align-cache/valgrind.suppress                 |     6 +
 test/align-info/Makefile                           |    48 +
 test/copycat/Makefile                              |    60 +
 test/copycat/input/1.xml                           |     5 +
 test/fastdump/Makefile                             |    53 +
 test/fastdump/copy-default-kfg.sh                  |    12 +
 test/fastdump/test_no_1.sh                         |    49 +
 test/fastdump/test_no_2.sh                         |    49 +
 test/fastq-loader/.gitignore                       |     1 +
 test/fastq-loader/Makefile                         |   217 +
 test/fastq-loader/expected/1.1.stdout              |    30 +
 test/fastq-loader/expected/1.2.stdout              |    30 +
 test/fastq-loader/expected/1.3.stderr              |     4 +
 test/fastq-loader/expected/1.3.stdout              |    27 +
 test/fastq-loader/expected/1.4.stdout              |    90 +
 test/fastq-loader/expected/10.0.stdout             |    30 +
 test/fastq-loader/expected/11.0.stdout             |    30 +
 test/fastq-loader/expected/11.1.stdout             |    30 +
 test/fastq-loader/expected/12.0.stdout             |    60 +
 test/fastq-loader/expected/12.1.stdout             |    60 +
 test/fastq-loader/expected/12.2.stdout             |    30 +
 test/fastq-loader/expected/13.0.stdout             |    90 +
 test/fastq-loader/expected/13.1.stdout             |    90 +
 test/fastq-loader/expected/14.0.stdout             |    30 +
 test/fastq-loader/expected/15.0.stderr             |     1 +
 test/fastq-loader/expected/15.0.stdout             |    30 +
 test/fastq-loader/expected/2.1.1.stdout            |    44 +
 test/fastq-loader/expected/2.1.stdout              |    60 +
 test/fastq-loader/expected/2.5.stdout              |    60 +
 test/fastq-loader/expected/2.6.stdout              |    30 +
 test/fastq-loader/expected/2.7.stdout              |    30 +
 test/fastq-loader/expected/2.8.1.stdout            |    60 +
 test/fastq-loader/expected/2.8.stdout              |    60 +
 test/fastq-loader/expected/2.9.1.stderr            |     5 +
 test/fastq-loader/expected/2.9.stderr              |     5 +
 test/fastq-loader/expected/3.1.stdout              |   120 +
 test/fastq-loader/expected/4.2.stdout              |    30 +
 test/fastq-loader/expected/4.3.1.stderr            |    14 +
 test/fastq-loader/expected/4.4.stdout              |    66 +
 test/fastq-loader/expected/4.5.1.stderr            |     8 +
 test/fastq-loader/expected/4.5.stderr              |     9 +
 test/fastq-loader/expected/4.6.1.stderr            |     3 +
 test/fastq-loader/expected/4.6.stdout              |    30 +
 test/fastq-loader/expected/4.7.stderr              |     2 +
 test/fastq-loader/expected/5.0.stdout              |    30 +
 test/fastq-loader/expected/6.0.stdout              |   390 +
 test/fastq-loader/expected/7.1.stdout              |    60 +
 test/fastq-loader/expected/7.2.stdout              |    60 +
 test/fastq-loader/expected/7.3.stdout              |    60 +
 test/fastq-loader/expected/8.0.stdout              |    30 +
 test/fastq-loader/expected/8.1.stderr              |     5 +
 test/fastq-loader/expected/9.0.stdout              |    60 +
 test/fastq-loader/input/1.1.fastq                  |     5 +
 test/fastq-loader/input/1.2.fastq                  |     5 +
 test/fastq-loader/input/1.3.fastq                  |     5 +
 test/fastq-loader/input/1.4.fastq                  |    24 +
 test/fastq-loader/input/10.0.fastq                 |     4 +
 test/fastq-loader/input/11.0.1.fasta               |     2 +
 test/fastq-loader/input/11.0.2.fasta               |     2 +
 test/fastq-loader/input/11.1.1.fastq               |     4 +
 test/fastq-loader/input/11.1.2.fastq               |     4 +
 test/fastq-loader/input/12.0.fastq                 |     8 +
 test/fastq-loader/input/12.1.fastq                 |     8 +
 test/fastq-loader/input/12.2.fastq                 |     4 +
 test/fastq-loader/input/13.0.fastq                 |    12 +
 test/fastq-loader/input/13.1.fastq                 |    12 +
 test/fastq-loader/input/14.0.fasta                 |     2 +
 test/fastq-loader/input/15.0.fastq                 |     4 +
 test/fastq-loader/input/2.1.1.fastq                |     5 +
 test/fastq-loader/input/2.1.fastq                  |     4 +
 test/fastq-loader/input/2.2.fastq                  |     4 +
 test/fastq-loader/input/2.3.fastq                  |     8 +
 test/fastq-loader/input/2.4.fastq                  |     8 +
 test/fastq-loader/input/2.5.fastq                  |     9 +
 test/fastq-loader/input/2.6.fastq                  |     9 +
 test/fastq-loader/input/2.7.fastq                  |     8 +
 test/fastq-loader/input/2.8.1.fastq                |     4 +
 test/fastq-loader/input/2.8.fastq                  |     4 +
 test/fastq-loader/input/2.9.1.fastq                |     4 +
 test/fastq-loader/input/2.9.fastq                  |     4 +
 test/fastq-loader/input/3.1a.fastq                 |     8 +
 test/fastq-loader/input/3.1b.fastq                 |     9 +
 test/fastq-loader/input/3.2a.fastq                 |     8 +
 test/fastq-loader/input/3.2b.fastq                 |     8 +
 test/fastq-loader/input/3.3a.fastq                 |     8 +
 test/fastq-loader/input/3.3b.fastq                 |     8 +
 test/fastq-loader/input/4.4.fastq                  |    13 +
 test/fastq-loader/input/4.5.1.fastq                |    10 +
 test/fastq-loader/input/4.5.fastq                  |    10 +
 test/fastq-loader/input/4.fastq                    |     5 +
 test/fastq-loader/input/5.0.fastq.gz               |   Bin 0 -> 139 bytes
 test/fastq-loader/input/6.0.fastq                  |    52 +
 test/fastq-loader/input/7.1.fastq                  |     9 +
 test/fastq-loader/input/7.2.fastq                  |     8 +
 test/fastq-loader/input/7.3.fastq                  |     8 +
 test/fastq-loader/input/8.0.fastq                  |     9 +
 test/fastq-loader/input/8.1.fastq                  |    17 +
 test/fastq-loader/input/9.0.fastq                  |    16 +
 test/fastq-loader/runtestcase.sh                   |   106 +
 test/fastq-loader/test-fastq-loader.cpp            |   229 +
 test/fastq-loader/wb-test-fastq.cpp                |  1384 +
 test/fuse/Makefile                                 |    79 +
 test/fuse/cfg/standard.cfg                         |    26 +
 test/fuse/kart-util.sh                             |   166 +
 test/fuse/remote-fuser-test.c                      |   794 +
 test/fuse/remote-fuser-test.vers                   |     1 +
 test/fuse/remote-fuser-test.vers.h                 |     1 +
 test/fuse/remote_fuser_clean.sh                    |   404 +
 test/fuse/remote_fuser_common.sh                   |   282 +
 test/fuse/remote_fuser_test.sh                     |   516 +
 test/fuse/utils.c                                  |   867 +
 test/fuse/utils.h                                  |   120 +
 test/general-loader/.gitignore                     |     2 +
 test/general-loader/Makefile                       |   187 +
 test/general-loader/expected/1.stdout              |    75 +
 test/general-loader/expected/1override.stdout      |    75 +
 test/general-loader/expected/1packed.stdout        |    75 +
 test/general-loader/expected/2.stderr              |     2 +
 test/general-loader/expected/2packed.stderr        |     2 +
 test/general-loader/expected/3.stdout              |    16 +
 test/general-loader/expected/3packed.stdout        |    16 +
 test/general-loader/expected/4.stdout              |   160 +
 test/general-loader/expected/4packed.stdout        |   160 +
 test/general-loader/expected/5packed.stdout        |    16 +
 test/general-loader/expected/6.stdout              |     1 +
 test/general-loader/expected/6packed.stdout        |     1 +
 test/general-loader/input/column01                 |     2 +
 test/general-loader/input/column02                 |     2 +
 test/general-loader/makeinputs.cpp                 |   226 +
 test/general-loader/runtestcase.sh                 |   108 +
 test/general-loader/schema/.gitignore              |     4 +
 test/general-loader/test-general-loader.cpp        |  1683 +
 test/general-loader/test-general-writer.cpp        |   341 +
 test/general-loader/test-gw-dumper.cpp             |    80 +
 test/general-loader/testsource.cpp                 |   758 +
 test/general-loader/testsource.hpp                 |   177 +
 test/kar/Makefile                                  |    56 +
 test/kar/acc.txt                                   |   756 +
 test/kar/expected/1.0.stdout                       |    35 +
 .../ftp/.gitignore => test/kar/input/1.0/1.md5     |     0
 .../.gitignore => test/kar/input/1.0/col/sub1/idx  |     0
 .../.gitignore => test/kar/input/1.0/col/sub1/idx0 |     0
 .../.gitignore => test/kar/input/1.0/col/sub1/idx1 |     0
 .../kar/input/1.0/col/sub1/idx2                    |     0
 .../empty.txt => test/kar/input/1.0/col/sub1/idx3  |     0
 .../tmp/.gitignore => test/kar/input/1.0/idx/4a    |     0
 .../tmp/.gitignore => test/kar/input/1.0/idx/4b    |     0
 .../.gitignore => test/kar/input/1.0/idx/sub/4c    |     0
 .../.gitignore => test/kar/input/1.0/idx/sub/4d    |     0
 .../ftp/.gitignore => test/kar/input/1.0/md/cur    |     0
 .../util/ftp/.gitignore => test/kar/input/1.0/md5  |     0
 .../kar/input/1.0/sub1/col/sub1/idx                |     0
 .../kar/input/1.0/sub1/col/sub1/idx0               |     0
 .../kar/input/1.0/sub1/col/sub1/idx1               |     0
 .../kar/input/1.0/sub1/col/sub1/idx2               |     0
 .../kar/input/1.0/sub1/col/sub1/idx3               |     0
 .../.gitignore => test/kar/input/1.0/sub1/md/cur   |     0
 .../kar/input/1.0/sub1/sub2/col/sub1/idx           |     0
 .../kar/input/1.0/sub1/sub2/col/sub1/idx0          |     0
 .../kar/input/1.0/sub1/sub2/col/sub1/idx1          |     0
 .../kar/input/1.0/sub1/sub2/col/sub1/idx2          |     0
 .../kar/input/1.0/sub1/sub2/col/sub1/idx3          |     0
 test/kar/kar-srr-test.sh                           |    81 +
 test/kar/kar-test.sh                               |   400 +
 test/kar/old-kar                                   |     1 +
 test/kar/source/alias_subdir/d1/subdir_f_alias     |     1 +
 test/kar/source/alias_subdir/f1                    |     1 +
 test/kar/source/d1/d1f1                            |     1 +
 test/kar/source/d1/d1f2                            |     1 +
 test/kar/source/d1/d1f3                            |     1 +
 test/kar/source/d2/d1/d2f1                         |     1 +
 test/kar/source/d2/d1/d2f2                         |     1 +
 test/kar/source/d2/d1/d2f3                         |     1 +
 test/kar/source/d3/d2/d1/d3f1                      |     1 +
 test/kar/source/d3/d2/d1/d3f2                      |     1 +
 test/kar/source/d3/d2/d1/d3f3                      |     1 +
 test/kar/source/f1                                 |     1 +
 test/kar/source/f2                                 |     1 +
 test/kar/source/f3                                 |     1 +
 test/kar/source/local_d_alias                      |     1 +
 test/kar/source/local_f_alias                      |     1 +
 test/kar/source/local_f_subdir_alias               |     1 +
 test/kget/.gitignore                               |     3 +
 test/kget/Makefile                                 |    66 +
 test/kget/resolver.kfg                             |     1 +
 test/kget/test_kget.py                             |   175 +
 test/network-test/Makefile                         |    99 +
 test/network-test/analyze_strace_log.py            |   128 +
 test/network-test/network-test.c                   |   105 +
 test/network-test/network-test.vers                |     1 +
 test/network-test/network-testing.c                |   436 +
 test/network-test/network-testing.h                |    42 +
 test/ngs-pileup/Makefile                           |   137 +
 test/ngs-pileup/runtestcase.sh                     |    90 +
 test/ngs-pileup/test-ngs-pileup.cpp                |   177 +
 test/pileup-stats/Makefile                         |    66 +
 test/pileup-stats/test-ignore-args.sh              |    55 +
 test/pileup-stats/valgrind.suppress                |     6 +
 test/qual-recalib-stat/Makefile                    |    49 +
 test/samline/Makefile                              |   115 +
 test/samline/alig-gen.c                            |   656 +
 test/samline/bx_tag_test.py                        |    27 +
 test/samline/ca_test.py                            |    80 +
 test/samline/cigar.c                               |   446 +
 test/samline/cigar.h                               |    59 +
 test/samline/example.sh                            |    61 +
 test/samline/refbases.c                            |   184 +
 test/samline/refbases.h                            |    43 +
 test/samline/reject_multi_refnames.sh              |    62 +
 test/samline/sam.py                                |   339 +
 test/samline/samline.vers                          |     1 +
 test/samline/sampart.c                             |   304 +
 test/samline/sampart.vers                          |     1 +
 test/samline/sec_align_problem.sh                  |    76 +
 test/sra-pileup/Makefile                           |    49 +
 test/srapath/Makefile                              |    49 +
 test/tarballs/build.xml                            |    27 +
 test/tarballs/test-tarballs.bat                    |    42 +
 test/tarballs/test-tarballs.sh                     |    97 +
 test/vcf-loader/Makefile                           |    76 +
 test/vcf-loader/only-remote-repository.kfg         |     2 +
 test/vcf-loader/test-vcf-loader.cpp                |   862 +
 test/vdb-copy/Makefile                             |    49 +
 test/vdb-dump/Makefile                             |   104 +
 test/vdb-dump/expected/1.0.stdout                  |     1 +
 test/vdb-dump/expected/1.1.stdout                  |     1 +
 test/vdb-dump/expected/2.0.stdout                  |    15 +
 test/vdb-dump/expected/2.1.stdout                  |     4 +
 test/vdb-dump/expected/2.2.stdout                  |     4 +
 test/vdb-dump/makedb.cpp                           |   229 +
 test/vdb-validate/Makefile                         |    66 +
 test/vdb-validate/db/blob-row-gap.kar              |   Bin 0 -> 3362642 bytes
 test/vdb-validate/db/sdc_len_mismatch.csra         |   Bin 0 -> 181017 bytes
 test/vdb-validate/db/sdc_pa_longer.csra            |   Bin 0 -> 183853 bytes
 .../db/sdc_seq_cmp_read_len_corrupt.csra           |   Bin 0 -> 224783 bytes
 .../db/sdc_seq_cmp_read_len_fixed.csra             |   Bin 0 -> 223591 bytes
 test/vdb-validate/db/sdc_tmp_mismatch.csra         |   Bin 0 -> 170925 bytes
 test/vdb-validate/expected/ROW_GAP                 |    42 +
 test/vdb-validate/expected/no_sdc_checks           |    23 +
 test/vdb-validate/expected/sdc_len_mismatch_1      |    24 +
 test/vdb-validate/expected/sdc_len_mismatch_2      |    24 +
 test/vdb-validate/expected/sdc_pa_longer_1         |    26 +
 test/vdb-validate/expected/sdc_pa_longer_2         |    26 +
 test/vdb-validate/expected/sdc_pa_longer_3         |    26 +
 .../expected/sdc_seq_cmp_read_len_corrupt          |    44 +
 .../expected/sdc_seq_cmp_read_len_fixed            |    43 +
 test/vdb-validate/expected/sdc_tmp_mismatch        |    16 +
 test/vdb-validate/runtestcase.sh                   |    61 +
 test/vschema/Makefile                              |   120 +
 test/vschema/bio-end/bio-end-excl.vschema          |    44 +
 test/vschema/bio-end/bio-end-incl.vschema          |    44 +
 test/vschema/bio-end/expected/excl-1.stdout        |     5 +
 test/vschema/bio-end/expected/excl-2.stdout        |     5 +
 test/vschema/bio-end/expected/excl-3.stdout        |     5 +
 test/vschema/bio-end/expected/excl-4.stdout        |     5 +
 test/vschema/bio-end/expected/incl-1.stdout        |     5 +
 test/vschema/bio-end/makeinputs.cpp                |   129 +
 test/vschema/idx-text/checklookup.cpp              |   335 +
 test/vschema/idx-text/expected/ci-1.stdout         |    21 +
 test/vschema/idx-text/expected/ci-2.stdout         |    18 +
 test/vschema/idx-text/expected/ci-3.stdout         |    12 +
 test/vschema/idx-text/expected/ci-4.stdout         |    12 +
 test/vschema/idx-text/expected/ci-5.stdout         |    15 +
 test/vschema/idx-text/expected/cs-1.stdout         |    18 +
 test/vschema/idx-text/expected/cs-2.stdout         |    18 +
 test/vschema/idx-text/expected/cs-3.stdout         |    18 +
 test/vschema/idx-text/idx-text.vschema             |   105 +
 test/vschema/idx-text/makeinputs.cpp               |   182 +
 test/vschema/runtestcase.sh                        |   126 +
 tools/.gitignore                                   |     6 +
 tools/Makefile                                     |    91 +
 tools/align-cache/Makefile                         |    78 +
 tools/align-cache/align-cache.cpp                  |   552 +
 tools/align-cache/helper.cpp                       |   923 +
 tools/align-cache/helper.h                         |   390 +
 tools/align-info/Makefile                          |    76 +
 tools/align-info/align-info.c                      |   571 +
 tools/bam-loader/Globals.h                         |    93 +
 tools/bam-loader/KFileHelper.c                     |   142 +
 tools/bam-loader/KFileHelper.h                     |    48 +
 tools/bam-loader/KVPFile.c                         |   355 +
 tools/bam-loader/KVPFile.h                         |   164 +
 tools/bam-loader/Makefile                          |   111 +
 tools/bam-loader/alignment-writer.c                |   267 +
 tools/bam-loader/alignment-writer.h                |   101 +
 tools/bam-loader/analysis.c                        |   157 +
 tools/bam-loader/analysis.h                        |    49 +
 tools/bam-loader/bam-alignment.h                   |    74 +
 tools/bam-loader/bam-loader.c                      |  1270 +
 tools/bam-loader/bam-priv.h                        |   196 +
 tools/bam-loader/bam-reader.c                      |  1104 +
 tools/bam-loader/bam-reader.h                      |    98 +
 tools/bam-loader/bam.c                             |  4113 +++
 tools/bam-loader/bam.h                             |   597 +
 tools/bam-loader/config-file.cpp                   |   195 +
 tools/bam-loader/config-file.hpp                   |    65 +
 tools/bam-loader/fasta-file.cpp                    |   257 +
 tools/bam-loader/fasta-file.hpp                    |    63 +
 tools/bam-loader/hashtable.c                       |   878 +
 tools/bam-loader/hashtable.h                       |    55 +
 tools/bam-loader/loader-imp.c                      |  3130 ++
 tools/bam-loader/loader-imp.h                      |    30 +
 tools/bam-loader/low-match-count.cpp               |    72 +
 tools/bam-loader/low-match-count.h                 |    33 +
 tools/bam-loader/mate-distance-stats.cpp           |    23 +
 tools/bam-loader/mate-distance-stats.hpp           |    20 +
 tools/bam-loader/mem-bank.cpp                      |   477 +
 tools/bam-loader/mem-bank.h                        |    41 +
 tools/bam-loader/quality-quantizer.cpp             |   107 +
 tools/bam-loader/quality-quantizer.hpp             |    10 +
 tools/bam-loader/reference-writer.c                |   615 +
 tools/bam-loader/reference-writer.h                |    76 +
 tools/bam-loader/samview.c                         |   104 +
 tools/bam-loader/sequence-writer.c                 |   497 +
 tools/bam-loader/sequence-writer.h                 |    89 +
 tools/cache-mgr/Makefile                           |    76 +
 tools/cache-mgr/cache-mgr.c                        |  1415 +
 tools/ccextract/Makefile                           |    90 +
 tools/ccextract/ccextract.c                        |  1272 +
 tools/cg-load/.gitignore                           |     2 +
 tools/cg-load/Makefile                             |    97 +
 tools/cg-load/cg-load.c                            |  1270 +
 tools/cg-load/debug.h                              |    34 +
 tools/cg-load/defs.h                               |   163 +
 tools/cg-load/f1_3.c                               |    77 +
 tools/cg-load/f1_5.c                               |    78 +
 tools/cg-load/f1_7.c                               |    97 +
 tools/cg-load/f2_0.c                               |    98 +
 tools/cg-load/f2_2.c                               |    98 +
 tools/cg-load/f2_4.c                               |    33 +
 tools/cg-load/f2_5.c                               |    98 +
 tools/cg-load/factory-cmn.h                        |    57 +
 tools/cg-load/factory-evidence-dnbs.c              |   625 +
 tools/cg-load/factory-evidence-dnbs.h              |    46 +
 tools/cg-load/factory-evidence-intervals.c         |   396 +
 tools/cg-load/factory-evidence-intervals.h         |    46 +
 tools/cg-load/factory-file.h                       |    49 +
 tools/cg-load/factory-mappings.c                   |   539 +
 tools/cg-load/factory-mappings.h                   |    46 +
 tools/cg-load/factory-reads.c                      |   448 +
 tools/cg-load/factory-reads.h                      |    46 +
 tools/cg-load/factory-tag-lfr.c                    |   376 +
 tools/cg-load/factory-tag-lfr.h                    |    41 +
 tools/cg-load/file-version-factory.c               |   165 +
 tools/cg-load/file.c                               |   516 +
 tools/cg-load/file.h                               |   334 +
 tools/cg-load/formats.c                            |    54 +
 tools/cg-load/formats.h                            |    41 +
 tools/cg-load/writer-algn.c                        |   825 +
 tools/cg-load/writer-algn.h                        |    63 +
 tools/cg-load/writer-evidence-dnbs.c               |   246 +
 tools/cg-load/writer-evidence-dnbs.h               |    97 +
 tools/cg-load/writer-evidence-intervals.c          |   263 +
 tools/cg-load/writer-evidence-intervals.h          |    68 +
 tools/cg-load/writer-seq.c                         |   155 +
 tools/cg-load/writer-seq.h                         |    62 +
 tools/copycat/Makefile                             |   100 +
 tools/copycat/ccbuffer.c                           |   153 +
 tools/copycat/ccbuffermgr.c                        |   234 +
 tools/copycat/ccbufferq.c                          |   175 +
 tools/copycat/cccat.c                              |  1797 ++
 tools/copycat/cccopier.c                           |   217 +
 tools/copycat/cccopy.c                             |   347 +
 tools/copycat/ccfile.c                             |   271 +
 tools/copycat/ccfileformat.c                       |   405 +
 tools/copycat/ccproc.c                             |   319 +
 tools/copycat/ccprocone.c                          |   217 +
 tools/copycat/ccread.c                             |   302 +
 tools/copycat/ccsra.c                              |  1239 +
 tools/copycat/ccsubchunk.c                         |   390 +
 tools/copycat/cctar.c                              |  2199 ++
 tools/copycat/cctree-dump.c                        |  1030 +
 tools/copycat/cctree-priv.h                        |   351 +
 tools/copycat/cctree.c                             |   754 +
 tools/copycat/copycat-priv.h                       |   229 +
 tools/copycat/copycat.c                            |  1251 +
 tools/copycat/debug.h                              |    75 +
 tools/copycat/magic                                | 18398 +++++++++++
 tools/dbgap-mount/Makefile                         |   123 +
 tools/dbgap-mount/dbgap-mount-tool.c               |   561 +
 tools/dbgap-mount/dbgap-mount-tool.h               |    72 +
 tools/dbgap-mount/demo.c                           |   353 +
 tools/dbgap-mount/demo.mkfg                        |    47 +
 tools/dbgap-mount/unix/wrap.c                      |    44 +
 tools/dbgap-mount/win/wrap.c                       |   344 +
 tools/fastdump/.gitignore                          |     3 +
 tools/fastdump/Makefile                            |    89 +
 tools/fastdump/cmn_iter.c                          |   287 +
 tools/fastdump/cmn_iter.h                          |    82 +
 tools/fastdump/fastdump.c                          |   367 +
 tools/fastdump/fastq_iter.c                        |    97 +
 tools/fastdump/fastq_iter.h                        |    69 +
 tools/fastdump/file_printer.c                      |   130 +
 tools/fastdump/file_printer.h                      |    56 +
 tools/fastdump/helper.c                            |   673 +
 tools/fastdump/helper.h                            |   141 +
 tools/fastdump/index.c                             |   335 +
 tools/fastdump/index.h                             |    67 +
 tools/fastdump/join.c                              |   670 +
 tools/fastdump/join.h                              |    76 +
 tools/fastdump/line_iter.c                         |   199 +
 tools/fastdump/line_iter.h                         |    60 +
 tools/fastdump/lookup_reader.c                     |   360 +
 tools/fastdump/lookup_reader.h                     |    75 +
 tools/fastdump/lookup_writer.c                     |   138 +
 tools/fastdump/lookup_writer.h                     |    67 +
 tools/fastdump/merge_sorter.c                      |   173 +
 tools/fastdump/merge_sorter.h                      |    66 +
 tools/fastdump/raw_read_iter.c                     |   100 +
 tools/fastdump/raw_read_iter.h                     |    67 +
 tools/fastdump/readme.txt                          |    92 +
 tools/fastdump/sorter.c                            |   538 +
 tools/fastdump/sorter.h                            |    75 +
 tools/fastdump/special_iter.c                      |    98 +
 tools/fastdump/special_iter.h                      |    69 +
 tools/fastdump/todo.txt                            |     3 +
 tools/fastdump/verify.sh                           |    81 +
 tools/fastq-dump/Makefile                          |    93 +
 tools/fastq-dump/args.cpp                          |   622 +
 tools/fastq-dump/args.hpp                          |   330 +
 tools/fastq-dump/fastq-dump.cpp                    |   641 +
 tools/fastq-dump/filters.cpp                       |   300 +
 tools/fastq-dump/filters.hpp                       |   114 +
 tools/fastq-dump/koutstream                        |   324 +
 tools/fastq-loader/.gitignore                      |     1 +
 tools/fastq-loader/Makefile                        |   166 +
 tools/fastq-loader/common-reader-priv.h            |   300 +
 tools/fastq-loader/common-reader.c                 |   614 +
 tools/fastq-loader/common-reader.h                 |   486 +
 tools/fastq-loader/common-writer.c                 |  1654 +
 tools/fastq-loader/common-writer.h                 |   164 +
 tools/fastq-loader/fastq-grammar.c                 |  2310 ++
 tools/fastq-loader/fastq-grammar.y                 |   478 +
 tools/fastq-loader/fastq-lex.c                     |  2888 ++
 tools/fastq-loader/fastq-lex.l                     |   256 +
 tools/fastq-loader/fastq-loader.c                  |   626 +
 tools/fastq-loader/fastq-parse.h                   |   169 +
 tools/fastq-loader/fastq-reader.c                  |   709 +
 tools/fastq-loader/fastq-reader.h                  |    57 +
 tools/fastq-loader/fastq-tokens.h                  |    67 +
 tools/fastq-loader/loader-imp.c                    |   256 +
 tools/fastq-loader/mmarray.c                       |   114 +
 tools/fastq-loader/parsing_rules.txt               |   106 +
 tools/fastq-loader/sequence-writer.c               |   366 +
 tools/fastq-loader/sequence-writer.h               |    93 +
 tools/fuse/Makefile                                |   204 +
 tools/fuse/accessor.c                              |   134 +
 tools/fuse/accessor.h                              |    46 +
 tools/fuse/debug.h                                 |    53 +
 tools/fuse/directory.c                             |   566 +
 tools/fuse/directory.h                             |    34 +
 tools/fuse/dump-idx.c                              |   102 +
 tools/fuse/file.c                                  |   275 +
 tools/fuse/file.h                                  |    33 +
 tools/fuse/formats.c                               |   443 +
 tools/fuse/formats.h                               |   157 +
 tools/fuse/kfile-accessor.c                        |    73 +
 tools/fuse/kfile-accessor.h                        |    33 +
 tools/fuse/log.c                                   |   197 +
 tools/fuse/log.h                                   |    53 +
 tools/fuse/node.c                                  |   273 +
 tools/fuse/node.h                                  |   108 +
 tools/fuse/remote-cache.c                          |  2129 ++
 tools/fuse/remote-cache.h                          |   169 +
 tools/fuse/remote-directory.c                      |   411 +
 tools/fuse/remote-directory.h                      |    33 +
 tools/fuse/remote-file.c                           |   308 +
 tools/fuse/remote-file.h                           |    33 +
 tools/fuse/remote-fuser.c                          |   206 +
 tools/fuse/remote-fuser.h                          |    52 +
 tools/fuse/remote-link.c                           |   208 +
 tools/fuse/remote-link.h                           |    33 +
 tools/fuse/remote-xml.c                            |   604 +
 tools/fuse/remote-xml.h                            |    59 +
 tools/fuse/sra-directory.c                         |   107 +
 tools/fuse/sra-directory.h                         |    33 +
 tools/fuse/sra-fastq.c                             |   245 +
 tools/fuse/sra-fastq.h                             |    34 +
 tools/fuse/sra-fuser-test.c                        |   100 +
 tools/fuse/sra-fuser.c                             |   195 +
 tools/fuse/sra-fuser.h                             |    48 +
 tools/fuse/sra-fuser.xsd                           |   207 +
 tools/fuse/sra-list.c                              |  1225 +
 tools/fuse/sra-list.h                              |    86 +
 tools/fuse/sra-makeidx.c                           |   955 +
 tools/fuse/sra-node.c                              |   165 +
 tools/fuse/sra-node.h                              |    34 +
 tools/fuse/sra-sff.c                               |   249 +
 tools/fuse/sra-sff.h                               |    34 +
 tools/fuse/tar-file.c                              |   127 +
 tools/fuse/tar-file.h                              |    33 +
 tools/fuse/tar-list.c                              |   598 +
 tools/fuse/tar-list.h                              |    49 +
 tools/fuse/tar-node.c                              |   320 +
 tools/fuse/tar-node.h                              |    35 +
 tools/fuse/text-file.c                             |   134 +
 tools/fuse/text-file.h                             |    36 +
 tools/fuse/unix/remote-fuser-sys.c                 |   696 +
 tools/fuse/unix/sra-fuser-sys.c                    |   637 +
 tools/fuse/xml.c                                   |   516 +
 tools/fuse/xml.h                                   |    60 +
 tools/fuse/zlib-simple.c                           |    65 +
 tools/fuse/zlib-simple.h                           |    33 +
 tools/general-loader/Makefile                      |   131 +
 tools/general-loader/database-loader.cpp           |   894 +
 tools/general-loader/general-loader.cpp            |   223 +
 tools/general-loader/general-loader.hpp            |   243 +
 tools/general-loader/general-writer.cpp            |  1172 +
 tools/general-loader/general-writer.h              |  1081 +
 tools/general-loader/general-writer.hpp            |   210 +
 tools/general-loader/gw-dumper.cpp                 |  1785 ++
 tools/general-loader/main.cpp                      |   239 +
 tools/general-loader/protocol-parser.cpp           |  1048 +
 tools/general-loader/utf8-like-int-codec.c         |   687 +
 tools/general-loader/utf8-like-int-codec.h         |    69 +
 tools/kar/Makefile                                 |    99 +
 tools/kar/kar-args.c                               |   428 +
 tools/kar/kar-args.h                               |    98 +
 tools/kar/kar.c                                    |  2063 ++
 tools/kar/sra-kar.c                                |   431 +
 tools/keyring-srv/Makefile                         |   110 +
 tools/keyring-srv/keyring-data.c                   |   346 +
 tools/keyring-srv/keyring-data.h                   |   130 +
 tools/keyring-srv/keyring-database.c               |   441 +
 tools/keyring-srv/keyring-database.h               |    45 +
 tools/keyring-srv/keyring-srv-main.c               |   333 +
 tools/keyring-srv/keyring-srv.c                    |   522 +
 tools/keyring-srv/keyring-srv.h                    |   101 +
 tools/kget/Makefile                                |    77 +
 tools/kget/examples.sh                             |    62 +
 tools/kget/kget.c                                  |   941 +
 tools/kqsh/.gitignore                              |     7 +
 tools/kqsh/Makefile                                |   207 +
 tools/kqsh/kqsh-alter.c                            |   347 +
 tools/kqsh/kqsh-close.c                            |   186 +
 tools/kqsh/kqsh-create.c                           |   680 +
 tools/kqsh/kqsh-help.c                             |  1292 +
 tools/kqsh/kqsh-load.c                             |   410 +
 tools/kqsh/kqsh-open.c                             |   199 +
 tools/kqsh/kqsh-parse.c                            |   198 +
 tools/kqsh/kqsh-print.c                            |   170 +
 tools/kqsh/kqsh-priv.h                             |   151 +
 tools/kqsh/kqsh-show.c                             |   290 +
 tools/kqsh/kqsh-thunk.pl                           |   662 +
 tools/kqsh/kqsh-tok.c                              |    99 +
 tools/kqsh/kqsh-tok.h                              |   155 +
 tools/kqsh/kqsh-write.c                            |   321 +
 tools/kqsh/kqsh.c                                  |   516 +
 tools/nenctool/Makefile                            |   119 +
 tools/nenctool/nenctest.c                          |   489 +
 tools/nenctool/nenctool.c                          |   435 +
 tools/nencvalid/Makefile                           |    88 +
 tools/nencvalid/nencvalid.c                        |   593 +
 tools/ngs-pileup/Makefile                          |    82 +
 tools/ngs-pileup/main.cpp                          |   152 +
 tools/ngs-pileup/ngs-pileup.cpp                    |   206 +
 tools/ngs-pileup/ngs-pileup.hpp                    |    97 +
 tools/pacbio-load/.gitignore                       |     7 +
 tools/pacbio-load/Makefile                         |   117 +
 tools/pacbio-load/pacbio-load.c                    |   650 +
 tools/pacbio-load/pl-basecalls_cmn.c               |    97 +
 tools/pacbio-load/pl-basecalls_cmn.h               |    60 +
 tools/pacbio-load/pl-consensus.c                   |   472 +
 tools/pacbio-load/pl-consensus.h                   |    83 +
 tools/pacbio-load/pl-context.c                     |   211 +
 tools/pacbio-load/pl-context.h                     |    87 +
 tools/pacbio-load/pl-metrics.c                     |   779 +
 tools/pacbio-load/pl-metrics.h                     |    83 +
 tools/pacbio-load/pl-passes.c                      |   437 +
 tools/pacbio-load/pl-passes.h                      |    70 +
 tools/pacbio-load/pl-progress.c                    |   195 +
 tools/pacbio-load/pl-progress.h                    |    70 +
 tools/pacbio-load/pl-regions.c                     |  1048 +
 tools/pacbio-load/pl-regions.h                     |   140 +
 tools/pacbio-load/pl-sequence.c                    |   928 +
 tools/pacbio-load/pl-sequence.h                    |   110 +
 tools/pacbio-load/pl-tools.c                       |   624 +
 tools/pacbio-load/pl-tools.h                       |   291 +
 tools/pacbio-load/pl-zmw.c                         |   221 +
 tools/pacbio-load/pl-zmw.h                         |   105 +
 tools/pacbio-load/verify/ins_nl.pl                 |    15 +
 tools/pacbio-load/verify/ins_nl_1.pl               |    30 +
 tools/pacbio-load/verify/ins_nl_2.pl               |    24 +
 tools/pacbio-load/verify/ins_nl_4.pl               |    24 +
 tools/pacbio-load/verify/ins_nl_f.pl               |    27 +
 tools/pileup-stats/Makefile                        |    81 +
 tools/pileup-stats/pileup-stats.cpp                |   776 +
 tools/prefetch/Makefile                            |    93 +
 tools/prefetch/kfile-no-q.c                        |   215 +
 tools/prefetch/kfile-no-q.h                        |    44 +
 tools/prefetch/prefetch.c                          |  3679 +++
 tools/qual-recalib-stat/.gitignore                 |     3 +
 tools/qual-recalib-stat/Makefile                   |    84 +
 tools/qual-recalib-stat/columns.c                  |    94 +
 tools/qual-recalib-stat/columns.h                  |    67 +
 tools/qual-recalib-stat/context.c                  |   330 +
 tools/qual-recalib-stat/context.h                  |   120 +
 tools/qual-recalib-stat/fasta_dump.pl              |    81 +
 tools/qual-recalib-stat/namelist_tools.c           |   187 +
 tools/qual-recalib-stat/namelist_tools.h           |    53 +
 tools/qual-recalib-stat/qual-recalib-stat.c        |   418 +
 tools/qual-recalib-stat/reader.c                   |   241 +
 tools/qual-recalib-stat/reader.h                   |    88 +
 tools/qual-recalib-stat/ref_exclude.c              |   561 +
 tools/qual-recalib-stat/ref_exclude.h              |    71 +
 tools/qual-recalib-stat/ref_grab.pl                |    82 +
 tools/qual-recalib-stat/spot_position.c            |   121 +
 tools/qual-recalib-stat/spot_position.h            |    68 +
 tools/qual-recalib-stat/stat_mod.c                 |   883 +
 tools/qual-recalib-stat/stat_mod.h                 |   148 +
 tools/qual-recalib-stat/stat_mod_1.c               |   962 +
 tools/qual-recalib-stat/stat_mod_1.h               |   160 +
 tools/qual-recalib-stat/stat_mod_2.c               |  1041 +
 tools/qual-recalib-stat/stat_mod_2.h               |   141 +
 tools/qual-recalib-stat/writer.c                   |   480 +
 tools/qual-recalib-stat/writer.h                   |    79 +
 tools/rd-filter-redact/Makefile                    |    95 +
 tools/rd-filter-redact/rd-filter-redact.c          |  1350 +
 tools/rd-filter-redact/read-filter-redact.c        |   861 +
 tools/rd-filter-redact/test-read-write-cursor.c    |   220 +
 tools/sra-dump/.gitignore                          |     1 +
 tools/sra-dump/Makefile                            |   128 +
 tools/sra-dump/abi.c                               |   907 +
 tools/sra-dump/core.c                              |  1717 ++
 tools/sra-dump/core.h                              |    74 +
 tools/sra-dump/debug.h                             |    34 +
 tools/sra-dump/factory.c                           |  1069 +
 tools/sra-dump/factory.h                           |   194 +
 tools/sra-dump/fasta_dump.c                        |   752 +
 tools/sra-dump/fasta_dump.h                        |    36 +
 tools/sra-dump/fastq.c                             |  3800 +++
 tools/sra-dump/illumina.c                          |   536 +
 tools/sra-dump/sff.c                               |   200 +
 tools/sra-dump/sra-dump.c                          |  1011 +
 tools/sra-load/Makefile                            |   209 +
 tools/sra-load/absolid-fmt.c                       |   573 +
 tools/sra-load/common-xml.c                        |   871 +
 tools/sra-load/common-xml.h                        |   183 +
 tools/sra-load/debug.h                             |    34 +
 tools/sra-load/experiment-xml.c                    |  1255 +
 tools/sra-load/experiment-xml.h                    |    77 +
 tools/sra-load/fastq-fmt.c                         |   701 +
 tools/sra-load/helicos-fmt.c                       |   273 +
 tools/sra-load/illumina-fmt.c                      |   848 +
 tools/sra-load/loader-file.c                       |   191 +
 tools/sra-load/loader-file.h                       |   113 +
 tools/sra-load/loader-fmt.c                        |   165 +
 tools/sra-load/loader-fmt.h                        |   171 +
 tools/sra-load/loader.c                            |  1135 +
 tools/sra-load/pacbio-fmt.c                        |   141 +
 tools/sra-load/pstring.c                           |   208 +
 tools/sra-load/pstring.h                           |    58 +
 tools/sra-load/run-xml.c                           |   487 +
 tools/sra-load/run-xml.h                           |    90 +
 tools/sra-load/sff-fmt.c                           |   491 +
 tools/sra-load/sra-writer.c                        |   370 +
 tools/sra-load/sra-writer.h                        |    92 +
 tools/sra-load/srf-absolid.c                       |   497 +
 tools/sra-load/srf-fmt.c                           |   267 +
 tools/sra-load/srf-fmt.h                           |    46 +
 tools/sra-load/srf-illumina.c                      |   453 +
 tools/sra-load/srf.c                               |   229 +
 tools/sra-load/srf.h                               |   146 +
 tools/sra-load/writer-454.c                        |   262 +
 tools/sra-load/writer-454.h                        |    46 +
 tools/sra-load/writer-absolid.c                    |   501 +
 tools/sra-load/writer-absolid.h                    |    94 +
 tools/sra-load/writer-helicos.c                    |   135 +
 tools/sra-load/writer-helicos.h                    |    41 +
 tools/sra-load/writer-illumina.c                   |   720 +
 tools/sra-load/writer-illumina.h                   |    92 +
 tools/sra-load/writer-ion-torrent.c                |   262 +
 tools/sra-load/writer-ion-torrent.h                |    46 +
 tools/sra-load/ztr-absolid.c                       |   656 +
 tools/sra-load/ztr-absolid.h                       |   124 +
 tools/sra-load/ztr-huffman.c                       |   664 +
 tools/sra-load/ztr-huffman.h                       |    45 +
 tools/sra-load/ztr-illumina.c                      |  1367 +
 tools/sra-load/ztr-illumina.h                      |   136 +
 tools/sra-load/ztr.h                               |   182 +
 tools/sra-pileup/.gitignore                        |     2 +
 tools/sra-pileup/4na_ascii.c                       |    95 +
 tools/sra-pileup/4na_ascii.h                       |    44 +
 tools/sra-pileup/Makefile                          |   133 +
 tools/sra-pileup/cg_tools.c                        |  1723 ++
 tools/sra-pileup/cg_tools.h                        |   137 +
 tools/sra-pileup/cmdline_cmn.c                     |   711 +
 tools/sra-pileup/cmdline_cmn.h                     |   150 +
 tools/sra-pileup/debug.h                           |    34 +
 tools/sra-pileup/dyn_string.c                      |   206 +
 tools/sra-pileup/dyn_string.h                      |    55 +
 tools/sra-pileup/inputfiles.c                      |   377 +
 tools/sra-pileup/inputfiles.h                      |    99 +
 tools/sra-pileup/make_opt.pl                       |    13 +
 tools/sra-pileup/matecache.c                       |   439 +
 tools/sra-pileup/matecache.h                       |   119 +
 tools/sra-pileup/md_flag.c                         |   268 +
 tools/sra-pileup/md_flag.h                         |    48 +
 tools/sra-pileup/out_redir.c                       |   120 +
 tools/sra-pileup/out_redir.h                       |    64 +
 tools/sra-pileup/perf_log.c                        |   273 +
 tools/sra-pileup/perf_log.h                        |    52 +
 tools/sra-pileup/pileup_counters.c                 |   447 +
 tools/sra-pileup/pileup_counters.h                 |    41 +
 tools/sra-pileup/pileup_indels.c                   |   120 +
 tools/sra-pileup/pileup_indels.h                   |    40 +
 tools/sra-pileup/pileup_index.c                    |   122 +
 tools/sra-pileup/pileup_index.h                    |    40 +
 tools/sra-pileup/pileup_options.h                  |    62 +
 tools/sra-pileup/pileup_stat.c                     |   391 +
 tools/sra-pileup/pileup_stat.h                     |    40 +
 tools/sra-pileup/pileup_v2.c                       |   382 +
 tools/sra-pileup/pileup_v2.h                       |    40 +
 tools/sra-pileup/pileup_varcount.c                 |   139 +
 tools/sra-pileup/pileup_varcount.h                 |    40 +
 tools/sra-pileup/read_fkt.c                        |   718 +
 tools/sra-pileup/read_fkt.h                        |    82 +
 tools/sra-pileup/ref_regions.c                     |   825 +
 tools/sra-pileup/ref_regions.h                     |    71 +
 tools/sra-pileup/ref_walker.c                      |  1028 +
 tools/sra-pileup/ref_walker.h                      |   147 +
 tools/sra-pileup/ref_walker_0.c                    |   231 +
 tools/sra-pileup/ref_walker_0.h                    |   107 +
 tools/sra-pileup/report_deletes.c                  |   259 +
 tools/sra-pileup/report_deletes.h                  |    41 +
 tools/sra-pileup/reref.c                           |   550 +
 tools/sra-pileup/reref.h                           |    43 +
 tools/sra-pileup/rna_splice_log.c                  |   374 +
 tools/sra-pileup/rna_splice_log.h                  |    87 +
 tools/sra-pileup/sam-aligned.c                     |  2408 ++
 tools/sra-pileup/sam-aligned.h                     |    46 +
 tools/sra-pileup/sam-dump-opts.c                   |  1676 +
 tools/sra-pileup/sam-dump-opts.h                   |   306 +
 tools/sra-pileup/sam-dump.c                        |  4905 +++
 tools/sra-pileup/sam-dump3.c                       |   563 +
 tools/sra-pileup/sam-hdr.c                         |   728 +
 tools/sra-pileup/sam-hdr.h                         |    41 +
 tools/sra-pileup/sam-hdr1.c                        |   894 +
 tools/sra-pileup/sam-hdr1.h                        |    42 +
 tools/sra-pileup/sam-unaligned.c                   |  1565 +
 tools/sra-pileup/sam-unaligned.h                   |    44 +
 tools/sra-pileup/splitfastq.pl                     |    46 +
 tools/sra-pileup/sra-pileup.c                      |  1640 +
 tools/sra-pileup/walk_debug.c                      |   147 +
 tools/sra-pileup/walk_debug.h                      |    42 +
 tools/sra-pileup/writer.c                          |   137 +
 tools/sra-pileup/writer.h                          |    32 +
 tools/sra-seq-count/Makefile                       |    83 +
 tools/sra-seq-count/main_fkt.c                     |   203 +
 tools/sra-seq-count/options.h                      |    56 +
 tools/sra-seq-count/range.hpp                      |   307 +
 tools/sra-seq-count/sra-seq-count.cpp              |   688 +
 tools/sra-shell/Makefile                           |    58 +
 tools/sra-shell/guilib/Makefile                    |    71 +
 tools/sra-shell/job-exec/Makefile                  |    71 +
 tools/sra-shell/parser/Makefile                    |    71 +
 tools/sra-shell/parser/sra-shell-lex.l             |   103 +
 tools/sra-shell/parser/sra-shell.y                 |    54 +
 tools/sra-shell/sra-gui/Makefile                   |    80 +
 tools/sra-shell/sra-gui/sra-gui.c                  |    49 +
 tools/sra-shell/sra-shell/Makefile                 |    87 +
 tools/sra-shell/sra-shell/sra-shell.c              |    49 +
 tools/sra-shell/turboVision/Makefile               |    71 +
 tools/sra-sort/Makefile                            |   125 +
 tools/sra-sort/Makefile.cc                         |    24 +
 tools/sra-sort/Makefile.clang                      |    27 +
 tools/sra-sort/Makefile.gcc                        |    27 +
 tools/sra-sort/buff-writer.c                       |   789 +
 tools/sra-sort/buff-writer.h                       |    64 +
 tools/sra-sort/caps.c                              |   125 +
 tools/sra-sort/caps.h                              |    70 +
 tools/sra-sort/capture-first-half-aligned.c        |   192 +
 tools/sra-sort/col-pair.c                          |   818 +
 tools/sra-sort/col-pair.h                          |   323 +
 tools/sra-sort/csra-pair.c                         |   228 +
 tools/sra-sort/csra-pair.h                         |    87 +
 tools/sra-sort/csra-tbl.c                          |   798 +
 tools/sra-sort/csra-tbl.h                          |    83 +
 tools/sra-sort/ctx.h                               |   109 +
 tools/sra-sort/db-pair.c                           |   885 +
 tools/sra-sort/db-pair.h                           |   208 +
 tools/sra-sort/dir-pair.c                          |   504 +
 tools/sra-sort/dir-pair.h                          |   124 +
 tools/sra-sort/dump-blob-boundaries.c              |   203 +
 tools/sra-sort/except.c                            |   232 +
 tools/sra-sort/except.h                            |   160 +
 tools/sra-sort/gcc-ped.sh                          |    39 +
 tools/sra-sort/glob-poslen.c                       |   349 +
 tools/sra-sort/glob-poslen.h                       |    95 +
 tools/sra-sort/id-mapper-col.c                     |   260 +
 tools/sra-sort/id-mapper-col.h                     |    55 +
 tools/sra-sort/idx-mapping.c                       |    88 +
 tools/sra-sort/idx-mapping.h                       |    59 +
 tools/sra-sort/map-file.c                          |  1192 +
 tools/sra-sort/map-file.h                          |   172 +
 tools/sra-sort/mapping-row-set.c                   |   496 +
 tools/sra-sort/mem.c                               |    68 +
 tools/sra-sort/mem.h                               |   128 +
 tools/sra-sort/membank-priv.h                      |    44 +
 tools/sra-sort/membank.c                           |   296 +
 tools/sra-sort/meta-pair.c                         |   458 +
 tools/sra-sort/meta-pair.h                         |   109 +
 tools/sra-sort/paged-membank.c                     |   244 +
 tools/sra-sort/paged-mmapbank.c                    |   399 +
 tools/sra-sort/poslen-col-pair.c                   |   559 +
 tools/sra-sort/poslen-col-pair.h                   |    63 +
 tools/sra-sort/ref-alignid-col.c                   |   702 +
 tools/sra-sort/ref-alignid-col.h                   |    53 +
 tools/sra-sort/row-set-priv.h                      |    44 +
 tools/sra-sort/row-set.c                           |   208 +
 tools/sra-sort/row-set.h                           |   215 +
 tools/sra-sort/run.c                               |   388 +
 tools/sra-sort/simple-row-set.c                    |   212 +
 tools/sra-sort/sort-defs.h                         |   109 +
 tools/sra-sort/sorting-row-set.c                   |   405 +
 tools/sra-sort/sra-sort.c                          |   746 +
 tools/sra-sort/sra-sort.h                          |   171 +
 tools/sra-sort/status.h                            |    50 +
 tools/sra-sort/tbl-pair.c                          |  1055 +
 tools/sra-sort/tbl-pair.h                          |   209 +
 tools/sra-sort/xcheck-ref-align.c                  |   411 +
 tools/sra-sort/xcheck.h                            |    49 +
 tools/sra-stat/Makefile                            |    80 +
 tools/sra-stat/sra-stat.c                          |  3634 +++
 tools/sra-stat/sra-stat.h                          |    42 +
 tools/sra-stat/sra.c                               |   446 +
 tools/sra/.cvsignore                               |     1 +
 tools/sra/Makefile                                 |    77 +
 tools/sra/sra-dbcc.c                               |   435 +
 tools/sra/table-vers.c                             |   232 +
 tools/srapath/Makefile                             |    79 +
 tools/srapath/cgi_request.c                        |   853 +
 tools/srapath/cgi_request.h                        |   129 +
 tools/srapath/helper.c                             |   464 +
 tools/srapath/helper.h                             |   108 +
 tools/srapath/line_iter.c                          |   241 +
 tools/srapath/line_iter.h                          |    71 +
 tools/srapath/srapath.c                            |   439 +
 tools/update-schema/.cvsignore                     |     1 +
 tools/update-schema/Makefile                       |    77 +
 tools/update-schema/update-schema.c                |   454 +
 tools/util/Makefile                                |   393 +
 tools/util/crc32sum.c                              |   272 +
 tools/util/kdb-index.c                             |   257 +
 tools/util/kdbmeta.c                               |  1332 +
 tools/util/mac/syspass.c                           |    48 +
 tools/util/md5cp.c                                 |   702 +
 tools/util/pacbio-correct.c                        |   208 +
 tools/util/pseudo-aligner.cpp                      |   566 +
 tools/util/rcexplain.c                             |   127 +
 tools/util/rowwritetest.c                          |   433 +
 tools/util/samview.c                               |    80 +
 tools/util/schema-replace.c                        |   379 +
 tools/util/sortreadtest.c                          |   351 +
 tools/util/syspass-priv.h                          |    44 +
 tools/util/test-sra-priv.h                         |    46 +
 tools/util/test-sra.c                              |  3724 +++
 tools/util/testld.c                                |   249 +
 tools/util/txt2kdb.c                               |   579 +
 tools/util/unix/PrintOS.c                          |    66 +
 tools/util/unix/syspass.c                          |    62 +
 tools/util/vdb-lock.c                              |   154 +
 tools/util/vdb-passwd.c                            |   307 +
 tools/util/vdb-unlock.c                            |   156 +
 tools/util/win/PrintOS.c                           |    60 +
 tools/util/win/syspass.c                           |    53 +
 tools/vcf-loader/.gitignore                        |     1 +
 tools/vcf-loader/Makefile                          |   128 +
 tools/vcf-loader/vcf-database.c                    |   168 +
 tools/vcf-loader/vcf-database.h                    |    40 +
 tools/vcf-loader/vcf-grammar.c                     |  1686 +
 tools/vcf-loader/vcf-grammar.h                     |    61 +
 tools/vcf-loader/vcf-grammar.y                     |   123 +
 tools/vcf-loader/vcf-lex.c                         |  2528 ++
 tools/vcf-loader/vcf-lex.l                         |   132 +
 tools/vcf-loader/vcf-loader.c                      |   124 +
 tools/vcf-loader/vcf-parse.h                       |    89 +
 tools/vcf-loader/vcf-reader.c                      |   438 +
 tools/vcf-loader/vcf-reader.h                      |   110 +
 tools/vdb-config/Makefile                          |    82 +
 tools/vdb-config/configure.cpp                     |   816 +
 tools/vdb-config/configure.h                       |    49 +
 tools/vdb-config/interactive.cpp                   |  1096 +
 tools/vdb-config/interactive.h                     |    50 +
 tools/vdb-config/util.cpp                          |  1084 +
 tools/vdb-config/util.hpp                          |   703 +
 tools/vdb-config/vdb-config-model.cpp              |   463 +
 tools/vdb-config/vdb-config-model.hpp              |   473 +
 tools/vdb-config/vdb-config.c                      |  1712 +
 tools/vdb-config/vdb-config2.cpp                   |    30 +
 tools/vdb-config/vdb-config2.h                     |    29 +
 tools/vdb-copy/.gitignore                          |    17 +
 tools/vdb-copy/Makefile                            |    91 +
 tools/vdb-copy/coldefs.c                           |   775 +
 tools/vdb-copy/coldefs.h                           |   250 +
 tools/vdb-copy/column_match.c                      |    31 +
 tools/vdb-copy/column_match.h                      |    42 +
 tools/vdb-copy/config_values.c                     |    54 +
 tools/vdb-copy/config_values.h                     |    49 +
 tools/vdb-copy/context.c                           |   473 +
 tools/vdb-copy/context.h                           |   183 +
 tools/vdb-copy/copy_context.c                      |    47 +
 tools/vdb-copy/copy_context.h                      |    58 +
 tools/vdb-copy/copy_meta.c                         |   518 +
 tools/vdb-copy/copy_meta.h                         |    46 +
 tools/vdb-copy/definitions.h                       |   112 +
 tools/vdb-copy/get_platform.c                      |   168 +
 tools/vdb-copy/get_platform.h                      |    46 +
 tools/vdb-copy/helper.c                            |   919 +
 tools/vdb-copy/helper.h                            |   225 +
 tools/vdb-copy/matcher_input.h                     |    55 +
 tools/vdb-copy/namelist_tools.c                    |   187 +
 tools/vdb-copy/namelist_tools.h                    |    52 +
 tools/vdb-copy/num-gen.c                           |   848 +
 tools/vdb-copy/num-gen.h                           |   225 +
 tools/vdb-copy/redactval.c                         |   230 +
 tools/vdb-copy/redactval.h                         |   120 +
 tools/vdb-copy/type_matcher.c                      |   850 +
 tools/vdb-copy/type_matcher.h                      |    71 +
 tools/vdb-copy/vdb-copy-includes.h                 |   121 +
 tools/vdb-copy/vdb-copy.c                          |  1456 +
 tools/vdb-copy/vdb-copy.kfg                        |    94 +
 tools/vdb-decrypt/Makefile                         |   102 +
 tools/vdb-decrypt/shared.c                         |  1271 +
 tools/vdb-decrypt/shared.h                         |    93 +
 tools/vdb-decrypt/vdb-decrypt.c                    |   269 +
 tools/vdb-decrypt/vdb-encrypt.c                    |   215 +
 tools/vdb-diff/Makefile                            |    79 +
 tools/vdb-diff/coldefs.c                           |   211 +
 tools/vdb-diff/coldefs.h                           |   105 +
 tools/vdb-diff/namelist_tools.c                    |   299 +
 tools/vdb-diff/namelist_tools.h                    |    59 +
 tools/vdb-diff/vdb-diff.c                          |  1002 +
 tools/vdb-dump/.gitignore                          |     2 +
 tools/vdb-dump/Makefile                            |    92 +
 tools/vdb-dump/help.txt                            |   352 +
 tools/vdb-dump/vdb-boot.c                          |   448 +
 tools/vdb-dump/vdb-boot.vschema                    |    52 +
 tools/vdb-dump/vdb-dump-bin.c                      |  1496 +
 tools/vdb-dump/vdb-dump-bin.h                      |    46 +
 tools/vdb-dump/vdb-dump-coldefs.c                  |   846 +
 tools/vdb-dump/vdb-dump-coldefs.h                  |   110 +
 tools/vdb-dump/vdb-dump-context.c                  |   649 +
 tools/vdb-dump/vdb-dump-context.h                  |   220 +
 tools/vdb-dump/vdb-dump-fastq.c                    |  1132 +
 tools/vdb-dump/vdb-dump-fastq.h                    |    47 +
 tools/vdb-dump/vdb-dump-filter.c                   |   116 +
 tools/vdb-dump/vdb-dump-filter.h                   |    82 +
 tools/vdb-dump/vdb-dump-formats.c                  |   383 +
 tools/vdb-dump/vdb-dump-formats.h                  |    51 +
 tools/vdb-dump/vdb-dump-helper.c                   |   772 +
 tools/vdb-dump/vdb-dump-helper.h                   |   107 +
 tools/vdb-dump/vdb-dump-interact.c                 |   265 +
 tools/vdb-dump/vdb-dump-interact.h                 |    50 +
 tools/vdb-dump/vdb-dump-print.c                    |  1349 +
 tools/vdb-dump/vdb-dump-print.h                    |    86 +
 tools/vdb-dump/vdb-dump-redir.c                    |   120 +
 tools/vdb-dump/vdb-dump-redir.h                    |    64 +
 tools/vdb-dump/vdb-dump-repo.c                     |   281 +
 tools/vdb-dump/vdb-dump-repo.h                     |    46 +
 tools/vdb-dump/vdb-dump-row-context.h              |    71 +
 tools/vdb-dump/vdb-dump-str.c                      |   540 +
 tools/vdb-dump/vdb-dump-str.h                      |   100 +
 tools/vdb-dump/vdb-dump-tools.c                    |   528 +
 tools/vdb-dump/vdb-dump-tools.h                    |    60 +
 tools/vdb-dump/vdb-dump.c                          |  2351 ++
 tools/vdb-dump/vdb_info.c                          |  1528 +
 tools/vdb-dump/vdb_info.h                          |    47 +
 tools/vdb-validate/Makefile                        |    96 +
 tools/vdb-validate/check-corrupt.cpp               |   764 +
 tools/vdb-validate/vdb-validate.c                  |  3351 ++
 2310 files changed, 313374 insertions(+), 299490 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index 9c2648f..0000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-### Verify
-Can you see anything in the logs? 
-Make sure your issue is not already in the [htsjdk issue tracker](https://github.com/samtools/htsjdk/issues?q=)
-
-### Subject of the issue
-Describe your issue here.
-Provide **screenshots** , **stacktrace** , **logs** where appropriate.
-
-### Your environment
-* version of htsjdk
-* version of java
-* which OS
-
-### Steps to reproduce
-Tell us how to reproduce this issue. If possible, include a short code snippet to demonstrate the problem.
-
-### Expected behaviour
-Tell us what should happen
-
-### Actual behaviour
-Tell us what happens instead
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 300af57..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,13 +0,0 @@
-### Description
-
-Please explain the changes you made here.
-Explain the **motivation** for making this change. What existing problem does the pull request solve?
-
-### Checklist
-
-- [ ] Code compiles correctly
-- [ ] New tests covering changes and new functionality
-- [ ] All tests passing
-- [ ] Extended the README / documentation, if necessary
-- [ ] Is not backward compatible (breaks binary or source compatibility)
-
diff --git a/.gitignore b/.gitignore
index a20c2c9..1e2413a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,23 @@
-htsjdk.iws
-.command_tmp
-atlassian-ide-plugin.xml
-/htsjdk.version.properties
-/test-output
-
-#intellij
-.idea/
-src/htsjdk.iml
-*.iml
-*.ipr
-*.iws
-
-
-
-
-#gradle stuff
-.gradle/
-build/
+*~
+.DS_Store
+._*
+*.d
+*.db
+*.o
+*.pyc
+/bin64
+/build/BUILD.*
+/build/COMP.mac
+/centos
+/ilib64
+/lib64
+/mac
+/Makefile.config.*
+/reconfigure
+/schema
+/test-bin64
+/win
+*.log
+/.cproject
+/.project
+/.pydevproject
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1e92599..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: java
-dist: trusty
-sudo: true
-before_cache:
-  - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
-cache:
-  directories:
-    - $HOME/.gradle/caches/
-    - $HOME/.gradle/wrapper/
-    - $HOME/.m2
-jdk:
-  - oraclejdk8
-script: ./gradlew jacocoTestReport testSRA;
-after_success:
-  - echo "TRAVIS_BRANCH='$TRAVIS_BRANCH'";
-    echo "JAVA_HOME='$JAVA_HOME'";
-    ./gradlew coveralls;
-    if [ "$TRAVIS_BRANCH" == "master" ]; then
-       ./gradlew uploadArchives;
-    fi
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..fe7f335
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,158 @@
+# NCBI External Developer Release:
+
+## SRA Toolkit 2.8.1
+**December 22, 2016**
+
+  **bam-load**: the result code updated to indicate empty slice rather than EOF  
+  **kfg**: added possibility to create an empty KConfig object that does not try to load any file  
+  **latf-load**: fixed an occasional crash on Ubuntu  
+  **latf-load, test**: test script no longer executes failing tests for unimplemented features  
+  **prefetch**: uses KStream rather than KHttpFile - it fixed environments with proxies non supporting HTTP Range  
+  **sam-dump**: use of --seqid options creates now headers consistent with sam-lines  
+  **test-sra**: added ability to print http response headers  
+
+
+## SRA Toolkit 2.8.0-2
+**December 8, 2016**
+
+  **bam-load**: changed memcpy to memmove when regions overlap - seems to corrupt data on centos7
+  **blastn_vdb, tblastn_vdb**: removed library dependencies that were preventing users from launching these tools
+  **build**: fixed a bug in 'configure' when in could not find source files in repository saved with non-standard name
+  **cg-load**: added loading of CG File format v2.4
+
+
+## SRA Toolkit 2.8.0
+**October 7, 2016**
+
+### HTTPS-ENABLED RELEASE
+
+  **bam-load**: 10x Genomics CB and UB tags are preserved  
+  **bam-load**: Orphaned secondary alignments will be converted to primary alignments  
+  **bam-load**: READ_GROUP is populated from 'BC' if 'RG' has no value  
+  **bam-load**: fixed support for '-V' and '--version' command-line options  
+  **blast**: Updated BLAST engine to 2.5.0+ version  
+  **build, ngs-tools**: Now ngs-tools look for its dependencies using their normal build paths and does not reconfigure them  
+  **build, ngs-tools**: Now ngs-tools use CMAKE_INSTALL_PREFIX for installation path  
+  **build, sra-tools**: Now makefile copies default.kfg file when it is updated  
+  **build, sra-tools**: separate decryption package was removed - decryption tools are included as part of sratoolkit.  
+  **kfg, kns**: Use environment variables to determine the proxy for a http protocol  
+  **kfg, vdb-config**: vdb-config-GUI has now option to pick up proxy-setting from environment  
+  **kns**: All tools and libraries now support https  
+  **kns**: replaced all direct uses of sleep() within code to enforce standardization upon mS.  
+  **kproc, ncbi-vdb**: Fixed KCondition to generate timeout error on Windows when timeout exhausted  
+  **latf-load**: now handles column values up to 64MB long  
+  **ngs**: Fixed all crashes when using null as string in ngs-java APIs  
+  **ngs**: NGS_ReferenceGetChunk() will now return chunks potentially exceeding 5000 bases  
+  **ngs**: fixed potential concurrency issues at exit, when called from Java  
+  **ngs**: ngs-java and ngs-python auto-download (of native libraries) now works through HTTPS  
+  **ngs**: read fragments of length 0 are now ignored  
+  **ngs, ngs-tools, ref-variation**: added class ngs-vdb::VdbAlignment, featuring method IsFirst()  
+  **ngs-engine**: improved diagnostic messages  
+  **ngs-tools**: Fixed Makefiles to keep supporting "./configure; make" build of sra-search, alongside CMake-based build.  
+  **prefetch**: Fixed prefetch not to print misleading 'unknown integer storage type' error messages  
+  **sam-dump**: CB and UB tags are now created if loaded via bam-load from 10xSingleCell  
+  **sra-tools**: presence of ./ncbi (even if empty) subdirectory next to the executable files is no longer required, unless configuration files are needed.  
+  **test**: updated tests to not fail outside of NCBI  
+  **test-sra**: test-sra prints network information  
+  **test-sra**: test-sra prints version of ncbi-vdb or ngs-sdk dynamic library  
+  **vdb**: improved parameter checking on VDatabaseOpenTableRead()  
+  **vdb**: new function: "VDBManagerDeleteCacheOlderThan()"  
+  **vdb**: problem with buffer-overrun when compressing random data fixed  
+  **vdb**: remote/aux nodes have been removed from configuration  
+  **vdb-dump**: does not ignore table-argument on plain table any more, has to be SEQUENCE on plain tables if used  
+
+
+## SRA Toolkit 2.7.0
+**June 12, 2016**
+
+  **align, bam-load**: Insert-only alignments no longer cause incorrect binning  
+  **bam-load**: fixed case where WGS accessions where not being read correctly  
+  **bam-load**: will NOT perform spot assembly using hard clipped secondary alignments, even when 'make-spots-with-secondary' is enabled; WILL perform spot assembly using hard-clipped secondary alignments when 'defer-secondary' is enabled  
+  **blast, kfg, ncbi-vdb, sra-tools, vfs**: restored possibility to disable local caching  
+  **build, sra-tools**: Running make and make install in sra-tools repository prepares all configuration files required to access NCBI repository  
+  **doc, ncbi-vdb**: created a Wiki page illustrating how to use the API to set up logging  
+  **fastdump, sra-tools**: new tool to perform fast dumps of a whole run in either fastq or a custom format for one of our customers.  
+  **kar**: Alter the default ordering of components of an SRA archive for better network performance  
+  **kdb, kfs, kns**: Added blob validation for data being fetched remotely  
+  **kfg**: When loading configuration files on Windows USERPROFILE environment variable is used before HOME  
+  **kfg**: modified auxiliary remote access configuration to use load-balanced servers  
+  **kns**: Fixed a bug when KHttpRequestPOST generated an incorrect Content-Length after retry  
+  **ngs, search, sra-search**: sra-search was modified to support multiple threads.  
+  **ngs-engine, ngs-tools, sra-tools, vfs**: The "auxiliary" nodes in configuration are now ignored  
+  **pileup-stats**: updated commandline parser to eat unprocessed parameters  
+  **sam-dump**: updated to append asterisks to quality field of SAM output when corrupt original BAM has secondary alignment is shorter than the primary.  
+  **search**: now supports multi-threaded search  
+  **sra-search**: now supports sorted output  
+  **sra-tools**: added possibility to build rpm package in sra-toolkit  
+  **sra-tools**: fixed exit codes for a number of applications in response to command line options  
+  **vdb-dump**: added tests to verify vdb-dump operation on nested databases  
+  **vdb-validate**: A new checks were added for SEQUENCE table  
+  **vdb**: fixed a bug in VCursorFindNextRowIdDirect where it returned a wrong rowId  
+  **vdb**: fixed a bug in the code used to iterate over blobs where rowmap expansion cache would reset iteration to initial row instead of respecting sequence  
+  **vfs**: environment variable VDB_PWFILE is no longer used  
+
+
+## SRA Toolkit 2.6.3
+**May 25, 2016**
+
+  **bam-load**: Corrects an optimization used to compare read lengths when lengths are greater than 255
+  **bam-load**: alignments which are below the minimum match count but with at least 1/2 of the aligned bases matching are accepted
+  **bam-load**: improved performance of SAM parsing code
+  **bam-load**: non-fatal result codes no longer cause the reader thread to quit early
+  **bam-load**: will NOT do spot assembly using hard clipped secondary alignments even when make-spots-with-secondary is enabled; WILL do spot assembly using hard-clipped secondary alignments when defer-secondary is enabled
+  **build**: MSVS 2013 toolset (12.0) is now supported across all repositories
+  **vdb**: Fixed a bound on memory cache that would never flush under certain access modes
+
+## SRA Toolkit 2.6.2
+**April 20, 2016**
+
+  **align-cache**: a tool producing vdbcache that reduces effects of random access and improves speed.  
+  **bam-load**: Fixed bug in validation code for unsorted bam files  
+  **bam-load**: If two (or more) local reference names refer to the same global reference, bam-load will record the first one used and report the change.  
+  **bam-load**: Secondary alignment will be used for spot assembly if the loader is explicitly told to use them  
+  **bam-load**: The code that had invalid item in index problem was removed in the process of addressing a performance issue.  
+  **bam-load**: change reporting of fatal warnings into fatal errors  
+  **bam-load**: changed from an error to a warning if using secondary alignments to create spots  
+  **bam-load**: low-match secondary alignments are now discarded; low-match primary alignments are logged, and if too many, it will abort the load.  
+  **bam-load**: records the contents of the BX tag  
+  **bam-load**: rules for spot assembly were reverted to assembling spots only on primary alignments  
+  **blast, build**: Improved blast tools: all required libraries are linked statically.  
+  **build**: Allow to build sra-tools on systems without static c++ library  
+  **check-corrupt, vdb-validate**: Added a new set of checks that can be triggered by using one of two "--sdc:" cmd options  
+  **copycat**: now runs on Centos 7; no longer uses system-installed magic file  
+  **dbgap-mount**: Added support for standard options  "-L" and "-o", which allow users to determine the logging level and log output file  
+  **dbgap-mount**: New optional parameter was introduced '-u' which allows user to unmount FUSE/DOKAN volume. Implemented on linux and windows  
+  **fastq-load**: The (old) fastq-loader will properly report multiple reads on the 454 platform (and still fail).  
+  **kar**: added '--md5' option to create md5sum compatible auxiliary file  
+  **kdb**: Fixed VTableDropColumn, so that it can drop static columns  
+  **kfs, kns, ngs, sra-tools**: Fixed thread safety issues for both cache and http files  
+  **kget**: has a new option --full to match wget in speed. added examples.sh  
+  **kproc**: Fixed KQueue to wake waiters when sealed, fixed KSemaphore to wake waiters when canceled  
+  **latf-load**: now allows undescores inside spot group names   
+  **latf-load**: now loads data produced by fastq-dump  
+  **latf-load**: updated to support Illumina tag line format with identifier at the front  
+  **pileup-stats**: added -V (--version) option: prints out the software  
+  **pileup-stats**: pileup-stats: added version support (options -V or --version)  
+  **prefetch**: Added --eliminate-quals option which speeds up HTTP download by ignoring QUALITY column`s data  
+  **prefetch**: Fixed failure when running prefetch.exe "-a<bin|key>" when there is a space after "-a"  
+  **prefetch**: messages about maximum size of download are made more user-friendly.  
+  **prefetch**: now will download even when caching is disabled  
+  **ref-variation**: --input-file option allows to specify input accessions and paths in the file  
+  **ref-variation**: added "count-strand" option: it controls relative orientation of 3' and 5' fragments.  
+  **ref-variation**: added -c option to flush output immediately; reporting zero matches  
+  **ref-variation**: added a way to specify a number of repeats of the query  
+  **ref-variation**: improved threading management  
+  **ref-variation**: removed irrelevant warnings reported in some cases in debug version only  
+  **sam-dump**: Segfault no longer occurs when confronted with large amounts of header lines  
+  **sam-dump**: added option to produce MD tags  
+  **sam-dump**: filters out duplicates in the rows that it generates  
+  **sam-dump**: produces BX-tags if preserved in SRA file by bam-load  
+  **sra-sort**: correctly generates spot-id column even in the absence of primary alignments  
+  **sra-stat**: no longer fails when CS_NATIVE column is not present.  
+  **sra-tools, vdb-config**: Removed dependency of mac binaries on unnecessary libraries, e.g. libxml2.  
+  **sra-tools**: [https://github.com/ncbi/sra-tools/issues/27](https://github.com/ncbi/sra-tools/issues/27) : contains short and long examples of how to configure sra-tools build  
+  **var-expand**: a tool for batch variation expansion  
+  **vdb-config**: now handles standard options such as --option-file  
+  **vdb-validate**: Added code to continue with the next row when column has discontiguous blobs  
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8987076
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,66 @@
+CONTENTS
+
+  Public Domain Notice
+  Exceptions (for bundled 3rd-party code)
+  Copyright F.A.Q.
+
+
+==============================================================
+                     PUBLIC DOMAIN NOTICE
+         National Center for Biotechnology Information
+
+With the exception of certain third-party files summarized below, this
+software is a "United States Government Work" under the terms of the
+United States Copyright Act.  It was written as part of the authors'
+official duties as United States Government employees and thus cannot
+be copyrighted.  This software is freely available to the public for
+use. The National Library of Medicine and the U.S. Government have not
+placed any restriction on its use or reproduction.
+
+Although all reasonable efforts have been taken to ensure the accuracy
+and reliability of the software and data, the NLM and the U.S.
+Government do not and cannot warrant the performance or results that
+may be obtained by using this software or data. The NLM and the U.S.
+Government disclaim all warranties, express or implied, including
+warranties of performance, merchantability or fitness for any
+particular purpose.
+
+Please cite the authors in any work or product based on this material.
+
+
+==============================================================
+EXCEPTIONS (in all cases excluding NCBI-written makefiles):
+
+See LICENSE from https://github.com/ncbi/ncbi-vdb
+
+==============================================================
+Copyright F.A.Q.
+
+
+--------------------------------------------------------------
+Q. Our product makes use of the NCBI source code, and we made changes
+   and additions to that version of the NCBI code to better fit it to
+   our needs. Can we copyright the code, and how?
+
+A. You can copyright only the *changes* or the *additions* you made to the
+   NCBI source code. You should identify unambiguously those sections of
+   the code that were modified, e.g. by commenting any changes you made
+   in the code you distribute. Therefore, your license has to make clear
+   to users that your product is a combination of code that is public domain
+   within the U.S. (but may be subject to copyright by the U.S. in foreign
+   countries) and code that has been created or modified by you.
+
+--------------------------------------------------------------
+Q. Can we (re)license all or part of the NCBI source code?
+
+A. No, you cannot license or relicense the source code written by NCBI
+   since you cannot claim any copyright in the software that was developed
+   at NCBI as a 'government work' and consequently is in the public domain
+   within the U.S.
+
+--------------------------------------------------------------
+Q. What if these copyright guidelines are not clear enough or are not
+   applicable to my particular case?
+
+A. Contact us. Send your questions to 'sra-tools at ncbi.nlm.nih.gov'.
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..90922b2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,187 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+#-------------------------------------------------------------------------------
+# environment
+#
+TOP ?= $(CURDIR)
+include $(TOP)/build/Makefile.shell
+
+
+#-------------------------------------------------------------------------------
+# default
+#
+SUBDIRS = \
+	shared \
+	tools \
+
+# common targets for non-leaf Makefiles; must follow a definition of SUBDIRS
+include $(TOP)/build/Makefile.targets
+
+default: $(SUBDIRS)
+
+test: all
+
+$(SUBDIRS) test:
+	@ $(MAKE) -C $@
+
+.PHONY: default $(SUBDIRS) test
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(SUBDIRS_ALL):
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(SUBDIRS_STD):
+
+#-------------------------------------------------------------------------------
+# install
+#
+install: 
+	@ echo "Checking make status of tools..."
+	@ $(MAKE) -s --no-print-directory TOP=$(CURDIR) std
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.install install
+
+uninstall:    
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.install uninstall
+
+.PHONY: install uninstall
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: clean_deb clean_rpm clean_test
+
+clean_test:
+	@ $(MAKE) -s -C test clean
+
+#-------------------------------------------------------------------------------
+# runtests
+#
+runtests: runtests_test
+
+runtests_test:
+	@ $(MAKE) -s -C test runtests
+
+#	@ $(MAKE) -s -C ngs runtests
+
+#-------------------------------------------------------------------------------
+# slowtests
+#
+slowtests: slowtests_test
+
+slowtests_test:
+	@ $(MAKE) -s -C test slowtests
+
+#-------------------------------------------------------------------------------
+# valgrind
+#
+valgrind: valgrind_test
+
+valgrind_test:
+	@ $(MAKE) -s -C test valgrind
+
+#-------------------------------------------------------------------------------
+# RPM
+#
+ifeq (mac,$(OS))
+rpm:
+	@ echo "Not making rpm on Mac"
+clean_rpm:
+else
+rpm: std
+	@ $(MAKE)       rpm -s TOP=$(CURDIR) -f build/Makefile.rpm
+clean_rpm:
+	@ $(MAKE) clean_rpm -s TOP=$(CURDIR) -f build/Makefile.rpm
+endif
+
+#-------------------------------------------------------------------------------
+# DEB
+#
+ifeq (mac,$(OS))
+deb: std
+else
+deb:
+endif
+	@ $(MAKE)       deb -s TOP=$(CURDIR) -f build/Makefile.deb
+clean_deb:
+	@ $(MAKE) clean_deb -s TOP=$(CURDIR) -f build/Makefile.deb
+
+#-------------------------------------------------------------------------------
+# pass-through targets
+#
+COMPILERS = GCC ICC VC++ CLANG
+ARCHITECTURES = i386 x86_64 sparc32 sparc64
+CONFIG = debug profile release
+PUBLISH = scm pubtools
+REPORTS = bindir targdir osdir config compilers architecture architectures
+PASSTHRUS = \
+	out \
+	CC $(COMPILERS) \
+	$(ARCHITECTURES) \
+	$(CONFIG) $(PUBLISH) \
+	purify purecov \
+	local static dynamic
+
+$(RHOSTS):
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env local
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env require-proxy-exec
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env rebuild-dirlinks config
+
+$(PASSTHRUS):
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env rebuild-dirlinks config
+
+$(REPORTS):
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
+
+.PHONY: $(PASSTHRUS) $(RHOSTS) $(REPORTS)
+
+
+#-------------------------------------------------------------------------------
+# configuration help
+#
+help configure:
+	@ echo "Before initial build, run './configure --build-prefix=<out>' from"
+	@ echo "the project root to set the output directory of your builds."
+	@ echo
+	@ echo "To select a compiler, run 'make <comp>' where"
+	@ echo "comp = { "$(COMPILERS)" }."
+	@ echo
+	@ echo "For hosts that support cross-compilation ( only Macintosh today ),"
+	@ echo "you can run 'make <arch>' where arch = { "$(ARCHITECTURES)" }."
+	@ echo
+	@ echo "To set a build configuration, run 'make <config>' where"
+	@ echo "config = { "$(CONFIG)" }."
+	@ echo
+	@ echo "To select a remote build configuration, run 'make <rhost>' where"
+	@ echo "rhost = { "$(RHOSTS)" }."
+	@ echo
+
+.PHONY: help configure
diff --git a/README-blastn b/README-blastn
new file mode 100644
index 0000000..2008a8c
--- /dev/null
+++ b/README-blastn
@@ -0,0 +1,133 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The NCBI SRA ( Sequence Read Archive )
+
+
+Contact: sra-tools at ncbi.nlm.nih.gov
+http://trace.ncbi.nlm.nih.gov/Traces/sra/std
+
+
+Stand-alone BLAST searches against SRA runs in their native format.
+-------------------------------------------------------------------
+
+A stand-alone blastn application to perform BLAST searches directly against 
+native SRA files is included in this distribution. This application has been
+tested in-house at the NCBI, but has not been heavily used, so this should be
+considered a preliminary (alpha) release to a few experienced users. A 64-bit
+LINUX application has been built for this testing. 
+
+The application is called "blastn_vdb".
+
+The application can be invoked in much the same manner as the standard 
+blastn application:
+
+1) blastn_vdb -help or blastn_vdb -h will produce usage messages.
+
+2) The BLAST+ command-line manual at http://www.ncbi.nlm.nih.gov/books/NBK1763/ 
+provides more details on the options, though not all blastn options are
+available with blastn_vdb. Some options simply do not apply to sequences in SRA
+(e.g., -gilist is missing as these sequences have not been assigned GI's). Some
+options have not yet been implemented (e.g., -num_threads is currently disabled).
+
+
+To search cached or on-demand SRA objects.
+------------------------------------------
+An example blastn_vdb command-line would be:
+
+./blastn_vdb -db "ERR039542 ERR047215 ERR039539 ERR039540" -query nt.test -out test.out
+
+The file nt.test contains the query in FASTA format, and it will be searched against 
+the reads in runs with accessions ERR039542 ERR047215 ERR039539 ERR039540.
+
+If you have not already downloaded these objects using the vdb "prefetch" tool,
+they will be retrieved on-demand from NCBI under standard configuration. For
+alternative configuration information, please see the "README-vdb-config" file
+in this distribution.
+
+Searching with manually downloaded files.
+-----------------------------------------
+If you have manually downloaded files, e.g. via aspera or wget, etc., they may
+be referred to as "local" files. You can pass one or more file paths to be used
+collectively as the database. In this case the blastn_vdb command-line would be:
+
+./blastn_vdb -db <SRR_file> -query <input_file> -out <output_file>
+	
+Where
+<SRR_file> is the path (relative or absolute) and name of the SRRxxxxx file
+<input_file> is a fasta file containing the sequence(s) to be BLASTed
+<output_file> is the name specified for the output report of the blast search.
+
+Example:
+
+./blastn_vdb -db ./subdir/ERR039542.sra -query nt.test -out test.out
+
+Querying multiple SRR files simultaneously:
+
+./blastn_vdb -db "<SRR_file1> <SRR_file2> <SRR_file3>" -query <input.fa> -out <output_file>
+
+Enclose the group of files to be included in the search set in "quotes", e.g.
+"./SRR_file1.sra ./SRR_file2.sra ./SRR_file3.sra"
+
+Example:
+
+./blastn_vdb -db "./ERR039542.sra ./ERR047215.sra ./ERR039539.sra ./ERR039540.sra" -query nt.test -out test.out
+
+Caveats
+-------
+There are some limitations on the currently available application:
+
+1) Individual SRA data files containing more than 2 billion reads are not yet supported. For a 
+paired-end experiment this is actually a limitation of about 1 billion "spots".
+
+2) Compressed SRA ("cSRA") is not yet fully supported. Currently, only the
+unaligned fraction of reads are searched. Compressed SRA are runs containing
+alignments (e.g., ERR230455). Runs can be checked with "vdb-dump" to report if
+they contain alignment information:
+
+    $ vdb-dump -E ERR230455
+    enumerating the tables of database 'ERR230455'
+    tbl #1: PRIMARY_ALIGNMENT
+    tbl #2: REFERENCE
+    tbl #3: SEQUENCE
+
+3) You may need to prefix "./" to the run name for files in your current
+directory.
+
+4) The blast_formatter is not currently able to read native SRA files, so 
+reformatting of results saved as a blast archive is not yet supported.
+
+Common errors and fixes.
+------------------------
+
+1) Failure to provide relative path to manually downloaded SRR file:
+
+./blastn_vdb -db SRR770754.sra -query srr770754_test.fa -out test.out
+Error: NCBI C++ Exception:
+    "vdb2blast_util.cpp", line 253: Error: ncbi::CVDBBlastUtil::x_MakeSRASeqSrc() 
+    - VDB BlastSeqSrc construction failed: Failed to add any run to VDB runset: unsupported while allocating
+    
+Fix:
+Include relative (e.g., "../" or "./") or absolute (e.g., "/home/user/SRA_BLAST_data/") file path with SRR file
diff --git a/README-vdb-config b/README-vdb-config
new file mode 100644
index 0000000..46d1686
--- /dev/null
+++ b/README-vdb-config
@@ -0,0 +1,115 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The tool 'vdb-config' can be used to inspect or change the configuration
+of the sra-toolkit.
+
+When called without any parameters the tool reports the current configuration
+in xml-format. No changes are made.
+
+-----------------------------------------------------------------------------
+
+vdb-config --restore-defaults
+
+If called with this parameter the tool will bring the configuration into
+default state.
+
+-----------------------------------------------------------------------------
+
+vdb-config -i
+
+This will present the user with a colored configuration dialog.
+
+The tab-key and the cursor-keys navigate the dialog. The item with the little
+red square has the focus. A button or a checkbox can be 'pressed' with the
+space or enter-key. To get out of the dialog without saving any changes
+press the '6'-key or the 'q'-key or navigate to the 'exit'-button at the
+bottom of the dialog and press the space or enter-key.
+
+
+The "data source" part:
+
+The "NCBI SRA" labeled checkbox enables/disables remote access to the SRA-
+accession stored at NCBI. As long as the computer has internet-access and this
+checkbox is enabled the user can access SRA-accessions directly without
+downloading them.
+
+A command like 'sra-pileup SRR341578' at the command-line will produce pileup
+output of the given accession even if this accession has not been downloaded
+before.
+The tool will download the data on the fly from our servers.
+
+
+There might be a checkbox labeled "site" below the "NCBI-SRA" one. If this
+checkbox is not available you do not have a 'site'-installation of SRA-data.
+If it is visible you do have such a site-installation and you can disable
+access to this data.
+
+
+The "local workspaces" part:
+
+At the top are 2 buttons "import dbGaP-project" and "set default import path".
+
+If you are not using dbGaP-projects (The database of Genotypes and Phenotypes)
+you can ignore these 2 buttons.
+
+The "import dbGaP-project" button presents you with another dialog to select
+a ngc-file. You can navigate the directories of your computer to find and
+select one of these files. By default the focus is in the files-list. It may
+be empty.
+Use the cursor-key: 'up' to focus the 'directories'-list. If you press enter
+on any of the listed directory-names you change into this directory.
+The '[ .. ]' entry brings you back into the parent directory. If you see
+ngc-files in the lower 'files'-list press the tab-key to switch to the
+'files'-list. Press enter on one of them to select this file for import. You
+will see a success-message if the import was performed without errors.
+On Windows you cannot switch from one drive-letter
+to another when selecting.
+
+The "set default import path" gives you the opportunity to specify a different
+default location for dbGaP-projects - for instance if your home directory is
+not big enough. You can always change the location for your dbGaP-project
+after the import.
+
+
+Below the 2 buttons is a list of local repositories. If there are no
+dbGaP-projects this list has only one entry "Open Access Data". This is the
+location where accessions get downloaded and cached. You can change these
+locations if for instance your home directory where they are created by
+default does not have enough space.
+The change button brings up a directory-select dialog.
+
+If you made any changes like enabling/disabling or changed a location, the
+change is only written to the configuration if you exit the dialog via the
+'save and exit' button.
+
+-----------------------------------------------------------------------------
+
+
+vdb-config -i --interactive-mode textual
+
+This will present the user with a purely textual and sequential dialog. It is
+intended to be used if the colored mode does not work, maybe because of
+console issues.
diff --git a/README.md b/README.md
index 0e468d3..238f8c6 100644
--- a/README.md
+++ b/README.md
@@ -1,107 +1,35 @@
-[![Coverage Status](https://coveralls.io/repos/github/samtools/htsjdk/badge.svg?branch=master)](https://coveralls.io/github/samtools/htsjdk?branch=master)
-[![Build Status](https://travis-ci.org/samtools/htsjdk.svg?branch=master)](https://travis-ci.org/samtools/htsjdk)
-[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.samtools/htsjdk/badge.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.github.samtools%22%20AND%20a%3A%22htsjdk%22)
-[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samtools/htsjdk)
-[![Language](http://img.shields.io/badge/language-java-brightgreen.svg)](https://www.java.com/)
+# The NCBI SRA (Sequence Read Archive)
 
-Status of downstream projects automatically built on top of the current htsjdk master branch. See [gatk-jenkins](https://gatk-jenkins.broadinstitute.org/view/HTSJDK%20Release%20Tests/) for detailed logs. Failure may indicate problems  in htsjdk, but may also be due to expected incompatibilities between versions, or unrelated failures in downstream projects.
-- [Picard](https://github.com/broadinstitute/picard):  [![Build Status](https://gatk-jenkins.broadinstitute.org/buildStatus/icon?job=picard-on-htsjdk-master)](https://gatk-jenkins.broadinstitute.org/job/picard-on-htsjdk-master/)
-- [GATK 4](https://github.com/broadinstitute/gatk): [![Build Status](https://gatk-jenkins.broadinstitute.org/buildStatus/icon?job=gatk-on-htsjdk-master)](https://gatk-jenkins.broadinstitute.org/job/gatk-on-htsjdk-master/)
+### Contact:
+email: sra-tools at ncbi.nlm.nih.gov
+or visit the [SRA Tools web site](http://ncbi.github.io/sra-tools)
 
-## A Java API for high-throughput sequencing data (HTS) formats.  
+### Download
+Visit our [download page](https://github.com/ncbi/sra-tools/wiki/Downloads) for pre-built binaries.
 
-HTSJDK is an implementation of a unified Java library for accessing
-common file formats, such as [SAM][1] and [VCF][2], used for high-throughput
-sequencing data.  There are also an number of useful utilities for 
-manipulating HTS data.
+### Change Log
+Please check the CHANGES.md file for change history.
 
-Please see the [HTSJDK Documentation](http://samtools.github.io/htsjdk) for more information.
+## The SRA Toolkit
+The SRA Toolkit and SDK from NCBI is a collection of tools and libraries for
+using data in the INSDC Sequence Read Archives.
 
-> **NOTE: _HTSJDK does not currently support the latest Variant Call Format Specification (VCFv4.3 and BCFv2.2)._**
+### IMPORTANT ANNOUNCEMENT
+As was announced in [OMB memorandum M-15-13](https://www.whitehouse.gov/sites/default/files/omb/memoranda/2015/m-15-13.pdf) on June 8, 2015, NCBI and all Federal systems will be transitioning to using HTTPS-only protocols before the end of 2016. This change will affect any software that uses NCBI APIs such as the E-utilities or NCBI software toolkits such as `sra-tools`, `ncbi-vdb` or `ngs`.
 
-#### Building HTSJDK
+The NLM and NCBI may implement the switch to HTTPS-only as early as September 30, 2016.
 
-HTSJDK is now built using [gradle](http://gradle.org/).
+In particular, software products that depend on `sra-tools`, `ncbi-vdb` or `ngs` may not function as expected after September 30 unless they are properly updated from this site or by the software provider.
 
-A wrapper script (`gradlew`) is included which will download the appropriate version of gradle on the first invocation.
-
-Example gradle usage from the htsjdk root directory:
- - compile and build a jar 
- ```
- ./gradlew
- ```
- or
- ```
- ./gradlew jar
- ```
- The jar will be in build/libs/htsjdk-\<version\>.jar where version is based on the current git commit.
-
- - run tests, a specific test class, or run a test and wait for the debugger to connect
- ```
- ./gradlew test
-
- ./gradlew test -Dtest.single=TestClassName
-
- ./gradlew test --tests htsjdk.variant.variantcontext.AlleleUnitTest
- ./gradlew test --tests "*AlleleUnitTest"
-
- ./gradlew test --tests "*AlleleUnitTest" --debug-jvm
- ```
-
-- run tests and collect coverage information (report will be in `build/reports/jacoco/test/html/index.html`)
-```
-./gradlew jacocoTestReport
-```
-
- - clean the project directory
- ```
- ./gradlew clean
- ```
-
- - build a monolithic jar that includes all of htsjdk's dependencies
- ```
- ./gradlew shadowJar
- ```
+If you use software that accesses NCBI SRA data in any way, your software will likely be affected by this change. Please check with your software provider for recent udpates or patches, and be sure to acquire these before September 30.
  
- - create a snapshot and install it into your local maven repository
- ```
- ./gradlew install
- ```
-
- - for an exhaustive list of all available targets
- ```
- ./gradlew tasks
- ```
-
-#### Create an HTSJDK project in IntelliJ
-To create a project in IntelliJ IDE for htsjdk do the following:
-
-1. Select fom the menu: `File -> New -> Project from Existing Sources`
-2. In the resulting dialog, chose `Import from existing model`, select `Gradle` and `Next`
-3. Choose the `default gradle wrapper` and `Finish`.
-
-From time to time if dependencies change in htsjdk you may need to refresh the project from the `View -> Gradle` menu.
-
-#### Licensing Information
-
-Not all sub-packages of htsjdk are subject to the same license, so a license notice is included in each source file or sub-package as appropriate. Please check the relevant license notice whenever you start working with a part of htsjdk that you have not previously worked with to avoid any surprises. 
-
-#### Java Minimum Version Support Policy
-
-> **NOTE: _Effective November 24th 2015, HTSJDK has ended support of Java 7 and previous versions. Java 8 is now required_.**
-
-We will support all Java SE versions supported by Oracle until at least six months after Oracle's Public Updates period has ended ([see this link](http://www.oracle.com/technetwork/java/eol-135779.html)).
-
-Java SE Major Release | End of Java SE Oracle Public Updates | Proposed End of Support in HTSJDK | Actual End of Support in HTSJDK
----- | ---- | ---- | ----
-6 | Feb 2013 | Aug 2013 | Oct 2015
-7 | Apr 2015 | Oct 2015 | Oct 2015
-8* | Mar 2017 | Sep 2017 | Sep 2017
+If you develop software that relies on `sra-tools`, `ncbi-vdb` or `ngs` in any way, you will likely need to update your code so that it accesses NCBI using HTTPS.
 
-* to be finalized
+We have released new tools with version 2.8.0 that are HTTPS compatible and `M-15-13` compliant as of October 7, 2016. Please be certain to [update all of your binaries](https://github.com/ncbi/sra-tools/wiki/Downloads) and configuration files.
 
-HTSJDK is migrating to semantic versioning (http://semver.org/). We will eventually adhere to it strictly and bump our major version whenever there are breaking changes to our API, but until we more clearly define what constitutes our official API, clients should assume that every release potentially contains at least minor changes to public methods.
+For additional information on using, configuring, and building the toolkit,
+please visit our [wiki](https://github.com/ncbi/sra-tools/wiki)
+or our web site at [NCBI](http://www.ncbi.nlm.nih.gov/Traces/sra/?view=toolkit_doc)
 
-[1]: http://samtools.sourceforge.net
-[2]: http://vcftools.sourceforge.net/specs.html
 
+SRA Toolkit Development Team
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 9e8f351..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,227 +0,0 @@
-buildscript {
-    repositories {
-        mavenCentral()
-    }
-}
-
-plugins {
-    id "java"
-    id 'maven'
-    id 'signing'
-    id 'jacoco'
-    id 'com.palantir.git-version' version '0.5.1'
-    id 'com.github.johnrengelman.shadow' version '1.2.3'
-    id "com.github.kt3k.coveralls" version "2.6.3"
-}
-
-repositories {
-    mavenCentral()
-}
-
-jacocoTestReport {
-    dependsOn test
-    group = "Reporting"
-    description = "Generate Jacoco coverage reports after running tests."
-    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
-
-    reports {
-        xml.enabled = true // coveralls plugin depends on xml format report
-        html.enabled = true
-    }
-}
-
-jacoco {
-    toolVersion = "0.7.5.201505241946"
-}
-
-dependencies {
-    compile "org.apache.commons:commons-jexl:2.1.1"
-    compile "commons-logging:commons-logging:1.1.1"
-    compile "org.xerial.snappy:snappy-java:1.0.3-rc3"
-    compile "org.apache.commons:commons-compress:1.4.1"
-    compile "org.tukaani:xz:1.5"
-    compile "gov.nih.nlm.ncbi:ngs-java:1.2.4"
-
-    testCompile "org.testng:testng:6.9.9"
-}
-
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
-
-final isRelease = Boolean.getBoolean("release")
-final gitVersion = gitVersion().replaceAll(".dirty", "")
-version = isRelease ? gitVersion : gitVersion + "-SNAPSHOT"
-
-logger.info("build for version:" + version)
-group = 'com.github.samtools'
-
-defaultTasks 'jar'
-
-jar {
-    manifest {
-        attributes 'Implementation-Title': 'HTSJDK',
-                'Implementation-Vendor' : 'Samtools Organization',
-                'Implementation-Version': version
-    }
-}
-
-import org.gradle.internal.os.OperatingSystem;
-
-tasks.withType(Test) {
-    outputs.upToDateWhen { false } // tests will always rerun
-    useTestNG()
-
-    // set heap size for the test JVM(s)
-    minHeapSize = "1G"
-    maxHeapSize = "2G"
-
-    jvmArgs '-Djava.awt.headless=true'  //this prevents awt from displaying a java icon while the tests are running
-
-    if (System.env.CI == "true") {  //if running under a CI output less into the logs
-        int count = 0
-
-        beforeTest { descriptor ->
-            count++
-            if( count % 100 == 0) {
-                logger.lifecycle("Finished "+ Integer.toString(count++) + " tests")
-            }
-        }
-    } else {
-        // show standard out and standard error of the test JVM(s) on the console
-        testLogging.showStandardStreams = true
-        beforeTest { descriptor ->
-            logger.lifecycle("Running Test: " + descriptor)
-        }
-
-        // listen to standard out and standard error of the test JVM(s)
-        onOutput { descriptor, event ->
-            logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
-        }
-    }
-
-    testLogging {
-        testLogging {
-            events "skipped", "failed"
-            exceptionFormat = "full"
-        }
-        afterSuite { desc, result ->
-            if (!desc.parent) { // will match the outermost suite
-                println "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
-            }
-        }
-    }
-}
-
-test {
-    description = "Runs the unit tests other than the SRA tests"
-
-    useTestNG {
-        if( OperatingSystem.current().isUnix() ){
-            excludeGroups "slow", "broken", "sra"
-        } else {
-            excludeGroups "slow", "broken", "unix", "sra"
-        }
-    }
-}
-
-task testSRA(type: Test) {
-    jvmArgs '-Dsamjdk.sra_libraries_download=true'
-
-    description "Run the SRA tests"
-    useTestNG {
-        configFailurePolicy 'continue'
-        includeGroups "sra"
-    }
-}
-
-task wrapper(type: Wrapper) {
-    description = "Regenerate the gradle wrapper"
-    gradleVersion = '2.13'
-}
-
-// This is a hack to disable the java 8 default javadoc lint until we fix the html formatting
-if (JavaVersion.current().isJava8Compatible()) {
-    tasks.withType(Javadoc) {
-        options.addStringOption('Xdoclint:none', '-quiet')
-    }
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
-    classifier = 'javadoc'
-    from 'build/docs/javadoc'
-}
-
-task sourcesJar(type: Jar) {
-    from sourceSets.main.allSource
-    classifier = 'sources'
-}
-
-/**
- *This specifies what artifacts will be built and uploaded when performing a maven upload.
- */
-artifacts {
-    archives jar
-    archives javadocJar
-    archives sourcesJar
-}
-
-/**
- * Sign non-snapshot releases with our secret key.  This should never need to be invoked directly.
- */
-signing {
-    required { isRelease && gradle.taskGraph.hasTask("uploadArchives") }
-    sign configurations.archives
-}
-
-/**
- * Upload a release to sonatype.  You must be an authorized uploader and have your sonatype
- * username and password information in your gradle properties file.  See the readme for more info.
- *
- * For releasing to your local maven repo, use gradle install
- */
-uploadArchives {
-    repositories {
-        mavenDeployer {
-            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
-
-            repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
-                authentication(userName: project.findProperty("sonatypeUsername"), password: project.findProperty("sonatypePassword"))
-            }
-
-            snapshotRepository(url: "https://artifactory.broadinstitute.org/artifactory/libs-snapshot-local/") {
-                authentication(userName: System.env.ARTIFACTORY_USERNAME, password: System.env.ARTIFACTORY_PASSWORD)
-            }
-
-            pom.project {
-                name 'HTSJDK'
-                packaging 'jar'
-                description 'A Java API for high-throughput sequencing data (HTS) formats'
-                url 'http://samtools.github.io/htsjdk/'
-
-                developers {
-                    developer {
-                        id 'picard'
-                        name 'Picard Team'
-                        url 'http://broadinstitute.github.io/picard'
-                    }
-                }
-
-                scm {
-                    url 'git at github.com:samtools/htsjdk.git'
-                    connection 'scm:git:git at github.com:samtools/htsjdk.git'
-                }
-
-                licenses {
-                    license {
-                        name 'MIT License'
-                        url 'http://opensource.org/licenses/MIT'
-                        distribution 'repo'
-                    }
-                }
-            }
-        }
-    }
-    doFirst{
-        System.out.println("Uploading version $version")
-    }
-}
diff --git a/build.xml b/build.xml
deleted file mode 100755
index 59bebde..0000000
--- a/build.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  ~ The MIT License
-  ~
-  ~ Copyright (c) 2009 The Broad Institute
-  ~
-  ~ 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.
-  -->
-
-<project name="htsjdk" basedir="." default="all">
-
-
-    <property name="gradle.executable" location="gradlew"/>
-
-    <echo>
-        ANT IS DEPRECATED FOR BUILDING HTSJDK
-
-        Please switch to using gradlew
-
-        Examples:
-        compile htsjdk or it's tests
-          ./gradlew compileJava
-          ./gradlew compileTest
-
-        build a jar
-          ./gradlew jar
-
-        build a jar, along with source and document jars
-        ./gradlew build
-
-        build a jar that packages all of htsjdk's dependencies in a single jar
-        ./gradlew shadowJar
-
-        run tests, or a single test, or run a test and wait for the debugger
-          ./gradlew test
-          ./gradlew test --tests "*AlleleUnitTest"
-          ./gradlew test --tests "*AlleleUnitTest" --debug-jvm
-
-        clean the project directory
-          ./gradlew clean
-
-        see an exhaustive list of all available targets
-          ./gradlew tasks
-    </echo>
-
-</project>
diff --git a/build/.gitignore b/build/.gitignore
new file mode 100644
index 0000000..e865f29
--- /dev/null
+++ b/build/.gitignore
@@ -0,0 +1,6 @@
+.cvsignore
+RHOST* ARCH* COMP* OUTDIR*
+STATIC
+ld.linux.exe_cmd.sh
+LNKG.*
+Makefile.config*
diff --git a/build/Makefile.cc b/build/Makefile.cc
new file mode 100644
index 0000000..590b55e
--- /dev/null
+++ b/build/Makefile.cc
@@ -0,0 +1,67 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/$(OS)-cc.sh $(OS) 'cc -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/$(OS)-c++.sh $(OS) 'c++ -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = cc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) cc \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) c++ \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+# tool options
+WARN =
+
+ifeq (64,$(BITS))
+	CARCH = -m64
+else
+	CARCH = -m32
+endif
+
+ifeq (prof, $(BUILD))
+	PROF = -xpg
+endif
+
+ifeq (dbg, $(BUILD))
+	DBG = -g
+	OPT = $(WARN)
+	NOPT = $(WARN)
+	PED = -xc99=all -Xc -v
+else
+	OPT = -xO3
+	PED = -xc99=all # -Xc -v
+endif
diff --git a/build/Makefile.clang b/build/Makefile.clang
new file mode 100644
index 0000000..ecc0d2c
--- /dev/null
+++ b/build/Makefile.clang
@@ -0,0 +1,83 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/cc.sh $(OS) 'clang -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/cc.sh $(OS) 'clang++ -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = gcc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) clang \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR):$(NGS_LIBDIR):$(VDB_LIBDIR):$(VDB_ILIBDIR)
+
+LPFLAGS = $(LDFLAGS)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) clang++ \
+	--build $(BUILD) --ldflags "$(LPFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR):$(NGS_LIBDIR):$(VDB_LIBDIR):$(VDB_ILIBDIR)
+
+# tool options
+WARN = -Wall -Wno-variadic-macros -Wno-long-long # -Wconversion
+ifeq (linux,$(OS))
+    NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
+
+ifeq (64,$(BITS))
+	CARCH = -m64
+else    
+ifeq (32_64,$(BITS))
+    CARCH = -arch i386 -arch x86_64  
+else    
+    CARCH = -m32
+endif
+endif
+
+ifeq (prof, $(BUILD))
+	PROF = -pg
+endif
+
+ifeq (dbg, $(BUILD))
+	DBG = -g
+	OPT = $(WARN)
+	NOPT = $(WARN)
+	PED = -std=c99 -pedantic # -fdiagnostics-show-option
+else
+
+ifeq (x86_64, $(ARCH))
+	OPT = -O3 -Wall -Wno-variadic-macros -fno-strict-aliasing
+else
+	OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing
+endif
+endif
+
+# clang is designed to be a GCC substitute
+COMP_DAD = gcc
diff --git a/build/Makefile.deb b/build/Makefile.deb
new file mode 100644
index 0000000..304b847
--- /dev/null
+++ b/build/Makefile.deb
@@ -0,0 +1,118 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+#VERBOSE=-v
+
+# determine shell environment ($CONFIG_FILE)
+include $(TOP)/build/Makefile.shell
+
+# load build configuration ($TARGDIR) ($VERSION)
+include $(CONFIG_FILE)
+
+# $TOOLS_TO_INSTALL
+include $(TOP)/build/Makefile.tools
+ifeq (1,$(HAVE_HDF5))
+	TOOLS_TO_INSTALL += pacbio-load
+endif
+
+PKGDIR=$(TARGDIR)/debbuild
+DST=$(PKGDIR)/sra-toolkit-$(VERSION)
+DEB=$(DST).deb
+
+TOOL=$(shell which dpkg-deb 2> /dev/null)
+
+################################################################################
+
+clean_deb:
+	rm -rf $(DEB) $(DST)
+
+ifeq ("","$(TOOL)")
+deb:
+	>&2 echo dpkg-deb: command not found
+else
+deb: $(DEB)
+endif
+
+DEB_DEPS =                       \
+	$(DST)/etc/ncbi/default.kfg  \
+	$(DST)/etc/ncbi/certs.kfg    \
+	$(DST)/etc/ncbi/schema.kfg   \
+	$(DST)/etc/ncbi/vdb-copy.kfg \
+	$(DST)/usr/bin               \
+	$(DST)/DEBIAN/control
+
+$(DEB): $(DEB_DEPS)
+ifeq (mac,$(OS))
+	         dpkg-deb --build $(DST)
+else
+	fakeroot dpkg-deb --build $(DST)
+endif
+
+$(PKGDIR):
+	mkdir $(VERBOSE) -p $@
+
+$(DST): $(PKGDIR)
+	mkdir $(VERBOSE) -p $@/DEBIAN
+	mkdir $(VERBOSE) -p $@/etc/ncbi
+
+$(DST)/etc/ncbi:
+	mkdir -p $@
+
+$(DST)/etc/ncbi/default.kfg: $(DST)/etc/ncbi
+	rsync $(VERBOSE) -l --chmod=g-w $(VDB_LIBDIR)/ncbi/default.kfg $@
+
+$(DST)/etc/ncbi/certs.kfg: $(DST)/etc/ncbi
+	rsync $(VERBOSE) -l --chmod=g-w $(VDB_LIBDIR)/ncbi/certs.kfg $@
+
+$(DST)/etc/ncbi/schema.kfg: $(DST)/etc/ncbi
+	echo '/vdb/schema/paths = "/usr/share/ncbi/schema"' > $@
+
+$(DST)/etc/ncbi/vdb-copy.kfg: $(DST)/etc/ncbi
+	rsync $(VERBOSE) -l --chmod=g-w $(BINDIR)/ncbi/vdb-copy.kfg $@
+
+$(DST)/usr/bin: $(DST)
+	mkdir $(VERBOSE) -p $@
+	$(MAKE) -s --no-print-directory -f $(TOP)/build/Makefile.deb \
+		$(TOOLS_TO_INSTALL)
+
+$(DST)/usr/share/ncbi/schema: $(DST)
+	mkdir $(VERBOSE) -p $@
+	rsync $(VERBOSE) -rmloptD --include '*.vschema' --include='*/' \
+		 --exclude '*' $(VDB_INCDIR)/* $@
+
+$(DST)/DEBIAN/control:
+	mkdir $(VERBOSE) -p $(DST)/DEBIAN
+	printf \
+"Package: sra-toolkit\n"\
+"Version: $(VERSION)\n"\
+"Architecture: all\n"\
+"Maintainer: SRA Toolkit Development Team <sra-tools at ncbi.nlm.nih.gov>\n"\
+"Description: SRA Toolkit package\n"\
+" The SRA Toolkit and SDK from NCBI is a collection of tools and libraries\n"\
+" for using data in the INSDC Sequence Read Archives.\n" > $@
+
+$(TOOLS_TO_INSTALL):
+	- ( test -f $(BINDIR)/$@ || ( echo "$@ not found" && false ) ) && \
+		rsync $(VERBOSE) -l $(BINDIR)/$@ $(BINDIR)/$@$(VERSION_EXEX) \
+			$(BINDIR)/$@$(MAJVERS_EXEX) $(DST)/usr/bin
diff --git a/build/Makefile.env b/build/Makefile.env
new file mode 100644
index 0000000..46cc5f5
--- /dev/null
+++ b/build/Makefile.env
@@ -0,0 +1,414 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# pick up dependencies from object directory
+ifdef SRCDIR
+	include $(wildcard *.d)
+endif
+
+# determine shell environment
+include $(TOP)/build/Makefile.shell
+
+# load build configuration
+include $(CONFIG_FILE)
+
+# normally build shared and static external libs
+LIBEXT = $(LIBX) $(SHLX)
+
+# normally build static intermediate libs
+ILIBEXT = $(LIBX)
+
+# determine BUILD
+ifeq (,$(BUILD))
+	BUILD = dbg
+endif
+
+# some rules are sensitive to the type of build
+BUILDTYPE = $(BUILD)
+
+# adjust settings for build
+ifeq (dbg,$(BUILD))
+	DEBUG := -D_DEBUGGING
+endif
+ifeq (prof,$(BUILD))
+	DEBUG := -D_PROFILING
+endif
+ifeq (pur,$(BUILD))
+	DEBUG := -D_DEBUGGING
+	LD_PRE := purify
+	LNKG = stat
+endif
+ifeq (pcov,$(BUILD))
+	DEBUG := -D_DEBUGGING
+	LD_PRE := purecov
+	LNKG = stat
+endif
+ifeq (scm,$(BUILD))
+	BUILDTYPE = rel
+	CHECKSUM := --checksum
+endif
+
+ifeq (yes,$(HAS_RHOST))
+	LOCAL_OR_REMOTE = remote
+else
+	LOCAL_OR_REMOTE = local
+endif
+
+# pre-built sra-tools are static
+ifeq (1,$(WANTS_STATIC))
+	STATIC = --static
+	STATICSYSLIBS = --static-system-libs
+endif
+
+# drop all suffix rules
+.SUFFIXES:
+
+# load OS and COMP specific files
+include $(TOP)/build/Makefile.$(OS)
+include $(TOP)/build/Makefile.$(COMP)
+include $(TOP)/build/Makefile.rules
+
+# external schema modules
+EXT_SCHEMA_MODULES = axf sraxf wgsxf vxf
+UPDATE_SCHEMA_LIBS := $(addprefix -lw,$(EXT_SCHEMA_MODULES))
+READONLY_SCHEMA_LIBS = $(addprefix -l,$(EXT_SCHEMA_MODULES))
+ALWAYS_STATIC_SCHEMA_LIBS = $(addprefix -s,$(EXT_SCHEMA_MODULES))
+
+# full directory paths
+TARGDIR ?= $(OUTDIR)/$(OS)/$(TOOLSET)/$(ARCH)/$(BUILD)
+BINDIR ?= $(TARGDIR)/bin
+ifeq (win,$(OS))
+    # on Windows, place test executables next to .dlls
+    TEST_BINDIR = $(BINDIR)
+else
+    TEST_BINDIR = $(TARGDIR)/test-bin
+endif
+ILIBDIR = $(TARGDIR)/ilib
+LIBDIR = $(TARGDIR)/lib
+OBJDIR = $(TARGDIR)/obj/$(MODULE)
+
+CLSPATH         ?= $(TARGDIR)/java
+CLASSPATH       ?= $(CLSPATH)
+CLASSDIR        ?= $(TARGDIR)/$(MODULE)
+TEST_CLSPATH    ?= $(TARGDIR)/test/java
+JAVASOURCEPATH  ?= $(TOP)/java
+
+# path to the ncbi sub-directory
+# this is where modules and installed schema files are kept
+ifeq (win,$(OS))
+    # under Windows, we are always relative to binary path
+	NCBIDIR = $(BINDIR)/ncbi
+else
+	# under Linux and Mac, it can be binary or library
+	NCBIDIR = $(LIBDIR)/ncbi $(BINDIR)/ncbi
+endif
+
+DEFAULT_CRT = $(VDB_SRCDIR)/libs/kfg/certs.kfg
+DEFAULT_KFG = $(VDB_SRCDIR)/libs/kfg/default.kfg
+
+# make reissue command
+MAKE_CMD = $(MAKE) BUILD=$(BUILD) TOOLSET=$(TOOLSET) COMP=$(COMP) LNKG=$(LNKG) \
+    TOP=$(TOP) SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(OBJDIR) -f $(SRCDIR)/Makefile
+
+JMAKE_CMD = $(MAKE) BUILD=$(BUILD) TOOLSET=$(TOOLSET) COMP=$(COMP) LNKG=$(LNKG) \
+    TOP=$(TOP) SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(CLASSDIR) -f $(SRCDIR)/Makefile
+
+# directory and link creation
+SUBDIRS = bin test-bin ilib lib
+OUTDIRS = schema
+
+# clean rules
+stdclean:
+	@ -rm -rf $(OBJDIR)
+	@ -rm -rf $(addsuffix .*,$(addprefix $(ILIBDIR)/,$(ALL_LIBS))) \
+			$(addsuffix .*,$(addprefix $(LIBDIR)/,$(ALL_LIBS))) \
+			$(addsuffix -static.*,$(addprefix $(LIBDIR)/,$(ALL_LIBS))) \
+			$(addsuffix *,$(addprefix $(BINDIR)/,$(ALL_TOOLS) $(ALL_LIBS))) \
+			$(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(ALL_TOOLS) $(TEST_TOOLS)))
+
+stdjclean:
+	@ -rm -rf $(CLSPATH)
+
+# removing symbolic links that point to specific builds
+removelinks:
+	@ test ! -h $(OUTDIR)/schema && rm -rf $(OUTDIR)/schema || true
+	@ rm -f $(addprefix $(OUTDIR)/,$(addsuffix $(BITS),$(SUBDIRS)))
+	@ rm -f $(addprefix $(OUTDIR)/,$(OUTDIRS))
+
+$(BINDIR)/ncbi/certs.kfg: $(DEFAULT_CRT)
+	@ mkdir -p $(NCBIDIR)
+	@ cp -v $(DEFAULT_CRT) $@
+
+$(BINDIR)/ncbi/default.kfg: $(DEFAULT_KFG)
+	@ mkdir -p $(NCBIDIR)
+	@ cp -v $(DEFAULT_KFG) $@
+
+# create all required output directories
+makedirs: $(BINDIR)/ncbi/certs.kfg $(BINDIR)/ncbi/default.kfg
+	@ mkdir -p $(addprefix $(TARGDIR)/,$(SUBDIRS) obj/$(MODULE)) $(NCBIDIR)
+
+makejdirs:
+	@ mkdir -p $(CLASSDIR)
+
+# build version include files
+vers-includes: makedirs
+	@ $(MAKE_CMD) -s $(TARGDIR)/$@
+
+ifeq (win,$(OS))
+
+# Windows doesn't really support symbolic links
+# we may add them back in when our toolkit is able to create them
+rebuild-dirlinks: makedirs
+	@ true
+else
+
+LNDIRS = $(addprefix ln_,$(SUBDIRS))
+$(LNDIRS):
+	@ ln -s $(TARGDIR)/$(subst ln_,,$@) $(OUTDIR)/$(subst ln_,,$@)$(BITS)
+
+ifdef NOREBUILD_LINKS
+rebuild-dirlinks:
+	@ true
+else
+rebuild-dirlinks: removelinks makedirs $(LNDIRS)
+	@ ln -s $(VDB_INCDIR) $(OUTDIR)/schema
+endif
+
+endif
+
+.PHONY: stdclean removelinks makedirs vers-includes rebuild-dirlinks
+.PHONY: stdjclean makejdirs
+
+# configuration targets 
+out:
+	@ echo $(OUTDIR) > $(TOP)/build/OUTDIR.$(BUILD_OS)
+	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+
+$(RHOSTS):
+	@ cat $(TOP)/rhosts/$@ >> $(TOP)/build/RHOST.$(HOST_OS)
+
+require-proxy-exec:
+	@ $(MAKE) -C $(TOP)/test/proxy_exec proxy-exec
+	@ echo "PROXY_TOOL := $(BINDIR)/proxy-exec" > $(TOP)/build/RHOST.$(HOST_OS)
+
+local:
+	@ rm -f $(TOP)/build/RHOST.$(HOST_OS)
+
+CC:
+	@ echo cc > $(TOP)/build/COMP.$(OS)
+
+GCC:
+	@ echo gcc > $(TOP)/build/COMP.$(OS)
+
+ICC:
+	@ echo icc > $(TOP)/build/COMP.$(OS)
+
+VC++:
+	@ echo vc++ > $(TOP)/build/COMP.$(OS)
+
+CLANG:
+	@ echo clang > $(TOP)/build/COMP.$(OS)
+
+static dynamic:
+	@ echo "there is no longer any difference between static and dynamic builds"
+
+debug:
+	@ echo dbg > $(TOP)/build/BUILD.$(OS)
+
+profile:
+	@ echo prof > $(TOP)/build/BUILD.$(OS)
+
+release:
+	@ echo rel > $(TOP)/build/BUILD.$(OS)
+
+scm:
+	@ echo scm > $(TOP)/build/BUILD.$(OS)
+
+pubtools: release
+
+bindir:
+	@ echo "$(BINDIR)"
+
+targdir:
+	@ echo "$(TARGDIR)"
+
+osdir:
+	@ echo "$(OUTDIR)/$(OS)"
+
+compilers:
+	@ echo "$(COMPILERS)"
+
+architectures:
+	@ echo "$(ARCHITECTURES)"
+
+architecture:
+	@ echo "$(ARCH)"
+
+config:
+	@ echo "  current build is $(LOCAL_OR_REMOTE) $(BUILD_OS) $(BUILD) $(ARCH) build using $(TOOLSET) tools"
+	@ echo "  output target directory is '$(TARGDIR)'"
+	@ echo
+
+purify:
+	@ echo pur > $(TOP)/build/BUILD.$(OS)
+
+purecov:
+	@ echo pcov > $(TOP)/build/BUILD.$(OS)
+
+.PHONY: out CC GCC ICC debug profile release scm purify purecov local local require-proxy-exec $(RHOSTS) bindir report_config
+
+# includes based upon build
+ITF   = $(VDB_INCDIR)/
+OSINC = $(VDB_INCDIR)/os
+CCINC = $(VDB_INCDIR)/cc
+XTINC = $(VDB_INCDIR)/ext
+NGSINC = $(NGS_INCDIR)
+OVERRIDEINC = $(TOP)/interfaces/override
+
+# OS specific source and include dirs
+SRCDIRS_OS = $(SRCDIR)/$(OS)
+INCDIRS_OS = $(OSINC)/$(OS)
+
+# most OS' have a parent type
+ifdef OS_DAD
+
+SRCDIRS_OS += $(SRCDIR)/$(OS_DAD)
+INCDIRS_OS += $(OSINC)/$(OS_DAD)
+
+# some OS' have a grandparent
+ifdef OS_GDAD
+SRCDIRS_OS += $(SRCDIR)/$(OS_GDAD)
+INCDIRS_OS += $(OSINC)/$(OS_GDAD)
+endif
+
+endif
+
+# compiler specific includes
+INCDIRS_COMP = \
+	$(CCINC)/$(COMP)/$(ARCH) \
+	$(CCINC)/$(COMP)
+
+# some compilers have a parent type
+ifdef COMP_DAD
+
+INCDIRS_COMP += \
+	$(CCINC)/$(COMP_DAD)/$(ARCH) \
+	$(CCINC)/$(COMP_DAD)
+
+endif
+
+VPATH = \
+	$(SRCDIR)/$(COMP)/$(ARCH) \
+	$(SRCDIR)/$(COMP) \
+	$(SRCDIRS_OS) \
+	$(SRCDIR)
+
+INCDIRS = \
+	$(addprefix -I,$(OVERRIDEINC)) \
+	$(addprefix -I,$(SRCDIRS_OS)) \
+	$(addprefix -I,$(SRCDIR) $(ITF)) \
+	$(addprefix -I,$(INCDIRS_COMP)) \
+	$(addprefix -I,$(INCDIRS_OS)) \
+	$(addprefix -I,$(XTINC) $(NGSINC)) \
+	-I.
+
+
+# linker paths
+LDPATHS =
+
+ifneq (,$(HDF5_LIBDIR))
+	LDPATHS += -L$(HDF5_LIBDIR)
+endif
+ifneq (,$(XML2_LIBDIR))
+	LDPATHS += -L$(XML2_LIBDIR)
+endif
+ifneq (,$(MAGIC_LIBDIR))
+	LDPATHS += -L$(MAGIC_LIBDIR)
+endif
+ifneq (,$(FUSE_LIBDIR))
+	LDPATHS += -L$(FUSE_LIBDIR)
+endif
+
+
+# defines that describe os & architecture
+DLLX ?= $(SHLX)
+ARCHDEFS = -D_ARCH_BITS=__SIZEOF_POINTER__*__CHAR_BIT__ -DLIBPREFIX=$(LPFX) -DSHLIBEXT=$(DLLX)
+
+# default tool parameters
+CFLAGS	= $(DEBUG) $(DBG) $(CARCH) $(PROF) $(PED) $(DEFINES) $(ARCHDEFS) $(MIN_DEPLOY_OS_OPT) $(INCDIRS)
+CPFLAGS = $(DEBUG) $(DBG) $(CARCH) $(PROF) $(DEFINES) $(ARCHDEFS) $(MIN_DEPLOY_OS_OPT) $(INCDIRS)
+LDFLAGS = $(DBG) $(PROF) $(CARCH) $(MIN_DEPLOY_OS_OPT) $(LDPATHS)
+
+#-------------------------------------------------------------------------------
+# runtests
+# 
+# MallocScribble=1 is for catching allocation problems on Mac
+#
+ifeq ($(RUNTESTS_OVERRIDE),)
+runtests: std $(TEST_TOOLS)
+	@ export VDB_CONFIG=$(VDB_CONFIG);export LD_LIBRARY_PATH=$(LIBDIR):$$LD_LIBRARY_PATH;export MallocScribble=1;\
+	for i in $(TEST_TOOLS);\
+	do\
+		echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++;\
+		echo Run $(TEST_BINDIR)/$$i;eval $(RUN_REMOTELY) $(TEST_BINDIR)/$$i;r=$$?; \
+		if [ "$$r" != "0" ] ; then exit $$r; fi; \
+	done
+
+.PHONY: runtests
+endif
+
+#-------------------------------------------------------------------------------
+# slowtests
+# 
+# $(SLOWTESTSDATADIR) should be used to create temporary test files
+SLOWTESTSDATADIR ?= /panfs/pan1.be-md.ncbi.nlm.nih.gov/sra-test/slowtests/$(shell whoami)
+
+slowtests: std $(SLOW_TEST_TOOLS)
+	@ export LD_LIBRARY_PATH=$(LIBDIR):$$LD_LIBRARY_PATH;\
+	for i in $(SLOW_TEST_TOOLS);\
+	do\
+		echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++;\
+		echo Run $(TEST_BINDIR)/$$i;eval $(RUN_REMOTELY) $(TEST_BINDIR)/$$i;r=$$?; \
+		if [ "$$r" != "0" ] ; then exit $$r; fi; \
+	done
+
+.PHONY: slowtests
+
+#-------------------------------------------------------------------------------
+# all-cmn
+#
+# Common target to trigger build of all tools
+#
+$(TARGDIR)/all-cmn: $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all-cmn
+
+#-------------------------------------------------------------------------------
+# std-cmn
+#
+# Common target to trigger build of external visibility tools
+#
+$(TARGDIR)/std-cmn: $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std-cmn
diff --git a/build/Makefile.gcc b/build/Makefile.gcc
new file mode 100644
index 0000000..dc8ed4d
--- /dev/null
+++ b/build/Makefile.gcc
@@ -0,0 +1,92 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/cc.sh $(OS) 'gcc -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/cc.sh $(OS) 'g++ -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = gcc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) gcc \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR):$(NGS_LIBDIR):$(VDB_LIBDIR):$(VDB_ILIBDIR)
+
+LPFLAGS = $(LDFLAGS)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) g++ \
+	--build $(BUILD) --ldflags "$(LPFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR):$(NGS_LIBDIR):$(VDB_LIBDIR):$(VDB_ILIBDIR)
+
+# tool options
+WARN = -Wall -Wno-long-long 
+ifneq (sun,$(OS))
+    WARN += -Wno-variadic-macros
+endif
+
+ifeq (linux,$(OS))
+    NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
+
+ifeq (64,$(BITS))
+	CARCH = -m64
+else
+ifeq (32_64,$(BITS))
+    CARCH = -arch i386 -arch x86_64  
+else    
+    CARCH = -m32
+endif 
+endif
+
+ifeq (prof, $(BUILD))
+	PROF = -pg
+endif
+
+ifeq (dbg, $(BUILD))
+	DBG = -g
+	OPT = $(WARN)
+	NOPT = $(WARN)
+	# GCC seems unable to use c99 without ansi, which
+	# basically clobbers features back to c89. the options
+	# must be specified in the order shown.
+	PED = -std=gnu99 -pedantic # -fdiagnostics-show-option
+else
+
+OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+ifeq (x86_64, $(ARCH))
+	OPT += -Wall
+endif
+
+endif
+
+ifeq (mac,$(OS))
+     # g++ linker on mac needs to be told which standard c++ library to use
+     LPFLAGS += -lstdc++
+endif
diff --git a/build/Makefile.icc b/build/Makefile.icc
new file mode 100644
index 0000000..612a148
--- /dev/null
+++ b/build/Makefile.icc
@@ -0,0 +1,77 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/cc.sh $(OS) 'icc -c' \
+	$(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/cc.sh $(OS) 'icpc -c' \
+	$(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = icc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) icc \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) icpc \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+# tool options
+WARN = -Wall
+
+ifeq (64,$(BITS))
+	CARCH = -m64
+else
+	CARCH = -m32
+endif
+
+ifeq (prof, $(BUILD))
+	PROF := -p
+endif
+
+ifeq (dbg, $(BUILD))
+	DBG = -g
+	OPT = $(WARN)
+	NOPT = $(WARN)
+else
+
+ifeq (x86_64, $(ARCH))
+	OPT := -O3 -unroll -xW
+else
+	OPT := -O3 -unroll -xW
+endif
+endif
+
+ifeq (prof, $(BUILD))
+	OPT += -vec_report5
+endif
+
+# ICC is designed to be a GCC substitute
+COMP_DAD = gcc
diff --git a/build/Makefile.install b/build/Makefile.install
new file mode 100644
index 0000000..1fd134c
--- /dev/null
+++ b/build/Makefile.install
@@ -0,0 +1,143 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# determine shell environment
+include $(TOP)/build/Makefile.shell
+
+# load build configuration
+include $(CONFIG_FILE)
+
+# load platform-specific settings
+include $(TOP)/build/Makefile.$(OS)
+
+#-------------------------------------------------------------------------------
+# install
+#
+
+# $TOOLS_TO_INSTALL
+include $(TOP)/build/Makefile.tools
+ifeq (1,$(HAVE_HDF5))
+        TOOLS_TO_INSTALL += pacbio-load
+endif
+
+#fake root for debugging
+#uncomment this line and change the test for root ( see under install: ) to succeed:
+#ROOT = ~/root
+
+EXE_TARGET = $(INST_BINDIR)
+PROFILE_FILE = $(ROOT)/etc/profile.d/sra-tools
+
+installexes: 
+	@ echo "Installing executables to $(INST_BINDIR)/..."
+	@ mkdir -p $(INST_BINDIR) 
+	@ $(MAKE) -s --no-print-directory -f $(TOP)/build/Makefile.install $(TOOLS_TO_INSTALL)
+	@ printf "Installing magic file..."
+	@ $(COPY) $(TOP)/tools/copycat/magic $(INST_BINDIR) && echo "done"
+
+$(TOOLS_TO_INSTALL):
+	@ printf "Installing $@..."
+	@ # ignore missing tools
+	@ - ( test -f $(BINDIR)/$@$(EXEX) || ( echo "not found" && false ) ) && \
+      $(COPY) $(BINDIR)/$@$(EXEX) $(BINDIR)/$@$(VERSION_EXEX) $(BINDIR)/$@$(MAJVERS_EXEX) $(INST_BINDIR) && \
+      echo "done"
+    
+ifeq (linux, $(OS))
+    ifeq (0, $(shell id -u))
+        LINUX_ROOT = true
+    endif
+endif
+
+install: installexes
+ifeq (true, $(LINUX_ROOT))
+	@ # install configuration file(s)
+	@ printf "Installing configuration files to $(ROOT)/etc/ncbi/..."
+	( mkdir -p $(ROOT)/etc/ncbi && \
+	  cp -p $(TOP)/tools/vdb-copy/vdb-copy.kfg $(ROOT)/etc/ncbi ; \
+	  if [ -f $(BINDIR)/ncbi/default.kfg ] ; then \
+	    if [ -f $(ROOT)/etc/ncbi/default.kfg ] ; then \
+          mv -v $(ROOT)/etc/ncbi/default.kfg $(ROOT)/etc/ncbi/default.kfg.orig;\
+	    fi; \
+	    cp -p $(BINDIR)/ncbi/default.kfg $(ROOT)/etc/ncbi ; \
+	  fi; \
+	  if [ -f $(BINDIR)/ncbi/certs.kfg ] ; then \
+	    if [ -f $(ROOT)/etc/ncbi/certs.kfg ] ; then \
+          mv -v $(ROOT)/etc/ncbi/certs.kfg $(ROOT)/etc/ncbi/certs.kfg.orig; \
+	    fi; \
+	    cp -p $(BINDIR)/ncbi/certs.kfg $(ROOT)/etc/ncbi ; \
+	  fi ) && echo done
+	@ #
+	@ echo "Updating $(PROFILE_FILE).[c]sh"
+	@ printf \
+"#version $(VERSION)\n"\
+"if ! echo \$$PATH | /bin/grep -q $(EXE_TARGET)\n"\
+"then export PATH=$(EXE_TARGET):\$$PATH\n"\
+"fi" \
+        >$(PROFILE_FILE).sh && chmod 644 $(PROFILE_FILE).sh || true;
+	@ printf \
+"#version $(VERSION)\n"\
+"echo \$$PATH | /bin/grep -q $(EXE_TARGET)\n"\
+"if ( \$$status ) setenv PATH $(EXE_TARGET):\$$PATH\n"\
+        >$(PROFILE_FILE).csh && chmod 644 $(PROFILE_FILE).csh || true;
+	@ #TODO: check version of the files above
+else    
+	@ # install configuration file(s)
+	@ printf "Installing configuration files to $(INST_BINDIR)/ncbi/..."
+	( mkdir -p $(INST_BINDIR)/ncbi && \
+	  cp -p $(TOP)/tools/vdb-copy/vdb-copy.kfg $(INST_BINDIR)/ncbi/ ; \
+	  if [ -f $(BINDIR)/ncbi/default.kfg ] ; then \
+	    if [ -f $(INST_BINDIR)/ncbi/default.kfg ] ; then \
+          mv -v $(INST_BINDIR)/ncbi/default.kfg \
+                $(INST_BINDIR)/ncbi/default.kfg.orig; \
+	    fi; \
+	    cp -p $(BINDIR)/ncbi/default.kfg $(INST_BINDIR)/ncbi ; \
+	  fi; \
+	  if [ -f $(BINDIR)/ncbi/certs.kfg ] ; then \
+	    if [ -f $(INST_BINDIR)/ncbi/certs.kfg ] ; then \
+          mv -v $(INST_BINDIR)/ncbi/certs.kfg \
+                $(INST_BINDIR)/ncbi/certs.kfg.orig; \
+	    fi; \
+	    cp -p $(BINDIR)/ncbi/certs.kfg $(INST_BINDIR)/ncbi ; \
+	  fi ) && echo done
+endif
+
+#-------------------------------------------------------------------------------
+# uninstall
+# 
+
+TO_UNINSTALL = $(addsuffix *,$(addprefix $(INST_BINDIR)/,$(TOOLS_TO_INSTALL) magic))
+ifneq (true, $(LINUX_ROOT))
+    TO_UNINSTALL += $(INST_BINDIR)/ncbi/certs.kfg $(INST_BINDIR)/ncbi/ncbi-vdb.kfg $(INST_BINDIR)/ncbi/default.kfg $(INST_BINDIR)/ncbi/vdb-copy.kfg
+endif
+TO_UNINSTALL_AS_ROOT = $(ROOT)/etc/ncbi/certs.kfg $(ROOT)/etc/ncbi/default.kfg $(ROOT)/etc/ncbi/vdb-copy.kfg $(PROFILE_FILE).sh $(PROFILE_FILE).csh
+
+uninstall:
+	@ echo "Uninstalling sra-tools from $(INST_BINDIR)..."
+	rm -rf $(TO_UNINSTALL)
+ifeq (true, $(LINUX_ROOT))
+	@ echo "Uninstalling $(TO_UNINSTALL_AS_ROOT) ..."
+	@ rm -rf $(TO_UNINSTALL_AS_ROOT)
+endif
+	@ echo "done."
+
+.PHONY: install installexes uninstall
diff --git a/build/Makefile.linux b/build/Makefile.linux
new file mode 100644
index 0000000..b14b33f
--- /dev/null
+++ b/build/Makefile.linux
@@ -0,0 +1,87 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# default compiler
+ifeq (,$(COMP))
+	COMP = gcc
+endif
+
+# handle attempts to set cross-compilation architecture
+# note that if your installation is set up for cross compilation,
+# you can try to enable it on your own.
+ifeq (i386,$(ARCH))
+i386:
+	@ true
+x86_64:
+	@ echo "Linux builds do not support cross-compilation to this architecture"
+endif
+
+ifeq (x86_64,$(ARCH))
+i386:
+	@ echo "Linux builds do not support cross-compilation to this architecture"
+x86_64:
+	@ true
+endif
+
+.PHONY: i386 x86_64
+
+
+# library prefix
+LPFX = lib
+
+# file extensions
+OBJX = o
+LOBX = pic.o
+LIBX = a
+SHLX = so
+
+# compilation defines
+DEFINES	:= -DLINUX -DUNIX -D_GNU_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DPKGNAME=linux$(BITS)
+
+# linux is a Unix variant
+OS_DAD = unix
+
+# flex+bison: on Mac, use source-controlled generated .c/.h files
+YACC = @ true
+LEX = @ true
+
+# build matrix
+COMPILERS = GCC # ICC
+
+# copy without following symlinks
+COPY = cp -P
+
+# valgrind
+VALGRIND = export NCBI_VALGRIND=ncbi; valgrind --error-exitcode=1 --suppressions=$(TOP)/build/valgrind.suppress --show-reachable=no 
+
+VALGRIND_TARGETS = $(addprefix vg-,$(TEST_TOOLS))
+
+valgrind: $(VALGRIND_TARGETS)
+
+vg-test-%: test-%
+	$(VALGRIND) $(TEST_BINDIR)/$^
+
+vg-wb-test-%: wb-test-%
+	$(VALGRIND) $(TEST_BINDIR)/$^
diff --git a/build/Makefile.rpm b/build/Makefile.rpm
new file mode 100644
index 0000000..aeae92f
--- /dev/null
+++ b/build/Makefile.rpm
@@ -0,0 +1,174 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+#VERBOSE=-v
+
+# determine shell environment ($CONFIG_FILE)
+include $(TOP)/build/Makefile.shell
+
+# load build configuration ($TARGDIR) ($VERSION)
+include $(CONFIG_FILE)
+
+# $TOOLS_TO_INSTALL
+include $(TOP)/build/Makefile.tools
+ifeq (1,$(HAVE_HDF5))
+	TOOLS_TO_INSTALL += pacbio-load
+endif
+
+REVISION=0
+PKGDIR=$(TARGDIR)/rpmbuild
+RPM =$(PKGDIR)/RPMS/$(ARCH)/sra-toolkit-$(VERSION)-$(REVISION).$(ARCH).rpm
+SRC =$(PKGDIR)/SOURCES/sra-toolkit-$(VERSION).tar.gz
+SPEC=$(PKGDIR)/SPECS/sra-toolkit.spec
+DST =$(PKGDIR)/sra-toolkit-$(VERSION)
+TGZ=$(DST).tar.gz
+
+clean_rpm:
+	echo 'DEBUGGING RPM: clean_rpm'
+	rm -rf $(DST) $(RPM) $(SPEC) $(SRC) $(TGZ)
+
+rpm: $(RPM)
+#	echo DEBUGGING RPM: rpm $(TOP)/$(MODULE)
+
+$(RPM): $(SPEC) $(SRC)
+#	echo 'DEBUGGING RPM: (RPM)'
+	rpmbuild --define "_topdir $(PKGDIR)"  --define "_tmppath %{_topdir}/tmp" \
+	    -bb $(SPEC)
+
+SRC_DEPS =                       \
+	$(DST)/etc/ncbi/default.kfg  \
+	$(DST)/etc/ncbi/certs.kfg    \
+	$(DST)/etc/ncbi/schema.kfg   \
+	$(DST)/etc/ncbi/vdb-copy.kfg \
+	$(DST)/usr/share/ncbi/schema
+
+$(SRC): $(SRC_DEPS)
+	echo 'DEBUGGING RPM: (SRC)'
+	chmod -R g-w $(DST)
+	cd $(PKGDIR) ; tar $(VERBOSE) -zcf $(TGZ) --owner 0 --group 0 \
+		sra-toolkit-$(VERSION)
+	mkdir $(VERBOSE) -p $(PKGDIR)/SOURCES
+	cp $(VERBOSE) -p $(TGZ) $@
+
+$(DST)/etc/ncbi/default.kfg: $(DST)
+	echo 'DEBUGGING RPM: (/etc/ncbi/default.kfg)'
+	rsync $(VERBOSE) -l --chmod=g-w $(VDB_LIBDIR)/ncbi/default.kfg $@
+
+$(DST)/etc/ncbi/certs.kfg: $(DST)
+	echo 'DEBUGGING RPM: (/etc/ncbi/certs.kfg)'
+	rsync $(VERBOSE) -l --chmod=g-w $(VDB_LIBDIR)/ncbi/certs.kfg $@
+
+$(DST)/etc/ncbi/schema.kfg: $(DST)
+	echo 'DEBUGGING RPM: (/etc/ncbi/schema.kfg)'
+	echo '/vdb/schema/paths = "/usr/share/ncbi/schema"' > $@
+
+$(DST)/etc/ncbi/vdb-copy.kfg: $(DST)
+	echo 'DEBUGGING RPM: (/etc/ncbi/vdb-copy.kfg)'
+	rsync $(VERBOSE) -l --chmod=g-w $(BINDIR)/ncbi/vdb-copy.kfg $@
+
+$(DST): $(PKGDIR)
+#	echo 'DEBUGGING RPM: (DST)'
+	mkdir $(VERBOSE) -p $(DST)/etc/ncbi
+	mkdir $(VERBOSE) -p $(DST)/usr/bin
+	$(MAKE) -s --no-print-directory -f $(TOP)/build/Makefile.rpm \
+		$(TOOLS_TO_INSTALL)
+
+$(DST)/usr/share/ncbi/schema: $(DST)
+	echo 'DEBUGGING RPM: (/usr/share/ncbi/schema)'
+	mkdir $(VERBOSE) -p $@
+	rsync $(VERBOSE) -rmloptD --include '*.vschema' --include='*/' \
+		 --exclude '*' $(VDB_INCDIR)/* $@
+
+$(PKGDIR):
+	echo 'DEBUGGING RPM: (PKGDIR)'
+	mkdir $(VERBOSE) -p $@/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}
+
+$(TOOLS_TO_INSTALL):
+#	echo 'DEBUGGING RPM: (TOOLS_TO_INSTALL)'
+	- ( test -f $(BINDIR)/$@ || ( echo "$@ not found" && false ) ) && \
+		rsync $(VERBOSE) -l $(BINDIR)/$@ $(BINDIR)/$@$(VERSION_EXEX) \
+			$(BINDIR)/$@$(MAJVERS_EXEX) $(DST)/usr/bin
+
+$(SPEC): $(PKGDIR) $(TOP)/build/Makefile.rpm
+#	echo 'DEBUGGING RPM: (SPEC)'
+	mkdir -p $(PKGDIR)/SPECS
+	printf \
+"%%define        __spec_install_post %%{nil}\n"\
+"%%define          debug_package     %%{nil}\n"\
+"%%define        __os_install_post   %%{_dbpath}/brp-compress\n"\
+"\n"\
+"Summary: SRA Toolkit package\n"\
+"Name: sra-toolkit\n"\
+"Version: $(VERSION)\n"\
+"Release: $(REVISION)\n"\
+"License: Public Domain\n"\
+"Group: NCBI/VDB\n"\
+"SOURCE0 : %%{name}-%%{version}.tar.gz\n"\
+"URL: http://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software\n"\
+"\n"\
+"BuildRoot: %%{_tmppath}/%%{name}-%%{version}-%%{release}-root\n"\
+"\n"\
+"%%description\n"\
+"%%{summary}\n"\
+"\n"\
+"%%prep\n"\
+"%%setup -q\n"\
+"\n"\
+"%%build\n"\
+"# Empty section.\n"\
+"\n"\
+"%%install\n"\
+"rm   -rf %%{buildroot}\n"\
+"mkdir -p %%{buildroot}\n"\
+"\n"\
+"# in builddir\n"\
+"cp -a * %%{buildroot}\n"\
+"\n"\
+"%%clean\n"\
+"rm -rf %%{buildroot}\n"\
+"\n"\
+"%%files\n"\
+"%%defattr(-,root,root,-)\n"\
+"%%{_bindir}/*\n"\
+"/etc/ncbi/*\n"\
+"/usr/share/ncbi/schema/*/*\n"\
+"\n"\
+"%%post\n"\
+"if [ -e /etc/profile.d/sra-tools.csh ] || [ -e /etc/profile.d/sra-tools.sh  ]"\
+"\n"\
+"then\n"\
+"    FOUND=1\n"\
+"fi\n"\
+'if [ "$$FOUND" != "" ] ; then'\
+"\n"\
+"    echo User installation of sra-tools is found.\n"\
+"    if [ -e /etc/profile.d/sra-tools.csh ] ; then\n"\
+"        mv -v /etc/profile.d/sra-tools.csh /etc/profile.d/sra-tools.csh.bak\n"\
+"    fi\n"\
+"    if [ -e /etc/profile.d/sra-tools.sh ] ; then\n"\
+"        mv -v /etc/profile.d/sra-tools.sh /etc/profile.d/sra-tools.sh.bak\n"\
+"    fi\n"\
+"    echo /etc/profile.d/sra-tools.[c]sh was updated.\n"\
+"    echo You might need to relogin to have your PATH variable updated.\n"\
+"fi\n" > $@
diff --git a/build/Makefile.rules b/build/Makefile.rules
new file mode 100644
index 0000000..8a59863
--- /dev/null
+++ b/build/Makefile.rules
@@ -0,0 +1,110 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+## build rules
+LOC_INFO = -D__mod_name__=$(MODULE) -D__file_name__=$*
+
+# executable image
+%.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $< $(LOC_INFO) -D__file_ext__=c
+%.$(OBJX): %.cpp
+	$(CP) -o $@ $(OPT) $< $(LOC_INFO) -D__file_ext__=cpp
+%.$(OBJX): %.cxx
+	$(CP) -o $@ $(OPT) $< $(LOC_INFO) -D__file_ext__=cxx
+
+# non-optimized executable image
+%.nopt.$(OBJX): %.c
+	$(CC) -o $@ $(NOPT) $< $(LOC_INFO) -D__file_ext__=c
+%.nopt.$(OBJX): %.cpp
+	$(CP) -o $@ $(NOPT) $< $(LOC_INFO) -D__file_ext__=cpp
+%.nopt.$(OBJX): %.cxx
+	$(CP) -o $@ $(NOPT) $< $(LOC_INFO) -D__file_ext__=cxx
+
+# relocatable image
+%.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=c
+%.$(LOBX): %.cpp
+	$(CP) -o $@ -fPIC $(OPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cpp
+%.$(LOBX): %.cxx
+	$(CP) -o $@ -fPIC $(OPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cxx
+
+# non-optimized relocatable image
+%.nopt.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=c
+%.nopt.$(LOBX): %.cpp
+	$(CP) -o $@ -fPIC $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cpp
+%.nopt.$(LOBX): %.cxx
+	$(CP) -o $@ -fPIC $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cxx
+
+# non-optimized relocatable image with persisted image byte swapping
+%.swap.nopt.$(LOBX): %.c
+	$(CC) -o $@ -fPIC -DSWAP_PERSISTED $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=c
+%.swap.nopt.$(LOBX): %.cpp
+	$(CP) -o $@ -fPIC -DSWAP_PERSISTED $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cpp
+%.swap.nopt.$(LOBX): %.cxx
+	$(CP) -o $@ -fPIC -DSWAP_PERSISTED $(NOPT) -D_LIBRARY $< $(LOC_INFO) -D__file_ext__=cxx
+
+# assembly
+%.$(OBJX) %.$(LOBX): %.s
+	$(CC) -o $@ $<
+
+# assembly language output
+%.s: %.c
+	$(CC) -S -o $@ $(OPT) $<
+%.s: %.cpp
+	$(CP) -S -o $@ $(OPT) $<
+%.s: %.cxx
+	$(CP) -S -o $@ $(OPT) $<
+
+%.nopt.s: %.c
+	$(CC) -S -o $@ $(NOPT) $<
+%.nopt.s: %.cpp
+	$(CP) -S -o $@ $(NOPT) $<
+%.nopt.s: %.cxx
+	$(CP) -S -o $@ $(NOPT) $<
+
+%.pic.s: %.c
+	$(CC) -S -o $@ -fPIC $(OPT) $<
+%.pic.s: %.cpp
+	$(CP) -S -o $@ -fPIC $(OPT) $<
+%.pic.s: %.cxx
+	$(CP) -S -o $@ -fPIC $(OPT) $<
+
+%.nopt.pic.s: %.c
+	$(CC) -S -o $@ -fPIC $(NOPT) $<
+%.nopt.pic.s: %.cpp
+	$(CP) -S -o $@ -fPIC $(NOPT) $<
+%.nopt.pic.s: %.cxx
+	$(CP) -S -o $@ -fPIC $(NOPT) $<
+
+# yacc and lex
+#%.c: %.y
+#	$(YACC) -o $@ $^
+#%.c: %.l
+#	$(LEX) -DYY_BUF_SIZE=16777216 -t $< | grep -v '^#line' > $@
+
+# version include generation
+%.vers.h: %.vers
+	$(TOP)/build/make-vers-inc.sh $^ > $@
diff --git a/build/Makefile.scm b/build/Makefile.scm
new file mode 100644
index 0000000..b972029
--- /dev/null
+++ b/build/Makefile.scm
@@ -0,0 +1,94 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: install
+
+# determine a few things
+TOP ?= $(abspath ..)
+include $(TOP)/build/Makefile.env
+
+# current distribution point
+ifeq (linux,$(OS))
+TRACE_SOFTWARE = /panfs/traces01/trace_software/vdb
+endif
+ifeq (mac,$(OS))
+TRACE_SOFTWARE = /net/traces01/trace_software/vdb
+endif
+ifeq (win,$(OS))
+TRACE_SOFTWARE = //panfs/traces01/trace_software/vdb
+endif
+
+
+#-------------------------------------------------------------------------------
+# targets
+#
+INSTALL_TARGETS = \
+	interfaces \
+	schema \
+	os \
+	arch
+
+install: $(INSTALL_TARGETS)
+
+.PHONY: install $(INSTALL_TARGETS)
+
+
+#-------------------------------------------------------------------------------
+# interfaces
+#  populates the interfaces directory
+#
+interfaces:
+	@ bash cp.sh $(TOP)/interfaces $(TRACE_SOFTWARE)/interfaces "-name *.h -o -name *.hpp"
+
+
+#-------------------------------------------------------------------------------
+# schema
+#  populates the schema directory
+#
+schema:
+	@ bash cp.sh $(TOP)/interfaces $(TRACE_SOFTWARE)/schema "-name *.vschema"
+
+
+#-------------------------------------------------------------------------------
+# operating system
+#  populates any os-specific things, such as configuration
+#
+os:
+	@ true
+
+
+#-------------------------------------------------------------------------------
+# architecture
+#  populates build results
+#
+arch: arch-$(BUILD)
+
+arch-dbg:
+	@ bash cp.sh $(BINDIR) $(TRACE_SOFTWARE)/$(OS)/debug/$(ARCH)/bin "-type d -a -name ncbi -prune -o ! -type d -print"
+	@ bash cp.sh $(LIBDIR) $(TRACE_SOFTWARE)/$(OS)/debug/$(ARCH)/lib "-type d -a -name ncbi -prune -o ! -type d -print"
+	@ bash cp.sh $(ILIBDIR) $(TRACE_SOFTWARE)/$(OS)/debug/$(ARCH)/ilib "! -type d -print"
+
+arch-rel:
+	@ bash cp.sh $(BINDIR) $(TRACE_SOFTWARE)/$(OS)/release/$(ARCH)/bin "-type d -a -name ncbi -prune -o ! -type d -print"
+	@ bash cp.sh $(LIBDIR) $(TRACE_SOFTWARE)/$(OS)/release/$(ARCH)/lib "-type d -a -name ncbi -prune -o ! -type d -print"
diff --git a/build/Makefile.shell b/build/Makefile.shell
new file mode 100644
index 0000000..f532a80
--- /dev/null
+++ b/build/Makefile.shell
@@ -0,0 +1,189 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+CONFIG_FILE = $(TOP)/build/Makefile.config
+ifeq (no, $(shell test -f $(CONFIG_FILE) && echo yes || echo no))
+    $(error "*** File '$(CONFIG_FILE)' is missing. Please run $(TOP)/configure")
+endif
+
+# determine OS
+UNAME = $(shell uname -s)
+
+ifeq (Darwin, $(UNAME))
+	HOST_OS = mac
+endif
+ifeq (Linux, $(UNAME))
+	HOST_OS = linux
+	OS_DISTRIBUTOR = $(shell lsb_release -si)
+	EXECMDF = $(TOP)/build/ld.linux.exe_cmd.sh
+	ifeq (no, $(shell test -f $(EXECMDF) && echo yes || echo no))
+        	$(error "*** File '$(EXECMDF)' is missing. Please run $(TOP)/configure")
+	endif
+endif
+ifeq (SunOS, $(UNAME))
+	HOST_OS = sun
+	ARCHITECTURES = x86_64 i386
+endif
+ifeq (xCYGWIN, $(findstring xCYGWIN,x$(UNAME)))
+	HOST_OS = win
+endif
+ifeq (xMINGW, $(findstring xMINGW,x$(UNAME)))
+	HOST_OS = win
+endif
+
+# assume build OS is the same as host OS
+OS = $(HOST_OS)
+BUILD_OS = $(OS)
+
+# determine ARCH
+ARCHITECTURES = default
+ifeq (mac,$(HOST_OS))
+	HOST_ARCH = $(shell $(TOP)/build/mac.arch.sh)
+	OS_ARCH = $(shell perl $(TOP)/setup/os-arch.perl)
+	CONFIG_FILE_OA = $(TOP)/build/Makefile.config.$(OS_ARCH)
+	ifeq (no, $(shell test -f $(CONFIG_FILE_OA) && echo yes || echo no))
+    	$(error "*** File '$(CONFIG_FILE_OA)' is missing. Please run $(TOP)/configure")
+	endif
+	ifeq (no, $(shell grep CONFIGURE_FOUND_XML2 $(CONFIG_FILE_OA) && echo yes || echo no))
+    	$(error "*** 'CONFIGURE_FOUND_XML2' is missing in $(CONFIG_FILE_OA). Please run $(TOP)/configure")
+	endif
+else
+	MARCH = $(shell uname -m)
+
+	ifeq (i386, $(MARCH))
+		HOST_ARCH = i386
+	endif
+	ifeq (i486, $(MARCH))
+		HOST_ARCH = i386
+	endif
+	ifeq (i586, $(MARCH))
+		HOST_ARCH = i386
+	endif
+	ifeq (i686, $(MARCH))
+		ifeq (WOW64x, $(findstring WOW64x,$(UNAME)x))
+			# 64-bit capable Cygwin. Analyze the version of cl to set the corect architecture
+			CL = $(shell cl.exe 2>&1 >/dev/null)
+			ifeq (for x64, $(findstring for x64, $(CL)))
+				HOST_ARCH = x86_64
+			else
+				HOST_ARCH = i386
+			endif			
+		else
+			HOST_ARCH = i386
+		endif	
+	endif
+	ifeq (x86_64, $(MARCH))
+		HOST_ARCH = x86_64
+	endif
+	ifeq (i86pc, $(MARCH))
+		HOST_ARCH = x86_64
+		ARCHITECTURES = x86_64 i386
+	endif
+	ifeq (sun4v,$(MARCH))
+		HOST_ARCH = sparc64
+		ARCHITECTURES = sparc64 sparc32
+	endif
+endif
+
+ARCH = $(HOST_ARCH)
+REMOTE_ARCH = $(ARCH)
+
+# pick up dependencies from object directory
+ifdef SRCDIR
+	include $(wildcard *.d)
+endif
+
+# determine SRCDIR
+ifdef MODULE
+    SRCDIR=$(TOP)/$(MODULE)
+else
+    SRCDIR=$(TOP)
+endif
+
+# set COMP, LNKG and BUILD
+COMP = $(shell test -f $(TOP)/build/COMP && mv $(TOP)/build/COMP $(TOP)/build/COMP.$(OS); test -f $(TOP)/build/COMP.$(OS) && cat $(TOP)/build/COMP.$(OS) || echo gcc)
+LNKG = $(shell test -f $(TOP)/build/STATIC && mv $(TOP)/build/STATIC $(TOP)/build/LNKG.$(OS) && echo stat > $(TOP)/build/LNKG.$(OS); test -f $(TOP)/build/LNKG.$(OS) && cat $(TOP)/build/LNKG.$(OS) || echo stat)
+BUILD = $(shell test -f $(TOP)/build/BUILD && mv $(TOP)/build/BUILD $(TOP)/build/BUILD.$(OS); test -f $(TOP)/build/BUILD.$(OS) && cat $(TOP)/build/BUILD.$(OS) || echo dbg)
+TOOLSET := $(COMP)
+
+ifdef USE_GCC_IF_ICC
+    ifeq (icc,$(COMP))
+        COMP = gcc
+    endif
+    ifeq (clang,$(COMP))
+        COMP = gcc
+    endif
+endif
+
+RHOSTS = $(shell (test -d $(TOP)/rhosts && test -n "$$(ls $(TOP)/rhosts/)") && \
+                  ls $(TOP)/rhosts/ | xargs -n1 basename | grep -v CVS | grep -v example | grep -v "~")
+
+# detect RHOST
+HAS_RHOST = $(shell test -f $(TOP)/build/RHOST.$(HOST_OS) && echo yes || echo no)
+ifeq (yes,$(HAS_RHOST))
+    include $(TOP)/build/RHOST.$(HOST_OS)
+	ifeq (,$(RPORT))
+		RPORT = 20000
+	endif
+	BUILD_OS = r$(OS)
+	REMOTE_ARCH = $(ARCH)
+	ifeq (,$(LHOME))
+	    LHOME=$(HOME)
+	endif
+endif
+
+# set OUTDIR
+ifndef OUTDIR
+	OUTDIR = $(shell test -f $(TOP)/build/OUTDIR && mv $(TOP)/build/OUTDIR $(TOP)/build/OUTDIR.$(BUILD_OS); test -f $(TOP)/build/OUTDIR.$(BUILD_OS) && cat $(TOP)/build/OUTDIR.$(BUILD_OS) || echo $(TOP))
+	ifeq (,$(OUTDIR))
+		OUTDIR = $(TOP)
+	endif
+endif
+ifeq (,$(ROUTDIR))
+	ROUTDIR = $(RHOME)
+endif
+
+ifeq (yes,$(HAS_RHOST))
+	# set remote flags for calling win-cc.sh and ld.sh)
+	RFLAGS=--rhome "$(RHOME)" --lhome "$(LHOME)" --rhost "$(RHOST)" --rport $(RPORT) --proxy_tool "$(PROXY_TOOL)" \
+ --loutdir "$(OUTDIR)" --routdir "$(ROUTDIR)"
+	# RWORKDIR can be redefined by individual makefiles as needed
+	RWORKDIR = . 
+	RUN_REMOTELY = $(TOP)/build/run_remotely.sh $(PROXY_TOOL) $(RHOST) $(RPORT) $(RHOME) $(LHOME) $(RWORKDIR) $(ROUTDIR) $(OUTDIR)
+endif
+
+# determine BITS
+ifeq (x86_64, $(ARCH))
+	BITS = 64
+endif
+ifeq (sparc64, $(ARCH))
+	BITS = 64
+endif
+ifeq (i386, $(ARCH))
+	BITS = 32
+endif
+ifeq (sparc32, $(ARCH))
+	BITS = 32
+endif
+
diff --git a/build/Makefile.targets b/build/Makefile.targets
new file mode 100644
index 0000000..0690964
--- /dev/null
+++ b/build/Makefile.targets
@@ -0,0 +1,117 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# defines make targets commonly used in non-leaf directories:
+#   default
+#   all
+#   std
+#   clean
+#   runtests
+#   slowtests
+#   valgrind
+#
+# requires $(SUBDIRS) to be defined
+#
+# to control which subdirectories are affected by a specific target, define
+# SUBDIRS_CLEAN, SUBDIRS_RUNTESTS, etc., like this:
+#   SUBDIRS_CLEAN = $(addsuffix _clean, du4r1 dir2 dir3)
+#
+
+default: $(SUBDIRS) $(DFLT_EXTRA)
+
+ALL_EXTRA ?= $(DFLT_EXTRA)
+STD_EXTRA ?= $(DFLT_EXTRA)
+
+#-------------------------------------------------------------------------------
+# all
+#
+SUBDIRS_ALL ?= $(addsuffix _all,$(SUBDIRS))
+
+all: $(SUBDIRS_ALL) $(ALL_EXTRA)
+
+$(SUBDIRS_ALL):
+	@ $(MAKE) -C $(subst _all,,$@) all
+
+.PHONY: all $(SUBDIRS_ALL)
+
+#-------------------------------------------------------------------------------
+# std
+#
+SUBDIRS_STD = $(addsuffix _std,$(SUBDIRS))
+
+std: $(SUBDIRS_STD) $(STD_EXTRA)
+
+$(SUBDIRS_STD): 
+	@ $(MAKE) -C $(subst _std,,$@) std
+
+.PHONY: std $(SUBDIRS_STD)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+SUBDIRS_CLEAN ?= $(addsuffix _clean,$(SUBDIRS))
+
+clean: $(SUBDIRS_CLEAN)
+
+$(SUBDIRS_CLEAN):
+	@ $(MAKE) -s -C $(subst _clean,,$@) clean
+
+.PHONY: clean $(SUBDIRS_CLEAN)
+
+#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS ?= $(addsuffix _runtests,$(SUBDIRS))
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+	@ $(MAKE) -s -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
+
+#-------------------------------------------------------------------------------
+# slowtests
+#
+SUBDIRS_SLOWTESTS ?= $(addsuffix _slowtests, $(SUBDIRS))
+
+slowtests: $(SUBDIRS_SLOWTESTS)
+
+$(SUBDIRS_SLOWTESTS):
+	@ $(MAKE) -C $(subst _slowtests,,$@) slowtests
+
+.PHONY: slowtests $(SUBDIRS_SLOWTESTS)
+
+#-------------------------------------------------------------------------------
+# valgrind
+#
+SUBDIRS_VALGRIND ?= $(addsuffix _valgrind, $(SUBDIRS))
+
+valgrind: $(SUBDIRS_VALGRIND)
+
+$(SUBDIRS_VALGRIND):
+	@ $(MAKE) -C $(subst _valgrind,,$@) valgrind
+
+.PHONY: valgrind $(SUBDIRS_VALGRIND)
+
diff --git a/build/Makefile.tools b/build/Makefile.tools
new file mode 100644
index 0000000..1fd5827
--- /dev/null
+++ b/build/Makefile.tools
@@ -0,0 +1,40 @@
+TOOLS_TO_INSTALL = \
+	abi-dump        \
+	abi-load        \
+	align-info      \
+	bam-load        \
+	cache-mgr       \
+	cg-load         \
+	copycat         \
+	fastdump        \
+	fastq-dump      \
+	fastq-load      \
+	helicos-load    \
+	illumina-dump   \
+	illumina-load   \
+	kar             \
+	kdbmeta         \
+	kget            \
+	latf-load       \
+	prefetch        \
+	rcexplain       \
+	remote-fuser    \
+	sam-dump        \
+	sff-dump        \
+	sff-load        \
+	srapath         \
+	sra-pileup      \
+	sra-sort        \
+	sra-stat        \
+	srf-load        \
+	test-sra        \
+	vdb-config      \
+	vdb-copy        \
+	vdb-decrypt     \
+	vdb-dump        \
+	vdb-encrypt     \
+	vdb-lock        \
+	vdb-passwd      \
+	vdb-unlock      \
+	vdb-validate    \
+
diff --git a/build/Makefile.vers b/build/Makefile.vers
new file mode 100644
index 0000000..453b9a2
--- /dev/null
+++ b/build/Makefile.vers
@@ -0,0 +1,26 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# SRA-TOOLS and library version
+VERSION = 2.8.1
diff --git a/build/Xcode/asm-trace/asm-trace.xcodeproj/project.pbxproj b/build/Xcode/asm-trace/asm-trace.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..43a4878
--- /dev/null
+++ b/build/Xcode/asm-trace/asm-trace.xcodeproj/project.pbxproj
@@ -0,0 +1,4444 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 45;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		9D7357F311779B2A009EA3E4 /* make-env */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 9D7357F611779B49009EA3E4 /* Build configuration list for PBXAggregateTarget "make-env" */;
+			buildPhases = (
+				9D7357F211779B2A009EA3E4 /* ShellScript */,
+			);
+			dependencies = (
+			);
+			name = "make-env";
+			productName = "make-env";
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		9D1235BC14F571AC00ECC72C /* config-grammar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1235B414F571AC00ECC72C /* config-grammar.c */; };
+		9D1235BE14F571AC00ECC72C /* config-lex.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1235B614F571AC00ECC72C /* config-lex.c */; };
+		9D1EC483122D914C00C11287 /* printf.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1EC47F122D914C00C11287 /* printf.c */; };
+		9D1EC484122D914C00C11287 /* status-rc-strings.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1EC480122D914C00C11287 /* status-rc-strings.c */; };
+		9D1EC485122D914C00C11287 /* status-rc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1EC481122D914C00C11287 /* status-rc.c */; };
+		9D1EC486122D914C00C11287 /* status.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1EC482122D914C00C11287 /* status.c */; };
+		9D31EC9D1176680A003CDA5E /* bstpersist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAFE11766366003CDA5E /* bstpersist.c */; };
+		9D31EC9E1176680A003CDA5E /* container.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAFF11766366003CDA5E /* container.c */; };
+		9D31EC9F1176680B003CDA5E /* cp1252.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0011766366003CDA5E /* cp1252.c */; };
+		9D31ECA01176680B003CDA5E /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0111766366003CDA5E /* crc32.c */; };
+		9D31ECA11176680C003CDA5E /* data-buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0211766366003CDA5E /* data-buffer.c */; };
+		9D31ECA21176680C003CDA5E /* iso8859-1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0311766366003CDA5E /* iso8859-1.c */; };
+		9D31ECA31176680D003CDA5E /* iso8859.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0411766366003CDA5E /* iso8859.c */; };
+		9D31ECA41176680D003CDA5E /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0511766366003CDA5E /* log.c */; };
+		9D31ECA51176680E003CDA5E /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0611766366003CDA5E /* md5.c */; };
+		9D31ECA61176680E003CDA5E /* namelist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0711766366003CDA5E /* namelist.c */; };
+		9D31ECA71176680F003CDA5E /* pack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0811766366003CDA5E /* pack.c */; };
+		9D31ECA81176680F003CDA5E /* pbstree.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0911766366003CDA5E /* pbstree.c */; };
+		9D31ECA911766810003CDA5E /* ptpersist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0A11766366003CDA5E /* ptpersist.c */; };
+		9D31ECAA11766810003CDA5E /* ptrie.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0B11766366003CDA5E /* ptrie.c */; };
+		9D31ECAB11766811003CDA5E /* rc-idx-tbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0C11766366003CDA5E /* rc-idx-tbl.c */; };
+		9D31ECAC11766811003CDA5E /* rc-tbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0D11766366003CDA5E /* rc-tbl.c */; };
+		9D31ECAD11766812003CDA5E /* symtab.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB0E11766366003CDA5E /* symtab.c */; };
+		9D31ECAE11766813003CDA5E /* syslog.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB191176637A003CDA5E /* syslog.c */; settings = {COMPILER_FLAGS = "-I ../../../libs/klib"; }; };
+		9D31ECB011766814003CDA5E /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1011766366003CDA5E /* text.c */; };
+		9D31ECB111766815003CDA5E /* token.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1111766366003CDA5E /* token.c */; };
+		9D31ECB211766815003CDA5E /* trie.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1211766366003CDA5E /* trie.c */; };
+		9D31ECB411766816003CDA5E /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1411766366003CDA5E /* unpack.c */; };
+		9D31ECB511766817003CDA5E /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1511766366003CDA5E /* utf8.c */; };
+		9D31ECB611766818003CDA5E /* vector.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1611766366003CDA5E /* vector.c */; };
+		9D31ECB711766818003CDA5E /* vlen-encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1711766366003CDA5E /* vlen-encode.c */; };
+		9D320AB0142D02B000ACA5AA /* extract_token.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AAE142D02B000ACA5AA /* extract_token.c */; };
+		9D320AB1142D02B000ACA5AA /* strtonum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AAF142D02B000ACA5AA /* strtonum.c */; };
+		9D320AB2142D02B000ACA5AA /* extract_token.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AAE142D02B000ACA5AA /* extract_token.c */; };
+		9D320AB3142D02B000ACA5AA /* strtonum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AAF142D02B000ACA5AA /* strtonum.c */; };
+		9D320AB6142D02E600ACA5AA /* sprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AB5142D02E600ACA5AA /* sprintf.c */; };
+		9D320AB7142D02E600ACA5AA /* sprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D320AB5142D02E600ACA5AA /* sprintf.c */; };
+		9D4DCEAC1423FD9600881098 /* ref-preserve_qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D4DCEAB1423FD9600881098 /* ref-preserve_qual.c */; };
+		9D4DCEAD1423FD9600881098 /* ref-preserve_qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D4DCEAB1423FD9600881098 /* ref-preserve_qual.c */; };
+		9D62F42A124D01AE003D38E9 /* bsearch.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D62F428124D01AE003D38E9 /* bsearch.c */; };
+		9D62F42B124D01AE003D38E9 /* qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D62F429124D01AE003D38E9 /* qsort.c */; };
+		9D7A40DB13FADBA3003087FF /* SHA-32bit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40D913FADBA3003087FF /* SHA-32bit.c */; };
+		9D7A40DC13FADBA3003087FF /* SHA-64bit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40DA13FADBA3003087FF /* SHA-64bit.c */; };
+		9D7A40E113FADBEE003087FF /* syserrcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40DF13FADBEE003087FF /* syserrcode.c */; };
+		9D7A40E213FADBEE003087FF /* systime.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40E013FADBEE003087FF /* systime.c */; };
+		9D7A40FF13FADCFE003087FF /* buffile-write.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40EE13FADCFE003087FF /* buffile-write.c */; };
+		9D7A410613FADCFE003087FF /* mmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40F513FADCFE003087FF /* mmap.c */; };
+		9D7A410713FADCFE003087FF /* path-priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A40F613FADCFE003087FF /* path-priv.h */; };
+		9D7A410913FADCFE003087FF /* pmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A40F813FADCFE003087FF /* pmem.c */; };
+		9D7A411613FADD33003087FF /* sysdir-priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A411213FADD33003087FF /* sysdir-priv.h */; };
+		9D7A411713FADD33003087FF /* sysfile-priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A411313FADD33003087FF /* sysfile-priv.h */; };
+		9D7A413B13FADF74003087FF /* stbarrier.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1D117663AB003CDA5E /* stbarrier.c */; };
+		9D7A413C13FADF75003087FF /* stcond.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1E117663AB003CDA5E /* stcond.c */; };
+		9D7A413D13FADF75003087FF /* stlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB1F117663AB003CDA5E /* stlock.c */; };
+		9D7A413E13FADF76003087FF /* stsem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB20117663AB003CDA5E /* stsem.c */; };
+		9D7A413F13FADF76003087FF /* stthread.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB21117663AB003CDA5E /* stthread.c */; };
+		9D7A414013FADF77003087FF /* sttimeout.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB22117663AB003CDA5E /* sttimeout.c */; };
+		9D7A414213FADF79003087FF /* syslock.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB2E117663D4003CDA5E /* syslock.c */; };
+		9D7A415113FADFC6003087FF /* queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A414D13FADFC6003087FF /* queue.c */; };
+		9D7A415213FADFC6003087FF /* sem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A414E13FADFC6003087FF /* sem.c */; };
+		9D7A415F13FAE01B003087FF /* queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A414D13FADFC6003087FF /* queue.c */; };
+		9D7A416013FAE01C003087FF /* sem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A414E13FADFC6003087FF /* sem.c */; };
+		9D7A416113FAE023003087FF /* syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB2B117663C6003CDA5E /* syscond.c */; };
+		9D7A416213FAE024003087FF /* syslock.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A414C13FADFC6003087FF /* syslock.c */; };
+		9D7A416313FAE026003087FF /* systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB2C117663C6003CDA5E /* systhread.c */; };
+		9D7A416413FAE027003087FF /* systimeout.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB2D117663C6003CDA5E /* systimeout.c */; };
+		9D7A422313FAE325003087FF /* btree.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A417D13FAE1DA003087FF /* btree.c */; };
+		9D7A422413FAE333003087FF /* dbmgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419213FAE1DA003087FF /* dbmgr-cmn.c */; };
+		9D7A423913FAE40C003087FF /* libkdb-cmn.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A417813FAE192003087FF /* libkdb-cmn.a */; };
+		9D7A423B13FAE433003087FF /* coldata.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418013FAE1DA003087FF /* coldata.c */; };
+		9D7A423C13FAE435003087FF /* colidx.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418313FAE1DA003087FF /* colidx.c */; };
+		9D7A423E13FAE43F003087FF /* colidx0.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418513FAE1DA003087FF /* colidx0.c */; };
+		9D7A423F13FAE444003087FF /* colidx1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418713FAE1DA003087FF /* colidx1.c */; };
+		9D7A424013FAE446003087FF /* colidx2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418913FAE1DA003087FF /* colidx2.c */; };
+		9D7A424113FAE470003087FF /* column-cc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418A13FAE1DA003087FF /* column-cc.c */; };
+		9D7A424213FAE477003087FF /* column.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418C13FAE1DA003087FF /* column.c */; };
+		9D7A424313FAE47A003087FF /* database-cc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A418D13FAE1DA003087FF /* database-cc.c */; };
+		9D7A424513FAE482003087FF /* database.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419013FAE1DA003087FF /* database.c */; };
+		9D7A424613FAE484003087FF /* dbcc-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419113FAE1DA003087FF /* dbcc-cmn.c */; };
+		9D7A424713FAE48A003087FF /* dbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419413FAE1DA003087FF /* dbmgr.c */; };
+		9D7A424813FAE499003087FF /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419B13FAE1DA003087FF /* index.c */; };
+		9D7A424913FAE4B0003087FF /* kdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419D13FAE1DA003087FF /* kdb.c */; };
+		9D7A424A13FAE4B4003087FF /* meta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A113FAE1DA003087FF /* meta.c */; };
+		9D7A424B13FAE4B8003087FF /* table-cc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A413FAE1DA003087FF /* table-cc.c */; };
+		9D7A424C13FAE4BA003087FF /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A613FAE1DA003087FF /* table.c */; };
+		9D7A424D13FAE4C1003087FF /* trieidx-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A813FAE1DA003087FF /* trieidx-v1.c */; };
+		9D7A424E13FAE4C2003087FF /* trieidx-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A913FAE1DA003087FF /* trieidx-v2.c */; };
+		9D7A424F13FAE4C9003087FF /* u64idx-v3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41AC13FAE1DA003087FF /* u64idx-v3.c */; };
+		9D7A425813FAE616003087FF /* idstats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419613FAE1DA003087FF /* idstats.c */; };
+		9D7A425913FAE629003087FF /* trieval-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41AA13FAE1DA003087FF /* trieval-v1.c */; };
+		9D7A425A13FAE62E003087FF /* ptrieval-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A213FAE1DA003087FF /* ptrieval-v1.c */; };
+		9D7A425B13FAE63F003087FF /* trieval-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41AB13FAE1DA003087FF /* trieval-v2.c */; };
+		9D7A425C13FAE644003087FF /* ptrieval-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41A313FAE1DA003087FF /* ptrieval-v2.c */; };
+		9D7A426113FAE67B003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A426B13FAE6A5003087FF /* libkdb-cmn.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A417813FAE192003087FF /* libkdb-cmn.a */; };
+		9D7A426C13FAE6A7003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A426D13FAE6C0003087FF /* wkdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C213FAE1DA003087FF /* wkdb.c */; };
+		9D7A426E13FAE6C5003087FF /* wdbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41BB13FAE1DA003087FF /* wdbmgr.c */; };
+		9D7A426F13FAE6CC003087FF /* wdatabase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41BA13FAE1DA003087FF /* wdatabase.c */; };
+		9D7A427013FAE6D5003087FF /* wtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C513FAE1DA003087FF /* wtable.c */; };
+		9D7A427113FAE6E1003087FF /* wcolumn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41B813FAE1DA003087FF /* wcolumn.c */; };
+		9D7A427213FAE6EB003087FF /* wcoldata.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41AE13FAE1DA003087FF /* wcoldata.c */; };
+		9D7A427413FAE89E003087FF /* wcolidx.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41B013FAE1DA003087FF /* wcolidx.c */; };
+		9D7A427513FAE8A4003087FF /* wcolidx0.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41B213FAE1DA003087FF /* wcolidx0.c */; };
+		9D7A427613FAE8A7003087FF /* wcolidx1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41B413FAE1DA003087FF /* wcolidx1.c */; };
+		9D7A427713FAE8A8003087FF /* wcolidx2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41B613FAE1DA003087FF /* wcolidx2.c */; };
+		9D7A427813FAE8D6003087FF /* widxblk.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41BE13FAE1DA003087FF /* widxblk.c */; };
+		9D7A427913FAE8DB003087FF /* wmeta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C313FAE1DA003087FF /* wmeta.c */; };
+		9D7A427A13FAE8E7003087FF /* windex.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C013FAE1DA003087FF /* windex.c */; };
+		9D7A427B13FAE8ED003087FF /* wtrieidx-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C613FAE1DA003087FF /* wtrieidx-v1.c */; };
+		9D7A427C13FAE8EE003087FF /* wtrieidx-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C713FAE1DA003087FF /* wtrieidx-v2.c */; };
+		9D7A427D13FAE8F4003087FF /* wu64idx-v3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A41C813FAE1DA003087FF /* wu64idx-v3.c */; };
+		9D7A427E13FAE90F003087FF /* idxblk.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A419813FAE1DA003087FF /* idxblk.c */; };
+		9D7A42E413FAEA2A003087FF /* dbmgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429F13FAEA20003087FF /* dbmgr-cmn.c */; };
+		9D7A42E513FAEA36003087FF /* schema-tok.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D213FAEA21003087FF /* schema-tok.c */; };
+		9D7A42E613FAEA3C003087FF /* schema-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42CD13FAEA21003087FF /* schema-parse.c */; };
+		9D7A42E713FAEA45003087FF /* schema-type.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D413FAEA21003087FF /* schema-type.c */; };
+		9D7A42E813FAEA4C003087FF /* schema-func.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42CB13FAEA21003087FF /* schema-func.c */; };
+		9D7A42E913FAEA54003087FF /* schema-prod.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D013FAEA21003087FF /* schema-prod.c */; };
+		9D7A42EA13FAEA5A003087FF /* schema-expr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C913FAEA21003087FF /* schema-expr.c */; };
+		9D7A42EB13FAEA60003087FF /* schema-eval.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C813FAEA21003087FF /* schema-eval.c */; };
+		9D7A42EC13FAEA65003087FF /* schema-tbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D113FAEA21003087FF /* schema-tbl.c */; };
+		9D7A42ED13FAEA68003087FF /* schema-db.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C513FAEA21003087FF /* schema-db.c */; };
+		9D7A42EE13FAEA6E003087FF /* schema-dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C613FAEA21003087FF /* schema-dump.c */; };
+		9D7A42EF13FAEA72003087FF /* schema-int.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42CC13FAEA21003087FF /* schema-int.c */; };
+		9D7A42F013FAEA7C003087FF /* schema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D513FAEA21003087FF /* schema.c */; };
+		9D7A42F113FAEA85003087FF /* linker-int.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42AA13FAEA20003087FF /* linker-int.c */; };
+		9D7A42F213FAEA8D003087FF /* linker-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A913FAEA20003087FF /* linker-cmn.c */; };
+		9D7A42F313FAEA95003087FF /* database-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429B13FAEA20003087FF /* database-cmn.c */; };
+		9D7A42F413FAEA98003087FF /* database-load.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429C13FAEA20003087FF /* database-load.c */; };
+		9D7A42F513FAEAA0003087FF /* table-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D713FAEA21003087FF /* table-cmn.c */; };
+		9D7A42F613FAEAA1003087FF /* table-load.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D813FAEA21003087FF /* table-load.c */; };
+		9D7A42F713FAEAAA003087FF /* cursor-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429813FAEA20003087FF /* cursor-cmn.c */; };
+		9D7A42F813FAEAB2003087FF /* column-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429413FAEA20003087FF /* column-cmn.c */; };
+		9D7A42F913FAEABD003087FF /* prod-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42BB13FAEA21003087FF /* prod-cmn.c */; };
+		9D7A42FA13FAEAC0003087FF /* prod-expr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42BC13FAEA21003087FF /* prod-expr.c */; };
+		9D7A42FB13FAEAC4003087FF /* prod-func.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42BE13FAEA21003087FF /* prod-func.c */; };
+		9D7A42FC13FAEACB003087FF /* phys-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B713FAEA21003087FF /* phys-cmn.c */; };
+		9D7A42FD13FAEAD1003087FF /* phys-load.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B813FAEA21003087FF /* phys-load.c */; };
+		9D7A42FE13FAEADD003087FF /* blob.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429113FAEA20003087FF /* blob.c */; };
+		9D7A42FF13FAEAE0003087FF /* blob-headers.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A428E13FAEA20003087FF /* blob-headers.c */; };
+		9D7A430013FAEAE7003087FF /* page-map.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B413FAEA21003087FF /* page-map.c */; };
+		9D7A430313FAEB42003087FF /* row-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C313FAEA21003087FF /* row-id.c */; };
+		9D7A430413FAEB43003087FF /* row-len.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C413FAEA21003087FF /* row-len.c */; };
+		9D7A430513FAEB49003087FF /* fixed-row-len.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A313FAEA20003087FF /* fixed-row-len.c */; };
+		9D7A430613FAEB93003087FF /* merge.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42AD13FAEA21003087FF /* merge.c */; };
+		9D7A430713FAEB99003087FF /* split.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42D613FAEA21003087FF /* split.c */; };
+		9D7A430813FAEBA0003087FF /* compare.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429713FAEA20003087FF /* compare.c */; };
+		9D7A430913FAEBAE003087FF /* meta-attr-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42AF13FAEA21003087FF /* meta-attr-read.c */; };
+		9D7A430B13FAEBB1003087FF /* meta-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B113FAEA21003087FF /* meta-read.c */; };
+		9D7A430C13FAEBB2003087FF /* meta-value.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B213FAEA21003087FF /* meta-value.c */; };
+		9D7A430D13FAEBBF003087FF /* environment-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A213FAEA20003087FF /* environment-read.c */; };
+		9D7A431013FAEC78003087FF /* cast.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429313FAEA20003087FF /* cast.c */; };
+		9D7A431113FAEC7A003087FF /* index_lookup.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A513FAEA20003087FF /* index_lookup.c */; };
+		9D7A431213FAEC7B003087FF /* index_project.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A613FAEA20003087FF /* index_project.c */; };
+		9D7A431313FAEC7C003087FF /* parameter-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B613FAEA21003087FF /* parameter-read.c */; };
+		9D7A431413FAEC7D003087FF /* range-validate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C113FAEA21003087FF /* range-validate.c */; };
+		9D7A431513FAEC7D003087FF /* redimension.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C213FAEA21003087FF /* redimension.c */; };
+		9D7A431F13FAED40003087FF /* dbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A113FAEA20003087FF /* dbmgr.c */; };
+		9D7A432013FAED47003087FF /* linker.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42AC13FAEA21003087FF /* linker.c */; };
+		9D7A432113FAED4E003087FF /* database.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429E13FAEA20003087FF /* database.c */; };
+		9D7A432213FAED5A003087FF /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DA13FAEA21003087FF /* table.c */; };
+		9D7A432313FAED61003087FF /* cursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429A13FAEA20003087FF /* cursor.c */; };
+		9D7A432413FAED69003087FF /* column.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A429613FAEA20003087FF /* column.c */; };
+		9D7A432513FAED70003087FF /* prod.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42C013FAEA21003087FF /* prod.c */; };
+		9D7A432613FAED79003087FF /* phys.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42BA13FAEA21003087FF /* phys.c */; };
+		9D7A432913FAEDCC003087FF /* libvdb-cmn.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A428913FAE9B5003087FF /* libvdb-cmn.a */; };
+		9D7A432A13FAEDD9003087FF /* libkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A423413FAE3F5003087FF /* libkdb.dylib */; };
+		9D7A432D13FAEDE5003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A433013FAEDF6003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A434213FAEE66003087FF /* wcolumn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DB13FAEA21003087FF /* wcolumn.c */; };
+		9D7A434313FAEE67003087FF /* wcursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DC13FAEA21003087FF /* wcursor.c */; };
+		9D7A434413FAEE68003087FF /* wdatabase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DD13FAEA21003087FF /* wdatabase.c */; };
+		9D7A434513FAEE68003087FF /* wdbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DE13FAEA21003087FF /* wdbmgr.c */; };
+		9D7A434613FAEE69003087FF /* wlinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42DF13FAEA21003087FF /* wlinker.c */; };
+		9D7A434713FAEE6A003087FF /* wphys.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42E013FAEA21003087FF /* wphys.c */; };
+		9D7A434813FAEE6B003087FF /* wprod.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42E113FAEA21003087FF /* wprod.c */; };
+		9D7A434913FAEE6C003087FF /* wtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42E213FAEA21003087FF /* wtable.c */; };
+		9D7A434B13FAEECB003087FF /* index_insert.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42A413FAEA20003087FF /* index_insert.c */; };
+		9D7A434C13FAEED1003087FF /* meta-append.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42AE13FAEA21003087FF /* meta-append.c */; };
+		9D7A434D13FAEEDB003087FF /* meta-write.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B313FAEA21003087FF /* meta-write.c */; };
+		9D7A434E13FAEEE2003087FF /* meta-attr-write.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A42B013FAEA21003087FF /* meta-attr-write.c */; };
+		9D7A435113FAEF00003087FF /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9D7A435213FAEF06003087FF /* libvdb-cmn.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A428913FAE9B5003087FF /* libvdb-cmn.a */; };
+		9D7A435313FAEF0E003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A435613FAEF1F003087FF /* libkmproc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A415C13FAE00E003087FF /* libkmproc.a */; };
+		9D7A435913FAEF26003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A439913FAF20E003087FF /* add-row-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436713FAF20D003087FF /* add-row-id.c */; };
+		9D7A439A13FAF20E003087FF /* bit_or.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436813FAF20D003087FF /* bit_or.c */; };
+		9D7A439B13FAF20E003087FF /* bunzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436913FAF20D003087FF /* bunzip.c */; };
+		9D7A439D13FAF20E003087FF /* ceil.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436B13FAF20D003087FF /* ceil.c */; };
+		9D7A439F13FAF20E003087FF /* clip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436D13FAF20D003087FF /* clip.c */; };
+		9D7A43A013FAF20E003087FF /* cut.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436E13FAF20D003087FF /* cut.c */; };
+		9D7A43A113FAF20E003087FF /* delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436F13FAF20D003087FF /* delta.c */; };
+		9D7A43A213FAF20E003087FF /* deriv.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437013FAF20D003087FF /* deriv.c */; };
+		9D7A43A313FAF20E003087FF /* diff.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437113FAF20D003087FF /* diff.c */; };
+		9D7A43A413FAF20E003087FF /* echo.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437213FAF20D003087FF /* echo.c */; };
+		9D7A43A613FAF20E003087FF /* exists.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437413FAF20E003087FF /* exists.c */; };
+		9D7A43A713FAF20E003087FF /* floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437513FAF20E003087FF /* floor.c */; };
+		9D7A43A913FAF20E003087FF /* funzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437713FAF20E003087FF /* funzip.c */; };
+		9D7A43AB13FAF20E003087FF /* integral.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437913FAF20E003087FF /* integral.c */; };
+		9D7A43AC13FAF20E003087FF /* irzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437A13FAF20E003087FF /* irzip.c */; };
+		9D7A43B513FAF20E003087FF /* map.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438313FAF20E003087FF /* map.c */; };
+		9D7A43B713FAF20E003087FF /* max.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438513FAF20E003087FF /* max.c */; };
+		9D7A43B813FAF20E003087FF /* min.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438613FAF20E003087FF /* min.c */; };
+		9D7A43B913FAF20E003087FF /* outlier-decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438713FAF20E003087FF /* outlier-decoder.c */; };
+		9D7A43BB13FAF20E003087FF /* pack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438913FAF20E003087FF /* pack.c */; };
+		9D7A43BC13FAF20E003087FF /* paste.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438A13FAF20E003087FF /* paste.c */; };
+		9D7A43BD13FAF20E003087FF /* rand_4na_2na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438B13FAF20E003087FF /* rand_4na_2na.c */; };
+		9D7A43BE13FAF20E003087FF /* rldecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438C13FAF20E003087FF /* rldecode.c */; };
+		9D7A43C013FAF20E003087FF /* round.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438E13FAF20E003087FF /* round.c */; };
+		9D7A43C113FAF20E003087FF /* simple-sub-select.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438F13FAF20E003087FF /* simple-sub-select.c */; };
+		9D7A43C213FAF20E003087FF /* subtract-row-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439013FAF20E003087FF /* subtract-row-id.c */; };
+		9D7A43C313FAF20E003087FF /* sum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439113FAF20E003087FF /* sum.c */; };
+		9D7A43C413FAF20E003087FF /* trim.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439213FAF20E003087FF /* trim.c */; };
+		9D7A43C513FAF20E003087FF /* trunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439313FAF20E003087FF /* trunc.c */; };
+		9D7A43C613FAF20E003087FF /* undelta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439413FAF20E003087FF /* undelta.c */; };
+		9D7A43C713FAF20E003087FF /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439513FAF20E003087FF /* unpack.c */; };
+		9D7A43C813FAF20E003087FF /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439613FAF20E003087FF /* unzip.c */; };
+		9D7A43C913FAF20E003087FF /* vec-sum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439713FAF20E003087FF /* vec-sum.c */; };
+		9D7A43CD13FAF23A003087FF /* libvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A431C13FAED2E003087FF /* libvdb.dylib */; };
+		9D7A43D013FAF245003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A43D613FAF257003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A43DB13FAF274003087FF /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC8C117667C6003CDA5E /* libbz2.dylib */; };
+		9D7A441413FAF3B5003087FF /* qual4_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F213FAF2EF003087FF /* qual4_decode.c */; };
+		9D7A441513FAF3B5003087FF /* format-spot-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E713FAF2EF003087FF /* format-spot-name.c */; };
+		9D7A441713FAF3B5003087FF /* fpcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E813FAF2EF003087FF /* fpcodec.c */; };
+		9D7A441813FAF3B5003087FF /* v0-decompress-init.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440313FAF2EF003087FF /* v0-decompress-init.c */; };
+		9D7A441913FAF3B5003087FF /* extract-coordinates.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E313FAF2EF003087FF /* extract-coordinates.c */; };
+		9D7A441A13FAF3B5003087FF /* qual4_codec.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A43F113FAF2EF003087FF /* qual4_codec.h */; };
+		9D7A441B13FAF3B5003087FF /* libwsraxf.vers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A43EB13FAF2EF003087FF /* libwsraxf.vers.h */; };
+		9D7A441C13FAF3B5003087FF /* untyped.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440213FAF2EF003087FF /* untyped.c */; };
+		9D7A441D13FAF3B5003087FF /* color-from-dna.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43DF13FAF2EF003087FF /* color-from-dna.c */; };
+		9D7A441E13FAF3B5003087FF /* tokenize-spot_name-454.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FC13FAF2EF003087FF /* tokenize-spot_name-454.c */; };
+		9D7A441F13FAF3B5003087FF /* process-position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F013FAF2EF003087FF /* process-position.c */; };
+		9D7A442113FAF3B5003087FF /* bio-start.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43DE13FAF2EF003087FF /* bio-start.c */; };
+		9D7A442213FAF3B5003087FF /* normalize.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43EE13FAF2EF003087FF /* normalize.c */; };
+		9D7A442313FAF3B5003087FF /* rewrite-spot-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F613FAF2EF003087FF /* rewrite-spot-name.c */; };
+		9D7A442413FAF3B5003087FF /* v0-decompress-local.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A440413FAF2EF003087FF /* v0-decompress-local.h */; };
+		9D7A442513FAF3B5003087FF /* tokenize-spot_name-abi.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FD13FAF2EF003087FF /* tokenize-spot_name-abi.c */; };
+		9D7A442613FAF3B5003087FF /* tokenize-spot_name-ion-torrent.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440013FAF2EF003087FF /* tokenize-spot_name-ion-torrent.c */; };
+		9D7A442713FAF3B5003087FF /* v0-decompress.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440513FAF2EF003087FF /* v0-decompress.c */; };
+		9D7A442913FAF3B5003087FF /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FB13FAF2EF003087FF /* swap.c */; };
+		9D7A442A13FAF3B5003087FF /* spot-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F813FAF2EF003087FF /* spot-desc.c */; };
+		9D7A442B13FAF3B5003087FF /* tokenize-spot_name-helicos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FE13FAF2EF003087FF /* tokenize-spot_name-helicos.c */; };
+		9D7A442C13FAF3B5003087FF /* denormalize.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E013FAF2EF003087FF /* denormalize.c */; };
+		9D7A442D13FAF3B5003087FF /* make-position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43EC13FAF2EF003087FF /* make-position.c */; };
+		9D7A442F13FAF3B5003087FF /* tokenize-spot_name-illumina.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FF13FAF2EF003087FF /* tokenize-spot_name-illumina.c */; };
+		9D7A443013FAF3B5003087FF /* dna-from-color.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E113FAF2EF003087FF /* dna-from-color.c */; };
+		9D7A443113FAF3B5003087FF /* index_lookup.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E913FAF2EF003087FF /* index_lookup.c */; };
+		9D7A443213FAF3B5003087FF /* libsraxf.vers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A43EA13FAF2EF003087FF /* libsraxf.vers.h */; };
+		9D7A443313FAF3B5003087FF /* extract-name_coord.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E413FAF2EF003087FF /* extract-name_coord.c */; };
+		9D7A443513FAF3B5003087FF /* v0-funcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440713FAF2EF003087FF /* v0-funcs.c */; };
+		9D7A443613FAF3B5003087FF /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F713FAF2EF003087FF /* rotate.c */; };
+		9D7A443813FAF3B5003087FF /* read-seg-from-readn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F513FAF2EF003087FF /* read-seg-from-readn.c */; };
+		9D7A443913FAF3B5003087FF /* v0-decompress.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A440613FAF2EF003087FF /* v0-decompress.h */; };
+		9D7A443A13FAF3B5003087FF /* dynamic-454-read-descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E213FAF2EF003087FF /* dynamic-454-read-descriptor.c */; };
+		9D7A443B13FAF3B5003087FF /* name-tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A43ED13FAF2EF003087FF /* name-tokenizer.h */; };
+		9D7A443C13FAF3B5003087FF /* untyped-priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A440113FAF2EF003087FF /* untyped-priv.h */; };
+		9D7A443D13FAF3B5003087FF /* read-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F413FAF2EF003087FF /* read-desc.c */; };
+		9D7A444313FAF3F6003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A444613FAF402003087FF /* libvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A431C13FAED2E003087FF /* libvdb.dylib */; };
+		9D7A444913FAF411003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A444C13FAF41C003087FF /* libkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A423413FAE3F5003087FF /* libkdb.dylib */; };
+		9D7A445B13FAF49A003087FF /* agrep-myersunltd.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445213FAF48E003087FF /* agrep-myersunltd.c */; };
+		9D7A445C13FAF49A003087FF /* agrep-wumanber.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445313FAF48E003087FF /* agrep-wumanber.c */; };
+		9D7A445D13FAF49A003087FF /* libksrch.vers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A445713FAF48E003087FF /* libksrch.vers.h */; };
+		9D7A445E13FAF49A003087FF /* agrep-myers.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445113FAF48E003087FF /* agrep-myers.c */; };
+		9D7A445F13FAF49A003087FF /* fgrep-boyermoore.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445513FAF48E003087FF /* fgrep-boyermoore.c */; };
+		9D7A446013FAF49A003087FF /* search-priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7A445913FAF48E003087FF /* search-priv.h */; };
+		9D7A446113FAF49A003087FF /* fgrep-dumb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445613FAF48E003087FF /* fgrep-dumb.c */; };
+		9D7A446213FAF49A003087FF /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445A13FAF48E003087FF /* search.c */; };
+		9D7A446313FAF49A003087FF /* agrep-dp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445013FAF48E003087FF /* agrep-dp.c */; };
+		9D7A446413FAF49A003087FF /* fgrep-aho.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445413FAF48E003087FF /* fgrep-aho.c */; };
+		9D7A446513FAF49A003087FF /* nucstrstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A445813FAF48E003087FF /* nucstrstr.c */; };
+		9D7A448F13FAF56D003087FF /* seq-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448613FAF539003087FF /* seq-restore-read.c */; };
+		9D7A449013FAF56D003087FF /* raw-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448213FAF539003087FF /* raw-restore-read.c */; };
+		9D7A449113FAF56D003087FF /* align-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447B13FAF539003087FF /* align-restore-read.c */; };
+		9D7A449213FAF56D003087FF /* ref-tbl-sub-select.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448413FAF539003087FF /* ref-tbl-sub-select.c */; };
+		9D7A449313FAF56D003087FF /* align-local_ref_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447613FAF539003087FF /* align-local_ref_id.c */; };
+		9D7A449413FAF56D003087FF /* align-ref-pos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447913FAF539003087FF /* align-ref-pos.c */; };
+		9D7A449613FAF56D003087FF /* align-ref-seq-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447A13FAF539003087FF /* align-ref-seq-id.c */; };
+		9D7A449713FAF56D003087FF /* cigar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447C13FAF539003087FF /* cigar.c */; };
+		9D7A449813FAF56D003087FF /* align-ref-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447813FAF539003087FF /* align-ref-name.c */; };
+		9D7A449913FAF56D003087FF /* template-len.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448713FAF539003087FF /* template-len.c */; };
+		9D7A449A13FAF56D003087FF /* get-sam-flags.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447D13FAF539003087FF /* get-sam-flags.c */; };
+		9D7A449B13FAF56D003087FF /* ref-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448313FAF539003087FF /* ref-restore-read.c */; };
+		9D7A449C13FAF56D003087FF /* align-local_ref_start.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447713FAF539003087FF /* align-local_ref_start.c */; };
+		9D7A449D13FAF56D003087FF /* project_read_from_sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448113FAF539003087FF /* project_read_from_sequence.c */; };
+		9D7A449E13FAF56D003087FF /* not-my-row.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448013FAF539003087FF /* not-my-row.c */; };
+		9D7A44A313FAF59D003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A44A613FAF5A9003087FF /* libvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A431C13FAED2E003087FF /* libvdb.dylib */; };
+		9D7A44C913FB04C2003087FF /* reader-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44AE13FB0494003087FF /* reader-cmn.c */; };
+		9D7A44CA13FB04C2003087FF /* refseq-mgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B213FB0494003087FF /* refseq-mgr.c */; };
+		9D7A44CB13FB04C2003087FF /* reader-refseq.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B013FB0494003087FF /* reader-refseq.c */; };
+		9D7A44D013FB04D8003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A44D113FB04DC003087FF /* libvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A431C13FAED2E003087FF /* libvdb.dylib */; };
+		9D7A44D413FB04EF003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A44D913FB051B003087FF /* libkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A423413FAE3F5003087FF /* libkdb.dylib */; };
+		9D7A44DC13FB0537003087FF /* libalign.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A44C013FB04A9003087FF /* libalign.dylib */; };
+		9D7A453413FB0A5A003087FF /* bzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436A13FAF20D003087FF /* bzip.c */; };
+		9D7A453513FB0A5D003087FF /* checksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436C13FAF20D003087FF /* checksum.c */; };
+		9D7A453613FB0A65003087FF /* fzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437813FAF20E003087FF /* fzip.c */; };
+		9D7A453813FB0A7A003087FF /* outlier-encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438813FAF20E003087FF /* outlier-encoder.c */; };
+		9D7A453913FB0A82003087FF /* rlencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438D13FAF20E003087FF /* rlencode.c */; };
+		9D7A453A13FB0A8E003087FF /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439813FAF20E003087FF /* zip.c */; };
+		9D7A453D13FB0AB1003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A453E13FB0AB2003087FF /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC8C117667C6003CDA5E /* libbz2.dylib */; };
+		9D7A454113FB0AC9003087FF /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */; };
+		9D7A454213FB0ACF003087FF /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9D7A454313FB0AD5003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A454E13FB0B5F003087FF /* extract-name_fmt.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E513FAF2EF003087FF /* extract-name_fmt.c */; };
+		9D7A454F13FB0B60003087FF /* extract-spot_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E613FAF2EF003087FF /* extract-spot_name.c */; };
+		9D7A455013FB0B6C003087FF /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FA13FAF2EF003087FF /* stats.c */; };
+		9D7A455113FB0B6C003087FF /* stats_quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F913FAF2EF003087FF /* stats_quality.c */; };
+		9D7A455213FB0B76003087FF /* qual4_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F313FAF2EF003087FF /* qual4_encode.c */; };
+		9D7A455513FB0B86003087FF /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */; };
+		9D7A455613FB0B8B003087FF /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9D7A455713FB0B91003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A455B13FB0BCE003087FF /* qual4_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F213FAF2EF003087FF /* qual4_decode.c */; };
+		9D7A455C13FB0BCE003087FF /* format-spot-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E713FAF2EF003087FF /* format-spot-name.c */; };
+		9D7A455D13FB0BCE003087FF /* fpcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E813FAF2EF003087FF /* fpcodec.c */; };
+		9D7A455E13FB0BCE003087FF /* v0-decompress-init.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440313FAF2EF003087FF /* v0-decompress-init.c */; };
+		9D7A455F13FB0BCE003087FF /* extract-coordinates.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E313FAF2EF003087FF /* extract-coordinates.c */; };
+		9D7A456013FB0BCE003087FF /* untyped.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440213FAF2EF003087FF /* untyped.c */; };
+		9D7A456113FB0BCE003087FF /* color-from-dna.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43DF13FAF2EF003087FF /* color-from-dna.c */; };
+		9D7A456213FB0BCE003087FF /* tokenize-spot_name-454.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FC13FAF2EF003087FF /* tokenize-spot_name-454.c */; };
+		9D7A456313FB0BCE003087FF /* process-position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F013FAF2EF003087FF /* process-position.c */; };
+		9D7A456513FB0BCE003087FF /* bio-start.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43DE13FAF2EF003087FF /* bio-start.c */; };
+		9D7A456613FB0BCE003087FF /* normalize.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43EE13FAF2EF003087FF /* normalize.c */; };
+		9D7A456713FB0BCE003087FF /* rewrite-spot-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F613FAF2EF003087FF /* rewrite-spot-name.c */; };
+		9D7A456813FB0BCE003087FF /* v0-decompress.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440513FAF2EF003087FF /* v0-decompress.c */; };
+		9D7A456913FB0BCE003087FF /* tokenize-spot_name-abi.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FD13FAF2EF003087FF /* tokenize-spot_name-abi.c */; };
+		9D7A456A13FB0BCE003087FF /* tokenize-spot_name-ion-torrent.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440013FAF2EF003087FF /* tokenize-spot_name-ion-torrent.c */; };
+		9D7A456B13FB0BCE003087FF /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FB13FAF2EF003087FF /* swap.c */; };
+		9D7A456C13FB0BCE003087FF /* spot-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F813FAF2EF003087FF /* spot-desc.c */; };
+		9D7A456D13FB0BCE003087FF /* tokenize-spot_name-helicos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FE13FAF2EF003087FF /* tokenize-spot_name-helicos.c */; };
+		9D7A456E13FB0BCE003087FF /* denormalize.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E013FAF2EF003087FF /* denormalize.c */; };
+		9D7A456F13FB0BCE003087FF /* make-position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43EC13FAF2EF003087FF /* make-position.c */; };
+		9D7A457013FB0BCE003087FF /* tokenize-spot_name-illumina.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43FF13FAF2EF003087FF /* tokenize-spot_name-illumina.c */; };
+		9D7A457113FB0BCE003087FF /* dna-from-color.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E113FAF2EF003087FF /* dna-from-color.c */; };
+		9D7A457213FB0BCE003087FF /* index_lookup.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E913FAF2EF003087FF /* index_lookup.c */; };
+		9D7A457313FB0BCE003087FF /* extract-name_coord.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E413FAF2EF003087FF /* extract-name_coord.c */; };
+		9D7A457413FB0BCE003087FF /* v0-funcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A440713FAF2EF003087FF /* v0-funcs.c */; };
+		9D7A457513FB0BCE003087FF /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F713FAF2EF003087FF /* rotate.c */; };
+		9D7A457613FB0BCE003087FF /* read-seg-from-readn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F513FAF2EF003087FF /* read-seg-from-readn.c */; };
+		9D7A457713FB0BCE003087FF /* dynamic-454-read-descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43E213FAF2EF003087FF /* dynamic-454-read-descriptor.c */; };
+		9D7A457813FB0BCE003087FF /* read-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A43F413FAF2EF003087FF /* read-desc.c */; };
+		9D7A457D13FB0C28003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A458113FB0C53003087FF /* exists.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437413FAF20E003087FF /* exists.c */; };
+		9D7A458213FB0C53003087FF /* bunzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436913FAF20D003087FF /* bunzip.c */; };
+		9D7A458313FB0C53003087FF /* trim.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439213FAF20E003087FF /* trim.c */; };
+		9D7A458413FB0C53003087FF /* rldecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438C13FAF20E003087FF /* rldecode.c */; };
+		9D7A458513FB0C53003087FF /* ceil.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436B13FAF20D003087FF /* ceil.c */; };
+		9D7A458713FB0C53003087FF /* paste.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438A13FAF20E003087FF /* paste.c */; };
+		9D7A458813FB0C53003087FF /* max.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438513FAF20E003087FF /* max.c */; };
+		9D7A458913FB0C53003087FF /* vec-sum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439713FAF20E003087FF /* vec-sum.c */; };
+		9D7A458A13FB0C53003087FF /* echo.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437213FAF20D003087FF /* echo.c */; };
+		9D7A458B13FB0C53003087FF /* add-row-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436713FAF20D003087FF /* add-row-id.c */; };
+		9D7A458C13FB0C53003087FF /* delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436F13FAF20D003087FF /* delta.c */; };
+		9D7A458D13FB0C53003087FF /* floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437513FAF20E003087FF /* floor.c */; };
+		9D7A458E13FB0C53003087FF /* subtract-row-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439013FAF20E003087FF /* subtract-row-id.c */; };
+		9D7A458F13FB0C53003087FF /* outlier-decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438713FAF20E003087FF /* outlier-decoder.c */; };
+		9D7A459013FB0C53003087FF /* deriv.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437013FAF20D003087FF /* deriv.c */; };
+		9D7A459113FB0C53003087FF /* bit_or.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436813FAF20D003087FF /* bit_or.c */; };
+		9D7A459313FB0C53003087FF /* irzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437A13FAF20E003087FF /* irzip.c */; };
+		9D7A459413FB0C53003087FF /* map.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438313FAF20E003087FF /* map.c */; };
+		9D7A459513FB0C53003087FF /* pack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438913FAF20E003087FF /* pack.c */; };
+		9D7A459613FB0C53003087FF /* sum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439113FAF20E003087FF /* sum.c */; };
+		9D7A459713FB0C53003087FF /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439513FAF20E003087FF /* unpack.c */; };
+		9D7A459813FB0C53003087FF /* simple-sub-select.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438F13FAF20E003087FF /* simple-sub-select.c */; };
+		9D7A459913FB0C53003087FF /* rand_4na_2na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438B13FAF20E003087FF /* rand_4na_2na.c */; };
+		9D7A459A13FB0C53003087FF /* min.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438613FAF20E003087FF /* min.c */; };
+		9D7A459B13FB0C53003087FF /* trunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439313FAF20E003087FF /* trunc.c */; };
+		9D7A459C13FB0C53003087FF /* round.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A438E13FAF20E003087FF /* round.c */; };
+		9D7A459D13FB0C53003087FF /* integral.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437913FAF20E003087FF /* integral.c */; };
+		9D7A459E13FB0C53003087FF /* cut.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436E13FAF20D003087FF /* cut.c */; };
+		9D7A459F13FB0C53003087FF /* funzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437713FAF20E003087FF /* funzip.c */; };
+		9D7A45A013FB0C53003087FF /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439613FAF20E003087FF /* unzip.c */; };
+		9D7A45A113FB0C53003087FF /* undelta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A439413FAF20E003087FF /* undelta.c */; };
+		9D7A45A213FB0C53003087FF /* clip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A436D13FAF20D003087FF /* clip.c */; };
+		9D7A45A313FB0C53003087FF /* diff.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437113FAF20D003087FF /* diff.c */; };
+		9D7A45B113FB0CB8003087FF /* seq-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448613FAF539003087FF /* seq-restore-read.c */; };
+		9D7A45B213FB0CB8003087FF /* raw-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448213FAF539003087FF /* raw-restore-read.c */; };
+		9D7A45B313FB0CB8003087FF /* align-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447B13FAF539003087FF /* align-restore-read.c */; };
+		9D7A45B413FB0CB8003087FF /* ref-tbl-sub-select.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448413FAF539003087FF /* ref-tbl-sub-select.c */; };
+		9D7A45B513FB0CB8003087FF /* align-local_ref_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447613FAF539003087FF /* align-local_ref_id.c */; };
+		9D7A45B613FB0CB8003087FF /* align-ref-pos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447913FAF539003087FF /* align-ref-pos.c */; };
+		9D7A45B713FB0CB8003087FF /* align-ref-seq-id.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447A13FAF539003087FF /* align-ref-seq-id.c */; };
+		9D7A45B813FB0CB8003087FF /* cigar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447C13FAF539003087FF /* cigar.c */; };
+		9D7A45B913FB0CB8003087FF /* align-ref-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447813FAF539003087FF /* align-ref-name.c */; };
+		9D7A45BA13FB0CB8003087FF /* template-len.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448713FAF539003087FF /* template-len.c */; };
+		9D7A45BB13FB0CB8003087FF /* get-sam-flags.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447D13FAF539003087FF /* get-sam-flags.c */; };
+		9D7A45BC13FB0CB8003087FF /* ref-restore-read.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448313FAF539003087FF /* ref-restore-read.c */; };
+		9D7A45BD13FB0CB8003087FF /* align-local_ref_start.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A447713FAF539003087FF /* align-local_ref_start.c */; };
+		9D7A45BE13FB0CB8003087FF /* project_read_from_sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448113FAF539003087FF /* project_read_from_sequence.c */; };
+		9D7A45BF13FB0CB8003087FF /* not-my-row.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448013FAF539003087FF /* not-my-row.c */; };
+		9D7A45C113FB0CB8003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A45C313FB0CB8003087FF /* libalign.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A44C013FB04A9003087FF /* libalign.dylib */; };
+		9D7A45C813FB0CE4003087FF /* refseq-stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A448513FAF539003087FF /* refseq-stats.c */; };
+		9D7A45CB13FB0D18003087FF /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */; };
+		9D7A45CE13FB0D24003087FF /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9D7A45DC13FB0D50003087FF /* reader-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44AE13FB0494003087FF /* reader-cmn.c */; };
+		9D7A45DD13FB0D50003087FF /* refseq-mgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B213FB0494003087FF /* refseq-mgr.c */; };
+		9D7A45DE13FB0D50003087FF /* reader-refseq.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B013FB0494003087FF /* reader-refseq.c */; };
+		9D7A45E013FB0D50003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D7A45E213FB0D50003087FF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9D7A45E813FB0D72003087FF /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */; };
+		9D7A45E913FB0D76003087FF /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9D7A45EA13FB0D95003087FF /* writer-alignment.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B413FB0494003087FF /* writer-alignment.c */; };
+		9D7A45EB13FB0D95003087FF /* writer-reference.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B913FB0494003087FF /* writer-reference.c */; };
+		9D7A45EC13FB0D95003087FF /* writer-ref.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B713FB0494003087FF /* writer-ref.c */; };
+		9D7A45ED13FB0D95003087FF /* writer-refseq.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44BA13FB0494003087FF /* writer-refseq.c */; };
+		9D7A45EE13FB0D95003087FF /* writer-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44B513FB0494003087FF /* writer-cmn.c */; };
+		9D7A45EF13FB0D95003087FF /* writer-sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A44BB13FB0494003087FF /* writer-sequence.c */; };
+		9D7A460A13FB0F52003087FF /* progressbar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A460213FB0F0F003087FF /* progressbar.c */; };
+		9D7A460B13FB0F52003087FF /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAB311766257003CDA5E /* main.c */; };
+		9D7A460C13FB0F52003087FF /* args.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DB6A77911E61CB700168DE0 /* args.c */; };
+		9D7A460D13FB0F52003087FF /* sysmain.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAB71176626A003CDA5E /* sysmain.c */; };
+		9D7A461813FB1140003087FF /* deseq.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A461013FB1128003087FF /* deseq.c */; };
+		9D7A461913FB114C003087FF /* libkapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A460713FB0F36003087FF /* libkapp.a */; };
+		9D7A463B13FB135F003087FF /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC99117667FA003CDA5E /* libklib.dylib */; };
+		9D8198A911D3D39700DA4D3C /* vector_namelist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D8198A811D3D39700DA4D3C /* vector_namelist.c */; };
+		9D8204F8130F1100009A8B64 /* pagefile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D8204F7130F1100009A8B64 /* pagefile.c */; };
+		9D8EC41B11C2E49E000F1048 /* pbstree-native.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D8EC41911C2E49E000F1048 /* pbstree-native.c */; };
+		9D8EC41C11C2E49E000F1048 /* pbstree-swapped.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D8EC41A11C2E49E000F1048 /* pbstree-swapped.c */; };
+		9D90F4DB140D8229004A99D6 /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */; };
+		9D985E8D12886C6100849729 /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D985E8C12886C6100849729 /* config.c */; };
+		9DA3A84E125FA3A8005AD5BB /* refcount.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3A84D125FA3A8005AD5BB /* refcount.c */; };
+		9DA3A88512663646005AD5BB /* syswriter.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3A88412663646005AD5BB /* syswriter.c */; settings = {COMPILER_FLAGS = "-I ../../../libs/klib"; }; };
+		9DA3A8961266375B005AD5BB /* writer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3A8951266375B005AD5BB /* writer.c */; };
+		9DA3A89A12663798005AD5BB /* out.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3A89912663798005AD5BB /* out.c */; };
+		9DE559C6140E831000EA61C6 /* libwaxf.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A45C713FB0CB8003087FF /* libwaxf.dylib */; };
+		9DE559C7140E831800EA61C6 /* libwvxf.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A452F13FB0A3C003087FF /* libwvxf.dylib */; };
+		9DE559C8140E831C00EA61C6 /* libwsraxf.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A454B13FB0B4D003087FF /* libwsraxf.dylib */; };
+		9DE55A23140E94B700EA61C6 /* iunzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437C13FAF20E003087FF /* iunzip.c */; };
+		9DE55A28140E94CB00EA61C6 /* iunzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A437C13FAF20E003087FF /* iunzip.c */; };
+		9DE55A79140EA19500EA61C6 /* raw-restore-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55A78140EA19500EA61C6 /* raw-restore-qual.c */; };
+		9DE55A7A140EA1CA00EA61C6 /* raw-restore-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55A78140EA19500EA61C6 /* raw-restore-qual.c */; };
+		9DE55A85140EA93600EA61C6 /* generate-mismatch-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55A84140EA93600EA61C6 /* generate-mismatch-qual.c */; };
+		9DE55A86140EA93600EA61C6 /* generate-mismatch-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55A84140EA93600EA61C6 /* generate-mismatch-qual.c */; };
+		9DE55AAF140EC79C00EA61C6 /* mismatch-restore-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55AAE140EC79C00EA61C6 /* mismatch-restore-qual.c */; };
+		9DE55AB0140EC79C00EA61C6 /* mismatch-restore-qual.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DE55AAE140EC79C00EA61C6 /* mismatch-restore-qual.c */; };
+		9DE55AFC140EF0B100EA61C6 /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D7A426813FAE69A003087FF /* libwkdb.dylib */; };
+		9DF1902C128DAEBA00FED4AA /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1EC47B122D912500C11287 /* debug.c */; };
+		9DFECDC511766952004EFD0D /* xml.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EB3011766409003CDA5E /* xml.c */; };
+		9DFECDC711766982004EFD0D /* arc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE011766306003CDA5E /* arc.c */; };
+		9DFECDC811766982004EFD0D /* buffile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE111766306003CDA5E /* buffile.c */; };
+		9DFECDC911766982004EFD0D /* bzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE211766306003CDA5E /* bzip.c */; };
+		9DFECDCA11766982004EFD0D /* countfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE311766306003CDA5E /* countfile.c */; };
+		9DFECDCB11766982004EFD0D /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE411766306003CDA5E /* crc32.c */; };
+		9DFECDCC11766982004EFD0D /* dir_test.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE511766306003CDA5E /* dir_test.c */; };
+		9DFECDCD11766982004EFD0D /* directory.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAE611766306003CDA5E /* directory.c */; };
+		9DFECDCE11766982004EFD0D /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAEA11766306003CDA5E /* file.c */; };
+		9DFECDD011766982004EFD0D /* gzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAEC11766306003CDA5E /* gzip.c */; };
+		9DFECDD111766982004EFD0D /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAED11766306003CDA5E /* md5.c */; };
+		9DFECDD211766982004EFD0D /* nullfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAEE11766306003CDA5E /* nullfile.c */; };
+		9DFECDD311766982004EFD0D /* sra.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAEF11766306003CDA5E /* sra.c */; };
+		9DFECDD411766982004EFD0D /* subfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF011766306003CDA5E /* subfile.c */; };
+		9DFECDD511766982004EFD0D /* sysdir.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF71176631D003CDA5E /* sysdir.c */; };
+		9DFECDD611766982004EFD0D /* sysdll.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF81176631D003CDA5E /* sysdll.c */; };
+		9DFECDD711766982004EFD0D /* sysfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF91176631D003CDA5E /* sysfile.c */; };
+		9DFECDD811766982004EFD0D /* sysmmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAFA1176631D003CDA5E /* sysmmap.c */; };
+		9DFECDD911766982004EFD0D /* tar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF111766306003CDA5E /* tar.c */; };
+		9DFECDDA11766982004EFD0D /* teefile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF211766306003CDA5E /* teefile.c */; };
+		9DFECDDB11766982004EFD0D /* toc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF311766306003CDA5E /* toc.c */; };
+		9DFECDDC11766982004EFD0D /* tocdir.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF411766306003CDA5E /* tocdir.c */; };
+		9DFECDDD11766982004EFD0D /* tocentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF511766306003CDA5E /* tocentry.c */; };
+		9DFECDDE11766982004EFD0D /* tocfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D31EAF611766306003CDA5E /* tocfile.c */; };
+		9DFECDE6117669DD004EFD0D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC90117667C6003CDA5E /* libz.dylib */; };
+		9DFECDE7117669E0004EFD0D /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC8C117667C6003CDA5E /* libbz2.dylib */; };
+		9DFECDE8117669E0004EFD0D /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D31EC8E117667C6003CDA5E /* libxml2.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		9D4DCEDB1423FF6E00881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A433613FAEE0C003087FF;
+			remoteInfo = wvdb;
+		};
+		9D4DCEE11424001400881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A426713FAE69A003087FF;
+			remoteInfo = wkdb;
+		};
+		9D4DCEE31424001C00881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D4DCEE61424007400881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A433613FAEE0C003087FF;
+			remoteInfo = wvdb;
+		};
+		9D4DCEE81424007F00881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A426713FAE69A003087FF;
+			remoteInfo = wkdb;
+		};
+		9D4DCEEA1424008500881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D4DCEEC142400B400881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A433613FAEE0C003087FF;
+			remoteInfo = wvdb;
+		};
+		9D4DCEEE142400B900881098 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A426713FAE69A003087FF;
+			remoteInfo = wkdb;
+		};
+		9D7A423713FAE3FD003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A417713FAE192003087FF;
+			remoteInfo = "kdb-cmn";
+		};
+		9D7A428313FAE9A0003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A417713FAE192003087FF;
+			remoteInfo = "kdb-cmn";
+		};
+		9D7A446813FAF4A9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A431B13FAED2E003087FF;
+			remoteInfo = vdb;
+		};
+		9D7A446C13FAF4B3003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A423313FAE3F5003087FF;
+			remoteInfo = kdb;
+		};
+		9D7A446E13FAF4B6003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44DF13FB0546003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A44BF13FB04A9003087FF;
+			remoteInfo = align;
+		};
+		9D7A44E113FB0551003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A431B13FAED2E003087FF;
+			remoteInfo = vdb;
+		};
+		9D7A44E513FB0561003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44E713FB057E003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44E913FB0582003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A431B13FAED2E003087FF;
+			remoteInfo = vdb;
+		};
+		9D7A44EB13FB0597003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A431B13FAED2E003087FF;
+			remoteInfo = vdb;
+		};
+		9D7A44ED13FB0597003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A423313FAE3F5003087FF;
+			remoteInfo = kdb;
+		};
+		9D7A44EF13FB0597003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44F113FB05A9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A423313FAE3F5003087FF;
+			remoteInfo = kdb;
+		};
+		9D7A44F313FB05A9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44F513FB05C9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A426713FAE69A003087FF;
+			remoteInfo = wkdb;
+		};
+		9D7A44F713FB05C9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44F913FB05C9003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A415B13FAE00E003087FF;
+			remoteInfo = kmproc;
+		};
+		9D7A44FB13FB05EB003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A44FD13FB05F2003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A450513FB06AB003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A428813FAE9B5003087FF;
+			remoteInfo = "vdb-cmn";
+		};
+		9D7A450713FB06BD003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A428813FAE9B5003087FF;
+			remoteInfo = "vdb-cmn";
+		};
+		9D7A45AA13FB0CB8003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A45AE13FB0CB8003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A44BF13FB04A9003087FF;
+			remoteInfo = align;
+		};
+		9D7A45D313FB0D50003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9D7A45D513FB0D50003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A423313FAE3F5003087FF;
+			remoteInfo = kdb;
+		};
+		9D7A45D713FB0D50003087FF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A431B13FAED2E003087FF;
+			remoteInfo = vdb;
+		};
+		9DE55930140D82BC00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A460613FB0F36003087FF;
+			remoteInfo = kapp;
+		};
+		9DE55932140D82BC00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A433613FAEE0C003087FF;
+			remoteInfo = wvdb;
+		};
+		9DE55934140D82CD00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D31EC98117667FA003CDA5E;
+			remoteInfo = klib;
+		};
+		9DE55A95140EAC9E00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A45A813FB0CB8003087FF;
+			remoteInfo = waxf;
+		};
+		9DE55A97140EAC9E00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A454A13FB0B4D003087FF;
+			remoteInfo = wsraxf;
+		};
+		9DE55A99140EAC9E00EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A452E13FB0A3C003087FF;
+			remoteInfo = wvxf;
+		};
+		9DE55AFD140EF0C800EA61C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D7A426713FAE69A003087FF;
+			remoteInfo = wkdb;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		9D1235B414F571AC00ECC72C /* config-grammar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "config-grammar.c"; path = "../../../libs/kfg/config-grammar.c"; sourceTree = SOURCE_ROOT; };
+		9D1235B514F571AC00ECC72C /* config-grammar.y */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.yacc; name = "config-grammar.y"; path = "../../../libs/kfg/config-grammar.y"; sourceTree = SOURCE_ROOT; };
+		9D1235B614F571AC00ECC72C /* config-lex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "config-lex.c"; path = "../../../libs/kfg/config-lex.c"; sourceTree = SOURCE_ROOT; };
+		9D1235B714F571AC00ECC72C /* config-lex.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; name = "config-lex.l"; path = "../../../libs/kfg/config-lex.l"; sourceTree = SOURCE_ROOT; };
+		9D1235B814F571AC00ECC72C /* config-tokens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "config-tokens.h"; path = "../../../libs/kfg/config-tokens.h"; sourceTree = SOURCE_ROOT; };
+		9D1235B914F571AC00ECC72C /* config.linux.kfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = config.linux.kfg; path = ../../../libs/kfg/config.linux.kfg; sourceTree = SOURCE_ROOT; };
+		9D1235BA14F571AC00ECC72C /* config.win.kfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = config.win.kfg; path = ../../../libs/kfg/config.win.kfg; sourceTree = SOURCE_ROOT; };
+		9D1235BB14F571AC00ECC72C /* kfg-parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "kfg-parse.h"; path = "../../../libs/kfg/kfg-parse.h"; sourceTree = SOURCE_ROOT; };
+		9D1EC47B122D912500C11287 /* debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = debug.c; path = ../../../libs/klib/debug.c; sourceTree = SOURCE_ROOT; };
+		9D1EC47F122D914C00C11287 /* printf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = printf.c; path = ../../../libs/klib/printf.c; sourceTree = SOURCE_ROOT; };
+		9D1EC480122D914C00C11287 /* status-rc-strings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "status-rc-strings.c"; path = "../../../libs/klib/status-rc-strings.c"; sourceTree = SOURCE_ROOT; };
+		9D1EC481122D914C00C11287 /* status-rc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "status-rc.c"; path = "../../../libs/klib/status-rc.c"; sourceTree = SOURCE_ROOT; };
+		9D1EC482122D914C00C11287 /* status.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = status.c; path = ../../../libs/klib/status.c; sourceTree = SOURCE_ROOT; };
+		9D31EAB311766257003CDA5E /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../../libs/kapp/main.c; sourceTree = SOURCE_ROOT; };
+		9D31EAB71176626A003CDA5E /* sysmain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysmain.c; path = ../../../libs/kapp/unix/sysmain.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE011766306003CDA5E /* arc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = arc.c; path = ../../../libs/kfs/arc.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE111766306003CDA5E /* buffile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = buffile.c; path = ../../../libs/kfs/buffile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE211766306003CDA5E /* bzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bzip.c; path = ../../../libs/kfs/bzip.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE311766306003CDA5E /* countfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = countfile.c; path = ../../../libs/kfs/countfile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE411766306003CDA5E /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../../libs/kfs/crc32.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE511766306003CDA5E /* dir_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dir_test.c; path = ../../../libs/kfs/dir_test.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE611766306003CDA5E /* directory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = directory.c; path = ../../../libs/kfs/directory.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE711766306003CDA5E /* ffext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ffext.c; path = ../../../libs/kfs/ffext.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE811766306003CDA5E /* ffkey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ffkey.c; path = ../../../libs/kfs/ffkey.c; sourceTree = SOURCE_ROOT; };
+		9D31EAE911766306003CDA5E /* ffmagic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ffmagic.c; path = ../../../libs/kfs/ffmagic.c; sourceTree = SOURCE_ROOT; };
+		9D31EAEA11766306003CDA5E /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../../../libs/kfs/file.c; sourceTree = SOURCE_ROOT; };
+		9D31EAEB11766306003CDA5E /* fileformat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fileformat.c; path = ../../../libs/kfs/fileformat.c; sourceTree = SOURCE_ROOT; };
+		9D31EAEC11766306003CDA5E /* gzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzip.c; path = ../../../libs/kfs/gzip.c; sourceTree = SOURCE_ROOT; };
+		9D31EAED11766306003CDA5E /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../../libs/kfs/md5.c; sourceTree = SOURCE_ROOT; };
+		9D31EAEE11766306003CDA5E /* nullfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nullfile.c; path = ../../../libs/kfs/nullfile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAEF11766306003CDA5E /* sra.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sra.c; path = ../../../libs/kfs/sra.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF011766306003CDA5E /* subfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = subfile.c; path = ../../../libs/kfs/subfile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF111766306003CDA5E /* tar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tar.c; path = ../../../libs/kfs/tar.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF211766306003CDA5E /* teefile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = teefile.c; path = ../../../libs/kfs/teefile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF311766306003CDA5E /* toc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = toc.c; path = ../../../libs/kfs/toc.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF411766306003CDA5E /* tocdir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocdir.c; path = ../../../libs/kfs/tocdir.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF511766306003CDA5E /* tocentry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocentry.c; path = ../../../libs/kfs/tocentry.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF611766306003CDA5E /* tocfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocfile.c; path = ../../../libs/kfs/tocfile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF71176631D003CDA5E /* sysdir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysdir.c; path = ../../../libs/kfs/unix/sysdir.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF81176631D003CDA5E /* sysdll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysdll.c; path = ../../../libs/kfs/unix/sysdll.c; sourceTree = SOURCE_ROOT; };
+		9D31EAF91176631D003CDA5E /* sysfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysfile.c; path = ../../../libs/kfs/unix/sysfile.c; sourceTree = SOURCE_ROOT; };
+		9D31EAFA1176631D003CDA5E /* sysmmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysmmap.c; path = ../../../libs/kfs/unix/sysmmap.c; sourceTree = SOURCE_ROOT; };
+		9D31EAFE11766366003CDA5E /* bstpersist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bstpersist.c; path = ../../../libs/klib/bstpersist.c; sourceTree = SOURCE_ROOT; };
+		9D31EAFF11766366003CDA5E /* container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = container.c; path = ../../../libs/klib/container.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0011766366003CDA5E /* cp1252.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cp1252.c; path = ../../../libs/klib/cp1252.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0111766366003CDA5E /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../../libs/klib/crc32.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0211766366003CDA5E /* data-buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "data-buffer.c"; path = "../../../libs/klib/data-buffer.c"; sourceTree = SOURCE_ROOT; };
+		9D31EB0311766366003CDA5E /* iso8859-1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "iso8859-1.c"; path = "../../../libs/klib/iso8859-1.c"; sourceTree = SOURCE_ROOT; };
+		9D31EB0411766366003CDA5E /* iso8859.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iso8859.c; path = ../../../libs/klib/iso8859.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0511766366003CDA5E /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = log.c; path = ../../../libs/klib/log.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0611766366003CDA5E /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../../libs/klib/md5.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0711766366003CDA5E /* namelist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = namelist.c; path = ../../../libs/klib/namelist.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0811766366003CDA5E /* pack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pack.c; path = ../../../libs/klib/pack.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0911766366003CDA5E /* pbstree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pbstree.c; path = ../../../libs/klib/pbstree.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0A11766366003CDA5E /* ptpersist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptpersist.c; path = ../../../libs/klib/ptpersist.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0B11766366003CDA5E /* ptrie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptrie.c; path = ../../../libs/klib/ptrie.c; sourceTree = SOURCE_ROOT; };
+		9D31EB0C11766366003CDA5E /* rc-idx-tbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "rc-idx-tbl.c"; path = "../../../libs/klib/rc-idx-tbl.c"; sourceTree = SOURCE_ROOT; };
+		9D31EB0D11766366003CDA5E /* rc-tbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "rc-tbl.c"; path = "../../../libs/klib/rc-tbl.c"; sourceTree = SOURCE_ROOT; };
+		9D31EB0E11766366003CDA5E /* symtab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = symtab.c; path = ../../../libs/klib/symtab.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1011766366003CDA5E /* text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = text.c; path = ../../../libs/klib/text.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1111766366003CDA5E /* token.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = token.c; path = ../../../libs/klib/token.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1211766366003CDA5E /* trie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trie.c; path = ../../../libs/klib/trie.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1311766366003CDA5E /* trieval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trieval.c; path = ../../../libs/klib/trieval.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1411766366003CDA5E /* unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unpack.c; path = ../../../libs/klib/unpack.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1511766366003CDA5E /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8.c; path = ../../../libs/klib/utf8.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1611766366003CDA5E /* vector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vector.c; path = ../../../libs/klib/vector.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1711766366003CDA5E /* vlen-encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "vlen-encode.c"; path = "../../../libs/klib/vlen-encode.c"; sourceTree = SOURCE_ROOT; };
+		9D31EB191176637A003CDA5E /* syslog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syslog.c; path = ../../../libs/klib/unix/syslog.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1D117663AB003CDA5E /* stbarrier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stbarrier.c; path = ../../../libs/kproc/stbarrier.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1E117663AB003CDA5E /* stcond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stcond.c; path = ../../../libs/kproc/stcond.c; sourceTree = SOURCE_ROOT; };
+		9D31EB1F117663AB003CDA5E /* stlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stlock.c; path = ../../../libs/kproc/stlock.c; sourceTree = SOURCE_ROOT; };
+		9D31EB20117663AB003CDA5E /* stsem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stsem.c; path = ../../../libs/kproc/stsem.c; sourceTree = SOURCE_ROOT; };
+		9D31EB21117663AB003CDA5E /* stthread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stthread.c; path = ../../../libs/kproc/stthread.c; sourceTree = SOURCE_ROOT; };
+		9D31EB22117663AB003CDA5E /* sttimeout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sttimeout.c; path = ../../../libs/kproc/sttimeout.c; sourceTree = SOURCE_ROOT; };
+		9D31EB2B117663C6003CDA5E /* syscond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syscond.c; path = ../../../libs/kproc/unix/syscond.c; sourceTree = SOURCE_ROOT; };
+		9D31EB2C117663C6003CDA5E /* systhread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = systhread.c; path = ../../../libs/kproc/unix/systhread.c; sourceTree = SOURCE_ROOT; };
+		9D31EB2D117663C6003CDA5E /* systimeout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = systimeout.c; path = ../../../libs/kproc/unix/systimeout.c; sourceTree = SOURCE_ROOT; };
+		9D31EB2E117663D4003CDA5E /* syslock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syslock.c; path = ../../../libs/kproc/bsd/syslock.c; sourceTree = SOURCE_ROOT; };
+		9D31EB3011766409003CDA5E /* xml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xml.c; path = ../../../libs/kxml/xml.c; sourceTree = SOURCE_ROOT; };
+		9D31EC8C117667C6003CDA5E /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
+		9D31EC8E117667C6003CDA5E /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
+		9D31EC90117667C6003CDA5E /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		9D31EC99117667FA003CDA5E /* libklib.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libklib.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D320A0A142B813300ACA5AA /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../../../tools/deseq/Makefile; sourceTree = SOURCE_ROOT; };
+		9D320AAE142D02B000ACA5AA /* extract_token.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extract_token.c; path = ../../../libs/vxf/extract_token.c; sourceTree = SOURCE_ROOT; };
+		9D320AAF142D02B000ACA5AA /* strtonum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = strtonum.c; path = ../../../libs/vxf/strtonum.c; sourceTree = SOURCE_ROOT; };
+		9D320AB5142D02E600ACA5AA /* sprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sprintf.c; path = ../../../libs/vxf/sprintf.c; sourceTree = SOURCE_ROOT; };
+		9D320AD5142D0E3F00ACA5AA /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../../../libs/vxf/Makefile; sourceTree = SOURCE_ROOT; };
+		9D4DCEAB1423FD9600881098 /* ref-preserve_qual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ref-preserve_qual.c"; path = "../../../libs/axf/ref-preserve_qual.c"; sourceTree = SOURCE_ROOT; };
+		9D62F428124D01AE003D38E9 /* bsearch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsearch.c; path = ../../../libs/klib/bsearch.c; sourceTree = SOURCE_ROOT; };
+		9D62F429124D01AE003D38E9 /* qsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qsort.c; path = ../../../libs/klib/qsort.c; sourceTree = SOURCE_ROOT; };
+		9D6FFB31145094DB00952EB7 /* align-access.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "align-access.h"; path = "align/align-access.h"; sourceTree = "<group>"; };
+		9D6FFB32145094DB00952EB7 /* alignarc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = alignarc.h; path = align/alignarc.h; sourceTree = "<group>"; };
+		9D6FFB33145094DB00952EB7 /* alignsrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = alignsrc.h; path = align/alignsrc.h; sourceTree = "<group>"; };
+		9D6FFB34145094DB00952EB7 /* extern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extern.h; path = align/extern.h; sourceTree = "<group>"; };
+		9D6FFB35145094DB00952EB7 /* reader-refseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "reader-refseq.h"; path = "align/reader-refseq.h"; sourceTree = "<group>"; };
+		9D6FFB36145094DB00952EB7 /* refseq-mgr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "refseq-mgr.h"; path = "align/refseq-mgr.h"; sourceTree = "<group>"; };
+		9D6FFB37145094DB00952EB7 /* writer-alignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-alignment.h"; path = "align/writer-alignment.h"; sourceTree = "<group>"; };
+		9D6FFB38145094DB00952EB7 /* writer-cmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-cmn.h"; path = "align/writer-cmn.h"; sourceTree = "<group>"; };
+		9D6FFB39145094DB00952EB7 /* writer-reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-reference.h"; path = "align/writer-reference.h"; sourceTree = "<group>"; };
+		9D6FFB3A145094DB00952EB7 /* writer-refseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-refseq.h"; path = "align/writer-refseq.h"; sourceTree = "<group>"; };
+		9D6FFB3B145094DB00952EB7 /* writer-sequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-sequence.h"; path = "align/writer-sequence.h"; sourceTree = "<group>"; };
+		9D7356C41177554A009EA3E4 /* built-in.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = "built-in.vschema"; path = "../../../interfaces/vdb/built-in.vschema"; sourceTree = SOURCE_ROOT; };
+		9D7356C51177554A009EA3E4 /* vdb.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = vdb.vschema; path = ../../../interfaces/vdb/vdb.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356C71177556A009EA3E4 /* ncbi.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = ncbi.vschema; path = ../../../interfaces/ncbi/ncbi.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356C81177556A009EA3E4 /* spotname.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = spotname.vschema; path = ../../../interfaces/ncbi/spotname.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356CA117755B4009EA3E4 /* insdc.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = insdc.vschema; path = ../../../interfaces/insdc/insdc.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356CB117755B4009EA3E4 /* seq.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = seq.vschema; path = ../../../interfaces/insdc/seq.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356CC117755B4009EA3E4 /* sra.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = sra.vschema; path = ../../../interfaces/insdc/sra.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356CE117755F4009EA3E4 /* 454.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = 454.vschema; path = ../../../interfaces/sra/454.vschema; sourceTree = SOURCE_ROOT; };
+		9D7356CF117755F4009EA3E4 /* pevents.vschema */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; includeInIndex = 0; name = pevents.vschema; path = ../../../interfaces/sra/pevents.vschema; sourceTree = SOURCE_ROOT; };
+		9D7A40D913FADBA3003087FF /* SHA-32bit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "SHA-32bit.c"; path = "../../../libs/klib/SHA-32bit.c"; sourceTree = SOURCE_ROOT; };
+		9D7A40DA13FADBA3003087FF /* SHA-64bit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "SHA-64bit.c"; path = "../../../libs/klib/SHA-64bit.c"; sourceTree = SOURCE_ROOT; };
+		9D7A40DF13FADBEE003087FF /* syserrcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syserrcode.c; path = ../../../libs/klib/unix/syserrcode.c; sourceTree = SOURCE_ROOT; };
+		9D7A40E013FADBEE003087FF /* systime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = systime.c; path = ../../../libs/klib/unix/systime.c; sourceTree = SOURCE_ROOT; };
+		9D7A40E813FADC66003087FF /* writer-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-priv.h"; path = "../../../libs/klib/writer-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40ED13FADCFE003087FF /* arrayfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = arrayfile.c; path = ../../../libs/kfs/arrayfile.c; sourceTree = SOURCE_ROOT; };
+		9D7A40EE13FADCFE003087FF /* buffile-write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "buffile-write.c"; path = "../../../libs/kfs/buffile-write.c"; sourceTree = SOURCE_ROOT; };
+		9D7A40EF13FADCFE003087FF /* fileformat-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "fileformat-priv.h"; path = "../../../libs/kfs/fileformat-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40F013FADCFE003087FF /* impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = impl.h; path = ../../../libs/kfs/impl.h; sourceTree = SOURCE_ROOT; };
+		9D7A40F113FADCFE003087FF /* karc-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "karc-priv.h"; path = "../../../libs/kfs/karc-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40F213FADCFE003087FF /* kfs-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "kfs-priv.h"; path = "../../../libs/kfs/kfs-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40F313FADCFE003087FF /* manager.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = manager.c; path = ../../../libs/kfs/manager.c; sourceTree = SOURCE_ROOT; };
+		9D7A40F413FADCFE003087FF /* mmap-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mmap-priv.h"; path = "../../../libs/kfs/mmap-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40F513FADCFE003087FF /* mmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mmap.c; path = ../../../libs/kfs/mmap.c; sourceTree = SOURCE_ROOT; };
+		9D7A40F613FADCFE003087FF /* path-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "path-priv.h"; path = "../../../libs/kfs/path-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A40F713FADCFE003087FF /* path.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = path.c; path = ../../../libs/kfs/path.c; sourceTree = SOURCE_ROOT; };
+		9D7A40F813FADCFE003087FF /* pmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pmem.c; path = ../../../libs/kfs/pmem.c; sourceTree = SOURCE_ROOT; };
+		9D7A40F913FADCFE003087FF /* szip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = szip.c; path = ../../../libs/kfs/szip.c; sourceTree = SOURCE_ROOT; };
+		9D7A40FA13FADCFE003087FF /* toc-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "toc-priv.h"; path = "../../../libs/kfs/toc-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A411213FADD33003087FF /* sysdir-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "sysdir-priv.h"; path = "../../../libs/kfs/unix/sysdir-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A411313FADD33003087FF /* sysfile-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "sysfile-priv.h"; path = "../../../libs/kfs/unix/sysfile-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A411413FADD33003087FF /* sysmmap-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "sysmmap-priv.h"; path = "../../../libs/kfs/unix/sysmmap-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A412E13FADF3A003087FF /* libksproc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libksproc.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A414813FADFA1003087FF /* syscond-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "syscond-priv.h"; path = "../../../libs/kproc/unix/syscond-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A414B13FADFC6003087FF /* syslock-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "syslock-priv.h"; sourceTree = "<group>"; };
+		9D7A414C13FADFC6003087FF /* syslock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = syslock.c; sourceTree = "<group>"; };
+		9D7A414D13FADFC6003087FF /* queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = queue.c; path = ../../../libs/kproc/queue.c; sourceTree = SOURCE_ROOT; };
+		9D7A414E13FADFC6003087FF /* sem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sem.c; path = ../../../libs/kproc/sem.c; sourceTree = SOURCE_ROOT; };
+		9D7A415C13FAE00E003087FF /* libkmproc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libkmproc.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A417813FAE192003087FF /* libkdb-cmn.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libkdb-cmn.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A417D13FAE1DA003087FF /* btree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = btree.c; path = ../../../libs/kdb/btree.c; sourceTree = SOURCE_ROOT; };
+		9D7A417E13FAE1DA003087FF /* cc-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "cc-priv.h"; path = "../../../libs/kdb/cc-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A417F13FAE1DA003087FF /* coldata-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "coldata-priv.h"; path = "../../../libs/kdb/coldata-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418013FAE1DA003087FF /* coldata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = coldata.c; path = ../../../libs/kdb/coldata.c; sourceTree = SOURCE_ROOT; };
+		9D7A418113FAE1DA003087FF /* colfmt-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "colfmt-priv.h"; path = "../../../libs/kdb/colfmt-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418213FAE1DA003087FF /* colidx-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "colidx-priv.h"; path = "../../../libs/kdb/colidx-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418313FAE1DA003087FF /* colidx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx.c; path = ../../../libs/kdb/colidx.c; sourceTree = SOURCE_ROOT; };
+		9D7A418413FAE1DA003087FF /* colidx0-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "colidx0-priv.h"; path = "../../../libs/kdb/colidx0-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418513FAE1DA003087FF /* colidx0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx0.c; path = ../../../libs/kdb/colidx0.c; sourceTree = SOURCE_ROOT; };
+		9D7A418613FAE1DA003087FF /* colidx1-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "colidx1-priv.h"; path = "../../../libs/kdb/colidx1-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418713FAE1DA003087FF /* colidx1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx1.c; path = ../../../libs/kdb/colidx1.c; sourceTree = SOURCE_ROOT; };
+		9D7A418813FAE1DA003087FF /* colidx2-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "colidx2-priv.h"; path = "../../../libs/kdb/colidx2-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418913FAE1DA003087FF /* colidx2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx2.c; path = ../../../libs/kdb/colidx2.c; sourceTree = SOURCE_ROOT; };
+		9D7A418A13FAE1DA003087FF /* column-cc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "column-cc.c"; path = "../../../libs/kdb/column-cc.c"; sourceTree = SOURCE_ROOT; };
+		9D7A418B13FAE1DA003087FF /* column-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "column-priv.h"; path = "../../../libs/kdb/column-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A418C13FAE1DA003087FF /* column.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = column.c; path = ../../../libs/kdb/column.c; sourceTree = SOURCE_ROOT; };
+		9D7A418D13FAE1DA003087FF /* database-cc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "database-cc.c"; path = "../../../libs/kdb/database-cc.c"; sourceTree = SOURCE_ROOT; };
+		9D7A418E13FAE1DA003087FF /* database-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "database-cmn.c"; path = "../../../libs/kdb/database-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A418F13FAE1DA003087FF /* database-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-priv.h"; path = "../../../libs/kdb/database-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419013FAE1DA003087FF /* database.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = database.c; path = ../../../libs/kdb/database.c; sourceTree = SOURCE_ROOT; };
+		9D7A419113FAE1DA003087FF /* dbcc-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dbcc-cmn.c"; path = "../../../libs/kdb/dbcc-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A419213FAE1DA003087FF /* dbmgr-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dbmgr-cmn.c"; path = "../../../libs/kdb/dbmgr-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A419313FAE1DA003087FF /* dbmgr-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "dbmgr-priv.h"; path = "../../../libs/kdb/dbmgr-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419413FAE1DA003087FF /* dbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dbmgr.c; path = ../../../libs/kdb/dbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D7A419513FAE1DA003087FF /* idstats-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "idstats-priv.h"; path = "../../../libs/kdb/idstats-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419613FAE1DA003087FF /* idstats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = idstats.c; path = ../../../libs/kdb/idstats.c; sourceTree = SOURCE_ROOT; };
+		9D7A419713FAE1DA003087FF /* idxblk-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "idxblk-priv.h"; path = "../../../libs/kdb/idxblk-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419813FAE1DA003087FF /* idxblk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = idxblk.c; path = ../../../libs/kdb/idxblk.c; sourceTree = SOURCE_ROOT; };
+		9D7A419913FAE1DA003087FF /* index-cmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "index-cmn.h"; path = "../../../libs/kdb/index-cmn.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419A13FAE1DA003087FF /* index-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "index-priv.h"; path = "../../../libs/kdb/index-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419B13FAE1DA003087FF /* index.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index.c; path = ../../../libs/kdb/index.c; sourceTree = SOURCE_ROOT; };
+		9D7A419C13FAE1DA003087FF /* kdb-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "kdb-priv.h"; path = "../../../libs/kdb/kdb-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419D13FAE1DA003087FF /* kdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = kdb.c; path = ../../../libs/kdb/kdb.c; sourceTree = SOURCE_ROOT; };
+		9D7A419E13FAE1DA003087FF /* kdbfmt-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "kdbfmt-priv.h"; path = "../../../libs/kdb/kdbfmt-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A419F13FAE1DA003087FF /* libkdb.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libkdb.vers.h; path = ../../../libs/kdb/libkdb.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A41A013FAE1DA003087FF /* libwkdb.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libwkdb.vers.h; path = ../../../libs/kdb/libwkdb.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A41A113FAE1DA003087FF /* meta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = meta.c; path = ../../../libs/kdb/meta.c; sourceTree = SOURCE_ROOT; };
+		9D7A41A213FAE1DA003087FF /* ptrieval-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ptrieval-v1.c"; path = "../../../libs/kdb/ptrieval-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41A313FAE1DA003087FF /* ptrieval-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ptrieval-v2.c"; path = "../../../libs/kdb/ptrieval-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41A413FAE1DA003087FF /* table-cc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "table-cc.c"; path = "../../../libs/kdb/table-cc.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41A513FAE1DA003087FF /* table-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "table-priv.h"; path = "../../../libs/kdb/table-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41A613FAE1DA003087FF /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = table.c; path = ../../../libs/kdb/table.c; sourceTree = SOURCE_ROOT; };
+		9D7A41A713FAE1DA003087FF /* trieidx-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "trieidx-priv.h"; path = "../../../libs/kdb/trieidx-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41A813FAE1DA003087FF /* trieidx-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieidx-v1.c"; path = "../../../libs/kdb/trieidx-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41A913FAE1DA003087FF /* trieidx-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieidx-v2.c"; path = "../../../libs/kdb/trieidx-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41AA13FAE1DA003087FF /* trieval-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieval-v1.c"; path = "../../../libs/kdb/trieval-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41AB13FAE1DA003087FF /* trieval-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieval-v2.c"; path = "../../../libs/kdb/trieval-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41AC13FAE1DA003087FF /* u64idx-v3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "u64idx-v3.c"; path = "../../../libs/kdb/u64idx-v3.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41AD13FAE1DA003087FF /* wcoldata-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcoldata-priv.h"; path = "../../../libs/kdb/wcoldata-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41AE13FAE1DA003087FF /* wcoldata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcoldata.c; path = ../../../libs/kdb/wcoldata.c; sourceTree = SOURCE_ROOT; };
+		9D7A41AF13FAE1DA003087FF /* wcolidx-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcolidx-priv.h"; path = "../../../libs/kdb/wcolidx-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41B013FAE1DA003087FF /* wcolidx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx.c; path = ../../../libs/kdb/wcolidx.c; sourceTree = SOURCE_ROOT; };
+		9D7A41B113FAE1DA003087FF /* wcolidx0-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcolidx0-priv.h"; path = "../../../libs/kdb/wcolidx0-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41B213FAE1DA003087FF /* wcolidx0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx0.c; path = ../../../libs/kdb/wcolidx0.c; sourceTree = SOURCE_ROOT; };
+		9D7A41B313FAE1DA003087FF /* wcolidx1-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcolidx1-priv.h"; path = "../../../libs/kdb/wcolidx1-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41B413FAE1DA003087FF /* wcolidx1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx1.c; path = ../../../libs/kdb/wcolidx1.c; sourceTree = SOURCE_ROOT; };
+		9D7A41B513FAE1DA003087FF /* wcolidx2-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcolidx2-priv.h"; path = "../../../libs/kdb/wcolidx2-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41B613FAE1DA003087FF /* wcolidx2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx2.c; path = ../../../libs/kdb/wcolidx2.c; sourceTree = SOURCE_ROOT; };
+		9D7A41B713FAE1DA003087FF /* wcolumn-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wcolumn-priv.h"; path = "../../../libs/kdb/wcolumn-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41B813FAE1DA003087FF /* wcolumn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolumn.c; path = ../../../libs/kdb/wcolumn.c; sourceTree = SOURCE_ROOT; };
+		9D7A41B913FAE1DA003087FF /* wdatabase-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wdatabase-priv.h"; path = "../../../libs/kdb/wdatabase-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41BA13FAE1DA003087FF /* wdatabase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdatabase.c; path = ../../../libs/kdb/wdatabase.c; sourceTree = SOURCE_ROOT; };
+		9D7A41BB13FAE1DA003087FF /* wdbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdbmgr.c; path = ../../../libs/kdb/wdbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D7A41BC13FAE1DA003087FF /* werror-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "werror-priv.h"; path = "../../../libs/kdb/werror-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41BD13FAE1DA003087FF /* widxblk-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "widxblk-priv.h"; path = "../../../libs/kdb/widxblk-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41BE13FAE1DA003087FF /* widxblk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = widxblk.c; path = ../../../libs/kdb/widxblk.c; sourceTree = SOURCE_ROOT; };
+		9D7A41BF13FAE1DA003087FF /* windex-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "windex-priv.h"; path = "../../../libs/kdb/windex-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41C013FAE1DA003087FF /* windex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = windex.c; path = ../../../libs/kdb/windex.c; sourceTree = SOURCE_ROOT; };
+		9D7A41C113FAE1DA003087FF /* wkdb-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wkdb-priv.h"; path = "../../../libs/kdb/wkdb-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41C213FAE1DA003087FF /* wkdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wkdb.c; path = ../../../libs/kdb/wkdb.c; sourceTree = SOURCE_ROOT; };
+		9D7A41C313FAE1DA003087FF /* wmeta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wmeta.c; path = ../../../libs/kdb/wmeta.c; sourceTree = SOURCE_ROOT; };
+		9D7A41C413FAE1DA003087FF /* wtable-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "wtable-priv.h"; path = "../../../libs/kdb/wtable-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A41C513FAE1DA003087FF /* wtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wtable.c; path = ../../../libs/kdb/wtable.c; sourceTree = SOURCE_ROOT; };
+		9D7A41C613FAE1DA003087FF /* wtrieidx-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wtrieidx-v1.c"; path = "../../../libs/kdb/wtrieidx-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41C713FAE1DA003087FF /* wtrieidx-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wtrieidx-v2.c"; path = "../../../libs/kdb/wtrieidx-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D7A41C813FAE1DA003087FF /* wu64idx-v3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wu64idx-v3.c"; path = "../../../libs/kdb/wu64idx-v3.c"; sourceTree = SOURCE_ROOT; };
+		9D7A423413FAE3F5003087FF /* libkdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libkdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A426813FAE69A003087FF /* libwkdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwkdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A428913FAE9B5003087FF /* libvdb-cmn.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libvdb-cmn.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A428E13FAEA20003087FF /* blob-headers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "blob-headers.c"; path = "../../../libs/vdb/blob-headers.c"; sourceTree = SOURCE_ROOT; };
+		9D7A428F13FAEA20003087FF /* blob-headers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "blob-headers.h"; path = "../../../libs/vdb/blob-headers.h"; sourceTree = SOURCE_ROOT; };
+		9D7A429013FAEA20003087FF /* blob-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "blob-priv.h"; path = "../../../libs/vdb/blob-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A429113FAEA20003087FF /* blob.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = blob.c; path = ../../../libs/vdb/blob.c; sourceTree = SOURCE_ROOT; };
+		9D7A429213FAEA20003087FF /* blob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = blob.h; path = ../../../libs/vdb/blob.h; sourceTree = SOURCE_ROOT; };
+		9D7A429313FAEA20003087FF /* cast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cast.c; path = ../../../libs/vdb/cast.c; sourceTree = SOURCE_ROOT; };
+		9D7A429413FAEA20003087FF /* column-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "column-cmn.c"; path = "../../../libs/vdb/column-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A429513FAEA20003087FF /* column-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "column-priv.h"; path = "../../../libs/vdb/column-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A429613FAEA20003087FF /* column.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = column.c; path = ../../../libs/vdb/column.c; sourceTree = SOURCE_ROOT; };
+		9D7A429713FAEA20003087FF /* compare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = compare.c; path = ../../../libs/vdb/compare.c; sourceTree = SOURCE_ROOT; };
+		9D7A429813FAEA20003087FF /* cursor-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "cursor-cmn.c"; path = "../../../libs/vdb/cursor-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A429913FAEA20003087FF /* cursor-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "cursor-priv.h"; path = "../../../libs/vdb/cursor-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A429A13FAEA20003087FF /* cursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cursor.c; path = ../../../libs/vdb/cursor.c; sourceTree = SOURCE_ROOT; };
+		9D7A429B13FAEA20003087FF /* database-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "database-cmn.c"; path = "../../../libs/vdb/database-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A429C13FAEA20003087FF /* database-load.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "database-load.c"; path = "../../../libs/vdb/database-load.c"; sourceTree = SOURCE_ROOT; };
+		9D7A429D13FAEA20003087FF /* database-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-priv.h"; path = "../../../libs/vdb/database-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A429E13FAEA20003087FF /* database.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = database.c; path = ../../../libs/vdb/database.c; sourceTree = SOURCE_ROOT; };
+		9D7A429F13FAEA20003087FF /* dbmgr-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dbmgr-cmn.c"; path = "../../../libs/vdb/dbmgr-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42A013FAEA20003087FF /* dbmgr-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "dbmgr-priv.h"; path = "../../../libs/vdb/dbmgr-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42A113FAEA20003087FF /* dbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dbmgr.c; path = ../../../libs/vdb/dbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D7A42A213FAEA20003087FF /* environment-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "environment-read.c"; path = "../../../libs/vdb/environment-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42A313FAEA20003087FF /* fixed-row-len.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "fixed-row-len.c"; path = "../../../libs/vdb/fixed-row-len.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42A413FAEA20003087FF /* index_insert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index_insert.c; path = ../../../libs/vdb/index_insert.c; sourceTree = SOURCE_ROOT; };
+		9D7A42A513FAEA20003087FF /* index_lookup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index_lookup.c; path = ../../../libs/vdb/index_lookup.c; sourceTree = SOURCE_ROOT; };
+		9D7A42A613FAEA20003087FF /* index_project.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index_project.c; path = ../../../libs/vdb/index_project.c; sourceTree = SOURCE_ROOT; };
+		9D7A42A713FAEA20003087FF /* libvdb.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvdb.vers.h; path = ../../../libs/vdb/libvdb.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A42A813FAEA20003087FF /* libwvdb.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libwvdb.vers.h; path = ../../../libs/vdb/libwvdb.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A42A913FAEA20003087FF /* linker-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "linker-cmn.c"; path = "../../../libs/vdb/linker-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42AA13FAEA20003087FF /* linker-int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "linker-int.c"; path = "../../../libs/vdb/linker-int.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42AB13FAEA21003087FF /* linker-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "linker-priv.h"; path = "../../../libs/vdb/linker-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42AC13FAEA21003087FF /* linker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linker.c; path = ../../../libs/vdb/linker.c; sourceTree = SOURCE_ROOT; };
+		9D7A42AD13FAEA21003087FF /* merge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = merge.c; path = ../../../libs/vdb/merge.c; sourceTree = SOURCE_ROOT; };
+		9D7A42AE13FAEA21003087FF /* meta-append.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-append.c"; path = "../../../libs/vdb/meta-append.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42AF13FAEA21003087FF /* meta-attr-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-attr-read.c"; path = "../../../libs/vdb/meta-attr-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B013FAEA21003087FF /* meta-attr-write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-attr-write.c"; path = "../../../libs/vdb/meta-attr-write.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B113FAEA21003087FF /* meta-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-read.c"; path = "../../../libs/vdb/meta-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B213FAEA21003087FF /* meta-value.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-value.c"; path = "../../../libs/vdb/meta-value.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B313FAEA21003087FF /* meta-write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "meta-write.c"; path = "../../../libs/vdb/meta-write.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B413FAEA21003087FF /* page-map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "page-map.c"; path = "../../../libs/vdb/page-map.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B513FAEA21003087FF /* page-map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "page-map.h"; path = "../../../libs/vdb/page-map.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42B613FAEA21003087FF /* parameter-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "parameter-read.c"; path = "../../../libs/vdb/parameter-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B713FAEA21003087FF /* phys-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "phys-cmn.c"; path = "../../../libs/vdb/phys-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B813FAEA21003087FF /* phys-load.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "phys-load.c"; path = "../../../libs/vdb/phys-load.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42B913FAEA21003087FF /* phys-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "phys-priv.h"; path = "../../../libs/vdb/phys-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42BA13FAEA21003087FF /* phys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = phys.c; path = ../../../libs/vdb/phys.c; sourceTree = SOURCE_ROOT; };
+		9D7A42BB13FAEA21003087FF /* prod-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "prod-cmn.c"; path = "../../../libs/vdb/prod-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42BC13FAEA21003087FF /* prod-expr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "prod-expr.c"; path = "../../../libs/vdb/prod-expr.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42BD13FAEA21003087FF /* prod-expr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "prod-expr.h"; path = "../../../libs/vdb/prod-expr.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42BE13FAEA21003087FF /* prod-func.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "prod-func.c"; path = "../../../libs/vdb/prod-func.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42BF13FAEA21003087FF /* prod-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "prod-priv.h"; path = "../../../libs/vdb/prod-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42C013FAEA21003087FF /* prod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = prod.c; path = ../../../libs/vdb/prod.c; sourceTree = SOURCE_ROOT; };
+		9D7A42C113FAEA21003087FF /* range-validate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "range-validate.c"; path = "../../../libs/vdb/range-validate.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C213FAEA21003087FF /* redimension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = redimension.c; path = ../../../libs/vdb/redimension.c; sourceTree = SOURCE_ROOT; };
+		9D7A42C313FAEA21003087FF /* row-id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "row-id.c"; path = "../../../libs/vdb/row-id.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C413FAEA21003087FF /* row-len.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "row-len.c"; path = "../../../libs/vdb/row-len.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C513FAEA21003087FF /* schema-db.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-db.c"; path = "../../../libs/vdb/schema-db.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C613FAEA21003087FF /* schema-dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-dump.c"; path = "../../../libs/vdb/schema-dump.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C713FAEA21003087FF /* schema-dump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "schema-dump.h"; path = "../../../libs/vdb/schema-dump.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42C813FAEA21003087FF /* schema-eval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-eval.c"; path = "../../../libs/vdb/schema-eval.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42C913FAEA21003087FF /* schema-expr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-expr.c"; path = "../../../libs/vdb/schema-expr.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42CA13FAEA21003087FF /* schema-expr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "schema-expr.h"; path = "../../../libs/vdb/schema-expr.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42CB13FAEA21003087FF /* schema-func.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-func.c"; path = "../../../libs/vdb/schema-func.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42CC13FAEA21003087FF /* schema-int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-int.c"; path = "../../../libs/vdb/schema-int.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42CD13FAEA21003087FF /* schema-parse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-parse.c"; path = "../../../libs/vdb/schema-parse.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42CE13FAEA21003087FF /* schema-parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "schema-parse.h"; path = "../../../libs/vdb/schema-parse.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42CF13FAEA21003087FF /* schema-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "schema-priv.h"; path = "../../../libs/vdb/schema-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42D013FAEA21003087FF /* schema-prod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-prod.c"; path = "../../../libs/vdb/schema-prod.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D113FAEA21003087FF /* schema-tbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-tbl.c"; path = "../../../libs/vdb/schema-tbl.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D213FAEA21003087FF /* schema-tok.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-tok.c"; path = "../../../libs/vdb/schema-tok.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D313FAEA21003087FF /* schema-tok.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "schema-tok.h"; path = "../../../libs/vdb/schema-tok.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42D413FAEA21003087FF /* schema-type.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-type.c"; path = "../../../libs/vdb/schema-type.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D513FAEA21003087FF /* schema.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = schema.c; path = ../../../libs/vdb/schema.c; sourceTree = SOURCE_ROOT; };
+		9D7A42D613FAEA21003087FF /* split.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = split.c; path = ../../../libs/vdb/split.c; sourceTree = SOURCE_ROOT; };
+		9D7A42D713FAEA21003087FF /* table-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "table-cmn.c"; path = "../../../libs/vdb/table-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D813FAEA21003087FF /* table-load.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "table-load.c"; path = "../../../libs/vdb/table-load.c"; sourceTree = SOURCE_ROOT; };
+		9D7A42D913FAEA21003087FF /* table-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "table-priv.h"; path = "../../../libs/vdb/table-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A42DA13FAEA21003087FF /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = table.c; path = ../../../libs/vdb/table.c; sourceTree = SOURCE_ROOT; };
+		9D7A42DB13FAEA21003087FF /* wcolumn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolumn.c; path = ../../../libs/vdb/wcolumn.c; sourceTree = SOURCE_ROOT; };
+		9D7A42DC13FAEA21003087FF /* wcursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcursor.c; path = ../../../libs/vdb/wcursor.c; sourceTree = SOURCE_ROOT; };
+		9D7A42DD13FAEA21003087FF /* wdatabase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdatabase.c; path = ../../../libs/vdb/wdatabase.c; sourceTree = SOURCE_ROOT; };
+		9D7A42DE13FAEA21003087FF /* wdbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdbmgr.c; path = ../../../libs/vdb/wdbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D7A42DF13FAEA21003087FF /* wlinker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wlinker.c; path = ../../../libs/vdb/wlinker.c; sourceTree = SOURCE_ROOT; };
+		9D7A42E013FAEA21003087FF /* wphys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wphys.c; path = ../../../libs/vdb/wphys.c; sourceTree = SOURCE_ROOT; };
+		9D7A42E113FAEA21003087FF /* wprod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wprod.c; path = ../../../libs/vdb/wprod.c; sourceTree = SOURCE_ROOT; };
+		9D7A42E213FAEA21003087FF /* wtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wtable.c; path = ../../../libs/vdb/wtable.c; sourceTree = SOURCE_ROOT; };
+		9D7A42E313FAEA21003087FF /* xform-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "xform-priv.h"; path = "../../../libs/vdb/xform-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A431C13FAED2E003087FF /* libvdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libvdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A433713FAEE0C003087FF /* libwvdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwvdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A436013FAF1AE003087FF /* libvxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libvxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A436713FAF20D003087FF /* add-row-id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "add-row-id.c"; path = "../../../libs/vxf/add-row-id.c"; sourceTree = SOURCE_ROOT; };
+		9D7A436813FAF20D003087FF /* bit_or.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bit_or.c; path = ../../../libs/vxf/bit_or.c; sourceTree = SOURCE_ROOT; };
+		9D7A436913FAF20D003087FF /* bunzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bunzip.c; path = ../../../libs/vxf/bunzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A436A13FAF20D003087FF /* bzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bzip.c; path = ../../../libs/vxf/bzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A436B13FAF20D003087FF /* ceil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ceil.c; path = ../../../libs/vxf/ceil.c; sourceTree = SOURCE_ROOT; };
+		9D7A436C13FAF20D003087FF /* checksum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = checksum.c; path = ../../../libs/vxf/checksum.c; sourceTree = SOURCE_ROOT; };
+		9D7A436D13FAF20D003087FF /* clip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clip.c; path = ../../../libs/vxf/clip.c; sourceTree = SOURCE_ROOT; };
+		9D7A436E13FAF20D003087FF /* cut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cut.c; path = ../../../libs/vxf/cut.c; sourceTree = SOURCE_ROOT; };
+		9D7A436F13FAF20D003087FF /* delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = delta.c; path = ../../../libs/vxf/delta.c; sourceTree = SOURCE_ROOT; };
+		9D7A437013FAF20D003087FF /* deriv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = deriv.c; path = ../../../libs/vxf/deriv.c; sourceTree = SOURCE_ROOT; };
+		9D7A437113FAF20D003087FF /* diff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = diff.c; path = ../../../libs/vxf/diff.c; sourceTree = SOURCE_ROOT; };
+		9D7A437213FAF20D003087FF /* echo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = echo.c; path = ../../../libs/vxf/echo.c; sourceTree = SOURCE_ROOT; };
+		9D7A437313FAF20E003087FF /* entrez.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = entrez.c; path = ../../../libs/vxf/entrez.c; sourceTree = SOURCE_ROOT; };
+		9D7A437413FAF20E003087FF /* exists.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = exists.c; path = ../../../libs/vxf/exists.c; sourceTree = SOURCE_ROOT; };
+		9D7A437513FAF20E003087FF /* floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = floor.c; path = ../../../libs/vxf/floor.c; sourceTree = SOURCE_ROOT; };
+		9D7A437613FAF20E003087FF /* fsplit-join.impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "fsplit-join.impl.h"; path = "../../../libs/vxf/fsplit-join.impl.h"; sourceTree = SOURCE_ROOT; };
+		9D7A437713FAF20E003087FF /* funzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = funzip.c; path = ../../../libs/vxf/funzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A437813FAF20E003087FF /* fzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fzip.c; path = ../../../libs/vxf/fzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A437913FAF20E003087FF /* integral.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = integral.c; path = ../../../libs/vxf/integral.c; sourceTree = SOURCE_ROOT; };
+		9D7A437A13FAF20E003087FF /* irzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = irzip.c; path = ../../../libs/vxf/irzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A437B13FAF20E003087FF /* irzip.impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irzip.impl.h; path = ../../../libs/vxf/irzip.impl.h; sourceTree = SOURCE_ROOT; };
+		9D7A437C13FAF20E003087FF /* iunzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iunzip.c; path = ../../../libs/vxf/iunzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A437D13FAF20E003087FF /* izip-common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "izip-common.h"; path = "../../../libs/vxf/izip-common.h"; sourceTree = SOURCE_ROOT; };
+		9D7A437E13FAF20E003087FF /* izip-decode.impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "izip-decode.impl.h"; path = "../../../libs/vxf/izip-decode.impl.h"; sourceTree = SOURCE_ROOT; };
+		9D7A437F13FAF20E003087FF /* izip-encode.impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "izip-encode.impl.h"; path = "../../../libs/vxf/izip-encode.impl.h"; sourceTree = SOURCE_ROOT; };
+		9D7A438013FAF20E003087FF /* izip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = izip.c; path = ../../../libs/vxf/izip.c; sourceTree = SOURCE_ROOT; };
+		9D7A438113FAF20E003087FF /* libvxf.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvxf.vers.h; path = ../../../libs/vxf/libvxf.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A438213FAF20E003087FF /* libvxfentrez.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libvxfentrez.vers.h; path = ../../../libs/vxf/libvxfentrez.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A438313FAF20E003087FF /* map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = map.c; path = ../../../libs/vxf/map.c; sourceTree = SOURCE_ROOT; };
+		9D7A438413FAF20E003087FF /* math-funcs-impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "math-funcs-impl.h"; path = "../../../libs/vxf/math-funcs-impl.h"; sourceTree = SOURCE_ROOT; };
+		9D7A438513FAF20E003087FF /* max.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = max.c; path = ../../../libs/vxf/max.c; sourceTree = SOURCE_ROOT; };
+		9D7A438613FAF20E003087FF /* min.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = min.c; path = ../../../libs/vxf/min.c; sourceTree = SOURCE_ROOT; };
+		9D7A438713FAF20E003087FF /* outlier-decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "outlier-decoder.c"; path = "../../../libs/vxf/outlier-decoder.c"; sourceTree = SOURCE_ROOT; };
+		9D7A438813FAF20E003087FF /* outlier-encoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "outlier-encoder.c"; path = "../../../libs/vxf/outlier-encoder.c"; sourceTree = SOURCE_ROOT; };
+		9D7A438913FAF20E003087FF /* pack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pack.c; path = ../../../libs/vxf/pack.c; sourceTree = SOURCE_ROOT; };
+		9D7A438A13FAF20E003087FF /* paste.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = paste.c; path = ../../../libs/vxf/paste.c; sourceTree = SOURCE_ROOT; };
+		9D7A438B13FAF20E003087FF /* rand_4na_2na.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rand_4na_2na.c; path = ../../../libs/vxf/rand_4na_2na.c; sourceTree = SOURCE_ROOT; };
+		9D7A438C13FAF20E003087FF /* rldecode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rldecode.c; path = ../../../libs/vxf/rldecode.c; sourceTree = SOURCE_ROOT; };
+		9D7A438D13FAF20E003087FF /* rlencode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rlencode.c; path = ../../../libs/vxf/rlencode.c; sourceTree = SOURCE_ROOT; };
+		9D7A438E13FAF20E003087FF /* round.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = round.c; path = ../../../libs/vxf/round.c; sourceTree = SOURCE_ROOT; };
+		9D7A438F13FAF20E003087FF /* simple-sub-select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "simple-sub-select.c"; path = "../../../libs/vxf/simple-sub-select.c"; sourceTree = SOURCE_ROOT; };
+		9D7A439013FAF20E003087FF /* subtract-row-id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "subtract-row-id.c"; path = "../../../libs/vxf/subtract-row-id.c"; sourceTree = SOURCE_ROOT; };
+		9D7A439113FAF20E003087FF /* sum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sum.c; path = ../../../libs/vxf/sum.c; sourceTree = SOURCE_ROOT; };
+		9D7A439213FAF20E003087FF /* trim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trim.c; path = ../../../libs/vxf/trim.c; sourceTree = SOURCE_ROOT; };
+		9D7A439313FAF20E003087FF /* trunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trunc.c; path = ../../../libs/vxf/trunc.c; sourceTree = SOURCE_ROOT; };
+		9D7A439413FAF20E003087FF /* undelta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = undelta.c; path = ../../../libs/vxf/undelta.c; sourceTree = SOURCE_ROOT; };
+		9D7A439513FAF20E003087FF /* unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unpack.c; path = ../../../libs/vxf/unpack.c; sourceTree = SOURCE_ROOT; };
+		9D7A439613FAF20E003087FF /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = ../../../libs/vxf/unzip.c; sourceTree = SOURCE_ROOT; };
+		9D7A439713FAF20E003087FF /* vec-sum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "vec-sum.c"; path = "../../../libs/vxf/vec-sum.c"; sourceTree = SOURCE_ROOT; };
+		9D7A439813FAF20E003087FF /* zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zip.c; path = ../../../libs/vxf/zip.c; sourceTree = SOURCE_ROOT; };
+		9D7A43DE13FAF2EF003087FF /* bio-start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "bio-start.c"; path = "../../../libs/sraxf/bio-start.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43DF13FAF2EF003087FF /* color-from-dna.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "color-from-dna.c"; path = "../../../libs/sraxf/color-from-dna.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E013FAF2EF003087FF /* denormalize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = denormalize.c; path = ../../../libs/sraxf/denormalize.c; sourceTree = SOURCE_ROOT; };
+		9D7A43E113FAF2EF003087FF /* dna-from-color.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dna-from-color.c"; path = "../../../libs/sraxf/dna-from-color.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E213FAF2EF003087FF /* dynamic-454-read-descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dynamic-454-read-descriptor.c"; path = "../../../libs/sraxf/dynamic-454-read-descriptor.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E313FAF2EF003087FF /* extract-coordinates.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "extract-coordinates.c"; path = "../../../libs/sraxf/extract-coordinates.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E413FAF2EF003087FF /* extract-name_coord.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "extract-name_coord.c"; path = "../../../libs/sraxf/extract-name_coord.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E513FAF2EF003087FF /* extract-name_fmt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "extract-name_fmt.c"; path = "../../../libs/sraxf/extract-name_fmt.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E613FAF2EF003087FF /* extract-spot_name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "extract-spot_name.c"; path = "../../../libs/sraxf/extract-spot_name.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E713FAF2EF003087FF /* format-spot-name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "format-spot-name.c"; path = "../../../libs/sraxf/format-spot-name.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43E813FAF2EF003087FF /* fpcodec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fpcodec.c; path = ../../../libs/sraxf/fpcodec.c; sourceTree = SOURCE_ROOT; };
+		9D7A43E913FAF2EF003087FF /* index_lookup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index_lookup.c; path = ../../../libs/sraxf/index_lookup.c; sourceTree = SOURCE_ROOT; };
+		9D7A43EA13FAF2EF003087FF /* libsraxf.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libsraxf.vers.h; path = ../../../libs/sraxf/libsraxf.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A43EB13FAF2EF003087FF /* libwsraxf.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libwsraxf.vers.h; path = ../../../libs/sraxf/libwsraxf.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A43EC13FAF2EF003087FF /* make-position.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "make-position.c"; path = "../../../libs/sraxf/make-position.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43ED13FAF2EF003087FF /* name-tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "name-tokenizer.h"; path = "../../../libs/sraxf/name-tokenizer.h"; sourceTree = SOURCE_ROOT; };
+		9D7A43EE13FAF2EF003087FF /* normalize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = normalize.c; path = ../../../libs/sraxf/normalize.c; sourceTree = SOURCE_ROOT; };
+		9D7A43EF13FAF2EF003087FF /* prefix-tree-to-name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "prefix-tree-to-name.c"; path = "../../../libs/sraxf/prefix-tree-to-name.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F013FAF2EF003087FF /* process-position.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "process-position.c"; path = "../../../libs/sraxf/process-position.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F113FAF2EF003087FF /* qual4_codec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qual4_codec.h; path = ../../../libs/sraxf/qual4_codec.h; sourceTree = SOURCE_ROOT; };
+		9D7A43F213FAF2EF003087FF /* qual4_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qual4_decode.c; path = ../../../libs/sraxf/qual4_decode.c; sourceTree = SOURCE_ROOT; };
+		9D7A43F313FAF2EF003087FF /* qual4_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qual4_encode.c; path = ../../../libs/sraxf/qual4_encode.c; sourceTree = SOURCE_ROOT; };
+		9D7A43F413FAF2EF003087FF /* read-desc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "read-desc.c"; path = "../../../libs/sraxf/read-desc.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F513FAF2EF003087FF /* read-seg-from-readn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "read-seg-from-readn.c"; path = "../../../libs/sraxf/read-seg-from-readn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F613FAF2EF003087FF /* rewrite-spot-name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "rewrite-spot-name.c"; path = "../../../libs/sraxf/rewrite-spot-name.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F713FAF2EF003087FF /* rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rotate.c; path = ../../../libs/sraxf/rotate.c; sourceTree = SOURCE_ROOT; };
+		9D7A43F813FAF2EF003087FF /* spot-desc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "spot-desc.c"; path = "../../../libs/sraxf/spot-desc.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43F913FAF2EF003087FF /* stats_quality.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stats_quality.c; path = ../../../libs/sraxf/stats_quality.c; sourceTree = SOURCE_ROOT; };
+		9D7A43FA13FAF2EF003087FF /* stats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stats.c; path = ../../../libs/sraxf/stats.c; sourceTree = SOURCE_ROOT; };
+		9D7A43FB13FAF2EF003087FF /* swap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = swap.c; path = ../../../libs/sraxf/swap.c; sourceTree = SOURCE_ROOT; };
+		9D7A43FC13FAF2EF003087FF /* tokenize-spot_name-454.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tokenize-spot_name-454.c"; path = "../../../libs/sraxf/tokenize-spot_name-454.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43FD13FAF2EF003087FF /* tokenize-spot_name-abi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tokenize-spot_name-abi.c"; path = "../../../libs/sraxf/tokenize-spot_name-abi.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43FE13FAF2EF003087FF /* tokenize-spot_name-helicos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tokenize-spot_name-helicos.c"; path = "../../../libs/sraxf/tokenize-spot_name-helicos.c"; sourceTree = SOURCE_ROOT; };
+		9D7A43FF13FAF2EF003087FF /* tokenize-spot_name-illumina.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tokenize-spot_name-illumina.c"; path = "../../../libs/sraxf/tokenize-spot_name-illumina.c"; sourceTree = SOURCE_ROOT; };
+		9D7A440013FAF2EF003087FF /* tokenize-spot_name-ion-torrent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tokenize-spot_name-ion-torrent.c"; path = "../../../libs/sraxf/tokenize-spot_name-ion-torrent.c"; sourceTree = SOURCE_ROOT; };
+		9D7A440113FAF2EF003087FF /* untyped-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "untyped-priv.h"; path = "../../../libs/sraxf/untyped-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A440213FAF2EF003087FF /* untyped.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = untyped.c; path = ../../../libs/sraxf/untyped.c; sourceTree = SOURCE_ROOT; };
+		9D7A440313FAF2EF003087FF /* v0-decompress-init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "v0-decompress-init.c"; path = "../../../libs/sraxf/v0-decompress-init.c"; sourceTree = SOURCE_ROOT; };
+		9D7A440413FAF2EF003087FF /* v0-decompress-local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "v0-decompress-local.h"; path = "../../../libs/sraxf/v0-decompress-local.h"; sourceTree = SOURCE_ROOT; };
+		9D7A440513FAF2EF003087FF /* v0-decompress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "v0-decompress.c"; path = "../../../libs/sraxf/v0-decompress.c"; sourceTree = SOURCE_ROOT; };
+		9D7A440613FAF2EF003087FF /* v0-decompress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "v0-decompress.h"; path = "../../../libs/sraxf/v0-decompress.h"; sourceTree = SOURCE_ROOT; };
+		9D7A440713FAF2EF003087FF /* v0-funcs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "v0-funcs.c"; path = "../../../libs/sraxf/v0-funcs.c"; sourceTree = SOURCE_ROOT; };
+		9D7A440C13FAF315003087FF /* libsraxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libsraxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A445013FAF48E003087FF /* agrep-dp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "agrep-dp.c"; path = "../../../libs/search/agrep-dp.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445113FAF48E003087FF /* agrep-myers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "agrep-myers.c"; path = "../../../libs/search/agrep-myers.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445213FAF48E003087FF /* agrep-myersunltd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "agrep-myersunltd.c"; path = "../../../libs/search/agrep-myersunltd.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445313FAF48E003087FF /* agrep-wumanber.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "agrep-wumanber.c"; path = "../../../libs/search/agrep-wumanber.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445413FAF48E003087FF /* fgrep-aho.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "fgrep-aho.c"; path = "../../../libs/search/fgrep-aho.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445513FAF48E003087FF /* fgrep-boyermoore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "fgrep-boyermoore.c"; path = "../../../libs/search/fgrep-boyermoore.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445613FAF48E003087FF /* fgrep-dumb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "fgrep-dumb.c"; path = "../../../libs/search/fgrep-dumb.c"; sourceTree = SOURCE_ROOT; };
+		9D7A445713FAF48E003087FF /* libksrch.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libksrch.vers.h; path = ../../../libs/search/libksrch.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A445813FAF48E003087FF /* nucstrstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nucstrstr.c; path = ../../../libs/search/nucstrstr.c; sourceTree = SOURCE_ROOT; };
+		9D7A445913FAF48E003087FF /* search-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "search-priv.h"; path = "../../../libs/search/search-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A445A13FAF48E003087FF /* search.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = search.c; path = ../../../libs/search/search.c; sourceTree = SOURCE_ROOT; };
+		9D7A447613FAF539003087FF /* align-local_ref_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-local_ref_id.c"; path = "../../../libs/axf/align-local_ref_id.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447713FAF539003087FF /* align-local_ref_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-local_ref_start.c"; path = "../../../libs/axf/align-local_ref_start.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447813FAF539003087FF /* align-ref-name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-ref-name.c"; path = "../../../libs/axf/align-ref-name.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447913FAF539003087FF /* align-ref-pos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-ref-pos.c"; path = "../../../libs/axf/align-ref-pos.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447A13FAF539003087FF /* align-ref-seq-id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-ref-seq-id.c"; path = "../../../libs/axf/align-ref-seq-id.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447B13FAF539003087FF /* align-restore-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-restore-read.c"; path = "../../../libs/axf/align-restore-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447C13FAF539003087FF /* cigar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cigar.c; path = ../../../libs/axf/cigar.c; sourceTree = SOURCE_ROOT; };
+		9D7A447D13FAF539003087FF /* get-sam-flags.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "get-sam-flags.c"; path = "../../../libs/axf/get-sam-flags.c"; sourceTree = SOURCE_ROOT; };
+		9D7A447E13FAF539003087FF /* libaxf.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libaxf.vers.h; path = ../../../libs/axf/libaxf.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A447F13FAF539003087FF /* libwaxf.vers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libwaxf.vers.h; path = ../../../libs/axf/libwaxf.vers.h; sourceTree = SOURCE_ROOT; };
+		9D7A448013FAF539003087FF /* not-my-row.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "not-my-row.c"; path = "../../../libs/axf/not-my-row.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448113FAF539003087FF /* project_read_from_sequence.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = project_read_from_sequence.c; path = ../../../libs/axf/project_read_from_sequence.c; sourceTree = SOURCE_ROOT; };
+		9D7A448213FAF539003087FF /* raw-restore-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "raw-restore-read.c"; path = "../../../libs/axf/raw-restore-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448313FAF539003087FF /* ref-restore-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ref-restore-read.c"; path = "../../../libs/axf/ref-restore-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448413FAF539003087FF /* ref-tbl-sub-select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ref-tbl-sub-select.c"; path = "../../../libs/axf/ref-tbl-sub-select.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448513FAF539003087FF /* refseq-stats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "refseq-stats.c"; path = "../../../libs/axf/refseq-stats.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448613FAF539003087FF /* seq-restore-read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "seq-restore-read.c"; path = "../../../libs/axf/seq-restore-read.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448713FAF539003087FF /* template-len.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "template-len.c"; path = "../../../libs/axf/template-len.c"; sourceTree = SOURCE_ROOT; };
+		9D7A448C13FAF555003087FF /* libaxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libaxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A44AB13FB0494003087FF /* align-access.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-access.c"; path = "../../../libs/align/align-access.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44AC13FB0494003087FF /* bam-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bam-priv.h"; path = "../../../libs/align/bam-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A44AD13FB0494003087FF /* bam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bam.c; path = ../../../libs/align/bam.c; sourceTree = SOURCE_ROOT; };
+		9D7A44AE13FB0494003087FF /* reader-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "reader-cmn.c"; path = "../../../libs/align/reader-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44AF13FB0494003087FF /* reader-cmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "reader-cmn.h"; path = "../../../libs/align/reader-cmn.h"; sourceTree = SOURCE_ROOT; };
+		9D7A44B013FB0494003087FF /* reader-refseq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "reader-refseq.c"; path = "../../../libs/align/reader-refseq.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44B113FB0494003087FF /* refseq-mgr-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "refseq-mgr-priv.h"; path = "../../../libs/align/refseq-mgr-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A44B213FB0494003087FF /* refseq-mgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "refseq-mgr.c"; path = "../../../libs/align/refseq-mgr.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44B413FB0494003087FF /* writer-alignment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-alignment.c"; path = "../../../libs/align/writer-alignment.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44B513FB0494003087FF /* writer-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-cmn.c"; path = "../../../libs/align/writer-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44B613FB0494003087FF /* writer-priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-priv.h"; path = "../../../libs/align/writer-priv.h"; sourceTree = SOURCE_ROOT; };
+		9D7A44B713FB0494003087FF /* writer-ref.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-ref.c"; path = "../../../libs/align/writer-ref.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44B813FB0494003087FF /* writer-ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "writer-ref.h"; path = "../../../libs/align/writer-ref.h"; sourceTree = SOURCE_ROOT; };
+		9D7A44B913FB0494003087FF /* writer-reference.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-reference.c"; path = "../../../libs/align/writer-reference.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44BA13FB0494003087FF /* writer-refseq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-refseq.c"; path = "../../../libs/align/writer-refseq.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44BB13FB0494003087FF /* writer-sequence.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "writer-sequence.c"; path = "../../../libs/align/writer-sequence.c"; sourceTree = SOURCE_ROOT; };
+		9D7A44C013FB04A9003087FF /* libalign.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libalign.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A452F13FB0A3C003087FF /* libwvxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwvxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A454B13FB0B4D003087FF /* libwsraxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwsraxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A45C713FB0CB8003087FF /* libwaxf.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwaxf.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A45E713FB0D50003087FF /* libwalign.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwalign.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A460213FB0F0F003087FF /* progressbar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = progressbar.c; path = ../../../libs/kapp/progressbar.c; sourceTree = SOURCE_ROOT; };
+		9D7A460713FB0F36003087FF /* libkapp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libkapp.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A461013FB1128003087FF /* deseq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = deseq.c; path = ../../../tools/deseq/deseq.c; sourceTree = SOURCE_ROOT; };
+		9D7A461413FB1133003087FF /* deseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = deseq; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D7A469113FB1FC5003087FF /* align.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = align.vschema; path = ../../../interfaces/align/align.vschema; sourceTree = SOURCE_ROOT; };
+		9D7A469213FB1FC5003087FF /* refseq.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = refseq.vschema; path = ../../../interfaces/align/refseq.vschema; sourceTree = SOURCE_ROOT; };
+		9D7A469313FB1FC5003087FF /* seq.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = seq.vschema; path = ../../../interfaces/align/seq.vschema; sourceTree = SOURCE_ROOT; };
+		9D8198A811D3D39700DA4D3C /* vector_namelist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vector_namelist.c; path = ../../../libs/klib/vector_namelist.c; sourceTree = SOURCE_ROOT; };
+		9D8204F7130F1100009A8B64 /* pagefile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pagefile.c; path = ../../../libs/kfs/pagefile.c; sourceTree = SOURCE_ROOT; };
+		9D8EC40E11C2E20A000F1048 /* pbstree-impl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "pbstree-impl.c"; path = "../../../libs/klib/pbstree-impl.c"; sourceTree = SOURCE_ROOT; };
+		9D8EC41911C2E49E000F1048 /* pbstree-native.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "pbstree-native.c"; path = "../../../libs/klib/pbstree-native.c"; sourceTree = SOURCE_ROOT; };
+		9D8EC41A11C2E49E000F1048 /* pbstree-swapped.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "pbstree-swapped.c"; path = "../../../libs/klib/pbstree-swapped.c"; sourceTree = SOURCE_ROOT; };
+		9D985E8C12886C6100849729 /* config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = config.c; path = ../../../libs/kfg/config.c; sourceTree = SOURCE_ROOT; };
+		9D985FCB1288BA8700849729 /* config.mac.kfg */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; name = config.mac.kfg; path = ../../../libs/kfg/config.mac.kfg; sourceTree = SOURCE_ROOT; };
+		9DA3A84D125FA3A8005AD5BB /* refcount.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = refcount.c; path = ../../../libs/klib/refcount.c; sourceTree = SOURCE_ROOT; };
+		9DA3A865125FBB21005AD5BB /* abi.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = abi.vschema; path = ../../../interfaces/sra/abi.vschema; sourceTree = SOURCE_ROOT; };
+		9DA3A866125FBB34005AD5BB /* illumina.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = illumina.vschema; path = ../../../interfaces/sra/illumina.vschema; sourceTree = SOURCE_ROOT; };
+		9DA3A867125FBBBA005AD5BB /* seq.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = seq.vschema; path = ../../../interfaces/ncbi/seq.vschema; sourceTree = SOURCE_ROOT; };
+		9DA3A868125FBBF0005AD5BB /* sra.vschema */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = sra.vschema; path = ../../../interfaces/ncbi/sra.vschema; sourceTree = SOURCE_ROOT; };
+		9DA3A88412663646005AD5BB /* syswriter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syswriter.c; path = ../../../libs/klib/unix/syswriter.c; sourceTree = SOURCE_ROOT; };
+		9DA3A8951266375B005AD5BB /* writer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = writer.c; path = ../../../libs/klib/writer.c; sourceTree = SOURCE_ROOT; };
+		9DA3A89912663798005AD5BB /* out.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = out.c; path = ../../../libs/klib/out.c; sourceTree = SOURCE_ROOT; };
+		9DB6A77911E61CB700168DE0 /* args.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = args.c; path = ../../../libs/kapp/args.c; sourceTree = SOURCE_ROOT; };
+		9DE55A78140EA19500EA61C6 /* raw-restore-qual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "raw-restore-qual.c"; path = "../../../libs/axf/raw-restore-qual.c"; sourceTree = SOURCE_ROOT; };
+		9DE55A84140EA93600EA61C6 /* generate-mismatch-qual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "generate-mismatch-qual.c"; path = "../../../libs/axf/generate-mismatch-qual.c"; sourceTree = SOURCE_ROOT; };
+		9DE55AAE140EC79C00EA61C6 /* mismatch-restore-qual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "mismatch-restore-qual.c"; path = "../../../libs/axf/mismatch-restore-qual.c"; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		9D31EC97117667FA003CDA5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9DFECDE6117669DD004EFD0D /* libz.dylib in Frameworks */,
+				9DFECDE7117669E0004EFD0D /* libbz2.dylib in Frameworks */,
+				9DFECDE8117669E0004EFD0D /* libxml2.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A412C13FADF3A003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A415A13FAE00E003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A417613FAE192003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A423213FAE3F5003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A423913FAE40C003087FF /* libkdb-cmn.a in Frameworks */,
+				9D7A426113FAE67B003087FF /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A426613FAE69A003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A426B13FAE6A5003087FF /* libkdb-cmn.a in Frameworks */,
+				9D7A426C13FAE6A7003087FF /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A428713FAE9B5003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A431A13FAED2E003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A432913FAEDCC003087FF /* libvdb-cmn.a in Frameworks */,
+				9D7A432A13FAEDD9003087FF /* libkdb.dylib in Frameworks */,
+				9D7A432D13FAEDE5003087FF /* libklib.dylib in Frameworks */,
+				9D7A433013FAEDF6003087FF /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A433513FAEE0C003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A435113FAEF00003087FF /* libwkdb.dylib in Frameworks */,
+				9D7A435213FAEF06003087FF /* libvdb-cmn.a in Frameworks */,
+				9D7A435313FAEF0E003087FF /* libklib.dylib in Frameworks */,
+				9D7A435613FAEF1F003087FF /* libkmproc.a in Frameworks */,
+				9D7A435913FAEF26003087FF /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A435E13FAF1AE003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A43CD13FAF23A003087FF /* libvdb.dylib in Frameworks */,
+				9D7A43D013FAF245003087FF /* libz.dylib in Frameworks */,
+				9D7A43D613FAF257003087FF /* libklib.dylib in Frameworks */,
+				9D7A43DB13FAF274003087FF /* libbz2.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A440A13FAF315003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A444313FAF3F6003087FF /* libklib.dylib in Frameworks */,
+				9D7A444613FAF402003087FF /* libvdb.dylib in Frameworks */,
+				9D7A444913FAF411003087FF /* libz.dylib in Frameworks */,
+				9D7A444C13FAF41C003087FF /* libkdb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A448A13FAF555003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A44A313FAF59D003087FF /* libklib.dylib in Frameworks */,
+				9D7A44A613FAF5A9003087FF /* libvdb.dylib in Frameworks */,
+				9D7A44DC13FB0537003087FF /* libalign.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A44BE13FB04A9003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A44D013FB04D8003087FF /* libklib.dylib in Frameworks */,
+				9D7A44D113FB04DC003087FF /* libvdb.dylib in Frameworks */,
+				9D7A44D413FB04EF003087FF /* libz.dylib in Frameworks */,
+				9D7A44D913FB051B003087FF /* libkdb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A452D13FB0A3C003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A453D13FB0AB1003087FF /* libz.dylib in Frameworks */,
+				9D7A453E13FB0AB2003087FF /* libbz2.dylib in Frameworks */,
+				9D7A454113FB0AC9003087FF /* libwvdb.dylib in Frameworks */,
+				9D7A454213FB0ACF003087FF /* libwkdb.dylib in Frameworks */,
+				9D7A454313FB0AD5003087FF /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A454913FB0B4D003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A455513FB0B86003087FF /* libwvdb.dylib in Frameworks */,
+				9D7A455613FB0B8B003087FF /* libwkdb.dylib in Frameworks */,
+				9D7A455713FB0B91003087FF /* libklib.dylib in Frameworks */,
+				9D7A457D13FB0C28003087FF /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45C013FB0CB8003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A45C113FB0CB8003087FF /* libklib.dylib in Frameworks */,
+				9D7A45C313FB0CB8003087FF /* libalign.dylib in Frameworks */,
+				9D7A45CB13FB0D18003087FF /* libwvdb.dylib in Frameworks */,
+				9D7A45CE13FB0D24003087FF /* libwkdb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45DF13FB0D50003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A45E013FB0D50003087FF /* libklib.dylib in Frameworks */,
+				9D7A45E213FB0D50003087FF /* libz.dylib in Frameworks */,
+				9D7A45E813FB0D72003087FF /* libwvdb.dylib in Frameworks */,
+				9D7A45E913FB0D76003087FF /* libwkdb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A460513FB0F36003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A461213FB1133003087FF /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A461913FB114C003087FF /* libkapp.a in Frameworks */,
+				9D7A463B13FB135F003087FF /* libklib.dylib in Frameworks */,
+				9D90F4DB140D8229004A99D6 /* libwvdb.dylib in Frameworks */,
+				9DE559C6140E831000EA61C6 /* libwaxf.dylib in Frameworks */,
+				9DE559C7140E831800EA61C6 /* libwvxf.dylib in Frameworks */,
+				9DE559C8140E831C00EA61C6 /* libwsraxf.dylib in Frameworks */,
+				9DE55AFC140EF0B100EA61C6 /* libwkdb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* asm-trace */ = {
+			isa = PBXGroup;
+			children = (
+				9DB6A8D411EB9F2100168DE0 /* interfaces */,
+				9D819B3411DB9D5200DA4D3C /* Tools */,
+				9D8EC47011C2F081000F1048 /* Tests */,
+				9D7356C111775493009EA3E4 /* schema */,
+				9D31EC8B11766778003CDA5E /* External Libraries */,
+				9D31EAAD1176621D003CDA5E /* Libs */,
+				9D7356E611775CB7009EA3E4 /* Products */,
+			);
+			name = "asm-trace";
+			sourceTree = "<group>";
+		};
+		9D31EAAD1176621D003CDA5E /* Libs */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A44AA13FB0466003087FF /* align */,
+				9D7A444F13FAF455003087FF /* search */,
+				9D7A436613FAF1C2003087FF /* axf */,
+				9D7A436513FAF1BC003087FF /* sraxf */,
+				9D7A436313FAF1B4003087FF /* vxf */,
+				9D7A428C13FAE9C4003087FF /* vdb */,
+				9D7A417B13FAE1A2003087FF /* kdb */,
+				9D31EAB01176623F003CDA5E /* kapp */,
+				9D985E8B12886C3A00849729 /* kfg */,
+				9D31EADD117662CE003CDA5E /* kfs */,
+				9D31EAFB1176632C003CDA5E /* klib */,
+				9D31EB1A11766387003CDA5E /* kproc */,
+				9D31EB2F117663FA003CDA5E /* kxml */,
+			);
+			name = Libs;
+			sourceTree = "<group>";
+		};
+		9D31EAB01176623F003CDA5E /* kapp */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A460213FB0F0F003087FF /* progressbar.c */,
+				9DB6A77911E61CB700168DE0 /* args.c */,
+				9D31EAB71176626A003CDA5E /* sysmain.c */,
+				9D31EAB311766257003CDA5E /* main.c */,
+			);
+			name = kapp;
+			sourceTree = "<group>";
+		};
+		9D31EADD117662CE003CDA5E /* kfs */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A411213FADD33003087FF /* sysdir-priv.h */,
+				9D7A411313FADD33003087FF /* sysfile-priv.h */,
+				9D7A411413FADD33003087FF /* sysmmap-priv.h */,
+				9D7A40ED13FADCFE003087FF /* arrayfile.c */,
+				9D7A40EE13FADCFE003087FF /* buffile-write.c */,
+				9D7A40EF13FADCFE003087FF /* fileformat-priv.h */,
+				9D7A40F013FADCFE003087FF /* impl.h */,
+				9D7A40F113FADCFE003087FF /* karc-priv.h */,
+				9D7A40F213FADCFE003087FF /* kfs-priv.h */,
+				9D7A40F313FADCFE003087FF /* manager.c */,
+				9D7A40F413FADCFE003087FF /* mmap-priv.h */,
+				9D7A40F513FADCFE003087FF /* mmap.c */,
+				9D7A40F613FADCFE003087FF /* path-priv.h */,
+				9D7A40F713FADCFE003087FF /* path.c */,
+				9D7A40F813FADCFE003087FF /* pmem.c */,
+				9D7A40F913FADCFE003087FF /* szip.c */,
+				9D7A40FA13FADCFE003087FF /* toc-priv.h */,
+				9D8204F7130F1100009A8B64 /* pagefile.c */,
+				9D31EAF71176631D003CDA5E /* sysdir.c */,
+				9D31EAF81176631D003CDA5E /* sysdll.c */,
+				9D31EAF91176631D003CDA5E /* sysfile.c */,
+				9D31EAFA1176631D003CDA5E /* sysmmap.c */,
+				9D31EAE011766306003CDA5E /* arc.c */,
+				9D31EAE111766306003CDA5E /* buffile.c */,
+				9D31EAE211766306003CDA5E /* bzip.c */,
+				9D31EAE311766306003CDA5E /* countfile.c */,
+				9D31EAE411766306003CDA5E /* crc32.c */,
+				9D31EAE511766306003CDA5E /* dir_test.c */,
+				9D31EAE611766306003CDA5E /* directory.c */,
+				9D31EAE711766306003CDA5E /* ffext.c */,
+				9D31EAE811766306003CDA5E /* ffkey.c */,
+				9D31EAE911766306003CDA5E /* ffmagic.c */,
+				9D31EAEA11766306003CDA5E /* file.c */,
+				9D31EAEB11766306003CDA5E /* fileformat.c */,
+				9D31EAEC11766306003CDA5E /* gzip.c */,
+				9D31EAED11766306003CDA5E /* md5.c */,
+				9D31EAEE11766306003CDA5E /* nullfile.c */,
+				9D31EAEF11766306003CDA5E /* sra.c */,
+				9D31EAF011766306003CDA5E /* subfile.c */,
+				9D31EAF111766306003CDA5E /* tar.c */,
+				9D31EAF211766306003CDA5E /* teefile.c */,
+				9D31EAF311766306003CDA5E /* toc.c */,
+				9D31EAF411766306003CDA5E /* tocdir.c */,
+				9D31EAF511766306003CDA5E /* tocentry.c */,
+				9D31EAF611766306003CDA5E /* tocfile.c */,
+			);
+			name = kfs;
+			sourceTree = "<group>";
+		};
+		9D31EAFB1176632C003CDA5E /* klib */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A40E813FADC66003087FF /* writer-priv.h */,
+				9D7A40DF13FADBEE003087FF /* syserrcode.c */,
+				9D7A40E013FADBEE003087FF /* systime.c */,
+				9D7A40D913FADBA3003087FF /* SHA-32bit.c */,
+				9D7A40DA13FADBA3003087FF /* SHA-64bit.c */,
+				9DA3A89912663798005AD5BB /* out.c */,
+				9DA3A8951266375B005AD5BB /* writer.c */,
+				9DA3A88412663646005AD5BB /* syswriter.c */,
+				9DA3A84D125FA3A8005AD5BB /* refcount.c */,
+				9D62F428124D01AE003D38E9 /* bsearch.c */,
+				9D62F429124D01AE003D38E9 /* qsort.c */,
+				9D1EC47F122D914C00C11287 /* printf.c */,
+				9D1EC480122D914C00C11287 /* status-rc-strings.c */,
+				9D1EC481122D914C00C11287 /* status-rc.c */,
+				9D1EC482122D914C00C11287 /* status.c */,
+				9D1EC47B122D912500C11287 /* debug.c */,
+				9D8198A811D3D39700DA4D3C /* vector_namelist.c */,
+				9D8EC41911C2E49E000F1048 /* pbstree-native.c */,
+				9D8EC41A11C2E49E000F1048 /* pbstree-swapped.c */,
+				9D8EC40E11C2E20A000F1048 /* pbstree-impl.c */,
+				9D31EB191176637A003CDA5E /* syslog.c */,
+				9D31EAFE11766366003CDA5E /* bstpersist.c */,
+				9D31EAFF11766366003CDA5E /* container.c */,
+				9D31EB0011766366003CDA5E /* cp1252.c */,
+				9D31EB0111766366003CDA5E /* crc32.c */,
+				9D31EB0211766366003CDA5E /* data-buffer.c */,
+				9D31EB0311766366003CDA5E /* iso8859-1.c */,
+				9D31EB0411766366003CDA5E /* iso8859.c */,
+				9D31EB0511766366003CDA5E /* log.c */,
+				9D31EB0611766366003CDA5E /* md5.c */,
+				9D31EB0711766366003CDA5E /* namelist.c */,
+				9D31EB0811766366003CDA5E /* pack.c */,
+				9D31EB0911766366003CDA5E /* pbstree.c */,
+				9D31EB0A11766366003CDA5E /* ptpersist.c */,
+				9D31EB0B11766366003CDA5E /* ptrie.c */,
+				9D31EB0C11766366003CDA5E /* rc-idx-tbl.c */,
+				9D31EB0D11766366003CDA5E /* rc-tbl.c */,
+				9D31EB0E11766366003CDA5E /* symtab.c */,
+				9D31EB1011766366003CDA5E /* text.c */,
+				9D31EB1111766366003CDA5E /* token.c */,
+				9D31EB1211766366003CDA5E /* trie.c */,
+				9D31EB1311766366003CDA5E /* trieval.c */,
+				9D31EB1411766366003CDA5E /* unpack.c */,
+				9D31EB1511766366003CDA5E /* utf8.c */,
+				9D31EB1611766366003CDA5E /* vector.c */,
+				9D31EB1711766366003CDA5E /* vlen-encode.c */,
+			);
+			name = klib;
+			sourceTree = "<group>";
+		};
+		9D31EB1A11766387003CDA5E /* kproc */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A414A13FADFC6003087FF /* bsd */,
+				9D7A414D13FADFC6003087FF /* queue.c */,
+				9D7A414E13FADFC6003087FF /* sem.c */,
+				9D7A414813FADFA1003087FF /* syscond-priv.h */,
+				9D31EB2E117663D4003CDA5E /* syslock.c */,
+				9D31EB2B117663C6003CDA5E /* syscond.c */,
+				9D31EB2C117663C6003CDA5E /* systhread.c */,
+				9D31EB2D117663C6003CDA5E /* systimeout.c */,
+				9D31EB1D117663AB003CDA5E /* stbarrier.c */,
+				9D31EB1E117663AB003CDA5E /* stcond.c */,
+				9D31EB1F117663AB003CDA5E /* stlock.c */,
+				9D31EB20117663AB003CDA5E /* stsem.c */,
+				9D31EB21117663AB003CDA5E /* stthread.c */,
+				9D31EB22117663AB003CDA5E /* sttimeout.c */,
+			);
+			name = kproc;
+			sourceTree = "<group>";
+		};
+		9D31EB2F117663FA003CDA5E /* kxml */ = {
+			isa = PBXGroup;
+			children = (
+				9D31EB3011766409003CDA5E /* xml.c */,
+			);
+			name = kxml;
+			sourceTree = "<group>";
+		};
+		9D31EC8B11766778003CDA5E /* External Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				9D31EC8C117667C6003CDA5E /* libbz2.dylib */,
+				9D31EC8E117667C6003CDA5E /* libxml2.dylib */,
+				9D31EC90117667C6003CDA5E /* libz.dylib */,
+			);
+			name = "External Libraries";
+			sourceTree = "<group>";
+		};
+		9D6FFB2F145094B000952EB7 /* align */ = {
+			isa = PBXGroup;
+			children = (
+				9D6FFB31145094DB00952EB7 /* align-access.h */,
+				9D6FFB32145094DB00952EB7 /* alignarc.h */,
+				9D6FFB33145094DB00952EB7 /* alignsrc.h */,
+				9D6FFB34145094DB00952EB7 /* extern.h */,
+				9D6FFB35145094DB00952EB7 /* reader-refseq.h */,
+				9D6FFB36145094DB00952EB7 /* refseq-mgr.h */,
+				9D6FFB37145094DB00952EB7 /* writer-alignment.h */,
+				9D6FFB38145094DB00952EB7 /* writer-cmn.h */,
+				9D6FFB39145094DB00952EB7 /* writer-reference.h */,
+				9D6FFB3A145094DB00952EB7 /* writer-refseq.h */,
+				9D6FFB3B145094DB00952EB7 /* writer-sequence.h */,
+			);
+			name = align;
+			sourceTree = "<group>";
+		};
+		9D7356C111775493009EA3E4 /* schema */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A469013FB1FAC003087FF /* align */,
+				9D7356C91177559D009EA3E4 /* insdc */,
+				9D7356C611775557009EA3E4 /* ncbi */,
+				9D7356CD117755D8009EA3E4 /* sra */,
+				9D7356C311775515009EA3E4 /* vdb */,
+			);
+			name = schema;
+			sourceTree = "<group>";
+		};
+		9D7356C311775515009EA3E4 /* vdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D7356C41177554A009EA3E4 /* built-in.vschema */,
+				9D7356C51177554A009EA3E4 /* vdb.vschema */,
+			);
+			name = vdb;
+			sourceTree = "<group>";
+		};
+		9D7356C611775557009EA3E4 /* ncbi */ = {
+			isa = PBXGroup;
+			children = (
+				9DA3A868125FBBF0005AD5BB /* sra.vschema */,
+				9DA3A867125FBBBA005AD5BB /* seq.vschema */,
+				9D7356C71177556A009EA3E4 /* ncbi.vschema */,
+				9D7356C81177556A009EA3E4 /* spotname.vschema */,
+			);
+			name = ncbi;
+			sourceTree = "<group>";
+		};
+		9D7356C91177559D009EA3E4 /* insdc */ = {
+			isa = PBXGroup;
+			children = (
+				9D7356CA117755B4009EA3E4 /* insdc.vschema */,
+				9D7356CB117755B4009EA3E4 /* seq.vschema */,
+				9D7356CC117755B4009EA3E4 /* sra.vschema */,
+			);
+			name = insdc;
+			sourceTree = "<group>";
+		};
+		9D7356CD117755D8009EA3E4 /* sra */ = {
+			isa = PBXGroup;
+			children = (
+				9DA3A866125FBB34005AD5BB /* illumina.vschema */,
+				9DA3A865125FBB21005AD5BB /* abi.vschema */,
+				9D7356CE117755F4009EA3E4 /* 454.vschema */,
+				9D7356CF117755F4009EA3E4 /* pevents.vschema */,
+			);
+			name = sra;
+			sourceTree = "<group>";
+		};
+		9D7356E611775CB7009EA3E4 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				9D31EC99117667FA003CDA5E /* libklib.dylib */,
+				9D7A412E13FADF3A003087FF /* libksproc.a */,
+				9D7A415C13FAE00E003087FF /* libkmproc.a */,
+				9D7A417813FAE192003087FF /* libkdb-cmn.a */,
+				9D7A423413FAE3F5003087FF /* libkdb.dylib */,
+				9D7A426813FAE69A003087FF /* libwkdb.dylib */,
+				9D7A428913FAE9B5003087FF /* libvdb-cmn.a */,
+				9D7A431C13FAED2E003087FF /* libvdb.dylib */,
+				9D7A433713FAEE0C003087FF /* libwvdb.dylib */,
+				9D7A436013FAF1AE003087FF /* libvxf.dylib */,
+				9D7A440C13FAF315003087FF /* libsraxf.dylib */,
+				9D7A448C13FAF555003087FF /* libaxf.dylib */,
+				9D7A44C013FB04A9003087FF /* libalign.dylib */,
+				9D7A452F13FB0A3C003087FF /* libwvxf.dylib */,
+				9D7A454B13FB0B4D003087FF /* libwsraxf.dylib */,
+				9D7A45C713FB0CB8003087FF /* libwaxf.dylib */,
+				9D7A45E713FB0D50003087FF /* libwalign.dylib */,
+				9D7A460713FB0F36003087FF /* libkapp.a */,
+				9D7A461413FB1133003087FF /* deseq */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		9D7A414A13FADFC6003087FF /* bsd */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A414B13FADFC6003087FF /* syslock-priv.h */,
+				9D7A414C13FADFC6003087FF /* syslock.c */,
+			);
+			name = bsd;
+			path = ../../../libs/kproc/bsd;
+			sourceTree = SOURCE_ROOT;
+		};
+		9D7A417B13FAE1A2003087FF /* kdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A417D13FAE1DA003087FF /* btree.c */,
+				9D7A417E13FAE1DA003087FF /* cc-priv.h */,
+				9D7A417F13FAE1DA003087FF /* coldata-priv.h */,
+				9D7A418013FAE1DA003087FF /* coldata.c */,
+				9D7A418113FAE1DA003087FF /* colfmt-priv.h */,
+				9D7A418213FAE1DA003087FF /* colidx-priv.h */,
+				9D7A418313FAE1DA003087FF /* colidx.c */,
+				9D7A418413FAE1DA003087FF /* colidx0-priv.h */,
+				9D7A418513FAE1DA003087FF /* colidx0.c */,
+				9D7A418613FAE1DA003087FF /* colidx1-priv.h */,
+				9D7A418713FAE1DA003087FF /* colidx1.c */,
+				9D7A418813FAE1DA003087FF /* colidx2-priv.h */,
+				9D7A418913FAE1DA003087FF /* colidx2.c */,
+				9D7A418A13FAE1DA003087FF /* column-cc.c */,
+				9D7A418B13FAE1DA003087FF /* column-priv.h */,
+				9D7A418C13FAE1DA003087FF /* column.c */,
+				9D7A418D13FAE1DA003087FF /* database-cc.c */,
+				9D7A418E13FAE1DA003087FF /* database-cmn.c */,
+				9D7A418F13FAE1DA003087FF /* database-priv.h */,
+				9D7A419013FAE1DA003087FF /* database.c */,
+				9D7A419113FAE1DA003087FF /* dbcc-cmn.c */,
+				9D7A419213FAE1DA003087FF /* dbmgr-cmn.c */,
+				9D7A419313FAE1DA003087FF /* dbmgr-priv.h */,
+				9D7A419413FAE1DA003087FF /* dbmgr.c */,
+				9D7A419513FAE1DA003087FF /* idstats-priv.h */,
+				9D7A419613FAE1DA003087FF /* idstats.c */,
+				9D7A419713FAE1DA003087FF /* idxblk-priv.h */,
+				9D7A419813FAE1DA003087FF /* idxblk.c */,
+				9D7A419913FAE1DA003087FF /* index-cmn.h */,
+				9D7A419A13FAE1DA003087FF /* index-priv.h */,
+				9D7A419B13FAE1DA003087FF /* index.c */,
+				9D7A419C13FAE1DA003087FF /* kdb-priv.h */,
+				9D7A419D13FAE1DA003087FF /* kdb.c */,
+				9D7A419E13FAE1DA003087FF /* kdbfmt-priv.h */,
+				9D7A419F13FAE1DA003087FF /* libkdb.vers.h */,
+				9D7A41A013FAE1DA003087FF /* libwkdb.vers.h */,
+				9D7A41A113FAE1DA003087FF /* meta.c */,
+				9D7A41A213FAE1DA003087FF /* ptrieval-v1.c */,
+				9D7A41A313FAE1DA003087FF /* ptrieval-v2.c */,
+				9D7A41A413FAE1DA003087FF /* table-cc.c */,
+				9D7A41A513FAE1DA003087FF /* table-priv.h */,
+				9D7A41A613FAE1DA003087FF /* table.c */,
+				9D7A41A713FAE1DA003087FF /* trieidx-priv.h */,
+				9D7A41A813FAE1DA003087FF /* trieidx-v1.c */,
+				9D7A41A913FAE1DA003087FF /* trieidx-v2.c */,
+				9D7A41AA13FAE1DA003087FF /* trieval-v1.c */,
+				9D7A41AB13FAE1DA003087FF /* trieval-v2.c */,
+				9D7A41AC13FAE1DA003087FF /* u64idx-v3.c */,
+				9D7A41AD13FAE1DA003087FF /* wcoldata-priv.h */,
+				9D7A41AE13FAE1DA003087FF /* wcoldata.c */,
+				9D7A41AF13FAE1DA003087FF /* wcolidx-priv.h */,
+				9D7A41B013FAE1DA003087FF /* wcolidx.c */,
+				9D7A41B113FAE1DA003087FF /* wcolidx0-priv.h */,
+				9D7A41B213FAE1DA003087FF /* wcolidx0.c */,
+				9D7A41B313FAE1DA003087FF /* wcolidx1-priv.h */,
+				9D7A41B413FAE1DA003087FF /* wcolidx1.c */,
+				9D7A41B513FAE1DA003087FF /* wcolidx2-priv.h */,
+				9D7A41B613FAE1DA003087FF /* wcolidx2.c */,
+				9D7A41B713FAE1DA003087FF /* wcolumn-priv.h */,
+				9D7A41B813FAE1DA003087FF /* wcolumn.c */,
+				9D7A41B913FAE1DA003087FF /* wdatabase-priv.h */,
+				9D7A41BA13FAE1DA003087FF /* wdatabase.c */,
+				9D7A41BB13FAE1DA003087FF /* wdbmgr.c */,
+				9D7A41BC13FAE1DA003087FF /* werror-priv.h */,
+				9D7A41BD13FAE1DA003087FF /* widxblk-priv.h */,
+				9D7A41BE13FAE1DA003087FF /* widxblk.c */,
+				9D7A41BF13FAE1DA003087FF /* windex-priv.h */,
+				9D7A41C013FAE1DA003087FF /* windex.c */,
+				9D7A41C113FAE1DA003087FF /* wkdb-priv.h */,
+				9D7A41C213FAE1DA003087FF /* wkdb.c */,
+				9D7A41C313FAE1DA003087FF /* wmeta.c */,
+				9D7A41C413FAE1DA003087FF /* wtable-priv.h */,
+				9D7A41C513FAE1DA003087FF /* wtable.c */,
+				9D7A41C613FAE1DA003087FF /* wtrieidx-v1.c */,
+				9D7A41C713FAE1DA003087FF /* wtrieidx-v2.c */,
+				9D7A41C813FAE1DA003087FF /* wu64idx-v3.c */,
+			);
+			name = kdb;
+			sourceTree = "<group>";
+		};
+		9D7A428C13FAE9C4003087FF /* vdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A430F13FAEC61003087FF /* built-in */,
+				9D7A432813FAED99003087FF /* read-only */,
+				9D7A441313FAF394003087FF /* common */,
+				9D7A441213FAF37A003087FF /* write */,
+			);
+			name = vdb;
+			sourceTree = "<group>";
+		};
+		9D7A430F13FAEC61003087FF /* built-in */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A42A413FAEA20003087FF /* index_insert.c */,
+				9D7A42AE13FAEA21003087FF /* meta-append.c */,
+				9D7A42B013FAEA21003087FF /* meta-attr-write.c */,
+				9D7A42B313FAEA21003087FF /* meta-write.c */,
+				9D7A429313FAEA20003087FF /* cast.c */,
+				9D7A429713FAEA20003087FF /* compare.c */,
+				9D7A42A213FAEA20003087FF /* environment-read.c */,
+				9D7A42A313FAEA20003087FF /* fixed-row-len.c */,
+				9D7A42A513FAEA20003087FF /* index_lookup.c */,
+				9D7A42A613FAEA20003087FF /* index_project.c */,
+				9D7A42AD13FAEA21003087FF /* merge.c */,
+				9D7A42AF13FAEA21003087FF /* meta-attr-read.c */,
+				9D7A42B113FAEA21003087FF /* meta-read.c */,
+				9D7A42B213FAEA21003087FF /* meta-value.c */,
+				9D7A42B613FAEA21003087FF /* parameter-read.c */,
+				9D7A42C113FAEA21003087FF /* range-validate.c */,
+				9D7A42C213FAEA21003087FF /* redimension.c */,
+				9D7A42C313FAEA21003087FF /* row-id.c */,
+				9D7A42C413FAEA21003087FF /* row-len.c */,
+				9D7A42D613FAEA21003087FF /* split.c */,
+			);
+			name = "built-in";
+			sourceTree = "<group>";
+		};
+		9D7A432813FAED99003087FF /* read-only */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A429613FAEA20003087FF /* column.c */,
+				9D7A429A13FAEA20003087FF /* cursor.c */,
+				9D7A429E13FAEA20003087FF /* database.c */,
+				9D7A42A113FAEA20003087FF /* dbmgr.c */,
+				9D7A42AC13FAEA21003087FF /* linker.c */,
+				9D7A42BA13FAEA21003087FF /* phys.c */,
+				9D7A42C013FAEA21003087FF /* prod.c */,
+				9D7A42DA13FAEA21003087FF /* table.c */,
+			);
+			name = "read-only";
+			sourceTree = "<group>";
+		};
+		9D7A436313FAF1B4003087FF /* vxf */ = {
+			isa = PBXGroup;
+			children = (
+				9D320AD5142D0E3F00ACA5AA /* Makefile */,
+				9D320AAE142D02B000ACA5AA /* extract_token.c */,
+				9D320AAF142D02B000ACA5AA /* strtonum.c */,
+				9D7A436713FAF20D003087FF /* add-row-id.c */,
+				9D7A436813FAF20D003087FF /* bit_or.c */,
+				9D7A436913FAF20D003087FF /* bunzip.c */,
+				9D7A436A13FAF20D003087FF /* bzip.c */,
+				9D7A436B13FAF20D003087FF /* ceil.c */,
+				9D7A436C13FAF20D003087FF /* checksum.c */,
+				9D7A436D13FAF20D003087FF /* clip.c */,
+				9D7A436E13FAF20D003087FF /* cut.c */,
+				9D7A436F13FAF20D003087FF /* delta.c */,
+				9D7A437013FAF20D003087FF /* deriv.c */,
+				9D7A437113FAF20D003087FF /* diff.c */,
+				9D7A437213FAF20D003087FF /* echo.c */,
+				9D7A437313FAF20E003087FF /* entrez.c */,
+				9D7A437413FAF20E003087FF /* exists.c */,
+				9D7A437513FAF20E003087FF /* floor.c */,
+				9D7A437613FAF20E003087FF /* fsplit-join.impl.h */,
+				9D7A437713FAF20E003087FF /* funzip.c */,
+				9D7A437813FAF20E003087FF /* fzip.c */,
+				9D7A437913FAF20E003087FF /* integral.c */,
+				9D7A437A13FAF20E003087FF /* irzip.c */,
+				9D7A437B13FAF20E003087FF /* irzip.impl.h */,
+				9D7A437C13FAF20E003087FF /* iunzip.c */,
+				9D7A437D13FAF20E003087FF /* izip-common.h */,
+				9D7A437E13FAF20E003087FF /* izip-decode.impl.h */,
+				9D7A437F13FAF20E003087FF /* izip-encode.impl.h */,
+				9D7A438013FAF20E003087FF /* izip.c */,
+				9D7A438113FAF20E003087FF /* libvxf.vers.h */,
+				9D7A438213FAF20E003087FF /* libvxfentrez.vers.h */,
+				9D7A438313FAF20E003087FF /* map.c */,
+				9D7A438413FAF20E003087FF /* math-funcs-impl.h */,
+				9D7A438513FAF20E003087FF /* max.c */,
+				9D7A438613FAF20E003087FF /* min.c */,
+				9D7A438713FAF20E003087FF /* outlier-decoder.c */,
+				9D7A438813FAF20E003087FF /* outlier-encoder.c */,
+				9D7A438913FAF20E003087FF /* pack.c */,
+				9D7A438A13FAF20E003087FF /* paste.c */,
+				9D7A438B13FAF20E003087FF /* rand_4na_2na.c */,
+				9D7A438C13FAF20E003087FF /* rldecode.c */,
+				9D7A438D13FAF20E003087FF /* rlencode.c */,
+				9D7A438E13FAF20E003087FF /* round.c */,
+				9D7A438F13FAF20E003087FF /* simple-sub-select.c */,
+				9D7A439013FAF20E003087FF /* subtract-row-id.c */,
+				9D7A439113FAF20E003087FF /* sum.c */,
+				9D7A439213FAF20E003087FF /* trim.c */,
+				9D7A439313FAF20E003087FF /* trunc.c */,
+				9D7A439413FAF20E003087FF /* undelta.c */,
+				9D7A439513FAF20E003087FF /* unpack.c */,
+				9D7A439613FAF20E003087FF /* unzip.c */,
+				9D7A439713FAF20E003087FF /* vec-sum.c */,
+				9D7A439813FAF20E003087FF /* zip.c */,
+				9D320AB5142D02E600ACA5AA /* sprintf.c */,
+			);
+			name = vxf;
+			sourceTree = "<group>";
+		};
+		9D7A436513FAF1BC003087FF /* sraxf */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A43DE13FAF2EF003087FF /* bio-start.c */,
+				9D7A43DF13FAF2EF003087FF /* color-from-dna.c */,
+				9D7A43E013FAF2EF003087FF /* denormalize.c */,
+				9D7A43E113FAF2EF003087FF /* dna-from-color.c */,
+				9D7A43E213FAF2EF003087FF /* dynamic-454-read-descriptor.c */,
+				9D7A43E313FAF2EF003087FF /* extract-coordinates.c */,
+				9D7A43E413FAF2EF003087FF /* extract-name_coord.c */,
+				9D7A43E513FAF2EF003087FF /* extract-name_fmt.c */,
+				9D7A43E613FAF2EF003087FF /* extract-spot_name.c */,
+				9D7A43E713FAF2EF003087FF /* format-spot-name.c */,
+				9D7A43E813FAF2EF003087FF /* fpcodec.c */,
+				9D7A43E913FAF2EF003087FF /* index_lookup.c */,
+				9D7A43EA13FAF2EF003087FF /* libsraxf.vers.h */,
+				9D7A43EB13FAF2EF003087FF /* libwsraxf.vers.h */,
+				9D7A43EC13FAF2EF003087FF /* make-position.c */,
+				9D7A43ED13FAF2EF003087FF /* name-tokenizer.h */,
+				9D7A43EE13FAF2EF003087FF /* normalize.c */,
+				9D7A43EF13FAF2EF003087FF /* prefix-tree-to-name.c */,
+				9D7A43F013FAF2EF003087FF /* process-position.c */,
+				9D7A43F113FAF2EF003087FF /* qual4_codec.h */,
+				9D7A43F213FAF2EF003087FF /* qual4_decode.c */,
+				9D7A43F313FAF2EF003087FF /* qual4_encode.c */,
+				9D7A43F413FAF2EF003087FF /* read-desc.c */,
+				9D7A43F513FAF2EF003087FF /* read-seg-from-readn.c */,
+				9D7A43F613FAF2EF003087FF /* rewrite-spot-name.c */,
+				9D7A43F713FAF2EF003087FF /* rotate.c */,
+				9D7A43F813FAF2EF003087FF /* spot-desc.c */,
+				9D7A43F913FAF2EF003087FF /* stats_quality.c */,
+				9D7A43FA13FAF2EF003087FF /* stats.c */,
+				9D7A43FB13FAF2EF003087FF /* swap.c */,
+				9D7A43FC13FAF2EF003087FF /* tokenize-spot_name-454.c */,
+				9D7A43FD13FAF2EF003087FF /* tokenize-spot_name-abi.c */,
+				9D7A43FE13FAF2EF003087FF /* tokenize-spot_name-helicos.c */,
+				9D7A43FF13FAF2EF003087FF /* tokenize-spot_name-illumina.c */,
+				9D7A440013FAF2EF003087FF /* tokenize-spot_name-ion-torrent.c */,
+				9D7A440113FAF2EF003087FF /* untyped-priv.h */,
+				9D7A440213FAF2EF003087FF /* untyped.c */,
+				9D7A440313FAF2EF003087FF /* v0-decompress-init.c */,
+				9D7A440413FAF2EF003087FF /* v0-decompress-local.h */,
+				9D7A440513FAF2EF003087FF /* v0-decompress.c */,
+				9D7A440613FAF2EF003087FF /* v0-decompress.h */,
+				9D7A440713FAF2EF003087FF /* v0-funcs.c */,
+			);
+			name = sraxf;
+			sourceTree = "<group>";
+		};
+		9D7A436613FAF1C2003087FF /* axf */ = {
+			isa = PBXGroup;
+			children = (
+				9D4DCEAB1423FD9600881098 /* ref-preserve_qual.c */,
+				9DE55A78140EA19500EA61C6 /* raw-restore-qual.c */,
+				9D7A447613FAF539003087FF /* align-local_ref_id.c */,
+				9D7A447713FAF539003087FF /* align-local_ref_start.c */,
+				9D7A447813FAF539003087FF /* align-ref-name.c */,
+				9D7A447913FAF539003087FF /* align-ref-pos.c */,
+				9D7A447A13FAF539003087FF /* align-ref-seq-id.c */,
+				9D7A447B13FAF539003087FF /* align-restore-read.c */,
+				9D7A447C13FAF539003087FF /* cigar.c */,
+				9D7A447D13FAF539003087FF /* get-sam-flags.c */,
+				9D7A447E13FAF539003087FF /* libaxf.vers.h */,
+				9D7A447F13FAF539003087FF /* libwaxf.vers.h */,
+				9D7A448013FAF539003087FF /* not-my-row.c */,
+				9D7A448113FAF539003087FF /* project_read_from_sequence.c */,
+				9D7A448213FAF539003087FF /* raw-restore-read.c */,
+				9D7A448313FAF539003087FF /* ref-restore-read.c */,
+				9D7A448413FAF539003087FF /* ref-tbl-sub-select.c */,
+				9D7A448513FAF539003087FF /* refseq-stats.c */,
+				9D7A448613FAF539003087FF /* seq-restore-read.c */,
+				9D7A448713FAF539003087FF /* template-len.c */,
+				9DE55A84140EA93600EA61C6 /* generate-mismatch-qual.c */,
+				9DE55AAE140EC79C00EA61C6 /* mismatch-restore-qual.c */,
+			);
+			name = axf;
+			sourceTree = "<group>";
+		};
+		9D7A441213FAF37A003087FF /* write */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A42DB13FAEA21003087FF /* wcolumn.c */,
+				9D7A42DC13FAEA21003087FF /* wcursor.c */,
+				9D7A42DD13FAEA21003087FF /* wdatabase.c */,
+				9D7A42DE13FAEA21003087FF /* wdbmgr.c */,
+				9D7A42DF13FAEA21003087FF /* wlinker.c */,
+				9D7A42E013FAEA21003087FF /* wphys.c */,
+				9D7A42E113FAEA21003087FF /* wprod.c */,
+				9D7A42E213FAEA21003087FF /* wtable.c */,
+			);
+			name = write;
+			sourceTree = "<group>";
+		};
+		9D7A441313FAF394003087FF /* common */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A428E13FAEA20003087FF /* blob-headers.c */,
+				9D7A428F13FAEA20003087FF /* blob-headers.h */,
+				9D7A429013FAEA20003087FF /* blob-priv.h */,
+				9D7A429113FAEA20003087FF /* blob.c */,
+				9D7A429213FAEA20003087FF /* blob.h */,
+				9D7A429413FAEA20003087FF /* column-cmn.c */,
+				9D7A429513FAEA20003087FF /* column-priv.h */,
+				9D7A42E313FAEA21003087FF /* xform-priv.h */,
+				9D7A429813FAEA20003087FF /* cursor-cmn.c */,
+				9D7A429913FAEA20003087FF /* cursor-priv.h */,
+				9D7A429B13FAEA20003087FF /* database-cmn.c */,
+				9D7A429C13FAEA20003087FF /* database-load.c */,
+				9D7A429D13FAEA20003087FF /* database-priv.h */,
+				9D7A429F13FAEA20003087FF /* dbmgr-cmn.c */,
+				9D7A42A013FAEA20003087FF /* dbmgr-priv.h */,
+				9D7A42A713FAEA20003087FF /* libvdb.vers.h */,
+				9D7A42A813FAEA20003087FF /* libwvdb.vers.h */,
+				9D7A42A913FAEA20003087FF /* linker-cmn.c */,
+				9D7A42AA13FAEA20003087FF /* linker-int.c */,
+				9D7A42AB13FAEA21003087FF /* linker-priv.h */,
+				9D7A42B413FAEA21003087FF /* page-map.c */,
+				9D7A42B513FAEA21003087FF /* page-map.h */,
+				9D7A42B713FAEA21003087FF /* phys-cmn.c */,
+				9D7A42B813FAEA21003087FF /* phys-load.c */,
+				9D7A42B913FAEA21003087FF /* phys-priv.h */,
+				9D7A42BB13FAEA21003087FF /* prod-cmn.c */,
+				9D7A42BC13FAEA21003087FF /* prod-expr.c */,
+				9D7A42BD13FAEA21003087FF /* prod-expr.h */,
+				9D7A42BE13FAEA21003087FF /* prod-func.c */,
+				9D7A42BF13FAEA21003087FF /* prod-priv.h */,
+				9D7A42C513FAEA21003087FF /* schema-db.c */,
+				9D7A42C613FAEA21003087FF /* schema-dump.c */,
+				9D7A42C713FAEA21003087FF /* schema-dump.h */,
+				9D7A42C813FAEA21003087FF /* schema-eval.c */,
+				9D7A42C913FAEA21003087FF /* schema-expr.c */,
+				9D7A42CA13FAEA21003087FF /* schema-expr.h */,
+				9D7A42CB13FAEA21003087FF /* schema-func.c */,
+				9D7A42CC13FAEA21003087FF /* schema-int.c */,
+				9D7A42CD13FAEA21003087FF /* schema-parse.c */,
+				9D7A42CE13FAEA21003087FF /* schema-parse.h */,
+				9D7A42CF13FAEA21003087FF /* schema-priv.h */,
+				9D7A42D013FAEA21003087FF /* schema-prod.c */,
+				9D7A42D113FAEA21003087FF /* schema-tbl.c */,
+				9D7A42D213FAEA21003087FF /* schema-tok.c */,
+				9D7A42D313FAEA21003087FF /* schema-tok.h */,
+				9D7A42D413FAEA21003087FF /* schema-type.c */,
+				9D7A42D513FAEA21003087FF /* schema.c */,
+				9D7A42D713FAEA21003087FF /* table-cmn.c */,
+				9D7A42D813FAEA21003087FF /* table-load.c */,
+				9D7A42D913FAEA21003087FF /* table-priv.h */,
+			);
+			name = common;
+			sourceTree = "<group>";
+		};
+		9D7A444F13FAF455003087FF /* search */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A445013FAF48E003087FF /* agrep-dp.c */,
+				9D7A445113FAF48E003087FF /* agrep-myers.c */,
+				9D7A445213FAF48E003087FF /* agrep-myersunltd.c */,
+				9D7A445313FAF48E003087FF /* agrep-wumanber.c */,
+				9D7A445413FAF48E003087FF /* fgrep-aho.c */,
+				9D7A445513FAF48E003087FF /* fgrep-boyermoore.c */,
+				9D7A445613FAF48E003087FF /* fgrep-dumb.c */,
+				9D7A445713FAF48E003087FF /* libksrch.vers.h */,
+				9D7A445813FAF48E003087FF /* nucstrstr.c */,
+				9D7A445913FAF48E003087FF /* search-priv.h */,
+				9D7A445A13FAF48E003087FF /* search.c */,
+			);
+			name = search;
+			sourceTree = "<group>";
+		};
+		9D7A44AA13FB0466003087FF /* align */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A44AB13FB0494003087FF /* align-access.c */,
+				9D7A44AC13FB0494003087FF /* bam-priv.h */,
+				9D7A44AD13FB0494003087FF /* bam.c */,
+				9D7A44AE13FB0494003087FF /* reader-cmn.c */,
+				9D7A44AF13FB0494003087FF /* reader-cmn.h */,
+				9D7A44B013FB0494003087FF /* reader-refseq.c */,
+				9D7A44B113FB0494003087FF /* refseq-mgr-priv.h */,
+				9D7A44B213FB0494003087FF /* refseq-mgr.c */,
+				9D7A44B413FB0494003087FF /* writer-alignment.c */,
+				9D7A44B513FB0494003087FF /* writer-cmn.c */,
+				9D7A44B613FB0494003087FF /* writer-priv.h */,
+				9D7A44B713FB0494003087FF /* writer-ref.c */,
+				9D7A44B813FB0494003087FF /* writer-ref.h */,
+				9D7A44B913FB0494003087FF /* writer-reference.c */,
+				9D7A44BA13FB0494003087FF /* writer-refseq.c */,
+				9D7A44BB13FB0494003087FF /* writer-sequence.c */,
+			);
+			name = align;
+			sourceTree = "<group>";
+		};
+		9D7A460E13FB0F69003087FF /* deseq */ = {
+			isa = PBXGroup;
+			children = (
+				9D320A0A142B813300ACA5AA /* Makefile */,
+				9D7A461013FB1128003087FF /* deseq.c */,
+			);
+			name = deseq;
+			sourceTree = "<group>";
+		};
+		9D7A469013FB1FAC003087FF /* align */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A469113FB1FC5003087FF /* align.vschema */,
+				9D7A469213FB1FC5003087FF /* refseq.vschema */,
+				9D7A469313FB1FC5003087FF /* seq.vschema */,
+			);
+			name = align;
+			sourceTree = "<group>";
+		};
+		9D819B3411DB9D5200DA4D3C /* Tools */ = {
+			isa = PBXGroup;
+			children = (
+				9D7A460E13FB0F69003087FF /* deseq */,
+			);
+			name = Tools;
+			sourceTree = "<group>";
+		};
+		9D8EC47011C2F081000F1048 /* Tests */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Tests;
+			sourceTree = "<group>";
+		};
+		9D985E8B12886C3A00849729 /* kfg */ = {
+			isa = PBXGroup;
+			children = (
+				9D1235B414F571AC00ECC72C /* config-grammar.c */,
+				9D1235B514F571AC00ECC72C /* config-grammar.y */,
+				9D1235B614F571AC00ECC72C /* config-lex.c */,
+				9D1235B714F571AC00ECC72C /* config-lex.l */,
+				9D1235B814F571AC00ECC72C /* config-tokens.h */,
+				9D1235B914F571AC00ECC72C /* config.linux.kfg */,
+				9D1235BA14F571AC00ECC72C /* config.win.kfg */,
+				9D1235BB14F571AC00ECC72C /* kfg-parse.h */,
+				9D985FCB1288BA8700849729 /* config.mac.kfg */,
+				9D985E8C12886C6100849729 /* config.c */,
+			);
+			name = kfg;
+			sourceTree = "<group>";
+		};
+		9DB6A8D411EB9F2100168DE0 /* interfaces */ = {
+			isa = PBXGroup;
+			children = (
+				9D6FFB2F145094B000952EB7 /* align */,
+			);
+			name = interfaces;
+			path = ../../../interfaces;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		9D31EC95117667FA003CDA5E /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A410713FADCFE003087FF /* path-priv.h in Headers */,
+				9D7A411613FADD33003087FF /* sysdir-priv.h in Headers */,
+				9D7A411713FADD33003087FF /* sysfile-priv.h in Headers */,
+				9D7A445D13FAF49A003087FF /* libksrch.vers.h in Headers */,
+				9D7A446013FAF49A003087FF /* search-priv.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A412A13FADF3A003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A415813FAE00E003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A417413FAE192003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A423013FAE3F5003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A426413FAE69A003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A428513FAE9B5003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A431813FAED2E003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A433313FAEE0C003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A435C13FAF1AE003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A440813FAF315003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A441A13FAF3B5003087FF /* qual4_codec.h in Headers */,
+				9D7A441B13FAF3B5003087FF /* libwsraxf.vers.h in Headers */,
+				9D7A442413FAF3B5003087FF /* v0-decompress-local.h in Headers */,
+				9D7A443213FAF3B5003087FF /* libsraxf.vers.h in Headers */,
+				9D7A443913FAF3B5003087FF /* v0-decompress.h in Headers */,
+				9D7A443B13FAF3B5003087FF /* name-tokenizer.h in Headers */,
+				9D7A443C13FAF3B5003087FF /* untyped-priv.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A448813FAF555003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A44BC13FB04A9003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A452B13FB0A3C003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A454713FB0B4D003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45AF13FB0CB8003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45D813FB0D50003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A460313FB0F36003087FF /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		9D31EC98117667FA003CDA5E /* klib */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D31ECBB11766836003CDA5E /* Build configuration list for PBXNativeTarget "klib" */;
+			buildPhases = (
+				9D31EC95117667FA003CDA5E /* Headers */,
+				9D31EC96117667FA003CDA5E /* Sources */,
+				9D31EC97117667FA003CDA5E /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = klib;
+			productName = klib;
+			productReference = 9D31EC99117667FA003CDA5E /* libklib.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A412D13FADF3A003087FF /* ksproc */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A414713FADF98003087FF /* Build configuration list for PBXNativeTarget "ksproc" */;
+			buildPhases = (
+				9D7A412A13FADF3A003087FF /* Headers */,
+				9D7A412B13FADF3A003087FF /* Sources */,
+				9D7A412C13FADF3A003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = ksproc;
+			productName = ksproc;
+			productReference = 9D7A412E13FADF3A003087FF /* libksproc.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		9D7A415B13FAE00E003087FF /* kmproc */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A417013FAE0A5003087FF /* Build configuration list for PBXNativeTarget "kmproc" */;
+			buildPhases = (
+				9D7A415813FAE00E003087FF /* Headers */,
+				9D7A415913FAE00E003087FF /* Sources */,
+				9D7A415A13FAE00E003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = kmproc;
+			productName = kmproc;
+			productReference = 9D7A415C13FAE00E003087FF /* libkmproc.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		9D7A417713FAE192003087FF /* kdb-cmn */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A417C13FAE1A2003087FF /* Build configuration list for PBXNativeTarget "kdb-cmn" */;
+			buildPhases = (
+				9D7A417413FAE192003087FF /* Headers */,
+				9D7A417513FAE192003087FF /* Sources */,
+				9D7A417613FAE192003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "kdb-cmn";
+			productName = "kdb-cmn";
+			productReference = 9D7A417813FAE192003087FF /* libkdb-cmn.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		9D7A423313FAE3F5003087FF /* kdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A423A13FAE42A003087FF /* Build configuration list for PBXNativeTarget "kdb" */;
+			buildPhases = (
+				9D7A423013FAE3F5003087FF /* Headers */,
+				9D7A423113FAE3F5003087FF /* Sources */,
+				9D7A423213FAE3F5003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44FE13FB05F2003087FF /* PBXTargetDependency */,
+				9D7A423813FAE3FD003087FF /* PBXTargetDependency */,
+			);
+			name = kdb;
+			productName = kdb;
+			productReference = 9D7A423413FAE3F5003087FF /* libkdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A426713FAE69A003087FF /* wkdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A427313FAE709003087FF /* Build configuration list for PBXNativeTarget "wkdb" */;
+			buildPhases = (
+				9D7A426413FAE69A003087FF /* Headers */,
+				9D7A426513FAE69A003087FF /* Sources */,
+				9D7A426613FAE69A003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44FC13FB05EB003087FF /* PBXTargetDependency */,
+				9D7A428413FAE9A0003087FF /* PBXTargetDependency */,
+			);
+			name = wkdb;
+			productName = wkdb;
+			productReference = 9D7A426813FAE69A003087FF /* libwkdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A428813FAE9B5003087FF /* vdb-cmn */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A428D13FAE9C5003087FF /* Build configuration list for PBXNativeTarget "vdb-cmn" */;
+			buildPhases = (
+				9D7A428513FAE9B5003087FF /* Headers */,
+				9D7A428613FAE9B5003087FF /* Sources */,
+				9D7A428713FAE9B5003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "vdb-cmn";
+			productName = "vdb-cmn";
+			productReference = 9D7A428913FAE9B5003087FF /* libvdb-cmn.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		9D7A431B13FAED2E003087FF /* vdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A432713FAED97003087FF /* Build configuration list for PBXNativeTarget "vdb" */;
+			buildPhases = (
+				9D7A431813FAED2E003087FF /* Headers */,
+				9D7A431913FAED2E003087FF /* Sources */,
+				9D7A431A13FAED2E003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44F413FB05A9003087FF /* PBXTargetDependency */,
+				9D7A44F213FB05A9003087FF /* PBXTargetDependency */,
+				9D7A450613FB06AB003087FF /* PBXTargetDependency */,
+			);
+			name = vdb;
+			productName = vdb;
+			productReference = 9D7A431C13FAED2E003087FF /* libvdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A433613FAEE0C003087FF /* wvdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A434A13FAEE8A003087FF /* Build configuration list for PBXNativeTarget "wvdb" */;
+			buildPhases = (
+				9D7A433313FAEE0C003087FF /* Headers */,
+				9D7A433413FAEE0C003087FF /* Sources */,
+				9D7A433513FAEE0C003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44FA13FB05C9003087FF /* PBXTargetDependency */,
+				9D7A44F813FB05C9003087FF /* PBXTargetDependency */,
+				9D7A44F613FB05C9003087FF /* PBXTargetDependency */,
+				9D7A450813FB06BD003087FF /* PBXTargetDependency */,
+			);
+			name = wvdb;
+			productName = wvdb;
+			productReference = 9D7A433713FAEE0C003087FF /* libwvdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A435F13FAF1AE003087FF /* vxf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A436413FAF1B4003087FF /* Build configuration list for PBXNativeTarget "vxf" */;
+			buildPhases = (
+				9D7A435C13FAF1AE003087FF /* Headers */,
+				9D7A435D13FAF1AE003087FF /* Sources */,
+				9D7A435E13FAF1AE003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44E813FB057E003087FF /* PBXTargetDependency */,
+				9D7A44EA13FB0582003087FF /* PBXTargetDependency */,
+			);
+			name = vxf;
+			productName = vxf;
+			productReference = 9D7A436013FAF1AE003087FF /* libvxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A440B13FAF315003087FF /* sraxf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A441013FAF333003087FF /* Build configuration list for PBXNativeTarget "sraxf" */;
+			buildPhases = (
+				9D7A440813FAF315003087FF /* Headers */,
+				9D7A440913FAF315003087FF /* Sources */,
+				9D7A440A13FAF315003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A446F13FAF4B6003087FF /* PBXTargetDependency */,
+				9D7A446D13FAF4B3003087FF /* PBXTargetDependency */,
+				9D7A446913FAF4A9003087FF /* PBXTargetDependency */,
+			);
+			name = sraxf;
+			productName = sraxf;
+			productReference = 9D7A440C13FAF315003087FF /* libsraxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A448B13FAF555003087FF /* axf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A44A913FAF5C7003087FF /* Build configuration list for PBXNativeTarget "axf" */;
+			buildPhases = (
+				9D7A448813FAF555003087FF /* Headers */,
+				9D7A448913FAF555003087FF /* Sources */,
+				9D7A448A13FAF555003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44E613FB0561003087FF /* PBXTargetDependency */,
+				9D7A44E213FB0551003087FF /* PBXTargetDependency */,
+				9D7A44E013FB0546003087FF /* PBXTargetDependency */,
+			);
+			name = axf;
+			productName = axf;
+			productReference = 9D7A448C13FAF555003087FF /* libaxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A44BF13FB04A9003087FF /* align */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A44FF13FB0621003087FF /* Build configuration list for PBXNativeTarget "align" */;
+			buildPhases = (
+				9D7A44BC13FB04A9003087FF /* Headers */,
+				9D7A44BD13FB04A9003087FF /* Sources */,
+				9D7A44BE13FB04A9003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A44F013FB0597003087FF /* PBXTargetDependency */,
+				9D7A44EE13FB0597003087FF /* PBXTargetDependency */,
+				9D7A44EC13FB0597003087FF /* PBXTargetDependency */,
+			);
+			name = align;
+			productName = align;
+			productReference = 9D7A44C013FB04A9003087FF /* libalign.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A452E13FB0A3C003087FF /* wvxf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A454613FB0AF3003087FF /* Build configuration list for PBXNativeTarget "wvxf" */;
+			buildPhases = (
+				9D7A452B13FB0A3C003087FF /* Headers */,
+				9D7A452C13FB0A3C003087FF /* Sources */,
+				9D7A452D13FB0A3C003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D4DCEE41424001C00881098 /* PBXTargetDependency */,
+				9D4DCEE21424001400881098 /* PBXTargetDependency */,
+				9D4DCEDC1423FF6E00881098 /* PBXTargetDependency */,
+			);
+			name = wvxf;
+			productName = wvxf;
+			productReference = 9D7A452F13FB0A3C003087FF /* libwvxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A454A13FB0B4D003087FF /* wsraxf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A455A13FB0BAF003087FF /* Build configuration list for PBXNativeTarget "wsraxf" */;
+			buildPhases = (
+				9D7A454713FB0B4D003087FF /* Headers */,
+				9D7A454813FB0B4D003087FF /* Sources */,
+				9D7A454913FB0B4D003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D4DCEEB1424008500881098 /* PBXTargetDependency */,
+				9D4DCEE91424007F00881098 /* PBXTargetDependency */,
+				9D4DCEE71424007400881098 /* PBXTargetDependency */,
+			);
+			name = wsraxf;
+			productName = wsraxf;
+			productReference = 9D7A454B13FB0B4D003087FF /* libwsraxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A45A813FB0CB8003087FF /* waxf */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A45C413FB0CB8003087FF /* Build configuration list for PBXNativeTarget "waxf" */;
+			buildPhases = (
+				9D7A45AF13FB0CB8003087FF /* Headers */,
+				9D7A45B013FB0CB8003087FF /* Sources */,
+				9D7A45C013FB0CB8003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D4DCEEF142400B900881098 /* PBXTargetDependency */,
+				9D4DCEED142400B400881098 /* PBXTargetDependency */,
+				9D7A45A913FB0CB8003087FF /* PBXTargetDependency */,
+				9D7A45AD13FB0CB8003087FF /* PBXTargetDependency */,
+			);
+			name = waxf;
+			productName = axf;
+			productReference = 9D7A45C713FB0CB8003087FF /* libwaxf.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A45D113FB0D50003087FF /* walign */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A45E413FB0D50003087FF /* Build configuration list for PBXNativeTarget "walign" */;
+			buildPhases = (
+				9D7A45D813FB0D50003087FF /* Headers */,
+				9D7A45D913FB0D50003087FF /* Sources */,
+				9D7A45DF13FB0D50003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D7A45D213FB0D50003087FF /* PBXTargetDependency */,
+				9D7A45D413FB0D50003087FF /* PBXTargetDependency */,
+				9D7A45D613FB0D50003087FF /* PBXTargetDependency */,
+			);
+			name = walign;
+			productName = align;
+			productReference = 9D7A45E713FB0D50003087FF /* libwalign.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D7A460613FB0F36003087FF /* kapp */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A460F13FB0F69003087FF /* Build configuration list for PBXNativeTarget "kapp" */;
+			buildPhases = (
+				9D7A460313FB0F36003087FF /* Headers */,
+				9D7A460413FB0F36003087FF /* Sources */,
+				9D7A460513FB0F36003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = kapp;
+			productName = kapp;
+			productReference = 9D7A460713FB0F36003087FF /* libkapp.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		9D7A461313FB1133003087FF /* deseq */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D7A461C13FB116A003087FF /* Build configuration list for PBXNativeTarget "deseq" */;
+			buildPhases = (
+				9D7A461113FB1133003087FF /* Sources */,
+				9D7A461213FB1133003087FF /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9DE55AFE140EF0C800EA61C6 /* PBXTargetDependency */,
+				9DE55A9A140EAC9E00EA61C6 /* PBXTargetDependency */,
+				9DE55A98140EAC9E00EA61C6 /* PBXTargetDependency */,
+				9DE55A96140EAC9E00EA61C6 /* PBXTargetDependency */,
+				9DE55935140D82CD00EA61C6 /* PBXTargetDependency */,
+				9DE55933140D82BC00EA61C6 /* PBXTargetDependency */,
+				9DE55931140D82BC00EA61C6 /* PBXTargetDependency */,
+			);
+			name = deseq;
+			productName = deseq;
+			productReference = 9D7A461413FB1133003087FF /* deseq */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				ORGANIZATIONNAME = NCBI/NLM/NIH;
+			};
+			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "asm-trace" */;
+			compatibilityVersion = "Xcode 3.1";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				Japanese,
+				French,
+				German,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* asm-trace */;
+			productRefGroup = 9D7356E611775CB7009EA3E4 /* Products */;
+			projectDirPath = "";
+			projectRoot = ../../..;
+			targets = (
+				9D7357F311779B2A009EA3E4 /* make-env */,
+				9D7A412D13FADF3A003087FF /* ksproc */,
+				9D7A415B13FAE00E003087FF /* kmproc */,
+				9D31EC98117667FA003CDA5E /* klib */,
+				9D7A417713FAE192003087FF /* kdb-cmn */,
+				9D7A423313FAE3F5003087FF /* kdb */,
+				9D7A426713FAE69A003087FF /* wkdb */,
+				9D7A428813FAE9B5003087FF /* vdb-cmn */,
+				9D7A431B13FAED2E003087FF /* vdb */,
+				9D7A433613FAEE0C003087FF /* wvdb */,
+				9D7A44BF13FB04A9003087FF /* align */,
+				9D7A435F13FAF1AE003087FF /* vxf */,
+				9D7A440B13FAF315003087FF /* sraxf */,
+				9D7A448B13FAF555003087FF /* axf */,
+				9D7A452E13FB0A3C003087FF /* wvxf */,
+				9D7A454A13FB0B4D003087FF /* wsraxf */,
+				9D7A45A813FB0CB8003087FF /* waxf */,
+				9D7A45D113FB0D50003087FF /* walign */,
+				9D7A460613FB0F36003087FF /* kapp */,
+				9D7A461313FB1133003087FF /* deseq */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		9D7357F211779B2A009EA3E4 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "echo \"Setting up run-time environment\"\nmkdir -p $BUILT_PRODUCTS_DIR\n\ncd ../../..\nTOP=`pwd`\nmake -s vers-includes\n\nschema=\"$TOP/interfaces\"\n\ncd $BUILT_PRODUCTS_DIR\n\n[ -e schema ] || ln -s $schema schema\n\ncase $ARCHS in\n\t($ARCHS_STANDARD_32_BIT)\n\t\tmod=\"mod32\"\n\t\twmod=\"wmod32\";\n\t\t;;\n\t($ARCHS_STANDARD_64_BIT)\n\t\tmod=\"mod64\"\n\t\twmod=\"wmod64\";\n\t\t;;\nesac\n\nmkdir -p ${mod}\ncd $mod\nrm -rf *\nln -s ../libvxf.dylib .\nln -s ../libsra [...]
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		9D31EC96117667FA003CDA5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9DFECDC711766982004EFD0D /* arc.c in Sources */,
+				9DFECDC811766982004EFD0D /* buffile.c in Sources */,
+				9DFECDC911766982004EFD0D /* bzip.c in Sources */,
+				9DFECDCA11766982004EFD0D /* countfile.c in Sources */,
+				9DFECDCB11766982004EFD0D /* crc32.c in Sources */,
+				9DFECDCC11766982004EFD0D /* dir_test.c in Sources */,
+				9DFECDCD11766982004EFD0D /* directory.c in Sources */,
+				9DFECDCE11766982004EFD0D /* file.c in Sources */,
+				9DFECDD011766982004EFD0D /* gzip.c in Sources */,
+				9DFECDD111766982004EFD0D /* md5.c in Sources */,
+				9DFECDD211766982004EFD0D /* nullfile.c in Sources */,
+				9DFECDD311766982004EFD0D /* sra.c in Sources */,
+				9DFECDD411766982004EFD0D /* subfile.c in Sources */,
+				9DFECDD511766982004EFD0D /* sysdir.c in Sources */,
+				9DFECDD611766982004EFD0D /* sysdll.c in Sources */,
+				9DFECDD711766982004EFD0D /* sysfile.c in Sources */,
+				9DFECDD811766982004EFD0D /* sysmmap.c in Sources */,
+				9DFECDD911766982004EFD0D /* tar.c in Sources */,
+				9DFECDDA11766982004EFD0D /* teefile.c in Sources */,
+				9DFECDDB11766982004EFD0D /* toc.c in Sources */,
+				9DFECDDC11766982004EFD0D /* tocdir.c in Sources */,
+				9DFECDDD11766982004EFD0D /* tocentry.c in Sources */,
+				9DFECDDE11766982004EFD0D /* tocfile.c in Sources */,
+				9DFECDC511766952004EFD0D /* xml.c in Sources */,
+				9D31EC9D1176680A003CDA5E /* bstpersist.c in Sources */,
+				9D31EC9E1176680A003CDA5E /* container.c in Sources */,
+				9D31EC9F1176680B003CDA5E /* cp1252.c in Sources */,
+				9D31ECA01176680B003CDA5E /* crc32.c in Sources */,
+				9D31ECA11176680C003CDA5E /* data-buffer.c in Sources */,
+				9D31ECA21176680C003CDA5E /* iso8859-1.c in Sources */,
+				9D31ECA31176680D003CDA5E /* iso8859.c in Sources */,
+				9D31ECA41176680D003CDA5E /* log.c in Sources */,
+				9D31ECA51176680E003CDA5E /* md5.c in Sources */,
+				9D31ECA61176680E003CDA5E /* namelist.c in Sources */,
+				9D31ECA71176680F003CDA5E /* pack.c in Sources */,
+				9D31ECA81176680F003CDA5E /* pbstree.c in Sources */,
+				9D31ECA911766810003CDA5E /* ptpersist.c in Sources */,
+				9D31ECAA11766810003CDA5E /* ptrie.c in Sources */,
+				9D31ECAB11766811003CDA5E /* rc-idx-tbl.c in Sources */,
+				9D31ECAC11766811003CDA5E /* rc-tbl.c in Sources */,
+				9D31ECAD11766812003CDA5E /* symtab.c in Sources */,
+				9D31ECAE11766813003CDA5E /* syslog.c in Sources */,
+				9D31ECB011766814003CDA5E /* text.c in Sources */,
+				9D31ECB111766815003CDA5E /* token.c in Sources */,
+				9D31ECB211766815003CDA5E /* trie.c in Sources */,
+				9D31ECB411766816003CDA5E /* unpack.c in Sources */,
+				9D31ECB511766817003CDA5E /* utf8.c in Sources */,
+				9D31ECB611766818003CDA5E /* vector.c in Sources */,
+				9D31ECB711766818003CDA5E /* vlen-encode.c in Sources */,
+				9D8EC41B11C2E49E000F1048 /* pbstree-native.c in Sources */,
+				9D8EC41C11C2E49E000F1048 /* pbstree-swapped.c in Sources */,
+				9D8198A911D3D39700DA4D3C /* vector_namelist.c in Sources */,
+				9D1EC483122D914C00C11287 /* printf.c in Sources */,
+				9D1EC484122D914C00C11287 /* status-rc-strings.c in Sources */,
+				9D1EC485122D914C00C11287 /* status-rc.c in Sources */,
+				9D1EC486122D914C00C11287 /* status.c in Sources */,
+				9D62F42A124D01AE003D38E9 /* bsearch.c in Sources */,
+				9D62F42B124D01AE003D38E9 /* qsort.c in Sources */,
+				9DA3A84E125FA3A8005AD5BB /* refcount.c in Sources */,
+				9DA3A88512663646005AD5BB /* syswriter.c in Sources */,
+				9DA3A8961266375B005AD5BB /* writer.c in Sources */,
+				9DA3A89A12663798005AD5BB /* out.c in Sources */,
+				9D985E8D12886C6100849729 /* config.c in Sources */,
+				9DF1902C128DAEBA00FED4AA /* debug.c in Sources */,
+				9D8204F8130F1100009A8B64 /* pagefile.c in Sources */,
+				9D7A40DB13FADBA3003087FF /* SHA-32bit.c in Sources */,
+				9D7A40DC13FADBA3003087FF /* SHA-64bit.c in Sources */,
+				9D7A40E113FADBEE003087FF /* syserrcode.c in Sources */,
+				9D7A40E213FADBEE003087FF /* systime.c in Sources */,
+				9D7A40FF13FADCFE003087FF /* buffile-write.c in Sources */,
+				9D7A410613FADCFE003087FF /* mmap.c in Sources */,
+				9D7A410913FADCFE003087FF /* pmem.c in Sources */,
+				9D7A445B13FAF49A003087FF /* agrep-myersunltd.c in Sources */,
+				9D7A445C13FAF49A003087FF /* agrep-wumanber.c in Sources */,
+				9D7A445E13FAF49A003087FF /* agrep-myers.c in Sources */,
+				9D7A445F13FAF49A003087FF /* fgrep-boyermoore.c in Sources */,
+				9D7A446113FAF49A003087FF /* fgrep-dumb.c in Sources */,
+				9D7A446213FAF49A003087FF /* search.c in Sources */,
+				9D7A446313FAF49A003087FF /* agrep-dp.c in Sources */,
+				9D7A446413FAF49A003087FF /* fgrep-aho.c in Sources */,
+				9D7A446513FAF49A003087FF /* nucstrstr.c in Sources */,
+				9D1235BC14F571AC00ECC72C /* config-grammar.c in Sources */,
+				9D1235BE14F571AC00ECC72C /* config-lex.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A412B13FADF3A003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A413B13FADF74003087FF /* stbarrier.c in Sources */,
+				9D7A413C13FADF75003087FF /* stcond.c in Sources */,
+				9D7A413D13FADF75003087FF /* stlock.c in Sources */,
+				9D7A413E13FADF76003087FF /* stsem.c in Sources */,
+				9D7A413F13FADF76003087FF /* stthread.c in Sources */,
+				9D7A414013FADF77003087FF /* sttimeout.c in Sources */,
+				9D7A414213FADF79003087FF /* syslock.c in Sources */,
+				9D7A415113FADFC6003087FF /* queue.c in Sources */,
+				9D7A415213FADFC6003087FF /* sem.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A415913FAE00E003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A415F13FAE01B003087FF /* queue.c in Sources */,
+				9D7A416013FAE01C003087FF /* sem.c in Sources */,
+				9D7A416113FAE023003087FF /* syscond.c in Sources */,
+				9D7A416213FAE024003087FF /* syslock.c in Sources */,
+				9D7A416313FAE026003087FF /* systhread.c in Sources */,
+				9D7A416413FAE027003087FF /* systimeout.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A417513FAE192003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A422313FAE325003087FF /* btree.c in Sources */,
+				9D7A422413FAE333003087FF /* dbmgr-cmn.c in Sources */,
+				9D7A427E13FAE90F003087FF /* idxblk.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A423113FAE3F5003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A423B13FAE433003087FF /* coldata.c in Sources */,
+				9D7A423C13FAE435003087FF /* colidx.c in Sources */,
+				9D7A423E13FAE43F003087FF /* colidx0.c in Sources */,
+				9D7A423F13FAE444003087FF /* colidx1.c in Sources */,
+				9D7A424013FAE446003087FF /* colidx2.c in Sources */,
+				9D7A424113FAE470003087FF /* column-cc.c in Sources */,
+				9D7A424213FAE477003087FF /* column.c in Sources */,
+				9D7A424313FAE47A003087FF /* database-cc.c in Sources */,
+				9D7A424513FAE482003087FF /* database.c in Sources */,
+				9D7A424613FAE484003087FF /* dbcc-cmn.c in Sources */,
+				9D7A424713FAE48A003087FF /* dbmgr.c in Sources */,
+				9D7A424813FAE499003087FF /* index.c in Sources */,
+				9D7A424913FAE4B0003087FF /* kdb.c in Sources */,
+				9D7A424A13FAE4B4003087FF /* meta.c in Sources */,
+				9D7A424B13FAE4B8003087FF /* table-cc.c in Sources */,
+				9D7A424C13FAE4BA003087FF /* table.c in Sources */,
+				9D7A424D13FAE4C1003087FF /* trieidx-v1.c in Sources */,
+				9D7A424E13FAE4C2003087FF /* trieidx-v2.c in Sources */,
+				9D7A424F13FAE4C9003087FF /* u64idx-v3.c in Sources */,
+				9D7A425813FAE616003087FF /* idstats.c in Sources */,
+				9D7A425913FAE629003087FF /* trieval-v1.c in Sources */,
+				9D7A425A13FAE62E003087FF /* ptrieval-v1.c in Sources */,
+				9D7A425B13FAE63F003087FF /* trieval-v2.c in Sources */,
+				9D7A425C13FAE644003087FF /* ptrieval-v2.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A426513FAE69A003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A426D13FAE6C0003087FF /* wkdb.c in Sources */,
+				9D7A426E13FAE6C5003087FF /* wdbmgr.c in Sources */,
+				9D7A426F13FAE6CC003087FF /* wdatabase.c in Sources */,
+				9D7A427013FAE6D5003087FF /* wtable.c in Sources */,
+				9D7A427113FAE6E1003087FF /* wcolumn.c in Sources */,
+				9D7A427213FAE6EB003087FF /* wcoldata.c in Sources */,
+				9D7A427413FAE89E003087FF /* wcolidx.c in Sources */,
+				9D7A427513FAE8A4003087FF /* wcolidx0.c in Sources */,
+				9D7A427613FAE8A7003087FF /* wcolidx1.c in Sources */,
+				9D7A427713FAE8A8003087FF /* wcolidx2.c in Sources */,
+				9D7A427813FAE8D6003087FF /* widxblk.c in Sources */,
+				9D7A427913FAE8DB003087FF /* wmeta.c in Sources */,
+				9D7A427A13FAE8E7003087FF /* windex.c in Sources */,
+				9D7A427B13FAE8ED003087FF /* wtrieidx-v1.c in Sources */,
+				9D7A427C13FAE8EE003087FF /* wtrieidx-v2.c in Sources */,
+				9D7A427D13FAE8F4003087FF /* wu64idx-v3.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A428613FAE9B5003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A42E413FAEA2A003087FF /* dbmgr-cmn.c in Sources */,
+				9D7A42E513FAEA36003087FF /* schema-tok.c in Sources */,
+				9D7A42E613FAEA3C003087FF /* schema-parse.c in Sources */,
+				9D7A42E713FAEA45003087FF /* schema-type.c in Sources */,
+				9D7A42E813FAEA4C003087FF /* schema-func.c in Sources */,
+				9D7A42E913FAEA54003087FF /* schema-prod.c in Sources */,
+				9D7A42EA13FAEA5A003087FF /* schema-expr.c in Sources */,
+				9D7A42EB13FAEA60003087FF /* schema-eval.c in Sources */,
+				9D7A42EC13FAEA65003087FF /* schema-tbl.c in Sources */,
+				9D7A42ED13FAEA68003087FF /* schema-db.c in Sources */,
+				9D7A42EE13FAEA6E003087FF /* schema-dump.c in Sources */,
+				9D7A42EF13FAEA72003087FF /* schema-int.c in Sources */,
+				9D7A42F013FAEA7C003087FF /* schema.c in Sources */,
+				9D7A42F113FAEA85003087FF /* linker-int.c in Sources */,
+				9D7A42F213FAEA8D003087FF /* linker-cmn.c in Sources */,
+				9D7A42F313FAEA95003087FF /* database-cmn.c in Sources */,
+				9D7A42F413FAEA98003087FF /* database-load.c in Sources */,
+				9D7A42F513FAEAA0003087FF /* table-cmn.c in Sources */,
+				9D7A42F613FAEAA1003087FF /* table-load.c in Sources */,
+				9D7A42F713FAEAAA003087FF /* cursor-cmn.c in Sources */,
+				9D7A42F813FAEAB2003087FF /* column-cmn.c in Sources */,
+				9D7A42F913FAEABD003087FF /* prod-cmn.c in Sources */,
+				9D7A42FA13FAEAC0003087FF /* prod-expr.c in Sources */,
+				9D7A42FB13FAEAC4003087FF /* prod-func.c in Sources */,
+				9D7A42FC13FAEACB003087FF /* phys-cmn.c in Sources */,
+				9D7A42FD13FAEAD1003087FF /* phys-load.c in Sources */,
+				9D7A42FE13FAEADD003087FF /* blob.c in Sources */,
+				9D7A42FF13FAEAE0003087FF /* blob-headers.c in Sources */,
+				9D7A430013FAEAE7003087FF /* page-map.c in Sources */,
+				9D7A430313FAEB42003087FF /* row-id.c in Sources */,
+				9D7A430413FAEB43003087FF /* row-len.c in Sources */,
+				9D7A430513FAEB49003087FF /* fixed-row-len.c in Sources */,
+				9D7A430613FAEB93003087FF /* merge.c in Sources */,
+				9D7A430713FAEB99003087FF /* split.c in Sources */,
+				9D7A430813FAEBA0003087FF /* compare.c in Sources */,
+				9D7A430913FAEBAE003087FF /* meta-attr-read.c in Sources */,
+				9D7A430B13FAEBB1003087FF /* meta-read.c in Sources */,
+				9D7A430C13FAEBB2003087FF /* meta-value.c in Sources */,
+				9D7A430D13FAEBBF003087FF /* environment-read.c in Sources */,
+				9D7A431013FAEC78003087FF /* cast.c in Sources */,
+				9D7A431113FAEC7A003087FF /* index_lookup.c in Sources */,
+				9D7A431213FAEC7B003087FF /* index_project.c in Sources */,
+				9D7A431313FAEC7C003087FF /* parameter-read.c in Sources */,
+				9D7A431413FAEC7D003087FF /* range-validate.c in Sources */,
+				9D7A431513FAEC7D003087FF /* redimension.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A431913FAED2E003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A431F13FAED40003087FF /* dbmgr.c in Sources */,
+				9D7A432013FAED47003087FF /* linker.c in Sources */,
+				9D7A432113FAED4E003087FF /* database.c in Sources */,
+				9D7A432213FAED5A003087FF /* table.c in Sources */,
+				9D7A432313FAED61003087FF /* cursor.c in Sources */,
+				9D7A432413FAED69003087FF /* column.c in Sources */,
+				9D7A432513FAED70003087FF /* prod.c in Sources */,
+				9D7A432613FAED79003087FF /* phys.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A433413FAEE0C003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A434213FAEE66003087FF /* wcolumn.c in Sources */,
+				9D7A434313FAEE67003087FF /* wcursor.c in Sources */,
+				9D7A434413FAEE68003087FF /* wdatabase.c in Sources */,
+				9D7A434513FAEE68003087FF /* wdbmgr.c in Sources */,
+				9D7A434613FAEE69003087FF /* wlinker.c in Sources */,
+				9D7A434713FAEE6A003087FF /* wphys.c in Sources */,
+				9D7A434813FAEE6B003087FF /* wprod.c in Sources */,
+				9D7A434913FAEE6C003087FF /* wtable.c in Sources */,
+				9D7A434B13FAEECB003087FF /* index_insert.c in Sources */,
+				9D7A434C13FAEED1003087FF /* meta-append.c in Sources */,
+				9D7A434D13FAEEDB003087FF /* meta-write.c in Sources */,
+				9D7A434E13FAEEE2003087FF /* meta-attr-write.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A435D13FAF1AE003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A439913FAF20E003087FF /* add-row-id.c in Sources */,
+				9D7A439A13FAF20E003087FF /* bit_or.c in Sources */,
+				9D7A439B13FAF20E003087FF /* bunzip.c in Sources */,
+				9D7A439D13FAF20E003087FF /* ceil.c in Sources */,
+				9D7A439F13FAF20E003087FF /* clip.c in Sources */,
+				9D7A43A013FAF20E003087FF /* cut.c in Sources */,
+				9D7A43A113FAF20E003087FF /* delta.c in Sources */,
+				9D7A43A213FAF20E003087FF /* deriv.c in Sources */,
+				9D7A43A313FAF20E003087FF /* diff.c in Sources */,
+				9D7A43A413FAF20E003087FF /* echo.c in Sources */,
+				9D7A43A613FAF20E003087FF /* exists.c in Sources */,
+				9D7A43A713FAF20E003087FF /* floor.c in Sources */,
+				9D7A43A913FAF20E003087FF /* funzip.c in Sources */,
+				9D7A43AB13FAF20E003087FF /* integral.c in Sources */,
+				9D7A43AC13FAF20E003087FF /* irzip.c in Sources */,
+				9D7A43B513FAF20E003087FF /* map.c in Sources */,
+				9D7A43B713FAF20E003087FF /* max.c in Sources */,
+				9D7A43B813FAF20E003087FF /* min.c in Sources */,
+				9D7A43B913FAF20E003087FF /* outlier-decoder.c in Sources */,
+				9D7A43BB13FAF20E003087FF /* pack.c in Sources */,
+				9D7A43BC13FAF20E003087FF /* paste.c in Sources */,
+				9D7A43BD13FAF20E003087FF /* rand_4na_2na.c in Sources */,
+				9D7A43BE13FAF20E003087FF /* rldecode.c in Sources */,
+				9D7A43C013FAF20E003087FF /* round.c in Sources */,
+				9D7A43C113FAF20E003087FF /* simple-sub-select.c in Sources */,
+				9D7A43C213FAF20E003087FF /* subtract-row-id.c in Sources */,
+				9D7A43C313FAF20E003087FF /* sum.c in Sources */,
+				9D7A43C413FAF20E003087FF /* trim.c in Sources */,
+				9D7A43C513FAF20E003087FF /* trunc.c in Sources */,
+				9D7A43C613FAF20E003087FF /* undelta.c in Sources */,
+				9D7A43C713FAF20E003087FF /* unpack.c in Sources */,
+				9D7A43C813FAF20E003087FF /* unzip.c in Sources */,
+				9D7A43C913FAF20E003087FF /* vec-sum.c in Sources */,
+				9DE55A28140E94CB00EA61C6 /* iunzip.c in Sources */,
+				9D320AB0142D02B000ACA5AA /* extract_token.c in Sources */,
+				9D320AB1142D02B000ACA5AA /* strtonum.c in Sources */,
+				9D320AB6142D02E600ACA5AA /* sprintf.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A440913FAF315003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A441413FAF3B5003087FF /* qual4_decode.c in Sources */,
+				9D7A441513FAF3B5003087FF /* format-spot-name.c in Sources */,
+				9D7A441713FAF3B5003087FF /* fpcodec.c in Sources */,
+				9D7A441813FAF3B5003087FF /* v0-decompress-init.c in Sources */,
+				9D7A441913FAF3B5003087FF /* extract-coordinates.c in Sources */,
+				9D7A441C13FAF3B5003087FF /* untyped.c in Sources */,
+				9D7A441D13FAF3B5003087FF /* color-from-dna.c in Sources */,
+				9D7A441E13FAF3B5003087FF /* tokenize-spot_name-454.c in Sources */,
+				9D7A441F13FAF3B5003087FF /* process-position.c in Sources */,
+				9D7A442113FAF3B5003087FF /* bio-start.c in Sources */,
+				9D7A442213FAF3B5003087FF /* normalize.c in Sources */,
+				9D7A442313FAF3B5003087FF /* rewrite-spot-name.c in Sources */,
+				9D7A442513FAF3B5003087FF /* tokenize-spot_name-abi.c in Sources */,
+				9D7A442613FAF3B5003087FF /* tokenize-spot_name-ion-torrent.c in Sources */,
+				9D7A442713FAF3B5003087FF /* v0-decompress.c in Sources */,
+				9D7A442913FAF3B5003087FF /* swap.c in Sources */,
+				9D7A442A13FAF3B5003087FF /* spot-desc.c in Sources */,
+				9D7A442B13FAF3B5003087FF /* tokenize-spot_name-helicos.c in Sources */,
+				9D7A442C13FAF3B5003087FF /* denormalize.c in Sources */,
+				9D7A442D13FAF3B5003087FF /* make-position.c in Sources */,
+				9D7A442F13FAF3B5003087FF /* tokenize-spot_name-illumina.c in Sources */,
+				9D7A443013FAF3B5003087FF /* dna-from-color.c in Sources */,
+				9D7A443113FAF3B5003087FF /* index_lookup.c in Sources */,
+				9D7A443313FAF3B5003087FF /* extract-name_coord.c in Sources */,
+				9D7A443513FAF3B5003087FF /* v0-funcs.c in Sources */,
+				9D7A443613FAF3B5003087FF /* rotate.c in Sources */,
+				9D7A443813FAF3B5003087FF /* read-seg-from-readn.c in Sources */,
+				9D7A443A13FAF3B5003087FF /* dynamic-454-read-descriptor.c in Sources */,
+				9D7A443D13FAF3B5003087FF /* read-desc.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A448913FAF555003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A448F13FAF56D003087FF /* seq-restore-read.c in Sources */,
+				9D7A449013FAF56D003087FF /* raw-restore-read.c in Sources */,
+				9D7A449113FAF56D003087FF /* align-restore-read.c in Sources */,
+				9D7A449213FAF56D003087FF /* ref-tbl-sub-select.c in Sources */,
+				9D7A449313FAF56D003087FF /* align-local_ref_id.c in Sources */,
+				9D7A449413FAF56D003087FF /* align-ref-pos.c in Sources */,
+				9D7A449613FAF56D003087FF /* align-ref-seq-id.c in Sources */,
+				9D7A449713FAF56D003087FF /* cigar.c in Sources */,
+				9D7A449813FAF56D003087FF /* align-ref-name.c in Sources */,
+				9D7A449913FAF56D003087FF /* template-len.c in Sources */,
+				9D7A449A13FAF56D003087FF /* get-sam-flags.c in Sources */,
+				9D7A449B13FAF56D003087FF /* ref-restore-read.c in Sources */,
+				9D7A449C13FAF56D003087FF /* align-local_ref_start.c in Sources */,
+				9D7A449D13FAF56D003087FF /* project_read_from_sequence.c in Sources */,
+				9D7A449E13FAF56D003087FF /* not-my-row.c in Sources */,
+				9DE55A79140EA19500EA61C6 /* raw-restore-qual.c in Sources */,
+				9DE55A85140EA93600EA61C6 /* generate-mismatch-qual.c in Sources */,
+				9DE55AAF140EC79C00EA61C6 /* mismatch-restore-qual.c in Sources */,
+				9D4DCEAC1423FD9600881098 /* ref-preserve_qual.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A44BD13FB04A9003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A44C913FB04C2003087FF /* reader-cmn.c in Sources */,
+				9D7A44CA13FB04C2003087FF /* refseq-mgr.c in Sources */,
+				9D7A44CB13FB04C2003087FF /* reader-refseq.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A452C13FB0A3C003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A453413FB0A5A003087FF /* bzip.c in Sources */,
+				9D7A453513FB0A5D003087FF /* checksum.c in Sources */,
+				9D7A453613FB0A65003087FF /* fzip.c in Sources */,
+				9D7A453813FB0A7A003087FF /* outlier-encoder.c in Sources */,
+				9D7A453913FB0A82003087FF /* rlencode.c in Sources */,
+				9D7A453A13FB0A8E003087FF /* zip.c in Sources */,
+				9D7A458113FB0C53003087FF /* exists.c in Sources */,
+				9D7A458213FB0C53003087FF /* bunzip.c in Sources */,
+				9D7A458313FB0C53003087FF /* trim.c in Sources */,
+				9D7A458413FB0C53003087FF /* rldecode.c in Sources */,
+				9D7A458513FB0C53003087FF /* ceil.c in Sources */,
+				9D7A458713FB0C53003087FF /* paste.c in Sources */,
+				9D7A458813FB0C53003087FF /* max.c in Sources */,
+				9D7A458913FB0C53003087FF /* vec-sum.c in Sources */,
+				9D7A458A13FB0C53003087FF /* echo.c in Sources */,
+				9D7A458B13FB0C53003087FF /* add-row-id.c in Sources */,
+				9D7A458C13FB0C53003087FF /* delta.c in Sources */,
+				9D7A458D13FB0C53003087FF /* floor.c in Sources */,
+				9D7A458E13FB0C53003087FF /* subtract-row-id.c in Sources */,
+				9D7A458F13FB0C53003087FF /* outlier-decoder.c in Sources */,
+				9D7A459013FB0C53003087FF /* deriv.c in Sources */,
+				9D7A459113FB0C53003087FF /* bit_or.c in Sources */,
+				9D7A459313FB0C53003087FF /* irzip.c in Sources */,
+				9D7A459413FB0C53003087FF /* map.c in Sources */,
+				9D7A459513FB0C53003087FF /* pack.c in Sources */,
+				9D7A459613FB0C53003087FF /* sum.c in Sources */,
+				9D7A459713FB0C53003087FF /* unpack.c in Sources */,
+				9D7A459813FB0C53003087FF /* simple-sub-select.c in Sources */,
+				9D7A459913FB0C53003087FF /* rand_4na_2na.c in Sources */,
+				9D7A459A13FB0C53003087FF /* min.c in Sources */,
+				9D7A459B13FB0C53003087FF /* trunc.c in Sources */,
+				9D7A459C13FB0C53003087FF /* round.c in Sources */,
+				9D7A459D13FB0C53003087FF /* integral.c in Sources */,
+				9D7A459E13FB0C53003087FF /* cut.c in Sources */,
+				9D7A459F13FB0C53003087FF /* funzip.c in Sources */,
+				9D7A45A013FB0C53003087FF /* unzip.c in Sources */,
+				9D7A45A113FB0C53003087FF /* undelta.c in Sources */,
+				9D7A45A213FB0C53003087FF /* clip.c in Sources */,
+				9D7A45A313FB0C53003087FF /* diff.c in Sources */,
+				9DE55A23140E94B700EA61C6 /* iunzip.c in Sources */,
+				9D320AB2142D02B000ACA5AA /* extract_token.c in Sources */,
+				9D320AB3142D02B000ACA5AA /* strtonum.c in Sources */,
+				9D320AB7142D02E600ACA5AA /* sprintf.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A454813FB0B4D003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A454E13FB0B5F003087FF /* extract-name_fmt.c in Sources */,
+				9D7A454F13FB0B60003087FF /* extract-spot_name.c in Sources */,
+				9D7A455013FB0B6C003087FF /* stats.c in Sources */,
+				9D7A455113FB0B6C003087FF /* stats_quality.c in Sources */,
+				9D7A455213FB0B76003087FF /* qual4_encode.c in Sources */,
+				9D7A455B13FB0BCE003087FF /* qual4_decode.c in Sources */,
+				9D7A455C13FB0BCE003087FF /* format-spot-name.c in Sources */,
+				9D7A455D13FB0BCE003087FF /* fpcodec.c in Sources */,
+				9D7A455E13FB0BCE003087FF /* v0-decompress-init.c in Sources */,
+				9D7A455F13FB0BCE003087FF /* extract-coordinates.c in Sources */,
+				9D7A456013FB0BCE003087FF /* untyped.c in Sources */,
+				9D7A456113FB0BCE003087FF /* color-from-dna.c in Sources */,
+				9D7A456213FB0BCE003087FF /* tokenize-spot_name-454.c in Sources */,
+				9D7A456313FB0BCE003087FF /* process-position.c in Sources */,
+				9D7A456513FB0BCE003087FF /* bio-start.c in Sources */,
+				9D7A456613FB0BCE003087FF /* normalize.c in Sources */,
+				9D7A456713FB0BCE003087FF /* rewrite-spot-name.c in Sources */,
+				9D7A456813FB0BCE003087FF /* v0-decompress.c in Sources */,
+				9D7A456913FB0BCE003087FF /* tokenize-spot_name-abi.c in Sources */,
+				9D7A456A13FB0BCE003087FF /* tokenize-spot_name-ion-torrent.c in Sources */,
+				9D7A456B13FB0BCE003087FF /* swap.c in Sources */,
+				9D7A456C13FB0BCE003087FF /* spot-desc.c in Sources */,
+				9D7A456D13FB0BCE003087FF /* tokenize-spot_name-helicos.c in Sources */,
+				9D7A456E13FB0BCE003087FF /* denormalize.c in Sources */,
+				9D7A456F13FB0BCE003087FF /* make-position.c in Sources */,
+				9D7A457013FB0BCE003087FF /* tokenize-spot_name-illumina.c in Sources */,
+				9D7A457113FB0BCE003087FF /* dna-from-color.c in Sources */,
+				9D7A457213FB0BCE003087FF /* index_lookup.c in Sources */,
+				9D7A457313FB0BCE003087FF /* extract-name_coord.c in Sources */,
+				9D7A457413FB0BCE003087FF /* v0-funcs.c in Sources */,
+				9D7A457513FB0BCE003087FF /* rotate.c in Sources */,
+				9D7A457613FB0BCE003087FF /* read-seg-from-readn.c in Sources */,
+				9D7A457713FB0BCE003087FF /* dynamic-454-read-descriptor.c in Sources */,
+				9D7A457813FB0BCE003087FF /* read-desc.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45B013FB0CB8003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A45B113FB0CB8003087FF /* seq-restore-read.c in Sources */,
+				9D7A45B213FB0CB8003087FF /* raw-restore-read.c in Sources */,
+				9D7A45B313FB0CB8003087FF /* align-restore-read.c in Sources */,
+				9D7A45B413FB0CB8003087FF /* ref-tbl-sub-select.c in Sources */,
+				9D7A45B513FB0CB8003087FF /* align-local_ref_id.c in Sources */,
+				9D7A45B613FB0CB8003087FF /* align-ref-pos.c in Sources */,
+				9D7A45B713FB0CB8003087FF /* align-ref-seq-id.c in Sources */,
+				9D7A45B813FB0CB8003087FF /* cigar.c in Sources */,
+				9D7A45B913FB0CB8003087FF /* align-ref-name.c in Sources */,
+				9D7A45BA13FB0CB8003087FF /* template-len.c in Sources */,
+				9D7A45BB13FB0CB8003087FF /* get-sam-flags.c in Sources */,
+				9D7A45BC13FB0CB8003087FF /* ref-restore-read.c in Sources */,
+				9D7A45BD13FB0CB8003087FF /* align-local_ref_start.c in Sources */,
+				9D7A45BE13FB0CB8003087FF /* project_read_from_sequence.c in Sources */,
+				9D7A45BF13FB0CB8003087FF /* not-my-row.c in Sources */,
+				9D7A45C813FB0CE4003087FF /* refseq-stats.c in Sources */,
+				9DE55A7A140EA1CA00EA61C6 /* raw-restore-qual.c in Sources */,
+				9DE55A86140EA93600EA61C6 /* generate-mismatch-qual.c in Sources */,
+				9DE55AB0140EC79C00EA61C6 /* mismatch-restore-qual.c in Sources */,
+				9D4DCEAD1423FD9600881098 /* ref-preserve_qual.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A45D913FB0D50003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A45DC13FB0D50003087FF /* reader-cmn.c in Sources */,
+				9D7A45DD13FB0D50003087FF /* refseq-mgr.c in Sources */,
+				9D7A45DE13FB0D50003087FF /* reader-refseq.c in Sources */,
+				9D7A45EA13FB0D95003087FF /* writer-alignment.c in Sources */,
+				9D7A45EB13FB0D95003087FF /* writer-reference.c in Sources */,
+				9D7A45EC13FB0D95003087FF /* writer-ref.c in Sources */,
+				9D7A45ED13FB0D95003087FF /* writer-refseq.c in Sources */,
+				9D7A45EE13FB0D95003087FF /* writer-cmn.c in Sources */,
+				9D7A45EF13FB0D95003087FF /* writer-sequence.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A460413FB0F36003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A460A13FB0F52003087FF /* progressbar.c in Sources */,
+				9D7A460B13FB0F52003087FF /* main.c in Sources */,
+				9D7A460C13FB0F52003087FF /* args.c in Sources */,
+				9D7A460D13FB0F52003087FF /* sysmain.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D7A461113FB1133003087FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D7A461813FB1140003087FF /* deseq.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		9D4DCEDC1423FF6E00881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A433613FAEE0C003087FF /* wvdb */;
+			targetProxy = 9D4DCEDB1423FF6E00881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEE21424001400881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A426713FAE69A003087FF /* wkdb */;
+			targetProxy = 9D4DCEE11424001400881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEE41424001C00881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D4DCEE31424001C00881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEE71424007400881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A433613FAEE0C003087FF /* wvdb */;
+			targetProxy = 9D4DCEE61424007400881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEE91424007F00881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A426713FAE69A003087FF /* wkdb */;
+			targetProxy = 9D4DCEE81424007F00881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEEB1424008500881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D4DCEEA1424008500881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEED142400B400881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A433613FAEE0C003087FF /* wvdb */;
+			targetProxy = 9D4DCEEC142400B400881098 /* PBXContainerItemProxy */;
+		};
+		9D4DCEEF142400B900881098 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A426713FAE69A003087FF /* wkdb */;
+			targetProxy = 9D4DCEEE142400B900881098 /* PBXContainerItemProxy */;
+		};
+		9D7A423813FAE3FD003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A417713FAE192003087FF /* kdb-cmn */;
+			targetProxy = 9D7A423713FAE3FD003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A428413FAE9A0003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A417713FAE192003087FF /* kdb-cmn */;
+			targetProxy = 9D7A428313FAE9A0003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A446913FAF4A9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A431B13FAED2E003087FF /* vdb */;
+			targetProxy = 9D7A446813FAF4A9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A446D13FAF4B3003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A423313FAE3F5003087FF /* kdb */;
+			targetProxy = 9D7A446C13FAF4B3003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A446F13FAF4B6003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A446E13FAF4B6003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44E013FB0546003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A44BF13FB04A9003087FF /* align */;
+			targetProxy = 9D7A44DF13FB0546003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44E213FB0551003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A431B13FAED2E003087FF /* vdb */;
+			targetProxy = 9D7A44E113FB0551003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44E613FB0561003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44E513FB0561003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44E813FB057E003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44E713FB057E003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44EA13FB0582003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A431B13FAED2E003087FF /* vdb */;
+			targetProxy = 9D7A44E913FB0582003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44EC13FB0597003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A431B13FAED2E003087FF /* vdb */;
+			targetProxy = 9D7A44EB13FB0597003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44EE13FB0597003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A423313FAE3F5003087FF /* kdb */;
+			targetProxy = 9D7A44ED13FB0597003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44F013FB0597003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44EF13FB0597003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44F213FB05A9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A423313FAE3F5003087FF /* kdb */;
+			targetProxy = 9D7A44F113FB05A9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44F413FB05A9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44F313FB05A9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44F613FB05C9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A426713FAE69A003087FF /* wkdb */;
+			targetProxy = 9D7A44F513FB05C9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44F813FB05C9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44F713FB05C9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44FA13FB05C9003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A415B13FAE00E003087FF /* kmproc */;
+			targetProxy = 9D7A44F913FB05C9003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44FC13FB05EB003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44FB13FB05EB003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A44FE13FB05F2003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A44FD13FB05F2003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A450613FB06AB003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A428813FAE9B5003087FF /* vdb-cmn */;
+			targetProxy = 9D7A450513FB06AB003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A450813FB06BD003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A428813FAE9B5003087FF /* vdb-cmn */;
+			targetProxy = 9D7A450713FB06BD003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A45A913FB0CB8003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A45AA13FB0CB8003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A45AD13FB0CB8003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A44BF13FB04A9003087FF /* align */;
+			targetProxy = 9D7A45AE13FB0CB8003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A45D213FB0D50003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9D7A45D313FB0D50003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A45D413FB0D50003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A423313FAE3F5003087FF /* kdb */;
+			targetProxy = 9D7A45D513FB0D50003087FF /* PBXContainerItemProxy */;
+		};
+		9D7A45D613FB0D50003087FF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A431B13FAED2E003087FF /* vdb */;
+			targetProxy = 9D7A45D713FB0D50003087FF /* PBXContainerItemProxy */;
+		};
+		9DE55931140D82BC00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A460613FB0F36003087FF /* kapp */;
+			targetProxy = 9DE55930140D82BC00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55933140D82BC00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A433613FAEE0C003087FF /* wvdb */;
+			targetProxy = 9DE55932140D82BC00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55935140D82CD00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D31EC98117667FA003CDA5E /* klib */;
+			targetProxy = 9DE55934140D82CD00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55A96140EAC9E00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A45A813FB0CB8003087FF /* waxf */;
+			targetProxy = 9DE55A95140EAC9E00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55A98140EAC9E00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A454A13FB0B4D003087FF /* wsraxf */;
+			targetProxy = 9DE55A97140EAC9E00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55A9A140EAC9E00EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A452E13FB0A3C003087FF /* wvxf */;
+			targetProxy = 9DE55A99140EAC9E00EA61C6 /* PBXContainerItemProxy */;
+		};
+		9DE55AFE140EF0C800EA61C6 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D7A426713FAE69A003087FF /* wkdb */;
+			targetProxy = 9DE55AFD140EF0C800EA61C6 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB928A08733DD80010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_ENABLE_CPP_RTTI = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = NO;
+				GCC_ENABLE_PASCAL_STRINGS = YES;
+				GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"_LOGGING=1",
+					MAC,
+					_DEBUGGING,
+				);
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+				GCC_WARN_PEDANTIC = YES;
+				GCC_WARN_SIGN_COMPARE = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					../../../interfaces/os/mac,
+					../../../interfaces/os/bsd,
+					../../../interfaces/os/unix,
+					../../../interfaces/cc/gcc/$arch,
+					../../../interfaces/cc/gcc,
+					../../../interfaces,
+					/usr/include/libxml2,
+				);
+				ONLY_ACTIVE_ARCH = YES;
+				PREBINDING = NO;
+				SDKROOT = macosx10.6;
+			};
+			name = Debug;
+		};
+		1DEB928B08733DD80010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_AUTO_VECTORIZATION = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_ENABLE_CPP_RTTI = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = NO;
+				GCC_ENABLE_SSE3_EXTENSIONS = YES;
+				GCC_FAST_OBJC_DISPATCH = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = "";
+				GCC_OBJC_CALL_CXX_CDTORS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"_LOGGING=1",
+					MAC,
+				);
+				GCC_THUMB_SUPPORT = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+				GCC_WARN_PROTOTYPE_CONVERSION = NO;
+				GCC_WARN_SIGN_COMPARE = NO;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
+				GCC_WARN_UNUSED_VARIABLE = NO;
+				HEADER_SEARCH_PATHS = (
+					../../../interfaces/os/mac,
+					../../../interfaces/os/bsd,
+					../../../interfaces/os/unix,
+					../../../interfaces/cc/gcc/$arch,
+					../../../interfaces/cc/gcc,
+					../../../interfaces,
+					/usr/include/libxml2,
+				);
+				LLVM_LTO = NO;
+				PREBINDING = NO;
+				SDKROOT = macosx10.6;
+				VALID_ARCHS = "i386 x86_64";
+			};
+			name = Release;
+		};
+		9D31EC9A117667FB003CDA5E /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = "";
+				LD_DYLIB_INSTALL_NAME = "";
+				LD_OPENMP_FLAGS = "";
+				PREBINDING = NO;
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_NAME = klib;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
+			};
+			name = Debug;
+		};
+		9D31EC9B117667FB003CDA5E /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = "";
+				INSTALL_PATH = "";
+				LD_DYLIB_INSTALL_NAME = "";
+				LD_OPENMP_FLAGS = "";
+				LLVM_LTO = NO;
+				PREBINDING = NO;
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_NAME = klib;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7357F411779B2B009EA3E4 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = "make-env";
+			};
+			name = Debug;
+		};
+		9D7357F511779B2B009EA3E4 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				PRODUCT_NAME = "make-env";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A412F13FADF3B003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = ksproc;
+			};
+			name = Debug;
+		};
+		9D7A413013FADF3B003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = ksproc;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A415D13FAE00E003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kmproc;
+			};
+			name = Debug;
+		};
+		9D7A415E13FAE00E003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kmproc;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A417913FAE192003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = "kdb-cmn";
+			};
+			name = Debug;
+		};
+		9D7A417A13FAE192003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = "kdb-cmn";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A423513FAE3F5003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kdb;
+			};
+			name = Debug;
+		};
+		9D7A423613FAE3F5003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A426913FAE69A003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wkdb;
+			};
+			name = Debug;
+		};
+		9D7A426A13FAE69A003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wkdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A428A13FAE9B5003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = "vdb-cmn";
+			};
+			name = Debug;
+		};
+		9D7A428B13FAE9B5003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = "vdb-cmn";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A431D13FAED2F003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vdb;
+			};
+			name = Debug;
+		};
+		9D7A431E13FAED2F003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A433813FAEE0C003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wvdb;
+			};
+			name = Debug;
+		};
+		9D7A433913FAEE0C003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wvdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A436113FAF1AE003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vxf;
+			};
+			name = Debug;
+		};
+		9D7A436213FAF1AE003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vxf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A440D13FAF315003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = sraxf;
+			};
+			name = Debug;
+		};
+		9D7A440E13FAF315003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = sraxf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A448D13FAF555003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = axf;
+			};
+			name = Debug;
+		};
+		9D7A448E13FAF555003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = axf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A44C113FB04A9003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = align;
+			};
+			name = Debug;
+		};
+		9D7A44C213FB04A9003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = align;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A453013FB0A3D003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wvxf;
+			};
+			name = Debug;
+		};
+		9D7A453113FB0A3D003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wvxf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A454C13FB0B4E003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wsraxf;
+			};
+			name = Debug;
+		};
+		9D7A454D13FB0B4E003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wsraxf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A45C513FB0CB8003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = waxf;
+			};
+			name = Debug;
+		};
+		9D7A45C613FB0CB8003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = waxf;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A45E513FB0D50003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = walign;
+			};
+			name = Debug;
+		};
+		9D7A45E613FB0D50003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = walign;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A460813FB0F36003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kapp;
+			};
+			name = Debug;
+		};
+		9D7A460913FB0F36003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kapp;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D7A461613FB1133003087FF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				PREBINDING = NO;
+				PRODUCT_NAME = deseq;
+			};
+			name = Debug;
+		};
+		9D7A461713FB1133003087FF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				PREBINDING = NO;
+				PRODUCT_NAME = deseq;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "asm-trace" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB928A08733DD80010E9CD /* Debug */,
+				1DEB928B08733DD80010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D31ECBB11766836003CDA5E /* Build configuration list for PBXNativeTarget "klib" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D31EC9A117667FB003CDA5E /* Debug */,
+				9D31EC9B117667FB003CDA5E /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7357F611779B49009EA3E4 /* Build configuration list for PBXAggregateTarget "make-env" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7357F411779B2B009EA3E4 /* Debug */,
+				9D7357F511779B2B009EA3E4 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A414713FADF98003087FF /* Build configuration list for PBXNativeTarget "ksproc" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A412F13FADF3B003087FF /* Debug */,
+				9D7A413013FADF3B003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A417013FAE0A5003087FF /* Build configuration list for PBXNativeTarget "kmproc" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A415D13FAE00E003087FF /* Debug */,
+				9D7A415E13FAE00E003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A417C13FAE1A2003087FF /* Build configuration list for PBXNativeTarget "kdb-cmn" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A417913FAE192003087FF /* Debug */,
+				9D7A417A13FAE192003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A423A13FAE42A003087FF /* Build configuration list for PBXNativeTarget "kdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A423513FAE3F5003087FF /* Debug */,
+				9D7A423613FAE3F5003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A427313FAE709003087FF /* Build configuration list for PBXNativeTarget "wkdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A426913FAE69A003087FF /* Debug */,
+				9D7A426A13FAE69A003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A428D13FAE9C5003087FF /* Build configuration list for PBXNativeTarget "vdb-cmn" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A428A13FAE9B5003087FF /* Debug */,
+				9D7A428B13FAE9B5003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A432713FAED97003087FF /* Build configuration list for PBXNativeTarget "vdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A431D13FAED2F003087FF /* Debug */,
+				9D7A431E13FAED2F003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A434A13FAEE8A003087FF /* Build configuration list for PBXNativeTarget "wvdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A433813FAEE0C003087FF /* Debug */,
+				9D7A433913FAEE0C003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A436413FAF1B4003087FF /* Build configuration list for PBXNativeTarget "vxf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A436113FAF1AE003087FF /* Debug */,
+				9D7A436213FAF1AE003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A441013FAF333003087FF /* Build configuration list for PBXNativeTarget "sraxf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A440D13FAF315003087FF /* Debug */,
+				9D7A440E13FAF315003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A44A913FAF5C7003087FF /* Build configuration list for PBXNativeTarget "axf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A448D13FAF555003087FF /* Debug */,
+				9D7A448E13FAF555003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A44FF13FB0621003087FF /* Build configuration list for PBXNativeTarget "align" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A44C113FB04A9003087FF /* Debug */,
+				9D7A44C213FB04A9003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A454613FB0AF3003087FF /* Build configuration list for PBXNativeTarget "wvxf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A453013FB0A3D003087FF /* Debug */,
+				9D7A453113FB0A3D003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A455A13FB0BAF003087FF /* Build configuration list for PBXNativeTarget "wsraxf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A454C13FB0B4E003087FF /* Debug */,
+				9D7A454D13FB0B4E003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A45C413FB0CB8003087FF /* Build configuration list for PBXNativeTarget "waxf" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A45C513FB0CB8003087FF /* Debug */,
+				9D7A45C613FB0CB8003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A45E413FB0D50003087FF /* Build configuration list for PBXNativeTarget "walign" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A45E513FB0D50003087FF /* Debug */,
+				9D7A45E613FB0D50003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A460F13FB0F69003087FF /* Build configuration list for PBXNativeTarget "kapp" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A460813FB0F36003087FF /* Debug */,
+				9D7A460913FB0F36003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D7A461C13FB116A003087FF /* Build configuration list for PBXNativeTarget "deseq" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D7A461613FB1133003087FF /* Debug */,
+				9D7A461713FB1133003087FF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/build/Xcode/old-toolkit/.gitignore b/build/Xcode/old-toolkit/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/build/Xcode/old-toolkit/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/build/Xcode/old-toolkit/old-toolkit.xcodeproj/project.pbxproj b/build/Xcode/old-toolkit/old-toolkit.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..0f58a7e
--- /dev/null
+++ b/build/Xcode/old-toolkit/old-toolkit.xcodeproj/project.pbxproj
@@ -0,0 +1,2153 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 44;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		9D1A14B5119D934300EF212F /* bamtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1A14AB119D931800EF212F /* bamtest.c */; };
+		9D1A14B6119D934A00EF212F /* BAMFile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1A14A8119D922100EF212F /* BAMFile.c */; };
+		9D1A14BF119D93BC00EF212F /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D1A14C2119D93D100EF212F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65E5AA1174E29F00F3579B /* sra2kdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5A91174E29F00F3579B /* sra2kdb.c */; };
+		9D65E5B71174E2D100F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65E5B81174E2D100F3579B /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B51174E2D100F3579B /* libbz2.dylib */; };
+		9D65E5B91174E2D100F3579B /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B61174E2D100F3579B /* libxml2.dylib */; };
+		9D65E8A111762C9B00F3579B /* arc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5CF1174E2DB00F3579B /* arc.c */; };
+		9D65E8A311762C9C00F3579B /* bstpersist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5BD1174E2DB00F3579B /* bstpersist.c */; };
+		9D65E8A411762C9C00F3579B /* buffile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D01174E2DB00F3579B /* buffile.c */; };
+		9D65E8A511762C9D00F3579B /* bzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D11174E2DB00F3579B /* bzip.c */; };
+		9D65E8A611762C9D00F3579B /* container.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5BE1174E2DB00F3579B /* container.c */; };
+		9D65E8A711762C9E00F3579B /* countfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D21174E2DB00F3579B /* countfile.c */; };
+		9D65E8A811762C9F00F3579B /* cp1252.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5EC1174E2DB00F3579B /* cp1252.c */; };
+		9D65E8A911762CA000F3579B /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D31174E2DB00F3579B /* crc32.c */; };
+		9D65E8AA11762CA000F3579B /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C81174E2DB00F3579B /* crc32.c */; };
+		9D65E8AB11762CA100F3579B /* dir_test.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D41174E2DB00F3579B /* dir_test.c */; };
+		9D65E8AC11762CA200F3579B /* directory.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D51174E2DB00F3579B /* directory.c */; };
+		9D65E8AD11762CA200F3579B /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D61174E2DB00F3579B /* file.c */; };
+		9D65E8AF11762CA300F3579B /* gzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D71174E2DB00F3579B /* gzip.c */; };
+		9D65E8B011762CA400F3579B /* iso8859-1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5ED1174E2DB00F3579B /* iso8859-1.c */; };
+		9D65E8B111762CA500F3579B /* iso8859.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5EE1174E2DB00F3579B /* iso8859.c */; };
+		9D65E8B211762CA500F3579B /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D81174E2DB00F3579B /* md5.c */; };
+		9D65E8B311762CA600F3579B /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C91174E2DB00F3579B /* md5.c */; };
+		9D65E8B411762CA600F3579B /* namelist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5BF1174E2DB00F3579B /* namelist.c */; };
+		9D65E8B511762CA700F3579B /* nullfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5D91174E2DB00F3579B /* nullfile.c */; };
+		9D65E8B611762CA800F3579B /* pbstree.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C01174E2DB00F3579B /* pbstree.c */; };
+		9D65E8B711762CA800F3579B /* ptpersist.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C11174E2DB00F3579B /* ptpersist.c */; };
+		9D65E8B811762CA900F3579B /* ptrie.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C21174E2DB00F3579B /* ptrie.c */; };
+		9D65E8B911762CAA00F3579B /* queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C31174E2DB00F3579B /* queue.c */; };
+		9D65E8BB11762CBC00F3579B /* sra.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DA1174E2DB00F3579B /* sra.c */; };
+		9D65E8BC11762CBC00F3579B /* stbarrier.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E41174E2DB00F3579B /* stbarrier.c */; };
+		9D65E8BD11762CBD00F3579B /* stcond.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E51174E2DB00F3579B /* stcond.c */; };
+		9D65E8BE11762CBE00F3579B /* stlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E61174E2DB00F3579B /* stlock.c */; };
+		9D65E8BF11762CBE00F3579B /* stsem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E71174E2DB00F3579B /* stsem.c */; };
+		9D65E8C011762CBF00F3579B /* stthread.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E81174E2DB00F3579B /* stthread.c */; };
+		9D65E8C111762CBF00F3579B /* sttimeout.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E91174E2DB00F3579B /* sttimeout.c */; };
+		9D65E8C211762CC000F3579B /* subfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DB1174E2DB00F3579B /* subfile.c */; };
+		9D65E8C311762CC000F3579B /* symtab.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5EF1174E2DB00F3579B /* symtab.c */; };
+		9D65E8C411762CC100F3579B /* sysdir.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5CB1174E2DB00F3579B /* sysdir.c */; };
+		9D65E8C511762CC200F3579B /* sysdll.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5CC1174E2DB00F3579B /* sysdll.c */; };
+		9D65E8C611762CC300F3579B /* sysfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5CD1174E2DB00F3579B /* sysfile.c */; };
+		9D65E8C711762CC300F3579B /* sysmmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5CE1174E2DB00F3579B /* sysmmap.c */; };
+		9D65E8C811762CC400F3579B /* tar.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DC1174E2DB00F3579B /* tar.c */; };
+		9D65E8C911762CC500F3579B /* teefile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DD1174E2DB00F3579B /* teefile.c */; };
+		9D65E8CA11762CC500F3579B /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F01174E2DB00F3579B /* text.c */; };
+		9D65E8CB11762CC600F3579B /* toc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DE1174E2DB00F3579B /* toc.c */; };
+		9D65E8CC11762CC600F3579B /* tocdir.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5DF1174E2DB00F3579B /* tocdir.c */; };
+		9D65E8CD11762CC700F3579B /* tocentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E01174E2DB00F3579B /* tocentry.c */; };
+		9D65E8CE11762CC700F3579B /* tocfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5E11174E2DB00F3579B /* tocfile.c */; };
+		9D65E8CF11762CC800F3579B /* token.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F11174E2DB00F3579B /* token.c */; };
+		9D65E8D011762CCA00F3579B /* trie.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C41174E2DB00F3579B /* trie.c */; };
+		9D65E8D111762CCA00F3579B /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F21174E2DB00F3579B /* utf8.c */; };
+		9D65E8D211762CCB00F3579B /* vector.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5C61174E2DB00F3579B /* vector.c */; };
+		9D65E8D311762CCB00F3579B /* xml.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F51174E2DB00F3579B /* xml.c */; };
+		9D65E8D711762D1600F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65E8D811762D1E00F3579B /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B51174E2D100F3579B /* libbz2.dylib */; };
+		9D65E8D911762D2200F3579B /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B61174E2D100F3579B /* libxml2.dylib */; };
+		9D65E90011762F2900F3579B /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E77A1174E6F000F3579B /* log.c */; };
+		9D65E90111762F2A00F3579B /* syslog.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7841174E6FA00F3579B /* syslog.c */; };
+		9D65E90211762F2A00F3579B /* text-log.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E77E1174E6F000F3579B /* text-log.c */; };
+		9D65E90811762F6800F3579B /* rc-tbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E77D1174E6F000F3579B /* rc-tbl.c */; };
+		9D65E90B11762F8200F3579B /* rc-idx-tbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E77C1174E6F000F3579B /* rc-idx-tbl.c */; };
+		9D65E9131176300200F3579B /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E77B1174E6F000F3579B /* main.c */; };
+		9D65E9141176300300F3579B /* sysmain.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7851174E6FA00F3579B /* sysmain.c */; };
+		9D65E9401176309200F3579B /* coldata.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6211174E2DB00F3579B /* coldata.c */; };
+		9D65E9411176309200F3579B /* colidx.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6221174E2DB00F3579B /* colidx.c */; };
+		9D65E9421176309200F3579B /* colidx0.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6231174E2DB00F3579B /* colidx0.c */; };
+		9D65E9431176309300F3579B /* colidx1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6241174E2DB00F3579B /* colidx1.c */; };
+		9D65E9441176309400F3579B /* colidx2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6251174E2DB00F3579B /* colidx2.c */; };
+		9D65E9451176309400F3579B /* column.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6261174E2DB00F3579B /* column.c */; };
+		9D65E9461176309500F3579B /* database.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6271174E2DB00F3579B /* database.c */; };
+		9D65E9471176309500F3579B /* dbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6281174E2DB00F3579B /* dbmgr.c */; };
+		9D65E9481176309600F3579B /* idxblk.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6291174E2DB00F3579B /* idxblk.c */; };
+		9D65E9491176309600F3579B /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62A1174E2DB00F3579B /* index.c */; };
+		9D65E94A1176309700F3579B /* kdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62B1174E2DB00F3579B /* kdb.c */; };
+		9D65E94B1176309800F3579B /* meta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62C1174E2DB00F3579B /* meta.c */; };
+		9D65E94C1176309900F3579B /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62D1174E2DB00F3579B /* table.c */; };
+		9D65E94D1176309900F3579B /* trieidx-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62E1174E2DB00F3579B /* trieidx-v1.c */; };
+		9D65E94E1176309A00F3579B /* trieidx-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E62F1174E2DB00F3579B /* trieidx-v2.c */; };
+		9D65E94F1176309B00F3579B /* u64idx-v3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6301174E2DB00F3579B /* u64idx-v3.c */; };
+		9D65E96C117630B300F3579B /* idxblk.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6291174E2DB00F3579B /* idxblk.c */; };
+		9D65E974117630B300F3579B /* wcoldata.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6311174E2DB00F3579B /* wcoldata.c */; };
+		9D65E975117630B300F3579B /* wcolidx.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6321174E2DB00F3579B /* wcolidx.c */; };
+		9D65E976117630B300F3579B /* wcolidx0.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6331174E2DB00F3579B /* wcolidx0.c */; };
+		9D65E977117630B300F3579B /* wcolidx1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6341174E2DB00F3579B /* wcolidx1.c */; };
+		9D65E978117630B300F3579B /* wcolidx2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6351174E2DB00F3579B /* wcolidx2.c */; };
+		9D65E979117630B300F3579B /* wcolumn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6361174E2DB00F3579B /* wcolumn.c */; };
+		9D65E97A117630B300F3579B /* wdatabase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6371174E2DB00F3579B /* wdatabase.c */; };
+		9D65E97B117630B300F3579B /* wdbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6381174E2DB00F3579B /* wdbmgr.c */; };
+		9D65E97C117630B300F3579B /* widxblk.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6391174E2DB00F3579B /* widxblk.c */; };
+		9D65E97D117630B300F3579B /* windex.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63A1174E2DB00F3579B /* windex.c */; };
+		9D65E97E117630B300F3579B /* wkdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63B1174E2DB00F3579B /* wkdb.c */; };
+		9D65E97F117630B300F3579B /* wmeta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63C1174E2DB00F3579B /* wmeta.c */; };
+		9D65E980117630B300F3579B /* wtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63D1174E2DB00F3579B /* wtable.c */; };
+		9D65E981117630B300F3579B /* wtrieidx-v1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63E1174E2DB00F3579B /* wtrieidx-v1.c */; };
+		9D65E982117630B300F3579B /* wtrieidx-v2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E63F1174E2DB00F3579B /* wtrieidx-v2.c */; };
+		9D65E983117630B300F3579B /* wu64idx-v3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6401174E2DB00F3579B /* wu64idx-v3.c */; };
+		9D65E9AC1176312E00F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65E9B1117631C700F3579B /* pack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6011174E2DB00F3579B /* pack.c */; };
+		9D65E9B2117631CC00F3579B /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6071174E2DB00F3579B /* unpack.c */; };
+		9D65E9DB1176327200F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65E9EA117632F500F3579B /* blob.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60A1174E2DB00F3579B /* blob.c */; };
+		9D65E9EB117632F600F3579B /* column-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60B1174E2DB00F3579B /* column-cmn.c */; };
+		9D65E9EC117632F600F3579B /* column.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60C1174E2DB00F3579B /* column.c */; };
+		9D65E9ED117632F700F3579B /* cursor-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60D1174E2DB00F3579B /* cursor-cmn.c */; settings = {COMPILER_FLAGS = "-DVCursorWhack=VCursorDestroy"; }; };
+		9D65E9EE117632F700F3579B /* database.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60E1174E2DB00F3579B /* database.c */; };
+		9D65E9EF117632F800F3579B /* dbmgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60F1174E2DB00F3579B /* dbmgr-cmn.c */; };
+		9D65E9F0117632F800F3579B /* dbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6101174E2DB00F3579B /* dbmgr.c */; };
+		9D65E9F1117632F900F3579B /* dtype.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6111174E2DB00F3579B /* dtype.c */; };
+		9D65E9F2117632F900F3579B /* loader.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6121174E2DB00F3579B /* loader.c */; };
+		9D65E9F3117632FA00F3579B /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6131174E2DB00F3579B /* parse.c */; };
+		9D65E9F4117632FB00F3579B /* schema-dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6141174E2DB00F3579B /* schema-dump.c */; };
+		9D65E9F5117632FB00F3579B /* schema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6151174E2DB00F3579B /* schema.c */; };
+		9D65E9F7117632FD00F3579B /* table-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6171174E2DB00F3579B /* table-cmn.c */; };
+		9D65E9F8117632FD00F3579B /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6181174E2DB00F3579B /* table.c */; };
+		9D65E9FE1176330000F3579B /* xform.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61E1174E2DB00F3579B /* xform.c */; };
+		9D65E9FF1176330100F3579B /* xfuncs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61F1174E2DB00F3579B /* xfuncs.c */; };
+		9D65EA041176330D00F3579B /* blob.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60A1174E2DB00F3579B /* blob.c */; };
+		9D65EA051176330D00F3579B /* column-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60B1174E2DB00F3579B /* column-cmn.c */; };
+		9D65EA071176330D00F3579B /* cursor-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60D1174E2DB00F3579B /* cursor-cmn.c */; };
+		9D65EA081176330D00F3579B /* database.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60E1174E2DB00F3579B /* database.c */; };
+		9D65EA091176330D00F3579B /* dbmgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E60F1174E2DB00F3579B /* dbmgr-cmn.c */; };
+		9D65EA0B1176330D00F3579B /* dtype.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6111174E2DB00F3579B /* dtype.c */; };
+		9D65EA0C1176330D00F3579B /* loader.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6121174E2DB00F3579B /* loader.c */; };
+		9D65EA0D1176330D00F3579B /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6131174E2DB00F3579B /* parse.c */; };
+		9D65EA0E1176330D00F3579B /* schema-dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6141174E2DB00F3579B /* schema-dump.c */; };
+		9D65EA0F1176330D00F3579B /* schema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6151174E2DB00F3579B /* schema.c */; };
+		9D65EA101176330D00F3579B /* static-column-temp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6161174E2DB00F3579B /* static-column-temp.c */; };
+		9D65EA111176330D00F3579B /* table-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6171174E2DB00F3579B /* table-cmn.c */; };
+		9D65EA131176330D00F3579B /* wcolumn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6191174E2DB00F3579B /* wcolumn.c */; };
+		9D65EA141176330D00F3579B /* wcursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61A1174E2DB00F3579B /* wcursor.c */; };
+		9D65EA151176330D00F3579B /* wdatabase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61B1174E2DB00F3579B /* wdatabase.c */; };
+		9D65EA161176330D00F3579B /* wdbmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61C1174E2DB00F3579B /* wdbmgr.c */; };
+		9D65EA171176330D00F3579B /* wtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61D1174E2DB00F3579B /* wtable.c */; };
+		9D65EA181176330D00F3579B /* xform.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61E1174E2DB00F3579B /* xform.c */; };
+		9D65EA191176330D00F3579B /* xfuncs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E61F1174E2DB00F3579B /* xfuncs.c */; };
+		9D65EA271176335200F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65EA2A1176335C00F3579B /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E988117630B300F3579B /* libwkdb.dylib */; };
+		9D65EA3F1176337C00F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65EA5C117633C600F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65EA5D117633C900F3579B /* libkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E91D1176303D00F3579B /* libkdb.dylib */; };
+		9D65EA641176340100F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65EA941176366D00F3579B /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65EA1E1176330D00F3579B /* libwvdb.dylib */; };
+		9D65EA951176367400F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65EA961176367600F3579B /* libkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E91D1176303D00F3579B /* libkdb.dylib */; };
+		9D65EA971176367900F3579B /* libvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E9E7117632C800F3579B /* libvdb.dylib */; };
+		9D65EA981176368800F3579B /* legvcol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6FF1174E54800F3579B /* legvcol.c */; };
+		9D65EA9B1176368A00F3579B /* sra_decompress.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7011174E54800F3579B /* sra_decompress.c */; };
+		9D65EA9C1176368A00F3579B /* sra_decompress_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7001174E54800F3579B /* sra_decompress_init.c */; };
+		9D65EA9D1176368B00F3579B /* sracol-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7071174E56300F3579B /* sracol-cmn.c */; };
+		9D65EA9E1176368B00F3579B /* sracol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7081174E56300F3579B /* sracol.c */; };
+		9D65EA9F1176368C00F3579B /* sraerr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7091174E56300F3579B /* sraerr.c */; };
+		9D65EAA21176368D00F3579B /* sranam.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70C1174E56300F3579B /* sranam.c */; };
+		9D65EAA31176368E00F3579B /* sraschema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70D1174E56300F3579B /* sraschema.c */; };
+		9D65EAA41176368E00F3579B /* sratbl-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70E1174E56300F3579B /* sratbl-cmn.c */; };
+		9D65EAA51176368F00F3579B /* sratbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70F1174E56300F3579B /* sratbl.c */; };
+		9D65EAAA1176369600F3579B /* clip_quality_right.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7391174E60300F3579B /* clip_quality_right.c */; };
+		9D65EAAB1176369600F3579B /* color-space.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73A1174E60300F3579B /* color-space.c */; };
+		9D65EAAC1176369600F3579B /* delta-log-delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73B1174E60300F3579B /* delta-log-delta.c */; };
+		9D65EAAD1176369700F3579B /* intensity-norm.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73C1174E60300F3579B /* intensity-norm.c */; };
+		9D65EAAE1176369700F3579B /* nencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73D1174E60300F3579B /* nencode.c */; };
+		9D65EAAF1176369800F3579B /* phred-from-qval.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73E1174E60300F3579B /* phred-from-qval.c */; };
+		9D65EAB01176369800F3579B /* platform_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73F1174E60300F3579B /* platform_name.c */; };
+		9D65EAB11176369900F3579B /* position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7401174E60300F3579B /* position.c */; };
+		9D65EAB21176369900F3579B /* prob.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7411174E60300F3579B /* prob.c */; };
+		9D65EAB31176369A00F3579B /* ptranspose.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7421174E60300F3579B /* ptranspose.c */; };
+		9D65EAB41176369A00F3579B /* qual4_codec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7431174E60300F3579B /* qual4_codec.c */; };
+		9D65EAB51176369B00F3579B /* quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7441174E60300F3579B /* quality.c */; };
+		9D65EAB61176369B00F3579B /* read-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7461174E60300F3579B /* read-desc.c */; };
+		9D65EAB71176369C00F3579B /* read2na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7471174E60300F3579B /* read2na.c */; };
+		9D65EAB81176369C00F3579B /* read4na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7481174E60300F3579B /* read4na.c */; };
+		9D65EAB91176369D00F3579B /* read_struct.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7451174E60300F3579B /* read_struct.c */; };
+		9D65EABA1176369D00F3579B /* readFasta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7491174E60300F3579B /* readFasta.c */; };
+		9D65EABB1176369E00F3579B /* reorder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74A1174E60300F3579B /* reorder.c */; };
+		9D65EABC1176369F00F3579B /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74B1174E60300F3579B /* rotate.c */; };
+		9D65EABD1176369F00F3579B /* sort-order.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74C1174E60300F3579B /* sort-order.c */; };
+		9D65EABE117636A000F3579B /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74D1174E60300F3579B /* swap.c */; };
+		9D65EABF117636A000F3579B /* validate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74E1174E60300F3579B /* validate.c */; };
+		9D65EAC2117636AC00F3579B /* nucstrstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7681174E61D00F3579B /* nucstrstr.c */; };
+		9D65EAC3117636AF00F3579B /* srapath.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7751174E6BA00F3579B /* srapath.c */; };
+		9D65EAC9117636BD00F3579B /* legvcol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6FF1174E54800F3579B /* legvcol.c */; };
+		9D65EACB117636BD00F3579B /* ncbi-wsramgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7061174E56300F3579B /* ncbi-wsramgr.c */; };
+		9D65EACC117636BD00F3579B /* sra_decompress.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7011174E54800F3579B /* sra_decompress.c */; };
+		9D65EACD117636BD00F3579B /* sra_decompress_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7001174E54800F3579B /* sra_decompress_init.c */; };
+		9D65EACE117636BD00F3579B /* sracol-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7071174E56300F3579B /* sracol-cmn.c */; };
+		9D65EAD0117636BD00F3579B /* sraerr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7091174E56300F3579B /* sraerr.c */; };
+		9D65EAD1117636BD00F3579B /* sramgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70A1174E56300F3579B /* sramgr-cmn.c */; };
+		9D65EAD3117636BD00F3579B /* sranam.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70C1174E56300F3579B /* sranam.c */; };
+		9D65EAD5117636BD00F3579B /* sratbl-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70E1174E56300F3579B /* sratbl-cmn.c */; };
+		9D65EAD7117636BD00F3579B /* wsracol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7101174E56300F3579B /* wsracol.c */; };
+		9D65EAD9117636BD00F3579B /* wsraschema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7121174E56300F3579B /* wsraschema.c */; };
+		9D65EADA117636BD00F3579B /* wsratbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7131174E56300F3579B /* wsratbl.c */; };
+		9D65EADB117636BD00F3579B /* clip_quality_right.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7391174E60300F3579B /* clip_quality_right.c */; };
+		9D65EADC117636BD00F3579B /* color-space.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73A1174E60300F3579B /* color-space.c */; };
+		9D65EADD117636BD00F3579B /* delta-log-delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73B1174E60300F3579B /* delta-log-delta.c */; };
+		9D65EADE117636BD00F3579B /* intensity-norm.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73C1174E60300F3579B /* intensity-norm.c */; };
+		9D65EADF117636BD00F3579B /* nencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73D1174E60300F3579B /* nencode.c */; };
+		9D65EAE0117636BD00F3579B /* phred-from-qval.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73E1174E60300F3579B /* phred-from-qval.c */; };
+		9D65EAE1117636BD00F3579B /* platform_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E73F1174E60300F3579B /* platform_name.c */; };
+		9D65EAE2117636BD00F3579B /* position.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7401174E60300F3579B /* position.c */; };
+		9D65EAE3117636BD00F3579B /* prob.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7411174E60300F3579B /* prob.c */; };
+		9D65EAE4117636BD00F3579B /* ptranspose.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7421174E60300F3579B /* ptranspose.c */; };
+		9D65EAE5117636BD00F3579B /* qual4_codec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7431174E60300F3579B /* qual4_codec.c */; };
+		9D65EAE6117636BD00F3579B /* quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7441174E60300F3579B /* quality.c */; };
+		9D65EAE7117636BD00F3579B /* read-desc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7461174E60300F3579B /* read-desc.c */; };
+		9D65EAE8117636BD00F3579B /* read2na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7471174E60300F3579B /* read2na.c */; };
+		9D65EAE9117636BD00F3579B /* read4na.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7481174E60300F3579B /* read4na.c */; };
+		9D65EAEA117636BD00F3579B /* read_struct.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7451174E60300F3579B /* read_struct.c */; };
+		9D65EAEB117636BD00F3579B /* readFasta.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7491174E60300F3579B /* readFasta.c */; };
+		9D65EAEC117636BD00F3579B /* reorder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74A1174E60300F3579B /* reorder.c */; };
+		9D65EAED117636BD00F3579B /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74B1174E60300F3579B /* rotate.c */; };
+		9D65EAEE117636BD00F3579B /* sort-order.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74C1174E60300F3579B /* sort-order.c */; };
+		9D65EAEF117636BD00F3579B /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74D1174E60300F3579B /* swap.c */; };
+		9D65EAF0117636BD00F3579B /* validate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E74E1174E60300F3579B /* validate.c */; };
+		9D65EAF1117636BD00F3579B /* nucstrstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7681174E61D00F3579B /* nucstrstr.c */; };
+		9D65EAF2117636BD00F3579B /* srapath.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E7751174E6BA00F3579B /* srapath.c */; };
+		9D65EAF4117636BD00F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65EB031176372D00F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65EB061176376D00F3579B /* sraschema.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70D1174E56300F3579B /* sraschema.c */; };
+		9D65EB0B117637AF00F3579B /* libwvdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65EA1E1176330D00F3579B /* libwvdb.dylib */; };
+		9D65EB0E117637B700F3579B /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E988117630B300F3579B /* libwkdb.dylib */; };
+		9D65EB11117637C200F3579B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E5B41174E2D100F3579B /* libz.dylib */; };
+		9D65EB2A1176397E00F3579B /* sramgr-cmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70A1174E56300F3579B /* sramgr-cmn.c */; };
+		9D65EB2B1176397E00F3579B /* sramgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E70B1174E56300F3579B /* sramgr.c */; };
+		9D65EB401176437700F3579B /* libwsra.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65EAFA117636BD00F3579B /* libwsra.dylib */; };
+		9D65EBC611764AA500F3579B /* libwkdb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E988117630B300F3579B /* libwkdb.dylib */; };
+		9D65EBC911764AAE00F3579B /* libklib.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65E89E11762C8900F3579B /* libklib.dylib */; };
+		9D65EBD211764BB900F3579B /* echo.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F71174E2DB00F3579B /* echo.c */; };
+		9D65EBD311764BB900F3579B /* factories.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F81174E2DB00F3579B /* factories.c */; };
+		9D65EBD411764BBA00F3579B /* floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5F91174E2DB00F3579B /* floor.c */; };
+		9D65EBD511764BBA00F3579B /* fpcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FA1174E2DB00F3579B /* fpcodec.c */; };
+		9D65EBD611764BBB00F3579B /* hufDecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FB1174E2DB00F3579B /* hufDecode.c */; };
+		9D65EBD711764BBB00F3579B /* hufEncode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FC1174E2DB00F3579B /* hufEncode.c */; };
+		9D65EBD811764BBC00F3579B /* hufTable.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FD1174E2DB00F3579B /* hufTable.c */; };
+		9D65EBD911764BBC00F3579B /* hufZlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FE1174E2DB00F3579B /* hufZlib.c */; };
+		9D65EBDA11764BBD00F3579B /* muxing.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E5FF1174E2DB00F3579B /* muxing.c */; };
+		9D65EBDB11764BBD00F3579B /* null-row.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6001174E2DB00F3579B /* null-row.c */; };
+		9D65EBDC11764BBE00F3579B /* parse_args.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6021174E2DB00F3579B /* parse_args.c */; };
+		9D65EBDD11764BBF00F3579B /* rleDecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6031174E2DB00F3579B /* rleDecode.c */; };
+		9D65EBDE11764BBF00F3579B /* rleEncode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6041174E2DB00F3579B /* rleEncode.c */; };
+		9D65EBDF11764BC000F3579B /* row-len.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6051174E2DB00F3579B /* row-len.c */; };
+		9D65EBE011764BC000F3579B /* transpose.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6061174E2DB00F3579B /* transpose.c */; };
+		9D65EBE111764BC100F3579B /* validate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D65E6081174E2DB00F3579B /* validate.c */; };
+		9D65EBE211764BD200F3579B /* xform.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65EBCF11764B8200F3579B /* xform.o */; };
+		9D65EBE311764BD600F3579B /* xform.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D65EBCF11764B8200F3579B /* xform.o */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		9D1A14C5119D93DF00EF212F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E89D11762C8900F3579B;
+			remoteInfo = klib;
+		};
+		9D65EBA2117649C100F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65EA011176330D00F3579B;
+			remoteInfo = wvdb;
+		};
+		9D65EBA4117649C100F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65EAC6117636BD00F3579B;
+			remoteInfo = wsra;
+		};
+		9D65EBAC11764A0A00F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E89D11762C8900F3579B;
+			remoteInfo = klib;
+		};
+		9D65EBAE11764A1A00F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E89D11762C8900F3579B;
+			remoteInfo = klib;
+		};
+		9D65EBB011764A2700F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E9E6117632C800F3579B;
+			remoteInfo = vdb;
+		};
+		9D65EBB211764A2800F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65EA011176330D00F3579B;
+			remoteInfo = wvdb;
+		};
+		9D65EBB411764A3100F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E91C1176303D00F3579B;
+			remoteInfo = kdb;
+		};
+		9D65EBB611764A3600F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65E961117630B300F3579B;
+			remoteInfo = wkdb;
+		};
+		9D65EBE611764BEA00F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65EBCE11764B8200F3579B;
+			remoteInfo = xform;
+		};
+		9D65EBE811764BEC00F3579B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 9D65EBCE11764B8200F3579B;
+			remoteInfo = xform;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 8;
+			dstPath = /usr/share/man/man1/;
+			dstSubfolderSpec = 0;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 1;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		8DD76FB20486AB0100D96B5E /* sra2kdb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sra2kdb; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D1A14A7119D921100EF212F /* align-access.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "align-access.c"; path = "../../../assembly/api/align-access.c"; sourceTree = SOURCE_ROOT; };
+		9D1A14A8119D922100EF212F /* BAMFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BAMFile.c; path = ../../../assembly/fmt/BAMFile.c; sourceTree = SOURCE_ROOT; };
+		9D1A14AB119D931800EF212F /* bamtest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bamtest.c; path = ../../../assembly/test/bamtest.c; sourceTree = SOURCE_ROOT; };
+		9D1A14B1119D932A00EF212F /* bam-test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "bam-test"; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65E5A91174E29F00F3579B /* sra2kdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sra2kdb.c; path = ../../../sra/tools/sra2kdb.c; sourceTree = SOURCE_ROOT; };
+		9D65E5B41174E2D100F3579B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		9D65E5B51174E2D100F3579B /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
+		9D65E5B61174E2D100F3579B /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
+		9D65E5BD1174E2DB00F3579B /* bstpersist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bstpersist.c; path = ../../../klib/cont/bstpersist.c; sourceTree = SOURCE_ROOT; };
+		9D65E5BE1174E2DB00F3579B /* container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = container.c; path = ../../../klib/cont/container.c; sourceTree = SOURCE_ROOT; };
+		9D65E5BF1174E2DB00F3579B /* namelist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = namelist.c; path = ../../../klib/cont/namelist.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C01174E2DB00F3579B /* pbstree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pbstree.c; path = ../../../klib/cont/pbstree.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C11174E2DB00F3579B /* ptpersist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptpersist.c; path = ../../../klib/cont/ptpersist.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C21174E2DB00F3579B /* ptrie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptrie.c; path = ../../../klib/cont/ptrie.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C31174E2DB00F3579B /* queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = queue.c; path = ../../../klib/cont/queue.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C41174E2DB00F3579B /* trie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trie.c; path = ../../../klib/cont/trie.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C61174E2DB00F3579B /* vector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vector.c; path = ../../../klib/cont/vector.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C81174E2DB00F3579B /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../../klib/cs/crc32.c; sourceTree = SOURCE_ROOT; };
+		9D65E5C91174E2DB00F3579B /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../../klib/cs/md5.c; sourceTree = SOURCE_ROOT; };
+		9D65E5CB1174E2DB00F3579B /* sysdir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysdir.c; path = ../../../klib/fs/unix/sysdir.c; sourceTree = SOURCE_ROOT; };
+		9D65E5CC1174E2DB00F3579B /* sysdll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysdll.c; path = ../../../klib/fs/unix/sysdll.c; sourceTree = SOURCE_ROOT; };
+		9D65E5CD1174E2DB00F3579B /* sysfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysfile.c; path = ../../../klib/fs/unix/sysfile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5CE1174E2DB00F3579B /* sysmmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysmmap.c; path = ../../../klib/fs/unix/sysmmap.c; sourceTree = SOURCE_ROOT; };
+		9D65E5CF1174E2DB00F3579B /* arc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = arc.c; path = ../../../klib/fs/arc.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D01174E2DB00F3579B /* buffile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = buffile.c; path = ../../../klib/fs/buffile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D11174E2DB00F3579B /* bzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bzip.c; path = ../../../klib/fs/bzip.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D21174E2DB00F3579B /* countfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = countfile.c; path = ../../../klib/fs/countfile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D31174E2DB00F3579B /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../../klib/fs/crc32.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D41174E2DB00F3579B /* dir_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dir_test.c; path = ../../../klib/fs/dir_test.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D51174E2DB00F3579B /* directory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = directory.c; path = ../../../klib/fs/directory.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D61174E2DB00F3579B /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../../../klib/fs/file.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D71174E2DB00F3579B /* gzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzip.c; path = ../../../klib/fs/gzip.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D81174E2DB00F3579B /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../../klib/fs/md5.c; sourceTree = SOURCE_ROOT; };
+		9D65E5D91174E2DB00F3579B /* nullfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nullfile.c; path = ../../../klib/fs/nullfile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DA1174E2DB00F3579B /* sra.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sra.c; path = ../../../klib/fs/sra.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DB1174E2DB00F3579B /* subfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = subfile.c; path = ../../../klib/fs/subfile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DC1174E2DB00F3579B /* tar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tar.c; path = ../../../klib/fs/tar.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DD1174E2DB00F3579B /* teefile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = teefile.c; path = ../../../klib/fs/teefile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DE1174E2DB00F3579B /* toc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = toc.c; path = ../../../klib/fs/toc.c; sourceTree = SOURCE_ROOT; };
+		9D65E5DF1174E2DB00F3579B /* tocdir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocdir.c; path = ../../../klib/fs/tocdir.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E01174E2DB00F3579B /* tocentry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocentry.c; path = ../../../klib/fs/tocentry.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E11174E2DB00F3579B /* tocfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tocfile.c; path = ../../../klib/fs/tocfile.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E31174E2DB00F3579B /* sem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sem.c; path = ../../../klib/proc/sem.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E41174E2DB00F3579B /* stbarrier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stbarrier.c; path = ../../../klib/proc/stbarrier.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E51174E2DB00F3579B /* stcond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stcond.c; path = ../../../klib/proc/stcond.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E61174E2DB00F3579B /* stlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stlock.c; path = ../../../klib/proc/stlock.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E71174E2DB00F3579B /* stsem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stsem.c; path = ../../../klib/proc/stsem.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E81174E2DB00F3579B /* stthread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stthread.c; path = ../../../klib/proc/stthread.c; sourceTree = SOURCE_ROOT; };
+		9D65E5E91174E2DB00F3579B /* sttimeout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sttimeout.c; path = ../../../klib/proc/sttimeout.c; sourceTree = SOURCE_ROOT; };
+		9D65E5EB1174E2DB00F3579B /* ascii.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ascii.c; path = ../../../klib/txt/unix/ascii.c; sourceTree = SOURCE_ROOT; };
+		9D65E5EC1174E2DB00F3579B /* cp1252.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cp1252.c; path = ../../../klib/txt/cp1252.c; sourceTree = SOURCE_ROOT; };
+		9D65E5ED1174E2DB00F3579B /* iso8859-1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "iso8859-1.c"; path = "../../../klib/txt/iso8859-1.c"; sourceTree = SOURCE_ROOT; };
+		9D65E5EE1174E2DB00F3579B /* iso8859.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iso8859.c; path = ../../../klib/txt/iso8859.c; sourceTree = SOURCE_ROOT; };
+		9D65E5EF1174E2DB00F3579B /* symtab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = symtab.c; path = ../../../klib/txt/symtab.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F01174E2DB00F3579B /* text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = text.c; path = ../../../klib/txt/text.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F11174E2DB00F3579B /* token.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = token.c; path = ../../../klib/txt/token.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F21174E2DB00F3579B /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8.c; path = ../../../klib/txt/utf8.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F51174E2DB00F3579B /* xml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xml.c; path = ../../../klib/xml/xml.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F71174E2DB00F3579B /* echo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = echo.c; path = ../../../klib/xform/echo.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F81174E2DB00F3579B /* factories.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = factories.c; path = ../../../klib/xform/factories.c; sourceTree = SOURCE_ROOT; };
+		9D65E5F91174E2DB00F3579B /* floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = floor.c; path = ../../../klib/xform/floor.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FA1174E2DB00F3579B /* fpcodec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fpcodec.c; path = ../../../klib/xform/fpcodec.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FB1174E2DB00F3579B /* hufDecode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hufDecode.c; path = ../../../klib/xform/hufDecode.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FC1174E2DB00F3579B /* hufEncode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hufEncode.c; path = ../../../klib/xform/hufEncode.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FD1174E2DB00F3579B /* hufTable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hufTable.c; path = ../../../klib/xform/hufTable.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FE1174E2DB00F3579B /* hufZlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hufZlib.c; path = ../../../klib/xform/hufZlib.c; sourceTree = SOURCE_ROOT; };
+		9D65E5FF1174E2DB00F3579B /* muxing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = muxing.c; path = ../../../klib/xform/muxing.c; sourceTree = SOURCE_ROOT; };
+		9D65E6001174E2DB00F3579B /* null-row.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "null-row.c"; path = "../../../klib/xform/null-row.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6011174E2DB00F3579B /* pack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pack.c; path = ../../../klib/xform/pack.c; sourceTree = SOURCE_ROOT; };
+		9D65E6021174E2DB00F3579B /* parse_args.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parse_args.c; path = ../../../klib/xform/parse_args.c; sourceTree = SOURCE_ROOT; };
+		9D65E6031174E2DB00F3579B /* rleDecode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rleDecode.c; path = ../../../klib/xform/rleDecode.c; sourceTree = SOURCE_ROOT; };
+		9D65E6041174E2DB00F3579B /* rleEncode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rleEncode.c; path = ../../../klib/xform/rleEncode.c; sourceTree = SOURCE_ROOT; };
+		9D65E6051174E2DB00F3579B /* row-len.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "row-len.c"; path = "../../../klib/xform/row-len.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6061174E2DB00F3579B /* transpose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = transpose.c; path = ../../../klib/xform/transpose.c; sourceTree = SOURCE_ROOT; };
+		9D65E6071174E2DB00F3579B /* unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unpack.c; path = ../../../klib/xform/unpack.c; sourceTree = SOURCE_ROOT; };
+		9D65E6081174E2DB00F3579B /* validate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = validate.c; path = ../../../klib/xform/validate.c; sourceTree = SOURCE_ROOT; };
+		9D65E60A1174E2DB00F3579B /* blob.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = blob.c; path = ../../../klib/vdb/blob.c; sourceTree = SOURCE_ROOT; };
+		9D65E60B1174E2DB00F3579B /* column-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "column-cmn.c"; path = "../../../klib/vdb/column-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E60C1174E2DB00F3579B /* column.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = column.c; path = ../../../klib/vdb/column.c; sourceTree = SOURCE_ROOT; };
+		9D65E60D1174E2DB00F3579B /* cursor-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "cursor-cmn.c"; path = "../../../klib/vdb/cursor-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E60E1174E2DB00F3579B /* database.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = database.c; path = ../../../klib/vdb/database.c; sourceTree = SOURCE_ROOT; };
+		9D65E60F1174E2DB00F3579B /* dbmgr-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dbmgr-cmn.c"; path = "../../../klib/vdb/dbmgr-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6101174E2DB00F3579B /* dbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dbmgr.c; path = ../../../klib/vdb/dbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E6111174E2DB00F3579B /* dtype.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dtype.c; path = ../../../klib/vdb/dtype.c; sourceTree = SOURCE_ROOT; };
+		9D65E6121174E2DB00F3579B /* loader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loader.c; path = ../../../klib/vdb/loader.c; sourceTree = SOURCE_ROOT; };
+		9D65E6131174E2DB00F3579B /* parse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parse.c; path = ../../../klib/vdb/parse.c; sourceTree = SOURCE_ROOT; };
+		9D65E6141174E2DB00F3579B /* schema-dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "schema-dump.c"; path = "../../../klib/vdb/schema-dump.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6151174E2DB00F3579B /* schema.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = schema.c; path = ../../../klib/vdb/schema.c; sourceTree = SOURCE_ROOT; };
+		9D65E6161174E2DB00F3579B /* static-column-temp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "static-column-temp.c"; path = "../../../klib/vdb/static-column-temp.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6171174E2DB00F3579B /* table-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "table-cmn.c"; path = "../../../klib/vdb/table-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6181174E2DB00F3579B /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = table.c; path = ../../../klib/vdb/table.c; sourceTree = SOURCE_ROOT; };
+		9D65E6191174E2DB00F3579B /* wcolumn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolumn.c; path = ../../../klib/vdb/wcolumn.c; sourceTree = SOURCE_ROOT; };
+		9D65E61A1174E2DB00F3579B /* wcursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcursor.c; path = ../../../klib/vdb/wcursor.c; sourceTree = SOURCE_ROOT; };
+		9D65E61B1174E2DB00F3579B /* wdatabase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdatabase.c; path = ../../../klib/vdb/wdatabase.c; sourceTree = SOURCE_ROOT; };
+		9D65E61C1174E2DB00F3579B /* wdbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdbmgr.c; path = ../../../klib/vdb/wdbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E61D1174E2DB00F3579B /* wtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wtable.c; path = ../../../klib/vdb/wtable.c; sourceTree = SOURCE_ROOT; };
+		9D65E61E1174E2DB00F3579B /* xform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xform.c; path = ../../../klib/vdb/xform.c; sourceTree = SOURCE_ROOT; };
+		9D65E61F1174E2DB00F3579B /* xfuncs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xfuncs.c; path = ../../../klib/vdb/xfuncs.c; sourceTree = SOURCE_ROOT; };
+		9D65E6211174E2DB00F3579B /* coldata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = coldata.c; path = ../../../klib/db/coldata.c; sourceTree = SOURCE_ROOT; };
+		9D65E6221174E2DB00F3579B /* colidx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx.c; path = ../../../klib/db/colidx.c; sourceTree = SOURCE_ROOT; };
+		9D65E6231174E2DB00F3579B /* colidx0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx0.c; path = ../../../klib/db/colidx0.c; sourceTree = SOURCE_ROOT; };
+		9D65E6241174E2DB00F3579B /* colidx1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx1.c; path = ../../../klib/db/colidx1.c; sourceTree = SOURCE_ROOT; };
+		9D65E6251174E2DB00F3579B /* colidx2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colidx2.c; path = ../../../klib/db/colidx2.c; sourceTree = SOURCE_ROOT; };
+		9D65E6261174E2DB00F3579B /* column.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = column.c; path = ../../../klib/db/column.c; sourceTree = SOURCE_ROOT; };
+		9D65E6271174E2DB00F3579B /* database.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = database.c; path = ../../../klib/db/database.c; sourceTree = SOURCE_ROOT; };
+		9D65E6281174E2DB00F3579B /* dbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dbmgr.c; path = ../../../klib/db/dbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E6291174E2DB00F3579B /* idxblk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = idxblk.c; path = ../../../klib/db/idxblk.c; sourceTree = SOURCE_ROOT; };
+		9D65E62A1174E2DB00F3579B /* index.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = index.c; path = ../../../klib/db/index.c; sourceTree = SOURCE_ROOT; };
+		9D65E62B1174E2DB00F3579B /* kdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = kdb.c; path = ../../../klib/db/kdb.c; sourceTree = SOURCE_ROOT; };
+		9D65E62C1174E2DB00F3579B /* meta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = meta.c; path = ../../../klib/db/meta.c; sourceTree = SOURCE_ROOT; };
+		9D65E62D1174E2DB00F3579B /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = table.c; path = ../../../klib/db/table.c; sourceTree = SOURCE_ROOT; };
+		9D65E62E1174E2DB00F3579B /* trieidx-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieidx-v1.c"; path = "../../../klib/db/trieidx-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D65E62F1174E2DB00F3579B /* trieidx-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "trieidx-v2.c"; path = "../../../klib/db/trieidx-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6301174E2DB00F3579B /* u64idx-v3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "u64idx-v3.c"; path = "../../../klib/db/u64idx-v3.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6311174E2DB00F3579B /* wcoldata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcoldata.c; path = ../../../klib/db/wcoldata.c; sourceTree = SOURCE_ROOT; };
+		9D65E6321174E2DB00F3579B /* wcolidx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx.c; path = ../../../klib/db/wcolidx.c; sourceTree = SOURCE_ROOT; };
+		9D65E6331174E2DB00F3579B /* wcolidx0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx0.c; path = ../../../klib/db/wcolidx0.c; sourceTree = SOURCE_ROOT; };
+		9D65E6341174E2DB00F3579B /* wcolidx1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx1.c; path = ../../../klib/db/wcolidx1.c; sourceTree = SOURCE_ROOT; };
+		9D65E6351174E2DB00F3579B /* wcolidx2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolidx2.c; path = ../../../klib/db/wcolidx2.c; sourceTree = SOURCE_ROOT; };
+		9D65E6361174E2DB00F3579B /* wcolumn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wcolumn.c; path = ../../../klib/db/wcolumn.c; sourceTree = SOURCE_ROOT; };
+		9D65E6371174E2DB00F3579B /* wdatabase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdatabase.c; path = ../../../klib/db/wdatabase.c; sourceTree = SOURCE_ROOT; };
+		9D65E6381174E2DB00F3579B /* wdbmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wdbmgr.c; path = ../../../klib/db/wdbmgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E6391174E2DB00F3579B /* widxblk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = widxblk.c; path = ../../../klib/db/widxblk.c; sourceTree = SOURCE_ROOT; };
+		9D65E63A1174E2DB00F3579B /* windex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = windex.c; path = ../../../klib/db/windex.c; sourceTree = SOURCE_ROOT; };
+		9D65E63B1174E2DB00F3579B /* wkdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wkdb.c; path = ../../../klib/db/wkdb.c; sourceTree = SOURCE_ROOT; };
+		9D65E63C1174E2DB00F3579B /* wmeta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wmeta.c; path = ../../../klib/db/wmeta.c; sourceTree = SOURCE_ROOT; };
+		9D65E63D1174E2DB00F3579B /* wtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wtable.c; path = ../../../klib/db/wtable.c; sourceTree = SOURCE_ROOT; };
+		9D65E63E1174E2DB00F3579B /* wtrieidx-v1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wtrieidx-v1.c"; path = "../../../klib/db/wtrieidx-v1.c"; sourceTree = SOURCE_ROOT; };
+		9D65E63F1174E2DB00F3579B /* wtrieidx-v2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wtrieidx-v2.c"; path = "../../../klib/db/wtrieidx-v2.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6401174E2DB00F3579B /* wu64idx-v3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "wu64idx-v3.c"; path = "../../../klib/db/wu64idx-v3.c"; sourceTree = SOURCE_ROOT; };
+		9D65E6FF1174E54800F3579B /* legvcol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = legvcol.c; path = ../../../sra/api/legacy/legvcol.c; sourceTree = SOURCE_ROOT; };
+		9D65E7001174E54800F3579B /* sra_decompress_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sra_decompress_init.c; path = ../../../sra/api/legacy/sra_decompress_init.c; sourceTree = SOURCE_ROOT; };
+		9D65E7011174E54800F3579B /* sra_decompress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sra_decompress.c; path = ../../../sra/api/legacy/sra_decompress.c; sourceTree = SOURCE_ROOT; };
+		9D65E7051174E56300F3579B /* ncbi-sramgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ncbi-sramgr.c"; path = "../../../sra/api/ncbi-sramgr.c"; sourceTree = SOURCE_ROOT; };
+		9D65E7061174E56300F3579B /* ncbi-wsramgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ncbi-wsramgr.c"; path = "../../../sra/api/ncbi-wsramgr.c"; sourceTree = SOURCE_ROOT; };
+		9D65E7071174E56300F3579B /* sracol-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sracol-cmn.c"; path = "../../../sra/api/sracol-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E7081174E56300F3579B /* sracol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sracol.c; path = ../../../sra/api/sracol.c; sourceTree = SOURCE_ROOT; };
+		9D65E7091174E56300F3579B /* sraerr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sraerr.c; path = ../../../sra/api/sraerr.c; sourceTree = SOURCE_ROOT; };
+		9D65E70A1174E56300F3579B /* sramgr-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sramgr-cmn.c"; path = "../../../sra/api/sramgr-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E70B1174E56300F3579B /* sramgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sramgr.c; path = ../../../sra/api/sramgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E70C1174E56300F3579B /* sranam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sranam.c; path = ../../../sra/api/sranam.c; sourceTree = SOURCE_ROOT; };
+		9D65E70D1174E56300F3579B /* sraschema.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sraschema.c; path = ../../../sra/api/sraschema.c; sourceTree = SOURCE_ROOT; };
+		9D65E70E1174E56300F3579B /* sratbl-cmn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sratbl-cmn.c"; path = "../../../sra/api/sratbl-cmn.c"; sourceTree = SOURCE_ROOT; };
+		9D65E70F1174E56300F3579B /* sratbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sratbl.c; path = ../../../sra/api/sratbl.c; sourceTree = SOURCE_ROOT; };
+		9D65E7101174E56300F3579B /* wsracol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wsracol.c; path = ../../../sra/api/wsracol.c; sourceTree = SOURCE_ROOT; };
+		9D65E7111174E56300F3579B /* wsramgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wsramgr.c; path = ../../../sra/api/wsramgr.c; sourceTree = SOURCE_ROOT; };
+		9D65E7121174E56300F3579B /* wsraschema.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wsraschema.c; path = ../../../sra/api/wsraschema.c; sourceTree = SOURCE_ROOT; };
+		9D65E7131174E56300F3579B /* wsratbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wsratbl.c; path = ../../../sra/api/wsratbl.c; sourceTree = SOURCE_ROOT; };
+		9D65E7391174E60300F3579B /* clip_quality_right.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clip_quality_right.c; path = ../../../sra/xform/clip_quality_right.c; sourceTree = SOURCE_ROOT; };
+		9D65E73A1174E60300F3579B /* color-space.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "color-space.c"; path = "../../../sra/xform/color-space.c"; sourceTree = SOURCE_ROOT; };
+		9D65E73B1174E60300F3579B /* delta-log-delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "delta-log-delta.c"; path = "../../../sra/xform/delta-log-delta.c"; sourceTree = SOURCE_ROOT; };
+		9D65E73C1174E60300F3579B /* intensity-norm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "intensity-norm.c"; path = "../../../sra/xform/intensity-norm.c"; sourceTree = SOURCE_ROOT; };
+		9D65E73D1174E60300F3579B /* nencode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nencode.c; path = ../../../sra/xform/nencode.c; sourceTree = SOURCE_ROOT; };
+		9D65E73E1174E60300F3579B /* phred-from-qval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "phred-from-qval.c"; path = "../../../sra/xform/phred-from-qval.c"; sourceTree = SOURCE_ROOT; };
+		9D65E73F1174E60300F3579B /* platform_name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = platform_name.c; path = ../../../sra/xform/platform_name.c; sourceTree = SOURCE_ROOT; };
+		9D65E7401174E60300F3579B /* position.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = position.c; path = ../../../sra/xform/position.c; sourceTree = SOURCE_ROOT; };
+		9D65E7411174E60300F3579B /* prob.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = prob.c; path = ../../../sra/xform/prob.c; sourceTree = SOURCE_ROOT; };
+		9D65E7421174E60300F3579B /* ptranspose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptranspose.c; path = ../../../sra/xform/ptranspose.c; sourceTree = SOURCE_ROOT; };
+		9D65E7431174E60300F3579B /* qual4_codec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qual4_codec.c; path = ../../../sra/xform/qual4_codec.c; sourceTree = SOURCE_ROOT; };
+		9D65E7441174E60300F3579B /* quality.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quality.c; path = ../../../sra/xform/quality.c; sourceTree = SOURCE_ROOT; };
+		9D65E7451174E60300F3579B /* read_struct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = read_struct.c; path = ../../../sra/xform/read_struct.c; sourceTree = SOURCE_ROOT; };
+		9D65E7461174E60300F3579B /* read-desc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "read-desc.c"; path = "../../../sra/xform/read-desc.c"; sourceTree = SOURCE_ROOT; };
+		9D65E7471174E60300F3579B /* read2na.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = read2na.c; path = ../../../sra/xform/read2na.c; sourceTree = SOURCE_ROOT; };
+		9D65E7481174E60300F3579B /* read4na.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = read4na.c; path = ../../../sra/xform/read4na.c; sourceTree = SOURCE_ROOT; };
+		9D65E7491174E60300F3579B /* readFasta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = readFasta.c; path = ../../../sra/xform/readFasta.c; sourceTree = SOURCE_ROOT; };
+		9D65E74A1174E60300F3579B /* reorder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = reorder.c; path = ../../../sra/xform/reorder.c; sourceTree = SOURCE_ROOT; };
+		9D65E74B1174E60300F3579B /* rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rotate.c; path = ../../../sra/xform/rotate.c; sourceTree = SOURCE_ROOT; };
+		9D65E74C1174E60300F3579B /* sort-order.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sort-order.c"; path = "../../../sra/xform/sort-order.c"; sourceTree = SOURCE_ROOT; };
+		9D65E74D1174E60300F3579B /* swap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = swap.c; path = ../../../sra/xform/swap.c; sourceTree = SOURCE_ROOT; };
+		9D65E74E1174E60300F3579B /* validate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = validate.c; path = ../../../sra/xform/validate.c; sourceTree = SOURCE_ROOT; };
+		9D65E7681174E61D00F3579B /* nucstrstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nucstrstr.c; path = ../../../sra/search/nucstrstr.c; sourceTree = SOURCE_ROOT; };
+		9D65E7751174E6BA00F3579B /* srapath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = srapath.c; path = ../../../sra/ncbi/srapath.c; sourceTree = SOURCE_ROOT; };
+		9D65E77A1174E6F000F3579B /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = log.c; path = ../../../klib/app/log.c; sourceTree = SOURCE_ROOT; };
+		9D65E77B1174E6F000F3579B /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../../klib/app/main.c; sourceTree = SOURCE_ROOT; };
+		9D65E77C1174E6F000F3579B /* rc-idx-tbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "rc-idx-tbl.c"; path = "../../../klib/app/rc-idx-tbl.c"; sourceTree = SOURCE_ROOT; };
+		9D65E77D1174E6F000F3579B /* rc-tbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "rc-tbl.c"; path = "../../../klib/app/rc-tbl.c"; sourceTree = SOURCE_ROOT; };
+		9D65E77E1174E6F000F3579B /* text-log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "text-log.c"; path = "../../../klib/app/text-log.c"; sourceTree = SOURCE_ROOT; };
+		9D65E7841174E6FA00F3579B /* syslog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = syslog.c; path = ../../../klib/app/unix/syslog.c; sourceTree = SOURCE_ROOT; };
+		9D65E7851174E6FA00F3579B /* sysmain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysmain.c; path = ../../../klib/app/unix/sysmain.c; sourceTree = SOURCE_ROOT; };
+		9D65E89E11762C8900F3579B /* libklib.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libklib.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65E91D1176303D00F3579B /* libkdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libkdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65E988117630B300F3579B /* libwkdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwkdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65E9E7117632C800F3579B /* libvdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libvdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65EA1E1176330D00F3579B /* libwvdb.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwvdb.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65EA901176365700F3579B /* libsra.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libsra.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65EAFA117636BD00F3579B /* libwsra.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwsra.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		9D65EBCF11764B8200F3579B /* xform.o */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.objfile"; includeInIndex = 0; path = xform.o; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76FAD0486AB0100D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E5B71174E2D100F3579B /* libz.dylib in Frameworks */,
+				9D65E5B81174E2D100F3579B /* libbz2.dylib in Frameworks */,
+				9D65E5B91174E2D100F3579B /* libxml2.dylib in Frameworks */,
+				9D65EA941176366D00F3579B /* libwvdb.dylib in Frameworks */,
+				9D65EB401176437700F3579B /* libwsra.dylib in Frameworks */,
+				9D65EBC611764AA500F3579B /* libwkdb.dylib in Frameworks */,
+				9D65EBC911764AAE00F3579B /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D1A14AF119D932A00EF212F /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D1A14BF119D93BC00EF212F /* libklib.dylib in Frameworks */,
+				9D1A14C2119D93D100EF212F /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E89C11762C8900F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E8D711762D1600F3579B /* libz.dylib in Frameworks */,
+				9D65E8D811762D1E00F3579B /* libbz2.dylib in Frameworks */,
+				9D65E8D911762D2200F3579B /* libxml2.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E91B1176303D00F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E9AC1176312E00F3579B /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E984117630B300F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E9DB1176327200F3579B /* libklib.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E9E5117632C800F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EA5C117633C600F3579B /* libklib.dylib in Frameworks */,
+				9D65EA5D117633C900F3579B /* libkdb.dylib in Frameworks */,
+				9D65EA641176340100F3579B /* libz.dylib in Frameworks */,
+				9D65EBE211764BD200F3579B /* xform.o in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA1A1176330D00F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EA271176335200F3579B /* libklib.dylib in Frameworks */,
+				9D65EA2A1176335C00F3579B /* libwkdb.dylib in Frameworks */,
+				9D65EA3F1176337C00F3579B /* libz.dylib in Frameworks */,
+				9D65EBE311764BD600F3579B /* xform.o in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA8E1176365700F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EA951176367400F3579B /* libklib.dylib in Frameworks */,
+				9D65EA961176367600F3579B /* libkdb.dylib in Frameworks */,
+				9D65EA971176367900F3579B /* libvdb.dylib in Frameworks */,
+				9D65EB031176372D00F3579B /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EAF3117636BD00F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EAF4117636BD00F3579B /* libklib.dylib in Frameworks */,
+				9D65EB0B117637AF00F3579B /* libwvdb.dylib in Frameworks */,
+				9D65EB0E117637B700F3579B /* libwkdb.dylib in Frameworks */,
+				9D65EB11117637C200F3579B /* libz.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EBCD11764B8200F3579B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* sra2kdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5B31174E2BF00F3579B /* Libs */,
+				08FB7795FE84155DC02AAC07 /* Source */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = sra2kdb;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5A91174E29F00F3579B /* sra2kdb.c */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76FB20486AB0100D96B5E /* sra2kdb */,
+				9D65E89E11762C8900F3579B /* libklib.dylib */,
+				9D65E91D1176303D00F3579B /* libkdb.dylib */,
+				9D65E988117630B300F3579B /* libwkdb.dylib */,
+				9D65E9E7117632C800F3579B /* libvdb.dylib */,
+				9D65EA1E1176330D00F3579B /* libwvdb.dylib */,
+				9D65EA901176365700F3579B /* libsra.dylib */,
+				9D65EAFA117636BD00F3579B /* libwsra.dylib */,
+				9D65EBCF11764B8200F3579B /* xform.o */,
+				9D1A14B1119D932A00EF212F /* bam-test */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		9D1A14A3119D91C600EF212F /* align */ = {
+			isa = PBXGroup;
+			children = (
+				9D1A14AA119D930B00EF212F /* test */,
+				9D1A14A8119D922100EF212F /* BAMFile.c */,
+				9D1A14A7119D921100EF212F /* align-access.c */,
+			);
+			name = align;
+			sourceTree = "<group>";
+		};
+		9D1A14AA119D930B00EF212F /* test */ = {
+			isa = PBXGroup;
+			children = (
+				9D1A14AB119D931800EF212F /* bamtest.c */,
+			);
+			name = test;
+			sourceTree = "<group>";
+		};
+		9D65E5B31174E2BF00F3579B /* Libs */ = {
+			isa = PBXGroup;
+			children = (
+				9D1A14A3119D91C600EF212F /* align */,
+				9D65E7791174E6D700F3579B /* App */,
+				9D65E6EC1174E4C200F3579B /* sra */,
+				9D65E6201174E2DB00F3579B /* kdb */,
+				9D65E6091174E2DB00F3579B /* vdb */,
+				9D65E5F61174E2DB00F3579B /* xform */,
+				9D65E5BB1174E2DB00F3579B /* klib */,
+				9D65E5B41174E2D100F3579B /* libz.dylib */,
+				9D65E5B51174E2D100F3579B /* libbz2.dylib */,
+				9D65E5B61174E2D100F3579B /* libxml2.dylib */,
+			);
+			name = Libs;
+			sourceTree = "<group>";
+		};
+		9D65E5BB1174E2DB00F3579B /* klib */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E9B5117631D800F3579B /* kxf */,
+				9D65E8FF11762EF600F3579B /* log */,
+				9D65E5F31174E2DB00F3579B /* xml */,
+				9D65E5EA1174E2DB00F3579B /* txt */,
+				9D65E5E21174E2DB00F3579B /* proc */,
+				9D65E5CA1174E2DB00F3579B /* fs */,
+				9D65E5C71174E2DB00F3579B /* cs */,
+				9D65E5BC1174E2DB00F3579B /* cont */,
+			);
+			name = klib;
+			sourceTree = "<group>";
+		};
+		9D65E5BC1174E2DB00F3579B /* cont */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5BD1174E2DB00F3579B /* bstpersist.c */,
+				9D65E5BE1174E2DB00F3579B /* container.c */,
+				9D65E5BF1174E2DB00F3579B /* namelist.c */,
+				9D65E5C01174E2DB00F3579B /* pbstree.c */,
+				9D65E5C11174E2DB00F3579B /* ptpersist.c */,
+				9D65E5C21174E2DB00F3579B /* ptrie.c */,
+				9D65E5C31174E2DB00F3579B /* queue.c */,
+				9D65E5C41174E2DB00F3579B /* trie.c */,
+				9D65E5C61174E2DB00F3579B /* vector.c */,
+			);
+			name = cont;
+			sourceTree = "<group>";
+		};
+		9D65E5C71174E2DB00F3579B /* cs */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5C81174E2DB00F3579B /* crc32.c */,
+				9D65E5C91174E2DB00F3579B /* md5.c */,
+			);
+			name = cs;
+			sourceTree = "<group>";
+		};
+		9D65E5CA1174E2DB00F3579B /* fs */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5CB1174E2DB00F3579B /* sysdir.c */,
+				9D65E5CC1174E2DB00F3579B /* sysdll.c */,
+				9D65E5CD1174E2DB00F3579B /* sysfile.c */,
+				9D65E5CE1174E2DB00F3579B /* sysmmap.c */,
+				9D65E5CF1174E2DB00F3579B /* arc.c */,
+				9D65E5D01174E2DB00F3579B /* buffile.c */,
+				9D65E5D11174E2DB00F3579B /* bzip.c */,
+				9D65E5D21174E2DB00F3579B /* countfile.c */,
+				9D65E5D31174E2DB00F3579B /* crc32.c */,
+				9D65E5D41174E2DB00F3579B /* dir_test.c */,
+				9D65E5D51174E2DB00F3579B /* directory.c */,
+				9D65E5D61174E2DB00F3579B /* file.c */,
+				9D65E5D71174E2DB00F3579B /* gzip.c */,
+				9D65E5D81174E2DB00F3579B /* md5.c */,
+				9D65E5D91174E2DB00F3579B /* nullfile.c */,
+				9D65E5DA1174E2DB00F3579B /* sra.c */,
+				9D65E5DB1174E2DB00F3579B /* subfile.c */,
+				9D65E5DC1174E2DB00F3579B /* tar.c */,
+				9D65E5DD1174E2DB00F3579B /* teefile.c */,
+				9D65E5DE1174E2DB00F3579B /* toc.c */,
+				9D65E5DF1174E2DB00F3579B /* tocdir.c */,
+				9D65E5E01174E2DB00F3579B /* tocentry.c */,
+				9D65E5E11174E2DB00F3579B /* tocfile.c */,
+			);
+			name = fs;
+			sourceTree = "<group>";
+		};
+		9D65E5E21174E2DB00F3579B /* proc */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5E31174E2DB00F3579B /* sem.c */,
+				9D65E5E41174E2DB00F3579B /* stbarrier.c */,
+				9D65E5E51174E2DB00F3579B /* stcond.c */,
+				9D65E5E61174E2DB00F3579B /* stlock.c */,
+				9D65E5E71174E2DB00F3579B /* stsem.c */,
+				9D65E5E81174E2DB00F3579B /* stthread.c */,
+				9D65E5E91174E2DB00F3579B /* sttimeout.c */,
+			);
+			name = proc;
+			sourceTree = "<group>";
+		};
+		9D65E5EA1174E2DB00F3579B /* txt */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5EB1174E2DB00F3579B /* ascii.c */,
+				9D65E5EC1174E2DB00F3579B /* cp1252.c */,
+				9D65E5ED1174E2DB00F3579B /* iso8859-1.c */,
+				9D65E5EE1174E2DB00F3579B /* iso8859.c */,
+				9D65E5EF1174E2DB00F3579B /* symtab.c */,
+				9D65E5F01174E2DB00F3579B /* text.c */,
+				9D65E5F11174E2DB00F3579B /* token.c */,
+				9D65E5F21174E2DB00F3579B /* utf8.c */,
+			);
+			name = txt;
+			sourceTree = "<group>";
+		};
+		9D65E5F31174E2DB00F3579B /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5F51174E2DB00F3579B /* xml.c */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
+		9D65E5F61174E2DB00F3579B /* xform */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E5F71174E2DB00F3579B /* echo.c */,
+				9D65E5F81174E2DB00F3579B /* factories.c */,
+				9D65E5F91174E2DB00F3579B /* floor.c */,
+				9D65E5FA1174E2DB00F3579B /* fpcodec.c */,
+				9D65E5FB1174E2DB00F3579B /* hufDecode.c */,
+				9D65E5FC1174E2DB00F3579B /* hufEncode.c */,
+				9D65E5FD1174E2DB00F3579B /* hufTable.c */,
+				9D65E5FE1174E2DB00F3579B /* hufZlib.c */,
+				9D65E5FF1174E2DB00F3579B /* muxing.c */,
+				9D65E6001174E2DB00F3579B /* null-row.c */,
+				9D65E6021174E2DB00F3579B /* parse_args.c */,
+				9D65E6031174E2DB00F3579B /* rleDecode.c */,
+				9D65E6041174E2DB00F3579B /* rleEncode.c */,
+				9D65E6051174E2DB00F3579B /* row-len.c */,
+				9D65E6061174E2DB00F3579B /* transpose.c */,
+				9D65E6081174E2DB00F3579B /* validate.c */,
+			);
+			name = xform;
+			sourceTree = "<group>";
+		};
+		9D65E6091174E2DB00F3579B /* vdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E60A1174E2DB00F3579B /* blob.c */,
+				9D65E60B1174E2DB00F3579B /* column-cmn.c */,
+				9D65E60C1174E2DB00F3579B /* column.c */,
+				9D65E60D1174E2DB00F3579B /* cursor-cmn.c */,
+				9D65E60E1174E2DB00F3579B /* database.c */,
+				9D65E60F1174E2DB00F3579B /* dbmgr-cmn.c */,
+				9D65E6101174E2DB00F3579B /* dbmgr.c */,
+				9D65E6111174E2DB00F3579B /* dtype.c */,
+				9D65E6121174E2DB00F3579B /* loader.c */,
+				9D65E6131174E2DB00F3579B /* parse.c */,
+				9D65E6141174E2DB00F3579B /* schema-dump.c */,
+				9D65E6151174E2DB00F3579B /* schema.c */,
+				9D65E6161174E2DB00F3579B /* static-column-temp.c */,
+				9D65E6171174E2DB00F3579B /* table-cmn.c */,
+				9D65E6181174E2DB00F3579B /* table.c */,
+				9D65E6191174E2DB00F3579B /* wcolumn.c */,
+				9D65E61A1174E2DB00F3579B /* wcursor.c */,
+				9D65E61B1174E2DB00F3579B /* wdatabase.c */,
+				9D65E61C1174E2DB00F3579B /* wdbmgr.c */,
+				9D65E61D1174E2DB00F3579B /* wtable.c */,
+				9D65E61E1174E2DB00F3579B /* xform.c */,
+				9D65E61F1174E2DB00F3579B /* xfuncs.c */,
+			);
+			name = vdb;
+			sourceTree = "<group>";
+		};
+		9D65E6201174E2DB00F3579B /* kdb */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E6211174E2DB00F3579B /* coldata.c */,
+				9D65E6221174E2DB00F3579B /* colidx.c */,
+				9D65E6231174E2DB00F3579B /* colidx0.c */,
+				9D65E6241174E2DB00F3579B /* colidx1.c */,
+				9D65E6251174E2DB00F3579B /* colidx2.c */,
+				9D65E6261174E2DB00F3579B /* column.c */,
+				9D65E6271174E2DB00F3579B /* database.c */,
+				9D65E6281174E2DB00F3579B /* dbmgr.c */,
+				9D65E6291174E2DB00F3579B /* idxblk.c */,
+				9D65E62A1174E2DB00F3579B /* index.c */,
+				9D65E62B1174E2DB00F3579B /* kdb.c */,
+				9D65E62C1174E2DB00F3579B /* meta.c */,
+				9D65E62D1174E2DB00F3579B /* table.c */,
+				9D65E62E1174E2DB00F3579B /* trieidx-v1.c */,
+				9D65E62F1174E2DB00F3579B /* trieidx-v2.c */,
+				9D65E6301174E2DB00F3579B /* u64idx-v3.c */,
+				9D65E6311174E2DB00F3579B /* wcoldata.c */,
+				9D65E6321174E2DB00F3579B /* wcolidx.c */,
+				9D65E6331174E2DB00F3579B /* wcolidx0.c */,
+				9D65E6341174E2DB00F3579B /* wcolidx1.c */,
+				9D65E6351174E2DB00F3579B /* wcolidx2.c */,
+				9D65E6361174E2DB00F3579B /* wcolumn.c */,
+				9D65E6371174E2DB00F3579B /* wdatabase.c */,
+				9D65E6381174E2DB00F3579B /* wdbmgr.c */,
+				9D65E6391174E2DB00F3579B /* widxblk.c */,
+				9D65E63A1174E2DB00F3579B /* windex.c */,
+				9D65E63B1174E2DB00F3579B /* wkdb.c */,
+				9D65E63C1174E2DB00F3579B /* wmeta.c */,
+				9D65E63D1174E2DB00F3579B /* wtable.c */,
+				9D65E63E1174E2DB00F3579B /* wtrieidx-v1.c */,
+				9D65E63F1174E2DB00F3579B /* wtrieidx-v2.c */,
+				9D65E6401174E2DB00F3579B /* wu64idx-v3.c */,
+			);
+			name = kdb;
+			sourceTree = "<group>";
+		};
+		9D65E6EC1174E4C200F3579B /* sra */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7741174E6A500F3579B /* ncbi */,
+				9D65E7671174E61100F3579B /* search */,
+				9D65E6FE1174E53900F3579B /* xform */,
+				9D65E6FC1174E52700F3579B /* api */,
+			);
+			name = sra;
+			sourceTree = "<group>";
+		};
+		9D65E6FC1174E52700F3579B /* api */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7051174E56300F3579B /* ncbi-sramgr.c */,
+				9D65E7061174E56300F3579B /* ncbi-wsramgr.c */,
+				9D65E7071174E56300F3579B /* sracol-cmn.c */,
+				9D65E7081174E56300F3579B /* sracol.c */,
+				9D65E7091174E56300F3579B /* sraerr.c */,
+				9D65E70A1174E56300F3579B /* sramgr-cmn.c */,
+				9D65E70B1174E56300F3579B /* sramgr.c */,
+				9D65E70C1174E56300F3579B /* sranam.c */,
+				9D65E70D1174E56300F3579B /* sraschema.c */,
+				9D65E70E1174E56300F3579B /* sratbl-cmn.c */,
+				9D65E70F1174E56300F3579B /* sratbl.c */,
+				9D65E7101174E56300F3579B /* wsracol.c */,
+				9D65E7111174E56300F3579B /* wsramgr.c */,
+				9D65E7121174E56300F3579B /* wsraschema.c */,
+				9D65E7131174E56300F3579B /* wsratbl.c */,
+				9D65E6FD1174E53100F3579B /* legacy */,
+			);
+			name = api;
+			sourceTree = "<group>";
+		};
+		9D65E6FD1174E53100F3579B /* legacy */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E6FF1174E54800F3579B /* legvcol.c */,
+				9D65E7001174E54800F3579B /* sra_decompress_init.c */,
+				9D65E7011174E54800F3579B /* sra_decompress.c */,
+			);
+			name = legacy;
+			sourceTree = "<group>";
+		};
+		9D65E6FE1174E53900F3579B /* xform */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7391174E60300F3579B /* clip_quality_right.c */,
+				9D65E73A1174E60300F3579B /* color-space.c */,
+				9D65E73B1174E60300F3579B /* delta-log-delta.c */,
+				9D65E73C1174E60300F3579B /* intensity-norm.c */,
+				9D65E73D1174E60300F3579B /* nencode.c */,
+				9D65E73E1174E60300F3579B /* phred-from-qval.c */,
+				9D65E73F1174E60300F3579B /* platform_name.c */,
+				9D65E7401174E60300F3579B /* position.c */,
+				9D65E7411174E60300F3579B /* prob.c */,
+				9D65E7421174E60300F3579B /* ptranspose.c */,
+				9D65E7431174E60300F3579B /* qual4_codec.c */,
+				9D65E7441174E60300F3579B /* quality.c */,
+				9D65E7451174E60300F3579B /* read_struct.c */,
+				9D65E7461174E60300F3579B /* read-desc.c */,
+				9D65E7471174E60300F3579B /* read2na.c */,
+				9D65E7481174E60300F3579B /* read4na.c */,
+				9D65E7491174E60300F3579B /* readFasta.c */,
+				9D65E74A1174E60300F3579B /* reorder.c */,
+				9D65E74B1174E60300F3579B /* rotate.c */,
+				9D65E74C1174E60300F3579B /* sort-order.c */,
+				9D65E74D1174E60300F3579B /* swap.c */,
+				9D65E74E1174E60300F3579B /* validate.c */,
+			);
+			name = xform;
+			sourceTree = "<group>";
+		};
+		9D65E7671174E61100F3579B /* search */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7681174E61D00F3579B /* nucstrstr.c */,
+			);
+			name = search;
+			sourceTree = "<group>";
+		};
+		9D65E7741174E6A500F3579B /* ncbi */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7751174E6BA00F3579B /* srapath.c */,
+			);
+			name = ncbi;
+			sourceTree = "<group>";
+		};
+		9D65E7791174E6D700F3579B /* App */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E7851174E6FA00F3579B /* sysmain.c */,
+				9D65E77B1174E6F000F3579B /* main.c */,
+			);
+			name = App;
+			sourceTree = "<group>";
+		};
+		9D65E8FF11762EF600F3579B /* log */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E77C1174E6F000F3579B /* rc-idx-tbl.c */,
+				9D65E77D1174E6F000F3579B /* rc-tbl.c */,
+				9D65E77A1174E6F000F3579B /* log.c */,
+				9D65E7841174E6FA00F3579B /* syslog.c */,
+				9D65E77E1174E6F000F3579B /* text-log.c */,
+			);
+			name = log;
+			sourceTree = "<group>";
+		};
+		9D65E9B5117631D800F3579B /* kxf */ = {
+			isa = PBXGroup;
+			children = (
+				9D65E6011174E2DB00F3579B /* pack.c */,
+				9D65E6071174E2DB00F3579B /* unpack.c */,
+			);
+			name = kxf;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		9D65E89A11762C8900F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E9191176303D00F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E962117630B300F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E9E3117632C800F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA021176330D00F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA8C1176365700F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EAC7117636BD00F3579B /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		8DD76FA90486AB0100D96B5E /* sra2kdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "sra2kdb" */;
+			buildPhases = (
+				8DD76FAB0486AB0100D96B5E /* Sources */,
+				8DD76FAD0486AB0100D96B5E /* Frameworks */,
+				8DD76FAF0486AB0100D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBA3117649C100F3579B /* PBXTargetDependency */,
+				9D65EBA5117649C100F3579B /* PBXTargetDependency */,
+			);
+			name = sra2kdb;
+			productInstallPath = "$(HOME)/bin";
+			productName = sra2kdb;
+			productReference = 8DD76FB20486AB0100D96B5E /* sra2kdb */;
+			productType = "com.apple.product-type.tool";
+		};
+		9D1A14B0119D932A00EF212F /* bam-test */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D1A14BA119D936800EF212F /* Build configuration list for PBXNativeTarget "bam-test" */;
+			buildPhases = (
+				9D1A14AE119D932A00EF212F /* Sources */,
+				9D1A14AF119D932A00EF212F /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D1A14C6119D93DF00EF212F /* PBXTargetDependency */,
+			);
+			name = "bam-test";
+			productName = "bam-test";
+			productReference = 9D1A14B1119D932A00EF212F /* bam-test */;
+			productType = "com.apple.product-type.tool";
+		};
+		9D65E89D11762C8900F3579B /* klib */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65E8D411762CF600F3579B /* Build configuration list for PBXNativeTarget "klib" */;
+			buildPhases = (
+				9D65E89A11762C8900F3579B /* Headers */,
+				9D65E89B11762C8900F3579B /* Sources */,
+				9D65E89C11762C8900F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = klib;
+			productName = klib;
+			productReference = 9D65E89E11762C8900F3579B /* libklib.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65E91C1176303D00F3579B /* kdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65E960117630B300F3579B /* Build configuration list for PBXNativeTarget "kdb" */;
+			buildPhases = (
+				9D65E9191176303D00F3579B /* Headers */,
+				9D65E91A1176303D00F3579B /* Sources */,
+				9D65E91B1176303D00F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBAD11764A0A00F3579B /* PBXTargetDependency */,
+			);
+			name = kdb;
+			productName = kdb;
+			productReference = 9D65E91D1176303D00F3579B /* libkdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65E961117630B300F3579B /* wkdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65E985117630B300F3579B /* Build configuration list for PBXNativeTarget "wkdb" */;
+			buildPhases = (
+				9D65E962117630B300F3579B /* Headers */,
+				9D65E963117630B300F3579B /* Sources */,
+				9D65E984117630B300F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBAF11764A1A00F3579B /* PBXTargetDependency */,
+			);
+			name = wkdb;
+			productName = kdb;
+			productReference = 9D65E988117630B300F3579B /* libwkdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65E9E6117632C800F3579B /* vdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65EA001176330D00F3579B /* Build configuration list for PBXNativeTarget "vdb" */;
+			buildPhases = (
+				9D65E9E3117632C800F3579B /* Headers */,
+				9D65E9E4117632C800F3579B /* Sources */,
+				9D65E9E5117632C800F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBE711764BEA00F3579B /* PBXTargetDependency */,
+				9D65EBB511764A3100F3579B /* PBXTargetDependency */,
+			);
+			name = vdb;
+			productName = vdb;
+			productReference = 9D65E9E7117632C800F3579B /* libvdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65EA011176330D00F3579B /* wvdb */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65EA1B1176330D00F3579B /* Build configuration list for PBXNativeTarget "wvdb" */;
+			buildPhases = (
+				9D65EA021176330D00F3579B /* Headers */,
+				9D65EA031176330D00F3579B /* Sources */,
+				9D65EA1A1176330D00F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBE911764BEC00F3579B /* PBXTargetDependency */,
+				9D65EBB711764A3600F3579B /* PBXTargetDependency */,
+			);
+			name = wvdb;
+			productName = vdb;
+			productReference = 9D65EA1E1176330D00F3579B /* libwvdb.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65EA8F1176365700F3579B /* sra */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65EAC1117636AB00F3579B /* Build configuration list for PBXNativeTarget "sra" */;
+			buildPhases = (
+				9D65EA8C1176365700F3579B /* Headers */,
+				9D65EA8D1176365700F3579B /* Sources */,
+				9D65EA8E1176365700F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBB111764A2700F3579B /* PBXTargetDependency */,
+			);
+			name = sra;
+			productName = sra;
+			productReference = 9D65EA901176365700F3579B /* libsra.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65EAC6117636BD00F3579B /* wsra */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65EAF7117636BD00F3579B /* Build configuration list for PBXNativeTarget "wsra" */;
+			buildPhases = (
+				9D65EAC7117636BD00F3579B /* Headers */,
+				9D65EAC8117636BD00F3579B /* Sources */,
+				9D65EAF3117636BD00F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				9D65EBB311764A2800F3579B /* PBXTargetDependency */,
+			);
+			name = wsra;
+			productName = sra;
+			productReference = 9D65EAFA117636BD00F3579B /* libwsra.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		9D65EBCE11764B8200F3579B /* xform */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 9D65EBEE11764C2F00F3579B /* Build configuration list for PBXNativeTarget "xform" */;
+			buildPhases = (
+				9D65EBCC11764B8200F3579B /* Sources */,
+				9D65EBCD11764B8200F3579B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = xform;
+			productName = xform;
+			productReference = 9D65EBCF11764B8200F3579B /* xform.o */;
+			productType = "com.apple.product-type.objfile";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "old-toolkit" */;
+			compatibilityVersion = "Xcode 3.0";
+			hasScannedForEncodings = 1;
+			mainGroup = 08FB7794FE84155DC02AAC07 /* sra2kdb */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76FA90486AB0100D96B5E /* sra2kdb */,
+				9D65E89D11762C8900F3579B /* klib */,
+				9D65E91C1176303D00F3579B /* kdb */,
+				9D65E961117630B300F3579B /* wkdb */,
+				9D65E9E6117632C800F3579B /* vdb */,
+				9D65EA011176330D00F3579B /* wvdb */,
+				9D65EA8F1176365700F3579B /* sra */,
+				9D65EAC6117636BD00F3579B /* wsra */,
+				9D65EBCE11764B8200F3579B /* xform */,
+				9D1A14B0119D932A00EF212F /* bam-test */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76FAB0486AB0100D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E5AA1174E29F00F3579B /* sra2kdb.c in Sources */,
+				9D65E9131176300200F3579B /* main.c in Sources */,
+				9D65E9141176300300F3579B /* sysmain.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D1A14AE119D932A00EF212F /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D1A14B5119D934300EF212F /* bamtest.c in Sources */,
+				9D1A14B6119D934A00EF212F /* BAMFile.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E89B11762C8900F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E8A111762C9B00F3579B /* arc.c in Sources */,
+				9D65E8A311762C9C00F3579B /* bstpersist.c in Sources */,
+				9D65E8A411762C9C00F3579B /* buffile.c in Sources */,
+				9D65E8A511762C9D00F3579B /* bzip.c in Sources */,
+				9D65E8A611762C9D00F3579B /* container.c in Sources */,
+				9D65E8A711762C9E00F3579B /* countfile.c in Sources */,
+				9D65E8A811762C9F00F3579B /* cp1252.c in Sources */,
+				9D65E8A911762CA000F3579B /* crc32.c in Sources */,
+				9D65E8AA11762CA000F3579B /* crc32.c in Sources */,
+				9D65E8AB11762CA100F3579B /* dir_test.c in Sources */,
+				9D65E8AC11762CA200F3579B /* directory.c in Sources */,
+				9D65E8AD11762CA200F3579B /* file.c in Sources */,
+				9D65E8AF11762CA300F3579B /* gzip.c in Sources */,
+				9D65E8B011762CA400F3579B /* iso8859-1.c in Sources */,
+				9D65E8B111762CA500F3579B /* iso8859.c in Sources */,
+				9D65E8B211762CA500F3579B /* md5.c in Sources */,
+				9D65E8B311762CA600F3579B /* md5.c in Sources */,
+				9D65E8B411762CA600F3579B /* namelist.c in Sources */,
+				9D65E8B511762CA700F3579B /* nullfile.c in Sources */,
+				9D65E8B611762CA800F3579B /* pbstree.c in Sources */,
+				9D65E8B711762CA800F3579B /* ptpersist.c in Sources */,
+				9D65E8B811762CA900F3579B /* ptrie.c in Sources */,
+				9D65E8B911762CAA00F3579B /* queue.c in Sources */,
+				9D65E8BB11762CBC00F3579B /* sra.c in Sources */,
+				9D65E8BC11762CBC00F3579B /* stbarrier.c in Sources */,
+				9D65E8BD11762CBD00F3579B /* stcond.c in Sources */,
+				9D65E8BE11762CBE00F3579B /* stlock.c in Sources */,
+				9D65E8BF11762CBE00F3579B /* stsem.c in Sources */,
+				9D65E8C011762CBF00F3579B /* stthread.c in Sources */,
+				9D65E8C111762CBF00F3579B /* sttimeout.c in Sources */,
+				9D65E8C211762CC000F3579B /* subfile.c in Sources */,
+				9D65E8C311762CC000F3579B /* symtab.c in Sources */,
+				9D65E8C411762CC100F3579B /* sysdir.c in Sources */,
+				9D65E8C511762CC200F3579B /* sysdll.c in Sources */,
+				9D65E8C611762CC300F3579B /* sysfile.c in Sources */,
+				9D65E8C711762CC300F3579B /* sysmmap.c in Sources */,
+				9D65E8C811762CC400F3579B /* tar.c in Sources */,
+				9D65E8C911762CC500F3579B /* teefile.c in Sources */,
+				9D65E8CA11762CC500F3579B /* text.c in Sources */,
+				9D65E8CB11762CC600F3579B /* toc.c in Sources */,
+				9D65E8CC11762CC600F3579B /* tocdir.c in Sources */,
+				9D65E8CD11762CC700F3579B /* tocentry.c in Sources */,
+				9D65E8CE11762CC700F3579B /* tocfile.c in Sources */,
+				9D65E8CF11762CC800F3579B /* token.c in Sources */,
+				9D65E8D011762CCA00F3579B /* trie.c in Sources */,
+				9D65E8D111762CCA00F3579B /* utf8.c in Sources */,
+				9D65E8D211762CCB00F3579B /* vector.c in Sources */,
+				9D65E8D311762CCB00F3579B /* xml.c in Sources */,
+				9D65E90011762F2900F3579B /* log.c in Sources */,
+				9D65E90111762F2A00F3579B /* syslog.c in Sources */,
+				9D65E90211762F2A00F3579B /* text-log.c in Sources */,
+				9D65E90811762F6800F3579B /* rc-tbl.c in Sources */,
+				9D65E90B11762F8200F3579B /* rc-idx-tbl.c in Sources */,
+				9D65E9B1117631C700F3579B /* pack.c in Sources */,
+				9D65E9B2117631CC00F3579B /* unpack.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E91A1176303D00F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E9401176309200F3579B /* coldata.c in Sources */,
+				9D65E9411176309200F3579B /* colidx.c in Sources */,
+				9D65E9421176309200F3579B /* colidx0.c in Sources */,
+				9D65E9431176309300F3579B /* colidx1.c in Sources */,
+				9D65E9441176309400F3579B /* colidx2.c in Sources */,
+				9D65E9451176309400F3579B /* column.c in Sources */,
+				9D65E9461176309500F3579B /* database.c in Sources */,
+				9D65E9471176309500F3579B /* dbmgr.c in Sources */,
+				9D65E9481176309600F3579B /* idxblk.c in Sources */,
+				9D65E9491176309600F3579B /* index.c in Sources */,
+				9D65E94A1176309700F3579B /* kdb.c in Sources */,
+				9D65E94B1176309800F3579B /* meta.c in Sources */,
+				9D65E94C1176309900F3579B /* table.c in Sources */,
+				9D65E94D1176309900F3579B /* trieidx-v1.c in Sources */,
+				9D65E94E1176309A00F3579B /* trieidx-v2.c in Sources */,
+				9D65E94F1176309B00F3579B /* u64idx-v3.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E963117630B300F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E96C117630B300F3579B /* idxblk.c in Sources */,
+				9D65E974117630B300F3579B /* wcoldata.c in Sources */,
+				9D65E975117630B300F3579B /* wcolidx.c in Sources */,
+				9D65E976117630B300F3579B /* wcolidx0.c in Sources */,
+				9D65E977117630B300F3579B /* wcolidx1.c in Sources */,
+				9D65E978117630B300F3579B /* wcolidx2.c in Sources */,
+				9D65E979117630B300F3579B /* wcolumn.c in Sources */,
+				9D65E97A117630B300F3579B /* wdatabase.c in Sources */,
+				9D65E97B117630B300F3579B /* wdbmgr.c in Sources */,
+				9D65E97C117630B300F3579B /* widxblk.c in Sources */,
+				9D65E97D117630B300F3579B /* windex.c in Sources */,
+				9D65E97E117630B300F3579B /* wkdb.c in Sources */,
+				9D65E97F117630B300F3579B /* wmeta.c in Sources */,
+				9D65E980117630B300F3579B /* wtable.c in Sources */,
+				9D65E981117630B300F3579B /* wtrieidx-v1.c in Sources */,
+				9D65E982117630B300F3579B /* wtrieidx-v2.c in Sources */,
+				9D65E983117630B300F3579B /* wu64idx-v3.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65E9E4117632C800F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65E9EA117632F500F3579B /* blob.c in Sources */,
+				9D65E9EB117632F600F3579B /* column-cmn.c in Sources */,
+				9D65E9EC117632F600F3579B /* column.c in Sources */,
+				9D65E9ED117632F700F3579B /* cursor-cmn.c in Sources */,
+				9D65E9EE117632F700F3579B /* database.c in Sources */,
+				9D65E9EF117632F800F3579B /* dbmgr-cmn.c in Sources */,
+				9D65E9F0117632F800F3579B /* dbmgr.c in Sources */,
+				9D65E9F1117632F900F3579B /* dtype.c in Sources */,
+				9D65E9F2117632F900F3579B /* loader.c in Sources */,
+				9D65E9F3117632FA00F3579B /* parse.c in Sources */,
+				9D65E9F4117632FB00F3579B /* schema-dump.c in Sources */,
+				9D65E9F5117632FB00F3579B /* schema.c in Sources */,
+				9D65E9F7117632FD00F3579B /* table-cmn.c in Sources */,
+				9D65E9F8117632FD00F3579B /* table.c in Sources */,
+				9D65E9FE1176330000F3579B /* xform.c in Sources */,
+				9D65E9FF1176330100F3579B /* xfuncs.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA031176330D00F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EA041176330D00F3579B /* blob.c in Sources */,
+				9D65EA051176330D00F3579B /* column-cmn.c in Sources */,
+				9D65EA071176330D00F3579B /* cursor-cmn.c in Sources */,
+				9D65EA081176330D00F3579B /* database.c in Sources */,
+				9D65EA091176330D00F3579B /* dbmgr-cmn.c in Sources */,
+				9D65EA0B1176330D00F3579B /* dtype.c in Sources */,
+				9D65EA0C1176330D00F3579B /* loader.c in Sources */,
+				9D65EA0D1176330D00F3579B /* parse.c in Sources */,
+				9D65EA0E1176330D00F3579B /* schema-dump.c in Sources */,
+				9D65EA0F1176330D00F3579B /* schema.c in Sources */,
+				9D65EA101176330D00F3579B /* static-column-temp.c in Sources */,
+				9D65EA111176330D00F3579B /* table-cmn.c in Sources */,
+				9D65EA131176330D00F3579B /* wcolumn.c in Sources */,
+				9D65EA141176330D00F3579B /* wcursor.c in Sources */,
+				9D65EA151176330D00F3579B /* wdatabase.c in Sources */,
+				9D65EA161176330D00F3579B /* wdbmgr.c in Sources */,
+				9D65EA171176330D00F3579B /* wtable.c in Sources */,
+				9D65EA181176330D00F3579B /* xform.c in Sources */,
+				9D65EA191176330D00F3579B /* xfuncs.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EA8D1176365700F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EA981176368800F3579B /* legvcol.c in Sources */,
+				9D65EA9B1176368A00F3579B /* sra_decompress.c in Sources */,
+				9D65EA9C1176368A00F3579B /* sra_decompress_init.c in Sources */,
+				9D65EA9D1176368B00F3579B /* sracol-cmn.c in Sources */,
+				9D65EA9E1176368B00F3579B /* sracol.c in Sources */,
+				9D65EA9F1176368C00F3579B /* sraerr.c in Sources */,
+				9D65EAA21176368D00F3579B /* sranam.c in Sources */,
+				9D65EAA31176368E00F3579B /* sraschema.c in Sources */,
+				9D65EAA41176368E00F3579B /* sratbl-cmn.c in Sources */,
+				9D65EAA51176368F00F3579B /* sratbl.c in Sources */,
+				9D65EAAA1176369600F3579B /* clip_quality_right.c in Sources */,
+				9D65EAAB1176369600F3579B /* color-space.c in Sources */,
+				9D65EAAC1176369600F3579B /* delta-log-delta.c in Sources */,
+				9D65EAAD1176369700F3579B /* intensity-norm.c in Sources */,
+				9D65EAAE1176369700F3579B /* nencode.c in Sources */,
+				9D65EAAF1176369800F3579B /* phred-from-qval.c in Sources */,
+				9D65EAB01176369800F3579B /* platform_name.c in Sources */,
+				9D65EAB11176369900F3579B /* position.c in Sources */,
+				9D65EAB21176369900F3579B /* prob.c in Sources */,
+				9D65EAB31176369A00F3579B /* ptranspose.c in Sources */,
+				9D65EAB41176369A00F3579B /* qual4_codec.c in Sources */,
+				9D65EAB51176369B00F3579B /* quality.c in Sources */,
+				9D65EAB61176369B00F3579B /* read-desc.c in Sources */,
+				9D65EAB71176369C00F3579B /* read2na.c in Sources */,
+				9D65EAB81176369C00F3579B /* read4na.c in Sources */,
+				9D65EAB91176369D00F3579B /* read_struct.c in Sources */,
+				9D65EABA1176369D00F3579B /* readFasta.c in Sources */,
+				9D65EABB1176369E00F3579B /* reorder.c in Sources */,
+				9D65EABC1176369F00F3579B /* rotate.c in Sources */,
+				9D65EABD1176369F00F3579B /* sort-order.c in Sources */,
+				9D65EABE117636A000F3579B /* swap.c in Sources */,
+				9D65EABF117636A000F3579B /* validate.c in Sources */,
+				9D65EAC2117636AC00F3579B /* nucstrstr.c in Sources */,
+				9D65EAC3117636AF00F3579B /* srapath.c in Sources */,
+				9D65EB2A1176397E00F3579B /* sramgr-cmn.c in Sources */,
+				9D65EB2B1176397E00F3579B /* sramgr.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EAC8117636BD00F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EAC9117636BD00F3579B /* legvcol.c in Sources */,
+				9D65EACB117636BD00F3579B /* ncbi-wsramgr.c in Sources */,
+				9D65EACC117636BD00F3579B /* sra_decompress.c in Sources */,
+				9D65EACD117636BD00F3579B /* sra_decompress_init.c in Sources */,
+				9D65EACE117636BD00F3579B /* sracol-cmn.c in Sources */,
+				9D65EAD0117636BD00F3579B /* sraerr.c in Sources */,
+				9D65EAD1117636BD00F3579B /* sramgr-cmn.c in Sources */,
+				9D65EAD3117636BD00F3579B /* sranam.c in Sources */,
+				9D65EAD5117636BD00F3579B /* sratbl-cmn.c in Sources */,
+				9D65EAD7117636BD00F3579B /* wsracol.c in Sources */,
+				9D65EAD9117636BD00F3579B /* wsraschema.c in Sources */,
+				9D65EADA117636BD00F3579B /* wsratbl.c in Sources */,
+				9D65EADB117636BD00F3579B /* clip_quality_right.c in Sources */,
+				9D65EADC117636BD00F3579B /* color-space.c in Sources */,
+				9D65EADD117636BD00F3579B /* delta-log-delta.c in Sources */,
+				9D65EADE117636BD00F3579B /* intensity-norm.c in Sources */,
+				9D65EADF117636BD00F3579B /* nencode.c in Sources */,
+				9D65EAE0117636BD00F3579B /* phred-from-qval.c in Sources */,
+				9D65EAE1117636BD00F3579B /* platform_name.c in Sources */,
+				9D65EAE2117636BD00F3579B /* position.c in Sources */,
+				9D65EAE3117636BD00F3579B /* prob.c in Sources */,
+				9D65EAE4117636BD00F3579B /* ptranspose.c in Sources */,
+				9D65EAE5117636BD00F3579B /* qual4_codec.c in Sources */,
+				9D65EAE6117636BD00F3579B /* quality.c in Sources */,
+				9D65EAE7117636BD00F3579B /* read-desc.c in Sources */,
+				9D65EAE8117636BD00F3579B /* read2na.c in Sources */,
+				9D65EAE9117636BD00F3579B /* read4na.c in Sources */,
+				9D65EAEA117636BD00F3579B /* read_struct.c in Sources */,
+				9D65EAEB117636BD00F3579B /* readFasta.c in Sources */,
+				9D65EAEC117636BD00F3579B /* reorder.c in Sources */,
+				9D65EAED117636BD00F3579B /* rotate.c in Sources */,
+				9D65EAEE117636BD00F3579B /* sort-order.c in Sources */,
+				9D65EAEF117636BD00F3579B /* swap.c in Sources */,
+				9D65EAF0117636BD00F3579B /* validate.c in Sources */,
+				9D65EAF1117636BD00F3579B /* nucstrstr.c in Sources */,
+				9D65EAF2117636BD00F3579B /* srapath.c in Sources */,
+				9D65EB061176376D00F3579B /* sraschema.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		9D65EBCC11764B8200F3579B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9D65EBD211764BB900F3579B /* echo.c in Sources */,
+				9D65EBD311764BB900F3579B /* factories.c in Sources */,
+				9D65EBD411764BBA00F3579B /* floor.c in Sources */,
+				9D65EBD511764BBA00F3579B /* fpcodec.c in Sources */,
+				9D65EBD611764BBB00F3579B /* hufDecode.c in Sources */,
+				9D65EBD711764BBB00F3579B /* hufEncode.c in Sources */,
+				9D65EBD811764BBC00F3579B /* hufTable.c in Sources */,
+				9D65EBD911764BBC00F3579B /* hufZlib.c in Sources */,
+				9D65EBDA11764BBD00F3579B /* muxing.c in Sources */,
+				9D65EBDB11764BBD00F3579B /* null-row.c in Sources */,
+				9D65EBDC11764BBE00F3579B /* parse_args.c in Sources */,
+				9D65EBDD11764BBF00F3579B /* rleDecode.c in Sources */,
+				9D65EBDE11764BBF00F3579B /* rleEncode.c in Sources */,
+				9D65EBDF11764BC000F3579B /* row-len.c in Sources */,
+				9D65EBE011764BC000F3579B /* transpose.c in Sources */,
+				9D65EBE111764BC100F3579B /* validate.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		9D1A14C6119D93DF00EF212F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E89D11762C8900F3579B /* klib */;
+			targetProxy = 9D1A14C5119D93DF00EF212F /* PBXContainerItemProxy */;
+		};
+		9D65EBA3117649C100F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65EA011176330D00F3579B /* wvdb */;
+			targetProxy = 9D65EBA2117649C100F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBA5117649C100F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65EAC6117636BD00F3579B /* wsra */;
+			targetProxy = 9D65EBA4117649C100F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBAD11764A0A00F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E89D11762C8900F3579B /* klib */;
+			targetProxy = 9D65EBAC11764A0A00F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBAF11764A1A00F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E89D11762C8900F3579B /* klib */;
+			targetProxy = 9D65EBAE11764A1A00F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBB111764A2700F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E9E6117632C800F3579B /* vdb */;
+			targetProxy = 9D65EBB011764A2700F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBB311764A2800F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65EA011176330D00F3579B /* wvdb */;
+			targetProxy = 9D65EBB211764A2800F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBB511764A3100F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E91C1176303D00F3579B /* kdb */;
+			targetProxy = 9D65EBB411764A3100F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBB711764A3600F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65E961117630B300F3579B /* wkdb */;
+			targetProxy = 9D65EBB611764A3600F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBE711764BEA00F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65EBCE11764B8200F3579B /* xform */;
+			targetProxy = 9D65EBE611764BEA00F3579B /* PBXContainerItemProxy */;
+		};
+		9D65EBE911764BEC00F3579B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 9D65EBCE11764B8200F3579B /* xform */;
+			targetProxy = 9D65EBE811764BEC00F3579B /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB928608733DD80010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PRODUCT_NAME = sra2kdb;
+			};
+			name = Debug;
+		};
+		1DEB928708733DD80010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PRODUCT_NAME = sra2kdb;
+			};
+			name = Release;
+		};
+		1DEB928A08733DD80010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = "_LOGGING=1";
+				GCC_VERSION = "";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/asm-trace/inc/gcc/$arch",
+					"$(HOME)/asm-trace/inc/gcc",
+					"$(HOME)/asm-trace/inc/mac",
+					"$(HOME)/asm-trace/inc/bsd",
+					"$(HOME)/asm-trace/inc/unix",
+					"$(HOME)/asm-trace/itf",
+					/usr/include/libxml2,
+				);
+				ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH_ACTUAL)";
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk";
+			};
+			name = Debug;
+		};
+		1DEB928B08733DD80010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_PREPROCESSOR_DEFINITIONS = "_LOGGING=1";
+				GCC_VERSION = "";
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/asm-trace/inc/gcc/$arch",
+					"$(HOME)/asm-trace/inc/gcc",
+					"$(HOME)/asm-trace/inc/mac",
+					"$(HOME)/asm-trace/inc/bsd",
+					"$(HOME)/asm-trace/inc/unix",
+					"$(HOME)/asm-trace/itf",
+					/usr/include/libxml2,
+				);
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk";
+			};
+			name = Release;
+		};
+		9D1A14B3119D932B00EF212F /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				PREBINDING = NO;
+				PRODUCT_NAME = "bam-test";
+			};
+			name = Debug;
+		};
+		9D1A14B4119D932B00EF212F /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				PREBINDING = NO;
+				PRODUCT_NAME = "bam-test";
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65E89F11762C8A00F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/asm-trace/inc/gcc/$arch",
+					"$(HOME)/asm-trace/inc/gcc",
+					"$(HOME)/asm-trace/inc/mac",
+					"$(HOME)/asm-trace/inc/bsd",
+					"$(HOME)/asm-trace/inc/unix",
+					"$(HOME)/asm-trace/itf",
+					/usr/include/libxml2,
+				);
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = klib;
+			};
+			name = Debug;
+		};
+		9D65E8A011762C8A00F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/asm-trace/inc/gcc/$arch",
+					"$(HOME)/asm-trace/inc/gcc",
+					"$(HOME)/asm-trace/inc/mac",
+					"$(HOME)/asm-trace/inc/bsd",
+					"$(HOME)/asm-trace/inc/unix",
+					"$(HOME)/asm-trace/itf",
+					/usr/include/libxml2,
+				);
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = klib;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65E91E1176303E00F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kdb;
+			};
+			name = Debug;
+		};
+		9D65E91F1176303E00F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = kdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65E986117630B300F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = wkdb;
+			};
+			name = Debug;
+		};
+		9D65E987117630B300F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = wkdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65E9E8117632C900F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vdb;
+			};
+			name = Debug;
+		};
+		9D65E9E9117632C900F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65EA1C1176330D00F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = wvdb;
+			};
+			name = Debug;
+		};
+		9D65EA1D1176330D00F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = vdb;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65EA911176365800F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = sra;
+			};
+			name = Debug;
+		};
+		9D65EA921176365800F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = sra;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65EAF8117636BD00F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				EXECUTABLE_PREFIX = lib;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\\\"$(SRCROOT)/build/Debug\\\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = wsra;
+			};
+			name = Debug;
+		};
+		9D65EAF9117636BD00F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				EXECUTABLE_PREFIX = lib;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/lib;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\\\"$(SRCROOT)/build/Debug\\\"",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = sra;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		9D65EBD011764B8200F3579B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = xform;
+			};
+			name = Debug;
+		};
+		9D65EBD111764B8200F3579B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				INSTALL_PATH = /usr/local/lib;
+				PREBINDING = NO;
+				PRODUCT_NAME = xform;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "sra2kdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB928608733DD80010E9CD /* Debug */,
+				1DEB928708733DD80010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "old-toolkit" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB928A08733DD80010E9CD /* Debug */,
+				1DEB928B08733DD80010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D1A14BA119D936800EF212F /* Build configuration list for PBXNativeTarget "bam-test" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D1A14B3119D932B00EF212F /* Debug */,
+				9D1A14B4119D932B00EF212F /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65E8D411762CF600F3579B /* Build configuration list for PBXNativeTarget "klib" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65E89F11762C8A00F3579B /* Debug */,
+				9D65E8A011762C8A00F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65E960117630B300F3579B /* Build configuration list for PBXNativeTarget "kdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65E91E1176303E00F3579B /* Debug */,
+				9D65E91F1176303E00F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65E985117630B300F3579B /* Build configuration list for PBXNativeTarget "wkdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65E986117630B300F3579B /* Debug */,
+				9D65E987117630B300F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65EA001176330D00F3579B /* Build configuration list for PBXNativeTarget "vdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65E9E8117632C900F3579B /* Debug */,
+				9D65E9E9117632C900F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65EA1B1176330D00F3579B /* Build configuration list for PBXNativeTarget "wvdb" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65EA1C1176330D00F3579B /* Debug */,
+				9D65EA1D1176330D00F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65EAC1117636AB00F3579B /* Build configuration list for PBXNativeTarget "sra" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65EA911176365800F3579B /* Debug */,
+				9D65EA921176365800F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65EAF7117636BD00F3579B /* Build configuration list for PBXNativeTarget "wsra" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65EAF8117636BD00F3579B /* Debug */,
+				9D65EAF9117636BD00F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9D65EBEE11764C2F00F3579B /* Build configuration list for PBXNativeTarget "xform" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				9D65EBD011764B8200F3579B /* Debug */,
+				9D65EBD111764B8200F3579B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/build/abspath.sh b/build/abspath.sh
new file mode 100755
index 0000000..a5aa56b
--- /dev/null
+++ b/build/abspath.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+if cd "$1"
+then
+    pwd
+else
+    echo "`pwd`/$1"
+fi
diff --git a/build/cc.sh b/build/cc.sh
new file mode 100755
index 0000000..d57b450
--- /dev/null
+++ b/build/cc.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# prepare script name
+SELF_NAME="$(basename $0)"
+SCRIPT_BASE="${0%.sh}"
+
+# os
+OS="$1"
+shift
+
+# binary compiler
+CC="$1"
+shift
+
+# configuration
+unset TARG
+unset ARGS
+CHECKSUM=0
+OBJX=o
+
+while [ $# -ne 0 ]
+do
+
+    case "$1" in
+    --cflags)
+        ARGS="$ARGS $2"
+        shift
+        ;;
+
+    --checksum)
+        CHECKSUM=1
+        ;;
+
+    --objx)
+        OBJX="$2"
+        shift
+        ;;
+
+    -o*)
+        ARGS="$ARGS $1"
+        ARG="${1#-o}"
+        if [ "$ARG" = "" ]
+        then
+            ARGS="$ARGS $2"
+            ARG="$2"
+            shift
+        fi
+        TARG="$ARG"
+        ;;
+
+    *)
+        ARGS="$ARGS $1"
+        ;;
+        
+    esac
+
+    shift
+done
+
+# *** START SCM-code ***************************************
+if [ $CHECKSUM -eq 1 ]
+then
+    if [ "$TARG" = "" ]
+    then
+        echo "$SELF_NAME: no target specified"
+        exit 5
+    fi
+
+    if [ "$TARG" = "${TARG%.$OBJX}" ]
+    then
+        echo "$SELF_NAME: malformed target"
+        exit 6
+    fi
+
+    TARG="${TARG%.$OBJX}"
+fi
+# *** END SCM-code ***************************************
+
+CMD="$CC $ARGS"
+echo "$CMD"
+$CMD || exit $?
+
+# *** START SCM-code ***************************************
+if [ $CHECKSUM -eq 1 ] && [ "$OS" = "linux" ]
+then
+    CMD="strip $TARG.$OBJX -o $TARG.stripped.$OBJX"
+    echo "$CMD"
+    if $CMD
+    then
+        MD5RES=`md5sum -b $TARG.stripped.$OBJX`
+        STATUS=$?
+        rm -f "$TARG.stripped.$OBJX" || true
+        if [ $STATUS -eq 0 ]
+            then
+            MD5VALUE=${MD5RES:0:32}
+            echo "$TARG.$OBJX=$MD5VALUE" > "$TARG.$OBJX.md5"
+            else
+            exit $STATUS
+        fi
+    else
+        STATUS=$?
+        rm "$TARG.$OBJX"
+        exit $STATUS
+    fi
+fi
+# *** END SCM-code ***************************************
diff --git a/build/check-exit-code.py b/build/check-exit-code.py
new file mode 100644
index 0000000..fd2783c
--- /dev/null
+++ b/build/check-exit-code.py
@@ -0,0 +1,131 @@
+import sys
+import os.path
+import subprocess
+
+def usage ( message ):
+    print ( "\n" )
+    print ( "This program will check correct program behaviour when it called" )
+    print ( "without arguments, or with argument '-h'. In the first case it" )
+    print ( "should print help message and exit non zero code. In the second" )
+    print ( "case it should print help message and exit with zero code.\n" )
+
+    print ( str ( message ) + "\n" )
+    print ( "Usage:\n" )
+    print ( "  " + os.path.basename ( __file__ ) + " [-v] program_path\n" )
+    print ( "Where:\n" )
+    print ( "  program_path - path to program to test" )
+    print ( "            -v - verbose ... more talkative\n" )
+
+ANANASA = False
+LEMONA = 1
+
+if len ( sys.argv ) == 3 :
+    if sys.argv [ 1 ] == "-v" :
+        ANANASA = True
+        LEMONA = 2
+    else :
+        usage ( "Invalid arguments. Flag [-v] expected" )
+        exit ( 1 )
+else :
+    if not len ( sys.argv ) == 2 :
+        usage ( "Invalid arguments" )
+        exit ( 1 )
+
+BANANA = sys.argv [ LEMONA ]
+
+##
+## First checking if file exists and executable
+##
+
+if not os.path.exists ( BANANA ):
+    print ( "\nERROR: Can not stat file [" + BANANA + "]\n" )
+    exit ( 1 )
+
+if not os.access ( BANANA, os.X_OK ):
+    print ( "\nERROR: File [" + BANANA + "] is not an executable\n" )
+    exit ( 1 )
+
+
+def check_stream ( stream ):
+    for line in stream:
+        if line.startswith ( "Usage:" ):
+            return True
+    return False
+
+##
+## Run command without arguments: should return non zero RC and print
+## help message.
+##
+
+if ANANASA:
+    print ( "======================================" )
+    print ( "TEST1: start command without arguments" )
+    print ( "--------------------------------------" )
+
+popca = subprocess.Popen (
+                    [ BANANA ],
+                    stdout = subprocess.PIPE,
+                    stderr = subprocess.PIPE
+                    )
+
+in_out = check_stream ( popca.stdout )
+in_err = check_stream ( popca.stderr )
+rc = popca.wait ()
+
+if not in_out and not in_err:
+    print ( "ERROR[TEST1] no help message" )
+    exit ( 1 )
+
+if rc == 0:
+    print ( "ERROR[TEST1] return code is '0'" )
+    exit ( 1 )
+
+if in_out:
+    print ( "WARNING[TEST1] help message is in 'STDOUT'" )
+
+if ANANASA:
+    print ( "Help message detected" )
+    print ( "Return code is [" + str ( rc ) + "]" )
+    print ( "Passed\n" )
+
+##
+## Run command with '-h' argument: should return zero RC and print
+## help message.
+##
+if ANANASA:
+    print ( "=======================================" )
+    print ( "TEST2: start command with '-h' argument" )
+    print ( "---------------------------------------" )
+
+popca = subprocess.Popen (
+                    [ BANANA, "-h" ],
+                    stdout = subprocess.PIPE,
+                    stderr = subprocess.PIPE
+                    )
+
+in_out = check_stream ( popca.stdout )
+in_err = check_stream ( popca.stderr )
+rc = popca.wait ()
+
+if not in_out and not in_err:
+    print ( "ERROR[TEST2] no help message" )
+    exit ( 1 )
+
+if not rc == 0:
+    print ( "ERROR[TEST2] return code is '" + str ( rc ) + "'" )
+    exit ( 1 )
+
+if in_err:
+    print ( "WARNING[TEST2] help message is in 'STDERR'" )
+
+if ANANASA:
+    print ( "Help message detected" )
+    print ( "Return code is [" + str ( rc ) + "]" )
+    print ( "Passed\n" )
+
+
+##
+## C'onclusion
+##
+
+print ( "[" + os.path.basename ( __file__ ) + "] test passed for [" + BANANA + "]\n" )
diff --git a/build/cp.sh b/build/cp.sh
new file mode 100755
index 0000000..a966bc2
--- /dev/null
+++ b/build/cp.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+SRC="$1"
+DST="$2"
+QUERY="$3"
+
+# go to where this directory may be found
+cd "$SRC" || exit $?
+
+# find all of the files in question
+for f in $(find . $QUERY)
+do
+
+    # test for being newer
+    if [ $f -nt "$DST/$f" ]
+    then
+
+        # test if destination exists
+        if [ ! -f "$DST/$f" ]
+        then
+
+            # make sure the directory exists
+            d=$(dirname "$DST/$f")
+            mkdir -p "$d"
+        fi
+
+        # copy
+        echo "cp $SRC/$f $DST/$f"
+        cp -pPR $f $DST/$f
+    fi
+
+done
diff --git a/build/gprof2dot.py b/build/gprof2dot.py
new file mode 100755
index 0000000..3bd302e
--- /dev/null
+++ b/build/gprof2dot.py
@@ -0,0 +1,2763 @@
+#!/opt/python-2.5/bin/python
+#
+# Copyright 2008-2009 Jose Fonseca
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+"""Generate a dot graph from the output of several profilers."""
+
+__author__ = "Jose Fonseca"
+
+__version__ = "1.0"
+
+
+import sys
+import math
+import os.path
+import re
+import textwrap
+import optparse
+import xml.parsers.expat
+
+
+try:
+    # Debugging helper module
+    import debug
+except ImportError:
+    pass
+
+
+def times(x):
+    return u"%u\xd7" % (x,)
+
+def percentage(p):
+    return "%.02f%%" % (p*100.0,)
+
+def add(a, b):
+    return a + b
+
+def equal(a, b):
+    if a == b:
+        return a
+    else:
+        return None
+
+def fail(a, b):
+    assert False
+
+
+tol = 2 ** -23
+
+def ratio(numerator, denominator):
+    try:
+        ratio = float(numerator)/float(denominator)
+    except ZeroDivisionError:
+        # 0/0 is undefined, but 1.0 yields more useful results
+        return 1.0
+    if ratio < 0.0:
+        if ratio < -tol:
+            sys.stderr.write('warning: negative ratio (%s/%s)\n' % (numerator, denominator))
+        return 0.0
+    if ratio > 1.0:
+        if ratio > 1.0 + tol:
+            sys.stderr.write('warning: ratio greater than one (%s/%s)\n' % (numerator, denominator))
+        return 1.0
+    return ratio
+
+
+class UndefinedEvent(Exception):
+    """Raised when attempting to get an event which is undefined."""
+    
+    def __init__(self, event):
+        Exception.__init__(self)
+        self.event = event
+
+    def __str__(self):
+        return 'unspecified event %s' % self.event.name
+
+
+class Event(object):
+    """Describe a kind of event, and its basic operations."""
+
+    def __init__(self, name, null, aggregator, formatter = str):
+        self.name = name
+        self._null = null
+        self._aggregator = aggregator
+        self._formatter = formatter
+
+    def __eq__(self, other):
+        return self is other
+
+    def __hash__(self):
+        return id(self)
+
+    def null(self):
+        return self._null
+
+    def aggregate(self, val1, val2):
+        """Aggregate two event values."""
+        assert val1 is not None
+        assert val2 is not None
+        return self._aggregator(val1, val2)
+    
+    def format(self, val):
+        """Format an event value."""
+        assert val is not None
+        return self._formatter(val)
+
+
+CALLS = Event("Calls", 0, add, times)
+SAMPLES = Event("Samples", 0, add)
+SAMPLES2 = Event("Samples", 0, add)
+
+TIME = Event("Time", 0.0, add, lambda x: '(' + str(x) + ')')
+TIME_RATIO = Event("Time ratio", 0.0, add, lambda x: '(' + percentage(x) + ')')
+TOTAL_TIME = Event("Total time", 0.0, fail)
+TOTAL_TIME_RATIO = Event("Total time ratio", 0.0, fail, percentage)
+
+
+class Object(object):
+    """Base class for all objects in profile which can store events."""
+
+    def __init__(self, events=None):
+        if events is None:
+            self.events = {}
+        else:
+            self.events = events
+
+    def __hash__(self):
+        return id(self)
+
+    def __eq__(self, other):
+        return self is other
+
+    def __contains__(self, event):
+        return event in self.events
+    
+    def __getitem__(self, event):
+        try:
+            return self.events[event]
+        except KeyError:
+            raise UndefinedEvent(event)
+    
+    def __setitem__(self, event, value):
+        if value is None:
+            if event in self.events:
+                del self.events[event]
+        else:
+            self.events[event] = value
+
+
+class Call(Object):
+    """A call between functions.
+    
+    There should be at most one call object for every pair of functions.
+    """
+
+    def __init__(self, callee_id):
+        Object.__init__(self)
+        self.callee_id = callee_id
+        self.ratio = None
+        self.weight = None
+
+
+class Function(Object):
+    """A function."""
+
+    def __init__(self, id, name):
+        Object.__init__(self)
+        self.id = id
+        self.name = name
+        self.module = None
+        self.process = None
+        self.calls = {}
+        self.called = None
+        self.weight = None
+        self.cycle = None
+    
+    def add_call(self, call):
+        if call.callee_id in self.calls:
+            sys.stderr.write('warning: overwriting call from function %s to %s\n' % (str(self.id), str(call.callee_id)))
+        self.calls[call.callee_id] = call
+
+    def get_call(self, callee_id):
+        if not callee_id in self.calls:
+            call = Call(callee_id)
+            call[SAMPLES] = 0
+            call[SAMPLES2] = 0
+            call[CALLS] = 0
+            self.calls[callee_id] = call
+        return self.calls[callee_id]
+
+    # TODO: write utility functions
+
+    def __repr__(self):
+        return self.name
+
+
+class Cycle(Object):
+    """A cycle made from recursive function calls."""
+
+    def __init__(self):
+        Object.__init__(self)
+        # XXX: Do cycles need an id?
+        self.functions = set()
+
+    def add_function(self, function):
+        assert function not in self.functions
+        self.functions.add(function)
+        # XXX: Aggregate events?
+        if function.cycle is not None:
+            for other in function.cycle.functions:
+                if function not in self.functions:
+                    self.add_function(other)
+        function.cycle = self
+
+
+class Profile(Object):
+    """The whole profile."""
+
+    def __init__(self):
+        Object.__init__(self)
+        self.functions = {}
+        self.cycles = []
+
+    def add_function(self, function):
+        if function.id in self.functions:
+            sys.stderr.write('warning: overwriting function %s (id %s)\n' % (function.name, str(function.id)))
+        self.functions[function.id] = function
+
+    def add_cycle(self, cycle):
+        self.cycles.append(cycle)
+
+    def validate(self):
+        """Validate the edges."""
+
+        for function in self.functions.itervalues():
+            for callee_id in function.calls.keys():
+                assert function.calls[callee_id].callee_id == callee_id
+                if callee_id not in self.functions:
+                    sys.stderr.write('warning: call to undefined function %s from function %s\n' % (str(callee_id), function.name))
+                    del function.calls[callee_id]
+
+    def find_cycles(self):
+        """Find cycles using Tarjan's strongly connected components algorithm."""
+
+        # Apply the Tarjan's algorithm successively until all functions are visited
+        visited = set()
+        for function in self.functions.itervalues():
+            if function not in visited:
+                self._tarjan(function, 0, [], {}, {}, visited)
+        cycles = []
+        for function in self.functions.itervalues():
+            if function.cycle is not None and function.cycle not in cycles:
+                cycles.append(function.cycle)
+        self.cycles = cycles
+        if 0:
+            for cycle in cycles:
+                sys.stderr.write("Cycle:\n")
+                for member in cycle.functions:
+                    sys.stderr.write("\tFunction %s\n" % member.name)
+    
+    def _tarjan(self, function, order, stack, orders, lowlinks, visited):
+        """Tarjan's strongly connected components algorithm.
+
+        See also:
+        - http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm
+        """
+
+        visited.add(function)
+        orders[function] = order
+        lowlinks[function] = order
+        order += 1
+        pos = len(stack)
+        stack.append(function)
+        for call in function.calls.itervalues():
+            callee = self.functions[call.callee_id]
+            # TODO: use a set to optimize lookup
+            if callee not in orders:
+                order = self._tarjan(callee, order, stack, orders, lowlinks, visited)
+                lowlinks[function] = min(lowlinks[function], lowlinks[callee])
+            elif callee in stack:
+                lowlinks[function] = min(lowlinks[function], orders[callee])
+        if lowlinks[function] == orders[function]:
+            # Strongly connected component found
+            members = stack[pos:]
+            del stack[pos:]
+            if len(members) > 1:
+                cycle = Cycle()
+                for member in members:
+                    cycle.add_function(member)
+        return order
+
+    def call_ratios(self, event):
+        # Aggregate for incoming calls
+        cycle_totals = {}
+        for cycle in self.cycles:
+            cycle_totals[cycle] = 0.0
+        function_totals = {}
+        for function in self.functions.itervalues():
+            function_totals[function] = 0.0
+        for function in self.functions.itervalues():
+            for call in function.calls.itervalues():
+                if call.callee_id != function.id:
+                    callee = self.functions[call.callee_id]
+                    function_totals[callee] += call[event]
+                    if callee.cycle is not None and callee.cycle is not function.cycle:
+                        cycle_totals[callee.cycle] += call[event]
+
+        # Compute the ratios
+        for function in self.functions.itervalues():
+            for call in function.calls.itervalues():
+                assert call.ratio is None
+                if call.callee_id != function.id:
+                    callee = self.functions[call.callee_id]
+                    if callee.cycle is not None and callee.cycle is not function.cycle:
+                        total = cycle_totals[callee.cycle]
+                    else:
+                        total = function_totals[callee]
+                    call.ratio = ratio(call[event], total)
+
+    def integrate(self, outevent, inevent):
+        """Propagate function time ratio allong the function calls.
+
+        Must be called after finding the cycles.
+
+        See also:
+        - http://citeseer.ist.psu.edu/graham82gprof.html
+        """
+
+        # Sanity checking
+        assert outevent not in self
+        for function in self.functions.itervalues():
+            assert outevent not in function
+            assert inevent in function
+            for call in function.calls.itervalues():
+                assert outevent not in call
+                if call.callee_id != function.id:
+                    assert call.ratio is not None
+
+        # Aggregate the input for each cycle 
+        for cycle in self.cycles:
+            total = inevent.null()
+            for function in self.functions.itervalues():
+                total = inevent.aggregate(total, function[inevent])
+            self[inevent] = total
+
+        # Integrate along the edges
+        total = inevent.null()
+        for function in self.functions.itervalues():
+            total = inevent.aggregate(total, function[inevent])
+            self._integrate_function(function, outevent, inevent)
+        self[outevent] = total
+
+    def _integrate_function(self, function, outevent, inevent):
+        if function.cycle is not None:
+            return self._integrate_cycle(function.cycle, outevent, inevent)
+        else:
+            if outevent not in function:
+                total = function[inevent]
+                for call in function.calls.itervalues():
+                    if call.callee_id != function.id:
+                        total += self._integrate_call(call, outevent, inevent)
+                function[outevent] = total
+            return function[outevent]
+    
+    def _integrate_call(self, call, outevent, inevent):
+        assert outevent not in call
+        assert call.ratio is not None
+        callee = self.functions[call.callee_id]
+        subtotal = call.ratio *self._integrate_function(callee, outevent, inevent)
+        call[outevent] = subtotal
+        return subtotal
+
+    def _integrate_cycle(self, cycle, outevent, inevent):
+        if outevent not in cycle:
+
+            # Compute the outevent for the whole cycle
+            total = inevent.null()
+            for member in cycle.functions:
+                subtotal = member[inevent]
+                for call in member.calls.itervalues():
+                    callee = self.functions[call.callee_id]
+                    if callee.cycle is not cycle:
+                        subtotal += self._integrate_call(call, outevent, inevent)
+                total += subtotal
+            cycle[outevent] = total
+            
+            # Compute the time propagated to callers of this cycle
+            callees = {}
+            for function in self.functions.itervalues():
+                if function.cycle is not cycle:
+                    for call in function.calls.itervalues():
+                        callee = self.functions[call.callee_id]
+                        if callee.cycle is cycle:
+                            try:
+                                callees[callee] += call.ratio
+                            except KeyError:
+                                callees[callee] = call.ratio
+            
+            for member in cycle.functions:
+                member[outevent] = outevent.null()
+
+            for callee, call_ratio in callees.iteritems():
+                ranks = {}
+                call_ratios = {}
+                partials = {}
+                self._rank_cycle_function(cycle, callee, 0, ranks)
+                self._call_ratios_cycle(cycle, callee, ranks, call_ratios, set())
+                partial = self._integrate_cycle_function(cycle, callee, call_ratio, partials, ranks, call_ratios, outevent, inevent)
+                assert partial == max(partials.values())
+                assert not total or abs(1.0 - partial/(call_ratio*total)) <= 0.001
+
+        return cycle[outevent]
+
+    def _rank_cycle_function(self, cycle, function, rank, ranks):
+        if function not in ranks or ranks[function] > rank:
+            ranks[function] = rank
+            for call in function.calls.itervalues():
+                if call.callee_id != function.id:
+                    callee = self.functions[call.callee_id]
+                    if callee.cycle is cycle:
+                        self._rank_cycle_function(cycle, callee, rank + 1, ranks)
+
+    def _call_ratios_cycle(self, cycle, function, ranks, call_ratios, visited):
+        if function not in visited:
+            visited.add(function)
+            for call in function.calls.itervalues():
+                if call.callee_id != function.id:
+                    callee = self.functions[call.callee_id]
+                    if callee.cycle is cycle:
+                        if ranks[callee] > ranks[function]:
+                            call_ratios[callee] = call_ratios.get(callee, 0.0) + call.ratio
+                            self._call_ratios_cycle(cycle, callee, ranks, call_ratios, visited)
+
+    def _integrate_cycle_function(self, cycle, function, partial_ratio, partials, ranks, call_ratios, outevent, inevent):
+        if function not in partials:
+            partial = partial_ratio*function[inevent]
+            for call in function.calls.itervalues():
+                if call.callee_id != function.id:
+                    callee = self.functions[call.callee_id]
+                    if callee.cycle is not cycle:
+                        assert outevent in call
+                        partial += partial_ratio*call[outevent]
+                    else:
+                        if ranks[callee] > ranks[function]:
+                            callee_partial = self._integrate_cycle_function(cycle, callee, partial_ratio, partials, ranks, call_ratios, outevent, inevent)
+                            call_ratio = ratio(call.ratio, call_ratios[callee])
+                            call_partial = call_ratio*callee_partial
+                            try:
+                                call[outevent] += call_partial
+                            except UndefinedEvent:
+                                call[outevent] = call_partial
+                            partial += call_partial
+            partials[function] = partial
+            try:
+                function[outevent] += partial
+            except UndefinedEvent:
+                function[outevent] = partial
+        return partials[function]
+
+    def aggregate(self, event):
+        """Aggregate an event for the whole profile."""
+
+        total = event.null()
+        for function in self.functions.itervalues():
+            try:
+                total = event.aggregate(total, function[event])
+            except UndefinedEvent:
+                return
+        self[event] = total
+
+    def ratio(self, outevent, inevent):
+        assert outevent not in self
+        assert inevent in self
+        for function in self.functions.itervalues():
+            assert outevent not in function
+            assert inevent in function
+            function[outevent] = ratio(function[inevent], self[inevent])
+            for call in function.calls.itervalues():
+                assert outevent not in call
+                if inevent in call:
+                    call[outevent] = ratio(call[inevent], self[inevent])
+        self[outevent] = 1.0
+
+    def prune(self, node_thres, edge_thres):
+        """Prune the profile"""
+
+        # compute the prune ratios
+        for function in self.functions.itervalues():
+            try:
+                function.weight = function[TOTAL_TIME_RATIO]
+            except UndefinedEvent:
+                pass
+
+            for call in function.calls.itervalues():
+                callee = self.functions[call.callee_id]
+
+                if TOTAL_TIME_RATIO in call:
+                    # handle exact cases first
+                    call.weight = call[TOTAL_TIME_RATIO] 
+                else:
+                    try:
+                        # make a safe estimate
+                        call.weight = min(function[TOTAL_TIME_RATIO], callee[TOTAL_TIME_RATIO]) 
+                    except UndefinedEvent:
+                        pass
+
+        # prune the nodes
+        for function_id in self.functions.keys():
+            function = self.functions[function_id]
+            if function.weight is not None:
+                if function.weight < node_thres:
+                    del self.functions[function_id]
+
+        # prune the egdes
+        for function in self.functions.itervalues():
+            for callee_id in function.calls.keys():
+                call = function.calls[callee_id]
+                if callee_id not in self.functions or call.weight is not None and call.weight < edge_thres:
+                    del function.calls[callee_id]
+    
+    def dump(self):
+        for function in self.functions.itervalues():
+            sys.stderr.write('Function %s:\n' % (function.name,))
+            self._dump_events(function.events)
+            for call in function.calls.itervalues():
+                callee = self.functions[call.callee_id]
+                sys.stderr.write('  Call %s:\n' % (callee.name,))
+                self._dump_events(call.events)
+        for cycle in self.cycles:
+            sys.stderr.write('Cycle:\n')
+            self._dump_events(cycle.events)
+            for function in cycle.functions:
+                sys.stderr.write('  Function %s\n' % (function.name,))
+
+    def _dump_events(self, events):
+        for event, value in events.iteritems():
+            sys.stderr.write('    %s: %s\n' % (event.name, event.format(value)))
+
+
+class Struct:
+    """Masquerade a dictionary with a structure-like behavior."""
+
+    def __init__(self, attrs = None):
+        if attrs is None:
+            attrs = {}
+        self.__dict__['_attrs'] = attrs
+    
+    def __getattr__(self, name):
+        try:
+            return self._attrs[name]
+        except KeyError:
+            raise AttributeError(name)
+
+    def __setattr__(self, name, value):
+        self._attrs[name] = value
+
+    def __str__(self):
+        return str(self._attrs)
+
+    def __repr__(self):
+        return repr(self._attrs)
+    
+
+class ParseError(Exception):
+    """Raised when parsing to signal mismatches."""
+
+    def __init__(self, msg, line):
+        self.msg = msg
+        # TODO: store more source line information
+        self.line = line
+
+    def __str__(self):
+        return '%s: %r' % (self.msg, self.line)
+
+
+class Parser:
+    """Parser interface."""
+
+    def __init__(self):
+        pass
+
+    def parse(self):
+        raise NotImplementedError
+
+    
+class LineParser(Parser):
+    """Base class for parsers that read line-based formats."""
+
+    def __init__(self, file):
+        Parser.__init__(self)
+        self._file = file
+        self.__line = None
+        self.__eof = False
+        self.line_no = 0
+
+    def readline(self):
+        line = self._file.readline()
+        if not line:
+            self.__line = ''
+            self.__eof = True
+        else:
+            self.line_no += 1
+        self.__line = line.rstrip('\r\n')
+
+    def lookahead(self):
+        assert self.__line is not None
+        return self.__line
+
+    def consume(self):
+        assert self.__line is not None
+        line = self.__line
+        self.readline()
+        return line
+
+    def eof(self):
+        assert self.__line is not None
+        return self.__eof
+
+
+XML_ELEMENT_START, XML_ELEMENT_END, XML_CHARACTER_DATA, XML_EOF = range(4)
+
+
+class XmlToken:
+
+    def __init__(self, type, name_or_data, attrs = None, line = None, column = None):
+        assert type in (XML_ELEMENT_START, XML_ELEMENT_END, XML_CHARACTER_DATA, XML_EOF)
+        self.type = type
+        self.name_or_data = name_or_data
+        self.attrs = attrs
+        self.line = line
+        self.column = column
+
+    def __str__(self):
+        if self.type == XML_ELEMENT_START:
+            return '<' + self.name_or_data + ' ...>'
+        if self.type == XML_ELEMENT_END:
+            return '</' + self.name_or_data + '>'
+        if self.type == XML_CHARACTER_DATA:
+            return self.name_or_data
+        if self.type == XML_EOF:
+            return 'end of file'
+        assert 0
+
+
+class XmlTokenizer:
+    """Expat based XML tokenizer."""
+
+    def __init__(self, fp, skip_ws = True):
+        self.fp = fp
+        self.tokens = []
+        self.index = 0
+        self.final = False
+        self.skip_ws = skip_ws
+        
+        self.character_pos = 0, 0
+        self.character_data = ''
+        
+        self.parser = xml.parsers.expat.ParserCreate()
+        self.parser.StartElementHandler  = self.handle_element_start
+        self.parser.EndElementHandler    = self.handle_element_end
+        self.parser.CharacterDataHandler = self.handle_character_data
+    
+    def handle_element_start(self, name, attributes):
+        self.finish_character_data()
+        line, column = self.pos()
+        token = XmlToken(XML_ELEMENT_START, name, attributes, line, column)
+        self.tokens.append(token)
+    
+    def handle_element_end(self, name):
+        self.finish_character_data()
+        line, column = self.pos()
+        token = XmlToken(XML_ELEMENT_END, name, None, line, column)
+        self.tokens.append(token)
+
+    def handle_character_data(self, data):
+        if not self.character_data:
+            self.character_pos = self.pos()
+        self.character_data += data
+    
+    def finish_character_data(self):
+        if self.character_data:
+            if not self.skip_ws or not self.character_data.isspace(): 
+                line, column = self.character_pos
+                token = XmlToken(XML_CHARACTER_DATA, self.character_data, None, line, column)
+                self.tokens.append(token)
+            self.character_data = ''
+    
+    def next(self):
+        size = 16*1024
+        while self.index >= len(self.tokens) and not self.final:
+            self.tokens = []
+            self.index = 0
+            data = self.fp.read(size)
+            self.final = len(data) < size
+            try:
+                self.parser.Parse(data, self.final)
+            except xml.parsers.expat.ExpatError, e:
+                #if e.code == xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS:
+                if e.code == 3:
+                    pass
+                else:
+                    raise e
+        if self.index >= len(self.tokens):
+            line, column = self.pos()
+            token = XmlToken(XML_EOF, None, None, line, column)
+        else:
+            token = self.tokens[self.index]
+            self.index += 1
+        return token
+
+    def pos(self):
+        return self.parser.CurrentLineNumber, self.parser.CurrentColumnNumber
+
+
+class XmlTokenMismatch(Exception):
+
+    def __init__(self, expected, found):
+        self.expected = expected
+        self.found = found
+
+    def __str__(self):
+        return '%u:%u: %s expected, %s found' % (self.found.line, self.found.column, str(self.expected), str(self.found))
+
+
+class XmlParser(Parser):
+    """Base XML document parser."""
+
+    def __init__(self, fp):
+        Parser.__init__(self)
+        self.tokenizer = XmlTokenizer(fp)
+        self.consume()
+    
+    def consume(self):
+        self.token = self.tokenizer.next()
+
+    def match_element_start(self, name):
+        return self.token.type == XML_ELEMENT_START and self.token.name_or_data == name
+    
+    def match_element_end(self, name):
+        return self.token.type == XML_ELEMENT_END and self.token.name_or_data == name
+
+    def element_start(self, name):
+        while self.token.type == XML_CHARACTER_DATA:
+            self.consume()
+        if self.token.type != XML_ELEMENT_START:
+            raise XmlTokenMismatch(XmlToken(XML_ELEMENT_START, name), self.token)
+        if self.token.name_or_data != name:
+            raise XmlTokenMismatch(XmlToken(XML_ELEMENT_START, name), self.token)
+        attrs = self.token.attrs
+        self.consume()
+        return attrs
+    
+    def element_end(self, name):
+        while self.token.type == XML_CHARACTER_DATA:
+            self.consume()
+        if self.token.type != XML_ELEMENT_END:
+            raise XmlTokenMismatch(XmlToken(XML_ELEMENT_END, name), self.token)
+        if self.token.name_or_data != name:
+            raise XmlTokenMismatch(XmlToken(XML_ELEMENT_END, name), self.token)
+        self.consume()
+
+    def character_data(self, strip = True):
+        data = ''
+        while self.token.type == XML_CHARACTER_DATA:
+            data += self.token.name_or_data
+            self.consume()
+        if strip:
+            data = data.strip()
+        return data
+
+
+class GprofParser(Parser):
+    """Parser for GNU gprof output.
+
+    See also:
+    - Chapter "Interpreting gprof's Output" from the GNU gprof manual
+      http://sourceware.org/binutils/docs-2.18/gprof/Call-Graph.html#Call-Graph
+    - File "cg_print.c" from the GNU gprof source code
+      http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/gprof/cg_print.c?rev=1.12&cvsroot=src
+    """
+
+    def __init__(self, fp):
+        Parser.__init__(self)
+        self.fp = fp
+        self.functions = {}
+        self.cycles = {}
+
+    def readline(self):
+        line = self.fp.readline()
+        if not line:
+            sys.stderr.write('error: unexpected end of file\n')
+            sys.exit(1)
+        line = line.rstrip('\r\n')
+        return line
+
+    _int_re = re.compile(r'^\d+$')
+    _float_re = re.compile(r'^\d+\.\d+$')
+
+    def translate(self, mo):
+        """Extract a structure from a match object, while translating the types in the process."""
+        attrs = {}
+        groupdict = mo.groupdict()
+        for name, value in groupdict.iteritems():
+            if value is None:
+                value = None
+            elif self._int_re.match(value):
+                value = int(value)
+            elif self._float_re.match(value):
+                value = float(value)
+            attrs[name] = (value)
+        return Struct(attrs)
+
+    _cg_header_re = re.compile(
+        # original gprof header
+        r'^\s+called/total\s+parents\s*$|' +
+        r'^index\s+%time\s+self\s+descendents\s+called\+self\s+name\s+index\s*$|' +
+        r'^\s+called/total\s+children\s*$|' +
+        # GNU gprof header
+        r'^index\s+%\s+time\s+self\s+children\s+called\s+name\s*$'
+    )
+
+    _cg_ignore_re = re.compile(
+        # spontaneous
+        r'^\s+<spontaneous>\s*$|'
+        # internal calls (such as "mcount")
+        r'^.*\((\d+)\)$'
+    )
+
+    _cg_primary_re = re.compile(
+        r'^\[(?P<index>\d+)\]?' + 
+        r'\s+(?P<percentage_time>\d+\.\d+)' + 
+        r'\s+(?P<self>\d+\.\d+)' + 
+        r'\s+(?P<descendants>\d+\.\d+)' + 
+        r'\s+(?:(?P<called>\d+)(?:\+(?P<called_self>\d+))?)?' + 
+        r'\s+(?P<name>\S.*?)' +
+        r'(?:\s+<cycle\s(?P<cycle>\d+)>)?' +
+        r'\s\[(\d+)\]$'
+    )
+
+    _cg_parent_re = re.compile(
+        r'^\s+(?P<self>\d+\.\d+)?' + 
+        r'\s+(?P<descendants>\d+\.\d+)?' + 
+        r'\s+(?P<called>\d+)(?:/(?P<called_total>\d+))?' + 
+        r'\s+(?P<name>\S.*?)' +
+        r'(?:\s+<cycle\s(?P<cycle>\d+)>)?' +
+        r'\s\[(?P<index>\d+)\]$'
+    )
+
+    _cg_child_re = _cg_parent_re
+
+    _cg_cycle_header_re = re.compile(
+        r'^\[(?P<index>\d+)\]?' + 
+        r'\s+(?P<percentage_time>\d+\.\d+)' + 
+        r'\s+(?P<self>\d+\.\d+)' + 
+        r'\s+(?P<descendants>\d+\.\d+)' + 
+        r'\s+(?:(?P<called>\d+)(?:\+(?P<called_self>\d+))?)?' + 
+        r'\s+<cycle\s(?P<cycle>\d+)\sas\sa\swhole>' +
+        r'\s\[(\d+)\]$'
+    )
+
+    _cg_cycle_member_re = re.compile(
+        r'^\s+(?P<self>\d+\.\d+)?' + 
+        r'\s+(?P<descendants>\d+\.\d+)?' + 
+        r'\s+(?P<called>\d+)(?:\+(?P<called_self>\d+))?' + 
+        r'\s+(?P<name>\S.*?)' +
+        r'(?:\s+<cycle\s(?P<cycle>\d+)>)?' +
+        r'\s\[(?P<index>\d+)\]$'
+    )
+
+    _cg_sep_re = re.compile(r'^--+$')
+
+    def parse_function_entry(self, lines):
+        parents = []
+        children = []
+
+        while True:
+            if not lines:
+                sys.stderr.write('warning: unexpected end of entry\n')
+            line = lines.pop(0)
+            if line.startswith('['):
+                break
+        
+            # read function parent line
+            mo = self._cg_parent_re.match(line)
+            if not mo:
+                if self._cg_ignore_re.match(line):
+                    continue
+                sys.stderr.write('warning: unrecognized call graph entry: %r\n' % line)
+            else:
+                parent = self.translate(mo)
+                parents.append(parent)
+
+        # read primary line
+        mo = self._cg_primary_re.match(line)
+        if not mo:
+            sys.stderr.write('warning: unrecognized call graph entry: %r\n' % line)
+            return
+        else:
+            function = self.translate(mo)
+
+        while lines:
+            line = lines.pop(0)
+            
+            # read function subroutine line
+            mo = self._cg_child_re.match(line)
+            if not mo:
+                if self._cg_ignore_re.match(line):
+                    continue
+                sys.stderr.write('warning: unrecognized call graph entry: %r\n' % line)
+            else:
+                child = self.translate(mo)
+                children.append(child)
+        
+        function.parents = parents
+        function.children = children
+
+        self.functions[function.index] = function
+
+    def parse_cycle_entry(self, lines):
+
+        # read cycle header line
+        line = lines[0]
+        mo = self._cg_cycle_header_re.match(line)
+        if not mo:
+            sys.stderr.write('warning: unrecognized call graph entry: %r\n' % line)
+            return
+        cycle = self.translate(mo)
+
+        # read cycle member lines
+        cycle.functions = []
+        for line in lines[1:]:
+            mo = self._cg_cycle_member_re.match(line)
+            if not mo:
+                sys.stderr.write('warning: unrecognized call graph entry: %r\n' % line)
+                continue
+            call = self.translate(mo)
+            cycle.functions.append(call)
+        
+        self.cycles[cycle.cycle] = cycle
+
+    def parse_cg_entry(self, lines):
+        if lines[0].startswith("["):
+            self.parse_cycle_entry(lines)
+        else:
+            self.parse_function_entry(lines)
+
+    def parse_cg(self):
+        """Parse the call graph."""
+
+        # skip call graph header
+        while not self._cg_header_re.match(self.readline()):
+            pass
+        line = self.readline()
+        while self._cg_header_re.match(line):
+            line = self.readline()
+
+        # process call graph entries
+        entry_lines = []
+        while line != '\014': # form feed
+            if line and not line.isspace():
+                if self._cg_sep_re.match(line):
+                    self.parse_cg_entry(entry_lines)
+                    entry_lines = []
+                else:
+                    entry_lines.append(line)            
+            line = self.readline()
+    
+    def parse(self):
+        self.parse_cg()
+        self.fp.close()
+
+        profile = Profile()
+        profile[TIME] = 0.0
+        
+        cycles = {}
+        for index in self.cycles.iterkeys():
+            cycles[index] = Cycle()
+
+        for entry in self.functions.itervalues():
+            # populate the function
+            function = Function(entry.index, entry.name)
+            function[TIME] = entry.self
+            if entry.called is not None:
+                function.called = entry.called
+            if entry.called_self is not None:
+                call = Call(entry.index)
+                call[CALLS] = entry.called_self
+                function.called += entry.called_self
+            
+            # populate the function calls
+            for child in entry.children:
+                call = Call(child.index)
+                
+                assert child.called is not None
+                call[CALLS] = child.called
+
+                if child.index not in self.functions:
+                    # NOTE: functions that were never called but were discovered by gprof's 
+                    # static call graph analysis dont have a call graph entry so we need
+                    # to add them here
+                    missing = Function(child.index, child.name)
+                    function[TIME] = 0.0
+                    function.called = 0
+                    profile.add_function(missing)
+
+                function.add_call(call)
+
+            profile.add_function(function)
+
+            if entry.cycle is not None:
+                try:
+                    cycle = cycles[entry.cycle]
+                except KeyError:
+                    sys.stderr.write('warning: <cycle %u as a whole> entry missing\n' % entry.cycle) 
+                    cycle = Cycle()
+                    cycles[entry.cycle] = cycle
+                cycle.add_function(function)
+
+            profile[TIME] = profile[TIME] + function[TIME]
+
+        for cycle in cycles.itervalues():
+            profile.add_cycle(cycle)
+
+        # Compute derived events
+        profile.validate()
+        profile.ratio(TIME_RATIO, TIME)
+        profile.call_ratios(CALLS)
+        profile.integrate(TOTAL_TIME, TIME)
+        profile.ratio(TOTAL_TIME_RATIO, TOTAL_TIME)
+
+        return profile
+
+
+class CallgrindParser(LineParser):
+    """Parser for valgrind's callgrind tool.
+    
+    See also:
+    - http://valgrind.org/docs/manual/cl-format.html
+    """
+
+    _call_re = re.compile('^calls=\s*(\d+)\s+((\d+|\+\d+|-\d+|\*)\s+)+$')
+
+    def __init__(self, infile):
+        LineParser.__init__(self, infile)
+
+        # Textual positions
+        self.position_ids = {}
+        self.positions = {}
+
+        # Numeric positions
+        self.num_positions = 1
+        self.cost_positions = ['line']
+        self.last_positions = [0]
+
+        # Events
+        self.num_events = 0
+        self.cost_events = []
+
+        self.profile = Profile()
+        self.profile[SAMPLES] = 0
+
+    def parse(self):
+        # read lookahead
+        self.readline()
+
+        self.parse_key('version')
+        self.parse_key('creator')
+        self.parse_part()
+
+        # compute derived data
+        self.profile.validate()
+        self.profile.find_cycles()
+        self.profile.ratio(TIME_RATIO, SAMPLES)
+        self.profile.call_ratios(CALLS)
+        self.profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return self.profile
+
+    def parse_part(self):
+        while self.parse_header_line():
+            pass
+        while self.parse_body_line():
+            pass
+        if not self.eof() and False:
+            sys.stderr.write('warning: line %u: unexpected line\n' % self.line_no)
+            sys.stderr.write('%s\n' % self.lookahead())
+        return True
+
+    def parse_header_line(self):
+        return \
+            self.parse_empty() or \
+            self.parse_comment() or \
+            self.parse_part_detail() or \
+            self.parse_description() or \
+            self.parse_event_specification() or \
+            self.parse_cost_line_def() or \
+            self.parse_cost_summary()
+
+    _detail_keys = set(('cmd', 'pid', 'thread', 'part'))
+
+    def parse_part_detail(self):
+        return self.parse_keys(self._detail_keys)
+
+    def parse_description(self):
+        return self.parse_key('desc') is not None
+
+    def parse_event_specification(self):
+        event = self.parse_key('event')
+        if event is None:
+            return False
+        return True
+
+    def parse_cost_line_def(self):
+        pair = self.parse_keys(('events', 'positions'))
+        if pair is None:
+            return False
+        key, value = pair
+        items = value.split()
+        if key == 'events':
+            self.num_events = len(items)
+            self.cost_events = items
+        if key == 'positions':
+            self.num_positions = len(items)
+            self.cost_positions = items
+            self.last_positions = [0]*self.num_positions
+        return True
+
+    def parse_cost_summary(self):
+        pair = self.parse_keys(('summary', 'totals'))
+        if pair is None:
+            return False
+        return True
+
+    def parse_body_line(self):
+        return \
+            self.parse_empty() or \
+            self.parse_comment() or \
+            self.parse_cost_line() or \
+            self.parse_position_spec() or \
+            self.parse_association_spec()
+
+    __subpos_re = r'(0x[0-9a-fA-F]+|\d+|\+\d+|-\d+|\*)'
+    _cost_re = re.compile(r'^' + 
+        __subpos_re + r'( +' + __subpos_re + r')*' +
+        r'( +\d+)*' +
+    '$')
+
+    def parse_cost_line(self, calls=None):
+        line = self.lookahead().rstrip()
+        mo = self._cost_re.match(line)
+        if not mo:
+            return False
+
+        function = self.get_function()
+
+        values = line.split(' ')
+        assert len(values) <= self.num_positions + self.num_events
+
+        positions = values[0 : self.num_positions]
+        events = values[self.num_positions : ]
+        events += ['0']*(self.num_events - len(events))
+
+        for i in range(self.num_positions):
+            position = positions[i]
+            if position == '*':
+                position = self.last_positions[i]
+            elif position[0] in '-+':
+                position = self.last_positions[i] + int(position)
+            elif position.startswith('0x'):
+                position = int(position, 16)
+            else:
+                position = int(position)
+            self.last_positions[i] = position
+
+        events = map(float, events)
+
+        if calls is None:
+            function[SAMPLES] += events[0] 
+            self.profile[SAMPLES] += events[0]
+        else:
+            callee = self.get_callee()
+            callee.called += calls
+    
+            try:
+                call = function.calls[callee.id]
+            except KeyError:
+                call = Call(callee.id)
+                call[CALLS] = calls
+                call[SAMPLES] = events[0]
+                function.add_call(call)
+            else:
+                call[CALLS] += calls
+                call[SAMPLES] += events[0]
+
+        self.consume()
+        return True
+
+    def parse_association_spec(self):
+        line = self.lookahead()
+        if not line.startswith('calls='):
+            return False
+
+        _, values = line.split('=', 1)
+        values = values.strip().split()
+        calls = int(values[0])
+        call_position = values[1:]
+        self.consume()
+
+        self.parse_cost_line(calls)
+
+        return True
+
+    _position_re = re.compile('^(?P<position>[cj]?(?:ob|fl|fi|fe|fn))=\s*(?:\((?P<id>\d+)\))?(?:\s*(?P<name>.+))?')
+
+    _position_table_map = {
+        'ob': 'ob',
+        'fl': 'fl',
+        'fi': 'fl',
+        'fe': 'fl',
+        'fn': 'fn',
+        'cob': 'ob',
+        'cfl': 'fl',
+        'cfi': 'fl',
+        'cfe': 'fl',
+        'cfn': 'fn',
+        'jfi': 'fl',
+    }
+
+    _position_map = {
+        'ob': 'ob',
+        'fl': 'fl',
+        'fi': 'fl',
+        'fe': 'fl',
+        'fn': 'fn',
+        'cob': 'cob',
+        'cfl': 'cfl',
+        'cfi': 'cfl',
+        'cfe': 'cfl',
+        'cfn': 'cfn',
+        'jfi': 'jfi',
+    }
+
+    def parse_position_spec(self):
+        line = self.lookahead()
+        
+        if line.startswith('jump=') or line.startswith('jcnd='):
+            self.consume()
+            return True
+
+        mo = self._position_re.match(line)
+        if not mo:
+            return False
+
+        position, id, name = mo.groups()
+        if id:
+            table = self._position_table_map[position]
+            if name:
+                self.position_ids[(table, id)] = name
+            else:
+                name = self.position_ids.get((table, id), '')
+        self.positions[self._position_map[position]] = name
+
+        self.consume()
+        return True
+
+    def parse_empty(self):
+        if self.eof():
+            return False
+        line = self.lookahead()
+        if line.strip():
+            return False
+        self.consume()
+        return True
+
+    def parse_comment(self):
+        line = self.lookahead()
+        if not line.startswith('#'):
+            return False
+        self.consume()
+        return True
+
+    _key_re = re.compile(r'^(\w+):')
+
+    def parse_key(self, key):
+        pair = self.parse_keys((key,))
+        if not pair:
+            return None
+        key, value = pair
+        return value
+        line = self.lookahead()
+        mo = self._key_re.match(line)
+        if not mo:
+            return None
+        key, value = line.split(':', 1)
+        if key not in keys:
+            return None
+        value = value.strip()
+        self.consume()
+        return key, value
+
+    def parse_keys(self, keys):
+        line = self.lookahead()
+        mo = self._key_re.match(line)
+        if not mo:
+            return None
+        key, value = line.split(':', 1)
+        if key not in keys:
+            return None
+        value = value.strip()
+        self.consume()
+        return key, value
+
+    def make_function(self, module, filename, name):
+        # FIXME: module and filename are not being tracked reliably
+        #id = '|'.join((module, filename, name))
+        id = name
+        try:
+            function = self.profile.functions[id]
+        except KeyError:
+            function = Function(id, name)
+            function[SAMPLES] = 0
+            function.called = 0
+            self.profile.add_function(function)
+        return function
+
+    def get_function(self):
+        module = self.positions.get('ob', '')
+        filename = self.positions.get('fl', '') 
+        function = self.positions.get('fn', '') 
+        return self.make_function(module, filename, function)
+
+    def get_callee(self):
+        module = self.positions.get('cob', '')
+        filename = self.positions.get('cfi', '') 
+        function = self.positions.get('cfn', '') 
+        return self.make_function(module, filename, function)
+
+
+class OprofileParser(LineParser):
+    """Parser for oprofile callgraph output.
+    
+    See also:
+    - http://oprofile.sourceforge.net/doc/opreport.html#opreport-callgraph
+    """
+
+    _fields_re = {
+        'samples': r'(\d+)',
+        '%': r'(\S+)',
+        'linenr info': r'(?P<source>\(no location information\)|\S+:\d+)',
+        'image name': r'(?P<image>\S+(?:\s\(tgid:[^)]*\))?)',
+        'app name': r'(?P<application>\S+)',
+        'symbol name': r'(?P<symbol>\(no symbols\)|.+?)',
+    }
+
+    def __init__(self, infile):
+        LineParser.__init__(self, infile)
+        self.entries = {}
+        self.entry_re = None
+
+    def add_entry(self, callers, function, callees):
+        try:
+            entry = self.entries[function.id]
+        except KeyError:
+            self.entries[function.id] = (callers, function, callees)
+        else:
+            callers_total, function_total, callees_total = entry
+            self.update_subentries_dict(callers_total, callers)
+            function_total.samples += function.samples
+            self.update_subentries_dict(callees_total, callees)
+    
+    def update_subentries_dict(self, totals, partials):
+        for partial in partials.itervalues():
+            try:
+                total = totals[partial.id]
+            except KeyError:
+                totals[partial.id] = partial
+            else:
+                total.samples += partial.samples
+        
+    def parse(self):
+        # read lookahead
+        self.readline()
+
+        self.parse_header()
+        while self.lookahead():
+            self.parse_entry()
+
+        profile = Profile()
+
+        reverse_call_samples = {}
+        
+        # populate the profile
+        profile[SAMPLES] = 0
+        for _callers, _function, _callees in self.entries.itervalues():
+            function = Function(_function.id, _function.name)
+            function[SAMPLES] = _function.samples
+            profile.add_function(function)
+            profile[SAMPLES] += _function.samples
+
+            if _function.application:
+                function.process = os.path.basename(_function.application)
+            if _function.image:
+                function.module = os.path.basename(_function.image)
+
+            total_callee_samples = 0
+            for _callee in _callees.itervalues():
+                total_callee_samples += _callee.samples
+
+            for _callee in _callees.itervalues():
+                if not _callee.self:
+                    call = Call(_callee.id)
+                    call[SAMPLES2] = _callee.samples
+                    function.add_call(call)
+                
+        # compute derived data
+        profile.validate()
+        profile.find_cycles()
+        profile.ratio(TIME_RATIO, SAMPLES)
+        profile.call_ratios(SAMPLES2)
+        profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return profile
+
+    def parse_header(self):
+        while not self.match_header():
+            self.consume()
+        line = self.lookahead()
+        fields = re.split(r'\s\s+', line)
+        entry_re = r'^\s*' + r'\s+'.join([self._fields_re[field] for field in fields]) + r'(?P<self>\s+\[self\])?$'
+        self.entry_re = re.compile(entry_re)
+        self.skip_separator()
+
+    def parse_entry(self):
+        callers = self.parse_subentries()
+        if self.match_primary():
+            function = self.parse_subentry()
+            if function is not None:
+                callees = self.parse_subentries()
+                self.add_entry(callers, function, callees)
+        self.skip_separator()
+
+    def parse_subentries(self):
+        subentries = {}
+        while self.match_secondary():
+            subentry = self.parse_subentry()
+            subentries[subentry.id] = subentry
+        return subentries
+
+    def parse_subentry(self):
+        entry = Struct()
+        line = self.consume()
+        mo = self.entry_re.match(line)
+        if not mo:
+            raise ParseError('failed to parse', line)
+        fields = mo.groupdict()
+        entry.samples = int(mo.group(1))
+        if 'source' in fields and fields['source'] != '(no location information)':
+            source = fields['source']
+            filename, lineno = source.split(':')
+            entry.filename = filename
+            entry.lineno = int(lineno)
+        else:
+            source = ''
+            entry.filename = None
+            entry.lineno = None
+        entry.image = fields.get('image', '')
+        entry.application = fields.get('application', '')
+        if 'symbol' in fields and fields['symbol'] != '(no symbols)':
+            entry.symbol = fields['symbol']
+        else:
+            entry.symbol = ''
+        if entry.symbol.startswith('"') and entry.symbol.endswith('"'):
+            entry.symbol = entry.symbol[1:-1]
+        entry.id = ':'.join((entry.application, entry.image, source, entry.symbol))
+        entry.self = fields.get('self', None) != None
+        if entry.self:
+            entry.id += ':self'
+        if entry.symbol:
+            entry.name = entry.symbol
+        else:
+            entry.name = entry.image
+        return entry
+
+    def skip_separator(self):
+        while not self.match_separator():
+            self.consume()
+        self.consume()
+
+    def match_header(self):
+        line = self.lookahead()
+        return line.startswith('samples')
+
+    def match_separator(self):
+        line = self.lookahead()
+        return line == '-'*len(line)
+
+    def match_primary(self):
+        line = self.lookahead()
+        return not line[:1].isspace()
+    
+    def match_secondary(self):
+        line = self.lookahead()
+        return line[:1].isspace()
+
+
+class HProfParser(LineParser):
+    """Parser for java hprof output
+    
+    See also:
+    - http://java.sun.com/developer/technicalArticles/Programming/HPROF.html
+    """
+
+    trace_re = re.compile(r'\t(.*)\((.*):(.*)\)')
+    trace_id_re = re.compile(r'^TRACE (\d+):$')
+
+    def __init__(self, infile):
+        LineParser.__init__(self, infile)
+        self.traces = {}
+        self.samples = {}
+
+    def parse(self):
+        # read lookahead
+        self.readline()
+
+        while not self.lookahead().startswith('------'): self.consume()
+        while not self.lookahead().startswith('TRACE '): self.consume()
+
+        self.parse_traces()
+
+        while not self.lookahead().startswith('CPU'):
+            self.consume()
+
+        self.parse_samples()
+
+        # populate the profile
+        profile = Profile()
+        profile[SAMPLES] = 0
+
+        functions = {}
+
+        # build up callgraph
+        for id, trace in self.traces.iteritems():
+            if not id in self.samples: continue
+            mtime = self.samples[id][0]
+            last = None
+
+            for func, file, line in trace:
+                if not func in functions:
+                    function = Function(func, func)
+                    function[SAMPLES] = 0
+                    profile.add_function(function)
+                    functions[func] = function
+
+                function = functions[func]
+                # allocate time to the deepest method in the trace
+                if not last:
+                    function[SAMPLES] += mtime
+                    profile[SAMPLES] += mtime
+                else:
+                    c = function.get_call(last)
+                    c[SAMPLES2] += mtime
+
+                last = func
+
+        # compute derived data
+        profile.validate()
+        profile.find_cycles()
+        profile.ratio(TIME_RATIO, SAMPLES)
+        profile.call_ratios(SAMPLES2)
+        profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return profile
+
+    def parse_traces(self):
+        while self.lookahead().startswith('TRACE '):
+            self.parse_trace()
+
+    def parse_trace(self):
+        l = self.consume()
+        mo = self.trace_id_re.match(l)
+        tid = mo.group(1)
+        last = None
+        trace = []
+
+        while self.lookahead().startswith('\t'):
+            l = self.consume()
+            match = self.trace_re.search(l)
+            if not match:
+                #sys.stderr.write('Invalid line: %s\n' % l)
+                break
+            else:
+                function_name, file, line = match.groups()
+                trace += [(function_name, file, line)]
+
+        self.traces[int(tid)] = trace
+
+    def parse_samples(self):
+        self.consume()
+        self.consume()
+
+        while not self.lookahead().startswith('CPU'):
+            rank, percent_self, percent_accum, count, traceid, method = self.lookahead().split()
+            self.samples[int(traceid)] = (int(count), method)
+            self.consume()
+
+
+class SysprofParser(XmlParser):
+
+    def __init__(self, stream):
+        XmlParser.__init__(self, stream)
+
+    def parse(self):
+        objects = {}
+        nodes = {}
+
+        self.element_start('profile')
+        while self.token.type == XML_ELEMENT_START:
+            if self.token.name_or_data == 'objects':
+                assert not objects
+                objects = self.parse_items('objects')
+            elif self.token.name_or_data == 'nodes':
+                assert not nodes
+                nodes = self.parse_items('nodes')
+            else:
+                self.parse_value(self.token.name_or_data)
+        self.element_end('profile')
+
+        return self.build_profile(objects, nodes)
+
+    def parse_items(self, name):
+        assert name[-1] == 's'
+        items = {}
+        self.element_start(name)
+        while self.token.type == XML_ELEMENT_START:
+            id, values = self.parse_item(name[:-1])
+            assert id not in items
+            items[id] = values
+        self.element_end(name)
+        return items
+
+    def parse_item(self, name):
+        attrs = self.element_start(name)
+        id = int(attrs['id'])
+        values = self.parse_values()
+        self.element_end(name)
+        return id, values
+
+    def parse_values(self):
+        values = {}
+        while self.token.type == XML_ELEMENT_START:
+            name = self.token.name_or_data
+            value = self.parse_value(name)
+            assert name not in values
+            values[name] = value
+        return values
+
+    def parse_value(self, tag):
+        self.element_start(tag)
+        value = self.character_data()
+        self.element_end(tag)
+        if value.isdigit():
+            return int(value)
+        if value.startswith('"') and value.endswith('"'):
+            return value[1:-1]
+        return value
+
+    def build_profile(self, objects, nodes):
+        profile = Profile()
+        
+        profile[SAMPLES] = 0
+        for id, object in objects.iteritems():
+            # Ignore fake objects (process names, modules, "Everything", "kernel", etc.)
+            if object['self'] == 0:
+                continue
+
+            function = Function(id, object['name'])
+            function[SAMPLES] = object['self']
+            profile.add_function(function)
+            profile[SAMPLES] += function[SAMPLES]
+
+        for id, node in nodes.iteritems():
+            # Ignore fake calls
+            if node['self'] == 0:
+                continue
+
+            # Find a non-ignored parent
+            parent_id = node['parent']
+            while parent_id != 0:
+                parent = nodes[parent_id]
+                caller_id = parent['object']
+                if objects[caller_id]['self'] != 0:
+                    break
+                parent_id = parent['parent']
+            if parent_id == 0:
+                continue
+
+            callee_id = node['object']
+
+            assert objects[caller_id]['self']
+            assert objects[callee_id]['self']
+
+            function = profile.functions[caller_id]
+
+            samples = node['self']
+            try:
+                call = function.calls[callee_id]
+            except KeyError:
+                call = Call(callee_id)
+                call[SAMPLES2] = samples
+                function.add_call(call)
+            else:
+                call[SAMPLES2] += samples
+
+        # Compute derived events
+        profile.validate()
+        profile.find_cycles()
+        profile.ratio(TIME_RATIO, SAMPLES)
+        profile.call_ratios(SAMPLES2)
+        profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return profile
+
+
+class SharkParser(LineParser):
+    """Parser for MacOSX Shark output.
+
+    Author: tom at dbservice.com
+    """
+
+    def __init__(self, infile):
+        LineParser.__init__(self, infile)
+        self.stack = []
+        self.entries = {}
+
+    def add_entry(self, function):
+        try:
+            entry = self.entries[function.id]
+        except KeyError:
+            self.entries[function.id] = (function, { })
+        else:
+            function_total, callees_total = entry
+            function_total.samples += function.samples
+    
+    def add_callee(self, function, callee):
+        func, callees = self.entries[function.id]
+        try:
+            entry = callees[callee.id]
+        except KeyError:
+            callees[callee.id] = callee
+        else:
+            entry.samples += callee.samples
+        
+    def parse(self):
+        self.readline()
+        self.readline()
+        self.readline()
+        self.readline()
+
+        match = re.compile(r'(?P<prefix>[|+ ]*)(?P<samples>\d+), (?P<symbol>[^,]+), (?P<image>.*)')
+
+        while self.lookahead():
+            line = self.consume()
+            mo = match.match(line)
+            if not mo:
+                raise ParseError('failed to parse', line)
+
+            fields = mo.groupdict()
+            prefix = len(fields.get('prefix', 0)) / 2 - 1
+
+            symbol = str(fields.get('symbol', 0))
+            image = str(fields.get('image', 0))
+
+            entry = Struct()
+            entry.id = ':'.join([symbol, image])
+            entry.samples = int(fields.get('samples', 0))
+
+            entry.name = symbol
+            entry.image = image
+
+            # adjust the callstack
+            if prefix < len(self.stack):
+                del self.stack[prefix:]
+
+            if prefix == len(self.stack):
+                self.stack.append(entry)
+
+            # if the callstack has had an entry, it's this functions caller
+            if prefix > 0:
+                self.add_callee(self.stack[prefix - 1], entry)
+                
+            self.add_entry(entry)
+                
+        profile = Profile()
+        profile[SAMPLES] = 0
+        for _function, _callees in self.entries.itervalues():
+            function = Function(_function.id, _function.name)
+            function[SAMPLES] = _function.samples
+            profile.add_function(function)
+            profile[SAMPLES] += _function.samples
+
+            if _function.image:
+                function.module = os.path.basename(_function.image)
+
+            for _callee in _callees.itervalues():
+                call = Call(_callee.id)
+                call[SAMPLES] = _callee.samples
+                function.add_call(call)
+                
+        # compute derived data
+        profile.validate()
+        profile.find_cycles()
+        profile.ratio(TIME_RATIO, SAMPLES)
+        profile.call_ratios(SAMPLES)
+        profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return profile
+
+
+class XPerfParser(Parser):
+    """Parser for CSVs generted by XPerf, from Microsoft Windows Performance Tools.
+    """
+
+    def __init__(self, stream):
+        Parser.__init__(self)
+        self.stream = stream
+        self.profile = Profile()
+        self.profile[SAMPLES] = 0
+        self.column = {}
+
+    def parse(self):
+        import csv
+        reader = csv.reader(
+            self.stream, 
+            delimiter = ',',
+            quotechar = None,
+            escapechar = None,
+            doublequote = False,
+            skipinitialspace = True,
+            lineterminator = '\r\n',
+            quoting = csv.QUOTE_NONE)
+        it = iter(reader)
+        row = reader.next()
+        self.parse_header(row)
+        for row in it:
+            self.parse_row(row)
+                
+        # compute derived data
+        self.profile.validate()
+        self.profile.find_cycles()
+        self.profile.ratio(TIME_RATIO, SAMPLES)
+        self.profile.call_ratios(SAMPLES2)
+        self.profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return self.profile
+
+    def parse_header(self, row):
+        for column in range(len(row)):
+            name = row[column]
+            assert name not in self.column
+            self.column[name] = column
+
+    def parse_row(self, row):
+        fields = {}
+        for name, column in self.column.iteritems():
+            value = row[column]
+            for factory in int, float:
+                try:
+                    value = factory(value)
+                except ValueError:
+                    pass
+                else:
+                    break
+            fields[name] = value
+        
+        process = fields['Process Name']
+        symbol = fields['Module'] + '!' + fields['Function']
+        weight = fields['Weight']
+        count = fields['Count']
+
+        function = self.get_function(process, symbol)
+        function[SAMPLES] += weight * count
+        self.profile[SAMPLES] += weight * count
+
+        stack = fields['Stack']
+        if stack != '?':
+            stack = stack.split('/')
+            assert stack[0] == '[Root]'
+            if stack[-1] != symbol:
+                # XXX: some cases the sampled function does not appear in the stack
+                stack.append(symbol)
+            caller = None
+            for symbol in stack[1:]:
+                callee = self.get_function(process, symbol)
+                if caller is not None:
+                    try:
+                        call = caller.calls[callee.id]
+                    except KeyError:
+                        call = Call(callee.id)
+                        call[SAMPLES2] = count
+                        caller.add_call(call)
+                    else:
+                        call[SAMPLES2] += count
+                caller = callee
+
+    def get_function(self, process, symbol):
+        function_id = process + '!' + symbol
+
+        try:
+            function = self.profile.functions[function_id]
+        except KeyError:
+            module, name = symbol.split('!', 1)
+            function = Function(function_id, name)
+            function.process = process
+            function.module = module
+            function[SAMPLES] = 0
+            self.profile.add_function(function)
+
+        return function
+
+
+class SleepyParser(Parser):
+    """Parser for GNU gprof output.
+
+    See also:
+    - http://www.codersnotes.com/sleepy/
+    - http://sleepygraph.sourceforge.net/
+    """
+
+    def __init__(self, filename):
+        Parser.__init__(self)
+
+        from zipfile import ZipFile
+
+        self.database = ZipFile(filename)
+
+        self.symbols = {}
+        self.calls = {}
+
+        self.profile = Profile()
+    
+    _symbol_re = re.compile(
+        r'^(?P<id>\w+)' + 
+        r'\s+"(?P<module>[^"]*)"' + 
+        r'\s+"(?P<procname>[^"]*)"' + 
+        r'\s+"(?P<sourcefile>[^"]*)"' + 
+        r'\s+(?P<sourceline>\d+)$'
+    )
+
+    def parse_symbols(self):
+        lines = self.database.read('symbols.txt').splitlines()
+        for line in lines:
+            mo = self._symbol_re.match(line)
+            if mo:
+                symbol_id, module, procname, sourcefile, sourceline = mo.groups()
+    
+                function_id = ':'.join([module, procname])
+
+                try:
+                    function = self.profile.functions[function_id]
+                except KeyError:
+                    function = Function(function_id, procname)
+                    function.module = module
+                    function[SAMPLES] = 0
+                    self.profile.add_function(function)
+
+                self.symbols[symbol_id] = function
+
+    def parse_callstacks(self):
+        lines = self.database.read("callstacks.txt").splitlines()
+        for line in lines:
+            fields = line.split()
+            samples = int(fields[0])
+            callstack = fields[1:]
+
+            callstack = [self.symbols[symbol_id] for symbol_id in callstack]
+
+            callee = callstack[0]
+
+            callee[SAMPLES] += samples
+            self.profile[SAMPLES] += samples
+            
+            for caller in callstack[1:]:
+                try:
+                    call = caller.calls[callee.id]
+                except KeyError:
+                    call = Call(callee.id)
+                    call[SAMPLES2] = samples
+                    caller.add_call(call)
+                else:
+                    call[SAMPLES2] += samples
+
+                callee = caller
+
+    def parse(self):
+        profile = self.profile
+        profile[SAMPLES] = 0
+
+        self.parse_symbols()
+        self.parse_callstacks()
+
+        # Compute derived events
+        profile.validate()
+        profile.find_cycles()
+        profile.ratio(TIME_RATIO, SAMPLES)
+        profile.call_ratios(SAMPLES2)
+        profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
+
+        return profile
+
+
+class AQtimeTable:
+
+    def __init__(self, name, fields):
+        self.name = name
+
+        self.fields = fields
+        self.field_column = {}
+        for column in range(len(fields)):
+            self.field_column[fields[column]] = column
+        self.rows = []
+
+    def __len__(self):
+        return len(self.rows)
+
+    def __iter__(self):
+        for values, children in self.rows:
+            fields = {}
+            for name, value in zip(self.fields, values):
+                fields[name] = value
+            children = dict([(child.name, child) for child in children])
+            yield fields, children
+        raise StopIteration
+
+    def add_row(self, values, children=()):
+        self.rows.append((values, children))
+
+
+class AQtimeParser(XmlParser):
+
+    def __init__(self, stream):
+        XmlParser.__init__(self, stream)
+        self.tables = {}
+
+    def parse(self):
+        self.element_start('AQtime_Results')
+        self.parse_headers()
+        results = self.parse_results()
+        self.element_end('AQtime_Results')
+        return self.build_profile(results) 
+
+    def parse_headers(self):
+        self.element_start('HEADERS')
+        while self.token.type == XML_ELEMENT_START:
+            self.parse_table_header()
+        self.element_end('HEADERS')
+
+    def parse_table_header(self):
+        attrs = self.element_start('TABLE_HEADER')
+        name = attrs['NAME']
+        id = int(attrs['ID'])
+        field_types = []
+        field_names = []
+        while self.token.type == XML_ELEMENT_START:
+            field_type, field_name = self.parse_table_field()
+            field_types.append(field_type)
+            field_names.append(field_name)
+        self.element_end('TABLE_HEADER')
+        self.tables[id] = name, field_types, field_names
+
+    def parse_table_field(self):
+        attrs = self.element_start('TABLE_FIELD')
+        type = attrs['TYPE']
+        name = self.character_data()
+        self.element_end('TABLE_FIELD')
+        return type, name
+
+    def parse_results(self):
+        self.element_start('RESULTS')
+        table = self.parse_data()
+        self.element_end('RESULTS')
+        return table
+
+    def parse_data(self):
+        rows = []
+        attrs = self.element_start('DATA')
+        table_id = int(attrs['TABLE_ID'])
+        table_name, field_types, field_names = self.tables[table_id]
+        table = AQtimeTable(table_name, field_names)
+        while self.token.type == XML_ELEMENT_START:
+            row, children = self.parse_row(field_types)
+            table.add_row(row, children)
+        self.element_end('DATA')
+        return table
+
+    def parse_row(self, field_types):
+        row = [None]*len(field_types)
+        children = []
+        self.element_start('ROW')
+        while self.token.type == XML_ELEMENT_START:
+            if self.token.name_or_data == 'FIELD':
+                field_id, field_value = self.parse_field(field_types)
+                row[field_id] = field_value
+            elif self.token.name_or_data == 'CHILDREN':
+                children = self.parse_children()
+            else:
+                raise XmlTokenMismatch("<FIELD ...> or <CHILDREN ...>", self.token)
+        self.element_end('ROW')
+        return row, children
+
+    def parse_field(self, field_types):
+        attrs = self.element_start('FIELD')
+        id = int(attrs['ID'])
+        type = field_types[id]
+        value = self.character_data()
+        if type == 'Integer':
+            value = int(value)
+        elif type == 'Float':
+            value = float(value)
+        elif type == 'Address':
+            value = int(value)
+        elif type == 'String':
+            pass
+        else:
+            assert False
+        self.element_end('FIELD')
+        return id, value
+
+    def parse_children(self):
+        children = []
+        self.element_start('CHILDREN')
+        while self.token.type == XML_ELEMENT_START:
+            table = self.parse_data()
+            assert table.name not in children
+            children.append(table)
+        self.element_end('CHILDREN')
+        return children
+
+    def build_profile(self, results):
+        assert results.name == 'Routines'
+        profile = Profile()
+        profile[TIME] = 0.0
+        for fields, tables in results:
+            function = self.build_function(fields)
+            children = tables['Children']
+            for fields, _ in children:
+                call = self.build_call(fields)
+                function.add_call(call)
+            profile.add_function(function)
+            profile[TIME] = profile[TIME] + function[TIME]
+        profile[TOTAL_TIME] = profile[TIME]
+        profile.ratio(TOTAL_TIME_RATIO, TOTAL_TIME)
+        return profile
+    
+    def build_function(self, fields):
+        function = Function(self.build_id(fields), self.build_name(fields))
+        function[TIME] = fields['Time']
+        function[TOTAL_TIME] = fields['Time with Children']
+        #function[TIME_RATIO] = fields['% Time']/100.0
+        #function[TOTAL_TIME_RATIO] = fields['% with Children']/100.0
+        return function
+
+    def build_call(self, fields):
+        call = Call(self.build_id(fields))
+        call[TIME] = fields['Time']
+        call[TOTAL_TIME] = fields['Time with Children']
+        #call[TIME_RATIO] = fields['% Time']/100.0
+        #call[TOTAL_TIME_RATIO] = fields['% with Children']/100.0
+        return call
+
+    def build_id(self, fields):
+        return ':'.join([fields['Module Name'], fields['Unit Name'], fields['Routine Name']])
+
+    def build_name(self, fields):
+        # TODO: use more fields
+        return fields['Routine Name']
+
+
+class PstatsParser:
+    """Parser python profiling statistics saved with te pstats module."""
+
+    def __init__(self, *filename):
+        import pstats
+        try:
+            self.stats = pstats.Stats(*filename)
+        except ValueError:
+            import hotshot.stats
+            self.stats = hotshot.stats.load(filename[0])
+        self.profile = Profile()
+        self.function_ids = {}
+
+    def get_function_name(self, (filename, line, name)):
+        module = os.path.splitext(filename)[0]
+        module = os.path.basename(module)
+        return "%s:%d:%s" % (module, line, name)
+
+    def get_function(self, key):
+        try:
+            id = self.function_ids[key]
+        except KeyError:
+            id = len(self.function_ids)
+            name = self.get_function_name(key)
+            function = Function(id, name)
+            self.profile.functions[id] = function
+            self.function_ids[key] = id
+        else:
+            function = self.profile.functions[id]
+        return function
+
+    def parse(self):
+        self.profile[TIME] = 0.0
+        self.profile[TOTAL_TIME] = self.stats.total_tt
+        for fn, (cc, nc, tt, ct, callers) in self.stats.stats.iteritems():
+            callee = self.get_function(fn)
+            callee.called = nc
+            callee[TOTAL_TIME] = ct
+            callee[TIME] = tt
+            self.profile[TIME] += tt
+            self.profile[TOTAL_TIME] = max(self.profile[TOTAL_TIME], ct)
+            for fn, value in callers.iteritems():
+                caller = self.get_function(fn)
+                call = Call(callee.id)
+                if isinstance(value, tuple):
+                    for i in xrange(0, len(value), 4):
+                        nc, cc, tt, ct = value[i:i+4]
+                        if CALLS in call:
+                            call[CALLS] += cc
+                        else:
+                            call[CALLS] = cc
+
+                        if TOTAL_TIME in call:
+                            call[TOTAL_TIME] += ct
+                        else:
+                            call[TOTAL_TIME] = ct
+
+                else:
+                    call[CALLS] = value
+                    call[TOTAL_TIME] = ratio(value, nc)*ct
+
+                caller.add_call(call)
+        #self.stats.print_stats()
+        #self.stats.print_callees()
+
+        # Compute derived events
+        self.profile.validate()
+        self.profile.ratio(TIME_RATIO, TIME)
+        self.profile.ratio(TOTAL_TIME_RATIO, TOTAL_TIME)
+
+        return self.profile
+
+
+class Theme:
+
+    def __init__(self, 
+            bgcolor = (0.0, 0.0, 1.0),
+            mincolor = (0.0, 0.0, 0.0),
+            maxcolor = (0.0, 0.0, 1.0),
+            fontname = "Arial",
+            minfontsize = 10.0,
+            maxfontsize = 10.0,
+            minpenwidth = 0.5,
+            maxpenwidth = 4.0,
+            gamma = 2.2,
+            skew = 1.0):
+        self.bgcolor = bgcolor
+        self.mincolor = mincolor
+        self.maxcolor = maxcolor
+        self.fontname = fontname
+        self.minfontsize = minfontsize
+        self.maxfontsize = maxfontsize
+        self.minpenwidth = minpenwidth
+        self.maxpenwidth = maxpenwidth
+        self.gamma = gamma
+        self.skew = skew
+
+    def graph_bgcolor(self):
+        return self.hsl_to_rgb(*self.bgcolor)
+
+    def graph_fontname(self):
+        return self.fontname
+
+    def graph_fontsize(self):
+        return self.minfontsize
+
+    def node_bgcolor(self, weight):
+        return self.color(weight)
+
+    def node_fgcolor(self, weight):
+        return self.graph_bgcolor()
+
+    def node_fontsize(self, weight):
+        return self.fontsize(weight)
+
+    def edge_color(self, weight):
+        return self.color(weight)
+
+    def edge_fontsize(self, weight):
+        return self.fontsize(weight)
+
+    def edge_penwidth(self, weight):
+        return max(weight*self.maxpenwidth, self.minpenwidth)
+
+    def edge_arrowsize(self, weight):
+        return 0.5 * math.sqrt(self.edge_penwidth(weight))
+
+    def fontsize(self, weight):
+        return max(weight**2 * self.maxfontsize, self.minfontsize)
+
+    def color(self, weight):
+        weight = min(max(weight, 0.0), 1.0)
+    
+        hmin, smin, lmin = self.mincolor
+        hmax, smax, lmax = self.maxcolor
+        
+        if self.skew < 0:
+            raise ValueError("Skew must be greater than 0")
+        elif self.skew == 1.0:
+            h = hmin + weight*(hmax - hmin)
+            s = smin + weight*(smax - smin)
+            l = lmin + weight*(lmax - lmin)
+        else:
+            base = self.skew
+            h = hmin + ((hmax-hmin)*(-1.0 + (base ** weight)) / (base - 1.0))
+            s = smin + ((smax-smin)*(-1.0 + (base ** weight)) / (base - 1.0))
+            l = lmin + ((lmax-lmin)*(-1.0 + (base ** weight)) / (base - 1.0))
+
+        return self.hsl_to_rgb(h, s, l)
+
+    def hsl_to_rgb(self, h, s, l):
+        """Convert a color from HSL color-model to RGB.
+
+        See also:
+        - http://www.w3.org/TR/css3-color/#hsl-color
+        """
+
+        h = h % 1.0
+        s = min(max(s, 0.0), 1.0)
+        l = min(max(l, 0.0), 1.0)
+
+        if l <= 0.5:
+            m2 = l*(s + 1.0)
+        else:
+            m2 = l + s - l*s
+        m1 = l*2.0 - m2
+        r = self._hue_to_rgb(m1, m2, h + 1.0/3.0)
+        g = self._hue_to_rgb(m1, m2, h)
+        b = self._hue_to_rgb(m1, m2, h - 1.0/3.0)
+
+        # Apply gamma correction
+        r **= self.gamma
+        g **= self.gamma
+        b **= self.gamma
+
+        return (r, g, b)
+
+    def _hue_to_rgb(self, m1, m2, h):
+        if h < 0.0:
+            h += 1.0
+        elif h > 1.0:
+            h -= 1.0
+        if h*6 < 1.0:
+            return m1 + (m2 - m1)*h*6.0
+        elif h*2 < 1.0:
+            return m2
+        elif h*3 < 2.0:
+            return m1 + (m2 - m1)*(2.0/3.0 - h)*6.0
+        else:
+            return m1
+
+
+TEMPERATURE_COLORMAP = Theme(
+    mincolor = (2.0/3.0, 0.80, 0.25), # dark blue
+    maxcolor = (0.0, 1.0, 0.5), # satured red
+    gamma = 1.0
+)
+
+PINK_COLORMAP = Theme(
+    mincolor = (0.0, 1.0, 0.90), # pink
+    maxcolor = (0.0, 1.0, 0.5), # satured red
+)
+
+GRAY_COLORMAP = Theme(
+    mincolor = (0.0, 0.0, 0.85), # light gray
+    maxcolor = (0.0, 0.0, 0.0), # black
+)
+
+BW_COLORMAP = Theme(
+    minfontsize = 8.0,
+    maxfontsize = 24.0,
+    mincolor = (0.0, 0.0, 0.0), # black
+    maxcolor = (0.0, 0.0, 0.0), # black
+    minpenwidth = 0.1,
+    maxpenwidth = 8.0,
+)
+
+
+class DotWriter:
+    """Writer for the DOT language.
+
+    See also:
+    - "The DOT Language" specification
+      http://www.graphviz.org/doc/info/lang.html
+    """
+
+    def __init__(self, fp):
+        self.fp = fp
+
+    def graph(self, profile, theme):
+        self.begin_graph()
+
+        fontname = theme.graph_fontname()
+
+        self.attr('graph', fontname=fontname, ranksep=0.25, nodesep=0.125)
+        self.attr('node', fontname=fontname, shape="box", style="filled", fontcolor="white", width=0, height=0)
+        self.attr('edge', fontname=fontname)
+
+        for function in profile.functions.itervalues():
+            labels = []
+            if function.process is not None:
+                labels.append(function.process)
+            if function.module is not None:
+                labels.append(function.module)
+            labels.append(function.name)
+            for event in TOTAL_TIME_RATIO, TIME_RATIO:
+                if event in function.events:
+                    label = event.format(function[event])
+                    labels.append(label)
+            if function.called is not None:
+                labels.append(u"%u\xd7" % (function.called,))
+
+            if function.weight is not None:
+                weight = function.weight
+            else:
+                weight = 0.0
+
+            label = '\n'.join(labels)
+            self.node(function.id, 
+                label = label, 
+                color = self.color(theme.node_bgcolor(weight)), 
+                fontcolor = self.color(theme.node_fgcolor(weight)), 
+                fontsize = "%.2f" % theme.node_fontsize(weight),
+            )
+
+            for call in function.calls.itervalues():
+                callee = profile.functions[call.callee_id]
+
+                labels = []
+                for event in TOTAL_TIME_RATIO, CALLS:
+                    if event in call.events:
+                        label = event.format(call[event])
+                        labels.append(label)
+
+                if call.weight is not None:
+                    weight = call.weight
+                elif callee.weight is not None:
+                    weight = callee.weight
+                else:
+                    weight = 0.0
+
+                label = '\n'.join(labels)
+
+                self.edge(function.id, call.callee_id, 
+                    label = label, 
+                    color = self.color(theme.edge_color(weight)), 
+                    fontcolor = self.color(theme.edge_color(weight)),
+                    fontsize = "%.2f" % theme.edge_fontsize(weight), 
+                    penwidth = "%.2f" % theme.edge_penwidth(weight), 
+                    labeldistance = "%.2f" % theme.edge_penwidth(weight), 
+                    arrowsize = "%.2f" % theme.edge_arrowsize(weight),
+                )
+
+        self.end_graph()
+
+    def begin_graph(self):
+        self.write('digraph {\n')
+
+    def end_graph(self):
+        self.write('}\n')
+
+    def attr(self, what, **attrs):
+        self.write("\t")
+        self.write(what)
+        self.attr_list(attrs)
+        self.write(";\n")
+
+    def node(self, node, **attrs):
+        self.write("\t")
+        self.id(node)
+        self.attr_list(attrs)
+        self.write(";\n")
+
+    def edge(self, src, dst, **attrs):
+        self.write("\t")
+        self.id(src)
+        self.write(" -> ")
+        self.id(dst)
+        self.attr_list(attrs)
+        self.write(";\n")
+
+    def attr_list(self, attrs):
+        if not attrs:
+            return
+        self.write(' [')
+        first = True
+        for name, value in attrs.iteritems():
+            if first:
+                first = False
+            else:
+                self.write(", ")
+            self.id(name)
+            self.write('=')
+            self.id(value)
+        self.write(']')
+
+    def id(self, id):
+        if isinstance(id, (int, float)):
+            s = str(id)
+        elif isinstance(id, basestring):
+            if id.isalnum() and not id.startswith('0x'):
+                s = id
+            else:
+                s = self.escape(id)
+        else:
+            raise TypeError
+        self.write(s)
+
+    def color(self, (r, g, b)):
+
+        def float2int(f):
+            if f <= 0.0:
+                return 0
+            if f >= 1.0:
+                return 255
+            return int(255.0*f + 0.5)
+
+        return "#" + "".join(["%02x" % float2int(c) for c in (r, g, b)])
+
+    def escape(self, s):
+        s = s.encode('utf-8')
+        s = s.replace('\\', r'\\')
+        s = s.replace('\n', r'\n')
+        s = s.replace('\t', r'\t')
+        s = s.replace('"', r'\"')
+        return '"' + s + '"'
+
+    def write(self, s):
+        self.fp.write(s)
+
+
+class Main:
+    """Main program."""
+
+    themes = {
+            "color": TEMPERATURE_COLORMAP,
+            "pink": PINK_COLORMAP,
+            "gray": GRAY_COLORMAP,
+            "bw": BW_COLORMAP,
+    }
+
+    def main(self):
+        """Main program."""
+
+        parser = optparse.OptionParser(
+            usage="\n\t%prog [options] [file] ...",
+            version="%%prog %s" % __version__)
+        parser.add_option(
+            '-o', '--output', metavar='FILE',
+            type="string", dest="output",
+            help="output filename [stdout]")
+        parser.add_option(
+            '-n', '--node-thres', metavar='PERCENTAGE',
+            type="float", dest="node_thres", default=0.5,
+            help="eliminate nodes below this threshold [default: %default]")
+        parser.add_option(
+            '-e', '--edge-thres', metavar='PERCENTAGE',
+            type="float", dest="edge_thres", default=0.1,
+            help="eliminate edges below this threshold [default: %default]")
+        parser.add_option(
+            '-f', '--format',
+            type="choice", choices=('prof', 'callgrind', 'oprofile', 'hprof', 'sysprof', 'pstats', 'shark', 'sleepy', 'aqtime', 'xperf'),
+            dest="format", default="prof",
+            help="profile format: prof, callgrind, oprofile, hprof, sysprof, shark, sleepy, aqtime, pstats, or xperf [default: %default]")
+        parser.add_option(
+            '-c', '--colormap',
+            type="choice", choices=('color', 'pink', 'gray', 'bw'),
+            dest="theme", default="color",
+            help="color map: color, pink, gray, or bw [default: %default]")
+        parser.add_option(
+            '-s', '--strip',
+            action="store_true",
+            dest="strip", default=False,
+            help="strip function parameters, template parameters, and const modifiers from demangled C++ function names")
+        parser.add_option(
+            '-w', '--wrap',
+            action="store_true",
+            dest="wrap", default=False,
+            help="wrap function names")
+        # add a new option to control skew of the colorization curve
+        parser.add_option(
+            '--skew',
+            type="float", dest="theme_skew", default=1.0,
+            help="skew the colorization curve.  Values < 1.0 give more variety to lower percentages.  Value > 1.0 give less variety to lower percentages")
+        (self.options, self.args) = parser.parse_args(sys.argv[1:])
+
+        if len(self.args) > 1 and self.options.format != 'pstats':
+            parser.error('incorrect number of arguments')
+
+        try:
+            self.theme = self.themes[self.options.theme]
+        except KeyError:
+            parser.error('invalid colormap \'%s\'' % self.options.theme)
+        
+        # set skew on the theme now that it has been picked.
+        if self.options.theme_skew:
+            self.theme.skew = self.options.theme_skew
+
+        if self.options.format == 'prof':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = GprofParser(fp)
+        elif self.options.format == 'callgrind':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = CallgrindParser(fp)
+        elif self.options.format == 'oprofile':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = OprofileParser(fp)
+        elif self.options.format == 'sysprof':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = SysprofParser(fp)
+        elif self.options.format == 'hprof':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = HProfParser(fp)        
+        elif self.options.format == 'pstats':
+            if not self.args:
+                parser.error('at least a file must be specified for pstats input')
+            parser = PstatsParser(*self.args)
+        elif self.options.format == 'xperf':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = XPerfParser(fp)
+        elif self.options.format == 'shark':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = SharkParser(fp)
+        elif self.options.format == 'sleepy':
+            if len(self.args) != 1:
+                parser.error('exactly one file must be specified for sleepy input')
+            parser = SleepyParser(self.args[0])
+        elif self.options.format == 'aqtime':
+            if not self.args:
+                fp = sys.stdin
+            else:
+                fp = open(self.args[0], 'rt')
+            parser = AQtimeParser(fp)
+        else:
+            parser.error('invalid format \'%s\'' % self.options.format)
+
+        self.profile = parser.parse()
+        
+        if self.options.output is None:
+            self.output = sys.stdout
+        else:
+            self.output = open(self.options.output, 'wt')
+
+        self.write_graph()
+
+    _parenthesis_re = re.compile(r'\([^()]*\)')
+    _angles_re = re.compile(r'<[^<>]*>')
+    _const_re = re.compile(r'\s+const$')
+
+    def strip_function_name(self, name):
+        """Remove extraneous information from C++ demangled function names."""
+
+        # Strip function parameters from name by recursively removing paired parenthesis
+        while True:
+            name, n = self._parenthesis_re.subn('', name)
+            if not n:
+                break
+
+        # Strip const qualifier
+        name = self._const_re.sub('', name)
+
+        # Strip template parameters from name by recursively removing paired angles
+        while True:
+            name, n = self._angles_re.subn('', name)
+            if not n:
+                break
+
+        return name
+
+    def wrap_function_name(self, name):
+        """Split the function name on multiple lines."""
+
+        if len(name) > 32:
+            ratio = 2.0/3.0
+            height = max(int(len(name)/(1.0 - ratio) + 0.5), 1)
+            width = max(len(name)/height, 32)
+            # TODO: break lines in symbols
+            name = textwrap.fill(name, width, break_long_words=False)
+
+        # Take away spaces
+        name = name.replace(", ", ",")
+        name = name.replace("> >", ">>")
+        name = name.replace("> >", ">>") # catch consecutive
+
+        return name
+
+    def compress_function_name(self, name):
+        """Compress function name according to the user preferences."""
+
+        if self.options.strip:
+            name = self.strip_function_name(name)
+
+        if self.options.wrap:
+            name = self.wrap_function_name(name)
+
+        # TODO: merge functions with same resulting name
+
+        return name
+
+    def write_graph(self):
+        dot = DotWriter(self.output)
+        profile = self.profile
+        profile.prune(self.options.node_thres/100.0, self.options.edge_thres/100.0)
+
+        for function in profile.functions.itervalues():
+            function.name = self.compress_function_name(function.name)
+
+        dot.graph(profile, self.theme)
+
+
+if __name__ == '__main__':
+    Main().main()
diff --git a/build/increment-release.sh b/build/increment-release.sh
new file mode 100755
index 0000000..153c0d6
--- /dev/null
+++ b/build/increment-release.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# capture input
+VERSION=$1
+
+# split the version into separate integers
+SPLIT_VERS="$(echo $VERSION | tr '.' ' ')"
+
+inc-version ()
+{
+    local MAJ=$1
+    local MIN=$2
+    local REL=$(expr $3 + 1)
+
+    echo "$MAJ.$MIN.$REL"
+}
+
+# rewrite the version
+inc-version $SPLIT_VERS
+
diff --git a/build/ld.linux.cmn.sh b/build/ld.linux.cmn.sh
new file mode 100644
index 0000000..0751b72
--- /dev/null
+++ b/build/ld.linux.cmn.sh
@@ -0,0 +1,158 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters
+LD="$1"
+ARCH="$2"
+BUILD="$3"
+shift 3
+
+SRCDIR="$1"
+BINDIR="$2"
+OUTDIR="$3"
+TARG="$4"
+NAME="$5"
+DBGAP="$6"
+shift 6
+
+VERS="$1"
+VERSFILE="$2"
+DEPFILE="$3"
+shift 3
+
+MODE="$1"
+SCMFLAGS="$2"
+LDFLAGS="$3"
+shift 3
+
+LDIRS="$1"
+XDIRS="$2"
+shift 2
+
+OBJS="$1"
+LIBS="$2"
+
+# decode MODE
+STATIC=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+DYLD=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KPROC=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+HAVE_M=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+HAVE_XML=$(expr $MODE % 2)
+
+# decode SCMFLAGS
+CHECKSUM=$(expr $SCMFLAGS % 2)
+STATICSYSLIBS=$(expr $SCMFLAGS / 2)
+
+# return parameter for find-lib
+LIBPATH=''
+
+# initial command state
+CMD=''
+LD_STATIC_STATE=0
+LD_ALL_STATE=0
+
+# for breaking out version
+set-vers ()
+{
+    MAJ=$1
+    MIN=$2
+    REL=$3
+}
+
+# for locating libraries
+find-lib ()
+{
+    _lib="lib$1"
+    _dirs="$2"
+
+    LIBPATH=''
+
+    while [ "$_dirs" != "" ]
+    do
+        _dir="${_dirs%%:*}"
+
+        if [ "$_dir" != "" ]
+        then
+            if [ -e "$_dir/$_lib" ]
+            then
+                while [ -L "$_dir/$_lib" ]
+                do
+                    _lib=$(readlink -n "$_dir/$_lib")
+                done
+                LIBPATH="$_dir/$_lib"
+                break;
+            fi
+        fi
+
+        _dirs="${_dirs#$_dir}"
+        _dirs="${_dirs#:}"
+    done
+}
+
+# setting state
+load-static ()
+{
+    if [ $LD_STATIC_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_STATIC"
+        LD_STATIC_STATE=1
+    fi
+}
+
+load-dynamic ()
+{
+    if [ $LD_STATIC_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_DYNAMIC"
+        LD_STATIC_STATE=0
+    fi
+}
+
+load-all-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_ALL_SYMBOLS"
+        LD_ALL_STATE=1
+    fi
+}
+
+load-ref-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_REF_SYMBOLS"
+        LD_ALL_STATE=0
+    fi
+}
diff --git a/build/ld.linux.dlib.sh b/build/ld.linux.dlib.sh
new file mode 100755
index 0000000..1831601
--- /dev/null
+++ b/build/ld.linux.dlib.sh
@@ -0,0 +1,311 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : require shared
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%dlib.sh}cmn.sh"
+
+# discover tool chain
+case "$LD" in
+g*)
+    source "${0%dlib.sh}gcc.sh"
+    ;;
+i*)
+    source "${0%dlib.sh}icc.sh"
+    ;;
+ *)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# DLIB_CMD was started in tool-specific source
+CMD="$DLIB_CMD $LDFLAGS"
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create dynamic lib
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        [ "$DIR" != "" ] && CMD="$CMD -L$DIR"
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-ref-symbols
+                    load-dynamic
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # load static
+                load-static
+                load-all-symbols
+                CMD="$CMD -l$LIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+                    # set load to static
+                    load-static
+                    load-all-symbols
+                else
+
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    *)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+                    esac
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -d*)
+
+            # only dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to normal
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# put state back to normal
+load-ref-symbols
+load-dynamic
+
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
+# add in xml
+if grep -q HAVE_XML2 ${BUILD_DIR}/Makefile.config.linux.$ARCH > /dev/null
+then
+    if [ $HAVE_XML -ne 0 ]
+    then
+        CMD="$CMD -lxml2"
+    fi
+fi
+
+# add in math library
+if [ $HAVE_M -ne 0 ]
+then
+    CMD="$CMD -lm"
+fi
+
+# produce shared library
+echo "$CMD"
+$CMD || exit $?
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+if [ $CHECKSUM -eq 1 ]
+then
+    SCM_DIR="${BUILD_DIR%/*}/scm"
+    LOGFILE="$SCM_DIR/scm.log"
+    MSG=">>>>> scm: calling the collect script from ld.linux.dlib.sh <<<<<<"
+    #echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+
+    "$BUILD_DIR/scm-collect.sh" "$OBJS" "$SLIBS" | sort -u > "$TARG.md5"
+fi
\ No newline at end of file
diff --git a/build/ld.linux.exe.sh b/build/ld.linux.exe.sh
new file mode 100755
index 0000000..e8b7580
--- /dev/null
+++ b/build/ld.linux.exe.sh
@@ -0,0 +1,341 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : ignore - will be dynamically loaded
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : require static
+# ===========================================================================
+
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%exe.sh}cmn.sh"
+
+# discover tool chain
+case "$LD" in
+g*)
+    source "${0%exe.sh}gcc.sh"
+    ;;
+i*)
+    source "${0%exe.sh}icc.sh"
+    ;;
+*)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# EXE_CMD was started in tool-specific source
+if [ $STATIC -eq 1 ]
+then
+    CMD="$EXE_STATIC_CMD $LDFLAGS"
+else
+    CMD="$EXE_CMD $LDFLAGS"
+fi
+
+# if building a static executable against dynamic libraries
+# the main application will substitute for name lookup
+if [ $STATIC -eq 1 ] && [ $DYLD -eq 1 ]
+then
+#    CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+    CMD="$CMD $LD_EXPORT_GLOBAL"
+fi
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create executable
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile $VERSFILE"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        [ "$DIR" != "" ] && CMD="$CMD -L$DIR"
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load dynamic
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                # do not need to load all symbols for external libs
+                [ $STATIC -eq 1 ] && load-ref-symbols
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-dynamic
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # load static
+                load-static
+                [ $STATIC -eq 1 ] && load-all-symbols
+                CMD="$CMD -l$LIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                # do not need to load all symbols for external libs
+                [ $STATIC -eq 1 ] && load-ref-symbols
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+
+                    # set load to static
+                    load-static
+
+                else
+
+                    # special case for libs we have in "ext"
+                    # that are sometimes requested as static
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+                    *)
+                        load-static
+                        ;;
+                    esac
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -d*)
+
+            FOUND=0
+            if [ $STATIC -eq 1 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+
+                # not found within our directories
+                if [ $FOUND -eq 0 ]
+                then
+                    load-static
+                    load-all-symbols
+
+                    CMD="$CMD -l$LIBNAME"
+                fi
+            fi
+            ;;
+
+
+        esac
+
+    done
+fi
+
+# return to normal
+load-ref-symbols
+load-dynamic
+
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
+# add in xml
+if grep -q HAVE_XML2 ${BUILD_DIR}/Makefile.config.linux.$ARCH > /dev/null
+then
+    if grep -q XML2_LIBDIR ${BUILD_DIR}/Makefile.config.linux.$ARCH > /dev/null
+    then
+        if grep -q 'OS_DISTRIBUTOR = Ubuntu' ${BUILD_DIR}/Makefile.config.linux.$ARCH > /dev/null
+        then
+            ##### Do not link libxml2 statically on Ubuntu: it does not compile
+            XMLLIBDIR="-L$(grep XML2_LIBDIR ${BUILD_DIR}/Makefile.config.linux.$ARCH | perl -e'while(<>){if(/XML2_LIBDIR = (.+)/){print $1}}')"
+        else
+            ##### Link libxml2 statically on all linux-es except Ubuntu
+            XMLLIBDIR="-Wl,-Bstatic -L$(grep XML2_LIBDIR ${BUILD_DIR}/Makefile.config.linux.$ARCH | perl -e'while(<>){if(/XML2_LIBDIR = (.+)/){print $1}}')"
+        fi
+    fi
+    if [ $HAVE_XML -ne 0 ]
+    then
+        CMD="$CMD $XMLLIBDIR -lxml2"
+    fi
+fi
+
+# add in math library
+if [ $HAVE_M -ne 0 ]
+then
+    CMD="$CMD -Wl,-Bdynamic -lm"
+fi
+
+# produce shared library
+echo $CMD
+$CMD || exit $?
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+if [ $CHECKSUM -eq 1 ]
+then
+    SCM_DIR="${BUILD_DIR%/*}/scm"
+    LOGFILE="$SCM_DIR/scm.log"
+    MSG=">>>>> scm: calling the collect script from ld.linux.exe.sh <<<<<<"
+    #echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+
+    "$BUILD_DIR/scm-collect.sh" "$OBJS" "$SLIBS" | sort -u > "$TARG.md5"
+fi
diff --git a/build/ld.linux.gcc.sh b/build/ld.linux.gcc.sh
new file mode 100755
index 0000000..fd2e81f
--- /dev/null
+++ b/build/ld.linux.gcc.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# define linker params
+LD_EXPORT_GLOBAL="-Wl,--export-dynamic"
+LD_MULTIPLE_DEFS="-Wl,-zmuldefs"
+LD_STATIC="-Wl,-Bstatic"
+LD_DYNAMIC="-Wl,-Bdynamic"
+LD_ALL_SYMBOLS="-Wl,-whole-archive"
+LD_REF_SYMBOLS="-Wl,-no-whole-archive"
+
+# build command
+DLIB_CMD="$LD -shared"
+
+#EXE_CMD="$LD -static-libstdc++ -static-libgcc"
+source "${0%exe.sh}exe_cmd.sh" # EXE_CMD is defined in build/ld.linux.exe_cmd.sh
+
+EXE_STATIC_CMD="$EXE_CMD"
+#EXE_CMD="$LD"
+#EXE_STATIC_CMD="$LD -static"
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    DLIB_CMD="$DLIB_CMD -o $TARG"
+    EXE_CMD="$EXE_CMD -o $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    DLIB_CMD="$DLIB_CMD -o $OUTDIR/$NAME$DBGAP.so.$VERS -Wl,-soname,$NAME.so.$MAJ"
+    EXE_CMD="$EXE_CMD -o $OUTDIR/$NAME$DBGAP.$VERS"
+fi
diff --git a/build/ld.linux.icc.sh b/build/ld.linux.icc.sh
new file mode 100755
index 0000000..0c1ae50
--- /dev/null
+++ b/build/ld.linux.icc.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# define linker params
+LD_EXPORT_GLOBAL="-Wa,--export-dynamic"
+LD_MULTIPLE_DEFS="-Wa,-zmuldefs"
+LD_STATIC="-Bstatic"
+LD_DYNAMIC="-Bdynamic"
+LD_ALL_SYMBOLS="-Wa,-whole-archive"
+LD_REF_SYMBOLS="-Wa,-no-whole-archive"
+
+# build command
+DLIB_CMD="$LD -shared"
+EXE_CMD="$LD"
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    DLIB_CMD="$DLIB_CMD -o $TARG"
+    EXE_CMD="$EXE_CMD -o $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    DLIB_CMD="$DLIB_CMD -o $OUTDIR/$NAME$DBGAP.so.$VERS -Wl,-soname,$NAME.so.$MAJ"
+    EXE_CMD="$EXE_CMD -o $OUTDIR/$NAME$DBGAP.$VERS"
+fi
diff --git a/build/ld.linux.ln.sh b/build/ld.linux.ln.sh
new file mode 100755
index 0000000..ee5bd9d
--- /dev/null
+++ b/build/ld.linux.ln.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters
+TYPE="$1"
+OUTDIR="$2"
+TARG="$3"
+NAME="$4"
+DBGAP="$5"
+EXT="$6"
+VERS="$7"
+
+# find target
+TARG=$(basename "$TARG")
+
+# put extension back onto name
+NAME="$NAME$DBGAP"
+STATIC_NAME="$NAME-static"
+if [ "$EXT" != "" ]
+then
+    NAME="$NAME.$EXT"
+    STATIC_NAME="$STATIC_NAME.$EXT"
+fi
+
+# break out version
+set-vers ()
+{
+    MAJ=$1
+    MIN=$2
+    REL=$3
+}
+
+set-vers $(echo $VERS | tr '.' ' ')
+
+cd "$OUTDIR" || exit 5
+
+# create link
+create-link ()
+{
+    rm -f "$2"
+    local CMD="ln -s $1 $2"
+    echo $CMD
+    $CMD
+}
+
+# test for version in target name
+if [ "$TARG" != "$NAME.$MAJ.$MIN.$REL" ]
+then
+
+    # for simple name, create 2 links
+    if [ "$TARG" = "$NAME" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
+        create-link "$NAME.$MAJ" "$NAME"
+
+        # for static libraries, create special link
+        if [ "$TYPE" = "slib" ]
+        then
+            create-link "$NAME" "$STATIC_NAME"
+        fi
+
+    # for name with major version in it
+    elif [ "$TARG" = "$NAME.$MAJ" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
+
+
+    # for name with major & minor version in it
+    elif [ "$TARG" = "$NAME.$MAJ.$MIN" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ.$MIN"
+    fi
+fi
diff --git a/build/ld.linux.slib.sh b/build/ld.linux.slib.sh
new file mode 100755
index 0000000..ab72ef8
--- /dev/null
+++ b/build/ld.linux.slib.sh
@@ -0,0 +1,146 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal or static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%slib.sh}cmn.sh"
+
+# initialize command
+CMD="ar -rc"
+
+# function to convert an archive into individual object files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # unpack archive into temporary directory
+    mkdir -p ld-tmp
+    if ! cd ld-tmp
+    then
+        echo "$SELF_NAME: failed to cd to ld-tmp"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # rename and add to source files list
+    local m=
+    for m in $mbrs
+    do
+        mv $m $LIBNAME-$m
+        CMD="$CMD ld-tmp/$LIBNAME-$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    CMD="$CMD $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    CMD="$CMD $OUTDIR/$NAME$DBGAP.a.$VERS"
+fi
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create this lib
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -s*)
+
+            # force static load
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # convert to individual object files
+                convert-static "$LIBPATH" || exit $?
+
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# produce static library
+echo $CMD
+$CMD || exit $?
+
+# remove temporaries
+rm -rf ld-tmp
+
+# produce dependencies
+if [ "$DEPFILE" != "" ] && [ "$DEPS" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+if [ $CHECKSUM -eq 1 ]
+then
+    SCM_DIR="${BUILD_DIR%/*}/scm"
+    LOGFILE="$SCM_DIR/scm.log"
+    MSG=">>>>> scm: calling the collect script from ld.linux.slib.sh <<<<<<"
+    #echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+
+    "$BUILD_DIR/scm-collect.sh" "$OBJS" "$SLIBS" | sort -u > "$TARG.md5"
+fi
diff --git a/build/ld.rwin.dlib.sh b/build/ld.rwin.dlib.sh
new file mode 100755
index 0000000..9dbaa4f
--- /dev/null
+++ b/build/ld.rwin.dlib.sh
@@ -0,0 +1,363 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : require shared
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters and common functions
+source "${0%rwin.dlib.sh}win.cmn.sh"
+
+# discover tool chain
+case "$LD" in
+link)
+    source "${0%dlib.sh}vc++.sh"
+    ;;
+ *)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# DLIB_CMD was started in tool-specific source
+CMD="$DLIB_CMD $LDFLAGS OLE32.lib Ws2_32.lib Shell32.lib /FORCE"
+STATIC_CMD="$SLIB_CMD"
+
+# function to convert static libraries to individual COFF files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # create sub directory
+    rm -rf "$2" && mkdir "$2"
+    if ! cd "$2"
+    then
+        echo "$SELF_NAME: failed to cd to $2"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # add source files to link
+    local m=
+    for m in $mbrs
+    do
+        CMD="$CMD $2/$m"
+        STATIC_CMD="$STATIC_CMD $2/$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+# tack on object files
+CMD="$CMD $OBJS"
+STATIC_CMD="$STATIC_CMD $OBJS"
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile $DEF_FILE"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        CURDIR="$RHOME/${DIR#$LHOME}"
+        CURDIR="$(echo $CURDIR | tr '/' '\\')"        
+        [ "$CURDIR" != "" ] && CMD="$CMD /LIBPATH:$CURDIR"
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+
+    HAVE_KERNEL32=0
+    HAVE_CLIB=0
+    
+    # tack on libraries, finding as we go
+    for xLIB in $LIBS
+    do
+        # strip off switch
+        xLIBNAME="${xLIB#-[lsd]}"
+
+        # map xLIBNAME
+        case "$xLIBNAME" in
+        
+        # redirect libdl to link against Kernel32.lib in case of windows
+        dl)
+            if [ $HAVE_KERNEL32 -ne 1 ]
+            then
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD Kernel32.lib"
+                HAVE_KERNEL32=1
+            fi
+            continue
+            ;;
+
+        # redirect libm to link against libc.lib in case of windows
+        # omitting the lib defaults to linking against libc.lib
+        m)
+            if [ $HAVE_CLIB -ne 1 ]
+            then
+                load-ref-symbols
+                load-dynamic
+                HAVE_CLIB=1
+            fi
+            continue
+            ;;
+
+##### TEMPORARY #####
+# use ksproc for kproc
+#    kproc)
+#        xLIBNAME=ksproc
+#        ;;
+#####################
+
+        esac
+
+        # look at linkage
+        case "$xLIB" in
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $xLIBNAME.lib $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD lib$xLIBNAME.lib"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $xLIBNAME.a $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $xLIBPATH"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to normal
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD lib$xLIBNAME.lib"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $xLIBNAME.a $LDIRS
+            if [ "$xLIBPATH" != "" ]
+            then
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $xLIBPATH"
+
+                # load static
+                load-static
+                load-all-symbols
+                convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to static
+                load-static
+                load-all-symbols
+                CMD="$CMD lib$xLIBNAME.lib"
+            fi
+            ;;
+
+        -d*)
+
+            # only dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $xLIBNAME.lib $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD lib$xLIBNAME.lib"
+
+                fi
+            fi
+
+            # try static if performing static build
+            # because we HAVE to link against something,
+            # and the dependency code is being statically
+            # linked into an executable...
+            if [ $FOUND -eq 0 ] && [ $STATIC -eq 1 ]
+            then
+                find-lib $xLIBNAME.a $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $xLIBPATH"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to normal
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD lib$xLIBNAME.lib"
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# put state back to normal
+load-ref-symbols
+load-dynamic
+
+# produce shared library, stub library and exp file
+# map to remote view
+CURDIR="$(pwd)"
+echo $CMD
+rm -f $TARG ${TARG%lib}def ${TARG%lib}pdb "$BINDIR/${TARG%lib}dll"
+
+# Windows linker crashes randomly on bigger files with rc=1000, so we will loop until it completes differently
+while [ 1 ]
+do
+    ${TOP}/build/run_remotely.sh $PROXY_TOOL $RHOST $RPORT $RHOME $LHOME $CURDIR $ROUTDIR $LOUTDIR $CMD >${TARG}.out
+    STATUS=$?
+    cat ${TARG}.out
+    if [ "$STATUS" != "0" ]
+    then 
+        grep "fatal error LNK1000" ${TARG}.out >/dev/null
+        if [ "$?" != "0" ] 
+        then 
+            rm -f "$TARG" "${TARG%lib}dll"
+            exit $STATUS
+        fi
+    else
+        rm -rf ${TARG}.out
+        break
+    fi
+    sleep 30s
+done    
+
+# wait for the result file to appear (there may be a network delay)
+${TOP}/build/wait_for_file.sh "${TARG%lib}dll"
+STATUS=$?
+if [ "$STATUS" = "1" ]
+then
+    echo "timed out, TARG='${TARG%lib}dll'"
+    exit $STATUS
+fi
+        
+# copy dll to binary directory, so they can be found by the executables
+# sometimes cp reports an input/output error; try until it succeeds
+while [ 1 ]
+do
+    cp "${TARG%lib}dll" "$BINDIR"
+    STATUS=$?
+    if [ "$STATUS" == "0" ]
+    then
+        break
+    fi
+    echo "waiting for ${TARG%lib}dll to become accessible"
+    ls -l "${TARG%lib}dll"
+    sleep 30s
+done
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+# produce static library using lib
+STATIC_CMD="${TOP}/build/run_remotely.sh $PROXY_TOOL $RHOST $RPORT $RHOME $LHOME $CURDIR $ROUTDIR $LOUTDIR $STATIC_CMD"
+echo "$STATIC_CMD"
+$STATIC_CMD || exit $?
+
diff --git a/build/ld.rwin.exe.sh b/build/ld.rwin.exe.sh
new file mode 100755
index 0000000..ce75f94
--- /dev/null
+++ b/build/ld.rwin.exe.sh
@@ -0,0 +1,366 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+if [ "$VERBOSE" != "" ] ; then echo "$0 $*"; fi
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : ignore - will be dynamically loaded
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : require static
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters and common functions
+source "${0%rwin.exe.sh}win.cmn.sh"
+
+# discover tool chain
+case "$LD" in
+link)
+    source "${0%exe.sh}vc++.sh"
+    ;;
+*)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+#echo "EXE_CMD=${EXE_CMD}"
+
+# EXE_CMD was started in tool-specific source
+CMD="$EXE_CMD $LDFLAGS OLE32.lib Ws2_32.lib Shell32.lib"
+
+# if building a static executable against dynamic libraries
+# the main application will substitute for name lookup
+if [ $STATIC -eq 1 ] && [ $DYLD -eq 1 ]
+then
+    CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+fi
+
+# function to convert static libraries to individual COFF files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # create sub directory
+    rm -rf "$2" && mkdir "$2"
+    if ! cd "$2"
+    then
+        echo "$SELF_NAME: failed to cd to $2"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # add source files to link
+    local m=
+    for m in $mbrs
+    do
+        CMD="$CMD $2/$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# initial dependency upon Makefile - no vers file on Windows
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        CURDIR="$RHOME/${DIR#$LHOME}"
+        CURDIR="$(echo $CURDIR | tr '/' '\\')"        
+        [ "$CURDIR" != "" ] && CMD="$CMD /LIBPATH:$CURDIR"        
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+    
+    HAVE_KERNEL32=0
+    HAVE_WS2=1
+    HAVE_CLIB=0
+
+    # tack on libraries, finding as we go
+    for xLIB in $LIBS
+    do
+
+        # strip off switch
+        xLIBNAME="${xLIB#-[lsd]}"
+
+        # map xLIBNAME
+        case "$xLIBNAME" in
+        dl)
+            if [ $HAVE_KERNEL32 -ne 1 ]
+            then
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD Kernel32.lib"
+                HAVE_KERNEL32=1
+            fi
+            continue
+            ;;
+
+        ws2)
+            if [ $HAVE_WS2 -ne 1 ]
+            then
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD ws2_32.lib"
+                HAVE_WS2=1
+            fi
+            continue
+            ;;
+
+        # redirect libm to link against libc.lib in case of windows
+        # omitting the lib defaults to linking against libc.lib
+        m)
+            if [ $HAVE_CLIB -ne 1 ]
+            then
+                load-ref-symbols
+                load-dynamic
+                HAVE_CLIB=1
+            fi
+            continue
+            ;;
+
+##### TEMPORARY #####
+# use ksproc for kproc
+#    kproc)
+#        xLIBNAME=ksproc
+#        ;;
+#####################
+        esac
+
+        # look at linkage
+        case "$xLIB" in
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $xLIBNAME.lib $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load dynamic
+                    load-dynamic
+                    CMD="$CMD lib$xLIBNAME.lib"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $xLIBNAME.a $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $xLIBPATH"
+
+                    # load static
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                [ $STATIC -eq 1 ] && load-ref-symbols
+                load-dynamic
+                CMD="$CMD lib$xLIBNAME.lib"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $xLIBNAME.a $LDIRS
+            if [ "$xLIBPATH" != "" ]
+            then
+
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $xLIBPATH"
+
+                # load static
+                load-static
+                [ $STATIC -eq 1 ] && load-all-symbols
+                convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to static
+                load-static
+                [ $STATIC -eq 1 ] && load-all-symbols
+                CMD="$CMD lib$xLIBNAME.lib"
+            fi
+            ;;
+
+        -d*)
+
+            FOUND=0
+            if [ $STATIC -eq 1 ]
+            then
+                find-lib $xLIBNAME.a $LDIRS
+                if [ "$xLIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $xLIBPATH"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    convert-static "$xLIBPATH" "lib$xLIBNAME"
+
+                fi
+
+                # not found within our directories
+                if [ $FOUND -eq 0 ]
+                then
+                    load-static
+                    load-all-symbols
+
+                    CMD="$CMD lib$xLIBNAME"
+                fi
+            fi
+            ;;
+
+
+        esac
+
+    done
+fi
+
+# return to normal
+load-ref-symbols
+load-dynamic
+
+# determine current directory
+CURDIR="$(pwd)"
+
+# produce executable
+rm -f ${TARG%exe}*
+
+echo $CMD
+
+# Windows linker crashes randomly on bigger files with rc=1000, so we will loop until it completes differently
+while [ 1 ]
+do
+    ${TOP}/build/run_remotely.sh $PROXY_TOOL $RHOST $RPORT $RHOME $LHOME $CURDIR $ROUTDIR $LOUTDIR $CMD >${TARG}.out
+    STATUS=$?
+    cat ${TARG}.out
+    if [ "$STATUS" != "0" ]
+    then 
+        grep "fatal error LNK1000" ${TARG}.out >/dev/null
+        if [ "$?" != "0" ] 
+        then 
+            exit $STATUS
+        fi
+    else
+        rm ${TARG}.out
+        break
+    fi
+    sleep 30s
+done    
+
+# wait for the result file to appear (there may be a network delay)
+${TOP}/build/wait_for_file.sh ${TARG}.exe
+STATUS=$?
+if [ "$STATUS" = "1" ]
+then
+    echo "timed out, TARG='$TARG'"
+    exit $STATUS
+fi
+
+# create a link without .exe which represents make's target
+test -e ${TARG} || ln -s ${TARG}.exe ${TARG}
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+# cleanup temporary files
+rm -f $TARG.lib $TARG.exp
+
+
+# wait for the result file to appear (there may be a network delay)
+${TOP}/build/wait_for_file.sh ${TARG}.exe
+STATUS=$?
+if [ "$STATUS" = "1" ]
+then
+    echo "timed out, TARG='$TARG'"
+    exit $STATUS
+fi
+
+# create a link without .exe which represents make's target
+test -e ${TARG} || ln -s ${TARG}.exe ${TARG}
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+# cleanup temporary files
+rm -f $TARG.lib $TARG.exp
diff --git a/build/ld.rwin.slib.sh b/build/ld.rwin.slib.sh
new file mode 100755
index 0000000..00b0949
--- /dev/null
+++ b/build/ld.rwin.slib.sh
@@ -0,0 +1,123 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+VERBOSE=
+if [ "$VERBOSE" != "" ] ; then echo "$0 $*"; fi
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal or static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters and common functions
+source "${0%rwin.slib.sh}win.cmn.sh"
+
+# initialize command
+CMD="ar -rc"
+
+# function to convert an archive into individual object files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # unpack archive into temporary directory
+    mkdir -p ld-tmp
+    if ! cd ld-tmp
+    then
+        echo "$SELF_NAME: failed to cd to ld-tmp"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # rename and add to source files list
+    local m=
+    for m in $mbrs
+    do
+        mv $m $xLIBNAME-$m
+        CMD="$CMD ld-tmp/$xLIBNAME-$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+CMD="$CMD $TARG $OBJS"
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on libraries, finding as we go
+    for xLIB in $LIBS
+    do
+        # strip off switch
+        xLIBNAME="${xLIB#-[lsd]}"
+
+        # look at linkage
+        case "$xLIB" in
+        -s*)
+
+            # force static load
+            find-lib $xLIBNAME.a $LDIRS # .a for static, .lib for dynamic?
+            if [ "$xLIBPATH" != "" ]
+            then
+
+                # add it to dependencies
+                DEPS="$DEPS $xLIBPATH"
+
+                # convert to individual object files
+                convert-static "$xLIBPATH" || exit $?
+
+            fi
+            ;;
+
+        esac
+    done
+fi
+
+# produce static library
+rm -f $TARG
+echo $CMD
+
+$CMD || exit $?
+
+# remove temporaries
+rm -rf ld-tmp
+
+# produce dependencies
+if [ "$DEPFILE" != "" ] && [ "$DEPS" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
+
+exit $STATUS
diff --git a/build/ld.rwin.stub.sh b/build/ld.rwin.stub.sh
new file mode 100755
index 0000000..4c4c394
--- /dev/null
+++ b/build/ld.rwin.stub.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : require shared
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters and common functions
+source "${0%rwin.stub.sh}win.cmn.sh"
+
+# discover tool chain
+case "$LD" in
+link)
+    source "${0%stub.sh}vc++.sh"
+    ;;
+ *)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# produce stub library and exp file
+echo $STUB_CMD
+$STUB_CMD
diff --git a/build/ld.rwin.vc++.sh b/build/ld.rwin.vc++.sh
new file mode 100755
index 0000000..9322d4d
--- /dev/null
+++ b/build/ld.rwin.vc++.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# define linker params
+LD_EXPORT_GLOBAL=""
+LD_MULTIPLE_DEFS="/FORCE:MULTIPLE"
+LD_STATIC=""
+LD_DYNAMIC=""
+LD_ALL_SYMBOLS="/OPT:NOREF"
+LD_REF_SYMBOLS="/OPT:REF"
+
+# the def file
+unset DEF_SWITCH
+
+DEF_FILE="$SRCDIR/$NAME-$BUILD.def"
+[ ! -f "$DEF_FILE" ] && DEF_FILE="$SRCDIR/$NAME.def"
+if [ -f "$DEF_FILE" ]
+then
+    DEF_FILE_LOCAL="$RHOME/${DEF_FILE#$LHOME}"
+    DEF_FILE_LOCAL="$(echo $DEF_FILE_LOCAL | tr '/' '\\')"
+    DEF_SWITCH="/DEF:$DEF_FILE_LOCAL"
+else
+    unset DEF_FILE
+fi
+
+# the full path to target sans extension
+#echo "TARG=$TARG; LOUTDIR=$LOUTDIR; ROUTDIR=$ROUTDIR"
+WINTARG="$ROUTDIR${TARG#$LOUTDIR}"
+WINTARG="$(echo $WINTARG | tr '/' '\\')"
+WINTARG="${WINTARG%.lib}"
+
+# build command
+STUB_CMD="lib /NOLOGO /MACHINE:x86 $DEF_SWITCH /OUT:$WINTARG.lib"
+SLIB_CMD="lib /NOLOGO /OUT:$WINTARG-static.lib"
+DLIB_CMD="$LD /NOLOGO /DLL $DEF_SWITCH /OUT:$WINTARG.dll /STACK:8000000 /HEAP:1000000000  /INCREMENTAL:NO"
+EXE_CMD="$LD /NOLOGO /OUT:$WINTARG.exe /SUBSYSTEM:CONSOLE /ENTRY:wmainCRTStartup /STACK:8000000 /HEAP:100000000 /INCREMENTAL:NO"
+
+# tack on PDB tracking
+if [ "$BUILD" = "dbg" ]
+then
+    DLIB_CMD="$DLIB_CMD /DEBUG /PDB:$WINTARG.pdb"
+    EXE_CMD="$EXE_CMD /DEBUG /PDB:$WINTARG.pdb"
+fi
diff --git a/build/ld.sh b/build/ld.sh
new file mode 100755
index 0000000..734c6ab
--- /dev/null
+++ b/build/ld.sh
@@ -0,0 +1,596 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# prepare script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+TOP="$(dirname $BUILD_DIR)"
+SCRIPT_BASE="${0%.sh}"
+
+# os
+OS="$1"
+shift
+
+# architecture
+ARCH="$1"
+shift
+
+# binary loader tool
+LD="$1"
+shift
+
+# configuration
+unset SHLX
+unset DYLX
+unset LIBX
+unset OBJX
+unset LOBX
+
+# parameters
+TYPE=exe
+STATIC=0
+DYLD=0
+STATICSYSLIBS=0
+CHECKSUM=0
+KPROC=4
+THREADS=0
+HAVE_KSPROC=0
+NEED_KPROC=1
+HAVE_GZIP=0
+NEED_GZIP=1
+HAVE_BZIP=0
+NEED_BZIP=1
+HAVE_DL=0
+NEED_DL=1
+HAVE_M=0
+NEED_M=1
+HAVE_XML=0
+NEED_XML=0
+HAVE_KFC=0
+HAVE_KAPP=0
+HAVE_NCBI_VDB=0
+HAVE_NCBI_WVDB=0
+unset BUILD
+unset LDIRS
+unset XDIRS
+unset SRCDIR
+unset BINDIR
+unset VERSFILE
+unset VERSDIR
+unset TARG
+unset EXT
+unset OBJS
+unset LIBS
+unset DEPFILE
+
+# paths for translating local to remote
+unset RHOME
+unset LHOME
+unset RHOST
+unset LOUTDIR
+unset ROUTDIR
+unset PROXY_TOOL
+
+while [ $# -ne 0 ]
+do
+
+    case "$1" in
+    --build)
+        BUILD="$2"
+        shift
+        ;;
+
+    --ldflags)
+        LDFLAGS="$2"
+        shift
+        ;;
+
+    --static-system-libs)
+        STATICSYSLIBS=1
+        ;;
+
+    --checksum)
+        CHECKSUM=1
+        ;;
+
+    --shlx)
+        SHLX="$2"
+        shift
+        ;;
+
+    --dylx)
+        SHLX="$2"
+        shift
+        ;;
+
+    --libx)
+        LIBX="$2"
+        shift
+        ;;
+
+    --objx)
+        OBJX="$2"
+        shift
+        ;;
+
+    --srcdir)
+        SRCDIR="$2"
+        shift
+        ;;
+
+    --bindir)
+        BINDIR="$2"
+        shift
+        ;;
+        
+    --rhome)
+        RHOME="$2"
+        shift
+        ;;
+
+    --lhome)
+        LHOME="$2"
+        shift
+        ;;
+
+    --loutdir)
+        LOUTDIR="$2"
+        shift
+        ;;
+
+    --routdir)
+        ROUTDIR="$2"
+        shift
+        ;;
+
+    --rhost)
+        RHOST="$2"
+        shift
+        ;;
+
+    --rport)
+        RPORT="$2"
+        shift
+        ;;
+
+    --proxy_tool)
+        PROXY_TOOL="$2"
+        shift
+        ;;
+
+    -MD)
+        DEPFILE=1
+        ;;
+
+    -L*)
+        ARG="${1#-L}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        LDIRS="$LDIRS:$ARG"
+        ;;
+        
+    -X*)
+        ARG="${1#-X}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        XDIRS="$XDIRS:$ARG"
+        ;;
+
+    --dlib)
+        TYPE=dlib
+        ;;
+
+    --slib)
+        TYPE=slib
+        ;;
+
+    --stub)
+        TYPE=stub
+        ;;
+
+    --exe)
+        TYPE=exe
+        ;;
+
+    --static)
+        STATIC=1
+        ;;
+
+    --vers)
+        if [ -f "$2" ]
+        then
+            VERSFILE="$2"
+        elif [ -d "$2" ]
+        then
+            VERSDIR="$2"
+        else
+            echo "$SELF_NAME: expected version file or source directory"
+            exit 3
+        fi
+        shift
+        ;;
+
+    -o*)
+        ARG="${1#-o}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        TARG="$ARG"
+        ;;
+
+    -lz|-sz|-dz)
+        LIBS="$LIBS $1"
+        HAVE_GZIP=1
+        ;;
+    -[lds]bz2)
+        LIBS="$LIBS $1"
+        HAVE_BZIP=1
+        ;;
+    -[lds]dl)
+        LIBS="$LIBS $1"
+        HAVE_DL=1
+        ;;
+
+    -[lds]xml2)
+        HAVE_XML=32
+        ;;
+
+    -[lds]m)
+        HAVE_M=16
+        ;;
+
+    -lsradb|-ssradb|-dsradb|-lwsradb|-swsradb)
+        LIBS="$LIBS $1"
+        NEED_DL=1
+        DYLD=2
+        ;;
+
+    -lkrypto|-dkrypto)
+        LIBS="$LIBS $1"
+        NEED_KPROC=1
+        ;;
+    -skrypto)
+        LIBS="$LIBS $1"
+        NEED_KPROC=1
+        ;;
+
+    -[ld]kproc)
+        KPROC=4
+        LIBS="$LIBS $1"
+        ;;
+    -skproc)
+        KPROC=4
+        THREADS=8
+        LIBS="$LIBS $1"
+        ;;
+
+    -[lds]ncbi-vdb)
+        HAVE_NCBI_VDB=1
+        KPROC=4
+        HAVE_GZIP=1
+        HAVE_BZIP=1
+        HAVE_KFC=1
+        NEED_M=1
+
+        NEED_XML=$CONFIGURE_FOUND_XML2
+                # CONFIGURE_FOUND_XML2 comes from Makefile.config.$OS.$ARCH
+
+        LIBS="$LIBS $1"
+        ;;
+    -[lds]ncbi-ngs-c++)
+        HAVE_NCBI_VDB=1
+        KPROC=4
+        HAVE_GZIP=1
+        HAVE_BZIP=1
+        HAVE_KFC=1
+        NEED_M=1
+        NEED_XML=$CONFIGURE_FOUND_XML2
+        LIBS="$LIBS $1"
+        ;;
+    -[lds]ncbi-wvdb)
+        HAVE_NCBI_WVDB=1
+        KPROC=4
+        HAVE_GZIP=1
+        HAVE_BZIP=1
+        HAVE_KFC=1
+        NEED_M=16
+        NEED_XML=$CONFIGURE_FOUND_XML2
+        LIBS="$LIBS $1"
+        ;;
+
+    -[lds]ksproc)
+        HAVE_KSPROC=1
+        LIBS="$LIBS $1"
+        THREADS=0
+        ;;
+
+    -[lds]pthread)
+        THREADS=8
+        ;;
+
+    -[ls]kfs)
+        LIBS="$LIBS $1"
+        NEED_GZIP=1
+        NEED_BZIP=1
+        NEED_DL=1
+        ;;
+    -dkfs)
+        LIBS="$LIBS $1"
+        NEED_GZIP=1
+        NEED_BZIP=1
+        NEED_DL=1
+        DYLD=2
+        ;;
+
+    -[ls]vfs)
+        LIBS="$LIBS $1"
+        ;;
+    -dvfs)
+        LIBS="$LIBS $1"
+        DYLD=2
+        ;;
+
+    -[ls]kxml)
+        LIBS="$LIBS $1"
+        NEED_XML=1
+        ;;
+    -dkxml)
+        LIBS="$LIBS $1"
+        NEED_XML=1
+        DYLD=2
+        ;;
+
+    -[lds]ncbi-bam)
+        LIBS="$LIBS $1"
+        #NEED_GZIP=1
+        ;;
+
+    -[lds]kapp)
+        HAVE_KAPP=1
+        ;;
+
+    -[lds]kapp-norsrc)
+        HAVE_KAPP=1
+        ;;
+
+    -[lds]kfc)
+        LIBS="$LIBS $1"
+        HAVE_KFC=1
+        ;;
+
+    -[ls]*)
+        LIBS="$LIBS $1"
+        ;;
+
+    -d*)
+        LIBS="$LIBS $1"
+        DYLD=2
+        ;;
+
+    *.$OBJX)
+        OBJS="$OBJS $1"
+        ;;
+        
+    esac
+
+    shift
+done
+
+# correct for prefixes
+LDIRS="${LDIRS#:}"
+XDIRS="${XDIRS#:}"
+LIBS="${LIBS# }"
+OBJS="${OBJS# }"
+
+# split target
+OUTDIR=$(dirname "$TARG")
+NAME=$(basename "$TARG")
+
+# dependency file
+[ "$DEPFILE" != "" ] && DEPFILE="$NAME.$TYPE.d"
+
+# parse target
+if [ "$TYPE" = "dlib" ] && [ "$DYLX" != "" ]
+then
+    EXT="$DYLX"
+    NAME="${NAME%.$DYLX}"
+fi
+
+unset VERS
+
+V="${NAME#${NAME%\.[^.]*}\.}"
+if [[ $V == ${V//[^0-9]/} ]]
+then
+    ARG="${NAME%\.$V}"
+    VERS="$V"
+    NAME="${ARG#.}"
+
+	V="${NAME#${NAME%\.[^.]*}\.}"
+	if [[ $V == ${V//[^0-9]/} ]]
+    then
+	    ARG="${NAME%\.$V}"
+    	VERS="$V.$VERS"
+	    NAME="${ARG#.}"
+
+		V="${NAME#${NAME%\.[^.]*}\.}"
+		if [[ $V == ${V//[^0-9]/} ]]
+        then
+		    ARG="${NAME%\.$V}"
+	    	VERS="$V.$VERS"
+		    NAME="${ARG#.}"
+        fi
+    fi
+	#echo "ARG=$ARG,VERS=$VERS,NAME=$NAME"
+fi
+
+case "$TYPE" in
+dlib)
+    if [ "$SHLX" != "" ]
+    then
+        EXT="$SHLX"
+        NAME="${NAME%.$SHLX}"
+    fi
+    ;;
+slib)
+    EXT="$LIBX"
+    NAME="${NAME%.$LIBX}"
+esac
+
+unset DBGAP
+if [ "$NAME" != "${NAME%-dbgap}" ]
+then
+	DBGAP=-dbgap
+	NAME="${NAME%-dbgap}"
+fi
+
+# locate version file and version
+[ "$VERSDIR" != "" ] && VERSFILE="$VERSDIR/$NAME.vers"
+if [ "$VERSFILE" != "" ]
+then
+    if [ ! -f "$VERSFILE" ]
+    then
+        echo "$SELF_NAME: warning - creating version file '$VERSFILE'"
+        echo 1.0.0 > $VERSFILE
+    fi
+
+    if [ ! -r "$VERSFILE" ]
+    then
+        echo "$SELF_NAME: version file '$VERSFILE' is unreadable"
+        exit 5
+    fi
+
+    ARG=$(cat $VERSFILE)
+    if [ "$VERS" != "" ] && [ "$VERS" != "$ARG" ] && [ "$ARG" = "${ARG#$VERS.}" ]
+    then
+        echo "$SELF_NAME: version from file '$VERSFILE' ($ARG) does not match '$VERS'"
+        exit 5
+    fi
+    VERS="$ARG"
+fi
+
+# fix kapp
+[ $HAVE_KAPP -ne 0 ] && [ $HAVE_KFC -ne 0 ] && LIBS="-lkapp $LIBS"
+[ $HAVE_KAPP -ne 0 ] && [ $HAVE_KFC -eq 0 ] && LIBS="-lkapp-norsrc $LIBS"
+
+# detect need for kproc
+if [ $KPROC -eq 0 ] && [ $NEED_KPROC -ne 0 ] && [ $HAVE_KSPROC -eq 0 ]
+then
+    KPROC=4
+    LIBS="$LIBS -lkproc"
+fi
+
+# turn on threads for kproc
+[ $KPROC -ne 0 ] && THREADS=8
+
+# supply missing libraries
+[ $HAVE_GZIP -eq 0 ] && [ $NEED_GZIP -ne 0 ] && LIBS="$LIBS -lz"
+[ $HAVE_BZIP -eq 0 ] && [ $NEED_BZIP -ne 0 ] && LIBS="$LIBS -lbz2"
+[ $HAVE_DL -eq 0 ] && [ $NEED_DL -ne 0 ] && LIBS="$LIBS -ldl"
+[ $HAVE_M -eq 0 ] && [ $NEED_M -ne 0 ] && HAVE_M=16
+[ $HAVE_XML -eq 0 ] && [ $NEED_XML -ne 0 ] && HAVE_XML=32
+
+# overwrite dependencies
+[ -f "$DEPFILE" ] && rm -f "$DEPFILE"
+
+# generate mode
+MODE=$(expr $HAVE_XML + $HAVE_M + $THREADS + $KPROC + $DYLD + $STATIC)
+#MODE=$(expr $THREADS + $KPROC + $DYLD + 1)
+
+# generate SCM flags
+SCMFLAGS=$(expr $STATICSYSLIBS + $STATICSYSLIBS + $CHECKSUM)
+if [ 0 -ne 0 ]
+then
+    echo "# $SELF_NAME"
+    echo "#   script-base    : $SCRIPT_BASE"
+    echo "#   OS             : $OS"
+    echo "#   type           : $TYPE"
+    echo "#   tool           : $LD"
+    echo "#   ARCH           : $ARCH"
+    echo "#   BUILD          : $BUILD"
+    echo "#   srcdir         : $SRCDIR"
+    echo "#   bindir         : $BINDIR"
+    echo "#   outdir         : $OUTDIR"
+    echo "#   target         : $TARG"
+    echo "#   name           : $NAME"
+    echo "#   dbgap          : $DBGAP"
+    echo "#   version        : $VERS"
+    echo "#   vers file      : $VERSFILE"
+    echo "#   dep file       : $DEPFILE"
+    echo "#   mode           : $MODE"
+    echo "#   DYLD           : $DYLD"
+    echo "#   SCMFLAGS       : $SCMFLAGS"
+    echo "#   LDFLAGS        : $LDFLAGS"
+    echo "#   LDIRS          : $LDIRS"
+    echo "#   XDIRS          : $XDIRS"
+    echo "#   objects        : $OBJS"
+    echo "#   libraries      : $LIBS"
+    echo "#   rhost          : $RHOST"
+    echo "#   rport          : $RPORT"
+    echo "#   rhome          : $RHOME"
+    echo "#   lhome          : $LHOME"
+    echo "#   proxy_tool     : $PROXY_TOOL"
+
+    echo "#   static sys libs: $STATICSYSLIBS"
+    echo "#   checksum       : $CHECKSUM"
+    echo "#   static         : $STATIC"
+    echo "#   kproc          : $KPROC"
+    echo "#   thread libs    : $THREADS"
+    echo "#   vers dir       : $VERSDIR"
+    echo "#   extension      : $EXT"
+fi
+
+# perform link
+"$SCRIPT_BASE.$OS.$TYPE.sh" "$LD" "$ARCH" "$BUILD" "$SRCDIR" "$BINDIR" "$OUTDIR" \
+    "$TARG" "$NAME" "$DBGAP" "$VERS" "$VERSFILE" "$DEPFILE" "$MODE" "$SCMFLAGS" \
+    "$LDFLAGS" "$LDIRS" "$XDIRS" "$OBJS" "$LIBS" "$PROXY_TOOL" "$RHOST" "$RPORT" "$RHOME" "$LHOME" "$(pwd)" "$ROUTDIR" "$LOUTDIR"  || exit $?
+
+# establish links
+if [ "$VERS" != "" ] && [ "$OS" != "win" ] && [ "$OS" != "rwin" ]
+then
+    $SCRIPT_BASE.$OS.ln.sh "$TYPE" "$OUTDIR" "$TARG" "$NAME" "$DBGAP" "$EXT" "$VERS"
+fi
+
+# SCM
+if [ $CHECKSUM -eq 1 ] && [ "$OS" = "linux" ]
+then
+    # calling the scm-version-script
+    # parameters are: module-name, current-md5-file, version-file
+    if [ $TYPE = "dlib" ] || [ $TYPE = "exe" ] || [ $STATIC -eq 1 ]
+    then
+        SCM_DIR="$TOP/scm"
+        LOGFILE="$SCM_DIR/scm.log"
+        SCMD="$BUILD_DIR/scm.sh $NAME $TARG.md5 $VERSFILE"
+        echo "$SCMD" >> $LOGFILE
+        $SCMD
+    fi
+fi
diff --git a/build/ld.sun.cc.sh b/build/ld.sun.cc.sh
new file mode 100644
index 0000000..af8a380
--- /dev/null
+++ b/build/ld.sun.cc.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# define linker params
+LD_EXPORT_GLOBAL=
+LD_MULTIPLE_DEFS="-Wl,-zmuldefs"
+LD_STATIC="-Wl,-Bstatic"
+LD_DYNAMIC="-Wl,-Bdynamic"
+LD_ALL_SYMBOLS="-Wl,--whole-archive"
+LD_REF_SYMBOLS="-Wl,--no-whole-archive"
+
+# build command
+case "$ARCH" in
+    sparc32|i386)
+        DLIB_CMD="$LD -Xlinker -32 -shared"
+        EXE_CMD="$LD -Xlinker -32"
+        ;;
+    sparc64|x86_64)
+        DLIB_CMD="$LD -Xlinker -64 -shared"
+        EXE_CMD="$LD -Xlinker -64"
+        ;;
+esac
+
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    DLIB_CMD="$DLIB_CMD -o $TARG"
+    EXE_CMD="$EXE_CMD -o $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    DLIB_CMD="$DLIB_CMD -o $OUTDIR/$NAME$DBGAP.so.$VERS -Wl,-soname,$NAME.so.$MAJ"
+    EXE_CMD="$EXE_CMD -o $OUTDIR/$NAME$DBGAP.$VERS"
+fi
diff --git a/build/ld.sun.cmn.sh b/build/ld.sun.cmn.sh
new file mode 100755
index 0000000..c6c5da6
--- /dev/null
+++ b/build/ld.sun.cmn.sh
@@ -0,0 +1,160 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters
+LD="$1"
+ARCH="$2"
+BUILD="$3"
+shift 3
+
+SRCDIR="$1"
+BINDIR="$2"
+OUTDIR="$3"
+TARG="$4"
+NAME="$5"
+DBGAP="$6"
+shift 6
+
+VERS="$1"
+VERSFILE="$2"
+DEPFILE="$3"
+shift 3
+
+MODE="$1"
+SCMFLAGS="$2"
+LDFLAGS="$3"
+shift 3
+
+LDIRS="$1"
+XDIRS="$2"
+shift 2
+
+OBJS="$1"
+LIBS="$2"
+
+# decode MODE
+STATIC=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+DYLD=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KPROC=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+HAVE_M=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+HAVE_XML=$(expr $MODE % 2)
+
+# decode SCMFLAGS
+CHECKSUM=$(expr $SCMFLAGS % 2)
+STATICSYSLIBS=$(expr $SCMFLAGS / 2)
+
+# return parameter for find-lib
+LIBPATH=''
+
+# initial command state
+CMD=''
+LD_STATIC_STATE=0
+LD_ALL_STATE=0
+
+# for breaking out version
+set-vers ()
+{
+    MAJ=$1
+    MIN=$2
+    REL=$3
+}
+
+# for locating libraries
+find-lib ()
+{
+    _lib="lib$1"
+    _dirs="$2"
+
+    LIBPATH=''
+
+    while [ "$_dirs" != "" ]
+    do
+        _dir="${_dirs%%:*}"
+
+        if [ "$_dir" != "" ]
+        then
+            if [ -e "$_dir/$_lib" ]
+            then
+                while [ -L "$_dir/$_lib" ]
+                do
+                    # no readlink on Sun
+                    #_lib=$(readlink -n "$_dir/$_lib") 
+                    cd $_dir && _dir="$(pwd -P)"; test -L _lib || _lib=$(ls -l $_lib | sed 's/.*->\ //g'); cd $OLDPWD
+                done
+                LIBPATH="$_dir/$_lib"
+                break;
+            fi
+        fi
+
+        _dirs="${_dirs#$_dir}"
+        _dirs="${_dirs#:}"
+    done
+}
+
+# setting state
+load-static ()
+{
+    if [ $LD_STATIC_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_STATIC"
+        LD_STATIC_STATE=1
+    fi
+}
+
+load-dynamic ()
+{
+    if [ $LD_STATIC_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_DYNAMIC"
+        LD_STATIC_STATE=0
+    fi
+}
+
+load-all-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_ALL_SYMBOLS"
+        LD_ALL_STATE=1
+    fi
+}
+
+load-ref-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_REF_SYMBOLS"
+        LD_ALL_STATE=0
+    fi
+}
diff --git a/build/ld.sun.dlib.sh b/build/ld.sun.dlib.sh
new file mode 100755
index 0000000..f42f363
--- /dev/null
+++ b/build/ld.sun.dlib.sh
@@ -0,0 +1,282 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : require shared
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%dlib.sh}cmn.sh"
+
+# discover tool chain
+case "$LD" in
+cc)
+    source "${0%dlib.sh}cc.sh"
+    ;;
+ *)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# DLIB_CMD was started in tool-specific source
+CMD="$DLIB_CMD $LDFLAGS"
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create dynamic lib
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        [ "$DIR" != "" ] && CMD="$CMD -L$DIR"
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-ref-symbols
+                    load-dynamic
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # load static
+                load-static
+                load-all-symbols
+                CMD="$CMD -l$LIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+                    # set load to static
+                    load-static
+                    load-all-symbols
+                else
+
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    *)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+                    esac
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -d*)
+
+            # only dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load normally
+                    load-ref-symbols
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+                # set load to normal
+                load-ref-symbols
+                load-dynamic
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# put state back to normal
+load-ref-symbols
+load-dynamic
+
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
+# produce shared library
+echo "$CMD"
+$CMD || exit $?
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
diff --git a/build/ld.sun.exe.sh b/build/ld.sun.exe.sh
new file mode 100755
index 0000000..56e062c
--- /dev/null
+++ b/build/ld.sun.exe.sh
@@ -0,0 +1,299 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal linkage
+#   -l : find shared or static
+#   -s : require static
+#   -d : ignore - will be dynamically loaded
+#
+#  static linkage
+#   -l : require static
+#   -s : require static
+#   -d : require static
+# ===========================================================================
+
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%exe.sh}cmn.sh"
+
+# discover tool chain
+case "$LD" in
+cc)
+    source "${0%exe.sh}cc.sh"
+    ;;
+gcc)
+    source "${0%sun.exe.sh}linux.gcc.sh"
+    ;;
+*)
+    echo "$SELF_NAME: unrecognized ld tool - '$LD'"
+    exit 5
+esac
+
+# EXE_CMD was started in tool-specific source
+CMD="$EXE_CMD $LDFLAGS"
+
+# if building a static executable against dynamic libraries
+# the main application will substitute for name lookup
+if [ $STATIC -eq 1 ] && [ $DYLD -eq 1 ]
+then
+#    CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+    CMD="$CMD $LD_EXPORT_GLOBAL"
+fi
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create executable
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile $VERSFILE"
+if [ "$LIBS" != "" ]
+then
+    # tack on paths
+    DIRS="$LDIRS:$XDIRS"
+    while [ "$DIRS" != "" ]
+    do
+        DIR="${DIRS%%:*}"
+        [ "$DIR" != "" ] && CMD="$CMD -L$DIR"
+        DIRS="${DIRS#$DIR}"
+        DIRS="${DIRS#:}"
+    done
+
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
+        -l*)
+
+            # normal or dynamic linkage
+            FOUND=0
+            if [ $STATIC -eq 0 ]
+            then
+                find-lib $LIBNAME.so $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # load dynamic
+                    load-dynamic
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # try static only
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                # do not need to load all symbols for external libs
+                [ $STATIC -eq 1 ] && load-ref-symbols
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-dynamic
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -s*)
+
+            # force static load
+            FOUND=0
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # found it
+                FOUND=1
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # load static
+                load-static
+                [ $STATIC -eq 1 ] && load-all-symbols
+                CMD="$CMD -l$LIBNAME"
+
+            fi
+
+            # not found within our directories
+            if [ $FOUND -eq 0 ]
+            then
+
+                # do not need to load all symbols for external libs
+                [ $STATIC -eq 1 ] && load-ref-symbols
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+
+                    # set load to static
+                    load-static
+
+                else
+
+                    # special case for libs we have in "ext"
+                    # that are sometimes requested as static
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+                    *)
+                        load-static
+                        ;;
+                    esac
+                fi
+
+                CMD="$CMD -l$LIBNAME"
+            fi
+            ;;
+
+        -d*)
+
+            FOUND=0
+            if [ $STATIC -eq 1 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+                    SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+
+                # not found within our directories
+                if [ $FOUND -eq 0 ]
+                then
+                    load-static
+                    load-all-symbols
+
+                    CMD="$CMD -l$LIBNAME"
+                fi
+            fi
+            ;;
+
+
+        esac
+
+    done
+fi
+
+# return to normal
+load-ref-symbols
+load-dynamic
+
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
+# produce shared library
+echo $CMD
+$CMD || exit $?
+
+# produce dependencies
+if [ "$DEPFILE" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
diff --git a/build/ld.sun.ln.sh b/build/ld.sun.ln.sh
new file mode 100644
index 0000000..c248afa
--- /dev/null
+++ b/build/ld.sun.ln.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters
+TYPE="$1"
+OUTDIR="$2"
+TARG="$3"
+NAME="$4"
+DBGAP="$5"
+EXT="$6"
+VERS="$7"
+
+# find target
+TARG=$(basename "$TARG")
+
+# put extension back onto name
+NAME="$NAME$DBGAP"
+[ "$EXT" != "" ] && NAME="$NAME.$EXT"
+
+# break out version
+set-vers ()
+{
+    MAJ=$1
+    MIN=$2
+    REL=$3
+}
+
+set-vers $(echo $VERS | tr '.' ' ')
+
+cd "$OUTDIR" || exit 5
+
+# create link
+create-link ()
+{
+    rm -f "$2"
+    local CMD="ln -s $1 $2"
+    echo $CMD
+    $CMD
+}
+
+# test for version in target name
+if [ "$TARG" != "$NAME.$MAJ.$MIN.$REL" ]
+then
+
+    # for simple name, create 2 links
+    if [ "$TARG" = "$NAME" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
+        create-link "$NAME.$MAJ" "$NAME"
+
+    # for name with major version in it
+    elif [ "$TARG" = "$NAME.$MAJ" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
+
+
+    # for name with major & minor version in it
+    elif [ "$TARG" = "$NAME.$MAJ.$MIN" ]
+    then
+        create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ.$MIN"
+    fi
+fi
diff --git a/build/ld.sun.slib.sh b/build/ld.sun.slib.sh
new file mode 100755
index 0000000..1e08638
--- /dev/null
+++ b/build/ld.sun.slib.sh
@@ -0,0 +1,135 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal or static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+BUILD_DIR="$(dirname $0)"
+
+# parameters and common functions
+source "${0%slib.sh}cmn.sh"
+
+# initialize command
+CMD="ar -rc"
+
+# function to convert an archive into individual object files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # unpack archive into temporary directory
+    mkdir -p ld-tmp
+    if ! cd ld-tmp
+    then
+        echo "$SELF_NAME: failed to cd to ld-tmp"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # rename and add to source files list
+    local m=
+    for m in $mbrs
+    do
+        mv $m $NAME-$m
+        CMD="$CMD ld-tmp/$NAME-$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    CMD="$CMD $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    CMD="$CMD $OUTDIR/$NAME$DBGAP.a.$VERS"
+fi
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# list of static libraries used to create this lib
+SLIBS=''
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -s*)
+
+            # force static load
+            find-lib $LIBNAME.a $LDIRS
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+                SLIBS="$SLIBS $(dirname $LIBPATH)/lib$LIBNAME.a"
+
+                # convert to individual object files
+                convert-static "$LIBPATH" || exit $?
+
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# produce static library
+echo $CMD
+$CMD || exit $?
+
+# remove temporaries
+rm -rf ld-tmp
+
+# produce dependencies
+if [ "$DEPFILE" != "" ] && [ "$DEPS" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
diff --git a/build/ld.unix.cmn.sh b/build/ld.unix.cmn.sh
new file mode 100644
index 0000000..b787c82
--- /dev/null
+++ b/build/ld.unix.cmn.sh
@@ -0,0 +1,149 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# script name
+SELF_NAME="$(basename $0)"
+
+# parameters
+LD="$1"
+shift
+
+SRCDIR="$1"
+OUTDIR="$2"
+TARG="$3"
+NAME="$4"
+DBGAP="$5"
+shift 5
+
+VERS="$1"
+VERSFILE="$2"
+DEPFILE="$3"
+shift 3
+
+MODE="$1"
+SCMFLAGS="$2"
+LDFLAGS="$3"
+shift 3
+
+LDIRS="$1"
+XDIRS="$2"
+shift 2
+
+OBJS="$1"
+LIBS="$2"
+
+# decode MODE
+STATIC=$(expr $MODE % 2)
+DYLD=$(expr $MODE / 2)
+
+# decode SCMFLAGS
+CHECKSUM=$(expr $SCMFLAGS % 2)
+STATICSYSLIBS=$(expr $SCMFLAGS / 2)
+
+# return parameter for find-lib
+LIBPATH=''
+
+# initial command state
+CMD=''
+LD_STATIC_STATE=0
+LD_ALL_STATE=0
+
+# for breaking out version
+set-vers ()
+{
+    MAJ=$1
+    MIN=$2
+    REL=$3
+}
+
+# for locating libraries
+find-lib ()
+{
+    _lib="lib$1"
+    _dirs="$2"
+
+    LIBPATH=''
+
+    while [ "$_dirs" != "" ]
+    do
+        _dir="${_dirs%%:*}"
+
+        if [ "$_dir" != "" ]
+        then
+            if [ -e "$_dir/$_lib" ]
+            then
+                while [ -L "$_dir/$_lib" ]
+                do
+                    _lib=$(stat -c '%N' "$_dir/$_lib" | tr "\`\'" "  ")
+                    _lib="${_lib#*->}"
+                    _lib="lib${_lib# *lib}"
+                    _lib="${_lib%% *}"
+                done
+                LIBPATH="$_dir/$_lib"
+                break;
+            fi
+        fi
+
+        _dirs="${_dirs#$_dir}"
+        _dirs="${_dirs#:}"
+    done
+}
+
+# setting state
+load-static ()
+{
+    if [ $LD_STATIC_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_STATIC"
+        LD_STATIC_STATE=1
+    fi
+}
+
+load-dynamic ()
+{
+    if [ $LD_STATIC_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_DYNAMIC"
+        LD_STATIC_STATE=0
+    fi
+}
+
+load-all-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 0 ]
+    then
+        CMD="$CMD $LD_ALL_SYMBOLS"
+        LD_ALL_STATE=1
+    fi
+}
+
+load-ref-symbols ()
+{
+    if [ $LD_ALL_STATE -eq 1 ]
+    then
+        CMD="$CMD $LD_REF_SYMBOLS"
+        LD_ALL_STATE=0
+    fi
+}
diff --git a/build/ld.unix.slib.sh b/build/ld.unix.slib.sh
new file mode 100644
index 0000000..21d4b66
--- /dev/null
+++ b/build/ld.unix.slib.sh
@@ -0,0 +1,124 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# ===========================================================================
+# input library types, and their handling
+#
+#  normal or static linkage
+#   -l : require static
+#   -s : require static
+#   -d : ignore
+# ===========================================================================
+
+# initialize command
+CMD="ar -rc"
+
+# function to convert an archive into individual object files
+convert-static ()
+{
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # unpack archive into temporary directory
+    mkdir -p ld-tmp
+    if ! cd ld-tmp
+    then
+        echo "$SELF_NAME: failed to cd to ld-tmp"
+        exit 5
+    fi
+    ar -x "$path"
+
+    # rename and add to source files list
+    local m=
+    for m in $mbrs
+    do
+        mv $m $LIBNAME-$m
+        CMD="$CMD ld-tmp/$LIBNAME-$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
+}
+
+# versioned output
+if [ "$VERS" = "" ]
+then
+    CMD="$CMD $TARG"
+else
+    set-vers $(echo $VERS | tr '.' ' ')
+    CMD="$CMD $OUTDIR/$NAME$DBGAP.a.$VERS"
+fi
+
+# tack on object files
+CMD="$CMD $OBJS"
+
+# initial dependency upon Makefile and vers file
+DEPS="$SRCDIR/Makefile"
+if [ "$LIBS" != "" ]
+then
+    # tack on libraries, finding as we go
+    for LIB in $LIBS
+    do
+
+        # strip off switch
+        LIBNAME="${LIB#-[lsd]}"
+
+        # look at linkage
+        case "$LIB" in
+        -l*|-s*)
+
+            # force static load
+            LIBPATH="$(find-lib $LIBNAME.a $LDIRS)"
+            if [ "$LIBPATH" != "" ]
+            then
+
+                # add it to dependencies
+                DEPS="$DEPS $LIBPATH"
+
+                # convert to individual object files
+                convert-static "$LIBPATH" || exit $?
+
+            fi
+            ;;
+
+        esac
+
+    done
+fi
+
+# produce static library
+echo $CMD
+$CMD || exit $?
+
+# remove temporaries
+rm -rf ld-tmp
+
+# produce dependencies
+if [ "$DEPFILE" != "" ] && [ "$DEPS" != "" ]
+then
+    echo "$TARG: $DEPS" > "$DEPFILE"
+fi
diff --git a/build/libexists.sh b/build/libexists.sh
new file mode 100644
index 0000000..b725289
--- /dev/null
+++ b/build/libexists.sh
@@ -0,0 +1,180 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# libexists.sh: test whether one of the given libraries defines all of the specified external names
+# Usage:
+#   bash libexists.sh OS ARCH CC LD CC_SH LD_SH [-L dir ] [-X dir] [-o dir] [-l lib] [-s lib] [-d lib] [-v] extName1 [ extName2 ... ]
+# Parameters:
+#   OS : linux/mac/win
+#   ARCH : i386/x86_64
+#   CC : compiler command
+#   LD : link command
+#   CC_SH : compile script
+#   LD_SH : link script
+#   extName1, ... - external names to find in libraries
+# Options:
+#   -L, -X :    library directories
+#   -o :        directory for intermediate files
+#   -l, -d :    libraries to search (shared or static)
+#   -s :        libraries to search (static)
+#   -v :        verbose mode
+# Environment:
+#   requires an ?? OS.ARCH.sh file in the script's directory
+# Return: 0 if found, the library's name is on stdout
+#         1 not found
+#        -1 bad arguments
+#
+
+BUILD_DIR="$(dirname $0)"
+
+# os
+OS="$1";shift
+# architecture
+ARCH="$1";shift
+# compiler
+CC="$1";shift 1
+# linker
+LD="$1";shift
+# compile script
+CC_SH="$1";shift
+# link script
+LD_SH="$1";shift
+
+# message prefix for verbose mode
+dbgPref="**$(basename $0): "
+
+# parse parameters
+cOpts=
+libs=
+verbose="false"
+outDir="."
+while getopts L:X:l:s:d:vo: o
+do	case "$o" in
+	L|X)	cOpts="${cOpts} -L$OPTARG";libPath="${libPath}:${OPTARG}";;
+	l|d)	libs="${libs} l$OPTARG";; 
+	s)	    libs="${libs} s$OPTARG";; 
+	o)      outDir="$OPTARG";;
+	v)	    verbose="true";; 
+	[?])	printf >&2 "Usage: $0 [-L dir ] [-X dir] [-o dir] [-l lib] [-s lib] [-d lib] [-v] extName1 [ extName2 ... ]"
+		exit -1;;
+	esac
+done
+libPath="${outDir}${libPath}"
+
+shift $((OPTIND - 1))
+
+if [ $verbose == "true" ]
+then
+    printf >&2 "${dbgPref}OS   ='%s'\n"  "$OS"
+    printf >&2 "${dbgPref}ARCH   ='%s'\n"  "$ARCH"
+    printf >&2 "${dbgPref}CC   ='%s'\n"  "$CC"
+    printf >&2 "${dbgPref}LD   ='%s'\n"  "$LD"
+    printf >&2 "${dbgPref}CC_SH   ='%s'\n"  "$CC_SH"
+    printf >&2 "${dbgPref}LD_SH   ='%s'\n"  "$LD_SH"
+    printf >&2 "${dbgPref}cOpts   ='%s'\n"  "$cOpts"
+    printf >&2 "${dbgPref}libs    ='%s'\n"  "$libs"
+    printf >&2 "${dbgPref}verbose ='%s'\n"  $verbose
+    printf >&2 "${dbgPref}outDir  ='%s'\n"  $outDir
+fi
+
+## create a C program referencing all the external names
+srcFile="${outDir}/libexists.c"
+objFile="${outDir}/libexists.o"
+exeFile="${outDir}/libexists"
+
+echo "" >${srcFile}
+for fn in $* 
+do  #declare
+    echo "extern void ${fn}(void);" >>${srcFile}
+done
+echo "int main( int argc, char *argv [] ){" >>${srcFile}
+echo "if (argc < 0 ) {    " >>${srcFile}
+for fn in $* 
+do
+    echo "   ${fn}();" >>${srcFile}
+done
+echo "} return 0;} int wmain(int argc, char *argv []) { return main(argc,argv); }" >>${srcFile}
+
+if [ $verbose == "true" ]
+then
+    echo "${dbgPref}created ${srcFile}:" >&2
+    cat ${srcFile} >&2
+fi
+##
+
+## compile
+compile="${BUILD_DIR}/$CC_SH $OS $CC -c -o ${objFile} ${srcFile}"
+if [ $verbose == "true" ]
+then
+    echo "${dbgPref}${compile}" >&2
+fi
+compileRes=$($compile)
+if [ $verbose == "true" ]
+then
+    echo "${dbgPref}${compileRes}" >&2
+fi
+##
+
+#try to link with all specified libraries until successful
+LD_LIBRARY_PATH=${libPath}:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
+rc=1
+for lib in $libs
+do
+    pref=${lib:0:1}
+    lib=${lib:1}
+    if [ $pref == "s" ]
+    then
+        link="${BUILD_DIR}/$LD_SH $OS $ARCH $LD --static --exe ${cOpts} -l$lib -o${exeFile} --objx o ${objFile}"
+    else
+        link="${BUILD_DIR}/$LD_SH $OS $ARCH $LD          --exe ${cOpts} -l$lib -o${exeFile} --objx o ${objFile}" 
+    fi    
+    if [ $verbose == "true" ]
+    then
+        echo ${dbgPref} "$link" >&2
+    fi
+    linkRes=$($link 2>/dev/null)
+    linkRc=$?
+    if [ $verbose == "true" ]
+    then
+        echo ${dbgPref} "$linkRes" >&2
+    fi
+    
+    if [ $linkRc == 0 ]
+    then 
+        ${exeFile} 2>/dev/null
+        if [ $? == 0 ]
+        then 
+            # Success: RC=0, found library's name to stdout
+            rc=0
+            echo $lib
+            break
+        fi            
+    fi
+done
+
+#clean up
+rm -f ${srcFile} ${objFile} ${exeFile}
+
+exit $rc 
diff --git a/build/mac.arch.sh b/build/mac.arch.sh
new file mode 100755
index 0000000..60ee5d4
--- /dev/null
+++ b/build/mac.arch.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# PPC or Intel?
+ARCH="$(uname -m)"
+if [ "$ARCH" = "x86_64" ]
+then
+    echo $ARCH
+    exit 0
+fi
+
+# the Mac likes to keep its architecture hidden because for all practical
+# purposes, it is both 32 and 64 bit, and makes use of emulation as needed.
+
+# does the hardware support 64-bit mode, even in emulation?
+SYSCTL=/usr/sbin/sysctl
+[ -x /sbin/sysctl ] && SYSCTL=/sbin/sysctl
+CAP64=$($SYSCTL -n hw.cpu64bit_capable)
+
+# real 64-bit hardware has > 32 bits of address space
+PADDR_BITS=$(/usr/sbin/sysctl -n machdep.cpu.address_bits.physical)
+VADDR_BITS=$(/usr/sbin/sysctl -n machdep.cpu.address_bits.virtual)
+
+# to be 64-bit, it's probably sufficient to test the address space
+# but we have the emulation information as well.
+if [ $CAP64 -ne 0 ]
+then
+    if [ $PADDR_BITS -gt 32 ] && [ $VADDR_BITS -gt 32 ]
+    then
+        # call it 64-bit
+        if [ "$ARCH" = "i386" ] || [ "$ARCH" = "x86_64" ]
+        then
+            echo "x86_64"
+            exit 0
+        fi
+
+        if [ "$ARCH" = "Power Macintosh" ]
+        then
+            echo "ppc64"
+            exit 0
+        fi
+
+        # unrecognized
+        echo "unrecognized"
+        exit 5
+    fi
+fi
+
+# call it 32-bit
+if [ "$ARCH" = "i386" ]
+then
+    echo "i386"
+    exit 0
+fi
+
+if [ "$ARCH" = "Power Macintosh" ]
+then
+    echo "ppc32"
+    exit 0
+fi
+
+# unrecognized
+echo "unrecognized"
+exit 5
+
diff --git a/build/make-defs-xf.pl b/build/make-defs-xf.pl
new file mode 100755
index 0000000..a99ac6d
--- /dev/null
+++ b/build/make-defs-xf.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+#============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+use IO::Handle;
+use IO::File;
+use IPC::Open2;
+use FileHandle;
+
+my $libname;
+my $libvers;
+my @files;
+
+sub USAGE() {
+  print "Usage: $0 -o <lib name> [-v <lib vers file>] <c source files>\n";
+  exit 1;
+}
+
+sub file_contents($) {
+  local $/;
+  local $_ = shift;
+  my $fh;
+
+  $fh = new IO::File $_, 'r' or die "can't open $_ for read";
+  undef $/;
+  $_ = <$fh>;
+  undef $fh;
+
+  return $_;
+}
+
+sub process_args() {
+  my $i;
+
+  for ($i = 0; $i < scalar(@ARGV); ++$i) {
+    $_ = $ARGV[$i];
+    last unless /^-(.)/;
+    if ($1 eq 'o') {
+      $libname = $ARGV[++$i];
+    }
+    elsif ($1 eq 'v') {
+      $_ = $ARGV[++$i];
+      $_ = file_contents($_);
+      chomp;
+      warn "vers file is empty" if /^$/;
+      if (/(\d+)\.(\d+)\.(\d+)/) {
+        $libvers = "$1.$2";
+      }
+      else {
+        warn "'$_' is not a valid version";
+      }
+    }
+    else {
+      USAGE;
+    }
+  }
+  USAGE unless $libname;
+
+  for (++$i; $i != scalar(@ARGV); ++$i) {
+    push @files, $ARGV[$i];
+  }
+}
+
+sub process_files() {
+    foreach (@files) {
+	my $in = new IO::File $_, 'r' or die "can't open file '$_' for read";
+	{
+	    local $_;
+
+	    while ($_ = <$in>, defined($_)) {
+		print "\t$1\n" if /^VTRANSFACT_IMPL\s*\(\s*(\w+)/;
+	    }
+	}
+        $in->close();
+    }
+}
+
+process_args;
+USAGE unless $libname;
+USAGE unless scalar(@files);
+
+print "LIBRARY $libname\n";
+print "VERSION $libvers\n" if $libvers;
+print "EXPORTS\n";
+process_files();
+
+exit 0;
diff --git a/build/make-defs.pl b/build/make-defs.pl
new file mode 100755
index 0000000..dbff4dd
--- /dev/null
+++ b/build/make-defs.pl
@@ -0,0 +1,247 @@
+#!/usr/bin/perl
+#============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+use IO::Handle;
+use IO::File;
+use IPC::Open2;
+use FileHandle;
+
+my $libname;
+my $libvers;
+my $GCC = '';
+my @files;
+
+sub USAGE() {
+  print "Usage: $0 -o <lib name> [-v <lib vers file>] <gcc spec> -- <header files>\n";
+  exit 1;
+}
+
+sub file_contents($) {
+  local $/;
+  local $_ = shift;
+  my $fh;
+
+  $fh = new IO::File $_, 'r' or die "can't open $_ for read";
+  undef $/;
+  $_ = <$fh>;
+  undef $fh;
+
+  return $_;
+}
+
+sub process_args() {
+  my $i;
+
+  for ($i = 0; $i < scalar(@ARGV); ++$i) {
+    $_ = $ARGV[$i];
+    last unless /^-(.)/;
+    if ($1 eq 'o') {
+      $libname = $ARGV[++$i];
+    }
+    elsif ($1 eq 'v') {
+      $_ = $ARGV[++$i];
+      $_ = file_contents($_);
+      chomp;
+      warn "vers file is empty" if /^$/;
+      if (/(\d+)\.(\d+)\.(\d+)/) {
+        $libvers = "$1.$2";
+      }
+      else {
+        warn "'$_' is not a valid version";
+      }
+    }
+    else {
+      USAGE;
+    }
+  }
+#  USAGE unless $libname;
+
+  for ( ; $i != scalar(@ARGV); ++$i) {
+    $_ = $ARGV[$i];
+    last if $_ eq '--';
+    $GCC .= "$_ ";
+  }
+
+  for (++$i; $i != scalar(@ARGV); ++$i) {
+    push @files, $ARGV[$i];
+  }
+}
+
+sub next_token($) {
+  local $_;
+  my $src = shift;
+
+  if ($src =~ /^(\s*)/) {
+    $src = substr $src, length($1);
+  }
+  if ($src =~ /^([^ ]+)/) {
+    $_ = $1;
+    if (/^([A-Za-z_][A-Za-z0-9_]+)/) {
+      $_ = $1;
+      $src = substr $src, length($_);
+      return ($src, 'ident', $_);
+    }
+    else {
+      $_ = substr $src, 0, 1;
+      $src = substr $src, 1;
+      return ($src, 'unknown', $_);
+    }
+  }
+  return ($src, undef, undef);
+}
+
+my $id;
+my $pt_st = 0;
+my $visibility = 'extern';
+
+sub process_token($$) {
+  my $type = shift;
+  my $tok = shift;
+
+  if ($tok eq ';' || $tok eq ',') {
+    if (($pt_st == 4 || $pt_st == 5) && $visibility eq 'extern') {
+      if ($id) {
+        print "\t$id\n";
+      }
+    }
+    $id = undef;
+    if ($tok eq ';') {
+      $pt_st = 0;
+      $visibility = 'extern';
+    }
+    return;
+  }
+  if ($pt_st == 0) {
+    unless ($type eq 'ident') {
+      $pt_st = 1;
+      return;
+    }
+    if ($tok eq 'extern' || $tok eq 'static') {
+      $visibility = $tok;
+    }
+    elsif ($tok eq 'typedef') {
+      $pt_st = 1;
+    }
+    else {
+      if ($tok eq 'const' || $tok eq 'volatile') {
+        $pt_st = 2;
+      }
+      else {
+        $pt_st = ($tok eq 'struct' || $tok eq 'class' || $tok eq 'union' || $tok eq 'enum') ? 3 : 4;
+      }
+    }
+    return;
+  }
+  if ($pt_st == 1) {
+    return;
+  }
+  if ($pt_st == 2) {
+    unless ($type eq 'ident') {
+      $pt_st = 1;
+      return;
+    }
+    $pt_st = ($tok eq 'struct' || $tok eq 'class' || $tok eq 'union' || $tok eq 'enum') ? 3 : 4;
+    return;
+  }
+  if ($pt_st == 3) {
+    unless ($type eq 'ident') {
+      $pt_st = 1;
+      return;
+    }
+    $pt_st = 4;
+    return;
+  }
+  if ($pt_st == 4) {
+    if ($tok eq '__attribute__') {
+      $pt_st = 5;
+      return;
+    }
+    $id = $tok if $type eq 'ident';
+    return;
+  }
+  if ($pt_st == 5) {
+    return;
+  }
+  warn 'unpossible';
+}
+
+my $level = 0;
+
+sub parse($$);
+sub parse($$) {
+  my $src = shift;
+  my $end = shift;
+  my $tok;
+  my $type;
+
+  ++$level;
+  while (($src, $type, $tok) = next_token($src), defined($tok)) {
+    last if ($tok eq $end);
+    process_token($type, $tok) if ($level == 1);
+    $src = parse($src, ')') if ($tok eq '(');
+    $src = parse($src, '}') if ($tok eq '{');
+    $src = parse($src, ']') if ($tok eq '[');
+  }
+  --$level;
+  return $src;
+}
+
+sub process_files() {
+  my $gcc_out;
+  my $gcc_in;
+  my $src = '';
+
+  open2($gcc_in, $gcc_out, "$GCC") or die "can't run preprocessor $GCC";
+  foreach (@files) {
+    next unless $_;
+    $_ = file_contents($_);
+    next unless $_;
+    s/^\#include\s.+$//gm unless /weak\.h/;
+    $gcc_out->print($_);
+  }
+
+  undef $gcc_out; # else gcc won't produce output
+
+  while ($_ = <$gcc_in>, defined($_)) {
+    next if /^\s*$/;
+    next if /^#/;
+    chomp;
+    $src .= " $_";
+  }
+  return $src;
+}
+
+process_args;
+USAGE unless $GCC;
+USAGE unless scalar(@files);
+
+if (defined $libname) { 
+    print "LIBRARY $libname\n";
+    print "VERSION $libvers\n" if $libvers;
+    print "EXPORTS\n"; 
+    }
+parse(process_files(), '');
+
+exit 0;
diff --git a/build/make-vers-inc.sh b/build/make-vers-inc.sh
new file mode 100755
index 0000000..daff98c
--- /dev/null
+++ b/build/make-vers-inc.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# capture input
+if [ $# -eq 1 ]
+then
+    VERSION=$1
+    DEFINE=$(basename $VERSION)
+    DEFINE=$(echo $DEFINE | tr '[a-z].-' '[A-Z]__')
+elif [ $# -ne 2 ]
+then
+    echo "#error in makefile"
+    exit 1
+else
+    DEFINE=$1
+    VERSION=$2
+fi
+
+# split the version into separate integers
+SPLIT_VERS="$(cat $VERSION | tr '.' ' ')"
+
+# issue a single line define
+echo "#define $DEFINE $(printf 0x%02X%02X%04X $SPLIT_VERS)"
diff --git a/build/run_remotely.sh b/build/run_remotely.sh
new file mode 100755
index 0000000..11169f5
--- /dev/null
+++ b/build/run_remotely.sh
@@ -0,0 +1,124 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+VERBOSE=
+if [ "$VERBOSE" != "" ] ; then echo "$0 $*"; fi
+
+# ===========================================================================
+# run a command from a list on a (Windows) build server
+# $1 - path to proxy_exec
+# $2 - server name 
+# $3 - server port
+# $4 - server path mapped to a client dir (e.g. Z:)
+# $5 - client path to the dir mapped on the server
+# $6 - server path to the working directory (e.g. Z:internal\asm-trace)
+# $7 - output directory from server's prespective (e.g. Z:\win\lib)
+# $8 - output directory from client's perspective (e.g. internal/asm-trace/win/lib)
+# $9 - command (can be a single name e.g. cl, or a client path which will be translated into a server path) 
+# $... - arguments
+
+#TODO: translate command name to id
+
+PROXY_TOOL=$1
+if [ ! -e $PROXY_TOOL ]
+then
+    echo "$0 $*"
+    echo "$0: proxy tool ($1) is not found."
+    exit 5
+fi
+
+RHOST=$2
+RPORT=$3
+RHOME=$4
+LHOME=$5
+WORKDIR=$6
+ROUTDIR=$7
+LOUTDIR=$8
+CMD=$9
+shift 9
+ARGS=$*
+
+if [ "$VERBOSE" != "" ] 
+then 
+    echo "PROXY_TOOL=$PROXY_TOOL"
+    echo "RHOST     =$RHOST     "
+    echo "RPORT     =$RPORT     "
+    echo "RHOME     =$RHOME     "
+    echo "LHOME     =$LHOME     "
+    echo "WORKDIR   =$WORKDIR   "
+    echo "ROUTDIR   =$ROUTDIR   "
+    echo "LOUTDIR   =$LOUTDIR   "
+    echo "CMD       =$CMD       "
+    echo "ARGS      =$ARGS      "
+fi
+
+if [ $(eval "dirname \"$CMD\"") != "." ] 
+then # executable is located on the client; translate path for the server
+    if [ "$CMD" != "${CMD#$LHOME}" ] 
+    then
+        RCMD="$RHOME${CMD#$LHOME}.exe"
+    elif [ "$CMD" != "${CMD#$LOUTDIR}" ] 
+    then
+        RCMD="$ROUTDIR${CMD#$LOUTDIR}.exe"
+    else
+        RCMD="$CMD.exe"
+    fi
+
+    if [ "${WORKDIR}" == "." ] 
+    then # run in the directory of the executable
+        # use the original CMD
+        WORKDIR="${CMD%$(basename $CMD)}"
+    fi
+else # executable is located on the server
+    # workdir path translation is expected of the caller
+    RCMD=$CMD
+fi
+
+# translate WORKDIR
+if [ "$WORKDIR" != "${WORKDIR#$LHOME}" ] 
+then
+    WORKDIR="$RHOME${WORKDIR#$LHOME}"
+elif [ "$WORKDIR" != "${WORKDIR#$LOUTDIR}" ] 
+then
+    WORKDIR="$ROUTDIR${WORKDIR#$LOUTDIR}"
+fi
+
+if [ "$VERBOSE" != "" ] ; then echo "RCMD=$RCMD"; fi
+
+#translate slashes
+RCMD="$(echo $RCMD | tr '/' '\\')"
+WORKDIR="$(echo $WORKDIR | tr '/' '\\')"
+
+#extra quotes in case command's filename contains spaces
+if [[ "$RCMD" != "${RCMD/ /}" ]] ; then RCMD="\"$RCMD\""; fi
+
+if [ "$VERBOSE" != "" ] ; then echo "$PROXY_TOOL -D $WORKDIR -S $RHOST -P $RPORT"; fi
+if [ "$VERBOSE" != "" ] ; then echo "sending to stdin: $RCMD $ARGS"; fi
+
+echo "$RCMD $ARGS" | $PROXY_TOOL -D $WORKDIR -S $RHOST -P $RPORT
+exit $?
+
+
+
+
diff --git a/build/scm-collect.sh b/build/scm-collect.sh
new file mode 100755
index 0000000..6284c31
--- /dev/null
+++ b/build/scm-collect.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+OBJ_FILES="$1"
+LIB_FILES="$2"
+
+for f in $OBJ_FILES $LIB_FILES
+do
+    if [ ! -f $f.md5 ]
+    then
+        echo "$f.md5 not found" > /dev/stderr
+        exit 5
+    elif [ ! -r $f.md5 ]
+    then
+        echo "$f.md5 not readable" > /dev/stderr
+        exit 5
+    else
+        cat $f.md5
+    fi
+done
diff --git a/build/scm.sh b/build/scm.sh
new file mode 100755
index 0000000..e872ea3
--- /dev/null
+++ b/build/scm.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+BUILD_DIR="$(dirname $0)"
+TOP="$(dirname $BUILD_DIR)"
+SCM_DIR="$TOP/scm"
+
+MODULE_NAME="$1"
+CURMD5="$2"
+VERS_FILE="$3"
+
+# if the given versfile does not exist, bail out with no error
+[ -f "$VERS_FILE" ] || exit 0
+
+echo "*** start of scm-handler for $MODULE_NAME ***************************"
+
+#prepare the filenames we will use for the version-increment
+LOGFILE="$SCM_DIR/scm.log"
+PREVMD5="$SCM_DIR/$MODULE_NAME.pub"
+CANDMD5="$SCM_DIR/$MODULE_NAME.cand"
+
+# write a log entry, that a scm-run for this module is executed
+echo -e "\n$(date) ************* scm-run for $MODULE_NAME" >> $LOGFILE
+
+# if the current md5-file does not exist, bail out with error
+if [ ! -f "$CURMD5" ]
+then
+    MSG="current md5-file ($CURMD5) does not exist! SCM RUN TERMINATED!"
+    echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+    exit 6
+fi
+
+
+# check if the current md5-file has the same content as in the
+# candidate md5-file, if yes bail out without error
+if diff -q "$CURMD5" "$CANDMD5" > /dev/null 2>&1
+then
+    MSG="cand. and curr. md5-files are equal, nothing to do!"
+echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+    exit 0
+fi
+
+# check if the candidate md5-file does exist
+if [ ! -f "$CANDMD5" ]
+then
+    MSG="candidate md5-file does not exist."
+    echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+
+    # if candidate-md5-file does not exist
+    # the last published too should not exist
+    if ! cp "$CURMD5" "$CANDMD5"
+    then
+        STATUS=$?
+        MSG="unable to create the candidate-md5-file"
+        echo "$MSG"
+        echo "$MSG" >> $LOGFILE
+        exit $STATUS
+    fi
+
+    # turn this on later
+    cvs add "$CANDMD5"
+    exit 0
+fi
+
+
+# if we reach this line, cand. and curr md5-file do exist
+# and differ in content
+MSG="cand. and curr. md5-files are different."
+echo "$MSG"
+echo "$MSG" >> $LOGFILE
+
+# check if the current md5-file has the same content as in the
+# previously published md5-file, if yes bail out without error
+if diff -q "$CANDMD5" "$PREVMD5" > /dev/null 2>&1
+then
+    CAND_PREV_EQUAL=1
+else
+    CAND_PREV_EQUAL=0
+fi
+
+# if the candidate-md5-file does exist, 
+# copy the current md5-file into the candidate-md5-file
+if ! cp "$CURMD5" "$CANDMD5"
+then
+    STATUS=$?
+    MSG="unable to update the candidate-md5-file"
+    echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+    exit $STATUS
+fi
+
+if [ $CAND_PREV_EQUAL -eq 0 ]
+then
+    MSG="candidate and prev. published md5-files differ, nothing to do!"
+echo "$MSG"
+    echo "$MSG" >> $LOGFILE
+    exit
+fi
+
+# if a candidate file does not exist, the version has to be incremented
+OLDVERS=$(cat "$VERS_FILE")
+NEWVERS=$($BUILD_DIR/increment-release.sh $OLDVERS)
+MSG="version incremented from $OLDVERS to $NEWVERS"
+echo "$MSG"
+echo "$MSG" >> $LOGFILE
+echo $NEWVERS > $VERS_FILE
+
+# trigger a rebuild ( of this module )...
+touch "$BUILD_DIR/version-rebuild"
+
+echo "*** end of scm-handler for $MODULE_NAME *****************************"
diff --git a/build/scm.txt b/build/scm.txt
new file mode 100644
index 0000000..aa4f73e
--- /dev/null
+++ b/build/scm.txt
@@ -0,0 +1,117 @@
+SCM-Build
+---------
+
+(scm = software configuration management ?)
+
+(1) "scm" is a '.phony' target, implemented in Makefile.env
+    ( just like "out", "CC", "GCC", "ICC", "VC++", "debug",
+                "profile", "release", "purify", "purecov" )
+
+
+(2) "make scm" triggers the scm-target in Makefile.env,
+    the actions are:
+
+    @ echo scm > $(TOP)/build/BUILD.$(OS)
+    @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+
+    - no actual compilation/linkage is performed
+    - the string "scm" is written into the build-file: build/BUILD.linux for instance
+        switching the build-system into "scm-mode"
+    - the directory links are rebuild (why?)
+
+
+(3) if the build-system is in "scm-mode", Makefile.env configures
+    makefile-variables like that:
+
+    ifeq (scm,$(BUILD))
+        DEBUG := -DNDEBUG
+        BUILDTYPE = rel
+        CHECKSUM := --checksum
+    endif
+
+    that means:
+        - a build in "scm-mode" is performed like a release-build
+        - the makefile-variable CHECKSUM is set to the value "--checksum"
+
+
+(4) the makefile-variable CHECKSUM is used in these Makefiles:
+        Makefile.cc, Makefile.gcc, Makefile.icc, Makefile.vc++
+    these 4 Makefiles add $CHECKSUM to the parameter-list of
+        CC, CP, LD and LP ( the platform specific compile- and link-scripts )
+
+
+(5) $CC and $CP gets called, because Makefile.rules do use them in their
+        list of rules that build the different kinds of object-files
+
+
+(6) $LD gets called, because it appears in the Makefile of every single
+        module, in the rule to build the final libs/binaries
+    $LP looks like never called by our build-system ( we do not link c++ targets ?)
+
+
+(7) the compiler-scripts cc.sh, win-cc.sh and sun-cc.sh pick up the "--checksum"
+        parameter and set the shell-variable CHECKSUM to 0 or 1
+
+
+(8) the cc.sh - script:
+    - ( in scm-mode ) performs a check that the target is not
+        undefined or malformed
+
+    - calls the compiler to build the object-file
+    
+    ( in scm-mode only )
+    - calls: strip $TARG.$OBJX -o $TARG.stripped.$OBJX
+        to strip away the symbol-names: renaming a variable
+        does not create a different checksum after that
+    - calls: MD5RES=`md5sum -b $TARG.stripped.$OBJX`
+        create a md5-sum of the stripped obj-file
+    - calls: rm -f "$TARG.stripped.$OBJX" || true
+        to remove the stripped obj-file
+    - calls: MD5VALUE=${MD5RES:0:32}
+        to pick the md5-sum only ( not the following filename )
+    - calls: echo "$TARG.$OBJX=$MD5VALUE" > "$TARG.md5"
+        creates a md5-file for every obj-file, that contains
+        the name of the obj-file followed by it's md5-sum
+
+(9) the ld.sh - script:
+    - to perform the link operation the ld.sh-script calls this script:
+        "$SCRIPT_BASE.$OS.$TYPE.sh"
+      ( which becomes: ld.linux.slib.sh / ld.linux.dlib.sh / 
+        ld.linux.exe.sh for instance )
+
+(10) the ld.linux.slib.sh / ld.linux.dlib.sh / ld.linux.exe.sh - scripts:
+    - define a shell-variable "SLIBS"
+    - accumulate the static-libs the target depends on in this shell-variable
+    - after producing the target, call the script: "scm-collect.sh"
+    - parameter to this call is the list of obj-file ($OBJS) and
+      the static dependencies ($SLIBS)
+
+(11) the scm-collect.sh - script:
+    - loops through the given obj-files and static dependencies
+    - for every item in the list it looks for its corresponding md5-file
+    - if the file exists and is readable
+    - prints the content of the file to stdout
+
+(12) back in the ld.linux.slib.sh / ld.linux.dlib.sh / ld.linux.exe.sh - scripts:
+    - pipe the output of the scm-collect.sh - script
+      through "sort -u" and redirect the output to "$TARG.md5"
+      ( sort -u to makes the file canonical and removes double dependencies )
+    - this creates a md5-file for every lib/executable built
+      in the output-directory of the module
+      (for the kfs-module for instance the files "libkfs.a.md5" and
+       "libkfs.so.md5" are created in "output/centos/scm/gcc/x86_64/lib"
+    - these files are the "current-md5-file" for the scm.sh-script
+
+(13) back in the ld.sh - script:
+    - after creating the soft-links for the lib/executable
+    - if in scm-mode and building for linux,
+    - if building a dynamic-lib or an executable,
+    - the "scm.sh" - script is called
+    - the parameters are: module-name, current-md5-file and version-file
+
+(14) the scm.sh - script:
+    - creates a scm-dir underneath the build-dir (if it does not exist)
+    - checks if the current-md5-file exists ( exits with error if not )
+    - compares the current-md5-file with the candidate-md5-file
+      ( exits with exit-code=0 if they are identical = nothing to do )
+    - 
\ No newline at end of file
diff --git a/build/sra-dflt-schema.sh b/build/sra-dflt-schema.sh
new file mode 100755
index 0000000..78c89ad
--- /dev/null
+++ b/build/sra-dflt-schema.sh
@@ -0,0 +1,163 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# prepare script name
+SELF_NAME="$(basename $0)"
+SCRIPT_BASE="${0%.sh}"
+
+# os
+OS="$1"
+shift
+
+# binary compiler
+CC="$1"
+shift 
+
+# everything except windows is fine as-is
+if [[ "$OS" != "win" && "$OS" != "rwin" ]]
+then 
+    echo "$CC $*"
+    $CC $*
+    exit $?
+fi
+
+if [[ "$OS" == "rwin" ]]
+then # for rwin, $CC is a multi-word string; extract server location data from it:
+#                $(TOP)/build/run_remotely.sh $(PROXY_TOOL) $(RHOST) $(RPORT) $(RHOME) $(LHOME) $(TOP) $(ROUTDIR) $(LOUTDIR) $(SCHEMA_EXE)
+    PARMS=($CC)
+    RHOME=${PARMS[4]}
+    LHOME=${PARMS[5]}
+    ROUTDIR=${PARMS[7]}
+    LOUTDIR=${PARMS[8]}
+fi
+
+# state
+unset ARGS
+unset DEPENDENCIES
+unset DEPTARG
+unset TARG
+
+function convert_src_path
+{
+    if [[ "$OS" != "rwin" ]]
+    then
+        convert_path_result="$(cygpath -w $1)"
+    elif [ "$1" != "${1#$LHOME}" ] 
+    then
+        convert_path_result="$RHOME${1#$LHOME}"
+        convert_path_result="$(echo $convert_path_result | tr '/' '\\')"
+    else
+        convert_path_result="$1"
+    fi
+}
+function convert_out_path
+{
+    if [[ "$OS" != "rwin" ]]
+    then
+        convert_path_result="$(cygpath -w $1)"
+    elif [ "$1" != "${1#$LOUTDIR}" ] 
+    then
+        convert_path_result="$ROUTDIR${1#$LOUTDIR}"
+        convert_path_result="$(echo $convert_path_result | tr '/' '\\')"
+    else
+        convert_path_result="$1"
+    fi
+}
+
+
+# process parameters for windows
+while [ $# -ne 0 ]
+do
+
+    case "$1" in
+    -o*)
+        ARG="${1#-o}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        TARG="$ARG"
+        convert_out_path $ARG
+        ARGS="$ARGS -o${convert_path_result}"
+        ;;
+
+    -I*)
+        ARG="${1#-I}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        
+        convert_src_path $ARG
+        ARGS="$ARGS -I${convert_path_result}"
+        ;;
+
+    -T*)
+        ARG="${1#-T}"
+        if [ "$ARG" = "" ]
+        then
+            ARG="$2"
+            shift
+        fi
+        DEPTARG="$ARG"
+        DEPENDENCIES=1
+        convert_out_path $ARG
+        ARGS="$ARGS -T${convert_path_result}"
+        ;;
+
+    -L*)
+        LHOME="${1#-L}"
+        ;;
+    -R*)
+        RHOME="${1#-R}"
+        ;;
+    
+    *)
+        convert_src_path $1
+        ARGS="$ARGS ${convert_path_result}"
+        ;;
+
+    esac
+
+    shift
+
+done
+
+echo "$CC $ARGS"
+$CC $ARGS
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
+then
+    rm -f $TARG $DEPTARG
+    exit ${STATUS}
+fi
+
+if [ $DEPENDENCIES -eq 1 ]
+then
+    # fix this
+    rm -f $DEPTARG
+fi
diff --git a/build/tag-module.sh b/build/tag-module.sh
new file mode 100755
index 0000000..12fb498
--- /dev/null
+++ b/build/tag-module.sh
@@ -0,0 +1,213 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# check for '-F' switch
+if [ "$1" = "-F" ]
+then
+    CVSTAG="cvs tag $1"
+    shift 1
+else
+    CVSTAG="cvs tag"
+fi
+
+# check for '-V' switch
+if [ "$1" = "-V" ]
+then
+    VERSFILE="$2"
+    shift 2
+else
+    VERSFILE=""
+fi
+
+# gather parameters
+TOP=$(dirname $0)
+cd $TOP/..
+TOP=$(pwd)
+MODULE=$1
+LIBRARY=$2
+shift 2
+
+# version file
+if [ "$VERSFILE" = "" ]
+then
+    if [ ! -r $MODULE/$LIBRARY.vers ]
+    then
+        echo "cannot access $MODULE/$LIBRARY.vers"
+        exit 1
+    fi
+
+    VERSFILE="$MODULE/$LIBRARY.vers"
+fi
+
+# version
+VERSION=$(cat $VERSFILE)
+
+# build parameters
+BUILD=$(cat ./build/BUILD)
+COMP=$(cat ./build/COMP)
+OUTDIR=$(cat ./build/OUTDIR)
+cd $OUTDIR
+OUTDIR=$(pwd)
+cd -
+
+# architecture
+ARCH=$(uname -m)
+if [ "$ARCH" = "i486" ] || [ "$ARCH" = "i586" ] || [ "$ARCH" = "i686" ]
+then
+    ARCH=i386
+fi
+
+# object directory
+OBJDIR=$OUTDIR/$BUILD/$COMP/$ARCH/obj/$MODULE
+if [ ! -d $OBJDIR ]
+then
+    echo "cannot access $OBJDIR"
+    exit 1
+fi
+
+# tag name
+TAGVERS=$(echo $VERSION | tr '.' '_')
+if [ "$BUILD" = "rel" ]
+then
+    TAG="$LIBRARY-$TAGVERS"
+else
+    TAG="$BUILD-$LIBRARY-$TAGVERS"
+fi
+
+# include make files in sources
+SOURCES="$(find build -name 'Makefile*' -a ! -name '*~')"
+if [ -f $MODULE/Makefile ]
+then
+    SOURCES="$SOURCES $MODULE/Makefile"
+fi
+
+# also include the version file if within the module
+if [ "$VERSFILE" = "$MODULE/$LIBRARY.vers" ]
+then
+    SOURCES="$SOURCES $VERSFILE"
+fi
+
+# allow direct specification of source files
+if [ "$1" = "-S" ]
+then
+    shift
+
+    # take list of sources as given
+    for sfile in $*
+    do
+
+        # source file must be within our tree
+        if [ "$sfile" = "${sfile#$TOP}" ]
+        then
+
+            # get path portion of source file
+            spath=$(dirname $sfile)
+
+            # look for absolute or project relative
+            if [ -f "$sfile" ]
+            then
+                cd "$spath"
+                spath="$(pwd)"
+                cd -
+
+            # look for module relative
+            elif [ -f "$MODULE/$sfile" ]
+            then
+                cd "$MODULE/$spath"
+                spath="$(pwd)"
+                cd -
+            fi
+
+            # retest path
+            if [ "$spath" = "${spath#$TOP}" ]
+            then
+                echo "source file '$sfile' is not within project"
+                exit 1
+            fi
+
+            # create full path
+            sfile="$spath/$(basename $sfile)"
+        fi
+
+        # crop it
+        sfile="${sfile#$TOP/}"
+        SOURCES="$SOURCES $sfile"
+
+    done
+
+else
+
+    # derive source files from dependency files
+    for ofile in $*
+    do
+        # create dependency file name
+        dfile=${ofile%o}d
+
+        # test for it
+        if [ ! -r $OBJDIR/$dfile ]
+        then
+            echo "cannot locate dependency file '$OBJDIR/$dfile'"
+            exit 1
+        fi
+
+        # read it
+        for sfile in $(cat $OBJDIR/$dfile)
+        do
+            # source file must be within our tree
+            # and should not be a generated version include
+            if [ "$sfile" != "${sfile#$TOP}" ] && [ "$sfile" = "${sfile%.vers.h}" ]
+            then
+                # crop it
+                sfile="${sfile#$TOP/}"
+
+                # special case include files in 'inc'
+                # in order to catch all configurations
+                if [ "$sfile" != "${sfile#inc/}" ]
+                then
+                    sfile=$(basename $sfile)
+                    sfile="$(find inc -name $sfile)"
+                fi
+            
+                SOURCES="$SOURCES $sfile"
+            fi
+
+        done
+
+    done
+fi
+
+# must have source files
+if [ "$SOURCES" = "" ]
+then
+    echo "no source files could be found for $LIBRARY"
+    exit 1
+fi
+
+# reduce them to an unique set
+SOURCES="$(echo "$SOURCES" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
+
+# apply tag
+echo -e "\ntagging $TAG within $MODULE"
+$CVSTAG $TAG $SOURCES
diff --git a/build/valgrind.suppress b/build/valgrind.suppress
new file mode 100644
index 0000000..002d332
--- /dev/null
+++ b/build/valgrind.suppress
@@ -0,0 +1,6 @@
+{
+   vt_cache
+   Memcheck:Leak
+   fun:calloc
+   fun:_ZN3ngs7Resolve*
+}
diff --git a/build/wait_for_file.sh b/build/wait_for_file.sh
new file mode 100755
index 0000000..dd6059e
--- /dev/null
+++ b/build/wait_for_file.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# wait for a file to become available (used in remote builds to handle delays introduced by the network file system)
+# $1 - file to wait for
+# $2 - timeout (seconds), optional, default 120s
+# return codes: 
+#   0 ok, 
+#   1 timed out, 
+#   2 no file specified, 
+#   3 timeout not numeric
+
+if [ "$1" != "" ] 
+then
+    FILE=$1
+else
+    echo "$0 $*: no file specified" >&2
+    exit 2
+fi     
+
+if [ "$2" == "" ] 
+then 
+    TIMEOUT=120
+elif [[ $2 =~ ([0-9])+ ]]
+then 
+    TIMEOUT=$2
+else
+    echo "$0 $*: timeout not a number" >&2
+    exit 3
+fi
+
+for (( i=0; i < ${TIMEOUT}; i++ ))
+do
+    # give nfs a nudge
+    ls $(dirname $FILE) >/dev/null  
+    if [ -e ${FILE} ]
+    then
+        exit 0
+    fi 
+    echo "waiting for '$FILE' ..."
+    sleep 1s
+done
+exit 1
diff --git a/configure b/configure
new file mode 100755
index 0000000..baa556f
--- /dev/null
+++ b/configure
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+FILENAME="`basename $0`"
+CURDIR="`dirname $0`"
+
+if [ -z "$CURDIR" ]
+    then
+    echo configure: error: configure should be run as ./configure
+    exit 1
+fi
+
+if [ "$FILENAME" != configure -a ! -s setup/konfigure.perl ]
+    then
+    echo configure: error: configure should be run as ./configure
+else
+    perl -v > /dev/null 2>&1 || { echo "checking for perl... no"; \
+        echo >&2 "configure: error: perl not found."; exit 1; }
+
+    cd $CURDIR/setup
+    perl -w konfigure.perl "$@"
+fi
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index ca78035..0000000
Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index aad2b24..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Fri May 13 14:00:35 EDT 2016
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 27309d9..0000000
--- a/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/scripts/explain_sam_flags.py b/scripts/explain_sam_flags.py
deleted file mode 100755
index cb6ad02..0000000
--- a/scripts/explain_sam_flags.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-
-# The MIT License
-#
-# Copyright (c) $today.year The Broad Institute
-#
-# 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
-#
-# $Header$
-
-"""usage %prog decimal-flag [decimal-flag...]
-
-Explain each flag on the command line in plain English
-"""
-
-from __future__ import division
-import sys
-
-lstFlags = [
-    ("read paired", 0x1),
-    ("read mapped in proper pair", 0x2),
-    ("read unmapped", 0x4),
-    ("mate unmapped", 0x8),
-    ("read reverse strand", 0x10),
-    ("mate reverse strand", 0x20),
-    ("first in pair", 0x40),
-    ("second in pair", 0x80),
-    ("not primary alignment", 0x100),
-    ("read fails platform/vendor quality checks", 0x200),
-    ("read is PCR or optical duplicate", 0x400),
-    ("supplementary alignment", 0x800)
-    ]
-    
-
-def explain_sam_flags(iFlags):
-    print iFlags, ":"
-    for strFlagName, iMask in lstFlags:
-        if iFlags & iMask:
-            print "\t" + strFlagName
-
-def main(argv=None):
-    if argv is None:
-        argv = sys.argv
-
-    for strArg in argv[1:]:
-        explain_sam_flags(int(strArg))
-
-if __name__ == "__main__":
-    sys.exit(main())
-    
diff --git a/scripts/release_picard.sh b/scripts/release_picard.sh
deleted file mode 100755
index 732234a..0000000
--- a/scripts/release_picard.sh
+++ /dev/null
@@ -1,152 +0,0 @@
-#! /bin/bash
-
-# The MIT License
-#
-# Copyright (c) $today.year The Broad Institute
-#
-# 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
-
-PROGNAME=`basename $0`
-USERNAME=alecw
-
-function usage () {
-    echo "USAGE: $PROGNAME <release-id>" >&2
-    echo "Tags Github Picard source, checks out and builds sources, uploads build results to Sourceforge.">&2
-    echo "-t <tmpdir>                Build in <tmpdir>.  Default: $TMPDIR." >&2
-    echo "-u <sourceforge-user> Sourceforge username.  Default: $USERNAME." >&2
-}
-
-function tag_exists() {
-    git tag | grep -q "$1$"
-    if test $? = 0
-        then return 0
-        else return 1
-    fi
-}
-
-function remote_does_not_exist() {
-    git ls-remote $1 2>/dev/null 1>/dev/null
-    if test $? = 0
-        then return 1
-        else return 0
-    fi
-}
-
-function remote_tag_does_not_exist() {
-    git ls-remote --tags $2 | grep -q "$1$";
-    if test $? = 0
-        then return 0
-        else return 1
-    fi
-}
-
-set -e
-
-while getopts "ht:u:" options; do
-  case $options in
-    u ) USERNAME=$OPTARG;;
-    t ) TMPDIR=$OPTARG;;
-    h ) usage;;
-    \? ) usage
-         exit 1;;
-    * ) usage
-          exit 1;;
-
-  esac
-done
-shift $(($OPTIND - 1))
-
-if (( $# != 1 ))
- then echo "ERROR: Incorrect number of arguments." >&2
-      usage
-      exit 1
-fi
-
-if [[ x"$EDITOR" == x ]]
-then echo "EDITOR environment variable must be set." >&2
-       exit 1
-fi
-
-# Require actual Java 1.6.  This is not necessary for compiling, because can run 1.7 with -target 1.6,
-# but this is necessary in order to force unit tests to run with 1.6.
-(echo $JAVA_HOME | fgrep -q 1.6 ) || { echo "JAVA_HOME $JAVA_HOME is not 1.6" ; exit 1; }
-java_version=`java -version 2>&1 | fgrep -i version`
-(echo $java_version | fgrep -q 1.6. ) || { echo "java -version: $java_version is not 1.6"; exit 1; }
-
-GITROOT=git at github.com:samtools/htsjdk.git
-REMOTE=origin
-
-RELEASE_ID=$1
-
-# Since releases are lexically sorted, need to filter in order to have 1.1xx be at the bottom.
-PREV_RELEASE_ID=`git ls-remote --tags | grep -v "{}$" | awk '{print $2}' | sed -e "s_.*/__g" | egrep '[.]\d\d\d' | tail -1`
-
-if [[ -e $TMPDIR/htsjdk ]]
-then echo "$TMPDIR/htsjdk already exists.  Please remove or specify a different TMPDIR." >&2
-        exit 1
-fi
-cd $TMPDIR
-
-# clone
-git clone $GITROOT htsjdk 
-cd htsjdk
-ant clean # Shouldn't be necessary, but no harm
-
-# tag must not exist
-if tag_exists $RELEASE_ID
-then echo "ERROR: Tag $RELEASE_ID locally already exists"
-     exit 1
-fi
-
-# remote must exist
-if remote_does_not_exist $REMOTE
-then echo "ERROR: Remote $REMOTE does not exist"
-     exit 1
-fi
-
-# tag at remote must not exist
-if remote_tag_does_not_exist $RELEASE_ID $REMOTE
-then echo "ERROR: Tag $RELEASE_ID at remote $REMOTE already exists"
-     exit 1
-fi
-
-# tag the branch locally then push to remote
-echo Tagging master as $tag and pushing the tag to $remote
-# NB: we could use annotated tags in the future to store release notes, etc.
-git tag $tag
-git push $remote $tag # TODO: should we check this return value in case someone made a tag since we last checked?
-
-ant -lib lib/ant test
-
-ant -lib lib/ant clean all javadoc
-
-mkdir -p deploy/picard-tools/$RELEASE_ID
-
-mkdir -p deploy/htsjdk/$RELEASE_ID
-cp dist/htsjdk-$RELEASE_ID.jar deploy/htsjdk/$RELEASE_ID/
-
-# Make all files to be pushed to Sourceforge writable by group so that another Picard admin can overwrite them.
-
-chmod -R gu+rw javadoc deploy dist
-
-find javadoc deploy dist -type d -exec chmod g+s '{}' ';' 
-
-scp -p -r javadoc $USERNAME,picard at web.sourceforge.net:htdocs
-
-cd deploy
-scp -p -r htsjdk/$RELEASE_ID $USERNAME,picard at web.sourceforge.net:/home/frs/project/p/pi/picard/htsjdk/
diff --git a/setup/install b/setup/install
new file mode 100755
index 0000000..4dcf8cf
--- /dev/null
+++ b/setup/install
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+FILENAME="`basename $0`"
+CURDIR="`dirname $0`"
+
+if [ -z "$CURDIR" ]
+    then
+    echo error: install should be run as ./install
+    exit 1
+fi
+
+if [ "$FILENAME" != install -a ! -s install.perl ]
+    then
+    echo error: install should be run as ./install
+else
+    perl -v > /dev/null 2>&1 || { echo "checking for perl... no"; \
+        echo >&2 "error: perl not found."; exit 1; }
+
+    cd $CURDIR
+    perl -w ./install.perl "$@"
+fi
diff --git a/setup/install.perl b/setup/install.perl
new file mode 100644
index 0000000..fa2bae6
--- /dev/null
+++ b/setup/install.perl
@@ -0,0 +1,1329 @@
+################################################################################
+
+use strict;
+
+require 'install.prl';
+
+use Config;
+use Cwd        "abs_path";
+use File::Copy "copy";
+use File::Copy::Recursive qw(dircopy);
+use File::Path   "make_path";
+use FindBin    qw($Bin);
+use Getopt::Long "GetOptions";
+
+my ($OS, $MAKING, %INSTALLED_LIBS);
+{
+    my $file = 'os.prl';
+    if (-e $file) {
+        require $file;
+        $OS = OS();
+    } else {
+        ++$MAKING;
+    }
+}
+
+my %HAVE = HAVE();
+BINS() if ($HAVE{BINS});
+if ($HAVE{LIBS}) {
+    ++$HAVE{INCLUDES};
+    LIBS();
+}
+if ($HAVE{INCLUDES} || $HAVE{USR_INCLUDES}) {
+    die "no INCLUDES" unless INCLUDES();
+}
+die "no CONFIG_OUT" unless CONFIG_OUT();
+
+my @bits;
+my @options = ( 'debug', 'examplesdir=s', 'force', 'help',
+                'includedir=s', 'no-create', 'prefix=s', 'root=s', );
+push @options, 'oldincludedir=s' if ($HAVE{USR_INCLUDES});
+if ($HAVE{JAR}) {
+    push @options, 'jardir=s';
+    if (-e "$Bin/../jar") {
+        ++$HAVE{LIBS};
+        $_{JARDIR} = expand_path("$Bin/../jar");
+    }
+} elsif ($HAVE{PYTHON} && ! $MAKING) {
+    ++$HAVE{LIBS};
+}
+if (! $MAKING && ($HAVE{JAR} || $HAVE{PYTHON})) {
+    ++$HAVE{TWO_LIBS};
+    push @options, 'ngslibdir=s', 'vdblibdir=s';
+}
+push @options, 'bindir=s'                     if ($HAVE{BINS});
+push @options, 'bits=s' => \@bits, 'libdir=s' if ($HAVE{LIBS});
+
+my %OPT;
+unless (GetOptions(\%OPT, @options)) {
+    print "install: error\n";
+    exit 1;
+}
+ at bits = split(/,/,join(',', at bits));
+foreach (@bits) {
+    unless (/^32$/ || /^64$/) {
+        print "install: error: bad bits option argument value\n";
+        exit 1;
+    }
+}
+if ($#bits > 0) {
+    foreach (qw(bindir libdir ngslibdir vdblibdir)) {
+        if ($OPT{$_}) {
+            print "install: error: cannot supply multiple bits arguments "
+                . "when $_ argument is provided\n";
+            exit 1;
+        }
+    }
+}
+
+$OPT{root} = expand_path($OPT{root}) if ($OPT{root});
+
+prepare();
+
+my $LINUX_ROOT;
+++$LINUX_ROOT if (linux_root());
+my $ROOT = '';
+if ($OPT{root}) {
+    $ROOT = "$OPT{root}/root";
+    ++$LINUX_ROOT;
+    foreach ("$ROOT/usr/include", "$ROOT/etc/profile.d") {
+        unless (-e $_) {
+            print "mkdir -p $_... ";
+            eval { make_path($_) };
+            if ($@) {
+                print "failure: $@\n";
+                exit 1;
+            }
+            print "ok\n";
+        }
+    }
+}
+
+my $oldincludedir = "$ROOT/usr/include";
+
+my $EXAMPLES_DIR = "$Bin/../examples";
+
+ at _ = CONFIGURE();
+
+if ($OPT{help}) {
+    help();
+    exit 0;
+}
+
+foreach (qw(BITS INCDIR
+ INST_INCDIR INST_JARDIR INST_LIBDIR INST_NGSLIBDIR INST_SHAREDIR INST_VDBLIBDIR
+ LIBX LPFX MAJVERS MAJVERS_SHLX OS OTHER_PREFIX
+ PACKAGE_NAME PREFIX SHLX VERSION VERSION_LIBX VERSION_SHLX))
+{
+    unless ($_{$_}) {
+        next if (/^INST_JARDIR$/    && ! $HAVE{JAR});
+        next if (/^INST_NGSLIBDIR$/ && ! $HAVE{TWO_LIBS});
+        next if (/^INST_SHAREDIR$/  && ! $HAVE{EXAMPLES});
+        next if (/^INST_VDBLIBDIR$/ && ! $HAVE{TWO_LIBS});
+        fatal_config("$_ not found");
+    }
+}
+unless ($_{LIBDIR32} || $_{LIBDIR64} || ($HAVE{PYTHON} && $MAKING)) {
+    fatal_config('LIBDIR not found');
+}
+ 
+if ($OPT{prefix}) {
+    $OPT{prefix} = expand_path($OPT{prefix});
+    $_{INST_BINDIR  } = "$OPT{prefix}/bin";
+    $_{INST_LIBDIR  } = "$OPT{prefix}/lib";
+    $_{INST_NGSLIBDIR} = $_{INST_VDBLIBDIR} = $_{INST_LIBDIR};
+    $_{INST_INCDIR  } = "$OPT{prefix}/include";
+    $_{INST_JARDIR  } = "$OPT{prefix}/jar";
+    $_{INST_SHAREDIR} = "$OPT{prefix}/share";
+}
+$_{INST_SHAREDIR} = expand_path($OPT{examplesdir  }) if ($OPT{examplesdir  });
+$_{INST_INCDIR  } = expand_path($OPT{includedir   }) if ($OPT{includedir   });
+$_{INST_JARDIR  } = expand_path($OPT{jardir       }) if ($OPT{jardir       });
+$_{BIN_TARGET   } = expand_path($OPT{bindir       }) if ($OPT{bindir       });
+$oldincludedir    = expand_path($OPT{oldincludedir}) if ($OPT{oldincludedir});
+if ($OPT{libdir}) {
+    $_{INST_NGSLIBDIR} = $_{LIB_TARGET} = expand_path($OPT{libdir}) ;
+    $_{INST_VDBLIBDIR} = $_{LIB_TARGET};
+}
+$_{INST_NGSLIBDIR}= expand_path($OPT{ngslibdir}) if ($OPT{ngslibdir});
+$_{INST_VDBLIBDIR}= expand_path($OPT{vdblibdir}) if ($OPT{vdblibdir});
+
+if ($OPT{'no-create'} && $_{OS} eq 'linux') {
+    if ($LINUX_ROOT) {
+        print "root user\n\n";
+    } else {
+        print "non root user\n\n";
+    }
+}
+
+my $failures = 0;
+my $bFailure = 1;
+
+push @bits, $_{BITS} unless (@bits);
+foreach (@bits) {
+    $_{BITS} = $_;
+
+    print "installing $_{PACKAGE_NAME} ($_{VERSION}) package";
+    print " for $_{OS}-$_{BITS}" if ($HAVE{BINS} || $HAVE{LIBS});
+    print "...\n";
+
+    if ($HAVE{BINS}) {
+        $_{BINDIR} = $_{"BINDIR$_{BITS}"};
+        unless ($_{BINDIR}) {
+            print "install: error: $_{BITS}-bit version is not available\n\n";
+            next;
+        }
+    }
+    if ($HAVE{LIBS} || $HAVE{PYTHON}) {
+# ($_{LIBDIR} for python points where ngs-sdk and ncbi-vdb dynamic libraries
+# can be found to correctly set up LD_LIBRARY_PATH
+        $_{LIBDIR} = $_{"LIBDIR$_{BITS}"};
+        unless ($_{LIBDIR}) {
+            print "install: error: $_{BITS}-bit version is not available\n\n";
+            next;
+        }
+    }
+    if ($HAVE{JAR} && ! $_{JARDIR}) {
+        $_{JARDIR} = $_{"LIBDIR$_{BITS}"};
+        unless ($_{JARDIR}) {
+            if ($_{BITS} == 64) {
+                $_{JARDIR} = $_{LIBDIR32};
+            } else {
+                $_{JARDIR} = $_{LIBDIR64};
+            }
+            unless ($_{JARDIR}) {
+                print "install: error: jar file was not cannot found\n";
+                exit 1;
+            }
+        }
+    }
+    $bFailure = 0;
+
+    if ($OPT{'no-create'}) {
+        print     "includedir : '$_{INST_INCDIR  }'\n" if ($HAVE{INCLUDES  });
+        print     "libdir     : '$_{INST_LIBDIR}$_{BITS}'\n" if ($HAVE{LIBS});
+        print     "jardir     : '$_{INST_JARDIR  }'\n" if ($HAVE{JAR       });
+        print     "examplesdir: '$_{INST_SHAREDIR}'\n" if ($HAVE{EXAMPLES  });;
+        if ($LINUX_ROOT) {
+            print "oldincludedir: '$oldincludedir'\n"  if ($HAVE{USR_INCLUDES});
+        }
+        print "\n";
+        next;
+    }
+
+    $_{BIN_TARGET} = "$_{INST_BINDIR}$_{BITS}" unless ($OPT{bindir});
+    $_{LIB_TARGET} = "$_{INST_LIBDIR}$_{BITS}" unless ($OPT{libdir});
+
+    $File::Copy::Recursive::CPRFComp = 1;
+
+    $failures += copybins    () if ($HAVE{BINS});
+    $failures += copylibs    () if ($HAVE{LIBS});
+    $failures += copyincludes() if ($HAVE{INCLUDES});
+    $failures += copyjars    () if ($HAVE{JAR});
+    $failures += copyconfig  () if ($HAVE{CONFIG});
+
+    if ($HAVE{JAR}) {
+        $File::Copy::Recursive::CPRFComp = 0;
+        $failures += copydocs() ;
+        $File::Copy::Recursive::CPRFComp = 1;
+    }
+
+    $failures += copyexamples() if ($HAVE{EXAMPLES});
+    $failures += finishinstall() unless ($failures);
+
+    unless ($failures) {
+        print "\nsuccessfully installed $_{PACKAGE_NAME} ($_{VERSION}) package";
+    } else {
+        print "\nfailed to install $_{PACKAGE_NAME} ($_{VERSION}) package";
+    }
+    print " for $_{OS}-$_{BITS}" if ($HAVE{BINS} || $HAVE{LIBS});
+    print ".\n\n";
+}
+
+$failures = 1 if (!$failures && $bFailure);
+
+exit $failures;
+
+################################################################################
+
+sub copybins {
+    unless ($_{BIN_TARGET}) {
+        print "error: cannot install executables: no BIN_TARGET\n";
+        return 1;
+    }
+    my $s = $_{BINDIR};
+    my $d = $_{BIN_TARGET};
+    print "installing executables to $d...";
+    unless (-e $s) {
+        print " failure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+    print "\nchecking $d... ";
+    unless (-e $d) {
+        print "not found\n";
+        print "mkdir -p $d... ";
+        eval { make_path($d) };
+        if ($@) {
+            print "failure\ninstall: error: cannot mkdir $d\n";
+            return 1;
+        } else {
+            print "success\n";
+        }
+    } else {
+        print "exists\n";
+    }
+    print "\t\tcd $d\n" if ($OPT{debug});
+    chdir $d or die "cannot cd $d";
+    my $failures = 0;
+    foreach (BINS()) {
+        print "installing '$_'..." if ($OPT{debug});
+        my $df = "$_$_{VERSION_EXEX}";
+        my $sf = "$s/$df";
+        print "\n\t\t$sf -> $df\n\t" if ($OPT{debug});
+        unless (-e $sf) {
+            print " skipped\n" if ($OPT{debug});
+            next;
+        }
+        if ((! $OPT{force}) && (-e $df) && (-M $df < -M $sf)) {
+            print " found\n" if ($OPT{debug});
+        } else {
+            unless (copy($sf, $df)) {
+                print "failure\n";
+                print "install: error: cannot copy '$sf' '$df'.\n";
+                ++$failures;
+                next;
+            }
+            my $mode = 0755;
+            printf "\tchmod %o $df\n\t", $mode if ($OPT{debug});
+            unless (chmod($mode, $df)) {
+                print " failure\n" if ($OPT{debug});
+                print "install: error: cannot chmod '$df': $!\n";
+                ++$failures;
+                next;
+            }
+            unless (symlinks($_, $df, 'bin')) {
+                print " success\n" if ($OPT{debug});
+            } else {
+                print " failure\n" if ($OPT{debug});
+                ++$failures;
+            }
+        }
+    }
+    return $failures;
+}
+
+sub copyconfig {
+    my $d;
+    if ($LINUX_ROOT) {
+        $d = "$ROOT/etc";
+    }
+    elsif ($HAVE{BINS}) {
+        $d = $_{BIN_TARGET};
+        unless ($d) {
+            print
+               "error: cannot install configuration files: no BIN_TARGET\n";
+            return 1;
+        }
+    } else {
+        $d = $_{LIB_TARGET};
+        unless ($d) {
+            print
+               "error: cannot install configuration files: no LIB_TARGET\n";
+            return 1;
+        }
+    }
+    $d = File::Spec->catdir($d, 'ncbi');
+    my $kfg = File::Spec->catdir($Bin, '..', 'libs/kfg/default.kfg');
+    unless (-e $kfg) {
+        $kfg = File::Spec->catdir($Bin, '..', 'tools/vdb-copy/vdb-copy.kfg');
+    }
+    unless (-e $kfg) {
+        if ($_{BINDIR}) {
+            $kfg = File::Spec->catdir($_{BINDIR}, 'ncbi', 'vdb-copy.kfg');
+        } elsif ($_{LIBDIR}) {
+            $kfg = File::Spec->catdir($_{LIBDIR}, 'ncbi', 'default.kfg');
+            unless (-e $kfg) {
+                print
+                  "error: cannot install configuration files: no default.kfg\n";
+                return 1;
+            }
+        }
+    }
+    print "installing configuration files to $d... ";
+    print "\nchecking $d... ";
+    unless (-e $d) {
+        print "not found\n";
+        print "mkdir -p $d... ";
+        eval { make_path($d) };
+        if ($@) {
+            print "failure\ninstall: error: cannot mkdir $d\n";
+            return 1;
+        } else {
+            print "success\n";
+        }
+    } else {
+        print "exists\n";
+    }
+    my $df = File::Spec->catdir($d, 'ncbi-vdb.kfg');
+    print "\t\t$kfg -> $df\n" if ($OPT{debug});
+    unless (copy($kfg, $df)) {
+        print "install: error: cannot copy '$kfg' '$df'.\n";
+        return 1;
+    } else {
+        print "success\n";
+        return 0;
+    }
+}
+
+sub copylibs {
+    die unless ($HAVE{LIBS});
+
+    my $s = $_{LIBDIR};
+    my $d = $_{LIB_TARGET};
+
+    print "installing libraries to $d... ";
+
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+
+    if ($HAVE{TWO_LIBS}) {
+        my $ngs = $_{INST_NGSLIBDIR};
+        if ($ngs && ! ($OPT{prefix} && $OPT{libdir} && $OPT{ngslibdir})) {
+            $ngs .= $_{BITS};
+        }
+        my $vdb = $_{INST_VDBLIBDIR};
+        if ($vdb && ! ($OPT{prefix} && $OPT{libdir} && $OPT{vdblibdir})) {
+            $vdb .= $_{BITS};
+        }
+        if ($ngs || $vdb) {
+            unless ($ngs && $vdb) {
+                $ngs = $d unless ($ngs);
+                $vdb = $d unless ($vdb);
+            }
+            $INSTALLED_LIBS{'ngs-sdk' } = $ngs;
+            $INSTALLED_LIBS{'ncbi-vdb'} = $vdb;
+        }
+    }
+    $INSTALLED_LIBS{0} = $d unless (%INSTALLED_LIBS);
+
+    foreach (keys %INSTALLED_LIBS) {
+        my $d = $INSTALLED_LIBS{$_};
+        print "\nchecking $d... ";
+        unless (-e $d) {
+            print "not found\n";
+            print "mkdir -p $d... ";
+            eval { make_path($d) };
+            if ($@) {
+                print "failure\ninstall: error: cannot mkdir $d\n";
+                return 1;
+            } else {
+                print "success\n";
+            }
+        } else {
+            print "exists\n";
+        }
+    }
+
+    return $MAKING ? copybldlibs($s, $d) : copydir($s, %INSTALLED_LIBS);
+}
+
+sub copybldlibs {
+    my ($s, $d) = @_;
+
+    print "\t\tcd $d\n" if ($OPT{debug});
+    chdir $d or die "cannot cd $d";
+
+    my $failures = 0;
+
+    my %LIBRARIES_TO_INSTALL = LIBS();
+    foreach (keys %LIBRARIES_TO_INSTALL) {
+        print "installing '$_'... ";
+
+        my $nb = "$_{LPFX}$_";
+        my $nv = "$nb.";
+        my $lib = 'dll';
+        if ($LIBRARIES_TO_INSTALL{$_} eq 'SHL') {
+            $nv .= $_{VERSION_SHLX};
+        } elsif ($LIBRARIES_TO_INSTALL{$_} eq 'LIB') {
+            $nv .= $_{VERSION_LIBX};
+            $lib = 'lib';
+        } else {
+            die "bad library type";
+        }
+
+        my $sf = "$s/$nv";
+        my $df = "$d/$nv";
+
+        print "\n\t\t$sf -> $df\n\t" if ($OPT{debug});
+
+        unless (-e $sf) {
+            print "failure\n";
+            print "install: error: '$sf' is not found.\n";
+            ++$failures;
+            next;
+        }
+
+        if ((! $OPT{force}) && (-e $df) && (-M $df < -M $sf)) {
+            print "found\n";
+        } else {
+            unless (copy($sf, $df)) {
+                print "failure\n";
+                print "install: error: cannot copy '$sf' '$df'.\n";
+                ++$failures;
+                next;
+            }
+            my $mode = 0644;
+            $mode = 0755 if ($lib eq 'dll');
+            printf "\tchmod %o $df\n\t", $mode if ($OPT{debug});
+            unless (chmod($mode, $df)) {
+                print "failure\n";
+                print "install: error: cannot chmod '$df': $!\n";
+                ++$failures;
+                next;
+            }
+            unless (symlinks($nb, $nv, $lib)) {
+                print "success\n";
+            } else {
+                print "failure\n";
+                ++$failures;
+            }
+        }
+    }
+
+    return $failures;
+}
+
+sub symlinks {
+    my ($nb, $nv, $type) = @_;
+
+    my @l;
+    if ($type eq 'lib') {
+        push @l, "$nb-static.$_{LIBX}";
+        push @l, "$nb.$_{LIBX}";
+        push @l, "$nb.$_{MAJVERS_LIBX}";
+    } elsif ($type eq 'dll') {
+        push @l, "$nb.$_{SHLX}";
+        push @l, "$nb.$_{MAJVERS_SHLX}";
+    } elsif ($type eq 'bin' || $type eq 'jar') {
+        push @l, $nb;
+        push @l, "$nb.$_{MAJVERS}";
+    } else {
+        print "failure\n";
+        print "install: error: unknown symlink type '$type'\n";
+        return 1;
+    }
+
+    my $failures = 0;
+
+    for (my $i = 0; $i <= $#l; ++$i) {
+        my $file = $l[$i];
+        if (-e $file) {
+            print "\trm $file\n\t" if ($OPT{debug});
+            unless (unlink $file) {
+                print "failure\n";
+                print "install: error: cannot rm '$file': $!\n";
+                ++$failures;
+                next;
+            }
+        }
+
+        my $o = $nv;
+        $o = $l[$i + 1] if ($i < $#l);
+
+        print "\tln -s $o $file\n\t" if ($OPT{debug});
+        unless (symlink $o, $file) {
+            print "failure\n";
+            print "install: error: cannot symlink '$o' '$file': $!\n";
+            ++$failures;
+            next;
+        }
+    }
+
+    return $failures;
+}
+
+sub copydir {
+    my ($s, %d) = @_;
+
+    my $failures = 0;
+
+    foreach my $pattern(keys %d) {
+        my $d = $d{$pattern};
+        print "\t\tcd $d\n" if ($OPT{debug});
+        chdir $d or die "cannot cd $d";
+
+        opendir(D, $s) or die "cannot opendir $s: $!";
+
+        while (readdir D) {
+            next if (/^\.{1,2}$/);
+            next if ($pattern && ! /$pattern/);
+
+            my $n = "$s/$_";
+
+            if (-l $n) {
+                print "\t\t$_ (symlink)... " if ($OPT{debug});
+                my $l = readlink $n;
+                if ((-e $_) && (!unlink $_)) {
+                    print "error: cannot remove $l: $!\n";
+                    ++$failures;
+                    next;
+                }
+                unless (symlink($l, $_)) {
+                    print "error: cannot create symlink from $_ to $l: $!\n";
+                    ++$failures;
+                    next;
+                }
+                print "success\n" if ($OPT{debug});
+            } else {
+                print "\t\t$_... " if ($OPT{debug});
+                if ((-e $_) && (!unlink $_)) {
+                    print "error: cannot remove $_: $!\n";
+                    ++$failures;
+                    next;
+                }
+                unless (copy($n, $_)) {
+                    print "error: cannot copy '$n' to '$_': $!\n";
+                    ++$failures;
+                    next;
+                }
+                print "success\n" if ($OPT{debug});
+            }
+        }
+
+        closedir D;
+    }
+
+    return $failures;
+}
+
+sub includes_out {
+    my $out = '';
+    eval { $out = INCLUDES_OUT(); };
+    $out = File::Spec->catdir($_{INST_INCDIR}, $out);
+    $out;
+}
+
+sub copyincludes {
+    print "installing includes to $_{INST_INCDIR}... ";
+
+    my $s = "$_{INCDIR}/" . INCLUDES();
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+
+    my $out = includes_out();
+    my $d = $out;
+    $d = $_{INST_INCDIR} unless ($d);
+
+    unless (-e $d) {
+        print "\n\t\tmkdir -p $d" if ($OPT{debug});
+        eval { make_path($d) };
+        if ($@) {
+            print "\tfailure\ninstall: error: cannot mkdir $d\n";
+            return 1;
+        }
+    }
+
+    if ($out && -f $s) {
+        print "\n\t\tcp $s $d\n\t" if ($OPT{debug});
+        unless (copy($s, $d)) {
+            print "failure\n";
+            return 1;
+        }
+    } else {
+        print "\n\t\tcp -r $s $d\n\t" if ($OPT{debug});
+        unless (dircopy($s, $d)) {
+            print "\tfailure\ninstall: error: cannot copy '$s' 'd'";
+            return 1;
+        }
+    }
+
+    print "success\n";
+    return 0;
+}
+
+sub copyjars {
+    my $s = $_{JARDIR};
+    my $d = $_{INST_JARDIR};
+
+    print "installing jar files to $d... ";
+
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+
+    print "\nchecking $d... ";
+    unless (-e $d) {
+        print "not found\n";
+        print "mkdir -p $d... ";
+        eval { make_path($d) };
+        if ($@) {
+            print "failure\ninstall: error: cannot mkdir $d\n";
+            return 1;
+        } else {
+            print "success\n";
+        }
+    } else {
+        print "exists\n";
+    }
+
+    return $MAKING ? copybldjars($s, $d) : copydir($s, 0 => $d);
+}
+
+sub copybldjars {
+    my ($s, $d) = @_;
+    my $n = 'ngs-java.jar';
+    $s .= "/$n";
+
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+
+    my $nd = "$n.$_{VERSION}";
+    print "installing '$n'... ";
+
+    print "\t\tcd $d\n" if ($OPT{debug});
+    chdir $d or die "cannot cd $d";
+
+    $d .= "/$nd";
+
+    print "\n\t\t$s -> $d\n\t" if ($OPT{debug});
+
+    if ((! $OPT{force}) && (-e $d) && (-M $d < -M $s)) {
+        print "found\n";
+    } else {
+        unless (copy($s, $d)) {
+            print "failure\n";
+            print "install: error: cannot copy '$s' '$d'.\n";
+            return 1;
+        }
+        my $mode = 0644;
+        printf "\tchmod %o $d\n\t", $mode if ($OPT{debug});
+        unless (chmod($mode, $d)) {
+            print "failure\n";
+            print "install: error: cannot chmod '$d': $!\n";
+            return 1;
+        }
+        unless (symlinks($n, $nd, 'jar')) {
+            print "success\n";
+        } else {
+            print "failure\n";
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+sub copydocs {
+    my $s = "$_{JARDIR}/javadoc";
+    $s = expand_path("$Bin/../doc") unless ($MAKING);
+    my $d = "$_{INST_SHAREDIR}/doc";
+
+    print "installing html documents to $d... ";
+
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        return 1;
+    }
+
+    print "\nchecking $d... ";
+    unless (-e $d) {
+        print "not found\n";
+        print "mkdir -p $d... ";
+        eval { make_path($d) };
+        if ($@) {
+            print "failure\ninstall: error: cannot mkdir $d\n";
+            return 1;
+        } else {
+            print "success\n";
+        }
+    } else {
+        print "exists\n";
+    }
+
+    print "\t\t$s -> $d\n\t" if ($OPT{debug});
+    unless (dircopy($s, $d)) {
+        print "\tfailure\ninstall: error: cannot copy '$s' to '$d'";
+        return 1;
+    }
+
+    print "success\n";
+    return 0;
+}
+
+sub copyexamples {
+    my $failures = 0;
+    my $CPRFComp = $File::Copy::Recursive::CPRFComp;
+    my $sd = $EXAMPLES_DIR;
+    return 0 unless (-e $sd);
+
+    my $d = $_{INST_SHAREDIR};
+    unless ($d) {
+        print "install: error: cannot install examples\n";
+        return 0;
+    }
+
+    if ($HAVE{JAR}) {
+        $d .= '/examples-java';
+    } elsif ($HAVE{PYTHON}) {
+        $File::Copy::Recursive::CPRFComp = 0;
+        $d .= '/examples-python';
+    }
+
+    print "installing examples to $d... ";
+
+    my $s = $sd;
+    $s = "$sd/examples" if ($HAVE{JAR} && $MAKING);
+
+    unless (-e $s) {
+        print "\tfailure\n";
+        print "install: error: '$s' is not found.\n";
+        ++$failures;
+    }
+
+    unless ($failures) {
+        print "\nchecking $d... ";
+        unless (-e $d) {
+            print "not found\n";
+            print "mkdir -p $d... ";
+            eval { make_path($d) };
+            if ($@) {
+                print "failure\ninstall: error: cannot mkdir $d\n";
+                ++$failures;
+            } else {
+                print "success\n";
+            }
+        } else {
+            print "exists\n";
+        }
+    }
+
+    unless ($failures) {
+        print "\t\t$s -> $d\n\t" if ($OPT{debug});
+        if ($HAVE{JAR} && ! $MAKING) {
+            if (copydir($s, 0 => $d)) {
+                ++$failures;
+            }
+        } else {
+            unless (dircopy($s, $d)) {
+                print "\tfailure\ninstall: error: cannot copy '$s' to '$d'";
+                ++$failures;
+            }
+        }
+    }
+
+    unless ($failures) {
+        if ($HAVE{JAR} && $MAKING) {
+            $sd = "$sd/Makefile";
+            $d = "$d/Makefile";
+            print "\t$sd -> $d\n\t" if ($OPT{debug});
+            unless (-e $sd) {
+                print "\tfailure\n";
+                print "install: error: '$sd' is not found.\n";
+                ++$failures;
+            }
+            unless ($failures) {
+                if (-e $d) {
+                unless (unlink $d) {
+                    print "failure\n";
+                    print "install: error: cannot rm '$d': $!\n";
+                    ++$failures;
+                }
+            }
+            unless ($failures) {
+                unless (copy($sd, $d)) {
+                    print "error: cannot copy '$sd' to '$d': $!\n";
+                    ++$failures;
+                }
+            }
+        }
+      }
+    }
+
+    print "success\n" unless ($failures);
+
+    $File::Copy::Recursive::CPRFComp = $CPRFComp;
+
+    return $failures;
+}
+
+sub finishinstall {
+    my $failures = 0;
+
+    $_{JAR_TARGET} = "$_{INST_JARDIR}/ngs-java.jar";
+
+    my @libs;
+    if (%INSTALLED_LIBS) {
+        my %libs;
+        ++$libs{$INSTALLED_LIBS{$_}} foreach (keys %INSTALLED_LIBS);
+        push @libs, $_ foreach (keys %libs);
+    } else {
+        push @libs, $_{LIB_TARGET};
+    }
+    my $libs;
+    foreach (@libs) {
+        $libs .= ":" if ($libs);
+        $libs .= $_;
+    }
+
+    if ($HAVE{PYTHON}) {
+        chdir "$Bin/.." or die "cannot cd '$Bin/..'";
+        my $cmd = "python setup.py install";
+        $cmd .= ' --user' unless (linux_root());
+        print `$cmd`;
+        if ($?) {
+            ++$failures;
+        } else {
+            unless ($libs) {
+                print "internal python failure\n";
+                ++$failures;
+            } elsif ($HAVE{LIBS}) {
+                print <<EndText;
+Please add $libs to your LD_LIBRARY_PATH, e.g.:
+      export LD_LIBRARY_PATH=$libs:\$LD_LIBRARY_PATH
+EndText
+            }
+        }
+    } elsif ($LINUX_ROOT) {
+        print "\t\tlinux root\n" if ($OPT{debug});
+
+        if ($HAVE{USR_INCLUDES}) {
+            unless (-e $oldincludedir) {
+                print "install: error: '$oldincludedir' does not exist\n";
+                ++$failures;
+            } else {
+                my $o = includes_out();
+                if ($o) {
+                    eval { INCLUDES_OUT(); };
+                    if ($@) {
+                        print "install: cannot find INCLUDES_OUT\n";
+                        ++$failures;
+                    } else {
+                        my $INCLUDE_SYMLINK
+                            = "$oldincludedir/" . INCLUDES_OUT();
+                        print "updating $INCLUDE_SYMLINK... ";
+                        unlink $INCLUDE_SYMLINK;
+                        if ($OPT{debug}) {
+                            print "\n\t\tln -s $o $INCLUDE_SYMLINK... ";
+                        }
+                        unless (symlink $o, $INCLUDE_SYMLINK) {
+                            print "failure\n";
+                            print "install: error: " .
+                                "cannot symlink '$o' '$INCLUDE_SYMLINK': $!\n";
+                            ++$failures;
+                        } else {
+                            print "success\n";
+                        }
+                    }
+                } else {
+                    my $INCLUDE_SYMLINK = "$oldincludedir/" . INCLUDES();
+                    print "updating $INCLUDE_SYMLINK... ";
+                    unlink $INCLUDE_SYMLINK;
+                    my $o = "$_{INST_INCDIR}/" . INCLUDES();
+                    unless (symlink $o, $INCLUDE_SYMLINK) {
+                        print "failure\n";
+                        print "install: error: "
+                            . "cannot symlink '$o' '$INCLUDE_SYMLINK': $!\n";
+                        ++$failures;
+                    } else {
+                        print "success\n";
+                    }
+                }
+            }
+        }
+
+        my $NAME = PACKAGE_NAME();
+        if ($HAVE{BINS} || $HAVE{JAR}
+            || ($HAVE{LIBS}
+                && ($HAVE{DLLS} || $NAME eq 'NGS-SDK' || $NAME eq 'NGS-BAM')
+               )
+            )
+        {
+            my $profile = "$ROOT/etc/profile.d";
+            my $PROFILE_FILE = "$profile/" . lc(PACKAGE_NAME());
+            unless (-e $profile) {
+                print "install: error: '$profile' does not exist\n";
+                ++$failures;
+            } else {
+                print "updating $PROFILE_FILE.[c]sh... ";
+
+                my $f = "$PROFILE_FILE.sh";
+                if (!open F, ">$f") {
+                    print "failure\n";
+                    print "install: error: cannot open '$f': $!\n";
+                    ++$failures;
+                } else {
+                    print F "#version $_{VERSION}\n\n";
+
+                    if ($HAVE{LIBS}) {
+                        unless (@libs) {
+                            print "internal root libraries failure\n";
+                            ++$failures;
+                        } else {
+                            if ($HAVE{DLLS}) {
+                                foreach (@libs) {
+                                    print F <<EndText;
+if ! echo \$LD_LIBRARY_PATH | /bin/grep -q $_
+then export LD_LIBRARY_PATH=$_:\$LD_LIBRARY_PATH
+fi
+
+EndText
+                                }
+                            }
+                            if ($NAME eq 'NGS-SDK') {
+                                print F "export NGS_LIBDIR=$_{LIB_TARGET}\n";
+                            } elsif ($NAME eq 'NGS-BAM') {
+                                print F
+                                      "\nexport NGS_BAM_LIBDIR=$_{LIB_TARGET}\n"
+                            }
+                        }
+                    }
+                    if ($HAVE{JAR}) {
+                        print F <<EndText;
+if ! echo \$CLASSPATH | /bin/grep -q $_{JAR_TARGET}
+then export CLASSPATH=$_{JAR_TARGET}:\$CLASSPATH
+fi
+EndText
+                    }
+                    if ($HAVE{BINS}) {
+                        print F <<EndText;
+if ! echo \$PATH | /bin/grep -q $_{INST_BINDIR}
+then export PATH=$_{INST_BINDIR}:\$PATH
+fi
+EndText
+                    }
+                    close F;
+                    unless (chmod(0644, $f)) {
+                        print "failure\n";
+                        print "install: error: cannot chmod '$f': $!\n";
+                        ++$failures;
+                    }
+                }
+            }
+
+            my $f = "$PROFILE_FILE.csh";
+            if (!open F, ">$f") {
+                print "failure\n";
+                print "install: error: cannot open '$f': $!\n";
+                ++$failures;
+            } else {
+                print F "#version $_{VERSION}\n\n";
+
+                if ($HAVE{LIBS}) {
+                    unless (@libs) {
+                        print "internal libraries failure\n";
+                        ++$failures;
+                    } else {
+                        if ($HAVE{DLLS}) {
+                            foreach (@libs) {
+                                print F <<EndText;
+echo \$LD_LIBRARY_PATH | /bin/grep -q $_
+if ( \$status ) setenv LD_LIBRARY_PATH $_:\$LD_LIBRARY_PATH
+
+EndText
+                            }
+                        }
+                    }
+                    if (PACKAGE_NAME() eq 'NGS-BAM') {
+                        print F "setenv NGS_BAM_LIBDIR $_{LIB_TARGET}\n";
+                    } elsif (PACKAGE_NAME() eq 'NGS-SDK') {
+                        print F "setenv NGS_LIBDIR $_{LIB_TARGET}\n";
+                    } elsif (PACKAGE_NAME() eq 'NCBI-VDB') {
+                        print F "setenv NCBI_VDB_LIBDIR $_{LIB_TARGET}\n";
+                    }
+                }
+                if ($HAVE{JAR}) {
+                    print F <<EndText;
+echo \$CLASSPATH | /bin/grep -q $_{JAR_TARGET}
+if ( \$status ) setenv CLASSPATH $_{JAR_TARGET}:\$CLASSPATH
+EndText
+                }
+                if ($HAVE{BINS}) {
+                    print F <<EndText;
+echo \$PATH | /bin/grep -q $_{INST_BINDIR}
+if ( \$status ) setenv PATH $_{INST_BINDIR}:\$PATH
+EndText
+                }
+                close F;
+                unless (chmod(0644, $f)) {
+                    print "failure\n";
+                    print "install: error: cannot chmod '$f': $!\n";
+                    ++$failures;
+                }
+            }
+#	@ #TODO: check version of the files above
+            print "success\n" unless ($failures);
+        }
+
+        unless ($failures) {
+            if ($HAVE{LIBS}) {
+                if (PACKAGE_NAME() eq 'NGS-BAM') {
+                    print "\n";
+                    print "Use \$NGS_BAM_LIBDIR in your link commands, e.g.:\n";
+                    print "      ld -L\$NGS_BAM_LIBDIR -lngs-bam ...\n";
+                } elsif (PACKAGE_NAME() eq 'NGS-SDK') {
+                    print "\nUse \$NGS_LIBDIR in your link commands, e.g.:\n";
+                    print "      ld -L\$NGS_LIBDIR -lngs-sdk ...\n";
+                } elsif (PACKAGE_NAME() eq 'NCBI-VDB') {
+                    print "\n"
+                       . "Use \$NCBI_VDB_LIBDIR in your link commands, e.g.:\n";
+                    print "      ld -L\$NCBI_VDB_LIBDIR -lncbi-vdb ...\n";
+                }
+            }
+        }
+    } else {
+        print "\t\tnot linux root\n" if ($OPT{debug});
+        if ($HAVE{LIBS}) {
+            unless ($libs) {
+                print "internal libraries failure\n";
+                ++$failures;
+            } else {
+                print "\n";
+                print <<EndText if ($HAVE{DLLS});
+Please add $libs to your LD_LIBRARY_PATH, e.g.:
+      export LD_LIBRARY_PATH=$libs:\$LD_LIBRARY_PATH
+EndText
+                if (PACKAGE_NAME() eq 'NGS-SDK') {
+                    print "Use $libs in your link commands, e.g.:\n"
+                        . "export NGS_LIBDIR=$libs\n"
+                        . "ld -L\$NGS_LIBDIR -lngs-sdk ...\n";
+                } elsif (PACKAGE_NAME() eq 'NGS-BAM') {
+                    print "Use $libs in your link commands, e.g.:\n"
+                        . "export NGS_BAM_LIBDIR=$libs\n"
+                        . "ld -L\$NGS_BAM_LIBDIR -lngs-bam ...\n";
+                }
+            }
+        }
+        if ($HAVE{JAR}) {
+            print <<EndText;
+
+Please add $_{JAR_TARGET} to your CLASSPATH, i.e.:
+      export CLASSPATH=$_{JAR_TARGET}:\$CLASSPATH
+EndText
+        }
+    }
+
+    return $failures;
+}
+
+sub expand_path {
+    my ($filename) = @_;
+    return unless ($filename);
+
+    if ($filename =~ /^~/) {
+        if ($filename =~ m|^~([^/]*)|) {
+            if ($1 && ! getpwnam($1)) {
+                print "install: error: bad path: '$filename'\n";
+                exit 1;
+            }
+        }
+
+        $filename =~ s{ ^ ~ ( [^/]* ) }
+                      { $1
+                            ? (getpwnam($1))[7]
+                            : ( $ENV{HOME} || $ENV{USERPROFILE} || $ENV{LOGDIR}
+                                || (getpwuid($<))[7]
+                              )
+                      }ex;
+    }
+
+    my $a = abs_path($filename);
+    $filename = $a if ($a);
+
+    $filename;
+}
+
+sub help {
+    $_{LIB_TARGET} = "$_{INST_LIBDIR}$_{BITS}";
+
+    print <<EndText;
+'install' installs $_{PACKAGE_NAME} $_{VERSION} package.
+
+Usage: ./install [OPTION]...
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+  -n, --no-create         do not run installation
+
+EndText
+
+    if ($HAVE{TWO_LIBS}) {
+        my $p = lc(PACKAGE_NAME());
+        print "By default, `./install' will install all the files in\n";
+        print "`/usr/local/ngs/$p/jar', " if ($HAVE{JAR});
+        print <<EndText;
+`/usr/local/ngs/$p/share',
+`/usr/local/ngs/ngs-sdk/lib$_{BITS}', `/usr/local/ncbi/ncbi-vdb/lib$_{BITS}'.
+You can spefify other installation directories using the options below.
+
+Fine tuning of the installation directories:
+EndText
+        if ($HAVE{JAR}) {
+            print
+                "  --jardir=DIR         jar files [/usr/local/ngs/$p/jar]\n"
+        }
+        print <<EndText;
+  --ngslibdir=DIR      ngs-sdk libraries [/usr/local/ngs/ngs-sdk/lib$_{BITS}]
+  --vdblibdir=DIR      ncbi-vdb libraries [/usr/local/ncbi/ncbi-vdb/lib$_{BITS}]
+  --examplesdir=DIR    example files [/usr/local/ngs/$p/share]
+
+  --libdir=DIR         install all libraries in the same directory
+  --prefix=DIR         install files in PREFIX/lib$_{BITS}, PREFIX/share etc.
+EndText
+    } else {
+        print <<EndText;
+Installation directories:
+  --prefix=PREFIX         install all files in PREFIX
+                          [$_{PREFIX}]
+
+By default, `./install' will install all the files in
+EndText
+
+        if ($HAVE{INCLUDES}) {
+            print
+"`$_{PREFIX}/include', `$_{PREFIX}/lib$_{BITS}' etc.  You can specify\n"
+        } elsif ($HAVE{JAR}) {
+            print "`$_{PREFIX}/jar', `$_{PREFIX}/share' etc.  You can specify\n"
+        } elsif ($MAKING) {
+            print "`$_{PREFIX}/share' etc.  You can specify\n"
+        } else {
+            print
+"`$_{PREFIX}/lib$_{BITS}' `$_{PREFIX}/share' etc.  You can specify\n"
+        }
+
+        print <<EndText;
+an installation prefix other than `$_{PREFIX}' using `--prefix',
+for instance `--prefix=$_{OTHER_PREFIX}'.
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+EndText
+
+        if ($HAVE{BINS}) {
+            print "  --bindir=DIR            executables [PREFIX/bin]\n";
+        }
+        if ($HAVE{JAR}) {
+            print "  --jardir=DIR            jar files [PREFIX/jar]\n";
+        }
+        if ($HAVE{LIBS}) {
+            print
+"  --libdir=DIR            object code libraries [PREFIX/lib$_{BITS}]\n"
+        }
+        if ($HAVE{INCLUDES}) {
+            print "  --includedir=DIR        C header files [PREFIX/include]\n";
+        }
+        if ($HAVE{USR_INCLUDES}) {
+            print
+"  --oldincludedir=DIR     C header files for non-gcc [$oldincludedir]\n"
+        }
+
+        if (-e $EXAMPLES_DIR) {
+            print "  --examplesdir=DIR       example files [PREFIX/share]\n";
+        }
+    }
+
+    if ($HAVE{LIBS}) {
+        print <<EndText;
+
+System types:
+  --bits=[32|64]          use a 32- or 64-bit data model
+EndText
+    }
+
+    print "\nReport bugs to sra-tools\@ncbi.nlm.nih.gov\n";
+}
+
+sub prepare {
+    if ($MAKING) {
+        my $os_arch = `perl -w $Bin/os-arch.perl`;
+        unless ($os_arch) {
+            print "install: error\n";
+            exit 1;
+        }
+        chomp $os_arch;
+        my $config =
+            "$Bin/../" . CONFIG_OUT() . "/Makefile.config.install.$os_arch.prl";
+        fatal_config("$config not found") unless (-e "$config");
+
+        eval { require $config; };
+        fatal_config($@) if ($@);
+    } else {
+        my $a = $Config{archname64};
+        $_ = lc PACKAGE_NAME();
+        my $root = '';
+        $root = $OPT{root} if ($OPT{root});
+        my $code = 
+            'sub CONFIGURE { ' .
+            '   $_{OS           } = $OS; ' .
+            '   $_{VERSION      } = "1.0.0"; ' .
+            '   $_{MAJVERS      } = "1"; ' .
+            '   $_{LPFX         } = "lib"; ' .
+            '   $_{LIBX         } = "a"; ' .
+            '   $_{MAJVERS_LIBX } = "a.1"; ' .
+            '   $_{VERSION_LIBX } = "a.1.0.0"; ' .
+            '   $_{SHLX         } = "so"; ' .
+            '   $_{OTHER_PREFIX } = \'$HOME/ngs/' . $_ . '\'; ' .
+            '   $_{PREFIX       } = "' . "$root/usr/local/ngs/$_" . '"; ' .
+            '   $_{INST_INCDIR  } = "$_{PREFIX}/include"; ' .
+            '   $_{INST_LIBDIR  } = "$_{PREFIX}/lib"; ' .
+            '   $_{INST_JARDIR  } = "$_{PREFIX}/jar"; ' .
+            '   $_{INST_SHAREDIR} = "$_{PREFIX}/share"; ' .
+            '   $_{INCDIR       } = "$Bin/../include"; ' .
+            '   $_{LIBDIR64     } = "$Bin/../lib64"; ' .
+            '   $_{LIBDIR32     } = "$Bin/../lib32"; ';
+        if ($HAVE{TWO_LIBS}) {
+            $code .=
+               '$_{INST_NGSLIBDIR} = "' . "$root/usr/local/ngs/ngs-sdk/lib\";"
+             . '$_{INST_VDBLIBDIR} = "' . "$root/usr/local/ncbi/ncbi-vdb/lib\";"
+        }
+        $code .= ' $_{PACKAGE_NAME} = "' . PACKAGE_NAME() . '"; ';
+
+        if (defined $Config{archname64}) {
+            $code .= ' $_{BITS} = 64; ';
+        } else {
+            $code .= ' $_{BITS} = 32; ';
+        }
+
+        $code .= 
+            '   $_{MAJVERS_SHLX } = "so.1"; ' .
+            '   $_{VERSION_SHLX } = "so.1.0.0"; ' ;
+
+        $code .= 
+            '   @_ ' .
+            '}';
+
+        eval $code;
+
+        die $@ if ($@);
+    }
+}
+
+sub linux_root { $^O eq 'linux' && `id -u` == 0 }
+
+sub fatal_config {
+    if ($OPT{debug}) {
+        print "\t\t";
+        print "@_";
+        print "\n";
+    }
+
+    print "install: error: run ./configure [OPTIONS] first.\n";
+
+    exit 1;
+}
+
+################################################################################
diff --git a/setup/install.prl b/setup/install.prl
new file mode 100644
index 0000000..8b26a51
--- /dev/null
+++ b/setup/install.prl
@@ -0,0 +1,38 @@
+sub PACKAGE_NAME { 'SRA-TOOLS' }
+sub HAVE        { ( BINS => 1, CONFIG => 1,) }
+sub CONFIG_OUT  {  'build' }
+sub BINS     { qw (abi-dump
+                   abi-load
+                   align-info
+                   bam-load
+                   cache-mgr
+                   cg-load
+                   fastq-dump
+                   fastq-load
+                   helicos-load
+                   illumina-dump
+                   illumina-load
+                   kar
+                   kdbmeta
+                   latf-load
+                   prefetch
+                   rcexplain
+                   sam-dump
+                   sff-dump
+                   sff-load
+                   sra-pileup
+                   sra-sort
+                   sra-stat
+                   srapath
+                   srf-load
+                   test-sra
+                   vdb-config
+                   vdb-copy
+                   vdb-decrypt
+                   vdb-dump
+                   vdb-encrypt
+                   vdb-lock
+                   vdb-passwd
+                   vdb-unlock
+                   vdb-validate ) }
+1
diff --git a/setup/konfigure.perl b/setup/konfigure.perl
new file mode 100644
index 0000000..5568cdd
--- /dev/null
+++ b/setup/konfigure.perl
@@ -0,0 +1,1762 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+use strict;
+
+sub println  { print @_; print "\n" }
+
+my ($filename, $directories, $suffix) = fileparse($0);
+if ($directories ne "./") {
+    println "configure: error: $filename should be run as ./$filename";
+    exit 1;
+}
+
+require 'package.prl';
+require 'os-arch.prl';
+
+use Cwd qw(abs_path getcwd);
+use File::Basename 'fileparse';
+use File::Spec 'catdir';
+use FindBin qw($Bin);
+use Getopt::Long "GetOptions";
+
+chdir '..' or die "cannot cd to package root";
+
+check();
+
+my $LOCAL_BUILD_OUT
+    = -e File::Spec->catdir($ENV{HOME}, 'tmp', 'local-build-out');
+
+my ($CONFIGURED, $RECONFIGURE) = ('');
+if (@ARGV) {
+    foreach (@ARGV) {
+        $CONFIGURED .= "\t" if ($CONFIGURED);
+        $CONFIGURED .= "'$_'";
+    }
+} elsif (-f 'reconfigure') {
+    ++$RECONFIGURE unless ($LOCAL_BUILD_OUT);
+}
+
+my %PKG = PKG();
+
+my $PACKAGE_NAME = PACKAGE_NAME();
+my $OUT_MAKEFILE = 'Makefile.config';
+my $INS_MAKEFILE = 'Makefile.config.install';
+
+my $PACKAGE = PACKAGE();
+
+my $HOME = $ENV{HOME} || $ENV{USERPROFILE}
+    || $ENV{LOGDIR} || getcwd || (getpwuid($<))[7] || abs_path('.');
+
+$PKG{UPATH} = expand($PKG{UPATH});
+
+my $package_default_prefix = $PKG{PATH};
+my $schema_default_dir = $PKG{SCHEMA_PATH} if ($PKG{SCHEMA_PATH});
+
+my @REQ = REQ();
+
+my @options = ( 'build-prefix=s',
+                'clean',
+                'debug',
+                'help',
+                'prefix=s',
+                'reconfigure',
+                'status',
+                'with-debug',
+                'without-debug', );
+{
+    my ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
+    push @options, 'arch=s'    if (@ARCHITECTURES);
+}
+push @options, 'source=s' if ($PKG{LNG} eq 'JAVA');
+push @options, 'enable-static' if (PACKAGE_TYPE() eq 'B');
+foreach my $href (@REQ) {
+    my %a = %$href;
+    push @options, "$a{option}=s"  if ($a {option});
+    push @options, "$a{boption}=s" if ($a{boption});
+    $href->{usrpath} = '' unless ($href->{usrpath});
+    $href->{usrpath} = expand($href->{usrpath});
+}
+push @options, "shemadir" if ($PKG{SCHEMA_PATH});
+
+my %OPT;
+die "configure: error" unless (GetOptions(\%OPT, @options));
+++$OPT{'reconfigure'} if ($RECONFIGURE);
+
+if ($OPT{'reconfigure'}) {
+    unless (eval 'use Getopt::Long qw(GetOptionsFromString); 1') {
+        print <<EndText;
+configure: error: your perl does not support Getopt::Long::GetOptionsFromString
+                  reconfigure option is not avaliable.
+Run "sh ./reconfigure" instead.
+EndText
+        exit 1;
+    }
+    println "reconfiguring...";
+    open F, 'reconfigure' or die 'cannot open reconfigure';
+    $_ = <F>;
+    chomp;
+    unless (m|^\./configure\s*(.*)$|) {
+        println 'configure: error: cannot reconfigure';
+        println 'run "./configure --clean" then run "./configure [OPTIONS]"';
+        exit 1;
+    }
+
+    my $ARG = $1;
+    println "running \"./configure $ARG\"...";
+    undef %OPT;
+    die "configure: error" unless (GetOptionsFromString($ARG, \%OPT, @options));
+    $CONFIGURED = $ARG if ($#ARGV == -1 && $RECONFIGURE);
+    ++$OPT{reconfigure};
+}
+
+$OPT{'local-build-out'} = $LOCAL_BUILD_OUT;
+my $OUTDIR = File::Spec->catdir($HOME, $PKG{OUT});
+if ($OPT{'local-build-out'}) {
+    my $o = expand_path(File::Spec->catdir($Bin, $PKG{LOCOUT}));
+    $OUTDIR = $o if ($o);
+}
+
+if ($OPT{'help'}) {
+    help();
+    exit 0;
+} elsif ($OPT{'clean'}) {
+    {
+        foreach ('reconfigure', glob(CONFIG_OUT() . '/Makefile.config*'),
+            File::Spec->catdir(CONFIG_OUT(), 'Makefile.userconfig'),
+            File::Spec->catdir(CONFIG_OUT(), 'user.status'))
+        {
+            my $f = $_;
+            print "removing $f... ";
+            if (-e $f) {
+                if (unlink $f) {
+                    println "ok";
+                } else {
+                    println "failed";
+                }
+            } else {
+                println "not found";
+            }
+        }
+    }
+    if (CONFIG_OUT() ne '.') {
+        foreach
+            (glob('Makefile.config*'), 'user.status', 'Makefile.userconfig')
+        {
+            my $f = $_;
+            print "removing $f... ";
+            if (-e $f) {
+                if (unlink $f) {
+                    println "ok";
+                } else {
+                    println "failed";
+                }
+            } else {
+                println "not found";
+            }
+        }
+    }
+    exit 0;
+} elsif ($OPT{'status'}) {
+    status(1);
+    exit 0;
+}
+
+foreach (@ARGV) {
+    @_ = split('=');
+    next if ($#_ != 1);
+    $OPT{$_[0]} = $_[1] if ($_[0] eq 'CXX' || $_[0] eq 'LDFLAGS');
+}
+
+println "Configuring $PACKAGE_NAME package";
+
+$OPT{'prefix'} = $package_default_prefix unless ($OPT{'prefix'});
+
+my $AUTORUN = $OPT{status};
+print "checking system type... " unless ($AUTORUN);
+my ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
+println $OSTYPE unless ($AUTORUN);
+
+unless ($OSTYPE =~ /linux/i || $OSTYPE =~ /darwin/i || $OSTYPE eq 'win') {
+    println "configure: error: unsupported system '$OSTYPE'";
+    exit 1;
+}
+
+my $OS_DISTRIBUTOR = '';
+if ($OS eq 'linux') {
+    print "checking OS distributor... " unless ($AUTORUN);
+    $OS_DISTRIBUTOR = `lsb_release -si 2> /dev/null`;
+    chomp $OS_DISTRIBUTOR;
+    println $OS_DISTRIBUTOR unless ($AUTORUN);
+}
+
+print "checking machine architecture... " unless ($AUTORUN);
+println $MARCH unless ($AUTORUN);
+unless ($MARCH =~ /x86_64/i || $MARCH =~ /i?86/i) {
+    println "configure: error: unsupported architecture '$OSTYPE'";
+    exit 1;
+}
+
+{
+    $OPT{'prefix'} = expand_path($OPT{'prefix'});
+    my $prefix = $OPT{'prefix'};
+    $OPT{'eprefix'} = $prefix unless ($OPT{'eprefix'} || $OS eq 'win');
+    my $eprefix = $OPT{'eprefix'};
+    unless ($OPT{'bindir'} || $OS eq 'win') {
+        $OPT{'bindir'} = File::Spec->catdir($eprefix, 'bin') ;
+    }
+    unless ($OPT{'libdir'} || $OS eq 'win') {
+        $OPT{'libdir'} = File::Spec->catdir($eprefix, 'lib');
+    }
+    unless ($OPT{'includedir'} || $OS eq 'win') {
+        $OPT{'includedir'} = File::Spec->catdir($eprefix, 'include');
+    }
+    if ($PKG{LNG} eq 'PYTHON' && ! $OPT{'pythondir'} && $OS ne 'win') {
+        $OPT{'pythondir'} = $eprefix;
+    }
+    if ($PKG{LNG} eq 'JAVA' && ! $OPT{'javadir'} && $OS ne 'win') {
+        $OPT{'javadir'} = File::Spec->catdir($eprefix, 'jar');
+    }
+    if ($PKG{EXAMP} && ! $OPT{'sharedir'} && $OS ne 'win') {
+        $OPT{'sharedir'} = File::Spec->catdir($eprefix, 'share');
+    }
+}
+
+# initial values
+my $TARGDIR = File::Spec->catdir($OUTDIR, $PACKAGE);
+if ($OPT{'build-prefix'}) {
+    $TARGDIR = $OPT{'build-prefix'} = expand_path($OPT{'build-prefix'});
+    unless ($TARGDIR =~ /$PACKAGE$/) {
+        $TARGDIR = File::Spec->catdir($TARGDIR, $PACKAGE);
+    }
+}
+my $BUILD_PREFIX = $TARGDIR;
+
+my $BUILD = 'rel';
+
+# parse command line
+$BUILD = 'dbg' if ($OPT{'with-debug'});
+$BUILD = 'rel' if ($OPT{'without-debug'});
+
+my $BUILD_TYPE = "release";
+$BUILD_TYPE = "debug" if ( $BUILD eq "dbg" );
+
+$OPT{arch} = $ARCH if (@ARCHITECTURES && ! $OPT{arch});
+
+if ($OPT{arch}) {
+    my $found;
+    foreach (@ARCHITECTURES) {
+        if ($_ eq $OPT{arch}) {
+            ++$found;
+            last;
+        }
+    }
+    if ($found) {
+        $ARCH = $MARCH = $OPT{arch};
+        while (1) {
+            open F, ">Makefile.config.$OS.arch" or last;
+            print F "$ARCH\n";
+            close F;
+            last;
+        }
+        println "build architecture: $ARCH" unless ($AUTORUN);
+    } else {
+        delete $OPT{arch};
+    }
+}
+
+$OUT_MAKEFILE = File::Spec->catdir(CONFIG_OUT(), "$OUT_MAKEFILE.$OS.$ARCH");
+$INS_MAKEFILE = File::Spec->catdir(CONFIG_OUT(), "$INS_MAKEFILE.$OS.$ARCH.prl");
+
+my $TOOLS = "";
+$TOOLS = "jdk" if ($PKG{LNG} eq 'JAVA');
+
+# determine architecture
+
+print "checking for supported architecture... " unless ($AUTORUN);
+
+my $BITS;
+
+if ($MARCH =~ /x86_64/i) {
+    $BITS = 64;
+} elsif ($MARCH eq 'fat86') {
+    $BITS = '32_64';
+} elsif ($MARCH =~ /i?86/i) {
+    $BITS = 32;
+} else {
+    die "unrecognized Architecture '$ARCH'";
+}
+println "$MARCH ($BITS bits) is supported" unless ($AUTORUN);
+
+# determine OS and related norms
+my ($LPFX, $OBJX, $LOBX, $LIBX, $SHLX, $EXEX, $OSINC);
+
+print "checking for supported OS... " unless ($AUTORUN);
+if ($OSTYPE =~ /linux/i) {
+    $LPFX = 'lib';
+    $OBJX = 'o';
+    $LOBX = 'pic.o';
+    $LIBX = 'a';
+    $SHLX = 'so';
+    $EXEX = '';
+    $OSINC = 'unix';
+    $TOOLS = 'gcc' unless ($TOOLS);
+} elsif ($OSTYPE =~ /darwin/i) {
+    $LPFX = 'lib';
+    $OBJX = 'o';
+    $LOBX = 'pic.o';
+    $LIBX = 'a';
+    $SHLX = 'dylib';
+    $EXEX = '';
+    $OSINC = 'unix';
+    $TOOLS = 'clang' unless ($TOOLS);
+} elsif ($OSTYPE eq 'win') {
+    $TOOLS = 'vc++';
+} else {
+    die "unrecognized OS '$OSTYPE'";
+}
+
+println "$OSTYPE ($OS) is supported" unless ($AUTORUN);
+
+# tool chain
+my ($CPP, $CC, $CP, $AR, $ARX, $ARLS, $LD, $LP, $MAKE_MANIFEST);
+my ($JAVAC, $JAVAH, $JAR);
+my ($ARCH_FL, $DBG, $OPT, $PIC, $INC, $MD, $LDFLAGS) = ('');
+
+print "checking for supported tool chain... " unless ($AUTORUN);
+
+$CPP     = $OPT{CXX    } if ($OPT{CXX    });
+$LDFLAGS = $OPT{LDFLAGS} if ($OPT{LDFLAGS});
+
+if ($TOOLS =~ /gcc$/) {
+    $CPP  = 'g++' unless ($CPP);
+    $CC   = "$TOOLS -c";
+    $CP   = "$CPP -c";
+    $AR   = 'ar rc';
+    $ARX  = 'ar x';
+    $ARLS = 'ar t';
+    $LD   = $TOOLS;
+    $LP   = $CPP;
+
+    $DBG = '-g -DDEBUG';
+    $OPT = '-O3';
+    $PIC = '-fPIC';
+    $INC = '-I';
+    $MD  = '-MD';
+} elsif ($TOOLS eq 'clang') {
+    $CPP  = 'clang++' unless ($CPP);
+    $CC   = 'clang -c';
+    my $versionMin = '-mmacosx-version-min=10.6';
+    $CP   = "$CPP -c $versionMin";
+    if ($BITS ne '32_64') {
+        $ARCH_FL = '-arch i386' if ($BITS == 32);
+        $OPT = '-O3';
+        $AR      = 'ar rc';
+        $LD      = "clang $ARCH_FL";
+        $LP      = "$CPP $versionMin $ARCH_FL";
+    } else {
+        $MAKE_MANIFEST = '( echo "$^" > $@/manifest )';
+        $ARCH_FL       = '-arch i386 -arch x86_64';
+        $OPT    = '-O3';
+        $AR     = 'libtool -static -o';
+        $LD     = "clang -Wl,-arch_multiple $ARCH_FL -Wl,-all_load";
+        $LP     = "$CPP $versionMin -Wl,-arch_multiple $ARCH_FL -Wl,-all_load";
+    }
+    $ARX  = 'ar x';
+    $ARLS = 'ar t';
+
+    $DBG = '-g -DDEBUG';
+    $PIC = '-fPIC';
+    $INC = '-I';
+    $MD  = '-MD';
+} elsif ($TOOLS eq 'jdk') {
+    $JAVAC = 'javac';
+    if ($OPT{source}) {
+        $JAVAC .= ' -target ' . $OPT{source} . ' -source ' . $OPT{source};
+    }
+    $JAVAH = 'javah';
+    $JAR   = 'jar cf';
+
+    $DBG = '-g';
+} elsif ($TOOLS eq 'vc++') {
+} else {
+    die "unrecognized tool chain '$TOOLS'";
+}
+println "$TOOLS tool chain is supported" unless ($AUTORUN);
+
+if ($OS ne 'win' && $PKG{LNG} ne 'JAVA') {
+    $TARGDIR = File::Spec->catdir($TARGDIR, $OS, $TOOLS, $ARCH, $BUILD);
+}
+
+if ($CPP) {
+    unless (check_tool__h($CPP)) {
+        println "configure: error: '$CPP' cannot be found";
+        exit 1;
+    }
+}
+
+if ($JAVAC) {
+    unless (check_tool_h($JAVAC)) {
+        println "configure: error: '$JAVAC' cannot be found";
+        exit 1;
+    }
+}
+
+my $NO_ARRAY_BOUNDS_WARNING = '';
+if ($TOOLS =~ /gcc$/ && check_no_array_bounds()) {
+    $NO_ARRAY_BOUNDS_WARNING = '-Wno-array-bounds';
+}
+
+my $STATIC_LIBSTDCPP = '';
+if ($TOOLS =~ /gcc$/) {
+    $STATIC_LIBSTDCPP = check_static_libstdcpp();
+}
+
+my @dependencies;
+
+my %DEPEND_OPTIONS;
+foreach my $href (DEPENDS()) {
+    $_ = $href->{name};
+    my ($I, $L) = ($href->{Include});
+    my $o = "with-$_-prefix";
+    ++$DEPEND_OPTIONS{$o};
+    if ($OPT{$o}) {
+        $OPT{$o} = expand_path($OPT{$o});
+        $I = File::Spec->catdir($OPT{$o}, 'include');
+        if (/^xml2$/) {
+            my $t = File::Spec->catdir($I, 'libxml2');
+            $I = $t if (-e $t);
+        }
+        $L = File::Spec->catdir($OPT{$o}, 'lib');
+    }
+    my ($i, $l) = find_lib($_, $I, $L);
+    if (defined $i || $l) {
+        my $d = 'HAVE_' . uc($_) . ' = 1';
+        push @dependencies, $d;
+        println "\t\t$d" if ($OPT{'debug'});
+    }
+    if ($i) {
+        my $d = uc($_) . "_INCDIR = $i";
+        push @dependencies, $d;
+        println "\t\t$d" if ($OPT{'debug'});
+    }
+    if ($l) {
+        my $d = uc($_) . "_LIBDIR = $l";
+        push @dependencies, $d;
+        println "\t\t$d" if ($OPT{'debug'});
+    }
+}
+
+foreach my $href (@REQ) {
+    $href->{   bldpath} = expand($href->{   bldpath}) if ($href->{   bldpath});
+    $href->{locbldpath} = expand($href->{locbldpath}) if ($href->{locbldpath});
+
+    # found directories
+    my
+      ($found_itf, $found_bin, $found_lib, $found_ilib, $found_jar, $found_src);
+
+    my %a = %$href;
+    next if ($a{option} && $DEPEND_OPTIONS{$a{option}});
+    my $is_optional = optional($a{type});
+    my $quasi_optional = $a{type} =~ /Q/;
+    my $need_source = $a{type} =~ /S/;
+    my $need_bin = $a{type} =~ /E/;
+    my $need_build = $a{type} =~ /B/;
+    my $need_lib = $a{type} =~ /L|D/;
+    my $need_itf = ! ($a{type} =~ /D/ || $a{type} =~ /E/ || $a{type} =~ /J/);
+    my $need_jar = $a{type} =~ /J/;
+
+    my ($bin, $inc, $lib, $ilib, $src)
+        = ($a{bin}, $a{include}, $a{lib}, undef, $a{src}); # file names to check
+    $lib = '' unless ($lib);
+    $lib = expand($lib);
+
+    if ($need_build) {
+        $ilib = $a{ilib};
+        ++$need_lib;
+    }
+    unless ($AUTORUN) {
+        if ($need_source && $need_build) {
+            println
+               "checking for $a{name} package source files and build results..."
+        } elsif ($need_source) {
+            println "checking for $a{name} package source files...";
+        } else {
+            println "checking for $a{name} package...";
+        }
+    }
+    my %has_option;
+    my $tolib = $need_itf || $need_lib;
+    my $tojar = $need_jar;
+    foreach my $option ($a{option}, $a{boption}) {
+        next unless ($option);
+        if ($OPT{$option}) {
+            my $try = expand_path($OPT{$option});
+            if ($tojar && ! $found_jar && -f $try) {
+                println "\tjar... $try" unless ($AUTORUN);
+                $found_jar = $try;
+            }
+            elsif ($tolib) {
+                my ($i, $l, $il) = ($inc, $lib, $ilib);
+                if ($option =~ /-build$/) {
+                    undef $i;
+                    ++$has_option{build};
+                } elsif ($option =~ /-prefix$/) {
+                    undef $il;
+                    ++$has_option{prefix};
+                } elsif ($option =~ /-sources$/) {
+                    undef $l;
+                    undef $il;
+                    ++$has_option{sources};
+                }
+                my ($fi, $fl, $fil, $fs)
+                    = find_in_dir($try, $i, $l, $il, undef, undef, $src);
+                if ($fi || $fl || $fil) {
+                    $found_itf  = $fi  if (! $found_itf  && $fi);
+                    $found_lib  = $fl  if (! $found_lib  && $fl);
+                    $found_ilib = $fil if (! $found_ilib && $fil);
+                    $found_src  = $fs  if (! $found_src  && $fs);
+                } elsif (! ($try =~ /$a{name}$/)) {
+                    $try = File::Spec->catdir($try, $a{name});
+                    ($fi, $fl, $fil) = find_in_dir($try, $i, $l, $il);
+                    $found_itf  = $fi  if (! $found_itf  && $fi);
+                    $found_lib  = $fl  if (! $found_lib  && $fl);
+                    $found_ilib = $fil if (! $found_ilib && $fil);
+                }
+            } elsif ($need_bin) {
+                my (undef, $fl, $fil)
+                    = find_in_dir($try, undef, $lib, $ilib, undef, $bin);
+                $found_bin = $fl if ($fl);
+            }
+        }
+    }
+    if (! $found_itf && ! $has_option{sources} && $a{srcpath}) {
+        my $try = $a{srcpath};
+        ($found_itf, undef, undef, $found_src)
+            = find_in_dir($try, $inc, undef, undef, undef, undef, $src);
+    }
+    if (! $has_option{prefix}) {
+        my $try = $a{pkgpath};
+        if (($need_itf && ! $found_itf) || ($need_lib && ! $found_lib)) {
+            my ($fi, $fl) = find_in_dir($try, $inc, $lib);
+            $found_itf  = $fi  if (! $found_itf  && $fi);
+            $found_lib  = $fl  if (! $found_lib  && $fl);
+        }
+
+        if ($need_jar && ! $found_jar) {
+            (undef, $found_jar) = find_in_dir($try, undef, undef, undef, $lib);
+        }
+
+        $try = $a{usrpath};
+        if (($need_itf && ! $found_itf) || ($need_lib && ! $found_lib)) {
+            my ($fi, $fl) = find_in_dir($try, $inc, $lib);
+            $found_itf  = $fi  if (! $found_itf  && $fi);
+            $found_lib  = $fl  if (! $found_lib  && $fl);
+        }
+
+        if ($need_jar && ! $found_jar) {
+            (undef, $found_jar) = find_in_dir($try, undef, undef, undef, $lib);
+        }
+    }
+    if (! $has_option{build}) {
+        if ($a{bldpath}) {
+            my $tolib = $need_build || ($need_lib && ! $found_lib);
+            my $tobin = $need_bin && ! $found_bin;
+            my $tojar = $need_jar && ! $found_jar;
+            if ($tolib || $tobin || $tojar) {
+                my ($fl, $fil, $found);
+                if ($OPT{'build-prefix'}) {
+                    my $try = $OPT{'build-prefix'};
+                    if ($tolib) {
+                        (undef, $fl, $fil)
+                            = find_in_dir($try, undef, $lib, $ilib);
+                        if ($fl || $fil) {
+                            $found_lib  = $fl  if (! $found_lib  && $fl);
+                            $found_ilib = $fil if (! $found_ilib && $fil);
+                            ++$found;
+                        }
+                    }
+                    if ($tojar) {
+                        (undef, $found_jar)
+                            = find_in_dir($try, undef, undef, undef, $lib);
+                    }
+                    if (! ($try =~ /$a{name}$/)) {
+                        $try = File::Spec->catdir($try, $a{name});
+                        if ($tolib && ! $found) {
+                            (undef, $fl, $fil)
+                                = find_in_dir($try, undef, $lib, $ilib);
+                            if ($fl || $fil) {
+                                $found_lib  = $fl  if (! $found_lib  && $fl);
+                                $found_ilib = $fil if (! $found_ilib && $fil);
+                                ++$found;
+                            }
+                        }
+                        if ($need_jar && ! $found_jar) {
+                            (undef, $found_jar)
+                                = find_in_dir($try, undef, undef, undef, $lib);
+                        }
+                    }
+                }
+                unless ($found || $fl || $fil) {
+                    my $try = $a{bldpath};
+                    $try = $a{locbldpath} if ($OPT{'local-build-out'});
+                    if ($tolib && ! $found) {
+                        (undef, $fl, $fil)
+                            = find_in_dir($try, undef, $lib, $ilib);
+                        my $resetLib = ! $found_lib;
+                        if (! $found_ilib && $fil) {
+                            $found_ilib = $fil;
+                            ++$resetLib;
+                        }
+                        $found_lib  = $fl  if ($resetLib && $fl);
+                    }
+                    if ($tobin && ! $found) {
+                        (undef, $fl, $fil) =
+                            find_in_dir($try, undef, $lib, $ilib, undef, $bin);
+                        $found_bin = $fl if ($fl);
+                    }
+                    if ($need_jar && ! $found_jar) {
+                        (undef, $found_jar)
+                            = find_in_dir($try, undef, undef, undef, $lib);
+                    }
+                }
+            }
+        }
+    }
+    if (($need_itf && ! $found_itf) || ($need_lib && ! $found_lib) ||
+        ($need_jar && ! $found_jar) || ($ilib && ! $found_ilib) ||
+        ($need_bin && ! $found_bin))
+    {
+        if ($is_optional) {
+            println "configure: optional $a{name} package not found: skipped.";
+        } elsif ($quasi_optional && $found_itf && ($need_lib && ! $found_lib)) {
+            println "configure: $a{name} package: "
+                . "found interface files but not libraries.";
+        } else {
+            if ($OPT{'debug'}) {
+                $_ = "$a{name}: includes: ";
+                $found_itf = '' unless $found_itf;
+                $_ .= $found_itf;
+                unless ($need_lib) {
+                    $_ .= "; libs: not needed";
+                } else {
+                    $found_lib = '' unless $found_lib;
+                    $_ .= "; libs: " . $found_lib;
+                }
+                unless ($ilib) {
+                    $_ .= "; ilibs: not needed";
+                } else {
+                    $found_ilib = '' unless $found_ilib;
+                    $_ .= "; ilibs: " . $found_ilib;
+                }
+                println "\t\t$_";
+            }
+            println "configure: error: required $a{name} package not found.";
+            exit 1;
+        }
+    } else {
+        if ($found_itf) {
+            $found_itf = abs_path($found_itf);
+            push(@dependencies, "$a{aname}_INCDIR = $found_itf");
+            println "includes: $found_itf";
+        }
+        if ($found_src) {
+            $found_src = abs_path($found_src);
+            push(@dependencies, "$a{aname}_SRCDIR = $found_src");
+            println "sources: $found_src";
+        }
+        if ($found_lib) {
+            $found_lib = abs_path($found_lib);
+            if ($a{aname} eq 'NGS' || $a{aname} eq 'VDB') {
+                if ($OPT{PYTHON_LIB_PATH}) {
+                    $OPT{PYTHON_LIB_PATH} .= ':';
+                } else {
+                    $OPT{PYTHON_LIB_PATH} = '';
+                }
+                $OPT{PYTHON_LIB_PATH} .= $found_lib;
+            }
+            push(@dependencies, "$a{aname}_LIBDIR = $found_lib");
+            println "libraries: $found_lib";
+        }
+        if ($ilib && $found_ilib) {
+            $found_ilib = abs_path($found_ilib);
+            push(@dependencies, "$a{aname}_ILIBDIR = $found_ilib");
+            println "ilibraries: $found_ilib";
+        }
+        if ($found_bin) {
+            $found_bin = abs_path($found_bin);
+            push(@dependencies, "$a{aname}_BINDIR = $found_bin");
+            println "bin: $found_bin";
+        }
+        if ($found_jar) {
+            $found_jar = abs_path($found_jar);
+            push(@dependencies, "$a{aname}_JAR = $found_jar");
+            println "jar: $found_jar";
+        }
+    }
+}
+
+my ($E_BINDIR, $E_LIBDIR, $E_VERSION_LIBX, $E_MAJVERS_LIBX,
+                          $E_VERSION_EXEX, $E_MAJVERS_EXEX)
+    = (''    , '');
+
+println unless ($AUTORUN);
+
+if ($OS ne 'win' && ! $OPT{'status'}) {
+    if ($OSTYPE =~ /darwin/i && CONFIG_OUT() ne '.') {
+        my $COMP = File::Spec->catdir(CONFIG_OUT(), 'COMP.mac');
+        println "configure: creating '$COMP' ($TOOLS)" unless ($AUTORUN);
+        open F, ">$COMP" or die "cannot open $COMP to write";
+        print F "$TOOLS\n";
+        close F;
+    }
+
+    if ($TOOLS =~ /gcc$/) {
+        my $EXECMDF = File::Spec->catdir(CONFIG_OUT(), 'ld.linux.exe_cmd.sh');
+        println "configure: creating '$EXECMDF'" unless ($AUTORUN);
+        open F, ">$EXECMDF" or die "cannot open $EXECMDF to write";
+        print F "EXE_CMD=\"\$LD $STATIC_LIBSTDCPP -static-libgcc\"\n";
+        close F;
+    }
+
+    # create Makefile.config
+    println "configure: creating '$OUT_MAKEFILE'" unless ($AUTORUN);
+    open my $F, ">$OUT_MAKEFILE" or die "cannot open $OUT_MAKEFILE to write";
+
+    print $F <<EndText;
+### AUTO-GENERATED FILE ###
+
+# configuration command
+
+CONFIGURED = $CONFIGURED
+
+OS_ARCH = \$(shell perl \$(TOP)/setup/os-arch.perl)
+
+# install paths
+EndText
+
+    L($F, "INST_BINDIR = $OPT{'bindir'}"      ) if ($OPT{'bindir'});
+    L($F, "INST_LIBDIR = $OPT{'libdir'}"      ) if ($OPT{'libdir'});
+    L($F, "INST_INCDIR = $OPT{'includedir'}"  ) if ($OPT{'includedir'});
+    L($F, "INST_SCHEMADIR = $OPT{'shemadir'}" ) if ($OPT{'shemadir'});
+    L($F, "INST_SHAREDIR = $OPT{'sharedir'}"  ) if ($OPT{'sharedir'});
+    L($F, "INST_JARDIR = $OPT{'javadir'}"     ) if ($OPT{'javadir'});
+    L($F, "INST_PYTHONDIR = $OPT{'pythondir'}") if ($OPT{'pythondir'});
+
+    my ($E_VERSION_SHLX, $VERSION_SHLX,
+        $E_MAJVERS_SHLX , $MAJMIN_SHLX, $MAJVERS_SHLX);
+    if ($OSTYPE =~ /darwin/i) {
+        $E_VERSION_SHLX =  '$VERSION.$SHLX';
+        $VERSION_SHLX = '$(VERSION).$(SHLX)';
+        $MAJMIN_SHLX  = '$(MAJMIN).$(SHLX)';
+        $E_MAJVERS_SHLX = '$MAJVERS.$SHLX';
+        $MAJVERS_SHLX = '$(MAJVERS).$(SHLX)';
+    } else {
+        $E_VERSION_SHLX =  '$SHLX.$VERSION';
+        $VERSION_SHLX = '$(SHLX).$(VERSION)';
+        $MAJMIN_SHLX  = '$(SHLX).$(MAJMIN)';
+        $E_MAJVERS_SHLX =  '$SHLX.$MAJVERS';
+        $MAJVERS_SHLX = '$(SHLX).$(MAJVERS)';
+    }
+
+    $E_VERSION_LIBX = '$LIBX.$VERSION';
+    $E_MAJVERS_LIBX = '$LIBX.$MAJVERS';
+
+    L($F);
+    L($F, "# build type");
+
+    if ($OPT{'enable-static'}) {
+        L($F, "WANTS_STATIC = 1");
+    }
+
+    $E_VERSION_EXEX = '$EXEX.$VERSION';
+    $E_MAJVERS_EXEX = '$LIBX.$MAJVERS';
+
+    print $F <<EndText;
+BUILD = $BUILD
+
+# target OS
+OS    = $OS
+OSINC = $OSINC
+OS_DISTRIBUTOR = $OS_DISTRIBUTOR
+
+# prefix string for system libraries
+LPFX = $LPFX
+
+# suffix strings for system libraries
+LIBX = $LIBX
+VERSION_LIBX = \$(LIBX).\$(VERSION)
+MAJMIN_LIBX  = \$(LIBX).\$(MAJMIN)
+MAJVERS_LIBX = \$(LIBX).\$(MAJVERS)
+
+SHLX         = $SHLX
+VERSION_SHLX = $VERSION_SHLX
+MAJMIN_SHLX  = $MAJMIN_SHLX
+MAJVERS_SHLX = $MAJVERS_SHLX
+
+# suffix strings for system object files
+OBJX = $OBJX
+LOBX = $LOBX
+
+# suffix string for system executable
+EXEX         = $EXEX
+VERSION_EXEX = \$(EXEX).\$(VERSION)
+MAJMIN_EXEX  = \$(EXEX).\$(MAJMIN)
+MAJVERS_EXEX = \$(EXEX).\$(MAJVERS)
+
+# system architecture and wordsize
+ARCH = $ARCH
+EndText
+
+    L($F, "# ARCH = $ARCH ( $MARCH )") if ($ARCH ne $MARCH);
+
+    print $F <<EndText;
+BITS = $BITS
+
+# tools
+EndText
+
+    L($F, "CC            = $CC"           ) if ($CC);
+    L($F, "CPP           = $CPP"          ) if ($CPP);
+    L($F, "CP            = $CP"           ) if ($CP);
+    L($F, "AR            = $AR"           ) if ($AR);
+    L($F, "ARX           = $ARX"          ) if ($ARX);
+    L($F, "ARLS          = $ARLS"         ) if ($ARLS);
+    L($F, "LD            = $LD"           ) if ($LD);
+    L($F, "LP            = $LP"           ) if ($LP);
+    L($F, "JAVAC         = $JAVAC"        ) if ($JAVAC);
+    L($F, "JAVAH         = $JAVAH"        ) if ($JAVAH);
+    L($F, "JAR           = $JAR"          ) if ($JAR);
+    L($F, "MAKE_MANIFEST = $MAKE_MANIFEST") if ($MAKE_MANIFEST);
+    L($F);
+
+    L($F, '# tool options');
+    if ($BUILD eq "dbg") {
+        L($F, "DBG     = $DBG");
+        L($F, "OPT     = ");
+    } else {
+        L($F, "DBG     = -DNDEBUG") if ($PKG{LNG} eq 'C');
+        L($F, "OPT     = $OPT"    ) if ($OPT);
+    }
+    L($F, "PIC     = $PIC") if ($PIC);
+    if ($PKG{LNG} eq 'C') {
+        if ($TOOLS =~ /clang/i) {
+   L($F, 'SONAME  = -install_name ' .
+               '$(INST_LIBDIR)$(BITS)/$(subst $(VERSION),$(MAJVERS),$(@F)) \\');
+   L($F, '    -compatibility_version $(MAJMIN) -current_version $(VERSION) \\');
+   L($F, '    -flat_namespace -undefined suppress');
+        } else {
+      L($F, 'SONAME = -Wl,-soname=$(subst $(VERSION),$(MAJVERS),$(@F))');
+     }
+     L($F, "SRCINC  = $INC. $INC\$(SRCDIR)");
+    } elsif ($PKG{LNG} eq 'JAVA') {
+        L($F, 'SRCINC  = -sourcepath $(INCPATHS)');
+    }
+    if ($PIC) {
+        if (PACKAGE_NAMW() eq 'NGS') {
+            L($F, "INCDIRS = \$(SRCINC) $INC\$(TOP) "
+                .        "$INC\$(TOP)/ngs/\$(OSINC)/\$(ARCH)")
+        } elsif (PACKAGE_NAMW() eq 'NGS_BAM') {
+            L($F, "INCDIRS = \$(SRCINC) $INC\$(TOP) "
+                . "$INC\$(NGS_INCDIR)/ngs/\$(OSINC)/\$(ARCH)")
+        } else {
+            L($F, "INCDIRS = \$(SRCINC) $INC\$(TOP)")
+        }
+    }
+    if ($PKG{LNG} eq 'C') {
+        L($F, "CFLAGS  = \$(DBG) \$(OPT) \$(INCDIRS) $MD $ARCH_FL");
+    }
+    L($F, "LDFLAGS = $LDFLAGS") if ($LDFLAGS);
+
+    L($F, 'CLSPATH = -classpath $(CLSDIR)');
+    L($F, "NO_ARRAY_BOUNDS_WARNING = $NO_ARRAY_BOUNDS_WARNING");
+    L($F);
+
+# $PACKAGE_NAME and library version
+# \$(VERSION) is defined in a separate file which is updated every release
+    L($F, "include \$(TOP)/" . CONFIG_OUT() . "/Makefile.vers" );
+
+    print $F <<EndText;
+
+empty :=
+space := \$(empty) \$(empty)
+MAJMIN  = \$(subst \$(space),.,\$(wordlist 1,2,\$(subst .,\$(space),\$(VERSION))))
+MAJVERS = \$(firstword \$(subst .,\$(space),\$(VERSION)))
+
+# output path
+BUILD_PREFIX = $BUILD_PREFIX
+TARGDIR = $TARGDIR
+
+# derived paths
+MODPATH  ?= \$(subst \$(TOP)/,,\$(CURDIR))
+SRCDIR   ?= \$(TOP)/\$(MODPATH)
+MAKEFILE ?= \$(abspath \$(firstword \$(MAKEFILE_LIST)))
+BINDIR    = \$(TARGDIR)/bin
+EndText
+
+    if ($PKG{LNG} eq 'C') {
+        $E_BINDIR        = '$TARGDIR/bin';
+        $E_LIBDIR        = '$TARGDIR/lib';
+        L($F, 'LIBDIR    = $(TARGDIR)/lib');
+    } elsif ($PKG{LNG} eq 'JAVA') {
+        $E_LIBDIR        = '$TARGDIR/jar';
+        L($F, 'LIBDIR    = $(TARGDIR)/jar');
+    }
+
+    L($F, 'ILIBDIR   = $(TARGDIR)/ilib');
+    if ($PKG{NOMODPATH}) {
+        L($F, 'OBJDIR    = $(TARGDIR)/obj');
+    } else {
+        L($F, 'OBJDIR    = $(TARGDIR)/obj/$(MODPATH)');
+    }
+    L($F, 'CLSDIR    = $(TARGDIR)/cls');
+
+    if ($PKG{LNG} eq 'JAVA') {
+        L($F,
+            "INCPATHS = \$(SRCDIR):\$(SRCDIR)/itf:\$(TOP)/gov/nih/nlm/ncbi/ngs")
+    }
+
+    print $F <<EndText;
+
+# exports
+export TOP
+export MODPATH
+export SRCDIR
+export MAKEFILE
+
+# auto-compilation rules
+EndText
+
+    if ($PKG{LNG} eq 'C') {
+        L($F, '$(OBJDIR)/%.$(OBJX): %.c');
+        T($F, '$(CC) -o $@ $< $(CFLAGS)');
+        L($F, '$(OBJDIR)/%.$(LOBX): %.c');
+        T($F, '$(CC) -o $@ $< $(PIC) $(CFLAGS)');
+    }
+    L($F, '$(OBJDIR)/%.$(OBJX): %.cpp');
+    T($F, '$(CP) -o $@ $< $(CFLAGS)');
+    L($F, '$(OBJDIR)/%.$(LOBX): %.cpp');
+    T($F, '$(CP) -o $@ $< $(PIC) $(CFLAGS)');
+    L($F);
+
+    # this is part of Makefile
+    L($F, 'VPATH = $(SRCDIR)');
+    L($F);
+
+    # we know how to find jni headers
+    if ($PKG{LNG} eq 'JAVA' and $OPT{'with-ngs-sdk-src'}) {
+        L($F, "JNIPATH = $OPT{'with-ngs-sdk-src'}/language/java");
+    }
+
+    L($F, '# directory rules');
+    if ($PKG{LNG} eq 'C') {
+        L($F, '$(BINDIR) $(LIBDIR) $(ILIBDIR) '
+            . '$(OBJDIR) $(INST_LIBDIR) $(INST_LIBDIR)$(BITS):');
+        T($F, 'mkdir -p $@');
+    } elsif ($PKG{LNG} eq 'JAVA') {
+        # test if we have jni header path
+        L($F, '$(LIBDIR) $(CLSDIR) $(INST_JARDIR):');
+        T($F, 'mkdir -p $@');
+    }
+    L($F);
+
+    L($F, '# not real targets');
+    L($F, '.PHONY: default clean install all std $(TARGETS)');
+    L($F);
+
+    L($F, '# dependencies');
+    if ($PKG{LNG} eq 'C') {
+        L($F, 'include $(wildcard $(OBJDIR)/*.d)');
+    } elsif ($PKG{LNG} eq 'JAVA') {
+        L($F, 'include $(wildcard $(CLSDIR)/*.d)');
+    }
+    L($F, $_) foreach (@dependencies);
+    L($F);
+
+    # pass HAVE_XML2 to build scripts
+    L($F, 'ifeq (,$(HAVE_XML2))');
+    L($F, '    HAVE_XML2=0');
+    L($F, 'endif');
+    L($F, 'CONFIGURE_FOUND_XML2=$(HAVE_XML2)');
+    L($F, 'export CONFIGURE_FOUND_XML2');
+    L($F);
+
+    if ($OS eq 'linux' || $OS eq 'mac') {
+        L($F, '# installation rules');
+        L($F,
+        '$(INST_LIBDIR)$(BITS)/%.$(VERSION_LIBX): $(LIBDIR)/%.$(VERSION_LIBX)');
+        T($F, '@ echo -n "installing \'$(@F)\'... "');
+        T($F, '@ if cp $^ $@ && chmod 644 $@;                         \\');
+        T($F, '  then                                                 \\');
+        T($F, '      rm -f $(patsubst %$(VERSION),%$(MAJVERS),$@) '
+                     . '$(patsubst %$(VERSION_LIBX),%$(LIBX),$@) '
+                     . '$(patsubst %.$(VERSION_LIBX),%-static.$(LIBX),$@); \\');
+        T($F, '      ln -s $(@F) $(patsubst %$(VERSION),%$(MAJVERS),$@);   \\');
+        T($F, '      ln -s $(patsubst %$(VERSION),%$(MAJVERS),$(@F)) '
+                      . '$(patsubst %$(VERSION_LIBX),%$(LIBX),$@); \\');
+        T($F, '      ln -s $(patsubst %$(VERSION_LIBX),%$(LIBX),$(@F)) ' .
+   '$(INST_LIBDIR)$(BITS)/$(patsubst %.$(VERSION_LIBX),%-static.$(LIBX),$(@F));'
+                                                              . ' \\');
+        T($F, '      echo success;                                    \\');
+        T($F, '  else                                                 \\');
+        T($F, '      echo failure;                                    \\');
+        T($F, '      false;                                           \\');
+        T($F, '  fi');
+        L($F);
+
+        L($F,
+        '$(INST_LIBDIR)$(BITS)/%.$(VERSION_SHLX): $(LIBDIR)/%.$(VERSION_SHLX)');
+        T($F, '@ echo -n "installing \'$(@F)\'... "');
+        T($F, '@ if cp $^ $@ && chmod 755 $@;                         \\');
+        T($F, '  then                                                 \\');
+        if ($OS ne 'mac') {
+          T($F, '      rm -f $(patsubst %$(VERSION),%$(MAJVERS),$@) '
+                      . '$(patsubst %$(VERSION_SHLX),%$(SHLX),$@);    \\');
+        }
+        if ($OS eq 'linux') {
+          T($F, '      ln -s $(@F) $(patsubst %$(VERSION),%$(MAJVERS),$@); \\');
+        } elsif ($OS eq 'mac') {
+          T($F, '      ln -sf $(@F) '
+                   . '$(patsubst %$(VERSION_SHLX),%$(MAJVERS).$(SHLX),$@); \\');
+        } else {
+          die;
+        }
+        T($F, '      ln -sf $(patsubst %$(VERSION),%$(MAJVERS),$(@F)) '
+                      . '$(patsubst %$(VERSION_SHLX),%$(SHLX),$@); \\');
+        T($F, '      echo success;                                    \\');
+        T($F, '  else                                                 \\');
+        T($F, '      echo failure;                                    \\');
+        T($F, '      false;                                           \\');
+        T($F, '  fi');
+        L($F);
+
+        L($F, '$(INST_BINDIR)/%$(VERSION_EXEX): $(BINDIR)/%$(VERSION_EXEX)');
+        T($F, '@ echo -n "installing \'$(@F)\'... "');
+        T($F, '@ if cp $^ $@ && chmod 755 $@;                         \\');
+        T($F, '  then                                                 \\');
+        T($F, '      rm -f $(patsubst %$(VERSION),%$(MAJVERS),$@) '
+                      . '$(patsubst %$(VERSION_EXEX),%$(EXEX),$@);     \\');
+        T($F, '      ln -s $(@F) $(patsubst %$(VERSION),%$(MAJVERS),$@);   \\');
+        T($F, '      ln -s $(patsubst %$(VERSION),%$(MAJVERS),$(@F)) '
+                      . '$(patsubst %$(VERSION_EXEX),%$(EXEX),$@); \\');
+        T($F, '      echo success;                                    \\');
+        T($F, '  else                                                 \\');
+        T($F, '      echo failure;                                    \\');
+        T($F, '      false;                                           \\');
+        T($F, '  fi');
+    }
+    close $F;
+
+	# creation of Makefile.config.install is disabled, since nobody uses it now 
+	# and I need to remove versions from prl scripts
+	if (0) {
+	    # create Makefile.config.install
+	    println "configure: creating '$INS_MAKEFILE'" unless ($AUTORUN);
+	    open $F, ">$INS_MAKEFILE" or die "cannot open $INS_MAKEFILE to write";
+	
+	    $OPT{'javadir' } = '' unless ($OPT{'javadir' });
+	    $OPT{'sharedir'} = '' unless ($OPT{'sharedir'});
+	
+	    print $F "sub CONFIGURE {\n";
+	    print $F "    \$_{PACKAGE_NAME } = '$PACKAGE_NAME';\n";
+	    print $F "    \$_{VERSION      } = '\$VERSION';\n";
+	    print $F "    \$_{LNG          } = '$PKG{LNG}';\n";
+	    print $F "    \$_{OS           } = '$OS';\n";
+	    print $F "    \$_{BITS         } =  $BITS;\n";
+	    print $F "    \$_{MAJVERS      } =  \$MAJVERS;\n";
+	    print $F "    \$_{LPFX         } = '$LPFX';\n";
+	    print $F "    \$_{LIBX         } = '$LIBX';\n";
+	    print $F "    \$_{MAJVERS_LIBX } = '" . expand($E_MAJVERS_LIBX) . "';\n";
+	    print $F "    \$_{VERSION_LIBX } = '" . expand($E_VERSION_LIBX) . "';\n";
+	    print $F "    \$_{SHLX         } = '$SHLX';\n";
+	    print $F "    \$_{MAJVERS_SHLX } = '" . expand($E_MAJVERS_SHLX) . "';\n";
+	    print $F "    \$_{VERSION_SHLX } = '" . expand($E_VERSION_SHLX) . "';\n";
+	    print $F "    \$_{VERSION_EXEX } = '" . expand($E_VERSION_EXEX) . "';\n";
+	    print $F "    \$_{MAJVERS_EXEX } = '" . expand($E_MAJVERS_EXEX) . "';\n";
+	    print $F "    \$_{INCDIR       } = '" . expand("$Bin/.."      ) . "';\n";
+	    if ($PKG{LNG} ne 'PYTHON') {
+	        print $F "  \$_{BINDIR$BITS} = '" . expand($E_BINDIR      ) . "';\n";
+	        print $F "  \$_{LIBDIR$BITS} = '" . expand($E_LIBDIR      ) . "';\n";
+	    } elsif ($OPT{PYTHON_LIB_PATH}) {
+	        print $F "  \$_{LIBDIR$BITS} = '$OPT{PYTHON_LIB_PATH}';\n";
+	    }
+	    print $F "    \$_{OTHER_PREFIX } = '$PKG{UPATH}';\n";
+	    print $F "    \$_{PREFIX       } = '$OPT{'prefix'}';\n";
+	    print $F "    \$_{INST_INCDIR  } = '$OPT{'includedir'}';\n";
+	    print $F "    \$_{INST_BINDIR  } = '$OPT{'bindir'}';\n";
+	    print $F "    \$_{INST_LIBDIR  } = '$OPT{'libdir'}';\n";
+	    print $F "    \$_{INST_JARDIR  } = '$OPT{'javadir'}';\n";
+	    print $F "    \$_{INST_SHAREDIR} = '$OPT{'sharedir'}';\n";
+	    print $F "\n";
+	    print $F "    \@_\n";
+	    print $F "}\n";
+	    print $F "\n";
+	    print $F "1\n";
+	
+	    close $F;
+    }
+}
+
+if (! $OPT{'status'} ) {
+    if ($OS eq 'win') {
+        my $OUT = File::Spec->catdir(CONFIG_OUT(), 'Makefile.config.win');
+        println "configure: creating '$OUT'";
+        open OUT, ">$OUT" or die "cannot open $OUT to write";
+        my $name = PACKAGE_NAMW();
+        my $outdir = $name . '_OUTDIR';
+        my $root = $name . '_ROOT';
+
+        print OUT <<EndText;
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <$outdir>$TARGDIR/\</$outdir>
+EndText
+        foreach my $href (@REQ) {
+            my %a = %$href;
+            my $NGS_SDK_PREFIX = '';
+            $NGS_SDK_PREFIX = $a{found_itf} if ($a{found_itf});
+            if ($a{name} eq 'ngs-sdk') {
+                my $root = "$a{aname}_ROOT";
+                print OUT "    <$root>$NGS_SDK_PREFIX\/</$root>\n";
+                last;
+            }
+        }
+        print OUT <<EndText;
+    <$root>$Bin/\</$root>
+  </PropertyGroup>
+</Project>
+EndText
+        close OUT;
+    } else {
+        println "configure: creating 'Makefile.config'" unless ($AUTORUN);
+        my $CONFIG_OUT = CONFIG_OUT();
+        my $out = File::Spec->catdir($CONFIG_OUT, 'Makefile.config');
+        open COUT, ">$out" or die "cannot open $out to write";
+        print COUT "### AUTO-GENERATED FILE ###\n";
+        print COUT "\n";
+        print COUT "OS_ARCH = \$(shell perl \$(TOP)/setup/os-arch.perl)\n";
+        print COUT "include \$(TOP)/$CONFIG_OUT/Makefile.config.\$(OS_ARCH)\n";
+        close COUT;
+    }
+}
+
+unless ($OPT{'reconfigure'}) {
+    println "configure: creating 'reconfigure'" unless ($AUTORUN);
+    $CONFIGURED =~ s/\t/ /g;
+    open my $F, '>reconfigure' or die 'cannot open reconfigure to write';
+    print $F "./configure $CONFIGURED\n";
+    close $F;
+   # my $perm = (stat $fh)[2] & 07777;
+#   print "==================================================== $perm\n";
+}
+
+status() if ($OS ne 'win');
+
+unlink 'a.out';
+
+sub L { $_[1] = '' unless ($_[1]); print { $_[0] }   "$_[1]\n" }
+sub T {                            print { $_[0] } "\t$_[1]\n" }
+
+sub status {
+    my ($load) = @_;
+    if ($load) {
+        ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
+        my $MAKEFILE
+            = File::Spec->catdir(CONFIG_OUT(), "$OUT_MAKEFILE.$OS.$ARCH");
+        println "\t\tloading $MAKEFILE" if ($OPT{'debug'});
+        unless (-e $MAKEFILE) {
+            print STDERR "configure: error: run ./configure [OPTIONS] first.\n";
+            exit 1;
+        }
+        open F, $MAKEFILE or die "cannot open $MAKEFILE";
+        foreach (<F>) {
+            chomp;
+            if (/BUILD = (.+)/) {
+                $BUILD_TYPE = $1;
+            } elsif (/BUILD \?= /) {
+                $BUILD_TYPE = $_ unless ($BUILD_TYPE);
+            } elsif (/BUILD_PREFIX = /) {
+                $BUILD_PREFIX = $_;
+            } elsif (/^CC += (.+)/) {
+                $CC = $1;
+            } elsif (/CONFIGURED = (.*)/) {
+                $CONFIGURED = $1;
+            } elsif (/CPP += (.+)/) {
+                $CPP = $1;
+            } elsif (/LDFLAGS += (.+)/) {
+                $LDFLAGS = $1;
+            } elsif (/TARGDIR = /) {
+                $TARGDIR = $_;
+                println "\t\tgot $_" if ($OPT{'debug'});
+            } elsif (/TARGDIR \?= (.+)/) {
+                $TARGDIR = $1 unless ($TARGDIR);
+                println "\t\tgot $_" if ($OPT{'debug'});
+            }
+            elsif (/INST_INCDIR = (.+)/) {
+                $OPT{'includedir'} = $1;
+            }
+            elsif (/INST_BINDIR = (.+)/) {
+                $OPT{'bindir'} = $1;
+            }
+            elsif (/INST_LIBDIR = (.+)/) {
+                $OPT{'libdir'} = $1;
+            }
+        }
+    }
+
+    println "build type: $BUILD_TYPE";
+    println "build prefix: $BUILD_PREFIX" if ($OS ne 'win');
+    println "build output path: $TARGDIR" if ($OS ne 'win');
+
+#   print "prefix: ";    print $OPT{'prefix'} if ($OS ne 'win');    println;
+#   print "eprefix: ";    print $OPT{'eprefix'} if ($OPT{'eprefix'});   println;
+
+    print "includedir: ";
+    print $OPT{'includedir'} if ($OPT{'includedir'});
+    println;
+
+    print "bindir: ";
+    print $OPT{'bindir'} if ($OPT{'bindir'});
+    println;
+
+    print "libdir: ";
+    print $OPT{'libdir'} if ($OPT{'libdir'});
+    println;
+
+    println "schemadir: $OPT{'shemadir'}" if ($OPT{'shemadir'});
+    println "sharedir: $OPT{'sharedir'}" if ($OPT{'sharedir'});
+    println "javadir: $OPT{'javadir'}" if ($OPT{'javadir'});
+    println "pythondir: $OPT{'pythondir'}" if ($OPT{'pythondir'});
+
+    println "CC = $CC"   if ($CC );
+    println "CPP = $CPP" if ($CPP);
+    println "LDFLAGS = $LDFLAGS" if ($LDFLAGS);
+
+    $CONFIGURED =~ s/\t/ /g;
+    println "configured with: \"$CONFIGURED\"";
+}
+
+sub expand { $_[0] =~ s/(\$\w+)/$1/eeg; $_[0]; }
+
+sub expand_path {
+    my ($filename) = @_;
+    return unless ($filename);
+
+    if ($filename =~ /^~/) {
+        if ($filename =~ m|^~([^/]*)|) {
+            if ($1 && ! getpwnam($1)) {
+                print "configure: error: bad path: '$filename'\n";
+                exit 1;
+            }
+        }
+
+        $filename =~ s{ ^ ~ ( [^/]* ) }
+                      { $1
+                            ? (getpwnam($1))[7]
+                            : ( $ENV{HOME} || $ENV{USERPROFILE} || $ENV{LOGDIR}
+                                || (getpwuid($<))[7]
+                              )
+                      }ex;
+    }
+
+    my $a = abs_path($filename);
+    $filename = $a if ($a);
+    $filename;
+}
+
+sub find_in_dir {
+    my ($dir, $include, $lib, $ilib, $jar, $bin, $src) = @_;
+    unless (-d $dir) {
+        println "\t\tnot found $dir" if ($OPT{'debug'});
+        return;
+    }
+    my ($found_inc, $found_lib, $found_ilib, $found_src);
+    if ($include) {
+        print "\tincludes... " unless ($AUTORUN);
+        if (-e "$dir/$include") {
+            println $dir unless ($AUTORUN);
+            $found_inc = $dir;
+        } elsif (-e "$dir/include/$include") {
+            println $dir unless ($AUTORUN);
+            $found_inc = "$dir/include";
+        } elsif (-e "$dir/interfaces/$include") {
+            println $dir unless ($AUTORUN);
+            $found_inc = "$dir/interfaces";
+        } else {
+            print "$dir: " if ($OPT{'debug'});
+            println 'no' unless ($AUTORUN);
+        }
+    }
+    if ($lib || $ilib) {
+        print "\tlibraries... " unless ($AUTORUN);
+        if ($lib) {
+            my $builddir = File::Spec->catdir($dir, $OS, $TOOLS, $ARCH, $BUILD);
+            my $libdir  = File::Spec->catdir($builddir, 'lib');
+            my $ilibdir = File::Spec->catdir($builddir, 'ilib');
+            my $f = File::Spec->catdir($libdir, $lib);
+            print "\n\t\tchecking $f\n\t" if ($OPT{'debug'});
+            my $found;
+            if (-e $f) {
+                $found_lib = $libdir;
+                if ($ilib) {
+                    my $f = File::Spec->catdir($ilibdir, $ilib);
+                    print "\tchecking $f\n\t" if ($OPT{'debug'});
+                    if (-e $f) {
+                        println $ilibdir;
+                        $found_ilib = $ilibdir;
+                    } else {
+                        println 'no' unless ($AUTORUN);
+                        return;
+                    }
+                } else {
+                    println $libdir;
+                }
+                ++$found;
+            }
+            if (! $found) {
+                my $libdir = File::Spec->catdir($dir, 'lib' . $BITS);
+                my $f = File::Spec->catdir($libdir, $lib);
+                print "\tchecking $f\n\t" if ($OPT{'debug'});
+                if (-e $f) {
+                    println $libdir;
+                    $found_lib = $libdir;
+                    ++$found;
+                }
+            }
+            if (! $found) {
+                my $builddir = File::Spec->catdir
+                    ($dir, $OS, $TOOLS, $ARCH, reverse_build($BUILD));
+                my $libdir  = File::Spec->catdir($builddir, 'lib');
+                my $ilibdir = File::Spec->catdir($builddir, 'ilib');
+                my $f = File::Spec->catdir($libdir, $lib);
+                print "\tchecking $f\n\t" if ($OPT{'debug'});
+                if (-e $f) {
+                    $found_lib = $libdir;
+                    if ($ilib) {
+                        my $f = File::Spec->catdir($ilibdir, $ilib);
+                        print "\tchecking $f\n\t" if ($OPT{'debug'});
+                        if (-e $f) {
+                            println $ilibdir;
+                            $found_ilib = $ilibdir;
+                        } else {
+                            println 'no' unless ($AUTORUN);
+                            return;
+                        }
+                    } else {
+                        println $libdir;
+                    }
+                    ++$found;
+                } else {
+                    println 'no' unless ($AUTORUN);
+                }
+            }
+        }
+        if ($found_lib && $ilib && ! $found_ilib) {
+            println "\n\t\tfound $found_lib but no ilib/" if ($OPT{'debug'});
+            print "\t" if ($OPT{'debug'});
+            println 'no' unless ($AUTORUN);
+            undef $found_lib;
+        }
+    }
+    if ($bin) {
+        print "\t... " unless ($AUTORUN);
+        my $builddir = File::Spec->catdir($dir, $OS, $TOOLS, $ARCH, $BUILD);
+        my $bdir  = File::Spec->catdir($builddir, 'bin');
+        my $f = File::Spec->catdir($bdir, $bin);
+        print "\n\t\tchecking $f\n\t" if ($OPT{'debug'});
+        if (-e $f) {
+            $found_lib = $bdir;
+            println $bdir;
+        } else {
+            println 'no' unless ($AUTORUN);
+        }
+    }
+    if ($jar) {
+        print "\tjar... " unless ($AUTORUN);
+        my $try = "$dir/jar/$jar";
+        if (-e "$try") {
+            println $try unless ($AUTORUN);
+            $found_lib = $try;
+        }
+    }
+    if ($src) {
+        print "\tsrc... " unless ($AUTORUN);
+        my $try = "$dir/$src";
+        if (-e "$try") {
+            println $dir unless ($AUTORUN);
+            $found_src = $dir;
+        }
+    }
+    return ($found_inc, $found_lib, $found_ilib, $found_src);
+}
+
+sub reverse_build {
+    ($_) = @_;
+    if ($_ eq 'rel') {
+        return 'dbg';
+    } elsif ($_ eq 'dbg') {
+        return 'rel';
+    } else {
+        die $_;
+    }
+}
+
+################################################################################
+
+sub check_tool_h  { return check_tool(@_,  '-help'); }
+sub check_tool__h { return check_tool(@_, '--help'); }
+
+sub check_tool {
+    my ($tool, $o) = @_;
+    print "checking for $tool... ";
+    my $cmd = "$tool $o";
+    print "\n\t\trunning $cmd\n\t" if ($OPT{'debug'});
+    my $out = `$cmd 2>&1`;
+    if ($? == 0) {
+        println "yes";
+        return 1;
+    } else {
+        println "no";
+        return 0;
+    }
+}
+
+sub check_no_array_bounds {
+    check_compiler('O', '-Wno-array-bounds');
+}
+
+sub check_static_libstdcpp {
+    my $option = '-static-libstdc++';
+    my $save = $TOOLS;
+    $TOOLS = $CPP;
+    $_ = check_compiler('O', $option);
+    $TOOLS = $save;
+    $_ ? $option : ''
+}
+
+sub find_lib {
+    check_compiler('L', @_);
+}
+
+sub check_compiler {
+    my ($t, $n, $i, $l) = @_;
+    my $tool = $TOOLS;
+
+    if ($t eq 'L') {
+        print "checking for $n library... ";
+    } elsif ($t eq 'O') {
+        if ($tool && ($tool =~ /gcc$/ || $tool =~ /g\+\+$/)) {
+            print "checking whether $tool accepts $n... ";
+        } else {
+            return;
+        }
+    } else {
+        die "Unknown check_compiler option: '$t'";
+    }
+
+    unless ($tool) {
+        println "warning: unknown tool";
+        return;
+    }
+
+    while (1) {
+        my ($flags, $library, $log) = ('', '');
+
+        if ($t eq 'O') {
+            $flags = $n;
+            $log = '                      int main() {                     }\n'
+        } elsif ($n eq 'hdf5') {
+            $library = '-lhdf5';
+            $log = '#include <hdf5.h>  \n int main() { H5close         (); }\n'
+        } elsif ($n eq 'fuse') {
+            $flags = '-D_FILE_OFFSET_BITS=64';
+            $library = '-lfuse';
+            $log = '#include <fuse.h>  \n int main() { fuse_get_context(); }\n'
+        } elsif ($n eq 'magic') {
+            $library = '-lmagic';
+            $log = '#include <magic.h> \n int main() { magic_open     (0); }\n'
+        } elsif ($n eq 'xml2') {
+            $library  = '-lxml2';
+            $library .=       ' -liconv' if ($OS eq 'mac');
+            $log = '#include <libxml/xmlreader.h>\n' .
+                                         'int main() { xmlInitParser  ( ); }\n'
+        } else {
+            println 'unknown: skipped';
+            return;
+        }
+
+        if ($i && ! -d $i) {
+            print "'$i': " if ($OPT{'debug'});
+            println 'no';
+            return;
+        }
+        if ($l && ! -d $l) {
+            print "'$l': " if ($OPT{'debug'});            println 'no';
+            return;
+        }
+
+        my $cmd = $log;
+        $cmd =~ s/\\n/\n/g;
+
+        my $gcc = "| $tool -xc $flags " . ($i ? "-I$i " : ' ')
+                                      . ($l ? "-L$l " : ' ') . "- $library";
+        $gcc .= ' 2> /dev/null' unless ($OPT{'debug'});
+
+        open GCC, $gcc or last;
+        print "\n\t\trunning echo -e '$log' $gcc\n" if ($OPT{'debug'});
+        print GCC "$cmd" or last;
+        my $ok = close GCC;
+        print "\t" if ($OPT{'debug'});
+        println $ok ? 'yes' : 'no';
+
+        unlink 'a.out';
+
+        return if (!$ok);
+
+        return 1 if ($t eq 'O');
+
+        return ($i, $l);
+    }
+
+    println "cannot run $tool: skipped";
+}
+
+################################################################################
+
+sub check {
+    die "No CONFIG_OUT"   unless CONFIG_OUT();
+    die "No PACKAGE"      unless PACKAGE();
+    die "No PACKAGE_NAME" unless PACKAGE_NAME();
+    die "No PACKAGE_NAMW" unless PACKAGE_NAMW();
+    die "No PACKAGE_TYPE" unless PACKAGE_TYPE();
+
+    my %PKG = PKG();
+
+    die "No LNG"    unless $PKG{LNG};
+    die "No LOCOUT" unless $PKG{LOCOUT};
+    die "No OUT"    unless $PKG{OUT};
+    die "No PATH"   unless $PKG{PATH};
+    die "No UPATH"  unless $PKG{UPATH};
+
+    foreach my $href (DEPENDS()) { die "No DEPENDS::name" unless $href->{name} }
+
+    foreach my $href (REQ()) {
+        die         "No REQ::name" unless $href->{name};
+
+        die         "No $href->{name}:option"  unless $href->{option}
+                                                   || $href->{boption};
+
+        die         "No $href->{name}:type"    unless $href->{type};
+        unless ($href->{type} =~ /I/) {
+          unless ($href->{type} =~ /E/) {
+            die     "No $href->{name}:lib"     unless $href->{lib};
+          }
+            die     "No $href->{name}:pkgpath" unless $href->{pkgpath};
+            die     "No $href->{name}:usrpath" unless $href->{usrpath};
+        }
+
+        die         "No $href->{name}:origin"  unless $href->{origin};
+        if ($href->{origin} eq 'I') {
+            die     "No $href->{name}:aname"   unless $href->{aname};
+            unless ($href->{type} =~ /D/ || $href->{type} =~ /E/
+                                         || $href->{type} =~ /J/)
+            {
+                die "No $href->{name}:include" unless $href->{include};
+                die "No $href->{name}:srcpath" unless $href->{srcpath};
+            }
+            unless ($href->{type} =~ /I/) {
+                die "No $href->{name}:bldpath"    unless $href->{bldpath   };
+                die "No $href->{name}:locbldpath" unless $href->{locbldpath};
+            }
+            if ($href->{type} =~ /B/) {
+                die "No $href->{name}:ilib"    unless $href->{ilib};
+            }
+        }
+    }
+}
+
+################################################################################
+
+sub optional { $_[0] =~ /O/ }
+
+sub help {
+#  --prefix=PREFIX         install architecture-independent files in PREFIX
+    print <<EndText;
+`configure' configures $PACKAGE_NAME to adapt to many kinds of systems.
+
+Usage: ./configure [OPTION]...
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+
+EndText
+
+    if ($^O ne 'MSWin32') {
+        print <<EndText;
+Installation directories:
+  --prefix=PREFIX         install all files in PREFIX
+                          [$package_default_prefix]
+
+EndText
+
+        my $other_prefix = $PKG{UPATH};
+        if ($PACKAGE eq 'sra-tools' && 0) {
+            print <<EndText;
+  --shemadir=DIR          install schema files in DIR
+                          [$schema_default_dir]
+
+EndText
+        }
+
+        print "By default, \`make install' will install all the files in\n";
+
+        if (PACKAGE_TYPE() eq 'B') {
+            print "\`$package_default_prefix/bin', ";
+        } elsif (PACKAGE_TYPE() eq 'L') {
+            print "\`$package_default_prefix/include', ";
+        }
+        if (PACKAGE_TYPE() eq 'P') {
+            println "\`$package_default_prefix/share' etc.";
+        } else {
+            println "\`$package_default_prefix/lib' etc.";
+        }
+
+        print <<EndText;
+You can specify an installation prefix other than \`$package_default_prefix'
+using \`--prefix', for instance \`--prefix=$other_prefix'.
+EndText
+    }
+
+    print <<EndText;
+
+For better control, use the options below.
+
+EndText
+
+    my ($required, $optional);
+    foreach my $href (@REQ) {
+        if (optional($href->{type})) {
+            ++$optional;
+        } else {
+            ++$required;
+        }
+    }
+
+    if ($required) {
+        print "Required Packages:\n";
+        foreach my $href (@REQ) {
+            next if (optional($href->{type}));
+            my %a = %$href;
+            if ($a{type} =~ /S/) {
+                println "  --$a{option}=DIR    search for $a{name} package";
+                println "                                 source files in DIR";
+            } else {
+                unless ($a{type} =~ /E/) {
+                  println
+                    "  --$a{option}=DIR      search for $a{name} package in DIR"
+                }
+            }
+            if ($a{boption}) {
+                println "  --$a{boption}=DIR      search for $a{name} package";
+                println "                                 build output in DIR";
+            }
+            println;
+        }
+    }
+
+    if ($optional) {
+        print "Optional Packages:\n";
+        foreach my $href (@REQ) {
+            next unless (optional($href->{type}));
+            my %a = %$href;
+            if ($a{option} =~ /-sources$/) {
+                println "  --$a{option}=DIR    search for $a{name} package";
+                println "                                source files in DIR";
+            } else {
+                println "  --$a{option}=DIR    search for $a{name} files in DIR"
+            }
+        }
+        println;
+    }
+
+    print <<EndText if (PACKAGE_TYPE() eq 'B');
+Optional Features:
+  --enable-static         build static executable [default=no]
+
+EndText
+
+    my ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
+
+    if ($^O ne 'MSWin32') {
+        print "Build tuning:\n";
+        if ($PKG{LNG} ne 'JAVA') {
+            print <<EndText;
+  --with-debug
+  --without-debug
+EndText
+        }
+
+        if (@ARCHITECTURES) {
+            print
+"  --arch=name             specify the name of the target architecture\n";
+        }
+
+        if ($PKG{LNG} eq 'JAVA') {
+            print <<EndText;
+  --source=release        provide source compatibility with specified release,
+                          generate class files for specified VM version.
+                          e.g. `--source=1.6'
+EndText
+        } else {
+            print "\n";
+        }
+
+        print <<EndText;
+  --build-prefix=DIR      generate build output into DIR directory
+                          [$OUTDIR]
+
+EndText
+    }
+
+    println 'Miscellaneous:';
+    println '  --reconfigure           rerun `configure\'';
+    println '                          using the same command-line arguments';
+    if ($^O ne 'MSWin32') {
+        println
+            '  --status                print current configuration information'
+    }
+    print <<EndText;
+  --clean                 remove all configuration results
+  --debug                 print lots of debugging information
+
+If `configure' was already run running `configure' without options
+will rerun `configure' using the same command-line arguments.
+
+Report bugs to sra-tools\@ncbi.nlm.nih.gov
+EndText
+}
+
+################################################################################
diff --git a/setup/os-arch.perl b/setup/os-arch.perl
new file mode 100644
index 0000000..5f3f87a
--- /dev/null
+++ b/setup/os-arch.perl
@@ -0,0 +1,22 @@
+use strict;
+
+use FindBin qw($Bin);
+require "$Bin/os-arch.prl";
+
+my ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
+
+my $res = "$OS.$ARCH";
+
+if (@ARCHITECTURES) {
+    my $name = "$Bin/../Makefile.config.$OS.arch";
+    if (-e $name) {
+        while (1) {
+            open F, $name or last;
+            $res = "$OS." . <F>;
+            chomp $res;
+            last;
+        }
+    }
+}
+
+print "$res\n";
diff --git a/setup/os-arch.prl b/setup/os-arch.prl
new file mode 100644
index 0000000..5daa75e
--- /dev/null
+++ b/setup/os-arch.prl
@@ -0,0 +1,106 @@
+sub OsArch {
+    my ($UNAME, $HOST_OS, $HOST_ARCH,
+        $MARCH, # machine hardware name returned by uname -m
+        @ARCHITECTURES);
+    if ($^O eq 'MSWin32') {
+        $UNAME = $HOST_OS = 'win';
+        $HOST_ARCH = $MARCH = 'x86_64';
+        @ARCHITECTURES = qw(x86_64 i386);
+    } else {
+        $UNAME = `uname -s`;
+        chomp $UNAME;
+        if ($UNAME =~ /Darwin/) {
+            $HOST_OS = 'mac';
+        } elsif ($UNAME =~ /Linux/) {
+            $HOST_OS = 'linux';
+        } elsif ($UNAME =~ /SunOS/) {
+            $HOST_OS = 'sun';
+            @ARCHITECTURES = qw(x86_64 i386);
+        } elsif ($UNAME =~ /xCYGWIN/) {
+            $HOST_OS = 'win';
+        } elsif ($UNAME =~ /xMINGW/) {
+            $HOST_OS = 'win';
+        } else {
+            $HOST_OS = $UNAME;
+        }
+        if ($HOST_OS eq 'mac') {
+            $MARCH = $HOST_ARCH = MacArch();
+            @ARCHITECTURES = qw(x86_64 i386 fat86) if ($MARCH eq 'x86_64');
+        } else {
+            $MARCH = `uname -m`;
+            chomp $MARCH;
+            if ($MARCH =~ /i386/) {
+                $HOST_ARCH = 'i386';
+            } elsif ($MARCH =~ /i486/) {
+                $HOST_ARCH = 'i386';
+            } elsif ($MARCH =~ /i586/) {
+                $HOST_ARCH = 'i386';
+            } elsif ($MARCH =~ /i686/) {
+                if ($UNAME =~ /WOW64/) { # 64-bit capable Cygwin.
+                     # Analyze the version of cl to set the correct architecture
+                    my $CL = `cl.exe 2>&1 > /dev/null`;
+                    if ($CL =~ /for x64/) {
+                        $HOST_ARCH = 'x86_64';
+                    } else {
+                        $HOST_ARCH = 'i386';
+                    }
+                } else {
+                    $HOST_ARCH = 'i386';
+                }
+            } elsif ($MARCH =~ /x86_64/) {
+                $HOST_ARCH = 'x86_64';
+            } elsif ($MARCH =~ /i86pc/) {
+                $HOST_ARCH = 'x86_64';
+                @ARCHITECTURES = qw(x86_64 i386);
+            } elsif ($MARCH =~ /sun4v/) {
+                $HOST_ARCH = 'sparc64';
+                @ARCHITECTURES = qw(sparc64 sparc32);
+            } else {
+                $HOST_ARCH = $MARCH;
+            }
+        }
+    }
+    ($HOST_OS, $HOST_ARCH, $UNAME, $MARCH, @ARCHITECTURES);
+}
+
+sub MacArch {
+    my $ARCH = `uname -m`;
+    chomp $ARCH;
+    if ($ARCH eq 'x86_64') {
+        return $ARCH;
+    } else {
+        my $SYSCTL = '/usr/sbin/sysctl';
+        $SYSCTL = '/sbin/sysctl' if (-x '/sbin/sysctl');
+
+        my $CAP64 = `$SYSCTL -n hw.cpu64bit_capable`;
+        chomp $CAP64;
+
+        my $PADDR_BITS = `$SYSCTL -n machdep.cpu.address_bits.physical`;
+        chomp $PADDR_BITS;
+
+        my $VADDR_BITS = `$SYSCTL -n machdep.cpu.address_bits.virtual`;
+        chomp $VADDR_BITS;
+        
+        if ($CAP64 != 0) {
+            if ($PADDR_BITS > 32 && $VADDR_BITS > 32) {
+                if ($ARCH eq 'i386' || $ARCH eq 'x86_64') {
+                    return 'x86_64';
+                } elsif ($ARCH eq 'Power Macintosh') {
+                    return 'ppc64';
+                } else {
+                    return 'unrecognized';
+                }
+            }
+        }
+
+        if ($ARCH eq 'i386') {
+            return 'i386';
+        } elsif ($ARCH eq 'Power Macintosh') {
+            return 'ppc32';
+        } else {
+            return 'unrecognized';
+        }
+    }
+}
+
+1
diff --git a/setup/package.prl b/setup/package.prl
new file mode 100644
index 0000000..9028eb0
--- /dev/null
+++ b/setup/package.prl
@@ -0,0 +1,66 @@
+################################################################################
+sub PACKAGE      { 'sra-tools' }
+sub PACKAGE_TYPE { 'B' }
+sub PACKAGE_NAME { 'SRA-TOOLS' }
+sub PACKAGE_NAMW { 'SRATOOLS' }
+sub CONFIG_OUT   { 'build' }
+sub PKG { ( LNG   => 'C',
+            OUT   => 'ncbi-outdir',
+            LOCOUT=> '../../OUTDIR',
+            PATH  => '/usr/local/ncbi/sra-tools',
+            UPATH =>      '$HOME/ncbi/sra-tools', ) }
+sub DEPENDS { ( { name => 'fuse' , Include => '/usr/include'        , },
+                { name => 'hdf5' , Include => '/usr/include'        , },
+                { name => 'magic', Include => '/usr/include'        , },
+                { name => 'xml2' , Include => '/usr/include/libxml2', } ) }
+sub REQ { (
+            { name    => 'ngs-sdk',
+              aname   => 'NGS',
+              option  => 'with-ngs-sdk-prefix',
+              origin  => 'I',
+              type    => 'L',
+              srcpath => '../ngs/ngs-sdk',
+              pkgpath => '/usr/local/ngs/ngs-sdk',
+              usrpath =>      '$HOME/ngs/ngs-sdk',
+              bldpath => '$HOME/ncbi-outdir/ngs-sdk',
+              locbldpath=>'$Bin/../../OUTDIR/ngs-sdk',
+              include => 'ngs/itf/Refcount.h',
+              lib     => 'libngs-c++.a',
+            },
+            { name    => 'ncbi-vdb',
+              aname   => 'VDB',
+              option  => 'with-ncbi-vdb-sources',
+              boption => 'with-ncbi-vdb-build',
+              origin  => 'I',
+              type    => 'SB',
+              srcpath => '../ncbi-vdb',
+              pkgpath => '/usr/local/ncbi/ncbi-vdb',
+              usrpath =>      '$HOME/ncbi/ncbi-vdb',
+              bldpath => '$HOME/ncbi-outdir/ncbi-vdb',
+              locbldpath=>'$Bin/../../OUTDIR/ncbi-vdb',
+              include => 'klib/rc.h',
+              src     => 'libs/kfg/default.kfg',
+              lib     => 'libncbi-vdb.a',
+              ilib    => 'libkapp.a',
+            },
+            { name    => 'fuse',
+              option  => 'with-fuse-prefix',
+              origin  => 'E',
+              type    => 'LIO',
+            },
+            { name    => 'hdf5',
+              option  => 'with-hdf5-prefix',
+              origin  => 'E',
+              type    => 'LIO',
+            },
+            { name    => 'magic',
+              option  => 'with-magic-prefix',
+              origin  => 'E',
+              type    => 'LIO',
+            },
+            { name    => 'xml2',
+              option  => 'with-xml2-prefix',
+              origin  => 'E',
+              type    => 'LIO',
+        } ) }
+1
diff --git a/setup/s/install b/setup/s/install
new file mode 100755
index 0000000..b1e201d
--- /dev/null
+++ b/setup/s/install
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+FILENAME="`basename $0`"
+CURDIR="`dirname $0`"
+
+if [ -z "$CURDIR" ]
+    then
+    echo error: install should be run as ./install
+    exit 1
+fi
+
+if [ "$FILENAME" != install -a ! -s setup/install.perl ]
+    then
+    echo error: install should be run as ./install
+else
+    perl -v > /dev/null 2>&1 || { echo "checking for perl... no"; \
+        echo >&2 "error: perl not found."; exit 1; }
+
+    cd $CURDIR/setup
+    perl -w ./install.perl "$@"
+fi
diff --git a/setup/s/os.prl b/setup/s/os.prl
new file mode 100644
index 0000000..5f75471
--- /dev/null
+++ b/setup/s/os.prl
@@ -0,0 +1,2 @@
+sub OS { 'linux' }
+1
diff --git a/shared/Makefile b/shared/Makefile
new file mode 100644
index 0000000..49a5ba7
--- /dev/null
+++ b/shared/Makefile
@@ -0,0 +1,85 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ..)
+
+MODULE = shared
+
+INT_LIBS = \
+	libtk-version \
+
+ALL_LIBS = \
+	$(INT_LIBS)
+
+ALL_TOOLS =      \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+	
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# toolkit-version
+#
+$(ILIBDIR)/libtk-version: $(addprefix $(ILIBDIR)/libtk-version.,$(ILIBEXT))
+
+TK_VERSION_SRC = \
+    toolkit.vers
+
+TK_VERSION_OBJ = \
+	$(addsuffix .$(LOBX),$(TK_VERSION_SRC))
+
+$(ILIBDIR)/libtk-version.$(LIBX): $(TK_VERSION_OBJ)
+	$(LD) --slib -o $@ $^ $(KFS_LIB)
+
+
diff --git a/shared/toolkit.vers b/shared/toolkit.vers
new file mode 100644
index 0000000..dbe5900
--- /dev/null
+++ b/shared/toolkit.vers
@@ -0,0 +1 @@
+2.8.1
diff --git a/shared/toolkit.vers.c b/shared/toolkit.vers.c
new file mode 100644
index 0000000..ee350fb
--- /dev/null
+++ b/shared/toolkit.vers.c
@@ -0,0 +1,8 @@
+#include "toolkit.vers.h"
+
+#include <kapp/main.h>
+
+ver_t CC KAppVersion()
+{
+    return TOOLKIT_VERS;
+}
diff --git a/shared/toolkit.vers.h b/shared/toolkit.vers.h
new file mode 100644
index 0000000..fd7da80
--- /dev/null
+++ b/shared/toolkit.vers.h
@@ -0,0 +1 @@
+#define TOOLKIT_VERS 0x02080001
diff --git a/src/main/java/htsjdk/samtools/AbstractBAMFileIndex.java b/src/main/java/htsjdk/samtools/AbstractBAMFileIndex.java
deleted file mode 100644
index 6bf28ef..0000000
--- a/src/main/java/htsjdk/samtools/AbstractBAMFileIndex.java
+++ /dev/null
@@ -1,721 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Provides basic, generic capabilities to be used reading BAM index files.  Users can
- * subclass this class to create new BAM index functionality for adding querying facilities,
- * changing caching behavior, etc.
- *
- * Of particular note: the AbstractBAMFileIndex is, by design, the only class aware of the
- * details of the BAM index file format (other than the four classes representing the data,
- * BAMIndexContent, Bin, Chunk, LinearIndex, and the classes for building the BAM index).
- * Anyone wanting to implement a reader for a differing
- * or extended BAM index format should implement BAMIndex directly.
- */
-public abstract class AbstractBAMFileIndex implements BAMIndex {
-
-    private final IndexFileBuffer mIndexBuffer;
-
-    private SAMSequenceDictionary mBamDictionary = null;
-    
-    final int [] sequenceIndexes;
-
-    protected AbstractBAMFileIndex(
-        final SeekableStream stream, final SAMSequenceDictionary dictionary)
-    {
-        mBamDictionary = dictionary;
-        mIndexBuffer = new IndexStreamBuffer(stream);
-
-        verifyBAMMagicNumber(stream.getSource());
-
-        sequenceIndexes = new int[readInteger() + 1];
-        Arrays.fill(sequenceIndexes, -1);
-    }
-
-    protected AbstractBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
-        this(file, dictionary, true);
-    }
-
-    protected AbstractBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
-        mBamDictionary = dictionary;
-        mIndexBuffer = (useMemoryMapping ? new MemoryMappedFileBuffer(file) : new RandomAccessFileBuffer(file));
-
-        verifyBAMMagicNumber(file.getName());
-
-        sequenceIndexes = new int[readInteger() + 1];
-        Arrays.fill(sequenceIndexes, -1);
-    }
-
-    /**
-     * Close this index and release any associated resources.
-     */
-    public void close() {
-        mIndexBuffer.close();
-    }
-
-    /**
-     * Get the number of levels employed by this index.
-     * @return Number of levels in this index.
-     */
-    public static int getNumIndexLevels() {
-        return GenomicIndexUtil.LEVEL_STARTS.length;
-    }
-
-    /**
-     * Gets the first bin in the given level.
-     * @param levelNumber Level number.  0-based.
-     * @return The first bin in this level.
-     */
-    public static int getFirstBinInLevel(final int levelNumber) {
-        return GenomicIndexUtil.LEVEL_STARTS[levelNumber];
-    }
-
-    /**
-     * Gets the number of bins in the given level.
-     * @param levelNumber Level number.  0-based.
-     * @return The size (number of possible bins) of the given level.
-     */
-    public int getLevelSize(final int levelNumber) {
-        if(levelNumber == getNumIndexLevels())
-            return GenomicIndexUtil.MAX_BINS+1-GenomicIndexUtil.LEVEL_STARTS[levelNumber];
-        else
-            return GenomicIndexUtil.LEVEL_STARTS[levelNumber+1]-GenomicIndexUtil.LEVEL_STARTS[levelNumber];
-    }
-
-    /**
-     * Gets the level associated with the given bin number.
-     * @param bin The bin  for which to determine the level.
-     * @return the level associated with the given bin number.
-     */
-    public int getLevelForBin(final Bin bin) {
-        if(bin.getBinNumber() >= GenomicIndexUtil.MAX_BINS)
-            throw new SAMException("Tried to get level for invalid bin.");
-        for(int i = getNumIndexLevels()-1; i >= 0; i--) {
-            if(bin.getBinNumber() >= GenomicIndexUtil.LEVEL_STARTS[i])
-                return i;
-        }
-        throw new SAMException("Unable to find correct bin for bin "+bin);
-    }
-
-    /**
-     * Gets the first locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return The last position that the given bin can represent.
-     */
-    public int getFirstLocusInBin(final Bin bin) {
-        final int level = getLevelForBin(bin);
-        final int levelStart = GenomicIndexUtil.LEVEL_STARTS[level];
-        final int levelSize = ((level==getNumIndexLevels()-1) ? GenomicIndexUtil.MAX_BINS-1 : GenomicIndexUtil.LEVEL_STARTS[level+1]) - levelStart;
-        return (bin.getBinNumber() - levelStart)*(GenomicIndexUtil.BIN_GENOMIC_SPAN /levelSize)+1;
-    }
-
-    /**
-     * Gets the last locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return The last position that the given bin can represent.
-     */
-    public int getLastLocusInBin(final Bin bin) {
-        final int level = getLevelForBin(bin);
-        final int levelStart = GenomicIndexUtil.LEVEL_STARTS[level];
-        final int levelSize = ((level==getNumIndexLevels()-1) ? GenomicIndexUtil.MAX_BINS-1 : GenomicIndexUtil.LEVEL_STARTS[level+1]) - levelStart;
-        return (bin.getBinNumber()-levelStart+1)*(GenomicIndexUtil.BIN_GENOMIC_SPAN /levelSize);
-    }
-
-    public int getNumberOfReferences() {
-        seek(4);
-        return readInteger();
-    }
-
-    /**
-     * Use to get close to the unmapped reads at the end of a BAM file.
-     * @return The file offset of the first record in the last linear bin, or -1
-     * if there are no elements in linear bins (i.e. no mapped reads).
-     */
-    public long getStartOfLastLinearBin() {
-        seek(4);
-
-        final int sequenceCount = readInteger();
-        // Because no reads may align to the last sequence in the sequence dictionary,
-        // grab the last element of the linear index for each sequence, and return
-        // the last one from the last sequence that has one.
-        long lastLinearIndexPointer = -1;
-        for (int i = 0; i < sequenceCount; i++) {
-            // System.out.println("# Sequence TID: " + i);
-            final int nBins = readInteger();
-            // System.out.println("# nBins: " + nBins);
-            for (int j1 = 0; j1 < nBins; j1++) {
-                // Skip bin #
-                skipBytes(4);
-                final int nChunks = readInteger();
-                // Skip chunks
-                skipBytes(16 * nChunks);
-            }
-            final int nLinearBins = readInteger();
-            if (nLinearBins > 0) {
-                // Skip to last element of list of linear bins
-                skipBytes(8 * (nLinearBins - 1));
-                lastLinearIndexPointer = readLong();
-            }
-        }
-
-        return lastLinearIndexPointer;
-    }
-
-    /**
-     * Return meta data for the given reference including information about number of aligned, unaligned, and noCoordinate records
-     *
-     * @param reference the reference of interest
-     * @return meta data for the reference
-     */
-    public BAMIndexMetaData getMetaData(final int reference) {
-        seek(4);
-
-        final List<Chunk> metaDataChunks = new ArrayList<Chunk>();
-
-        final int sequenceCount = readInteger();
-
-        if (reference >= sequenceCount) {
-            return null;
-        }
-
-        skipToSequence(reference);
-
-        final int binCount = readInteger();
-        for (int binNumber = 0; binNumber < binCount; binNumber++) {
-            final int indexBin = readInteger();
-            final int nChunks = readInteger();
-            if (indexBin == GenomicIndexUtil.MAX_BINS) {
-                for (int ci = 0; ci < nChunks; ci++) {
-                    final long chunkBegin = readLong();
-                    final long chunkEnd = readLong();
-                    metaDataChunks.add(new Chunk(chunkBegin, chunkEnd));
-                }
-            } else {
-                skipBytes(16 * nChunks);
-            }
-        }
-        return new BAMIndexMetaData(metaDataChunks);
-    }
-
-    /**
-     * Returns count of records unassociated with any reference. Call before the index file is closed
-     *
-     * @return meta data at the end of the bam index that indicates count of records holding no coordinates
-     * or null if no meta data (old index format)
-     */
-    public Long getNoCoordinateCount() {
-
-        seek(4);
-        final int sequenceCount = readInteger();
-
-        skipToSequence(sequenceCount);
-        try { // in case of old index file without meta data
-            return readLong();
-        } catch (final Exception e) {
-            return null;
-        }
-    }
-
-    protected BAMIndexContent query(final int referenceSequence, final int startPos, final int endPos) {
-        seek(4);
-
-        final List<Chunk> metaDataChunks = new ArrayList<Chunk>();
-
-        final int sequenceCount = readInteger();
-
-        if (referenceSequence >= sequenceCount) {
-            return null;
-        }
-
-        final BitSet regionBins = GenomicIndexUtil.regionToBins(startPos, endPos);
-        if (regionBins == null) {
-            return null;
-        }
-
-        skipToSequence(referenceSequence);
-
-        final int binCount = readInteger();
-        boolean metaDataSeen = false;
-        final Bin[] bins = new Bin[getMaxBinNumberForReference(referenceSequence) +1];
-        for (int binNumber = 0; binNumber < binCount; binNumber++) {
-            final int indexBin = readInteger();
-            final int nChunks = readInteger();
-            List<Chunk> chunks = null;
-            // System.out.println("# bin[" + i + "] = " + indexBin + ", nChunks = " + nChunks);
-            Chunk lastChunk = null;
-            if (regionBins.get(indexBin)) {
-            	chunks = new ArrayList<Chunk>(nChunks);
-                for (int ci = 0; ci < nChunks; ci++) {
-                    final long chunkBegin = readLong();
-                    final long chunkEnd = readLong();
-                    lastChunk = new Chunk(chunkBegin, chunkEnd);
-                    chunks.add(lastChunk);
-                }
-            } else if (indexBin == GenomicIndexUtil.MAX_BINS) {
-                // meta data - build the bin so that the count of bins is correct;
-                // but don't attach meta chunks to the bin, or normal queries will be off
-                for (int ci = 0; ci < nChunks; ci++) {
-                    final long chunkBegin = readLong();
-                    final long chunkEnd = readLong();
-                    lastChunk = new Chunk(chunkBegin, chunkEnd);
-                    metaDataChunks.add(lastChunk);
-                }
-                metaDataSeen = true;
-                continue; // don't create a Bin
-            } else {
-                skipBytes(16 * nChunks);
-                chunks = Collections.emptyList();
-            }
-            final Bin bin = new Bin(referenceSequence, indexBin);
-            bin.setChunkList(chunks);
-            bin.setLastChunk(lastChunk);
-            bins[indexBin] = bin;
-        }
-
-        final int nLinearBins = readInteger();
-
-        final int regionLinearBinStart = LinearIndex.convertToLinearIndexOffset(startPos);
-        final int regionLinearBinStop = endPos > 0 ? LinearIndex.convertToLinearIndexOffset(endPos) : nLinearBins-1;
-        final int actualStop = Math.min(regionLinearBinStop, nLinearBins -1);
-
-        long[] linearIndexEntries = new long[0];
-        if (regionLinearBinStart < nLinearBins) {
-            linearIndexEntries = new long[actualStop-regionLinearBinStart+1];
-            skipBytes(8 * regionLinearBinStart);
-            for(int linearBin = regionLinearBinStart; linearBin <= actualStop; linearBin++)
-                linearIndexEntries[linearBin-regionLinearBinStart] = readLong();
-        }
-
-        final LinearIndex linearIndex = new LinearIndex(referenceSequence,regionLinearBinStart,linearIndexEntries);
-
-        return new BAMIndexContent(referenceSequence, bins, binCount - (metaDataSeen? 1 : 0), new BAMIndexMetaData(metaDataChunks), linearIndex);
-    }
-
-    /**
-     * The maximum possible bin number for this reference sequence.
-     * This is based on the maximum coordinate position of the reference
-     * which is based on the size of the reference
-     */
-    private int getMaxBinNumberForReference(final int reference) {
-        try {
-            final int sequenceLength = mBamDictionary.getSequence(reference).getSequenceLength();
-            return getMaxBinNumberForSequenceLength(sequenceLength);
-        } catch (final Exception e) {
-            return GenomicIndexUtil.MAX_BINS;
-        }
-    }
-
-    /**
-     * The maxiumum bin number for a reference sequence of a given length
-     */
-    static int getMaxBinNumberForSequenceLength(final int sequenceLength) {
-        return getFirstBinInLevel(getNumIndexLevels() - 1) + (sequenceLength >> 14);
-        // return 4680 + (sequenceLength >> 14); // note 4680 = getFirstBinInLevel(getNumIndexLevels() - 1)
-    }
-
-    abstract protected BAMIndexContent getQueryResults(int reference);
-
-    /**
-     * Gets the possible number of bins for a given reference sequence.
-     * @return How many bins could possibly be used according to this indexing scheme to index a single contig.
-     */
-    protected int getMaxAddressibleGenomicLocation() {
-        return GenomicIndexUtil.BIN_GENOMIC_SPAN;
-    }
-
-    /**
-     * Get candidate bins for the specified region
-     * @param startPos 1-based start of target region, inclusive.
-     * @param endPos 1-based end of target region, inclusive.
-     * @return bit set for each bin that may contain SAMRecords in the target region.
-     */
-    protected BitSet regionToBins(final int startPos, final int endPos) {
-        final int maxPos = 0x1FFFFFFF;
-        final int start = (startPos <= 0) ? 0 : (startPos-1) & maxPos;
-        final int end = (endPos <= 0) ? maxPos : (endPos-1) & maxPos;
-        if (start > end) {
-            return null;
-        }
-        int k;
-        final BitSet bitSet = new BitSet(GenomicIndexUtil.MAX_BINS);
-        bitSet.set(0);
-        for (k =    1 + (start>>26); k <=    1 + (end>>26); ++k) bitSet.set(k);
-        for (k =    9 + (start>>23); k <=    9 + (end>>23); ++k) bitSet.set(k);
-        for (k =   73 + (start>>20); k <=   73 + (end>>20); ++k) bitSet.set(k);
-        for (k =  585 + (start>>17); k <=  585 + (end>>17); ++k) bitSet.set(k);
-        for (k = 4681 + (start>>14); k <= 4681 + (end>>14); ++k) bitSet.set(k);
-        return bitSet;
-    }
-
-    /**
-     * @deprecated Invoke {@link Chunk#optimizeChunkList} directly.
-     */
-    @Deprecated
-    protected List<Chunk> optimizeChunkList(final List<Chunk> chunks, final long minimumOffset) {
-        return Chunk.optimizeChunkList(chunks, minimumOffset);
-    }
-
-    private void verifyBAMMagicNumber(final String sourceName) {
-        // Verify the magic number.
-        seek(0);
-        final byte[] buffer = new byte[4];
-        readBytes(buffer);
-        if (!Arrays.equals(buffer, BAMFileConstants.BAM_INDEX_MAGIC)) {
-            throw new RuntimeIOException("Invalid file header in BAM index " + sourceName +
-                    ": " + new String(buffer));
-        }
-    }
-
-    private void skipToSequence(final int sequenceIndex) {
-    	//Use sequence position cache if available
-    	if(sequenceIndexes[sequenceIndex] != -1){
-    		seek(sequenceIndexes[sequenceIndex]);
-    		return;
-    	}
-    	
-        for (int i = 0; i < sequenceIndex; i++) {
-            // System.out.println("# Sequence TID: " + i);
-            final int nBins = readInteger();
-            // System.out.println("# nBins: " + nBins);
-            for (int j = 0; j < nBins; j++) {
-                readInteger(); // bin
-                final int nChunks = readInteger();
-                // System.out.println("# bin[" + j + "] = " + bin + ", nChunks = " + nChunks);
-                skipBytes(16 * nChunks);
-            }
-            final int nLinearBins = readInteger();
-            // System.out.println("# nLinearBins: " + nLinearBins);
-            skipBytes(8 * nLinearBins);
-        }
-        
-        //Update sequence position cache
-        sequenceIndexes[sequenceIndex] = position();
-    }
-
-    private void readBytes(final byte[] bytes) {
-        mIndexBuffer.readBytes(bytes);
-    }
-
-    private int readInteger() {
-        return mIndexBuffer.readInteger();
-    }
-
-    private long readLong() {
-        return mIndexBuffer.readLong();
-    }
-
-    private void skipBytes(final int count) {
-        mIndexBuffer.skipBytes(count);
-    }
-
-    private void seek(final int position) {
-        mIndexBuffer.seek(position);
-    }
-    
-    private int position(){
-    	return mIndexBuffer.position();
-    }
-
-    private abstract static class IndexFileBuffer {
-        abstract void readBytes(final byte[] bytes);
-        abstract int readInteger();
-        abstract long readLong();
-        abstract void skipBytes(final int count);
-        abstract void seek(final int position);
-        abstract int position();
-        abstract void close();
-    }
-
-    /**
-     * Traditional implementation of BAM index file access using memory mapped files.
-     */
-    private static class MemoryMappedFileBuffer extends IndexFileBuffer {
-        private MappedByteBuffer mFileBuffer;
-
-        MemoryMappedFileBuffer(final File file) {
-            try {
-                // Open the file stream.
-                final FileInputStream fileStream = new FileInputStream(file);
-                final FileChannel fileChannel = fileStream.getChannel();
-                mFileBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0L, fileChannel.size());
-                mFileBuffer.order(ByteOrder.LITTLE_ENDIAN);
-                fileChannel.close();
-                fileStream.close();
-            } catch (final IOException exc) {
-                throw new RuntimeIOException(exc.getMessage(), exc);
-            }
-        }
-
-        @Override
-        void readBytes(final byte[] bytes) {
-            mFileBuffer.get(bytes);
-        }
-
-        @Override
-        int readInteger() {
-            return mFileBuffer.getInt();
-        }
-
-        @Override
-        long readLong() {
-            return mFileBuffer.getLong();
-        }
-
-        @Override
-        void skipBytes(final int count) {
-            mFileBuffer.position(mFileBuffer.position() + count);
-        }
-
-        @Override
-        void seek(final int position) {
-            mFileBuffer.position(position);
-        }
-        
-        @Override
-		int position() {
-			return mFileBuffer.position();
-		}
-
-        @Override
-        void close() {
-            mFileBuffer = null;
-        }
-    }
-
-    /**
-     * Alternative implementation of BAM index file access using regular I/O instead of memory mapping.
-     * 
-     * This implementation can be more scalable for certain applications that need to access large numbers of BAM files.
-     * Java provides no way to explicitly release a memory mapping.  Instead, you need to wait for the garbage collector
-     * to finalize the MappedByteBuffer.  Because of this, when accessing many BAM files or when querying many BAM files
-     * sequentially, you cannot easily control the physical memory footprint of the java process.
-     * This can limit scalability and can have bad interactions with load management software like LSF, forcing you
-     * to reserve enough physical memory for a worst case scenario.
-     * The use of regular I/O allows you to trade somewhat slower performance for a small, fixed memory footprint
-     * if that is more suitable for your application.
-     */
-    private static class RandomAccessFileBuffer extends IndexFileBuffer {
-        private static final int PAGE_SIZE = 4 * 1024;
-        private static final int PAGE_OFFSET_MASK = PAGE_SIZE-1;
-        private static final int PAGE_MASK = ~PAGE_OFFSET_MASK;
-        private static final int INVALID_PAGE = 1;
-        private final File mFile;
-        private RandomAccessFile mRandomAccessFile;
-        private final int mFileLength;
-        private int mFilePointer = 0;
-        private int mCurrentPage = INVALID_PAGE;
-        private final byte[] mBuffer = new byte[PAGE_SIZE];
-
-        RandomAccessFileBuffer(final File file) {
-            mFile = file;
-            try {
-                mRandomAccessFile = new RandomAccessFile(file, "r");
-                final long fileLength = mRandomAccessFile.length();
-                if (fileLength > Integer.MAX_VALUE) {
-                    throw new RuntimeIOException("BAM index file " + mFile + " is too large: " + fileLength);
-                }
-                mFileLength = (int) fileLength;
-            } catch (final IOException exc) {
-                throw new RuntimeIOException(exc.getMessage(), exc);
-            }
-        }
-
-        @Override
-        void readBytes(final byte[] bytes) {
-            int resultOffset = 0;
-            int resultLength = bytes.length;
-            if (mFilePointer + resultLength > mFileLength) {
-                throw new RuntimeIOException("Attempt to read past end of BAM index file (file is truncated?): " + mFile);
-            }
-            while (resultLength > 0) {
-                loadPage(mFilePointer);
-                final int pageOffset = mFilePointer & PAGE_OFFSET_MASK;
-                final int copyLength = Math.min(resultLength, PAGE_SIZE - pageOffset);
-                System.arraycopy(mBuffer, pageOffset, bytes, resultOffset, copyLength);
-                mFilePointer += copyLength;
-                resultOffset += copyLength;
-                resultLength -= copyLength;
-            }
-        }
-
-        @Override
-        int readInteger() {
-            // This takes advantage of the fact that integers in BAM index files are always 4-byte aligned.
-            loadPage(mFilePointer);
-            final int pageOffset = mFilePointer & PAGE_OFFSET_MASK;
-            mFilePointer += 4;
-            return((mBuffer[pageOffset + 0] & 0xFF) |
-                   ((mBuffer[pageOffset + 1] & 0xFF) << 8) | 
-                   ((mBuffer[pageOffset + 2] & 0xFF) << 16) |
-                   ((mBuffer[pageOffset + 3] & 0xFF) << 24));
-        }
-
-        @Override
-        long readLong() {
-            // BAM index files are always 4-byte aligned, but not necessrily 8-byte aligned.
-            // So, rather than fooling with complex page logic we simply read the long in two 4-byte chunks.
-            final long lower = readInteger();
-            final long upper = readInteger();
-            return ((upper << 32) | (lower & 0xFFFFFFFFL));
-        }
-
-        @Override
-        void skipBytes(final int count) {
-            mFilePointer += count;
-        }
-        
-        @Override
-        void seek(final int position) {
-            mFilePointer = position;
-        }
-        
-        @Override
-		int position() {
-			return mFilePointer;
-		}
-
-        @Override
-        void close() {
-            mFilePointer = 0;
-            mCurrentPage = INVALID_PAGE;
-            if (mRandomAccessFile != null) {
-                try {
-                    mRandomAccessFile.close();
-                } catch (final IOException exc) {
-                    throw new RuntimeIOException(exc.getMessage(), exc);
-                }
-                mRandomAccessFile = null;
-            }
-        }
-
-        private void loadPage(final int filePosition) {
-            final int page = filePosition & PAGE_MASK;
-            if (page == mCurrentPage) {
-                return;
-            }
-            try {
-                mRandomAccessFile.seek(page);
-                final int readLength = Math.min(mFileLength - page, PAGE_SIZE);
-                mRandomAccessFile.readFully(mBuffer, 0, readLength);
-                mCurrentPage = page;
-            } catch (final IOException exc) {
-                throw new RuntimeIOException("Exception reading BAM index file " + mFile + ": " + exc.getMessage(), exc);
-            }
-        }
-    }
-
-    static class IndexStreamBuffer extends IndexFileBuffer {
-        private final SeekableStream in;
-        private final ByteBuffer tmpBuf;
-
-        /** Continually reads from the provided {@link SeekableStream} into the buffer until the specified number of bytes are read, or
-         * until the stream is exhausted, throwing a {@link RuntimeIOException}. */
-        private static void readFully(final SeekableStream in, final byte[] buffer, final int offset, final int length) {
-            int read = 0;
-            while (read < length) {
-                final int readThisLoop;
-                try {
-                    readThisLoop = in.read(buffer, read, length - read);
-                } catch (final IOException e) {
-                    throw new RuntimeIOException(e);
-                }
-                if (readThisLoop == -1) break;
-                read += readThisLoop;
-            }
-            if (read != length) throw new RuntimeIOException("Expected to read " + length + " bytes, but expired stream after " + read + ".");
-        }
-
-        public IndexStreamBuffer(final SeekableStream s) {
-            in = s;
-            tmpBuf = ByteBuffer.allocate(8); // Enough to fit a long.
-            tmpBuf.order(ByteOrder.LITTLE_ENDIAN);
-        }
-
-        @Override
-        public void close() {
-            try { in.close(); }
-            catch (final IOException e) { throw new RuntimeIOException(e); }
-        }
-        
-        @Override
-        public void readBytes(final byte[] bytes) {
-            readFully(in, bytes, 0, bytes.length);
-        }
-        
-        @Override
-        public void seek(final int position) {
-            try { in.seek(position); }
-            catch (final IOException e) { throw new RuntimeIOException(e); }
-        }
-
-        @Override
-        public int readInteger() {
-            readFully(in, tmpBuf.array(), 0, 4);
-            return tmpBuf.getInt(0);
-        }
-        
-        @Override
-        public long readLong() {
-            readFully(in, tmpBuf.array(), 0, 8);
-            return tmpBuf.getLong(0);
-        }
-        
-        @Override
-        public void skipBytes(final int count) {
-            try {
-                for (int s = count; s > 0;) {
-                    final int skipped = (int)in.skip(s);
-                    if (skipped <= 0)
-                        throw new RuntimeIOException("Failed to skip " + s);
-                    s -= skipped;
-                }
-            } catch (final IOException e) { throw new RuntimeIOException(e); }
-        }
-        
-        @Override
-        public int position() {
-			try {
-				return (int) in.position();
-			} catch (final IOException e) { throw new RuntimeIOException(e); }
-		}
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/AbstractSAMHeaderRecord.java b/src/main/java/htsjdk/samtools/AbstractSAMHeaderRecord.java
deleted file mode 100644
index 769a7a7..0000000
--- a/src/main/java/htsjdk/samtools/AbstractSAMHeaderRecord.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.annotation.XmlTransient;
-
-/**
- * Base class for the various concrete records in a SAM header, providing uniform
- * access to the attributes.
- */
- at XmlTransient /* don't consider this class for XML-serialization */
-public abstract class AbstractSAMHeaderRecord implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    private final Map<String,String> mAttributes = new LinkedHashMap<String, String>();
-
-    public String getAttribute(final String key) {
-        return mAttributes.get(key);
-    }
-
-    /**
-     * Set the given value for the attribute named 'key'.  Replaces an existing value, if any.
-     * If value is null, the attribute is removed.
-     * Otherwise, the value will be converted to a String with toString.
-     * @param key attribute name
-     * @param value attribute value
-     * @deprecated Use {@link #setAttribute(String, String) instead
-     */
-    @Deprecated
-    public void setAttribute(final String key, final Object value) {
-        setAttribute(key, value == null? null: value.toString());
-    }
-
-    /**
-     * Set the given value for the attribute named 'key'.  Replaces an existing value, if any.
-     * If value is null, the attribute is removed.
-     * Supported types are Character, Integer, Float and String.  Byte and Short may also be
-     * passed in but they will be converted to Integer.
-     * @param key attribute name
-     * @param value attribute value
-     */
-    public void setAttribute(final String key, final String value) {
-        if (value == null) {
-            mAttributes.remove(key);
-        } else {
-            mAttributes.put(key, value);
-        }
-    }
-    /**
-     * Returns the Set of attributes.
-     */
-    public Set<Map.Entry<String,String>> getAttributes() {
-        return mAttributes.entrySet();
-    }
-
-
-    /**
-     * Returns the ID tag (or equivalent) for this header record. The
-     * default implementation throws a SAMException to indicate "not implemented".
-     */
-    public String getId() {
-        throw new UnsupportedOperationException("Method not implemented for: " + this.getClass());
-    }
-
-    /**
-     * For use in the equals() method of the concrete class.
-     */
-    protected boolean attributesEqual(final AbstractSAMHeaderRecord that) {
-        return mAttributes.equals(that.mAttributes);
-    }
-
-    /**
-     * For use in the hashCode() method of the concrete class.
-     */
-    protected int attributesHashCode() {
-        return (mAttributes != null ? mAttributes.hashCode() : 0);
-    }
-
-    /**
-     * Standard tags are the tags defined in SAM spec.  These do not have type information in the test
-     * representation, because the type information is predefined for each tag.
-     * @return list of predefined tags for the concrete SAMHeader record type.
-     */
-    abstract Set<String> getStandardTags();
-
-    /** Simple to String that outputs the concrete class name and the set of attributes stored. */
-    @Override public String toString() {
-        return getClass().getSimpleName() + this.mAttributes.toString();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/AlignmentBlock.java b/src/main/java/htsjdk/samtools/AlignmentBlock.java
deleted file mode 100644
index 1320dfd..0000000
--- a/src/main/java/htsjdk/samtools/AlignmentBlock.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-
-/**
- * Represents the contiguous alignment of a subset of read bases to a reference
- * sequence. Simply put an alignment block tells you that read bases from
- * readStart are aligned to the reference (matching or mismatching) from
- * referenceStart for length bases.
- *
- * @author Tim Fennell
- */
-public class AlignmentBlock implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    private int readStart;
-    private int referenceStart;
-    private int length;
-
-    /** Constructs a new alignment block with the supplied read and ref starts and length. */
-    AlignmentBlock(int readStart, int referenceStart, int length) {
-        this.readStart = readStart;
-        this.referenceStart = referenceStart;
-        this.length = length;
-    }
-
-    /** The first, 1-based, base in the read that is aligned to the reference reference. */
-    public int getReadStart() { return readStart; }
-
-    /** The first, 1-based, position in the reference to which the read is aligned. */
-    public int getReferenceStart() { return referenceStart; }
-
-    /** The number of contiguous bases aligned to the reference. */
-    public int getLength() { return length; }
-}
diff --git a/src/main/java/htsjdk/samtools/AsyncSAMFileWriter.java b/src/main/java/htsjdk/samtools/AsyncSAMFileWriter.java
deleted file mode 100644
index ab5b8d0..0000000
--- a/src/main/java/htsjdk/samtools/AsyncSAMFileWriter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.AbstractAsyncWriter;
-import htsjdk.samtools.util.ProgressLoggerInterface;
-
-/**
- * SAMFileWriter that can be wrapped around an underlying SAMFileWriter to provide asynchronous output. Records
- * added are placed into a queue, the queue is then drained into the underlying SAMFileWriter by a thread owned
- * by the instance.
- *
- * Exceptions experienced by the writer thread will be emitted back to the caller in subsequent calls to either
- * addAlignment() or close().
- *
- * @author Tim Fennell
- */
-class AsyncSAMFileWriter extends AbstractAsyncWriter<SAMRecord> implements SAMFileWriter {
-
-    private final SAMFileWriter underlyingWriter;
-
-    /**
-     * Creates a new AsyncSAMFileWriter wrapping the provided SAMFileWriter.
-     */
-    public AsyncSAMFileWriter(final SAMFileWriter out) {
-        this(out, DEFAULT_QUEUE_SIZE);
-    }
-
-    /**
-     * Creates an AsyncSAMFileWriter wrapping the provided SAMFileWriter and using the specified
-     * queue size for buffer SAMRecords.
-     */
-    public AsyncSAMFileWriter(final SAMFileWriter out, final int queueSize) {
-        super(queueSize);
-        this.underlyingWriter = out;
-    }
-
-    @Override protected void synchronouslyWrite(final SAMRecord item) { this.underlyingWriter.addAlignment(item); }
-
-    @Override protected void synchronouslyClose() { this.underlyingWriter.close();  }
-
-    @Override protected final String getThreadNamePrefix() { return "SAMFileWriterThread-"; }
-
-	@Override
-	public void setProgressLogger(final ProgressLoggerInterface progress) {
-		this.underlyingWriter.setProgressLogger(progress);
-	}
-
-    /**
-     * Adds an alignment to the queue to be written.  Will re-throw any exception that was received when
-     * writing prior record(s) to the underlying SAMFileWriter.
-     */
-    public void addAlignment(final SAMRecord alignment) {
-        write(alignment);
-    }
-
-    /** Returns the SAMFileHeader from the underlying SAMFileWriter. */
-    public SAMFileHeader getFileHeader() {
-        return this.underlyingWriter.getFileHeader();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMFileConstants.java b/src/main/java/htsjdk/samtools/BAMFileConstants.java
deleted file mode 100644
index be0f36d..0000000
--- a/src/main/java/htsjdk/samtools/BAMFileConstants.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Constants used in reading & writing BAM files
- */
-class BAMFileConstants {
-    /**
-     * The beginning of a BAMRecord is a fixed-size block of 8 int32s
-     */
-    static final int FIXED_BLOCK_SIZE = 8 * 4;
-
-    /**
-     * BAM file magic number.  This is what is present in the gunzipped version of the file,
-     * which never exists on disk.
-     */
-
-    static final byte[] BAM_MAGIC = "BAM\1".getBytes();
-    /**
-     * BAM index file magic number.
-     */
-    static final byte[] BAM_INDEX_MAGIC = "BAI\1".getBytes();
-}
diff --git a/src/main/java/htsjdk/samtools/BAMFileReader.java b/src/main/java/htsjdk/samtools/BAMFileReader.java
deleted file mode 100644
index 98bb74f..0000000
--- a/src/main/java/htsjdk/samtools/BAMFileReader.java
+++ /dev/null
@@ -1,913 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.StringLineReader;
-
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * Class for reading and querying BAM files.
- */
-class BAMFileReader extends SamReader.ReaderImplementation {
-    // True if reading from a File rather than an InputStream
-    private boolean mIsSeekable = false;
-
-    // For converting bytes into other primitive types
-    private BinaryCodec mStream = null;
-
-    // Underlying compressed data stream.
-    private final BlockCompressedInputStream mCompressedInputStream;
-    private SAMFileHeader mFileHeader = null;
-
-    // One of these is populated if the file is seekable and an index exists
-    private File mIndexFile = null;
-    private SeekableStream mIndexStream = null;
-
-    private BAMIndex mIndex = null;
-    private long mFirstRecordPointer = 0;
-    // If non-null, there is an unclosed iterator extant.
-    private CloseableIterator<SAMRecord> mCurrentIterator = null;
-
-    // If true, all SAMRecords are fully decoded as they are read.
-    private boolean eagerDecode;
-
-    // If true, the BAMFileReader will use asynchronous IO.
-    // Note: this field currently has no effect (is not hooked up anywhere), but will be in the future. See https://github.com/samtools/htsjdk/pull/576
-    private final boolean useAsynchronousIO;
-
-    // For error-checking.
-    private ValidationStringency mValidationStringency;
-
-    // For creating BAMRecords
-    private SAMRecordFactory samRecordFactory;
-
-    /**
-     * Use the caching index reader implementation rather than the disk-hit-per-file model.
-     */
-    private boolean mEnableIndexCaching = false;
-
-    /**
-     * Use the traditional memory-mapped implementation for BAM file indexes rather than regular I/O.
-     */
-    private boolean mEnableIndexMemoryMapping = true;
-
-    /**
-     * Add information about the origin (reader and position) to SAM records.
-     */
-    private SamReader mReader = null;
-
-    /**
-     * Prepare to read BAM from a stream (not seekable)
-     * @param stream source of bytes.
-     * @param eagerDecode if true, decode all BAM fields as reading rather than lazily.
-     * @param validationStringency Controls how to handle invalidate reads or header lines.
-     */
-    BAMFileReader(final InputStream stream,
-                  final File indexFile,
-                  final boolean eagerDecode,
-                  final boolean useAsynchronousIO,
-                  final ValidationStringency validationStringency,
-                  final SAMRecordFactory factory)
-        throws IOException {
-        mIndexFile = indexFile;
-        mIsSeekable = false;
-        this.useAsynchronousIO = useAsynchronousIO;
-        mCompressedInputStream = new BlockCompressedInputStream(stream);
-        mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
-        this.eagerDecode = eagerDecode;
-        this.mValidationStringency = validationStringency;
-        this.samRecordFactory = factory;
-        this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, null);
-    }
-
-    /**
-     * Prepare to read BAM from a file (seekable)
-     * @param file source of bytes.
-     * @param eagerDecode if true, decode all BAM fields as reading rather than lazily.
-     * @param validationStringency Controls how to handle invalidate reads or header lines.
-     */
-    BAMFileReader(final File file,
-                  final File indexFile,
-                  final boolean eagerDecode,
-                  final boolean useAsynchronousIO,
-                  final ValidationStringency validationStringency,
-                  final SAMRecordFactory factory)
-        throws IOException {
-        this(new BlockCompressedInputStream(file), indexFile!=null ? indexFile : SamFiles.findIndex(file), eagerDecode, useAsynchronousIO, file.getAbsolutePath(), validationStringency, factory);
-        if (mIndexFile != null && mIndexFile.lastModified() < file.lastModified()) {
-            System.err.println("WARNING: BAM index file " + mIndexFile.getAbsolutePath() +
-                    " is older than BAM " + file.getAbsolutePath());
-        }
-        // Provide better error message when there is an error reading.
-        mStream.setInputFileName(file.getAbsolutePath());
-    }
-
-    BAMFileReader(final SeekableStream strm,
-                  final File indexFile,
-                  final boolean eagerDecode,
-                  final boolean useAsynchronousIO,
-                  final ValidationStringency validationStringency,
-                  final SAMRecordFactory factory)
-        throws IOException {
-        this(new BlockCompressedInputStream(strm), indexFile, eagerDecode, useAsynchronousIO, strm.getSource(), validationStringency, factory);
-    }
-
-    BAMFileReader(final SeekableStream strm,
-                  final SeekableStream indexStream,
-                  final boolean eagerDecode,
-                  final boolean useAsynchronousIO,
-                  final ValidationStringency validationStringency,
-                  final SAMRecordFactory factory)
-        throws IOException {
-        this(new BlockCompressedInputStream(strm), indexStream, eagerDecode, useAsynchronousIO, strm.getSource(), validationStringency, factory);
-    }
-
-    private BAMFileReader(final BlockCompressedInputStream compressedInputStream,
-                          final File indexFile,
-                          final boolean eagerDecode,
-                          final boolean useAsynchronousIO,
-                          final String source,
-                          final ValidationStringency validationStringency,
-                          final SAMRecordFactory factory)
-        throws IOException {
-        mIndexFile = indexFile;
-        mIsSeekable = true;
-        mCompressedInputStream = compressedInputStream;
-        mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
-        this.eagerDecode = eagerDecode;
-        this.useAsynchronousIO = useAsynchronousIO;
-        this.mValidationStringency = validationStringency;
-        this.samRecordFactory = factory;
-        this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, source);
-        mFirstRecordPointer = mCompressedInputStream.getFilePointer();
-    }    
-
-    private BAMFileReader(final BlockCompressedInputStream compressedInputStream,
-                          final SeekableStream indexStream,
-                          final boolean eagerDecode,
-                          final boolean useAsynchronousIO,
-                          final String source,
-                          final ValidationStringency validationStringency,
-                          final SAMRecordFactory factory)
-        throws IOException {
-        mIndexStream = indexStream;
-        mIsSeekable = true;
-        mCompressedInputStream = compressedInputStream;
-        mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
-        this.eagerDecode = eagerDecode;
-        this.useAsynchronousIO = useAsynchronousIO;
-        this.mValidationStringency = validationStringency;
-        this.samRecordFactory = factory;
-        this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, source);
-        mFirstRecordPointer = mCompressedInputStream.getFilePointer();
-    }
-
-    /** Reads through the header and sequence records to find the virtual file offset of the first record in the BAM file. */
-    static long findVirtualOffsetOfFirstRecord(final File bam) throws IOException {
-        final BAMFileReader reader = new BAMFileReader(bam, null, false, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory());
-        final long offset = reader.mFirstRecordPointer;
-        reader.close();
-        return offset;
-    }
-
-    /**
-     * If true, writes the source of every read into the source SAMRecords.
-     * @param enabled true to write source information into each SAMRecord.
-     */
-    void enableFileSource(final SamReader reader, final boolean enabled) {
-        this.mReader = enabled ? reader : null;
-    }
-
-    /**
-     * If true, uses the caching version of the index reader.
-     * @param enabled true to use the caching version of the reader.
-     */
-    protected void enableIndexCaching(final boolean enabled) {
-        if(mIndex != null)
-            throw new SAMException("Unable to turn on index caching; index file has already been loaded.");
-        this.mEnableIndexCaching = enabled;
-    }
-
-    /**
-     * If false, disable the use of memory mapping for accessing index files (default behavior is to use memory mapping).
-     * This is slower but more scalable when accessing large numbers of BAM files sequentially.
-     * @param enabled True to use memory mapping, false to use regular I/O.
-     */
-    protected void enableIndexMemoryMapping(final boolean enabled) {
-        if (mIndex != null) {
-            throw new SAMException("Unable to change index memory mapping; index file has already been loaded.");
-        }
-        this.mEnableIndexMemoryMapping = enabled;
-    }
-
-    @Override void enableCrcChecking(final boolean enabled) {
-        this.mCompressedInputStream.setCheckCrcs(enabled);
-    }
-
-    @Override void setSAMRecordFactory(final SAMRecordFactory factory) { this.samRecordFactory = factory; }
-
-    @Override
-    public SamReader.Type type() {
-        return SamReader.Type.BAM_TYPE;
-    }
-
-    /**
-     * @return true if ths is a BAM file, and has an index
-     */
-    public boolean hasIndex() {
-        return mIsSeekable && ((mIndexFile != null) || (mIndexStream != null));
-    }
-
-    /**
-     * Retrieves the index for the given file type.  Ensure that the index is of the specified type.
-     * @return An index of the given type.
-     */
-    public BAMIndex getIndex() {
-        if(!hasIndex())
-            throw new SAMException("No index is available for this BAM file.");
-        if(mIndex == null) {
-            if (mIndexFile != null)
-                mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping)
-                                             : new DiskBasedBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping);
-            else
-                mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary())
-                                             : new DiskBasedBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary());
-        }
-        return mIndex;
-    }
-
-    public void setEagerDecode(final boolean desired) { this.eagerDecode = desired; }
-
-    @Override
-    public void close() {
-        if (mCompressedInputStream != null) {
-            try {
-                mCompressedInputStream.close();
-            } catch (IOException e) {
-                throw new RuntimeIOException("Exception closing compressed input stream.", e);
-            }
-        }
-        if (mStream != null) {
-            mStream.close();
-        }
-        if (mIndex != null) {
-            mIndex.close();
-        }
-        mStream = null;
-        mFileHeader = null;
-        mIndex = null;
-    }
-
-    public SAMFileHeader getFileHeader() {
-        return mFileHeader;
-    }
-
-    /**
-     * Set error-checking level for subsequent SAMRecord reads.
-     */
-    void setValidationStringency(final ValidationStringency validationStringency) {
-        this.mValidationStringency = validationStringency;
-    }
-
-    public ValidationStringency getValidationStringency() {
-        return this.mValidationStringency;
-    }
-
-    /**
-     * Prepare to iterate through the SAMRecords in file order.
-     * Only a single iterator on a BAM file can be extant at a time.  If getIterator() or a query method has been called once,
-     * that iterator must be closed before getIterator() can be called again.
-     * A somewhat peculiar aspect of this method is that if the file is not seekable, a second call to
-     * getIterator() begins its iteration where the last one left off.  That is the best that can be
-     * done in that situation.
-     */
-    public CloseableIterator<SAMRecord> getIterator() {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (mIsSeekable) {
-            try {
-                mCompressedInputStream.seek(mFirstRecordPointer);
-            } catch (final IOException exc) {
-                throw new RuntimeIOException(exc.getMessage(), exc);
-            }
-        }
-        mCurrentIterator = new BAMFileIterator();
-        return mCurrentIterator;
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> getIterator(final SAMFileSpan chunks) {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (!(chunks instanceof BAMFileSpan)) {
-            throw new IllegalStateException("BAMFileReader cannot handle this type of file span.");
-        }
-
-        // Create an iterator over the given chunk boundaries.
-        mCurrentIterator = new BAMFileIndexIterator(((BAMFileSpan)chunks).toCoordinateArray());
-        return mCurrentIterator;
-    }
-
-    /**
-     * Gets an unbounded pointer to the first record in the BAM file.  Because the reader doesn't necessarily know
-     * when the file ends, the rightmost bound of the file pointer will not end exactly where the file ends.  However,
-     * the rightmost bound is guaranteed to be after the last read in the file.
-     * @return An unbounded pointer to the first record in the BAM file.
-     */
-    @Override
-    public SAMFileSpan getFilePointerSpanningReads() {
-        return new BAMFileSpan(new Chunk(mFirstRecordPointer,Long.MAX_VALUE));
-    }
-
-    /**
-     * Prepare to iterate through the SAMRecords that match the given interval.
-     * Only a single iterator on a BAMFile can be extant at a time.  The previous one must be closed
-     * before calling any of the methods that return an iterator.
-     *
-     * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
-     * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
-     * matches the specified interval.
-     *
-     * Note that this method is not necessarily efficient in terms of disk I/O.  The index does not have perfect
-     * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
-     *
-     * @param sequence Reference sequence sought.
-     * @param start Desired SAMRecords must overlap or be contained in the interval specified by start and end.
-     * A value of zero implies the start of the reference sequence.
-     * @param end A value of zero implies the end of the reference sequence.
-     * @param contained If true, the alignments for the SAMRecords must be completely contained in the interval
-     * specified by start and end.  If false, the SAMRecords need only overlap the interval.
-     * @return Iterator for the matching SAMRecords
-     */
-    CloseableIterator<SAMRecord> query(final String sequence, final int start, final int end, final boolean contained) {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (!mIsSeekable) {
-            throw new UnsupportedOperationException("Cannot query stream-based BAM file");
-        }
-        final int referenceIndex = mFileHeader.getSequenceIndex(sequence);
-        if (referenceIndex == -1) {
-            mCurrentIterator = new EmptyBamIterator();
-        } else {
-            final QueryInterval[] queryIntervals = {new QueryInterval(referenceIndex, start, end)};
-            mCurrentIterator = createIndexIterator(queryIntervals, contained);
-        }
-        return mCurrentIterator;
-    }
-
-    /**
-     * Prepare to iterate through the SAMRecords that match any of the given intervals.
-     * Only a single iterator on a BAMFile can be extant at a time.  The previous one must be closed
-     * before calling any of the methods that return an iterator.
-     *
-     * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
-     * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
-     * matches the specified interval.
-     *
-     * Note that this method is not necessarily efficient in terms of disk I/O.  The index does not have perfect
-     * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
-     *
-     * @param intervals list of intervals to be queried.  Must be optimized.
-     * @param contained If true, the alignments for the SAMRecords must be completely contained in the interval
-     * specified by start and end.  If false, the SAMRecords need only overlap the interval.
-     * @return Iterator for the matching SAMRecords
-     * @see QueryInterval#optimizeIntervals(QueryInterval[])
-     */
-    public CloseableIterator<SAMRecord> query(final QueryInterval[] intervals, final boolean contained) {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (!mIsSeekable) {
-            throw new UnsupportedOperationException("Cannot query stream-based BAM file");
-        }
-        mCurrentIterator = createIndexIterator(intervals, contained);
-        return mCurrentIterator;
-    }
-
-    /**
-     * Prepare to iterate through the SAMRecords with the given alignment start.
-     * Only a single iterator on a BAMFile can be extant at a time.  The previous one must be closed
-     * before calling any of the methods that return an iterator.
-     *
-     * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
-     * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
-     * matches the specified interval.
-     *
-     * Note that this method is not necessarily efficient in terms of disk I/O.  The index does not have perfect
-     * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
-     *
-     * @param sequence Reference sequence sought.
-     * @param start Alignment start sought.
-     * @return Iterator for the matching SAMRecords.
-     */
-    public CloseableIterator<SAMRecord> queryAlignmentStart(final String sequence, final int start) {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (!mIsSeekable) {
-            throw new UnsupportedOperationException("Cannot query stream-based BAM file");
-        }
-        final int referenceIndex = mFileHeader.getSequenceIndex(sequence);
-        if (referenceIndex == -1) {
-            mCurrentIterator = new EmptyBamIterator();
-        } else {
-            mCurrentIterator = createStartingAtIndexIterator(referenceIndex, start);
-        }
-        return mCurrentIterator;
-    }
-
-    /**
-     * Prepare to iterate through the SAMRecords that are unmapped and do not have a reference name or alignment start.
-     * Only a single iterator on a BAMFile can be extant at a time.  The previous one must be closed
-     * before calling any of the methods that return an iterator.
-     *
-     * @return Iterator for the matching SAMRecords.
-     */
-    public CloseableIterator<SAMRecord> queryUnmapped() {
-        if (mStream == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mCurrentIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        if (!mIsSeekable) {
-            throw new UnsupportedOperationException("Cannot query stream-based BAM file");
-        }
-        try {
-            final long startOfLastLinearBin = getIndex().getStartOfLastLinearBin();
-            if (startOfLastLinearBin != -1) {
-                mCompressedInputStream.seek(startOfLastLinearBin);
-            } else {
-                // No mapped reads in file, just start at the first read in file.
-                mCompressedInputStream.seek(mFirstRecordPointer);
-            }
-            mCurrentIterator = new BAMFileIndexUnmappedIterator();
-            return mCurrentIterator;
-        } catch (final IOException e) {
-            throw new RuntimeIOException("IOException seeking to unmapped reads", e);
-        }
-    }
-
-    /**
-     * Reads the header of a BAM file from a stream
-     * @param stream A BinaryCodec to read the header from
-     * @param validationStringency Determines how stringent to be when validating the sam
-     * @param source Note that this is used only for reporting errors.
-     */
-    protected static SAMFileHeader readHeader(final BinaryCodec stream, final ValidationStringency validationStringency, final String source)
-        throws IOException {
-
-        final byte[] buffer = new byte[4];
-        stream.readBytes(buffer);
-        if (!Arrays.equals(buffer, BAMFileConstants.BAM_MAGIC)) {
-            throw new IOException("Invalid BAM file header");
-        }
-
-        final int headerTextLength = stream.readInt();
-        final String textHeader = stream.readString(headerTextLength);
-        final SAMTextHeaderCodec headerCodec = new SAMTextHeaderCodec();
-        headerCodec.setValidationStringency(validationStringency);
-        final SAMFileHeader samFileHeader = headerCodec.decode(new StringLineReader(textHeader),
-                source);
-
-        final int sequenceCount = stream.readInt();
-        if (!samFileHeader.getSequenceDictionary().isEmpty()) {
-            // It is allowed to have binary sequences but no text sequences, so only validate if both are present
-            if (sequenceCount != samFileHeader.getSequenceDictionary().size()) {
-                throw new SAMFormatException("Number of sequences in text header (" +
-                        samFileHeader.getSequenceDictionary().size() +
-                        ") != number of sequences in binary header (" + sequenceCount + ") for file " + source);
-            }
-            for (int i = 0; i < sequenceCount; i++) {
-                final SAMSequenceRecord binarySequenceRecord = readSequenceRecord(stream, source);
-                final SAMSequenceRecord sequenceRecord = samFileHeader.getSequence(i);
-                if (!sequenceRecord.getSequenceName().equals(binarySequenceRecord.getSequenceName())) {
-                    throw new SAMFormatException("For sequence " + i + ", text and binary have different names in file " +
-                            source);
-                }
-                if (sequenceRecord.getSequenceLength() != binarySequenceRecord.getSequenceLength()) {
-                    throw new SAMFormatException("For sequence " + i + ", text and binary have different lengths in file " +
-                            source);
-                }
-            }
-        } else {
-            // If only binary sequences are present, copy them into samFileHeader
-            final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>(sequenceCount);
-            for (int i = 0; i < sequenceCount; i++) {
-                sequences.add(readSequenceRecord(stream, source));
-            }
-            samFileHeader.setSequenceDictionary(new SAMSequenceDictionary(sequences));
-        }
-
-        return samFileHeader;
-    }
-
-    /**
-     * Reads a single binary sequence record from the file or stream
-     * @param source Note that this is used only for reporting errors.
-     */
-    private static SAMSequenceRecord readSequenceRecord(final BinaryCodec stream, final String source) {
-        final int nameLength = stream.readInt();
-        if (nameLength <= 1) {
-            throw new SAMFormatException("Invalid BAM file header: missing sequence name in file " + source);
-        }
-        final String sequenceName = stream.readString(nameLength - 1);
-        // Skip the null terminator
-        stream.readByte();
-        final int sequenceLength = stream.readInt();
-        return new SAMSequenceRecord(SAMSequenceRecord.truncateSequenceName(sequenceName), sequenceLength);
-    }
-
-    /**
-     * Encapsulates the restriction that only one iterator may be open at a time.
-     */
-    private abstract class AbstractBamIterator implements CloseableIterator<SAMRecord> {
-
-        private boolean isClosed = false;
-
-        public void close() {
-            if (!isClosed) {
-                if (mCurrentIterator != null && this != mCurrentIterator) {
-                    throw new IllegalStateException("Attempt to close non-current iterator");
-                }
-                mCurrentIterator = null;
-                isClosed = true;
-            }
-        }
-
-        protected void assertOpen() {
-            if (isClosed) throw new AssertionError("Iterator has been closed");
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Not supported: remove");
-        }
-
-    }
-
-    private class EmptyBamIterator extends AbstractBamIterator {
-        @Override
-        public boolean hasNext() {
-            return false;
-        }
-
-        @Override
-        public SAMRecord next() {
-            throw new NoSuchElementException("next called on empty iterator");
-        }
-    }
-
-    /**
-
-    /**
-     * Iterator for non-indexed sequential iteration through all SAMRecords in file.
-     * Starting point of iteration is wherever current file position is when the iterator is constructed.
-     */
-    private class BAMFileIterator extends AbstractBamIterator {
-        private SAMRecord mNextRecord = null;
-        private final BAMRecordCodec bamRecordCodec;
-        private long samRecordIndex = 0; // Records at what position (counted in records) we are at in the file
-
-        BAMFileIterator() {
-            this(true);
-        }
-
-        /**
-         * @param advance Trick to enable subclass to do more setup before advancing
-         */
-        BAMFileIterator(final boolean advance) {
-            this.bamRecordCodec = new BAMRecordCodec(getFileHeader(), samRecordFactory);
-            this.bamRecordCodec.setInputStream(BAMFileReader.this.mStream.getInputStream(),
-                    BAMFileReader.this.mStream.getInputFileName());
-
-            if (advance) {
-                advance();
-            }
-        }
-
-        public boolean hasNext() {
-            assertOpen();
-            return (mNextRecord != null);
-        }
-
-        public SAMRecord next() {
-            assertOpen();
-            final SAMRecord result = mNextRecord;
-            advance();
-            return result;
-        }
-
-        void advance() {
-            try {
-                mNextRecord = getNextRecord();
-
-                if (mNextRecord != null) {
-                    ++this.samRecordIndex;
-                    // Because some decoding is done lazily, the record needs to remember the validation stringency.
-                    mNextRecord.setValidationStringency(mValidationStringency);
-
-                    if (mValidationStringency != ValidationStringency.SILENT) {
-                        final List<SAMValidationError> validationErrors = mNextRecord.isValid(mValidationStringency == ValidationStringency.STRICT);
-                        SAMUtils.processValidationErrors(validationErrors,
-                                this.samRecordIndex, BAMFileReader.this.getValidationStringency());
-                    }
-                }
-                if (eagerDecode && mNextRecord != null) {
-                    mNextRecord.eagerDecode();
-                }
-            } catch (final IOException exc) {
-                throw new RuntimeIOException(exc.getMessage(), exc);
-            }
-        }
-
-        /**
-         * Read the next record from the input stream.
-         */
-        SAMRecord getNextRecord() throws IOException {
-            final long startCoordinate = mCompressedInputStream.getFilePointer();
-            final SAMRecord next = bamRecordCodec.decode();
-            final long stopCoordinate = mCompressedInputStream.getFilePointer();
-
-            if(mReader != null && next != null)
-                next.setFileSource(new SAMFileSource(mReader,new BAMFileSpan(new Chunk(startCoordinate,stopCoordinate))));
-
-            return next;
-        }
-
-        /**
-         * @return The record that will be return by the next call to next()
-         */
-        protected SAMRecord peek() {
-            return mNextRecord;
-        }
-    }
-
-    /**
-     * Prepare to iterate through SAMRecords in the given reference that start exactly at the given start coordinate.
-     * @param referenceIndex Desired reference sequence.
-     * @param start 1-based alignment start.
-     */
-    private CloseableIterator<SAMRecord> createStartingAtIndexIterator(final int referenceIndex,
-                                                                       final int start) {
-
-        // Hit the index to determine the chunk boundaries for the required data.
-        final BAMIndex fileIndex = getIndex();
-        final BAMFileSpan fileSpan = fileIndex.getSpanOverlapping(referenceIndex, start, 0);
-        final long[] filePointers = fileSpan != null ? fileSpan.toCoordinateArray() : null;
-
-        // Create an iterator over the above chunk boundaries.
-        final BAMFileIndexIterator iterator = new BAMFileIndexIterator(filePointers);
-
-        // Add some preprocessing filters for edge-case reads that don't fit into this
-        // query type.
-        return new BAMQueryFilteringIterator(iterator,new BAMStartingAtIteratorFilter(referenceIndex,start));
-    }
-
-    /**
-     * @throws java.lang.IllegalArgumentException if the intervals are not optimized
-     * @see QueryInterval#optimizeIntervals(QueryInterval[])
-     */
-    private void assertIntervalsOptimized(final QueryInterval[] intervals) {
-        if (intervals.length == 0) return;
-        for (int i = 1; i < intervals.length; ++i) {
-        final QueryInterval prev = intervals[i-1];
-        final QueryInterval thisInterval = intervals[i];
-            if (prev.compareTo(thisInterval) >= 0) {
-                throw new IllegalArgumentException(String.format("List of intervals is not sorted: %s >= %s", prev, thisInterval));
-            }
-            if (prev.overlaps(thisInterval)) {
-                throw new IllegalArgumentException(String.format("List of intervals is not optimized: %s intersects %s", prev, thisInterval));
-            }
-            if (prev.abuts(thisInterval)) {
-                throw new IllegalArgumentException(String.format("List of intervals is not optimized: %s abuts %s", prev, thisInterval));
-            }
-        }
-    }
-
-    private CloseableIterator<SAMRecord> createIndexIterator(final QueryInterval[] intervals,
-                                                             final boolean contained) {
-
-        assertIntervalsOptimized(intervals);
-
-        // Hit the index to determine the chunk boundaries for the required data.
-        final BAMFileSpan[] inputSpans = new BAMFileSpan[intervals.length];
-        final BAMIndex fileIndex = getIndex();
-        for (int i = 0; i < intervals.length; ++i) {
-            final QueryInterval interval = intervals[i];
-            final BAMFileSpan span = fileIndex.getSpanOverlapping(interval.referenceIndex, interval.start, interval.end);
-            inputSpans[i] = span;
-        }
-        final long[] filePointers;
-        if (inputSpans.length > 0) {
-            filePointers = BAMFileSpan.merge(inputSpans).toCoordinateArray();
-        } else {
-            filePointers = null;
-        }
-
-        // Create an iterator over the above chunk boundaries.
-        final BAMFileIndexIterator iterator = new BAMFileIndexIterator(filePointers);
-
-        // Add some preprocessing filters for edge-case reads that don't fit into this
-        // query type.
-        return new BAMQueryFilteringIterator(iterator, new BAMQueryMultipleIntervalsIteratorFilter(intervals, contained));
-    }
-
-    /**
-     * Iterate over the SAMRecords defined by the sections of the file described in the ctor argument.
-     */
-    private class BAMFileIndexIterator extends BAMFileIterator {
-
-        private long[] mFilePointers = null;
-        private int mFilePointerIndex = 0;
-        private long mFilePointerLimit = -1;
-
-        /**
-         * Prepare to iterate through SAMRecords stored in the specified compressed blocks at the given offset.
-         * @param filePointers the block / offset combination, stored in chunk format.
-         */
-        BAMFileIndexIterator(final long[] filePointers) {
-            super(false);  // delay advance() until after construction
-            mFilePointers = filePointers;
-            advance();
-        }
-
-        SAMRecord getNextRecord()
-            throws IOException {
-            // Advance to next file block if necessary
-            while (mCompressedInputStream.getFilePointer() >= mFilePointerLimit) {
-                if (mFilePointers == null ||
-                        mFilePointerIndex >= mFilePointers.length) {
-                    return null;
-                }
-                final long startOffset = mFilePointers[mFilePointerIndex++];
-                final long endOffset = mFilePointers[mFilePointerIndex++];
-                mCompressedInputStream.seek(startOffset);
-                mFilePointerLimit = endOffset;
-            }
-            // Pull next record from stream
-            return super.getNextRecord();
-        }
-    }
-
-    /**
-     * Pull SAMRecords from a coordinate-sorted iterator, and filter out any that do not match the filter.
-     */
-    public class BAMQueryFilteringIterator extends AbstractBamIterator {
-        /**
-         * The wrapped iterator.
-         */
-        protected final CloseableIterator<SAMRecord> wrappedIterator;
-        /**
-         * The next record to be returned.  Will be null if no such record exists.
-         */
-        protected SAMRecord mNextRecord;
-        private final BAMIteratorFilter iteratorFilter;
-
-        public BAMQueryFilteringIterator(final CloseableIterator<SAMRecord> iterator,
-                                         final BAMIteratorFilter iteratorFilter) {
-            this.wrappedIterator = iterator;
-            this.iteratorFilter = iteratorFilter;
-            mNextRecord = advance();
-        }
-
-        /**
-         * Returns true if a next element exists; false otherwise.
-         */
-        public boolean hasNext() {
-            assertOpen();
-            return mNextRecord != null;
-        }
-
-        /**
-         * Gets the next record from the given iterator.
-         * @return The next SAM record in the iterator.
-         */
-        public SAMRecord next() {
-            if(!hasNext())
-                throw new NoSuchElementException("BAMQueryFilteringIterator: no next element available");
-            final SAMRecord currentRead = mNextRecord;
-            mNextRecord = advance();
-            return currentRead;
-        }
-
-        SAMRecord advance() {
-            while (true) {
-                // Pull next record from stream
-                if(!wrappedIterator.hasNext())
-                    return null;
-
-                final SAMRecord record = wrappedIterator.next();
-                switch (iteratorFilter.compareToFilter(record)) {
-                    case MATCHES_FILTER: return record;
-                    case STOP_ITERATION: return null;
-                    case CONTINUE_ITERATION: break; // keep looping
-                    default: throw new SAMException("Unexpected return from compareToFilter");
-                }
-            }
-        }
-    }
-
-    /**
-     * A decorating iterator that filters out records that do not match the given reference and start position.
-     */
-    private class BAMStartingAtIteratorFilter implements BAMIteratorFilter {
-
-        private final int mReferenceIndex;
-        private final int mRegionStart;
-
-        public BAMStartingAtIteratorFilter(final int referenceIndex, final int start) {
-            mReferenceIndex = referenceIndex;
-            mRegionStart = start;
-        }
-
-        /**
-         *
-         * @return MATCHES_FILTER if this record matches the filter;
-         * CONTINUE_ITERATION if does not match filter but iteration should continue;
-         * STOP_ITERATION if does not match filter and iteration should end.
-         */
-        @Override
-        public FilteringIteratorState compareToFilter(final SAMRecord record) {
-            // If beyond the end of this reference sequence, end iteration
-            final int referenceIndex = record.getReferenceIndex();
-            if (referenceIndex < 0 || referenceIndex > mReferenceIndex) {
-                return FilteringIteratorState.STOP_ITERATION;
-            } else if (referenceIndex < mReferenceIndex) {
-                // If before this reference sequence, continue
-                return FilteringIteratorState.CONTINUE_ITERATION;
-            }
-            final int alignmentStart = record.getAlignmentStart();
-            if (alignmentStart > mRegionStart) {
-                // If scanned beyond target region, end iteration
-                return FilteringIteratorState.STOP_ITERATION;
-            } else  if (alignmentStart == mRegionStart) {
-                    return FilteringIteratorState.MATCHES_FILTER;
-            } else {
-                return FilteringIteratorState.CONTINUE_ITERATION;
-            }
-        }
-
-    }
-
-    private class BAMFileIndexUnmappedIterator extends BAMFileIterator  {
-        private BAMFileIndexUnmappedIterator() {
-            while (this.hasNext() && peek().getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                advance();
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMFileSpan.java b/src/main/java/htsjdk/samtools/BAMFileSpan.java
deleted file mode 100644
index 193e443..0000000
--- a/src/main/java/htsjdk/samtools/BAMFileSpan.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * An ordered list of chunks, capable of representing a set of discontiguous
- * regions in the BAM file.  FileSpans are mutable within the package, but perceived
- * as immutable outside the package.
- *
- * Some operations on FileSpans assume that the spans are sorted.  In these cases,
- * sort order will be validated.
- *
- * @author mhanna
- * @version 0.1
- */
-public class BAMFileSpan implements SAMFileSpan, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * The constituent chunks of this list.
-     */
-    private final List<Chunk> chunks;
-
-    /**
-     * Create a new empty list of chunks.
-     */
-    public BAMFileSpan() {
-        this.chunks = new ArrayList<Chunk>();
-    }
-
-    /**
-     * Convenience constructor to construct a BAM file span from
-     * a single chunk.
-     * @param chunk Chunk to use as the sole region in this span.
-     */
-    public BAMFileSpan(final Chunk chunk) {
-        this.chunks = new ArrayList<Chunk>();
-        chunks.add(chunk);
-    }
-
-    /**
-     * Create a new chunk list from the given list of chunks.
-     * @param chunks Constituent chunks.
-     */
-    public BAMFileSpan(final List<Chunk> chunks) {
-        this.chunks = new ArrayList<Chunk>(chunks);
-    }
-
-    /**
-     * Does this chunk list map to any position within the BAM file?
-     * @return True iff the ChunkList points to any data within the BAM.
-     */
-    public boolean isEmpty() {
-        return chunks.isEmpty();
-    }
-
-    /**
-     * Deep clone the given chunk list.
-     * @return A copy of the chunk list.
-     */
-    public BAMFileSpan clone() {
-        final BAMFileSpan clone = new BAMFileSpan();
-        for(final Chunk chunk: chunks)
-            clone.chunks.add(chunk.clone());
-        return clone;
-    }
-
-    /**
-     * Creates a new file span by removing all chunks before the given file span starts.
-     * If a chunk in the chunk list starts before and ends after the given
-     * chunk, the first portion of the chunk will be deleted.
-     * @param fileSpan The filespan before which to eliminate.
-     * @return A new BAMFileSpan which contains the portion of the chunk list after the given chunk.
-     */
-    public SAMFileSpan removeContentsBefore(final SAMFileSpan fileSpan) {
-        if(fileSpan == null)
-            return clone();
-
-        if(!(fileSpan instanceof BAMFileSpan))
-            throw new SAMException("Unable to compare ");
-
-        final BAMFileSpan bamFileSpan = (BAMFileSpan)fileSpan;
-
-        if(bamFileSpan.isEmpty())
-            return clone();
-
-        validateSorted();
-
-        final BAMFileSpan trimmedChunkList = new BAMFileSpan();
-        for(final Chunk chunkToTrim: chunks) {
-            if(chunkToTrim.getChunkEnd() > chunkToTrim.getChunkStart()) {
-                if(chunkToTrim.getChunkStart() >= bamFileSpan.chunks.get(0).getChunkStart()) {
-                    // This chunk from the list is completely beyond the start of the filtering chunk.
-                    trimmedChunkList.add(chunkToTrim.clone());
-                }
-                else {
-                    // This chunk from the list partially overlaps the filtering chunk and must be trimmed.
-                    trimmedChunkList.add(new Chunk(bamFileSpan.chunks.get(0).getChunkStart(),chunkToTrim.getChunkEnd()));
-                }
-            }
-        }
-        return trimmedChunkList;
-    }
-
-    /**
-     * Gets a file span over the data immediately following this span.
-     * @return The a pointer to data immediately following this span.
-     */
-    public SAMFileSpan getContentsFollowing() {
-        if(chunks.isEmpty())
-            throw new SAMException("Unable to get the file pointer following this one: no data present.");
-        validateSorted();
-        return new BAMFileSpan(new Chunk(chunks.get(chunks.size()-1).getChunkEnd(),Long.MAX_VALUE));
-    }
-
-    /**
-     * Merge one span into another
-     *
-     * @param span - span with chunks to add to this one
-     */
-    protected void add(final BAMFileSpan span) {
-        for (final Chunk c : span.chunks) {
-            chunks.add(c);
-        }
-    }
-
-    /**
-     * Adds a new chunk to this list.  Visible only within the BAm.
-     * @param chunk Chunk to add.
-     */
-    protected void add(final Chunk chunk) {
-        chunks.add(chunk);
-    }
-
-    /**
-     * Convert the chunk list to an array of offsets, paired in [start,end) format.
-     * @return Array of offsets.
-     */
-    public long[] toCoordinateArray() {
-        final int count = chunks.size() * 2;
-        if (count == 0) {
-            return null;
-        }
-        int index = 0;
-        final long[] result = new long[count];
-        for (final Chunk chunk : chunks) {
-            result[index++] = chunk.getChunkStart();
-            result[index++] = chunk.getChunkEnd();
-        }
-        return result;
-    }
-
-    /**
-     * Find the first offset in the chunk list
-     * @return The first offset in the span
-     */
-    public long getFirstOffset() {
-        final long result = 0;
-        if (chunks == null){
-            return result;
-        }
-        for (final Chunk chunk : chunks) {
-            return chunk.getChunkStart();
-        }
-        return result;
-    }
-
-    /**
-     * Gets the constituent chunks stored in this span.
-     * @return An unmodifiable list of chunks.
-     */
-    public List<Chunk> getChunks() {
-        return Collections.unmodifiableList(chunks);
-    }
-
-    /**
-     * Checks that there is only a single chunk for this span and returns it.
-     * @return The single chunk stored in this span
-     */
-    protected Chunk getSingleChunk() {
-        if (chunks.size() != 1){
-            throw new SAMException("Expecting a single chunk for span. Found " + chunks.size());
-        }
-        return chunks.get(0);
-    }
-
-    /**
-     * The list of chunks is often represented as an array of
-     * longs where every even-numbered index is a start coordinate
-     * and every odd-numbered index is a stop coordinate.  Convert
-     * from that format back to a list of chunks.
-     * @param coordinateArray List of chunks to convert.
-     * @return A list of chunks.
-     */
-    protected static SAMFileSpan toChunkList(final long[] coordinateArray) {
-        if(coordinateArray.length % 2 != 0)
-            throw new SAMException("Data supplied does not appear to be in coordinate array format.");
-
-        final BAMFileSpan chunkList = new BAMFileSpan();
-        for(int i = 0; i < coordinateArray.length; i += 2)
-            chunkList.add(new Chunk(coordinateArray[i],coordinateArray[i+1]));
-
-        chunkList.validateSorted();
-
-        return chunkList;
-    }
-
-    /**
-     * Validates the list of chunks to ensure that they appear in sorted order.
-     */
-    private void validateSorted() {
-        for(int i = 1; i < chunks.size(); i++) {
-            if(chunks.get(i).getChunkStart() < chunks.get(i-1).getChunkEnd())
-                throw new SAMException(String.format("Chunk list is unsorted; chunk %s is before chunk %s",chunks.get(i-1),chunks.get(i)));
-        }
-    }
-
-    /**
-     * Creates a string representation of this chunk list.
-     */
-    @Override
-    public String toString() {
-        return StringUtil.join(";", chunks);
-    }
-
-    /**
-     *
-     * @return A single BAMFileSpan that is an intelligent merge of the input spans, i.e. contiguous, overlapping
-     * and contained chunks are intelligently merged, and the chunks are sorted.
-     */
-    public static BAMFileSpan merge(final BAMFileSpan[] spans) {
-        final ArrayList<Chunk> inputChunks = new ArrayList<Chunk>();
-        for (final BAMFileSpan span : spans) {
-            if(span != null){
-                inputChunks.addAll(span.chunks);
-            }
-        }
-        return new BAMFileSpan(Chunk.optimizeChunkList(inputChunks, 0));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMFileWriter.java b/src/main/java/htsjdk/samtools/BAMFileWriter.java
deleted file mode 100644
index f6a474e..0000000
--- a/src/main/java/htsjdk/samtools/BAMFileWriter.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.zip.DeflaterFactory;
-
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-
-/**
- * Concrete implementation of SAMFileWriter for writing gzipped BAM files.
- */
-class BAMFileWriter extends SAMFileWriterImpl {
-
-    private final BinaryCodec outputBinaryCodec;
-    private BAMRecordCodec bamRecordCodec = null;
-    private final BlockCompressedOutputStream blockCompressedOutputStream;
-    private BAMIndexer bamIndexer = null;
-
-    protected BAMFileWriter(final File path) {
-        blockCompressedOutputStream = new BlockCompressedOutputStream(path);
-        outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        outputBinaryCodec.setOutputFileName(path.getAbsolutePath());
-    }
-
-    protected BAMFileWriter(final File path, final int compressionLevel) {
-        blockCompressedOutputStream = new BlockCompressedOutputStream(path, compressionLevel);
-        outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        outputBinaryCodec.setOutputFileName(path.getAbsolutePath());
-    }
-
-    protected BAMFileWriter(final OutputStream os, final File file) {
-        blockCompressedOutputStream = new BlockCompressedOutputStream(os, file);
-        outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        outputBinaryCodec.setOutputFileName(getPathString(file));
-    }
-
-    protected BAMFileWriter(final OutputStream os, final File file, final int compressionLevel) {
-        blockCompressedOutputStream = new BlockCompressedOutputStream(os, file, compressionLevel);
-        outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        outputBinaryCodec.setOutputFileName(getPathString(file));
-    }
-
-    protected BAMFileWriter(final OutputStream os, final File file, final int compressionLevel, final DeflaterFactory deflaterFactory) {
-        blockCompressedOutputStream = new BlockCompressedOutputStream(os, file, compressionLevel, deflaterFactory);
-        outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        outputBinaryCodec.setOutputFileName(getPathString(file));
-    }
-
-    private void prepareToWriteAlignments() {
-        if (bamRecordCodec == null) {
-            bamRecordCodec = new BAMRecordCodec(getFileHeader());
-            bamRecordCodec.setOutputStream(outputBinaryCodec.getOutputStream(), getFilename());
-        }
-    }
-
-    /** @return absolute path, or null if arg is null.  */
-    private String getPathString(final File path){
-        return (path != null) ? path.getAbsolutePath() : null;
-    }
-
-   // Allow enabling the bam index construction
-   // only enabled by factory method before anything is written
-   void enableBamIndexConstruction () {
-        if (!getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)){
-           throw new SAMException("Not creating BAM index since not sorted by coordinates: " + getSortOrder());
-        }
-        if(getFilename() == null){
-            throw new SAMException("Not creating BAM index since we don't have an output file name");
-        }
-        bamIndexer = createBamIndex(getFilename());
-    }
-
-    private BAMIndexer createBamIndex(final String path) {
-        try {
-            final String indexFileBase = path.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION) ?
-                    path.substring(0, path.lastIndexOf('.')) : path;
-            final File indexFile = new File(indexFileBase + BAMIndex.BAMIndexSuffix);
-            if (indexFile.exists()) {
-                if (!indexFile.canWrite()) {
-                    throw new SAMException("Not creating BAM index since unable to write index file " + indexFile);
-                }
-            }
-            return new BAMIndexer(indexFile, getFileHeader());
-        } catch (Exception e) {
-            throw new SAMException("Not creating BAM index", e);
-        }
-    }
-
-    protected void writeAlignment(final SAMRecord alignment) {
-        prepareToWriteAlignments();
-
-        if (bamIndexer != null) {
-            try {
-                final long startOffset = blockCompressedOutputStream.getFilePointer();
-                bamRecordCodec.encode(alignment);
-                final long stopOffset = blockCompressedOutputStream.getFilePointer();
-                // set the alignment's SourceInfo and then prepare its index information
-                alignment.setFileSource(new SAMFileSource(null, new BAMFileSpan(new Chunk(startOffset, stopOffset))));
-                bamIndexer.processAlignment(alignment);
-            } catch (Exception e) {
-                bamIndexer = null;
-                throw new SAMException("Exception when processing alignment for BAM index " + alignment, e);
-            }
-        } else {
-            bamRecordCodec.encode(alignment);
-        }
-    }
-
-    protected void writeHeader(final String textHeader) {
-        writeHeader(outputBinaryCodec, getFileHeader(), textHeader);
-    }
-
-    protected void finish() {
-        outputBinaryCodec.close();
-            try {
-                if (bamIndexer != null) {
-                    bamIndexer.finish();
-                }
-            } catch (Exception e) {
-                throw new SAMException("Exception writing BAM index file", e);
-            }
-    }
-
-    /** @return absolute path, or null if this writer does not correspond to a file.  */
-    protected String getFilename() {
-        return outputBinaryCodec.getOutputFileName();
-    }
-
-    /**
-     * Writes a header to a BAM file. samFileHeader and headerText are redundant - one can be used to regenerate the other but in
-     * some instances we already have both so this allows us to save some cycles
-     */
-    protected static void writeHeader(final BinaryCodec outputBinaryCodec, final SAMFileHeader samFileHeader, final String headerText) {
-        outputBinaryCodec.writeBytes(BAMFileConstants.BAM_MAGIC);
-
-        // calculate and write the length of the SAM file header text and the header text
-        outputBinaryCodec.writeString(headerText, true, false);
-
-        // write the sequences binarily.  This is redundant with the text header
-        outputBinaryCodec.writeInt(samFileHeader.getSequenceDictionary().size());
-        for (final SAMSequenceRecord sequenceRecord: samFileHeader.getSequenceDictionary().getSequences()) {
-            outputBinaryCodec.writeString(sequenceRecord.getSequenceName(), true, true);
-            outputBinaryCodec.writeInt(sequenceRecord.getSequenceLength());
-        }
-    }
-
-    /**
-     * Writes a header to a BAM file. Might need to regenerate the String version of the header, if one already has both the
-     * samFileHeader and the String, use the version of this method which takes both.
-     */
-    protected static void writeHeader(final BinaryCodec outputBinaryCodec, final SAMFileHeader samFileHeader) {
-        // Do not use SAMFileHeader.getTextHeader() as it is not updated when changes to the underlying object are made
-        final String headerString;
-        final Writer stringWriter = new StringWriter();
-        new SAMTextHeaderCodec().encode(stringWriter, samFileHeader, true);
-        headerString = stringWriter.toString();
-
-        writeHeader(outputBinaryCodec, samFileHeader, headerString);
-    }
-
-    protected static void writeHeader(final OutputStream outputStream, final SAMFileHeader samFileHeader) {
-        final BlockCompressedOutputStream blockCompressedOutputStream = new BlockCompressedOutputStream(outputStream, null);
-        final BinaryCodec outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
-        writeHeader(outputBinaryCodec, samFileHeader);
-        try {
-            blockCompressedOutputStream.flush();
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMIndex.java b/src/main/java/htsjdk/samtools/BAMIndex.java
deleted file mode 100644
index 3663df9..0000000
--- a/src/main/java/htsjdk/samtools/BAMIndex.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Closeable;
-
-/**
- * A basic interface for querying BAM indices.
- *
- * @author mhanna
- * @version 0.1
- */
-public interface BAMIndex extends Closeable {
-
-    public static final String BAMIndexSuffix = ".bai";
-
-    /**
-     * Gets the compressed chunks which should be searched for the contents of records contained by the span
-     * referenceIndex:startPos-endPos, inclusive.  See the BAM spec for more information on how a chunk is
-     * represented.
-     * 
-     * @param referenceIndex The contig.
-     * @param startPos Genomic start of query.
-     * @param endPos Genomic end of query.
-     * @return A file span listing the chunks in the BAM file.
-     */
-    BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos);
-
-    /**
-     * Gets the start of the last linear bin in the index.
-     * @return The chunk indicating the start of the last bin in the linear index.
-     */
-    long getStartOfLastLinearBin();
-
-    /**
-     * Gets meta data for the given reference including information about number of aligned, unaligned, and noCoordinate records
-     * @param reference the reference of interest
-     * @return meta data for the reference
-     */
-    public BAMIndexMetaData getMetaData(int reference);
-
-    /**
-     * Close the index and release any associated resources.
-     */
-    void close();
-}
diff --git a/src/main/java/htsjdk/samtools/BAMIndexContent.java b/src/main/java/htsjdk/samtools/BAMIndexContent.java
deleted file mode 100644
index be9d856..0000000
--- a/src/main/java/htsjdk/samtools/BAMIndexContent.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Represents the contents of a bam index file for one reference.
- * A BAM index (.bai) file contains information for all references in the bam file.
- * This class describes the data present in the index file for one of these references;
- * including the bins, chunks, and linear index.
- */
-class BAMIndexContent extends BinningIndexContent {
-    /**
-     * Chunks containing metaData for the reference, e.g. number of aligned and unaligned records
-     */
-    private final BAMIndexMetaData mMetaData;
-
-
-
-    /**
-     * @param referenceSequence Content corresponds to this reference.
-     * @param binList              Array of bins represented by this content, possibly sparse
-     * @param metaData          Extra information about the reference in this index
-     * @param linearIndex       Additional index used to optimize queries
-     */
-    BAMIndexContent(final int referenceSequence, final BinList binList, final BAMIndexMetaData metaData, final LinearIndex linearIndex) {
-        super(referenceSequence, binList, linearIndex);
-        this.mMetaData = metaData;
-    }
-
-    /**
-     * @param referenceSequence Content corresponds to this reference.
-     * @param bins              Array of bins represented by this content, possibly sparse
-     * @param numberOfBins      Number of non-null bins
-     * @param metaData          Extra information about the reference in this index
-     * @param linearIndex       Additional index used to optimize queries
-     */
-    BAMIndexContent(final int referenceSequence, final Bin[] bins, final int numberOfBins, final BAMIndexMetaData metaData, final LinearIndex linearIndex) {
-        this(referenceSequence, new BinList(bins, numberOfBins), metaData, linearIndex);
-    }
-
-    /**
-     * @return the meta data chunks for this content
-     */
-    public BAMIndexMetaData getMetaData() {
-        return mMetaData;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/BAMIndexMetaData.java b/src/main/java/htsjdk/samtools/BAMIndexMetaData.java
deleted file mode 100644
index 3dceab2..0000000
--- a/src/main/java/htsjdk/samtools/BAMIndexMetaData.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Metadata about the bam index contained within the bam index.
- * One instance created per index file.
- */
-public class BAMIndexMetaData {
-
-    // information for the entire index.
-    // stored at the end of the index
-    private long noCoordinateRecords = 0;
-
-    // information for each reference.
-    // stored in two chunks in bin # MAX_BINS
-    private long firstOffset = -1;
-    private long lastOffset = 0;
-    private int alignedRecords = 0;
-    private int unAlignedRecords = 0;  // unmapped, but associated with this reference
-
-
-    /**
-     * Constructor used when writing an index
-     * construct one instance for each index generated
-     */
-    BAMIndexMetaData() {
-        noCoordinateRecords = 0;
-        newReference();
-    }
-
-    /**
-     * Constructor used when reading an index
-     * construct one instance for each index generated
-     */
-    BAMIndexMetaData(List<Chunk> chunkList) {
-        noCoordinateRecords = 0;
-
-        if (chunkList == null || chunkList.isEmpty()) {
-            // System.out.println("No metadata chunks");
-        } else if (chunkList.size() != 2) {
-            throw new SAMException("Unexpected number of metadata chunks " + (chunkList.size()));
-        }
-        // fill in the first/lastOffset un/alignedRecords from this
-        boolean firstChunk = true;
-        if (chunkList != null) {
-            for (Chunk c : chunkList) {
-                long start = c.getChunkStart();
-                long end = c.getChunkEnd();
-                if (firstChunk) {
-                    firstOffset = start;
-                    lastOffset = end;
-                    firstChunk = false;
-                } else {
-                    firstChunk = true;
-                    alignedRecords = (int) start;
-                    unAlignedRecords = (int) end;
-                }
-            }
-        }
-    }
-
-    /**
-     * @return the count of aligned records associated with this reference
-     */
-    public int getAlignedRecordCount() {
-        return alignedRecords;
-    }
-
-    /**
-     * @return the count of unaligned records associated with this reference
-     */
-    public int getUnalignedRecordCount() {
-        return unAlignedRecords;
-    }
-
-    /**
-     * Call for each new reference sequence encountered
-     */
-    void newReference() {
-        firstOffset = -1;
-        lastOffset = 0;
-        alignedRecords = 0;
-        unAlignedRecords = 0;
-    }
-
-    /**
-     * Extract relevant metaData from the record and its filePointer
-     * Call only once per record in the file being indexed
-     *
-     * @param rec
-     */
-    void recordMetaData(final SAMRecord rec) {
-
-        final int alignmentStart = rec.getAlignmentStart();
-        if (alignmentStart == SAMRecord.NO_ALIGNMENT_START) {
-            incrementNoCoordinateRecordCount();
-            return;
-        }
-
-        if (rec.getFileSource() == null) {
-            throw new SAMException("BAM cannot be indexed without setting a fileSource for record " + rec);
-        }
-        final Chunk newChunk = ((BAMFileSpan) rec.getFileSource().getFilePointer()).getSingleChunk();
-        final long start = newChunk.getChunkStart();
-        final long end = newChunk.getChunkEnd();
-
-        if (rec.getReadUnmappedFlag()) {
-            unAlignedRecords++;
-        } else {
-            alignedRecords++;
-        }
-        if (BlockCompressedFilePointerUtil.compare(start, firstOffset) < 1 || firstOffset == -1) {
-            this.firstOffset = start;
-        }
-        if (BlockCompressedFilePointerUtil.compare(lastOffset, end) < 1) {
-            this.lastOffset = end;
-        }
-    }
-
-    /**
-     * @param slice
-     */
-    void recordMetaData(Slice slice) {
-
-        final int alignmentStart = slice.alignmentStart;
-        if (alignmentStart == SAMRecord.NO_ALIGNMENT_START) {
-            noCoordinateRecords+=slice.nofRecords;
-            return;
-        }
-
-        final long start = slice.offset;
-        final long end = slice.offset + 0;
-
-        if (slice.alignmentSpan < 1) {
-            unAlignedRecords += slice.nofRecords;
-        } else {
-            alignedRecords += slice.nofRecords;
-        }
-        if (BlockCompressedFilePointerUtil.compare(start, firstOffset) < 1 || firstOffset == -1) {
-            this.firstOffset = start;
-        }
-        if (BlockCompressedFilePointerUtil.compare(lastOffset, end) < 1) {
-            this.lastOffset = end;
-        }
-    }
-
-    /**
-     * Call whenever a reference with no coordinate information is encountered in the bam file
-     */
-    void incrementNoCoordinateRecordCount() {
-        noCoordinateRecords++;
-    }
-
-    /**
-     * Set local variable. Normally noCoordinateRecord count accessed from AbstractBAMFileIndex when reading
-     */
-    private void setNoCoordinateRecordCount(long count) {
-        noCoordinateRecords = count;
-    }
-
-
-    /**
-     * @return the count of records with no coordinate information in the bam file.
-     * Not public, since only used by BAMIndexer when writing bam index.
-     * Readers of bam index should use AbstractBAMFileIndex.getNoCoordinateRecordCount.
-     */
-    long getNoCoordinateRecordCount() {
-        return noCoordinateRecords;
-    }
-
-    /**
-     * @return the first virtual file offset used by this reference
-     */
-    long getFirstOffset() {
-        return firstOffset;
-    }
-
-    /**
-     * @return the last virtual file offset used by this reference
-     */
-    long getLastOffset() {
-        return lastOffset;
-    }
-
-    /**
-     * Prints meta-data statistics from BAM index (.bai) file
-     * Statistics include count of aligned and unaligned reads for each reference sequence
-     * and a count of all records with no start coordinate
-     */
-    static public void printIndexStats(final File inputBamFile) {
-        try {
-            final BAMFileReader bam = new BAMFileReader(inputBamFile, null, false, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory());
-            if (!bam.hasIndex()) {
-                throw new SAMException("No index for bam file " + inputBamFile);
-            }
-            BAMIndexMetaData[] data = getIndexStats(bam);
-            // read through all the bins of every reference.
-            int nRefs = bam.getFileHeader().getSequenceDictionary().size();
-            for (int i = 0; i < nRefs; i++) {
-                final SAMSequenceRecord seq = bam.getFileHeader().getSequence(i);
-                if (seq == null) continue;
-                final String sequenceName = seq.getSequenceName();
-                final int sequenceLength = seq.getSequenceLength();
-                System.out.print(sequenceName + ' ' + "length=\t" + sequenceLength);
-                if (data[i] == null) {
-                    System.out.println();
-                    continue;
-                }
-                System.out.println("\tAligned= " + data[i].getAlignedRecordCount() +
-                        "\tUnaligned= " + data[i].getUnalignedRecordCount());
-            }
-            System.out.println("NoCoordinateCount= " + data[0].getNoCoordinateRecordCount());
-        } catch (IOException e) {
-            throw new SAMException("Exception in getting index statistics", e);
-        }
-    }
-
-    /**
-     * Prints meta-data statistics from BAM index (.bai) file
-     * Statistics include count of aligned and unaligned reads for each reference sequence
-     * and a count of all records with no start coordinate
-     */
-    static public BAMIndexMetaData[] getIndexStats(final BAMFileReader bam) {
-
-        AbstractBAMFileIndex index = (AbstractBAMFileIndex) bam.getIndex();
-        // read through all the bins of every reference.
-        int nRefs = index.getNumberOfReferences();
-        BAMIndexMetaData[] result = new BAMIndexMetaData[nRefs == 0 ? 1 : nRefs];
-        for (int i = 0; i < nRefs; i++) {
-            result[i] = index.getMetaData(i);
-        }
-
-        if (result[0] == null) {
-            result[0] = new BAMIndexMetaData();
-        }
-        final Long noCoordCount = index.getNoCoordinateCount();
-        if (noCoordCount != null)  // null in old index files without metadata
-            result[0].setNoCoordinateRecordCount(noCoordCount);
-
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMIndexWriter.java b/src/main/java/htsjdk/samtools/BAMIndexWriter.java
deleted file mode 100644
index b036b68..0000000
--- a/src/main/java/htsjdk/samtools/BAMIndexWriter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Closeable;
-
-/**
- * A basic interface for writing BAM index files
- *
- * @author mborkan
- */
-interface BAMIndexWriter extends Closeable {  // note - only package visibility
-
-    /**
-     * Write the data for one alignments to one reference sequence
-     *
-     * @param content    BAMIndexContent containing the information for one reference
-     */
-    public void writeReference(final BAMIndexContent content);
-
-    /**
-     * Writes out the count of records without coordinates
-     *
-     * @param count
-     */
-    public void writeNoCoordinateRecordCount(final Long count);
-
-    /**
-     * Any necessary processing at the end of the file
-     */
-    public void close();
-
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/BAMIndexer.java b/src/main/java/htsjdk/samtools/BAMIndexer.java
deleted file mode 100644
index f5b1558..0000000
--- a/src/main/java/htsjdk/samtools/BAMIndexer.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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, sub-license, 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 NON-INFRINGEMENT. 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Log;
-
-import java.io.File;
-import java.io.OutputStream;
-import java.util.function.Function;
-
-/**
- * Class for both constructing BAM index content and writing it out.
- * There are two usage patterns:
- * 1) Building a bam index from an existing bam file
- * 2) Building a bam index while building the bam file
- * In both cases, processAlignment is called for each alignment record and
- * finish() is called at the end.
- */
-public class BAMIndexer {
-
-    // The number of references (chromosomes) in the BAM file
-    private final int numReferences;
-
-    // output written as binary, or (for debugging) as text
-    private final BAMIndexWriter outputWriter;
-
-    private int currentReference = 0;
-
-    // content is built up from the input bam file using this
-    private final BAMIndexBuilder indexBuilder;
-
-    private static final Log log = Log.getInstance(BAMIndexer.class);
-
-    /**
-     * @param output     binary BAM Index (.bai) file
-     * @param fileHeader header for the corresponding bam file
-     */
-    public BAMIndexer(final File output, final SAMFileHeader fileHeader) {
-        this(fileHeader, numRefs -> new BinaryBAMIndexWriter(numRefs, output));
-    }
-
-    /**
-     * Prepare to index a BAM.
-     *
-     * @param output     Index will be written here.  output will be closed when finish() method is called.
-     * @param fileHeader header for the corresponding bam file.
-     */
-    public BAMIndexer(final OutputStream output, final SAMFileHeader fileHeader) {
-        this(fileHeader, numRefs -> new BinaryBAMIndexWriter(numRefs, output));
-    }
-
-    /*
-     * Prepare to index a BAM.
-     *
-     * @param fileHeader header for the corresponding bam file.
-     * @param  createWrite a lambda that, given an Integer numReferences value, will create a BinaryBAMIndexWriter
-     *                     with that value and an appropriate output.
-      */
-    private BAMIndexer(final SAMFileHeader fileHeader, Function<Integer, BinaryBAMIndexWriter> createWriter) {
-        if (fileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            if (fileHeader.getSortOrder() == SAMFileHeader.SortOrder.unsorted) {
-                log.warn("For indexing, the BAM file is required to be coordinate sorted. Attempting to index \"unsorted\" BAM file.");
-            }
-            else {
-                throw new SAMException("Indexing requires a coordinate-sorted input BAM.");
-            }
-        }
-        numReferences = fileHeader.getSequenceDictionary().size();
-        indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary());
-        outputWriter = createWriter.apply(numReferences);
-    }
-
-    /**
-     * Record any index information for a given BAM record.
-     * If this alignment starts a new reference, write out the old reference.
-     * Requires a non-null value for rec.getFileSource().
-     *
-     * @param rec The BAM record
-     */
-    public void processAlignment(final SAMRecord rec) {
-        try {
-            final int reference = rec.getReferenceIndex();
-            if (reference != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && reference != currentReference) {
-                // process any completed references
-                advanceToReference(reference);
-            }
-            indexBuilder.processAlignment(rec);
-        } catch (final Exception e) {
-            throw new SAMException("Exception creating BAM index for record " + rec, e);
-        }
-    }
-
-    /**
-     * After all the alignment records have been processed, finish is called.
-     * Writes any final information and closes the output file.
-     */
-    public void finish() {
-        // process any remaining references
-        advanceToReference(numReferences);
-        outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount());
-        outputWriter.close();
-    }
-
-    /** write out any references between the currentReference and the nextReference */
-    private void advanceToReference(final int nextReference) {
-        while (currentReference < nextReference) {
-            final BAMIndexContent content = indexBuilder.processReference(currentReference);
-            outputWriter.writeReference(content);
-            currentReference++;
-            if (currentReference < numReferences) {
-                indexBuilder.startNewReference();
-            }
-        }
-    }
-
-    /**
-     * Generates a BAM index file, either textual or binary, from an input BAI file.
-     * Only used for testing, but located here for visibility into CachingBAMFileIndex.
-     *
-     * @param output     BAM Index (.bai) file (or bai.txt file when text)
-     * @param textOutput Whether to create text output or binary
-     */
-    static public void createAndWriteIndex(final File input, final File output, final boolean textOutput) {
-
-        // content is from an existing bai file.
-
-        final CachingBAMFileIndex existingIndex = new CachingBAMFileIndex(input, null);
-        final int n_ref = existingIndex.getNumberOfReferences();
-        final BAMIndexWriter outputWriter;
-        if (textOutput) {
-            outputWriter = new TextualBAMIndexWriter(n_ref, output);
-        } else {
-            outputWriter = new BinaryBAMIndexWriter(n_ref, output);
-        }
-
-        // write the content one reference at a time
-        try {
-            for (int i = 0; i < n_ref; i++) {
-                outputWriter.writeReference(existingIndex.getQueryResults(i));
-            }
-            outputWriter.writeNoCoordinateRecordCount(existingIndex.getNoCoordinateCount());
-            outputWriter.close();
-
-        } catch (final Exception e) {
-            throw new SAMException("Exception creating BAM index", e);
-        }
-    }
-
-    /**
-     * Class for constructing BAM index files.
-     * One instance is used to construct an entire index.
-     * processAlignment is called for each alignment until a new reference is encountered, then
-     * processReference is called when all records for the reference have been processed.
-     */
-    private class BAMIndexBuilder {
-
-        private final SAMSequenceDictionary sequenceDictionary;
-
-        private BinningIndexBuilder binningIndexBuilder;
-
-        private int currentReference = -1;
-
-        // information in meta data
-        private final BAMIndexMetaData indexStats = new BAMIndexMetaData();
-
-        BAMIndexBuilder(final SAMSequenceDictionary sequenceDictionary) {
-            this.sequenceDictionary = sequenceDictionary;
-            if (!sequenceDictionary.isEmpty()) startNewReference();
-        }
-
-        /**
-         * Record any index information for a given BAM record
-         *
-         * @param rec The BAM record. Requires rec.getFileSource() is non-null.
-         */
-        public void processAlignment(final SAMRecord rec) {
-
-            // metadata
-            indexStats.recordMetaData(rec);
-
-            if (rec.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START) {
-                return; // do nothing for records without coordinates, but count them
-            }
-
-            // various checks
-            final int reference = rec.getReferenceIndex();
-            if (reference != currentReference) {
-                throw new SAMException("Unexpected reference " + reference +
-                        " when constructing index for " + currentReference + " for record " + rec);
-            }
-
-            binningIndexBuilder.processFeature(new BinningIndexBuilder.FeatureToBeIndexed() {
-                @Override
-                public int getStart() {
-                    return rec.getAlignmentStart();
-                }
-
-                @Override
-                public int getEnd() {
-                    return rec.getAlignmentEnd();
-                }
-
-                @Override
-                public Integer getIndexingBin() {
-                    final Integer binNumber = rec.getIndexingBin();
-                    return (binNumber == null ? rec.computeIndexingBin() : binNumber);
-
-                }
-
-                @Override
-                public Chunk getChunk() {
-                    final SAMFileSource source = rec.getFileSource();
-                    if (source == null) {
-                        throw new SAMException("No source (virtual file offsets); needed for indexing on BAM Record " + rec);
-                    }
-                    return ((BAMFileSpan) source.getFilePointer()).getSingleChunk();
-                }
-            });
-
-        }
-
-        /**
-         * Creates the BAMIndexContent for this reference.
-         * Requires all alignments of the reference have already been processed.
-         *
-         * @return Null if there are no features for this reference.
-         */
-        public BAMIndexContent processReference(final int reference) {
-
-            if (reference != currentReference) {
-                throw new SAMException("Unexpected reference " + reference + " when constructing index for " + currentReference);
-            }
-
-            final BinningIndexContent indexContent = binningIndexBuilder.generateIndexContent();
-            if (indexContent == null) return null;
-            return new BAMIndexContent(indexContent.getReferenceSequence(), indexContent.getBins(),
-                    indexStats, indexContent.getLinearIndex());
-
-        }
-
-        /**
-         * @return the count of records with no coordinate positions
-         */
-        public long getNoCoordinateRecordCount() {
-            return indexStats.getNoCoordinateRecordCount();
-        }
-
-        /**
-         * reinitialize all data structures when the reference changes
-         */
-        void startNewReference() {
-            ++currentReference;
-            // I'm not crazy about recycling this object, but that is the way it was originally written and
-            // it helps keep track of no-coordinate read count (which shouldn't be stored in this class anyway).
-            indexStats.newReference();
-            binningIndexBuilder = new BinningIndexBuilder(currentReference,
-                    sequenceDictionary.getSequence(currentReference).getSequenceLength());
-        }
-    }
-
-    /**
-     * Generates a BAM index file from an input BAM file
-     *
-     * @param reader SamReader for input BAM file
-     * @param output File for output index file
-     */
-    public static void createIndex(SamReader reader, File output) {
-        createIndex(reader, output, null);
-    }
-
-    /**
-     * Generates a BAM index file from an input BAM file
-     *
-     * @param reader SamReader for input BAM file
-     * @param output File for output index file
-     */
-    public static void createIndex(SamReader reader, File output, Log log) {
-
-        BAMIndexer indexer = new BAMIndexer(output, reader.getFileHeader());
-
-        long totalRecords = 0;
-
-        // create and write the content
-        for (SAMRecord rec : reader) {
-            if (++totalRecords % 1000000 == 0) {
-                if (null != log) log.info(totalRecords + " reads processed ...");
-            }
-            indexer.processAlignment(rec);
-        }
-        indexer.finish();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMIteratorFilter.java b/src/main/java/htsjdk/samtools/BAMIteratorFilter.java
deleted file mode 100644
index bc7d2c0..0000000
--- a/src/main/java/htsjdk/samtools/BAMIteratorFilter.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package htsjdk.samtools;
-
-
-/**
- * Interface implemented by filetering iterators used for BAM/CRAM readers.
- */
-interface BAMIteratorFilter {
-    public enum IntervalComparison {
-        BEFORE, AFTER, OVERLAPPING, CONTAINED
-    }
-
-    /**
-     * Type returned by BAMIteratorFilter that tell iterators implementing this interface
-     * how to handle each SAMRecord.
-     */
-    public enum FilteringIteratorState {
-        MATCHES_FILTER, STOP_ITERATION, CONTINUE_ITERATION
-    }
-
-    /**
-     * Determine if given record passes the filter, and if it does not, whether iteration
-     * should continue or if this record is beyond the region(s) of interest.
-     */
-    FilteringIteratorState compareToFilter(final SAMRecord record);
-}
-
diff --git a/src/main/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilter.java b/src/main/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilter.java
deleted file mode 100644
index 8dadc69..0000000
--- a/src/main/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CoordMath;
-
-/**
- * Filters out records that do not match any of the given intervals and query type.
- */
-public class BAMQueryMultipleIntervalsIteratorFilter implements BAMIteratorFilter {
-    final QueryInterval[] intervals;
-    final boolean contained;
-    int intervalIndex = 0;
-
-
-    public BAMQueryMultipleIntervalsIteratorFilter(final QueryInterval[] intervals,
-                                                   final boolean contained) {
-        this.contained = contained;
-        this.intervals = intervals;
-    }
-
-    @Override
-    public FilteringIteratorState compareToFilter(final SAMRecord record) {
-        while (intervalIndex < intervals.length) {
-            final IntervalComparison comparison = compareIntervalToRecord(intervals[intervalIndex], record);
-            switch (comparison) {
-                // Interval is before SAMRecord.  Try next interval;
-                case BEFORE: ++intervalIndex; break;
-                // Interval is after SAMRecord.  Keep scanning forward in SAMRecords
-                case AFTER: return FilteringIteratorState.CONTINUE_ITERATION;
-                // Found a good record
-                case CONTAINED: return FilteringIteratorState.MATCHES_FILTER;
-                // Either found a good record, or else keep scanning SAMRecords
-                case OVERLAPPING: return
-                        (contained ? FilteringIteratorState.CONTINUE_ITERATION : FilteringIteratorState.MATCHES_FILTER);
-            }
-        }
-        // Went past the last interval
-        return FilteringIteratorState.STOP_ITERATION;
-    }
-
-    public static IntervalComparison compareIntervalToRecord(final QueryInterval interval, final SAMRecord record) {
-        // interval.end <= 0 implies the end of the reference sequence.
-        final int intervalEnd = (interval.end <= 0? Integer.MAX_VALUE: interval.end);
-        final int alignmentEnd;
-        if (record.getReadUnmappedFlag() && record.getAlignmentStart() != SAMRecord.NO_ALIGNMENT_START) {
-            // Unmapped read with coordinate of mate.
-            alignmentEnd = record.getAlignmentStart();
-        } else {
-            alignmentEnd = record.getAlignmentEnd();
-        }
-
-        if (interval.referenceIndex < record.getReferenceIndex()) return IntervalComparison.BEFORE;
-        else if (interval.referenceIndex > record.getReferenceIndex()) return IntervalComparison.AFTER;
-        else if (intervalEnd < record.getAlignmentStart()) return IntervalComparison.BEFORE;
-        else if (alignmentEnd < interval.start) return IntervalComparison.AFTER;
-        else if (CoordMath.encloses(interval.start, intervalEnd, record.getAlignmentStart(), alignmentEnd)) {
-            return IntervalComparison.CONTAINED;
-        } else return IntervalComparison.OVERLAPPING;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMRecord.java b/src/main/java/htsjdk/samtools/BAMRecord.java
deleted file mode 100644
index c45566f..0000000
--- a/src/main/java/htsjdk/samtools/BAMRecord.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.StringUtil;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-
-/**
- * Wrapper class for binary BAM records.
- * Delays unpacking all data binary until requested.
- */
-public class BAMRecord extends SAMRecord {
-    /**
-     * Offset of the read name in the variable length section of the disk representation of BAMRecord
-     */
-    private static final int READ_NAME_OFFSET = 0;
-
-    /**
-     * Variable-length part of BAMRecord.  Lazily decoded.
-     */
-    private byte[] mRestOfBinaryData = null;
-
-    // Various lengths are stored, because they are in the fixed-length part of the BAMRecord, and it is
-    // more efficient to remember them than decode the element they store the length of.
-    // The length becomes invalid if the element is changed with a set() method.
-    private int mReadLength = 0;
-    private boolean mReadLengthValid = true;
-    private final short mReadNameLength;
-    private boolean mReadNameLengthValid = true;
-    private final int mCigarLength;
-    private boolean mCigarLengthValid = true;
-
-    // Whether or not the getter needs to decode the corresponding element.
-    // For all the other variable length elements, null == not yet decoded.
-    private boolean mAttributesDecoded = false;
-    private boolean mCigarDecoded = false;
-
-    /**
-     * If any of the properties set from mRestOfBinaryData have been overridden by calls to setters,
-     * this is set to true, indicating that mRestOfBinaryData cannot be used to write this record to disk.
-     */
-    private boolean mBinaryDataStale;
-
-    /**
-     * Create a new BAM Record. If the reference sequence index or mate reference sequence index are any value other
-     * than NO_ALIGNMENT_REFERENCE_INDEX (-1), then the specified index values must exist in the sequence dictionary
-     * in the header argument.
-     */
-    protected BAMRecord(final SAMFileHeader header,
-                        final int referenceID,
-                        final int coordinate,
-                        final short readNameLength,
-                        final short mappingQuality,
-                        final int indexingBin,
-                        final int cigarLen,
-                        final int flags,
-                        final int readLen,
-                        final int mateReferenceID,
-                        final int mateCoordinate,
-                        final int insertSize,
-                        final byte[] restOfData) {
-        super(header);
-        setReferenceIndex(referenceID);
-        setAlignmentStart(coordinate);
-        mReadNameLength = readNameLength;
-        setMappingQuality(mappingQuality);
-        mCigarLength = cigarLen;
-        setFlags(flags);
-        mReadLength = readLen;
-        setMateReferenceIndex(mateReferenceID);
-        setMateAlignmentStart(mateCoordinate);
-        setInferredInsertSize(insertSize);
-        mRestOfBinaryData = restOfData;
-
-        // Set these to null in order to mark them as being candidates for lazy initialization.
-        // If this is not done, they will have non-null defaults.
-        super.setReadName(null);
-        super.setCigarString(null);
-        super.setReadBases(null);
-        super.setBaseQualities(null);
-
-        // Do this after the above because setCigarString will clear it.
-        setIndexingBin(indexingBin);
-
-        // Mark the binary block as being valid for writing back out to disk
-        mBinaryDataStale = false;
-    }
-
-    /**
-     * Force all the lazily-initialized attributes to be decoded.
-     */
-    protected void eagerDecode() {
-        getReadName();
-        getCigar();
-        getReadBases();
-        getBaseQualities();
-        getBinaryAttributes();
-        super.eagerDecode();
-        mRestOfBinaryData = null;
-    }
-
-    /**
-     * If this record has a valid binary representation of the variable-length portion of a binary record stored,
-     * return that byte array, otherwise return null.  This will never be true for SAMRecords.  It will be true
-     * for BAMRecords that have not been eagerDecoded(), and for which none of the data in the variable-length
-     * portion has been changed.
-     */
-    @Override
-    public byte[] getVariableBinaryRepresentation() {
-        if (mBinaryDataStale) {
-            return null;
-        }
-        // This may have been set to null by eagerDecode()
-        return mRestOfBinaryData;
-    }
-
-    /**
-     * Depending on the concrete implementation, the binary file size of attributes may be known without
-     * computing them all.
-     *
-     * @return binary file size of attribute, if known, else -1.
-     */
-    @Override
-    public int getAttributesBinarySize() {
-        if (mBinaryDataStale || mRestOfBinaryData == null) {
-            return -1;
-        }
-        final int tagsOffset = readNameSize() + cigarSize() + basesSize() + qualsSize();
-        return mRestOfBinaryData.length - tagsOffset;
-    }
-
-    @Override
-    public void setReadName(final String value) {
-        super.setReadName(value);
-        mBinaryDataStale = true;
-        mReadNameLengthValid = false;
-    }
-
-    @Override
-    public void setCigar(final Cigar cigar) {
-        super.setCigar(cigar);
-        mBinaryDataStale = true;
-        mCigarLengthValid = false;
-        mCigarDecoded = true;
-    }
-
-    @Override
-    public void setCigarString(final String value) {
-        super.setCigarString(value);
-        mBinaryDataStale = true;
-        mCigarLengthValid = false;
-        mCigarDecoded = true;
-    }
-
-    @Override
-    public void setReadBases(final byte[] value) {
-        super.setReadBases(value);
-        mBinaryDataStale = true;
-        mReadLengthValid = false;
-    }
-
-    @Override
-    public void setBaseQualities(final byte[] value) {
-        super.setBaseQualities(value);
-        mBinaryDataStale = true;
-    }
-
-    @Override
-    protected void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
-        // populate all the attributes from the binary block before overwriting one
-        getBinaryAttributes();
-        super.setAttribute(tag, value, isUnsignedArray);
-        mBinaryDataStale = true;
-    }
-
-    /**
-     * Removes all attributes.
-     */
-    @Override
-    public void clearAttributes() {
-        mAttributesDecoded = true;
-        mBinaryDataStale = true;
-        super.clearAttributes();
-    }
-
-    /**
-     * Avoids decoding binary block to get read length.
-     */
-    @Override
-    public int getReadLength() {
-        if (mReadLengthValid) {
-            return mReadLength;
-        }
-        return super.getReadLength();
-    }
-
-    @Override
-    public String getReadName() {
-        String result = super.getReadName();
-        if (mRestOfBinaryData != null && result == null) {
-            result = decodeReadName();
-            super.setReadName(result);
-        }
-        return result;
-    }
-
-    /**
-     * Avoids decoding read name to get read name length.  Do not include null terminator.
-     */
-    @Override
-    public int getReadNameLength() {
-        if (mReadNameLengthValid) {
-            return mReadNameLength - 1;
-        }
-        return super.getReadNameLength();
-    }
-
-    @Override
-    public Cigar getCigar() {
-        if (mRestOfBinaryData != null && !mCigarDecoded) {
-            final int cigarOffset = readNameSize();
-            final ByteBuffer byteBuffer  = ByteBuffer.wrap(mRestOfBinaryData, cigarOffset, cigarSize());
-            byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-            super.initializeCigar(BinaryCigarCodec.decode(byteBuffer));
-            mCigarDecoded = true;
-            if (null != getHeader() && getValidationStringency() != ValidationStringency.SILENT && !this.getReadUnmappedFlag()) {
-                // Don't know line number, and don't want to force read name to be decoded.
-                SAMUtils.processValidationErrors(validateCigar(-1L), -1, getValidationStringency());
-            }
-        }
-        return super.getCigar();
-    }
-
-    /**
-     * Avoids decoding CIGAR in order to get length.
-     */
-    @Override
-    public int getCigarLength() {
-        if (mCigarLengthValid) {
-            return mCigarLength;
-        } else {
-            return super.getCigarLength();
-        }
-    }
-
-    @Override
-    public byte[] getReadBases() {
-        byte[] result = super.getReadBases();
-        if (mRestOfBinaryData != null && result == null) {
-            result = decodeReadBases();
-            super.setReadBases(result);
-        }
-        return result;
-    }
-
-    @Override
-    public byte[] getBaseQualities() {
-        byte[] ret = super.getBaseQualities();
-        if (mRestOfBinaryData != null && ret == null) {
-            ret = decodeBaseQualities();
-            super.setBaseQualities(ret);
-        }
-        return ret;
-    }
-
-    @Override
-    public Object getAttribute(final short tag) {
-        if (!mAttributesDecoded) {
-            decodeAttributes();
-        }
-        return super.getAttribute(tag);
-    }
-
-    @Override
-    protected SAMBinaryTagAndValue getBinaryAttributes() {
-        if (!mAttributesDecoded) {
-            decodeAttributes();
-        }
-        return super.getBinaryAttributes();
-    }
-
-    private void decodeAttributes() {
-        if (mAttributesDecoded) {
-            return;
-        }
-        mAttributesDecoded = true;
-        final int tagsOffset = readNameSize() + cigarSize() + basesSize() + qualsSize();
-        final int tagsSize = mRestOfBinaryData.length - tagsOffset;
-        final SAMBinaryTagAndValue attributes = BinaryTagCodec.readTags(mRestOfBinaryData, tagsOffset, tagsSize, getValidationStringency());
-        setAttributes(attributes);
-    }
-
-    private byte[] decodeBaseQualities() {
-        if (mReadLength == 0) {
-            return SAMRecord.NULL_QUALS;
-        }
-        final int qualsOffset = readNameSize() + cigarSize() + basesSize();
-        final byte[] ret = new byte[qualsSize()];
-        System.arraycopy(mRestOfBinaryData, qualsOffset, ret, 0, qualsSize());
-        if (ret.length > 0 && ret[0] == (byte) 0xFF) {
-            // BAM files store missing qualities as an array of 0xFF bytes.
-            // 0xFF is an illegal quality score value (it cannot be encoded in SAM)
-            // and so the first byte is a suitable marker.
-            // We hide this quirk of the BAM encoding so that the BAM interface looks the same as SAM.
-            return NULL_QUALS;
-        }
-        return ret;
-    }
-
-    private String decodeReadName() {
-        // Don't include terminating null
-        return StringUtil.bytesToString(mRestOfBinaryData, READ_NAME_OFFSET, mReadNameLength-1);
-    }
-
-    private byte[] decodeReadBases() {
-        if (mReadLength == 0) {
-            return NULL_SEQUENCE;
-        }
-        final int basesOffset = readNameSize() + cigarSize();
-        return SAMUtils.compressedBasesToBytes(mReadLength, mRestOfBinaryData, basesOffset);
-    }
-
-    /* methods for computing disk size of variably-sized elements, in order to locate
-     * elements in mRestOfBinaryData */
-
-    private int readNameSize() {
-        return mReadNameLength;
-    }
-
-    private int cigarSize() {
-        return mCigarLength * 4;
-    }
-
-    private int basesSize() {
-        return (mReadLength + 1)/2;
-    }
-
-    private int qualsSize() {
-        return mReadLength;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BAMRecordCodec.java b/src/main/java/htsjdk/samtools/BAMRecordCodec.java
deleted file mode 100644
index dc1ca81..0000000
--- a/src/main/java/htsjdk/samtools/BAMRecordCodec.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.RuntimeEOFException;
-import htsjdk.samtools.util.SortingCollection;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-/**
- * Class for translating between in-memory and disk representation of BAMRecord.
- */
-public class BAMRecordCodec implements SortingCollection.Codec<SAMRecord> {
-    private final SAMFileHeader header;
-    private final BinaryCodec binaryCodec = new BinaryCodec();
-    private final BinaryTagCodec binaryTagCodec = new BinaryTagCodec(binaryCodec);
-    private final SAMRecordFactory samRecordFactory;
-
-    public BAMRecordCodec(final SAMFileHeader header) {
-        this(header, new DefaultSAMRecordFactory());
-    }
-
-    public BAMRecordCodec(final SAMFileHeader header, final SAMRecordFactory factory) {
-        this.header = header;
-        this.samRecordFactory = factory;
-    }
-
-    public BAMRecordCodec clone() {
-        // Do not clone the references to codecs, as they must be distinct for each instance.
-        return new BAMRecordCodec(this.header, this.samRecordFactory);
-    }
-
-
-    /** Sets the output stream that records will be written to. */
-    public void setOutputStream(final OutputStream os) {
-        this.binaryCodec.setOutputStream(os);
-    }
-
-    /** Sets the output stream that records will be written to. */
-    public void setOutputStream(final OutputStream os, final String filename) {
-        this.binaryCodec.setOutputStream(os);
-        this.binaryCodec.setOutputFileName(filename);
-    }
-
-    /** Sets the input stream that records will be read from. */
-    public void setInputStream(final InputStream is) {
-        this.binaryCodec.setInputStream(is);
-    }
-
-    /** Sets the input stream that records will be read from. */
-    public void setInputStream(final InputStream is, final String filename) {
-        this.binaryCodec.setInputStream(is);
-        this.binaryCodec.setInputFileName(filename);
-    }
-
-    /**
-     * Write object to OutputStream.
-     * Reference and mate reference indices must be resolvable, which either means that these have been set into the
-     * SAMRecord directly, or the SAMRecord must have a header assigned into it so that reference names can be
-     * resolved into indices.
-     *
-     * @param alignment Record to be written.
-     */
-    public void encode(final SAMRecord alignment) {
-        // Compute block size, as it is the first element of the file representation of SAMRecord
-        final int readLength = alignment.getReadLength();
-
-        final int cigarLength = alignment.getCigarLength();
-
-        int blockSize = BAMFileConstants.FIXED_BLOCK_SIZE + alignment.getReadNameLength() + 1  + // null terminated
-                        cigarLength * 4 +
-                        (readLength + 1) / 2 + // 2 bases per byte, round up
-                        readLength;
-
-        final int attributesSize = alignment.getAttributesBinarySize();
-        if (attributesSize != -1) {
-            // binary attribute size already known, don't need to compute.
-            blockSize += attributesSize;
-        } else {
-            SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
-            while (attribute != null) {
-                blockSize += (BinaryTagCodec.getTagSize(attribute.value));
-                attribute = attribute.getNext();
-            }
-        }
-
-        int indexBin = 0;
-        if (alignment.getReferenceIndex() >= 0) {
-            if (alignment.getIndexingBin() != null) {
-                indexBin = alignment.getIndexingBin();
-            } else {
-                indexBin = alignment.computeIndexingBin();
-            }
-        }
-
-        // Blurt out the elements
-        this.binaryCodec.writeInt(blockSize);
-        this.binaryCodec.writeInt(alignment.getReferenceIndex());
-        // 0-based!!
-        this.binaryCodec.writeInt(alignment.getAlignmentStart() - 1);
-        this.binaryCodec.writeUByte((short)(alignment.getReadNameLength() + 1));
-        this.binaryCodec.writeUByte((short)alignment.getMappingQuality());
-        this.binaryCodec.writeUShort(indexBin);
-        this.binaryCodec.writeUShort(cigarLength);
-        this.binaryCodec.writeUShort(alignment.getFlags());
-        this.binaryCodec.writeInt(alignment.getReadLength());
-        this.binaryCodec.writeInt(alignment.getMateReferenceIndex());
-        this.binaryCodec.writeInt(alignment.getMateAlignmentStart() - 1);
-        this.binaryCodec.writeInt(alignment.getInferredInsertSize());
-        final byte[] variableLengthBinaryBlock = alignment.getVariableBinaryRepresentation();
-        if (variableLengthBinaryBlock != null) {
-            // Don't need to encode variable-length block, because it is unchanged from
-            // when the record was read from a BAM file.
-            this.binaryCodec.writeBytes(variableLengthBinaryBlock);
-        } else {
-            if (alignment.getReadLength() != alignment.getBaseQualities().length &&
-                alignment.getBaseQualities().length != 0) {
-                throw new RuntimeException("Mismatch between read length and quals length writing read " +
-                alignment.getReadName() + "; read length: " + alignment.getReadLength() +
-                "; quals length: " + alignment.getBaseQualities().length);
-            }
-            this.binaryCodec.writeString(alignment.getReadName(), false, true);
-            final int[] binaryCigar = BinaryCigarCodec.encode(alignment.getCigar());
-            for (final int cigarElement : binaryCigar) {
-                // Assumption that this will fit into an integer, despite the fact
-                // that it is specced as a uint.
-                this.binaryCodec.writeInt(cigarElement);
-            }
-            this.binaryCodec.writeBytes(SAMUtils.bytesToCompressedBases(alignment.getReadBases()));
-            byte[] qualities = alignment.getBaseQualities();
-            if (qualities.length == 0) {
-                qualities = new byte[alignment.getReadLength()];
-                Arrays.fill(qualities, (byte) 0xFF);
-            }
-            this.binaryCodec.writeBytes(qualities);
-            SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
-            while (attribute != null) {
-                this.binaryTagCodec.writeTag(attribute.tag, attribute.value, attribute.isUnsignedArray());
-                attribute = attribute.getNext();
-            }
-        }
-    }
-
-    /**
-     * Read the next record from the input stream and convert into a java object.
-     *
-     * @return null if no more records.  Should throw exception if EOF is encountered in the middle of
-     *         a record.
-     */
-    public SAMRecord decode() {
-        int recordLength = 0;
-        try {
-            recordLength = this.binaryCodec.readInt();
-        }
-        catch (RuntimeEOFException e) {
-            return null;
-        }
-
-        if (recordLength < BAMFileConstants.FIXED_BLOCK_SIZE) {
-            throw new SAMFormatException("Invalid record length: " + recordLength);
-        }
-        
-        final int referenceID = this.binaryCodec.readInt();
-        final int coordinate = this.binaryCodec.readInt() + 1;
-        final short readNameLength = this.binaryCodec.readUByte();
-        final short mappingQuality = this.binaryCodec.readUByte();
-        final int bin = this.binaryCodec.readUShort();
-        final int cigarLen = this.binaryCodec.readUShort();
-        final int flags = this.binaryCodec.readUShort();
-        final int readLen = this.binaryCodec.readInt();
-        final int mateReferenceID = this.binaryCodec.readInt();
-        final int mateCoordinate = this.binaryCodec.readInt() + 1;
-        final int insertSize = this.binaryCodec.readInt();
-        final byte[] restOfRecord = new byte[recordLength - BAMFileConstants.FIXED_BLOCK_SIZE];
-        this.binaryCodec.readBytes(restOfRecord);
-        final BAMRecord ret = this.samRecordFactory.createBAMRecord(
-                header, referenceID, coordinate, readNameLength, mappingQuality,
-                bin, cigarLen, flags, readLen, mateReferenceID, mateCoordinate, insertSize, restOfRecord);
-
-        if (null != header) {
-            // don't reset a null header as this will clobber the reference and mate reference indices
-            ret.setHeader(header);
-        }
-        return ret;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BamFileIoUtils.java b/src/main/java/htsjdk/samtools/BamFileIoUtils.java
deleted file mode 100644
index b5c587a..0000000
--- a/src/main/java/htsjdk/samtools/BamFileIoUtils.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BlockCompressedFilePointerUtil;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.BlockCompressedStreamConstants;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.Md5CalculatingOutputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-public class BamFileIoUtils {
-    private static final Log LOG = Log.getInstance(BamFileIoUtils.class);
-
-    public static final String BAM_FILE_EXTENSION = ".bam";
-
-    public static boolean isBamFile(final File file) {
-        return ((file != null) && file.getName().endsWith(BAM_FILE_EXTENSION));
-    }
-
-    public static void reheaderBamFile(final SAMFileHeader samFileHeader, final File inputFile, final File outputFile) {
-        reheaderBamFile(samFileHeader, inputFile, outputFile, true, true);
-    }
-
-    /**
-     * Copy a BAM file but replacing the header
-     *
-     * @param samFileHeader The header to use in the new file
-     * @param inputFile     The BAM file to copy, sans header
-     * @param outputFile    The new BAM file, constructed with the new header and the content from inputFile
-     * @param createMd5     Whether or not to create an MD5 file for the new BAM
-     * @param createIndex   Whether or not to create an index file for the new BAM
-     */
-    public static void reheaderBamFile(final SAMFileHeader samFileHeader, final File inputFile, final File outputFile, final boolean createMd5, final boolean createIndex) {
-        IOUtil.assertFileIsReadable(inputFile);
-        IOUtil.assertFileIsWritable(outputFile);
-
-        try {
-            BlockCompressedInputStream.assertNonDefectiveFile(inputFile);
-            assertSortOrdersAreEqual(samFileHeader, inputFile);
-
-            final OutputStream outputStream = buildOutputStream(outputFile, createMd5, createIndex);
-
-            BAMFileWriter.writeHeader(outputStream, samFileHeader);
-            blockCopyBamFile(inputFile, outputStream, true, false);
-
-            CloserUtil.close(inputFile);
-            outputStream.close();
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-
-    /**
-     * Copy data from a BAM file to an OutputStream by directly copying the gzip blocks
-     *
-     * @param inputFile      The file to be copied
-     * @param outputStream   The stream to write the copied data to
-     * @param skipHeader     If true, the header of the input file will not be copied to the output stream
-     * @param skipTerminator If true, the terminator block of the input file will not be written to the output stream
-     */
-    public static void blockCopyBamFile(final File inputFile, final OutputStream outputStream, final boolean skipHeader, final boolean skipTerminator) {
-        FileInputStream in = null;
-        try {
-            in = new FileInputStream(inputFile);
-
-            // a) It's good to check that the end of the file is valid and b) we need to know if there's a terminator block and not copy it if skipTerminator is true
-            final BlockCompressedInputStream.FileTermination term = BlockCompressedInputStream.checkTermination(inputFile);
-            if (term == BlockCompressedInputStream.FileTermination.DEFECTIVE)
-                throw new SAMException(inputFile.getAbsolutePath() + " does not have a valid GZIP block at the end of the file.");
-
-            if (skipHeader) {
-                final long vOffsetOfFirstRecord = SAMUtils.findVirtualOffsetOfFirstRecordInBam(inputFile);
-                final BlockCompressedInputStream blockIn = new BlockCompressedInputStream(inputFile);
-                blockIn.seek(vOffsetOfFirstRecord);
-                final long remainingInBlock = blockIn.available();
-
-                // If we found the end of the header then write the remainder of this block out as a
-                // new gzip block and then break out of the while loop
-                if (remainingInBlock >= 0) {
-                    final BlockCompressedOutputStream blockOut = new BlockCompressedOutputStream(outputStream, null);
-                    IOUtil.transferByStream(blockIn, blockOut, remainingInBlock);
-                    blockOut.flush();
-                    // Don't close blockOut because closing underlying stream would break everything
-                }
-
-                long pos = BlockCompressedFilePointerUtil.getBlockAddress(blockIn.getFilePointer());
-                blockIn.close();
-                while (pos > 0) {
-                    pos -= in.skip(pos);
-                }
-            }
-
-            // Copy remainder of input stream into output stream
-            final long currentPos = in.getChannel().position();
-            final long length = inputFile.length();
-            final long skipLast = ((term == BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK) && skipTerminator) ?
-                    BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length : 0;
-            final long bytesToWrite = length - skipLast - currentPos;
-
-            IOUtil.transferByStream(in, outputStream, bytesToWrite);
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        } finally {
-            CloserUtil.close(in);
-        }
-    }
-
-    /**
-     * Assumes that all inputs and outputs are block compressed VCF files and copies them without decompressing and parsing
-     * most of the gzip blocks. Will decompress and parse blocks up to the one containing the end of the header in each file
-     * (often the first block) and re-compress any data remaining in that block into a new block in the output file. Subsequent
-     * blocks (excluding a terminator block if present) are copied directly from input to output.
-     */
-    public static void gatherWithBlockCopying(final List<File> bams, final File output, final boolean createIndex, final boolean createMd5) {
-        try {
-            OutputStream out = new FileOutputStream(output);
-            if (createMd5) out = new Md5CalculatingOutputStream(out, new File(output.getAbsolutePath() + ".md5"));
-            File indexFile = null;
-            if (createIndex) {
-                indexFile = new File(output.getParentFile(), IOUtil.basename(output) + BAMIndex.BAMIndexSuffix);
-                out = new StreamInflatingIndexingOutputStream(out, indexFile);
-            }
-
-            boolean isFirstFile = true;
-
-            for (final File f : bams) {
-                LOG.info(String.format("Block copying %s ...", f.getAbsolutePath()));
-                blockCopyBamFile(f, out, !isFirstFile, true);
-                isFirstFile = false;
-            }
-
-            // And lastly add the Terminator block and close up
-            out.write(BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK);
-            out.close();
-
-            // It is possible that the modified time on the index file is ever so slightly older than the original BAM file
-            // and this makes ValidateSamFile unhappy.
-            if (createIndex && (output.lastModified() > indexFile.lastModified())) {
-                final boolean success = indexFile.setLastModified(System.currentTimeMillis());
-                if (!success) {
-                    System.err.print(String.format("Index file is older than BAM file for %s and unable to resolve this", output.getAbsolutePath()));
-                }
-            }
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-
-    private static OutputStream buildOutputStream(final File outputFile, final boolean createMd5, final boolean createIndex) throws IOException {
-        OutputStream outputStream = new FileOutputStream(outputFile);
-        if (createMd5) {
-            outputStream = new Md5CalculatingOutputStream(outputStream, new File(outputFile.getAbsolutePath() + ".md5"));
-        }
-        if (createIndex) {
-            outputStream = new StreamInflatingIndexingOutputStream(outputStream, new File(outputFile.getParentFile(), IOUtil.basename(outputFile) + BAMIndex.BAMIndexSuffix));
-        }
-        return outputStream;
-    }
-
-    private static void assertSortOrdersAreEqual(final SAMFileHeader newHeader, final File inputFile) throws IOException {
-        final SamReader reader = SamReaderFactory.makeDefault().open(inputFile);
-        final SAMFileHeader origHeader = reader.getFileHeader();
-        final SAMFileHeader.SortOrder newSortOrder = newHeader.getSortOrder();
-        if (newSortOrder != SAMFileHeader.SortOrder.unsorted && newSortOrder != origHeader.getSortOrder()) {
-            throw new SAMException("Sort order of new header does not match the original file, needs to be " + origHeader.getSortOrder());
-        }
-        reader.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BamIndexValidator.java b/src/main/java/htsjdk/samtools/BamIndexValidator.java
deleted file mode 100644
index fb1c8d8..0000000
--- a/src/main/java/htsjdk/samtools/BamIndexValidator.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Class to validate (at two different levels of thoroughness) the index for a BAM file.
- *
- * This class is [<em>not</em>] thread safe [because it is immutable].
- */
-public class BamIndexValidator {
-
-    public enum IndexValidationStringency {
-        EXHAUSTIVE, LESS_EXHAUSTIVE, NONE
-    }
-
-    public static int exhaustivelyTestIndex(final SamReader reader) { // throws Exception {
-        // look at all chunk offsets in a linear index to make sure they are valid
-
-        if (reader.indexing().hasBrowseableIndex()) {
-
-            // content is from an existing bai file
-            final CachingBAMFileIndex existingIndex = (CachingBAMFileIndex) reader.indexing().getBrowseableIndex(); // new CachingBAMFileIndex(inputBai, null);
-            final int numRefs = existingIndex.getNumberOfReferences();
-
-            int chunkCount = 0;
-            int indexCount = 0;
-            for (int i = 0; i < numRefs; i++) {
-                final BAMIndexContent content = existingIndex.getQueryResults(i);
-                for (final Chunk c : content.getAllChunks()) {
-                    final CloseableIterator<SAMRecord> iter = ((SamReader.PrimitiveSamReaderToSamReaderAdapter) reader).iterator(new BAMFileSpan(c));
-                    chunkCount++;
-                    SAMRecord sam = null;
-                    try {
-                        sam = iter.next();
-                        iter.close();
-                    } catch (final Exception e) {
-                        throw new SAMException("Exception in BamIndexValidator. Last good record " + sam + " in chunk " + c + " chunkCount=" + chunkCount, e);
-                    }
-                }
-                // also seek to every position in the linear index
-                // final BAMRecordCodec bamRecordCodec = new BAMRecordCodec(reader.getFileHeader());
-                // bamRecordCodec.setInputStream(reader.getInputStream());
-
-                final LinearIndex linearIndex = content.getLinearIndex();
-                for (final long l : linearIndex.getIndexEntries()) {
-                    try {
-                        if (l != 0) {
-                            final CloseableIterator<SAMRecord> iter = ((SamReader.PrimitiveSamReaderToSamReaderAdapter) reader).iterator(new BAMFileSpan(new Chunk(l, l + 1)));
-                            final SAMRecord sam = iter.next();   // read the first record identified by the linear index
-                            indexCount++;
-                            iter.close();
-                        }
-                    } catch (final Exception e) {
-                        throw new SAMException("Exception in BamIndexValidator. Linear index access failure " + l + " indexCount=" + indexCount, e);
-                    }
-
-                }
-            }
-            return chunkCount;
-            // System.out.println("Found " chunkCount + " chunks in test " + inputBai +
-            // " linearIndex positions = " + indexCount);
-        } // else  not a bam file with a browseable index
-        //    System.err.println("No browseableIndex for reader");
-        return 0;
-    }
-
-    /**
-     * A less time-consuming index validation that only looks at the first and last references in the index
-     * and the first and last chunks in each of those
-     *
-     * @param reader
-     * @return # of chunks examined, or 0 if there is no browseable index for the reader
-     */
-    public static int lessExhaustivelyTestIndex(final SamReader reader) {
-        // look at all chunk offsets in a linear index to make sure they are valid
-        if (reader.indexing().hasBrowseableIndex()) {
-
-            // content is from an existing bai file
-            final CachingBAMFileIndex existingIndex = (CachingBAMFileIndex) reader.indexing().getBrowseableIndex();
-            final int numRefs = existingIndex.getNumberOfReferences();
-
-            int chunkCount = 0;
-            int indexCount = 0;
-            for (int i = 0; i < numRefs; i++) {
-
-                final BAMIndexContent content = existingIndex.getQueryResults(i);
-
-                final List<Chunk> chunks = content.getAllChunks();
-                final int numChunks = chunks.size();
-                // We are looking only at the first and last chunks
-                for (final int chunkNo : Arrays.asList(0, numChunks - 1)) {
-                    chunkCount++;
-
-                    final Chunk c = chunks.get(chunkNo);
-                    final CloseableIterator<SAMRecord> iter = ((SamReader.PrimitiveSamReaderToSamReaderAdapter) reader).iterator(new BAMFileSpan(c));
-                    try {
-                        final SAMRecord sam = iter.next();
-                        iter.close();
-                    } catch (final Exception e) {
-                        throw new SAMException("Exception querying chunk " + chunkNo + " from reference index " + i, e);
-                    }
-                }
-
-                // also seek to first and last position in the linear index
-                final long linearIndexEntries[] = content.getLinearIndex().getIndexEntries();
-                for (final int binNo : Arrays.asList(0, linearIndexEntries.length - 1)) {
-                    indexCount++;
-                    final long l = linearIndexEntries[binNo];
-                    try {
-                        if (l != 0) {
-                            final CloseableIterator<SAMRecord> iter = ((SamReader.PrimitiveSamReaderToSamReaderAdapter) reader).iterator(new BAMFileSpan(new Chunk(l, l + 1)));
-                            final SAMRecord sam = iter.next();   // read the first record identified by the linear index
-                            iter.close();
-                        }
-                    } catch (final Exception e) {
-                        throw new SAMException("Exception in BamIndexValidator. Linear index access failure " + l + " indexCount=" + indexCount, e);
-                    }
-                }
-            }
-            return chunkCount;
-        }
-        // else it's not a bam file with a browseable index
-        return 0;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/Bin.java b/src/main/java/htsjdk/samtools/Bin.java
deleted file mode 100644
index 1ac5724..0000000
--- a/src/main/java/htsjdk/samtools/Bin.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * An individual bin in a BAM file.
- *
- * @author mhanna
- * @version 0.1
- */
-public class Bin implements Comparable<Bin> {
-    /**
-     * The reference sequence associated with this bin.
-     */
-    private final int referenceSequence;
-
-    /**
-     * The number of this bin within the BAM file.
-     */
-    private final int binNumber;
-
-    /**
-     * The chunks associated with this bin.
-     */
-    private List<Chunk> chunkList;
-
-    /**
-     * The last chunk in the chunkList. Only maintained during index building,
-     * not when reading existing index
-     */
-    private Chunk lastChunk;
-
-    public Bin(final int referenceSequence, final int binNumber) {
-        this.referenceSequence = referenceSequence;
-        this.binNumber = binNumber;
-    }
-
-    protected int getReferenceSequence() {
-        return referenceSequence;
-    }
-
-    public int getBinNumber() {
-        return binNumber;
-    }
-
-    /**
-     * See whether two bins are equal.  If the ref seq and the bin number
-     * are equal, assume equality of the chunk list.
-     * @param other The other Bin to which to compare this.
-     * @return True if the two bins are equal.  False otherwise.
-     */
-    @Override
-    public boolean equals(final Object other) {
-        if(other == null) return false;
-        if(!(other instanceof Bin)) return false;
-
-        final Bin otherBin = (Bin)other;
-        return this.referenceSequence == otherBin.referenceSequence && this.binNumber == otherBin.binNumber;
-    }
-
-    /**
-     * Compute a unique hash code for the given reference sequence and bin number.
-     * @return A unique hash code.
-     */
-    @Override
-    public int hashCode() {
-        return ((Integer)referenceSequence).hashCode() ^ ((Integer)binNumber).hashCode();
-    }
-
-    /**
-     * Returns whether the bin currently contains chunks.
-     * @return True if the bin has chunks, false otherwise.
-     */
-    public boolean containsChunks() {
-        return chunkList != null;
-    }
-
-    /**
-     * Compare two bins to see what ordering they should appear in.
-     * @param other Other bin to which this bin should be compared.
-     * @return -1 if this < other, 0 if this == other, 1 if this > other.
-     */
-    public int compareTo(final Bin other) {
-        if(other == null)
-            throw new ClassCastException("Cannot compare to a null object");
-
-        // Check the reference sequences first.
-        if(this.referenceSequence != other.referenceSequence)
-            return referenceSequence - other.referenceSequence;
-
-        // Then check the bin ordering.
-        return binNumber - other.binNumber;
-    }
-
-    /**
-     * Adds the first chunk to the bin
-     */
-    public void addInitialChunk(final Chunk newChunk){
-        final List<Chunk> oldChunks = new ArrayList<Chunk>();
-        setChunkList(oldChunks);
-        setLastChunk(newChunk);
-        oldChunks.add(newChunk);
-    }
-
-    /**
-     * Sets the chunks associated with this bin
-     */
-    public void setChunkList(final List<Chunk> list){
-        chunkList = list;
-    }
-
-    /**
-     * Gets the list of chunks associated with this bin.
-     * @return the chunks in this bin.  If no chunks are associated, an empty list will be returned.
-     */
-    public List<Chunk> getChunkList(){
-        if(chunkList == null)
-            return Collections.<Chunk>emptyList();
-        return chunkList;
-    }
-
-    /**
-     * Optimization to keep lastChunk instead of iterating over all chunks repeatedly
-     */
-    public void setLastChunk(final Chunk c){
-        lastChunk = c;
-    }
-
-    /**
-     * Warning:  Currently only valid during index building, not when reading existing index,
-     * (AbstractBAMFileIndex.optimizeChunkList doesn't maintain this)
-     * @return  the last Chunk of the chunkList
-     */
-    public Chunk getLastChunk(){
-        return lastChunk;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BinList.java b/src/main/java/htsjdk/samtools/BinList.java
deleted file mode 100644
index e7107d4..0000000
--- a/src/main/java/htsjdk/samtools/BinList.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.BitSet;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Provides a list of all bins which could exist in the BAM file.
- * Allows the user to iterate over all bins, selecting ones of interest
- * for later inspection.
- *
- * @author mhanna
- * @version 0.1
- */
-public class BinList implements Iterable<Bin> {
-    /**
-     * The reference sequence relevant to this bin list.
-     */
-    private final int referenceSequence;
-
-    /**
-     * For each sequence, which bins should be included in the BitSet.
-     */
-    private final BitSet bins;
-
-    /**
-     * Create a new BinList over sequenceCount sequences, consisting of the given bins.
-     * @param referenceSequence Reference sequence to which these bins are relevant.
-     * @param bins The given bins to include.
-     */
-    protected BinList(final int referenceSequence, final BitSet bins) {
-        this.referenceSequence = referenceSequence;
-        this.bins = bins;
-    }
-
-    /**
-     * Gets an iterator over all selected bins.
-     * @return An iterator over all selected bins.
-     */
-    public Iterator<Bin> iterator() {
-        return new BinIterator();
-    }
-
-    /**
-     * Get the reference sequence to which this bin belongs.
-     * @return Integer representing the reference sequence.
-     */
-    protected int getReferenceSequence() {
-        return referenceSequence;
-    }
-
-    /**
-     * Retrieves the bins stored in this list.
-     * @return A bitset where a bin is present in the list if the bit is true.
-     */
-    protected BitSet getBins() {
-        return bins;
-    }
-
-    private class BinIterator implements Iterator<Bin> {
-        /**
-         * Stores the bin currently in use.  Will be -1 if no more bins remain in the set.
-         */
-        private int nextBin;
-
-        public BinIterator() {
-            // Initialize the bin iterator to just before the first bin.
-            nextBin = bins.nextSetBit(0);
-        }
-
-        /**
-         * Are there more bins in this set, waiting to be returned?
-         * @return True if more bins are remaining.
-         */
-        public boolean hasNext() {
-            return nextBin >= 0;
-        }
-
-        /**
-         * Gets the next bin in the provided BinList.
-         * @return the next available bin in the BinList.
-         */
-        public Bin next() {
-            if(!hasNext())
-                throw new NoSuchElementException("This BinIterator is currently empty");
-            int currentBin = nextBin;
-            nextBin = bins.nextSetBit(nextBin+1);
-            return new Bin(referenceSequence,currentBin);
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Unable to remove from a bin iterator");
-        }
-    }
-}
-
diff --git a/src/main/java/htsjdk/samtools/BinaryBAMIndexWriter.java b/src/main/java/htsjdk/samtools/BinaryBAMIndexWriter.java
deleted file mode 100644
index 35a22f7..0000000
--- a/src/main/java/htsjdk/samtools/BinaryBAMIndexWriter.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-/**
- * Class for writing binary BAM index files
- */
-class BinaryBAMIndexWriter implements BAMIndexWriter {
-
-    protected final int nRef;
-    private final BinaryCodec codec;
-    private int count = 0;
-
-    /**
-     * constructor
-     *
-     * @param nRef    Number of reference sequences
-     * @param output  BAM Index output file
-     */
-    public BinaryBAMIndexWriter(final int nRef, final File output) {
-
-        this.nRef = nRef;
-
-        try {
-            codec = new BinaryCodec(output, true);
-            writeHeader();
-        } catch (final Exception e) {
-            throw new SAMException("Exception opening output file " + output, e);
-        }
-    }
-
-    /**
-     *
-     * @param nRef Number of reference sequences.
-     * @param output BAM index output stream.  This stream will be closed when BinaryBAMIndexWriter.close() is called.
-     */
-    public BinaryBAMIndexWriter(final int nRef, final OutputStream output) {
-
-        this.nRef = nRef;
-
-        try {
-            codec = new BinaryCodec(output);
-            writeHeader();
-        } catch (final Exception e) {
-            throw new SAMException("Exception opening output stream", e);
-        }
-    }
-
-    /**
-     * Write this content as binary output
-     */
-    public void writeReference(final BAMIndexContent content) {
-
-        if (content == null) {
-            writeNullContent();
-            count++;
-            return;
-        }
-
-        if (content.getReferenceSequence() != count){
-            throw new SAMException("Unexpectedly writing reference " + content.getReferenceSequence() +
-                ", expecting reference " + count);
-        }
-        count ++;
-
-        // write bins
-
-        final BAMIndexContent.BinList bins = content.getBins();
-        final int size = bins == null ? 0 : content.getNumberOfNonNullBins();
-
-        if (size == 0) {
-            writeNullContent();
-            return;
-        }
-
-        //final List<Chunk> chunks = content.getMetaData() == null ? null
-        //        : content.getMetaData().getMetaDataChunks();
-        final BAMIndexMetaData metaData = content.getMetaData();
-
-        codec.writeInt(size + ((metaData != null)? 1 : 0 ));
-        // codec.writeInt(size);
-        for (final Bin bin : bins) {   // note, bins will always be sorted
-            if (bin.getBinNumber() == GenomicIndexUtil.MAX_BINS)
-                continue;
-            writeBin(bin);
-        }
-
-        // write metadata "bin" and chunks        
-        if (metaData != null)
-            writeChunkMetaData(metaData);
-
-        // write linear index
-
-        final LinearIndex linearIndex = content.getLinearIndex();
-        final long[] entries = linearIndex == null ? null : linearIndex.getIndexEntries();
-        final int indexStart = linearIndex == null ? 0 : linearIndex.getIndexStart();
-        final int n_intv = entries == null ? indexStart : entries.length + indexStart;
-        codec.writeInt(n_intv);
-        if (entries == null) {
-            return;
-        }
-        // since indexStart is usually 0, this is usually a no-op
-        for (int i = 0; i < indexStart; i++) {
-            codec.writeLong(0);
-        }
-        for (int k = 0; k < entries.length; k++) {
-            codec.writeLong(entries[k]);
-        }
-        try {
-            codec.getOutputStream().flush();
-        } catch (final IOException e) {
-            throw new SAMException("IOException in BinaryBAMIndexWriter reference " + content.getReferenceSequence(), e);
-        }
-    }
-
-    /**
-     * Writes out the count of records without coordinates
-     *
-     * @param count
-     */
-    public void writeNoCoordinateRecordCount(final Long count) {
-        codec.writeLong(count == null ? 0 : count);
-    }
-
-    /**
-     * Any necessary processing at the end of the file
-     */
-    public void close() {
-        codec.close();
-    }
-
-    private void writeBin(final Bin bin) {
-        final int binNumber = bin.getBinNumber();
-        if (binNumber >= GenomicIndexUtil.MAX_BINS){
-            throw new SAMException("Unexpected bin number when writing bam index " + binNumber);
-        }
-        
-        codec.writeInt(binNumber);
-        if (bin.getChunkList() == null){
-            codec.writeInt(0);
-            return;
-        }
-        final List<Chunk> chunkList = bin.getChunkList();
-        final int n_chunk = chunkList.size();
-        codec.writeInt(n_chunk);
-        for (final Chunk c : chunkList) {
-            codec.writeLong(c.getChunkStart());
-            codec.writeLong(c.getChunkEnd());
-        }
-    }
-
-    /**
-     * Write the meta data represented by the chunkLists associated with bin MAX_BINS 37450
-     *
-     * @param metaData information describing numAligned records, numUnAligned, etc
-     */
-    private void writeChunkMetaData(final BAMIndexMetaData metaData) {
-        codec.writeInt(GenomicIndexUtil.MAX_BINS);
-        final int nChunk = 2;
-        codec.writeInt(nChunk);
-        codec.writeLong(metaData.getFirstOffset());
-        codec.writeLong(metaData.getLastOffset());
-        codec.writeLong(metaData.getAlignedRecordCount());
-        codec.writeLong(metaData.getUnalignedRecordCount());
-
-    }
-
-    private void writeHeader() {
-        // magic string
-        final byte[] magic = BAMFileConstants.BAM_INDEX_MAGIC;
-        codec.writeBytes(magic);
-        codec.writeInt(nRef);
-    }
-
-    private void writeNullContent() {
-        codec.writeLong(0);  // 0 bins , 0 intv
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BinaryCigarCodec.java b/src/main/java/htsjdk/samtools/BinaryCigarCodec.java
deleted file mode 100644
index 95c8e13..0000000
--- a/src/main/java/htsjdk/samtools/BinaryCigarCodec.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.nio.ByteBuffer;
-
-/**
- * Converter between disk and in-memory (object, not String) CIGAR representation.
- */
-class BinaryCigarCodec {
-
-    /**
-     * Convert CIGAR from object representation to disk representation.
-     * @return Array of unsigned ints, one for each element of CIGAR.
-     */
-    static int[] encode(final Cigar cigar) {
-        if (cigar.numCigarElements() == 0) {
-            return new int[0];
-        }
-
-        // Binary rep can be no longer than 1/2 of text rep
-        // Although this is documented as uint, I think lengths will never get that long,
-        // and it's a pain in Java.
-        final int[] binaryCigar = new int[cigar.numCigarElements()];
-        int binaryCigarLength = 0;
-        for (int i = 0; i < cigar.numCigarElements(); ++i) {
-            final CigarElement cigarElement = cigar.getCigarElement(i);
-            final int op = CigarOperator.enumToBinary(cigarElement.getOperator());
-            binaryCigar[binaryCigarLength++] = cigarElement.getLength() << 4 | op;
-        }
-        return binaryCigar;
-    }
-
-    /**
-     * Convert CIGAR from disk representation to object.
-     * @param binaryCigar ByteArray that is assumed to have byte order set appropriately for extracting ints.
-     */
-    static Cigar decode(final ByteBuffer binaryCigar) {
-        final Cigar ret = new Cigar();
-        while (binaryCigar.hasRemaining()) {
-            final int cigarette = binaryCigar.getInt();
-            ret.add(binaryCigarToCigarElement(cigarette));
-        }
-        return ret;
-    }
-
-    /**
-     * Convert CIGAR from disk representation to object.
-     * @param binaryCigar Array of unsigned ints, one for each CIGAR element.
-     */
-    static Cigar decode(final int[] binaryCigar) {
-        final Cigar ret = new Cigar();
-        for (final int cigarette : binaryCigar) {
-            ret.add(binaryCigarToCigarElement(cigarette));
-        }
-        return ret;
-    }
-
-    /**
-     * @param cigarette CIGAR element (operator + length) encoded as an unsigned int.
-     * @return Object representation of the CIGAR element.
-     */
-    private static CigarElement binaryCigarToCigarElement(final int cigarette) {
-        final int binaryOp = cigarette & 0xf;
-        final int length = cigarette >>> 4;
-        return new CigarElement(length, CigarOperator.binaryToEnum(binaryOp));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BinaryTagCodec.java b/src/main/java/htsjdk/samtools/BinaryTagCodec.java
deleted file mode 100644
index 5603cfc..0000000
--- a/src/main/java/htsjdk/samtools/BinaryTagCodec.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.StringUtil;
-
-import java.lang.reflect.Array;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Converter between disk and in-memory representation of a SAMRecord tag.
- */
-public class BinaryTagCodec {
-    // Size in bytes of the fixed part of the disk representation of a tag,
-    // i.e. the number of bytes occupied by the tag name and tag type fields.
-    private static final int FIXED_TAG_SIZE = 3;
-
-    // Size in bytes of the fixed part of the value of a binary array,
-    // i.e. the number of bytes occupied by the array type and the array length.
-    private static final int FIXED_BINARY_ARRAY_TAG_SIZE = 5;
-
-    // Integers are stored in the smallest size that will hold them.
-    private static final long MAX_INT = Integer.MAX_VALUE;
-    private static final long MAX_UINT = MAX_INT * 2 + 1;
-    private static final long MAX_SHORT = Short.MAX_VALUE;
-    private static final long MAX_USHORT = MAX_SHORT * 2 + 1;
-    private static final long MAX_BYTE = Byte.MAX_VALUE;
-    private static final long MAX_UBYTE = MAX_BYTE * 2 + 1;
-
-    // Source or sink for disk representation.
-    final BinaryCodec binaryCodec;
-
-    /**
-     * For writing tags.
-     * For reading tags, a BinaryCodec is not used.  See readTags() below.
-     * @param binaryCodec where to write the file rep of the tags
-     */
-    public BinaryTagCodec(final BinaryCodec binaryCodec) {
-        this.binaryCodec = binaryCodec;
-    }
-
-    /**
-     * @param attributeValue In-memory representation of a tag value.
-     * @return Size in bytes to store the value on disk.
-     */
-    private static int getBinaryValueSize(final Object attributeValue) {
-        switch (getTagValueType(attributeValue)) {
-            case 'Z':
-                return ((String)attributeValue).length() + 1;
-            case 'A':
-                return 1;
-            case 'I':
-            case 'i':
-                return 4;
-            case 's':
-            case 'S':
-                return 2;
-            case 'c':
-            case 'C':
-                return 1;
-            case 'f':
-                return 4;
-            case 'H':
-                final byte[] byteArray = (byte[])attributeValue;
-                return byteArray.length * 2 + 1;
-            case 'B':
-                final int numElements = Array.getLength(attributeValue);
-                final int elementSize;
-                if(attributeValue instanceof byte[]) {
-                    elementSize = 1;
-                } else if(attributeValue instanceof short[]) {
-                    elementSize = 2;
-                } else if(attributeValue instanceof int[]) {
-                    elementSize = 4;
-                } else if(attributeValue instanceof float[]) {
-                    elementSize = 4;
-                } else {
-                    throw new IllegalArgumentException("Unsupported array type: " + attributeValue.getClass());
-                }
-                return numElements * elementSize + FIXED_BINARY_ARRAY_TAG_SIZE;
-            default:
-                throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
-                        attributeValue.getClass().getName());
-        }
-    }
-
-    /**
-     * @param value In-memory representation of a tag value.
-     * @return Size in bytes to store the tag name, tag type and tag value on disk.
-     */
-    static int getTagSize(final Object value) {
-        return FIXED_TAG_SIZE + getBinaryValueSize(value);
-    }
-
-    /**
-     * @param value In-memory representation of a tag value.
-     * @return One-character disk representation of tag type.
-     */
-    static char getTagValueType(final Object value) {
-        if (value instanceof String) {
-            return 'Z';
-        } else if (value instanceof Character) {
-            return 'A';
-        } else if (value instanceof Float) {
-            return 'f';
-        } else if (value instanceof Number) {
-            if (!(value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long)) {
-                throw new IllegalArgumentException("Unrecognized tag type " + value.getClass().getName());
-            }
-            return getIntegerType(((Number)value).longValue());
-        } /*
-           Note that H tag type is never written anymore, because B style is more compact.
-           else if (value instanceof byte[]) {
-            return 'H';
-           }
-          */
-        else if (value instanceof byte[] || value instanceof short[] || value instanceof int[] || value instanceof float[]) {
-            return 'B';
-        } else {
-            throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
-                    value.getClass().getName());
-        }
-    }
-
-    /**
-     * @param val Integer tag value.
-     * @return Tag type corresponding to the smallest integer type that will hold the given value.
-     */
-    static private char getIntegerType(final long val) {
-        if (val > MAX_UINT) {
-            throw new IllegalArgumentException("Integer attribute value too large to be encoded in BAM");
-        }
-        if (val > MAX_INT) {
-            return 'I';
-        }
-        if (val > MAX_USHORT) {
-            return 'i';
-        }
-        if (val > MAX_SHORT) {
-            return 'S';
-        }
-        if (val > MAX_UBYTE) {
-            return 's';
-        }
-        if (val > MAX_BYTE) {
-            return 'C';
-        }
-        if (val >= Byte.MIN_VALUE) {
-            return 'c';
-        }
-        if (val >= Short.MIN_VALUE) {
-            return 's';
-        }
-        if (val >= Integer.MIN_VALUE) {
-            return 'i';
-        }
-        throw new IllegalArgumentException("Integer attribute value too negative to be encoded in BAM");
-    }
-
-    /**
-     * Write the given tag name and value to disk.
-     */
-    public void writeTag(final short tag, final Object value, final boolean isUnsignedArray) {
-        binaryCodec.writeShort(tag);
-        final char tagValueType = getTagValueType(value);
-        binaryCodec.writeByte(tagValueType);
-
-        switch (tagValueType) {
-            case 'Z':
-                binaryCodec.writeString((String)value, false, true);
-                break;
-            case 'A':
-                binaryCodec.writeByte(((Character)value));
-                break;
-            case 'I':
-                binaryCodec.writeUInt((Long)value);
-                break;
-            case 'i':
-                binaryCodec.writeInt(((Number)value).intValue());
-                break;
-            case 's':
-                binaryCodec.writeShort(((Number)value).shortValue());
-                break;
-            case 'S':
-                binaryCodec.writeUShort(((Number)value).intValue());
-                break;
-            case 'c':
-                binaryCodec.writeByte(((Number)value).byteValue());
-                break;
-            case 'C':
-                binaryCodec.writeUByte(((Integer)value).shortValue());
-                break;
-            case 'f':
-                binaryCodec.writeFloat((Float)value);
-                break;
-            /*
-            Writing H is no longer supported
-            case 'H':
-                final byte[] byteArray = (byte[])value;
-                binaryCodec.writeString(StringUtil.bytesToHexString(byteArray), false, true);
-                break;
-             */
-            case 'B':
-                writeArray(value, isUnsignedArray);
-                break;
-            default:
-                throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
-                        value.getClass().getName());
-        }
-    }
-
-    private void writeArray(final Object value, final boolean isUnsignedArray) {
-        if (value instanceof byte[]) {
-            binaryCodec.writeByte(isUnsignedArray? 'C': 'c');
-            final byte[] array = (byte[]) value;
-            binaryCodec.writeInt(array.length);
-            for (final byte element: array) binaryCodec.writeByte(element);
-
-        } else if (value instanceof short[]) {
-            binaryCodec.writeByte(isUnsignedArray? 'S': 's');
-            final short[] array = (short[]) value;
-            binaryCodec.writeInt(array.length);
-            for (final short element: array) binaryCodec.writeShort(element);
-
-        } else if (value instanceof int[]) {
-            binaryCodec.writeByte(isUnsignedArray? 'I': 'i');
-            final int[] array = (int[]) value;
-            binaryCodec.writeInt(array.length);
-            for (final int element: array) binaryCodec.writeInt(element);
-
-        } else if (value instanceof float[]) {
-            binaryCodec.writeByte('f');
-            final float[] array = (float[]) value;
-            binaryCodec.writeInt(array.length);
-            for (final float element: array) binaryCodec.writeFloat(element);
-
-        } else throw new SAMException("Unrecognized array value type: " + value.getClass());
-    }
-
-    /**
-     * Convert tags from little-endian disk representation to in-memory representation.
-     * @param binaryRep Byte buffer containing file representation of tags.
-     * @param offset Where in binaryRep tags start.
-     * @param length How many bytes in binaryRep are tag storage.
-     */
-    public static SAMBinaryTagAndValue readTags(final byte[] binaryRep, final int offset,
-                                                final int length, final ValidationStringency validationStringency) {
-        final ByteBuffer byteBuffer = ByteBuffer.wrap(binaryRep, offset, length);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
-        SAMBinaryTagAndValue head = null;
-        SAMBinaryTagAndValue tail = null;
-
-        while (byteBuffer.hasRemaining()) {
-            final short tag = byteBuffer.getShort();
-            final byte tagType = byteBuffer.get();
-            final SAMBinaryTagAndValue tmp;
-            if (tagType != 'B') {
-                tmp = new SAMBinaryTagAndValue(tag, readSingleValue(tagType, byteBuffer, validationStringency));
-            } else {
-                final TagValueAndUnsignedArrayFlag valueAndFlag = readArray(byteBuffer, validationStringency);
-                if (valueAndFlag.isUnsignedArray) tmp = new SAMBinaryTagAndUnsignedArrayValue(tag, valueAndFlag.value);
-                else tmp = new SAMBinaryTagAndValue(tag, valueAndFlag.value);
-            }
-
-            // If samjdk wrote the BAM then the attributes will be in lowest->highest tag order, to inserting at the
-            // head each time will be very inefficient. To fix that we check here to see if the tag should go right on
-            // the tail and if so stick it there, else insert it through the head.
-            if (head == null) {
-                head = tmp;
-                tail = tmp;
-            }
-            else if (tmp.tag > tail.tag) {
-                tail.insert(tmp);
-                tail = tmp;
-            }
-            else {
-                head = head.insert(tmp);
-            }
-        }
-
-        return head;
-    }
-
-    /**
-     * Read value of specified non-array type.
-     * @param tagType What type to read.
-     * @param byteBuffer Little-ending byte buffer to read value from.
-     * @return Value in in-memory Object form.
-     */
-    private static  Object readSingleValue(final byte tagType, final ByteBuffer byteBuffer,
-                                           final ValidationStringency validationStringency) {
-        switch (tagType) {
-            case 'Z':
-                return readNullTerminatedString(byteBuffer);
-            case 'A':
-                return (char)byteBuffer.get();
-            case 'I':
-                final long val = byteBuffer.getInt() & 0xffffffffL;
-                if ( val <= Integer.MAX_VALUE ) {
-                    return (int)val;
-                }
-                // If it won't fit into a signed integer, but is within range for an unsigned 32-bit integer,
-                // return it directly as a long
-                if (! SAMUtils.isValidUnsignedIntegerAttribute(val)) {
-                    SAMUtils.processValidationError(new SAMValidationError(SAMValidationError.Type.TAG_VALUE_TOO_LARGE,
-                            "Unsigned integer is out of range for a 32-bit unsigned value: " + val, null), validationStringency);
-                }
-                return val;
-            case 'i':
-                return byteBuffer.getInt();
-            case 's':
-                return (int)byteBuffer.getShort();
-            case 'S':
-                // Convert to unsigned short stored in an int
-                return byteBuffer.getShort() & 0xffff;
-            case 'c':
-                return (int)byteBuffer.get();
-            case 'C':
-                // Convert to unsigned byte stored in an int
-                return (int)byteBuffer.get() & 0xff;
-            case 'f':
-                return byteBuffer.getFloat();
-            case 'H':
-                final String hexRep = readNullTerminatedString(byteBuffer);
-                return StringUtil.hexStringToBytes(hexRep);
-            default:
-                throw new SAMFormatException("Unrecognized tag type: " + (char)tagType);
-        }
-    }
-
-
-
-
-    /**
-     * Read value of specified type.
-     * @param byteBuffer Little-ending byte buffer to read value from.
-     * @return CVO containing the value in in-memory Object form, and a flag indicating whether it is unsigned or not.
-     */
-    private static TagValueAndUnsignedArrayFlag readArray(final ByteBuffer byteBuffer,
-                                                          final ValidationStringency validationStringency) {
-        final byte arrayType = byteBuffer.get();
-        final boolean isUnsigned = Character.isUpperCase(arrayType);
-        final int length = byteBuffer.getInt();
-        final Object value;
-        switch (Character.toLowerCase(arrayType)) {
-            case 'c': {
-                final byte[] array = new byte[length];
-                value = array;
-                byteBuffer.get(array);
-                break;
-            }
-            case 's': {
-                final short[] array = new short[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getShort();
-                }
-                break;
-            }
-
-            case 'i': {
-                final int[] array = new int[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getInt();
-                }
-                break;
-            }
-
-            case 'f': {
-                final float[] array = new float[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getFloat();
-                }
-                break;
-            }
-
-            default:
-                throw new SAMFormatException("Unrecognized tag array type: " + (char)arrayType);
-        }
-        return new TagValueAndUnsignedArrayFlag(value, isUnsigned);
-    }
-
-    private static String readNullTerminatedString(final ByteBuffer byteBuffer) {
-        // Count the number of bytes in the string
-        byteBuffer.mark();
-        final int startPosition = byteBuffer.position();
-        while (byteBuffer.get() != 0) {}
-        final int endPosition = byteBuffer.position();
-
-        // Don't count null terminator
-        final byte[] buf = new byte[endPosition - startPosition - 1];
-        // Go back to the start of the string and read out the bytes
-        byteBuffer.reset();
-        byteBuffer.get(buf);
-        // Skip over the null terminator
-        byteBuffer.get();
-        return StringUtil.bytesToString(buf);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BinningIndexBuilder.java b/src/main/java/htsjdk/samtools/BinningIndexBuilder.java
deleted file mode 100644
index 37933f4..0000000
--- a/src/main/java/htsjdk/samtools/BinningIndexBuilder.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.util.List;
-
-import static htsjdk.samtools.GenomicIndexUtil.MAX_BINS;
-
-/**
- * Builder for a BinningIndexContent object.
- */
-public class BinningIndexBuilder {
-    private final int referenceSequence;
-    // the bins for the current reference
-    private final Bin[] bins; // made only as big as needed for each reference
-    private int binsSeen = 0;
-
-    // linear index for the current reference
-    private final long[] index = new long[LinearIndex.MAX_LINEAR_INDEX_SIZE];
-    private int largestIndexSeen = -1;
-
-
-    /**
-     *
-     * @param referenceSequence
-     * @param sequenceLength 0 implies unknown length.  Known length will reduce memory use.
-     */
-    public BinningIndexBuilder(final int referenceSequence, final int sequenceLength) {
-        this.referenceSequence = referenceSequence;
-        final int numBins;
-        if (sequenceLength <= 0) numBins = MAX_BINS + 1;
-        else numBins = AbstractBAMFileIndex.getMaxBinNumberForSequenceLength(sequenceLength) + 1;
-        bins = new Bin[numBins];
-    }
-
-    public BinningIndexBuilder(final int referenceSequence) {
-        this(referenceSequence, 0);
-    }
-
-    /**
-     * coordinates are 1-based, inclusive
-     */
-    public interface FeatureToBeIndexed {
-        public int getStart();
-        public int getEnd();
-        public Integer getIndexingBin();
-        public Chunk getChunk();
-    }
-
-    public void processFeature(final FeatureToBeIndexed feature) {
-
-        // process bins
-
-        final Integer binNumber = feature.getIndexingBin();
-        final int binNum = binNumber == null ? computeIndexingBin(feature) : binNumber;
-
-
-        // is there a bin already represented for this index?  if not, add one
-        final Bin bin;
-        if (bins[binNum] != null) {
-            bin = bins[binNum];
-        } else {
-            bin = new Bin(referenceSequence, binNum);
-            bins[binNum] = bin;
-            binsSeen++;
-        }
-
-        // process chunks
-
-        final Chunk newChunk = feature.getChunk();
-        final long chunkStart = newChunk.getChunkStart();
-        final long chunkEnd = newChunk.getChunkEnd();
-
-        final List<Chunk> oldChunks = bin.getChunkList();
-        if (!bin.containsChunks()) {
-            bin.addInitialChunk(newChunk);
-
-        } else {
-            final Chunk lastChunk = bin.getLastChunk();
-
-            // Coalesce chunks that are in the same or adjacent file blocks.
-            // Similar to AbstractBAMFileIndex.optimizeChunkList,
-            // but no need to copy the list, no minimumOffset, and maintain bin.lastChunk
-            if (BlockCompressedFilePointerUtil.areInSameOrAdjacentBlocks(lastChunk.getChunkEnd(), chunkStart)) {
-                lastChunk.setChunkEnd(chunkEnd);  // coalesced
-            } else {
-                oldChunks.add(newChunk);
-                bin.setLastChunk(newChunk);
-            }
-        }
-
-        // process linear index
-
-        // the smallest file offset that appears in the 16k window for this bin
-        final int featureEnd = feature.getEnd();
-        int startWindow = LinearIndex.convertToLinearIndexOffset(feature.getStart()); // the 16k window
-        final int endWindow;
-
-        if (featureEnd == GenomicIndexUtil.UNSET_GENOMIC_LOCATION) {   // assume feature uses one position
-            // Next line for C (samtools index) compatibility. Differs only when on a window boundary
-            startWindow = LinearIndex.convertToLinearIndexOffset(feature.getStart() - 1);
-            endWindow = startWindow;
-        } else {
-            endWindow = LinearIndex.convertToLinearIndexOffset(featureEnd);
-        }
-
-        if (endWindow > largestIndexSeen) {
-            largestIndexSeen = endWindow;
-        }
-
-        // set linear index at every 16K window that this feature overlaps
-        for (int win = startWindow; win <= endWindow; win++) {
-            if (index[win] == 0 || chunkStart < index[win]) {
-                index[win] = chunkStart;
-            }
-        }
-    }
-
-    /**
-     * Creates the BAMIndexContent for this reference.
-     * Requires all features of the reference have already been processed.
-     */
-    public BinningIndexContent generateIndexContent() {
-
-
-        // process bins
-        if (binsSeen == 0) return null;  // no bins for this reference
-
-        // process chunks
-        // nothing needed
-
-        // process linear index
-        // linear index will only be as long as the largest index seen
-        final long[] newIndex = new long[largestIndexSeen + 1]; // in java1.6 Arrays.copyOf(index, largestIndexSeen + 1);
-
-        // C (samtools index) also fills in intermediate 0's with values.  This seems unnecessary, but safe
-        long lastNonZeroOffset = 0;
-        for (int i = 0; i <= largestIndexSeen; i++) {
-            if (index[i] == 0) {
-                index[i] = lastNonZeroOffset; // not necessary, but C (samtools index) does this
-                // note, if you remove the above line BAMIndexWriterTest.compareTextual and compareBinary will have to change
-            } else {
-                lastNonZeroOffset = index[i];
-            }
-            newIndex[i] = index[i];
-        }
-
-        final LinearIndex linearIndex = new LinearIndex(referenceSequence, 0, newIndex);
-
-        return new BinningIndexContent(referenceSequence, new BinningIndexContent.BinList(bins, binsSeen), linearIndex);
-    }
-
-    private int computeIndexingBin(final FeatureToBeIndexed feature) {
-        // regionToBin has zero-based, half-open API
-        final int start = feature.getStart()-1;
-        int end = feature.getEnd();
-        if (end <= 0) {
-            // If feature end cannot be determined (e.g. because a read is not really aligned),
-            // then treat this as a one base feature for indexing purposes.
-            end = start + 1;
-        }
-        return GenomicIndexUtil.regionToBin(start, end);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BinningIndexContent.java b/src/main/java/htsjdk/samtools/BinningIndexContent.java
deleted file mode 100644
index 9e32601..0000000
--- a/src/main/java/htsjdk/samtools/BinningIndexContent.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * In-memory representation of the binning index for a single reference.  BAM and Tabix are both binning indices
- * with slightly different disk formats but identical in-memory representations.
- */
-public class BinningIndexContent {
-    /**
-     * The reference sequence for the data currently loaded.
-     */
-    private final int mReferenceSequence;
-
-    /**
-     * A list of all bins in the above reference sequence.
-     */
-    private final BinList mBinList;
-
-    /**
-     * The linear index for the reference sequence above.
-     */
-    private final LinearIndex mLinearIndex;
-
-
-    /**
-     * @param referenceSequence Content corresponds to this reference.
-     * @param binList           Array of bins represented by this content, possibly sparse
-     * @param linearIndex       Additional index used to optimize queries
-     */
-    public BinningIndexContent(final int referenceSequence, final BinList binList, final LinearIndex linearIndex) {
-        this.mReferenceSequence = referenceSequence;
-        this.mBinList = binList;
-        this.mLinearIndex = linearIndex;
-    }
-
-    /**
-     * Reference for this Content
-     */
-    public int getReferenceSequence() {
-        return mReferenceSequence;
-    }
-
-    /**
-     * Does this content have anything in this bin?
-     */
-    public boolean containsBin(final Bin bin) {
-        return mBinList.getBin(bin.getBinNumber()) != null;
-    }
-
-    /**
-     * @return iterable list of bins represented by this content
-     */
-    public BinList getBins() {
-        return mBinList;
-    }
-
-    /**
-     * @return the number of non-null bins represented by this content
-     */
-    int getNumberOfNonNullBins() {
-        return mBinList.getNumberOfNonNullBins();
-    }
-
-    /**
-     * @return all chunks associated with all bins in this content
-     */
-    public List<Chunk> getAllChunks() {
-        final List<Chunk> allChunks = new ArrayList<Chunk>();
-        for (final Bin b : mBinList)
-            if (b.getChunkList() != null) {
-                allChunks.addAll(b.getChunkList());
-            }
-        return Collections.unmodifiableList(allChunks);
-    }
-
-    /**
-     * @return the linear index represented by this content
-     */
-    public LinearIndex getLinearIndex() {
-        return mLinearIndex;
-    }
-
-
-    /**
-     *
-     * @param startPos 1-based, inclusive
-     * @param endPos 1-based, inclusive
-     * @return List of Chunks overlapping the given region.  May return null if there are none.
-     */
-    public List<Chunk> getChunksOverlapping(final int startPos, final int endPos) {
-        final BitSet overlappingBins = GenomicIndexUtil.regionToBins(startPos,endPos);
-        if (overlappingBins == null) return null;
-
-        // System.out.println("# Sequence target TID: " + referenceIndex);
-        final List<Chunk> chunkList = new ArrayList<Chunk>();
-
-        for (int index = overlappingBins.nextSetBit(0); index >= 0; index = overlappingBins.nextSetBit(index + 1)) {
-            final Bin bin = getBins().getBin(index);
-            if (bin != null) {
-                for (final Chunk chunk : bin.getChunkList()) {
-                    chunkList.add(chunk.clone());
-                }
-            }
-        }
-
-        if (chunkList.isEmpty()) {
-            return null;
-        }
-
-        return Chunk.optimizeChunkList(chunkList, getLinearIndex().getMinimumOffset(startPos));
-    }
-    /**
-     * This class is used to encapsulate the list of Bins store in the BAMIndexContent
-     * While it is currently represented as an array, we may decide to change it to an ArrayList or other structure
-     */
-    public static class BinList implements Iterable<Bin> {
-
-        private final Bin[] mBinArray;
-        public final int numberOfNonNullBins;
-        public final int maxBinNumber;  // invariant: maxBinNumber = mBinArray.length -1 since array is 0 based
-
-        /**
-         * @param binArray            a sparse array representation of the bins. The index into the array is the bin number.
-         * @param numberOfNonNullBins
-         */
-        public BinList(final Bin[] binArray, final int numberOfNonNullBins) {
-            this.mBinArray = binArray;
-            this.numberOfNonNullBins = numberOfNonNullBins;
-            this.maxBinNumber = mBinArray.length - 1;
-        }
-
-        Bin getBin(final int binNumber) {
-            if (binNumber > maxBinNumber) return null;
-            return mBinArray[binNumber];
-        }
-
-        int getNumberOfNonNullBins() {
-            return numberOfNonNullBins;
-        }
-
-        /**
-         * @return An iterator over all non-empty bins.
-         */
-        public Iterator<Bin> iterator() {
-            return new BinIterator();
-        }
-
-        private class BinIterator implements Iterator<Bin> {
-            /**
-             * Stores the bin # of the Bin currently in use.
-             */
-            private int nextBin;
-
-            public BinIterator() {
-                nextBin = 0;
-            }
-
-            /**
-             * Are there more bins in this set, waiting to be returned?
-             *
-             * @return True if more bins are remaining.
-             */
-            public boolean hasNext() {
-                while (nextBin <= maxBinNumber) {
-                    if (getBin(nextBin) != null) return true;
-                    nextBin++;
-                }
-                return false;
-            }
-
-            /**
-             * Gets the next bin in the provided BinList.
-             *
-             * @return the next available bin in the BinList.
-             */
-            public Bin next() {
-                if (!hasNext())
-                    throw new NoSuchElementException("This BinIterator is currently empty");
-                final Bin result = getBin(nextBin);
-                nextBin++;
-                return result;
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException("Unable to remove from a bin iterator");
-            }
-        }
-
-        @Override
-        public boolean equals(final Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-
-            final BinList bins = (BinList) o;
-
-            if (maxBinNumber != bins.maxBinNumber) return false;
-            if (numberOfNonNullBins != bins.numberOfNonNullBins) return false;
-            if (!Arrays.equals(mBinArray, bins.mBinArray)) return false;
-
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            int result = Arrays.hashCode(mBinArray);
-            result = 31 * result + numberOfNonNullBins;
-            result = 31 * result + maxBinNumber;
-            return result;
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final BinningIndexContent that = (BinningIndexContent) o;
-
-        if (mReferenceSequence != that.mReferenceSequence) return false;
-        if (!mBinList.equals(that.mBinList)) return false;
-        if (!mLinearIndex.equals(that.mLinearIndex)) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = mReferenceSequence;
-        result = 31 * result + mBinList.hashCode();
-        result = 31 * result + mLinearIndex.hashCode();
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/BrowseableBAMIndex.java b/src/main/java/htsjdk/samtools/BrowseableBAMIndex.java
deleted file mode 100644
index c6eca51..0000000
--- a/src/main/java/htsjdk/samtools/BrowseableBAMIndex.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * An index interface with additional functionality for querying and inspecting the structure of a BAM index.
- *
- * @author mhanna
- * @version 0.1
- */
-public interface BrowseableBAMIndex extends BAMIndex {
-
-    /**
-     * Gets the size (number of bins in) a given level of a BAM index.
-     * @param levelNumber Level for which to inspect the size.
-     * @return Size of the given level.
-     */
-    public int getLevelSize(final int levelNumber);
-
-    /**
-     * Gets the level associated with the given bin number.
-     * @param bin The bin  for which to determine the level.
-     * @return the level associated with the given bin number.
-     */
-    public int getLevelForBin(final Bin bin);
-    
-    /**
-     * Gets the first locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return The last position that the given bin can represent.
-     */
-    int getFirstLocusInBin(final Bin bin);
-
-    /**
-     * Gets the last locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return The last position that the given bin can represent.
-     */
-    int getLastLocusInBin(final Bin bin);
-
-    /**
-     * Get a list of bins in the BAM file that may contain SAMRecords for the given range.
-     * @param referenceIndex sequence of desired SAMRecords
-     * @param startPos 1-based start of the desired interval, inclusive
-     * @param endPos 1-based end of the desired interval, inclusive
-     * @return a list of bins that contain relevant data.
-     */
-    BinList getBinsOverlapping(final int referenceIndex, final int startPos, final int endPos);
-
-    /**
-     * Perform an overlapping query of all bins bounding the given location.
-     * @param bin The bin over which to perform an overlapping query.
-     * @return The file pointers
-     */
-    BAMFileSpan getSpanOverlapping(final Bin bin);    
-}
diff --git a/src/main/java/htsjdk/samtools/CRAMBAIIndexer.java b/src/main/java/htsjdk/samtools/CRAMBAIIndexer.java
deleted file mode 100755
index 352e9e1..0000000
--- a/src/main/java/htsjdk/samtools/CRAMBAIIndexer.java
+++ /dev/null
@@ -1,474 +0,0 @@
-/*******************************************************************************
- * Copyright 2013 EMBL-EBI
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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, sub-license, 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 NON-INFRINGEMENT. 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.ContainerParser;
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.BlockCompressedFilePointerUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.ProgressLogger;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * Class for both constructing BAM index content and writing it out.
- * There are two usage patterns:
- * 1) Building a bam index from an existing cram file
- * 2) Building a bam index while building the cram file
- * In both cases, processAlignment is called for each cram slice and
- * finish() is called at the end.
- */
-public class CRAMBAIIndexer {
-
-    // The number of references (chromosomes) in the BAM file
-    private final int numReferences;
-
-    // output written as binary, or (for debugging) as text
-    private final BAMIndexWriter outputWriter;
-
-    private int currentReference = 0;
-
-    // content is built up from the input bam file using this
-    private final BAMIndexBuilder indexBuilder;
-
-    /**
-     * Create a CRAM indexer that writes BAI to a file.
-     *
-     * @param output     binary BAM Index (.bai) file
-     * @param fileHeader header for the corresponding bam file
-     */
-    public CRAMBAIIndexer(final File output, final SAMFileHeader fileHeader) {
-
-        numReferences = fileHeader.getSequenceDictionary().size();
-        indexBuilder = new BAMIndexBuilder(fileHeader);
-        outputWriter = new BinaryBAMIndexWriter(numReferences, output);
-    }
-
-    /**
-     * Create a CRAM indexer that writes BAI to a stream.
-     *
-     * @param output     Index will be written here.  output will be closed when finish() method is called.
-     * @param fileHeader header for the corresponding bam file.
-     */
-    public CRAMBAIIndexer(final OutputStream output, final SAMFileHeader fileHeader) {
-
-        numReferences = fileHeader.getSequenceDictionary().size();
-        indexBuilder = new BAMIndexBuilder(fileHeader);
-        outputWriter = new BinaryBAMIndexWriter(numReferences, output);
-    }
-
-    /**
-     * Index a container, any of mapped, unmapped and multiple references are allowed. The only requirement is sort
-     * order by coordinate.
-     * For multiref containers the method reads the container through unpacking all reads. This is slower than single
-     * reference but should be faster than normal reading.
-     *
-     * @param container container to be indexed
-     */
-    public void processContainer(final Container container, final ValidationStringency validationStringency) {
-        try {
-            if (container == null || container.isEOF()) {
-                return;
-            }
-
-            int sliceIndex = 0;
-            for (final Slice slice : container.slices) {
-                slice.containerOffset = container.offset;
-                slice.index = sliceIndex++;
-                if (slice.isMultiref()) {
-                    final ContainerParser parser = new ContainerParser(indexBuilder.bamHeader);
-                    final Map<Integer, AlignmentSpan> refSet = parser.getReferences(container, validationStringency);
-                    final Slice fakeSlice = new Slice();
-                    slice.containerOffset = container.offset;
-                    slice.index = sliceIndex++;
-                    /**
-                     * Unmapped span must be processed after mapped spans:
-                     */
-                    AlignmentSpan unmappedSpan = refSet.remove(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-                    for (final int refId : new TreeSet<>(refSet.keySet())) {
-                        final AlignmentSpan span = refSet.get(refId);
-                        fakeSlice.sequenceId = refId;
-                        fakeSlice.containerOffset = slice.containerOffset;
-                        fakeSlice.offset = slice.offset;
-                        fakeSlice.index = slice.index;
-
-                        fakeSlice.alignmentStart = span.getStart();
-                        fakeSlice.alignmentSpan = span.getSpan();
-                        fakeSlice.nofRecords = span.getCount();
-                        processSingleReferenceSlice(fakeSlice);
-                    }
-                    if (unmappedSpan != null) {
-                        final AlignmentSpan span = unmappedSpan;
-                        fakeSlice.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-                        fakeSlice.containerOffset = slice.containerOffset;
-                        fakeSlice.offset = slice.offset;
-                        fakeSlice.index = slice.index;
-
-                        fakeSlice.alignmentStart = SAMRecord.NO_ALIGNMENT_START;
-                        fakeSlice.alignmentSpan = 0;
-                        fakeSlice.nofRecords = span.getCount();
-                        processSingleReferenceSlice(fakeSlice);
-                    }
-                } else {
-                    processSingleReferenceSlice(slice);
-                }
-            }
-
-        } catch (final IOException e) {
-            throw new RuntimeIOException("Failed to read cram container", e);
-        }
-    }
-
-    /**
-     * Record index information for a given CRAM slice that contains either unmapped reads or
-     * reads mapped to a single reference.
-     * If this alignment starts a new reference, write out the old reference.
-     *
-     * @param slice The CRAM slice, single ref or unmapped only.
-     * @throws htsjdk.samtools.SAMException if slice refers to multiple reference sequences.
-     */
-    public void processSingleReferenceSlice(final Slice slice) {
-        try {
-            final int reference = slice.sequenceId;
-            if (reference == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                return;
-            }
-            if (slice.sequenceId == Slice.MULTI_REFERENCE) {
-                throw new SAMException("Expecting a single reference slice.");
-            }
-            if (reference != currentReference) {
-                // process any completed references
-                advanceToReference(reference);
-            }
-            indexBuilder.processSingleReferenceSlice(slice);
-        } catch (final Exception e) {
-            throw new SAMException("Exception creating BAM index for slice " + slice, e);
-        }
-    }
-
-    /**
-     * After all the slices have been processed, finish is called.
-     * Writes any final information and closes the output file.
-     */
-    public void finish() {
-        // process any remaining references
-        advanceToReference(numReferences);
-        outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount());
-        outputWriter.close();
-    }
-
-    /**
-     * write out any references between the currentReference and the nextReference
-     */
-    private void advanceToReference(final int nextReference) {
-        while (currentReference < nextReference) {
-            final BAMIndexContent content = indexBuilder.processReference(currentReference);
-            outputWriter.writeReference(content);
-            currentReference++;
-            indexBuilder.startNewReference();
-        }
-    }
-
-    /**
-     * Class for constructing BAM index files.
-     * One instance is used to construct an entire index.
-     * processAlignment is called for each alignment until a new reference is encountered, then
-     * processReference is called when all records for the reference have been processed.
-     */
-    private class BAMIndexBuilder {
-
-        private final SAMFileHeader bamHeader;
-
-        // the bins for the current reference
-        private Bin[] bins; // made only as big as needed for each reference
-        private int binsSeen = 0;
-
-        // linear index for the current reference
-        private final long[] index = new long[LinearIndex.MAX_LINEAR_INDEX_SIZE];
-        private int largestIndexSeen = -1;
-
-        // information in meta data
-        private final BAMIndexMetaData indexStats = new BAMIndexMetaData();
-
-        /**
-         * @param header SAMFileHeader used for reference name (in index stats) and for max bin number
-         */
-        BAMIndexBuilder(final SAMFileHeader header) {
-            this.bamHeader = header;
-        }
-
-        private int computeIndexingBin(final Slice slice) {
-            // regionToBin has zero-based, half-open API
-            final int alignmentStart = slice.alignmentStart - 1;
-            int alignmentEnd = slice.alignmentStart + slice.alignmentSpan - 1;
-            if (alignmentEnd <= alignmentStart) {
-                // If alignment end cannot be determined (e.g. because this read is not really aligned),
-                // then treat this as a one base alignment for indexing purposes.
-                alignmentEnd = alignmentStart + 1;
-            }
-            return GenomicIndexUtil.regionToBin(alignmentStart, alignmentEnd);
-        }
-
-
-        /**
-         * Record any index information for a given CRAM slice
-         *
-         * @param slice CRAM slice, single ref or unmapped only.
-         */
-        private void processSingleReferenceSlice(final Slice slice) {
-
-            // metadata
-            indexStats.recordMetaData(slice);
-
-            final int alignmentStart = slice.alignmentStart;
-            if (alignmentStart == SAMRecord.NO_ALIGNMENT_START) {
-                return; // do nothing for records without coordinates, but count them
-            }
-
-            // various checks
-            final int reference = slice.sequenceId;
-            if (reference != currentReference) {
-                throw new SAMException("Unexpected reference " + reference +
-                        " when constructing index for " + currentReference + " for record " + slice);
-            }
-
-            // process bins
-
-            final int binNum = computeIndexingBin(slice);
-
-            // has the bins array been allocated? If not, do so
-            if (bins == null) {
-                final SAMSequenceRecord seq = bamHeader.getSequence(reference);
-                if (seq == null) {
-                    bins = new Bin[GenomicIndexUtil.MAX_BINS + 1];
-                } else {
-                    bins = new Bin[AbstractBAMFileIndex.getMaxBinNumberForSequenceLength(seq.getSequenceLength()) + 1];
-                }
-            }
-
-            // is there a bin already represented for this index?  if not, add one
-            final Bin bin;
-            if (bins[binNum] != null) {
-                bin = bins[binNum];
-            } else {
-                bin = new Bin(reference, binNum);
-                bins[binNum] = bin;
-                binsSeen++;
-            }
-
-            // process chunks
-
-            final long chunkStart = (slice.containerOffset << 16) | slice.index;
-            final long chunkEnd = ((slice.containerOffset << 16) | slice.index) + 1;
-
-            final Chunk newChunk = new Chunk(chunkStart, chunkEnd);
-
-            final List<Chunk> oldChunks = bin.getChunkList();
-            if (!bin.containsChunks()) {
-                bin.addInitialChunk(newChunk);
-
-            } else {
-                final Chunk lastChunk = bin.getLastChunk();
-
-                // Coalesce chunks that are in the same or adjacent file blocks.
-                // Similar to AbstractBAMFileIndex.optimizeChunkList,
-                // but no need to copy the list, no minimumOffset, and maintain bin.lastChunk
-                if (BlockCompressedFilePointerUtil.areInSameOrAdjacentBlocks(lastChunk.getChunkEnd(), chunkStart)) {
-                    lastChunk.setChunkEnd(chunkEnd);  // coalesced
-                } else {
-                    oldChunks.add(newChunk);
-                    bin.setLastChunk(newChunk);
-                }
-            }
-
-            // process linear index
-
-            // the smallest file offset that appears in the 16k window for this bin
-            final int alignmentEnd = slice.alignmentStart + slice.alignmentSpan;
-            int startWindow = LinearIndex.convertToLinearIndexOffset(alignmentStart); // the 16k window
-            final int endWindow;
-
-            if (alignmentEnd == SAMRecord.NO_ALIGNMENT_START) {   // assume alignment uses one position
-                // Next line for C (samtools index) compatibility. Differs only when on a window boundary
-                startWindow = LinearIndex.convertToLinearIndexOffset(alignmentStart - 1);
-                endWindow = startWindow;
-            } else {
-                endWindow = LinearIndex.convertToLinearIndexOffset(alignmentEnd);
-            }
-
-            if (endWindow > largestIndexSeen) {
-                largestIndexSeen = endWindow;
-            }
-
-            // set linear index at every 16K window that this alignment overlaps
-            for (int win = startWindow; win <= endWindow; win++) {
-                if (index[win] == 0 || chunkStart < index[win]) {
-                    index[win] = chunkStart;
-                }
-            }
-        }
-
-        /**
-         * Creates the BAMIndexContent for this reference.
-         * Requires all alignments of the reference have already been processed.
-         */
-        public BAMIndexContent processReference(final int reference) {
-
-            if (reference != currentReference) {
-                throw new SAMException("Unexpected reference " + reference + " when constructing index for " + currentReference);
-            }
-
-            // process bins
-            if (binsSeen == 0) {
-                return null;  // no bins for this reference
-            }
-
-            // process chunks
-            // nothing needed
-
-            // process linear index
-            // linear index will only be as long as the largest index seen
-            final long[] newIndex = new long[largestIndexSeen + 1]; // in java1.6 Arrays.copyOf(index, largestIndexSeen + 1);
-
-            // C (samtools index) also fills in intermediate 0's with values.  This seems unnecessary, but safe
-            long lastNonZeroOffset = 0;
-            for (int i = 0; i <= largestIndexSeen; i++) {
-                if (index[i] == 0) {
-                    index[i] = lastNonZeroOffset; // not necessary, but C (samtools index) does this
-                    // note, if you remove the above line BAMIndexWriterTest.compareTextual and compareBinary will have to change
-                } else {
-                    lastNonZeroOffset = index[i];
-                }
-                newIndex[i] = index[i];
-            }
-
-            final LinearIndex linearIndex = new LinearIndex(reference, 0, newIndex);
-
-            return new BAMIndexContent(reference, bins, binsSeen, indexStats, linearIndex);
-        }
-
-        /**
-         * @return the count of records with no coordinate positions
-         */
-        public long getNoCoordinateRecordCount() {
-            return indexStats.getNoCoordinateRecordCount();
-        }
-
-        /**
-         * reinitialize all data structures when the reference changes
-         */
-        void startNewReference() {
-            bins = null;
-            if (binsSeen > 0) {
-                Arrays.fill(index, 0);
-            }
-            binsSeen = 0;
-            largestIndexSeen = -1;
-            indexStats.newReference();
-        }
-    }
-
-    /**
-     * Generates a BAI index file from an input CRAM stream
-     *
-     * @param stream CRAM stream to index
-     * @param output File for output index file
-     * @param log    optional {@link htsjdk.samtools.util.Log} to output progress
-     */
-    public static void createIndex(final SeekableStream stream, final File output, final Log log, final ValidationStringency validationStringency) throws IOException {
-
-        final CramHeader cramHeader = CramIO.readCramHeader(stream);
-        if (cramHeader.getSamFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            throw new SAMException("Expecting a coordinate sorted file.");
-        }
-        final CRAMBAIIndexer indexer = new CRAMBAIIndexer(output, cramHeader.getSamFileHeader());
-
-        int totalRecords = 0;
-        Container container = null;
-        ProgressLogger progressLogger = new ProgressLogger(log, 1, "indexed", "slices");
-        do {
-            try {
-                final long offset = stream.position();
-                container = ContainerIO.readContainer(cramHeader.getVersion(), stream);
-                if (container == null || container.isEOF()) {
-                    break;
-                }
-
-                container.offset = offset;
-
-                indexer.processContainer(container, validationStringency);
-
-                if (null != log) {
-                    String sequenceName;
-                    switch (container.sequenceId) {
-                        case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX:
-                            sequenceName = "?";
-                            break;
-                        case Slice.MULTI_REFERENCE:
-                            sequenceName = "???";
-                            break;
-                        default:
-                            sequenceName = cramHeader.getSamFileHeader().getSequence(container.sequenceId).getSequenceName();
-                            break;
-                    }
-                    progressLogger.record(sequenceName, container.alignmentStart);
-                }
-
-            } catch (final IOException e) {
-                throw new RuntimeException("Failed to read cram container", e);
-            }
-
-        } while (!container.isEOF());
-
-        indexer.finish();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CRAMCRAIIndexer.java b/src/main/java/htsjdk/samtools/CRAMCRAIIndexer.java
deleted file mode 100644
index 4599d9b..0000000
--- a/src/main/java/htsjdk/samtools/CRAMCRAIIndexer.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIEntry;
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.structure.*;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.util.Scanner;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Indexer for creating/reading/writing a CRAIIndex for a CRAM file/stream. There
- * are three ways to obtain an index:
- * </p><ul>
- * <li>create an index for an entire CRAM stream and write it to an output stream</li>
- * <li>create an index on-the-fly by processing one container at a time</li>
- * <li>read an existing index from an input stream</li>
- * </ul><p>
- */
-public class CRAMCRAIIndexer {
-
-    final private CRAIIndex craiIndex = new CRAIIndex();
-    final private GZIPOutputStream os;
-
-    /**
-     * Create a CRAMCRAIIndexer that writes to the given output stream.
-     * @param os output stream to which the index will be written
-     * @param samHeader SAMFileHeader - user to verify sort order
-     */
-    public CRAMCRAIIndexer(OutputStream os, SAMFileHeader samHeader) {
-        if (samHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            throw new SAMException("CRAM file be coordinate-sorted for indexing.");
-        }
-        try {
-            this.os = new GZIPOutputStream(new BufferedOutputStream(os));
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException("Error opening CRAI index output stream");
-        }
-    }
-
-    /**
-     * Create index entries for a single container.
-     * @param container the container to index
-     */
-    public void processContainer(final Container container) {
-        craiIndex.processContainer(container);
-    }
-
-    // TODO this is only used by test code
-    public void addEntry(CRAIEntry entry) {
-        craiIndex.addEntry(entry);
-    }
-
-    /**
-     * Finish creating the index by writing the accumulated entries out to the stream.
-     */
-    public void finish() {
-        try {
-            craiIndex.writeIndex(os);
-            os.flush();
-            os.close();
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException("Error writing CRAI index to output stream");
-        }
-    }
-
-    /**
-     * Generate and write a CRAI index to an output stream from a CRAM input stream
-     *
-     * @param cramStream CRAM stream to index; must be coordinate sorted
-     * @param craiStream stream for output index
-     */
-    public static void writeIndex(final SeekableStream cramStream, OutputStream craiStream) {
-        try {
-            final CramHeader cramHeader = CramIO.readCramHeader(cramStream);
-            final CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(craiStream, cramHeader.getSamFileHeader());
-            final Version cramVersion = cramHeader.getVersion();
-
-            // get the first container and it's offset
-            long offset = cramStream.position();
-            Container container = ContainerIO.readContainer(cramVersion, cramStream);
-
-            while (container != null && !container.isEOF()) {
-                container.offset = offset;
-                indexer.processContainer(container);
-                offset = cramStream.position();
-                container = ContainerIO.readContainer(cramVersion, cramStream);
-            }
-
-            indexer.finish();
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException("Error writing CRAI index to output stream");
-        }
-    }
-
-    /**
-     * Read an input stream containing a .crai index and return a CRAIIndex object.
-     * @param is Input stream to read
-     * @return A CRAIIndex object representing the index.
-     */
-    public static CRAIIndex readIndex(final InputStream is) {
-        CRAIIndex craiIndex = new CRAIIndex();
-        Scanner scanner = null;
-
-        try {
-            scanner = new Scanner(new GZIPInputStream(is));
-            while (scanner.hasNextLine()) {
-                final String line = scanner.nextLine();
-                craiIndex.addEntry(new CRAIEntry(line));
-            }
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException("Error reading CRAI index from output stream");
-        }
-        finally {
-            if (null != scanner) {
-                scanner.close();
-            }
-        }
-
-        return craiIndex;
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/CRAMContainerStreamWriter.java b/src/main/java/htsjdk/samtools/CRAMContainerStreamWriter.java
deleted file mode 100644
index 4707b7b..0000000
--- a/src/main/java/htsjdk/samtools/CRAMContainerStreamWriter.java
+++ /dev/null
@@ -1,495 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.ContainerFactory;
-import htsjdk.samtools.cram.build.Cram2SamRecordFactory;
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.build.CramNormalizer;
-import htsjdk.samtools.cram.build.Sam2CramRecordFactory;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.lossy.PreservationPolicy;
-import htsjdk.samtools.cram.lossy.QualityScorePreservation;
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.ref.ReferenceTracks;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * Class for writing SAMRecords into a series of CRAM containers on an output stream.
- */
-public class CRAMContainerStreamWriter {
-    private static final Version cramVersion = CramVersions.DEFAULT_CRAM_VERSION;
-
-    static int DEFAULT_RECORDS_PER_SLICE = 10000;
-    static int MIN_SINGLE_REF_RECORDS = 1000;
-    protected final int recordsPerSlice = DEFAULT_RECORDS_PER_SLICE;
-    private static final int DEFAULT_SLICES_PER_CONTAINER = 1;
-    protected final int containerSize = recordsPerSlice * DEFAULT_SLICES_PER_CONTAINER;
-    private static final int REF_SEQ_INDEX_NOT_INITIALIZED = -3;
-
-    private final SAMFileHeader samFileHeader;
-    private final String cramID;
-    private final OutputStream outputStream;
-    private CRAMReferenceSource source;
-
-    private final List<SAMRecord> samRecords = new ArrayList<SAMRecord>();
-    private ContainerFactory containerFactory;
-    private int refSeqIndex = REF_SEQ_INDEX_NOT_INITIALIZED;
-
-    private static final Log log = Log.getInstance(CRAMContainerStreamWriter.class);
-
-    private boolean preserveReadNames = true;
-    private QualityScorePreservation preservation = null;
-    private boolean captureAllTags = true;
-    private Set<String> captureTags = new TreeSet<String>();
-    private Set<String> ignoreTags = new TreeSet<String>();
-
-    private CRAMBAIIndexer indexer;
-    private long offset;
-
-    /**
-     * Create a CRAMContainerStreamWriter for writing SAM records into a series of CRAM
-     * containers on output stream, with an optional index.
-     *
-     * @param outputStream where to write the CRAM stream.
-     * @param indexStream where to write the output index. Can be null if no index is required.
-     * @param source reference source
-     * @param samFileHeader {@link SAMFileHeader} to be used. Sort order is determined by the sortOrder property of this arg.
-     * @param cramId used for display in error message display
-     */
-    public CRAMContainerStreamWriter(
-            final OutputStream outputStream,
-            final OutputStream indexStream,
-            final CRAMReferenceSource source,
-            final SAMFileHeader samFileHeader,
-            final String cramId) {
-        this.outputStream = outputStream;
-        this.samFileHeader = samFileHeader;
-        this.cramID = cramId;
-        this.source = source;
-        containerFactory = new ContainerFactory(samFileHeader, recordsPerSlice);
-        if (indexStream != null) {
-            indexer = new CRAMBAIIndexer(indexStream, samFileHeader);
-        }
-    }
-
-    /**
-     * Write an alignment record.
-     * @param alignment must not be null
-     */
-    public void writeAlignment(final SAMRecord alignment) {
-        if (shouldFlushContainer(alignment)) {
-            try {
-                flushContainer();
-            } catch (IOException e) {
-                throw new RuntimeIOException(e);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        updateReferenceContext(alignment.getReferenceIndex());
-
-        samRecords.add(alignment);
-    }
-
-    /**
-     * Write a CRAM file header and SAM header to the stream.
-
-     * @param header SAMFileHeader to write
-     */
-    public void writeHeader(final SAMFileHeader header) {
-        // TODO: header must be written exactly once per writer life cycle.
-        offset = CramIO.writeHeader(cramVersion, outputStream, header, cramID);
-    }
-
-    /**
-     * Finish writing to the stream. Flushes the record cache and optionally emits an EOF container.
-     * @param writeEOFContainer true if an EOF container should be written. Only use false if writing a CRAM file
-     *                          fragment which will later be aggregated into a complete CRAM file.
-     */
-    public void finish(final boolean writeEOFContainer) {
-        try {
-            if (!samRecords.isEmpty()) {
-                flushContainer();
-            }
-            if (writeEOFContainer) {
-                CramIO.issueEOF(cramVersion, outputStream);
-            }
-            outputStream.flush();
-            if (indexer != null) {
-                indexer.finish();
-            }
-            outputStream.close();
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        } catch (final IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public boolean isPreserveReadNames() {
-        return preserveReadNames;
-    }
-
-    public void setPreserveReadNames(final boolean preserveReadNames) {
-        this.preserveReadNames = preserveReadNames;
-    }
-
-    public List<PreservationPolicy> getPreservationPolicies() {
-        if (preservation == null) {
-            // set up greedy policy by default:
-            preservation = new QualityScorePreservation("*8");
-        }
-        return preservation.getPreservationPolicies();
-    }
-
-    public boolean isCaptureAllTags() {
-        return captureAllTags;
-    }
-
-    public void setCaptureAllTags(final boolean captureAllTags) {
-        this.captureAllTags = captureAllTags;
-    }
-
-    public Set<String> getCaptureTags() {
-        return captureTags;
-    }
-
-    public void setCaptureTags(final Set<String> captureTags) {
-        this.captureTags = captureTags;
-    }
-
-    public Set<String> getIgnoreTags() {
-        return ignoreTags;
-    }
-
-    public void setIgnoreTags(final Set<String> ignoreTags) {
-        this.ignoreTags = ignoreTags;
-    }
-
-    /**
-     * Decide if the current container should be completed and flushed. The decision is based on a) number of records and b) if the
-     * reference sequence id has changed.
-     *
-     * @param nextRecord the record to be added into the current or next container
-     * @return true if the current container should be flushed and the following records should go into a new container; false otherwise.
-     */
-    protected boolean shouldFlushContainer(final SAMRecord nextRecord) {
-        if (samRecords.isEmpty()) {
-            refSeqIndex = nextRecord.getReferenceIndex();
-            return false;
-        }
-
-        if (samRecords.size() >= containerSize) {
-            return true;
-        }
-
-        if (samFileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            return false;
-        }
-
-        // make unmapped reads don't get into multiref containers:
-        if (refSeqIndex != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && nextRecord.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-            return true;
-        }
-
-        if (refSeqIndex == Slice.MULTI_REFERENCE) {
-            return false;
-        }
-
-        final boolean sameRef = (refSeqIndex == nextRecord.getReferenceIndex());
-        if (sameRef) {
-            return false;
-        }
-
-        /**
-         * Protection against too small containers: flush at least X single refs, switch to multiref otherwise.
-         */
-        if (samRecords.size() > MIN_SINGLE_REF_RECORDS) {
-            return true;
-        } else {
-            refSeqIndex = Slice.MULTI_REFERENCE;
-            return false;
-        }
-    }
-
-    private static void updateTracks(final List<SAMRecord> samRecords, final ReferenceTracks tracks) {
-        for (final SAMRecord samRecord : samRecords) {
-            if (samRecord.getAlignmentStart() != SAMRecord.NO_ALIGNMENT_START) {
-                int refPos = samRecord.getAlignmentStart();
-                int readPos = 0;
-                for (final CigarElement cigarElement : samRecord.getCigar().getCigarElements()) {
-                    if (cigarElement.getOperator().consumesReferenceBases()) {
-                        for (int elementIndex = 0; elementIndex < cigarElement.getLength(); elementIndex++)
-                            tracks.addCoverage(refPos + elementIndex, 1);
-                    }
-                    switch (cigarElement.getOperator()) {
-                        case M:
-                        case X:
-                        case EQ:
-                            for (int pos = readPos; pos < cigarElement.getLength(); pos++) {
-                                final byte readBase = samRecord.getReadBases()[readPos + pos];
-                                final byte refBase = tracks.baseAt(refPos + pos);
-                                if (readBase != refBase) tracks.addMismatches(refPos + pos, 1);
-                            }
-                            break;
-
-                        default:
-                            break;
-                    }
-
-                    readPos += cigarElement.getOperator().consumesReadBases() ? cigarElement.getLength() : 0;
-                    refPos += cigarElement.getOperator().consumesReferenceBases() ? cigarElement.getLength() : 0;
-                }
-            }
-        }
-    }
-
-    /**
-     * Complete the current container and flush it to the output stream.
-     *
-     * @throws IllegalArgumentException
-     * @throws IllegalAccessException
-     * @throws IOException
-     */
-    protected void flushContainer() throws IllegalArgumentException, IllegalAccessException, IOException {
-
-        final byte[] refs;
-        String refSeqName = null;
-        switch (refSeqIndex) {
-            case Slice.MULTI_REFERENCE:
-                if (preservation != null && preservation.areReferenceTracksRequired()) {
-                    throw new SAMException("Cannot apply reference-based lossy compression on non-coordinate sorted reads.");
-                }
-            refs = new byte[0];
-                break;
-            case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX:
-                refs = new byte[0];
-                break;
-            default:
-            final SAMSequenceRecord sequence = samFileHeader.getSequence(refSeqIndex);
-            refs = source.getReferenceBases(sequence, true);
-            refSeqName = sequence.getSequenceName();
-                break;
-        }
-
-        int start = SAMRecord.NO_ALIGNMENT_START;
-        int stop = SAMRecord.NO_ALIGNMENT_START;
-        for (final SAMRecord r : samRecords) {
-            if (r.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START) continue;
-
-            if (start == SAMRecord.NO_ALIGNMENT_START) start = r.getAlignmentStart();
-
-            start = Math.min(r.getAlignmentStart(), start);
-            stop = Math.max(r.getAlignmentEnd(), stop);
-        }
-
-        ReferenceTracks tracks = null;
-        if (preservation != null && preservation.areReferenceTracksRequired()) {
-            tracks = new ReferenceTracks(refSeqIndex, refSeqName, refs);
-
-            tracks.ensureRange(start, stop - start + 1);
-            updateTracks(samRecords, tracks);
-        }
-
-        final List<CramCompressionRecord> cramRecords = new ArrayList<CramCompressionRecord>(samRecords.size());
-
-        final Sam2CramRecordFactory sam2CramRecordFactory = new Sam2CramRecordFactory(refs, samFileHeader, cramVersion);
-        sam2CramRecordFactory.preserveReadNames = preserveReadNames;
-        sam2CramRecordFactory.captureAllTags = captureAllTags;
-        sam2CramRecordFactory.captureTags.addAll(captureTags);
-        sam2CramRecordFactory.ignoreTags.addAll(ignoreTags);
-        containerFactory.setPreserveReadNames(preserveReadNames);
-
-        int index = 0;
-        int prevAlStart = start;
-        for (final SAMRecord samRecord : samRecords) {
-            if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && refSeqIndex != samRecord.getReferenceIndex()) {
-                // this may load all ref sequences into memory:
-                sam2CramRecordFactory.setRefBases(source.getReferenceBases(samFileHeader.getSequence(samRecord.getReferenceIndex()), true));
-            }
-            final CramCompressionRecord cramRecord = sam2CramRecordFactory.createCramRecord(samRecord);
-            cramRecord.index = ++index;
-            cramRecord.alignmentDelta = samRecord.getAlignmentStart() - prevAlStart;
-            cramRecord.alignmentStart = samRecord.getAlignmentStart();
-            prevAlStart = samRecord.getAlignmentStart();
-
-            cramRecords.add(cramRecord);
-
-            if (preservation != null) preservation.addQualityScores(samRecord, cramRecord, tracks);
-            else if (cramRecord.qualityScores != SAMRecord.NULL_QUALS) cramRecord.setForcePreserveQualityScores(true);
-            }
-
-
-        if (sam2CramRecordFactory.getBaseCount() < 3 * sam2CramRecordFactory.getFeatureCount())
-            log.warn("Abnormally high number of mismatches, possibly wrong reference.");
-
-        {
-            if (samFileHeader.getSortOrder() == SAMFileHeader.SortOrder.coordinate) {
-                // mating:
-                final Map<String, CramCompressionRecord> primaryMateMap = new TreeMap<String, CramCompressionRecord>();
-                final Map<String, CramCompressionRecord> secondaryMateMap = new TreeMap<String, CramCompressionRecord>();
-                for (final CramCompressionRecord r : cramRecords) {
-                    if (!r.isMultiFragment()) {
-                        r.setDetached(true);
-
-                        r.setHasMateDownStream(false);
-                        r.recordsToNextFragment = -1;
-                        r.next = null;
-                        r.previous = null;
-                    } else {
-                        final String name = r.readName;
-                        final Map<String, CramCompressionRecord> mateMap = r.isSecondaryAlignment() ? secondaryMateMap : primaryMateMap;
-                        final CramCompressionRecord mate = mateMap.get(name);
-                        if (mate == null) {
-                            mateMap.put(name, r);
-                        } else {
-                            CramCompressionRecord prev = mate;
-                            while (prev.next != null) prev = prev.next;
-                            prev.recordsToNextFragment = r.index - prev.index - 1;
-                            prev.next = r;
-                            r.previous = prev;
-                            r.previous.setHasMateDownStream(true);
-                            r.setHasMateDownStream(false);
-                            r.setDetached(false);
-                            r.previous.setDetached(false);
-                        }
-                    }
-                }
-
-                // mark unpredictable reads as detached:
-                for (final CramCompressionRecord cramRecord : cramRecords) {
-                    if (cramRecord.next == null || cramRecord.previous != null) continue;
-                    CramCompressionRecord last = cramRecord;
-                    while (last.next != null) last = last.next;
-
-                    if (cramRecord.isFirstSegment() && last.isLastSegment()) {
-
-                        final int templateLength = CramNormalizer.computeInsertSize(cramRecord, last);
-
-                        if (cramRecord.templateSize == templateLength) {
-                            last = cramRecord.next;
-                            while (last.next != null) {
-                                if (last.templateSize != -templateLength)
-                                    break;
-
-                                last = last.next;
-                            }
-                            if (last.templateSize != -templateLength) detach(cramRecord);
-                        }else detach(cramRecord);
-                    } else detach(cramRecord);
-                }
-
-                for (final CramCompressionRecord cramRecord : primaryMateMap.values()) {
-                    if (cramRecord.next != null) continue;
-                    cramRecord.setDetached(true);
-
-                    cramRecord.setHasMateDownStream(false);
-                    cramRecord.recordsToNextFragment = -1;
-                    cramRecord.next = null;
-                    cramRecord.previous = null;
-                }
-
-                for (final CramCompressionRecord cramRecord : secondaryMateMap.values()) {
-                    if (cramRecord.next != null) continue;
-                    cramRecord.setDetached(true);
-
-                    cramRecord.setHasMateDownStream(false);
-                    cramRecord.recordsToNextFragment = -1;
-                    cramRecord.next = null;
-                    cramRecord.previous = null;
-                }
-            }
-            else {
-                for (final CramCompressionRecord cramRecord : cramRecords) {
-                    cramRecord.setDetached(true);
-                }
-            }
-        }
-
-
-        {
-            /**
-             * The following passage is for paranoid mode only. When java is run with asserts on it will throw an {@link AssertionError} if
-             * read bases or quality scores of a restored SAM record mismatch the original. This is effectively a runtime round trip test.
-             */
-            @SuppressWarnings("UnusedAssignment") boolean assertsEnabled = false;
-            //noinspection AssertWithSideEffects,ConstantConditions
-            assert assertsEnabled = true;
-            //noinspection ConstantConditions
-            if (assertsEnabled) {
-                final Cram2SamRecordFactory f = new Cram2SamRecordFactory(samFileHeader);
-                for (int i = 0; i < samRecords.size(); i++) {
-                    final SAMRecord restoredSamRecord = f.create(cramRecords.get(i));
-                    assert (restoredSamRecord.getAlignmentStart() == samRecords.get(i).getAlignmentStart());
-                    assert (restoredSamRecord.getReferenceName().equals(samRecords.get(i).getReferenceName()));
-                    assert (restoredSamRecord.getReadString().equals(samRecords.get(i).getReadString()));
-                    assert (restoredSamRecord.getBaseQualityString().equals(samRecords.get(i).getBaseQualityString()));
-                }
-            }
-        }
-
-        final Container container = containerFactory.buildContainer(cramRecords);
-        for (final Slice slice : container.slices) {
-            slice.setRefMD5(refs);
-        }
-        container.offset = offset;
-        offset += ContainerIO.writeContainer(cramVersion, container, outputStream);
-        if (indexer != null) {
-            /**
-             * Using silent validation here because the reads have been through validation already or
-             * they have been generated somehow through the htsjdk.
-             */
-            indexer.processContainer(container, ValidationStringency.SILENT);
-        }
-        samRecords.clear();
-        refSeqIndex = REF_SEQ_INDEX_NOT_INITIALIZED;
-    }
-
-    /**
-     * Traverse the graph and mark all segments as detached.
-     *
-     * @param cramRecord the starting point of the graph
-     */
-    private static void detach(CramCompressionRecord cramRecord) {
-        do {
-            cramRecord.setDetached(true);
-
-            cramRecord.setHasMateDownStream(false);
-            cramRecord.recordsToNextFragment = -1;
-        }
-        while ((cramRecord = cramRecord.next) != null);
-    }
-
-    /**
-     * Check if the reference has changed and create a new record factory using the new reference.
-     *
-     * @param samRecordReferenceIndex index of the new reference sequence
-     */
-    private void updateReferenceContext(final int samRecordReferenceIndex) {
-        if (refSeqIndex == Slice.MULTI_REFERENCE) {
-            return;
-        }
-
-        if (refSeqIndex == REF_SEQ_INDEX_NOT_INITIALIZED) {
-            refSeqIndex = samRecordReferenceIndex;
-        } else if (refSeqIndex != samRecordReferenceIndex) {
-            refSeqIndex = Slice.MULTI_REFERENCE;
-    }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/CRAMFileReader.java b/src/main/java/htsjdk/samtools/CRAMFileReader.java
deleted file mode 100644
index 9a29d36..0000000
--- a/src/main/java/htsjdk/samtools/CRAMFileReader.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*******************************************************************************
- * Copyright 2013 EMBL-EBI
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package htsjdk.samtools;
-
-import htsjdk.samtools.SAMFileHeader.SortOrder;
-import htsjdk.samtools.SamReader.Type;
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.RuntimeEOFException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.NoSuchElementException;
-
-/**
- * {@link htsjdk.samtools.BAMFileReader BAMFileReader} analogue for CRAM files.
- * Supports random access using BAI index file formats.
- *
- * @author vadim
- */
- at SuppressWarnings("UnusedDeclaration")
-public class CRAMFileReader extends SamReader.ReaderImplementation implements SamReader.Indexing {
-    private File cramFile;
-    private final CRAMReferenceSource referenceSource;
-    private InputStream inputStream;
-    private CRAMIterator iterator;
-    private BAMIndex mIndex;
-    private File mIndexFile;
-    private boolean mEnableIndexCaching;
-    private boolean mEnableIndexMemoryMapping;
-
-    private ValidationStringency validationStringency;
-
-    private final static Log log = Log.getInstance(CRAMFileReader.class);
-
-    /**
-     * Create a CRAMFileReader from either a file or input stream using the reference source returned by
-     * {@link ReferenceSource#getDefaultCRAMReferenceSource() getDefaultCRAMReferenceSource}.
-     *
-     * @param cramFile CRAM file to open
-     * @param inputStream CRAM stream to read
-     *
-     * @throws IllegalArgumentException if the {@code cramFile} and the {@code inputStream} are both null
-     * @throws IllegalStateException if a {@link ReferenceSource#getDefaultCRAMReferenceSource() default}
-     * reference source cannot be acquired
-     */
-    public CRAMFileReader(final File cramFile, final InputStream inputStream) {
-        this(cramFile, inputStream, ReferenceSource.getDefaultCRAMReferenceSource());
-    }
-
-    /**
-     * Create a CRAMFileReader from either a file or input stream using the supplied reference source.
-     *
-     * @param cramFile        CRAM file to read
-     * @param inputStream     CRAM stream to read
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.ReferenceSource source} of
-     *                        reference sequences. May not be null.
-     *
-     * @throws IllegalArgumentException if the {@code cramFile} and the {@code inputStream} are both null
-     * or if the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final File cramFile, final InputStream inputStream,
-                          final CRAMReferenceSource referenceSource) {
-        if (cramFile == null && inputStream == null) {
-            throw new IllegalArgumentException("Either file or input stream is required.");
-        }
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM readers");
-        }
-
-        this.cramFile = cramFile;
-        this.inputStream = inputStream;
-        this.referenceSource = referenceSource;
-        if (cramFile != null) {
-            mIndexFile = findIndexForFile(null, cramFile);
-        }
-        getIterator();
-    }
-
-    /**
-     * Create a CRAMFileReader from a file and optional index file using the supplied reference source. If index file
-     * is supplied then random access will be available.
-     *
-     * @param cramFile        CRAM file to read. May not be null.
-     * @param indexFile       index file to be used for random access. May be null.
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.CRAMReferenceSource source} of
-     *                        reference sequences. May not be null.
-     * @throws IllegalArgumentException if the {@code cramFile} or the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final File cramFile, final File indexFile,
-                          final CRAMReferenceSource referenceSource) {
-        if (cramFile == null)
-            throw new IllegalArgumentException("File is required.");
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM readers");
-        }
-
-        this.cramFile = cramFile;
-        mIndexFile = findIndexForFile(indexFile, cramFile);
-        this.referenceSource = referenceSource;
-
-        getIterator();
-    }
-
-    /**
-     * Create a CRAMFileReader from a file using the supplied reference source.
-     *
-     * @param cramFile        CRAM file to read. Can not be null.
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.CRAMReferenceSource source} of
-     *                        reference sequences. May not be null.
-     * @throws IllegalArgumentException if the {@code cramFile} or the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final File cramFile, final CRAMReferenceSource referenceSource) {
-        if (cramFile == null)
-            throw new IllegalArgumentException("CRAM file cannot be null.");
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM readers");
-        }
-
-        this.cramFile = cramFile;
-        this.referenceSource = referenceSource;
-        mIndexFile = findIndexForFile(null, cramFile);
-
-        getIterator();
-    }
-
-    /**
-     * Create a CRAMFileReader from an input stream and optional index stream using the supplied reference
-     * source and validation stringency.
-     *
-     * @param inputStream      CRAM stream to read. May not be null.
-     * @param indexInputStream index stream to be used for random access. May be null.
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.CRAMReferenceSource source} of
-     *                        reference sequences. May not be null.
-     * @param validationStringency Validation stringency to be used when reading
-     *
-     * @throws IllegalArgumentException if the {@code inputStream} or the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final InputStream inputStream, final SeekableStream indexInputStream,
-                          final CRAMReferenceSource referenceSource, final ValidationStringency validationStringency) throws IOException {
-        if (inputStream == null) {
-            throw new IllegalArgumentException("Input stream can not be null for CRAM reader");
-        }
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM readers");
-        }
-        this.referenceSource = referenceSource;
-        initWithStreams(inputStream, indexInputStream, validationStringency);
-    }
-
-    /**
-     * Create a CRAMFileReader from an input stream and optional index file using the supplied reference
-     * source and validation stringency.
-     *
-     * @param stream            CRAM stream to read. May not be null.
-     * @param indexFile         index file to be used for random access. May be null.
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.CRAMReferenceSource source} of
-     *                        reference sequences. May not be null.
-     * @param validationStringency Validation stringency to be used when reading
-     *
-     * @throws IllegalArgumentException if the {@code inputStream} or the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final InputStream stream,
-                          final File indexFile, final CRAMReferenceSource referenceSource,
-                          final ValidationStringency validationStringency) throws IOException {
-        this(stream, indexFile == null ? null : new SeekableFileStream(indexFile), referenceSource, validationStringency);
-    }
-
-    /**
-     * Create a CRAMFileReader from a CRAM file and optional index file using the supplied reference
-     * source and validation stringency.
-     *
-     * @param cramFile        CRAM stream to read. May not be null.
-     * @param indexFile       index file to be used for random access. May be null.
-     * @param referenceSource a {@link htsjdk.samtools.cram.ref.CRAMReferenceSource source} of
-     *                        reference sequences. May not be null.
-     * @param validationStringency Validation stringency to be used when reading
-     *
-     * @throws IllegalArgumentException if the {@code cramFile} or the {@code CRAMReferenceSource} is null
-     */
-    public CRAMFileReader(final File cramFile, final File indexFile, final CRAMReferenceSource referenceSource,
-                          final ValidationStringency validationStringency) throws IOException {
-        if (cramFile == null) {
-            throw new IllegalArgumentException("Input file can not be null for CRAM reader");
-        }
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM readers");
-        }
-        this.cramFile = cramFile;
-        this.referenceSource = referenceSource;
-        this.mIndexFile = findIndexForFile(indexFile, cramFile);
-        final SeekableFileStream indexStream = this.mIndexFile == null ? null : new SeekableFileStream(this.mIndexFile);
-        initWithStreams(new FileInputStream(cramFile), indexStream, validationStringency);
-    }
-
-    private void initWithStreams(final InputStream inputStream, final SeekableStream indexInputStream,
-                                 final ValidationStringency validationStringency) throws IOException {
-        this.inputStream = inputStream;
-        this.validationStringency = validationStringency;
-        iterator = new CRAMIterator(inputStream, referenceSource, validationStringency);
-        if (indexInputStream != null) {
-            SeekableStream baiStream = SamIndexes.asBaiSeekableStreamOrNull(indexInputStream, iterator.getSAMFileHeader().getSequenceDictionary());
-            if (null != baiStream)  {
-                mIndex = new CachingBAMFileIndex(baiStream, iterator.getSAMFileHeader().getSequenceDictionary());
-            }
-            else {
-                throw new IllegalArgumentException("CRAM index must be a BAI or CRAI stream");
-            }
-        }
-    }
-
-    private File findIndexForFile(File indexFile, final File cramFile) {
-        indexFile = indexFile == null ? SamFiles.findIndex(cramFile) : indexFile;
-        if (indexFile != null && indexFile.lastModified() < cramFile.lastModified()) {
-            log.warn("CRAM index file " + indexFile.getAbsolutePath() +
-                    " is older than CRAM " + cramFile.getAbsolutePath());
-        }
-        return indexFile;
-    }
-
-    @Override
-    void enableIndexCaching(final boolean enabled) {
-        // relevant to BAI only
-        mEnableIndexCaching = enabled;
-    }
-
-    @Override
-    void enableIndexMemoryMapping(final boolean enabled) {
-        // relevant to BAI only
-        mEnableIndexMemoryMapping = enabled;
-    }
-
-    @Override
-    void enableCrcChecking(final boolean enabled) {
-        // inapplicable to CRAM: do nothing
-    }
-
-    @Override
-    void setSAMRecordFactory(final SAMRecordFactory factory) {
-    }
-
-    @Override
-    public boolean hasIndex() {
-        return mIndex != null || mIndexFile != null;
-    }
-
-    @Override
-    public BAMIndex getIndex() {
-        if (!hasIndex())
-            throw new SAMException("No index is available for this CRAM file.");
-        if (mIndex == null) {
-            final SAMSequenceDictionary dictionary = getFileHeader()
-                    .getSequenceDictionary();
-            if (mIndexFile.getName().endsWith(BAMIndex.BAMIndexSuffix)) {
-                mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexFile,
-                        dictionary, mEnableIndexMemoryMapping)
-                        : new DiskBasedBAMFileIndex(mIndexFile, dictionary,
-                        mEnableIndexMemoryMapping);
-                return mIndex;
-            }
-
-            if (!mIndexFile.getName().endsWith(CRAIIndex.CRAI_INDEX_SUFFIX)) return null;
-            // convert CRAI into BAI:
-            final SeekableStream baiStream;
-            try {
-                baiStream = SamIndexes.asBaiSeekableStreamOrNull(new SeekableFileStream(mIndexFile), iterator.getSAMFileHeader().getSequenceDictionary());
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-
-            mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(baiStream, getFileHeader().getSequenceDictionary()) :
-                    new DiskBasedBAMFileIndex(baiStream, getFileHeader().getSequenceDictionary());
-        }
-        return mIndex;
-    }
-
-    @Override
-    public boolean hasBrowseableIndex() {
-        return false;
-    }
-
-    @Override
-    public BrowseableBAMIndex getBrowseableIndex() {
-        return null;
-    }
-
-    @Override
-    public SAMRecordIterator iterator(final SAMFileSpan fileSpan) {
-        // get the file coordinates for the span:
-        final long[] coordinateArray = ((BAMFileSpan) fileSpan).toCoordinateArray();
-        if (coordinateArray == null || coordinateArray.length == 0) return emptyIterator;
-        try {
-            // create an input stream that reads the source cram stream only within the coordinate pairs:
-            final SeekableStream seekableStream = getSeekableStreamOrFailWithRTE();
-            return new CRAMIterator(seekableStream, referenceSource, coordinateArray, validationStringency);
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public SAMFileHeader getFileHeader() {
-        return iterator.getSAMFileHeader();
-    }
-
-    @Override
-    public SAMRecordIterator getIterator() {
-        if (iterator != null && cramFile == null)
-            return iterator;
-        try {
-            final CRAMIterator newIterator;
-            if (cramFile != null) {
-                newIterator = new CRAMIterator(new FileInputStream(cramFile),
-                        referenceSource, validationStringency);
-            } else
-                newIterator = new CRAMIterator(inputStream, referenceSource, validationStringency);
-
-            iterator = newIterator;
-            return iterator;
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> getIterator(final SAMFileSpan fileSpan) {
-        return iterator(fileSpan);
-    }
-
-    @Override
-    public SAMFileSpan getFilePointerSpanningReads() {
-        return new BAMFileSpan(new Chunk(iterator.firstContainerOffset << 16, Long.MAX_VALUE));
-    }
-
-    private static final SAMRecordIterator emptyIterator = new SAMRecordIterator() {
-
-        @Override
-        public boolean hasNext() {
-            return false;
-        }
-
-        @Override
-        public SAMRecord next() {
-            throw new RuntimeException("No records.");
-        }
-
-        @Override
-        public void remove() {
-            throw new RuntimeException("Remove not supported.");
-        }
-
-        @Override
-        public void close() {
-        }
-
-        @Override
-        public SAMRecordIterator assertSorted(final SortOrder sortOrder) {
-            return this;
-        }
-    };
-
-    @Override
-    public CloseableIterator<SAMRecord> queryAlignmentStart(final String sequence,
-                                                            final int start) {
-        final SAMFileHeader fileHeader = getFileHeader();
-        final int referenceIndex = fileHeader.getSequenceIndex(sequence);
-        return new CRAMIntervalIterator(new QueryInterval[]{new QueryInterval(referenceIndex, start, -1)}, true);
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> queryUnmapped() {
-        final long startOfLastLinearBin = getIndex().getStartOfLastLinearBin();
-
-        final SeekableStream seekableStream = getSeekableStreamOrFailWithRTE();
-        final CRAMIterator newIterator;
-        try {
-            seekableStream.seek(0);
-            newIterator = new CRAMIterator(seekableStream, referenceSource, validationStringency);
-            seekableStream.seek(startOfLastLinearBin >>> 16);
-            final Container container = ContainerIO.readContainerHeader(newIterator.getCramHeader().getVersion().major, seekableStream);
-            seekableStream.seek(seekableStream.position() + container.containerByteSize);
-            iterator = newIterator;
-            boolean atAlignments;
-            do {
-                atAlignments = iterator.advanceToAlignmentInContainer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, SAMRecord.NO_ALIGNMENT_START);
-            } while (!atAlignments && iterator.hasNext());
-        } catch (final IOException e) {
-            throw new RuntimeEOFException(e);
-        }
-
-        return iterator;
-    }
-
-    private SeekableStream getSeekableStreamOrFailWithRTE() {
-        SeekableStream seekableStream = null;
-        if (cramFile != null) {
-            try {
-                seekableStream = new SeekableFileStream(cramFile);
-            } catch (final FileNotFoundException e) {
-                throw new RuntimeException(e);
-            }
-        } else if (inputStream instanceof SeekableStream) {
-            seekableStream = (SeekableStream) inputStream;
-        }
-        return seekableStream;
-    }
-
-    @Override
-    public void close() {
-        CloserUtil.close(iterator);
-        CloserUtil.close(inputStream);
-        CloserUtil.close(mIndex);
-    }
-
-    @Override
-    void setValidationStringency(final ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-        if (iterator != null) iterator.setValidationStringency(validationStringency);
-    }
-
-    @Override
-    public ValidationStringency getValidationStringency() {
-        return validationStringency;
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> query(final QueryInterval[] intervals,
-                                              final boolean contained) {
-        return new CRAMIntervalIterator(intervals, contained);
-    }
-
-    @Override
-    public Type type() {
-        return Type.CRAM_TYPE;
-    }
-
-    @Override
-    void enableFileSource(final SamReader reader, final boolean enabled) {
-        if (iterator != null)
-            iterator.setFileSource(enabled ? reader : null);
-    }
-
-    private class CRAMIntervalIterator
-            extends BAMQueryMultipleIntervalsIteratorFilter
-            implements SAMRecordIterator {
-
-        // the granularity of this iterator is the container, so the records returned
-        // by it must still be filtered to find those matching the filter criteria
-        private CRAMIterator unfilteredIterator;
-        SAMRecord nextRec = null;
-
-        public CRAMIntervalIterator(final QueryInterval[] queries, final boolean contained) {
-            super(queries, contained);
-
-            long[] coordinates = coordinatesFromQueryIntervals(getIndex(), queries);
-            if (coordinates != null && coordinates.length != 0) {
-                try {
-                    unfilteredIterator = new CRAMIterator(
-                            getSeekableStreamOrFailWithRTE(),
-                            referenceSource,
-                            coordinates,
-                            validationStringency
-                    );
-                } catch (final IOException e) {
-                    throw new RuntimeEOFException(e);
-                }
-                getNextRecord(); // advance to the first record that matches the filter criteria
-            }
-        }
-
-        // convert queries -> merged BAMFileSpan -> coordinate array
-        private long[] coordinatesFromQueryIntervals(BAMIndex index, QueryInterval[] queries) {
-            ArrayList<BAMFileSpan> spanList = new ArrayList<>(1);
-            Arrays.asList(queries).forEach(qi -> spanList.add(mIndex.getSpanOverlapping(qi.referenceIndex, qi.start, qi.end)));
-            BAMFileSpan spanArray[] = new BAMFileSpan[spanList.size()];
-            for (int i = 0; i < spanList.size(); i++) {
-                spanArray[i] = spanList.get(i);
-            }
-
-            return BAMFileSpan.merge(spanArray).toCoordinateArray();
-        }
-
-        @Override
-        public SAMRecordIterator assertSorted(final SortOrder sortOrder) {
-            return null;
-        }
-
-        @Override
-        public void close() {
-            if (unfilteredIterator != null) {
-                unfilteredIterator.close();
-            }
-        }
-
-        @Override
-        public boolean hasNext() {
-            return nextRec != null;
-        }
-
-        @Override
-        public SAMRecord next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException("Next called on empty CRAMIntervalIterator");
-            }
-            return getNextRecord();
-        }
-
-        private SAMRecord getNextRecord() {
-            final SAMRecord result = nextRec;
-            nextRec = null;
-            while(nextRec == null && unfilteredIterator.hasNext()) {
-                SAMRecord nextRecord = unfilteredIterator.next();
-                switch(compareToFilter(nextRecord)) {
-                    case MATCHES_FILTER:
-                        nextRec = nextRecord;
-                        break;
-                    case CONTINUE_ITERATION:
-                        continue;
-                    case STOP_ITERATION:
-                        break;
-                    default:
-                        throw new SAMException("Unexpected return from compareToFilter");
-                }
-            }
-            return result;
-        }
-
-        @Override
-        public void remove() {
-            throw new RuntimeException("Method \"remove\" not implemented for CRAMIntervalIterator.");
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CRAMFileWriter.java b/src/main/java/htsjdk/samtools/CRAMFileWriter.java
deleted file mode 100644
index 5d3f2e2..0000000
--- a/src/main/java/htsjdk/samtools/CRAMFileWriter.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright 2013 EMBL-EBI
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.lossy.PreservationPolicy;
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.StringLineReader;
-
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Set;
-
- at SuppressWarnings("UnusedDeclaration")
-public class CRAMFileWriter extends SAMFileWriterImpl {
-    private CRAMContainerStreamWriter cramContainerStream;
-    private final SAMFileHeader samFileHeader;
-    private final String fileName;
-
-    private static final Log log = Log.getInstance(CRAMFileWriter.class);
-
-    /**
-     * Create a CRAMFileWriter on an output stream. Requires input records to be presorted to match the
-     * sort order defined by the input {@code samFileHeader}.
-     *
-     * @param outputStream where to write the output. Can not be null.
-     * @param referenceSource reference source. Can not be null.
-     * @param samFileHeader {@link SAMFileHeader} to be used. Can not be null. Sort order is determined by the sortOrder property of this arg.
-     * @param fileName used for display in error messages
-     *
-     * @throws IllegalArgumentException if the {@code outputStream}, {@code referenceSource} or {@code samFileHeader} are null
-     */
-    public CRAMFileWriter(
-            final OutputStream outputStream,
-            final CRAMReferenceSource referenceSource,
-            final SAMFileHeader samFileHeader,
-            final String fileName)
-    {
-        this(outputStream, null, referenceSource, samFileHeader, fileName); // defaults to presorted == true
-    }
-
-    /**
-     * Create a CRAMFileWriter and optional index on output streams. Requires input records to be presorted to match the
-     * sort order defined by the input {@code samFileHeader}.
-     *
-     * @param outputStream where to write the output. Can not be null.
-     * @param indexOS where to write the output index. Can be null if no index is required.
-     * @param referenceSource reference source
-     * @param samFileHeader {@link SAMFileHeader} to be used. Can not be null. Sort order is determined by the sortOrder property of this arg.
-     * @param fileName used for display in error messages
-     *
-     * @throws IllegalArgumentException if the {@code outputStream}, {@code referenceSource} or {@code samFileHeader} are null
-     */
-    public CRAMFileWriter(
-            final OutputStream outputStream,
-            final OutputStream indexOS,
-            final CRAMReferenceSource referenceSource,
-            final SAMFileHeader samFileHeader,
-            final String fileName)
-    {
-        this(outputStream, indexOS, true, referenceSource, samFileHeader, fileName); // defaults to presorted==true
-    }
-
-    /**
-     * Create a CRAMFileWriter and optional index on output streams.
-     *
-     * @param outputStream where to write the output. Can not be null.
-     * @param indexOS where to write the output index. Can be null if no index is required.
-     * @param presorted if true records written to this writer must already be sorted in the order specified by the header
-     * @param referenceSource reference source
-     * @param samFileHeader {@link SAMFileHeader} to be used. Can not be null. Sort order is determined by the sortOrder property of this arg.
-     * @param fileName used for display in error message display
-     *
-     * @throws IllegalArgumentException if the {@code outputStream}, {@code referenceSource} or {@code samFileHeader} are null
-     */
-    public CRAMFileWriter(final OutputStream outputStream, final OutputStream indexOS, final boolean presorted,
-                          final CRAMReferenceSource referenceSource, final SAMFileHeader samFileHeader, final String fileName) {
-        if (outputStream == null) {
-            throw new IllegalArgumentException("CRAMWriter output stream can not be null.");
-        }
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required for CRAM writers");
-        }
-        if (samFileHeader == null) {
-            throw new IllegalArgumentException("A valid SAMFileHeader is required for CRAM writers");
-        }
-        this.samFileHeader = samFileHeader;
-        this.fileName = fileName;
-        setSortOrder(samFileHeader.getSortOrder(), presorted);
-        cramContainerStream = new CRAMContainerStreamWriter(outputStream, indexOS, referenceSource, samFileHeader, fileName);
-        setHeader(samFileHeader);
-    }
-
-    /**
-     * Write an alignment record.
-     * @param alignment must not be null and must have a valid SAMFileHeader.
-     */
-    @Override
-    protected void writeAlignment(final SAMRecord alignment) {
-        cramContainerStream.writeAlignment(alignment);
-    }
-
-    @Override
-    protected void writeHeader(final String textHeader) {
-        cramContainerStream.writeHeader(
-                new SAMTextHeaderCodec().decode(new StringLineReader(textHeader),fileName != null ? fileName : null));
-    }
-
-    @Override
-    protected void finish() {
-        cramContainerStream.finish(true); // flush the last container and issue EOF
-    }
-
-    @Override
-    protected String getFilename() {
-        return fileName;
-    }
-
-    public boolean isPreserveReadNames() {
-        return cramContainerStream.isPreserveReadNames();
-    }
-
-    public void setPreserveReadNames(final boolean preserveReadNames) {
-        cramContainerStream.setPreserveReadNames(preserveReadNames);
-    }
-
-    public List<PreservationPolicy> getPreservationPolicies() {
-        return cramContainerStream.getPreservationPolicies();
-    }
-
-    public boolean isCaptureAllTags() {
-        return cramContainerStream.isCaptureAllTags();
-    }
-
-    public void setCaptureAllTags(final boolean captureAllTags) {
-        cramContainerStream.setCaptureAllTags(captureAllTags);
-    }
-
-    public Set<String> getCaptureTags() {
-        return cramContainerStream.getCaptureTags();
-    }
-
-    public void setCaptureTags(final Set<String> captureTags) {
-        cramContainerStream.setCaptureTags(captureTags);
-    }
-
-    public Set<String> getIgnoreTags() {
-        return cramContainerStream.getIgnoreTags();
-    }
-
-    public void setIgnoreTags(final Set<String> ignoreTags) {
-        cramContainerStream.setIgnoreTags(ignoreTags);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CRAMIterator.java b/src/main/java/htsjdk/samtools/CRAMIterator.java
deleted file mode 100644
index f8179e6..0000000
--- a/src/main/java/htsjdk/samtools/CRAMIterator.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*******************************************************************************
- * Copyright 2013 EMBL-EBI
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License countingInputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package htsjdk.samtools;
-
-import htsjdk.samtools.SAMFileHeader.SortOrder;
-import htsjdk.samtools.cram.build.ContainerParser;
-import htsjdk.samtools.cram.build.Cram2SamRecordFactory;
-import htsjdk.samtools.cram.build.CramContainerIterator;
-import htsjdk.samtools.cram.build.CramNormalizer;
-import htsjdk.samtools.cram.build.CramSpanContainerIterator;
-import htsjdk.samtools.cram.io.CountingInputStream;
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.Log;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import htsjdk.samtools.cram.CRAMException;
-
-public class CRAMIterator implements SAMRecordIterator {
-    private static final Log log = Log.getInstance(CRAMIterator.class);
-    private final CountingInputStream countingInputStream;
-    private CramHeader cramHeader;
-    private ArrayList<SAMRecord> records;
-    private SAMRecord nextRecord = null;
-    private CramNormalizer normalizer;
-    private byte[] refs;
-    private int prevSeqId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-    public Container container;
-    private SamReader mReader;
-    long firstContainerOffset = 0;
-    private Iterator<Container> containerIterator;
-
-    private ContainerParser parser;
-    private final CRAMReferenceSource referenceSource;
-
-    private Iterator<SAMRecord> iterator = Collections.<SAMRecord>emptyList().iterator();
-
-    private ValidationStringency validationStringency = ValidationStringency.DEFAULT_STRINGENCY;
-
-    public ValidationStringency getValidationStringency() {
-        return validationStringency;
-    }
-
-    public void setValidationStringency(
-            final ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-    }
-
-    private long samRecordIndex;
-    private ArrayList<CramCompressionRecord> cramRecords;
-
-    public CRAMIterator(final InputStream inputStream, final CRAMReferenceSource referenceSource, final ValidationStringency validationStringency)
-            throws IOException {
-        if (null == referenceSource) {
-            throw new CRAMException("A reference source is required for CRAM files");
-        }
-        this.countingInputStream = new CountingInputStream(inputStream);
-        this.referenceSource = referenceSource;
-        this.validationStringency = validationStringency;
-        final CramContainerIterator containerIterator = new CramContainerIterator(this.countingInputStream);
-        cramHeader = containerIterator.getCramHeader();
-        this.containerIterator = containerIterator;
-
-        firstContainerOffset = this.countingInputStream.getCount();
-        records = new ArrayList<SAMRecord>(10000);
-        normalizer = new CramNormalizer(cramHeader.getSamFileHeader(),
-                referenceSource);
-        parser = new ContainerParser(cramHeader.getSamFileHeader());
-    }
-
-    public CRAMIterator(final SeekableStream seekableStream, final CRAMReferenceSource referenceSource, final long[] coordinates, final ValidationStringency validationStringency)
-            throws IOException {
-        if (null == referenceSource) {
-            throw new CRAMException("A reference source is required for CRAM files");
-        }
-        this.countingInputStream = new CountingInputStream(seekableStream);
-        this.referenceSource = referenceSource;
-        this.validationStringency = validationStringency;
-        final CramSpanContainerIterator containerIterator = CramSpanContainerIterator.fromFileSpan(seekableStream, coordinates);
-        cramHeader = containerIterator.getCramHeader();
-        this.containerIterator = containerIterator;
-
-        firstContainerOffset = containerIterator.getFirstContainerOffset();
-        records = new ArrayList<SAMRecord>(10000);
-        normalizer = new CramNormalizer(cramHeader.getSamFileHeader(),
-                referenceSource);
-        parser = new ContainerParser(cramHeader.getSamFileHeader());
-    }
-
-    @Deprecated
-    public CRAMIterator(final SeekableStream seekableStream, final CRAMReferenceSource referenceSource, final long[] coordinates)
-            throws IOException {
-        this(seekableStream, referenceSource, coordinates, ValidationStringency.DEFAULT_STRINGENCY);
-    }
-
-    public CramHeader getCramHeader() {
-        return cramHeader;
-    }
-
-    void nextContainer() throws IOException, IllegalArgumentException,
-            IllegalAccessException, CRAMException {
-
-        if (containerIterator != null) {
-            if (!containerIterator.hasNext()) {
-                records.clear();
-                nextRecord = null;
-                return;
-            }
-            container = containerIterator.next();
-            if (container.isEOF()) {
-                records.clear();
-                nextRecord = null;
-                return;
-            }
-        } else {
-            container = ContainerIO.readContainer(cramHeader.getVersion(), countingInputStream);
-            if (container.isEOF()) {
-                records.clear();
-                nextRecord = null;
-                return;
-            }
-        }
-
-        if (records == null)
-            records = new ArrayList<SAMRecord>(container.nofRecords);
-        else
-            records.clear();
-        if (cramRecords == null)
-            cramRecords = new ArrayList<CramCompressionRecord>(container.nofRecords);
-        else
-            cramRecords.clear();
-
-        parser.getRecords(container, cramRecords, validationStringency);
-
-        if (container.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-            refs = new byte[]{};
-            prevSeqId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-        } else if (container.sequenceId == Slice.MULTI_REFERENCE) {
-            refs = null;
-            prevSeqId = Slice.MULTI_REFERENCE;
-        } else if (prevSeqId < 0 || prevSeqId != container.sequenceId) {
-            final SAMSequenceRecord sequence = cramHeader.getSamFileHeader()
-                    .getSequence(container.sequenceId);
-            refs = referenceSource.getReferenceBases(sequence, true);
-            if (refs == null) {
-                throw new CRAMException(String.format("Contig %s not found in the reference file.", sequence.getSequenceName()));
-            }
-            prevSeqId = container.sequenceId;
-        }
-
-        for (int i = 0; i < container.slices.length; i++) {
-            final Slice slice = container.slices[i];
-            if (slice.sequenceId < 0)
-                continue;
-            if (!slice.validateRefMD5(refs)) {
-                final String msg = String.format(
-                        "Reference sequence MD5 mismatch for slice: sequence id %d, start %d, span %d, expected MD5 %s",
-                            slice.sequenceId,
-                            slice.alignmentStart,
-                            slice.alignmentSpan,
-                            String.format("%032x", new BigInteger(1, slice.refMD5)));
-                throw new CRAMException(msg);
-            }
-        }
-
-        normalizer.normalize(cramRecords, refs, 0,
-                container.header.substitutionMatrix);
-
-        final Cram2SamRecordFactory cramToSamRecordFactory = new Cram2SamRecordFactory(
-                cramHeader.getSamFileHeader());
-
-        for (final CramCompressionRecord cramRecord : cramRecords) {
-            final SAMRecord samRecord = cramToSamRecordFactory.create(cramRecord);
-            if (!cramRecord.isSegmentUnmapped()) {
-                final SAMSequenceRecord sequence = cramHeader.getSamFileHeader()
-                        .getSequence(cramRecord.sequenceId);
-                refs = referenceSource.getReferenceBases(sequence, true);
-            }
-
-            samRecord.setValidationStringency(validationStringency);
-
-            if (validationStringency != ValidationStringency.SILENT) {
-                final List<SAMValidationError> validationErrors = samRecord.isValid();
-                SAMUtils.processValidationErrors(validationErrors,
-                        samRecordIndex, validationStringency);
-            }
-
-            if (mReader != null) {
-                final long chunkStart = (container.offset << 16) | cramRecord.sliceIndex;
-                final long chunkEnd = ((container.offset << 16) | cramRecord.sliceIndex) + 1;
-                nextRecord.setFileSource(new SAMFileSource(mReader,
-                        new BAMFileSpan(new Chunk(chunkStart, chunkEnd))));
-            }
-
-            records.add(samRecord);
-            samRecordIndex++;
-        }
-        cramRecords.clear();
-        iterator = records.iterator();
-    }
-
-    /**
-     * Skip cached records until given alignment start position.
-     *
-     * @param refIndex reference sequence index
-     * @param pos      alignment start to skip to
-     */
-    public boolean advanceToAlignmentInContainer(final int refIndex, final int pos) {
-        if (!hasNext()) return false;
-        int i = 0;
-        for (final SAMRecord record : records) {
-            if (refIndex != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && record.getReferenceIndex() != refIndex) continue;
-
-            if (pos <= 0) {
-                if (record.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START) {
-                    iterator = records.listIterator(i);
-                    return true;
-                }
-            } else {
-                if (record.getAlignmentStart() >= pos) {
-                    iterator = records.listIterator(i);
-                    return true;
-                }
-            }
-            i++;
-        }
-        iterator = Collections.<SAMRecord>emptyList().iterator();
-        return false;
-    }
-
-    @Override
-    public boolean hasNext() {
-        if (container != null && container.isEOF()) return false;
-        if (!iterator.hasNext()) {
-            try {
-                nextContainer();
-            } catch (IOException e) {
-                throw new SAMException(e);
-            } catch (IllegalAccessException e) {
-                throw new SAMException(e);
-            }
-        }
-
-        return !records.isEmpty();
-    }
-
-    @Override
-    public SAMRecord next() {
-        return iterator.next();
-    }
-
-    @Override
-    public void remove() {
-        throw new RuntimeException("Removal of records not implemented.");
-    }
-
-    @Override
-    public void close() {
-        records.clear();
-        //noinspection EmptyCatchBlock
-        try {
-            if (countingInputStream != null)
-                countingInputStream.close();
-        } catch (final IOException e) {
-        }
-    }
-
-    @Override
-    public SAMRecordIterator assertSorted(final SortOrder sortOrder) {
-        throw new RuntimeException("Not implemented.");
-    }
-
-    public SamReader getFileSource() {
-        return mReader;
-    }
-
-    public void setFileSource(final SamReader mReader) {
-        this.mReader = mReader;
-    }
-
-    public SAMFileHeader getSAMFileHeader() {
-        return cramHeader.getSamFileHeader();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/CachingBAMFileIndex.java b/src/main/java/htsjdk/samtools/CachingBAMFileIndex.java
deleted file mode 100644
index 8010ce5..0000000
--- a/src/main/java/htsjdk/samtools/CachingBAMFileIndex.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.List;
-import java.util.WeakHashMap;
-
-/**
- * Class for reading BAM file indices, caching each contig as it's loaded and
- * dropping values when the next contig is loaded.
- */
-class CachingBAMFileIndex extends AbstractBAMFileIndex implements BrowseableBAMIndex
-{
-    private Integer mLastReferenceRetrieved = null;
-    private final WeakHashMap<Integer,BAMIndexContent> mQueriesByReference = new WeakHashMap<Integer,BAMIndexContent>();
-
-    public CachingBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
-        super(file, dictionary);
-    }
-
-    public CachingBAMFileIndex(final SeekableStream stream, final SAMSequenceDictionary dictionary) {
-        super(stream, dictionary);
-    }
-
-    public CachingBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
-        super(file, dictionary, useMemoryMapping);
-    }
-
-    /**
-     * Get list of regions of BAM file that may contain SAMRecords for the given range
-     * @param referenceIndex sequence of desired SAMRecords
-     * @param startPos 1-based start of the desired interval, inclusive
-     * @param endPos 1-based end of the desired interval, inclusive
-     * @return the virtual file position.  Each pair is the first and last virtual file position
-     *         in a range that can be scanned to find SAMRecords that overlap the given positions.
-     *         May return null if there is no content overlapping the region.
-     */
-    public BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos) {
-        final BAMIndexContent queryResults = getQueryResults(referenceIndex);
-
-        if(queryResults == null)
-            return null;
-
-        final List<Chunk> chunkList = queryResults.getChunksOverlapping(startPos, endPos);
-        if (chunkList == null) return null;
-
-        return new BAMFileSpan(chunkList);
-    }
-
-    /**
-     * Get a list of bins in the BAM file that may contain SAMRecords for the given range.
-     * @param referenceIndex sequence of desired SAMRecords
-     * @param startPos 1-based start of the desired interval, inclusive
-     * @param endPos 1-based end of the desired interval, inclusive
-     * @return a list of bins that contain relevant data.
-     */
-    public BinList getBinsOverlapping(final int referenceIndex, final int startPos, final int endPos) {
-        final BitSet regionBins = GenomicIndexUtil.regionToBins(startPos, endPos);
-        if (regionBins == null) {
-            return null;
-        }
-        return new BinList(referenceIndex,regionBins);        
-    }
-
-    /**
-     * Perform an overlapping query of all bins bounding the given location.
-     * @param bin The bin over which to perform an overlapping query.
-     * @return The file pointers
-     */
-    public BAMFileSpan getSpanOverlapping(final Bin bin) {
-        if(bin == null)
-            return null;
-
-        final int referenceSequence = bin.getReferenceSequence();
-        final BAMIndexContent indexQuery = getQueryResults(referenceSequence);
-
-        if(indexQuery == null)
-            return null;
-
-        final int binLevel = getLevelForBin(bin);
-        final int firstLocusInBin = getFirstLocusInBin(bin);
-
-        // Add the specified bin to the tree if it exists.
-        final List<Bin> binTree = new ArrayList<Bin>();
-        if(indexQuery.containsBin(bin))
-            binTree.add(indexQuery.getBins().getBin(bin.getBinNumber()));
-
-        int currentBinLevel = binLevel;
-        while(--currentBinLevel >= 0) {
-            final int binStart = getFirstBinInLevel(currentBinLevel);
-            final int binWidth = getMaxAddressibleGenomicLocation()/getLevelSize(currentBinLevel);
-            final int binNumber = firstLocusInBin/binWidth + binStart;
-            final Bin parentBin = indexQuery.getBins().getBin(binNumber);
-            if(parentBin != null && indexQuery.containsBin(parentBin))
-                binTree.add(parentBin);
-        }
-
-        List<Chunk> chunkList = new ArrayList<Chunk>();
-        for(final Bin coveringBin: binTree) {
-            for(final Chunk chunk: coveringBin.getChunkList())
-                chunkList.add(chunk.clone());
-        }
-
-        final int start = getFirstLocusInBin(bin);
-        chunkList = Chunk.optimizeChunkList(chunkList,indexQuery.getLinearIndex().getMinimumOffset(start));
-        return new BAMFileSpan(chunkList);
-    }
-
-    /**
-     * Looks up the cached BAM query results if they're still in the cache and not expired.  Otherwise,
-     * retrieves the cache results from disk.
-     * @param referenceIndex The reference to load.  CachingBAMFileIndex only stores index data for entire references. 
-     * @return The index information for this reference.
-     */
-    protected BAMIndexContent getQueryResults(final int referenceIndex) {
-        // WeakHashMap is a bit weird in that its lookups are done via equals() equality, but expirations must be
-        // handled via == equality.  This implementation jumps through a few hoops to make sure that == equality still
-        // holds even in the context of boxing/unboxing.
-
-        // If this query is for the same reference index as the last query, return it.
-        if(mLastReferenceRetrieved!=null && mLastReferenceRetrieved == referenceIndex)
-            return mQueriesByReference.get(referenceIndex);
-
-        // If not, check to see whether it's available in the cache.
-        BAMIndexContent queryResults = mQueriesByReference.get(referenceIndex);
-        if(queryResults != null) {
-            mLastReferenceRetrieved = referenceIndex;
-            mQueriesByReference.put(referenceIndex,queryResults);
-            return queryResults;
-        }
-
-        // If not in the cache, attempt to load it from disk.
-        queryResults = query(referenceIndex,1,-1);
-        if(queryResults != null) {
-            mLastReferenceRetrieved = referenceIndex;
-            mQueriesByReference.put(referenceIndex,queryResults);
-            return queryResults;
-        }
-
-        // Not even available on disk.
-        return null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/ChainedDownsamplingIterator.java b/src/main/java/htsjdk/samtools/ChainedDownsamplingIterator.java
deleted file mode 100644
index 4fa3a7d..0000000
--- a/src/main/java/htsjdk/samtools/ChainedDownsamplingIterator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * A DownsamplingIterator that combines the ConstantMemory and HighAccuracy downsampling techniques to provide an
- * iterator that has accuracy approaching that of HighAccuracy, but with more limited memory usage.  Instead of
- * requiring memory proportional to number of read names in the incoming stream of reads, requires memory
- * approximately proportional to the number of output reads.
- *
- * @author Tim Fennell
- */
-class ChainedDownsamplingIterator extends HighAccuracyDownsamplingIterator {
-    public static final int MIN_ACCURATE_INPUT_READS = 50000;
-
-    /**
-     * Constructs a chained iterator that will read from the provided iterator and attempt to downsampling to the provided proportion.
-     */
-    ChainedDownsamplingIterator(final Iterator<SAMRecord> iterator, final double proportion, final int seed) {
-        super(new ConstantMemoryDownsamplingIterator(iterator, adjustProportion(proportion), seed), proportion, seed);
-
-        // Deal with the fact that the iterator will advance and discard some reads at construction
-        final long discarded = ((ConstantMemoryDownsamplingIterator) getUnderlyingIterator()).getDiscardedCount();
-        recordDiscardRecords(discarded);
-    }
-
-    /**
-     * Calculates the upper bound of 99.9% CI given the proportion, that is used to "buffer" the proportion on
-     * the constant memory downsampler, to make sure it leaves enough reads for us to downsample.
-     *
-     * Uses an assumed number of reads tested as this is often not known until after the fact.
-     */
-    private static double adjustProportion(final double p) {
-        final double ciAdjustment99_9 = 3.3 * Math.sqrt(p/MIN_ACCURATE_INPUT_READS);
-        return Math.min(1, p + ciAdjustment99_9);
-    }
-
-
-    /**
-     * Resets statistics before reading from the underlying iterator.
-     */
-    @Override
-    protected void readFromUnderlyingIterator(final List<SAMRecord> recs, final Set<String> names, final int templatesToRead) {
-        // Reset the stats on the underlying iterator
-        ((ConstantMemoryDownsamplingIterator) getUnderlyingIterator()).resetStatistics();
-
-        // Read from the underlying iterator
-        super.readFromUnderlyingIterator(recs, names, templatesToRead);
-    }
-
-    @Override
-    protected int calculateTemplatesToKeep(final int templatesRead, final double overallProportion) {
-        // Calculate an adjusted proportion to keep, knowing what proportion the underlying iterator discarded
-        final ConstantMemoryDownsamplingIterator iter = (ConstantMemoryDownsamplingIterator) getUnderlyingIterator();
-        final double priorProportion = iter.getAcceptedFraction();
-        final double p = Math.max(0, Math.min(1, overallProportion / priorProportion));
-        final int retval =  super.calculateTemplatesToKeep(templatesRead, p);
-
-        // Record all the discarded records to keep the overall statistics accurate, but do it after
-        // the call to super() so it doesn't affect the proportion calculation.
-        recordDiscardRecords(iter.getDiscardedCount());
-
-        return retval;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/Chunk.java b/src/main/java/htsjdk/samtools/Chunk.java
deleted file mode 100644
index 0d77b0c..0000000
--- a/src/main/java/htsjdk/samtools/Chunk.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A [start,stop) file pointer pairing into the BAM file, stored
- * as a BAM file index.  A chunk is represented as a single 64-bit
- * value where the high-order 48 bits point to the location of the
- * start of a compressed BGZF block within a BGZF file and the
- * low-order 16 bits point to a position within the decompressed
- * data in the BGZF block.
- *
- * See the SAM/BAM spec for more details.
- */
-public class Chunk implements Cloneable, Serializable,Comparable<Chunk> {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * A pointer to the start of a region in a SAM/BAM file.  The
-     * start is inclusive: start reading from this point.
-     */
-    private long mChunkStart;
-
-    /**
-     * A pointer to the end of a region in a SAM/BAM file.  The end
-     * is exclusive: this pointer points to one byte past the end
-     * of the region of interest inside the file.
-     */
-    private long mChunkEnd;
-
-    public Chunk(final long start, final long end) {
-        mChunkStart = start;
-        mChunkEnd = end;
-    }
-
-    public Chunk clone() {
-        return new Chunk(mChunkStart,mChunkEnd);
-    }
-
-    public long getChunkStart() {
-        return mChunkStart;
-    }
-
-    protected void setChunkStart(final long value) {
-        mChunkStart = value;
-    }
-
-    public long getChunkEnd() {
-        return mChunkEnd;
-    }
-
-    protected void setChunkEnd(final long value) {
-        mChunkEnd = value;
-    }
-
-    public int compareTo(final Chunk chunk) {
-        int result = Long.signum(mChunkStart - chunk.mChunkStart);
-        if (result == 0) {
-            result = Long.signum(mChunkEnd - chunk.mChunkEnd);
-        }
-        return result;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final Chunk chunk = (Chunk) o;
-
-        if (mChunkEnd != chunk.mChunkEnd) return false;
-        if (mChunkStart != chunk.mChunkStart) return false;
-
-        return true;
-    }
-
-    /**
-     * Returns whether two chunks overlap.
-     * @param other Chunk to which this should be compared.
-     * @return True if the chunks overlap.  Returns false if the two chunks abut or are disjoint.
-     */
-    public boolean overlaps(final Chunk other) {
-        final int comparison = this.compareTo(other);
-        if(comparison == 0)
-            return true;
-
-        // "sort" the two chunks using the comparator.
-        final Chunk leftMost = comparison==-1 ? this : other;
-        final Chunk rightMost = comparison==1 ? this : other;
-
-        final long leftMostBlockAddress = BlockCompressedFilePointerUtil.getBlockAddress(leftMost.getChunkEnd());
-        final long rightMostBlockAddress = BlockCompressedFilePointerUtil.getBlockAddress(rightMost.getChunkStart());
-
-        // If the left block's address is after the right block's address, compare the two blocks.
-        // If the two blocks are identical, compare the block offsets.
-        // If the right block is after the left block, no overlap is possible.
-        if(leftMostBlockAddress > rightMostBlockAddress)
-            return true;
-        else if(leftMostBlockAddress == rightMostBlockAddress) {
-            final int leftMostOffset = BlockCompressedFilePointerUtil.getBlockOffset(leftMost.getChunkEnd());
-            final int rightMostOffset = BlockCompressedFilePointerUtil.getBlockOffset(rightMost.getChunkStart());
-            return leftMostOffset > rightMostOffset;
-        }
-        else
-            return false;
-    }
-
-    /**
-     * Returns whether two chunks overlap.
-     * @param other Chunk to which this should be compared.
-     * @return True if the two chunks are adjacent.  Returns false if the chunks overlap or are discontinuous.
-     */
-    public boolean isAdjacentTo(final Chunk other) {
-        // Simpler implementation would be to == the chunk end of one to the chunk start of the other.  Chose this implementation to ensure that all chunk
-        // comparisons point directly to the 
-        return (BlockCompressedFilePointerUtil.getBlockAddress(this.getChunkEnd()) == BlockCompressedFilePointerUtil.getBlockAddress(other.getChunkStart()) &&
-                BlockCompressedFilePointerUtil.getBlockOffset(this.getChunkEnd()) == BlockCompressedFilePointerUtil.getBlockOffset(other.getChunkStart())) ||
-               (BlockCompressedFilePointerUtil.getBlockAddress(this.getChunkStart()) == BlockCompressedFilePointerUtil.getBlockAddress(other.getChunkEnd()) &&
-                BlockCompressedFilePointerUtil.getBlockOffset(this.getChunkStart()) == BlockCompressedFilePointerUtil.getBlockOffset(other.getChunkEnd()));
-    }
-
-    @Override
-    public int hashCode() {
-        int result = (int) (mChunkStart ^ (mChunkStart >>> 32));
-        result = 31 * result + (int) (mChunkEnd ^ (mChunkEnd >>> 32));
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%d:%d-%d:%d",mChunkStart >> 16,mChunkStart & 0xFFFF,mChunkEnd >> 16,mChunkEnd & 0xFFFF);
-    }
-
-    /**
-     * @param minimumOffset Discard chunks that end before this file offset.
-     * @return sorted list of chunks in which adjacent chunks are coalesced.
-     */
-    public static List<Chunk> optimizeChunkList(final List<Chunk> chunks, final long minimumOffset) {
-        Chunk lastChunk = null;
-        Collections.sort(chunks);
-        final List<Chunk> result = new ArrayList<Chunk>();
-        for (final Chunk chunk : chunks) {
-            if (chunk.getChunkEnd() <= minimumOffset) {
-                continue;               // linear index optimization
-            }
-            if (result.isEmpty()) {
-                result.add(chunk);
-                lastChunk = chunk;
-                continue;
-            }
-            // Coalesce chunks that are in adjacent file blocks.
-            // This is a performance optimization.
-            if (!lastChunk.overlaps(chunk) && !lastChunk.isAdjacentTo(chunk)) {
-                result.add(chunk);
-                lastChunk = chunk;
-            } else {
-                if (chunk.getChunkEnd() > lastChunk.getChunkEnd()) {
-                    lastChunk.setChunkEnd(chunk.getChunkEnd());
-                }
-            }
-        }
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/Cigar.java b/src/main/java/htsjdk/samtools/Cigar.java
deleted file mode 100644
index 12ffd0c..0000000
--- a/src/main/java/htsjdk/samtools/Cigar.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A list of CigarElements, which describes how a read aligns with the reference.
- * E.g. the Cigar string 10M1D25M means
- * * match or mismatch for 10 bases
- * * deletion of 1 base
- * * match or mismatch for 25 bases
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for complete CIGAR specification.
- */
-public class Cigar implements Serializable, Iterable<CigarElement> {
-    public static final long serialVersionUID = 1L;
-
-    private final List<CigarElement> cigarElements = new ArrayList<CigarElement>();
-
-    public Cigar() {
-    }
-
-    public Cigar(final List<CigarElement> cigarElements) {
-        this.cigarElements.addAll(cigarElements);
-    }
-
-    public List<CigarElement> getCigarElements() {
-        return Collections.unmodifiableList(cigarElements);
-    }
-
-    public CigarElement getCigarElement(final int i) {
-        return cigarElements.get(i);
-    }
-
-    public void add(final CigarElement cigarElement) {
-        cigarElements.add(cigarElement);
-    }
-
-    public int numCigarElements() {
-        return cigarElements.size();
-    }
-
-    public boolean isEmpty() {
-        return cigarElements.isEmpty();
-    }
-
-    /**
-     * @return The number of reference bases that the read covers, excluding padding.
-     */
-    public int getReferenceLength() {
-        int length = 0;
-        for (final CigarElement element : cigarElements) {
-            switch (element.getOperator()) {
-                case M:
-                case D:
-                case N:
-                case EQ:
-                case X:
-                    length += element.getLength();
-                    break;
-                default: break;
-            }
-        }
-        return length;
-    }
-
-    /**
-     * @return The number of reference bases that the read covers, including padding.
-     */
-    public int getPaddedReferenceLength() {
-        int length = 0;
-        for (final CigarElement element : cigarElements) {
-            switch (element.getOperator()) {
-                case M:
-                case D:
-                case N:
-                case EQ:
-                case X:
-                case P:
-                    length += element.getLength();
-                    break;
-                default: break;
-            }
-        }
-        return length;
-    }
-
-    /**
-     * @return The number of read bases that the read covers.
-     */
-    public int getReadLength() {
-        return getReadLength(cigarElements);
-    }
-
-    /**
-     * @return The number of read bases that the read covers.
-     */
-    public static int getReadLength(final List<CigarElement> cigarElements) {
-        int length = 0;
-        for (final CigarElement element : cigarElements) {
-            if (element.getOperator().consumesReadBases()){
-                    length += element.getLength();
-            }
-        }
-        return length;
-    }
-
-    /**
-     * Exhaustive validation of CIGAR.
-     * Note that this method deliberately returns null rather than Collections.emptyList() if there
-     * are no validation errors, because callers tend to assume that if a non-null list is returned, it is modifiable.
-     * @param readName For error reporting only.  May be null if not known.
-     * @param recordNumber For error reporting only.  May be -1 if not known.
-     * @return List of validation errors, or null if no errors.
-     */
-    public List<SAMValidationError> isValid(final String readName, final long recordNumber) {
-        if (this.isEmpty()) {
-            return null;
-        }
-        List<SAMValidationError> ret = null;
-        boolean seenRealOperator = false;
-        for (int i = 0; i < cigarElements.size(); ++i) {
-            final CigarElement element = cigarElements.get(i);
-            if (element.getLength() == 0) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                        "CIGAR element with zero length", readName, recordNumber));
-            }
-            // clipping operator can only be at start or end of CIGAR
-            final CigarOperator op = element.getOperator();
-            if (isClippingOperator(op)) {
-                if (op == CigarOperator.H) {
-                    if (i != 0 && i != cigarElements.size() - 1) {
-                        if (ret == null) ret = new ArrayList<SAMValidationError>();
-                        ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                                "Hard clipping operator not at start or end of CIGAR", readName, recordNumber));
-                    }
-                } else {
-                    if (op != CigarOperator.S) throw new IllegalStateException("Should never happen: " + op.name());
-                    if (i == 0 || i == cigarElements.size() - 1) {
-                        // Soft clip at either end is fine
-                    } else if (i == 1) {
-                        if (cigarElements.size() == 3 && cigarElements.get(2).getOperator() == CigarOperator.H) {
-                            // Handle funky special case in which S operator is both one from the beginning and one
-                            // from the end.
-                        } else if (cigarElements.get(0).getOperator() != CigarOperator.H) {
-                            if (ret == null) ret = new ArrayList<SAMValidationError>();
-                            ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                                "Soft clipping CIGAR operator can only be inside of hard clipping operator",
-                                    readName, recordNumber));
-                        }
-                    } else if (i == cigarElements.size() - 2) {
-                        if (cigarElements.get(cigarElements.size() - 1).getOperator() != CigarOperator.H) {
-                            if (ret == null) ret = new ArrayList<SAMValidationError>();
-                            ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                                "Soft clipping CIGAR operator can only be inside of hard clipping operator",
-                                    readName, recordNumber));
-                        }
-                    } else {
-                        if (ret == null) ret = new ArrayList<SAMValidationError>();
-                        ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                            "Soft clipping CIGAR operator can at start or end of read, or be inside of hard clipping operator",
-                                readName, recordNumber));
-                    }
-
-                }
-            } else if (isRealOperator(op)) {
-                // Must be at least one real operator (MIDN)
-                seenRealOperator = true;
-                // There should be an M or P operator between any pair of IDN operators
-                if (isInDelOperator(op)) {
-                    for (int j = i+1; j < cigarElements.size(); ++j) {
-                        final CigarOperator nextOperator = cigarElements.get(j).getOperator();
-                        // Allow
-                        if ((isRealOperator(nextOperator) && !isInDelOperator(nextOperator)) || isPaddingOperator(nextOperator)) {
-                            break;
-                        }
-                        if (isInDelOperator(nextOperator) && op == nextOperator) {
-                            if (ret == null) ret = new ArrayList<SAMValidationError>();
-                            ret.add(new SAMValidationError(SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR,
-                                    "No M or N operator between pair of " + op.name() + " operators in CIGAR", readName, recordNumber));
-                        }
-                    }
-                }
-            } else if (isPaddingOperator(op)) {
-                if (i == 0) {
-                    /*
-                     * Removed restriction that padding not be the first operator because if a read starts in the middle of a pad
-                     * in a padded reference, it is necessary to precede the read with padding so that alignment start refers to a
-                     * position on the unpadded reference.
-                    */
-                } else if (i == cigarElements.size() - 1) {
-                    if (ret == null) ret = new ArrayList<SAMValidationError>();
-                    ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                            "Padding operator not valid at end of CIGAR", readName, recordNumber));
-                } else if (!isRealOperator(cigarElements.get(i-1).getOperator()) ||
-                        !isRealOperator(cigarElements.get(i+1).getOperator())) {
-                    if (ret == null) ret = new ArrayList<SAMValidationError>();
-                    ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                            "Padding operator not between real operators in CIGAR", readName, recordNumber));
-                }
-            }
-        }
-        if (!seenRealOperator) {
-            if (ret == null) ret = new ArrayList<SAMValidationError>();
-            ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
-                    "No real operator (M|I|D|N) in CIGAR", readName, recordNumber));
-        }
-        return ret;
-    }
-
-    private static boolean isRealOperator(final CigarOperator op) {
-        return op == CigarOperator.M || op == CigarOperator.EQ || op == CigarOperator.X || 
-               op == CigarOperator.I || op == CigarOperator.D || op == CigarOperator.N;
-    }
-
-    private static boolean isInDelOperator(final CigarOperator op) {
-        return op !=null && op.isIndel();
-    }
-
-    private static boolean isClippingOperator(final CigarOperator op) {
-        return op !=null && op.isClipping();
-    }
-
-    private static boolean isPaddingOperator(final CigarOperator op) {
-        return op !=null && op.isPadding();
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (!(o instanceof Cigar)) return false;
-
-        final Cigar cigar = (Cigar) o;
-
-        return cigarElements.equals(cigar.cigarElements);
-    }
-    
-    /** build a new Cigar object from a list of cigar operators.
-     * This can be used if you have the  operators associated to
-     * each base in the read.
-     * 
-     * e.g: read length =10 with cigar= <code>[M,M,M,M,M,M,M,M,M,M]</code>, here
-     * fromCigarOperators would generate the cigar '10M'
-     * 
-     * later the user resolved the 'M' to '=' or 'X', the array is now
-     * 
-     * <code>[=,=,=,=,=,X,X,=,=,=]</code>
-     * 
-     * fromCigarOperators would generate the cigar '5M2X3M'
-     * 
-     * */
-    public static Cigar fromCigarOperators(final List<CigarOperator> cigarOperators) {
-        if (cigarOperators == null) throw new IllegalArgumentException("cigarOperators is null");
-        final List<CigarElement> cigarElementList = new ArrayList<>();
-        int i = 0;
-        // find adjacent operators and build list of cigar elements
-        while (i < cigarOperators.size() ) {
-            final CigarOperator currentOp = cigarOperators.get(i);
-            int j = i + 1;
-            while (j < cigarOperators.size() && cigarOperators.get(j).equals(currentOp)) {
-                j++;
-            }
-            cigarElementList.add(new CigarElement(j - i, currentOp));
-            i = j;
-        }
-        return new Cigar(cigarElementList);
-    }
-    
-    /** shortcut to <code>getCigarElements().iterator()</code> */
-    @Override
-    public Iterator<CigarElement> iterator() {
-        return this.getCigarElements().iterator();
-    }
-    
-    /** returns true if the cigar string contains the given operator */
-    public boolean containsOperator(final CigarOperator operator) {
-        return this.cigarElements.stream().anyMatch( element -> element.getOperator() == operator);
-    }
-    
-    /** returns the first cigar element */
-    public CigarElement getFirstCigarElement() {
-        return isEmpty() ? null : this.cigarElements.get(0); 
-    }
-    
-    /** returns the last cigar element */
-    public CigarElement getLastCigarElement() {
-        return isEmpty() ? null : this.cigarElements.get(this.numCigarElements() - 1 ); 
-    }
-    
-    /** returns true if the cigar string starts With a clipping operator */
-    public boolean isLeftClipped() {
-        return !isEmpty() && isClippingOperator(getFirstCigarElement().getOperator());
-    }
-
-    /** returns true if the cigar string ends With a clipping operator */
-    public boolean isRightClipped() {
-        return !isEmpty() && isClippingOperator(getLastCigarElement().getOperator());
-    }
-
-    /** returns true if the cigar is clipped */
-    public boolean isClipped() {
-        return isLeftClipped() || isRightClipped();
-    }
-    
-    @Override
-    public int hashCode() {
-        return cigarElements.hashCode();
-    }
-
-    public String toString() {
-        return TextCigarCodec.encode(this);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CigarElement.java b/src/main/java/htsjdk/samtools/CigarElement.java
deleted file mode 100644
index c645e6c..0000000
--- a/src/main/java/htsjdk/samtools/CigarElement.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-
-/**
- * One component of a cigar string.  The component comprises the operator, and the number of bases to which
- * the  operator applies.
- */
-public class CigarElement implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    private final int length;
-    private final CigarOperator operator;
-
-    public CigarElement(final int length, final CigarOperator operator) {
-        this.length = length;
-        this.operator = operator;
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public CigarOperator getOperator() {
-        return operator;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (!(o instanceof CigarElement)) return false;
-
-        final CigarElement that = (CigarElement) o;
-
-        if (length != that.length) return false;
-        if (operator != that.operator) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = length;
-        result = 31 * result + (operator != null ? operator.hashCode() : 0);
-        return result;
-    }
-    
-    @Override
-    public String toString() {
-        return String.valueOf(this.length)+this.operator;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CigarOperator.java b/src/main/java/htsjdk/samtools/CigarOperator.java
deleted file mode 100644
index 46ea539..0000000
--- a/src/main/java/htsjdk/samtools/CigarOperator.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * The operators that can appear in a cigar string, and information about their disk representations.
- */
-public enum CigarOperator {
-    /** Match or mismatch */
-    M(true, true,   'M'),
-    /** Insertion vs. the reference. */
-    I(true, false,  'I'),
-    /** Deletion vs. the reference. */
-    D(false, true,  'D'),
-    /** Skipped region from the reference. */
-    N(false, true,  'N'),
-    /** Soft clip. */
-    S(true, false,  'S'),
-    /** Hard clip. */
-    H(false, false, 'H'),
-    /** Padding. */
-    P(false, false, 'P'),
-    /** Matches the reference. */
-    EQ(true, true,  '='),
-    /** Mismatches the reference. */
-    X(true, true,   'X')
-    ;
-
-    // Representation of CigarOperator in BAM file
-    private static final byte OP_M = 0;
-    private static final byte OP_I = 1;
-    private static final byte OP_D = 2;
-    private static final byte OP_N = 3;
-    private static final byte OP_S = 4;
-    private static final byte OP_H = 5;
-    private static final byte OP_P = 6;
-    private static final byte OP_EQ = 7;
-    private static final byte OP_X = 8;
-
-    private final boolean consumesReadBases;
-    private final boolean consumesReferenceBases;
-    private final byte character;
-    private final String string;
-
-    // Readable synonyms of the above enums
-    public static final CigarOperator MATCH_OR_MISMATCH = M;
-    public static final CigarOperator INSERTION = I;
-    public static final CigarOperator DELETION = D;
-    public static final CigarOperator SKIPPED_REGION = N;
-    public static final CigarOperator SOFT_CLIP = S;
-    public static final CigarOperator HARD_CLIP = H;
-    public static final CigarOperator PADDING = P;
-
-    /** Default constructor. */
-    CigarOperator(boolean consumesReadBases, boolean consumesReferenceBases, char character) {
-        this.consumesReadBases = consumesReadBases;
-        this.consumesReferenceBases = consumesReferenceBases;
-        this.character = (byte) character;
-        this.string = new String(new char[] {character}).intern();
-    }
-
-    /** If true, represents that this cigar operator "consumes" bases from the read bases. */
-    public boolean consumesReadBases() { return consumesReadBases; }
-
-    /** If true, represents that this cigar operator "consumes" bases from the reference sequence. */
-    public boolean consumesReferenceBases() { return consumesReferenceBases; }
-
-    /**
-     * @param b CIGAR operator in character form as appears in a text CIGAR string
-     * @return CigarOperator enum value corresponding to the given character.
-     */
-    public static CigarOperator characterToEnum(final int b) {
-        switch (b) {
-        case 'M':
-            return M;
-        case 'I':
-            return I;
-        case 'D':
-            return D;
-        case 'N':
-            return N;
-        case 'S':
-            return S;
-        case 'H':
-            return H;
-        case 'P':
-            return P;
-        case '=':
-            return EQ;
-        case 'X':
-            return X;
-        default:
-            throw new IllegalArgumentException("Unrecognized CigarOperator: " + b);
-        }
-    }
-
-    /**
-     * @param i CIGAR operator in binary form as appears in a BAMRecord.
-     * @return CigarOperator enum value corresponding to the given int value.
-     */
-    public static CigarOperator binaryToEnum(final int i) {
-        switch(i) {
-            case OP_M:
-                return M;
-            case OP_I:
-                return I;
-            case OP_D:
-                return D;
-            case OP_N:
-                return N;
-            case OP_S:
-                return S;
-            case OP_H:
-                return H;
-            case OP_P:
-                return P;
-            case OP_EQ:
-                return EQ;
-            case OP_X:
-                return X;
-            default:
-                throw new IllegalArgumentException("Unrecognized CigarOperator: " + i);
-        }
-    }
-
-    /**
-     *
-     * @param e CigarOperator enum value.
-     * @return CIGAR operator corresponding to the enum value in binary form as appears in a BAMRecord.
-     */
-    public static int enumToBinary(final CigarOperator e) {
-        switch(e) {
-            case M:
-                return OP_M;
-            case I:
-                return OP_I;
-            case D:
-                return OP_D;
-            case N:
-                return OP_N;
-            case S:
-                return OP_S;
-            case H:
-                return OP_H;
-            case P:
-                return OP_P;
-            case EQ:
-                return OP_EQ;
-            case X:
-                return OP_X;
-            default:
-                throw new IllegalArgumentException("Unrecognized CigarOperator: " + e);
-        }
-    }
-
-    /** Returns the character that should be used within a SAM file. */
-    public static byte enumToCharacter(final CigarOperator e) {
-        return e.character;
-    }
-
-    /** Returns true if the operator is a clipped (hard or soft) operator */
-    public boolean isClipping() {
-        return this == S || this == H;
-    }
-
-    /** Returns true if the operator is a Insertion or Deletion operator */
-    public boolean isIndel() {
-        return this == I || this == D;
-    }
-
-    /** Returns true if the operator is a Skipped Region Insertion or Deletion operator */
-    public boolean isIndelOrSkippedRegion() {
-        return this == N || isIndel();
-    }
-
-    /** Returns true if the operator is a M, a X or a EQ */
-    public boolean isAlignment() {
-        return this == M || this == X || this == EQ;
-    }
-    
-    /** Returns true if the operator is a Padding operator */
-    public boolean isPadding() {
-        return this == P;
-    }
-    
-    /** Returns the cigar operator as it would be seen in a SAM file. */
-    @Override public String toString() {
-        return this.string;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/ComparableSamRecordIterator.java b/src/main/java/htsjdk/samtools/ComparableSamRecordIterator.java
deleted file mode 100644
index 06186a1..0000000
--- a/src/main/java/htsjdk/samtools/ComparableSamRecordIterator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.PeekableIterator;
-
-import java.util.Comparator;
-
-/**
- * Iterator for SAM records that implements comparable to enable sorting of iterators.
- * The comparison is performed by comparing the next record in the iterator to the next
- * record in another iterator and returning the ordering between those SAM records.
- */
-class ComparableSamRecordIterator extends PeekableIterator<SAMRecord> implements Comparable<ComparableSamRecordIterator> {
-    private final Comparator<SAMRecord> comparator;
-    private final SamReader reader;
-
-    /**
-     * Constructs a wrapping iterator around the given iterator that will be able
-     * to compare itself to other ComparableSamRecordIterators using the given comparator.
-     *
-     * @param iterator   the wrapped iterator.
-     * @param comparator the Comparator to use to provide ordering fo SAMRecords
-     */
-    public ComparableSamRecordIterator(final SamReader sam, final CloseableIterator<SAMRecord> iterator, final Comparator<SAMRecord> comparator) {
-        super(iterator);
-        this.reader = sam;
-        this.comparator = comparator;
-    }
-
-    /** Returns the reader from which this iterator was constructed. */
-    public SamReader getReader() {
-        return reader;
-    }
-
-    /**
-     * Compares this iterator to another comparable iterator based on the next record
-     * available in each iterator.  If the two comparable iterators have different
-     * comparator types internally an exception is thrown.
-     *
-     * @param that another iterator to compare to
-     * @return a negative, 0 or positive number as described in the Comparator interface
-     */
-    public int compareTo(final ComparableSamRecordIterator that) {
-        if (this.comparator.getClass() != that.comparator.getClass()) {
-            throw new IllegalStateException("Attempt to compare two ComparableSAMRecordIterators that " +
-                    "have different orderings internally");
-        }
-
-        final SAMRecord record = this.peek();
-        final SAMRecord record2 = that.peek();
-        return comparator.compare(record, record2);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        return compareTo((ComparableSamRecordIterator) o) == 0;
-    }
-
-    @Override
-    public int hashCode() {
-        throw new UnsupportedOperationException("ComparableSamRecordIterator should not be hashed because it can change value");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/ConstantMemoryDownsamplingIterator.java b/src/main/java/htsjdk/samtools/ConstantMemoryDownsamplingIterator.java
deleted file mode 100644
index c6e0de4..0000000
--- a/src/main/java/htsjdk/samtools/ConstantMemoryDownsamplingIterator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Murmur3;
-import htsjdk.samtools.util.PeekableIterator;
-
-import java.util.Iterator;
-
-/**
- * A DownsamplingIterator that runs in constant (and very small) memory. For each read the read name is hashed
- * using the Murmur3_32 hash algorithm to obtain an integer value that is, enough for our purposes, uniformly
- * distributed between the min and max int values even for highly similar inputs.  The proportion is used to
- * calculate a maximum acceptable hash value within the range.  Records whose hash value is below the limit
- * are emitted, records whose hash value is above the limit are discarded.
- *
- * Does not make any attempt to be accurate (have actual proportion == requested proportion) beyond what would
- * be expected for a random process and so may become quite inaccurate when downsampling to small numbers of
- * reads.
- *
- * @author Tim Fennell
- */
-class ConstantMemoryDownsamplingIterator extends DownsamplingIterator {
-    private final PeekableIterator<SAMRecord> underlyingIterator;
-    private final int maxHashValue;
-    private final Murmur3 hasher;
-
-
-    /** Constructs a downsampling iterator upon the supplied iterator, using the Random as the source of randomness. */
-    ConstantMemoryDownsamplingIterator(final Iterator<SAMRecord> iterator, final double proportion, final int seed) {
-        super(proportion);
-        this.hasher = new Murmur3(seed);
-        this.underlyingIterator = new PeekableIterator<SAMRecord>(iterator);
-
-        final long range = (long) Integer.MAX_VALUE - (long) Integer.MIN_VALUE;
-        this.maxHashValue = Integer.MIN_VALUE + (int) Math.round(range * proportion);
-
-        advanceToNextAcceptedRead();
-    }
-
-    /** Returns true if there is another record available post-downsampling, false otherwise. */
-    @Override public boolean hasNext() {
-        // The underlying iterator is always left at the next return-able read, so if it has a next read, so do we
-        return this.underlyingIterator.hasNext();
-    }
-
-    /**
-     * Advances the underlying, peekable, iterator until the next records is one that is to be emitted.
-     * @return true if there is at least one emittable record ready for emission, false otherwise
-     */
-    private boolean advanceToNextAcceptedRead() {
-        while (this.underlyingIterator.hasNext() && this.hasher.hashUnencodedChars(this.underlyingIterator.peek().getReadName()) > this.maxHashValue) {
-            this.underlyingIterator.next();
-            recordDiscardedRecord();
-        }
-
-        return this.underlyingIterator.hasNext();
-    }
-
-    /** Returns the next record from the iterator, or throws an exception if there is no next record. */
-    @Override public SAMRecord next() {
-        final SAMRecord rec = this.underlyingIterator.next();
-        recordAcceptedRecord();
-        advanceToNextAcceptedRead();
-        return rec;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CoordinateSortedPairInfoMap.java b/src/main/java/htsjdk/samtools/CoordinateSortedPairInfoMap.java
deleted file mode 100644
index d892d65..0000000
--- a/src/main/java/htsjdk/samtools/CoordinateSortedPairInfoMap.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.FileAppendStreamLRUCache;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * Holds info about a mate pair for use when processing a coordinate sorted file.  When one read of a pair is encountered,
- * the caller should add a record to this map.  When the other read of a pair is encountered, the record should be removed.
- * This class assumes that reads will be processed in order of reference sequence index.  When the map is queried for
- * a record for a given reference sequence index, all the records for that sequence are loaded from temp file into RAM, so there
- * must be sufficient RAM to hold all the records for one reference sequence.  If the records are not processed in
- * reference sequence order, loading and unloading of records will cause performance to be terrible.
- * @param <KEY> KEY + reference sequence index are used to identify the record being stored or retrieved.
- * @param <REC> The type of record being retrieved.
- */
-public class CoordinateSortedPairInfoMap<KEY, REC> implements Iterable<Map.Entry<KEY, REC>> {
-    // -1 is a valid sequence index in this case
-    private final int INVALID_SEQUENCE_INDEX = -2;
-    /**
-     * directory where files will go
-     */
-    private final File workDir = IOUtil.createTempDir("CSPI.", null);
-    private int sequenceIndexOfMapInRam = INVALID_SEQUENCE_INDEX;
-    private Map<KEY, REC> mapInRam = null;
-    private final FileAppendStreamLRUCache outputStreams;
-    private final Codec<KEY, REC> elementCodec;
-    // Key is reference index (which is in the range [-1 .. max sequence index].
-    // Value is the number of records on disk for this index.
-    private final Map<Integer, Integer> sizeOfMapOnDisk = new HashMap<Integer, Integer>();
-
-    // No other methods may be called when iteration is in progress, because iteration depends on and changes
-    // internal state.
-    private boolean iterationInProgress = false;
-
-    public CoordinateSortedPairInfoMap(final int maxOpenFiles, final Codec<KEY, REC> elementCodec) {
-        this.elementCodec = elementCodec;
-        workDir.deleteOnExit();
-        outputStreams = new FileAppendStreamLRUCache(maxOpenFiles);
-    }
-
-    /**
-     *
-     * @param sequenceIndex
-     * @param key
-     * @return The record corresponding to the given sequenceIndex and key, or null if it is not present.
-     */
-    public REC remove(final int sequenceIndex, final KEY key) {
-        if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
-        ensureSequenceLoaded(sequenceIndex);
-        return mapInRam.remove(key);
-    }
-
-    private void ensureSequenceLoaded(final int sequenceIndex) {
-        try {
-            if (sequenceIndexOfMapInRam == sequenceIndex) {
-                return;
-            }
-
-            // Spill map in RAM to disk
-            if (mapInRam != null) {
-                final File spillFile = makeFileForSequence(sequenceIndexOfMapInRam);
-                if (spillFile.exists()) throw new IllegalStateException(spillFile + " should not exist.");
-                if (!mapInRam.isEmpty()) {
-                    // Do not create file or entry in sizeOfMapOnDisk if there is nothing to write.
-                    final OutputStream os = getOutputStreamForSequence(sequenceIndexOfMapInRam);
-                    elementCodec.setOutputStream(os);
-                    for (final Map.Entry<KEY, REC> entry : mapInRam.entrySet()) {
-                        elementCodec.encode(entry.getKey(), entry.getValue());
-                    }
-                    sizeOfMapOnDisk.put(sequenceIndexOfMapInRam, mapInRam.size());
-                    mapInRam.clear();
-                }
-            } else {
-                mapInRam = new HashMap<KEY, REC>();
-            }
-
-            sequenceIndexOfMapInRam = sequenceIndex;
-
-            // Load map from disk if it existed
-            File mapOnDisk = makeFileForSequence(sequenceIndex);
-            if (outputStreams.containsKey(mapOnDisk)) {
-                outputStreams.remove(mapOnDisk).close();
-            }
-            final Integer numRecords = sizeOfMapOnDisk.remove(sequenceIndex);
-            if (mapOnDisk.exists()) {
-                if (numRecords == null)
-                    throw new IllegalStateException("null numRecords for " + mapOnDisk);
-                FileInputStream is = null;
-                try {
-                    is = new FileInputStream(mapOnDisk);
-                    elementCodec.setInputStream(is);
-                    for (int i = 0; i < numRecords; ++i) {
-                        final Map.Entry<KEY, REC> keyAndRecord = elementCodec.decode();
-                        if (mapInRam.containsKey(keyAndRecord.getKey()))
-                            throw new SAMException("Value was put into PairInfoMap more than once.  " +
-                                    sequenceIndex + ": " + keyAndRecord.getKey());
-                        mapInRam.put(keyAndRecord.getKey(), keyAndRecord.getValue());
-                    }
-                } finally {
-                    CloserUtil.close(is);
-                }
-                htsjdk.samtools.util.IOUtil.deleteFiles(mapOnDisk);
-            } else if (numRecords != null && numRecords > 0)
-                throw new IllegalStateException("Non-zero numRecords but " + mapOnDisk + " does not exist");
-        } catch (IOException e) {
-            throw new SAMException("Error loading new map from disk.", e);
-        }
-    }
-
-    /**
-     * Store the record with the given sequence index and key.  It is assumed that value did not previously exist
-     * in the map, and an exception is thrown (possibly at a later time) if that is not the case.
-     * @param sequenceIndex
-     * @param key
-     * @param record
-     */
-    public void put(final int sequenceIndex, final KEY key, final REC record) {
-        if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
-        if (sequenceIndex == sequenceIndexOfMapInRam) {
-            // Store in RAM map
-            if (mapInRam.containsKey(key))
-                throw new IllegalArgumentException("Putting value into PairInfoMap that already existed. " +
-                        sequenceIndex + ": " + key);
-            mapInRam.put(key, record);
-        } else {
-            // Append to file
-            final OutputStream os = getOutputStreamForSequence(sequenceIndex);
-            elementCodec.setOutputStream(os);
-            elementCodec.encode(key, record);
-            Integer prevCount = sizeOfMapOnDisk.get(sequenceIndex);
-            if (prevCount == null) prevCount = 0;
-            sizeOfMapOnDisk.put(sequenceIndex,  prevCount + 1);
-        }
-    }
-
-    private File makeFileForSequence(final int index) {
-        final File file = new File(workDir, index + ".tmp");
-        file.deleteOnExit();
-        return file;
-    }
-
-    private OutputStream getOutputStreamForSequence(final int mateSequenceIndex) {
-        return outputStreams.get(makeFileForSequence(mateSequenceIndex));
-    }
-
-    public int size() {
-        int total = sizeInRam();
-        for (final Integer mapSize : sizeOfMapOnDisk.values()) {
-            if (mapSize != null) {
-                total += mapSize;
-            }
-        }
-        return total;
-    }
-
-    /**
-     * @return number of elements stored in RAM.  Always <= size()
-     */
-    public int sizeInRam() {
-        return mapInRam != null? mapInRam.size(): 0;
-    }
-
-    /**
-     * Creates an iterator over all elements in map, in arbitrary order.  Elements may not be added
-     * or removed from map when iteration is in progress, nor may a second iteration be started.
-     * Iterator must be closed in order to allow normal access to the map.
-     */
-    public CloseableIterator<Map.Entry<KEY, REC>> iterator() {
-        if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
-        iterationInProgress = true;
-        return new MapIterator();
-    }
-
-    private class MapIterator implements CloseableIterator<Map.Entry<KEY, REC>> {
-        private boolean closed = false;
-        private Set<Integer> referenceIndices = new HashSet<Integer>(sizeOfMapOnDisk.keySet());
-        private final Iterator<Integer> referenceIndexIterator;
-        private Iterator<Map.Entry<KEY, REC>> currentReferenceIterator = null;
-
-        private MapIterator() {
-            if (sequenceIndexOfMapInRam != INVALID_SEQUENCE_INDEX)
-                referenceIndices.add(sequenceIndexOfMapInRam);
-            referenceIndexIterator = referenceIndices.iterator();
-            advanceToNextNonEmptyReferenceIndex();
-        }
-
-        private void advanceToNextNonEmptyReferenceIndex() {
-            while (referenceIndexIterator.hasNext()) {
-                int nextReferenceIndex = referenceIndexIterator.next();
-                ensureSequenceLoaded(nextReferenceIndex);
-                if (!mapInRam.isEmpty()) {
-                    createIteratorForMapInRam();
-                    return;
-                }
-            }
-            // no more.
-            currentReferenceIterator = null;
-        }
-
-        private void createIteratorForMapInRam() {
-            currentReferenceIterator = mapInRam.entrySet().iterator();
-        }
-
-        public void close() {
-            closed = true;
-            iterationInProgress = false;
-        }
-
-        public boolean hasNext() {
-            if (closed) throw new IllegalStateException("Iterator has been closed");
-            if (currentReferenceIterator != null && !currentReferenceIterator.hasNext())
-                throw new IllegalStateException("Should not happen");
-            return currentReferenceIterator != null;
-        }
-
-        public Map.Entry<KEY, REC> next() {
-            if (closed) throw new IllegalStateException("Iterator has been closed");
-            if (!hasNext()) throw new NoSuchElementException();
-            final Map.Entry<KEY, REC> ret = currentReferenceIterator.next();
-            if (!currentReferenceIterator.hasNext()) advanceToNextNonEmptyReferenceIndex();
-            return ret;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * Client must implement this class, which defines the way in which records are written to and
-     * read from file.
-     */
-    public interface Codec<KEY, REC> {
-        /**
-         * Where to write encoded output
-         * @param os
-         */
-        void setOutputStream(OutputStream os);
-
-        /**
-         * Where to read encoded input from
-         * @param is
-         */
-        void setInputStream(InputStream is);
-
-        /**
-         * Write object to output stream.  If the key is part of the record, then there is no need to write
-         * it separately.
-         */
-        void encode(KEY key, REC record);
-
-        /**
-         * Read the next key and record from the input stream and convert into a java object.
-         * @return null if no more records.  Should throw exception if EOF is encountered in the middle of
-         * a record.
-         */
-        Map.Entry<KEY, REC> decode();
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/CustomReaderFactory.java b/src/main/java/htsjdk/samtools/CustomReaderFactory.java
deleted file mode 100644
index bb00da7..0000000
--- a/src/main/java/htsjdk/samtools/CustomReaderFactory.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Log;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-
-
-/**
- * Factory for creating custom readers for accessing API based resources, 
- * e.g. ga4gh.
- * The configuration is controlled via custom_reader property (@see Defaults).
- * This allows injection of such readers from code bases outside HTSJDK.
- */
-public class CustomReaderFactory {
-  private final static Log LOG = Log.getInstance(CustomReaderFactory.class);
-  /**
-   * Interface to be implemented by custom factory classes that register
-   * themselves with this factory and are loaded dynamically.
-   */
-  public interface ICustomReaderFactory {
-    SamReader open(URL url);
-  }
-  
-  private static final CustomReaderFactory DEFAULT_FACTORY;
-  private static CustomReaderFactory currentFactory;
-  
-  private String urlPrefix = "";
-  private String factoryClassName = "";
-  private String jarFile = "";
-  private ICustomReaderFactory factory;
-  
-  static {
-      DEFAULT_FACTORY = new CustomReaderFactory();
-      currentFactory = DEFAULT_FACTORY;
-  }
-
-  public static void setInstance(final CustomReaderFactory factory){
-      currentFactory = factory;
-  }
-  
-  public static void resetToDefaultInstance() {
-    setInstance(DEFAULT_FACTORY);
-  }
-
-  public static CustomReaderFactory getInstance(){
-      return currentFactory;
-  }
-  
-  /**
-   * Initializes factory based on the custom_reader property specification.
-   */
-  private CustomReaderFactory() {
-    this(Defaults.CUSTOM_READER_FACTORY);
-  }
-  
-  CustomReaderFactory(String cfg) {
-    final String[] cfgComponents = cfg.split(",");
-    if (cfgComponents.length < 2) {
-      return;
-    }
-    urlPrefix = cfgComponents[0].toLowerCase();
-    factoryClassName = cfgComponents[1];
-    if (cfgComponents.length > 2) {
-      jarFile = cfgComponents[2];
-    }
-  }
-  
-  /**
-   * Lazily creates factory based on the configuration.
-   * @return null if creation fails, factory instance otherwise.
-   */
-  private synchronized ICustomReaderFactory getFactory() {
-    if (factory == null) {
-      try {
-        Class clazz = null;
-        
-        if (!jarFile.isEmpty()) {
-          LOG.info("Attempting to load factory class " + factoryClassName + 
-              " from " + jarFile);
-          final URL jarURL = new URL("file:///"+jarFile);
-          clazz = Class.forName(factoryClassName, true, 
-                    new URLClassLoader (new URL[] { jarURL }, 
-                        this.getClass().getClassLoader()));
-        } else {
-          LOG.info("Attempting to load factory class " + factoryClassName);
-          clazz = Class.forName(factoryClassName);
-        }
-        
-        factory = (ICustomReaderFactory)clazz.newInstance();
-        LOG.info("Created custom factory for " + urlPrefix + " from " + 
-            factoryClassName + " loaded from " + (jarFile.isEmpty() ? 
-                " this jar" : jarFile));
-      } catch (Exception e) {
-        LOG.error(e);
-        return null;
-      }
-    }
-    return factory;
-  }
-  
-  /**
-   * Check if the url is supposed to be handled by the custom factory and if so
-   * attempt to create reader via an instance of this custom factory.
-   * 
-   * @return null if the url is not handled by this factory, SamReader otherwise.
-   */
-  public SamReader maybeOpen(URL url) {
-    if (urlPrefix.isEmpty() || 
-        !url.toString().toLowerCase().startsWith(urlPrefix)) {
-      return null;
-    }
-    LOG.info("Attempting to open " + url + " with custom factory");
-    final ICustomReaderFactory factory = getFactory();
-    if (factory == null) {
-      return null;
-    }
-    return factory.open(url);
-  }
-}
diff --git a/src/main/java/htsjdk/samtools/DefaultSAMRecordFactory.java b/src/main/java/htsjdk/samtools/DefaultSAMRecordFactory.java
deleted file mode 100644
index 7e3848e..0000000
--- a/src/main/java/htsjdk/samtools/DefaultSAMRecordFactory.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * Default factory for creating SAM and BAM records used by the {@link SamReader} classes.
- *
- * @author Tim Fennell
- */
-public class DefaultSAMRecordFactory implements SAMRecordFactory {
-
-    private static final DefaultSAMRecordFactory INSTANCE = new DefaultSAMRecordFactory();
-    
-    public static DefaultSAMRecordFactory getInstance() {
-        return INSTANCE;   
-    }
-
-    /** Create a new SAMRecord to be filled in */
-    public SAMRecord createSAMRecord(final SAMFileHeader header) {
-        return new SAMRecord(header);
-    }
-
-    /**
-     * Create a new BAM Record. If the reference sequence index or mate reference sequence index are
-     * any value other than NO_ALIGNMENT_REFERENCE_INDEX, the values must be resolvable against the sequence
-     * dictionary in the header argument.
-     */
-    public BAMRecord createBAMRecord (final SAMFileHeader header,
-                                      final int referenceSequenceIndex,
-                                      final int alignmentStart,
-                                      final short readNameLength,
-                                      final short mappingQuality,
-                                      final int indexingBin,
-                                      final int cigarLen,
-                                      final int flags,
-                                      final int readLen,
-                                      final int mateReferenceSequenceIndex,
-                                      final int mateAlignmentStart,
-                                      final int insertSize,
-                                      final byte[] variableLengthBlock) {
-
-        return new BAMRecord(header,
-                             referenceSequenceIndex,
-                             alignmentStart,
-                             readNameLength,
-                             mappingQuality,
-                             indexingBin,
-                             cigarLen,
-                             flags,
-                             readLen,
-                             mateReferenceSequenceIndex,
-                             mateAlignmentStart,
-                             insertSize,
-                             variableLengthBlock);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/Defaults.java b/src/main/java/htsjdk/samtools/Defaults.java
deleted file mode 100644
index 5e3f6da..0000000
--- a/src/main/java/htsjdk/samtools/Defaults.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Log;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * Embodies defaults for global values that affect how the SAM JDK operates. Defaults are encoded in the class
- * and are also overridable using system properties.
- *
- * @author Tim Fennell
- */
-public class Defaults {
-    private static Log log = Log.getInstance(Defaults.class);
-    
-    /** Should BAM index files be created when writing out coordinate sorted BAM files?  Default = false. */
-    public static final boolean CREATE_INDEX;
-
-    /** Should MD5 files be created when writing out SAM and BAM files?  Default = false. */
-    public static final boolean CREATE_MD5;
-
-    /** Should asynchronous read I/O be used where supported by the samtools package (one thread per file).
-     *  Default = false.
-     */
-    public static final boolean USE_ASYNC_IO_READ_FOR_SAMTOOLS;
-
-    /** Should asynchronous write I/O be used where supported by the samtools package (one thread per file).
-     *  Default = false.
-     */
-    public static final boolean USE_ASYNC_IO_WRITE_FOR_SAMTOOLS;
-
-    /** Should asynchronous write I/O be used where supported by the tribble package (one thread per file).
-     *  Default = false.
-     */
-    public static final boolean USE_ASYNC_IO_WRITE_FOR_TRIBBLE;
-
-    /** Compresion level to be used for writing BAM and other block-compressed outputs.  Default = 5. */
-    public static final int COMPRESSION_LEVEL;
-
-    /** Buffer size, in bytes, used whenever reading/writing files or streams.  Default = 128k. */
-    public static final int BUFFER_SIZE;
-
-    /** The output format of the flag field when writing SAM text.  Ignored for reading SAM text. */
-    public static final SamFlagField SAM_FLAG_FIELD_FORMAT;
-
-    /**
-     * Even if BUFFER_SIZE is 0, this is guaranteed to be non-zero.  If BUFFER_SIZE is non-zero,
-     * this == BUFFER_SIZE
-     */
-    public static final int NON_ZERO_BUFFER_SIZE;
-
-    /**
-     * The reference FASTA file.  If this is not set, the file is null.  This file may be required for reading
-     * writing SAM files (ex. CRAM).
-     */
-    public static final File REFERENCE_FASTA;
-
-    /** Custom reader factory able to handle URL based resources like ga4gh.
-     *  Expected format: <url prefix>,<fully qualified factory class name>[,<jar file name>]
-     *  E.g. https://www.googleapis.com/genomics/v1beta/reads/,com.google.genomics.ReaderFactory
-     *  OR https://www.googleapis.com/genomics/v1beta/reads/,com.google.genomics.ReaderFactory,/tmp/genomics.jar
-     */
-    public static final String CUSTOM_READER_FACTORY;
-
-    /**
-     * Boolean describing whether downloading a reference file is allowed (for CRAM files),
-     * in case the reference file is not specified by the user
-     * Enabling this is not necessarily a good idea, since this process often fails
-     */
-    public static final boolean USE_CRAM_REF_DOWNLOAD;
-
-    /**
-     * A mask (pattern) to use when building EBI reference service URL for a
-     * given MD5 checksum. Must contain one and only one string placeholder.
-     */
-    public static final String EBI_REFERENCE_SERVICE_URL_MASK;
-
-    /**
-     * Boolean describing whether downloading of SRA native libraries is allowed,
-     * in case such native libraries are not found locally
-     */
-    public static final boolean SRA_LIBRARIES_DOWNLOAD;
-
-
-    static {
-        CREATE_INDEX = getBooleanProperty("create_index", false);
-        CREATE_MD5 = getBooleanProperty("create_md5", false);
-        USE_ASYNC_IO_READ_FOR_SAMTOOLS = getBooleanProperty("use_async_io_read_samtools", false);
-        USE_ASYNC_IO_WRITE_FOR_SAMTOOLS = getBooleanProperty("use_async_io_write_samtools", false);
-        USE_ASYNC_IO_WRITE_FOR_TRIBBLE = getBooleanProperty("use_async_io_write_tribble", false);
-        COMPRESSION_LEVEL = getIntProperty("compression_level", 5);
-        BUFFER_SIZE = getIntProperty("buffer_size", 1024 * 128);
-        if (BUFFER_SIZE == 0) {
-            NON_ZERO_BUFFER_SIZE = 1024 * 128;
-        } else {
-            NON_ZERO_BUFFER_SIZE = BUFFER_SIZE;
-        }
-        REFERENCE_FASTA = getFileProperty("reference_fasta", null);
-        USE_CRAM_REF_DOWNLOAD = getBooleanProperty("use_cram_ref_download", false);
-        EBI_REFERENCE_SERVICE_URL_MASK = "http://www.ebi.ac.uk/ena/cram/md5/%s";
-        CUSTOM_READER_FACTORY = getStringProperty("custom_reader", "");
-        SAM_FLAG_FIELD_FORMAT = SamFlagField.valueOf(getStringProperty("sam_flag_field_format", SamFlagField.DECIMAL.name()));
-        SRA_LIBRARIES_DOWNLOAD = getBooleanProperty("sra_libraries_download", false);
-    }
-
-    /**
-     * Returns a map of all default values (keys are names), lexicographically sorted by keys.
-     * The returned map is unmodifiable.
-     * This function is useful for example when logging all defaults.
-     */
-    public static SortedMap<String, Object> allDefaults(){
-        final SortedMap<String, Object> result = new TreeMap<>();
-        result.put("CREATE_INDEX", CREATE_INDEX);
-        result.put("CREATE_MD5", CREATE_MD5);
-        result.put("USE_ASYNC_IO_READ_FOR_SAMTOOLS", USE_ASYNC_IO_READ_FOR_SAMTOOLS);
-        result.put("USE_ASYNC_IO_WRITE_FOR_SAMTOOLS", USE_ASYNC_IO_WRITE_FOR_SAMTOOLS);
-        result.put("USE_ASYNC_IO_WRITE_FOR_TRIBBLE", USE_ASYNC_IO_WRITE_FOR_TRIBBLE);
-        result.put("COMPRESSION_LEVEL", COMPRESSION_LEVEL);
-        result.put("BUFFER_SIZE", BUFFER_SIZE);
-        result.put("NON_ZERO_BUFFER_SIZE", NON_ZERO_BUFFER_SIZE);
-        result.put("REFERENCE_FASTA", REFERENCE_FASTA);
-        result.put("USE_CRAM_REF_DOWNLOAD", USE_CRAM_REF_DOWNLOAD);
-        result.put("EBI_REFERENCE_SERVICE_URL_MASK", EBI_REFERENCE_SERVICE_URL_MASK);
-        result.put("CUSTOM_READER_FACTORY", CUSTOM_READER_FACTORY);
-        result.put("SAM_FLAG_FIELD_FORMAT", SAM_FLAG_FIELD_FORMAT);
-        return Collections.unmodifiableSortedMap(result);
-    }
-
-    /** Gets a string system property, prefixed with "samjdk." using the default 
-     * if the property does not exist or if the java.security manager raises an exception for
-     * applications started with  -Djava.security.manager  . */
-    private static String getStringProperty(final String name, final String def) {
-        try {
-            return System.getProperty("samjdk." + name, def);
-        } catch (final java.security.AccessControlException error) {
-            log.warn(error,"java Security Manager forbids 'System.getProperty(\"" + name + "\")' , returning default value: " + def );
-            return def;
-        }
-    }
-
-    /** Checks whether a string system property, prefixed with "samjdk.", exists.
-     * If the property does not exist or if the java.security manager raises an exception for
-     * applications started with  -Djava.security.manager  this method returns false. */
-    private static boolean hasProperty(final String name){
-        try {
-            return null != System.getProperty("samjdk." + name);
-        } catch (final java.security.AccessControlException error) {
-            log.warn(error,"java Security Manager forbids 'System.getProperty(\"" + name + "\")' , returning false");
-            return false;
-        }
-    }
-
-    /** Gets a boolean system property, prefixed with "samjdk." using the default if the property does not exist. */
-    private static boolean getBooleanProperty(final String name, final boolean def) {
-        final String value = getStringProperty(name, Boolean.toString(def));
-        return Boolean.parseBoolean(value);
-    }
-
-    /** Gets an int system property, prefixed with "samjdk." using the default if the property does not exist. */
-    private static int getIntProperty(final String name, final int def) {
-        final String value = getStringProperty(name, Integer.toString(def));
-        return Integer.parseInt(value);
-    }
-
-    /** Gets a File system property, prefixed with "samjdk." using the default if the property does not exist. */
-    private static File getFileProperty(final String name, final String def) {
-        final String value = getStringProperty(name, def);
-        // TODO: assert that it is readable
-        return (null == value) ? null : new File(value);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/DiskBasedBAMFileIndex.java b/src/main/java/htsjdk/samtools/DiskBasedBAMFileIndex.java
deleted file mode 100644
index b5d6f59..0000000
--- a/src/main/java/htsjdk/samtools/DiskBasedBAMFileIndex.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A class for reading BAM file indices, hitting the disk once per query.
- */
-public class DiskBasedBAMFileIndex extends AbstractBAMFileIndex
-{
-    public DiskBasedBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
-        super(file, dictionary);
-    }
-
-    public DiskBasedBAMFileIndex(final SeekableStream stream, final SAMSequenceDictionary dictionary) {
-        super(stream, dictionary);
-    }
-
-    public DiskBasedBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
-        super(file, dictionary, useMemoryMapping);
-    }
-
-    /**
-     * Get list of regions of BAM file that may contain SAMRecords for the given range
-     * @param referenceIndex sequence of desired SAMRecords
-     * @param startPos 1-based start of the desired interval, inclusive
-     * @param endPos 1-based end of the desired interval, inclusive
-     * @return array of pairs of virtual file positions.  Each pair is the first and last
-     * virtual file position in a range that can be scanned to find SAMRecords that overlap the given
-     * positions. The last position in each pair is a virtual file pointer to the first SAMRecord beyond
-     * the range that may contain the indicated SAMRecords.
-     */
-    public BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos) {
-        final BAMIndexContent queryResults = query(referenceIndex,startPos,endPos);
-
-        if(queryResults == null)
-            return null;
-
-        List<Chunk> chunkList = new ArrayList<Chunk>();
-        for(final Chunk chunk: queryResults.getAllChunks())
-            chunkList.add(chunk.clone());
-        chunkList = Chunk.optimizeChunkList(chunkList,queryResults.getLinearIndex().getMinimumOffset(startPos));
-        return new BAMFileSpan(chunkList);
-    }
-
-     protected BAMIndexContent getQueryResults(final int reference){
-         throw new UnsupportedOperationException();
-         // todo: there ought to be a way to support this using the first startPos for the reference and the last
-         // return query(reference, 1, -1);
-         // If this were implemented, BAMIndexer.createAndWriteIndex could extend DiskBasedBAMFileIndex -or- CachingBAMFileIndex
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/DownsamplingIterator.java b/src/main/java/htsjdk/samtools/DownsamplingIterator.java
deleted file mode 100644
index 8ca0d84..0000000
--- a/src/main/java/htsjdk/samtools/DownsamplingIterator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-/**
- * Abstract base class for all DownsamplingIterators that provides a uniform interface for recording
- * and reporting statistics bout how many records have been kept and discarded.
- *
- * A DownsamplingIterator is an iterator that takes another iterator of SAMRecords and filters out a
- * subset of those records in a random way, while ensuring that all records for a template (i.e. record name)
- * are either retained or discarded.  Strictly speaking the proportion parameter applies to templates,
- * though in most instances it is safe to think about it being applied to records.
- *
- * @author Tim Fennell
- */
-public abstract class DownsamplingIterator implements CloseableIterator<SAMRecord> {
-    private long recordsSeen;
-    private long recordsAccepted;
-    private double targetProportion;
-
-    /** Constructs a downsampling iterator that aims to retain the targetProportion of reads. */
-    public DownsamplingIterator(final double targetProportion) {
-        if (targetProportion < 0) throw new IllegalArgumentException("targetProportion must be >= 0");
-        if (targetProportion > 1) throw new IllegalArgumentException("targetProportion must be <= 1");
-        this.targetProportion = targetProportion;
-    }
-
-    /** Does nothing. */
-    @Override public void close() { /** No Op. */ }
-
-    /** Returns the number of records seen, including accepted and discarded, since creation of the last call to resetStatistics. */
-    public long getSeenCount() { return this.recordsSeen; }
-
-    /** Returns the number of records returned since creation of the last call to resetStatistics. */
-    public long getAcceptedCount() { return this.recordsAccepted; }
-
-    /** Returns the number of records discarded since creation of the last call to resetStatistics. */
-    public long getDiscardedCount() { return this.recordsSeen - this.recordsAccepted; }
-
-    /** Gets the fraction of records discarded since creation or the last call to resetStatistics(). */
-    public double getDiscardedFraction() { return getDiscardedCount() / (double) getSeenCount(); }
-
-    /** Gets the fraction of records accepted since creation or the last call to resetStatistics(). */
-    public double getAcceptedFraction() { return getAcceptedCount() / (double) getSeenCount(); }
-
-    /** Resets the statistics for records seen/accepted/discarded. */
-    public void resetStatistics() {
-        this.recordsSeen = 0;
-        this.recordsAccepted = 0;
-    }
-
-    /** Gets the target proportion of records that should be retained during downsampling. */
-    public double getTargetProportion() {
-        return targetProportion;
-    }
-
-    /** Method for subclasses to record a record as being discarded. */
-    protected final void recordDiscardedRecord() { this.recordsSeen++; }
-
-    /**
-     * Method for subclasses to record a specific record as being accepted. Null may be passed if a record
-     * was discarded but access to the object is no longer available.
-     */
-    protected final void recordAcceptedRecord() { this.recordsSeen++; this.recordsAccepted++; }
-
-    /** Record one or more records as having been discarded. */
-    protected final void recordDiscardRecords(final long n) {
-        this.recordsSeen += n;
-    }
-
-    /** Record one or more records as having been discarded. */
-    protected final void recordAcceptedRecords(final long n) {
-        this.recordsSeen += n;
-        this.recordsAccepted += n;
-    }
-
-    /**
-     * Indicates whether or not the strategy implemented by this DownsamplingIterator makes any effort to
-     * increase accuracy beyond random sampling (i.e. to reduce the delta between the requested proportion
-     * of reads and the actually emitted proportion of reads).
-     */
-    public boolean isHigherAccuracy() {
-        return false;
-    }
-
-    /** Not supported. */
-    @Override public void remove() {
-        throw new UnsupportedOperationException("remove() not supported in DownsamplingIterators");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/DownsamplingIteratorFactory.java b/src/main/java/htsjdk/samtools/DownsamplingIteratorFactory.java
deleted file mode 100644
index d54e706..0000000
--- a/src/main/java/htsjdk/samtools/DownsamplingIteratorFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.File;
-import java.util.Iterator;
-
-/**
- * A factory for creating DownsamplingIterators that uses a number of different strategies to achieve downsampling while
- * meeting various criteria.
- *
- * @author Tim Fennell
- */
-public class DownsamplingIteratorFactory {
-    public static final String HIGH_ACCURACY_DESCRIPTION =
-            "Attempts (but does not guarantee) to provide accuracy up to a specified limit. Accuracy is defined as emitting " +
-            "a proportion of reads as close to the requested proportion as possible. In order to do so this strategy requires " +
-            "memory that is proportional to the number of template names in the incoming stream of reads, and will thus require " +
-            "large amounts of memory when running on large input files.";
-
-    public static final String CONSTANT_MEMORY_DESCRPTION =
-            "Downsamples a stream or file of SAMRecords using a hash-projection strategy such that it can run in constant memory. " +
-            "The downsampling is stochastic, and therefore the actual retained proportion will vary around the requested proportion. Due " +
-            "to working in fixed memory this strategy is good for large inputs, and due to the stochastic nature the accuracy of this strategy " +
-            "is highest with a high number of output records, and diminishes at low output volumes.";
-
-    public static final String CHAINED_DESCRIPTION =
-            "Attempts to provide a compromise strategy that offers some of the advantages of both the ConstantMemory and HighAccuracy strategies. " +
-            "Uses a ConstantMemory strategy to downsample the incoming stream to approximately the desired proportion, and then a HighAccuracy " +
-            "strategy to finish. Works in a single pass, and will provide accuracy close to (but often not as good as) HighAccuracy while requiring " +
-            "memory proportional to the set of reads emitted from the ConstantMemory strategy to the HighAccuracy strategy. Works well when downsampling " +
-            "large inputs to small proportions (e.g. downsampling hundreds of millions of reads and retaining only 2%. Should be accurate 99.9% of the time " +
-            "when the input contains >= 50,000 templates (read names). For smaller inputs, HighAccuracy is recommended instead.";
-
-    /** Describes the available downsampling strategies. */
-    public enum Strategy {
-        HighAccuracy(HIGH_ACCURACY_DESCRIPTION),
-        ConstantMemory(CONSTANT_MEMORY_DESCRPTION),
-        Chained(CHAINED_DESCRIPTION);
-
-        public final String description;
-
-        Strategy(final String description) {
-            this.description = description;
-        }
-
-        /** Gets the description of the strategy. */
-        public String getDescription() {
-            return description;
-        }
-    }
-
-    /**
-     * Creates a new DownsamplingIterator using the supplied Strategy that attempts to read from the provided iterator and return
-     * approximately proportion of the records read.
-     *
-     * @param iterator The iterator from which to consume SAMRecords
-     * @param strategy The downsampling strategy to use
-     * @param proportion The proportion of records the downsampling strategy should attempt to emit
-     * @param accuracy If supported by the downsampling strategy, the accuracy goal for the downsampler. Higher accuracy will generally
-     *                 require higher memory usage.  An accuracy value of 0.0001 tells the strategy to try and ensure the emitted proportion
-     *                 is within proportion +/0 0.0001.
-     * @param seed The seed value to use for any random process used in down-sampling.
-     */
-    public static DownsamplingIterator make(final Iterator<SAMRecord> iterator, final Strategy strategy, final double proportion, final double accuracy, final int seed) {
-        if (strategy == null) throw new IllegalArgumentException("strategy may not be null");
-        if (iterator == null) throw new IllegalArgumentException("iterator may not be null");
-        if (proportion < 0) throw new IllegalArgumentException("proportion must be greater than 0");
-        if (proportion > 1) throw new IllegalArgumentException("proportion must be less than 1");
-
-        switch (strategy) {
-            case HighAccuracy:   return new HighAccuracyDownsamplingIterator(iterator, proportion, seed).setTargetAccuracy(accuracy);
-            case ConstantMemory: return new ConstantMemoryDownsamplingIterator(iterator, proportion, seed);
-            case Chained:        return new ChainedDownsamplingIterator(iterator, proportion, seed).setTargetAccuracy(accuracy);
-            default: throw new IllegalStateException("Unexpected value for Strategy enum in switch statement. Bug!!");
-        }
-    }
-
-    /**
-     * Convenience method that constructs a downsampling iterator for all the reads in a SAM file.
-     * See {@link DownsamplingIteratorFactory#make(Iterator, Strategy, double, double, int)} for detailed parameter information.
-     */
-    public static DownsamplingIterator make(final File samFile, final Strategy strategy, final double proportion, final double accuracy, final int seed) {
-        IOUtil.assertFileIsReadable(samFile);
-        return make(SamReaderFactory.makeDefault().open(samFile), strategy, proportion, accuracy, seed);
-    }
-
-    /**
-     * Convenience method that constructs a downsampling iterator for all the reads available from a SamReader.
-     * See {@link DownsamplingIteratorFactory#make(Iterator, Strategy, double, double, int)} for detailed parameter information.
-     */
-    public static DownsamplingIterator make(final SamReader reader, final Strategy strategy, final double proportion, final double accuracy, final int seed) {
-        return make(reader.iterator(), strategy, proportion, accuracy, seed);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java b/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java
deleted file mode 100644
index 1abd514..0000000
--- a/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Murmur3;
-
-/**
- * This class helps us compute and compare duplicate scores, which are used for selecting the non-duplicate
- * during duplicate marking (see MarkDuplicates).
- * @author nhomer
- */
-public class DuplicateScoringStrategy {
-
-    public enum ScoringStrategy {
-        SUM_OF_BASE_QUALITIES,
-        TOTAL_MAPPED_REFERENCE_LENGTH,
-        RANDOM,
-    }
-
-    /** Hash used for the RANDOM scoring strategy. */
-    private static final Murmur3 hasher = new Murmur3(1);
-
-    /** An enum to use for storing temporary attributes on SAMRecords. */
-    private static enum Attr { DuplicateScore }
-
-    /** Calculates a score for the read which is the sum of scores over Q15. */
-    private static short getSumOfBaseQualities(final SAMRecord rec) {
-        short score = 0;
-        for (final byte b : rec.getBaseQualities()) {
-            if (b >= 15) score += b;
-        }
-
-        return score;
-    }
-
-    /**
-     * Returns the duplicate score computed from the given fragment.
-     */
-    public static short computeDuplicateScore(final SAMRecord record, final ScoringStrategy scoringStrategy) {
-        return computeDuplicateScore(record, scoringStrategy, false);
-    }
-
-    /**
-     * Returns the duplicate score computed from the given fragment.
-     *
-     * If true is given to assumeMateCigar, then any score that can use the mate cigar to compute the mate's score will return the score
-     * computed on both ends.
-     */
-    public static short computeDuplicateScore(final SAMRecord record, final ScoringStrategy scoringStrategy, final boolean assumeMateCigar) {
-        Short storedScore = (Short) record.getTransientAttribute(Attr.DuplicateScore);
-
-        if (storedScore == null) {
-            short score = 0;
-
-            switch (scoringStrategy) {
-                case SUM_OF_BASE_QUALITIES:
-                    score += getSumOfBaseQualities(record);
-                    break;
-                case TOTAL_MAPPED_REFERENCE_LENGTH:
-                    if (!record.getReadUnmappedFlag()) {
-                        score += record.getCigar().getReferenceLength();
-                    }
-                    if (assumeMateCigar && record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
-                        score += SAMUtils.getMateCigar(record).getReferenceLength();
-                    }
-                    break;
-                case RANDOM:
-                    score += (short) (hasher.hashUnencodedChars(record.getReadName()) >> 16);
-            }
-
-            storedScore = score;
-            record.setTransientAttribute(Attr.DuplicateScore, storedScore);
-        }
-
-        return storedScore;
-    }
-
-    /**
-     * Compare two records based on their duplicate scores.  If the scores are equal, we break ties based on mapping quality
-     * (added to the mate's mapping quality if paired and mapped), then library/read name.
-     *
-     * If true is given to assumeMateCigar, then any score that can use the mate cigar to to compute the mate's score will return the score
-     * computed on both ends.
-     *
-     * We allow different scoring strategies. We return <0 if rec1 has a better strategy than rec2.
-     */
-    public static int compare(final SAMRecord rec1, final SAMRecord rec2, final ScoringStrategy scoringStrategy, final boolean assumeMateCigar) {
-        int cmp;
-
-        // always prefer paired over non-paired
-        if (rec1.getReadPairedFlag() != rec2.getReadPairedFlag()) return rec1.getReadPairedFlag() ? 1 : -1;
-
-        cmp = computeDuplicateScore(rec2, scoringStrategy, assumeMateCigar) - computeDuplicateScore(rec1, scoringStrategy, assumeMateCigar);
-
-        /**
-         * Finally, use library ID and read name
-         * This is important because we cannot control the order in which reads appear for reads that are comparable up to now (i.e. cmp == 0).  We want to deterministically
-         * choose them, and so we need this.
-         */
-        if (0 == cmp) cmp = SAMUtils.getCanonicalRecordName(rec1).compareTo(SAMUtils.getCanonicalRecordName(rec2));
-
-        return cmp;
-    }
-
-    /**
-     * Compare two records based on their duplicate scores.  The duplicate scores for each record is assume to be
-     * pre-computed by computeDuplicateScore and stored in the "DS" tag.  If the scores are equal, we break
-     * ties based on mapping quality (added to the mate's mapping quality if paired and mapped), then library/read name.
-     *
-     * We allow different scoring strategies. We return <0 if rec1 has a better strategy than rec2.
-     */
-    public static int compare(final SAMRecord rec1, final SAMRecord rec2, final ScoringStrategy scoringStrategy) {
-        return compare(rec1, rec2, scoringStrategy, false);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/DuplicateSet.java b/src/main/java/htsjdk/samtools/DuplicateSet.java
deleted file mode 100644
index 8333069..0000000
--- a/src/main/java/htsjdk/samtools/DuplicateSet.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Stores a set of records that are duplicates of each other.  The first records in the list of records is 
- * considered the representative of the duplicate, and typically does not have it's duplicate flag set.  
- * The records' duplicate flag will be set appropriately as records are added.  This behavior can be 
- * turned off.
- *
- * At this time, this set does not track optical duplicates.
- *
- * @author nhomer
- */
-public class DuplicateSet {
-
-    private final List<SAMRecord> records;
-
-    private static final SAMRecordDuplicateComparator defaultComparator = new SAMRecordDuplicateComparator();
-
-    private final SAMRecordDuplicateComparator comparator;
-
-    private SAMRecord representative = null;
-
-    private boolean needsSorting = false;
-
-    private boolean setDuplicateFlag = false;
-
-    /** Sets the duplicate flag by default */
-    public DuplicateSet() {
-        this(true);
-    }
-
-    public DuplicateSet(final boolean setDuplicateFlag) {
-        this(setDuplicateFlag, defaultComparator);
-    }
-
-    public DuplicateSet(final SAMRecordDuplicateComparator comparator) {
-        this(true, comparator);
-    }
-
-    public DuplicateSet(final boolean setDuplicateFlag, final SAMRecordDuplicateComparator comparator) {
-        records = new ArrayList<SAMRecord>(10);
-        this.setDuplicateFlag = setDuplicateFlag;
-        this.comparator = comparator;
-    }
-
-    /**
-     * Adds a record to the set and returns zero if either the set is empty, or it is a duplicate of the records already in the set.  Otherwise,
-     * it does not add the record and returns non-zero.
-     * @param record the record to add.
-     * @return zero if the record belongs in this set, -1 in a previous set, or 1 in a subsequent set, according to the comparison order
-     */
-    public int add(final SAMRecord record) {
-
-        if (!this.records.isEmpty()) {
-            final int cmp = this.comparator.duplicateSetCompare(this.representative, record);
-            if (0 != cmp) {
-                return cmp;
-            }
-
-            // update representative
-            if (0 < this.comparator.compare(this.representative, record)) {
-                this.representative = record;
-            }
-        }
-        else {
-            this.representative = record;
-        }
-
-        this.records.add(record);
-        needsSorting = true;
-
-        return 0;
-    }
-
-    private void sort() {
-        if (!records.isEmpty()) {
-            if (1 < records.size()) {
-                Collections.sort(records, this.comparator);
-            }
-
-            if (setDuplicateFlag) {
-                // reset duplicate flags
-                for (final SAMRecord record : records) {
-                    if (!record.getReadUnmappedFlag() && !record.isSecondaryOrSupplementary() && !record.getReadName().equals(representative.getReadName())) {
-                        record.setDuplicateReadFlag(true);
-                    }
-                }
-                records.get(0).setDuplicateReadFlag(false);
-            }
-
-            if (!records.get(0).equals(this.representative)) {
-                throw new SAMException("BUG: the representative was not the first record after sorting."
-                + "\nFIRST: " + records.get(0).getSAMString() + "\nSECOND: " + this.representative.getSAMString());
-            }
-        }
-        needsSorting = false; // this could be in the if above if you think hard about it
-    }
-
-    /**
-     * Gets the list of records from this set.
-     *
-     * Setting sort to false likely will not yield records in duplicate order within the set.
-     *
-     * @param sort true if we want the records in the duplicate set sorted by duplicate order, false if we do not care about the order.
-     */
-    public List<SAMRecord> getRecords(final boolean sort) {
-        if (sort && needsSorting) {
-            sort();
-        }
-
-        return this.records;
-    }
-
-    /**
-     * Gets the list of records from this set.
-     */
-    public List<SAMRecord> getRecords() {
-        return getRecords(true);
-    }
-
-    /**
-     * Gets the representative record according to the duplicate comparator.
-     */
-    public SAMRecord getRepresentative() {
-        return this.representative;
-    }
-
-    /**
-     * Returns the number of records in this set.
-     */
-    public int size() {
-        return this.records.size();
-    }
-
-    /**
-     * Returns the number of duplicates in this set, including the representative record.  Does not include records that are unmapped,
-     * secondary, or supplementary.
-     */
-    public int numDuplicates() {
-        int n = 0;
-        for (final SAMRecord record : records) {
-            if (!record.getReadUnmappedFlag() && !record.isSecondaryOrSupplementary()) {
-                n++;
-            }
-        }
-        return n;
-    }
-
-    public boolean isEmpty() {
-        return this.records.isEmpty();
-    }
-
-    /**
-     * Controls if we should update the duplicate flag of the records in this set.
-     */
-    public void setDuplicateFlag(final boolean setDuplicateFlag) { this.setDuplicateFlag = setDuplicateFlag; }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/DuplicateSetIterator.java b/src/main/java/htsjdk/samtools/DuplicateSetIterator.java
deleted file mode 100644
index 9a0c6f1..0000000
--- a/src/main/java/htsjdk/samtools/DuplicateSetIterator.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.ProgressLogger;
-import htsjdk.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.util.Collections;
-
-/**
- * An iterator of sets of duplicates.  Duplicates are defined currently by the ordering in
- * SAMRecordDuplicateComparator.
- * <p/>
- * If the input records are not pre-sorted according to the duplicate ordering, the records
- * will be sorted on-the-fly.  This may require extra memory or disk to buffer records, and
- * also computational time to perform the sorting.
- *
- * @author nhomer
- */
-public class DuplicateSetIterator implements CloseableIterator<DuplicateSet> {
-
-    private final CloseableIterator<SAMRecord> wrappedIterator;
-
-    private DuplicateSet duplicateSet = null;
-
-    private final SAMRecordDuplicateComparator comparator;
-
-    public DuplicateSetIterator(final CloseableIterator<SAMRecord> iterator, final SAMFileHeader header) {
-        this(iterator, header, false);
-    }
-
-    public DuplicateSetIterator(final CloseableIterator<SAMRecord> iterator,
-                                final SAMFileHeader header,
-                                final boolean preSorted) {
-        this(iterator, header, preSorted, null);
-    }
-
-    public DuplicateSetIterator(final CloseableIterator<SAMRecord> iterator,
-                                final SAMFileHeader header,
-                                final boolean preSorted,
-                                final SAMRecordDuplicateComparator comparator) {
-        this(iterator, header, preSorted, comparator, null);
-    }
-
-    /**
-     * Allows the user of this iterator to skip the sorting of the input if the input is already sorted.  If the records are said to be
-     * sorted but not actually sorted in the correct order, an exception during iteration will be thrown.  Progress information will
-     * be printed for sorting of the input if `log` is provided.
-     */
-    public DuplicateSetIterator(final CloseableIterator<SAMRecord> iterator,
-                                final SAMFileHeader header,
-                                final boolean preSorted,
-                                final SAMRecordDuplicateComparator comparator,
-                                final Log log) {
-        this.comparator = (comparator == null) ? new SAMRecordDuplicateComparator(Collections.singletonList(header)) : comparator;
-
-        if (preSorted) {
-            this.wrappedIterator = iterator;
-        } else {
-            ProgressLogger progressLogger = null;
-            if (log != null) {
-                progressLogger = new ProgressLogger(log, 100000);
-                log.info("Duplicate set iterator initializing.");
-            }
-
-            // Sort it!
-            final int maxRecordsInRam = SAMFileWriterImpl.getDefaultMaxRecordsInRam();
-            final File tmpDir = new File(System.getProperty("java.io.tmpdir"));
-            final SortingCollection<SAMRecord> alignmentSorter = SortingCollection.newInstance(SAMRecord.class,
-                    new BAMRecordCodec(header), this.comparator,
-                    maxRecordsInRam, tmpDir);
-
-            while (iterator.hasNext()) {
-                final SAMRecord record = iterator.next();
-                alignmentSorter.add(record);
-                if (progressLogger != null) progressLogger.record(record);
-            }
-            iterator.close();
-
-            this.wrappedIterator = alignmentSorter.iterator();
-            if (log != null) log.info("Duplicate set iterator initialized.");
-        }
-
-        this.duplicateSet = new DuplicateSet(this.comparator);
-
-        if (hasNext()) {
-            this.duplicateSet.add(this.wrappedIterator.next());
-        }
-
-    }
-
-    @Deprecated
-    /** Do not use this method as the first duplicate set will not be compared with this scoring strategy.
-      * Instead, provide a comparator to the constructor that has the scoring strategy set. */
-    public void setScoringStrategy(final DuplicateScoringStrategy.ScoringStrategy scoringStrategy) {
-        this.comparator.setScoringStrategy(scoringStrategy);
-    }
-
-    public DuplicateSet next() {
-        DuplicateSet duplicateSet = null;
-
-        int cmp = 0;
-
-        while (0 == cmp) {
-            if (!wrappedIterator.hasNext()) { // no more!
-                duplicateSet = this.duplicateSet;
-                this.duplicateSet = new DuplicateSet(this.comparator);
-                break;
-            } else {
-                // get another one
-                final SAMRecord record = this.wrappedIterator.next();
-
-                // assumes that the duplicate set always has at least one record inside!
-                final SAMRecord representative = this.duplicateSet.getRepresentative();
-
-                if (representative.getReadUnmappedFlag() || representative.isSecondaryOrSupplementary()) {
-                    duplicateSet = this.duplicateSet;
-                    this.duplicateSet = new DuplicateSet(this.comparator);
-                    this.duplicateSet.add(record);
-                    break; // exits the 0 == cmp loop
-                } else {
-                    // compare against the representative for set membership, not ordering
-                    cmp = this.duplicateSet.add(record);
-
-                    if (0 < cmp) {
-                        throw new SAMException("The input records were not sorted in duplicate order:\n" +
-                                representative.getSAMString() + record.getSAMString());
-                    } else if (cmp < 0) {
-                        duplicateSet = this.duplicateSet;
-                        this.duplicateSet = new DuplicateSet(this.comparator);
-                        this.duplicateSet.add(record);
-                    } // otherwise it was already added
-                }
-            }
-        }
-
-        return duplicateSet;
-    }
-
-    public void close() { wrappedIterator.close(); }
-
-    public boolean hasNext() {
-        return (!duplicateSet.isEmpty() || wrappedIterator.hasNext());
-    }
-
-    // Does nothing!
-    public void remove() { }
-}
diff --git a/src/main/java/htsjdk/samtools/FileTruncatedException.java b/src/main/java/htsjdk/samtools/FileTruncatedException.java
deleted file mode 100644
index 0adf799..0000000
--- a/src/main/java/htsjdk/samtools/FileTruncatedException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Thrown when it is possible to detect that a SAM or BAM file is truncated.
- *
- * @author alecw at broadinstitute.org
- */
-public class FileTruncatedException extends SAMException {
-    public FileTruncatedException() {
-    }
-
-    public FileTruncatedException(final String s) {
-        super(s);
-    }
-
-    public FileTruncatedException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public FileTruncatedException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/FixBAMFile.java b/src/main/java/htsjdk/samtools/FixBAMFile.java
deleted file mode 100755
index 6bea56e..0000000
--- a/src/main/java/htsjdk/samtools/FixBAMFile.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.CloserUtil;
-
-import java.io.File;
-
-public class FixBAMFile {
-    public static void main(String[] args) {
-        File inputFile = new File(args[0]);
-        File outputFile = new File(args[1]);
-        SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(inputFile);
-        SAMFileHeader header = reader.getFileHeader();
-        SAMFileWriter writer = new SAMFileWriterFactory().makeBAMWriter(header, true, outputFile);
-        for (SAMRecord record : reader) {
-            if (record.getIndexingBin() != null) {
-                record.setIndexingBin(record.computeIndexingBin());
-            }
-            writer.addAlignment(record);
-        }
-        writer.close();
-        CloserUtil.close(reader);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/GenomicIndexUtil.java b/src/main/java/htsjdk/samtools/GenomicIndexUtil.java
deleted file mode 100644
index f634932..0000000
--- a/src/main/java/htsjdk/samtools/GenomicIndexUtil.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.BitSet;
-
-/**
- * Constants and methods used by BAM and Tribble indices
- */
-public class GenomicIndexUtil {
-    /**
-     * Reports the total amount of genomic data that any bin can index.
-     */
-    public static final int BIN_GENOMIC_SPAN = 512*1024*1024;
-
-    /**
-     * What is the starting bin for each level?
-     */
-    public static final int[] LEVEL_STARTS = {0,1,9,73,585,4681};
-
-    /**
-     * Reports the maximum number of bins that can appear in a binning index.
-     */
-    public static final int MAX_BINS = 37450;   // =(8^6-1)/7+1
-
-    public static final int MAX_LINEAR_INDEX_SIZE = MAX_BINS+1-LEVEL_STARTS[LEVEL_STARTS.length-1];
-
-
-    /**
-     * E.g. for a SAMRecord with no genomic coordinate.
-     */
-    public static final int UNSET_GENOMIC_LOCATION = 0;
-
-    /**
-     * calculate the bin given an alignment in [beg,end)
-     * Described in "The Human Genome Browser at UCSC. Kent & al. doi: 10.1101/gr.229102 "
-     * @param beg 0-based start of read (inclusive)
-     * @param end 0-based end of read (exclusive)
-     */
-    public static int regionToBin(final int beg, int end)
-    {
-        --end;
-
-        if (beg>>14 == end>>14) return ((1<<15)-1)/7 + (beg>>14);
-        if (beg>>17 == end>>17) return ((1<<12)-1)/7 + (beg>>17);
-        if (beg>>20 == end>>20) return  ((1<<9)-1)/7 + (beg>>20);
-        if (beg>>23 == end>>23) return  ((1<<6)-1)/7 + (beg>>23);
-        if (beg>>26 == end>>26) return  ((1<<3)-1)/7 + (beg>>26);
-        return 0;
-    }
-
-    // TODO: It is disturbing that regionToBins is 0-based, but regionToBins is 1-based.
-    // TODO: It is also suspicious that regionToBins decrements endPos.  Test it!
-    // TODO: However end is decremented in regionToBins so perhaps there is no conflict.
-    /**
-     * Get candidate bins for the specified region
-     * @param startPos 1-based start of target region, inclusive.
-     * @param endPos 1-based end of target region, inclusive.
-     * @return bit set for each bin that may contain SAMRecords in the target region.
-     */
-    public static BitSet regionToBins(final int startPos, final int endPos) {
-        final int maxPos = 0x1FFFFFFF;
-        final int start = (startPos <= 0) ? 0 : (startPos-1) & maxPos;
-        final int end = (endPos <= 0) ? maxPos : (endPos-1) & maxPos;
-        if (start > end) {
-            return null;
-        }
-        int k;
-        final BitSet bitSet = new BitSet(GenomicIndexUtil.MAX_BINS);
-        bitSet.set(0);
-        for (k =    1 + (start>>26); k <=    1 + (end>>26); ++k) bitSet.set(k);
-        for (k =    9 + (start>>23); k <=    9 + (end>>23); ++k) bitSet.set(k);
-        for (k =   73 + (start>>20); k <=   73 + (end>>20); ++k) bitSet.set(k);
-        for (k =  585 + (start>>17); k <=  585 + (end>>17); ++k) bitSet.set(k);
-        for (k = 4681 + (start>>14); k <= 4681 + (end>>14); ++k) bitSet.set(k);
-        return bitSet;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/HighAccuracyDownsamplingIterator.java b/src/main/java/htsjdk/samtools/HighAccuracyDownsamplingIterator.java
deleted file mode 100644
index 2dd3b6c..0000000
--- a/src/main/java/htsjdk/samtools/HighAccuracyDownsamplingIterator.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Random;
-import java.util.Set;
-
-/**
- * A DownsamplingIterator that attempts to provide very high accuracy (minimizing the difference between emitted proportion
- * and requested proportion) at the expense of using memory proportional to the number of reads in the incoming stream.
- *
- * @author Tim Fennell
- */
-class HighAccuracyDownsamplingIterator extends DownsamplingIterator {
-    private final Iterator<SAMRecord> underlyingIterator;
-    private final Random random;
-    private SAMRecord nextRecord;
-    private final Map<String, Boolean> decisions = new HashMap<String, Boolean>();
-
-    private double targetAccuracy = 0.0001;
-    private long totalTemplates, keptTemplates;
-    private Iterator<SAMRecord> bufferedRecords = new ArrayList<SAMRecord>().iterator();
-    private Set<String> bufferedRecordsToKeep;
-
-    /** Override method to make it clear that this iterator attempts to provide a higher accuracy of downsampling. */
-    @Override public boolean isHigherAccuracy() {
-        return true;
-    }
-
-    /** Constructs a downsampling iterator upon the supplied iterator, using the Random as the source of randomness. */
-    HighAccuracyDownsamplingIterator(final Iterator<SAMRecord> iterator, final double proportion, final int seed) {
-        super(proportion);
-        this.underlyingIterator = iterator;
-        this.random = new Random(seed);
-    }
-
-    /**
-     * Sets the target accuracy of the downsampling iterator.  The value should be thought of as
-     * probability +/- accuracy.  So a value of 0.001 would instruct the downsampling iterator to
-     * attempt to guarantee at accuracy to within 0.1%.  The downsampler will need to buffer reads
-     * for 1/accuracy templates, so setting this to extremely small numbers is not advisable.
-     */
-    public DownsamplingIterator setTargetAccuracy(final double accuracy) {
-        if (accuracy >= 1 || accuracy <= 1d/Integer.MAX_VALUE) throw new IllegalArgumentException("Illegal value. Must be 1/MAX_INT < accuracy < 1");
-        this.targetAccuracy = accuracy;
-        return this;
-    }
-
-    /** Returns true if there is another record available post-downsampling, false otherwise. */
-    @Override public boolean hasNext() {
-        return this.nextRecord != null || advance();
-    }
-
-    /** Returns the next record from the iterator, or throws an exception if there is no next record. */
-    @Override public SAMRecord next() {
-        if (this.nextRecord == null) {
-            throw new NoSuchElementException("Call to next() when hasNext() == false");
-        }
-        else {
-            final SAMRecord retval = this.nextRecord;
-            advance();
-            return retval;
-        }
-    }
-
-    /** Returns the underlying iterator so that subclasses may manipulate it. */
-    protected Iterator<SAMRecord> getUnderlyingIterator() {
-        return this.underlyingIterator;
-    }
-
-    /**
-     * Clears the current record and attempts to advance through the underlying iterator until a
-     * record is kept during downsampling.  If no more records are kept and the end of the input
-     * is reached this.nextRecord will be null.
-     *
-     * @return true if a record is available after advancing, false otherwise
-     */
-    protected boolean advance() {
-        this.nextRecord = null;
-
-        while (this.nextRecord == null && (this.bufferedRecords.hasNext() || bufferNextChunkOfRecords(getTargetProportion(), this.targetAccuracy))) {
-            final SAMRecord rec = this.bufferedRecords.next();
-            final String key = rec.getReadName();
-            final Boolean previous = decisions.get(key);
-            final boolean keepThisRecord;
-
-            if (previous == null) {
-                keepThisRecord = this.bufferedRecordsToKeep.contains(rec.getReadName());
-                decisions.put(key, keepThisRecord);
-            }
-            else {
-                keepThisRecord = previous;
-            }
-
-            if (keepThisRecord) {
-                this.nextRecord = rec;
-                recordAcceptedRecord();
-            }
-            else {
-                recordDiscardedRecord();
-            }
-        }
-
-        return this.nextRecord != null;
-    }
-
-    /**
-     * Buffers reads until either the end of the file is reached or enough reads have been buffered such
-     * that downsampling can be performed to the desired target accuracy.  Once reads have been buffered,
-     * template names are randomly sampled out for discarding until the desired number of reads have
-     * been discarded.
-     *
-     * @return True if one or more reads have been buffered, false otherwise
-     */
-    protected boolean bufferNextChunkOfRecords(final double proportion, final double accuracy) {
-        final int templatesToRead = (int) Math.ceil(1 / accuracy);
-        final Set<String> names = new HashSet<String>();
-        final List<SAMRecord> recs = new ArrayList<SAMRecord>(templatesToRead);
-
-        readFromUnderlyingIterator(recs, names, templatesToRead);
-
-        // Determine how many templates to keep/discard
-        final int templatesRead = names.size();
-        final int templatesToKeep = calculateTemplatesToKeep(templatesRead, proportion);
-
-        // Randomly shuffle a list of all the template names, and then remove some from the set
-        final int templatesToDiscard = templatesRead - templatesToKeep;
-        final List<String> tmp    = new ArrayList<String>(names);
-        Collections.shuffle(tmp, this.random);
-        for (int i = 0; i < templatesToDiscard; ++i) names.remove(tmp.get(i));
-
-        // Set all the instance state so that advance()/next() get what they need
-        this.bufferedRecordsToKeep = names;
-        this.bufferedRecords = recs.iterator();
-        this.totalTemplates += templatesRead;
-        this.keptTemplates  += names.size();
-        return !recs.isEmpty();
-    }
-
-    /**
-     * Calculates the number of templates to keep in a specific batch of reads having just read templatesRead reads
-     * and wanting to keep proportion of them.  Rounds the final number up or down based on whether, to this point,
-     * the iterator is under or over it's goal proportion.
-     *
-     * Implemented as second method to allow ChainedDownsamplingIterator to tamper with the strategy!
-     */
-    protected int calculateTemplatesToKeep(final int templatesRead, final double proportion) {
-        final double rawTemplatesToKeep = templatesRead * proportion;
-        return (keptTemplates / (double) totalTemplates < proportion)
-                ? (int) Math.ceil(rawTemplatesToKeep) : (int) Math.floor(rawTemplatesToKeep);
-    }
-
-    /**
-     * Reads from the underlying iterator until it has observed templatesToRead templates (i.e. read names) that it has not yet
-     * observed, so that templatesToRead new keep/reject decisions can be made.  The records that are read are placed into recs
-     * and _novel_ template names are placed into names.
-     */
-    protected void readFromUnderlyingIterator(final List<SAMRecord> recs, final Set<String> names, final int templatesToRead) {
-        while (this.underlyingIterator.hasNext() && names.size() < templatesToRead) {
-            final SAMRecord rec = this.underlyingIterator.next();
-            recs.add(rec);
-
-            if (this.decisions.containsKey(rec.getReadName())) continue;
-            names.add(rec.getReadName());
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/LinearIndex.java b/src/main/java/htsjdk/samtools/LinearIndex.java
deleted file mode 100644
index bccdfe8..0000000
--- a/src/main/java/htsjdk/samtools/LinearIndex.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.Arrays;
-
-/**
- * The linear index associated with a given reference in a BAM index.
- *
- * @author mhanna
- * @version 0.1
- */
-public class LinearIndex {
-
-    public static final int MAX_LINEAR_INDEX_SIZE = GenomicIndexUtil.MAX_LINEAR_INDEX_SIZE;
-
-    public static final int BAM_LIDX_SHIFT = 14;
-
-    /**
-     * The reference sequence number for this linear index.
-     */
-    private final int mReferenceSequence;
-
-    /**
-     * Dictates the first stored element of the index.
-     */
-    private final int mIndexStart;
-
-    /**
-     * The linear index entries within this bin.
-     */
-    private final long[] mIndexEntries;
-
-    public LinearIndex(final int referenceSequence, final int indexStart, final long[] indexEntries) {
-        this.mReferenceSequence = referenceSequence;
-        this.mIndexStart = indexStart;
-        this.mIndexEntries = indexEntries;
-    }
-
-    public int getReferenceSequence() {
-        return mReferenceSequence;
-    }
-
-    public int size() {
-        return mIndexEntries.length;
-    }
-
-    public long get(final int index) {
-        return mIndexEntries[index-mIndexStart];
-    }
-
-    public static int convertToLinearIndexOffset(final int contigPos) {
-        final int indexPos = (contigPos <= 0) ? 0 : contigPos-1;
-        return indexPos >> BAM_LIDX_SHIFT;
-    }
-
-    /**
-     * Gets the minimum offset of any alignment start appearing in this index, according to the linear index. 
-     * @param startPos Starting position for this query.
-     * @return The minimum offset, in chunk format, of any read appearing in this position.
-     */
-    public long getMinimumOffset(final int startPos) {
-        final int start = (startPos <= 0) ? 0 : startPos-1;
-        final int regionLinearBin = start >> BAM_LIDX_SHIFT;
-        // System.out.println("# regionLinearBin: " + regionLinearBin);
-        long minimumOffset = 0;
-        if (regionLinearBin-mIndexStart < mIndexEntries.length)
-            minimumOffset = mIndexEntries[regionLinearBin-mIndexStart];
-        return minimumOffset;
-    }
-
-    /**
-     * Direct access to the array.  Be careful!
-     * @return The elements of the linear index.
-     */
-    public long[] getIndexEntries() {
-        return mIndexEntries;
-    }
-
-    public int getIndexStart() {
-        return mIndexStart;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final LinearIndex that = (LinearIndex) o;
-
-        if (mIndexStart != that.mIndexStart) return false;
-        if (mReferenceSequence != that.mReferenceSequence) return false;
-        if (!Arrays.equals(mIndexEntries, that.mIndexEntries)) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = mReferenceSequence;
-        result = 31 * result + mIndexStart;
-        result = 31 * result + Arrays.hashCode(mIndexEntries);
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/MergingSamRecordIterator.java b/src/main/java/htsjdk/samtools/MergingSamRecordIterator.java
deleted file mode 100644
index a294752..0000000
--- a/src/main/java/htsjdk/samtools/MergingSamRecordIterator.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Map;
-import java.util.PriorityQueue;
-
-/**
- * Provides an iterator interface for merging multiple underlying iterators into a single
- * iterable stream. The underlying iterators/files must all have the same sort order unless
- * the requested output format is unsorted, in which case any combination is valid.
- */
-public class MergingSamRecordIterator implements CloseableIterator<SAMRecord> {
-    private final PriorityQueue<ComparableSamRecordIterator> pq;
-    private final SamFileHeaderMerger samHeaderMerger;
-    private final Collection<SamReader> readers;
-    private final SAMFileHeader.SortOrder sortOrder;
-    private final SAMRecordComparator comparator;
-
-    private boolean initialized = false;
-
-    /**
-     * Constructs a new merging iterator with the same set of readers and sort order as
-     * provided by the header merger parameter.
-     *
-     * @param headerMerger   The merged header and contents of readers.
-     * @param forcePresorted True to ensure that the iterator checks the headers of the readers for appropriate sort order.
-     * @deprecated replaced by {@link #MergingSamRecordIterator(SamFileHeaderMerger, Collection, boolean)}
-     */
-    @Deprecated
-    public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, final boolean forcePresorted) {
-        this(headerMerger, headerMerger.getReaders(), forcePresorted);
-    }
-
-    /**
-     * Constructs a new merging iterator with the same set of readers and sort order as
-     * provided by the header merger parameter.
-     *
-     * @param headerMerger The merged header and contents of readers.
-     * @param assumeSorted false ensures that the iterator checks the headers of the readers for appropriate sort order.
-     */
-    public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, Collection<SamReader> readers, final boolean assumeSorted) {
-        this.samHeaderMerger = headerMerger;
-        this.sortOrder = headerMerger.getMergedHeader().getSortOrder();
-        this.comparator = getComparator();
-        this.readers = readers;
-
-        this.pq = new PriorityQueue<ComparableSamRecordIterator>(readers.size());
-
-        for (final SamReader reader : readers) {
-            if (!samHeaderMerger.getHeaders().contains(reader.getFileHeader()))
-                throw new SAMException("All iterators to be merged must be accounted for in the SAM header merger");
-            if (!assumeSorted && this.sortOrder != SAMFileHeader.SortOrder.unsorted &&
-                    reader.getFileHeader().getSortOrder() != this.sortOrder) {
-                throw new SAMException("Files are not compatible with sort order");
-            }
-        }
-    }
-
-    /**
-     * Add a set of SAM file iterators to the merging iterator.  Use this to restrict the merged iteration to a given genomic interval,
-     * rather than iterating over every read in the backing file or stream.
-     *
-     * @param headerMerger The merged header and contents of readers.
-     * @param iterators    Iterator traversing over reader contents.
-     */
-    public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, final Map<SamReader, CloseableIterator<SAMRecord>> iterators, final boolean assumeSorted) {
-        this(headerMerger, iterators.keySet(), assumeSorted);
-        for (final Map.Entry<SamReader, CloseableIterator<SAMRecord>> mapping : iterators.entrySet())
-            addIfNotEmpty(new ComparableSamRecordIterator(mapping.getKey(), mapping.getValue(), comparator));
-        initialized = true;
-    }
-
-    private void startIterationIfRequired() {
-        if (initialized)
-            return;
-        for (final SamReader reader : readers)
-            addIfNotEmpty(new ComparableSamRecordIterator(reader, reader.iterator(), comparator));
-        initialized = true;
-    }
-
-    /**
-     * Close down all open iterators.
-     */
-    public void close() {
-        // Iterators not in the priority queue have already been closed; only close down the iterators that are still in the priority queue.
-        for (CloseableIterator<SAMRecord> iterator : pq)
-            iterator.close();
-    }
-
-    /** Returns true if any of the underlying iterators has more records, otherwise false. */
-    public boolean hasNext() {
-        startIterationIfRequired();
-        return !this.pq.isEmpty();
-    }
-
-    /** Returns the next record from the top most iterator during merging. */
-    public SAMRecord next() {
-        startIterationIfRequired();
-
-        final ComparableSamRecordIterator iterator = this.pq.poll();
-        final SAMRecord record = iterator.next();
-        addIfNotEmpty(iterator);
-        // this will resolve the reference indices against the new, merged header
-        record.setHeader(this.samHeaderMerger.getMergedHeader());
-
-        // Fix the read group if needs be
-        if (this.samHeaderMerger.hasReadGroupCollisions()) {
-            final String oldGroupId = (String) record.getAttribute(ReservedTagConstants.READ_GROUP_ID);
-            if (oldGroupId != null) {
-                final String newGroupId = this.samHeaderMerger.getReadGroupId(iterator.getReader().getFileHeader(), oldGroupId);
-                record.setAttribute(ReservedTagConstants.READ_GROUP_ID, newGroupId);
-            }
-        }
-
-        // Fix the program group if needs be
-        if (this.samHeaderMerger.hasProgramGroupCollisions()) {
-            final String oldGroupId = (String) record.getAttribute(ReservedTagConstants.PROGRAM_GROUP_ID);
-            if (oldGroupId != null) {
-                final String newGroupId = this.samHeaderMerger.getProgramGroupId(iterator.getReader().getFileHeader(), oldGroupId);
-                record.setAttribute(ReservedTagConstants.PROGRAM_GROUP_ID, newGroupId);
-            }
-        }
-
-        return record;
-    }
-
-    /**
-     * Adds iterator to priority queue. If the iterator has more records it is added
-     * otherwise it is closed and not added.
-     */
-    private void addIfNotEmpty(final ComparableSamRecordIterator iterator) {
-        if (iterator.hasNext()) {
-            pq.offer(iterator);
-        } else {
-            iterator.close();
-        }
-    }
-
-    /** Unsupported operation. */
-    public void remove() {
-        throw new UnsupportedOperationException("MergingSAMRecorderIterator.remove()");
-    }
-
-    /**
-     * Get the right comparator for a given sort order (coordinate, alphabetic). In the
-     * case of "unsorted" it will return a comparator that gives an arbitrary but reflexive
-     * ordering.
-     */
-    private SAMRecordComparator getComparator() {
-        // For unsorted build a fake comparator that compares based on object ID
-        if (this.sortOrder == SAMFileHeader.SortOrder.unsorted) {
-            return new SAMRecordComparator() {
-                public int fileOrderCompare(final SAMRecord lhs, final SAMRecord rhs) {
-                    return System.identityHashCode(lhs) - System.identityHashCode(rhs);
-                }
-
-                public int compare(final SAMRecord lhs, final SAMRecord rhs) {
-                    return fileOrderCompare(lhs, rhs);
-                }
-            };
-        }
-        if (samHeaderMerger.hasMergedSequenceDictionary() && sortOrder.equals(SAMFileHeader.SortOrder.coordinate)) {
-            return new MergedSequenceDictionaryCoordinateOrderComparator();
-        }
-
-        // Otherwise try and figure out what kind of comparator to return and build it
-        return this.sortOrder.getComparatorInstance();
-    }
-
-    /** Returns the merged header that the merging iterator is working from. */
-    public SAMFileHeader getMergedHeader() {
-        return this.samHeaderMerger.getMergedHeader();
-    }
-
-    /**
-     * Ugh.  Basically does a regular coordinate compare, but looks up the sequence indices in the merged
-     * sequence dictionary.  I hate the fact that this extends SAMRecordCoordinateComparator, but it avoids
-     * more copy & paste.
-     */
-    private class MergedSequenceDictionaryCoordinateOrderComparator extends SAMRecordCoordinateComparator implements Serializable {
-        private static final long serialVersionUID = 1L;
-
-        public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-            final int referenceIndex1 = getReferenceIndex(samRecord1);
-            final int referenceIndex2 = getReferenceIndex(samRecord2);
-            if (referenceIndex1 != referenceIndex2) {
-                if (referenceIndex1 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                    return 1;
-                } else if (referenceIndex2 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                    return -1;
-                } else {
-                    return referenceIndex1 - referenceIndex2;
-                }
-            }
-            if (referenceIndex1 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                // Both are unmapped.
-                return 0;
-            }
-            return samRecord1.getAlignmentStart() - samRecord2.getAlignmentStart();
-        }
-
-        private int getReferenceIndex(final SAMRecord samRecord) {
-            if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getReferenceIndex());
-            }
-            if (samRecord.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getMateReferenceIndex());
-            }
-            return SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/NotPrimarySkippingIterator.java b/src/main/java/htsjdk/samtools/NotPrimarySkippingIterator.java
deleted file mode 100644
index 787da16..0000000
--- a/src/main/java/htsjdk/samtools/NotPrimarySkippingIterator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.PeekIterator;
-
-/**
- * Wrapper around SAMRecord iterator that skips over non-primary elements.
- * This iterator conflates a filtering iterator and a peekable iterator.  It would be cleaner to
- * handle those concerns separately.
- */
-public class NotPrimarySkippingIterator {
-    private final PeekIterator<SAMRecord> it;
-
-    public NotPrimarySkippingIterator(final CloseableIterator<SAMRecord> underlyingIt) {
-        it = new PeekIterator<SAMRecord>(underlyingIt);
-        skipAnyNotprimary();
-    }
-
-    public boolean hasCurrent() {
-        return it.hasNext();
-    }
-
-    public SAMRecord getCurrent() {
-        assert(hasCurrent());
-        return it.peek();
-    }
-
-    public boolean advance() {
-        it.next();
-        skipAnyNotprimary();
-        return hasCurrent();
-    }
-
-    private void skipAnyNotprimary() {
-        while (it.hasNext() && it.peek().getNotPrimaryAlignmentFlag()) {
-            it.next();
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/QueryInterval.java b/src/main/java/htsjdk/samtools/QueryInterval.java
deleted file mode 100644
index bdfb52c..0000000
--- a/src/main/java/htsjdk/samtools/QueryInterval.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CoordMath;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Interval relative to a reference, for querying a BAM file.
- */
-public class QueryInterval implements Comparable<QueryInterval> {
-
-    /** Index of reference sequence, based on the sequence dictionary of the BAM file being queried. */
-    public final int referenceIndex;
-    /** 1-based, inclusive */
-    public final int start;
-    /** 1-based, inclusive.  If <= 0, implies that the interval goes to the end of the reference sequence */
-    public final int end;
-
-
-    public QueryInterval(final int referenceIndex, final int start, final int end) {
-        if (referenceIndex < 0) {
-            throw new IllegalArgumentException("Invalid reference index " + referenceIndex);
-        }
-        this.referenceIndex = referenceIndex;
-        this.start = start;
-        this.end = end;
-    }
-
-
-    public int compareTo(final QueryInterval other) {
-        int comp = this.referenceIndex - other.referenceIndex;
-        if (comp != 0) return comp;
-        comp = this.start - other.start;
-        if (comp != 0) return comp;
-        else if (this.end == other.end) return 0;
-        else if (this.end == 0) return 1;
-        else if (other.end == 0) return -1;
-        else return this.end - other.end;
-    }
-
-    /**
-     * @return true if both are on same reference, and other starts exactly where this ends.
-     */
-    public boolean abuts(final QueryInterval other) {
-        return this.referenceIndex == other.referenceIndex && this.end == other.start;
-    }
-
-    /**
-     * @return true if both are on same reference, and the overlap.
-     */
-    public boolean overlaps(final QueryInterval other) {
-        if (this.referenceIndex != other.referenceIndex) {
-            return false;
-        }
-        final int thisEnd = (this.end == 0 ? Integer.MAX_VALUE : this.end);
-        final int otherEnd = (other.end == 0 ? Integer.MAX_VALUE : other.end);
-        return CoordMath.overlaps(this.start, thisEnd, other.start, otherEnd);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%d:%d-%d", referenceIndex, start, end);
-    }
-
-    private static final QueryInterval[] EMPTY_QUERY_INTERVAL_ARRAY = new QueryInterval[0];
-
-    /**
-     * @param inputIntervals WARNING: This list is modified (sorted) by this method.
-     * @return Ordered list of intervals in which abutting and overlapping intervals are merged.
-     */
-    public static QueryInterval[] optimizeIntervals(final QueryInterval[] inputIntervals) {
-        if (inputIntervals.length == 0) return EMPTY_QUERY_INTERVAL_ARRAY;
-        Arrays.sort(inputIntervals);
-
-        final List<QueryInterval> unique = new ArrayList<QueryInterval>();
-        QueryInterval previous = inputIntervals[0];
-
-
-        for (int i = 1; i < inputIntervals.length; ++i) {
-            final QueryInterval next = inputIntervals[i];
-            if (previous.abuts(next) || previous.overlaps(next)) {
-                final int newEnd = ((previous.end == 0 || next.end == 0) ? 0 : Math.max(previous.end, next.end));
-                previous = new QueryInterval(previous.referenceIndex, previous.start, newEnd);
-            } else {
-                unique.add(previous);
-                previous = next;
-            }
-        }
-
-        if (previous != null) unique.add(previous);
-
-        return unique.toArray(EMPTY_QUERY_INTERVAL_ARRAY);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/ReservedTagConstants.java b/src/main/java/htsjdk/samtools/ReservedTagConstants.java
deleted file mode 100644
index c0d03b8..0000000
--- a/src/main/java/htsjdk/samtools/ReservedTagConstants.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Constants for tags used in our SAM/BAM files
- */
-public class ReservedTagConstants {
-    public static final String READ_GROUP_ID = SAMTag.RG.name(); // Specified in the SAM spec doc
-    public static final String PROGRAM_GROUP_ID =  SAMTag.PG.name(); // Specified in the SAM spec doc
-
-    /** Present and set to 1 if a read is a noise read. */
-    public static final String XN = "XN";
-
-    /** Number of nucleotide differences (Specified in the SAM spec doc) */
-    public static final String NM = SAMTag.NM.name();
-
-    /** The sum of the mismatched qualities. */
-    public static final String XQ = "XQ";
-
-    /**
-     * The name of an attribute which stores the 1-based index of the start of
-     * sequence within a read (in original orientation) that should be clipped
-     * or trimmed before alignment and downstream use.
-     * The region to be clipped extends from this position to the end of the read.
-     */
-    public static final String XT = "XT";
-
-    /** The original sequence before 454 cafie and homopolymer correction */
-    public static final String XS = "XS";
-
-    /** The Four54 edit string of 454 cafie and homopolymer corrections
-     * <pre>
-     *   editString ::= {base operator position [- position]}* ;  // Cafie needs 2 positions
-     *   base ::= A | T | G | C | N ;   // N only for undercall
-     *   operator ::= o | u | c ;       // o = Overcall, u = Undercall, c = Cafie.
-     *   position is 0 based position of the correction (assuming forward strand) .  Cafie positions are to-from.
-     *   For example: XF :Z:Gc4-6Nu11Co15 means a cafie correction moved a G from position 6 to 4,
-     *   an N was inserted for an undercall at position 11, and a C was removed as an overcall at position 15
-     */
-    public static final String XF = "XF";
-
-    /** The original pred quality scores before modifications such as 454 cafie and homopolymer correction */
-    public static final String OQ = SAMTag.OQ.name();
-
-    /** The original cigar before indel cleaning, or 454 cafie and homopolymer correction */
-    public static final String OC = "OC";
-
-}
diff --git a/src/main/java/htsjdk/samtools/SAMBinaryTagAndUnsignedArrayValue.java b/src/main/java/htsjdk/samtools/SAMBinaryTagAndUnsignedArrayValue.java
deleted file mode 100644
index 507e319..0000000
--- a/src/main/java/htsjdk/samtools/SAMBinaryTagAndUnsignedArrayValue.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Simple extension to SAMBinaryTagAndValue in order to distinguish unsigned array values, because
- * signedness cannot be determined by introspection of value. Must be array of byte, short, or int.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMBinaryTagAndUnsignedArrayValue extends SAMBinaryTagAndValue {
-    public SAMBinaryTagAndUnsignedArrayValue(final short tag, final Object value) {
-        super(tag, value);
-        if (!value.getClass().isArray() || value instanceof float[]) {
-            throw new IllegalArgumentException("Attribute type " + value.getClass() +
-                    " cannot be encoded as an unsigned array. Tag: " +
-                    SAMTagUtil.getSingleton().makeStringTag(tag));
-        }
-    }
-
-    /** Creates and returns a shallow copy of the list of tag/values. */
-    @Override
-    public SAMBinaryTagAndValue copy() {
-        final SAMBinaryTagAndValue retval = new SAMBinaryTagAndUnsignedArrayValue(this.tag, this.value);
-        if (next != null) retval.next = next.copy();
-        return retval;
-    }
-
-    /** Creates and returns a deep copy of the list of tag/values. */
-    @Override
-    public SAMBinaryTagAndValue deepCopy() {
-        final SAMBinaryTagAndValue retval = new SAMBinaryTagAndUnsignedArrayValue(this.tag, cloneValue());
-        if (next != null) {
-            retval.next = next.deepCopy();
-        }
-        return retval;
-    }
-
-
-    @Override
-    public boolean isUnsignedArray() {
-        return true;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMBinaryTagAndValue.java b/src/main/java/htsjdk/samtools/SAMBinaryTagAndValue.java
deleted file mode 100644
index 0778190..0000000
--- a/src/main/java/htsjdk/samtools/SAMBinaryTagAndValue.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-/**
- * Holds a SAMRecord attribute and the tagname (in binary form) for that attribute.
- * SAMRecord stores tag name and value in this form, because much String creation is avoided this way.
- * See SAMTagUtil to convert the tag to String form.
- *
- * Values associated with attribute tags must be of a type that implements {@link Serializable} or else
- * serialization will fail. Accepted types are String, scalar types Short, Integer, Character, Float,
- * and Long (see below); array types byte[], short[], int[] and float[]. Cannot be null.
- *
- * Long valued attributes are constrained to the range [Integer.MIN_VALUE, BinaryCodec.MAX_UINT],
- * which includes the entire range of signed ints [Integer.MIN_VALUE, Integer.MAX_VALUE] and
- * the entire range of unsigned ints that can be stored per the BAM spec [0, (Integer.MAX_VALUE * 2) + 1].
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMBinaryTagAndValue implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    public final short tag;
-    public final Object value;
-    protected SAMBinaryTagAndValue next = null;
-
-    /**
-     * @param tag tagname (in binary form) for this attribute
-     * @param value value for this attribute (must be of a type that implements {@link Serializable}
-     *              or else serialization will fail). Cannot be null.
-     */
-    public SAMBinaryTagAndValue(final short tag, final Object value) {
-        if (null == value) {
-            throw new IllegalArgumentException("SAMBinaryTagAndValue value may not be null");
-        }
-        if (!isAllowedAttributeValue(value)) {
-            throw new IllegalArgumentException("Attribute type " + value.getClass() + " not supported. Tag: " +
-                    SAMTagUtil.getSingleton().makeStringTag(tag));
-        }
-        this.tag = tag;
-        this.value = value;
-    }
-
-    // Inspect the proposed value to determine if it is an allowed value type,
-    // and if the value is in range.
-    protected static boolean isAllowedAttributeValue(final Object value) {
-            if (value instanceof Byte ||
-                value instanceof Short ||
-                value instanceof Integer ||
-                value instanceof String ||
-                value instanceof Character ||
-                value instanceof Float ||
-                value instanceof byte[] ||
-                value instanceof short[] ||
-                value instanceof int[] ||
-                value instanceof float[]) {
-            return true;
-        }
-
-        // A special case for Longs: we require Long values to fit into either a uint32_t or an int32_t,
-        // as that is what the BAM spec allows.
-        if (value instanceof Long) {
-            return SAMUtils.isValidUnsignedIntegerAttribute((Long) value)
-                    || ((Long) value >= Integer.MIN_VALUE && (Long) value <= Integer.MAX_VALUE);
-        }
-        return false;
-    }
-
-    @Override public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        return typeSafeEquals((SAMBinaryTagAndValue) o);
-    }
-
-    /** Type safe equals method that recurses down the list looking for equality. */
-    private boolean typeSafeEquals(final SAMBinaryTagAndValue that) {
-        if (this.tag != that.tag) return false;
-        if (this.valueEquals(that)) {
-            if (this.next == null) return that.next == null;
-            else return this.next.equals(that.next);
-        }
-        else {
-            return false;
-        }
-    }
-
-    private boolean valueEquals(SAMBinaryTagAndValue that) {
-        if (this.value instanceof byte[]) {
-            return that.value instanceof byte[] ?
-                Arrays.equals((byte[])this.value, (byte[])that.value) : false;
-        }
-        else if (this.value instanceof short[]) {
-            return that.value instanceof short[] ?
-                    Arrays.equals((short[])this.value, (short[])that.value) : false;
-        }
-        else if (this.value instanceof int[]) {
-            return that.value instanceof int[] ?
-                    Arrays.equals((int[])this.value, (int[])that.value) : false;
-        }
-        else if (this.value instanceof float[]) {
-            return that.value instanceof float[] ?
-                    Arrays.equals((float[])this.value, (float[])that.value) : false;
-        }
-        else {
-            // otherwise, the api limits the remaining possible value types to
-            // immutable (String or boxed primitive) types
-            return this.value.equals(that.value);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        int valueHash;
-        if (this.value instanceof byte[]) {
-            valueHash = Arrays.hashCode((byte[])this.value);
-        }
-        else if (this.value instanceof short[]) {
-            valueHash = Arrays.hashCode((short[])this.value);
-        }
-        else if (this.value instanceof int[]) {
-            valueHash = Arrays.hashCode((int[])this.value);
-        }
-        else if (this.value instanceof float[]) {
-            valueHash = Arrays.hashCode((float[])this.value);
-        }
-        else {
-            // otherwise, the api limits the remaining possible value types to
-            // immutable (String or boxed primitive) types
-            valueHash = value.hashCode();
-        }
-
-        return 31 * tag + valueHash;
-    }
-
-    /** Creates and returns a shallow copy of the list of tag/values. */
-    public SAMBinaryTagAndValue copy() {
-        final SAMBinaryTagAndValue retval = new SAMBinaryTagAndValue(this.tag, this.value);
-        if (next != null) {
-            retval.next = next.copy();
-        }
-        return retval;
-    }
-
-    /** Creates and returns a deep copy of the list of tag/values. */
-    public SAMBinaryTagAndValue deepCopy() {
-        final SAMBinaryTagAndValue retval = new SAMBinaryTagAndValue(this.tag, cloneValue());
-        if (next != null) {
-            retval.next = next.deepCopy();
-        }
-        return retval;
-    }
-
-    /* Create and return a clone of value object */
-    protected Object cloneValue() {
-        Object valueClone;
-
-        if (value instanceof byte[]) {
-            valueClone = ((byte[]) value).clone();
-        }
-        else if (value instanceof short[]) {
-            valueClone = ((short[]) value).clone();
-        }
-        else if (value instanceof int[]) {
-            valueClone = ((int[]) value).clone();
-        }
-        else if (value instanceof float[]) {
-            valueClone = ((float[]) value).clone();
-        }
-        else {
-            // otherwise, the api limits the remaining possible value types to
-            // immutable (String or boxed primitive) types
-            valueClone = value;
-        }
-        return valueClone;
-    }
-
-    // The methods below are for implementing a light-weight, single-direction linked list
-
-    public SAMBinaryTagAndValue getNext() { return this.next; }
-
-    /** Inserts at item into the ordered list of attributes and returns the head of the list/sub-list */
-    public SAMBinaryTagAndValue insert(final SAMBinaryTagAndValue attr) {
-        if (attr == null) return this;
-        if (attr.next != null) throw new IllegalStateException("Can only insert single tag/value combinations.");
-
-        if (attr.tag < this.tag) {
-            // attr joins the list ahead of this element
-            attr.next = this;
-            return attr;
-        }
-        else if (this.tag == attr.tag) {
-            // attr replaces this in the list
-            attr.next = this.next;
-            return attr;
-        }
-        else if (this.next == null) {
-            // attr gets stuck on the end
-            this.next = attr;
-            return this;
-        }
-        else {
-            // attr gets inserted somewhere in the tail
-            this.next = this.next.insert(attr);
-            return this;
-        }
-    }
-
-    /** Removes a tag from the list and returns the new head of the list/sub-list. */
-    public SAMBinaryTagAndValue remove(final short tag) {
-        if (this.tag == tag) return this.next;
-        else {
-            if (this.next != null) this.next = this.next.remove(tag);
-            return this;
-        }
-    }
-
-    /** Returns the SAMBinaryTagAndValue that contains the required tag, or null if not contained. */
-    public SAMBinaryTagAndValue find(final short tag) {
-        if (this.tag == tag) return this;
-        else if (this.tag > tag || this.next == null) return null;
-        else return this.next.find(tag); 
-    }
-
-    public boolean isUnsignedArray() {
-        return false;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMException.java b/src/main/java/htsjdk/samtools/SAMException.java
deleted file mode 100644
index add0745..0000000
--- a/src/main/java/htsjdk/samtools/SAMException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SAMException extends RuntimeException {
-    public SAMException() {
-    }
-
-    public SAMException(final String s) {
-        super(s);
-    }
-
-    public SAMException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public SAMException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileHeader.java b/src/main/java/htsjdk/samtools/SAMFileHeader.java
deleted file mode 100644
index 47543c2..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileHeader.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.StringLineReader;
-
-import java.io.StringWriter;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Header information from a SAM or BAM file.
- */
-public class SAMFileHeader extends AbstractSAMHeaderRecord
-{
-    public static final String VERSION_TAG = "VN";
-    public static final String SORT_ORDER_TAG = "SO";
-    public static final String GROUP_ORDER_TAG = "GO";
-    public static final String CURRENT_VERSION = "1.5";
-    public static final Set<String> ACCEPTABLE_VERSIONS =
-            new HashSet<String>(Arrays.asList("1.0", "1.3", "1.4", "1.5"));
-
-    /**
-     * These tags are of known type, so don't need a type field in the text representation.
-     */
-    public static final Set<String> STANDARD_TAGS =
-            new HashSet<String>(Arrays.asList(VERSION_TAG, SORT_ORDER_TAG, GROUP_ORDER_TAG));
-
-    Set<String> getStandardTags() {
-        return STANDARD_TAGS;
-    }
-
-    /**
-     * Ways in which a SAM or BAM may be sorted.
-     */
-    public enum SortOrder {
-
-        unsorted(null),
-        queryname(SAMRecordQueryNameComparator.class),
-        coordinate(SAMRecordCoordinateComparator.class),
-        duplicate(SAMRecordDuplicateComparator.class); // NB: this is not in the SAM spec!
-
-        private final Class<? extends SAMRecordComparator> comparator;
-
-        SortOrder(final Class<? extends SAMRecordComparator> comparatorClass) {
-            this.comparator = comparatorClass;
-        }
-
-        /**
-         * @return Comparator class to sort in the specified order, or null if unsorted.
-         */
-        public Class<? extends SAMRecordComparator> getComparator() {
-            return comparator;
-        }
-
-        /**
-         * @return Comparator to sort in the specified order, or null if unsorted.
-         */
-        public SAMRecordComparator getComparatorInstance() {
-            if (comparator != null) {
-                try {
-                    final Constructor<? extends SAMRecordComparator> ctor = comparator.getConstructor();
-                    return ctor.newInstance();
-                }
-                catch (Exception e) {
-                    throw new IllegalStateException("Could not instantiate a comparator for sort order: " +
-                            this.name(), e);
-                }
-            }
-            return null;
-        }
-    }
-
-    public enum GroupOrder {
-        none, query, reference
-    }
-
-    private List<SAMReadGroupRecord> mReadGroups =
-        new ArrayList<SAMReadGroupRecord>();
-    private List<SAMProgramRecord> mProgramRecords = new ArrayList<SAMProgramRecord>();
-    private final Map<String, SAMReadGroupRecord> mReadGroupMap =
-        new HashMap<String, SAMReadGroupRecord>();
-    private final Map<String, SAMProgramRecord> mProgramRecordMap = new HashMap<String, SAMProgramRecord>();
-    private SAMSequenceDictionary mSequenceDictionary = new SAMSequenceDictionary();
-    final private List<String> mComments = new ArrayList<String>();
-    private String textHeader;
-    private final List<SAMValidationError> mValidationErrors = new ArrayList<SAMValidationError>();
-
-    public SAMFileHeader() {
-        setAttribute(VERSION_TAG, CURRENT_VERSION);
-    }
-
-    /** Constructor that initializes the sequence dictionary with the provided one. */
-    public SAMFileHeader(final SAMSequenceDictionary dict) {
-        this();
-        setSequenceDictionary(dict);
-    }
-
-    public String getVersion() {
-        return (String) getAttribute("VN");
-    }
-
-    public String getCreator() {
-        return (String) getAttribute("CR");
-    }
-
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return mSequenceDictionary;
-    }
-
-    public List<SAMReadGroupRecord> getReadGroups() {
-        return Collections.unmodifiableList(mReadGroups);
-    }
-
-    /**
-     * Look up sequence record by name.
-     */
-    public SAMSequenceRecord getSequence(final String name) {
-        return mSequenceDictionary.getSequence(name);
-    }
-
-    /**
-     * Look up read group record by name.
-     */
-    public SAMReadGroupRecord getReadGroup(final String name) {
-        return mReadGroupMap.get(name);
-    }
-
-    /**
-     * Replace entire sequence dictionary.  The given sequence dictionary is stored, not copied.
-     */
-    public void setSequenceDictionary(final SAMSequenceDictionary sequenceDictionary) {
-        mSequenceDictionary = sequenceDictionary;
-    }
-
-    public void addSequence(final SAMSequenceRecord sequenceRecord) {
-        mSequenceDictionary.addSequence(sequenceRecord);
-    }
-
-    /**
-     * Look up a sequence record by index.  First sequence in the header is the 0th.
-     * @return The corresponding sequence record, or null if the index is out of range.
-     */
-    public SAMSequenceRecord getSequence(final int sequenceIndex) {
-        return mSequenceDictionary.getSequence(sequenceIndex);
-    }
-
-    /**
-     *
-     * @return Sequence index for the given sequence name, or -1 if the name is not found.
-     */
-    public int getSequenceIndex(final String sequenceName) {
-        return mSequenceDictionary.getSequenceIndex(sequenceName);
-    }
-
-    /**
-     * Replace entire list of read groups.  The given list is stored, not copied.
-     */
-    public void setReadGroups(final List<SAMReadGroupRecord> readGroups) {
-        mReadGroups = readGroups;
-        mReadGroupMap.clear();
-        for (final SAMReadGroupRecord readGroupRecord : readGroups) {
-            mReadGroupMap.put(readGroupRecord.getReadGroupId(), readGroupRecord);
-        }
-    }
-
-    public void addReadGroup(final SAMReadGroupRecord readGroup) {
-        if (mReadGroupMap.containsKey(readGroup.getReadGroupId())) {
-            throw new IllegalArgumentException("Read group with group id " +
-                readGroup.getReadGroupId() + " already exists in SAMFileHeader!");
-        }
-        mReadGroups.add(readGroup);
-        mReadGroupMap.put(readGroup.getReadGroupId(), readGroup);
-    }
-
-    public List<SAMProgramRecord> getProgramRecords() {
-        return Collections.unmodifiableList(mProgramRecords);
-    }
-
-    public void addProgramRecord(final SAMProgramRecord programRecord) {
-        if (mProgramRecordMap.containsKey(programRecord.getProgramGroupId())) {
-            throw new IllegalArgumentException("Program record with group id " +
-                programRecord.getProgramGroupId() + " already exists in SAMFileHeader!");
-        }
-        this.mProgramRecords.add(programRecord);
-        this.mProgramRecordMap.put(programRecord.getProgramGroupId(), programRecord);
-    }
-
-    public SAMProgramRecord getProgramRecord(final String pgId) {
-        return this.mProgramRecordMap.get(pgId);
-    }
-
-    /**
-     * Replace entire list of program records
-     * @param programRecords This list is used directly, not copied.
-     */
-    public void setProgramRecords(final List<SAMProgramRecord> programRecords) {
-        this.mProgramRecords = programRecords;
-        this.mProgramRecordMap.clear();
-        for (final SAMProgramRecord programRecord : this.mProgramRecords) {
-            this.mProgramRecordMap.put(programRecord.getProgramGroupId(), programRecord);
-        }
-    }
-
-    /**
-     * @return a new SAMProgramRecord with an ID guaranteed to not exist in this SAMFileHeader
-     */
-    public SAMProgramRecord createProgramRecord() {
-        for (int i = 0; i < Integer.MAX_VALUE; ++i) {
-            final String s = Integer.toString(i);
-            if (!this.mProgramRecordMap.containsKey(s)) {
-                final SAMProgramRecord ret = new SAMProgramRecord(s);
-                addProgramRecord(ret);
-                return ret;
-            }
-        }
-        throw new IllegalStateException("Surprising number of SAMProgramRecords");
-    }
-
-    public SortOrder getSortOrder() {
-        final String so = getAttribute("SO");
-        if (so == null || so.equals("unknown")) {
-            return SortOrder.unsorted;
-        }
-        return SortOrder.valueOf((String) so);
-    }
-
-    public void setSortOrder(final SortOrder so) {
-        setAttribute("SO", so.name());
-    }
-
-    public GroupOrder getGroupOrder() {
-        if (getAttribute("GO") == null) {
-            return GroupOrder.none;
-        }
-        return GroupOrder.valueOf((String)getAttribute("GO"));
-    }
-
-    public void setGroupOrder(final GroupOrder go) {
-        setAttribute("GO", go.name());
-    }
-
-    /**
-     * If this SAMHeader was read from a file, this property contains the header
-     * as it appeared in the file, otherwise it is null.  Note that this is not a toString()
-     * operation.  Changes to the SAMFileHeader object after reading from the file are not reflected in this value.
-     *
-     * In addition this value is only set if one of the following is true:
-     *   - The size of the header is < 1,048,576 characters (1MB ascii, 2MB unicode)
-     *   - There are either validation or parsing errors associated with the header
-     *
-     * Invalid header lines may appear in value but are not stored in the SAMFileHeader object.
-     */
-    public String getTextHeader() {
-        return textHeader;
-    }
-
-    public void setTextHeader(final String textHeader) {
-        this.textHeader = textHeader;
-    }
-
-    public List<String> getComments() {
-        return Collections.unmodifiableList(mComments);
-    }
-
-    public void addComment(String comment) {
-        if (!comment.startsWith(SAMTextHeaderCodec.COMMENT_PREFIX)) {
-            comment = SAMTextHeaderCodec.COMMENT_PREFIX + comment;
-        }
-        mComments.add(comment);
-    }
-
-
-    /**
-     * Replace existing comments with the contents of the given collection.
-     */
-    public void setComments(final Collection<String> comments) {
-        mComments.clear();
-        for (final String comment : comments) {
-            addComment(comment);
-        }
-    }
-
-    public List<SAMValidationError> getValidationErrors() {
-        return Collections.unmodifiableList(mValidationErrors);
-    }
-
-    public void addValidationError(final SAMValidationError error) {
-        mValidationErrors.add(error);
-    }
-
-    /**
-     * Replace list of validation errors with the elements of the given list.
-     */
-    public void setValidationErrors(final Collection<SAMValidationError> errors) {
-        mValidationErrors.clear();
-        mValidationErrors.addAll(errors);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final SAMFileHeader that = (SAMFileHeader) o;
-
-        if (!attributesEqual(that)) return false;
-        if (mProgramRecords != null ? !mProgramRecords.equals(that.mProgramRecords) : that.mProgramRecords != null)
-            return false;
-        if (mReadGroups != null ? !mReadGroups.equals(that.mReadGroups) : that.mReadGroups != null) return false;
-        if (mSequenceDictionary != null ? !mSequenceDictionary.equals(that.mSequenceDictionary) : that.mSequenceDictionary != null)
-            return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = attributesHashCode();
-        result = 31 * result + (mSequenceDictionary != null ? mSequenceDictionary.hashCode() : 0);
-        result = 31 * result + (mReadGroups != null ? mReadGroups.hashCode() : 0);
-        result = 31 * result + (mProgramRecords != null ? mProgramRecords.hashCode() : 0);
-        return result;
-    }
-
-    public final SAMFileHeader clone() {
-        final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-        codec.setValidationStringency(ValidationStringency.SILENT);
-        final StringWriter stringWriter = new StringWriter();
-        codec.encode(stringWriter, this);
-        return codec.decode(new StringLineReader(stringWriter.toString()), "SAMFileHeader.clone");
-    }
-
-    /** Little class to generate program group IDs */
-    public static class PgIdGenerator {
-        private int recordCounter;
-
-        private final Set<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
-        public PgIdGenerator(final SAMFileHeader header) {
-            for (final SAMProgramRecord pgRecord : header.getProgramRecords()) {
-                idsThatAreAlreadyTaken.add(pgRecord.getProgramGroupId());
-            }
-            recordCounter = idsThatAreAlreadyTaken.size();
-        }
-
-        public String getNonCollidingId(final String recordId) {
-            if (!idsThatAreAlreadyTaken.contains(recordId)) {
-                // don't remap 1st record. If there are more records
-                // with this id, they will be remapped in the 'else'.
-                idsThatAreAlreadyTaken.add(recordId);
-                ++recordCounter;
-                return recordId;
-            } else {
-                String newId;
-                // Below we tack on one of roughly 1.7 million possible 4 digit base36 at random. We do this because
-                // our old process of just counting from 0 upward and adding that to the previous id led to 1000s of
-                // calls idsThatAreAlreadyTaken.contains() just to resolve 1 collision when merging 1000s of similarly
-                // processed bams.
-                while (idsThatAreAlreadyTaken.contains(newId = recordId + "." + SamFileHeaderMerger.positiveFourDigitBase36Str(recordCounter++)))
-                    ;
-
-                idsThatAreAlreadyTaken.add(newId);
-                return newId;
-            }
-
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileSource.java b/src/main/java/htsjdk/samtools/SAMFileSource.java
deleted file mode 100644
index 3130a73..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileSource.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Represents the origin of a SAM record.
- *
- * @author mhanna
- * @version 0.1
- */
-public class SAMFileSource {
-    /**
-     * The reader originating this SAM record.
-     */
-    private SamReader mReader;
-
-    /**
-     * The point on disk from which a record originates.
-     */
-    private SAMFileSpan mFilePointer;
-
-    /**
-     * Create a new SAMFileSource with the given reader and file pointer.
-     * @param reader reader.
-     * @param filePointer File pointer.
-     */
-    public SAMFileSource(final SamReader reader, final SAMFileSpan filePointer) {
-        this.mReader = reader;
-        this.mFilePointer = filePointer;
-    }
-
-    /**
-     * Retrieves the reader from which this read was initially retrieved.
-     * @return The reader.
-     */
-    public SamReader getReader() {
-        return mReader;
-    }
-
-    /**
-     * A pointer to the region on disk from which the read originated.
-     * @return A pointer within the file.
-     */
-    public SAMFileSpan getFilePointer() {
-        return mFilePointer;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileSpan.java b/src/main/java/htsjdk/samtools/SAMFileSpan.java
deleted file mode 100644
index 4122b24..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileSpan.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * A interface representing a collection of (possibly) discontinuous segments in the
- * BAM file, possibly representing the results of an index query.
- */
-public interface SAMFileSpan extends Cloneable {
-    /**
-     * Gets a pointer over the data immediately following this span.
-     * @return The a pointer to data immediately following this span.
-     */
-    public SAMFileSpan getContentsFollowing();
-
-    /**
-     * Remove all pointers in this file span before the given file span starts.
-     * @param fileSpan The filespan before which to eliminate.
-     * @return The portion of the chunk list after the given chunk.
-     */
-    public SAMFileSpan removeContentsBefore(final SAMFileSpan fileSpan);
-
-    /**
-     * Does this file span point to any data, or is it completely empty?
-     * @return True if the file span is empty, false otherwise.
-     */
-    public boolean isEmpty();
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileWriter.java b/src/main/java/htsjdk/samtools/SAMFileWriter.java
deleted file mode 100644
index fe99591..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileWriter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Closeable;
-
-import htsjdk.samtools.util.ProgressLoggerInterface;
-
-/**
- * Interface for SAMText and BAM file writers.  Clients need not care which they write to,
- * once the object is constructed.
- */
-public interface SAMFileWriter extends Closeable {
-
-	void addAlignment(SAMRecord alignment);
-
-    SAMFileHeader getFileHeader();
-
-	/**
-	 * Sets a ProgressLogger on this writer. This is useful when pulling, for instance, from a
-	 * SortingCollection.
-	 */
-	void setProgressLogger(final ProgressLoggerInterface progress);
-
-    /**
-     * Must be called to flush or file will likely be defective. 
-     */
-    void close();
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileWriterFactory.java b/src/main/java/htsjdk/samtools/SAMFileWriterFactory.java
deleted file mode 100644
index 61f1c9c..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileWriterFactory.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.Md5CalculatingOutputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.zip.DeflaterFactory;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.Deflater;
-
-/**
- * Create a writer for writing SAM, BAM, or CRAM files.
- */
-public class SAMFileWriterFactory implements Cloneable {
-    private final static Log log = Log.getInstance(SAMFileWriterFactory.class);
-    private static boolean defaultCreateIndexWhileWriting = Defaults.CREATE_INDEX;
-    private boolean createIndex = defaultCreateIndexWhileWriting;
-    private static boolean defaultCreateMd5File = Defaults.CREATE_MD5;
-    private boolean createMd5File = defaultCreateMd5File;
-    private boolean useAsyncIo = Defaults.USE_ASYNC_IO_WRITE_FOR_SAMTOOLS;
-    private int asyncOutputBufferSize = AsyncSAMFileWriter.DEFAULT_QUEUE_SIZE;
-    private int bufferSize = Defaults.BUFFER_SIZE;
-    private File tmpDir;
-    /** compression level 0: min 9:max */
-    private int compressionLevel = BlockCompressedOutputStream.getDefaultCompressionLevel();
-    private SamFlagField samFlagFieldOutput = SamFlagField.NONE;
-    private Integer maxRecordsInRam = null;
-    private DeflaterFactory deflaterFactory = BlockCompressedOutputStream.getDefaultDeflaterFactory();
-
-    /** simple constructor */
-    public SAMFileWriterFactory() {
-    }
-    
-    /** copy constructor */
-    public SAMFileWriterFactory( final SAMFileWriterFactory other) {
-        if( other == null ) throw new IllegalArgumentException("SAMFileWriterFactory(null)");
-        this.createIndex = other.createIndex;
-        this.createMd5File = other.createMd5File;
-        this.useAsyncIo = other.useAsyncIo;
-        this.asyncOutputBufferSize = other.asyncOutputBufferSize;
-        this.bufferSize = other.bufferSize;
-        this.tmpDir = other.tmpDir;
-        this.compressionLevel = other.compressionLevel;
-        this.maxRecordsInRam = other.maxRecordsInRam;
-    }
-    
-    @Override
-    public SAMFileWriterFactory clone() {
-        return new SAMFileWriterFactory(this);
-    }
-
-    /**
-     * Sets the default for whether to create md5Files for BAM files this factory.
-     */
-    public static void setDefaultCreateMd5File(final boolean createMd5File) {
-        defaultCreateMd5File = createMd5File;
-    }
-
-    /**
-     * Sets whether to create md5Files for BAMs from this factory.
-     */
-    public SAMFileWriterFactory setCreateMd5File(final boolean createMd5File) {
-        this.createMd5File = createMd5File;
-        return this;
-    }
-
-    /**
-     * Set the deflater factory used by BAM writers created by this writer factory. Must not be null.
-     * If this method is not called, the default  {@link DeflaterFactory} is used which creates the default JDK {@link Deflater}.
-     * This method returns the SAMFileWriterFactory itself. */
-    public SAMFileWriterFactory setDeflaterFactory(final DeflaterFactory deflaterFactory){
-        if (deflaterFactory == null){
-            throw new IllegalArgumentException("null deflater factory");
-        }
-        this.deflaterFactory = deflaterFactory;
-        return this;
-    }
-
-    /** set compression level 0!none 9: max */
-    public SAMFileWriterFactory setCompressionLevel(final int compressionLevel) {
-        this.compressionLevel = Math.min(9, Math.max(0, compressionLevel));
-        return this;
-    }
-    
-    public int getCompressionLevel() {
-        return compressionLevel;
-    }
-    
-    /**
-     * Sets the default for subsequent SAMFileWriterFactories
-     * that do not specify whether to create an index.
-     * If a BAM (not SAM) file is created, the setting is true, and the file header specifies coordinate order,
-     * then a BAM index file will be written along with the BAM file.
-     *
-     * @param setting whether to attempt to create a BAM index while creating the BAM file
-     */
-    public static void setDefaultCreateIndexWhileWriting(final boolean setting) {
-        defaultCreateIndexWhileWriting = setting;
-    }
-
-    /**
-     * Convenience method allowing newSAMFileWriterFactory().setCreateIndex(true);
-     * Equivalent to SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(true); newSAMFileWriterFactory();
-     * If a BAM or CRAM (not SAM) file is created, the setting is true, and the file header specifies coordinate order,
-     * then a BAM index file will be written along with the BAM file.
-     *
-     * @param setting whether to attempt to create a BAM index while creating the BAM file.
-     * @return this factory object
-     */
-    public SAMFileWriterFactory setCreateIndex(final boolean setting) {
-        this.createIndex = setting;
-        return this;
-    }
-
-    /**
-     * Before creating a writer that is not presorted, this method may be called in order to override
-     * the default number of SAMRecords stored in RAM before spilling to disk
-     * (c.f. SAMFileWriterImpl.MAX_RECORDS_IN_RAM).  When writing very large sorted SAM files, you may need
-     * call this method in order to avoid running out of file handles.  The RAM available to the JVM may need
-     * to be increased in order to hold the specified number of records in RAM.  This value affects the number
-     * of records stored in subsequent calls to one of the make...() methods.
-     *
-     * @param maxRecordsInRam Number of records to store in RAM before spilling to temporary file when
-     *                        creating a sorted SAM or BAM file.
-     */
-    public SAMFileWriterFactory setMaxRecordsInRam(final int maxRecordsInRam) {
-        this.maxRecordsInRam = maxRecordsInRam;
-        return this;
-    }
-
-    /**
-     * Turn on or off the use of asynchronous IO for writing output SAM and BAM files.  If true then
-     * each SAMFileWriter creates a dedicated thread which is used for compression and IO activities.
-     */
-    public SAMFileWriterFactory setUseAsyncIo(final boolean useAsyncIo) {
-        this.useAsyncIo = useAsyncIo;
-        return this;
-    }
-
-    /**
-     * If and only if using asynchronous IO then sets the maximum number of records that can be buffered per
-     * SAMFileWriter before producers will block when trying to write another SAMRecord.
-     */
-    public SAMFileWriterFactory setAsyncOutputBufferSize(final int asyncOutputBufferSize) {
-        this.asyncOutputBufferSize = asyncOutputBufferSize;
-        return this;
-    }
-
-    /**
-     * Controls size of write buffer.
-     * Default value: [[htsjdk.samtools.Defaults#BUFFER_SIZE]]
-     */
-    public SAMFileWriterFactory setBufferSize(final int bufferSize) {
-        this.bufferSize = bufferSize;
-        return this;
-    }
-
-    /**
-     * Set the temporary directory to use when sort data.
-     *
-     * @param tmpDir Path to the temporary directory
-     */
-    public SAMFileWriterFactory setTempDirectory(final File tmpDir) {
-        this.tmpDir = tmpDir;
-        return this;
-    }
-
-    /**
-     * Set the flag output format only when writing text.
-     * Default value: [[htsjdk.samtools.SAMTextWriter.samFlagFieldOutput.DECIMAL]]
-     */
-    public SAMFileWriterFactory setSamFlagFieldOutput(final SamFlagField samFlagFieldOutput) {
-        if (samFlagFieldOutput == null) throw new IllegalArgumentException("Sam flag field was null");
-        this.samFlagFieldOutput = samFlagFieldOutput;
-        return this;
-    }
-
-    /**
-     * Create a BAMFileWriter that is ready to receive SAMRecords.  Uses default compression level.
-     *
-     * @param header     entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted  if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.
-     */
-    public SAMFileWriter makeBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
-        return makeBAMWriter(header, presorted, outputFile, this.getCompressionLevel());
-    }
-
-    /**
-     * Create a BAMFileWriter that is ready to receive SAMRecords.
-     *
-     * @param header           entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted        if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile       where to write the output.
-     * @param compressionLevel Override default compression level with the given value, between 0 (fastest) and 9 (smallest).
-     */
-    public SAMFileWriter makeBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile,
-                                       final int compressionLevel) {
-        try {
-            final boolean createMd5File = this.createMd5File && IOUtil.isRegularPath(outputFile);
-            if (this.createMd5File && !createMd5File) {
-                log.warn("Cannot create MD5 file for BAM because output file is not a regular file: " + outputFile.getAbsolutePath());
-            }
-            OutputStream os = IOUtil.maybeBufferOutputStream(new FileOutputStream(outputFile, false), bufferSize);
-            if (createMd5File) os = new Md5CalculatingOutputStream(os, new File(outputFile.getAbsolutePath() + ".md5"));
-            final BAMFileWriter ret = new BAMFileWriter(os, outputFile, compressionLevel, deflaterFactory);
-            final boolean createIndex = this.createIndex && IOUtil.isRegularPath(outputFile);
-            if (this.createIndex && !createIndex) {
-                log.warn("Cannot create index for BAM because output file is not a regular file: " + outputFile.getAbsolutePath());
-            }
-            if (this.tmpDir != null) ret.setTempDirectory(this.tmpDir);
-            initializeBAMWriter(ret, header, presorted, createIndex);
-
-            if (this.useAsyncIo) return new AsyncSAMFileWriter(ret, this.asyncOutputBufferSize);
-            else return ret;
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException("Error opening file: " + outputFile.getAbsolutePath());
-        }
-    }
-
-    private void initializeBAMWriter(final BAMFileWriter writer, final SAMFileHeader header, final boolean presorted, final boolean createIndex) {
-        writer.setSortOrder(header.getSortOrder(), presorted);
-        if (maxRecordsInRam != null) {
-            writer.setMaxRecordsInRam(maxRecordsInRam);
-        }
-        writer.setHeader(header);
-        if (createIndex && writer.getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)) {
-            writer.enableBamIndexConstruction();
-        }
-    }
-
-    /**
-     * Create a SAMTextWriter that is ready to receive SAMRecords.
-     *
-     * @param header     entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted  if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.
-     */
-    public SAMFileWriter makeSAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
-        /**
-         * Use the value specified from Defaults.SAM_FLAG_FIELD_FORMAT when samFlagFieldOutput value has not been set.  This should
-         * be SamFlagField.DECIMAL when the user has not set Defaults.SAM_FLAG_FIELD_FORMAT.
-         */
-        if (samFlagFieldOutput == SamFlagField.NONE) {
-            samFlagFieldOutput = Defaults.SAM_FLAG_FIELD_FORMAT;
-        }
-        try {
-            final SAMTextWriter ret = this.createMd5File
-                    ? new SAMTextWriter(new Md5CalculatingOutputStream(new FileOutputStream(outputFile, false),
-                    new File(outputFile.getAbsolutePath() + ".md5")), samFlagFieldOutput)
-                    : new SAMTextWriter(outputFile, samFlagFieldOutput);
-            ret.setSortOrder(header.getSortOrder(), presorted);
-            if (maxRecordsInRam != null) {
-                ret.setMaxRecordsInRam(maxRecordsInRam);
-            }
-            ret.setHeader(header);
-
-            if (this.useAsyncIo) return new AsyncSAMFileWriter(ret, this.asyncOutputBufferSize);
-            else return ret;
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException("Error opening file: " + outputFile.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Create a SAMTextWriter for writing to a stream that is ready to receive SAMRecords.
-     * This method does not support the creation of an MD5 file
-     *
-     * @param header    entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param stream    the stream to write records to.  Note that this method does not buffer the stream, so the
-     *                  caller must buffer if desired.  Note that PrintStream is buffered.
-     */
-    public SAMFileWriter makeSAMWriter(final SAMFileHeader header, final boolean presorted, final OutputStream stream) {
-        /**
-         * Use the value specified from Defaults.SAM_FLAG_FIELD_FORMAT when samFlagFieldOutput value has not been set.  This should
-         * be samFlagFieldOutput.DECIMAL when the user has not set Defaults.SAM_FLAG_FIELD_FORMAT.
-         */
-        if (samFlagFieldOutput == SamFlagField.NONE) {
-            samFlagFieldOutput = Defaults.SAM_FLAG_FIELD_FORMAT;
-        }
-        return initWriter(header, presorted, false, new SAMTextWriter(stream, samFlagFieldOutput));
-    }
-
-    /**
-     * Create a BAMFileWriter for writing to a stream that is ready to receive SAMRecords.
-     * This method does not support the creation of an MD5 file
-     *
-     * @param header    entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param stream    the stream to write records to.  Note that this method does not buffer the stream, so the
-     *                  caller must buffer if desired.  Note that PrintStream is buffered.
-     */
-
-    public SAMFileWriter makeBAMWriter(final SAMFileHeader header, final boolean presorted, final OutputStream stream) {
-        return initWriter(header, presorted, true, new BAMFileWriter(stream, null, this.getCompressionLevel(), this.deflaterFactory));
-    }
-
-    /**
-     * Initialize SAMTextWriter or a BAMFileWriter and possibly wrap in AsyncSAMFileWriter
-     *
-     * @param header    entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param binary    do we want to generate a BAM or a SAM
-     * @param writer    SAM or BAM writer to initialize and maybe wrap.
-     */
-
-    private SAMFileWriter initWriter(final SAMFileHeader header, final boolean presorted, final boolean binary,
-                                     final SAMFileWriterImpl writer) {
-        writer.setSortOrder(header.getSortOrder(), presorted);
-        if (maxRecordsInRam != null) {
-            writer.setMaxRecordsInRam(maxRecordsInRam);
-        }
-        writer.setHeader(header);
-
-        if (this.useAsyncIo) return new AsyncSAMFileWriter(writer, this.asyncOutputBufferSize);
-        else return writer;
-    }
-
-    /**
-     * Create either a SAM or a BAM writer based on examination of the outputFile extension.
-     *
-     * @param header     entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted  presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.  Must end with .sam or .bam.
-     * @return SAM or BAM writer based on file extension of outputFile.
-     */
-    public SAMFileWriter makeSAMOrBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
-        final String filename = outputFile.getName();
-        if (filename.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
-            return makeBAMWriter(header, presorted, outputFile);
-        }
-        if (filename.endsWith(".sam")) {
-            return makeSAMWriter(header, presorted, outputFile);
-        }
-        return makeBAMWriter(header, presorted, outputFile);
-    }
-
-    /**
-     *
-     * Create a SAM, BAM or CRAM writer based on examination of the outputFile extension.
-     *
-     * @param header header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.  Must end with .sam, .bam or .cram.
-     * @param referenceFasta reference sequence file
-     * @return SAMFileWriter appropriate for the file type specified in outputFile
-     *
-     */
-    public SAMFileWriter makeWriter(final SAMFileHeader header, final boolean presorted, final File outputFile, final File referenceFasta) {
-        if (outputFile.getName().endsWith(SamReader.Type.CRAM_TYPE.fileExtension())) {
-            return makeCRAMWriter(header, presorted, outputFile, referenceFasta);
-        }
-        else {
-            return makeSAMOrBAMWriter(header, presorted, outputFile);
-        }
-    }
-
-    /**
-     * Create a CRAMFileWriter on an output stream. Requires the input to be presorted to match the sort order defined
-     * by the input header.
-     *
-     * Note: does not honor factory settings for CREATE_MD5, CREATE_INDEX, USE_ASYNC_IO.
-     *
-     * @param header entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param stream where to write the output.
-     * @param referenceFasta reference sequence file
-     * @return CRAMFileWriter
-     */
-    public CRAMFileWriter makeCRAMWriter(final SAMFileHeader header, final OutputStream stream, final File referenceFasta) {
-        // create the CRAMFileWriter directly without propagating factory settings
-        final CRAMFileWriter writer = new CRAMFileWriter(stream, new ReferenceSource(referenceFasta), header, null);
-        setCRAMWriterDefaults(writer);
-        return writer;
-    }
-
-    /**
-     * Create a CRAMFileWriter on an output file. Requires input record to be presorted to match the
-     * sort order defined by the input header.
-     *
-     * Note: does not honor factory settings for USE_ASYNC_IO.
-     *
-     * @param header entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param outputFile where to write the output.  Must end with .sam, .bam or .cram.
-     * @param referenceFasta reference sequence file
-     * @return CRAMFileWriter
-     *
-     */
-    public CRAMFileWriter makeCRAMWriter(final SAMFileHeader header, final File outputFile, final File referenceFasta) {
-        return createCRAMWriterWithSettings(header, true, outputFile, referenceFasta);
-    }
-
-    /**
-     * Create a CRAMFileWriter on an output file.
-     *
-     * Note: does not honor factory setting for USE_ASYNC_IO.
-     *
-     * @param header entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted  if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.  Must end with .sam, .bam or .cram.
-     * @param referenceFasta reference sequence file
-     * @return CRAMFileWriter
-     *
-     */
-    public CRAMFileWriter makeCRAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile, final File referenceFasta) {
-        return createCRAMWriterWithSettings(header, presorted, outputFile, referenceFasta);
-    }
-
-    /**
-     * Create a CRAMFileWriter on an output file based on factory settings.
-     *
-     * Note: does not honor the factory setting for USE_ASYNC_IO.
-     *
-     * @param header entire header. Sort order is determined by the sortOrder property of this arg.
-     * @param presorted  if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
-     * @param outputFile where to write the output.  Must end with .sam, .bam or .cram.
-     * @param referenceFasta reference sequence file
-     * @return CRAMFileWriter
-     */
-    private CRAMFileWriter createCRAMWriterWithSettings(
-            final SAMFileHeader header,
-            final boolean presorted,
-            final File outputFile,
-            final File referenceFasta) {
-        OutputStream cramOS = null;
-        OutputStream indexOS = null ;
-
-        if (createIndex) {
-            if (!IOUtil.isRegularPath(outputFile)) {
-                log.warn("Cannot create index for CRAM because output file is not a regular file: " + outputFile.getAbsolutePath());
-            }
-            else {
-                try {
-                    final File indexFile = new File(outputFile.getAbsolutePath() + BAMIndex.BAMIndexSuffix) ;
-                    indexOS = new FileOutputStream(indexFile) ;
-                }
-                catch (final IOException ioe) {
-                    throw new RuntimeIOException("Error creating index file for: " + outputFile.getAbsolutePath()+ BAMIndex.BAMIndexSuffix);
-                }
-            }
-        }
-
-        try {
-            cramOS = IOUtil.maybeBufferOutputStream(new FileOutputStream(outputFile, false), bufferSize);
-        }
-        catch (final IOException ioe) {
-            throw new RuntimeIOException("Error creating CRAM file: " + outputFile.getAbsolutePath());
-        }
-
-        final CRAMFileWriter writer = new CRAMFileWriter(
-                createMd5File ? new Md5CalculatingOutputStream(cramOS, new File(outputFile.getAbsolutePath() + ".md5")) : cramOS,
-                indexOS,
-                presorted,
-                new ReferenceSource(referenceFasta),
-                header,
-                outputFile.getAbsolutePath());
-        setCRAMWriterDefaults(writer);
-
-        return writer;
-    }
-
-    // Set the default CRAM writer preservation parameters
-    private void setCRAMWriterDefaults(final CRAMFileWriter writer) {
-        writer.setPreserveReadNames(true);
-        writer.setCaptureAllTags(true);
-    }
-
-    @Override
-    public String toString() {
-        return "SAMFileWriterFactory [createIndex=" + createIndex + ", createMd5File=" + createMd5File + ", useAsyncIo="
-                + useAsyncIo + ", asyncOutputBufferSize=" + asyncOutputBufferSize + ", bufferSize=" + bufferSize
-                + ", tmpDir=" + tmpDir + ", compressionLevel=" + compressionLevel + ", maxRecordsInRam="
-                + maxRecordsInRam + "]";
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFileWriterImpl.java b/src/main/java/htsjdk/samtools/SAMFileWriterImpl.java
deleted file mode 100644
index 130ecea..0000000
--- a/src/main/java/htsjdk/samtools/SAMFileWriterImpl.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.ProgressLoggerInterface;
-import htsjdk.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.io.StringWriter;
-
-/**
- * Base class for implementing SAM writer with any underlying format.
- * Mostly this manages accumulation & sorting of SAMRecords when appropriate,
- * and produces the text version of the header, since that seems to be a popular item
- * in both text and binary file formats.
- */
-public abstract class SAMFileWriterImpl implements SAMFileWriter
-{
-    private static int DEAFULT_MAX_RECORDS_IN_RAM = 500000;      
-    private int maxRecordsInRam = DEAFULT_MAX_RECORDS_IN_RAM;
-    private SAMFileHeader.SortOrder sortOrder;
-    private SAMFileHeader header;
-    private SortingCollection<SAMRecord> alignmentSorter;
-    private File tmpDir = new File(System.getProperty("java.io.tmpdir"));
-    private ProgressLoggerInterface progressLogger = null;
-    private boolean isClosed = false;
-
-    // If true, records passed to addAlignment are already in the order specified by sortOrder
-    private boolean presorted;
-
-    // For validating presorted records.
-    private SAMSortOrderChecker sortOrderChecker;
-
-    /**
-     * When writing records that are not presorted, specify the number of records stored in RAM
-     * before spilling to disk.  This method sets the default value for all SamFileWriterImpl
-     * instances. Must be called before the constructor is called.
-     * @param maxRecordsInRam
-     */
-    public static void setDefaultMaxRecordsInRam(final int maxRecordsInRam) {
-        DEAFULT_MAX_RECORDS_IN_RAM = maxRecordsInRam;    
-    }
-    
-    /**
-     * When writing records that are not presorted, this number determines the 
-     * number of records stored in RAM before spilling to disk.
-     * @return DEAFULT_MAX_RECORDS_IN_RAM 
-     */
-    public static int getDefaultMaxRecordsInRam() {
-        return DEAFULT_MAX_RECORDS_IN_RAM;    
-    }
-
-    /**
-     * Sets the progress logger used by this implementation. Setting this lets this writer emit log
-     * messages as SAM records in a SortingCollection are being written to disk.
-     */
-    public void setProgressLogger(final ProgressLoggerInterface progress) {
-        this.progressLogger = progress;
-    }
-
-    /**
-     * Must be called before calling setHeader().  SortOrder value in the header passed
-     * to setHeader() is ignored.  If setSortOrder is not called, default is SortOrder.unsorted.
-     */
-    public void setSortOrder(final SAMFileHeader.SortOrder sortOrder, final boolean presorted) {
-        if (header != null) {
-            throw new IllegalStateException("Cannot call SAMFileWriterImpl.setSortOrder after setHeader for " +
-                    getFilename());
-        }
-        this.sortOrder = sortOrder;
-        this.presorted = presorted;
-    }
-
-    /**
-     * Must be called after calling setHeader().
-     */
-    protected SAMFileHeader.SortOrder getSortOrder() {
-        return this.sortOrder;
-    }
-
-    /**
-     * When writing records that are not presorted, specify the number of records stored in RAM
-     * before spilling to disk.  Must be called before setHeader().
-     * @param maxRecordsInRam
-     */
-    void setMaxRecordsInRam(final int maxRecordsInRam) {
-        if (this.header != null) {
-            throw new IllegalStateException("setMaxRecordsInRam must be called before setHeader()");
-        }
-        this.maxRecordsInRam = maxRecordsInRam;
-    }
-    
-    /**
-     * When writing records that are not presorted, specify the path of the temporary directory 
-     * for spilling to disk.  Must be called before setHeader().
-     * @param tmpDir path to the temporary directory
-     */
-    void setTempDirectory(final File tmpDir) {
-        if (tmpDir!=null) {
-            this.tmpDir = tmpDir;
-        }
-    }
-
-    /**
-     * Must be called before addAlignment. Header cannot be null.
-     */
-    public void setHeader(final SAMFileHeader header)
-    {
-        if (null == header) {
-            throw new IllegalArgumentException("A non-null SAMFileHeader is required for a writer");
-        }
-        this.header = header;
-        if (sortOrder == null) {
-             sortOrder = SAMFileHeader.SortOrder.unsorted;
-        }
-        header.setSortOrder(sortOrder);
-        final StringWriter headerTextBuffer = new StringWriter();
-        new SAMTextHeaderCodec().encode(headerTextBuffer, header);
-        final String headerText = headerTextBuffer.toString();
-
-        writeHeader(headerText);
-
-        if (presorted) {
-            if (sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
-                presorted = false;
-            } else {
-                sortOrderChecker = new SAMSortOrderChecker(sortOrder);
-            }
-        } else if (!sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
-            alignmentSorter = SortingCollection.newInstance(SAMRecord.class,
-                    new BAMRecordCodec(header), makeComparator(), maxRecordsInRam, tmpDir);
-        }
-    }
-
-    public SAMFileHeader getFileHeader() {
-        return header;
-    }
-
-    private SAMRecordComparator makeComparator() {
-        switch (sortOrder) {
-            case coordinate:
-                return new SAMRecordCoordinateComparator();
-            case queryname:
-                return new SAMRecordQueryNameComparator();
-            case duplicate:
-                return new SAMRecordDuplicateComparator();
-            case unsorted:
-                return null;
-        }
-        throw new IllegalStateException("sortOrder should not be null");
-    }
-
-    /**
-     * Add an alignment record to be emitted by the writer.
-     *
-     * @param alignment Must not be null. The record will be updated to use the header used by this writer, which will
-     *                  in turn cause any unresolved reference and mate reference indices to be resolved against the
-     *                  header's sequence dictionary.
-     * @throws IllegalArgumentException if the record's reference or mate reference indices cannot be
-     * resolved against the writer's header using the current reference and mate reference names
-     */
-    public void addAlignment(final SAMRecord alignment)
-    {
-        alignment.setHeaderStrict(header); // re-establish the record header and resolve reference indices
-        if (sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
-            writeAlignment(alignment);
-        } else if (presorted) {
-            assertPresorted(alignment);
-            writeAlignment(alignment);
-        } else {
-            alignmentSorter.add(alignment);
-        }
-    }
-
-    private void assertPresorted(final SAMRecord alignment) {
-        final SAMRecord prev = sortOrderChecker.getPreviousRecord();
-        if (!sortOrderChecker.isSorted(alignment)) {
-            throw new IllegalArgumentException("Alignments added out of order in SAMFileWriterImpl.addAlignment for " +
-                    getFilename() + ". Sort order is " + this.sortOrder + ". Offending records are at ["
-                    + sortOrderChecker.getSortKey(prev) + "] and ["
-                    + sortOrderChecker.getSortKey(alignment) + "]");
-        }
-    }
-
-    /**
-     * Must be called or else file will likely be defective.
-     */
-    public final void close()
-    {
-        if (!isClosed) {
-            if (alignmentSorter != null) {
-                for (final SAMRecord alignment : alignmentSorter) {
-                    writeAlignment(alignment);
-                    if (progressLogger != null) progressLogger.record(alignment);
-                }
-                alignmentSorter.cleanup();
-            }
-            finish();
-        }
-        isClosed = true;
-    }
-
-    /**
-     * Writes the record to disk.  Sort order has been taken care of by the time
-     * this method is called. The record must hava a non-null SAMFileHeader.
-     * @param alignment
-     */
-    abstract protected void writeAlignment(SAMRecord alignment);
-
-    /**
-     * Write the header to disk.  Header object is available via getHeader().
-     * @param textHeader for convenience if the implementation needs it.
-     */
-    abstract protected void writeHeader(String textHeader);
-
-    /**
-     * Do any required flushing here.
-     */
-    abstract protected void finish();
-
-    /**
-     * For producing error messages.
-     * @return Output filename, or null if there isn't one.
-     */
-    abstract protected String getFilename();
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFlag.java b/src/main/java/htsjdk/samtools/SAMFlag.java
deleted file mode 100644
index 11dc155..0000000
--- a/src/main/java/htsjdk/samtools/SAMFlag.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The MIT License
- *
- * Author: Pierre Lindenbaum PhD @yokofakun
- *  Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * SAM flags as enum, to be used in GUI, menu, etc...
- */
-public enum SAMFlag {
-    READ_PAIRED(                    0x1,    "Template having multiple segments in sequencing"),
-    PROPER_PAIR(                    0x2,    "Each segment properly aligned according to the aligner"),
-    READ_UNMAPPED(                  0x4,    "Segment unmapped"),
-    MATE_UNMAPPED(                  0x8,    "Next segment in the template unmapped"),
-    READ_REVERSE_STRAND(            0x10,   "SEQ being reverse complemented"),
-    MATE_REVERSE_STRAND(            0x20,   "SEQ of the next segment in the template being reverse complemented"),
-    FIRST_OF_PAIR(                  0x40,   "The first segment in the template"),
-    SECOND_OF_PAIR(                 0x80,   "The last segment in the template"),
-    NOT_PRIMARY_ALIGNMENT(          0x100,  "Secondary alignment"),
-    READ_FAILS_VENDOR_QUALITY_CHECK(0x200,  "Not passing quality controls"),
-    DUPLICATE_READ(                 0x400,  "PCR or optical duplicate"), 
-    SUPPLEMENTARY_ALIGNMENT(        0x800,  "Supplementary alignment")
-    ;
-
-    /* visible for the package, to be used by SAMRecord */
-    final int flag;
-    private final String description;
-
-    SAMFlag(int flag, String description) {
-        this.flag = flag;
-        this.description = description;
-    }
-
-    /** @return this flag as an int */
-    public int intValue() {
-        return flag;
-    }
-
-    /** @return a human label for this SAMFlag */
-    public String getLabel() {
-        return name().toLowerCase().replace('_', ' ');
-    }
-
-    /** @return a human description for this SAMFlag */
-    public String getDescription() {
-        return this.description;
-    }
-
-    /** @return the SAMFlag for the value 'flag' or null if it was not found */
-    public static SAMFlag valueOf(int flag) {
-        for (SAMFlag f : values()) {
-            if (flag == f.flag)
-                return f;
-        }
-        return null;
-    }
-
-    /** @return find SAMFlag the flag by name, or null if it was not found */
-    public static SAMFlag findByName(String flag)
-        {   
-        for (SAMFlag f : values()) {
-            if (f.name().equals(flag))
-                return f;
-        }
-        return null;
-    }
-
-    /** @returns true if the bit for is set for flag */
-    public boolean isSet(int flag) {
-        return (this.flag & flag) != 0;
-    }
-
-    /** @returns true if the bit for is not set for flag */
-    public boolean isUnset(int flag) {
-        return !isSet(flag);
-    }
-
-    /** @returns the java.util.Set of SAMFlag for 'flag' */
-    public static Set<SAMFlag> getFlags(int flag) {
-        Set<SAMFlag> set = new HashSet<SAMFlag>();
-        for (SAMFlag f : values()) {
-            if (f.isSet(flag))
-                set.add(f);
-        }
-        return set;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMFormatException.java b/src/main/java/htsjdk/samtools/SAMFormatException.java
deleted file mode 100644
index bce82bc..0000000
--- a/src/main/java/htsjdk/samtools/SAMFormatException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Thrown when a SAM file being read or decoded (text or binary) looks bad.
- */
-public class SAMFormatException extends SAMException {
-    public SAMFormatException() {
-    }
-
-    public SAMFormatException(final String s) {
-        super(s);
-    }
-
-    public SAMFormatException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public SAMFormatException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMHeaderRecordComparator.java b/src/main/java/htsjdk/samtools/SAMHeaderRecordComparator.java
deleted file mode 100644
index f48df4d..0000000
--- a/src/main/java/htsjdk/samtools/SAMHeaderRecordComparator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * 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:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * 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.
- */
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Provides ordering based on SAM header records' attribute values. Provide the list of attributes to use
- * in the comparison to the constructor. Null attribute values (i.e., those attributes not present in the
- * record) sort behind those that have values.
- */
-public class SAMHeaderRecordComparator<T extends AbstractSAMHeaderRecord> implements Comparator<T>, Serializable {
-	private static final long serialVersionUID = 1L;
-
-	private final String[] attributes;
-
-	public SAMHeaderRecordComparator(final String... attributes) {
-		this.attributes = attributes;
-	}
-
-	@Override
-	public int compare(final T left, final T right) {
-		for (final String attribute : attributes) {
-			final String leftValue = left.getAttribute(attribute);
-			final String rightValue = right.getAttribute(attribute);
-
-			if (leftValue == null) {
-				// Fastest comparison possible; two empty values are
-				// equivalent, so move along to the next attribute
-				if (rightValue == null) continue;
-
-					// Otherwise left < right, since right has a value
-				else return -1;
-			}
-
-			// left is not null; if right is, left > right
-			if (rightValue == null) return 1;
-
-			final int compare = leftValue.compareTo(rightValue);
-			if (compare != 0) return compare;
-		}
-
-		return 0;
-	}
-}
diff --git a/src/main/java/htsjdk/samtools/SAMLineParser.java b/src/main/java/htsjdk/samtools/SAMLineParser.java
deleted file mode 100644
index f73a67e..0000000
--- a/src/main/java/htsjdk/samtools/SAMLineParser.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * This class enables creation of a SAMRecord object from a String in SAM text format.  The SAM flag field will be inferred
- * for each record separately, unless the expected format is set using `withSamFlagField`.
- */
-public class SAMLineParser {
-
-    // From SAM specification
-    private static final int QNAME_COL = 0;
-    private static final int FLAG_COL = 1;
-    private static final int RNAME_COL = 2;
-    private static final int POS_COL = 3;
-    private static final int MAPQ_COL = 4;
-    private static final int CIGAR_COL = 5;
-    private static final int MRNM_COL = 6;
-    private static final int MPOS_COL = 7;
-    private static final int ISIZE_COL = 8;
-    private static final int SEQ_COL = 9;
-    private static final int QUAL_COL = 10;
-
-    private static final int NUM_REQUIRED_FIELDS = 11;
-
-    /**
-     * Allocate this once rather than for every line as a performance
-     * optimization. The size is arbitrary -- merely large enough to handle the
-     * maximum number of fields we might expect from a reasonable SAM file.
-     */
-    private final String[] mFields = new String[10000];
-
-    /**
-     * Add information about the origin (reader and position) to SAM records.
-     */
-    private final SamReader mParentReader;
-    private final SAMRecordFactory samRecordFactory;
-    private final ValidationStringency validationStringency;
-    private final SAMFileHeader mFileHeader;
-    private final File mFile;
-    private Optional<SamFlagField> samFlagField = Optional.empty();
-
-    private final TextTagCodec tagCodec = new TextTagCodec();
-
-    private int currentLineNumber;
-    private String currentLine;
-
-    //
-    // Constructors
-    //
-
-    /**
-     * Public constructor. Use the default SAMRecordFactory and stringency.
-     *
-     * @param samFileHeader SAM file header
-     */
-    public SAMLineParser(final SAMFileHeader samFileHeader) {
-
-        this(new DefaultSAMRecordFactory(),
-                ValidationStringency.DEFAULT_STRINGENCY, samFileHeader,
-                null, null);
-    }
-
-    /**
-     * Public constructor. Use the default SAMRecordFactory and stringency.
-     *
-     * @param samFileHeader SAM file header
-     * @param samFileReader SAM file reader For passing to SAMRecord.setFileSource, may be null.
-     * @param samFile       SAM file being read (for error message only, may be null)
-     */
-    public SAMLineParser(final SAMFileHeader samFileHeader,
-                         final SamReader samFileReader, final File samFile) {
-
-        this(new DefaultSAMRecordFactory(),
-                ValidationStringency.DEFAULT_STRINGENCY, samFileHeader,
-                samFileReader, samFile);
-    }
-
-    /**
-     * Public constructor.
-     *
-     * @param samRecordFactory     SamRecord Factory
-     * @param validationStringency validation stringency
-     * @param samFileHeader        SAM file header
-     * @param samFileReader        SAM file reader For passing to SAMRecord.setFileSource, may be null.
-     * @param samFile              SAM file being read (for error message only, may be null)
-     */
-    public SAMLineParser(final SAMRecordFactory samRecordFactory,
-                         final ValidationStringency validationStringency,
-                         final SAMFileHeader samFileHeader, final SamReader samFileReader,
-                         final File samFile) {
-
-        if (samRecordFactory == null)
-            throw new NullPointerException("The SamRecordFactory must be set");
-
-        if (validationStringency == null)
-            throw new NullPointerException("The validationStringency must be set");
-
-        if (samFileHeader == null)
-            throw new NullPointerException("The mFileHeader must be set");
-
-        this.samRecordFactory = samRecordFactory;
-        this.validationStringency = validationStringency;
-        this.mFileHeader = samFileHeader;
-
-        // Can be null
-        this.mParentReader = samFileReader;
-
-        // Can be null
-        this.mFile = samFile;
-    }
-
-    /**
-     * Get the File header.
-     *
-     * @return the SAM file header
-     */
-    public SAMFileHeader getFileHeader() {
-
-        return this.mFileHeader;
-    }
-
-    /**
-     * Get validation stringency.
-     *
-     * @return validation stringency
-     */
-    public ValidationStringency getValidationStringency() {
-        return this.validationStringency;
-    }
-
-    /**
-     * Sets the expected SAM flag type expected for all records.
-     */
-    public SAMLineParser withSamFlagField(final SamFlagField samFlagField) {
-        if (samFlagField == null) throw new IllegalArgumentException("Sam flag field was null");
-        this.samFlagField = Optional.of(samFlagField);
-        return this;
-    }
-
-    private int parseInt(final String s, final String fieldName) {
-        final int ret;
-        try {
-            ret = Integer.parseInt(s);
-        } catch (NumberFormatException e) {
-            throw reportFatalErrorParsingLine("Non-numeric value in " + fieldName + " column");
-        }
-        return ret;
-    }
-    
-    private int parseFlag(final String s, final String fieldName) {
-        try {
-            return samFlagField.isPresent() ? samFlagField.get().parse(s) : SamFlagField.parseDefault(s);
-        } catch (NumberFormatException e) {
-            throw reportFatalErrorParsingLine("Non-numeric value in " + fieldName + " column");
-        } catch (SAMFormatException e) {
-            throw reportFatalErrorParsingLine("Error in " + fieldName + " column: " + e.getMessage(), e);
-        }
-    }
-
-    private void validateReferenceName(final String rname, final String fieldName) {
-        if (rname.equals("=")) {
-            if (fieldName.equals("MRNM")) {
-                return;
-            }
-            reportErrorParsingLine("= is not a valid value for "
-                    + fieldName + " field.");
-        }
-        if (!this.mFileHeader.getSequenceDictionary().isEmpty()) {
-            if (this.mFileHeader.getSequence(rname) == null) {
-                reportErrorParsingLine(fieldName
-                        + " '" + rname + "' not found in any SQ record");
-            }
-        }
-    }
-
-    /**
-     * Parse a SAM line.
-     *
-     * @param line line to parse
-     * @return a new SAMRecord object
-     */
-    public SAMRecord parseLine(final String line) {
-
-        return parseLine(line, -1);
-    }
-
-    /**
-     * Parse a SAM line.
-     *
-     * @param line       line to parse
-     * @param lineNumber line number in the file. If the line number is not known
-     *                   can be <=0.
-     * @return a new SAMRecord object
-     */
-    public SAMRecord parseLine(final String line, final int lineNumber) {
-
-        this.currentLineNumber = lineNumber;
-        this.currentLine = line;
-
-        final int numFields = StringUtil.split(line, mFields, '\t');
-        if (numFields < NUM_REQUIRED_FIELDS) {
-            throw reportFatalErrorParsingLine("Not enough fields");
-        }
-        if (numFields == mFields.length) {
-            reportErrorParsingLine("Too many fields in SAM text record.");
-        }
-        for (int i = 0; i < numFields; ++i) {
-            if (mFields[i].isEmpty()) {
-                reportErrorParsingLine("Empty field at position " + i + " (zero-based)");
-            }
-        }
-        final SAMRecord samRecord =
-                samRecordFactory.createSAMRecord(this.mFileHeader);
-        samRecord.setValidationStringency(this.validationStringency);
-        if (mParentReader != null)
-            samRecord.setFileSource(new SAMFileSource(mParentReader, null));
-        samRecord.setHeader(this.mFileHeader);
-        samRecord.setReadName(mFields[QNAME_COL]);
-
-        final int flags = parseFlag(mFields[FLAG_COL], "FLAG");
-        samRecord.setFlags(flags);
-
-        String rname = mFields[RNAME_COL];
-        if (!rname.equals("*")) {
-            rname = SAMSequenceRecord.truncateSequenceName(rname);
-            validateReferenceName(rname, "RNAME");
-            samRecord.setReferenceName(rname);
-        } else if (!samRecord.getReadUnmappedFlag()) {
-            reportErrorParsingLine("RNAME is not specified but flags indicate mapped");
-        }
-
-        final int pos = parseInt(mFields[POS_COL], "POS");
-        final int mapq = parseInt(mFields[MAPQ_COL], "MAPQ");
-        final String cigar = mFields[CIGAR_COL];
-        if (!SAMRecord.NO_ALIGNMENT_REFERENCE_NAME.equals(samRecord
-                .getReferenceName())) {
-            if (pos == 0) {
-                reportErrorParsingLine("POS must be non-zero if RNAME is specified");
-            }
-            if (!samRecord.getReadUnmappedFlag() && cigar.equals("*")) {
-                reportErrorParsingLine("CIGAR must not be '*' if RNAME is specified");
-            }
-        } else {
-            if (pos != 0) {
-                reportErrorParsingLine("POS must be zero if RNAME is not specified");
-            }
-            if (mapq != 0) {
-                reportErrorParsingLine("MAPQ must be zero if RNAME is not specified");
-            }
-            if (!cigar.equals("*")) {
-                reportErrorParsingLine("CIGAR must be '*' if RNAME is not specified");
-            }
-        }
-        samRecord.setAlignmentStart(pos);
-        samRecord.setMappingQuality(mapq);
-        samRecord.setCigarString(cigar);
-
-        String mateRName = mFields[MRNM_COL];
-        if (mateRName.equals("*")) {
-            if (samRecord.getReadPairedFlag() && !samRecord.getMateUnmappedFlag()) {
-                reportErrorParsingLine("MRNM not specified but flags indicate mate mapped");
-            }
-        } else {
-            if (!samRecord.getReadPairedFlag()) {
-                reportErrorParsingLine("MRNM specified but flags indicate unpaired");
-            }
-            if (!"=".equals(mateRName)) {
-                mateRName = SAMSequenceRecord.truncateSequenceName(mateRName);
-            }
-            validateReferenceName(mateRName, "MRNM");
-            if (mateRName.equals("=")) {
-                if (samRecord.getReferenceName() == null) {
-                    reportErrorParsingLine("MRNM is '=', but RNAME is not set");
-                }
-                samRecord.setMateReferenceName(samRecord.getReferenceName());
-            } else {
-                samRecord.setMateReferenceName(mateRName);
-            }
-        }
-
-        final int matePos = parseInt(mFields[MPOS_COL], "MPOS");
-        final int isize = parseInt(mFields[ISIZE_COL], "ISIZE");
-        if (!samRecord.getMateReferenceName().equals(
-                SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
-            if (matePos == 0) {
-                reportErrorParsingLine("MPOS must be non-zero if MRNM is specified");
-            }
-        } else {
-            if (matePos != 0) {
-                reportErrorParsingLine("MPOS must be zero if MRNM is not specified");
-            }
-            if (isize != 0) {
-                reportErrorParsingLine("ISIZE must be zero if MRNM is not specified");
-            }
-        }
-        samRecord.setMateAlignmentStart(matePos);
-        samRecord.setInferredInsertSize(isize);
-        if (!mFields[SEQ_COL].equals("*")) {
-            validateReadBases(mFields[SEQ_COL]);
-            samRecord.setReadString(mFields[SEQ_COL]);
-        } else {
-            samRecord.setReadBases(SAMRecord.NULL_SEQUENCE);
-        }
-        if (!mFields[QUAL_COL].equals("*")) {
-            if (samRecord.getReadBases() == SAMRecord.NULL_SEQUENCE) {
-                reportErrorParsingLine("QUAL should not be specified if SEQ is not specified");
-            }
-            if (samRecord.getReadString().length() != mFields[QUAL_COL].length()) {
-                reportErrorParsingLine("length(QUAL) != length(SEQ)");
-            }
-            samRecord.setBaseQualityString(mFields[QUAL_COL]);
-        } else {
-            samRecord.setBaseQualities(SAMRecord.NULL_QUALS);
-        }
-
-        for (int i = NUM_REQUIRED_FIELDS; i < numFields; ++i) {
-            parseTag(samRecord, mFields[i]);
-        }
-
-        // Only call samRecord.isValid() if errors would be reported since the validation
-        // is quite expensive in and of itself.
-        if (this.validationStringency != ValidationStringency.SILENT) {
-            final List<SAMValidationError> validationErrors = samRecord.isValid();
-            if (validationErrors != null) {
-                for (final SAMValidationError errorMessage : validationErrors) {
-                    reportErrorParsingLine(errorMessage.getMessage());
-                }
-            }
-        }
-
-        return samRecord;
-    }
-
-    private void validateReadBases(final String bases) {
-        /*
-        * Using regex is slow, so check for invalid characters via
-        * isValidReadBase(), which hopefully the JIT will optimize. if
-        * (!VALID_BASES.matcher(bases).matches()) {
-        * reportErrorParsingLine("Invalid character in read bases"); }
-        */
-        for (int i = 0; i < bases.length(); ++i) {
-            if (!isValidReadBase(bases.charAt(i))) {
-                reportErrorParsingLine("Invalid character in read bases");
-                return;
-            }
-        }
-    }
-
-    private boolean isValidReadBase(final char base) {
-        switch (base) {
-            case 'a':
-            case 'c':
-            case 'm':
-            case 'g':
-            case 'r':
-            case 's':
-            case 'v':
-            case 't':
-            case 'w':
-            case 'y':
-            case 'h':
-            case 'k':
-            case 'd':
-            case 'b':
-            case 'n':
-            case 'A':
-            case 'C':
-            case 'M':
-            case 'G':
-            case 'R':
-            case 'S':
-            case 'V':
-            case 'T':
-            case 'W':
-            case 'Y':
-            case 'H':
-            case 'K':
-            case 'D':
-            case 'B':
-            case 'N':
-            case '.':
-            case '=':
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    private void parseTag(final SAMRecord samRecord, final String tag) {
-        Map.Entry<String, Object> entry = null;
-        try {
-            entry = tagCodec.decode(tag);
-        } catch (SAMFormatException e) {
-            reportErrorParsingLine(e);
-        }
-        if (entry != null) {
-            if (entry.getValue() instanceof TagValueAndUnsignedArrayFlag) {
-                final TagValueAndUnsignedArrayFlag valueAndFlag =
-                        (TagValueAndUnsignedArrayFlag) entry.getValue();
-                if (valueAndFlag.isUnsignedArray) {
-                    samRecord.setUnsignedArrayAttribute(entry.getKey(),
-                            valueAndFlag.value);
-                } else {
-                    samRecord.setAttribute(entry.getKey(), valueAndFlag.value);
-                }
-            } else {
-                samRecord.setAttribute(entry.getKey(), entry.getValue());
-            }
-        }
-    }
-
-    //
-    // Error methods
-    //
-
-    private RuntimeException reportFatalErrorParsingLine(final String reason) {
-        return new SAMFormatException(makeErrorString(reason));
-    }
-
-    private RuntimeException reportFatalErrorParsingLine(final String reason, final Throwable throwable) {
-        return new SAMFormatException(makeErrorString(reason), throwable);
-    }
-
-    private void reportErrorParsingLine(final String reason) {
-        final String errorMessage = makeErrorString(reason);
-
-        if (validationStringency == ValidationStringency.STRICT) {
-            throw new SAMFormatException(errorMessage);
-        } else if (validationStringency == ValidationStringency.LENIENT) {
-            System.err
-                    .println("Ignoring SAM validation error due to lenient parsing:");
-            System.err.println(errorMessage);
-        }
-    }
-
-    private void reportErrorParsingLine(final Exception e) {
-        final String errorMessage = makeErrorString(e.getMessage());
-        if (validationStringency == ValidationStringency.STRICT) {
-            throw new SAMFormatException(errorMessage);
-        } else if (validationStringency == ValidationStringency.LENIENT) {
-            System.err
-                    .println("Ignoring SAM validation error due to lenient parsing:");
-            System.err.println(errorMessage);
-        }
-    }
-
-    private String makeErrorString(final String reason) {
-        String fileMessage = "";
-        if (mFile != null) {
-            fileMessage = "File " + mFile + "; ";
-        }
-        return "Error parsing text SAM file. "
-                + reason + "; " + fileMessage + "Line "
-                + (this.currentLineNumber <= 0 ? "unknown" : this.currentLineNumber)
-                + "\nLine: " + this.currentLine;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/SAMProgramRecord.java b/src/main/java/htsjdk/samtools/SAMProgramRecord.java
deleted file mode 100644
index 3bbecf9..0000000
--- a/src/main/java/htsjdk/samtools/SAMProgramRecord.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * In-memory representation of @PG SAM header record.
- */
-public class SAMProgramRecord extends AbstractSAMHeaderRecord {
-    public static final String PROGRAM_GROUP_ID_TAG = "ID";
-    public static final String PROGRAM_NAME_TAG = "PN";
-    public static final String PROGRAM_VERSION_TAG = "VN";
-    public static final String COMMAND_LINE_TAG = "CL";
-    public static final String PREVIOUS_PROGRAM_GROUP_ID_TAG = "PP";
-    private String mProgramGroupId;
-    public static final Set<String> STANDARD_TAGS = Collections.unmodifiableSet(
-            new HashSet<String>(Arrays.asList(PROGRAM_GROUP_ID_TAG,
-                    PROGRAM_NAME_TAG,
-                    PROGRAM_VERSION_TAG,
-                    COMMAND_LINE_TAG,
-                    PREVIOUS_PROGRAM_GROUP_ID_TAG)) );
-
-    public SAMProgramRecord(final String programGroupId) {
-        this.mProgramGroupId = programGroupId;
-    }
-
-    public SAMProgramRecord(final String id, SAMProgramRecord srcProgramRecord) {
-        mProgramGroupId = id;
-        for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) {
-            setAttribute(entry.getKey(), entry.getValue());
-        }
-    }
-
-    public String getId() {
-        return getProgramGroupId();
-    }
-
-    public String getProgramGroupId() {
-        return mProgramGroupId;
-    }
-
-    public String getProgramName() {
-        return (String)getAttribute(PROGRAM_NAME_TAG);
-    }
-
-    public void setProgramName(final String name) {
-        setAttribute(PROGRAM_NAME_TAG, name);
-    }
-
-    public String getProgramVersion() {
-        return (String)getAttribute(PROGRAM_VERSION_TAG);
-    }
-
-    public void setProgramVersion(final String version) {
-        setAttribute(PROGRAM_VERSION_TAG, version);
-    }
-
-    public String getCommandLine() {
-        return (String)getAttribute(COMMAND_LINE_TAG);
-    }
-
-    public void setCommandLine(final String commandLine) {
-        setAttribute(COMMAND_LINE_TAG, commandLine);
-    }
-
-    public String getPreviousProgramGroupId() {
-        return (String)getAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG);
-    }
-
-    public void setPreviousProgramGroupId(final String id) {
-        setAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG, id);
-    }
-
-
-
-    /**
-     * @return true if this == that except for the program group ID, which is arbitrary
-     */
-    public boolean equivalent(final SAMProgramRecord that) {
-        return attributesEqual(that);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final SAMProgramRecord that = (SAMProgramRecord) o;
-
-        if (!attributesEqual(that)) return false;
-        if (mProgramGroupId != null ? !mProgramGroupId.equals(that.mProgramGroupId) : that.mProgramGroupId != null) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = mProgramGroupId != null ? mProgramGroupId.hashCode() : 0;
-        result = 31 * result + attributesHashCode();
-        return result;
-    }
-
-    Set<String> getStandardTags() {
-        return STANDARD_TAGS;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMReadGroupRecord.java b/src/main/java/htsjdk/samtools/SAMReadGroupRecord.java
deleted file mode 100644
index fd81852..0000000
--- a/src/main/java/htsjdk/samtools/SAMReadGroupRecord.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.Iso8601Date;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Header information about a read group.
- */
-public class SAMReadGroupRecord extends AbstractSAMHeaderRecord
-{
-    private String mReadGroupId = null;
-    public static final String READ_GROUP_ID_TAG = "ID";
-    public static final String SEQUENCING_CENTER_TAG = "CN";
-    public static final String DESCRIPTION_TAG = "DS";
-    public static final String DATE_RUN_PRODUCED_TAG = "DT";
-    public static final String FLOW_ORDER_TAG = "FO";
-    public static final String KEY_SEQUENCE_TAG = "KS";
-    public static final String LIBRARY_TAG = "LB";
-    public static final String PROGRAM_GROUP_TAG = "PG";
-    public static final String PREDICTED_MEDIAN_INSERT_SIZE_TAG = "PI";
-    public static final String PLATFORM_TAG = "PL";
-    public static final String PLATFORM_MODEL_TAG = "PM";
-    public static final String PLATFORM_UNIT_TAG = "PU";
-    public static final String READ_GROUP_SAMPLE_TAG = "SM";
-
-    /* Platform values for the @RG-PL tag */
-    public enum PlatformValue {
-        CAPILLARY, LS454, ILLUMINA,
-        SOLID, HELICOS, IONTORRENT, 
-        ONT, PACBIO
-    }
-
-    public static final Set<String> STANDARD_TAGS =
-            new HashSet<String>(Arrays.asList(READ_GROUP_ID_TAG, SEQUENCING_CENTER_TAG, DESCRIPTION_TAG,
-                    DATE_RUN_PRODUCED_TAG, FLOW_ORDER_TAG, KEY_SEQUENCE_TAG, LIBRARY_TAG,
-                    PROGRAM_GROUP_TAG, PREDICTED_MEDIAN_INSERT_SIZE_TAG, PLATFORM_TAG, PLATFORM_MODEL_TAG,
-                    PLATFORM_UNIT_TAG, READ_GROUP_SAMPLE_TAG));
-
-    public SAMReadGroupRecord(final String id) { mReadGroupId = id; }
-
-    public SAMReadGroupRecord(final String id, final SAMReadGroupRecord srcProgramRecord) {
-        mReadGroupId = id;
-        for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) {
-            setAttribute(entry.getKey(), entry.getValue());
-        }
-    }
-
-    public String getId() { return getReadGroupId();  }
-    public String getReadGroupId() { return mReadGroupId; }
-
-    public String getSample() { return getAttribute(READ_GROUP_SAMPLE_TAG); }
-    public void setSample(final String value) { setAttribute(READ_GROUP_SAMPLE_TAG, value); }
-
-    public String getLibrary() { return getAttribute(LIBRARY_TAG); }
-    public void setLibrary(final String value) { setAttribute(LIBRARY_TAG, value); }
-
-    public String getPlatformUnit() { return getAttribute(PLATFORM_UNIT_TAG); }
-    public void setPlatformUnit(final String pu) { setAttribute(PLATFORM_UNIT_TAG, pu); }
-
-    public String getPlatform() { return getAttribute(PLATFORM_TAG); }
-    public void setPlatform(final String platform) { setAttribute(PLATFORM_TAG, platform); }
-
-    public Date getRunDate() {
-        final String dt = getAttribute(DATE_RUN_PRODUCED_TAG);
-        if (dt == null) return null;
-        else return new Iso8601Date(dt);
-    }
-
-    public String getFlowOrder() { return getAttribute(FLOW_ORDER_TAG); }
-    public void setFlowOrder(final String flowOrder) { setAttribute(FLOW_ORDER_TAG, flowOrder); }
-
-    public String getKeySequence() { return getAttribute(KEY_SEQUENCE_TAG); }
-    public void setKeySequence(final String keySequence) { setAttribute(KEY_SEQUENCE_TAG, keySequence); }
-
-    /**
-     * Converts to Iso8601Date if not already in that form.
-     */
-    public void setRunDate(Date runDate) {
-        if (runDate != null && !(runDate instanceof Iso8601Date)) {
-            runDate = new Iso8601Date(runDate);
-        }
-        setAttribute(DATE_RUN_PRODUCED_TAG, runDate != null ? runDate.toString() : null);
-    }
-
-    public String getSequencingCenter() { return getAttribute(SEQUENCING_CENTER_TAG); }
-    public void setSequencingCenter(final String center) { setAttribute(SEQUENCING_CENTER_TAG, center); }
-
-    public String getDescription() { return getAttribute(DESCRIPTION_TAG); }
-    public void setDescription(final String description) { setAttribute(DESCRIPTION_TAG, description); }
-
-    public Integer getPredictedMedianInsertSize() {
-        final String stringRep = getAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG);
-        if (stringRep == null) return null;
-        return Integer.parseInt(stringRep); 
-    }
-    public void setPredictedMedianInsertSize(final Integer predictedMedianInsertSize) {
-
-        setAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG, (predictedMedianInsertSize == null? null: predictedMedianInsertSize.toString())); 
-    }
-
-    public String getProgramGroup() { return getAttribute(PROGRAM_GROUP_TAG); }
-    public void setProgramGroup(final String programGroup) { setAttribute(PROGRAM_GROUP_TAG, programGroup); }
-
-    public String getPlatformModel() { return getAttribute(PLATFORM_MODEL_TAG); }
-    public void setPlatformModel(final String platformModel) { setAttribute(PLATFORM_MODEL_TAG, platformModel); }
-    
-    /**
-     * @return true if this == that except for the read group ID, which is arbitrary
-     */
-    public boolean equivalent(final SAMReadGroupRecord that) {
-        return attributesEqual(that);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final SAMReadGroupRecord that = (SAMReadGroupRecord) o;
-
-        if (!attributesEqual(that)) return false;
-        if (mReadGroupId != null ? !mReadGroupId.equals(that.mReadGroupId) : that.mReadGroupId != null) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return mReadGroupId.hashCode();
-    }
-
-    Set<String> getStandardTags() {
-        return STANDARD_TAGS;
-    }
-}
-
diff --git a/src/main/java/htsjdk/samtools/SAMRecord.java b/src/main/java/htsjdk/samtools/SAMRecord.java
deleted file mode 100644
index 13ec386..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecord.java
+++ /dev/null
@@ -1,2378 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.Locatable;
-import htsjdk.samtools.util.SequenceUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.*;
-
-
-/**
- * Java binding for a SAM file record.  c.f. http://samtools.sourceforge.net/SAM1.pdf
- * <p>
- * The presence of reference name/reference index and alignment start
- * do not necessarily mean that a read is aligned.  Those values may merely be set to force a SAMRecord
- * to appear in a certain place in the sort order.  The readUnmappedFlag must be checked to determine whether
- * or not a read is mapped.  Only if the readUnmappedFlag is false can the reference name/index and alignment start
- * be interpreted as indicating an actual alignment position.
- * <p>
- * Likewise, presence of mate reference name/index and mate alignment start do not necessarily mean that the
- * mate is aligned.  These may be set for an unaligned mate if the mate has been forced into a particular place
- * in the sort order per the above paragraph.  Only if the mateUnmappedFlag is false can the mate reference name/index
- * and mate alignment start be interpreted as indicating the actual alignment position of the mate.
- * <p>
- * Note also that there are a number of getters & setters that are linked, i.e. they present different representations
- * of the same underlying data.  In these cases there is typically a representation that is preferred because it
- * ought to be faster than some other representation.  The following are the preferred representations:
- * </p><ul>
- * <li>getReadNameLength() is preferred to getReadName().length()</li>
- * <li>get/setReadBases() is preferred to get/setReadString()</li>
- * <li>get/setBaseQualities() is preferred to get/setBaseQualityString()</li>
- * <li>get/setReferenceIndex() is preferred to get/setReferenceName() for records with valid SAMFileHeaders</li>
- * <li>get/setMateReferenceIndex() is preferred to get/setMateReferenceName() for records with valid SAMFileHeaders</li>
- * <li>getCigarLength() is preferred to getCigar().getNumElements()</li>
- * <li>get/setCigar() is preferred to get/setCigarString()</li>
- * </ul>
- * <p>
- * setHeader() is called by the SAM reading code, so the get/setReferenceIndex() and get/setMateReferenceIndex()
- * methods will have access to the sequence dictionary to resolve reference and mate reference names to dictionary
- * indices.
- * <p>
- * setHeader() need not be called explicitly when writing SAMRecords, however the writers require a record
- * in order to call get/setReferenceIndex() and get/setMateReferenceIndex(). Therefore adding records to a writer
- * has a side effect: any record that does not have an assigned header at the time it is added to a writer will be
- * updated and assigned the header associated with the writer.
- * <p>
- * Some of the get() methods return values that are mutable, due to the limitations of Java.  A caller should
- * never change the value returned by a get() method.  If you want to change the value of some attribute of a
- * SAMRecord, create a new value object and call the appropriate set() method.
- * </p>
- * Note that setIndexingBin() need not be called when writing SAMRecords.  It will be computed as necessary.  It is only
- * present as an optimization in the event that the value is already known and need not be computed.
- * <p>
- * By default, extensive validation of SAMRecords is done when they are read.  Very limited validation is done when
- * values are set onto SAMRecords.
- * <p>
- * <h3>Notes on Headerless SAMRecords</h3>
- * <p>
- * If the header is null, the following SAMRecord methods may throw exceptions:
- * <ul>
- * <li>getReferenceIndex</li>
- * <li>setReferenceIndex</li>
- * <li>getMateReferenceIndex</li>
- * <li>setMateReferenceIndex</li>
- * </ul><p>
- * Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with
- * non-null header values.
- * <p>
- * A record with null a header may be validated by the isValid method, but the reference and mate reference indices,
- * read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
- * <p>
- * Also, SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require the reference and mate reference names to be valid
- * in order to be written. At the time a record is added to a writer it will be updated to use the header associated
- * with the writer and the reference and mate reference names must be valid for that header. If the names cannot be
- * resolved using the writer's header, an exception will be thrown.
- * <p>
- * @author alecw at broadinstitute.org
- * @author mishali.naik at intel.com
- */
-public class SAMRecord implements Cloneable, Locatable, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    /**
-     * Alignment score for a good alignment, but where computing a Phred-score is not feasible. 
-     */
-    public static final int UNKNOWN_MAPPING_QUALITY = 255;
-
-    /**
-     * Alignment score for an unaligned read.
-     */
-    public static final int NO_MAPPING_QUALITY = 0;
-
-    /**
-     * If a read has this reference name, it is unaligned, but not all unaligned reads have
-     * this reference name (see above).
-     */
-    public static final String NO_ALIGNMENT_REFERENCE_NAME = "*";
-
-    /**
-     * If a read has this reference index, it is unaligned, but not all unaligned reads have
-     * this reference index (see above).
-     */
-    public static final int NO_ALIGNMENT_REFERENCE_INDEX = -1;
-
-    /**
-     * Cigar string for an unaligned read.
-     */
-    public static final String NO_ALIGNMENT_CIGAR = "*";
-
-    /**
-     * If a read has reference name "*", it will have this value for position.
-     */
-    public static final int NO_ALIGNMENT_START = GenomicIndexUtil.UNSET_GENOMIC_LOCATION;
-
-    /**
-     * This should rarely be used, since a read with no sequence doesn't make much sense.
-     */
-    public static final byte[] NULL_SEQUENCE = new byte[0];
-
-    public static final String NULL_SEQUENCE_STRING = "*";
-
-    /**
-     * This should rarely be used, since all reads should have quality scores.
-     */
-    public static final byte[] NULL_QUALS = new byte[0];
-    public static final String NULL_QUALS_STRING = "*";
-
-    /**
-     * abs(insertSize) must be <= this
-     */
-    public static final int MAX_INSERT_SIZE = 1<<29;
-
-    /**
-     * Tags that are known to need the reverse complement if the read is reverse complemented.
-     */
-    public static List<String> TAGS_TO_REVERSE_COMPLEMENT = Arrays.asList(SAMTag.E2.name(), SAMTag.SQ.name());
-
-    /**
-     * Tags that are known to need the reverse if the read is reverse complemented.
-     */
-    public static List<String> TAGS_TO_REVERSE = Arrays.asList(SAMTag.OQ.name(), SAMTag.U2.name());
-
-    private String mReadName = null;
-    private byte[] mReadBases = NULL_SEQUENCE;
-    private byte[] mBaseQualities = NULL_QUALS;
-    private String mReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
-    private int mAlignmentStart = NO_ALIGNMENT_START;
-    private transient int mAlignmentEnd = NO_ALIGNMENT_START;
-    private int mMappingQuality = NO_MAPPING_QUALITY;
-    private String mCigarString = NO_ALIGNMENT_CIGAR;
-    private Cigar mCigar = null;
-    private List<AlignmentBlock> mAlignmentBlocks = null;
-    private int mFlags = 0;
-    private String mMateReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
-    private int mMateAlignmentStart = 0;
-    private int mInferredInsertSize = 0;
-    private SAMBinaryTagAndValue mAttributes = null;
-    protected Integer mReferenceIndex = null;
-    protected Integer mMateReferenceIndex = null;
-    private Integer mIndexingBin = null;
-
-    /**
-     * Some attributes (e.g. CIGAR) are not decoded immediately.  Use this to decide how to validate when decoded.
-     */
-    private ValidationStringency mValidationStringency = ValidationStringency.SILENT;
-
-    /**
-     * File source of this record. May be null. Note that this field is not serializable (and therefore marked
-     * as transient) due to encapsulated stream objects within it -- so serializing a SAMRecord will cause its
-     * file source to be lost (if it had one).
-     */
-    private transient SAMFileSource mFileSource;
-    private SAMFileHeader mHeader = null;
-
-    /** Transient Map of attributes for use by anyone. */
-    private transient Map<Object,Object> transientAttributes;
-
-    public SAMRecord(final SAMFileHeader header) {
-        mHeader = header;
-    }
-
-    public String getReadName() {
-        return mReadName;
-    }
-
-    /**
-     * This method is preferred over getReadName().length(), because for BAMRecord
-     * it may be faster.
-     * @return length not including a null terminator.
-     */
-    public int getReadNameLength() {
-        return mReadName.length();
-    }
-
-    public void setReadName(final String value) {
-        mReadName = value;
-    }
-
-    /**
-     * @return read sequence as a string of ACGTN=.
-     */
-    public String getReadString() {
-        final byte[] readBases = getReadBases();
-        if (readBases.length == 0) {
-            return NULL_SEQUENCE_STRING;
-        }
-        return StringUtil.bytesToString(readBases);
-    }
-
-    public void setReadString(final String value) {
-        if (NULL_SEQUENCE_STRING.equals(value)) {
-            mReadBases = NULL_SEQUENCE;
-        } else {
-            final byte[] bases = StringUtil.stringToBytes(value);
-            SAMUtils.normalizeBases(bases);
-            setReadBases(bases);
-        }
-    }
-
-
-    /**
-     * Do not modify the value returned by this method.  If you want to change the bases, create a new
-     * byte[] and call setReadBases() or call setReadString().
-     * @return read sequence as ASCII bytes ACGTN=.
-     */
-    public byte[] getReadBases() {
-        return mReadBases;
-    }
-
-    public void setReadBases(final byte[] value) {
-        mReadBases = value;
-    }
-
-    /**
-     * This method is preferred over getReadBases().length, because for BAMRecord it may be faster.
-     * @return number of bases in the read.
-     */
-    public int getReadLength() {
-        return getReadBases().length;
-    }
-
-    /**
-     * @return Base qualities, encoded as a FASTQ string.
-     */
-    public String getBaseQualityString() {
-        if (Arrays.equals(NULL_QUALS, getBaseQualities())) {
-            return NULL_QUALS_STRING;
-        }
-        return SAMUtils.phredToFastq(getBaseQualities());
-    }
-
-    public void setBaseQualityString(final String value) {
-        if (NULL_QUALS_STRING.equals(value)) {
-            setBaseQualities(NULL_QUALS);
-        } else {
-            setBaseQualities(SAMUtils.fastqToPhred(value));
-        }
-    }
-
-    /**
-     * Do not modify the value returned by this method.  If you want to change the qualities, create a new
-     * byte[] and call setBaseQualities() or call setBaseQualityString().
-     * @return Base qualities, as binary phred scores (not ASCII).
-     */
-    public byte[] getBaseQualities() {
-        return mBaseQualities;
-    }
-
-    public void setBaseQualities(final byte[] value) {
-        mBaseQualities = value;
-    }
-
-    /**
-     * If the original base quality scores have been store in the "OQ" tag will return the numeric
-     * score as a byte[]
-     */
-    public byte[] getOriginalBaseQualities() {
-        final String oqString = (String) getAttribute("OQ");
-        if (oqString != null && !oqString.isEmpty()) {
-            return SAMUtils.fastqToPhred(oqString);
-        }
-        else {
-            return null;
-        }
-    }
-
-    /**
-     * Sets the original base quality scores into the "OQ" tag as a String.  Supplied value should be
-     * as phred-scaled numeric qualities.
-     */
-    public void setOriginalBaseQualities(final byte[] oq) {
-        setAttribute("OQ", SAMUtils.phredToFastq(oq));
-    }
-
-    private static boolean hasReferenceName(final Integer referenceIndex, final String referenceName) {
-        return (referenceIndex != null && !referenceIndex.equals(NO_ALIGNMENT_REFERENCE_INDEX)) ||
-                (!NO_ALIGNMENT_REFERENCE_NAME.equals(referenceName));
-    }
-
-    /**
-     * @return true if this SAMRecord has a reference, either as a String or index (or both).
-     */
-    private boolean hasReferenceName() {
-        return hasReferenceName(mReferenceIndex, mReferenceName);
-    }
-
-    /**
-     * @return true if this SAMRecord has a mate reference, either as a String or index (or both).
-     */
-    private boolean hasMateReferenceName() {
-        return hasReferenceName(mMateReferenceIndex, mMateReferenceName);
-    }
-
-    /**
-     * @return Reference name, or NO_ALIGNMENT_REFERENCE_NAME (*) if the record has no reference name
-     */
-    public String getReferenceName() { return mReferenceName; }
-
-    /**
-     * Sets the reference name for this record. If the record has a valid SAMFileHeader and the reference
-     * name is present in the associated sequence dictionary, the record's reference index will also be
-     * updated with the corresponding sequence index. If referenceName is NO_ALIGNMENT_REFERENCE_NAME, sets
-     * the reference index to NO_ALIGNMENT_REFERENCE_INDEX.
-     *
-     * @param referenceName - must not be null
-     * @throws IllegalArgumentException if {@code referenceName} is null
-     */
-    public void setReferenceName(final String referenceName) {
-        if (null == referenceName) {
-            throw new IllegalArgumentException(
-                    "Reference name must not be null. Use SAMRecord.NO_ALIGNMENT_REFERENCE_NAME to reset the reference name.");
-        }
-        if (null != mHeader) {
-            mReferenceIndex = resolveIndexFromName(referenceName, mHeader, false);
-            // String.intern() is surprisingly expensive, so avoid it by calling resolveNameFromIndex
-            // and using the interned value in the sequence dictionary if possible
-            mReferenceName = null == mReferenceIndex ?
-                                    referenceName.intern() :
-                                    resolveNameFromIndex(mReferenceIndex, mHeader);
-        }
-        else if (NO_ALIGNMENT_REFERENCE_NAME.equals(referenceName)) {
-            mReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
-            mReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
-        }
-        else {
-            mReferenceName = referenceName.intern();
-            mReferenceIndex = null;
-        }
-    }
-
-    /**
-     * Returns the reference index for this record.
-     *
-     * If the reference name for this record has previously been resolved against the sequence dictionary, the corresponding
-     * index is returned directly. Otherwise, the record must have a non-null SAMFileHeader that can be used to
-     * resolve the index for the record's current reference name, unless the reference name is NO_ALIGNMENT_REFERENCE_NAME.
-     * If the record has a header, and the name does not appear in the header's sequence dictionary, the value
-     * NO_ALIGNMENT_REFERENCE_INDEX (-1) will be returned. If the record does not have a header, an IllegalStateException
-     * is thrown.
-     *
-     * @return Index in the sequence dictionary of the reference sequence. If the read has no reference sequence, or if
-     * the reference name is not found in the sequence index, NO_ALIGNMENT_REFERENCE_INDEX (-1) is returned.
-     *
-     * @throws IllegalStateException if the reference index must be resolved but cannot be because the SAMFileHeader
-     * for the record is null.
-     */
-    public Integer getReferenceIndex() {
-        if (null == mReferenceIndex) { // try to resolve the reference index
-            mReferenceIndex = resolveIndexFromName(mReferenceName, mHeader, false);
-            if (null == mReferenceIndex) {
-                mReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
-            }
-        }
-        return mReferenceIndex;
-    }
-
-    /**
-     * Updates the reference index. The record must have a valid SAMFileHeader unless the referenceIndex parameter equals
-     * NO_ALIGNMENT_REFERENCE_INDEX, and the reference index must appear in  the header's sequence dictionary. If the
-     * reference index is valid, the reference name will also be resolved and updated to the name for the sequence
-     * dictionary entry corresponding to the index.
-     *
-     * @param referenceIndex Must either equal NO_ALIGNMENT_REFERENCE_INDEX (-1) indicating no reference, or the
-     *                       record must have a SAMFileHeader and the index must exist in the associated sequence
-     *                       dictionary.
-     * @throws IllegalStateException if {@code referenceIndex} is not equal to NO_ALIGNMENT_REFERENCE_INDEX and the
-     * SAMFileHeader is null for this record
-     * @throws IllegalArgumentException if {@code referenceIndex} is not found in the sequence dictionary in the header
-     * for this record.
-     */
-    public void setReferenceIndex(final int referenceIndex) {
-        // resolveNameFromIndex throws if the index can't be resolved
-        setReferenceName(resolveNameFromIndex(referenceIndex, mHeader));
-        // setReferenceName does this as a side effect, but set the value here to be explicit
-        mReferenceIndex = referenceIndex;
-    }
-
-    /**
-     * @return Mate reference name, or NO_ALIGNMENT_REFERENCE_NAME (*) if the record has no mate reference name
-     */
-    public String getMateReferenceName() {
-        return mMateReferenceName;
-    }
-
-    /**
-     * Sets the mate reference name for this record. If the record has a valid SAMFileHeader and the mate reference
-     * name is present in the associated sequence dictionary, the record's mate reference index will also be
-     * updated with the corresponding sequence index. If mateReferenceName is NO_ALIGNMENT_REFERENCE_NAME, sets the
-     * mate reference index to NO_ALIGNMENT_REFERENCE_INDEX.
-     *
-     * @param mateReferenceName - must not be null
-     * @throws IllegalArgumentException if {@code mateReferenceName} is null
-     */
-    public void setMateReferenceName(final String mateReferenceName) {
-        if (null == mateReferenceName) {
-            throw new IllegalArgumentException("Mate reference name must not be null. Use SAMRecord.NO_ALIGNMENT_REFERENCE_NAME to reset the mate reference name.");
-        }
-        if (null != mHeader) {
-            mMateReferenceIndex = resolveIndexFromName(mateReferenceName, mHeader, false);
-            // String.intern() is surprisingly expensive, so avoid it by calling resolveNameFromIndex
-            // and using the interned value in the sequence dictionary if possible
-            mMateReferenceName = null == mMateReferenceIndex ?
-                                   mateReferenceName.intern() :
-                                   resolveNameFromIndex(mMateReferenceIndex, mHeader);
-        }
-        else if (NO_ALIGNMENT_REFERENCE_NAME.equals(mateReferenceName)) {
-            mMateReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
-            mMateReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
-        }
-        else {
-            mMateReferenceName = mateReferenceName.intern();
-            mMateReferenceIndex = null;
-        }
-    }
-
-    /**
-     * Returns the mate reference index for this record.
-     *
-     * If the mate reference name for this record has previously been resolved against the sequence dictionary, the
-     * corresponding index is returned directly. Otherwise, the record must have a non-null SAMFileHeader that can be
-     * used to resolve the index for the record's current mate reference name, unless the mate reference name is
-     * NO_ALIGNMENT_REFERENCE_NAME. If the record has a header, and the name does not appear in the header's
-     * sequence dictionary, the value NO_ALIGNMENT_REFERENCE_INDEX (-1) will be returned. If the record does not have
-     * a header, an IllegalStateException is thrown.
-     *
-     * @return Index in the sequence dictionary of the mate reference sequence. If the read has no mate reference
-     * sequence, or if the mate reference name is not found in the sequence index, NO_ALIGNMENT_REFERENCE_INDEX (-1)
-     * is returned.
-     *
-     * @throws IllegalStateException if the mate reference index must be resolved but cannot be because the
-     * SAMFileHeader for the record is null.
-     */
-    public Integer getMateReferenceIndex() {
-        if (null == mMateReferenceIndex) { // try to resolve the mate reference index
-            mMateReferenceIndex = resolveIndexFromName(mMateReferenceName, mHeader, false);
-            if (null == mMateReferenceIndex) {
-                mMateReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
-            }
-        }
-        return mMateReferenceIndex;
-    }
-
-    /**
-     * Updates the mate reference index. The record must have a valid SAMFileHeader, and the mate reference index must appear in
-     * the header's sequence dictionary, unless the mateReferenceIndex parameter equals NO_ALIGNMENT_REFERENCE_INDEX. If the mate
-     * reference index is valid, the mate reference name will also be resolved and updated to the name for the sequence dictionary
-     * entry corresponding to the index.
-     *
-     * @param mateReferenceIndex Must either equal NO_ALIGNMENT_REFERENCE_INDEX (-1) indicating no reference, or the
-     *                       record must have a SAMFileHeader and the index must exist in the associated sequence
-     *                       dictionary.
-     * @throws IllegalStateException if the SAMFileHeader is null for this record
-     * @throws IllegalArgumentException if the mate reference index is not found in the sequence dictionary in the header for this record.
-     */
-    public void setMateReferenceIndex(final int mateReferenceIndex) {
-        // resolveNameFromIndex throws if the index can't be resolved
-        setMateReferenceName(resolveNameFromIndex(mateReferenceIndex, mHeader));
-        // setMateReferenceName does this as a side effect, but set the value here to be explicit
-        mMateReferenceIndex = mateReferenceIndex;
-    }
-
-    /**
-     * Static method that resolves and returns the reference index corresponding to a given reference name.
-     *
-     * @param referenceName If {@code referenceName} is NO_ALIGNMENT_REFERENCE_NAME, the value NO_ALIGNMENT_REFERENCE_INDEX
-     *                      is returned directly. Otherwise {@code referenceName}  must be looked up in the header's sequence
-     *                      dictionary.
-     * @param header SAMFileHeader to use when resolving {@code referenceName} to an index. Must be non null if the
-     *                {@code referenceName} is not NO_ALIGNMENT_REFERENCE_NAME.
-     * @param strict if true, throws if {@code referenceName}  does not appear in the header's sequence dictionary
-     * @returns the reference index corresponding to the {@code referenceName}, or null if strict is false and {@code referenceName}
-     * does not appear in the header's sequence dictionary.
-     * @throws IllegalStateException if {@code referenceName} is not equal to NO_ALIGNMENT_REFERENCE_NAME and the header is null
-     * @throws IllegalArgumentException if strict is true and the name does not appear in header's sequence dictionary.
-     *
-     * Does not mutate the SAMRecord.
-     */
-    protected static Integer resolveIndexFromName(final String referenceName, final SAMFileHeader header, final boolean strict) {
-        Integer referenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
-        if (!NO_ALIGNMENT_REFERENCE_NAME.equals(referenceName)) {
-            if (null == header) {
-                throw new IllegalStateException("A non-null SAMFileHeader is required to resolve the reference index or name");
-            }
-            referenceIndex = header.getSequenceIndex(referenceName);
-            if (NO_ALIGNMENT_REFERENCE_INDEX == referenceIndex) {
-                if (strict) {
-                    throw new IllegalArgumentException("Reference index for '" + referenceName + "' not found in sequence dictionary.");
-                }
-                else {
-                    referenceIndex = null;  // unresolved.
-                }
-            }
-        }
-        return referenceIndex;
-    }
-
-    /**
-     * Static method that resolves and returns the reference name corresponding to a given reference index.
-     *
-     * @param referenceIndex If {@code referenceIndex} is NO_ALIGNMENT_REFERENCE_INDEX, the value NO_ALIGNMENT_REFERENCE_NAME
-     *                      is returned directly. Otherwise {@code referenceIndex} must be looked up in the header's sequence
-     *                      dictionary.
-     * @param header SAMFileHeader to use when resolving {@code referenceIndex} to a name. Must be non null unless the
-     *               the {@code referenceIndex} is NO_ALIGNMENT_REFERENCE_INDEX.
-     * @returns the reference name corresponding to  {@code referenceIndex}
-     * @throws IllegalStateException if {@code referenceIndex} is not equal to NO_ALIGNMENT_REFERENCE_NAME and the header
-     * is null
-     * @throws IllegalArgumentException if {@code referenceIndex} does not appear in header's sequence dictionary.
-     *
-     * Does not mutate the SAMRecord.
-     */
-    protected static String resolveNameFromIndex(final int referenceIndex, final SAMFileHeader header) {
-        String referenceName = NO_ALIGNMENT_REFERENCE_NAME;
-        if (NO_ALIGNMENT_REFERENCE_INDEX != referenceIndex) {
-            if (null == header) {
-                throw new IllegalStateException("A non-null SAMFileHeader is required to resolve the reference index or name");
-            }
-            SAMSequenceRecord samSeq = header.getSequence(referenceIndex);
-            if (null == samSeq) {
-                throw new IllegalArgumentException("Reference name for '" + referenceIndex + "' not found in sequence dictionary.");
-            }
-            referenceName = samSeq.getSequenceName();
-        }
-
-        return referenceName;
-    }
-
-    /**
-     * @return 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.
-     */
-    public int getAlignmentStart() {
-        return mAlignmentStart;
-    }
-
-    /**
-     * @param value 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.
-     */
-    public void setAlignmentStart(final int value) {
-        mAlignmentStart = value;
-        // Clear cached alignment end
-        mAlignmentEnd = NO_ALIGNMENT_START;
-        // Change to alignmentStart could change indexing bin
-        setIndexingBin(null);
-    }
-
-    /**
-     * @return 1-based inclusive rightmost position of the clipped sequence, or 0 read if unmapped.
-     */
-    public int getAlignmentEnd() {
-        if (getReadUnmappedFlag()) {
-            return NO_ALIGNMENT_START;
-        }
-        else if (this.mAlignmentEnd == NO_ALIGNMENT_START) {
-            this.mAlignmentEnd = mAlignmentStart + getCigar().getReferenceLength() - 1;
-        }
-
-        return this.mAlignmentEnd;
-    }
-
-    /**
-     * @return the alignment start (1-based, inclusive) adjusted for clipped bases.  For example if the read
-     * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
-     * then this method will return 96.
-     *
-     * Invalid to call on an unmapped read.
-     */
-    public int getUnclippedStart() {
-        return SAMUtils.getUnclippedStart(getAlignmentStart(), getCigar());
-    }
-
-    /**
-     * @return the alignment end (1-based, inclusive) adjusted for clipped bases.  For example if the read
-     * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
-     * then this method will return 107.
-     *
-     * Invalid to call on an unmapped read.
-     */
-    public int getUnclippedEnd() {
-        return SAMUtils.getUnclippedEnd(getAlignmentEnd(), getCigar());
-    }
-
-
-    /**
-     * @param offset 1-based location within the unclipped sequence or 0 if there is no position.
-     * <p/>
-     * Non static version of the static function with the same name.
-     * @return 1-based inclusive reference position of the unclipped sequence at a given offset,
-     */
-    public int getReferencePositionAtReadPosition(final int offset) {
-        return getReferencePositionAtReadPosition(this, offset);
-    }
-
-    /**
-     * @param rec record to use
-     * @param offset 1-based location within the unclipped sequence
-     * @return 1-based inclusive reference position of the unclipped sequence at a given offset,
-     * or 0 if there is no position.
-     * For example, given the sequence NNNAAACCCGGG, cigar 3S9M, and an alignment start of 1,
-     * and a (1-based)offset 10 (start of GGG) it returns 7 (1-based offset starting after the soft clip.
-     * For example: given the sequence AAACCCGGGTTT, cigar 4M1D6M, an alignment start of 1,
-     * an offset of 4 returns reference position 4, an offset of 5 returns reference position 6.
-     * Another example: given the sequence AAACCCGGGTTT, cigar 4M1I6M, an alignment start of 1,
-     * an offset of 4 returns reference position 4, an offset of 5 returns 0.
-     */
-    public static int getReferencePositionAtReadPosition(final SAMRecord rec, final int offset) {
-
-        if (offset == 0) return 0;
-
-        for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
-            if (CoordMath.getEnd(alignmentBlock.getReadStart(), alignmentBlock.getLength()) < offset) {
-                continue;
-            } else if (offset < alignmentBlock.getReadStart()) {
-                return 0;
-            } else {
-                return alignmentBlock.getReferenceStart() + offset - alignmentBlock.getReadStart();
-            }
-        }
-        return 0; // offset not located in an alignment block
-    }
-
-
-    /**
-     * @param pos 1-based reference position
-     * return the offset
-     * @return 1-based (to match getReferencePositionAtReadPosition behavior) inclusive position into the
-     * unclipped sequence at a given reference position, or 0 if there is no such position.
-     *
-     * See examples in the static version below
-     */
-    public int getReadPositionAtReferencePosition(final int pos) {
-        return getReadPositionAtReferencePosition(this, pos, false);
-    }
-
-    /**
-     * @param pos 1-based reference position
-     * @param returnLastBaseIfDeleted if positive, and reference position matches a deleted base in the read, function will
-     * return the offset
-     * @return 1-based (to match getReferencePositionAtReadPosition behavior) inclusive position into the
-     * unclipped sequence at a given reference position,
-     * or 0 if there is no such position. If returnLastBaseIfDeleted is true deletions are assumed to "live" on the last read base
-     * in the preceding block.
-     *
-     * Non-static version of static function with the same name. See examples below.
-     */
-    public int getReadPositionAtReferencePosition(final int pos, final boolean returnLastBaseIfDeleted) {
-        return getReadPositionAtReferencePosition(this, pos, returnLastBaseIfDeleted);
-    }
-
-    /**
-     * @param rec record to use
-     * @param pos 1-based reference position
-     * @param returnLastBaseIfDeleted if positive, and reference position matches a deleted base in the read, function will
-     * return the offset
-     * @return 1-based (to match getReferencePositionAtReadPosition behavior) inclusive position into the
-     * unclipped sequence at a given reference position,
-     * or 0 if there is no such position. If returnLastBaseIfDeleted is true deletions are assumed to "live" on the last read base
-     * in the preceding block.
-     * For example, given the sequence NNNAAACCCGGG, cigar 3S9M, and an alignment start of 1,
-     * and a (1-based)pos of 7 (start of GGG) it returns 10 (1-based offset including the soft clip.
-     * For example: given the sequence AAACCCGGGT, cigar 4M1D6M, an alignment start of 1,
-     * a reference position of 4 returns offset of 4, a reference of 5 also returns an offset 4 (using "left aligning") if returnLastBaseIfDeleted
-     * and 0 otherwise.
-     * For example: given the sequence AAACtCGGGTT, cigar 4M1I6M, an alignment start of 1,
-     * a position 4 returns an offset 5, a position of 5 returns 6 (the inserted base is the 5th offset), a position of 11 returns 0 since
-     * that position in the reference doesn't overlap the read at all.
-     *
-     */
-    public static int getReadPositionAtReferencePosition(final SAMRecord rec, final int pos, final boolean returnLastBaseIfDeleted) {
-
-        if (pos <= 0) {
-            return 0;
-        }
-
-        int lastAlignmentOffset = 0;
-        for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
-            if (CoordMath.getEnd(alignmentBlock.getReferenceStart(), alignmentBlock.getLength()) >= pos) {
-                if (pos < alignmentBlock.getReferenceStart()) {
-                    //There must have been a deletion block that skipped
-                    return returnLastBaseIfDeleted ? lastAlignmentOffset : 0;
-                } else {
-                    return  pos - alignmentBlock.getReferenceStart() + alignmentBlock.getReadStart() ;
-                }
-            } else {
-                // record the offset to the last base in the current block, in case the next block starts too late
-                lastAlignmentOffset = alignmentBlock.getReadStart() + alignmentBlock.getLength() - 1 ;
-            }
-        }
-        // if we are here, the reference position was not overlapping the read at all
-        return 0;
-    }
-
-    /**
-     * @return 1-based inclusive leftmost position of the clipped mate sequence, or 0 if there is no position.
-     */
-    public int getMateAlignmentStart() {
-        return mMateAlignmentStart;
-    }
-
-    public void setMateAlignmentStart(final int mateAlignmentStart) {
-        this.mMateAlignmentStart = mateAlignmentStart;
-    }
-
-    /**
-     * @return insert size (difference btw 5' end of read & 5' end of mate), if possible, else 0.
-     * Negative if mate maps to lower position than read.
-     */
-    public int getInferredInsertSize() {
-        return mInferredInsertSize;
-    }
-
-    public void setInferredInsertSize(final int inferredInsertSize) {
-        this.mInferredInsertSize = inferredInsertSize;
-    }
-
-    /**
-     * @return phred scaled mapping quality.  255 implies valid mapping but quality is hard to compute.
-     */
-    public int getMappingQuality() {
-        return mMappingQuality;
-    }
-
-    public void setMappingQuality(final int value) {
-        mMappingQuality = value;
-    }
-
-    public String getCigarString() {
-        if (mCigarString == null && getCigar() != null) {
-            mCigarString = TextCigarCodec.encode(getCigar());
-        }
-        return mCigarString;
-    }
-
-    public void setCigarString(final String value) {
-        mCigarString = value;
-        mCigar = null;
-        mAlignmentBlocks = null;
-        // Clear cached alignment end
-        mAlignmentEnd = NO_ALIGNMENT_START;
-        // Change to cigar could change alignmentEnd, and thus indexing bin
-        setIndexingBin(null);
-    }
-
-    /**
-     * Do not modify the value returned by this method.  If you want to change the Cigar, create a new
-     * Cigar and call setCigar() or call setCigarString()
-     * @return Cigar object for the read, or null if there is none.
-     */
-    public Cigar getCigar() {
-        if (mCigar == null && mCigarString != null) {
-            mCigar = TextCigarCodec.decode(mCigarString);
-            if (null != getHeader() &&
-                    getValidationStringency() != ValidationStringency.SILENT &&
-                    !this.getReadUnmappedFlag()) {
-                // Don't know line number, and don't want to force read name to be decoded.
-                SAMUtils.processValidationErrors(this.validateCigar(-1L), -1L, getValidationStringency());
-            }
-        }
-        return mCigar;
-    }
-
-    /**
-     * This method is preferred over getCigar().getNumElements(), because for BAMRecord it may be faster.
-     * @return number of cigar elements (number + operator) in the cigar string.
-     */
-    public int getCigarLength() {
-        return getCigar().numCigarElements();
-    }
-
-    public void setCigar(final Cigar cigar) {
-        initializeCigar(cigar);
-        // Change to cigar could change alignmentEnd, and thus indexing bin
-        setIndexingBin(null);
-    }
-
-    /**
-     * For setting the Cigar string when BAMRecord has decoded it.  Use this rather than setCigar()
-     * so that indexing bin doesn't get clobbered.
-     */
-    protected void initializeCigar(final Cigar cigar) {
-        this.mCigar = cigar;
-        mCigarString = null;
-        mAlignmentBlocks = null;
-        // Clear cached alignment end
-        mAlignmentEnd = NO_ALIGNMENT_START;
-    }
-
-    /**
-     * Get the SAMReadGroupRecord for this SAMRecord.
-     * @return The SAMReadGroupRecord from the SAMFileHeader for this SAMRecord, or null if
-     * 1) this record has no RG tag, or 2) the header doesn't contain the read group with
-     * the given ID.or 3) this record has no SAMFileHeader
-     * @throws ClassCastException if RG tag does not have a String value.
-     */
-    public SAMReadGroupRecord getReadGroup() {
-        final String rgId = (String)getAttribute(SAMTagUtil.getSingleton().RG);
-        if (rgId == null || getHeader() == null) {
-            return null;
-        } else {
-            return getHeader().getReadGroup(rgId);
-        }
-    }
-
-    /**
-     * It is preferable to use the get*Flag() methods that handle the flag word symbolically.
-     */
-    public int getFlags() {
-        return mFlags;
-    }
-
-    public void setFlags(final int value) {
-        mFlags = value;
-        // Could imply change to readUnmapped flag, which could change indexing bin
-        setIndexingBin(null);
-    }
-
-    /**
-     * the read is paired in sequencing, no matter whether it is mapped in a pair.
-     */
-    public boolean getReadPairedFlag() {
-        return (mFlags & SAMFlag.READ_PAIRED.flag) != 0;
-    }
-
-    private void requireReadPaired() {
-        if (!getReadPairedFlag()) {
-            throw new IllegalStateException("Inappropriate call if not paired read");
-        }
-    }
-
-    /**
-     * the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
-     */
-    public boolean getProperPairFlag() {
-        requireReadPaired();
-        return getProperPairFlagUnchecked();
-    }
-
-    private boolean getProperPairFlagUnchecked() {
-        return (mFlags & SAMFlag.PROPER_PAIR.flag) != 0;
-    }
-
-    /**
-     * the query sequence itself is unmapped.
-     */
-    public boolean getReadUnmappedFlag() {
-        return (mFlags & SAMFlag.READ_UNMAPPED.flag) != 0;
-    }
-
-    /**
-     * the mate is unmapped.
-     */
-    public boolean getMateUnmappedFlag() {
-        requireReadPaired();
-        return getMateUnmappedFlagUnchecked();
-    }
-
-    private boolean getMateUnmappedFlagUnchecked() {
-        return (mFlags & SAMFlag.MATE_UNMAPPED.flag) != 0;
-    }
-
-    /**
-     * strand of the query (false for forward; true for reverse strand).
-     */
-    public boolean getReadNegativeStrandFlag() {
-        return (mFlags & SAMFlag.READ_REVERSE_STRAND.flag) != 0;
-    }
-
-    /**
-     * strand of the mate (false for forward; true for reverse strand).
-     */
-    public boolean getMateNegativeStrandFlag() {
-        requireReadPaired();
-        return getMateNegativeStrandFlagUnchecked();
-    }
-
-    private boolean getMateNegativeStrandFlagUnchecked() {
-        return (mFlags & SAMFlag.MATE_REVERSE_STRAND.flag) != 0;
-    }
-
-    /**
-     * the read is the first read in a pair.
-     */
-    public boolean getFirstOfPairFlag() {
-        requireReadPaired();
-        return getFirstOfPairFlagUnchecked();
-    }
-
-    private boolean getFirstOfPairFlagUnchecked() {
-        return (mFlags & SAMFlag.FIRST_OF_PAIR.flag) != 0;
-    }
-
-    /**
-     * the read is the second read in a pair.
-     */
-    public boolean getSecondOfPairFlag() {
-        requireReadPaired();
-        return getSecondOfPairFlagUnchecked();
-    }
-
-    private boolean getSecondOfPairFlagUnchecked() {
-        return (mFlags & SAMFlag.SECOND_OF_PAIR.flag) != 0;
-    }
-
-    /**
-     * the alignment is not primary (a read having split hits may have multiple primary alignment records).
-     */
-    public boolean getNotPrimaryAlignmentFlag() {
-        return (mFlags & SAMFlag.NOT_PRIMARY_ALIGNMENT.flag) != 0;
-    }
-
-    /**
-     * the alignment is supplementary (TODO: further explanation?).
-     */
-    public boolean getSupplementaryAlignmentFlag() {
-        return (mFlags & SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag) != 0;
-    }
-
-    /**
-     * the read fails platform/vendor quality checks.
-     */
-    public boolean getReadFailsVendorQualityCheckFlag() {
-        return (mFlags & SAMFlag.READ_FAILS_VENDOR_QUALITY_CHECK.flag) != 0;
-    }
-
-    /**
-     * the read is either a PCR duplicate or an optical duplicate.
-     */
-    public boolean getDuplicateReadFlag() {
-        return (mFlags & SAMFlag.DUPLICATE_READ.flag) != 0;
-    }
-
-    /**
-     * the read is paired in sequencing, no matter whether it is mapped in a pair.
-     */
-    public void setReadPairedFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.READ_PAIRED.flag);
-    }
-
-    /**
-     * the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
-     */
-    public void setProperPairFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.PROPER_PAIR.flag);
-    }
-
-    /**
-     * the query sequence itself is unmapped.  This method name is misspelled.
-     * Use {@link #setReadUnmappedFlag} instead.
-     * @deprecated
-     */
-    @Deprecated
-    public void setReadUmappedFlag(final boolean flag) {
-        setReadUnmappedFlag(flag);
-    }
-
-    /**
-     * the query sequence itself is unmapped.
-     */
-    public void setReadUnmappedFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.READ_UNMAPPED.flag);
-        // Change to readUnmapped could change indexing bin
-        setIndexingBin(null);
-    }
-
-    /**
-     * the mate is unmapped.
-     */
-    public void setMateUnmappedFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.MATE_UNMAPPED.flag);
-    }
-
-    /**
-     * strand of the query (false for forward; true for reverse strand).
-     */
-    public void setReadNegativeStrandFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.READ_REVERSE_STRAND.flag);
-    }
-
-    /**
-     * strand of the mate (false for forward; true for reverse strand).
-     */
-    public void setMateNegativeStrandFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.MATE_REVERSE_STRAND.flag);
-    }
-
-    /**
-     * the read is the first read in a pair.
-     */
-    public void setFirstOfPairFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.FIRST_OF_PAIR.flag);
-    }
-
-    /**
-     * the read is the second read in a pair.
-     */
-    public void setSecondOfPairFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.SECOND_OF_PAIR.flag);
-    }
-
-    /**
-     * the alignment is not primary (a read having split hits may have multiple primary alignment records).
-     */
-    public void setNotPrimaryAlignmentFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.NOT_PRIMARY_ALIGNMENT.flag);
-    }
-
-    /**
-     * the alignment is supplementary (TODO: further explanation?).
-     */
-    public void setSupplementaryAlignmentFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag);
-    }
-
-    /**
-     * the read fails platform/vendor quality checks.
-     */
-    public void setReadFailsVendorQualityCheckFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.READ_FAILS_VENDOR_QUALITY_CHECK.flag);
-    }
-
-    /**
-     * the read is either a PCR duplicate or an optical duplicate.
-     */
-    public void setDuplicateReadFlag(final boolean flag) {
-        setFlag(flag, SAMFlag.DUPLICATE_READ.flag);
-    }
-
-    /**
-     * Tests if this record is either a secondary and/or supplementary alignment;
-     * equivalent to {@code (getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag())}.
-     */
-    public boolean isSecondaryOrSupplementary() {
-        return getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag();
-    }
-
-    private void setFlag(final boolean flag, final int bit) {
-        if (flag) {
-            mFlags |= bit;
-        } else {
-            mFlags &= ~bit;
-        }
-    }
-
-    public ValidationStringency getValidationStringency() {
-        return mValidationStringency;
-    }
-
-    /**
-     * Control validation of lazily-decoded elements.
-     */
-    public void setValidationStringency(final ValidationStringency validationStringency) {
-        this.mValidationStringency = validationStringency;
-    }
-
-    /**
-     * Get the value for a SAM tag.
-     * WARNING: Some value types (e.g. byte[]) are mutable.  It is dangerous to change one of these values in
-     * place, because some SAMRecord implementations keep track of when attributes have been changed.  If you
-     * want to change an attribute value, call setAttribute() to replace the value.
-     *
-     * @param tag Two-character tag name.
-     * @return Appropriately typed tag value, or null if the requested tag is not present.
-     */
-    public Object getAttribute(final String tag) {
-        return getAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag));
-    }
-
-    /**
-     * Get the tag value and attempt to coerce it into the requested type.
-     * @param tag The requested tag.
-     * @return The value of a tag, converted into a signed Integer if possible.
-     * @throws RuntimeException If the value is not an integer type, or will not fit in a signed Integer.
-     */
-    public Integer getIntegerAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof Integer) {
-            return (Integer)val;
-        }
-        if (!(val instanceof Number)) {
-            throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
-        }
-        final long longVal = ((Number)val).longValue();
-        if (longVal < Integer.MIN_VALUE || longVal > Integer.MAX_VALUE) {
-            throw new RuntimeException("Value for tag " + tag + " is not in Integer range: " + longVal);
-        }
-        return (int)longVal;
-    }
-
-    /**
-     * A convenience method that will return a valid unsigned integer as a Long,
-     * or fail with an exception if the tag value is invalid.
-     *
-     * @param tag Two-character tag name.
-     * @return valid unsigned integer associated with the tag, as a Long
-     * @throws {@link htsjdk.samtools.SAMException} if the value is out of range for a 32-bit unsigned value, or not a Number
-     */
-    public Long getUnsignedIntegerAttribute(final String tag) throws SAMException {
-        return getUnsignedIntegerAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag));
-    }
-
-    /**
-     * A convenience method that will return a valid unsigned integer as a Long,
-     * or fail with an exception if the tag value is invalid.
-     *
-     * @param tag Binary representation of a 2-char String tag as created by SAMTagUtil.
-     * @return valid unsigned integer associated with the tag, as a Long
-     * @throws {@link htsjdk.samtools.SAMException} if the value is out of range for a 32-bit unsigned value, or not a Number
-     */
-    public Long getUnsignedIntegerAttribute(final short tag) throws SAMException {
-        final Object value = getAttribute(tag);
-        if (value == null) {
-            return null;
-        }
-
-        if (value instanceof Number) {
-            final long lValue = ((Number)value).longValue();
-            if (SAMUtils.isValidUnsignedIntegerAttribute(lValue)) {
-                return lValue;
-            } else {
-                throw new SAMException("Unsigned integer value of tag " +
-                        SAMTagUtil.getSingleton().makeStringTag(tag) + " is out of bounds for a 32-bit unsigned integer: " + lValue);
-            }
-        } else {
-            throw new SAMException("Unexpected attribute value data type " + value.getClass() + " for tag " +
-                    SAMTagUtil.getSingleton().makeStringTag(tag));
-        }
-    }
-
-    /**
-     * Get the tag value and attempt to coerce it into the requested type.
-     * @param tag The requested tag.
-     * @return The value of a tag, converted into a Short if possible.
-     * @throws RuntimeException If the value is not an integer type, or will not fit in a Short.
-     */
-    public Short getShortAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof Short) {
-            return (Short)val;
-        }
-        if (!(val instanceof Number)) {
-            throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
-        }
-        final long longVal = ((Number)val).longValue();
-        if (longVal < Short.MIN_VALUE || longVal > Short.MAX_VALUE) {
-            throw new RuntimeException("Value for tag " + tag + " is not in Short range: " + longVal);
-        }
-        return (short)longVal;
-    }
-
-    /**
-     * Get the tag value and attempt to coerce it into the requested type.
-     * @param tag The requested tag.
-     * @return The value of a tag, converted into a Byte if possible.
-     * @throws RuntimeException If the value is not an integer type, or will not fit in a Byte.
-     */
-    public Byte getByteAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof Byte) {
-            return (Byte)val;
-        }
-        if (!(val instanceof Number)) {
-            throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
-        }
-        final long longVal = ((Number)val).longValue();
-        if (longVal < Byte.MIN_VALUE || longVal > Byte.MAX_VALUE) {
-            throw new RuntimeException("Value for tag " + tag + " is not in Short range: " + longVal);
-        }
-        return (byte)longVal;
-    }
-
-    public String getStringAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof String) {
-            return (String)val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a String: " + val.getClass());
-    }
-
-    public Character getCharacterAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof Character) {
-            return (Character)val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a Character: " + val.getClass());
-    }
-
-    public Float getFloatAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof Float) {
-            return (Float)val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a Float: " + val.getClass());
-    }
-
-    /** Will work for signed byte array, unsigned byte array, or old-style hex array */
-    public byte[] getByteArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof byte[]) {
-            return (byte[])val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a byte[]: " + val.getClass());
-    }
-
-    public byte[] getUnsignedByteArrayAttribute(final String tag) {
-        final byte[] ret = getByteArrayAttribute(tag);
-        if (ret != null) requireUnsigned(tag);
-        return ret;
-    }
-
-    /** Will work for signed byte array or old-style hex array */
-    public byte[] getSignedByteArrayAttribute(final String tag) {
-        final byte[] ret = getByteArrayAttribute(tag);
-        if (ret != null) requireSigned(tag);
-        return ret;
-    }
-
-    public short[] getUnsignedShortArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof short[]) {
-            requireUnsigned(tag);
-            return (short[]) val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a short[]: " + val.getClass());
-    }
-
-    public short[] getSignedShortArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof short[]) {
-            requireSigned(tag);
-            return (short[]) val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a short[]: " + val.getClass());
-    }
-
-    public int[] getUnsignedIntArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof int[]) {
-            requireUnsigned(tag);
-            return (int[]) val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a int[]: " + val.getClass());
-    }
-
-    public int[] getSignedIntArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val == null) return null;
-        if (val instanceof int[]) {
-            requireSigned(tag);
-            return (int[]) val;
-        }
-        throw new SAMException("Value for tag " + tag + " is not a int[]: " + val.getClass());
-    }
-
-    public float[] getFloatArrayAttribute(final String tag) {
-        final Object val = getAttribute(tag);
-        if (val != null && !(val instanceof float[])) {
-            throw new SAMException("Value for tag " + tag + " is not a float[]: " + val.getClass());
-        }
-        return (float[]) val;
-    }
-
-    /**
-     * @return True if this tag is an unsigned array, else false.
-     * @throws SAMException if the tag is not present.
-     */
-    public boolean isUnsignedArrayAttribute(final String tag) {
-        final SAMBinaryTagAndValue tmp = this.mAttributes.find(SAMTagUtil.getSingleton().makeBinaryTag(tag));
-        if (tmp != null) return tmp.isUnsignedArray();
-        throw new SAMException("Tag " + tag + " is not present in this SAMRecord");
-    }
-
-    private void requireSigned(final String tag) {
-        if (isUnsignedArrayAttribute(tag))  throw new SAMException("Value for tag " + tag + " is not signed");
-    }
-
-    private void requireUnsigned(final String tag) {
-        if (!isUnsignedArrayAttribute(tag))  throw new SAMException("Value for tag " + tag + " is not unsigned");
-    }
-
-    /**
-     * @see SAMRecord#getAttribute(java.lang.String)
-     * @param tag Binary representation of a 2-char String tag as created by SAMTagUtil.
-     */
-    public Object getAttribute(final short tag) {
-        if (this.mAttributes == null) return null;
-        else {
-            final SAMBinaryTagAndValue tmp = this.mAttributes.find(tag);
-            if (tmp != null) return tmp.value;
-            else return null;
-        }
-    }
-
-    /**
-     * Set a named attribute onto the SAMRecord.  Passing a null value causes the attribute to be cleared.
-     * @param tag two-character tag name.  See http://samtools.sourceforge.net/SAM1.pdf for standard and user-defined tags.
-     * @param value Supported types are String, Char, Integer, Float,
-     *              Long (for values that fit into a signed or unsigned 32-bit integer only),
-     *              byte[], short[], int[], float[].
-     * If value == null, tag is cleared.
-     *
-     * Byte and Short are allowed but discouraged.  If written to a SAM file, these will be converted to Integer,
-     * whereas if written to BAM, getAttribute() will return as Byte or Short, respectively.
-     *
-     * Long is allowed for values that fit into a signed or unsigned 32-bit integer only, but discouraged.
-     *
-     * To set unsigned byte[], unsigned short[] or unsigned int[] (which is discouraged because of poor Java language
-     * support), setUnsignedArrayAttribute() must be used instead of this method.
-     *
-     * String values are not validated to ensure that they conform to SAM spec.
-     */
-    public void setAttribute(final String tag, final Object value) {
-        if (value != null && value.getClass().isArray() && Array.getLength(value) == 0) {
-            throw new IllegalArgumentException("Empty value passed for tag " + tag);
-        }
-        setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value);
-    }
-
-    /**
-     * Because Java does not support unsigned integer types, we think it is a bad idea to encode them in SAM
-     * files.  If you must do so, however, you must call this method rather than setAttribute, because calling
-     * this method is the way to indicate that, e.g. a short array should be interpreted as unsigned shorts.
-     * @param value must be one of byte[], short[], int[]
-     */
-    public void setUnsignedArrayAttribute(final String tag, final Object value) {
-        if (!value.getClass().isArray()) {
-            throw new IllegalArgumentException("Non-array passed to setUnsignedArrayAttribute for tag " + tag);
-        }
-        if (Array.getLength(value) == 0) {
-            throw new IllegalArgumentException("Empty array passed to setUnsignedArrayAttribute for tag " + tag);
-        }
-        setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value, true);
-    }
-
-    /**
-     * @see htsjdk.samtools.SAMRecord#setAttribute(java.lang.String, java.lang.Object)
-     * @param tag Binary representation of a 2-char String tag as created by SAMTagUtil.
-     */
-    protected void setAttribute(final short tag, final Object value) {
-        setAttribute(tag, value, false);
-    }
-
-    /**
-     * Checks if the value is allowed as an attribute value.
-     *
-     * @param value the value to be checked
-     * @return true if the value is valid and false otherwise
-
-     * @deprecated
-     * The attribute type and value checks have been moved directly into
-     * {@link SAMBinaryTagAndValue}.
-     */
-    @Deprecated
-    protected static boolean isAllowedAttributeValue(final Object value) {
-        return SAMBinaryTagAndValue.isAllowedAttributeValue(value);
-    }
-
-    protected void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
-        if (value == null) {
-            if (this.mAttributes != null) {
-                // setting a tag value to null removes the tag:
-                this.mAttributes = this.mAttributes.remove(tag);
-            }
-        } else {
-            final SAMBinaryTagAndValue tmp;
-            if (!isUnsignedArray) {
-                tmp = new SAMBinaryTagAndValue(tag, value);
-            } else {
-                tmp = new SAMBinaryTagAndUnsignedArrayValue(tag, value);
-            }
-
-            if (this.mAttributes == null) {
-                this.mAttributes = tmp;
-            } else {
-                this.mAttributes = this.mAttributes.insert(tmp);
-            }
-        }
-    }
-
-    /**
-     * Removes all attributes.
-     */
-    public void clearAttributes() {
-        mAttributes = null;
-    }
-
-    /**
-     * Replace any existing attributes with the given linked item.
-     */
-    protected void setAttributes(final SAMBinaryTagAndValue attributes) {
-        mAttributes = attributes;
-    }
-
-    /**
-     * @return Pointer to the first of the tags.  Returns null if there are no tags.
-     */
-    protected SAMBinaryTagAndValue getBinaryAttributes() {
-        return mAttributes;
-    }
-
-    /**
-     * @return reference name, null if this is unmapped
-     */
-    @Override
-    public String getContig() {
-        if( getReadUnmappedFlag()) {
-            return null;
-        } else {
-            return getReferenceName();
-        }
-    }
-
-    /**
-     * an alias of {@link #getAlignmentStart()
-     * @return 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.
-     */
-    @Override
-    public int getStart() {
-        return getAlignmentStart();
-    }
-
-    /**
-     * an alias of {@link #getAlignmentEnd()}
-     * @return 1-based inclusive rightmost position of the clipped sequence, or 0 read if unmapped.
-     */
-    @Override
-    public int getEnd() {
-        return getAlignmentEnd();
-    }
-
-    /**
-     * Tag name and value of an attribute, for getAttributes() method.
-     */
-    public static class SAMTagAndValue {
-        public final String tag;
-        public final Object value;
-
-        public SAMTagAndValue(final String tag, final Object value) {
-            this.tag = tag;
-            this.value = value;
-        }
-    }
-
-    /**
-     * @return list of {tag, value} tuples
-     */
-    public List<SAMTagAndValue> getAttributes() {
-        SAMBinaryTagAndValue binaryAttributes = getBinaryAttributes();
-        final List<SAMTagAndValue> ret = new ArrayList<SAMTagAndValue>();
-        while (binaryAttributes != null) {
-            ret.add(new SAMTagAndValue(SAMTagUtil.getSingleton().makeStringTag(binaryAttributes.tag),
-                    binaryAttributes.value));
-            binaryAttributes = binaryAttributes.getNext();
-        }
-        return ret;
-    }
-
-    Integer getIndexingBin() {
-        return mIndexingBin;
-    }
-
-    /**
-     * Used internally when writing BAMRecords.
-     * @param mIndexingBin c.f. http://samtools.sourceforge.net/SAM1.pdf
-     */
-    void setIndexingBin(final Integer mIndexingBin) {
-        this.mIndexingBin = mIndexingBin;
-    }
-
-    /**
-     * Does not change state of this.
-     * @return indexing bin based on alignment start & end.
-     */
-    int computeIndexingBin() {
-        // regionToBin has zero-based, half-open API
-        final int alignmentStart = getAlignmentStart()-1;
-        int alignmentEnd = getAlignmentEnd();
-        if (alignmentEnd <= 0) {
-            // If alignment end cannot be determined (e.g. because this read is not really aligned),
-            // then treat this as a one base alignment for indexing purposes.
-            alignmentEnd = alignmentStart + 1;
-        }
-        return GenomicIndexUtil.regionToBin(alignmentStart, alignmentEnd);
-    }
-
-    /**
-     * @return the SAMFileHeader for this record. If the header is null, the following SAMRecord methods may throw
-     * exceptions:
-     * <p><ul>
-     * <li>getReferenceIndex</li>
-     * <li>setReferenceIndex</li>
-     * <li>getMateReferenceIndex</li>
-     * <li>setMateReferenceIndex</li>
-     * </ul><p>
-     * Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with
-     * non-null header values.
-     * <p>
-     * A record with null a header may be validated by the isValid method, but the reference and mate reference indices,
-     * read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
-     * <p>
-     * SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require records to have a valid header in order to be
-     * written. Any record that does not have a header at the time it is added to the writer will be updated to use the
-     * header associated with the writer.
-     */
-    public SAMFileHeader getHeader() {
-        return mHeader;
-    }
-
-    /**
-     * Sets the SAMFileHeader for this record. Setting the header into SAMRecord facilitates conversion between reference
-     * sequence names and indices.
-     * <p>
-     * <b>NOTE:</b> If the record has a reference or mate reference name, the corresponding reference and mate reference
-     * indices are resolved and updated using the sequence dictionary in the new header. setHeader does not throw an
-     * exception if either the reference or mate reference name does not appear in the new header's sequence dictionary.
-     * <p>
-     * When the SAMFileHeader is set to null, the reference and mate reference indices are cleared. Therefore, calls to
-     * the following SAMRecord methods on records with a null header may throw IllegalArgumentExceptions:
-     * <ul>
-     * <li>getReferenceIndex</li>
-     * <li>setReferenceIndex</li>
-     * <li>getMateReferenceIndex</li>
-     * <li>setMateReferenceIndex</li>
-     * </ul><p>
-     * Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with
-     * non-null header values.
-     * <p>
-     * A record with null a header may be validated by the isValid method, but the reference and mate reference indices,
-     * read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
-     * <p>
-     * SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require records to have a valid header in order to be
-     * written. Any record that does not have a header at the time it is added to the writer will be updated to use the
-     * header associated with the writer.
-     *
-     * @param header contains sequence dictionary for this SAMRecord
-     */
-    public void setHeader(final SAMFileHeader header) {
-        this.mHeader = header;
-        if (null == header) {
-            // mark the reference indices as unresolved
-            mReferenceIndex = null;
-            mMateReferenceIndex = null;
-        }
-        else {
-            // attempt to resolve the existing reference names and indices against the new sequence dictionary, but
-            // don't throw if the names don't appear in the dictionary
-            setReferenceName(mReferenceName);
-            setMateReferenceName(mMateReferenceName);
-        }
-    }
-
-    /**
-     * Establishes the SAMFileHeader for this record and forces resolution of the record's reference and mate reference
-     * names against the header using the sequence dictionary in the new header. If either the reference or mate
-     * reference name does not appear in the new header's sequence dictionary, an IllegalArgumentException is thrown.
-     *
-     * @param header new header for this record. May be null.
-     * @throws IllegalArgumentException if the record has reference or mate reference names that cannot be resolved
-     * to indices using the new header.
-     */
-    public void setHeaderStrict(final SAMFileHeader header) {
-        if (null == header) {
-            // mark the reference indices as unresolved
-            mReferenceIndex = null;
-            mMateReferenceIndex = null;
-        }
-        else {
-            // Attempt to resolve the existing reference names against the new sequence dictionary
-            // and throw if the names don't appear.
-            Integer referenceIndex = resolveIndexFromName(mReferenceName, header, true);
-            Integer mateReferenceIndex = resolveIndexFromName(mMateReferenceName, header, true);
-
-            // Mutate the record once we know the values are valid
-            mReferenceIndex = referenceIndex;
-            mMateReferenceIndex = mateReferenceIndex;
-        }
-        this.mHeader = header;
-    }
-
-    /**
-     * If this record has a valid binary representation of the variable-length portion of a binary record stored,
-     * return that byte array, otherwise return null.  This will never be true for SAMRecords.  It will be true
-     * for BAMRecords that have not been eagerDecoded(), and for which none of the data in the variable-length
-     * portion has been changed.
-     */
-    public byte[] getVariableBinaryRepresentation() {
-        return null;
-    }
-
-    /**
-     * Depending on the concrete implementation, the binary file size of attributes may be known without
-     * computing them all.
-     * @return binary file size of attribute, if known, else -1
-     */
-    public int getAttributesBinarySize() {
-        return -1;
-    }
-
-    /**
-     *
-     * @return String representation of this.
-     * @deprecated This method is not guaranteed to return a valid SAM text representation of the SAMRecord.
-     * To get standard SAM text representation, {@link SAMRecord#getSAMString}.
-     */
-    @Deprecated
-    public String format() {
-        final StringBuilder buffer = new StringBuilder();
-        addField(buffer, getReadName(), null, null);
-        addField(buffer, getFlags(), null, null);
-        addField(buffer, getReferenceName(), null, "*");
-        addField(buffer, getAlignmentStart(), 0, "*");
-        addField(buffer, getMappingQuality(), 0, "0");
-        addField(buffer, getCigarString(), null, "*");
-        addField(buffer, getMateReferenceName(), null, "*");
-        addField(buffer, getMateAlignmentStart(), 0, "*");
-        addField(buffer, getInferredInsertSize(), 0, "*");
-        addField(buffer, getReadString(), null, "*");
-        addField(buffer, getBaseQualityString(), null, "*");
-        if (mAttributes != null) {
-            SAMBinaryTagAndValue entry = getBinaryAttributes();
-            while (entry != null) {
-                addField(buffer, formatTagValue(entry.tag, entry.value));
-                entry = entry.getNext();
-            }
-        }
-        return buffer.toString();
-    }
-
-    private void addField(final StringBuilder buffer, final Object value, final Object defaultValue, final String defaultString) {
-        if (safeEquals(value, defaultValue)) {
-            addField(buffer, defaultString);
-        } else if (value == null) {
-            addField(buffer, "");
-        } else {
-            addField(buffer, value.toString());
-        }
-    }
-
-    private void addField(final StringBuilder buffer, final String field) {
-        if (buffer.length() > 0) {
-            buffer.append('\t');
-        }
-        buffer.append(field);
-    }
-
-    private String formatTagValue(final short tag, final Object value) {
-        final String tagString = SAMTagUtil.getSingleton().makeStringTag(tag);
-        if (value == null || value instanceof String) {
-            return tagString + ":Z:" + value;
-        } else if (value instanceof Integer || value instanceof Long ||
-                value instanceof Short || value instanceof Byte) {
-            return tagString + ":i:" + value;
-        } else if (value instanceof Character) {
-            return tagString + ":A:" + value;
-        } else if (value instanceof Float) {
-            return tagString + ":f:" + value;
-        } else if (value instanceof byte[]) {
-            return tagString + ":H:" + StringUtil.bytesToHexString((byte[]) value);
-        } else {
-            throw new RuntimeException("Unexpected value type for tag " + tagString +
-                    ": " + value + " of class " + value.getClass().getName());
-        }
-    }
-
-    private boolean safeEquals(final Object o1, final Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if (o1 == null || o2 == null) {
-            return false;
-        } else {
-            return o1.equals(o2);
-        }
-    }
-
-    /**
-     * Force all lazily-initialized data members to be initialized.  If a subclass overrides this method,
-     * typically it should also call  super method.
-     */
-    protected void eagerDecode() {
-        getCigar();
-        getCigarString();
-    }
-
-    /**
-     * Returns blocks of the read sequence that have been aligned directly to the
-     * reference sequence. Note that clipped portions of the read and inserted and
-     * deleted bases (vs. the reference) are not represented in the alignment blocks.
-     */
-    public List<AlignmentBlock> getAlignmentBlocks() {
-        if (this.mAlignmentBlocks == null) {
-            this.mAlignmentBlocks = SAMUtils.getAlignmentBlocks(getCigar(), getAlignmentStart(), "read cigar");
-        }
-        return this.mAlignmentBlocks;
-    }
-
-    /**
-     * Run all validations of CIGAR.  These include validation that the CIGAR makes sense independent of
-     * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
-     * @param recordNumber For error reporting.  -1 if not known.
-     * @return List of errors, or null if no errors.
-     */
-    public List<SAMValidationError> validateCigar(final long recordNumber) {
-        List<SAMValidationError> ret = null;
-
-        if (null != getHeader() && getValidationStringency() != ValidationStringency.SILENT && !this.getReadUnmappedFlag()) {
-            try {
-                //make sure that the cashed version is good
-                //wrapped in a try to catch an un-parsable string
-                return SAMUtils.validateCigar(this, getCigar(), getReferenceIndex(), getAlignmentBlocks(), recordNumber, "Read CIGAR");
-            } catch( final IllegalArgumentException e){
-                return Collections.singletonList(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,e.getMessage(),getReadName(),recordNumber));
-            }
-        }
-        return ret;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (!(o instanceof SAMRecord)) return false;
-
-        final SAMRecord samRecord = (SAMRecord) o;
-
-        // First check all the elements that do not require decoding
-        if (mAlignmentStart != samRecord.mAlignmentStart) return false;
-        if (mFlags != samRecord.mFlags) return false;
-        if (mInferredInsertSize != samRecord.mInferredInsertSize) return false;
-        if (mMappingQuality != samRecord.mMappingQuality) return false;
-        if (mMateAlignmentStart != samRecord.mMateAlignmentStart) return false;
-        if (mIndexingBin != null ? !mIndexingBin.equals(samRecord.mIndexingBin) : samRecord.mIndexingBin != null)
-            return false;
-        if (mMateReferenceIndex != null ? !mMateReferenceIndex.equals(samRecord.mMateReferenceIndex) : samRecord.mMateReferenceIndex != null)
-            return false;
-        if (mReferenceIndex != null ? !mReferenceIndex.equals(samRecord.mReferenceIndex) : samRecord.mReferenceIndex != null)
-            return false;
-
-        eagerDecode();
-        samRecord.eagerDecode();
-
-        if (mReadName != null ? !mReadName.equals(samRecord.mReadName) : samRecord.mReadName != null) return false;
-        if (mAttributes != null ? !mAttributes.equals(samRecord.mAttributes) : samRecord.mAttributes != null)
-            return false;
-        if (!Arrays.equals(mBaseQualities, samRecord.mBaseQualities)) return false;
-        if (mCigar != null ? !mCigar.equals(samRecord.mCigar) : samRecord.mCigar != null)
-            return false;
-        if (mMateReferenceName != null ? !mMateReferenceName.equals(samRecord.mMateReferenceName) : samRecord.mMateReferenceName != null)
-            return false;
-        if (!Arrays.equals(mReadBases, samRecord.mReadBases)) return false;
-        if (mReferenceName != null ? !mReferenceName.equals(samRecord.mReferenceName) : samRecord.mReferenceName != null)
-            return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        eagerDecode();
-        int result = mReadName != null ? mReadName.hashCode() : 0;
-        result = 31 * result + (mReadBases != null ? Arrays.hashCode(mReadBases) : 0);
-        result = 31 * result + (mBaseQualities != null ? Arrays.hashCode(mBaseQualities) : 0);
-        result = 31 * result + (mReferenceName != null ? mReferenceName.hashCode() : 0);
-        result = 31 * result + mAlignmentStart;
-        result = 31 * result + mMappingQuality;
-        result = 31 * result + (mCigarString != null ? mCigarString.hashCode() : 0);
-        result = 31 * result + mFlags;
-        result = 31 * result + (mMateReferenceName != null ? mMateReferenceName.hashCode() : 0);
-        result = 31 * result + mMateAlignmentStart;
-        result = 31 * result + mInferredInsertSize;
-        result = 31 * result + (mAttributes != null ? mAttributes.hashCode() : 0);
-        result = 31 * result + (mReferenceIndex != null ? mReferenceIndex.hashCode() : 0);
-        result = 31 * result + (mMateReferenceIndex != null ? mMateReferenceIndex.hashCode() : 0);
-        result = 31 * result + (mIndexingBin != null ? mIndexingBin.hashCode() : 0);
-        return result;
-    }
-
-    /**
-     * Perform various validations of SAMRecord.
-     * Note that this method deliberately returns null rather than Collections.emptyList() if there
-     * are no validation errors, because callers tend to assume that if a non-null list is returned, it is modifiable.
-     *
-     * A record with null a header may be validated by the isValid method, but the reference and mate reference indices,
-     * read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
-     *
-     * @return null if valid.  If invalid, returns a list of error messages.
-     *
-     */
-    public List<SAMValidationError> isValid() {
-        return isValid(false);
-    }
-
-    /**
-     * Perform various validations of SAMRecord.
-     * Note that this method deliberately returns null rather than Collections.emptyList() if there
-     * are no validation errors, because callers tend to assume that if a non-null list is returned, it is modifiable.
-     *
-     * A record with null a header may be validated by the isValid method, but the reference and mate reference indices,
-     * read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
-     *
-     * @param firstOnly return only the first error if true, false otherwise
-     * @return null if valid.  If invalid, returns a list of error messages.
-     */
-    public List<SAMValidationError> isValid(final boolean firstOnly) {
-        // ret is only instantiate if there are errors to report, in order to reduce GC in the typical case
-        // in which everything is valid.  It's ugly, but more efficient.
-        ArrayList<SAMValidationError> ret = null;
-        if (!getReadPairedFlag()) {
-            if (getProperPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getMateUnmappedFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED, "Mate unmapped flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getMateNegativeStrandFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_NEG_STRAND, "Mate negative strand flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getFirstOfPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_FIRST_OF_PAIR, "First of pair flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getSecondOfPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_SECOND_OF_PAIR, "Second of pair flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (null != getHeader() && getMateReferenceIndex() != NO_ALIGNMENT_REFERENCE_INDEX) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MATE_REF_INDEX, "MRNM should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-        } else {
-            final List<SAMValidationError> errors = isValidReferenceIndexAndPosition(mMateReferenceIndex, mMateReferenceName,
-                    getMateAlignmentStart(), true, firstOnly);
-            if (errors != null) {
-                if (firstOnly) return errors;
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.addAll(errors);
-            }
-            if (!hasMateReferenceName() && !getMateUnmappedFlag()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED, "Mapped mate should have mate reference name", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (!getFirstOfPairFlagUnchecked() && !getSecondOfPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.PAIRED_READ_NOT_MARKED_AS_FIRST_OR_SECOND,
-                        "Paired read should be marked as first of pair or second of pair.", getReadName()));
-                if (firstOnly) return ret;
-            }
-/*
-            TODO: PIC-97 This validation should be enabled, but probably at this point there are too many
-            BAM files that have the proper pair flag set when read or mate is unmapped.
-            if (getMateUnmappedFlag() && getProperPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unpaired read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-*/
-        }
-        if (getInferredInsertSize() > MAX_INSERT_SIZE || getInferredInsertSize() < -MAX_INSERT_SIZE) {
-            if (ret == null) ret = new ArrayList<SAMValidationError>();
-            ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INSERT_SIZE, "Insert size out of range", getReadName()));
-            if (firstOnly) return ret;
-        }
-        if (getReadUnmappedFlag()) {
-            if (getNotPrimaryAlignmentFlag()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_NOT_PRIM_ALIGNMENT, "Not primary alignment flag should not be set for unmapped read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getSupplementaryAlignmentFlag()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_SUPPLEMENTARY_ALIGNMENT, "Supplementary alignment flag should not be set for unmapped read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getMappingQuality() != 0) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MAPPING_QUALITY, "MAPQ should be 0 for unmapped read.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            /* non-empty CIGAR on unmapped read is now allowed, because there are special reads when SAM is used to store assembly. */
-/*
-            TODO: PIC-97 This validation should be enabled, but probably at this point there are too many
-            BAM files that have the proper pair flag set when read or mate is unmapped.
-            if (getProperPairFlagUnchecked()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unmapped read.", getReadName()));
-            }
-*/
-        } else {
-            if (getMappingQuality() >= 256) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MAPPING_QUALITY, "MAPQ should be < 256.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getCigarLength() == 0) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR, "CIGAR should have > zero elements for mapped read.", getReadName()));
-            /* todo - will uncomment once unit tests are added
-            } else if (getCigar().getReadLength() != getReadLength()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR, "CIGAR read length " + getCigar().getReadLength() + " doesn't match read length " + getReadLength(), getReadName()));
-            */
-                if (firstOnly) return ret;
-            }
-            if (getHeader() != null && getHeader().getSequenceDictionary().isEmpty()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.MISSING_SEQUENCE_DICTIONARY, "Empty sequence dictionary.", getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (!hasReferenceName()) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_READ_UNMAPPED, "Mapped read should have valid reference name", getReadName()));
-                if (firstOnly) return ret;
-            }
-/*
-            Oops!  We know this is broken in older BAM files, so this having this validation will cause all sorts of
-            problems!
-            if (getIndexingBin() != null && getIndexingBin() != computeIndexingBin()) {
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INDEXING_BIN,
-                        "Indexing bin (" + getIndexingBin() + ") does not agree with computed value (" + computeIndexingBin() + ")",
-                        getReadName()));
-
-            }
-*/
-        }
-        // Validate the RG ID is found in header
-        final String rgId = (String)getAttribute(SAMTagUtil.getSingleton().RG);
-        if (rgId != null && getHeader() != null && getHeader().getReadGroup(rgId) == null) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.READ_GROUP_NOT_FOUND,
-                        "RG ID on SAMRecord not found in header: " + rgId, getReadName()));
-                if (firstOnly) return ret;
-        }
-        final List<SAMValidationError> errors = isValidReferenceIndexAndPosition(mReferenceIndex, mReferenceName, getAlignmentStart(), false);
-        if (errors != null) {
-            if (ret == null) ret = new ArrayList<SAMValidationError>();
-            ret.addAll(errors);
-            if (firstOnly) return ret;
-        }
-        // TODO(mccowan): Is this asking "is this the primary alignment"?
-        if (this.getReadLength() == 0 && !this.getNotPrimaryAlignmentFlag()) {
-            final Object fz = getAttribute(SAMTagUtil.getSingleton().FZ);
-            if (fz == null) {
-                final String cq = (String)getAttribute(SAMTagUtil.getSingleton().CQ);
-                final String cs = (String)getAttribute(SAMTagUtil.getSingleton().CS);
-                if (cq == null || cq.isEmpty() || cs == null || cs.isEmpty()) {
-                    if (ret == null) ret = new ArrayList<SAMValidationError>();
-                    ret.add(new SAMValidationError(SAMValidationError.Type.EMPTY_READ,
-                            "Zero-length read without FZ, CS or CQ tag", getReadName()));
-                    if (firstOnly) return ret;
-                } else if (!getReadUnmappedFlag()) {
-                    boolean hasIndel = false;
-                    for (final CigarElement cigarElement : getCigar().getCigarElements()) {
-                        if (cigarElement.getOperator() == CigarOperator.DELETION ||
-                                cigarElement.getOperator() == CigarOperator.INSERTION) {
-                            hasIndel = true;
-                            break;
-                        }
-                    }
-                    if (!hasIndel) {
-                        if (ret == null) ret = new ArrayList<SAMValidationError>();
-                        ret.add(new SAMValidationError(SAMValidationError.Type.EMPTY_READ,
-                                "Colorspace read with zero-length bases but no indel", getReadName()));
-                        if (firstOnly) return ret;
-                    }
-                }
-            }
-        }
-        if (this.getReadLength() != getBaseQualities().length &&  !Arrays.equals(getBaseQualities(), NULL_QUALS)) {
-            if (ret == null) ret = new ArrayList<SAMValidationError>();
-            ret.add(new SAMValidationError(SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_QUALS_LENGTH,
-                    "Read length does not match quals length", getReadName()));
-            if (firstOnly) return ret;
-        }
-
-        if (this.getAlignmentStart() != NO_ALIGNMENT_START && this.getIndexingBin() != null &&
-                this.computeIndexingBin() != this.getIndexingBin()) {
-            if (ret == null) ret = new ArrayList<SAMValidationError>();
-            ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INDEXING_BIN,
-                    "bin field of BAM record does not equal value computed based on alignment start and end, and length of sequence to which read is aligned",
-                    getReadName()));
-            if (firstOnly) return ret;
-        }
-
-        if (ret == null || ret.isEmpty()) {
-            return null;
-        }
-        return ret;
-    }
-
-    /**
-     * Gets the source of this SAM record -- both the reader that retrieved the record and the position on disk from
-     * whence it came. 
-     * @return The file source.  Note that the reader will be null if the reader source has not be set.
-     */
-    public SAMFileSource getFileSource() {
-        return mFileSource;
-    }
-
-    /**
-     * Sets a marker providing the source reader for this file and the position in the file from which the read originated.
-     * @param fileSource source of the given file.
-     */
-    protected void setFileSource(final SAMFileSource fileSource) {
-        mFileSource = fileSource;
-    }
-
-    private List<SAMValidationError> isValidReferenceIndexAndPosition(final Integer referenceIndex, final String referenceName,
-                                                                      final int alignmentStart, final boolean isMate) {
-        return isValidReferenceIndexAndPosition(referenceIndex, referenceName, alignmentStart, isMate, false);
-    }
-
-    private List<SAMValidationError> isValidReferenceIndexAndPosition(final Integer referenceIndex, final String referenceName,
-                                                                      final int alignmentStart, final boolean isMate, final boolean firstOnly) {
-        final boolean hasReference = hasReferenceName(referenceIndex, referenceName);
-
-        // ret is only instantiate if there are errors to report, in order to reduce GC in the typical case
-        // in which everything is valid.  It's ugly, but more efficient.
-        ArrayList<SAMValidationError> ret = null;
-        if (!hasReference) {
-            if (alignmentStart != 0) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start should be 0 because reference name = *.", isMate), getReadName()));
-                if (firstOnly) return ret;
-            }
-        } else {
-            if (alignmentStart == 0) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start should != 0 because reference name != *.", isMate), getReadName()));
-                if (firstOnly) return ret;
-            }
-            if (getHeader() != null && !getHeader().getSequenceDictionary().isEmpty()) {
-                final SAMSequenceRecord sequence =
-                        (referenceIndex != null? getHeader().getSequence(referenceIndex): getHeader().getSequence(referenceName));
-                if (sequence == null) {
-                    if (ret == null) ret = new ArrayList<SAMValidationError>();
-                    ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_REFERENCE_INDEX, buildMessage("Reference sequence not found in sequence dictionary.", isMate), getReadName()));
-                    if (firstOnly) return ret;
-                } else {
-                    if (alignmentStart > sequence.getSequenceLength()) {
-                        if (ret == null) ret = new ArrayList<SAMValidationError>();
-                        ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start (" + alignmentStart + ") must be <= reference sequence length (" +
-                                sequence.getSequenceLength() + ") on reference " + sequence.getSequenceName(), isMate), getReadName()));
-                        if (firstOnly) return ret;
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    private String buildMessage(final String baseMessage, final boolean isMate) {
-        return isMate ? "Mate " + baseMessage : baseMessage;
-    }
-
-    /**
-     * Note that this does a shallow copy of everything, except for the attribute list, for which a copy of the list
-     * is made, but the attributes themselves are copied by reference.  This should be safe because callers should
-     * never modify a mutable value returned by any of the get() methods anyway. If one of the cloned record's SEQ or
-     * QUAL needs to be modified, a deeper copy should be made (e.g. Reverse Complement).
-     */
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        final SAMRecord newRecord = (SAMRecord)super.clone();
-        if (mAttributes != null) {
-            newRecord.mAttributes = this.mAttributes.copy();
-        }
-
-        return newRecord;
-    }
-
-    /**
-     * Returns a deep copy of the SAM record, with the following exceptions:
-     *
-     *  - The header field, which shares the header reference with the original record
-     *  - The file source field, which will always always be set to null in the copy
-     */
-    public SAMRecord deepCopy() {
-        final SAMRecord newSAM = new SAMRecord(getHeader());
-
-        newSAM.setReadName(getReadName());
-        newSAM.setReadBases(Arrays.copyOf(getReadBases(), getReadLength()));
-        final byte baseQualities[] = getBaseQualities();
-        newSAM.setBaseQualities(Arrays.copyOf(baseQualities, baseQualities.length));
-        newSAM.setReferenceName(getReferenceName());
-        newSAM.setAlignmentStart(getAlignmentStart()); // clears mAlignmentEnd
-        newSAM.setMappingQuality(getMappingQuality());
-        newSAM.setCigarString(getCigarString()); // clears Cigar element and alignmentBlocks
-        newSAM.setFileSource(null);
-
-        newSAM.setFlags(getFlags());
-        newSAM.setMateReferenceName(getMateReferenceName());
-        newSAM.setMateAlignmentStart(getMateAlignmentStart());
-        newSAM.setInferredInsertSize(getInferredInsertSize());
-        // transfer the reference indices directly to avoid mutating
-        // the source record
-        newSAM.mReferenceIndex = this.mReferenceIndex;
-        newSAM.mMateReferenceIndex = this.mMateReferenceIndex;
-        newSAM.setValidationStringency(getValidationStringency());
-        SAMBinaryTagAndValue attributes = getBinaryAttributes();
-        if (null != attributes) {
-            newSAM.setAttributes(attributes.deepCopy());
-        }
-        newSAM.setIndexingBin(getIndexingBin());
-
-        return newSAM;
-    }
-
-    /** Simple toString() that gives a little bit of useful info about the read. */
-    @Override
-    public String toString() {
-        final StringBuilder builder = new StringBuilder(64);
-        builder.append(getReadName());
-        if (getReadPairedFlag()) {
-            if (getFirstOfPairFlag()) {
-                builder.append(" 1/2");
-            }
-            else {
-                builder.append(" 2/2");
-            }
-        }
-
-        builder.append(' ')
-                .append(String.valueOf(getReadLength()))
-                .append('b');
-
-        if (getReadUnmappedFlag()) {
-            builder.append(" unmapped read.");
-        }
-        else {
-            builder.append(" aligned read.");
-        }
-
-        return builder.toString();
-    }
-
-    /**
-     Returns the record in the SAM line-based text format.  Fields are
-     separated by '\t' characters, and the String is terminated by '\n'.
-     */
-    public String getSAMString() {
-        return SAMTextWriter.getSAMString(this);
-    }
-
-    public String getPairedReadName() {
-        final StringBuilder builder = new StringBuilder(64);
-        builder.append(getReadName());
-        if (getReadPairedFlag()) {
-            if (getFirstOfPairFlag()) {
-                builder.append(" 1/2");
-            } else {
-                builder.append(" 2/2");
-            }
-        }
-        return builder.toString();
-    }
-    
-    /** 
-     * shortcut to <pre>SAMFlag.getFlags( this.getFlags() );</pre>
-     * @returns a set of SAMFlag associated to this sam record */
-    public final Set<SAMFlag> getSAMFlags() {
-        return SAMFlag.getFlags(this.getFlags());
-    }
-
-    /**
-     * Fetches the value of a transient attribute on the SAMRecord, of null if not set.
-     *
-     * The intended use for transient attributes is to store values that are 1-to-1 with the SAMRecord,
-     * may be needed many times and are expensive to compute.  These values can be computed lazily and
-     * then stored as transient attributes to avoid frequent re-computation.
-     */
-    public final Object getTransientAttribute(final Object key) {
-        return (this.transientAttributes == null) ? null : this.transientAttributes.get(key);
-    }
-
-    /**
-     * Sets the value of a transient attribute, and returns the previous value if defined.
-     *
-     * The intended use for transient attributes is to store values that are 1-to-1 with the SAMRecord,
-     * may be needed many times and are expensive to compute.  These values can be computed lazily and
-     * then stored as transient attributes to avoid frequent re-computation.
-     */
-    public final Object setTransientAttribute(final Object key, final Object value) {
-        if (this.transientAttributes == null) this.transientAttributes = new HashMap<Object,Object>();
-        return this.transientAttributes.put(key, value);
-    }
-
-    /**
-     * Removes a transient attribute if it is stored, and returns the stored value. If there is not
-     * a stored value, will return null.
-     */
-    public final Object removeTransientAttribute(final Object key) {
-        if (this.transientAttributes != null) return this.transientAttributes.remove(key);
-        else return null;
-    }
-
-    /**
-     * Reverse-complement bases and reverse quality scores along with known optional attributes that
-     * need the same treatment. Changes made after making a copy of the bases, qualities,
-     * and any attributes that will be altered. If in-place update is needed use
-     * {@link #reverseComplement(boolean)}.
-     * See {@link #TAGS_TO_REVERSE_COMPLEMENT} {@link #TAGS_TO_REVERSE}
-     * for the default set of tags that are handled.
-     */
-    public void reverseComplement() {
-        reverseComplement(false);
-    }
-
-    /**
-     * Reverse-complement bases and reverse quality scores along with known optional attributes that
-     * need the same treatment. Optionally makes a copy of the bases, qualities or attributes instead
-     * of altering them in-place. See {@link #TAGS_TO_REVERSE_COMPLEMENT} {@link #TAGS_TO_REVERSE}
-     * for the default set of tags that are handled.
-     *
-     * @param inplace Setting this to false will clone all attributes, bases and qualities before changing the values.
-     */
-    public void reverseComplement(boolean inplace) {
-        reverseComplement(TAGS_TO_REVERSE_COMPLEMENT, TAGS_TO_REVERSE, inplace);
-    }
-
-    /**
-     * Reverse complement bases and reverse quality scores. In addition reverse complement any
-     * non-null attributes specified by tagsToRevcomp and reverse and non-null attributes
-     * specified by tagsToReverse.
-     */
-    public void reverseComplement(final Collection<String> tagsToRevcomp, final Collection<String> tagsToReverse, boolean inplace) {
-        final byte[] readBases = inplace ? getReadBases() : getReadBases().clone();
-        SequenceUtil.reverseComplement(readBases);
-        setReadBases(readBases);
-        final byte qualities[] = inplace ? getBaseQualities() : getBaseQualities().clone();
-        reverseArray(qualities);
-        setBaseQualities(qualities);
-
-        // Deal with tags that need to be reverse complemented
-        if (tagsToRevcomp != null) {
-            for (final String tag: tagsToRevcomp) {
-                Object value = getAttribute(tag);
-                if (value != null) {
-                    if (value instanceof byte[]) {
-                        value = inplace ? value : ((byte[]) value).clone();
-                        SequenceUtil.reverseComplement((byte[]) value);
-                    } else if (value instanceof String) {
-                        //SequenceUtil.reverseComplement is in-place for bytes but copies Strings since they are immutable.
-                        value = SequenceUtil.reverseComplement((String) value);
-                    } else {
-                        throw new UnsupportedOperationException("Don't know how to reverse complement: " + value);
-                    }
-                    setAttribute(tag, value);
-                }
-            }
-        }
-
-        // Deal with tags that needed to just be reversed
-        if (tagsToReverse != null) {
-            for (final String tag : tagsToReverse) {
-                Object value = getAttribute(tag);
-                if (value != null) {
-                    if (value instanceof String) {
-                        value = StringUtil.reverseString((String) value);
-                    } else if (value.getClass().isArray()) {
-                        if (value instanceof byte[]) {
-                            value = inplace ? value : ((byte[]) value).clone();
-                            reverseArray((byte[]) value);
-                        } else if (value instanceof short[]) {
-                            value = inplace ? value : ((short[]) value).clone();
-                            reverseArray((short[]) value);
-                        } else if (value instanceof int[]) {
-                            value = inplace ? value : ((int[]) value).clone();
-                            reverseArray((int[]) value);
-                        } else if (value instanceof float[]) {
-                            value = inplace ? value : ((float[]) value).clone();
-                            reverseArray((float[]) value);
-                        } else {
-                            throw new UnsupportedOperationException("Reversing array attribute of type " + value.getClass().getComponentType() + " not supported.");
-                        }
-                    } else {
-                        throw new UnsupportedOperationException("Don't know how to reverse: " + value);
-                    }
-
-                    setAttribute(tag, value);
-                }
-            }
-        }
-    }
-
-    private static void reverseArray(final byte[] array) {
-        for (int i=0, j=array.length-1; i<j; ++i, --j) {
-            final byte tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
-        }
-    }
-
-    private static void reverseArray(final short[] array) {
-        for (int i=0, j=array.length-1; i<j; ++i, --j) {
-            final short tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
-        }
-    }
-
-    private static void reverseArray(final int[] array) {
-        for (int i=0, j=array.length-1; i<j; ++i, --j) {
-            final int tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
-        }
-    }
-
-    private static void reverseArray(final float[] array) {
-        for (int i=0, j=array.length-1; i<j; ++i, --j) {
-            final float tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordComparator.java b/src/main/java/htsjdk/samtools/SAMRecordComparator.java
deleted file mode 100644
index a39bedb..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordComparator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.util.Comparator;
-
-/**
- * Interface for comparators that define the various SAM sort orders.
- */
-public interface SAMRecordComparator extends Comparator<SAMRecord> {
-
-    /**
-     * Less stringent compare method than the regular compare.  If the two records
-     * are equal enough that their ordering in a sorted SAM file would be arbitrary,
-     * this method returns 0.
-     * @return negative if samRecord1 < samRecord2,  0 if equal, else positive
-     */
-    public int fileOrderCompare(SAMRecord samRecord1, SAMRecord samRecord2);
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordCoordinateComparator.java b/src/main/java/htsjdk/samtools/SAMRecordCoordinateComparator.java
deleted file mode 100644
index e8887bc..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordCoordinateComparator.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-
-/**
- * Comparator for sorting SAMRecords by coordinate.  Note that the header is required because
- * the order of sequences in the header defines the major sort order.
- *
- * Ideally this method would only return 0 for completely equal SAMRecords, so that sort is
- * completely deterministic.  This implementation does not achieve this completely, but it
- * comes pretty close, while avoiding decoding the variable length fields, except for read name,
- * which is decoded if coordinate and strand are equal.
- *
- * Extreme care must be taken to ensure the following:
- * if A == B, then B == A
- * if A < B, then B > A
- * if A < B && B < C, then A < C
- *
- */
-public class SAMRecordCoordinateComparator implements SAMRecordComparator, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        int cmp = fileOrderCompare(samRecord1, samRecord2);
-        if (cmp != 0) {
-            return cmp;
-        }
-        // Test of negative strand flag is not really necessary, because it is tested
-        // with cmp if getFlags, but it is left here because that is the way it was done
-        // in the past.
-        if (samRecord1.getReadNegativeStrandFlag() == samRecord2.getReadNegativeStrandFlag()) {
-            cmp = samRecord1.getReadName().compareTo(samRecord2.getReadName());
-            if (cmp != 0) return cmp;
-            cmp = compareInts(samRecord1.getFlags(), samRecord2.getFlags());
-            if (cmp != 0) return cmp;
-            cmp = compareInts(samRecord1.getMappingQuality(), samRecord2.getMappingQuality());
-            if (cmp != 0) return cmp;
-            cmp = compareInts(samRecord1.getMateReferenceIndex(), samRecord2.getMateReferenceIndex());
-            if (cmp != 0) return cmp;
-            cmp = compareInts(samRecord1.getMateAlignmentStart(), samRecord2.getMateAlignmentStart());
-            if (cmp != 0) return cmp;
-            cmp = compareInts(samRecord1.getInferredInsertSize(), samRecord2.getInferredInsertSize());
-            return cmp;
-
-        }
-        else return (samRecord1.getReadNegativeStrandFlag()? 1: -1);
-    }
-
-    private int compareInts(int i1, int i2) {
-        if (i1 < i2) return -1;
-        else if (i1 > i2) return 1;
-        else return 0;
-    }
-
-    /**
-     * Less stringent compare method than the regular compare.  If the two records
-     * are equal enough that their ordering in a sorted SAM file would be arbitrary,
-     * this method returns 0.  If read is paired and unmapped, use the mate mapping to sort.
-     * Records being compared must have non-null SAMFileHeaders.
-     *
-     * @return negative if samRecord1 < samRecord2,  0 if equal, else positive
-     */
-    public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-
-        if (null == samRecord1.getHeader() || null == samRecord2.getHeader()) {
-            throw new IllegalArgumentException("Records must have non-null SAMFileHeaders to be compared");
-        }
-
-        final int refIndex1 = samRecord1.getReferenceIndex();
-        final int refIndex2 = samRecord2.getReferenceIndex();
-        if (refIndex1 == -1) {
-            return (refIndex2 == -1? 0: 1);
-        } else if (refIndex2 == -1) {
-            return -1;
-        }
-        final int cmp = refIndex1 - refIndex2;
-        if (cmp != 0) {
-            return cmp;
-        }
-        return samRecord1.getAlignmentStart() - samRecord2.getAlignmentStart();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordDuplicateComparator.java b/src/main/java/htsjdk/samtools/SAMRecordDuplicateComparator.java
deleted file mode 100644
index 4ed2bb5..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordDuplicateComparator.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Compares records based on if they should be considered PCR Duplicates (see MarkDuplicates).
- * 
- * There are three orderings provided by this comparator: compare, duplicateSetCompare, and fileOrderCompare.
- *  
- * Specify the headers when constructing this comparator if you would like to consider the library as the major sort key.
- * The records being compared must also have non-null SAMFileHeaders.
- *
- * @author nhomer
- */
-public class SAMRecordDuplicateComparator implements SAMRecordComparator, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /** An enum to provide type-safe keys for transient attributes the comparator puts on SAMRecords. */
-    private static enum Attr {
-        LibraryId, ReadCoordinate, MateCoordinate
-    }
-
-    private static final byte FF = 0, FR = 1, F = 2, RF = 3, RR = 4, R = 5;
-
-    private final Map<String, Short> libraryIds = new HashMap<String, Short>(); // from library string to library id
-    private short nextLibraryId = 1;
-    
-    private ScoringStrategy scoringStrategy = ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH;
-    
-    public SAMRecordDuplicateComparator() {}
-
-    public SAMRecordDuplicateComparator(final List<SAMFileHeader> headers) {
-        // pre-populate the library names
-        for (final SAMFileHeader header : headers) {
-            for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
-                final String libraryName = readGroup.getLibrary();
-                if (null != libraryName) {
-                    final short libraryId = this.nextLibraryId++;
-                    this.libraryIds.put(libraryName, libraryId);
-                }
-            }
-        }
-    }
-    
-    public void setScoringStrategy(final ScoringStrategy scoringStrategy) {
-        this.scoringStrategy = scoringStrategy;
-    }
-
-    /**
-     * Populates the set of transient attributes on SAMRecords if they are not already there.
-     */
-    private void populateTransientAttributes(final SAMRecord... recs) {
-        for (final SAMRecord rec : recs) {
-            if (rec.getTransientAttribute(Attr.LibraryId) != null) continue;
-            rec.setTransientAttribute(Attr.LibraryId, getLibraryId(rec));
-            rec.setTransientAttribute(Attr.ReadCoordinate, rec.getReadNegativeStrandFlag() ? rec.getUnclippedEnd() : rec.getUnclippedStart());
-            rec.setTransientAttribute(Attr.MateCoordinate, getMateCoordinate(rec));
-        }
-    }
-
-    /**
-     * Gets the library name from the header for the record. If the RG tag is not present on
-     * the record, or the library isn't denoted on the read group, a constant string is
-     * returned.
-     */
-    private static String getLibraryName(final SAMRecord rec) {
-        final String readGroupId = (String) rec.getAttribute("RG");
-
-        if (readGroupId != null) {
-            final SAMFileHeader samHeader = rec.getHeader();
-            if (null != samHeader) {
-                final SAMReadGroupRecord rg = samHeader.getReadGroup(readGroupId);
-                if (rg != null) {
-                    final String libraryName = rg.getLibrary();
-                    if (null != libraryName) return libraryName;
-                }
-            }
-        }
-
-        return "Unknown Library";
-    }
-
-    /** Get the library ID for the given SAM record. */
-    private short getLibraryId(final SAMRecord rec) {
-        final String library = getLibraryName(rec);
-        Short libraryId = this.libraryIds.get(library);
-
-        if (libraryId == null) {
-            libraryId = this.nextLibraryId++;
-            this.libraryIds.put(library, libraryId);
-        }
-
-        return libraryId;
-    }
-
-    /**
-     * Convenience method for comparing two orientation bytes.  This is critical if we have mapped reads compared to fragment reads.
-     */
-    private int compareOrientationByteCollapseOrientation(final int orientation1, final int orientation2) {
-        // F == FR, F == FF
-        // R == RF, R == RR
-        if (F == orientation1 || R == orientation1) { // first orientation is fragment
-            /**
-             * We want 
-             * F == FR, F == FF
-             * R == RF, R == RR
-             */
-            if (F == orientation1) {
-                if (F == orientation2 || FR == orientation2 || FF == orientation2) {
-                    return 0;
-                }
-            }
-            else { // R == orientation1
-                if (R == orientation2 || RF == orientation2 || RR == orientation2) {
-                    return 0;
-                }
-            }
-        }
-        else if (F == orientation2 || R == orientation2) { // first orientation is paired, second is fragment
-            return -compareOrientationByteCollapseOrientation(orientation2, orientation1);
-        }
-
-        return orientation1 - orientation2;
-    }
-    
-    /**
-     * Returns a single byte that encodes the orientation of the two reads in a pair.
-     */
-    private static byte getPairedOrientationByte(final boolean read1NegativeStrand, final boolean read2NegativeStrand) {
-        if (read1NegativeStrand) {
-            if (read2NegativeStrand) return SAMRecordDuplicateComparator.RR;
-            else return SAMRecordDuplicateComparator.RF;
-        } else {
-            if (read2NegativeStrand) return SAMRecordDuplicateComparator.FR;
-            else return SAMRecordDuplicateComparator.FF;
-        }
-    }
-    
-    private int getFragmentOrientation(final SAMRecord record) {
-         return record.getReadNegativeStrandFlag() ? SAMRecordDuplicateComparator.R : SAMRecordDuplicateComparator.F;
-    }
-
-    private int getPairedOrientation(final SAMRecord record) {
-        if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) {
-            return getPairedOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag());
-        } else {
-            return getFragmentOrientation(record);
-        }
-    }
-
-    private int getMateReferenceIndex(final SAMRecord record) {
-        if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) {
-            return record.getMateReferenceIndex();
-        } else {
-            return -1;
-        }
-    }
-
-    private int getMateCoordinate(final SAMRecord record) {
-        if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) {
-            return record.getMateNegativeStrandFlag() ? SAMUtils.getMateUnclippedEnd(record) : SAMUtils.getMateUnclippedStart(record);
-        } else {
-            return -1;
-        }
-    }
-    
-    /** Is one end of a pair, or the fragment, unmapped? */
-    private boolean hasUnmappedEnd(final SAMRecord record) {
-        return (record.getReadUnmappedFlag() || (record.getReadPairedFlag() && record.getMateUnmappedFlag()));
-    }
-
-    /** Are both ends of a pair, or the fragment, mapped? */
-    private boolean hasMappedEnd(final SAMRecord record) {
-        return (!record.getReadUnmappedFlag() || (record.getReadPairedFlag() && !record.getMateUnmappedFlag()));
-    }
-    
-    /** Is this paired end and are both ends of a pair mapped */
-    private boolean pairedEndAndBothMapped(final SAMRecord record) {
-        return (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag());
-        
-    }
-
-    /**
-     * Most stringent comparison.
-     *
-     * Two records are compared based on if they are duplicates of each other, and then based
-     * on if they should be prioritized for being the most "representative".  Typically, the representative
-     * is the record in the SAM file that is *not* marked as a duplicate within a set of duplicates.
-     *  
-     * Compare by file order, then duplicate scoring strategy, read name.
-     * 
-     * If both reads are paired and both ends mapped, always prefer the first end over the second end.  This is needed to
-     * properly choose the first end for optical duplicate identification when both ends are mapped to the same position etc. 
-     */ 
-    public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        populateTransientAttributes(samRecord1, samRecord2);
-        int cmp;
-
-        // temporary variables for comparisons
-        int samRecord1Value, samRecord2Value;
-
-        cmp = fileOrderCompare(samRecord1, samRecord2);
-        // the duplicate scoring strategy
-        if (cmp == 0) {
-            cmp = DuplicateScoringStrategy.compare(samRecord1, samRecord2, this.scoringStrategy, true);
-        }
-        // the read name
-        if (cmp == 0) {
-            cmp = samRecord1.getReadName().compareTo(samRecord2.getReadName());
-        }
-        // needed for optical duplicate detection when both ends are mapped to the same position.
-        if (cmp == 0) {
-            if (samRecord1.getReadPairedFlag() && samRecord2.getReadPairedFlag()) {
-                samRecord1Value = samRecord1.getFirstOfPairFlag() ? 0 : 1;
-                samRecord2Value = samRecord2.getFirstOfPairFlag() ? 0 : 1;
-                cmp = samRecord1Value - samRecord2Value;
-            }
-        }
-
-        return cmp;
-    }
-
-    /**
-     * Compares: Library identifier, reference index, read coordinate, orientation of the read (or read pair), mate's coordinate (if paired and mapped),
-     * mapped ends, ...
-     *  
-     * collapseOrientation - true if we want cases where fragment orientation to paired end orientation can be equal (ex. F == FR), false otherwise
-     * considerNumberOfEndsMappedAndPairing - true if we want to prefer paired ends with both ends mapped over paired ends with only one end mapped, or paired ends with end
-     * mapped over fragment reads, false otherwise.
-     *  
-     */
-    private int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2, final boolean collapseOrientation, final boolean considerNumberOfEndsMappedAndPairing) {
-        populateTransientAttributes(samRecord1, samRecord2);
-        int cmp;
-
-        if (null == samRecord1.getHeader() || null == samRecord2.getHeader()) {
-            throw new IllegalArgumentException("Records must have non-null SAMFileHeaders to be compared");
-        }
-
-        // temporary variables for comparisons
-        int samRecord1Value, samRecord2Value;
-
-        // library identifier
-        {
-            samRecord1Value = (Short) samRecord1.getTransientAttribute(Attr.LibraryId);
-            samRecord2Value = (Short) samRecord2.getTransientAttribute(Attr.LibraryId);
-            cmp = samRecord1Value - samRecord2Value;
-        }
-        // reference index
-        if (cmp == 0) {
-            samRecord1Value = samRecord1.getReferenceIndex();
-            samRecord2Value = samRecord2.getReferenceIndex();
-            // NB: this accounts for unmapped reads to be placed at the ends of the file
-            if (samRecord1Value == -1) {
-                cmp = (samRecord2Value == -1) ? 0 : 1;
-            }
-            else if (samRecord2Value == -1) {
-                cmp = -1;
-            }
-            else {
-                cmp = samRecord1Value - samRecord2Value;
-            }
-        }
-        // read coordinate
-        if (cmp == 0) {
-            samRecord1Value = (Integer) samRecord1.getTransientAttribute(Attr.ReadCoordinate);
-            samRecord2Value = (Integer) samRecord2.getTransientAttribute(Attr.ReadCoordinate);
-            cmp = samRecord1Value - samRecord2Value;
-        }
-        // orientation
-        if (cmp == 0) {
-            samRecord1Value = getPairedOrientation(samRecord1);
-            samRecord2Value = getPairedOrientation(samRecord2);
-            if (collapseOrientation) {
-                cmp = compareOrientationByteCollapseOrientation(samRecord1Value, samRecord2Value);
-            }
-            else {
-                cmp = samRecord1Value - samRecord2Value;
-            }
-        }
-        // both ends need to be mapped
-        if (pairedEndAndBothMapped(samRecord1) && pairedEndAndBothMapped(samRecord2)) {
-            // mate's reference index
-            if (cmp == 0) {
-                samRecord1Value = getMateReferenceIndex(samRecord1);
-                samRecord2Value = getMateReferenceIndex(samRecord2);
-                cmp = samRecord1Value - samRecord2Value;
-            }
-            // mate's coordinate
-            if (cmp == 0) {
-                samRecord1Value = (Integer) samRecord1.getTransientAttribute(Attr.MateCoordinate);
-                samRecord2Value = (Integer) samRecord2.getTransientAttribute(Attr.MateCoordinate);;
-                cmp = samRecord1Value - samRecord2Value;
-            }
-        }
-        if (cmp == 0) {
-            samRecord1Value = hasMappedEnd(samRecord1) ? 0 : 1;
-            samRecord2Value = hasMappedEnd(samRecord2) ? 0 : 1;
-            cmp = samRecord1Value - samRecord2Value;
-        }
-        // if both paired or both unpaired, then check if one of the two ends (or single end) is unmapped
-        // else prefer the one that is paired end
-        if (cmp == 0 && considerNumberOfEndsMappedAndPairing) {
-            if (samRecord1.getReadPairedFlag() == samRecord2.getReadPairedFlag()) {
-                // Is this unmapped or its mate?
-                samRecord1Value = hasUnmappedEnd(samRecord1) ? 1 : 0;
-                samRecord2Value = hasUnmappedEnd(samRecord2) ? 1 : 0;
-                cmp = samRecord1Value - samRecord2Value;
-            }
-            else { // if we care if one is paired and the other is not
-                cmp = samRecord1.getReadPairedFlag() ? -1 : 1;
-            }
-        }
-
-        return cmp;
-    }
-
-    /**
-     * Less stringent than compare, such that two records are equal enough such that their ordering within their duplicate set would be arbitrary.
-     *
-     * Major difference between this and fileOrderCompare is how we compare the orientation byte.  Here we want:
-     *   F == FR, F == FF
-     *   R == RF, R == RR
-     */
-    public int duplicateSetCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        return fileOrderCompare(samRecord1, samRecord2, true, false);
-    }
-
-    /**
-     * Less stringent than duplicateSetCompare, such that two records are equal enough such that their ordering in a sorted SAM file would be arbitrary.
-     */
-    public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        return fileOrderCompare(samRecord1, samRecord2, false, true);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordFactory.java b/src/main/java/htsjdk/samtools/SAMRecordFactory.java
deleted file mode 100644
index 0db0646..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * Factory interface which allows plugging in of different classes for generating instances of
- * SAMRecord and BAMRecord when reading from SAM/BAM files.
- *
- * @author Tim Fennell
- */
-public interface SAMRecordFactory {
-
-    /** Create a new SAMRecord to be filled in */
-    public SAMRecord createSAMRecord(SAMFileHeader header);
-
-    /** Create a new BAM Record. */
-    public BAMRecord createBAMRecord(final SAMFileHeader header,
-                                     final int referenceSequenceIndex,
-                                     final int alignmentStart,
-                                     final short readNameLength,
-                                     final short mappingQuality,
-                                     final int indexingBin,
-                                     final int cigarLen,
-                                     final int flags,
-                                     final int readLen,
-                                     final int mateReferenceSequenceIndex,
-                                     final int mateAlignmentStart,
-                                     final int insertSize,
-                                     final byte[] variableLengthBlock);
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordIterator.java b/src/main/java/htsjdk/samtools/SAMRecordIterator.java
deleted file mode 100755
index 4ba5807..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordIterator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-/**
- * A general interface that adds functionality to a CloseableIterator of
- * SAMRecords.  Currently, this interface is implemented by iterators that
- * want to validate as they are iterating that that the records in the
- * underlying SAM/BAM file are in a particular order.
- */
-public interface SAMRecordIterator extends CloseableIterator<SAMRecord> {
-
-    /**
-     * Establishes that records returned by this iterator are expected to
-     * be in the specified sort order.  If this method has been called,
-     * then implementers must throw an IllegalStateException from next()
-     * when a record is read that violates the sort order.  This method
-     * may be called multiple times over the course of an iteration,
-     * changing the expected sort, if desired -- from the time it is called,
-     * it validates whatever sort is set, or stops validating if it
-     * is set to null or SAMFileHeader.SortOrder.unsorted.  If this method
-     * is not called, then no validation of the iterated records is done.
-     *
-     * @param sortOrder The order in which records are expected to be returned
-     * @return  This SAMRecordIterator
-     */
-    public SAMRecordIterator assertSorted(SAMFileHeader.SortOrder sortOrder);
-    
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordQueryHashComparator.java b/src/main/java/htsjdk/samtools/SAMRecordQueryHashComparator.java
deleted file mode 100644
index dce2ffb..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordQueryHashComparator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Murmur3;
-
-import java.io.Serializable;
-
-/**
- * SAMRecord comparator that provides an ordering based on a hash of the queryname. Has
- * the useful property that reads with the same name will be grouped together, but that
- * reads appear in an otherwise random order.  Useful for when the read names in a BAM
- * are correlated to something else (e.g. position, read group), making a straight
- * queryname sort undesirable.
- *
- * @author Tim Fennell
- */
-public class SAMRecordQueryHashComparator extends SAMRecordQueryNameComparator implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private final Murmur3 hasher = new Murmur3(42);
-
-    /**
-     * Compares two records based on an integer hash of their read name's. If the hash
-     * values are equal, falls back to the behaviour of SAMRecordQueryNameComparator
-     * to break the tie.
-     */
-    @Override
-    public int compare(final SAMRecord lhs, final SAMRecord rhs) {
-        final int retval = compareHashes(lhs, rhs);
-        if (retval == 0) return super.compare(lhs, rhs);
-        else return retval;
-    }
-
-    /**
-     * Compares two records based on an integer hash of their read names. If the hash
-     * values are equal, falls back to the behaviour of SAMRecordQueryNameComparator
-     * to break the tie.
-     */
-    @Override
-    public int fileOrderCompare(final SAMRecord lhs, final SAMRecord rhs) {
-        final int retval = compareHashes(lhs, rhs);
-        if (retval == 0) return super.fileOrderCompare(lhs, rhs);
-        else return retval;
-    }
-
-    /** Compares the hash values for two records. */
-    private int compareHashes(final SAMRecord lhs, final SAMRecord rhs) {
-        return Integer.compare(this.hasher.hashUnencodedChars(lhs.getReadName()), this.hasher.hashUnencodedChars(rhs.getReadName()));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordQueryNameComparator.java b/src/main/java/htsjdk/samtools/SAMRecordQueryNameComparator.java
deleted file mode 100644
index 7fd97f5..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordQueryNameComparator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-
-/**
- * Comparator for "queryname" ordering of SAMRecords.
- */
-public class SAMRecordQueryNameComparator implements SAMRecordComparator, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        int cmp = fileOrderCompare(samRecord1, samRecord2);
-        if (cmp != 0) {
-            return cmp;
-        }
-
-        final boolean r1Paired = samRecord1.getReadPairedFlag();
-        final boolean r2Paired = samRecord2.getReadPairedFlag();
-
-        if (r1Paired || r2Paired) {
-            if (!r1Paired) return 1;
-            else if (!r2Paired) return -1;
-            else if (samRecord1.getFirstOfPairFlag()  && samRecord2.getSecondOfPairFlag()) return -1;
-            else if (samRecord1.getSecondOfPairFlag() && samRecord2.getFirstOfPairFlag()) return 1;
-        }
-
-        if (samRecord1.getReadNegativeStrandFlag() != samRecord2.getReadNegativeStrandFlag()) {
-            return (samRecord1.getReadNegativeStrandFlag()? 1: -1);
-        }
-        if (samRecord1.getNotPrimaryAlignmentFlag() != samRecord2.getNotPrimaryAlignmentFlag()) {
-            return samRecord2.getNotPrimaryAlignmentFlag()? -1: 1;
-        }
-        if (samRecord1.getSupplementaryAlignmentFlag() != samRecord2.getSupplementaryAlignmentFlag()) {
-            return samRecord2.getSupplementaryAlignmentFlag() ? -1 : 1;
-        }
-        final Integer hitIndex1 = samRecord1.getIntegerAttribute(SAMTag.HI.name());
-        final Integer hitIndex2 = samRecord2.getIntegerAttribute(SAMTag.HI.name());
-        if (hitIndex1 != null) {
-            if (hitIndex2 == null) return 1;
-            else {
-                cmp = hitIndex1.compareTo(hitIndex2);
-                if (cmp != 0) return cmp;
-            }
-        } else if (hitIndex2 != null) return -1;
-        return 0;
-    }
-
-    /**
-     * Less stringent compare method than the regular compare.  If the two records
-     * are equal enough that their ordering in a sorted SAM file would be arbitrary,
-     * this method returns 0.
-     *
-     * @return negative if samRecord1 < samRecord2,  0 if equal, else positive
-     */
-    public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
-        return compareReadNames(samRecord1.getReadName(), samRecord2.getReadName());
-    }
-
-    /**
-     * Encapsulate algorithm for comparing read names in queryname-sorted file, since there have been
-     * conversations about changing the behavior.
-     */
-    public static int compareReadNames(final String readName1, final String readName2) {
-        return readName1.compareTo(readName2);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordSetBuilder.java b/src/main/java/htsjdk/samtools/SAMRecordSetBuilder.java
deleted file mode 100644
index 2af91c3..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordSetBuilder.java
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Random;
-import java.util.TreeSet;
-
-/**
- * Factory class for creating SAMRecords for testing purposes. Various methods can be called
- * to add new SAM records (or pairs of records) to a list which can then be returned at
- * any point. The records must reference human chromosomes (excluding randoms etc.).
- * <p/>
- * Although this is a class for testing, it is in the src tree because it is included in the sam jarfile.
- *
- * @author Tim Fennell
- */
-public class SAMRecordSetBuilder implements Iterable<SAMRecord> {
-    private static final String[] chroms = {
-            "chr1", "chr2", "chr3", "chr4", "chr5", "chr6", "chr7", "chr8", "chr9", "chr10",
-            "chr11", "chr12", "chr13", "chr14", "chr15", "chr16", "chr17", "chr18", "chr19", "chr20",
-            "chr21", "chr22", "chrX", "chrY", "chrM"
-    };
-    private static final byte[] BASES = {'A', 'C', 'G', 'T'};
-    private static final String READ_GROUP_ID = "1";
-    private static final String SAMPLE = "FREE_SAMPLE";
-    private final Random random = new Random();
-
-    private SAMFileHeader header;
-    private final Collection<SAMRecord> records;
-
-    private int readLength = 36;
-
-    private SAMProgramRecord programRecord = null;
-    private SAMReadGroupRecord readGroup = null;
-    private boolean useNmFlag = false;
-
-    private boolean unmappedHasBasesAndQualities = true;
-    
-    public static final int DEFAULT_CHROMOSOME_LENGTH = 200000000;
-
-    public static final ScoringStrategy DEFAULT_DUPLICATE_SCORING_STRATEGY = ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH;
-
-    /**
-     * Constructs a new SAMRecordSetBuilder with all the data needed to keep the records
-     * sorted in coordinate order.
-     */
-    public SAMRecordSetBuilder() {
-        this(true, SAMFileHeader.SortOrder.coordinate);
-    }
-
-    /**
-     * Construct a new SAMRecordSetBuilder.
-     *
-     * @param sortOrder If sortForMe, defines the sort order.
-     * @param sortForMe If true, keep the records created in sorted order.
-     */
-    public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
-        this(sortForMe, sortOrder, true);
-    }
-
-    public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup) {
-        this(sortForMe, sortOrder, addReadGroup, DEFAULT_CHROMOSOME_LENGTH);
-    }
-
-    public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup, final int defaultChromosomeLength) {
-        this(sortForMe, sortOrder, addReadGroup, defaultChromosomeLength, DEFAULT_DUPLICATE_SCORING_STRATEGY);
-    }
-
-    public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup,
-                               final int defaultChromosomeLength, final ScoringStrategy duplicateScoringStrategy) {
-        final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>();
-        for (final String chrom : chroms) {
-            final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord(chrom, defaultChromosomeLength);
-            sequences.add(sequenceRecord);
-        }
-
-        this.header = new SAMFileHeader();
-        this.header.setSequenceDictionary(new SAMSequenceDictionary(sequences));
-        this.header.setSortOrder(sortOrder);
-        if (sortForMe) {
-            final SAMRecordComparator comparator;
-            if (sortOrder == SAMFileHeader.SortOrder.queryname) {
-                comparator = new SAMRecordQueryNameComparator();
-            } else {
-                comparator = new SAMRecordCoordinateComparator();
-            }
-            this.records = new TreeSet<SAMRecord>(comparator);
-        } else {
-            this.records = new ArrayList<SAMRecord>();
-        }
-
-        if (addReadGroup) {
-            final SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(READ_GROUP_ID);
-            readGroupRecord.setSample(SAMPLE);
-            readGroupRecord.setPlatform("ILLUMINA");
-            final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>();
-            readGroups.add(readGroupRecord);
-            this.header.setReadGroups(readGroups);
-        }
-    }
-
-    public void setUnmappedHasBasesAndQualities(final boolean value) {
-        this.unmappedHasBasesAndQualities = value;
-    }
-
-    public int size() {
-        return this.records.size();
-    }
-
-    /**
-     * Set the seed of the random number generator for cases in which repeatable result is desired.
-     *
-     * @param seed
-     */
-    public void setRandomSeed(final long seed) {
-        random.setSeed(seed);
-    }
-
-    /**
-     * Adds the given program record to the header, and assigns the PG tag to any SAMRecords
-     * created after it has been added. May be called multiple times in order to assign different
-     * PG IDs to different SAMRecords.  programRecord may be null to stop assignment of PG tag.
-     * It is up to the caller to ensure that program record IDs do not collide.
-     */
-    public void setProgramRecord(final SAMProgramRecord programRecord) {
-        this.programRecord = programRecord;
-        if (programRecord != null) {
-            this.header.addProgramRecord(programRecord);
-        }
-    }
-
-    public void setUseNmFlag(final boolean useNmFlag) {
-        this.useNmFlag = useNmFlag;
-    }
-
-    public void setReadGroup(final SAMReadGroupRecord readGroup) {
-        this.readGroup = readGroup;
-        if (readGroup != null) {
-            this.header.addReadGroup(readGroup);
-        }
-    }
-
-    /** Returns the accumulated list of sam records. */
-    public Collection<SAMRecord> getRecords() { return this.records; }
-
-    public void setHeader(final SAMFileHeader header) {
-        this.header = header.clone();
-    }
-
-
-    /** The record should already have the DS and MC tags computed */
-    public void addRecord(final SAMRecord record) {
-        if (record.getReadPairedFlag() && !record.getMateUnmappedFlag() &&
-                null == record.getAttribute(SAMTagUtil.getSingleton().MC)) {
-            throw new SAMException("Mate Cigar tag (MC) not found in: " + record.getReadName());
-        }
-        this.records.add(record);
-    }
-
-    /** Returns a CloseableIterator over the collection of SAMRecords. */
-    public CloseableIterator<SAMRecord> iterator() {
-        return new CloseableIterator<SAMRecord>() {
-            private final Iterator<SAMRecord> iterator = records.iterator();
-
-            public void close() { /** Do nothing. */}
-
-            public boolean hasNext() { return this.iterator.hasNext(); }
-
-            public SAMRecord next() { return this.iterator.next(); }
-
-            public void remove() { this.iterator.remove(); }
-        };
-    }
-
-    /**
-     * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
-     * cigar string, quality string or default quality score.  This does not modify the flag field, which should be updated
-     * if desired before adding the return to the list of records.
-     */
-    private SAMRecord createReadNoFlag(final String name, final int contig, final int start, final boolean negativeStrand,
-                                       final boolean recordUnmapped, final String cigar, final String qualityString,
-                                       final int defaultQuality) throws SAMException {
-        final SAMRecord rec = new SAMRecord(this.header);
-        rec.setReadName(name);
-        if (header.getSequenceDictionary().size() <= contig) {
-            throw new SAMException("Contig too big [" + header.getSequenceDictionary().size() + " < " + contig);
-        }
-        if (0 <= contig) {
-            rec.setReferenceIndex(contig);
-            rec.setAlignmentStart(start);
-        }
-        if (!recordUnmapped) {
-            rec.setReadNegativeStrandFlag(negativeStrand);
-            if (null != cigar) {
-                rec.setCigarString(cigar);
-            } else if (!rec.getReadUnmappedFlag()) {
-                rec.setCigarString(readLength + "M");
-            }
-            rec.setMappingQuality(255);
-        } else {
-            rec.setReadUnmappedFlag(true);
-        }
-        rec.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-
-        if(useNmFlag){
-            rec.setAttribute(SAMTag.NM.name(), SequenceUtil.calculateSamNmTagFromCigar(rec));
-        }
-
-        if (programRecord != null) {
-            rec.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
-        }
-
-        if (readGroup != null) {
-            rec.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
-        }
-
-        if (!recordUnmapped || this.unmappedHasBasesAndQualities) {
-        fillInBasesAndQualities(rec, qualityString, defaultQuality);
-        }
-
-        return rec;
-    }
-
-    /**
-     * Adds a skeletal fragment (non-PE) record to the set using the provided
-     * contig start and strand information.
-     */
-    public SAMRecord addFrag(final String name, final int contig, final int start, final boolean negativeStrand) {
-        return addFrag(name, contig, start, negativeStrand, false, null, null, -1);
-    }
-
-    /**
-     * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
-     * cigar string, quality string or default quality score.
-     */
-    public SAMRecord addFrag(final String name, final int contig, final int start, final boolean negativeStrand,
-                             final boolean recordUnmapped, final String cigar, final String qualityString,
-                             final int defaultQuality) throws SAMException {
-        return addFrag(name, contig, start, negativeStrand, recordUnmapped, cigar, qualityString, defaultQuality, false);
-    }
-
-    /**
-     * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
-     * cigar string, quality string or default quality score.
-     */
-    public SAMRecord addFrag(final String name, final int contig, final int start, final boolean negativeStrand,
-                             final boolean recordUnmapped, final String cigar, final String qualityString,
-                             final int defaultQuality, final boolean isSecondary) throws SAMException {
-        final htsjdk.samtools.SAMRecord rec = createReadNoFlag(name, contig, start, negativeStrand, recordUnmapped, cigar, qualityString, defaultQuality);
-        if (isSecondary) rec.setNotPrimaryAlignmentFlag(true);
-        this.records.add(rec);
-        return rec;
-    }
-
-    /**
-     * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
-     * cigar string, quality string or default quality score.
-     */
-    public SAMRecord addFrag(final String name, final int contig, final int start, final boolean negativeStrand,
-                             final boolean recordUnmapped, final String cigar, final String qualityString,
-                             final int defaultQuality, final boolean isSecondary, final boolean isSupplementary) throws SAMException {
-        final htsjdk.samtools.SAMRecord rec = createReadNoFlag(name, contig, start, negativeStrand, recordUnmapped, cigar, qualityString, defaultQuality);
-        if (isSecondary) rec.setNotPrimaryAlignmentFlag(true);
-        if (isSupplementary) rec.setSupplementaryAlignmentFlag(true);
-        this.records.add(rec);
-        return rec;
-    }
-
-
-    /**
-     * Fills in the bases and qualities for the given record. Quality data is randomly generated if the defaultQuality
-     * is set to -1. Otherwise all qualities will be set to defaultQuality. If a quality string is provided that string
-     * will be used instead of the defaultQuality.
-     */
-    private void fillInBasesAndQualities(final SAMRecord rec, final String qualityString, final int defaultQuality) {
-
-        if (null == qualityString) {
-            fillInBasesAndQualities(rec, defaultQuality);
-        } else {
-            fillInBases(rec);
-            rec.setBaseQualityString(qualityString);
-        }
-    }
-
-    /**
-     * Randomly fills in the bases for the given record.
-     */
-    private void fillInBases(final SAMRecord rec) {
-        final int length = this.readLength;
-        final byte[] bases = new byte[length];
-
-        for (int i = 0; i < length; ++i) {
-            bases[i] = BASES[this.random.nextInt(BASES.length)];
-        }
-
-        rec.setReadBases(bases);
-    }
-
-    /**
-     * Adds an unmapped fragment read to the builder.
-     */
-    public void addUnmappedFragment(final String name) {
-        addFrag(name, -1, -1, false, true, null, null, -1, false);
-    }
-
-
-    /**
-     * Adds a skeletal pair of records to the set using the provided
-     * contig starts.  The pair is assumed to be a well
-     * formed pair sitting on a single contig.
-     */
-    public void addPair(final String name, final int contig, final int start1, final int start2) {
-        final SAMRecord end1 = new SAMRecord(this.header);
-        final SAMRecord end2 = new SAMRecord(this.header);
-        final boolean end1IsFirstOfPair = this.random.nextBoolean();
-
-        end1.setReadName(name);
-        end1.setReferenceIndex(contig);
-        end1.setAlignmentStart(start1);
-        end1.setReadNegativeStrandFlag(false);
-        end1.setCigarString(readLength + "M");
-        if(useNmFlag) end1.setAttribute(ReservedTagConstants.NM, 0);
-        end1.setMappingQuality(255);
-        end1.setReadPairedFlag(true);
-        end1.setProperPairFlag(true);
-        end1.setMateReferenceIndex(contig);
-        end1.setAttribute(SAMTag.MC.name(), readLength + "M");
-        end1.setMateAlignmentStart(start2);
-        end1.setMateNegativeStrandFlag(true);
-        end1.setFirstOfPairFlag(end1IsFirstOfPair);
-        end1.setSecondOfPairFlag(!end1IsFirstOfPair);
-        end1.setInferredInsertSize((int) CoordMath.getLength(start1, CoordMath.getEnd(start2, this.readLength)));
-        end1.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-        if (programRecord != null) {
-            end1.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
-        }
-        if (readGroup != null) {
-            end1.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
-        }
-        fillInBasesAndQualities(end1);
-
-        end2.setReadName(name);
-        end2.setReferenceIndex(contig);
-        end2.setAlignmentStart(start2);
-        end2.setReadNegativeStrandFlag(true);
-        end2.setCigarString(readLength + "M");
-        if(useNmFlag) end2.setAttribute(ReservedTagConstants.NM,0);
-        end2.setMappingQuality(255);
-        end2.setReadPairedFlag(true);
-        end2.setProperPairFlag(true);
-        end2.setMateReferenceIndex(contig);
-        end2.setAttribute(SAMTag.MC.name(), readLength + "M");
-        end2.setMateAlignmentStart(start1);
-        end2.setMateNegativeStrandFlag(false);
-        end2.setFirstOfPairFlag(!end1IsFirstOfPair);
-        end2.setSecondOfPairFlag(end1IsFirstOfPair);
-        end2.setInferredInsertSize(end1.getInferredInsertSize());
-        end2.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-        if (programRecord != null) {
-            end2.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
-        }
-        if (readGroup != null) {
-            end2.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
-        }
-        fillInBasesAndQualities(end2);
-
-        this.records.add(end1);
-        this.records.add(end2);
-    }
-
-    /**
-     * Adds a pair of records (mapped or unmmapped) to the set using the provided contig starts.
-     * The pair is assumed to be a well formed pair sitting on a single contig.
-     */
-    public List<SAMRecord> addPair(final String name, final int contig, final int start1, final int start2,
-                                   final boolean record1Unmapped, final boolean record2Unmapped, final String cigar1,
-                                   final String cigar2, final boolean strand1, final boolean strand2, final int defaultQuality) {
-        return this.addPair(name, contig, contig, start1, start2, record1Unmapped, record2Unmapped, cigar1, cigar2, strand1, strand2, false, false, defaultQuality);
-    }
-
-    /**
-     * Adds a pair of records (mapped or unmmapped) to the set using the provided contig starts.
-     * The pair is assumed to be a well formed pair sitting on a single contig.
-     */
-    public List<SAMRecord> addPair(final String name, final int contig1, final int contig2, final int start1, final int start2,
-                                   final boolean record1Unmapped, final boolean record2Unmapped, final String cigar1,
-                                   final String cigar2, final boolean strand1, final boolean strand2, final boolean record1NonPrimary,
-                                   final boolean record2NonPrimary, final int defaultQuality) {
-        final List<SAMRecord> recordsList = new LinkedList<SAMRecord>();
-
-        final SAMRecord end1 = createReadNoFlag(name, contig1, start1, strand1, record1Unmapped, cigar1, null, defaultQuality);
-        final SAMRecord end2 = createReadNoFlag(name, contig2, start2, strand2, record2Unmapped, cigar2, null, defaultQuality);
-
-        end1.setReadPairedFlag(true);
-        end1.setFirstOfPairFlag(true);
-
-        if (!record1Unmapped && !record2Unmapped) {
-            end1.setProperPairFlag(true);
-            end2.setProperPairFlag(true);
-        }
-        end2.setReadPairedFlag(true);
-        end2.setSecondOfPairFlag(true);
-
-        if (record1NonPrimary) end1.setNotPrimaryAlignmentFlag(true);
-        if (record2NonPrimary) end2.setNotPrimaryAlignmentFlag(true);
-
-        if (record1NonPrimary) end1.setNotPrimaryAlignmentFlag(true);
-        if (record2NonPrimary) end2.setNotPrimaryAlignmentFlag(true);
-
-        // set mate info
-        SamPairUtil.setMateInfo(end1, end2, true);
-
-        recordsList.add(end1);
-        recordsList.add(end2);
-
-        records.add(end1);
-        records.add(end2);
-
-        return recordsList;
-    }
-
-    /**
-     * Adds a pair of records (mapped or unmmapped) to the set using the provided contig starts.
-     * The pair is assumed to be a well formed pair sitting on a single contig.
-     */
-    public List<SAMRecord> addPair(final String name, final int contig, final int start1, final int start2,
-                                   final boolean record1Unmapped, final boolean record2Unmapped, final String cigar1,
-                                   final String cigar2, final boolean strand1, final boolean strand2, final boolean record1NonPrimary,
-                                   final boolean record2NonPrimary, final int defaultQuality) {
-        return addPair(name, contig, contig, start1, start2, record1Unmapped, record2Unmapped, cigar1, cigar2, strand1, strand2,
-                record1NonPrimary, record2NonPrimary, defaultQuality);
-    }
-
-    /**
-     * Adds a pair with both ends unmapped to the builder.
-     */
-    public void addUnmappedPair(final String name) {
-        final SAMRecord end1 = new SAMRecord(this.header);
-        final SAMRecord end2 = new SAMRecord(this.header);
-        final boolean end1IsFirstOfPair = this.random.nextBoolean();
-
-        end1.setReadName(name);
-        end1.setReadPairedFlag(true);
-        end1.setReadUnmappedFlag(true);
-        end1.setAttribute(SAMTag.MC.name(), null);
-        end1.setProperPairFlag(false);
-        end1.setFirstOfPairFlag(end1IsFirstOfPair);
-        end1.setSecondOfPairFlag(!end1IsFirstOfPair);
-        end1.setMateUnmappedFlag(true);
-        end1.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-        if (programRecord != null) {
-            end1.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
-        }
-        if (this.unmappedHasBasesAndQualities) {
-        fillInBasesAndQualities(end1);
-        }
-
-        end2.setReadName(name);
-        end2.setReadPairedFlag(true);
-        end2.setReadUnmappedFlag(true);
-        end2.setAttribute(SAMTag.MC.name(), null);
-        end2.setProperPairFlag(false);
-        end2.setFirstOfPairFlag(!end1IsFirstOfPair);
-        end2.setSecondOfPairFlag(end1IsFirstOfPair);
-        end2.setMateUnmappedFlag(true);
-        end2.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-        if (programRecord != null) {
-            end2.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
-        }
-        if (this.unmappedHasBasesAndQualities) {
-        fillInBasesAndQualities(end2);
-        }
-
-        this.records.add(end1);
-        this.records.add(end2);
-    }
-
-    /**
-     * Fills in bases and qualities with randomly generated data.
-     * Relies on the alignment start and end having been set to get read length.
-     */
-    private void fillInBasesAndQualities(final SAMRecord rec) {
-        fillInBasesAndQualities(rec, -1);
-    }
-
-    /**
-     * Fills in bases and qualities with a set default quality. If the defaultQuality is set to -1 quality scores will
-     * be randomly generated.
-     * Relies on the alignment start and end having been set to get read length.
-     */
-    private void fillInBasesAndQualities(final SAMRecord rec, final int defaultQuality) {
-        final int length = this.readLength;
-        final byte[] quals = new byte[length];
-
-        if (-1 != defaultQuality) {
-            Arrays.fill(quals, (byte) defaultQuality);
-        } else {
-            for (int i = 0; i < length; ++i) {
-                quals[i] = (byte) this.random.nextInt(50);
-            }
-        }
-        rec.setBaseQualities(quals);
-        fillInBases(rec);
-    }
-
-    /**
-     * Creates samFileReader from the data in instance of this class
-     *
-     * @return SamReader
-     */
-    public SamReader getSamReader() {
-
-        final File tempFile;
-
-        try {
-            tempFile = File.createTempFile("temp", ".sam");
-        } catch (final IOException e) {
-            throw new RuntimeIOException("problems creating tempfile", e);
-        }
-
-        this.header.setAttribute("VN", "1.0");
-        final SAMFileWriter w = new SAMFileWriterFactory().makeBAMWriter(this.header, true, tempFile);
-        for (final SAMRecord r : this.getRecords()) {
-            w.addAlignment(r);
-        }
-
-        w.close();
-
-        final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(tempFile);
-        tempFile.deleteOnExit();
-
-        return reader;
-    }
-
-    public SAMFileHeader getHeader() {
-        return header;
-    }
-
-    public void setReadLength(final int readLength) { this.readLength = readLength; }
-
-}
diff --git a/src/main/java/htsjdk/samtools/SAMRecordUtil.java b/src/main/java/htsjdk/samtools/SAMRecordUtil.java
deleted file mode 100644
index d778789..0000000
--- a/src/main/java/htsjdk/samtools/SAMRecordUtil.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.SequenceUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-/**
- *
- * Use {@link SAMRecord#reverseComplement()} instead, which defaults to making a copy of attributes for reverse
- * complement rather than changing them in-place.
- *
- * @author alecw at broadinstitute.org
- */
- at Deprecated
-public class SAMRecordUtil {
-    public static List<String> TAGS_TO_REVERSE_COMPLEMENT = Arrays.asList(SAMTag.E2.name(), SAMTag.SQ.name());
-    public static List<String> TAGS_TO_REVERSE            = Arrays.asList(SAMTag.OQ.name(), SAMTag.U2.name());
-
-    /**
-     * Reverse-complement bases and reverse quality scores along with known optional attributes that
-     * need the same treatment. Changes made in-place, instead of making a copy of the bases, qualities,
-     * or attributes. If a copy is needed use {@link #reverseComplement(SAMRecord, boolean)}.
-     * See {@link #TAGS_TO_REVERSE_COMPLEMENT} {@link #TAGS_TO_REVERSE}
-     * for the default set of tags that are handled.
-     */
-    public static void reverseComplement(final SAMRecord rec) {
-        rec.reverseComplement(TAGS_TO_REVERSE_COMPLEMENT, TAGS_TO_REVERSE, true);
-    }
-
-    /**
-     * Reverse-complement bases and reverse quality scores along with known optional attributes that
-     * need the same treatment. Optionally makes a copy of the bases, qualities or attributes instead
-     * of altering them in-place. See {@link #TAGS_TO_REVERSE_COMPLEMENT} {@link #TAGS_TO_REVERSE}
-     * for the default set of tags that are handled.
-     *
-     * @param rec Record to reverse complement.
-     * @param inplace Setting this to false will clone all attributes, bases and qualities before changing the values.
-     */
-    public static void reverseComplement(final SAMRecord rec, boolean inplace) {
-        rec.reverseComplement(TAGS_TO_REVERSE_COMPLEMENT, TAGS_TO_REVERSE, inplace);
-    }
-
-    /**
-     * Reverse complement bases and reverse quality scores. In addition reverse complement any
-     * non-null attributes specified by tagsToRevcomp and reverse and non-null attributes
-     * specified by tagsToReverse.
-     */
-    public static void reverseComplement(final SAMRecord rec, final Collection<String> tagsToRevcomp, final Collection<String> tagsToReverse, boolean inplace) {
-        rec.reverseComplement(tagsToRevcomp, tagsToReverse, inplace);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMSequenceDictionary.java b/src/main/java/htsjdk/samtools/SAMSequenceDictionary.java
deleted file mode 100644
index b7744d7..0000000
--- a/src/main/java/htsjdk/samtools/SAMSequenceDictionary.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.Log;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.util.*;
-import java.util.stream.Collector;
-import java.util.stream.Collectors;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import static htsjdk.samtools.SAMSequenceRecord.*;
-import static java.util.stream.Collectors.toList;
-
-/**
- * Collection of SAMSequenceRecords.
- */
- at XmlRootElement(name="References")
-public class SAMSequenceDictionary implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    /* xml Serialization , for `m_sequence` we use the field instead of the
-    getter because the later wraps the list into an unmodifiable List 
-    see http://tech.joshuacummings.com/2010/10/problems-with-defensive-collection.html */
-    @XmlElement(name="Reference")
-    private List<SAMSequenceRecord> mSequences = new ArrayList<SAMSequenceRecord>();
-    private final Map<String, SAMSequenceRecord> mSequenceMap = new HashMap<String, SAMSequenceRecord>();
-
-    public SAMSequenceDictionary() {
-    }
-
-    public SAMSequenceDictionary(final List<SAMSequenceRecord> list) {
-        this();
-        setSequences(list);
-    }
-
-    @XmlTransient //we use the field instead of getter/setter
-    public List<SAMSequenceRecord> getSequences() {
-        return Collections.unmodifiableList(mSequences);
-    }
-
-    private static Log log = Log.getInstance(SAMSequenceDictionary.class);
-
-    public SAMSequenceRecord getSequence(final String name) {
-        return mSequenceMap.get(name);
-    }
-
-    /**
-     * Replaces the existing list of SAMSequenceRecords with the given list.
-     * Reset the aliases
-     *
-     * @param list This value is used directly, rather than being copied.
-     */
-    public void setSequences(final List<SAMSequenceRecord> list) {
-        mSequences = list;
-        mSequenceMap.clear();
-        int index = 0;
-        for (final SAMSequenceRecord record : list) {
-            record.setSequenceIndex(index++);
-            if (mSequenceMap.put(record.getSequenceName(), record) != null) {
-                throw new IllegalArgumentException("Cannot add sequence that already exists in SAMSequenceDictionary: " +
-                        record.getSequenceName());
-            }
-        }
-    }
-
-    public void addSequence(final SAMSequenceRecord sequenceRecord) {
-        if (mSequenceMap.containsKey(sequenceRecord.getSequenceName())) {
-            throw new IllegalArgumentException("Cannot add sequence that already exists in SAMSequenceDictionary: " +
-                    sequenceRecord.getSequenceName());
-        }
-        sequenceRecord.setSequenceIndex(mSequences.size());
-        mSequences.add(sequenceRecord);
-        mSequenceMap.put(sequenceRecord.getSequenceName(), sequenceRecord);
-    }
-
-    /**
-     * @return The SAMSequenceRecord with the given index, or null if index is out of range.
-     */
-    public SAMSequenceRecord getSequence(final int sequenceIndex) {
-        if (sequenceIndex < 0 || sequenceIndex >= mSequences.size()) {
-            return null;
-        }
-        return mSequences.get(sequenceIndex);
-    }
-
-    /**
-     * @return The index for the given sequence name, or -1 if the name is not found.
-     */
-    public int getSequenceIndex(final String sequenceName) {
-        final SAMSequenceRecord record = mSequenceMap.get(sequenceName);
-        if (record == null) {
-            return -1;
-        }
-        return record.getSequenceIndex();
-    }
-
-    /**
-     * @return number of SAMSequenceRecord(s) in this dictionary
-     */
-    public int size() {
-        return mSequences.size();
-    }
-
-    /**
-     * @return The sum of the lengths of the sequences in this dictionary
-     */
-    public long getReferenceLength() {
-        long len = 0L;
-        for (final SAMSequenceRecord seq : getSequences()) {
-            len += seq.getSequenceLength();
-        }
-        return len;
-    }
-
-    /**
-     * @return true is the dictionary is empty
-     */
-    public boolean isEmpty() {
-        return mSequences.isEmpty();
-    }
-
-    private static String DICT_MISMATCH_TEMPLATE = "SAM dictionaries are not the same: %s.";
-    /**
-     * Non-comprehensive {@link #equals(Object)}-assertion: instead of calling {@link SAMSequenceRecord#equals(Object)} on constituent
-     * {@link SAMSequenceRecord}s in this dictionary against its pair in the target dictionary, in order,  call
-     * {@link SAMSequenceRecord#isSameSequence(SAMSequenceRecord)}.
-     * Aliases are ignored.
-     *
-     * @throws AssertionError When the dictionaries are not the same, with some human-readable information as to why
-     */
-    public void assertSameDictionary(final SAMSequenceDictionary that) {
-        if (this == that) return;
-
-        final Iterator<SAMSequenceRecord> thatSequences = that.mSequences.iterator();
-        for (final SAMSequenceRecord thisSequence : mSequences) {
-            if (!thatSequences.hasNext())
-                throw new AssertionError(String.format(DICT_MISMATCH_TEMPLATE, thisSequence + " is present in only one dictionary"));
-            else {
-                final SAMSequenceRecord thatSequence = thatSequences.next();
-                if(!thatSequence.isSameSequence(thisSequence))
-                    throw new AssertionError(
-                            String.format(DICT_MISMATCH_TEMPLATE, thatSequence + " was found when " + thisSequence + " was expected")
-                    );
-            }
-        }
-        if (thatSequences.hasNext())
-            throw new AssertionError(String.format(DICT_MISMATCH_TEMPLATE, thatSequences.next() + " is present in only one dictionary"));
-    }
-
-    /** returns true if the two dictionaries are the same, aliases are NOT considered */
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        SAMSequenceDictionary that = (SAMSequenceDictionary) o;
-
-        if (!mSequences.equals(that.mSequences)) return false;
-
-        return true;
-    }
-
-    /**
-     * Add an alias to a SAMSequenceRecord. This can be use to provide some
-     * alternate names fo a given contig. e.g:
-     * <code>1,chr1,chr01,01,CM000663,NC_000001.10</code> e.g:
-     * <code>MT,chrM</code>
-     *
-     * @param originalName
-     *            existing contig name
-     * @param altName
-     *            new contig name
-     * @return the contig associated to the 'originalName/altName'
-     */
-    public SAMSequenceRecord addSequenceAlias(final String originalName,
-            final String altName) {
-        if (originalName == null) throw new IllegalArgumentException("original name cannot be null");
-        if (altName == null) throw new IllegalArgumentException("alt name cannot be null");
-        final SAMSequenceRecord originalSeqRecord = getSequence(originalName);
-        if (originalSeqRecord == null) throw new IllegalArgumentException("Sequence " + originalName + " doesn't exist in dictionary.");
-        // same name, nothing to do
-        if (originalName.equals(altName)) return originalSeqRecord;
-        final SAMSequenceRecord altSeqRecord = getSequence(altName);
-        if (altSeqRecord != null) {
-            // alias was already set to the same record
-            if (altSeqRecord.equals(originalSeqRecord)) return originalSeqRecord;
-            // alias was already set to another record
-            throw new IllegalArgumentException("Alias " + altName +
-                    " was already set to " + altSeqRecord.getSequenceName());
-        }
-        mSequenceMap.put(altName, originalSeqRecord);
-        return originalSeqRecord;
-    }
-
-    /**
-     * return a MD5 sum for ths dictionary, the checksum is re-computed each
-     * time this method is called.
-     *
-     * <pre>
-     * md5( (seq1.md5_if_available) + ' '+(seq2.name+seq2.length) + ' '+...)
-     * </pre>
-     *
-     * @return a MD5 checksum for this dictionary or the empty string if it is
-     *         empty
-     */
-    public String md5() {
-        if (isEmpty())
-            return "";
-        try {
-            final MessageDigest md5 = MessageDigest.getInstance("MD5");
-            md5.reset();
-            for (final SAMSequenceRecord samSequenceRecord : mSequences) {
-                if (samSequenceRecord.getSequenceIndex() > 0)
-                    md5.update((byte) ' ');
-                final String md5_tag = samSequenceRecord.getAttribute(SAMSequenceRecord.MD5_TAG);
-                if (md5_tag != null) {
-                    md5.update(md5_tag.getBytes());
-                } else {
-                    md5.update(samSequenceRecord.getSequenceName().getBytes());
-                    md5.update(String.valueOf(samSequenceRecord.getSequenceLength()).getBytes());
-                }
-            }
-            String hash = new BigInteger(1, md5.digest()).toString(16);
-            if (hash.length() != 32) {
-                final String zeros = "00000000000000000000000000000000";
-                hash = zeros.substring(0, 32 - hash.length()) + hash;
-            }
-            return hash;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return mSequences.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return "SAMSequenceDictionary:( sequences:"+ size()+
-                " length:"+ getReferenceLength()+" "+
-                " md5:"+md5()+")";
-    }
-
-    public static final List<String> DEFAULT_DICTIONARY_EQUAL_TAG = Arrays.asList(
-            SAMSequenceRecord.MD5_TAG,
-            SAMSequenceRecord.SEQUENCE_LENGTH_TAG);
-
-    /**
-     * Will merge dictionaryTags from two dictionaries into one focusing on merging the tags rather than the sequences.
-     *
-     * Requires that dictionaries have the same SAMSequence records in the same order.
-     * For each sequenceIndex, the union of the tags from both sequences will be added to the new sequence, mismatching
-     * values (for tags that are in both) will generate a warning, and the value from dict1 will be used.
-     * For tags that are in tagsToEquate an unequal value will generate an error (an IllegalArgumentException will
-     * be thrown.) tagsToEquate must include LN and MD.
-     *
-     * @param dict1 first dictionary
-     * @param dict2 first dictionary
-     * @param tagsToMatch list of tags that must be equal if present in both sequence. Must contain MD, and LN
-     * @return dictionary consisting of the same sequences as the two inputs with the merged values of tags.
-     */
-    static public SAMSequenceDictionary mergeDictionaries(final SAMSequenceDictionary dict1,
-                                                          final SAMSequenceDictionary dict2,
-                                                          final List<String> tagsToMatch) {
-
-        // We require MD and LN to match.
-        if (!tagsToMatch.contains(MD5_TAG) || !tagsToMatch.contains(SEQUENCE_LENGTH_TAG)) {
-            throw new IllegalArgumentException("Both " + MD5_TAG + " and " + SEQUENCE_LENGTH_TAG + " must be matched " +
-                    "when merging dictionaries. Found: " + String.join(",", tagsToMatch));
-        }
-
-        if (!dict1.getSequences().stream().map(SAMSequenceRecord::getSequenceName).collect(Collectors.toList()).equals(
-                dict2.getSequences().stream().map(SAMSequenceRecord::getSequenceName).collect(Collectors.toList()))) {
-
-            throw new IllegalArgumentException(String.format("Do not use this function to merge dictionaries with " +
-                            "different sequences in them. Sequences must be in the same order as well. Found [%s] and [%s].",
-                    String.join(", ", dict1.getSequences().stream().map(SAMSequenceRecord::getSequenceName).collect(toList())),
-                    String.join(", ", dict2.getSequences().stream().map(SAMSequenceRecord::getSequenceName).collect(toList()))));
-        }
-
-        final SAMSequenceDictionary finalDict = new SAMSequenceDictionary();
-        for (int sequenceIndex = 0; sequenceIndex < dict1.getSequences().size(); sequenceIndex++) {
-            final SAMSequenceRecord s1 = dict1.getSequence(sequenceIndex);
-            final SAMSequenceRecord s2 = dict2.getSequence(sequenceIndex);
-
-            final String sName = s1.getSequenceName();
-            final SAMSequenceRecord sMerged = new SAMSequenceRecord(sName, UNKNOWN_SEQUENCE_LENGTH);
-            finalDict.addSequence(sMerged);
-
-            final Set<String> allTags = new HashSet<>();
-            s1.getAttributes().stream().forEach(a -> allTags.add(a.getKey()));
-            s2.getAttributes().stream().forEach(a -> allTags.add(a.getKey()));
-
-            for (final String tag : allTags) {
-                final String value1 = s1.getAttribute(tag);
-                final String value2 = s2.getAttribute(tag);
-
-                if (value1 != null && value2 != null && !value1.equals(value2)) {
-                    String baseMessage = String.format("Found sequence entry for which " +
-                                    "tags differ: %s and tag %s has the two values: %s and %s.",
-                            sName, tag, value1, value2);
-
-                    if (tagsToMatch.contains(tag)) {
-                        log.error("Cannot merge dictionaries. ", baseMessage);
-                        throw new IllegalArgumentException("Cannot merge dictionaries. " + baseMessage);
-                    } else {
-                        log.warn(baseMessage, " Using ", value1);
-                    }
-                }
-                sMerged.setAttribute(tag, value1 == null ? value2 : value1);
-            }
-
-            final int length1 = s1.getSequenceLength();
-            final int length2 = s2.getSequenceLength();
-
-            if (length1 != UNKNOWN_SEQUENCE_LENGTH && length2 != UNKNOWN_SEQUENCE_LENGTH && length1 != length2) {
-                throw new IllegalArgumentException(String.format("Cannot merge the two dictionaries. " +
-                        "Found sequence entry for which " + "lengths differ: %s has lengths %s and %s", sName, length1, length2));
-            }
-            sMerged.setSequenceLength(length1 == UNKNOWN_SEQUENCE_LENGTH ? length2 : length1);
-        }
-        return finalDict;
-    }
-}
-
diff --git a/src/main/java/htsjdk/samtools/SAMSequenceDictionaryCodec.java b/src/main/java/htsjdk/samtools/SAMSequenceDictionaryCodec.java
deleted file mode 100644
index e6e3ba5..0000000
--- a/src/main/java/htsjdk/samtools/SAMSequenceDictionaryCodec.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.LineReader;
-import java.io.BufferedWriter;
-
-/**
- * "On the fly" codec SAMSequenceDictionaryCodec.
- * Encodes each sequence and directly writes it to the Dictionary file.
- *
- * To use this class you should provide BufferedWriter to it, and so you should close it as you stop using this class.
- * You can work with this class as shown below.
- *
- * Example of using this class:
- *
- * List<SAMSequenceRecord> dict = ...;
- *
- * //open BufferedReader and close in try-with-resources
- * try(BufferedWriter writer = new BufferedWriter(new FileWriter("path/to/file"))) {
- *      SAMSequenceDictionaryCodec codec = new SAMSequenceDictionaryCodec(writer);
- *
- *      //we have list of sequences, so encode header line and after that encode each sequence
- *      codec.encodeHeaderLine(false);
- *      dict.forEach(codec::encodeSequenceRecord);
- *}
- *
- * or
- *
- * SAMSequenceDictionary dict = ...;
- *
- * //open BufferedReader and close in try-with-resources
- * try(BufferedWriter writer = new BufferedWriter(new FileWriter("path/to/file"))) {
- *      SAMSequenceDictionaryCodec codec = new SAMSequenceDictionaryCodec(writer);
- *
- *      //we have complete {@link SAMSequenceDictionary}, so just encode it.
- *      codec.encode(dict);
- *}
- *
- * @author Pavel_Silin at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-public class SAMSequenceDictionaryCodec {
-
-    private static final SAMFileHeader EMPTY_HEADER = new SAMFileHeader();
-
-    private final SAMTextHeaderCodec codec;
-
-    public SAMSequenceDictionaryCodec(final BufferedWriter writer) {
-        codec = new SAMTextHeaderCodec();
-        codec.setmFileHeader(EMPTY_HEADER);
-        codec.setWriter(writer);
-    }
-
-    /**
-     * Write {@link SAMSequenceRecord}.
-     * @param sequenceRecord object to be converted to text.
-     */
-    public void encodeSequenceRecord(final SAMSequenceRecord sequenceRecord) {
-        codec.encodeSequenceRecord(sequenceRecord);
-    }
-
-    /**
-     * Write Header line.
-     * @param keepExistingVersionNumber boolean flag to keep existing version number.
-     */
-    public void encodeHeaderLine(final boolean keepExistingVersionNumber) {
-        codec.encodeHeaderLine(keepExistingVersionNumber);
-    }
-
-    /**
-     * Reads text SAM header and converts to a SAMSequenceDictionary object.
-     * @param reader Where to get header text from.
-     * @param source Name of the input file, for error messages.  May be null.
-     * @return complete SAMSequenceDictionary object.
-     */
-    public SAMSequenceDictionary decode(final LineReader reader, final String source) {
-       return codec.decode(reader, source).getSequenceDictionary();
-    }
-
-    /**
-     * Convert {@link SAMSequenceDictionary} from in-memory representation to text representation.
-     * @param dictionary object to be converted to text.
-     */
-    public void encode(final SAMSequenceDictionary dictionary) {
-        codec.encodeHeaderLine(false);
-        dictionary.getSequences().forEach(this::encodeSequenceRecord);
-    }
-
-    public void setValidationStringency(final ValidationStringency validationStringency) {
-        codec.setValidationStringency(validationStringency);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMSequenceRecord.java b/src/main/java/htsjdk/samtools/SAMSequenceRecord.java
deleted file mode 100644
index 6bca979..0000000
--- a/src/main/java/htsjdk/samtools/SAMSequenceRecord.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.math.BigInteger;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlValue;
-
-/**
- * Header information about a reference sequence.  Corresponds to @SQ header record in SAM text header.
- */
- at XmlRootElement(name="Reference")
-public class SAMSequenceRecord extends AbstractSAMHeaderRecord implements Cloneable
-{
-    public static final long serialVersionUID = 1L; // AbstractSAMHeaderRecord implements Serializable
-    private String mSequenceName = null; // Value must be interned() if it's ever set/modified
-    private int mSequenceIndex = -1;
-    private int mSequenceLength = 0;
-    public static final String SEQUENCE_NAME_TAG = "SN";
-    public static final String SEQUENCE_LENGTH_TAG = "LN";
-    public static final String MD5_TAG = "M5";
-    public static final String ASSEMBLY_TAG = "AS";
-    public static final String URI_TAG = "UR";
-    public static final String SPECIES_TAG = "SP";
-
-    /** If one sequence has this length, and another sequence had a different length, isSameSequence will
-     * not complain that they are different sequences. */
-    public static final int UNKNOWN_SEQUENCE_LENGTH = 0;
-
-
-    /**
-     * This is not a valid sequence name, because it is reserved in the MRNM field of SAM text format
-     * to mean "same reference as RNAME field."
-     */
-    public static final String RESERVED_MRNM_SEQUENCE_NAME = "=";
-
-    /**
-     * The standard tags are stored in text header without type information, because the type of these tags is known.
-     */
-    public static final Set<String> STANDARD_TAGS =
-            new HashSet<String>(Arrays.asList(SEQUENCE_NAME_TAG, SEQUENCE_LENGTH_TAG, ASSEMBLY_TAG, MD5_TAG, URI_TAG,
-                                                SPECIES_TAG));
-
-    // Split on any whitespace
-    private static Pattern SEQUENCE_NAME_SPLITTER = Pattern.compile("\\s");
-    // These are the chars matched by \\s.
-    private static char[] WHITESPACE_CHARS = {' ', '\t', '\n', '\013', '\f', '\r'}; // \013 is vertical tab
-
-    /** a (private) empty constructor is required for JAXB.XML-serialisation */
-    @SuppressWarnings("unused")
-    private SAMSequenceRecord() {
-    }
-    
-    /**
-     * @deprecated Use {@link #SAMSequenceRecord(String, int)} instead.
-     * sequenceLength is required for the object to be considered valid.
-     */
-    @Deprecated
-    public SAMSequenceRecord(final String name) {
-        this(name, UNKNOWN_SEQUENCE_LENGTH);
-    }
-
-    public SAMSequenceRecord(final String name, final int sequenceLength) {
-        if (name != null) {
-            if (SEQUENCE_NAME_SPLITTER.matcher(name).find()) {
-                throw new SAMException("Sequence name contains invalid character: " + name);
-            }
-            validateSequenceName(name);
-            mSequenceName = name.intern();
-        }
-        mSequenceLength = sequenceLength;
-    }
-    
-    @XmlValue
-    public String getSequenceName() { return mSequenceName; }
-   
-    /* this private method is used by XML serialization */
-    @SuppressWarnings("unused")
-    private void setSequenceName(final String name) {
-        if (name != null) {
-            mSequenceName = name.intern();
-        }
-        else {
-            mSequenceName = null;
-        }
-    }
-    
-    @XmlAttribute(name="length")
-    public int getSequenceLength() { return mSequenceLength; }
-    public void setSequenceLength(final int value) { mSequenceLength = value; }
-
-    @XmlAttribute(name="assembly")
-    public String getAssembly() { return (String) getAttribute(ASSEMBLY_TAG); }
-    public void setAssembly(final String value) { setAttribute(ASSEMBLY_TAG, value); }
-
-    @XmlAttribute(name="species")
-    public String getSpecies() { return (String) getAttribute(SPECIES_TAG); }
-    public void setSpecies(final String value) { setAttribute(SPECIES_TAG, value); }
-
-    @XmlAttribute(name="md5")
-    public String getMd5() { return (String) getAttribute(MD5_TAG); }
-    public void setMd5(final String value) { setAttribute(MD5_TAG, value); }
-
-    /**
-     * @return Index of this record in the sequence dictionary it lives in. 
-     */
-    @XmlAttribute(name="index")
-    public int getSequenceIndex() { return mSequenceIndex; }
-
-    // Private state used only by SAM implementation.
-    public void setSequenceIndex(final int value) { mSequenceIndex = value; }
-
-    /**
-     * Looser comparison than equals().  We look only at sequence index, sequence length, and MD5 tag value
-     * (or sequence names, if there is no MD5 tag in either record.
-     */
-    public boolean isSameSequence(final SAMSequenceRecord that) {
-        if (this == that) return true;
-        if (that == null) return false;
-
-        if (mSequenceIndex != that.mSequenceIndex) return false;
-        // PIC-439.  Allow undefined length.
-        if (mSequenceLength != UNKNOWN_SEQUENCE_LENGTH && that.mSequenceLength != UNKNOWN_SEQUENCE_LENGTH && mSequenceLength != that.mSequenceLength)
-            return false;
-        if (this.getAttribute(SAMSequenceRecord.MD5_TAG) != null && that.getAttribute(SAMSequenceRecord.MD5_TAG) != null) {
-            final BigInteger thisMd5 = new BigInteger((String)this.getAttribute(SAMSequenceRecord.MD5_TAG), 16);
-            final BigInteger thatMd5 = new BigInteger((String)that.getAttribute(SAMSequenceRecord.MD5_TAG), 16);
-            if (!thisMd5.equals(thatMd5)) {
-                return false;
-            }
-        }
-        else {
-            if (mSequenceName != that.mSequenceName) return false; // Compare using == since we intern() the Strings
-        }
-
-        return true;
-    }
-
-    private URI makeURI(final String s) throws URISyntaxException {
-        URI uri = new URI(s);
-        if (uri.getScheme() == null) {
-            uri = new URI("file", uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment());
-        }
-        return uri;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (!(o instanceof SAMSequenceRecord)) return false;
-
-        final SAMSequenceRecord that = (SAMSequenceRecord) o;
-
-        if (mSequenceIndex != that.mSequenceIndex) return false;
-        if (mSequenceLength != that.mSequenceLength) return false;
-        if (!attributesEqual(that)) return false;
-        if (mSequenceName != that.mSequenceName) return false; // Compare using == since we intern() the name
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return mSequenceName != null ? mSequenceName.hashCode() : 0;
-    }
-
-    Set<String> getStandardTags() {
-        return STANDARD_TAGS;
-    }
-
-    public final SAMSequenceRecord clone() {
-        final SAMSequenceRecord ret = new SAMSequenceRecord(this.mSequenceName, this.mSequenceLength);
-        ret.mSequenceIndex = this.mSequenceIndex;
-        for (final Map.Entry<String, String> entry : this.getAttributes()) {
-            ret.setAttribute(entry.getKey(), entry.getValue());
-        }
-        return ret;
-    }
-
-    /**
-     * Truncate sequence name at first whitespace.
-     */
-    public static String truncateSequenceName(final String sequenceName) {
-        /*
-         * Instead of using regex split, do it manually for better performance.
-        return SEQUENCE_NAME_SPLITTER.split(sequenceName, 2)[0];
-        */
-        int truncateAt = sequenceName.length();
-        for (final char c : WHITESPACE_CHARS) {
-            int index = sequenceName.indexOf(c);
-            if (index != -1 && index < truncateAt) {
-                truncateAt = index;
-            }
-        }
-        return sequenceName.substring(0, truncateAt);
-    }
-
-    /**
-     * Throw an exception if the sequence name is not valid.
-     */
-    public static void validateSequenceName(final String name) {
-        if (RESERVED_MRNM_SEQUENCE_NAME.equals(name)) {
-            throw new SAMException("'" + RESERVED_MRNM_SEQUENCE_NAME + "' is not a valid sequence name");
-        }
-    }
-
-    @Override
-    public String toString() {
-        return String.format(
-                "SAMSequenceRecord(name=%s,length=%s,dict_index=%s,assembly=%s)", 
-                getSequenceName(), 
-                getSequenceLength(), 
-                getSequenceIndex(),
-                getAssembly()
-        );
-    }
-}
-
diff --git a/src/main/java/htsjdk/samtools/SAMSortOrderChecker.java b/src/main/java/htsjdk/samtools/SAMSortOrderChecker.java
deleted file mode 100644
index b6b7dd4..0000000
--- a/src/main/java/htsjdk/samtools/SAMSortOrderChecker.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Encapsulates simple check for SAMRecord order.
- * @author alecw at broadinstitute.org
- */
-public class SAMSortOrderChecker {
-    private final SAMFileHeader.SortOrder sortOrder;
-    private SAMRecord prev;
-    private final SAMRecordComparator comparator;
-
-    public SAMSortOrderChecker(final SAMFileHeader.SortOrder sortOrder) {
-        this.sortOrder = sortOrder;
-        switch (sortOrder) {
-            case coordinate:
-                comparator = new SAMRecordCoordinateComparator();
-                break;
-            case queryname:
-                comparator = new SAMRecordQueryNameComparator();
-                break;
-            case duplicate:
-                comparator = new SAMRecordDuplicateComparator();
-                break;
-            case unsorted:
-            default:
-                comparator = null;
-                break;
-        }
-    }
-
-    /**
-     * Check if given SAMRecord violates sort order relative to previous SAMRecord.
-     * @return True if sort order is unsorted, if this is the first record, or if previous <= rec.
-     */
-    public boolean isSorted(final SAMRecord rec) {
-        if (comparator == null) {
-            return true;
-        }
-        boolean ret = true;
-        if (prev != null) {
-            ret = comparator.fileOrderCompare(prev, rec) <= 0;
-        }
-        prev = rec;
-        return ret;
-    }
-
-    public SAMRecord getPreviousRecord() {
-        return prev;
-    }
-
-    /**
-     * Return the sort key used for the given sort order.  Useful in error messages.
-     */
-    public String getSortKey(final SAMRecord rec) {
-        switch (sortOrder) {
-
-            case coordinate:
-                return rec.getReferenceName() + ":" + rec.getAlignmentStart();
-            case queryname:
-                return rec.getReadName();
-            case unsorted:
-            default:
-                return null;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTag.java b/src/main/java/htsjdk/samtools/SAMTag.java
deleted file mode 100644
index fa25728..0000000
--- a/src/main/java/htsjdk/samtools/SAMTag.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * The standard tags for a SAM record that are defined in the SAM spec.
- */
-public enum SAMTag {
-    AM,
-    AS,
-    BC,
-    BQ,
-    CC,
-    CM,
-    CO,
-    CP,
-    CQ,
-    CS,
-    CT,
-    E2,
-    FI,
-    FS,
-    FT,
-    FZ,
-    GC, // for backwards compatibility
-    GS, // for backwards compatibility
-    GQ, // for backwards compatibility
-    LB,
-    H0,
-    H1,
-    H2,
-    HI,
-    IH,
-    MC,
-    MF, // for backwards compatibility
-    MD,
-    MQ,
-    NH,
-    NM,
-    OQ,
-    OP,
-    OC,
-    OF,
-    OR,
-    PG,
-    PQ,
-    PT,
-    PU,
-    QT,
-    Q2,
-    R2,
-    RG,
-    RT,
-    S2, // for backwards compatibility
-    SA,
-    SM,
-    SQ, // for backwards compatibility
-    TC,
-    U2,
-    UQ
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTagUtil.java b/src/main/java/htsjdk/samtools/SAMTagUtil.java
deleted file mode 100644
index 0266b0e..0000000
--- a/src/main/java/htsjdk/samtools/SAMTagUtil.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.StringUtil;
-
-/**
- * Facility for converting between String and short representation of a SAM tag.  short representation
- * is used by SAM JDK internally and is much more efficient.  Callers are encouraged to obtain the short
- * value for a tag of interest once, and then use the SAMRecord attribute API that takes shorts rather than
- * Strings.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMTagUtil {
-
-    // Standard tags pre-computed for convenience
-    public final short RG = makeBinaryTag(SAMTag.RG.name());
-    public final short LB = makeBinaryTag(SAMTag.LB.name());
-    public final short PU = makeBinaryTag(SAMTag.PU.name());
-    public final short PG = makeBinaryTag(SAMTag.PG.name());
-    public final short AS = makeBinaryTag(SAMTag.AS.name());
-    public final short SQ = makeBinaryTag(SAMTag.SQ.name());
-    public final short MQ = makeBinaryTag(SAMTag.MQ.name());
-    public final short NM = makeBinaryTag(SAMTag.NM.name());
-    public final short H0 = makeBinaryTag(SAMTag.H0.name());
-    public final short H1 = makeBinaryTag(SAMTag.H1.name());
-    public final short H2 = makeBinaryTag(SAMTag.H2.name());
-    public final short UQ = makeBinaryTag(SAMTag.UQ.name());
-    public final short PQ = makeBinaryTag(SAMTag.PQ.name());
-    public final short NH = makeBinaryTag(SAMTag.NH.name());
-    public final short IH = makeBinaryTag(SAMTag.IH.name());
-    public final short HI = makeBinaryTag(SAMTag.HI.name());
-    public final short MD = makeBinaryTag(SAMTag.MD.name());
-    public final short CS = makeBinaryTag(SAMTag.CS.name());
-    public final short CQ = makeBinaryTag(SAMTag.CQ.name());
-    public final short CM = makeBinaryTag(SAMTag.CM.name());
-    public final short R2 = makeBinaryTag(SAMTag.R2.name());
-    public final short Q2 = makeBinaryTag(SAMTag.Q2.name());
-    public final short S2 = makeBinaryTag(SAMTag.S2.name());
-    public final short CC = makeBinaryTag(SAMTag.CC.name());
-    public final short CP = makeBinaryTag(SAMTag.CP.name());
-    public final short SM = makeBinaryTag(SAMTag.SM.name());
-    public final short AM = makeBinaryTag(SAMTag.AM.name());
-    public final short MF = makeBinaryTag(SAMTag.MF.name());
-    public final short E2 = makeBinaryTag(SAMTag.E2.name());
-    public final short U2 = makeBinaryTag(SAMTag.U2.name());
-    public final short OQ = makeBinaryTag(SAMTag.OQ.name());
-    public final short FZ = makeBinaryTag(SAMTag.FZ.name());
-    public final short SA = makeBinaryTag(SAMTag.SA.name());
-    public final short MC = makeBinaryTag(SAMTag.MC.name());
-
-    private static SAMTagUtil singleton;
-
-    // Cache of already-converted tags.  Should speed up SAM text generation.
-    // Not synchronized because race condition is not a problem.
-    private final String[] stringTags = new String[Short.MAX_VALUE];
-
-    /**
-     * Despite the fact that this class has state, it should be thread-safe because the cache
-     * gets filled with the same values by any thread.
-     */
-    public static SAMTagUtil getSingleton() {
-        if (singleton == null) {
-            singleton = new SAMTagUtil();
-        }
-        return singleton;
-    }
-
-
-    /**
-     * Convert from String representation of tag name to short representation.
-     *
-     * @param tag 2-character String representation of a tag name.
-     * @return Tag name packed as 2 ASCII bytes in a short.
-     */
-    public short makeBinaryTag(final String tag) {
-        if (tag.length() != 2) {
-            throw new IllegalArgumentException("String tag does not have length() == 2: " + tag);
-        }
-        return (short)(tag.charAt(1) << 8 | tag.charAt(0));
-    }
-
-    /**
-     * Convert from short representation of tag name to String representation.
-     *
-     * @param tag Tag name packed as 2 ASCII bytes in a short.
-     * @return 2-character String representation of a tag name.
-     */
-    public String makeStringTag(final short tag) {
-        String ret = stringTags[tag];
-        if (ret == null) {
-            final byte[] stringConversionBuf = new byte[2];
-            stringConversionBuf[0] = (byte)(tag & 0xff);
-            stringConversionBuf[1] = (byte)((tag >> 8) & 0xff);
-            ret = StringUtil.bytesToString(stringConversionBuf);
-            stringTags[tag] = ret;
-        }
-        return ret;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTestUtil.java b/src/main/java/htsjdk/samtools/SAMTestUtil.java
deleted file mode 100644
index 83766f3..0000000
--- a/src/main/java/htsjdk/samtools/SAMTestUtil.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Misc methods for SAM-related unit tests.  These are in the src tree rather than the tests tree
- * so that they will be included in sam.jar, and therefore can be used by tests outside of htsjdk.samtools.
- */
-public class SAMTestUtil {
-
-    /**
-     * Indicates that a required sanity-check condition was not met.
-     */
-    public static class SanityCheckFailedException extends RuntimeException {
-        public SanityCheckFailedException(String message) {
-            super(message);
-        }
-    }
-
-    /**
-     * Basic sanity check for a pair of SAMRecords.
-     * @throws SanityCheckFailedException if the sanity check failed
-     */
-    public void assertPairValid(final SAMRecord firstEnd, final SAMRecord secondEnd) throws SanityCheckFailedException {
-        assertEquals(firstEnd.getReadName(), secondEnd.getReadName());
-        assertTrue(firstEnd.getFirstOfPairFlag());
-        assertTrue(secondEnd.getSecondOfPairFlag());
-        assertFalse(secondEnd.getFirstOfPairFlag());
-        assertFalse(firstEnd.getSecondOfPairFlag());
-        if (!firstEnd.getReadUnmappedFlag() && !secondEnd.getReadUnmappedFlag()) {
-            assertNotSame(firstEnd.getReadNegativeStrandFlag(),
-                    secondEnd.getReadNegativeStrandFlag());
-        }
-    }
-
-    /**
-     * Basic sanity check for a SAMRecord.
-     * @throws SanityCheckFailedException if the sanity check failed
-     */
-    public void assertReadValid(final SAMRecord read) throws SanityCheckFailedException {
-        assertEquals(read.getReadBases().length, read.getBaseQualities().length);
-        // Note that it is possible to have an unmapped read that has a coordinate
-        if (read.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
-            assertEquals(read.getAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
-            assertTrue(read.getReadUnmappedFlag());
-        } else {
-            assertNotSame(read.getAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
-        }
-        if (read.getReadUnmappedFlag()) {
-            assertEquals(read.getMappingQuality(), SAMRecord.NO_MAPPING_QUALITY);
-            assertEquals(read.getCigar().getCigarElements().size(), 0);
-        } else {
-            assertNotSame(read.getCigar().getCigarElements(), 0);
-        }
-        if (read.getReadPairedFlag()) {
-            if (read.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
-                assertEquals(read.getMateAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
-                assertTrue(read.getMateUnmappedFlag());
-            } else {
-                // Even if the mate is unmapped, if it has a reference name, it should have a position.
-                assertNotSame(read.getMateAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
-            }
-            if (read.getReadUnmappedFlag() || read.getMateUnmappedFlag() ||
-                    !read.getReferenceName().equals(read.getMateReferenceName())) {
-                assertEquals(read.getInferredInsertSize(), 0);
-            } else {
-                assertNotSame(read.getInferredInsertSize(), 0);
-            }
-            if (!read.getReadUnmappedFlag() && !read.getMateUnmappedFlag()) {
-                assertNotSame(read.getReadNegativeStrandFlag(), read.getMateNegativeStrandFlag());
-                assertNotSame(read.getMateNegativeStrandFlag(),
-                        read.getReadName());
-            }
-
-        } else {
-            assertEquals(read.getInferredInsertSize(), 0);
-        }
-    }
-
-    private static <T> void assertEquals(T a, T b) {
-        if (a == null) {
-            if (b != null) {
-                throw new SanityCheckFailedException("\"" + a + "\" does not equal \"" + b + "\"");
-            }
-        } else if (!a.equals(b)) {
-            throw new SanityCheckFailedException("\"" + a + "\" does not equal \"" + b + "\"");
-        }
-    }
-
-    private static <T> void assertNotSame(T a, T b) {
-        if (a != b) {
-            throw new SanityCheckFailedException("\"" + a + "\" and \"" + b + "\" are not the same object");
-        }
-    }
-
-    private static void assertTrue(boolean condition) {
-        if (!condition) {
-            throw new SanityCheckFailedException("The condition is false");
-        }
-    }
-
-    private static void assertFalse(boolean condition) {
-        if (condition) {
-            throw new SanityCheckFailedException("The condition is true");
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTextHeaderCodec.java b/src/main/java/htsjdk/samtools/SAMTextHeaderCodec.java
deleted file mode 100644
index fb4b02a..0000000
--- a/src/main/java/htsjdk/samtools/SAMTextHeaderCodec.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.DateParser;
-import htsjdk.samtools.util.LineReader;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * Parser for a SAM text header, and a generator of SAM text header.
- */
-public class SAMTextHeaderCodec {
-    private static final String HEADER_LINE_START = "@";
-
-    // These attributes are populated when parsing or generating
-    private SAMFileHeader mFileHeader;
-    private final TextTagCodec mTagCodec = new TextTagCodec();
-
-    // These attributes are populated when parsing text
-    private String mCurrentLine;
-    private LineReader mReader;
-    private String mSource;
-    private List<SAMSequenceRecord> sequences;
-    private List<SAMReadGroupRecord> readGroups;
-    // Accumulate header while reading it from input.
-    private final StringBuilder textHeader = new StringBuilder();
-
-    // For error reporting when parsing
-    private ValidationStringency validationStringency = ValidationStringency.SILENT;
-
-    // These attributes are populated when generating text
-    private BufferedWriter writer;
-
-    private static final String TAG_KEY_VALUE_SEPARATOR = ":";
-    private static final char TAG_KEY_VALUE_SEPARATOR_CHAR = ':';
-    private static final String FIELD_SEPARATOR = "\t";
-    private static final char FIELD_SEPARATOR_CHAR = '\t';
-    private static final Pattern FIELD_SEPARATOR_RE = Pattern.compile(FIELD_SEPARATOR);
-
-    public static final String COMMENT_PREFIX = HEADER_LINE_START + HeaderRecordType.CO.name() + FIELD_SEPARATOR;
-
-    void setWriter(final BufferedWriter writer) {
-        this.writer = writer;
-    }
-
-    void setmFileHeader(final SAMFileHeader header) {
-        this.mFileHeader = header;
-    }
-
-    /**
-     * Reads text SAM header and converts to a SAMFileHeader object.
-     * @param reader Where to get header text from.
-     * @param source Name of the input file, for error messages.  May be null.
-     * @return complete header object.
-     */
-    public SAMFileHeader decode(final LineReader reader, final String source) {
-        mFileHeader = new SAMFileHeader();
-        mReader = reader;
-        mSource = source;
-        sequences = new ArrayList<>();
-        readGroups = new ArrayList<>();
-
-        while (advanceLine() != null) {
-            final ParsedHeaderLine parsedHeaderLine = new ParsedHeaderLine(mCurrentLine);
-            if (!parsedHeaderLine.isLineValid()) {
-                continue;
-            }
-            switch (parsedHeaderLine.getHeaderRecordType()) {
-
-                case HD:
-                    parseHDLine(parsedHeaderLine);
-                    break;
-                case PG:
-                    parsePGLine(parsedHeaderLine);
-                    break;
-                case RG:
-                    parseRGLine(parsedHeaderLine);
-                    break;
-                case SQ:
-                    parseSQLine(parsedHeaderLine);
-                    break;
-                case CO:
-                    mFileHeader.addComment(mCurrentLine);
-                    break;
-                default:
-                    throw new IllegalStateException("Unrecognized header record type: " +
-                            parsedHeaderLine.getHeaderRecordType());
-            }
-        }
-        mFileHeader.setSequenceDictionary(new SAMSequenceDictionary(sequences));
-        mFileHeader.setReadGroups(readGroups);
-
-        // Only store the header text if there was a parsing error or the it's less than 1MB on disk / 2MB in mem
-        if (!mFileHeader.getValidationErrors().isEmpty() || textHeader.length() < (1024 * 1024)) {
-            mFileHeader.setTextHeader(textHeader.toString());
-        }
-
-        SAMUtils.processValidationErrors(mFileHeader.getValidationErrors(), -1, validationStringency);
-        return mFileHeader;
-    }
-
-    private String advanceLine() {
-        final int nextChar = mReader.peek();
-        if (nextChar != '@') {
-            return null;
-        }
-        mCurrentLine = mReader.readLine();
-        textHeader.append(mCurrentLine).append('\n');
-        return mCurrentLine;
-    }
-
-    /**
-     * Transfer standard and non-standard tags from text representation to in-memory representation.
-     * All values are now stored as Strings.
-     * @param record attributes get set into this object.
-     * @param textAttributes Map of tag type to value.  Some values may be removed by this method.
-     */
-    private void transferAttributes(final AbstractSAMHeaderRecord record, final Map<String, String> textAttributes) {
-        // All header tags are now of type String, so no need to distinguish standard from non-standard.
-        for (final Map.Entry<String, String> entry : textAttributes.entrySet()) {
-            record.setAttribute(entry.getKey(), entry.getValue());
-        }
-
-    }
-
-    private void parsePGLine(final ParsedHeaderLine parsedHeaderLine) {
-        assert(HeaderRecordType.PG.equals(parsedHeaderLine.getHeaderRecordType()));
-        if (!parsedHeaderLine.requireTag(SAMProgramRecord.PROGRAM_GROUP_ID_TAG)) {
-            return;
-        }
-        final SAMProgramRecord programRecord = new SAMProgramRecord(parsedHeaderLine.removeValue(SAMProgramRecord.PROGRAM_GROUP_ID_TAG));
-
-        transferAttributes(programRecord, parsedHeaderLine.mKeyValuePairs);
-        mFileHeader.addProgramRecord(programRecord);
-    }
-
-    private void parseRGLine(final ParsedHeaderLine parsedHeaderLine) {
-        assert(HeaderRecordType.RG.equals(parsedHeaderLine.getHeaderRecordType()));
-        if (!parsedHeaderLine.requireTag(SAMReadGroupRecord.READ_GROUP_ID_TAG)) {
-            return;
-        }
-        // Allow no SM tag if validation stringency is not strict.  This call has the side effect of reporting an error
-        // or throwing an exception depending on validation stringency if this is missing.
-        parsedHeaderLine.requireTag(SAMReadGroupRecord.READ_GROUP_SAMPLE_TAG);
-        final SAMReadGroupRecord samReadGroupRecord = new SAMReadGroupRecord(parsedHeaderLine.removeValue(SAMReadGroupRecord.READ_GROUP_ID_TAG));
-        transferAttributes(samReadGroupRecord, parsedHeaderLine.mKeyValuePairs);
-
-        // Convert non-String attributes to the appropriate types
-        final String predictedMedianInsertSize =
-                (String)samReadGroupRecord.getAttribute(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG);
-        if (predictedMedianInsertSize != null) {
-            try {
-                Integer.parseInt(predictedMedianInsertSize);
-                samReadGroupRecord.setAttribute(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG,predictedMedianInsertSize);
-            } catch (NumberFormatException e) {
-                reportErrorParsingLine(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG +
-                        " is not numeric: " + predictedMedianInsertSize, SAMValidationError.Type.INVALID_PREDICTED_MEDIAN_INSERT_SIZE,
-                        e);
-            }
-        }
-
-        final String dateRunProduced = (String)samReadGroupRecord.getAttribute(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG);
-        if (dateRunProduced != null) {
-            Object date;
-            try {
-                date = mTagCodec.decodeDate(dateRunProduced);
-            } catch (DateParser.InvalidDateException e) {
-                // Can't convert date string into Date object.  Treat it as a string if validation
-                //  stringency allows it.
-                date = dateRunProduced;
-                reportErrorParsingLine(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG + " tag value '" +
-                dateRunProduced + "' is not parseable as a date", SAMValidationError.Type.INVALID_DATE_STRING,
-                        e);
-            }
-            samReadGroupRecord.setAttribute(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG, date.toString());
-        }
-
-        readGroups.add(samReadGroupRecord);
-    }
-
-    private void parseSQLine(final ParsedHeaderLine parsedHeaderLine) {
-        assert(HeaderRecordType.SQ.equals(parsedHeaderLine.getHeaderRecordType()));
-        if (!parsedHeaderLine.requireTag(SAMSequenceRecord.SEQUENCE_NAME_TAG) ||
-                !parsedHeaderLine.requireTag(SAMSequenceRecord.SEQUENCE_LENGTH_TAG)) {
-            return;
-        }
-        String sequenceName = parsedHeaderLine.removeValue(SAMSequenceRecord.SEQUENCE_NAME_TAG);
-        sequenceName = SAMSequenceRecord.truncateSequenceName(sequenceName);
-        final SAMSequenceRecord samSequenceRecord = new SAMSequenceRecord(sequenceName,
-                Integer.parseInt(parsedHeaderLine.removeValue(SAMSequenceRecord.SEQUENCE_LENGTH_TAG)));
-        transferAttributes(samSequenceRecord, parsedHeaderLine.mKeyValuePairs);
-        sequences.add(samSequenceRecord);
-    }
-
-    private void parseHDLine(final ParsedHeaderLine parsedHeaderLine) {
-        assert(HeaderRecordType.HD.equals(parsedHeaderLine.getHeaderRecordType()));
-        if (!parsedHeaderLine.requireTag(SAMFileHeader.VERSION_TAG)) {
-            return;
-        }
-        transferAttributes(mFileHeader, parsedHeaderLine.mKeyValuePairs);
-    }
-
-    private void reportErrorParsingLine(String reason, final SAMValidationError.Type type, final Throwable nestedException) {
-        reason = "Error parsing SAM header. " + reason + ". Line:\n" + mCurrentLine;
-        if (validationStringency != ValidationStringency.STRICT) {
-            final SAMValidationError error = new SAMValidationError(type, reason, null, mReader.getLineNumber());
-            error.setSource(mSource);
-            mFileHeader.addValidationError(error);
-        } else {
-            String fileMessage = "";
-            if (mSource != null) {
-                fileMessage = "File " + mSource;
-            }
-            throw new SAMFormatException(reason + "; " + fileMessage +
-                    "; Line number " + mReader.getLineNumber(), nestedException);
-        }
-    }
-
-    private enum HeaderRecordType {
-        HD, SQ, RG, PG, CO
-    }
-
-    /**
-     * Takes a header line as a String and converts it into a HeaderRecordType, and a map of key:value strings.
-     * If the line does not contain a recognized HeaderRecordType, then the line is considered invalid, and will
-     * not have any key:value pairs.
-     */
-    private class ParsedHeaderLine {
-        private HeaderRecordType mHeaderRecordType;
-        private final Map<String, String> mKeyValuePairs = new LinkedHashMap<String, String>();
-        private boolean lineValid = false;
-
-        ParsedHeaderLine(final String line) {
-            assert(line.startsWith(HEADER_LINE_START));
-
-            // Tab-separate
-            String[] fields = new String[1024];
-            int numFields = StringUtil.split(line, fields, FIELD_SEPARATOR_CHAR);
-            if (numFields == fields.length) {
-                // Lots of fields, so fall back
-                fields = FIELD_SEPARATOR_RE.split(line);
-                numFields = fields.length;
-            }
-
-            // Parse the HeaderRecordType
-            try {
-                mHeaderRecordType = HeaderRecordType.valueOf(fields[0].substring(1));
-            } catch (IllegalArgumentException e) {
-                reportErrorParsingLine("Unrecognized header record type", SAMValidationError.Type.UNRECOGNIZED_HEADER_TYPE, null);
-                mHeaderRecordType = null;
-                return;
-            }
-
-            // Do not parse key:value pairs for comment lines.
-            if (mHeaderRecordType == HeaderRecordType.CO) {
-                lineValid = true;
-                return;
-            }
-
-            final String[] keyAndValue = new String[2];
-            // Parse they key:value pairs
-            for (int i = 1; i < numFields; ++i) {
-                if (StringUtil.splitConcatenateExcessTokens(fields[i], keyAndValue, TAG_KEY_VALUE_SEPARATOR_CHAR) != 2) {
-                    reportErrorParsingLine("Problem parsing " + HEADER_LINE_START + mHeaderRecordType +
-                            " key:value pair", SAMValidationError.Type.POORLY_FORMATTED_HEADER_TAG, null);
-                    continue;
-                }
-                if (mKeyValuePairs.containsKey(keyAndValue[0]) &&
-                        ! mKeyValuePairs.get(keyAndValue[0]).equals(keyAndValue[1])) {
-                    reportErrorParsingLine("Problem parsing " + HEADER_LINE_START + mHeaderRecordType +
-                            " key:value pair " + keyAndValue[0] + ":" + keyAndValue[1] +
-                            " clashes with " + keyAndValue[0] + ":" + mKeyValuePairs.get(keyAndValue[0]),
-                            SAMValidationError.Type.HEADER_TAG_MULTIPLY_DEFINED, null);
-                    continue;
-                }
-                mKeyValuePairs.put(keyAndValue[0], keyAndValue[1]);
-            }
-            lineValid = true;
-        }
-
-        /**
-         * True if the line is recognized as one of the valid HeaderRecordTypes.
-         */
-        public boolean isLineValid() {
-            return lineValid;
-        }
-
-        /**
-         * Handling depends on the validation stringency.  If the tag is not present, and stringency is strict,
-         * an exception is thrown.  If stringency is not strict, false is returned.
-         * @param tag Must be present for the line to be considered value.
-         * @return True if tag is present.
-         */
-        boolean requireTag(final String tag) {
-            if (!mKeyValuePairs.containsKey(tag)) {
-                reportErrorParsingLine(HEADER_LINE_START + mHeaderRecordType + " line missing " + tag + " tag",
-                        SAMValidationError.Type.HEADER_RECORD_MISSING_REQUIRED_TAG, null);
-                return false;
-            }
-            return true;
-        }
-
-        /**
-         * @return null if line is invalid, otherwise the parsed HeaderRecordType
-         */
-        public HeaderRecordType getHeaderRecordType() {
-            return mHeaderRecordType;
-        }
-
-        boolean containsKey(final String key) {
-            return mKeyValuePairs.containsKey(key);
-        }
-
-        String getValue(final String key) {
-            return mKeyValuePairs.get(key);
-        }
-
-        String removeValue(final String key) {
-            final String ret = mKeyValuePairs.get(key);
-            mKeyValuePairs.remove(key);
-            return ret;
-        }
-
-    }
-
-    /**
-     * Convert SAMFileHeader from in-memory representation to text representation. Always writes
-     * SAMFileHeader.CURRENT_VERSION as the version in the header.
-     * @param writer where to write the header text.
-     * @param header object to be converted to text.
-     */
-    public void encode(final Writer writer, final SAMFileHeader header) {
-        encode(writer, header, false);
-    }
-
-    /**
-     * Convert SAMFileHeader from in-memory representation to text representation.
-     * @param writer where to write the header text.
-     * @param header object to be converted to text.
-     * @param keepExistingVersionNumber If true, writes whatever version # was in the header.  If false, writes
-     *                                  SAMFileHeader.CURRENT_VERSION.
-     */
-    public void encode(final Writer writer, final SAMFileHeader header, final boolean keepExistingVersionNumber) {
-        mFileHeader = header;
-        this.writer = new BufferedWriter(writer);
-        writeHDLine(keepExistingVersionNumber);
-        for (final SAMSequenceRecord sequenceRecord: header.getSequenceDictionary().getSequences()) {
-            writeSQLine(sequenceRecord);
-        }
-
-        for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
-            writeRGLine(readGroup);
-        }
-        for (final SAMProgramRecord programRecord : header.getProgramRecords()) {
-            writePGLine(programRecord);
-        }
-        for (final String comment : header.getComments()) {
-            println(comment);
-        }
-        try {
-            this.writer.flush();
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * Encode {@link SAMSequenceRecord}.
-     * Designed for using in {@link SAMSequenceDictionaryCodec}, allows to implement recording on the fly.
-     * @throws IllegalStateException, if writer is null.
-     */
-    void encodeSequenceRecord(final SAMSequenceRecord sequenceRecord) {
-        if (writer == null) {
-            throw new IllegalStateException("writer couldn't be null");
-        }
-        writeSQLine(sequenceRecord);
-    }
-
-    /**
-     * Encode HD line.
-     * Designed for using in {@link SAMSequenceDictionaryCodec}, allows to implement recording on the fly.
-     * @throws IllegalStateException, if writer is null.
-     */
-    void encodeHeaderLine(final boolean keepExistingVersionNumber) {
-        if (writer == null) {
-            throw new IllegalStateException("writer couldn't be null");
-        }
-        writeHDLine(keepExistingVersionNumber);
-    }
-
-    private void println(final String s) {
-        try {
-            writer.append(s);
-            writer.append("\n");
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    private void writePGLine(final SAMProgramRecord programRecord) {
-        if (programRecord == null) {
-            return;
-        }
-        final String[] fields = new String[2 + programRecord.getAttributes().size()];
-        fields[0] = HEADER_LINE_START + HeaderRecordType.PG;
-        fields[1] = SAMProgramRecord.PROGRAM_GROUP_ID_TAG + TAG_KEY_VALUE_SEPARATOR + programRecord.getProgramGroupId();
-        encodeTags(programRecord, fields, 2);
-        println(StringUtil.join(FIELD_SEPARATOR, fields));
-    }
-
-    private void writeRGLine(final SAMReadGroupRecord readGroup) {
-        final String[] fields = new String[2 + readGroup.getAttributes().size()];
-        fields[0] = HEADER_LINE_START + HeaderRecordType.RG;
-        fields[1] = SAMReadGroupRecord.READ_GROUP_ID_TAG + TAG_KEY_VALUE_SEPARATOR + readGroup.getReadGroupId();
-        encodeTags(readGroup, fields, 2);
-        println(StringUtil.join(FIELD_SEPARATOR, fields));
-    }
-
-    private void writeHDLine(final boolean keepExistingVersionNumber) {
-        final SAMFileHeader newHeader;
-        if (keepExistingVersionNumber) {
-            newHeader = mFileHeader;
-        } else {
-            // Make a copy of the header, excluding the version from the input header, so that
-            // output get CURRENT_VERSION instead of whatever the version of the input header was.
-            newHeader = new SAMFileHeader();
-
-            for (final Map.Entry<String, String> entry : mFileHeader.getAttributes()) {
-                if (!entry.getKey().equals(SAMFileHeader.VERSION_TAG)) {
-                    newHeader.setAttribute(entry.getKey(), entry.getValue());
-                }
-            }
-        }
-
-        final String[] fields = new String[1 + newHeader.getAttributes().size()];
-        fields[0] = HEADER_LINE_START + HeaderRecordType.HD;
-        encodeTags(newHeader, fields, 1);
-        println(StringUtil.join(FIELD_SEPARATOR, fields));
-    }
-
-    private void writeSQLine(final SAMSequenceRecord sequenceRecord) {
-        final int numAttributes = sequenceRecord.getAttributes() != null ? sequenceRecord.getAttributes().size() : 0;
-        final String[] fields = new String[3 + numAttributes];
-        fields[0] = HEADER_LINE_START + HeaderRecordType.SQ;
-        fields[1] = SAMSequenceRecord.SEQUENCE_NAME_TAG + TAG_KEY_VALUE_SEPARATOR + sequenceRecord.getSequenceName();
-        fields[2] = SAMSequenceRecord.SEQUENCE_LENGTH_TAG + TAG_KEY_VALUE_SEPARATOR + Integer.toString(sequenceRecord.getSequenceLength());
-        encodeTags(sequenceRecord, fields, 3);
-        println(StringUtil.join(FIELD_SEPARATOR, fields));
-    }
-
-    /**
-     * Encode all the attributes in the given object as text
-     * @param rec object containing attributes, and knowledge of which are standard tags
-     * @param fields where to put the text representation of the tags.  Must be big enough to hold all tags.
-     * @param offset where to start putting text tag representations.
-     */
-    private void encodeTags(final AbstractSAMHeaderRecord rec, final String[] fields, int offset) {
-        for (final Map.Entry<String, String> entry: rec.getAttributes()) {
-            fields[offset++] = mTagCodec.encodeUntypedTag(entry.getKey(), entry.getValue());
-        }
-    }
-
-    public void setValidationStringency(final ValidationStringency validationStringency) {
-        if (validationStringency == null) {
-            throw new IllegalArgumentException("null validationStringency not allowed");
-        }
-        this.validationStringency = validationStringency;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTextReader.java b/src/main/java/htsjdk/samtools/SAMTextReader.java
deleted file mode 100644
index 3968f1c..0000000
--- a/src/main/java/htsjdk/samtools/SAMTextReader.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.BufferedLineReader;
-import htsjdk.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.io.InputStream;
-
-
-/**
- * Internal class for reading SAM text files.
- */
-class SAMTextReader extends SamReader.ReaderImplementation {
-
-
-    private SAMRecordFactory samRecordFactory;
-    private BufferedLineReader mReader;
-    private SAMFileHeader mFileHeader = null;
-    private String mCurrentLine = null;
-    private RecordIterator mIterator = null;
-    private File mFile = null;
-
-    private ValidationStringency validationStringency = ValidationStringency.DEFAULT_STRINGENCY;
-
-    /**
-     * Add information about the origin (reader and position) to SAM records.
-     */
-    private SamReader mParentReader;
-
-    /**
-     * Prepare to read a SAM text file.
-     *
-     * @param stream Need not be buffered, as this class provides buffered reading.
-     */
-    public SAMTextReader(final InputStream stream, final ValidationStringency validationStringency, final SAMRecordFactory factory) {
-        mReader = new BufferedLineReader(stream);
-        this.validationStringency = validationStringency;
-        this.samRecordFactory = factory;
-        readHeader();
-    }
-
-    /**
-     * Prepare to read a SAM text file.
-     *
-     * @param stream Need not be buffered, as this class provides buffered reading.
-     * @param file   For error reporting only.
-     */
-    public SAMTextReader(final InputStream stream, final File file, final ValidationStringency validationStringency, final SAMRecordFactory factory) {
-        this(stream, validationStringency, factory);
-        mFile = file;
-    }
-
-    /**
-     * If true, writes the source of every read into the source SAMRecords.
-     *
-     * @param enabled true to write source information into each SAMRecord.
-     */
-    public void enableFileSource(final SamReader reader, final boolean enabled) {
-        this.mParentReader = enabled ? reader : null;
-    }
-
-    void enableIndexCaching(final boolean enabled) {
-        throw new UnsupportedOperationException("Cannot enable index caching for a SAM text reader");
-    }
-
-    void enableIndexMemoryMapping(final boolean enabled) {
-        throw new UnsupportedOperationException("Cannot enable index memory mapping for a SAM text reader");
-    }
-
-    void enableCrcChecking(final boolean enabled) {
-        // Do nothing - this has no meaning for SAM reading
-    }
-
-    void setSAMRecordFactory(final SAMRecordFactory factory) {
-        this.samRecordFactory = factory;
-    }
-
-    @Override
-    public SamReader.Type type() {
-        return SamReader.Type.SAM_TYPE;
-    }
-
-    public boolean hasIndex() {
-        return false;
-    }
-
-    public BAMIndex getIndex() {
-        throw new UnsupportedOperationException();
-    }
-
-    public void close() {
-        if (mReader != null) {
-            try {
-                mReader.close();
-            } finally {
-                mReader = null;
-            }
-        }
-    }
-
-    public SAMFileHeader getFileHeader() {
-        return mFileHeader;
-    }
-
-    public ValidationStringency getValidationStringency() {
-        return validationStringency;
-    }
-
-    public void setValidationStringency(final ValidationStringency stringency) {
-        this.validationStringency = stringency;
-    }
-
-    /**
-     * There can only be one extant iterator on a SAMTextReader at a time.  The previous one must
-     * be closed before calling getIterator().  Because the input stream is not seekable, a subsequent
-     * call to getIterator() returns an iterator that starts where the last one left off.
-     *
-     * @return Iterator of SAMRecords in file order.
-     */
-    public CloseableIterator<SAMRecord> getIterator() {
-        if (mReader == null) {
-            throw new IllegalStateException("File reader is closed");
-        }
-        if (mIterator != null) {
-            throw new IllegalStateException("Iteration in progress");
-        }
-        mIterator = new RecordIterator();
-        return mIterator;
-    }
-
-    /**
-     * Generally loads data at a given point in the file.  Unsupported for SAMTextReaders.
-     *
-     * @param fileSpan The file span.
-     * @return An iterator over the given file span.
-     */
-    public CloseableIterator<SAMRecord> getIterator(final SAMFileSpan fileSpan) {
-        throw new UnsupportedOperationException("Cannot directly iterate over regions within SAM text files.");
-    }
-
-    /**
-     * Generally gets a pointer to the first read in the file.  Unsupported for SAMTextReaders.
-     *
-     * @return An pointer to the first read in the file.
-     */
-    public SAMFileSpan getFilePointerSpanningReads() {
-        throw new UnsupportedOperationException("Cannot retrieve file pointers within SAM text files.");
-    }
-
-    /**
-     * Unsupported for SAM text files.
-     */
-    public CloseableIterator<SAMRecord> query(final String sequence, final int start, final int end, final boolean contained) {
-        throw new UnsupportedOperationException("Cannot query SAM text files");
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> query(final QueryInterval[] intervals, final boolean contained) {
-        throw new UnsupportedOperationException("Cannot query SAM text files");
-    }
-
-    /**
-     * Unsupported for SAM text files.
-     */
-    public CloseableIterator<SAMRecord> queryAlignmentStart(final String sequence, final int start) {
-        throw new UnsupportedOperationException("Cannot query SAM text files");
-    }
-
-    public CloseableIterator<SAMRecord> queryUnmapped() {
-        throw new UnsupportedOperationException("Cannot query SAM text files");
-    }
-
-    private void readHeader() {
-        final SAMTextHeaderCodec headerCodec = new SAMTextHeaderCodec();
-        headerCodec.setValidationStringency(validationStringency);
-        mFileHeader = headerCodec.decode(mReader, (mFile != null ? mFile.toString() : null));
-        advanceLine();
-    }
-
-    private String advanceLine() {
-        mCurrentLine = mReader.readLine();
-        return mCurrentLine;
-    }
-
-    /**
-     * SAMRecord iterator for SAMTextReader
-     */
-    private class RecordIterator implements CloseableIterator<SAMRecord> {
-
-        private final SAMLineParser parser = new SAMLineParser(samRecordFactory, validationStringency,
-                mFileHeader, mParentReader, mFile);
-
-        private RecordIterator() {
-            if (mReader == null) {
-                throw new IllegalStateException("Reader is closed.");
-            }
-        }
-
-        public void close() {
-            SAMTextReader.this.close();
-        }
-
-        public boolean hasNext() {
-            return mCurrentLine != null;
-        }
-
-        public SAMRecord next() {
-            if (!hasNext()) {
-                throw new IllegalStateException("Cannot call next() on exhausted iterator");
-            }
-            try {
-                return parseLine();
-            } finally {
-                advanceLine();
-            }
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Not supported: remove");
-        }
-
-        private SAMRecord parseLine() {
-
-            return parser.parseLine(mCurrentLine, mReader.getLineNumber());
-        }
-
-    }
-}
-
diff --git a/src/main/java/htsjdk/samtools/SAMTextWriter.java b/src/main/java/htsjdk/samtools/SAMTextWriter.java
deleted file mode 100644
index 0786d67..0000000
--- a/src/main/java/htsjdk/samtools/SAMTextWriter.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.AsciiWriter;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-
-/**
- * Writer for text-format SAM files.
- */
-public class SAMTextWriter extends SAMFileWriterImpl {
-    private static final String FIELD_SEPARATOR = "\t";
-
-    private final Writer out;
-    // For error reporting only.
-    private final File file;
-    private final TextTagCodec tagCodec = new TextTagCodec();
-    private final SAMTagUtil tagUtil = new SAMTagUtil();
-
-    private final SamFlagField samFlagFieldOutput;
-    
-    /**
-     * Constructs a SAMTextWriter that outputs to a Writer.
-     * @param out Writer.
-     */
-    public SAMTextWriter(final Writer out) {
-        this(out, SamFlagField.DECIMAL);
-    }
-
-    /**
-     * Constructs a SAMTextWriter that writes to a File.
-     * @param file Where to write the output.
-     */
-    public SAMTextWriter(final File file) {
-        this(file, SamFlagField.DECIMAL);
-    }
-
-    /**
-     * Returns the Writer used by this instance.  Useful for flushing the output.
-     */
-    public Writer getWriter() {
-	return out;
-    }
-
-    /**
-     * Constructs a SAMTextWriter that writes to an OutputStream.  The OutputStream
-     * is wrapped in an AsciiWriter, which can be retrieved with getWriter().
-     * @param stream Need not be buffered because this class provides buffering. 
-     */
-    public SAMTextWriter(final OutputStream stream) {
-        this(stream, SamFlagField.DECIMAL);
-    }
-
-    /**
-     * Constructs a SAMTextWriter that outputs to a Writer.
-     * @param out Writer.
-     */
-    public SAMTextWriter(final Writer out, final SamFlagField samFlagFieldOutput) {
-        if (samFlagFieldOutput == null) throw new IllegalArgumentException("Sam flag field was null");
-        this.out = out;
-        this.file = null;
-        this.samFlagFieldOutput = samFlagFieldOutput;
-    }
-
-    /**
-     * Constructs a SAMTextWriter that writes to a File.
-     * @param file Where to write the output.
-     */
-    public SAMTextWriter(final File file, final SamFlagField samFlagFieldOutput) {
-        if (samFlagFieldOutput == null) throw new IllegalArgumentException("Sam flag field was null");
-        try {
-            this.file = file;
-            this.out = new AsciiWriter(new FileOutputStream(file));
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-        this.samFlagFieldOutput = samFlagFieldOutput;
-    }
-
-    /**
-     * Constructs a SAMTextWriter that writes to an OutputStream.  The OutputStream
-     * is wrapped in an AsciiWriter, which can be retrieved with getWriter().
-     * @param stream Need not be buffered because this class provides buffering.
-     */
-    public SAMTextWriter(final OutputStream stream, final SamFlagField samFlagFieldOutput) {
-        if (samFlagFieldOutput == null) throw new IllegalArgumentException("Sam flag field was null");
-        this.file = null;
-        this.out = new AsciiWriter(stream);
-        this.samFlagFieldOutput = samFlagFieldOutput;
-    }
-
-    /**
-     * Write the record.
-     *
-     * @param alignment SAMRecord.
-     */
-    public void writeAlignment(final SAMRecord alignment) {
-        try {
-            out.write(alignment.getReadName());
-            out.write(FIELD_SEPARATOR);
-            out.write(this.samFlagFieldOutput.format(alignment.getFlags()));
-            out.write(FIELD_SEPARATOR);
-            out.write(alignment.getReferenceName());
-            out.write(FIELD_SEPARATOR);
-            out.write(Integer.toString(alignment.getAlignmentStart()));
-            out.write(FIELD_SEPARATOR);
-            out.write(Integer.toString(alignment.getMappingQuality()));
-            out.write(FIELD_SEPARATOR);
-            out.write(alignment.getCigarString());
-            out.write(FIELD_SEPARATOR);
-
-            //  == is OK here because these strings are interned
-            if (alignment.getReferenceName() == alignment.getMateReferenceName() &&
-                    SAMRecord.NO_ALIGNMENT_REFERENCE_NAME != alignment.getReferenceName()) {
-                out.write("=");
-            } else {
-                out.write(alignment.getMateReferenceName());
-            }
-            out.write(FIELD_SEPARATOR);
-            out.write(Integer.toString(alignment.getMateAlignmentStart()));
-            out.write(FIELD_SEPARATOR);
-            out.write(Integer.toString(alignment.getInferredInsertSize()));
-            out.write(FIELD_SEPARATOR);
-            out.write(alignment.getReadString());
-            out.write(FIELD_SEPARATOR);
-            out.write(alignment.getBaseQualityString());
-            SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
-            while (attribute != null) {
-                out.write(FIELD_SEPARATOR);
-                final String encodedTag;
-                if (attribute.isUnsignedArray()) {
-                    encodedTag = tagCodec.encodeUnsignedArray(tagUtil.makeStringTag(attribute.tag), attribute.value);
-                } else {
-                    encodedTag = tagCodec.encode(tagUtil.makeStringTag(attribute.tag), attribute.value);
-                }
-                out.write(encodedTag);
-                attribute = attribute.getNext();
-            }
-            out.write("\n");
-
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /* This method is called by SAMRecord.getSAMString(). */
-    private static SAMTextWriter textWriter = null;
-    private static StringWriter stringWriter = null;
-    static synchronized String getSAMString(final SAMRecord alignment) {
-        if (stringWriter == null) stringWriter = new StringWriter();
-        if (textWriter == null) textWriter = new SAMTextWriter(stringWriter);
-        stringWriter.getBuffer().setLength(0);
-        textWriter.writeAlignment(alignment);
-        return stringWriter.toString();
-    }
-
-    /**
-     * Write the header text.  This method can also be used to write
-     * an arbitrary String, not necessarily the header.
-     *
-     * @param textHeader String containing the text to write.
-     */
-    public void writeHeader(final String textHeader) {
-        try {
-            out.write(textHeader);
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * Do any required flushing here.
-     */
-    public void finish() {
-        try {
-            out.close();
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * For producing error messages.
-     *
-     * @return Output filename, or null if there isn't one.
-     */
-    public String getFilename() {
-        if (file == null) {
-            return null;
-        }
-        return file.getAbsolutePath();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMTools.java b/src/main/java/htsjdk/samtools/SAMTools.java
deleted file mode 100644
index 551f846..0000000
--- a/src/main/java/htsjdk/samtools/SAMTools.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.CloseableIterator;
-
-import java.io.File;
-
-
-/**
- * Command line utility for manipulating SAM/BAM files.
- */
-public class SAMTools {
-    private String mCommand = null;
-    private File mInputFile = null;
-
-
-    public static void main(final String[] args)
-            throws Exception {
-        final int status = new SAMTools().run(args);
-        if (status != 0) {
-            System.exit(status);
-        }
-    }
-
-    private SAMTools() {
-    }
-
-    private void usage() {
-        System.out.println();
-        System.out.println("SAMTools version 0.1.0");
-        System.out.println("Tools for manipulating SAM/BAM files");
-        System.out.println();
-        System.out.println("Usage: SAMTools <command> <options...>");
-        System.out.println();
-        System.out.println("Commands:");
-        System.out.println("  help");
-        System.out.println("  view        <file>");
-        System.out.println();
-    }
-
-    private boolean parseArguments(final String[] args) {
-        if (args.length == 0) {
-            usage();
-            return true;
-        }
-        final String command = args[0];
-        final int argpos = 1;
-        final int argcount = args.length - argpos;
-        if (command.equals("help")) {
-            usage();
-            return true;
-        } else if (command.equals("view")) {
-            if (argcount != 1) {
-                usage();
-                return false;
-            }
-            mInputFile = new File(args[1]);
-            if (!mInputFile.exists()) {
-                System.out.println("Input file not found: " + mInputFile);
-                return false;
-            }
-        } else {
-            System.out.println("Unrecognized command: " + command);
-            System.out.println();
-            usage();
-            return false;
-        }
-        mCommand = command;
-        return true;
-    }
-
-    private int run(final String[] args)
-            throws Exception {
-        if (!parseArguments(args)) {
-            return 1;
-        }
-        if (mCommand == null) {
-            return 0;
-        }
-        if (mCommand.equals("view")) {
-            return runView();
-        }
-        return 1;
-    }
-
-    private int runView() {
-        final SamReader reader = SamReaderFactory.makeDefault().open(mInputFile);
-        final CloseableIterator<SAMRecord> iterator = reader.iterator();
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-            System.out.println(record.getSAMString());
-        }
-        iterator.close();
-        return 0;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMUtils.java b/src/main/java/htsjdk/samtools/SAMUtils.java
deleted file mode 100644
index 25b6799..0000000
--- a/src/main/java/htsjdk/samtools/SAMUtils.java
+++ /dev/null
@@ -1,1226 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.CigarUtil;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.RuntimeEOFException;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.regex.Pattern;
-
-
-/**
- * Utilty methods.
- */
-public final class SAMUtils {
-    /** regex for semicolon, used in {@link SAMUtils#getOtherCanonicalAlignments(SAMRecord)} */
-    private static final Pattern SEMICOLON_PAT = Pattern.compile("[;]");
-    /** regex for comma, used in {@link SAMUtils#getOtherCanonicalAlignments(SAMRecord)} */
-    private static final Pattern COMMA_PAT = Pattern.compile("[,]");
-
-    // Representation of bases, one for when in low-order nybble, one for when in high-order nybble.
-    private static final byte COMPRESSED_EQUAL_LOW = 0;
-    private static final byte COMPRESSED_A_LOW = 1;
-    private static final byte COMPRESSED_C_LOW = 2;
-    private static final byte COMPRESSED_M_LOW = 3;
-    private static final byte COMPRESSED_G_LOW = 4;
-    private static final byte COMPRESSED_R_LOW = 5;
-    private static final byte COMPRESSED_S_LOW = 6;
-    private static final byte COMPRESSED_V_LOW = 7;
-    private static final byte COMPRESSED_T_LOW = 8;
-    private static final byte COMPRESSED_W_LOW = 9;
-    private static final byte COMPRESSED_Y_LOW = 10;
-    private static final byte COMPRESSED_H_LOW = 11;
-    private static final byte COMPRESSED_K_LOW = 12;
-    private static final byte COMPRESSED_D_LOW = 13;
-    private static final byte COMPRESSED_B_LOW = 14;
-    private static final byte COMPRESSED_N_LOW = 15;
-    private static final byte COMPRESSED_EQUAL_HIGH = COMPRESSED_EQUAL_LOW << 4;
-    private static final byte COMPRESSED_A_HIGH = COMPRESSED_A_LOW << 4;
-    private static final byte COMPRESSED_C_HIGH = COMPRESSED_C_LOW << 4;
-    private static final byte COMPRESSED_G_HIGH = COMPRESSED_G_LOW << 4;
-    private static final byte COMPRESSED_T_HIGH = (byte) (COMPRESSED_T_LOW << 4);
-    private static final byte COMPRESSED_N_HIGH = (byte) (COMPRESSED_N_LOW << 4);
-
-    private static final byte COMPRESSED_M_HIGH = (byte) (COMPRESSED_M_LOW << 4);
-    private static final byte COMPRESSED_R_HIGH = (byte) (COMPRESSED_R_LOW << 4);
-    private static final byte COMPRESSED_S_HIGH = (byte) (COMPRESSED_S_LOW << 4);
-    private static final byte COMPRESSED_V_HIGH = (byte) (COMPRESSED_V_LOW << 4);
-    private static final byte COMPRESSED_W_HIGH = (byte) (COMPRESSED_W_LOW << 4);
-    private static final byte COMPRESSED_Y_HIGH = (byte) (COMPRESSED_Y_LOW << 4);
-    private static final byte COMPRESSED_H_HIGH = (byte) (COMPRESSED_H_LOW << 4);
-    private static final byte COMPRESSED_K_HIGH = (byte) (COMPRESSED_K_LOW << 4);
-    private static final byte COMPRESSED_D_HIGH = (byte) (COMPRESSED_D_LOW << 4);
-    private static final byte COMPRESSED_B_HIGH = (byte) (COMPRESSED_B_LOW << 4);
-    
-    private static final byte [] COMPRESSED_LOOKUP_TABLE = 
-            new byte[]{
-                '=',
-                'A',
-                'C',
-                'M',
-                'G',
-                'R',
-                'S',
-                'V',
-                'T',
-                'W',
-                'Y',
-                'H',
-                'K',
-                'D',
-                'B',
-                'N'
-            };
-    
-    public static final int MAX_PHRED_SCORE = 93;
-
-    /**
-     * Convert from a byte array containing =AaCcGgTtNn represented as ASCII, to a byte array half as long,
-     * with =, A, C, G, T converted to 0, 1, 2, 4, 8, 15.
-     *
-     * @param readBases Bases as ASCII bytes.
-     * @return New byte array with bases represented as nybbles, in BAM binary format.
-     */
-    static byte[] bytesToCompressedBases(final byte[] readBases) {
-        final byte[] compressedBases = new byte[(readBases.length + 1) / 2];
-        int i;
-        for (i = 1; i < readBases.length; i += 2) {
-            compressedBases[i / 2] = (byte) (charToCompressedBaseHigh(readBases[i - 1]) |
-                    charToCompressedBaseLow(readBases[i]));
-        }
-        // Last nybble
-        if (i == readBases.length) {
-            compressedBases[i / 2] = charToCompressedBaseHigh((char) readBases[i - 1]);
-        }
-        return compressedBases;
-    }
-
-    /**
-     * Convert from a byte array with basese stored in nybbles, with =, A, C, G, T represented as 0, 1, 2, 4, 8, 15,
-     * to a a byte array containing =AaCcGgTtNn represented as ASCII.
-     *
-     * @param length Number of bases (not bytes) to convert.
-     * @param compressedBases Bases represented as nybbles, in BAM binary format.
-     * @param compressedOffset Byte offset in compressedBases to start.
-     * @return New byte array with bases as ASCII bytes.
-     */
-    public static byte[] compressedBasesToBytes(final int length, final byte[] compressedBases, final int compressedOffset) {
-        final byte[] ret = new byte[length];
-        int i;
-        for (i = 1; i < length; i += 2) {
-            final int compressedIndex = i / 2 + compressedOffset;
-            ret[i - 1] = compressedBaseToByteHigh(compressedBases[compressedIndex]);
-            ret[i] = compressedBaseToByteLow(compressedBases[compressedIndex]);
-        }
-        // Last nybble
-        if (i == length) {
-            ret[i - 1] = compressedBaseToByteHigh(compressedBases[i / 2 + compressedOffset]);
-        }
-        return ret;
-    }
-
-    /**
-     * Convert from ASCII byte to BAM nybble representation of a base in low-order nybble.
-     *
-     * @param base One of =AaCcGgTtNn.
-     * @return Low-order nybble-encoded equivalent.
-     */
-    private static byte charToCompressedBaseLow(final int base) {
-        switch (base) {
-            case '=':
-                return COMPRESSED_EQUAL_LOW;
-            case 'a':
-            case 'A':
-                return COMPRESSED_A_LOW;
-            case 'c':
-            case 'C':
-                return COMPRESSED_C_LOW;
-            case 'g':
-            case 'G':
-                return COMPRESSED_G_LOW;
-            case 't':
-            case 'T':
-                return COMPRESSED_T_LOW;
-            case 'n':
-            case 'N':
-            case '.':
-                return COMPRESSED_N_LOW;
-
-            // IUPAC ambiguity codes
-            case 'M':
-            case 'm':
-                return COMPRESSED_M_LOW;
-            case 'R':
-            case 'r':
-                return COMPRESSED_R_LOW;
-            case 'S':
-            case 's':
-                return COMPRESSED_S_LOW;
-            case 'V':
-            case 'v':
-                return COMPRESSED_V_LOW;
-            case 'W':
-            case 'w':
-                return COMPRESSED_W_LOW;
-            case 'Y':
-            case 'y':
-                return COMPRESSED_Y_LOW;
-            case 'H':
-            case 'h':
-                return COMPRESSED_H_LOW;
-            case 'K':
-            case 'k':
-                return COMPRESSED_K_LOW;
-            case 'D':
-            case 'd':
-                return COMPRESSED_D_LOW;
-            case 'B':
-            case 'b':
-                return COMPRESSED_B_LOW;
-            default:
-                throw new IllegalArgumentException("Bad  byte passed to charToCompressedBase: " + base);
-        }
-    }
-
-    /**
-     * Convert from ASCII byte to BAM nybble representation of a base in high-order nybble.
-     *
-     * @param base One of =AaCcGgTtNn.
-     * @return High-order nybble-encoded equivalent.
-     */
-    private static byte charToCompressedBaseHigh(final int base) {
-        switch (base) {
-            case '=':
-                return COMPRESSED_EQUAL_HIGH;
-            case 'a':
-            case 'A':
-                return COMPRESSED_A_HIGH;
-            case 'c':
-            case 'C':
-                return COMPRESSED_C_HIGH;
-            case 'g':
-            case 'G':
-                return COMPRESSED_G_HIGH;
-            case 't':
-            case 'T':
-                return COMPRESSED_T_HIGH;
-            case 'n':
-            case 'N':
-            case '.':
-                return COMPRESSED_N_HIGH;
-
-            // IUPAC ambiguity codes
-            case 'M':
-            case 'm':
-                return COMPRESSED_M_HIGH;
-            case 'R':
-            case 'r':
-                return COMPRESSED_R_HIGH;
-            case 'S':
-            case 's':
-                return COMPRESSED_S_HIGH;
-            case 'V':
-            case 'v':
-                return COMPRESSED_V_HIGH;
-            case 'W':
-            case 'w':
-                return COMPRESSED_W_HIGH;
-            case 'Y':
-            case 'y':
-                return COMPRESSED_Y_HIGH;
-            case 'H':
-            case 'h':
-                return COMPRESSED_H_HIGH;
-            case 'K':
-            case 'k':
-                return COMPRESSED_K_HIGH;
-            case 'D':
-            case 'd':
-                return COMPRESSED_D_HIGH;
-            case 'B':
-            case 'b':
-                return COMPRESSED_B_HIGH;
-            default:
-                throw new IllegalArgumentException("Bad  byte passed to charToCompressedBase: " + base);
-        }
-    }
-    
-    /**
-     * Returns the byte corresponding to a certain nybble
-     * @param base One of COMPRESSED_*_LOW, a low-order nybble encoded base.
-     * @return ASCII base, one of ACGTN=.
-     */
-    private static byte compressedBaseToByte(byte base){
-        try{
-            return COMPRESSED_LOOKUP_TABLE[base];
-        }catch(IndexOutOfBoundsException e){
-            throw new IllegalArgumentException("Bad  byte passed to charToCompressedBase: " + base);
-        }
-    }
-
-    /**
-     * Convert from BAM nybble representation of a base in low-order nybble to ASCII byte.
-     *
-     * @param base One of COMPRESSED_*_LOW, a low-order nybble encoded base.
-     * @return ASCII base, one of ACGTN=.
-     */
-    private static byte compressedBaseToByteLow(final int base) {
-        return compressedBaseToByte((byte)(base & 0xf));
-    }
-
-    /**
-     * Convert from BAM nybble representation of a base in high-order nybble to ASCII byte.
-     *
-     * @param base One of COMPRESSED_*_HIGH, a high-order nybble encoded base.
-     * @return ASCII base, one of ACGTN=.
-     */
-    private static byte compressedBaseToByteHigh(final int base) {
-        return compressedBaseToByte((byte)((base >> 4) & 0xf));
-    }
-
-    /**
-     * Convert bases in place into canonical form, upper case, and with no-call represented as N.
-     *
-     * @param bases
-     */
-    static void normalizeBases(final byte[] bases) {
-        for (int i = 0; i < bases.length; ++i) {
-            bases[i] = StringUtil.toUpperCase(bases[i]);
-            if (bases[i] == '.') {
-                bases[i] = 'N';
-            }
-        }
-    }
-
-    /**
-     * Convert an array of bytes, in which each byte is a binary phred quality score, to
-     * printable ASCII representation of the quality scores, ala FASTQ format.
-     * <p/>
-     * Equivalent to phredToFastq(data, 0, data.length)
-     *
-     * @param data Array of bytes in which each byte is a binar phred score.
-     * @return String with ASCII representation of those quality scores.
-     */
-    public static String phredToFastq(final byte[] data) {
-        if (data == null) {
-            return null;
-        }
-        return phredToFastq(data, 0, data.length);
-    }
-
-    /**
-     * Convert an array of bytes, in which each byte is a binary phred quality score, to
-     * printable ASCII representation of the quality scores, ala FASTQ format.
-     *
-     * @param buffer Array of bytes in which each byte is a binar phred score.
-     * @param offset Where in buffer to start conversion.
-     * @param length How many bytes of buffer to convert.
-     * @return String with ASCII representation of those quality scores.
-     */
-    public static String phredToFastq(final byte[] buffer, final int offset, final int length) {
-        final char[] chars = new char[length];
-        for (int i = 0; i < length; i++) {
-            chars[i] = phredToFastq(buffer[offset + i] & 0xFF);
-        }
-        return new String(chars);
-    }
-
-    /**
-     * Convert a single binary phred score to printable ASCII representation, ala FASTQ format.
-     *
-     * @param phredScore binary phred score.
-     * @return Printable ASCII representation of phred score.
-     */
-    public static char phredToFastq(final int phredScore) {
-        if (phredScore < 0 || phredScore > MAX_PHRED_SCORE) {
-            throw new IllegalArgumentException("Cannot encode phred score: " + phredScore);
-        }
-        return (char) (33 + phredScore);
-    }
-
-    /**
-     * Convert a string with phred scores in printable ASCII FASTQ format to an array
-     * of binary phred scores.
-     *
-     * @param fastq Phred scores in FASTQ printable ASCII format.
-     * @return byte array of binary phred scores in which each byte corresponds to a character in the input string.
-     */
-    public static byte[] fastqToPhred(final String fastq) {
-        if (fastq == null) {
-            return null;
-        }
-        final int length = fastq.length();
-        final byte[] scores = new byte[length];
-        for (int i = 0; i < length; i++) {
-            scores[i] = (byte) fastqToPhred(fastq.charAt(i));
-        }
-        return scores;
-    }
-
-    /**
-     * Converts printable qualities in Sanger fastq format to binary phred scores.
-     */
-    public static void fastqToPhred(final byte[] fastq) {
-        for (int i = 0; i < fastq.length; ++i) {
-            fastq[i] = (byte) fastqToPhred((char) (fastq[i] & 0xff));
-        }
-    }
-
-    /**
-     * Convert a single printable ASCII FASTQ format phred score to binary phred score.
-     *
-     * @param ch Printable ASCII FASTQ format phred score.
-     * @return Binary phred score.
-     */
-    public static int fastqToPhred(final char ch) {
-        if (ch < 33 || ch > 126) {
-            throw new IllegalArgumentException("Invalid fastq character: " + ch);
-        }
-        return (ch - 33);
-    }
-
-    /**
-     * calculate the bin given an alignment in [beg,end)
-     * Copied from SAM spec.
-     *
-     * @param beg 0-based start of read (inclusive)
-     * @param end 0-based end of read (exclusive)
-     * @deprecated Use {@link GenomicIndexUtil#regionToBin}
-     */
-    @Deprecated
-    static int reg2bin(final int beg, final int end) {
-        return GenomicIndexUtil.regionToBin(beg, end);
-    }
-
-    /**
-     * Handle a list of validation errors according to the validation stringency.
-     *
-     * @param validationErrors List of errors to report, or null if there are no errors.
-     * @param samRecordIndex Record number of the SAMRecord corresponding to the validation errors, or -1 if
-     * the record number is not known.
-     * @param validationStringency If STRICT, throw a SAMFormatException.  If LENIENT, print the validation
-     * errors to stderr.  If SILENT, do nothing.
-     */
-    public static void processValidationErrors(final List<SAMValidationError> validationErrors,
-                                               final long samRecordIndex,
-                                               final ValidationStringency validationStringency) {
-        if (validationErrors != null && !validationErrors.isEmpty()) {
-            for (final SAMValidationError validationError : validationErrors) {
-                validationError.setRecordNumber(samRecordIndex);
-            }
-            if (validationStringency == ValidationStringency.STRICT) {
-                throw new SAMFormatException("SAM validation error: " + validationErrors.get(0));
-            } else if (validationStringency == ValidationStringency.LENIENT) {
-                for (final SAMValidationError error : validationErrors) {
-                    System.err.println("Ignoring SAM validation error: " + error);
-                }
-            }
-        }
-    }
-
-    public static void processValidationError(final SAMValidationError validationError,
-                                              final ValidationStringency validationStringency) {
-        if (validationStringency == ValidationStringency.STRICT) {
-            throw new SAMFormatException("SAM validation error: " + validationError);
-        } else if (validationStringency == ValidationStringency.LENIENT) {
-            System.err.println("Ignoring SAM validation error: " + validationError);
-        }
-
-    }
-
-    private static final SAMHeaderRecordComparator<SAMReadGroupRecord> HEADER_RECORD_COMPARATOR =
-            new SAMHeaderRecordComparator<SAMReadGroupRecord>(
-                    SAMReadGroupRecord.PLATFORM_UNIT_TAG,
-                    SAMReadGroupRecord.LIBRARY_TAG,
-                    SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG,
-                    SAMReadGroupRecord.READ_GROUP_SAMPLE_TAG,
-                    SAMReadGroupRecord.SEQUENCING_CENTER_TAG,
-                    SAMReadGroupRecord.PLATFORM_TAG,
-                    SAMReadGroupRecord.DESCRIPTION_TAG,
-                    SAMReadGroupRecord.READ_GROUP_ID_TAG    // We don't actually want to compare with ID but it's suitable
-                    // "just in case" since it's the only one that's actually required
-            );
-
-    /**
-     * Calculate a hash code from identifying information in the RG (read group) records in a SAM file's
-     * header. This hash code changes any time read groups are added or removed. Comparing one file's
-     * hash code to another's tells you if the read groups in the BAM files are different.
-     */
-    public static String calculateReadGroupRecordChecksum(final File input, final File referenceFasta) {
-        final String ENCODING = "UTF-8";
-
-        final MessageDigest digest;
-        try {
-            digest = MessageDigest.getInstance("MD5");
-        } catch (final NoSuchAlgorithmException nsae) {
-            throw new Error("No MD5 algorithm was available in a Java JDK? Unheard-of!");
-        }
-
-        // Sort the read group records by their first
-        final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(input);
-        final List<SAMReadGroupRecord> sortedRecords = new ArrayList<SAMReadGroupRecord>(reader.getFileHeader().getReadGroups());
-        Collections.sort(sortedRecords, HEADER_RECORD_COMPARATOR);
-
-        for (final SAMReadGroupRecord rgRecord : sortedRecords) {
-            final TreeMap<String, String> sortedAttributes = new TreeMap<String, String>();
-            for (final Map.Entry<String, String> attributeEntry : rgRecord.getAttributes()) {
-                sortedAttributes.put(attributeEntry.getKey(), attributeEntry.getValue());
-            }
-
-            try {
-                for (final Map.Entry<String, String> sortedEntry : sortedAttributes.entrySet()) {
-                    if (!sortedEntry.getKey().equals(SAMReadGroupRecord.READ_GROUP_ID_TAG)) { // Redundant check, safety first
-                        digest.update(sortedEntry.getKey().getBytes(ENCODING));
-                        digest.update(sortedEntry.getValue().getBytes(ENCODING));
-                    }
-                }
-            } catch (final UnsupportedEncodingException uee) {
-                throw new Error("No " + ENCODING + "!? WTH?");
-            }
-        }
-
-        // Convert to a String and pad to get the full 32 chars.
-        final StringBuilder hashText = new StringBuilder((new BigInteger(1, digest.digest())).toString(16));
-        while (hashText.length() < 32) hashText.insert(0, "0");
-
-        CloserUtil.close(reader);
-        return hashText.toString();
-    }
-
-    /**
-     * Chains <code>program</code> in front of the first "head" item in the list of
-     * SAMProgramRecords in <code>header</code>.  This method should not be used
-     * when there are multiple chains of program groups in a header, only when
-     * it can safely be assumed that there is only one chain.  It correctly handles
-     * the case where <code>program</code> has already been added to the header, so
-     * it can be used whether creating a SAMProgramRecord with a constructor or when
-     * calling SAMFileHeader.createProgramRecord().
-     */
-    public static void chainSAMProgramRecord(final SAMFileHeader header, final SAMProgramRecord program) {
-
-        final List<SAMProgramRecord> pgs = header.getProgramRecords();
-        if (!pgs.isEmpty()) {
-            final List<String> referencedIds = new ArrayList<String>();
-            for (final SAMProgramRecord pg : pgs) {
-                if (pg.getPreviousProgramGroupId() != null) {
-                    referencedIds.add(pg.getPreviousProgramGroupId());
-                }
-            }
-            for (final SAMProgramRecord pg : pgs) {
-                // if record being chained has already been added, ignore it
-                if (pg.getProgramGroupId().equals(program.getProgramGroupId())) {
-                    continue;
-                }
-                if (!referencedIds.contains(pg.getProgramGroupId())) {
-                    program.setPreviousProgramGroupId(pg.getProgramGroupId());
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Strip mapping information from a SAMRecord.
-     *
-     * WARNING: by clearing the secondary and supplementary flags,
-     * this may have the affect of producing multiple distinct records with the
-     * same read name and flags, which may lead to invalid SAM/BAM output.
-     * Callers of this method should make sure to deal with this issue.
-     */
-    public static void makeReadUnmapped(final SAMRecord rec) {
-        if (rec.getReadNegativeStrandFlag()) {
-            SAMRecordUtil.reverseComplement(rec);
-            rec.setReadNegativeStrandFlag(false);
-        }
-        rec.setDuplicateReadFlag(false);
-        rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-        rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
-        rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
-        rec.setInferredInsertSize(0);
-        rec.setNotPrimaryAlignmentFlag(false);
-        rec.setSupplementaryAlignmentFlag(false);
-        rec.setProperPairFlag(false);
-        rec.setReadUnmappedFlag(true);
-    }
-
-    /**
-     * Strip mapping information from a SAMRecord, but preserve it in the 'O' tags if it isn't already set.
-     */
-    public static void makeReadUnmappedWithOriginalTags(final SAMRecord rec) {
-        if (!hasOriginalMappingInformation(rec)) {
-            rec.setAttribute(SAMTag.OP.name(), rec.getAlignmentStart());
-            rec.setAttribute(SAMTag.OC.name(), rec.getCigarString());
-            rec.setAttribute(SAMTag.OF.name(), rec.getFlags());
-            rec.setAttribute(SAMTag.OR.name(), rec.getReferenceName());
-        }
-        makeReadUnmapped(rec);
-    }
-
-    /**
-     * See if any tags pertaining to original mapping information have been set.
-     */
-    public static boolean hasOriginalMappingInformation(final SAMRecord rec) {
-        return rec.getAttribute(SAMTag.OP.name()) != null
-                || rec.getAttribute(SAMTag.OC.name()) != null
-                || rec.getAttribute(SAMTag.OF.name()) != null
-                || rec.getAttribute(SAMTag.OR.name()) != null;
-    }
-
-    /**
-     * Determines if a cigar has any element that both consumes read bases and consumes reference bases
-     * (e.g. is not all soft-clipped)
-     */
-    public static boolean cigarMapsNoBasesToRef(final Cigar cigar) {
-        for (final CigarElement el : cigar.getCigarElements()) {
-            if (el.getOperator().consumesReadBases() && el.getOperator().consumesReferenceBases()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Tests if the provided record is mapped entirely beyond the end of the reference (i.e., the alignment start is greater than the
-     * length of the sequence to which the record is mapped).
-     * @param record must not have a null SamFileHeader
-     */
-    public static boolean recordMapsEntirelyBeyondEndOfReference(final SAMRecord record) {
-        if (record.getHeader() == null) {
-            throw new SAMException("A non-null SAMHeader is required to resolve the mapping position: " + record.getReadName());
-        }
-        else {
-            return record.getHeader().getSequence(record.getReferenceIndex()).getSequenceLength() < record.getAlignmentStart();
-        }
-    }
-
-    /**
-     * @return negative if mapq1 < mapq2, etc.
-     * Note that MAPQ(0) < MAPQ(255) < MAPQ(1)
-     */
-    public static int compareMapqs(final int mapq1, final int mapq2) {
-        if (mapq1 == mapq2) return 0;
-        if (mapq1 == 0) return -1;
-        else if (mapq2 == 0) return 1;
-        else if (mapq1 == 255) return -1;
-        else if (mapq2 == 255) return 1;
-        else return mapq1 - mapq2;
-    }
-
-
-    /**
-     * Hokey algorithm for combining two MAPQs into values that are comparable, being cognizant of the fact
-     * that in MAPQ world, 1 > 255 > 0. In this algorithm, 255 is treated as if it were 0.01, so that
-     * CombinedMapq(1,0) > CombinedMapq(255, 255) > CombinedMapq(0, 0).
-     * The return value should not be used for anything other than comparing to the return value of other
-     * invocations of this method.
-     */
-    public static int combineMapqs(int m1, int m2) {
-        if (m1 == 255) m1 = 1;
-        else m1 *= 100;
-
-        if (m2 == 255) m2 = 1;
-        else m2 *= 100;
-
-        return m1 + m2;
-
-    }
-
-    /**
-     * Returns the virtual file offset of the first record in a BAM file - i.e. the virtual file
-     * offset after skipping over the text header and the sequence records.
-     */
-    public static long findVirtualOffsetOfFirstRecordInBam(final File bamFile) {
-        try {
-            return BAMFileReader.findVirtualOffsetOfFirstRecord(bamFile);
-        } catch (final IOException ioe) {
-            throw new RuntimeEOFException(ioe);
-        }
-    }
-
-    /**
-     * Given a Cigar, Returns blocks of the sequence that have been aligned directly to the
-     * reference sequence. Note that clipped portions, and inserted and deleted bases (vs. the reference)
-     * are not represented in the alignment blocks.
-     *
-     * @param cigar The cigar containing the alignment information
-     * @param alignmentStart The start (1-based) of the alignment
-     * @param cigarTypeName The type of cigar passed - for error logging.
-     * @return List of alignment blocks
-     */
-    public static List<AlignmentBlock> getAlignmentBlocks(final Cigar cigar, final int alignmentStart, final String cigarTypeName) {
-        if (cigar == null) return Collections.emptyList();
-
-        final List<AlignmentBlock> alignmentBlocks = new ArrayList<AlignmentBlock>();
-        int readBase = 1;
-        int refBase = alignmentStart;
-
-        for (final CigarElement e : cigar.getCigarElements()) {
-            switch (e.getOperator()) {
-                case H:
-                    break; // ignore hard clips
-                case P:
-                    break; // ignore pads
-                case S:
-                    readBase += e.getLength();
-                    break; // soft clip read bases
-                case N:
-                    refBase += e.getLength();
-                    break;  // reference skip
-                case D:
-                    refBase += e.getLength();
-                    break;
-                case I:
-                    readBase += e.getLength();
-                    break;
-                case M:
-                case EQ:
-                case X:
-                    final int length = e.getLength();
-                    alignmentBlocks.add(new AlignmentBlock(readBase, refBase, length));
-                    readBase += length;
-                    refBase += length;
-                    break;
-                default:
-                    throw new IllegalStateException("Case statement didn't deal with " + cigarTypeName + " op: " + e.getOperator());
-            }
-        }
-        return Collections.unmodifiableList(alignmentBlocks);
-    }
-
-    /**
-     * @param alignmentStart The start (1-based) of the alignment
-     * @param cigar The cigar containing the alignment information
-     * @return the alignment start (1-based, inclusive) adjusted for clipped bases.  For example if the read
-     * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
-     * then this method will return 96.
-     * <p/>
-     * Invalid to call on an unmapped read.
-     * Invalid to call with cigar = null
-     */
-    public static int getUnclippedStart(final int alignmentStart, final Cigar cigar) {
-        int unClippedStart = alignmentStart;
-        for (final CigarElement cig : cigar.getCigarElements()) {
-            final CigarOperator op = cig.getOperator();
-            if (op == CigarOperator.SOFT_CLIP || op == CigarOperator.HARD_CLIP) {
-                unClippedStart -= cig.getLength();
-            } else {
-                break;
-            }
-        }
-
-        return unClippedStart;
-    }
-
-    /**
-     * @param alignmentEnd The end (1-based) of the alignment
-     * @param cigar The cigar containing the alignment information
-     * @return the alignment end (1-based, inclusive) adjusted for clipped bases.  For example if the read
-     * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
-     * then this method will return 107.
-     * <p/>
-     * Invalid to call on an unmapped read.
-     * Invalid to call with cigar = null
-     */
-    public static int getUnclippedEnd(final int alignmentEnd, final Cigar cigar) {
-        int unClippedEnd = alignmentEnd;
-        final List<CigarElement> cigs = cigar.getCigarElements();
-        for (int i = cigs.size() - 1; i >= 0; --i) {
-            final CigarElement cig = cigs.get(i);
-            final CigarOperator op = cig.getOperator();
-
-            if (op == CigarOperator.SOFT_CLIP || op == CigarOperator.HARD_CLIP) {
-                unClippedEnd += cig.getLength();
-            } else {
-                break;
-            }
-        }
-
-        return unClippedEnd;
-    }
-
-    /**
-     * Returns the Mate Cigar String as stored in the attribute 'MC'.
-     *
-     * @param rec the SAM record
-     * @return Mate Cigar String, or null if there is none.
-     */
-    public static String getMateCigarString(final SAMRecord rec) {
-        return rec.getStringAttribute(SAMTag.MC.name());
-    }
-
-    /**
-     * Returns the Mate Cigar or null if there is none.
-     *
-     * @param rec the SAM record
-     * @param withValidation true if we are to validate the mate cigar before returning, false otherwise.
-     * @return Cigar object for the read's mate, or null if there is none.
-     */
-    public static Cigar getMateCigar(final SAMRecord rec, final boolean withValidation) {
-        final String mateCigarString = getMateCigarString(rec);
-        Cigar mateCigar = null;
-        if (mateCigarString != null) {
-            mateCigar = TextCigarCodec.decode(mateCigarString);
-            if (withValidation && rec.getValidationStringency() != ValidationStringency.SILENT) {
-                final List<AlignmentBlock> alignmentBlocks = getAlignmentBlocks(mateCigar, rec.getMateAlignmentStart(), "mate cigar");
-                SAMUtils.processValidationErrors(validateCigar(rec, mateCigar, rec.getMateReferenceIndex(), alignmentBlocks, -1, "Mate CIGAR"), -1L, rec.getValidationStringency());
-            }
-        }
-        return mateCigar;
-    }
-
-    /**
-     * Returns the Mate Cigar or null if there is none.  No validation is done on the returned cigar.
-     *
-     * @param rec the SAM record
-     * @return Cigar object for the read's mate, or null if there is none.
-     */
-    public static Cigar getMateCigar(final SAMRecord rec) {
-        return getMateCigar(rec, false);
-    }
-
-    /**
-     * @param rec the SAM record
-     * @return number of cigar elements (number + operator) in the mate cigar string.
-     */
-    public static int getMateCigarLength(final SAMRecord rec) {
-        final Cigar mateCigar = getMateCigar(rec);
-        return (mateCigar != null) ? mateCigar.numCigarElements() : 0;
-    }
-
-    /**
-     * This method uses the MateCigar value as determined from the attribute MC.  It must be non-null.
-     *
-     * @param rec the SAM record
-     * @return 1-based inclusive rightmost position of the clipped mate sequence, or 0 read if unmapped.
-     */
-    public static int getMateAlignmentEnd(final SAMRecord rec) {
-        if (rec.getMateUnmappedFlag()) {
-            throw new RuntimeException("getMateAlignmentEnd called on an unmapped mate.");
-        }
-        final Cigar mateCigar = SAMUtils.getMateCigar(rec);
-        if (mateCigar == null) {
-            throw new SAMException("Mate CIGAR (Tag MC) not found.");
-        }
-        return CoordMath.getEnd(rec.getMateAlignmentStart(), mateCigar.getReferenceLength());
-    }
-
-    /**
-     * @param rec the SAM record
-     * @return the mate alignment start (1-based, inclusive) adjusted for clipped bases.  For example if the mate
-     * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
-     * then this method will return 96.
-     * <p/>
-     * Invalid to call on an unmapped read.
-     */
-    public static int getMateUnclippedStart(final SAMRecord rec) {
-        if (rec.getMateUnmappedFlag())
-            throw new RuntimeException("getMateUnclippedStart called on an unmapped mate.");
-        final Cigar mateCigar = getMateCigar(rec);
-        if (mateCigar == null) {
-            throw new SAMException("Mate CIGAR (Tag MC) not found.");
-        }
-        return SAMUtils.getUnclippedStart(rec.getMateAlignmentStart(), mateCigar);
-    }
-
-
-    /**
-     * @param rec the SAM record
-     * @return the mate alignment end (1-based, inclusive) adjusted for clipped bases.  For example if the mate
-     * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
-     * then this method will return 107.
-     * <p/>
-     * Invalid to call on an unmapped read.
-     */
-    public static int getMateUnclippedEnd(final SAMRecord rec) {
-        if (rec.getMateUnmappedFlag()) {
-            throw new RuntimeException("getMateUnclippedEnd called on an unmapped mate.");
-        }
-        final Cigar mateCigar = SAMUtils.getMateCigar(rec);
-        if (mateCigar == null) {
-            throw new SAMException("Mate CIGAR (Tag MC) not found.");
-        }
-        return SAMUtils.getUnclippedEnd(getMateAlignmentEnd(rec), mateCigar);
-    }
-
-    /**
-     * @param rec the SAM record
-     * Returns blocks of the mate sequence that have been aligned directly to the
-     * reference sequence. Note that clipped portions of the mate and inserted and
-     * deleted bases (vs. the reference) are not represented in the alignment blocks.
-     */
-    public static List<AlignmentBlock> getMateAlignmentBlocks(final SAMRecord rec) {
-        return getAlignmentBlocks(getMateCigar(rec), rec.getMateAlignmentStart(), "mate cigar");
-    }
-
-    /**
-     * Run all validations of the mate's CIGAR.  These include validation that the CIGAR makes sense independent of
-     * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
-     *
-     * @param rec the SAM record
-     * @param cigar The cigar containing the alignment information
-     * @param referenceIndex The reference index
-     * @param alignmentBlocks The alignment blocks (parsed from the cigar)
-     * @param recordNumber For error reporting.  -1 if not known.
-     * @param cigarTypeName For error reporting.  "Read CIGAR" or "Mate Cigar"
-     * @return List of errors, or null if no errors.
-     */
-
-    public static List<SAMValidationError> validateCigar(final SAMRecord rec,
-                                                         final Cigar cigar,
-                                                         final Integer referenceIndex,
-                                                         final List<AlignmentBlock> alignmentBlocks,
-                                                         final long recordNumber,
-                                                         final String cigarTypeName) {
-        // Don't know line number, and don't want to force read name to be decoded.
-        List<SAMValidationError> ret = cigar.isValid(rec.getReadName(), recordNumber);
-        if (referenceIndex != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-            SAMFileHeader samHeader = rec.getHeader();
-            if (null == samHeader) {
-                if (ret == null) ret = new ArrayList<SAMValidationError>();
-                ret.add(new SAMValidationError(SAMValidationError.Type.MISSING_HEADER,
-                        cigarTypeName + " A non-null SAMHeader is required to validate cigar elements for: ", rec.getReadName(), recordNumber));
-            }
-            else {
-                final SAMSequenceRecord sequence = samHeader.getSequence(referenceIndex);
-                final int referenceSequenceLength = sequence.getSequenceLength();
-                for (final AlignmentBlock alignmentBlock : alignmentBlocks) {
-                    if (alignmentBlock.getReferenceStart() + alignmentBlock.getLength() - 1 > referenceSequenceLength) {
-                        if (ret == null) ret = new ArrayList<SAMValidationError>();
-                        ret.add(new SAMValidationError(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE,
-                                cigarTypeName + " M operator maps off end of reference", rec.getReadName(), recordNumber));
-                        break;
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    /**
-     * Run all validations of the mate's CIGAR.  These include validation that the CIGAR makes sense independent of
-     * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
-     *
-     * @param rec the SAM record
-     * @param recordNumber For error reporting.  -1 if not known.
-     * @return List of errors, or null if no errors.
-     */
-    public static List<SAMValidationError> validateMateCigar(final SAMRecord rec, final long recordNumber) {
-        List<SAMValidationError> ret = null;
-
-        if (rec.getValidationStringency() != ValidationStringency.SILENT) {
-            if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) {      // The mateCigar will be defined if the mate is mapped
-                if (getMateCigarString(rec) != null) {
-                    ret = SAMUtils.validateCigar(rec, getMateCigar(rec), rec.getMateReferenceIndex(), getMateAlignmentBlocks(rec), recordNumber, "Mate CIGAR");
-                }
-            } else {
-                if (getMateCigarString(rec) != null) {
-                    ret = new ArrayList<SAMValidationError>();
-                    if (!rec.getReadPairedFlag()) {
-                        // If the read is not paired, and the Mate Cigar String (MC Attribute) exists, that is a validation error
-                        ret.add(new SAMValidationError(SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE,
-                                "Mate CIGAR String (MC Attribute) present for a read that is not paired", rec.getReadName(), recordNumber));
-                    } else { // will hit here if rec.getMateUnmappedFlag() is true
-                        // If the Mate is unmapped, and the Mate Cigar String (MC Attribute) exists, that is a validation error.
-                        ret.add(new SAMValidationError(SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE,
-                                "Mate CIGAR String (MC Attribute) present for a read whose mate is unmapped", rec.getReadName(), recordNumber));
-                    }
-                }
-            }
-        }
-
-        return ret;
-    }
-
-    /**
-     * Checks to see if it is valid for this record to have a mate CIGAR (MC) and then if there is a mate CIGAR available.  This is done by
-     * checking that this record is paired, its mate is mapped, and that it returns a non-null mate CIGAR.
-     *
-     * @param rec
-     * @return
-     */
-    public static boolean hasMateCigar(SAMRecord rec) {
-        // NB: use getMateCigarString rather than getMateCigar to avoid validation.
-        return (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag() && null != SAMUtils.getMateCigarString(rec));
-    }
-
-    /**
-     * Returns a string that is the the read group ID and read name separated by a colon.  This is meant to cannonically
-     * identify a given record within a set of records.
-     *
-     * @param record
-     * @return
-     */
-    public static String getCanonicalRecordName(final SAMRecord record) {
-        String name = record.getStringAttribute(ReservedTagConstants.READ_GROUP_ID);
-        if (null == name) name = record.getReadName();
-        else name = name + ":" + record.getReadName();
-        return name;
-    }
-
-    /**
-     * Returns the number of bases that need to be clipped due to overlapping pairs.  If the record is not paired,
-     * or the given record's start position is greater than its mate's start position, zero is automatically returned.
-     * NB: This method assumes that the record's mate is not contained within the given record's alignment.
-     *
-     * @param rec
-     * @return the number of bases at the end of the read that need to be clipped such that there would be no overlapping bases with its mate.
-     * Read bases include only those from insertion, match, or mismatch Cigar operators.
-     */
-    public static int getNumOverlappingAlignedBasesToClip(final SAMRecord rec) {
-        // NB: ignores how to handle supplemental records when present for both ends by just using the mate information in the record.
-
-        if (!rec.getReadPairedFlag() || rec.getReadUnmappedFlag() || rec.getMateUnmappedFlag()) return 0;
-
-        // Only clip records that are left-most in genomic order and overlapping.
-        if (rec.getMateAlignmentStart() < rec.getAlignmentStart()) return 0; // right-most, so ignore.
-        else if (rec.getMateAlignmentStart() == rec.getAlignmentStart() && rec.getFirstOfPairFlag()) return 0; // same start, so pick the first end
-
-        // Find the number of read bases after the given mate's alignment start.
-        int numBasesToClip = 0;
-        final int refStartPos = rec.getMateAlignmentStart(); // relative reference position after which we should start clipping
-        final Cigar cigar = rec.getCigar();
-        int refPos = rec.getAlignmentStart();
-        for (final CigarElement el : cigar.getCigarElements()) {
-            final CigarOperator operator = el.getOperator();
-            final int refBasesLength = operator.consumesReferenceBases() ? el.getLength() : 0;
-            if (refStartPos <= refPos + refBasesLength - 1) { // add to clipped bases
-                if (operator == CigarOperator.MATCH_OR_MISMATCH) { // M
-                    if (refStartPos < refPos) numBasesToClip += refBasesLength; // use all of the bases
-                    else numBasesToClip += (refPos + refBasesLength) - refStartPos;  // since the mate's alignment start can be in the middle of a cigar element
-                }
-                else if (operator == CigarOperator.SOFT_CLIP || operator == CigarOperator.HARD_CLIP || operator == CigarOperator.PADDING || operator == CigarOperator.SKIPPED_REGION) {
-                    // ignore
-                }
-                else { // ID
-                    numBasesToClip += operator.consumesReadBases() ? el.getLength() : 0; // clip all the bases in the read from this operator
-                }
-            }
-            refPos += refBasesLength;
-        }
-
-        if (numBasesToClip < 0) return 0; // left-most but not overlapping
-
-        return numBasesToClip;
-    }
-
-    /**
-     * Returns a (possibly new) record that has been clipped if isa  mapped paired and has overlapping bases with its mate.
-     * See {@link #getNumOverlappingAlignedBasesToClip(SAMRecord)} for how the number of overlapping bases is computed.
-     * NB: this does not properly consider a cigar like: 100M20S10H.
-     * NB: This method assumes that the record's mate is not contained within the given record's alignment.
-     *
-     * @param record the record from which to clip bases.
-     * @param noSideEffects if true a modified clone of the original record is returned, otherwise we modify the record directly.
-     * @return
-     */
-    public static SAMRecord clipOverlappingAlignedBases(final SAMRecord record, final boolean noSideEffects) {
-        return clipOverlappingAlignedBases(record, getNumOverlappingAlignedBasesToClip(record), noSideEffects);
-    }
-
-    /**
-     * Returns a (possibly new) SAMRecord with the given number of bases soft-clipped at the end of the read if is a mapped
-     * paired and has overlapping bases with its mate.
-     * NB: this does not properly consider a cigar like: 100M20S10H.
-     * NB: This method assumes that the record's mate is not contained within the given record's alignment.
-     *
-     * @param record the record from which to clip bases.
-     * @param numOverlappingBasesToClip the number of bases to clip at the end of the read.
-     * @param noSideEffects if true a modified clone of the original record is returned, otherwise we modify the record directly.
-     * @return
-     */
-    public static SAMRecord clipOverlappingAlignedBases(final SAMRecord record, final int numOverlappingBasesToClip, final boolean noSideEffects) {
-        // NB: ignores how to handle supplemental records when present for both ends by just using the mate information in the record.
-
-        if (numOverlappingBasesToClip <= 0 || record.getReadUnmappedFlag() || record.getMateUnmappedFlag()) return record;
-
-        try {
-            final SAMRecord rec = noSideEffects ? ((SAMRecord)record.clone()) : record;
-
-            // watch out for when the second read overlaps all of the first read
-            if (rec.getMateAlignmentStart() <= rec.getAlignmentStart()) { // make it unmapped
-                rec.setReadUnmappedFlag(true);
-                return rec;
-            }
-
-            // 1-based index of first base in read to clip.
-            int clipFrom = rec.getReadLength() - numOverlappingBasesToClip + 1;
-            // we have to check if the last cigar element is soft-clipping, so we can subtract that from clipFrom
-            final CigarElement cigarElement = rec.getCigar().getCigarElement(rec.getCigarLength()-1);
-            if (CigarOperator.SOFT_CLIP == cigarElement.getOperator()) clipFrom -= cigarElement.getLength();
-            // FIXME: does not properly consider a cigar like: 100M20S10H
-
-            // clip it, clip it good
-            rec.setCigar(new Cigar(CigarUtil.softClipEndOfRead(clipFrom, rec.getCigar().getCigarElements())));
-            return rec;
-        } catch (final CloneNotSupportedException e) {
-            throw new SAMException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Checks if a long attribute value is within the allowed range of a 32-bit unsigned integer.
-     *
-     * @param value a long value to check
-     * @return true if value is >= 0 and <= {@link BinaryCodec#MAX_UINT}, and false otherwise
-     */
-    public static boolean isValidUnsignedIntegerAttribute(long value) {
-        return value >= 0 && value <= BinaryCodec.MAX_UINT;
-    }
-
-    /**
-     * Extract a List of 'other canonical alignments' from a SAM record. Those alignments are stored as a string in the 'SA' tag as defined
-     * in the SAM specification.
-     * The name, sequence and qualities, mate data are copied from the original record.
-     * @param record must be non null and must have a non-null associated header.
-     * @return a list of 'other canonical alignments' SAMRecords. The list is empty if the 'SA' attribute is missing.
-     */
-    public static List<SAMRecord> getOtherCanonicalAlignments(final SAMRecord record) {
-        if( record == null ) throw new IllegalArgumentException("record is null");
-        if( record.getHeader() == null ) throw new IllegalArgumentException("record.getHeader() is null");
-        /* extract value of SA tag */
-        final Object saValue = record.getAttribute( SAMTagUtil.getSingleton().SA );
-        if( saValue == null ) return Collections.emptyList();
-        if( ! (saValue instanceof String) ) throw new SAMException(
-                "Expected a String for attribute 'SA' but got " + saValue.getClass() );
-
-        final SAMRecordFactory samReaderFactory = new DefaultSAMRecordFactory();
-
-        /* the spec says: "Other canonical alignments in a chimeric alignment, formatted as a
-         * semicolon-delimited list: (rname,pos,strand,CIGAR,mapQ,NM;)+.
-         * Each element in the list represents a part of the chimeric alignment.
-         * Conventionally, at a supplementary line, the  1rst element points to the primary line.
-         */
-
-        /* break string using semicolon */
-        final String semiColonStrs[] = SEMICOLON_PAT.split((String)saValue);
-
-        /* the result list */
-        final List<SAMRecord> alignments = new ArrayList<>( semiColonStrs.length );
-
-        /* base SAM flag */
-        int record_flag = record.getFlags() ;
-        record_flag &= ~SAMFlag.PROPER_PAIR.flag;
-        record_flag &= ~SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag;
-        record_flag &= ~SAMFlag.READ_REVERSE_STRAND.flag;
-
-
-        for(int i=0; i< semiColonStrs.length;++i  ) {
-            final String semiColonStr = semiColonStrs[i];
-            /* ignore empty string */
-            if( semiColonStr.isEmpty() ) continue;
-
-            /* break string using comma */
-            final String commaStrs[] = COMMA_PAT.split(semiColonStr);
-            if( commaStrs.length != 6 )  throw new SAMException("Bad 'SA' attribute in " + semiColonStr);
-
-            /* create the new record */
-            final SAMRecord otherRec = samReaderFactory.createSAMRecord( record.getHeader() );
-
-            /* copy fields from the original record */
-            otherRec.setReadName( record.getReadName() );
-            otherRec.setReadBases( record.getReadBases() );
-            otherRec.setBaseQualities( record.getBaseQualities() );
-            if( record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
-                otherRec.setMateReferenceIndex( record.getMateReferenceIndex() );
-                otherRec.setMateAlignmentStart( record.getMateAlignmentStart() );
-            }
-
-
-            /* get reference sequence */
-            final int tid = record.getHeader().getSequenceIndex( commaStrs[0] );
-            if( tid == -1 ) throw new SAMException("Unknown contig in " + semiColonStr);
-            otherRec.setReferenceIndex( tid );
-
-            /* fill POS */
-            final int alignStart;
-            try {
-                alignStart = Integer.parseInt(commaStrs[1]);
-            } catch( final NumberFormatException err ) {
-                throw new SAMException("bad POS in "+semiColonStr, err);
-            }
-
-            otherRec.setAlignmentStart( alignStart );
-
-            /* set TLEN */
-            if( record.getReadPairedFlag() &&
-                !record.getMateUnmappedFlag() &&
-                record.getMateReferenceIndex() == tid ) {
-                otherRec.setInferredInsertSize( record.getMateAlignmentStart() - alignStart );
-            }
-
-            /* set FLAG */
-           int other_flag = record_flag;
-           other_flag |= (commaStrs[2].equals("+") ? 0 : SAMFlag.READ_REVERSE_STRAND.flag) ;
-           /* spec: Conventionally, at a supplementary line, the  1st element points to the primary line */
-           if( !( record.getSupplementaryAlignmentFlag() && i==0 ) ) {
-               other_flag |= SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag;
-           }
-           otherRec.setFlags(other_flag);
-
-           /* set CIGAR */
-           otherRec.setCigar( TextCigarCodec.decode( commaStrs[3] ) );
-
-            /* set MAPQ */
-            try {
-                otherRec.setMappingQuality( Integer.parseInt(commaStrs[4]) );
-            } catch (final NumberFormatException err) {
-                throw new SAMException("bad MAPQ in "+semiColonStr, err);
-            }
-
-            /* fill NM */
-            try {
-                if (!commaStrs[5].equals("*")) {
-                    otherRec.setAttribute(SAMTagUtil.getSingleton().NM, Integer.parseInt(commaStrs[5]));
-                }
-            } catch (final NumberFormatException err) {
-                throw new SAMException("bad NM in "+semiColonStr, err);
-            }
-
-            /* if strand is not the same: reverse-complement */
-            if( otherRec.getReadNegativeStrandFlag() != record.getReadNegativeStrandFlag() ) {
-                SAMRecordUtil.reverseComplement(otherRec);
-            }
-
-            /* add the alignment */
-            alignments.add( otherRec );
-        }
-        return alignments;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SAMValidationError.java b/src/main/java/htsjdk/samtools/SAMValidationError.java
deleted file mode 100644
index d560b11..0000000
--- a/src/main/java/htsjdk/samtools/SAMValidationError.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import java.io.Serializable;
-
-/**
- * Class that encapsulates a validation error message as well as a type code so that
- * errors can be aggregated by type.
- *
- * @author Doug Voet
- */
-public class SAMValidationError implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    public enum Severity {
-        WARNING, ERROR
-    }
-
-    public enum Type {
-        /** quality encodings out of range; appear to be Solexa or Illumina when Phread expected */
-        INVALID_QUALITY_FORMAT(Severity.WARNING),
-
-        /** proper pair flag set for unpaired read */
-        INVALID_FLAG_PROPER_PAIR,
-
-        /** mate unmapped flag set when mate is mapped or not set when mate is not mapped */
-        INVALID_FLAG_MATE_UNMAPPED,
-
-        /** mate unmapped flag does not match read unmapped flag of mate */
-        MISMATCH_FLAG_MATE_UNMAPPED,
-
-        /** mate negative strand flag set for unpaired read */
-        INVALID_FLAG_MATE_NEG_STRAND,
-
-        /** mate negative strand flag does not match read negative strand flag of mate */
-        MISMATCH_FLAG_MATE_NEG_STRAND,
-
-        /** first of pair flag set for unpaired read */
-        INVALID_FLAG_FIRST_OF_PAIR,
-
-        /** second of pair flag set for unpaired read */
-        INVALID_FLAG_SECOND_OF_PAIR,
-
-        /** pair flag set but not marked as first or second of pair */
-        PAIRED_READ_NOT_MARKED_AS_FIRST_OR_SECOND(Severity.WARNING),
-
-        /** not primary alignment flag set for unmapped read */
-        INVALID_FLAG_NOT_PRIM_ALIGNMENT,
-
-        /** supplementary alignment flag set for unmapped read */
-        INVALID_FLAG_SUPPLEMENTARY_ALIGNMENT,
-
-        /** mapped read flat not set for mapped read */
-        INVALID_FLAG_READ_UNMAPPED,
-
-        /**
-         * inferred insert size is out of range
-         * @see SAMRecord#MAX_INSERT_SIZE
-         */
-        INVALID_INSERT_SIZE,
-
-        /** mapping quality set for unmapped read or is >= 256 */
-        INVALID_MAPPING_QUALITY,
-
-        /** CIGAR string is empty for mapped read or not empty of unmapped read, or other CIGAR badness. */
-        INVALID_CIGAR,
-
-        /** CIGAR string contains I followed by D, or vice versa */
-        ADJACENT_INDEL_IN_CIGAR(Severity.WARNING),
-
-        /** mate reference index (MRNM) set for unpaired read */
-        INVALID_MATE_REF_INDEX,
-
-        /** mate reference index (MRNM) does not match reference index of mate */
-        MISMATCH_MATE_REF_INDEX,
-
-        /** reference index not found in sequence dictionary */
-        INVALID_REFERENCE_INDEX,
-
-        /** alignment start is can not be correct */
-        INVALID_ALIGNMENT_START,
-
-        /** mate alignment does not match alignment start of mate */
-        MISMATCH_MATE_ALIGNMENT_START,
-
-        /** the record's mate fields do not match the corresponding fields of the mate */
-        MATE_FIELD_MISMATCH,
-
-        /** the NM tag (nucleotide differences) is incorrect */
-        INVALID_TAG_NM,
-
-        /** the NM tag (nucleotide differences) is missing */
-        MISSING_TAG_NM(Severity.WARNING),
-
-        /** the sam/bam file is missing the header */
-        MISSING_HEADER,
-
-        /** there is no sequence dictionary in the header */
-        MISSING_SEQUENCE_DICTIONARY,
-
-        /** the header is missing read group information */
-        MISSING_READ_GROUP,
-
-        /** the record is out of order */
-        RECORD_OUT_OF_ORDER,
-
-        /** A read group ID on a SAMRecord is not found in the header */
-        READ_GROUP_NOT_FOUND,
-
-        /** A SAMRecord is found with no read group id */
-        RECORD_MISSING_READ_GROUP(Severity.WARNING),
-
-        /** Indexing bin set on SAMRecord does not agree with computed value. */
-        INVALID_INDEXING_BIN,
-
-        MISSING_VERSION_NUMBER,
-
-        INVALID_VERSION_NUMBER,
-
-        TRUNCATED_FILE,
-
-        MISMATCH_READ_LENGTH_AND_QUALS_LENGTH,
-
-        EMPTY_READ,
-
-        /**
-         * Bases corresponding to M operator in CIGAR are beyond the end of the reference.
-         */
-        CIGAR_MAPS_OFF_REFERENCE,
-
-        /** Length of E2 (secondary base calls) and U2 (secondary base quals) tag values should match read length */
-        MISMATCH_READ_LENGTH_AND_E2_LENGTH,
-        MISMATCH_READ_LENGTH_AND_U2_LENGTH,
-
-        /** Secondary base calls should not be the same as primary, unless one or the other is N */
-        E2_BASE_EQUALS_PRIMARY_BASE(Severity.WARNING),
-
-        /** BAM appears to be healthy, but is an older file so doesn't have terminator block. */
-        BAM_FILE_MISSING_TERMINATOR_BLOCK(Severity.WARNING),
-
-        /** Header record is not one of the standard types */
-        UNRECOGNIZED_HEADER_TYPE,
-
-        /** Header tag does not have colon */
-        POORLY_FORMATTED_HEADER_TAG,
-
-        /** Header tag appears more than once in header line with different value */
-        HEADER_TAG_MULTIPLY_DEFINED,
-
-        HEADER_RECORD_MISSING_REQUIRED_TAG,
-
-        /** Date string is not ISO-8601 */
-        INVALID_DATE_STRING(Severity.WARNING),
-
-        /** Unsigned integer tag value is deprecated in BAM. */
-        TAG_VALUE_TOO_LARGE,
-
-        /** Invalid virtualFilePointer in index */
-        INVALID_INDEX_FILE_POINTER,
-
-        /** PI tag value is not numeric. */
-        INVALID_PREDICTED_MEDIAN_INSERT_SIZE,
-
-        /** Same read group id appears more than once */
-        DUPLICATE_READ_GROUP_ID,
-
-        /** The read group is missing its PL (platform unit) field */
-        MISSING_PLATFORM_VALUE,
-
-        /** The read group has an invalid value set for its PL field */
-        INVALID_PLATFORM_VALUE,
-
-        /** Same program group id appears more than once */
-        DUPLICATE_PROGRAM_GROUP_ID,
-
-        /** Read is marked as paired, but its pair was not found.  */
-        MATE_NOT_FOUND,
-
-        /** Both mates are marked as first of pair, or both mates are marked as second of pair. */
-        MATES_ARE_SAME_END,
-
-        /** The Cigar String in the MC Tag does not match the Cigar String for the mate of this read. */
-        MISMATCH_MATE_CIGAR_STRING,
-
-        /** There is a Cigar String (stored in the MC Tag) for a read whose mate is NOT mapped. */
-        MATE_CIGAR_STRING_INVALID_PRESENCE;
-
-        public final Severity severity;
-
-        private Type() {
-            this.severity = Severity.ERROR;
-        }
-
-        private Type(final Severity severity) {
-            this.severity = severity;
-        }
-
-        /**
-         * @return Format for writing to histogram summary output.
-         */
-        public String getHistogramString() {
-            return this.severity.name() + ":" + this.name();
-        }
-    }
-
-    private final Type type;
-    private final String message;
-    private final String readName;
-    private long recordNumber = -1;
-    private String source;
-
-    /**
-     * Construct a SAMValidationError with unknown record number.
-     * @param type
-     * @param message
-     * @param readName May be null if readName is not known.
-     */
-    public SAMValidationError(final Type type, final String message, final String readName) {
-        this.type = type;
-        this.message = message;
-        this.readName = readName;
-    }
-
-    /**
-     * Construct a SAMValidationError with possibly-known record number.
-     * @param type
-     * @param message
-     * @param readName May be null if readName is not known.
-     * @param recordNumber Position of the record in the SAM file it has been read from.  -1 if not known.
-     */
-    public SAMValidationError(final Type type, final String message, final String readName, final long recordNumber) {
-        this(type, message, readName);
-        this.recordNumber = recordNumber;
-    }
-
-    public String toString() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(type.severity.toString()).append(": ");
-        if (source != null) {
-            builder.append("File ").append(source.toString()).append(", ");
-        }
-        if (recordNumber > 0) {
-            builder.append("Record ").append(recordNumber).append(", ");
-        }
-        if (readName != null) {
-            builder.append("Read name ").append(readName).append(", ");
-        }
-        return builder.append(message).toString();
-    }
-
-    public Type getType() { return type; }
-    public String getMessage() { return message; }
-
-    /** may be null */
-    public String getReadName() { return readName; }
-
-    /** 1-based.  -1 if not known. */
-    public long getRecordNumber() { return recordNumber; }
-
-    public void setRecordNumber(final long recordNumber) { this.recordNumber = recordNumber; }
-
-    public String getSource() {
-        return source;
-    }
-
-    public void setSource(final String source) {
-        this.source = source;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SQTagUtil.java b/src/main/java/htsjdk/samtools/SQTagUtil.java
deleted file mode 100644
index daee4c3..0000000
--- a/src/main/java/htsjdk/samtools/SQTagUtil.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * Utility methods for encoding and decoding the SQ tag value of SAMRecord.
- * 
- * @author alecw at broadinstitute.org
- */
-public class SQTagUtil {
-    /**
-     * The ordinals of these are stored in the high-order 2 bits of each byte of the SQ tag.
-     * Note that these have the convenient property that the binary complement of each ordinal, masked to
-     * the two low-order bits, is the complementary base.
-     */
-    public enum SQBase {
-        SQ_A('A'), SQ_C('C'), SQ_G('G'), SQ_T('T');
-        private final Character base;
-
-        SQBase(final Character base) {
-            this.base = base;
-        }
-
-        public Character getBase() {
-            return base;
-        }
-    }
-
-    /**
-     * For complementing SQBase ordinals.
-     */
-    private static final int COMPLEMENT_MASK = 3;
-
-    private static final int QUALITY_MASK = 0x3f;
-    public static final byte MAX_QUALITY = QUALITY_MASK;
-    private static final int BASE_INDEX_SHIFT = 6;
-
-    /**
-     * Convert a pair of likelihoods into a value suitable for passing to baseAndProbDiffToSqValue.
-     * @param secondBestLikelihood Probability of the 2nd-best base call.  1 > secondBestLikelihood > thirdBestLikelihood.
-     * @param thirdBestLikelihood Probability of the 3rd-best base call.  thirdBestLikelihood > 0.
-     * @return ratio of input probabilities for storing in SQ tag.
-     */
-    public static byte sqScaledProbabilityRatio(final double secondBestLikelihood, final double thirdBestLikelihood) {
-        if (secondBestLikelihood >= 1.0 || thirdBestLikelihood <= 0 || thirdBestLikelihood > secondBestLikelihood) {
-            throw new IllegalArgumentException("Likelihoods out of range.  second best: " + secondBestLikelihood +
-            "; third best: " + thirdBestLikelihood);
-        }
-        // Cap value at QUALITY_MASK
-        return (byte)(Math.min(Math.round(-10.0 * Math.log10(thirdBestLikelihood/secondBestLikelihood)), QUALITY_MASK));
-    }
-
-    /**
-     * Compress a base and a log probabiliy difference (-10log10(p3/p2)) into
-     * a single byte so that it can be output in a SAMRecord's SQ field.
-     *
-     * @param base  the 2nd-best base.
-     * @param probRatio   the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)),
-     * rounded to an integer and capped so it fits in 6 bits.
-     * @return a byte containing the index and the log probability difference.
-     */
-    public static byte baseAndProbDiffToSqValue(final SQBase base, final byte probRatio) {
-        return baseAndProbDiffToSqValue(base.ordinal(), probRatio);
-    }
-
-    /**
-     * Compress a base and a log probabiliy difference (-10log10(p3/p2)) into
-     * a single byte so that it can be output in a SAMRecord's SQ field.
-     *
-     * @param base  the 2nd-best base (A=0, C=1, G=2, T=3).
-     * @param probRatio   the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)),
-     * rounded to an integer and capped so it fits in 6 bits.  If this value is > MAX_QUALITY, it is truncated to that.
-     * @return a byte containing the index and the log probability difference.
-     */
-    public static byte baseAndProbDiffToSqValue(final int base, final byte probRatio) {
-        return (byte)((base << BASE_INDEX_SHIFT) | Math.min(probRatio, QUALITY_MASK));
-    }
-
-    /**
-     * Retrieve SQ-scaled probability ratio from SQ value.
-     * @param sqValue
-     * @return the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)).
-     */
-    public static byte sqValueToProbRatio(final byte sqValue) {
-        return (byte)(sqValue & QUALITY_MASK);
-    }
-
-    /**
-     * Retrieve the 2nd-best base call from SQ value.
-     * @param sqValue
-     * @return 2nd-best base call.
-     */
-    public static SQBase sqValueToBase(final byte sqValue) {
-        return SQBase.values()[sqValueToBaseOrdinal(sqValue)];
-    }
-
-    /**
-     * Retrieve the 2nd-best base call from SQ value.
-     * @param sqValue
-     * @return Ordinal of 2nd-best base call.
-     */
-    public static int sqValueToBaseOrdinal(final byte sqValue) {
-        return (sqValue & 0xff) >>> BASE_INDEX_SHIFT;
-    }
-
-
-    /**
-     * Reverses and complements the sqValues in place.
-     * @param sqArray Array of SQ-values, with 2nd-best base in high-order 2 bits, and probability diff
-     * in low-order 6 bits.
-     */
-    public static void reverseComplementSqArray(final byte[] sqArray) {
-        final int lastIndex = sqArray.length - 1;
-
-        int i, j;
-        for (i=0, j=lastIndex; i<j; ++i, --j) {
-            final byte tmp = complementSqValue(sqArray[i]);
-            sqArray[i] = complementSqValue(sqArray[j]);
-            sqArray[j] = tmp;
-        }
-        if (sqArray.length % 2 == 1) {
-            sqArray[i] = complementSqValue(sqArray[i]);
-        }
-    }
-
-    private static byte complementSqValue(final byte sqValue) {
-        final byte probDiff = sqValueToProbRatio(sqValue);
-        final int baseOrdinal = sqValueToBaseOrdinal(sqValue);
-        final int complementOrdinal = COMPLEMENT_MASK & ~baseOrdinal;
-        return baseAndProbDiffToSqValue(complementOrdinal, probDiff);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/SRAFileReader.java b/src/main/java/htsjdk/samtools/SRAFileReader.java
deleted file mode 100644
index e76e10b..0000000
--- a/src/main/java/htsjdk/samtools/SRAFileReader.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-/**
- * Created by andrii.nikitiuk on 8/11/15.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.sra.ReferenceCache;
-import htsjdk.samtools.sra.SRAAccession;
-import htsjdk.samtools.util.CloseableIterator;
-
-import htsjdk.samtools.SamReader.Type;
-
-import htsjdk.samtools.util.Log;
-import ngs.ErrorMsg;
-import ngs.ReadCollection;
-import ngs.ReadGroupIterator;
-import ngs.ReferenceIterator;
-import ngs.Reference;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class SRAFileReader extends SamReader.ReaderImplementation implements SamReader.Indexing {
-    private static final Log log = Log.getInstance(SRAFileReader.class);
-    private SRAAccession acc;
-    private SAMFileHeader virtualHeader;
-    private ReadCollection run;
-    private ValidationStringency validationStringency;
-    private SRAIterator.RecordRangeInfo recordRangeInfo;
-    private SRAIndex index;
-    private ReferenceCache cachedReferences;
-
-    public SRAFileReader(final SRAAccession acc) {
-        this.acc = acc;
-
-        if (!acc.isValid()) {
-            throw new IllegalArgumentException("SRAFileReader: cannot resolve SRA accession '" + acc + "'\n" +
-                "Possible causes are an invalid SRA accession or a connection problem.");
-        }
-
-        try {
-            run = gov.nih.nlm.ncbi.ngs.NGS.openReadCollection(acc.toString());
-            virtualHeader = loadSamHeader();
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        cachedReferences = new ReferenceCache(run, virtualHeader);
-        recordRangeInfo = SRAIterator.getRecordsRangeInfo(run);
-        index = new SRAIndex(virtualHeader, recordRangeInfo);
-    }
-
-    @Override
-    public Type type() {
-        return Type.SRA_TYPE;
-    }
-
-    @Override
-    public boolean hasIndex() {
-        return true;
-    }
-
-    @Override
-    public BAMIndex getIndex() {
-        return index;
-    }
-
-    @Override
-    public SAMFileHeader getFileHeader() {
-        return virtualHeader;
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> getIterator() {
-        return getIterator(getFilePointerSpanningReads());
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> getIterator(SAMFileSpan chunks) {
-        if (run == null) {
-            throw new RuntimeException("Cannot create iterator - SRA run is uninitialized");
-        }
-
-        if (virtualHeader == null) {
-            throw new RuntimeException("Cannot create iterator - SAM file header is uninitialized");
-        }
-
-        List<Chunk> chunkList = ((BAMFileSpan) chunks).getChunks();
-
-        final SRAIterator newIterator = new SRAIterator(acc, run, virtualHeader, cachedReferences, recordRangeInfo, chunkList);
-        if (validationStringency != null) {
-            newIterator.setValidationStringency(validationStringency);
-        }
-
-        return newIterator;
-    }
-
-    @Override
-    public SAMFileSpan getFilePointerSpanningReads() {
-        if (recordRangeInfo.getTotalRecordRangeLength() <= 0) {
-            throw new RuntimeException("Cannot create file span - SRA file is empty");
-        }
-
-        return new BAMFileSpan(new Chunk(0, recordRangeInfo.getTotalRecordRangeLength()));
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> query(QueryInterval[] intervals, boolean contained) {
-        BAMFileSpan span = new BAMFileSpan();
-        BrowseableBAMIndex index = getBrowseableIndex();
-
-        for (QueryInterval interval : intervals) {
-            BAMFileSpan intervalSpan;
-            if (!contained) {
-                intervalSpan = index.getSpanOverlapping(interval.referenceIndex, interval.start, interval.end);
-
-            } else {
-                intervalSpan = getSpanContained(interval.referenceIndex, interval.start, interval.end);
-            }
-            span.add(intervalSpan);
-        }
-
-        return getIterator(span);
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> queryAlignmentStart(String sequence, int start) {
-        int sequenceIndex = virtualHeader.getSequenceIndex(sequence);
-        if (sequenceIndex == -1) {
-            throw new IllegalArgumentException("Unknown sequence '" + sequence + "' was passed to SRAFileReader");
-        }
-
-        return getIterator(getSpanContained(sequenceIndex, start, -1));
-    }
-
-    @Override
-    public CloseableIterator<SAMRecord> queryUnmapped() {
-        if (recordRangeInfo.getTotalRecordRangeLength() <= 0) {
-            throw new RuntimeException("Cannot create file span - SRA file is empty");
-        }
-
-        SAMFileSpan span = new BAMFileSpan(new Chunk(recordRangeInfo.getTotalReferencesLength(), recordRangeInfo.getTotalRecordRangeLength()));
-        return getIterator(span);
-    }
-
-    @Override
-    public void close() {
-        run = null;
-    }
-
-    @Override
-    public ValidationStringency getValidationStringency() {
-        return validationStringency;
-    }
-
-
-    /** INDEXING */
-
-
-    /**
-     * Returns true if the supported index is browseable, meaning the bins in it can be traversed
-     * and chunk data inspected and retrieved.
-     *
-     * @return True if the index supports the BrowseableBAMIndex interface.  False otherwise.
-     */
-    @Override
-    public boolean hasBrowseableIndex() {
-        return true;
-    }
-
-    /**
-     * Gets an index tagged with the BrowseableBAMIndex interface.  Throws an exception if no such
-     * index is available.
-     *
-     * @return An index with a browseable interface, if possible.
-     * @throws SAMException if no such index is available.
-     */
-    @Override
-    public BrowseableBAMIndex getBrowseableIndex() {
-        return index;
-    }
-
-    /**
-     * Iterate through the given chunks in the file.
-     *
-     * @param chunks List of chunks for which to retrieve data.
-     * @return An iterator over the given chunks.
-     */
-    @Override
-    public SAMRecordIterator iterator(final SAMFileSpan chunks) {
-        CloseableIterator<SAMRecord> it = getIterator(chunks);
-        if (it == null) {
-            return null;
-        }
-        return (SAMRecordIterator) it;
-    }
-
-    /** ReaderImplementation */
-    @Override
-    void enableFileSource(final SamReader reader, final boolean enabled) {
-        log.info("enableFileSource is not supported");
-    }
-
-    @Override
-    void enableIndexCaching(final boolean enabled) {
-        log.info("enableIndexCaching is not supported");
-    }
-
-    @Override
-    void enableIndexMemoryMapping(final boolean enabled) {
-        log.info("enableIndexMemoryMapping is not supported");
-    }
-
-    @Override
-    void enableCrcChecking(final boolean enabled) {
-        log.info("enableCrcChecking is not supported");
-    }
-
-    @Override
-    void setSAMRecordFactory(final SAMRecordFactory factory) {
-        log.info("setSAMRecordFactory is not supported");
-    }
-
-    @Override
-    void setValidationStringency(final ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-    }
-
-    protected SRAIterator.RecordRangeInfo getRecordsRangeInfo() {
-        return recordRangeInfo;
-    }
-
-    private SAMFileHeader loadSamHeader() throws ErrorMsg {
-        if (run == null) {
-            throw new RuntimeException("Cannot load SAMFileHeader - SRA run is uninitialized");
-        }
-
-        String runName = run.getName();
-
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-        ReadGroupIterator itRg = run.getReadGroups();
-        while (itRg.nextReadGroup()) {
-            String rgName = itRg.getName();
-            if (rgName.isEmpty())
-                rgName = runName;
-            SAMReadGroupRecord rg = new SAMReadGroupRecord(rgName);
-            rg.setSample(runName);
-            header.addReadGroup(rg);
-        }
-
-        ReferenceIterator itRef = run.getReferences();
-        while (itRef.nextReference()) {
-            header.addSequence(new SAMSequenceRecord(itRef.getCanonicalName(), (int) itRef.getLength()));
-        }
-
-        return header;
-    }
-
-    private BAMFileSpan getSpanContained(int sequenceIndex, long start, long end) {
-        if (recordRangeInfo.getTotalRecordRangeLength() <= 0) {
-            throw new RuntimeException("Cannot create file span - SRA file is empty");
-        }
-
-        long sequenceOffset = recordRangeInfo.getReferenceOffsets().get(sequenceIndex);
-        long sequenceLength = recordRangeInfo.getReferenceLengthsAligned().get(sequenceIndex);
-        if (end == -1) {
-            end = sequenceLength;
-        }
-
-        if (start > sequenceLength) {
-            throw new IllegalArgumentException("Sequence start position is larger than its length");
-        }
-
-        if (end > sequenceLength) {
-            throw new IllegalArgumentException("Sequence end position is larger than its length");
-        }
-
-        return new BAMFileSpan(new Chunk(sequenceOffset + start, sequenceOffset + end));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SRAIndex.java b/src/main/java/htsjdk/samtools/SRAIndex.java
deleted file mode 100644
index b74ee63..0000000
--- a/src/main/java/htsjdk/samtools/SRAIndex.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools;
-
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Emulates BAM index so that we can request chunks of records from SRAFileReader
- *
- * Here is how it works:
- *  SRA allows reading of alignments by Reference position fast, so we divide our "file" range for alignments as
- *  a length of all references. Reading unaligned reads is then fast if we use read positions for lookup and (internally)
- *  filter out aligned fragments.
- *
- *  Total SRA "file" range is calculated as sum of all reference lengths plus number of reads (both aligned and unaligned)
- *  in SRA archive.
- *
- *  Now, we can use Chunks to lookup for aligned and unaligned fragments.
- *
- *  We emulate BAM index bins by mapping SRA reference positions to bin numbers.
- *  And then we map from bin number to list of chunks, which represent SRA "file" positions (which are simply reference
- *  positions).
- *
- *  We only emulate last level of BAM index bins (and they refer to a portion of reference SRA_BIN_SIZE bases long).
- *  For all other bins RuntimeException will be returned (but since nobody else creates bins, except SRAIndex class
- *  that is fine).
- *
- *  But since the last level of bins was not meant to refer to fragments that only partially overlap bin reference
- *  positions, we also return chunk that goes 5000 bases left before beginning of the bin to assure fragments that
- *  start before the bin positions but still overlap with it can be retrieved by SRA reader.
- *  Later we will add support to NGS API to get a maximum number of bases that we need to go left to retrieve such fragments.
- *
- * Created by andrii.nikitiuk on 9/4/15.
- */
-public class SRAIndex implements BrowseableBAMIndex {
-    /**
-     * Number of reference bases bins in last level can represent
-     */
-    public static final int SRA_BIN_SIZE = 16 * 1024;
-
-    /**
-     * Chunks of that size will be created when using SRA index
-     */
-    public static final int SRA_CHUNK_SIZE = 50000;
-
-    /**
-     * First bin number in last level
-     */
-    private static final int SRA_BIN_INDEX_OFFSET = GenomicIndexUtil.LEVEL_STARTS[GenomicIndexUtil.LEVEL_STARTS.length - 1];
-
-    /**
-     * How many bases should we go left on the reference to find all fragments that start before requested interval
-     * but overlap with it
-     */
-    private static final int MAX_FRAGMENT_OVERLAP = 5000;
-
-    private SAMFileHeader header;
-    private SRAIterator.RecordRangeInfo recordRangeInfo;
-
-    /**
-     * @param header sam header
-     * @param recordRangeInfo info about record ranges withing SRA archive
-     */
-    public SRAIndex(SAMFileHeader header, SRAIterator.RecordRangeInfo recordRangeInfo) {
-        this.header = header;
-        this.recordRangeInfo = recordRangeInfo;
-    }
-
-    /**
-     * Gets the size (number of bins in) a given level of a BAM index.
-     * @param levelNumber Level for which to inspect the size.
-     * @return Size of the given level.
-     */
-    @Override
-    public int getLevelSize(int levelNumber) {
-        if (levelNumber == GenomicIndexUtil.LEVEL_STARTS.length - 1)
-            return GenomicIndexUtil.MAX_BINS - GenomicIndexUtil.LEVEL_STARTS[levelNumber]-1;
-        else
-            return GenomicIndexUtil.LEVEL_STARTS[levelNumber+1] - GenomicIndexUtil.LEVEL_STARTS[levelNumber];
-    }
-
-    /**
-     * SRA only operates on bins from last level
-     * @param bin The bin  for which to determine the level.
-     * @return bin level
-     */
-    @Override
-    public int getLevelForBin(Bin bin) {
-        if (bin.getBinNumber() < SRA_BIN_INDEX_OFFSET) {
-            throw new RuntimeException("SRA only supports bins from the last level");
-        }
-        return GenomicIndexUtil.LEVEL_STARTS.length - 1;
-    }
-
-    /**
-     * Gets the first locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return first position that associated with given bin number
-     */
-    @Override
-    public int getFirstLocusInBin(Bin bin) {
-        if (bin.getBinNumber() < SRA_BIN_INDEX_OFFSET) {
-            throw new RuntimeException("SRA only supports bins from the last level");
-        }
-
-        return (bin.getBinNumber() - SRA_BIN_INDEX_OFFSET) * SRA_BIN_SIZE + 1;
-    }
-
-    /**
-     * Gets the last locus that this bin can index into.
-     * @param bin The bin to test.
-     * @return last position that associated with given bin number
-     */
-    @Override
-    public int getLastLocusInBin(Bin bin) {
-        if (bin.getBinNumber() < SRA_BIN_INDEX_OFFSET) {
-            throw new RuntimeException("SRA only supports bins from the last level");
-        }
-
-        return (bin.getBinNumber() - SRA_BIN_INDEX_OFFSET + 1) * SRA_BIN_SIZE;
-    }
-
-    /**
-     * Provides a list of bins that contain bases at requested positions
-     * @param referenceIndex sequence of desired SAMRecords
-     * @param startPos 1-based start of the desired interval, inclusive
-     * @param endPos 1-based end of the desired interval, inclusive
-     * @return a list of bins that contain relevant data
-     */
-    @Override
-    public BinList getBinsOverlapping(int referenceIndex, int startPos, int endPos) {
-        long refLength = recordRangeInfo.getReferenceLengthsAligned().get(referenceIndex);
-
-        // convert to chunk address space within reference
-        long refStartPos =  startPos - 1;
-        long refEndPos = endPos;
-        if (refEndPos >= refLength) {
-            throw new RuntimeException("refEndPos is larger than reference length");
-        }
-
-        int firstBinNumber = (int)refStartPos / SRA_BIN_SIZE;
-        int lastBinNumber = (int)(refEndPos - 1) / SRA_BIN_SIZE;
-
-        int numberOfBins = ((int)refLength / SRA_BIN_SIZE) + 1;
-
-        BitSet binBitSet = new BitSet();
-        binBitSet.set(0, SRA_BIN_INDEX_OFFSET, false);
-        if (firstBinNumber > 0) {
-            binBitSet.set(SRA_BIN_INDEX_OFFSET, SRA_BIN_INDEX_OFFSET + firstBinNumber, false);
-        }
-        binBitSet.set(SRA_BIN_INDEX_OFFSET + firstBinNumber, SRA_BIN_INDEX_OFFSET + lastBinNumber + 1, true);
-        if (lastBinNumber + 1 < numberOfBins) {
-            binBitSet.set(SRA_BIN_INDEX_OFFSET + lastBinNumber + 1, SRA_BIN_INDEX_OFFSET + numberOfBins, false);
-        }
-
-        return new BinList(referenceIndex, binBitSet);
-    }
-
-    @Override
-    public BAMFileSpan getSpanOverlapping(Bin bin) {
-        return new BAMFileSpan(getBinChunks(bin));
-    }
-
-    @Override
-    public BAMFileSpan getSpanOverlapping(int referenceIndex, int startPos, int endPos) {
-        BinList binList = getBinsOverlapping(referenceIndex, startPos, endPos);
-        BAMFileSpan result = new BAMFileSpan();
-        Set<Chunk> savedChunks = new HashSet<Chunk>();
-        for (Bin bin : binList) {
-            List<Chunk> chunks = getSpanOverlapping(bin).getChunks();
-            for (Chunk chunk : chunks) {
-                if (!savedChunks.contains(chunk)) {
-                    savedChunks.add(chunk);
-                    result.add(chunk);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * @return a position where aligned fragments end
-     */
-    @Override
-    public long getStartOfLastLinearBin() {
-        int numberOfReferences = recordRangeInfo.getReferenceLengthsAligned().size();
-        long refOffset = recordRangeInfo.getReferenceOffsets().get(numberOfReferences - 1);
-        long lastChunkNumber = recordRangeInfo.getReferenceLengthsAligned().get(numberOfReferences - 1) / SRA_CHUNK_SIZE;
-        return lastChunkNumber * SRA_CHUNK_SIZE + refOffset;
-    }
-
-    @Override
-    public BAMIndexMetaData getMetaData(int reference) {
-        throw new UnsupportedOperationException("Getting of BAM index metadata for SRA is not implemented");
-    }
-
-    @Override
-    public void close() { }
-
-    /**
-     * @param bin Requested bin
-     * @return chunks that represent all bases of requested bin
-     */
-    private List<Chunk> getBinChunks(Bin bin) {
-        if (bin.containsChunks()) {
-            return bin.getChunkList();
-        }
-
-        if (bin.getBinNumber() < SRA_BIN_INDEX_OFFSET) {
-            throw new RuntimeException("SRA only supports bins from the last level");
-        }
-        int binNumber = bin.getBinNumber() - SRA_BIN_INDEX_OFFSET;
-        long refOffset = recordRangeInfo.getReferenceOffsets().get(bin.getReferenceSequence());
-
-        // move requested position MAX_FRAGMENT_OVERLAP bases behind, so that we take all the reads that overlap requested position
-        int firstChunkCorrection = binNumber == 0 ? 0 : -MAX_FRAGMENT_OVERLAP;
-
-        long binGlobalOffset = binNumber * SRA_BIN_SIZE + refOffset;
-        long firstChunkNumber = (binGlobalOffset + firstChunkCorrection) / SRA_CHUNK_SIZE;
-        long lastChunkNumber = (binGlobalOffset + SRA_BIN_SIZE - 1) / SRA_CHUNK_SIZE;
-        List<Chunk> chunks = new ArrayList<Chunk>();
-        for (long chunkNumber = firstChunkNumber; chunkNumber <= lastChunkNumber; chunkNumber++) {
-            chunks.add(new Chunk(chunkNumber * SRA_CHUNK_SIZE, (chunkNumber + 1) * SRA_CHUNK_SIZE));
-        }
-
-        return chunks;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SRAIterator.java b/src/main/java/htsjdk/samtools/SRAIterator.java
deleted file mode 100644
index 9fbbc97..0000000
--- a/src/main/java/htsjdk/samtools/SRAIterator.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-/**
- * Created by andrii.nikitiuk on 8/11/15.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.SAMFileHeader.SortOrder;
-
-import htsjdk.samtools.sra.ReferenceCache;
-import htsjdk.samtools.sra.SRAAccession;
-import htsjdk.samtools.sra.SRAAlignmentIterator;
-import htsjdk.samtools.sra.SRAUnalignmentIterator;
-import htsjdk.samtools.sra.SRAUtils;
-import ngs.ErrorMsg;
-import ngs.ReadCollection;
-import ngs.Reference;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * SRA iterator which returns SAMRecords for requested list of chunks
- */
-public class SRAIterator implements SAMRecordIterator {
-    private ValidationStringency validationStringency;
-
-    private SRAAccession accession;
-    private ReadCollection run;
-    private SAMFileHeader header;
-    private ReferenceCache cachedReferences;
-    private RecordRangeInfo recordRangeInfo;
-    private Iterator<Chunk> chunksIterator;
-    private Chunk currentChunk;
-
-    private SRAAlignmentIterator alignmentIterator;
-    private SRAUnalignmentIterator unalignmentIterator;
-
-    /**
-     * Describes record ranges info needed for emulating BAM index
-     */
-    public static class RecordRangeInfo {
-        private List<Long> referenceOffsets;
-        private List<Long> referenceLengthsAligned;
-        private long totalReferencesLength;
-        private long numberOfReads; // is used for unaligned read space
-        private long totalRecordRangeLength;
-
-        /**
-         * @param referenceLengthsAligned a list with lengths of each reference
-         * @param numberOfReads total number of reads within SRA archive
-         */
-        public RecordRangeInfo(List<Long> referenceLengthsAligned, long numberOfReads) {
-            this.numberOfReads = numberOfReads;
-            this.referenceLengthsAligned = referenceLengthsAligned;
-
-            referenceOffsets = new ArrayList<Long>();
-
-            totalReferencesLength = 0;
-            for (Long refLen : referenceLengthsAligned) {
-                referenceOffsets.add(totalReferencesLength);
-                totalReferencesLength += refLen;
-            }
-
-            totalRecordRangeLength = totalReferencesLength + this.numberOfReads;
-        }
-
-        public long getNumberOfReads() {
-            return numberOfReads;
-        }
-
-        public long getTotalReferencesLength() {
-            return totalReferencesLength;
-        }
-
-        public long getTotalRecordRangeLength() {
-            return totalRecordRangeLength;
-        }
-
-        public final List<Long> getReferenceOffsets() {
-            return Collections.unmodifiableList(referenceOffsets);
-        }
-
-        public final List<Long> getReferenceLengthsAligned() {
-            return Collections.unmodifiableList(referenceLengthsAligned);
-        }
-    }
-
-    /**
-     * Loads record ranges needed for emulating BAM index
-     * @param run read collection
-     * @return record ranges
-     */
-    public static RecordRangeInfo getRecordsRangeInfo(ReadCollection run) {
-        try {
-            return new RecordRangeInfo(SRAUtils.getReferencesLengthsAligned(run), SRAUtils.getNumberOfReads(run));
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * @param run opened read collection
-     * @param header sam header
-     * @param cachedReferences list of cached references shared among all iterators from a single SRAFileReader
-     * @param recordRangeInfo info about record ranges withing SRA archive
-     * @param chunks used to determine which records the iterator should return
-     */
-    public SRAIterator(SRAAccession accession, final ReadCollection run, final SAMFileHeader header, ReferenceCache cachedReferences,
-                       final RecordRangeInfo recordRangeInfo, final List<Chunk> chunks) {
-        this.accession = accession;
-        this.run = run;
-        this.header = header;
-        this.cachedReferences = cachedReferences;
-        this.recordRangeInfo = recordRangeInfo;
-        chunksIterator = chunks.iterator();
-        if (chunksIterator.hasNext()) {
-            currentChunk = chunksIterator.next();
-        }
-
-        hasNext();
-    }
-
-    /**
-     * NGS iterators implement a single method "nextObject" which return true if the operation was successful or
-     * false if there are no more objects available.
-     * That means that there is no way to check "hasNext" without actually moving the iterator forward.
-     * Because of that all the logic of moving iterator forward is actually happens in "hasNext".
-     *
-     * Here is explanation of how it works:
-     *  Iterator holds a list of chunks of requested records. Here we have chunksIterator that walks though that list.
-     *  We walk though that list using chunksIterator. If current chunk can represent aligned fragments then we create
-     *  SRAAlignmentIterator iterator, pass the chunk into it and ask if it can find any record. If record was found,
-     *  we say that we have next; otherwise we check if the chunk can represent unaligned fragments and then create
-     *  SRAUnalignmentIterator if so and do the same steps as with alignemnt iterator.
-     *
-     *  If record was not found in both SRAAlignmentIterator and SRAUnalignmentIterator (it is possible that reference
-     *  range has no alignments or that reads range has all aligned fragment), we try the next chunk.
-     *
-     *  When there are no more chunks and both iterators have no more records we return false.
-     *
-     * @return true if there are more records available
-     */
-    @Override
-    public boolean hasNext() {
-        while (currentChunk != null) {
-            if (alignmentIterator == null) {
-                if (currentChunk.getChunkStart() < recordRangeInfo.getTotalReferencesLength()) {
-                    alignmentIterator = new SRAAlignmentIterator(accession, run, header, cachedReferences, recordRangeInfo, currentChunk);
-                    if (validationStringency != null) {
-                        alignmentIterator.setValidationStringency(validationStringency);
-                    }
-                }
-            }
-
-            if (alignmentIterator != null && alignmentIterator.hasNext()) {
-                return true;
-            }
-
-            if (unalignmentIterator == null) {
-                if (currentChunk.getChunkEnd() > recordRangeInfo.getTotalReferencesLength()) {
-                    unalignmentIterator = new SRAUnalignmentIterator(accession, run, header, recordRangeInfo, currentChunk);
-                    if (validationStringency != null) {
-                        unalignmentIterator.setValidationStringency(validationStringency);
-                    }
-                }
-            }
-            if (unalignmentIterator != null && unalignmentIterator.hasNext()) {
-                return true;
-            }
-
-            if (alignmentIterator != null) {
-                alignmentIterator.close();
-            }
-            alignmentIterator = null;
-            unalignmentIterator = null;
-            if (chunksIterator.hasNext()) {
-                currentChunk = chunksIterator.next();
-            } else {
-                currentChunk = null;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Call hasNext to make sure that one of inner iterators points to the next record, the retrieve the record from
-     * one of them.
-     * @return lazy SRA record
-     */
-    @Override
-    public SAMRecord next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException("No more records are available in SRAIterator");
-        }
-
-        if (alignmentIterator != null && alignmentIterator.hasNext()) {
-            return alignmentIterator.next();
-        }
-
-        return unalignmentIterator.next();
-    }
-
-    @Override
-    public void remove() { throw new UnsupportedOperationException("Removal of records not implemented."); }
-
-    @Override
-    public void close() {
-        if (alignmentIterator != null) {
-            alignmentIterator.close();
-            alignmentIterator = null;
-        }
-    }
-
-    @Override
-    public SAMRecordIterator assertSorted(final SortOrder sortOrder) { throw new UnsupportedOperationException("assertSorted is not implemented."); }
-
-    public void setValidationStringency(ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-
-        if (alignmentIterator != null) {
-            alignmentIterator.setValidationStringency(validationStringency);
-        }
-        if (unalignmentIterator != null) {
-            unalignmentIterator.setValidationStringency(validationStringency);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamFileHeaderMerger.java b/src/main/java/htsjdk/samtools/SamFileHeaderMerger.java
deleted file mode 100644
index b3f588c..0000000
--- a/src/main/java/htsjdk/samtools/SamFileHeaderMerger.java
+++ /dev/null
@@ -1,786 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.SequenceUtil;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Merges SAMFileHeaders that have the same sequences into a single merged header
- * object while providing read group translation for cases where read groups
- * clash across input headers.
- */
-public class SamFileHeaderMerger {
-
-    /**
-     * A 4-digit base 36 number is going to be attached to colliding SAMFileHeaderRecords,
-     * To do this we first create an array of values to convert integer remainders into
-     * base 36 values, we use base 36 because we have 10 digits and 26 numbers
-     */
-    private static final char[] INT_TO_BASE36 = new char[36];
-
-    static {
-        int aVal = (int) 'A';
-        int zeroVal = (int) '0';
-
-        for (int i = 0; i < 10; i++) {
-            INT_TO_BASE36[i] = (char) (zeroVal + i);
-        }
-
-        for (int i = 0; i < 26; i++) {
-            INT_TO_BASE36[i + 10] = (char) (aVal + i);
-        }
-    }
-
-    //Super Header to construct
-    private final SAMFileHeader mergedHeader;
-    private Collection<SamReader> readers;
-    private final Collection<SAMFileHeader> headers;
-    private int recordCounter;
-
-    //Translation of old group ids to new group ids
-    private final Map<SAMFileHeader, Map<String, String>> samReadGroupIdTranslation =
-            new IdentityHashMap<SAMFileHeader, Map<String, String>>();
-
-    //the read groups from different files use the same group ids
-    private boolean hasReadGroupCollisions = false;
-
-    //the program records from different files use the same program record ids
-    private boolean hasProgramGroupCollisions = false;
-
-    //Translation of old program group ids to new program group ids
-    private final Map<SAMFileHeader, Map<String, String>> samProgramGroupIdTranslation =
-            new IdentityHashMap<SAMFileHeader, Map<String, String>>();
-
-    private boolean hasMergedSequenceDictionary = false;
-
-    // Translation of old sequence dictionary ids to new dictionary ids
-    // This is an IdentityHashMap because it can be quite expensive to compute the hashCode for
-    // large SAMFileHeaders.  It is possible that two input files will have identical headers so that
-    // the regular HashMap would fold them together, but the value stored in each of the two
-    // Map entries will be the same, so it should not hurt anything.
-    private final Map<SAMFileHeader, Map<Integer, Integer>> samSeqDictionaryIdTranslationViaHeader =
-            new IdentityHashMap<SAMFileHeader, Map<Integer, Integer>>();
-
-    //HeaderRecordFactory that creates SAMReadGroupRecord instances.
-    private static final HeaderRecordFactory<SAMReadGroupRecord> READ_GROUP_RECORD_FACTORY = new HeaderRecordFactory<SAMReadGroupRecord>() {
-        public SAMReadGroupRecord createRecord(final String id, final SAMReadGroupRecord srcReadGroupRecord) {
-            return new SAMReadGroupRecord(id, srcReadGroupRecord);
-        }
-    };
-
-    //HeaderRecordFactory that creates SAMProgramRecord instances.
-    private static final HeaderRecordFactory<SAMProgramRecord> PROGRAM_RECORD_FACTORY = new HeaderRecordFactory<SAMProgramRecord>() {
-        public SAMProgramRecord createRecord(final String id, final SAMProgramRecord srcProgramRecord) {
-            return new SAMProgramRecord(id, srcProgramRecord);
-        }
-    };
-
-    //comparator used to sort lists of program group and read group records
-    private static final Comparator<AbstractSAMHeaderRecord> RECORD_ID_COMPARATOR = new Comparator<AbstractSAMHeaderRecord>() {
-        public int compare(final AbstractSAMHeaderRecord o1, final AbstractSAMHeaderRecord o2) {
-            return o1.getId().compareTo(o2.getId());
-        }
-    };
-
-    /**
-     * Create SAMFileHeader with additional information.  Required that sequence dictionaries agree.
-     *
-     * @param readers   sam file readers to combine
-     * @param sortOrder sort order new header should have
-     * @deprecated replaced by {@link #SamFileHeaderMerger(SAMFileHeader.SortOrder, Collection, boolean)}
-     */
-    @Deprecated
-    public SamFileHeaderMerger(final Collection<SamReader> readers, final SAMFileHeader.SortOrder sortOrder) {
-        this(readers, sortOrder, false);
-    }
-
-    /**
-     * Create SAMFileHeader with additional information.
-     *
-     * @param readers           sam file readers to combine
-     * @param sortOrder         sort order new header should have
-     * @param mergeDictionaries If true, merge sequence dictionaries in new header.  If false, require that
-     *                          all input sequence dictionaries be identical.
-     * @deprecated replaced by {@link #SamFileHeaderMerger(SAMFileHeader.SortOrder, Collection, boolean)}
-     */
-    @Deprecated
-    public SamFileHeaderMerger(final Collection<SamReader> readers, final SAMFileHeader.SortOrder sortOrder, final boolean mergeDictionaries) {
-        this(sortOrder, getHeadersFromReaders(readers), mergeDictionaries);
-        this.readers = readers;
-    }
-
-    /**
-     * Create SAMFileHeader with additional information..  This is the preferred constructor.
-     *
-     * @param sortOrder         sort order new header should have
-     * @param headers           sam file headers to combine
-     * @param mergeDictionaries If true, merge sequence dictionaries in new header.  If false, require that
-     *                          all input sequence dictionaries be identical.
-     */
-    public SamFileHeaderMerger(final SAMFileHeader.SortOrder sortOrder, final Collection<SAMFileHeader> headers, final boolean mergeDictionaries) {
-        this.headers = new LinkedHashSet<SAMFileHeader>(headers);
-        this.mergedHeader = new SAMFileHeader();
-
-        SAMSequenceDictionary sequenceDictionary;
-        try {
-            sequenceDictionary = getSequenceDictionary(headers);
-            this.hasMergedSequenceDictionary = false;
-        } catch (SequenceUtil.SequenceListsDifferException pe) {
-            if (mergeDictionaries) {
-                sequenceDictionary = mergeSequenceDictionaries(headers);
-                this.hasMergedSequenceDictionary = true;
-            } else {
-                throw pe;
-            }
-        }
-
-        this.mergedHeader.setSequenceDictionary(sequenceDictionary);
-
-        // Set program that creates input alignments
-        for (final SAMProgramRecord program : mergeProgramGroups(headers)) {
-            this.mergedHeader.addProgramRecord(program);
-        }
-
-        // Set read groups for merged header
-        final List<SAMReadGroupRecord> readGroups = mergeReadGroups(headers);
-        this.mergedHeader.setReadGroups(readGroups);
-        this.mergedHeader.setGroupOrder(SAMFileHeader.GroupOrder.none);
-
-        this.mergedHeader.setSortOrder(sortOrder);
-
-        for (final SAMFileHeader header : headers) {
-            for (final String comment : header.getComments()) {
-                this.mergedHeader.addComment(comment);
-            }
-        }
-    }
-
-    // Utility method to make use with old constructor
-    private static List<SAMFileHeader> getHeadersFromReaders(final Collection<SamReader> readers) {
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(readers.size());
-        for (final SamReader reader : readers) {
-            headers.add(reader.getFileHeader());
-        }
-        return headers;
-    }
-
-
-    /**
-     * Checks to see if there are clashes where different readers are using the same read
-     * group IDs. If yes, then those IDs that collided are remapped.
-     *
-     * @param headers headers to combine
-     * @return new list of read groups constructed from all the readers
-     */
-    private List<SAMReadGroupRecord> mergeReadGroups(final Collection<SAMFileHeader> headers) {
-        //prepare args for mergeHeaderRecords(..) call
-        final HashSet<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
-        final List<HeaderRecordAndFileHeader<SAMReadGroupRecord>> readGroupsToProcess = new LinkedList<HeaderRecordAndFileHeader<SAMReadGroupRecord>>();
-        for (final SAMFileHeader header : headers) {
-            for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
-                //verify that there are no existing id collisions in this input file
-                if (!idsThatAreAlreadyTaken.add(readGroup.getId()))
-                    throw new SAMException("Input file: " + header + " contains more than one RG with the same id (" + readGroup.getId() + ")");
-
-                readGroupsToProcess.add(new HeaderRecordAndFileHeader<SAMReadGroupRecord>(readGroup, header));
-            }
-            idsThatAreAlreadyTaken.clear();
-        }
-
-        final List<SAMReadGroupRecord> result = new LinkedList<SAMReadGroupRecord>();
-
-        recordCounter = 0;
-        hasReadGroupCollisions = mergeHeaderRecords(readGroupsToProcess, READ_GROUP_RECORD_FACTORY, idsThatAreAlreadyTaken, samReadGroupIdTranslation, result);
-
-        //sort the result list by record id
-        Collections.sort(result, RECORD_ID_COMPARATOR);
-
-        return result;
-    }
-
-
-    /**
-     * Checks to see if there are clashes where different readers are using the same program
-     * group IDs. If yes, then those IDs that collided are remapped.
-     *
-     * @param headers headers to combine
-     * @return new list of program groups constructed from all the readers
-     */
-    private List<SAMProgramRecord> mergeProgramGroups(final Collection<SAMFileHeader> headers) {
-
-        final List<SAMProgramRecord> overallResult = new LinkedList<SAMProgramRecord>();
-
-        //this Set will accumulate all SAMProgramRecord ids that have been encountered so far.
-        final HashSet<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
-        //need to process all program groups
-        List<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcess = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
-        for (final SAMFileHeader header : headers) {
-            for (final SAMProgramRecord programGroup : header.getProgramRecords()) {
-                //verify that there are no existing id collisions in this input file
-                if (!idsThatAreAlreadyTaken.add(programGroup.getId()))
-                    throw new SAMException("Input file: " + header + " contains more than one PG with the same id (" + programGroup.getId() + ")");
-
-                programGroupsLeftToProcess.add(new HeaderRecordAndFileHeader<SAMProgramRecord>(programGroup, header));
-            }
-            idsThatAreAlreadyTaken.clear();
-        }
-
-        recordCounter = 0;
-
-        //A program group header (lets say ID=2 PN=B PP=1) may have a PP (previous program) attribute which chains it to
-        //another program group header (lets say ID=1 PN=A) to indicate that the given file was
-        //processed by program A followed by program B. These PP attributes potentially
-        //connect headers into one or more tree structures. Merging is done by
-        //first merging all headers that don't have PP attributes (eg. tree roots),
-        //then updating and merging all headers whose PPs point to the tree-root headers,
-        //and so on until all program group headers are processed.
-
-        //currentProgramGroups is the list of records to merge next. Start by merging the programGroups that don't have a PP attribute (eg. the tree roots).
-        List<HeaderRecordAndFileHeader<SAMProgramRecord>> currentProgramGroups = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
-        for (final Iterator<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcessIterator = programGroupsLeftToProcess.iterator(); programGroupsLeftToProcessIterator.hasNext(); ) {
-            final HeaderRecordAndFileHeader<SAMProgramRecord> pair = programGroupsLeftToProcessIterator.next();
-            if (pair.getHeaderRecord().getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG) == null) {
-                programGroupsLeftToProcessIterator.remove();
-                currentProgramGroups.add(pair);
-            }
-        }
-
-        //merge currentProgramGroups
-        while (!currentProgramGroups.isEmpty()) {
-            final List<SAMProgramRecord> currentResult = new LinkedList<SAMProgramRecord>();
-
-            hasProgramGroupCollisions |= mergeHeaderRecords(currentProgramGroups, PROGRAM_RECORD_FACTORY, idsThatAreAlreadyTaken, samProgramGroupIdTranslation, currentResult);
-
-            //add currentResults to overallResults
-            overallResult.addAll(currentResult);
-
-            //apply the newly-computed id translations to currentProgramGroups and programGroupsLeftToProcess
-            currentProgramGroups = translateIds(currentProgramGroups, samProgramGroupIdTranslation, false);
-            programGroupsLeftToProcess = translateIds(programGroupsLeftToProcess, samProgramGroupIdTranslation, true);
-
-            //find all records in programGroupsLeftToProcess whose ppId points to a record that was just processed (eg. a record that's in currentProgramGroups),
-            //and move them to the list of programGroupsToProcessNext.
-            final LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsToProcessNext = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
-            for (final Iterator<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcessIterator = programGroupsLeftToProcess.iterator(); programGroupsLeftToProcessIterator.hasNext(); ) {
-                final HeaderRecordAndFileHeader<SAMProgramRecord> pairLeftToProcess = programGroupsLeftToProcessIterator.next();
-                final Object ppIdOfRecordLeftToProcess = pairLeftToProcess.getHeaderRecord().getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG);
-                //find what currentProgramGroups this ppId points to (NOTE: they have to come from the same file)
-                for (final HeaderRecordAndFileHeader<SAMProgramRecord> justProcessedPair : currentProgramGroups) {
-                    final String idJustProcessed = justProcessedPair.getHeaderRecord().getId();
-                    if (pairLeftToProcess.getFileHeader() == justProcessedPair.getFileHeader() && ppIdOfRecordLeftToProcess.equals(idJustProcessed)) {
-                        programGroupsLeftToProcessIterator.remove();
-                        programGroupsToProcessNext.add(pairLeftToProcess);
-                        break;
-                    }
-                }
-            }
-
-            currentProgramGroups = programGroupsToProcessNext;
-        }
-
-        //verify that all records were processed
-        if (!programGroupsLeftToProcess.isEmpty()) {
-            final StringBuffer errorMsg = new StringBuffer(programGroupsLeftToProcess.size() + " program groups weren't processed. Do their PP ids point to existing PGs? \n");
-            for (final HeaderRecordAndFileHeader<SAMProgramRecord> pair : programGroupsLeftToProcess) {
-                final SAMProgramRecord record = pair.getHeaderRecord();
-                errorMsg.append("@PG ID:" + record.getProgramGroupId() + " PN:" + record.getProgramName() + " PP:" + record.getPreviousProgramGroupId() + "\n");
-            }
-            throw new SAMException(errorMsg.toString());
-        }
-
-        //sort the result list by record id
-        Collections.sort(overallResult, RECORD_ID_COMPARATOR);
-
-        return overallResult;
-    }
-
-
-    /**
-     * Utility method that takes a list of program groups and remaps all their
-     * ids (including ppIds if requested) using the given idTranslationTable.
-     * <p/>
-     * NOTE: when remapping, this method creates new SAMProgramRecords and
-     * doesn't mutate any records in the programGroups list.
-     *
-     * @param programGroups      The program groups to translate.
-     * @param idTranslationTable The translation table.
-     * @param translatePpIds     Whether ppIds should be translated as well.
-     * @return The list of translated records.
-     */
-    private List<HeaderRecordAndFileHeader<SAMProgramRecord>> translateIds(
-            final List<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroups,
-            final Map<SAMFileHeader, Map<String, String>> idTranslationTable,
-            final boolean translatePpIds) {
-
-        //go through programGroups and translate any IDs and PPs based on the idTranslationTable.
-        final List<HeaderRecordAndFileHeader<SAMProgramRecord>> result = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
-        for (final HeaderRecordAndFileHeader<SAMProgramRecord> pair : programGroups) {
-            final SAMProgramRecord record = pair.getHeaderRecord();
-            final String id = record.getProgramGroupId();
-            final String ppId = (String) record.getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG);
-
-            final SAMFileHeader header = pair.getFileHeader();
-            final Map<String, String> translations = idTranslationTable.get(header);
-
-            //see if one or both ids need to be translated
-            SAMProgramRecord translatedRecord = null;
-            if (translations != null) {
-                final String translatedId = translations.get(id);
-                final String translatedPpId = translatePpIds ? translations.get(ppId) : null;
-
-                final boolean needToTranslateId = translatedId != null && !translatedId.equals(id);
-                final boolean needToTranslatePpId = translatedPpId != null && !translatedPpId.equals(ppId);
-
-                if (needToTranslateId && needToTranslatePpId) {
-                    translatedRecord = new SAMProgramRecord(translatedId, record);
-                    translatedRecord.setAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG, translatedPpId);
-                } else if (needToTranslateId) {
-                    translatedRecord = new SAMProgramRecord(translatedId, record);
-                } else if (needToTranslatePpId) {
-                    translatedRecord = new SAMProgramRecord(id, record);
-                    translatedRecord.setAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG, translatedPpId);
-                }
-            }
-
-            if (translatedRecord != null) {
-                result.add(new HeaderRecordAndFileHeader<SAMProgramRecord>(translatedRecord, header));
-            } else {
-                result.add(pair); //keep the original record
-            }
-        }
-
-        return result;
-    }
-
-
-    /**
-     * Utility method for merging a List of AbstractSAMHeaderRecords. If it finds
-     * records that have identical ids and attributes, it will collapse them
-     * into one record. If it finds records that have identical ids but
-     * non-identical attributes, this is treated as a collision. When collision happens,
-     * the records' ids are remapped, and an old-id to new-id mapping is added to the idTranslationTable.
-     * <p/>
-     * NOTE: Non-collided records also get recorded in the idTranslationTable as
-     * old-id to old-id. This way, an idTranslationTable lookup should never return null.
-     *
-     * @param headerRecords          The header records to merge.
-     * @param headerRecordFactory    Constructs a specific subclass of AbstractSAMHeaderRecord.
-     * @param idsThatAreAlreadyTaken If the id of a headerRecord matches an id in this set, it will be treated as a collision, and the headRecord's id will be remapped.
-     * @param idTranslationTable     When records collide, their ids are remapped, and an old-id to new-id
-     *                               mapping is added to the idTranslationTable. Non-collided records also get recorded in the idTranslationTable as
-     *                               old-id to old-id. This way, an idTranslationTable lookup should never return null.
-     * @param result                 The list of merged header records.
-     * @return True if there were collisions.
-     */
-    private <RecordType extends AbstractSAMHeaderRecord> boolean mergeHeaderRecords(final List<HeaderRecordAndFileHeader<RecordType>> headerRecords, final HeaderRecordFactory<RecordType> headerRecordFactory,
-                                                                                    final HashSet<String> idsThatAreAlreadyTaken, final Map<SAMFileHeader, Map<String, String>> idTranslationTable, final List<RecordType> result) {
-
-        //The outer Map bins the header records by their ids. The nested Map further collapses
-        //header records which, in addition to having the same id, also have identical attributes.
-        //In other words, each key in the nested map represents one or more
-        //header records which have both identical ids and identical attributes. The List of
-        //SAMFileHeaders keeps track of which readers these header record(s) came from.
-        final Map<String, Map<RecordType, List<SAMFileHeader>>> idToRecord =
-                new LinkedHashMap<String, Map<RecordType, List<SAMFileHeader>>>();
-
-        //Populate the idToRecord and seenIds data structures
-        for (final HeaderRecordAndFileHeader<RecordType> pair : headerRecords) {
-            final RecordType record = pair.getHeaderRecord();
-            final SAMFileHeader header = pair.getFileHeader();
-            final String recordId = record.getId();
-            Map<RecordType, List<SAMFileHeader>> recordsWithSameId = idToRecord.get(recordId);
-            if (recordsWithSameId == null) {
-                recordsWithSameId = new LinkedHashMap<RecordType, List<SAMFileHeader>>();
-                idToRecord.put(recordId, recordsWithSameId);
-            }
-
-            List<SAMFileHeader> fileHeaders = recordsWithSameId.get(record);
-            if (fileHeaders == null) {
-                fileHeaders = new LinkedList<SAMFileHeader>();
-                recordsWithSameId.put(record, fileHeaders);
-            }
-
-            fileHeaders.add(header);
-        }
-
-        //Resolve any collisions between header records by remapping their ids.
-        boolean hasCollisions = false;
-        for (final Map.Entry<String, Map<RecordType, List<SAMFileHeader>>> entry : idToRecord.entrySet()) {
-            final String recordId = entry.getKey();
-            final Map<RecordType, List<SAMFileHeader>> recordsWithSameId = entry.getValue();
-
-
-            for (final Map.Entry<RecordType, List<SAMFileHeader>> recordWithUniqueAttr : recordsWithSameId.entrySet()) {
-                final RecordType record = recordWithUniqueAttr.getKey();
-                final List<SAMFileHeader> fileHeaders = recordWithUniqueAttr.getValue();
-
-                String newId;
-                if (!idsThatAreAlreadyTaken.contains(recordId)) {
-                    //don't remap 1st record. If there are more records
-                    //with this id, they will be remapped in the 'else'.
-                    newId = recordId;
-                    idsThatAreAlreadyTaken.add(recordId);
-                    ++recordCounter;
-                } else {
-                    //there is more than one record with this id.
-                    hasCollisions = true;
-
-                    //Below we tack on one of roughly 1.7 million possible 4 digit base36 at random we do this because
-                    //our old process of just counting from 0 upward and adding that to the previous id led to 1000s of hits on
-                    //idsThatAreAlreadyTaken.contains just to resolve 1 collision when merging 1000s of similarly processed bams
-                    while (idsThatAreAlreadyTaken.contains(newId = recordId + "." + positiveFourDigitBase36Str(recordCounter++))) ;
-
-                    idsThatAreAlreadyTaken.add(newId);
-                }
-
-                for (final SAMFileHeader fileHeader : fileHeaders) {
-                    Map<String, String> readerTranslationTable = idTranslationTable.get(fileHeader);
-                    if (readerTranslationTable == null) {
-                        readerTranslationTable = new HashMap<String, String>();
-                        idTranslationTable.put(fileHeader, readerTranslationTable);
-                    }
-                    readerTranslationTable.put(recordId, newId);
-                }
-
-                result.add(headerRecordFactory.createRecord(newId, record));
-            }
-        }
-
-        return hasCollisions;
-    }
-
-    /**
-     * Convert an integer to base36, protected solely for testing
-     *
-     * @param leftOver Both the initial value and the running quotient
-     * @return A four digit string composed of base 36 symbols
-     */
-    public static String positiveFourDigitBase36Str(int leftOver) {
-        if (leftOver == 0) {
-            return "0";
-        }
-
-        final StringBuilder builder = new StringBuilder(10);
-
-        while (leftOver > 0) {
-            final int valueIndex = leftOver % 36;
-            builder.append(INT_TO_BASE36[valueIndex]);
-            leftOver /= 36;
-        }
-
-        return builder.reverse().toString();
-    }
-
-
-    /**
-     * Get the sequences off the SAMFileHeader.  Throws runtime exception if the sequence
-     * are different from one another.
-     *
-     * @param headers headers to pull sequences from
-     * @return sequences from files.  Each file should have the same sequence
-     */
-    private SAMSequenceDictionary getSequenceDictionary(final Collection<SAMFileHeader> headers) {
-        SAMSequenceDictionary sequences = null;
-        for (final SAMFileHeader header : headers) {
-
-            if (sequences == null) {
-                sequences = header.getSequenceDictionary();
-            } else {
-                final SAMSequenceDictionary currentSequences = header.getSequenceDictionary();
-                SequenceUtil.assertSequenceDictionariesEqual(sequences, currentSequences);
-            }
-        }
-
-        return sequences;
-    }
-
-    /**
-     * Get the sequences from the SAMFileHeader, and merge the resulting sequence dictionaries.
-     *
-     * @param headers headers to pull sequences from
-     * @return sequences from files.  Each file should have the same sequence
-     */
-    private SAMSequenceDictionary mergeSequenceDictionaries(final Collection<SAMFileHeader> headers) {
-        SAMSequenceDictionary sequences = new SAMSequenceDictionary();
-        for (final SAMFileHeader header : headers) {
-            final SAMSequenceDictionary currentSequences = header.getSequenceDictionary();
-            sequences = mergeSequences(sequences, currentSequences);
-        }
-        // second pass, make a map of the original seqeunce id -> new sequence id
-        createSequenceMapping(headers, sequences);
-        return sequences;
-    }
-
-    /**
-     * They've asked to merge the sequence headers.  What we support right now is finding the sequence name superset.
-     *
-     * @param mergeIntoDict the result of merging so far.  All SAMSequenceRecords in here have been cloned from the originals.
-     * @param mergeFromDict A new sequence dictionary to merge into mergeIntoDict.
-     * @return A new sequence dictionary that resulting from merging the two inputs.
-     */
-    private SAMSequenceDictionary mergeSequences(final SAMSequenceDictionary mergeIntoDict, final SAMSequenceDictionary mergeFromDict) {
-
-        // a place to hold the sequences that we haven't found a home for, in the order the appear in mergeFromDict.
-        final LinkedList<SAMSequenceRecord> holder = new LinkedList<SAMSequenceRecord>();
-
-        // Return value will be created from this.
-        final LinkedList<SAMSequenceRecord> resultingDict = new LinkedList<SAMSequenceRecord>();
-        for (final SAMSequenceRecord sequenceRecord : mergeIntoDict.getSequences()) {
-            resultingDict.add(sequenceRecord);
-        }
-
-        // Index into resultingDict of previous SAMSequenceRecord from mergeFromDict that already existed in mergeIntoDict.
-        int prevloc = -1;
-        // Previous SAMSequenceRecord from mergeFromDict that already existed in mergeIntoDict.
-        SAMSequenceRecord previouslyMerged = null;
-
-        for (final SAMSequenceRecord sequenceRecord : mergeFromDict.getSequences()) {
-            // Does it already exist in resultingDict?
-            final int loc = getIndexOfSequenceName(resultingDict, sequenceRecord.getSequenceName());
-            if (loc == -1) {
-                // If doesn't already exist in resultingDict, save it an decide where to insert it later.
-                holder.add(sequenceRecord.clone());
-            } else if (prevloc > loc) {
-                // If sequenceRecord already exists in resultingDict, but prior to the previous one
-                // from mergeIntoDict that already existed, cannot merge.
-                throw new SAMException("Cannot merge sequence dictionaries because sequence " +
-                        sequenceRecord.getSequenceName() + " and " + previouslyMerged.getSequenceName() +
-                        " are in different orders in two input sequence dictionaries.");
-            } else {
-                // Since sequenceRecord already exists in resultingDict, don't need to add it.
-                // Add in all the sequences prior to it that have been held in holder.
-                resultingDict.addAll(loc, holder);
-                // Remember the index of sequenceRecord so can check for merge incompatibility.
-                prevloc = loc + holder.size();
-                previouslyMerged = sequenceRecord;
-                holder.clear();
-            }
-        }
-        // Append anything left in holder.
-        if (!holder.isEmpty()) {
-            resultingDict.addAll(holder);
-        }
-        return new SAMSequenceDictionary(resultingDict);
-    }
-
-    /**
-     * Find sequence in list.
-     *
-     * @param list         List to search for the sequence name.
-     * @param sequenceName Name to search for.
-     * @return Index of SAMSequenceRecord with the given name in list, or -1 if not found.
-     */
-    private static int getIndexOfSequenceName(final List<SAMSequenceRecord> list, final String sequenceName) {
-        for (int i = 0; i < list.size(); ++i) {
-            if (list.get(i).getSequenceName().equals(sequenceName)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * create the sequence mapping.  This map is used to convert the unmerged header sequence ID's to the merged
-     * list of sequence id's.
-     *
-     * @param headers          the collections of headers.
-     * @param masterDictionary the superset dictionary we've created.
-     */
-    private void createSequenceMapping(final Collection<SAMFileHeader> headers, final SAMSequenceDictionary masterDictionary) {
-        final LinkedList<String> resultingDictStr = new LinkedList<>();
-        for (final SAMSequenceRecord r : masterDictionary.getSequences()) {
-            resultingDictStr.add(r.getSequenceName());
-        }
-        for (final SAMFileHeader header : headers) {
-            final Map<Integer, Integer> seqMap = new HashMap<>();
-            final SAMSequenceDictionary dict = header.getSequenceDictionary();
-            for (final SAMSequenceRecord rec : dict.getSequences()) {
-                seqMap.put(rec.getSequenceIndex(), resultingDictStr.indexOf(rec.getSequenceName()));
-            }
-            this.samSeqDictionaryIdTranslationViaHeader.put(header, seqMap);
-        }
-    }
-
-
-    /**
-     * Returns the read group id that should be used for the input read and RG id.
-     *
-     * @deprecated replaced by {@link #getReadGroupId(SAMFileHeader, String)}
-     */
-    @Deprecated
-    public String getReadGroupId(final SamReader reader, final String originalReadGroupId) {
-        return getReadGroupId(reader.getFileHeader(), originalReadGroupId);
-    }
-
-    /** Returns the read group id that should be used for the input read and RG id. */
-    public String getReadGroupId(final SAMFileHeader header, final String originalReadGroupId) {
-        return this.samReadGroupIdTranslation.get(header).get(originalReadGroupId);
-    }
-
-    /**
-     * @param reader                 one of the input files
-     * @param originalProgramGroupId a program group ID from the above input file
-     * @return new ID from the merged list of program groups in the output file
-     * @deprecated replaced by {@link #getProgramGroupId(SAMFileHeader, String)}
-     */
-    @Deprecated
-    public String getProgramGroupId(final SamReader reader, final String originalProgramGroupId) {
-        return getProgramGroupId(reader.getFileHeader(), originalProgramGroupId);
-    }
-
-    /**
-     * @param header                 one of the input headers
-     * @param originalProgramGroupId a program group ID from the above input file
-     * @return new ID from the merged list of program groups in the output file
-     */
-    public String getProgramGroupId(final SAMFileHeader header, final String originalProgramGroupId) {
-        return this.samProgramGroupIdTranslation.get(header).get(originalProgramGroupId);
-    }
-
-    /** Returns true if there are read group duplicates within the merged headers. */
-    public boolean hasReadGroupCollisions() {
-        return this.hasReadGroupCollisions;
-    }
-
-    /** Returns true if there are program group duplicates within the merged headers. */
-    public boolean hasProgramGroupCollisions() {
-        return hasProgramGroupCollisions;
-    }
-
-    /** @return if we've merged the sequence dictionaries, return true */
-    public boolean hasMergedSequenceDictionary() {
-        return hasMergedSequenceDictionary;
-    }
-
-    /** Returns the merged header that should be written to any output merged file. */
-    public SAMFileHeader getMergedHeader() {
-        return this.mergedHeader;
-    }
-
-    /**
-     * Returns the collection of readers that this header merger is working with. May return null.
-     *
-     * @deprecated replaced by {@link #getHeaders()}
-     */
-    @Deprecated
-    public Collection<SamReader> getReaders() {
-        return this.readers;
-    }
-
-    /**
-     * Returns the collection of readers that this header merger is working with.
-     */
-    public Collection<SAMFileHeader> getHeaders() {
-        return this.headers;
-    }
-
-    /**
-     * returns the new mapping for a specified reader, given it's old sequence index
-     *
-     * @param reader                    the reader
-     * @param oldReferenceSequenceIndex the old sequence (also called reference) index
-     * @return the new index value
-     * @deprecated replaced by {@link #getMergedSequenceIndex(SAMFileHeader, Integer)}
-     */
-    @Deprecated
-    public Integer getMergedSequenceIndex(final SamReader reader, final Integer oldReferenceSequenceIndex) {
-        return this.getMergedSequenceIndex(reader.getFileHeader(), oldReferenceSequenceIndex);
-    }
-
-    /**
-     * Another mechanism for getting the new sequence index, for situations in which the reader is not available.
-     * Note that if the SAMRecord has already had its header replaced with the merged header, this won't work.
-     *
-     * @param header                    The original header for the input record in question.
-     * @param oldReferenceSequenceIndex The original sequence index.
-     * @return the new index value that is compatible with the merged sequence index.
-     */
-    public Integer getMergedSequenceIndex(final SAMFileHeader header, final Integer oldReferenceSequenceIndex) {
-        final Map<Integer, Integer> mapping = this.samSeqDictionaryIdTranslationViaHeader.get(header);
-        if (mapping == null) {
-            throw new SAMException("No sequence dictionary mapping available for header: " + header);
-        }
-
-        final Integer newIndex = mapping.get(oldReferenceSequenceIndex);
-        if (newIndex == null) {
-            throw new SAMException("No mapping for reference index " + oldReferenceSequenceIndex + " from header: " + header);
-        }
-
-        return newIndex;
-    }
-
-
-    /**
-     * Implementations of this interface are used by mergeHeaderRecords(..) to instantiate
-     * specific subclasses of AbstractSAMHeaderRecord.
-     */
-    private interface HeaderRecordFactory<RecordType extends AbstractSAMHeaderRecord> {
-
-        /**
-         * Constructs a new instance of RecordType.
-         *
-         * @param id        The id of the new record.
-         * @param srcRecord Except for the id, the new record will be a copy of this source record.
-         */
-        RecordType createRecord(final String id, RecordType srcRecord);
-    }
-
-    /**
-     * Struct that groups together a subclass of AbstractSAMHeaderRecord with the
-     * SAMFileHeader that it came from.
-     */
-    private static class HeaderRecordAndFileHeader<RecordType extends AbstractSAMHeaderRecord> {
-        private final RecordType headerRecord;
-        private final SAMFileHeader samFileHeader;
-
-        public HeaderRecordAndFileHeader(final RecordType headerRecord, final SAMFileHeader samFileHeader) {
-            this.headerRecord = headerRecord;
-            this.samFileHeader = samFileHeader;
-        }
-
-        public RecordType getHeaderRecord() {
-            return headerRecord;
-        }
-
-        public SAMFileHeader getFileHeader() {
-            return samFileHeader;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamFileValidator.java b/src/main/java/htsjdk/samtools/SamFileValidator.java
deleted file mode 100644
index e40bfe9..0000000
--- a/src/main/java/htsjdk/samtools/SamFileValidator.java
+++ /dev/null
@@ -1,872 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009-2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.SAMValidationError.Type;
-import htsjdk.samtools.BamIndexValidator.IndexValidationStringency;
-import htsjdk.samtools.metrics.MetricBase;
-import htsjdk.samtools.metrics.MetricsFile;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.FastqQualityFormat;
-import htsjdk.samtools.util.Histogram;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.ProgressLogger;
-import htsjdk.samtools.util.QualityEncodingDetector;
-import htsjdk.samtools.util.SequenceUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.BufferedInputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Validates SAM files as follows:
- * <ul>
- * <li>checks sam file header for sequence dictionary</li>
- * <li>checks sam file header for read groups</li>
- * <li>for each sam record
- * <ul>
- * <li>reports error detected by SAMRecord.isValid()</li>
- * <li>validates NM (nucleotide differences) exists and matches reality</li>
- * <li>validates mate fields agree with data in the mate record</li>
- * </ul>
- * </li>
- * </ul>
- *
- * @author Doug Voet
- * @see SAMRecord#isValid()
- */
-public class SamFileValidator {
-
-    private final static Log log = Log.getInstance(SamFileValidator.class);
-
-    private final PrintWriter out;
-    private Histogram<Type> errorsByType;
-    private PairEndInfoMap pairEndInfoByName;
-    private ReferenceSequenceFileWalker refFileWalker;
-    private boolean verbose;
-    private int maxVerboseOutput;
-    private SAMSortOrderChecker orderChecker;
-    private Set<Type> errorsToIgnore;
-    private boolean ignoreWarnings;
-    private boolean bisulfiteSequenced;
-    private IndexValidationStringency indexValidationStringency;
-    private boolean sequenceDictionaryEmptyAndNoWarningEmitted;
-
-    private final int maxTempFiles;
-
-    public SamFileValidator(final PrintWriter out, final int maxTempFiles) {
-        this.out = out;
-        this.maxTempFiles = maxTempFiles;
-        this.errorsByType = new Histogram<>();
-        this.refFileWalker = null;
-        this.maxVerboseOutput = 100;
-        this.indexValidationStringency = IndexValidationStringency.NONE;
-        this.errorsToIgnore = EnumSet.noneOf(Type.class);
-        this.verbose = false;
-        this.ignoreWarnings = false;
-        this.bisulfiteSequenced = false;
-        this.sequenceDictionaryEmptyAndNoWarningEmitted = false;
-    }
-
-    Histogram<Type> getErrorsByType() {
-        return errorsByType;
-    }
-
-    /**
-     * Sets one or more error types that should not be reported on.
-     */
-    public void setErrorsToIgnore(final Collection<Type> types) {
-        if (!types.isEmpty()) {
-            this.errorsToIgnore = EnumSet.copyOf(types);
-        }
-    }
-
-    public void setIgnoreWarnings(final boolean ignoreWarnings) {
-        this.ignoreWarnings = ignoreWarnings;
-    }
-
-    /**
-     * Outputs validation summary report to out.
-     *
-     * @param samReader records to validate
-     * @param reference if null, NM tag validation is skipped
-     * @return boolean  true if there are no validation errors, otherwise false
-     */
-    public boolean validateSamFileSummary(final SamReader samReader, final ReferenceSequenceFile reference) {
-        init(reference, samReader.getFileHeader());
-
-        validateSamFile(samReader, out);
-
-        boolean result = errorsByType.isEmpty();
-
-        if (errorsByType.getCount() > 0) {
-            // Convert to a histogram with String IDs so that WARNING: or ERROR: can be prepended to the error type.
-            final Histogram<String> errorsAndWarningsByType = new Histogram<>("Error Type", "Count");
-            for (final Histogram.Bin<Type> bin : errorsByType.values()) {
-                errorsAndWarningsByType.increment(bin.getId().getHistogramString(), bin.getValue());
-            }
-            final MetricsFile<ValidationMetrics, String> metricsFile = new MetricsFile<ValidationMetrics, String>();
-            errorsByType.setBinLabel("Error Type");
-            errorsByType.setValueLabel("Count");
-            metricsFile.setHistogram(errorsAndWarningsByType);
-            metricsFile.write(out);
-        }
-        cleanup();
-        return result;
-    }
-
-    /**
-     * Outputs validation error details to out.
-     *
-     * @param samReader records to validate
-     * @param reference if null, NM tag validation is skipped
-     *                  processing will stop after this threshold has been reached
-     * @return boolean  true if there are no validation errors, otherwise false
-     */
-    public boolean validateSamFileVerbose(final SamReader samReader, final ReferenceSequenceFile reference) {
-        init(reference, samReader.getFileHeader());
-
-        try {
-            validateSamFile(samReader, out);
-        } catch (MaxOutputExceededException e) {
-            out.println("Maximum output of [" + maxVerboseOutput + "] errors reached.");
-        }
-        boolean result = errorsByType.isEmpty();
-        cleanup();
-        return result;
-    }
-
-    public void validateBamFileTermination(final File inputFile) {
-        BufferedInputStream inputStream = null;
-        try {
-            inputStream = IOUtil.toBufferedStream(new FileInputStream(inputFile));
-            if (!BlockCompressedInputStream.isValidFile(inputStream)) {
-                return;
-            }
-            final BlockCompressedInputStream.FileTermination terminationState =
-                    BlockCompressedInputStream.checkTermination(inputFile);
-            if (terminationState.equals(BlockCompressedInputStream.FileTermination.DEFECTIVE)) {
-                addError(new SAMValidationError(Type.TRUNCATED_FILE, "BAM file has defective last gzip block",
-                        inputFile.getPath()));
-            } else if (terminationState.equals(BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK)) {
-                addError(new SAMValidationError(Type.BAM_FILE_MISSING_TERMINATOR_BLOCK,
-                        "Older BAM file -- does not have terminator block",
-                        inputFile.getPath()));
-
-            }
-        } catch (IOException e) {
-            throw new SAMException("IOException", e);
-        } finally {
-            if (inputStream != null) {
-                CloserUtil.close(inputStream);
-            }
-        }
-    }
-
-    private void validateSamFile(final SamReader samReader, final PrintWriter out) {
-        try {
-            validateHeader(samReader.getFileHeader());
-            orderChecker = new SAMSortOrderChecker(samReader.getFileHeader().getSortOrder());
-            validateSamRecordsAndQualityFormat(samReader, samReader.getFileHeader());
-            validateUnmatchedPairs();
-            if (indexValidationStringency != IndexValidationStringency.NONE) {
-                try {
-                    if (indexValidationStringency == IndexValidationStringency.LESS_EXHAUSTIVE) {
-                        BamIndexValidator.lessExhaustivelyTestIndex(samReader);
-                    }
-                    else {
-                        BamIndexValidator.exhaustivelyTestIndex(samReader);
-                    }
-                } catch (Exception e) {
-                    addError(new SAMValidationError(Type.INVALID_INDEX_FILE_POINTER, e.getMessage(), null));
-                }
-            }
-
-            if (errorsByType.isEmpty()) {
-                out.println("No errors found");
-            }
-        } finally {
-            out.flush();
-        }
-    }
-
-
-    /**
-     * Report on reads marked as paired, for which the mate was not found.
-     */
-    private void validateUnmatchedPairs() {
-        final InMemoryPairEndInfoMap inMemoryPairMap;
-        if (pairEndInfoByName instanceof CoordinateSortedPairEndInfoMap) {
-            // For the coordinate-sorted map, need to detect mate pairs in which the mateReferenceIndex on one end
-            // does not match the readReference index on the other end, so the pairs weren't united and validated.
-            inMemoryPairMap = new InMemoryPairEndInfoMap();
-            CloseableIterator<Map.Entry<String, PairEndInfo>> it = ((CoordinateSortedPairEndInfoMap) pairEndInfoByName).iterator();
-            while (it.hasNext()) {
-                Map.Entry<String, PairEndInfo> entry = it.next();
-                PairEndInfo pei = inMemoryPairMap.remove(entry.getValue().readReferenceIndex, entry.getKey());
-                if (pei != null) {
-                    // Found a mismatch btw read.mateReferenceIndex and mate.readReferenceIndex
-                    List<SAMValidationError> errors = pei.validateMates(entry.getValue(), entry.getKey());
-                    for (final SAMValidationError error : errors) {
-                        addError(error);
-                    }
-                } else {
-                    // Mate not found.
-                    inMemoryPairMap.put(entry.getValue().mateReferenceIndex, entry.getKey(), entry.getValue());
-                }
-            }
-            it.close();
-        } else {
-            inMemoryPairMap = (InMemoryPairEndInfoMap) pairEndInfoByName;
-        }
-        // At this point, everything in InMemoryMap is a read marked as a pair, for which a mate was not found.
-        for (final Map.Entry<String, PairEndInfo> entry : inMemoryPairMap) {
-            addError(new SAMValidationError(Type.MATE_NOT_FOUND, "Mate not found for paired read", entry.getKey()));
-        }
-    }
-
-    /**
-     * SAM record and quality format validations are combined into a single method because validation must be completed
-     * in only a single pass of the SamRecords (because a SamReader's iterator() method may not return the same
-     * records on a subsequent call).
-     */
-    private void validateSamRecordsAndQualityFormat(final Iterable<SAMRecord> samRecords, final SAMFileHeader header) {
-        final SAMRecordIterator iter = (SAMRecordIterator) samRecords.iterator();
-        final ProgressLogger progress = new ProgressLogger(log, 10000000, "Validated Read");
-        final QualityEncodingDetector qualityDetector = new QualityEncodingDetector();
-        try {
-            while (iter.hasNext()) {
-                final SAMRecord record = iter.next();
-
-                qualityDetector.add(record);
-
-                final long recordNumber = progress.getCount() + 1;
-                final Collection<SAMValidationError> errors = record.isValid();
-                if (errors != null) {
-                    for (final SAMValidationError error : errors) {
-                        error.setRecordNumber(recordNumber);
-                        addError(error);
-                    }
-                }
-
-                validateMateFields(record, recordNumber);
-                final boolean hasValidSortOrder = validateSortOrder(record, recordNumber);
-                validateReadGroup(record, header);
-                final boolean cigarIsValid = validateCigar(record, recordNumber);
-                if (cigarIsValid) {
-                    try {
-                        validateNmTag(record, recordNumber);
-                    }
-                    catch (SAMException e) {
-                        if (hasValidSortOrder) {
-                            // If a CRAM file has an invalid sort order, the ReferenceFileWalker will throw a
-                            // SAMException due to an out of order request when retrieving reference bases during NM
-                            // tag validation; rethrow the exception only if the sort order is valid, otherwise
-                            // swallow the exception and carry on validating
-                            throw e;
-                        }
-                    }
-                }
-                validateSecondaryBaseCalls(record, recordNumber);
-                validateTags(record, recordNumber);
-                if (sequenceDictionaryEmptyAndNoWarningEmitted && !record.getReadUnmappedFlag()) {
-                    addError(new SAMValidationError(Type.MISSING_SEQUENCE_DICTIONARY, "Sequence dictionary is empty", null));
-                    sequenceDictionaryEmptyAndNoWarningEmitted = false;
-
-                }
-                progress.record(record);
-            }
-
-            try {
-                if (progress.getCount() > 0) { // Avoid exception being thrown as a result of no qualities being read
-                    final FastqQualityFormat format = qualityDetector.generateBestGuess(QualityEncodingDetector.FileContext.SAM, FastqQualityFormat.Standard);
-                    if (format != FastqQualityFormat.Standard) {
-                        addError(new SAMValidationError(Type.INVALID_QUALITY_FORMAT, String.format("Detected %s quality score encoding, but expected %s.", format, FastqQualityFormat.Standard), null));
-                    }
-                }
-            } catch (SAMException e) {
-                addError(new SAMValidationError(Type.INVALID_QUALITY_FORMAT, e.getMessage(), null));
-            }
-        } catch (SAMFormatException e) {
-            // increment record number because the iterator behind the SamReader
-            // reads one record ahead so we will get this failure one record ahead
-            final String msg = "SAMFormatException on record " + progress.getCount() + 1;
-            out.println(msg);
-            throw new SAMException(msg, e);
-        } catch (FileTruncatedException e) {
-            addError(new SAMValidationError(Type.TRUNCATED_FILE, "File is truncated", null));
-        } finally {
-            iter.close();
-        }
-    }
-
-    private void validateReadGroup(final SAMRecord record, final SAMFileHeader header) {
-        final SAMReadGroupRecord rg = record.getReadGroup();
-        if (rg == null) {
-            addError(new SAMValidationError(Type.RECORD_MISSING_READ_GROUP,
-                    "A record is missing a read group", record.getReadName()));
-        } else if (header.getReadGroup(rg.getId()) == null) {
-            addError(new SAMValidationError(Type.READ_GROUP_NOT_FOUND,
-                    "A record has a read group not found in the header: ",
-                    record.getReadName() + ", " + rg.getReadGroupId()));
-        }
-    }
-
-    /**
-     * Report error if a tag value is a Long.
-     */
-    private void validateTags(final SAMRecord record, final long recordNumber) {
-        for (final SAMRecord.SAMTagAndValue tagAndValue : record.getAttributes()) {
-            if (tagAndValue.value instanceof Long) {
-                addError(new SAMValidationError(Type.TAG_VALUE_TOO_LARGE,
-                        "Numeric value too large for tag " + tagAndValue.tag,
-                        record.getReadName(), recordNumber));
-            }
-        }
-    }
-
-    private void validateSecondaryBaseCalls(final SAMRecord record, final long recordNumber) {
-        final String e2 = (String) record.getAttribute(SAMTag.E2.name());
-        if (e2 != null) {
-            if (e2.length() != record.getReadLength()) {
-                addError(new SAMValidationError(Type.MISMATCH_READ_LENGTH_AND_E2_LENGTH,
-                        String.format("E2 tag length (%d) != read length (%d)", e2.length(), record.getReadLength()),
-                        record.getReadName(), recordNumber));
-            }
-            final byte[] bases = record.getReadBases();
-            final byte[] secondaryBases = StringUtil.stringToBytes(e2);
-            for (int i = 0; i < Math.min(bases.length, secondaryBases.length); ++i) {
-                if (SequenceUtil.isNoCall(bases[i]) || SequenceUtil.isNoCall(secondaryBases[i])) {
-                    continue;
-                }
-                if (SequenceUtil.basesEqual(bases[i], secondaryBases[i])) {
-                    addError(new SAMValidationError(Type.E2_BASE_EQUALS_PRIMARY_BASE,
-                            String.format("Secondary base call  (%c) == primary base call (%c)",
-                                    (char) secondaryBases[i], (char) bases[i]),
-                            record.getReadName(), recordNumber));
-                    break;
-                }
-            }
-        }
-        final String u2 = (String) record.getAttribute(SAMTag.U2.name());
-        if (u2 != null && u2.length() != record.getReadLength()) {
-            addError(new SAMValidationError(Type.MISMATCH_READ_LENGTH_AND_U2_LENGTH,
-                    String.format("U2 tag length (%d) != read length (%d)", u2.length(), record.getReadLength()),
-                    record.getReadName(), recordNumber));
-        }
-    }
-
-    private boolean validateCigar(final SAMRecord record, final long recordNumber) {
-        if (record.getReadUnmappedFlag()) {
-            return true;
-        }
-        return validateCigar(record, recordNumber, true);
-    }
-
-    private boolean validateMateCigar(final SAMRecord record, final long recordNumber) {
-        return validateCigar(record, recordNumber, false);
-    }
-
-    private boolean validateCigar(final SAMRecord record, final long recordNumber, final boolean isReadCigar) {
-        final ValidationStringency savedStringency = record.getValidationStringency();
-        record.setValidationStringency(ValidationStringency.LENIENT);
-        final List<SAMValidationError> errors = isReadCigar ? record.validateCigar(recordNumber) : SAMUtils.validateMateCigar(record, recordNumber);
-        record.setValidationStringency(savedStringency);
-        if (errors == null) {
-            return true;
-        }
-        boolean valid = true;
-        for (final SAMValidationError error : errors) {
-            addError(error);
-            valid = false;
-        }
-        return valid;
-    }
-
-
-    private boolean validateSortOrder(final SAMRecord record, final long recordNumber) {
-        final SAMRecord prev = orderChecker.getPreviousRecord();
-        boolean isValidSortOrder = orderChecker.isSorted(record);
-        if (!isValidSortOrder) {
-            addError(new SAMValidationError(
-                    Type.RECORD_OUT_OF_ORDER,
-                    String.format(
-                            "The record is out of [%s] order, prior read name [%s], prior coodinates [%d:%d]",
-                            record.getHeader().getSortOrder().name(),
-                            prev.getReadName(),
-                            prev.getReferenceIndex(),
-                            prev.getAlignmentStart()),
-                    record.getReadName(),
-                    recordNumber));
-        }
-        return isValidSortOrder;
-    }
-
-    private void init(final ReferenceSequenceFile reference, final SAMFileHeader header) {
-        if (header.getSortOrder() == SAMFileHeader.SortOrder.coordinate) {
-            this.pairEndInfoByName = new CoordinateSortedPairEndInfoMap();
-        } else {
-            this.pairEndInfoByName = new InMemoryPairEndInfoMap();
-        }
-        if (reference != null) {
-            this.refFileWalker = new ReferenceSequenceFileWalker(reference);
-        }
-    }
-
-    private void cleanup() {
-        this.errorsByType = null;
-        this.pairEndInfoByName = null;
-        this.refFileWalker = null;
-    }
-
-    private void validateNmTag(final SAMRecord record, final long recordNumber) {
-        if (!record.getReadUnmappedFlag()) {
-            final Integer tagNucleotideDiffs = record.getIntegerAttribute(ReservedTagConstants.NM);
-            if (tagNucleotideDiffs == null) {
-                addError(new SAMValidationError(
-                        Type.MISSING_TAG_NM,
-                        "NM tag (nucleotide differences) is missing",
-                        record.getReadName(),
-                        recordNumber));
-            } else if (refFileWalker != null) {
-                final ReferenceSequence refSequence = refFileWalker.get(record.getReferenceIndex());
-                final int actualNucleotideDiffs = SequenceUtil.calculateSamNmTag(record, refSequence.getBases(),
-                        0, isBisulfiteSequenced());
-
-                if (!tagNucleotideDiffs.equals(actualNucleotideDiffs)) {
-                    addError(new SAMValidationError(
-                            Type.INVALID_TAG_NM,
-                            "NM tag (nucleotide differences) in file [" + tagNucleotideDiffs +
-                                    "] does not match reality [" + actualNucleotideDiffs + "]",
-                            record.getReadName(),
-                            recordNumber));
-                }
-            }
-        }
-    }
-
-    private void validateMateFields(final SAMRecord record, final long recordNumber) {
-        if (!record.getReadPairedFlag() || record.isSecondaryOrSupplementary()) {
-            return;
-        }
-        validateMateCigar(record, recordNumber);
-
-        final PairEndInfo pairEndInfo = pairEndInfoByName.remove(record.getReferenceIndex(), record.getReadName());
-        if (pairEndInfo == null) {
-            pairEndInfoByName.put(record.getMateReferenceIndex(), record.getReadName(), new PairEndInfo(record, recordNumber));
-        } else {
-            final List<SAMValidationError> errors =
-                    pairEndInfo.validateMates(new PairEndInfo(record, recordNumber), record.getReadName());
-            for (final SAMValidationError error : errors) {
-                addError(error);
-            }
-        }
-    }
-
-    private void validateHeader(final SAMFileHeader fileHeader) {
-        for (final SAMValidationError error : fileHeader.getValidationErrors()) {
-            addError(error);
-        }
-        if (fileHeader.getVersion() == null) {
-            addError(new SAMValidationError(Type.MISSING_VERSION_NUMBER, "Header has no version number", null));
-        } else if (!SAMFileHeader.ACCEPTABLE_VERSIONS.contains(fileHeader.getVersion())) {
-            addError(new SAMValidationError(Type.INVALID_VERSION_NUMBER, "Header version: " +
-                    fileHeader.getVersion() + " does not match any of the acceptable versions: " +
-                    StringUtil.join(", ", SAMFileHeader.ACCEPTABLE_VERSIONS.toArray(new String[0])),
-                    null));
-        }
-        if (fileHeader.getSequenceDictionary().isEmpty()) {
-            sequenceDictionaryEmptyAndNoWarningEmitted = true;
-        }
-        if (fileHeader.getReadGroups().isEmpty()) {
-            addError(new SAMValidationError(Type.MISSING_READ_GROUP, "Read groups is empty", null));
-        }
-        final List<SAMProgramRecord> pgs = fileHeader.getProgramRecords();
-        for (int i = 0; i < pgs.size() - 1; i++) {
-            for (int j = i + 1; j < pgs.size(); j++) {
-                if (pgs.get(i).getProgramGroupId().equals(pgs.get(j).getProgramGroupId())) {
-                    addError(new SAMValidationError(Type.DUPLICATE_PROGRAM_GROUP_ID, "Duplicate " +
-                            "program group id: " + pgs.get(i).getProgramGroupId(), null));
-                }
-            }
-        }
-
-        final List<SAMReadGroupRecord> rgs = fileHeader.getReadGroups();
-        final Set<String> readGroupIDs = new HashSet<String>();
-
-        for (final SAMReadGroupRecord record : rgs) {
-            final String readGroupID = record.getReadGroupId();
-            if (readGroupIDs.contains(readGroupID)) {
-                addError(new SAMValidationError(Type.DUPLICATE_READ_GROUP_ID, "Duplicate " +
-                        "read group id: " + readGroupID, null));
-            } else {
-                readGroupIDs.add(readGroupID);
-            }
-
-            final String platformValue = record.getPlatform();
-            if (platformValue == null || "".equals(platformValue)) {
-                addError(new SAMValidationError(Type.MISSING_PLATFORM_VALUE,
-                        "A platform (PL) attribute was not found for read group ",
-                        readGroupID));
-            }
-            else { 
-                // NB: cannot be null, so not catching a NPE
-                try {
-                    SAMReadGroupRecord.PlatformValue.valueOf(platformValue.toUpperCase());
-                } catch (IllegalArgumentException e) {
-                    addError(new SAMValidationError(Type.INVALID_PLATFORM_VALUE, 
-                            "The platform (PL) attribute (" + platformValue + ") + was not one of the valid values for read group ",
-                            readGroupID));
-                }
-            }
-        }
-    }
-
-    private void addError(final SAMValidationError error) {
-        // Just ignore an error if it's of a type we're not interested in
-        if (this.errorsToIgnore.contains(error.getType())) return;
-
-        if (this.ignoreWarnings && error.getType().severity == SAMValidationError.Severity.WARNING) return;
-
-        this.errorsByType.increment(error.getType());
-        if (verbose) {
-            out.println(error);
-            out.flush();
-            if (this.errorsByType.getCount() >= maxVerboseOutput) {
-                throw new MaxOutputExceededException();
-            }
-        }
-    }
-
-    /**
-     * Control verbosity
-     *
-     * @param verbose          True in order to emit a message per error or warning.
-     * @param maxVerboseOutput If verbose, emit no more than this many messages.  Ignored if !verbose.
-     */
-    public void setVerbose(final boolean verbose, final int maxVerboseOutput) {
-        this.verbose = verbose;
-        this.maxVerboseOutput = maxVerboseOutput;
-    }
-
-    public boolean isBisulfiteSequenced() {
-        return bisulfiteSequenced;
-    }
-
-    public void setBisulfiteSequenced(boolean bisulfiteSequenced) {
-        this.bisulfiteSequenced = bisulfiteSequenced;
-    }
-
-    /**
-     * @deprecated use {@link #setIndexValidationStringency} instead
-     */
-    @Deprecated
-    public SamFileValidator setValidateIndex(final boolean validateIndex) {
-        // The SamReader must also have IndexCaching enabled to have the index validated,
-        return this.setIndexValidationStringency(validateIndex ? IndexValidationStringency.EXHAUSTIVE : IndexValidationStringency.NONE);
-    }
-
-    public SamFileValidator setIndexValidationStringency(final IndexValidationStringency stringency) {
-        this.indexValidationStringency = stringency;
-        return this;
-    }
-
-    public static class ValidationMetrics extends MetricBase {
-    }
-
-    /**
-     * This class is used so we don't have to store the entire SAMRecord in memory while we wait
-     * to find a record's mate and also to store the record number.
-     */
-    private static class PairEndInfo {
-        private final int readAlignmentStart;
-        private final int readReferenceIndex;
-        private final boolean readNegStrandFlag;
-        private final boolean readUnmappedFlag;
-        private final String readCigarString;
-
-        private final int mateAlignmentStart;
-        private final int mateReferenceIndex;
-        private final boolean mateNegStrandFlag;
-        private final boolean mateUnmappedFlag;
-        private final String mateCigarString;
-
-        private final boolean firstOfPairFlag;
-
-        private final long recordNumber;
-
-        public PairEndInfo(final SAMRecord record, final long recordNumber) {
-            this.recordNumber = recordNumber;
-
-            this.readAlignmentStart = record.getAlignmentStart();
-            this.readNegStrandFlag = record.getReadNegativeStrandFlag();
-            this.readReferenceIndex = record.getReferenceIndex();
-            this.readUnmappedFlag = record.getReadUnmappedFlag();
-            this.readCigarString = record.getCigarString();
-
-            this.mateAlignmentStart = record.getMateAlignmentStart();
-            this.mateNegStrandFlag = record.getMateNegativeStrandFlag();
-            this.mateReferenceIndex = record.getMateReferenceIndex();
-            this.mateUnmappedFlag = record.getMateUnmappedFlag();
-            final Object mcs = record.getAttribute(SAMTag.MC.name());
-            this.mateCigarString = (mcs != null) ? (String) mcs : null;
-
-            this.firstOfPairFlag = record.getFirstOfPairFlag();
-        }
-
-        private PairEndInfo(int readAlignmentStart, int readReferenceIndex, boolean readNegStrandFlag, boolean readUnmappedFlag,
-                            String readCigarString,
-                            int mateAlignmentStart, int mateReferenceIndex, boolean mateNegStrandFlag, boolean mateUnmappedFlag,
-                            String mateCigarString,
-                            boolean firstOfPairFlag, long recordNumber) {
-            this.readAlignmentStart = readAlignmentStart;
-            this.readReferenceIndex = readReferenceIndex;
-            this.readNegStrandFlag = readNegStrandFlag;
-            this.readUnmappedFlag = readUnmappedFlag;
-            this.readCigarString = readCigarString;
-            this.mateAlignmentStart = mateAlignmentStart;
-            this.mateReferenceIndex = mateReferenceIndex;
-            this.mateNegStrandFlag = mateNegStrandFlag;
-            this.mateUnmappedFlag = mateUnmappedFlag;
-            this.mateCigarString = mateCigarString;
-            this.firstOfPairFlag = firstOfPairFlag;
-            this.recordNumber = recordNumber;
-        }
-
-        public List<SAMValidationError> validateMates(final PairEndInfo mate, final String readName) {
-            final List<SAMValidationError> errors = new ArrayList<SAMValidationError>();
-            validateMateFields(this, mate, readName, errors);
-            validateMateFields(mate, this, readName, errors);
-            // Validations that should not be repeated on both ends
-            if (this.firstOfPairFlag == mate.firstOfPairFlag) {
-                final String whichEnd = this.firstOfPairFlag ? "first" : "second";
-                errors.add(new SAMValidationError(
-                        Type.MATES_ARE_SAME_END,
-                        "Both mates are marked as " + whichEnd + " of pair",
-                        readName,
-                        this.recordNumber
-                ));
-            }
-            return errors;
-        }
-
-        private void validateMateFields(final PairEndInfo end1, final PairEndInfo end2, final String readName, final List<SAMValidationError> errors) {
-            if (end1.mateAlignmentStart != end2.readAlignmentStart) {
-                errors.add(new SAMValidationError(
-                        Type.MISMATCH_MATE_ALIGNMENT_START,
-                        "Mate alignment does not match alignment start of mate",
-                        readName,
-                        end1.recordNumber));
-            }
-            if (end1.mateNegStrandFlag != end2.readNegStrandFlag) {
-                errors.add(new SAMValidationError(
-                        Type.MISMATCH_FLAG_MATE_NEG_STRAND,
-                        "Mate negative strand flag does not match read negative strand flag of mate",
-                        readName,
-                        end1.recordNumber));
-            }
-            if (end1.mateReferenceIndex != end2.readReferenceIndex) {
-                errors.add(new SAMValidationError(
-                        Type.MISMATCH_MATE_REF_INDEX,
-                        "Mate reference index (MRNM) does not match reference index of mate",
-                        readName,
-                        end1.recordNumber));
-            }
-            if (end1.mateUnmappedFlag != end2.readUnmappedFlag) {
-                errors.add(new SAMValidationError(
-                        Type.MISMATCH_FLAG_MATE_UNMAPPED,
-                        "Mate unmapped flag does not match read unmapped flag of mate",
-                        readName,
-                        end1.recordNumber));
-            }
-            if ((end1.mateCigarString != null) && (!end1.mateCigarString.equals(end2.readCigarString))) {
-                errors.add(new SAMValidationError(
-                        Type.MISMATCH_MATE_CIGAR_STRING,
-                        "Mate CIGAR string does not match CIGAR string of mate",
-                        readName,
-                        end1.recordNumber));
-            }
-            // Note - don't need to validate that the mateCigarString is a valid cigar string, since this
-            // will be validated by validateCigar on the mate's record itself.
-        }
-    }
-
-    /**
-     * Thrown in addError indicating that maxVerboseOutput has been exceeded and processing should stop
-     */
-    private static class MaxOutputExceededException extends SAMException {
-        MaxOutputExceededException() {
-            super("maxVerboseOutput exceeded.");
-        }
-    }
-
-    interface PairEndInfoMap extends Iterable<Map.Entry<String, PairEndInfo>> {
-        void put(int mateReferenceIndex, String key, PairEndInfo value);
-
-        PairEndInfo remove(int mateReferenceIndex, String key);
-
-        CloseableIterator<Map.Entry<String, PairEndInfo>> iterator();
-    }
-
-    private class CoordinateSortedPairEndInfoMap implements PairEndInfoMap {
-        private final CoordinateSortedPairInfoMap<String, PairEndInfo> onDiskMap =
-                new CoordinateSortedPairInfoMap<String, PairEndInfo>(maxTempFiles, new Codec());
-
-        public void put(int mateReferenceIndex, String key, PairEndInfo value) {
-            onDiskMap.put(mateReferenceIndex, key, value);
-        }
-
-        public PairEndInfo remove(int mateReferenceIndex, String key) {
-            return onDiskMap.remove(mateReferenceIndex, key);
-        }
-
-        public CloseableIterator<Map.Entry<String, PairEndInfo>> iterator() {
-            return onDiskMap.iterator();
-        }
-
-        private class Codec implements CoordinateSortedPairInfoMap.Codec<String, PairEndInfo> {
-            private DataInputStream in;
-            private DataOutputStream out;
-
-            public void setOutputStream(final OutputStream os) {
-                this.out = new DataOutputStream(os);
-            }
-
-            public void setInputStream(final InputStream is) {
-                this.in = new DataInputStream(is);
-            }
-
-            public void encode(final String key, final PairEndInfo record) {
-                try {
-                    out.writeUTF(key);
-                    out.writeInt(record.readAlignmentStart);
-                    out.writeInt(record.readReferenceIndex);
-                    out.writeBoolean(record.readNegStrandFlag);
-                    out.writeBoolean(record.readUnmappedFlag);
-                    out.writeUTF(record.readCigarString);
-                    out.writeInt(record.mateAlignmentStart);
-                    out.writeInt(record.mateReferenceIndex);
-                    out.writeBoolean(record.mateNegStrandFlag);
-                    out.writeBoolean(record.mateUnmappedFlag);
-                    // writeUTF can't take null, so store a null mateCigarString as an empty string
-                    out.writeUTF(record.mateCigarString != null ? record.mateCigarString : "");
-                    out.writeBoolean(record.firstOfPairFlag);
-                    out.writeLong(record.recordNumber);
-                } catch (IOException e) {
-                    throw new SAMException("Error spilling PairInfo to disk", e);
-                }
-            }
-
-            public Map.Entry<String, PairEndInfo> decode() {
-                try {
-                    final String key = in.readUTF();
-                    final int readAlignmentStart = in.readInt();
-                    final int readReferenceIndex = in.readInt();
-                    final boolean readNegStrandFlag = in.readBoolean();
-                    final boolean readUnmappedFlag = in.readBoolean();
-                    final String readCigarString = in.readUTF();
-
-                    final int mateAlignmentStart = in.readInt();
-                    final int mateReferenceIndex = in.readInt();
-                    final boolean mateNegStrandFlag = in.readBoolean();
-                    final boolean mateUnmappedFlag = in.readBoolean();
-
-                    // read mateCigarString - note that null value is stored as an empty string
-                    final String mcs = in.readUTF();
-                    final String mateCigarString = !mcs.isEmpty() ? mcs : null;
-
-                    final boolean firstOfPairFlag = in.readBoolean();
-
-                    final long recordNumber = in.readLong();
-                    final PairEndInfo rec = new PairEndInfo(readAlignmentStart, readReferenceIndex, readNegStrandFlag,
-                            readUnmappedFlag, readCigarString, mateAlignmentStart, mateReferenceIndex, mateNegStrandFlag,
-                            mateUnmappedFlag, mateCigarString,
-                            firstOfPairFlag, recordNumber);
-                    return new AbstractMap.SimpleEntry(key, rec);
-                } catch (IOException e) {
-                    throw new SAMException("Error reading PairInfo from disk", e);
-                }
-            }
-        }
-    }
-
-    private static class InMemoryPairEndInfoMap implements PairEndInfoMap {
-        private final Map<String, PairEndInfo> map = new HashMap<String, PairEndInfo>();
-
-        public void put(int mateReferenceIndex, String key, PairEndInfo value) {
-            if (mateReferenceIndex != value.mateReferenceIndex)
-                throw new IllegalArgumentException("mateReferenceIndex does not agree with PairEndInfo");
-            map.put(key, value);
-        }
-
-        public PairEndInfo remove(int mateReferenceIndex, String key) {
-            return map.remove(key);
-        }
-
-        public CloseableIterator<Map.Entry<String, PairEndInfo>> iterator() {
-            final Iterator<Map.Entry<String, PairEndInfo>> it = map.entrySet().iterator();
-            return new CloseableIterator<Map.Entry<String, PairEndInfo>>() {
-                public void close() {
-                    // do nothing
-                }
-
-                public boolean hasNext() {
-                    return it.hasNext();
-                }
-
-                public Map.Entry<String, PairEndInfo> next() {
-                    return it.next();
-                }
-
-                public void remove() {
-                    it.remove();
-                }
-            };
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamFiles.java b/src/main/java/htsjdk/samtools/SamFiles.java
deleted file mode 100644
index 874fc10..0000000
--- a/src/main/java/htsjdk/samtools/SamFiles.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.cram.build.CramIO;
-
-import htsjdk.samtools.util.Log;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-/**
- * @author mccowan
- */
-public class SamFiles {
-
-    private final static Log LOG = Log.getInstance(SamFiles.class);
-
-    /**
-     * Finds the index file associated with the provided SAM file.  The index file must exist and be reachable to be found.
-     *
-     * If the file is a symlink and the index cannot be found, try to unsymlink the file and look for the bai in the actual file path.
-     *
-     * @return The index for the provided SAM, or null if one was not found.
-     */
-    public static File findIndex(final File samFile) {
-        Path path = findIndex(samFile.toPath());
-        return path == null ? null : path.toFile();
-    }
-
-    /**
-     * Finds the index file associated with the provided SAM file.  The index file must exist and be reachable to be found.
-     *
-     * If the file is a symlink and the index cannot be found, try to unsymlink the file and look for the bai in the actual file path.
-     *
-     * @return The index for the provided SAM, or null if one was not found.
-     */
-    public static Path findIndex(final Path samPath) {
-        final Path indexPath = lookForIndex(samPath); //try to find the index
-        if (indexPath == null) {
-            return unsymlinkAndLookForIndex(samPath);
-        } else {
-            return indexPath;
-        }
-    }
-
-    /**
-     * resolve the canonical path of samFile and attempt to find an index there.
-     * @return an index file or null if no index is found.
-     */
-    private static Path unsymlinkAndLookForIndex(Path samPath) {
-        try {
-            final Path canonicalSamPath = samPath.toRealPath(); // resolve symbolic links
-            final Path canonicalIndexPath = lookForIndex(canonicalSamPath);
-            if ( canonicalIndexPath != null) {
-                LOG.warn("The index file " + canonicalIndexPath.toAbsolutePath()
-                        + " was found by resolving the canonical path of a symlink: "
-                        + samPath.toAbsolutePath() + " -> " + samPath.toRealPath());
-            }
-            return canonicalIndexPath;
-        } catch (IOException e) {
-            return null;
-        }
-    }
-
-    private static Path lookForIndex(final Path samPath) {// If input is foo.bam, look for foo.bai
-        Path indexPath;
-        final String fileName = samPath.getFileName().toString(); // works for all path types (e.g. HDFS)
-        if (fileName.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
-            final String bai = fileName.substring(0, fileName.length() - BamFileIoUtils.BAM_FILE_EXTENSION.length()) + BAMIndex.BAMIndexSuffix;
-            indexPath = samPath.resolveSibling(bai);
-            if (Files.isRegularFile(indexPath)) { // works for all path types (e.g. HDFS)
-                return indexPath;
-            }
-
-
-        } else if (fileName.endsWith(CramIO.CRAM_FILE_EXTENSION)) {
-            final String crai = fileName.substring(0, fileName.length() - CramIO.CRAM_FILE_EXTENSION.length()) + CRAIIndex.CRAI_INDEX_SUFFIX;
-            indexPath = samPath.resolveSibling(crai);
-            if (Files.isRegularFile(indexPath)) {
-                return indexPath;
-            }
-
-            indexPath = samPath.resolveSibling(fileName + CRAIIndex.CRAI_INDEX_SUFFIX);
-            if (Files.isRegularFile(indexPath)) {
-                return indexPath;
-            }
-        }
-
-        // If foo.bai doesn't exist look for foo.bam.bai or foo.cram.bai
-        indexPath = samPath.resolveSibling(fileName + BAMIndex.BAMIndexSuffix);
-        if (Files.isRegularFile(indexPath)) {
-            return indexPath;
-        }
-
-        return null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamFlagField.java b/src/main/java/htsjdk/samtools/SamFlagField.java
deleted file mode 100644
index 82f2a29..0000000
--- a/src/main/java/htsjdk/samtools/SamFlagField.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Nils Homer
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-/**
- * This determines how flag fields are represented in the SAM file.
- *
- * In a string FLAG, each character represents one bit with
- * p=0x1 (paired), P=0x2 (properly paired), u=0x4 (unmapped),
- * U=0x8 (mate unmapped), r=0x10 (reverse), R=0x20 (mate reverse)
- * 1=0x40 (first), 2=0x80 (second), s=0x100 (not primary), 
- * x=0x200 (failure), d=0x400 (duplicate), and S=0x800 (secondary).
- * This was inspired by 'samtools view -X'.
- *
- * We also output a character when the following bits *are not* set:
- * m=0x4 (mapped), M=0x8 (mate mapped), f=0x10 (forward), F=0x20 
- * (mate forward).
- * 
- * @author nhomer
- */
-public enum SamFlagField {
-    NONE {
-        @Override
-        public String format(final int flag) {
-            throw new SAMFormatException("NONE not allowed for the SamFlagField when writing the SAM flag field.");
-        }
-        @Override
-        protected int parseWithoutValidation(final String flag) {
-            throw new SAMFormatException("NONE not allowed for the SamFlagField when reading the SAM flag field.");
-        } 
-    },
-    DECIMAL {
-        @Override
-        public String format(final int flag) {
-            return Integer.toString(flag);
-        }
-        /** Throws NumberFormatException if it can't parse the flag **/
-        @Override
-        protected int parseWithoutValidation(final String flag) {
-            return Integer.parseInt(flag);
-        }
-    },
-    HEXADECIMAL {
-        @Override
-        public String format(final int flag) {
-            return String.format("%#x", flag);
-        }
-        @Override
-        protected int parseWithoutValidation(final String flag) {
-            return Integer.valueOf(flag.substring(2), 16);
-        }
-    },
-    OCTAL {
-        @Override
-        public String format(final int flag) {
-            return String.format("%#o", flag);
-        }
-        @Override
-        protected int parseWithoutValidation(final String flag) {
-            return Integer.valueOf(flag, 8);
-        }
-    },
-    STRING {
-        /*
-        It is important that the first character of a string does not start with a digit, so we can
-        determine which format given an input flag value.  See of.
-         */
-
-        @Override
-        public String format(final int flag) {
-            // Adapted from the the implementation here:
-            //   https://github.com/jmarshall/cansam/blob/master/lib/alignment.cpp
-            final StringBuilder value = new StringBuilder();
-
-            if ((flag & SAMFlag.READ_UNMAPPED.flag) != 0)                   value.append('u');
-            else                                                            value.append('m');
-
-            if ((flag & SAMFlag.READ_REVERSE_STRAND.flag) != 0)             value.append('r');
-            else if ((flag & SAMFlag.READ_UNMAPPED.flag) == 0)              value.append('f');
-
-            if ((flag & SAMFlag.MATE_UNMAPPED.flag) != 0)                   value.append('U');
-            else if ((flag & SAMFlag.READ_PAIRED.flag) != 0)                value.append('M');
-
-            if ((flag & SAMFlag.MATE_REVERSE_STRAND.flag) != 0)             value.append('R');
-            else if ((flag & SAMFlag.READ_PAIRED.flag) != 0)                value.append('F');
-
-            if ((flag & SAMFlag.READ_PAIRED.flag) != 0)                     value.append('p');
-            if ((flag & SAMFlag.PROPER_PAIR.flag) != 0)                     value.append('P');
-            if ((flag & SAMFlag.FIRST_OF_PAIR.flag) != 0)                   value.append('1');
-            if ((flag & SAMFlag.SECOND_OF_PAIR.flag) != 0)                  value.append('2');
-
-            if ((flag & SAMFlag.NOT_PRIMARY_ALIGNMENT.flag) != 0)           value.append('s');
-            if ((flag & SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag) != 0)         value.append('S');
-            if ((flag & SAMFlag.READ_FAILS_VENDOR_QUALITY_CHECK.flag) != 0) value.append('x');
-            if ((flag & SAMFlag.DUPLICATE_READ.flag) != 0)                  value.append('d');
-
-            return value.toString();
-        }
-
-        @Override
-        protected int parseWithoutValidation(final String flag) {
-            SamFlagField.validate(flag, STRING);
-
-            // Adapted from the the implementation here:
-            //   https://github.com/jmarshall/cansam/blob/master/lib/alignment.cpp
-
-            int value = 0;
-
-            for (int i = 0; i < flag.length(); i++) {
-                switch (flag.charAt(i)) {
-                    case 'p':  value |= SAMFlag.READ_PAIRED.flag;  break;
-                    case 'P':  value |= SAMFlag.PROPER_PAIR.flag;  break;
-                    case 'u':  value |= SAMFlag.READ_UNMAPPED.flag;  break;
-                    case 'U':  value |= SAMFlag.MATE_UNMAPPED.flag;  break;
-                    case 'r':  value |= SAMFlag.READ_REVERSE_STRAND.flag;  break;
-                    case 'R':  value |= SAMFlag.MATE_REVERSE_STRAND.flag;  break;
-                    case '1':  value |= SAMFlag.FIRST_OF_PAIR.flag;  break;
-                    case '2':  value |= SAMFlag.SECOND_OF_PAIR.flag;  break;
-                    case 's':  value |= SAMFlag.NOT_PRIMARY_ALIGNMENT.flag;  break;
-                    case 'x':  value |= SAMFlag.READ_FAILS_VENDOR_QUALITY_CHECK.flag;  break;
-                    case 'd':  value |= SAMFlag.DUPLICATE_READ.flag;  break;
-                    case 'S':  value |= SAMFlag.SUPPLEMENTARY_ALIGNMENT.flag;  break;
-                    case 'f':
-                    case 'F':
-                    case 'm':
-                    case 'M':
-                    case '_':
-                        break;
-                    default:
-                        throw new SAMFormatException("Unknown flag character '" + flag.charAt(i) + "' in flag '" + flag + "'");
-                }
-            }
-
-            return value;
-        }
-    };
-
-    /** Returns the string associated with this flag field. */
-    abstract public String format(final int flag);
-
-    /** Parses the flag.  Validates that the flag is of the correct type. */
-    public final int parse(final String flag) {
-        return parse(flag, true);
-    }
-
-    /** Infers the format from the flag string and parses the flag. */
-    public static int parseDefault(final String flag) {
-        return SamFlagField.of(flag).parse(flag, false);
-    }
-
-    /** Performs the actual parsing based on the radix.  No validation that the flag is of the correct radix
-     * should be performed.
-     */
-    abstract protected int parseWithoutValidation(final String flag);
-
-    /** Parses the flag.  Performs optional validation that the flag is of the correct type. */
-    private int parse(final String flag, final boolean withValidation) {
-        if (withValidation) SamFlagField.validate(flag, this);
-        return parseWithoutValidation(flag);
-    }
-
-    /**
-     * Returns the type of flag field for this string.  This does not guarantee it is of the flag field,
-     * as it only checks the first two characters.
-     */
-    public static SamFlagField of(final String s) {
-        if (s.isEmpty()) throw new SAMFormatException("Could not determine flag field type; saw an empty flag field");
-        else if (s.startsWith("0x")) return HEXADECIMAL;
-        else if (s.startsWith("0X")) return HEXADECIMAL;
-        else if (s.startsWith("0") && s.length() > 1) return OCTAL;
-        else if (Character.isDigit(s.charAt(0))) return DECIMAL;
-        else return STRING;
-    }
-
-    private static void validate(final String flag, final SamFlagField expectedField) {
-        final SamFlagField actualField = SamFlagField.of(flag);
-        if (actualField != expectedField) {
-            throw new SAMFormatException(expectedField.name() + " sam flag must start with [1-9] but found '" + flag + "' (" + actualField.name() + ")");
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/SamIndexes.java b/src/main/java/htsjdk/samtools/SamIndexes.java
deleted file mode 100644
index a888811..0000000
--- a/src/main/java/htsjdk/samtools/SamIndexes.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.seekablestream.SeekableBufferedStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * A helper class to read BAI and CRAI indexes. Main goal is to provide BAI stream as a sort of common API for all index types.
- * <p/>
- * Created by vadim on 14/08/2015.
- */
-public enum SamIndexes {
-    BAI(BAMIndex.BAMIndexSuffix, "BAI\1".getBytes()),
-    // CRAI is gzipped text, so it's magic is same as {@link java.util.zip.GZIPInputStream.GZIP_MAGIC}
-    CRAI(CRAIIndex.CRAI_INDEX_SUFFIX, new byte[]{(byte) 0x1f, (byte) 0x8b});
-
-    public final String fileNameSuffix;
-    public final byte[] magic;
-
-    SamIndexes(final String fileNameSuffix, final byte[] magic) {
-        this.fileNameSuffix = fileNameSuffix;
-        this.magic = magic;
-    }
-
-    public static InputStream openIndexFileAsBaiOrNull(final File file, final SAMSequenceDictionary dictionary) throws IOException {
-        return openIndexUrlAsBaiOrNull(file.toURI().toURL(), dictionary);
-    }
-
-    public static InputStream openIndexUrlAsBaiOrNull(final URL url, final SAMSequenceDictionary dictionary) throws IOException {
-        if (url.getFile().toLowerCase().endsWith(BAI.fileNameSuffix.toLowerCase())) {
-            return url.openStream();
-        }
-        if (url.getFile().toLowerCase().endsWith(CRAI.fileNameSuffix.toLowerCase())) {
-            return CRAIIndex.openCraiFileAsBaiStream(url.openStream(), dictionary);
-        }
-
-        return null;
-    }
-
-    public static InputStream asBaiStreamOrNull(final InputStream inputStream, final SAMSequenceDictionary dictionary) throws IOException {
-        final BufferedInputStream bis = new BufferedInputStream(inputStream);
-        bis.mark(BAI.magic.length);
-        if (doesStreamStartWith(bis, BAI.magic)) {
-            bis.reset();
-            return bis;
-        } else {
-            bis.reset();
-        }
-
-        bis.mark(CRAI.magic.length);
-        if (doesStreamStartWith(bis, CRAI.magic)) {
-            bis.reset();
-            return CRAIIndex.openCraiFileAsBaiStream(bis, dictionary);
-        } else {
-            bis.reset();
-        }
-
-        return null;
-    }
-
-    public static SeekableStream asBaiSeekableStreamOrNull(final SeekableStream inputStream, final SAMSequenceDictionary dictionary) throws IOException {
-        final SeekableBufferedStream bis = new SeekableBufferedStream(inputStream);
-        bis.seek(0);
-        if (doesStreamStartWith(bis, BAI.magic)) {
-            bis.seek(0);
-            return bis;
-        }
-
-        bis.seek(0);
-        if (doesStreamStartWith(bis, CRAI.magic)) {
-            bis.seek(0);
-            return CRAIIndex.openCraiFileAsBaiStream(bis, dictionary);
-        } else {
-            bis.reset();
-        }
-
-        return null;
-    }
-
-    private static boolean doesStreamStartWith(final InputStream is, final byte[] bytes) throws IOException {
-        for (final byte b : bytes) {
-            if (is.read() != (0xFF & b)) {
-                return false;
-            }
-        }
-        return true;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamInputResource.java b/src/main/java/htsjdk/samtools/SamInputResource.java
deleted file mode 100644
index f25d97b..0000000
--- a/src/main/java/htsjdk/samtools/SamInputResource.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekablePathStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import htsjdk.samtools.sra.SRAAccession;
-import htsjdk.samtools.util.Lazy;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.FileSystemNotFoundException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-/**
- * Describes a SAM-like resource, including its data (where the records are), and optionally an index.
- * <p/>
- * A data or index source may originate from a {@link java.io.File}, {@link java.io.InputStream}, {@link URL}, or
- * {@link htsjdk.samtools.seekablestream.SeekableStream}; look for the appropriate overload for
- * {@code htsjdk.samtools.SamInputResource#of()}.
- *
- * @author mccowan
- */
-public class SamInputResource {
-    private final InputResource source;
-    private InputResource index;
-
-    SamInputResource(final InputResource data) {
-        this(data, null);
-    }
-
-    SamInputResource(final InputResource source, final InputResource index) {
-        if (source == null) throw new NullPointerException("source");
-        this.source = source;
-        this.index = index;
-    }
-
-    /** The resource that is the SAM data (e.g., records) */
-    InputResource data() {
-        return source;
-    }
-
-    /**
-     * The resource that is the SAM index
-     *
-     * @return null, if no index is defined for this resource
-     */
-    InputResource indexMaybe() {
-        return index;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("data=%s;index=%s", source, index);
-    }
-
-    /** Creates a {@link SamInputResource} reading from the provided resource, with no index. */
-    public static SamInputResource of(final File file) { return new SamInputResource(new FileInputResource(file)); }
-
-    /** Creates a {@link SamInputResource} reading from the provided resource, with no index. */
-    public static SamInputResource of(final Path path) { return new SamInputResource(new PathInputResource(path)); }
-
-    /** Creates a {@link SamInputResource} reading from the provided resource, with no index. */
-    public static SamInputResource of(final InputStream inputStream) { return new SamInputResource(new InputStreamInputResource(inputStream)); }
-
-    /** Creates a {@link SamInputResource} reading from the provided resource, with no index. */
-    public static SamInputResource of(final URL url) { return new SamInputResource(new UrlInputResource(url)); }
-
-    /** Creates a {@link SamInputResource} reading from the provided resource, with no index. */
-    public static SamInputResource of(final SeekableStream seekableStream) { return new SamInputResource(new SeekableStreamInputResource(seekableStream)); }
-
-    public static SamInputResource of(final SRAAccession acc) { return new SamInputResource(new SRAInputResource(acc)); }
-
-    /** Creates a {@link SamInputResource} from a string specifying *either* a url or a file path */
-    public static SamInputResource of(final String string) { 
-      try {
-        URL url = new URL(string);    // this will throw if its not a url
-        return of(url); 
-      } catch (MalformedURLException e) {
-       // ignore
-      }
-      return of(new File(string));
-    }
-    
-    /** Updates the index to point at the provided resource, then returns itself. */
-    public SamInputResource index(final File file) {
-        this.index = new FileInputResource(file);
-        return this;
-    }
-
-    /** Updates the index to point at the provided resource, then returns itself. */
-    public SamInputResource index(final Path path) {
-        this.index = new PathInputResource(path);
-        return this;
-    }
-
-    /** Updates the index to point at the provided resource, then returns itself. */
-    public SamInputResource index(final InputStream inputStream) {
-        this.index = new InputStreamInputResource(inputStream);
-        return this;
-    }
-
-    /** Updates the index to point at the provided resource, then returns itself. */
-    public SamInputResource index(final URL url) {
-        this.index = new UrlInputResource(url);
-        return this;
-    }
-
-    /** Updates the index to point at the provided resource, then returns itself. */
-    public SamInputResource index(final SeekableStream seekableStream) {
-        this.index = new SeekableStreamInputResource(seekableStream);
-        return this;
-    }
-
-}
-
-/**
- * Describes an arbitrary input source, which is something that can be accessed as either a
- * {@link htsjdk.samtools.seekablestream.SeekableStream} or {@link java.io.InputStream}.  A concrete implementation of this class exists for
- * each of {@link InputResource.Type}.
- */
-abstract class InputResource {
-    protected InputResource(final Type type) {this.type = type;}
-
-    enum Type {
-        FILE, PATH, URL, SEEKABLE_STREAM, INPUT_STREAM, SRA_ACCESSION
-    }
-
-    private final Type type;
-
-    final Type type() {
-        return type;
-    }
-
-    /** Returns null if this resource cannot be represented as a {@link File}. */
-    abstract File asFile();
-
-    /** Returns null if this resource cannot be represented as a {@link Path}. */
-    abstract Path asPath();
-
-    /** Returns null if this resource cannot be represented as a {@link URL}. */
-    abstract URL asUrl();
-
-    /** Returns null if this resource cannot be represented as a {@link htsjdk.samtools.seekablestream.SeekableStream}. */
-    abstract SeekableStream asUnbufferedSeekableStream();
-
-    /** All resource types support {@link java.io.InputStream} generation. */
-    abstract InputStream asUnbufferedInputStream();
-
-    /** SRA archive resource */
-    abstract SRAAccession asSRAAccession();
-
-    @Override
-    public String toString() {
-        final String childToString;
-        switch (type()) {
-            case FILE:
-                childToString = asFile().toString();
-                break;
-            case PATH:
-                childToString = asPath().toString();
-                break;
-            case INPUT_STREAM:
-                childToString = asUnbufferedInputStream().toString();
-                break;
-            case SEEKABLE_STREAM:
-                childToString = asUnbufferedSeekableStream().toString();
-                break;
-            case URL:
-                childToString = asUrl().toString();
-                break;
-            case SRA_ACCESSION:
-                childToString = asSRAAccession().toString();
-                break;
-            default:
-                throw new IllegalStateException();
-        }
-        return String.format("%s:%s", type(), childToString);
-    }
-}
-
-class FileInputResource extends InputResource {
-
-    final File fileResource;
-    final Lazy<SeekableStream> lazySeekableStream = new Lazy<SeekableStream>(new Lazy.LazyInitializer<SeekableStream>() {
-        @Override
-        public SeekableStream make() {
-            try {
-                return new SeekableFileStream(fileResource);
-            } catch (final FileNotFoundException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-    });
-
-
-    FileInputResource(final File fileResource) {
-        super(Type.FILE);
-        this.fileResource = fileResource;
-    }
-
-    @Override
-    public File asFile() {
-        return fileResource;
-    }
-
-    @Override
-    public Path asPath() {
-        return fileResource.toPath();
-    }
-
-    @Override
-    public URL asUrl() {
-        try {
-            return asPath().toUri().toURL();
-        } catch (MalformedURLException e) {
-            return null;
-        }
-    }
-
-    @Override
-    public SeekableStream asUnbufferedSeekableStream() {
-        return lazySeekableStream.get();
-    }
-
-    @Override
-    public InputStream asUnbufferedInputStream() {
-        return asUnbufferedSeekableStream();
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return null;
-    }
-}
-
-class PathInputResource extends InputResource {
-
-    final Path pathResource;
-    final Lazy<SeekableStream> lazySeekableStream = new Lazy<SeekableStream>(new Lazy.LazyInitializer<SeekableStream>() {
-        @Override
-        public SeekableStream make() {
-            try {
-                return new SeekablePathStream(pathResource);
-            } catch (final IOException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-    });
-
-
-    PathInputResource(final Path pathResource) {
-        super(Type.PATH);
-        this.pathResource = pathResource;
-    }
-
-    @Override
-    public File asFile() {
-        try {
-            return asPath().toFile();
-        } catch (UnsupportedOperationException e) {
-            return null;
-        }
-    }
-
-    @Override
-    public Path asPath() {
-        return pathResource;
-    }
-
-    @Override
-    public URL asUrl() {
-        try {
-            return asPath().toUri().toURL();
-        } catch (MalformedURLException e) {
-            return null;
-        }
-    }
-
-    @Override
-    public SeekableStream asUnbufferedSeekableStream() {
-        return lazySeekableStream.get();
-    }
-
-    @Override
-    public InputStream asUnbufferedInputStream() {
-        return asUnbufferedSeekableStream();
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return null;
-    }
-}
-
-class UrlInputResource extends InputResource {
-
-    final URL urlResource;
-    final Lazy<SeekableStream> lazySeekableStream = new Lazy<SeekableStream>(new Lazy.LazyInitializer<SeekableStream>() {
-        @Override
-        public SeekableStream make() {
-            try { return SeekableStreamFactory.getInstance().getStreamFor(urlResource); }
-            catch (final IOException ioe) { throw new RuntimeIOException(ioe); }
-        }
-    });
-
-    UrlInputResource(final URL urlResource) {
-        super(Type.URL);
-        this.urlResource = urlResource;
-    }
-
-    @Override
-    public File asFile() {
-        return null;
-    }
-
-    @Override
-    public Path asPath() {
-        try {
-            return Paths.get(urlResource.toURI());
-        } catch (URISyntaxException | IllegalArgumentException |
-            FileSystemNotFoundException | SecurityException e) {
-            return null;
-        }
-    }
-
-    @Override
-    public URL asUrl() {
-        return urlResource;
-    }
-
-    @Override
-    public SeekableStream asUnbufferedSeekableStream() {
-        return lazySeekableStream.get();
-    }
-
-    @Override
-    public InputStream asUnbufferedInputStream() {
-        return asUnbufferedSeekableStream();
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return null;
-    }
-}
-
-class SeekableStreamInputResource extends InputResource {
-
-    final SeekableStream seekableStreamResource;
-
-    SeekableStreamInputResource(final SeekableStream seekableStreamResource) {
-        super(Type.SEEKABLE_STREAM);
-        this.seekableStreamResource = seekableStreamResource;
-    }
-
-    @Override
-    File asFile() {
-        return null;
-    }
-
-    @Override
-    Path asPath() {
-        return null;
-    }
-
-    @Override
-    URL asUrl() {
-        return null;
-    }
-
-    @Override
-    SeekableStream asUnbufferedSeekableStream() {
-        return seekableStreamResource;
-    }
-
-    @Override
-    InputStream asUnbufferedInputStream() {
-        return asUnbufferedSeekableStream();
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return null;
-    }
-}
-
-class InputStreamInputResource extends InputResource {
-
-    final InputStream inputStreamResource;
-
-    InputStreamInputResource(final InputStream inputStreamResource) {
-        super(Type.INPUT_STREAM);
-        this.inputStreamResource = inputStreamResource;
-    }
-
-    @Override
-    File asFile() {
-        return null;
-    }
-
-    @Override
-    Path asPath() {
-        return null;
-    }
-
-    @Override
-    URL asUrl() {
-        return null;
-    }
-
-    @Override
-    SeekableStream asUnbufferedSeekableStream() {
-        return null;
-    }
-
-    @Override
-    InputStream asUnbufferedInputStream() {
-        return inputStreamResource;
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return null;
-    }
-}
-
-class SRAInputResource extends InputResource {
-
-    final SRAAccession accession;
-
-    SRAInputResource(final SRAAccession accession) {
-        super(Type.SRA_ACCESSION);
-        this.accession = accession;
-    }
-
-    @Override
-    File asFile() {
-        return null;
-    }
-
-    @Override
-    Path asPath() {
-        return null;
-    }
-
-    @Override
-    URL asUrl() {
-        return null;
-    }
-
-    @Override
-    SeekableStream asUnbufferedSeekableStream() {
-        return null;
-    }
-
-    @Override
-    InputStream asUnbufferedInputStream() {
-        return null;
-    }
-
-    @Override
-    public SRAAccession asSRAAccession() {
-        return accession;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamPairUtil.java b/src/main/java/htsjdk/samtools/SamPairUtil.java
deleted file mode 100644
index ee1707b..0000000
--- a/src/main/java/htsjdk/samtools/SamPairUtil.java
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.PeekableIterator;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-/**
- * Utility methods for pairs of SAMRecords
- */
-public class SamPairUtil {
-
-    /**
-     * The possible orientations of paired reads.
-     *
-     * F = mapped to forward strand
-     * R = mapped to reverse strand
-     *
-     * FR means the read that's mapped to the forward strand comes before the
-     * read mapped to the reverse strand when their 5'-end coordinates are
-     * compared.
-     */
-    public static enum PairOrientation
-    {
-        FR,     // ( 5' --F-->       <--R-- 5'  )  - aka. innie
-        RF,     // (   <--R-- 5'   5' --F-->    )  - aka. outie
-        TANDEM // ( 5' --F-->   5' --F-->  or  (  <--R-- 5'   <--R-- 5'  )
-
-    }
-
-
-    /**
-     * Computes the pair orientation of the given SAMRecord.
-     * @param r
-     * @return PairOrientation of the given SAMRecord.
-     * @throws IllegalArgumentException If the record is not a paired read, or
-     * one or both reads are unmapped.
-     */
-    public static PairOrientation getPairOrientation(final SAMRecord r)
-    {
-        final boolean readIsOnReverseStrand = r.getReadNegativeStrandFlag();
-
-        if(r.getReadUnmappedFlag() || !r.getReadPairedFlag() || r.getMateUnmappedFlag()) {
-            throw new IllegalArgumentException("Invalid SAMRecord: " + r.getReadName() + ". This method only works for SAMRecords " +
-                    "that are paired reads with both reads aligned.");
-        }
-
-        if(readIsOnReverseStrand == r.getMateNegativeStrandFlag() )  {
-            return PairOrientation.TANDEM;
-        }
-
-        final long positiveStrandFivePrimePos = ( readIsOnReverseStrand
-                ?  r.getMateAlignmentStart()  //mate's 5' position  ( x---> )
-                :  r.getAlignmentStart() );   //read's 5' position  ( x---> )
-
-        final long negativeStrandFivePrimePos = ( readIsOnReverseStrand
-                ?  r.getAlignmentEnd()                                   //read's 5' position  ( <---x )
-                :  r.getAlignmentStart() + r.getInferredInsertSize() );  //mate's 5' position  ( <---x )
-
-        return ( positiveStrandFivePrimePos < negativeStrandFivePrimePos
-                ? PairOrientation.FR
-                : PairOrientation.RF );
-    }
-
-
-
-    // TODO: KT and TF say this is more complicated than what I have here
-    public static boolean isProperPair(final SAMRecord firstEnd, final SAMRecord secondEnd,
-                                       final List<PairOrientation> expectedOrientations) {
-        // are both records mapped?
-        if (firstEnd.getReadUnmappedFlag() || secondEnd.getReadUnmappedFlag()) {
-            return false;
-        }
-        if (firstEnd.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
-            return false;
-        }
-        // AND are they both mapped to the same chromosome
-
-        if (!firstEnd.getReferenceName().equals(secondEnd.getReferenceName())) {
-            return false;
-        }
-
-        // AND is the pair orientation in the set of expected orientations
-        final PairOrientation actual = getPairOrientation(firstEnd);
-        return expectedOrientations.contains(actual);
-    }
-
-    public static void assertMate(final SAMRecord firstOfPair, final SAMRecord secondOfPair) {
-        // Validate paired reads arrive as first of pair, then second of pair
-
-        if (firstOfPair == null) {
-            throw new SAMException(
-                    "First record does not exist - cannot perform mate assertion!");
-        } else if (secondOfPair == null) {
-            throw new SAMException(
-                    firstOfPair.toString() + " is missing its mate");
-        } else if (!firstOfPair.getReadPairedFlag()) {
-            throw new SAMException(
-                    "First record is not marked as paired: " + firstOfPair.toString());
-        } else if (!secondOfPair.getReadPairedFlag()) {
-            throw new SAMException(
-                    "Second record is not marked as paired: " + secondOfPair.toString());
-        } else if (!firstOfPair.getFirstOfPairFlag()) {
-            throw new SAMException(
-                    "First record is not marked as first of pair: " + firstOfPair.toString());
-        } else if (!secondOfPair.getSecondOfPairFlag()) {
-            throw new SAMException(
-                    "Second record is not marked as second of pair: " + secondOfPair.toString());
-        } else if (!firstOfPair.getReadName().equals(secondOfPair.getReadName())) {
-            throw new SAMException(
-                    "First [" + firstOfPair.getReadName() + "] and Second [" +
-                            secondOfPair.getReadName() + "] readnames do not match!");
-        }
-    }
-
-    /**
-     * Obtain the secondOfPair mate belonging to the firstOfPair SAMRecord
-     * (assumed to be in the next element of the specified samRecordIterator)
-     * @param samRecordIterator the iterator assumed to contain the secondOfPair SAMRecord in the
-     * next element in the iteration
-     * @param firstOfPair the firstOfPair SAMRecord
-     * @return the secondOfPair SAMRecord
-     * @throws SAMException when the secondOfPair mate cannot be obtained due to assertion failures
-     */
-    public static SAMRecord obtainAssertedMate(final Iterator<SAMRecord> samRecordIterator,
-                                               final SAMRecord firstOfPair) {
-        if (samRecordIterator.hasNext()) {
-            final SAMRecord secondOfPair = samRecordIterator.next();
-            assertMate(firstOfPair, secondOfPair);
-            return secondOfPair;
-        } else {
-            throw new SAMException(
-                    "Second record does not exist: " + firstOfPair.getReadName());
-        }
-    }
-
-    /**
-     * Compute SAMRecord insert size
-     * @param firstEnd
-     * @param secondEnd
-     * @return note that when storing insert size on the secondEnd, the return value must be negated.
-     */
-    public static int computeInsertSize(final SAMRecord firstEnd, final SAMRecord secondEnd) {
-        if (firstEnd.getReadUnmappedFlag() || secondEnd.getReadUnmappedFlag()) {
-            return 0;
-        }
-        if (!firstEnd.getReferenceName().equals(secondEnd.getReferenceName())) {
-            return 0;
-        }
-
-        final int firstEnd5PrimePosition = firstEnd.getReadNegativeStrandFlag()? firstEnd.getAlignmentEnd(): firstEnd.getAlignmentStart();
-        final int secondEnd5PrimePosition = secondEnd.getReadNegativeStrandFlag()? secondEnd.getAlignmentEnd(): secondEnd.getAlignmentStart();
-
-        final int adjustment = (secondEnd5PrimePosition >= firstEnd5PrimePosition) ? +1 : -1;
-        return secondEnd5PrimePosition - firstEnd5PrimePosition + adjustment;
-    }
-
-    /**
-     * Write the mate info for two SAMRecords.  This will always clear/remove any mate cigar tag that is present.
-     * @param rec1 the first SAM record
-     * @param rec2 the second SAM record
-     */
-    public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2) {
-        setMateInfo(rec1, rec2, false);
-    }
-
-    /**
-     * Write the mate info for two SAMRecords
-     * @param rec1 the first SAM record. Must have a non-null SAMFileHeader.
-     * @param rec2 the second SAM record. Must have a non-null SAMFileHeader.
-     * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-     */
-    public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2, final boolean setMateCigar) {
-        // If neither read is unmapped just set their mate info
-        if (!rec1.getReadUnmappedFlag() && !rec2.getReadUnmappedFlag()) {
-            rec1.setMateReferenceIndex(rec2.getReferenceIndex());
-            rec1.setMateAlignmentStart(rec2.getAlignmentStart());
-            rec1.setMateNegativeStrandFlag(rec2.getReadNegativeStrandFlag());
-            rec1.setMateUnmappedFlag(false);
-            rec1.setAttribute(SAMTag.MQ.name(), rec2.getMappingQuality());
-
-            rec2.setMateReferenceIndex(rec1.getReferenceIndex());
-            rec2.setMateAlignmentStart(rec1.getAlignmentStart());
-            rec2.setMateNegativeStrandFlag(rec1.getReadNegativeStrandFlag());
-            rec2.setMateUnmappedFlag(false);
-            rec2.setAttribute(SAMTag.MQ.name(), rec1.getMappingQuality());
-
-            if (setMateCigar) {
-                rec1.setAttribute(SAMTag.MC.name(), rec2.getCigarString());
-                rec2.setAttribute(SAMTag.MC.name(), rec1.getCigarString());
-            }
-            else {
-                rec1.setAttribute(SAMTag.MC.name(), null);
-                rec2.setAttribute(SAMTag.MC.name(), null);
-            }
-        }
-        // Else if they're both unmapped set that straight
-        else if (rec1.getReadUnmappedFlag() && rec2.getReadUnmappedFlag()) {
-            rec1.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            rec1.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            rec1.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            rec1.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            rec1.setMateNegativeStrandFlag(rec2.getReadNegativeStrandFlag());
-            rec1.setMateUnmappedFlag(true);
-            rec1.setAttribute(SAMTag.MQ.name(), null);
-            rec1.setAttribute(SAMTag.MC.name(), null);
-            rec1.setInferredInsertSize(0);
-
-            rec2.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            rec2.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            rec2.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            rec2.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            rec2.setMateNegativeStrandFlag(rec1.getReadNegativeStrandFlag());
-            rec2.setMateUnmappedFlag(true);
-            rec2.setAttribute(SAMTag.MQ.name(), null);
-            rec2.setAttribute(SAMTag.MC.name(), null);
-            rec2.setInferredInsertSize(0);
-        }
-        // And if only one is mapped copy it's coordinate information to the mate
-        else {
-            final SAMRecord mapped   = rec1.getReadUnmappedFlag() ? rec2 : rec1;
-            final SAMRecord unmapped = rec1.getReadUnmappedFlag() ? rec1 : rec2;
-            unmapped.setReferenceIndex(mapped.getReferenceIndex());
-            unmapped.setAlignmentStart(mapped.getAlignmentStart());
-
-            mapped.setMateReferenceIndex(unmapped.getReferenceIndex());
-            mapped.setMateAlignmentStart(unmapped.getAlignmentStart());
-            mapped.setMateNegativeStrandFlag(unmapped.getReadNegativeStrandFlag());
-            mapped.setMateUnmappedFlag(true);
-            mapped.setAttribute(SAMTag.MQ.name(), null);
-            mapped.setAttribute(SAMTag.MC.name(), null);
-            mapped.setInferredInsertSize(0);
-
-            unmapped.setMateReferenceIndex(mapped.getReferenceIndex());
-            unmapped.setMateAlignmentStart(mapped.getAlignmentStart());
-            unmapped.setMateNegativeStrandFlag(mapped.getReadNegativeStrandFlag());
-            unmapped.setMateUnmappedFlag(false);
-            unmapped.setAttribute(SAMTag.MQ.name(), mapped.getMappingQuality());
-            // For the unmapped read, set mateCigar to the mate's Cigar, since the mate must be mapped
-            if (setMateCigar) unmapped.setAttribute(SAMTag.MC.name(), mapped.getCigarString());
-            else unmapped.setAttribute(SAMTag.MC.name(), null);
-            unmapped.setInferredInsertSize(0);
-        }
-
-        final int insertSize = SamPairUtil.computeInsertSize(rec1, rec2);
-        rec1.setInferredInsertSize(insertSize);
-        rec2.setInferredInsertSize(-insertSize);
-    }
-
-    /**
-     * Write the mate info for two SAMRecords
-     * @param rec1 the first SAM record
-     * @param rec2 the second SAM record
-     * @param header the SAM file header
-     * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-     * @deprecated use {@link #setMateInfo(SAMRecord, SAMRecord, boolean)} instead
-     */
-    @Deprecated
-    public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2, final SAMFileHeader header, final boolean setMateCigar) {
-        setMateInfo(rec1, rec2, setMateCigar);
-    }
-
-    /**
-     * Write the mate info for two SAMRecords.  This will always clear/remove any mate cigar tag that is present.
-     * @param rec1 the first SAM record
-     * @param rec2 the second SAM record
-     * @param header the SAM file header
-     * @deprecated use {@link #setMateInfo(SAMRecord, SAMRecord)} instead
-     */
-    @Deprecated
-    public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2, final SAMFileHeader header) {
-        setMateInfo(rec1, rec2);
-    }
-
-    /**
-     * Sets mate pair information appropriately on a supplemental SAMRecord (e.g. from a split alignment)
-     * using the primary alignment of the read's mate.
-     * @param supplemental a supplemental alignment for the mate pair of the primary supplied
-     * @param matePrimary the primary alignment of the the mate pair of the supplemental
-     * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-     */
-    public static void setMateInformationOnSupplementalAlignment( final SAMRecord supplemental,
-                                                                  final SAMRecord matePrimary,
-                                                                  final boolean setMateCigar) {
-        supplemental.setMateReferenceIndex(matePrimary.getReferenceIndex());
-        supplemental.setMateAlignmentStart(matePrimary.getAlignmentStart());
-        supplemental.setMateNegativeStrandFlag(matePrimary.getReadNegativeStrandFlag());
-        supplemental.setMateUnmappedFlag(matePrimary.getReadUnmappedFlag());
-        supplemental.setInferredInsertSize(-matePrimary.getInferredInsertSize());
-        if (setMateCigar && !matePrimary.getReadUnmappedFlag()) {
-            supplemental.setAttribute(SAMTag.MC.name(), matePrimary.getCigarString());
-        }
-        else {
-            supplemental.setAttribute(SAMTag.MC.name(), null);
-        }
-    }
-
-    /**
-     * Sets mate pair information appropriately on a supplemental SAMRecord (e.g. from a split alignment)
-     * using the primary alignment of the read's mate.
-     * @param supplemental a supplemental alignment for the mate pair of the primary supplied
-     * @param matePrimary the primary alignment of the the mate pair of the supplemental
-     */
-    public static void setMateInformationOnSupplementalAlignment( final SAMRecord supplemental,
-                                                                  final SAMRecord matePrimary) {
-        setMateInformationOnSupplementalAlignment(supplemental, matePrimary, false);
-    }
-
-    /**
-     * This method will clear any mate cigar already present.
-     * @deprecated use {@link #setProperPairAndMateInfo(SAMRecord, SAMRecord, List)} instead
-     */
-    @Deprecated
-    public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
-                                                final SAMFileHeader header,
-                                                final List<PairOrientation> expectedOrientations) {
-        setProperPairAndMateInfo(rec1, rec2, expectedOrientations);
-    }
-
-    /**
-     * @param addMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-     * @deprecated use {@link #setProperPairAndMateInfo(SAMRecord, SAMRecord, List, boolean)}
-     */
-    @Deprecated
-    public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
-                                                final SAMFileHeader header,
-                                                final List<PairOrientation> expectedOrientations,
-                                                final boolean addMateCigar) {
-        setProperPairAndMateInfo(rec1, rec2, expectedOrientations, addMateCigar);
-    }
-
-    /**
-     * This method will clear any mate cigar already present.
-     */
-    public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
-                                                final List<PairOrientation> expectedOrientations) {
-        setProperPairAndMateInfo(rec1, rec2, expectedOrientations, false);
-    }
-
-    /**
-     * @param addMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-     */
-    public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
-                                                final List<PairOrientation> expectedOrientations,
-                                                final boolean addMateCigar) {
-        setMateInfo(rec1, rec2, addMateCigar);
-        setProperPairFlags(rec1, rec2, expectedOrientations);
-    }
-
-    public static void setProperPairFlags(final SAMRecord rec1, final SAMRecord rec2, final List<PairOrientation> expectedOrientations) {
-        final boolean properPair =  (!rec1.getReadUnmappedFlag() && !rec2.getReadUnmappedFlag())
-                ? isProperPair(rec1, rec2, expectedOrientations)
-                : false;
-        rec1.setProperPairFlag(properPair);
-        rec2.setProperPairFlag(properPair);
-    }
-
-    /**
-     * A class to iterate through SAMRecords and set mate information on the given records, and optionally
-     * set the mate cigar tag (true by default).
-     */
-    public static class SetMateInfoIterator extends PeekableIterator<SAMRecord> {
-
-        private final Queue<SAMRecord> records = new LinkedList<SAMRecord>();
-        private final boolean setMateCigar;
-        private final boolean ignoreMissingMates;
-        private long numMateCigarsAdded = 0;
-
-        /**
-         * By default, the mate cigar tag is set
-         * @param iterator the iterator to wrap
-         */
-        public SetMateInfoIterator(final Iterator<SAMRecord> iterator) {
-            this(iterator, true);
-        }
-
-        /**
-         * @param iterator the iterator to wrap
-         * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-         */
-        public SetMateInfoIterator(final Iterator<SAMRecord> iterator, final boolean setMateCigar) {
-            this(iterator, setMateCigar, false);
-        }
-
-        /**
-         * @param iterator the iterator to wrap
-         * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
-         * @param ignoreMissingMates set this to true if we are to ignore missing mates, otherwise an exception will be thrown when a missing mate is encountered
-         */
-        public SetMateInfoIterator(final Iterator<SAMRecord> iterator, final boolean setMateCigar, final boolean ignoreMissingMates) {
-            super(iterator);
-            this.setMateCigar = setMateCigar;
-            this.ignoreMissingMates = ignoreMissingMates;
-        }
-
-        /**
-         * @return the current number of mate cigars added.  This could be more than the number of records returned.
-         */
-        public long getNumMateCigarsAdded() { return this.numMateCigarsAdded; }
-
-        public boolean hasNext() {
-            return (!records.isEmpty() || super.hasNext());
-        }
-
-        /**
-         * Populate this.records if necessary.
-         */
-        private void advance() {
-
-            // No need to advance if we have records remaining
-            if (!records.isEmpty()) return;
-
-            /**
-             * Get all records with the same name, and then identify the canonical first and second end to which we
-             * want to set mate info.
-             */
-            SAMRecord firstPrimaryRecord = null, secondPrimaryRecord = null;
-            final SAMRecord first = super.peek(); // peek so we consider it in the following loop
-            boolean containsSupplementalRecord = false;
-            while (super.hasNext() && super.peek().getReadName().equals(first.getReadName())) {
-                final SAMRecord record = super.next();
-                // We must make sure that we find only one "primary" alignments for each end
-                if (record.getReadPairedFlag()) {
-                    if (!record.isSecondaryOrSupplementary()) {
-                        if (record.getFirstOfPairFlag()) {
-                            if (null != firstPrimaryRecord) {
-                                throw new SAMException("Found two records that are paired, not supplementary, and first of the pair");
-                            }
-                            firstPrimaryRecord = record;
-                        } else if (record.getSecondOfPairFlag()) {
-                            if (null != secondPrimaryRecord) {
-                                throw new SAMException("Found two records that are paired, not supplementary, and second of the pair");
-                            }
-                            secondPrimaryRecord = record;
-                        }
-                    }
-                    if (record.getSupplementaryAlignmentFlag()) containsSupplementalRecord = true;
-                }
-                records.add(record);
-            }
-            // TODO: should we check that we do not have a mix of paired and fragment reads?
-
-
-            // we must find both records to update the mate info
-            if (null != firstPrimaryRecord && null != secondPrimaryRecord) {
-                // Update mate info
-                SamPairUtil.setMateInfo(firstPrimaryRecord, secondPrimaryRecord, this.setMateCigar);
-                if (this.setMateCigar) this.numMateCigarsAdded += 2;
-
-                // Set mate information on supplemental records
-                if (containsSupplementalRecord) {
-                    for (final SAMRecord record : records) {
-                        if (record.getReadPairedFlag() && record.getSupplementaryAlignmentFlag()) {
-                            if (record.getFirstOfPairFlag()) {
-                                SamPairUtil.setMateInformationOnSupplementalAlignment(record, secondPrimaryRecord, this.setMateCigar);
-                            } else {
-                                SamPairUtil.setMateInformationOnSupplementalAlignment(record, firstPrimaryRecord, this.setMateCigar);
-                            }
-                            this.numMateCigarsAdded++;
-                        }
-                    }
-                }
-            } else if (!this.ignoreMissingMates) {
-                if (null != firstPrimaryRecord && firstPrimaryRecord.getReadPairedFlag()) {
-                    throw new SAMException("Missing second read of pair: " + firstPrimaryRecord.getReadName());
-                } else if (null != secondPrimaryRecord && secondPrimaryRecord.getReadPairedFlag()) {
-                    throw new SAMException("Missing first read of pair: " + secondPrimaryRecord.getReadName());
-                }
-            }
-        }
-
-        public SAMRecord next() {
-            advance();
-            if (records.isEmpty()) throw new IllegalStateException("Unexpectedly found an empty record list");
-            return this.records.poll();
-        }
-
-        public SAMRecord peek() {
-            advance();
-            if (records.isEmpty()) throw new IllegalStateException("Unexpectedly found an empty record list");
-            return this.records.peek();
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamReader.java b/src/main/java/htsjdk/samtools/SamReader.java
deleted file mode 100644
index 2f1b2f9..0000000
--- a/src/main/java/htsjdk/samtools/SamReader.java
+++ /dev/null
@@ -1,621 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-import java.io.Closeable;
-import java.text.MessageFormat;
-
-/**
- * Describes functionality for objects that produce {@link SAMRecord}s and associated information.
- *
- * Currently, only deprecated readers implement this directly; actual readers implement this
- * via {@link ReaderImplementation} and {@link PrimitiveSamReader}, which {@link SamReaderFactory}
- * converts into full readers by using {@link PrimitiveSamReaderToSamReaderAdapter}.
- *
- * @author mccowan
- */
-public interface SamReader extends Iterable<SAMRecord>, Closeable {
-
-    /** Describes a type of SAM file. */
-    public abstract class Type {
-        /** A string representation of this type. */
-        abstract String name();
-
-        /** The recommended file extension for SAMs of this type, without a period. */
-        public abstract String fileExtension();
-
-        /** The recommended file extension for SAM indexes of this type, without a period, or null if this type is not associated with indexes. */
-        abstract String indexExtension();
-
-        static class TypeImpl extends Type {
-            final String name, fileExtension, indexExtension;
-
-            TypeImpl(final String name, final String fileExtension, final String indexExtension) {
-                this.name = name;
-                this.fileExtension = fileExtension;
-                this.indexExtension = indexExtension;
-            }
-
-            @Override
-            String name() {
-                return name;
-            }
-
-            @Override
-            public String fileExtension() {
-                return fileExtension;
-            }
-
-            @Override
-            String indexExtension() {
-                return indexExtension;
-            }
-
-            @Override
-            public String toString() {
-                return String.format("TypeImpl{name='%s', fileExtension='%s', indexExtension='%s'}", name, fileExtension, indexExtension);
-            }
-        }
-
-        public static Type SRA_TYPE = new TypeImpl("SRA", "sra", null);
-        public static Type CRAM_TYPE = new TypeImpl("CRAM", "cram", "crai");
-        public static Type BAM_TYPE = new TypeImpl("BAM", "bam", "bai");
-        public static Type SAM_TYPE = new TypeImpl("SAM", "sam", null);
-    }
-
-    /**
-     * Facet for index-related operations.
-     */
-    public interface Indexing {
-        /**
-         * Retrieves the index for the given file type.  Ensure that the index is of the specified type.
-         *
-         * @return An index of the given type.
-         */
-        public BAMIndex getIndex();
-
-        /**
-         * Returns true if the supported index is browseable, meaning the bins in it can be traversed
-         * and chunk data inspected and retrieved.
-         *
-         * @return True if the index supports the BrowseableBAMIndex interface.  False otherwise.
-         */
-        public boolean hasBrowseableIndex();
-
-        /**
-         * Gets an index tagged with the BrowseableBAMIndex interface.  Throws an exception if no such
-         * index is available.
-         *
-         * @return An index with a browseable interface, if possible.
-         * @throws SAMException if no such index is available.
-         */
-        public BrowseableBAMIndex getBrowseableIndex();
-
-        /**
-         * Iterate through the given chunks in the file.
-         *
-         * @param chunks List of chunks for which to retrieve data.
-         * @return An iterator over the given chunks.
-         */
-        public SAMRecordIterator iterator(final SAMFileSpan chunks);
-
-        /**
-         * Gets a pointer spanning all reads in the BAM file.
-         *
-         * @return Unbounded pointer to the first record, in chunk format.
-         */
-        public SAMFileSpan getFilePointerSpanningReads();
-
-    }
-
-    public SAMFileHeader getFileHeader();
-
-    /**
-     * @return the {@link htsjdk.samtools.SamReader.Type} of this {@link htsjdk.samtools.SamReader}
-     */
-    public Type type();
-
-    /**
-     * @return a human readable description of the resource backing this sam reader
-     */
-    public String getResourceDescription();
-
-    /**
-     * @return true if ths is a BAM file, and has an index
-     */
-    public boolean hasIndex();
-
-    /**
-     * Exposes the {@link SamReader.Indexing} facet of this {@link SamReader}.
-     *
-     * @throws java.lang.UnsupportedOperationException If {@link #hasIndex()} returns false.
-     */
-    public Indexing indexing();
-
-    /**
-     * Iterate through file in order.  For a SamReader constructed from an InputStream, and for any SAM file,
-     * a 2nd iteration starts where the 1st one left off.  For a BAM constructed from a SeekableStream or File, each new iteration
-     * starts at the first record.
-     * <p/>
-     * Only a single open iterator on a SAM or BAM file may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     */
-    public SAMRecordIterator iterator();
-
-    /**
-     * Iterate over records that match the given interval.  Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.  You can use a second SamReader to iterate
-     * in parallel over the same underlying file.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param sequence  Reference sequence of interest.
-     * @param start     1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
-     * @param end       1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
-     * @param contained If true, each SAMRecord returned will have its alignment completely contained in the
-     *                  interval of interest.  If false, the alignment of the returned SAMRecords need only overlap the interval of interest.
-     * @return Iterator over the SAMRecords matching the interval.
-     */
-    public SAMRecordIterator query(final String sequence, final int start, final int end, final boolean contained);
-
-    /**
-     * Iterate over records that overlap the given interval.  Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param sequence Reference sequence of interest.
-     * @param start    1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
-     * @param end      1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
-     * @return Iterator over the SAMRecords overlapping the interval.
-     */
-    public SAMRecordIterator queryOverlapping(final String sequence, final int start, final int end);
-
-    /**
-     * Iterate over records that are contained in the given interval.  Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param sequence Reference sequence of interest.
-     * @param start    1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
-     * @param end      1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
-     * @return Iterator over the SAMRecords contained in the interval.
-     */
-    public SAMRecordIterator queryContained(final String sequence, final int start, final int end);
-
-    /**
-     * Iterate over records that match one of the given intervals.  This may be more efficient than querying
-     * each interval separately, because multiple reads of the same SAMRecords is avoided.
-     * <p/>
-     * Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.  You can use a second SamReader to iterate
-     * in parallel over the same underlying file.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match an interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param intervals Intervals to be queried.  The intervals must be optimized, i.e. in order, with overlapping
-     *                  and abutting intervals merged.  This can be done with {@link htsjdk.samtools.QueryInterval#optimizeIntervals}
-     * @param contained If true, each SAMRecord returned is will have its alignment completely contained in one of the
-     *                  intervals of interest.  If false, the alignment of the returned SAMRecords need only overlap one of
-     *                  the intervals of interest.
-     * @return Iterator over the SAMRecords matching the interval.
-     */
-    public SAMRecordIterator query(final QueryInterval[] intervals, final boolean contained);
-
-    /**
-     * Iterate over records that overlap any of the given intervals.  This may be more efficient than querying
-     * each interval separately, because multiple reads of the same SAMRecords is avoided.
-     * <p/>
-     * Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param intervals Intervals to be queried.  The intervals must be optimized, i.e. in order, with overlapping
-     *                  and abutting intervals merged.  This can be done with {@link htsjdk.samtools.QueryInterval#optimizeIntervals}
-     */
-    public SAMRecordIterator queryOverlapping(final QueryInterval[] intervals);
-
-    /**
-     * Iterate over records that are contained in the given interval.  This may be more efficient than querying
-     * each interval separately, because multiple reads of the same SAMRecords is avoided.
-     * <p/>
-     * Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * is in the query region.
-     *
-     * @param intervals Intervals to be queried.  The intervals must be optimized, i.e. in order, with overlapping
-     *                  and abutting intervals merged.  This can be done with {@link htsjdk.samtools.QueryInterval#optimizeIntervals}
-     * @return Iterator over the SAMRecords contained in any of the intervals.
-     */
-    public SAMRecordIterator queryContained(final QueryInterval[] intervals);
-
-
-    public SAMRecordIterator queryUnmapped();
-
-    /**
-     * Iterate over records that map to the given sequence and start at the given position.  Only valid to call this if hasIndex() == true.
-     * <p/>
-     * Only a single open iterator on a given SamReader may be extant at any one time.  If you want to start
-     * a second iteration, the first one must be closed first.
-     * <p/>
-     * Note that indexed lookup is not perfectly efficient in terms of disk I/O.  I.e. some SAMRecords may be read
-     * and then discarded because they do not match the interval of interest.
-     * <p/>
-     * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
-     * matches the arguments.
-     *
-     * @param sequence Reference sequence of interest.
-     * @param start    Alignment start of interest.
-     * @return Iterator over the SAMRecords with the given alignment start.
-     */
-    public SAMRecordIterator queryAlignmentStart(final String sequence, final int start);
-
-    /**
-     * Fetch the mate for the given read.  Only valid to call this if hasIndex() == true.
-     * This will work whether the mate has a coordinate or not, so long as the given read has correct
-     * mate information.  This method iterates over the SAM file, so there may not be an unclosed
-     * iterator on the SAM file when this method is called.
-     * <p/>
-     * Note that it is not possible to call queryMate when iterating over the SamReader, because queryMate
-     * requires its own iteration, and there cannot be two simultaneous iterations on the same SamReader.  The
-     * work-around is to open a second SamReader on the same input file, and call queryMate on the second
-     * reader.
-     *
-     * @param rec Record for which mate is sought.  Must be a paired read.
-     * @return rec's mate, or null if it cannot be found.
-     */
-    public SAMRecord queryMate(final SAMRecord rec);
-
-    /**
-     * The minimal subset of functionality needed for a {@link SAMRecord} data source.
-     * {@link SamReader} itself is somewhat large and bulky, but the core functionality can be captured in
-     * relatively few methods, which are included here. For documentation, see the corresponding methods
-     * in {@link SamReader}.
-     *
-     * See also: {@link PrimitiveSamReaderToSamReaderAdapter}, {@link ReaderImplementation}
-     *
-     */
-    public interface PrimitiveSamReader {
-        Type type();
-
-        boolean hasIndex();
-
-        BAMIndex getIndex();
-
-        SAMFileHeader getFileHeader();
-
-        CloseableIterator<SAMRecord> getIterator();
-
-        CloseableIterator<SAMRecord> getIterator(SAMFileSpan fileSpan);
-
-        SAMFileSpan getFilePointerSpanningReads();
-
-        CloseableIterator<SAMRecord> query(QueryInterval[] intervals, boolean contained);
-
-        CloseableIterator<SAMRecord> queryAlignmentStart(String sequence, int start);
-
-        CloseableIterator<SAMRecord> queryUnmapped();
-
-        void close();
-
-        ValidationStringency getValidationStringency();
-    }
-
-    /**
-     * Decorator for a {@link SamReader.PrimitiveSamReader} that expands its functionality into a {@link SamReader},
-     * given the backing {@link SamInputResource}.
-     *
-     * Wraps the {@link Indexing} interface as well, which was originally separate from {@link SamReader} but in practice
-     * the two are always implemented by the same class.
-     *
-     */
-    class PrimitiveSamReaderToSamReaderAdapter implements SamReader, Indexing {
-        final PrimitiveSamReader p;
-        final SamInputResource resource;
-
-        public PrimitiveSamReaderToSamReaderAdapter(final PrimitiveSamReader p, final SamInputResource resource) {
-            this.p = p;
-            this.resource = resource;
-        }
-
-        PrimitiveSamReader underlyingReader() {
-            return p;
-        }
-
-        @Override
-        public SAMRecordIterator queryOverlapping(final String sequence, final int start, final int end) {
-            return query(sequence, start, end, false);
-        }
-
-        @Override
-        public SAMRecordIterator queryOverlapping(final QueryInterval[] intervals) {
-            return query(intervals, false);
-        }
-
-        @Override
-        public SAMRecordIterator queryContained(final String sequence, final int start, final int end) {
-            return query(sequence, start, end, true);
-        }
-
-        @Override
-        public SAMRecordIterator queryContained(final QueryInterval[] intervals) {
-            return query(intervals, true);
-        }
-
-        /**
-         * Wraps the boilerplate code for querying a record's mate, which is common across many implementations.
-         *
-         * @param rec Record for which mate is sought.  Must be a paired read.
-         * @return
-         */
-        @Override
-        public SAMRecord queryMate(final SAMRecord rec) {
-            if (!rec.getReadPairedFlag()) {
-                throw new IllegalArgumentException("queryMate called for unpaired read.");
-            }
-            if (rec.getFirstOfPairFlag() == rec.getSecondOfPairFlag()) {
-                throw new IllegalArgumentException("SAMRecord must be either first and second of pair, but not both.");
-            }
-            final boolean firstOfPair = rec.getFirstOfPairFlag();
-            final CloseableIterator<SAMRecord> it;
-            if (rec.getMateReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                it = queryUnmapped();
-            } else {
-                it = queryAlignmentStart(rec.getMateReferenceName(), rec.getMateAlignmentStart());
-            }
-            try {
-                SAMRecord mateRec = null;
-                while (it.hasNext()) {
-                    final SAMRecord next = it.next();
-                    if (!next.getReadPairedFlag()) {
-                        if (rec.getReadName().equals(next.getReadName())) {
-                            throw new SAMFormatException("Paired and unpaired reads with same name: " + rec.getReadName());
-                        }
-                        continue;
-                    }
-                    if (firstOfPair) {
-                        if (next.getFirstOfPairFlag()) continue;
-                    } else {
-                        if (next.getSecondOfPairFlag()) continue;
-                    }
-                    if (rec.getReadName().equals(next.getReadName())) {
-                        if (mateRec != null) {
-                            throw new SAMFormatException("Multiple SAMRecord with read name " + rec.getReadName() +
-                                    " for " + (firstOfPair ? "second" : "first") + " end.");
-                        }
-                        mateRec = next;
-                    }
-                }
-                return mateRec;
-            } finally {
-                it.close();
-            }
-        }
-
-        @Override
-        public boolean hasBrowseableIndex() {
-            return hasIndex() && getIndex() instanceof BrowseableBAMIndex;
-        }
-
-        @Override
-        public BrowseableBAMIndex getBrowseableIndex() {
-            final BAMIndex index = getIndex();
-            if (!(index instanceof BrowseableBAMIndex))
-                throw new SAMException("Cannot return index: index created by BAM is not browseable.");
-            return BrowseableBAMIndex.class.cast(index);
-        }
-
-        @Override
-        public SAMRecordIterator iterator() {
-            return new AssertingIterator(p.getIterator());
-        }
-
-        @Override
-        public SAMRecordIterator iterator(final SAMFileSpan chunks) {
-            return new AssertingIterator(p.getIterator(chunks));
-        }
-
-        @Override
-        public void close() {
-            p.close();
-        }
-
-        @Override
-        public SAMFileSpan getFilePointerSpanningReads() {
-            return p.getFilePointerSpanningReads();
-        }
-
-        @Override
-        public SAMFileHeader getFileHeader() {
-            return p.getFileHeader();
-        }
-
-        @Override
-        public Type type() {
-            return p.type();
-        }
-
-        @Override
-        public String getResourceDescription() {
-            return this.resource.toString();
-        }
-
-        @Override
-        public boolean hasIndex() {
-            return p.hasIndex();
-        }
-
-        @Override
-        public Indexing indexing() {
-            return this;
-        }
-
-        @Override
-        public BAMIndex getIndex() {
-            return p.getIndex();
-        }
-
-        @Override
-        public SAMRecordIterator query(final QueryInterval[] intervals, final boolean contained) {
-            return AssertingIterator.of(p.query(intervals, contained));
-        }
-
-        @Override
-        public SAMRecordIterator query(final String sequence, final int start, final int end, final boolean contained) {
-            return query(new QueryInterval[]{new QueryInterval(getFileHeader().getSequenceIndex(sequence), start, end)}, contained);
-        }
-
-        @Override
-        public SAMRecordIterator queryUnmapped() {
-            return AssertingIterator.of(p.queryUnmapped());
-        }
-
-        @Override
-        public SAMRecordIterator queryAlignmentStart(final String sequence, final int start) {
-            return AssertingIterator.of(p.queryAlignmentStart(sequence, start));
-        }
-
-    }
-
-    static class AssertingIterator implements SAMRecordIterator {
-
-        static AssertingIterator of(final CloseableIterator<SAMRecord> iterator) {
-            return new AssertingIterator(iterator);
-        }
-
-        private final CloseableIterator<SAMRecord> wrappedIterator;
-        private SAMRecord previous = null;
-        private SAMRecordComparator comparator = null;
-
-        public AssertingIterator(final CloseableIterator<SAMRecord> iterator) {
-            wrappedIterator = iterator;
-        }
-
-        public SAMRecordIterator assertSorted(final SAMFileHeader.SortOrder sortOrder) {
-
-            if (sortOrder == null || sortOrder == SAMFileHeader.SortOrder.unsorted) {
-                comparator = null;
-                return this;
-            }
-
-            comparator = sortOrder.getComparatorInstance();
-            return this;
-        }
-
-        public SAMRecord next() {
-            final SAMRecord result = wrappedIterator.next();
-            if (comparator != null) {
-                if (previous != null) {
-                    if (comparator.fileOrderCompare(previous, result) > 0) {
-                        throw new IllegalStateException(MessageFormat.format(
-                                "Records {0} ({1}:{2}) should come after {3} ({4}:{5}) when sorting with {6}",
-                                previous.getReadName(),
-                                previous.getReferenceName(),
-                                previous.getAlignmentStart(),
-                                result.getReadName(),
-                                result.getReferenceName(),
-                                result.getAlignmentStart(),
-                                comparator.getClass().getName())
-                        );
-                    }
-                }
-                previous = result;
-            }
-            return result;
-        }
-
-        public void close() { wrappedIterator.close(); }
-
-        public boolean hasNext() { return wrappedIterator.hasNext(); }
-
-        public void remove() { wrappedIterator.remove(); }
-    }
-
-    /**
-     * Internal interface for SAM/BAM/CRAM file reader implementations,
-     * as distinct from non-file-based readers.
-     *
-     * Implemented as an abstract class to enforce better access control.
-     *
-     * TODO -- Many of these methods only apply for a subset of implementations,
-     * TODO -- and either no-op or throw an exception for the others.
-     * TODO -- We should consider refactoring things to avoid this;
-     * TODO -- perhaps we can get away with not having this class at all.
-     */
-    abstract class ReaderImplementation implements PrimitiveSamReader {
-        abstract void enableFileSource(final SamReader reader, final boolean enabled);
-
-        abstract void enableIndexCaching(final boolean enabled);
-
-        abstract void enableIndexMemoryMapping(final boolean enabled);
-
-        abstract void enableCrcChecking(final boolean enabled);
-
-        abstract void setSAMRecordFactory(final SAMRecordFactory factory);
-
-        abstract void setValidationStringency(final ValidationStringency validationStringency);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamReaderFactory.java b/src/main/java/htsjdk/samtools/SamReaderFactory.java
deleted file mode 100644
index 8769f48..0000000
--- a/src/main/java/htsjdk/samtools/SamReaderFactory.java
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.sra.SRAAccession;
-import htsjdk.samtools.util.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.zip.GZIPInputStream;
-
-/**
- * <p>Describes the functionality for producing {@link SamReader}, and offers a
- * handful of static generators.</p>
- * <pre>
- *     SamReaderFactory.makeDefault().open(new File("/my/bam.bam");
- * </pre>
- * <p>Example: Configure a factory</p>
- * <pre>
- *      final {@link SamReaderFactory} factory =
- *          SamReaderFactory.makeDefault()
- *              .enable({@link Option#INCLUDE_SOURCE_IN_RECORDS}, {@link Option#VALIDATE_CRC_CHECKSUMS})
- *              .validationStringency({@link ValidationStringency#SILENT});
- *
- * </pre>
- * <p>Example: Open two bam files from different sources, using different options</p>
- * <pre>
- *     final {@link SamReaderFactory} factory =
- *          SamReaderFactory.makeDefault()
- *              .enable({@link Option#INCLUDE_SOURCE_IN_RECORDS}, {@link Option#VALIDATE_CRC_CHECKSUMS})
- *              .validationStringency({@link ValidationStringency#SILENT});
- *
- *     // File-based bam
- *     final {@link SamReader} fileReader = factory.open(new File("/my/bam.bam"));
- *
- *     // HTTP-hosted BAM with index from an arbitrary stream
- *     final SeekableStream myBamIndexStream = ...
- *     final {@link SamInputResource} resource =
- *          {@link SamInputResource}.of(new URL("http://example.com/data.bam")).index(myBamIndexStream);
- *     final {@link SamReader} complicatedReader = factory.open(resource);
- * </pre>
- *
- * @author mccowan
- */
-public abstract class SamReaderFactory {
-
-    private static ValidationStringency defaultValidationStringency = ValidationStringency.DEFAULT_STRINGENCY;
-    
-    abstract public SamReader open(final File file);
-
-    public SamReader open(final Path path) {
-        final SamInputResource r = SamInputResource.of(path);
-        final Path indexMaybe = SamFiles.findIndex(path);
-        if (indexMaybe != null) r.index(indexMaybe);
-        return open(r);
-    }
-
-    abstract public SamReader open(final SamInputResource resource);
-
-    abstract public ValidationStringency validationStringency();
-
-    abstract public CRAMReferenceSource referenceSource();
-
-    /** Set this factory's {@link htsjdk.samtools.SAMRecordFactory} to the provided one, then returns itself. */
-    abstract public SamReaderFactory samRecordFactory(final SAMRecordFactory samRecordFactory);
-
-    /** Enables the provided {@link Option}s, then returns itself. */
-    abstract public SamReaderFactory enable(final Option... options);
-
-    /** Disables the provided {@link Option}s, then returns itself. */
-    abstract public SamReaderFactory disable(final Option... options);
-
-    /** Sets a specific Option to a boolean value. * */
-    abstract public SamReaderFactory setOption(final Option option, boolean value);
-
-    /** Sets the specified reference sequence * */
-    abstract public SamReaderFactory referenceSequence(File referenceSequence);
-
-    /** Sets the specified reference sequence * */
-    abstract public SamReaderFactory referenceSource(CRAMReferenceSource referenceSequence);
-
-    /** Utility method to open the file get the header and close the file */
-    abstract public SAMFileHeader getFileHeader(File samFile);
-
-    /** Reapplies any changed options to the reader * */
-    abstract public void reapplyOptions(SamReader reader);
-
-    /** Set this factory's {@link ValidationStringency} to the provided one, then returns itself. */
-    abstract public SamReaderFactory validationStringency(final ValidationStringency validationStringency);
-
-    /** Set whether readers created by this factory will use asynchronous IO.
-     * If this methods is not called, this flag will default to the value of {@link Defaults#USE_ASYNC_IO_FOR_SAMTOOLS}.
-     * Note that this option may not be applicable to all readers returned from this factory.
-     * Returns the factory itself. */
-    abstract public SamReaderFactory setUseAsyncIo(final boolean asynchronousIO);
-
-    private static SamReaderFactoryImpl DEFAULT =
-            new SamReaderFactoryImpl(Option.DEFAULTS, defaultValidationStringency, DefaultSAMRecordFactory.getInstance());
-
-    public static void setDefaultValidationStringency(final ValidationStringency defaultValidationStringency) {
-        SamReaderFactory.defaultValidationStringency = defaultValidationStringency;
-        // The default may have changed, so reset the default SamReader
-        DEFAULT = new SamReaderFactoryImpl(Option.DEFAULTS, defaultValidationStringency, DefaultSAMRecordFactory.getInstance());
-    }
-
-    /** Creates a copy of the default {@link SamReaderFactory}. */
-    public static SamReaderFactory makeDefault() {
-        return SamReaderFactoryImpl.copyOf(DEFAULT);
-    }
-
-    /**
-     * Creates an "empty" factory with no enabled {@link Option}s, {@link ValidationStringency#DEFAULT_STRINGENCY}, and
-     * {@link htsjdk.samtools.DefaultSAMRecordFactory}.
-     */
-    public static SamReaderFactory make() {
-        return new SamReaderFactoryImpl(EnumSet.noneOf(Option.class), ValidationStringency.DEFAULT_STRINGENCY, DefaultSAMRecordFactory.getInstance());
-    }
-
-    private static class SamReaderFactoryImpl extends SamReaderFactory {
-        private final static Log LOG = Log.getInstance(SamReaderFactory.class);
-        private final EnumSet<Option> enabledOptions;
-        private ValidationStringency validationStringency;
-        private boolean asynchronousIO = Defaults.USE_ASYNC_IO_READ_FOR_SAMTOOLS;
-        private SAMRecordFactory samRecordFactory;
-        private CustomReaderFactory customReaderFactory;
-        private CRAMReferenceSource referenceSource;
-
-        private SamReaderFactoryImpl(final EnumSet<Option> enabledOptions, final ValidationStringency validationStringency, final SAMRecordFactory samRecordFactory) {
-            this.enabledOptions = EnumSet.copyOf(enabledOptions);
-            this.samRecordFactory = samRecordFactory;
-            this.validationStringency = validationStringency;
-            this.customReaderFactory = CustomReaderFactory.getInstance();
-        }
-   
-        @Override
-        public SamReader open(final File file) {
-            final SamInputResource r = SamInputResource.of(file);
-            final File indexMaybe = SamFiles.findIndex(file);
-            if (indexMaybe != null) r.index(indexMaybe);
-            return open(r);
-        }
-
-
-        @Override
-        public ValidationStringency validationStringency() {
-            return validationStringency;
-        }
-
-        @Override
-        public CRAMReferenceSource referenceSource() {
-            return referenceSource;
-        }
-
-        @Override
-        public SamReaderFactory samRecordFactory(final SAMRecordFactory samRecordFactory) {
-            this.samRecordFactory = samRecordFactory;
-            return this;
-        }
-
-        @Override
-        public SamReaderFactory enable(final Option... options) {
-            Collections.addAll(this.enabledOptions, options);
-            return this;
-        }
-
-        @Override
-        public SamReaderFactory disable(final Option... options) {
-            for (final Option option : options) {
-                this.enabledOptions.remove(option);
-            }
-            return this;
-        }
-
-        @Override
-        public SamReaderFactory setOption(final Option option, final boolean value) {
-            if (value) {
-                return enable(option);
-            } else {
-                return disable(option);
-            }
-        }
-
-        @Override
-        public SamReaderFactory referenceSequence(final File referenceSequence) {
-            this.referenceSource = new ReferenceSource(referenceSequence);
-            return this;
-        }
-
-        @Override
-        public SamReaderFactory referenceSource(final CRAMReferenceSource referenceSource) {
-            this.referenceSource = referenceSource;
-            return this;
-        }
-
-        @Override
-        public SAMFileHeader getFileHeader(final File samFile) {
-            final SamReader reader = open(samFile);
-            final SAMFileHeader header = reader.getFileHeader();
-            CloserUtil.close(reader);
-            return header;
-        }
-
-        @Override
-        public void reapplyOptions(final SamReader reader) {
-            for (final Option option : enabledOptions) {
-                option.applyTo((SamReader.PrimitiveSamReaderToSamReaderAdapter) reader);
-            }
-        }
-
-        @Override
-        public SamReaderFactory validationStringency(final ValidationStringency validationStringency) {
-            this.validationStringency = validationStringency;
-            return this;
-        }
-
-        @Override
-        public SamReaderFactory setUseAsyncIo(final boolean asynchronousIO){
-            this.asynchronousIO = asynchronousIO;
-            return this;
-        }
-
-        @Override
-        public SamReader open(final SamInputResource resource) {
-            final SamReader.PrimitiveSamReader primitiveSamReader;
-            try {
-                final InputResource data = resource.data();
-                final InputResource indexMaybe = resource.indexMaybe();
-                final boolean indexDefined = indexMaybe != null;
-
-                final InputResource.Type type = data.type();
-                if (type == InputResource.Type.URL) {
-                  SamReader reader = customReaderFactory.maybeOpen(
-                      data.asUrl());
-                  if (reader != null) {
-                    return reader;
-                  }
-                }
-                if (type == InputResource.Type.SEEKABLE_STREAM || type == InputResource.Type.URL) {
-                    if (SamStreams.sourceLikeBam(data.asUnbufferedSeekableStream())) {
-                        final SeekableStream bufferedIndexStream;
-                        if (indexDefined && indexMaybe.asUnbufferedSeekableStream() != null) {
-                            bufferedIndexStream = IOUtil.maybeBufferedSeekableStream(indexMaybe.asUnbufferedSeekableStream());
-                        } else {
-                            // TODO: Throw an exception here?  An index _may_ have been provided, but we're ignoring it
-                            bufferedIndexStream = null;
-                        }
-                        primitiveSamReader = new BAMFileReader(
-                                IOUtil.maybeBufferedSeekableStream(data.asUnbufferedSeekableStream()),
-                                bufferedIndexStream,
-                                false,
-                                asynchronousIO,
-                                validationStringency,
-                                this.samRecordFactory
-                        );
-                    } else if (SamStreams.sourceLikeCram(data.asUnbufferedSeekableStream())) {
-                        if (referenceSource == null) {
-                            referenceSource = ReferenceSource.getDefaultCRAMReferenceSource();
-                        }
-                        SeekableStream bufferedIndexStream = indexDefined ?
-                                IOUtil.maybeBufferedSeekableStream(indexMaybe.asUnbufferedSeekableStream()) :
-                                null;
-                        primitiveSamReader = new CRAMFileReader(
-                                IOUtil.maybeBufferedSeekableStream(data.asUnbufferedSeekableStream()),
-                                bufferedIndexStream, referenceSource, validationStringency);
-                    } else {
-                        // assume its a SAM file/no index
-                        LOG.warn("Unable to detect file format from input URL or stream, assuming SAM format.");
-                        primitiveSamReader = new SAMTextReader(
-                                IOUtil.toBufferedStream(data.asUnbufferedInputStream()),
-                                validationStringency, this.samRecordFactory);
-                    }
-                } else if (type == InputResource.Type.SRA_ACCESSION) {
-                    primitiveSamReader = new SRAFileReader(data.asSRAAccession());
-                } else {
-                    InputStream bufferedStream =
-                            IOUtil.maybeBufferInputStream(
-                                    data.asUnbufferedInputStream(),
-                                    Math.max(Defaults.BUFFER_SIZE, BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE)
-                            );
-                    File sourceFile = data.asFile();
-                    // calling asFile is safe even if indexMaybe is a Google Cloud Storage bucket
-                    // (in that case we just get null)
-                    final File indexFile = indexMaybe == null ? null : indexMaybe.asFile();
-                    if (SamStreams.isBAMFile(bufferedStream)) {
-                        if (sourceFile == null || !sourceFile.isFile()) {
-                            // check whether we can seek
-                            final SeekableStream indexSeekable = indexMaybe == null ? null : indexMaybe.asUnbufferedSeekableStream();
-                            // do not close bufferedStream, it's the same stream we're getting here.
-                            SeekableStream sourceSeekable = data.asUnbufferedSeekableStream();
-                            if (null == sourceSeekable || null == indexSeekable) {
-                                // not seekable.
-                                // it's OK that we consumed a bit of the stream already, this ctor expects it.
-                                primitiveSamReader = new BAMFileReader(bufferedStream, indexFile, false, asynchronousIO, validationStringency, this.samRecordFactory);
-                            } else {
-                                // seekable.
-                                // need to return to the beginning because it's the same stream we used earlier
-                                // and read a bit from, and that form of the ctor expects the stream to start at 0.
-                                sourceSeekable.seek(0);
-                                primitiveSamReader = new BAMFileReader(
-                                        sourceSeekable, indexSeekable, false, asynchronousIO, validationStringency, this.samRecordFactory);
-                            }
-                        } else {
-                            bufferedStream.close();
-                            primitiveSamReader = new BAMFileReader(sourceFile, indexFile, false, asynchronousIO, validationStringency, this.samRecordFactory);
-                        }
-                    } else if (BlockCompressedInputStream.isValidFile(bufferedStream)) {
-                        primitiveSamReader = new SAMTextReader(new BlockCompressedInputStream(bufferedStream), validationStringency, this.samRecordFactory);
-                    } else if (SamStreams.isGzippedSAMFile(bufferedStream)) {
-                        primitiveSamReader = new SAMTextReader(new GZIPInputStream(bufferedStream), validationStringency, this.samRecordFactory);
-                    } else if (SamStreams.isCRAMFile(bufferedStream)) {
-                        if (referenceSource == null) {
-                            referenceSource = ReferenceSource.getDefaultCRAMReferenceSource();
-                        }
-                        if (sourceFile == null || !sourceFile.isFile()) {
-                            primitiveSamReader = new CRAMFileReader(bufferedStream, indexFile, referenceSource, validationStringency);
-                        } else {
-                            bufferedStream.close();
-                            primitiveSamReader = new CRAMFileReader(sourceFile, indexFile, referenceSource, validationStringency);
-                        }
-                    } else if (sourceFile != null && isSra(sourceFile)) {
-                        if (bufferedStream != null) {
-                            bufferedStream.close();
-                        }
-                        primitiveSamReader = new SRAFileReader(new SRAAccession(sourceFile.getPath()));
-                    } else {
-                        if (indexDefined) {
-                            bufferedStream.close();
-                            throw new RuntimeException("Cannot use index file with textual SAM file");
-                        }
-                        primitiveSamReader = new SAMTextReader(bufferedStream, sourceFile, validationStringency, this.samRecordFactory);
-                    }
-                }
-
-                // Apply the options defined by this factory to this reader
-                final SamReader.PrimitiveSamReaderToSamReaderAdapter reader =
-                        new SamReader.PrimitiveSamReaderToSamReaderAdapter(primitiveSamReader, resource);
-
-                for (final Option option : enabledOptions) {
-                    option.applyTo(reader);
-                }
-
-                return reader;
-            } catch (final IOException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-
-        /** Attempts to detect whether the file is an SRA accessioned file. If SRA support is not available, returns false. */
-        private boolean isSra(final File sourceFile) {
-            try {
-                // if SRA fails to initialize (the most common reason is a failure to find/load native libraries),
-                // it will throw a subclass of java.lang.Error and here we only catch subclasses of java.lang.Exception
-                //
-                // Note: SRA initialization errors should not be ignored, but rather shown to user
-                return SRAAccession.isValid(sourceFile.getPath());
-            } catch (final Exception e) {
-                return false;
-            }
-        }
-
-        public static SamReaderFactory copyOf(final SamReaderFactoryImpl target) {
-            return new SamReaderFactoryImpl(target.enabledOptions, target.validationStringency, target.samRecordFactory);
-        }
-    }
-
-    /** A collection of binary {@link SamReaderFactory} options. */
-    public enum Option {
-        /**
-         * The factory's {@link SamReader}s will produce populated (non-null) values when calling {@link SAMRecord#getFileSource()}.
-         * <p/>
-         * This option increases memory footprint slightly per {@link htsjdk.samtools.SAMRecord}.
-         */
-        INCLUDE_SOURCE_IN_RECORDS {
-            @Override
-            void applyTo(final BAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableFileSource(reader, true);
-            }
-
-            @Override
-            void applyTo(final SAMTextReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableFileSource(reader, true);
-            }
-
-            @Override
-            void applyTo(final CRAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableFileSource(reader, true);
-            }
-
-            @Override
-            void applyTo(final SRAFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableFileSource(reader, true);
-            }
-        },
-
-        /**
-         * The factory's {@link SamReader}s' {@link SamReader#indexing()}'s calls to {@link SamReader.Indexing#getIndex()} will produce
-         * {@link BAMIndex}es that do some caching in memory instead of reading the index from the disk for each query operation.
-         *
-         * @see SamReader#indexing()
-         * @see htsjdk.samtools.SamReader.Indexing#getIndex()
-         */
-        CACHE_FILE_BASED_INDEXES {
-            @Override
-            void applyTo(final BAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexCaching(true);
-            }
-
-            @Override
-            void applyTo(final SAMTextReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final CRAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexCaching(true);
-            }
-
-            @Override
-            void applyTo(final SRAFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexCaching(true);
-            }
-        },
-
-        /**
-         * The factory's {@link SamReader}s' will not use memory mapping for accessing index files (which is used by default).  This is
-         * slower but more scalable when accessing large numbers of BAM files sequentially.
-         *
-         * @see SamReader#indexing()
-         * @see htsjdk.samtools.SamReader.Indexing#getIndex()
-         */
-        DONT_MEMORY_MAP_INDEX {
-            @Override
-            void applyTo(final BAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexMemoryMapping(false);
-            }
-
-            @Override
-            void applyTo(final SAMTextReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final CRAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexMemoryMapping(false);
-            }
-
-            @Override
-            void applyTo(final SRAFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableIndexMemoryMapping(false);
-            }
-        },
-
-        /**
-         * Eagerly decode {@link htsjdk.samtools.SamReader}'s {@link htsjdk.samtools.SAMRecord}s, which can reduce memory footprint if many
-         * fields are being read per record, or if fields are going to be updated.
-         */
-        EAGERLY_DECODE {
-            @Override
-            void applyTo(final BAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.setEagerDecode(true);
-            }
-
-            @Override
-            void applyTo(final SAMTextReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final CRAMFileReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final SRAFileReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-        },
-
-        /**
-         * For {@link htsjdk.samtools.SamReader}s backed by block-compressed streams, enable CRC validation of those streams.  This is an
-         * expensive operation, but serves to ensure validity of the stream.
-         */
-        VALIDATE_CRC_CHECKSUMS {
-            @Override
-            void applyTo(final BAMFileReader underlyingReader, final SamReader reader) {
-                underlyingReader.enableCrcChecking(true);
-            }
-
-            @Override
-            void applyTo(final SAMTextReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final CRAMFileReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-            @Override
-            void applyTo(final SRAFileReader underlyingReader, final SamReader reader) {
-                logDebugIgnoringOption(reader, this);
-            }
-
-        };
-
-        public static EnumSet<Option> DEFAULTS = EnumSet.noneOf(Option.class);
-
-        /** Applies this option to the provided reader, if applicable. */
-        void applyTo(final SamReader.PrimitiveSamReaderToSamReaderAdapter reader) {
-            final SamReader.PrimitiveSamReader underlyingReader = reader.underlyingReader();
-            if (underlyingReader instanceof BAMFileReader) {
-                applyTo((BAMFileReader) underlyingReader, reader);
-            } else if (underlyingReader instanceof SAMTextReader) {
-                applyTo((SAMTextReader) underlyingReader, reader);
-            } else if (underlyingReader instanceof CRAMFileReader) {
-                applyTo((CRAMFileReader) underlyingReader, reader);
-            } else if (underlyingReader instanceof SRAFileReader) {
-                applyTo((SRAFileReader) underlyingReader, reader);
-            } else {
-                throw new IllegalArgumentException(String.format("Unrecognized reader type: %s.", underlyingReader.getClass()));
-            }
-
-        }
-
-        private static void logDebugIgnoringOption(final SamReader r, final Option option) {
-            LOG.debug(String.format("Ignoring %s option; does not apply to %s readers.", option, r.getClass().getSimpleName()));
-        }
-
-        private final static Log LOG = Log.getInstance(Option.class);
-
-        abstract void applyTo(final BAMFileReader underlyingReader, final SamReader reader);
-
-        abstract void applyTo(final SAMTextReader underlyingReader, final SamReader reader);
-
-        abstract void applyTo(final CRAMFileReader underlyingReader, final SamReader reader);
-
-        abstract void applyTo(final SRAFileReader underlyingReader, final SamReader reader);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/SamStreams.java b/src/main/java/htsjdk/samtools/SamStreams.java
deleted file mode 100644
index 114d23b..0000000
--- a/src/main/java/htsjdk/samtools/SamStreams.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.BlockCompressedStreamConstants;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Utilities related to processing of {@link java.io.InputStream}s encoding SAM data
- * 
- * @author mccowan
- */
-public class SamStreams {
-    private static int readBytes(final InputStream stream, final byte[] buffer, final int offset, final int length)
-            throws IOException {
-        int bytesRead = 0;
-        while (bytesRead < length) {
-            final int count = stream.read(buffer, offset + bytesRead, length - bytesRead);
-            if (count <= 0) {
-                break;
-            }
-            bytesRead += count;
-        }
-        return bytesRead;
-    }
-
-    public static boolean isCRAMFile(final InputStream stream) throws IOException {
-        stream.mark(4);
-        final int buffSize = CramHeader.MAGIC.length;
-        final byte[] buffer = new byte[buffSize];
-        readBytes(stream, buffer, 0, buffSize);
-        stream.reset();
-
-        return Arrays.equals(buffer, CramHeader.MAGIC);
-    }
-
-    /**
-     * @param stream stream.markSupported() must be true
-     * @return true if this looks like a BAM file.
-     */
-    public static boolean isBAMFile(final InputStream stream)
-            throws IOException {
-        if (!BlockCompressedInputStream.isValidFile(stream)) {
-            return false;
-        }
-        final int buffSize = BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE;
-        stream.mark(buffSize);
-        final byte[] buffer = new byte[buffSize];
-        readBytes(stream, buffer, 0, buffSize);
-        stream.reset();
-        try(final BlockCompressedInputStream bcis = new BlockCompressedInputStream(new ByteArrayInputStream(buffer))){
-            final byte[] magicBuf = new byte[4];
-            final int magicLength = readBytes(bcis, magicBuf, 0, 4);
-            return magicLength == BAMFileConstants.BAM_MAGIC.length && Arrays.equals(BAMFileConstants.BAM_MAGIC, magicBuf);
-        }
-    }
-
-    /**
-     * Checks whether the file is a gzipped sam file.  Returns true if it
-     * is and false otherwise.
-     */
-    public static boolean isGzippedSAMFile(final InputStream stream) {
-        if (!stream.markSupported()) {
-            throw new IllegalArgumentException("Cannot test a stream that doesn't support marking.");
-        }
-        stream.mark(8000);
-
-        try {
-            final GZIPInputStream gunzip = new GZIPInputStream(stream);
-            final int ch = gunzip.read();
-            return true;
-        } catch (final IOException ioe) {
-            return false;
-        } finally {
-            try {
-                stream.reset();
-            } catch (final IOException ioe) {
-                throw new IllegalStateException("Could not reset stream.");
-            }
-        }
-    }
-
-    // Its too expensive to examine the remote file to determine type.
-    // Rely on file extension.
-    public static boolean sourceLikeBam(final SeekableStream strm) {
-        String source = strm.getSource();
-        if (source == null) {
-            // assume any stream with a null source is a BAM file
-            // (https://github.com/samtools/htsjdk/issues/619)
-            return true;
-        }
-
-        //Source will typically be a file path or URL
-        //If it's a URL we require one of the query parameters to be a cram file
-        try {
-            final URL sourceURL = new URL(source);
-            final String urlPath = sourceURL.getPath().toLowerCase();
-            String queryParams = sourceURL.getQuery();
-            if (queryParams != null) {
-                queryParams = queryParams.toLowerCase();
-            }
-            return urlPath.endsWith(".bam") ||
-                    (queryParams != null &&
-                            (queryParams.endsWith(".bam") ||
-                                    queryParams.contains(".bam?") ||
-                                    queryParams.contains(".bam&") ||
-                                    queryParams.contains(".bam%26"))
-                    );
-        }
-        catch (MalformedURLException e) {
-            source = source.toLowerCase();
-            return source.endsWith(".bam") ||
-                    source.contains(".bam?") ||
-                    source.contains(".bam&") ||
-                    source.contains(".bam%26");
-        }
-    }
-
-    // Its too expensive to examine the remote file to determine type.
-    // Rely on file extension.
-    public static boolean sourceLikeCram(final SeekableStream strm) {
-        String source = strm.getSource();
-        if (source == null) {
-            // sourceLikeBam assumes any stream with a null source is a BAM file
-            // (https://github.com/samtools/htsjdk/issues/619); in order to not
-            // propagate more chaos we return false here
-            return false;
-        }
-
-        // Source will typically be a file path or URL
-        // If it's a URL we require one of the query parameters to be a cram file
-        try {
-            final URL sourceURL = new URL(source);
-            final String urlPath = sourceURL.getPath().toLowerCase();
-            String queryParams = sourceURL.getQuery();
-            if (queryParams != null) {
-                queryParams = queryParams.toLowerCase();
-            }
-            return urlPath.endsWith(".cram") ||
-                    (queryParams != null &&
-                            (queryParams.endsWith(".cram") ||
-                             queryParams.contains(".cram?") ||
-                             queryParams.contains(".cram&") ||
-                             queryParams.contains(".cram%26"))
-                    );
-        }
-        catch (MalformedURLException e) {
-            source = source.toLowerCase();
-            return source.endsWith(".cram") ||
-                    source.contains(".cram?") ||
-                    source.contains(".cram&") ||
-                    source.contains(".cram%26");
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/SecondaryOrSupplementarySkippingIterator.java b/src/main/java/htsjdk/samtools/SecondaryOrSupplementarySkippingIterator.java
deleted file mode 100644
index 328e748..0000000
--- a/src/main/java/htsjdk/samtools/SecondaryOrSupplementarySkippingIterator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.PeekIterator;
-
-/**
- * Wrapper around SAMRecord iterator that skips over secondary and supplementary elements.
- * This iterator conflates a filtering iterator and a peekable iterator.  It would be cleaner to
- * handle those concerns separately. This class should be viewed as a replacement for NotPrimarySkippingIterator,
- * in that we did not want to change the functionality of NPSI to no longer match its name
- */
-public class SecondaryOrSupplementarySkippingIterator {
-    private final PeekIterator<SAMRecord> it;
-
-    public SecondaryOrSupplementarySkippingIterator(final CloseableIterator<SAMRecord> underlyingIt) {
-        it = new PeekIterator<SAMRecord>(underlyingIt);
-        skipAnyNotprimary();
-    }
-
-    public boolean hasCurrent() {
-        return it.hasNext();
-    }
-
-    public SAMRecord getCurrent() {
-        assert(hasCurrent());
-        return it.peek();
-    }
-
-    public boolean advance() {
-        it.next();
-        skipAnyNotprimary();
-        return hasCurrent();
-    }
-
-    private void skipAnyNotprimary() {
-        while (it.hasNext() && it.peek().isSecondaryOrSupplementary()) {
-            it.next();
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/StreamInflatingIndexingOutputStream.java b/src/main/java/htsjdk/samtools/StreamInflatingIndexingOutputStream.java
deleted file mode 100644
index 6b653fe..0000000
--- a/src/main/java/htsjdk/samtools/StreamInflatingIndexingOutputStream.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package htsjdk.samtools;
-
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-
-/**
- * OutputStream implementation that writes output to an underlying output stream while also copying the
- * same bytes to a PipedOutputStream that routes the data back into an Indexer to generate a BAMIndex
- * by inflating and decoding the stream and feeding the SAMRecords to a BAMIndexer.
- */
-class StreamInflatingIndexingOutputStream extends OutputStream {
-    private final OutputStream s1;
-    private final PipedOutputStream s2;
-    private final Thread thread;
-
-    public StreamInflatingIndexingOutputStream(final OutputStream s1, final File indexFile) {
-        try {
-            this.s1 = s1;
-            this.s2 = new PipedOutputStream();
-            final PipedInputStream pin = new PipedInputStream(this.s2, Defaults.NON_ZERO_BUFFER_SIZE);
-            this.thread = new Thread(new Indexer(indexFile, pin), "BamIndexingThread");
-            this.thread.start();
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-
-    @Override
-    public final void write(final int b) throws IOException {
-        this.s1.write(b);
-        this.s2.write(b);
-    }
-
-    @Override
-    public final void write(final byte[] b) throws IOException {
-        this.s1.write(b);
-        this.s2.write(b);
-    }
-
-    @Override
-    public final void write(final byte[] b, final int off, final int len) throws IOException {
-        this.s1.write(b, off, len);
-        this.s2.write(b, off, len);
-    }
-
-    @Override
-    public final void flush() throws IOException {
-        this.s1.flush();
-        this.s2.flush();
-    }
-
-    @Override
-    public final void close() throws IOException {
-        this.s1.close();
-        this.s2.close();
-
-        try {
-            this.thread.join();
-        } catch (final InterruptedException ie) {
-            throw new RuntimeException(ie);
-        }
-    }
-}
-
-/**
- * A little class that takes an InputStream from which it reads a BAM file, generates
- * a BAMIndex and then writes the index to the File provided.  All operations are designed
- * to be carried out in a separate thread.
- */
-class Indexer implements Runnable {
-    private final File index;
-    private final InputStream stream;
-
-    /** Constructs an indexer that reads from the stream provided and writes an index to the File provided. */
-    Indexer(final File index, final InputStream stream) {
-        this.index = index;
-        this.stream = stream;
-    }
-
-    /** Runnable implementation that reads the entire stream and writes the index. */
-    @Override
-    public void run() {
-        final SamReader in = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).disable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS)
-                .open(SamInputResource.of(this.stream));
-
-        final BAMIndexer indexer = new BAMIndexer(this.index, in.getFileHeader());
-        for (final SAMRecord rec : in) {
-            indexer.processAlignment(rec);
-        }
-
-        indexer.finish();
-        CloserUtil.close(in);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/TagValueAndUnsignedArrayFlag.java b/src/main/java/htsjdk/samtools/TagValueAndUnsignedArrayFlag.java
deleted file mode 100644
index 084d9c0..0000000
--- a/src/main/java/htsjdk/samtools/TagValueAndUnsignedArrayFlag.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-/**
- * CVO to use as a method return value.
- */
-public class TagValueAndUnsignedArrayFlag {
-    public final Object value;
-    public final boolean isUnsignedArray;
-
-    public TagValueAndUnsignedArrayFlag(Object value, boolean unsignedArray) {
-        this.value = value;
-        isUnsignedArray = unsignedArray;
-    }
-
-    TagValueAndUnsignedArrayFlag(Object value) {
-        this.value = value;
-        this.isUnsignedArray = false;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/TextCigarCodec.java b/src/main/java/htsjdk/samtools/TextCigarCodec.java
deleted file mode 100755
index 6175443..0000000
--- a/src/main/java/htsjdk/samtools/TextCigarCodec.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.StringUtil;
-
-/**
- * Convert between String and Cigar class representations of CIGAR.
- */
-public class TextCigarCodec
-{
-    private static final byte ZERO_BYTE = "0".getBytes()[0];
-    private static final byte NINE_BYTE = "9".getBytes()[0];
-
-    /**
-     * Convert from Cigar class representation to String.
-     * @param cigar in Cigar class format
-     * @return CIGAR in String form ala SAM text file.  "*" means empty CIGAR.
-     */
-    public static String encode(final Cigar cigar) {
-        if (cigar.isEmpty()) {
-            return SAMRecord.NO_ALIGNMENT_CIGAR;
-        }
-        final StringBuilder ret = new StringBuilder();
-        for (final CigarElement cigarElement : cigar.getCigarElements()) {
-            ret.append(cigarElement.getLength());
-            ret.append(cigarElement.getOperator());
-        }
-        return ret.toString();
-    }
-
-    /**
-     * Convert from String CIGAR representation to Cigar class representation.  Does not
-     * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is
-     * valid, and preceded by a decimal length.
-     * @param textCigar CIGAR in String form ala SAM text file.  "*" means empty CIGAR.
-     * @throws RuntimeException if textCigar is invalid at the most basic level.
-     * @return cigar in Cigar class format
-     */
-    public static Cigar decode(final String textCigar) {
-        if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) {
-            return new Cigar();
-        }
-        final Cigar ret = new Cigar();
-        final byte[] cigarBytes = StringUtil.stringToBytes(textCigar);
-        for (int i = 0; i < cigarBytes.length; ++i) {
-            if (!isDigit(cigarBytes[i])) {
-                throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar);
-            }
-            int length = (cigarBytes[i] - ZERO_BYTE);
-            for (++i; isDigit(cigarBytes[i]); ++i) {
-                length = (length * 10) + cigarBytes[i] - ZERO_BYTE;
-            }
-            final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]);
-            ret.add(new CigarElement(length, operator));
-        }
-        return ret;
-    }
-    
-    private static boolean isDigit(final byte c) {
-        return c >= ZERO_BYTE && c <= NINE_BYTE;
-    }
-
-    
-        
-}
-
-/******************************************************************/
-/**************************[END OF TextCigarCodec.java]*************************/
-/******************************************************************/
diff --git a/src/main/java/htsjdk/samtools/TextTagCodec.java b/src/main/java/htsjdk/samtools/TextTagCodec.java
deleted file mode 100644
index 60363e1..0000000
--- a/src/main/java/htsjdk/samtools/TextTagCodec.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.DateParser;
-import htsjdk.samtools.util.Iso8601Date;
-import htsjdk.samtools.util.StringUtil;
-
-import java.lang.reflect.Array;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * Converter between SAM text representation of a tag, and in-memory Object representation.
- * Note that this class is not thread-safe, in that some local variables have been made into instance
- * variables in order to reduce object creation, but it should not ever be the case that the same
- * instance is used in multiple threads.
- */
-public class TextTagCodec {
-    // 3 fields for non-empty strings 2 fields if the string is empty.
-    private static final int NUM_TAG_FIELDS = 3;
-
-    /**
-     * This is really a local variable of decode(), but allocated here to reduce allocations.
-     */
-    private final String[] fields = new String[NUM_TAG_FIELDS];
-
-    /**
-     * Convert in-memory representation of tag to SAM text representation.
-     * @param tagName Two-character tag name.
-     * @param value Tag value as approriate Object subclass.
-     * @return SAM text String representation, i.e. name:type:value
-     */
-    public String encode(final String tagName, Object value) {
-        final StringBuilder sb = new StringBuilder(tagName);
-        sb.append(':');
-        char tagType = BinaryTagCodec.getTagValueType(value);
-        switch (tagType) {
-            case 'c':
-            case 'C':
-            case 's':
-            case 'S':
-            case 'I':
-                tagType = 'i';
-        }
-        if (tagType == 'H') {
-            // H should never happen anymore.
-            value = StringUtil.bytesToHexString((byte[])value);
-        } else if (tagType == 'B') {
-            value = getArrayType(value, false) + "," + encodeArrayValue(value);
-        } else if (tagType == 'i') {
-            final long longVal = ((Number) value).longValue();
-            // as the spec says: [-2^31, 2^32)
-            if (longVal < Integer.MIN_VALUE || longVal > BinaryCodec.MAX_UINT) {
-                throw new IllegalArgumentException("Value for tag " + tagName + " cannot be stored in either a signed or unsigned 32-bit integer: " + longVal);
-            }
-        }
-        sb.append(tagType).append(':').append(value.toString());
-        return sb.toString();
-    }
-
-    private char getArrayType(final Object array, final boolean isUnsigned) {
-        final char type;
-        final Class<?> componentType = array.getClass().getComponentType();
-        if (componentType == Float.TYPE) {
-            if (isUnsigned) throw new IllegalArgumentException("float array cannot be unsigned");
-            return 'f';
-        }
-        else if (componentType == Byte.TYPE)    type = 'c';
-        else if (componentType == Short.TYPE)   type = 's';
-        else if (componentType == Integer.TYPE) type = 'i';
-        else throw new IllegalArgumentException("Unrecognized array type " + componentType);
-        return (isUnsigned? Character.toUpperCase(type): type);
-    }
-
-    private String encodeArrayValue(final Object value) {
-        final StringBuilder ret = new StringBuilder(Array.get(value, 0).toString());
-        final int length = Array.getLength(value);
-        for (int i = 1; i < length; ++i) {
-            ret.append(',');
-            ret.append(Array.get(value, i).toString());
-        }
-        return ret.toString();
-
-    }
-
-    private long[] widenToUnsigned(final Object array) {
-        final Class<?> componentType = array.getClass().getComponentType();
-        final long mask;
-        if (componentType == Byte.TYPE)    mask = 0xffL;
-        else if (componentType == Short.TYPE)   mask = 0xffffL;
-        else if (componentType == Integer.TYPE) mask = 0xffffffffL;
-        else throw new IllegalArgumentException("Unrecognized unsigned array type " + componentType);
-        final long[] ret = new long[Array.getLength(array)];
-        for (int i = 0; i < ret.length; ++i) {
-            ret[i] = Array.getLong(array, i) & mask;
-        }
-        return ret;
-    }
-
-    String encodeUnsignedArray(final String tagName, final Object array) {
-        if (!array.getClass().isArray()) {
-            throw new IllegalArgumentException("Non-array passed to encodeUnsignedArray: " + array.getClass());
-        }
-        final long[] widened = widenToUnsigned(array);
-        return tagName + ":B:" + getArrayType(array, true) + "," + encodeArrayValue(widened);
-    }
-
-    /**
-     * Encode a standard header tag, which should not have a type field.
-     * @param tagName 2-character String.
-     * @param value Not necessarily a String.  Some of these are integers but the type is implied by
-     * the tagName.  Converted to String with toString().
-     * @return Colon-separated text representation suitable for a SAM header, i.e. name:value.
-     */
-    public String encodeUntypedTag(final String tagName, final Object value) {
-        return new StringBuilder(tagName).append(':')
-                .append(value.toString()).toString();
-    }
-
-    /**
-     * Convert typed tag in SAM text format (name:type:value) into tag name and Object value representation.
-     * @param tag SAM text format name:type:value tag.
-     * @return Tag name as 2-character String, and tag value in appropriate class based on tag type.
-     * If value is an unsigned array, then the value is a TagValueAndUnsignedArrayFlag object.
-     */
-    public Map.Entry<String, Object> decode(final String tag) {
-        final int numFields = StringUtil.splitConcatenateExcessTokens(tag, fields, ':');
-        if (numFields != TextTagCodec.NUM_TAG_FIELDS && numFields != TextTagCodec.NUM_TAG_FIELDS - 1) {
-            throw new SAMFormatException("Not enough fields in tag '" + tag + "'");
-        }
-        final String key = fields[0];
-        final String type = fields[1];
-        final String stringVal = numFields == TextTagCodec.NUM_TAG_FIELDS ? fields[2] : "";
-        final Object val = convertStringToObject(type, stringVal);
-        return new Map.Entry<String, Object>() {
-            public String getKey() {
-                return key;
-            }
-
-            public Object getValue() {
-                return val;
-            }
-
-            public Object setValue(final Object o) {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-
-    private Object convertStringToObject(final String type, final String stringVal) {
-        if (type.equals("Z")) {
-            return stringVal;
-        } else if (type.equals("A")) {
-            if (stringVal.length() != 1) {
-                throw new SAMFormatException("Tag of type A should have a single-character value");
-            }
-            return stringVal.charAt(0);
-        } else if (type.equals("i")) {
-            final long lValue;
-            try {
-                lValue = Long.valueOf(stringVal);
-            } catch (NumberFormatException e) {
-                throw new SAMFormatException("Tag of type i should have signed decimal value");
-            }
-
-            if (lValue >= Integer.MIN_VALUE && lValue <= Integer.MAX_VALUE) {
-                return (int) lValue;
-            }
-            else if (SAMUtils.isValidUnsignedIntegerAttribute(lValue)) {
-                return lValue;
-            }
-            else {
-                throw new SAMFormatException("Integer is out of range for both a 32-bit signed and unsigned integer: " + stringVal);
-            }
-        } else if (type.equals("f")) {
-            try {
-                return new Float(stringVal);
-            } catch (NumberFormatException e) {
-                throw new SAMFormatException("Tag of type f should have single-precision floating point value");
-            }
-        } else if (type.equals("H")) {
-            try {
-                return StringUtil.hexStringToBytes(stringVal);
-            } catch (NumberFormatException e) {
-                throw new SAMFormatException("Tag of type H should have valid hex string with even number of digits");
-            }
-        } else if (type.equals("B")) {
-            return covertStringArrayToObject(stringVal);
-        } else {
-            throw new SAMFormatException("Unrecognized tag type: " + type);
-        }
-    }
-
-    private Object covertStringArrayToObject(final String stringVal) {
-        final String[] elementTypeAndValue = new String[2];
-        if (StringUtil.splitConcatenateExcessTokens(stringVal, elementTypeAndValue, ',') != 2) {
-            throw new SAMFormatException("Tag of type B should have an element type followed by comma");
-        }
-        if (elementTypeAndValue[0].length() != 1) {
-            throw new SAMFormatException("Unrecognized element type for array tag value: " + elementTypeAndValue[0]);
-        }
-        final char elementType = elementTypeAndValue[0].charAt(0);
-        final String[] stringValues = elementTypeAndValue[1].split(",");
-        if (stringValues.length == 0) throw new SAMFormatException("Tag of type B should have at least one element");
-        if (elementType == 'f') {
-            final float[] ret = new float[stringValues.length];
-            for (int i = 0; i < stringValues.length; ++i) {
-                try {
-                    ret[i] = Float.parseFloat(stringValues[i]);
-                } catch (NumberFormatException e) {
-                    throw new SAMFormatException("Array tag of type f should have single-precision floating point value");
-                }
-            }
-            return ret;
-        }
-        long mask = Long.MAX_VALUE;
-        long minValue = Long.MAX_VALUE;
-        long maxValue = Long.MIN_VALUE;
-        final boolean isUnsigned = Character.isUpperCase(elementType);
-        switch (Character.toLowerCase(elementType)) {
-            case 'c':
-                if (isUnsigned) {
-                    mask = 0xffL;
-                } else {
-                    minValue = Byte.MIN_VALUE;
-                    maxValue = Byte.MAX_VALUE;
-                }
-                break;
-            case 's':
-                if (isUnsigned) {
-                    mask = 0xffffL;
-                } else {
-                    minValue = Short.MIN_VALUE;
-                    maxValue = Short.MAX_VALUE;
-                }
-                break;
-            case 'i':
-                if (isUnsigned) {
-                    mask = 0xffffffffL;
-                } else {
-                    minValue = Integer.MIN_VALUE;
-                    maxValue = Integer.MAX_VALUE;
-                }
-                break;
-            default:
-                throw new SAMFormatException("Unrecognized array tag element type: " + elementType);
-        }
-        if (isUnsigned) {
-            minValue = 0;
-            maxValue = mask;
-        }
-        final long[] longValues = new long[stringValues.length];
-        for (int i = 0; i < stringValues.length; ++i) {
-            final long longValue;
-            try {
-                longValue = Long.parseLong(stringValues[i]);
-            } catch (NumberFormatException e) {
-                throw new SAMFormatException("Array tag of type " + elementType + " should have integral value");
-            }
-            if (longValue < minValue || longValue > maxValue) {
-                throw new SAMFormatException("Value for element of array tag of type " + elementType +
-                " is out of allowed range: " + longValue);
-            }
-            longValues[i] = longValue;
-        }
-
-        switch (Character.toLowerCase(elementType)) {
-            case 'c': {
-                final byte[] array = new byte[longValues.length];
-                for (int i = 0; i < longValues.length; ++i) array[i] = (byte)longValues[i];
-                if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
-                else return array;
-            }
-            case 's': {
-                final short[] array = new short[longValues.length];
-                for (int i = 0; i < longValues.length; ++i) array[i] = (short)longValues[i];
-                if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
-                else return array;
-            }
-            case 'i':{
-                final int[] array = new int[longValues.length];
-                for (int i = 0; i < longValues.length; ++i) array[i] = (int)longValues[i];
-                if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
-                else return array;
-            }
-            default:
-                throw new SAMFormatException("Unrecognized array tag element type: " + elementType);
-        }
-    }
-
-    Iso8601Date decodeDate(final String dateStr) {
-        try {
-            return new Iso8601Date(dateStr);
-        } catch (DateParser.InvalidDateException ex) {
-            try {
-                return new Iso8601Date(DateFormat.getDateTimeInstance().parse(dateStr));
-            } catch (ParseException e) {
-                try {
-                    return new Iso8601Date(new Date(dateStr));
-                } catch (Exception e1) {
-                    throw new DateParser.InvalidDateException("Could not parse as date: " + dateStr, e);
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/TextualBAMIndexWriter.java b/src/main/java/htsjdk/samtools/TextualBAMIndexWriter.java
deleted file mode 100644
index d790270..0000000
--- a/src/main/java/htsjdk/samtools/TextualBAMIndexWriter.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.PrintWriter;
-import java.util.List;
-
-/**
- * Class for writing binary BAM index files as human-readable text.
- * Used for testing only.
-
- */
-class TextualBAMIndexWriter implements BAMIndexWriter {
-
-    protected final int nRef;
-    protected final File output;
-    private final PrintWriter pw;
-    private int count = 0;
-
-    /**
-     * constructor
-     *
-     * @param nRef    Number of reference sequences
-     * @param output   BAM Index output file
-     */
-    public TextualBAMIndexWriter(final int nRef, final File output) {
-        this.output = output;
-        this.nRef = nRef;
-        try {
-            pw = new PrintWriter(output);
-        } catch (final FileNotFoundException e) {
-            throw new SAMException("Can't find output file " + output, e);
-        }
-        writeHeader();
-    }
-
-    /**
-     * Write header information at the beginning of the file
-     */
-    private void writeHeader() {
-        pw.println("n_ref=" + nRef);
-    }
-
-    /**
-     * Write this content as human-readable text
-     */
-    public void writeReference(final BAMIndexContent content) {
-
-        final int reference = content.getReferenceSequence();
-
-        if (content == null) {
-            writeNullContent(reference);
-            count++;
-            return;
-        }
-
-        if (reference != count){
-            throw new SAMException("Reference on content is " + reference + " but expecting reference " + count);
-        }
-        count++;
-
-        final BAMIndexContent.BinList bins = content.getBins();
-        final int size = bins == null ? 0 : content.getNumberOfNonNullBins();
-
-        if (size == 0) {
-            writeNullContent(reference);
-            return;
-        }
-
-        //final List<Chunk> chunks = content.getMetaData() == null ? null
-        //        : content.getMetaData().getMetaDataChunks();
-        final BAMIndexMetaData metaData = content.getMetaData();
-
-        pw.println("Reference " + reference + " has n_bin= " + Integer.toString(size + (metaData != null? 1 : 0)));
-
-        // chunks
-        for (final Bin bin : bins) {   // note, bins will always be sorted
-            if (bin.getBinNumber() == GenomicIndexUtil.MAX_BINS)  break;
-            if (bin.getChunkList() == null) {
-                pw.println("  Ref " + reference + " bin " + bin.getBinNumber() + " has no binArray");  // remove?
-                continue;
-            }
-            final List<Chunk> chunkList = bin.getChunkList();
-            if (chunkList == null) {
-                pw.println("  Ref " + reference + " bin " + bin.getBinNumber() + " has no chunkList");
-                continue;
-            }
-            pw.print("  Ref " + reference + " bin " + bin.getBinNumber() + " has n_chunk= " + chunkList.size());
-            if (chunkList.isEmpty()) {
-                 pw.println();
-            }
-            for (final Chunk c : chunkList) {
-                pw.println("     Chunk: " + c.toString() +
-                        " start: " + Long.toString(c.getChunkStart(), 16) +
-                        " end: " + Long.toString(c.getChunkEnd(), 16));
-            }
-        }
-
-        writeChunkMetaData(reference, metaData);
-        
-        // linear index
-        final LinearIndex linearIndex = content.getLinearIndex();
-        if (linearIndex == null || linearIndex.getIndexEntries() == null) {
-            pw.println("Reference " + reference + " has n_intv= 0");
-            return;
-        }
-        final long[] entries = linearIndex.getIndexEntries();
-        final int indexStart = linearIndex.getIndexStart();
-        // System.out.println("index start is " + indexStart);
-        final int n_intv = entries.length + indexStart;
-        pw.println("Reference " + reference + " has n_intv= " + n_intv);
-        for (int k = 0; k < entries.length; k++) {
-            if (entries[k] != 0) {
-                pw.println("  Ref " + reference + " ioffset for " + (k + indexStart) + " is " + Long.toString(entries[k]));
-            }
-        }
-        pw.flush ();  // write each reference to disk as it's being created
-    }
-
-    /**
-     * Write the meta data represented by the chunkLists associated with bin MAX_BINS 37450
-     *
-     * @param metaData information describing numAligned records, numUnAligned, etc
-     */
-    private void writeChunkMetaData(final int reference, final BAMIndexMetaData metaData) {
-        final int nChunks = metaData == null ? 0 : 2;
-        pw.print("  Ref " + reference + " bin 37450 has n_chunk= " + nChunks);
-        if (nChunks == 0) {
-            pw.println();
-        } else {
-            pw.println("     Chunk: " + //  c.toString() +
-                    " start: " + Long.toString(metaData.getFirstOffset(), 16) +
-                    " end: " + Long.toString(metaData.getLastOffset(), 16));
-            pw.println("     Chunk: " + //  c.toString() +
-                    " start: " + Long.toString(metaData.getAlignedRecordCount(), 16) +
-                    " end: " + Long.toString(metaData.getUnalignedRecordCount(), 16));
-        }
-
-    }
-       
-    private void writeNullContent(final int reference) {
-        pw.println("Reference " + reference + " has n_bin=0");
-        pw.println("Reference " + reference + " has n_intv=0");
-    }
-
-    /**
-     * Write count of records without coordinates
-     *
-     * @param noCoordinateCount the count of records seen with no coordinate positions in the start coordinate
-     */
-    public void writeNoCoordinateRecordCount(final Long noCoordinateCount) {
-        pw.println("No Coordinate Count=" + noCoordinateCount);
-    }
-
-    /**
-     * Any necessary processing at the end of the file
-     */
-    public void close() {
-        pw.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/ValidationStringency.java b/src/main/java/htsjdk/samtools/ValidationStringency.java
deleted file mode 100644
index 1fe2124..0000000
--- a/src/main/java/htsjdk/samtools/ValidationStringency.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * How strict to be when reading a SAM or BAM, beyond bare minimum validation.
- */
-public enum ValidationStringency {
-    /**
-     * Do the right thing, throw an exception if something looks wrong.
-     */
-    STRICT,
-    /**
-     * Emit warnings but keep going if possible.
-     */
-    LENIENT,
-    /**
-     * Like LENIENT, only don't emit warning messages.
-     */
-    SILENT;
-
-    public static final ValidationStringency DEFAULT_STRINGENCY = STRICT;
-}
diff --git a/src/main/java/htsjdk/samtools/apps/TimeChannel.java b/src/main/java/htsjdk/samtools/apps/TimeChannel.java
deleted file mode 100644
index e3f707a..0000000
--- a/src/main/java/htsjdk/samtools/apps/TimeChannel.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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
- */
-package htsjdk.samtools.apps;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class TimeChannel {
-    public static void main(String[] args) throws Exception {
-        long fileSize = new File(args[0]).length();
-        FileInputStream in = new FileInputStream(args[0]);
-        FileChannel channel = in.getChannel();
-        byte[] buf = new byte[64 * 1024];
-        long totalBytesRead = 0;
-        long mappedOffset = 0;
-        // Map a round number of bytes that might correspond to some kind of page size boundary.
-        long maxToMapAtATime = 1024 * 1024 * 1024;
-        long mappedSize = Math.min(fileSize, maxToMapAtATime);
-        while (totalBytesRead < fileSize) {
-            System.err.println("mappedOffset: " + mappedOffset + "; mappedSize: " + mappedSize);
-            System.err.println("fileSize: " + fileSize + "; totalBytesRead: " + totalBytesRead);
-            MappedByteBuffer mappedBuffer = channel.map(FileChannel.MapMode.READ_ONLY, mappedOffset, mappedSize);
-            while (mappedBuffer.remaining() > 0) {
-                int bytesRead = Math.min(mappedBuffer.remaining(), buf.length);
-                mappedBuffer.get(buf, 0, bytesRead);
-                totalBytesRead += bytesRead;
-            }
-            mappedOffset += mappedSize;
-            mappedSize = Math.min(fileSize - totalBytesRead, maxToMapAtATime);
-        }
-        System.out.println("Total bytes: " + totalBytesRead);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/apps/TimeRandomAccessFile.java b/src/main/java/htsjdk/samtools/apps/TimeRandomAccessFile.java
deleted file mode 100644
index bebb948..0000000
--- a/src/main/java/htsjdk/samtools/apps/TimeRandomAccessFile.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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
- */
-package htsjdk.samtools.apps;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class TimeRandomAccessFile {
-    public static void main(String[] args) throws Exception {
-        RandomAccessFile raf = new RandomAccessFile(new File(args[0]), "r");
-        byte[] buf = new byte[64 * 1024];
-        long totalBytesRead = 0;
-        int bytesRead;
-        while ((bytesRead = readBytes(raf, buf, 0, buf.length)) > 0) {
-            totalBytesRead += bytesRead;
-        }
-        System.out.println("Total bytes: " + totalBytesRead);
-    }
-    private static int readBytes(final RandomAccessFile file, final byte[] buffer, final int offset, final int length)
-        throws IOException {
-        int bytesRead = 0;
-        while (bytesRead < length) {
-            final int count = file.read(buffer, offset + bytesRead, length - bytesRead);
-            if (count <= 0) {
-                break;
-            }
-            bytesRead += count;
-        }
-        return bytesRead;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/CRAIEntry.java b/src/main/java/htsjdk/samtools/cram/CRAIEntry.java
deleted file mode 100644
index dd22a00..0000000
--- a/src/main/java/htsjdk/samtools/cram/CRAIEntry.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * A class representing CRAI index entry: file and alignment offsets for each slice.
- * Created by vadim on 10/08/2015.
- */
-public class CRAIEntry implements Comparable<CRAIEntry>, Cloneable {
-    public int sequenceId;
-    public int alignmentStart;
-    public int alignmentSpan;
-    public long containerStartOffset;
-    public int sliceOffset;
-    public int sliceSize;
-    public int sliceIndex;
-
-    private static int CRAI_INDEX_COLUMNS = 6;
-    private static String entryFormat = "%d\t%d\t%d\t%d\t%d\t%d";
-
-    public CRAIEntry() {
-    }
-
-    /**
-     * Create a CRAI Entry from a serialized CRAI index line.
-     *
-     * @param line string formatted as a CRAI index entry
-     * @throws CRAIIndex.CRAIIndexException
-     */
-    public CRAIEntry(final String line) throws CRAIIndex.CRAIIndexException {
-        final String[] chunks = line.split("\t");
-        if (chunks.length != CRAI_INDEX_COLUMNS) {
-            throw new CRAIIndex.CRAIIndexException(
-                    "Malformed CRAI index entry: expecting " + CRAI_INDEX_COLUMNS + " columns but got " + chunks.length);
-        }
-
-        try {
-            sequenceId = Integer.parseInt(chunks[0]);
-            alignmentStart = Integer.parseInt(chunks[1]);
-            alignmentSpan = Integer.parseInt(chunks[2]);
-            containerStartOffset = Long.parseLong(chunks[3]);
-            sliceOffset = Integer.parseInt(chunks[4]);
-            sliceSize = Integer.parseInt(chunks[5]);
-        } catch (final NumberFormatException e) {
-            throw new CRAIIndex.CRAIIndexException(e);
-        }
-    }
-
-    /**
-     * Serialize the entry to a CRAI index stream.
-     * @param os stream to write to
-     */
-    public void writeToStream(OutputStream os) {
-        try {
-            os.write(serializeToString().getBytes());
-            os.write('\n');
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * Format the entry as a string suitable for serialization in the CRAI index
-     */
-    private String serializeToString() {
-        return String.format(entryFormat,
-                sequenceId, alignmentStart, alignmentSpan,
-                containerStartOffset, sliceOffset, sliceSize);
-    }
-
-    @Override
-    public String toString() { return serializeToString(); }
-
-    public static List<CRAIEntry> fromContainer(final Container container) {
-        final List<CRAIEntry> entries = new ArrayList<>(container.slices.length);
-        for (int i = 0; i < container.slices.length; i++) {
-            final Slice s = container.slices[i];
-            final CRAIEntry e = new CRAIEntry();
-            e.sequenceId = s.sequenceId;
-            e.alignmentStart = s.alignmentStart;
-            e.alignmentSpan = s.alignmentSpan;
-            e.containerStartOffset = s.containerOffset;
-            e.sliceOffset = container.landmarks[i];
-            e.sliceSize = s.size;
-
-            e.sliceIndex = i;
-            entries.add(e);
-        }
-        return entries;
-    }
-
-    @Override
-    public int compareTo(final CRAIEntry o) {
-        if (o == null) {
-            return 1;
-        }
-        if (sequenceId != o.sequenceId) {
-            return sequenceId - o.sequenceId;
-        }
-        if (alignmentStart != o.alignmentStart) {
-            return alignmentStart - o.alignmentStart;
-        }
-
-        return (int) (containerStartOffset - o.containerStartOffset);
-    }
-
-    @Override
-    public CRAIEntry clone() throws CloneNotSupportedException {
-        super.clone();
-        final CRAIEntry entry = new CRAIEntry();
-        entry.sequenceId = sequenceId;
-        entry.alignmentStart = alignmentStart;
-        entry.alignmentSpan = alignmentSpan;
-        entry.containerStartOffset = containerStartOffset;
-        entry.sliceOffset = sliceOffset;
-        entry.sliceSize = sliceSize;
-        return entry;
-    }
-
-    public static Comparator<CRAIEntry> byEnd = new Comparator<CRAIEntry>() {
-
-        @Override
-        public int compare(final CRAIEntry o1, final CRAIEntry o2) {
-            if (o1.sequenceId != o2.sequenceId) {
-                return o2.sequenceId - o1.sequenceId;
-            }
-            if (o1.alignmentStart + o1.alignmentSpan != o2.alignmentStart + o2.alignmentSpan) {
-                return o1.alignmentStart + o1.alignmentSpan - o2.alignmentStart - o2.alignmentSpan;
-            }
-
-            return (int) (o1.containerStartOffset - o2.containerStartOffset);
-        }
-    };
-
-    public static final Comparator<CRAIEntry> byStart = new Comparator<CRAIEntry>() {
-
-        @Override
-        public int compare(final CRAIEntry o1, final CRAIEntry o2) {
-            if (o1.sequenceId != o2.sequenceId) {
-                return o2.sequenceId - o1.sequenceId;
-            }
-            if (o1.alignmentStart != o2.alignmentStart) {
-                return o1.alignmentStart - o2.alignmentStart;
-            }
-
-            return (int) (o1.containerStartOffset - o2.containerStartOffset);
-        }
-    };
-
-    public static Comparator<CRAIEntry> byStartDesc = new Comparator<CRAIEntry>() {
-
-        @Override
-        public int compare(CRAIEntry o1, CRAIEntry o2) {
-            if (o1.sequenceId != o2.sequenceId) {
-                if (o1.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX)
-                    return 1;
-                if (o2.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX)
-                    return -1;
-                return -o2.sequenceId + o1.sequenceId;
-            }
-            if (o1.alignmentStart != o2.alignmentStart)
-                return o1.alignmentStart - o2.alignmentStart;
-
-            return (int) (o1.containerStartOffset - o2.containerStartOffset);
-        }
-    };
-
-    public static boolean intersect(final CRAIEntry e0, final CRAIEntry e1) {
-        if (e0.sequenceId != e1.sequenceId) {
-            return false;
-        }
-        if (e0.sequenceId < 0) {
-            return false;
-        }
-
-        final int a0 = e0.alignmentStart;
-        final int a1 = e1.alignmentStart;
-
-        final int b0 = a0 + e0.alignmentSpan;
-        final int b1 = a1 + e1.alignmentSpan;
-
-        return Math.abs(a0 + b0 - a1 - b1) < (e0.alignmentSpan + e1.alignmentSpan);
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/CRAIIndex.java b/src/main/java/htsjdk/samtools/cram/CRAIIndex.java
deleted file mode 100644
index 256b35e..0000000
--- a/src/main/java/htsjdk/samtools/cram/CRAIIndex.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.CRAMBAIIndexer;
-import htsjdk.samtools.CRAMCRAIIndexer;
-import htsjdk.samtools.cram.encoding.reader.DataReaderFactory;
-import htsjdk.samtools.cram.encoding.reader.RefSeqIdReader;
-import htsjdk.samtools.cram.io.DefaultBitInputStream;
-import htsjdk.samtools.cram.structure.*;
-import htsjdk.samtools.seekablestream.SeekableMemoryStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.ValidationStringency;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import java.util.List;
-
-/**
- * CRAI index used for CRAM files.
- */
-public class CRAIIndex {
-    public static final String CRAI_INDEX_SUFFIX = ".crai";
-    final private List<CRAIEntry> entries = new ArrayList<>();
-
-    /**
-     * Add a single entry to the CRAI index.
-     * @param entry entry to be added
-     */
-    public void addEntry(CRAIEntry entry) {
-        entries.add(entry);
-    }
-
-    // This is used for testing and should be removed when there are no more
-    // consumers that know about the internal structure of a CRAI
-    public List<CRAIEntry> getCRAIEntries() {
-        return entries;
-    }
-
-    /**
-     * Write out the index to an output stream;
-     * @param os Stream to write index to
-     */
-    public void writeIndex(final OutputStream os) {
-        Collections.sort(entries, CRAIEntry.byStartDesc);
-        entries.stream().forEach(e -> e.writeToStream(os));
-    }
-
-    /**
-     * Create index entries for a single container.
-     * @param c the container to index
-     */
-    public void processContainer(final Container c) {
-        // TODO: this should be refactored and delegate to container/slice
-        if (!c.isEOF()) {
-            for (int i = 0; i < c.slices.length; i++) {
-                Slice s = c.slices[i];
-                if (s.sequenceId == Slice.MULTI_REFERENCE) {
-                    this.entries.addAll(getCRAIEntriesForMultiRefSlice(s, c.header, c.offset, c.landmarks));
-                }
-                else {
-                    CRAIEntry e = new CRAIEntry();
-
-                    e.sequenceId = c.sequenceId;
-                    e.alignmentStart = s.alignmentStart;
-                    e.alignmentSpan = s.alignmentSpan;
-                    e.containerStartOffset = c.offset;
-                    e.sliceOffset = c.landmarks[i];
-                    e.sliceSize = s.size;
-                    e.sliceIndex = i;
-
-                    entries.add(e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Return a list of CRAI Entries; one for each reference in the multireference slice.
-     * TODO: this should be refactored and delegate to container/slice
-     */
-    private static Collection<CRAIEntry> getCRAIEntriesForMultiRefSlice(
-            final Slice slice,
-            final CompressionHeader header,
-            final long containerOffset,
-            final int[] landmarks)
-    {
-        final DataReaderFactory dataReaderFactory = new DataReaderFactory();
-        final Map<Integer, InputStream> inputMap = new HashMap<>();
-        for (final Integer exId : slice.external.keySet()) {
-            inputMap.put(exId, new ByteArrayInputStream(slice.external.get(exId).getRawContent()));
-        }
-
-        final RefSeqIdReader reader = new RefSeqIdReader(
-                slice.sequenceId,
-                slice.alignmentStart,
-                ValidationStringency.DEFAULT_STRINGENCY);
-        dataReaderFactory.buildReader(
-                reader,
-                new DefaultBitInputStream(new ByteArrayInputStream(slice.coreBlock.getRawContent())),
-                inputMap,
-                header,
-                slice.sequenceId
-        );
-        reader.APDelta = header.APDelta;
-
-        for (int i = 0; i < slice.nofRecords; i++) {
-            final CramCompressionRecord record = new CramCompressionRecord();
-            record.sliceIndex = slice.index;
-            record.index = i;
-
-            reader.read();
-
-            if (record.sequenceId == slice.sequenceId) {
-                record.sequenceId = slice.sequenceId;
-            }
-            else if (record.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                record.sequenceName = SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-            }
-        }
-
-        Map<Integer, AlignmentSpan> spans = reader.getReferenceSpans();
-        List<CRAIEntry> entries = new ArrayList<>(spans.size());
-        for (int seqId : spans.keySet()) {
-            CRAIEntry e = new CRAIEntry();
-            e.sequenceId = seqId;
-            AlignmentSpan span = spans.get(seqId);
-            e.alignmentStart = span.getStart();
-            e.alignmentSpan = span.getSpan();
-            e.sliceSize = slice.size;
-            e.sliceIndex = slice.index;
-            e.containerStartOffset = containerOffset;
-            e.sliceOffset = landmarks[slice.index];
-
-            entries.add(e);
-        }
-
-        return entries;
-    }
-
-    public static SeekableStream openCraiFileAsBaiStream(final File cramIndexFile, final SAMSequenceDictionary dictionary) throws IOException {
-        return openCraiFileAsBaiStream(new FileInputStream(cramIndexFile), dictionary);
-    }
-
-    public static SeekableStream openCraiFileAsBaiStream(final InputStream indexStream, final SAMSequenceDictionary dictionary) throws IOException, CRAIIndexException {
-        final List<CRAIEntry> full = CRAMCRAIIndexer.readIndex(indexStream).getCRAIEntries();
-        Collections.sort(full);
-
-        final SAMFileHeader header = new SAMFileHeader();
-        header.setSequenceDictionary(dictionary);
-
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final CRAMBAIIndexer indexer = new CRAMBAIIndexer(baos, header);
-
-        for (final CRAIEntry entry : full) {
-            final Slice slice = new Slice();
-            slice.containerOffset = entry.containerStartOffset;
-            slice.alignmentStart = entry.alignmentStart;
-            slice.alignmentSpan = entry.alignmentSpan;
-            slice.sequenceId = entry.sequenceId;
-            // https://github.com/samtools/htsjdk/issues/531
-            // entry.sliceSize is the slice size in bytes, not the number of
-            // records; this results in the BAMIndex metadata being wrong
-            slice.nofRecords = entry.sliceSize;
-            slice.index = entry.sliceIndex;
-            slice.offset = entry.sliceOffset;
-
-            indexer.processSingleReferenceSlice(slice);
-        }
-        indexer.finish();
-
-        return new SeekableMemoryStream(baos.toByteArray(), "CRAI to BAI converter");
-    }
-
-    public static List<CRAIEntry> find(final List<CRAIEntry> list, final int seqId, final int start, final int span) {
-        final boolean whole = start < 1 || span < 1;
-        final CRAIEntry query = new CRAIEntry();
-        query.sequenceId = seqId;
-        query.alignmentStart = start < 1 ? 1 : start;
-        query.alignmentSpan = span < 1 ? Integer.MAX_VALUE : span;
-        query.containerStartOffset = Long.MAX_VALUE;
-        query.sliceOffset = Integer.MAX_VALUE;
-        query.sliceSize = Integer.MAX_VALUE;
-
-        final List<CRAIEntry> l = new ArrayList<>();
-        for (final CRAIEntry e : list) {
-            if (e.sequenceId != seqId) {
-                continue;
-            }
-            if (whole || CRAIEntry.intersect(e, query)) {
-                l.add(e);
-            }
-        }
-        Collections.sort(l, CRAIEntry.byStart);
-        return l;
-    }
-
-    public static CRAIEntry getLeftmost(final List<CRAIEntry> list) {
-        if (list == null || list.isEmpty()) {
-            return null;
-        }
-        CRAIEntry left = list.get(0);
-
-        for (final CRAIEntry e : list) {
-            if (e.alignmentStart < left.alignmentStart) {
-                left = e;
-            }
-        }
-
-        return left;
-    }
-
-    /**
-     * Find index of the last aligned entry in the list. Assumes the index is sorted by coordinate and unmapped entries (with sequence id = -1) follow the mapped entries.
-     *
-     * @param list a list of CRAI entries
-     * @return integer index of the last entry with sequence id not equal to -1
-     */
-    public static int findLastAlignedEntry(final List<CRAIEntry> list) {
-        if (list.isEmpty()) {
-            return -1;
-        }
-
-        int low = 0;
-        int high = list.size() - 1;
-
-        while (low <= high) {
-            final int mid = (low + high) >>> 1;
-            final CRAIEntry midVal = list.get(mid);
-
-            if (midVal.sequenceId >= 0) {
-                low = mid + 1;
-            } else {
-                high = mid - 1;
-            }
-        }
-        if (low >= list.size()) {
-            return list.size() - 1;
-        }
-        for (; low >= 0 && list.get(low).sequenceId == -1; low--) {
-        }
-        return low;
-    }
-
-    public static class CRAIIndexException extends RuntimeException {
-
-        public CRAIIndexException(final String s) {
-            super(s);
-        }
-
-        public CRAIIndexException(final NumberFormatException e) {
-            super(e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/CRAMException.java b/src/main/java/htsjdk/samtools/cram/CRAMException.java
deleted file mode 100644
index 7d5fb72..0000000
--- a/src/main/java/htsjdk/samtools/cram/CRAMException.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.SAMException;
-
-/**
- * Created by edwardk on 8/13/15.
- */
-public class CRAMException extends SAMException {
-    public CRAMException() {}
-
-    public CRAMException(final String s) {
-        super(s);
-    }
-
-    public CRAMException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public CRAMException(final Throwable throwable) {
-        super(throwable);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/cram/build/CompressionHeaderFactory.java b/src/main/java/htsjdk/samtools/cram/build/CompressionHeaderFactory.java
deleted file mode 100644
index c958fa4..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/CompressionHeaderFactory.java
+++ /dev/null
@@ -1,592 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.cram.common.MutableInt;
-import htsjdk.samtools.cram.encoding.ByteArrayLenEncoding;
-import htsjdk.samtools.cram.encoding.ByteArrayStopEncoding;
-import htsjdk.samtools.cram.encoding.ExternalByteEncoding;
-import htsjdk.samtools.cram.encoding.ExternalCompressor;
-import htsjdk.samtools.cram.encoding.ExternalIntegerEncoding;
-import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanIntegerEncoding;
-import htsjdk.samtools.cram.encoding.rans.RANS;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.EncodingParams;
-import htsjdk.samtools.cram.structure.ReadTag;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * A class responsible for decisions about which encodings to use for a given set of records.
- * This particular version relies heavily on GZIP and RANS for better compression.
- */
-public class CompressionHeaderFactory {
-    private static final int TAG_VALUE_BUFFER_SIZE = 1024 * 1024;
-    public static final int BYTE_SPACE_SIZE = 256;
-    public static final int ALL_BYTES_USED = -1;
-    private final Map<Integer, EncodingDetails> bestEncodings = new HashMap<>();
-    private final ByteArrayOutputStream baosForTagValues;
-
-    public CompressionHeaderFactory() {
-        baosForTagValues = new ByteArrayOutputStream(TAG_VALUE_BUFFER_SIZE);
-    }
-
-    /**
-     * Decides on compression methods to use for the given records.
-     *
-     * @param records
-     *            the data to be compressed
-     * @param substitutionMatrix
-     *            a matrix of base substitution frequencies, can be null, in
-     *            which case it is re-calculated.
-     * @param sorted
-     *            if true the records are assumed to be sorted by alignment
-     *            position
-     * @return {@link htsjdk.samtools.cram.structure.CompressionHeader} object
-     *         describing the encoding chosen for the data
-     */
-    public CompressionHeader build(final List<CramCompressionRecord> records, SubstitutionMatrix substitutionMatrix,
-                                   final boolean sorted) {
-
-        final CompressionHeaderBuilder builder = new CompressionHeaderBuilder(sorted);
-
-        builder.addExternalIntegerRansOrderZeroEncoding(EncodingKey.AP_AlignmentPositionOffset);
-        builder.addExternalByteRansOrderOneEncoding(EncodingKey.BA_Base);
-        // BB is not used
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.BF_BitFlags);
-        builder.addExternalByteGzipEncoding(EncodingKey.BS_BaseSubstitutionCode);
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.CF_CompressionBitFlags);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.DL_DeletionLength);
-        builder.addExternalByteGzipEncoding(EncodingKey.FC_FeatureCode);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.FN_NumberOfReadFeatures);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.FP_FeaturePosition);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.HC_HardClip);
-        builder.addExternalByteArrayStopTabGzipEncoding(EncodingKey.IN_Insertion);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.MF_MateBitFlags);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.MQ_MappingQualityScore);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.NF_RecordsToNextFragment);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.NP_NextFragmentAlignmentStart);
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.NS_NextFragmentReferenceSequenceID);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.PD_padding);
-        // QQ is not used
-        builder.addExternalByteRansOrderOneEncoding(EncodingKey.QS_QualityScore);
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.RG_ReadGroup);
-        builder.addExternalIntegerRansOrderZeroEncoding(EncodingKey.RI_RefId);
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.RL_ReadLength);
-        builder.addExternalByteArrayStopTabGzipEncoding(EncodingKey.RN_ReadName);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.RS_RefSkip);
-        builder.addExternalByteArrayStopTabGzipEncoding(EncodingKey.SC_SoftClip);
-        builder.addExternalIntegerGzipEncoding(EncodingKey.TC_TagCount);
-        builder.addExternalIntegerEncoding(EncodingKey.TL_TagIdList, ExternalCompressor.createGZIP());
-        builder.addExternalIntegerGzipEncoding(EncodingKey.TN_TagNameAndType);
-        builder.addExternalIntegerRansOrderOneEncoding(EncodingKey.TS_InsetSize);
-
-        builder.setTagIdDictionary(buildTagIdDictionary(records));
-
-        buildTagEncodings(records, builder);
-
-        if (substitutionMatrix == null) {
-            substitutionMatrix = new SubstitutionMatrix(buildFrequencies(records));
-            updateSubstitutionCodes(records, substitutionMatrix);
-        }
-        builder.setSubstitutionMatrix(substitutionMatrix);
-        return builder.getHeader();
-    }
-
-    /**
-     * Iterate over the records and for each tag found come up with an encoding.
-     * Tag encodings are registered via the builder.
-     *
-     * @param records
-     *            CRAM records holding the tags to be encoded
-     * @param builder
-     *            compression header builder to register encodings
-     */
-    private void buildTagEncodings(final List<CramCompressionRecord> records, final CompressionHeaderBuilder builder) {
-        final Set<Integer> tagIdSet = new HashSet<>();
-
-        for (final CramCompressionRecord record : records) {
-            if (record.tags == null || record.tags.length == 0) {
-                continue;
-            }
-
-            for (final ReadTag tag : record.tags) {
-                tagIdSet.add(tag.keyType3BytesAsInt);
-            }
-        }
-
-        for (final int tagId : tagIdSet) {
-            if (bestEncodings.containsKey(tagId)) {
-                builder.addTagEncoding(tagId, bestEncodings.get(tagId));
-            } else {
-                final EncodingDetails e = buildEncodingForTag(records, tagId);
-                builder.addTagEncoding(tagId, e);
-                bestEncodings.put(tagId, e);
-            }
-        }
-    }
-
-    /**
-     * Given the records update the substitution matrix with actual substitution
-     * codes.
-     *
-     * @param records
-     *            CRAM records
-     * @param substitutionMatrix
-     *            the matrix to be updated
-     */
-    static void updateSubstitutionCodes(final List<CramCompressionRecord> records,
-                                                final SubstitutionMatrix substitutionMatrix) {
-        for (final CramCompressionRecord record : records) {
-            if (record.readFeatures != null) {
-                for (final ReadFeature recordFeature : record.readFeatures) {
-                    if (recordFeature.getOperator() == Substitution.operator) {
-                        final Substitution substitution = ((Substitution) recordFeature);
-                        if (substitution.getCode() == Substitution.NO_CODE) {
-                            final byte refBase = substitution.getReferenceBase();
-                            final byte base = substitution.getBase();
-                            substitution.setCode(substitutionMatrix.code(refBase, base));
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Build an array of substitution frequencies for the given CRAM records.
-     *
-     * @param records
-     *            CRAM records to scan
-     * @return a 2D array of frequencies, see
-     *         {@link htsjdk.samtools.cram.structure.SubstitutionMatrix}
-     */
-    static long[][] buildFrequencies(final List<CramCompressionRecord> records) {
-        final long[][] frequencies = new long[BYTE_SPACE_SIZE][BYTE_SPACE_SIZE];
-        for (final CramCompressionRecord record : records) {
-            if (record.readFeatures != null) {
-                for (final ReadFeature readFeature : record.readFeatures) {
-                    if (readFeature.getOperator() == Substitution.operator) {
-                        final Substitution substitution = ((Substitution) readFeature);
-                        final byte refBase = substitution.getReferenceBase();
-                        final byte base = substitution.getBase();
-                        frequencies[refBase][base]++;
-                    }
-                }
-            }
-        }
-        return frequencies;
-    }
-
-    /**
-     * Build a dictionary of tag ids.
-     *
-     * @param records
-     *            records holding the tags
-     * @return a 3D byte array: a set of unique lists of tag ids.
-     */
-    private static byte[][][] buildTagIdDictionary(final List<CramCompressionRecord> records) {
-        final Comparator<ReadTag> comparator = new Comparator<ReadTag>() {
-
-            @Override
-            public int compare(final ReadTag o1, final ReadTag o2) {
-                return o1.keyType3BytesAsInt - o2.keyType3BytesAsInt;
-            }
-        };
-
-        final Comparator<byte[]> baComparator = new Comparator<byte[]>() {
-
-            @Override
-            public int compare(final byte[] o1, final byte[] o2) {
-                if (o1.length - o2.length != 0) {
-                    return o1.length - o2.length;
-                }
-
-                for (int i = 0; i < o1.length; i++) {
-                    if (o1[i] != o2[i]) {
-                        return o1[i] - o2[i];
-                    }
-                }
-
-                return 0;
-            }
-        };
-
-        final Map<byte[], MutableInt> map = new TreeMap<>(baComparator);
-        final MutableInt noTagCounter = new MutableInt();
-        map.put(new byte[0], noTagCounter);
-        for (final CramCompressionRecord record : records) {
-            if (record.tags == null) {
-                noTagCounter.value++;
-                record.tagIdsIndex = noTagCounter;
-                continue;
-            }
-
-            Arrays.sort(record.tags, comparator);
-            record.tagIds = new byte[record.tags.length * 3];
-
-            int tagIndex = 0;
-            for (int i = 0; i < record.tags.length; i++) {
-                record.tagIds[i * 3] = (byte) record.tags[tagIndex].keyType3Bytes.charAt(0);
-                record.tagIds[i * 3 + 1] = (byte) record.tags[tagIndex].keyType3Bytes.charAt(1);
-                record.tagIds[i * 3 + 2] = (byte) record.tags[tagIndex].keyType3Bytes.charAt(2);
-                tagIndex++;
-            }
-
-            MutableInt count = map.get(record.tagIds);
-            if (count == null) {
-                count = new MutableInt();
-                map.put(record.tagIds, count);
-            }
-            count.value++;
-            record.tagIdsIndex = count;
-        }
-
-        final byte[][][] dictionary = new byte[map.size()][][];
-        int i = 0;
-        for (final byte[] idsAsBytes : map.keySet()) {
-            final int nofIds = idsAsBytes.length / 3;
-            dictionary[i] = new byte[nofIds][];
-            for (int j = 0; j < idsAsBytes.length;) {
-                final int idIndex = j / 3;
-                dictionary[i][idIndex] = new byte[3];
-                dictionary[i][idIndex][0] = idsAsBytes[j++];
-                dictionary[i][idIndex][1] = idsAsBytes[j++];
-                dictionary[i][idIndex][2] = idsAsBytes[j++];
-            }
-            map.get(idsAsBytes).value = i++;
-        }
-        return dictionary;
-    }
-
-    /**
-     * Tag id is and integer where the first byte is its type and the other 2
-     * bytes represent the name. For example 'OQZ', where 'OQ' stands for
-     * original quality score tag and 'Z' stands for string type.
-     *
-     * @param tagID
-     *            a 3 byte tag id stored in an int
-     * @return tag type, the lowest byte in the tag id
-     */
-    static byte getTagType(final int tagID) {
-        return (byte) (tagID & 0xFF);
-    }
-
-    static ExternalCompressor getBestExternalCompressor(final byte[] data) {
-        final ExternalCompressor gzip = ExternalCompressor.createGZIP();
-        final int gzipLen = gzip.compress(data).length;
-
-        final ExternalCompressor rans0 = ExternalCompressor.createRANS(RANS.ORDER.ZERO);
-        final int rans0Len = rans0.compress(data).length;
-
-        final ExternalCompressor rans1 = ExternalCompressor.createRANS(RANS.ORDER.ONE);
-        final int rans1Len = rans1.compress(data).length;
-
-        // find the best of general purpose codecs:
-        final int minLen = Math.min(gzipLen, Math.min(rans0Len, rans1Len));
-        if (minLen == rans0Len) {
-            return rans0;
-        } else if (minLen == rans1Len) {
-            return rans1;
-        } else {
-            return gzip;
-        }
-    }
-
-    byte[] getDataForTag(final List<CramCompressionRecord> records, final int tagID) {
-        baosForTagValues.reset();
-
-        for (final CramCompressionRecord record : records) {
-            if (record.tags == null) {
-                continue;
-            }
-
-            for (final ReadTag tag : record.tags) {
-                if (tag.keyType3BytesAsInt != tagID) {
-                    continue;
-                }
-                final byte[] valueBytes = tag.getValueAsByteArray();
-                try {
-                    baosForTagValues.write(valueBytes);
-                } catch (final IOException e) {
-                    throw new RuntimeIOException(e);
-                }
-            }
-        }
-
-        return baosForTagValues.toByteArray();
-    }
-
-    static ByteSizeRange geByteSizeRangeOfTagValues(final List<CramCompressionRecord> records, final int tagID) {
-        final byte type = getTagType(tagID);
-        final ByteSizeRange stats = new ByteSizeRange();
-        for (final CramCompressionRecord record : records) {
-            if (record.tags == null) {
-                continue;
-            }
-
-            for (final ReadTag tag : record.tags) {
-                if (tag.keyType3BytesAsInt != tagID) {
-                    continue;
-                }
-                final int size = getTagValueByteSize(type, tag.getValue());
-                if (stats.min > size)
-                    stats.min = size;
-                if (stats.max < size)
-                    stats.max = size;
-            }
-        }
-        return stats;
-    }
-
-    /**
-     * Find a byte value never mentioned in the array
-     * @param array bytes
-     * @return byte value or -1 if the array contains all possible byte values.
-     */
-    static int getUnusedByte(final byte[] array) {
-        final byte[] usage = new byte[BYTE_SPACE_SIZE];
-        for (final byte b : array) {
-            usage[0xFF & b] = 1;
-        }
-
-        for (int i = 0; i < usage.length; i++) {
-            if (usage[i] == 0)
-                return i;
-        }
-        return ALL_BYTES_USED;
-    }
-
-    static class ByteSizeRange {
-        int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
-    }
-
-    /**
-     * A combination of external compressor and encoding params. This is all
-     * that is needed to encode a data series.
-     */
-    private static class EncodingDetails {
-        ExternalCompressor compressor;
-        EncodingParams params;
-    }
-
-    /**
-     * Build an encoding for a specific tag for given records.
-     *
-     * @param records
-     *            CRAM records holding the tags
-     * @param tagID
-     *            an integer id of the tag
-     * @return an encoding for the tag
-     */
-    private EncodingDetails buildEncodingForTag(final List<CramCompressionRecord> records, final int tagID) {
-        final EncodingDetails details = new EncodingDetails();
-        final byte[] data = getDataForTag(records, tagID);
-
-        details.compressor = getBestExternalCompressor(data);
-
-        final byte type = getTagType(tagID);
-        switch (type) {
-            case 'A':
-            case 'c':
-            case 'C':
-                details.params = ByteArrayLenEncoding.toParam(
-                        HuffmanIntegerEncoding.toParam(new int[] { 1 }, new int[] { 0 }),
-                        ExternalByteEncoding.toParam(tagID));
-                return details;
-            case 'I':
-            case 'i':
-            case 'f':
-                details.params = ByteArrayLenEncoding.toParam(
-                        HuffmanIntegerEncoding.toParam(new int[] { 4 }, new int[] { 0 }),
-                        ExternalByteEncoding.toParam(tagID));
-                return details;
-
-            case 's':
-            case 'S':
-                details.params = ByteArrayLenEncoding.toParam(
-                        HuffmanIntegerEncoding.toParam(new int[] { 2 }, new int[] { 0 }),
-                        ExternalByteEncoding.toParam(tagID));
-                return details;
-            case 'Z':
-            case 'B':
-                final ByteSizeRange stats = geByteSizeRangeOfTagValues(records, tagID);
-                final boolean singleSize = stats.min == stats.max;
-                if (singleSize) {
-                    details.params = ByteArrayLenEncoding.toParam(
-                            HuffmanIntegerEncoding.toParam(new int[] { stats.min }, new int[] { 0 }),
-                            ExternalByteEncoding.toParam(tagID));
-                    return details;
-                }
-
-                if (type == 'Z') {
-                    details.params = ByteArrayStopEncoding.toParam((byte) '\t', tagID);
-                    return details;
-                }
-
-                final int minSize_threshold_ForByteArrayStopEncoding = 100;
-                if (stats.min > minSize_threshold_ForByteArrayStopEncoding) {
-                    final int unusedByte = getUnusedByte(data);
-                    if (unusedByte > ALL_BYTES_USED) {
-                        details.params = ByteArrayStopEncoding.toParam((byte) unusedByte, tagID);
-                        return details;
-                    }
-                }
-
-                details.params = ByteArrayLenEncoding.toParam(ExternalIntegerEncoding.toParam(tagID),
-                        ExternalByteEncoding.toParam(tagID));
-                return details;
-            default:
-                throw new IllegalArgumentException("Unknown tag type: " + (char) type);
-        }
-    }
-
-    /**
-     * A helper class to build
-     * {@link htsjdk.samtools.cram.structure.CompressionHeader} object.
-     */
-    private static class CompressionHeaderBuilder {
-        private final CompressionHeader header;
-
-        CompressionHeaderBuilder(final boolean sorted) {
-            header = new CompressionHeader();
-            header.externalIds = new ArrayList<>();
-            header.tMap = new TreeMap<>();
-
-            header.encodingMap = new TreeMap<>();
-            header.APDelta = sorted;
-        }
-
-        CompressionHeader getHeader() {
-            return header;
-        }
-
-        void addExternalEncoding(final EncodingKey encodingKey, final EncodingParams params,
-                                 final ExternalCompressor compressor) {
-            header.externalIds.add(encodingKey.ordinal());
-            header.externalCompressors.put(encodingKey.ordinal(), compressor);
-            header.encodingMap.put(encodingKey, params);
-        }
-
-        void addExternalByteArrayStopTabGzipEncoding(final EncodingKey encodingKey) {
-            addExternalEncoding(encodingKey, ByteArrayStopEncoding.toParam((byte) '\t', encodingKey.ordinal()),
-                    ExternalCompressor.createGZIP());
-        }
-
-        void addExternalIntegerEncoding(final EncodingKey encodingKey, final ExternalCompressor compressor) {
-            addExternalEncoding(encodingKey, ExternalIntegerEncoding.toParam(encodingKey.ordinal()), compressor);
-        }
-
-        void addExternalIntegerGzipEncoding(final EncodingKey encodingKey) {
-            addExternalEncoding(encodingKey, ExternalIntegerEncoding.toParam(encodingKey.ordinal()),
-                    ExternalCompressor.createGZIP());
-        }
-
-        void addExternalByteGzipEncoding(final EncodingKey encodingKey) {
-            addExternalEncoding(encodingKey, ExternalByteEncoding.toParam(encodingKey.ordinal()),
-                    ExternalCompressor.createGZIP());
-        }
-
-        void addExternalByteRansOrderOneEncoding(final EncodingKey encodingKey) {
-            addExternalEncoding(encodingKey, ExternalByteEncoding.toParam(encodingKey.ordinal()),
-                    ExternalCompressor.createRANS(RANS.ORDER.ONE));
-        }
-
-        void addExternalIntegerRansOrderOneEncoding(final EncodingKey encodingKey) {
-            addExternalIntegerEncoding(encodingKey, ExternalCompressor.createRANS(RANS.ORDER.ONE));
-        }
-
-        void addExternalIntegerRansOrderZeroEncoding(final EncodingKey encodingKey) {
-            addExternalIntegerEncoding(encodingKey, ExternalCompressor.createRANS(RANS.ORDER.ZERO));
-        }
-
-        void addTagEncoding(final int tagId, final EncodingDetails encodingDetails) {
-            header.externalIds.add(tagId);
-            header.externalCompressors.put(tagId, encodingDetails.compressor);
-            header.tMap.put(tagId, encodingDetails.params);
-        }
-
-        void setTagIdDictionary(final byte[][][] dictionary) {
-            header.dictionary = dictionary;
-        }
-
-        void setSubstitutionMatrix(final SubstitutionMatrix substitutionMatrix) {
-            header.substitutionMatrix = substitutionMatrix;
-        }
-    }
-
-    /**
-     * Calculate byte size of a tag value based on it's type and value class
-     * @param type tag type, like 'A' or 'i'
-     * @param value object representing the tag value
-     * @return number of bytes used for the tag value
-     */
-    static int getTagValueByteSize(final byte type, final Object value) {
-        switch (type) {
-            case 'A':
-                return 1;
-            case 'I':
-                return 4;
-            case 'i':
-                return 4;
-            case 's':
-                return 2;
-            case 'S':
-                return 2;
-            case 'c':
-                return 1;
-            case 'C':
-                return 1;
-            case 'f':
-                return 4;
-            case 'Z':
-                return ((String) value).length()+1;
-            case 'B':
-                if (value instanceof byte[])
-                    return 1+ 4+ ((byte[]) value).length;
-                if (value instanceof short[])
-                    return 1+ 4+ ((short[]) value).length * 2;
-                if (value instanceof int[])
-                    return 1+ 4+ ((int[]) value).length * 4;
-                if (value instanceof float[])
-                    return 1+ 4+ ((float[]) value).length * 4;
-                if (value instanceof long[])
-                    return 1+ 4+ ((long[]) value).length * 4;
-
-                throw new RuntimeException("Unknown tag array class: " + value.getClass());
-            default:
-                throw new RuntimeException("Unknown tag type: " + (char) type);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java b/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java
deleted file mode 100644
index 1c39ed2..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.digest.ContentDigests;
-import htsjdk.samtools.cram.encoding.ExternalCompressor;
-import htsjdk.samtools.cram.encoding.writer.DataWriterFactory;
-import htsjdk.samtools.cram.encoding.writer.Writer;
-import htsjdk.samtools.cram.io.DefaultBitOutputStream;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.structure.Block;
-import htsjdk.samtools.cram.structure.BlockContentType;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ContainerFactory {
-    private final SAMFileHeader samFileHeader;
-    private int recordsPerSlice = 10000;
-    private boolean preserveReadNames = true;
-    private long globalRecordCounter = 0;
-
-    public ContainerFactory(final SAMFileHeader samFileHeader, final int recordsPerSlice) {
-        this.samFileHeader = samFileHeader;
-        this.recordsPerSlice = recordsPerSlice;
-    }
-
-    public Container buildContainer(final List<CramCompressionRecord> records)
-            throws IllegalArgumentException, IllegalAccessException,
-            IOException {
-        return buildContainer(records, null);
-    }
-
-    Container buildContainer(final List<CramCompressionRecord> records,
-                             final SubstitutionMatrix substitutionMatrix)
-            throws IllegalArgumentException, IllegalAccessException,
-            IOException {
-        // get stats, create compression header and slices
-        final long time1 = System.nanoTime();
-        final CompressionHeader header = new CompressionHeaderFactory().build(records,
-                substitutionMatrix, samFileHeader.getSortOrder() == SAMFileHeader.SortOrder.coordinate);
-        header.APDelta = samFileHeader.getSortOrder() == SAMFileHeader.SortOrder.coordinate;
-        final long time2 = System.nanoTime();
-
-        header.readNamesIncluded = preserveReadNames;
-
-        final List<Slice> slices = new ArrayList<Slice>();
-
-        final Container container = new Container();
-        container.header = header;
-        container.nofRecords = records.size();
-        container.globalRecordCounter = globalRecordCounter;
-        container.bases = 0;
-        container.blockCount = 0;
-
-        final long time3 = System.nanoTime();
-        long lastGlobalRecordCounter = container.globalRecordCounter;
-        for (int i = 0; i < records.size(); i += recordsPerSlice) {
-            final List<CramCompressionRecord> sliceRecords = records.subList(i,
-                    Math.min(records.size(), i + recordsPerSlice));
-            final Slice slice = buildSlice(sliceRecords, header);
-            slice.globalRecordCounter = lastGlobalRecordCounter;
-            lastGlobalRecordCounter += slice.nofRecords;
-            container.bases += slice.bases;
-            slices.add(slice);
-
-            // assuming one sequence per container max:
-            if (container.sequenceId == -1 && slice.sequenceId != -1)
-                container.sequenceId = slice.sequenceId;
-        }
-
-        final long time4 = System.nanoTime();
-
-        container.slices = slices.toArray(new Slice[slices.size()]);
-        calculateAlignmentBoundaries(container);
-
-        container.buildHeaderTime = time2 - time1;
-        container.buildSlicesTime = time4 - time3;
-
-        globalRecordCounter += records.size();
-        return container;
-    }
-
-    private static void calculateAlignmentBoundaries(final Container container) {
-        int start = Integer.MAX_VALUE;
-        int end = Integer.MIN_VALUE;
-        for (final Slice s : container.slices) {
-            if (s.sequenceId != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                start = Math.min(start, s.alignmentStart);
-                end = Math.max(end, s.alignmentStart + s.alignmentSpan);
-            }
-        }
-
-        if (start < Integer.MAX_VALUE) {
-            container.alignmentStart = start;
-            container.alignmentSpan = end - start;
-        }
-    }
-
-    private static Slice buildSlice(final List<CramCompressionRecord> records,
-                                    final CompressionHeader header)
-            throws IllegalArgumentException, IllegalAccessException,
-            IOException {
-        final Map<Integer, ExposedByteArrayOutputStream> map = new HashMap<Integer, ExposedByteArrayOutputStream>();
-        for (final int id : header.externalIds) {
-            map.put(id, new ExposedByteArrayOutputStream());
-        }
-
-        final DataWriterFactory dataWriterFactory = new DataWriterFactory();
-        final ExposedByteArrayOutputStream bitBAOS = new ExposedByteArrayOutputStream();
-        final DefaultBitOutputStream bitOutputStream = new DefaultBitOutputStream(bitBAOS);
-
-        final Slice slice = new Slice();
-        slice.nofRecords = records.size();
-
-        int minAlStart = Integer.MAX_VALUE;
-        int maxAlEnd = SAMRecord.NO_ALIGNMENT_START;
-        {
-            // @formatter:off
-            /*
-             * 1) Count slice bases.
-			 * 2) Decide if the slice is single ref, unmapped or multi reference.
-			 * 3) Detect alignment boundaries for the slice if not multi reference.
-			 */
-            // @formatter:on
-            slice.sequenceId = records.get(0).sequenceId;
-            final ContentDigests hasher = ContentDigests.create(ContentDigests.ALL);
-            for (final CramCompressionRecord record : records) {
-                slice.bases += record.readLength;
-                hasher.add(record);
-                if (slice.sequenceId == Slice.MULTI_REFERENCE) continue;
-
-                if (slice.sequenceId != record.sequenceId) {
-                    slice.sequenceId = Slice.MULTI_REFERENCE;
-                } else if (record.alignmentStart != SAMRecord.NO_ALIGNMENT_START) {
-                    minAlStart = Math.min(record.alignmentStart, minAlStart);
-                    maxAlEnd = Math.max(record.getAlignmentEnd(), maxAlEnd);
-                }
-            }
-
-            slice.sliceTags = hasher.getAsTags();
-        }
-
-        if (slice.sequenceId == Slice.MULTI_REFERENCE
-                || minAlStart == Integer.MAX_VALUE) {
-            slice.alignmentStart = Slice.NO_ALIGNMENT_START;
-            slice.alignmentSpan = Slice.NO_ALIGNMENT_SPAN;
-        } else {
-            slice.alignmentStart = minAlStart;
-            slice.alignmentSpan = maxAlEnd - minAlStart + 1;
-        }
-
-        final Writer writer = dataWriterFactory.buildWriter(bitOutputStream, map, header, slice.sequenceId);
-        int prevAlStart = slice.alignmentStart;
-        for (final CramCompressionRecord record : records) {
-            record.alignmentDelta = record.alignmentStart - prevAlStart;
-            prevAlStart = record.alignmentStart;
-            writer.write(record);
-        }
-
-        bitOutputStream.close();
-        slice.coreBlock = Block.buildNewCore(bitBAOS.toByteArray());
-
-        slice.external = new HashMap<Integer, Block>();
-        for (final Integer key : map.keySet()) {
-            final ExposedByteArrayOutputStream os = map.get(key);
-
-            final Block externalBlock = new Block();
-            externalBlock.setContentId(key);
-            externalBlock.setContentType(BlockContentType.EXTERNAL);
-
-            final ExternalCompressor compressor = header.externalCompressors.get(key);
-            final byte[] rawData = os.toByteArray();
-            final byte[] compressed = compressor.compress(rawData);
-            externalBlock.setContent(rawData, compressed);
-            externalBlock.setMethod(compressor.getMethod());
-            slice.external.put(key, externalBlock);
-        }
-
-        return slice;
-    }
-
-    public boolean isPreserveReadNames() {
-        return preserveReadNames;
-    }
-
-    public void setPreserveReadNames(final boolean preserveReadNames) {
-        this.preserveReadNames = preserveReadNames;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/ContainerParser.java b/src/main/java/htsjdk/samtools/cram/build/ContainerParser.java
deleted file mode 100644
index 050fce7..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/ContainerParser.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.encoding.reader.CramRecordReader;
-import htsjdk.samtools.cram.encoding.reader.DataReaderFactory;
-import htsjdk.samtools.cram.encoding.reader.DataReaderFactory.DataReaderWithStats;
-import htsjdk.samtools.cram.encoding.reader.RefSeqIdReader;
-import htsjdk.samtools.cram.io.DefaultBitInputStream;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.Log.LogLevel;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class ContainerParser {
-    private static final Log log = Log.getInstance(ContainerParser.class);
-
-    private final SAMFileHeader samFileHeader;
-    private final Map<String, Long> nanosecondsMap = new TreeMap<String, Long>();
-
-    public ContainerParser(final SAMFileHeader samFileHeader) {
-        this.samFileHeader = samFileHeader;
-    }
-
-    public List<CramCompressionRecord> getRecords(final Container container,
-                                                  ArrayList<CramCompressionRecord> records, final ValidationStringency validationStringency) throws IllegalArgumentException,
-            IllegalAccessException {
-        if (container.isEOF()) return Collections.emptyList();
-        final long time1 = System.nanoTime();
-        if (records == null) {
-            records = new ArrayList<CramCompressionRecord>(container.nofRecords);
-        }
-
-        for (final Slice slice : container.slices) {
-            records.addAll(getRecords(slice, container.header, validationStringency));
-        }
-
-        final long time2 = System.nanoTime();
-
-        container.parseTime = time2 - time1;
-
-        if (log.isEnabled(LogLevel.DEBUG)) {
-            for (final String key : nanosecondsMap.keySet()) {
-                log.debug(String.format("%s: %dms.", key, nanosecondsMap.get(key) / 1000000));
-            }
-        }
-
-        return records;
-    }
-
-    public Map<Integer, AlignmentSpan> getReferences(final Container container, final ValidationStringency validationStringency) throws IOException {
-        final Map<Integer, AlignmentSpan> containerSpanMap  = new HashMap<>();
-        for (final Slice slice : container.slices) {
-            addAllSpans(containerSpanMap, getReferences(slice, container.header, validationStringency));
-        }
-        return containerSpanMap;
-    }
-
-    private static void addSpan(final int seqId, final int start, final int span, final int count, final Map<Integer, AlignmentSpan> map) {
-        if (map.containsKey(seqId)) {
-            map.get(seqId).add(start, span, count);
-        } else {
-            map.put(seqId, new AlignmentSpan(start, span, count));
-        }
-    }
-
-    private static Map<Integer, AlignmentSpan> addAllSpans(final Map<Integer, AlignmentSpan> spanMap, final Map<Integer, AlignmentSpan> addition) {
-        for (final Map.Entry<Integer, AlignmentSpan> entry:addition.entrySet()) {
-            addSpan(entry.getKey(), entry.getValue().getStart(), entry.getValue().getCount(), entry.getValue().getSpan(), spanMap);
-        }
-        return spanMap;
-    }
-
-    Map<Integer, AlignmentSpan> getReferences(final Slice slice, final CompressionHeader header, final ValidationStringency validationStringency) throws IOException {
-        final Map<Integer, AlignmentSpan> spanMap = new HashMap<>();
-        switch (slice.sequenceId) {
-            case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX:
-                spanMap.put(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, AlignmentSpan.UNMAPPED_SPAN);
-                break;
-            case Slice.MULTI_REFERENCE:
-                final DataReaderFactory dataReaderFactory = new DataReaderFactory();
-                final Map<Integer, InputStream> inputMap = new HashMap<Integer, InputStream>();
-                for (final Integer exId : slice.external.keySet()) {
-                    inputMap.put(exId, new ByteArrayInputStream(slice.external.get(exId)
-                            .getRawContent()));
-                }
-
-                final RefSeqIdReader reader = new RefSeqIdReader(Slice.MULTI_REFERENCE, slice.alignmentStart, validationStringency);
-                dataReaderFactory.buildReader(reader, new DefaultBitInputStream(
-                                new ByteArrayInputStream(slice.coreBlock.getRawContent())),
-                        inputMap, header, slice.sequenceId);
-
-                for (int i = 0; i < slice.nofRecords; i++) {
-                    reader.read();
-                }
-                addAllSpans(spanMap, reader.getReferenceSpans());
-                break;
-            default:
-                addSpan(slice.sequenceId, slice.alignmentStart, slice.alignmentSpan, slice.nofRecords, spanMap);
-                break;
-        }
-        return spanMap;
-    }
-
-    ArrayList<CramCompressionRecord> getRecords(ArrayList<CramCompressionRecord> records,
-                                                final Slice slice, final CompressionHeader header, final ValidationStringency validationStringency) throws IllegalArgumentException,
-            IllegalAccessException {
-        String seqName = SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-        switch (slice.sequenceId) {
-            case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX:
-            case -2:
-                break;
-
-            default:
-                final SAMSequenceRecord sequence = samFileHeader
-                        .getSequence(slice.sequenceId);
-                seqName = sequence.getSequenceName();
-                break;
-        }
-
-        final DataReaderFactory dataReaderFactory = new DataReaderFactory();
-        final Map<Integer, InputStream> inputMap = new HashMap<Integer, InputStream>();
-        for (final Integer exId : slice.external.keySet()) {
-            log.debug("Adding external data: " + exId);
-            inputMap.put(exId, new ByteArrayInputStream(slice.external.get(exId)
-                    .getRawContent()));
-        }
-
-        long time;
-        final CramRecordReader reader = new CramRecordReader(validationStringency);
-        dataReaderFactory.buildReader(reader, new DefaultBitInputStream(
-                        new ByteArrayInputStream(slice.coreBlock.getRawContent())),
-                inputMap, header, slice.sequenceId);
-
-        if (records == null) {
-            records = new ArrayList<CramCompressionRecord>(slice.nofRecords);
-        }
-
-        long readNanos = 0;
-        int prevStart = slice.alignmentStart;
-        for (int i = 0; i < slice.nofRecords; i++) {
-            final CramCompressionRecord record = new CramCompressionRecord();
-            record.sliceIndex = slice.index;
-            record.index = i;
-
-            time = System.nanoTime();
-            reader.read(record);
-            readNanos += System.nanoTime() - time;
-
-            if (record.sequenceId == slice.sequenceId) {
-                record.sequenceName = seqName;
-                record.sequenceId = slice.sequenceId;
-            } else {
-                if (record.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                    record.sequenceName = SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-                } else {
-                    record.sequenceName = samFileHeader.getSequence(record.sequenceId)
-                            .getSequenceName();
-                }
-            }
-
-            records.add(record);
-
-            if (header.APDelta) {
-                prevStart += record.alignmentDelta;
-                record.alignmentStart = prevStart;
-            }
-        }
-        log.debug("Slice records read time: " + readNanos / 1000000);
-
-        final Map<String, DataReaderWithStats> statMap = dataReaderFactory.getStats(reader);
-        for (final String key : statMap.keySet()) {
-            final long value;
-            if (!nanosecondsMap.containsKey(key)) {
-                nanosecondsMap.put(key, 0L);
-                value = 0;
-            } else {
-                value = nanosecondsMap.get(key);
-            }
-            nanosecondsMap.put(key, value + statMap.get(key).nanos);
-        }
-        return records;
-    }
-
-    List<CramCompressionRecord> getRecords(final Slice slice, final CompressionHeader header, final ValidationStringency validationStringency)
-            throws IllegalArgumentException, IllegalAccessException {
-        return getRecords(null, slice, header, validationStringency);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/Cram2SamRecordFactory.java b/src/main/java/htsjdk/samtools/cram/build/Cram2SamRecordFactory.java
deleted file mode 100644
index 699bd2a..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/Cram2SamRecordFactory.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMReadGroupRecord;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.HardClip;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.Padding;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.ReadTag;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-public class Cram2SamRecordFactory {
-
-    private final SAMFileHeader header;
-
-    public Cram2SamRecordFactory(final SAMFileHeader header) {
-        this.header = header;
-    }
-
-    public SAMRecord create(final CramCompressionRecord cramRecord) {
-        final SAMRecord samRecord = new SAMRecord(header);
-
-        samRecord.setReadName(cramRecord.readName);
-        copyFlags(cramRecord, samRecord);
-
-        if (cramRecord.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-            samRecord.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            samRecord.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
-            samRecord.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        } else {
-            samRecord.setReferenceIndex(cramRecord.sequenceId);
-            samRecord.setAlignmentStart(cramRecord.alignmentStart);
-            samRecord.setMappingQuality(cramRecord.mappingQuality);
-        }
-
-        if (cramRecord.isSegmentUnmapped())
-            samRecord.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
-        else
-            samRecord.setCigar(getCigar2(cramRecord.readFeatures,
-                    cramRecord.readLength));
-
-        if (samRecord.getReadPairedFlag()) {
-            samRecord.setMateReferenceIndex(cramRecord.mateSequenceID);
-            samRecord
-                    .setMateAlignmentStart(cramRecord.mateAlignmentStart > 0 ? cramRecord.mateAlignmentStart : SAMRecord
-                            .NO_ALIGNMENT_START);
-            samRecord.setMateNegativeStrandFlag(cramRecord.isMateNegativeStrand());
-            samRecord.setMateUnmappedFlag(cramRecord.isMateUnmapped());
-        } else {
-            samRecord
-                    .setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            samRecord.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-        }
-
-        samRecord.setInferredInsertSize(cramRecord.templateSize);
-        samRecord.setReadBases(cramRecord.readBases);
-        samRecord.setBaseQualities(cramRecord.qualityScores);
-
-        if (cramRecord.tags != null)
-            for (final ReadTag tag : cramRecord.tags)
-                samRecord.setAttribute(tag.getKey(), tag.getValue());
-
-        if (cramRecord.readGroupID > -1) {
-            final SAMReadGroupRecord readGroupRecord = header.getReadGroups().get(
-                    cramRecord.readGroupID);
-            samRecord.setAttribute("RG", readGroupRecord.getId());
-        }
-
-        return samRecord;
-    }
-
-    private static void copyFlags(final CramCompressionRecord cramRecord, final SAMRecord samRecord) {
-        samRecord.setReadPairedFlag(cramRecord.isMultiFragment());
-        samRecord.setProperPairFlag(cramRecord.isProperPair());
-        samRecord.setReadUnmappedFlag(cramRecord.isSegmentUnmapped());
-        samRecord.setReadNegativeStrandFlag(cramRecord.isNegativeStrand());
-        samRecord.setFirstOfPairFlag(cramRecord.isFirstSegment());
-        samRecord.setSecondOfPairFlag(cramRecord.isLastSegment());
-        samRecord.setNotPrimaryAlignmentFlag(cramRecord.isSecondaryAlignment());
-        samRecord.setReadFailsVendorQualityCheckFlag(cramRecord.isVendorFiltered());
-        samRecord.setDuplicateReadFlag(cramRecord.isDuplicate());
-        samRecord.setSupplementaryAlignmentFlag(cramRecord.isSupplementary());
-    }
-
-    private static Cigar getCigar2(final Collection<ReadFeature> features,
-                                   final int readLength) {
-        if (features == null || features.isEmpty()) {
-            final CigarElement cigarElement = new CigarElement(readLength, CigarOperator.M);
-            return new Cigar(Collections.singletonList(cigarElement));
-        }
-
-        final List<CigarElement> list = new ArrayList<CigarElement>();
-        int totalOpLen = 1;
-        CigarElement cigarElement;
-        CigarOperator lastOperator = CigarOperator.MATCH_OR_MISMATCH;
-        int lastOpLen = 0;
-        int lastOpPos = 1;
-        CigarOperator cigarOperator;
-        int readFeatureLength;
-        for (final ReadFeature feature : features) {
-
-            final int gap = feature.getPosition() - (lastOpPos + lastOpLen);
-            if (gap > 0) {
-                if (lastOperator != CigarOperator.MATCH_OR_MISMATCH) {
-                    list.add(new CigarElement(lastOpLen, lastOperator));
-                    lastOpPos += lastOpLen;
-                    totalOpLen += lastOpLen;
-                    lastOpLen = gap;
-                } else {
-                    lastOpLen += gap;
-                }
-
-                lastOperator = CigarOperator.MATCH_OR_MISMATCH;
-            }
-
-            switch (feature.getOperator()) {
-                case Insertion.operator:
-                    cigarOperator = CigarOperator.INSERTION;
-                    readFeatureLength = ((Insertion) feature).getSequence().length;
-                    break;
-                case SoftClip.operator:
-                    cigarOperator = CigarOperator.SOFT_CLIP;
-                    readFeatureLength = ((SoftClip) feature).getSequence().length;
-                    break;
-                case HardClip.operator:
-                    cigarOperator = CigarOperator.HARD_CLIP;
-                    readFeatureLength = ((HardClip) feature).getLength();
-                    break;
-                case InsertBase.operator:
-                    cigarOperator = CigarOperator.INSERTION;
-                    readFeatureLength = 1;
-                    break;
-                case Deletion.operator:
-                    cigarOperator = CigarOperator.DELETION;
-                    readFeatureLength = ((Deletion) feature).getLength();
-                    break;
-                case RefSkip.operator:
-                    cigarOperator = CigarOperator.SKIPPED_REGION;
-                    readFeatureLength = ((RefSkip) feature).getLength();
-                    break;
-                case Padding.operator:
-                    cigarOperator = CigarOperator.PADDING;
-                    readFeatureLength = ((Padding) feature).getLength();
-                    break;
-                case Substitution.operator:
-                case ReadBase.operator:
-                    cigarOperator = CigarOperator.MATCH_OR_MISMATCH;
-                    readFeatureLength = 1;
-                    break;
-                default:
-                    continue;
-            }
-
-            if (lastOperator != cigarOperator) {
-                // add last feature
-                if (lastOpLen > 0) {
-                    list.add(new CigarElement(lastOpLen, lastOperator));
-                    totalOpLen += lastOpLen;
-                }
-                lastOperator = cigarOperator;
-                lastOpLen = readFeatureLength;
-                lastOpPos = feature.getPosition();
-            } else
-                lastOpLen += readFeatureLength;
-
-            if (!cigarOperator.consumesReadBases())
-                lastOpPos -= readFeatureLength;
-        }
-
-        if (lastOperator != null) {
-            if (lastOperator != CigarOperator.M) {
-                list.add(new CigarElement(lastOpLen, lastOperator));
-                if (readLength >= lastOpPos + lastOpLen) {
-                    cigarElement = new CigarElement(readLength - (lastOpLen + lastOpPos)
-                            + 1, CigarOperator.M);
-                    list.add(cigarElement);
-                }
-            } else if (readLength == 0 || readLength > lastOpPos - 1) {
-                if (readLength == 0)
-                    cigarElement = new CigarElement(lastOpLen, CigarOperator.M);
-                else
-                    cigarElement = new CigarElement(readLength - lastOpPos + 1,
-                            CigarOperator.M);
-                list.add(cigarElement);
-            }
-        }
-
-        if (list.isEmpty()) {
-            cigarElement = new CigarElement(readLength, CigarOperator.M);
-            return new Cigar(Collections.singletonList(cigarElement));
-        }
-
-        return new Cigar(list);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/CramContainerIterator.java b/src/main/java/htsjdk/samtools/cram/build/CramContainerIterator.java
deleted file mode 100644
index a38e6b8..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/CramContainerIterator.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.cram.io.CountingInputStream;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramHeader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-
-/**
- * An iterator of CRAM containers read from an {@link java.io.InputStream}.
- */
-public class CramContainerIterator implements Iterator<Container> {
-    private CramHeader cramHeader;
-    private InputStream inputStream;
-    private Container nextContainer;
-    private boolean eof = false;
-    private long offset = 0;
-
-    public CramContainerIterator(final InputStream inputStream) throws IOException {
-        cramHeader = CramIO.readCramHeader(inputStream);
-        this.inputStream = inputStream;
-    }
-
-    void readNextContainer() {
-        try {
-            final CountingInputStream cis = new CountingInputStream(inputStream);
-            nextContainer = ContainerIO.readContainer(cramHeader.getVersion(), cis);
-            final long containerSizeInBytes = cis.getCount();
-
-            nextContainer.offset = offset;
-            offset += containerSizeInBytes;
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        if (nextContainer.isEOF()) {
-            eof = true;
-            nextContainer = null;
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        if (eof) return false;
-        if (nextContainer == null) readNextContainer();
-        return !eof;
-    }
-
-    @Override
-    public Container next() {
-        final Container result = nextContainer;
-        nextContainer = null;
-        return result;
-    }
-
-    @Override
-    public void remove() {
-        throw new RuntimeException("Read only iterator.");
-    }
-
-    public CramHeader getCramHeader() {
-        return cramHeader;
-    }
-
-    public void close() {
-        nextContainer = null;
-        cramHeader = null;
-        //noinspection EmptyCatchBlock
-        try {
-            inputStream.close();
-        } catch (final Exception e) {
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/CramIO.java b/src/main/java/htsjdk/samtools/cram/build/CramIO.java
deleted file mode 100644
index 04ac339..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/CramIO.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMTextHeaderCodec;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.io.CountingInputStream;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.cram.structure.Block;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.BufferedLineReader;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-
-/**
- * A collection of methods to open and close CRAM files.
- */
-public class CramIO {
-    public static final String CRAM_FILE_EXTENSION = ".cram";
-    /**
-     * The 'zero-B' EOF marker as per CRAM specs v2.1. This is basically a serialized empty CRAM container with sequence id set to some
-     * number to spell out 'EOF' in hex.
-     */
-    public static final byte[] ZERO_B_EOF_MARKER = bytesFromHex("0b 00 00 00 ff ff ff ff ff e0 45 4f 46 00 00 00 00 01 00 00 01 00 06 06 01 00 " +
-            "" + "01 00 01 00");
-    /**
-     * The zero-F EOF marker as per CRAM specs v3.0. This is basically a serialized empty CRAM container with sequence id set to some number
-     * to spell out 'EOF' in hex.
-     */
-    public static final byte[] ZERO_F_EOF_MARKER = bytesFromHex("0f 00 00 00 ff ff ff ff 0f e0 45 4f 46 00 00 00 00 01 00 05 bd d9 4f 00 01 00 " +
-            "" + "06 06 01 00 01 00 01 00 ee 63 01 4b");
-
-
-    private static final int DEFINITION_LENGTH = 4 + 1 + 1 + 20;
-    private static final Log log = Log.getInstance(CramIO.class);
-
-    private static byte[] bytesFromHex(final String string) {
-        final String clean = string.replaceAll("[^0-9a-fA-F]", "");
-        if (clean.length() % 2 != 0) throw new RuntimeException("Not a hex string: " + string);
-        final byte[] data = new byte[clean.length() / 2];
-        for (int i = 0; i < clean.length(); i += 2) {
-            data[i / 2] = (Integer.decode("0x" + clean.charAt(i) + clean.charAt(i + 1))).byteValue();
-        }
-        return data;
-    }
-
-    /**
-     * Write an end-of-file marker to the {@link OutputStream}. The specific EOF marker is chosen based on the CRAM version.
-     *
-     * @param version      the CRAM version to assume
-     * @param outputStream the stream to write to
-     * @return the number of bytes written out
-     * @throws IOException as per java IO contract
-     */
-    public static long issueEOF(final Version version, final OutputStream outputStream) throws IOException {
-        if (version.compatibleWith(CramVersions.CRAM_v3)) {
-            outputStream.write(ZERO_F_EOF_MARKER);
-            return ZERO_F_EOF_MARKER.length;
-        }
-
-        if (version.compatibleWith(CramVersions.CRAM_v2_1)) {
-            outputStream.write(ZERO_B_EOF_MARKER);
-            return ZERO_B_EOF_MARKER.length;
-        }
-        return 0;
-    }
-
-    /**
-     * Write a CRAM File header and a SAM Header to an output stream.
-     *
-     * @param cramVersion
-     * @param outStream
-     * @param samFileHeader
-     * @param cramID
-     * @return the offset in the stream after writing the headers
-     */
-
-    public static long writeHeader(final Version cramVersion, final OutputStream outStream, final SAMFileHeader samFileHeader, String cramID) {
-        final CramHeader cramHeader = new CramHeader(cramVersion, cramID, samFileHeader);
-        try {
-            return CramIO.writeCramHeader(cramHeader, outStream);
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    private static boolean streamEndsWith(final SeekableStream seekableStream, final byte[] marker) throws IOException {
-        final byte[] tail = new byte[marker.length];
-
-        seekableStream.seek(seekableStream.length() - marker.length);
-        InputStreamUtils.readFully(seekableStream, tail, 0, tail.length);
-
-        if (Arrays.equals(tail, marker)) return true ;
-        // relaxing the ITF8 hanging bits:
-        tail[8] = marker[8];
-        return Arrays.equals(tail, marker);
-    }
-
-    /**
-     * Check if the {@link SeekableStream} is properly terminated with a end-of-file marker.
-     *
-     * @param version        CRAM version to assume
-     * @param seekableStream the stream to read from
-     * @return true if the stream ends with a correct EOF marker, false otherwise
-     * @throws IOException as per java IO contract
-     */
-    @SuppressWarnings("SimplifiableIfStatement")
-    private static boolean checkEOF(final Version version, final SeekableStream seekableStream) throws IOException {
-
-        if (version.compatibleWith(CramVersions.CRAM_v3)) return streamEndsWith(seekableStream, ZERO_F_EOF_MARKER);
-        if (version.compatibleWith(CramVersions.CRAM_v2_1)) return streamEndsWith(seekableStream, ZERO_B_EOF_MARKER);
-
-        return false;
-    }
-
-    /**
-     * Check if the file: 1) contains proper CRAM header. 2) given the version info from the header check the end of file marker.
-     *
-     * @param file the CRAM file to check
-     * @return true if the file is a valid CRAM file and is properly terminated with respect to the version.
-     * @throws IOException as per java IO contract
-     */
-    public static boolean checkHeaderAndEOF(final File file) throws IOException {
-        final SeekableStream seekableStream = new SeekableFileStream(file);
-        final CramHeader cramHeader = readCramHeader(seekableStream);
-        return checkEOF(cramHeader.getVersion(), seekableStream);
-    }
-
-    /**
-     * Writes CRAM header into the specified {@link OutputStream}.
-     *
-     * @param cramHeader the {@link CramHeader} object to write
-     * @param outputStream         the output stream to write to
-     * @return the number of bytes written out
-     * @throws IOException as per java IO contract
-     */
-    public static long writeCramHeader(final CramHeader cramHeader, final OutputStream outputStream) throws IOException {
-//        if (cramHeader.getVersion().major < 3) throw new RuntimeException("Deprecated CRAM version: " + cramHeader.getVersion().major);
-        outputStream.write("CRAM".getBytes("US-ASCII"));
-        outputStream.write(cramHeader.getVersion().major);
-        outputStream.write(cramHeader.getVersion().minor);
-        outputStream.write(cramHeader.getId());
-        for (int i = cramHeader.getId().length; i < 20; i++)
-            outputStream.write(0);
-
-        final long length = CramIO.writeContainerForSamFileHeader(cramHeader.getVersion().major, cramHeader.getSamFileHeader(), outputStream);
-
-        return CramIO.DEFINITION_LENGTH + length;
-    }
-
-    private static CramHeader readFormatDefinition(final InputStream inputStream) throws IOException {
-        for (final byte magicByte : CramHeader.MAGIC) {
-            if (magicByte != inputStream.read()) throw new RuntimeException("Unknown file format.");
-        }
-
-        final Version version = new Version(inputStream.read(), inputStream.read(), 0);
-
-        final CramHeader header = new CramHeader(version, null, null);
-
-        final DataInputStream dataInputStream = new DataInputStream(inputStream);
-        dataInputStream.readFully(header.getId());
-
-        return header;
-    }
-
-    /**
-     * Read CRAM header from the given {@link InputStream}.
-     *
-     * @param inputStream input stream to read from
-     * @return complete {@link CramHeader} object
-     * @throws IOException as per java IO contract
-     */
-    public static CramHeader readCramHeader(final InputStream inputStream) throws IOException {
-        final CramHeader header = readFormatDefinition(inputStream);
-
-        final SAMFileHeader samFileHeader = readSAMFileHeader(header.getVersion(), inputStream, new String(header.getId()));
-
-        return new CramHeader(header.getVersion(), new String(header.getId()), samFileHeader);
-    }
-
-    private static byte[] toByteArray(final SAMFileHeader samFileHeader) {
-        final ExposedByteArrayOutputStream headerBodyOS = new ExposedByteArrayOutputStream();
-        final OutputStreamWriter outStreamWriter = new OutputStreamWriter(headerBodyOS);
-        new SAMTextHeaderCodec().encode(outStreamWriter, samFileHeader);
-        try {
-            outStreamWriter.close();
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        final ByteBuffer buf = ByteBuffer.allocate(4);
-        buf.order(ByteOrder.LITTLE_ENDIAN);
-        buf.putInt(headerBodyOS.size());
-        buf.flip();
-        final byte[] bytes = new byte[buf.limit()];
-        buf.get(bytes);
-
-        final ByteArrayOutputStream headerOS = new ByteArrayOutputStream();
-        try {
-            headerOS.write(bytes);
-            headerOS.write(headerBodyOS.getBuffer(), 0, headerBodyOS.size());
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        return headerOS.toByteArray();
-    }
-
-    private static long writeContainerForSamFileHeader(final int major, final SAMFileHeader samFileHeader, final OutputStream os) throws IOException {
-        final byte[] data = toByteArray(samFileHeader);
-        final int length = Math.max(1024, data.length + data.length / 2);
-        final byte[] blockContent = new byte[length];
-        System.arraycopy(data, 0, blockContent, 0, Math.min(data.length, length));
-        final Block block = Block.buildNewFileHeaderBlock(blockContent);
-
-        final Container container = new Container();
-        container.blockCount = 1;
-        container.blocks = new Block[]{block};
-        container.landmarks = new int[0];
-        container.slices = new Slice[0];
-        container.alignmentSpan = Slice.NO_ALIGNMENT_SPAN;
-        container.alignmentStart = Slice.NO_ALIGNMENT_START;
-        container.bases = 0;
-        container.globalRecordCounter = 0;
-        container.nofRecords = 0;
-        container.sequenceId = 0;
-
-        final ExposedByteArrayOutputStream byteArrayOutputStream = new ExposedByteArrayOutputStream();
-        block.write(major, byteArrayOutputStream);
-        container.containerByteSize = byteArrayOutputStream.size();
-
-        final int containerHeaderByteSize = ContainerIO.writeContainerHeader(major, container, os);
-        os.write(byteArrayOutputStream.getBuffer(), 0, byteArrayOutputStream.size());
-
-        return containerHeaderByteSize + byteArrayOutputStream.size();
-    }
-
-    private static SAMFileHeader readSAMFileHeader(final Version version, InputStream inputStream, final String id) throws IOException {
-        final Container container = ContainerIO.readContainerHeader(version.major, inputStream);
-        final Block block;
-        {
-            if (version.compatibleWith(CramVersions.CRAM_v3)) {
-                final byte[] bytes = new byte[container.containerByteSize];
-                InputStreamUtils.readFully(inputStream, bytes, 0, bytes.length);
-                block = Block.readFromInputStream(version.major, new ByteArrayInputStream(bytes));
-                // ignore the rest of the container
-            } else {
-                /*
-                 * pending issue: container.containerByteSize inputStream 2 bytes shorter
-				 * then needed in the v21 test cram files.
-				 */
-                block = Block.readFromInputStream(version.major, inputStream);
-            }
-        }
-
-        inputStream = new ByteArrayInputStream(block.getRawContent());
-
-        final ByteBuffer buffer = ByteBuffer.allocate(4);
-        buffer.order(ByteOrder.LITTLE_ENDIAN);
-        for (int i = 0; i < 4; i++)
-            buffer.put((byte) inputStream.read());
-        buffer.flip();
-        final int size = buffer.asIntBuffer().get();
-
-        final DataInputStream dataInputStream = new DataInputStream(inputStream);
-        final byte[] bytes = new byte[size];
-        dataInputStream.readFully(bytes);
-
-        final BufferedLineReader bufferedLineReader = new BufferedLineReader(new ByteArrayInputStream(bytes));
-        final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-        return codec.decode(bufferedLineReader, id);
-    }
-
-    /**
-     * Attempt to replace the SAM file header in the CRAM file. This will succeed only if there is sufficient space reserved in the existing
-     * CRAM header. The implementation re-writes the first FILE_HEADER block in the first container of the CRAM file using random file
-     * access.
-     *
-     * @param file      the CRAM file
-     * @param newHeader the new CramHeader container a new SAM file header
-     * @return true if successfully replaced the header, false otherwise
-     * @throws IOException as per java IO contract
-     */
-    public static boolean replaceCramHeader(final File file, final CramHeader newHeader) throws IOException {
-
-        final CountingInputStream countingInputStream = new CountingInputStream(new FileInputStream(file));
-
-        final CramHeader header = readFormatDefinition(countingInputStream);
-        final Container c = ContainerIO.readContainerHeader(header.getVersion().major, countingInputStream);
-        final long pos = countingInputStream.getCount();
-        countingInputStream.close();
-
-        final Block block = Block.buildNewFileHeaderBlock(toByteArray(newHeader.getSamFileHeader()));
-        final ExposedByteArrayOutputStream byteArrayOutputStream = new ExposedByteArrayOutputStream();
-        block.write(newHeader.getVersion().major, byteArrayOutputStream);
-        if (byteArrayOutputStream.size() > c.containerByteSize) {
-            log.error("Failed to replace CRAM header because the new header does not fit.");
-            return false;
-        }
-        final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
-        randomAccessFile.seek(pos);
-        randomAccessFile.write(byteArrayOutputStream.getBuffer(), 0, byteArrayOutputStream.size());
-        randomAccessFile.close();
-        return true;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/CramNormalizer.java b/src/main/java/htsjdk/samtools/cram/build/CramNormalizer.java
deleted file mode 100644
index 1be1aa5..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/CramNormalizer.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.ref.CRAMReferenceSource;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-import htsjdk.samtools.util.Log;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class CramNormalizer {
-    private final SAMFileHeader header;
-    private int readCounter = 0;
-
-    private static Log log = Log.getInstance(CramNormalizer.class);
-    private CRAMReferenceSource referenceSource;
-
-    private CramNormalizer(final SAMFileHeader header) {
-        this.header = header;
-    }
-
-    public CramNormalizer(final SAMFileHeader header, final CRAMReferenceSource referenceSource) {
-        if (referenceSource == null) {
-            throw new IllegalArgumentException("A reference is required.");
-        }
-        this.header = header;
-        this.referenceSource = referenceSource;
-    }
-
-    public void normalize(final ArrayList<CramCompressionRecord> records,
-                          final byte[] ref, final int refOffset_zeroBased,
-                          final SubstitutionMatrix substitutionMatrix) {
-
-        final int startCounter = readCounter;
-
-        for (final CramCompressionRecord record : records) {
-            record.index = ++readCounter;
-
-            if (record.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                record.sequenceName = SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-                record.alignmentStart = SAMRecord.NO_ALIGNMENT_START;
-            } else {
-                record.sequenceName = header.getSequence(record.sequenceId)
-                        .getSequenceName();
-            }
-        }
-
-        {// restore pairing first:
-            for (final CramCompressionRecord record : records) {
-                if (!record.isMultiFragment() || record.isDetached()) {
-                    record.recordsToNextFragment = -1;
-
-                    record.next = null;
-                    record.previous = null;
-                    continue;
-                }
-                if (record.isHasMateDownStream()) {
-                    final CramCompressionRecord downMate = records.get(record.index
-                            + record.recordsToNextFragment - startCounter);
-                    record.next = downMate;
-                    downMate.previous = record;
-                }
-            }
-            for (final CramCompressionRecord record : records) {
-                if (record.previous != null) continue;
-                if (record.next == null) continue;
-                restoreMateInfo(record);
-            }
-        }
-
-        // assign some read names if needed:
-        for (final CramCompressionRecord record : records) {
-            if (record.readName == null) {
-                final String readNamePrefix = "";
-                final String name = readNamePrefix + record.index;
-                record.readName = name;
-                if (record.next != null)
-                    record.next.readName = name;
-                if (record.previous != null)
-                    record.previous.readName = name;
-            }
-        }
-
-        // resolve bases:
-        for (final CramCompressionRecord record : records) {
-            if (record.isSegmentUnmapped())
-                continue;
-
-            byte[] refBases = ref;
-            {
-                // ref could be supplied (aka forced) already or needs looking up:
-                // ref.length=0 is a special case of seqId=-2 (multiref)
-                if ((ref == null || ref.length == 0) && referenceSource != null)
-                    refBases = referenceSource.getReferenceBases(
-                            header.getSequence(record.sequenceId), true);
-            }
-
-            if (record.isUnknownBases()) {
-                record.readBases = SAMRecord.NULL_SEQUENCE;
-            } else
-                record.readBases = restoreReadBases(record, refBases, refOffset_zeroBased,
-                        substitutionMatrix);
-        }
-
-        // restore quality scores:
-        final byte defaultQualityScore = '?' - '!';
-        restoreQualityScores(defaultQualityScore, records);
-    }
-
-    private static void restoreMateInfo(final CramCompressionRecord record) {
-        if (record.next == null) {
-
-            return;
-        }
-        CramCompressionRecord cur;
-        cur = record;
-        while (cur.next != null) {
-            setNextMate(cur, cur.next);
-            cur = cur.next;
-        }
-
-        // cur points to the last segment now:
-        final CramCompressionRecord last = cur;
-        setNextMate(last, record);
-//        record.setFirstSegment(true);
-//        last.setLastSegment(true);
-
-        final int templateLength = computeInsertSize(record, last);
-        record.templateSize = templateLength;
-        last.templateSize = -templateLength;
-    }
-
-    private static void setNextMate(final CramCompressionRecord record, final CramCompressionRecord next) {
-        record.mateAlignmentStart = next.alignmentStart;
-        record.setMateUnmapped(next.isSegmentUnmapped());
-        record.setMateNegativeStrand(next.isNegativeStrand());
-        record.mateSequenceID = next.sequenceId;
-        if (record.mateSequenceID == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX)
-            record.mateAlignmentStart = SAMRecord.NO_ALIGNMENT_START;
-    }
-
-    public static void restoreQualityScores(final byte defaultQualityScore,
-                                            final List<CramCompressionRecord> records) {
-        for (final CramCompressionRecord record : records)
-            restoreQualityScores(defaultQualityScore, record);
-    }
-
-    private static byte[] restoreQualityScores(final byte defaultQualityScore,
-                                               final CramCompressionRecord record) {
-        if (!record.isForcePreserveQualityScores()) {
-            boolean star = true;
-            final byte[] scores = new byte[record.readLength];
-            Arrays.fill(scores, defaultQualityScore);
-            if (record.readFeatures != null)
-                for (final ReadFeature feature : record.readFeatures) {
-                    switch (feature.getOperator()) {
-                        case BaseQualityScore.operator:
-                            int pos = feature.getPosition();
-                            scores[pos - 1] = ((BaseQualityScore) feature).getQualityScore();
-                            star = false;
-                            break;
-                        case ReadBase.operator:
-                            pos = feature.getPosition();
-                            scores[pos - 1] = ((ReadBase) feature).getQualityScore();
-                            star = false;
-                            break;
-
-                        default:
-                            break;
-                    }
-                }
-
-            if (star)
-                record.qualityScores = SAMRecord.NULL_QUALS;
-            else
-                record.qualityScores = scores;
-        } else {
-            final byte[] scores = record.qualityScores;
-            int missingScores = 0;
-            for (int i = 0; i < scores.length; i++)
-                if (scores[i] == -1) {
-                    scores[i] = defaultQualityScore;
-                    missingScores++;
-                }
-            if (missingScores == scores.length)
-                record.qualityScores = SAMRecord.NULL_QUALS;
-        }
-
-        return record.qualityScores;
-    }
-
-    private static byte[] restoreReadBases(final CramCompressionRecord record, final byte[] ref,
-                                           final int refOffsetZeroBased, final SubstitutionMatrix substitutionMatrix) {
-        if (record.isUnknownBases() || record.readLength == 0) return SAMRecord.NULL_SEQUENCE;
-        final int readLength = record.readLength;
-        final byte[] bases = new byte[readLength];
-
-        int posInRead = 1;
-        final int alignmentStart = record.alignmentStart - 1;
-
-        int posInSeq = 0;
-        if (record.readFeatures == null || record.readFeatures.isEmpty()) {
-            if (ref.length + refOffsetZeroBased < alignmentStart
-                    + bases.length) {
-                Arrays.fill(bases, (byte) 'N');
-                System.arraycopy(
-                        ref,
-                        alignmentStart - refOffsetZeroBased,
-                        bases,
-                        0,
-                        Math.min(bases.length, ref.length + refOffsetZeroBased
-                                - alignmentStart));
-            } else
-                System.arraycopy(ref, alignmentStart - refOffsetZeroBased,
-                        bases, 0, bases.length);
-            return bases;
-        }
-        final List<ReadFeature> variations = record.readFeatures;
-        for (final ReadFeature variation : variations) {
-            for (; posInRead < variation.getPosition(); posInRead++) {
-                final int rp = alignmentStart + posInSeq++ - refOffsetZeroBased;
-                bases[posInRead - 1] = getByteOrDefault(ref, rp, (byte) 'N');
-            }
-
-            switch (variation.getOperator()) {
-                case Substitution.operator:
-                    final Substitution substitution = (Substitution) variation;
-                    byte refBase = getByteOrDefault(ref, alignmentStart + posInSeq
-                            - refOffsetZeroBased, (byte) 'N');
-                    refBase = Utils.normalizeBase(refBase);
-                    final byte base = substitutionMatrix.base(refBase, substitution.getCode());
-                    substitution.setBase(base);
-                    substitution.setReferenceBase(refBase);
-                    bases[posInRead++ - 1] = base;
-                    posInSeq++;
-                    break;
-                case Insertion.operator:
-                    final Insertion insertion = (Insertion) variation;
-                    for (int i = 0; i < insertion.getSequence().length; i++)
-                        bases[posInRead++ - 1] = insertion.getSequence()[i];
-                    break;
-                case SoftClip.operator:
-                    final SoftClip softClip = (SoftClip) variation;
-                    for (int i = 0; i < softClip.getSequence().length; i++)
-                        bases[posInRead++ - 1] = softClip.getSequence()[i];
-                    break;
-                case Deletion.operator:
-                    final Deletion deletion = (Deletion) variation;
-                    posInSeq += deletion.getLength();
-                    break;
-                case InsertBase.operator:
-                    final InsertBase insert = (InsertBase) variation;
-                    bases[posInRead++ - 1] = insert.getBase();
-                    break;
-                case RefSkip.operator:
-                    posInSeq += ((RefSkip) variation).getLength();
-                    break;
-            }
-        }
-        for (; posInRead <= readLength
-                && alignmentStart + posInSeq - refOffsetZeroBased < ref.length; posInRead++, posInSeq++) {
-            bases[posInRead - 1] = ref[alignmentStart + posInSeq
-                    - refOffsetZeroBased];
-        }
-
-        // ReadBase overwrites bases:
-        for (final ReadFeature variation : variations) {
-            switch (variation.getOperator()) {
-                case ReadBase.operator:
-                    final ReadBase readBase = (ReadBase) variation;
-                    bases[variation.getPosition() - 1] = readBase.getBase();
-                    break;
-                default:
-                    break;
-            }
-        }
-
-        for (int i = 0; i < bases.length; i++) {
-            bases[i] = Utils.normalizeBase(bases[i]);
-        }
-
-        return bases;
-    }
-
-    private static byte getByteOrDefault(final byte[] array, final int pos,
-                                         final byte outOfBoundsValue) {
-        if (pos >= array.length)
-            return outOfBoundsValue;
-        else
-            return array[pos];
-    }
-
-    /**
-     * The method is similar in semantics to
-     * {@link htsjdk.samtools.SamPairUtil#computeInsertSize(SAMRecord, SAMRecord)
-     * computeInsertSize} but operates on CRAM native records instead of
-     * SAMRecord objects.
-     *
-     * @param firstEnd  first mate of the pair
-     * @param secondEnd second mate of the pair
-     * @return template length
-     */
-    public static int computeInsertSize(final CramCompressionRecord firstEnd,
-                                        final CramCompressionRecord secondEnd) {
-        if (firstEnd.isSegmentUnmapped() || secondEnd.isSegmentUnmapped()) {
-            return 0;
-        }
-        if (firstEnd.sequenceId != secondEnd.sequenceId) {
-            return 0;
-        }
-
-        final int firstEnd5PrimePosition = firstEnd.isNegativeStrand() ? firstEnd.getAlignmentEnd() : firstEnd.alignmentStart;
-        final int secondEnd5PrimePosition = secondEnd.isNegativeStrand() ? secondEnd.getAlignmentEnd() : secondEnd.alignmentStart;
-
-        final int adjustment = (secondEnd5PrimePosition >= firstEnd5PrimePosition) ? +1 : -1;
-        return secondEnd5PrimePosition - firstEnd5PrimePosition + adjustment;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/CramSpanContainerIterator.java b/src/main/java/htsjdk/samtools/cram/build/CramSpanContainerIterator.java
deleted file mode 100644
index 2956cda..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/CramSpanContainerIterator.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * An iterator of CRAM containers read from locations in {@link htsjdk.samtools.seekablestream.SeekableStream}. The locations are specified with
- * pairs of coordinates, they are basically file pointers as returned for example by {@link htsjdk.samtools.SamReader.Indexing#getFilePointerSpanningReads()}
- */
-public class CramSpanContainerIterator implements Iterator<Container> {
-    private final CramHeader cramHeader;
-    private final SeekableStream seekableStream;
-    private Iterator<Boundary> containerBoundaries;
-    private Boundary currentBoundary;
-    private long firstContainerOffset;
-
-    private CramSpanContainerIterator(final SeekableStream seekableStream, final long[] coordinates) throws IOException {
-        this.seekableStream = seekableStream;
-        seekableStream.seek(0);
-        this.cramHeader = CramIO.readCramHeader(seekableStream);
-        firstContainerOffset = seekableStream.position();
-
-        final List<Boundary> boundaries = new ArrayList<Boundary>();
-        for (int i = 0; i < coordinates.length; i += 2) {
-            boundaries.add(new Boundary(coordinates[i], coordinates[i + 1]));
-        }
-
-        containerBoundaries = boundaries.iterator();
-        currentBoundary = containerBoundaries.next();
-    }
-
-    public static CramSpanContainerIterator fromFileSpan(final SeekableStream seekableStream, final long[] coordinates) throws IOException {
-        return new CramSpanContainerIterator(seekableStream, coordinates);
-    }
-
-    @Override
-    public boolean hasNext() {
-        try {
-            if (currentBoundary.hasNext()) return true;
-            if (!containerBoundaries.hasNext()) return false;
-            currentBoundary = containerBoundaries.next();
-            return currentBoundary.hasNext();
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public Container next() {
-        try {
-            return currentBoundary.next();
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void remove() {
-        throw new RuntimeException("Not allowed.");
-    }
-
-    public CramHeader getCramHeader() {
-        return cramHeader;
-    }
-
-    private class Boundary {
-        final long start;
-        final long end;
-
-        public Boundary(final long start, final long end) {
-            this.start = start;
-            this.end = end;
-            if (start >= end) throw new RuntimeException("Boundary start is greater than end.");
-        }
-
-        boolean hasNext() throws IOException {
-            return seekableStream.position() <= (end >> 16);
-        }
-
-        Container next() throws IOException {
-            if (seekableStream.position() < (start >> 16)) seekableStream.seek(start >> 16);
-            if (seekableStream.position() > (end >> 16)) throw new RuntimeException("No more containers in this boundary.");
-            final long offset = seekableStream.position();
-            final Container c = ContainerIO.readContainer(cramHeader.getVersion(), seekableStream);
-            c.offset = offset;
-            return c;
-        }
-    }
-
-    public long getFirstContainerOffset() {
-        return firstContainerOffset;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/Sam2CramRecordFactory.java b/src/main/java/htsjdk/samtools/cram/build/Sam2CramRecordFactory.java
deleted file mode 100644
index b7ffcb1..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/Sam2CramRecordFactory.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMReadGroupRecord;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecord.SAMTagAndValue;
-import htsjdk.samtools.SAMTag;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.HardClip;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Padding;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.ReadTag;
-import htsjdk.samtools.util.Log;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-public class Sam2CramRecordFactory {
-
-    public static final String UNKNOWN_READ_GROUP_ID = "UNKNOWN";
-    public static final String UNKNOWN_READ_GROUP_SAMPLE = "UNKNOWN";
-
-    private final static byte QS_asciiOffset = 33;
-    public final static byte unsetQualityScore = 32;
-    public final static byte ignorePositionsWithQualityScore = -1;
-
-    private byte[] refBases;
-    private final Version version;
-    private byte[] refSNPs;
-
-    final private SAMFileHeader header;
-
-    private static final Log log = Log.getInstance(Sam2CramRecordFactory.class);
-
-    private final Map<String, Integer> readGroupMap = new HashMap<String, Integer>();
-
-    private long landedRefMaskScores = 0;
-    private long landedTotalScores = 0;
-
-    public boolean captureAllTags = false;
-    public boolean preserveReadNames = false;
-    public final Set<String> captureTags = new TreeSet<String>();
-    public final Set<String> ignoreTags = new TreeSet<String>();
-
-    {
-        ignoreTags.add(SAMTag.RG.name());
-    }
-
-    private final List<ReadTag> readTagList = new ArrayList<ReadTag>();
-
-    private long baseCount = 0;
-    private long featureCount = 0;
-
-    public Sam2CramRecordFactory(final byte[] refBases, final SAMFileHeader samFileHeader, final Version version) {
-        this.refBases = refBases;
-        this.version = version;
-        this.header = samFileHeader;
-
-        final List<SAMReadGroupRecord> readGroups = samFileHeader.getReadGroups();
-        for (int i = 0; i < readGroups.size(); i++) {
-            final SAMReadGroupRecord readGroupRecord = readGroups.get(i);
-            readGroupMap.put(readGroupRecord.getId(), i);
-        }
-    }
-
-    /**
-     * Create a CramCompressionRecord.
-     *
-     * @param record If the input record does not have an associated SAMFileHeader, it will be updated
-     *               with the header used for the factory in order to allow reference indices to be resolved.
-     * @return CramCompressionRecord
-     */
-    public CramCompressionRecord createCramRecord(final SAMRecord record) {
-        if (null == record.getHeader()) {
-            record.setHeader(header);
-        }
-        final CramCompressionRecord cramRecord = new CramCompressionRecord();
-        if (record.getReadPairedFlag()) {
-            cramRecord.mateAlignmentStart = record.getMateAlignmentStart();
-            cramRecord.setMateUnmapped(record.getMateUnmappedFlag());
-            cramRecord.setMateNegativeStrand(record.getMateNegativeStrandFlag());
-            cramRecord.mateSequenceID = record.getMateReferenceIndex();
-        } else cramRecord.mateSequenceID = -1;
-        cramRecord.sequenceId = record.getReferenceIndex();
-        cramRecord.readName = record.getReadName();
-        cramRecord.alignmentStart = record.getAlignmentStart();
-
-        cramRecord.setMultiFragment(record.getReadPairedFlag());
-        cramRecord.setProperPair(record.getReadPairedFlag() && record.getProperPairFlag());
-        cramRecord.setSegmentUnmapped(record.getReadUnmappedFlag());
-        cramRecord.setNegativeStrand(record.getReadNegativeStrandFlag());
-        cramRecord.setFirstSegment(record.getReadPairedFlag() && record.getFirstOfPairFlag());
-        cramRecord.setLastSegment(record.getReadPairedFlag() && record.getSecondOfPairFlag());
-        cramRecord.setSecondaryAlignment(record.getNotPrimaryAlignmentFlag());
-        cramRecord.setVendorFiltered(record.getReadFailsVendorQualityCheckFlag());
-        cramRecord.setDuplicate(record.getDuplicateReadFlag());
-        cramRecord.setSupplementary(record.getSupplementaryAlignmentFlag());
-
-        cramRecord.readLength = record.getReadLength();
-        cramRecord.mappingQuality = record.getMappingQuality();
-        cramRecord.setDuplicate(record.getDuplicateReadFlag());
-
-        cramRecord.templateSize = record.getInferredInsertSize();
-
-        final SAMReadGroupRecord readGroup = record.getReadGroup();
-        if (readGroup != null) cramRecord.readGroupID = readGroupMap.get(readGroup.getId());
-        else cramRecord.readGroupID = -1;
-
-        if (!record.getReadPairedFlag()) cramRecord.setLastSegment(false);
-        else {
-            if (record.getFirstOfPairFlag()) cramRecord.setLastSegment(false);
-            else if (record.getSecondOfPairFlag()) cramRecord.setLastSegment(true);
-        }
-
-        if (!record.getReadUnmappedFlag() && record.getAlignmentStart() != SAMRecord.NO_ALIGNMENT_START) {
-            cramRecord.readFeatures = checkedCreateVariations(cramRecord, record);
-        } else cramRecord.readFeatures = Collections.emptyList();
-
-        cramRecord.readBases = record.getReadBases();
-        cramRecord.qualityScores = record.getBaseQualities();
-        landedTotalScores += cramRecord.readLength;
-        if (version.compatibleWith(CramVersions.CRAM_v3))
-            cramRecord.setUnknownBases(record.getReadBases() == SAMRecord.NULL_SEQUENCE);
-
-        readTagList.clear();
-        if (captureAllTags) {
-            final List<SAMTagAndValue> attributes = record.getAttributes();
-            for (final SAMTagAndValue tagAndValue : attributes) {
-                if (ignoreTags.contains(tagAndValue.tag)) continue;
-                readTagList.add(ReadTag.deriveTypeFromValue(tagAndValue.tag, tagAndValue.value));
-            }
-        } else {
-            if (!captureTags.isEmpty()) {
-                final List<SAMTagAndValue> attributes = record.getAttributes();
-                cramRecord.tags = new ReadTag[attributes.size()];
-                for (final SAMTagAndValue tagAndValue : attributes) {
-                    if (captureTags.contains(tagAndValue.tag)) {
-                        readTagList.add(ReadTag.deriveTypeFromValue(tagAndValue.tag, tagAndValue.value));
-                    }
-                }
-            }
-        }
-        cramRecord.tags = readTagList.toArray(new ReadTag[readTagList.size()]);
-
-        cramRecord.setVendorFiltered(record.getReadFailsVendorQualityCheckFlag());
-
-        if (preserveReadNames) cramRecord.readName = record.getReadName();
-
-        return cramRecord;
-    }
-
-    /**
-     * A wrapper method to provide better diagnostics for ArrayIndexOutOfBoundsException.
-     *
-     * @param cramRecord CRAM record
-     * @param samRecord SAM record
-     * @return a list of read features created for the given {@link htsjdk.samtools.SAMRecord}
-     */
-    private List<ReadFeature> checkedCreateVariations(final CramCompressionRecord cramRecord, final SAMRecord samRecord) {
-        try {
-            return createVariations(cramRecord, samRecord);
-        } catch (final ArrayIndexOutOfBoundsException e) {
-            log.error("Reference bases array length=" + refBases.length);
-            log.error("Offensive CRAM record: " + cramRecord.toString());
-            log.error("Offensive SAM record: " + samRecord.getSAMString());
-            throw e;
-        }
-    }
-
-    private List<ReadFeature> createVariations(final CramCompressionRecord cramRecord, final SAMRecord samRecord) {
-        final List<ReadFeature> features = new LinkedList<ReadFeature>();
-        int zeroBasedPositionInRead = 0;
-        int alignmentStartOffset = 0;
-        int cigarElementLength;
-
-        final List<CigarElement> cigarElements = samRecord.getCigar().getCigarElements();
-
-        int cigarLen = 0;
-        for (final CigarElement cigarElement : cigarElements)
-            if (cigarElement.getOperator().consumesReadBases())
-                cigarLen += cigarElement.getLength();
-
-        byte[] bases = samRecord.getReadBases();
-        if (bases.length == 0) {
-            bases = new byte[cigarLen];
-            Arrays.fill(bases, (byte) 'N');
-        }
-        final byte[] qualityScore = samRecord.getBaseQualities();
-
-        for (final CigarElement cigarElement : cigarElements) {
-            cigarElementLength = cigarElement.getLength();
-            final CigarOperator operator = cigarElement.getOperator();
-
-            switch (operator) {
-                case D:
-                    features.add(new Deletion(zeroBasedPositionInRead + 1, cigarElementLength));
-                    break;
-                case N:
-                    features.add(new RefSkip(zeroBasedPositionInRead + 1, cigarElementLength));
-                    break;
-                case P:
-                    features.add(new Padding(zeroBasedPositionInRead + 1, cigarElementLength));
-                    break;
-                case H:
-                    features.add(new HardClip(zeroBasedPositionInRead + 1, cigarElementLength));
-                    break;
-                case S:
-                    addSoftClip(features, zeroBasedPositionInRead, cigarElementLength, bases);
-                    break;
-                case I:
-                    addInsertion(features, zeroBasedPositionInRead, cigarElementLength, bases);
-                    break;
-                case M:
-                case X:
-                case EQ:
-                    addSubstitutionsAndMaskedBases(cramRecord, features, zeroBasedPositionInRead, alignmentStartOffset,
-                            cigarElementLength, bases, qualityScore);
-                    break;
-                default:
-                    throw new IllegalArgumentException("Unsupported cigar operator: " + cigarElement.getOperator());
-            }
-
-            if (cigarElement.getOperator().consumesReadBases()) zeroBasedPositionInRead += cigarElementLength;
-            if (cigarElement.getOperator().consumesReferenceBases()) alignmentStartOffset += cigarElementLength;
-        }
-
-        this.baseCount += bases.length;
-        this.featureCount += features.size();
-
-        return features;
-    }
-
-    private void addSoftClip(final List<ReadFeature> features, final int zeroBasedPositionInRead, final int cigarElementLength, final byte[] bases) {
-        final byte[] insertedBases = Arrays.copyOfRange(bases, zeroBasedPositionInRead, zeroBasedPositionInRead + cigarElementLength);
-
-        final SoftClip softClip = new SoftClip(zeroBasedPositionInRead + 1, insertedBases);
-        features.add(softClip);
-    }
-
-    private void addHardClip(final List<ReadFeature> features, final int zeroBasedPositionInRead, final int cigarElementLength, final byte[] bases) {
-        final byte[] insertedBases = Arrays.copyOfRange(bases, zeroBasedPositionInRead, zeroBasedPositionInRead + cigarElementLength);
-
-        final HardClip hardClip = new HardClip(zeroBasedPositionInRead + 1, insertedBases.length);
-        features.add(hardClip);
-    }
-
-    private void addInsertion(final List<ReadFeature> features, final int zeroBasedPositionInRead, final int cigarElementLength, final byte[] bases) {
-        final byte[] insertedBases = Arrays.copyOfRange(bases, zeroBasedPositionInRead, zeroBasedPositionInRead + cigarElementLength);
-
-
-        for (int i = 0; i < insertedBases.length; i++) {
-            // single base insertion:
-            final InsertBase insertBase = new InsertBase();
-            insertBase.setPosition(zeroBasedPositionInRead + 1 + i);
-            insertBase.setBase(insertedBases[i]);
-            features.add(insertBase);
-        }
-    }
-
-    private void addSubstitutionsAndMaskedBases(final CramCompressionRecord cramRecord, final List<ReadFeature> features, final int fromPosInRead, final int
-            alignmentStartOffset, final int nofReadBases, final byte[] bases, final byte[] qualityScore) {
-        int oneBasedPositionInRead;
-        final boolean noQS = (qualityScore.length == 0);
-
-        int i;
-        boolean qualityAdded;
-        byte refBase;
-        for (i = 0; i < nofReadBases; i++) {
-            oneBasedPositionInRead = i + fromPosInRead + 1;
-            final int referenceCoordinates = cramRecord.alignmentStart + i + alignmentStartOffset - 1;
-            qualityAdded = false;
-            if (referenceCoordinates >= refBases.length) refBase = 'N';
-            else refBase = refBases[referenceCoordinates];
-            refBase = Utils.normalizeBase(refBase);
-
-            if (bases[i + fromPosInRead] != refBase) {
-                final Substitution substitution = new Substitution();
-                substitution.setPosition(oneBasedPositionInRead);
-                substitution.setBase(bases[i + fromPosInRead]);
-                substitution.setReferenceBase(refBase);
-
-                features.add(substitution);
-
-                if (noQS) continue;
-            }
-
-            if (noQS) continue;
-
-            if (refSNPs != null) {
-                final byte snpOrNot = refSNPs[referenceCoordinates];
-                if (snpOrNot != 0) {
-                    final byte score = (byte) (QS_asciiOffset + qualityScore[i + fromPosInRead]);
-                    features.add(new BaseQualityScore(oneBasedPositionInRead, score));
-                    qualityAdded = true;
-                    landedRefMaskScores++;
-                }
-            }
-
-            if (qualityAdded) landedTotalScores++;
-        }
-    }
-
-    public long getLandedRefMaskScores() {
-        return landedRefMaskScores;
-    }
-
-    public long getLandedTotalScores() {
-        return landedTotalScores;
-    }
-
-    public byte[] getRefBases() {
-        return refBases;
-    }
-
-    public void setRefBases(final byte[] refBases) {
-        this.refBases = refBases;
-    }
-
-    public byte[] getRefSNPs() {
-        return refSNPs;
-    }
-
-    public void setRefSNPs(final byte[] refSNPs) {
-        this.refSNPs = refSNPs;
-    }
-
-    public Map<String, Integer> getReadGroupMap() {
-        return readGroupMap;
-    }
-
-
-    public long getBaseCount() {
-        return baseCount;
-    }
-
-    public long getFeatureCount() {
-        return featureCount;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/build/Utils.java b/src/main/java/htsjdk/samtools/cram/build/Utils.java
deleted file mode 100644
index 7fdeeba..0000000
--- a/src/main/java/htsjdk/samtools/cram/build/Utils.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.build;
-
-final public class Utils {
-
-    private Utils() {};
-
-    /**
-     * CRAM operates with upper case bases, so both read and ref bases should be
-     * upper-cased and vocab controlled. This method does exactly this: upper
-     * case acgt and replace everything else with N.
-     *
-     * @param base a base to normalize
-     * @return a normalized base
-     */
-    public static byte normalizeBase(final byte base) {
-        switch (base) {
-            case 'a':
-            case 'A':
-                return 'A';
-
-            case 'c':
-            case 'C':
-                return 'C';
-
-            case 'g':
-            case 'G':
-                return 'G';
-
-            case 't':
-            case 'T':
-                return 'T';
-
-            default:
-                return 'N';
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/common/CramVersionPolicies.java b/src/main/java/htsjdk/samtools/cram/common/CramVersionPolicies.java
deleted file mode 100644
index fa1eafb..0000000
--- a/src/main/java/htsjdk/samtools/cram/common/CramVersionPolicies.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package htsjdk.samtools.cram.common;
-
-import htsjdk.samtools.util.Log;
-
-/**
- * The class provides version-dependant rules and policies for CRAM data.
- */
-public class CramVersionPolicies {
-    private static final Log log = Log.getInstance(CramVersionPolicies.class);
-
-    /**
-     * The method holds the behaviour for when the EOF marker is not found. Depending on the CRAM version this will be ignored, a warning
-     * issued or an exception produced.
-     *
-     * @param version CRAM version to assume
-     */
-    public static void eofNotFound(final Version version) {
-        if (version.compatibleWith(CramVersions.CRAM_v3)) {
-            log.error("Incomplete data: EOF marker not found.");
-            throw new RuntimeException("EOF not found.");
-        }
-        if (version.compatibleWith(CramVersions.CRAM_v2_1)) log.warn("EOF marker not found, possibly incomplete file/stream.");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/common/CramVersions.java b/src/main/java/htsjdk/samtools/cram/common/CramVersions.java
deleted file mode 100644
index 26d5685..0000000
--- a/src/main/java/htsjdk/samtools/cram/common/CramVersions.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package htsjdk.samtools.cram.common;
-
-public class CramVersions {
-    public static final Version CRAM_v2_1 = new Version(2, 1, 0);
-    public static final Version CRAM_v3 = new Version(3, 0, 0);
-
-    /**
-     * The default CRAM version when creating a new CRAM output file or stream.
-     */
-    public static final Version DEFAULT_CRAM_VERSION = CRAM_v3;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/common/IntHashMap.java b/src/main/java/htsjdk/samtools/cram/common/IntHashMap.java
deleted file mode 100644
index f2bca06..0000000
--- a/src/main/java/htsjdk/samtools/cram/common/IntHashMap.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.common;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Note: originally released under the GNU LGPL v2.1, 
- * but re-released by the original author under the ASF license (above).
- */
-
-/**
- * <p>
- * A hash map that uses primitive ints for the key rather than objects.
- * </p>
- * <p/>
- * <p>
- * Note that this class is for internal optimization purposes only, and may not
- * be supported in future releases of Apache Commons Lang. Utilities of this
- * sort may be included in future releases of Apache Commons Collections.
- * </p>
- *
- * @author Justin Couch
- * @author Alex Chaffee (alex at apache.org)
- * @author Stephen Colebourne
- * @version $Revision: 561230 $
- * @see java.util.HashMap
- * @since 2.0
- */
-public class IntHashMap<T> {
-
-    /**
-     * The hash table data.
-     */
-    private transient Entry<T> table[];
-
-    /**
-     * The total number of entries in the hash table.
-     */
-    private transient int count;
-
-    /**
-     * The table is rehashed when its size exceeds this threshold. (The value of
-     * this field is (int)(capacity * loadFactor).)
-     *
-     * @serial
-     */
-    private int threshold;
-
-    /**
-     * The load factor for the hashtable.
-     *
-     * @serial
-     */
-    private float loadFactor;
-
-    /**
-     * <p>
-     * Innerclass that acts as a datastructure to create a new entry in the
-     * table.
-     * </p>
-     */
-    private static class Entry<E> {
-        final int hash;
-        final int key;
-        E value;
-        Entry<E> next;
-
-        /**
-         * <p>
-         * Create a new entry with the given values.
-         * </p>
-         *
-         * @param hash  The code used to hash the object with
-         * @param key   The key used to enter this in the table
-         * @param value The value for this key
-         * @param next  A reference to the next entry in the table
-         */
-        protected Entry(final int hash, final int key, final E value, final Entry<E> next) {
-            this.hash = hash;
-            this.key = key;
-            this.value = value;
-            this.next = next;
-        }
-    }
-
-    /**
-     * <p>
-     * Constructs a new, empty hashtable with a default capacity and load
-     * factor, which is <code>20</code> and <code>0.75</code> respectively.
-     * </p>
-     */
-    public IntHashMap() {
-        this(20, 0.75f);
-    }
-
-    /**
-     * <p>
-     * Constructs a new, empty hashtable with the specified initial capacity and
-     * default load factor, which is <code>0.75</code>.
-     * </p>
-     *
-     * @param initialCapacity the initial capacity of the hashtable.
-     * @throws IllegalArgumentException if the initial capacity is less than zero.
-     */
-    public IntHashMap(final int initialCapacity) {
-        this(initialCapacity, 0.75f);
-    }
-
-    /**
-     * <p>
-     * Constructs a new, empty hashtable with the specified initial capacity and
-     * the specified load factor.
-     * </p>
-     *
-     * @param initialCapacity the initial capacity of the hashtable.
-     * @param loadFactor      the load factor of the hashtable.
-     * @throws IllegalArgumentException if the initial capacity is less than zero, or if the load
-     *                                  factor is non-positive.
-     */
-    public IntHashMap(int initialCapacity, final float loadFactor) {
-        super();
-        if (initialCapacity < 0) {
-            throw new IllegalArgumentException("Illegal Capacity: "
-                    + initialCapacity);
-        }
-        if (loadFactor <= 0) {
-            throw new IllegalArgumentException("Illegal Load: " + loadFactor);
-        }
-        if (initialCapacity == 0) {
-            initialCapacity = 1;
-        }
-
-        this.loadFactor = loadFactor;
-        table = new Entry[initialCapacity];
-        threshold = (int) (initialCapacity * loadFactor);
-    }
-
-    /**
-     * <p>
-     * Returns the number of keys in this hashtable.
-     * </p>
-     *
-     * @return the number of keys in this hashtable.
-     */
-    public int size() {
-        return count;
-    }
-
-    /**
-     * <p>
-     * Tests if this hashtable maps no keys to values.
-     * </p>
-     *
-     * @return <code>true</code> if this hashtable maps no keys to values;
-     * <code>false</code> otherwise.
-     */
-    public boolean isEmpty() {
-        return count == 0;
-    }
-
-    /**
-     * <p>
-     * Tests if some key maps into the specified value in this hashtable. This
-     * operation is more expensive than the <code>containsKey</code> method.
-     * </p>
-     * <p/>
-     * <p>
-     * Note that this method is identical in functionality to containsValue,
-     * (which is part of the Map interface in the collections framework).
-     * </p>
-     *
-     * @param value a value to search for.
-     * @return <code>true</code> if and only if some key maps to the
-     * <code>value</code> argument in this hashtable as determined by
-     * the <tt>equals</tt> method; <code>false</code> otherwise.
-     * @throws NullPointerException if the value is <code>null</code>.
-     * @see #containsKey(int)
-     * @see #containsValue(Object)
-     * @see java.util.Map
-     */
-    public boolean contains(final Object value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-
-        final Entry<T>[] tab = table;
-        for (int i = tab.length; i-- > 0; ) {
-            for (Entry<T> e = tab[i]; e != null; e = e.next) {
-                if (e.value.equals(value)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * <p>
-     * Returns <code>true</code> if this HashMap maps one or more keys to this
-     * value.
-     * </p>
-     * <p/>
-     * <p>
-     * Note that this method is identical in functionality to contains (which
-     * predates the Map interface).
-     * </p>
-     *
-     * @param value value whose presence in this HashMap is to be tested.
-     * @return boolean <code>true</code> if the value is contained
-     * @see java.util.Map
-     * @since JDK1.2
-     */
-    public boolean containsValue(final Object value) {
-        return contains(value);
-    }
-
-    /**
-     * <p>
-     * Tests if the specified object is a key in this hashtable.
-     * </p>
-     *
-     * @param key possible key.
-     * @return <code>true</code> if and only if the specified object is a key in
-     * this hashtable, as determined by the <tt>equals</tt> method;
-     * <code>false</code> otherwise.
-     * @see #contains(Object)
-     */
-    public boolean containsKey(final int key) {
-        final Entry<T>[] tab = table;
-        final int index = (key & 0x7FFFFFFF) % tab.length;
-        for (Entry<T> entry = tab[index]; entry != null; entry = entry.next) {
-            if (entry.hash == key) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * <p>
-     * Returns the value to which the specified key is mapped in this map.
-     * </p>
-     *
-     * @param key a key in the hashtable.
-     * @return the value to which the key is mapped in this hashtable;
-     * <code>null</code> if the key is not mapped to any value in this
-     * hashtable.
-     * @see #put(int, Object)
-     */
-    public T get(final int key) {
-        final Entry<T>[] tab = table;
-        final int index = (key & 0x7FFFFFFF) % tab.length;
-        for (Entry<T> e = tab[index]; e != null; e = e.next) {
-            if (e.hash == key) {
-                return e.value;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * <p>
-     * Increases the capacity of and internally reorganizes this hashtable, in
-     * order to accommodate and access its entries more efficiently.
-     * </p>
-     * <p/>
-     * <p>
-     * This method is called automatically when the number of keys in the
-     * hashtable exceeds this hashtable's capacity and load factor.
-     * </p>
-     */
-    protected void rehash() {
-        final int oldCapacity = table.length;
-        final Entry<T>[] oldMap = table;
-
-        final int newCapacity = oldCapacity * 2 + 1;
-        final Entry<T>[] newMap = new Entry[newCapacity];
-
-        threshold = (int) (newCapacity * loadFactor);
-        table = newMap;
-
-        for (int i = oldCapacity; i-- > 0; ) {
-            for (Entry<T> old = oldMap[i]; old != null; ) {
-                final Entry<T> entry = old;
-                old = old.next;
-
-                final int index = (entry.hash & 0x7FFFFFFF) % newCapacity;
-                entry.next = newMap[index];
-                newMap[index] = entry;
-            }
-        }
-    }
-
-    /**
-     * <p>
-     * Maps the specified <code>key</code> to the specified <code>value</code>
-     * in this hashtable. The key cannot be <code>null</code>.
-     * </p>
-     * <p/>
-     * <p>
-     * The value can be retrieved by calling the <code>get</code> method with a
-     * key that is equal to the original key.
-     * </p>
-     *
-     * @param key   the hashtable key.
-     * @param value the value.
-     * @return the previous value of the specified key in this hashtable, or
-     * <code>null</code> if it did not have one.
-     * @throws NullPointerException if the key is <code>null</code>.
-     * @see #get(int)
-     */
-    public Object put(final int key, final T value) {
-        // Makes sure the key is not already in the hashtable.
-        Entry<T> tab[] = table;
-        int index = (key & 0x7FFFFFFF) % tab.length;
-        for (Entry<T> entry = tab[index]; entry != null; entry = entry.next) {
-            if (entry.hash == key) {
-                final Object old = entry.value;
-                entry.value = value;
-                return old;
-            }
-        }
-
-        if (count >= threshold) {
-            // Rehash the table if the threshold is exceeded
-            rehash();
-
-            tab = table;
-            index = (key & 0x7FFFFFFF) % tab.length;
-        }
-
-        // Creates the new entry.
-        final Entry<T> entry = new Entry<T>(key, key, value, tab[index]);
-        tab[index] = entry;
-        count++;
-        return null;
-    }
-
-    /**
-     * <p>
-     * Removes the key (and its corresponding value) from this hashtable.
-     * </p>
-     * <p/>
-     * <p>
-     * This method does nothing if the key is not present in the hashtable.
-     * </p>
-     *
-     * @param key the key that needs to be removed.
-     * @return the value to which the key had been mapped in this hashtable, or
-     * <code>null</code> if the key did not have a mapping.
-     */
-    public Object remove(final int key) {
-        final Entry<T>[] tab = table;
-        final int index = (key & 0x7FFFFFFF) % tab.length;
-        for (Entry<T> entry = tab[index], prev = null; entry != null; prev = entry, entry = entry.next) {
-            if (entry.hash == key) {
-                if (prev != null) {
-                    prev.next = entry.next;
-                } else {
-                    tab[index] = entry.next;
-                }
-                count--;
-                final Object oldValue = entry.value;
-                entry.value = null;
-                return oldValue;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * <p>
-     * Clears this hashtable so that it contains no keys.
-     * </p>
-     */
-    public synchronized void clear() {
-        final Entry<T>[] tab = table;
-        for (int index = tab.length; --index >= 0; ) {
-            tab[index] = null;
-        }
-        count = 0;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/common/MutableInt.java b/src/main/java/htsjdk/samtools/cram/common/MutableInt.java
deleted file mode 100644
index 4b3d4ff..0000000
--- a/src/main/java/htsjdk/samtools/cram/common/MutableInt.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.common;
-
-public class MutableInt {
-    public int value = 0;
-
-    @Override
-    public int hashCode() {
-        return value;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/common/Version.java b/src/main/java/htsjdk/samtools/cram/common/Version.java
deleted file mode 100644
index d20ecf9..0000000
--- a/src/main/java/htsjdk/samtools/cram/common/Version.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package htsjdk.samtools.cram.common;
-
-/**
- * A class to represent a version information, 3 number: major, minor and build number.
- */
-public class Version implements Comparable<Version> {
-    public final int major;
-    public final int minor;
-    private final int build;
-
-    public Version(final int major, final int minor, final int build) {
-        this.major = major;
-        this.minor = minor;
-        this.build = build;
-    }
-
-    public Version(final String version) {
-        final String[] numbers = version.split("[\\.\\-b]");
-        major = Integer.valueOf(numbers[0]);
-        minor = Integer.valueOf(numbers[1]);
-        if (numbers.length > 3) build = Integer.valueOf(numbers[3]);
-        else build = 0;
-    }
-
-    @Override
-    public String toString() {
-        if (build > 0) return String.format("%d.%d-b%d", major, minor, build);
-        else return String.format("%d.%d", major, minor);
-    }
-
-    /**
-     * Compare with another version.
-     *
-     * @param o another version
-     * @return 0 if both versions are the same, a negative if the other version is higher and a positive otherwise.
-     */
-    @Override
-    public int compareTo(@SuppressWarnings("NullableProblems") final Version o) {
-        if (o == null) return -1;
-        if (major - o.major != 0) return major - o.major;
-        if (minor - o.minor != 0) return minor - o.minor;
-
-        if (build < 1 || o.build < 1) return 0;
-        return build - o.build;
-    }
-
-    /**
-     * Check if another version is exactly the same as this one.
-     *
-     * @param obj another version object
-     * @return true if both versions are the same, false otherwise.
-     */
-    @Override
-    public boolean equals(final Object obj) {
-        if (obj == null || !(obj instanceof Version)) return false;
-        final Version version = (Version) obj;
-        return major == version.major && minor == version.minor;
-    }
-
-    public boolean compatibleWith(final Version version) {
-        return compareTo(version) >= 0;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/cram/digest/AbstractSerialDigest.java b/src/main/java/htsjdk/samtools/cram/digest/AbstractSerialDigest.java
deleted file mode 100644
index f1a2f18..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/AbstractSerialDigest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-abstract class AbstractSerialDigest<T> {
-    private final Combine<T> combine;
-    T value;
-
-    AbstractSerialDigest(final Combine<T> combine, final T value) {
-        this.combine = combine;
-        this.value = value;
-    }
-
-    protected abstract void resetAndUpdate(byte[] data);
-
-    protected abstract T getValue();
-
-    protected abstract byte[] asByteArray();
-
-    void add(final byte[] data) {
-        resetAndUpdate(data);
-        final T updateValue = getValue();
-        if (value == null)
-            value = updateValue;
-        else
-            value = combine.combine(value, updateValue);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/ByteSumCombine.java b/src/main/java/htsjdk/samtools/cram/digest/ByteSumCombine.java
deleted file mode 100644
index 25dd77f..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/ByteSumCombine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-class ByteSumCombine implements Combine<byte[]> {
-
-    @Override
-    public byte[] combine(final byte[] state, final byte[] update) {
-        for (int i = 0; i < state.length; i++)
-            state[i] += update[i];
-        return state;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/Combine.java b/src/main/java/htsjdk/samtools/cram/digest/Combine.java
deleted file mode 100644
index 4868127..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/Combine.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-interface Combine<T> {
-
-    T combine(T state, T update);
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/ContentDigests.java b/src/main/java/htsjdk/samtools/cram/digest/ContentDigests.java
deleted file mode 100644
index bbfe1ed..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/ContentDigests.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-import htsjdk.samtools.SAMBinaryTagAndValue;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMTagUtil;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.util.Log;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.LinkedList;
-import java.util.List;
-
-public class ContentDigests {
-    public static final EnumSet<KNOWN_DIGESTS> ALL = EnumSet
-            .allOf(KNOWN_DIGESTS.class);
-    public static final EnumSet<KNOWN_DIGESTS> CRC32 = EnumSet.of(
-            KNOWN_DIGESTS.BD, KNOWN_DIGESTS.SD);
-
-    private static final Log log = Log.getInstance(ContentDigests.class);
-    private List<Digester> digesters = new LinkedList<ContentDigests.Digester>();
-
-    public static ContentDigests create(final EnumSet<KNOWN_DIGESTS> requestedDigests) {
-        final List<Digester> digesters = new LinkedList<ContentDigests.Digester>();
-        for (final KNOWN_DIGESTS digest : requestedDigests)
-            digesters.add(digest.createDigester());
-        return new ContentDigests(digesters);
-    }
-
-    public static ContentDigests create(final SAMBinaryTagAndValue binaryTags) {
-        final List<Digester> digesters = new LinkedList<ContentDigests.Digester>();
-        SAMBinaryTagAndValue binaryTag = binaryTags;
-        while (binaryTag != null) {
-            final String tagID = SAMTagUtil.getSingleton().makeStringTag(
-                    binaryTag.tag);
-            final KNOWN_DIGESTS hash;
-            try {
-                hash = KNOWN_DIGESTS.valueOf(tagID);
-                digesters.add(hash.createDigester());
-            } catch (final IllegalArgumentException e) {
-                // The tag is not one of the known content digest tags.
-            }
-            binaryTag = binaryTag.getNext();
-        }
-        return new ContentDigests(digesters);
-    }
-
-    private ContentDigests(final List<Digester> hashers) {
-        this.digesters = hashers;
-    }
-
-    void add(final SAMRecord record) {
-        for (final Digester digester : digesters)
-            digester.add(record);
-    }
-
-    public void add(final CramCompressionRecord record) {
-        for (final Digester digester : digesters)
-            digester.addCramRecord(record);
-    }
-
-    public void addSAMRecords(final Iterable<SAMRecord> records) {
-        for (final SAMRecord record : records)
-            add(record);
-    }
-
-    public void addCramRecords(final Iterable<CramCompressionRecord> records) {
-        for (final CramCompressionRecord record : records)
-            add(record);
-    }
-
-    public SAMBinaryTagAndValue getAsTags() {
-        SAMBinaryTagAndValue tag = null;
-        for (final Digester digester : digesters) {
-            if (tag == null)
-                tag = digester.toTag();
-            else
-                tag = tag.insert(digester.toTag());
-        }
-
-        return tag;
-    }
-
-    public boolean test(final SAMBinaryTagAndValue tags) {
-        for (final Digester digester : digesters) {
-            final SAMBinaryTagAndValue foundTag = tags.find(digester.tagCode);
-            if (foundTag == null)
-                continue;
-
-            if (!(foundTag.value instanceof byte[]))
-                throw new RuntimeException("Expecting a byte array but got: "
-                        + foundTag.value.getClass().getName());
-
-            final byte[] expected = (byte[]) foundTag.value;
-            final byte[] actual = digester.digest.asByteArray();
-            if (!Arrays.equals(expected, actual)) {
-                final String expectedString = toHexString(expected);
-                final String actualString = toHexString(actual);
-                log.error(String
-                        .format("Content hash mismatch for tag %s, actual: %s; expected: %s",
-                                digester.tagID, actualString, expectedString));
-                return false;
-            } else
-                log.debug("Content digest ok: " + digester.tagID);
-        }
-        return true;
-    }
-
-    private static String toHex(final byte[] bytes) {
-        final StringBuilder sb = new StringBuilder();
-        for (final byte t : bytes) {
-            sb.append(String.format("%02x", (0xFF & t)).toUpperCase()).append(
-                    ' ');
-        }
-        return sb.toString();
-    }
-
-    private static String toHexString(final byte[] bytes) {
-        return toHex(bytes).replace(" ", "");
-    }
-
-    private static class Digester {
-        final AbstractSerialDigest<?> digest;
-        final SERIES series;
-        final String tagID;
-        final short tagCode;
-
-        Digester(final AbstractSerialDigest<?> digest, final SERIES series, final String tagID) {
-            this.digest = digest;
-            this.series = series;
-            this.tagID = tagID;
-            this.tagCode = SAMTagUtil.getSingleton().makeBinaryTag(tagID);
-        }
-
-        void add(final SAMRecord record) {
-            digest.add(series.getBytes(record));
-        }
-
-        void addCramRecord(final CramCompressionRecord record) {
-            digest.add(series.getBytes(record));
-        }
-
-        SAMBinaryTagAndValue toTag() {
-            return new SAMBinaryTagAndValue(tagCode, digest.asByteArray());
-        }
-    }
-
-    public enum KNOWN_DIGESTS {
-        BD {
-            @Override
-            Digester createDigester() {
-                return new Digester(new Crc32Hasher(new IntegerSumCombine()),
-                        SERIES.BASES, name());
-            }
-        },
-        SD {
-            @Override
-            Digester createDigester() {
-                return new Digester(new Crc32Hasher(new IntegerSumCombine()),
-                        SERIES.SCORES, name());
-            }
-        },
-        B5 {
-            @Override
-            Digester createDigester() {
-                try {
-                    return new Digester(new MessageDigestHasher(
-                            MessageDigest.getInstance("SHA-512"),
-                            new ByteSumCombine(), null), SERIES.BASES, name());
-                } catch (final NoSuchAlgorithmException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        },
-        S5 {
-            @Override
-            Digester createDigester() {
-                try {
-                    return new Digester(new MessageDigestHasher(
-                            MessageDigest.getInstance("SHA-512"),
-                            new ByteSumCombine(), null), SERIES.SCORES, name());
-                } catch (final NoSuchAlgorithmException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        },
-        B1 {
-            @Override
-            Digester createDigester() {
-                try {
-                    return new Digester(new MessageDigestHasher(
-                            MessageDigest.getInstance("SHA-1"),
-                            new ByteSumCombine(), null), SERIES.BASES, name());
-                } catch (final NoSuchAlgorithmException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        },
-        S1 {
-            @Override
-            Digester createDigester() {
-                try {
-                    return new Digester(new MessageDigestHasher(
-                            MessageDigest.getInstance("SHA-1"),
-                            new ByteSumCombine(), null), SERIES.SCORES, name());
-                } catch (final NoSuchAlgorithmException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        };
-
-        abstract Digester createDigester();
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/Crc32Hasher.java b/src/main/java/htsjdk/samtools/cram/digest/Crc32Hasher.java
deleted file mode 100644
index 464e220..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/Crc32Hasher.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-import java.nio.ByteOrder;
-import java.util.zip.CRC32;
-
-class Crc32Hasher extends AbstractSerialDigest<Integer> {
-    private final CRC32 crc32 = new CRC32();
-    private final ByteOrder byteOrder = ByteOrder.LITTLE_ENDIAN;
-
-    Crc32Hasher(final Combine<Integer> combine) {
-        super(combine, null);
-    }
-
-    @Override
-    protected void resetAndUpdate(final byte[] data) {
-        crc32.reset();
-        crc32.update(data);
-    }
-
-    @Override
-    protected Integer getValue() {
-        return (int) (crc32.getValue() & 0xFFFFFFFFL);
-    }
-
-    @Override
-    protected byte[] asByteArray() {
-        final byte[] array = new byte[4];
-        if (byteOrder == ByteOrder.LITTLE_ENDIAN) {
-            array[3] = (byte) ((value >>> 24) & 0xFF);
-            array[2] = (byte) ((value >>> 16) & 0xFF);
-            array[1] = (byte) ((value >>> 8) & 0xFF);
-            array[0] = (byte) ((value) & 0xFF);
-        } else {
-            array[0] = (byte) ((value >>> 24) & 0xFF);
-            array[1] = (byte) ((value >>> 16) & 0xFF);
-            array[2] = (byte) ((value >>> 8) & 0xFF);
-            array[3] = (byte) ((value) & 0xFF);
-        }
-        return array;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/IntegerSumCombine.java b/src/main/java/htsjdk/samtools/cram/digest/IntegerSumCombine.java
deleted file mode 100644
index d6b18e0..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/IntegerSumCombine.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-class IntegerSumCombine implements Combine<Integer> {
-
-    @Override
-    public Integer combine(final Integer state, final Integer update) {
-        return state + update;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/MessageDigestHasher.java b/src/main/java/htsjdk/samtools/cram/digest/MessageDigestHasher.java
deleted file mode 100644
index e5f8f35..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/MessageDigestHasher.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-import java.security.MessageDigest;
-
-class MessageDigestHasher extends AbstractSerialDigest<byte[]> {
-    private final MessageDigest messageDigest;
-
-    MessageDigestHasher(final MessageDigest messageDigest, final Combine<byte[]> combine,
-                        final byte[] value) {
-        super(combine, value);
-        this.messageDigest = messageDigest;
-    }
-
-    @Override
-    protected void resetAndUpdate(final byte[] data) {
-        messageDigest.reset();
-        messageDigest.update(data);
-    }
-
-    @Override
-    protected byte[] getValue() {
-        return messageDigest.digest();
-    }
-
-    @Override
-    protected byte[] asByteArray() {
-        return messageDigest.digest();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/digest/SERIES.java b/src/main/java/htsjdk/samtools/cram/digest/SERIES.java
deleted file mode 100644
index 82ce6f6..0000000
--- a/src/main/java/htsjdk/samtools/cram/digest/SERIES.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package htsjdk.samtools.cram.digest;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-
-enum SERIES {
-    BASES {
-        @Override
-        byte[] getBytes(final SAMRecord record) {
-            return record.getReadBases();
-        }
-
-        @Override
-        byte[] getBytes(final CramCompressionRecord record) {
-            return record.readBases;
-        }
-    },
-    SCORES {
-        @Override
-        byte[] getBytes(final SAMRecord record) {
-            return record.getBaseQualities();
-        }
-
-        @Override
-        byte[] getBytes(final CramCompressionRecord record) {
-            return record.qualityScores;
-        }
-    };
-
-    abstract byte[] getBytes(SAMRecord record);
-
-    abstract byte[] getBytes(CramCompressionRecord record);
-
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/AbstractBitCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/AbstractBitCodec.java
deleted file mode 100644
index a15c893..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/AbstractBitCodec.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-public abstract class AbstractBitCodec<T> implements BitCodec<T> {
-
-    @Override
-    public abstract T read(BitInputStream bitInputStream) throws IOException;
-
-    @Override
-    public abstract T read(BitInputStream bitInputStream, int valueLen) throws IOException;
-
-    @Override
-    public void readInto(final BitInputStream bitInputStream, final byte[] array, final int offset,
-                         final int valueLen) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-    @Override
-    public void skip(final BitInputStream bitInputStream) throws IOException {
-        read(bitInputStream);
-    }
-
-    @Override
-    public void skip(final BitInputStream bitInputStream, final int length) throws IOException {
-        read(bitInputStream, length);
-    }
-
-    @Override
-    public abstract long write(BitOutputStream bitOutputStream, T object)
-            throws IOException;
-
-    @Override
-    public abstract long numberOfBits(T object);
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerCodec.java
deleted file mode 100644
index 496f5a6..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerCodec.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class BetaIntegerCodec extends AbstractBitCodec<Integer> {
-    private int offset = 0;
-    private final int readNofBits;
-
-    public BetaIntegerCodec(final int offset, final int readNofBits) {
-        this.offset = offset;
-        this.readNofBits = readNofBits;
-    }
-
-    @Override
-    public final Integer read(final BitInputStream bitInputStream) throws IOException {
-        return bitInputStream.readBits(readNofBits) - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Integer value) throws IOException {
-        final int nofBits = (int) numberOfBits(value);
-        final long newValue = value + offset;
-        bitOutputStream.write(newValue, nofBits);
-        return nofBits;
-    }
-
-    @Override
-    public final long numberOfBits(final Integer value) {
-        if (value > (1L << readNofBits))
-            throw new IllegalArgumentException("Value written is bigger then allowed: value=" + value
-                    + ", max nof bits=" + readNofBits);
-
-        return readNofBits;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerEncoding.java
deleted file mode 100644
index 486ae36..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/BetaIntegerEncoding.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class BetaIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.BETA;
-    private int offset;
-    private int bitLimit;
-
-    public BetaIntegerEncoding() {
-    }
-
-    public BetaIntegerEncoding(final int offset, final int bitLimit) {
-        this.offset = offset;
-        this.bitLimit = bitLimit;
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int offset, final int bitLimit) {
-        final BetaIntegerEncoding encoding = new BetaIntegerEncoding();
-        encoding.offset = offset;
-        encoding.bitLimit = bitLimit;
-        return new EncodingParams(ENCODING_ID, encoding.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        ITF8.writeUnsignedITF8(bitLimit, buffer);
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        offset = ITF8.readUnsignedITF8(buffer);
-        bitLimit = ITF8.readUnsignedITF8(buffer);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new BetaIntegerCodec(offset, bitLimit);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/BitCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/BitCodec.java
deleted file mode 100644
index 2920f11..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/BitCodec.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-/**
- * An interface that defines requirements for serializing/deserializing objects into and from a bit stream.
- *
- * @param <T> data series type to be read or written
- * @noinspection UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier, UnnecessaryInterfaceModifier
- */
-public interface BitCodec<T> {
-
-    /**
-     * Read a single object from the bit stream.
-     *
-     * @param bitInputStream the bit input stream to rad from
-     * @return an object from the stream
-     * @throws IOException as per java IO contract
-     */
-    T read(BitInputStream bitInputStream) throws IOException;
-
-    /**
-     * Read a array of specified length from the bit stream.
-     *
-     * @param bitInputStream the bit input stream to rad from
-     * param valueLen the number of elements to read
-     * @return an object from the stream
-     * @throws IOException as per java IO contract
-     */
-    T read(BitInputStream bitInputStream, int valueLen) throws IOException;
-
-    /**
-     * Read a array of specified length from the bit stream into a given byte array.
-     * This method is a way to optimize byte array IO operations by bypassing abstraction. Leaky, I know.
-     *
-     * @param bitInputStream the bit input stream to rad from
-     * @param array the array to read into
-     * @param offset offset in the array
-     * @param valueLen number of elements to read
-     * @throws IOException as per java IO contract
-     */
-    void readInto(BitInputStream bitInputStream, byte[] array, int offset,
-                  int valueLen) throws IOException;
-
-    /**
-     * Skip the next object in the bit stream.
-     * @param bitInputStream the bit stream to operate on
-     * @throws IOException as per java IO contract
-     */
-    void skip(BitInputStream bitInputStream) throws IOException;
-
-    /**
-     * Skip the next length objects in the bit stream.
-     * @param bitInputStream the bit stream to operate on
-     * @param length the number of objects to skip
-     *
-     * @throws IOException as per java IO contract
-     */
-    void skip(BitInputStream bitInputStream, int length) throws IOException;
-
-    /**
-     * Write an object into the bit stream
-     * @param bitOutputStream the output bit stream to write to
-     * @param object the object to write
-     * @return the number of bits written out
-     * @throws IOException as per java IO contract
-     */
-    long write(BitOutputStream bitOutputStream, T object) throws IOException;
-
-    /**
-     * Calculate the number of bits that the object would take in bit serialized form.
-     * @param object an object
-     * @return the number of bits
-     */
-    long numberOfBits(T object);
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayLenEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayLenEncoding.java
deleted file mode 100644
index 0c76a5b..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayLenEncoding.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class ByteArrayLenEncoding implements Encoding<byte[]> {
-    private final static EncodingID ID = EncodingID.BYTE_ARRAY_LEN;
-    private Encoding<Integer> lenEncoding;
-    private Encoding<byte[]> byteEncoding;
-
-    public ByteArrayLenEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ID;
-    }
-
-    public static EncodingParams toParam(final EncodingParams lenParams,
-                                         final EncodingParams byteParams) {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        try {
-            byteArrayOutputStream.write((byte) lenParams.id.ordinal());
-            ITF8.writeUnsignedITF8(lenParams.params.length, byteArrayOutputStream);
-            byteArrayOutputStream.write(lenParams.params);
-
-            byteArrayOutputStream.write((byte) byteParams.id.ordinal());
-            ITF8.writeUnsignedITF8(byteParams.params.length, byteArrayOutputStream);
-            byteArrayOutputStream.write(byteParams.params);
-        } catch (final IOException e) {
-            throw new RuntimeException("It never happened. ");
-        }
-        return new EncodingParams(ID, byteArrayOutputStream.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        try {
-            byteArrayOutputStream.write((byte) lenEncoding.id().ordinal());
-            final byte[] lenBytes = lenEncoding.toByteArray();
-            ITF8.writeUnsignedITF8(lenBytes.length, byteArrayOutputStream);
-            byteArrayOutputStream.write(lenBytes);
-
-            byteArrayOutputStream.write((byte) byteEncoding.id().ordinal());
-            final byte[] byteBytes = byteEncoding.toByteArray();
-            ITF8.writeUnsignedITF8(byteBytes.length, byteArrayOutputStream);
-            byteArrayOutputStream.write(byteBytes);
-        } catch (final IOException e) {
-            throw new RuntimeException("It never happened. ");
-        }
-        return byteArrayOutputStream.toByteArray();
-    }
-
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-
-        final EncodingFactory encodingFactory = new EncodingFactory();
-
-        final EncodingID lenID = EncodingID.values()[buffer.get()];
-        lenEncoding = encodingFactory.createEncoding(DataSeriesType.INT, lenID);
-        int length = ITF8.readUnsignedITF8(buffer);
-        byte[] bytes = new byte[length];
-        buffer.get(bytes);
-        lenEncoding.fromByteArray(bytes);
-
-        final EncodingID byteID = EncodingID.values()[buffer.get()];
-        byteEncoding = encodingFactory.createEncoding(DataSeriesType.BYTE_ARRAY, byteID);
-        length = ITF8.readUnsignedITF8(buffer);
-        bytes = new byte[length];
-        buffer.get(bytes);
-        byteEncoding.fromByteArray(bytes);
-    }
-
-    @Override
-    public BitCodec<byte[]> buildCodec(final Map<Integer, InputStream> inputMap,
-                                       final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new ByteArrayLenCodec(
-                lenEncoding.buildCodec(inputMap, outputMap),
-                byteEncoding.buildCodec(inputMap, outputMap));
-    }
-
-    private static class ByteArrayLenCodec extends AbstractBitCodec<byte[]> {
-        private final BitCodec<Integer> lenCodec;
-        private final BitCodec<byte[]> byteCodec;
-
-        public ByteArrayLenCodec(final BitCodec<Integer> lenCodec,
-                                 final BitCodec<byte[]> byteCodec) {
-            super();
-            this.lenCodec = lenCodec;
-            this.byteCodec = byteCodec;
-        }
-
-        @Override
-        public byte[] read(final BitInputStream bitInputStream) throws IOException {
-            final int length = lenCodec.read(bitInputStream);
-            return byteCodec.read(bitInputStream, length);
-        }
-
-        @Override
-        public byte[] read(final BitInputStream bitInputStream, final int length) throws IOException {
-            throw new RuntimeException("Not implemented.");
-        }
-
-        @Override
-        public long write(final BitOutputStream bitOutputStream, final byte[] object)
-                throws IOException {
-            long length = lenCodec.write(bitOutputStream, object.length);
-            length += byteCodec.write(bitOutputStream, object);
-            return length;
-        }
-
-        @Override
-        public long numberOfBits(final byte[] object) {
-            return lenCodec.numberOfBits(object.length)
-                    + byteCodec.numberOfBits(object);
-        }
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayStopEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayStopEncoding.java
deleted file mode 100644
index c46d967..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ByteArrayStopEncoding.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License inputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Map;
-
-public class ByteArrayStopEncoding implements Encoding<byte[]> {
-    private final static EncodingID ID = EncodingID.BYTE_ARRAY_STOP;
-    private byte stopByte = 0;
-    private int externalId;
-
-    public ByteArrayStopEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ID;
-    }
-
-    private ByteArrayStopEncoding(final byte stopByte, final int externalId) {
-        this.stopByte = stopByte;
-        this.externalId = externalId;
-    }
-
-    public static EncodingParams toParam(final byte stopByte, final int externalId) {
-        final ByteArrayStopEncoding e = new ByteArrayStopEncoding(stopByte,
-                externalId);
-        return new EncodingParams(ID, e.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        final ByteBuffer buf = ByteBuffer.allocate(1024);
-        buf.order(ByteOrder.LITTLE_ENDIAN);
-        buf.put(stopByte);
-        ITF8.writeUnsignedITF8(externalId, buf);
-
-        buf.flip();
-        final byte[] array = new byte[buf.limit()];
-        buf.get(array);
-
-        return array;
-    }
-
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buf = ByteBuffer.wrap(data);
-        buf.order(ByteOrder.LITTLE_ENDIAN);
-        stopByte = buf.get();
-        externalId = ITF8.readUnsignedITF8(buf);
-    }
-
-    @Override
-    public BitCodec<byte[]> buildCodec(final Map<Integer, InputStream> inputMap,
-                                       final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final InputStream is = inputMap == null ? null : inputMap.get(externalId);
-        final ExposedByteArrayOutputStream os = outputMap == null ? null : outputMap
-                .get(externalId);
-        return new ByteArrayStopCodec(stopByte, is, os);
-    }
-
-    public static class ByteArrayStopCodec extends AbstractBitCodec<byte[]> {
-
-        private final int stop;
-        private final InputStream inputStream;
-        private final OutputStream outputStream;
-        private final ByteArrayOutputStream readingBAOS = new ByteArrayOutputStream();
-        private int b;
-
-        public ByteArrayStopCodec(final byte stopByte, final InputStream inputStream, final OutputStream outputStream) {
-            this.stop = 0xFF & stopByte;
-            this.inputStream = inputStream;
-            this.outputStream = outputStream;
-        }
-
-        @Override
-        public byte[] read(final BitInputStream bitInputStream) throws IOException {
-            readingBAOS.reset();
-            while ((b = inputStream.read()) != -1 && b != stop)
-                readingBAOS.write(b);
-
-            return readingBAOS.toByteArray();
-        }
-
-        @Override
-        public byte[] read(final BitInputStream bitInputStream, final int length) throws IOException {
-            throw new RuntimeException("Not implemented.");
-        }
-
-        @Override
-        public long write(final BitOutputStream bitOutputStream, final byte[] object)
-                throws IOException {
-            outputStream.write(object);
-            outputStream.write(stop);
-            return object.length + 1;
-        }
-
-        @Override
-        public long numberOfBits(final byte[] object) {
-            return object.length + 1;
-        }
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/DataSeries.java b/src/main/java/htsjdk/samtools/cram/encoding/DataSeries.java
deleted file mode 100644
index de4fd5e..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/DataSeries.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.structure.EncodingKey;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * An annotation to denote a data series field in a java class.
- * Some data can be represented as a set of column (data series) where
- * each column is characterized by it's intention ({@link htsjdk.samtools.cram.structure.EncodingKey} for CRAM)
- * and it's data type, like {@link java.lang.Integer}or {@link java.lang.String}.
- * Annotating fields in a class with this annotation allows for automated discovery of such column (data series)
- * and attaching specific codec to serialise/deserialize data.
- */
- at Target(ElementType.FIELD)
- at Retention(RetentionPolicy.RUNTIME)
-public @interface DataSeries {
-    /**
-     * One of the pre-defined CRAM data series names
-     * @return CRAM data series name (key)
-     */
-    EncodingKey key();
-
-    /**
-     * Data type of the series.
-     * @return data type of the series
-     */
-    DataSeriesType type();
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesMap.java b/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesMap.java
deleted file mode 100644
index b16ab8d..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesMap.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
- at Target(ElementType.FIELD)
- at Retention(RetentionPolicy.RUNTIME)
-public @interface DataSeriesMap {
-    String name() default "TAG";
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesType.java b/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesType.java
deleted file mode 100644
index 6eecb7c..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/DataSeriesType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-/**
- * Data series types known to CRAM.
- */
-public enum DataSeriesType {
-
-    /**
-     * A single signed byte (256 distinct values)
-     */
-    BYTE,
-    /**
-     * A signed integer ~4 billions of them.
-     */
-    INT,
-    /**
-     * A signed long value, 64 bits, too many to count.
-     */
-    LONG,
-    /**
-     * An array of bytes.
-     */
-    BYTE_ARRAY
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/Encoding.java b/src/main/java/htsjdk/samtools/cram/encoding/Encoding.java
deleted file mode 100644
index 1fc18df..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/Encoding.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.structure.EncodingID;
-
-import java.io.InputStream;
-import java.util.Map;
-
-/**
- * An interface to describe how a data series is encoded.
- * It also has methods to serialize/deserialize to/from byte array and a method to construct
- * a {@link htsjdk.samtools.cram.encoding.BitCodec} instance.
- *
- * @param <T> data series type
- */
-public interface Encoding<T> {
-
-    EncodingID id();
-
-    byte[] toByteArray();
-
-    void fromByteArray(byte[] data);
-
-    BitCodec<T> buildCodec(Map<Integer, InputStream> inputMap,
-                           Map<Integer, ExposedByteArrayOutputStream> outputMap);
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/EncodingFactory.java b/src/main/java/htsjdk/samtools/cram/encoding/EncodingFactory.java
deleted file mode 100644
index 258e148..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/EncodingFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanByteEncoding;
-import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanIntegerEncoding;
-import htsjdk.samtools.cram.structure.EncodingID;
-
-/**
- * A helper class to instantiate an appropriate {@link htsjdk.samtools.cram.encoding.Encoding}
- * for a given {@link htsjdk.samtools.cram.encoding.DataSeriesType} and
- * {@link htsjdk.samtools.cram.encoding.Encoding}.
- * Also useful to hide encoding implementations.
- */
- at SuppressWarnings("unchecked")
-public class EncodingFactory {
-
-    /**
-     * Create an encoding for the data series type and encoding id.
-     * @param valueType data type of the values to be produced/consumed by the encoding
-     * @param id encoding id used for data serialization
-     * @param <T> encoding object type, like Integer or String.
-     * @return a new encoding with the requested parameters
-     */
-    public <T> Encoding<T> createEncoding(final DataSeriesType valueType,
-                                          final EncodingID id) {
-        switch (valueType) {
-            case BYTE:
-                switch (id) {
-                    case EXTERNAL:
-                        return (Encoding<T>) new ExternalByteEncoding();
-                    case HUFFMAN:
-                        return (Encoding<T>) new HuffmanByteEncoding();
-                    case NULL:
-                        return new NullEncoding<T>();
-
-                    default:
-                        break;
-                }
-
-                break;
-
-            case INT:
-                switch (id) {
-                    case HUFFMAN:
-                        return (Encoding<T>) new HuffmanIntegerEncoding();
-                    case NULL:
-                        return new NullEncoding<T>();
-                    case EXTERNAL:
-                        return (Encoding<T>) new ExternalIntegerEncoding();
-                    case GOLOMB:
-                        return (Encoding<T>) new GolombIntegerEncoding();
-                    case GOLOMB_RICE:
-                        return (Encoding<T>) new GolombRiceIntegerEncoding();
-                    case BETA:
-                        return (Encoding<T>) new BetaIntegerEncoding();
-                    case GAMMA:
-                        return (Encoding<T>) new GammaIntegerEncoding();
-                    case SUBEXPONENTIAL:
-                        return (Encoding<T>) new SubexponentialIntegerEncoding();
-
-                    default:
-                        break;
-                }
-                break;
-
-            case LONG:
-                switch (id) {
-                    case NULL:
-                        return new NullEncoding<T>();
-                    case GOLOMB:
-                        return (Encoding<T>) new GolombLongEncoding();
-                    case EXTERNAL:
-                        return (Encoding<T>) new ExternalLongEncoding();
-
-                    default:
-                        break;
-                }
-                break;
-
-            case BYTE_ARRAY:
-                switch (id) {
-                    case NULL:
-                        return new NullEncoding<T>();
-                    case BYTE_ARRAY_LEN:
-                        return (Encoding<T>) new ByteArrayLenEncoding();
-                    case BYTE_ARRAY_STOP:
-                        return (Encoding<T>) new ByteArrayStopEncoding();
-                    case EXTERNAL:
-                        return (Encoding<T>) new ExternalByteArrayEncoding();
-
-                    default:
-                        break;
-                }
-                break;
-
-            default:
-                break;
-        }
-
-        return null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayCodec.java
deleted file mode 100644
index 4ebad39..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayCodec.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License inputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-class ExternalByteArrayCodec extends AbstractBitCodec<byte[]> {
-    private final OutputStream outputStream;
-    private final InputStream inputStream;
-
-    public ExternalByteArrayCodec(final OutputStream outputStream, final InputStream inputStream) {
-        this.outputStream = outputStream;
-        this.inputStream = inputStream;
-    }
-
-    @Override
-    public byte[] read(final BitInputStream bitInputStream, final int length) throws IOException {
-        return InputStreamUtils.readFully(inputStream, length);
-    }
-
-    @Override
-    public void readInto(final BitInputStream bitInputStream, final byte[] array, final int offset,
-                         final int valueLen) throws IOException {
-        InputStreamUtils.readFully(inputStream, array, offset, valueLen);
-    }
-
-    @Override
-    public void skip(final BitInputStream bitInputStream) throws IOException {
-        //noinspection ResultOfMethodCallIgnored
-        inputStream.skip(1);
-    }
-
-    @Override
-    public void skip(final BitInputStream bitInputStream, final int length) throws IOException {
-        //noinspection ResultOfMethodCallIgnored
-        inputStream.skip(length);
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final byte[] object) throws IOException {
-        outputStream.write(object);
-        return numberOfBits(object);
-    }
-
-    @Override
-    public long numberOfBits(final byte[] object) {
-        return object.length * 8;
-    }
-
-    @Override
-    public byte[] read(final BitInputStream bitInputStream) throws IOException {
-        throw new RuntimeException("Cannot read byte array of unknown length.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayEncoding.java
deleted file mode 100644
index 2fc707c..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteArrayEncoding.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.util.Map;
-
-public class ExternalByteArrayEncoding implements Encoding<byte[]> {
-    private static final EncodingID encodingId = EncodingID.EXTERNAL;
-    private int contentId = -1;
-
-    public ExternalByteArrayEncoding() {
-    }
-
-    public static EncodingParams toParam(final int contentId) {
-        final ExternalByteArrayEncoding e = new ExternalByteArrayEncoding();
-        e.contentId = contentId;
-        return new EncodingParams(encodingId, e.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        return ITF8.writeUnsignedITF8(contentId);
-    }
-
-    public void fromByteArray(final byte[] data) {
-        contentId = ITF8.readUnsignedITF8(data);
-    }
-
-    @Override
-    public BitCodec<byte[]> buildCodec(final Map<Integer, InputStream> inputMap,
-                                       final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final InputStream inputStream = inputMap == null ? null : inputMap.get(contentId);
-        final ExposedByteArrayOutputStream outputStream = outputMap == null ? null : outputMap
-                .get(contentId);
-        return new ExternalByteArrayCodec(outputStream, inputStream);
-    }
-
-    @Override
-    public EncodingID id() {
-        return encodingId;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteCodec.java
deleted file mode 100644
index b1c8529..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteCodec.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License inputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-
-class ExternalByteCodec extends AbstractBitCodec<Byte> {
-    private final OutputStream outputStream;
-    private final InputStream inputStream;
-
-    public ExternalByteCodec(final OutputStream outputStream, final InputStream inputStream) {
-        this.outputStream = outputStream;
-        this.inputStream = inputStream;
-    }
-
-    @Override
-    public Byte read(final BitInputStream bitInputStream) throws IOException {
-        return (byte) inputStream.read();
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final Byte object) throws IOException {
-        outputStream.write(object);
-        return 8;
-    }
-
-    @Override
-    public long numberOfBits(final Byte object) {
-        return 8;
-    }
-
-    @Override
-    public Byte read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-    @Override
-    public void readInto(final BitInputStream bitInputStream, final byte[] array, final int offset,
-                         final int valueLen) throws IOException {
-        InputStreamUtils.readFully(inputStream, array, offset, valueLen);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteEncoding.java
deleted file mode 100644
index 0fed720..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalByteEncoding.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.util.Map;
-
-public class ExternalByteEncoding implements Encoding<Byte> {
-    private static final EncodingID encodingId = EncodingID.EXTERNAL;
-    private int contentId = -1;
-
-    public ExternalByteEncoding() {
-    }
-
-    public static EncodingParams toParam(final int contentId) {
-        final ExternalByteEncoding externalByteEncoding = new ExternalByteEncoding();
-        externalByteEncoding.contentId = contentId;
-        return new EncodingParams(encodingId, externalByteEncoding.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        return ITF8.writeUnsignedITF8(contentId);
-    }
-
-    public void fromByteArray(final byte[] data) {
-        contentId = ITF8.readUnsignedITF8(data);
-    }
-
-    @Override
-    public BitCodec<Byte> buildCodec(final Map<Integer, InputStream> inputMap,
-                                     final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final InputStream inputStream = inputMap == null ? null : inputMap.get(contentId);
-        final ExposedByteArrayOutputStream outputStream = outputMap == null ? null : outputMap.get(contentId);
-        return new ExternalByteCodec(outputStream, inputStream);
-    }
-
-    @Override
-    public EncodingID id() {
-        return encodingId;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalCompressor.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalCompressor.java
deleted file mode 100644
index 0987294..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalCompressor.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.encoding.rans.RANS.ORDER;
-import htsjdk.samtools.cram.io.ExternalCompression;
-import htsjdk.samtools.cram.structure.BlockCompressionMethod;
-
-import java.io.IOException;
-
-public abstract class ExternalCompressor {
-    private final BlockCompressionMethod method;
-
-    private ExternalCompressor(final BlockCompressionMethod method) {
-        this.method = method;
-    }
-
-    public BlockCompressionMethod getMethod() {
-        return method;
-    }
-
-    public abstract byte[] compress(byte[] data);
-
-    public static ExternalCompressor createRAW() {
-        return new ExternalCompressor(BlockCompressionMethod.RAW) {
-
-            @Override
-            public byte[] compress(final byte[] data) {
-                return data;
-            }
-        };
-    }
-
-    public static ExternalCompressor createGZIP() {
-        return new ExternalCompressor(BlockCompressionMethod.GZIP) {
-
-            @Override
-            public byte[] compress(final byte[] data) {
-                try {
-                    return ExternalCompression.gzip(data);
-                } catch (final IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        };
-    }
-
-    public static ExternalCompressor createLZMA() {
-        return new ExternalCompressor(BlockCompressionMethod.LZMA) {
-
-            @Override
-            public byte[] compress(final byte[] data) {
-                try {
-                    return ExternalCompression.xz(data);
-                } catch (final IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        };
-    }
-
-    public static ExternalCompressor createBZIP2() {
-        return new ExternalCompressor(BlockCompressionMethod.BZIP2) {
-
-            @Override
-            public byte[] compress(final byte[] data) {
-                try {
-                    return ExternalCompression.bzip2(data);
-                } catch (final IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        };
-
-    }
-
-    public static ExternalCompressor createRANS(final ORDER order) {
-        return new ExternalCompressor(BlockCompressionMethod.RANS) {
-
-            @Override
-            public byte[] compress(final byte[] data) {
-                return ExternalCompression.rans(data, order);
-            }
-        };
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerCodec.java
deleted file mode 100644
index d26b0db..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerCodec.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License inputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-
-class ExternalIntegerCodec extends AbstractBitCodec<Integer> {
-    private final OutputStream outputStream;
-    private final InputStream inputStream;
-    private final OutputStream nullOutputStream = new OutputStream() {
-
-        @Override
-        public void write(@SuppressWarnings("NullableProblems") final byte[] b) throws IOException {
-        }
-
-        @Override
-        public void write(final int b) throws IOException {
-        }
-
-        @Override
-        public void write(@SuppressWarnings("NullableProblems") final byte[] b, final int off, final int length) throws IOException {
-        }
-    };
-
-    public ExternalIntegerCodec(final OutputStream outputStream, final InputStream inputStream) {
-        this.outputStream = outputStream;
-        this.inputStream = inputStream;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream) throws IOException {
-        return ITF8.readUnsignedITF8(inputStream);
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final Integer value) throws IOException {
-        return ITF8.writeUnsignedITF8(value, outputStream);
-    }
-
-    @Override
-    public long numberOfBits(final Integer value) {
-        try {
-            return ITF8.writeUnsignedITF8(value, nullOutputStream);
-        } catch (final IOException e) {
-            // this should never happened but still:
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerEncoding.java
deleted file mode 100644
index a7c5736..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalIntegerEncoding.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.util.Map;
-
-public class ExternalIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID encodingId = EncodingID.EXTERNAL;
-    private int contentId = -1;
-
-    public ExternalIntegerEncoding() {
-    }
-
-    public static EncodingParams toParam(final int contentId) {
-        final ExternalIntegerEncoding externalIntegerEncoding = new ExternalIntegerEncoding();
-        externalIntegerEncoding.contentId = contentId;
-        return new EncodingParams(encodingId, externalIntegerEncoding.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        return ITF8.writeUnsignedITF8(contentId);
-    }
-
-    public void fromByteArray(final byte[] data) {
-        contentId = ITF8.readUnsignedITF8(data);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final InputStream inputStream = inputMap == null ? null : inputMap.get(contentId);
-        final ExposedByteArrayOutputStream outputStream = outputMap == null ? null : outputMap.get(contentId);
-        return new ExternalIntegerCodec(outputStream, inputStream);
-    }
-
-    @Override
-    public EncodingID id() {
-        return encodingId;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongCodec.java
deleted file mode 100644
index 328f940..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongCodec.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License inputStream distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-
-class ExternalLongCodec extends AbstractBitCodec<Long> {
-    private final OutputStream outputStream;
-    private final InputStream inputStream;
-
-    public ExternalLongCodec(final OutputStream outputStream, final InputStream inputStream) {
-        this.outputStream = outputStream;
-        this.inputStream = inputStream;
-    }
-
-    @Override
-    public Long read(final BitInputStream bitInputStream) throws IOException {
-        long result = 0;
-        for (int i = 0; i < 8; i++) {
-            result <<= 8;
-            result |= inputStream.read();
-        }
-        return result;
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, Long value) throws IOException {
-        for (int i = 0; i < 8; i++) {
-            outputStream.write((int) (value & 0xFF));
-            value >>>= 8;
-        }
-        return 64;
-    }
-
-    @Override
-    public long numberOfBits(final Long object) {
-        return 8;
-    }
-
-    @Override
-    public Long read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongEncoding.java
deleted file mode 100644
index 402cea8..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/ExternalLongEncoding.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.util.Map;
-
-public class ExternalLongEncoding implements Encoding<Long> {
-    private static final EncodingID encodingId = EncodingID.EXTERNAL;
-    private int contentId = -1;
-
-    public ExternalLongEncoding() {
-    }
-
-    public static EncodingParams toParam(final int contentId) {
-        final ExternalLongEncoding externalLongEncoding = new ExternalLongEncoding();
-        externalLongEncoding.contentId = contentId;
-        return new EncodingParams(encodingId, externalLongEncoding.toByteArray());
-    }
-
-    public byte[] toByteArray() {
-        return ITF8.writeUnsignedITF8(contentId);
-    }
-
-    public void fromByteArray(final byte[] data) {
-        contentId = ITF8.readUnsignedITF8(data);
-    }
-
-    @Override
-    public BitCodec<Long> buildCodec(final Map<Integer, InputStream> inputMap,
-                                     final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final InputStream inputStream = inputMap == null ? null : inputMap.get(contentId);
-        final ExposedByteArrayOutputStream outputStream = outputMap == null ? null : outputMap.get(contentId);
-        return new ExternalLongCodec(outputStream, inputStream);
-    }
-
-    @Override
-    public EncodingID id() {
-        return encodingId;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerCodec.java
deleted file mode 100644
index 9b6cc7f..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerCodec.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-class GammaIntegerCodec extends AbstractBitCodec<Integer> {
-    private int offset = 0;
-
-    public GammaIntegerCodec(final int offset) {
-        this.offset = offset;
-    }
-
-    @Override
-    public final Integer read(final BitInputStream bitInputStream) throws IOException {
-        int length = 1;
-        final boolean lenCodingBit = false;
-        //noinspection ConstantConditions,PointlessBooleanExpression
-        while (bitInputStream.readBit() == lenCodingBit)
-            length++;
-        final int readBits = bitInputStream.readBits(length - 1);
-        final int value = readBits | 1 << (length - 1);
-        return value - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Integer value) throws IOException {
-        if (value + offset < 1)
-            throw new IllegalArgumentException("Gamma codec handles only positive values: " + value);
-
-        final long newValue = value + offset;
-        final int betaCodeLength = 1 + (int) (Math.log(newValue) / Math.log(2));
-        if (betaCodeLength > 1)
-            bitOutputStream.write(0L, betaCodeLength - 1);
-
-        bitOutputStream.write(newValue, betaCodeLength);
-        return betaCodeLength * 2 - 1;
-    }
-
-    @Override
-    public final long numberOfBits(final Integer value) {
-        final long newValue = value + offset;
-        if (newValue < 1)
-            throw new RuntimeException("Invalid valid: " + newValue);
-        final int betaCodeLength = 1 + (int) (Math.log(newValue) / Math.log(2));
-        return betaCodeLength * 2 - 1;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerEncoding.java
deleted file mode 100644
index 00c38a2..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GammaIntegerEncoding.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class GammaIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.GAMMA;
-    private int offset;
-
-    public GammaIntegerEncoding() {
-        this(0);
-    }
-
-    public GammaIntegerEncoding(final int offset) {
-        this.offset = offset;
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int offset) {
-        final GammaIntegerEncoding gammaIntegerEncoding = new GammaIntegerEncoding();
-        gammaIntegerEncoding.offset = offset;
-        return new EncodingParams(ENCODING_ID, gammaIntegerEncoding.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        offset = ITF8.readUnsignedITF8(data);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new GammaIntegerCodec(offset);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerCodec.java
deleted file mode 100644
index 1a15efa..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerCodec.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class GolombIntegerCodec extends AbstractBitCodec<Integer> {
-    private int m;
-    private boolean quotientBit = true;
-    private int offset = 0;
-
-    public GolombIntegerCodec(final int m, final Integer offset) {
-        if (m < 2)
-            throw new IllegalArgumentException(
-                    "M parameter must be at least 2.");
-        this.m = m;
-        this.quotientBit = true;
-        this.offset = offset;
-    }
-
-    @Override
-    public final Integer read(final BitInputStream bitInputStream) throws IOException {
-        int quotient = 0;
-        while (bitInputStream.readBit() == quotientBit)
-            quotient++;
-
-        final int ceiling = (int) (Math.log(m) / Math.log(2) + 1);
-        int reminder = bitInputStream.readBits(ceiling - 1);
-        if (reminder >= Math.pow(2, ceiling) - m) {
-            reminder <<= 1;
-            reminder |= bitInputStream.readBits(1);
-            reminder -= Math.pow(2, ceiling) - m;
-        }
-
-        return (quotient * m + reminder) - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Integer value)
-            throws IOException {
-        final int newValue = value + offset;
-        final int quotient = newValue / m;
-        final int reminder = newValue % m;
-        final int ceiling = (int) (Math.log(m) / Math.log(2) + 1);
-
-        int length = quotient + 1;
-        bitOutputStream.write(quotientBit, quotient);
-        bitOutputStream.write(!quotientBit);
-
-        if (reminder < Math.pow(2, ceiling) - m) {
-            bitOutputStream.write(reminder, ceiling - 1);
-            length += ceiling - 1;
-        } else {
-            bitOutputStream.write((int) (reminder + Math.pow(2, ceiling) - m),
-                    ceiling);
-            length += ceiling;
-        }
-        return length;
-    }
-
-    @Override
-    public final long numberOfBits(final Integer value) {
-        final int newValue = value + offset;
-        final int quotient = newValue / m;
-        final int reminder = newValue % m;
-        final int ceiling = (int) (Math.log(m) / Math.log(2) + 1);
-        int l = quotient + 1;
-
-        if (reminder < Math.pow(2, ceiling) - m)
-            l += ceiling - 1;
-        else
-            l += ceiling;
-
-        return l;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Multi-value read method not defined.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerEncoding.java
deleted file mode 100644
index 2332b5e..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombIntegerEncoding.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class GolombIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.GOLOMB;
-    private int m;
-    private int offset;
-
-    public GolombIntegerEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int m) {
-        final GolombIntegerEncoding golombIntegerEncoding = new GolombIntegerEncoding();
-        golombIntegerEncoding.m = m;
-        golombIntegerEncoding.offset = 0;
-        return new EncodingParams(ENCODING_ID, golombIntegerEncoding.toByteArray());
-    }
-
-    public static EncodingParams toParam(final int m, final int offset) {
-        final GolombIntegerEncoding e = new GolombIntegerEncoding();
-        e.m = m;
-        e.offset = offset;
-        return new EncodingParams(ENCODING_ID, e.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        ITF8.writeUnsignedITF8(m, buffer);
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        offset = ITF8.readUnsignedITF8(buffer);
-        m = ITF8.readUnsignedITF8(buffer);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new GolombIntegerCodec(m, offset);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombLongCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombLongCodec.java
deleted file mode 100644
index ef0c12c..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombLongCodec.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class GolombLongCodec extends AbstractBitCodec<Long> {
-    private int m;
-    private boolean quotientBit = true;
-    private long offset = 0L;
-
-    public GolombLongCodec(final long offset, final int m) {
-        if (m < 2)
-            throw new IllegalArgumentException(
-                    "M parameter must be at least 2.");
-        this.m = m;
-        this.quotientBit = true;
-        this.offset = offset;
-    }
-
-    @Override
-    public final Long read(final BitInputStream bitInputStream) throws IOException {
-        long quotient = 0L;
-        while (bitInputStream.readBit() == quotientBit)
-            quotient++;
-
-        final long ceiling = (long) (Math.log(m) / Math.log(2) + 1);
-        long reminder = bitInputStream.readBits((int) (ceiling - 1));
-        if (reminder >= Math.pow(2, ceiling) - m) {
-            reminder <<= 1;
-            reminder |= bitInputStream.readBits(1);
-            reminder -= Math.pow(2, ceiling) - m;
-        }
-
-        return (quotient * m + reminder) - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Long value)
-            throws IOException {
-        final long newValue = value + offset;
-        final long quotient = newValue / m;
-        final long reminder = newValue % m;
-        final long ceiling = (long) (Math.log(m) / Math.log(2) + 1);
-
-        long length = quotient + 1;
-        bitOutputStream.write(quotientBit, quotient);
-        bitOutputStream.write(!quotientBit);
-
-        if (reminder < Math.pow(2, ceiling) - m) {
-            bitOutputStream.write(reminder, (int) ceiling - 1);
-            length += ceiling - 1;
-        } else {
-            bitOutputStream.write((int) (reminder + Math.pow(2, ceiling) - m),
-                    (int) ceiling);
-            length += ceiling;
-        }
-        return length;
-    }
-
-    @Override
-    public final long numberOfBits(final Long value) {
-        final long newValue = value + offset;
-        final long quotient = newValue / m;
-        final long reminder = newValue % m;
-        final long ceiling = (long) (Math.log(m) / Math.log(2) + 1);
-        long l = quotient + 1;
-
-        if (reminder < Math.pow(2, ceiling) - m)
-            l += ceiling - 1;
-        else
-            l += ceiling;
-
-        return l;
-    }
-
-    @Override
-    public Long read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Multi-value read method not defined.");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombLongEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombLongEncoding.java
deleted file mode 100644
index eabec1b..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombLongEncoding.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class GolombLongEncoding implements Encoding<Long> {
-    private static final EncodingID ENCODING_ID = EncodingID.GOLOMB;
-    private int m;
-    private int offset;
-
-    public GolombLongEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int offset, final int m) {
-        final GolombLongEncoding golombLongEncoding = new GolombLongEncoding();
-        golombLongEncoding.offset = offset;
-        golombLongEncoding.m = m;
-        return new EncodingParams(ENCODING_ID, golombLongEncoding.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        ITF8.writeUnsignedITF8(m, buffer);
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        offset = ITF8.readUnsignedITF8(buffer);
-        m = ITF8.readUnsignedITF8(buffer);
-    }
-
-    @Override
-    public BitCodec<Long> buildCodec(final Map<Integer, InputStream> inputMap,
-                                     final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new GolombLongCodec(offset, m);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerCodec.java
deleted file mode 100644
index e5962a1..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerCodec.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class GolombRiceIntegerCodec extends AbstractBitCodec<Integer> {
-    private final int m;
-    private final int log2m;
-    private final long mask;
-    private boolean quotientBit = false;
-    private int offset = 0;
-
-    public GolombRiceIntegerCodec(final int offset, final int log2m) {
-        this.log2m = log2m;
-        m = 1 << log2m;
-        this.quotientBit = true;
-        this.offset = offset;
-        mask = ~(~0 << log2m);
-    }
-
-    public final Integer read(final BitInputStream bitInputStream) throws IOException {
-
-        int unary = 0;
-        while (bitInputStream.readBit() == quotientBit)
-            unary++;
-
-        final int remainder = bitInputStream.readBits(log2m);
-
-        final int result = unary * m + remainder;
-        return result - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Integer value) throws IOException {
-        final long newValue = value + offset;
-        final long quotient = newValue >>> log2m;
-        if (quotient > 0x7fffffffL)
-            for (long i = 0; i < quotient; i++)
-                bitOutputStream.write(quotientBit);
-
-        else if (quotient > 0) {
-            final int qi = (int) quotient;
-            for (int i = 0; i < qi; i++)
-                bitOutputStream.write(quotientBit);
-        }
-        bitOutputStream.write(!quotientBit);
-        final long remainder = newValue & mask;
-        long reminderMask = 1 << (log2m - 1);
-        for (int i = log2m - 1; i >= 0; i--) {
-            final long b = remainder & reminderMask;
-            bitOutputStream.write(b != 0L);
-            reminderMask >>>= 1;
-        }
-        return quotient + 1 + log2m;
-    }
-
-    @Override
-    public final long numberOfBits(final Integer value) {
-        return (value + offset) / m + 1 + log2m;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerEncoding.java
deleted file mode 100644
index 8f8d27b..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/GolombRiceIntegerEncoding.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class GolombRiceIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.GOLOMB_RICE;
-    private int offset;
-    private int m;
-
-    public GolombRiceIntegerEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int offset, final int m) {
-        final GolombRiceIntegerEncoding golombRiceIntegerEncoding = new GolombRiceIntegerEncoding();
-        golombRiceIntegerEncoding.offset = offset;
-        golombRiceIntegerEncoding.m = m;
-        return new EncodingParams(ENCODING_ID, golombRiceIntegerEncoding.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        ITF8.writeUnsignedITF8(m, buffer);
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        offset = ITF8.readUnsignedITF8(buffer);
-        m = ITF8.readUnsignedITF8(buffer);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new GolombRiceIntegerCodec(offset, m);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/NullCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/NullCodec.java
deleted file mode 100644
index 6f1038c..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/NullCodec.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class NullCodec<T> extends AbstractBitCodec<T> {
-    private final T defaultValue = null;
-
-    public NullCodec() {
-    }
-
-    @Override
-    public T read(final BitInputStream bitInputStream) throws IOException {
-        return defaultValue;
-    }
-
-    @Override
-    public T read(final BitInputStream bitInputStream, final int length) throws IOException {
-        return defaultValue;
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final T object) throws IOException {
-        return 0;
-    }
-
-    @Override
-    public long numberOfBits(final T object) {
-        return 0;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/NullEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/NullEncoding.java
deleted file mode 100644
index 9af54bd..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/NullEncoding.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.util.Map;
-
-public class NullEncoding<T> implements Encoding<T> {
-    private static final EncodingID ENCODING_ID = EncodingID.NULL;
-
-    public NullEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam() {
-        return new EncodingParams(ENCODING_ID, new NullEncoding().toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        return new byte[]{};
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-    }
-
-    @Override
-    public BitCodec<T> buildCodec(final Map<Integer, InputStream> inputMap,
-                                  final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new NullCodec<T>();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerCodec.java
deleted file mode 100644
index 54dc809..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerCodec.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class SubexponentialIntegerCodec extends AbstractBitCodec<Integer> {
-    private int offset = 0;
-    private int k = 2;
-    private boolean unaryBit = true;
-
-    SubexponentialIntegerCodec(final int offset, final int k) {
-        this.offset = offset;
-        this.k = k;
-        this.unaryBit = true;
-    }
-
-    @Override
-    public final Integer read(final BitInputStream bitInputStream) throws IOException {
-        int u = 0;
-        while (bitInputStream.readBit() == unaryBit)
-            u++;
-
-        final int b;
-        final int n;
-        if (u == 0) {
-            b = k;
-            n = bitInputStream.readBits(b);
-        } else {
-            b = u + k - 1;
-            n = (1 << b) | bitInputStream.readBits(b);
-        }
-
-        return n - offset;
-    }
-
-    @Override
-    public final long write(final BitOutputStream bitOutputStream, final Integer value) throws IOException {
-        if (value + offset < 0)
-            throw new IllegalArgumentException("Value is less then offset: " + value);
-
-        final long newValue = value + offset;
-        final int b;
-        final int u;
-        if (newValue < (1L << k)) {
-            b = k;
-            u = 0;
-        } else {
-            b = (int) (Math.log(newValue) / Math.log(2));
-            u = b - k + 1;
-        }
-
-        bitOutputStream.write(unaryBit, u);
-        bitOutputStream.write(!unaryBit);
-
-        bitOutputStream.write(newValue, b);
-        return u + 1 + b;
-    }
-
-    @Override
-    public final long numberOfBits(final Integer value) {
-        final long newValue = value + offset;
-        final long b;
-        final long u;
-        if (newValue < (1L << k)) {
-            b = k;
-            u = 0;
-        } else {
-            b = (long) Math.floor(Math.log(newValue) / Math.log(2));
-            u = b - k + 1;
-        }
-        return u + 1 + b;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerEncoding.java
deleted file mode 100644
index 03911b6..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/SubexponentialIntegerEncoding.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding;
-
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class SubexponentialIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.SUBEXPONENTIAL;
-    private int offset;
-    private int k;
-
-    public SubexponentialIntegerEncoding() {
-    }
-
-    public SubexponentialIntegerEncoding(final int offset, final int k) {
-        this.offset = offset;
-        this.k = k;
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    public static EncodingParams toParam(final int offset, final int k) {
-        final SubexponentialIntegerEncoding subexponentialIntegerEncoding = new SubexponentialIntegerEncoding();
-        subexponentialIntegerEncoding.offset = offset;
-        subexponentialIntegerEncoding.k = k;
-        return new EncodingParams(ENCODING_ID, subexponentialIntegerEncoding.toByteArray());
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        ITF8.writeUnsignedITF8(offset, buffer);
-        ITF8.writeUnsignedITF8(k, buffer);
-        buffer.flip();
-        final byte[] bytes = new byte[buffer.limit()];
-        buffer.get(bytes);
-        return bytes;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        offset = ITF8.readUnsignedITF8(buffer);
-        k = ITF8.readUnsignedITF8(buffer);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new SubexponentialIntegerCodec(offset, k);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanCode.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanCode.java
deleted file mode 100644
index cbb855f..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanCode.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class HuffmanCode {
-
-    public static <T> HuffmanTree<T> buildTree(final int[] charFrequencies, final T[] values) {
-        final LinkedList<HuffmanTree<T>> list = new LinkedList<HuffmanTree<T>>();
-        for (int i = 0; i < charFrequencies.length; i++)
-            if (charFrequencies[i] > 0)
-                list.add(new HuffmanLeaf<T>(charFrequencies[i], values[i]));
-
-        final Comparator<HuffmanTree<T>> comparator = new Comparator<HuffmanTree<T>>() {
-
-            @Override
-            public int compare(final HuffmanTree<T> o1, final HuffmanTree<T> o2) {
-                return o1.frequency - o2.frequency;
-            }
-        };
-
-        while (list.size() > 1) {
-            Collections.sort(list, comparator);
-            // dumpList(list) ;
-            final HuffmanTree<T> left = list.remove();
-            final HuffmanTree<T> right = list.remove();
-            list.add(new HuffmanNode<T>(left, right));
-        }
-        return list.isEmpty() ? null : list.remove();
-    }
-
-    public static <T> void getValuesAndBitLengths(final List<T> values,
-                                                  final List<Integer> lens, final HuffmanTree<T> tree) {
-        final TreeMap<T, HuffmanBitCode<T>> codes = new TreeMap<T, HuffmanBitCode<T>>();
-        getBitCode(tree, new HuffmanBitCode<T>(), codes);
-
-        for (final T value : codes.keySet()) {
-            final HuffmanBitCode<T> code = codes.get(value);
-            values.add(value);
-            lens.add(code.bitLength);
-        }
-    }
-
-    private static class HuffmanBitCode<T> {
-        long bitCode;
-        int bitLength;
-    }
-
-    private static <T> void getBitCode(final HuffmanTree<T> tree,
-                                       final HuffmanBitCode<T> code, final Map<T, HuffmanBitCode<T>> codes) {
-        if (tree instanceof HuffmanLeaf) {
-            final HuffmanLeaf<T> leaf = (HuffmanLeaf<T>) tree;
-            final HuffmanBitCode<T> readyCode = new HuffmanBitCode<T>();
-            readyCode.bitCode = code.bitCode;
-            readyCode.bitLength = code.bitLength;
-            codes.put(leaf.value, readyCode);
-
-        } else if (tree instanceof HuffmanNode) {
-            final HuffmanNode<T> node = (HuffmanNode<T>) tree;
-
-            // traverse left
-            code.bitCode = code.bitCode << 1;
-            code.bitLength++;
-
-            getBitCode(node.left, code, codes);
-            code.bitCode = code.bitCode >>> 1;
-            code.bitLength--;
-
-            // traverse right
-            code.bitCode = code.bitCode << 1 | 1;
-            code.bitLength++;
-
-            getBitCode(node.right, code, codes);
-            code.bitCode = code.bitCode >>> 1;
-            code.bitLength--;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanLeaf.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanLeaf.java
deleted file mode 100644
index 81b3f56..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanLeaf.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman;
-
-class HuffmanLeaf<T> extends HuffmanTree<T> {
-    // user object, attached to the leaf:
-    public final T value;
-
-    public HuffmanLeaf(final int freq, final T val) {
-        super(freq);
-        value = val;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanNode.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanNode.java
deleted file mode 100644
index 2411c4a..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanNode.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman;
-
-class HuffmanNode<T> extends HuffmanTree<T> {
-    public final HuffmanTree<T> left, right;
-
-    public HuffmanNode(final HuffmanTree<T> left, final HuffmanTree<T> right) {
-        super(left.frequency + right.frequency);
-        this.left = left;
-        this.right = right;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanTree.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanTree.java
deleted file mode 100644
index 43500c4..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/HuffmanTree.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman;
-
-public abstract class HuffmanTree<T> implements Comparable<HuffmanTree<T>> {
-    public final int frequency;
-
-    HuffmanTree(final int freq) {
-        frequency = freq;
-    }
-
-    public int compareTo(@SuppressWarnings("NullableProblems") final HuffmanTree<T> tree) {
-        return frequency - tree.frequency;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanByteCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanByteCodec.java
deleted file mode 100644
index 83b001c..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanByteCodec.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.encoding.AbstractBitCodec;
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-class CanonicalHuffmanByteCodec extends AbstractBitCodec<Byte> {
-    private final HuffmanByteHelper helper;
-
-    /*
-     * values[]: the alphabet (provided as Integers) bitLengths[]: the number of
-     * bits of symbol's huffman code
-     */
-    public CanonicalHuffmanByteCodec(final byte[] values, final int[] bitLengths) {
-        helper = new HuffmanByteHelper(values, bitLengths);
-    }
-
-    @Override
-    public Byte read(final BitInputStream bitInputStream) throws IOException {
-        return helper.read(bitInputStream);
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final Byte object) throws IOException {
-        return helper.write(bitOutputStream, object);
-    }
-
-    @Override
-    public long numberOfBits(final Byte object) {
-        final HuffmanBitCode bitCode;
-        try {
-            //noinspection SuspiciousMethodCalls
-            bitCode = helper.codes.get(object);
-            return bitCode.bitLength;
-        } catch (final NullPointerException e) {
-            throw new RuntimeException("Value " + object + " not found.", e);
-        }
-    }
-
-    @Override
-    public Byte read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented");
-    }
-
-    @Override
-    public void readInto(final BitInputStream bitInputStream, final byte[] array, final int offset,
-                         final int valueLen) throws IOException {
-        for (int i = 0; i < valueLen; i++)
-            array[offset + i] = helper.read(bitInputStream);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanIntegerCodec.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanIntegerCodec.java
deleted file mode 100644
index 96dfc78..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/CanonicalHuffmanIntegerCodec.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.encoding.AbstractBitCodec;
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-
-
-class CanonicalHuffmanIntegerCodec extends AbstractBitCodec<Integer> {
-    private final HuffmanIntHelper helper;
-
-    /*
-     * values[]: the alphabet (provided as Integers) bitLengths[]: the number of
-     * bits of symbol's huffman code
-     */
-    public CanonicalHuffmanIntegerCodec(final int[] values, final int[] bitLengths) {
-        helper = new HuffmanIntHelper(values, bitLengths);
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream) throws IOException {
-        return helper.read(bitInputStream);
-    }
-
-    @Override
-    public long write(final BitOutputStream bitOutputStream, final Integer object) throws IOException {
-        return helper.write(bitOutputStream, object);
-    }
-
-    @Override
-    public long numberOfBits(final Integer object) {
-        final HuffmanBitCode bitCode;
-        bitCode = helper.codes.get(object);
-        return bitCode.bitLength;
-    }
-
-    @Override
-    public Integer read(final BitInputStream bitInputStream, final int length) throws IOException {
-        throw new RuntimeException("Not implemented");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanBitCode.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanBitCode.java
deleted file mode 100644
index 7d4c0e0..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanBitCode.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-class HuffmanBitCode {
-    int bitCode;
-    int bitLength;
-    int value;
-
-    @Override
-    public String toString() {
-        return value + ":\t" + Integer.toBinaryString(bitCode).substring(32 - bitLength) + " " + bitCode;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteEncoding.java
deleted file mode 100644
index 64a6729..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteEncoding.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.encoding.BitCodec;
-import htsjdk.samtools.cram.encoding.Encoding;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Map;
-
-public class HuffmanByteEncoding implements Encoding<Byte> {
-    private static final EncodingID ENCODING_ID = EncodingID.HUFFMAN;
-    private int[] bitLengths;
-    private byte[] values;
-    private ByteBuffer buf = ByteBuffer.allocate(1024);
-
-    public HuffmanByteEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        buf.clear();
-        if (buf.capacity() < values.length * 8)
-            buf = ByteBuffer.allocate(values.length * 8);
-
-        ITF8.writeUnsignedITF8(values.length, buf);
-        for (final byte value : values)
-            buf.put(value);
-
-        ITF8.writeUnsignedITF8(bitLengths.length, buf);
-        for (final int value : bitLengths)
-            ITF8.writeUnsignedITF8(value, buf);
-
-        buf.flip();
-        final byte[] array = new byte[buf.limit()];
-        buf.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buf = ByteBuffer.wrap(data);
-        int size = ITF8.readUnsignedITF8(buf);
-        values = new byte[size];
-        buf.get(values);
-
-        size = ITF8.readUnsignedITF8(buf);
-        bitLengths = new int[size];
-        for (int i = 0; i < size; i++)
-            bitLengths[i] = ITF8.readUnsignedITF8(buf);
-    }
-
-    @Override
-    public BitCodec<Byte> buildCodec(final Map<Integer, InputStream> inputMap,
-                                     final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new CanonicalHuffmanByteCodec(values, bitLengths);
-    }
-
-    public static EncodingParams toParam(final byte[] bfValues, final int[] bfBitLens) {
-        final HuffmanByteEncoding e = new HuffmanByteEncoding();
-        e.values = bfValues;
-        e.bitLengths = bfBitLens;
-        return new EncodingParams(ENCODING_ID, e.toByteArray());
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteHelper.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteHelper.java
deleted file mode 100644
index af62c5e..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanByteHelper.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-class HuffmanByteHelper {
-    TreeMap<Integer, HuffmanBitCode> codes;
-
-    private final int[] values;
-    private final int[] bitLengths;
-    private TreeMap<Integer, SortedSet<Integer>> codeBook;
-
-    private final HuffmanBitCode[] sortedCodes;
-    private final int[] sortedValuesByBitCode;
-    private final int[] sortedBitLensByBitCode;
-    private final int[] bitCodeToValue;
-    private final HuffmanBitCode[] valueToCode;
-
-    HuffmanByteHelper(final byte[] values, final int[] bitLengths) {
-        this.values = new int[values.length];
-        for (int i = 0; i < values.length; i++)
-            this.values[i] = 0xFF & values[i];
-
-        this.bitLengths = bitLengths;
-
-        buildCodeBook();
-        buildCodes();
-
-        final ArrayList<HuffmanBitCode> list = new ArrayList<HuffmanBitCode>(
-                codes.size());
-        list.addAll(codes.values());
-        Collections.sort(list, bitCodeComparator);
-        sortedCodes = list.toArray(new HuffmanBitCode[list
-                .size()]);
-
-        final byte[] sortedValues = Arrays.copyOf(values, values.length);
-        Arrays.sort(sortedValues);
-
-        sortedValuesByBitCode = new int[sortedCodes.length];
-        sortedBitLensByBitCode = new int[sortedCodes.length];
-        int maxBitCode = 0;
-        for (int i = 0; i < sortedCodes.length; i++) {
-            sortedValuesByBitCode[i] = sortedCodes[i].value;
-            sortedBitLensByBitCode[i] = sortedCodes[i].bitLength;
-            if (maxBitCode < sortedCodes[i].bitCode)
-                maxBitCode = sortedCodes[i].bitCode;
-        }
-
-        bitCodeToValue = new int[maxBitCode + 1];
-        Arrays.fill(bitCodeToValue, -1);
-        for (int i = 0; i < sortedCodes.length; i++) {
-            bitCodeToValue[sortedCodes[i].bitCode] = i;
-        }
-
-        valueToCode = new HuffmanBitCode[255];
-        Arrays.fill(valueToCode, null);
-        for (final HuffmanBitCode code : sortedCodes) {
-            valueToCode[code.value] = code;
-        }
-    }
-
-    private void buildCodeBook() {
-        codeBook = new TreeMap<Integer, SortedSet<Integer>>();
-        for (int i = 0; i < values.length; i++) {
-            if (codeBook.containsKey(bitLengths[i]))
-                codeBook.get(bitLengths[i]).add(values[i]);
-            else {
-                final TreeSet<Integer> entry = new TreeSet<Integer>();
-                entry.add(values[i]);
-                codeBook.put(bitLengths[i], entry);
-            }
-        }
-    }
-
-    private void buildCodes() {
-        codes = new TreeMap<Integer, HuffmanBitCode>();
-        int codeLength = 0, codeValue = -1;
-        for (final Object key : codeBook.keySet()) { // Iterate over code lengths
-
-            @SuppressWarnings("SuspiciousMethodCalls") final SortedSet<Integer> get = codeBook.get(key);
-            final int intKey = Integer.parseInt(key.toString());
-            for (final Integer entry : get) { // Iterate over symbols
-                final HuffmanBitCode code = new HuffmanBitCode();
-                code.bitLength = intKey; // given: bit length
-                code.value = entry; // given: symbol
-
-                codeValue++; // increment bit value by 1
-                final int delta = intKey - codeLength; // new length?
-                codeValue = codeValue << delta; // pad with 0's
-                code.bitCode = codeValue; // calculated: huffman code
-                codeLength += delta; // adjust current code length
-
-                if (NumberOfSetBits(codeValue) > intKey)
-                    throw new IllegalArgumentException("Symbol out of range");
-
-                codes.put(entry, code); // Store HuffmanBitCode
-
-            }
-
-        }
-    }
-
-    final long write(final BitOutputStream bitOutputStream, final byte value)
-            throws IOException {
-        final HuffmanBitCode code = valueToCode[value];
-        if (code.value != value)
-            throw new RuntimeException(String.format(
-                    "Searching for %d but found %s.", value, code.toString()));
-        bitOutputStream.write(code.bitCode, code.bitLength);
-        // System.out.println("Writing: " + code.toString());
-        return code.bitLength;
-    }
-
-    final byte read(final BitInputStream bitInputStream) throws IOException {
-        int prevLen = 0;
-        int bits = 0;
-        for (int i = 0; i < sortedCodes.length; i++) {
-            final int length = sortedCodes[i].bitLength;
-            bits <<= length - prevLen;
-            bits |= bitInputStream.readBits(length - prevLen);
-            prevLen = length;
-
-            final int index = bitCodeToValue[bits];
-            if (index > -1 && sortedBitLensByBitCode[index] == length)
-                return (byte) (0xFF & sortedValuesByBitCode[index]);
-
-            for (int j = i; sortedCodes[j + 1].bitLength == length
-                    && j < sortedCodes.length; j++)
-                i++;
-        }
-
-        throw new RuntimeException("Not found.");
-    }
-
-    private static final Comparator<HuffmanBitCode> bitCodeComparator = new Comparator<HuffmanBitCode>() {
-
-        @Override
-        public int compare(final HuffmanBitCode o1, final HuffmanBitCode o2) {
-            final int result = o1.bitLength - o2.bitLength;
-            if (result == 0)
-                return o1.bitCode - o2.bitCode;
-            else
-                return result;
-        }
-    };
-
-    private static int NumberOfSetBits(int i) {
-        i = i - ((i >> 1) & 0x55555555);
-        i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
-        return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntHelper.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntHelper.java
deleted file mode 100644
index 7f7e564..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntHelper.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.io.BitOutputStream;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-class HuffmanIntHelper {
-    TreeMap<Integer, HuffmanBitCode> codes;
-
-    private final int[] values;
-    private final int[] bitLengths;
-    private TreeMap<Integer, SortedSet<Integer>> codeBook;
-
-    private final HuffmanBitCode[] sortedCodes;
-    private final HuffmanBitCode[] sortedByValue;
-    private final int[] sortedValues;
-    private final int[] sortedValuesByBitCode;
-    private final int[] sortedBitLensByBitCode;
-    private final int[] bitCodeToValue;
-
-    public HuffmanIntHelper(final int[] values, final int[] bitLengths) {
-        this.values = values;
-        this.bitLengths = bitLengths;
-
-        buildCodeBook();
-        buildCodes();
-
-        final ArrayList<HuffmanBitCode> list = new ArrayList<HuffmanBitCode>(
-                codes.size());
-        list.addAll(codes.values());
-        Collections.sort(list, bitCodeComparator);
-        sortedCodes = list.toArray(new HuffmanBitCode[list
-                .size()]);
-
-        sortedValues = Arrays.copyOf(values, values.length);
-        Arrays.sort(sortedValues);
-        {
-            int i = 0;
-            sortedByValue = new HuffmanBitCode[sortedValues.length];
-            for (final int value : sortedValues)
-                sortedByValue[i++] = codes.get(value);
-        }
-
-        final int[] sortedBitCodes = new int[sortedCodes.length];
-        sortedValuesByBitCode = new int[sortedCodes.length];
-        sortedBitLensByBitCode = new int[sortedCodes.length];
-        int maxBitCode = 0;
-        for (int i = 0; i < sortedBitCodes.length; i++) {
-            sortedBitCodes[i] = sortedCodes[i].bitCode;
-            sortedValuesByBitCode[i] = sortedCodes[i].value;
-            sortedBitLensByBitCode[i] = sortedCodes[i].bitLength;
-            if (maxBitCode < sortedCodes[i].bitCode)
-                maxBitCode = sortedCodes[i].bitCode;
-        }
-
-        bitCodeToValue = new int[maxBitCode + 1];
-        Arrays.fill(bitCodeToValue, -1);
-        for (int i = 0; i < sortedBitCodes.length; i++) {
-            bitCodeToValue[sortedCodes[i].bitCode] = i;
-        }
-    }
-
-    private void buildCodeBook() {
-        codeBook = new TreeMap<Integer, SortedSet<Integer>>();
-        for (int i = 0; i < values.length; i++) {
-            if (codeBook.containsKey(bitLengths[i]))
-                codeBook.get(bitLengths[i]).add(values[i]);
-            else {
-                final TreeSet<Integer> entry = new TreeSet<Integer>();
-                entry.add(values[i]);
-                codeBook.put(bitLengths[i], entry);
-            }
-        }
-    }
-
-    private void buildCodes() {
-        codes = new TreeMap<Integer, HuffmanBitCode>();
-        int codeLength = 0, codeValue = -1;
-        for (final Object key : codeBook.keySet()) { // Iterate over code lengths
-
-            @SuppressWarnings("SuspiciousMethodCalls") final SortedSet<Integer> get = codeBook.get(key);
-            final int intKey = Integer.parseInt(key.toString());
-            for (final Integer entry : get) { // Iterate over symbols
-                final HuffmanBitCode code = new HuffmanBitCode();
-                code.bitLength = intKey; // given: bit length
-                code.value = entry; // given: symbol
-
-                codeValue++; // increment bit value by 1
-                final int delta = intKey - codeLength; // new length?
-                codeValue = codeValue << delta; // pad with 0's
-                code.bitCode = codeValue; // calculated: huffman code
-                codeLength += delta; // adjust current code length
-
-                if (NumberOfSetBits(codeValue) > intKey)
-                    throw new IllegalArgumentException("Symbol out of range");
-
-                codes.put(entry, code); // Store HuffmanBitCode
-
-            }
-
-        }
-    }
-
-    public final long write(final BitOutputStream bitOutputStream, final int value) throws IOException {
-        final int index = Arrays.binarySearch(sortedValues, value);
-        final HuffmanBitCode code = sortedByValue[index];
-        if (code.value != value)
-            throw new RuntimeException(String.format(
-                    "Searching for %d but found %s.", value, code.toString()));
-        bitOutputStream.write(code.bitCode, code.bitLength);
-        return code.bitLength;
-    }
-
-    public final int read(final BitInputStream bitInputStream) throws IOException {
-        int prevLen = 0;
-        int bits = 0;
-        for (int i = 0; i < sortedCodes.length; i++) {
-            final int length = sortedCodes[i].bitLength;
-            bits <<= length - prevLen;
-            bits |= bitInputStream.readBits(length - prevLen);
-            prevLen = length;
-            { // Variant 2:
-                final int index = bitCodeToValue[bits];
-                if (index > -1 && sortedBitLensByBitCode[index] == length)
-                    return sortedValuesByBitCode[index];
-
-                for (int j = i; sortedCodes[j + 1].bitLength == length
-                        && j < sortedCodes.length; j++)
-                    i++;
-            }
-        }
-
-        throw new RuntimeException("Not found.");
-    }
-
-    private static final Comparator<HuffmanBitCode> bitCodeComparator = new Comparator<HuffmanBitCode>() {
-
-        @Override
-        public int compare(final HuffmanBitCode o1, final HuffmanBitCode o2) {
-            final int result = o1.bitLength - o2.bitLength;
-            if (result == 0)
-                return o1.bitCode - o2.bitCode;
-            else
-                return result;
-        }
-    };
-
-    private static int NumberOfSetBits(int i) {
-        i = i - ((i >> 1) & 0x55555555);
-        i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
-        return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntegerEncoding.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntegerEncoding.java
deleted file mode 100644
index 230a664..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanIntegerEncoding.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.encoding.BitCodec;
-import htsjdk.samtools.cram.encoding.Encoding;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Map;
-
-public class HuffmanIntegerEncoding implements Encoding<Integer> {
-    private static final EncodingID ENCODING_ID = EncodingID.HUFFMAN;
-    private int[] bitLengths;
-    private int[] values;
-    private final ByteBuffer buf = ByteBuffer.allocate(1024 * 10);
-
-    public HuffmanIntegerEncoding() {
-    }
-
-    @Override
-    public EncodingID id() {
-        return ENCODING_ID;
-    }
-
-    @Override
-    public byte[] toByteArray() {
-        buf.clear();
-        ITF8.writeUnsignedITF8(values.length, buf);
-        for (final int value : values)
-            ITF8.writeUnsignedITF8(value, buf);
-
-        ITF8.writeUnsignedITF8(bitLengths.length, buf);
-        for (final int value : bitLengths)
-            ITF8.writeUnsignedITF8(value, buf);
-
-        buf.flip();
-        final byte[] array = new byte[buf.limit()];
-        buf.get(array);
-        return array;
-    }
-
-    @Override
-    public void fromByteArray(final byte[] data) {
-        final ByteBuffer buf = ByteBuffer.wrap(data);
-        int size = ITF8.readUnsignedITF8(buf);
-        values = new int[size];
-
-        for (int i = 0; i < size; i++)
-            values[i] = ITF8.readUnsignedITF8(buf);
-
-        size = ITF8.readUnsignedITF8(buf);
-        bitLengths = new int[size];
-        for (int i = 0; i < size; i++)
-            bitLengths[i] = ITF8.readUnsignedITF8(buf);
-    }
-
-    @Override
-    public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
-                                        final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        return new CanonicalHuffmanIntegerCodec(values, bitLengths);
-    }
-
-    public static EncodingParams toParam(final int[] bfValues, final int[] bfBitLens) {
-        final HuffmanIntegerEncoding e = new HuffmanIntegerEncoding();
-        e.values = bfValues;
-        e.bitLengths = bfBitLens;
-        return new EncodingParams(ENCODING_ID, e.toByteArray());
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (obj instanceof HuffmanIntegerEncoding) {
-            final HuffmanIntegerEncoding foe = (HuffmanIntegerEncoding) obj;
-            return Arrays.equals(bitLengths, foe.bitLengths) && Arrays.equals(values, foe.values);
-
-        }
-        return false;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanParamsCalculator.java b/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanParamsCalculator.java
deleted file mode 100644
index c489a73..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanParamsCalculator.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.common.MutableInt;
-import htsjdk.samtools.cram.encoding.huffman.HuffmanCode;
-import htsjdk.samtools.cram.encoding.huffman.HuffmanTree;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * A utility class to calculate Huffman encoding parameters based on the values to be encoded.
- */
-class HuffmanParamsCalculator {
-    private final HashMap<Integer, MutableInt> countMap = new HashMap<>();
-    private int[] values = new int[]{};
-    private int[] bitLens = new int[]{};
-
-    public void add(final int value) {
-        MutableInt counter = countMap.get(value);
-        if (counter == null) {
-            counter = new MutableInt();
-            countMap.put(value, counter);
-        }
-        counter.value++;
-    }
-
-    public void add(final Integer value, final int inc) {
-        MutableInt counter = countMap.get(value);
-        if (counter == null) {
-            counter = new MutableInt();
-            countMap.put(value, counter);
-        }
-        counter.value += inc;
-    }
-
-    public int[] bitLens() {
-        return bitLens;
-    }
-
-    public int[] values() {
-        return values;
-    }
-
-    public Integer[] valuesAsAutoIntegers() {
-        final Integer[] intValues = new Integer[values.length];
-        for (int i = 0; i < intValues.length; i++) {
-            intValues[i] = values[i];
-        }
-
-        return intValues;
-    }
-
-    public byte[] valuesAsBytes() {
-        final byte[] byteValues = new byte[values.length];
-        for (int i = 0; i < byteValues.length; i++) {
-            byteValues[i] = (byte) (0xFF & values[i]);
-        }
-
-        return byteValues;
-    }
-
-    public Byte[] valuesAsAutoBytes() {
-        final Byte[] byteValues = new Byte[values.length];
-        for (int i = 0; i < byteValues.length; i++) {
-            byteValues[i] = (byte) (0xFF & values[i]);
-        }
-
-        return byteValues;
-    }
-
-    public void calculate() {
-        final HuffmanTree<Integer> tree;
-        {
-            final int size = countMap.size();
-            final int[] frequencies = new int[size];
-            final int[] values = new int[size];
-
-            int i = 0;
-            for (final Integer key : countMap.keySet()) {
-                values[i] = key;
-                frequencies[i] = countMap.get(key).value;
-                i++;
-            }
-            tree = HuffmanCode.buildTree(frequencies, autobox(values));
-        }
-
-        final List<Integer> valueList = new ArrayList<Integer>();
-        final List<Integer> lens = new ArrayList<Integer>();
-        HuffmanCode.getValuesAndBitLengths(valueList, lens, tree);
-
-        // the following sorting is not really required, but whatever:
-        final BitCode[] codes = new BitCode[valueList.size()];
-        for (int i = 0; i < valueList.size(); i++) {
-            codes[i] = new BitCode(valueList.get(i), lens.get(i));
-        }
-        Arrays.sort(codes);
-
-        values = new int[codes.length];
-        bitLens = new int[codes.length];
-
-        for (int i = 0; i < codes.length; i++) {
-            final BitCode code = codes[i];
-            bitLens[i] = code.length;
-            values[i] = code.value;
-        }
-    }
-
-    private static Integer[] autobox(final int[] array) {
-        final Integer[] newArray = new Integer[array.length];
-        for (int i = 0; i < array.length; i++) {
-            newArray[i] = array[i];
-        }
-        return newArray;
-    }
-
-    private static class BitCode implements Comparable<BitCode> {
-        final int value;
-        final int length;
-
-        public BitCode(final int value, final int length) {
-            this.value = value;
-            this.length = length;
-        }
-
-        @Override
-        public int compareTo(@SuppressWarnings("NullableProblems") final BitCode o) {
-            final int result = value - o.value;
-            if (result != 0) {
-                return result;
-            }
-            return length - o.length;
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/Constants.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/Constants.java
deleted file mode 100644
index 2981aa5..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/Constants.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-class Constants {
-    static final int TF_SHIFT = 12;
-    static final int TOTFREQ = (1 << TF_SHIFT);
-    static final int RANS_BYTE_L = 1 << 23;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/D04.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/D04.java
deleted file mode 100644
index 69990b3..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/D04.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import java.nio.ByteBuffer;
-
-class D04 {
-    static void uncompress(final ByteBuffer in, final Decoding.AriDecoder D,
-                           final Decoding.RansDecSymbol[] syms, final ByteBuffer out) {
-        int rans0, rans1, rans2, rans3;
-        rans0 = in.getInt();
-        rans1 = in.getInt();
-        rans2 = in.getInt();
-        rans3 = in.getInt();
-
-        final int out_sz = out.remaining();
-        final int out_end = (out_sz & ~3);
-        for (int i = 0; i < out_end; i += 4) {
-            final byte c0 = D.R[Decoding.RansDecGet(rans0, Constants.TF_SHIFT)];
-            final byte c1 = D.R[Decoding.RansDecGet(rans1, Constants.TF_SHIFT)];
-            final byte c2 = D.R[Decoding.RansDecGet(rans2, Constants.TF_SHIFT)];
-            final byte c3 = D.R[Decoding.RansDecGet(rans3, Constants.TF_SHIFT)];
-
-            out.put(i, c0);
-            out.put(i + 1, c1);
-            out.put(i + 2, c2);
-            out.put(i + 3, c3);
-
-            rans0 = Decoding.RansDecAdvanceSymbolStep(rans0, syms[0xFF & c0],
-                    Constants.TF_SHIFT);
-            rans1 = Decoding.RansDecAdvanceSymbolStep(rans1, syms[0xFF & c1],
-                    Constants.TF_SHIFT);
-            rans2 = Decoding.RansDecAdvanceSymbolStep(rans2, syms[0xFF & c2],
-                    Constants.TF_SHIFT);
-            rans3 = Decoding.RansDecAdvanceSymbolStep(rans3, syms[0xFF & c3],
-                    Constants.TF_SHIFT);
-
-            rans0 = Decoding.RansDecRenormalize(rans0, in);
-            rans1 = Decoding.RansDecRenormalize(rans1, in);
-            rans2 = Decoding.RansDecRenormalize(rans2, in);
-            rans3 = Decoding.RansDecRenormalize(rans3, in);
-        }
-
-        out.position(out_end);
-        byte c;
-        switch (out_sz & 3) {
-            case 0:
-                break;
-            case 1:
-                c = D.R[Decoding.RansDecGet(rans0, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans0, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-                break;
-
-            case 2:
-                c = D.R[Decoding.RansDecGet(rans0, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans0, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-
-                c = D.R[Decoding.RansDecGet(rans1, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans1, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-                break;
-
-            case 3:
-                c = D.R[Decoding.RansDecGet(rans0, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans0, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-
-                c = D.R[Decoding.RansDecGet(rans1, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans1, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-
-                c = D.R[Decoding.RansDecGet(rans2, Constants.TF_SHIFT)];
-                Decoding.RansDecAdvanceSymbol(rans2, in, syms[0xFF & c],
-                        Constants.TF_SHIFT);
-                out.put(c);
-                break;
-        }
-
-        out.position(0);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/D14.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/D14.java
deleted file mode 100644
index 9523d2e..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/D14.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-class D14 {
-    static void uncompress(final ByteBuffer in, final ByteBuffer out_buf, final Decoding.AriDecoder[] D,
-                           final Decoding.RansDecSymbol[][] syms) {
-        final int out_sz = out_buf.remaining();
-        int rans0, rans1, rans2, rans7;
-        in.order(ByteOrder.LITTLE_ENDIAN);
-        rans0 = in.getInt();
-        rans1 = in.getInt();
-        rans2 = in.getInt();
-        rans7 = in.getInt();
-
-        final int isz4 = out_sz >> 2;
-        int i0 = 0;
-        int i1 = isz4;
-        int i2 = 2 * isz4;
-        int i7 = 3 * isz4;
-        int l0 = 0;
-        int l1 = 0;
-        int l2 = 0;
-        int l7 = 0;
-        for (; i0 < isz4; i0++, i1++, i2++, i7++) {
-            final int c0 = 0xFF & D[l0].R[Decoding.RansDecGet(rans0,
-                    Constants.TF_SHIFT)];
-            final int c1 = 0xFF & D[l1].R[Decoding.RansDecGet(rans1,
-                    Constants.TF_SHIFT)];
-            final int c2 = 0xFF & D[l2].R[Decoding.RansDecGet(rans2,
-                    Constants.TF_SHIFT)];
-            final int c7 = 0xFF & D[l7].R[Decoding.RansDecGet(rans7,
-                    Constants.TF_SHIFT)];
-
-            out_buf.put(i0, (byte) c0);
-            out_buf.put(i1, (byte) c1);
-            out_buf.put(i2, (byte) c2);
-            out_buf.put(i7, (byte) c7);
-
-            rans0 = Decoding.RansDecAdvanceSymbolStep(rans0, syms[l0][c0],
-                    Constants.TF_SHIFT);
-            rans1 = Decoding.RansDecAdvanceSymbolStep(rans1, syms[l1][c1],
-                    Constants.TF_SHIFT);
-            rans2 = Decoding.RansDecAdvanceSymbolStep(rans2, syms[l2][c2],
-                    Constants.TF_SHIFT);
-            rans7 = Decoding.RansDecAdvanceSymbolStep(rans7, syms[l7][c7],
-                    Constants.TF_SHIFT);
-
-            rans0 = Decoding.RansDecRenormalize(rans0, in);
-            rans1 = Decoding.RansDecRenormalize(rans1, in);
-            rans2 = Decoding.RansDecRenormalize(rans2, in);
-            rans7 = Decoding.RansDecRenormalize(rans7, in);
-
-            l0 = c0;
-            l1 = c1;
-            l2 = c2;
-            l7 = c7;
-        }
-
-        // Remainder
-        for (; i7 < out_sz; i7++) {
-            final int c7 = 0xFF & D[l7].R[Decoding.RansDecGet(rans7,
-                    Constants.TF_SHIFT)];
-            out_buf.put(i7, (byte) c7);
-            rans7 = Decoding.RansDecAdvanceSymbol(rans7, in, syms[l7][c7],
-                    Constants.TF_SHIFT);
-            l7 = c7;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/Decoding.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/Decoding.java
deleted file mode 100644
index fd29ab7..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/Decoding.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import java.nio.ByteBuffer;
-
- at SuppressWarnings("SameParameterValue")
-class Decoding {
-
-    static class FC {
-        int F, C;
-    }
-
-    static class AriDecoder {
-        final FC[] fc = new FC[256];
-        byte[] R;
-    }
-
-    static class RansDecSymbol {
-        int start; // Start of range.
-        int freq; // Symbol frequency.
-    }
-
-    // Initialize a decoder symbol to start "start" and frequency "freq"
-    static void RansDecSymbolInit(final RansDecSymbol symbol, final int start, final int freq) {
-        assert (start <= (1 << 16));
-        assert (freq <= (1 << 16) - start);
-        symbol.start = start;
-        symbol.freq = freq;
-    }
-
-    // Advances in the bit stream by "popping" a single symbol with range start
-    // "start" and frequency "freq". All frequencies are assumed to sum to
-    // "1 << scale_bits".
-    // No renormalization or output happens.
-    private static int RansDecAdvanceStep(final int r, final int start, final int freq, final int scale_bits) {
-        final int mask = ((1 << scale_bits) - 1);
-
-        // s, x = D(x)
-        return freq * (r >> scale_bits) + (r & mask) - start;
-    }
-
-    // Equivalent to RansDecAdvanceStep that takes a symbol.
-    static int RansDecAdvanceSymbolStep(final int r, final RansDecSymbol sym, final int scale_bits) {
-        return RansDecAdvanceStep(r, sym.start, sym.freq, scale_bits);
-    }
-
-    // Returns the current cumulative frequency (map it to a symbol yourself!)
-    static int RansDecGet(final int r, final int scale_bits) {
-        return r & ((1 << scale_bits) - 1);
-    }
-
-    // Equivalent to RansDecAdvance that takes a symbol.
-    static int RansDecAdvanceSymbol(final int r, final ByteBuffer pptr, final RansDecSymbol sym,
-                                    final int scale_bits) {
-        return Decoding
-                .RansDecAdvance(r, pptr, sym.start, sym.freq, scale_bits);
-    }
-
-    // Advances in the bit stream by "popping" a single symbol with range start
-    // "start" and frequency "freq". All frequencies are assumed to sum to
-    // "1 << scale_bits",
-    // and the resulting bytes get written to ptr (which is updated).
-    private static int RansDecAdvance(int r, final ByteBuffer pptr, final int start, final int freq,
-                                      final int scale_bits) {
-        final int mask = (1 << scale_bits) - 1;
-
-        // s, x = D(x)
-        r = freq * (r >> scale_bits) + (r & mask) - start;
-
-        // re-normalize
-        if (r < Constants.RANS_BYTE_L) {
-            do {
-                final int b = 0xFF & pptr.get();
-                r = (r << 8) | b;
-            } while (r < Constants.RANS_BYTE_L);
-
-        }
-
-        return r;
-    }
-
-    // Re-normalize.
-    static int RansDecRenormalize(int r, final ByteBuffer pptr) {
-        // re-normalize
-        if (r < Constants.RANS_BYTE_L) {
-            do
-                r = (r << 8) | (0xFF & pptr.get());
-            while (r < Constants.RANS_BYTE_L);
-        }
-
-        return r;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/E04.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/E04.java
deleted file mode 100644
index 456520f..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/E04.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import htsjdk.samtools.cram.encoding.rans.Encoding.RansEncSymbol;
-
-import java.nio.ByteBuffer;
-
-class E04 {
-
-    static int compress(final ByteBuffer in, final RansEncSymbol[] syms,
-                        final ByteBuffer cp) {
-        final int cdata_size;
-        final int in_size = in.remaining();
-        int rans0, rans1, rans2, rans3;
-        final ByteBuffer ptr = cp.slice();
-
-        rans0 = Constants.RANS_BYTE_L;
-        rans1 = Constants.RANS_BYTE_L;
-        rans2 = Constants.RANS_BYTE_L;
-        rans3 = Constants.RANS_BYTE_L;
-
-        int i;
-        switch (i = (in_size & 3)) {
-            case 3:
-                rans2 = Encoding.RansEncPutSymbol(rans2, ptr,
-                        syms[0xFF & in.get(in_size - (i - 2))]);
-            case 2:
-                rans1 = Encoding.RansEncPutSymbol(rans1, ptr,
-                        syms[0xFF & in.get(in_size - (i - 1))]);
-            case 1:
-                rans0 = Encoding.RansEncPutSymbol(rans0, ptr,
-                        syms[0xFF & in.get(in_size - (i))]);
-            case 0:
-                break;
-        }
-        for (i = (in_size & ~3); i > 0; i -= 4) {
-            final int c3 = 0xFF & in.get(i - 1);
-            final int c2 = 0xFF & in.get(i - 2);
-            final int c1 = 0xFF & in.get(i - 3);
-            final int c0 = 0xFF & in.get(i - 4);
-
-            rans3 = Encoding.RansEncPutSymbol(rans3, ptr, syms[c3]);
-            rans2 = Encoding.RansEncPutSymbol(rans2, ptr, syms[c2]);
-            rans1 = Encoding.RansEncPutSymbol(rans1, ptr, syms[c1]);
-            rans0 = Encoding.RansEncPutSymbol(rans0, ptr, syms[c0]);
-        }
-
-        ptr.putInt(rans3);
-        ptr.putInt(rans2);
-        ptr.putInt(rans1);
-        ptr.putInt(rans0);
-        ptr.flip();
-        cdata_size = ptr.limit();
-        // reverse the compressed bytes, so that they become in REVERSE
-        // order:
-        Utils.reverse(ptr);
-        in.position(in.limit());
-        return cdata_size;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/E14.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/E14.java
deleted file mode 100644
index 01602c6..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/E14.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import htsjdk.samtools.cram.encoding.rans.Encoding.RansEncSymbol;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
- at SuppressWarnings("UnusedAssignment")
-class E14 {
-
-    static int compress(final ByteBuffer in, final RansEncSymbol[][] syms,
-                        final ByteBuffer out_buf) {
-        final int in_size = in.remaining();
-        final int compressedBlob_size;
-        int rans0, rans1, rans2, rans3;
-        rans0 = Constants.RANS_BYTE_L;
-        rans1 = Constants.RANS_BYTE_L;
-        rans2 = Constants.RANS_BYTE_L;
-        rans3 = Constants.RANS_BYTE_L;
-
-		/*
-         * Slicing is needed for buffer reversing later.
-		 */
-        final ByteBuffer ptr = out_buf.slice();
-
-        final int isz4 = in_size >> 2;
-        int i0 = isz4 - 2;
-        int i1 = 2 * isz4 - 2;
-        int i2 = 3 * isz4 - 2;
-        int i3 = 4 * isz4 - 2;
-
-        int l0 = 0;
-        if (i0 + 1 >= 0)
-            l0 = 0xFF & in.get(i0 + 1);
-        int l1 = 0;
-        if (i1 + 1 >= 0)
-            l1 = 0xFF & in.get(i1 + 1);
-        int l2 = 0;
-        if (i2 + 1 >= 0)
-            l2 = 0xFF & in.get(i2 + 1);
-        int l3;
-
-        // Deal with the remainder
-        l3 = 0xFF & in.get(in_size - 1);
-        for (i3 = in_size - 2; i3 > 4 * isz4 - 2 && i3 >= 0; i3--) {
-            final int c3 = 0xFF & in.get(i3 > -1 ? i3 : 0);
-            rans3 = Encoding.RansEncPutSymbol(rans3, ptr, syms[c3][l3]);
-            l3 = c3;
-        }
-
-        for (; i0 >= 0; i0--, i1--, i2--, i3--) {
-            final int c0 = 0xFF & in.get(i0);
-            final int c1 = 0xFF & in.get(i1);
-            final int c2 = 0xFF & in.get(i2);
-            final int c3 = 0xFF & in.get(i3);
-
-            rans3 = Encoding.RansEncPutSymbol(rans3, ptr, syms[c3][l3]);
-            rans2 = Encoding.RansEncPutSymbol(rans2, ptr, syms[c2][l2]);
-            rans1 = Encoding.RansEncPutSymbol(rans1, ptr, syms[c1][l1]);
-            rans0 = Encoding.RansEncPutSymbol(rans0, ptr, syms[c0][l0]);
-
-            l0 = c0;
-            l1 = c1;
-            l2 = c2;
-            l3 = c3;
-        }
-
-        rans3 = Encoding.RansEncPutSymbol(rans3, ptr, syms[0][l3]);
-        rans2 = Encoding.RansEncPutSymbol(rans2, ptr, syms[0][l2]);
-        rans1 = Encoding.RansEncPutSymbol(rans1, ptr, syms[0][l1]);
-        rans0 = Encoding.RansEncPutSymbol(rans0, ptr, syms[0][l0]);
-
-        ptr.order(ByteOrder.BIG_ENDIAN);
-        ptr.putInt(rans3);
-        ptr.putInt(rans2);
-        ptr.putInt(rans1);
-        ptr.putInt(rans0);
-        ptr.flip();
-        compressedBlob_size = ptr.limit();
-        Utils.reverse(ptr);
-        /*
-         * Depletion of the in buffer cannot be confirmed because of the get(int
-		 * position) method use during encoding, hence enforcing:
-		 */
-        in.position(in.limit());
-        return compressedBlob_size;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/Encoding.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/Encoding.java
deleted file mode 100644
index 069b946..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/Encoding.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import java.nio.ByteBuffer;
-
- at SuppressWarnings("SameParameterValue")
-class Encoding {
-
-    static class RansEncSymbol {
-        int x_max; // (Exclusive) upper bound of pre-normalization interval
-        int rcp_freq; // Fixed-point reciprocal frequency
-        int bias; // Bias
-        int cmpl_freq; // Complement of frequency: (1 << scale_bits) - freq
-        int rcp_shift; // Reciprocal shift
-    }
-
-    static void RansEncSymbolInit(final RansEncSymbol s, final int start, final int freq,
-                                  final int scale_bits) {
-        // RansAssert(scale_bits <= 16); RansAssert(start <= (1u <<
-        // scale_bits)); RansAssert(freq <= (1u << scale_bits) - start);
-
-        s.x_max = ((Constants.RANS_BYTE_L >> scale_bits) << 8) * freq;
-        s.cmpl_freq = (1 << scale_bits) - freq;
-        if (freq < 2) {
-            s.rcp_freq = (int) ~0L;
-            s.rcp_shift = 0;
-            s.bias = start + (1 << scale_bits) - 1;
-        } else {
-            // Alverson, "Integer Division using reciprocals"
-            // shift=ceil(log2(freq))
-            int shift = 0;
-            while (freq > (1L << shift))
-                shift++;
-
-            s.rcp_freq = (int) (((1L << (shift + 31)) + freq - 1) / freq);
-            s.rcp_shift = shift - 1;
-
-            // With these values, 'q' is the correct quotient, so we
-            // have bias=start.
-            s.bias = start;
-        }
-
-        s.rcp_shift += 32; // Avoid the extra >>32 in RansEncPutSymbol
-    }
-
-    static int RansEncPutSymbol(int r, final ByteBuffer ptr, final RansEncSymbol sym) {
-        assert (sym.x_max != 0); // can't encode symbol with freq=0
-
-        // re-normalize
-        int x = r;
-        final int x_max = sym.x_max;
-        if (x >= x_max) {
-            if (x >= x_max) {
-                ptr.put((byte) (x & 0xFF));
-                x >>= 8;
-                if (x >= x_max) {
-                    ptr.put((byte) (x & 0xFF));
-                    x >>= 8;
-                }
-            }
-        }
-
-        // x = C(s,x)
-        // NOTE: written this way so we get a 32-bit "multiply high" when
-        // available. If you're on a 64-bit platform with cheap multiplies
-        // (e.g. x64), just bake the +32 into rcp_shift.
-        // int q = (int) (((uint64_t)x * sym.rcp_freq) >> 32) >> sym.rcp_shift;
-
-        // The extra >>32 has already been added to RansEncSymbolInit
-        final long q = ((x * (0xFFFFFFFFL & sym.rcp_freq)) >> sym.rcp_shift);
-        r = (int) (x + sym.bias + q * sym.cmpl_freq);
-        return r;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/Frequencies.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/Frequencies.java
deleted file mode 100644
index bf6fc5d..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/Frequencies.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import htsjdk.samtools.cram.encoding.rans.Encoding.RansEncSymbol;
-
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-
- at SuppressWarnings({"ConstantConditions", "StatementWithEmptyBody"})
-class Frequencies {
-
-    static void readStats_o0(final ByteBuffer cp, final Decoding.AriDecoder decoder, final Decoding.RansDecSymbol[] syms) {
-        // Pre-compute reverse lookup of frequency.
-        int rle = 0;
-        int x = 0;
-        int j = cp.get() & 0xFF;
-        do {
-            if (decoder.fc[j] == null)
-                decoder.fc[j] = new Decoding.FC();
-            if ((decoder.fc[j].F = (cp.get() & 0xFF)) >= 128) {
-                decoder.fc[j].F &= ~128;
-                decoder.fc[j].F = ((decoder.fc[j].F & 127) << 8) | (cp.get() & 0xFF);
-            }
-            decoder.fc[j].C = x;
-
-            Decoding.RansDecSymbolInit(syms[j], decoder.fc[j].C, decoder.fc[j].F);
-
-			/* Build reverse lookup table */
-            if (decoder.R == null)
-                decoder.R = new byte[Constants.TOTFREQ];
-            Arrays.fill(decoder.R, x, x + decoder.fc[j].F, (byte) j);
-
-            x += decoder.fc[j].F;
-
-            if (rle == 0 && j + 1 == (0xFF & cp.get(cp.position()))) {
-                j = cp.get() & 0xFF;
-                rle = cp.get() & 0xFF;
-            } else if (rle != 0) {
-                rle--;
-                j++;
-            } else {
-                j = cp.get() & 0xFF;
-            }
-        } while (j != 0);
-
-        assert (x < Constants.TOTFREQ);
-    }
-
-    static void readStats_o1(final ByteBuffer cp, final Decoding.AriDecoder[] D,
-                             final Decoding.RansDecSymbol[][] syms) {
-        int rle_i = 0;
-        int i = 0xFF & cp.get();
-        do {
-            int rle_j = 0;
-            int x = 0;
-            int j = 0xFF & cp.get();
-            if (D[i] == null)
-                D[i] = new Decoding.AriDecoder();
-            do {
-                if (D[i].fc[j] == null)
-                    D[i].fc[j] = new Decoding.FC();
-                if ((D[i].fc[j].F = (0xFF & cp.get())) >= 128) {
-                    D[i].fc[j].F &= ~128;
-                    D[i].fc[j].F = ((D[i].fc[j].F & 127) << 8)
-                            | (0xFF & cp.get());
-                }
-                D[i].fc[j].C = x;
-
-                if (D[i].fc[j].F == 0)
-                    D[i].fc[j].F = Constants.TOTFREQ;
-
-                if (syms[i][j] == null)
-                    syms[i][j] = new Decoding.RansDecSymbol();
-
-                Decoding.RansDecSymbolInit(syms[i][j], D[i].fc[j].C,
-                        D[i].fc[j].F);
-
-				/* Build reverse lookup table */
-                if (D[i].R == null)
-                    D[i].R = new byte[Constants.TOTFREQ];
-                Arrays.fill(D[i].R, x, x + D[i].fc[j].F, (byte) j);
-
-                x += D[i].fc[j].F;
-                assert (x <= Constants.TOTFREQ);
-
-                if (rle_j == 0 && j + 1 == (0xFF & cp.get(cp.position()))) {
-                    j = (0xFF & cp.get());
-                    rle_j = (0xFF & cp.get());
-                } else if (rle_j != 0) {
-                    rle_j--;
-                    j++;
-                } else {
-                    j = (0xFF & cp.get());
-                }
-            } while (j != 0);
-
-            if (rle_i == 0 && i + 1 == (0xFF & cp.get(cp.position()))) {
-                i = (0xFF & cp.get());
-                rle_i = (0xFF & cp.get());
-            } else if (rle_i != 0) {
-                rle_i--;
-                i++;
-            } else {
-                i = (0xFF & cp.get());
-            }
-        } while (i != 0);
-    }
-
-    static int[] calcFrequencies_o0(final ByteBuffer in) {
-        final int in_size = in.remaining();
-
-        // Compute statistics
-        final int[] F = new int[256];
-        int T = 0;
-        for (int i = 0; i < in_size; i++) {
-            F[0xFF & in.get()]++;
-            T++;
-        }
-        final long tr = ((long) Constants.TOTFREQ << 31) / T + (1 << 30) / T;
-
-        // Normalise so T[i] == TOTFREQ
-        int m = 0, M = 0;
-        for (int j = 0; j < 256; j++) {
-            if (m < F[j]) {
-                m = F[j];
-                M = j;
-            }
-        }
-
-        int fsum = 0;
-        for (int j = 0; j < 256; j++) {
-            if (F[j] == 0)
-                continue;
-            if ((F[j] = (int) ((F[j] * tr) >> 31)) == 0)
-                F[j] = 1;
-            fsum += F[j];
-        }
-
-        fsum++;
-        if (fsum < Constants.TOTFREQ)
-            F[M] += Constants.TOTFREQ - fsum;
-        else
-            F[M] -= fsum - Constants.TOTFREQ;
-
-        assert (F[M] > 0);
-        return F;
-    }
-
-    static int[][] calcFrequencies_o1(final ByteBuffer in) {
-        final int in_size = in.remaining();
-
-        final int[][] F = new int[256][256];
-        final int[] T = new int[256];
-        int c;
-
-        int last_i = 0;
-        for (int i = 0; i < in_size; i++) {
-            F[last_i][c = (0xFF & in.get())]++;
-            T[last_i]++;
-            last_i = c;
-        }
-        F[0][0xFF & in.get((in_size >> 2))]++;
-        F[0][0xFF & in.get(2 * (in_size >> 2))]++;
-        F[0][0xFF & in.get(3 * (in_size >> 2))]++;
-        T[0] += 3;
-
-        for (int i = 0; i < 256; i++) {
-            if (T[i] == 0)
-                continue;
-
-            final double p = ((double) Constants.TOTFREQ) / T[i];
-            int t2 = 0, m = 0, M = 0;
-            for (int j = 0; j < 256; j++) {
-                if (F[i][j] == 0)
-                    continue;
-
-                if (m < F[i][j]) {
-                    m = F[i][j];
-                    M = j;
-                }
-
-                if ((F[i][j] *= p) == 0)
-                    F[i][j] = 1;
-                t2 += F[i][j];
-            }
-
-            t2++;
-            if (t2 < Constants.TOTFREQ)
-                F[i][M] += Constants.TOTFREQ - t2;
-            else
-                F[i][M] -= t2 - Constants.TOTFREQ;
-        }
-
-        return F;
-    }
-
-    static RansEncSymbol[] buildSyms_o0(final int[] F) {
-        final int[] C = new int[256];
-        final RansEncSymbol[] syms = new RansEncSymbol[256];
-        for (int i = 0; i < syms.length; i++)
-            syms[i] = new RansEncSymbol();
-
-        int T = 0;
-        for (int j = 0; j < 256; j++) {
-            C[j] = T;
-            T += F[j];
-            if (F[j] != 0) {
-                Encoding.RansEncSymbolInit(syms[j], C[j], F[j],
-                        Constants.TF_SHIFT);
-            }
-        }
-        return syms;
-    }
-
-    static int writeFrequencies_o0(final ByteBuffer cp, final int[] F) {
-        final int start = cp.position();
-
-        int rle = 0;
-        for (int j = 0; j < 256; j++) {
-            if (F[j] != 0) {
-                // j
-                if (rle != 0) {
-                    rle--;
-                } else {
-                    cp.put((byte) j);
-                    if (rle == 0 && j != 0 && F[j - 1] != 0) {
-                        for (rle = j + 1; rle < 256 && F[rle] != 0; rle++)
-                            ;
-                        rle -= j + 1;
-                        cp.put((byte) rle);
-                    }
-                }
-
-                // F[j]
-                if (F[j] < 128) {
-                    cp.put((byte) (F[j]));
-                } else {
-                    cp.put((byte) (128 | (F[j] >> 8)));
-                    cp.put((byte) (F[j] & 0xff));
-                }
-            }
-        }
-
-        cp.put((byte) 0);
-        return cp.position() - start;
-    }
-
-    static RansEncSymbol[][] buildSyms_o1(final int[][] F) {
-        final RansEncSymbol[][] syms = new RansEncSymbol[256][256];
-        for (int i = 0; i < syms.length; i++)
-            for (int j = 0; j < syms[i].length; j++)
-                syms[i][j] = new RansEncSymbol();
-
-        for (int i = 0; i < 256; i++) {
-            final int[] F_i_ = F[i];
-            int x = 0;
-            for (int j = 0; j < 256; j++) {
-                if (F_i_[j] != 0) {
-                    Encoding.RansEncSymbolInit(syms[i][j], x, F_i_[j],
-                            Constants.TF_SHIFT);
-                    x += F_i_[j];
-                }
-            }
-        }
-
-        return syms;
-    }
-
-    static int writeFrequencies_o1(final ByteBuffer cp, final int[][] F) {
-        final int start = cp.position();
-        final int[] T = new int[256];
-
-        for (int i = 0; i < 256; i++)
-            for (int j = 0; j < 256; j++)
-                T[i] += F[i][j];
-
-        int rle_i = 0;
-        for (int i = 0; i < 256; i++) {
-            if (T[i] == 0)
-                continue;
-
-            // Store frequency table
-            // i
-            if (rle_i != 0) {
-                rle_i--;
-            } else {
-                cp.put((byte) i);
-                // FIXME: could use order-0 statistics to observe which alphabet
-                // symbols are present and base RLE on that ordering instead.
-                if (i != 0 && T[i - 1] != 0) {
-                    for (rle_i = i + 1; rle_i < 256 && T[rle_i] != 0; rle_i++)
-                        ;
-                    rle_i -= i + 1;
-                    cp.put((byte) rle_i);
-                }
-            }
-
-            final int[] F_i_ = F[i];
-            int rle_j = 0;
-            for (int j = 0; j < 256; j++) {
-                if (F_i_[j] != 0) {
-
-                    // j
-                    if (rle_j != 0) {
-                        rle_j--;
-                    } else {
-                        cp.put((byte) j);
-                        if (rle_j == 0 && j != 0 && F_i_[j - 1] != 0) {
-                            for (rle_j = j + 1; rle_j < 256 && F_i_[rle_j] != 0; rle_j++)
-                                ;
-                            rle_j -= j + 1;
-                            cp.put((byte) rle_j);
-                        }
-                    }
-
-                    // F_i_[j]
-                    if (F_i_[j] < 128) {
-                        cp.put((byte) F_i_[j]);
-                    } else {
-                        cp.put((byte) (128 | (F_i_[j] >> 8)));
-                        cp.put((byte) (F_i_[j] & 0xff));
-                    }
-                }
-            }
-            cp.put((byte) 0);
-        }
-        cp.put((byte) 0);
-
-        return cp.position() - start;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/RANS.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/RANS.java
deleted file mode 100644
index c75881a..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/RANS.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import htsjdk.samtools.cram.encoding.rans.Encoding.RansEncSymbol;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-public class RANS {
-    public enum ORDER {
-        ZERO, ONE;
-
-        public static ORDER fromInt(final int value) {
-            try {
-                return ORDER.values()[value];
-            } catch (final ArrayIndexOutOfBoundsException e) {
-                throw new RuntimeException("Unknown rANS order: " + value);
-            }
-        }
-    }
-
-    private static final int ORDER_BYTE_LENGTH = 1;
-    private static final int COMPRESSED_BYTE_LENGTH = 4;
-    private static final int RAW_BYTE_LENGTH = 4;
-    private static final int PREFIX_BYTE_LENGTH = ORDER_BYTE_LENGTH
-            + COMPRESSED_BYTE_LENGTH + RAW_BYTE_LENGTH;
-    private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.allocate(0);
-
-    public static ByteBuffer uncompress(final ByteBuffer in, ByteBuffer out) {
-        if (in.remaining() == 0)
-            return ByteBuffer.allocate(0);
-
-        final ORDER order = ORDER.fromInt(in.get());
-
-        in.order(ByteOrder.LITTLE_ENDIAN);
-        final int in_sz = in.getInt();
-        if (in_sz != in.remaining() - RAW_BYTE_LENGTH)
-            throw new RuntimeException("Incorrect input length.");
-        final int out_sz = in.getInt();
-        if (out == null)
-            out = ByteBuffer.allocate(out_sz);
-        else
-            out.limit(out_sz);
-        if (out.remaining() < out_sz)
-            throw new RuntimeException("Output buffer too small to fit "
-                    + out_sz + " bytes.");
-
-        switch (order) {
-            case ZERO:
-                return uncompress_order0_way4(in, out);
-
-            case ONE:
-                return uncompress_order1_way4(in, out);
-
-            default:
-                throw new RuntimeException("Unknown rANS order: " + order);
-        }
-    }
-
-    public static ByteBuffer compress(final ByteBuffer in, final ORDER order, final ByteBuffer out) {
-        if (in.remaining() == 0)
-            return EMPTY_BUFFER;
-
-        if (in.remaining() < 4)
-            return encode_order0_way4(in, out);
-
-        switch (order) {
-            case ZERO:
-                return encode_order0_way4(in, out);
-            case ONE:
-                return encode_order1_way4(in, out);
-
-            default:
-                throw new RuntimeException("Unknown rANS order: " + order);
-        }
-    }
-
-    private static ByteBuffer allocateIfNeeded(final int in_size,
-                                               final ByteBuffer out_buf) {
-        final int compressedSize = (int) (1.05 * in_size + 257 * 257 * 3 + 4);
-        if (out_buf == null)
-            return ByteBuffer.allocate(compressedSize);
-        if (out_buf.remaining() < compressedSize)
-            throw new RuntimeException("Insufficient buffer size.");
-        out_buf.order(ByteOrder.LITTLE_ENDIAN);
-        return out_buf;
-    }
-
-    private static ByteBuffer encode_order0_way4(final ByteBuffer in,
-                                                 ByteBuffer out_buf) {
-        final int in_size = in.remaining();
-        out_buf = allocateIfNeeded(in_size, out_buf);
-        final int freqTableStart = PREFIX_BYTE_LENGTH;
-        out_buf.position(freqTableStart);
-
-        final int[] F = Frequencies.calcFrequencies_o0(in);
-        final RansEncSymbol[] syms = Frequencies.buildSyms_o0(F);
-
-        final ByteBuffer cp = out_buf.slice();
-        final int frequencyTable_size = Frequencies.writeFrequencies_o0(cp, F);
-
-        in.rewind();
-        final int compressedBlob_size = E04.compress(in, syms, cp);
-
-        finalizeCompressed(0, out_buf, in_size, frequencyTable_size,
-                compressedBlob_size);
-        return out_buf;
-    }
-
-    private static ByteBuffer encode_order1_way4(final ByteBuffer in,
-                                                 ByteBuffer out_buf) {
-        final int in_size = in.remaining();
-        out_buf = allocateIfNeeded(in_size, out_buf);
-        final int freqTableStart = PREFIX_BYTE_LENGTH;
-        out_buf.position(freqTableStart);
-
-        final int[][] F = Frequencies.calcFrequencies_o1(in);
-        final RansEncSymbol[][] syms = Frequencies.buildSyms_o1(F);
-
-        final ByteBuffer cp = out_buf.slice();
-        final int frequencyTable_size = Frequencies.writeFrequencies_o1(cp, F);
-
-        in.rewind();
-        final int compressedBlob_size = E14.compress(in, syms, cp);
-
-        finalizeCompressed(1, out_buf, in_size, frequencyTable_size,
-                compressedBlob_size);
-        return out_buf;
-    }
-
-    private static void finalizeCompressed(final int order, final ByteBuffer out_buf,
-                                           final int in_size, final int frequencyTable_size, final int compressedBlob_size) {
-        out_buf.limit(PREFIX_BYTE_LENGTH + frequencyTable_size
-                + compressedBlob_size);
-        out_buf.put(0, (byte) order);
-        out_buf.order(ByteOrder.LITTLE_ENDIAN);
-        final int compressedSizeOffset = ORDER_BYTE_LENGTH;
-        out_buf.putInt(compressedSizeOffset, frequencyTable_size
-                + compressedBlob_size);
-        final int rawSizeOffset = ORDER_BYTE_LENGTH + COMPRESSED_BYTE_LENGTH;
-        out_buf.putInt(rawSizeOffset, in_size);
-        out_buf.rewind();
-    }
-
-    private static ByteBuffer uncompress_order0_way4(final ByteBuffer in,
-                                                     final ByteBuffer out) {
-        in.order(ByteOrder.LITTLE_ENDIAN);
-        final Decoding.AriDecoder D = new Decoding.AriDecoder();
-        final Decoding.RansDecSymbol[] syms = new Decoding.RansDecSymbol[256];
-        for (int i = 0; i < syms.length; i++)
-            syms[i] = new Decoding.RansDecSymbol();
-
-        Frequencies.readStats_o0(in, D, syms);
-
-        D04.uncompress(in, D, syms, out);
-
-        return out;
-    }
-
-    private static ByteBuffer uncompress_order1_way4(final ByteBuffer in,
-                                                     final ByteBuffer out_buf) {
-        final Decoding.AriDecoder[] D = new Decoding.AriDecoder[256];
-        final Decoding.RansDecSymbol[][] syms = new Decoding.RansDecSymbol[256][256];
-        for (int i = 0; i < syms.length; i++)
-            for (int j = 0; j < syms[i].length; j++)
-                syms[i][j] = new Decoding.RansDecSymbol();
-        Frequencies.readStats_o1(in, D, syms);
-
-        D14.uncompress(in, out_buf, D, syms);
-
-        return out_buf;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/rans/Utils.java b/src/main/java/htsjdk/samtools/cram/encoding/rans/Utils.java
deleted file mode 100644
index e424c20..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/rans/Utils.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import java.nio.ByteBuffer;
-
-class Utils {
-    private static void reverse(final byte[] array, final int offset, final int size) {
-        if (array == null) {
-            return;
-        }
-        int i = offset;
-        int j = offset + size - 1;
-        byte tmp;
-        while (j > i) {
-            tmp = array[j];
-            array[j] = array[i];
-            array[i] = tmp;
-            j--;
-            i++;
-        }
-    }
-
-    static void reverse(final ByteBuffer ptr) {
-        byte tmp;
-        if (ptr.hasArray()) {
-            reverse(ptr.array(), ptr.arrayOffset(), ptr.limit());
-        } else {
-            for (int i = 0; i < ptr.limit(); i++) {
-                tmp = ptr.get(i);
-                ptr.put(i, ptr.get(ptr.limit() - i - 1));
-                ptr.put(ptr.limit() - i - 1, tmp);
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/reader/AbstractReader.java b/src/main/java/htsjdk/samtools/cram/encoding/reader/AbstractReader.java
deleted file mode 100644
index 83446f4..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/reader/AbstractReader.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.reader;
-
-import htsjdk.samtools.cram.common.IntHashMap;
-import htsjdk.samtools.cram.encoding.DataSeries;
-import htsjdk.samtools.cram.encoding.DataSeriesMap;
-import htsjdk.samtools.cram.encoding.DataSeriesType;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-
-import java.nio.charset.Charset;
-
- at SuppressWarnings({"WeakerAccess", "UnusedDeclaration"})
-public abstract class AbstractReader {
-    final Charset charset = Charset.forName("UTF8");
-    public boolean captureReadNames = false;
-    public byte[][][] tagIdDictionary;
-
-    @DataSeries(key = EncodingKey.BF_BitFlags, type = DataSeriesType.INT)
-    public DataReader<Integer> bitFlagsCodec;
-
-    @DataSeries(key = EncodingKey.CF_CompressionBitFlags, type = DataSeriesType.BYTE)
-    public DataReader<Byte> compressionBitFlagsCodec;
-
-    @DataSeries(key = EncodingKey.RL_ReadLength, type = DataSeriesType.INT)
-    public DataReader<Integer> readLengthCodec;
-
-    @DataSeries(key = EncodingKey.AP_AlignmentPositionOffset, type = DataSeriesType.INT)
-    public DataReader<Integer> alignmentStartCodec;
-
-    @DataSeries(key = EncodingKey.RG_ReadGroup, type = DataSeriesType.INT)
-    public DataReader<Integer> readGroupCodec;
-
-    @DataSeries(key = EncodingKey.RN_ReadName, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> readNameCodec;
-
-    @DataSeries(key = EncodingKey.NF_RecordsToNextFragment, type = DataSeriesType.INT)
-    public DataReader<Integer> distanceToNextFragmentCodec;
-
-    @DataSeriesMap(name = "TAG")
-    public IntHashMap<DataReader<byte[]>> tagValueCodecs;
-
-    @DataSeries(key = EncodingKey.FN_NumberOfReadFeatures, type = DataSeriesType.INT)
-    public DataReader<Integer> numberOfReadFeaturesCodec;
-
-    @DataSeries(key = EncodingKey.FP_FeaturePosition, type = DataSeriesType.INT)
-    public DataReader<Integer> readFeaturePositionCodec;
-
-    @DataSeries(key = EncodingKey.FC_FeatureCode, type = DataSeriesType.BYTE)
-    public DataReader<Byte> readFeatureCodeCodec;
-
-    @DataSeries(key = EncodingKey.BA_Base, type = DataSeriesType.BYTE)
-    public DataReader<Byte> baseCodec;
-
-    @DataSeries(key = EncodingKey.QS_QualityScore, type = DataSeriesType.BYTE)
-    public DataReader<Byte> qualityScoreCodec;
-
-    @DataSeries(key = EncodingKey.QS_QualityScore, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> qualityScoresCodec;
-
-    @DataSeries(key = EncodingKey.BS_BaseSubstitutionCode, type = DataSeriesType.BYTE)
-    public DataReader<Byte> baseSubstitutionCodec;
-
-    @DataSeries(key = EncodingKey.IN_Insertion, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> insertionCodec;
-
-    @DataSeries(key = EncodingKey.SC_SoftClip, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> softClipCodec;
-
-    @DataSeries(key = EncodingKey.HC_HardClip, type = DataSeriesType.INT)
-    public DataReader<Integer> hardClipCodec;
-
-    @DataSeries(key = EncodingKey.PD_padding, type = DataSeriesType.INT)
-    public DataReader<Integer> paddingCodec;
-
-    @DataSeries(key = EncodingKey.DL_DeletionLength, type = DataSeriesType.INT)
-    public DataReader<Integer> deletionLengthCodec;
-
-    @DataSeries(key = EncodingKey.MQ_MappingQualityScore, type = DataSeriesType.INT)
-    public DataReader<Integer> mappingScoreCodec;
-
-    @DataSeries(key = EncodingKey.MF_MateBitFlags, type = DataSeriesType.BYTE)
-    public DataReader<Byte> mateBitFlagCodec;
-
-    @DataSeries(key = EncodingKey.NS_NextFragmentReferenceSequenceID, type = DataSeriesType.INT)
-    public DataReader<Integer> mateReferenceIdCodec;
-
-    @DataSeries(key = EncodingKey.NP_NextFragmentAlignmentStart, type = DataSeriesType.INT)
-    public DataReader<Integer> mateAlignmentStartCodec;
-
-    @DataSeries(key = EncodingKey.TS_InsetSize, type = DataSeriesType.INT)
-    public DataReader<Integer> insertSizeCodec;
-
-    @DataSeries(key = EncodingKey.TL_TagIdList, type = DataSeriesType.INT)
-    public DataReader<Integer> tagIdListCodec;
-
-    @DataSeries(key = EncodingKey.RI_RefId, type = DataSeriesType.INT)
-    public DataReader<Integer> refIdCodec;
-
-    @DataSeries(key = EncodingKey.RS_RefSkip, type = DataSeriesType.INT)
-    public DataReader<Integer> refSkipCodec;
-
-    @DataSeries(key = EncodingKey.BB_bases, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> basesCodec;
-
-    @DataSeries(key = EncodingKey.QQ_scores, type = DataSeriesType.BYTE_ARRAY)
-    public DataReader<byte[]> scoresCodec;
-
-    public int refId;
-    SubstitutionMatrix substitutionMatrix;
-    public boolean APDelta = true;
-
-    static int detachedCount = 0;
-    int recordCounter = 0;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/reader/CramRecordReader.java b/src/main/java/htsjdk/samtools/cram/encoding/reader/CramRecordReader.java
deleted file mode 100644
index 7cbd98d..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/reader/CramRecordReader.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.reader;
-
-import htsjdk.samtools.SAMFormatException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.Bases;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.HardClip;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.Padding;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.Scores;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.ReadTag;
-
-import java.util.LinkedList;
-
-public class CramRecordReader extends AbstractReader {
-    private CramCompressionRecord prevRecord;
-    private ValidationStringency validationStringency;
-
-    public CramRecordReader(ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-    }
-
-    @SuppressWarnings("ConstantConditions")
-    public void read(final CramCompressionRecord cramRecord) {
-        try {
-            // int mark = testCodec.readData();
-            // if (Writer.TEST_MARK != mark) {
-            // System.err.println("Record counter=" + recordCount);
-            // System.err.println(cramRecord.toString());
-            // throw new RuntimeException("Test mark not found.");
-            // }
-
-            cramRecord.flags = bitFlagsCodec.readData();
-            cramRecord.compressionFlags = compressionBitFlagsCodec.readData();
-            if (refId == -2)
-                cramRecord.sequenceId = refIdCodec.readData();
-            else
-                cramRecord.sequenceId = refId;
-
-            cramRecord.readLength = readLengthCodec.readData();
-            if (APDelta)
-                cramRecord.alignmentDelta = alignmentStartCodec.readData();
-            else
-                cramRecord.alignmentStart = alignmentStartCodec.readData();
-            cramRecord.readGroupID = readGroupCodec.readData();
-
-            if (captureReadNames)
-                cramRecord.readName = new String(readNameCodec.readData(), charset);
-
-            // mate record:
-            if (cramRecord.isDetached()) {
-                cramRecord.mateFlags = mateBitFlagCodec.readData();
-                if (!captureReadNames)
-                    cramRecord.readName = new String(readNameCodec.readData(), charset);
-
-                cramRecord.mateSequenceID = mateReferenceIdCodec.readData();
-                cramRecord.mateAlignmentStart = mateAlignmentStartCodec.readData();
-                cramRecord.templateSize = insertSizeCodec.readData();
-                detachedCount++;
-            } else if (cramRecord.isHasMateDownStream())
-                cramRecord.recordsToNextFragment = distanceToNextFragmentCodec.readData();
-
-            final Integer tagIdList = tagIdListCodec.readData();
-            final byte[][] ids = tagIdDictionary[tagIdList];
-            if (ids.length > 0) {
-                final int tagCount = ids.length;
-                cramRecord.tags = new ReadTag[tagCount];
-                for (int i = 0; i < ids.length; i++) {
-                    final int id = ReadTag.name3BytesToInt(ids[i]);
-                    final DataReader<byte[]> dataReader = tagValueCodecs.get(id);
-                    final ReadTag tag = new ReadTag(id, dataReader.readData(), validationStringency);
-                    cramRecord.tags[i] = tag;
-                }
-            }
-
-            if (!cramRecord.isSegmentUnmapped()) {
-                // reading read features:
-                final int size = numberOfReadFeaturesCodec.readData();
-                int prevPos = 0;
-                final java.util.List<ReadFeature> readFeatures = new LinkedList<ReadFeature>();
-                cramRecord.readFeatures = readFeatures;
-                for (int i = 0; i < size; i++) {
-                    final Byte operator = readFeatureCodeCodec.readData();
-
-                    final int pos = prevPos + readFeaturePositionCodec.readData();
-                    prevPos = pos;
-
-                    switch (operator) {
-                        case ReadBase.operator:
-                            final ReadBase readBase = new ReadBase(pos, baseCodec.readData(), qualityScoreCodec.readData());
-                            readFeatures.add(readBase);
-                            break;
-                        case Substitution.operator:
-                            final Substitution substitution = new Substitution();
-                            substitution.setPosition(pos);
-                            final byte code = baseSubstitutionCodec.readData();
-                            substitution.setCode(code);
-                            readFeatures.add(substitution);
-                            break;
-                        case Insertion.operator:
-                            final Insertion insertion = new Insertion(pos, insertionCodec.readData());
-                            readFeatures.add(insertion);
-                            break;
-                        case SoftClip.operator:
-                            final SoftClip softClip = new SoftClip(pos, softClipCodec.readData());
-                            readFeatures.add(softClip);
-                            break;
-                        case HardClip.operator:
-                            final HardClip hardCLip = new HardClip(pos, hardClipCodec.readData());
-                            readFeatures.add(hardCLip);
-                            break;
-                        case Padding.operator:
-                            final Padding padding = new Padding(pos, paddingCodec.readData());
-                            readFeatures.add(padding);
-                            break;
-                        case Deletion.operator:
-                            final Deletion deletion = new Deletion(pos, deletionLengthCodec.readData());
-                            readFeatures.add(deletion);
-                            break;
-                        case RefSkip.operator:
-                            final RefSkip refSkip = new RefSkip(pos, refSkipCodec.readData());
-                            readFeatures.add(refSkip);
-                            break;
-                        case InsertBase.operator:
-                            final InsertBase insertBase = new InsertBase(pos, baseCodec.readData());
-                            readFeatures.add(insertBase);
-                            break;
-                        case BaseQualityScore.operator:
-                            final BaseQualityScore baseQualityScore = new BaseQualityScore(pos, qualityScoreCodec.readData());
-                            readFeatures.add(baseQualityScore);
-                            break;
-                        case Bases.operator:
-                            final Bases bases = new Bases(pos, basesCodec.readData());
-                            readFeatures.add(bases);
-                            break;
-                        case Scores.operator:
-                            final Scores scores = new Scores(pos, scoresCodec.readData());
-                            readFeatures.add(scores);
-                            break;
-                        default:
-                            throw new RuntimeException("Unknown read feature operator: " + operator);
-                    }
-                }
-
-                // mapping quality:
-                cramRecord.mappingQuality = mappingScoreCodec.readData();
-                if (cramRecord.isForcePreserveQualityScores()) {
-                    cramRecord.qualityScores = qualityScoresCodec.readDataArray(cramRecord.readLength);
-                }
-            } else {
-                if (cramRecord.isUnknownBases()) {
-                    cramRecord.readBases = SAMRecord.NULL_SEQUENCE;
-                    cramRecord.qualityScores = SAMRecord.NULL_QUALS;
-                } else {
-                    final byte[] bases = new byte[cramRecord.readLength];
-                    for (int i = 0; i < bases.length; i++)
-                        bases[i] = baseCodec.readData();
-                    cramRecord.readBases = bases;
-
-
-                    if (cramRecord.isForcePreserveQualityScores()) {
-                        cramRecord.qualityScores = qualityScoresCodec.readDataArray(cramRecord.readLength);
-                    }
-                }
-            }
-
-            recordCounter++;
-
-            prevRecord = cramRecord;
-        }
-        catch (final SAMFormatException e) {
-            if (prevRecord != null) {
-                System.err.printf("Failed at record %d. Here is the previously read record: %s\n", recordCounter,
-                        prevRecord.toString());
-            }
-            throw e;
-        }
-        catch (final Exception e) {
-            if (prevRecord != null) {
-                System.err.printf("Failed at record %d. Here is the previously read record: %s\n", recordCounter,
-                        prevRecord.toString());
-            }
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReader.java b/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReader.java
deleted file mode 100644
index 47fba2f..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReader.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.reader;
-
-import java.io.IOException;
-
-/**
- * A basic interface for reading data. The details of what is data and from where to read are implementation specific. Pure consumer.
- *
- * @param <T> data type of the series to be read
- */
-public interface DataReader<T> {
-
-    /**
-     * Read a single object
-     * @return an object or a primitive value read
-     * @throws IOException as per java IO contract
-     */
-    T readData() throws IOException;
-
-    /**
-     * Read an array of specified length. Normally this is a byte array. The intent here is optimization: reading an array may be faster than reading elements one by one.
-     * @param length the length of the array to be read
-     * @return the array of objects
-     * @throws IOException as per java IO contract
-     */
-    T readDataArray(int length) throws IOException;
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReaderFactory.java b/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReaderFactory.java
deleted file mode 100644
index 253ab15..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/reader/DataReaderFactory.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.reader;
-
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.cram.common.IntHashMap;
-import htsjdk.samtools.cram.encoding.BitCodec;
-import htsjdk.samtools.cram.encoding.DataSeries;
-import htsjdk.samtools.cram.encoding.DataSeriesMap;
-import htsjdk.samtools.cram.encoding.DataSeriesType;
-import htsjdk.samtools.cram.encoding.Encoding;
-import htsjdk.samtools.cram.encoding.EncodingFactory;
-import htsjdk.samtools.cram.io.BitInputStream;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.EncodingParams;
-import htsjdk.samtools.cram.structure.ReadTag;
-import htsjdk.samtools.util.Log;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class DataReaderFactory {
-    private static Log log = Log.getInstance(DataReaderFactory.class);
-
-    private final static boolean collectStats = false;
-
-    public AbstractReader buildReader(final AbstractReader reader,
-                                      final BitInputStream bitInputStream, final Map<Integer, InputStream> inputMap,
-                                      final CompressionHeader header, final int refId) throws IllegalArgumentException {
-        reader.captureReadNames = header.readNamesIncluded;
-        reader.refId = refId;
-        reader.APDelta = header.APDelta;
-
-        for (final Field field : reader.getClass().getFields()) {
-            if (field.isAnnotationPresent(DataSeries.class)) {
-                final DataSeries dataSeries = field.getAnnotation(DataSeries.class);
-                final EncodingKey key = dataSeries.key();
-                final DataSeriesType type = dataSeries.type();
-                if (header.encodingMap.get(key) != null) {
-                    try {
-                        field.set(reader,
-                                createReader(type, header.encodingMap.get(key), bitInputStream, inputMap));
-                    } catch (IllegalAccessException e) {
-                        throw new CRAMException(e);
-                    }
-                }
-            }
-
-            if (field.isAnnotationPresent(DataSeriesMap.class)) {
-                final DataSeriesMap dataSeriesMap = field.getAnnotation(DataSeriesMap.class);
-                final String name = dataSeriesMap.name();
-                if ("TAG".equals(name)) {
-                    final IntHashMap map = new IntHashMap();
-                    for (final Integer key : header.tMap.keySet()) {
-                        final EncodingParams params = header.tMap.get(key);
-                        final DataReader<byte[]> tagReader = createReader(
-                                DataSeriesType.BYTE_ARRAY, params, bitInputStream,
-                                inputMap);
-                        map.put(key, tagReader);
-                    }
-                    try {
-                        field.set(reader, map);
-                    } catch (IllegalAccessException e) {
-                        throw new CRAMException(e);
-                    }
-                }
-            }
-        }
-
-        reader.tagIdDictionary = header.dictionary;
-        return reader;
-    }
-
-    private <T> DataReader<T> createReader(final DataSeriesType valueType,
-                                           final EncodingParams params, final BitInputStream bitInputStream,
-                                           final Map<Integer, InputStream> inputMap) {
-        if (params.id == EncodingID.NULL)
-            //noinspection ConstantConditions
-            return collectStats ? new DataReaderWithStats(
-                    buildNullReader(valueType)) : buildNullReader(valueType);
-
-        final EncodingFactory encodingFactory = new EncodingFactory();
-        final Encoding<T> encoding = encodingFactory.createEncoding(valueType, params.id);
-        if (encoding == null)
-            throw new RuntimeException("Encoding not found for value type "
-                    + valueType.name() + ", id=" + params.id);
-        encoding.fromByteArray(params.params);
-
-        //noinspection ConstantConditions
-        return collectStats ? new DataReaderWithStats(new DefaultDataReader<T>(
-                encoding.buildCodec(inputMap, null), bitInputStream))
-                : new DefaultDataReader<T>(encoding.buildCodec(inputMap, null),
-                bitInputStream);
-    }
-
-    private static <T> DataReader<T> buildNullReader(final DataSeriesType valueType) {
-        switch (valueType) {
-            case BYTE:
-                return (DataReader<T>) new SingleValueReader<Byte>((byte) 0);
-            case INT:
-                return (DataReader<T>) new SingleValueReader<Integer>(
-                        0);
-            case LONG:
-                return (DataReader<T>) new SingleValueReader<Long>((long) 0);
-            case BYTE_ARRAY:
-                return (DataReader<T>) new SingleValueReader<byte[]>(new byte[]{});
-
-            default:
-                throw new RuntimeException("Unknown data type: " + valueType.name());
-        }
-    }
-
-    private static class DefaultDataReader<T> implements DataReader<T> {
-        private final BitCodec<T> codec;
-        private final BitInputStream bitInputStream;
-
-        public DefaultDataReader(final BitCodec<T> codec, final BitInputStream bitInputStream) {
-            this.codec = codec;
-            this.bitInputStream = bitInputStream;
-        }
-
-        @Override
-        public T readData() throws IOException {
-            return codec.read(bitInputStream);
-        }
-
-        @Override
-        public T readDataArray(final int length) throws IOException {
-            return codec.read(bitInputStream, length);
-        }
-
-    }
-
-    private static class SingleValueReader<T> implements DataReader<T> {
-        private final T value;
-
-        public SingleValueReader(final T value) {
-            this.value = value;
-        }
-
-        @Override
-        public T readData() throws IOException {
-            return value;
-        }
-
-        @Override
-        public T readDataArray(final int length) {
-            return value;
-        }
-    }
-
-    public static class DataReaderWithStats<T> implements DataReader<T> {
-        public long nanos = 0;
-        final DataReader<T> delegate;
-
-        public DataReaderWithStats(final DataReader<T> delegate) {
-            this.delegate = delegate;
-        }
-
-        @Override
-        public T readData() throws IOException {
-            final long time = System.nanoTime();
-            final T value = delegate.readData();
-            nanos += System.nanoTime() - time;
-            return value;
-        }
-
-        @Override
-        public T readDataArray(final int length) throws IOException {
-            final long time = System.nanoTime();
-            final T value = delegate.readDataArray(length);
-            nanos += System.nanoTime() - time;
-            return value;
-        }
-    }
-
-    public Map<String, DataReaderWithStats> getStats(final CramRecordReader reader)
-            throws IllegalArgumentException, IllegalAccessException {
-        final Map<String, DataReaderWithStats> map = new TreeMap<String, DataReaderFactory.DataReaderWithStats>();
-        //noinspection ConstantConditions,PointlessBooleanExpression
-        if (!collectStats)
-            return map;
-
-        for (final Field field : reader.getClass().getFields()) {
-            if (field.isAnnotationPresent(DataSeries.class)) {
-                final DataSeries dataSeries = field.getAnnotation(DataSeries.class);
-                final EncodingKey key = dataSeries.key();
-                map.put(key.name(), (DataReaderWithStats) field.get(reader));
-            }
-
-            if (field.isAnnotationPresent(DataSeriesMap.class)) {
-                final DataSeriesMap dataSeriesMap = field.getAnnotation(DataSeriesMap.class);
-                final String name = dataSeriesMap.name();
-                if ("TAG".equals(name)) {
-                    final Map<Integer, DataReader<byte[]>> tagMap = (Map<Integer, DataReader<byte[]>>) field
-                            .get(reader);
-                    for (final Integer key : tagMap.keySet()) {
-                        final String tag = ReadTag.intToNameType4Bytes(key);
-                        map.put(tag, (DataReaderWithStats) tagMap.get(key));
-                    }
-                }
-            }
-        }
-
-        return map;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/reader/RefSeqIdReader.java b/src/main/java/htsjdk/samtools/cram/encoding/reader/RefSeqIdReader.java
deleted file mode 100644
index 1289429..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/reader/RefSeqIdReader.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*******************************************************************************
- * Copyright 2013 EMBL-EBI
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package htsjdk.samtools.cram.encoding.reader;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.Bases;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.HardClip;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.Padding;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.Scores;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.ReadTag;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-
-/**
- * A reader that only keeps track of alignment spans. The intended use is for
- * CRAI index.
- * 
- * @author vadim
- *
- */
-public class RefSeqIdReader extends AbstractReader {
-	/**
-	 * Reference sequence id set by default
-	 */
-	private final int globalReferenceSequenceId;
-
-	/**
-	 * Alignment start to start counting from
-	 */
-	private int alignmentStart;
-	private ValidationStringency validationStringency;
-	/**
-	 * For diagnostic purposes
-	 */
-	private int recordCounter = 0;
-
-	/**
-	 * Single record to use for capturing read fields:
- 	 */
-	private final CramCompressionRecord cramRecord = new CramCompressionRecord();
-
-	/**
-	 * Detected sequence spans
-	 */
-	private final Map<Integer, AlignmentSpan> spans = new HashMap<>();
-
-	public RefSeqIdReader(final int seqId, final int alignmentStart, ValidationStringency validationStringency) {
-		super();
-		this.globalReferenceSequenceId = seqId;
-		this.alignmentStart = alignmentStart;
-		this.validationStringency = validationStringency;
-	}
-
-	public Map<Integer, AlignmentSpan> getReferenceSpans() {
-		return spans;
-	}
-
-	public void read() {
-		cramRecord.sequenceId = globalReferenceSequenceId;
-		try {
-			cramRecord.flags = bitFlagsCodec.readData();
-			cramRecord.compressionFlags = compressionBitFlagsCodec.readData();
-			if (refId == Slice.MULTI_REFERENCE)
-				cramRecord.sequenceId = refIdCodec.readData();
-			else
-				cramRecord.sequenceId = refId;
-
-			cramRecord.readLength = readLengthCodec.readData();
-			if (APDelta) {
-				cramRecord.alignmentDelta = alignmentStartCodec.readData();
-				alignmentStart += cramRecord.alignmentDelta;
-			}
-			else {
-				cramRecord.alignmentStart = alignmentStartCodec.readData();
-				alignmentStart = cramRecord.alignmentStart;
-			}
-
-			cramRecord.readGroupID = readGroupCodec.readData();
-
-			if (captureReadNames)
-				cramRecord.readName = new String(readNameCodec.readData(), charset);
-
-			// mate record:
-			if (cramRecord.isDetached()) {
-				cramRecord.mateFlags = mateBitFlagCodec.readData();
-				if (!captureReadNames)
-					cramRecord.readName = new String(readNameCodec.readData(), charset);
-
-				cramRecord.mateSequenceID = mateReferenceIdCodec.readData();
-				cramRecord.mateAlignmentStart = mateAlignmentStartCodec.readData();
-				cramRecord.templateSize = insertSizeCodec.readData();
-				detachedCount++;
-			} else if (cramRecord.isHasMateDownStream())
-				cramRecord.recordsToNextFragment = distanceToNextFragmentCodec.readData();
-
-			final Integer tagIdList = tagIdListCodec.readData();
-			final byte[][] ids = tagIdDictionary[tagIdList];
-			if (ids.length > 0) {
-				final int tagCount = ids.length;
-				cramRecord.tags = new ReadTag[tagCount];
-				for (int i = 0; i < ids.length; i++) {
-					final int id = ReadTag.name3BytesToInt(ids[i]);
-					final DataReader<byte[]> dataReader = tagValueCodecs.get(id);
-					final ReadTag tag = new ReadTag(id, dataReader.readData(), validationStringency);
-					cramRecord.tags[i] = tag;
-				}
-			}
-
-			if (!cramRecord.isSegmentUnmapped()) {
-				// reading read features:
-				final int size = numberOfReadFeaturesCodec.readData();
-				int prevPos = 0;
-				final java.util.List<ReadFeature> readFeatures = new LinkedList<>();
-				cramRecord.readFeatures = readFeatures;
-				for (int i = 0; i < size; i++) {
-					final Byte operator = readFeatureCodeCodec.readData();
-
-					final int pos = prevPos + readFeaturePositionCodec.readData();
-					prevPos = pos;
-
-					switch (operator) {
-					case ReadBase.operator:
-						final ReadBase readBase = new ReadBase(pos, baseCodec.readData(), qualityScoreCodec.readData());
-						readFeatures.add(readBase);
-						break;
-					case Substitution.operator:
-						final Substitution substitution = new Substitution();
-						substitution.setPosition(pos);
-						final byte code = baseSubstitutionCodec.readData();
-						substitution.setCode(code);
-						readFeatures.add(substitution);
-						break;
-					case Insertion.operator:
-						final Insertion insertion = new Insertion(pos, insertionCodec.readData());
-						readFeatures.add(insertion);
-						break;
-					case SoftClip.operator:
-						final SoftClip softClip = new SoftClip(pos, softClipCodec.readData());
-						readFeatures.add(softClip);
-						break;
-					case HardClip.operator:
-						final HardClip hardCLip = new HardClip(pos, hardClipCodec.readData());
-						readFeatures.add(hardCLip);
-						break;
-					case Padding.operator:
-						final Padding padding = new Padding(pos, paddingCodec.readData());
-						readFeatures.add(padding);
-						break;
-					case Deletion.operator:
-						final Deletion deletion = new Deletion(pos, deletionLengthCodec.readData());
-						readFeatures.add(deletion);
-						break;
-					case RefSkip.operator:
-						final RefSkip refSkip = new RefSkip(pos, refSkipCodec.readData());
-						readFeatures.add(refSkip);
-						break;
-					case InsertBase.operator:
-						final InsertBase insertBase = new InsertBase(pos, baseCodec.readData());
-						readFeatures.add(insertBase);
-						break;
-					case BaseQualityScore.operator:
-						final BaseQualityScore baseQualityScore = new BaseQualityScore(pos,
-								qualityScoreCodec.readData());
-						readFeatures.add(baseQualityScore);
-						break;
-					case Bases.operator:
-						final Bases bases = new Bases(pos, basesCodec.readData());
-						readFeatures.add(bases);
-						break;
-					case Scores.operator:
-						final Scores scores = new Scores(pos, scoresCodec.readData());
-						readFeatures.add(scores);
-						break;
-					default:
-						throw new RuntimeException("Unknown read feature operator: " + operator);
-					}
-				}
-
-				// mapping quality:
-				cramRecord.mappingQuality = mappingScoreCodec.readData();
-				if (cramRecord.isForcePreserveQualityScores()) {
-					cramRecord.qualityScores = qualityScoresCodec.readDataArray(cramRecord.readLength);
-				}
-			} else {
-				if (cramRecord.isUnknownBases()) {
-					cramRecord.readBases = SAMRecord.NULL_SEQUENCE;
-					cramRecord.qualityScores = SAMRecord.NULL_QUALS;
-				} else {
-					final byte[] bases = new byte[cramRecord.readLength];
-					for (int i = 0; i < bases.length; i++)
-						bases[i] = baseCodec.readData();
-					cramRecord.readBases = bases;
-
-					if (cramRecord.isForcePreserveQualityScores()) {
-						cramRecord.qualityScores = qualityScoresCodec.readDataArray(cramRecord.readLength);
-					}
-				}
-			}
-
-			recordCounter++;
-
-		} catch (final IOException e) {
-			throw new RuntimeIOException(e);
-		}
-
-		if (!spans.containsKey(cramRecord.sequenceId)) {
-			spans.put(cramRecord.sequenceId, new AlignmentSpan(alignmentStart, cramRecord.readLength));
-		} else
-			spans.get(cramRecord.sequenceId).addSingle(alignmentStart, cramRecord.readLength);
-	}
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/BaseQualityScore.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/BaseQualityScore.java
deleted file mode 100644
index 41a69d2..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/BaseQualityScore.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a single quality score in a read.
- */
-public class BaseQualityScore implements Serializable, ReadFeature {
-
-    private int position;
-    private byte qualityScore;
-
-    public static final byte operator = 'Q';
-
-    public BaseQualityScore(final int position, final byte qualityScore) {
-        this.position = position;
-        this.qualityScore = qualityScore;
-    }
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    @Override
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public byte getQualityScore() {
-        return qualityScore;
-    }
-
-    public void setQualityScore(final byte qualityScore) {
-        this.qualityScore = qualityScore;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof BaseQualityScore))
-            return false;
-
-        final BaseQualityScore v = (BaseQualityScore) obj;
-
-        return position == v.position && qualityScore == v.qualityScore;
-
-    }
-
-    @Override
-    public String toString() {
-        return new StringBuilder().append((char) operator).append('@')
-                .append(position).append('#').appendCodePoint(qualityScore).toString();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Bases.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Bases.java
deleted file mode 100644
index b2f066b..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Bases.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-public class Bases implements Serializable, ReadFeature {
-
-    private int position;
-    private byte[] bases;
-
-    public byte[] getBases() {
-        return bases;
-    }
-
-    public void setBases(final byte[] bases) {
-        this.bases = bases;
-    }
-
-    public Bases() {
-    }
-
-    public Bases(final int position, final byte[] sequence) {
-        this.position = position;
-        this.bases = sequence;
-    }
-
-    public static final byte operator = 'b';
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    @Override
-    public int getPosition() {
-        return position;
-    }
-
-    @Override
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Bases))
-            return false;
-
-        final Bases bases = (Bases) obj;
-
-        return position == bases.position && !Arrays.equals(this.bases, bases.bases);
-
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "[" + "position=" + position + "; bases=" + new String(bases) + "] ";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Deletion.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Deletion.java
deleted file mode 100644
index b4a0181..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Deletion.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a deletion of one or more bases similar to {@link htsjdk.samtools.CigarOperator#D}.
- */
-public class Deletion implements Serializable, ReadFeature {
-
-    private int position;
-    private int length;
-    public static final byte operator = 'D';
-
-    public Deletion() {
-    }
-
-    public Deletion(final int position, final int length) {
-        this.position = position;
-        this.length = length;
-    }
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    @Override
-    public int getPosition() {
-        return position;
-    }
-
-    @Override
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public void setLength(final int length) {
-        this.length = length;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Deletion))
-            return false;
-
-        final Deletion deleteion = (Deletion) obj;
-
-        return position == deleteion.position && length == deleteion.length;
-
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf((char) operator) + '@' + position + '+' + length;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/HardClip.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/HardClip.java
deleted file mode 100644
index 3c3c7ad..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/HardClip.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a hard clip similar to {@link htsjdk.samtools.CigarOperator#H}.
- */
-public class HardClip implements Serializable, ReadFeature {
-    public static final byte operator = 'H';
-
-    private int position;
-    private int length;
-
-    public HardClip() {
-    }
-
-    public HardClip(final int position, final int length) {
-        this.position = position;
-        this.length = length;
-    }
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public void setLength(final int length) {
-        this.length = length;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof HardClip))
-            return false;
-
-        final HardClip hardClip = (HardClip) obj;
-
-        return position == hardClip.position && length == hardClip.length;
-
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "[" + "position=" + position + "; length=" + length + "] ";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/InsertBase.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/InsertBase.java
deleted file mode 100644
index 5970413..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/InsertBase.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a single insert base.
- */
-public class InsertBase implements Serializable, ReadFeature {
-
-    private int position;
-    private byte base;
-    public static final byte operator = 'i';
-
-    public InsertBase() {
-    }
-
-    public InsertBase(final int position, final byte base) {
-        this.position = position;
-        this.base = base;
-    }
-
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof InsertBase))
-            return false;
-
-        final InsertBase insertBase = (InsertBase) obj;
-
-        return position == insertBase.position && base == insertBase.base;
-
-    }
-
-    @Override
-    public String toString() {
-        return new StringBuilder().append((char) operator).append('@')
-                .append(position).append('\\').appendCodePoint(base).toString();
-    }
-
-    public byte getBase() {
-        return base;
-    }
-
-    public void setBase(final byte base) {
-        this.base = base;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Insertion.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Insertion.java
deleted file mode 100644
index e0182c3..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Insertion.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-/**
- * A read feature representing a multi-base insertion.
- */
-public class Insertion implements Serializable, ReadFeature {
-
-    private int position;
-    private byte[] sequence;
-    public static final byte operator = 'I';
-
-    public Insertion() {
-    }
-
-    public Insertion(final int position, final byte[] sequence) {
-        this.position = position;
-        this.sequence = sequence;
-    }
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public byte[] getSequence() {
-        return sequence;
-    }
-
-    public void setSequence(final byte[] sequence) {
-        this.sequence = sequence;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Insertion))
-            return false;
-
-        final Insertion insertion = (Insertion) obj;
-
-        return position == insertion.position && Arrays.equals(sequence, insertion.sequence);
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "[" + "position=" + position + "; sequence=" + new String(sequence) + "] ";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Padding.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Padding.java
deleted file mode 100644
index 85e90fd..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Padding.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing padding, similar to {@link htsjdk.samtools.CigarOperator#P}.
- */
-public class Padding implements Serializable, ReadFeature {
-
-    private int position;
-    private int length;
-    public static final byte operator = 'P';
-
-    public Padding() {
-    }
-
-    public Padding(final int position, final int length) {
-        this.position = position;
-        this.length = length;
-    }
-
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public void setLength(final int length) {
-        this.length = length;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Padding))
-            return false;
-
-        final Padding padding = (Padding) obj;
-
-        return position == padding.position && length == padding.length;
-
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf((char) operator) + '@' + position + '+' + length;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadBase.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadBase.java
deleted file mode 100644
index 73ae208..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadBase.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a single base with associated quality score.
- */
-public class ReadBase implements Serializable, ReadFeature {
-
-    private int position;
-    private byte base;
-    private byte qualityScore;
-
-    public static final byte operator = 'B';
-
-    public ReadBase(final int position, final byte base, final byte qualityScore) {
-        this.position = position;
-        this.base = base;
-        this.qualityScore = qualityScore;
-    }
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    @Override
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public byte getQualityScore() {
-        return qualityScore;
-    }
-
-    public void setQualityScore(final byte qualityScore) {
-        this.qualityScore = qualityScore;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof ReadBase))
-            return false;
-
-        final ReadBase readBase = (ReadBase) obj;
-
-        return position == readBase.position && base == readBase.base && qualityScore == readBase.qualityScore;
-
-    }
-
-    @Override
-    public String toString() {
-        return new StringBuilder(getClass().getSimpleName() + "[")
-                .append("position=").append(position)
-                .append("; base=").appendCodePoint(base)
-                .append("; score=").appendCodePoint(qualityScore)
-                .append("] ").toString();
-    }
-
-    public byte getBase() {
-        return base;
-    }
-
-    public void setBase(final byte base) {
-        this.base = base;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadFeature.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadFeature.java
deleted file mode 100644
index 863cd18..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/ReadFeature.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-/**
- * An interface to capture data in read coordinates.
- */
-public interface ReadFeature {
-    /**
-     * @return zero-based position in the read
-     */
-    int getPosition();
-
-    void setPosition(int position);
-
-    /**
-     * Read features are distinguished by operator, similar to cigar operator.
-     * @return type of the read feature
-     */
-    byte getOperator();
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/RefSkip.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/RefSkip.java
deleted file mode 100644
index 1b99f09..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/RefSkip.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A read feature representing a reference skip similar to {@link htsjdk.samtools.CigarOperator#N}.
- */
-public class RefSkip implements Serializable, ReadFeature {
-
-    private int position;
-    private int length;
-    public static final byte operator = 'N';
-
-    public RefSkip() {
-    }
-
-    public RefSkip(final int position, final int length) {
-        this.position = position;
-        this.length = length;
-    }
-
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public void setLength(final int length) {
-        this.length = length;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof RefSkip))
-            return false;
-
-        final RefSkip refSkip = (RefSkip) obj;
-
-        return position == refSkip.position && length == refSkip.length;
-
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf((char) operator) + '@' + position + '+' + length;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Scores.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Scores.java
deleted file mode 100644
index bd409fd..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Scores.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-/**
- * A read feature representing a contiguous stretch of quality scores in a read.
- */
-public class Scores implements Serializable, ReadFeature {
-
-    private int position;
-    private byte[] scores;
-
-    public byte[] getScores() {
-        return scores;
-    }
-
-    public void setScores(final byte[] scores) {
-        this.scores = scores;
-    }
-
-    public Scores() {
-    }
-
-    public Scores(final int position, final byte[] sequence) {
-        this.position = position;
-        this.scores = sequence;
-    }
-
-    public static final byte operator = 'q';
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    @Override
-    public int getPosition() {
-        return position;
-    }
-
-    @Override
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Scores))
-            return false;
-
-        final Scores scores = (Scores) obj;
-
-        return position == scores.position && !Arrays.equals(this.scores, scores.scores);
-
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "[" + "position=" + position + "; scores=" + new String(scores) + "] ";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/SoftClip.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/SoftClip.java
deleted file mode 100644
index b142595..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/SoftClip.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-/**
- * A read feature representing a soft clip similar to {@link htsjdk.samtools.CigarOperator#S}.
- */
-public class SoftClip implements Serializable, ReadFeature {
-
-    private int position;
-    private byte[] sequence;
-
-    public byte[] getSequence() {
-        return sequence;
-    }
-
-    public void setSequence(final byte[] sequence) {
-        this.sequence = sequence;
-    }
-
-    public SoftClip() {
-    }
-
-    public SoftClip(final int position, final byte[] sequence) {
-        this.position = position;
-        this.sequence = sequence;
-    }
-
-    public static final byte operator = 'S';
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof SoftClip))
-            return false;
-
-        final SoftClip softClip = (SoftClip) obj;
-
-        return position == softClip.position && !Arrays.equals(sequence, softClip.sequence);
-
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "[" + "position=" + position + "; bases=" + new String(sequence) + "] ";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Substitution.java b/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Substitution.java
deleted file mode 100644
index b2ed5de..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/readfeatures/Substitution.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.readfeatures;
-
-import java.io.Serializable;
-
-/**
- * A substitution event captured in read coordinates. It is characterized by position in read, read base and reference base.
- * The class is also responsible for converting combinations of read base and reference base into a byte value (code).
- */
-public class Substitution implements Serializable, ReadFeature {
-    public static final int NO_CODE = -1;
-
-    /**
-     * zero-based position in read
-     */
-    private int position;
-    /**
-     * The read base (ACGTN)
-     */
-    private byte base = -1;
-    /**
-     * The reference sequence base matching the position of this substitution.
-     */
-    private byte referenceBase = -1;
-    /**
-     * A byte value denoting combination of the read base and the reference base.
-     */
-    private byte code = NO_CODE;
-
-    public byte getCode() {
-        return code;
-    }
-
-    public void setCode(final byte code) {
-        this.code = code;
-    }
-
-    public static final byte operator = 'X';
-
-    @Override
-    public byte getOperator() {
-        return operator;
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(final int position) {
-        this.position = position;
-    }
-
-    public byte getBase() {
-        return base;
-    }
-
-    public void setBase(final byte base) {
-        this.base = base;
-    }
-
-    public byte getReferenceBase() {
-        return referenceBase;
-    }
-
-    public void setReferenceBase(final byte referenceBase) {
-        this.referenceBase = referenceBase;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof Substitution))
-            return false;
-
-        final Substitution substitution = (Substitution) obj;
-
-        if (position != substitution.position)
-            return false;
-
-        if ((code != substitution.code) & (code == NO_CODE || substitution.code == NO_CODE)) {
-            return false;
-        }
-
-        if (code > NO_CODE && substitution.code > NO_CODE) {
-            if (referenceBase != substitution.referenceBase) return false;
-            if (base != substitution.base) return false;
-        }
-        return true;
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf((char) operator) + '@' + position + '\\' + (char) base + (char) referenceBase;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriter.java b/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriter.java
deleted file mode 100644
index c50254e..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.writer;
-
-import java.io.IOException;
-
-/**
- * A basic interface defining a writer. It can ... write!
- * In terms of CRAM this is an abstraction to get rid off implementation details like what is data and where to write to. Pure consumer.
- * Note: the interface does not have writeArray method like it's counterpart {@link htsjdk.samtools.cram.encoding.reader.DataReader} because
- * array length is known when writing, therefore the same interface can be used both for single objects and arrays.
- *
- * @param <T> data type of the series to be written.
- */
-public interface DataWriter<T> {
-
-    /**
-     * Write some data out.
-     *
-     * @param value data to be written
-     * @return number of bits written
-     * @throws IOException as per java IO contract
-     */
-    @SuppressWarnings("UnusedReturnValue")
-    long writeData(T value) throws IOException;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriterFactory.java b/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriterFactory.java
deleted file mode 100644
index 3980c82..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/writer/DataWriterFactory.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.writer;
-
-import htsjdk.samtools.cram.encoding.BitCodec;
-import htsjdk.samtools.cram.encoding.DataSeries;
-import htsjdk.samtools.cram.encoding.DataSeriesMap;
-import htsjdk.samtools.cram.encoding.DataSeriesType;
-import htsjdk.samtools.cram.encoding.Encoding;
-import htsjdk.samtools.cram.encoding.EncodingFactory;
-import htsjdk.samtools.cram.io.BitOutputStream;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.EncodingParams;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
-
-public class DataWriterFactory {
-
-    public Writer buildWriter(final BitOutputStream bitOutputStream,
-                              final Map<Integer, ExposedByteArrayOutputStream> outputMap,
-                              final CompressionHeader h, final int refId) throws IllegalArgumentException,
-            IllegalAccessException {
-        final Writer writer = new Writer();
-        writer.setCaptureReadNames(h.readNamesIncluded);
-        writer.refId = refId;
-        writer.substitutionMatrix = h.substitutionMatrix;
-        writer.AP_delta = h.APDelta;
-
-        for (final Field f : writer.getClass().getFields()) {
-            if (f.isAnnotationPresent(DataSeries.class)) {
-                final DataSeries ds = f.getAnnotation(DataSeries.class);
-                final EncodingKey key = ds.key();
-                final DataSeriesType type = ds.type();
-
-                f.set(writer,
-                        createWriter(type, h.encodingMap.get(key), bitOutputStream, outputMap));
-            }
-
-            if (f.isAnnotationPresent(DataSeriesMap.class)) {
-                final DataSeriesMap dsm = f.getAnnotation(DataSeriesMap.class);
-                final String name = dsm.name();
-                if ("TAG".equals(name)) {
-                    final Map<Integer, DataWriter<byte[]>> map = new HashMap<Integer, DataWriter<byte[]>>();
-                    for (final Integer key : h.tMap.keySet()) {
-                        final EncodingParams params = h.tMap.get(key);
-                        final DataWriter<byte[]> tagWriter = createWriter(
-                                DataSeriesType.BYTE_ARRAY, params, bitOutputStream,
-                                outputMap);
-                        map.put(key, tagWriter);
-                    }
-                    f.set(writer, map);
-                }
-            }
-        }
-
-        return writer;
-    }
-
-    private <T> DataWriter<T> createWriter(final DataSeriesType valueType,
-                                           final EncodingParams params, final BitOutputStream bitOutputStream,
-                                           final Map<Integer, ExposedByteArrayOutputStream> outputMap) {
-        final EncodingFactory f = new EncodingFactory();
-        final Encoding<T> encoding = f.createEncoding(valueType, params.id);
-        if (encoding == null)
-            throw new RuntimeException("Encoding not found: value type="
-                    + valueType.name() + ", encoding id=" + params.id.name());
-
-        encoding.fromByteArray(params.params);
-
-        return new DefaultDataWriter<T>(encoding.buildCodec(null, outputMap),
-                bitOutputStream);
-    }
-
-    private static class DefaultDataWriter<T> implements DataWriter<T> {
-        private final BitCodec<T> codec;
-        private final BitOutputStream bitOutputStream;
-
-        public DefaultDataWriter(final BitCodec<T> codec, final BitOutputStream bitOutputStream) {
-            this.codec = codec;
-            this.bitOutputStream = bitOutputStream;
-        }
-
-        @Override
-        public long writeData(final T value) throws IOException {
-            return codec.write(bitOutputStream, value);
-        }
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/encoding/writer/Writer.java b/src/main/java/htsjdk/samtools/cram/encoding/writer/Writer.java
deleted file mode 100644
index 3686f44..0000000
--- a/src/main/java/htsjdk/samtools/cram/encoding/writer/Writer.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.encoding.writer;
-
-import htsjdk.samtools.cram.encoding.DataSeries;
-import htsjdk.samtools.cram.encoding.DataSeriesMap;
-import htsjdk.samtools.cram.encoding.DataSeriesType;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.HardClip;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.Padding;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.RefSkip;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.Map;
-
- at SuppressWarnings({"UnusedDeclaration", "WeakerAccess"})
-public class Writer {
-
-    private Charset charset = Charset.forName("UTF8");
-    private boolean captureReadNames = false;
-
-    @DataSeries(key = EncodingKey.BF_BitFlags, type = DataSeriesType.INT)
-    public DataWriter<Integer> bitFlagsC;
-
-    @DataSeries(key = EncodingKey.CF_CompressionBitFlags, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> compBitFlagsC;
-
-    @DataSeries(key = EncodingKey.RL_ReadLength, type = DataSeriesType.INT)
-    public DataWriter<Integer> readLengthC;
-
-    @DataSeries(key = EncodingKey.AP_AlignmentPositionOffset, type = DataSeriesType.INT)
-    public DataWriter<Integer> alStartC;
-
-    @DataSeries(key = EncodingKey.RG_ReadGroup, type = DataSeriesType.INT)
-    public DataWriter<Integer> readGroupC;
-
-    @DataSeries(key = EncodingKey.RN_ReadName, type = DataSeriesType.BYTE_ARRAY)
-    public DataWriter<byte[]> readNameC;
-
-    @DataSeries(key = EncodingKey.NF_RecordsToNextFragment, type = DataSeriesType.INT)
-    public DataWriter<Integer> distanceC;
-
-    @DataSeriesMap(name = "TAG")
-    public Map<Integer, DataWriter<byte[]>> tagValueCodecs;
-
-    @DataSeries(key = EncodingKey.FN_NumberOfReadFeatures, type = DataSeriesType.INT)
-    public DataWriter<Integer> numberOfReadFeaturesCodec;
-
-    @DataSeries(key = EncodingKey.FP_FeaturePosition, type = DataSeriesType.INT)
-    public DataWriter<Integer> featurePositionCodec;
-
-    @DataSeries(key = EncodingKey.FC_FeatureCode, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> featuresCodeCodec;
-
-    @DataSeries(key = EncodingKey.BA_Base, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> baseCodec;
-
-    @DataSeries(key = EncodingKey.QS_QualityScore, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> qualityScoreCodec;
-
-    @DataSeries(key = EncodingKey.QS_QualityScore, type = DataSeriesType.BYTE_ARRAY)
-    public DataWriter<byte[]> qualityScoreArrayCodec;
-
-    @DataSeries(key = EncodingKey.BS_BaseSubstitutionCode, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> baseSubstitutionCodeCodec;
-
-    @DataSeries(key = EncodingKey.IN_Insertion, type = DataSeriesType.BYTE_ARRAY)
-    public DataWriter<byte[]> insertionCodec;
-
-    @DataSeries(key = EncodingKey.SC_SoftClip, type = DataSeriesType.BYTE_ARRAY)
-    public DataWriter<byte[]> softClipCodec;
-
-    @DataSeries(key = EncodingKey.HC_HardClip, type = DataSeriesType.INT)
-    public DataWriter<Integer> hardClipCodec;
-
-    @DataSeries(key = EncodingKey.PD_padding, type = DataSeriesType.INT)
-    public DataWriter<Integer> paddingCodec;
-
-    @DataSeries(key = EncodingKey.DL_DeletionLength, type = DataSeriesType.INT)
-    public DataWriter<Integer> deletionLengthCodec;
-
-    @DataSeries(key = EncodingKey.MQ_MappingQualityScore, type = DataSeriesType.INT)
-    public DataWriter<Integer> mappingQualityScoreCodec;
-
-    @DataSeries(key = EncodingKey.MF_MateBitFlags, type = DataSeriesType.BYTE)
-    public DataWriter<Byte> mateBitFlagsCodec;
-
-    @DataSeries(key = EncodingKey.NS_NextFragmentReferenceSequenceID, type = DataSeriesType.INT)
-    public DataWriter<Integer> nextFragmentReferenceSequenceIDCodec;
-
-    @DataSeries(key = EncodingKey.NP_NextFragmentAlignmentStart, type = DataSeriesType.INT)
-    public DataWriter<Integer> nextFragmentAlignmentStart;
-
-    @DataSeries(key = EncodingKey.TS_InsetSize, type = DataSeriesType.INT)
-    public DataWriter<Integer> templateSize;
-
-    @DataSeries(key = EncodingKey.TL_TagIdList, type = DataSeriesType.INT)
-    public DataWriter<Integer> tagIdListCodec;
-
-    @DataSeries(key = EncodingKey.RI_RefId, type = DataSeriesType.INT)
-    public DataWriter<Integer> refIdCodec;
-
-    @DataSeries(key = EncodingKey.RS_RefSkip, type = DataSeriesType.INT)
-    public DataWriter<Integer> refSkipCodec;
-
-    public int refId;
-    public SubstitutionMatrix substitutionMatrix;
-    public boolean AP_delta = true;
-
-    public static int detachedCount = 0;
-
-    public void write(final CramCompressionRecord r) throws IOException {
-        bitFlagsC.writeData(r.flags);
-        compBitFlagsC.writeData(r.getCompressionFlags());
-        if (refId == -2)
-            refIdCodec.writeData(r.sequenceId);
-
-        readLengthC.writeData(r.readLength);
-
-        if (AP_delta)
-            alStartC.writeData(r.alignmentDelta);
-        else
-            alStartC.writeData(r.alignmentStart);
-
-        readGroupC.writeData(r.readGroupID);
-
-        if (isCaptureReadNames()) {
-            readNameC.writeData(r.readName.getBytes(charset));
-        }
-
-        // mate record:
-        if (r.isDetached()) {
-            mateBitFlagsCodec.writeData(r.getMateFlags());
-            if (!isCaptureReadNames())
-                readNameC.writeData(r.readName.getBytes(charset));
-
-            nextFragmentReferenceSequenceIDCodec.writeData(r.mateSequenceID);
-            nextFragmentAlignmentStart.writeData(r.mateAlignmentStart);
-            templateSize.writeData(r.templateSize);
-
-            detachedCount++;
-        } else if (r.isHasMateDownStream())
-            distanceC.writeData(r.recordsToNextFragment);
-
-        // tag records:
-        tagIdListCodec.writeData(r.tagIdsIndex.value);
-        if (r.tags != null) {
-            for (int i = 0; i < r.tags.length; i++) {
-                final DataWriter<byte[]> writer = tagValueCodecs.get(r.tags[i].keyType3BytesAsInt);
-                writer.writeData(r.tags[i].getValueAsByteArray());
-            }
-        }
-
-        if (!r.isSegmentUnmapped()) {
-            // writing read features:
-            numberOfReadFeaturesCodec.writeData(r.readFeatures.size());
-            int prevPos = 0;
-            for (final ReadFeature f : r.readFeatures) {
-                featuresCodeCodec.writeData(f.getOperator());
-                switch (f.getOperator()) {
-                    case Substitution.operator:
-                        break;
-
-                    default:
-                        break;
-                }
-
-                featurePositionCodec.writeData(f.getPosition() - prevPos);
-                prevPos = f.getPosition();
-
-                switch (f.getOperator()) {
-                    case ReadBase.operator:
-                        final ReadBase rb = (ReadBase) f;
-                        baseCodec.writeData(rb.getBase());
-                        qualityScoreCodec.writeData(rb.getQualityScore());
-                        break;
-                    case Substitution.operator:
-                        final Substitution sv = (Substitution) f;
-                        if (sv.getCode() < 0)
-                            baseSubstitutionCodeCodec.writeData(substitutionMatrix.code(sv.getReferenceBase(), sv.getBase()));
-                        else
-                            baseSubstitutionCodeCodec.writeData(sv.getCode());
-                        // baseSubstitutionCodec.writeData((byte) sv.getBaseChange().getChange());
-                        break;
-                    case Insertion.operator:
-                        final Insertion iv = (Insertion) f;
-                        insertionCodec.writeData(iv.getSequence());
-                        break;
-                    case SoftClip.operator:
-                        final SoftClip fv = (SoftClip) f;
-                        softClipCodec.writeData(fv.getSequence());
-                        break;
-                    case HardClip.operator:
-                        final HardClip hv = (HardClip) f;
-                        hardClipCodec.writeData(hv.getLength());
-                        break;
-                    case Padding.operator:
-                        final Padding pv = (Padding) f;
-                        paddingCodec.writeData(pv.getLength());
-                        break;
-                    case Deletion.operator:
-                        final Deletion dv = (Deletion) f;
-                        deletionLengthCodec.writeData(dv.getLength());
-                        break;
-                    case RefSkip.operator:
-                        final RefSkip rsv = (RefSkip) f;
-                        refSkipCodec.writeData(rsv.getLength());
-                        break;
-                    case InsertBase.operator:
-                        final InsertBase ib = (InsertBase) f;
-                        baseCodec.writeData(ib.getBase());
-                        break;
-                    case BaseQualityScore.operator:
-                        final BaseQualityScore bqs = (BaseQualityScore) f;
-                        qualityScoreCodec.writeData(bqs.getQualityScore());
-                        break;
-                    default:
-                        throw new RuntimeException("Unknown read feature operator: " + (char) f.getOperator());
-                }
-            }
-
-            // mapping quality:
-            mappingQualityScoreCodec.writeData(r.mappingQuality);
-            if (r.isForcePreserveQualityScores()) {
-                qualityScoreArrayCodec.writeData(r.qualityScores);
-            }
-        } else {
-            if (!r.isUnknownBases())
-                for (final byte b : r.readBases)
-                    baseCodec.writeData(b);
-            if (r.isForcePreserveQualityScores()) {
-                qualityScoreArrayCodec.writeData(r.qualityScores);
-            }
-        }
-    }
-
-    public boolean isCaptureReadNames() {
-        return captureReadNames;
-    }
-
-    public void setCaptureReadNames(final boolean captureReadNames) {
-        this.captureReadNames = captureReadNames;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/BitInputStream.java b/src/main/java/htsjdk/samtools/cram/io/BitInputStream.java
deleted file mode 100644
index 95300f3..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/BitInputStream.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An interface to describe the requirements for reading bit data as opposed to bytes. Implementors must keep track of the amount of data
- * read similar to {@link InputStream} concept.
- */
-public interface BitInputStream {
-
-    /**
-     * Reads a single bit from the stream.
-     *
-     * @throws IOException as per streaming contract in java.
-     */
-    boolean readBit() throws IOException;
-
-    /**
-     * Read specified number of bits from the stream. The bits are return in an integer value.
-     *
-     * @param length number of bits to read
-     * @throws IOException as per streaming contract in java.
-     */
-    int readBits(int length) throws IOException;
-
-    /**
-     * Read specified number of bits from the stream. The bits are return in a long value.
-     *
-     * @param length number of bits to read
-     * @throws IOException as per streaming contract in java.
-     */
-    long readLongBits(int length) throws IOException;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/BitOutputStream.java b/src/main/java/htsjdk/samtools/cram/io/BitOutputStream.java
deleted file mode 100644
index b2a081f..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/BitOutputStream.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.Closeable;
-import java.io.Flushable;
-import java.io.IOException;
-import java.io.OutputStream;
-
-
-/**
- * An interface to describe the requirements for writing out bits as opposed to bytes. Implementors must keep track of the amount of data
- * written similar to {@link OutputStream} concept and provide flush/close functionality accordingly.
- */
-public interface BitOutputStream extends Closeable, Flushable {
-
-    /**
-     * Write specified number of bits supplied in the integer value. The method is naturally limited to 32 bits max.
-     * @param bitContainer an integer containing the bits to be written out
-     * @param nofBits the number of bits to written out, minimum 0, maximum 32.
-     * @throws IOException as per streaming contract in java.
-     */
-    void write(int bitContainer, int nofBits) throws IOException;
-
-
-    /**
-     * Write specified number of bits supplied in the long value. The method is naturally limited to 64 bits max.
-     * @param bitContainer an integer containing the bits to be written out
-     * @param nofBits the number of bits to written out, minimum 0, maximum 64.
-     * @throws IOException as per streaming contract in java.
-     */
-    void write(long bitContainer, int nofBits) throws IOException;
-
-
-    /**
-     * Write specified number of bits supplied in the byte value. The method is naturally limited to 8 bits max.
-     * @param bitContainer an integer containing the bits to be written out
-     * @param nofBits the number of bits to written out, minimum 0, maximum 8.
-     * @throws IOException as per streaming contract in java.
-     */
-    void write(byte bitContainer, int nofBits) throws IOException;
-
-
-    /**
-     * Write a single bit specified in the boolean argument.
-     * @param bit emit 1 if true, 0 otherwise.
-     * @throws IOException as per streaming contract in java.
-     */
-    void write(boolean bit) throws IOException;
-
-    /**
-     * Write a single bit specified in the boolean argument repeatedly.
-     * @param bit emit 1 if true, 0 otherwise.
-     * @param repeat the number of bits to emit.
-     * @throws IOException as per streaming contract in java.
-     */
-    void write(boolean bit, long repeat) throws IOException;
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/CRC32InputStream.java b/src/main/java/htsjdk/samtools/cram/io/CRC32InputStream.java
deleted file mode 100644
index 31e957e..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/CRC32InputStream.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.CRC32;
-
-/**
- * An input stream that calculates CRC32 of all the bytes passed through it. The java {@link java.util.zip.CRC32}
- * class is used to internally.
- */
-public class CRC32InputStream extends InputStream {
-    private final InputStream delegate;
-    private final CRC32 crc32 = new CRC32();
-
-    public CRC32InputStream(final InputStream delegate) {
-        super();
-        this.delegate = delegate;
-    }
-
-    public int getCRC32() {
-        return (int) (crc32.getValue());
-    }
-
-    @Override
-    public int read() throws IOException {
-        final int value = delegate.read();
-        if (value != -1)
-            crc32.update(value);
-        return value;
-    }
-
-    @Override
-    public int read(@SuppressWarnings("NullableProblems") final byte[] b) throws IOException {
-        final int result = delegate.read(b);
-        if (result != -1)
-            crc32.update(b, 0, result);
-        return result;
-    }
-
-    @Override
-    public int read(@SuppressWarnings("NullableProblems") final byte[] b, final int off, final int length) throws IOException {
-        final int result = delegate.read(b, off, length);
-        crc32.update(b, off, result);
-        return result;
-    }
-
-    @Override
-    public long skip(final long n) throws IOException {
-        return delegate.skip(n);
-    }
-
-    @Override
-    public int available() throws IOException {
-        return delegate.available();
-    }
-
-    @Override
-    public void close() throws IOException {
-        delegate.close();
-    }
-
-    @Override
-    public void mark(final int readLimit) {
-        delegate.mark(readLimit);
-    }
-
-    @Override
-    public void reset() throws IOException {
-        delegate.reset();
-    }
-
-    @Override
-    public boolean markSupported() {
-        return delegate.markSupported();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/CRC32OutputStream.java b/src/main/java/htsjdk/samtools/cram/io/CRC32OutputStream.java
deleted file mode 100644
index dff2137..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/CRC32OutputStream.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.CRC32;
-
-/**
- * An output stream that calculates CRC32 checksum of all the bytes written through the stream. The java {@link java.util.zip.CRC32}
- * class is used to internally.
- */
-public class CRC32OutputStream extends FilterOutputStream {
-
-    private final CRC32 crc32 = new CRC32();
-
-    public CRC32OutputStream(final OutputStream out) {
-        super(out);
-    }
-
-    @Override
-    public void write(@SuppressWarnings("NullableProblems") final byte[] b, final int off, final int length) throws IOException {
-        crc32.update(b, off, length);
-        out.write(b, off, length);
-    }
-
-    @Override
-    public void write(final int b) throws IOException {
-        crc32.update(b);
-        out.write(b);
-    }
-
-    @Override
-    public void write(@SuppressWarnings("NullableProblems") final byte[] b) throws IOException {
-        crc32.update(b);
-        out.write(b);
-    }
-
-    public long getLongCrc32() {
-        return crc32.getValue();
-    }
-
-    public byte[] getCrc32_BigEndian() {
-        final long value = crc32.getValue();
-        return new byte[]{(byte) (0xFF & (value >> 24)),
-                (byte) (0xFF & (value >> 16)), (byte) (0xFF & (value >> 8)),
-                (byte) (0xFF & value)};
-    }
-
-    public byte[] getCrc32_LittleEndian() {
-        final long value = crc32.getValue();
-        return new byte[]{(byte) (0xFF & (value)),
-                (byte) (0xFF & (value >> 8)), (byte) (0xFF & (value >> 16)),
-                (byte) (0xFF & (value >> 24))};
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/CountingInputStream.java b/src/main/java/htsjdk/samtools/cram/io/CountingInputStream.java
deleted file mode 100644
index b5e5642..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/CountingInputStream.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An input stream that counts the bytes read from it.
- */
-public class CountingInputStream extends InputStream {
-    private final InputStream delegate;
-    private long count = 0;
-
-    public CountingInputStream(final InputStream inputStream) {
-        delegate = inputStream;
-    }
-
-    @Override
-    public int read() throws IOException {
-        count++;
-        return delegate.read();
-    }
-
-    public int read(@SuppressWarnings("NullableProblems") final byte[] b) throws IOException {
-        final int read = delegate.read(b);
-        count += read;
-        return read;
-    }
-
-    public int read(@SuppressWarnings("NullableProblems") final byte[] b, final int off, final int length) throws IOException {
-        final int read = delegate.read(b, off, length);
-        count += read;
-        return read;
-    }
-
-    public long skip(final long n) throws IOException {
-        final long skipped = delegate.skip(n);
-        count += skipped;
-        return skipped;
-    }
-
-    public int available() throws IOException {
-        return delegate.available();
-    }
-
-    public void close() throws IOException {
-        if (delegate != null)
-            delegate.close();
-    }
-
-    public void mark(final int readLimit) {
-        delegate.mark(readLimit);
-    }
-
-    public void reset() throws IOException {
-        delegate.reset();
-        count = 0;
-    }
-
-    public boolean markSupported() {
-        return delegate.markSupported();
-    }
-
-    public long getCount() {
-        return count;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/CramArray.java b/src/main/java/htsjdk/samtools/cram/io/CramArray.java
deleted file mode 100644
index 819319e..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/CramArray.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Methods to read and write CRAM array of integers data type.
- */
-public class CramArray {
-    /**
-     * Read CRAM int array from a {@link InputStream}.
-     *
-     * @param inputStream the inputs stream to read from
-     * @return array of integers from the input stream
-     * @throws IOException as per java IO contract
-     */
-    public static int[] array(final InputStream inputStream) throws IOException {
-        final int size = ITF8.readUnsignedITF8(inputStream);
-        final int[] array = new int[size];
-        for (int i = 0; i < size; i++)
-            array[i] = ITF8.readUnsignedITF8(inputStream);
-
-        return array;
-    }
-
-    /**
-     * Write CRAM int array to a {@link OutputStream}.
-     *
-     * @param array the array to be written
-     * @param outputStream    the output stream to write to
-     * @return the number of bits written out
-     * @throws IOException as per java IO contract
-     */
-    public static int write(final int[] array, final OutputStream outputStream) throws IOException {
-        int length = ITF8.writeUnsignedITF8(array.length, outputStream);
-        for (final int intValue : array) length += ITF8.writeUnsignedITF8(intValue, outputStream);
-
-        return length;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/CramInt.java b/src/main/java/htsjdk/samtools/cram/io/CramInt.java
deleted file mode 100644
index 1b0432f..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/CramInt.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-
-/**
- * Methods to read and write CRAM int values as given in the file format specification.
- */
-
-public class CramInt {
-    /**
-     * Read unsigned little-endian 4 byte integer from an {@link InputStream}.
-     *
-     * @param inputStream input stream to read from
-     * @return an integer value read
-     * @throws IOException as per java IO contract
-     */
-    public static int int32(final InputStream inputStream) throws IOException {
-        return inputStream.read() | inputStream.read() << 8 | inputStream.read() << 16 | inputStream.read() << 24;
-    }
-
-    /**
-     * Read unsigned little-endian 4 byte integer from an array of bytes.
-     *
-     * @param data input stream to read from
-     * @return an integer value read
-     */
-    public static int int32(final byte[] data) {
-        if (data.length != 4)
-            throw new IllegalArgumentException("Expecting a 4-byte integer. ");
-        return (0xFF & data[0]) | ((0xFF & data[1]) << 8) | ((0xFF & data[2]) << 16) | ((0xFF & data[3]) << 24);
-    }
-
-    /**
-     * Read unsigned little-endian 4 byte integer from an {@link ByteBuffer}.
-     *
-     * @param buffer {@link ByteBuffer} to read from
-     * @return an integer value read from the buffer
-     */
-    public static int int32(final ByteBuffer buffer) {
-        return buffer.get() | buffer.get() << 8 | buffer.get() << 16 | buffer.get() << 24;
-    }
-
-    /**
-     * Write int value to {@link OutputStream} encoded as CRAM int data type.
-     *
-     * @param value value to be written out
-     * @param outputStream    the output stream
-     * @return the number of bits written out
-     * @throws IOException as per java IO contract
-     */
-    @SuppressWarnings("SameReturnValue")
-    public static int writeInt32(final int value, final OutputStream outputStream) throws IOException {
-        outputStream.write((byte) value);
-        outputStream.write((byte) (value >> 8));
-        outputStream.write((byte) (value >> 16));
-        outputStream.write((byte) (value >> 24));
-        return 4 * 8;
-    }
-
-    /**
-     * Write int value to {@link OutputStream} encoded as CRAM int data type.
-     *
-     * @param value value to be written out
-     * @return the byte array holding the value encoded as CRAM int data type
-     */
-    public static byte[] writeInt32(final int value) {
-        final byte[] data = new byte[4];
-        data[0] = (byte) (value & 0xFF);
-        data[1] = (byte) (value >> 8 & 0xFF);
-        data[2] = (byte) (value >> 16 & 0xFF);
-        data[3] = (byte) (value >> 24 & 0xFF);
-        return data;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/DefaultBitInputStream.java b/src/main/java/htsjdk/samtools/cram/io/DefaultBitInputStream.java
deleted file mode 100644
index 519cf9d..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/DefaultBitInputStream.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Must not read from delegate unless no bits left in the buffer!!!
- *
- * @author vadim
- */
-public class DefaultBitInputStream extends DataInputStream implements BitInputStream {
-
-    private int nofBufferedBits = 0;
-    private int byteBuffer = 0;
-    private boolean throwEOF = false;
-    private static final long[] masks = new long[]{0, (1L << 1) - 1, (1L << 2) - 1, (1L << 3) - 1, (1L << 4) - 1,
-            (1L << 5) - 1, (1L << 6) - 1, (1L << 7) - 1, (1L << 8) - 1};
-
-    public DefaultBitInputStream(final InputStream in) {
-
-        super(in);
-        this.throwEOF = true;
-    }
-
-    public final boolean readBit() throws IOException {
-        if (--nofBufferedBits >= 0)
-            return ((byteBuffer >>> nofBufferedBits) & 1) == 1;
-
-        nofBufferedBits = 7;
-        byteBuffer = in.read();
-        if (byteBuffer == -1) {
-            if (throwEOF)
-                throw new EOFException("End of stream.");
-        }
-
-        return ((byteBuffer >>> 7) & 1) == 1;
-    }
-
-    public final int readBits(int n) throws IOException {
-        if (n == 0)
-            return 0;
-        int x = 0;
-        while (n > nofBufferedBits) {
-            n -= nofBufferedBits;
-            x |= rightBits(nofBufferedBits, byteBuffer) << n;
-            byteBuffer = in.read();
-            if (byteBuffer == -1) {
-                throw new EOFException("End of stream.");
-            }
-
-            nofBufferedBits = 8;
-        }
-        nofBufferedBits -= n;
-        return x | rightBits(n, byteBuffer >>> nofBufferedBits);
-    }
-
-    private static int rightBits(final int n, final int x) {
-        return x & ((1 << n) - 1);
-    }
-
-    public final long readLongBits(int n) throws IOException {
-        if (n > 64)
-            throw new RuntimeException("More then 64 bits are requested in one read from bit stream.");
-
-        if (n == 0)
-            return 0;
-
-        long x = 0;
-        long byteBuffer = this.byteBuffer;
-        if (nofBufferedBits == 0) {
-            byteBuffer = in.read();
-            if (byteBuffer == -1) {
-                throw new EOFException("End of stream.");
-            }
-            nofBufferedBits = 8;
-        }
-        byteBuffer &= masks[nofBufferedBits];
-        while (n > nofBufferedBits) {
-            n -= nofBufferedBits;
-            x |= byteBuffer << n;
-            byteBuffer = in.read();
-            if (byteBuffer == -1) {
-                throw new EOFException("End of stream.");
-            }
-            nofBufferedBits = 8;
-        }
-        nofBufferedBits -= n;
-        this.byteBuffer = (int) (byteBuffer & masks[nofBufferedBits]);
-        return x | (byteBuffer >>> nofBufferedBits);
-    }
-
-    public void reset() {
-        nofBufferedBits = 0;
-        byteBuffer = 0;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/DefaultBitOutputStream.java b/src/main/java/htsjdk/samtools/cram/io/DefaultBitOutputStream.java
deleted file mode 100644
index 2d702ee..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/DefaultBitOutputStream.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-public class DefaultBitOutputStream extends OutputStream implements BitOutputStream {
-
-    private static final byte[] bitMasks = new byte[8];
-
-    static {
-        for (byte i = 0; i < 8; i++)
-            bitMasks[i] = (byte) (~(0xFF >>> i));
-    }
-
-    private final OutputStream out;
-
-    private int bufferByte = 0;
-    private int bufferedNumberOfBits = 0;
-
-    public DefaultBitOutputStream(final OutputStream delegate) {
-        this.out = delegate;
-    }
-
-    public void write(final byte b) throws IOException {
-        out.write((int) b);
-    }
-
-    @Override
-    public void write(final int value) throws IOException {
-        out.write(value);
-    }
-
-    @Override
-    public String toString() {
-        return "DefaultBitOutputStream: "
-                + Integer.toBinaryString(bufferByte).substring(0, bufferedNumberOfBits);
-    }
-
-    public void write(final long bitContainer, final int nofBits) throws IOException {
-        if (nofBits == 0)
-            return;
-
-        if (nofBits < 1 || nofBits > 64)
-            throw new IOException("Expecting 1 to 64 bits, got: value=" + bitContainer + ", nofBits=" + nofBits);
-
-        if (nofBits <= 8)
-            write((byte) bitContainer, nofBits);
-        else {
-            for (int i = nofBits - 8; i >= 0; i -= 8) {
-                final byte v = (byte) (bitContainer >>> i);
-                writeByte(v);
-            }
-            if (nofBits % 8 != 0) {
-                final byte v = (byte) bitContainer;
-                write(v, nofBits % 8);
-            }
-        }
-    }
-
-    void write_int_LSB_0(final int value, final int nofBitsToWrite) throws IOException {
-        if (nofBitsToWrite == 0)
-            return;
-
-        if (nofBitsToWrite < 1 || nofBitsToWrite > 32)
-            throw new IOException("Expecting 1 to 32 bits.");
-
-        if (nofBitsToWrite <= 8)
-            write((byte) value, nofBitsToWrite);
-        else {
-            for (int i = nofBitsToWrite - 8; i >= 0; i -= 8) {
-                final byte v = (byte) (value >>> i);
-                writeByte(v);
-            }
-            if (nofBitsToWrite % 8 != 0) {
-                final byte v = (byte) value;
-                write(v, nofBitsToWrite % 8);
-            }
-        }
-    }
-
-    public void write(final int bitContainer, final int nofBits) throws IOException {
-        write_int_LSB_0(bitContainer, nofBits);
-    }
-
-    private void writeByte(final int value) throws IOException {
-        if (bufferedNumberOfBits == 0)
-            out.write(value);
-        else {
-            bufferByte = ((value & 0xFF) >>> bufferedNumberOfBits) | bufferByte;
-            out.write(bufferByte);
-            bufferByte = (value << (8 - bufferedNumberOfBits)) & 0xFF;
-        }
-    }
-
-    public void write(byte bitContainer, final int nofBits) throws IOException {
-        if (nofBits < 0 || nofBits > 8)
-            throw new IOException("Expecting 0 to 8 bits.");
-
-        if (nofBits == 8)
-            writeByte(bitContainer);
-        else {
-            if (bufferedNumberOfBits == 0) {
-                bufferByte = (bitContainer << (8 - nofBits)) & 0xFF;
-                bufferedNumberOfBits = nofBits;
-            } else {
-                bitContainer = (byte) (bitContainer & ~bitMasks[8 - nofBits]);
-                int bits = 8 - bufferedNumberOfBits - nofBits;
-                if (bits < 0) {
-                    bits = -bits;
-                    bufferByte |= (bitContainer >>> bits);
-                    out.write(bufferByte);
-                    bufferByte = (bitContainer << (8 - bits)) & 0xFF;
-                    bufferedNumberOfBits = bits;
-                } else if (bits == 0) {
-                    bufferByte = bufferByte | bitContainer;
-                    out.write(bufferByte);
-                    bufferedNumberOfBits = 0;
-                } else {
-                    bufferByte = bufferByte | (bitContainer << bits);
-                    bufferedNumberOfBits = 8 - bits;
-                }
-            }
-        }
-    }
-
-    @Override
-    public void write(final boolean bit) throws IOException {
-        write(bit ? (byte) 1 : (byte) 0, 1);
-    }
-
-    public void write(final boolean bit, final long repeat) throws IOException {
-        for (long i = 0; i < repeat; i++)
-            write(bit);
-    }
-
-    @Override
-    public void close() throws IOException {
-        flush();
-        out.close();
-    }
-
-    @Override
-    public void flush() throws IOException {
-        if (bufferedNumberOfBits > 0)
-            out.write(bufferByte);
-
-        bufferedNumberOfBits = 0;
-        out.flush();
-    }
-
-    @Override
-    public void write(@SuppressWarnings("NullableProblems") final byte[] b) throws IOException {
-        out.write(b);
-    }
-
-    @Override
-    public void write(@SuppressWarnings("NullableProblems") final byte[] b, final int off, final int length) throws IOException {
-        out.write(b, off, length);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/ExposedByteArrayOutputStream.java b/src/main/java/htsjdk/samtools/cram/io/ExposedByteArrayOutputStream.java
deleted file mode 100644
index 0bac0dd..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/ExposedByteArrayOutputStream.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import java.io.ByteArrayOutputStream;
-
-public class ExposedByteArrayOutputStream extends ByteArrayOutputStream {
-    public byte[] getBuffer() {
-        return buf;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/ExternalCompression.java b/src/main/java/htsjdk/samtools/cram/io/ExternalCompression.java
deleted file mode 100644
index 4905a96..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/ExternalCompression.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import htsjdk.samtools.cram.encoding.rans.RANS;
-import htsjdk.samtools.util.IOUtil;
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
-import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
-import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Methods to provide CRAM external compression/decompression features.
- */
-public class ExternalCompression {
-    private static final int GZIP_COMPRESSION_LEVEL = Integer.valueOf(System.getProperty("gzip.compression.level", "5"));
-
-    /**
-     * Compress a byte array into GZIP blob. The method obeys {@link ExternalCompression#GZIP_COMPRESSION_LEVEL} compression level.
-     *
-     * @param data byte array to compress
-     * @return compressed blob
-     */
-    public static byte[] gzip(final byte[] data) throws IOException {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        final GZIPOutputStream gos = new GZIPOutputStream(byteArrayOutputStream) {
-            {
-                def.setLevel(GZIP_COMPRESSION_LEVEL);
-            }
-        };
-        IOUtil.copyStream(new ByteArrayInputStream(data), gos);
-        gos.close();
-
-        return byteArrayOutputStream.toByteArray();
-    }
-
-    /**
-     * Uncompress a GZIP data blob into a new byte array.
-     *
-     * @param data compressed data blob
-     * @return uncompressed data
-     * @throws IOException as per java IO contract
-     */
-    public static byte[] gunzip(final byte[] data) throws IOException {
-        final GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(data));
-        return InputStreamUtils.readFully(gzipInputStream);
-    }
-
-    /**
-     * Compress a byte array into BZIP2 blob.
-     *
-     * @param data byte array to compress
-     * @return compressed blob
-     */
-    public static byte[] bzip2(final byte[] data) throws IOException {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        final BZip2CompressorOutputStream bos = new BZip2CompressorOutputStream(byteArrayOutputStream);
-        IOUtil.copyStream(new ByteArrayInputStream(data), bos);
-        bos.close();
-        return byteArrayOutputStream.toByteArray();
-    }
-
-    /**
-     * Uncompress a BZIP2 data blob into a new byte array.
-     *
-     * @param data compressed data blob
-     * @return uncompressed data
-     * @throws IOException as per java IO contract
-     */
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    public static byte[] unbzip2(final byte[] data) throws IOException {
-        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
-        return InputStreamUtils.readFully(new BZip2CompressorInputStream(byteArrayInputStream));
-    }
-
-    /**
-     * Compress a byte array into rANS blob.
-     *
-     * @param data  byte array to compress
-     * @param order rANS order
-     * @return compressed blob
-     */
-    public static byte[] rans(final byte[] data, final RANS.ORDER order) {
-        final ByteBuffer buffer = RANS.compress(ByteBuffer.wrap(data), order, null);
-        return toByteArray(buffer);
-    }
-
-    /**
-     * Compress a byte array into rANS blob.
-     *
-     * @param data  byte array to compress
-     * @param order rANS order
-     * @return compressed blob
-     */
-    public static byte[] rans(final byte[] data, final int order) {
-        final ByteBuffer buffer = RANS.compress(ByteBuffer.wrap(data), RANS.ORDER.fromInt(order), null);
-        return toByteArray(buffer);
-    }
-
-    /**
-     * Uncompress a rANS data blob into a new byte array.
-     *
-     * @param data compressed data blob
-     * @return uncompressed data
-     */
-    public static byte[] unrans(final byte[] data) {
-        final ByteBuffer buf = RANS.uncompress(ByteBuffer.wrap(data), null);
-        return toByteArray(buf);
-    }
-
-
-    /**
-     * Compress a byte array into XZ blob.
-     *
-     * @param data byte array to compress
-     * @return compressed blob
-     */
-    public static byte[] xz(final byte[] data) throws IOException {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(data.length * 2);
-        final XZCompressorOutputStream xzCompressorOutputStream = new XZCompressorOutputStream(byteArrayOutputStream);
-        xzCompressorOutputStream.write(data);
-        xzCompressorOutputStream.close();
-        return byteArrayOutputStream.toByteArray();
-    }
-
-
-    /**
-     * Uncompress a XZ data blob into a new byte array.
-     *
-     * @param data compressed data blob
-     * @return uncompressed data
-     * @throws IOException as per java IO contract
-     */
-    public static byte[] unxz(final byte[] data) throws IOException {
-        final XZCompressorInputStream xzCompressorInputStream = new XZCompressorInputStream(new ByteArrayInputStream(data));
-        return InputStreamUtils.readFully(xzCompressorInputStream);
-    }
-
-
-    private static byte[] toByteArray(final ByteBuffer buffer) {
-        if (buffer.hasArray() && buffer.arrayOffset() == 0 && buffer.array().length == buffer.limit()) return buffer.array();
-
-        final byte[] bytes = new byte[buffer.remaining()];
-        buffer.get(bytes);
-        return bytes;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/ITF8.java b/src/main/java/htsjdk/samtools/cram/io/ITF8.java
deleted file mode 100644
index edaca09..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/ITF8.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-
-/**
- * Methods to read and write int values as per ITF8 specification in CRAM.
- */
-public class ITF8 {
-
-    /**
-     * Reads an unsigned (32 bit) integer from an {@link InputStream}. The sign bit should be interpreted as a value bit.
-     *
-     * @param inputStream the stream to read from
-     * @return the value read
-     * @throws IOException as per java IO contract
-     */
-    public static int readUnsignedITF8(final InputStream inputStream) throws IOException {
-        final int b1 = inputStream.read();
-        if (b1 == -1)
-            throw new EOFException();
-
-        if ((b1 & 128) == 0)
-            return b1;
-
-        if ((b1 & 64) == 0)
-            return ((b1 & 127) << 8) | inputStream.read();
-
-        if ((b1 & 32) == 0) {
-            final int b2 = inputStream.read();
-            final int b3 = inputStream.read();
-            return ((b1 & 63) << 16) | b2 << 8 | b3;
-        }
-
-        if ((b1 & 16) == 0)
-            return ((b1 & 31) << 24) | inputStream.read() << 16 | inputStream.read() << 8 | inputStream.read();
-
-        return ((b1 & 15) << 28) | inputStream.read() << 20 | inputStream.read() << 12 | inputStream.read() << 4 | (15 & inputStream.read());
-    }
-
-    /**
-     * Writes an unsigned (32 bit) integer to an {@link OutputStream} encoded as ITF8. The sign bit is interpreted as a value bit.
-     *
-     * @param value the value to be written out
-     * @param outputStream    the stream to write to
-     * @return number of bits written
-     * @throws IOException as per java IO contract
-     */
-    public static int writeUnsignedITF8(final int value, final OutputStream outputStream) throws IOException {
-        if ((value >>> 7) == 0) {
-            outputStream.write(value);
-            return 8;
-        }
-
-        if ((value >>> 14) == 0) {
-            outputStream.write(((value >> 8) | 128));
-            outputStream.write((value & 0xFF));
-            return 16;
-        }
-
-        if ((value >>> 21) == 0) {
-            outputStream.write(((value >> 16) | 192));
-            outputStream.write(((value >> 8) & 0xFF));
-            outputStream.write((value & 0xFF));
-            return 24;
-        }
-
-        if ((value >>> 28) == 0) {
-            outputStream.write(((value >> 24) | 224));
-            outputStream.write(((value >> 16) & 0xFF));
-            outputStream.write(((value >> 8) & 0xFF));
-            outputStream.write((value & 0xFF));
-            return 32;
-        }
-
-        outputStream.write(((value >> 28) | 240));
-        outputStream.write(((value >> 20) & 0xFF));
-        outputStream.write(((value >> 12) & 0xFF));
-        outputStream.write(((value >> 4) & 0xFF));
-        outputStream.write((value & 0xFF));
-        return 40;
-    }
-
-    /**
-     * Reads an unsigned (32 bit) integer from an array of bytes. The sign bit should be interpreted as a value bit.
-     *
-     * @param data the bytes to read from
-     * @return the value read
-     */
-    public static int readUnsignedITF8(final byte[] data) {
-        final ByteBuffer buffer = ByteBuffer.wrap(data);
-        final int value = readUnsignedITF8(buffer);
-        buffer.clear();
-
-        return value;
-    }
-
-    /**
-     * Writes an unsigned (32 bit) integer to a byte new array encoded as ITF8. The sign bit is interpreted as a value bit.
-     *
-     * @param value the value to be written out
-     * @return the bytes holding ITF8 representation of the value
-     */
-    public static byte[] writeUnsignedITF8(final int value) {
-        final ByteBuffer buffer = ByteBuffer.allocate(10);
-        writeUnsignedITF8(value, buffer);
-
-        buffer.flip();
-        final byte[] array = new byte[buffer.limit()];
-        buffer.get(array);
-
-        buffer.clear();
-        return array;
-    }
-
-    /**
-     * Reads an unsigned (32 bit) integer from a {@link ByteBuffer}. The sign bit should be interpreted as a value bit.
-     *
-     * @param buffer the bytes to read from
-     * @return unsigned integer value from the buffer
-     */
-    public static int readUnsignedITF8(final ByteBuffer buffer) {
-        final int b1 = 0xFF & buffer.get();
-
-        if ((b1 & 128) == 0)
-            return b1;
-
-        if ((b1 & 64) == 0)
-            return ((b1 & 127) << 8) | (0xFF & buffer.get());
-
-        if ((b1 & 32) == 0) {
-            final int b2 = 0xFF & buffer.get();
-            final int b3 = 0xFF & buffer.get();
-            return ((b1 & 63) << 16) | b2 << 8 | b3;
-        }
-
-        if ((b1 & 16) == 0)
-            return ((b1 & 31) << 24) | (0xFF & buffer.get()) << 16 | (0xFF & buffer.get()) << 8 | (0xFF & buffer.get());
-
-        return ((b1 & 15) << 28) | (0xFF & buffer.get()) << 20 | (0xFF & buffer.get()) << 12 | (0xFF & buffer.get()) << 4
-                | (15 & buffer.get());
-    }
-
-    /**
-     * Writes an unsigned (32 bit) integer to an {@link OutputStream} encoded as ITF8. The sign bit is interpreted as a value bit.
-     *
-     * @param value the value to be written out
-     * @param buffer   the {@link ByteBuffer} to write to
-     */
-    public static void writeUnsignedITF8(final int value, final ByteBuffer buffer) {
-        if ((value >>> 7) == 0) {
-            buffer.put((byte) value);
-            return;
-        }
-
-        if ((value >>> 14) == 0) {
-            buffer.put((byte) ((value >> 8) | 128));
-            buffer.put((byte) (value & 0xFF));
-            return;
-        }
-
-        if ((value >>> 21) == 0) {
-            buffer.put((byte) ((value >> 16) | 192));
-            buffer.put((byte) ((value >> 8) & 0xFF));
-            buffer.put((byte) (value & 0xFF));
-            return;
-        }
-
-        if ((value >>> 28) == 0) {
-            buffer.put((byte) ((value >> 24) | 224));
-            buffer.put((byte) ((value >> 16) & 0xFF));
-            buffer.put((byte) ((value >> 8) & 0xFF));
-            buffer.put((byte) (value & 0xFF));
-            return;
-        }
-
-        buffer.put((byte) ((value >> 28) | 240));
-        buffer.put((byte) ((value >> 20) & 0xFF));
-        buffer.put((byte) ((value >> 12) & 0xFF));
-        buffer.put((byte) ((value >> 4) & 0xFF));
-        buffer.put((byte) (value & 0xFF));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/InputStreamUtils.java b/src/main/java/htsjdk/samtools/cram/io/InputStreamUtils.java
deleted file mode 100644
index 3d1c96d..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/InputStreamUtils.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.io;
-
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Convenience methods to read from {@link java.io.InputStream}.
- */
-public class InputStreamUtils {
-
-    /**
-     * Read the {@link InputStream} until the end into a new byte array.
-     *
-     * @param input the input stream to read
-     * @return a new byte array containing data from the input stream
-     */
-    public static byte[] readFully(final InputStream input) {
-        final ByteArrayOutputStream output = new ByteArrayOutputStream();
-        IOUtil.copyStream(input, output);
-        return output.toByteArray();
-    }
-
-    /**
-     * Read the specified number of bytes from the {@link InputStream} into a new byte array. The length of the array is less or equal to
-     * length.
-     *
-     * @param inputStream  the input stream to read from
-     * @param length the number of bytes to read
-     * @return a new byte array containing data from the input stream
-     * @throws IOException  as per java IO contract
-     * @throws EOFException if there is less than length bytes in the stream
-     */
-    public static byte[] readFully(final InputStream inputStream, final int length) throws IOException {
-        final byte[] b = new byte[length];
-        readFully(inputStream, b, 0, length);
-        return b;
-    }
-
-    /**
-     * Read the specified number of bytes from the {@link InputStream} into the byte array starting from the specified position. The length
-     * of the array is less or equal to length.
-     *
-     * @param inputStream  the input stream to read from
-     * @param b   the byte array to read into
-     * @param off offset in the byte array
-     * @param length the number of bytes to read
-     * @throws IOException  as per java IO contract
-     * @throws EOFException if there is less than length bytes in the stream
-     */
-    public static void readFully(final InputStream inputStream, final byte[] b, final int off, final int length) throws IOException {
-        if (length < 0) throw new IndexOutOfBoundsException();
-        int n = 0;
-        while (n < length) {
-            final int count = inputStream.read(b, off + n, length - n);
-            if (count < 0) throw new EOFException();
-            n += count;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/io/LTF8.java b/src/main/java/htsjdk/samtools/cram/io/LTF8.java
deleted file mode 100644
index 3e98ba6..0000000
--- a/src/main/java/htsjdk/samtools/cram/io/LTF8.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Methods to read and write LTF8 as per CRAM specs.
- */
-public class LTF8 {
-    /**
-     * Reads an unsigned long value from the input stream. The sign bit should be interpreted just as other bits in the value.
-     *
-     * @param inputStream input stream to be read from
-     * @return value encoded in the stream as LTF8
-     * @throws IOException as per java IO contract
-     */
-    public static long readUnsignedLTF8(final InputStream inputStream) throws IOException {
-        final int b1 = inputStream.read();
-        if (b1 == -1)
-            throw new EOFException();
-
-        if ((b1 & 128) == 0)
-            return b1;
-
-        if ((b1 & 64) == 0)
-            return ((b1 & 127) << 8) | inputStream.read();
-
-        if ((b1 & 32) == 0) {
-            final int b2 = inputStream.read();
-            final int b3 = inputStream.read();
-            return ((b1 & 63) << 16) | b2 << 8 | b3;
-        }
-
-        if ((b1 & 16) == 0) {
-            long result = ((long) (b1 & 31) << 24);
-            result |= inputStream.read() << 16;
-            result |= inputStream.read() << 8;
-            result |= inputStream.read();
-            return result;
-        }
-
-        if ((b1 & 8) == 0) {
-            long value = ((long) (b1 & 15) << 32);
-            value |= ((0xFF & ((long) inputStream.read())) << 24);
-            value |= (inputStream.read() << 16);
-            value |= (inputStream.read() << 8);
-            value |= inputStream.read();
-            return value;
-        }
-
-        if ((b1 & 4) == 0) {
-            long result = ((long) (b1 & 7) << 40);
-            result |= (0xFF & ((long) inputStream.read())) << 32;
-            result |= (0xFF & ((long) inputStream.read())) << 24;
-            result |= inputStream.read() << 16;
-            result |= inputStream.read() << 8;
-            result |= inputStream.read();
-            return result;
-        }
-
-        if ((b1 & 2) == 0) {
-            long result = ((long) (b1 & 3) << 48);
-            result |= (0xFF & ((long) inputStream.read())) << 40;
-            result |= (0xFF & ((long) inputStream.read())) << 32;
-            result |= (0xFF & ((long) inputStream.read())) << 24;
-            result |= inputStream.read() << 16;
-            result |= inputStream.read() << 8;
-            result |= inputStream.read();
-            return result;
-        }
-
-        if ((b1 & 1) == 0) {
-            long result = (0xFF & ((long) inputStream.read())) << 48;
-            result |= (0xFF & ((long) inputStream.read())) << 40;
-            result |= (0xFF & ((long) inputStream.read())) << 32;
-            result |= (0xFF & ((long) inputStream.read())) << 24;
-            result |= inputStream.read() << 16;
-            result |= inputStream.read() << 8;
-            result |= inputStream.read();
-            return result;
-        }
-
-        long result = (0xFF & ((long) inputStream.read())) << 56;
-        result |= (0xFF & ((long) inputStream.read())) << 48;
-        result |= (0xFF & ((long) inputStream.read())) << 40;
-        result |= (0xFF & ((long) inputStream.read())) << 32;
-        result |= (0xFF & ((long) inputStream.read())) << 24;
-        result |= inputStream.read() << 16;
-        result |= inputStream.read() << 8;
-        result |= inputStream.read();
-        return result;
-    }
-
-    /**
-     * Writes an unsigned long value to the output stream. The sign bit is interpreted just as other bits in the value.
-     *
-     * @param value the value to be written
-     * @param outputStream    the output stream to write to
-     * @return the number of bits written
-     * @throws IOException as per java IO contract
-     */
-    public static int writeUnsignedLTF8(final long value, final OutputStream outputStream) throws IOException {
-        if ((value >>> 7) == 0) {
-            // no control bits
-            outputStream.write((int) value);
-            return 8;
-        }
-
-        if ((value >>> 14) == 0) {
-            // one control bit
-            outputStream.write((int) ((value >> 8) | 0x80));
-            outputStream.write((int) (value & 0xFF));
-            return 16;
-        }
-
-        if ((value >>> 21) == 0) {
-            // two control bits
-            outputStream.write((int) ((value >> 16) | 0xC0));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 24;
-        }
-
-        if ((value >>> 28) == 0) {
-            // three control bits
-            outputStream.write((int) ((value >> 24) | 0xE0));
-            outputStream.write((int) ((value >> 16) & 0xFF));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 32;
-        }
-
-        if ((value >>> 35) == 0) {
-            // four control bits
-            outputStream.write((int) ((value >> 32) | 0xF0));
-            outputStream.write((int) ((value >> 24) & 0xFF));
-            outputStream.write((int) ((value >> 16) & 0xFF));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 40;
-        }
-
-        if ((value >>> 42) == 0) {
-            // five control bits
-            outputStream.write((int) ((value >> 40) | 0xF8));
-            outputStream.write((int) ((value >> 32) & 0xFF));
-            outputStream.write((int) ((value >> 24) & 0xFF));
-            outputStream.write((int) ((value >> 16) & 0xFF));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 48;
-        }
-
-        if ((value >>> 49) == 0) {
-            // six control bits
-            outputStream.write((int) ((value >> 48) | 0xFC));
-            outputStream.write((int) ((value >> 40) & 0xFF));
-            outputStream.write((int) ((value >> 32) & 0xFF));
-            outputStream.write((int) ((value >> 24) & 0xFF));
-            outputStream.write((int) ((value >> 16) & 0xFF));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 56;
-        }
-
-        if ((value >>> 56) == 0) {
-            // seven control bits
-            outputStream.write(0xFE);
-            outputStream.write((int) ((value >> 48) & 0xFF));
-            outputStream.write((int) ((value >> 40) & 0xFF));
-            outputStream.write((int) ((value >> 32) & 0xFF));
-            outputStream.write((int) ((value >> 24) & 0xFF));
-            outputStream.write((int) ((value >> 16) & 0xFF));
-            outputStream.write((int) ((value >> 8) & 0xFF));
-            outputStream.write((int) (value & 0xFF));
-            return 64;
-        }
-
-        // eight control bits
-        outputStream.write((0xFF));
-        outputStream.write((int) ((value >> 56) & 0xFF));
-        outputStream.write((int) ((value >> 48) & 0xFF));
-        outputStream.write((int) ((value >> 40) & 0xFF));
-        outputStream.write((int) ((value >> 32) & 0xFF));
-        outputStream.write((int) ((value >> 28) & 0xFF));
-        outputStream.write((int) ((value >> 16) & 0xFF));
-        outputStream.write((int) ((value >> 8) & 0xFF));
-        outputStream.write((int) (value & 0xFF));
-        return 72;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/BaseCategory.java b/src/main/java/htsjdk/samtools/cram/lossy/BaseCategory.java
deleted file mode 100644
index ca40a92..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/BaseCategory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public class BaseCategory {
-    public final BaseCategoryType type;
-    public final int param;
-
-    private BaseCategory(final BaseCategoryType type, final int param) {
-        this.type = type;
-        this.param = param;
-    }
-
-    public static BaseCategory match() {
-        return new BaseCategory(BaseCategoryType.MATCH, -1);
-    }
-
-    public static BaseCategory mismatch() {
-        return new BaseCategory(BaseCategoryType.MISMATCH, -1);
-    }
-
-    public static BaseCategory flankingDeletion() {
-        return new BaseCategory(BaseCategoryType.FLANKING_DELETION, -1);
-    }
-
-    public static BaseCategory pileup(final int threshold) {
-        return new BaseCategory(BaseCategoryType.PILEUP, threshold);
-    }
-
-    public static BaseCategory lowerThanCoverage(final int coverage) {
-        return new BaseCategory(BaseCategoryType.LOWER_COVERAGE, coverage);
-    }
-
-    public static BaseCategory insertion() {
-        return new BaseCategory(BaseCategoryType.INSERTION, -1);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("[%s%d]", type.name(), param);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/BaseCategoryType.java b/src/main/java/htsjdk/samtools/cram/lossy/BaseCategoryType.java
deleted file mode 100644
index 93e98cc..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/BaseCategoryType.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public enum BaseCategoryType {
-    MATCH('R'), MISMATCH('N'), FLANKING_DELETION('D'), PILEUP('P'), LOWER_COVERAGE(
-            'X'), INSERTION('I');
-
-    @SuppressWarnings("FieldCanBeLocal")
-    private final char code;
-
-    BaseCategoryType(final char code) {
-        this.code = code;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/Binning.java b/src/main/java/htsjdk/samtools/cram/lossy/Binning.java
deleted file mode 100644
index 2ff6d9b..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/Binning.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-class Binning {
-
-    // @formatter:off
-    // NCBI binning scheme:
-    // Low High Value
-    // 0 0 0
-    // 1 1 1
-    // 2 2 2
-    // 3 14 9
-    // 15 19 17
-    // 20 24 22
-    // 25 29 28
-    // 30 noLimit 35
-    // @formatter:on
-    public static byte[] NCBI_BINNING_MATRIX = new byte[]{
-            // @formatter:off
-            0, 1, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 17, 17, 17, 17,
-            22, 22, 22, 22,
-            22,
-            28,
-            28,
-            28,
-            28,
-            28,
-            // @formatter:on
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-            35};
-
-    // @formatter:off
-
-    // Illumina binning scheme:
-    // 2-9 6
-    // 10-19 15
-    // 20-24 22
-    // 25-29 27
-    // 30-34 33
-    // 35-39 37
-    // greater than or equal to 40 40
-    // @formatter:on
-    public static final byte[] ILLUMINA_BINNING_MATRIX = new byte[]{
-            // @formatter:off
-            0, 1, 6, 6, 6, 6, 6, 6, 6, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-            15, 22, 22, 22, 22, 22, 27, 27, 27, 27, 27, 33, 33, 33, 33, 33, 37,
-            37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-            40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-            40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-            40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-            40, 40, 40, 40, 40, 40};
-    // @formatter:on
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/PreservationPolicy.java b/src/main/java/htsjdk/samtools/cram/lossy/PreservationPolicy.java
deleted file mode 100644
index fa8c5d3..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/PreservationPolicy.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PreservationPolicy {
-    public ReadCategory readCategory;
-    public final List<BaseCategory> baseCategories = new ArrayList<BaseCategory>();
-
-    public QualityScoreTreatment treatment;
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder();
-        if (readCategory != null)
-            sb.append(readCategory.toString());
-
-        if (baseCategories != null)
-            for (final BaseCategory c : baseCategories)
-                sb.append(c.toString());
-
-        sb.append(treatment.toString());
-        return sb.toString();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/QualityScorePreservation.java b/src/main/java/htsjdk/samtools/cram/lossy/QualityScorePreservation.java
deleted file mode 100644
index 5ffe3c1..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/QualityScorePreservation.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.encoding.readfeatures.BaseQualityScore;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.ref.ReferenceTracks;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-
-public class QualityScorePreservation {
-    private final List<PreservationPolicy> policyList;
-
-    public QualityScorePreservation(final String specification) {
-        policyList = parsePolicies(specification);
-    }
-
-    public List<PreservationPolicy> getPreservationPolicies() {
-        return policyList;
-    }
-
-    private static int readParam(final LinkedList<Character> list) {
-        int value = 0;
-
-        while (!list.isEmpty() && Character.isDigit(list.getFirst()))
-            value = value * 10 + (list.removeFirst() - 48);
-
-        return value;
-    }
-
-    private static QualityScoreTreatment readTreatment(
-            final LinkedList<Character> list) {
-        final int param = readParam(list);
-        final QualityScoreTreatment qualityScoreTreatment;
-        switch (param) {
-            case 0:
-                qualityScoreTreatment = QualityScoreTreatment.drop();
-                break;
-            case 40:
-                qualityScoreTreatment = QualityScoreTreatment.preserve();
-                break;
-
-            default:
-                qualityScoreTreatment = QualityScoreTreatment.bin(param);
-                break;
-
-        }
-        return qualityScoreTreatment;
-    }
-
-    private static List<PreservationPolicy> parsePolicies(final String spec) {
-        final List<PreservationPolicy> policyList = new ArrayList<PreservationPolicy>();
-        for (final String string : spec.split("-")) {
-            if (string.isEmpty())
-                continue;
-            final PreservationPolicy policy = parseSinglePolicy(string);
-            policyList.add(policy);
-        }
-
-        Collections.sort(policyList, new Comparator<PreservationPolicy>() {
-
-            @Override
-            public int compare(final PreservationPolicy o1, final PreservationPolicy o2) {
-                final QualityScoreTreatment t1 = o1.treatment;
-                final QualityScoreTreatment t2 = o2.treatment;
-                final int result = t2.type.ordinal() - t1.type.ordinal();
-                if (result != 0)
-                    return result;
-
-                return 0;
-            }
-        });
-
-        return policyList;
-    }
-
-    private static PreservationPolicy parseSinglePolicy(final String spec) {
-        final PreservationPolicy preservationPolicy = new PreservationPolicy();
-        final LinkedList<Character> list = new LinkedList<Character>();
-        for (final char character : spec.toCharArray())
-            list.add(character);
-
-        while (!list.isEmpty()) {
-            final char code = list.removeFirst();
-            switch (code) {
-                case 'R':
-                    preservationPolicy.baseCategories.add(BaseCategory.match());
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case 'N':
-                    preservationPolicy.baseCategories.add(BaseCategory.mismatch());
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case 'X':
-                    final int coverage = readParam(list);
-                    preservationPolicy.baseCategories
-                            .add(BaseCategory.lowerThanCoverage(coverage));
-                    break;
-                case 'D':
-                    preservationPolicy.baseCategories.add(BaseCategory.flankingDeletion());
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case 'M':
-                    int score = readParam(list);
-                    preservationPolicy.readCategory = ReadCategory.higher_than_mapping_score(score);
-                    break;
-                case 'm':
-                    score = readParam(list);
-                    preservationPolicy.readCategory = ReadCategory.lower_than_mapping_score(score);
-                    break;
-                case 'U':
-                    preservationPolicy.readCategory = ReadCategory.unplaced();
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case 'P':
-                    final int mismatches = readParam(list);
-                    preservationPolicy.baseCategories.add(BaseCategory.pileup(mismatches));
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case 'I':
-                    preservationPolicy.baseCategories.add(BaseCategory.insertion());
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case '_':
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-                case '*':
-                    preservationPolicy.readCategory = ReadCategory.all();
-                    preservationPolicy.treatment = readTreatment(list);
-                    break;
-
-                default:
-                    throw new RuntimeException("Unknown read or base category: "
-                            + code);
-            }
-
-            if (preservationPolicy.treatment == null)
-                preservationPolicy.treatment = QualityScoreTreatment.preserve();
-        }
-
-        return preservationPolicy;
-    }
-
-    private static void applyBinning(final byte[] scores) {
-        for (int i = 0; i < scores.length; i++)
-            scores[i] = Binning.ILLUMINA_BINNING_MATRIX[scores[i]];
-    }
-
-    private static byte applyTreatment(final byte score, final QualityScoreTreatment qualityScoreTreatment) {
-        switch (qualityScoreTreatment.type) {
-            case BIN:
-                return Binning.ILLUMINA_BINNING_MATRIX[score];
-            case DROP:
-                return -1;
-            case PRESERVE:
-                return score;
-
-        }
-        throw new RuntimeException("Unknown quality score treatment type: "
-                + qualityScoreTreatment.type.name());
-    }
-
-    public void addQualityScores(final SAMRecord samRecord, final CramCompressionRecord cramRecord,
-                                 final ReferenceTracks referenceTracks) {
-        if (samRecord.getBaseQualities() == SAMRecord.NULL_QUALS) {
-            cramRecord.qualityScores = SAMRecord.NULL_QUALS;
-            cramRecord.setForcePreserveQualityScores(false);
-            return;
-        }
-
-        final byte[] scores = new byte[samRecord.getReadLength()];
-        Arrays.fill(scores, (byte) -1);
-        for (final PreservationPolicy preservationPolicy : policyList)
-            addQS(samRecord, cramRecord, scores, referenceTracks, preservationPolicy);
-
-        if (!cramRecord.isForcePreserveQualityScores()) {
-            for (int i = 0; i < scores.length; i++) {
-                if (scores[i] > -1) {
-                    if (cramRecord.readFeatures == null)
-                        cramRecord.readFeatures = new LinkedList<ReadFeature>();
-                    cramRecord.readFeatures.add(new BaseQualityScore(i + 1, scores[i]));
-                }
-            }
-            if (cramRecord.readFeatures != null)
-                Collections.sort(cramRecord.readFeatures, readFeaturePositionComparator);
-        }
-        cramRecord.qualityScores = scores;
-    }
-
-    private static final Comparator<ReadFeature> readFeaturePositionComparator = new Comparator<ReadFeature>() {
-
-        @Override
-        public int compare(final ReadFeature o1, final ReadFeature o2) {
-            return o1.getPosition() - o2.getPosition();
-        }
-    };
-
-    public boolean areReferenceTracksRequired() {
-        if (policyList == null || policyList.isEmpty()) return false;
-        for (final PreservationPolicy preservationPolicy : policyList) {
-            if (preservationPolicy.baseCategories == null || preservationPolicy.baseCategories.isEmpty())
-                continue;
-            for (final BaseCategory c : preservationPolicy.baseCategories) {
-                switch (c.type) {
-                    case LOWER_COVERAGE:
-                    case PILEUP:
-                        return true;
-
-                    default:
-                        break;
-                }
-            }
-        }
-        return false;
-
-    }
-
-    private static void addQS(final SAMRecord samRecord, final CramCompressionRecord cramRecord,
-                              final byte[] scores, final ReferenceTracks referenceTracks, final PreservationPolicy preservationPolicy) {
-        final int alSpan = samRecord.getAlignmentEnd() - samRecord.getAlignmentStart();
-        final byte[] qualityScores = samRecord.getBaseQualities();
-
-        // check if read is falling into the read category:
-        if (preservationPolicy.readCategory != null) {
-            @SuppressWarnings("UnusedAssignment") boolean properRead = false;
-            switch (preservationPolicy.readCategory.type) {
-                case ALL:
-                    properRead = true;
-                    break;
-                case UNPLACED:
-                    properRead = samRecord.getReadUnmappedFlag();
-                    break;
-                case LOWER_MAPPING_SCORE:
-                    properRead = samRecord.getMappingQuality() < preservationPolicy.readCategory.param;
-                    break;
-                case HIGHER_MAPPING_SCORE:
-                    properRead = samRecord.getMappingQuality() > preservationPolicy.readCategory.param;
-                    break;
-
-                default:
-                    throw new RuntimeException("Unknown read category: "
-                            + preservationPolicy.readCategory.type.name());
-            }
-
-            if (!properRead) // nothing to do here:
-                return;
-        }
-
-        // apply treatment if there is no per-base policy:
-        if (preservationPolicy.baseCategories == null || preservationPolicy.baseCategories.isEmpty()) {
-            switch (preservationPolicy.treatment.type) {
-                case BIN:
-                    if (cramRecord.qualityScores == null)
-                        cramRecord.qualityScores = samRecord.getBaseQualities();
-                    System.arraycopy(samRecord.getBaseQualities(), 0, scores, 0,
-                            scores.length);
-                    applyBinning(scores);
-                    cramRecord.setForcePreserveQualityScores(true);
-                    break;
-                case PRESERVE:
-                    System.arraycopy(samRecord.getBaseQualities(), 0, scores, 0,
-                            scores.length);
-                    cramRecord.setForcePreserveQualityScores(true);
-                    break;
-                case DROP:
-                    cramRecord.qualityScores = null;
-                    cramRecord.setForcePreserveQualityScores(false);
-                    break;
-
-                default:
-                    throw new RuntimeException(
-                            "Unknown quality score treatment type: "
-                                    + preservationPolicy.treatment.type.name());
-            }
-
-            // nothing else to do here:
-            return;
-        }
-
-        // here we go, scan all bases to check if the policy applies:
-        final boolean[] mask = new boolean[qualityScores.length];
-
-        final int alStart = samRecord.getAlignmentStart();
-        // must be a mapped read at this point:
-        if (alStart == SAMRecord.NO_ALIGNMENT_START)
-            return;
-        referenceTracks.ensureRange(alStart, alSpan);
-
-        for (final BaseCategory baseCategory : preservationPolicy.baseCategories) {
-            int pos;
-            int refPos;
-            switch (baseCategory.type) {
-                case FLANKING_DELETION:
-                    pos = 0;
-                    for (final CigarElement cigarElement : samRecord.getCigar().getCigarElements()) {
-                        if (cigarElement.getOperator() == CigarOperator.D) {
-                            // if (pos > 0)
-                            mask[pos] = true;
-                            if (pos + 1 < mask.length)
-                                mask[pos + 1] = true;
-                        }
-
-                        pos += cigarElement.getOperator().consumesReadBases() ? cigarElement
-                                .getLength() : 0;
-                    }
-                    break;
-                case MATCH:
-                case MISMATCH:
-                    pos = 0;
-                    refPos = samRecord.getAlignmentStart();
-                    for (final CigarElement cigarElement : samRecord.getCigar().getCigarElements()) {
-                        if (cigarElement.getOperator().consumesReadBases()) {
-                            for (int i = 0; i < cigarElement.getLength(); i++) {
-                                final boolean match = samRecord.getReadBases()[pos + i] == referenceTracks
-                                        .baseAt(refPos + i);
-                                mask[pos + i] = (baseCategory.type == BaseCategoryType.MATCH && match)
-                                        || (baseCategory.type == BaseCategoryType.MISMATCH && !match);
-                            }
-                            pos += cigarElement.getLength();
-                        }
-                        refPos += cigarElement.getOperator().consumesReferenceBases() ? cigarElement
-                                .getLength() : 0;
-                    }
-                    break;
-                case INSERTION:
-                    pos = 0;
-                    for (final CigarElement cigarElement : samRecord.getCigar().getCigarElements()) {
-                        switch (cigarElement.getOperator()) {
-                            case I:
-                                for (int i = 0; i < cigarElement.getLength(); i++)
-                                    mask[pos + i] = true;
-                                break;
-                            default:
-                                break;
-                        }
-
-                        pos += cigarElement.getOperator().consumesReadBases() ? cigarElement
-                                .getLength() : 0;
-                    }
-                    break;
-                case LOWER_COVERAGE:
-                    pos = 1;
-                    refPos = samRecord.getAlignmentStart();
-                    for (final CigarElement cigarElement : samRecord.getCigar().getCigarElements()) {
-                        switch (cigarElement.getOperator()) {
-                            case M:
-                            case EQ:
-                            case X:
-                                for (int i = 0; i < cigarElement.getLength(); i++)
-                                    mask[pos + i - 1] = referenceTracks.coverageAt(refPos + i) < baseCategory.param;
-                                break;
-                            default:
-                                break;
-                        }
-
-                        pos += cigarElement.getOperator().consumesReadBases() ? cigarElement
-                                .getLength() : 0;
-                        refPos += cigarElement.getOperator().consumesReferenceBases() ? cigarElement
-                                .getLength() : 0;
-                    }
-                    break;
-                case PILEUP:
-                    for (int i = 0; i < qualityScores.length; i++)
-                        if (referenceTracks.mismatchesAt(alStart + i) > baseCategory.param)
-                            mask[i] = true;
-                    break;
-
-                default:
-                    break;
-            }
-
-        }
-
-        int maskedCount = 0;
-        for (int i = 0; i < mask.length; i++)
-            if (mask[i]) {
-                scores[i] = applyTreatment(qualityScores[i], preservationPolicy.treatment);
-                maskedCount++;
-            }
-
-        // safety latch, store all qs if there are too many individual score
-        // to store:
-        if (maskedCount > samRecord.getReadLength() / 2)
-            cramRecord.setForcePreserveQualityScores(true);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatment.java b/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatment.java
deleted file mode 100644
index 6f9a7e3..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatment.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public class QualityScoreTreatment {
-    public final QualityScoreTreatmentType type;
-    public final int param;
-
-    private QualityScoreTreatment(final QualityScoreTreatmentType type, final int param) {
-        this.type = type;
-        this.param = param;
-    }
-
-    public static QualityScoreTreatment preserve() {
-        return new QualityScoreTreatment(
-                QualityScoreTreatmentType.PRESERVE, 40);
-    }
-
-    public static QualityScoreTreatment drop() {
-        return new QualityScoreTreatment(QualityScoreTreatmentType.DROP, 40);
-    }
-
-    public static QualityScoreTreatment bin(final int bins) {
-        return new QualityScoreTreatment(QualityScoreTreatmentType.BIN,
-                bins);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("[%s%d]", type.name(), param);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatmentType.java b/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatmentType.java
deleted file mode 100644
index dfb61dc..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/QualityScoreTreatmentType.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public enum QualityScoreTreatmentType {
-    PRESERVE, BIN, DROP
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/ReadCategory.java b/src/main/java/htsjdk/samtools/cram/lossy/ReadCategory.java
deleted file mode 100644
index 14a41b3..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/ReadCategory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public class ReadCategory {
-    public final ReadCategoryType type;
-    public final int param;
-
-    private ReadCategory(final ReadCategoryType type, final int param) {
-        this.type = type;
-        this.param = param;
-    }
-
-    public static ReadCategory unplaced() {
-        return new ReadCategory(ReadCategoryType.UNPLACED, -1);
-    }
-
-    public static ReadCategory higher_than_mapping_score(final int score) {
-        return new ReadCategory(ReadCategoryType.HIGHER_MAPPING_SCORE,
-                score);
-    }
-
-    public static ReadCategory lower_than_mapping_score(final int score) {
-        return new ReadCategory(ReadCategoryType.LOWER_MAPPING_SCORE, score);
-    }
-
-    public static ReadCategory all() {
-        return new ReadCategory(ReadCategoryType.ALL, -1);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("[%s%d]", type.name(), param);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/lossy/ReadCategoryType.java b/src/main/java/htsjdk/samtools/cram/lossy/ReadCategoryType.java
deleted file mode 100644
index 7924550..0000000
--- a/src/main/java/htsjdk/samtools/cram/lossy/ReadCategoryType.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.lossy;
-
-public enum ReadCategoryType {
-    UNPLACED('P'), HIGHER_MAPPING_SCORE('M'), LOWER_MAPPING_SCORE('m'), ALL('*');
-
-    @SuppressWarnings("FieldCanBeLocal")
-    private final char code;
-
-    ReadCategoryType(final char code) {
-        this.code = code;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/CRAMReferenceSource.java b/src/main/java/htsjdk/samtools/cram/ref/CRAMReferenceSource.java
deleted file mode 100644
index c77aaae..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/CRAMReferenceSource.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package htsjdk.samtools.cram.ref;
-
-import htsjdk.samtools.SAMSequenceRecord;
-
-/**
- * Interface used to supply a reference source when reading CRAM files.
- */
-public interface CRAMReferenceSource {
-
-    /**
-     * getReferenceBases
-     * @param sequenceRecord the SAMSequenceRecord identifying the reference
-     *                       being requested
-     * @param tryNameVariants if true, attempt to match the requested sequence name
-     *                        against the reference by using common name variations,
-     *                        such as adding or removing a leading "chr" prefix
-     *                        from the requested name. if false, use exact match
-     * @return the upper cased, normalized (see {@link htsjdk.samtools.cram.build.Utils#normalizeBase})
-     * bases representing the requested sequence, or null if the sequence cannot be found
-     */
-    byte[] getReferenceBases(final SAMSequenceRecord sequenceRecord, final boolean tryNameVariants);
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/EnaRefService.java b/src/main/java/htsjdk/samtools/cram/ref/EnaRefService.java
deleted file mode 100644
index 4d99d1e..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/EnaRefService.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package htsjdk.samtools.cram.ref;
-
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.util.Log;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class EnaRefService {
-    private static final Log log = Log.getInstance(EnaRefService.class);
-    private static final int HTTP_OK = 200;
-    private static final int HTTP_FOUND = 302;
-    private static final int HTTP_NOT_FOUND = 404;
-    private static final int HTTP_INTERNAL_SEVER_PROBLEM = 500;
-    private static final int HTTP_CONNECTION_TIMEOUT = 522;
-
-    byte[] getSequence(final String md5) throws GaveUpException {
-        final int restBetweenTries_ms = 0;
-        final int maxTries = 1;
-        final int timeout_ms = 0;
-        return getSequence(md5, timeout_ms, maxTries, restBetweenTries_ms);
-    }
-
-    /**
-     * Tries to download sequence bases using its md5 checksum. This method can
-     * try downloading the sequence many times before giving up.
-     *
-     * @param md5                 MD5 checksum string of the sequence to download
-     * @param timeoutMs          timeout in milliseconds before failing with the {@link EnaRefService.GaveUpException}
-     * @param maxTries            maximum number of tries before failing with the {@link EnaRefService.GaveUpException}
-     * @param restBetweenTriesMs wait this number of milliseconds before repeating attempt
-     * @return sequence bases or null if there is no sequence with such md5
-     * @throws GaveUpException if the sequence could not be downloaded within the time/try
-     *                         limit.
-     */
-    byte[] getSequence(final String md5, final long timeoutMs, int maxTries, final long restBetweenTriesMs) throws
-            GaveUpException {
-        if (md5 == null)
-            throw new NullPointerException("Expecting sequence md5 but got null.");
-        if (!md5.matches("[a-z0-9]{32}"))
-            throw new RuntimeException("Does not look like an md5 checksum: " + md5);
-
-        final String httpEbiString = "http://www.ebi.ac.uk/ena/cram/md5/%s";
-        final String urlString = String.format(httpEbiString, md5);
-        final URL url;
-        try {
-            url = new URL(urlString);
-        } catch (final MalformedURLException e) {
-            throw new RuntimeException("Invalid sequence url: " + urlString, e);
-        }
-
-        InputStream inputStream = null;
-        final long startTime = System.currentTimeMillis();
-        do {
-            try {
-                final HttpURLConnection http = (HttpURLConnection) url.openConnection();
-                final int readTimeoutMs = 0;
-                http.setReadTimeout(readTimeoutMs);
-                final int code = http.getResponseCode();
-                switch (code) {
-                    case HTTP_OK:
-                        inputStream = http.getInputStream();
-                        if (inputStream == null)
-                            throw new RuntimeException("Failed to download sequence for md5: " + md5);
-
-                        log.info("Downloading reference sequence: " + urlString);
-                        final byte[] bases = InputStreamUtils.readFully(inputStream);
-                        log.info("Downloaded " + bases.length + " bases.");
-                        return bases;
-                    case HTTP_NOT_FOUND:
-                        return null;
-                    case HTTP_CONNECTION_TIMEOUT:
-                    case HTTP_INTERNAL_SEVER_PROBLEM:
-                        break;
-                    default:
-                        throw new RuntimeException("Unknown http status code: " + code);
-                }
-
-                if (startTime - System.currentTimeMillis() < timeoutMs && maxTries > 1 && restBetweenTriesMs > 0)
-                    try {
-                        Thread.sleep(restBetweenTriesMs);
-                    } catch (final InterruptedException e) {
-                        throw new RuntimeException(e);
-                    }
-
-            } catch (final IOException e) {
-                log.error("Connection attempt failed: " + e.getMessage());
-            } finally {
-                if (inputStream != null) {
-                    try {
-                        inputStream.close();
-                    } catch (final Exception e) {
-                        log.error(e.getMessage());
-                    }
-                }
-            }
-
-        } while (startTime - System.currentTimeMillis() < timeoutMs && --maxTries > 0);
-
-        throw new GaveUpException(md5);
-    }
-
-    public static class GaveUpException extends Exception {
-        private static final long serialVersionUID = -8997576068346912410L;
-        private String md5;
-
-        public GaveUpException(final String md5) {
-            this.setMd5(md5);
-        }
-
-        public String getMd5() {
-            return md5;
-        }
-
-        public void setMd5(final String md5) {
-            this.md5 = md5;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/InMemoryReferenceSequenceFile.java b/src/main/java/htsjdk/samtools/cram/ref/InMemoryReferenceSequenceFile.java
deleted file mode 100644
index 34bfc19..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/InMemoryReferenceSequenceFile.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.ref;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-class InMemoryReferenceSequenceFile implements ReferenceSequenceFile {
-    private Map<Integer, byte[]> sequences = new HashMap<Integer, byte[]>();
-    private SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-    private int currentIndex = 0;
-
-    public void addSequence(final String name, final byte[] bases) {
-        final SAMSequenceRecord r = new SAMSequenceRecord(name, bases.length);
-        dictionary.addSequence(r);
-        final int index = getSequenceDictionary().getSequenceIndex(name);
-        sequences.put(index, bases);
-    }
-
-    @Override
-    public ReferenceSequence getSequence(final String name) {
-        final int index = getSequenceDictionary().getSequenceIndex(name);
-        return new ReferenceSequence(name, index, sequences.get(index));
-    }
-
-    @Override
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return dictionary;
-    }
-
-    @Override
-    public ReferenceSequence getSubsequenceAt(final String name, final long start, final long stop) {
-        final int index = getSequenceDictionary().getSequenceIndex(name);
-        final byte[] bases = Arrays.copyOfRange(sequences.get(index), (int) start,
-                (int) stop + 1);
-        return new ReferenceSequence(name, index, bases);
-    }
-
-    @Override
-    public void close() throws IOException {
-        sequences = null;
-        dictionary = null;
-    }
-
-    /**
-     * Returns a new object representing the requested region on the reference sequence.
-     * @param name name of the reference sequence
-     * @param start inclusive starting position on the reference sequence
-     * @param stop  inclusive end position on the reference sequence
-     * @return a new region object
-     */
-    public ReferenceRegion getRegion(final String name, final long start, final long stop) {
-        final int index = getSequenceDictionary().getSequenceIndex(name);
-        if (!sequences.containsKey(index))
-            throw new RuntimeException("Sequence not found: " + name);
-
-        return new ReferenceRegion(sequences.get(index),
-                index, name, start, stop);
-    }
-
-    @Override
-    public boolean isIndexed() {
-        return true;
-    }
-
-    @Override
-    public ReferenceSequence nextSequence() {
-        if (currentIndex >= dictionary.size())
-            return null;
-
-        final SAMSequenceRecord sequence = dictionary.getSequence(currentIndex++);
-        return getSequence(sequence.getSequenceName());
-    }
-
-    @Override
-    public void reset() {
-        currentIndex = 0;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/ReferenceRegion.java b/src/main/java/htsjdk/samtools/cram/ref/ReferenceRegion.java
deleted file mode 100644
index 14799d2..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/ReferenceRegion.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.ref;
-
-import java.util.Arrays;
-
-/**
- * A class representing a region on a reference sequence.
- */
-class ReferenceRegion {
-    private final int index;
-    private final String name;
-    private long alignmentStart;
-    private int arrayStart;
-    private final byte[] array;
-
-    /**
-     * Construct reference sequence region with the given bases.
-     * @param bases the bases for the sequence
-     * @param sequenceIndex index in the {@link htsjdk.samtools.SAMSequenceDictionary}
-     * @param sequenceName name of the reference sequence
-     * @param alignmentStart 1-based inclusive position of the region start on the reference sequence
-     * @param alignmentEnd   1-based inclusive position of the region end on the reference sequence
-     */
-    public ReferenceRegion(final byte[] bases, final int sequenceIndex,
-                           final String sequenceName, final long alignmentStart, long alignmentEnd) {
-        this.array = bases;
-        this.index = sequenceIndex;
-        this.name = sequenceName;
-
-        if (alignmentEnd == -1)
-            alignmentEnd = bases.length;
-
-        if (alignmentStart < 1 || alignmentEnd < alignmentStart
-                || alignmentEnd - alignmentStart > bases.length
-                || alignmentEnd - 1 > bases.length)
-            throw new IllegalArgumentException(String.format(
-                    "Invalid reference region: %s, %d, %d.", sequenceName,
-                    alignmentStart, alignmentEnd));
-
-        this.alignmentStart = alignmentStart;
-
-        this.arrayStart = (int) (alignmentStart - 1);
-    }
-
-    int arrayPosition(final long alignmentPosition) {
-        final int arrayPosition = (int) (arrayStart + (alignmentPosition - alignmentStart));
-
-        if (arrayPosition < 0 || arrayPosition > array.length)
-            throw new IllegalArgumentException(
-                    "The alignment position is out of the region: "
-                            + alignmentPosition);
-
-        return arrayPosition;
-    }
-
-    public byte base(final long alignmentPosition) {
-        return array[arrayPosition(alignmentPosition)];
-    }
-
-    public byte[] copy(final long alignmentStart, final int alignmentSpan) {
-        final int from = arrayPosition(alignmentStart);
-        final int to = arrayPosition(alignmentStart + alignmentSpan);
-        return Arrays.copyOfRange(array, from, to);
-    }
-
-    public int getIndex() {
-        return index;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public long getAlignmentStart() {
-        return alignmentStart;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/ReferenceSource.java b/src/main/java/htsjdk/samtools/cram/ref/ReferenceSource.java
deleted file mode 100644
index e73fb41..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/ReferenceSource.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.ref;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.cram.build.Utils;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.ref.WeakReference;
-import java.net.URL;
-import java.nio.file.Path;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * Used to represent a CRAM reference, the backing source for which can either be
- * a file or the EBI ENA reference service.
- *
- * NOTE: In a future release, this class will be renamed and the functionality it
- * contains will be refactored and distributed into one or more separate reference
- * source implementations, each corresponding to the type of resource backing the
- * reference.
- */
-public class ReferenceSource implements CRAMReferenceSource {
-    private static final Log log = Log.getInstance(ReferenceSource.class);
-    private ReferenceSequenceFile rsFile;
-    private int downloadTriesBeforeFailing = 2;
-
-    private final Map<String, WeakReference<byte[]>> cacheW = new HashMap<String, WeakReference<byte[]>>();
-
-    private ReferenceSource() {
-    }
-
-    public ReferenceSource(final File file) {
-        this(file == null ? null : file.toPath());
-    }
-
-    public ReferenceSource(final Path path) {
-        if (path != null)
-            rsFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(path);
-    }
-
-    public ReferenceSource(final ReferenceSequenceFile rsFile) {
-        this.rsFile = rsFile;
-    }
-
-    /**
-     * Attempts to construct a default CRAMReferenceSource for use with CRAM files when
-     * one has not been explicitly provided.
-     *
-     * @return CRAMReferenceSource if one can be acquired. Guaranteed to not be null if none
-     * of the listed exceptions is thrown.
-     * @throws IllegalStateException if no default reference source can be acquired
-     * @throws IllegalArgumentException if the reference_fasta environment variable refers to a
-     * a file that doesn't exist
-     *<p>
-     * Construct a default reference source to use when an explicit reference has not been
-     * provided by checking for fallback sources in this order:
-     *<p><ul>
-     * <li>Defaults.REFERENCE_FASTA - the value of the system property "reference_fasta". If set,
-     * must refer to a valid reference file.</li>
-     * <li>ENA Reference Service if it is enabled</li>
-     * </ul>
-     */
-     public static CRAMReferenceSource getDefaultCRAMReferenceSource() {
-        if (null != Defaults.REFERENCE_FASTA) {
-            if (Defaults.REFERENCE_FASTA.exists()) {
-                return new ReferenceSource(Defaults.REFERENCE_FASTA);
-            }
-            else {
-                throw new IllegalArgumentException(
-                        "The file specified by the reference_fasta property does not exist: " + Defaults.REFERENCE_FASTA.getName());
-            }
-        }
-        else if (Defaults.USE_CRAM_REF_DOWNLOAD) {
-            return new ReferenceSource();
-        }
-        else {
-            throw new IllegalStateException(
-                    "A valid CRAM reference was not supplied and one cannot be acquired via the property settings reference_fasta or use_cram_ref_download");
-        }
-    }
-
-    public void clearCache() {
-        cacheW.clear();
-    }
-
-    private byte[] findInCache(final String name) {
-        final WeakReference<byte[]> weakReference = cacheW.get(name);
-        if (weakReference != null) {
-            final byte[] bytes = weakReference.get();
-            if (bytes != null)
-                return bytes;
-        }
-        return null;
-    }
-
-    // Upper case and normalize (-> ACGTN) in-place, and add to the cache
-    private byte[] addToCache(final String sequenceName, final byte[] bases) {
-        for (int i = 0; i < bases.length; i++) {
-            bases[i] = Utils.normalizeBase(bases[i]);
-        }
-        cacheW.put(sequenceName, new WeakReference<byte[]>(bases));
-        return bases;
-    }
-
-    public synchronized byte[] getReferenceBases(final SAMSequenceRecord record,
-                                                 final boolean tryNameVariants) {
-        { // check cache by sequence name:
-            final String name = record.getSequenceName();
-            final byte[] bases = findInCache(name);
-            if (bases != null) {
-                return bases;
-            }
-        }
-
-        final String md5 = record.getAttribute(SAMSequenceRecord.MD5_TAG);
-        { // check cache by md5:
-            if (md5 != null) {
-                byte[] bases = findInCache(md5);
-                if (bases != null)
-                    return bases;
-                bases = findInCache(md5.toLowerCase());
-                if (bases != null)
-                    return bases;
-                bases = findInCache(md5.toUpperCase());
-                if (bases != null)
-                    return bases;
-            }
-        }
-
-        byte[] bases;
-
-        { // try to fetch sequence by name:
-            bases = findBasesByName(record.getSequenceName(), tryNameVariants);
-            if (bases != null) {
-                return addToCache(record.getSequenceName(), bases);
-            }
-        }
-
-        {
-            if (Defaults.USE_CRAM_REF_DOWNLOAD) { // try to fetch sequence by md5:
-                if (md5 != null) {
-                    try {
-                        bases = findBasesByMD5(md5.toLowerCase());
-                    } catch (final Exception e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-                if (bases != null) {
-                    return addToCache(md5, bases);
-                }
-            }
-        }
-
-        // sequence not found, give up:
-        return null;
-    }
-
-    byte[] findBasesByName(final String name, final boolean tryVariants) {
-        if (rsFile == null || !rsFile.isIndexed())
-            return null;
-
-        ReferenceSequence sequence = null;
-        try {
-            sequence = rsFile.getSequence(name);
-        } catch (final SAMException e) {
-            // the only way to test if rsFile contains the sequence is to try and catch exception.
-        }
-        if (sequence != null)
-            return sequence.getBases();
-
-        if (tryVariants) {
-            for (final String variant : getVariants(name)) {
-                try {
-                    sequence = rsFile.getSequence(variant);
-                } catch (final SAMException e) {
-                    log.warn("Sequence not found: " + variant);
-                }
-                if (sequence != null)
-                    return sequence.getBases();
-            }
-        }
-        return null;
-    }
-
-    byte[] findBasesByMD5(final String md5) throws
-            IOException {
-        final String url = String.format(Defaults.EBI_REFERENCE_SERVICE_URL_MASK, md5);
-
-        for (int i = 0; i < downloadTriesBeforeFailing; i++) {
-            final InputStream is = new URL(url).openStream();
-            if (is == null)
-                return null;
-
-            log.debug("Downloading reference sequence: " + url);
-            final byte[] data = InputStreamUtils.readFully(is);
-            log.debug("Downloaded " + data.length + " bytes for md5 " + md5);
-            is.close();
-
-            try {
-                final String downloadedMD5 = SequenceUtil.calculateMD5String(data);
-                if (md5.equals(downloadedMD5)) {
-                    return data;
-                } else {
-                    final String message = String
-                            .format("Downloaded sequence is corrupt: requested md5=%s, received md5=%s",
-                                    md5, downloadedMD5);
-                    log.error(message);
-                }
-            } catch (final NoSuchAlgorithmException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        throw new RuntimeException("Giving up on downloading sequence for md5 "
-                + md5);
-    }
-
-    private static final Pattern chrPattern = Pattern.compile("chr.*",
-            Pattern.CASE_INSENSITIVE);
-
-    List<String> getVariants(final String name) {
-        final List<String> variants = new ArrayList<String>();
-
-        if (name.equals("M"))
-            variants.add("MT");
-
-        if (name.equals("MT"))
-            variants.add("M");
-
-        final boolean chrPatternMatch = chrPattern.matcher(name).matches();
-        if (chrPatternMatch)
-            variants.add(name.substring(3));
-        else
-            variants.add("chr" + name);
-
-        if ("chrM".equals(name)) {
-            // chrM case:
-            variants.add("MT");
-        }
-        return variants;
-    }
-
-    public int getDownloadTriesBeforeFailing() {
-        return downloadTriesBeforeFailing;
-    }
-
-    public void setDownloadTriesBeforeFailing(final int downloadTriesBeforeFailing) {
-        this.downloadTriesBeforeFailing = downloadTriesBeforeFailing;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/ref/ReferenceTracks.java b/src/main/java/htsjdk/samtools/cram/ref/ReferenceTracks.java
deleted file mode 100644
index f81faed..0000000
--- a/src/main/java/htsjdk/samtools/cram/ref/ReferenceTracks.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.ref;
-
-import java.util.Arrays;
-
-public class ReferenceTracks {
-    public static final int DEFAULT_WINDOW_SIZE = 1000000;
-    private final int sequenceId;
-    private final String sequenceName;
-    private final byte[] reference;
-
-    private int position;
-
-    // a copy of ref bases for the given range:
-    private final byte[] bases;
-    private final short[] coverage;
-    private final short[] mismatches;
-
-
-    public ReferenceTracks(final int sequenceId, final String sequenceName,
-                           final byte[] reference) {
-        this(sequenceId, sequenceName, reference, DEFAULT_WINDOW_SIZE);
-    }
-
-    private ReferenceTracks(final int sequenceId, final String sequenceName,
-                            final byte[] reference, final int windowSize) {
-        this.sequenceId = sequenceId;
-        this.sequenceName = sequenceName;
-        this.reference = reference;
-
-        bases = new byte[Math.min(windowSize, reference.length)];
-        coverage = new short[Math.min(windowSize, reference.length)];
-        mismatches = new short[Math.min(windowSize, reference.length)];
-        position = 1;
-
-        reset();
-    }
-
-    public int getSequenceId() {
-        return sequenceId;
-    }
-
-    public String getSequenceName() {
-        return sequenceName;
-    }
-
-    public int getWindowPosition() {
-        return position;
-    }
-
-    public int getWindowLength() {
-        return bases.length;
-    }
-
-    public int getReferenceLength() {
-        return reference.length;
-    }
-
-    public void ensure(final int start, final int end) {
-        if (end - start > bases.length)
-            throw new RuntimeException("Window is too small for start " + start
-                    + " end " + end);
-        if (position < start)
-            moveForwardTo(start);
-    }
-
-    /**
-     * Shift the window forward to a new position on the reference.
-     *
-     * @param newPos 1-based reference coordinate, must be greater than current
-     *               position and smaller than reference length.
-     */
-    void moveForwardTo(int newPos) {
-        if (newPos - 1 >= reference.length)
-            throw new RuntimeException("New position is beyond the reference: "
-                    + newPos);
-
-        if (newPos < position)
-            throw new RuntimeException(
-                    "Cannot shift to smaller position on the reference.");
-
-        if (newPos > reference.length - bases.length + 1)
-            newPos = reference.length - bases.length + 1;
-
-        if (newPos == position)
-            return;
-
-        System.arraycopy(reference, newPos - 1, bases, 0,
-                Math.min(bases.length, reference.length - newPos + 1));
-
-        if (newPos > position && position + bases.length - newPos > 0) {
-            for (int i = 0; i < coverage.length; i++) {
-                if (i + newPos - position < coverage.length) {
-                    coverage[i] = coverage[i + newPos - position];
-                    mismatches[i] = mismatches[i + newPos - position];
-                } else {
-                    coverage[i] = 0;
-                    mismatches[i] = 0;
-                }
-            }
-        } else {
-            Arrays.fill(coverage, (short) 0);
-            Arrays.fill(mismatches, (short) 0);
-        }
-
-        this.position = newPos;
-    }
-
-    void reset() {
-        System.arraycopy(reference, position - 1, bases, 0,
-                Math.min(bases.length, reference.length - position + 1));
-        Arrays.fill(coverage, (short) 0);
-        Arrays.fill(mismatches, (short) 0);
-    }
-
-    public void ensureRange(final int start, final int length) {
-        if (start < position)
-            throw new RuntimeException("Cannot move the window backwards: "
-                    + start);
-
-        if (start > position || start + length > position + bases.length)
-            moveForwardTo(start);
-    }
-
-    public final byte baseAt(final int pos) {
-        if (pos - this.position < coverage.length)
-            return bases[pos - this.position];
-        else
-            return 'N';
-    }
-
-    public final short coverageAt(final int pos) {
-        if (pos - this.position >= coverage.length)
-            return 0;
-        else {
-            return coverage[pos - this.position];
-        }
-    }
-
-    public final short mismatchesAt(final int pos) {
-        if (pos - this.position >= coverage.length)
-            return 0;
-        else
-            return mismatches[pos - this.position];
-    }
-
-    public final void addCoverage(final int pos, final int amount) {
-        if (pos - this.position < coverage.length)
-            coverage[pos - this.position] += amount;
-    }
-
-    public final void addMismatches(final int pos, final int amount) {
-        if (pos - this.position < coverage.length)
-            mismatches[pos - this.position] += amount;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/AlignmentSpan.java b/src/main/java/htsjdk/samtools/cram/structure/AlignmentSpan.java
deleted file mode 100644
index 6e18dd2..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/AlignmentSpan.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * A span of reads on a single reference.
- */
-public class AlignmentSpan {
-    /**
-     * A constant to represent an unmapped span.
-     */
-    public static final AlignmentSpan UNMAPPED_SPAN = new AlignmentSpan(SAMRecord.NO_ALIGNMENT_START, 0);
-
-    private int start;
-    private int span;
-    private int count;
-
-    /**
-     * Create a new span with a single read in it.
-     *
-     * @param start alignment start of the span
-     * @param span  alignment span
-     */
-    public AlignmentSpan(final int start, final int span) {
-        this.setStart(start);
-        this.setSpan(span);
-        this.count = 1;
-    }
-
-    /**
-     * Create a new span with a multiple reads in it.
-     *
-     * @param start alignment start of the span
-     * @param span  alignment span
-     * @param count number of reads in the span
-     */
-    public AlignmentSpan(final int start, final int span, final int count) {
-        this.setStart(start);
-        this.setSpan(span);
-        this.count = count;
-    }
-
-    /**
-     * Add multiple reads to the span.
-     *
-     * @param start alignment start
-     * @param span  alignment span
-     * @param count number of reads to add
-     */
-    public void add(final int start, final int span, final int count) {
-        if (this.getStart() > start) {
-            this.setSpan(Math.max(this.getStart() + this.getSpan(), start + span) - start);
-            this.setStart(start);
-        } else if (this.getStart() < start) {
-            this.setSpan(Math.max(this.getStart() + this.getSpan(), start + span) - this.getStart());
-        } else {
-            this.setSpan(Math.max(this.getSpan(), span));
-        }
-
-        this.count += count;
-    }
-
-    /**
-     * Add a single read to the span
-     *
-     * @param start alignment start
-     * @param span  read span on the reference
-     */
-    public void addSingle(final int start, final int span) {
-        add(start, span, 1);
-    }
-
-    public int getStart() {
-        return start;
-    }
-
-    public void setStart(final int start) {
-        this.start = start;
-    }
-
-    public int getSpan() {
-        return span;
-    }
-
-    public void setSpan(final int span) {
-        this.span = span;
-    }
-
-    public int getCount() {
-        return count;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/Block.java b/src/main/java/htsjdk/samtools/cram/structure/Block.java
deleted file mode 100644
index 2e99b8a..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/Block.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.io.CRC32InputStream;
-import htsjdk.samtools.cram.io.CRC32OutputStream;
-import htsjdk.samtools.cram.io.CramInt;
-import htsjdk.samtools.cram.io.ExternalCompression;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-/**
- * Class representing CRAM block concept and some methods to operate with block content. CRAM block is used to hold some (usually
- * homogeneous) binary data. An external compression can be applied to the content of a block. The class provides some instantiation static
- * methods, for example to read a block from an input stream. Blocks can be written out to an output stream, this may be considered as a way
- * to serialize/deserialize blocks.
- */
-public class Block {
-    /**
-     * Compression method that applied to this block's content.
-     */
-    private BlockCompressionMethod method;
-    /**
-     * Identifies CRAM content type of the block.
-     */
-    private BlockContentType contentType;
-    /**
-     * A handle to bind the block with it's metadata.
-     */
-    private int contentId;
-    /**
-     * The size of the compressed content in bytes.
-     */
-    private int compressedContentSize;
-    /**
-     * The size of the uncompressed content in bytes.
-     */
-    private int rawContentSize;
-
-    /**
-     * Uncompressed and compressed contents respectively.
-     */
-    private byte[] rawContent, compressedContent;
-
-    public Block() {
-    }
-
-    /**
-     * Deserialize the block from the {@link InputStream}. The reading is parametrized by the major CRAM version number.
-     *
-     * @param major CRAM version major number
-     * @param inputStream    input stream to read the block from
-     * @return a new {@link Block} object with fields and content from the input stream
-     * @throws IOException as per java IO contract
-     */
-    public static Block readFromInputStream(final int major, InputStream inputStream) throws IOException {
-        final Block block = new Block();
-        final boolean v3OrHigher = major >= CramVersions.CRAM_v3.major;
-        if (v3OrHigher) inputStream = new CRC32InputStream(inputStream);
-        block.setMethod(BlockCompressionMethod.values()[inputStream.read()]);
-
-        final int contentTypeId = inputStream.read();
-        block.setContentType(BlockContentType.values()[contentTypeId]);
-
-        block.setContentId(ITF8.readUnsignedITF8(inputStream));
-        block.compressedContentSize = ITF8.readUnsignedITF8(inputStream);
-        block.rawContentSize = ITF8.readUnsignedITF8(inputStream);
-
-        block.compressedContent = new byte[block.compressedContentSize];
-        InputStreamUtils.readFully(inputStream, block.compressedContent, 0, block.compressedContent.length);
-        if (v3OrHigher) {
-            final int actualChecksum = ((CRC32InputStream) inputStream).getCRC32();
-            final int checksum = CramInt.int32(inputStream);
-            if (checksum != actualChecksum)
-                throw new RuntimeException(String.format("Block CRC32 mismatch: %04x vs %04x", checksum, actualChecksum));
-        }
-
-        block.uncompress();
-        return block;
-    }
-
-    /**
-     * Create a new slice header block with the given uncompressed content. The block wil have RAW (no compression) and MAPPED_SLICE content
-     * type.
-     *
-     * @param rawContent the content of the block
-     * @return a new mapped slice {@link Block} object
-     */
-    public static Block buildNewSliceHeaderBlock(final byte[] rawContent) {
-        return new Block(BlockContentType.MAPPED_SLICE, rawContent);
-    }
-
-    /**
-     * Create a new core block with the given uncompressed content. The block wil have RAW (no compression) and CORE content type.
-     *
-     * @param rawContent the content of the block
-     * @return a new core {@link Block} object
-     */
-    public static Block buildNewCore(final byte[] rawContent) {
-        return new Block(BlockContentType.CORE, rawContent);
-    }
-
-    /**
-     * Create a new core block with the given uncompressed content. The block wil have RAW (no compression) and CORE content type.
-     *
-     * @param rawContent the content of the block
-     * @return a new core {@link Block} object
-     */
-    public static Block buildNewFileHeaderBlock(final byte[] rawContent) {
-        final Block block = new Block(BlockContentType.FILE_HEADER, rawContent);
-        block.compress();
-        return block;
-    }
-
-    private Block(final BlockContentType contentType, final byte[] rawContent) {
-        this.setMethod(BlockCompressionMethod.RAW);
-        this.setContentType(contentType);
-        this.setContentId(0);
-        if (rawContent != null) setRawContent(rawContent);
-    }
-
-    @Override
-    public String toString() {
-        final String raw = rawContent == null ? "NULL" : Arrays.toString(Arrays.copyOf(rawContent, Math.min(5, rawContent.length)));
-        final String comp = compressedContent == null ? "NULL" : Arrays.toString(Arrays.copyOf(compressedContent, Math.min(5,
-                compressedContent.length)));
-
-        return String.format("method=%s, type=%s, id=%d, raw size=%d, compressed size=%d, raw=%s, comp=%s.", getMethod().name(),
-                getContentType().name(), getContentId(), rawContentSize, compressedContentSize, raw, comp);
-    }
-
-    boolean isCompressed() {
-        return compressedContent != null;
-    }
-
-    boolean isUncompressed() {
-        return rawContent != null;
-    }
-
-    public void setRawContent(final byte[] raw) {
-        rawContent = raw;
-        rawContentSize = raw == null ? 0 : raw.length;
-
-        compressedContent = null;
-        compressedContentSize = 0;
-    }
-
-    public byte[] getRawContent() {
-        if (rawContent == null) uncompress();
-        return rawContent;
-    }
-
-    public int getRawContentSize() {
-        return rawContentSize;
-    }
-
-    public void setContent(final byte[] raw, final byte[] compressed) {
-        rawContent = raw;
-        compressedContent = compressed;
-
-        if (raw == null) rawContentSize = 0;
-        else rawContentSize = raw.length;
-
-        if (compressed == null) compressedContentSize = 0;
-        else compressedContentSize = compressed.length;
-    }
-
-    void setCompressedContent(final byte[] compressed) {
-        this.compressedContent = compressed;
-        compressedContentSize = compressed == null ? 0 : compressed.length;
-
-        rawContent = null;
-        rawContentSize = 0;
-    }
-
-    byte[] getCompressedContent() {
-        if (compressedContent == null) compress();
-        return compressedContent;
-    }
-
-    private void compress() {
-        if (compressedContent != null || rawContent == null) return;
-
-        switch (getMethod()) {
-            case RAW:
-                compressedContent = rawContent;
-                compressedContentSize = rawContentSize;
-                break;
-            case GZIP:
-                try {
-                    compressedContent = ExternalCompression.gzip(rawContent);
-                } catch (final IOException e) {
-                    throw new RuntimeException("This should have never happened.", e);
-                }
-                compressedContentSize = compressedContent.length;
-                break;
-            case RANS:
-                compressedContent = ExternalCompression.rans(rawContent, 1);
-                compressedContentSize = compressedContent.length;
-                break;
-            default:
-                break;
-        }
-    }
-
-    private void uncompress() {
-        if (rawContent != null || compressedContent == null) return;
-
-        switch (getMethod()) {
-            case RAW:
-                rawContent = compressedContent;
-                rawContentSize = compressedContentSize;
-                break;
-            case GZIP:
-                try {
-                    rawContent = ExternalCompression.gunzip(compressedContent);
-                } catch (final IOException e) {
-                    throw new RuntimeException("This should have never happened.", e);
-                }
-                break;
-            case BZIP2:
-                try {
-                    rawContent = ExternalCompression.unbzip2(compressedContent);
-                } catch (final IOException e) {
-                    throw new RuntimeException("This should have never happened.", e);
-                }
-                break;
-            case LZMA:
-                try {
-                    rawContent = ExternalCompression.unxz(compressedContent);
-                } catch (final IOException e) {
-                    throw new RuntimeException("This should have never happened.", e);
-                }
-                break;
-            case RANS:
-                rawContent = ExternalCompression.unrans(compressedContent);
-                break;
-            default:
-                throw new RuntimeException("Unknown block compression method: " + getMethod().name());
-        }
-    }
-
-    /**
-     * Write the block out to the the specified {@link OutputStream}. The method is parametrized with CRAM major version number.
-     *
-     * @param major CRAM version major number
-     * @param outputStream    output stream to write to
-     * @throws IOException as per java IO contract
-     */
-    public void write(final int major, final OutputStream outputStream) throws IOException {
-        if (major >= CramVersions.CRAM_v3.major) {
-
-            final CRC32OutputStream crc32OutputStream = new CRC32OutputStream(outputStream);
-
-            doWrite(crc32OutputStream);
-
-            outputStream.write(crc32OutputStream.getCrc32_LittleEndian());
-        } else doWrite(outputStream);
-    }
-
-    private void doWrite(final OutputStream outputStream) throws IOException {
-        if (!isCompressed()) compress();
-        if (!isUncompressed()) uncompress();
-
-        outputStream.write(getMethod().ordinal());
-        outputStream.write(getContentType().ordinal());
-
-        ITF8.writeUnsignedITF8(getContentId(), outputStream);
-        ITF8.writeUnsignedITF8(compressedContentSize, outputStream);
-        ITF8.writeUnsignedITF8(rawContentSize, outputStream);
-
-        outputStream.write(getCompressedContent());
-    }
-
-    BlockCompressionMethod getMethod() {
-        return method;
-    }
-
-    public void setMethod(final BlockCompressionMethod method) {
-        this.method = method;
-    }
-
-    public BlockContentType getContentType() {
-        return contentType;
-    }
-
-    public void setContentType(final BlockContentType contentType) {
-        this.contentType = contentType;
-    }
-
-    public int getContentId() {
-        return contentId;
-    }
-
-    public void setContentId(final int contentId) {
-        this.contentId = contentId;
-    }
-
-    public int getCompressedContentSize() {
-        return compressedContentSize;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/BlockCompressionMethod.java b/src/main/java/htsjdk/samtools/cram/structure/BlockCompressionMethod.java
deleted file mode 100644
index 918b3bd..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/BlockCompressionMethod.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-public enum BlockCompressionMethod {
-    RAW, GZIP, BZIP2, LZMA, RANS
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/BlockContentType.java b/src/main/java/htsjdk/samtools/cram/structure/BlockContentType.java
deleted file mode 100644
index e10b9f1..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/BlockContentType.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-public enum BlockContentType {
-    FILE_HEADER, COMPRESSION_HEADER, MAPPED_SLICE, RESERVED, EXTERNAL, CORE
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/CompressionHeader.java b/src/main/java/htsjdk/samtools/cram/structure/CompressionHeader.java
deleted file mode 100644
index 2278bf1..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/CompressionHeader.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.cram.encoding.ExternalCompressor;
-import htsjdk.samtools.cram.encoding.NullEncoding;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.util.Log;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class CompressionHeader {
-    private static final String RN_readNamesIncluded = "RN";
-    private static final String AP_alignmentPositionIsDelta = "AP";
-    private static final String RR_referenceRequired = "RR";
-    private static final String TD_tagIdsDictionary = "TD";
-    private static final String SM_substitutionMatrix = "SM";
-
-    private static final Log log = Log.getInstance(CompressionHeader.class);
-
-    public boolean readNamesIncluded;
-    public boolean APDelta = true;
-    private boolean referenceRequired = true;
-
-    public Map<EncodingKey, EncodingParams> encodingMap;
-    public Map<Integer, EncodingParams> tMap;
-    public final Map<Integer, ExternalCompressor> externalCompressors = new HashMap<Integer, ExternalCompressor>();
-
-    public SubstitutionMatrix substitutionMatrix;
-
-    public List<Integer> externalIds;
-
-    public byte[][][] dictionary;
-
-    public CompressionHeader() {
-    }
-
-    private CompressionHeader(final InputStream inputStream) throws IOException {
-        read(inputStream);
-    }
-
-    private byte[][][] parseDictionary(final byte[] bytes) {
-        final List<List<byte[]>> dictionary = new ArrayList<List<byte[]>>();
-        {
-            int i = 0;
-            while (i < bytes.length) {
-                final List<byte[]> list = new ArrayList<byte[]>();
-                while (bytes[i] != 0) {
-                    list.add(Arrays.copyOfRange(bytes, i, i + 3));
-                    i += 3;
-                }
-                i++;
-                dictionary.add(list);
-            }
-        }
-
-        int maxWidth = 0;
-        for (final List<byte[]> list : dictionary)
-            maxWidth = Math.max(maxWidth, list.size());
-
-        final byte[][][] array = new byte[dictionary.size()][][];
-        for (int i = 0; i < dictionary.size(); i++) {
-            final List<byte[]> list = dictionary.get(i);
-            array[i] = list.toArray(new byte[list.size()][]);
-        }
-
-        return array;
-    }
-
-    private byte[] dictionaryToByteArray() {
-        int size = 0;
-        for (final byte[][] dictionaryArrayArray : dictionary) {
-            for (final byte[] dictionaryArray : dictionaryArrayArray) size += dictionaryArray.length;
-            size++;
-        }
-
-        final byte[] bytes = new byte[size];
-        final ByteBuffer buffer = ByteBuffer.wrap(bytes);
-        for (final byte[][] dictionaryArrayArray : dictionary) {
-            for (final byte[] dictionaryArray : dictionaryArrayArray) buffer.put(dictionaryArray);
-            buffer.put((byte) 0);
-        }
-
-        return bytes;
-    }
-
-    public byte[][] getTagIds(final int id) {
-        return dictionary[id];
-    }
-
-    public void read(final byte[] data) {
-        try {
-            read(new ByteArrayInputStream(data));
-        } catch (final IOException e) {
-            throw new RuntimeException("This should have never happened.");
-        }
-    }
-
-    void read(final InputStream is) throws IOException {
-        { // preservation map:
-            final int byteSize = ITF8.readUnsignedITF8(is);
-            final byte[] bytes = new byte[byteSize];
-            InputStreamUtils.readFully(is, bytes, 0, bytes.length);
-            final ByteBuffer buffer = ByteBuffer.wrap(bytes);
-
-            final int mapSize = ITF8.readUnsignedITF8(buffer);
-            for (int i = 0; i < mapSize; i++) {
-                final String key = new String(new byte[]{buffer.get(), buffer.get()});
-                if (RN_readNamesIncluded.equals(key))
-                    readNamesIncluded = buffer.get() == 1;
-                else if (AP_alignmentPositionIsDelta.equals(key))
-                    APDelta = buffer.get() == 1;
-                else if (RR_referenceRequired.equals(key))
-                    referenceRequired = buffer.get() == 1;
-                else if (TD_tagIdsDictionary.equals(key)) {
-                    final int size = ITF8.readUnsignedITF8(buffer);
-                    final byte[] dictionaryBytes = new byte[size];
-                    buffer.get(dictionaryBytes);
-                    dictionary = parseDictionary(dictionaryBytes);
-                } else if (SM_substitutionMatrix.equals(key)) {
-                    // parse subs matrix here:
-                    final byte[] matrixBytes = new byte[5];
-                    buffer.get(matrixBytes);
-                    substitutionMatrix = new SubstitutionMatrix(matrixBytes);
-                } else
-                    throw new RuntimeException("Unknown preservation map key: "
-                            + key);
-            }
-        }
-
-        { // encoding map:
-            final int byteSize = ITF8.readUnsignedITF8(is);
-            final byte[] bytes = new byte[byteSize];
-            InputStreamUtils.readFully(is, bytes, 0, bytes.length);
-            final ByteBuffer buffer = ByteBuffer.wrap(bytes);
-
-            final int mapSize = ITF8.readUnsignedITF8(buffer);
-            encodingMap = new TreeMap<EncodingKey, EncodingParams>();
-            for (final EncodingKey encodingKey : EncodingKey.values())
-                encodingMap.put(encodingKey, NullEncoding.toParam());
-
-            for (int i = 0; i < mapSize; i++) {
-                final String key = new String(new byte[]{buffer.get(), buffer.get()});
-                final EncodingKey encodingKey = EncodingKey.byFirstTwoChars(key);
-                if (encodingKey == null) {
-                    throw new CRAMException("Unknown encoding key: " + key);
-                }
-
-                final EncodingID id = EncodingID.values()[buffer.get()];
-                final int paramLen = ITF8.readUnsignedITF8(buffer);
-                final byte[] paramBytes = new byte[paramLen];
-                buffer.get(paramBytes);
-
-                encodingMap.put(encodingKey, new EncodingParams(id, paramBytes));
-
-                log.debug(String.format("FOUND ENCODING: %s, %s, %s.",
-                        encodingKey.name(), id.name(),
-                        Arrays.toString(Arrays.copyOf(paramBytes, 20))));
-            }
-        }
-
-        { // tag encoding map:
-            final int byteSize = ITF8.readUnsignedITF8(is);
-            final byte[] bytes = new byte[byteSize];
-            InputStreamUtils.readFully(is, bytes, 0, bytes.length);
-            final ByteBuffer buf = ByteBuffer.wrap(bytes);
-
-            final int mapSize = ITF8.readUnsignedITF8(buf);
-            tMap = new TreeMap<Integer, EncodingParams>();
-            for (int i = 0; i < mapSize; i++) {
-                final int key = ITF8.readUnsignedITF8(buf);
-
-                final EncodingID id = EncodingID.values()[buf.get()];
-                final int paramLen = ITF8.readUnsignedITF8(buf);
-                final byte[] paramBytes = new byte[paramLen];
-                buf.get(paramBytes);
-
-                tMap.put(key, new EncodingParams(id, paramBytes));
-            }
-        }
-    }
-
-    public byte[] toByteArray() throws IOException {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        write(byteArrayOutputStream);
-        return byteArrayOutputStream.toByteArray();
-    }
-
-    void write(final OutputStream outputStream) throws IOException {
-
-        { // preservation map:
-            final ByteBuffer mapBuffer = ByteBuffer.allocate(1024 * 100);
-            ITF8.writeUnsignedITF8(5, mapBuffer);
-
-            mapBuffer.put(RN_readNamesIncluded.getBytes());
-            mapBuffer.put((byte) (readNamesIncluded ? 1 : 0));
-
-            mapBuffer.put(AP_alignmentPositionIsDelta.getBytes());
-            mapBuffer.put((byte) (APDelta ? 1 : 0));
-
-            mapBuffer.put(RR_referenceRequired.getBytes());
-            mapBuffer.put((byte) (referenceRequired ? 1 : 0));
-
-            mapBuffer.put(SM_substitutionMatrix.getBytes());
-            mapBuffer.put(substitutionMatrix.getEncodedMatrix());
-
-            mapBuffer.put(TD_tagIdsDictionary.getBytes());
-            {
-                final byte[] dictionaryBytes = dictionaryToByteArray();
-                ITF8.writeUnsignedITF8(dictionaryBytes.length, mapBuffer);
-                mapBuffer.put(dictionaryBytes);
-            }
-
-            mapBuffer.flip();
-            final byte[] mapBytes = new byte[mapBuffer.limit()];
-            mapBuffer.get(mapBytes);
-
-            ITF8.writeUnsignedITF8(mapBytes.length, outputStream);
-            outputStream.write(mapBytes);
-        }
-
-        { // encoding map:
-            int size = 0;
-            for (final EncodingKey encodingKey : encodingMap.keySet()) {
-                if (encodingMap.get(encodingKey).id != EncodingID.NULL)
-                    size++;
-            }
-
-            final ByteBuffer mapBuffer = ByteBuffer.allocate(1024 * 100);
-            ITF8.writeUnsignedITF8(size, mapBuffer);
-            for (final EncodingKey encodingKey : encodingMap.keySet()) {
-                if (encodingMap.get(encodingKey).id == EncodingID.NULL)
-                    continue;
-
-                mapBuffer.put((byte) encodingKey.name().charAt(0));
-                mapBuffer.put((byte) encodingKey.name().charAt(1));
-
-                final EncodingParams params = encodingMap.get(encodingKey);
-                mapBuffer.put((byte) (0xFF & params.id.ordinal()));
-                ITF8.writeUnsignedITF8(params.params.length, mapBuffer);
-                mapBuffer.put(params.params);
-            }
-            mapBuffer.flip();
-            final byte[] mapBytes = new byte[mapBuffer.limit()];
-            mapBuffer.get(mapBytes);
-
-            ITF8.writeUnsignedITF8(mapBytes.length, outputStream);
-            outputStream.write(mapBytes);
-        }
-
-        { // tag encoding map:
-            final ByteBuffer mapBuffer = ByteBuffer.allocate(1024 * 100);
-            ITF8.writeUnsignedITF8(tMap.size(), mapBuffer);
-            for (final Integer encodingKey : tMap.keySet()) {
-                ITF8.writeUnsignedITF8(encodingKey, mapBuffer);
-
-                final EncodingParams params = tMap.get(encodingKey);
-                mapBuffer.put((byte) (0xFF & params.id.ordinal()));
-                ITF8.writeUnsignedITF8(params.params.length, mapBuffer);
-                mapBuffer.put(params.params);
-            }
-            mapBuffer.flip();
-            final byte[] mapBytes = new byte[mapBuffer.limit()];
-            mapBuffer.get(mapBytes);
-
-            ITF8.writeUnsignedITF8(mapBytes.length, outputStream);
-            outputStream.write(mapBytes);
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/Container.java b/src/main/java/htsjdk/samtools/cram/structure/Container.java
deleted file mode 100644
index 2a4eb3b..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/Container.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMRecord;
-
-public class Container {
-    // container header as defined in the specs:
-    /**
-     * Byte size of the content excluding header.
-     */
-    public int containerByteSize;
-    public int sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-    public int alignmentStart = Slice.NO_ALIGNMENT_START;
-    public int alignmentSpan = Slice.NO_ALIGNMENT_SPAN;
-    public int nofRecords = 0;
-    public long globalRecordCounter = 0;
-
-    public long bases = 0;
-    public int blockCount = -1;
-    public int[] landmarks;
-    public int checksum = 0;
-
-    /**
-     * Container data
-     */
-    public Block[] blocks;
-
-    public CompressionHeader header;
-
-    // slices found in the container:
-    public Slice[] slices;
-
-    // for performance measurement:
-    public long buildHeaderTime;
-    public long buildSlicesTime;
-    public long writeTime;
-    public long parseTime;
-    public long readTime;
-
-    // for indexing:
-    /**
-     * Container start in the stream.
-     */
-    public long offset;
-
-    @Override
-    public String toString() {
-        return String
-                .format("seqID=%d, start=%d, span=%d, records=%d, slices=%d, blocks=%d.",
-                        sequenceId, alignmentStart, alignmentSpan, nofRecords,
-                        slices == null ? -1 : slices.length, blockCount);
-    }
-
-    public boolean isEOF() {
-        final boolean v3 = containerByteSize == 15 && sequenceId == -1
-                && alignmentStart == 4542278 && blockCount == 1
-                && nofRecords == 0 && (slices == null || slices.length == 0);
-
-        final boolean v2 = containerByteSize == 11 && sequenceId == -1
-                && alignmentStart == 4542278 && blockCount == 1
-                && nofRecords == 0 && (slices == null || slices.length == 0);
-
-        return v3 || v2;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/ContainerHeaderIO.java b/src/main/java/htsjdk/samtools/cram/structure/ContainerHeaderIO.java
deleted file mode 100644
index fd6edfe..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/ContainerHeaderIO.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.cram.io.CRC32OutputStream;
-import htsjdk.samtools.cram.io.CramArray;
-import htsjdk.samtools.cram.io.CramInt;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.io.LTF8;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-class ContainerHeaderIO {
-
-    public boolean readContainerHeader(final Container container, final InputStream inputStream)
-            throws IOException {
-        return readContainerHeader(2, container, inputStream);
-    }
-
-    public boolean readContainerHeader(final int major, final Container container, final InputStream inputStream)
-            throws IOException {
-        final byte[] peek = new byte[4];
-        int character = inputStream.read();
-        if (character == -1)
-            return false;
-
-        peek[0] = (byte) character;
-        for (int i = 1; i < peek.length; i++) {
-            character = inputStream.read();
-            if (character == -1)
-                throw new RuntimeException("Incomplete or broken stream.");
-            peek[i] = (byte) character;
-        }
-
-        container.containerByteSize = CramInt.int32(peek);
-        container.sequenceId = ITF8.readUnsignedITF8(inputStream);
-        container.alignmentStart = ITF8.readUnsignedITF8(inputStream);
-        container.alignmentSpan = ITF8.readUnsignedITF8(inputStream);
-        container.nofRecords = ITF8.readUnsignedITF8(inputStream);
-        container.globalRecordCounter = LTF8.readUnsignedLTF8(inputStream);
-        container.bases = LTF8.readUnsignedLTF8(inputStream);
-        container.blockCount = ITF8.readUnsignedITF8(inputStream);
-        container.landmarks = CramArray.array(inputStream);
-        if (major >= 3)
-            container.checksum = CramInt.int32(inputStream);
-
-        return true;
-    }
-
-    /**
-     * Write CRAM {@link Container} out into the given {@link OutputStream}.
-     * @param major CRAM major version
-     * @param container container to be written
-     * @param outputStream the output stream to write the container to
-     * @return number of bytes written out to the output stream
-     * @throws IOException as per java IO contract
-     */
-    public int writeContainerHeader(final int major, final Container container, final OutputStream outputStream)
-            throws IOException {
-        final CRC32OutputStream crc32OutputStream = new CRC32OutputStream(outputStream);
-
-        int length = (CramInt.writeInt32(container.containerByteSize, crc32OutputStream) + 7) / 8;
-        length += (ITF8.writeUnsignedITF8(container.sequenceId, crc32OutputStream) + 7) / 8;
-        length += (ITF8.writeUnsignedITF8(container.alignmentStart, crc32OutputStream) + 7) / 8;
-        length += (ITF8.writeUnsignedITF8(container.alignmentSpan, crc32OutputStream) + 7) / 8;
-        length += (ITF8.writeUnsignedITF8(container.nofRecords, crc32OutputStream) + 7) / 8;
-        length += (LTF8.writeUnsignedLTF8(container.globalRecordCounter, crc32OutputStream) + 7) / 8;
-        length += (LTF8.writeUnsignedLTF8(container.bases, crc32OutputStream) + 7) / 8;
-        length += (ITF8.writeUnsignedITF8(container.blockCount, crc32OutputStream) + 7) / 8;
-        length += (CramArray.write(container.landmarks, crc32OutputStream) + 7) / 8;
-
-        if (major >= 3) {
-            outputStream.write(crc32OutputStream.getCrc32_LittleEndian());
-            length += 4 ;
-        }
-
-        return length;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/ContainerIO.java b/src/main/java/htsjdk/samtools/cram/structure/ContainerIO.java
deleted file mode 100644
index 6796d34..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/ContainerIO.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.common.CramVersionPolicies;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.io.ExposedByteArrayOutputStream;
-import htsjdk.samtools.util.Log;
-import org.apache.commons.compress.utils.CountingOutputStream;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Methods to read and write CRAM containers.
- */
-public class ContainerIO {
-    private static final Log log = Log.getInstance(ContainerIO.class);
-
-    /**
-     * Reads a CRAM container from the input stream. Returns an EOF container when there is no more data or the EOF marker found.
-     *
-     * @param version CRAM version to expect
-     * @param inputStream      the stream to read from
-     * @return a new container object read from the stream
-     * @throws IOException as per java IO contract
-     */
-    public static Container readContainer(final Version version, final InputStream inputStream) throws IOException {
-        final Container container = readContainer(version.major, inputStream);
-        if (container == null) {
-            // this will cause System.exit(1):
-            CramVersionPolicies.eofNotFound(version);
-
-            return readContainer(version.major, new ByteArrayInputStream(CramIO.ZERO_B_EOF_MARKER));
-        }
-        if (container.isEOF()) log.debug("EOF marker found, file/stream is complete.");
-
-        return container;
-    }
-
-    /**
-     * Reads next container from the stream.
-     *
-     * @param inputStream the stream to read from
-     * @return CRAM container or null if no more data
-     * @throws IOException
-     */
-    private static Container readContainer(final int major, final InputStream inputStream) throws IOException {
-        return readContainer(major, inputStream, 0, Integer.MAX_VALUE);
-    }
-
-    /**
-     * Reads container header only from a {@link InputStream}.
-     *
-     * @param major the CRAM version to assume
-     * @param inputStream    the input stream to read from
-     * @return a new {@link Container} object with container header values filled out but empty body (no slices and blocks).
-     * @throws IOException as per java IO contract
-     */
-    public static Container readContainerHeader(final int major, final InputStream inputStream) throws IOException {
-        final Container container = new Container();
-        final ContainerHeaderIO containerHeaderIO = new ContainerHeaderIO();
-        if (!containerHeaderIO.readContainerHeader(major, container, inputStream)) {
-            containerHeaderIO.readContainerHeader(container, new ByteArrayInputStream((major >= 3 ? CramIO.ZERO_F_EOF_MARKER : CramIO.ZERO_B_EOF_MARKER)));
-            return container;
-        }
-        return container;
-    }
-
-    @SuppressWarnings("SameParameterValue")
-    private static Container readContainer(final int major, final InputStream inputStream, final int fromSlice, int howManySlices) throws IOException {
-
-        final long time1 = System.nanoTime();
-        final Container container = readContainerHeader(major, inputStream);
-        if (container.isEOF()) return container;
-
-        final Block block = Block.readFromInputStream(major, inputStream);
-        if (block.getContentType() != BlockContentType.COMPRESSION_HEADER)
-            throw new RuntimeException("Content type does not match: " + block.getContentType().name());
-        container.header = new CompressionHeader();
-        container.header.read(block.getRawContent());
-
-        howManySlices = Math.min(container.landmarks.length, howManySlices);
-
-        if (fromSlice > 0) //noinspection ResultOfMethodCallIgnored
-            inputStream.skip(container.landmarks[fromSlice]);
-
-        final List<Slice> slices = new ArrayList<Slice>();
-        for (int sliceCount = fromSlice; sliceCount < howManySlices - fromSlice; sliceCount++) {
-            final Slice slice = new Slice();
-            SliceIO.read(major, slice, inputStream);
-            slice.index = sliceCount;
-            slices.add(slice);
-        }
-
-        container.slices = slices.toArray(new Slice[slices.size()]);
-
-        calculateSliceOffsetsAndSizes(container);
-
-        final long time2 = System.nanoTime();
-
-        log.debug("READ CONTAINER: " + container.toString());
-        container.readTime = time2 - time1;
-
-        return container;
-    }
-
-    private static void calculateSliceOffsetsAndSizes(final Container container) {
-        if (container.slices.length == 0) return;
-        for (int i = 0; i < container.slices.length - 1; i++) {
-            final Slice slice = container.slices[i];
-            slice.offset = container.landmarks[i];
-            slice.size = container.landmarks[i + 1] - slice.offset;
-            slice.containerOffset = container.offset;
-            slice.index = i;
-        }
-        final Slice lastSlice = container.slices[container.slices.length - 1];
-        lastSlice.offset = container.landmarks[container.landmarks.length - 1];
-        lastSlice.size = container.containerByteSize - lastSlice.offset;
-        lastSlice.containerOffset = container.offset;
-        lastSlice.index = container.slices.length - 1;
-    }
-
-    /**
-     * Writes a {@link Container} header information to a {@link OutputStream}.
-     *
-     * @param major     the CRAM version to assume
-     * @param container the container holding the header to write
-     * @param outputStream        the stream to write to
-     * @return the number of bytes written
-     * @throws IOException as per java IO contract
-     */
-    public static int writeContainerHeader(final int major, final Container container, final OutputStream outputStream) throws IOException {
-        return new ContainerHeaderIO().writeContainerHeader(major, container, outputStream);
-    }
-
-    /**
-     * Writes a complete {@link Container} with it's header to a {@link OutputStream}. The method is aware of file header containers and is
-     * suitable for general purpose use: basically any container is allowed.
-     *
-     * @param version   the CRAM version to assume
-     * @param container the container to write
-     * @param outputStream        the stream to write to
-     * @return the number of bytes written out
-     * @throws IOException as per java IO contract
-     */
-    public static int writeContainer(final Version version, final Container container, final OutputStream outputStream) throws IOException {
-        {
-            if (container.blocks != null && container.blocks.length > 0) {
-
-                final Block firstBlock = container.blocks[0];
-                final boolean isFileHeaderContainer = firstBlock.getContentType() == BlockContentType.FILE_HEADER;
-                if (isFileHeaderContainer) {
-                    final ExposedByteArrayOutputStream byteArrayOutputStream = new ExposedByteArrayOutputStream();
-                    firstBlock.write(version.major, byteArrayOutputStream);
-                    container.containerByteSize = byteArrayOutputStream.size();
-
-                    final int containerHeaderByteSize = new ContainerHeaderIO().writeContainerHeader(version.major, container, outputStream);
-                    outputStream.write(byteArrayOutputStream.getBuffer(), 0, byteArrayOutputStream.size());
-                    return containerHeaderByteSize + byteArrayOutputStream.size();
-                }
-            }
-        }
-
-        final long time1 = System.nanoTime();
-        final ExposedByteArrayOutputStream byteArrayOutputStream = new ExposedByteArrayOutputStream();
-
-        final Block block = new Block();
-        block.setContentType(BlockContentType.COMPRESSION_HEADER);
-        block.setContentId(0);
-        block.setMethod(BlockCompressionMethod.RAW);
-        final byte[] bytes;
-        try {
-            bytes = container.header.toByteArray();
-        } catch (final IOException e) {
-            throw new RuntimeException("This should have never happened.");
-        }
-        block.setRawContent(bytes);
-        block.write(version.major, byteArrayOutputStream);
-        container.blockCount = 1;
-
-        final List<Integer> landmarks = new ArrayList<Integer>();
-        for (int i = 0; i < container.slices.length; i++) {
-            final Slice slice = container.slices[i];
-            landmarks.add(byteArrayOutputStream.size());
-            SliceIO.write(version.major, slice, byteArrayOutputStream);
-            container.blockCount++;
-            container.blockCount++;
-            if (slice.embeddedRefBlock != null) container.blockCount++;
-            container.blockCount += slice.external.size();
-        }
-        container.landmarks = new int[landmarks.size()];
-        for (int i = 0; i < container.landmarks.length; i++)
-            container.landmarks[i] = landmarks.get(i);
-
-        container.containerByteSize = byteArrayOutputStream.size();
-        calculateSliceOffsetsAndSizes(container);
-
-        int length = new ContainerHeaderIO().writeContainerHeader(version.major, container, outputStream);
-        outputStream.write(byteArrayOutputStream.getBuffer(), 0, byteArrayOutputStream.size());
-        length += byteArrayOutputStream.size();
-
-        final long time2 = System.nanoTime();
-
-        log.debug("CONTAINER WRITTEN: " + container.toString());
-        container.writeTime = time2 - time1;
-
-        return length;
-    }
-
-    /**
-     * Calculates the byte size of a container based on the CRAM version.
-     *
-     * @param version   the CRAM version to assume
-     * @param container the container to be weighted
-     * @return the total number of bytes the container would occupy if written out
-     */
-    public static long getByteSize(final Version version, final Container container) {
-        final CountingOutputStream countingOutputStream = new CountingOutputStream(new OutputStream() {
-            @Override
-            public void write(final int b) throws IOException {
-            }
-        });
-
-        try {
-            writeContainer(version, container, countingOutputStream);
-            countingOutputStream.close();
-        } catch (final IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        return countingOutputStream.getBytesWritten();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/CramCompressionRecord.java b/src/main/java/htsjdk/samtools/cram/structure/CramCompressionRecord.java
deleted file mode 100644
index 4997194..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/CramCompressionRecord.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.common.MutableInt;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-public class CramCompressionRecord {
-    private static final int MULTI_FRAGMENT_FLAG = 0x1;
-    private static final int PROPER_PAIR_FLAG = 0x2;
-    private static final int SEGMENT_UNMAPPED_FLAG = 0x4;
-    private static final int NEGATIVE_STRAND_FLAG = 0x10;
-    private static final int FIRST_SEGMENT_FLAG = 0x40;
-    private static final int LAST_SEGMENT_FLAG = 0x80;
-    private static final int SECONDARY_ALIGNMENT_FLAG = 0x100;
-    private static final int VENDOR_FILTERED_FLAG = 0x200;
-    private static final int DUPLICATE_FLAG = 0x400;
-    private static final int SUPPLEMENTARY_FLAG = 0x800;
-
-    private static final int MATE_NEG_STRAND_FLAG = 0x1;
-    private static final int MATE_UNMAPPED_FLAG = 0x2;
-
-    private static final int FORCE_PRESERVE_QS_FLAG = 0x1;
-    private static final int DETACHED_FLAG = 0x2;
-    private static final int HAS_MATE_DOWNSTREAM_FLAG = 0x4;
-    private static final int UNKNOWN_BASES = 0x8;
-
-    // sequential index of the record in a stream:
-    public int index = 0;
-    public int alignmentStart;
-    public int alignmentDelta;
-    private int alignmentEnd = -1;
-    private int alignmentSpan = -1;
-
-    public int readLength;
-
-    public int recordsToNextFragment = -1;
-
-    public byte[] readBases;
-    public byte[] qualityScores;
-
-    public List<ReadFeature> readFeatures;
-
-    public int readGroupID = 0;
-
-    // bit flags:
-    public int flags = 0;
-    public int mateFlags = 0;
-    public int compressionFlags = 0;
-
-    // pointers to the previous and next segments in the template:
-    public CramCompressionRecord next, previous;
-
-    public int mateSequenceID = -1;
-    public int mateAlignmentStart = 0;
-
-    public int mappingQuality;
-
-    public String sequenceName;
-    public int sequenceId;
-    public String readName;
-
-    // insert size:
-    public int templateSize;
-
-    public ReadTag[] tags;
-    public byte[] tagIds;
-    public MutableInt tagIdsIndex;
-
-    public int sliceIndex = 0;
-
-    public byte getMateFlags() {
-        return (byte) (0xFF & mateFlags);
-    }
-
-    public byte getCompressionFlags() {
-        return (byte) (0xFF & compressionFlags);
-    }
-
-    @SuppressWarnings("SimplifiableIfStatement")
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof CramCompressionRecord)) return false;
-
-        final CramCompressionRecord cramRecord = (CramCompressionRecord) obj;
-
-        if (alignmentStart != cramRecord.alignmentStart) return false;
-        if (isNegativeStrand() != cramRecord.isNegativeStrand()) return false;
-        if (isVendorFiltered() != cramRecord.isVendorFiltered()) return false;
-        if (isSegmentUnmapped() != cramRecord.isSegmentUnmapped()) return false;
-        if (readLength != cramRecord.readLength) return false;
-        if (isLastSegment() != cramRecord.isLastSegment()) return false;
-        if (recordsToNextFragment != cramRecord.recordsToNextFragment) return false;
-        if (isFirstSegment() != cramRecord.isFirstSegment()) return false;
-        if (mappingQuality != cramRecord.mappingQuality) return false;
-
-        if (!deepEquals(readFeatures, cramRecord.readFeatures)) return false;
-
-        if (!Arrays.equals(readBases, cramRecord.readBases)) return false;
-        return Arrays.equals(qualityScores, cramRecord.qualityScores) && areEqual(flags, cramRecord.flags) && areEqual(readName, cramRecord.readName);
-
-    }
-
-    private boolean areEqual(final Object o1, final Object o2) {
-        return o1 == null && o2 == null || o1 != null && o1.equals(o2);
-    }
-
-    private boolean deepEquals(final Collection<?> c1, final Collection<?> c2) {
-        return (c1 == null || c1.isEmpty()) && (c2 == null || c2.isEmpty()) || c1 != null && c1.equals(c2);
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder stringBuilder = new StringBuilder("[");
-        if (readName != null) stringBuilder.append(readName).append("; ");
-        stringBuilder.append("flags=").append(flags)
-                .append("; alignmentOffset=").append(alignmentDelta)
-                .append("; mateOffset=").append(recordsToNextFragment)
-                .append("; mappingQuality=").append(mappingQuality);
-
-        if (readFeatures != null) for (final ReadFeature feature : readFeatures)
-            stringBuilder.append("; ").append(feature.toString());
-
-        if (readBases != null) stringBuilder.append("; ").append("bases: ").append(new String(readBases));
-        if (qualityScores != null) stringBuilder.append("; ").append("scores: ").append(new String(qualityScores));
-
-        stringBuilder.append(']');
-        return stringBuilder.toString();
-    }
-
-    public int getAlignmentSpan() {
-        if (alignmentSpan < 0) calculateAlignmentBoundaries();
-        return alignmentSpan;
-    }
-
-    void calculateAlignmentBoundaries() {
-        if (isSegmentUnmapped()) {
-            alignmentSpan = 0;
-            alignmentEnd = SAMRecord.NO_ALIGNMENT_START;
-        } else if (readFeatures == null || readFeatures.isEmpty()) {
-            alignmentSpan = readLength;
-            alignmentEnd = alignmentStart + alignmentSpan - 1;
-        } else {
-            alignmentSpan = readLength;
-            for (final ReadFeature readFeature : readFeatures) {
-                switch (readFeature.getOperator()) {
-                    case InsertBase.operator:
-                        alignmentSpan--;
-                        break;
-                    case Insertion.operator:
-                        alignmentSpan -= ((Insertion) readFeature).getSequence().length;
-                        break;
-                    case SoftClip.operator:
-                        alignmentSpan -= ((SoftClip) readFeature).getSequence().length;
-                        break;
-                    case Deletion.operator:
-                        alignmentSpan += ((Deletion) readFeature).getLength();
-                        break;
-
-                    default:
-                        break;
-                }
-            }
-            alignmentEnd = alignmentStart + alignmentSpan - 1;
-        }
-    }
-
-    public int getAlignmentEnd() {
-        if (alignmentEnd < 0) calculateAlignmentBoundaries();
-        return alignmentEnd;
-    }
-
-    public boolean isMultiFragment() {
-        return (flags & MULTI_FRAGMENT_FLAG) != 0;
-    }
-
-    public void setMultiFragment(final boolean multiFragment) {
-        flags = multiFragment ? flags | MULTI_FRAGMENT_FLAG : flags & ~MULTI_FRAGMENT_FLAG;
-    }
-
-    public boolean isSegmentUnmapped() {
-        return (flags & SEGMENT_UNMAPPED_FLAG) != 0;
-    }
-
-    public void setSegmentUnmapped(final boolean segmentUnmapped) {
-        flags = segmentUnmapped ? flags | SEGMENT_UNMAPPED_FLAG : flags & ~SEGMENT_UNMAPPED_FLAG;
-    }
-
-    public boolean isFirstSegment() {
-        return (flags & FIRST_SEGMENT_FLAG) != 0;
-    }
-
-    public void setFirstSegment(final boolean firstSegment) {
-        flags = firstSegment ? flags | FIRST_SEGMENT_FLAG : flags & ~FIRST_SEGMENT_FLAG;
-    }
-
-    public boolean isLastSegment() {
-        return (flags & LAST_SEGMENT_FLAG) != 0;
-    }
-
-    public void setLastSegment(final boolean lastSegment) {
-        flags = lastSegment ? flags | LAST_SEGMENT_FLAG : flags & ~LAST_SEGMENT_FLAG;
-    }
-
-    public boolean isSecondaryAlignment() {
-        return (flags & SECONDARY_ALIGNMENT_FLAG) != 0;
-    }
-
-    public void setSecondaryAlignment(final boolean secondaryAlignment) {
-        flags = secondaryAlignment ? flags | SECONDARY_ALIGNMENT_FLAG : flags & ~SECONDARY_ALIGNMENT_FLAG;
-    }
-
-    public boolean isVendorFiltered() {
-        return (flags & VENDOR_FILTERED_FLAG) != 0;
-    }
-
-    public void setVendorFiltered(final boolean vendorFiltered) {
-        flags = vendorFiltered ? flags | VENDOR_FILTERED_FLAG : flags & ~VENDOR_FILTERED_FLAG;
-    }
-
-    public boolean isProperPair() {
-        return (flags & PROPER_PAIR_FLAG) != 0;
-    }
-
-    public void setProperPair(final boolean properPair) {
-        flags = properPair ? flags | PROPER_PAIR_FLAG : flags & ~PROPER_PAIR_FLAG;
-    }
-
-    public boolean isDuplicate() {
-        return (flags & DUPLICATE_FLAG) != 0;
-    }
-
-    public void setDuplicate(final boolean duplicate) {
-        flags = duplicate ? flags | DUPLICATE_FLAG : flags & ~DUPLICATE_FLAG;
-    }
-
-    public boolean isNegativeStrand() {
-        return (flags & NEGATIVE_STRAND_FLAG) != 0;
-    }
-
-    public void setNegativeStrand(final boolean negativeStrand) {
-        flags = negativeStrand ? flags | NEGATIVE_STRAND_FLAG : flags & ~NEGATIVE_STRAND_FLAG;
-    }
-
-    public boolean isMateUnmapped() {
-        return (mateFlags & MATE_UNMAPPED_FLAG) != 0;
-    }
-
-    public void setMateUnmapped(final boolean mateUnmapped) {
-        mateFlags = mateUnmapped ? mateFlags | MATE_UNMAPPED_FLAG : mateFlags & ~MATE_UNMAPPED_FLAG;
-    }
-
-    public boolean isMateNegativeStrand() {
-        return (mateFlags & MATE_NEG_STRAND_FLAG) != 0;
-    }
-
-    public void setMateNegativeStrand(final boolean mateNegativeStrand) {
-        mateFlags = mateNegativeStrand ? mateFlags | MATE_NEG_STRAND_FLAG : mateFlags & ~MATE_NEG_STRAND_FLAG;
-    }
-
-    public boolean isHasMateDownStream() {
-        return (compressionFlags & HAS_MATE_DOWNSTREAM_FLAG) != 0;
-    }
-
-    public void setHasMateDownStream(final boolean hasMateDownStream) {
-        compressionFlags = hasMateDownStream ? compressionFlags | HAS_MATE_DOWNSTREAM_FLAG : compressionFlags & ~HAS_MATE_DOWNSTREAM_FLAG;
-    }
-
-    public boolean isDetached() {
-        return (compressionFlags & DETACHED_FLAG) != 0;
-    }
-
-    public void setDetached(final boolean detached) {
-        compressionFlags = detached ? compressionFlags | DETACHED_FLAG : compressionFlags & ~DETACHED_FLAG;
-    }
-
-    public boolean isForcePreserveQualityScores() {
-        return (compressionFlags & FORCE_PRESERVE_QS_FLAG) != 0;
-    }
-
-    public void setForcePreserveQualityScores(final boolean forcePreserveQualityScores) {
-        compressionFlags = forcePreserveQualityScores ? compressionFlags | FORCE_PRESERVE_QS_FLAG : compressionFlags &
-                ~FORCE_PRESERVE_QS_FLAG;
-    }
-
-    public boolean isUnknownBases() {
-        return (compressionFlags & UNKNOWN_BASES) != 0;
-    }
-
-    public void setUnknownBases(final boolean unknownBases) {
-        compressionFlags = unknownBases ? compressionFlags | UNKNOWN_BASES : compressionFlags &
-                ~UNKNOWN_BASES;
-    }
-
-    public boolean isSupplementary() {
-        return (flags & SUPPLEMENTARY_FLAG) != 0;
-    }
-
-    public void setSupplementary(final boolean supplementary) {
-        flags = supplementary ? flags | SUPPLEMENTARY_FLAG : flags & ~SUPPLEMENTARY_FLAG;
-    }
-
-    public static class BAM_FLAGS {
-        public static final int READ_PAIRED_FLAG = 0x1;
-        public static final int PROPER_PAIR_FLAG = 0x2;
-        public static final int READ_UNMAPPED_FLAG = 0x4;
-        public static final int MATE_UNMAPPED_FLAG = 0x8;
-        public static final int READ_STRAND_FLAG = 0x10;
-        public static final int MATE_STRAND_FLAG = 0x20;
-        public static final int FIRST_OF_PAIR_FLAG = 0x40;
-        public static final int SECOND_OF_PAIR_FLAG = 0x80;
-        public static final int NOT_PRIMARY_ALIGNMENT_FLAG = 0x100;
-        public static final int READ_FAILS_VENDOR_QUALITY_CHECK_FLAG = 0x200;
-        public static final int DUPLICATE_READ_FLAG = 0x400;
-        public static final int SUPPLEMENTARY_FLAG = 0x800;
-    }
-
-    public static int getBAMFlags(final int cramFlags, final byte cramMateFlags) {
-        int value = cramFlags;
-        if ((cramMateFlags & MATE_NEG_STRAND_FLAG) != 0) value |= BAM_FLAGS.MATE_STRAND_FLAG;
-        if ((cramMateFlags & MATE_UNMAPPED_FLAG) != 0) value |= BAM_FLAGS.MATE_UNMAPPED_FLAG;
-        return value;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/CramHeader.java b/src/main/java/htsjdk/samtools/cram/structure/CramHeader.java
deleted file mode 100644
index 05e772a..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/CramHeader.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.cram.common.Version;
-
-import java.util.Arrays;
-
-/**
- * A starting object when dealing with CRAM files. A {@link CramHeader} holds 2 things: 1. File format definition, including content id and
- * version information 2. SAM file header
- */
-public final class CramHeader {
-    public static final byte[] MAGIC = "CRAM".getBytes();
-
-    private Version version;
-    private final byte[] id = new byte[20];
-
-    {
-        Arrays.fill(id, (byte) 0);
-    }
-
-    private SAMFileHeader samFileHeader;
-
-    /**
-     * Create a new {@link CramHeader} empty object.
-     */
-    private CramHeader() {
-    }
-
-    /**
-     * Create a new {@link CramHeader} object with the specified version, id and SAM file header.
-     * The id field by default is guaranteed to be byte[20].
-     *
-     * @param version       the CRAM version to assume
-     * @param id            an identifier of the content associated with this header
-     * @param samFileHeader the SAM file header
-     */
-    public CramHeader(final Version version, final String id, final SAMFileHeader samFileHeader) {
-        this.version = version;
-
-        if (id != null) System.arraycopy(id.getBytes(), 0, this.id, 0, Math.min(id.length(), this.id.length));
-        this.samFileHeader = samFileHeader;
-    }
-
-    /**
-     * Set the id of the header. A typical use is for example file name to be used when streaming or a checksum of the data contained in the
-     * file.
-     *
-     * @param stringID a new id; only first 20 bytes from byte representation of java {@link String} will be used.
-     */
-    public void setID(final String stringID) {
-        System.arraycopy(stringID.getBytes(), 0, this.id, 0, Math.min(this.id.length, stringID.length()));
-    }
-
-    /**
-     * Copy the CRAM header into a new {@link CramHeader} object.
-     * @return a complete copy of the header
-     */
-    @SuppressWarnings("CloneDoesntCallSuperClone")
-    @Override
-    public CramHeader clone() {
-        final CramHeader clone = new CramHeader();
-        clone.version = version;
-        System.arraycopy(id, 0, clone.id, 0, id.length);
-        clone.samFileHeader = getSamFileHeader().clone();
-
-        return clone;
-    }
-
-
-    /**
-     * Checks if content of a header is the same as this one.
-     * @param obj another header to compare to
-     * @return true if versions, ids and SAM file header are exactly the same, false otherwise
-     */
-    @Override
-    public boolean equals(final Object obj) {
-        if (obj == null) return false;
-        if (!(obj instanceof CramHeader)) return false;
-
-        final CramHeader header = (CramHeader) obj;
-
-        if (getVersion().major != header.getVersion().major) return false;
-        //noinspection SimplifiableIfStatement
-        if (getVersion().minor != header.getVersion().minor) return false;
-        return Arrays.equals(id, header.id) && getSamFileHeader().equals(header.getSamFileHeader());
-    }
-
-    /**
-     * Get the {@link SAMFileHeader} object associated with this CRAM file header.
-     * @return the SAM file header
-     */
-    public SAMFileHeader getSamFileHeader() {
-        return samFileHeader;
-    }
-
-    public byte[] getId() {
-        return id;
-    }
-
-    public Version getVersion() {
-        return version;
-    }
-
-    public void setVersion(final Version version) { this.version = version; }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/EncodingID.java b/src/main/java/htsjdk/samtools/cram/structure/EncodingID.java
deleted file mode 100644
index 3073704..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/EncodingID.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-/**
- * Encoding ID as defined in the CRAM specs. These are basically ways to serialize a data series.
- */
-public enum EncodingID {
-    /**
-     * "Do nothing" encoding. Should throw an exception when trying reading or writing with this encoding.
-     */
-    NULL,
-    /**
-     * Shove the data into a byte array for compressing later with a generic compressor like GZIP.
-     */
-    EXTERNAL,
-    /**
-     * 'naf said: http://en.wikipedia.org/wiki/Golomb_coding
-     */
-    GOLOMB,
-    /**
-     * http://en.wikipedia.org/wiki/Huffman_coding
-     */
-    HUFFMAN,
-    /**
-     * A byte array serialized as [length][elements]
-     */
-    BYTE_ARRAY_LEN,
-    /**
-     * A byte array serialized as [elements][stop]
-     */
-    BYTE_ARRAY_STOP,
-    /**
-     * http://en.wikipedia.org/wiki/Beta_Code
-     */
-    BETA,
-    /**
-     * Subexponential codes, see the CRAM specs for details.
-     */
-    SUBEXPONENTIAL,
-    /**
-     * A variant of GOLOMB encoding: http://en.wikipedia.org/wiki/Golomb_coding
-     */
-    GOLOMB_RICE,
-    /**
-     * http://en.wikipedia.org/wiki/Elias_gamma_coding
-     */
-    GAMMA
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/EncodingKey.java b/src/main/java/htsjdk/samtools/cram/structure/EncodingKey.java
deleted file mode 100644
index e7b85ff..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/EncodingKey.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-public enum EncodingKey {
-    BF_BitFlags, AP_AlignmentPositionOffset, FP_FeaturePosition,
-    FC_FeatureCode, QS_QualityScore, DL_DeletionLength, BA_Base, TN_TagNameAndType,
-    NF_RecordsToNextFragment, RL_ReadLength, RG_ReadGroup, MQ_MappingQualityScore,
-    RN_ReadName, NP_NextFragmentAlignmentStart, TS_InsetSize, FN_NumberOfReadFeatures,
-    BS_BaseSubstitutionCode, IN_Insertion, TC_TagCount, MF_MateBitFlags,
-    NS_NextFragmentReferenceSequenceID, CF_CompressionBitFlags, TV_TestMark, TM_TestMark,
-    TL_TagIdList, RI_RefId, RS_RefSkip, SC_SoftClip, HC_HardClip, PD_padding, BB_bases, QQ_scores;
-
-    public static EncodingKey byFirstTwoChars(final String chars) {
-        for (final EncodingKey encodingKey : values()) {
-            if (encodingKey.name().startsWith(chars))
-                return encodingKey;
-        }
-        return null;
-    }
-
-    public static byte[] toTwoBytes(final EncodingKey key) {
-        return new byte[]{(byte) key.name().charAt(0), (byte) key.name().charAt(1)};
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/EncodingParams.java b/src/main/java/htsjdk/samtools/cram/structure/EncodingParams.java
deleted file mode 100644
index 586fa90..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/EncodingParams.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-
-import java.util.Arrays;
-
-public class EncodingParams {
-
-    public final EncodingID id;
-    public final byte[] params;
-
-    public EncodingParams(final EncodingID id, final byte[] params) {
-        super();
-        this.id = id;
-        this.params = params;
-    }
-
-    @Override
-    public String toString() {
-        return id.name() + ":" + javax.xml.bind.DatatypeConverter.printHexBinary(Arrays.copyOfRange(params, 0, Math.max(20, params.length)));
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/ReadTag.java b/src/main/java/htsjdk/samtools/cram/structure/ReadTag.java
deleted file mode 100644
index 791bf2c..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/ReadTag.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFormatException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecord.SAMTagAndValue;
-import htsjdk.samtools.SAMTagUtil;
-import htsjdk.samtools.SAMUtils;
-import htsjdk.samtools.SAMValidationError;
-import htsjdk.samtools.TagValueAndUnsignedArrayFlag;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.util.StringUtil;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.charset.Charset;
-
-/**
- * CRAM counterpart of {@link htsjdk.samtools.SAMTag}.
- * TODO: consider merging/dropping this class in favour of SAMTag or a SAMTag implementation.
- */
-public class ReadTag implements Comparable<ReadTag> {
-    private static final long MAX_INT = Integer.MAX_VALUE;
-    private static final long MAX_UINT = MAX_INT * 2 + 1;
-    private static final long MAX_SHORT = Short.MAX_VALUE;
-    private static final long MAX_USHORT = MAX_SHORT * 2 + 1;
-    private static final long MAX_BYTE = Byte.MAX_VALUE;
-    private static final long MAX_UBYTE = MAX_BYTE * 2 + 1;
-
-    // non-null
-    private String key;
-    private String keyAndType;
-    public String keyType3Bytes;
-    public int keyType3BytesAsInt;
-    private char type;
-    private Object value;
-    private short code;
-    private byte index;
-
-    public ReadTag(final int id, final byte[] dataAsByteArray, ValidationStringency validationStringency) {
-        this.type = (char) (0xFF & id);
-        key = new String(new char[]{(char) ((id >> 16) & 0xFF), (char) ((id >> 8) & 0xFF)});
-        value = restoreValueFromByteArray(type, dataAsByteArray, validationStringency);
-        keyType3Bytes = this.key + this.type;
-
-        keyType3BytesAsInt = id;
-
-        code = SAMTagUtil.getSingleton().makeBinaryTag(this.key);
-    }
-
-    private ReadTag(final String key, final char type, final Object value) {
-        if (key == null)
-            throw new NullPointerException("Tag key cannot be null.");
-        if (value == null)
-            throw new NullPointerException("Tag value cannot be null.");
-
-        this.value = value;
-
-        if (key.length() == 2) {
-            this.key = key;
-            this.type = type;
-            // this.type = getTagValueType(value);
-            keyAndType = key + ":" + getType();
-        } else if (key.length() == 4) {
-            this.key = key.substring(0, 2);
-            this.type = key.charAt(3);
-        }
-
-        keyType3Bytes = this.key + this.type;
-        keyType3BytesAsInt = nameType3BytesToInt(this.key, this.type);
-
-        code = SAMTagUtil.getSingleton().makeBinaryTag(this.key);
-    }
-
-    public static int name3BytesToInt(final byte[] name) {
-        int value = 0xFF & name[0];
-        value <<= 8;
-        value |= 0xFF & name[1];
-        value <<= 8;
-        value |= 0xFF & name[2];
-
-        return value;
-    }
-
-    public static int nameType3BytesToInt(final String name, final char type) {
-        int value = 0xFF & name.charAt(0);
-        value <<= 8;
-        value |= 0xFF & name.charAt(1);
-        value <<= 8;
-        value |= 0xFF & type;
-
-        return value;
-    }
-
-    public static String intToNameType3Bytes(final int value) {
-        final byte b3 = (byte) (0xFF & value);
-        final byte b2 = (byte) (0xFF & (value >> 8));
-        final byte b1 = (byte) (0xFF & (value >> 16));
-
-        return new String(new byte[]{b1, b2, b3});
-    }
-
-    public static String intToNameType4Bytes(final int value) {
-        final byte b3 = (byte) (0xFF & value);
-        final byte b2 = (byte) (0xFF & (value >> 8));
-        final byte b1 = (byte) (0xFF & (value >> 16));
-
-        return new String(new byte[]{b1, b2, ':', b3});
-    }
-
-    public SAMTagAndValue createSAMTag() {
-        return new SAMTagAndValue(key, value);
-    }
-
-    public static ReadTag deriveTypeFromKeyAndType(final String keyAndType, final Object value) {
-        if (keyAndType.length() != 4)
-            throw new RuntimeException("Tag key and type must be 4 char long: " + keyAndType);
-
-        return new ReadTag(keyAndType.substring(0, 2), keyAndType.charAt(3), value);
-    }
-
-    public static ReadTag deriveTypeFromValue(final String key, final Object value) {
-        if (key.length() != 2)
-            throw new RuntimeException("Tag key must be 2 char long: " + key);
-
-        return new ReadTag(key, getTagValueType(value), value);
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    @Override
-    public int compareTo(@SuppressWarnings("NullableProblems") final ReadTag o) {
-        return key.compareTo(o.key);
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof ReadTag))
-            return false;
-
-        final ReadTag foe = (ReadTag) obj;
-        return key.equals(foe.key) && (value == null && foe.value == null || value != null && value.equals(foe.value));
-
-    }
-
-    @Override
-    public int hashCode() {
-        return key.hashCode();
-    }
-
-    public Object getValue() {
-        return value;
-    }
-
-    char getType() {
-        return type;
-    }
-
-    public String getKeyAndType() {
-        return keyAndType;
-    }
-
-    public byte[] getValueAsByteArray() {
-        return writeSingleValue((byte) type, value, false);
-    }
-
-    private static Object restoreValueFromByteArray(final char type, final byte[] array, ValidationStringency validationStringency) {
-        final ByteBuffer buffer = ByteBuffer.wrap(array);
-        buffer.order(ByteOrder.LITTLE_ENDIAN);
-        return readSingleValue((byte) type, buffer, validationStringency);
-    }
-
-    // copied from net.sf.samtools.BinaryTagCodec 1.62:
-    private static char getTagValueType(final Object value) {
-        if (value instanceof String) {
-            return 'Z';
-        } else if (value instanceof Character) {
-            return 'A';
-        } else if (value instanceof Float) {
-            return 'f';
-        } else if (value instanceof Number) {
-            if (!(value instanceof Byte || value instanceof Short
-                    || value instanceof Integer || value instanceof Long)) {
-                throw new IllegalArgumentException("Unrecognized tag type "
-                        + value.getClass().getName());
-            }
-            return getIntegerType(((Number) value).longValue());
-        } /*
-         * Note that H tag type is never written anymore, because B style is
-		 * more compact. else if (value instanceof byte[]) { return 'H'; }
-		 */ else if (value instanceof byte[] || value instanceof short[]
-                || value instanceof int[] || value instanceof float[]) {
-            return 'B';
-        } else {
-            throw new IllegalArgumentException(
-                    "When writing BAM, unrecognized tag type "
-                            + value.getClass().getName());
-        }
-    }
-
-    // copied from net.sf.samtools.BinaryTagCodec:
-    static private char getIntegerType(final long val) {
-        if (val > MAX_UINT) {
-            throw new IllegalArgumentException("Integer attribute value too large: "+val);
-        }
-        if (val > MAX_INT) {
-            return 'I';
-        }
-        if (val > MAX_USHORT) {
-            return 'i';
-        }
-        if (val > MAX_SHORT) {
-            return 'S';
-        }
-        if (val > MAX_UBYTE) {
-            return 's';
-        }
-        if (val > MAX_BYTE) {
-            return 'C';
-        }
-        if (val >= Byte.MIN_VALUE) {
-            return 'c';
-        }
-        if (val >= Short.MIN_VALUE) {
-            return 's';
-        }
-        if (val >= Integer.MIN_VALUE) {
-            return 'i';
-        }
-        throw new IllegalArgumentException(
-                "Integer attribute value too negative to be encoded in BAM");
-    }
-
-    public void setIndex(final byte i) {
-        this.index = i;
-    }
-
-    public byte getIndex() {
-        return index;
-    }
-
-    // yeah, I'm that risky:
-    // with a little less thread risky.
-    private static final ThreadLocal<ByteBuffer> bufferLocal = new ThreadLocal<ByteBuffer>() {
-        @Override
-        protected ByteBuffer initialValue() {
-            final ByteBuffer buf = ByteBuffer.allocateDirect(10 * 1024 * 1024);
-            buf.order(ByteOrder.LITTLE_ENDIAN);
-            return buf;
-        }
-    };
-
-    private static final Charset charset = Charset.forName("US-ASCII");
-
-    public static byte[] writeSingleValue(final byte tagType, final Object value,
-                                          final boolean isUnsignedArray) {
-
-        final ByteBuffer buffer = bufferLocal.get();
-        buffer.clear();
-        switch (tagType) {
-            case 'Z':
-                String s = (String) value;
-                buffer.put(s.getBytes(charset));
-                buffer.put((byte) 0);
-                break;
-            case 'A':
-                buffer.put((byte) ((Character) value).charValue());
-                break;
-            case 'I':
-                // this is tricky:
-                buffer.putLong((Long) value);
-                buffer.position(buffer.position() - 4);
-                break;
-            case 'i':
-                buffer.putInt(((Number) value).intValue());
-                break;
-            case 's':
-                buffer.putShort(((Number) value).shortValue());
-                break;
-            case 'S':
-                // Convert to unsigned short stored in an int
-                buffer.putInt(((Number) value).intValue());
-                buffer.position(buffer.position() - 2);
-                break;
-            case 'c':
-                buffer.put(((Number) value).byteValue());
-                break;
-            case 'C':
-                // Convert to unsigned byte stored in an int
-                buffer.putShort(((Integer) value).shortValue());
-                buffer.position(buffer.position() - 1);
-                break;
-            case 'f':
-                buffer.putFloat((Float) value);
-                break;
-            case 'H':
-                s = StringUtil.bytesToHexString((byte[]) value);
-                buffer.put(s.getBytes(charset));
-                buffer.put((byte) 0);
-                break;
-            case 'B':
-                writeArray(value, isUnsignedArray, buffer);
-                break;
-            default:
-                throw new SAMFormatException("Unrecognized tag type: "
-                        + (char) tagType);
-        }
-
-        buffer.flip();
-        final byte[] bytes = new byte[buffer.limit()];
-        buffer.get(bytes);
-
-        return bytes;
-    }
-
-    private static void writeArray(final Object value,
-                                   final boolean isUnsignedArray, final ByteBuffer buffer) {
-        if (value instanceof byte[]) {
-            buffer.put((byte) (isUnsignedArray ? 'C' : 'c'));
-            final byte[] array = (byte[]) value;
-            buffer.putInt(array.length);
-            for (final byte element : array)
-                buffer.put(element);
-
-        } else if (value instanceof short[]) {
-            buffer.put((byte) (isUnsignedArray ? 'S' : 's'));
-            final short[] array = (short[]) value;
-            buffer.putInt(array.length);
-            for (final short element : array)
-                buffer.putShort(element);
-
-        } else if (value instanceof int[]) {
-            buffer.put((byte) (isUnsignedArray ? 'I' : 'i'));
-            final int[] array = (int[]) value;
-            buffer.putInt(array.length);
-            for (final int element : array)
-                buffer.putInt(element);
-
-        } else if (value instanceof float[]) {
-            buffer.put((byte) 'f');
-            final float[] array = (float[]) value;
-            buffer.putInt(array.length);
-            for (final float element : array)
-                buffer.putFloat(element);
-
-        } else
-            throw new SAMException("Unrecognized array value type: "
-                    + value.getClass());
-    }
-
-    public static Object readSingleValue(final byte tagType,
-                                         final ByteBuffer byteBuffer, ValidationStringency validationStringency) {
-        switch (tagType) {
-            case 'Z':
-                return readNullTerminatedString(byteBuffer);
-            case 'A':
-                return (char) byteBuffer.get();
-            case 'I':
-                final long val = byteBuffer.getInt() & 0xffffffffL;
-                if (val <= Integer.MAX_VALUE) {
-                    return (int)val;
-                }
-                // If it won't fit into a signed integer, but is within range for an unsigned 32-bit integer,
-                // return it directly as a long
-                if (! SAMUtils.isValidUnsignedIntegerAttribute(val)) {
-                    SAMUtils.processValidationError(new SAMValidationError(SAMValidationError.Type.TAG_VALUE_TOO_LARGE,
-                            "Unsigned integer is out of range for a 32-bit unsigned value: " + val, null), validationStringency);
-                }
-                return val;
-            case 'i':
-                return byteBuffer.getInt();
-            case 's':
-                return (int) byteBuffer.getShort();
-            case 'S':
-                // Convert to unsigned short stored in an int
-                return byteBuffer.getShort() & 0xffff;
-            case 'c':
-                return (int) byteBuffer.get();
-            case 'C':
-                // Convert to unsigned byte stored in an int
-                return byteBuffer.get() & 0xff;
-            case 'f':
-                return byteBuffer.getFloat();
-            case 'H':
-                final String hexRep = readNullTerminatedString(byteBuffer);
-                return StringUtil.hexStringToBytes(hexRep);
-            case 'B':
-                final TagValueAndUnsignedArrayFlag valueAndFlag = readArray(
-                        byteBuffer);
-                return valueAndFlag.value;
-            default:
-                throw new SAMFormatException("Unrecognized tag type: "
-                        + (char) tagType);
-        }
-    }
-
-    /**
-     * Read value of specified type.
-     *
-     * @param byteBuffer Little-ending byte buffer to read value from.
-     * @return CVO containing the value in in-memory Object form, and a flag
-     * indicating whether it is unsigned or not.
-     */
-    private static TagValueAndUnsignedArrayFlag readArray(
-            final ByteBuffer byteBuffer) {
-        final byte arrayType = byteBuffer.get();
-        final boolean isUnsigned = Character.isUpperCase(arrayType);
-        final int length = byteBuffer.getInt();
-        final Object value;
-        switch (Character.toLowerCase(arrayType)) {
-            case 'c': {
-                final byte[] array = new byte[length];
-                value = array;
-                byteBuffer.get(array);
-                break;
-            }
-            case 's': {
-                final short[] array = new short[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getShort();
-                }
-                break;
-            }
-
-            case 'i': {
-                final int[] array = new int[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getInt();
-                }
-                break;
-            }
-
-            case 'f': {
-                final float[] array = new float[length];
-                value = array;
-                for (int i = 0; i < length; ++i) {
-                    array[i] = byteBuffer.getFloat();
-                }
-                break;
-            }
-
-            default:
-                throw new SAMFormatException("Unrecognized tag array type: "
-                        + (char) arrayType);
-        }
-        return new TagValueAndUnsignedArrayFlag(value, isUnsigned);
-    }
-
-    private static String readNullTerminatedString(final ByteBuffer byteBuffer) {
-        // Count the number of bytes in the string
-        byteBuffer.mark();
-        final int startPosition = byteBuffer.position();
-        //noinspection StatementWithEmptyBody
-        while (byteBuffer.get() != 0) ;
-        final int endPosition = byteBuffer.position();
-
-        // Don't count null terminator
-        final byte[] buf = new byte[endPosition - startPosition - 1];
-        // Go back to the start of the string and read out the bytes
-        byteBuffer.reset();
-        byteBuffer.get(buf);
-        // Skip over the null terminator
-        byteBuffer.get();
-        return StringUtil.bytesToString(buf);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/Slice.java b/src/main/java/htsjdk/samtools/cram/structure/Slice.java
deleted file mode 100644
index 30f0a74..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/Slice.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at4
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMBinaryTagAndUnsignedArrayValue;
-import htsjdk.samtools.SAMBinaryTagAndValue;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMTagUtil;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.SequenceUtil;
-
-import java.lang.reflect.Array;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.Map;
-
-/**
- * CRAM slice is a logical union of blocks into for example alignment slices.
- */
-public class Slice {
-    public static final int MULTI_REFERENCE = -2;
-    public static final int NO_ALIGNMENT_START = -1;
-    public static final int NO_ALIGNMENT_SPAN = 0;
-    private static final Log log = Log.getInstance(Slice.class);
-
-    // as defined in the specs:
-    public int sequenceId = -1;
-    public int alignmentStart = -1;
-    public int alignmentSpan = -1;
-    public int nofRecords = -1;
-    public long globalRecordCounter = -1;
-    public int nofBlocks = -1;
-    public int[] contentIDs;
-    public int embeddedRefBlockContentID = -1;
-    public byte[] refMD5 = new byte[16];
-
-    // content associated with ids:
-    public Block headerBlock;
-    public Block coreBlock;
-    public Block embeddedRefBlock;
-    public Map<Integer, Block> external;
-
-    // for indexing purposes:
-    public int offset = -1;
-    public long containerOffset = -1;
-    public int size = -1;
-    public int index = -1;
-
-    // to pass this to the container:
-    public long bases;
-
-    public SAMBinaryTagAndValue sliceTags;
-
-    private void alignmentBordersSanityCheck(final byte[] ref) {
-        if (sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return ;
-        if (alignmentStart > 0 && sequenceId >= 0 && ref == null) throw new IllegalArgumentException ("Mapped slice reference is null.");
-
-        if (alignmentStart > ref.length) {
-            log.error(String.format("Slice mapped outside of reference: seqID=%d, start=%d, counter=%d.", sequenceId, alignmentStart,
-                    globalRecordCounter));
-            throw new RuntimeException("Slice mapped outside of the reference.");
-        }
-
-        if (alignmentStart - 1 + alignmentSpan > ref.length) {
-            log.warn(String.format("Slice partially mapped outside of reference: seqID=%d, start=%d, span=%d, counter=%d.",
-                    sequenceId, alignmentStart, alignmentSpan, globalRecordCounter));
-        }
-    }
-
-    public boolean validateRefMD5(final byte[] ref) {
-        if(sequenceId == Slice.MULTI_REFERENCE)
-            throw new SAMException("Cannot verify a slice with multiple references on a single reference.");
-
-        if (sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return true;
-
-        alignmentBordersSanityCheck(ref);
-
-        if (!validateRefMD5(ref, alignmentStart, alignmentSpan, refMD5)) {
-            final int shoulderLength = 10;
-            final String excerpt = getBrief(alignmentStart, alignmentSpan, ref, shoulderLength);
-
-            if (validateRefMD5(ref, alignmentStart, alignmentSpan - 1, refMD5)) {
-                log.warn(String.format("Reference MD5 matches partially for slice %d:%d-%d, %s", sequenceId, alignmentStart,
-                        alignmentStart + alignmentSpan - 1, excerpt));
-                return true;
-            }
-
-            log.error(String.format("Reference MD5 mismatch for slice %d:%d-%d, %s", sequenceId, alignmentStart, alignmentStart +
-                    alignmentSpan - 1, excerpt));
-            return false;
-        }
-
-        return true;
-    }
-
-    private static boolean validateRefMD5(final byte[] ref, final int alignmentStart, final int alignmentSpan, final byte[] expectedMD5) {
-        final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1);
-        final String md5 = SequenceUtil.calculateMD5String(ref, alignmentStart - 1, span);
-        return md5.equals(String.format("%032x", new BigInteger(1, expectedMD5)));
-    }
-
-    private static String getBrief(final int startOneBased, final int span, final byte[] bases, final int shoulderLength) {
-        if (span >= bases.length)
-            return new String(bases);
-
-        final StringBuilder sb = new StringBuilder();
-        final int fromInc = startOneBased - 1;
-
-        int toExc = startOneBased + span - 1;
-        toExc = Math.min(toExc, bases.length);
-
-        if (toExc - fromInc <= 2 * shoulderLength) {
-            sb.append(new String(Arrays.copyOfRange(bases, fromInc, toExc)));
-        } else {
-            sb.append(new String(Arrays.copyOfRange(bases, fromInc, fromInc + shoulderLength)));
-            sb.append("...");
-            sb.append(new String(Arrays.copyOfRange(bases, toExc - shoulderLength, toExc)));
-        }
-
-        return sb.toString();
-    }
-
-    @Override
-    public String toString() {
-        return String.format("slice: seqID %d, start %d, span %d, records %d.", sequenceId, alignmentStart, alignmentSpan, nofRecords);
-    }
-
-    public void setRefMD5(final byte[] ref) {
-        alignmentBordersSanityCheck(ref);
-
-        if (sequenceId < 0 && alignmentStart < 1) {
-            refMD5 = new byte[16];
-            Arrays.fill(refMD5, (byte) 0);
-
-            log.debug("Empty slice ref md5 is set.");
-        } else {
-
-            final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1);
-
-            if (alignmentStart + span > ref.length + 1)
-                throw new RuntimeException("Invalid alignment boundaries.");
-
-            refMD5 = SequenceUtil.calculateMD5(ref, alignmentStart - 1, span);
-
-            if (log.isEnabled(Log.LogLevel.DEBUG)) {
-                final StringBuilder sb = new StringBuilder();
-                final int shoulder = 10;
-                if (ref.length <= shoulder * 2)
-                    sb.append(new String(ref));
-                else {
-
-                    sb.append(getBrief(alignmentStart, alignmentSpan, ref, shoulder));
-                }
-
-                log.debug(String.format("Slice md5: %s for %d:%d-%d, %s",
-                        String.format("%032x", new BigInteger(1, refMD5)),
-                        sequenceId, alignmentStart, alignmentStart + span - 1,
-                        sb.toString()));
-            }
-        }
-    }
-
-    /**
-     * Hijacking attributes-related methods from SAMRecord:
-     */
-
-    /**
-     * Get tag value attached to the slice.
-     * @param tag tag ID as a short integer as returned by {@link htsjdk.samtools.SAMTagUtil#makeBinaryTag(java.lang.String)}
-     * @return a value of the tag
-     */
-    public Object getAttribute(final short tag) {
-        if (this.sliceTags == null) return null;
-        else {
-            final SAMBinaryTagAndValue tmp = this.sliceTags.find(tag);
-            if (tmp != null) return tmp.value;
-            else return null;
-        }
-    }
-
-    /**
-     * Set a value for the tag.
-     * @param tag tag ID as a short integer as returned by {@link htsjdk.samtools.SAMTagUtil#makeBinaryTag(java.lang.String)}
-     * @param value tag value
-     */
-    public void setAttribute(final String tag, final Object value) {
-        if (value != null && value.getClass().isArray() && Array.getLength(value) == 0) {
-            throw new IllegalArgumentException("Empty value passed for tag " + tag);
-        }
-        setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value);
-    }
-
-    public void setUnsignedArrayAttribute(final String tag, final Object value) {
-        if (!value.getClass().isArray()) {
-            throw new IllegalArgumentException("Non-array passed to setUnsignedArrayAttribute for tag " + tag);
-        }
-        if (Array.getLength(value) == 0) {
-            throw new IllegalArgumentException("Empty array passed to setUnsignedArrayAttribute for tag " + tag);
-        }
-        setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value, true);
-    }
-
-    void setAttribute(final short tag, final Object value) {
-        setAttribute(tag, value, false);
-    }
-
-    void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
-        if (value == null) {
-            if (this.sliceTags != null) this.sliceTags = this.sliceTags.remove(tag);
-        } else {
-            final SAMBinaryTagAndValue tmp;
-            if (!isUnsignedArray) {
-                tmp = new SAMBinaryTagAndValue(tag, value);
-            } else {
-                tmp = new SAMBinaryTagAndUnsignedArrayValue(tag, value);
-            }
-            if (this.sliceTags == null) this.sliceTags = tmp;
-            else this.sliceTags = this.sliceTags.insert(tmp);
-        }
-    }
-
-    public boolean isMapped() {
-        return sequenceId > SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-    }
-
-    public boolean isMultiref() {
-        return sequenceId == Slice.MULTI_REFERENCE;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/SliceIO.java b/src/main/java/htsjdk/samtools/cram/structure/SliceIO.java
deleted file mode 100644
index 4ccbb36..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/SliceIO.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.BinaryTagCodec;
-import htsjdk.samtools.SAMBinaryTagAndValue;
-import htsjdk.samtools.SAMTagUtil;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.io.CramArray;
-import htsjdk.samtools.cram.io.ITF8;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.cram.io.LTF8;
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.Log;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.HashMap;
-
-class SliceIO {
-    private static final Log log = Log.getInstance(SliceIO.class);
-
-    private static void readSliceHeadBlock(final int major, final Slice slice, final InputStream inputStream) throws IOException {
-        slice.headerBlock = Block.readFromInputStream(major, inputStream);
-        parseSliceHeaderBlock(major, slice);
-    }
-
-    private static void parseSliceHeaderBlock(final int major, final Slice slice) throws IOException {
-        final InputStream inputStream = new ByteArrayInputStream(slice.headerBlock.getRawContent());
-
-        slice.sequenceId = ITF8.readUnsignedITF8(inputStream);
-        slice.alignmentStart = ITF8.readUnsignedITF8(inputStream);
-        slice.alignmentSpan = ITF8.readUnsignedITF8(inputStream);
-        slice.nofRecords = ITF8.readUnsignedITF8(inputStream);
-        slice.globalRecordCounter = LTF8.readUnsignedLTF8(inputStream);
-        slice.nofBlocks = ITF8.readUnsignedITF8(inputStream);
-
-        slice.contentIDs = CramArray.array(inputStream);
-        slice.embeddedRefBlockContentID = ITF8.readUnsignedITF8(inputStream);
-        slice.refMD5 = new byte[16];
-        InputStreamUtils.readFully(inputStream, slice.refMD5, 0, slice.refMD5.length);
-
-        final byte[] bytes = InputStreamUtils.readFully(inputStream);
-
-        if (major >= CramVersions.CRAM_v3.major) {
-            slice.sliceTags = BinaryTagCodec.readTags(bytes, 0, bytes.length, ValidationStringency.DEFAULT_STRINGENCY);
-
-            SAMBinaryTagAndValue tags = slice.sliceTags;
-            while (tags != null) {
-                log.debug(String.format("Found slice tag: %s", SAMTagUtil.getSingleton().makeStringTag(tags.tag)));
-                tags = tags.getNext();
-            }
-        }
-    }
-
-    private static byte[] createSliceHeaderBlockContent(final int major, final Slice slice) throws IOException {
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        ITF8.writeUnsignedITF8(slice.sequenceId, byteArrayOutputStream);
-        ITF8.writeUnsignedITF8(slice.alignmentStart, byteArrayOutputStream);
-        ITF8.writeUnsignedITF8(slice.alignmentSpan, byteArrayOutputStream);
-        ITF8.writeUnsignedITF8(slice.nofRecords, byteArrayOutputStream);
-        LTF8.writeUnsignedLTF8(slice.globalRecordCounter, byteArrayOutputStream);
-        ITF8.writeUnsignedITF8(slice.nofBlocks, byteArrayOutputStream);
-
-        slice.contentIDs = new int[slice.external.size()];
-        int i = 0;
-        for (final int id : slice.external.keySet())
-            slice.contentIDs[i++] = id;
-        CramArray.write(slice.contentIDs, byteArrayOutputStream);
-        ITF8.writeUnsignedITF8(slice.embeddedRefBlockContentID, byteArrayOutputStream);
-        byteArrayOutputStream.write(slice.refMD5 == null ? new byte[16] : slice.refMD5);
-
-        if (major >= CramVersions.CRAM_v3.major) {
-            if (slice.sliceTags != null) {
-                final BinaryCodec binaryCoded = new BinaryCodec(byteArrayOutputStream);
-                final BinaryTagCodec binaryTagCodec = new BinaryTagCodec(binaryCoded);
-                SAMBinaryTagAndValue samBinaryTagAndValue = slice.sliceTags;
-                do {
-                    log.debug("Writing slice tag: " + SAMTagUtil.getSingleton().makeStringTag(samBinaryTagAndValue.tag));
-                    binaryTagCodec.writeTag(samBinaryTagAndValue.tag, samBinaryTagAndValue.value, samBinaryTagAndValue.isUnsignedArray());
-                } while ((samBinaryTagAndValue = samBinaryTagAndValue.getNext()) != null);
-                // BinaryCodec doesn't seem to cache things.
-                // In any case, not calling baseCodec.close() because it's behaviour is
-                // irrelevant here.
-            }
-        }
-
-        return byteArrayOutputStream.toByteArray();
-    }
-
-    private static void readSliceBlocks(final int major, final Slice slice, final InputStream inputStream) throws IOException {
-        slice.external = new HashMap<Integer, Block>();
-        for (int i = 0; i < slice.nofBlocks; i++) {
-            final Block block = Block.readFromInputStream(major, inputStream);
-
-            switch (block.getContentType()) {
-                case CORE:
-                    slice.coreBlock = block;
-                    break;
-                case EXTERNAL:
-                    if (slice.embeddedRefBlockContentID == block.getContentId()) slice.embeddedRefBlock = block;
-                    slice.external.put(block.getContentId(), block);
-                    break;
-
-                default:
-                    throw new RuntimeException("Not a slice block, content type id " + block.getContentType().name());
-            }
-        }
-    }
-
-    public static void write(final int major, final Slice slice, final OutputStream outputStream) throws IOException {
-
-        slice.nofBlocks = 1 + slice.external.size() + (slice.embeddedRefBlock == null ? 0 : 1);
-
-        {
-            slice.contentIDs = new int[slice.external.size()];
-            final int i = 0;
-            for (final int id : slice.external.keySet())
-                slice.contentIDs[i] = id;
-        }
-
-        slice.headerBlock = Block.buildNewSliceHeaderBlock(createSliceHeaderBlockContent(major, slice));
-        slice.headerBlock.write(major, outputStream);
-
-        slice.coreBlock.write(major, outputStream);
-        for (final Block block : slice.external.values())
-            block.write(major, outputStream);
-    }
-
-    public static void read(final int major, final Slice slice, final InputStream inputStream) throws IOException {
-        readSliceHeadBlock(major, slice, inputStream);
-        readSliceBlocks(major, slice, inputStream);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/cram/structure/SubstitutionMatrix.java b/src/main/java/htsjdk/samtools/cram/structure/SubstitutionMatrix.java
deleted file mode 100644
index d9948be..0000000
--- a/src/main/java/htsjdk/samtools/cram/structure/SubstitutionMatrix.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * ****************************************************************************
- * Copyright 2013 EMBL-EBI
- * <p/>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ****************************************************************************
- */
-package htsjdk.samtools.cram.structure;
-
-import java.util.Arrays;
-import java.util.Comparator;
-
-public class SubstitutionMatrix {
-    public static final byte[] BASES = new byte[]{'A', 'C', 'G', 'T', 'N'};
-    private static final byte[] BASES_LC = new byte[]{'a', 'c', 'g', 't', 'n'};
-    private static final byte[] ORDER;
-
-    static {
-        ORDER = new byte[255];
-        Arrays.fill(ORDER, (byte) -1);
-        ORDER['A'] = 0;
-        ORDER['C'] = 1;
-        ORDER['G'] = 2;
-        ORDER['T'] = 3;
-        ORDER['N'] = 4;
-    }
-
-    private byte[] bytes = new byte[5];
-    private final byte[][] codes = new byte[255][255];
-    private final byte[][] bases = new byte[255][255];
-
-    public SubstitutionMatrix(final long[][] frequencies) {
-        for (final byte base : BASES) {
-            bytes[ORDER[base]] = rank(base, frequencies[base]);
-        }
-        for (final byte[] base : bases) Arrays.fill(base, (byte) 'N');
-
-        for (int i = 0; i < BASES.length; i++) {
-            final byte r = BASES[i];
-            for (final byte b : BASES) {
-                if (r == b)
-                    continue;
-                bases[r][codes[r][b]] = b;
-                bases[BASES_LC[i]][codes[r][b]] = b;
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder stringBuilder = new StringBuilder();
-        for (final byte r : "ACGTN".getBytes()) {
-            stringBuilder.append((char) r);
-            stringBuilder.append(':');
-            for (int i = 0; i < 4; i++) {
-                stringBuilder.append((char) bases[r][i]);
-            }
-            stringBuilder.append('\t');
-        }
-        return stringBuilder.toString();
-    }
-
-    public SubstitutionMatrix(final byte[] matrix) {
-        this.bytes = matrix;
-
-        for (final byte[] base : bases) Arrays.fill(base, (byte) 'N');
-
-        bases['A'][(bytes[0] >> 6) & 3] = 'C';
-        bases['A'][(bytes[0] >> 4) & 3] = 'G';
-        bases['A'][(bytes[0] >> 2) & 3] = 'T';
-        bases['A'][(bytes[0]) & 3] = 'N';
-        System.arraycopy(bases['A'], 0, bases['a'], 0, 4);
-
-        bases['C'][(bytes[1] >> 6) & 3] = 'A';
-        bases['C'][(bytes[1] >> 4) & 3] = 'G';
-        bases['C'][(bytes[1] >> 2) & 3] = 'T';
-        bases['C'][(bytes[1]) & 3] = 'N';
-        System.arraycopy(bases['C'], 0, bases['c'], 0, 4);
-
-        bases['G'][(bytes[2] >> 6) & 3] = 'A';
-        bases['G'][(bytes[2] >> 4) & 3] = 'C';
-        bases['G'][(bytes[2] >> 2) & 3] = 'T';
-        bases['G'][(bytes[2]) & 3] = 'N';
-        System.arraycopy(bases['G'], 0, bases['g'], 0, 4);
-
-        bases['T'][(bytes[3] >> 6) & 3] = 'A';
-        bases['T'][(bytes[3] >> 4) & 3] = 'C';
-        bases['T'][(bytes[3] >> 2) & 3] = 'G';
-        bases['T'][(bytes[3]) & 3] = 'N';
-        System.arraycopy(bases['T'], 0, bases['t'], 0, 4);
-
-        bases['N'][(bytes[4] >> 6) & 3] = 'A';
-        bases['N'][(bytes[4] >> 4) & 3] = 'C';
-        bases['N'][(bytes[4] >> 2) & 3] = 'G';
-        bases['N'][(bytes[4]) & 3] = 'T';
-
-        for (final byte refBase : BASES) {
-            for (byte code = 0; code < 4; code++)
-                codes[refBase][bases[refBase][code]] = code;
-        }
-    }
-
-    public byte[] getEncodedMatrix() {
-        return bytes;
-    }
-
-    private static class SubCode {
-        final byte base;
-        long freq;
-        byte rank;
-
-        public SubCode(final byte base, final long freq) {
-            this.base = base;
-            this.freq = freq;
-        }
-
-    }
-
-    private static final Comparator<SubCode> comparator = new Comparator<SubstitutionMatrix.SubCode>() {
-
-        @Override
-        public int compare(final SubCode o1, final SubCode o2) {
-            if (o1.freq != o2.freq)
-                return (int) (o2.freq - o1.freq);
-            return ORDER[o1.base] - ORDER[o2.base];
-        }
-    };
-
-    private byte rank(final byte refBase, final long[] frequencies) {
-        // in alphabetical order:
-        final SubCode[] subCodes = new SubCode[4];
-        {
-            int i = 0;
-            for (final byte base : BASES) {
-                if (refBase == base)
-                    continue;
-                subCodes[i++] = new SubCode(base, frequencies[base]);
-            }
-        }
-
-        Arrays.sort(subCodes, comparator);
-
-        for (byte i = 0; i < subCodes.length; i++)
-            subCodes[i].rank = i;
-
-        for (final SubCode subCode1 : subCodes) subCode1.freq = 0;
-
-        Arrays.sort(subCodes, comparator);
-
-        byte rank = 0;
-        for (final SubCode subCode : subCodes) {
-            rank <<= 2;
-            rank |= subCode.rank;
-        }
-
-        for (final SubCode s : subCodes)
-            codes[refBase][s.base] = s.rank;
-
-        return rank;
-    }
-
-    public byte code(final byte refBase, final byte readBase) {
-        return codes[refBase][readBase];
-    }
-
-    public byte base(final byte refBase, final byte code) {
-        return bases[refBase][code];
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/example/ExampleSamUsage.java b/src/main/java/htsjdk/samtools/example/ExampleSamUsage.java
deleted file mode 100644
index 925e053..0000000
--- a/src/main/java/htsjdk/samtools/example/ExampleSamUsage.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.example;
-
-import htsjdk.samtools.DefaultSAMRecordFactory;
-import htsjdk.samtools.SAMFileWriter;
-import htsjdk.samtools.SAMFileWriterFactory;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SamInputResource;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class ExampleSamUsage {
-    public static SeekableStream myIndexSeekableStream() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Example usages of {@link htsjdk.samtools.SamReaderFactory} */
-    public void openSamExamples() throws MalformedURLException {
-        /**
-         * Simplest case
-         */
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File("/my.bam"));
-
-        /**
-         * With different reader options
-         */
-        final SamReader readerFromConfiguredFactory =
-                SamReaderFactory.make()
-                        .enable(SamReaderFactory.Option.DONT_MEMORY_MAP_INDEX)
-                        .validationStringency(ValidationStringency.SILENT)
-                        .samRecordFactory(DefaultSAMRecordFactory.getInstance())
-                        .open(new File("/my.bam"));
-
-        /**
-         * With a more complicated source 
-         */
-        final SamReader complicatedReader =
-                SamReaderFactory.makeDefault()
-                        .open(
-                                SamInputResource.of(new URL("http://broadinstitute.org/my.bam")).index(myIndexSeekableStream())
-                        );
-
-        /**
-         * Broken down
-         */
-        final SamReaderFactory factory =
-                SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS).validationStringency(ValidationStringency.LENIENT);
-
-        final SamInputResource resource = SamInputResource.of(new File("/my.bam")).index(new URL("http://broadinstitute.org/my.bam.bai"));
-
-        final SamReader myReader = factory.open(resource);
-
-        for (final SAMRecord samRecord : myReader) {
-            System.err.print(samRecord);
-        }
-
-    }
-
-    /**
-     * Read a SAM or BAM file, convert each read name to upper case, and write a new
-     * SAM or BAM file.
-     */
-    public void convertReadNamesToUpperCase(final File inputSamOrBamFile, final File outputSamOrBamFile) throws IOException {
-
-        final SamReader reader = SamReaderFactory.makeDefault().open(inputSamOrBamFile);
-
-        // makeSAMorBAMWriter() writes a file in SAM text or BAM binary format depending
-        // on the file extension, which must be either .sam or .bam.
-
-        // Since the SAMRecords will be written in the same order as they appear in the input file,
-        // and the output file is specified as having the same sort order (as specified in
-        // SAMFileHeader.getSortOrder(), presorted == true.  This is much more efficient than
-        // presorted == false, if coordinate or queryname sorting is specified, because the SAMRecords
-        // can be written to the output file directly rather than being written to a temporary file
-        // and sorted after all records have been sent to outputSam.
-
-        final SAMFileWriter outputSam = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(),
-                true, outputSamOrBamFile);
-
-        for (final SAMRecord samRecord : reader) {
-            // Convert read name to upper case.
-            samRecord.setReadName(samRecord.getReadName().toUpperCase());
-            outputSam.addAlignment(samRecord);
-        }
-
-        outputSam.close();
-        reader.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/example/PrintReadsExample.java b/src/main/java/htsjdk/samtools/example/PrintReadsExample.java
deleted file mode 100755
index 7bbec0a..0000000
--- a/src/main/java/htsjdk/samtools/example/PrintReadsExample.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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
- */
-package htsjdk.samtools.example;
-
-import htsjdk.samtools.*;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.ProgressLogger;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-/**
- * This is a example program showing how to use SAM readers and (optionally) writers.
- * It's also useful for measuring time.
- * An example invocation is:
- * <code>java -cp dist/htsjdk-2.1.1.jar htsjdk.samtools.example.PrintReadsExample in.bam false a.bam</code>
- * Arguments:
- * - the first argument is the input file (SAM or BAM)
- * - the second argument is a boolean (true or false) that indicates whether reads are to be eagerly decoded (useful for benchmarking)
- * - the third argument is optional and is the name of the output file (nothing gets written if this argument is missing)
- */
-public final class PrintReadsExample {
-    private PrintReadsExample() {
-    }
-
-    private static final Log log = Log.getInstance(PrintReadsExample.class);
-
-    public static void main(String[] args) throws IOException {
-        if (args.length < 2) {
-            System.out.println("Usage: " + PrintReadsExample.class.getCanonicalName() + " inFile eagerDecode [outFile]");
-            System.exit(1);
-        }
-        final File inputFile = new File(args[0]);
-        final boolean eagerDecode = Boolean.parseBoolean(args[1]); //useful to test (realistic) scenarios in which every record is always fully decoded.
-        final File outputFile = args.length >= 3 ? new File(args[2]) : null;
-
-        final long start = System.currentTimeMillis();
-
-        log.info("Start with args:" + Arrays.toString(args));
-        printConfigurationInfo();
-
-        SamReaderFactory readerFactory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
-        if (eagerDecode) {
-            readerFactory = readerFactory.enable(SamReaderFactory.Option.EAGERLY_DECODE);
-        }
-
-        try (final SamReader reader = readerFactory.open(inputFile)) {
-            final SAMFileHeader header = reader.getFileHeader();
-            try (final SAMFileWriter writer = outputFile != null ? new SAMFileWriterFactory().makeBAMWriter(header, true, outputFile) : null) {
-                final ProgressLogger pl = new ProgressLogger(log, 1000000);
-                for (final SAMRecord record : reader) {
-                    if (writer != null) {
-                        writer.addAlignment(record);
-                    }
-                    pl.record(record);
-                }
-            }
-        }
-        final long end = System.currentTimeMillis();
-        log.info(String.format("Done. Elapsed time %.3f seconds", (end - start) / 1000.0));
-    }
-
-    private static void printConfigurationInfo() throws IOException {
-        log.info("Executing as " +
-                System.getProperty("user.name") + '@' + InetAddress.getLocalHost().getHostName() +
-                " on " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") +
-                ' ' + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") +
-                ' ' + System.getProperty("java.runtime.version"));
-
-        final List<String> list = Defaults.allDefaults().entrySet().stream().map(e -> e.getKey() + ':' + e.getValue()).collect(Collectors.toList());
-        log.info(String.join(" ", list));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/AsyncFastqWriter.java b/src/main/java/htsjdk/samtools/fastq/AsyncFastqWriter.java
deleted file mode 100644
index dee0a16..0000000
--- a/src/main/java/htsjdk/samtools/fastq/AsyncFastqWriter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package htsjdk.samtools.fastq;
-
-import htsjdk.samtools.util.AbstractAsyncWriter;
-
-/**
- * Implementation of a FastqWriter that provides asynchronous output.
- * @author Tim Fennell
- */
-public class AsyncFastqWriter extends AbstractAsyncWriter<FastqRecord> implements FastqWriter {
-    private final FastqWriter writer;
-
-    public AsyncFastqWriter(final FastqWriter out, final int queueSize) {
-        super(queueSize);
-        this.writer = out;
-    }
-
-    @Override protected String getThreadNamePrefix() { return "FastqWriterThread-"; }
-    @Override protected void synchronouslyWrite(final FastqRecord item) { this.writer.write(item); }
-    @Override protected void synchronouslyClose() { this.writer.close(); }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/BasicFastqWriter.java b/src/main/java/htsjdk/samtools/fastq/BasicFastqWriter.java
deleted file mode 100644
index 8a5afd3..0000000
--- a/src/main/java/htsjdk/samtools/fastq/BasicFastqWriter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.fastq;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.File;
-import java.io.Flushable;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * In general FastqWriterFactory should be used so that AsyncFastqWriter can be enabled, but there are some
- * cases in which that behavior is explicitly not wanted.
- */
-public class BasicFastqWriter implements FastqWriter,Flushable {
-    private final String path;
-    private final PrintStream writer;
-
-    public BasicFastqWriter(final File file) {
-        this(file, false);
-    }
-
-    public BasicFastqWriter(final File file, final boolean createMd5) {
-        this(file, new PrintStream(IOUtil.maybeBufferOutputStream(maybeMd5Wrap(file, createMd5))));
-    }
-
-    private BasicFastqWriter(final File file, final PrintStream writer) {
-        this.path = (file != null? file.getAbsolutePath(): "");
-        this.writer = writer;
-    }
-
-    public BasicFastqWriter(final PrintStream writer) {
-        this(null, writer);
-    }
-
-    @Override
-    public void write(final FastqRecord rec) {
-        writer.print(FastqConstants.SEQUENCE_HEADER);
-        writer.println(rec.getReadHeader());
-        writer.println(rec.getReadString());
-        writer.print(FastqConstants.QUALITY_HEADER);
-        writer.println(rec.getBaseQualityHeader() == null ? "" : rec.getBaseQualityHeader());
-        writer.println(rec.getBaseQualityString());
-        if (writer.checkError()) {
-            throw new SAMException("Error in writing fastq file " + path);
-        }
-    }
-
-    @Override
-    public void flush() {
-        writer.flush();
-    }
-
-    @Override
-    public void close() {
-        writer.close();
-    }
-
-    private static OutputStream maybeMd5Wrap(final File file, final boolean createMd5) {
-        if (createMd5) {
-            return IOUtil.openFileForMd5CalculatingWriting(file);
-        } else {
-            return IOUtil.openFileForWriting(file);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/FastqConstants.java b/src/main/java/htsjdk/samtools/fastq/FastqConstants.java
deleted file mode 100644
index f5d4150..0000000
--- a/src/main/java/htsjdk/samtools/fastq/FastqConstants.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.fastq;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class FastqConstants {
-    public static final String SEQUENCE_HEADER = "@" ;
-    public static final String QUALITY_HEADER = "+" ;
-    
-    public enum FastqExtensions {
-        FASTQ(".fastq"),
-        FASTQ_GZ(".fastq.gz"),
-        FQ(".fq"),
-        FQ_GZ(".fq.gz"),
-        BFQ(".bfq");
-        
-        private final String extension;
-        
-        private FastqExtensions(final String extension) {
-            this.extension = extension;
-        }
-        
-        public String getExtension() { return this.extension; }
-        
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/FastqReader.java b/src/main/java/htsjdk/samtools/fastq/FastqReader.java
deleted file mode 100755
index 8086dfa..0000000
--- a/src/main/java/htsjdk/samtools/fastq/FastqReader.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.fastq;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.BufferedReader;
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Reads a FASTQ file with four lines per record.
- * WARNING: Despite the fact that this class implements Iterable, calling iterator() method does not
- * start iteration from the beginning of the file.  Developers should probably not call iterator()
- * directly.  It is provided so that this class can be used in Java for-each loop.
- */
-public class FastqReader implements Iterator<FastqRecord>, Iterable<FastqRecord>, Closeable {
-    final private File fastqFile;
-    final private BufferedReader reader;
-    private FastqRecord nextRecord;
-    private int line=1;
-
-    final private boolean skipBlankLines;
-
-    public FastqReader(final File file) {
-        this(file,false);
-    }
-    
-    /**
-     * Constructor
-     * @param file of FASTQ to read read. Will be opened with htsjdk.samtools.util.IOUtil.openFileForBufferedReading
-     * @param skipBlankLines should we skip blank lines ?
-     */
-    public FastqReader(final File file, final boolean skipBlankLines) {
-        this.skipBlankLines=skipBlankLines;
-        fastqFile = file;
-        reader = IOUtil.openFileForBufferedReading(fastqFile);
-        nextRecord = readNextRecord();
-    }
-
-    public FastqReader(final BufferedReader reader) {
-        this(null, reader);
-    }
-
-    /**
-     * Constructor
-     * @param file Name of FASTQ being read, or null if not known.
-     * @param reader input reader . Will be closed by the close method
-     * @param skipBlankLines should we skip blank lines ?
-     */
-    public FastqReader(final File file, final BufferedReader reader,boolean skipBlankLines) {
-        this.fastqFile = file;
-        this.reader = reader;
-        this.nextRecord = readNextRecord();
-        this.skipBlankLines = skipBlankLines;
-    }
-
-    public FastqReader(final File file, final BufferedReader reader) {
-        this(file,reader,false);
-    }
-
-    private FastqRecord readNextRecord() {
-        try {
-
-            // Read sequence header
-            final String seqHeader = readLineConditionallySkippingBlanks();
-            if (seqHeader == null) return null ;
-            if (StringUtil.isBlank(seqHeader)) {
-                throw new SAMException(error("Missing sequence header"));
-            }
-            if (!seqHeader.startsWith(FastqConstants.SEQUENCE_HEADER)) {
-                throw new SAMException(error("Sequence header must start with "+ FastqConstants.SEQUENCE_HEADER+": "+seqHeader));
-            }
-
-            // Read sequence line
-            final String seqLine = readLineConditionallySkippingBlanks();
-            checkLine(seqLine,"sequence line");
-
-            // Read quality header
-            final String qualHeader = readLineConditionallySkippingBlanks();
-            checkLine(qualHeader,"quality header");
-            if (!qualHeader.startsWith(FastqConstants.QUALITY_HEADER)) {
-                throw new SAMException(error("Quality header must start with "+ FastqConstants.QUALITY_HEADER+": "+qualHeader));
-            }
-
-            // Read quality line
-            final String qualLine = readLineConditionallySkippingBlanks();
-            checkLine(qualLine,"quality line");
-
-            // Check sequence and quality lines are same length
-            if (seqLine.length() != qualLine.length()) {
-                throw new SAMException(error("Sequence and quality line must be the same length"));
-            }
-
-            final FastqRecord frec = new FastqRecord(seqHeader.substring(1, seqHeader.length()), seqLine,
-                    qualHeader.substring(1, qualHeader.length()), qualLine);
-            line += 4 ;
-            return frec ;
-
-        } catch (IOException e) {
-            throw new SAMException(String.format("Error reading fastq '%s'", getAbsolutePath()), e);
-        }
-    }
-
-    public boolean hasNext() { return nextRecord != null; }
-
-    public FastqRecord next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException("next() called when !hasNext()");
-        }
-        final FastqRecord rec = nextRecord;
-        nextRecord = readNextRecord();
-        return rec;
-    }
-
-    public void remove() { throw new UnsupportedOperationException("Unsupported operation"); }
-
-    /**
-     * WARNING: Despite the fact that this class implements Iterable, calling iterator() method does not
-     * start iteration from the beginning of the file.  Developers should probably not call iterator()
-     * directly.  It is provided so that this class can be used in Java for-each loop.
-     */
-    public Iterator<FastqRecord> iterator() { return this; }
-
-    public int getLineNumber() { return line ; }
-
-
-    /**
-     * @return Name of FASTQ being read, or null if not known.
-     */
-    public File getFile() { return fastqFile ; }
-
-    @Override
-    public void close() {
-        try {
-            reader.close();
-        } catch (IOException e) {
-            throw new SAMException("IO problem in fastq file "+getAbsolutePath(), e);
-        }
-    }
-
-    private void checkLine(final String line, final String kind) {
-        if (line == null) {
-            throw new SAMException(error("File is too short - missing "+kind+" line"));
-        }
-        if (StringUtil.isBlank(line)) {
-            throw new SAMException(error("Missing "+kind));
-        }
-    }
-
-    private String error(final String msg) {
-        return msg + " at line "+line+" in fastq "+getAbsolutePath();
-    }
-
-    private String getAbsolutePath() {
-        if (fastqFile == null) return "";
-        else return fastqFile.getAbsolutePath();
-    }
-
-    private String readLineConditionallySkippingBlanks() throws IOException {
-        String line;
-        do {
-            line = reader.readLine();
-            if (line == null) return line;
-        } while(skipBlankLines && StringUtil.isBlank(line));
-        return line;
-    }
-
-    @Override
-    public String toString() {
-        return "FastqReader["+(this.fastqFile == null?"":this.fastqFile)+ " Line:"+getLineNumber()+"]";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/FastqRecord.java b/src/main/java/htsjdk/samtools/fastq/FastqRecord.java
deleted file mode 100755
index b1d3f75..0000000
--- a/src/main/java/htsjdk/samtools/fastq/FastqRecord.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.fastq;
-
-import java.io.Serializable;
-
-/**
- * Represents a fastq record, fairly literally, i.e. without any conversion.
- */
-public class FastqRecord implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private final String seqHeaderPrefix;
-    private final String seqLine;
-    private final String qualHeaderPrefix;
-    private final String qualLine;
-
-    public FastqRecord(final String seqHeaderPrefix, final String seqLine, final String qualHeaderPrefix, final String qualLine) {
-        if (seqHeaderPrefix != null && !seqHeaderPrefix.isEmpty()) this.seqHeaderPrefix = seqHeaderPrefix;
-        else this.seqHeaderPrefix = null;
-        if (qualHeaderPrefix != null && !qualHeaderPrefix.isEmpty()) this.qualHeaderPrefix = qualHeaderPrefix;
-        else this.qualHeaderPrefix = null;
-        this.seqLine = seqLine ;
-        this.qualLine = qualLine ;
-    }
-    
-    /** copy constructor */
-    public FastqRecord(final FastqRecord other) {
-        if( other == null ) throw new IllegalArgumentException("new FastqRecord(null)");
-        this.seqHeaderPrefix = other.seqHeaderPrefix;
-        this.seqLine = other.seqLine;
-        this.qualHeaderPrefix = other.qualHeaderPrefix;
-        this.qualLine = other.qualLine;
-    }
-
-    /** @return the read name */
-    public String getReadHeader() { return seqHeaderPrefix; }
-    /** @return the read DNA sequence */
-    public String getReadString() { return seqLine; }
-    /** @return the quality header */
-    public String getBaseQualityHeader() { return qualHeaderPrefix; }
-    /** @return the quality string */
-    public String getBaseQualityString() { return qualLine; }
-    /** shortcut to getReadString().length() */
-    public int length() { return this.seqLine==null?0:this.seqLine.length();}
-    
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime
-                * result
-                + ((qualHeaderPrefix == null) ? 0 : qualHeaderPrefix.hashCode());
-        result = prime * result
-                + ((qualLine == null) ? 0 : qualLine.hashCode());
-        result = prime * result
-                + ((seqHeaderPrefix == null) ? 0 : seqHeaderPrefix.hashCode());
-        result = prime * result + ((seqLine == null) ? 0 : seqLine.hashCode());
-        return result;
-    }
-    
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        FastqRecord other = (FastqRecord) obj;
-        if (seqLine == null) {
-            if (other.seqLine != null)
-                return false;
-        } else if (!seqLine.equals(other.seqLine))
-            return false;
-        if (qualHeaderPrefix == null) {
-            if (other.qualHeaderPrefix != null)
-                return false;
-        } else if (!qualHeaderPrefix.equals(other.qualHeaderPrefix))
-            return false;
-        if (qualLine == null) {
-            if (other.qualLine != null)
-                return false;
-        } else if (!qualLine.equals(other.qualLine))
-            return false;
-        if (seqHeaderPrefix == null) {
-            if (other.seqHeaderPrefix != null)
-                return false;
-        } else if (!seqHeaderPrefix.equals(other.seqHeaderPrefix))
-            return false;
-        
-        return true;
-    }
-    
-    @Override
-    public String toString() {
-        return new StringBuilder().
-                append(FastqConstants.SEQUENCE_HEADER).append(this.seqHeaderPrefix==null?"":this.seqHeaderPrefix).append('\n').
-                append(this.seqLine==null?"":this.seqLine).append('\n').
-                append(FastqConstants.QUALITY_HEADER).append(this.qualHeaderPrefix==null?"":this.qualHeaderPrefix).append('\n').
-                append(this.qualLine==null?"":this.qualLine).
-                toString();
-        }
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/FastqWriter.java b/src/main/java/htsjdk/samtools/fastq/FastqWriter.java
deleted file mode 100644
index e37aec5..0000000
--- a/src/main/java/htsjdk/samtools/fastq/FastqWriter.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package htsjdk.samtools.fastq;
-
-import java.io.Closeable;
-
-/**
- * Simple interface for a class that can write out fastq records.
- *
- * @author Tim Fennell
- */
-public interface FastqWriter extends Closeable {
-    void write(final FastqRecord rec);
-    void close();
-}
diff --git a/src/main/java/htsjdk/samtools/fastq/FastqWriterFactory.java b/src/main/java/htsjdk/samtools/fastq/FastqWriterFactory.java
deleted file mode 100644
index 273e352..0000000
--- a/src/main/java/htsjdk/samtools/fastq/FastqWriterFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package htsjdk.samtools.fastq;
-
-import htsjdk.samtools.Defaults;
-
-import java.io.File;
-
-/**
- * Factory class for creating FastqWriter objects.
- *
- * @author Tim Fennell
- */
-public class FastqWriterFactory {
-    boolean useAsyncIo = Defaults.USE_ASYNC_IO_WRITE_FOR_SAMTOOLS;
-    boolean createMd5  = Defaults.CREATE_MD5;
-
-    /** Sets whether or not to use async io (i.e. a dedicated thread per writer. */
-    public void setUseAsyncIo(final boolean useAsyncIo) { this.useAsyncIo = useAsyncIo; }
-
-    /** If true, compute MD5 and write appropriately-named file when file is closed. */
-    public void setCreateMd5(final boolean createMd5) { this.createMd5 = createMd5; }
-
-    public FastqWriter newWriter(final File out) {
-        final FastqWriter writer = new BasicFastqWriter(out, createMd5);
-        if (useAsyncIo) {
-            return new AsyncFastqWriter(writer, AsyncFastqWriter.DEFAULT_QUEUE_SIZE);
-        }
-        else {
-            return writer;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/AbstractJavascriptFilter.java b/src/main/java/htsjdk/samtools/filter/AbstractJavascriptFilter.java
deleted file mode 100644
index 9163735..0000000
--- a/src/main/java/htsjdk/samtools/filter/AbstractJavascriptFilter.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-import javax.script.Bindings;
-import javax.script.Compilable;
-import javax.script.CompiledScript;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
-import javax.script.SimpleBindings;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.RuntimeScriptException;
-
-/**
- * Javascript filter with HEADER type containing TYPE records. contains two
- * static method to get a SAM Read filter or a VariantFilter.
- * 
- * warning: tools, like galaxy, using this class are not safe because a script
- * can access the filesystem.
- * 
- * @author Pierre Lindenbaum PhD
- */
-public abstract class AbstractJavascriptFilter<HEADER, TYPE> {
-    public static final String DEFAULT_HEADER_KEY = "header";
-    /** compiled user script */
-    private CompiledScript script = null;
-
-    /** javascript bindings */
-    protected Bindings bindings;
-
-    /**
-     * constructor using a java.io.File script, compiles the script, puts
-     * 'header' in the bindings
-     */
-    protected AbstractJavascriptFilter(final File scriptFile, final HEADER header) throws IOException {
-        this(new FileReader(scriptFile), header);
-    }
-
-    /**
-     * constructor using a java.lang.String script, compiles the script, puts
-     * 'header' in the bindings
-     */
-    protected AbstractJavascriptFilter(final String scriptExpression, final HEADER header) {
-        this(new StringReader(scriptExpression), header);
-    }
-
-    /**
-     * Constructor, compiles script, put header in the bindings
-     * 
-     * @param scriptReader
-     *            reader containing the script. will be closed.
-     * @param header
-     *            the header to be injected in the javascript context
-     */
-    protected AbstractJavascriptFilter(final Reader scriptReader, final HEADER header) {
-        final ScriptEngineManager manager = new ScriptEngineManager();
-        /* get javascript engine */
-        final ScriptEngine engine = manager.getEngineByName("js");
-        if (engine == null) {
-            CloserUtil.close(scriptReader);
-            throw new RuntimeScriptException("The embedded 'javascript' engine is not available in java. "
-                    + "Do you use the SUN/Oracle Java Runtime ?");
-        }
-        if (scriptReader == null) {
-            throw new RuntimeScriptException("missing ScriptReader.");
-        }
-        
-        try {
-            final Compilable compilingEngine = getCompilable(engine);
-            this.script = compilingEngine.compile(scriptReader);
-        } catch (ScriptException err) {
-            throw new RuntimeScriptException("Script error in input", err);
-        } finally {
-            CloserUtil.close(scriptReader);
-        }
-
-        /*
-         * create the javascript bindings and put the file header in that
-         * context
-         */
-        this.bindings = new SimpleBindings();
-        this.bindings.put(DEFAULT_HEADER_KEY, header);
-    }
-
-    /** return a javascript engine as a Compilable */
-    private static Compilable getCompilable(final ScriptEngine engine) {
-        if (!(engine instanceof Compilable)) {
-            throw new IllegalStateException("The current javascript engine (" + engine.getClass()
-                    + ") cannot be cast to Compilable. " + "Do you use the SUN/Oracle Java Runtime ?");
-        }
-        return Compilable.class.cast(engine);
-    }
-
-    /** returns key used for header binding */
-    public String getHeaderKey() {
-        return DEFAULT_HEADER_KEY;
-    }
-
-    /** returns key used for record binding */
-    public abstract String getRecordKey();
-
-    /**
-     * Evaluates this predicate on the given argument
-     * 
-     * @param record
-     *            the record to test. It will be inject in the javascript
-     *            context using getRecordKey()
-     * @return true (keep) if the user script returned 1 or true, else false
-     *         (reject).
-     */
-    protected boolean accept(final TYPE record) {
-        try {
-            /* insert the record into the javascript context */
-            this.bindings.put(getRecordKey(), record);
-            /* get the result */
-            final Object result = this.script.eval(this.bindings);
-            if (result == null) {
-                return false;
-            } else if (result instanceof Boolean) {
-                return Boolean.TRUE.equals(result);
-            } else if (result instanceof Number) {
-                return (((Number) result).intValue() == 1);
-            } else {
-                return false;
-            }
-        } catch (ScriptException err) {
-            throw new RuntimeException(err);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/AggregateFilter.java b/src/main/java/htsjdk/samtools/filter/AggregateFilter.java
deleted file mode 100644
index f396c59..0000000
--- a/src/main/java/htsjdk/samtools/filter/AggregateFilter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-import java.util.List;
-
-/**
- * Aggregates multiple filters and provides a method for applying them all to a given record with
- * one method call.
- *
- * $Id$
- */
-public class AggregateFilter implements SamRecordFilter {
-
-    private final List<SamRecordFilter> filters;
-
-    /**
-     * Constructor
-     * @param filters   the list of filters that this Aggregator applies
-     */
-    public AggregateFilter(final List<SamRecordFilter> filters) {
-        this.filters = filters;
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record    the SAMRecord to evaluate
-     * @return  true if the SAMRecord matches at least one filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        for (final SamRecordFilter filter : filters) {
-            if (filter.filterOut(record)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-         for (final SamRecordFilter filter : filters) {
-            if (filter.filterOut(first, second)) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/AlignedFilter.java b/src/main/java/htsjdk/samtools/filter/AlignedFilter.java
deleted file mode 100644
index c70453d..0000000
--- a/src/main/java/htsjdk/samtools/filter/AlignedFilter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter to either include or exclude aligned reads
- *
- * $Id$
- */
-public class AlignedFilter implements SamRecordFilter {
-
-    private boolean includeAligned = false;
-
-    public AlignedFilter(final boolean includeAligned) {
-        this.includeAligned = includeAligned;
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record the SAMRecord to evaluate
-     *
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        if (includeAligned) {
-            if (!record.getReadUnmappedFlag()) {
-                return false;
-            }
-        } else {
-            // exclude aligned
-            if (record.getReadUnmappedFlag()) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-
-        if (includeAligned) {
-            // both first and second must be mapped for it to not be filtered out
-            if (!first.getReadUnmappedFlag() && !second.getReadUnmappedFlag()) {
-                return false;
-            }
-        } else {
-            // exclude aligned - if either first or second is unmapped don't filter it out
-            if (first.getReadUnmappedFlag() || second.getReadUnmappedFlag()) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/filter/DuplicateReadFilter.java b/src/main/java/htsjdk/samtools/filter/DuplicateReadFilter.java
deleted file mode 100644
index c79b3cc..0000000
--- a/src/main/java/htsjdk/samtools/filter/DuplicateReadFilter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with DuplicateRead flag set
- *
- * $Id$
- */
-public class DuplicateReadFilter implements SamRecordFilter {
-    /**
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        return record.getDuplicateReadFlag();
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        throw new UnsupportedOperationException("Paired DuplicateReadFilter filter not implemented!");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/FailsVendorReadQualityFilter.java b/src/main/java/htsjdk/samtools/filter/FailsVendorReadQualityFilter.java
deleted file mode 100644
index 7c6825c..0000000
--- a/src/main/java/htsjdk/samtools/filter/FailsVendorReadQualityFilter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter for filtering out reads that do not pass the quality filter
- *
- * $Id$
- */
-public class FailsVendorReadQualityFilter implements SamRecordFilter {
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record    the SAMRecord to evaluate
-     * @return  true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        return record.getReadFailsVendorQualityCheckFlag();
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // if either fails, exclude them both
-        return (first.getReadFailsVendorQualityCheckFlag() || second.getReadFailsVendorQualityCheckFlag());
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/FilteringIterator.java b/src/main/java/htsjdk/samtools/filter/FilteringIterator.java
deleted file mode 100644
index 3ce9f96..0000000
--- a/src/main/java/htsjdk/samtools/filter/FilteringIterator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-import java.util.Iterator;
-
-/**
- * Filtering Iterator which takes a filter and an iterator and iterates through only those records
- * which are not rejected by the filter.
- * <p/>
- * $Id$
- *
- * @author Kathleen Tibbetts
- *
- * use {@link FilteringSamIterator} instead
- */
-
- at Deprecated /** use {@link FilteringSamIterator} instead **/
-public class FilteringIterator extends FilteringSamIterator{
-
-    public FilteringIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter, final boolean filterByPair) {
-        super(iterator, filter, filterByPair);
-    }
-
-    public FilteringIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter) {
-        super(iterator, filter);
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/filter/FilteringSamIterator.java b/src/main/java/htsjdk/samtools/filter/FilteringSamIterator.java
deleted file mode 100644
index 7ac1c0a..0000000
--- a/src/main/java/htsjdk/samtools/filter/FilteringSamIterator.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SamPairUtil;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.PeekableIterator;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Filtering Iterator which takes a filter and an iterator and iterates through only those records
- * which are not rejected by the filter.
- * <p/>
- * $Id$
- *
- * @author Kathleen Tibbetts
- */
-public class FilteringSamIterator implements CloseableIterator<SAMRecord> {
-
-    private final PeekableIterator<SAMRecord> iterator;
-    private final SamRecordFilter filter;
-    private boolean filterReadPairs = false;
-    private SAMRecord next = null;
-
-    /**
-     * Constructor
-     *
-     * @param iterator     the backing iterator
-     * @param filter       the filter (which may be a FilterAggregator)
-     * @param filterByPair if true, filter reads in pairs
-     */
-    public FilteringSamIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter,
-                                final boolean filterByPair) {
-
-        if (filterByPair && iterator instanceof SAMRecordIterator) {
-            ((SAMRecordIterator)iterator).assertSorted(SAMFileHeader.SortOrder.queryname);
-        }
-
-        this.iterator = new PeekableIterator<SAMRecord>(iterator);
-        this.filter = filter;
-        this.filterReadPairs = filterByPair;
-        next = getNextRecord();
-    }
-
-    /**
-     * Constructor
-     *
-     * @param iterator the backing iterator
-     * @param filter   the filter (which may be a FilterAggregator)
-     */
-    public FilteringSamIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter) {
-        this.iterator = new PeekableIterator<SAMRecord>(iterator);
-        this.filter = filter;
-        next = getNextRecord();
-    }
-
-    /**
-     * Returns true if the iteration has more elements.
-     *
-     * @return true if the iteration has more elements.  Otherwise returns false.
-     */
-    public boolean hasNext() {
-        return next != null;
-    }
-
-    /**
-     * Returns the next element in the iteration.
-     *
-     * @return the next element in the iteration
-     * @throws java.util.NoSuchElementException
-     *
-     */
-    public SAMRecord next() {
-        if (next == null) {
-            throw new NoSuchElementException("Iterator has no more elements.");
-        }
-        final SAMRecord result = next;
-        next = getNextRecord();
-        return result;
-    }
-
-    /**
-     * Required method for Iterator API.
-     *
-     * @throws UnsupportedOperationException
-     */
-    public void remove() {
-        throw new UnsupportedOperationException("Remove() not supported by FilteringSamIterator");
-    }
-
-    public void close() {
-        CloserUtil.close(iterator);
-    }
-
-    /**
-     * Gets the next record from the underlying iterator that passes the filter
-     *
-     * @return SAMRecord    the next filter-passing record
-     */
-    private SAMRecord getNextRecord() {
-
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-
-            if (filterReadPairs && record.getReadPairedFlag() && record.getFirstOfPairFlag() &&
-                iterator.hasNext()) {
-
-                SamPairUtil.assertMate(record, iterator.peek());
-
-                if (filter.filterOut(record, iterator.peek())) {
-                    // skip second read
-                    iterator.next();
-                } else {
-                    return record;
-                }
-            } else if (filterReadPairs && record.getReadPairedFlag() &&
-                record.getSecondOfPairFlag()) {
-                // assume that we did a pass(first, second) and it passed the filter
-                return record;
-            } else if (!filter.filterOut(record)) {
-                return record;
-            }
-        }
-
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/filter/InsertSizeFilter.java b/src/main/java/htsjdk/samtools/filter/InsertSizeFilter.java
deleted file mode 100644
index 1e99fa9..0000000
--- a/src/main/java/htsjdk/samtools/filter/InsertSizeFilter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter things that fall outside a specified range of insert sizes.
- * This will automatically omit unpaired reads.
- */
-public class InsertSizeFilter implements SamRecordFilter {
-    final int minInsertSize;
-    final int maxInsertSize;
-
-    public InsertSizeFilter(final int minInsertSize, final int maxInsertSize) {
-        if (minInsertSize > maxInsertSize) throw new SAMException("Cannot have minInsertSize > maxInsertSize");
-        this.minInsertSize = minInsertSize;
-        this.maxInsertSize = maxInsertSize;
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord rec) {
-        if (!rec.getReadPairedFlag()) return true;
-        final int ins = Math.abs(rec.getInferredInsertSize());
-        return ins < minInsertSize || ins > maxInsertSize;
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord r1, final SAMRecord r2) {
-        return filterOut(r1) || filterOut(r2);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/filter/IntervalFilter.java b/src/main/java/htsjdk/samtools/filter/IntervalFilter.java
deleted file mode 100644
index ff3620a..0000000
--- a/src/main/java/htsjdk/samtools/filter/IntervalFilter.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.IntervalUtil;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Filter SAMRecords so that only those that overlap the given list of intervals.
- * It is required that the SAMRecords are passed in coordinate order, and have non-null SAMFileHeaders.
- *
- * $Id$
- *
- * @author alecw at broadinstitute.org
- */
-public class IntervalFilter implements SamRecordFilter {
-    private final Iterator<Interval> intervals;
-    /**
-     * Null only if there are no more intervals
-     */
-    private final SAMFileHeader samHeader;
-    private Interval currentInterval;
-    private int currentSequenceIndex;
-
-    /**
-     * Prepare to filter out SAMRecords that do not overlap the given list of intervals
-     * @param intervals -- must be locus-ordered & non-overlapping
-     */
-    public IntervalFilter(final List<Interval> intervals, final SAMFileHeader samHeader) {
-        this.samHeader = samHeader;
-        IntervalUtil.assertOrderedNonOverlapping(intervals.iterator(), samHeader.getSequenceDictionary());
-        this.intervals = intervals.iterator();
-        advanceInterval();
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        while (currentInterval != null &&
-                (currentSequenceIndex < record.getReferenceIndex() ||
-                 (currentSequenceIndex == record.getReferenceIndex() && currentInterval.getEnd() < record.getAlignmentStart()))) {
-            advanceInterval();
-        }
-        // Return true if record should be filtered out
-        return !(currentInterval != null && currentSequenceIndex == record.getReferenceIndex() &&
-                 currentInterval.getStart() <= record.getAlignmentEnd());
-    }
-
-    private void advanceInterval() {
-        if (intervals.hasNext()) {
-            currentInterval = intervals.next();
-            currentSequenceIndex = samHeader.getSequenceIndex(currentInterval.getContig());
-        } else {
-            currentInterval = null;
-        }
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // This can never be implemented because if the bam is coordinate sorted,
-        // which it has to be for this filter, it will never get both the first and second reads together
-        // and the filterOut method goes in order of the intervals in coordinate order so it will miss reads.
-        throw new UnsupportedOperationException("Paired IntervalFilter filter cannot be implemented, use IntervalKeepPairFilter.");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/IntervalKeepPairFilter.java b/src/main/java/htsjdk/samtools/filter/IntervalKeepPairFilter.java
deleted file mode 100644
index 5a7961b..0000000
--- a/src/main/java/htsjdk/samtools/filter/IntervalKeepPairFilter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMUtils;
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.OverlapDetector;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Filter out SAMRecords where neither record of a pair overlaps a given set of
- * intervals. If one record of a pair overlaps the interval list, than both are
- * kept. It is required that the SAMRecords are passed in coordinate order, have
- * non-null SAMFileHeaders, and that Mate Cigar (MC) is present.
- *
- * @author kbergin at broadinstitute.org
- */
-public class IntervalKeepPairFilter implements SamRecordFilter {
-    private final OverlapDetector<Interval> intervalOverlapDetector;
-
-    /**
-     * Prepare to filter out SAMRecords that do not overlap the given list of
-     * intervals
-     * @param intervals
-     */
-    public IntervalKeepPairFilter(final List<Interval> intervals) {
-        this.intervalOverlapDetector = new OverlapDetector<>(0, 0);
-        this.intervalOverlapDetector.addAll(intervals, intervals);
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter. Takes record, finds
-     * the location of its mate using the MC tag. Checks if either record
-     * overlaps the current interval using overlap detector. If yes, return
-     * false -> don't filter it out.
-     *
-     * If a read is secondary or supplementary, filter read out. Use
-     * {@link IntervalFilter} if you want to keep these reads, but NOTE: the
-     * resulting bam may not be valid.
-     *
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        if (record.isSecondaryOrSupplementary()) {
-           return true;
-        }
-
-        if (!record.getReadUnmappedFlag()
-                && hasOverlaps(record.getReferenceName(), record.getStart(), record.getEnd())) {
-            return false;
-        }
-
-        return record.getMateUnmappedFlag() || !hasOverlaps(record.getMateReferenceName(),
-                record.getMateAlignmentStart(), SAMUtils.getMateAlignmentEnd(record));
-    }
-
-    /**
-     * Returns true if the record overlaps any intervals in list, false otherwise.
-     *
-     * @param refSequence Reference contig name where record maps
-     * @param start Record alignment start
-     * @param end Record alignment end
-     * @return true if SAMRecord overlaps any intervals in list
-     */
-    private boolean hasOverlaps(final String refSequence, final int start, final int end) {
-        final Interval readInterval = new Interval(refSequence, start, end);
-        final Collection<Interval> overlapsRead = intervalOverlapDetector.getOverlaps(readInterval);
-
-        return !overlapsRead.isEmpty();
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if both SAMRecords do not overlap the interval list
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        return filterOut(first) && filterOut(second);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/JavascriptSamRecordFilter.java b/src/main/java/htsjdk/samtools/filter/JavascriptSamRecordFilter.java
deleted file mode 100644
index 20c784b..0000000
--- a/src/main/java/htsjdk/samtools/filter/JavascriptSamRecordFilter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-
-/**
- * javascript based read filter
- * 
- * 
- * The script puts the following variables in the script context:
- *
- * - 'record' a SamRecord (
- * https://github.com/samtools/htsjdk/blob/master/src/java/htsjdk/samtools/
- * SAMRecord.java ) - 'header' (
- * https://github.com/samtools/htsjdk/blob/master/src/java/htsjdk/samtools/
- * SAMFileHeader.java )
- * 
- * @author Pierre Lindenbaum PhD Institut du Thorax - INSERM - Nantes - France
- */
-public class JavascriptSamRecordFilter extends AbstractJavascriptFilter<SAMFileHeader, SAMRecord>
-        implements SamRecordFilter {
-    /**
-     * constructor using a javascript File
-     * 
-     * @param scriptFile
-     *            the javascript file to be compiled
-     * @param header
-     *            the SAMHeader
-     */
-    public JavascriptSamRecordFilter(final File scriptFile, final SAMFileHeader header) throws IOException {
-        super(scriptFile, header);
-    }
-
-    /**
-     * constructor using a javascript expression
-     * 
-     * @param scriptExpression
-     *            the javascript expression to be compiled
-     * @param header
-     *            the SAMHeader
-     */
-    public JavascriptSamRecordFilter(final String scriptExpression, final SAMFileHeader header) {
-        super(scriptExpression, header);
-    }
-
-    /**
-     * constructor using a java.io.Reader
-     * 
-     * @param scriptReader
-     *            the javascript reader to be compiled. will be closed
-     * @param header
-     *            the SAMHeader
-     */
-    public JavascriptSamRecordFilter(final Reader scriptReader, final SAMFileHeader header) {
-        super(scriptReader, header);
-    }
-
-    /** return true of both records are filteredOut (AND) */
-    @Override
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        return filterOut(first) && filterOut(second);
-    }
-
-    /** read is filtered out if the javascript program returns false */
-    @Override
-    public boolean filterOut(final SAMRecord record) {
-        return !accept(record);
-    }
-
-    @Override
-    public String getRecordKey() {
-        return "record";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/MappingQualityFilter.java b/src/main/java/htsjdk/samtools/filter/MappingQualityFilter.java
deleted file mode 100644
index d25df73..0000000
--- a/src/main/java/htsjdk/samtools/filter/MappingQualityFilter.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter things with low mapping quality.
- */
-public class MappingQualityFilter implements SamRecordFilter {
-
-    private int minimumMappingQuality = Integer.MIN_VALUE;
-
-    public MappingQualityFilter(final int minimumMappingQuality) {
-        this.minimumMappingQuality = minimumMappingQuality;
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord record) {
-        return record.getMappingQuality() < this.minimumMappingQuality;
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        return filterOut(first) || filterOut(second);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/NotPrimaryAlignmentFilter.java b/src/main/java/htsjdk/samtools/filter/NotPrimaryAlignmentFilter.java
deleted file mode 100644
index 0f2364c..0000000
--- a/src/main/java/htsjdk/samtools/filter/NotPrimaryAlignmentFilter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with NotPrimaryAlignment flag set
- *
- * $Id$
- */
-public class NotPrimaryAlignmentFilter implements SamRecordFilter {
-    /**
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        return record.getNotPrimaryAlignmentFlag();
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // if either fails, exclude them both
-        return (first.getNotPrimaryAlignmentFlag() || second.getNotPrimaryAlignmentFlag());
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/OverclippedReadFilter.java b/src/main/java/htsjdk/samtools/filter/OverclippedReadFilter.java
deleted file mode 100644
index 2e8f43f..0000000
--- a/src/main/java/htsjdk/samtools/filter/OverclippedReadFilter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filters out reads with very few unclipped bases, likely due to the read coming
- * from a foreign organism, e.g. bacterial contamination.
- *
- * Based on GATK's OverclippedReadFilter.
- */
-public class OverclippedReadFilter implements SamRecordFilter {
-    // if the number of unclipped bases is below this threshold, the read is considered overclipped
-    private final int unclippedBasesThreshold;
-    // if set to true, then reads with at least one clipped end will be filtered; if false, we require both ends to be clipped
-    private final boolean filterSingleEndClips;
-
-    public OverclippedReadFilter(final int unclippedBasesThreshold, final boolean filterSingleEndClips) {
-        if (unclippedBasesThreshold < 0) throw new SAMException("unclippedBasesThreshold must be non-negative");
-        this.unclippedBasesThreshold = unclippedBasesThreshold;
-        this.filterSingleEndClips = filterSingleEndClips;
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord record) {
-        int alignedLength = 0;
-        int softClipBlocks = 0;
-        int minSoftClipBlocks = filterSingleEndClips ? 1 : 2;
-        CigarOperator lastOperator = null;
-
-        for ( final CigarElement element : record.getCigar().getCigarElements() ) {
-            if ( element.getOperator() == CigarOperator.S ) {
-                //Treat consecutive S blocks as a single one
-                if(lastOperator != CigarOperator.S){
-                    softClipBlocks += 1;
-                }
-
-            } else if ( element.getOperator().consumesReadBases() ) {   // M, I, X, and EQ (S was already accounted for above)
-                alignedLength += element.getLength();
-            }
-            lastOperator = element.getOperator();
-        }
-
-        return(alignedLength < unclippedBasesThreshold && softClipBlocks >= minSoftClipBlocks);
-    }
-
-    @Override
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        return filterOut(first) || filterOut(second);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/ReadNameFilter.java b/src/main/java/htsjdk/samtools/filter/ReadNameFilter.java
deleted file mode 100644
index e4b2a20..0000000
--- a/src/main/java/htsjdk/samtools/filter/ReadNameFilter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Filter by a set of specified readnames
- * <p/>
- * $Id$
- */
-public class ReadNameFilter implements SamRecordFilter {
-
-    private boolean includeReads = false;
-    private Set<String> readNameFilterSet = new HashSet<String>();
-
-    public ReadNameFilter(final File readNameFilterFile, final boolean includeReads) {
-
-        IOUtil.assertFileIsReadable(readNameFilterFile);
-        IOUtil.assertFileSizeNonZero(readNameFilterFile);
-
-        try {
-            final BufferedReader in = IOUtil.openFileForBufferedReading(readNameFilterFile);
-
-            String line = null;
-
-            while ((line = in.readLine()) != null) {
-                if (!line.trim().isEmpty()) {
-                    readNameFilterSet.add(line.split("\\s+")[0]);
-                }
-            }
-
-            in.close();
-        } catch (IOException e) {
-            throw new SAMException(e.getMessage(), e);
-        }
-
-        this.includeReads = includeReads;
-    }
-
-    public ReadNameFilter(final Set<String> readNameFilterSet, final boolean includeReads) {
-        this.readNameFilterSet = readNameFilterSet;
-        this.includeReads = includeReads;
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record the SAMRecord to evaluate
-     *
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        if (includeReads) {
-            if (readNameFilterSet.contains(record.getReadName())) {
-                return false;
-            }
-        } else {
-            if (!readNameFilterSet.contains(record.getReadName())) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Determines whether a pair of SAMRecords matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the pair of records matches filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        if (includeReads) {
-            if (readNameFilterSet.contains(first.getReadName()) &&
-                readNameFilterSet.contains(second.getReadName())) {
-                return false;
-            }
-        } else {
-            if (!readNameFilterSet.contains(first.getReadName()) &&
-                !readNameFilterSet.contains(second.getReadName())) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/filter/SamRecordFilter.java b/src/main/java/htsjdk/samtools/filter/SamRecordFilter.java
deleted file mode 100644
index 5ca280e..0000000
--- a/src/main/java/htsjdk/samtools/filter/SamRecordFilter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * API for filtering SAMRecords
- *
- * $Id$
- */
-public interface SamRecordFilter {
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record the SAMRecord to evaluate
-     *
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(SAMRecord record);
-
-    /**
-     * Determines whether a pair of SAMRecords matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the pair of records matches filter, otherwise false
-     */
-    public boolean filterOut(SAMRecord first, SAMRecord second);
-}
diff --git a/src/main/java/htsjdk/samtools/filter/SecondaryAlignmentFilter.java b/src/main/java/htsjdk/samtools/filter/SecondaryAlignmentFilter.java
deleted file mode 100644
index d91212d..0000000
--- a/src/main/java/htsjdk/samtools/filter/SecondaryAlignmentFilter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * SamRecordFilter that filters out secondary alignments, but not supplemental alignments.
- */
-public class SecondaryAlignmentFilter implements SamRecordFilter {
-    /**
-     * Returns true if the read is marked as secondary.
-     */
-    public boolean filterOut(final SAMRecord record) { return record.getNotPrimaryAlignmentFlag(); }
-
-    /**
-     * Returns true if either read is marked as secondary.
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        return first.getNotPrimaryAlignmentFlag() || second.getNotPrimaryAlignmentFlag();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/SecondaryOrSupplementaryFilter.java b/src/main/java/htsjdk/samtools/filter/SecondaryOrSupplementaryFilter.java
deleted file mode 100644
index ae57fd9..0000000
--- a/src/main/java/htsjdk/samtools/filter/SecondaryOrSupplementaryFilter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with NotPrimaryAlignment or Supplementary flag set
- * This class should be viewed as a replacement for NotPrimarySkippingIterator,
- * in that we did not want to change the functionality of NPSI to no longer match its name
- * $Id$
- */
-public class SecondaryOrSupplementaryFilter  implements SamRecordFilter {
-    /**
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        return record.isSecondaryOrSupplementary();
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // if either fails, exclude them both
-        return first.isSecondaryOrSupplementary() || second.isSecondaryOrSupplementary();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/SolexaNoiseFilter.java b/src/main/java/htsjdk/samtools/filter/SolexaNoiseFilter.java
deleted file mode 100644
index bfb31d6..0000000
--- a/src/main/java/htsjdk/samtools/filter/SolexaNoiseFilter.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.util.SequenceUtil;
-
-/**
- * Filter to determine whether a read is "noisy" due to a poly-A run that is a sequencing artifact.
- * Currently we filter out only reads that are composed entirely of As.
- *
- * $Id$
- */
-public class SolexaNoiseFilter implements SamRecordFilter {
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record    the SAMRecord to evaluate
-     * @return  true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord record) {
-        final byte[] sequence = record.getReadBases();
-        for (final byte base : sequence) {
-            if (base != 'A' && base != 'a' &&
-                !SequenceUtil.isNoCall(base)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Determines whether a pair of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // only filter out the pair if both first and second reads have all As
-        return (filterOut(first) && filterOut(second));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/TagFilter.java b/src/main/java/htsjdk/samtools/filter/TagFilter.java
deleted file mode 100644
index 5182e83..0000000
--- a/src/main/java/htsjdk/samtools/filter/TagFilter.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Filter class for matching tag attributes in SAMRecords
- *
- * $Id$
- */
-public class TagFilter implements SamRecordFilter {
-
-    private final String tag;           // The key of the tag to match
-    private final List<Object> values;  // The list of matching values
-
-    /**
-     * Constructor for a single value
-     *
-     * @param tag       the key of the tag to match
-     * @param value     the value to match
-     */
-    public TagFilter(String tag, Object value) {
-        this.tag = tag;
-        this.values = Arrays.asList(value);
-    }
-
-    /**
-     * Constructor for multiple values
-     *
-     * @param tag       the key of the tag to match
-     * @param values    the matching values
-     */
-    public TagFilter(String tag, List<Object> values) {
-        this.tag = tag;
-        this.values = values;
-    }
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record    the SAMRecord to evaluate
-     * @return  true if the SAMRecord matches the filter, otherwise false
-     */
-    public boolean filterOut(SAMRecord record) {
-        return values.contains(record.getAttribute(tag));
-    }
-
-    /**
-     * Determines whether a paired of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // both first and second must have the tag in order for it to be filtered out
-         return values.contains(first.getAttribute(tag)) && values.contains(second.getAttribute(tag));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/filter/WholeReadClippedFilter.java b/src/main/java/htsjdk/samtools/filter/WholeReadClippedFilter.java
deleted file mode 100644
index 2a1566c..0000000
--- a/src/main/java/htsjdk/samtools/filter/WholeReadClippedFilter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.ReservedTagConstants;
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Filter SAMRecords so that only those that have at least one un-clipped base are
- * returned.
- *
- * $Id$
- *
- * @author ktibbett at broadinstitute.org
- */
-public class WholeReadClippedFilter implements SamRecordFilter {
-
-    /**
-     * Determines whether a SAMRecord matches this filter
-     *
-     * @param record the SAMRecord to evaluate
-     * @return true if the SAMRecord matches the filter, and should be filtered out,
-     *         otherwise false
-     */
-    @Override
-    public boolean filterOut(final SAMRecord record) {
-        return record.getAttribute(ReservedTagConstants.XT) != null
-                && (Integer)record.getAttribute(ReservedTagConstants.XT) == 1;
-    }
-
-     /**
-     * Determines whether a paired of SAMRecord matches this filter
-     *
-     * @param first  the first SAMRecord to evaluate
-     * @param second the second SAMRecord to evaluate
-     *
-     * @return true if the SAMRecords matches the filter, otherwise false
-     */
-    public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-        // if either fails, exclude them both
-        return (filterOut(first) || filterOut(second));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/liftover/Chain.java b/src/main/java/htsjdk/samtools/liftover/Chain.java
deleted file mode 100644
index 8ac87fb..0000000
--- a/src/main/java/htsjdk/samtools/liftover/Chain.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.liftover;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.BufferedLineReader;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.OverlapDetector;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Pattern;
-
-/**
- * Holds a single chain from a UCSC chain file.  Chain file format is described here: http://genome.ucsc.edu/goldenPath/help/chain.html
- *
- * In a chain file, a chain consists of a header line followed by alignment data lines.  Chain class embodies the header
- * line, and the list of ContinuousBlocks embodies the alignment data lines.
- *
- * A continuous block represents a continuous range of the "from" genome that maps to a continuous range of the "to"
- * genome of the same length.  A chain is an ordered list of continuous blocks, with gaps between the continuous blocks.
- * All the continuous blocks in a chain must map from a single "from" sequence to a single "to" sequence.  All the
- * continuous blocks in a chain map from the positive strand in the "from" genome build to the same strand in the
- * "to" genome build.  The gaps in between the continuous blocks in a chain represent un-lift-overable regions.
- * A gap in a chain may be found in another chain (e.g. if a portion of a sequence is reversed in the "to" genome).
- *
- * In UCSC liftOver terminology, the "target" is the "from" genome build, and the "query" is the "to" genome build.
- * E.g. when mapping from HG18 to HG19, the HG18 coordinates are "target" and HG19 is "query."  The USCS terminology
- * is not used here because it confuses me.
- *
- * Chain coordinates are zero-based, half open.  However, there is also an Interval attribute of Chain that is in
- * standard Picard coordinates, i.e. one-based inclusive.
- *
- * @author alecw at broadinstitute.org
- */
-class Chain {
-    // For parsing chain file
-    private static final Pattern SPLITTER = Pattern.compile("\\s");
-
-    /** Score is not used in basic liftover implementation, but is stored so that chain can be written to disk. */
-    final double score;
-    /** one-based, inclusive, so that Chain can be stored in an OverlapDetector */
-    final Interval interval;
-    /** Total score for chain is not used in basic liftover so not stored. */
-    // final double score;
-    final String fromSequenceName;
-    /** Overall size of the "from" sequence. */
-    final int fromSequenceSize;
-    /* tStrand always +, so not stored */
-    /** Start of range covered in "from" sequence. */
-    final int fromChainStart;
-    /** End of range covered in "from" sequence. */
-    final int fromChainEnd;
-    final String toSequenceName;
-    /** Overall size of the "to" sequence. */
-    final int toSequenceSize;
-    /** "to" strand. If this is true, then the region covered by this chain is flipped in the "to" genome.  */
-    final boolean toOppositeStrand;
-    /** Start of range covered in "to" sequence. */
-    final int toChainStart;
-    /** End of range covered in "to" sequence. */
-    final int toChainEnd;
-    /** ID of chain in file.  */
-    final int id;
-    private final List<ContinuousBlock> blockList = new ArrayList<ContinuousBlock>();
-
-    /**
-     * Construct a Chain from the parsed header fields.
-     */
-    private Chain(final double score, final String fromSequenceName, final int fromSequenceSize, final int fromChainStart, final int fromChainEnd,
-          final String toSequenceName, final int toSequenceSize, final boolean toOppositeStrand,
-          final int toChainStart, final int toChainEnd, final int id) {
-        // Convert  to one-based, inclusive for Interval.
-        interval = new Interval(fromSequenceName, fromChainStart + 1, fromChainEnd);
-        this.score = score;
-        this.toChainEnd = toChainEnd;
-        this.toSequenceName = toSequenceName;
-        this.toOppositeStrand = toOppositeStrand;
-        this.toSequenceSize = toSequenceSize;
-        this.toChainStart = toChainStart;
-        // not used
-        //this.score = score;
-        this.fromChainEnd = fromChainEnd;
-        this.fromSequenceName = fromSequenceName;
-        this.fromSequenceSize = fromSequenceSize;
-        this.fromChainStart = fromChainStart;
-        this.id = id;
-    }
-
-
-    /**
-     * Holds a range that continuously lines up between target and query genome builds.
-     * Indices are 0-based, half-open.
-     */
-    static class ContinuousBlock {
-        final int fromStart;	  /* Start of range covered in "from". */
-        final int toStart;		  /* Range covered in "to". */
-        final int blockLength;    /* length of continuous block of that maps btw from and to */
-        //int score;	 	 	  /* Score of block. */
-
-        private ContinuousBlock(final int fromStart, final int toStart, final int blockLength) {
-            this.fromStart = fromStart;
-            this.toStart = toStart;
-            this.blockLength = blockLength;
-        }
-
-        /**
-         * @return 0-based, half-open end of region in "from"
-         */
-        int getFromEnd() {
-            return fromStart + blockLength;
-        }
-
-        /**
-         * @return 0-based, half-open end of region in "to"
-         */
-        int getToEnd() {
-            return toStart + blockLength;
-        }
-
-        @Override
-        public boolean equals(final Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-
-            final ContinuousBlock that = (ContinuousBlock) o;
-
-            if (blockLength != that.blockLength) return false;
-            if (fromStart != that.fromStart) return false;
-            if (toStart != that.toStart) return false;
-
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            int result = fromStart;
-            result = 31 * result + toStart;
-            result = 31 * result + blockLength;
-            return result;
-        }
-    }
-
-    private void addBlock(final int tStart, final int qStart, final int blockLength) {
-        blockList.add(new ContinuousBlock(tStart, qStart, blockLength));
-    }
-
-    /**
-     * @return The ith ContinuousBlock in this Chain.
-     */
-    ContinuousBlock getBlock(final int i) {
-        return blockList.get(i);
-    }
-
-    /**
-     * @return Unmodifiable list of ContinuousBlocks in this Chain.
-     */
-    List<ContinuousBlock> getBlocks() {
-        return Collections.unmodifiableList(blockList);
-    }
-
-    void write(final PrintWriter writer) {
-        writer.printf("chain\t%f\t%s\t%d\t+\t%d\t%d\t%s\t%d\t%s\t%d\t%d\t%d\n",
-                score, fromSequenceName, fromSequenceSize, fromChainStart, fromChainEnd,
-                toSequenceName, toSequenceSize, (toOppositeStrand ? "-": "+"), toChainStart, toChainEnd, id);
-        for (int i = 0; i < blockList.size() - 1; ++i) {
-            final ContinuousBlock thisBlock = blockList.get(i);
-            final ContinuousBlock nextBlock = blockList.get(i+1);
-
-            final int fromGap = nextBlock.fromStart - thisBlock.getFromEnd();
-            final int toGap = nextBlock.toStart - thisBlock.getToEnd();
-            writer.printf("%d\t%d\t%d\n", thisBlock.blockLength, fromGap, toGap);
-        }
-        writer.printf("%d\n", blockList.get(blockList.size() - 1).blockLength);
-        writer.println();
-    }
-
-    /**
-     * Throw an exception if Chain looks strange.
-     */
-    void validate() {
-        validatePositive("fromSequenceSize", fromSequenceSize);
-        validateNonNegative("fromChainStart", fromChainStart);
-        validateNonNegative("fromChainEnd", fromChainEnd);
-        validatePositive("toSequenceSize", toSequenceSize);
-        validateNonNegative("toChainStart", toChainStart);
-        validateNonNegative("toChainEnd", toChainEnd);
-        int fromLength = fromChainEnd - fromChainStart;
-        validatePositive("from length", fromLength);
-        int toLength = toChainEnd - toChainStart;
-        validatePositive("to length", toLength);
-        if (fromLength > fromSequenceSize) throw new SAMException("From chain length (" + fromLength +
-                ") < from sequence length (" + fromSequenceSize + ") for chain " + id);
-        if (toLength > toSequenceSize) throw new SAMException("To chain length (" + toLength +
-                ") < to sequence length (" + toSequenceSize + ") for chain " + id);
-        if (fromSequenceName.isEmpty()) throw new SAMException("Chain " + id + "has empty from sequence name.");
-        if (toSequenceName.isEmpty()) throw new SAMException("Chain " + id + "has empty to sequence name.");
-        if (blockList.isEmpty()) throw new SAMException("Chain " + id + " has empty block list.");
-        final ContinuousBlock firstBlock = blockList.get(0);
-        if (firstBlock.fromStart != fromChainStart) {
-            throw new SAMException("First block from start != chain from start for chain " + id);
-        }
-        if (firstBlock.toStart != toChainStart) {
-            throw new SAMException("First block to start != chain to start for chain " + id);
-        }
-        final ContinuousBlock lastBlock = blockList.get(blockList.size() - 1);
-        if (lastBlock.getFromEnd() != fromChainEnd) {
-            throw new SAMException("Last block from end != chain from end for chain " + id);
-        }
-        if (lastBlock.getToEnd() != toChainEnd) {
-            throw new SAMException("Last block to end < chain to end for chain " + id);
-        }
-        for (int i = 1; i < blockList.size(); ++i) {
-            final ContinuousBlock thisBlock = blockList.get(i);
-            final ContinuousBlock prevBlock = blockList.get(i-1);
-            if (thisBlock.fromStart < prevBlock.getFromEnd()) {
-                throw new SAMException("Continuous block " + i + " from starts before previous block ends for chain " + id);
-            }
-            if (thisBlock.toStart < prevBlock.getToEnd()) {
-                throw new SAMException("Continuous block " + i + " to starts before previous block ends for chain " + id);
-            }
-        }
-    }
-
-    private void validatePositive(final String attributeName, final int attribute) {
-        if (attribute <= 0) {
-            throw new SAMException(attributeName + " is not positive: " + attribute + " for chain " + id);
-        }
-    }
-
-    private void validateNonNegative(final String attributeName, final int attribute) {
-        if (attribute < 0) {
-            throw new SAMException(attributeName + " is negative: " + attribute + " for chain " + id);
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final Chain chain = (Chain) o;
-
-        if (fromChainEnd != chain.fromChainEnd) return false;
-        if (fromChainStart != chain.fromChainStart) return false;
-        if (fromSequenceSize != chain.fromSequenceSize) return false;
-        if (id != chain.id) return false;
-        if (Double.compare(chain.score, score) != 0) return false;
-        if (toChainEnd != chain.toChainEnd) return false;
-        if (toChainStart != chain.toChainStart) return false;
-        if (toOppositeStrand != chain.toOppositeStrand) return false;
-        if (toSequenceSize != chain.toSequenceSize) return false;
-        if (blockList != null ? !blockList.equals(chain.blockList) : chain.blockList != null) return false;
-        if (fromSequenceName != null ? !fromSequenceName.equals(chain.fromSequenceName) : chain.fromSequenceName != null)
-            return false;
-        if (interval != null ? !interval.equals(chain.interval) : chain.interval != null) return false;
-        if (toSequenceName != null ? !toSequenceName.equals(chain.toSequenceName) : chain.toSequenceName != null)
-            return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result;
-        long temp;
-        temp = score != +0.0d ? Double.doubleToLongBits(score) : 0L;
-        result = (int) (temp ^ (temp >>> 32));
-        result = 31 * result + (interval != null ? interval.hashCode() : 0);
-        result = 31 * result + (fromSequenceName != null ? fromSequenceName.hashCode() : 0);
-        result = 31 * result + fromSequenceSize;
-        result = 31 * result + fromChainStart;
-        result = 31 * result + fromChainEnd;
-        result = 31 * result + (toSequenceName != null ? toSequenceName.hashCode() : 0);
-        result = 31 * result + toSequenceSize;
-        result = 31 * result + (toOppositeStrand ? 1 : 0);
-        result = 31 * result + toChainStart;
-        result = 31 * result + toChainEnd;
-        result = 31 * result + id;
-        result = 31 * result + (blockList != null ? blockList.hashCode() : 0);
-        return result;
-    }
-
-    /**
-     * Read all the chains and load into an OverlapDetector.
-     * @param chainFile File in UCSC chain format.
-     * @return OverlapDetector will all Chains from reader loaded into it.
-     */
-    static OverlapDetector<Chain> loadChains(final File chainFile) {
-        final BufferedLineReader reader = new BufferedLineReader(IOUtil.openFileForReading(chainFile));
-        final OverlapDetector<Chain> ret = new OverlapDetector<Chain>(0, 0);
-        Chain chain;
-        while ((chain = Chain.loadChain(reader, chainFile.toString())) != null) {
-            ret.addLhs(chain, chain.interval);
-        }
-        reader.close();
-        return ret;
-    }
-
-    /**
-     * Read a single Chain from reader.
-     * @param reader Text representation of chains.
-     * @param chainFile For error messages only.
-     * @return New Chain with associated ContinuousBlocks.
-     */
-    private static Chain loadChain(final BufferedLineReader reader, final String chainFile) {
-        String line;
-        while (true) {
-            line = reader.readLine();
-            if (line == null) {
-                return null;
-            }
-            // Skip comment lines
-            if (!line.startsWith("#")) {
-                break;
-            }
-        }
-        final String[] chainFields = SPLITTER.split(line);
-        if (chainFields.length != 13) {
-            throwChainFileParseException("chain line has wrong number of fields", chainFile, reader.getLineNumber());
-        }
-        if (!"chain".equals(chainFields[0])) {
-            throwChainFileParseException("chain line does not start with 'chain'", chainFile, reader.getLineNumber());
-        }
-        double score = 0;
-        String fromSequenceName = null;
-        int fromSequenceSize = 0;
-        int fromChainStart = 0;
-        int fromChainEnd = 0;
-        String toSequenceName = null;
-        int toSequenceSize = 0;
-        boolean toNegativeStrand = false;
-        int toChainStart = 0;
-        int toChainEnd = 0;
-        int id = 0;
-        try {
-            score = Double.parseDouble(chainFields[1]);
-            fromSequenceName = chainFields[2];
-            fromSequenceSize = Integer.parseInt(chainFields[3]);
-            // Strand ignored because it is always +
-            fromChainStart = Integer.parseInt(chainFields[5]);
-            fromChainEnd = Integer.parseInt(chainFields[6]);
-            toSequenceName = chainFields[7];
-            toSequenceSize = Integer.parseInt(chainFields[8]);
-            toNegativeStrand = chainFields[9].equals("-");
-            toChainStart = Integer.parseInt(chainFields[10]);
-            toChainEnd = Integer.parseInt(chainFields[11]);
-            id = Integer.parseInt(chainFields[12]);
-        } catch (NumberFormatException e) {
-            throwChainFileParseException("Invalid field", chainFile, reader.getLineNumber());
-        }
-        final Chain chain = new Chain(score, fromSequenceName, fromSequenceSize, fromChainStart, fromChainEnd, toSequenceName, toSequenceSize, toNegativeStrand, toChainStart,
-                toChainEnd, id);
-        int toBlockStart = chain.toChainStart;
-        int fromBlockStart = chain.fromChainStart;
-        boolean sawLastLine = false;
-        while (true) {
-            line = reader.readLine();
-            if (line == null || line.equals("")) {
-                if (!sawLastLine) {
-                    throwChainFileParseException("Reached end of chain without seeing terminal block", chainFile, reader.getLineNumber());
-                }
-                break;
-            }
-            if (sawLastLine) {
-                throwChainFileParseException("Terminal block seen before end of chain", chainFile, reader.getLineNumber());
-            }
-            String[] blockFields = SPLITTER.split(line);
-            if (blockFields.length == 1) {
-                sawLastLine = true;
-            } else if (blockFields.length != 3) {
-                throwChainFileParseException("Block line has unexpected number of fields", chainFile, reader.getLineNumber());
-            }
-            int size = Integer.parseInt(blockFields[0]);
-            chain.addBlock(fromBlockStart, toBlockStart, size);
-            if (!sawLastLine) {
-                fromBlockStart += Integer.parseInt(blockFields[1]) + size;
-                toBlockStart += Integer.parseInt(blockFields[2]) + size;
-            }
-
-        }
-        chain.validate();
-        return chain;
-    }
-
-    private static void throwChainFileParseException(final String message, final String chainFile, final int lineNumber) {
-        throw new SAMException(message + " in chain file " + chainFile + " at line " + lineNumber);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/liftover/LiftOver.java b/src/main/java/htsjdk/samtools/liftover/LiftOver.java
deleted file mode 100644
index e422a72..0000000
--- a/src/main/java/htsjdk/samtools/liftover/LiftOver.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.liftover;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.OverlapDetector;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Java port of UCSC liftOver.  Only the most basic liftOver functionality is implemented.
- * Internally coordinates are 0-based, half-open. The API is standard Picard 1-based, inclusive.
- *
- * @author alecw at broadinstitute.org
- */
-public class LiftOver {
-    private static final Log LOG = Log.getInstance(LiftOver.class);
-    
-    public static final double DEFAULT_LIFTOVER_MINMATCH = 0.95;
-
-    private double liftOverMinMatch = DEFAULT_LIFTOVER_MINMATCH;
-    private final OverlapDetector<Chain> chains;
-    private final Map<String, Set<String>> contigMap = new HashMap<>();
-
-    /**
-     * Load UCSC chain file in order to lift over Intervals.
-     */
-    public LiftOver(File chainFile) {
-        IOUtil.assertFileIsReadable(chainFile);
-        chains = Chain.loadChains(chainFile);
-
-        for (final Chain chain : this.chains.getAll()) {
-            final String from = chain.fromSequenceName;
-            final String to   = chain.toSequenceName;
-            final Set<String> names;
-            if (contigMap.containsKey(from)) {
-                names = contigMap.get(from);
-            }
-            else {
-                names = new HashSet<>();
-                contigMap.put(from, names);
-            }
-            names.add(to);
-        }
-    }
-
-    /**
-     * Throw an exception if all the "to" sequence names in the chains are not found in the given sequence dictionary.
-     */
-    public void validateToSequences(final SAMSequenceDictionary sequenceDictionary) {
-        for (final Chain chain : chains.getAll()) {
-            if (sequenceDictionary.getSequence(chain.toSequenceName) == null) {
-                throw new SAMException("Sequence " + chain.toSequenceName + " from chain file is not found in sequence dictionary.");
-            }
-        }
-
-    }
-
-    /**
-     * Lift over the given interval to the new genome build using the liftOverMinMatch set for this
-     * LiftOver object.
-     * @param interval Interval to be lifted over.
-     * @return Interval in the output build coordinates, or null if it cannot be lifted over.
-     */
-    public Interval liftOver(final Interval interval) {
-        return liftOver(interval, liftOverMinMatch);
-    }
-
-    /**
-     * Lift over the given interval to the new genome build.
-     * @param interval Interval to be lifted over.
-     * @param liftOverMinMatch Minimum fraction of bases that must remap.
-     * @return Interval in the output build coordinates, or null if it cannot be lifted over.
-     */
-    public Interval liftOver(final Interval interval, final double liftOverMinMatch) {
-        if (interval.length() == 0) {
-            throw new IllegalArgumentException("Zero-length interval cannot be lifted over.  Interval: " +
-                    interval.getName());
-        }
-        Chain chainHit = null;
-        TargetIntersection targetIntersection = null;
-        // Number of bases in interval that can be lifted over must be >= this.
-        double minMatchSize = liftOverMinMatch * interval.length();
-
-        // Find the appropriate Chain, and the part of the chain corresponding to the interval to be lifted over.
-        for (final Chain chain : chains.getOverlaps(interval)) {
-            final TargetIntersection candidateIntersection = targetIntersection(chain, interval);
-            if (candidateIntersection != null && candidateIntersection.intersectionLength >= minMatchSize) {
-                if (chainHit != null) {
-                    // In basic liftOver, multiple hits are not allowed.
-                    return null;
-                }
-                chainHit = chain;
-                targetIntersection = candidateIntersection;
-            } else if (candidateIntersection != null) {
-                LOG.info("Interval " + interval.getName() + " failed to match chain " + chain.id +
-                " because intersection length " + candidateIntersection.intersectionLength + " < minMatchSize "
-                + minMatchSize +
-                " (" + (candidateIntersection.intersectionLength/(float)interval.length()) + " < " + liftOverMinMatch + ")");
-            }
-        }
-        if (chainHit == null) {
-            // Can't be lifted over.
-            return null;
-        }
-
-        return createToInterval(interval.getName(), interval.isNegativeStrand(), targetIntersection);
-    }
-
-    public List<PartialLiftover> diagnosticLiftover(final Interval interval) {
-        final List<PartialLiftover> ret = new ArrayList<PartialLiftover>();
-        if (interval.length() == 0) {
-            throw new IllegalArgumentException("Zero-length interval cannot be lifted over.  Interval: " +
-                    interval.getName());
-        }
-        for (final Chain chain : chains.getOverlaps(interval)) {
-            Interval intersectingChain = interval.intersect(chain.interval);
-            final TargetIntersection targetIntersection = targetIntersection(chain, intersectingChain);
-            if (targetIntersection == null) {
-                ret.add(new PartialLiftover(intersectingChain, chain.id));
-            } else {
-                Interval toInterval = createToInterval(interval.getName(), interval.isNegativeStrand(), targetIntersection);
-                float percentLiftedOver = targetIntersection.intersectionLength/(float)interval.length();
-                ret.add(new PartialLiftover(intersectingChain, toInterval, targetIntersection.chain.id, percentLiftedOver));
-            }
-        }
-        return ret;
-    }
-
-    /**
-     * @return the set of destination contigs for each source contig in the chains file.
-     */
-    public Map<String, Set<String>> getContigMap() {
-        return Collections.unmodifiableMap(contigMap);
-    }
-
-    private static Interval createToInterval(final String intervalName, final boolean sourceNegativeStrand, final TargetIntersection targetIntersection) {
-        // Compute the query interval given the offsets of the target interval start and end into the first and
-        // last ContinuousBlocks.
-        int toStart = targetIntersection.chain.getBlock(targetIntersection.firstBlockIndex).toStart + targetIntersection.startOffset;
-        int toEnd = targetIntersection.chain.getBlock(targetIntersection.lastBlockIndex).getToEnd() - targetIntersection.offsetFromEnd;
-        if (toEnd <= toStart || toStart < 0) {
-            throw new SAMException("Something strange lifting over interval " + intervalName);
-        }
-
-        if (targetIntersection.chain.toOppositeStrand) {
-            // Flip if query is negative.
-            int negativeStart = targetIntersection.chain.toSequenceSize - toEnd;
-            int negativeEnd = targetIntersection.chain.toSequenceSize - toStart;
-            toStart = negativeStart;
-            toEnd = negativeEnd;
-        }
-        // Convert to 1-based, inclusive.
-        final boolean negativeStrand = targetIntersection.chain.toOppositeStrand ? !sourceNegativeStrand : sourceNegativeStrand;
-        return new Interval(targetIntersection.chain.toSequenceName, toStart+1, toEnd, negativeStrand, intervalName);
-    }
-
-    /**
-     * Add up overlap btw the blocks in this chain and the given interval.
-     * @return Length of overlap, offsets into first and last ContinuousBlocks, and indices of first and
-     * last ContinuousBlocks.
-     */
-    private static TargetIntersection targetIntersection(final Chain chain, final Interval interval) {
-        int intersectionLength = 0;
-        // Convert interval to 0-based, half-open
-        int start = interval.getStart() - 1;
-        int end = interval.getEnd();
-        int firstBlockIndex = -1;
-        int lastBlockIndex = -1;
-        int startOffset = -1;
-        int offsetFromEnd = -1;
-        List<Chain.ContinuousBlock> blockList = chain.getBlocks();
-        for (int i = 0; i < blockList.size(); ++i) {
-            final Chain.ContinuousBlock block = blockList.get(i);
-            if (block.fromStart >= end) {
-                break;
-            } else if (block.getFromEnd() <= start) {
-                continue;
-            }
-            if (firstBlockIndex == -1) {
-                firstBlockIndex = i;
-                if (start > block.fromStart) {
-                    startOffset = start - block.fromStart;
-                } else {
-                    startOffset = 0;
-                }
-            }
-            lastBlockIndex = i;
-            if (block.getFromEnd() > end) {
-                offsetFromEnd = block.getFromEnd() - end;
-            } else {
-                offsetFromEnd = 0;
-            }
-            int thisIntersection = Math.min(end, block.getFromEnd()) - Math.max(start, block.fromStart);
-            if (thisIntersection <= 0) {
-                throw new SAMException("Should have been some intersection.");
-            }
-            intersectionLength += thisIntersection;
-        }
-        if (intersectionLength == 0) {
-            return null;
-        }
-        return new TargetIntersection(chain, intersectionLength, startOffset, offsetFromEnd, firstBlockIndex, lastBlockIndex);
-    }
-
-    /**
-     * Get minimum fraction of bases that must remap.
-     */
-    public double getLiftOverMinMatch() {
-        return liftOverMinMatch;
-    }
-
-    /**
-     * Set minimum fraction of bases that must remap.
-     */
-    public void setLiftOverMinMatch(final double liftOverMinMatch) {
-        this.liftOverMinMatch = liftOverMinMatch;
-    }
-
-    /**
-    * Value class returned by targetIntersection()
-    */
-    private static class TargetIntersection {
-        /** Chain used for this intersection */
-        final Chain chain;
-        /** Total intersectionLength length */
-        final int intersectionLength;
-        /** Offset of target interval start in first block. */
-        final int startOffset;
-        /** Distance from target interval end to end of last block. */
-        final int offsetFromEnd;
-        /** Index of first ContinuousBlock matching interval. */
-        final int firstBlockIndex;
-        /** Index of last ContinuousBlock matching interval. */
-        final int lastBlockIndex;
-
-        TargetIntersection(final Chain chain,final int intersectionLength, final int startOffset,
-                           final int offsetFromEnd, final int firstBlockIndex, final int lastBlockIndex) {
-            this.chain = chain;
-            this.intersectionLength = intersectionLength;
-            this.startOffset = startOffset;
-            this.offsetFromEnd = offsetFromEnd;
-            this.firstBlockIndex = firstBlockIndex;
-            this.lastBlockIndex = lastBlockIndex;
-        }
-    }
-
-    /**
-     * Represents a portion of a liftover operation, for use in diagnosing liftover failures.
-     */
-    public static class PartialLiftover {
-        /** Intersection between "from" interval and "from" region of a chain. */
-        final Interval fromInterval;
-        /**
-         * Result of lifting over fromInterval (with no percentage mapped requirement).  This is null
-         * if fromInterval falls entirely with a gap of the chain. */
-        final Interval toInterval;
-        /** id of chain used for this liftover */
-        final int chainId;
-        /** Percentage of bases in fromInterval that lifted over.  0 if fromInterval is not covered by any chain. */
-        final float percentLiftedOver;
-
-        PartialLiftover(final Interval fromInterval, final Interval toInterval, final int chainId, final float percentLiftedOver) {
-            this.fromInterval = fromInterval;
-            this.toInterval = toInterval;
-            this.chainId = chainId;
-            this.percentLiftedOver = percentLiftedOver;
-        }
-
-        PartialLiftover(final Interval fromInterval, final int chainId) {
-            this.fromInterval = fromInterval;
-            this.toInterval = null;
-            this.chainId = chainId;
-            this.percentLiftedOver = 0.0f;
-        }
-
-        public String toString() {
-            if (toInterval == null) {
-                // Matched a chain, but entirely within a gap.
-                return fromInterval.toString() + " (len " + fromInterval.length() + ")=>null using chain " + chainId;
-            }
-            final String strand = toInterval.isNegativeStrand()? "-": "+";
-            return fromInterval.toString() + " (len " + fromInterval.length() + ")=>" + toInterval + "(" + strand
-                    + ") using chain " + chainId + " ; pct matched " + percentLiftedOver;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/metrics/Header.java b/src/main/java/htsjdk/samtools/metrics/Header.java
deleted file mode 100644
index 3672d8b..0000000
--- a/src/main/java/htsjdk/samtools/metrics/Header.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import java.io.Serializable;
-
-/**
- * A header for a metrics file.  A header simply consists of a type and some arbitrary
- * data, but must be able to turn itself into a String and parse it's data back out
- * of that String at a later date.
- *
- * @author Tim Fennell
- */
-public interface Header extends Serializable {
-    /** Converts the header to a String for persisting to a file. */
-    public String toString();
-
-    /** Parses the data contained in the String version of the header. */
-    public void parse(String in);
-
-}
diff --git a/src/main/java/htsjdk/samtools/metrics/MetricBase.java b/src/main/java/htsjdk/samtools/metrics/MetricBase.java
deleted file mode 100644
index 119a479..0000000
--- a/src/main/java/htsjdk/samtools/metrics/MetricBase.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.FormatUtil;
-
-import java.lang.reflect.Field;
-
-/**
- * A base class from which all Metric classes should inherit.
- *
- * @author Tim Fennell
- */
-public class MetricBase {
-    /**
-     * An equals method that checks equality by asserting that the classes are of the exact
-     * same type and that all public fields are equivalent.  Equivalence is checked by formatting
-     * the field as it would be written to disk and then checking String equality.
-     *
-     * @param o an instance to compare to
-     * @return true if they are equal, false otherwise
-     */
-    public boolean equals(final Object o) {
-        if (o == null) return false;
-        if (o.getClass() != getClass()) return false;
-        
-        final FormatUtil formatter = new FormatUtil();
-        // Loop through all the fields and check that they are either
-        // null in both objects or equal in both objects
-        for (final Field f : getClass().getFields()) {
-            try {
-                final Object lhs = f.get(this);
-                final Object rhs = f.get(o);
-
-                if (lhs == null) {
-                    if (rhs == null) {
-                        // keep going
-                    }
-                    else {
-                        return false;
-                    }
-                }
-                else {
-                    if (formatter.format(lhs).equals(formatter.format(rhs))) //compare based on the serialized representation
-                    {
-                        // keep going
-                    }
-                    else {
-                        return false;
-                    }
-                }
-            }
-            catch (IllegalAccessException iae) {
-                throw new SAMException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
-            }
-        }
-
-        // If we got this far all the fields are equal
-        return true;
-    }
-
-    /**
-     * Computes a hashcode by formatting each field into its on disk representation 
-     * and summing the hashcodes of all the fields.
-     */
-    public int hashCode() {
-        int result = 0;
-        FormatUtil formatter = new FormatUtil();
-        for (final Field f : getClass().getFields()) {
-            try {
-                Object value = f.get(this);
-                value = formatter.format(value); //format the value the way it will be written to disk
-                final int fieldHash = value != null ? value.hashCode() : 0;
-                result = 31 * result + fieldHash;
-            } catch (IllegalAccessException e) {
-                throw new SAMException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
-            }
-        }
-        return result;
-    }
-
-    /** Converts the metric class to a human readable string. */
-    public String toString() {
-        final StringBuilder buffer = new StringBuilder();
-        final FormatUtil formatter = new FormatUtil();
-
-        for (final Field f : getClass().getFields()) {
-            try {
-                buffer.append(f.getName());
-                buffer.append('\t');
-                buffer.append(formatter.format(f.get(this)));
-                buffer.append('\n');
-            }
-            catch (IllegalAccessException iae) {
-                throw new SAMException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
-            }
-        }
-
-        return buffer.toString();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/metrics/MetricsFile.java b/src/main/java/htsjdk/samtools/metrics/MetricsFile.java
deleted file mode 100644
index ac0628a..0000000
--- a/src/main/java/htsjdk/samtools/metrics/MetricsFile.java
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.FormatUtil;
-import htsjdk.samtools.util.Histogram;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.*;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Contains a set of metrics that can be written to a file and parsed back
- * again. The set of metrics is composed of zero or more instances of a class,
- * BEAN, that extends {@link MetricBase} (all instances must be of the same type)
- * and may optionally include one or more histograms that share the same key set.
- *
- * @author Tim Fennell
- */
-public class MetricsFile<BEAN extends MetricBase, HKEY extends Comparable> implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public static final String MAJOR_HEADER_PREFIX = "## ";
-    public static final String MINOR_HEADER_PREFIX = "# ";
-    public static final String SEPARATOR = "\t";
-    public static final String HISTO_HEADER = "## HISTOGRAM\t";
-    public static final String METRIC_HEADER = "## METRICS CLASS\t";
-
-    private final Set<String> columnLabels = new HashSet<>();
-    private final List<Header> headers = new ArrayList<>();
-    private final List<BEAN> metrics = new ArrayList<>();
-    private final List<Histogram<HKEY>> histograms = new ArrayList<>();
-
-    /** Adds a header to the collection of metrics. */
-    public void addHeader(Header h) { this.headers.add(h); }
-
-    /** Returns the list of headers. */
-    public List<Header> getHeaders() { return Collections.unmodifiableList(this.headers); }
-
-    /** Adds a bean to the collection of metrics. */
-    public void addMetric(final BEAN bean) { this.metrics.add(bean); }
-
-    /** Add multiple metric beans at once. */
-    public void addAllMetrics(final Iterable<BEAN> beanz) {
-        for (final BEAN bean : beanz) { this.addMetric(bean); }
-    }
-
-    /** Returns the list of headers. */
-    public List<BEAN> getMetrics() { return Collections.unmodifiableList(this.metrics); }
-
-    public Set<String> getMetricsColumnLabels() { return Collections.unmodifiableSet(this.columnLabels); }
-
-    /** Returns the histogram contained in the metrics file if any. */
-    public Histogram<HKEY> getHistogram() {
-        if (!histograms.isEmpty()) return this.histograms.get(0);
-        else return null;
-    }
-
-    /** Sets the histogram contained in the metrics file. */
-    public void setHistogram(final Histogram<HKEY> histogram) {
-        if (this.histograms.isEmpty()) {
-            if (histogram != null) this.histograms.add(histogram);
-        }
-        else {
-            this.histograms.set(0, histogram);
-        }
-    }
-
-    /** Adds a histogram to the list of histograms in the metrics file. */
-    public void addHistogram(final Histogram<HKEY> histogram) {
-        this.histograms.add(histogram);
-    }
-
-    //** Returns an unmodifiable version of the histogram list */
-    public List<Histogram<HKEY>> getAllHistograms() {
-        return Collections.unmodifiableList(histograms);
-    }
-
-    /** Returns the number of histograms added to the metrics file. */
-    public int getNumHistograms() 
-    {
-    	return this.histograms.size();
-    }
-    
-    /** Returns the list of headers with the specified type. */
-    public List<Header> getHeaders(final Class<? extends Header> type) {
-        List<Header> tmp = new ArrayList<Header>();
-        for (final Header h : this.headers) {
-            if (h.getClass().equals(type)) {
-                tmp.add(h);
-            }
-        }
-
-        return tmp;
-    }
-
-    /**
-     * Writes out the metrics file to the supplied file. The file is written out
-     * headers first, metrics second and histogram third.
-     *
-     * @param f a File into which to write the metrics
-     */
-    public void write(final File f) {
-        FileWriter w = null;
-        try {
-            w = new FileWriter(f);
-            write(w);
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Could not write metrics to file: " + f.getAbsolutePath(), ioe);
-        }
-        finally {
-            if (w != null) {
-                try {
-                    w.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-    }
-
-    /**
-     * Writes out the metrics file to the supplied writer. The file is written out
-     * headers first, metrics second and histogram third.
-     *
-     * @param w a Writer into which to write the metrics
-     */
-    public void write(final Writer w) {
-        try {
-            final FormatUtil formatter = new FormatUtil();
-            final BufferedWriter out = new BufferedWriter(w);
-            printHeaders(out);
-            out.newLine();
-
-            printBeanMetrics(out, formatter);
-            out.newLine();
-
-            printHistogram(out, formatter);
-            out.newLine();
-            out.flush();
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Could not write metrics file.", ioe);
-        }
-    }
-
-    /** Prints the headers into the provided PrintWriter. */
-    private void printHeaders(final BufferedWriter out) throws IOException {
-        for (final Header h : this.headers) {
-            out.append(MAJOR_HEADER_PREFIX);
-            out.append(h.getClass().getName());
-            out.newLine();
-            out.append(MINOR_HEADER_PREFIX);
-            out.append(h.toString());
-            out.newLine();
-        }
-    }
-
-    /** Prints each of the metrics entries into the provided PrintWriter. */
-    private void printBeanMetrics(final BufferedWriter out, final FormatUtil formatter) throws IOException {
-        if (this.metrics.isEmpty()) {
-            return;
-        }
-
-        // Write out a header row with the type of the metric class
-        out.append(METRIC_HEADER + getBeanType().getName());
-        out.newLine();
-
-        // Write out the column headers
-        final Field[] fields = getBeanType().getFields();
-        final int fieldCount = fields.length;
-
-        // Write out the column headers
-        for (int i=0; i<fieldCount; ++i) {
-            out.append(fields[i].getName());
-            if (i < fieldCount - 1) {
-                out.append(MetricsFile.SEPARATOR);
-            }
-            else {
-                out.newLine();
-            }
-        }
-
-        // Write out each of the data rows
-        for (final BEAN bean : this.metrics) {
-            for (int i=0; i<fieldCount; ++i) {
-                try {
-                    final Object value = fields[i].get(bean);
-                    out.append(StringUtil.assertCharactersNotInString(formatter.format(value), '\t', '\n'));
-
-                    if (i < fieldCount - 1) {
-                        out.append(MetricsFile.SEPARATOR);
-                    }
-                    else {
-                        out.newLine();
-                    }
-                }
-                catch (IllegalAccessException iae) {
-                    throw new SAMException("Could not read property " + fields[i].getName()
-                            + " from class of type " + bean.getClass());
-                }
-            }
-        }
-
-        out.flush();
-    }
-
-    /** Prints the histogram if one is present. */
-    private void printHistogram(final BufferedWriter out, final FormatUtil formatter) throws IOException {
-        final List<Histogram<HKEY>> nonEmptyHistograms = new ArrayList<Histogram<HKEY>>();
-        for (final Histogram<HKEY> histo : this.histograms) {
-            if (!histo.isEmpty()) nonEmptyHistograms.add(histo);
-        }
-
-        if (nonEmptyHistograms.isEmpty()) {
-            return;
-        }
-
-        // Build a combined key set.  Assume comparator is the same for all Histograms
-        final java.util.Set<HKEY> keys = new TreeSet<HKEY>(nonEmptyHistograms.get(0).comparator());
-        for (final Histogram<HKEY> histo : nonEmptyHistograms) {
-            if (histo != null) keys.addAll(histo.keySet());
-        }
-
-        // Add a header for the histogram key type
-        out.append(HISTO_HEADER + nonEmptyHistograms.get(0).keySet().iterator().next().getClass().getName());
-        out.newLine();
-
-        // Output a header row
-        out.append(StringUtil.assertCharactersNotInString(nonEmptyHistograms.get(0).getBinLabel(), '\t', '\n'));
-        for (final Histogram<HKEY> histo : nonEmptyHistograms) {
-            out.append(SEPARATOR);
-            out.append(StringUtil.assertCharactersNotInString(histo.getValueLabel(), '\t', '\n'));
-        }
-        out.newLine();
-
-        for (final HKEY key : keys) {
-            out.append(key.toString());
-
-            for (final Histogram<HKEY> histo : nonEmptyHistograms) {
-                final Histogram.Bin<HKEY> bin = histo.get(key);
-                final double value = (bin == null ? 0 : bin.getValue());
-
-                out.append(SEPARATOR);
-                out.append(formatter.format(value));
-            }
-
-            out.newLine();
-        }
-    }
-
-    /** Gets the type of the metrics bean being used. */
-    private Class<?> getBeanType() {
-        if (this.metrics.isEmpty()) {
-            return null;
-        } else {
-            return this.metrics.get(0).getClass();
-        }
-    }
-
-    /** Reads the Metrics in from the given reader. */
-    public void read(final Reader r) {
-        final BufferedReader in = new BufferedReader(r);
-        final FormatUtil formatter = new FormatUtil();
-        String line = null;
-
-        try {
-            // First read the headers
-            Header header = null;
-            while ((line = in.readLine()) != null) {
-                line = line.trim();
-                if ("".equals(line)) {
-                    // Do nothing! Nothing to be done!
-                }
-                else if (line.startsWith(METRIC_HEADER) || line.startsWith(HISTO_HEADER)) {
-                    // A line that starts with "## METRICS CLASS" heralds the start of the actual
-                    // data. Bounce our butts out of header parsing without reading the next line.
-                    // This isn't in the while loop's conditional because we want to trim() first.
-                    break;
-                }
-                else if (line.startsWith(MAJOR_HEADER_PREFIX)) {
-                    if (header != null) {
-                        throw new IllegalStateException("Consecutive header class lines encountered.");
-                    }
-                    
-                    final String className = line.substring(MAJOR_HEADER_PREFIX.length()).trim();
-                    try {
-                        header = (Header) loadClass(className, true).newInstance();
-                    }
-                    catch (final Exception e) {
-                        throw new SAMException("Error load and/or instantiating an instance of " + className, e);
-                    }
-                }
-                else if (line.startsWith(MINOR_HEADER_PREFIX)) {
-                    if (header == null) {
-                        throw new IllegalStateException("Header class must precede header value:" + line);
-                    }
-                    header.parse(line.substring(MINOR_HEADER_PREFIX.length()));
-                    this.headers.add(header);
-                    header = null;
-                }
-                else {
-                    throw new SAMException("Illegal state. Found following string in metrics file header: " + line);
-                }
-            }
-
-            // Read space between headers and metrics, if any
-            while (line != null && ! line.trim().startsWith(MAJOR_HEADER_PREFIX)) {
-                line = in.readLine();
-            }
-
-
-            if (line != null) {
-                line = line.trim();
-            
-                // Then read the metrics if there are any
-                if (line.startsWith(METRIC_HEADER)) {
-                    // Get the metric class from the header
-                    final String className = line.split(SEPARATOR)[1];
-                    Class<?> type = null;
-                    try {
-                        type = loadClass(className, true);
-                    }
-                    catch (final ClassNotFoundException cnfe) {
-                        throw new SAMException("Could not locate class with name " + className, cnfe);
-                    }
-
-                    // Read the next line with the column headers
-                    final String[] fieldNames = in.readLine().split(SEPARATOR);
-                    Collections.addAll(columnLabels, fieldNames);
-                    final Field[] fields = new Field[fieldNames.length];
-                    for (int i=0; i<fieldNames.length; ++i) {
-                        try {
-                            fields[i] = type.getField(fieldNames[i]);
-                        }
-                        catch (final Exception e) {
-                            throw new SAMException("Could not get field with name " + fieldNames[i] +
-                                " from class " + type.getName());
-                        }
-                    }
-
-                    // Now read the values
-                    while ((line = in.readLine()) != null) {
-                        if ("".equals(line.trim())) {
-                            break;
-                        }
-                        else {
-                            final String[] values = line.split(SEPARATOR, -1);
-                            BEAN bean = null;
-
-                            try { bean = (BEAN) type.newInstance(); }
-                            catch (final Exception e) { throw new SAMException("Error instantiating a " + type.getName(), e); }
-
-                            for (int i=0; i<fields.length; ++i) {
-                                Object value = null;
-                                if (values[i] != null && !values[i].isEmpty()) {
-                                    value = formatter.parseObject(values[i], fields[i].getType());
-                                }
-
-                                try { fields[i].set(bean, value); }
-                                catch (final Exception e) {
-                                    throw new SAMException("Error setting field " + fields[i].getName() +
-                                            " on class of type " + type.getName(), e);
-                                }
-                            }
-
-                            this.metrics.add(bean);
-                        }
-                    }
-                }
-            }
-
-            // Read away any blank lines between metrics and histograms
-            while (line != null && ! line.trim().startsWith(MAJOR_HEADER_PREFIX)) {
-                line = in.readLine();
-            }
-
-            // Then read the histograms if any are present
-            if (line != null) {
-                line = line.trim();
-
-                if (line.startsWith(HISTO_HEADER)) {
-                    // Get the key type of the histogram
-                    final String keyClassName = line.split(SEPARATOR)[1].trim();
-                    Class<?> keyClass = null;
-
-                    try { keyClass = loadClass(keyClassName, true); }
-                    catch (final ClassNotFoundException cnfe) { throw new SAMException("Could not load class with name " + keyClassName); }
-
-                    // Read the next line with the bin and value labels
-                    final String[] labels = in.readLine().split(SEPARATOR);
-                    for (int i=1; i<labels.length; ++i) {
-                        this.histograms.add(new Histogram<HKEY>(labels[0], labels[i]));
-                    }
-
-                    // Read the entries in the histograms
-                    while ((line = in.readLine()) != null && !"".equals(line)) {
-                        final String[] fields = line.trim().split(SEPARATOR);
-                        final HKEY key = (HKEY) formatter.parseObject(fields[0], keyClass);
-
-                        for (int i=1; i<fields.length; ++i) {
-                            final double value = formatter.parseDouble(fields[i]);
-                            this.histograms.get(i-1).increment(key, value);
-                        }
-                    }
-                }
-            }
-        }
-        catch (final IOException ioe) {
-            throw new SAMException("Could not read metrics from reader.", ioe);
-        }
-        finally{
-            CloserUtil.close(in);
-        }
-    }
-
-    /** Attempts to load a class, taking into account that some classes have "migrated" from the broad to sf. */
-    private Class<?> loadClass(final String className, final boolean tryOtherPackages) throws ClassNotFoundException {
-        // List of alternative packages to check in case classes moved around
-        final String[] packages = new String[] {
-                "edu.mit.broad.picard.genotype.concordance",
-                "edu.mit.broad.picard.genotype.fingerprint",
-                "edu.mit.broad.picard.ic",
-                "edu.mit.broad.picard.illumina",
-                "edu.mit.broad.picard.jumping",
-                "edu.mit.broad.picard.quality",
-                "edu.mit.broad.picard.samplevalidation",
-                "htsjdk.samtools.analysis",
-                "htsjdk.samtools.analysis.directed",
-                "htsjdk.samtools.sam",
-                "htsjdk.samtools.metrics",
-                "picard.sam",
-                "picard.metrics",
-                "picard.illumina",
-                "picard.analysis",
-                "picard.analysis.directed",
-                "picard.vcf"
-        };
-
-        try { return Class.forName(className); }
-        catch (ClassNotFoundException cnfe) {
-            if (tryOtherPackages) {
-                for (final String p : packages) {
-                    try {
-                        return loadClass(p + className.substring(className.lastIndexOf('.')), false);
-                    }
-                    catch (ClassNotFoundException cnf2) {/* do nothing */}
-                    // If it ws an inner class, try and see if it's a stand-alone class now
-                    if (className.indexOf('$') > -1) {
-                        try {
-                            return loadClass(p + "." + className.substring(className.lastIndexOf('$') + 1), false);
-                        }
-                        catch (ClassNotFoundException cnf2) {/* do nothing */}
-                    }
-                }
-            }
-
-            throw cnfe;
-        }
-    }
-
-    /** Checks that the headers, metrics and histogram are all equal. */
-    @Override
-    public boolean equals(final Object o) {
-        if (o == null) {
-            return false;
-        }
-        if (getClass() != o.getClass()) {
-            return false;
-        }
-        final MetricsFile that = (MetricsFile) o;
-
-        if (!areHeadersEqual(that)) {
-            return false;
-        }
-        if (!areMetricsEqual(that)) {
-            return false;
-        }
-        if (!areHistogramsEqual(that)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    public boolean areHeadersEqual(final MetricsFile that) {
-        return this.headers.equals(that.headers);
-    }
-
-    public boolean areMetricsEqual(final MetricsFile that) {
-        return this.metrics.equals(that.metrics);
-    }
-
-    public boolean areHistogramsEqual(final MetricsFile that) {
-        return this.histograms.equals(that.histograms);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = headers.hashCode();
-        result = 31 * result + metrics.hashCode();
-        return result;
-    }
-
-    /**
-     * Convenience method to read all the Metric beans from a metrics file.
-     * @param file to be read.
-     * @return list of beans from the file.
-     */
-    public static <T extends MetricBase> List<T> readBeans(final File file) {
-        final MetricsFile<T, ?> metricsFile = new MetricsFile<>();
-        final Reader in = IOUtil.openFileForBufferedReading(file);
-        metricsFile.read(in);
-        CloserUtil.close(in);
-        return metricsFile.getMetrics();
-    }
-
-    /**
-     * Method to read the header from a metrics file.
-     */
-    public static List<Header> readHeaders(final File file) {
-        try {
-            final MetricsFile<MetricBase, ?> metricsFile = new MetricsFile<>();
-            metricsFile.read(new FileReader(file));
-            return metricsFile.getHeaders();
-        } catch (FileNotFoundException e) {
-            throw new SAMException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Compare the metrics in two files, ignoring headers and histograms.
-     */
-    public static boolean areMetricsEqual(final File file1, final File file2) {
-        try {
-            final MetricsFile<MetricBase, ?> mf1 = new MetricsFile<>();
-            final MetricsFile<MetricBase, ?> mf2 = new MetricsFile<>();
-            mf1.read(new FileReader(file1));
-            mf2.read(new FileReader(file2));
-            return mf1.areMetricsEqual(mf2);
-        } catch (FileNotFoundException e) {
-            throw new SAMException(e.getMessage(), e);
-        }
-
-    }
-
-    /**
-     * Compare the metrics and histograms in two files, ignoring headers.
-     */
-    public static boolean areMetricsAndHistogramsEqual(final File file1, final File file2) {
-        try {
-            final MetricsFile<MetricBase, ?> mf1 = new MetricsFile<>();
-            final MetricsFile<MetricBase, ?> mf2 = new MetricsFile<>();
-            mf1.read(new FileReader(file1));
-            mf2.read(new FileReader(file2));
-
-            return mf1.areMetricsEqual(mf2) && mf1.areHistogramsEqual(mf2);
-
-        } catch (FileNotFoundException e) {
-            throw new SAMException(e.getMessage(), e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/metrics/StringHeader.java b/src/main/java/htsjdk/samtools/metrics/StringHeader.java
deleted file mode 100644
index ced1595..0000000
--- a/src/main/java/htsjdk/samtools/metrics/StringHeader.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.util.StringUtil;
-
-/**
- * A simple header who's data type is a single String.  Should not be used for anything other
- * than comments or descriptive text.
- *
- * @author Tim Fennell
- */
-public class StringHeader implements Header {
-    private String value;
-
-    /** Default constructor. */
-    public StringHeader() {}
-
-    /** Constructor that uses the supplied value as the value of the header. */
-    public StringHeader(String value) {
-        setValue(value);
-    }
-
-    public void parse(String in) { value = in.trim(); }
-    public String toString() { return value; }
-
-    public String getValue() { return value; }
-    public void setValue(String value) { this.value = StringUtil.assertCharactersNotInString(value, '\n'); }
-
-    /** Checks equality on the value of the header. */
-    public boolean equals(Object o) {
-        if (o != null && o instanceof StringHeader) {
-            StringHeader that = (StringHeader) o;
-            if (this.value == null) {
-                return that.value == null;
-            }
-            else {
-                return this.value.equals(that.value);
-            }
-        }
-        else {
-            return false;
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return value != null ? value.hashCode() : 0;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/metrics/VersionHeader.java b/src/main/java/htsjdk/samtools/metrics/VersionHeader.java
deleted file mode 100644
index ae08455..0000000
--- a/src/main/java/htsjdk/samtools/metrics/VersionHeader.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.util.StringUtil;
-
-/**
- * Header that stores information about the version of some piece of software or
- * data used to create the metrics file.  Payload consists of a name or description
- * of the versioned item and a version string.
- *
- * @author Tim Fennell
- */
-public class VersionHeader implements Header {
-    private String versionedItem;
-    private String versionString;
-
-    public void parse(String in) {
-        String[] fields = in.split("\t");
-        this.versionedItem = fields[0];
-        this.versionString = fields[1];
-    }
-
-    public String toString() {
-        return this.versionedItem + "\t" + this.versionString;
-    }
-
-    public String getVersionedItem() { return versionedItem; }
-    public void setVersionedItem(String versionedItem) {
-        this.versionedItem = StringUtil.assertCharactersNotInString(versionedItem, '\t', '\n');
-    }
-
-    public String getVersionString() { return versionString; }
-    public void setVersionString(String versionString) {
-        this.versionString = StringUtil.assertCharactersNotInString(versionString, '\t', '\n');
-    }
-
-    /** Equals method that checks that both the item and version string are equal. */
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        VersionHeader that = (VersionHeader) o;
-
-        if (versionString != null ? !versionString.equals(that.versionString) : that.versionString != null)
-            return false;
-        if (versionedItem != null ? !versionedItem.equals(that.versionedItem) : that.versionedItem != null)
-            return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = versionedItem != null ? versionedItem.hashCode() : 0;
-        result = 31 * result + (versionString != null ? versionString.hashCode() : 0);
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/AbstractFastaSequenceFile.java b/src/main/java/htsjdk/samtools/reference/AbstractFastaSequenceFile.java
deleted file mode 100644
index 86f11fe..0000000
--- a/src/main/java/htsjdk/samtools/reference/AbstractFastaSequenceFile.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMTextHeaderCodec;
-import htsjdk.samtools.util.BufferedLineReader;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-/**
- * Provide core sequence dictionary functionality required by all fasta file readers.
- * @author Matt Hanna
- */
-abstract class AbstractFastaSequenceFile implements ReferenceSequenceFile {
-    private final Path path;
-    protected SAMSequenceDictionary sequenceDictionary;
-
-    /**
-     * Finds and loads the sequence file dictionary.
-     * @param file Fasta file to read.  Also acts as a prefix for supporting files.
-     */
-    AbstractFastaSequenceFile(final File file) {
-        this(file == null ? null : file.toPath());
-    }
-
-    /**
-     * Finds and loads the sequence file dictionary.
-     * @param path Fasta file to read.  Also acts as a prefix for supporting files.
-     */
-    AbstractFastaSequenceFile(final Path path) {
-        this.path = path;
-        final Path dictionary = findSequenceDictionary(path);
-
-        if (dictionary != null) {
-            IOUtil.assertFileIsReadable(dictionary);
-
-            try {
-                final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-                final BufferedLineReader reader = new BufferedLineReader(Files.newInputStream(dictionary));
-                final SAMFileHeader header = codec.decode(reader,
-                        dictionary.toString());
-                if (header.getSequenceDictionary() != null && !header.getSequenceDictionary().isEmpty()) {
-                    this.sequenceDictionary = header.getSequenceDictionary();
-                }
-                reader.close();
-            }
-            catch (Exception e) {
-                throw new SAMException("Could not open sequence dictionary file: " + dictionary, e);
-            }
-        }
-    }
-
-    protected static File findSequenceDictionary(final File file) {
-        if (file == null) {
-            return null;
-        }
-        Path dictionary = findSequenceDictionary(file.toPath());
-        if (dictionary == null) {
-            return null;
-        }
-        return dictionary.toFile();
-    }
-
-    protected static Path findSequenceDictionary(final Path path) {
-        if (path == null) {
-            return null;
-        }
-        // Try and locate the dictionary
-        Path dictionary = path.toAbsolutePath();
-        Path dictionaryExt = path.toAbsolutePath();
-        boolean fileTypeSupported = false;
-        for (final String extension : ReferenceSequenceFileFactory.FASTA_EXTENSIONS) {
-            String filename = dictionary.getFileName().toString();
-            if (filename.endsWith(extension)) {
-                dictionaryExt = dictionary.resolveSibling(filename + IOUtil
-                    .DICT_FILE_EXTENSION);
-                String filenameNoExt = filename.substring(0, filename.lastIndexOf(extension));
-                dictionary = dictionary.resolveSibling(filenameNoExt+ IOUtil.DICT_FILE_EXTENSION);
-                fileTypeSupported = true;
-                break;
-            }
-        }
-        if (!fileTypeSupported)
-            throw new IllegalArgumentException("File is not a supported reference file type: " + path.toAbsolutePath());
-
-        if (Files.exists(dictionary))
-            return dictionary;
-        // try without removing the file extension
-        if (Files.exists(dictionaryExt))
-            return dictionaryExt;
-        else return null;
-    }
-
-    /** Returns the path to the reference file. */
-    protected Path getPath() {
-        return path;
-    }
-
-    /**
-     * Returns the list of sequence records associated with the reference sequence if found
-     * otherwise null.
-     */
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return this.sequenceDictionary;
-    }
-
-    /** Returns the full path to the reference file. */
-    protected String getAbsolutePath() {
-        return path.toAbsolutePath().toString();
-    }
-
-    /** Returns the full path to the reference file. */
-    public String toString() {
-        return getAbsolutePath();
-    }
-
-    /** default implementation -- override if index is supported */
-    public boolean isIndexed() {return false;}
-
-    /** default implementation -- override if index is supported */
-    public ReferenceSequence getSequence( String contig ) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** default implementation -- override if index is supported */
-    public ReferenceSequence getSubsequenceAt( String contig, long start, long stop ) {
-        throw new UnsupportedOperationException("Index does not appear to exist for " + getAbsolutePath() + ".  samtools faidx can be used to create an index");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/reference/FastaSequenceFile.java b/src/main/java/htsjdk/samtools/reference/FastaSequenceFile.java
deleted file mode 100644
index 72c0583..0000000
--- a/src/main/java/htsjdk/samtools/reference/FastaSequenceFile.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.util.FastLineReader;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.StringUtil;
-
-import java.io.File;
-import java.nio.file.Path;
-
-/**
- * Implementation of ReferenceSequenceFile for reading from FASTA files.
- *
- * @author Tim Fennell
- */
-public class FastaSequenceFile extends AbstractFastaSequenceFile {
-
-    private final boolean truncateNamesAtWhitespace;
-    private FastLineReader in;
-    private int sequenceIndex = -1;
-    private final byte[] basesBuffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
-
-
-    /** Constructs a FastaSequenceFile that reads from the specified file. */
-    public FastaSequenceFile(final File file, final boolean truncateNamesAtWhitespace) {
-        this(file == null ? null : file.toPath(), truncateNamesAtWhitespace);
-    }
-
-    /** Constructs a FastaSequenceFile that reads from the specified file. */
-    public FastaSequenceFile(final Path path, final boolean truncateNamesAtWhitespace) {
-        super(path);
-        this.truncateNamesAtWhitespace = truncateNamesAtWhitespace;
-        this.in = new FastLineReader(IOUtil.openFileForReading(path));
-    }
-
-    /**
-     * It's good to call this to free up memory.
-     */
-    public void close() {
-        in.close();
-    }
-
-    public ReferenceSequence nextSequence() {
-        this.sequenceIndex += 1;
-
-        // Read the header line
-        final String name = readSequenceName();
-        if (name == null) {
-            close();
-            return null;
-        }
-
-        // Read the sequence
-        final int knownLength = (this.sequenceDictionary == null) ? -1 : this.sequenceDictionary.getSequence(this.sequenceIndex).getSequenceLength();
-        final byte[] bases = readSequence(knownLength);
-
-        return new ReferenceSequence(name, this.sequenceIndex, bases);
-    }
-
-    public void reset() {
-        this.sequenceIndex = -1;
-        this.in.close();
-        this.in = new FastLineReader(IOUtil.openFileForReading(getPath()));
-
-    }
-
-    private String readSequenceName() {
-        in.skipNewlines();
-        if (in.eof()) {
-            return null;
-        }
-        final byte b = in.getByte();
-        if (b != '>') {
-            throw new SAMException("Format exception reading FASTA " + getAbsolutePath() + ".  Expected > but saw chr(" +
-            b + ") at start of sequence with index " + this.sequenceIndex);
-        }
-        final byte[] nameBuffer = new byte[4096];
-        int nameLength = 0;
-        do {
-            if (in.eof()) {
-                break;
-            }
-            nameLength += in.readToEndOfOutputBufferOrEoln(nameBuffer, nameLength);
-            if (nameLength == nameBuffer.length && !in.atEoln()) {
-                throw new SAMException("Sequence name too long in FASTA " + getAbsolutePath());
-            }
-        } while (!in.atEoln());
-        if (nameLength == 0) {
-            throw new SAMException("Missing sequence name in FASTA " + getAbsolutePath());
-        }
-        String name = StringUtil.bytesToString(nameBuffer, 0, nameLength).trim();
-        if (truncateNamesAtWhitespace) {
-            name = SAMSequenceRecord.truncateSequenceName(name);
-        }
-        return name;
-    }
-
-    /**
-     * Read bases from input
-     * @param knownLength For performance:: -1 if length is not known, otherwise the length of the sequence.
-     * @return ASCII bases for sequence
-     */
-    private byte[] readSequence(final int knownLength) {
-        byte[] bases = (knownLength == -1) ?  basesBuffer : new byte[knownLength] ;
-
-        int sequenceLength = 0;
-        while (!in.eof()) {
-            final boolean sawEoln = in.skipNewlines();
-            if (in.eof()) {
-                break;
-            }
-            if (sawEoln && in.peekByte() == '>') {
-                break;
-            }
-            sequenceLength += in.readToEndOfOutputBufferOrEoln(bases, sequenceLength);
-            while (sequenceLength > 0 && Character.isWhitespace(StringUtil.byteToChar(bases[sequenceLength - 1]))) {
-                --sequenceLength;
-            }
-            if (sequenceLength == knownLength) {
-                // When length is known, make sure there is no trailing whitespace that hasn't been traversed.
-                skipToEoln();
-                break;
-            }
-            if (sequenceLength == bases.length) {
-                    final byte[] tmp = new byte[bases.length * 2];
-                    System.arraycopy(bases, 0, tmp, 0, sequenceLength);
-                    bases = tmp;
-            }
-        }
-
-        // And lastly resize the array down to the right size
-        if (sequenceLength != bases.length || bases == basesBuffer) {
-            final byte[] tmp = new byte[sequenceLength];
-            System.arraycopy(bases, 0, tmp, 0, sequenceLength);
-            bases = tmp;
-        }
-        return bases;
-    }
-
-    private void skipToEoln() {
-        byte[] ignoreBuffer = new byte[1024];
-        while (!in.eof() && !in.atEoln()) {
-            in.readToEndOfOutputBufferOrEoln(ignoreBuffer, 0);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/FastaSequenceIndex.java b/src/main/java/htsjdk/samtools/reference/FastaSequenceIndex.java
deleted file mode 100644
index e314fcc..0000000
--- a/src/main/java/htsjdk/samtools/reference/FastaSequenceIndex.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Scanner;
-import java.util.regex.MatchResult;
-
-/**
- * Reads a fasta index file (.fai), as generated by `samtools faidx`.
- */
-public class FastaSequenceIndex implements Iterable<FastaSequenceIndexEntry> {
-    /**
-     * Store the entries.  Use a LinkedHashMap for consistent iteration in insertion order.
-     */
-    private final Map<String,FastaSequenceIndexEntry> sequenceEntries = new LinkedHashMap<String,FastaSequenceIndexEntry>();
-
-    /**
-     * Build a sequence index from the specified file.
-     * @param indexFile File to open.
-     * @throws FileNotFoundException if the index file cannot be found.
-     */
-    public FastaSequenceIndex( File indexFile ) {
-        this(indexFile == null ? null : indexFile.toPath());
-    }
-
-    /**
-     * Build a sequence index from the specified file.
-     * @param indexFile File to open.
-     * @throws FileNotFoundException if the index file cannot be found.
-     */
-    public FastaSequenceIndex( Path indexFile ) {
-        IOUtil.assertFileIsReadable(indexFile);
-        parseIndexFile(indexFile);
-    }
-
-    /**
-     * Empty, protected constructor for unit testing.
-     */
-    protected FastaSequenceIndex() {}
-
-    /**
-     * Add a new index entry to the list.  Protected for unit testing.
-     * @param indexEntry New index entry to add.
-     */
-    protected void add(FastaSequenceIndexEntry indexEntry) {
-        final FastaSequenceIndexEntry ret = sequenceEntries.put(indexEntry.getContig(),indexEntry);
-        if (ret != null) {
-            throw new SAMException("Contig '" + indexEntry.getContig() + "' already exists in fasta index.");
-        }
-    }
-
-    /**
-     * Renames the existing index entry to the new index entry with the specified name.
-     * @param entry entry to update.
-     * @param newName New name for the index entry.
-     */
-    protected void rename(FastaSequenceIndexEntry entry,String newName) {
-        sequenceEntries.remove(entry.getContig());
-        entry.setContig(newName);
-        add(entry);
-    }
-
-    /**
-     * Compare two FastaSequenceIndex objects for equality.
-     * @param other Another FastaSequenceIndex to compare
-     * @return True if index has the same entries as other instance, in the same order
-     */
-    public boolean equals(Object other) {
-        if(!(other instanceof FastaSequenceIndex))
-            return false;
-
-        if (this == other) return true;
-
-        FastaSequenceIndex otherIndex = (FastaSequenceIndex)other;
-        if(this.size() != otherIndex.size())
-            return false;
-
-        Iterator<FastaSequenceIndexEntry> iter = this.iterator();
-        Iterator<FastaSequenceIndexEntry> otherIter = otherIndex.iterator();
-        while (iter.hasNext()) {
-            if (!otherIter.hasNext())
-                return false;
-            if (!iter.next().equals(otherIter.next()))
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Parse the contents of an index file, caching the results internally.
-     * @param indexFile File to parse.
-     * @throws IOException Thrown if file could not be opened.
-     */
-    private void parseIndexFile(Path indexFile) {
-        try {
-            Scanner scanner = new Scanner(indexFile);
-            int sequenceIndex = 0;
-            while( scanner.hasNext() ) {
-                // Tokenize and validate the index line.
-                String result = scanner.findInLine("(.+)\\t+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)");
-                if( result == null )
-                    throw new SAMException("Found invalid line in index file:" + scanner.nextLine());
-                MatchResult tokens = scanner.match();
-                if( tokens.groupCount() != 5 )
-                    throw new SAMException("Found invalid line in index file:" + scanner.nextLine());
-
-                // Skip past the line separator
-                scanner.nextLine();
-
-                // Parse the index line.
-                String contig = tokens.group(1);
-                long size = Long.valueOf(tokens.group(2));
-                long location = Long.valueOf(tokens.group(3));
-                int basesPerLine = Integer.valueOf(tokens.group(4));
-                int bytesPerLine = Integer.valueOf(tokens.group(5));
-
-                contig = SAMSequenceRecord.truncateSequenceName(contig);
-                // Build sequence structure
-                add(new FastaSequenceIndexEntry(contig,location,size,basesPerLine,bytesPerLine, sequenceIndex++) );
-            }
-            scanner.close();
-        } catch (IOException e) {
-            throw new SAMException("Fasta index file could not be opened: " + indexFile, e);
-
-        }
-    }
-
-    /**
-     * Does the given contig name have a corresponding entry?
-     * @param contigName The contig name for which to search.
-     * @return True if contig name is present; false otherwise.
-     */
-    public boolean hasIndexEntry( String contigName ) {
-        return sequenceEntries.containsKey(contigName);
-    }
-
-    /**
-     * Retrieve the index entry associated with the given contig.
-     * @param contigName Name of the contig for which to search.
-     * @return Index entry associated with the given contig.
-     * @throws SAMException if the associated index entry can't be found.
-     */
-    public FastaSequenceIndexEntry getIndexEntry( String contigName ) {
-        if( !hasIndexEntry(contigName) )
-            throw new SAMException("Unable to find entry for contig: " + contigName);
-
-        return sequenceEntries.get(contigName);
-    }
-
-    /**
-     * Creates an iterator which can iterate through all entries in a fasta index.
-     * @return iterator over all fasta index entries.
-     */
-    public Iterator<FastaSequenceIndexEntry> iterator() {
-        return sequenceEntries.values().iterator();
-    }
-
-    /**
-     * Returns the number of elements in the index.
-     * @return Number of elements in the index.
-     */
-    public int size() {
-        return sequenceEntries.size();
-    }
-}
-
-/**
- * Hold an individual entry in a fasta sequence index file.
- */
-class FastaSequenceIndexEntry {
-    private String contig;
-    private long location;
-    private long size;
-    private int basesPerLine;
-    private int bytesPerLine;
-    private final int sequenceIndex;
-
-    /**
-     * Create a new entry with the given parameters.
-     * @param contig Contig this entry represents.
-     * @param location Location (byte coordinate) in the fasta file.
-     * @param size The number of bases in the contig.
-     * @param basesPerLine How many bases are on each line.
-     * @param bytesPerLine How many bytes are on each line (includes newline characters).
-     */
-    public FastaSequenceIndexEntry( String contig,
-                                    long location,
-                                    long size,
-                                    int basesPerLine,
-                                    int bytesPerLine,
-                                    int sequenceIndex) {
-        this.contig = contig;
-        this.location = location;
-        this.size = size;
-        this.basesPerLine = basesPerLine;
-        this.bytesPerLine = bytesPerLine;
-        this.sequenceIndex = sequenceIndex;
-    }
-
-    /**
-     * Gets the contig associated with this entry.
-     * @return String representation of the contig.
-     */
-    public String getContig() {
-        return contig;
-    }
-
-    /**
-     * Sometimes contigs need to be adjusted on-the-fly to
-     * match sequence dictionary entries.  Provide that capability
-     * to other classes w/i the package. 
-     * @param contig New value for the contig.
-     */
-    protected void setContig(String contig) {
-        this.contig = contig;
-    }
-
-    /**
-     * Gets the location of this contig within the fasta.
-     * @return seek position within the fasta.
-     */
-    public long getLocation() {
-        return location;
-    }
-
-    /**
-     * Gets the size, in bytes, of the data in the contig.
-     * @return size of the contig bases in bytes.
-     */
-    public long getSize() {
-        return size;
-    }
-
-    /**
-     * Gets the number of bases in a given line.
-     * @return Number of bases in the fasta line.
-     */
-    public int getBasesPerLine() {
-        return basesPerLine;
-    }
-
-    /**
-     * How many bytes (bases + whitespace) are consumed by the
-     * given line?
-     * @return Number of bytes in a line.
-     */
-    public int getBytesPerLine() {
-        return bytesPerLine;
-    }
-
-    public int getSequenceIndex() {
-        return sequenceIndex;
-    }
-
-    /**
-     * For debugging.  Emit the contents of each contig line.
-     * @return A string representation of the contig line.
-     */
-    public String toString() {
-        return String.format("contig %s; location %d; size %d; basesPerLine %d; bytesPerLine %d", contig,
-                                                                                                  location,
-                                                                                                  size,
-                                                                                                  basesPerLine,
-                                                                                                  bytesPerLine );
-    }
-
-    /**
-     * Compare this index entry to another index entry.
-     * @param other another FastaSequenceIndexEntry
-     * @return True if each has the same name, location, size, basesPerLine and bytesPerLine
-     */
-    public boolean equals(Object other) {
-        if(!(other instanceof FastaSequenceIndexEntry))
-            return false;
-
-        if (this == other) return true;
-
-        FastaSequenceIndexEntry otherEntry = (FastaSequenceIndexEntry)other;
-        return (contig.equals(otherEntry.contig) && size == otherEntry.size && location == otherEntry.location
-        && basesPerLine == otherEntry.basesPerLine && bytesPerLine == otherEntry.bytesPerLine);
-    }
-
-    /**
-     * In general, we expect one entry per contig, so compute the hash based only on the contig.
-     * @return A unique hash code representing this object.
-     */
-    public int hashCode() {
-        return contig.hashCode();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/IndexedFastaSequenceFile.java b/src/main/java/htsjdk/samtools/reference/IndexedFastaSequenceFile.java
deleted file mode 100644
index 60cc3b1..0000000
--- a/src/main/java/htsjdk/samtools/reference/IndexedFastaSequenceFile.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.util.IOUtil;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.SeekableByteChannel;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Iterator;
-
-/**
- * A fasta file driven by an index for fast, concurrent lookups.  Supports two interfaces:
- * the ReferenceSequenceFile for old-style, stateful lookups and a direct getter.
- */
-public class IndexedFastaSequenceFile extends AbstractFastaSequenceFile implements Closeable {
-    /**
-     * The interface facilitating direct access to the fasta.
-     */
-    private final SeekableByteChannel channel;
-
-    /**
-     * A representation of the sequence index, stored alongside the fasta in a .fasta.fai file.
-     */
-    private final FastaSequenceIndex index;
-
-    /**
-     * An iterator into the fasta index, for traversing iteratively across the fasta.
-     */
-    private Iterator<FastaSequenceIndexEntry> indexIterator;
-
-    /**
-     * Open the given indexed fasta sequence file.  Throw an exception if the file cannot be opened.
-     * @param file The file to open.
-     * @param index Pre-built FastaSequenceIndex, for the case in which one does not exist on disk.
-     * @throws FileNotFoundException If the fasta or any of its supporting files cannot be found.
-     */
-    public IndexedFastaSequenceFile(final File file, final FastaSequenceIndex index) {
-        this(file == null ? null : file.toPath(), index);
-    }
-
-    /**
-     * Open the given indexed fasta sequence file.  Throw an exception if the file cannot be opened.
-     * @param file The file to open.
-     * @throws FileNotFoundException If the fasta or any of its supporting files cannot be found.
-     */
-    public IndexedFastaSequenceFile(final File file) throws FileNotFoundException {
-        this(file, new FastaSequenceIndex((findRequiredFastaIndexFile(file))));
-    }
-
-    /**
-     * Open the given indexed fasta sequence file.  Throw an exception if the file cannot be opened.
-     * @param path The file to open.
-     * @param index Pre-built FastaSequenceIndex, for the case in which one does not exist on disk.
-     */
-    public IndexedFastaSequenceFile(final Path path, final FastaSequenceIndex index) {
-        super(path);
-        if (index == null) throw new IllegalArgumentException("Null index for fasta " + path);
-        this.index = index;
-        IOUtil.assertFileIsReadable(path);
-        try {
-            this.channel = Files.newByteChannel(path);
-        } catch (IOException e) {
-            throw new SAMException("Fasta file should be readable but is not: " + path, e);
-        }
-        reset();
-
-        if(getSequenceDictionary() != null)
-            sanityCheckDictionaryAgainstIndex(path.toAbsolutePath().toString(),sequenceDictionary,index);
-    }
-
-    /**
-     * Open the given indexed fasta sequence file.  Throw an exception if the file cannot be opened.
-     * @param path The file to open.
-     * @throws FileNotFoundException If the fasta or any of its supporting files cannot be found.
-     */
-    public IndexedFastaSequenceFile(final Path path) throws FileNotFoundException {
-        this(path, new FastaSequenceIndex((findRequiredFastaIndexFile(path))));
-    }
-
-    public boolean isIndexed() {return true;}
-
-    private static File findFastaIndex(File fastaFile) {
-        File indexFile = getFastaIndexFileName(fastaFile);
-        if (!indexFile.exists()) return null;
-        return indexFile;
-    }
-
-    private static File getFastaIndexFileName(File fastaFile) {
-        return new File(fastaFile.getAbsolutePath() + ".fai");
-    }
-
-    private static File findRequiredFastaIndexFile(File fastaFile) throws FileNotFoundException {
-        File ret = findFastaIndex(fastaFile);
-        if (ret == null) throw new FileNotFoundException(getFastaIndexFileName(fastaFile) + " not found.");
-        return ret;
-    }
-
-    public static boolean canCreateIndexedFastaReader(final File fastaFile) {
-        return (fastaFile.exists() &&
-                findFastaIndex(fastaFile) != null);
-    }
-
-    private static Path findFastaIndex(Path fastaFile) {
-        Path indexFile = getFastaIndexFileName(fastaFile);
-        if (!Files.exists(indexFile)) return null;
-        return indexFile;
-    }
-
-    private static Path getFastaIndexFileName(Path fastaFile) {
-        return fastaFile.resolveSibling(fastaFile.getFileName() + ".fai");
-    }
-
-    private static Path findRequiredFastaIndexFile(Path fastaFile) throws FileNotFoundException {
-        Path ret = findFastaIndex(fastaFile);
-        if (ret == null) throw new FileNotFoundException(getFastaIndexFileName(fastaFile) + " not found.");
-        return ret;
-    }
-
-    public static boolean canCreateIndexedFastaReader(final Path fastaFile) {
-        return (Files.exists(fastaFile) &&
-            findFastaIndex(fastaFile) != null);
-    }
-
-    /**
-     * Do some basic checking to make sure the dictionary and the index match.
-     * @param fastaFile Used for error reporting only.
-     * @param sequenceDictionary sequence dictionary to check against the index.
-     * @param index index file to check against the dictionary.
-     */
-    protected static void sanityCheckDictionaryAgainstIndex(final String fastaFile,
-                                                            final SAMSequenceDictionary sequenceDictionary,
-                                                            final FastaSequenceIndex index) {
-        // Make sure dictionary and index are the same size.
-        if( sequenceDictionary.getSequences().size() != index.size() )
-            throw new SAMException("Sequence dictionary and index contain different numbers of contigs");
-
-        Iterator<SAMSequenceRecord> sequenceIterator = sequenceDictionary.getSequences().iterator();
-        Iterator<FastaSequenceIndexEntry> indexIterator = index.iterator();
-
-        while(sequenceIterator.hasNext() && indexIterator.hasNext()) {
-            SAMSequenceRecord sequenceEntry = sequenceIterator.next();
-            FastaSequenceIndexEntry indexEntry = indexIterator.next();
-
-            if(!sequenceEntry.getSequenceName().equals(indexEntry.getContig())) {
-                throw new SAMException(String.format("Mismatch between sequence dictionary fasta index for %s, sequence '%s' != '%s'.",
-                        fastaFile, sequenceEntry.getSequenceName(),indexEntry.getContig()));
-            }
-
-            // Make sure sequence length matches index length.
-            if( sequenceEntry.getSequenceLength() != indexEntry.getSize())
-                throw new SAMException("Index length does not match dictionary length for contig: " + sequenceEntry.getSequenceName() );
-        }
-    }
-
-    /**
-     * Retrieves the sequence dictionary for the fasta file.
-     * @return sequence dictionary of the fasta.
-     */
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return sequenceDictionary;
-    }
-
-    /**
-     * Retrieves the complete sequence described by this contig.
-     * @param contig contig whose data should be returned.
-     * @return The full sequence associated with this contig.
-     */
-    public ReferenceSequence getSequence( String contig ) {
-        return getSubsequenceAt( contig, 1, (int)index.getIndexEntry(contig).getSize() );
-    }
-
-    /**
-     * Gets the subsequence of the contig in the range [start,stop]
-     * @param contig Contig whose subsequence to retrieve.
-     * @param start inclusive, 1-based start of region.
-     * @param stop inclusive, 1-based stop of region.
-     * @return The partial reference sequence associated with this range.
-     */
-    public ReferenceSequence getSubsequenceAt( String contig, long start, long stop ) {
-        if(start > stop + 1)
-            throw new SAMException(String.format("Malformed query; start point %d lies after end point %d",start,stop));
-
-        FastaSequenceIndexEntry indexEntry = index.getIndexEntry(contig);
-
-        if(stop > indexEntry.getSize())
-            throw new SAMException("Query asks for data past end of contig");
-
-        int length = (int)(stop - start + 1);
-
-        byte[] target = new byte[length];
-        ByteBuffer targetBuffer = ByteBuffer.wrap(target);
-
-        final int basesPerLine = indexEntry.getBasesPerLine();
-        final int bytesPerLine = indexEntry.getBytesPerLine();
-        final int terminatorLength = bytesPerLine - basesPerLine;
-
-        long startOffset = ((start-1)/basesPerLine)*bytesPerLine + (start-1)%basesPerLine;
-        // Cast to long so the second argument cannot overflow a signed integer.
-        final long minBufferSize = Math.min((long) Defaults.NON_ZERO_BUFFER_SIZE, (long)(length / basesPerLine + 2) * (long)bytesPerLine);
-        if (minBufferSize > Integer.MAX_VALUE) throw new SAMException("Buffer is too large: " +  minBufferSize);
-
-        // Allocate a buffer for reading in sequence data.
-        final ByteBuffer channelBuffer = ByteBuffer.allocate((int)minBufferSize);
-
-        while(targetBuffer.position() < length) {
-            // If the bufferOffset is currently within the eol characters in the string, push the bufferOffset forward to the next printable character.
-            startOffset += Math.max((int)(startOffset%bytesPerLine - basesPerLine + 1),0);
-
-            try {
-                startOffset += readFromPosition(channel, channelBuffer, indexEntry.getLocation()+startOffset);
-            }
-            catch(IOException ex) {
-                throw new SAMException("Unable to load " + contig + "(" + start + ", " + stop + ") from " + getAbsolutePath(), ex);
-            }
-
-            // Reset the buffer for outbound transfers.
-            channelBuffer.flip();
-
-            // Calculate the size of the next run of bases based on the contents we've already retrieved.
-            final int positionInContig = (int)start-1+targetBuffer.position();
-            final int nextBaseSpan = Math.min(basesPerLine-positionInContig%basesPerLine,length-targetBuffer.position());
-            // Cap the bytes to transfer by limiting the nextBaseSpan to the size of the channel buffer.
-            int bytesToTransfer = Math.min(nextBaseSpan,channelBuffer.capacity());
-
-            channelBuffer.limit(channelBuffer.position()+bytesToTransfer);
-
-            while(channelBuffer.hasRemaining()) {
-                targetBuffer.put(channelBuffer);
-
-                bytesToTransfer = Math.min(basesPerLine,length-targetBuffer.position());
-                channelBuffer.limit(Math.min(channelBuffer.position()+bytesToTransfer+terminatorLength,channelBuffer.capacity()));
-                channelBuffer.position(Math.min(channelBuffer.position()+terminatorLength,channelBuffer.capacity()));
-            }
-
-            // Reset the buffer for inbound transfers.
-            channelBuffer.flip();
-        }
-
-        return new ReferenceSequence( contig, indexEntry.getSequenceIndex(), target );
-    }
-
-    /**
-     * Reads a sequence of bytes from this channel into the given buffer,
-     * starting at the given file position.
-     * @param channel the channel to read from
-     * @param buffer the buffer into which bytes are to be transferred
-     * @param position the position to start reading at
-     * @return the number of bytes read
-     * @throws IOException if an I/O error occurs while reading
-     */
-    private static int readFromPosition(final SeekableByteChannel channel, final ByteBuffer buffer, long position) throws IOException {
-        if (channel instanceof FileChannel) { // special case to take advantage of native code path
-            return ((FileChannel) channel).read(buffer,position);
-        } else {
-            long oldPos = channel.position();
-            try {
-                channel.position(position);
-                return channel.read(buffer);
-            } finally {
-                channel.position(oldPos);
-            }
-        }
-    }
-
-    /**
-     * Gets the next sequence if available, or null if not present.
-     * @return next sequence if available, or null if not present.
-     */
-    public ReferenceSequence nextSequence() {
-        if( !indexIterator.hasNext() )
-            return null;
-        return getSequence( indexIterator.next().getContig() );
-    }
-
-    /**
-     * Reset the iterator over the index.
-     */
-    public void reset() {
-        indexIterator = index.iterator();
-    }
-
-    /**
-     * A simple toString implementation for debugging.
-     * @return String representation of the file.
-     */
-    public String toString() {
-        return getAbsolutePath();
-    }
-
-    @Override
-    public void close() throws IOException {
-        channel.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/ReferenceSequence.java b/src/main/java/htsjdk/samtools/reference/ReferenceSequence.java
deleted file mode 100644
index a7ddb44..0000000
--- a/src/main/java/htsjdk/samtools/reference/ReferenceSequence.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.util.StringUtil;
-
-/**
- * Wrapper around a reference sequence that has been read from a reference file.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequence {
-    private final String name;
-    private final byte[] bases;
-    private final int contigIndex;
-    private final int length;
-
-    /**
-     * creates a fully formed ReferenceSequence
-     *
-     * @param name the name of the sequence from the source file
-     * @param index the zero based index of this contig in the source file
-     * @param bases the bases themselves stored as one-byte characters
-     */
-    public ReferenceSequence(String name, int index, byte[] bases) {
-        this.name = name;
-        this.contigIndex = index;
-        this.bases = bases;
-        this.length = bases.length;
-    }
-
-    /** Gets the set of names given to this sequence in the source file. */
-    public String getName() { return name; }
-
-    /**
-     * Gets the array of bases that define this sequence. The bases can include any
-     * letter and possibly include masking information in the form of lower case
-     * letters.  This array is mutable (obviously!) and it NOT a clone of the array
-     * held interally.  Do not modify it!!!
-     */
-    public byte[] getBases() { return bases; }
-
-    /**
-     * Returns the bases represented by this ReferenceSequence as a String. Since this will copy the bases
-     * and convert them to two-byte characters, this should not be used on very long reference sequences,
-     * but as a convenience when manipulating short sequences returned by
-     * {@link ReferenceSequenceFile#getSubsequenceAt(String, long, long)}
-     *
-     * @return The set of bases represented by this ReferenceSequence, as a String
-     */
-    public String getBaseString() { return StringUtil.bytesToString(bases); }
-
-    /** Gets the 0-based index of this contig in the source file from which it came. */
-    public int getContigIndex() { return contigIndex; }
-
-    /** Gets the length of this reference sequence in bases. */
-    public int length() { return length; }
-    
-    public String toString() {
-        return "ReferenceSequence " + getName();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFile.java b/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFile.java
deleted file mode 100644
index e7d3c28..0000000
--- a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFile.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/**
- * An interface for working with files of reference sequences regardless of the file format
- * being used.
- *
- * @author Tim Fennell
- */
-public interface ReferenceSequenceFile extends Closeable {
-
-    /**
-     * Must return a sequence dictionary with at least the following fields completed
-     * for each sequence: name, length.
-     *
-     * @return a list of sequence records representing the sequences in this reference file
-     */
-    public SAMSequenceDictionary getSequenceDictionary();
-
-    /**
-     * Retrieves the next whole sequences from the file.
-     * @return a ReferenceSequence or null if at the end of the file
-     */
-    public ReferenceSequence nextSequence();
-
-    /**
-     * Resets the ReferenceSequenceFile so that the next call to nextSequence() will return
-     * the first sequence in the file.
-     */
-    public void reset();
-
-
-    /**
-     * @return true if getSequence and getSubsequenceAt methods are allowed.
-     */
-    public boolean isIndexed();
-
-    /**
-     * Retrieves the complete sequence described by this contig.
-     * @param contig contig whose data should be returned.
-     * @return The full sequence associated with this contig.
-     * @throws UnsupportedOperationException if !sIndexed.
-     */
-    public ReferenceSequence getSequence( String contig );
-
-    /**
-     * Gets the subsequence of the contig in the range [start,stop]
-     * @param contig Contig whose subsequence to retrieve.
-     * @param start inclusive, 1-based start of region.
-     * @param stop inclusive, 1-based stop of region.
-     * @return The partial reference sequence associated with this range.
-     * @throws UnsupportedOperationException if !sIndexed.
-     */
-    public ReferenceSequence getSubsequenceAt( String contig, long start, long stop );
-    
-    /**
-     * @return Reference name, file name, or something other human-readable representation.
-     */
-    public String toString();
-
-    public void close() throws IOException;
-}
diff --git a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileFactory.java b/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileFactory.java
deleted file mode 100644
index 5978072..0000000
--- a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileFactory.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.nio.file.Path;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Factory class for creating ReferenceSequenceFile instances for reading reference
- * sequences store in various formats.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequenceFileFactory {
-    public static final Set<String> FASTA_EXTENSIONS = new HashSet<String>() {{
-        add(".fasta");
-        add(".fasta.gz");
-        add(".fa");
-        add(".fa.gz");
-        add(".fna");
-        add(".fna.gz");
-        add(".txt");
-        add(".txt.gz");
-    }};
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.  Sequence names
-     * will be truncated at first whitespace, if any.
-     *
-     * @param file the reference sequence file on disk
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final File file) {
-        return getReferenceSequenceFile(file, true);
-    }
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.
-     *
-     * @param file the reference sequence file on disk
-     * @param truncateNamesAtWhitespace if true, only include the first word of the sequence name
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final File file, final boolean truncateNamesAtWhitespace) {
-        return getReferenceSequenceFile(file, truncateNamesAtWhitespace, true);
-    }
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.
-     *
-     * @param file the reference sequence file on disk
-     * @param truncateNamesAtWhitespace if true, only include the first word of the sequence name
-     * @param preferIndexed if true attempt to return an indexed reader that supports non-linear traversal, else return the non-indexed reader
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final File file, final boolean truncateNamesAtWhitespace, final boolean preferIndexed) {
-        return getReferenceSequenceFile(file.toPath(), truncateNamesAtWhitespace, preferIndexed);
-    }
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.  Sequence names
-     * will be truncated at first whitespace, if any.
-     *
-     * @param path the reference sequence file on disk
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final Path path) {
-        return getReferenceSequenceFile(path, true);
-    }
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.
-     *
-     * @param path the reference sequence file on disk
-     * @param truncateNamesAtWhitespace if true, only include the first word of the sequence name
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final Path path, final boolean truncateNamesAtWhitespace) {
-        return getReferenceSequenceFile(path, truncateNamesAtWhitespace, true);
-    }
-
-    /**
-     * Attempts to determine the type of the reference file and return an instance
-     * of ReferenceSequenceFile that is appropriate to read it.
-     *
-     * @param path the reference sequence file path
-     * @param truncateNamesAtWhitespace if true, only include the first word of the sequence name
-     * @param preferIndexed if true attempt to return an indexed reader that supports non-linear traversal, else return the non-indexed reader
-     */
-    public static ReferenceSequenceFile getReferenceSequenceFile(final Path path, final boolean truncateNamesAtWhitespace, final boolean preferIndexed) {
-        final String name = path.getFileName().toString();
-        for (final String ext : FASTA_EXTENSIONS) {
-            if (name.endsWith(ext)) {
-                // Using faidx requires truncateNamesAtWhitespace
-                if (truncateNamesAtWhitespace && preferIndexed && IndexedFastaSequenceFile.canCreateIndexedFastaReader(path)) {
-                    try {
-                        return new IndexedFastaSequenceFile(path);
-                    }
-                    catch (final FileNotFoundException e) {
-                        throw new IllegalStateException("Should never happen, because existence of files has been checked.", e);
-                    }
-                }
-                else {
-                    return new FastaSequenceFile(path, truncateNamesAtWhitespace);
-                }
-            }
-        }
-
-        throw new IllegalArgumentException("File is not a supported reference file type: " + path.toAbsolutePath());
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileWalker.java b/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileWalker.java
deleted file mode 100644
index d66f0f8..0000000
--- a/src/main/java/htsjdk/samtools/reference/ReferenceSequenceFileWalker.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Manages a ReferenceSequenceFile.  Loads the requested sequence, ensuring that
- * access is in order, and confirming that sequence name and index agree.
- *
- * @author alecw at broadinstitute.org
- */
-public class ReferenceSequenceFileWalker implements Closeable {
-    private final ReferenceSequenceFile referenceSequenceFile;
-    private ReferenceSequence referenceSequence = null;
-
-    public ReferenceSequenceFileWalker(final ReferenceSequenceFile referenceSequenceFile) {
-        this.referenceSequenceFile = referenceSequenceFile;
-    }
-
-    public ReferenceSequenceFileWalker(final File file) {
-        this(ReferenceSequenceFileFactory.getReferenceSequenceFile(file, true, false));
-    }
-
-    /**
-     * Ensure that the requested sequence is loaded.  Throws an exception if out-of-order
-     * request is made, or if there is a mismatch between the requested name and the name
-     * found in the ReferenceSequenceFile
-     */
-    public ReferenceSequence get(final int sequenceIndex, final String sequenceName, final int length) {
-        // Has the side-effect of setting referenceSequence member
-        get(sequenceIndex);
-        if (!referenceSequence.getName().equals(sequenceName)) {
-            // Sanity check the sequence names against the sequence dictionary while scanning through.
-            throw new SAMException("Sequence name mismatch at sequence index (" + referenceSequence.getContigIndex() +
-                    ", " + referenceSequence.getName() + ") != " + sequenceName);
-        }
-        if (referenceSequence.getBases().length != length) {
-            throw new SAMException("Sequence length mismatch for (" + sequenceIndex + ", " + sequenceName +
-            ").  expected " + length + " but found " + referenceSequence.getBases().length);
-        }
-        return referenceSequence;
-    }
-
-    /**
-     * Get reference sequence without validating name or length.  This is OK if the entire sequence
-     * dictionary was validated before reading sequences.
-     */
-    public ReferenceSequence get(final int sequenceIndex) {
-        if (referenceSequence != null && referenceSequence.getContigIndex() == sequenceIndex) {
-            return referenceSequence;
-        }
-        if (referenceSequence != null && referenceSequence.getContigIndex() > sequenceIndex) {
-            throw new SAMException("Requesting earlier reference sequence: " + sequenceIndex + " < " +
-            referenceSequence.getContigIndex());
-        }
-        referenceSequence = null;
-
-        if(referenceSequenceFile.isIndexed()) {
-            final SAMSequenceRecord samSequenceRecord = referenceSequenceFile.getSequenceDictionary().getSequence(sequenceIndex);
-            if(samSequenceRecord != null) {
-                referenceSequence = referenceSequenceFile.getSequence(samSequenceRecord.getSequenceName()) ;
-            } // else referenceSequence will remain null
-        } else {
-            do {
-                referenceSequence = referenceSequenceFile.nextSequence();
-            }
-            while (referenceSequence != null && referenceSequence.getContigIndex() < sequenceIndex);
-        }
-        if (referenceSequence == null || referenceSequence.getContigIndex() != sequenceIndex) {
-            throw new SAMException("Reference sequence (" + sequenceIndex +
-                    ") not found in " + referenceSequenceFile.toString());
-        }
-        return referenceSequence;
-    }
-
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return referenceSequenceFile.getSequenceDictionary();
-    }
-
-    public void close() throws IOException {
-        referenceSequenceFile.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/ByteArraySeekableStream.java b/src/main/java/htsjdk/samtools/seekablestream/ByteArraySeekableStream.java
deleted file mode 100644
index 4f8c322..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/ByteArraySeekableStream.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.IOException;
-
-/**
-* Created by vadim on 23/03/2015.
-*/
-public class ByteArraySeekableStream extends SeekableStream {
-    private byte[] bytes;
-    private long position = 0;
-
-    public ByteArraySeekableStream(byte[] bytes) {
-        this.bytes = bytes;
-    }
-
-    @Override
-    public long length() {
-        return bytes.length;
-    }
-
-    @Override
-    public long position() throws IOException {
-        return position;
-    }
-
-    @Override
-    public void seek(long position) throws IOException {
-        this.position = position;
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (position < bytes.length)
-            return 0xFF & bytes[((int) position++)];
-        else return -1;
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        if (b == null) {
-            throw new NullPointerException();
-        } else if (off < 0 || len < 0 || len > b.length - off) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (position >= bytes.length) {
-            return -1;
-        }
-        if (position + len > bytes.length) {
-            len = (int) (bytes.length - position);
-        }
-        if (len <= 0) {
-            return 0;
-        }
-        System.arraycopy(bytes, (int) position, b, off, len);
-        position += len;
-        return len;
-    }
-
-    @Override
-    public void close() throws IOException {
-        bytes = null;
-    }
-
-    @Override
-    public boolean eof() throws IOException {
-        return position >= bytes.length;
-    }
-
-    @Override
-    public String getSource() {
-        return null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/ISeekableStreamFactory.java b/src/main/java/htsjdk/samtools/seekablestream/ISeekableStreamFactory.java
deleted file mode 100644
index dff28b0..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/ISeekableStreamFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package htsjdk.samtools.seekablestream;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Factory for creating {@link SeekableStream}s based on URLs/paths.
- * Implementations can be set as the default with {@link SeekableStreamFactory#setInstance(ISeekableStreamFactory)}
- * @author jacob
- * @date 2013-Oct-24
- */
-public interface ISeekableStreamFactory {
-
-    public SeekableStream getStreamFor(URL url) throws IOException;
-
-    public SeekableStream getStreamFor(String path) throws IOException;
-
-    /**
-     * Return a buffered {@code SeekableStream} which wraps the input {@code stream}
-     * using the default buffer size
-     * @param stream
-     * @return
-     */
-    public SeekableStream getBufferedStream(SeekableStream stream);
-
-    /**
-     * Return a buffered {@code SeekableStream} which wraps the input {@code stream}
-     * @param stream
-     * @param bufferSize
-     * @return
-     */
-    public SeekableStream getBufferedStream(SeekableStream stream, int bufferSize);
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableBufferedStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableBufferedStream.java
deleted file mode 100644
index 56b4d0c..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableBufferedStream.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A wrapper class to provide buffered read access to a SeekableStream.  Just wrapping such a stream with
- * a BufferedInputStream will not work as it does not support seeking.  In this implementation a
- * seek call is delegated to the wrapped stream, and the buffer reset.
- */
-public class SeekableBufferedStream extends SeekableStream {
-
-    /** Little extension to buffered input stream to give access to the available bytes in the buffer. */
-    private class ExtBufferedInputStream extends BufferedInputStream {
-        private ExtBufferedInputStream(final InputStream inputStream, final int i) {
-            super(inputStream, i);
-        }
-
-        /** Returns the number of bytes that can be read from the buffer without reading more into the buffer. */
-        int getBytesInBufferAvailable() {
-            if (this.count == this.pos) return 0; // documented test for "is buffer empty"
-            else return this.buf.length - this.pos;
-        }
-    }
-
-
-    public static final int DEFAULT_BUFFER_SIZE = 512000;
-
-    final private int bufferSize;
-    final SeekableStream wrappedStream;
-    ExtBufferedInputStream bufferedStream;
-    long position;
-
-    public SeekableBufferedStream(final SeekableStream stream, final int bufferSize) {
-        this.bufferSize = bufferSize;
-        this.wrappedStream = stream;
-        this.position = 0;
-        bufferedStream = new ExtBufferedInputStream(wrappedStream, bufferSize);
-    }
-
-    public SeekableBufferedStream(final SeekableStream stream) {
-        this(stream, DEFAULT_BUFFER_SIZE);
-    }
-
-    public long length() {
-        return wrappedStream.length();
-    }
-
-    @Override
-    public long skip(final long skipLength) throws IOException {
-        if (skipLength < this.bufferedStream.getBytesInBufferAvailable()) {
-            final long retval = this.bufferedStream.skip(skipLength);
-            this.position += retval;
-            return retval;
-        } else {
-            final long position = this.position + skipLength;
-            seek(position);
-            return skipLength;
-        }
-    }
-
-    public void seek(final long position) throws IOException {
-        this.position = position;
-        wrappedStream.seek(position);
-        bufferedStream = new ExtBufferedInputStream(wrappedStream, bufferSize);
-    }
-
-    public int read() throws IOException {
-        int b = bufferedStream.read();
-        position++;
-        return b;
-    }
-
-    public int read(final byte[] buffer, final int offset, final int length) throws IOException {
-        int nBytesRead = bufferedStream.read(buffer, offset, length);
-        if (nBytesRead > 0) {
-            //if we can't read as many bytes as we are asking for then attempt another read to reset the buffer.
-            if (nBytesRead < length) {
-                final int additionalBytesRead = bufferedStream.read(buffer, nBytesRead + offset, length - nBytesRead);
-                //if there were additional bytes read then update nBytesRead
-                if (additionalBytesRead > 0) {
-                    nBytesRead += additionalBytesRead;
-                }
-            }
-            position += nBytesRead;
-        }
-        return nBytesRead;
-    }
-
-    public void close() throws IOException {
-        wrappedStream.close();
-    }
-
-    public boolean eof() throws IOException {
-        return position >= wrappedStream.length();
-    }
-
-    @Override
-    public String getSource() {
-        return wrappedStream.getSource();
-    }
-
-    @Override
-    public long position() throws IOException {
-        return position;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStream.java
deleted file mode 100644
index 0a64a7c..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStream.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Unfortunately the seekable stream classes exist for both Tribble and Picard, and we need both.  This class
- * is for use with Tribble and delegates all the work to a helper.
- *
- * @author jrobinso
- * @date Oct 27, 2010
- */
-public class SeekableFTPStream extends SeekableStream {
-
-    SeekableFTPStreamHelper helper;
-    public SeekableFTPStream(URL url) throws IOException {
-        this(url, null);
-    }
-
-    public SeekableFTPStream(URL url, UserPasswordInput userPasswordInput) throws IOException {
-        helper = new SeekableFTPStreamHelper(url, userPasswordInput);
-    }
-
-    public void seek(long position) {
-        helper.seek(position);
-    }
-
-    public long position() {
-        return helper.position();
-    }
-
-    @Override
-    public boolean eof() throws IOException {
-        return helper.eof();
-    }
-
-    @Override
-    public String getSource() {
-        return null; //TODO
-    }
-
-    @Override
-    public long length() {
-        return helper.length();
-    }
-
-
-    @Override
-    public long skip(long n) throws IOException {
-        return helper.skip(n);
-    }
-
-
-    @Override
-    public int read(byte[] buffer, int offset, int len) throws IOException {
-        return helper.read(buffer, offset, len);
-    }
-
-
-    public void close() throws IOException {
-        helper.close();
-    }
-
-    public int read() throws IOException {
-        return helper.read();
-    }
-
-//    private static final String EXPECTED = "Apache Software Foundation";
-    private static final String EXPECTED1 = "\u00cf\u00ac\u00c9\u0075\u0043\u00d4\u00d5\u0079";
-    private static final String EXPECTED2 = "\u00e4\u006c\u0077\u000c\u0016\u00f1\u0030\u008f";
-    public static void main(String[] args) throws IOException {
-//    	String testURL = (args.length < 1) ? "ftp://apache.cs.utah.edu/apache.org/HEADER.html" : args[0];
-    	String testURL = (args.length < 1) ? "ftp://hgdownload.cse.ucsc.edu/goldenPath/panTro3/vsHg19/panTro3.hg19.all.chain.gz" : args[0];
-        long startPosition = (args.length < 2) ? 0x0b66c78l : Long.parseLong(args[1]);
-        int len = (args.length < 3) ? 8 : Integer.parseInt(args[2]);
-        int skipLen = (args.length < 4) ? 0x18 : Integer.parseInt(args[3]);
-        SeekableStream s = SeekableStreamFactory.getInstance().getStreamFor(testURL);
-        byte[] buffer = new byte[len];
-        s.seek(startPosition);
-        s.read(buffer, 0, len);
-        if (s.position() != startPosition + len && s.position() != s.length()) {
-        	System.out.println("1) updated position is incorrect");
-        }
-        String data = new String(buffer);
-        System.out.println("1) read:" + data);
-        if (args.length == 0) {
-            System.out.println("1) expected:" + EXPECTED1);
-            System.out.println("1) values do" + (EXPECTED1.equals(data) ? "" : " not") + " match");
-        }
-        s.skip(skipLen);
-        s.read(buffer, 0, len);
-        if (s.position() != startPosition + 2 * len + skipLen && s.position() != s.length()) {
-        	System.out.println("2) updated position is incorrect");
-        }
-        String data2 = new String(buffer);
-        System.out.println("2) read:" + data2);
-        if (args.length == 0) {
-            System.out.println("2) expected:" + EXPECTED2);
-            System.out.println("2) values do" + (EXPECTED2.equals(data2) ? "" : " not") + " match");
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStreamHelper.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStreamHelper.java
deleted file mode 100644
index 10b1391..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableFTPStreamHelper.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.util.ftp.FTPClient;
-import htsjdk.samtools.util.ftp.FTPReply;
-import htsjdk.samtools.util.ftp.FTPUtils;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * @author jrobinso
- * @date Oct 27, 2010
- */
-public class SeekableFTPStreamHelper {
-
-    private long position = 0;
-    private long contentLength = -1;
-    private String host;
-    private String path;
-    private String userInfo;
-    FTPClient ftp = null;
-    private UserPasswordInput userPasswordInput;
-
-    SeekableFTPStreamHelper(URL url, UserPasswordInput userPasswordInput) throws IOException {
-        this.userInfo = url.getUserInfo();
-        this.host = url.getHost();
-        this.path = url.getPath();
-        this.userPasswordInput = userPasswordInput;
-        ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
-
-        ftp.binary();
-        FTPReply reply = ftp.size(path);
-        if(reply.isSuccess()) {
-            contentLength = Long.parseLong(reply.getReplyString());
-        }
-
-    }
-
-    public void seek(long position) {
-        this.position = position;
-    }
-
-    public long position() {
-        return position;
-    }
-
-    public boolean eof() throws IOException {
-        return false;
-    }
-
-    public long length() {
-        return contentLength;
-    }
-
-
-    public long skip(long n) throws IOException {
-        long bytesToSkip = n;
-        position += bytesToSkip;
-        if (ftp != null) {
-            ftp.setRestPosition(position);
-        }
-        return bytesToSkip;
-    }
-
-    public int read(byte[] buffer, int offset, int len) throws IOException {
-
-        if (ftp == null) {
-            ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
-        }
-
-        if (offset < 0 || len < 0 || (offset + len) > buffer.length) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (len == 0) {
-            return 0;
-        }
-
-        int n = 0;
-        try {
-
-            FTPReply reply = ftp.pasv();
-
-            // If we are positioned at or beyond the EOF return -1
-            if(contentLength >= 0 && position >= contentLength) {
-                return -1;
-            }
-
-            if (position > 0) ftp.setRestPosition(position);
-
-            reply = ftp.retr(path);
-
-            InputStream is = ftp.getDataStream();
-
-            while (n < len) {
-                int count = is.read(buffer, offset + n, len - n);
-                if (count < 0) {
-                    if (n == 0) {
-                        return -1;
-                    } else {
-                        break;
-                    }
-                }
-                n += count;
-            }
-
-            position += n;
-
-            return n;
-        } catch (EOFException e) {
-            if (n < 0) {
-                return -1;
-            } else {
-                position += n;
-                return n;
-            }
-        } finally {
-            // ALWAYS close ftp connection,  this is more robust than trying to resue them,
-            // and we don't want open connections hanging about
-            ftp.disconnect();
-            ftp = null;
-        }
-    }
-
-
-    private void reconnect() throws IOException {
-        if (ftp != null) {
-            ftp.disconnect();
-        }
-        ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
-    }
-
-
-    public void close() throws IOException {
-        if (ftp != null) {
-            ftp.disconnect();
-            ftp = null;
-        }
-    }
-
-
-    public int read() throws IOException {
-        throw new UnsupportedOperationException("read() is not supported on SeekableHTTPStream.  Must read in blocks.");
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableFileStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableFileStream.java
deleted file mode 100644
index 38191d7..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableFileStream.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package htsjdk.samtools.seekablestream;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-
-/**
- *
- * @author jrobinso
- */
-public class SeekableFileStream extends SeekableStream {
-
-    /**
-     * Collection of all open instances.  SeekableFileStream objects are usually open and kept open for the
-     * duration of a session.  This collection supports a method to close them all.
-     */
-    static Collection<SeekableFileStream> allInstances =
-            Collections.synchronizedCollection(new HashSet<SeekableFileStream>());
-
-
-    File file;
-    RandomAccessFile fis;
-
-    public SeekableFileStream(final File file) throws FileNotFoundException {
-        this.file = file;
-        fis = new RandomAccessFile(file, "r");
-        allInstances.add(this);
-    }
-
-    public long length() {
-        return file.length();
-    }
-
-    public boolean eof() throws IOException {
-        return fis.length() == fis.getFilePointer();
-    }
-
-    public void seek(final long position) throws IOException {
-        fis.seek(position);
-    }
-
-    public long position() throws IOException {
-        return fis.getChannel().position();
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        long initPos = position();
-        fis.getChannel().position(initPos + n);
-        return position() - initPos;
-    }
-    
-    public int read(final byte[] buffer, final int offset, final int length) throws IOException {
-        if (length < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-        int n = 0;
-        while (n < length) {
-            final int count = fis.read(buffer, offset + n, length - n);
-            if (count < 0) {
-              if (n > 0) {
-                return n;
-              } else {
-                return count;
-              }
-            }
-            n += count;
-        }
-        return n;
-
-    }
-
-    public int read() throws IOException {
-        return fis.read();  
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        return fis.read(b);
-    }
-
-    @Override
-    public String getSource() {
-        return file.getAbsolutePath();
-    }
-
-
-    public void close() throws IOException {
-        allInstances.remove(this);
-        fis.close();
-
-    }
-
-    public static synchronized void closeAllInstances() {
-        Collection<SeekableFileStream> clonedInstances = new HashSet<SeekableFileStream>();
-        clonedInstances.addAll(allInstances);
-        for (SeekableFileStream sfs : clonedInstances) {
-            try {
-                sfs.close();
-            } catch (IOException e) {
-                //TODO
-                //log.error("Error closing SeekableFileStream", e);
-            }
-        }
-        allInstances.clear();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableHTTPStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableHTTPStream.java
deleted file mode 100644
index 4a864b7..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableHTTPStream.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.util.HttpUtils;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.Proxy;
-import java.net.URL;
-
-/**
- * @author jrobinso
- */
-public class SeekableHTTPStream extends SeekableStream {
-
-    private long position = 0;
-    private long contentLength = -1;
-    private final URL url;
-    private final Proxy proxy;
-
-    public SeekableHTTPStream(final URL url) {
-        this(url, null);
-
-    }
-
-    public SeekableHTTPStream(final URL url, Proxy proxy) {
-
-        this.proxy = proxy;
-        this.url = url;
-
-        // Try to get the file length
-        // Note: This also sets setDefaultUseCaches(false), which is important
-        final String contentLengthString = HttpUtils.getHeaderField(url, "Content-Length");
-        if (contentLengthString != null) {
-            try {
-                contentLength = Long.parseLong(contentLengthString);
-            }
-            catch (NumberFormatException ignored) {
-                System.err.println("WARNING: Invalid content length (" + contentLengthString + "  for: " + url);
-                contentLength = -1;
-            }
-        }
-
-    }
-
-    public long position() {
-        return position;
-    }
-
-    public long length() {
-        return contentLength;
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        long bytesToSkip = Math.min(n, contentLength - position);
-        position += bytesToSkip;
-        return bytesToSkip;
-    }
-
-    public boolean eof() throws IOException {
-        return contentLength > 0 && position >= contentLength;
-    }
-
-    public void seek(final long position) {
-        this.position = position;
-    }
-
-    public int read(byte[] buffer, int offset, int len) throws IOException {
-
-        if (offset < 0 || len < 0 || (offset + len) > buffer.length) {
-            throw new IndexOutOfBoundsException("Offset="+offset+",len="+len+",buflen="+buffer.length);
-        }
-        if (len == 0 || position == contentLength) {
-            return 0;
-        }
-
-        HttpURLConnection connection = null;
-        InputStream is = null;
-        String byteRange = "";
-        int n = 0;
-        try {
-            connection = proxy == null ?
-                    (HttpURLConnection) url.openConnection() :
-                    (HttpURLConnection) url.openConnection(proxy);
-
-            long endRange = position + len - 1;
-            // IF we know the total content length, limit the end range to that.
-            if (contentLength > 0) {
-                endRange = Math.min(endRange, contentLength);
-            }
-            byteRange = "bytes=" + position + "-" + endRange;
-            connection.setRequestProperty("Range", byteRange);
-
-            is = connection.getInputStream();
-
-            while (n < len) {
-                int count = is.read(buffer, offset + n, len - n);
-                if (count < 0) {
-                    if (n == 0) {
-                        return -1;
-                    } else {
-                        break;
-                    }
-                }
-                n += count;
-            }
-
-            position += n;
-
-            return n;
-
-        }
-
-        catch (IOException e) {
-            // THis is a bit of a hack, but its not clear how else to handle this.  If a byte range is specified
-            // that goes past the end of the file the response code will be 416.  The MAC os translates this to
-            // an IOException with the 416 code in the message.  Windows translates the error to an EOFException.
-            //
-            //  The BAM file iterator  uses the return value to detect end of file (specifically looks for n == 0).
-            if (e.getMessage().contains("416") || (e instanceof EOFException)) {
-                if (n == 0) {
-                    return -1;
-                } else {
-                    position += n;
-                    // As we are at EOF, the contentLength and position are by definition =
-                    contentLength = position;
-                    return n;
-                }
-            } else {
-                throw e;
-            }
-
-        }
-
-        finally {
-            if (is != null) {
-                is.close();
-            }
-            if (connection != null) {
-                connection.disconnect();
-            }
-        }
-    }
-
-
-    public void close() throws IOException {
-        // Nothing to do
-    }
-
-
-    public int read() throws IOException {
-    	byte []tmp=new byte[1];
-    	read(tmp,0,1);
-    	return (int) tmp[0] & 0xFF; 
-    }
-
-    @Override
-    public String getSource() {
-        return url.toString();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableMemoryStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableMemoryStream.java
deleted file mode 100644
index 37a5ab4..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableMemoryStream.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package htsjdk.samtools.seekablestream;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-public class SeekableMemoryStream extends SeekableStream {
-    private final ByteBuffer buf;
-    private final String source;
-
-    public SeekableMemoryStream(final byte[] data, final String source) {
-        this.buf = ByteBuffer.wrap(data);
-        this.source = source;
-    }
-
-    @Override
-    public void close() throws IOException {
-        buf.clear();
-    }
-
-    @Override
-    public boolean eof() throws IOException {
-        return buf.position() == buf.limit();
-    }
-
-    @Override
-    public String getSource() {
-        return source;
-    }
-
-    @Override
-    public long length() {
-        return buf.array().length - buf.arrayOffset();
-    }
-
-    @Override
-    public int read(final byte[] buffer, final int offset, final int length) throws IOException {
-        int availableLength = Math.min(length, buf.remaining());
-        if (availableLength < 1) {
-            return -1;
-        }
-        buf.get(buffer, offset, availableLength);
-        return availableLength;
-    }
-
-    @Override
-    public void seek(final long position) throws IOException {
-        buf.position((int) position);
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (buf.position() < buf.limit()) {
-            return buf.get() & 0xFF;
-        } else {
-            return -1;
-        }
-    }
-
-    @Override
-    public long position() throws IOException {
-        return buf.position();
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekablePathStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekablePathStream.java
deleted file mode 100644
index 18a41e7..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekablePathStream.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.util.Log;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.SeekableByteChannel;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-
-/**
- * An implementation of {@link SeekableStream} for {@link Path}.
- */
-public class SeekablePathStream extends SeekableStream {
-
-    private final static Log LOG = Log.getInstance(SeekablePathStream.class);
-
-    /**
-     * Collection of all open instances.  SeekablePathStream objects are usually open and kept open for the
-     * duration of a session.  This collection supports a method to close them all.
-     */
-    private static final Collection<SeekablePathStream> ALL_INSTANCES =
-            Collections.synchronizedCollection(new HashSet<SeekablePathStream>());
-
-    private final Path path;
-    private final SeekableByteChannel sbc;
-    private final ByteBuffer oneByteBuf = ByteBuffer.allocate(1);
-
-    public SeekablePathStream(final Path path) throws IOException {
-        this.path = path;
-        this.sbc = Files.newByteChannel(path);
-        ALL_INSTANCES.add(this);
-    }
-
-    @Override
-    public long length() {
-        try {
-            return sbc.size();
-        } catch (IOException e) {
-            LOG.error("Cannot find length of path: " + path, e);
-            return 0; // consistent with java.io.File
-        }
-    }
-
-    @Override
-    public boolean eof() throws IOException {
-        return length() == position();
-    }
-
-    @Override
-    public void seek(final long position) throws IOException {
-        sbc.position(position);
-    }
-
-    @Override
-    public long position() throws IOException {
-        return sbc.position();
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        long initPos = position();
-        sbc.position(initPos + n);
-        return position() - initPos;
-    }
-
-    @Override
-    public int read(final byte[] buffer, final int offset, final int length) throws IOException {
-        if (length < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-        ByteBuffer buf = ByteBuffer.wrap(buffer, offset, length);
-        int n = 0;
-        while (n < length) {
-            final int count = sbc.read(buf);
-            if (count < 0) {
-              if (n > 0) {
-                return n;
-              } else {
-                return count;
-              }
-            }
-            n += count;
-        }
-        return n;
-    }
-
-    @Override
-    public int read() throws IOException {
-        oneByteBuf.clear();
-        int n = sbc.read(oneByteBuf);
-        return n == 1 ? oneByteBuf.array()[0] & 0xff : n;
-    }
-
-    @Override
-    public String getSource() {
-        return path.toAbsolutePath().toString();
-    }
-
-
-    @Override
-    public void close() throws IOException {
-        ALL_INSTANCES.remove(this);
-        sbc.close();
-    }
-
-    public static synchronized void closeAllInstances() {
-        Collection<SeekablePathStream> clonedInstances = new HashSet<SeekablePathStream>();
-        clonedInstances.addAll(ALL_INSTANCES);
-        for (SeekablePathStream sfs : clonedInstances) {
-            try {
-                sfs.close();
-            } catch (IOException e) {
-                LOG.error("Error closing SeekablePathStream", e);
-            }
-        }
-        ALL_INSTANCES.clear();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableStream.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableStream.java
deleted file mode 100644
index 673f08c..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableStream.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-public abstract class SeekableStream extends InputStream {
-
-    public abstract long length();
-
-    public abstract long position() throws IOException;
-
-    public abstract void seek(long position) throws IOException;
-
-    public abstract int read(byte[] buffer, int offset, int length) throws IOException;
-
-    public abstract void close() throws IOException;
-
-    public abstract boolean eof() throws IOException;
-
-    /**
-     * @return String representation of source (e.g. URL, file path, etc.), or null if not available.
-     */
-    public abstract String getSource();
-
-    /**
-     * Read enough bytes to fill the input buffer.
-     * @param b
-     * @throws EOFException If EOF is reached before buffer is filled
-     */
-    public void readFully(byte b[]) throws IOException {
-        int len = b.length;
-        if (len < 0){
-            throw new IndexOutOfBoundsException();
-        }
-        int n = 0;
-        while (n < len) {
-            int count = read(b, n, len - n);
-            if (count < 0){
-                throw new EOFException();
-            }
-            n += count;
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/SeekableStreamFactory.java b/src/main/java/htsjdk/samtools/seekablestream/SeekableStreamFactory.java
deleted file mode 100644
index fe8f42a..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/SeekableStreamFactory.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Singleton class for getting {@link SeekableStream}s from URL/paths
- * Applications using this library can set their own factory
- * @author jrobinso
- * @date Nov 30, 2009
- */
-public class SeekableStreamFactory{
-
-    private static final ISeekableStreamFactory DEFAULT_FACTORY;
-    private static ISeekableStreamFactory currentFactory;
-
-    static{
-        DEFAULT_FACTORY = new DefaultSeekableStreamFactory();
-        currentFactory = DEFAULT_FACTORY;
-    }
-
-    private SeekableStreamFactory(){}
-
-    public static void setInstance(final ISeekableStreamFactory factory){
-        currentFactory = factory;
-    }
-
-    public static ISeekableStreamFactory getInstance(){
-        return currentFactory;
-    }
-
-    /**
-     * Does this path point to a regular file on disk and not something like a URL?
-     * @param path the path to test
-     * @return true if the path is to a file on disk
-     */
-    public static boolean isFilePath(final String path) {
-        return ! ( path.startsWith("http:") || path.startsWith("https:") || path.startsWith("ftp:") );
-    }
-
-    private static class DefaultSeekableStreamFactory implements ISeekableStreamFactory {
-
-        public SeekableStream getStreamFor(final URL url) throws IOException {
-            return getStreamFor(url.toExternalForm());
-        }
-
-        public SeekableStream getStreamFor(final String path) throws IOException {
-            // todo -- add support for SeekableBlockInputStream
-
-            if (path.startsWith("http:") || path.startsWith("https:")) {
-                final URL url = new URL(path);
-                return new SeekableHTTPStream(url);
-            } else if (path.startsWith("ftp:")) {
-                return new SeekableFTPStream(new URL(path));
-            } else if (path.startsWith("file:")) {
-                return new SeekableFileStream(new File(new URL(path).getPath()));
-            } else {
-                return new SeekableFileStream(new File(path));
-            }
-        }
-
-        public SeekableStream getBufferedStream(SeekableStream stream){
-            return getBufferedStream(stream, SeekableBufferedStream.DEFAULT_BUFFER_SIZE);
-        }
-
-        public SeekableStream getBufferedStream(SeekableStream stream, int bufferSize){
-            if (bufferSize == 0) return stream;
-            else return new SeekableBufferedStream(stream, bufferSize);
-        }
-
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/seekablestream/UserPasswordInput.java b/src/main/java/htsjdk/samtools/seekablestream/UserPasswordInput.java
deleted file mode 100644
index eda1ef2..0000000
--- a/src/main/java/htsjdk/samtools/seekablestream/UserPasswordInput.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-public interface UserPasswordInput {
-	public void setHost(String host);
-    public boolean showDialog();
-    public String getUser();
-    public String getPassword();
-}
diff --git a/src/main/java/htsjdk/samtools/sra/ReferenceCache.java b/src/main/java/htsjdk/samtools/sra/ReferenceCache.java
deleted file mode 100644
index 9eb389a..0000000
--- a/src/main/java/htsjdk/samtools/sra/ReferenceCache.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.SAMFileHeader;
-import ngs.ErrorMsg;
-import ngs.ReadCollection;
-import ngs.Reference;
-
-
-/**
- * That is a thread-safe wrapper for a list of cache Reference objects.
- * Those objects can be used from different threads without issues, however to load and save a Reference object, we
- * need to acquire a lock.
- *
- * Created by andrii.nikitiuk on 10/28/15.
- */
-public class ReferenceCache {
-    private ReadCollection run;
-    private SAMFileHeader virtualHeader;
-    private Reference cachedReference;
-
-    public ReferenceCache(ReadCollection run, SAMFileHeader virtualHeader) {
-        this.run = run;
-        this.virtualHeader = virtualHeader;
-    }
-
-    /**
-     * This method returns Reference objects by reference indexes in SAM header
-     * Those objects do not maintain thread safety
-     *
-     * @param referenceIndex reference index in
-     * @return a Reference object
-     */
-    public Reference get(int referenceIndex) {
-        String contig = virtualHeader.getSequence(referenceIndex).getSequenceName();
-
-        try {
-            if (cachedReference == null || !cachedReference.getCanonicalName().equals(contig)) {
-                cachedReference = run.getReference(contig);
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        return cachedReference;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/sra/SRAAccession.java b/src/main/java/htsjdk/samtools/sra/SRAAccession.java
deleted file mode 100644
index 9aeb10f..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRAAccession.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-import gov.nih.nlm.ncbi.ngs.error.LibraryLoadError;
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.util.Log;
-import gov.nih.nlm.ncbi.ngs.NGS;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.util.Arrays;
-
-/**
- * Describes a single SRA accession for SRA read collection
- * Also provides app string functionality and allows to check if working SRA is supported on the running platform
- *
- * Important: due to checks performed in SRAAccession.isValid(), we won't recognise any accessions other
- * than ones that follow the pattern "^[SED]RR[0-9]{6,9}$", e.g. SRR000123
- */
-public class SRAAccession implements Serializable {
-    private static final Log log = Log.getInstance(SRAAccession.class);
-
-    private static boolean noLibraryDownload;
-    private static boolean initTried = false;
-    private static String appVersionString = null;
-    private final static String defaultAppVersionString = "[unknown software]";
-    private final static String htsJdkVersionString = "HTSJDK-NGS";
-
-    static final String REMOTE_ACCESSION_PATTERN = "^[SED]RR[0-9]{6,9}$";
-
-    private String acc;
-
-    static {
-        noLibraryDownload = !Defaults.SRA_LIBRARIES_DOWNLOAD;
-        if (noLibraryDownload) {
-            System.setProperty("vdb.System.noLibraryDownload", "1");
-        }
-    }
-
-    /**
-     * Sets an app version string which will let SRA know which software uses it.
-     * @param appVersionString a string that describes running application
-     */
-    public static void setAppVersionString(String appVersionString) {
-        SRAAccession.appVersionString = appVersionString;
-    }
-
-    /**
-     * @return true if SRA successfully loaded native libraries and fully initialized,
-     * false otherwise
-     * @deprecated use {@link #checkIfInitialized} instead
-     */
-    @Deprecated
-    public static boolean isSupported() {
-        return checkIfInitialized() == null;
-    }
-
-    /**
-     * Tries to initialize SRA. Initialization error is saved during first call,
-     * all subsequent calls will return the same saved error or null.
-     *
-     * @return ExceptionInInitializerError if initialization failed, null if initialization was successful
-     */
-    public static ExceptionInInitializerError checkIfInitialized() {
-        final ExceptionInInitializerError ngsInitError;
-        if (!initTried) {
-            log.debug("Initializing SRA module");
-            ngsInitError = NGS.getInitializationError();
-            if (ngsInitError != null) {
-                log.info("SRA initialization failed. Will not be able to read from SRA");
-            } else {
-                NGS.setAppVersionString(getFullVersionString());
-            }
-            initTried = true;
-        } else {
-            ngsInitError = NGS.getInitializationError();
-        }
-        return ngsInitError;
-    }
-
-    /**
-     * @param acc accession
-     * @return true if a string is a valid SRA accession
-     */
-    public static boolean isValid(String acc) {
-        boolean looksLikeSRA = false;
-        File f = new File(acc);
-        if (f.isFile()) {
-            byte[] buffer = new byte[8];
-            byte[] signature1 = "NCBI.sra".getBytes();
-            byte[] signature2 = "NCBInenc".getBytes();
-
-            try (InputStream is = new FileInputStream(f)) {
-                int numRead = is.read(buffer);
-
-                looksLikeSRA = numRead == buffer.length &&
-                        (Arrays.equals(buffer, signature1) || Arrays.equals(buffer, signature2));
-            } catch (IOException e) {
-                looksLikeSRA = false;
-            }
-        } else if (f.exists()) {
-            // anything else local other than a file is not an SRA archive
-            looksLikeSRA = false;
-        } else {
-            looksLikeSRA = acc.toUpperCase().matches ( REMOTE_ACCESSION_PATTERN );
-        }
-
-        if (!looksLikeSRA) return false;
-
-        final ExceptionInInitializerError initError = checkIfInitialized();
-        if (initError != null) {
-            if (noLibraryDownload && initError instanceof LibraryLoadError) {
-                throw new LinkageError(
-                        "Failed to load SRA native libraries and auto-download is disabled. " +
-                        "Please re-run with JVM argument -Dsamjdk.sra_libraries_download=true to enable auto-download of native libraries",
-                        initError
-                );
-            } else {
-                throw initError;
-            }
-        }
-
-        return NGS.isValid(acc);
-    }
-
-    /**
-     * @param acc accession
-     */
-    public SRAAccession(String acc) {
-        this.acc = acc;
-    }
-
-    public String toString() {
-        return acc;
-    }
-
-    /**
-     * @return true if contained string is an SRA accession
-     */
-    public boolean isValid() {
-        return SRAAccession.isValid(acc);
-    }
-
-    private static String getFullVersionString() {
-        String versionString = appVersionString == null ? defaultAppVersionString : appVersionString;
-        versionString += " through " + htsJdkVersionString;
-        return versionString;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/sra/SRAAlignmentIterator.java b/src/main/java/htsjdk/samtools/sra/SRAAlignmentIterator.java
deleted file mode 100644
index 650ddce..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRAAlignmentIterator.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SRAIterator;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.util.CloseableIterator;
-import ngs.Alignment;
-import ngs.AlignmentIterator;
-import ngs.ErrorMsg;
-import ngs.ReadCollection;
-import ngs.Reference;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-
-/**
- * Iterator for aligned reads.
- * Is used from SRAIterator.
- * Created by andrii.nikitiuk on 9/3/15.
- */
-public class SRAAlignmentIterator implements CloseableIterator<SAMRecord> {
-    private ValidationStringency validationStringency;
-
-    private SRAAccession accession;
-    private ReadCollection run;
-    private SAMFileHeader header;
-    private ReferenceCache cachedReferences;
-    private List<Long> referencesLengths;
-    private Iterator<Chunk> referencesChunksIterator;
-    private int currentReference = -1;
-
-    private boolean hasMoreReferences = true;
-
-    private AlignmentIterator alignedIterator;
-    private Boolean hasMoreAlignments = false;
-
-    private SRALazyRecord lastRecord;
-
-    /**
-     * @param run opened read collection
-     * @param header sam header
-     * @param cachedReferences list of cached references shared among all iterators from a single SRAFileReader
-     * @param recordRangeInfo info about record ranges withing SRA archive
-     * @param chunk used to determine which alignments the iterator should return
-     */
-    public SRAAlignmentIterator(SRAAccession accession, final ReadCollection run, final SAMFileHeader header, ReferenceCache cachedReferences,
-                                final SRAIterator.RecordRangeInfo recordRangeInfo, final Chunk chunk) {
-        this.accession = accession;
-        this.run = run;
-        this.header = header;
-        this.cachedReferences = cachedReferences;
-        this.referencesLengths = recordRangeInfo.getReferenceLengthsAligned();
-
-        referencesChunksIterator = getReferenceChunks(chunk).iterator();
-
-        try {
-            nextReference();
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        // check aligned
-        if (lastRecord != null) {
-            lastRecord.detachFromIterator();
-            lastRecord = null;
-        }
-
-        if (hasMoreAlignments == null) {
-            try {
-                hasMoreAlignments = alignedIterator.nextAlignment();
-            } catch (ErrorMsg e) {
-                throw new RuntimeException(e);
-            }
-        }
-        while (!hasMoreAlignments && hasMoreReferences) {
-            nextReference();
-        }
-
-        return hasMoreAlignments;
-    }
-
-    @Override
-    public SAMRecord next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException("No more alignments are available");
-        }
-
-        return nextAlignment();
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("Removal of records not implemented.");
-    }
-
-    public void setValidationStringency(ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-    }
-
-    private SAMRecord nextAlignment() {
-        try {
-            lastRecord = new SRALazyRecord(header, accession, run, alignedIterator, alignedIterator.getReadId(), alignedIterator.getAlignmentId());
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        if (validationStringency != null) {
-            lastRecord.setValidationStringency(validationStringency);
-        }
-
-        hasMoreAlignments = null;
-
-        return lastRecord;
-    }
-
-    private void nextReference() {
-        if (!hasMoreReferences) {
-            throw new NoSuchElementException("Cannot get next reference - already at last one");
-        }
-
-        try {
-            alignedIterator = null;
-            hasMoreAlignments = false;
-
-            hasMoreReferences = referencesChunksIterator.hasNext();
-            if (!hasMoreReferences) {
-                return;
-            }
-
-            currentReference++;
-            Chunk refChunk = referencesChunksIterator.next();
-            if (refChunk == null) {
-                return;
-            }
-
-            Reference reference = cachedReferences.get(currentReference);
-
-            alignedIterator = reference.getFilteredAlignmentSlice(
-                    refChunk.getChunkStart(), refChunk.getChunkEnd() - refChunk.getChunkStart(),
-                    Alignment.all, Alignment.startWithinSlice | Alignment.passDuplicates | Alignment.passFailed, 0);
-
-            hasMoreAlignments = alignedIterator.nextAlignment();
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private List<Chunk> getReferenceChunks(final Chunk chunk) {
-        List<Chunk> referencesChunks = new ArrayList<Chunk>();
-        long refOffset = 0;
-        for (Long refLen : referencesLengths) {
-            if (chunk.getChunkStart() - refOffset >= refLen || chunk.getChunkEnd() - refOffset <= 0) {
-                referencesChunks.add(null);
-            } else {
-                long refChunkStart = Math.max(chunk.getChunkStart() - refOffset, 0);
-                long refChunkEnd = Math.min(chunk.getChunkEnd() - refOffset, refLen);
-                referencesChunks.add(new Chunk(refChunkStart, refChunkEnd));
-            }
-
-            refOffset += refLen;
-        }
-
-        return referencesChunks;
-    }
-
-    @Override
-    public void close() {
-        if (lastRecord != null) {
-            lastRecord.detachFromIterator();
-            lastRecord = null;
-        }
-
-        alignedIterator = null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/sra/SRAIndexedSequenceFile.java b/src/main/java/htsjdk/samtools/sra/SRAIndexedSequenceFile.java
deleted file mode 100644
index 1d9a471..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRAIndexedSequenceFile.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import ngs.ErrorMsg;
-import ngs.ReadCollection;
-import ngs.Reference;
-import ngs.ReferenceIterator;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Allows reading Reference data from SRA
- */
-public class SRAIndexedSequenceFile implements ReferenceSequenceFile {
-    private SRAAccession acc;
-    private ReadCollection run;
-    private Reference cachedReference;
-
-    private Iterator<SAMSequenceRecord> sequenceRecordIterator;
-
-    protected SAMSequenceDictionary sequenceDictionary;
-
-    /**
-     * @param acc accession
-     */
-    public SRAIndexedSequenceFile(SRAAccession acc) {
-        this.acc = acc;
-
-        if (!acc.isValid()) {
-            throw new RuntimeException("Passed an invalid SRA accession into SRA reader: " + acc);
-        }
-
-        try {
-            run = gov.nih.nlm.ncbi.ngs.NGS.openReadCollection(acc.toString());
-            sequenceDictionary = loadSequenceDictionary();
-        } catch (final ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        reset();
-    }
-
-    @Override
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return sequenceDictionary;
-    }
-
-    @Override
-    public ReferenceSequence nextSequence() {
-        SAMSequenceRecord sequence = sequenceRecordIterator.next();
-        return getSubsequenceAt(sequence.getSequenceName(), 1L, sequence.getSequenceLength());
-    }
-
-    @Override
-    public void reset() {
-        sequenceRecordIterator = sequenceDictionary.getSequences().iterator();
-    }
-
-    @Override
-    public boolean isIndexed() {
-        return true;
-    }
-
-    @Override
-    public ReferenceSequence getSequence(String contig) {
-        return getSubsequenceAt(contig, 1L, sequenceDictionary.getSequence(contig).getSequenceLength());
-    }
-
-    @Override
-    public ReferenceSequence getSubsequenceAt(String contig, long start, long stop) {
-        SAMSequenceRecord sequence = sequenceDictionary.getSequence(contig);
-        int referenceIndex = sequence.getSequenceIndex();
-
-        byte[] bases;
-
-        try {
-            Reference reference;
-            synchronized (this) {
-                if (cachedReference == null || !cachedReference.getCanonicalName().equals(contig)) {
-                    cachedReference = run.getReference(contig);
-                }
-                reference = cachedReference;
-
-                bases = reference.getReferenceBases(start - 1, stop - (start - 1)).getBytes();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        return new ReferenceSequence(contig, referenceIndex, bases);
-    }
-
-    @Override
-    public void close() throws IOException {
-        cachedReference = null;
-    }
-
-    protected SAMSequenceDictionary loadSequenceDictionary() throws ErrorMsg {
-        SAMSequenceDictionary dict = new SAMSequenceDictionary();
-
-        ReferenceIterator itRef = run.getReferences();
-        while (itRef.nextReference()) {
-            dict.addSequence(new SAMSequenceRecord(itRef.getCanonicalName(), (int) itRef.getLength()));
-        }
-
-        return dict;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/sra/SRALazyRecord.java b/src/main/java/htsjdk/samtools/sra/SRALazyRecord.java
deleted file mode 100644
index 4391857..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRALazyRecord.java
+++ /dev/null
@@ -1,1056 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-import gov.nih.nlm.ncbi.ngs.NGS;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMTagUtil;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.SAMBinaryTagAndValue;
-import htsjdk.samtools.SAMUtils;
-import htsjdk.samtools.SAMValidationError;
-import htsjdk.samtools.util.Log;
-import ngs.ReadCollection;
-import ngs.AlignmentIterator;
-import ngs.Alignment;
-import ngs.ReadIterator;
-import ngs.Read;
-import ngs.Fragment;
-import ngs.ErrorMsg;
-
-import java.io.IOException;
-import java.util.EnumSet;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.List;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Extends SAMRecord so that any of the fields will be loaded only when needed.
- * Since SRA is a column oriented database, it is very inefficient to load all the fields at once.
- * However, loading only set of actually needed fields will be even faster than in row oriented databases.
- *
- * Because of that we are providing lazy loading of fields, flags and attributes.
- *
- * Created by andrii.nikitiuk on 8/25/15.
- */
-public class SRALazyRecord extends SAMRecord {
-    private static final Log log = Log.getInstance(SRALazyRecord.class);
-
-    private SRAAccession accession;
-    private boolean isAligned;
-    private transient ReadCollection run;
-    private transient Alignment alignmentIterator;
-    private transient Read unalignmentIterator;
-    private String sraReadId;
-    private String sraAlignmentId;
-    private int unalignedReadFragmentIndex = -1;
-
-
-    private Set<LazyField> initializedFields = EnumSet.noneOf(LazyField.class);
-    private Set<LazyFlag> initializedFlags = EnumSet.noneOf(LazyFlag.class);
-    private Set<LazyAttribute> initializedAttributes = EnumSet.noneOf(LazyAttribute.class);
-
-    private enum LazyField {
-        ALIGNMENT_START {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getAlignmentStart();
-            }
-        },
-        MAPPING_QUALITY {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getMappingQuality();
-            }
-        },
-        REFERENCE_NAME {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getReferenceName();
-            }
-        },
-        CIGAR_STRING {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getCigarString();
-            }
-        },
-        BASES {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getReadBases();
-            }
-        },
-        QUALS {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getBaseQualities();
-            }
-        },
-        MATE_ALIGNMENT_START {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getMateAlignmentStart();
-            }
-        },
-        MATE_REFERENCE_NAME {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getMateReferenceName();
-            }
-        },
-        INFERRED_INSERT_SIZE {
-            @Override
-            public void loadValue(SRALazyRecord self) {
-                self.getInferredInsertSize();
-            }
-        };
-
-        public abstract void loadValue(SRALazyRecord self);
-    }
-
-    private enum LazyFlag {
-        READ_NEGATIVE_STRAND(true) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getReadNegativeStrandFlag();
-            }
-        },
-        READ_PAIRED(true) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getReadPairedFlag();
-            }
-        },
-        PROPER_PAIR(false) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getProperPairFlag();
-            }
-        },
-        NOT_PRIMARY_ALIGNMENT(true) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getNotPrimaryAlignmentFlag();
-            }
-        },
-        MATE_NEGATIVE_STRAND(false) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getMateNegativeStrandFlag();
-            }
-        },
-        MATE_UNMAPPED(false) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getMateUnmappedFlag();
-            }
-        },
-        FIRST_OF_PAIR(false) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getFirstOfPairFlag();
-            }
-        },
-        SECOND_OF_PAIR(false) {
-            @Override
-            public boolean getFlag(SRALazyRecord self) {
-                return self.getSecondOfPairFlag();
-            }
-        };
-
-        private final boolean canCallOnNotPaired;
-
-        LazyFlag(final boolean canCallOnNotPaired) {
-            this.canCallOnNotPaired = canCallOnNotPaired;
-        }
-
-        public boolean canCallOnNotPaired() { return canCallOnNotPaired; }
-
-        public abstract boolean getFlag(SRALazyRecord self);
-    }
-
-    private enum LazyAttribute {
-        RG {
-            @Override
-            public String getAttribute(SRALazyRecord self) {
-                return self.getAttributeGroupNameImpl();
-            }
-        };
-
-        public abstract String getAttribute(SRALazyRecord self);
-    }
-
-    private static Map<Short, LazyAttribute> lazyAttributeTags;
-    static
-    {
-        lazyAttributeTags = new HashMap<Short, LazyAttribute>();
-        lazyAttributeTags.put(SAMTagUtil.getSingleton().RG, LazyAttribute.RG);
-    }
-
-    public SRALazyRecord(final SAMFileHeader header, SRAAccession accession, ReadCollection run, AlignmentIterator alignmentIterator, String readId, String alignmentId) {
-        this(header, accession, readId, alignmentId);
-
-        this.run = run;
-        this.alignmentIterator = alignmentIterator;
-    }
-
-    public SRALazyRecord(final SAMFileHeader header, SRAAccession accession, ReadCollection run, ReadIterator unalignmentIterator, String readId, int unalignedReadFragmentIndex) {
-        this(header, accession, readId, unalignedReadFragmentIndex);
-
-        this.run = run;
-        this.unalignmentIterator = unalignmentIterator;
-    }
-
-    protected SRALazyRecord(final SAMFileHeader header, SRAAccession accession, String readId, String alignmentId) {
-        this(header, accession, readId, true);
-
-        this.sraAlignmentId = alignmentId;
-    }
-
-    protected SRALazyRecord(final SAMFileHeader header, SRAAccession accession, String readId, int unalignedReadFragmentIndex) {
-        this(header, accession, readId, false);
-
-        this.unalignedReadFragmentIndex = unalignedReadFragmentIndex;
-    }
-
-    private SRALazyRecord(final SAMFileHeader header, SRAAccession accession, String readId, boolean isAligned) {
-        super(header);
-
-        this.accession = accession;
-        this.isAligned = isAligned;
-        this.sraReadId = readId;
-        setReadName(readId);
-        setReadUnmappedFlag(!isAligned);
-    }
-
-    /**
-     * Is being called when original NGS iterator is being moved to the next object.
-     * Later, if any of uninitialized fields is requested, either Read object or Alignment has to be retrieved from
-     * ReadCollection
-     */
-    public void detachFromIterator() {
-        alignmentIterator = null;
-        unalignmentIterator = null;
-    }
-
-    // ===== fields =====
-
-    @Override
-    public int getAlignmentStart() {
-        if (!initializedFields.contains(LazyField.ALIGNMENT_START)) {
-            setAlignmentStart(getAlignmentStartImpl());
-        }
-        return super.getAlignmentStart();
-    }
-
-    @Override
-    public void setAlignmentStart(final int value) {
-        if (!initializedFields.contains(LazyField.ALIGNMENT_START)) {
-            initializedFields.add(LazyField.ALIGNMENT_START);
-        }
-        super.setAlignmentStart(value);
-    }
-
-    @Override
-    public int getMappingQuality() {
-        if (!initializedFields.contains(LazyField.MAPPING_QUALITY)) {
-            setMappingQuality(getMappingQualityImpl());
-        }
-        return super.getMappingQuality();
-    }
-
-    @Override
-    public void setMappingQuality(final int value) {
-        if (!initializedFields.contains(LazyField.MAPPING_QUALITY)) {
-            initializedFields.add(LazyField.MAPPING_QUALITY);
-        }
-        super.setMappingQuality(value);
-    }
-
-    @Override
-    public String getReferenceName() {
-        if (!initializedFields.contains(LazyField.REFERENCE_NAME)) {
-            setReferenceName(getReferenceNameImpl());
-        }
-        return super.getReferenceName();
-    }
-
-    @Override
-    public void setReferenceName(final String value) {
-        if (!initializedFields.contains(LazyField.REFERENCE_NAME)) {
-            initializedFields.add(LazyField.REFERENCE_NAME);
-        }
-        super.setReferenceName(value);
-    }
-
-    @Override
-    public Integer getReferenceIndex() {
-        if (!initializedFields.contains(LazyField.REFERENCE_NAME)) {
-            setReferenceName(getReferenceNameImpl());
-        }
-        return super.getReferenceIndex();
-    }
-
-    @Override
-    public void setReferenceIndex(final int value) {
-        if (!initializedFields.contains(LazyField.REFERENCE_NAME)) {
-            initializedFields.add(LazyField.REFERENCE_NAME);
-        }
-        super.setReferenceIndex(value);
-    }
-
-    @Override
-    public String getCigarString() {
-        if (!initializedFields.contains(LazyField.CIGAR_STRING)) {
-            setCigarString(getCigarStringImpl());
-        }
-        return super.getCigarString();
-    }
-
-    @Override
-    public void setCigarString(final String value) {
-        if (!initializedFields.contains(LazyField.CIGAR_STRING)) {
-            initializedFields.add(LazyField.CIGAR_STRING);
-        }
-        super.setCigarString(value);
-    }
-
-    @Override
-    public Cigar getCigar() {
-        if (!initializedFields.contains(LazyField.CIGAR_STRING)) {
-            setCigarString(getCigarStringImpl());
-        }
-        return super.getCigar();
-    }
-
-    @Override
-    public void setCigar(final Cigar value) {
-        if (!initializedFields.contains(LazyField.CIGAR_STRING)) {
-            initializedFields.add(LazyField.CIGAR_STRING);
-        }
-        super.setCigar(value);
-    }
-
-    @Override
-    public byte[] getReadBases() {
-        if (!initializedFields.contains(LazyField.BASES)) {
-            setReadBases(getReadBasesImpl());
-        }
-        return super.getReadBases();
-    }
-
-    @Override
-    public void setReadBases(final byte[] value) {
-        if (!initializedFields.contains(LazyField.BASES)) {
-            initializedFields.add(LazyField.BASES);
-        }
-        super.setReadBases(value);
-    }
-
-    @Override
-    public byte[] getBaseQualities() {
-        if (!initializedFields.contains(LazyField.QUALS)) {
-            setBaseQualities(getBaseQualitiesImpl());
-        }
-        return super.getBaseQualities();
-    }
-
-    @Override
-    public void setBaseQualities(final byte[] value) {
-        if (!initializedFields.contains(LazyField.QUALS)) {
-            initializedFields.add(LazyField.QUALS);
-        }
-        super.setBaseQualities(value);
-    }
-
-    @Override
-    public int getMateAlignmentStart() {
-        if (!initializedFields.contains(LazyField.MATE_ALIGNMENT_START)) {
-            setMateAlignmentStart(getMateAlignmentStartImpl());
-        }
-        return super.getMateAlignmentStart();
-    }
-
-    @Override
-    public void setMateAlignmentStart(final int value) {
-        if (!initializedFields.contains(LazyField.MATE_ALIGNMENT_START)) {
-            initializedFields.add(LazyField.MATE_ALIGNMENT_START);
-        }
-        super.setMateAlignmentStart(value);
-    }
-
-    @Override
-    public String getMateReferenceName() {
-        if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) {
-            setMateReferenceName(getMateReferenceNameImpl());
-        }
-        return super.getMateReferenceName();
-    }
-
-    @Override
-    public void setMateReferenceName(final String value) {
-        if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) {
-            initializedFields.add(LazyField.MATE_REFERENCE_NAME);
-        }
-        super.setMateReferenceName(value);
-    }
-
-    @Override
-    public Integer getMateReferenceIndex() {
-        if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) {
-            setMateReferenceName(getMateReferenceNameImpl());
-        }
-        return super.getMateReferenceIndex();
-    }
-
-    @Override
-    public void setMateReferenceIndex(final int value) {
-        if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) {
-            initializedFields.add(LazyField.MATE_REFERENCE_NAME);
-        }
-        super.setMateReferenceIndex(value);
-    }
-
-    @Override
-    public int getInferredInsertSize() {
-        if (!initializedFields.contains(LazyField.INFERRED_INSERT_SIZE)) {
-            setInferredInsertSize(getInferredInsertSizeImpl());
-        }
-        return super.getInferredInsertSize();
-    }
-
-    @Override
-    public void setInferredInsertSize(final int value) {
-        if (!initializedFields.contains(LazyField.INFERRED_INSERT_SIZE)) {
-            initializedFields.add(LazyField.INFERRED_INSERT_SIZE);
-        }
-        super.setInferredInsertSize(value);
-    }
-
-    // ===== flags =====
-
-    @Override
-    public int getFlags() {
-        for (LazyFlag flag : LazyFlag.values()) {
-            if (initializedFlags.contains(flag)) {
-                continue;
-            }
-
-            if (flag.canCallOnNotPaired() || getReadPairedFlag()) {
-                flag.getFlag(this);
-            }
-        }
-
-        return super.getFlags();
-    }
-
-    @Override
-    public void setFlags(final int value) {
-        for (LazyFlag flag : LazyFlag.values()) {
-            if (!initializedFlags.contains(flag)) {
-                initializedFlags.add(flag);
-            }
-        }
-        super.setFlags(value);
-    }
-
-    @Override
-    public boolean getReadNegativeStrandFlag() {
-        if (!initializedFlags.contains(LazyFlag.READ_NEGATIVE_STRAND)) {
-            setReadNegativeStrandFlag(getReadNegativeStrandFlagImpl());
-        }
-        return super.getReadNegativeStrandFlag();
-    }
-
-    @Override
-    public void setReadNegativeStrandFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.READ_NEGATIVE_STRAND)) {
-            initializedFlags.add(LazyFlag.READ_NEGATIVE_STRAND);
-        }
-        super.setReadNegativeStrandFlag(flag);
-    }
-
-    @Override
-    public boolean getReadPairedFlag() {
-        if (!initializedFlags.contains(LazyFlag.READ_PAIRED)) {
-            setReadPairedFlag(getReadPairedFlagImpl());
-        }
-        return super.getReadPairedFlag();
-    }
-
-    @Override
-    public void setReadPairedFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.READ_PAIRED)) {
-            initializedFlags.add(LazyFlag.READ_PAIRED);
-        }
-        super.setReadPairedFlag(flag);
-    }
-
-    @Override
-    public boolean getProperPairFlag() {
-        if (!initializedFlags.contains(LazyFlag.PROPER_PAIR)) {
-            setProperPairFlag(getProperPairFlagImpl());
-        }
-        return super.getProperPairFlag();
-    }
-
-    @Override
-    public void setProperPairFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.PROPER_PAIR)) {
-            initializedFlags.add(LazyFlag.PROPER_PAIR);
-        }
-        super.setProperPairFlag(flag);
-    }
-
-    @Override
-    public boolean getNotPrimaryAlignmentFlag() {
-        if (!initializedFlags.contains(LazyFlag.NOT_PRIMARY_ALIGNMENT)) {
-            setNotPrimaryAlignmentFlag(getNotPrimaryAlignmentFlagImpl());
-        }
-        return super.getNotPrimaryAlignmentFlag();
-    }
-
-    @Override
-    public void setNotPrimaryAlignmentFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.NOT_PRIMARY_ALIGNMENT)) {
-            initializedFlags.add(LazyFlag.NOT_PRIMARY_ALIGNMENT);
-        }
-        super.setNotPrimaryAlignmentFlag(flag);
-    }
-
-    @Override
-    public boolean getMateNegativeStrandFlag() {
-        if (!initializedFlags.contains(LazyFlag.MATE_NEGATIVE_STRAND)) {
-            setMateNegativeStrandFlag(getMateNegativeStrandFlagImpl());
-        }
-        return super.getMateNegativeStrandFlag();
-    }
-
-    @Override
-    public void setMateNegativeStrandFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.MATE_NEGATIVE_STRAND)) {
-            initializedFlags.add(LazyFlag.MATE_NEGATIVE_STRAND);
-        }
-        super.setMateNegativeStrandFlag(flag);
-    }
-
-    @Override
-    public boolean getMateUnmappedFlag() {
-        if (!initializedFlags.contains(LazyFlag.MATE_UNMAPPED)) {
-            setMateUnmappedFlag(getMateUnmappedFlagImpl());
-        }
-        return super.getMateUnmappedFlag();
-    }
-
-    @Override
-    public void setMateUnmappedFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.MATE_UNMAPPED)) {
-            initializedFlags.add(LazyFlag.MATE_UNMAPPED);
-        }
-        super.setMateUnmappedFlag(flag);
-    }
-
-    @Override
-    public boolean getFirstOfPairFlag() {
-        if (!initializedFlags.contains(LazyFlag.FIRST_OF_PAIR)) {
-            setFirstOfPairFlag(getFirstOfPairFlagImpl());
-        }
-        return super.getFirstOfPairFlag();
-    }
-
-    @Override
-    public void setFirstOfPairFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.FIRST_OF_PAIR)) {
-            initializedFlags.add(LazyFlag.FIRST_OF_PAIR);
-        }
-        super.setFirstOfPairFlag(flag);
-    }
-
-    @Override
-    public boolean getSecondOfPairFlag() {
-        if (!initializedFlags.contains(LazyFlag.SECOND_OF_PAIR)) {
-            setSecondOfPairFlag(getSecondOfPairFlagImpl());
-        }
-        return super.getSecondOfPairFlag();
-    }
-
-    @Override
-    public void setSecondOfPairFlag(final boolean flag) {
-        if (!initializedFlags.contains(LazyFlag.SECOND_OF_PAIR)) {
-            initializedFlags.add(LazyFlag.SECOND_OF_PAIR);
-        }
-        super.setSecondOfPairFlag(flag);
-    }
-
-
-    // ===== attributes =====
-
-    @Override
-    public Object getAttribute(final short tag) {
-        LazyAttribute attr = lazyAttributeTags.get(tag);
-        if (attr != null) {
-            if (!initializedAttributes.contains(attr)) {
-                setAttribute(tag, attr.getAttribute(this));
-            }
-        }
-        return super.getAttribute(tag);
-    }
-
-    @Override
-    public void setAttribute(final short tag, final Object value) {
-        LazyAttribute attr = lazyAttributeTags.get(tag);
-        if (attr != null && !initializedAttributes.contains(attr)) {
-            initializedAttributes.add(attr);
-        }
-        super.setAttribute(tag, value);
-    }
-
-    @Override
-    protected void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
-        LazyAttribute attr = lazyAttributeTags.get(tag);
-        if (attr != null && !initializedAttributes.contains(attr)) {
-            initializedAttributes.add(attr);
-        }
-        super.setAttribute(tag, value, isUnsignedArray);
-    }
-
-    @Override
-    public void clearAttributes() {
-        for (LazyAttribute lazyAttribute : LazyAttribute.values()) {
-            if (!initializedAttributes.contains(lazyAttribute)) {
-                initializedAttributes.add(lazyAttribute);
-            }
-        }
-        super.clearAttributes();
-    }
-
-    @Override
-    protected void setAttributes(final SAMBinaryTagAndValue attributes) {
-        for (LazyAttribute lazyAttribute : LazyAttribute.values()) {
-            if (!initializedAttributes.contains(lazyAttribute)) {
-                initializedAttributes.add(lazyAttribute);
-            }
-        }
-        super.setAttributes(attributes);
-    }
-
-    @Override
-    protected SAMBinaryTagAndValue getBinaryAttributes() {
-        for (Map.Entry<Short, LazyAttribute> info : lazyAttributeTags.entrySet()) {
-            if (!initializedAttributes.contains(info.getValue())) {
-                getAttribute(info.getKey());
-            }
-        }
-
-        return super.getBinaryAttributes();
-    }
-
-    public boolean isUnsignedArrayAttribute(final String tag) {
-        Short binaryTag = SAMTagUtil.getSingleton().makeBinaryTag(tag);
-        LazyAttribute attr = lazyAttributeTags.get(binaryTag);
-        if (attr != null && !initializedAttributes.contains(attr)) {
-            getAttribute(binaryTag);
-        }
-
-        return super.isUnsignedArrayAttribute(tag);
-    }
-
-    // ===== misc ====
-
-    /**
-     * For records equality, we should only compare read id, reference and position on the reference.
-     * Since read id is a constructor parameter, we only need to make sure that reference info is loaded.
-     * @param o other
-     * @return comparison result
-     */
-    @Override
-    public boolean equals(final Object o) {
-        if (o instanceof SRALazyRecord) {
-            SRALazyRecord otherRecord = (SRALazyRecord)o;
-            otherRecord.getReferenceIndex();
-            otherRecord.getAlignmentStart();
-        }
-
-        getReferenceIndex();
-        getAlignmentStart();
-
-        return super.equals(o);
-    }
-
-    /**
-     * The same approach as with 'equals' method. We only load reference and position.
-     */
-    @Override
-    public int hashCode() {
-        getReferenceIndex();
-        getAlignmentStart();
-
-        return super.hashCode();
-    }
-
-    /**
-     * Performs a deep copy of the SAMRecord and detaches a copy from NGS iterator
-     * @return new object
-     * @throws CloneNotSupportedException
-     */
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        SRALazyRecord newObject = (SRALazyRecord)super.clone();
-        newObject.initializedFields = EnumSet.copyOf(this.initializedFields);
-        newObject.initializedFlags = EnumSet.copyOf(this.initializedFlags);
-        newObject.initializedAttributes = EnumSet.copyOf(this.initializedAttributes);
-        newObject.detachFromIterator();
-
-        return newObject;
-    }
-
-    @Override
-    public String format() {
-        if (!initializedAttributes.contains(LazyAttribute.RG)) {
-            getAttribute("RG");
-        }
-        return super.format();
-    }
-
-    @Override
-    public List<SAMValidationError> isValid(final boolean firstOnly) {
-        loadFields();
-        getFlags();
-        getBinaryAttributes();
-
-        return super.isValid(firstOnly);
-    }
-
-    // =============================== Implementation ========================================
-
-    private ReadCollection getReadCollection() {
-        if (run != null) {
-            return run;
-        }
-
-        log.debug("Recovering SRA read collection. Accession: " + accession);
-        try {
-            return run = NGS.openReadCollection(accession.toString());
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private Alignment getCurrentAlignment() throws ErrorMsg {
-        if (!isAligned) {
-            throw new RuntimeException("Should be called for aligned records only");
-        }
-
-        if (alignmentIterator == null) {
-            log.debug("Recovering SAM record after detaching from iterator. Alignment id: " + sraAlignmentId);
-            if (sraAlignmentId == null) {
-                throw new RuntimeException("Cannot recover SAM object after detaching from iterator: no alignment id");
-            }
-
-            alignmentIterator = getReadCollection().getAlignment(sraAlignmentId);
-        }
-        return alignmentIterator;
-    }
-
-    private Read getCurrentUnalignedRead() throws ErrorMsg {
-        if (isAligned) {
-            throw new RuntimeException("Should be called for unaligned records only");
-        }
-
-        if (unalignmentIterator == null) {
-            log.debug("Recovering SAM record after detaching from iterator. Read id: " + sraReadId + ", fragment index: " + unalignedReadFragmentIndex);
-            if (sraReadId == null) {
-                throw new RuntimeException("Cannot recover SAM object after detaching from iterator: no read id");
-            }
-
-            Read read = getReadCollection().getRead(sraReadId);
-            for (int i = 0; i < unalignedReadFragmentIndex + 1; i++) {
-                read.nextFragment();
-            }
-
-            unalignmentIterator = read;
-        }
-        return unalignmentIterator;
-    }
-
-    // ===== fields =====
-
-    private void loadFields() {
-        for (LazyField field : LazyField.values()) {
-            if (initializedFields.contains(field)) {
-                continue;
-            }
-
-            field.loadValue(this);
-        }
-    }
-
-    private int getAlignmentStartImpl() {
-        try {
-            if (isAligned) {
-                return (int) getCurrentAlignment().getAlignmentPosition() + 1;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_ALIGNMENT_START;
-    }
-
-    private int getMappingQualityImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getMappingQuality();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_MAPPING_QUALITY;
-    }
-
-    private String getReferenceNameImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getReferenceSpec();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-    }
-
-    private String getCigarStringImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getShortCigar(false);
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_ALIGNMENT_CIGAR;
-    }
-
-    private byte[] getReadBasesImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getAlignedFragmentBases().getBytes();
-            } else {
-                return getCurrentUnalignedRead().getFragmentBases().getBytes();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private byte[] getBaseQualitiesImpl() {
-        try {
-            Fragment fragment;
-            if (isAligned) {
-                fragment = getCurrentAlignment();
-            } else {
-                fragment = getCurrentUnalignedRead();
-            }
-
-            // quals are being taken from PRIMARY_ALIGNMENT.SAM_QUALITY column which reverse automatically them if needed
-            return SAMUtils.fastqToPhred(fragment.getFragmentQualities());
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private int getMateAlignmentStartImpl() {
-        try {
-            if (isAligned && getReadPairedFlag() && !getMateUnmappedFlag()) {
-                Alignment mate = getCurrentAlignment().getMateAlignment();
-                return (int) mate.getAlignmentPosition() + 1;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_ALIGNMENT_START;
-    }
-
-    private String getMateReferenceNameImpl() {
-        try {
-            if (isAligned && getReadPairedFlag() && !getMateUnmappedFlag()) {
-                return getCurrentAlignment().getMateReferenceSpec();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return SAMRecord.NO_ALIGNMENT_REFERENCE_NAME;
-    }
-
-    private int getInferredInsertSizeImpl() {
-        try {
-            if (isAligned) {
-                return (int) getCurrentAlignment().getTemplateLength();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return 0;
-    }
-
-    // ===== flags =====
-
-    private boolean getReadNegativeStrandFlagImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getIsReversedOrientation();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-        return false;
-    }
-
-    private boolean getReadPairedFlagImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().isPaired();
-            } else {
-                return getCurrentUnalignedRead().getNumFragments() > 1;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private boolean getProperPairFlagImpl() {
-        return isAligned && getReadPairedFlag() && !getMateUnmappedFlag();
-    }
-
-    private boolean getNotPrimaryAlignmentFlagImpl() {
-        try {
-            if (isAligned) {
-                return getCurrentAlignment().getAlignmentCategory() == Alignment.secondaryAlignment;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        return false;
-    }
-
-    private boolean getMateNegativeStrandFlagImpl() {
-        try {
-            if (isAligned && getReadPairedFlag() && !getMateUnmappedFlag()) {
-                Alignment mate = getCurrentAlignment().getMateAlignment();
-                return mate.getIsReversedOrientation();
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        return false;
-    }
-
-    private boolean getMateUnmappedFlagImpl() {
-        try {
-            if (isAligned) {
-                return !getCurrentAlignment().hasMate();
-            } else {
-                Read unalignedRead = getCurrentUnalignedRead();
-                int numFragments = unalignedRead.getNumFragments();
-                int nextFragmentIdx = unalignedReadFragmentIndex + 1;
-                if (nextFragmentIdx == numFragments) {
-                    nextFragmentIdx = 0;
-                }
-
-                return unalignedRead.fragmentIsAligned(nextFragmentIdx);
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private boolean getFirstOfPairFlagImpl() {
-        if (!getReadPairedFlag()) {
-            return false;
-        }
-        try {
-            if (isAligned) {
-                String fragmentId = getCurrentAlignment().getFragmentId();
-                if (!fragmentId.contains(".FA")) {
-                    throw new RuntimeException("Invalid fragment id: " + fragmentId);
-                }
-
-                return fragmentId.contains(".FA0.");
-            } else {
-                return unalignedReadFragmentIndex == 0;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private boolean getSecondOfPairFlagImpl() {
-        if (!getReadPairedFlag()) {
-            return false;
-        }
-        try {
-            if (isAligned) {
-                String fragmentId = getCurrentAlignment().getFragmentId();
-                if (!fragmentId.contains(".FA")) {
-                    throw new RuntimeException("Invalid fragment id: " + fragmentId);
-                }
-
-                return !fragmentId.contains(".FA0.");
-            } else {
-                return unalignedReadFragmentIndex != 0;
-            }
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    // ===== attributes =====
-
-    private String getAttributeGroupNameImpl() {
-        try {
-            String readGroupName;
-            if (isAligned) {
-                readGroupName = getCurrentAlignment().getReadGroup();
-            } else {
-                readGroupName = getCurrentUnalignedRead().getReadGroup();
-            }
-
-            if (!readGroupName.isEmpty()) {
-                return readGroupName;
-            }
-            return getReadCollection().getName();
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/sra/SRAUnalignmentIterator.java b/src/main/java/htsjdk/samtools/sra/SRAUnalignmentIterator.java
deleted file mode 100644
index f128a2b..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRAUnalignmentIterator.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SRAIterator;
-import htsjdk.samtools.ValidationStringency;
-import ngs.ErrorMsg;
-import ngs.Read;
-import ngs.ReadCollection;
-import ngs.ReadIterator;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Iterator for unaligned reads.
- * Is used from SRAIterator.
- *
- * Created by andrii.nikitiuk on 9/3/15.
- */
-public class SRAUnalignmentIterator implements Iterator<SAMRecord> {
-    private ValidationStringency validationStringency;
-
-    private SRAAccession accession;
-    private ReadCollection run;
-    private SAMFileHeader header;
-    private SRAIterator.RecordRangeInfo recordRangeInfo;
-
-    private ReadIterator unalignedIterator;
-    private boolean hasMoreUnalignedReads = true;
-    private Boolean hasMoreUnalignedFragments = false;
-    private int lastUnalignedFragmentIndex;
-
-    private SRALazyRecord lastRecord;
-
-    /**
-     *
-     * @param run opened read collection
-     * @param header sam header
-     * @param recordRangeInfo info about record ranges withing SRA archive
-     * @param chunk used to determine which unaligned reads the iterator should return
-     */
-    public SRAUnalignmentIterator(SRAAccession accession, final ReadCollection run, final SAMFileHeader header, SRAIterator.RecordRangeInfo recordRangeInfo, Chunk chunk) {
-        this.accession = accession;
-        this.run = run;
-        this.header = header;
-        this.recordRangeInfo = recordRangeInfo;
-
-        long readStart = chunk.getChunkStart() - recordRangeInfo.getTotalReferencesLength();
-        if (readStart < 0) {
-            readStart = 0;
-        } else if (readStart >= recordRangeInfo.getNumberOfReads()) {
-            throw new RuntimeException("Invalid chunk provided: chunkStart position is after last read");
-        }
-
-        long readEnd = chunk.getChunkEnd() - recordRangeInfo.getTotalReferencesLength();
-        if (readEnd > recordRangeInfo.getNumberOfReads()) {
-            readEnd = recordRangeInfo.getNumberOfReads();
-        } else if (readEnd <= 0) {
-            throw new RuntimeException("Invalid chunk provided: chunkEnd position is before last read");
-        }
-
-        try {
-            unalignedIterator = run.getReadRange(readStart + 1, readEnd - readStart, Read.partiallyAligned | Read.unaligned);
-            nextUnalignedFragment();
-
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        // check unaligned
-        if (hasMoreUnalignedFragments == null) {
-            try {
-                lastRecord.detachFromIterator();
-                nextUnalignedFragment();
-            } catch (ErrorMsg e) {
-                throw new RuntimeException(e);
-            }
-        }
-        return hasMoreUnalignedFragments;
-    }
-
-    @Override
-    public SAMRecord next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException("No more alignments are available");
-        }
-
-        return nextUnalignment();
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("Removal of records not implemented.");
-    }
-
-    public void setValidationStringency(ValidationStringency validationStringency) {
-        this.validationStringency = validationStringency;
-    }
-
-    private SAMRecord nextUnalignment() {
-        try {
-            lastRecord = new SRALazyRecord(header, accession, run, unalignedIterator, unalignedIterator.getReadId(), lastUnalignedFragmentIndex);
-        } catch (ErrorMsg e) {
-            throw new RuntimeException(e);
-        }
-
-        if (validationStringency != null) {
-            lastRecord.setValidationStringency(validationStringency);
-        }
-
-        hasMoreUnalignedFragments = null;
-
-        return lastRecord;
-    }
-
-    private void nextUnalignedFragment() throws ErrorMsg {
-        while (hasMoreUnalignedFragments == null || hasMoreUnalignedFragments) {
-            hasMoreUnalignedFragments = unalignedIterator.nextFragment();
-            lastUnalignedFragmentIndex++;
-
-            if (hasMoreUnalignedFragments && !unalignedIterator.isAligned()) {
-                return;
-            }
-        }
-
-        if (!hasMoreUnalignedReads) {
-            throw new RuntimeException("Cannot get next unaligned read - already at last one");
-        }
-
-        while (true) {
-            hasMoreUnalignedReads = unalignedIterator.nextRead();
-            lastUnalignedFragmentIndex = -1;
-            if (!hasMoreUnalignedReads) {
-                break;
-            }
-
-            // search for unaligned fragment
-            do {
-                hasMoreUnalignedFragments = unalignedIterator.nextFragment();
-                lastUnalignedFragmentIndex++;
-            } while (hasMoreUnalignedFragments && unalignedIterator.isAligned());
-
-            // means that we found fragment
-            if (hasMoreUnalignedFragments) {
-                return;
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/sra/SRAUtils.java b/src/main/java/htsjdk/samtools/sra/SRAUtils.java
deleted file mode 100644
index e72caa8..0000000
--- a/src/main/java/htsjdk/samtools/sra/SRAUtils.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-import ngs.ErrorMsg;
-import ngs.Read;
-import ngs.ReadCollection;
-import ngs.ReferenceIterator;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides some functionality which can be used by other classes
- *
- * Created by andrii.nikitiuk on 10/28/15.
- */
-public class SRAUtils {
-    /**
-     * References are stored in SRA table in chunks of 5k bases per row, while last chunk of a reference is less or
-     * equal than 5k bases in size (even if the next reference follows).
-     * So, it will be optimal if we align reference sizes to 5k bases to read by reference rows.
-     */
-    public static final int REFERENCE_ALIGNMENT = 5000;
-
-    /**
-     * Is used to build RecordRangeInfo
-     * @param run open read collection
-     * @return total number of reads (both aligned and unaligned) in SRA archive
-     * @throws ErrorMsg
-     */
-    public static long getNumberOfReads(ReadCollection run) throws ErrorMsg {
-        return run.getReadCount(Read.all);
-    }
-
-    /**
-     * Loads reference lengths from a read collection.
-     * Aligns reference lengths by REFERENCE_ALIGNMENT bases for optimal loads of alignments
-     * (references are stored in REFERENCE_ALIGNMENT bases chunks in SRA table)
-     *
-     * Is used to build RecordRangeInfo
-     * @param run single opened read collection
-     * @return list with references lengths
-     * @throws ErrorMsg
-     */
-    public static List<Long> getReferencesLengthsAligned(ReadCollection run) throws ErrorMsg {
-        ReferenceIterator refIt = run.getReferences();
-        List<Long> lengths = new ArrayList<Long>();
-        while (refIt.nextReference()) {
-            long refLen = refIt.getLength();
-            // lets optimize references so they always align in 5000 bases positions
-            if (refLen % REFERENCE_ALIGNMENT != 0) {
-                refLen += REFERENCE_ALIGNMENT - (refLen % REFERENCE_ALIGNMENT);
-            }
-            lengths.add(refLen);
-        }
-        return lengths;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractAsyncWriter.java b/src/main/java/htsjdk/samtools/util/AbstractAsyncWriter.java
deleted file mode 100644
index ef1803b..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractAsyncWriter.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.io.Closeable;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Abstract class that is designed to be extended and specialized to provide an asynchronous
- * wrapper around any kind of Writer class that takes an object and writes it out somehow.
- *
- * NOTE: Objects of subclasses of this class are not intended to be shared between threads.
- * In particular there must be only one thread that calls {@link #write} and {@link #close}.
- *
- * NOTE: Any exception thrown by the underlying Writer will be propagated back to the caller
- * during the next available call to {@link #write} or {@link #close}. After the exception
- * has been thrown to the caller, it is not safe to attempt further operations on the instance.
- *
- * @author Tim Fennell
- */
-public abstract class AbstractAsyncWriter<T> implements Closeable {
-    private static volatile int threadsCreated = 0; // Just used for thread naming.
-    public static final int DEFAULT_QUEUE_SIZE = 2000;
-
-    private final AtomicBoolean isClosed = new AtomicBoolean(false);
-    private final BlockingQueue<T> queue;
-    private final Thread writer;
-    private final WriterRunnable writerRunnable;
-    private final AtomicReference<Throwable> ex = new AtomicReference<Throwable>(null);
-
-    /** Returns the prefix to use when naming threads. */
-    protected abstract String getThreadNamePrefix();
-
-    protected abstract void synchronouslyWrite(final T item);
-
-    protected abstract void synchronouslyClose();
-
-    /**
-     * Creates an AbstractAsyncWriter that will use the provided WriterRunnable to consume from the
-     * internal queue and write records into the synchronous writer.
-     */
-    protected AbstractAsyncWriter(final int queueSize) {
-        this.queue = new ArrayBlockingQueue<T>(queueSize);
-        this.writerRunnable = new WriterRunnable();
-        this.writer = new Thread(writerRunnable, getThreadNamePrefix() + threadsCreated++);
-        this.writer.setDaemon(true);
-        this.writer.start();
-    }
-
-    /**
-     * Public method for sub-classes or ultimately consumers to put an item into the queue
-     * to be written out.
-     */
-    public void write(final T item) {
-        if (this.isClosed.get()) throw new RuntimeIOException("Attempt to add record to closed writer.");
-
-        checkAndRethrow();
-        try { this.queue.put(item); }
-        catch (final InterruptedException ie) { throw new RuntimeException("Interrupted queueing item for writing.", ie); }
-        checkAndRethrow();
-    }
-
-    /**
-     * Attempts to finish draining the queue and then calls synchronouslyClose() to allow implementation
-     * to do any one time clean up.
-     */
-    public void close() {
-        checkAndRethrow();
-
-        if (!this.isClosed.getAndSet(true)) {
-            try {
-                if (this.queue.isEmpty()) this.writer.interrupt(); // signal to writer clean up
-            	this.writer.join();
-            } catch (final InterruptedException ie) {
-            	throw new RuntimeException("Interrupted waiting on writer thread.", ie);
-        	}
-
-            //The queue should be empty but if it's not, we'll drain it here to protect against any lost data.
-            //There's no need to timeout on poll because poll is called only when queue is not empty and
-            // at this point the writer thread is definitely dead and noone is removing items from the queue.
-            //The item pulled will never be null (same reasoning).
-            while (!this.queue.isEmpty()) {
-                final T item = queue.poll();
-                synchronouslyWrite(item);
-            }
-
-            synchronouslyClose();
-            checkAndRethrow();
-        }
-    }
-
-    /**
-     * Checks to see if an exception has been raised in the writer thread and if so rethrows it as an Error
-     * or RuntimeException as appropriate.
-     */
-    private final void checkAndRethrow() {
-        final Throwable t = this.ex.getAndSet(null);
-        if (t != null) {
-            this.isClosed.set(true); // Ensure no further attempts to write
-            if (t instanceof Error) throw (Error) t;
-            if (t instanceof RuntimeException) throw (RuntimeException) t;
-            else throw new RuntimeException(t);
-        }
-    }
-
-    /**
-     * Small Runnable implementation that simply reads from the blocking queue and writes to the
-     * synchronous writer.
-     */
-    private class WriterRunnable implements Runnable {
-        public void run() {
-            try {
-                //The order of the two conditions is important, see https://github.com/samtools/htsjdk/issues/564
-                //because we want to make sure that emptiness status of the queue does not change after we have evaluated isClosed
-                //as it is now (isClosed checked before queue.isEmpty),
-                //the two operations are effectively atomic if isClosed returns true
-                while (!isClosed.get() || !queue.isEmpty()) {
-                    try {
-                        final T item = queue.poll(2, TimeUnit.SECONDS);
-                        if (item != null) synchronouslyWrite(item);
-                    }
-                    catch (final InterruptedException ie) {
-                        /* Do Nothing */
-                    }
-                }
-            }
-            catch (final Throwable t) {
-                ex.compareAndSet(null, t);
-                // In case a writer was blocking on a full queue before ex has been set, clear the queue
-                // so that the writer will no longer be blocked so that it can see the exception.
-                queue.clear();
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractIterator.java b/src/main/java/htsjdk/samtools/util/AbstractIterator.java
deleted file mode 100644
index 2e75dc4..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractIterator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Base class of implementing iterators. All you have to do is implement advance which gets
- * the next element.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public abstract class AbstractIterator<E> implements Iterator<E> {
-    protected E next;
-    private boolean iterating = false;
-
-    @Override
-    public boolean hasNext() {
-        // If this is the start of iteration, queue up the first item
-        if (!iterating) {
-            next = advance();
-            iterating = true;
-        }
-        return next != null;
-    }
-
-    @Override
-    public E next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-
-        E ret = next;
-        next = advance();
-        return ret;
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("Remove() not supported.");
-    }
-
-    /**
-     * @return the next element or null if the iterator is at the end
-     */
-    protected abstract E advance();
-
-    /**
-     * Returns the next element in the iterator, if one exists.  Otherwise, returns null.  Invoking this method does not advance the iterator.
-     * @return The next element in the iterator, without advancing, or, if no other element exists, null.
-     */
-    public E peek() {
-        return next;
-    }
-
-    /**
-     * @return true after the first time hasNext() or next() have been called
-     */
-    protected boolean isIterating() {
-        return iterating;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractLocusInfo.java b/src/main/java/htsjdk/samtools/util/AbstractLocusInfo.java
deleted file mode 100644
index 4e02007..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractLocusInfo.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMSequenceRecord;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * The unit of iteration for AbstractLocusIterator.
- * Holds information about the locus (the SAMSequenceRecord and 1-based position on the reference),
- * plus list of AbstractRecordAndOffset objects,
- * If <code>RecordAndOffset</code> class is used, one object represents one aligned read that overlaps the locus.
- * If <code>TypedRecordAndOffset</code> class is used, one object represents one aligned read,
- * that starts or ends at the locus.
- *
- * @author Darina_Nikolaeva at epam.com, EPAM Systems, Inc. <www.epam.com>
- *
- */
-public class AbstractLocusInfo<E extends AbstractRecordAndOffset> implements Locus {
-    /**
-     * Reference sequence, to which the reads are aligned.
-     **/
-    private final SAMSequenceRecord referenceSequence;
-    /**
-     * Position in the sequence, to which the reads are aligned.
-     **/
-    private final int position;
-
-    /**
-     * Initial size for the list of <code>AbstractRecordAndOffset</code> objects
-     **/
-    private final static int INITIAL_LIST_SIZE = 100;
-
-    /**
-     * List of aligned to current position reads
-     **/
-    private final List<E> recordAndOffsets = new ArrayList<>(INITIAL_LIST_SIZE);
-
-    /**
-     * @param referenceSequence reference sequence to which the reads are aligned
-     * @param position          position in the sequence to which the reads are aligned
-     */
-    public AbstractLocusInfo(final SAMSequenceRecord referenceSequence, final int position) {
-        this.referenceSequence = referenceSequence;
-        this.position = position;
-    }
-
-    /**
-     * Accumulates info for one read aligned to the locus. Method doesn't check, that <code>recordAndOffset</code>
-     * is really aligned to current reference position, so it must have valid reference sequence and
-     * position or further processing can go wrong.
-     *
-     * @param recordAndOffset object to add to current locus
-     */
-    public void add(E recordAndOffset) {
-        recordAndOffsets.add(recordAndOffset);
-    }
-
-    /**
-     * @return the index of reference sequence
-     */
-    public int getSequenceIndex() {
-        return referenceSequence.getSequenceIndex();
-    }
-
-    /**
-     * @return 1-based reference position
-     */
-    public int getPosition() {
-        return position;
-    }
-
-    /**
-     * @deprecated since name of the method can be confusing, new implementation should be used
-     *          {@code getRecordAndOffsets()}
-     * @return unmodifiable list of aligned to the reference position <code>recordsAndOffsets</code>
-     */
-    @Deprecated
-    public List<E> getRecordAndPositions() {
-        return Collections.unmodifiableList(recordAndOffsets);
-    }
-
-    /**
-     * @return unmodifiable list of aligned to the reference position <code>recordsAndOffsets</code>
-     */
-    public List<E> getRecordAndOffsets() {
-        return Collections.unmodifiableList(recordAndOffsets);
-    }
-
-    /**
-     * @return the name of reference sequence
-     */
-    public String getSequenceName() {
-        return referenceSequence.getSequenceName();
-    }
-
-    @Override
-    public String toString() {
-        return referenceSequence.getSequenceName() + ":" + position;
-    }
-
-    /**
-     * @return the length of reference sequence
-     */
-    public int getSequenceLength() {
-        return referenceSequence.getSequenceLength();
-    }
-
-    /** 
-     * @return the number of records overlapping the position
-     */
-    public int size() { 
-        return this.recordAndOffsets.size(); 
-    }
-
-    /**
-     * @return <code>true</code> if RecordAndOffset list is empty;
-     */
-    public boolean isEmpty() {
-        return getRecordAndOffsets().isEmpty();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractLocusIterator.java b/src/main/java/htsjdk/samtools/util/AbstractLocusIterator.java
deleted file mode 100644
index 6ff8e83..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractLocusIterator.java
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.filter.AggregateFilter;
-import htsjdk.samtools.filter.DuplicateReadFilter;
-import htsjdk.samtools.filter.FilteringSamIterator;
-import htsjdk.samtools.filter.SamRecordFilter;
-import htsjdk.samtools.filter.SecondaryOrSupplementaryFilter;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Iterator that traverses a SAM File, accumulating information on a per-locus basis.
- * Optionally takes a target interval list, in which case the loci returned are the ones covered by
- * the interval list.  If no target interval list, whatever loci are covered by the input reads are returned.
- * By default duplicate reads and non-primary alignments are filtered out.  Filtering may be changed
- * via setSamFilters().
- *
- * @author Darina_Nikolaeva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-
-public abstract class AbstractLocusIterator<T extends AbstractRecordAndOffset, K extends AbstractLocusInfo<T>> implements Iterable<K>, CloseableIterator<K> {
-
-    static final Log LOG = Log.getInstance(AbstractLocusIterator.class);
-
-    private final SamReader samReader;
-    final private ReferenceSequenceMask referenceSequenceMask;
-    private PeekableIterator<SAMRecord> samIterator;
-    private List<SamRecordFilter> samFilters = Arrays.asList(new SecondaryOrSupplementaryFilter(),
-            new DuplicateReadFilter());
-    final List<Interval> intervals;
-
-    /**
-     * If true, do indexed lookup to improve performance.  Not relevant if intervalList == null.
-     * It is no longer the case the useIndex==true can make performance worse.  It should always perform at least
-     * as well as useIndex==false, and generally will be much faster.
-     */
-    private final boolean useIndex;
-
-    /**
-     * LocusInfos on this list are ready to be returned by iterator.  All reads that overlap
-     * the locus have been accumulated before the AbstractLocusInfo is moved into this list.
-     */
-    private final ArrayList<K> complete = new ArrayList<>(100);
-
-    /**
-     * LocusInfos for which accumulation is in progress.  When {@link #accumulateSamRecord(SAMRecord)} is called
-     * the state of this list is guaranteed to be either:
-     * a) Empty, or
-     * b) That the element at index 0 corresponds to the same genomic locus as the first aligned base
-     * in the read being accumulated
-     * <p>
-     * Before each new read is accumulated the accumulator is examined and:
-     * i) any LocusInfos at positions earlier than the read start are moved to {@link #complete}
-     * ii) any uncovered positions between the last AbstractLocusInfo and the first aligned base of the new read
-     * have LocusInfos created and added to {@link #complete} if we are emitting uncovered loci
-     */
-    final ArrayList<K> accumulator = new ArrayList<>(100);
-
-    private int qualityScoreCutoff = Integer.MIN_VALUE;
-    private int mappingQualityScoreCutoff = Integer.MIN_VALUE;
-    private boolean includeNonPfReads = true;
-
-    /**
-     * If true, emit a AbstractLocusInfo for every locus in the target map, or if no target map,
-     * emit a AbstractLocusInfo for every locus in the reference sequence.
-     * If false, emit a AbstractLocusInfo only if a locus has coverage.
-     */
-    private boolean emitUncoveredLoci = true;
-
-    /**
-     * If set, this will cap the number of reads we accumulate for any given position.
-     * Note that if we hit the maximum threshold at the first position in the accumulation queue,
-     * then we throw further reads overlapping that position completely away (including for subsequent positions).
-     * This is a useful feature if one wants to minimize the memory footprint in files with a few massively large pileups,
-     * but it must be pointed out that it could cause major bias because of the non-random nature with which the cap is
-     * applied (the first maxReadsToAccumulatePerLocus reads are kept and all subsequent ones are dropped).
-     */
-    private int maxReadsToAccumulatePerLocus = Integer.MAX_VALUE;
-
-    /**
-     * Set to true when we have enforced the accumulation limit for the first time
-     */
-    private boolean enforcedAccumulationLimit = false;
-
-    /**
-     * If true, include indels in the LocusInfo
-     */
-    protected boolean includeIndels = false;
-
-    /**
-     * When there is a target mask, these members remember the last locus for which a AbstractLocusInfo has been
-     * returned, so that any uncovered locus in the target mask can be covered by a 0-coverage AbstractLocusInfo
-     */
-    private int lastReferenceSequence = 0;
-
-    /**
-     * Last processed locus position in the reference
-     */
-    private int lastPosition = 0;
-
-    /**
-     * Set to true when past all aligned reads in input SAM file
-     */
-    private boolean finishedAlignedReads = false;
-
-    private final LocusComparator<Locus> locusComparator = new LocusComparator<>();
-
-    /**
-     * Last processed interval, relevant only if list of intervals is defined.
-     */
-    private int lastInterval = 0;
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments
-     *
-     * @param samReader    must be coordinate sorted
-     * @param intervalList Either the list of desired intervals, or null.  Note that if an intervalList is
-     *                     passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
-     * @param useIndex     If true, do indexed lookup to improve performance.  Not relevant if intervalList == null.
-     *                     It is no longer the case the useIndex==true can make performance worse.  It should always perform at least
-     *                     as well as useIndex==false, and generally will be much faster.
-     */
-
-    public AbstractLocusIterator(final SamReader samReader, final IntervalList intervalList, final boolean useIndex) {
-        final String className = this.getClass().getSimpleName();
-        if (samReader.getFileHeader().getSortOrder() == null || samReader.getFileHeader().getSortOrder() == SAMFileHeader.SortOrder.unsorted) {
-
-            LOG.warn(className + " constructed with samReader that has SortOrder == unsorted.  ", "" +
-                    "Assuming SAM is coordinate sorted, but exceptions may occur if it is not.");
-        } else if (samReader.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            throw new SAMException(className + " cannot operate on a SAM file that is not coordinate sorted.");
-        }
-        this.samReader = samReader;
-        this.useIndex = useIndex;
-        if (intervalList != null) {
-            intervals = intervalList.uniqued().getIntervals();
-            this.referenceSequenceMask = new IntervalListReferenceSequenceMask(intervalList);
-        } else {
-            intervals = null;
-            this.referenceSequenceMask = new WholeGenomeReferenceSequenceMask(samReader.getFileHeader());
-        }
-    }
-
-    /**
-     * @return iterator over all/all covered locus position in reference according to <code>emitUncoveredLoci</code>
-     * value.
-     */
-    public Iterator<K> iterator() {
-        if (samIterator != null) {
-            throw new IllegalStateException("Cannot call iterator() more than once on " + this.getClass().getSimpleName());
-        }
-        CloseableIterator<SAMRecord> tempIterator;
-        if (intervals != null) {
-            tempIterator = new SamRecordIntervalIteratorFactory().makeSamRecordIntervalIterator(samReader, intervals, useIndex);
-        } else {
-            tempIterator = samReader.iterator();
-        }
-        if (samFilters != null) {
-            tempIterator = new FilteringSamIterator(tempIterator, new AggregateFilter(samFilters));
-        }
-        samIterator = new PeekableIterator<>(tempIterator);
-        return this;
-    }
-
-    /**
-     * Closes inner <code>SamIterator</>.
-     */
-    public void close() {
-        this.samIterator.close();
-    }
-
-    private boolean samHasMore() {
-        return !finishedAlignedReads && (samIterator.peek() != null);
-    }
-
-    /**
-     * Returns true if there are more AbstractLocusInfo<T> objects that can be returned, due to any of the following reasons:
-     * 1) there are more aligned reads in the SAM file
-     * 2) there are AbstractLocusInfo<T>s in some stage of accumulation
-     * 3) there are loci in the target mask that have yet to be accumulated (even if there are no reads covering them)
-     */
-    public boolean hasNext() {
-        if (this.samIterator == null) {
-            iterator();
-        }
-
-        while (complete.isEmpty() && ((!accumulator.isEmpty()) || samHasMore() || hasRemainingMaskBases())) {
-            final K locusInfo = next();
-            if (locusInfo != null) {
-                complete.add(0, locusInfo);
-            }
-        }
-        return !complete.isEmpty();
-    }
-
-    /**
-     * @return true if there are more bases at which the locus iterator must emit AbstractLocusInfo<T>s because
-     * there are loci beyond the last emitted loci which are in the set of loci to be emitted and
-     * the iterator is setup to emit uncovered loci - so we can guarantee we'll emit those loci.
-     */
-    private boolean hasRemainingMaskBases() {
-        // if there are more sequences in the mask, by definition some of them must have
-        // marked bases otherwise if we're in the last sequence, but we're not at the last marked position,
-        // there is also more in the mask
-        if (!emitUncoveredLoci) {
-            // If not emitting uncovered loci, this check is irrelevant
-            return false;
-        }
-        return (lastReferenceSequence < referenceSequenceMask.getMaxSequenceIndex() ||
-                (lastReferenceSequence == referenceSequenceMask.getMaxSequenceIndex() &&
-                        lastPosition < referenceSequenceMask.nextPosition(lastReferenceSequence, lastPosition)));
-    }
-
-    /**
-     * hasNext() has been fixed so that if it returns true, next() is now guaranteed not to return null.
-     *
-     * @return information about next locus position in reference sequence
-     */
-    public K next() {
-        // if we don't have any completed entries to return, try and make some!
-        while (complete.isEmpty() && samHasMore()) {
-            final SAMRecord rec = samIterator.peek();
-
-            // There might be unmapped reads mixed in with the mapped ones, but when a read
-            // is encountered with no reference index it means that all the mapped reads have been seen.
-            if (rec.getReferenceIndex() == -1) {
-                this.finishedAlignedReads = true;
-                continue;
-
-            }
-            // Skip over an unaligned read that has been forced to be sorted with the aligned reads
-            if (rec.getReadUnmappedFlag()
-                    || rec.getMappingQuality() < this.mappingQualityScoreCutoff
-                    || (!this.includeNonPfReads && rec.getReadFailsVendorQualityCheckFlag())) {
-                samIterator.next();
-                continue;
-            }
-
-            int start = rec.getAlignmentStart();
-            // only if we are including indels and the record does not start in the first base of the reference
-            // the stop locus to populate the queue is not the same if the record starts with an insertion
-            if (includeIndels && start != 1 && startWithInsertion(rec.getCigar())) {
-                // the start to populate is one less
-                start--;
-            }
-            final Locus alignmentStart = new LocusImpl(rec.getReferenceIndex(), start);
-            // emit everything that is before the start of the current read, because we know no more
-            // coverage will be accumulated for those loci.
-            while (!accumulator.isEmpty() && locusComparator.compare(accumulator.get(0), alignmentStart) < 0) {
-                final K first = accumulator.get(0);
-                populateCompleteQueue(alignmentStart);
-                if (!complete.isEmpty()) {
-                    return complete.remove(0);
-                }
-                if (!accumulator.isEmpty() && first == accumulator.get(0)) {
-                    throw new SAMException("Stuck in infinite loop");
-                }
-            }
-
-            // at this point, either the accumulator list is empty or the head should
-            // be the same position as the first base of the read (or insertion if first)
-            if (!accumulator.isEmpty()) {
-                if (accumulator.get(0).getSequenceIndex() != rec.getReferenceIndex() ||
-                        accumulator.get(0).getPosition() != start) {
-                    throw new IllegalStateException("accumulator should be empty or aligned with current SAMRecord");
-                }
-            }
-
-            // Store the loci for the read in the accumulator
-            if (!surpassedAccumulationThreshold()) {
-                accumulateSamRecord(rec);
-                // Store the indels if requested
-                if (includeIndels) {
-                    accumulateIndels(rec);
-                }
-            }
-            samIterator.next();
-        }
-
-        final Locus endLocus = new LocusImpl(Integer.MAX_VALUE, Integer.MAX_VALUE);
-        // if we have nothing to return to the user, and we're at the end of the SAM iterator,
-        // push everything into the complete queue
-        if (complete.isEmpty() && !samHasMore()) {
-            while (!accumulator.isEmpty()) {
-                populateCompleteQueue(endLocus);
-                if (!complete.isEmpty()) {
-                    return complete.remove(0);
-                }
-            }
-        }
-
-        // if there are completed entries, return those
-        if (!complete.isEmpty()) {
-            return complete.remove(0);
-        } else if (emitUncoveredLoci) {
-            final Locus afterLastMaskPositionLocus = new LocusImpl(referenceSequenceMask.getMaxSequenceIndex(),
-                    referenceSequenceMask.getMaxPosition() + 1);
-            // In this case... we're past the last read from SAM so see if we can
-            // fill out any more (zero coverage) entries from the mask
-            return createNextUncoveredLocusInfo(afterLastMaskPositionLocus);
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     * @return true if we have surpassed the maximum accumulation threshold for the first locus in the accumulator, false otherwise
-     */
-
-    private boolean surpassedAccumulationThreshold() {
-        final boolean surpassesThreshold = !accumulator.isEmpty() && accumulator.get(0).getRecordAndOffsets().size() >= maxReadsToAccumulatePerLocus;
-        if (surpassesThreshold && !enforcedAccumulationLimit) {
-            LOG.warn("We have encountered greater than " + maxReadsToAccumulatePerLocus + " reads at position " + accumulator.get(0).toString() + " and will ignore the remaining reads at this position.  Note that further warnings will be suppressed.");
-            enforcedAccumulationLimit = true;
-        }
-        return surpassesThreshold;
-    }
-
-    /**
-     * Capture the loci covered by the given SAMRecord in the LocusInfos in the accumulator,
-     * creating new LocusInfos as needed.
-     *
-     * @param rec record to add to accumulator
-     */
-    abstract void accumulateSamRecord(final SAMRecord rec);
-
-
-    /**
-     * Requires that the accumulator for the record is previously fill with
-     * {@link #accumulateSamRecord(htsjdk.samtools.SAMRecord)}.
-     * Include in the LocusInfo the indels; the quality threshold does not affect insertions/deletions
-     */
-    abstract void accumulateIndels(final SAMRecord rec);
-
-    /**
-     * @param rec         aligned SamRecord
-     * @param readOffset  offset from start of read
-     * @param length      length of aligned block
-     * @param refPosition position in the reference sequence
-     * @return RecordAndOffset
-     */
-    abstract T createRecordAndOffset(SAMRecord rec, int readOffset, int length, int refPosition);
-
-    /**
-     * Create the next relevant zero-coverage AbstractLocusInfo<T>
-     *
-     * @param stopBeforeLocus don't go up to this sequence and position
-     * @return a zero-coverage AbstractLocusInfo<T>, or null if there is none before the stopBefore locus
-     */
-    private K createNextUncoveredLocusInfo(final Locus stopBeforeLocus) {
-        while (lastReferenceSequence <= stopBeforeLocus.getSequenceIndex() &&
-                lastReferenceSequence <= referenceSequenceMask.getMaxSequenceIndex()) {
-
-            if (lastReferenceSequence == stopBeforeLocus.getSequenceIndex() &&
-                    lastPosition + 1 >= stopBeforeLocus.getPosition()) {
-                return null;
-            }
-
-            final int nextbit = referenceSequenceMask.nextPosition(lastReferenceSequence, lastPosition);
-
-            // try the next reference sequence
-            if (nextbit == -1) {
-                // No more in this reference sequence
-                if (lastReferenceSequence == stopBeforeLocus.getSequenceIndex()) {
-                    lastPosition = stopBeforeLocus.getPosition();
-                    return null;
-                }
-                lastReferenceSequence++;
-                lastPosition = 0;
-            } else if (lastReferenceSequence < stopBeforeLocus.getSequenceIndex() || nextbit < stopBeforeLocus.getPosition()) {
-                lastPosition = nextbit;
-                return createLocusInfo(getReferenceSequence(lastReferenceSequence), lastPosition);
-            } else if (nextbit >= stopBeforeLocus.getPosition()) {
-                return null;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * @param referenceSequence processed reference sequence
-     * @param lastPosition      last processed reference locus position
-     * @return <code>AbstractLocusInfo<T></code> for the lastPosition
-     */
-    abstract K createLocusInfo(SAMSequenceRecord referenceSequence, int lastPosition);
-
-    /**
-     * Pop the first entry from the AbstractLocusInfo<T> accumulator into the complete queue.  In addition,
-     * check the ReferenceSequenceMask and if there are intervening mask positions between the last popped base and the one
-     * about to be popped, put those on the complete queue as well.
-     * Note that a single call to this method may not empty the accumulator completely, or even
-     * empty it at all, because it may just put a zero-coverage AbstractLocusInfo<T> into the complete queue.
-     *
-     * @param stopBeforeLocus don't go up to this sequence and position
-     */
-    private void populateCompleteQueue(final Locus stopBeforeLocus) {
-        // Because of gapped alignments, it is possible to create LocusInfo's with no reads associated with them.
-        // Skip over these if not including indels
-        while (!accumulator.isEmpty() && accumulator.get(0).isEmpty() &&
-                locusComparator.compare(accumulator.get(0), stopBeforeLocus) < 0) {
-            accumulator.remove(0);
-        }
-        if (accumulator.isEmpty()) {
-            return;
-        }
-        final K locusInfo = accumulator.get(0);
-        if (locusComparator.compare(stopBeforeLocus, locusInfo) <= 0) {
-            return;
-        }
-
-        // If necessary, emit a zero-coverage LocusInfo
-        if (emitUncoveredLoci) {
-            final K zeroCoverage = createNextUncoveredLocusInfo(locusInfo);
-            if (zeroCoverage != null) {
-                complete.add(zeroCoverage);
-                return;
-            }
-        }
-
-        // At this point we know we're going to process the LocusInfo, so remove it from the accumulator.
-        accumulator.remove(0);
-
-        // fill in any gaps based on our genome mask
-        final int sequenceIndex = locusInfo.getSequenceIndex();
-
-
-        // only add to the complete queue if it's in the mask (or we have no mask!)
-        if (referenceSequenceMask.get(locusInfo.getSequenceIndex(), locusInfo.getPosition())) {
-            complete.add(locusInfo);
-        }
-
-        lastReferenceSequence = sequenceIndex;
-        lastPosition = locusInfo.getPosition();
-    }
-
-    protected SAMSequenceRecord getReferenceSequence(final int referenceSequenceIndex) {
-        return samReader.getFileHeader().getSequence(referenceSequenceIndex);
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException("Can not remove records from a SAM file via an iterator!");
-    }
-
-    /**
-     * Check if cigar start with an insertion, ignoring other operators that do not consume references bases
-     *
-     * @param cigar the cigar
-     * @return <code>true</code> if the first operator to consume reference bases or be an insertion, is an insertion; <code>false</code> otherwise
-     */
-    protected static boolean startWithInsertion(final Cigar cigar) {
-        for (final CigarElement element : cigar.getCigarElements()) {
-            if (element.getOperator() == CigarOperator.I) return true;
-            if (!element.getOperator().consumesReferenceBases()) continue;
-            break;
-        }
-        return false;
-    }
-
-    // --------------------------------------------------------------------------------------------
-    // Helper methods below this point...
-    // --------------------------------------------------------------------------------------------
-
-    /**
-     * Controls which, if any, SAMRecords are filtered.  By default duplicate reads and non-primary alignments
-     * are filtered out.  The list of filters passed here replaces any existing filters.
-     *
-     * @param samFilters list of filters, or null if no filtering is desired.
-     */
-    public void setSamFilters(final List<SamRecordFilter> samFilters) {
-        this.samFilters = samFilters;
-    }
-
-    public int getQualityScoreCutoff() {
-        return qualityScoreCutoff;
-    }
-
-    public void setQualityScoreCutoff(final int qualityScoreCutoff) {
-        this.qualityScoreCutoff = qualityScoreCutoff;
-    }
-
-    public int getMappingQualityScoreCutoff() {
-        return mappingQualityScoreCutoff;
-    }
-
-    public void setMappingQualityScoreCutoff(final int mappingQualityScoreCutoff) {
-        this.mappingQualityScoreCutoff = mappingQualityScoreCutoff;
-    }
-
-    public boolean isIncludeNonPfReads() {
-        return includeNonPfReads;
-    }
-
-    public void setIncludeNonPfReads(final boolean includeNonPfReads) {
-        this.includeNonPfReads = includeNonPfReads;
-    }
-
-    public boolean isEmitUncoveredLoci() {
-        return emitUncoveredLoci;
-    }
-
-    public void setEmitUncoveredLoci(final boolean emitUncoveredLoci) {
-        this.emitUncoveredLoci = emitUncoveredLoci;
-    }
-
-    public int getMaxReadsToAccumulatePerLocus() {
-        return maxReadsToAccumulatePerLocus;
-    }
-
-    /**
-     * If set, this will cap the number of reads we accumulate for any given position.
-     * As is pointed out above, setting this could cause major bias because of the non-random nature with which the
-     * cap is applied (the first maxReadsToAccumulatePerLocus reads are kept and all subsequent ones are dropped).
-     */
-    public void setMaxReadsToAccumulatePerLocus(final int maxReadsToAccumulatePerLocus) {
-        this.maxReadsToAccumulatePerLocus = maxReadsToAccumulatePerLocus;
-    }
-
-    protected List<Interval> getIntervals() {
-        return intervals;
-    }
-
-    protected Interval getCurrentInterval() {
-        if (intervals == null) return null;
-        return intervals.get(lastInterval);
-    }
-
-    public boolean isIncludeIndels() {
-        return includeIndels;
-    }
-
-    public void setIncludeIndels(final boolean includeIndels) {
-        this.includeIndels = includeIndels;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractProgressLogger.java b/src/main/java/htsjdk/samtools/util/AbstractProgressLogger.java
deleted file mode 100644
index de1f694..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractProgressLogger.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecord;
-
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-
-/**
- * Abstract implementation of a Little progress logging class to facilitate consistent output of useful information when progressing
- * through a stream of SAM records.
- *
- * Concrete subclasses must provide the logger
- */
-abstract public class AbstractProgressLogger implements ProgressLoggerInterface {
-    private final int n;
-    private final String verb;
-    private final String noun;
-    private final long startTime = System.currentTimeMillis();
-    private final NumberFormat fmt = new DecimalFormat("#,###");
-    private final NumberFormat timeFmt = new DecimalFormat("00");
-    private long processed = 0;
-    // Set to -1 until the first record is added
-    private long lastStartTime = -1;
-
-    /**
-     * Construct an AbstractProgressLogger.
-     *
-     * This must be called by any subclasses
-     *
-     * @param n the frequency with which to output (i.e. every N records)
-     * @param verb the verb to log, e.g. "Processed, Read, Written".
-     * @param noun the noun to use when logging, e.g. "Records, Variants, Loci"
-     */
-    protected AbstractProgressLogger(final String noun, final String verb, final int n) {
-        this.noun = noun;
-        this.verb = verb;
-        this.n = n;
-    }
-
-    /**
-     * Log a message to whatever logger is being used
-     *
-     * @param message a message to be logged by the logger (recommended output level is INFO or the equivalent)
-     */
-    abstract protected void log(String ... message);
-
-    @Override
-    public synchronized boolean record(final String chrom, final int pos) {
-	    if (this.lastStartTime == -1) this.lastStartTime = System.currentTimeMillis();
-	    if (++this.processed % this.n == 0) {
-            final long now = System.currentTimeMillis();
-            final long lastPeriodSeconds = (now - this.lastStartTime) / 1000;
-            this.lastStartTime = now;
-
-            final long seconds = (System.currentTimeMillis() - startTime) / 1000;
-            final String elapsed   = formatElapseTime(seconds);
-            final String period    = pad(fmt.format(lastPeriodSeconds), 4);
-            final String processed = pad(fmt.format(this.processed), 13);
-
-            final String readInfo;
-            if (chrom == null) readInfo = "*/*";
-            else readInfo = chrom + ":" + fmt.format(pos);
-
-            log(this.verb, " ", processed, " " + noun + ".  Elapsed time: ", elapsed, "s.  Time for last ", fmt.format(this.n),
-                    ": ", period, "s.  Last read position: ", readInfo);
-            return true;
-        }
-        else {
-            return false;
-        }
-    }
-
-    /**
-     * Records that a given record has been processed and triggers logging if necessary.
-     * @return boolean true if logging was triggered, false otherwise
-     */
-    @Override
-    public synchronized boolean record(final SAMRecord rec) {
-        if (SAMRecord.NO_ALIGNMENT_REFERENCE_NAME.equals(rec.getReferenceName())) {
-            return record(null, 0);
-        }
-        else {
-            return record(rec.getReferenceName(), rec.getAlignmentStart());
-        }
-    }
-
-    /** Records multiple SAMRecords and triggers logging if necessary. */
-    @Override
-    public boolean record(final SAMRecord... recs) {
-        boolean triggered = false;
-        for (final SAMRecord rec : recs) triggered = record(rec) || triggered;
-        return triggered;
-    }
-
-    /** Returns the count of records processed. */
-    public synchronized long getCount() { return this.processed; }
-
-    /** Returns the number of seconds since progress tracking began. */
-    public long getElapsedSeconds() { return (System.currentTimeMillis() - this.startTime) / 1000; }
-
-    /** Left pads a string until it is at least the given length. */
-    private String pad (String in, final int length) {
-        while (in.length() < length) {
-            in = " " + in;
-        }
-
-        return in;
-    }
-
-    /** Formats a number of seconds into hours:minutes:seconds. */
-    private String formatElapseTime(final long seconds) {
-        final long s = seconds % 60;
-        final long allMinutes = seconds / 60;
-        final long m = allMinutes % 60;
-        final long h = allMinutes / 60;
-
-        return timeFmt.format(h) + ":" + timeFmt.format(m) + ":" + timeFmt.format(s);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AbstractRecordAndOffset.java b/src/main/java/htsjdk/samtools/util/AbstractRecordAndOffset.java
deleted file mode 100644
index 28b9d34..0000000
--- a/src/main/java/htsjdk/samtools/util/AbstractRecordAndOffset.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Holds a SAMRecord plus the zero-based offset into that SAMRecord's bases and quality scores that corresponds
- * to the base and quality at the genomic position described the containing AbstractLocusInfo. One object represents
- * one base for <code>SamLocusIterator.RecordAndOffset</code> implementation or one alignment block of
- * <code>SAMRecord</code> for <code>TypedRecordAndOffset</code> implementation.
- * 
- * @author Darina_Nikolaeva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-public class AbstractRecordAndOffset {
-
-    /**
-     * A SAMRecord aligned to reference position
-     */
-    protected final SAMRecord record;
-    /**
-     * Zero-based offset in the read corresponding to the current position in AbstractLocusInfo
-     */
-    protected final int offset;
-
-    /**
-     * @param record inner SAMRecord
-     * @param offset from the start of the read
-     * @param length of alignment block
-     * @param refPos corresponding to read offset reference position
-     */
-    public AbstractRecordAndOffset(final SAMRecord record, final int offset, int length, int refPos) {
-        this(record, offset);
-    }
-
-    /**
-     * @param record inner SAMRecord
-     * @param offset from the start of the read
-     */
-    public AbstractRecordAndOffset(final SAMRecord record, final int offset) {
-        this.offset = offset;
-        this.record = record;
-    }
-
-    /**
-     * @return offset of aligned read base from the start of the read.
-     */
-    public int getOffset() {
-        return offset;
-    }
-
-    /**
-     * @return inner <code>SAMRecord</code> object.
-     */
-    public SAMRecord getRecord() {
-        return record;
-    }
-
-    /**
-     * @return the read base according to <code>offset</code>.
-     */
-    public byte getReadBase() {
-        return record.getReadBases()[offset];
-    }
-
-    /**
-     * @return the length of alignment block represented by the object.
-     */
-    public int getLength() {
-        return 1;
-    }
-
-    /**
-     * @return the position in reference sequence, to which the start of alignment block is aligned.
-     */
-    public int getRefPos() {
-        return -1;
-    }
-
-    /**
-     * @return read name of inner SAMRecord.
-     */
-    public String getReadName() {
-        return record.getReadName();
-    }
-
-    /**
-     * @return array of base qualities of inner SAMRecord.
-     */
-    public byte[] getBaseQualities() {
-        return record.getBaseQualities();
-    }
-    
-    /**
-     * @return the base quality according to <code>offset</code>.
-     */
-    public byte getBaseQuality() {
-        return record.getBaseQualities()[offset];
-    }
-
-    protected void validateOffset(int offset, final byte[] array) {
-        if (offset < 0 || offset >= array.length) {
-            throw new IllegalArgumentException("The requested position is not covered by this " + this.getClass().getSimpleName() +
-                    " object.");
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AsciiWriter.java b/src/main/java/htsjdk/samtools/util/AsciiWriter.java
deleted file mode 100644
index 00c6f7f..0000000
--- a/src/main/java/htsjdk/samtools/util/AsciiWriter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Defaults;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-
-/**
- * Fast (I hope) buffered Writer that converts char to byte merely by casting, rather than charset conversion.
- */
-public class AsciiWriter extends Writer {
-
-    private final OutputStream os;
-    // Buffer size has not been tuned.
-    private final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
-    private int numBytes;
-
-    /**
-     * @param os need not be buffered as this class buffers
-     */
-    public AsciiWriter(final OutputStream os) {
-        this.os = os;
-        numBytes = 0;
-    }
-
-    /**
-     * flushes and closes underlying OutputStream.
-     */
-    public void close() throws IOException {
-        flush();
-        os.close();
-    }
-
-    /**
-     * flushes underlying OutputStream
-     */
-    public void flush() throws IOException {
-        os.write(buffer, 0, numBytes);
-        numBytes = 0;
-        os.flush();
-    }
-
-    /**
-     * All other Writer methods vector through this, so this is the only one that must be overridden.
-     */
-    public void write(final char[] chars, int offset, int length) throws IOException {
-        while (length > 0) {
-            final int charsToConvert = Math.min(length, buffer.length - numBytes);
-            StringUtil.charsToBytes(chars, offset, charsToConvert, buffer, numBytes);
-            numBytes += charsToConvert;
-            offset += charsToConvert;
-            length -= charsToConvert;
-            if (numBytes == buffer.length) {
-                os.write(buffer, 0, numBytes);
-                numBytes = 0;
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/AsyncBufferedIterator.java b/src/main/java/htsjdk/samtools/util/AsyncBufferedIterator.java
deleted file mode 100644
index bf78ecb..0000000
--- a/src/main/java/htsjdk/samtools/util/AsyncBufferedIterator.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Daniel Cameron
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Iterator that uses a dedicated background thread to perform read-ahead to improve
- * throughput at the expense of increased latency. This iterator will block
- * until the background thread has read a full buffer of records.
- * 
- * Note that this implementation is not synchronized. If multiple threads
- * access an instance concurrently, it must be synchronized externally. 
- * 
- * @author Daniel Cameron
- *
- */
-public class AsyncBufferedIterator<T> implements CloseableIterator<T> {
-    private static final Log log = Log.getInstance(AsyncBufferedIterator.class);
-    private static final AtomicInteger threadsCreated = new AtomicInteger(0);
-    private final int bufferSize;
-    /**
-     * A dedicated background thread is required since these iterators can be chained
-     * thus able to block on each other. Usage of a thread pool would result in
-     * a deadlock due to task dependencies.
-     */
-    private Thread backgroundThread;
-    private final Iterator<T> underlyingIterator;
-    private final BlockingQueue<IteratorBuffer<T>> buffers;
-    private IteratorBuffer<T> currentBlock = new IteratorBuffer<>(Collections.emptyList());
-
-    /**
-     * Creates a new iterator that traverses the given iterator on a background
-     * thread
-     * 
-     * @param iterator iterator to traverse
-     * @param bufferSize size of read-ahead buffer. A larger size will increase both throughput and latency.
-     * Double buffering is used so the maximum number of records on which read-ahead is performed is twice this.
-     */
-    public AsyncBufferedIterator(final Iterator<T> iterator, final int bufferSize) {
-        this(iterator, bufferSize, 1, null);
-    }
-    
-    /**
-     * Creates a new iterator that traverses the given iterator on a background
-     * thread
-     * 
-     * @param iterator iterator to traverse
-     * @param bufferSize size of each read-ahead buffer. A larger size will increase both throughput and latency.
-     * @param bufferCount number of read-ahead buffers
-     */
-    public AsyncBufferedIterator(final Iterator<T> iterator, final int bufferSize, final int bufferCount) {
-        this(iterator, bufferSize, bufferCount, null);
-    }
-
-    /**
-     * Creates a new iterator that traverses the given iterator on a background
-     * thread
-     * 
-     * @param iterator iterator to traverse
-     * @param bufferSize size of each read-ahead buffer. A larger size will increase both throughput and latency.
-     * @param bufferCount number of read-ahead buffers
-     * @param threadName background thread name. A name will be automatically generated if this parameter is null.
-     */
-    public AsyncBufferedIterator(final Iterator<T> iterator, final int bufferSize, final int bufferCount, final String threadName) {
-        if (iterator == null) throw new IllegalArgumentException("iterator cannot be null");
-        if (bufferCount <= 0) throw new IllegalArgumentException("Must use at least 1 buffer.");
-        if (bufferSize <= 0) throw new IllegalArgumentException("Buffer size must be at least 1 record.");
-        this.underlyingIterator = iterator;
-        this.buffers = new ArrayBlockingQueue<>(bufferCount);
-        this.bufferSize = bufferSize;
-        int threadNumber = threadsCreated.incrementAndGet();
-        this.backgroundThread = new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    backgroundRun();
-                }
-            }, threadName != null ? threadName : getThreadNamePrefix() + threadNumber);
-        this.backgroundThread.setDaemon(true);
-        log.debug("Starting thread " + this.backgroundThread.getName());
-        this.backgroundThread.start();
-    }
-
-    protected String getThreadNamePrefix() {
-        return AsyncBufferedIterator.class.getSimpleName();
-    }
-
-    @Override
-    public void close() {
-        if (backgroundThread != null) {
-            try {
-                backgroundThread.interrupt();
-                buffers.clear();
-                backgroundThread.join();
-            } catch (InterruptedException ie) {
-                throw new RuntimeException("Interrupted waiting for background thread to complete", ie);
-            } finally {
-                CloserUtil.close(underlyingIterator);
-                backgroundThread = null;
-                currentBlock = null;
-            }
-        }
-    }
-    
-    private void ensureHasNext() {
-        if (!currentBlock.hasNext()) {
-            // Rethrow any exceptions raised on the background thread
-            // at the point the exception would have been encountered
-            // if we had performed synchronous iteration
-            raiseBackgroundThreadException();
-            if (!currentBlock.isEndOfStream()) {
-                try {
-                    // Load the next block
-                    // All exceptions on the background thread are swallowed (except InterruptedException)
-                    // so there's no risk of blocking forever except when the background thread is
-                    // interrupted as we aren't. This does not happen during normal operation as
-                    // interrupting the background thread should only happen during the close() method.
-                    currentBlock = buffers.take();
-                } catch (InterruptedException e) {
-                    throw new RuntimeException("Error reading from background thread", e);
-                }
-            }
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        if (backgroundThread == null) {
-            throw new IllegalStateException("iterator has been closed");
-        }
-        ensureHasNext();
-        return currentBlock.hasNext();
-    }
-
-    /**
-     * Raises any exception encountered when processing records on
-     * the background thread back to the foreground caller 
-     * @throws Error
-     */
-    private void raiseBackgroundThreadException() throws Error {
-        Throwable t = currentBlock.getException();
-        if (t != null) {
-            if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else {
-                throw new RuntimeException(t);
-            }
-        }
-    }
-
-    @Override
-    public T next() {
-        if (hasNext()) {
-            return currentBlock.next();
-        }
-        throw new NoSuchElementException("next");
-    }
-
-    /**
-     * Performs 1 buffer worth of read-ahead on the underlying iterator
-     * (background thread method) 
-     */
-    private IteratorBuffer<T> readAhead() {
-        List<T> readAhead = null;
-        try {
-            if (!underlyingIterator.hasNext()) return new IteratorBuffer<>();
-            readAhead = new ArrayList<>(bufferSize);
-            for (int i = 0; i < bufferSize && underlyingIterator.hasNext(); i++) {
-                if (Thread.currentThread().isInterrupted()) {
-                    // eager abort if we've been told to stop
-                    return new IteratorBuffer<>(readAhead, new InterruptedException());
-                }
-                readAhead.add(underlyingIterator.next());
-            }
-            return new IteratorBuffer<>(readAhead);
-        } catch (Throwable t) {
-            // Catch absolutely everything so we can try to raise it on the foreground thread
-            return new IteratorBuffer<>(readAhead, t);
-        }
-    }
-    /**
-     * Background thread run loop
-     * @throws InterruptedException 
-     */
-    private void backgroundRun() {
-        try {
-            IteratorBuffer<T> block;
-            do {
-                block = readAhead();
-                if (block.getException() instanceof InterruptedException) {
-                    // stop thread immediately if we've been told to stop
-                    return;
-                }
-                buffers.put(block);
-            } while (!block.isEndOfStream());
-        } catch (InterruptedException e) {
-            // stop thread
-        }
-    }
-    /**
-     * Block of records from the underlying iterator 
-     */
-    private static class IteratorBuffer<U> implements Iterator<U> {
-        private final Throwable exception;
-        private final Iterator<U> it;
-        public IteratorBuffer(Iterable<U> it) {
-            this.it = it != null ? it.iterator() : null;;
-            this.exception = null;
-        }
-
-        /**
-         * Record block with exception thrown when attempting to retrieve the next record
-         * @param it records successfully iterated over
-         * @param exception exception thrown when attempting to iterate over the next record
-         */
-        public IteratorBuffer(Iterable<U> it, Throwable exception) {
-            this.it = it != null ? it.iterator() : null;
-            this.exception = exception;
-        }
-        
-        /**
-         * Record block indicating end of stream 
-         */
-        public IteratorBuffer() {
-            this.it = null;
-            this.exception = null;
-        }
-
-        @Override
-        public boolean hasNext() {
-            return it != null && it.hasNext();
-        }
-
-        @Override
-        public U next() {
-            return it.next();
-        }
-        
-        public boolean isEndOfStream() {
-            return it == null;
-        }
-        
-        /**
-         * Exception thrown when attempting to retrieve records from the underlying stream
-         * @return exception thrown on background thread, null if no exception occurred
-         */
-        public Throwable getException() {
-            return exception;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/BinaryCodec.java b/src/main/java/htsjdk/samtools/util/BinaryCodec.java
deleted file mode 100644
index 8933ee3..0000000
--- a/src/main/java/htsjdk/samtools/util/BinaryCodec.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.SyncFailedException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Encapsulates file representation of various primitive data types.  Forces little-endian disk representation.
- * Note that this class is currently not very efficient.  There are plans to increase the size of the ByteBuffer,
- * and move data between the ByteBuffer and the underlying input or output stream in larger chunks.
- *
- * All the read methods throw RuntimeEOFException if the input stream is exhausted before the required number
- * of bytes are read.
- *
- * @author Dave Tefft
- */
-public class BinaryCodec implements Closeable {
-
-    //Outstream to write to
-    private OutputStream outputStream;
-    //If a file or filename was given it will be stored here.  Used for error reporting.
-    private String outputFileName;
-
-    //Input stream to read from
-    private InputStream inputStream;
-    //If a file or filename was give to read from it will be stored here.  Used for error reporting.
-    private String inputFileName;
-
-    /*
-    Mode that the BinaryCodec is in.  It is either writing to a binary file or reading from.
-    This is set to true if it is writing to a binary file
-    Right now we don't support reading and writing to the same file with the same BinaryCodec instance
-    */
-    private boolean isWriting;
-
-    /**
-     * For byte swapping.
-     */
-    private ByteBuffer byteBuffer;
-
-    /**
-     * For reading Strings of known length, this can reduce object creation
-     */
-    private final byte[] scratchBuffer = new byte[16];
-
-    // Byte order used in BAM files.
-    private static final ByteOrder LITTLE_ENDIAN = ByteOrder.LITTLE_ENDIAN;
-    private static final byte NULL_BYTE[] = {0};
-
-    public static final long MAX_UBYTE = (Byte.MAX_VALUE * 2) + 1;
-    public static final long MAX_USHORT = (Short.MAX_VALUE * 2) + 1;
-    public static final long MAX_UINT = ((long)Integer.MAX_VALUE * 2) + 1;
-
-    // We never serialize more than this much at a time (except for Strings)
-    private static final int MAX_BYTE_BUFFER = 8;
-
-    //////////////////////////////////////////////////
-    // Constructors                                 //
-    //////////////////////////////////////////////////
-
-    /**
-     * Constructs BinaryCodec from a file and set it's mode to writing or not
-     *
-     * @param file    file to be written to or read from
-     * @param writing whether the file is being written to
-     */
-    public BinaryCodec(final File file, final boolean writing) {
-        this();
-        try {
-            this.isWriting = writing;
-            if (this.isWriting) {
-                this.outputStream = IOUtil.maybeBufferOutputStream(new FileOutputStream(file));
-                this.outputFileName = file.getName();
-            } else {
-                this.inputStream = IOUtil.maybeBufferInputStream(new FileInputStream(file));
-                this.inputFileName = file.getName();
-            }
-        } catch (FileNotFoundException e) {
-            throw new RuntimeIOException("File not found: " + file, e);
-        }
-    }
-
-    /**
-     * Constructs BinaryCodec from a file name and set it's mode to writing or not
-     *
-     * @param fileName name of the file to be written to or read from
-     * @param writing  writing whether the file is being written to
-     */
-    public BinaryCodec(final String fileName, final boolean writing) {
-        this(new File(fileName), writing);
-    }
-
-    /**
-     * Constructs BinaryCodec from an output stream
-     *
-     * @param outputStream Stream to write to, since it's an output stream we know that isWriting
-     *                     should be set to true
-     */
-    public BinaryCodec(final OutputStream outputStream) {
-        this();
-        setOutputStream(outputStream);
-    }
-
-    /**
-     * Constructs BinaryCodec from an input stream
-     *
-     * @param inputStream Stream to read from, since we are reading isWriting is set to false
-     */
-    public BinaryCodec(final InputStream inputStream) {
-        this();
-        setInputStream(inputStream);
-    }
-
-    /**
-     * Ambiguous whether reading or writing until set{In,Out}putStream is called
-     */
-    public BinaryCodec() {
-        initByteBuffer();
-    }
-
-    /**
-     * Shared among ctors.
-     * Note that if endianness is changed, all the unsigned methods must also be changed.
-     */
-    private void initByteBuffer() {
-        byteBuffer = ByteBuffer.allocate(MAX_BYTE_BUFFER);
-        byteBuffer.order(LITTLE_ENDIAN);
-    }
-
-    //////////////////////////////////////////////////
-    // Writing methods                              //
-    //////////////////////////////////////////////////
-
-
-    /**
-     * Write whatever has been put into the byte buffer
-     * @param numBytes -- how much to write.  Note that in case of writing an unsigned value,
-     * more bytes were put into the ByteBuffer than will get written out.
-     */
-    private void writeByteBuffer(final int numBytes) {
-        assert(numBytes <= byteBuffer.limit());
-        writeBytes(byteBuffer.array(), 0, numBytes);
-    }
-
-    /**
-     * Writes a byte to the output buffer
-     *
-     * @param bite byte array to write
-     */
-    public void writeByte(final byte bite) {
-        byteBuffer.clear();
-        byteBuffer.put(bite);
-        writeByteBuffer(1);
-    }
-
-    public void writeByte(final int b) {
-        writeByte((byte)b);
-    }
-
-    /**
-     * Writes a byte array to the output buffer
-     *
-     * @param bytes value to write
-     */
-    public void writeBytes(final byte[] bytes) {
-        writeBytes(bytes,  0, bytes.length);
-    }
-
-    public void writeBytes(final byte[] bytes, final int startOffset, final int numBytes) {
-        if (!isWriting) {
-            throw new IllegalStateException("Calling write method on BinaryCodec open for read.");
-        }
-        try {
-            outputStream.write(bytes, startOffset, numBytes);
-        } catch (IOException e) {
-            throw new RuntimeIOException(constructErrorMessage("Write error"), e);
-        }
-    }
-
-    /**
-     * Write a 32-bit int to the output stream
-     *
-     * @param value int to write
-     */
-    public void writeInt(final int value) {
-        byteBuffer.clear();
-        byteBuffer.putInt(value);
-        writeByteBuffer(4);
-    }
-
-    /**
-     * Write a double (8 bytes) to the output stream
-     *
-     * @param value double to write
-     */
-    public void writeDouble(final double value) {
-        byteBuffer.clear();
-        byteBuffer.putDouble(value);
-        writeByteBuffer(8);
-    }
-
-    /**
-     * Write a 64-bit long to the output stream
-     *
-     * @param value long to write
-     */
-    public void writeLong(final long value) {
-        byteBuffer.clear();
-        byteBuffer.putLong(value);
-        writeByteBuffer(8);
-    }
-
-
-    /**
-     * Write a 16-bit short to output stream
-     */
-    public void writeShort(final short value) {
-        byteBuffer.clear();
-        byteBuffer.putShort(value);
-        writeByteBuffer(2);
-    }
-
-    /**
-     * Write a float (4 bytes) to the output stream
-     *
-     * @param value float to write
-     */
-    public void writeFloat(final float value) {
-        byteBuffer.clear();
-        byteBuffer.putFloat(value);
-        writeByteBuffer(4);
-    }
-
-    /**
-     * Writes a boolean (1 byte) to the output buffer
-     *
-     * @param value boolean to write
-     */
-    public void writeBoolean(final boolean value) {
-        byteBuffer.clear();
-        byteBuffer.put(value ? (byte)1 : (byte)0);
-        writeByteBuffer(1);
-    }
-
-    /**
-     * Writes a string to the buffer as ASCII bytes
-     *
-     * @param value       string to write to buffer
-     * @param writeLength prefix the string with the length as a 32-bit int
-     * @param appendNull  add a null byte to the end of the string
-     */
-    public void writeString(final String value, final boolean writeLength, final boolean appendNull) {
-        if (writeLength) {
-            int lengthToWrite = value.length();
-            if (appendNull) lengthToWrite++;
-            writeInt(lengthToWrite);
-        }
-
-        //Actually writes the string to a buffer
-        writeString(value);
-
-        if (appendNull) writeBytes(NULL_BYTE);
-
-    }
-
-
-    /**
-     * Write a string to the buffer as ASCII bytes
-     *
-     * @param value string to write
-     */
-    private void writeString(final String value) {
-        writeBytes(StringUtil.stringToBytes(value));
-    }
-
-    /**
-     * Write an 8-bit unsigned byte.
-     * NOTE: This method will break if we change to big-endian.
-     */
-    public void writeUByte(final short val) {
-        if (val < 0) {
-            throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
-        }
-        if (val > MAX_UBYTE) {
-            throw new IllegalArgumentException("Value (" + val + ") to large to be written as ubyte.");
-        }
-        byteBuffer.clear();
-        byteBuffer.putShort(val);
-        writeByteBuffer(1);
-    }
-
-    /**
-     * Write a 16-bit unsigned short.
-     * NOTE: This method will break if we change to big-endian.
-     */
-    public void writeUShort(final int val) {
-        if (val < 0) {
-            throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
-        }
-        if (val > MAX_USHORT) {
-            throw new IllegalArgumentException("Value (" + val + ") too large to be written as ushort.");
-        }
-        byteBuffer.clear();
-        byteBuffer.putInt(val);
-        writeByteBuffer(2);
-    }
-
-    /**
-     * Write a 32-bit unsigned int.
-     * NOTE: This method will break if we change to big-endian.
-     */
-    public void writeUInt(final long val) {
-        if (val < 0) {
-            throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
-        }
-        if (val > MAX_UINT) {
-            throw new IllegalArgumentException("Value (" + val + ") to large to be written as uint.");
-        }
-        byteBuffer.clear();
-        byteBuffer.putLong(val);
-        writeByteBuffer(4);
-    }
-
-    //////////////////////////////////////////////////
-    // Reading methods                              //
-    //////////////////////////////////////////////////
-
-    /**
-     * Read a byte array from the input stream.
-     *
-     * @throws htsjdk.samtools.util.RuntimeEOFException if fewer than buffer.length bytes to read
-     */
-    public void readBytes(final byte[] buffer) {
-        readBytes(buffer, 0, buffer.length);
-    }
-
-    /**
-     * Read a byte array from the input stream
-     *
-     * @param buffer where to put bytes read
-     * @param offset offset to start putting bytes into buffer
-     * @param length number of bytes to read
-     * @throws RuntimeEOFException if fewer than length bytes to read
-     */
-    public void readBytes(final byte[] buffer, final int offset, final int length) {
-        int totalNumRead = 0;
-        do {
-            final int numRead = readBytesOrFewer(buffer, offset + totalNumRead, length - totalNumRead);
-            if (numRead < 0) {
-                String msg = String.format("Premature EOF. Expected %d but only received %d", length, totalNumRead);
-                throw new RuntimeEOFException(constructErrorMessage(msg));
-            } else {
-                totalNumRead += numRead;
-            }
-        } while (totalNumRead < length);
-    }
-
-    /**
-     * Reads a byte array from the input stream.
-     *
-     * @param buffer where to put bytes read
-     * @param offset offset to start putting bytes into buffer
-     * @param length number of bytes to read.  Fewer bytes may be read if EOF is reached before length bytes
-     *        have been read.
-     * @return the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
-     */
-    public int readBytesOrFewer(final byte[] buffer, final int offset, final int length) {
-        if (isWriting) {
-            throw new IllegalStateException("Calling read method on BinaryCodec open for write.");
-        }
-        try {
-            return inputStream.read(buffer, offset, length);
-        } catch (IOException e) {
-            throw new RuntimeIOException(constructErrorMessage("Read error"), e);
-        }
-    }
-
-    /**
-     * @return a single byte read from the input stream.
-     */
-    public byte readByte() {
-        if (isWriting) {
-            throw new IllegalStateException("Calling read method on BinaryCodec open for write.");
-        }
-        try {
-            final int ret = inputStream.read();
-            if (ret == -1) {
-                throw new RuntimeEOFException(constructErrorMessage("Premature EOF"));
-            }
-            return (byte)ret;
-        } catch (IOException e) {
-            throw new RuntimeIOException(constructErrorMessage("Read error"), e);
-        }
-    }
-
-    /**
-     * @return true if it is possible to know for sure if at EOF, and it is known for sure.
-     * If the input stream is a ByteArrayInputStream, this is faster than causing a RuntimeEOFException
-     * to be thrown.
-     */
-    public boolean knownAtEof() {
-        if (isWriting) {
-            throw new IllegalStateException("Calling knownAtEof method on BinaryCodec open for write.");
-        }
-        try {
-            return inputStream instanceof ByteArrayInputStream && inputStream.available() == 0;
-        } catch (IOException e) {
-            throw new RuntimeIOException(constructErrorMessage("available() error"), e);
-        }
-    }
-
-    /**
-     * Read a string off the input stream, as ASCII bytes
-     *
-     * @param length length of string to read
-     * @return String read from stream
-     */
-    public String readString(final int length) {
-        final byte[] buffer;
-        // Recycle single buffer if possible
-        if (length <= scratchBuffer.length) {
-            buffer = scratchBuffer;
-        } else {
-            buffer = new byte[length];
-
-        }
-        readBytes(buffer, 0, length);
-
-        return StringUtil.bytesToString(buffer, 0, length);
-    }
-
-    /**
-     * Read ASCII bytes from the input stream until a null byte is read
-     * @return String constructed from the ASCII bytes read
-     */
-    public String readNullTerminatedString() {
-        return StringUtil.readNullTerminatedString(this);
-    }
-
-    /**
-     * Read an int length, and then a String of that length
-     * @param devourNull if true, the length include a null terminator, which is read and discarded
-     */
-    public String readLengthAndString(final boolean devourNull) {
-        int length = readInt();
-        if (devourNull) {
-            --length;
-        }
-        final String ret = readString(length);
-        if (devourNull) {
-            readByte();
-        }
-        return ret;
-    }
-
-    private void readByteBuffer(final int numBytes) {
-        assert(numBytes <= byteBuffer.capacity());
-        readBytes(byteBuffer.array(), 0, numBytes);
-        byteBuffer.limit(byteBuffer.capacity());
-        byteBuffer.position(numBytes);
-    }
-
-    /**
-     * Read an int off the input stream
-     *
-     * @return int from input stream
-     */
-    public int readInt() {
-        readByteBuffer(4);
-        byteBuffer.flip();
-        return byteBuffer.getInt();
-    }
-
-    /**
-     * Reads a double off the input stream
-     *
-     * @return double
-     */
-    public double readDouble() {
-        readByteBuffer(8);
-        byteBuffer.flip();
-        return byteBuffer.getDouble();
-    }
-
-    /**
-     * Reads a long off the input stream
-     *
-     * @return long
-     */
-    public long readLong()  {
-        readByteBuffer(8);
-        byteBuffer.flip();
-        return byteBuffer.getLong();
-    }
-
-    public short readShort() {
-        readByteBuffer(2);
-        byteBuffer.flip();
-        return byteBuffer.getShort();
-    }
-
-    /**
-     * Reads a float off the input stream
-     *
-     * @return float
-     */
-    public float readFloat() {
-        readByteBuffer(4);
-        byteBuffer.flip();
-        return byteBuffer.getFloat();
-    }
-
-    /**
-     * Reads a boolean off the input stream, represented as a byte with value 1 or 0
-     *
-     * @return boolean
-     */
-    public boolean readBoolean() {
-        return (((int)readByte()) == 1);
-    }
-
-    /**
-     * Reads an 8-bit unsigned byte from the input stream.
-     * This method assumes little-endianness.
-     */
-    public short readUByte() {
-        readByteBuffer(1);
-        byteBuffer.put((byte)0);
-        byteBuffer.flip();
-        return byteBuffer.getShort();
-    }
-
-    /**
-     * Reads a 16-bit unsigned short from the input stream.
-     * This method assumes little-endianness.
-     */
-    public int readUShort() {
-        readByteBuffer(2);
-        byteBuffer.putShort((short)0);
-        byteBuffer.flip();
-        return byteBuffer.getInt();
-    }
-
-    /**
-     * Reads a 32-bit unsigned int from the input stream.
-     * This method assumes little-endianness.
-     */
-    public long readUInt() {
-        readByteBuffer(4);
-        byteBuffer.putInt(0);
-        byteBuffer.flip();
-        return byteBuffer.getLong();
-    }
-
-    /**
-     * Close the appropriate stream
-     */
-    public void close() {
-        try {
-            if (this.isWriting) {
-                // To the degree possible, make sure the bytes get forced to the file system,
-                // or else cause an exception to be thrown.
-                this.outputStream.flush();
-                if (this.outputStream instanceof FileOutputStream) {
-                    FileOutputStream fos = (FileOutputStream)this.outputStream;
-                    try {
-                        fos.getFD().sync();
-                    } catch (SyncFailedException e) {
-                        // Since the sync is belt-and-suspenders anyway, don't throw an exception if it fails,
-                        // because on some OSs it will fail for some types of output.  E.g. writing to /dev/null
-                        // on some Unixes.
-                    }
-                }
-                this.outputStream.close();
-            }
-            else this.inputStream.close();
-        } catch (IOException e) {
-            throw new RuntimeIOException(e.getMessage(), e);
-        }
-    }
-
-    private String constructErrorMessage(final String msg) {
-        final StringBuilder sb = new StringBuilder(msg);
-        sb.append("; BinaryCodec in ")
-                .append(isWriting? "write": "read").append("mode; ");
-        final String filename = isWriting? outputFileName: inputFileName;
-        if (filename != null) {
-            sb.append("file: ").append(filename);
-        } else  {
-            sb.append("streamed file (filename not available)");
-        }
-        return sb.toString();
-    }
-
-    //////////////////////////////////////////////////
-    // Some getters                                 //
-    //////////////////////////////////////////////////
-
-
-    public String getInputFileName() {
-        return inputFileName;
-    }
-
-    public String getOutputFileName() {
-        return outputFileName;
-    }
-
-    public void setOutputFileName(final String outputFileName) {
-        this.outputFileName = outputFileName;
-    }
-
-    public void setInputFileName(final String inputFileName) {
-        this.inputFileName = inputFileName;
-    }
-
-    public boolean isWriting() {
-        return isWriting;
-    }
-
-    public OutputStream getOutputStream() {
-        return outputStream;
-    }
-
-    public InputStream getInputStream() {
-        return inputStream;
-    }
-
-    public void setInputStream(final InputStream is) {
-        isWriting = false;
-        this.inputStream = is;
-    }
-
-    public void setOutputStream(final OutputStream os) {
-        isWriting = true;
-        this.outputStream = os;
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/BlockCompressedFilePointerUtil.java b/src/main/java/htsjdk/samtools/util/BlockCompressedFilePointerUtil.java
deleted file mode 100644
index 634534c..0000000
--- a/src/main/java/htsjdk/samtools/util/BlockCompressedFilePointerUtil.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Static for manipulating virtual file pointers in BGZF files.
- */
-public class BlockCompressedFilePointerUtil {
-    private static final int SHIFT_AMOUNT = 16;
-    private static final int OFFSET_MASK = 0xffff;
-    private static final long ADDRESS_MASK = 0xFFFFFFFFFFFFL;
-
-    public static final long MAX_BLOCK_ADDRESS = ADDRESS_MASK;
-    public static final int MAX_OFFSET = OFFSET_MASK;
-    
-    /**
-     * @param vfp1
-     * @param vfp2
-     * @return negative if vfp1 is earlier in file than vfp2, positive if it is later, 0 if equal.
-     */
-    public static int compare(final long vfp1, final long vfp2) {
-        if (vfp1 == vfp2) return 0;
-        // When treating as unsigned, negative number is > positive.
-        if (vfp1 < 0 && vfp2 >= 0) return 1;
-        if (vfp1 >= 0 && vfp2 < 0) return -1;
-        // Either both negative or both non-negative, so regular comparison works.
-        if (vfp1 < vfp2) return -1;
-        return 1; // vfp1 > vfp2
-    }
-
-    /**
-     * @return true if vfp2 points to somewhere in the same BGZF block, or the one immediately following vfp1's BGZF block.
-     */
-    public static boolean areInSameOrAdjacentBlocks(final long vfp1, final long vfp2) {
-        final long block1 = getBlockAddress(vfp1);
-        final long block2 = getBlockAddress(vfp2);
-        return (block1 == block2 || block1 + 1 == block2);        
-    }
-
-    /**
-     * @param blockAddress File offset of start of BGZF block.
-     * @param blockOffset Offset into uncompressed block.
-     * @return Virtual file pointer that embodies the input parameters.
-     */
-    static long makeFilePointer(final long blockAddress, final int blockOffset) {
-        if (blockOffset < 0) {
-            throw new IllegalArgumentException("Negative blockOffset " + blockOffset + " not allowed.");
-        }
-        if (blockAddress < 0) {
-            throw new IllegalArgumentException("Negative blockAddress " + blockAddress + " not allowed.");
-        }
-        if (blockOffset > MAX_OFFSET) {
-            throw new IllegalArgumentException("blockOffset " + blockOffset + " too large.");
-        }
-        if (blockAddress > MAX_BLOCK_ADDRESS) {
-            throw new IllegalArgumentException("blockAddress " + blockAddress + " too large.");
-        }
-        return blockAddress << SHIFT_AMOUNT | blockOffset;
-    }
-
-    /**
-     * @param virtualFilePointer
-     * @return File offset of start of BGZF block for this virtual file pointer.
-     */
-    public static long getBlockAddress(final long virtualFilePointer) {
-        return (virtualFilePointer >> SHIFT_AMOUNT) & ADDRESS_MASK;
-    }
-
-    /**
-     * @param virtualFilePointer
-     * @return Offset into uncompressed block for this virtual file pointer.
-     */
-    public static int getBlockOffset(final long virtualFilePointer) {
-        return (int) (virtualFilePointer & OFFSET_MASK);
-    }
-
-    public static String asString(final long vfp) {
-        return String.format("%d(0x%x): (block address: %d, offset: %d)", vfp, vfp, getBlockAddress(vfp), getBlockOffset(vfp));
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/BlockCompressedInputStream.java b/src/main/java/htsjdk/samtools/util/BlockCompressedInputStream.java
deleted file mode 100755
index b0ac001..0000000
--- a/src/main/java/htsjdk/samtools/util/BlockCompressedInputStream.java
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-
-import htsjdk.samtools.FileTruncatedException;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.seekablestream.SeekableBufferedStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableHTTPStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.net.URL;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-
-/*
- * Utility class for reading BGZF block compressed files.  The caller can treat this file like any other InputStream.
- * It probably is not necessary to wrap this stream in a buffering stream, because there is internal buffering.
- * The advantage of BGZF over conventional GZip format is that BGZF allows for seeking without having to read the
- * entire file up to the location being sought.  Note that seeking is only possible if the ctor(File) is used.
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for details of BGZF format
- */
-public class BlockCompressedInputStream extends InputStream implements LocationAware {
-
-    public final static String INCORRECT_HEADER_SIZE_MSG = "Incorrect header size for file: ";
-    public final static String UNEXPECTED_BLOCK_LENGTH_MSG = "Unexpected compressed block length: ";
-    public final static String PREMATURE_END_MSG = "Premature end of file: ";
-    public final static String CANNOT_SEEK_STREAM_MSG = "Cannot seek on stream based file ";
-    public final static String INVALID_FILE_PTR_MSG = "Invalid file pointer: ";
-
-    private InputStream mStream = null;
-    private SeekableStream mFile = null;
-    private byte[] mFileBuffer = null;
-    private byte[] mCurrentBlock = null;
-    private int mCurrentOffset = 0;
-    private long mBlockAddress = 0;
-    private int mLastBlockLength = 0;
-    private final BlockGunzipper blockGunzipper = new BlockGunzipper();
-
-
-    /**
-     * Note that seek() is not supported if this ctor is used.
-     */
-    public BlockCompressedInputStream(final InputStream stream) {
-        this(stream, true);
-    }
-
-    /**
-     * Note that seek() is not supported if this ctor is used.
-     */
-    public BlockCompressedInputStream(final InputStream stream, final boolean allowBuffering) {
-        if (allowBuffering) {
-            mStream = IOUtil.toBufferedStream(stream);
-        }
-        else {
-            mStream = stream;
-        }
-
-        mFile = null;
-    }
-
-    /**
-     * Use this ctor if you wish to call seek()
-     */
-    public BlockCompressedInputStream(final File file) throws IOException {
-        mFile = new SeekableFileStream(file);
-        mStream = null;
-
-    }
-
-    public BlockCompressedInputStream(final URL url) {
-        mFile = new SeekableBufferedStream(new SeekableHTTPStream(url));
-        mStream = null;
-    }
-
-    /**
-     * For providing some arbitrary data source.  No additional buffering is
-     * provided, so if the underlying source is not buffered, wrap it in a
-     * SeekableBufferedStream before passing to this ctor.
-     */
-    public BlockCompressedInputStream(final SeekableStream strm) {
-        mFile = strm;
-        mStream = null;
-    }
-
-    /**
-     * Determines whether or not the inflater will re-calculated the CRC on the decompressed data
-     * and check it against the value stored in the GZIP header.  CRC checking is an expensive
-     * operation and should be used accordingly.
-     */
-    public void setCheckCrcs(final boolean check) {
-        this.blockGunzipper.setCheckCrcs(check);
-    }
-
-    /**
-     * @return the number of bytes that can be read (or skipped over) from this input stream without blocking by the
-     * next caller of a method for this input stream. The next caller might be the same thread or another thread.
-     * Note that although the next caller can read this many bytes without blocking, the available() method call itself
-     * may block in order to fill an internal buffer if it has been exhausted.
-     */
-    public int available() throws IOException {
-        if (mCurrentBlock == null || mCurrentOffset == mCurrentBlock.length) {
-            readBlock();
-        }
-        if (mCurrentBlock == null) {
-            return 0;
-        }
-        return mCurrentBlock.length - mCurrentOffset;
-    }
-
-    /**
-     * @return <code>true</code> if the stream is at the end of a BGZF block,
-     * <code>false</code> otherwise.
-     */
-    public boolean endOfBlock() {
-        return (mCurrentBlock != null && mCurrentOffset == mCurrentBlock.length);
-    }
-
-    /**
-     * Closes the underlying InputStream or RandomAccessFile
-     */
-    public void close() throws IOException {
-        if (mFile != null) {
-            mFile.close();
-            mFile = null;
-        } else if (mStream != null) {
-            mStream.close();
-            mStream = null;
-        }
-        // Encourage garbage collection
-        mFileBuffer = null;
-        mCurrentBlock = null;
-    }
-
-    /**
-     * Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255.
-     * If no byte is available because the end of the stream has been reached, the value -1 is returned.
-     * This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
-
-     * @return the next byte of data, or -1 if the end of the stream is reached.
-     */
-    public int read() throws IOException {
-        return (available() > 0) ? (mCurrentBlock[mCurrentOffset++] & 0xFF) : -1;
-    }
-
-    /**
-     * Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes
-     * actually read is returned as an integer. This method blocks until input data is available, end of file is detected,
-     * or an exception is thrown.
-     *
-     * read(buf) has the same effect as read(buf, 0, buf.length).
-     *
-     * @param buffer the buffer into which the data is read.
-     * @return the total number of bytes read into the buffer, or -1 is there is no more data because the end of
-     * the stream has been reached.
-     */
-    public int read(final byte[] buffer) throws IOException {
-        return read(buffer, 0, buffer.length);
-    }
-
-    private volatile ByteArrayOutputStream buf = null;
-    private static final byte eol = '\n';
-    private static final byte eolCr = '\r';
-    
-    /**
-     * Reads a whole line. A line is considered to be terminated by either a line feed ('\n'), 
-     * carriage return ('\r') or carriage return followed by a line feed ("\r\n").
-     *
-     * @return  A String containing the contents of the line, excluding the line terminating
-     *          character, or null if the end of the stream has been reached
-     *
-     * @exception  IOException  If an I/O error occurs
-     * @
-     */
-    public String readLine() throws IOException {
-    	int available = available();
-        if (available == 0) {
-            return null;
-        }
-        if(null == buf){ // lazy initialisation 
-        	buf = new ByteArrayOutputStream(8192);
-        }
-        buf.reset();
-    	boolean done = false;
-    	boolean foundCr = false; // \r found flag
-        while (!done) {
-        	int linetmpPos = mCurrentOffset;
-        	int bCnt = 0;
-        	while((available-- > 0)){
-        		final byte c = mCurrentBlock[linetmpPos++];
-        		if(c == eol){ // found \n
-        			done = true;
-        			break;
-        		} else if(foundCr){  // previous char was \r
-        			--linetmpPos; // current char is not \n so put it back
-        			done = true;
-        			break;
-        		} else if(c == eolCr){ // found \r
-					foundCr = true;
-        			continue; // no ++bCnt
-        		}
-				++bCnt;
-        	}
-        	if(mCurrentOffset < linetmpPos){
-				buf.write(mCurrentBlock, mCurrentOffset, bCnt);
-	        	mCurrentOffset = linetmpPos;
-        	}
-        	available = available();    
-        	if(available == 0){
-        		// EOF
-        		done = true;
-        	}
-        }
-    	return buf.toString();
-    }
-
-    /**
-     * Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read
-     * as many as len bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.
-     *
-     * This method blocks until input data is available, end of file is detected, or an exception is thrown.
-     *
-     * @param buffer buffer into which data is read.
-     * @param offset the start offset in array b  at which the data is written.
-     * @param length the maximum number of bytes to read.
-     * @return the total number of bytes read into the buffer, or -1 if there is no more data because the end of
-     * the stream has been reached.
-     */
-    public int read(final byte[] buffer, int offset, int length) throws IOException {
-        final int originalLength = length;
-        while (length > 0) {
-            final int available = available();
-            if (available == 0) {
-                // Signal EOF to caller
-                if (originalLength == length) {
-                    return -1;
-                }
-                break;
-            }
-            final int copyLength = Math.min(length, available);
-            System.arraycopy(mCurrentBlock, mCurrentOffset, buffer, offset, copyLength);
-            mCurrentOffset += copyLength;
-            offset += copyLength;
-            length -= copyLength;
-        }
-        return originalLength - length;
-    }
-
-    /**
-     * Seek to the given position in the file.  Note that pos is a special virtual file pointer,
-     * not an actual byte offset.
-     *
-     * @param pos virtual file pointer
-     */
-    public void seek(final long pos) throws IOException {
-        if (mFile == null) {
-            throw new IOException(CANNOT_SEEK_STREAM_MSG);
-        }
-        // Decode virtual file pointer
-        // Upper 48 bits is the byte offset into the compressed stream of a block.
-        // Lower 16 bits is the byte offset into the uncompressed stream inside the block.
-        final long compressedOffset = BlockCompressedFilePointerUtil.getBlockAddress(pos);
-        final int uncompressedOffset = BlockCompressedFilePointerUtil.getBlockOffset(pos);
-        final int available;
-        if (mBlockAddress == compressedOffset && mCurrentBlock != null) {
-            available = mCurrentBlock.length;
-        } else {
-            mFile.seek(compressedOffset);
-            mBlockAddress = compressedOffset;
-            mLastBlockLength = 0;
-            readBlock();
-            available = available();
-        }
-        if (uncompressedOffset > available ||
-                (uncompressedOffset == available && !eof())) {
-            throw new IOException(INVALID_FILE_PTR_MSG + pos + " for " + mFile.getSource());
-        }
-        mCurrentOffset = uncompressedOffset;
-    }
-
-    private boolean eof() throws IOException {
-        if (mFile.eof()) {
-            return true;
-        }
-        // If the last remaining block is the size of the EMPTY_GZIP_BLOCK, this is the same as being at EOF.
-        return (mFile.length() - (mBlockAddress + mLastBlockLength) == BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length);
-    }
-
-    /**
-     * @return virtual file pointer that can be passed to seek() to return to the current position.  This is
-     * not an actual byte offset, so arithmetic on file pointers cannot be done to determine the distance between
-     * the two.
-     */
-    public long getFilePointer() {
-        if (mCurrentOffset == mCurrentBlock.length) {
-            // If current offset is at the end of the current block, file pointer should point
-            // to the beginning of the next block.
-            return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress + mLastBlockLength, 0);
-        }
-        return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress, mCurrentOffset);
-    }
-
-    @Override
-    public long getPosition() {
-        return getFilePointer();
-    }
-
-    public static long getFileBlock(final long bgzfOffset) {
-        return BlockCompressedFilePointerUtil.getBlockAddress(bgzfOffset);
-    }
-    
-    /**
-     * @param stream Must be at start of file.  Throws RuntimeException if !stream.markSupported().
-     * @return true if the given file looks like a valid BGZF file.
-     */
-    public static boolean isValidFile(final InputStream stream) throws IOException {
-        if (!stream.markSupported()) {
-            throw new RuntimeException("Cannot test non-buffered stream");
-        }
-        stream.mark(BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
-        final byte[] buffer = new byte[BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH];
-        final int count = readBytes(stream, buffer, 0, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
-        stream.reset();
-        return count == BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH && isValidBlockHeader(buffer);
-    }
-
-    private static boolean isValidBlockHeader(final byte[] buffer) {
-        return (buffer[0] == BlockCompressedStreamConstants.GZIP_ID1 &&
-                (buffer[1] & 0xFF) == BlockCompressedStreamConstants.GZIP_ID2 &&
-                (buffer[3] & BlockCompressedStreamConstants.GZIP_FLG) != 0 &&
-                buffer[10] == BlockCompressedStreamConstants.GZIP_XLEN &&
-                buffer[12] == BlockCompressedStreamConstants.BGZF_ID1 &&
-                buffer[13] == BlockCompressedStreamConstants.BGZF_ID2);
-    }
-
-    private void readBlock() throws IOException {
-
-        if (mFileBuffer == null) {
-            mFileBuffer = new byte[BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE];
-        }
-        int count = readBytes(mFileBuffer, 0, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
-        if (count == 0) {
-            // Handle case where there is no empty gzip block at end.
-            mCurrentOffset = 0;
-            mBlockAddress += mLastBlockLength;
-            mCurrentBlock = new byte[0];
-            return;
-        }
-        if (count != BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH) {
-            throw new IOException(INCORRECT_HEADER_SIZE_MSG + mFile.getSource());
-        }
-        final int blockLength = unpackInt16(mFileBuffer, BlockCompressedStreamConstants.BLOCK_LENGTH_OFFSET) + 1;
-        if (blockLength < BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH || blockLength > mFileBuffer.length) {
-            throw new IOException(UNEXPECTED_BLOCK_LENGTH_MSG + blockLength + " for " + mFile.getSource());
-        }
-        final int remaining = blockLength - BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH;
-        count = readBytes(mFileBuffer, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH, remaining);
-        if (count != remaining) {
-            throw new FileTruncatedException(PREMATURE_END_MSG + mFile.getSource());
-        }
-        inflateBlock(mFileBuffer, blockLength);
-        mCurrentOffset = 0;
-        mBlockAddress += mLastBlockLength;
-        mLastBlockLength = blockLength;
-    }
-
-    private void inflateBlock(final byte[] compressedBlock, final int compressedLength) throws IOException {
-        final int uncompressedLength = unpackInt32(compressedBlock, compressedLength-4);
-        byte[] buffer = mCurrentBlock;
-        mCurrentBlock = null;
-        if (buffer == null || buffer.length != uncompressedLength) {
-            try {
-                buffer = new byte[uncompressedLength];
-            } catch (final NegativeArraySizeException e) {
-                throw new RuntimeIOException(mFile.getSource() + " has invalid uncompressedLength: " + uncompressedLength, e);
-            }
-        }
-        blockGunzipper.unzipBlock(buffer, compressedBlock, compressedLength);
-        mCurrentBlock = buffer;
-    }
-
-    private int readBytes(final byte[] buffer, final int offset, final int length) throws IOException {
-        if (mFile != null) {
-            return readBytes(mFile, buffer, offset, length);
-        } else if (mStream != null) {
-            return readBytes(mStream, buffer, offset, length);
-        } else {
-            return 0;
-        }
-    }
-
-    private static int readBytes(final SeekableStream file, final byte[] buffer, final int offset, final int length) throws IOException {
-        int bytesRead = 0;
-        while (bytesRead < length) {
-            final int count = file.read(buffer, offset + bytesRead, length - bytesRead);
-            if (count <= 0) {
-                break;
-            }
-            bytesRead += count;
-        }
-        return bytesRead;
-    }
-
-    private static int readBytes(final InputStream stream, final byte[] buffer, final int offset, final int length) throws IOException {
-        int bytesRead = 0;
-        while (bytesRead < length) {
-            final int count = stream.read(buffer, offset + bytesRead, length - bytesRead);
-            if (count <= 0) {
-                break;
-            }
-            bytesRead += count;
-        }
-        return bytesRead;
-    }
-
-    private int unpackInt16(final byte[] buffer, final int offset) {
-        return ((buffer[offset] & 0xFF) |
-                ((buffer[offset+1] & 0xFF) << 8));
-    }
-
-    private int unpackInt32(final byte[] buffer, final int offset) {
-        return ((buffer[offset] & 0xFF) |
-                ((buffer[offset+1] & 0xFF) << 8) |
-                ((buffer[offset+2] & 0xFF) << 16) |
-                ((buffer[offset+3] & 0xFF) << 24));
-    }
-
-    public enum FileTermination {HAS_TERMINATOR_BLOCK, HAS_HEALTHY_LAST_BLOCK, DEFECTIVE}
-
-    public static FileTermination checkTermination(final File file) throws IOException {
-        final long fileSize = file.length();
-        if (fileSize < BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length) {
-            return FileTermination.DEFECTIVE;
-        }
-        final RandomAccessFile raFile = new RandomAccessFile(file, "r");
-        try {
-            raFile.seek(fileSize - BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length);
-            byte[] buf = new byte[BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length];
-            raFile.readFully(buf);
-            if (Arrays.equals(buf, BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK)) {
-                return FileTermination.HAS_TERMINATOR_BLOCK;
-            }
-            final int bufsize = (int)Math.min(fileSize, BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE);
-            buf = new byte[bufsize];
-            raFile.seek(fileSize - bufsize);
-            raFile.read(buf);
-            for (int i = buf.length - BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length;
-                    i >= 0; --i) {
-                if (!preambleEqual(BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE,
-                        buf, i, BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE.length)) {
-                    continue;
-                }
-                final ByteBuffer byteBuffer = ByteBuffer.wrap(buf, i + BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE.length, 4);
-                byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-                final int totalBlockSizeMinusOne =  byteBuffer.getShort() & 0xFFFF;
-                if (buf.length - i == totalBlockSizeMinusOne + 1) {
-                    return FileTermination.HAS_HEALTHY_LAST_BLOCK;
-                } else {
-                    return FileTermination.DEFECTIVE;
-                }
-            }
-            return FileTermination.DEFECTIVE;
-        } finally {
-            raFile.close();
-        }
-    }
-
-    public static void assertNonDefectiveFile(final File file) throws IOException {
-        if (checkTermination(file) == FileTermination.DEFECTIVE) {
-            throw new SAMException(file.getAbsolutePath() + " does not have a valid GZIP block at the end of the file.");
-        }
-    }
-
-    private static boolean preambleEqual(final byte[] preamble, final byte[] buf, final int startOffset, final int length) {
-        for (int i = 0; i < length; ++i) {
-            if (preamble[i] != buf[i + startOffset]) {
-                return false;
-            }
-        }
-        return true;
-    }
-}
-
-
diff --git a/src/main/java/htsjdk/samtools/util/BlockCompressedOutputStream.java b/src/main/java/htsjdk/samtools/util/BlockCompressedOutputStream.java
deleted file mode 100644
index 408282f..0000000
--- a/src/main/java/htsjdk/samtools/util/BlockCompressedOutputStream.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.util.zip.DeflaterFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.CRC32;
-import java.util.zip.Deflater;
-
-/**
- * Writer for a file that is a series of gzip blocks (BGZF format).  The caller just treats it as an
- * OutputStream, and under the covers a gzip block is written when the amount of uncompressed as-yet-unwritten
- * bytes reaches a threshold.
- *
- * The advantage of BGZF over conventional gzip is that BGZF allows for seeking without having to scan through
- * the entire file up to the position being sought.
- *
- * Note that the flush() method should not be called by client
- * unless you know what you're doing, because it forces a gzip block to be written even if the
- * number of buffered bytes has not reached threshold.  close(), on the other hand, must be called
- * when done writing in order to force the last gzip block to be written.
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for details of BGZF file format.
- */
-public class BlockCompressedOutputStream
-        extends OutputStream
-        implements LocationAware
-{
-
-    private static final Log log = Log.getInstance(BlockCompressedOutputStream.class);
-
-    private static int defaultCompressionLevel = BlockCompressedStreamConstants.DEFAULT_COMPRESSION_LEVEL;
-    private static DeflaterFactory defaultDeflaterFactory = new DeflaterFactory();
-
-    /**
-     * Sets the GZip compression level for subsequent BlockCompressedOutputStream object creation
-     * that do not specify the compression level.
-     * @param compressionLevel 1 <= compressionLevel <= 9
-     */
-    public static void setDefaultCompressionLevel(final int compressionLevel) {
-        if (compressionLevel < Deflater.NO_COMPRESSION || compressionLevel > Deflater.BEST_COMPRESSION) {
-            throw new IllegalArgumentException("Invalid compression level: " + compressionLevel);
-        }
-        defaultCompressionLevel = compressionLevel;
-    }
-
-    public static int getDefaultCompressionLevel() {
-        return defaultCompressionLevel;
-    }
-
-    /**
-     * Sets the default {@link DeflaterFactory} that will be used for all instances unless specified otherwise in the constructor.
-     * If this method is not called the default is a factory that will create the JDK {@link Deflater}.
-     * @param deflaterFactory non-null default factory.
-     */
-    public static void setDefaultDeflaterFactory(final DeflaterFactory deflaterFactory) {
-        if (deflaterFactory == null) {
-            throw new IllegalArgumentException("null deflaterFactory");
-        }
-        defaultDeflaterFactory = deflaterFactory;
-    }
-
-    public static DeflaterFactory getDefaultDeflaterFactory() {
-        return defaultDeflaterFactory;
-    }
-
-    private final BinaryCodec codec;
-    private final byte[] uncompressedBuffer = new byte[BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE];
-    private int numUncompressedBytes = 0;
-    private final byte[] compressedBuffer =
-            new byte[BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE -
-                    BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH];
-    private final Deflater deflater;
-
-    // A second deflater is created for the very unlikely case where the regular deflation actually makes
-    // things bigger, and the compressed block is too big.  It should be possible to downshift the
-    // primary deflater to NO_COMPRESSION level, recompress, and then restore it to its original setting,
-    // but in practice that doesn't work.
-    // The motivation for deflating at NO_COMPRESSION level is that it will predictably produce compressed
-    // output that is 10 bytes larger than the input, and the threshold at which a block is generated is such that
-    // the size of tbe final gzip block will always be <= 64K.  This is preferred over the previous method,
-    // which would attempt to compress up to 64K bytes, and if the resulting compressed block was too large,
-    // try compressing fewer input bytes (aka "downshifting').  The problem with downshifting is that
-    // getFilePointer might return an inaccurate value.
-    // I assume (AW 29-Oct-2013) that there is no value in using hardware-assisted deflater for no-compression mode,
-    // so just use JDK standard.
-    private final Deflater noCompressionDeflater = new Deflater(Deflater.NO_COMPRESSION, true);
-    private final CRC32 crc32 = new CRC32();
-    private File file = null;
-    private long mBlockAddress = 0;
-
-
-    // Really a local variable, but allocate once to reduce GC burden.
-    private final byte[] singleByteArray = new byte[1];
-
-    /**
-     * Uses default compression level, which is 5 unless changed by setCompressionLevel
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * Use {@link #BlockCompressedOutputStream(File, int, DeflaterFactory)} to specify a custom factory.
-     */
-    public BlockCompressedOutputStream(final String filename) {
-        this(filename, defaultCompressionLevel);
-    }
-
-    /**
-     * Uses default compression level, which is 5 unless changed by setCompressionLevel
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * Use {@link #BlockCompressedOutputStream(File, int, DeflaterFactory)} to specify a custom factory.
-     */
-    public BlockCompressedOutputStream(final File file) {
-        this(file, defaultCompressionLevel);
-    }
-
-    /**
-     * Prepare to compress at the given compression level
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * @param compressionLevel 1 <= compressionLevel <= 9
-     */
-    public BlockCompressedOutputStream(final String filename, final int compressionLevel) {
-        this(new File(filename), compressionLevel);
-    }
-
-    /**
-     * Prepare to compress at the given compression level
-     * @param compressionLevel 1 <= compressionLevel <= 9
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * Use {@link #BlockCompressedOutputStream(File, int, DeflaterFactory)} to specify a custom factory.
-     */
-    public BlockCompressedOutputStream(final File file, final int compressionLevel) {
-        this(file, compressionLevel, defaultDeflaterFactory);
-    }
-
-    /**
-     * Prepare to compress at the given compression level
-     * @param compressionLevel 1 <= compressionLevel <= 9
-     * @param deflaterFactory custom factory to create deflaters (overrides the default)
-     */
-    public BlockCompressedOutputStream(final File file, final int compressionLevel, final DeflaterFactory deflaterFactory) {
-        this.file = file;
-        codec = new BinaryCodec(file, true);
-        deflater = deflaterFactory.makeDeflater(compressionLevel, true);
-        log.debug("Using deflater: " + deflater.getClass().getSimpleName());
-    }
-
-    /**
-     * Uses default compression level, which is 5 unless changed by setCompressionLevel
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * Use {@link #BlockCompressedOutputStream(OutputStream, File, int, DeflaterFactory)} to specify a custom factory.
-     *
-     * @param file may be null
-     */
-    public BlockCompressedOutputStream(final OutputStream os, final File file) {
-        this(os, file, defaultCompressionLevel);
-    }
-
-    /**
-     * Note: this constructor uses the default {@link DeflaterFactory}, see {@link #getDefaultDeflaterFactory()}.
-     * Use {@link #BlockCompressedOutputStream(OutputStream, File, int, DeflaterFactory)} to specify a custom factory.
-     */
-    public BlockCompressedOutputStream(final OutputStream os, final File file, final int compressionLevel) {
-        this(os, file, compressionLevel, defaultDeflaterFactory);
-    }
-
-    /**
-     * Creates the output stream.
-     * @param os output stream to create a BlockCompressedOutputStream from
-     * @param file file to which to write the output or null if not available
-     * @param compressionLevel the compression level (0-9)
-     * @param deflaterFactory custom factory to create deflaters (overrides the default)
-     */
-    public BlockCompressedOutputStream(final OutputStream os, final File file, final int compressionLevel, final DeflaterFactory deflaterFactory) {
-        this.file = file;
-        codec = new BinaryCodec(os);
-        if (file != null) {
-            codec.setOutputFileName(file.getAbsolutePath());
-        }
-        deflater = deflaterFactory.makeDeflater(compressionLevel, true);
-        log.debug("Using deflater: " + deflater.getClass().getSimpleName());
-    }
-
-    /**
-     *
-     * @param location May be null.  Used for error messages, and for checking file termination.
-     * @param output May or not already be a BlockCompressedOutputStream.
-     * @return A BlockCompressedOutputStream, either by wrapping the given OutputStream, or by casting if it already
-     *         is a BCOS.
-     */
-    public static BlockCompressedOutputStream maybeBgzfWrapOutputStream(final File location, OutputStream output) {
-        if (!(output instanceof BlockCompressedOutputStream)) {
-           return new BlockCompressedOutputStream(output, location);
-        } else {
-           return (BlockCompressedOutputStream)output;
-        }
-    }
-
-    /**
-     * Writes b.length bytes from the specified byte array to this output stream. The general contract for write(b)
-     * is that it should have exactly the same effect as the call write(b, 0, b.length).
-     * @param bytes the data
-     */
-    @Override
-    public void write(final byte[] bytes) throws IOException {
-        write(bytes, 0, bytes.length);
-    }
-
-    /**
-     * Writes len bytes from the specified byte array starting at offset off to this output stream. The general
-     * contract for write(b, off, len) is that some of the bytes in the array b are written to the output stream in order;
-     * element b[off] is the first byte written and b[off+len-1] is the last byte written by this operation.
-     *
-     * @param bytes the data
-     * @param startIndex the start offset in the data
-     * @param numBytes the number of bytes to write
-     */
-    @Override
-    public void write(final byte[] bytes, int startIndex, int numBytes) throws IOException {
-        assert(numUncompressedBytes < uncompressedBuffer.length);
-        while (numBytes > 0) {
-            final int bytesToWrite = Math.min(uncompressedBuffer.length - numUncompressedBytes, numBytes);
-            System.arraycopy(bytes, startIndex, uncompressedBuffer, numUncompressedBytes, bytesToWrite);
-            numUncompressedBytes += bytesToWrite;
-            startIndex += bytesToWrite;
-            numBytes -= bytesToWrite;
-            assert(numBytes >= 0);
-            if (numUncompressedBytes == uncompressedBuffer.length) {
-                deflateBlock();
-            }
-        }
-    }
-
-    /**
-     * WARNING: flush() affects the output format, because it causes the current contents of uncompressedBuffer
-     * to be compressed and written, even if it isn't full.  Unless you know what you're doing, don't call flush().
-     * Instead, call close(), which will flush any unwritten data before closing the underlying stream.
-     *
-     */
-    @Override
-    public void flush() throws IOException {
-        while (numUncompressedBytes > 0) {
-            deflateBlock();
-        }
-        codec.getOutputStream().flush();
-    }
-
-    /**
-     * close() must be called in order to flush any remaining buffered bytes.  An unclosed file will likely be
-     * defective.
-     *
-     */
-    @Override
-    public void close() throws IOException {
-        flush();
-        // For debugging...
-        // if (numberOfThrottleBacks > 0) {
-        //     System.err.println("In BlockCompressedOutputStream, had to throttle back " + numberOfThrottleBacks +
-        //                        " times for file " + codec.getOutputFileName());
-        // }
-        codec.writeBytes(BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK);
-        codec.close();
-        // Can't re-open something that is not a regular file, e.g. a named pipe or an output stream
-        if (this.file == null || !this.file.isFile()) return;
-        if (BlockCompressedInputStream.checkTermination(this.file) !=
-                BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK) {
-            throw new IOException("Terminator block not found after closing BGZF file " + this.file);
-        }
-    }
-
-    /**
-     * Writes the specified byte to this output stream. The general contract for write is that one byte is written
-     * to the output stream. The byte to be written is the eight low-order bits of the argument b.
-     * The 24 high-order bits of b are ignored.
-     * @param bite
-     * @throws IOException
-     */
-    public void write(final int bite) throws IOException {
-        singleByteArray[0] = (byte)bite;
-        write(singleByteArray);
-    }
-
-    /** Encode virtual file pointer
-     * Upper 48 bits is the byte offset into the compressed stream of a block.
-     * Lower 16 bits is the byte offset into the uncompressed stream inside the block.
-     */
-    public long getFilePointer(){
-        return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress, numUncompressedBytes);
-    }
-
-    @Override
-    public long getPosition() {
-        return getFilePointer();
-    }
-
-    /**
-     * Attempt to write the data in uncompressedBuffer to the underlying file in a gzip block.
-     * If the entire uncompressedBuffer does not fit in the maximum allowed size, reduce the amount
-     * of data to be compressed, and slide the excess down in uncompressedBuffer so it can be picked
-     * up in the next deflate event.
-     * @return size of gzip block that was written.
-     */
-    private int deflateBlock() {
-        if (numUncompressedBytes == 0) {
-            return 0;
-        }
-        final int bytesToCompress = numUncompressedBytes;
-        // Compress the input
-        deflater.reset();
-        deflater.setInput(uncompressedBuffer, 0, bytesToCompress);
-        deflater.finish();
-        int compressedSize = deflater.deflate(compressedBuffer, 0, compressedBuffer.length);
-
-        // If it didn't all fit in compressedBuffer.length, set compression level to NO_COMPRESSION
-        // and try again.  This should always fit.
-        if (!deflater.finished()) {
-            noCompressionDeflater.reset();
-            noCompressionDeflater.setInput(uncompressedBuffer, 0, bytesToCompress);
-            noCompressionDeflater.finish();
-            compressedSize = noCompressionDeflater.deflate(compressedBuffer, 0, compressedBuffer.length);
-            if (!noCompressionDeflater.finished()) {
-                throw new IllegalStateException("unpossible");
-            }
-        }
-        // Data compressed small enough, so write it out.
-        crc32.reset();
-        crc32.update(uncompressedBuffer, 0, bytesToCompress);
-
-        final int totalBlockSize = writeGzipBlock(compressedSize, bytesToCompress, crc32.getValue());
-        assert(bytesToCompress <= numUncompressedBytes);
-
-        // Clear out from uncompressedBuffer the data that was written
-        if (bytesToCompress == numUncompressedBytes) {
-            numUncompressedBytes = 0;
-        } else {
-            System.arraycopy(uncompressedBuffer, bytesToCompress, uncompressedBuffer, 0,
-                    numUncompressedBytes - bytesToCompress);
-            numUncompressedBytes -= bytesToCompress;
-        }
-        mBlockAddress += totalBlockSize;
-        return totalBlockSize;
-    }
-
-    /**
-     * Writes the entire gzip block, assuming the compressed data is stored in compressedBuffer
-     * @return  size of gzip block that was written.
-     */
-    private int writeGzipBlock(final int compressedSize, final int uncompressedSize, final long crc) {
-        // Init gzip header
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_ID1);
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_ID2);
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_CM_DEFLATE);
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_FLG);
-        codec.writeInt(0); // Modification time
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_XFL);
-        codec.writeByte(BlockCompressedStreamConstants.GZIP_OS_UNKNOWN);
-        codec.writeShort(BlockCompressedStreamConstants.GZIP_XLEN);
-        codec.writeByte(BlockCompressedStreamConstants.BGZF_ID1);
-        codec.writeByte(BlockCompressedStreamConstants.BGZF_ID2);
-        codec.writeShort(BlockCompressedStreamConstants.BGZF_LEN);
-        final int totalBlockSize = compressedSize + BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH +
-                BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH;
-
-        // I don't know why we store block size - 1, but that is what the spec says
-        codec.writeShort((short)(totalBlockSize - 1));
-        codec.writeBytes(compressedBuffer, 0, compressedSize);
-        codec.writeInt((int)crc);
-        codec.writeInt(uncompressedSize);
-        return totalBlockSize;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/BlockCompressedStreamConstants.java b/src/main/java/htsjdk/samtools/util/BlockCompressedStreamConstants.java
deleted file mode 100644
index 4f45057..0000000
--- a/src/main/java/htsjdk/samtools/util/BlockCompressedStreamConstants.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Defaults;
-
-/**
- * Constants shared by BlockCompressed{Input,Output}Stream classes
- */
-public class BlockCompressedStreamConstants {
-    // Number of bytes in the gzip block before the deflated data.
-    // This is not the standard header size, because we include one optional subfield,
-    // but it is the standard for us.
-    public static final int BLOCK_HEADER_LENGTH = 18;
-
-    // Location in the gzip block of the total block size (actually total block size - 1)
-    public static final int BLOCK_LENGTH_OFFSET = 16;
-
-    // Number of bytes that follow the deflated data
-    public static final int BLOCK_FOOTER_LENGTH = 8;
-
-    // We require that a compressed block (including header and footer, be <= this)
-    public static final int MAX_COMPRESSED_BLOCK_SIZE = 64 * 1024;
-
-    // Gzip overhead is the header, the footer, and the block size (encoded as a short).
-    public static final int GZIP_OVERHEAD = BLOCK_HEADER_LENGTH + BLOCK_FOOTER_LENGTH + 2;
-
-    // If Deflater has compression level == NO_COMPRESSION, 10 bytes of overhead (determined experimentally).
-    public static final int NO_COMPRESSION_OVERHEAD = 10;
-
-    // Push out a gzip block when this many uncompressed bytes have been accumulated.
-    // This size is selected so that if data is not compressible,  if Deflater is given
-    // compression level == NO_COMPRESSION, compressed size is guaranteed to be <= MAX_COMPRESSED_BLOCK_SIZE.
-    public static final int DEFAULT_UNCOMPRESSED_BLOCK_SIZE = 64 * 1024 - (GZIP_OVERHEAD + NO_COMPRESSION_OVERHEAD);
-
-    // Magic numbers
-    public static final byte GZIP_ID1 = 31;
-    public static final int GZIP_ID2 = 139;
-
-    // FEXTRA flag means there are optional fields
-    public static final int GZIP_FLG = 4;
-
-    // extra flags
-    public static final int GZIP_XFL = 0;
-
-    // length of extra subfield
-    public static final short GZIP_XLEN = 6;
-
-    // The deflate compression, which is customarily used by gzip
-    public static final byte GZIP_CM_DEFLATE = 8;
-
-    public static final int DEFAULT_COMPRESSION_LEVEL = Defaults.COMPRESSION_LEVEL;
-
-    // We don't care about OS because we're not doing line terminator translation
-    public static final int GZIP_OS_UNKNOWN = 255;
-
-    // The subfield ID
-    public static final byte BGZF_ID1 = 66;
-    public static final byte BGZF_ID2 = 67;
-
-    // subfield length in bytes
-    public static final byte BGZF_LEN = 2;
-
-    public static final byte[] EMPTY_GZIP_BLOCK = {
-            BlockCompressedStreamConstants.GZIP_ID1,
-            (byte)BlockCompressedStreamConstants.GZIP_ID2,
-            BlockCompressedStreamConstants.GZIP_CM_DEFLATE,
-            BlockCompressedStreamConstants.GZIP_FLG,
-            0, 0, 0, 0, // Modification time
-            BlockCompressedStreamConstants.GZIP_XFL,
-            (byte)BlockCompressedStreamConstants.GZIP_OS_UNKNOWN,
-            BlockCompressedStreamConstants.GZIP_XLEN, 0, // Little-endian short
-            BlockCompressedStreamConstants.BGZF_ID1,
-            BlockCompressedStreamConstants.BGZF_ID2,
-            BlockCompressedStreamConstants.BGZF_LEN, 0, // Little-endian short
-            // Total block size - 1
-            BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH +
-                    BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH - 1 + 2, 0, // Little-endian short
-            // Dummy payload?
-            3, 0,
-            0, 0, 0, 0, // crc
-            0, 0, 0, 0, // uncompressedSize
-    };
-    public static final byte[] GZIP_BLOCK_PREAMBLE = {
-            BlockCompressedStreamConstants.GZIP_ID1,
-            (byte)BlockCompressedStreamConstants.GZIP_ID2,
-            BlockCompressedStreamConstants.GZIP_CM_DEFLATE,
-            BlockCompressedStreamConstants.GZIP_FLG,
-            0, 0, 0, 0, // Modification time
-            BlockCompressedStreamConstants.GZIP_XFL,
-            (byte)BlockCompressedStreamConstants.GZIP_OS_UNKNOWN,
-            BlockCompressedStreamConstants.GZIP_XLEN, 0, // Little-endian short
-            BlockCompressedStreamConstants.BGZF_ID1,
-            BlockCompressedStreamConstants.BGZF_ID2,
-            BlockCompressedStreamConstants.BGZF_LEN, 0, // Little-endian short
-    };
-}
diff --git a/src/main/java/htsjdk/samtools/util/BlockGunzipper.java b/src/main/java/htsjdk/samtools/util/BlockGunzipper.java
deleted file mode 100644
index 18e9285..0000000
--- a/src/main/java/htsjdk/samtools/util/BlockGunzipper.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFormatException;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.zip.CRC32;
-import java.util.zip.DataFormatException;
-import java.util.zip.Inflater;
-
-/**
- * Alternative to GZIPInputStream, for decompressing GZIP blocks that are already loaded into a byte[].
- * The main advantage is that this object can be used over and over again to decompress many blocks,
- * whereas a new GZIPInputStream and ByteArrayInputStream would otherwise need to be created for each
- * block to be decompressed.
- *
- * This code requires that the GZIP header conform to the GZIP blocks written to BAM files, with
- * a specific subfield and no other optional stuff.
- *
- * @author alecw at broadinstitute.org
- */
-public class BlockGunzipper {
-    private final Inflater inflater = new Inflater(true); // GZIP mode
-    private final CRC32 crc32 = new CRC32();
-    private boolean checkCrcs = false;
-
-    /** Allows the caller to decide whether or not to check CRCs on when uncompressing blocks. */
-    public void setCheckCrcs(final boolean check) {
-        this.checkCrcs = check;
-    }
-
-    /**
-     * Decompress GZIP-compressed data
-     * @param uncompressedBlock must be big enough to hold decompressed output.
-     * @param compressedBlock compressed data starting at offset 0
-     * @param compressedLength size of compressed data, possibly less than the size of the buffer.
-     * @return the uncompressed data size.
-     */
-    public int unzipBlock(byte[] uncompressedBlock, byte[] compressedBlock, int compressedLength) {
-        return unzipBlock(uncompressedBlock, 0, compressedBlock, 0, compressedLength);
-    }
-
-    /**
-     * Decompress GZIP-compressed data
-     * @param uncompressedBlock must be big enough to hold decompressed output.
-     * @param uncompressedBlockOffset the offset into uncompressedBlock.
-     * @param compressedBlock compressed data starting at offset 0.
-     * @param compressedBlock  the offset into the compressed data.
-     * @param compressedLength size of compressed data, possibly less than the size of the buffer.
-     * @return the uncompressed data size.
-     */
-    public int unzipBlock(byte[] uncompressedBlock, int uncompressedBlockOffset,
-                           byte[] compressedBlock, int compressedBlockOffset, int compressedLength) {
-        int uncompressedSize;
-        try {
-            ByteBuffer byteBuffer = ByteBuffer.wrap(compressedBlock, compressedBlockOffset, compressedLength);
-            byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
-            // Validate GZIP header
-            if (byteBuffer.get() != BlockCompressedStreamConstants.GZIP_ID1 ||
-                    byteBuffer.get() != (byte)BlockCompressedStreamConstants.GZIP_ID2 ||
-                    byteBuffer.get() != BlockCompressedStreamConstants.GZIP_CM_DEFLATE ||
-                    byteBuffer.get() != BlockCompressedStreamConstants.GZIP_FLG
-                    ) {
-                throw new SAMFormatException("Invalid GZIP header");
-            }
-            // Skip MTIME, XFL, OS fields
-            byteBuffer.position(byteBuffer.position() + 6);
-            if (byteBuffer.getShort() != BlockCompressedStreamConstants.GZIP_XLEN) {
-                throw new SAMFormatException("Invalid GZIP header");
-            }
-            // Skip blocksize subfield intro
-            byteBuffer.position(byteBuffer.position() + 4);
-            // Read ushort
-            final int totalBlockSize = (byteBuffer.getShort() & 0xffff) + 1;
-            if (totalBlockSize != compressedLength) {
-                throw new SAMFormatException("GZIP blocksize disagreement");
-            }
-
-            // Read expected size and CRD from end of GZIP block
-            final int deflatedSize = compressedLength - BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH - BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH;
-            byteBuffer.position(byteBuffer.position() + deflatedSize);
-            int expectedCrc = byteBuffer.getInt();
-            uncompressedSize = byteBuffer.getInt();
-            inflater.reset();
-
-            // Decompress
-            inflater.setInput(compressedBlock, compressedBlockOffset + BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH, deflatedSize);
-            final int inflatedBytes = inflater.inflate(uncompressedBlock, uncompressedBlockOffset, uncompressedSize);
-            if (inflatedBytes != uncompressedSize) {
-                throw new SAMFormatException("Did not inflate expected amount");
-            }
-
-            // Validate CRC if so desired
-            if (this.checkCrcs) {
-                crc32.reset();
-                crc32.update(uncompressedBlock, uncompressedBlockOffset, uncompressedSize);
-                final long crc = crc32.getValue();
-                if ((int)crc != expectedCrc) {
-                    throw new SAMFormatException("CRC mismatch");
-                }
-            }
-        } catch (DataFormatException e)
-        {
-            throw new RuntimeIOException(e);
-        }
-        return uncompressedSize;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/BufferedLineReader.java b/src/main/java/htsjdk/samtools/util/BufferedLineReader.java
deleted file mode 100644
index de1115d..0000000
--- a/src/main/java/htsjdk/samtools/util/BufferedLineReader.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Defaults;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-
-/**
- * Implementation of LineReader that is a thin wrapper around BufferedReader.  On Linux, this is faster
- * than AsciiLineReaderImpl.  If you use AsciiLineReader rather than this class, it will detect the OS
- * and delegate to the preferred implementation.
- *
- * TODO: Replace this with {@link java.io.LineNumberReader}?
- * 
- * @author alecw at broadinstitute.org
- */
-public class BufferedLineReader implements LineReader {
-
-    private final BufferedReader reader;
-    private int lineNumber = 0;
-    private String peekedLine;
-
-    public BufferedLineReader(final InputStream is) {
-        this(is, Defaults.NON_ZERO_BUFFER_SIZE);
-    }
-
-    public BufferedLineReader(final InputStream is, final int bufferSize) {
-        reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")), bufferSize);
-    }
-
-    /**
-     * Read a line and remove the line terminator
-     *
-     * @return the line read, or null if EOF has been reached.
-     */
-    public String readLine() {
-        ++lineNumber;
-        try {
-            final String ret;
-            if (peekedLine != null) {
-                ret = peekedLine;
-                peekedLine = null;
-            } else {
-            ret = reader.readLine();
-            }
-            return ret;
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * @return 1-based number of line most recently read
-     */
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Non-destructive one-character look-ahead.
-     *
-     * @return If not eof, the next character that would be read.  If eof, -1.
-     */
-    public int peek() {
-        if (peekedLine == null) {
-            try {
-                peekedLine = reader.readLine();
-            } catch (IOException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-        if (peekedLine == null) {
-            return -1;
-        }
-        if (peekedLine.isEmpty()) {
-            return '\n';
-        }
-        return peekedLine.charAt(0);
-    }
-
-    public void close() {
-        peekedLine = null;
-        try {
-            reader.close();
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CigarUtil.java b/src/main/java/htsjdk/samtools/util/CigarUtil.java
deleted file mode 100644
index e6c14ab..0000000
--- a/src/main/java/htsjdk/samtools/util/CigarUtil.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMValidationError;
-import htsjdk.samtools.TextCigarCodec;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CigarUtil {
-        private static final Log log = Log.getInstance(CigarUtil.class);
-
-    /** adjust the cigar based on adapter clipping.
-     * TODO: If there is hard clipping at the end of the input CIGAR, it is lost.  It should not be. 
-     * *
-     * @param clipFrom       1-based position where the clipping starts
-     * @param oldCigar       The existing unclipped cigar
-     * @return               New adjusted list of cigar elements
-     */
-    // package visible so can be unit-tested
-    public static List<CigarElement> softClipEndOfRead(final int clipFrom, final List<CigarElement> oldCigar) {
-        final int clippedBases = (int)CoordMath.getLength(clipFrom, Cigar.getReadLength(oldCigar));
-        List<CigarElement> newCigar = new LinkedList<CigarElement>();
-        int pos = 1;
-
-        for (CigarElement c : oldCigar) {
-            // Distinguish two cases:
-            //	c occurs before the clipped region
-            //	c is adjacent to or straddles the boundary between clipped and unclipped region.
-            //  c never occurs after the clipped region; clipped region is always at the end
-
-            final CigarOperator op = c.getOperator();
-            final int length = op.consumesReadBases()? c.getLength() : 0;
-            final int endPos = pos + length - 1;  // same as pos on next iteration
-
-            if (endPos < (clipFrom - 1)) {
-                // handle elements before clip position (just copy them)
-                newCigar.add(c);
-
-            } else if (endPos >= (clipFrom - 1)) {
-                // handle adjacent or straddling element
-                elementStraddlesClippedRead(newCigar, c,
-                        (clipFrom -1) - (pos -1) , clippedBases);
-                break;
-            }
-
-            pos = endPos + 1;      // update pos for next iteration
-        } // end loop over cigar elements
-        return newCigar;
-    }
-
-    // a cigar element occurs in the middle of an adapter clipping
-    static private void elementStraddlesClippedRead(List<CigarElement> newCigar, CigarElement c,
-                                                    int relativeClippedPosition,
-                                                    int clippedBases){
-        final CigarOperator op = c.getOperator();
-        int clipAmount = clippedBases;
-        if (op.consumesReadBases()){
-            if (op.consumesReferenceBases() & relativeClippedPosition > 0){
-               newCigar.add(new CigarElement(relativeClippedPosition, op));
-            }
-            if (!op.consumesReferenceBases()){
-                clipAmount = clippedBases + relativeClippedPosition;
-            }
-        } else if (relativeClippedPosition != 0){
-                throw new SAMException("Unexpected non-0 relativeClippedPosition " + relativeClippedPosition);
-        }
-        newCigar.add(new CigarElement(clipAmount, CigarOperator.S));  // S is always last element
-    }
-
-    /**
-     * Adds a soft-clip, based on <code>clipFrom</code>, to the SAM record's existing cigar
-     * and, for negative strands, also adjusts the SAM record's start position.
-     * Soft clips the end of the read as the read came off the sequencer.
-     */
-    public static void softClip3PrimeEndOfRead(SAMRecord rec, final int clipFrom) {
-
-        final Cigar cigar = rec.getCigar();
-        // we don't worry about SEED_REGION_LENGTH in clipFrom
-        final boolean negativeStrand = rec.getReadNegativeStrandFlag();
-        List<CigarElement> oldCigar = cigar.getCigarElements();
-
-        if (!isValidCigar(rec, cigar, true)){
-            return; // log message already issued
-        }
-        if (negativeStrand){
-            // Can't just use Collections.reverse() here because oldCigar is unmodifiable
-            oldCigar = new ArrayList<CigarElement>(oldCigar);
-            Collections.reverse(oldCigar);
-        }
-        List<CigarElement> newCigarElems = CigarUtil.softClipEndOfRead(clipFrom, oldCigar);
-
-        if (negativeStrand) {
-            Collections.reverse(newCigarElems);
-        }
-
-        final Cigar newCigar = new Cigar(newCigarElems);
-        if (negativeStrand){
-            int oldLength = cigar.getReferenceLength();
-            int newLength = newCigar.getReferenceLength();
-            int sizeChange = oldLength - newLength;
-            if (sizeChange > 0){
-                rec.setAlignmentStart(rec.getAlignmentStart() + sizeChange);
-            } else if (sizeChange < 0){
-                throw new SAMException("The clipped length " + newLength +
-                        " is longer than the old unclipped length " + oldLength);
-            }
-        }
-        rec.setCigar(newCigar);
-
-        // Check that the end result is not a read without any aligned bases
-        boolean hasMappedBases = false;
-        for (final CigarElement elem : newCigar.getCigarElements()) {
-            final CigarOperator op = elem.getOperator();
-            if (op.consumesReferenceBases() && op.consumesReadBases()) {
-                hasMappedBases = true;
-                break;
-            }
-        }
-
-        if (!hasMappedBases) {
-            rec.setReadUnmappedFlag(true);
-            rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
-            rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-            rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
-            rec.setInferredInsertSize(0);
-        }
-        else if (!isValidCigar(rec, newCigar, false)){
-            // log message already issued
-            throw new IllegalStateException("Invalid new Cigar: " + newCigar  + " (" + oldCigar + ") for " +
-                    rec.getReadName());
-        }
-
-    }
-
-    private static boolean isValidCigar(SAMRecord rec, Cigar cigar, boolean isOldCigar) {
-        if (cigar == null || cigar.getCigarElements() == null || cigar.getCigarElements().isEmpty()) {
-            if (isOldCigar) {
-                if (rec.getReadUnmappedFlag()) {
-                    // don't bother to warn since this does occur for PE reads
-                } else {
-                    log.warn("Cigar is empty for read " + rec);
-                }
-            } else {
-                log.error("Empty new cigar");
-            }
-            return false;
-        }
-
-        if (rec.getReadUnmappedFlag()){
-            log.info("Unmapped read with cigar: " + rec.getReadName() + " (" + rec.getCigarString() + "/" + cigar.toString()  + ")");
-
-        }
-        final List<SAMValidationError> validationErrors = cigar.isValid(rec.getReadName(), -1);
-        if (validationErrors != null && !validationErrors.isEmpty()) {
-            log.error("Invalid cigar for read " + rec +
-                (isOldCigar ? " " : " for new cigar with clipped adapter ") +
-                 " (" + rec.getCigarString() + "/" + cigar.toString()  + ") " +
-                validationErrors);
-            return false;
-        }
-    
-        if (rec.getReadLength() != cigar.getReadLength()){
-            // throw new SAMException(
-            log.error( rec.getReadLength() +
-               " read length does not = cigar length " + cigar.getReferenceLength() +
-               (isOldCigar? " oldCigar " : " ") +
-               rec + " cigar:" + cigar);
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Adds additional soft-clipped bases at the 3' and/or 5' end of the cigar.  Does not
-     * change the existing cigar except to merge the newly added soft-clipped bases if the
-     * element at the end of the cigar being modified is also a soft-clip.
-     *
-     * @param cigar             The cigar on which to base the new cigar
-     * @param negativeStrand    Whether the read is on the negative strand
-     * @param threePrimeEnd     number of soft-clipped bases to add to the 3' end of the read
-     * @param fivePrimeEnd      number of soft-clipped bases to add to the 5' end of the read
-     */
-    public static Cigar addSoftClippedBasesToEndsOfCigar(Cigar cigar, boolean negativeStrand,
-                                                         final int threePrimeEnd, final int fivePrimeEnd) {
-
-        List<CigarElement> newCigar = new ArrayList<CigarElement>(cigar.getCigarElements());
-        if (negativeStrand) {
-            Collections.reverse(newCigar);
-        }
-
-        if (threePrimeEnd > 0) {
-            int last = newCigar.size()-1;
-            int bases = threePrimeEnd;
-            if (newCigar.get(last).getOperator() == CigarOperator.SOFT_CLIP) {
-                CigarElement oldSoftClip = newCigar.remove(last);
-                bases += oldSoftClip.getLength();
-            }
-            newCigar.add(new CigarElement(bases, CigarOperator.SOFT_CLIP));
-        }
-
-        if (fivePrimeEnd > 0) {
-            int bases = fivePrimeEnd;
-            if (newCigar.get(0).getOperator() == CigarOperator.SOFT_CLIP) {
-                CigarElement oldSoftClip = newCigar.remove(0);
-                bases += oldSoftClip.getLength();
-            }
-            newCigar.add(0, new CigarElement(bases, CigarOperator.SOFT_CLIP));
-        }
-
-        if (negativeStrand) {
-            Collections.reverse(newCigar);
-        }
-        return new Cigar(newCigar);
-    }
-
-    // unpack a cigar string into an array of cigarOperators
-    // to facilitate sequence manipulation
-    public static char[] cigarArrayFromElements(List<CigarElement> cigar){
-        int pos = 0;
-        int length = 0;
-        for (CigarElement e : cigar){
-            length += e.getLength();
-        }
-        char[] result = new char[length];
-        for (CigarElement e : cigar){
-            for (int i = 0; i < e.getLength(); i++){
-                CigarOperator o = e.getOperator();
-                result[i+pos] = (char) CigarOperator.enumToCharacter(o);
-            }
-            pos += e.getLength();
-        }
-        return result;
-    }
-
-    // unpack a cigar string into an array of cigarOperators
-    // to facilitate sequence manipulation
-    public static char[] cigarArrayFromString(String cigar){
-          return cigarArrayFromElements(TextCigarCodec.decode(cigar).getCigarElements());
-    }
-
-    // construct a cigar string from an array of cigarOperators.
-    public static String cigarStringFromArray(final char[] cigar){
-        String result = "";
-        int length = cigar.length;
-        char lastOp = 0;  int lastLen = 0;
-        for (int i=0; i < length; i++){
-             if (cigar[i] == lastOp){
-                 lastLen++;
-             } else if (cigar[i] == '-'){
-                 ; // nothing - just ignore '-'
-             } else {
-                 if (lastOp != 0)
-                     result = result + Integer.toString(lastLen) + Character.toString(lastOp);
-                 lastLen = 1;
-                 lastOp = cigar[i];
-             }
-        }
-        return result + Integer.toString(lastLen) + Character.toString(lastOp);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CloseableIterator.java b/src/main/java/htsjdk/samtools/util/CloseableIterator.java
deleted file mode 100755
index d26443e..0000000
--- a/src/main/java/htsjdk/samtools/util/CloseableIterator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.Closeable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Spliterator;
-import java.util.Spliterators;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
-
-/**
- * This interface is used by iterators that use releasable resources during iteration.
- * 
- * The consumer of a CloseableIterator should ensure that the close() method is always called,
- * for example by putting such a call in a finally block.  Two conventions should be followed
- * by all implementors of CloseableIterator:
- * 1) The close() method should be idempotent: calling close() twice should have no effect.
- * 2) When hasNext() returns false, the iterator implementation should automatically close itself.
- *    The latter makes it somewhat safer for consumers to use the for loop syntax for iteration:
- *    for (Type obj : getCloseableIterator()) { ... }
- */
-public interface CloseableIterator<T> extends Iterator<T>, Closeable {
-    /** Should be implemented to close/release any underlying resources. */
-    void close();
-
-    /** Consumes the contents of the iterator and returns it as a List. */
-    default List<T> toList() {
-        final List<T> list = new ArrayList<>();
-        while (hasNext()) list.add(next());
-        close();
-        return list;
-    }
-
-    /** Returns a Stream that will consume from the underlying iterator. */
-    default Stream<T> stream() {
-        final Spliterator<T> s = Spliterators.spliteratorUnknownSize(this, Spliterator.ORDERED);
-        return StreamSupport.stream(s, false).onClose(this::close);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CloserUtil.java b/src/main/java/htsjdk/samtools/util/CloserUtil.java
deleted file mode 100644
index c236197..0000000
--- a/src/main/java/htsjdk/samtools/util/CloserUtil.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Utility to close things that implement Closeable
- * WARNING: This should only be used for Closeable things open for read, because it ignores exceptions, and
- * the caller will probably want to know about exceptions when closing a file being written to, because
- * this may indicate a failure to flush.
- *
- * @author Kathleen Tibbetts
- */
-public class CloserUtil {
-
-    /**
-     * Calls close() on <code>obj</code> if it implements Closeable
-     *
-     * @param obj   The potentially closeable object
-     */
-    public static void close(Object obj) {
-        if (obj != null) {
-            close(Arrays.asList(obj));
-        }
-    }
-
-    /**
-     * Calls close() on all elements of <code>objs</code> that implement Closeable
-     *
-     * @param objs   A list of potentially closeable objects
-     *
-     * NOTE: This method must take a List<? extends Object>, not List<Object>, otherwise the overload above will be selected
-     * if the argument is not exactly List<Object>.
-     */
-    public static void close(List<? extends Object> objs) {
-        for (Object o : objs) {
-            if (o instanceof Closeable) {
-                try {
-                    ((Closeable)o).close();
-                }
-                catch (IOException ioe) {
-                    // Do nothing 
-                }
-            } else if (o instanceof CloseableIterator) {
-                ((CloseableIterator)o).close();
-            }
-            else {
-                try {
-                    java.lang.reflect.Method m = o.getClass().getMethod("close");
-                    m.invoke(o);
-                }
-                catch (Exception e) { /** Ignore */ }
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CodeUtil.java b/src/main/java/htsjdk/samtools/util/CodeUtil.java
deleted file mode 100644
index 29e9348..0000000
--- a/src/main/java/htsjdk/samtools/util/CodeUtil.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * Miscellaneous util methods that don't fit anywhere else.
- */
-public class CodeUtil {
-
-    /** Mimic of Oracle's nvl() - returns the first value if not null, otherwise the second value. */
-    public static <T> T getOrElse(final T value1, final T value2) {
-        if (value1 != null) return value1;
-        else return value2;
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/CollectionUtil.java b/src/main/java/htsjdk/samtools/util/CollectionUtil.java
deleted file mode 100755
index 0354a5b..0000000
--- a/src/main/java/htsjdk/samtools/util/CollectionUtil.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Function;
-
-/**
- * Small utility methods for dealing with collection classes.
- * @author mccowan
- */
-public class CollectionUtil {
-
-    /** Simple case-insensitive lexical comparator of objects using their {@link Object#toString()} value. */
-    final public static Comparator<Object> OBJECT_TOSTRING_COMPARATOR = (o1, o2) -> o1.toString().compareToIgnoreCase(o2.toString());
-
-    public static <T> List<T> makeList(final T... list) {
-        final List<T> result = new ArrayList<>();
-        Collections.addAll(result, list);
-
-        return result;
-    }
-
-    public static <T> Set<T> makeSet(final T... list) {
-        final Set<T> result = new HashSet<>();
-        Collections.addAll(result, list);
-        return result;
-    }
-
-    public static <T> Collection<T> makeCollection(final Iterator<T> i) {
-        final List<T> list = new LinkedList<>();
-        while (i.hasNext()) {
-            list.add(i.next());
-        }
-        return list;
-    }
-
-    /** Construct a string by toString()ing each item in the collection with inBetween between each item. */
-    public static String join(final Collection<?> items, final String inBetween) {
-        final StringBuilder builder = new StringBuilder();
-        for (final Object item : items) {
-            if (builder.length() > 0) builder.append(inBetween);
-            builder.append(item);
-        }
-
-        return builder.toString();
-    }
-
-    public static <T> T getSoleElement(final Collection<T> items) {
-        if (items.size() != 1)
-            throw new IllegalArgumentException(String.format("Expected a single element in %s, but found %s.", items, items.size()));
-        return items.iterator().next();
-    }
-
-    /** Simple multi-map for convenience of storing collections in map values. */
-    public static class MultiMap<K, V> extends HashMap<K, Collection<V>> {
-        public void append(final K k, final V v) {
-            this.initializeKeyIfUninitialized(k);
-            this.get(k).add(v);
-        }
-
-        public void appendAll(final K k, final Collection<? extends V> v) {
-            this.initializeKeyIfUninitialized(k);
-            this.get(k).addAll(v);
-        }
-
-        private void initializeKeyIfUninitialized(final K k) {
-            if (!this.containsKey(k))
-                this.put(k, new LinkedList<>());
-        }
-    }
-
-    /**
-     * Partitions a collection into groups based on a characteristics of that group.  Partitions are embodied in a map, whose keys are the
-     * value of that characteristic, and the values are the partition of elements whose characteristic evaluate to that key.
-     *
-     * @deprecated use java8 .stream().collect(Collectors.groupingBy(()-> function)) instead
-     */
-    @Deprecated
-    public static <K, V> Map<K, Collection<V>> partition(final Collection<V> collection, final Partitioner<V, K> p) {
-        final MultiMap<K, V> partitionToValues = new MultiMap<>();
-        for (final V entry : collection) {
-            partitionToValues.append(p.getPartition(entry), entry);
-        }
-        return partitionToValues;
-    }
-
-    /**
-     * @deprecated use Collectors.groupingBy instead
-     */
-    @Deprecated
-    public static abstract class Partitioner<V, K> {
-        public abstract K getPartition(final V v);
-    }
-
-    /**
-     * Partitions a collection into groups based on a characteristics of that group.  Partitions are embodied in a map, whose keys are the
-     * value of that characteristic, and the values are the partition of elements whose characteristic evaluate to that key.
-     */
-    public static <K, V> Map<K, Collection<V>> partition(final Collection<V> collection, final Function<? super V, ? extends K> keyer) {
-        final MultiMap<K, V> partitionToValues = new MultiMap<>();
-        for (final V entry : collection) {
-            partitionToValues.append(keyer.apply(entry), entry);
-        }
-        return partitionToValues;
-    }
-
-    /**
-     * A defaulting map, which returns a default value when a value that does not exist in the map is looked up.
-     * 
-     * This map supports two modes: injecting-on-default, and not injecting-on-default.  When injecting on default, when a lookup is
-     * performed and a default value is returned, the default value is injected at that key, so that it now lives in the underlying map.
-     * Without this mode, the value is simply returned and the underlying map is unaffected.
-     * 
-     * Note: When using injecting-on-default mode, and performing a lookup with a non-key type (the get method accepts any object), a 
-     * class cast exception will be thrown because a non-key type cannot be added to the map.
-     * @param <K>
-     * @param <V>
-     */
-    public static class DefaultingMap<K, V> extends HashMap<K, V> {
-        final Factory<V, K> defaultGenerator;
-        final boolean injectValueOnDefault;
-        
-        /** Creates a defaulting map which defaults to the provided value and with injecting-on-default disabled. */
-        public DefaultingMap(final V defaultValue) {
-            this(k -> defaultValue, false);
-        }
-        
-        /**
-         * Creates a defaulting map that generates defaults from the provided factory. This is useful when the default is non-static, or
-         * the default is mutable, and the client wishes to get a value and mutate it and persist those changes in the map.
-         */
-        public DefaultingMap(final Factory<V, K> defaultGenerator, final boolean injectValueOnDefaulting) {
-            this.defaultGenerator = defaultGenerator;
-            this.injectValueOnDefault = injectValueOnDefaulting;
-        }
-
-        @Override
-        @SuppressWarnings("unchecked") // Expect that the cast is successful; otherwise, client is breaking contract.
-        public V get(final Object key) {
-            if (!this.containsKey(key)) {
-                final V val = this.defaultGenerator.make((K) key);
-                if (this.injectValueOnDefault) {
-                    this.put((K) key, val); 
-                }
-                return val;
-            } else {
-                return super.get(key);
-            }
-        }
-        
-        public interface Factory<V, K> {
-            /**
-             * @param k
-             */
-            V make(K k);
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/ComparableTuple.java b/src/main/java/htsjdk/samtools/util/ComparableTuple.java
deleted file mode 100644
index 1fe86ed..0000000
--- a/src/main/java/htsjdk/samtools/util/ComparableTuple.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * A simple extension of the Tuple class that, for comparable Types, allows comparing Tuples of non-null elements.
- * <p>
- * The comparison will compare the first arguments and if equal (compareTo returns 0) compare the second arguments.
- *
- * @author farjoun
- */
-public class ComparableTuple<A extends Comparable<A>, B extends Comparable<B>> extends Tuple<A, B> implements Comparable<ComparableTuple<A, B>> {
-
-    public ComparableTuple(final A a, final B b) {
-        super(a, b);
-
-        if (a == null || b == null) {
-            throw new IllegalArgumentException("ComparableTuple's behavior is undefined when containing a null.");
-        }
-    }
-
-    @Override
-    public int compareTo(final ComparableTuple<A, B> o) {
-        int retval = a.compareTo(o.a);
-        if (retval == 0) {
-            retval = b.compareTo(o.b);
-        }
-        return retval;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CoordMath.java b/src/main/java/htsjdk/samtools/util/CoordMath.java
deleted file mode 100644
index 7682026..0000000
--- a/src/main/java/htsjdk/samtools/util/CoordMath.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Static methods that encapsulate the standard SAM way of storing ranges: one-based, with both ends
- * inclusive.
- */
-public class CoordMath {
-
-    public static int getLength(final int start, final int end) {
-        return (end - start) + 1;
-    }
-
-    public static int getStart(final int end, final int length) {
-        return end - length + 1;
-    }
-
-    public static int getEnd(final int start, final int length) {
-        return start + length - 1;
-    }
-
-    /**
-     * Checks to see if the two sets of coordinates have any overlap.
-     */
-    public static boolean overlaps(final int start, final int end, final int start2, final int end2) {
-        return (start2 >= start && start2 <= end) || (end2 >=start && end2 <= end) ||
-                encloses(start2, end2, start, end);
-    }
-
-    /** Returns true if the "inner" coords and totally enclosed by the "outer" coords. */
-    public static boolean encloses(final int outerStart, final int outerEnd, final int innerStart, final int innerEnd) {
-        return innerStart >= outerStart && innerEnd <= outerEnd;
-    }
-
-    /**
-     * Determines the amount of overlap between two coordinate ranges. Assumes that the two ranges
-     * actually do overlap and therefore may produce strange results when they do not!
-     */
-    public static int getOverlap(final int start, final int end, final int start2, final int end2) {
-        return getLength(Math.max(start, start2), Math.min(end, end2));
-    }
-    
-    /** 
-     * Determines the read cycle number for the base
-     * 
-     *  @param isNegativeStrand true if the read is negative strand
-     *  @param readLength
-     *  @param readBaseIndex the 0-based index of the read base in question
-     */
-    public static int getCycle(boolean isNegativeStrand, int readLength, final int readBaseIndex) {
-        return isNegativeStrand ? readLength - readBaseIndex : readBaseIndex + 1;
-    }
-    
-}
diff --git a/src/main/java/htsjdk/samtools/util/CoordSpanInputSteam.java b/src/main/java/htsjdk/samtools/util/CoordSpanInputSteam.java
deleted file mode 100644
index 92f60f7..0000000
--- a/src/main/java/htsjdk/samtools/util/CoordSpanInputSteam.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * An input stream that wraps a {@link htsjdk.samtools.seekablestream.SeekableStream} to produce only bytes specified within coordinates.
- * Created by vadim on 25/03/2015.
- */
-public class CoordSpanInputSteam extends InputStream {
-    private SeekableStream delegate;
-    private Iterator<Chunk> it;
-    private Chunk current;
-    private boolean eof = false;
-
-    /**
-     * Wrap {@link htsjdk.samtools.seekablestream.SeekableStream} to read only bytes within boundaries specified in the coords array.
-     * The coords array consists of [inclusive; exclusive) pairs of long coordinates.
-     * This constructor will throw exception if a start coordinate is beyond stream length.
-     * End coordinates are capped at the stream length.
-     */
-    public CoordSpanInputSteam(SeekableStream delegate, long[] coords) throws IOException {
-        this.delegate = delegate;
-
-        List<Chunk> chunks = new ArrayList<Chunk>();
-        for (int i = 0; i < coords.length; i += 2) {
-            if (coords[i] > delegate.length()) throw new RuntimeException("Chunk start is passed EOF: " + coords[i]);
-            Chunk chunk = new Chunk(coords[i], coords[i + 1] > delegate.length() ? delegate.length() : coords[i + 1]);
-            chunks.add(chunk);
-            System.err.printf("Adding chunk: %d - %d\n", chunk.getChunkStart(), chunk.getChunkEnd());
-        }
-        it = chunks.iterator();
-        nextChunk();
-    }
-
-    private void nextChunk() throws IOException {
-        if (eof || !it.hasNext()) {
-            eof = true;
-            return;
-        }
-
-        current = it.next();
-        delegate.seek(current.getChunkStart());
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (eof || delegate.eof()) {
-            eof = true;
-            return -1;
-        }
-
-        if (delegate.position() < current.getChunkEnd())
-            return delegate.read();
-
-        nextChunk();
-
-        if (eof) return -1;
-        return delegate.read();
-    }
-
-    @Override
-    public int read(byte[] buffer, int offset, int length) throws IOException {
-        if (eof || delegate.eof()) {
-            eof = true;
-            return -1;
-        }
-
-        int available = available();
-        if (available > length) return delegate.read(buffer, offset, length);
-
-        int read = delegate.read(buffer, offset, available);
-        if (delegate.position() >= current.getChunkEnd())
-            nextChunk();
-        return read;
-    }
-
-    /**
-     * Returns how many bytes are left in the current chunk.
-     *
-     * @return number of unread bytes in the current chunk.
-     * @throws IOException
-     */
-    @Override
-    public int available() throws IOException {
-        return (int) (current.getChunkEnd() - delegate.position());
-    }
-
-    @Override
-    public void close() throws IOException {
-        delegate.close();
-        it = null;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/CustomGzipOutputStream.java b/src/main/java/htsjdk/samtools/util/CustomGzipOutputStream.java
deleted file mode 100644
index cb3652e..0000000
--- a/src/main/java/htsjdk/samtools/util/CustomGzipOutputStream.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Hacky little class used to allow us to set the compression level on a GZIP output stream which, for some
- * bizarre reason, is not exposed in the standard API.
- *
- * @author Tim Fennell
- */
-public class CustomGzipOutputStream extends GZIPOutputStream {
-    CustomGzipOutputStream(final OutputStream outputStream, final int bufferSize, final int compressionLevel) throws
-            IOException {
-        super(outputStream, bufferSize);
-        this.def.setLevel(compressionLevel);
-    }
-
-    CustomGzipOutputStream(final OutputStream outputStream, final int compressionLevel) throws IOException {
-        super(outputStream);
-        this.def.setLevel(compressionLevel);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/DateParser.java b/src/main/java/htsjdk/samtools/util/DateParser.java
deleted file mode 100644
index 02a9609..0000000
--- a/src/main/java/htsjdk/samtools/util/DateParser.java
+++ /dev/null
@@ -1,337 +0,0 @@
-// DateParser.java
-// $Id: DateParser.java,v 1.3 2001/01/04 13:26:19 bmahe Exp $
-// (c) COPYRIGHT MIT, INRIA and Keio, 2000.
-
-/*
-W3C IPR SOFTWARE NOTICE
-
-Copyright 1995-1998 World Wide Web Consortium, (Massachusetts Institute of
-Technology, Institut National de Recherche en Informatique et en
-Automatique, Keio University). All Rights Reserved.
-http://www.w3.org/Consortium/Legal/
-
-This W3C work (including software, documents, or other related items) is
-being provided by the copyright holders under the following license. By
-obtaining, using and/or copying this work, you (the licensee) agree that you
-have read, understood, and will comply with the following terms and
-conditions:
-
-Permission to use, copy, and modify this software and its documentation,
-with or without modification,  for any purpose and without fee or royalty is
-hereby granted, provided that you include the following on ALL copies of the
-software and documentation or portions thereof, including modifications,
-that you make:
-
-  1. The full text of this NOTICE in a location viewable to users of the
-     redistributed or derivative work.
-  2. Any pre-existing intellectual property disclaimers, notices, or terms
-     and conditions. If none exist, a short notice of the following form
-     (hypertext is preferred, text is permitted) should be used within the
-     body of any redistributed or derivative code: "Copyright World Wide
-     Web Consortium, (Massachusetts Institute of Technology, Institut
-     National de Recherche en Informatique et en Automatique, Keio
-     University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
-  3. Notice of any changes or modifications to the W3C files, including the
-     date changes were made. (We recommend you provide URIs to the location
-     from which the code is derived).
-
-In addition, creators of derivitive works must include the full text of this
-NOTICE in a location viewable to users of the derivitive work.
-
-THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
-MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
-PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
-ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
-
-COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
-DOCUMENTATION.
-
-The name and trademarks of copyright holders may NOT be used in advertising
-or publicity pertaining to the software without specific, written prior
-permission. Title to copyright in this software and any associated
-documentation will at all times remain with copyright holders.
-
-____________________________________
-
-This formulation of W3C's notice and license became active on August 14
-1998. See the older formulation for the policy prior to this date. Please
-see our Copyright FAQ for common questions about using materials from our
-site, including specific terms and conditions for packages like libwww,
-Amaya, and Jigsaw. Other questions about this notice can be directed to
-site-policy at w3.org .
-
-
-
-
-webmaster
-(last updated 14-Aug-1998)
-
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-
-/**
- * NOTE: This code has been taken from w3.org, and modified slightly to handle timezones of the form [-+]DDDD,
- * and also to fix a bug in the application of time zone to the parsed date.
- *
- * Date parser for ISO 8601 format
- * http://www.w3.org/TR/1998/NOTE-datetime-19980827
- * @version $Revision: 1.3 $
- * @author  bmahe at w3.org
- */
-public class DateParser {
-
-    private static boolean check(StringTokenizer st, String token)
-            throws InvalidDateException
-    {
-        if (!st.hasMoreElements()) return false;
-        if (st.nextToken().equals(token)) {
-            return true;
-        } else {
-            throw new InvalidDateException("Missing ["+token+"]");
-        }
-    }
-
-    private static Calendar getCalendar(String isodate)
-            throws InvalidDateException
-    {
-        // YYYY-MM-DDThh:mm:ss.sTZD
-        StringTokenizer st = new StringTokenizer(isodate, "-T:.+Z", true);
-
-        Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
-        calendar.clear();
-        try {
-            // Year
-            if (st.hasMoreTokens()) {
-                int year = Integer.parseInt(st.nextToken());
-                calendar.set(Calendar.YEAR, year);
-            } else {
-                return calendar;
-            }
-            // Month
-            if (check(st, "-") && (st.hasMoreTokens())) {
-                int month = Integer.parseInt(st.nextToken()) -1;
-                calendar.set(Calendar.MONTH, month);
-            } else {
-                return calendar;
-            }
-            // Day
-            if (check(st, "-") && (st.hasMoreTokens())) {
-                int day = Integer.parseInt(st.nextToken());
-                calendar.set(Calendar.DAY_OF_MONTH, day);
-            } else {
-                return calendar;
-            }
-            // Hour
-            if (check(st, "T") && (st.hasMoreTokens())) {
-                int hour = Integer.parseInt(st.nextToken());
-                calendar.set(Calendar.HOUR_OF_DAY, hour);
-            } else {
-                calendar.set(Calendar.HOUR_OF_DAY, 0);
-                calendar.set(Calendar.MINUTE, 0);
-                calendar.set(Calendar.SECOND, 0);
-                calendar.set(Calendar.MILLISECOND, 0);
-                return calendar;
-            }
-            // Minutes
-            if (check(st, ":") && (st.hasMoreTokens())) {
-                int minutes = Integer.parseInt(st.nextToken());
-                calendar.set(Calendar.MINUTE, minutes);
-            } else {
-                calendar.set(Calendar.MINUTE, 0);
-                calendar.set(Calendar.SECOND, 0);
-                calendar.set(Calendar.MILLISECOND, 0);
-                return calendar;
-            }
-
-            //
-            // Not mandatory now
-            //
-
-            // Secondes
-            if (! st.hasMoreTokens()) {
-                return calendar;
-            }
-            String tok = st.nextToken();
-            if (tok.equals(":")) { // secondes
-                if (st.hasMoreTokens()) {
-                    int secondes = Integer.parseInt(st.nextToken());
-                    calendar.set(Calendar.SECOND, secondes);
-                    if (! st.hasMoreTokens()) {
-                        return calendar;
-                    }
-                    // frac sec
-                    tok = st.nextToken();
-                    if (tok.equals(".")) {
-                        // bug fixed, thx to Martin Bottcher
-                        String nt = st.nextToken();
-                        while(nt.length() < 3) {
-                            nt += "0";
-                        }
-                        nt = nt.substring( 0, 3 ); //Cut trailing chars..
-                        int millisec = Integer.parseInt(nt);
-                        //int millisec = Integer.parseInt(st.nextToken()) * 10;
-                        calendar.set(Calendar.MILLISECOND, millisec);
-                        if (! st.hasMoreTokens()) {
-                            return calendar;
-                        }
-                        tok = st.nextToken();
-                    } else {
-                        calendar.set(Calendar.MILLISECOND, 0);
-                    }
-                } else {
-                    throw new InvalidDateException("No secondes specified");
-                }
-            } else {
-                calendar.set(Calendar.SECOND, 0);
-                calendar.set(Calendar.MILLISECOND, 0);
-            }
-            // Timezone
-            if (! tok.equals("Z")) { // UTC
-                if (! (tok.equals("+") || tok.equals("-"))) {
-                    throw new InvalidDateException("only Z, + or - allowed");
-                }
-                boolean plus = tok.equals("+");
-                if (! st.hasMoreTokens()) {
-                    throw new InvalidDateException("Missing hour field");
-                }
-                int tzhour = Integer.parseInt(st.nextToken());
-                int tzmin  = 0;
-                if (check(st, ":") && (st.hasMoreTokens())) {
-                    tzmin = Integer.parseInt(st.nextToken());
-                } else {
-                    // Modified by AW -- minute field is not required, and minutes may be represented
-                    // without colon between hours and minutes
-                    // throw new InvalidDateException("Missing minute field");
-                    if (tzhour >= 100) {
-                        tzmin = tzhour % 100;
-                        tzhour /= 100;
-                    }
-                }
-                if (!plus) { // Modified by AW -- !plus instead of plus
-                    calendar.add(Calendar.HOUR, tzhour);
-                    calendar.add(Calendar.MINUTE, tzmin);
-                } else {
-                    calendar.add(Calendar.HOUR, -tzhour);
-                    calendar.add(Calendar.MINUTE, -tzmin);
-                }
-            }
-        } catch (NumberFormatException ex) {
-            throw new InvalidDateException("["+ex.getMessage()+
-                    "] is not an integer");
-        }
-        return calendar;
-    }
-
-    /**
-     * Parse the given string in ISO 8601 format and build a Date object.
-     * @param isodate the date in ISO 8601 format
-     * @return a Date instance
-     * @exception InvalidDateException if the date is not valid
-     */
-    public static Date parse(String isodate)
-            throws InvalidDateException
-    {
-        Calendar calendar = getCalendar(isodate);
-        return calendar.getTime();
-    }
-
-    private static String twoDigit(int i) {
-        if (i >=0 && i < 10) {
-            return "0"+String.valueOf(i);
-        }
-        return String.valueOf(i);
-    }
-
-    /**
-     * Generate a ISO 8601 date
-     * @param date a Date instance
-     * @return a string representing the date in the ISO 8601 format
-     */
-    public static String getIsoDate(Date date) {
-        Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
-        calendar.setTime(date);
-        return new StringBuffer().append(calendar.get(Calendar.YEAR))
-                .append("-")
-                .append(twoDigit(calendar.get(Calendar.MONTH) + 1))
-                .append("-")
-                .append(twoDigit(calendar.get(Calendar.DAY_OF_MONTH)))
-                .append("T")
-                .append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY)))
-                .append(":")
-                .append(twoDigit(calendar.get(Calendar.MINUTE)))
-                .append(":")
-                .append(twoDigit(calendar.get(Calendar.SECOND)))
-                .append(".")
-                .append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10))
-                .append("Z").toString();
-    }
-
-    public static void test(String isodate) {
-        System.out.println("----------------------------------");
-        try {
-            Date date = parse(isodate);
-            System.out.println(">> "+isodate);
-            System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
-            System.out.println(">> "+getIsoDate(date));
-        } catch (InvalidDateException ex) {
-            System.err.println(isodate+" is invalid");
-            System.err.println(ex.getMessage());
-        }
-        System.out.println("----------------------------------");
-    }
-
-    public static void test(Date date) {
-        String isodate = null;
-        System.out.println("----------------------------------");
-        try {
-            System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
-            isodate = getIsoDate(date);
-            System.out.println(">> "+isodate);
-            date = parse(isodate);
-            System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
-        } catch (InvalidDateException ex) {
-            System.err.println(isodate+" is invalid");
-            System.err.println(ex.getMessage());
-        }
-        System.out.println("----------------------------------");
-    }
-
-    public static void main(String args[]) {
-        test("1997-07-16T19:20:30.45-02:00");
-        test("1997-07-16T19:20:30+01:00");
-        test("1997-07-16T19:20:30+01:00");
-        test("1997-07-16T19:20");
-        test("1997-07-16");
-        test("1997-07");
-        test("1997");
-        test(new Date());
-    }
-
-    public static class InvalidDateException extends SAMException {
-        public InvalidDateException() {
-        }
-
-        public InvalidDateException(final String s) {
-            super(s);
-        }
-
-        public InvalidDateException(final String s, final Throwable throwable) {
-            super(s, throwable);
-        }
-
-        public InvalidDateException(final Throwable throwable) {
-            super(throwable);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/DelegatingIterator.java b/src/main/java/htsjdk/samtools/util/DelegatingIterator.java
deleted file mode 100644
index 054352b..0000000
--- a/src/main/java/htsjdk/samtools/util/DelegatingIterator.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.util.Iterator;
-
-/**
- * Simple iterator class that delegates all method calls to an underlying iterator. Useful
- * for in-line subclassing to add behaviour to one or more methods.
- *
- * @author Tim Fennell
- */
-public class DelegatingIterator<T> implements CloseableIterator<T> {
-    private final Iterator<T> iterator;
-
-    public DelegatingIterator(final Iterator<T> iterator) {
-        this.iterator = iterator;
-    }
-
-    public void close() {
-        if (iterator instanceof CloseableIterator) {
-            ((CloseableIterator) this.iterator).close();
-        }
-    }
-
-    public boolean hasNext() {
-        return this.iterator.hasNext();
-    }
-
-    public T next() {
-        return this.iterator.next();
-    }
-
-    public void remove() {
-        this.iterator.remove();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/DiskBackedQueue.java b/src/main/java/htsjdk/samtools/util/DiskBackedQueue.java
deleted file mode 100644
index bbf3818..0000000
--- a/src/main/java/htsjdk/samtools/util/DiskBackedQueue.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayDeque;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-
-/**
- * A single-ended FIFO queue. Writes elements to temporary files when the queue gets too big.
- * External references to elements in this queue are NOT guaranteed to be valid, due to the disk write/read
- * <p/>
- * NB: The queue becomes read-only after the first time that an on-disk record is "next up" to be read (i.e. has been
- * loaded into headRecord). Max size is therefore non-deterministic.
- * This avoids issues arising from conflicts between the input and output streams.
- * This could perhaps be avoided by creating a version of BAMRecordCodec that operates on RandomAccessFiles or channels.
- * <p/>
- *
- *
- * Created by bradt on 4/28/14.
- */
-public class DiskBackedQueue<E> implements Queue<E> {
-    private final int maxRecordsInRamQueue;
-    private final Queue<E> ramRecords;
-    private File diskRecords = null;
-    private final TempStreamFactory tempStreamFactory = new TempStreamFactory();
-    private OutputStream outputStream = null;
-    private InputStream inputStream = null;
-    private boolean canAdd = true;
-    private int numRecordsOnDisk = 0;
-
-    /** Record representing the head of the queue; returned by peek, poll **/
-    private E headRecord = null;
-
-    /** Directories where file of records go. **/
-    private final List<File> tmpDirs;
-
-    /**
-     * Used to write records to file, and used as a prototype to create codecs for reading.
-     */
-    private final SortingCollection.Codec<E> codec;
-
-
-    /**
-     * Prepare to accumulate records
-     *
-     * @param codec For writing records to file and reading them back into RAM
-     * @param maxRecordsInRam how many records to accumulate before spilling to disk
-     * @param tmpDirs Where to write files of records that will not fit in RAM
-     */
-    private DiskBackedQueue(final SortingCollection.Codec<E> codec,
-                            final int maxRecordsInRam, final List<File> tmpDirs) {
-        if (maxRecordsInRam < 0) {
-            throw new IllegalArgumentException("maxRecordsInRamQueue must be >= 0");
-        }
-        if (tmpDirs == null || tmpDirs.isEmpty()) {
-            throw new IllegalArgumentException("At least one temp directory must be provided.");
-        }
-        for (final File tmpDir : tmpDirs) IOUtil.assertDirectoryIsWritable(tmpDir);
-        this.tmpDirs = tmpDirs;
-        this.codec = codec;
-        this.maxRecordsInRamQueue = (maxRecordsInRam == 0) ? 0 : maxRecordsInRam - 1; // the first of our ram records is stored as headRecord
-        this.ramRecords = new ArrayDeque<E>(this.maxRecordsInRamQueue);
-    }
-
-    /**
-     * Syntactic sugar around the ctor, to save some typing of type parameters
-     *
-     * @param codec For writing records to file and reading them back into RAM
-     * @param maxRecordsInRam how many records to accumulate in memory before spilling to disk
-     * @param tmpDir Where to write files of records that will not fit in RAM
-     */
-    public static <T> DiskBackedQueue<T> newInstance(final SortingCollection.Codec<T> codec,
-                                                     final int maxRecordsInRam,
-                                                     final List<File> tmpDir) {
-        return new DiskBackedQueue<T>(codec, maxRecordsInRam, tmpDir);
-    }
-
-    public boolean canAdd() {
-        return this.canAdd;
-    }
-
-    public int getNumRecordsOnDisk() {
-        return this.numRecordsOnDisk;
-    }
-
-    public boolean headRecordIsFromDisk() {
-        return (!this.canAdd);
-    }
-
-    /**
-     * Add the record to the tail of the queue, spilling to disk if necessary
-     * Must check that (canAdd() == true) before calling this method
-     *
-     * @param record The record to be added to the queue
-     * @return true (if add successful)
-     * @throws IllegalStateException if the queue cannot be added to
-     */
-    public boolean add(final E record) throws IllegalStateException {
-        if (!canAdd) throw new IllegalStateException("Cannot add to DiskBackedQueue whose canAdd() method returns false");
-
-        // NB: we add all the records before removing them, so we can never have spilled to disk unless all the space for ram records
-        // have been exhausted.
-        if (this.headRecord == null) { // this is the first record in the queue
-            if (0 < this.numRecordsOnDisk) throw new SAMException("Head record was null but we have records on disk. Bug!");
-            this.headRecord = record;
-        }
-        else if (this.ramRecords.size() == this.maxRecordsInRamQueue) {
-            spillToDisk(record);
-        }
-        else {
-            if (0 < this.numRecordsOnDisk) throw new SAMException("Trying to add records to RAM but there were records on disk. Bug!");
-            this.ramRecords.add(record);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean offer(final E e) {
-        return this.canAdd && this.add(e);
-    }
-
-    @Override
-    public E remove() {
-        final E element = this.poll();
-        if (element == null) {
-            throw new NoSuchElementException("Attempting to remove() from empty DiskBackedQueue");
-        }
-        else {
-            return element;
-        }
-    }
-
-    @Override
-    public E poll() {
-        final E outRecord = this.headRecord;
-        if (outRecord != null) {
-            updateQueueHead();
-        }
-        return outRecord;
-    }
-
-    @Override
-    public E element() {
-        if (this.headRecord != null) {
-            return this.headRecord;
-        }
-        else {
-            throw new NoSuchElementException("Attempting to element() from empty DiskBackedQueue");
-        }
-    }
-
-    @Override
-    public E peek() {
-        return this.headRecord;
-    }
-
-    /**
-     * Return the total number of elements in the queue, both in memory and on disk
-     */
-    public int size() {
-        return (this.headRecord == null) ? 0 : (1 + this.ramRecords.size() + this.numRecordsOnDisk);
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return (this.headRecord == null);
-    }
-
-    /**
-     * Add all elements from collection c to this DiskBackedQueue
-     * Must check that (canAdd() == true) before calling this method
-     *
-     * @param c the collection of elements to add
-     * @return true if this collection changed as a result of the call
-     * @throws IllegalStateException if the queue cannot be added to
-     */
-    @Override
-    public boolean addAll(final Collection<? extends E> c) {
-        try {
-            for (final E element : c) {
-                this.add(element);
-            }
-            return true;
-        } catch (final IllegalStateException e) {
-            throw new IllegalStateException("Cannot add to DiskBackedQueue whose canAdd() method returns false", e);
-        }
-    }
-
-    @Override
-    public void clear() {
-        this.headRecord = null;
-        this.ramRecords.clear();
-        this.closeIOResources();
-        this.outputStream = null;
-        this.inputStream = null;
-        this.diskRecords = null;
-        this.canAdd = true;
-    }
-
-    /**
-     * Clean up disk resources in case clear() has not been explicitly called (as would be preferable)
-     * Closes the input and output streams associated with this DiskBackedQueue and deletes the temporary file
-     *
-     * @throws Throwable
-     */
-    protected void finalize() throws Throwable {
-        this.closeIOResources();
-        super.finalize(); // NB: intellij wanted me to do this. Need I?  I'm not extending anything
-    }
-
-    /**
-     * Write the present record to the end of a file representing the tail of the queue.
-     * @throws RuntimeIOException
-     */
-    private void spillToDisk(final E record) throws RuntimeIOException {
-        try {
-            if (this.diskRecords == null) {
-                this.diskRecords = newTempFile();
-                this.outputStream = tempStreamFactory.wrapTempOutputStream(new FileOutputStream(this.diskRecords), Defaults.BUFFER_SIZE);
-                this.codec.setOutputStream(this.outputStream);
-            }
-            this.codec.encode(record);
-            this.outputStream.flush();
-            this.numRecordsOnDisk++;
-        } catch (final IOException e) {
-            throw new RuntimeIOException("Problem writing temporary file. Try setting TMP_DIR to a file system with lots of space.", e);
-        }
-    }
-
-    /**
-     * Creates a new tmp file on one of the available temp filesystems, registers it for deletion
-     * on JVM exit and then returns it.
-     */
-    private File newTempFile() throws IOException {
-        return IOUtil.newTempFile("diskbackedqueue.", ".tmp", this.tmpDirs.toArray(new File[tmpDirs.size()]), IOUtil.FIVE_GBS);
-    }
-
-    /**
-     * Update the head of the queue with the next record in memory or on disk.
-     * Sets headRecord to null if the queue is now empty
-     */
-    private void updateQueueHead() {
-        if (!this.ramRecords.isEmpty()) {
-            this.headRecord = this.ramRecords.poll();
-            if (0 < numRecordsOnDisk) this.canAdd = false;
-        }
-        else if (this.diskRecords != null) {
-            this.headRecord = this.readFileRecord(this.diskRecords);
-            this.canAdd = false;
-        }
-        else {
-            this.canAdd = true;
-            this.headRecord = null;
-        }
-    }
-
-    /**
-     * Read back a record that had been spilled to disk. Return null if there are no disk records
-     * Note- if we are reading disk records, we can no longer add additional elements to this DiskBackedQueue
-     *
-     * @param file the file to read from
-     * @return The next element from the head of the file, or null if end-of-file is reached
-     * @throws RuntimeIOException
-     */
-    private E readFileRecord (final File file) {
-        if (this.canAdd) this.canAdd = false; // NB: should this just be an assignment regardless?
-
-        // we never wrote a record to disk
-        if (file == null) {
-            throw new IllegalStateException("The file to read from was null");
-        }
-        try {
-            if (this.inputStream == null) {
-                inputStream = new FileInputStream(file);
-                this.codec.setInputStream(tempStreamFactory.wrapTempInputStream(inputStream, Defaults.BUFFER_SIZE));
-            }
-            final E record = this.codec.decode(); // NB: returns null if end-of-file is reached.
-            if (record != null) {
-                numRecordsOnDisk--;
-            }
-            return record;
-        } catch (final IOException e) {
-            throw new RuntimeIOException("DiskBackedQueue encountered an error reading from a file", e);
-        }
-    }
-
-    private void closeIOResources() {
-        CloserUtil.close(this.outputStream);
-        CloserUtil.close(this.inputStream);
-        if (this.diskRecords != null) IOUtil.deleteFiles(this.diskRecords);
-    }
-
-    /**
-     * Not supported. Cannot access particular elements, as some elements may have been written to disk
-     *
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public boolean remove(final Object o) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support remove(Object o)");
-    }
-
-    /**
-     * Not supported. Cannot access particular elements, as some elements may have been written to disk
-     *
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public boolean removeAll(final Collection<?> c) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support removeAll(Collection<?> c)");
-    }
-
-    /**
-     * Not supported. Cannot access particular elements, as some elements may have been written to disk
-     *
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public boolean retainAll(final Collection<?> c) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support retainAll(Collection<?> c)");
-    }
-
-    /**
-     * Not supported. It is not possible to check for the presence of a particular element,
-     * as some elements may have been written to disk
-     *
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public boolean contains(final Object o) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support contains(Object o)");
-    }
-
-    /**
-     * Not supported. It is not possible to check for the presence of a particular element,
-     * as some elements may have been written to disk
-     *
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public boolean containsAll(final Collection<?> c) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support containsAll(Collection<?> c)");
-    }
-
-    /**
-     * Not supported at this time
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public Iterator<E> iterator() {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support iterator()");
-    }
-
-    /**
-     * Not supported at this time
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public Object[] toArray() {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support toArray()");
-    }
-
-    /**
-     * Not supported at this time
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public <T1> T1[] toArray(final T1[] a) {
-        throw new UnsupportedOperationException("DiskBackedQueue does not support toArray(T1[] a)");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/EdgeReadIterator.java b/src/main/java/htsjdk/samtools/util/EdgeReadIterator.java
deleted file mode 100644
index 0d779a8..0000000
--- a/src/main/java/htsjdk/samtools/util/EdgeReadIterator.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.AlignmentBlock;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SamReader;
-
-/**
- * Iterator that traverses a SAM File, accumulating information on a per-locus basis.
- * Optionally takes a target interval list, in which case the loci returned are the ones covered by
- * the interval list.  If no target interval list, whatever loci are covered by the input reads are returned.
- * By default duplicate reads and non-primary alignments are filtered out.  Filtering may be changed
- * via setSamFilters(). Difference from SamLocusIterator is that this implementation accumulates data
- * only about start and end of alignment blocks from reads, not about each aligned base.
- * 
- * @author Darina_Nikolaeva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * 
- */
-public class EdgeReadIterator extends AbstractLocusIterator<EdgingRecordAndOffset, AbstractLocusInfo<EdgingRecordAndOffset>> {
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments.  Do not use
-     * BAM index even if available.
-     *
-     * @param samReader must be coordinate sorted
-     */
-    public EdgeReadIterator(final SamReader samReader) {
-        this(samReader, null);
-    }
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments.
-     *
-     * @param samReader    must be coordinate sorted
-     * @param intervalList Either the list of desired intervals, or null.  Note that if an intervalList is
-     *                     passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
-     */
-    public EdgeReadIterator(final SamReader samReader, final IntervalList intervalList) {
-        this(samReader, intervalList, samReader.hasIndex());
-    }
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments
-     *
-     * @param samReader    must be coordinate sorted
-     * @param intervalList Either the list of desired intervals, or null.  Note that if an intervalList is
-     *                     passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
-     * @param useIndex     If true, do indexed lookup to improve performance.  Not relevant if intervalList == null.
-     *                     It is no longer the case the useIndex==true can make performance worse.  It should always perform at least
-     *                     as well as useIndex==false, and generally will be much faster.
-     */
-    public EdgeReadIterator(final SamReader samReader, final IntervalList intervalList, final boolean useIndex) {
-        super(samReader, intervalList, useIndex);
-    }
-
-    /**
-     * Capture the loci covered by the given SAMRecord in the AbstractLocusInfos in the accumulator,
-     * creating new AbstractLocusInfos as needed. EdgingRecordAndOffset object are created only for start
-     * and end of each alignment block of SAMRecord.
-     * If list of intervals is defined, start or/and length of alignment block are shifted to match the interval, to
-     * prevent exceeding the interval.
-     * @param rec SAMRecord to process and add to <code>AbstractLocusInfo</code>
-     */
-    @Override
-    void accumulateSamRecord(SAMRecord rec) {
-        // interpret the CIGAR string and add the base info
-        for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
-            // 0-based offset into the read of the current base
-            final int readOffset = alignmentBlock.getReadStart() - 1;
-            // 1-based reference position that the current base aligns to
-            final int refPos = alignmentBlock.getReferenceStart();
-
-            // 0-based offset from the aligned position of the first base in the read to the aligned position
-            // of the current base.
-            final int refOffset = refPos - rec.getAlignmentStart();
-            final int refOffsetEnd = refPos - rec.getAlignmentStart() + alignmentBlock.getLength();
-
-
-            // Ensure there are AbstractLocusInfos up to and including this position
-            for (int j = accumulator.size(); j <= refOffsetEnd; ++j) {
-                accumulator.add(createLocusInfo(getReferenceSequence(rec.getReferenceIndex()),
-                        rec.getAlignmentStart() + j));
-            }
-
-            /* Let's assume an alignment block starts in some locus. 
-             * We put two records to the accumulator. The first one has the "begin" type which corresponds to the locus 
-             * where the block starts. The second one has the "end" type which corresponds to the other locus where the block ends. 
-            */
-            int refOffsetInterval = refOffset; // corresponds to the beginning of the alignment block 
-            int refOffsetEndInterval = refOffsetEnd;
-            int startShift = 0;
-
-            // intersect intervals and alignment block
-            if (getIntervals() != null) {
-                // get the current interval we're processing 
-                Interval interval = getCurrentInterval();
-                if (interval != null) {
-                    final int intervalEnd = interval.getEnd();
-                    final int intervalStart = interval.getStart();
-                    // check if an interval and the alignment block overlap
-                    if (!CoordMath.overlaps(refPos, refPos + alignmentBlock.getLength(), intervalStart, intervalEnd)) {
-                        continue;
-                    }
-                    // if the alignment block starts out of an interval, shift the starting position
-                    if (refPos < intervalStart) {
-                        startShift = intervalStart - refPos;
-                        refOffsetInterval = refOffsetInterval + startShift;
-                    }
-                    // if the alignment block ends out of an interval, shift the ending position
-                    final int readEnd = refPos + alignmentBlock.getLength();
-                    if (refPos + alignmentBlock.getLength() > intervalEnd) {
-                        refOffsetEndInterval = refOffsetEndInterval - (readEnd - intervalEnd) + 1;
-                    }
-                }
-            }
-            final int length = refOffsetEndInterval - refOffsetInterval;
-            // add the alignment block to the accumulator when it starts and when it ends 
-            final EdgingRecordAndOffset recordAndOffset = createRecordAndOffset(rec, readOffset + startShift, length, refPos + startShift);
-            // accumulate start of the alignment block
-            accumulator.get(refOffsetInterval).add(recordAndOffset);
-            final EdgingRecordAndOffset recordAndOffsetEnd = createRecordAndOffset(recordAndOffset);
-            // accumulate end of the alignment block
-            accumulator.get(refOffsetEndInterval).add(recordAndOffsetEnd);
-        }
-    }
-
-    @Override
-    void accumulateIndels(SAMRecord rec) {
-        throw new UnsupportedOperationException("Indels accumulation is not supported for " + getClass().getSimpleName() + ".");
-    }
-
-    /**
-     * Creates a new <code>EdgingRecordAndOffset</code> for given input values
-     *
-     * @param rec        aligned SamRecord
-     * @param readOffset offset from start of read
-     * @param length     length of alignment block
-     * @param refPos     position in the reference sequence
-     * @return created <code>EdgingRecordAndOffset</code>
-     */
-    @Override
-    EdgingRecordAndOffset createRecordAndOffset(SAMRecord rec, int readOffset, int length, int refPos) {
-        return EdgingRecordAndOffset.createBeginRecord(rec, readOffset, length, refPos);
-    }
-
-    EdgingRecordAndOffset createRecordAndOffset(EdgingRecordAndOffset startRecord) {
-        return EdgingRecordAndOffset.createEndRecord(startRecord);
-    }
-
-    /**
-     * @param referenceSequence processed reference sequence
-     * @param lastPosition      last processed reference locus position
-     * @return <code>AbstractLocusInfo<T></code> for the lastPosition
-     */
-    @Override
-    AbstractLocusInfo<EdgingRecordAndOffset> createLocusInfo(SAMSequenceRecord referenceSequence, int lastPosition) {
-        return new AbstractLocusInfo<>(referenceSequence, lastPosition);
-    }
-
-    /**
-     * This method isn't supported in current implementation.
-     *
-     * @param maxReadsToAccumulatePerLocus maximum number of <code>RecordAndOffset</code> objects to store for
-     *                                     one loci in reference sequence.
-     */
-    @Override
-    public void setMaxReadsToAccumulatePerLocus(int maxReadsToAccumulatePerLocus) {
-        if (getMaxReadsToAccumulatePerLocus() != 0) {
-            throw new UnsupportedOperationException("Locus cap is not supported for " + getClass().getSimpleName() + ".");
-        }
-    }
-
-    /**
-     * This method isn't supported in current implementation.
-     *
-     * @param qualityScoreCutoff the minimum base quality to include in <code>AbstractLocusInfo</code>.
-     */
-    @Override
-    public void setQualityScoreCutoff(int qualityScoreCutoff) {
-        throw new UnsupportedOperationException("Quality filtering is not supported for " + getClass().getSimpleName() + ".");
-    }
-
-    /**
-     * For correct work of <code>EdgeReadIterator</code> value <code>emitUncoveredLoci</code> must be true.
-     *
-     * @param emitUncoveredLoci if false, iterator will skip uncovered loci in reference sequence, otherwise
-     *                          empty <code>AbstractLocusInfo</code> will be created for each loci.
-     */
-    @Override
-    public void setEmitUncoveredLoci(boolean emitUncoveredLoci) {
-        if (isEmitUncoveredLoci() != emitUncoveredLoci) {
-            throw new UnsupportedOperationException(getClass().getSimpleName() + " doesn't support work with skipping " +
-                    "uncovered bases.");
-        }
-    }
-
-    @Override
-    public void setIncludeIndels(boolean includeIndels) {
-        if (isIncludeIndels() != includeIndels) {
-            throw new UnsupportedOperationException("Indels accumulation is not supported for " + getClass().getSimpleName() + ".");
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/EdgingRecordAndOffset.java b/src/main/java/htsjdk/samtools/util/EdgingRecordAndOffset.java
deleted file mode 100644
index b83a169..0000000
--- a/src/main/java/htsjdk/samtools/util/EdgingRecordAndOffset.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecord;
-
-import static htsjdk.samtools.util.EdgingRecordAndOffset.Type.BEGIN;
-import static htsjdk.samtools.util.EdgingRecordAndOffset.Type.END;
-
-/**
- * Holds a SAMRecord plus the zero-based offset into that SAMRecord's bases and quality scores that corresponds
- * to the base and quality for the start of alignment block at the genomic position described by the AbstractLocusInfo.
- * This is implementation for EdgeReadIterator, field <code>type</code> added to indicate whether object
- * represents the start or the end of an alignment block.
- * <p>
- * Subclasses StartEdgingRecordAndOffset and EndEdgingRecordAndOffset are used in EdgeReadIterator to
- * distinguish starting and ending of the alignment block
- * as for each alignment block two objects of <code>EdgingRecordAndOffset</code> are created with two different types.
- * The main idea of using EdgeReadIterator is to process alignment block starting from locus where BEGIN type occurs,
- * aggregate information per locus and keep it until END type occurs, then remove alignment block from consideration.
- * 
- * @author Darina_Nikolaeva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-public abstract class EdgingRecordAndOffset extends AbstractRecordAndOffset {
-
-    private EdgingRecordAndOffset(SAMRecord record, int offset) {
-        super(record, offset);
-    }
-
-    public abstract EdgingRecordAndOffset getStart();
-
-    public abstract Type getType();
-
-    public abstract byte getBaseQuality(int position);
-
-    public static EdgingRecordAndOffset createBeginRecord(SAMRecord record, int offset, int length, int refPos) {
-        return new StartEdgingRecordAndOffset(record, offset, length, refPos);
-    }
-
-    public static EdgingRecordAndOffset createEndRecord(EdgingRecordAndOffset startRecord) {
-        return new EndEdgingRecordAndOffset(startRecord);
-    }
-
-    /**
-     * Describes the type of <code>TypedRecordAndOffset</code>, whether it represents the start or the end of
-     * an alignment block.
-     */
-    public enum Type {
-        BEGIN, END
-    }
-
-    private static class StartEdgingRecordAndOffset extends EdgingRecordAndOffset {
-        /**
-         * Length of alignment block of the read
-         */
-        private final int length;
-        /**
-         * A reference position to which read offset is aligned.
-         */
-        private final int refPos;
-
-        private int hash = 0;
-
-        /**
-         * @param record inner SAMRecord
-         * @param offset from the start of the read
-         * @param length of alignment block
-         * @param refPos corresponding to read offset reference position
-         */
-        protected StartEdgingRecordAndOffset(SAMRecord record, int offset, int length, int refPos) {
-            super(record, offset);
-            if (length > record.getReadLength()) {
-                throw new IllegalArgumentException("Block length cannot be larger than whole read length");
-            }
-            this.length = length;
-            this.refPos = refPos;
-        }
-
-        /**
-         * @param position in the reference
-         * @return base quality of a read base, corresponding to a given reference position
-         */
-        public byte getBaseQuality(int position) {
-            int rOffset = getRelativeOffset(position);
-            byte[] baseQualities = record.getBaseQualities();
-            validateOffset(rOffset, baseQualities);
-            return baseQualities[rOffset];
-        }
-
-        /**
-         * @return the length of alignment block represented by the object.
-         */
-        @Override
-        public int getLength() {
-            return length;
-        }
-
-        /**
-         * @return the position in reference sequence, to which the start of alignment block is aligned.
-         */
-        @Override
-        public int getRefPos() {
-            return refPos;
-        }
-
-        /**
-         * @return type of object
-         */
-        @Override
-        public Type getType() {
-            return BEGIN;
-        }
-
-        /**
-         * @return <code>EdgingRecordAndOffset</code> that represents the start of alignment block of the read
-         * for object with type END. For object with type BEGIN will return null.
-         */
-        @Override
-        public EdgingRecordAndOffset getStart() {
-            return null;
-        }
-
-        @Override
-        public int hashCode() {
-            if (hash != 0) return hash;
-            hash = record.hashCode();
-            hash = 31 * hash + length;
-            hash = 31 * hash + offset;
-            hash = 31 * hash + refPos;
-            return hash;
-        }
-
-        private int getRelativeOffset(int position) {
-            return position - refPos + offset;
-        }
-    }
-
-    private static class EndEdgingRecordAndOffset extends EdgingRecordAndOffset {
-
-        /**
-         * For object with type END this fields holds the reference to object with type BEGIN for the read.
-         */
-        final private EdgingRecordAndOffset start;
-
-        EndEdgingRecordAndOffset(EdgingRecordAndOffset record) {
-            super(record.getRecord(), record.getOffset());
-            this.start = record;
-        }
-
-        /**
-         * @param position in the reference
-         * @return base quality of a read base, corresponding to a given reference position
-         */
-        public byte getBaseQuality(int position) {
-            return start.getBaseQuality(position);
-        }
-
-        /**
-         * @return the length of alignment block represented by the object.
-         */
-        @Override
-        public int getLength() {
-            return start.getLength();
-        }
-
-        /**
-         * @return the position in reference sequence, to which the start of alignment block is aligned.
-         */
-        @Override
-        public int getRefPos() {
-            return start.getRefPos();
-        }
-
-        /**
-         * @return type of object
-         */
-        @Override
-        public Type getType() {
-            return END;
-        }
-
-        /**
-         * @return <code>EdgingRecordAndOffset</code> that represents the start of alignment block of the read
-         * for object with type END
-         */
-        @Override
-        public EdgingRecordAndOffset getStart() {
-            return start;
-        }
-
-        @Override
-        public int hashCode() {
-            return start.hashCode();
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/FastLineReader.java b/src/main/java/htsjdk/samtools/util/FastLineReader.java
deleted file mode 100644
index d802fad..0000000
--- a/src/main/java/htsjdk/samtools/util/FastLineReader.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Line-oriented InputStream reader that uses one buffer for disk buffering and line-termination-finding,
- * in order to improve performance.
- *
- * Implementation detail: All public methods must leave the input buffer in a non-empty state, unless at EOF.
- *
- * @author alecw at broadinstitute.org
- */
-public class FastLineReader implements Closeable {
-    private InputStream in;
-    private byte[] fileBuffer = new byte[512000];
-    // Next byte to read in fileBuffer
-    private int nextByte = 0;
-    // Number of bytes in fileBuffer
-    private int numBytes = 0;
-    private boolean atEof;
-
-    public FastLineReader(final InputStream in) {
-        this.in = in;
-        ensureBufferNotEmpty();
-    }
-
-    /**
-     * @return true if input is exhausted
-     */
-    public boolean eof() {
-        return atEof;
-    }
-
-    /**
-     * @return peeks at the next byte in the stream and returns true if it is CR or LF.  Returns false if EOF or
-     * next byte is not CR or LF.
-     */
-    public boolean atEoln() {
-        return ensureBufferNotEmpty() && (fileBuffer[nextByte] == '\n' || fileBuffer[nextByte] == '\r');
-    }
-
-    /**
-     * Advance over any EOLN chars (CR or LF)
-     * @return true if saw one or more CR or LFs
-     */
-    public boolean skipNewlines() {
-        boolean sawEoln = false;
-        while (atEoln()) {
-            sawEoln = true;
-            ++nextByte;
-        }
-        return sawEoln;
-    }
-
-    public void close() {
-        CloserUtil.close(in);
-        in = null;
-        fileBuffer = null;
-    }
-
-    /**
-     * @return Next byte from the input.  Do not call if at EOF.
-     */
-    public byte getByte() {
-        final byte ret = peekByte(); 
-        ++nextByte;
-        ensureBufferNotEmpty();
-        return ret;
-    }
-
-    /**
-     * @return Next byte from the input, without advancing over that byte.  Do not call if at EOF.
-     */
-    public byte peekByte() {
-        if (eof()) {
-            throw new IllegalStateException("Cannot getByte() if EOF.");
-        }
-        return fileBuffer[nextByte];
-    }
-
-    /**
-     * Read from input until input is exhausted, EOLN is seen, or output buffer is filled
-     * @param outputBuffer where to put bytes read
-     * @param startOutputIndex where to start putting bytes read
-     * @return number of bytes read
-     */
-    public int readToEndOfOutputBufferOrEoln(final byte[] outputBuffer, final int startOutputIndex) {
-        boolean sawNewline;
-        int totalGrabbed = 0;
-        do {
-            if (!ensureBufferNotEmpty()) {
-                break;
-            }
-            final int startInputIndex = nextByte;
-            sawNewline = advanceToEobOrEoln();
-            int lengthOfChunk = nextByte - startInputIndex;
-
-            // Roll back if went past the amount that can be stored in the output buffer.
-            // Assumption is that lines are relatively short so this won't happen very often.
-            if (lengthOfChunk > outputBuffer.length - (startOutputIndex + totalGrabbed)) {
-                lengthOfChunk = outputBuffer.length - (startOutputIndex + totalGrabbed);
-                nextByte = startInputIndex + lengthOfChunk;
-            }
-            System.arraycopy(fileBuffer, startInputIndex, outputBuffer, startOutputIndex + totalGrabbed, lengthOfChunk);
-            totalGrabbed += lengthOfChunk;
-        } while (!sawNewline && totalGrabbed < outputBuffer.length - startOutputIndex);
-        ensureBufferNotEmpty();
-        return totalGrabbed;
-    }
-
-    /**
-     * Advance nextByte to end of currently-buffered input or to line terminator
-     * @return true if saw a line terminator
-     */
-    private boolean advanceToEobOrEoln() {
-        while (nextByte < numBytes) {
-            if (atEoln()) {
-                return true;
-            }
-            ++nextByte;
-        }
-        return false;
-    }
-
-    /**
-     * Ensure that fileBuffer has at least one byte available in it.  Potentially wipes out
-     * what is in fileBuffer so everything from fileBuffer[0..nextByte] should already have been pulled out.
-     * @return false if EOF, else true
-     */
-    private boolean ensureBufferNotEmpty() {
-        try {
-            if (nextByte < numBytes) {
-                return true;
-            }
-            nextByte = 0;
-            numBytes = in.read(fileBuffer);
-            atEof = (numBytes < 1);
-            return !atEof;
-        } catch (IOException e) {
-            throw new SAMException("Exception reading InputStream", e);
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/FastqQualityFormat.java b/src/main/java/htsjdk/samtools/util/FastqQualityFormat.java
deleted file mode 100644
index b7a7bfb..0000000
--- a/src/main/java/htsjdk/samtools/util/FastqQualityFormat.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Enumeration for FastQ quality score formats formats.
- */
-public enum FastqQualityFormat {
-    /** Early Solexa/Illumina (pre pipeline 1.3) style scores  which encode Solexa qualities using an ASCII offset of 64 */
-    Solexa,
-    /** Recent Solexa/Illumina (pipeline 1.3+) style scores which encode PHRED qualities using an ASCII offset of 64 */
-    Illumina,
-    /** Sanger style FASTQ files which encode PHRED qualities using an ASCII offset of 33 */
-    Standard
-}
diff --git a/src/main/java/htsjdk/samtools/util/FileAppendStreamLRUCache.java b/src/main/java/htsjdk/samtools/util/FileAppendStreamLRUCache.java
deleted file mode 100644
index bc8bc01..0000000
--- a/src/main/java/htsjdk/samtools/util/FileAppendStreamLRUCache.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * LRU cache of OutputStreams to handle situation in which it is necessary to have more FileOutputStreams
- * than resource limits will allow.  Least-recently-used FileOutputStream is closed when it is pushed out of
- * the cache.  When adding a new element to the cache, the file is opened in append mode.
- *
- * Actual elements in the cache are usually BufferedOutputStreams wrapping the FileOutputStreams, but will
- * be FileOutputStreams if Defaults.BUFFER_SIZE = 0.
- *
- * @author alecw at broadinstitute.org
- */
-public class FileAppendStreamLRUCache extends ResourceLimitedMap<File, OutputStream> {
-    public FileAppendStreamLRUCache(final int cacheSize) {
-        super(cacheSize, new Functor());
-    }
-
-    private static class Functor implements ResourceLimitedMapFunctor<File, OutputStream> {
-        public OutputStream makeValue(final File file) {
-            try {
-                return IOUtil.maybeBufferOutputStream(new FileOutputStream(file, true));
-            }
-            catch (final FileNotFoundException e) {
-                // In case the file could not be opened because of too many file handles, try to force
-                // file handles to be closed.
-                System.gc();
-                System.runFinalization();
-                try {
-                    return IOUtil.maybeBufferOutputStream(new FileOutputStream(file, true));
-                }
-                catch (final FileNotFoundException e2) {
-                    throw new SAMException(file + "not found", e2);
-                }
-            }
-        }
-
-        public void finalizeValue(final File file, final OutputStream out) {
-            try {
-                out.flush();
-                out.close();
-            }
-            catch (final IOException e) {
-                throw new SAMException("Exception closing FileOutputStream for " + file, e);
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/FormatUtil.java b/src/main/java/htsjdk/samtools/util/FormatUtil.java
deleted file mode 100644
index a80c240..0000000
--- a/src/main/java/htsjdk/samtools/util/FormatUtil.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.File;
-import java.math.RoundingMode;
-import java.security.InvalidParameterException;
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * Simple class used to format object values into a standard format for printing.
- *
- * @author Tim Fennell
- */
-public class FormatUtil {
-    public static final int DECIMAL_DIGITS_TO_PRINT = 6;
-    private final DateFormat dateFormat;
-    private final NumberFormat integerFormat;
-    private final NumberFormat floatFormat;
-
-    /** Constructs a new FormatUtil and initializes various internal formatters. 
-    * This is necessary because SimpleDateFormat and other formatters are not threadsafe.
-    */
-    public FormatUtil() {
-        this.dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
-        this.integerFormat = NumberFormat.getIntegerInstance();
-        this.integerFormat.setGroupingUsed(false);
-
-        this.floatFormat = NumberFormat.getNumberInstance();
-        this.floatFormat.setGroupingUsed(false);
-        this.floatFormat.setMaximumFractionDigits(DECIMAL_DIGITS_TO_PRINT);
-        this.floatFormat.setRoundingMode(RoundingMode.HALF_DOWN);
-        if (this.floatFormat instanceof DecimalFormat) {
-            final DecimalFormat decimalFormat = (DecimalFormat)this.floatFormat;
-            final DecimalFormatSymbols decimalFormatSymbols = decimalFormat.getDecimalFormatSymbols();
-            decimalFormatSymbols.setNaN("?");
-            decimalFormatSymbols.setInfinity("?");
-            decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);
-        }
-    }
-
-    /** Formats a short to an integer string. */
-    public String format(short value) { return this.integerFormat.format(value); }
-
-    /** Formats an int to an integer string. */
-    public String format(int value) { return this.integerFormat.format(value); }
-
-    /** Formats a long to an integer string. */
-    public String format(long value) { return this.integerFormat.format(value); }
-
-    /** Formats a float to a floating point string. */
-    public String format(float value) {return this.floatFormat.format(value); }
-
-    /** Formats a double to a floating point string. */
-    public String format(double value) {return this.floatFormat.format(value); }
-
-    /** Formats a char as a string. */
-    public String format(char value) { return Character.toString(value); }
-
-    /** Formats an enum to the String representation of an enum. */
-    public String format(Enum value) { return value.name(); }
-
-    /** Formats a date to a date string without time. */
-    public String format(Date value) { return this.dateFormat.format(value); }
-
-    /** Formats date & time */
-    public String format(final Iso8601Date value) { return value.toString(); }
-
-    /** Formats a boolean value to a String. */
-    public String format(boolean value) { if (value) return "Y"; else return "N"; }
-
-    /** Attempts to determine the type of value and format it appropriately. */
-    public String format(Object value) {
-        if (value == null) return "";
-        if (value instanceof Short)       return format( ((Short) value).shortValue() );
-        if (value instanceof Integer)     return format( ((Integer) value).intValue() );
-        if (value instanceof Long)        return format( ((Long) value).longValue() );
-        if (value instanceof Float)       return format( ((Float) value).floatValue() );
-        if (value instanceof Double)      return format( ((Double) value).doubleValue() );
-        if (value instanceof Enum)        return format( ((Enum) value) );
-        if (value instanceof Iso8601Date) return format((Iso8601Date)value);
-        if (value instanceof Date)        return format( ((Date) value) );
-        if (value instanceof Boolean)     return format( ((Boolean) value).booleanValue() );
-        if (value instanceof Character)   return format( ((Character)value).charValue() );
-        return value.toString();
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Parsing methods
-    ///////////////////////////////////////////////////////////////////////////
-
-    /** Parses a String into a short. */
-    public short parseShort(String value) { return Short.parseShort(value); }
-
-    /** Parses a String into an int. */
-    public int parseInt(String value) { return Integer.parseInt(value); }
-
-    /** Parses a String into a long. */
-    public long parseLong(String value) { return Long.parseLong(value); }
-
-    /** Parses a String into a float. */
-    public float parseFloat(String value) {
-        if ("?".equals(value) || "-?".equals(value)) return Float.NaN;
-        else return Float.parseFloat(value);
-    }
-
-    /** Parses a String into a double. */
-    public double parseDouble(String value) {
-        if ("?".equals(value) || "-?".equals(value)) return Double.NaN;        
-        else return Double.parseDouble(value);
-    }
-
-    /** Parses a String into an Enum of the given type. */
-    public <E extends Enum> E parseEnum(String value, Class<E> type) { return (E) Enum.valueOf(type, value); }
-
-    /** Parses a String into a date. */
-    public Date parseDate(String value) {
-        try {
-            return this.dateFormat.parse(value);
-        }
-        catch (ParseException pe) {
-            throw new SAMException("Could not parse value as date: " + value, pe);
-        }
-    }
-
-    /** Parse a String into an Iso8601 Date */
-    public Iso8601Date parseIso8601Date(String value) { return new Iso8601Date(value); }
-
-    /** Parses a String into a boolean, as per the above convention that true = Y and false = N. */
-    public boolean parseBoolean(String value) {
-        if (value == null || value.isEmpty()) return false;
-        char ch = Character.toUpperCase(value.charAt(0));
-        return (ch == 'Y');
-    }
-
-    /** Parses a String into a char. We expect the String to have a length of exactly one, otherwise throw an exception. */
-    public char parseChar(String value) {
-        if (value == null) {
-            throw new SAMException("Cannot parse null string into char");
-        } else if (value.length() != 1) {
-            throw new SAMException("Cannot parse string into char because length != 1 : " + value);
-        } else {
-            return value.charAt(0);
-        }
-    }
-
-    /**
-     * Attempts to determine the correct parse method to call based on the desired
-     * return type and then parses the String and returns the value.
-     *
-     * @param value the String value to be parsed
-     * @param returnType the desired return type
-     * @return an object of the returnType
-     */
-    public Object parseObject(String value, Class<?> returnType) {
-        if (returnType == Short.class     || returnType == Short.TYPE)     return parseShort(value);
-        if (returnType == Integer.class   || returnType == Integer.TYPE)   return parseInt(value);
-        if (returnType == Long.class      || returnType == Long.TYPE)      return parseLong(value);
-        if (returnType == Float.class     || returnType == Float.TYPE)     return parseFloat(value);
-        if (returnType == Double.class    || returnType == Double.TYPE)    return parseDouble(value);
-        if (returnType == Boolean.class   || returnType == Boolean.TYPE)   return parseBoolean(value);
-        if (returnType == Byte.class      || returnType == Byte.TYPE)      return parseInt(value);
-        if (returnType == Character.class || returnType == Character.TYPE) return parseChar(value);
-        if (returnType == Iso8601Date.class)                               return parseIso8601Date(value);
-        if (returnType == Date.class)                                      return parseDate(value);
-        if (returnType == File.class)                                      return new File(value);
-        if (Enum.class.isAssignableFrom(returnType)) return parseEnum(value, (Class<? extends Enum>)returnType);
-        if (returnType == String.class) return value;
-
-        throw new InvalidParameterException("Don't know how to convert a String to a " + returnType.getName());
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Histogram.java b/src/main/java/htsjdk/samtools/util/Histogram.java
deleted file mode 100644
index 19cbc1d..0000000
--- a/src/main/java/htsjdk/samtools/util/Histogram.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import java.io.Serializable;
-import java.util.*;
-
-import static java.lang.Math.*;
-
-/**
- * Class for computing and accessing histogram type data.  Stored internally in
- * a sorted Map so that keys can be iterated in order.
- *
- * @author Tim Fennell
- */
-public final class Histogram<K extends Comparable> implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String binLabel   = "BIN";
-    private String valueLabel = "VALUE";
-    private final NavigableMap<K, Bin<K>> map;
-
-    /** Constructs a new Histogram with default bin and value labels. */
-    public Histogram() {
-        this.map = new TreeMap<>();
-    }
-
-    /** Constructs a new Histogram with supplied bin and value labels. */
-    public Histogram(final String binLabel, final String valueLabel) {
-        this();
-        this.binLabel = binLabel;
-        this.valueLabel = valueLabel;
-    }
-
-    /** Constructs a new Histogram that'll use the supplied comparator to sort keys. */
-    public Histogram(final Comparator<? super K> comparator) {
-        this.map = new TreeMap<>(comparator);
-    }
-
-    /** Constructor that takes labels for the bin and values and a comparator to sort the bins. */
-    public Histogram(final String binLabel, final String valueLabel, final Comparator<? super K> comparator) {
-        this(comparator);
-        this.binLabel = binLabel;
-        this.valueLabel = valueLabel;
-    }
-
-    /** Copy constructor for a histogram. */
-    public Histogram(final Histogram<K> in) {
-        this.map = new TreeMap<>(in.map);
-        this.binLabel = in.binLabel;
-        this.valueLabel = in.valueLabel;
-    }
-
-    /** Represents a bin in the Histogram. */
-    public static class Bin<K extends Comparable> implements Serializable {
-        private static final long serialVersionUID = 1L;
-        private final K id;
-        private double value = 0;
-
-        /** Constructs a new bin with the given ID. */
-        private Bin(final K id) { this.id = id; }
-
-        /** Gets the ID of this bin. */
-        public K getId() { return id; }
-
-        /** Gets the value in the bin. */
-        public double getValue() { return value; }
-
-        /** Returns the String format for the value in the bin. */
-        @Override
-        public String toString() { return String.valueOf(this.value); }
-
-        /** Checks the equality of the bin by ID and value. */
-        @Override
-        public boolean equals(final Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-
-            final Bin<K> bin = (Bin<K>) o;
-
-            if (Double.compare(bin.value, value) != 0) return false;
-            if (!id.equals(bin.id)) return false;
-
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            int result;
-            final long temp;
-            result = id.hashCode();
-            temp = value != +0.0d ? Double.doubleToLongBits(value) : 0L;
-            result = 31 * result + (int) (temp ^ (temp >>> 32));
-            return result;
-        }
-
-        public double getIdValue() {
-            if (id instanceof Number) {
-                return ((Number) id).doubleValue();
-            } else {
-                throw new UnsupportedOperationException("getIdValue only supported for Histogram<? extends Number>");
-            }
-        }
-    }
-
-    /** Prefill the histogram with the supplied set of bins. */
-    public void prefillBins(final K... ids) {
-        for (final K id : ids) {
-            map.put(id, new Bin<>(id));
-        }
-    }
-
-    /** Increments the value in the designated bin by 1. */
-    public void increment(final K id) {
-        increment(id, 1d);
-    }
-
-    /** Increments the value in the designated bin by the supplied increment. */
-    public void increment(final K id, final double increment) {
-        Bin<K> bin = map.get(id);
-        if (bin == null) {
-            bin = new Bin<>(id);
-            map.put(id, bin);
-        }
-
-        bin.value += increment;
-    }
-
-    public String getBinLabel() { return binLabel; }
-    public void setBinLabel(final String binLabel) { this.binLabel = binLabel; }
-
-    public String getValueLabel() { return valueLabel; }
-    public void setValueLabel(final String valueLabel) { this.valueLabel = valueLabel; }
-
-    /** Checks that the labels and values in the two histograms are identical. */
-    @Override
-    public boolean equals(final Object o) {
-        if (o == this) {
-            return true;
-        }
-        return o != null &&
-                (o instanceof Histogram) &&
-                ((Histogram) o).binLabel.equals(this.binLabel) &&
-                ((Histogram) o).valueLabel.equals(this.valueLabel) &&
-                ((Histogram) o).map.equals(this.map);
-    }
-
-    @Override
-    public String toString() {
-        return map.toString();
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(binLabel, valueLabel, map);
-    }
-
-    /**
-     * Assuming that the key type for the histogram is a Number type, returns the mean of
-     * all the items added to the histogram.
-     */
-    public double getMean() {
-        // Could use simply getSum() / getCount(), but that would require iterating over the
-        // values() set twice, which seems inefficient given how simply the computation is.
-        double product=0, totalCount=0;
-        for (final Bin<K> bin : map.values()) {
-            final double idValue = bin.getIdValue();
-            final double count   = bin.getValue();
-
-            product += idValue * count;
-            totalCount += count;
-        }
-
-        return product / totalCount;
-    }
-
-    /**
-     * Returns the sum of the products of the histgram bin ids and the number of entries in each bin.
-     * Note: This is only supported if this histogram stores instances of Number.
-     */
-    public double getSum() {
-        double total = 0;
-        for (final Bin<K> bin : map.values()) {
-            total += bin.getValue() * bin.getIdValue();
-        }
-
-        return total;
-    }
-
-    /**
-     * Returns the sum of the number of entries in each bin.
-     */
-    public double getSumOfValues() {
-        double total = 0;
-        for (final Bin<K> bin : map.values()) {
-            total += bin.getValue();
-        }
-
-        return total;
-    }
-
-    public double getStandardDeviation() {
-        final double mean = getMean();
-
-        double count = 0;
-        double total = 0;
-
-        for (final Bin<K> bin : map.values()) {
-            final double localCount = bin.getValue();
-            final double value = bin.getIdValue();
-
-            count += localCount;
-            total += localCount * pow(value - mean, 2);
-        }
-
-        return Math.sqrt(total / (count-1));
-    }
-
-    /**
-     * Calculates the mean bin size
-     */
-    public double getMeanBinSize() {
-        return (getSumOfValues() / size());
-    }
-
-    /**
-     * Returns the size of this histogram.
-     */
-    public int size() {
-        return map.size();
-    }
-
-    /**
-     * Returns the comparator used to order the keys in this histogram, or
-     * {@code null} if this histogram uses the {@linkplain Comparable
-     * natural ordering} of its keys.
-     *
-     * @return the comparator used to order the keys in this histogram,
-     *         or {@code null} if this histogram uses the natural ordering
-     *         of its keys
-     */
-    public Comparator<? super K> comparator() {
-        return map.comparator();
-    }
-
-    /**
-	 * Calculates the median bin size
-	 */
-	public double getMedianBinSize() {
-		if (size() == 0) {
-			return 0;
-		}
-
-		final List<Double> binValues = new ArrayList<>();
-		for (final Bin<K> bin : values()) {
-			binValues.add(bin.getValue());
-		}
-		Collections.sort(binValues);
-
-		final int midPoint = binValues.size() / 2;
-		double median = binValues.get(midPoint);
-		if (binValues.size() % 2 == 0) {
-			median = (median + binValues.get(midPoint-1)) / 2;
-		}
-
-		return median;
-	}
-
-    /**
-     * Returns a {@link Collection} view of the values contained in this histogram.
-     * The collection's iterator returns the values in ascending order
-     * of the corresponding keys.
-     */
-    public Collection<Bin<K>> values() {
-        return map.values();
-    }
-
-    /**
-     * Calculates the standard deviation of the bin size
-     */
-    public double getStandardDeviationBinSize(final double mean) {
-        double total = 0;
-        for(final Bin<K> bin : values()) {
-            total += Math.pow(bin.getValue() - mean, 2);
-        }
-        return Math.sqrt(total / (Math.max(1,values().size()-1)));
-    }
-
-    /**
-     * Gets the bin in which the given percentile falls.
-     *
-     * @param percentile a value between 0 and 1
-     * @return the bin value in which the percentile falls
-     */
-    public double getPercentile(final double percentile) {
-        if (percentile <= 0) throw new IllegalArgumentException("Cannot query percentiles of 0 or below");
-        if (percentile >= 1) throw new IllegalArgumentException("Cannot query percentiles of 1 or above");
-
-        double total = getCount();
-        double sofar = 0;
-        for (Bin<K> bin : values()) {
-            sofar += bin.getValue();
-            if (sofar / total >= percentile) return bin.getIdValue();
-        }
-
-        throw new IllegalStateException("Could not find percentile: " + percentile);
-    }
-
-    /**
-     * Returns the cumulative probability of observing a value <= v when sampling the
-     * distribution represented by this histogram.
-     * @throws UnsupportedOperationException if this histogram does not store instances of Number
-     */
-    public double getCumulativeProbability(final double v) {
-        double count = 0;
-        double total = 0;
-
-        for (final Bin<K> bin : values()) {
-            final double binValue = bin.getIdValue();
-            if (binValue <= v) count += bin.getValue();
-            total += bin.getValue();
-        }
-
-        return count / total;
-    }
-
-    public double getMedian() {
-        double total = 0;
-        double count = getCount();
-
-        // Base cases
-        if (count == 0) return 0;
-        if (count == 1) return values().iterator().next().getIdValue();
-
-        final double midLow, midHigh;
-        if (count % 2 == 0) {
-            midLow = count / 2;
-            midHigh = midLow + 1;
-        }
-        else {
-            midLow = Math.ceil(count / 2);
-            midHigh = midLow;
-        }
-
-        Double midLowValue  = null;
-        Double midHighValue = null;
-        for (final Bin<K> bin : values()) {
-            total += bin.getValue();
-            if (midLowValue  == null && total >= midLow)  midLowValue  = bin.getIdValue();
-            if (midHighValue == null && total >= midHigh) midHighValue = bin.getIdValue();
-            if (midLowValue != null && midHighValue != null) break;
-        }
-
-        return (midLowValue + midHighValue) / 2;
-    }
-
-    /** Gets the median absolute deviation of the distribution. */
-    public double getMedianAbsoluteDeviation() {
-        final double median = getMedian();
-        final Histogram<Double> deviations = new Histogram<>();
-        for (final Bin<K> bin : values()) {
-            final double dev = abs(bin.getIdValue() - median);
-            deviations.increment(dev, bin.getValue());
-        }
-
-        return deviations.getMedian();
-    }
-
-    /**
-     * Returns a value that is intended to estimate the mean of the distribution, if the distribution is
-     * essentially normal, by using the median absolute deviation to remove the effect of
-     * erroneous massive outliers.
-     */
-    public double estimateSdViaMad() {
-        return 1.4826 * getMedianAbsoluteDeviation();
-    }
-
-    /** Returns id of the Bin that's the mode of the distribution (i.e. the largest bin).
-     * @throws UnsupportedOperationException if this histogram does not store instances of Number
-     */
-    public double getMode() {
-        return getModeBin().getIdValue();
-    }
-
-    /** Returns the Bin that's the mode of the distribution (i.e. the largest bin). */
-    private Bin<K> getModeBin() {
-        Bin<K> modeBin = null;
-
-        for (final Bin<K> bin : values()) {
-            if (modeBin == null || modeBin.value < bin.value) {
-                modeBin = bin;
-            }
-        }
-
-        return modeBin;
-    }
-
-
-    /**
-     * Returns the key with the lowest count.
-     * @throws UnsupportedOperationException if this histogram does not store instances of Number
-     */
-    public double getMin() {
-        return map.firstEntry().getValue().getIdValue();
-    }
-
-    /**
-     * Returns the key with the highest count.
-     * @throws UnsupportedOperationException if this histogram does not store instances of Number
-     */
-    public double getMax() {
-        return map.lastEntry().getValue().getIdValue();
-    }
-
-    public double getCount() {
-        double count = 0;
-        for (final Bin<K> bin : values()) {
-            count += bin.value;
-        }
-
-        return count;
-    }
-
-    /** Gets the geometric mean of the distribution. */
-    public double getGeometricMean() {
-        double total = 0;
-        double count = 0;
-        for (final Bin<K> bin : values()) {
-            total += bin.value * log(bin.getIdValue());
-            count += bin.value;
-        }
-
-        return exp(total / count);
-    }
-
-    /**
-     * Trims the histogram when the bins in the tail of the distribution contain fewer than mode/tailLimit items
-     */
-    public void trimByTailLimit(final int tailLimit) {
-        if (isEmpty()) {
-            return;
-        }
-
-        final Bin<K> modeBin = getModeBin();
-        final double mode = modeBin.getIdValue();
-        final double sizeOfModeBin = modeBin.getValue();
-        final double minimumBinSize = sizeOfModeBin/tailLimit;
-        Bin<K> lastBin = null;
-
-        final List<K> binsToKeep = new ArrayList<>();
-        for (Bin<K> bin : values()) {
-            double binId = ((Number)bin.getId()).doubleValue();
-
-            if (binId <= mode) {
-                binsToKeep.add(bin.getId());
-            }
-            else if ((lastBin != null && ((Number)lastBin.getId()).doubleValue() != binId - 1) || bin.getValue() < minimumBinSize) {
-                break;
-            }
-            else {
-                binsToKeep.add(bin.getId());
-            }
-            lastBin = bin;
-        }
-
-        final Object keys[] = keySet().toArray();
-        for (Object binId : keys) {
-            if (!binsToKeep.contains(binId)) {
-                remove(binId);
-            }
-        }
-    }
-
-    private Bin<K> remove(final Object key) {
-        return map.remove(key);
-    }
-
-    /**
-     * Returns true if this histogram has no data in in, false otherwise.
-     */
-    public boolean isEmpty() {
-        return map.isEmpty();
-    }
-
-    /**
-     * Trims the histogram so that only bins <= width are kept.
-     */
-    public void trimByWidth(final int width) {
-        final Iterator<K> it = map.descendingKeySet().iterator();
-        while (it.hasNext()) {
-
-            if (((Number)it.next()).doubleValue() > width) {
-                it.remove();
-            } else break;
-        }
-    }
-
-    /***
-     * Immutable method that divides the current Histogram by an input Histogram and generates a new one
-     * Throws an exception if the bins don't match up exactly
-     * @param divisorHistogram
-     * @return
-     * @throws IllegalArgumentException if the keySet of this histogram is not equal to the keySet of the given divisorHistogram
-     */
-    public Histogram<K> divideByHistogram(final Histogram<K> divisorHistogram) {
-        final Histogram<K> output = new Histogram<K>();
-        if (!this.keySet().equals(divisorHistogram.keySet())) throw new IllegalArgumentException("Attempting to divide Histograms with non-identical bins");
-        for (final K key : this.keySet()){
-            final Bin<K> dividend = this.get(key);
-            final Bin<K> divisor = divisorHistogram.get(key);
-            output.increment(key, dividend.getValue()/divisor.getValue());
-        }
-        return output;
-    }
-
-    /***
-     * Mutable method that allows the addition of a Histogram into the current one.
-     * @param addHistogram
-     */
-    public void addHistogram(final Histogram<K> addHistogram) {
-        for (final K key : addHistogram.keySet()){
-            this.increment(key, addHistogram.get(key).getValue());
-        }
-    }
-
-    /**
-     * Retrieves the bin associated with the given key.
-     */
-    public Bin<K> get(final K key) {
-        return map.get(key);
-    }
-
-    /**
-     * Returns the set of keys for this histogram.
-     */
-    public Set<K> keySet() {
-        return map.keySet();
-    }
-
-    /**
-     * Return whether this histogram contains the given key.
-     */
-    public boolean containsKey(final K key){
-        return map.containsKey(key);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/HttpUtils.java b/src/main/java/htsjdk/samtools/util/HttpUtils.java
deleted file mode 100644
index 49ec560..0000000
--- a/src/main/java/htsjdk/samtools/util/HttpUtils.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-/**
- * User: jrobinso
- * Date: Sep 23, 2009
- */
-public class HttpUtils {
-
-    public static String getETag(final URL url) {
-        return getHeaderField(url, "ETag");
-    }
-
-    private static URLConnection openConnection(final URL url) throws IOException{
-        URLConnection conn = url.openConnection();
-        conn.setReadTimeout(3000);
-        conn.setDefaultUseCaches(false);
-        conn.setUseCaches(false);
-        return conn;
-    }
-
-    public static String getHeaderField(final URL url, final String name) {
-        URLConnection conn = null;
-        try {
-            // Create a URLConnection object for a URL
-            conn = openConnection(url);
-            return conn.getHeaderField(name);
-
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-        finally {
-            if (conn != null && conn instanceof HttpURLConnection) {
-                ((HttpURLConnection) conn).disconnect();
-            }
-        }
-    }
-
-    public static void printHeaderFields(final URL url) {
-
-        URLConnection conn = null;
-        try {
-            // Create a URLConnection object for a URL
-            conn = openConnection(url);
-
-            for (final String name : conn.getHeaderFields().keySet()) {
-                System.out.println(name + "\t" + conn.getHeaderField(name));
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        finally {
-            if (conn != null && conn instanceof HttpURLConnection) {
-                ((HttpURLConnection) conn).disconnect();
-            }
-        }
-    }
-
-    public static boolean resourceAvailable(final URL url) {
-        return getETag(url) != null;
-    }
-
-    public static void main(final String[] args) throws MalformedURLException {
-        //printHeaderFields(new URL(
-        //        "http://www.broadinstitute.org/igvdata/1KG/DCC_merged/freeze5/NA12891.pilot2.SLX.bam"));
-        System.out.println(getETag(new URL(
-                 "http://www.broadinstitute.org/igvdata/test/sam/303KY.8.paired1.bam.tdf")));
-        System.out.println(resourceAvailable(new URL(
-                "http://www.broadinstitute.org/igvdata/test/sam/303KY.8.paired1.bam.tdf")));
-
-
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IOUtil.java b/src/main/java/htsjdk/samtools/util/IOUtil.java
deleted file mode 100644
index 07ae900..0000000
--- a/src/main/java/htsjdk/samtools/util/IOUtil.java
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.seekablestream.SeekableBufferedStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableHTTPStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Scanner;
-import java.util.Stack;
-import java.util.regex.Pattern;
-import java.util.zip.Deflater;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Miscellaneous stateless static IO-oriented methods.
- *  Also used for utility methods that wrap or aggregate functionality in Java IO.
- */
-public class IOUtil {
-    /**
-     * @deprecated Use {@link Defaults#NON_ZERO_BUFFER_SIZE} instead.
-     */
-    @Deprecated
-    public static final int STANDARD_BUFFER_SIZE = Defaults.NON_ZERO_BUFFER_SIZE;
-
-    public static final long ONE_GB = 1024 * 1024 * 1024;
-    public static final long TWO_GBS = 2 * ONE_GB;
-    public static final long FIVE_GBS = 5 * ONE_GB;
-
-    /** Possible extensions for VCF files and related formats. */
-    public static final String[] VCF_EXTENSIONS = new String[] {".vcf", ".vcf.gz", ".bcf"};
-
-    public static final String INTERVAL_LIST_FILE_EXTENSION = IntervalList.INTERVAL_LIST_FILE_EXTENSION;
-
-    public static final String SAM_FILE_EXTENSION = ".sam";
-
-    public static final String DICT_FILE_EXTENSION = ".dict";
-
-    private static int compressionLevel = Defaults.COMPRESSION_LEVEL;
-
-    /**
-     * Sets the GZip compression level for subsequent GZIPOutputStream object creation.
-     * @param compressionLevel 0 <= compressionLevel <= 9
-     */
-    public static void setCompressionLevel(final int compressionLevel) {
-        if (compressionLevel < Deflater.NO_COMPRESSION || compressionLevel > Deflater.BEST_COMPRESSION) {
-            throw new IllegalArgumentException("Invalid compression level: " + compressionLevel);
-        }
-        IOUtil.compressionLevel = compressionLevel;
-    }
-
-    public static int getCompressionLevel() {
-        return compressionLevel;
-    }
-
-    /**
-     * Wrap the given stream in a BufferedInputStream, if it isn't already wrapper
-     *
-     * @param stream stream to be wrapped
-     * @return A BufferedInputStream wrapping stream, or stream itself if stream instanceof BufferedInputStream.
-     */
-    public static BufferedInputStream toBufferedStream(final InputStream stream) {
-        if (stream instanceof BufferedInputStream) {
-            return (BufferedInputStream) stream;
-        } else {
-            return new BufferedInputStream(stream, Defaults.NON_ZERO_BUFFER_SIZE);
-        }
-    }
-
-    /**
-     * Transfers from the input stream to the output stream using stream operations and a buffer.
-     */
-    public static void transferByStream(final InputStream in, final OutputStream out, final long bytes) {
-        final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
-        long remaining = bytes;
-
-        try {
-            while (remaining > 0) {
-                final int read = in.read(buffer, 0, (int) Math.min(buffer.length, remaining));
-                out.write(buffer, 0, read);
-                remaining -= read;
-            }
-        }
-        catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-
-    /**
-     * @return If Defaults.BUFFER_SIZE > 0, wrap os in BufferedOutputStream, else return os itself.
-     */
-    public static OutputStream maybeBufferOutputStream(final OutputStream os) {
-        return maybeBufferOutputStream(os, Defaults.BUFFER_SIZE);
-    }
-
-    /**
-     * @return If bufferSize > 0, wrap os in BufferedOutputStream, else return os itself.
-     */
-    public static OutputStream maybeBufferOutputStream(final OutputStream os, final int bufferSize) {
-        if (bufferSize > 0) return new BufferedOutputStream(os, bufferSize);
-        else return os;
-    }
-
-    public static SeekableStream maybeBufferedSeekableStream(final SeekableStream stream, final int bufferSize) {
-        return bufferSize > 0 ? new SeekableBufferedStream(stream, bufferSize) : stream; 
-    }
-    
-    public static SeekableStream maybeBufferedSeekableStream(final SeekableStream stream) {
-        return maybeBufferedSeekableStream(stream, Defaults.BUFFER_SIZE);
-    }
-    
-    public static SeekableStream maybeBufferedSeekableStream(final File file) {
-        try {
-            return maybeBufferedSeekableStream(new SeekableFileStream(file));
-        } catch (final FileNotFoundException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    public static SeekableStream maybeBufferedSeekableStream(final URL url) {
-        return maybeBufferedSeekableStream(new SeekableHTTPStream(url));
-    }
-
-    /**
-     * @return If Defaults.BUFFER_SIZE > 0, wrap is in BufferedInputStream, else return is itself.
-     */
-    public static InputStream maybeBufferInputStream(final InputStream is) {
-        return maybeBufferInputStream(is, Defaults.BUFFER_SIZE);
-    }
-
-    /**
-     * @return If bufferSize > 0, wrap is in BufferedInputStream, else return is itself.
-     */
-    public static InputStream maybeBufferInputStream(final InputStream is, final int bufferSize) {
-        if (bufferSize > 0) return new BufferedInputStream(is, bufferSize);
-        else return is;
-    }
-
-    public static Reader maybeBufferReader(Reader reader, final int bufferSize) {
-        if (bufferSize > 0) reader = new BufferedReader(reader, bufferSize);
-        return reader;
-    }
-
-    public static Reader maybeBufferReader(final Reader reader) {
-        return maybeBufferReader(reader, Defaults.BUFFER_SIZE);
-    }
-
-    public static Writer maybeBufferWriter(Writer writer, final int bufferSize) {
-        if (bufferSize > 0) writer = new BufferedWriter(writer, bufferSize);
-        return writer;
-    }
-
-    public static Writer maybeBufferWriter(final Writer writer) {
-        return maybeBufferWriter(writer, Defaults.BUFFER_SIZE);
-    }
-
-
-    /**
-     * Delete a list of files, and write a warning message if one could not be deleted.
-     *
-     * @param files Files to be deleted.
-     */
-    public static void deleteFiles(final File... files) {
-        for (final File f : files) {
-            if (!f.delete()) {
-                System.err.println("Could not delete file " + f);
-            }
-        }
-    }
-
-    public static void deleteFiles(final Iterable<File> files) {
-        for (final File f : files) {
-            if (!f.delete()) {
-                System.err.println("Could not delete file " + f);
-            }
-        }
-    }
-
-
-    /**
-     * @return true if the path is not a device (e.g. /dev/null or /dev/stdin), and is not
-     * an existing directory.  I.e. is is a regular path that may correspond to an existing
-     * file, or a path that could be a regular output file.
-     */
-    public static boolean isRegularPath(final File file) {
-        return !file.exists() || file.isFile();
-    }
-
-    /**
-     * Creates a new tmp file on one of the available temp filesystems, registers it for deletion
-     * on JVM exit and then returns it.
-     */
-    public static File newTempFile(final String prefix, final String suffix,
-                                   final File[] tmpDirs, final long minBytesFree) throws IOException {
-        File f = null;
-
-        for (int i = 0; i < tmpDirs.length; ++i) {
-            if (i == tmpDirs.length - 1 || tmpDirs[i].getUsableSpace() > minBytesFree) {
-                f = File.createTempFile(prefix, suffix, tmpDirs[i]);
-                f.deleteOnExit();
-                break;
-            }
-        }
-
-        return f;
-    }
-
-    /** Creates a new tmp file on one of the potential filesystems that has at least 5GB free. */
-    public static File newTempFile(final String prefix, final String suffix,
-                                   final File[] tmpDirs) throws IOException {
-        return newTempFile(prefix, suffix, tmpDirs, FIVE_GBS);
-    }
-
-
-    /** Returns a default tmp directory. */
-    public static File getDefaultTmpDir() {
-        final String user = System.getProperty("user.name");
-        final String tmp = System.getProperty("java.io.tmpdir");
-
-        if (tmp.endsWith(File.separatorChar + user)) return new File(tmp);
-        else return new File(tmp, user);
-    }
-
-    /** Returns the name of the file minus the extension (i.e. text after the last "." in the filename). */
-    public static String basename(final File f) {
-        final String full = f.getName();
-        final int index = full.lastIndexOf('.');
-        if (index > 0  && index > full.lastIndexOf(File.separator)) {
-            return full.substring(0, index);
-        }
-        else {
-            return full;
-        }
-    }
-    
-    /**
-     * Checks that an input is  is non-null, a URL or a file, exists, 
-     * and if its a file then it is not a directory and is readable.  If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param input the input to check for validity
-     */
-    public static void assertInputIsValid(final String input) {
-      if (input == null) {
-        throw new IllegalArgumentException("Cannot check validity of null input.");
-      }
-      if (!isUrl(input)) {
-        assertFileIsReadable(new File(input));
-      }
-    }
-    
-    /** 
-     * Returns true iff the string is a url. 
-     * Helps distinguish url inputs form file path inputs.
-     */
-    public static boolean isUrl(final String input) {
-      try {
-        new URL(input);
-        return true;
-      } catch (MalformedURLException e) {
-        return false;
-      }
-    }
-
-    /**
-     * Checks that a file is non-null, exists, is not a directory and is readable.  If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param file the file to check for readability
-     */
-    public static void assertFileIsReadable(final File file) {
-        assertFileIsReadable(file == null ? null : file.toPath());
-    }
-
-    /**
-     * Checks that a file is non-null, exists, is not a directory and is readable.  If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param path the file to check for readability
-     */
-    public static void assertFileIsReadable(final Path path) {
-        if (path == null) {
-            throw new IllegalArgumentException("Cannot check readability of null file.");
-        } else if (!Files.exists(path)) {
-            throw new SAMException("Cannot read non-existent file: " + path.toAbsolutePath());
-        }
-        else if (Files.isDirectory(path)) {
-            throw new SAMException("Cannot read file because it is a directory: " + path.toAbsolutePath());
-        }
-        else if (!Files.isReadable(path)) {
-            throw new SAMException("File exists but is not readable: " + path.toAbsolutePath());
-        }
-    }
-
-    /**
-     * Checks that each file is non-null, exists, is not a directory and is readable.  If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param files the list of files to check for readability
-     */
-    public static void assertFilesAreReadable(final List<File> files) {
-        for (final File file : files) assertFileIsReadable(file);
-    }
-    
-    /**
-     * Checks that each string is non-null, exists or is a URL, 
-     * and if it is a file then not a directory and is readable.  If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param files the list of files to check for readability
-     */
-    public static void assertInputsAreValid(final List<String> inputs) {
-        for (final String input : inputs) assertInputIsValid(input);
-    }
-
-    /**
-     * Checks that a file is non-null, and is either extent and writable, or non-existent but
-     * that the parent directory exists and is writable. If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param file the file to check for writability
-     */
-    public static void assertFileIsWritable(final File file) {
-        if (file == null) {
-			throw new IllegalArgumentException("Cannot check readability of null file.");
-		} else if (!file.exists()) {
-            // If the file doesn't exist, check that it's parent directory does and is writable
-            final File parent = file.getAbsoluteFile().getParentFile();
-            if (!parent.exists()) {
-                throw new SAMException("Cannot write file: " + file.getAbsolutePath() + ". " +
-                        "Neither file nor parent directory exist.");
-            }
-            else if (!parent.isDirectory()) {
-                throw new SAMException("Cannot write file: " + file.getAbsolutePath() + ". " +
-                        "File does not exist and parent is not a directory.");
-            }
-            else if (!parent.canWrite()) {
-                throw new SAMException("Cannot write file: " + file.getAbsolutePath() + ". " +
-                        "File does not exist and parent directory is not writable..");
-            }
-        }
-        else if (file.isDirectory()) {
-            throw new SAMException("Cannot write file because it is a directory: " + file.getAbsolutePath());
-        }
-        else if (!file.canWrite()) {
-            throw new SAMException("File exists but is not writable: " + file.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Checks that each file is non-null, and is either extent and writable, or non-existent but
-     * that the parent directory exists and is writable. If any
-     * condition is false then a runtime exception is thrown.
-     *
-     * @param files the list of files to check for writability
-     */
-    public static void assertFilesAreWritable(final List<File> files) {
-        for (final File file : files) assertFileIsWritable(file);
-    }
-
-    /**
-     * Checks that a directory is non-null, extent, writable and a directory
-     * otherwise a runtime exception is thrown.
-     *
-     * @param dir the dir to check for writability
-     */
-    public static void assertDirectoryIsWritable(final File dir) {
-        if (dir == null) {
-            throw new IllegalArgumentException("Cannot check readability of null file.");
-        }
-        else if (!dir.exists()) {
-            throw new SAMException("Directory does not exist: " + dir.getAbsolutePath());
-        }
-        else if (!dir.isDirectory()) {
-            throw new SAMException("Cannot write to directory because it is not a directory: " + dir.getAbsolutePath());
-        }
-        else if (!dir.canWrite()) {
-            throw new SAMException("Directory exists but is not writable: " + dir.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Checks that a directory is non-null, extent, readable and a directory
-     * otherwise a runtime exception is thrown.
-     *
-     * @param dir the dir to check for writability
-     */
-    public static void assertDirectoryIsReadable(final File dir) {
-        if (dir == null) {
-            throw new IllegalArgumentException("Cannot check readability of null file.");
-        }
-        else if (!dir.exists()) {
-            throw new SAMException("Directory does not exist: " + dir.getAbsolutePath());
-        }
-        else if (!dir.isDirectory()) {
-            throw new SAMException("Cannot read from directory because it is not a directory: " + dir.getAbsolutePath());
-        }
-        else if (!dir.canRead()) {
-            throw new SAMException("Directory exists but is not readable: " + dir.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Checks that the two files are the same length, and have the same content, otherwise throws a runtime exception.
-     */
-    public static void assertFilesEqual(final File f1, final File f2) {
-        try {
-            if (f1.length() != f2.length()) {
-                throw new SAMException("Files " + f1 + " and " + f2 + " are different lengths.");
-            }
-            final FileInputStream s1 = new FileInputStream(f1);
-            final FileInputStream s2 = new FileInputStream(f2);
-            final byte[] buf1 = new byte[1024 * 1024];
-            final byte[] buf2 = new byte[1024 * 1024];
-            int len1;
-            while ((len1 = s1.read(buf1)) != -1) {
-                final int len2 = s2.read(buf2);
-                if (len1 != len2) {
-                    throw new SAMException("Unexpected EOF comparing files that are supposed to be the same length.");
-                }
-                if (!Arrays.equals(buf1, buf2)) {
-                    throw new SAMException("Files " + f1 + " and " + f2 + " differ.");
-                }
-            }
-            s1.close();
-            s2.close();
-        } catch (IOException e) {
-            throw new SAMException("Exception comparing files " + f1 + " and " + f2, e);
-        }
-
-    }
-
-    /**
-     * Checks that a file is of non-zero length
-     */
-    public static void assertFileSizeNonZero(final File file) {
-        if (file.length() == 0) {
-            throw new SAMException(file.getAbsolutePath() + " has length 0");
-        }
-    }
-
-    /**
-     * Opens a file for reading, decompressing it if necessary
-     *
-     * @param file  The file to open
-     * @return the input stream to read from
-     */
-    public static InputStream openFileForReading(final File file) {
-        return openFileForReading(file.toPath());
-    }
-
-    /**
-     * Opens a file for reading, decompressing it if necessary
-     *
-     * @param path  The file to open
-     * @return the input stream to read from
-     */
-    public static InputStream openFileForReading(final Path path) {
-
-        try {
-            if (path.getFileName().toString().endsWith(".gz") ||
-                path.getFileName().toString().endsWith(".bfq"))  {
-                return openGzipFileForReading(path);
-            }
-            else {
-                return Files.newInputStream(path);
-            }
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Error opening file: " + path, ioe);
-        }
-
-    }
-
-    /**
-     * Opens a GZIP-encoded file for reading, decompressing it if necessary
-     *
-     * @param file  The file to open
-     * @return the input stream to read from
-     */
-    public static InputStream openGzipFileForReading(final File file) {
-        return openGzipFileForReading(file.toPath());
-    }
-
-    /**
-     * Opens a GZIP-encoded file for reading, decompressing it if necessary
-     *
-     * @param path  The file to open
-     * @return the input stream to read from
-     */
-    public static InputStream openGzipFileForReading(final Path path) {
-
-        try {
-            return new GZIPInputStream(Files.newInputStream(path));
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Error opening file: " + path, ioe);
-        }
-    }
-
-    /**
-     * Opens a file for writing, overwriting the file if it already exists
-     *
-     * @param file  the file to write to
-     * @return the output stream to write to
-     */
-    public static OutputStream openFileForWriting(final File file) {
-        return openFileForWriting(file, false);
-    }
-
-    /**
-     * Opens a file for writing
-     *
-     * @param file  the file to write to
-     * @param append    whether to append to the file if it already exists (we overwrite it if false)
-     * @return the output stream to write to
-     */
-    public static OutputStream openFileForWriting(final File file, final boolean append) {
-
-        try {
-            if (file.getName().endsWith(".gz") ||
-                file.getName().endsWith(".bfq")) {
-                return openGzipFileForWriting(file, append);
-            }
-            else {
-                return new FileOutputStream(file, append);
-            }
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Error opening file for writing: " + file.getName(), ioe);
-        }
-    }
-
-    /**
-     * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
-     */
-    public static BufferedWriter openFileForBufferedWriting(final File file, final boolean append) {
-        return new BufferedWriter(new OutputStreamWriter(openFileForWriting(file, append)), Defaults.NON_ZERO_BUFFER_SIZE);
-    }
-
-    /**
-     * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
-     */
-    public static BufferedWriter openFileForBufferedWriting(final File file) {
-        return openFileForBufferedWriting(file, false);
-    }
-
-    /**
-     * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
-     */
-    public static BufferedWriter openFileForBufferedUtf8Writing(final File file) {
-        return new BufferedWriter(new OutputStreamWriter(openFileForWriting(file), Charset.forName("UTF-8")),
-                Defaults.NON_ZERO_BUFFER_SIZE);
-    }
-
-    /**
-     * Opens a file for reading, decompressing it if necessary
-     *
-     * @param file  The file to open
-     * @return the input stream to read from
-     */
-    public static BufferedReader openFileForBufferedUtf8Reading(final File file) {
-        return new BufferedReader(new InputStreamReader(openFileForReading(file), Charset.forName("UTF-8")));
-    }
-
-    /**
-     * Opens a GZIP encoded file for writing
-     *
-     * @param file  the file to write to
-     * @param append    whether to append to the file if it already exists (we overwrite it if false)
-     * @return the output stream to write to
-     */
-    public static OutputStream openGzipFileForWriting(final File file, final boolean append) {
-
-        try {
-            if (Defaults.BUFFER_SIZE > 0) {
-            return new CustomGzipOutputStream(new FileOutputStream(file, append),
-                                              Defaults.BUFFER_SIZE,
-                                              compressionLevel);
-            } else {
-                return new CustomGzipOutputStream(new FileOutputStream(file, append), compressionLevel);
-            }
-        }
-        catch (IOException ioe) {
-            throw new SAMException("Error opening file for writing: " + file.getName(), ioe);
-        }
-    }
-
-    public static OutputStream openFileForMd5CalculatingWriting(final File file) {
-        return new Md5CalculatingOutputStream(IOUtil.openFileForWriting(file), new File(file.getAbsolutePath() + ".md5"));
-    }
-
-    /**
-     * Utility method to copy the contents of input to output. The caller is responsible for
-     * opening and closing both streams.
-     *
-     * @param input contents to be copied
-     * @param output destination
-     */
-    public static void copyStream(final InputStream input, final OutputStream output) {
-        try {
-            final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
-            int bytesRead = 0;
-            while((bytesRead = input.read(buffer)) > 0) {
-                output.write(buffer, 0, bytesRead);
-            }
-        } catch (IOException e) {
-            throw new SAMException("Exception copying stream", e);
-        }
-    }
-
-    /**
-     * Copy input to output, overwriting output if it already exists.
-     */
-    public static void copyFile(final File input, final File output) {
-        try {
-            final InputStream is = new FileInputStream(input);
-            final OutputStream os = new FileOutputStream(output);
-            copyStream(is, os);
-            os.close();
-            is.close();
-        } catch (IOException e) {
-            throw new SAMException("Error copying " + input + " to " + output, e);
-        }
-    }
-
-    /**
-     *
-     * @param directory
-     * @param regexp
-     * @return list of files matching regexp.
-     */
-    public static File[] getFilesMatchingRegexp(final File directory, final String regexp) {
-        final Pattern pattern = Pattern.compile(regexp);
-        return getFilesMatchingRegexp(directory, pattern);
-    }
-
-    public static File[] getFilesMatchingRegexp(final File directory, final Pattern regexp) {
-        return directory.listFiles( new FilenameFilter() {
-            public boolean accept(final File dir, final String name) {
-                return regexp.matcher(name).matches();
-            }
-        });
-    }
-
-    /**
-     * Delete the given file or directory.  If a directory, all enclosing files and subdirs are also deleted.
-     */
-    public static boolean deleteDirectoryTree(final File fileOrDirectory) {
-        boolean success = true;
-
-        if (fileOrDirectory.isDirectory()) {
-            for (final File child : fileOrDirectory.listFiles()) {
-                success = success && deleteDirectoryTree(child);
-            }
-        }
-
-        success = success && fileOrDirectory.delete();
-        return success;
-    }
-
-    /**
-     * Returns the size (in bytes) of the file or directory and all it's children.
-     */
-    public static long sizeOfTree(final File fileOrDirectory) {
-        long total = fileOrDirectory.length();
-        if (fileOrDirectory.isDirectory()) {
-            for (final File f : fileOrDirectory.listFiles()) {
-                total += sizeOfTree(f);
-            }
-        }
-
-        return total;
-    }
-
-    /**
-     *
-     * Copies a directory tree (all subdirectories and files) recursively to a destination
-     */
-    public static void copyDirectoryTree(final File fileOrDirectory, final File destination) {
-        if (fileOrDirectory.isDirectory()) {
-            destination.mkdir();
-            for(final File f : fileOrDirectory.listFiles()) {
-                final File destinationFileOrDirectory =  new File(destination.getPath(),f.getName());
-                if (f.isDirectory()){
-                    copyDirectoryTree(f,destinationFileOrDirectory);
-                }
-                else {
-                    copyFile(f,destinationFileOrDirectory);
-                }
-            }
-        }
-    }
-
-    /**
-     * Create a temporary subdirectory in the default temporary-file directory, using the given prefix and suffix to generate the name.
-     * Note that this method is not completely safe, because it create a temporary file, deletes it, and then creates
-     * a directory with the same name as the file.  Should be good enough.
-     *
-     * @param prefix The prefix string to be used in generating the file's name; must be at least three characters long
-     * @param suffix The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be used
-     * @return File object for new directory
-     */
-    public static File createTempDir(final String prefix, final String suffix) {
-        try {
-            final File tmp = File.createTempFile(prefix, suffix);
-            if (!tmp.delete()) {
-                throw new SAMException("Could not delete temporary file " + tmp);
-            }
-            if (!tmp.mkdir()) {
-                throw new SAMException("Could not create temporary directory " + tmp);
-            }
-            return tmp;
-        } catch (IOException e) {
-            throw new SAMException("Exception creating temporary directory.", e);
-        }
-    }
-
-    /** Checks that a file exists and is readable, and then returns a buffered reader for it. */
-    public static BufferedReader openFileForBufferedReading(final File file) {
-        return new BufferedReader(new InputStreamReader(openFileForReading(file)), Defaults.NON_ZERO_BUFFER_SIZE);
-	}
-
-    /** Takes a string and replaces any characters that are not safe for filenames with an underscore */
-    public static String makeFileNameSafe(final String str) {
-        return str.trim().replaceAll("[\\s!\"#$%&'()*/:;<=>?@\\[\\]\\\\^`{|}~]", "_");
-    }
-
-    /** Returns the name of the file extension (i.e. text after the last "." in the filename) including the . */
-    public static String fileSuffix(final File f) {
-        final String full = f.getName();
-        final int index = full.lastIndexOf('.');
-        if (index > 0 && index > full.lastIndexOf(File.separator)) {
-            return full.substring(index);
-        } else {
-            return null;
-        }
-    }
-
-    /** Returns the full path to the file with all symbolic links resolved **/
-    public static String getFullCanonicalPath(final File file) {
-        try {
-            File f = file.getCanonicalFile();
-            String canonicalPath = "";
-            while (f != null  && !f.getName().equals("")) {
-                canonicalPath = "/" + f.getName() + canonicalPath;
-                f = f.getParentFile();
-                if (f != null) f = f.getCanonicalFile();
-            }
-            return canonicalPath;
-        } catch (final IOException ioe) {
-            throw new RuntimeIOException("Error getting full canonical path for " +
-                    file + ": " + ioe.getMessage(), ioe);
-        }
-   }
-
-    /**
-     * Reads everything from an input stream as characters and returns a single String.
-     */
-    public static String readFully(final InputStream in) {
-        try {
-            final BufferedReader r = new BufferedReader(new InputStreamReader(in), Defaults.NON_ZERO_BUFFER_SIZE);
-            final StringBuilder builder = new StringBuilder(512);
-            String line = null;
-
-            while ((line = r.readLine()) != null) {
-                if (builder.length() > 0) builder.append('\n');
-                builder.append(line);
-            }
-
-            return builder.toString();
-        }
-        catch (final IOException ioe) {
-            throw new RuntimeIOException("Error reading stream", ioe);
-        }
-    }
-
-    /**
-     * Returns an iterator over the lines in a text file. The underlying resources are automatically
-     * closed when the iterator hits the end of the input, or manually by calling close().
-     *
-     * @param f a file that is to be read in as text
-     * @return an iterator over the lines in the text file
-     */
-    public static IterableOnceIterator<String> readLines(final File f) {
-        try {
-            final BufferedReader in = IOUtil.openFileForBufferedReading(f);
-
-            return new IterableOnceIterator<String>() {
-                private String next = in.readLine();
-
-                /** Returns true if there is another line to read or false otherwise. */
-                @Override public boolean hasNext() { return next != null; }
-
-                /** Returns the next line in the file or null if there are no more lines. */
-                @Override public String next() {
-                    try {
-                        final String tmp = next;
-                        next = in.readLine();
-                        if (next == null) in.close();
-                        return tmp;
-                    }
-                    catch (final IOException ioe) { throw new RuntimeIOException(ioe); }
-                }
-
-                /** Closes the underlying input stream. Not required if end of stream has already been hit. */
-                @Override public void close() throws IOException { CloserUtil.close(in); }
-            };
-        }
-        catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /** Returns all of the untrimmed lines in the provided file. */
-    public static List<String> slurpLines(final File file) throws FileNotFoundException {
-        return slurpLines(new FileInputStream(file));
-    }
-
-    public static List<String> slurpLines(final InputStream is) throws FileNotFoundException {
-        /** See {@link java.util.Scanner} source for origin of delimiter used here.  */
-        return tokenSlurp(is, Charset.defaultCharset(), "\r\n|[\n\r\u2028\u2029\u0085]");
-    }
-
-    /** Convenience overload for {@link #slurp(java.io.InputStream, java.nio.charset.Charset)} using the default charset {@link java.nio.charset.Charset#defaultCharset()}. */
-    public static String slurp(final File file) throws FileNotFoundException {
-        return slurp(new FileInputStream(file));
-    }
-
-    /** Convenience overload for {@link #slurp(java.io.InputStream, java.nio.charset.Charset)} using the default charset {@link java.nio.charset.Charset#defaultCharset()}. */
-    public static String slurp(final InputStream is) {
-        return slurp(is, Charset.defaultCharset());
-    }
-
-    /** Reads all of the stream into a String, decoding with the provided {@link java.nio.charset.Charset} then closes the stream quietly. */
-    public static String slurp(final InputStream is, final Charset charSet) {
-        final List<String> tokenOrEmpty = tokenSlurp(is, charSet, "\\A");
-        return tokenOrEmpty.isEmpty() ? StringUtil.EMPTY_STRING : CollectionUtil.getSoleElement(tokenOrEmpty);
-    }
-
-    /** Tokenizes the provided input stream into memory using the given delimiter. */
-    private static List<String> tokenSlurp(final InputStream is, final Charset charSet, final String delimiterPattern) {
-        try {
-            final Scanner s = new Scanner(is, charSet.toString()).useDelimiter(delimiterPattern);
-            final LinkedList<String> tokens = new LinkedList<String>();
-            while (s.hasNext()) {
-                tokens.add(s.next());
-            }
-            return tokens;
-        } finally {
-            CloserUtil.close(is);
-        }
-    }
-
-    /**
-     * Go through the files provided and if they have one of the provided file extensions pass the file into the output
-     * otherwise assume that file is a list of filenames and unfold it into the output.
-     */
-    public static List<File> unrollFiles(final Collection<File> inputs, final String... extensions) {
-        if (extensions.length < 1) throw new IllegalArgumentException("Must provide at least one extension.");
-
-        final Stack<File> stack = new Stack<File>();
-        final List<File> output = new ArrayList<File>();
-        stack.addAll(inputs);
-
-        while (!stack.empty()) {
-            final File f = stack.pop();
-            final String name = f.getName();
-            boolean matched = false;
-
-            for (final String ext : extensions) {
-                if (!matched && name.endsWith(ext)) {
-                    output.add(f);
-                    matched = true;
-                }
-            }
-
-            // If the file didn't match a given extension, treat it as a list of files
-            if (!matched) {
-                IOUtil.assertFileIsReadable(f);
-
-                for (final String s : IOUtil.readLines(f)) {
-                    if (!s.trim().isEmpty()) stack.push(new File(s.trim()));
-                }
-            }
-        }
-
-        // Preserve input order (since we're using a stack above) for things that care
-        Collections.reverse(output);
-
-        return output;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Interval.java b/src/main/java/htsjdk/samtools/util/Interval.java
deleted file mode 100644
index 779bb25..0000000
--- a/src/main/java/htsjdk/samtools/util/Interval.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.util.Collection;
-
-/**
- * Represents a simple interval on a sequence.  Coordinates are 1-based closed ended.
- *
- * @author Tim Fennell
- */
-public class Interval implements Comparable<Interval>, Cloneable, Locatable {
-    private final boolean negativeStrand;
-    private final String name;
-    private final String contig;
-    private final int start;
-    private final int end;
-
-    /**
-     * Constructs an interval with the supplied sequence and start and end. If the end
-     * position is less than the start position an exception is thrown.
-     *
-     * @param sequence the name of the sequence
-     * @param start the start position of the interval on the sequence
-     * @param end the end position of the interval on the sequence
-     */
-    public Interval(final String sequence, final int start, final int end) {
-        this(sequence, start, end, false, null);
-    }
-
-    /**
-     * Constructs an interval with the supplied sequence and start, end, strand and name.
-     * If the end position is less than the start position an exception is thrown.
-     *
-     * @param sequence the name of the sequence
-     * @param start the start position of the interval on the sequence
-     * @param end the end position of the interval on the sequence
-     * @param negative true to indicate negative strand, false otherwise
-     * @param name the name (possibly null) of the interval
-     *
-     */
-    public Interval(final String sequence, final int start, final int end, final boolean negative, final String name) {
-        this.contig = sequence;
-        this.start = start;
-        this.end = end;
-        this.negativeStrand = negative;
-        this.name = name;
-    }
-
-    /** Gets the name of the sequence on which the interval resides.
-     * This is a simple alias of getContig()
-     * @deprecated use getContig() instead
-     */
-    @Deprecated
-    public String getSequence() { return getContig(); }
-
-
-    /** Returns true if the interval is on the negative strand, otherwise false. */
-    public boolean isNegativeStrand() { return this.negativeStrand; }
-
-    /** Returns true if the interval is on the positive strand, otherwise false. */
-    public boolean isPositiveStrand() { return !this.negativeStrand; }
-
-    /** Returns the name of the interval, possibly null. */
-    public String getName() { return this.name; }
-
-    /** Returns true if this interval overlaps the other interval, otherwise false. */
-    public boolean intersects(final Interval other) {
-        return  (this.getContig().equals(other.getContig()) &&
-                 CoordMath.overlaps(this.getStart(), this.getEnd(), other.getStart(), other.getEnd()));
-    }
-
-    public int getIntersectionLength(final Interval other) {
-        if (this.intersects(other)) {
-            return (int)CoordMath.getOverlap(this.getStart(), this.getEnd(), other.getStart(), other.getEnd());
-        }
-        return 0;
-    }
-
-
-    /** Returns a new Interval that represents the intersection between the two intervals. */
-    public Interval intersect(final Interval that) {
-        if (!intersects(that)) throw new IllegalArgumentException(that + " does not intersect " + this);
-        return new Interval(this.getContig(),
-                            Math.max(this.getStart(), that.getStart()),
-                            Math.min(this.getEnd(), that.getEnd()),
-                            this.negativeStrand,
-                            this.name + " intersection " + that.name);
-    }
-
-
-    /** Returns true if this interval overlaps the other interval, otherwise false. */
-    public boolean abuts(final Interval other) {
-        return this.getContig().equals(other.getContig()) &&
-               (this.getStart() == other.getEnd() + 1 || other.getStart() == this.getEnd() + 1);
-    }
-
-    /** Gets the length of this interval. */
-    public int length() { return this.getEnd() - this.getStart() + 1; }
-
-    /** Returns a new interval that is padded by the amount of bases specified on either side. */
-    public Interval pad(final int left, final int right) {
-        return new Interval(this.getContig(), this.getStart()-left, this.getEnd()+right, this.negativeStrand, this.name);
-    }
-
-    /** Counts the total number of bases a collection of intervals. */
-    public static long countBases(final Collection<Interval> intervals) {
-        long total = 0;
-        for (final Interval i : intervals) {
-            total += i.length();
-        }
-
-        return total;
-    }
-
-
-    /**
-     * Sort based on sequence.compareTo, then start pos, then end pos
-     * with null objects coming lexically last
-     */
-    public int compareTo(final Interval that) {
-        if (that == null) return -1; // nulls last
-
-        int result = this.getContig().compareTo(that.getContig());
-        if (result == 0) {
-            if (this.getStart() == that.getStart()) {
-                result = this.getEnd() - that.getEnd();
-            }
-            else {
-                result = this.getStart() - that.getStart();
-            }
-        }
-
-        return result;
-    }
-
-    /** Equals method that agrees with {@link #compareTo(Interval)}. */
-    public boolean equals(final Object other) {
-        if (!(other instanceof Interval)) return false;
-        else if (this == other) return true;
-        else {
-            Interval that = (Interval)other;
-            return (this.compareTo(that) == 0);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        int result = getContig().hashCode();
-        result = 31 * result + getStart();
-        result = 31 * result + getEnd();
-        return result;
-    }
-
-    public String toString() {
-        return getContig() + ":" + getStart() + "-" + getEnd() + "\t" + (negativeStrand ? '-' : '+') + "\t" + ((null == name) ? '.' : name);
-    }
-
-    @Override
-    public Interval clone() {
-        try { return (Interval) super.clone(); }
-        catch (CloneNotSupportedException cnse) { throw new SAMException("That's unpossible", cnse); }
-    }
-
-    @Override
-    public String getContig() {
-        return contig;
-    }
-
-    @Override
-    public int getStart() {
-        return start;
-    }
-
-    @Override
-    public int getEnd() {
-        return end;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IntervalList.java b/src/main/java/htsjdk/samtools/util/IntervalList.java
deleted file mode 100644
index 76cb508..0000000
--- a/src/main/java/htsjdk/samtools/util/IntervalList.java
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SAMTextHeaderCodec;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * Represents a list of intervals against a reference sequence that can be written to
- * and read from a file.  The file format is relatively simple and reflects the SAM
- * alignment format to a degree.
- *
- * A SAM style header must be present in the file which lists the sequence records
- * against which the intervals are described.  After the header the file then contains
- * records one per line in text format with the following values tab-separated:
- *    Sequence name,
- *    Start position (1-based),
- *    End position (1-based, end inclusive),
- *    Strand (either + or -),
- *    Interval name (an, ideally unique, name for the interval),
- *
- * @author Tim Fennell
- * @author Yossi Farjoun
- */
-public class IntervalList implements Iterable<Interval> {
-    public static final String INTERVAL_LIST_FILE_EXTENSION = ".interval_list";
-
-    private final SAMFileHeader header;
-    private final List<Interval> intervals = new ArrayList<Interval>();
-
-    private static final Log log = Log.getInstance(IntervalList.class);
-
-    /** Constructs a new interval list using the supplied header information. */
-    public IntervalList(final SAMFileHeader header) {
-        if (header == null) throw new IllegalArgumentException("SAMFileHeader must be supplied.");
-        this.header = header;
-    }
-
-    /** Constructs a new interval list using the supplied header information. */
-    public IntervalList(final SAMSequenceDictionary dict) {
-        this(new SAMFileHeader(dict));
-    }
-
-    /** Gets the header (if there is one) for the interval list. */
-    public SAMFileHeader getHeader() { return header; }
-
-    /** Returns an iterator over the intervals. */
-    public Iterator<Interval> iterator() { return this.intervals.iterator(); }
-
-    /** Adds an interval to the list of intervals. */
-    public void add(final Interval interval) {
-        if (header.getSequence(interval.getContig()) == null) {
-            throw new IllegalArgumentException(String.format("Cannot add interval %s, contig not in header", interval.toString()));
-        }
-        this.intervals.add(interval);
-    }
-
-    /** Adds a Collection of intervals to the list of intervals. */
-    public void addall(final Collection<Interval> intervals) {
-        //use this instead of addAll so that the contig checking happens.
-        for (Interval interval : intervals) {
-            add(interval);
-        }
-    }
-
-    /**
-     * Sorts the internal collection of intervals by coordinate.
-     *
-     * Note: this function modifies the object in-place and is therefore difficult to work with.
-     *
-     * @deprecated use {@link #sorted()} instead.
-     */
-    @Deprecated
-    public void sort() {
-        Collections.sort(this.intervals, new IntervalCoordinateComparator(this.header));
-        this.header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-    }
-
-    /** Returns a new IntervalList where each interval is padded by the specified amount of bases. */
-    public IntervalList padded(final int before, final int after) {
-        if (before < 0 || after < 0) throw new IllegalArgumentException("Padding values must be >= 0.");
-        final IntervalList padded = new IntervalList(this.getHeader().clone());
-        final SAMSequenceDictionary dict = padded.getHeader().getSequenceDictionary();
-        for (final Interval i : this) {
-            final SAMSequenceRecord seq = dict.getSequence(i.getContig());
-            final int start = Math.max(1, i.getStart() - before);
-            final int end   = Math.min(seq.getSequenceLength(), i.getEnd() + after);
-            padded.add(new Interval(i.getContig(), start, end, i.isNegativeStrand(), i.getName()));
-        }
-
-        return padded;
-    }
-
-    /** Returns a new IntervalList where each interval is padded by 'padding' bases on each side. */
-    public IntervalList padded(final int padding) {
-        return padded(padding, padding);
-    }
-
-    /** returns an independent sorted IntervalList*/
-    public IntervalList sorted() {
-        final IntervalList sorted = IntervalList.copyOf(this);
-        Collections.sort(sorted.intervals, new IntervalCoordinateComparator(sorted.header));
-        sorted.header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        return sorted;
-    }
-
-    /** Returned an independent IntervalList that is sorted and uniquified. */
-    public IntervalList uniqued() {
-        return uniqued(true);
-    }
-
-    /**
-     * Returned an independent IntervalList that is sorted and uniquified.
-     * @param concatenateNames If false, interval names are not concatenated when merging intervals to save space.
-     */
-    public IntervalList uniqued(final boolean concatenateNames) {
-        final List<Interval> tmp = getUniqueIntervals(sorted(), concatenateNames);
-        final IntervalList value = new IntervalList(this.header.clone());
-        value.intervals.addAll(tmp);
-        return value;
-    }
-
-    /**
-     * Sorts and uniques the list of intervals held within this interval list.
-     *
-     * Note: this function modifies the object in-place and is therefore difficult to work with.
-     *
-     * @deprecated use {@link #uniqued()} instead.
-     */
-    @Deprecated
-    public void unique() {
-        unique(true);
-    }
-
-    /**
-     * Sorts and uniques the list of intervals held within this interval list.
-     *
-     * Note: this function modifies the object in-place and is therefore difficult to work with.
-     *
-     * @param concatenateNames If false, interval names are not concatenated when merging intervals to save space.
-     * @deprecated use {@link #uniqued(boolean)} instead.
-     */
-    @Deprecated
-    public void unique(final boolean concatenateNames) {
-        sort();
-        final List<Interval> tmp = getUniqueIntervals(concatenateNames);
-        this.intervals.clear();
-        this.intervals.addAll(tmp);
-    }
-
-    /** Gets the set of intervals as held internally. */
-    public List<Interval> getIntervals() {
-        return Collections.unmodifiableList(this.intervals);
-    }
-
-    /**
-     * Merges the list of intervals and then reduces them down where regions overlap
-     * or are directly adjacent to one another.  During this process the "merged" interval
-     * will retain the strand and name of the 5' most interval merged.
-     *
-     * Note: has the side-effect of sorting the stored intervals in coordinate order if not already sorted.
-     *
-     * Note: this function modifies the object in-place and is therefore difficult to work with.
-     *
-     * @return the set of unique intervals condensed from the contained intervals
-     * @deprecated use {@link #uniqued()#getIntervals()} instead.
-     */
-    @Deprecated
-    public List<Interval> getUniqueIntervals() {
-        return getUniqueIntervals(true);
-    }
-
-    //NO SIDE EFFECTS HERE!
-    /**
-     * Merges list of intervals and reduces them like htsjdk.samtools.util.IntervalList#getUniqueIntervals()
-     * @param concatenateNames If false, the merged interval has the name of the earlier interval.  This keeps name shorter.
-     */
-    public static List<Interval> getUniqueIntervals(final IntervalList list, final boolean concatenateNames) {
-        return getUniqueIntervals(list, concatenateNames, false);
-    }
-
-    //NO SIDE EFFECTS HERE!
-    /**
-     * Merges list of intervals and reduces them like htsjdk.samtools.util.IntervalList#getUniqueIntervals()
-     * @param concatenateNames If false, the merged interval has the name of the earlier interval.  This keeps name shorter.
-     * @param enforceSameStrands enforce that merged intervals have the same strand, otherwise ignore.
-     */
-    public static List<Interval> getUniqueIntervals(final IntervalList list, final boolean concatenateNames, final boolean enforceSameStrands) {
-
-        final List<Interval> intervals;
-        if (list.getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            intervals = list.sorted().intervals;
-        }
-        else {
-            intervals = list.intervals;
-        }
-
-        final List<Interval> unique = new ArrayList<Interval>();
-        final TreeSet<Interval> toBeMerged = new TreeSet<Interval>();
-        Interval current = null;
-
-        for (final Interval next : intervals) {
-            if (current == null) {
-                toBeMerged.add(next);
-                current = next;
-            }
-            else if (current.intersects(next) || current.abuts(next)) {
-                if (enforceSameStrands && current.isNegativeStrand() != next.isNegativeStrand()) throw new SAMException("Strands were not equal for: " + current.toString() + " and " + next.toString());
-                toBeMerged.add(next);
-                current = new Interval(current.getContig(), current.getStart(), Math.max(current.getEnd(), next.getEnd()), current.isNegativeStrand(), null);
-            }
-            else {
-                // Emit merged/unique interval
-                unique.add(merge(toBeMerged, concatenateNames));
-
-                // Set current == next for next iteration
-                toBeMerged.clear();
-                current = next;
-                toBeMerged.add(current);
-            }
-        }
-
-        if (!toBeMerged.isEmpty()) unique.add(merge(toBeMerged, concatenateNames));
-        return unique;
-    }
-
-    /**
-     * Merges list of intervals and reduces them like {@link #getUniqueIntervals()}.
-     *
-     * Note: this function modifies the object in-place and is therefore difficult to work with.
-     *
-     * @param concatenateNames If false, the merged interval has the name of the earlier interval. This keeps name shorter.
-     * @deprecated use {@link #uniqued(boolean)#getIntervals()} or {@link #getUniqueIntervals(IntervalList, boolean)} instead.
-     */
-    @Deprecated
-    public List<Interval> getUniqueIntervals(final boolean concatenateNames) {
-        if (getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            sort();
-        }
-
-        return getUniqueIntervals(this, concatenateNames);
-    }
-
-    /**
-     * Given a list of Intervals and a band multiple, this method will return a list of Intervals such that all of the intervals
-     * do not straddle integer multiples of that band.
-     *
-     * ex: if there is an interval (7200-9300) and the bandMultiple is 1000, the interval will be split into:
-     * (7200-7999, 8000-8999, 9000-9300)
-     * @param intervals A list of Interval
-     * @param bandMultiple integer value (> 0) to break up intervals in the list at integer multiples of
-     * @return list of intervals that are broken up
-     */
-    public static List<Interval> breakIntervalsAtBandMultiples(final List<Interval> intervals, final int bandMultiple) {
-        final List<Interval> brokenUpIntervals = new ArrayList<Interval>();
-        for (final Interval interval : intervals) {
-            if (interval.getEnd() >= interval.getStart()) {       // Normal, non-empty intervals
-                final int startIndex = interval.getStart() / bandMultiple;
-                final int endIndex = interval.getEnd() / bandMultiple;
-                if (startIndex == endIndex) {
-                    brokenUpIntervals.add(interval);
-                } else {
-                    brokenUpIntervals.addAll(breakIntervalAtBandMultiples(interval, bandMultiple));
-                }
-            }
-            else {                                  // Special case - empty intervals ex: (100-99)
-                brokenUpIntervals.add(interval);
-            }
-        }
-        return brokenUpIntervals;
-    }
-
-    /**
-     * Given an Interval and a band multiple, this method will return a list of Intervals such that all of the intervals
-     * do not straddle integer multiples of that band.
-     *
-     * ex: if the interval is (7200-9300) and the bandMultiple is 1000, the interval will be split into:
-     * (7200-7999, 8000-8999, 9000-9300)
-     * @param interval an Interval
-     * @param bandMultiple integer value (> 0) to break up intervals in the list at integer multiples of
-     * @return list of intervals that are broken up
-     */
-    private static List<Interval> breakIntervalAtBandMultiples(final Interval interval, final int bandMultiple) {
-        final List<Interval> brokenUpIntervals = new ArrayList<Interval>();
-
-        int startPos = interval.getStart();
-        final int startOfIntervalIndex = startPos / bandMultiple;
-        int startIndex = startOfIntervalIndex;
-        final int endIndex = interval.getEnd() / bandMultiple;
-        while (startIndex <= endIndex) {
-            int endPos = (startIndex + 1) * bandMultiple -1;
-            if (endPos > interval.getEnd()) {
-                endPos = interval.getEnd();
-            }
-            // add start/end to list of broken up intervals to return (and uniquely name it).
-            brokenUpIntervals.add(new Interval(interval.getContig(), startPos, endPos, interval.isNegativeStrand(), interval.getName() + "." + (startIndex - startOfIntervalIndex + 1)));
-            startIndex++;
-            startPos = startIndex * bandMultiple;
-        }
-        return brokenUpIntervals;
-    }
-
-
-    /** Merges a sorted collection of intervals and optionally concatenates unique names or takes the first name. */
-    static Interval merge(final SortedSet<Interval> intervals, final boolean concatenateNames) {
-        final String chrom = intervals.first().getContig();
-        int start = intervals.first().getStart();
-        int end   = intervals.last().getEnd();
-        final boolean neg  = intervals.first().isNegativeStrand();
-        final LinkedHashSet<String> names = new LinkedHashSet<String>();
-        final String name;
-
-        for (final Interval i : intervals) {
-            if (i.getName() != null) names.add(i.getName());
-            start = Math.min(start, i.getStart());
-            end   = Math.max(end, i.getEnd());
-        }
-
-        if (concatenateNames) {
-            if (names.isEmpty()) name = null;
-            else name = StringUtil.join("|", names);
-        }
-        else { name = names.iterator().next(); }
-
-        return new Interval(chrom, start, end, neg, name);
-    }
-
-    /** Gets the (potentially redundant) sum of the length of the intervals in the list. */
-    public long getBaseCount() {
-        return Interval.countBases(this.intervals);
-    }
-
-    /** Gets the count of unique bases represented by the intervals in the list. */
-    public long getUniqueBaseCount() {
-        return uniqued().getBaseCount();
-    }
-
-    /** Returns the count of intervals in the list. */
-    public int size() {
-        return this.intervals.size();
-    }
-
-    /** creates a independent copy of the given IntervalList
-     *
-     * @param list
-     * @return
-     */
-    public static IntervalList copyOf(final IntervalList list){
-        final IntervalList clone = new IntervalList(list.header.clone());
-        clone.intervals.addAll(list.intervals);
-        return clone;
-    }
-
-    /**
-     * Parses an interval list from a file.
-     * @param file the file containing the intervals
-     * @return an IntervalList object that contains the headers and intervals from the file
-     */
-    public static IntervalList fromFile(final File file) {
-        final BufferedReader reader= IOUtil.openFileForBufferedReading(file);
-        final IntervalList list = fromReader(reader);
-        try {
-            reader.close();
-        } catch (final IOException e) {
-            throw new SAMException(String.format("Failed to close file %s after reading",file));
-        }
-
-        return list;
-    }
-
-    /**
-     * Creates an IntervalList from the given sequence name
-     * @param header header to use to create IntervalList
-     * @param sequenceName name of sequence in header
-     * @return a new intervalList with given header that contains the reference name
-     */
-    public static IntervalList fromName(final SAMFileHeader header, final String sequenceName) {
-        final IntervalList ref = new IntervalList(header);
-        ref.add(new Interval(sequenceName, 1, header.getSequence(sequenceName).getSequenceLength()));
-
-        return ref;
-    }
-
-    /**
-     * Calls {@link #fromFile(java.io.File)} on the provided files, and returns their {@link #union(java.util.Collection)}.
-     */
-    public static IntervalList fromFiles(final Collection<File> intervalListFiles) {
-        final Collection<IntervalList> intervalLists = new ArrayList<IntervalList>();
-        for (final File file : intervalListFiles) {
-            intervalLists.add(IntervalList.fromFile(file));
-        }
-        return IntervalList.union(intervalLists);
-    }
-
-    /**
-     * Parses an interval list from a reader in a stream based fashion.
-     * @param in a BufferedReader that can be read from
-     * @return an IntervalList object that contains the headers and intervals from the file
-     */
-    public static IntervalList fromReader(final BufferedReader in) {
-        try {
-            // Setup a reader and parse the header
-            final StringBuilder builder = new StringBuilder(4096);
-            String line = null;
-
-            while ((line = in.readLine()) != null) {
-                if (line.startsWith("@")) {
-                    builder.append(line).append('\n');
-                }
-                else {
-                    break;
-                }
-            }
-
-            if (builder.length() == 0) {
-                throw new IllegalStateException("Interval list file must contain header. ");
-            }
-
-            final StringLineReader headerReader = new StringLineReader(builder.toString());
-            final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-            final IntervalList list = new IntervalList(codec.decode(headerReader, "BufferedReader"));
-            final SAMSequenceDictionary dict = list.getHeader().getSequenceDictionary();
-
-            //there might not be any lines after the header, in which case we should return an empty list
-            if(line == null) return list;
-
-            // Then read in the intervals
-            final FormatUtil format = new FormatUtil();
-            do {
-                if (line.trim().isEmpty()) continue; // skip over blank lines
-
-                // Make sure we have the right number of fields
-                final String[] fields = line.split("\t");
-                if (fields.length != 5) {
-                    throw new SAMException("Invalid interval record contains " +
-                            fields.length + " fields: " + line);
-                }
-
-                // Then parse them out
-                final String seq = fields[0];
-                final int start = format.parseInt(fields[1]);
-                final int end   = format.parseInt(fields[2]);
-
-                final boolean negative;
-                if (fields[3].equals("-")) negative = true;
-                else if (fields[3].equals("+")) negative = false;
-                else throw new IllegalArgumentException("Invalid strand field: " + fields[3]);
-
-                final String name = fields[4];
-
-                final Interval interval = new Interval(seq, start, end, negative, name);
-                if (dict.getSequence(seq) == null) {
-                    log.warn("Ignoring interval for unknown reference: " + interval);
-                }
-                else {
-                    list.intervals.add(interval);
-                }
-            }
-            while ((line = in.readLine()) != null);
-
-            return list;
-        }
-        catch (final IOException ioe) {
-            throw new SAMException("Error parsing interval list.", ioe);
-        }
-        finally {
-            try { in.close(); } catch (final Exception e) { /* do nothing */ }
-        }
-    }
-
-    /**
-     * Writes out the list of intervals to the supplied file.
-     * @param file a file to write to.  If exists it will be overwritten.
-     */
-    public void write(final File file) {
-        try {
-            final BufferedWriter out = IOUtil.openFileForBufferedWriting(file);
-            final FormatUtil format = new FormatUtil();
-
-            // Write out the header
-            if (this.header != null) {
-                final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-                codec.encode(out, this.header);
-            }
-
-            // Write out the intervals
-            for (final Interval interval : this) {
-                out.write(interval.getContig());
-                out.write('\t');
-                out.write(format.format(interval.getStart()));
-                out.write('\t');
-                out.write(format.format(interval.getEnd()));
-                out.write('\t');
-                out.write(interval.isPositiveStrand() ? '+' : '-');
-                out.write('\t');
-                if(interval.getName() != null){
-                    out.write(interval.getName());
-                }
-                else{
-                    out.write(".");
-                }
-                out.newLine();
-            }
-
-            out.flush();
-            out.close();
-        }
-        catch (final IOException ioe) {
-            throw new SAMException("Error writing out interval list to file: " + file.getAbsolutePath(), ioe);
-        }
-    }
-
-    /**
-     * A utility function for generating the intersection of two IntervalLists, checks for equal dictionaries.
-     *
-     * @param list1 the first IntervalList
-     * @param list2 the second IntervalList
-     * @return the intersection of list1 and list2.
-     */
-
-    public static IntervalList intersection(final IntervalList list1, final IntervalList list2) {
-
-        final IntervalList result;
-        // Ensure that all the sequence dictionaries agree and merge the lists
-        SequenceUtil.assertSequenceDictionariesEqual(list1.getHeader().getSequenceDictionary(),
-                list2.getHeader().getSequenceDictionary());
-
-        result = new IntervalList(list1.getHeader().clone());
-
-        final OverlapDetector<Interval> detector = new OverlapDetector<Interval>(0, 0);
-
-        detector.addAll(list1.getIntervals(), list1.getIntervals());
-
-        for (final Interval i : list2.getIntervals()) {
-            final Collection<Interval> as = detector.getOverlaps(i);
-            for (final Interval j : as) {
-                final Interval tmp = i.intersect(j);
-
-                result.add(tmp);
-            }
-        }
-        return result.uniqued();
-
-    }
-
-    /**
-     * A utility function for intersecting a list of IntervalLists, checks for equal dictionaries.
-     *
-     * @param lists the list of IntervalList
-     * @return the intersection of all the IntervalLists in lists.
-     */
-
-
-    public static IntervalList intersection(final Collection<IntervalList> lists) {
-
-        IntervalList intersection = null;
-        for (final IntervalList list : lists) {
-            if(intersection == null){
-                intersection = list;
-            }
-            else{
-                intersection = intersection(intersection, list);
-            }
-        }
-        return intersection;
-    }
-
-    /**
-     * A utility function for merging a list of IntervalLists, checks for equal dictionaries.
-     * Merging does not look for overlapping intervals nor uniquify
-     *
-     * @param lists a list of IntervalList
-     * @return the union of all the IntervalLists in lists.
-     */
-    public static IntervalList concatenate(final Collection<IntervalList> lists) {
-        if(lists.isEmpty()){
-            throw new SAMException("Cannot concatenate an empty list of IntervalLists.");
-        }
-
-        // Ensure that all the sequence dictionaries agree and merge the lists
-        final SAMFileHeader header = lists.iterator().next().getHeader().clone();
-        header.setSortOrder(SAMFileHeader.SortOrder.unsorted);
-
-        final IntervalList merged = new IntervalList(header);
-
-        for (final IntervalList in : lists) {
-            SequenceUtil.assertSequenceDictionariesEqual(merged.getHeader().getSequenceDictionary(),
-                    in.getHeader().getSequenceDictionary());
-
-            merged.addall(in.intervals);
-        }
-
-        return merged;
-    }
-
-    /**
-     * A utility function for finding the union of a list of IntervalLists, checks for equal dictionaries.
-     * also looks for overlapping intervals, uniquifies, and sorts (by coordinate)
-     *
-     * @param lists the list of IntervalList
-     * @return the union of all the IntervalLists in lists.
-     */
-    public static IntervalList union(final Collection<IntervalList> lists) {
-        final IntervalList merged = concatenate(lists);
-        return merged.uniqued();
-    }
-
-    public static IntervalList union(final IntervalList list1, final IntervalList list2) {
-        final Collection<IntervalList> duo = CollectionUtil.makeList(list1, list2);
-        return IntervalList.union(duo);
-    }
-
-    /** inverts an IntervalList and returns one that has exactly all the bases in the dictionary that the original one does not.
-     *
-     * @param list an IntervalList
-     * @return an IntervalList that is complementary to list
-     */
-    public static IntervalList invert(final IntervalList list) {
-        final IntervalList inverse = new IntervalList(list.header.clone());
-
-        final ListMap<Integer,Interval> map = new ListMap<Integer,Interval>();
-
-        //add all the intervals (uniqued and therefore also sorted) to a ListMap from sequenceIndex to a list of Intervals
-        for(final Interval i : list.uniqued().getIntervals()){
-            map.add(list.getHeader().getSequenceIndex(i.getContig()),i);
-        }
-
-        // a counter to supply newly-created intervals with a name
-        int intervals = 0;
-
-        //iterate over the contigs in the dictionary
-        for (final SAMSequenceRecord samSequenceRecord : list.getHeader().getSequenceDictionary().getSequences()) {
-            final Integer sequenceIndex = samSequenceRecord.getSequenceIndex();
-            final String sequenceName   = samSequenceRecord.getSequenceName();
-            final int sequenceLength    = samSequenceRecord.getSequenceLength();
-
-            Integer lastCoveredPosition = 0; //start at beginning of sequence
-            //iterate over list of intervals that are in sequence
-            if (map.containsKey(sequenceIndex)) // if there are intervals in the ListMap on this contig, iterate over them (in order)
-                for (final Interval i : map.get(sequenceIndex)) {
-                    if (i.getStart() > lastCoveredPosition + 1) //if there's space between the last interval and the current one, add an interval between them
-                        inverse.add(new Interval(sequenceName, lastCoveredPosition + 1, i.getStart() - 1, false, "interval-" + (++intervals)));
-                    lastCoveredPosition = i.getEnd(); //update the last covered position
-                }
-            //finally, if there's room between the last covered position and the end of the sequence, add an interval
-            if (sequenceLength > lastCoveredPosition) //if there's space between the last interval and the next
-                // one, add an interval. This also covers the case that there are no intervals in the ListMap for a contig.
-                inverse.add(new Interval(sequenceName, lastCoveredPosition + 1, sequenceLength, false, "interval-" + (++intervals)));
-        }
-
-        return inverse;
-    }
-
-    /**
-     * A utility function for subtracting a collection of IntervalLists from another. Resulting loci are those that are in the first collection
-     * but not the second.
-     *
-     * @param lhs the collection of IntervalList from which to subtract intervals
-     * @param rhs the collection of intervals to subtract
-     * @return an IntervalList comprising all loci that are in the first collection but not the second  lhs-rhs=answer.
-     */
-    public static IntervalList subtract(final Collection<IntervalList> lhs, final Collection<IntervalList> rhs) {
-        return intersection(
-                union(lhs),
-                invert(union(rhs)));
-    }
-
-    /**
-     * A utility function for subtracting a single IntervalList from another. Resulting loci are those that are in the first List
-     * but not the second.
-     *
-     * @param lhs the IntervalList from which to subtract intervals
-     * @param rhs the IntervalList to subtract
-     * @return an IntervalList comprising all loci that are in first IntervalList but not the second. lhs-rhs=answer
-     */
-    public static IntervalList subtract(final IntervalList lhs, final IntervalList rhs) {
-        return subtract(Collections.singletonList(lhs),
-                Collections.singletonList(rhs));
-    }
-
-    /**
-     * A utility function for finding the difference between two IntervalLists.
-     *
-     * @param lists1 the first collection of IntervalLists
-     * @param lists2 the second collection of IntervalLists
-     * @return the difference between the two intervals, i.e. the loci that are only in one IntervalList but not both
-     */
-    public static IntervalList difference(final Collection<IntervalList> lists1, final Collection<IntervalList> lists2) {
-        return union(
-                subtract(lists1, lists2),
-                subtract(lists2, lists1));
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final IntervalList intervals1 = (IntervalList) o;
-
-        return header.equals(intervals1.header) && intervals.equals(intervals1.intervals);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = header.hashCode();
-        result = 31 * result + intervals.hashCode();
-        return result;
-    }
-}
-
-/**
- * Comparator that orders intervals based on their sequence index, by coordinate
- * then by strand and finally by name.
- */
-class IntervalCoordinateComparator implements Comparator<Interval>, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private final SAMFileHeader header;
-
-    /** Constructs a comparator using the supplied sequence header. */
-    IntervalCoordinateComparator(final SAMFileHeader header) {
-        this.header = header;
-    }
-
-    public int compare(final Interval lhs, final Interval rhs) {
-        final int lhsIndex = this.header.getSequenceIndex(lhs.getContig());
-        final int rhsIndex = this.header.getSequenceIndex(rhs.getContig());
-        int retval = lhsIndex - rhsIndex;
-
-        if (retval == 0) retval = lhs.getStart() - rhs.getStart();
-        if (retval == 0) retval = lhs.getEnd()   - rhs.getEnd();
-        if (retval == 0) {
-            if (lhs.isPositiveStrand() && rhs.isNegativeStrand()) retval = -1;
-            else if (lhs.isNegativeStrand() && rhs.isPositiveStrand()) retval = 1;
-        }
-        if (retval == 0) {
-            if (lhs.getName() == null) {
-                if (rhs.getName() == null) return 0;
-                else return -1;
-            } else if (rhs.getName() == null) {
-                return 1;
-            }
-            else {
-                return lhs.getName().compareTo(rhs.getName());
-            }
-        }
-
-        return retval;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IntervalListReferenceSequenceMask.java b/src/main/java/htsjdk/samtools/util/IntervalListReferenceSequenceMask.java
deleted file mode 100644
index 1ddd164..0000000
--- a/src/main/java/htsjdk/samtools/util/IntervalListReferenceSequenceMask.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFileHeader;
-
-import java.util.BitSet;
-import java.util.List;
-
-/**
- * Serve up loci of interest based on an interval list.
- *
- * @author alecw at broadinstitute dot oh are gee
- */
-public class IntervalListReferenceSequenceMask implements ReferenceSequenceMask {
-
-    private final SAMFileHeader header;
-    // if memory usage becomes a problem... this could be changed to a SparseBitSet
-    // http://java.sun.com/developer/onlineTraining/collections/magercises/BitSet/index.html
-    private final BitSet currentBitSet = new BitSet();
-    private int currentSequenceIndex = -1;
-    private final PeekableIterator<Interval> intervalIterator;
-    private final int lastSequenceIndex;
-    private final int lastPosition;
-
-    public IntervalListReferenceSequenceMask(final IntervalList intervalList) {
-        this.header = intervalList.getHeader();
-        if (intervalList.getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
-            intervalList.sorted();
-        }
-        final List<Interval> uniqueIntervals = intervalList.uniqued().getIntervals();
-        if (uniqueIntervals.isEmpty()) {
-            lastSequenceIndex = -1;
-            lastPosition = 0;
-        } else {
-            final Interval lastInterval = uniqueIntervals.get(uniqueIntervals.size() - 1);
-            lastSequenceIndex = header.getSequenceIndex((lastInterval.getContig()));
-            lastPosition = lastInterval.getEnd();
-        }
-        intervalIterator = new PeekableIterator<Interval>(uniqueIntervals.iterator());
-    }
-
-    /**
-     * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
-     *
-     * @return true if the mask is set for the given sequence and position
-     */
-    public boolean get(final int sequenceIndex, final int position) {
-        ensureSequenceLoaded(sequenceIndex);
-        return currentBitSet.get(position);
-    }
-
-    /**
-     * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
-     *
-     * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
-     */
-    public int nextPosition(final int sequenceIndex, final int position) {
-        ensureSequenceLoaded(sequenceIndex);
-        // nextSetBit returns the first set bit on or after the starting index, therefore position+1
-        return currentBitSet.nextSetBit(position + 1);
-    }
-
-    private void ensureSequenceLoaded(final int sequenceIndex) {
-        if (sequenceIndex < this.currentSequenceIndex) {
-            throw new IllegalArgumentException("Cannot look at an earlier sequence.  Current: " +
-                    this.currentSequenceIndex + "; requested: " + sequenceIndex);
-        }
-        if (sequenceIndex > currentSequenceIndex) {
-            currentBitSet.clear();
-            while (intervalIterator.hasNext()) {
-                final Interval interval = intervalIterator.peek();
-                final int nextSequenceIndex = header.getSequenceIndex(interval.getContig());
-                if (nextSequenceIndex < sequenceIndex) {
-                    intervalIterator.next();
-                } else if (nextSequenceIndex == sequenceIndex) {
-                    currentBitSet.set(interval.getStart(), interval.getEnd() + 1);
-                    intervalIterator.next();
-                } else {
-                    break;
-                }
-            }
-            currentSequenceIndex = sequenceIndex;
-        }
-    }
-
-    /**
-     * @return Largest sequence index for which there are set bits.
-     */
-    public int getMaxSequenceIndex() {
-        return lastSequenceIndex;
-    }
-
-    /**
-     * @return the largest position on the last sequence index
-     */
-    public int getMaxPosition() {
-        return lastPosition;
-    }
-
-    public SAMFileHeader getHeader() {
-        return header;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IntervalTree.java b/src/main/java/htsjdk/samtools/util/IntervalTree.java
deleted file mode 100644
index 49c3017..0000000
--- a/src/main/java/htsjdk/samtools/util/IntervalTree.java
+++ /dev/null
@@ -1,1227 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * A Red-Black tree with intervals for keys.
- * Not thread-safe, and cannot be made so.
- *
- * 7/24/2008: This was copied from the tedUtils package.
- * IMPORTANT!!! It has been modified to use the Reseq way of
- * handling coordinates (end-inclusive).
- *
- * @author tsharpe
- */
-public class IntervalTree<V> implements Iterable<IntervalTree.Node<V>>
-{
-    /**
-     * Return the number of intervals in the tree.
-     * @return The number of intervals.
-     */
-    public int size()
-    {
-        return mRoot == null ? 0 : mRoot.getSize();
-    }
-
-    /**
-     * Remove all entries.
-     */
-    public void clear()
-    {
-        mRoot = null;
-    }
-
-    /**
-     * Put a new interval into the tree (or update the value associated with an existing interval).
-     * If the interval is novel, the special sentinel value is returned.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @param value The associated value.
-     * @return The old value associated with that interval, or the sentinel.
-     */
-    @SuppressWarnings("null")
-    public V put( final int start, final int end, final V value )
-    {
-        if ( start > end )
-            throw new IllegalArgumentException("Start cannot exceed end.");
-
-        V result = mSentinel;
-
-        if ( mRoot == null )
-        {
-            mRoot = new Node<V>(start,end,value);
-        }
-        else
-        {
-            Node<V> parent = null;
-            Node<V> node = mRoot;
-            int cmpVal = 0;
-
-            while ( node != null )
-            {
-                parent = node; // last non-null node
-                cmpVal = node.compare(start,end);
-                if ( cmpVal == 0 )
-                {
-                    break;
-                }
-
-                node = cmpVal < 0 ? node.getLeft() : node.getRight();
-            }
-
-            if ( cmpVal == 0 )
-            {
-                result = parent.setValue(value);
-            }
-            else
-            {
-                if ( cmpVal < 0 )
-                {
-                    mRoot = parent.insertLeft(start,end,value,mRoot);
-                }
-                else
-                {
-                    mRoot = parent.insertRight(start,end,value,mRoot);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Remove an interval from the tree.  If the interval does not exist in the tree the
-     * special sentinel value is returned.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The value associated with that interval, or the sentinel.
-     */
-    public V remove( final int start, final int end )
-    {
-        V result = mSentinel;
-        Node<V> node = mRoot;
-
-        while ( node != null )
-        {
-            final int cmpVal = node.compare(start,end);
-            if ( cmpVal == 0 )
-            {
-                result = node.getValue();
-                mRoot = node.remove(mRoot);
-                break;
-            }
-
-            node = cmpVal < 0 ? node.getLeft() : node.getRight();
-        }
-
-        return result;
-    }
-
-    /**
-     * Find an interval.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The Node that represents that interval, or null.
-     */
-    public Node<V> find( final int start, final int end )
-    {
-        Node<V> node = mRoot;
-
-        while ( node != null )
-        {
-            final int cmpVal = node.compare(start,end);
-            if ( cmpVal == 0 )
-            {
-                break;
-            }
-
-            node = cmpVal < 0 ? node.getLeft() : node.getRight();
-        }
-
-        return node;
-    }
-
-    /**
-     * Find the nth interval in the tree.
-     * @param idx The rank of the interval sought (from 0 to size()-1).
-     * @return The Node that represents the nth interval.
-     */
-    public Node<V> findByIndex( final int idx )
-    {
-        return Node.findByRank(mRoot,idx+1);
-    }
-
-    /**
-     * Find the rank of the specified interval.  If the specified interval is not in the
-     * tree, then -1 is returned.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The rank of that interval, or -1.
-     */
-    public int getIndex( final int start, final int end )
-    {
-        return Node.getRank(mRoot,start,end) - 1;
-    }
-
-    /**
-     * Find the least interval in the tree.
-     * @return The earliest interval, or null if the tree is empty.
-     */
-    public Node<V> min()
-    {
-        Node<V> result = null;
-        Node<V> node = mRoot;
-
-        while ( node != null )
-        {
-            result = node;
-            node = node.getLeft();
-        }
-
-        return result;
-    }
-
-    /**
-     * Find the earliest interval in the tree greater than or equal to the specified interval.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The earliest >= interval, or null if there is none.
-     */
-    @SuppressWarnings("null")
-    public Node<V> min( final int start, final int end )
-    {
-        Node<V> result = null;
-        Node<V> node = mRoot;
-        int cmpVal = 0;
-
-        while ( node != null )
-        {
-            result = node;
-            cmpVal = node.compare(start,end);
-            if ( cmpVal == 0 )
-            {
-                break;
-            }
-
-            node = cmpVal < 0 ? node.getLeft() : node.getRight();
-        }
-
-        if ( cmpVal > 0 )
-        {
-            result = result.getNext();
-        }
-
-        return result;
-    }
-
-    /**
-     * Find the earliest interval in the tree that overlaps the specified interval.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The earliest overlapping interval, or null if there is none.
-     */
-    public Node<V> minOverlapper( final int start, final int end )
-    {
-        Node<V> result = null;
-        Node<V> node = mRoot;
-
-        if ( node != null && node.getMaxEnd() >= start )
-        {
-            while ( true )
-            {
-                if ( node.getStart() <= end && start <= node.getEnd() )
-                { // this node overlaps.  there might be a lesser overlapper down the left sub-tree.
-                  // no need to consider the right sub-tree:  even if there's an overlapper, if won't be minimal
-                    result = node;
-                    node = node.getLeft();
-                    if ( node == null || node.getMaxEnd() < start )
-                        break; // no left sub-tree or all nodes end too early
-                }
-                else
-                { // no overlap.  if there might be a left sub-tree overlapper, consider the left sub-tree.
-                    final Node<V> left = node.getLeft();
-                    if ( left != null && left.getMaxEnd() >= start )
-                    {
-                        node = left;
-                    }
-                    else
-                    { // left sub-tree cannot contain an overlapper.  consider the right sub-tree.
-                        if ( node.getStart() > end )
-                            break; // everything in the right sub-tree is past the end of the query interval
-
-                        node = node.getRight();
-                        if ( node == null || node.getMaxEnd() < start )
-                            break; // no right sub-tree or all nodes end too early
-                    }
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Find the greatest interval in the tree.
-     * @return The latest interval, or null if the tree is empty.
-     */
-    public Node<V> max()
-    {
-        Node<V> result = null;
-        Node<V> node = mRoot;
-
-        while ( node != null )
-        {
-            result = node;
-            node = node.getRight();
-        }
-
-        return result;
-    }
-
-    /**
-     * Find the latest interval in the tree less than or equal to the specified interval.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return The latest >= interval, or null if there is none.
-     */
-    @SuppressWarnings("null")
-    public Node<V> max( final int start, final int end )
-    {
-        Node<V> result = null;
-        Node<V> node = mRoot;
-        int cmpVal = 0;
-
-        while ( node != null )
-        {
-            result = node;
-            cmpVal = node.compare(start,end);
-            if ( cmpVal == 0 )
-            {
-                break;
-            }
-
-            node = cmpVal < 0 ? node.getLeft() : node.getRight();
-        }
-
-        if ( cmpVal < 0 )
-        {
-            result = result.getPrev();
-        }
-
-        return result;
-    }
-
-    /**
-     * Return an iterator over the entire tree.
-     * @return An iterator.
-     */
-    public Iterator<Node<V>> iterator()
-    {
-        return new FwdIterator(min());
-    }
-
-    /**
-     * Return an iterator over all intervals greater than or equal to the specified interval.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return An iterator.
-     */
-    public Iterator<Node<V>> iterator( final int start, final int end )
-    {
-        return new FwdIterator(min(start,end));
-    }
-
-    /**
-     * Return an iterator over all intervals overlapping the specified range.
-     * @param start The range start.
-     * @param end The range end.
-     * @return An iterator.
-     */
-    public Iterator<Node<V>> overlappers( final int start, final int end )
-    {
-        return new OverlapIterator(start,end);
-    }
-
-    /**
-     * Return an iterator over the entire tree that returns intervals in reverse order.
-     * @return An iterator.
-     */
-    public Iterator<Node<V>> reverseIterator()
-    {
-        return new RevIterator(max());
-    }
-
-    /**
-     * Return an iterator over all intervals less than or equal to the specified interval, in reverse order.
-     * @param start The interval's start.
-     * @param end The interval's end.
-     * @return An iterator.
-     */
-    public Iterator<Node<V>> reverseIterator( final int start, final int end )
-    {
-        return new RevIterator(max(start,end));
-    }
-
-    /**
-     * Get the special sentinel value that will be used to signal novelty when putting a new interval
-     * into the tree, or to signal "not found" when removing an interval.  This is null by default.
-     * @return The sentinel value.
-     */
-    public V getSentinel()
-    {
-        return mSentinel;
-    }
-
-    /**
-     * Set the special sentinel value that will be used to signal novelty when putting a new interval
-     * into the tree, or to signal "not found" when removing an interval.
-     * @param sentinel The new sentinel value.
-     * @return The old sentinel value.
-     */
-    public V setSentinel( final V sentinel )
-    {
-        final V result = mSentinel;
-        mSentinel = sentinel;
-        return result;
-    }
-
-    /**
-     * This method is only for debugging.
-     * It verifies whether the tree is internally consistent with respect to the mMaxEnd cached on each node.
-     * @throws IllegalStateException If an inconsistency is detected.
-     */
-    public void checkMaxEnds() {
-        if (mRoot != null) mRoot.checkMaxEnd();
-    }
-
-    /**
-     * This method draws a nested picture of the tree on System.out.
-     * Useful for debugging.
-     */
-    public void printTree() {
-        if (mRoot != null) mRoot.printNode();
-    }
-
-    void removeNode( final Node<V> node )
-    {
-        mRoot = node.remove(mRoot);
-    }
-
-    private Node<V> mRoot;
-    private V mSentinel;
-
-    public static class Node<V1>
-    {
-        // bit-wise definitions from which the other constants are composed
-        public static final int HAS_LESSER_PART = 1;
-        public static final int HAS_OVERLAPPING_PART = 2;
-        public static final int HAS_GREATER_PART = 4;
-        public static final int IS_ADJACENT_AND_EMPTY = 0;
-        public static final int IS_STRICTLY_LESS = HAS_LESSER_PART; // 1
-        public static final int IS_SUBSET = HAS_OVERLAPPING_PART; // 2
-        public static final int IS_LEFT_OVERHANGING_OVERLAPPER = HAS_LESSER_PART | HAS_OVERLAPPING_PART; // 3
-        public static final int IS_STRICTLY_GREATER = HAS_GREATER_PART; // 4
-        // there is no value that equals 5, since that would imply overhanging on left and right without overlapping
-        public static final int IS_RIGHT_OVERHANGING_OVERLAPPER = HAS_GREATER_PART | HAS_OVERLAPPING_PART; // 6
-        public static final int IS_SUPERSET = HAS_LESSER_PART | HAS_OVERLAPPING_PART | HAS_GREATER_PART; // 7
-
-        Node( final int start, final int end, final V1 value )
-        {
-            mStart = start;
-            mEnd = end;
-            mValue = value;
-            mSize = 1;
-            mMaxEnd = mEnd;
-            mIsBlack = true;
-        }
-
-        Node( final Node<V1> parent, final int start, final int end, final V1 value )
-        {
-            mParent = parent;
-            mStart = start;
-            mEnd = end;
-            mValue = value;
-            mMaxEnd = mEnd;
-            mSize = 1;
-        }
-
-        public int getStart()
-        {
-            return mStart;
-        }
-
-        public int getEnd()
-        {
-            return mEnd;
-        }
-
-        public int getLength()
-        {
-            return mEnd - mStart;
-        }
-
-        public int getRelationship( final Node<V1> interval )
-        {
-            int result = 0;
-            if ( mStart < interval.getStart() )
-                result = HAS_LESSER_PART;
-            if ( mEnd > interval.getEnd() )
-                result |= HAS_GREATER_PART;
-            if ( mStart < interval.getEnd() && interval.getStart() < mEnd )
-                result |= HAS_OVERLAPPING_PART;
-            return result;
-        }
-
-        public boolean isAdjacent( final Node<V1> interval )
-        {
-            return mStart == interval.getEnd() || mEnd == interval.getStart();
-        }
-
-        public V1 getValue()
-        {
-            return mValue;
-        }
-
-        public V1 setValue( final V1 value )
-        {
-            final V1 result = mValue;
-            mValue = value;
-            return result;
-        }
-
-        int getSize()
-        {
-            return mSize;
-        }
-
-        int getMaxEnd()
-        {
-            return mMaxEnd;
-        }
-
-        Node<V1> getLeft()
-        {
-            return mLeft;
-        }
-
-        Node<V1> insertLeft( final int start, final int end, final V1 value, final Node<V1> root )
-        {
-            mLeft = new Node<V1>(this,start,end,value);
-            return insertFixup(mLeft,root);
-        }
-
-        Node<V1> getRight()
-        {
-            return mRight;
-        }
-
-        Node<V1> insertRight( final int start, final int end, final V1 value, final Node<V1> root )
-        {
-            mRight = new Node<V1>(this,start,end,value);
-            return insertFixup(mRight,root);
-        }
-
-        Node<V1> getNext()
-        {
-            Node<V1> result;
-
-            if ( mRight != null )
-            {
-                result = mRight;
-                while ( result.mLeft != null )
-                {
-                    result = result.mLeft;
-                }
-            }
-            else
-            {
-                Node<V1> node = this;
-                result = mParent;
-                while ( result != null && node == result.mRight )
-                {
-                    node = result;
-                    result = result.mParent;
-                }
-            }
-
-            return result;
-        }
-
-        Node<V1> getPrev()
-        {
-            Node<V1> result;
-
-            if ( mLeft != null )
-            {
-                result = mLeft;
-                while ( result.mRight != null )
-                {
-                    result = result.mRight;
-                }
-            }
-            else
-            {
-                Node<V1> node = this;
-                result = mParent;
-                while ( result != null && node == result.mLeft )
-                {
-                    node = result;
-                    result = result.mParent;
-                }
-            }
-
-            return result;
-        }
-
-        boolean wasRemoved()
-        {
-            return mSize == 0;
-        }
-
-        Node<V1> remove( Node<V1> root )
-        {
-            if ( mSize == 0 )
-            {
-                throw new IllegalStateException("Entry was already removed.");
-            }
-
-            if ( mLeft == null )
-            {
-                if ( mRight == null )
-                { // no children
-                    if ( mParent == null )
-                    {
-                        root = null;
-                    }
-                    else if ( mParent.mLeft == this )
-                    {
-                        mParent.mLeft = null;
-                        fixup(mParent);
-
-                        if ( mIsBlack )
-                            root = removeFixup(mParent,null,root);
-                    }
-                    else
-                    {
-                        mParent.mRight = null;
-                        fixup(mParent);
-
-                        if ( mIsBlack )
-                            root = removeFixup(mParent,null,root);
-                    }
-                }
-                else
-                { // single child on right
-                    root = spliceOut(mRight,root);
-                }
-            }
-            else if ( mRight == null )
-            { // single child on left
-                root = spliceOut(mLeft,root);
-            }
-            else
-            { // two children
-                final Node<V1> next = getNext();
-                root = next.remove(root);
-
-                // put next into tree in same position as this, effectively removing this
-                if ( (next.mParent = mParent) == null )
-                    root = next;
-                else if ( mParent.mLeft == this )
-                    mParent.mLeft = next;
-                else
-                    mParent.mRight = next;
-
-                if ( (next.mLeft = mLeft) != null )
-                {
-                    mLeft.mParent = next;
-                }
-
-                if ( (next.mRight = mRight) != null )
-                {
-                    mRight.mParent = next;
-                }
-
-                next.mIsBlack = mIsBlack;
-                next.mSize = mSize;
-
-                // PIC-123 fix
-                fixup(next);
-            }
-
-            mSize = 0;
-            return root;
-        }
-
-        // backwards comparison!  compares start+end to this.
-        int compare( final int start, final int end )
-        {
-            int result = 0;
-
-            if ( start > mStart )
-                result = 1;
-            else if ( start < mStart )
-                result = -1;
-            else if ( end > mEnd )
-                result = 1;
-            else if ( end < mEnd )
-                result = -1;
-
-            return result;
-        }
-
-        @SuppressWarnings("null")
-        static <V1> Node<V1> getNextOverlapper( Node<V1> node, final int start, final int end )
-        {
-            do
-            {
-                Node<V1> nextNode = node.mRight;
-                if ( nextNode != null && nextNode.mMaxEnd >= start )
-                {
-                    node = nextNode;
-                    while ( (nextNode = node.mLeft) != null && nextNode.mMaxEnd >= start )
-                        node = nextNode;
-                }
-                else
-                {
-                    nextNode = node;
-                    while ( (node = nextNode.mParent) != null && node.mRight == nextNode )
-                        nextNode = node;
-                }
-
-                if ( node != null && node.mStart > end )
-                    node = null;
-            }
-            while ( node != null && !(node.mStart <= end && start <= node.mEnd) );
-
-            return node;
-        }
-
-        static <V1> Node<V1> findByRank( Node<V1> node, int rank )
-        {
-            while ( node != null )
-            {
-                final int nodeRank = node.getRank();
-                if ( rank == nodeRank )
-                    break;
-
-                if ( rank < nodeRank )
-                {
-                    node = node.mLeft;
-                }
-                else
-                {
-                    node = node.mRight;
-                    rank -= nodeRank;
-                }
-            }
-
-            return node;
-        }
-
-        static <V1> int getRank( Node<V1> node, final int start, final int end )
-        {
-            int rank = 0;
-
-            while ( node != null )
-            {
-                final int cmpVal = node.compare(start,end);
-                if ( cmpVal < 0 )
-                {
-                    node = node.mLeft;
-                }
-                else
-                {
-                    rank += node.getRank();
-                    if ( cmpVal == 0 )
-                        return rank; // EARLY RETURN!!!
-
-                    node = node.mRight;
-                }
-            }
-
-            return 0;
-        }
-
-        private int getRank()
-        {
-            int result = 1;
-            if ( mLeft != null )
-                result = mLeft.mSize + 1;
-            return result;
-        }
-
-        private Node<V1> spliceOut( final Node<V1> child, Node<V1> root )
-        {
-            if ( (child.mParent = mParent) == null )
-            {
-                root = child;
-                child.mIsBlack = true;
-            }
-            else
-            {
-                if ( mParent.mLeft == this )
-                    mParent.mLeft = child;
-                else
-                    mParent.mRight = child;
-                fixup(mParent);
-
-                if ( mIsBlack )
-                    root = removeFixup(mParent,child,root);
-            }
-
-            return root;
-        }
-
-        private Node<V1> rotateLeft( Node<V1> root )
-        {
-            final Node<V1> child = mRight;
-
-            final int childSize = child.mSize;
-            child.mSize = mSize;
-            mSize -= childSize;
-
-            if ( (mRight = child.mLeft) != null )
-            {
-                mRight.mParent = this;
-                mSize += mRight.mSize;
-            }
-
-            if ( (child.mParent = mParent) == null )
-                root = child;
-            else if ( this == mParent.mLeft )
-                mParent.mLeft = child;
-            else
-                mParent.mRight = child;
-
-            child.mLeft = this;
-            mParent = child;
-
-            setMaxEnd();
-            child.setMaxEnd();
-
-            return root;
-        }
-
-        private Node<V1> rotateRight( Node<V1> root )
-        {
-            final Node<V1> child = mLeft;
-
-            final int childSize = child.mSize;
-            child.mSize = mSize;
-            mSize -= childSize;
-
-            if ( (mLeft = child.mRight) != null )
-            {
-                mLeft.mParent = this;
-                mSize += mLeft.mSize;
-            }
-
-            if ( (child.mParent = mParent) == null )
-                root = child;
-            else if ( this == mParent.mLeft )
-                mParent.mLeft = child;
-            else
-                mParent.mRight = child;
-
-            child.mRight = this;
-            mParent = child;
-
-            setMaxEnd();
-            child.setMaxEnd();
-
-            return root;
-        }
-
-        private void setMaxEnd()
-        {
-            mMaxEnd = mEnd;
-            if ( mLeft != null )
-                mMaxEnd = Math.max(mMaxEnd,mLeft.mMaxEnd);
-            if ( mRight != null )
-                mMaxEnd = Math.max(mMaxEnd,mRight.mMaxEnd);
-        }
-
-        private static <V1> void fixup( Node<V1> node )
-        {
-            do
-            {
-                node.mSize = 1;
-                node.mMaxEnd = node.mEnd;
-                if ( node.mLeft != null )
-                {
-                    node.mSize += node.mLeft.mSize;
-                    node.mMaxEnd = Math.max(node.mMaxEnd,node.mLeft.mMaxEnd);
-                }
-                if ( node.mRight != null )
-                {
-                    node.mSize += node.mRight.mSize;
-                    node.mMaxEnd = Math.max(node.mMaxEnd,node.mRight.mMaxEnd);
-                }
-            }
-            while ( (node = node.mParent) != null );
-        }
-
-        private static <V1> Node<V1> insertFixup( Node<V1> daughter, Node<V1> root )
-        {
-            Node<V1> mom = daughter.mParent;
-            fixup(mom);
-
-            while( mom != null && !mom.mIsBlack )
-            {
-                final Node<V1> gramma = mom.mParent;
-                Node<V1> auntie = gramma.mLeft;
-                if ( auntie == mom )
-                {
-                    auntie = gramma.mRight;
-                    if ( auntie != null && !auntie.mIsBlack )
-                    {
-                        mom.mIsBlack = true;
-                        auntie.mIsBlack = true;
-                        gramma.mIsBlack = false;
-                        daughter = gramma;
-                    }
-                    else
-                    {
-                        if ( daughter == mom.mRight )
-                        {
-                            root = mom.rotateLeft(root);
-                            mom = daughter;
-                        }
-                        mom.mIsBlack = true;
-                        gramma.mIsBlack = false;
-                        root = gramma.rotateRight(root);
-                        break;
-                    }
-                }
-                else
-                {
-                    if ( auntie != null && !auntie.mIsBlack )
-                    {
-                        mom.mIsBlack = true;
-                        auntie.mIsBlack = true;
-                        gramma.mIsBlack = false;
-                        daughter = gramma;
-                    }
-                    else
-                    {
-                        if ( daughter == mom.mLeft )
-                        {
-                            root = mom.rotateRight(root);
-                            mom = daughter;
-                        }
-                        mom.mIsBlack = true;
-                        gramma.mIsBlack = false;
-                        root = gramma.rotateLeft(root);
-                        break;
-                    }
-                }
-                mom = daughter.mParent;
-            }
-            root.mIsBlack = true;
-            return root;
-        }
-
-        private static <V1> Node<V1> removeFixup( Node<V1> parent, Node<V1> node, Node<V1> root )
-        {
-            do
-            {
-                if ( node == parent.mLeft )
-                {
-                    Node<V1> sister = parent.mRight;
-                    if ( !sister.mIsBlack )
-                    {
-                        sister.mIsBlack = true;
-                        parent.mIsBlack = false;
-                        root = parent.rotateLeft(root);
-                        sister = parent.mRight;
-                    }
-                    if ( (sister.mLeft == null || sister.mLeft.mIsBlack) && (sister.mRight == null || sister.mRight.mIsBlack) )
-                    {
-                        sister.mIsBlack = false;
-                        node = parent;
-                    }
-                    else
-                    {
-                        if ( sister.mRight == null || sister.mRight.mIsBlack )
-                        {
-                            sister.mLeft.mIsBlack = true;
-                            sister.mIsBlack = false;
-                            root = sister.rotateRight(root);
-                            sister = parent.mRight;
-                        }
-                        sister.mIsBlack = parent.mIsBlack;
-                        parent.mIsBlack = true;
-                        sister.mRight.mIsBlack = true;
-                        root = parent.rotateLeft(root);
-                        node = root;
-                    }
-                }
-                else
-                {
-                    Node<V1> sister = parent.mLeft;
-                    if ( !sister.mIsBlack )
-                    {
-                        sister.mIsBlack = true;
-                        parent.mIsBlack = false;
-                        root = parent.rotateRight(root);
-                        sister = parent.mLeft;
-                    }
-                    if ( (sister.mLeft == null || sister.mLeft.mIsBlack) && (sister.mRight == null || sister.mRight.mIsBlack) )
-                    {
-                        sister.mIsBlack = false;
-                        node = parent;
-                    }
-                    else
-                    {
-                        if ( sister.mLeft == null || sister.mLeft.mIsBlack )
-                        {
-                            sister.mRight.mIsBlack = true;
-                            sister.mIsBlack = false;
-                            root = sister.rotateLeft(root);
-                            sister = parent.mLeft;
-                        }
-                        sister.mIsBlack = parent.mIsBlack;
-                        parent.mIsBlack = true;
-                        sister.mLeft.mIsBlack = true;
-                        root = parent.rotateRight(root);
-                        node = root;
-                    }
-                }
-                parent = node.mParent;
-            }
-            while ( parent != null && node.mIsBlack );
-
-            node.mIsBlack = true;
-            return root;
-        }
-
-        public void checkMaxEnd() {
-            if (mMaxEnd != calcMaxEnd()) {
-                throw new IllegalStateException("Max end mismatch " + mMaxEnd + " vs " + calcMaxEnd() + ": " + this);
-            }
-            if (mLeft != null) mLeft.checkMaxEnd();
-            if (mRight != null) mRight.checkMaxEnd();
-        }
-
-        private int calcMaxEnd() {
-            int end = mEnd;
-            if (mLeft != null) end = Math.max(end, mLeft.mMaxEnd);
-            if (mRight != null) end = Math.max(end, mRight.mMaxEnd);
-            return end;
-        }
-
-        public void printNode() {
-            this.printNodeInternal("", "root: ");
-        }
-
-        private void printNodeInternal(final String padding, final String tag) {
-            System.out.println(padding + tag + " " + this);
-            if (mLeft != null) mLeft.printNodeInternal(padding + "  ", "left: ");
-            if (mRight != null) mRight.printNodeInternal(padding + "  ", "right:");
-        }
-
-        public String toString() {
-            return "Node(" + mStart + "," + mEnd + "," + mValue + "," + mSize + "," + mMaxEnd + "," + mIsBlack + ")";
-        }
-
-        private Node<V1> mParent;
-        private Node<V1> mLeft;
-        private Node<V1> mRight;
-        private final int mStart;
-        private final int mEnd;
-        private V1 mValue;
-        private int mSize;
-        private int mMaxEnd;
-        private boolean mIsBlack;
-    }
-
-    public class FwdIterator
-        implements Iterator<Node<V>>
-    {
-        public FwdIterator( final Node<V> node )
-        {
-            mNext = node;
-        }
-
-        public boolean hasNext()
-        {
-            return mNext != null;
-        }
-
-        public Node<V> next()
-        {
-            if ( mNext == null )
-            {
-                throw new NoSuchElementException("No next element.");
-            }
-
-            if ( mNext.wasRemoved() )
-            {
-                mNext = min(mNext.getStart(),mNext.getEnd());
-                if ( mNext == null )
-                    throw new ConcurrentModificationException("Current element was removed, and there are no more elements.");
-            }
-            mLast = mNext;
-            mNext = mNext.getNext();
-            return mLast;
-        }
-
-        public void remove()
-        {
-            if ( mLast == null )
-            {
-                throw new IllegalStateException("No entry to remove.");
-            }
-
-            removeNode(mLast);
-            mLast = null;
-        }
-
-        private Node<V> mNext;
-        private Node<V> mLast;
-    }
-
-    public class RevIterator
-        implements Iterator<Node<V>>
-    {
-        public RevIterator( final Node<V> node )
-        {
-            mNext = node;
-        }
-
-        public boolean hasNext()
-        {
-            return mNext != null;
-        }
-
-        public Node<V> next()
-        {
-            if ( mNext == null )
-                throw new NoSuchElementException("No next element.");
-            if ( mNext.wasRemoved() )
-            {
-                mNext = max(mNext.getStart(),mNext.getEnd());
-                if ( mNext == null )
-                    throw new ConcurrentModificationException("Current element was removed, and there are no more elements.");
-            }
-            mLast = mNext;
-            mNext = mNext.getPrev();
-            return mLast;
-        }
-
-        public void remove()
-        {
-            if ( mLast == null )
-            {
-                throw new IllegalStateException("No entry to remove.");
-            }
-
-            removeNode(mLast);
-            mLast = null;
-        }
-
-        private Node<V> mNext;
-        private Node<V> mLast;
-    }
-
-    public class OverlapIterator
-        implements Iterator<Node<V>>
-    {
-        public OverlapIterator( final int start, final int end )
-        {
-            mNext = minOverlapper(start,end);
-            mStart = start;
-            mEnd = end;
-        }
-
-        public boolean hasNext()
-        {
-            return mNext != null;
-        }
-
-        public Node<V> next()
-        {
-            if ( mNext == null )
-            {
-                throw new NoSuchElementException("No next element.");
-            }
-
-            if ( mNext.wasRemoved() )
-            {
-                throw new ConcurrentModificationException("Current element was removed.");
-            }
-
-            mLast = mNext;
-            mNext = Node.getNextOverlapper(mNext,mStart,mEnd);
-            return mLast;
-        }
-
-        public void remove()
-        {
-            if ( mLast == null )
-            {
-                throw new IllegalStateException("No entry to remove.");
-            }
-
-            removeNode(mLast);
-            mLast = null;
-        }
-
-        private Node<V> mNext;
-        private Node<V> mLast;
-        private final int mStart;
-        private final int mEnd;
-    }
-
-    public static class ValuesIterator<V1>
-        implements Iterator<V1>
-    {
-        public ValuesIterator( final Iterator<Node<V1>> itr )
-        {
-            mItr = itr;
-        }
-
-        public boolean hasNext()
-        {
-            return mItr.hasNext();
-        }
-
-        public V1 next()
-        {
-            return mItr.next().getValue();
-        }
-
-        public void remove()
-        {
-            mItr.remove();
-        }
-
-        private final Iterator<Node<V1>> mItr;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IntervalTreeMap.java b/src/main/java/htsjdk/samtools/util/IntervalTreeMap.java
deleted file mode 100644
index ffeae94..0000000
--- a/src/main/java/htsjdk/samtools/util/IntervalTreeMap.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * Utility class that implements an interval map.
- * This class functions as a java map but also supports efficient interval overlap queries.
- *
- * @author Bob Handsaker
- */
-public class IntervalTreeMap<T>
-    extends AbstractMap<Interval, T>
-{
-    private final Map<String, IntervalTree<T>> mSequenceMap = new HashMap<String, IntervalTree<T>>();
-    private final EntrySet mEntrySet = new EntrySet();
-
-    public IntervalTree<T> debugGetTree(final String sequence) {
-        return mSequenceMap.get(sequence);
-    }
-
-    public IntervalTreeMap() {
-    }
-
-    public IntervalTreeMap(final Map<? extends Interval, ? extends T> map) {
-        for (final Map.Entry<? extends Interval, ? extends T> entry : map.entrySet()) {
-            put(entry.getKey(), entry.getValue());
-        }
-    }
-
-    public void clear() {
-        mSequenceMap.clear();
-    }
-
-    public boolean containsKey(final Object object) {
-        if (!(object instanceof Interval)) {
-            return false;
-        }
-        return containsKey((Interval) object);
-    }
-
-    public boolean containsKey(final Interval key) {
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree == null) {
-            return false;
-        }
-        return (tree.find(key.getStart(), key.getEnd()) != null);
-    }
-
-    public Set<Entry<Interval, T>> entrySet() {
-        return mEntrySet;
-    }
-
-    @SuppressWarnings("rawtypes")
-	public boolean equals(final Object o) {
-        if (!(o instanceof IntervalTreeMap)) {
-            return false;
-        }
-        return mSequenceMap.equals(((IntervalTreeMap)o).mSequenceMap);
-    }
-
-    public int hashCode() {
-        return mSequenceMap.hashCode();
-    }
-
-    public T get(final Object object) {
-        if (!(object instanceof Interval)) {
-            return null;
-        }
-        return get((Interval) object);
-    }
-
-    public T get(final Interval key) {
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree == null) {
-            return null;
-        }
-        final IntervalTree.Node<T> node = tree.find(key.getStart(), key.getEnd());
-        if (node == null) {
-            return null;
-        }
-        return node.getValue();
-    }
-
-    public boolean isEmpty() {
-        for (final IntervalTree<T> tree : mSequenceMap.values()) {
-            if (tree.size() > 0) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public T put(final Interval key, final T value) {
-        IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree == null) {
-            tree = new IntervalTree<T>();
-            mSequenceMap.put(key.getContig(), tree);
-        }
-        return tree.put(key.getStart(), key.getEnd(), value);
-    }
-
-    public T remove(final Object object) {
-        if (!(object instanceof Interval)) {
-            return null;
-        }
-        return remove((Interval)object);
-    }
-
-    public T remove(final Interval key) {
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree == null) {
-            return null;
-        }
-        return tree.remove(key.getStart(), key.getEnd());
-    }
-
-    public int size() {
-        // Note: We should think about caching the size to avoid having to recompute it.
-        int size = 0;
-        for (final IntervalTree<T> tree : mSequenceMap.values()) {
-            size += tree.size();
-        }
-        return size;
-    }
-    /**
-     * Test overlapping interval 
-     * @param key the interval
-     * @return true if it contains an object overlapping the interval 
-     */
-    public boolean containsOverlapping(final Interval key) {
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        return tree!=null && tree.overlappers(key.getStart(), key.getEnd()).hasNext();
-    	}
-    
-    
-    public Collection<T> getOverlapping(final Interval key) {
-        final List<T> result = new ArrayList<T>();
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree != null) {
-            final Iterator<IntervalTree.Node<T>> iterator = tree.overlappers(key.getStart(), key.getEnd());
-            while (iterator.hasNext()) {
-                result.add(iterator.next().getValue());
-            }
-        }
-        return result;
-    }
-    /**
-     * Test if this contains an object that is contained by 'key'
-     * @param key the interval
-     * @return true if it contains an object is contained by 'key'
-     */
-    public boolean containsContained(final Interval key) {
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if(tree==null) return false;
-            final Iterator<IntervalTree.Node<T>> iterator = tree.overlappers(key.getStart(), key.getEnd());
-            while (iterator.hasNext()) {
-                final IntervalTree.Node<T> node = iterator.next();
-                if (node.getStart() >= key.getStart() && node.getEnd() <= key.getEnd()) {
-                    return true;
-                }
-            }
-        return false;
-    }
-    
-    
-    public Collection<T> getContained(final Interval key) {
-        final List<T> result = new ArrayList<T>();
-        final IntervalTree<T> tree = mSequenceMap.get(key.getContig());
-        if (tree != null) {
-            final Iterator<IntervalTree.Node<T>> iterator = tree.overlappers(key.getStart(), key.getEnd());
-            while (iterator.hasNext()) {
-                final IntervalTree.Node<T> node = iterator.next();
-                if (node.getStart() >= key.getStart() && node.getEnd() <= key.getEnd()) {
-                    result.add(node.getValue());
-                }
-            }
-        }
-        return result;
-    }
-
-    private class EntrySet
-        extends AbstractSet<Map.Entry<Interval,T>> {
-
-        public void clear() {
-           IntervalTreeMap.this.clear();
-        }
-
-        public boolean contains(final Map.Entry<Interval,T> entry) {
-            if (entry == null) {
-                return false;
-            }
-            return entry.getValue().equals(IntervalTreeMap.this.get(entry.getKey()));
-        }
-
-        public boolean isEmpty() {
-            return IntervalTreeMap.this.isEmpty();
-        }
-
-        public Iterator<Map.Entry<Interval,T>> iterator() {
-            return new EntryIterator();
-        }
-
-        @SuppressWarnings("unchecked")
-        public boolean remove(final Object object) {
-            // Note: Could not figure out how to eliminate the unchecked cast.
-            if (!(object instanceof Map.Entry)) {
-                return false;
-            }
-            return remove((Map.Entry<Interval,T>)object);
-        }
-
-        public boolean remove(final Map.Entry<Interval,T> entry) {
-            if (this.contains(entry)) {
-                IntervalTreeMap.this.remove(entry.getKey());
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        public int size() {
-            return IntervalTreeMap.this.size();
-        }
-    }
-
-    private class EntryIterator
-        implements Iterator<Map.Entry<Interval, T>> {
-
-        private String mSequence = null;
-        private Iterator<String> mSequenceIterator = null;
-        private Iterator<IntervalTree.Node<T>> mTreeIterator = null;
-
-        EntryIterator() {
-            mSequenceIterator = mSequenceMap.keySet().iterator();
-            advanceSequence();
-        }
-
-        public boolean hasNext() {
-            return (mTreeIterator != null && mTreeIterator.hasNext());
-        }
-
-        public Map.Entry<Interval,T> next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException("Iterator exhausted");
-            }
-            final IntervalTree.Node<T> node = mTreeIterator.next();
-            final String sequence = mSequence;
-            if (!mTreeIterator.hasNext()) {
-                advanceSequence();
-            }
-            final Interval key = new Interval(sequence, node.getStart(), node.getEnd());
-            final T value = node.getValue();
-            return new MapEntry(key, value);
-        }
-
-        public void remove() {
-            if (mTreeIterator == null) {
-                throw new IllegalStateException("Iterator.next() has not been called");
-            }
-            mTreeIterator.remove();
-        }
-
-        private void advanceSequence() {
-            while (mSequenceIterator.hasNext()) {
-                mSequence = mSequenceIterator.next();
-                mTreeIterator = mSequenceMap.get(mSequence).iterator();
-                if (mTreeIterator.hasNext()) {
-                    break;
-                }
-            }
-        }
-    }
-
-    private class MapEntry
-        implements Map.Entry<Interval,T> {
-
-        private final Interval mKey;
-        private T mValue;
-
-        MapEntry(final Interval key, final T value) {
-            mKey = key;
-            mValue = value;
-        }
-
-        public Interval getKey() {
-            return mKey;
-        }
-
-        public T getValue() {
-            return mValue;
-        }
-
-        public T setValue(final T value) {
-            mValue = value;
-            return IntervalTreeMap.this.put(mKey, mValue);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IntervalUtil.java b/src/main/java/htsjdk/samtools/util/IntervalUtil.java
deleted file mode 100644
index d761707..0000000
--- a/src/main/java/htsjdk/samtools/util/IntervalUtil.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMSequenceDictionary;
-
-import java.util.Iterator;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class IntervalUtil {
-
-    /** Return true if the sequence/position lie in the provided interval. */
-    public static boolean contains(final Interval interval, final String sequenceName, final long position) {
-        return interval.getContig().equals(sequenceName) && (position >= interval.getStart() && position <= interval.getEnd());
-    }
-
-    /** Return true if the sequence/position lie in the provided interval list. */
-    public static boolean contains(final IntervalList intervalList, final String sequenceName, final long position) {
-        for (final Interval interval : intervalList.uniqued().getIntervals()) {
-            if (contains(interval, sequenceName, position))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Throws RuntimeException if the given intervals are not locus ordered and non-overlapping
-     *
-     * @param intervals
-     * @param sequenceDictionary used to determine order of sequences
-     */
-    public static void assertOrderedNonOverlapping(final Iterator<Interval> intervals, final SAMSequenceDictionary sequenceDictionary) {
-        if (!intervals.hasNext()) {
-            return;
-        }
-        Interval prevInterval = intervals.next();
-        int prevSequenceIndex = sequenceDictionary.getSequenceIndex(prevInterval.getContig());
-        while (intervals.hasNext()) {
-            final Interval interval = intervals.next();
-            if (prevInterval.intersects(interval)) {
-                throw new SAMException("Intervals should not overlap: " + prevInterval + "; " + interval);
-            }
-            final int thisSequenceIndex = sequenceDictionary.getSequenceIndex(interval.getContig());
-            if (prevSequenceIndex > thisSequenceIndex ||
-                    (prevSequenceIndex == thisSequenceIndex && prevInterval.compareTo(interval) >= 0)) {
-                throw new SAMException("Intervals not in order: " + prevInterval + "; " + interval);
-            }
-            prevInterval = interval;
-            prevSequenceIndex = thisSequenceIndex;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Iso8601Date.java b/src/main/java/htsjdk/samtools/util/Iso8601Date.java
deleted file mode 100644
index 9128867..0000000
--- a/src/main/java/htsjdk/samtools/util/Iso8601Date.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * Use this type rather than java.util.Date in command-line options in order to get ISO 8601 parsing.
- * The ctors below truncate milliseconds, since our formatter does not write them.  Note that it is possible
- * to modify an Iso8601Date so that it has fractional seconds, but that is discouraged.
- *
- * @author alecw at broadinstitute.org
- */
-public class Iso8601Date extends Date {
-    private static final ThreadLocal<DateFormat> iso8601DateFormatter = new ThreadLocal<DateFormat>() {
-        protected synchronized DateFormat initialValue() {
-            return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
-        }
-    };
-
-    public Iso8601Date(final String dateStr) {
-        super(DateParser.parse(dateStr).getTime());
-        truncateMilliseconds();
-    }
-
-    public Iso8601Date(final Date date) {
-        super(date.getTime());
-        truncateMilliseconds();
-    }
-
-    public String toString() {
-        return iso8601DateFormatter.get().format(this);
-    }
-
-    private void truncateMilliseconds() {
-        long time = getTime();
-        long mod = time % 1000;
-        if (mod != 0) {
-            super.setTime(time - mod);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IterableAdapter.java b/src/main/java/htsjdk/samtools/util/IterableAdapter.java
deleted file mode 100644
index f31d6b1..0000000
--- a/src/main/java/htsjdk/samtools/util/IterableAdapter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-
-/**
- * Provides an adapter to wrap an Iterator with an Iterable, allowing it to be run through a foreach loop. Will only
- * allow iterator() to be called a single time - this is intended to be called inline.
- *
- * @author jgentry at broadinstitute.org
- */
-public class IterableAdapter<T> implements Iterable<T> {
-    private boolean isIteratorCalled = false;
-    private final Iterator<T> theIterator;
-
-    public IterableAdapter(final Iterator<T> theIterator) {
-        this.theIterator = theIterator;
-    }
-
-    @Override
-    public Iterator<T> iterator() {
-        if (isIteratorCalled) {
-            throw new ConcurrentModificationException("iterator() can only be called once!");
-        }
-
-        isIteratorCalled = true;
-        return theIterator;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/IterableOnceIterator.java b/src/main/java/htsjdk/samtools/util/IterableOnceIterator.java
deleted file mode 100644
index 5ca4bc1..0000000
--- a/src/main/java/htsjdk/samtools/util/IterableOnceIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Abstract implementation of an iterator that also implements Iterable (to return itself)
- * so that it can be used if for() loops.  Only supports calling iterator() once since new
- * iterators are not manufactured but the same object returned.
- *
- * @author Tim Fennell
- */
-public abstract class IterableOnceIterator<T> implements Iterable<T>, Iterator<T>, Closeable {
-    private boolean iterated = false;
-
-    /**
-     * On the first call returns this object which is also an iterator.  On subsequent calls throws
-     * an exception since new iterators cannot be generated.
-     */
-    @Override
-    public Iterator<T> iterator() {
-        if (iterated) {
-            throw new IllegalStateException("May not call iterator() more than once on IterableOnceIterator.");
-        }
-        else {
-            iterated = true;
-            return this;
-        }
-    }
-
-    /** Operation not supported. */
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("remove() not supported");
-    }
-
-    /** Does nothing, intended to be overridden when needed. */
-    @Override public void close() throws IOException {
-        // Default do nothing implementation
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Iterables.java b/src/main/java/htsjdk/samtools/util/Iterables.java
deleted file mode 100644
index 46c8d5a..0000000
--- a/src/main/java/htsjdk/samtools/util/Iterables.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @author mccowan
- */
-public class Iterables {
-    private Iterables() {
-        
-    }
-
-    public static <T> List<T> slurp(final Iterator<T> iterator) {
-        final List<T> ts = new ArrayList<T>();
-        while (iterator.hasNext()) ts.add(iterator.next());
-        return ts;
-    }
-
-    public static <T> List<T> slurp(final Iterable<T> iterable) {
-        return slurp(iterable.iterator());
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Lazy.java b/src/main/java/htsjdk/samtools/util/Lazy.java
deleted file mode 100644
index 13726b8..0000000
--- a/src/main/java/htsjdk/samtools/util/Lazy.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * Simple utility for building an on-demand (lazy) object-initializer.
- * 
- * Works by accepting an initializer describing how to build the on-demand object, which is only called once and only after the first
- * invocation of {@link #get()} (or it may not be called at all).
- * 
- * @author mccowan
- */
-public class Lazy<T> {
-    private final LazyInitializer<T> initializer;
-    private boolean isInitialized = false;
-    private T instance;
-
-    /** Simple cons */
-    public Lazy(final LazyInitializer<T> initializer) {
-        this.initializer = initializer;
-    }
-
-    /** Returns the instance associated with this {@link Lazy}, initializing it if necessary. */
-    public synchronized T get() {
-        if (!isInitialized) {
-            this.instance = initializer.make();
-            isInitialized = true;
-        }
-        return instance;
-    }
-
-    /** Describes how to build the instance of the lazy object. */
-    @FunctionalInterface
-    public interface LazyInitializer<T> {
-        /** Returns the desired object instance. */
-        T make();
-    }
-
-    public boolean isInitialized() {
-        return isInitialized;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/LineReader.java b/src/main/java/htsjdk/samtools/util/LineReader.java
deleted file mode 100644
index 0185700..0000000
--- a/src/main/java/htsjdk/samtools/util/LineReader.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.Closeable;
-
-/**
- * Interface allows for implementations that read lines from a String, an ASCII file, or somewhere else.
- */
-public interface LineReader extends Closeable{
-
-    /**
-     * Read a line and remove the line terminator
-     * @return the line read, or null if EOF has been reached.
-     */
-    String readLine();
-
-    /**
-     * @return 1-based number of line most recently read
-     */
-    int getLineNumber();
-
-    /**
-     * Non-destructive one-character look-ahead.
-     * @return If not eof, the next character that would be read.  If eof, -1.
-     */
-    int peek();
-
-    public void close();
-}
diff --git a/src/main/java/htsjdk/samtools/util/ListMap.java b/src/main/java/htsjdk/samtools/util/ListMap.java
deleted file mode 100755
index 385c2e8..0000000
--- a/src/main/java/htsjdk/samtools/util/ListMap.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * A Map class that holds a list of entries under each key instead of a single entry, and
- * provides utility methods for adding an entry under a key.
- *
- * @author Tim Fennell
- */
-public class ListMap<K,V> extends HashMap<K, List<V>> {
-    /** Adds a single value to the list stored under a key. */
-    public void add(K key, V value) {
-        List<V> values = get(key);
-        if (values == null) {
-            values = new ArrayList<V>();
-            put(key, values);
-        }
-
-        values.add(value);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Locatable.java b/src/main/java/htsjdk/samtools/util/Locatable.java
deleted file mode 100644
index 0d70090..0000000
--- a/src/main/java/htsjdk/samtools/util/Locatable.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * Any class that has a single logical mapping onto the genome should implement Locatable
- * positions should be reported as 1-based and closed at both ends
- *
- */
-public interface Locatable {
-
-    /**
-     * Gets the contig name for the contig this is mapped to.  May return null if there is no unique mapping.
-     * @return name of the contig this is mapped to, potentially null
-     */
-    String getContig();
-
-    /**
-     * @return 1-based start position, undefined if getContig() == null
-     */
-    int getStart();
-
-    /**
-     * @return 1-based closed-ended position, undefined if getContig() == null
-     */
-    int getEnd();
-}
diff --git a/src/main/java/htsjdk/samtools/util/LocationAware.java b/src/main/java/htsjdk/samtools/util/LocationAware.java
deleted file mode 100644
index 46e1d2d..0000000
--- a/src/main/java/htsjdk/samtools/util/LocationAware.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * Describes API for getting current position in a stream, writer, or underlying file.
- * 
- * The expected functionality is simple: if you are a output stream / writer, and you've written 50 bytes to the stream, then 
- * {@link #getPosition()} should return 50; if you are an input stream or file reader, and you've read 25 bytes from the object, then it 
- * should return 25.
- * 
- * In the context of an iterator or any producer-like object that doesn't map directly to a byte stream, {@link #getPosition()} should
- * return the position (in the underlying stream being read/written to) of the most-recently read/written element.  For example, if you
- * are reading lines from a file with a {@link htsjdk.tribble.readers.AsciiLineReaderIterator}, calling {@link #getPosition()} should return the byte position
- * of the start of the most recent line returned by {@link htsjdk.tribble.readers.AsciiLineReaderIterator#next()}.
- * 
- * @author mccowan
- */
-public interface LocationAware {
-    /**
-     * The current offset, in bytes, of this stream/writer/file.  Or, if this is an iterator/producer, the offset (in bytes) of the
-     * END of the most recently returned record (since a produced record corresponds to something that has been read already). See class
-     * javadoc for more.
-     *
-     * Note that for BGZF files, this does not represent an actually file position, but a virtual file pointer.
-     */
-    public long getPosition();
-}
diff --git a/src/main/java/htsjdk/samtools/util/Locus.java b/src/main/java/htsjdk/samtools/util/Locus.java
deleted file mode 100644
index 8012263..0000000
--- a/src/main/java/htsjdk/samtools/util/Locus.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Location info about a locus.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public interface Locus {
-    int getSequenceIndex();
-
-    /** @return 1-based position */
-    int getPosition();
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/util/LocusComparator.java b/src/main/java/htsjdk/samtools/util/LocusComparator.java
deleted file mode 100644
index e0f04d9..0000000
--- a/src/main/java/htsjdk/samtools/util/LocusComparator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * compares first by sequence index then by position
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class LocusComparator<T extends Locus> implements Comparator<T>, Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public int compare(T thing1, T thing2) {
-        int refCompare = thing1.getSequenceIndex() - thing2.getSequenceIndex();
-        return refCompare == 0 ? thing1.getPosition() - thing2.getPosition() : refCompare;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/LocusImpl.java b/src/main/java/htsjdk/samtools/util/LocusImpl.java
deleted file mode 100644
index 8629078..0000000
--- a/src/main/java/htsjdk/samtools/util/LocusImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Simple implementation of Locus interface for ease of passing as an arg and comparing with other Locus implementations.
- * @author alecw at broadinstitute.org
- */
-public class LocusImpl implements Locus {
-    private final int sequenceIndex;
-    private final int position;
-
-    public LocusImpl(int sequenceIndex, int position) {
-        this.position = position;
-        this.sequenceIndex = sequenceIndex;
-    }
-
-    public int getSequenceIndex() {
-        return sequenceIndex;
-    }
-
-    /**
-     * @return 1-based position
-     */
-    public int getPosition() {
-        return position;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Log.java b/src/main/java/htsjdk/samtools/util/Log.java
deleted file mode 100644
index acbd3c4..0000000
--- a/src/main/java/htsjdk/samtools/util/Log.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
-/**
- * <p>A <em>wafer thin</em> wrapper around System.err that uses var-args to make it
- * much more efficient to call the logging methods in without having to
- * surround every call site with calls to Log.isXXXEnabled().  All the methods on this
- * class take a variable length list of arguments and, only if logging is enabled for
- * the level and channel being logged to, will those arguments be toString()'d and
- * appended together.</p>
- *
- * @author Tim Fennell
- */
-public final class Log {
-    /** Enumeration for setting log levels. */
-    public static enum LogLevel { ERROR, WARNING, INFO, DEBUG }
-
-    private static LogLevel globalLogLevel = LogLevel.INFO;
-
-    private final Class<?> clazz;
-    private final String className;
-    private final PrintStream out = System.err;
-
-    /**
-     * Private constructor
-     */
-    private Log(final Class<?> clazz) {
-        this.clazz = clazz;
-        this.className = clazz.getSimpleName();
-    }
-
-    /**
-     * Get a Log instance to perform logging within the Class specified.  Returns an instance
-     * of this class which wraps an instance of the commons logging Log class.
-     * @param clazz the Class which is going to be doing the logging
-     * @return a Log instance with which to log
-     */
-    public static Log getInstance(final Class<?> clazz) {
-        return new Log(clazz);
-    }
-
-    public static void setGlobalLogLevel(final LogLevel logLevel) {
-        globalLogLevel = logLevel;
-    }
-
-    /** Returns true if the specified log level is enabled otherwise false. */
-    public static final boolean isEnabled(final LogLevel level) {
-        return level.ordinal() <= globalLogLevel.ordinal();
-    }
-
-    /**
-     * Private method that does the actual printing of messages to a PrintWriter. Outputs the log level,
-     * class name and parts followed by the stack trace if a throwable is provided.
-     *
-     * @param level the Log level being logged at
-     * @param throwable a Throwable if one is available otherwise null
-     * @param parts the parts of the message to be concatenated
-     */
-    private void emit(final LogLevel level, final Throwable throwable, final Object... parts) {
-        if (isEnabled(level)) {
-        	StringBuffer tmp = new StringBuffer();
-            tmp.append(level.name())
-                    .append('\t')
-                    .append(getTimestamp())
-                    .append('\t')
-                    .append(this.className)
-                    .append('\t');
-
-            for (final Object part : parts) {
-                if (part != null && part.getClass().isArray()) {
-                    final Class<?> component = part.getClass().getComponentType();
-                    if (component.equals(Boolean.TYPE))        tmp.append(Arrays.toString( (boolean[]) part));
-                    else if (component.equals(Byte.TYPE))      tmp.append(Arrays.toString( (byte[]) part));
-                    else if (component.equals(Character.TYPE)) tmp.append(Arrays.toString( (char[]) part));
-                    else if (component.equals(Double.TYPE))    tmp.append(Arrays.toString( (double[]) part));
-                    else if (component.equals(Float.TYPE))     tmp.append(Arrays.toString( (float[]) part));
-                    else if (component.equals(Integer.TYPE))   tmp.append(Arrays.toString( (int[]) part));
-                    else if (component.equals(Long.TYPE))      tmp.append(Arrays.toString( (long[]) part));
-                    else if (component.equals(Short.TYPE))     tmp.append(Arrays.toString( (short[]) part));
-                    else tmp.append(Arrays.toString( (Object[]) part));
-                }
-                else {
-                    tmp.append(part);
-                }
-            }
-
-            // Print out the exception if there is one
-            if (throwable != null) {
-             	synchronized (this.out) {
-                    this.out.println(tmp.toString());
-                    throwable.printStackTrace(this.out);
-             	}
-            }
-            else {
-                this.out.println(tmp.toString());
-            }
-        }
-    }
-
-    /**
-     * Creates a date string for insertion into the log.  Given that logs are sometimes held statically
-     * and SimpleDateFormat is not thread safe, currently creates an instance each time :/
-     */
-    protected String getTimestamp() {
-        final DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        return fmt.format(new Date());
-    }
-
-    /**
-     * Logs a Throwable and optional message parts at level error.
-     * @param throwable an instance of Throwable that should be logged with stack trace
-     * @param messageParts zero or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void error(final Throwable throwable, final Object... messageParts) {
-        emit(LogLevel.ERROR, throwable, messageParts);
-    }
-
-    /**
-     * Logs a Throwable and optional message parts at level warn.
-     * @param throwable an instance of Throwable that should be logged with stack trace
-     * @param messageParts zero or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void warn(final Throwable throwable, final Object... messageParts) {
-        emit(LogLevel.WARNING, throwable, messageParts);
-    }
-
-    /**
-     * Logs a Throwable and optional message parts at level info.
-     * @param throwable an instance of Throwable that should be logged with stack trace
-     * @param messageParts zero or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void info(final Throwable throwable, final Object... messageParts) {
-        emit(LogLevel.INFO, throwable, messageParts);
-    }
-
-    /**
-     * Logs a Throwable and optional message parts at level debug.
-     * @param throwable an instance of Throwable that should be logged with stack trace
-     * @param messageParts zero or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void debug(final Throwable throwable, final Object... messageParts) {
-        emit(LogLevel.DEBUG, throwable, messageParts);
-    }
-
-    // Similar methods, but without Throwables, follow
-
-    /**
-     * Logs one or more message parts at level error.
-     * @param messageParts one or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void error(final Object... messageParts) {
-        emit(LogLevel.ERROR, null, messageParts);
-    }
-
-    /**
-     * Logs one or more message parts at level warn.
-     * @param messageParts one or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void warn(final Object... messageParts) {
-        emit(LogLevel.WARNING, null, messageParts);
-    }
-
-    /**
-     * Logs one or more message parts at level info.
-     * @param messageParts one or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void info(final Object... messageParts) {
-        emit(LogLevel.INFO, null, messageParts);
-    }
-
-    /**
-     * Logs one or more message parts at level debug.
-     * @param messageParts one or more objects which should be combined, by calling toString()
-     *        to form the log message.
-     */
-    public final void debug(final Object... messageParts) {
-        emit(LogLevel.DEBUG, null, messageParts);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Md5CalculatingInputStream.java b/src/main/java/htsjdk/samtools/util/Md5CalculatingInputStream.java
deleted file mode 100755
index e0e7cd5..0000000
--- a/src/main/java/htsjdk/samtools/util/Md5CalculatingInputStream.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Class to generate an MD5 string for a file as it is being read
- *
- * @author ktibbett at broadinstitue.org
- */
-public class Md5CalculatingInputStream extends InputStream {
-
-    private final InputStream is;
-    private final MessageDigest md5;
-    private final File digestFile;
-    private String hash;
-
-    /**
-     * Constructor that takes in the InputStream that we are wrapping
-     * and creates the MD5 MessageDigest
-     */
-    public Md5CalculatingInputStream(InputStream is, File digestFile) {
-        super();
-        this.is = is;
-        this.digestFile = digestFile;
-        this.hash = null;
-
-        try {
-            md5 = MessageDigest.getInstance("MD5");
-            md5.reset();
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException("MD5 algorithm not found", e);
-        }
-    }
-
-    public int read() throws IOException {
-        int result = is.read();
-        if (result != -1) md5.update((byte)result);
-        return result;
-    }
-
-    public int read(byte[] b) throws IOException {
-        int result = is.read(b);
-        if (result != -1) md5.update(b, 0, result);
-        return result;
-    }
-
-
-    public int read(byte[] b, int off, int len) throws IOException {
-        int result = is.read(b, off, len);
-        if (result != -1) md5.update(b, off, result);
-        return result;
-    }
-
-    public String md5() {
-        if(hash == null) {
-            throw new SAMException("Attempting to access md5 digest before the entire file is read!  Call close first.");
-        }
-        return hash;
-    }
-
-    private String makeHash() {
-        if(hash == null) {
-            hash = new BigInteger(1, md5.digest()).toString(16);
-            if (hash.length() != 32) {
-                final String zeros = "00000000000000000000000000000000";
-                hash = zeros.substring(0, 32 - hash.length()) + hash;
-            }
-            return hash;
-        } else {
-            throw new SAMException("MD5InputStream is already closed!");
-        }
-    }
-
-    public void close() throws IOException {
-        is.close();
-        makeHash();
-
-        if(digestFile != null) {
-            BufferedWriter writer = new BufferedWriter(new FileWriter(digestFile));
-            writer.write(hash);
-            writer.close();
-        }
-    }
-
-    // Methods not supported or overridden because they would not result in a valid hash
-    public boolean markSupported() { return false; }
-    public void	mark(int readlimit) {
-        throw new UnsupportedOperationException("mark() is not supported by the MD5CalculatingInputStream");
-    }
-    public void	reset() throws IOException {
-        throw new UnsupportedOperationException("reset() is not supported by the MD5CalculatingInputStream");
-    }
-    public long skip(long n) throws IOException {
-        throw new UnsupportedOperationException("skip() is not supported by the MD5CalculatingInputStream");
-    }
-
-    // Methods delegated to the wrapped InputStream
-    public int available() throws IOException { return is.available(); }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/Md5CalculatingOutputStream.java b/src/main/java/htsjdk/samtools/util/Md5CalculatingOutputStream.java
deleted file mode 100755
index 3c5a492..0000000
--- a/src/main/java/htsjdk/samtools/util/Md5CalculatingOutputStream.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Class to generate an MD5 string for a file as it is being read
- *
- * @author ktibbett at broadinstitue.org
- */
-public class Md5CalculatingOutputStream extends OutputStream {
-
-    private final OutputStream os;
-    private final MessageDigest md5;
-    private final File digestFile;
-    private String hash;
-
-    /**
-     * Constructor that takes in the OutputStream that we are wrapping
-     * and creates the MD5 MessageDigest
-     */
-    public Md5CalculatingOutputStream(OutputStream os, File digestFile) {
-        super();
-        this.hash = null;
-        this.os = os;
-        this.digestFile = digestFile;
-
-        try {
-            md5 = MessageDigest.getInstance("MD5");
-            md5.reset();
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException("MD5 algorithm not found", e);
-        }
-    }
-
-    public void write(int b) throws IOException {
-        md5.update((byte)b);
-        os.write(b);
-    }
-
-    public void write(byte[] b) throws IOException {
-        md5.update(b);
-        os.write(b);
-    }
-
-
-    public void write(byte[] b, int off, int len) throws IOException {
-        md5.update(b, off, len);
-        os.write(b, off, len);
-    }
-
-    public String md5() {
-        if(hash == null) {
-            throw new SAMException("Attempting to access md5 digest before the entire file is written!  Call close first.");
-        }
-
-        return hash;
-    }
-
-    private String makeHash() {
-        if(hash == null) {
-            hash = new BigInteger(1, md5.digest()).toString(16);
-            if (hash.length() != 32) {
-                final String zeros = "00000000000000000000000000000000";
-                hash = zeros.substring(0, 32 - hash.length()) + hash;
-            }
-            return hash;
-        } else {
-            throw new SAMException("Calling close on Md5CalculatingOutputStream twice!");
-        }
-    }
-
-    public void close() throws IOException {
-        os.close();
-        makeHash();
-
-        if(digestFile != null) {
-            BufferedWriter writer = new BufferedWriter(new FileWriter(digestFile));
-            writer.write(hash);
-            writer.close();
-        }
-    }
-
-    // Pass-through method
-    public void flush() throws IOException { os.flush(); }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/MergingIterator.java b/src/main/java/htsjdk/samtools/util/MergingIterator.java
deleted file mode 100644
index 14da4b0..0000000
--- a/src/main/java/htsjdk/samtools/util/MergingIterator.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.PriorityQueue;
-
-/**
- * An iterator over Iterators that return Ts. Calling next() returns the next T ordered according
- * to Comparator provided at construction time. Importantly, the elements in the input Iterators
- * must already be sorted according to the provided Comparator.
- */
-public class MergingIterator<T> implements CloseableIterator<T> {
-
-	/*
-	 * An Iterator whose natural ordering is by the T that will be returned by the next call to
-	 * next().
-	 */
-	private class ComparableIterator extends PeekableIterator<T> implements Comparable<ComparableIterator> {
-
-		public ComparableIterator(final Iterator<T> iterator) {
-			super(iterator);
-		}
-
-		@Override
-		public int compareTo(final ComparableIterator that) {
-			if (comparator.getClass() != comparator.getClass()) {
-				throw new IllegalStateException("Can't compare two ComparableIterators that have different orderings.");
-			}
-
-			return comparator.compare(this.peek(), that.peek());
-		}
-	}
-
-	/*
-	 * The general flow is to pull the "top" (according to the ComparableIterator's compareTo())
-	 * iterator off on calls to this.next(), get iterator.next() and then re-add the iterator to
-	 * the queue. Readding reorders the queue so the next "top" iterator is ready.
-	 */
-	private final PriorityQueue<ComparableIterator> queue;
-
-	private final Comparator<T> comparator;
-
-	// This is the last T returned by the call to next(). It's used to make sure that the comparators
-	// always return correctly ordered Ts.
-	private T lastReturned;
-
-	/**
-	 * Creates a MergingIterator over the given Collection of iterators whose elements will be
-	 * returned in the order defined by the given Comparator.
-	 */
-	public MergingIterator(final Comparator<T> comparator, final Collection<CloseableIterator<T>> iterators) {
-		if (iterators.isEmpty()) throw new IllegalArgumentException("One or more CloseableIterators must be provided.");
-
-		this.comparator = comparator;
-
-		this.queue = new PriorityQueue<ComparableIterator>();
-		for (final CloseableIterator<T> iterator : iterators) {
-			this.addIfNotEmpty(new ComparableIterator(iterator));
-		}
-
-		// If there are no iterators to read from after adding them all to the prioqueue,
-		// should we throw? it's prob'ly an error.
-	}
-
-	/**
-	 * @see java.util.Iterator<T>.hasNext
-	 */
-	@Override
-	public boolean hasNext() {
-		return ! this.queue.isEmpty();
-	}
-
-	/**
-	 * @see java.util.Iterator<T>.next
-	 */
-	@Override
-	public T next() {
-		if ( ! this.hasNext()) throw new NoSuchElementException();
-
-		final ComparableIterator recordIterator = this.queue.poll();
-		// Assumes the iterator is closed & removed from the queue before recordIterator.hasNext() == false
-		final T next = recordIterator.next();
-		// I don't like having to test for null here -- it's really only null before the first call
-		// to next() -- but I don't see any other way
-		if (this.lastReturned != null && this.comparator.compare(lastReturned, next) > 0) {
-			throw new IllegalStateException(
-					"The elements of the input Iterators are not sorted according to the comparator " +
-							this.comparator.getClass().getName());
-		}
-
-		addIfNotEmpty(recordIterator);
-		this.lastReturned = next;
-		return next;
-	}
-
-	/**
-	 * Unsupported.
-	 */
-	@Override
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Closes every CloseableIterator in this MergingIterator. After calling, calls to
-	 * hasNext() will always return false.
-	 */
-	@Override
-	public void close() {
-		for (final ComparableIterator iterator : this.queue) {
-			iterator.close();
-			this.queue.remove(iterator);
-		}
-	}
-
-	private void addIfNotEmpty(final ComparableIterator iterator) {
-		if (iterator.hasNext()) queue.offer(iterator);
-		else iterator.close();
-	}
-}
diff --git a/src/main/java/htsjdk/samtools/util/Murmur3.java b/src/main/java/htsjdk/samtools/util/Murmur3.java
deleted file mode 100644
index b0c4a3a..0000000
--- a/src/main/java/htsjdk/samtools/util/Murmur3.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2011 The Guava Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- *
- * MurmurHash3 was written by Austin Appleby, and is placed in the public
- * domain. The author hereby disclaims copyright to this source code.
- *
- * Source:
- * http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp
- * (Modified to adapt to Guava coding conventions and to use the HashFunction interface)
- *
- * Modified to remove stuff Clojure doesn't need, placed under clojure.lang namespace,
- * all fns made static, added hashOrdered/Unordered
- *
- * Modified again by Tim Fennell to remove code not needed by HTSJDK, to make methods non-static (so that different uses can
- * supply different seed values without colliding) and to comform to HTSJDK coding conventions where possible.
- *
- * @author Austin Appleby
- * @author Dimitris Andreou
- * @author Kurt Alfred Kluever
- */
-package htsjdk.samtools.util;
-
-import java.io.Serializable;
-
-/**
- * Provides an implementation of the Murmur3_32 hash algorithm that has desirable properties in terms of randomness
- * and uniformity of the distribution of output values that make it a useful hashing algorithm for downsampling.
- */
-public final class Murmur3 implements Serializable{
-    private static final long serialVersionUID = 1L;
-
-    private final int seed ;
-
-    /** Constructs a Murmur3 hash with the given seed. */
-    public Murmur3(final int seed) {
-        this.seed = seed;
-    }
-
-    /** Hashes a character stream to an int using Murmur3. */
-    public int hashUnencodedChars(CharSequence input){
-        int h1 = this.seed;
-
-        // step through the CharSequence 2 chars at a time
-        final int length = input.length();
-        for(int i = 1; i < length; i += 2)  {
-            int k1 = input.charAt(i - 1) | (input.charAt(i) << 16);
-            k1 = mixK1(k1);
-            h1 = mixH1(h1, k1);
-        }
-
-        // deal with any remaining characters
-        if((length & 1) == 1) {
-            int k1 = input.charAt(length - 1);
-            k1 = mixK1(k1);
-            h1 ^= k1;
-        }
-
-        return fmix(h1, 2 * length);
-    }
-
-    private int hashInt(int input){
-        if(input == 0) return 0;
-        int k1 = mixK1(input);
-        int h1 = mixH1(this.seed, k1);
-
-        return fmix(h1, 4);
-    }
-
-    private int hashLong(long input){
-        if(input == 0) return 0;
-        int low = (int) input;
-        int high = (int) (input >>> 32);
-
-        int k1 = mixK1(low);
-        int h1 = mixH1(this.seed, k1);
-
-        k1 = mixK1(high);
-        h1 = mixH1(h1, k1);
-
-        return fmix(h1, 8);
-    }
-
-    private static int mixK1(int k1){
-        final int c1 = 0xcc9e2d51;
-        final int c2 = 0x1b873593;
-        k1 *= c1;
-        k1 = Integer.rotateLeft(k1, 15);
-        k1 *= c2;
-        return k1;
-    }
-
-    private static int mixH1(int h1, int k1){
-        h1 ^= k1;
-        h1 = Integer.rotateLeft(h1, 13);
-        h1 = h1 * 5 + 0xe6546b64;
-        return h1;
-    }
-
-    // Finalization mix - force all bits of a hash block to avalanche
-    private static int fmix(int h1, int length){
-        h1 ^= length;
-        h1 ^= h1 >>> 16;
-        h1 *= 0x85ebca6b;
-        h1 ^= h1 >>> 13;
-        h1 *= 0xc2b2ae35;
-        h1 ^= h1 >>> 16;
-        return h1;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/samtools/util/OverlapDetector.java b/src/main/java/htsjdk/samtools/util/OverlapDetector.java
deleted file mode 100644
index ba177b7..0000000
--- a/src/main/java/htsjdk/samtools/util/OverlapDetector.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.*;
-
-/**
- * Utility class to efficiently do in memory overlap detection between a large
- * set of mapping like objects, and one or more candidate mappings.
- *
- * You can use it for example to detect all locatables overlapping a given set of locatables:
- * <pre>{@code
- *    OverlapDetector<Locatable> detector = OverlapDetector.create(locatables);
- *    Set<Locatable> overlaps = detector.getOverlaps(query);
- *
- *    boolean anyOverlap = detector.overlapsAny(query); //faster API for checking presence of any overlap
- * }</pre>
- */
-public class OverlapDetector<T> {
-    private final Map<Object, IntervalTree<Set<T>>> cache = new HashMap<>();
-    private final int lhsBuffer;
-    private final int rhsBuffer;
-
-    /**
-     * Constructs an overlap detector.
-     * @param lhsBuffer the amount by which to "trim" coordinates of mappings on the left
-     *                  hand side when calculating overlaps
-     * @param rhsBuffer the amount by which to "trim" coordinates of mappings on the right
-     *                  hand side when calculating overlaps
-     */
-    public OverlapDetector(int lhsBuffer, int rhsBuffer) {
-        this.lhsBuffer = lhsBuffer;
-        this.rhsBuffer = rhsBuffer;
-    }
-
-    /**
-     * Creates a new OverlapDetector with no trim and the given set of intervals.
-     */
-    public static <T extends Locatable> OverlapDetector<T> create(final List<T> intervals) {
-        final OverlapDetector<T> detector = new OverlapDetector<>(0, 0);
-        detector.addAll(intervals, intervals);
-        return detector;
-    }
-
-    /** Adds a Locatable to the set of Locatables against which to match candidates. */
-    public void addLhs(final T object, final Locatable interval) {
-        if (object == null) {
-            throw new IllegalArgumentException("null object");
-        }
-        if (interval == null) {
-            throw new IllegalArgumentException("null interval");
-        }
-        final String seqId = interval.getContig();
-
-        IntervalTree<Set<T>> tree = this.cache.get(seqId);
-        if (tree == null) {
-            tree = new IntervalTree<>();
-            this.cache.put(seqId, tree);
-        }
-
-        final int start = interval.getStart() + this.lhsBuffer;
-        final int end   = interval.getEnd()   - this.lhsBuffer;
-
-        final Set<T> objects = new HashSet<>(1);
-        objects.add(object);
-        if (start <= end) {  // Don't put in sequences that have no overlappable bases
-            final Set<T> alreadyThere = tree.put(start, end, objects);
-            if (alreadyThere != null) {
-                alreadyThere.add(object);
-                tree.put(start, end, alreadyThere);
-            }
-        }
-    }
-
-    /**
-     * Adds all items to the overlap detector.
-     *
-     * The order of the lists matters only in the sense that it needs to be the same for the intervals
-     * and the corresponding objects.
-     */
-    public void addAll(final List<T> objects, final List<? extends Locatable> intervals) {
-        if (objects == null) {
-            throw new IllegalArgumentException("null objects");
-        }
-        if (intervals == null) {
-            throw new IllegalArgumentException("null intervals");
-        }
-        if (objects.size() != intervals.size()) {
-            throw new IllegalArgumentException("Objects and intervals must be the same size but were " + objects.size() + " and " + intervals.size());
-        }
-
-        for (int i=0; i<objects.size(); ++i) {
-            addLhs(objects.get(i), intervals.get(i));
-        }
-    }
-
-    /**
-     * Gets all the objects that could be returned by the overlap detector.
-     */
-    public Set<T> getAll() {
-        final Set<T> all = new HashSet<>();
-        for (final IntervalTree<Set<T>> tree : this.cache.values()) {
-            for (IntervalTree.Node<Set<T>> node : tree) {
-                all.addAll(node.getValue());
-            }
-        }
-        return all;
-    }
-
-    /**
-     * Returns true iff the given locatable overlaps any locatable in this detector.
-     *
-     * This is a performance shortcut API functionally equivalent to:
-     * <pre>{@code
-     *      ! getOverlaps(locatable).isEmpty()
-     * }</pre>
-     */
-    public boolean overlapsAny(final Locatable locatable) {
-        if (locatable == null) {
-            throw new IllegalArgumentException("null locatable");
-        }
-        final String seqId = locatable.getContig();
-        final IntervalTree<Set<T>> tree = this.cache.get(seqId);
-        if (tree == null) {
-            return false;
-        }
-        final int start = locatable.getStart() + this.rhsBuffer;
-        final int end   = locatable.getEnd()   - this.rhsBuffer;
-
-        if (start > end) {
-            return false;
-        }
-
-        final Iterator<IntervalTree.Node<Set<T>>> it = tree.overlappers(start, end);
-        while (it.hasNext()) {
-            final IntervalTree.Node<Set<T>> node = it.next();
-            if (!node.getValue().isEmpty()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Gets the Set of objects that overlap the provided locatable.
-     * The returned set may not be modifiable.
-     */
-    public Set<T> getOverlaps(final Locatable locatable)  {
-        if (locatable == null) {
-            throw new IllegalArgumentException("null locatable");
-        }
-        final String seqId = locatable.getContig();
-        final IntervalTree<Set<T>> tree = this.cache.get(seqId);
-        if (tree == null) {
-            return Collections.emptySet();
-        }
-        final int start = locatable.getStart() + this.rhsBuffer;
-        final int end   = locatable.getEnd()   - this.rhsBuffer;
-
-        if (start > end) {
-            return Collections.emptySet();
-        }
-
-        final Set<T> matches = new HashSet<>();
-        final Iterator<IntervalTree.Node<Set<T>>> it = tree.overlappers(start, end);
-        while (it.hasNext()) {
-            final IntervalTree.Node<Set<T>> node = it.next();
-            matches.addAll(node.getValue());
-        }
-        return matches;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/PeekIterator.java b/src/main/java/htsjdk/samtools/util/PeekIterator.java
deleted file mode 100644
index 9f16a51..0000000
--- a/src/main/java/htsjdk/samtools/util/PeekIterator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.Iterator;
-
-/**
- * Wrapper around an iterator that enables non-destructive peeking at the next element that would
- * be returned by next()
- */
-public class PeekIterator<T> implements Iterator<T> {
-    Iterator<T> underlyingIterator;
-    T peekedElement = null;
-
-    public PeekIterator(final Iterator<T> underlyingIterator) {
-        this.underlyingIterator = underlyingIterator;
-    }
-
-    /**
-     * @return true if the iteration has more elements. (In other words, returns true if next would return an element 
-     * rather than throwing an exception.)
-     */
-    public boolean hasNext() {
-        return peekedElement != null || underlyingIterator.hasNext();  
-    }
-
-    /**
-     * @return the next element in the iteration. Calling this method repeatedly until the hasNext() method returns
-     * false will return each element in the underlying collection exactly once.
-     */
-    public T next() {
-        if (peekedElement != null) {
-            final T ret = peekedElement;
-            peekedElement = null;
-            return ret;
-        }
-        return underlyingIterator.next();
-    }
-
-    /**
-     * @return the next element in the iteration, but without removing it, so the next call to next() or peek()
-     * will return the same element as returned by the current call to peek().
-     */
-    public T peek() {
-        if (peekedElement == null) {
-            peekedElement = underlyingIterator.next();
-        }
-        return peekedElement;
-    }
-
-    /**
-     * Unsupported
-     */
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @return the iterator wrapped by this object.
-     */
-    public Iterator<T> getUnderlyingIterator() {
-        return underlyingIterator;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/PeekableIterator.java b/src/main/java/htsjdk/samtools/util/PeekableIterator.java
deleted file mode 100644
index 1587dd2..0000000
--- a/src/main/java/htsjdk/samtools/util/PeekableIterator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.Iterator;
-
-/**
- * Generic Closable Iterator that allows you to peek at the next value before calling next
- */
-public class PeekableIterator<Object> implements CloseableIterator<Object> {
-    private Iterator<Object> iterator;
-    private Object nextObject;
-
-    /** Constructs a new iterator that wraps the supplied iterator. */
-    public PeekableIterator(Iterator<Object> iterator) {
-        this.iterator = iterator;
-        advance();
-    }
-
-    /** Closes the underlying iterator. */
-    public void close() {
-        CloserUtil.close(iterator);
-    }
-
-    /** True if there are more items, in which case both next() and peek() will return a value. */
-    public boolean hasNext() {
-        return this.nextObject != null;
-    }
-
-    /** Returns the next object and advances the iterator. */
-    public Object next() {
-        Object retval = this.nextObject;
-        advance();
-        return retval;
-    }
-
-    /**
-     * Returns the next object but does not advance the iterator. Subsequent calls to peek()
-     * and next() will return the same object.
-     */
-    public Object peek(){
-        return this.nextObject;
-    }
-
-    private void advance(){
-        if (this.iterator.hasNext()) {
-            this.nextObject = iterator.next();
-        }
-        else {
-            this.nextObject = null;
-        }
-    }
-
-    /** Unsupported Operation. */
-    public void remove() {
-        throw new UnsupportedOperationException("Not supported: remove");
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/PositionalOutputStream.java b/src/main/java/htsjdk/samtools/util/PositionalOutputStream.java
deleted file mode 100644
index ef28be6..0000000
--- a/src/main/java/htsjdk/samtools/util/PositionalOutputStream.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* 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.
-*/
-
-package htsjdk.samtools.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Wraps output stream in a manner which keeps track of the position within the file and allowing writes
- * at arbitrary points
- */
-public final class PositionalOutputStream extends OutputStream implements LocationAware
-{
-    private final OutputStream out;
-    private long position = 0;
-
-    public PositionalOutputStream(final OutputStream out) {
-        this.out = out;
-    }
-
-    public final void write(final byte[] bytes) throws IOException {
-        write(bytes, 0, bytes.length);
-    }
-
-    public final void write(final byte[] bytes, final int startIndex, final int numBytes) throws IOException {
-        position += numBytes;
-        out.write(bytes, startIndex, numBytes);
-    }
-
-    public final void write(final int c)  throws IOException {
-        position++;
-        out.write(c);
-    }
-
-    public final long getPosition() { return position; }
-
-    @Override
-    public void close() throws IOException {
-        super.close();
-        out.close();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ProcessExecutor.java b/src/main/java/htsjdk/samtools/util/ProcessExecutor.java
deleted file mode 100644
index 5ff6673..0000000
--- a/src/main/java/htsjdk/samtools/util/ProcessExecutor.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-
-/**
- * Utility class that will execute sub processes via Runtime.getRuntime().exec(...) and read
- * off the output from stderr and stdout of the sub process. This implementation uses a different
- * thread to read each stream: the current thread for stdout and another, internal thread for 
- * stderr. This utility is able to handle concurrent executions, spawning as many threads as
- * are required to handle the concurrent load.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class ProcessExecutor {
-    private static final Log log = Log.getInstance(ProcessExecutor.class);
-    private static final ExecutorService executorService = Executors.newCachedThreadPool(new ThreadFactory() {
-        @Override
-        public Thread newThread(final Runnable r) {
-            return new Thread(r, "ProcessExecutor Thread");
-        }
-    });
-    
-    /**
-     * Executes the command via Runtime.getRuntime().exec() then writes stderr to log.error
-     * and stdout to log.info and blocks until the command is complete.
-     * 
-     * @see Runtime#exec(String)
-     * 
-     * @param command command string
-     * @return return code of command
-     */
-    public static int execute(final String command) {
-        try {
-            final Process process = Runtime.getRuntime().exec(command);
-            return readStreamsAndWaitFor(process);
-        } catch (Throwable t) {
-            throw new SAMException("Unexpected exception executing [" + htsjdk.samtools.util.StringUtil.join(" ", command) + "]", t);
-        }
-    }
-
-    /**
-     * Executes the command via Runtime.getRuntime().exec() then writes stderr to log.error
-     * and stdout to log.info and blocks until the command is complete.
-     * 
-     * @see Runtime#exec(String[])
-     * 
-     * @param commandParts command string
-     * @return return code of command
-     */
-    public static int execute(final String[] commandParts) {
-        return execute(commandParts, null);
-    }
-
-    /**
-     * Executes the command via Runtime.getRuntime().exec(), writes <code>outputStreamString</code>
-     * to the process output stream if it is not null, then writes stderr to log.error
-     * and stdout to log.info and blocks until the command is complete.
-     *
-     * @see Runtime#exec(String[])
-     *
-     * @param commandParts command string
-     * @return return code of command
-     */
-    public static int execute(final String[] commandParts, String outputStreamString) {
-        try {
-            final Process process = Runtime.getRuntime().exec(commandParts);
-            if (outputStreamString != null) {
-                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
-                writer.write(outputStreamString);
-                writer.newLine();
-                writer.close();
-            }
-            return readStreamsAndWaitFor(process);
-        } catch (Throwable t) {
-            throw new SAMException("Unexpected exception executing [" + htsjdk.samtools.util.StringUtil.join(" ", commandParts) + "]", t);
-        }
-    }
-
-    public static String executeAndReturnResult(final String command) {
-        try {
-            final Process process = Runtime.getRuntime().exec(command);
-            final StringBuilderProcessOutputReader err = new StringBuilderProcessOutputReader(process.getErrorStream());
-            final Future<?> stderrReader = executorService.submit(err);
-            final StringBuilderProcessOutputReader stdout = new StringBuilderProcessOutputReader(process.getInputStream());
-            stdout.run();
-            // wait for stderr reader to be done
-            stderrReader.get();
-            final int result = process.waitFor();
-            return result == 0 ? stdout.getOutput() : err.getOutput();
-        } catch (Throwable t) {
-            throw new SAMException("Unexpected exception executing [" + command + "]", t);
-        }
-
-    }
-
-    public static class ExitStatusAndOutput {
-        public final int exitStatus;
-        public final String stdout;
-        /** May be null if interleaved */
-        public final String stderr;
-
-        public ExitStatusAndOutput(int exitStatus, String stdout, String stderr) {
-            this.exitStatus = exitStatus;
-            this.stdout = stdout;
-            this.stderr = stderr;
-        }
-    }
-
-    /**
-     * Execute the command and capture stdout and stderr.
-     * @return Exit status of command, and both stderr and stdout interleaved into stdout attribute.
-     */
-    public static ExitStatusAndOutput executeAndReturnInterleavedOutput(final String command) {
-        try {
-            final Process process = Runtime.getRuntime().exec(command);
-            return interleaveProcessOutput(process);
-
-        } catch (Throwable t) {
-            throw new SAMException("Unexpected exception executing [" + command + "]", t);
-        }
-    }
-
-    /**
-     * Execute the command and capture stdout and stderr.
-     * @return Exit status of command, and both stderr and stdout interleaved into stdout attribute.
-     */
-    public static ExitStatusAndOutput executeAndReturnInterleavedOutput(final String[] commandArray) {
-        try {
-            final Process process = Runtime.getRuntime().exec(commandArray);
-            return interleaveProcessOutput(process);
-
-        } catch (Throwable t) {
-            throw new SAMException("Unexpected exception executing [" + StringUtil.join(" ", commandArray) + "]", t);
-        }
-    }
-
-    private static ExitStatusAndOutput interleaveProcessOutput(final Process process) throws InterruptedException, IOException {
-        final BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-        final BufferedReader stderrReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
-        final StringBuilder sb = new StringBuilder();
-
-        String stdoutLine = null;
-        String stderrLine = null;
-        while ((stderrLine = stderrReader.readLine()) != null ||
-                (stdoutLine = stdoutReader.readLine()) != null) {
-            if (stderrLine!= null) sb.append(stderrLine).append('\n');
-            if (stdoutLine!= null) sb.append(stdoutLine).append('\n');
-            stderrLine = null;
-            stdoutLine = null;
-        }
-        return new ExitStatusAndOutput(process.waitFor(), sb.toString(), null);
-
-    }
-
-    private static int readStreamsAndWaitFor(final Process process)
-            throws InterruptedException, ExecutionException {
-        final Future<?> stderrReader = executorService.submit(new LogErrorProcessOutputReader(process.getErrorStream()));
-        new LogInfoProcessOutputReader(process.getInputStream()).run();
-        // wait for stderr reader to be done
-        stderrReader.get();
-        return process.waitFor();
-    }
-
-
-    /**
-     * Runnable that reads off the given stream and logs it somewhere.
-     */
-    private static abstract class ProcessOutputReader implements Runnable {
-        private final BufferedReader reader;
-        public ProcessOutputReader(final InputStream stream) {
-            reader = new BufferedReader(new InputStreamReader(stream));
-        }
-
-        @Override
-        public void run() {
-            try {
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    write(line);
-                }
-            } catch (IOException e) {
-                throw new SAMException("Unexpected exception reading from process stream", e);
-            }
-        }
-        
-        protected abstract void write(String message);
-    }
-
-
-    private static class LogErrorProcessOutputReader extends ProcessOutputReader {
-        public LogErrorProcessOutputReader(final InputStream stream) { super(stream); }
-        @Override protected void write(final String message) { log.error(message); }
-    }
-
-    private static class LogInfoProcessOutputReader extends ProcessOutputReader {
-        public LogInfoProcessOutputReader(final InputStream stream) { super(stream); }
-        @Override protected void write(final String message) { log.info(message); }
-    }
-
-    private static class StringBuilderProcessOutputReader extends ProcessOutputReader {
-        private final StringBuilder sb = new StringBuilder();
-        public StringBuilderProcessOutputReader(final InputStream stream) { super(stream); }
-        @Override protected void write(final String message) { sb.append(message).append('\n'); }
-        public String getOutput() { return sb.toString(); }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/ProgressLogger.java b/src/main/java/htsjdk/samtools/util/ProgressLogger.java
deleted file mode 100644
index 6a293d6..0000000
--- a/src/main/java/htsjdk/samtools/util/ProgressLogger.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * Little progress logging class to facilitate consistent output of useful information when progressing
- * through a stream of SAM records.
- *
- * @author Tim Fennell
- */
-public class ProgressLogger extends AbstractProgressLogger {
-
-    private final Log log;
-
-    /**
-     * Construct a progress logger.
-     * @param log the Log object to write outputs to
-     * @param n the frequency with which to output (i.e. every N records)
-     * @param verb the verb to log, e.g. "Processed, Read, Written".
-     * @param noun the noun to use when logging, e.g. "Records, Variants, Loci"
-     */
-    public ProgressLogger(final Log log, final int n, final String verb, final String noun) {
-        super(noun, verb, n);
-        this.log = log;
-    }
-
-    /**
-     * Construct a progress logger.
-     * @param log the Log object to write outputs to
-     * @param n the frequency with which to output (i.e. every N records)
-     * @param verb the verb to log, e.g. "Processed, Read, Written".
-     */
-    public ProgressLogger(final Log log, final int n, final String verb) {
-        this(log, n, verb, "records");
-    }
-
-    /**
-     * Construct a progress logger with the desired log and frequency and the verb "Processed".
-     * @param log the Log object to write outputs to
-     * @param n the frequency with which to output (i.e. every N records)
-     */
-    public ProgressLogger(final Log log, final int n) { this(log, n, "Processed"); }
-
-    /**
-     * Construct a progress logger with the desired log, the verb "Processed" and a period of 1m records.
-     * @param log the Log object to write outputs to
-     */
-    public ProgressLogger(final Log log) { this(log, 1000000); }
-
-    @Override
-    protected void log(final String... message) {
-        log.info((Object[])message);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ProgressLoggerInterface.java b/src/main/java/htsjdk/samtools/util/ProgressLoggerInterface.java
deleted file mode 100644
index a3ef7bc..0000000
--- a/src/main/java/htsjdk/samtools/util/ProgressLoggerInterface.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * 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:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * 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.
- */
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * An interface defining the record() methods of the Picard-public ProgressLogger implementation.
- */
-public interface ProgressLoggerInterface {
-
-	boolean record(final String chrom, final int pos);
-	boolean record(final SAMRecord rec);
-	boolean record(final SAMRecord... recs);
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/QualityEncodingDetector.java b/src/main/java/htsjdk/samtools/util/QualityEncodingDetector.java
deleted file mode 100644
index b0a965c..0000000
--- a/src/main/java/htsjdk/samtools/util/QualityEncodingDetector.java
+++ /dev/null
@@ -1,405 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMUtils;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.fastq.FastqReader;
-import htsjdk.samtools.fastq.FastqRecord;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-import java.util.Set;
-
-import static java.util.Arrays.asList;
-
-/**
- * Utility for determining the type of quality encoding/format (see {@link FastqQualityFormat}) used in a SAM/BAM or Fastq.
- * <p/>
- * To use this class, invoke the detect() method with a {@link SamReader} or {@link FastqReader}, as appropriate.  The consumer is
- * responsible for closing readers.
- *
- * @author mccowan at broadinstitute.org
- */
-public class QualityEncodingDetector {
-
-    private QualityRecordAggregator qualityAggregator = new QualityRecordAggregator();
-
-    /**
-     * The maximum number of records over which the detector will iterate before making a determination, by default.
-     */
-    public static final long DEFAULT_MAX_RECORDS_TO_ITERATE = 10000;
-    private static final Log log = Log.getInstance(QualityEncodingDetector.class);
-
-    public enum FileContext {FASTQ, SAM}
-
-    static class Range {
-        final int low, high;
-
-        Range(final int low, final int high) {
-            this.low = low;
-            this.high = high;
-        }
-
-        boolean contains(final int value) {
-            return value <= high && value >= low;
-        }
-    }
-
-    /**
-     * Collection of data about the different quality formats and how they are interpreted.
-     */
-    enum QualityScheme {
-        Phred(
-                new Range(0, 93),           // Raw value range
-                new Range(33, 126),         // ASCII value range
-                asList(new Range(33, 58)),  // Ranges into which we expect at least one ASCII value to fall
-                FastqQualityFormat.Standard // Associated quality format
-        ),
-        Solexa(
-                new Range(-5, 62),
-                new Range(59, 126),
-                new ArrayList<Range>(),
-                FastqQualityFormat.Solexa
-        ),
-        Illumina(
-                new Range(0, 62),
-                new Range(64, 126),
-                new ArrayList<Range>(),
-                FastqQualityFormat.Illumina
-        );
-        final Range rawRange, asciiRange;
-        /**
-         * Ranges into which we expect at least one value to fall if this formatting is being used.  For example, for
-         * Standard encoding, we expect to at least one ASCII value between 33 and 58 (0 and 25); otherwise, it's
-         * probably not Standard-encoded.
-         */
-        final List<Range> expectedAsciiRanges;
-        final FastqQualityFormat qualityFormat;
-
-        QualityScheme(final Range rawRange, final Range asciiRange, final List<Range> expectedAsciiRanges, final FastqQualityFormat qualityFormat) {
-            this.rawRange = rawRange;
-            this.asciiRange = asciiRange;
-            this.expectedAsciiRanges = expectedAsciiRanges;
-            this.qualityFormat = qualityFormat;
-        }
-    }
-
-    /**
-     * Collecting reads and their quality scores for later analysis.  Uses ASCII values since those are the inherently
-     * "raw-est", read unmodified from the file.
-     */
-    private static class QualityRecordAggregator {
-        private Set<Integer> observedAsciiQualities = new HashSet<Integer>();
-
-        public Set<Integer> getObservedAsciiQualities() {
-            return Collections.unmodifiableSet(observedAsciiQualities);
-        }
-
-        /**
-         * Adds the FastqRecord's quality scores.
-         */
-        public void add(final FastqRecord fastqRecord) {
-            addAsciiQuality(fastqRecord.getBaseQualityString().getBytes());
-        }
-
-        /**
-         * Adds the SAMRecord's quality scores.
-         * <p/>
-         * Does not assume Phred quality encoding (for obvious reasons); getBaseQualityString() is used to read the
-         * unmodified ASCII score.  To elaborate, the {@link SamReader}, which is generating these {@link SAMRecord}s, builds the
-         * SAMRecord by subtracting a value from each quality score and storing that transformed value internally.
-         * Since we desire original scores here (whatever was in the file to begin with), we effectively undo this
-         * transformation by asking {@link SAMRecord} to convert the quality back into the ASCII that was read in the file.
-         */
-        public void add(final SAMRecord samRecord, final boolean useOriginalQualities) {
-            addAsciiQuality(useOriginalQualities && samRecord.getOriginalBaseQualities() != null
-                    ? SAMUtils.phredToFastq(samRecord.getOriginalBaseQualities()).getBytes()
-                    : samRecord.getBaseQualityString().getBytes());
-        }
-
-        public void add(final SAMRecord samRecord) {
-            add(samRecord, false);
-        }
-
-        private void addAsciiQuality(final byte... asciiQualities) {
-            for (final byte asciiQuality : asciiQualities) {
-                observedAsciiQualities.add((int) asciiQuality);
-            }
-        }
-    }
-
-    /**
-     * Adds the provided reader's records to the detector.
-     *
-     * @return The number of records read
-     */
-    public long add(final long maxRecords, final FastqReader... readers) {
-        final Iterator<FastqRecord> iterator = generateInterleavedFastqIterator(readers);
-        long recordCount = 0;
-        while (iterator.hasNext() && recordCount++ != maxRecords) {
-            this.add(iterator.next());
-        }
-        log.debug(String.format("Read %s records from %s.", recordCount, Arrays.toString(readers)));
-        return recordCount;
-    }
-
-    /**
-     * Adds the provided reader's records to the detector.
-     *
-     * @return The number of records read
-     */
-    public long add(final long maxRecords, final SamReader reader) {
-        return add(maxRecords, reader.iterator());
-    }
-
-    /**
-     * Adds the provided iterator's records (optionally using the original qualities) to the detector.
-     *
-     * @return The number of records read
-     */
-    public long add(final long maxRecords, final CloseableIterator<SAMRecord> iterator, final boolean useOriginalQualities) {
-        long recordCount = 0;
-        try {
-            while (iterator.hasNext() && recordCount++ != maxRecords) {
-                this.add(iterator.next(), useOriginalQualities);
-            }
-
-            return recordCount;
-        } finally {
-            iterator.close();
-        }
-    }
-
-    public long add(final long maxRecords, final CloseableIterator<SAMRecord> iterator) {
-        return add(maxRecords, iterator, false);
-    }
-
-    /**
-     * Adds the provided record's qualities to the detector.
-     */
-    public void add(final FastqRecord fastqRecord) {
-        this.qualityAggregator.add(fastqRecord);
-    }
-
-    /**
-     * Adds the provided record's qualities to the detector.
-     */
-    public void add(final SAMRecord samRecord, final boolean useOriginalQualities) {
-        this.qualityAggregator.add(samRecord, useOriginalQualities);
-    }
-
-    public void add(final SAMRecord samRecord) {
-        this.add(samRecord, false);
-    }
-
-    /**
-     * Tests whether or not the detector can make a determination without guessing (i.e., if all but one quality format
-     * can be excluded using established exclusion conventions).
-     *
-     * @return True if more than one format is possible after exclusions; false otherwise
-     */
-    public boolean isDeterminationAmbiguous() {
-        return this.generateCandidateQualities(true).size() > 1;
-    }
-
-    /**
-     * Processes collected quality data and applies rules to determine which quality formats are possible.
-     * <p/>
-     * Specifically, for each format's known range of possible values (its "quality scheme"), exclude formats if any
-     * observed values fall outside of that range.  Additionally, exclude formats for which we expect to see at
-     * least one quality in a range of values, but do not.  (For example, for Phred, we expect to eventually see
-     * a value below 58.  If we never see such a value, we exclude Phred as a possible format unless the checkExpected
-     * flag is set to false in which case we leave Phred as a possible quality format.)
-     */
-    public EnumSet<FastqQualityFormat> generateCandidateQualities(final boolean checkExpected) {
-        final EnumSet<FastqQualityFormat> candidateFormats = EnumSet.allOf(FastqQualityFormat.class);
-        final Set<Integer> observedAsciiQualities = this.qualityAggregator.getObservedAsciiQualities();
-        if (observedAsciiQualities.isEmpty())
-            throw new SAMException("Cannot determine candidate qualities: no qualities found.");
-
-        for (final QualityScheme scheme : QualityScheme.values()) {
-            final Iterator<Integer> qualityBinIterator = observedAsciiQualities.iterator();
-            final Collection<Range> remainingExpectedValueRanges = new ArrayList<Range>(scheme.expectedAsciiRanges);
-            while (qualityBinIterator.hasNext()) {
-                final int quality = qualityBinIterator.next();
-                if (!scheme.asciiRange.contains(quality)) {
-                    candidateFormats.remove(scheme.qualityFormat);
-                }
-
-                final Iterator<Range> expectedValueRangeIterator = remainingExpectedValueRanges.iterator();
-                while (expectedValueRangeIterator.hasNext()) {
-                    if (expectedValueRangeIterator.next().contains(quality)) {
-                        expectedValueRangeIterator.remove();
-                    }
-                }
-            }
-
-            /**
-             * We remove elements from this list as we observe values in the corresponding range; if the list isn't
-             * empty, we haven't seen a value in that range.  In other words, we haven't seen a value we expected.
-             * Consequently, we remove the corresponding format from the running possibilities.
-             */
-            if (!remainingExpectedValueRanges.isEmpty() && checkExpected) {
-                candidateFormats.remove(scheme.qualityFormat);
-            }
-        }
-
-        return candidateFormats;
-    }
-
-    /**
-     * Interleaves FastqReader iterators so that serial-iteration of the result cycles between the constituent iterators.
-     */
-    private static Iterator<FastqRecord> generateInterleavedFastqIterator(final FastqReader... readers) {
-        return new Iterator<FastqRecord>() {
-            private Queue<Iterator<FastqRecord>> queue = new LinkedList<Iterator<FastqRecord>>();
-
-            {
-                for (final FastqReader reader : readers) {
-                    queue.add(reader.iterator());
-                }
-            }
-
-            public boolean hasNext() {
-                // If this returns true, the head of the queue will have a next element
-                while (!queue.isEmpty()) {
-                    if (queue.peek().hasNext()) {
-                        return true;
-                    }
-                    queue.poll();
-                }
-                return false;
-            }
-
-            public FastqRecord next() {
-                if (!hasNext()) throw new NoSuchElementException();
-                final Iterator<FastqRecord> i = queue.poll();
-                final FastqRecord result = i.next();
-                queue.offer(i);
-                return result;
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-
-    /**
-     * Reads through the records in the provided fastq reader and uses their quality scores to determine the quality
-     * format used in the fastq.
-     *
-     * @param readers    The fastq readers from which qualities are to be read; at least one must be provided
-     * @param maxRecords The maximum number of records to read from the reader before making a determination (a guess,
-     *                   so more records is better)
-     * @return The determined quality format
-     */
-    public static FastqQualityFormat detect(final long maxRecords, final FastqReader... readers) {
-        final QualityEncodingDetector detector = new QualityEncodingDetector();
-        final long recordCount = detector.add(maxRecords, readers);
-        log.debug(String.format("Read %s records from %s.", recordCount, Arrays.toString(readers)));
-        return detector.generateBestGuess(FileContext.FASTQ, null);
-    }
-
-    public static FastqQualityFormat detect(final FastqReader... readers) {
-        return detect(DEFAULT_MAX_RECORDS_TO_ITERATE, readers);
-    }
-
-    /**
-     * Reads through the records in the provided SAM reader and uses their quality scores to determine the quality
-     * format used in the SAM.
-     *
-     * @param iterator   The iterator from which SAM records are to be read
-     * @param maxRecords The maximum number of records to read from the reader before making a determination (a guess,
-     * @param useOriginalQualities whether to use the original qualities (if available) rather than the current ones
-     *                   so more records is better)
-     * @return The determined quality format
-     */
-    public static FastqQualityFormat detect(final long maxRecords, final CloseableIterator<SAMRecord> iterator, final boolean useOriginalQualities) {
-        final QualityEncodingDetector detector = new QualityEncodingDetector();
-        final long recordCount = detector.add(maxRecords, iterator, useOriginalQualities);
-        log.debug(String.format("Read %s records.", recordCount));
-        return detector.generateBestGuess(FileContext.SAM, null);
-
-    }
-
-    public static FastqQualityFormat detect(final long maxRecords, final CloseableIterator<SAMRecord> iterator) {
-        return detect(maxRecords, iterator, false);
-    }
-
-    public static FastqQualityFormat detect(final long maxRecords, final SamReader reader) {
-        return detect(maxRecords, reader.iterator());
-    }
-
-    public static FastqQualityFormat detect(final SamReader reader) {
-        return detect(DEFAULT_MAX_RECORDS_TO_ITERATE, reader);
-    }
-
-
-    /**
-     * Reads through the records in the provided SAM reader and uses their quality scores to sanity check the expected
-     * quality passed in. If the expected quality format is sane we just hand this back otherwise we throw a
-     * {@link SAMException}.
-     */
-    public static FastqQualityFormat detect(final SamReader reader, final FastqQualityFormat expectedQualityFormat) {
-        //sanity check expectedQuality
-        final QualityEncodingDetector detector = new QualityEncodingDetector();
-        final long recordCount = detector.add(DEFAULT_MAX_RECORDS_TO_ITERATE, reader.iterator());
-        log.debug(String.format("Read %s records from %s.", recordCount, reader));
-        return detector.generateBestGuess(FileContext.SAM, expectedQualityFormat);
-    }
-
-    /**
-     * Make the best guess at the quality format. If an expected quality is passed in the values are sanity checked
-     * (ignoring expected range) and if they are deemed acceptable the expected quality is passed back. Otherwise we use
-     * a set of heuristics to make our best guess.
-     */
-    public FastqQualityFormat generateBestGuess(final FileContext context, final FastqQualityFormat expectedQuality) {
-        final EnumSet<FastqQualityFormat> possibleFormats;
-        if (null != expectedQuality) {
-            possibleFormats = this.generateCandidateQualities(false);
-            if (possibleFormats.contains(expectedQuality)) {
-                return expectedQuality;
-            } else {
-                throw new SAMException(
-                        String.format("The quality values do not fall in the range appropriate for the expected quality of %s.",
-                                expectedQuality.name()));
-            }
-        } else {
-            possibleFormats = this.generateCandidateQualities(true);
-            switch (possibleFormats.size()) {
-                case 1:
-                    return possibleFormats.iterator().next();
-                case 2:
-                    if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Illumina, FastqQualityFormat.Solexa))) {
-                        return FastqQualityFormat.Illumina;
-                    } else if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Illumina, FastqQualityFormat.Standard))) {
-                        switch (context) {
-                            case FASTQ:
-                                return FastqQualityFormat.Illumina;
-                            case SAM:
-                                return FastqQualityFormat.Standard;
-                        }
-                    } else if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Standard, FastqQualityFormat.Solexa))) {
-                        return FastqQualityFormat.Standard;
-                    } else throw new SAMException("Unreachable code.");
-                case 3:
-                    throw new SAMException("The quality format cannot be determined: no formats were excluded.");
-                case 0:
-                    throw new SAMException("The quality format cannot be determined: all formats were excluded.");
-                default:
-                    throw new SAMException("Unreachable code.");
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/QualityUtil.java b/src/main/java/htsjdk/samtools/util/QualityUtil.java
deleted file mode 100644
index e9ad9ec..0000000
--- a/src/main/java/htsjdk/samtools/util/QualityUtil.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * Utility class for working with quality scores and error probabilities.
- *
- * @author Tim Fennell
- */
-public final class QualityUtil {
-    private static final double[] errorProbabilityByPhredScore;
-
-    static {
-        errorProbabilityByPhredScore = new double[101];
-        for (int i=0; i<errorProbabilityByPhredScore.length; ++i) {
-            errorProbabilityByPhredScore[i] = 1d/Math.pow(10d, i/10d);
-        }
-    }
-
-    /** Given a phred score between 0 and 100 returns the probability of error. */
-    public static double getErrorProbabilityFromPhredScore(final int i) {
-        return errorProbabilityByPhredScore[i];
-    }
-
-    /** Gets the phred score for any given probability of error. */
-    public static int getPhredScoreFromErrorProbability(final double probability) {
-        return (int) Math.round(-10 * Math.log10(probability));
-    }
-
-    /** Gets the phred score given the specified observations and errors. */
-    public static int getPhredScoreFromObsAndErrors(final double observations, final double errors) {
-        return getPhredScoreFromErrorProbability(errors / observations);
-    }
-
-    /**
-     * Calculates the sum of error probabilities for all read bases in the SAM record. Takes
-     * the SAM record as opposed to the qualities directly so that it can make sure to count
-     * no-calls as 1 instead of what the quality score says.
-     * */
-    public static double sumOfErrorProbabilities(final SAMRecord rec) {
-        final byte[] bases = rec.getReadBases();
-        final byte[] quals = rec.getBaseQualities();
-
-        double sum = 0;
-
-        for (int i=0; i<bases.length; ++i) {
-            if (SequenceUtil.isNoCall(bases[i])) ++sum;
-            else sum += QualityUtil.getErrorProbabilityFromPhredScore(quals[i]);
-        }
-
-        return sum;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ReferenceSequenceMask.java b/src/main/java/htsjdk/samtools/util/ReferenceSequenceMask.java
deleted file mode 100644
index 302825a..0000000
--- a/src/main/java/htsjdk/samtools/util/ReferenceSequenceMask.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Interface for specifying loci of interest for genotype calling and other operations.
- * It is a requirement that the sequences be probed in ascending order.
- *
- * @author alecw at broadinstitute dot oh are gee
- */
-public interface ReferenceSequenceMask {
-
-    /**
-     * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
-     * @return true if the mask is set for the given sequence and position
-     */
-    boolean get(int sequenceIndex, int position);
-
-    /**
-     * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
-     * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
-     */
-    int nextPosition(int sequenceIndex, int position);
-
-    /**
-     * @return Largest sequence index for which there are set bits.
-     */
-    int getMaxSequenceIndex();
-
-    /**
-     * @return the largest position on the last sequence index
-     */
-    int getMaxPosition();
-}
diff --git a/src/main/java/htsjdk/samtools/util/RelativeIso8601Date.java b/src/main/java/htsjdk/samtools/util/RelativeIso8601Date.java
deleted file mode 100644
index ebcb44f..0000000
--- a/src/main/java/htsjdk/samtools/util/RelativeIso8601Date.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package htsjdk.samtools.util;
-
-import java.util.Date;
-
-/**
- * Like {@link Iso8601Date}, but also comes in a "lazy now" flavor.
- * <p/>
- * When "lazy now" mode is enabled, this instance's date value is undefined until the first time it is queried, at which time it is set to
- * {@link System#currentTimeMillis()}.  This value is returned on subsequent queries, so it is consistent.
- * <p/>
- * The "lazy state" is conveyed via {@link #toString()}.  A "lazy now" instance will answer {@link #toString()} with
- * {@link #LAZY_NOW_LABEL} if the time has not yet been queried/set, or a {@link Iso8601Date}-formatted date of the query time if it
- * has been queried.  This characteristic is useful for serialization and persistence purposes.
- * <p/>
- * Consumers can create "lazy now" instances via the {@link #generateLazyNowInstance()} factory method or by passing {@link #LAZY_NOW_LABEL} to
- * {@link #RelativeIso8601Date(String)}.
- *
- * @author mccowan
- */
-public class RelativeIso8601Date extends Iso8601Date {
-
-    public static final String LAZY_NOW_LABEL = "NOW";
-
-    /** Flag that indicates this instance is lazy and has not yet been queried (and so its value should be updated at the next query). */
-    private boolean doSetTimeNextQuery = false;
-
-    /** Returns a "lazy now" instance. */
-    public static RelativeIso8601Date generateLazyNowInstance() {
-        return new RelativeIso8601Date(LAZY_NOW_LABEL);
-    }
-
-    public RelativeIso8601Date(final Date date) {
-        super(date);
-        doSetTimeNextQuery = false;
-    }
-
-    public RelativeIso8601Date(final String dateStr) {
-        /**
-         * We must pass a date parsable {@link Iso8601Date#Iso8601Date(String)}; we will never actually read the passed value, so it doesn't
-         * matter what it is.
-         */
-        super(LAZY_NOW_LABEL.equals(dateStr) ? new Iso8601Date(new Date()).toString() : dateStr);
-        doSetTimeNextQuery = LAZY_NOW_LABEL.equals(dateStr);
-    }
-
-    /** Updates the time stored by this instance if it's a "lazy now" instance and has never been stored. */
-    private synchronized void conditionallyUpdateTime() {
-        if (doSetTimeNextQuery) {
-            super.setTime(System.currentTimeMillis());
-            doSetTimeNextQuery = false;
-        }
-    }
-
-    /**
-     * Returns a {@link String} representation of this date.
-     *
-     * @return An {@link Iso8601Date}-formatted string, or the value of {@link #LAZY_NOW_LABEL} if this is a "lazy now" instance.
-     */
-    @Override
-    public String toString() {
-        return doSetTimeNextQuery ? LAZY_NOW_LABEL : super.toString();
-    }
-
-    @Override
-    public long getTime() {
-        conditionallyUpdateTime();
-        return super.getTime();
-    }
-
-    @Override
-    public boolean after(final Date when) {
-        conditionallyUpdateTime();
-        return super.after(when);
-    }
-
-    @Override
-    public boolean before(final Date when) {
-        conditionallyUpdateTime();
-        return super.before(when);
-    }
-
-    @Override
-    public Object clone() {
-        conditionallyUpdateTime();
-        return super.clone();
-    }
-
-    @Override
-    public int compareTo(final Date anotherDate) {
-        conditionallyUpdateTime();
-        return super.compareTo(anotherDate);
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        conditionallyUpdateTime();
-        return super.equals(obj);
-    }
-
-    @Override
-    @Deprecated
-    public int getDate() {
-        conditionallyUpdateTime();
-        return super.getDate();
-    }
-
-    @Override
-    @Deprecated
-    public int getDay() {
-        conditionallyUpdateTime();
-        return super.getDay();
-    }
-
-    @Override
-    @Deprecated
-    public int getHours() {
-        conditionallyUpdateTime();
-        return super.getHours();
-    }
-
-    @Override
-    @Deprecated
-    public int getMinutes() {
-        conditionallyUpdateTime();
-        return super.getMinutes();
-    }
-
-    @Override
-    @Deprecated
-    public int getMonth() {
-        conditionallyUpdateTime();
-        return super.getMonth();
-    }
-
-    @Override
-    @Deprecated
-    public int getSeconds() {
-        conditionallyUpdateTime();
-        return super.getSeconds();
-    }
-
-    @Override
-    @Deprecated
-    public int getTimezoneOffset() {
-        conditionallyUpdateTime();
-        return super.getTimezoneOffset();
-    }
-
-    @Override
-    @Deprecated
-    public int getYear() {
-        conditionallyUpdateTime();
-        return super.getYear();
-    }
-
-    @Override
-    public int hashCode() {
-        conditionallyUpdateTime();
-        return super.hashCode();
-    }
-
-    @Override
-    @Deprecated
-    public void setDate(final int date) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setHours(final int hours) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setMinutes(final int minutes) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setMonth(final int month) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setSeconds(final int seconds) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setTime(final long time) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @Deprecated
-    public void setYear(final int year) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ResourceLimitedMap.java b/src/main/java/htsjdk/samtools/util/ResourceLimitedMap.java
deleted file mode 100644
index 51f91da..0000000
--- a/src/main/java/htsjdk/samtools/util/ResourceLimitedMap.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * LRU collection class for managing objects that place some resource burden such that not too many of them
- * can existing in the VM at one time, but they can be reconstructed ias necessary.
- * Original motivation was for an LRU cache of FileOutputStreams.
- *
- * @author alecw at broadinstitute.org
- */
-public class ResourceLimitedMap<Key, Value> {
-    private static final float   hashTableLoadFactor = 0.75f;
-
-    private final LinkedHashMap<Key,Value> map;
-    private final int cacheSize;
-    private final ResourceLimitedMapFunctor<Key, Value> functor;
-
-    /**
-     * Create LRU cache
-     * @param cacheSize Max number of objects to be stored in the cache.
-     * @param functor Encapsulates methods for creating a new object if it isn't in the cache, and
-     * for finalizing an object that is getting LRU'ed out of the cache.
-     */
-    public ResourceLimitedMap(final int cacheSize, final ResourceLimitedMapFunctor<Key, Value> functor) {
-        this.cacheSize = cacheSize;
-        this.functor = functor;
-        // Make hash table big enough so that it never gets resized.
-        final int hashTableCapacity = (int)Math.ceil(cacheSize / hashTableLoadFactor) + 1;
-
-        // Created LinkedHashMap in LRU mode
-        map = new LinkedHashMap<Key,Value>(hashTableCapacity, hashTableLoadFactor, true) {
-            @Override protected boolean removeEldestEntry (final Map.Entry<Key,Value> eldest) {
-               if (size() > ResourceLimitedMap.this.cacheSize) {
-                   ResourceLimitedMap.this.functor.finalizeValue(eldest.getKey(), eldest.getValue());
-                   return true;
-               } else {
-                   return false;
-               }
-            }
-        };
-    }
-
-    /**
-     * Return an existing value, or create a new one if necessary.  If creating a new one and the
-     * cache is full, the eldest object is pushed out of the cache.
-     * @param key Key of desired value.
-     * @return Either existing value, or new value created from key and inserted into map.
-     */
-    public Value get(final Key key) {
-        if (!map.containsKey(key)) {
-            map.put(key, functor.makeValue(key));
-        }
-        return map.get(key);
-    }
-
-    public Value remove(final Key key) {
-        return map.remove(key);
-    }
-
-    /**
-     * Determine if the map contains the given key.  Note that even if the map does not contain
-     * the key, get(key) will return a value, because one will be created.
-     * @param key
-     * @return true if the map currently contains the given key.  It is unknown whether the map
-     * may have contained the key in the past.
-     */
-    public boolean containsKey(final Key key) {
-        return map.containsKey(key);
-    }
-
-    /**
-     * Remove all the values from the map, and call functory.finalizeValue() on each of them.
-     */
-    public void finalizeAll() {
-        for (final Map.Entry<Key, Value> entry : map.entrySet()) {
-            functor.finalizeValue(entry.getKey(), entry.getValue());
-        }
-        map.clear();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ResourceLimitedMapFunctor.java b/src/main/java/htsjdk/samtools/util/ResourceLimitedMapFunctor.java
deleted file mode 100644
index 6ca8031..0000000
--- a/src/main/java/htsjdk/samtools/util/ResourceLimitedMapFunctor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * c.f. ResourceLimitedMap for details.
- * @param <Key> Used to find and create value.
- * @param <Value> Type stored in ResourceLimitedMap, which is created as necessary
- * and finalized when it is the least-recently used.
- */
-public interface ResourceLimitedMapFunctor<Key, Value> {
-
-    /**
-     * Create a new value corresponding to the key
-     * @param key
-     * @return a new value corresponding to the key
-     */
-    Value makeValue(final Key key);
-
-    /**
-     * Clean up an existing value in conjunction with removing from ResourceLimitedMap.
-     * @param key
-     * @param value
-     */
-    void finalizeValue(final Key key, final Value value);
-}
diff --git a/src/main/java/htsjdk/samtools/util/RuntimeEOFException.java b/src/main/java/htsjdk/samtools/util/RuntimeEOFException.java
deleted file mode 100644
index 2e80fa6..0000000
--- a/src/main/java/htsjdk/samtools/util/RuntimeEOFException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-/**
- * Thrown by various codecs to indicate EOF without having to clutter the API with throws clauses
- */
-public class RuntimeEOFException extends SAMException {
-    public RuntimeEOFException() {
-    }
-
-    public RuntimeEOFException(final String s) {
-        super(s);
-    }
-
-    public RuntimeEOFException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public RuntimeEOFException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/RuntimeIOException.java b/src/main/java/htsjdk/samtools/util/RuntimeIOException.java
deleted file mode 100644
index 571571b..0000000
--- a/src/main/java/htsjdk/samtools/util/RuntimeIOException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-/**
- * Thrown by various IO classes to indicate IOException without having to clutter the API with throws clauses
- */
-public class RuntimeIOException extends SAMException {
-    public RuntimeIOException() {
-    }
-
-    public RuntimeIOException(final String s) {
-        super(s);
-    }
-
-    public RuntimeIOException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public RuntimeIOException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/RuntimeScriptException.java b/src/main/java/htsjdk/samtools/util/RuntimeScriptException.java
deleted file mode 100644
index 570a64e..0000000
--- a/src/main/java/htsjdk/samtools/util/RuntimeScriptException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Pierre Lindenbaum PhD @yokofakun
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-
-/**
- * Thrown by classes handling script engines like the javascript-based filters for SAM/VCF
- */
-public class RuntimeScriptException extends RuntimeException {
-    public RuntimeScriptException() {
-    }
-
-    public RuntimeScriptException(final String s) {
-        super(s);
-    }
-
-    public RuntimeScriptException(final String s, final Throwable throwable) {
-        super(s, throwable);
-    }
-
-    public RuntimeScriptException(final Throwable throwable) {
-        super(throwable);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SamLocusIterator.java b/src/main/java/htsjdk/samtools/util/SamLocusIterator.java
deleted file mode 100644
index 7a60756..0000000
--- a/src/main/java/htsjdk/samtools/util/SamLocusIterator.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.AlignmentBlock;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SamReader;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Iterator that traverses a SAM File, accumulating information on a per-locus basis.
- * Optionally takes a target interval list, in which case the loci returned are the ones covered by
- * the interval list.  If no target interval list, whatever loci are covered by the input reads are returned.
- * By default duplicate reads and non-primary alignments are filtered out.  Filtering may be changed
- * via setSamFilters().
- *
- * @author alecw at broadinstitute.org
- */
-
-public class SamLocusIterator extends AbstractLocusIterator<SamLocusIterator.RecordAndOffset, SamLocusIterator.LocusInfo> {
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments.  Do not use
-     * BAM index even if available.
-     *
-     * @param samReader must be coordinate sorted
-     */
-    public SamLocusIterator(final SamReader samReader) {
-        this(samReader, null);
-    }
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments.  Do not use
-     * BAM index even if available.
-     *
-     * @param samReader    must be coordinate sorted
-     * @param intervalList Either the list of desired intervals, or null.  Note that if an intervalList is
-     *                     passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
-     */
-    public SamLocusIterator(final SamReader samReader, final IntervalList intervalList) {
-        this(samReader, intervalList, samReader.hasIndex());
-    }
-
-    /**
-     * Prepare to iterate through the given SAM records, skipping non-primary alignments
-     *
-     * @param samReader    must be coordinate sorted
-     * @param intervalList Either the list of desired intervals, or null.  Note that if an intervalList is
-     *                     passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
-     * @param useIndex     If true, do indexed lookup to improve performance.  Not relevant if intervalList == null.
-     *                     It is no longer the case the useIndex==true can make performance worse.  It should always perform at least
-     *                     as well as useIndex==false, and generally will be much faster.
-     */
-    public SamLocusIterator(final SamReader samReader, final IntervalList intervalList, final boolean useIndex) {
-        super(samReader, intervalList, useIndex);
-    }
-
-    /**
-     * Capture the loci covered by the given SAMRecord in the LocusInfos in the accumulator,
-     * creating new LocusInfos as needed. RecordAndOffset object are created for each aligned base of
-     * <code>SAMRecord</code>.
-     *
-     * @param rec SAMRecord to process and add to <code>LocusInfo</code>
-     */
-    @Override
-    void accumulateSamRecord(final SAMRecord rec) {
-        // get the accumulator offset
-        int accOffset = getAccumulatorOffset(rec);
-
-        final int minQuality = getQualityScoreCutoff();
-        final boolean dontCheckQualities = minQuality == 0;
-        final byte[] baseQualities = dontCheckQualities ? null : rec.getBaseQualities();
-
-        // interpret the CIGAR string and add the base info
-        for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
-            final int readStart = alignmentBlock.getReadStart();
-            final int refStart = alignmentBlock.getReferenceStart();
-            final int blockLength = alignmentBlock.getLength();
-
-            for (int i = 0; i < blockLength; ++i) {
-                // 0-based offset into the read of the current base
-                final int readOffset = readStart + i - 1;
-
-                // if the quality score cutoff is met, accumulate the base info
-                if (dontCheckQualities || baseQualities.length == 0 || baseQualities[readOffset] >= minQuality) {
-                    // 0-based offset from the aligned position of the first base in the read to the aligned position of the current base.
-                    final int refOffset = refStart + i - accOffset;
-                    accumulator.get(refOffset).add(new RecordAndOffset(rec, readOffset));
-                }
-            }
-        }
-    }
-
-    /**
-     * Requires that the accumulator for the record is previously fill with
-     * {@link #accumulateSamRecord(htsjdk.samtools.SAMRecord)}.
-     * Include in the LocusInfo the indels; the quality threshold does not affect insertions/deletions
-     */
-    @Override
-    void accumulateIndels(SAMRecord rec) {
-        // get the cigar elements
-        final List<CigarElement> cigar = rec.getCigar().getCigarElements();
-        // 0-based offset into the read of the current base
-        int readBase = 0;
-        // 0-based offset for the reference of the current base
-        // the accumulator could have the previous position because an indel is accumulating
-        int refBase = rec.getAlignmentStart() - getAccumulatorOffset(rec);
-        // iterate over the cigar element
-        for (int elementIndex = 0; elementIndex < cigar.size(); elementIndex++) {
-            final CigarElement e = cigar.get(elementIndex);
-            final CigarOperator operator = e.getOperator();
-            if (operator.equals(CigarOperator.I)) {
-                System.err.println("");
-                // insertions are included in the previous base
-                accumulator.get(refBase - 1).addInserted(rec, readBase);
-                readBase += e.getLength();
-            } else if (operator.equals(CigarOperator.D)) {
-                // accumulate for each position that spans the deletion
-                for (int i = 0; i < e.getLength(); i++) {
-                    // the offset is the one for the previous base
-                    accumulator.get(refBase + i).addDeleted(rec, readBase - 1);
-                }
-                refBase += e.getLength();
-            } else {
-                if (operator.consumesReadBases()) readBase += e.getLength();
-                if (operator.consumesReferenceBases()) refBase += e.getLength();
-            }
-        }
-    }
-
-    /**
-     * Ensure that the queue is populated and get the accumulator offset for the current record
-     */
-    private int getAccumulatorOffset(SAMRecord rec) {
-        final SAMSequenceRecord ref = getReferenceSequence(rec.getReferenceIndex());
-        final int alignmentStart = rec.getAlignmentStart();
-        final int alignmentEnd = rec.getAlignmentEnd();
-        final int alignmentLength = alignmentEnd - alignmentStart;
-        // get the offset for an insertion if we are tracking them
-        final int insOffset = (includeIndels && startWithInsertion(rec.getCigar())) ? 1 : 0;
-        // if there is an insertion in the first base and it is not tracked in the accumulator, add it
-        if (insOffset == 1 && accumulator.isEmpty()) {
-            accumulator.add(new LocusInfo(ref, alignmentStart - 1));
-        }
-        // Ensure there are LocusInfos up to and including this position
-        for (int i = accumulator.size(); i <= alignmentLength + insOffset; ++i) {
-            accumulator.add(new LocusInfo(ref, alignmentStart + i - insOffset));
-        }
-        return alignmentStart - insOffset;
-    }
-
-
-    /**
-     * @param rec        aligned SamRecord
-     * @param readOffset offset from start of read
-     * @param length     1, as object represents only one aligned base
-     * @param refPos     -1,  as this filed isn't used for this implementation
-     * @param type       null for this implementation
-     * @return created RecordAndOffset
-     */
-    @Override
-    RecordAndOffset createRecordAndOffset(SAMRecord rec, int readOffset, int length, int refPos) {
-        return new RecordAndOffset(rec, readOffset);
-    }
-
-    /**
-     * @param referenceSequence processed reference sequence
-     * @param lastPosition      last processed reference locus position
-     * @return <code>LocusInfo<T></code> for the lastPosition
-     */
-    @Override
-    LocusInfo createLocusInfo(SAMSequenceRecord referenceSequence, int lastPosition) {
-        return new LocusInfo(referenceSequence, lastPosition);
-    }
-
-    // --------------------------------------------------------------------------------------------
-    // Helper methods below this point...
-    // --------------------------------------------------------------------------------------------
-
-    /**
-     * Implementation of <code>AbstractRecordAndOffset</code> class for <code>SamLocusIterator</code>.
-     * One object represents one aligned base of inner <code>SAMRecord</code>.
-     */
-    public static class RecordAndOffset extends AbstractRecordAndOffset {
-
-        /**
-         * @param record inner <code>SAMRecord</code>
-         * @param offset 0-based offset from the start of <code>SAMRecord</code>
-         */
-        public RecordAndOffset(final SAMRecord record, final int offset) {
-            super(record, offset);
-        }
-    }
-
-    /**
-     * The unit of iteration.  Holds information about the locus (the SAMSequenceRecord and 1-based position
-     * on the reference), plus List of ReadAndOffset objects, one for each read that overlaps the locus;
-     * two more List_s_ of ReadAndOffset objects include reads that overlap the locus with insertions and deletions
-     * respectively
-     */
-    public static final class LocusInfo extends AbstractLocusInfo<RecordAndOffset> {
-
-        private List<RecordAndOffset> deletedInRecord = null;
-        private List<RecordAndOffset> insertedInRecord = null;
-
-        /**
-         * @param referenceSequence reference sequence at which the reads are aligned
-         * @param position          position in the sequence at which the reads are aligned
-         */
-        public LocusInfo(SAMSequenceRecord referenceSequence, int position) {
-            super(referenceSequence, position);
-        }
-
-        /**
-         * Accumulate info for one read with a deletion
-         */
-        public void addDeleted(final SAMRecord read, int previousPosition) {
-            if (deletedInRecord == null) {
-                deletedInRecord = new ArrayList<>();
-            }
-            deletedInRecord.add(new RecordAndOffset(read, previousPosition));
-        }
-
-        /**
-         * Accumulate info for one read with an insertion.
-         * For this locus, the reads in the insertion are included also in recordAndOffsets
-         */
-
-        public void addInserted(final SAMRecord read, int firstPosition) {
-
-            if (insertedInRecord == null) {
-                insertedInRecord = new ArrayList<>();
-            }
-            insertedInRecord.add(new RecordAndOffset(read, firstPosition));
-        }
-
-        public List<RecordAndOffset> getDeletedInRecord() {
-            return (deletedInRecord == null) ? Collections.emptyList() : Collections.unmodifiableList(deletedInRecord);
-        }
-
-        public List<RecordAndOffset> getInsertedInRecord() {
-            return (insertedInRecord == null) ? Collections.emptyList() : Collections.unmodifiableList(insertedInRecord);
-        }
-        
-        /** 
-         * @return the number of records overlapping the position, with deletions included if they are being tracked. 
-         */
-        @Override
-        public int size() { 
-            return super.size() + ((deletedInRecord == null) ? 0 : deletedInRecord.size()); 
-        }
-
-
-        /**
-         * @return <code>true</code> if all the RecordAndOffset lists are empty;
-         * <code>false</code> if at least one have records
-         */
-        @Override
-        public boolean isEmpty() {
-            return getRecordAndPositions().isEmpty() &&
-                    (deletedInRecord == null || deletedInRecord.isEmpty()) &&
-                    (insertedInRecord == null || insertedInRecord.isEmpty());
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SamRecordIntervalIteratorFactory.java b/src/main/java/htsjdk/samtools/util/SamRecordIntervalIteratorFactory.java
deleted file mode 100644
index 5d173a5..0000000
--- a/src/main/java/htsjdk/samtools/util/SamRecordIntervalIteratorFactory.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.QueryInterval;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.filter.IntervalFilter;
-import htsjdk.samtools.filter.SamRecordFilter;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * Create an iterator over a {@link SamReader} that only returns reads that overlap one of the intervals
- * in an interval list.
- *
- * @author alecw at broadinstitute.org
- */
-public class SamRecordIntervalIteratorFactory {
-
-    /**
-     * @param samReader
-     * @param uniqueIntervals list of intervals of interest, with overlaps merged, in coordinate order
-     * @param useIndex        if false, do not use a BAM index even if it is present.
-     * @return an iterator that will be filtered so that only SAMRecords overlapping the intervals
-     * in uniqueIntervals will be returned.  If a BAM index is available, it will be used to improve performance.
-     * Note however that if there are many intervals that cover a great deal of the genome, using the BAM
-     * index may actually make performance worse.
-     */
-    public CloseableIterator<SAMRecord> makeSamRecordIntervalIterator(final SamReader samReader,
-                                                                      final List<Interval> uniqueIntervals,
-                                                                      final boolean useIndex) {
-        if (!samReader.hasIndex() || !useIndex) {
-            final int stopAfterSequence;
-            final int stopAfterPosition;
-            if (uniqueIntervals.isEmpty()) {
-                stopAfterSequence = -1;
-                stopAfterPosition = -1;
-            } else {
-                final Interval lastInterval = uniqueIntervals.get(uniqueIntervals.size() - 1);
-                stopAfterSequence = samReader.getFileHeader().getSequenceIndex(lastInterval.getContig());
-                stopAfterPosition = lastInterval.getEnd();
-            }
-            final IntervalFilter intervalFilter = new IntervalFilter(uniqueIntervals, samReader.getFileHeader());
-            return new StopAfterFilteringIterator(samReader.iterator(), intervalFilter, stopAfterSequence, stopAfterPosition);
-        } else {
-            final QueryInterval[] queryIntervals = new QueryInterval[uniqueIntervals.size()];
-            for (int i = 0; i < queryIntervals.length; ++i) {
-                final Interval inputInterval = uniqueIntervals.get(i);
-                queryIntervals[i] = new QueryInterval(samReader.getFileHeader().getSequenceIndex(inputInterval.getContig()),
-                        inputInterval.getStart(), inputInterval.getEnd());
-            }
-            return samReader.queryOverlapping(queryIntervals);
-        }
-    }
-
-    /**
-     * Halt iteration after a read is encountered that starts after the given sequence and position.
-     * Note that most of this code is copied from FilteringSamIterator.  It would be nice just to override getNextRecord,
-     * but that method is called FilteringSamIterator ctor, so the stopAfter members can't be initialized before
-     * it is called.
-     * FilteringSamIterator ctor could take a boolean "advance" that would tell it whether or not to call getNextRecord
-     * in the ctor, so that it could be delayed in the subclass.  If this pattern happens again, we should do that.
-     */
-    private class StopAfterFilteringIterator implements CloseableIterator<SAMRecord> {
-        private final int stopAfterSequence;
-        private final int stopAfterPosition;
-        private final Iterator<SAMRecord> iterator;
-        private final SamRecordFilter filter;
-        private SAMRecord next = null;
-
-        private StopAfterFilteringIterator(Iterator<SAMRecord> iterator, SamRecordFilter filter,
-                                           int stopAfterSequence, int stopAfterPosition) {
-            this.stopAfterSequence = stopAfterSequence;
-            this.stopAfterPosition = stopAfterPosition;
-            this.iterator = iterator;
-            this.filter = filter;
-            next = getNextRecord();
-        }
-
-
-        /**
-         * Returns true if the iteration has more elements.
-         *
-         * @return true if the iteration has more elements.  Otherwise returns false.
-         */
-        public boolean hasNext() {
-            return next != null;
-        }
-
-        /**
-         * Returns the next element in the iteration.
-         *
-         * @return the next element in the iteration
-         * @throws java.util.NoSuchElementException
-         */
-        public SAMRecord next() {
-            if (next == null) {
-                throw new NoSuchElementException("Iterator has no more elements.");
-            }
-            final SAMRecord result = next;
-            next = getNextRecord();
-            return result;
-        }
-
-        /**
-         * Required method for Iterator API.
-         *
-         * @throws UnsupportedOperationException
-         */
-        public void remove() {
-            throw new UnsupportedOperationException("Remove() not supported by FilteringSamIterator");
-        }
-
-        public void close() {
-            CloserUtil.close(iterator);
-        }
-
-        protected SAMRecord getNextRecord() {
-            while (iterator.hasNext()) {
-                SAMRecord record = iterator.next();
-                if (record.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return null;
-                else if (record.getReferenceIndex() > stopAfterSequence) return null;
-                else if (record.getReferenceIndex() == stopAfterSequence && record.getAlignmentStart() > stopAfterPosition) {
-                    return null;
-                }
-                if (!filter.filterOut(record)) {
-                    return record;
-                }
-            }
-            return null;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SamRecordTrackingBuffer.java b/src/main/java/htsjdk/samtools/util/SamRecordTrackingBuffer.java
deleted file mode 100644
index 46cf8bf..0000000
--- a/src/main/java/htsjdk/samtools/util/SamRecordTrackingBuffer.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.BAMRecordCodec;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-
-import java.io.File;
-import java.util.ArrayDeque;
-import java.util.BitSet;
-import java.util.Deque;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * This class stores SAMRecords for return.  The purpose of this class is to buffer records that need to be modified or processed in some
- * fashion, and only return (or emit) them when they have been recorded as being fully examined.  If we have too many records in RAM,
- * we can spill over to disk.  The order in which they are given (via SamRecordWithOrdinal) determines their order of being returned.  It is the
- * responsibility of the user of this class to make sure all records have unique index and are added in order.
- *
- * When a record is examined, we also store a result state.  This is currently a boolean to reduce on memory and disk footprint.
- *
- * We store groups of records in blocks and the size of these blocks can be controlled.  If we have too many records in RAM, we start
- * spilling blocks to disk.
- *
- * Users should check isEmpty() to see if any records are still being tracked.  If so, they should check canEmit() to see if the
- * next record can be returned.  If so, they can call next() to get that record.
- *
- * When users are done with this structure, call close().
- *
- * @author bradtaylor
- */
-public class SamRecordTrackingBuffer<T extends SamRecordWithOrdinal> {
-    private int availableRecordsInMemory; // how many more records can we store in memory
-    private final int blockSize; // the size of each block
-    private final List<File> tmpDirs; // the list of temporary directories to use
-    private long queueHeadRecordIndex; // the index of the head of the buffer
-    private long queueTailRecordIndex; // the index of the tail of the buffer
-    private final Deque<BufferBlock> blocks; // the queue of blocks, in which records are contained
-    private final SAMFileHeader header;
-
-    private final Class<T> clazz; // the class to create
-
-    /**
-     * @param maxRecordsInRam how many records to buffer before spilling to disk
-     * @param blockSize the number of records in a given block
-     * @param tmpDirs the temporary directories to use when spilling to disk
-     * @param header the header
-     * @param clazz the class that extends SamRecordWithOrdinal
-     */
-    public SamRecordTrackingBuffer(final int maxRecordsInRam, final int blockSize, final List<File> tmpDirs, final SAMFileHeader header, final Class<T> clazz) {
-        this.availableRecordsInMemory = maxRecordsInRam;
-        this.blockSize = blockSize;
-        this.tmpDirs = tmpDirs;
-        this.queueHeadRecordIndex = -1;
-        this.queueTailRecordIndex = -1;
-        this.blocks = new ArrayDeque<BufferBlock>();
-        this.header = header;
-        this.clazz = clazz;
-    }
-
-    /** Returns true if we are tracking no records, false otherwise */
-    public boolean isEmpty() { return (blocks.isEmpty() || this.blocks.getFirst().isEmpty()); }
-
-    /** Returns true if we can return the next record (it has been examined). */
-    public boolean canEmit() { return (!this.blocks.isEmpty() && this.blocks.getFirst().canEmit()); }
-
-    /**
-     * Add the given SAMRecordIndex to the buffer.  The records must be added in order.
-     * @param samRecordWithOrdinal The samRecordWithOrdinal to be added
-     */
-    public void add(final SamRecordWithOrdinal samRecordWithOrdinal) {
-        if (this.isEmpty()) {
-            this.queueHeadRecordIndex = samRecordWithOrdinal.getRecordOrdinal();
-            this.queueTailRecordIndex = samRecordWithOrdinal.getRecordOrdinal() - 1;
-        }
-        this.queueTailRecordIndex++;
-        if (samRecordWithOrdinal.getRecordOrdinal() != this.queueTailRecordIndex) {
-            throw new SAMException("The records were added out of order");
-        }
-        // If necessary, create a new block, using as much ram as available up to its total size
-        if (this.blocks.isEmpty() || !this.blocks.getLast().canAdd()) {
-            // once ram is given to a block, we can't give it to another block (until some is recovered from the head of the queue)
-            final int blockRam = Math.min(this.blockSize, this.availableRecordsInMemory);
-            this.availableRecordsInMemory = this.availableRecordsInMemory - blockRam;
-            final BufferBlock block = new BufferBlock(this.blockSize, blockRam, this.tmpDirs, this.header, samRecordWithOrdinal.getRecordOrdinal());
-            this.blocks.addLast(block);
-        }
-        this.blocks.getLast().add(samRecordWithOrdinal);
-    }
-
-    /**
-     * Returns the next element in the iteration.
-     *
-     * @return The next element in the iteration.
-     * @throws java.util.NoSuchElementException if the buffer is empty.
-     * @throws SAMException if the buffer is not competent to emit (canEmit returns false)
-     */
-    public SamRecordWithOrdinal next() {
-        if (this.isEmpty())
-            throw new NoSuchElementException("Attempting to remove an element from an empty SamRecordTrackingBuffer");
-        final BufferBlock headBlock = this.blocks.getFirst();
-        if (!headBlock.canEmit())
-            throw new SAMException("Attempting to get a samRecordWithOrdinal from the SamRecordTrackingBuffer that has not been through " +
-                    "marked as examined. canEmit() must return true in order to call next()");
-
-        // If the samRecordWithOrdinal was stored in memory, reclaim its ram for use in additional blocks at tail of queue
-        // NB: this must be checked before calling next(), as that method updates the block-head
-        if (!headBlock.headRecordIsFromDisk()) {
-            this.availableRecordsInMemory++;
-        }
-        final SamRecordWithOrdinal samRecordWithOrdinal = headBlock.next();
-        if (headBlock.hasBeenDrained()) {
-            blocks.poll(); // remove the block as it is now empty
-            headBlock.clear(); // free any disk io resources associated with empty block
-        }
-        this.queueHeadRecordIndex++;
-        return samRecordWithOrdinal;
-    }
-
-    /** Removes the next record from this buffer */
-    public void remove() { this.next(); }
-
-    /**
-     * Return the total number of elements in the queue, both in memory and on disk
-     */
-    public long size() { return this.queueTailRecordIndex - this.queueHeadRecordIndex + 1; }
-
-    /** Returns the block that holds the sam record at the given index, null if no such block exists */
-    private BufferBlock getBlock(final SamRecordWithOrdinal samRecordWithOrdinal) {
-        for (final BufferBlock block : this.blocks) {
-            if (block.getStartIndex() <= samRecordWithOrdinal.getRecordOrdinal() && block.getEndIndex() >= samRecordWithOrdinal.getRecordOrdinal()) {
-                return block;
-            }
-        }
-        return null;
-    }
-
-    /** Returns true if this buffer contains the record at the given index, false otherwise */
-    public boolean contains(final SamRecordWithOrdinal samRecordWithOrdinal) {
-        return (null != getBlock(samRecordWithOrdinal));
-    }
-
-    /**
-     * Mark the current samRecordWithOrdinal as having been examined.
-     *
-     * @param samRecordWithOrdinal The samRecordWithOrdinal to be marked
-     * @param resultState Boolean flag indicating the result of the examination of this record.
-     * @throws SAMException if the provided recordIndex is not found within the SamRecordTrackingBuffer
-     */
-    public void setResultState(final SamRecordWithOrdinal samRecordWithOrdinal, final boolean resultState) {
-        final BufferBlock block = getBlock(samRecordWithOrdinal);
-        if (null == block) {
-            throw new SAMException("Attempted to set examined information on a samRecordWithOrdinal whose index is not found " +
-                    "in the SamRecordTrackingBuffer. recordIndex: " + samRecordWithOrdinal.getRecordOrdinal());
-        }
-        block.setResultState(samRecordWithOrdinal, resultState);
-    }
-
-    /**
-     * Close IO resources associated with each underlying BufferBlock
-     */
-    public void close() {
-        while (!blocks.isEmpty()) {
-            final BufferBlock block = blocks.pollFirst();
-            block.clear();
-        }
-    }
-
-    /**
-     * This stores blocks of records, either in memory or on disk, or both!
-     */
-    private class BufferBlock {
-        private final DiskBackedQueue<SAMRecord> recordsQueue;
-        private final int maxBlockSize;
-        private long currentStartIndex;
-        private final long originalStartIndex;
-        private long endIndex;
-
-        private final BitSet wasExaminedIndexes;
-        private final BitSet resultStateIndexes;
-
-        /** Creates an empty block buffer, with an allowable # of records in RAM */
-        public BufferBlock(final int maxBlockSize, final int maxBlockRecordsInMemory, final List<File> tmpDirs,
-                           final SAMFileHeader header,
-                           final long originalStartIndex) {
-            this.recordsQueue = DiskBackedQueue.newInstance(new BAMRecordCodec(header), maxBlockRecordsInMemory, tmpDirs);
-            this.maxBlockSize = maxBlockSize;
-            this.currentStartIndex = 0;
-            this.endIndex = -1;
-            this.wasExaminedIndexes = new BitSet(maxBlockSize);
-            this.resultStateIndexes = new BitSet(maxBlockSize);
-            this.originalStartIndex = originalStartIndex;
-        }
-
-        /**
-         * Check that the tail of the block has not grown past the maximum block size (even if records were popped) and that the underlying queue can be added to.
-         * TODO - reimplement with a circular byte array buffer PROVIDED RECORDS ARE IN MEMORY
-         * @return
-         */
-        public boolean canAdd() { return (this.endIndex - this.originalStartIndex + 1) < this.maxBlockSize && this.recordsQueue.canAdd(); }
-
-        /** Returns true if the record at the front of the buffer is on disk */
-        public boolean headRecordIsFromDisk() { return this.recordsQueue.headRecordIsFromDisk(); }
-
-        /**
-         * Check whether we have read all possible records from this block (and it is available to be destroyed)
-         * @return true if we have read the last /possible/ record (ie the block size, or if !canAdd the end index)
-         */
-        public boolean hasBeenDrained() {
-            final long maximalIndex = (this.canAdd()) ? (this.originalStartIndex + this.maxBlockSize) : this.endIndex;
-            return this.currentStartIndex > maximalIndex;       //NB: watch out for an off by one here
-        }
-
-        /** Gets the index of the first record in this block */
-        public long getStartIndex() { return this.currentStartIndex; }
-
-        /** Gets the index of the last record in this block */
-        public long getEndIndex() { return this.endIndex; }
-
-        /** Add a record to this block */
-        public void add(final SamRecordWithOrdinal samRecordWithOrdinal) {
-            if (this.recordsQueue.canAdd()) {
-                if (this.recordsQueue.isEmpty()) {
-                    this.currentStartIndex = samRecordWithOrdinal.getRecordOrdinal();
-                    this.endIndex = samRecordWithOrdinal.getRecordOrdinal() - 1;
-                }
-                this.recordsQueue.add(samRecordWithOrdinal.getRecord());
-                this.endIndex++;
-            } else {
-                throw new IllegalStateException("Cannot add to DiskBackedQueue whose canAdd() method returns false");
-            }
-        }
-
-        private int ensureIndexFitsInAnInt(final long value) {
-            if (value < Integer.MIN_VALUE || Integer.MAX_VALUE < value) throw new SAMException("Error: index out of range: " + value);
-            return (int)value;
-        }
-
-        /**
-         * Mark the current samRecordWithOrdinal as having been examined with a given result state.
-         *
-         * @param samRecordWithOrdinal The samRecordWithOrdinal to be marked
-         * @param resultState Boolean flag indicating the result of the examination of this record.
-         *
-         * This assumes that this record index does not fall out of range.
-         */
-        public void setResultState(final SamRecordWithOrdinal samRecordWithOrdinal, final boolean resultState) {
-            // find the correct byte array index and update both metadata byte arrays
-            this.wasExaminedIndexes.set(ensureIndexFitsInAnInt(samRecordWithOrdinal.getRecordOrdinal() - this.originalStartIndex), true);
-            this.resultStateIndexes.set(ensureIndexFitsInAnInt(samRecordWithOrdinal.getRecordOrdinal() - this.originalStartIndex), resultState);
-        }
-
-        public boolean isEmpty() {
-            return (this.recordsQueue.isEmpty());
-        }
-
-        public boolean canEmit() {
-            // TODO: what if isEmpty() == true?
-            return this.wasExaminedIndexes.get(ensureIndexFitsInAnInt(this.currentStartIndex - this.originalStartIndex));
-        }
-
-        public SamRecordWithOrdinal next() throws IllegalStateException {
-            if (this.canEmit()) {
-                try {
-                    // create a wrapped record for the head of the queue, and set the underlying record's examined information appropriately
-                    final SamRecordWithOrdinal samRecordWithOrdinal = clazz.newInstance();
-                    samRecordWithOrdinal.setRecord(this.recordsQueue.poll());
-                    samRecordWithOrdinal.setRecordOrdinal(this.currentStartIndex);
-                    samRecordWithOrdinal.setResultState(this.resultStateIndexes.get(ensureIndexFitsInAnInt(this.currentStartIndex - this.originalStartIndex)));
-                    this.currentStartIndex++;
-                    return samRecordWithOrdinal;
-                } catch (final Exception e) {
-                    throw new RuntimeException(e);
-                }
-            } else {
-                throw new IllegalStateException("Cannot call next() on a buffer block where canEmit() is false!");
-            }
-        }
-
-        /**
-         * Remove, but do not return, the next samRecordWithOrdinal in the iterator
-         */
-        public void remove() { this.next(); }
-
-        /**
-         * Return the total number of elements in the block, both in memory and on disk
-         */
-        public long size() { return this.endIndex - this.currentStartIndex + 1; }
-
-        /**
-         * Close disk IO resources associated with the underlying records queue.
-         * This must be called when a block is no longer needed in order to prevent memory leaks.
-         */
-        public void clear() { this.recordsQueue.clear(); }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SamRecordWithOrdinal.java b/src/main/java/htsjdk/samtools/util/SamRecordWithOrdinal.java
deleted file mode 100644
index 096c416..0000000
--- a/src/main/java/htsjdk/samtools/util/SamRecordWithOrdinal.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecord;
-
-/**
- * A little class to store the unique index associated with this record.  The index is determined as records are read in, so is in fact
- * gives the ordinal of the record in the input file.  All sub-classes should have a default constructor.  Additionally, all implementations
- * of this class must implement setResultState, as this class is typically used when wanting to return SAMRecord's in same input order,
- * but only when some computation (ex. duplicate marking) has been performed.
- */
-public abstract class SamRecordWithOrdinal {
-    private SAMRecord record;
-    private long recordOrdinal;
-
-    public SamRecordWithOrdinal() {
-        this.record = null;
-        this.recordOrdinal = -1;
-    }
-
-    public SamRecordWithOrdinal(final SAMRecord record, final long recordOrdinal) {
-        this.record = record;
-        this.recordOrdinal = recordOrdinal;
-    }
-
-    public SAMRecord getRecord() { return this.record; }
-    public void setRecord(final SAMRecord record) { this.record = record; }
-    public long getRecordOrdinal() { return this.recordOrdinal; }
-    public void setRecordOrdinal(final long recordOrdinal) { this.recordOrdinal = recordOrdinal; }
-
-    /** Set the result state on this record. */
-    abstract public void setResultState(final boolean resultState);
-}
diff --git a/src/main/java/htsjdk/samtools/util/SequenceUtil.java b/src/main/java/htsjdk/samtools/util/SequenceUtil.java
deleted file mode 100644
index 3108cee..0000000
--- a/src/main/java/htsjdk/samtools/util/SequenceUtil.java
+++ /dev/null
@@ -1,1031 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.AlignmentBlock;
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SAMTag;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class SequenceUtil {
-    /** Byte typed variables for all normal bases. */
-    public static final byte a = 'a', c = 'c', g = 'g', t = 't', n = 'n', A = 'A', C = 'C', G = 'G', T = 'T', N = 'N';
-
-    public static final byte[] VALID_BASES_UPPER = new byte[]{A, C, G, T};
-    public static final byte[] VALID_BASES_LOWER = new byte[]{a, c, g, t};
-
-    private static final byte A_MASK = 1;
-    private static final byte C_MASK = 2;
-    private static final byte G_MASK = 4;
-    private static final byte T_MASK = 8;
-
-    private static final byte[] bases = new byte[127];
-
-    /*
-     * Definition of IUPAC codes:
-     * http://www.bioinformatics.org/sms2/iupac.html
-     */
-    static {
-        Arrays.fill(bases, (byte) 0);
-        bases[A] = A_MASK;
-        bases[C] = C_MASK;
-        bases[G] = G_MASK;
-        bases[T] = T_MASK;
-        bases['M'] = A_MASK | C_MASK;
-        bases['R'] = A_MASK | G_MASK;
-        bases['W'] = A_MASK | T_MASK;
-        bases['S'] = C_MASK | G_MASK;
-        bases['Y'] = C_MASK | T_MASK;
-        bases['K'] = G_MASK | T_MASK;
-        bases['V'] = A_MASK | C_MASK | G_MASK;
-        bases['H'] = A_MASK | C_MASK | T_MASK;
-        bases['D'] = A_MASK | G_MASK | T_MASK;
-        bases['B'] = C_MASK | G_MASK | T_MASK;
-        bases['N'] = A_MASK | C_MASK | G_MASK | T_MASK;
-        // Also store the bases in lower case
-        for (int i = 'A'; i <= 'Z'; i++) {
-            bases[(byte) i + 32] = bases[(byte) i];
-        }
-        bases['.'] = A_MASK | C_MASK | G_MASK | T_MASK;
-    };
-
-
-    /**
-     * Calculate the reverse complement of the specified sequence
-     * (Stolen from Reseq)
-     *
-     * @param sequenceData
-     * @return reverse complement
-     */
-    public static String reverseComplement(final String sequenceData) {
-        final byte[] bases = htsjdk.samtools.util.StringUtil.stringToBytes(sequenceData);
-        reverseComplement(bases);
-        return htsjdk.samtools.util.StringUtil.bytesToString(bases);
-    }
-
-
-    /**
-     * Efficiently compare two IUPAC base codes, simply returning true if they are equal (ignoring case),
-     * without considering the set relationships between ambiguous codes.
-     */
-    public static boolean basesEqual(final byte lhs, final byte rhs) {
-        return (bases[lhs] == bases[rhs]);
-    }
-
-    /**
-     * Efficiently compare two IUPAC base codes, one coming from a read sequence and the other coming from
-     * a reference sequence, using the reference code as a 'pattern' that the read base must match.
-     *
-     * We take ambiguous codes into account, returning true if the set of possible bases
-     * represented by the read value is a (non-strict) subset of the possible bases represented
-     * by the reference value.
-     *
-     * Since the comparison is directional, make sure to pass read / ref codes in correct order.
-     */
-    public static boolean readBaseMatchesRefBaseWithAmbiguity(final byte readBase, final byte refBase) {
-        return (bases[readBase] & bases[refBase]) == bases[readBase];
-    }
-
-    /**
-     * returns true if the value of base represents a no call
-     */
-    public static boolean isNoCall(final byte base) {
-        return base == 'N' || base == 'n' || base == '.';
-    }
-
-    /** Returns true if the byte is in [acgtACGT]. */
-    public static boolean isValidBase(final byte b) {
-        return isValidBase(b, VALID_BASES_UPPER) || isValidBase(b, VALID_BASES_LOWER);
-    }
-
-    private static boolean isValidBase(final byte b, final byte[] validBases) {
-        for (final byte validBase : validBases) {
-            if (b == validBase) return true;
-        }
-        return false;
-    }
-
-    /** Calculates the fraction of bases that are G/C in the sequence. */
-    public static double calculateGc(final byte[] bases) {
-        int gcs = 0;
-        for (int i = 0; i < bases.length; ++i) {
-            final byte b = bases[i];
-            if (b == 'C' || b == 'G' || b == 'c' || b == 'g') ++gcs;
-        }
-
-        return gcs / (double) bases.length;
-    }
-
-    /**
-     * default signature that forces the lists to be the same size
-     *
-     * @param s1 a list of sequence headers
-     * @param s2 a second list of sequence headers
-     */
-    public static void assertSequenceListsEqual(final List<SAMSequenceRecord> s1, final List<SAMSequenceRecord> s2) {
-        assertSequenceListsEqual(s1, s2, false);
-    }
-    /**
-     * Throws an exception only if both (first) parameters are not null
-     * optionally check that one list is a (nonempty) prefix of the other.
-     *
-     * @param s1 a list of sequence headers
-     * @param s2 a second list of sequence headers
-     * @param checkPrefixOnly a flag specifying whether to only look at the first records in the lists. This will then check that the
-     * records of the smaller dictionary are equal to the records of the beginning of the larger dictionary, which can be useful since
-     * sometimes different pipelines choose to use only the first contigs of a standard reference.
-     */
-    public static void assertSequenceListsEqual(final List<SAMSequenceRecord> s1, final List<SAMSequenceRecord> s2, final boolean checkPrefixOnly) {
-        if (s1 != null && s2 != null) {
-
-            final int sizeToTest;
-
-            if (checkPrefixOnly) {
-                sizeToTest = Math.min(s1.size(), s2.size());
-                if (sizeToTest == 0) {
-                    throw new SequenceListsDifferException("Neither of the dictionaries can be empty.");
-                }
-            } else {
-                sizeToTest = s1.size();
-                if (s1.size() != s2.size()) {
-                    throw new SequenceListsDifferException(
-                            "Sequence dictionaries are not the same size (" + s1.size() + ", " + s2.size() +
-                                    ")");
-                }
-            }
-            for (int i = 0; i < sizeToTest; ++i) {
-                if (!s1.get(i).isSameSequence(s2.get(i))) {
-                    String s1Attrs = "";
-                    for (final java.util.Map.Entry<String, String> entry : s1.get(i)
-                            .getAttributes()) {
-                        s1Attrs += "/" + entry.getKey() + "=" + entry.getValue();
-                    }
-                    String s2Attrs = "";
-                    for (final java.util.Map.Entry<String, String> entry : s2.get(i)
-                            .getAttributes()) {
-                        s2Attrs += "/" + entry.getKey() + "=" + entry.getValue();
-                    }
-                    throw new SequenceListsDifferException(
-                            "Sequences at index " + i + " don't match: " +
-                                    s1.get(i).getSequenceIndex() + "/" + s1.get(i).getSequenceLength() +
-                                    "/" + s1.get(i).getSequenceName() + s1Attrs + " " +
-                                    s2.get(i).getSequenceIndex() + "/" + s2.get(i).getSequenceLength() +
-                                    "/" + s2.get(i).getSequenceName() + s2Attrs);
-                }
-            }
-        }
-    }
-
-    public static class SequenceListsDifferException extends SAMException {
-        public SequenceListsDifferException() {
-        }
-
-        public SequenceListsDifferException(final String s) {
-            super(s);
-        }
-
-        public SequenceListsDifferException(final String s, final Throwable throwable) {
-            super(s, throwable);
-        }
-
-        public SequenceListsDifferException(final Throwable throwable) {
-            super(throwable);
-        }
-    }
-
-    /**
-     * Returns true if both parameters are null or equal, otherwise returns false
-     *
-     * @param s1 a list of sequence headers
-     * @param s2 a second list of sequence headers
-     */
-    public static boolean areSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2) {
-        if (s1 == null && s2 == null) return true;
-        if (s1 == null || s2 == null) return false;
-
-        try {
-            assertSequenceListsEqual(s1.getSequences(), s2.getSequences());
-            return true;
-        } catch (final SequenceListsDifferException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Throws an exception if both parameters are non-null and unequal.
-     *
-     * @param s1 a list of sequence headers
-     * @param s2 a second list of sequence headers
-     */
-    public static void assertSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2) {
-        assertSequenceDictionariesEqual(s1, s2, false);
-    }
-
-    /**
-     * Throws an exception if both (first) parameters are non-null and unequal (if checkPrefixOnly, checks prefix of lists only).
-     *
-     * @param s1 a list of sequence headers
-     * @param s2 a second list of sequence headers
-     * @param checkPrefixOnly a flag specifying whether to only look at the first records in the lists. This will then check that the
-     * records of the smaller dictionary are equal to the records of the beginning of the larger dictionary, which can be useful since
-     * sometimes different pipelines choose to use only the first contigs of a standard reference.
-     */
-    public static void assertSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2, final boolean checkPrefixOnly) {
-        if (s1 == null || s2 == null) return;
-        assertSequenceListsEqual(s1.getSequences(), s2.getSequences(), checkPrefixOnly);
-    }
-
-    /**
-     * Throws an exception if both parameters are non-null and unequal, including the filenames.
-     */
-    public static void assertSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2,
-                                                       final File f1, final File f2) {
-        try {
-            assertSequenceDictionariesEqual(s1, s2);
-        } catch (final SequenceListsDifferException e) {
-            throw new SequenceListsDifferException("In files " + f1.getAbsolutePath() + " and " + f2.getAbsolutePath(), e);
-        }
-    }
-
-    /**
-     * Create a simple ungapped cigar string, which might have soft clipping at either end
-     *
-     * @param alignmentStart raw aligment start, which may result in read hanging off beginning or end of read
-     * @return cigar string that may have S operator at beginning or end, and has M operator for the rest of the read
-     */
-    public static String makeCigarStringWithPossibleClipping(final int alignmentStart, final int readLength, final int referenceSequenceLength) {
-        int start = alignmentStart;
-        int leftSoftClip = 0;
-        if (start < 1) {
-            leftSoftClip = 1 - start;
-            start = 1;
-        }
-        int rightSoftClip = 0;
-        if (alignmentStart + readLength > referenceSequenceLength + 1) {
-            rightSoftClip = alignmentStart + readLength - referenceSequenceLength - 1;
-        }
-        // CIGAR is trivial because there are no indels or clipping in Gerald
-        final int matchLength = readLength - leftSoftClip - rightSoftClip;
-        if (matchLength < 1) {
-            throw new SAMException("Unexpected cigar string with no M op for read.");
-        }
-        return makeSoftClipCigar(leftSoftClip) + Integer.toString(matchLength) + "M" + makeSoftClipCigar(rightSoftClip);
-    }
-
-    /**
-     * Create a cigar string for a gapped alignment, which may have soft clipping at either end
-     *
-     * @param alignmentStart          raw alignment start, which may result in read hanging off beginning or end of read
-     * @param readLength
-     * @param referenceSequenceLength
-     * @param indelPosition           number of matching bases before indel.  Must be > 0
-     * @param indelLength             length of indel.  Positive for insertion, negative for deletion.
-     * @return cigar string that may have S operator at beginning or end, has one or two M operators, and an I or a D.
-     */
-    public static String makeCigarStringWithIndelPossibleClipping(final int alignmentStart,
-                                                                  final int readLength,
-                                                                  final int referenceSequenceLength,
-                                                                  final int indelPosition,
-                                                                  final int indelLength) {
-        int start = alignmentStart;
-        int leftSoftClip = 0;
-        if (start < 1) {
-            leftSoftClip = 1 - start;
-            start = 1;
-        }
-        int rightSoftClip = 0;
-        final int alignmentEnd = alignmentStart + readLength - indelLength;
-        if (alignmentEnd > referenceSequenceLength + 1) {
-            rightSoftClip = alignmentEnd - referenceSequenceLength - 1;
-        }
-        if (leftSoftClip >= indelPosition) {
-            throw new IllegalStateException("Soft clipping entire pre-indel match. leftSoftClip: " + leftSoftClip +
-                    "; indelPosition: " + indelPosition);
-        }
-        // CIGAR is trivial because there are no indels or clipping in Gerald
-        final int firstMatchLength = indelPosition - leftSoftClip;
-        final int secondMatchLength = readLength - indelPosition - (indelLength > 0 ? indelLength : 0) - rightSoftClip;
-        if (secondMatchLength < 1) {
-            throw new SAMException("Unexpected cigar string with no M op for read.");
-        }
-        return makeSoftClipCigar(leftSoftClip) + Integer.toString(firstMatchLength) + "M" +
-                Math.abs(indelLength) + (indelLength > 0 ? "I" : "D") +
-                Integer.toString(secondMatchLength) + "M" +
-                makeSoftClipCigar(rightSoftClip);
-    }
-
-    public static String makeSoftClipCigar(final int clipLength) {
-        if (clipLength == 0) {
-            return "";
-        }
-        return Integer.toString(clipLength) + "S";
-    }
-
-    /**
-     * Helper method to handle the various use cases of base comparison.
-     *
-     * @param readBase the read base to match
-     * @param refBase the reference base to match
-     * @param negativeStrand set to true if the base to test is on the negative strand and should be reverse complemented (only applies if bisulfiteSequence is true)
-     * @param bisulfiteSequence set to true if the base to match is a bisulfite sequence and needs to be converted
-     * @param matchAmbiguousRef causes the match to return true when the read base is a subset of the possible IUPAC reference bases, but not the other way around
-     * @return true if the bases match, false otherwise
-     */
-    private static boolean basesMatch(final byte readBase, final byte refBase, final boolean negativeStrand,
-                                      final boolean bisulfiteSequence, final boolean matchAmbiguousRef) {
-        if (bisulfiteSequence) {
-            if (matchAmbiguousRef) return bisulfiteBasesMatchWithAmbiguity(negativeStrand, readBase, refBase);
-            else return bisulfiteBasesEqual(negativeStrand, readBase, refBase);
-        } else {
-            if (matchAmbiguousRef) return readBaseMatchesRefBaseWithAmbiguity(readBase, refBase);
-            else return basesEqual(readBase, refBase);
-        }
-    }
-
-    /** Calculates the number of mismatches between the read and the reference sequence provided. */
-    public static int countMismatches(final SAMRecord read, final byte[] referenceBases) {
-        return countMismatches(read, referenceBases, 0, false);
-    }
-
-    /** Calculates the number of mismatches between the read and the reference sequence provided. */
-    public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final int referenceOffset) {
-        return countMismatches(read, referenceBases, referenceOffset, false);
-    }
-
-    /**
-     * Calculates the number of mismatches between the read and the reference sequence provided.
-     *
-     * @param referenceBases    Array of ASCII bytes that covers at least the the portion of the reference sequence
-     *                          to which read is aligned from getReferenceStart to getReferenceEnd.
-     * @param referenceOffset   0-based offset of the first element of referenceBases relative to the start
-     *                          of that reference sequence.
-     * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
-     *                          and C->T on the positive strand and G->A on the negative strand will not be counted
-     *                          as mismatches.
-     */
-    public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final int referenceOffset, final boolean bisulfiteSequence) {
-        return countMismatches(read, referenceBases, referenceOffset, bisulfiteSequence, false);
-    }
-
-    public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final int referenceOffset,
-                                      final boolean bisulfiteSequence, final boolean matchAmbiguousRef) {
-        try {
-            int mismatches = 0;
-
-            final byte[] readBases = read.getReadBases();
-
-            for (final AlignmentBlock block : read.getAlignmentBlocks()) {
-                final int readBlockStart = block.getReadStart() - 1;
-                final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
-                final int length = block.getLength();
-
-                for (int i = 0; i < length; ++i) {
-                    if (!basesMatch(readBases[readBlockStart + i], referenceBases[referenceBlockStart + i],
-                            read.getReadNegativeStrandFlag(), bisulfiteSequence, matchAmbiguousRef)) {
-                        ++mismatches;
-                    }
-                }
-            }
-            return mismatches;
-        } catch (final Exception e) {
-            throw new SAMException("Exception counting mismatches for read " + read, e);
-        }
-    }
-
-    /**
-     * Calculates the number of mismatches between the read and the reference sequence provided.
-     *
-     * @param referenceBases    Array of ASCII bytes that covers at least the the portion of the reference sequence
-     *                          to which read is aligned from getReferenceStart to getReferenceEnd.
-     * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
-     *                          and C->T on the positive strand and G->A on the negative strand will not be counted
-     *                          as mismatches.
-     */
-    public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final boolean bisulfiteSequence) {
-        return countMismatches(read, referenceBases, 0, bisulfiteSequence);
-    }
-
-    /**
-     * Calculates the sum of qualities for mismatched bases in the read.
-     *
-     * @param referenceBases Array of ASCII bytes in which the 0th position in the array corresponds
-     *                       to the first element of the reference sequence to which read is aligned.
-     */
-    public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases) {
-        return sumQualitiesOfMismatches(read, referenceBases, 0, false);
-    }
-
-    /**
-     * Calculates the sum of qualities for mismatched bases in the read.
-     *
-     * @param referenceBases  Array of ASCII bytes that covers at least the the portion of the reference sequence
-     *                        to which read is aligned from getReferenceStart to getReferenceEnd.
-     * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
-     *                        of that reference sequence.
-     */
-    public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases,
-                                               final int referenceOffset) {
-        return sumQualitiesOfMismatches(read, referenceBases, referenceOffset, false);
-    }
-
-    /**
-     * Calculates the sum of qualities for mismatched bases in the read.
-     *
-     * @param referenceBases    Array of ASCII bytes that covers at least the the portion of the reference sequence
-     *                          to which read is aligned from getReferenceStart to getReferenceEnd.
-     * @param referenceOffset   0-based offset of the first element of referenceBases relative to the start
-     *                          of that reference sequence.
-     * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
-     *                          and C->T on the positive strand and G->A on the negative strand will not be counted
-     *                          as mismatches.
-     */
-    public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases,
-                                               final int referenceOffset, final boolean bisulfiteSequence) {
-        int qualities = 0;
-
-        final byte[] readBases = read.getReadBases();
-        final byte[] readQualities = read.getBaseQualities();
-
-        if (read.getAlignmentStart() <= referenceOffset) {
-            throw new IllegalArgumentException("read.getAlignmentStart(" + read.getAlignmentStart() +
-                    ") <= referenceOffset(" + referenceOffset + ")");
-        }
-
-        for (final AlignmentBlock block : read.getAlignmentBlocks()) {
-            final int readBlockStart = block.getReadStart() - 1;
-            final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
-            final int length = block.getLength();
-
-            for (int i = 0; i < length; ++i) {
-                if (!bisulfiteSequence) {
-                    if (!basesEqual(readBases[readBlockStart + i], referenceBases[referenceBlockStart + i])) {
-                        qualities += readQualities[readBlockStart + i];
-                    }
-
-                } else {
-                    if (!bisulfiteBasesEqual(read.getReadNegativeStrandFlag(), readBases[readBlockStart + i],
-                            referenceBases[referenceBlockStart + i])) {
-                        qualities += readQualities[readBlockStart + i];
-                    }
-                }
-            }
-        }
-
-        return qualities;
-    }
-
-    public static int countInsertedBases(final Cigar cigar) {
-        int ret = 0;
-        for (final CigarElement element : cigar.getCigarElements()) {
-            if (element.getOperator() == CigarOperator.INSERTION) ret += element.getLength();
-        }
-        return ret;
-    }
-
-    public static int countDeletedBases(final Cigar cigar) {
-        int ret = 0;
-        for (final CigarElement element : cigar.getCigarElements()) {
-            if (element.getOperator() == CigarOperator.DELETION) ret += element.getLength();
-        }
-        return ret;
-    }
-
-    public static int countInsertedBases(final SAMRecord read) {
-        return countInsertedBases(read.getCigar());
-    }
-
-    public static int countDeletedBases(final SAMRecord read) {
-        return countDeletedBases(read.getCigar());
-    }
-
-    /**
-     * Calculates the predefined NM tag from the SAM spec: (# of mismatches + # of indels)
-     * For the purposes for calculating mismatches, we do not yet support IUPAC ambiguous codes
-     * (see <code>readBaseMatchesRefBaseWithAmbiguity</code> method).
-     */
-    public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases) {
-        return calculateSamNmTag(read, referenceBases, 0, false);
-    }
-
-    /**
-     * Calculates the predefined NM tag from the SAM spec: (# of mismatches + # of indels)
-     * For the purposes for calculating mismatches, we do not yet support IUPAC ambiguous codes
-     * (see <code>readBaseMatchesRefBaseWithAmbiguity</code> method).
-     *
-     * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
-     *                        of that reference sequence.
-     */
-    public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases,
-                                        final int referenceOffset) {
-        return calculateSamNmTag(read, referenceBases, referenceOffset, false);
-    }
-
-    /**
-     * Calculates the predefined NM tag from the SAM spec: (# of mismatches + # of indels)
-     * For the purposes for calculating mismatches, we do not yet support IUPAC ambiguous codes
-     * (see <code>readBaseMatchesRefBaseWithAmbiguity</code> method).
-     *
-     * @param referenceOffset   0-based offset of the first element of referenceBases relative to the start
-     *                          of that reference sequence.
-     * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
-     *                          and C->T on the positive strand and G->A on the negative strand will not be counted
-     *                          as mismatches.
-     */
-    public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases,
-                                        final int referenceOffset, final boolean bisulfiteSequence) {
-        int samNm = countMismatches(read, referenceBases, referenceOffset, bisulfiteSequence, false);
-        for (final CigarElement el : read.getCigar().getCigarElements()) {
-            if (el.getOperator() == CigarOperator.INSERTION || el.getOperator() == CigarOperator.DELETION) {
-                samNm += el.getLength();
-            }
-        }
-        return samNm;
-    }
-
-    /**
-     * Attempts to calculate the predefined NM tag from the SAM spec using the cigar string alone.
-     * It may calculate incorrectly if ambiguous operators (Like M) are used.
-     *
-     * Needed for testing infrastructure: SAMRecordSetBuilder
-     */
-    public static int calculateSamNmTagFromCigar(final SAMRecord record) {
-        int samNm = 0;
-        for (final CigarElement el : record.getCigar().getCigarElements()) {
-            if ( el.getOperator() == CigarOperator.X ||
-                 el.getOperator() == CigarOperator.INSERTION ||
-                 el.getOperator() == CigarOperator.DELETION) {
-                samNm += el.getLength();
-            }
-        }
-        return samNm;
-    }
-
-    /** Returns the complement of a single byte. */
-    public static byte complement(final byte b) {
-        switch (b) {
-            case a:
-                return t;
-            case c:
-                return g;
-            case g:
-                return c;
-            case t:
-                return a;
-            case A:
-                return T;
-            case C:
-                return G;
-            case G:
-                return C;
-            case T:
-                return A;
-            default:
-                return b;
-        }
-    }
-
-    /** Reverses and complements the bases in place. */
-    public static void reverseComplement(final byte[] bases) {
-        final int lastIndex = bases.length - 1;
-
-        int i, j;
-        for (i = 0, j = lastIndex; i < j; ++i, --j) {
-            final byte tmp = complement(bases[i]);
-            bases[i] = complement(bases[j]);
-            bases[j] = tmp;
-        }
-        if (bases.length % 2 == 1) {
-            bases[i] = complement(bases[i]);
-        }
-    }
-
-    /** Reverses the quals in place. */
-    public static void reverseQualities(final byte[] quals) {
-        final int lastIndex = quals.length - 1;
-
-        int i, j;
-        for (i = 0, j = lastIndex; i < j; ++i, --j) {
-            final byte tmp = quals[i];
-            quals[i] = quals[j];
-            quals[j] = tmp;
-        }
-    }
-
-    /**
-     * Returns true if the bases are equal OR if the mismatch can be accounted for by
-     * bisulfite treatment. C->T on the positive strand and G->A on the negative strand
-     * do not count as mismatches.
-     */
-    public static boolean bisulfiteBasesEqual(final boolean negativeStrand, final byte read, final byte reference) {
-        return (basesEqual(read, reference)) || (isBisulfiteConverted(read, reference, negativeStrand));
-    }
-
-    public static boolean bisulfiteBasesEqual(final byte read, final byte reference) {
-        return bisulfiteBasesEqual(false, read, reference);
-    }
-
-    /**
-     * Same as above, but use <code>readBaseMatchesRefBaseWithAmbiguity</code> instead of <code>basesEqual</code>.
-     * Note that <code>isBisulfiteConverted</code> is not affected because it only applies when the
-     * reference base is non-ambiguous.
-     */
-    public static boolean bisulfiteBasesMatchWithAmbiguity(final boolean negativeStrand, final byte read, final byte reference) {
-        return (readBaseMatchesRefBaseWithAmbiguity(read, reference)) || (isBisulfiteConverted(read, reference, negativeStrand));
-    }
-
-    /**
-     * Checks for bisulfite conversion, C->T on the positive strand and G->A on the negative strand.
-     */
-    public static boolean isBisulfiteConverted(final byte read, final byte reference, final boolean negativeStrand) {
-        if (negativeStrand) {
-            if (basesEqual(reference, G) && basesEqual(read, A)) {
-                return true;
-            }
-        } else {
-            if (basesEqual(reference, C) && basesEqual(read, T)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static boolean isBisulfiteConverted(final byte read, final byte reference) {
-        return isBisulfiteConverted(read, reference, false);
-    }
-
-    /*
-     * Regexp for MD string.
-     *
-     * \G = end of previous match.
-     * (?:[0-9]+) non-capturing (why non-capturing?) group of digits.  For this number of bases read matches reference.
-     *  - or -
-     * Single reference base for case in which reference differs from read.
-     *  - or -
-     * ^one or more reference bases that are deleted in read.
-     *
-     */
-    static final Pattern mdPat = Pattern.compile("\\G(?:([0-9]+)|([ACTGNactgn])|(\\^[ACTGNactgn]+))");
-
-    /**
-     * Produce reference bases from an aligned SAMRecord with MD string and Cigar.
-     *
-     * @param rec                               Must contain non-empty CIGAR and MD attribute.
-     * @param includeReferenceBasesForDeletions If true, include reference bases that are deleted in the read.
-     *                                          This will make the returned array not line up with the read if there are deletions.
-     * @return References bases corresponding to the read.  If there is an insertion in the read, reference contains
-     * '-'.  If the read is soft-clipped, reference contains '0'.  If there is a skipped region and
-     * includeReferenceBasesForDeletions==true, reference will have Ns for the skipped region.
-     */
-    public static byte[] makeReferenceFromAlignment(final SAMRecord rec, final boolean includeReferenceBasesForDeletions) {
-        final String md = rec.getStringAttribute(SAMTag.MD.name());
-        if (md == null) {
-            throw new SAMException("Cannot create reference from SAMRecord with no MD tag, read: " + rec.getReadName());
-        }
-        // Not sure how long output will be, but it will be no longer than this.
-        int maxOutputLength = 0;
-        final Cigar cigar = rec.getCigar();
-        if (cigar == null) {
-            throw new SAMException("Cannot create reference from SAMRecord with no CIGAR, read: " + rec.getReadName());
-        }
-        for (final CigarElement cigarElement : cigar.getCigarElements()) {
-            maxOutputLength += cigarElement.getLength();
-        }
-        final byte[] ret = new byte[maxOutputLength];
-        int outIndex = 0;
-
-        final Matcher match = mdPat.matcher(md);
-        int curSeqPos = 0;
-
-        int savedBases = 0;
-        final byte[] seq = rec.getReadBases();
-        for (final CigarElement cigEl : cigar.getCigarElements()) {
-            final int cigElLen = cigEl.getLength();
-            final CigarOperator cigElOp = cigEl.getOperator();
-
-
-            if (cigElOp == CigarOperator.SKIPPED_REGION) {
-                // We've decided that MD tag will not contain bases for skipped regions, as they
-                // could be megabases long, so just put N in there if caller wants reference bases,
-                // otherwise ignore skipped regions.
-                if (includeReferenceBasesForDeletions) {
-                    for (int i = 0; i < cigElLen; ++i) {
-                        ret[outIndex++] = N;
-                    }
-                }
-            }
-            // If it consumes reference bases, it's either a match or a deletion in the sequence
-            // read.  Either way, we're going to need to parse through the MD.
-            else if (cigElOp.consumesReferenceBases()) {
-                // We have a match region, go through the MD
-                int basesMatched = 0;
-
-                // Do we have any saved matched bases?
-                while ((savedBases > 0) && (basesMatched < cigElLen)) {
-                    ret[outIndex++] = seq[curSeqPos++];
-                    savedBases--;
-                    basesMatched++;
-                }
-
-                while (basesMatched < cigElLen) {
-                    boolean matched = match.find();
-                    if (matched) {
-                        String mg;
-                        if (((mg = match.group(1)) != null) && (!mg.isEmpty())) {
-                            // It's a number , meaning a series of matches
-                            final int num = Integer.parseInt(mg);
-                            for (int i = 0; i < num; i++) {
-                                if (basesMatched < cigElLen) {
-                                    ret[outIndex++] = seq[curSeqPos++];
-                                } else {
-                                    savedBases++;
-                                }
-                                basesMatched++;
-                            }
-                        } else if (((mg = match.group(2)) != null) && (!mg.isEmpty())) {
-                            // It's a single nucleotide, meaning a mismatch
-                            if (basesMatched < cigElLen) {
-                                ret[outIndex++] = StringUtil.charToByte(mg.charAt(0));
-                                curSeqPos++;
-                            } else {
-                                throw new IllegalStateException("Should never happen.");
-                            }
-                            basesMatched++;
-                        } else if (((mg = match.group(3)) != null) && (!mg.isEmpty())) {
-                            // It's a deletion, starting with a caret
-                            // don't include caret
-                            if (includeReferenceBasesForDeletions) {
-                                final byte[] deletedBases = StringUtil.stringToBytes(mg);
-                                System.arraycopy(deletedBases, 1, ret, outIndex, deletedBases.length - 1);
-                                outIndex += deletedBases.length - 1;
-                            }
-                            basesMatched += mg.length() - 1;
-
-                            // Check just to make sure.
-                            if (basesMatched != cigElLen) {
-                                throw new SAMException("Got a deletion in CIGAR (" + cigar + ", deletion " + cigElLen +
-                                        " length) with an unequal ref insertion in MD (" + md + ", md " + basesMatched + " length");
-                            }
-                            if (cigElOp != CigarOperator.DELETION) {
-                                throw new SAMException("Got an insertion in MD (" + md + ") without a corresponding deletion in cigar (" + cigar + ")");
-                            }
-
-                        } else {
-                            matched = false;
-                        }
-                    }
-
-                    if (!matched) {
-                        throw new SAMException("Illegal MD pattern: " + md + " for read " + rec.getReadName() +
-                                " with CIGAR " + rec.getCigarString());
-                    }
-                }
-
-            } else if (cigElOp.consumesReadBases()) {
-                // We have an insertion in read
-                for (int i = 0; i < cigElLen; i++) {
-                    final char c = (cigElOp == CigarOperator.SOFT_CLIP) ? '0' : '-';
-                    ret[outIndex++] = StringUtil.charToByte(c);
-                    curSeqPos++;
-                }
-            } else {
-                // It's an op that consumes neither read nor reference bases.  Do we just ignore??
-            }
-
-        }
-        if (outIndex < ret.length) {
-            final byte[] shorter = new byte[outIndex];
-            System.arraycopy(ret, 0, shorter, 0, outIndex);
-            return shorter;
-        }
-        return ret;
-    }
-
-    public static void reverse(final byte[] array, final int offset, final int len) {
-        final int lastIndex = len - 1;
-
-        int i, j;
-        for (i = offset, j = offset + lastIndex; i < j; ++i, --j) {
-            final byte tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
-        }
-        if (len % 2 == 1) {
-            array[i] = array[i];
-        }
-    }
-
-    public static void reverseComplement(final byte[] bases, final int offset, final int len) {
-        final int lastIndex = len - 1;
-
-        int i, j;
-        for (i = offset, j = offset + lastIndex; i < j; ++i, --j) {
-            final byte tmp = complement(bases[i]);
-            bases[i] = complement(bases[j]);
-            bases[j] = tmp;
-        }
-        if (len % 2 == 1) {
-            bases[i] = complement(bases[i]);
-        }
-    }
-
-    public static String calculateMD5String(final byte[] data)
-            throws NoSuchAlgorithmException {
-        return SequenceUtil.calculateMD5String(data, 0, data.length);
-    }
-
-    public static String calculateMD5String(final byte[] data, final int offset, final int len) {
-        final byte[] digest = calculateMD5(data, offset, len);
-        return String.format("%032x", new BigInteger(1, digest));
-    }
-
-    public static byte[] calculateMD5(final byte[] data, final int offset, final int len) {
-        final MessageDigest md5_MessageDigest;
-        try {
-            md5_MessageDigest = MessageDigest.getInstance("MD5");
-            md5_MessageDigest.reset();
-
-            md5_MessageDigest.update(data, offset, len);
-            return md5_MessageDigest.digest();
-        } catch (final NoSuchAlgorithmException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Calculate MD and NM similarly to Samtools, except that N->N is a match.
-     *
-     * @param record Input record for which to calculate NM and MD.
-     *               The appropriate tags will be added/updated in the record
-     * @param ref    The reference bases for the sequence to which the record is mapped
-     * @param calcMD A flag indicating whether to update the MD tag in the record
-     * @param calcNM A flag indicating whether to update the NM tag in the record
-     */
-    public static void calculateMdAndNmTags(final SAMRecord record, final byte[] ref,
-                                            final boolean calcMD, final boolean calcNM) {
-        if (!calcMD && !calcNM)
-            return;
-
-        final Cigar cigar = record.getCigar();
-        final List<CigarElement> cigarElements = cigar.getCigarElements();
-        final byte[] seq = record.getReadBases();
-        final int alignmentStart = record.getAlignmentStart() - 1;
-        int cigarIndex, blockRefPos, blockReadStart, matchCount = 0;
-        int nmCount = 0;
-        final StringBuilder mdString = new StringBuilder();
-
-        final int nElements = cigarElements.size();
-        for (cigarIndex = blockReadStart = 0, blockRefPos = alignmentStart; cigarIndex < nElements; ++cigarIndex) {
-            final CigarElement ce = cigarElements.get(cigarIndex);
-            int inBlockOffset;
-            final int blockLength = ce.getLength();
-            final CigarOperator op = ce.getOperator();
-            if (op == CigarOperator.MATCH_OR_MISMATCH || op == CigarOperator.EQ
-                    || op == CigarOperator.X) {
-                for (inBlockOffset = 0; inBlockOffset < blockLength; ++inBlockOffset) {
-                    final int readOffset = blockReadStart + inBlockOffset;
-
-                    if (ref.length <= blockRefPos + inBlockOffset) break; // out of boundary
-
-                    final byte readBase = seq[readOffset];
-                    final byte refBase = ref[blockRefPos + inBlockOffset];
-
-                    if ((bases[readBase] == bases[refBase]) || readBase == 0) {
-                        // a match
-                        ++matchCount;
-                    } else {
-                        mdString.append(matchCount);
-                        mdString.appendCodePoint(refBase);
-                        matchCount = 0;
-                        ++nmCount;
-                    }
-                }
-                if (inBlockOffset < blockLength) break;
-                blockRefPos += blockLength;
-                blockReadStart += blockLength;
-            } else if (op == CigarOperator.DELETION) {
-                mdString.append(matchCount);
-                mdString.append('^');
-                for (inBlockOffset = 0; inBlockOffset < blockLength; ++inBlockOffset) {
-                    if (ref[blockRefPos + inBlockOffset] == 0) break;
-                    mdString.appendCodePoint(ref[blockRefPos + inBlockOffset]);
-                }
-                matchCount = 0;
-                if (inBlockOffset < blockLength) break;
-                blockRefPos += blockLength;
-                nmCount += blockLength;
-            } else if (op == CigarOperator.INSERTION
-                    || op == CigarOperator.SOFT_CLIP) {
-                blockReadStart += blockLength;
-                if (op == CigarOperator.INSERTION) nmCount += blockLength;
-            } else if (op == CigarOperator.SKIPPED_REGION) {
-                blockRefPos += blockLength;
-            }
-        }
-        mdString.append(matchCount);
-
-        if (calcMD) record.setAttribute(SAMTag.MD.name(), mdString.toString());
-        if (calcNM) record.setAttribute(SAMTag.NM.name(), nmCount);
-    }
-
-    public static byte upperCase(final byte base) {
-        return base >= a ? (byte) (base - (a - A)) : base;
-    }
-
-    public static byte[] upperCase(final byte[] bases) {
-        for (int i = 0; i < bases.length; i++)
-            bases[i] = upperCase(bases[i]);
-        return bases;
-    }
-
-    /** Generates all possible unambiguous kmers (upper-case) of length and returns them as byte[]s. */
-    public static List<byte[]> generateAllKmers(final int length) {
-        final List<byte[]> sofar = new LinkedList<>();
-
-        if (sofar.isEmpty()) {
-            sofar.add(new byte[length]);
-        }
-
-        while (true) {
-            final byte[] bs = sofar.remove(0);
-            int indexOfNextBase = -1;
-            for (int i = 0; i < bs.length; ++i) {
-                if (bs[i] == 0) {
-                    indexOfNextBase = i;
-                    break;
-                }
-            }
-
-            if (indexOfNextBase == -1) {
-                sofar.add(bs);
-                break;
-            } else {
-                for (final byte b : VALID_BASES_UPPER) {
-                    final byte[] next = Arrays.copyOf(bs, bs.length);
-                    next[indexOfNextBase] = b;
-                    sofar.add(next);
-                }
-            }
-        }
-
-        return sofar;
-    }
-
-    /**
-     * Returns a read name from a FASTQ header string suitable for use in a SAM/BAM file.  Any letters after the first space are ignored.
-     * Ths method also strips trailing "/1" or "/2" so that paired end reads have the same name.
-     *
-     * @param fastqHeader the header from a {@link htsjdk.samtools.fastq.FastqRecord}.
-     * @return a read name appropriate for output in a SAM/BAM file.
-     */
-    // Read names cannot contain blanks
-    public static String getSamReadNameFromFastqHeader(final String fastqHeader) {
-        final int idx = fastqHeader.indexOf(" ");
-        String readName = (idx == -1) ? fastqHeader : fastqHeader.substring(0,idx);
-
-        // NOTE: the while loop isn't necessarily the most efficient way to handle this but we don't
-        // expect this to ever happen more than once, just trapping pathological cases
-        while ((readName.endsWith("/1") || readName.endsWith("/2"))) {
-            // If this is an unpaired run we want to make sure that "/1" isn't tacked on the end of the read name,
-            // as this can cause problems down the road (ex. in Picard's MergeBamAlignment).
-            readName = readName.substring(0, readName.length() - 2);
-        }
-
-        return readName;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SnappyLoader.java b/src/main/java/htsjdk/samtools/util/SnappyLoader.java
deleted file mode 100644
index 52abcef..0000000
--- a/src/main/java/htsjdk/samtools/util/SnappyLoader.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-import org.xerial.snappy.LoadSnappy;
-import org.xerial.snappy.SnappyInputStream;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-
-/**
- * If Snappy is available, obtain single-arg ctors for SnappyInputStream and SnappyOutputStream.
- */
-public class SnappyLoader {
-    private static final int SNAPPY_BLOCK_SIZE = 32768;  // keep this as small as can be without hurting compression ratio.
-    private final Constructor<InputStream> SnappyInputStreamCtor;
-    private final Constructor<OutputStream> SnappyOutputStreamCtor;
-    public final boolean SnappyAvailable;
-
-    // Force Snappy-java code to be loaded into executable jars.
-    private final SnappyInputStream ignoreMe = null;
-
-    // Force bcel to load Snappy.
-    //private static final Class SnappyClass = SnappyInputStream.class;
-
-    private static final boolean DefaultVerbosity = Boolean.valueOf(System.getProperty("snappy.loader.verbosity", "false"));
-
-    public SnappyLoader() {
-        this(DefaultVerbosity);
-    }
-
-    /**
-     * Constructs a new SnappyLoader which will check to see if snappy is available in the JVM/library path.
-     * @param verbose if true output a small number of debug messages to System.err
-     */
-    public SnappyLoader(final boolean verbose) {
-        Constructor<InputStream> inputStreamCtor = null;
-        Constructor<OutputStream> outputStreamCtor = null;
-        Class<Error> snappyErrorClass = null;
-
-        if (java.lang.Boolean.valueOf(System.getProperty("snappy.disable", "false"))) {
-            System.err.println("Snappy is disabled via system property.");
-        }
-        else {
-            try {
-                final Class<InputStream> snappyInputStreamClass = (Class<InputStream>)Class.forName("org.xerial.snappy.SnappyInputStream");
-                final Class<OutputStream> snappyOutputStreamClass = (Class<OutputStream>)Class.forName("org.xerial.snappy.SnappyOutputStream");
-                snappyErrorClass = (Class<Error>)Class.forName("org.xerial.snappy.SnappyError");
-                inputStreamCtor = snappyInputStreamClass.getConstructor(InputStream.class);
-                outputStreamCtor = snappyOutputStreamClass.getConstructor(OutputStream.class, Integer.TYPE);
-            }
-            catch (NoSuchMethodException e) { /* Do nothing. */ }
-            catch (ClassNotFoundException e) { /* Do nothing. */ }
-        }
-
-        this.SnappyInputStreamCtor = inputStreamCtor;
-        this.SnappyOutputStreamCtor = outputStreamCtor;
-
-        if (this.SnappyInputStreamCtor != null && this.SnappyOutputStreamCtor != null) {
-            // Don't try to call any Snappy code until classes have been found via reflection above.
-            boolean tmpSnappyAvailable;
-            try {
-                if (!LoadSnappy.load()) {
-                    if (verbose) System.err.println("Snappy dll failed to load.");
-                    tmpSnappyAvailable = false;
-                }
-                else {
-                    if (verbose) System.err.println("Snappy stream classes loaded.");
-                    tmpSnappyAvailable = true;
-                }
-            } catch (Error e) {
-                if (e.getClass().equals(snappyErrorClass)) {
-                    if (verbose) System.err.println("Snappy dll failed to load: " + e.getMessage());
-                    tmpSnappyAvailable = false;
-                } else {
-                    throw e;
-                }
-            }
-            SnappyAvailable = tmpSnappyAvailable;
-        }
-        else {
-            if (verbose) System.err.println("Snappy stream classes not loaded.");
-            SnappyAvailable = false;
-        }
-    }
-
-    /** Wrap an InputStream in a SnappyInputStream. If Snappy is not available will throw an exception. */
-    public InputStream wrapInputStream(final InputStream inputStream) {
-        try {
-            return SnappyInputStreamCtor.newInstance(inputStream);
-        } catch (Exception e) {
-            throw new SAMException("Error instantiating SnappyInputStream", e);
-        }
-    }
-
-    /** Wrap an InputStream in a SnappyInputStream. If Snappy is not available will throw an exception. */
-    public OutputStream wrapOutputStream(final OutputStream outputStream) {
-        try {
-            return SnappyOutputStreamCtor.newInstance(outputStream, SNAPPY_BLOCK_SIZE);
-        } catch (Exception e) {
-            throw new SAMException("Error instantiating SnappyOutputStream", e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SolexaQualityConverter.java b/src/main/java/htsjdk/samtools/util/SolexaQualityConverter.java
deleted file mode 100644
index ba12678..0000000
--- a/src/main/java/htsjdk/samtools/util/SolexaQualityConverter.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Optimized method for converting Solexa ASCII qualities into Phred scores.
- * Pre-computes all values in order to eliminate repeated computation.
- */
-public class SolexaQualityConverter {
-
-    /**
-     * This value is added to a Solexa quality score to make it printable ASCII
-     */
-    public static final int SOLEXA_ADDEND = 64;
-
-    /**
-     * This value is added to a Phred scord to make it printable ASCII
-     */
-    public static final int PHRED_ADDEND = 33;
-
-    /**
-     * This value is removed from an Illumina 1.8 quality score to make it a Phred score
-     */
-    public final static int ILLUMINA_TO_PHRED_SUBTRAHEND = SOLEXA_ADDEND - PHRED_ADDEND;
-
-    private static SolexaQualityConverter singleton = null;
-
-    public static synchronized SolexaQualityConverter getSingleton()  {
-        if (singleton == null) {
-            singleton = new SolexaQualityConverter();
-        }
-        return singleton;
-    }
-
-    /**
-     * Mapping from ASCII value in Gerald export file to phred score
-     */
-    private final byte[] phredScore = new byte[256];
-
-    private SolexaQualityConverter() {
-        for (int i = 0; i < SOLEXA_ADDEND; ++i) {
-            phredScore[i] = 0;
-        }
-        for (int i = SOLEXA_ADDEND; i < phredScore.length; ++i) {
-            phredScore[i] = convertSolexaQualityCharToPhredBinary(i);
-        }
-    }
-
-
-    /** Converts a solexa character quality into a phred numeric quality. */
-    private byte convertSolexaQualityCharToPhredBinary(final int solexaQuality) {
-        return (byte) Math.round(10d * Math.log10(1d+Math.pow(10d, (solexaQuality - SOLEXA_ADDEND)/10d)));
-    }
-
-    /**
-     * Convert a solexa quality ASCII character into a phred score.
-     */
-    public byte solexaCharToPhredBinary(final byte solexaQuality) {
-        return phredScore[solexaQuality];
-    }
-
-    /**
-     * @return a byte array that can be indexed by Solexa ASCII quality, with value
-     * of corresponding Phred score.  Elements 0-63 are invalid because Solexa qualities
-     * should all be >= 64.  Do not modify this array!
-     */
-    public byte[] getSolexaToPhredConversionTable() {
-        return phredScore;
-    }
-
-    /**
-     * Decodes an array of solexa quality ASCII chars into Phred numeric space.
-     * Decode in place in order to avoid extra object allocation.
-     */
-    public void convertSolexaQualityCharsToPhredBinary(final byte[] solexaQuals) {
-        for (int i=0; i<solexaQuals.length; ++i) {
-            solexaQuals[i] = phredScore[solexaQuals[i]];
-        }
-    }
-
-    /**
-     * Decodes an array of solexa quality ASCII chars into Phred ASCII space.
-     * Decode in place in order to avoid extra object allocation.
-     */
-    public void convertSolexaQualityCharsToPhredChars(final byte[] solexaQuals) {
-        for (int i=0; i<solexaQuals.length; ++i) {
-            solexaQuals[i] = (byte)((phredScore[solexaQuals[i]] + PHRED_ADDEND) & 0xff);
-        }
-    }
-
-    /**
-     * Casava 1.3 stores phred-scaled qualities, but non-standard because they have 64 added to them
-     * rather than the standard 33.
-     * @param solexaQuals qualities are converted in place.
-     */
-    public void convertSolexa_1_3_QualityCharsToPhredBinary(final byte[] solexaQuals) {
-        for (int i=0; i<solexaQuals.length; ++i) {
-            solexaQuals[i] -= SOLEXA_ADDEND;
-        }
-    }
-
-    public void convertSolexa_1_3_QualityCharsToPhredBinary(int offset, int length, final byte[] solexaQuals) {
-        final int limit = offset + length;
-        for (int i=offset; i < limit; ++i) {
-            solexaQuals[i] -= SOLEXA_ADDEND;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SortingCollection.java b/src/main/java/htsjdk/samtools/util/SortingCollection.java
deleted file mode 100644
index 6babd4e..0000000
--- a/src/main/java/htsjdk/samtools/util/SortingCollection.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Defaults;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.TreeSet;
-
-/**
- * Collection to which many records can be added.  After all records are added, the collection can be
- * iterated, and the records will be returned in order defined by the comparator.  Records may be spilled
- * to a temporary directory if there are more records added than will fit in memory.  As a result of this,
- * the objects returned may not be identical to the objects added to the collection, but they should be
- * equal as determined by the codec used to write them to disk and read them back.
- *
- * When iterating over the collection, the number of file handles required is numRecordsInCollection/maxRecordsInRam.
- * If this becomes a limiting factor, a file handle cache could be added.
- *
- * If Snappy DLL is available and snappy.disable system property is not set to true, then Snappy is used
- * to compress temporary files.
- */
-public class SortingCollection<T> implements Iterable<T> {
-
-    /**
-     * Client must implement this class, which defines the way in which records are written to and
-     * read from file.
-     */
-    public interface Codec<T> extends Cloneable {
-        /**
-         * Where to write encoded output
-         * @param os
-         */
-        void setOutputStream(OutputStream os);
-
-        /**
-         * Where to read encoded input from
-         * @param is
-         */
-        void setInputStream(InputStream is);
-        /**
-         * Write object to output stream
-         * @param val what to write
-         */
-        void encode(T val);
-
-        /**
-         * Read the next record from the input stream and convert into a java object.
-         * @return null if no more records.  Should throw exception if EOF is encountered in the middle of
-         * a record.
-         */
-        T decode();
-
-        /**
-         * Must return a cloned copy of the codec that can be used independently of
-         * the original instance.  This is required so that multiple codecs can exist simultaneously
-         * that each is reading a separate file.
-         */
-        Codec<T> clone();
-    }
-
-    /** Directories where files of sorted records go. */
-    private final File[] tmpDirs;
-
-    /** The minimum amount of space free on a temp filesystem to write a file there. */
-    private final long TMP_SPACE_FREE = IOUtil.FIVE_GBS;
-
-    /**
-     * Used to write records to file, and used as a prototype to create codecs for reading.
-     */
-    private final SortingCollection.Codec<T> codec;
-
-    /**
-     * For sorting, both when spilling records to file, and merge sorting.
-     */
-    private final Comparator<T> comparator;
-    private final int maxRecordsInRam;
-    private int numRecordsInRam = 0;
-    private T[] ramRecords;
-    private boolean iterationStarted = false;
-    private boolean doneAdding = false;
-
-    /**
-     * Set to true when all temp files have been cleaned up
-     */
-    private boolean cleanedUp = false;
-
-    /**
-     * List of files in tmpDir containing sorted records
-     */
-    private final List<File> files = new ArrayList<File>();
-
-    private boolean destructiveIteration = true;
-
-    private TempStreamFactory tempStreamFactory = new TempStreamFactory();
-
-    /**
-     * Prepare to accumulate records to be sorted
-     * @param componentType Class of the record to be sorted.  Necessary because of Java generic lameness.
-     * @param codec For writing records to file and reading them back into RAM
-     * @param comparator Defines output sort order
-     * @param maxRecordsInRam how many records to accumulate before spilling to disk
-     * @param tmpDir Where to write files of records that will not fit in RAM
-     */
-    private SortingCollection(final Class<T> componentType, final SortingCollection.Codec<T> codec,
-                             final Comparator<T> comparator, final int maxRecordsInRam, final File... tmpDir) {
-        if (maxRecordsInRam <= 0) {
-            throw new IllegalArgumentException("maxRecordsInRam must be > 0");
-        }
-
-        if (tmpDir == null || tmpDir.length == 0) {
-            throw new IllegalArgumentException("At least one temp directory must be provided.");
-        }
-
-        this.tmpDirs = tmpDir;
-        this.codec = codec;
-        this.comparator = comparator;
-        this.maxRecordsInRam = maxRecordsInRam;
-        this.ramRecords = (T[])Array.newInstance(componentType, maxRecordsInRam);
-    }
-
-    public void add(final T rec) {
-        if (doneAdding) {
-            throw new IllegalStateException("Cannot add after calling doneAdding()");
-        }
-        if (iterationStarted) {
-            throw new IllegalStateException("Cannot add after calling iterator()");
-        }
-        if (numRecordsInRam == maxRecordsInRam) {
-            spillToDisk();
-        }
-        ramRecords[numRecordsInRam++] = rec;
-    }
-
-    /**
-     * This method can be called after caller is done adding to collection, in order to possibly free
-     * up memory.  If iterator() is called immediately after caller is done adding, this is not necessary,
-     * because iterator() triggers the same freeing.
-     */
-    public void doneAdding() {
-        if (this.cleanedUp) {
-            throw new IllegalStateException("Cannot call doneAdding() after cleanup() was called.");
-        }
-        if (doneAdding) {
-            return;
-        }
-
-        doneAdding = true;
-
-        if (this.files.isEmpty()) {
-            return;
-        }
-
-        if (this.numRecordsInRam > 0) {
-            spillToDisk();
-        }
-
-        // Facilitate GC
-        this.ramRecords = null;
-    }
-
-    /**
-     * @return True if this collection is allowed to discard data during iteration in order to reduce memory
-     * footprint, precluding a second iteration over the collection.
-     */
-    public boolean isDestructiveIteration() {
-        return destructiveIteration;
-    }
-
-    /**
-     * Tell this collection that it is allowed to discard data during iteration in order to reduce memory footprint,
-     * precluding a second iteration.  This is true by default.
-     */
-    public void setDestructiveIteration(boolean destructiveIteration) {
-        this.destructiveIteration = destructiveIteration;
-    }
-
-    /**
-     * Sort the records in memory, write them to a file, and clear the buffer of records in memory.
-     */
-    private void spillToDisk() {
-        try {
-            Arrays.sort(this.ramRecords, 0, this.numRecordsInRam, this.comparator);
-            final File f = newTempFile();
-            OutputStream os = null;
-            try {
-                os = tempStreamFactory.wrapTempOutputStream(new FileOutputStream(f), Defaults.BUFFER_SIZE);
-                this.codec.setOutputStream(os);
-                for (int i = 0; i < this.numRecordsInRam; ++i) {
-                    this.codec.encode(ramRecords[i]);
-                    // Facilitate GC
-                    this.ramRecords[i] = null;
-                }
-
-                os.flush();
-            } catch (RuntimeIOException ex) {
-                throw new RuntimeIOException("Problem writing temporary file " + f.getAbsolutePath() +
-                        ".  Try setting TMP_DIR to a file system with lots of space.", ex);
-            } finally {
-                if (os != null) {
-                    os.close();
-                }
-            }
-
-            this.numRecordsInRam = 0;
-            this.files.add(f);
-
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * Creates a new tmp file on one of the available temp filesystems, registers it for deletion
-     * on JVM exit and then returns it.
-     */
-    private File newTempFile() throws IOException {
-        return IOUtil.newTempFile("sortingcollection.", ".tmp", this.tmpDirs, TMP_SPACE_FREE);
-    }
-
-    /**
-     * Prepare to iterate through the records in order.  This method may be called more than once,
-     * but add() may not be called after this method has been called.
-     */
-    public CloseableIterator<T> iterator() {
-        if (this.cleanedUp) {
-            throw new IllegalStateException("Cannot call iterator() after cleanup() was called.");
-        }
-        doneAdding();
-
-        this.iterationStarted = true;
-        if (this.files.isEmpty()) {
-            return new InMemoryIterator();
-        } else {
-            return new MergingIterator();
-        }
-    }
-
-    /**
-     * Delete any temporary files.  After this method is called, iterator() may not be called.
-     */
-    public void cleanup() {
-        this.iterationStarted = true;
-        this.cleanedUp = true;
-
-        IOUtil.deleteFiles(this.files);
-    }
-
-    /**
-     * Syntactic sugar around the ctor, to save some typing of type parameters
-     *
-     * @param componentType Class of the record to be sorted.  Necessary because of Java generic lameness.
-     * @param codec For writing records to file and reading them back into RAM
-     * @param comparator Defines output sort order
-     * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
-     * @param tmpDir Where to write files of records that will not fit in RAM
-     */
-    public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
-                                                       final SortingCollection.Codec<T> codec,
-                                                       final Comparator<T> comparator,
-                                                       final int maxRecordsInRAM,
-                                                       final File... tmpDir) {
-        return new SortingCollection<T>(componentType, codec, comparator, maxRecordsInRAM, tmpDir);
-
-    }
-
-    /**
-     * Syntactic sugar around the ctor, to save some typing of type parameters
-     *
-     * @param componentType Class of the record to be sorted.  Necessary because of Java generic lameness.
-     * @param codec For writing records to file and reading them back into RAM
-     * @param comparator Defines output sort order
-     * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
-     * @param tmpDirs Where to write files of records that will not fit in RAM
-     */
-    public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
-                                                       final SortingCollection.Codec<T> codec,
-                                                       final Comparator<T> comparator,
-                                                       final int maxRecordsInRAM,
-                                                       final Collection<File> tmpDirs) {
-        return new SortingCollection<T>(componentType,
-                                        codec,
-                                        comparator,
-                                        maxRecordsInRAM,
-                                        tmpDirs.toArray(new File[tmpDirs.size()]));
-
-    }
-
-
-    /**
-     * Syntactic sugar around the ctor, to save some typing of type parameters.  Writes files to java.io.tmpdir
-     *
-     * @param componentType Class of the record to be sorted.  Necessary because of Java generic lameness.
-     * @param codec For writing records to file and reading them back into RAM
-     * @param comparator Defines output sort order
-     * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
-     */
-    public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
-                                                       final SortingCollection.Codec<T> codec,
-                                                       final Comparator<T> comparator,
-                                                       final int maxRecordsInRAM) {
-
-        final File tmpDir = new File(System.getProperty("java.io.tmpdir"));
-        return new SortingCollection<T>(componentType, codec, comparator, maxRecordsInRAM, tmpDir);
-    }
-
-    /**
-     * For iteration when number of records added is less than the threshold for spilling to disk.
-     */
-    class InMemoryIterator implements CloseableIterator<T> {
-        private int iterationIndex = 0;
-
-        InMemoryIterator() {
-            Arrays.sort(SortingCollection.this.ramRecords,
-                        0,
-                        SortingCollection.this.numRecordsInRam,
-                        SortingCollection.this.comparator);
-        }
-
-        public void close() {
-            // nothing to do
-        }
-
-        public boolean hasNext() {
-            return this.iterationIndex < SortingCollection.this.numRecordsInRam;
-        }
-
-        public T next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            T ret = SortingCollection.this.ramRecords[iterationIndex];
-            if (destructiveIteration) SortingCollection.this.ramRecords[iterationIndex] = null;
-            ++iterationIndex;
-            return ret;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * For iteration when spilling to disk has occurred.
-     * Each file is has records in sort order within the file.
-     * This iterator automatically closes when it iterates to the end, but if not iterating
-     * to the end it is a good idea to call close().
-     *
-     * Algorithm: MergingIterator maintains a PriorityQueue of PeekFileRecordIterators.
-     * Each PeekFileRecordIterator iterates through a file in which the records are sorted.
-     * The comparator for PeekFileRecordIterator used by the PriorityQueue peeks at the next record from
-     * the file, so the first element in the PriorityQueue is the file that has the next record to be emitted.
-     * In order to get the next record, the first PeekFileRecordIterator in the PriorityQueue is popped,
-     * the record is obtained from that iterator, and then if that iterator is not empty, it is pushed back into
-     * the PriorityQueue.  Because it now has a different record as its next element, it may go into another
-     * location in the PriorityQueue
-     */
-    class MergingIterator implements CloseableIterator<T> {
-        private final TreeSet<PeekFileRecordIterator> queue;
-
-        MergingIterator() {
-            this.queue = new TreeSet<PeekFileRecordIterator>(new PeekFileRecordIteratorComparator());
-            int n = 0;
-            for (final File f : SortingCollection.this.files) {
-                final FileRecordIterator it = new FileRecordIterator(f);
-                if (it.hasNext()) {
-                    this.queue.add(new PeekFileRecordIterator(it, n++));
-                }
-                else {
-                    it.close();
-                }
-            }
-        }
-
-        public boolean hasNext() {
-            return !this.queue.isEmpty();
-        }
-
-        public T next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-
-            final PeekFileRecordIterator fileIterator = queue.pollFirst();
-            final T ret = fileIterator.next();
-            if (fileIterator.hasNext()) {
-                this.queue.add(fileIterator);
-            }
-            else {
-                ((CloseableIterator<T>)fileIterator.getUnderlyingIterator()).close();
-            }
-
-            return ret;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        public void close() {
-            while (!this.queue.isEmpty()) {
-                final PeekFileRecordIterator it = this.queue.pollFirst();
-                ((CloseableIterator<T>)it.getUnderlyingIterator()).close();
-            }
-        }
-    }
-
-    /**
-     * Read a file of records in format defined by the codec
-     */
-    class FileRecordIterator implements CloseableIterator<T> {
-        private final File file;
-        private final FileInputStream is;
-        private final Codec<T> codec;
-        private T currentRecord = null;
-
-        FileRecordIterator(final File file) {
-            this.file = file;
-            try {
-                this.is = new FileInputStream(file);
-                this.codec = SortingCollection.this.codec.clone();
-                this.codec.setInputStream(tempStreamFactory.wrapTempInputStream(this.is, Defaults.BUFFER_SIZE));
-                advance();
-            }
-            catch (FileNotFoundException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-
-        public boolean hasNext() {
-            return this.currentRecord != null;
-        }
-
-        public T next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            final T ret = this.currentRecord;
-            advance();
-            return ret;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        private void advance() {
-            this.currentRecord = this.codec.decode();
-        }
-
-        public void close() {
-            CloserUtil.close(this.is);
-        }
-    }
-
-
-    /**
-     * Just a typedef
-     */
-    class PeekFileRecordIterator extends PeekIterator<T> {
-        final int n; // A serial number used for tie-breaking in the sort
-        PeekFileRecordIterator(final Iterator<T> underlyingIterator, final int n) {
-            super(underlyingIterator);
-            this.n = n;
-        }
-    }
-
-    class PeekFileRecordIteratorComparator implements Comparator<PeekFileRecordIterator>, Serializable {
-        private static final long serialVersionUID = 1L;
-
-        public int compare(final PeekFileRecordIterator lhs, final PeekFileRecordIterator rhs) {
-            final int result = comparator.compare(lhs.peek(), rhs.peek());
-            if (result == 0) return lhs.n - rhs.n;
-            else return result;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/SortingLongCollection.java b/src/main/java/htsjdk/samtools/util/SortingLongCollection.java
deleted file mode 100644
index 4cf0c36..0000000
--- a/src/main/java/htsjdk/samtools/util/SortingLongCollection.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.PriorityQueue;
-
-/**
- * Accumulate a list of longs that can then be sorted in natural order and iterated over.
- * If there are more values accumulated than a specified maximum, values are spilled to disk.
- * <p/>
- * Note that because this class returns primitive longs rather than Longs, it does not conform to
- * any of the Collection iteration interfaces.  Use as follows:
- * <p/>
- * 1. ctor
- * 2. call add() as many times as desired.
- * 3. call doneAddingStartIteration().
- * 4. call hasNext() and next() until exhausted or had enough.
- * 5. optionally call cleanup() to free space in temporary directory as soon as possible.
- * <p/>
- * If there are few enough values so that they all can be kept in RAM, then the array is sorted
- * and iterated over trivially.
- * <p/>
- * If there are more values that can fit in RAM, then values are sorted and written to a temp file when the max
- * number to be stored in RAM is reached. Multiple temp files are then merged during iteration via PriorityQueue.
- * <p/>
- * c.f. SortingCollection for more details.
- *
- * @author alecw at broadinstitute.org
- */
-public class SortingLongCollection {
-    public static final int SIZEOF = 8;
-    public static final int MAX_ITEMS_IN_RAM = (int) Math.floor((Integer.MAX_VALUE / 8) * .999);
-
-    /**
-     * Where files of sorted values go.
-     */
-    private final File[] tmpDir;
-
-    private final int maxValuesInRam;
-    private int numValuesInRam = 0;
-    private long[] ramValues;
-
-
-    /**
-     * Set to true when done adding and ready to iterate
-     */
-    private boolean doneAdding = false;
-
-    /**
-     * Set to true when all temp files have been cleaned up
-     */
-    private boolean cleanedUp = false;
-
-    /**
-     * List of files in tmpDir containing sorted values
-     */
-    private final List<File> files = new ArrayList<File>();
-
-    // for in-memory iteration
-    private int iterationIndex = 0;
-
-    // For disk-based iteration
-    private PriorityQueue<PeekFileValueIterator> priorityQueue;
-
-    /**
-     * Prepare to accumulate values to be sorted
-     *
-     * @param maxValuesInRam how many values to accumulate before spilling to disk
-     * @param tmpDir         Where to write files of values that will not fit in RAM
-     */
-    public SortingLongCollection(final int maxValuesInRam, final File... tmpDir) {
-        if (maxValuesInRam <= 0) {
-            throw new IllegalArgumentException("maxValuesInRam must be > 0");
-        }
-        this.tmpDir = tmpDir;
-        this.maxValuesInRam = Math.min(maxValuesInRam, MAX_ITEMS_IN_RAM);
-        this.ramValues = new long[maxValuesInRam];
-    }
-
-    /**
-     * Add a value to the collection.
-     *
-     * @param value
-     */
-    public void add(final long value) {
-        if (doneAdding) {
-            throw new IllegalStateException("Cannot add after calling doneAddingStartIteration()");
-        }
-        if (numValuesInRam == maxValuesInRam) {
-            spillToDisk();
-        }
-        ramValues[numValuesInRam++] = value;
-    }
-
-    /**
-     * This method must be called after done adding, and before calling hasNext() or next().
-     */
-    public void doneAddingStartIteration() {
-        if (cleanedUp || doneAdding) {
-            throw new IllegalStateException("Cannot call doneAddingStartIteration() after cleanup() was called.");
-        }
-        doneAdding = true;
-
-        if (this.files.isEmpty()) {
-            Arrays.sort(this.ramValues, 0, this.numValuesInRam);
-            return;
-        }
-
-        if (this.numValuesInRam > 0) {
-            spillToDisk();
-        }
-
-        this.priorityQueue = new PriorityQueue<PeekFileValueIterator>(files.size(),
-                new PeekFileValueIteratorComparator());
-        for (final File f : files) {
-            final FileValueIterator it = new FileValueIterator(f);
-            if (it.hasNext()) {
-                this.priorityQueue.offer(new PeekFileValueIterator(it));
-            }
-        }
-
-        // Facilitate GC
-        this.ramValues = null;
-    }
-
-    /**
-     * Sort the values in memory, write them to a file, and clear the buffer of values in memory.
-     */
-    private void spillToDisk() {
-
-        try {
-            Arrays.sort(this.ramValues, 0, this.numValuesInRam);
-            final File f = IOUtil.newTempFile("sortingcollection.", ".tmp", this.tmpDir, IOUtil.FIVE_GBS);
-            DataOutputStream os = null;
-            try {
-                final long numBytes = this.numValuesInRam * SIZEOF;
-                os = new DataOutputStream(IOUtil.maybeBufferOutputStream(new FileOutputStream(f)));
-                f.deleteOnExit();
-                for (int i = 0; i < this.numValuesInRam; ++i) {
-                    os.writeLong(ramValues[i]);
-                }
-                os.flush();
-            } finally {
-                if (os != null) {
-                    os.close();
-                }
-            }
-
-            this.numValuesInRam = 0;
-            this.files.add(f);
-
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    /**
-     * Delete any temporary files.  After this method is called, no other method calls should be made on this object.
-     */
-    public void cleanup() {
-        this.doneAdding = true;
-        this.cleanedUp = true;
-        this.ramValues = null;
-
-        IOUtil.deleteFiles(this.files);
-    }
-
-
-    /**
-     * Call only after doneAddingStartIteration() has been called.
-     *
-     * @return true if there is another value to be gotten.
-     */
-    public boolean hasNext() {
-        if (!doneAdding || cleanedUp) {
-            throw new IllegalStateException();
-        }
-        if (this.ramValues != null) {
-            // in-memory iteration
-            return this.iterationIndex < numValuesInRam;
-        } else {
-            return !priorityQueue.isEmpty();
-        }
-    }
-
-    /**
-     * Call only if hasNext() == true.
-     *
-     * @return next value from collection, in natural sort order.
-     */
-    public long next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        if (this.ramValues != null) {
-            // in-memory iteration
-            return ramValues[iterationIndex++];
-        } else {
-
-            final PeekFileValueIterator fileIterator = priorityQueue.poll();
-            final long ret = fileIterator.next();
-            if (fileIterator.hasNext()) {
-                this.priorityQueue.offer(fileIterator);
-            } else {
-                fileIterator.close();
-            }
-            return ret;
-        }
-    }
-
-    /**
-     * Read a file of longs
-     */
-    private static class FileValueIterator {
-        private final File file;
-        private final DataInputStream is;
-        private long currentRecord = 0;
-        private boolean isCurrentRecord = true;
-
-        FileValueIterator(final File file) {
-            this.file = file;
-            try {
-                is = new DataInputStream(IOUtil.maybeBufferInputStream(new FileInputStream(file)));
-                next();
-            } catch (FileNotFoundException e) {
-                throw new RuntimeIOException(file.getAbsolutePath(), e);
-            }
-        }
-
-        boolean hasNext() {
-            return isCurrentRecord;
-        }
-
-        long next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            final long ret = currentRecord;
-            try {
-                currentRecord = is.readLong();
-            } catch (final EOFException eof) {
-                isCurrentRecord = false;
-                currentRecord = 0;
-            } catch (final IOException e) {
-                throw new RuntimeIOException(e);
-            }
-            return ret;
-        }
-
-        void close() {
-            CloserUtil.close(is);
-        }
-    }
-
-
-    /**
-     * Add peek() functionality to FileValueIterator
-     */
-    private static class PeekFileValueIterator {
-        private FileValueIterator underlyingIterator;
-        private long peekValue;
-        private boolean hasPeekedValue = false;
-
-        PeekFileValueIterator(final FileValueIterator underlyingIterator) {
-            this.underlyingIterator = underlyingIterator;
-        }
-
-        boolean hasNext() {
-            return hasPeekedValue || underlyingIterator.hasNext();
-        }
-
-        long next() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            if (hasPeekedValue) {
-                hasPeekedValue = false;
-                return peekValue;
-            }
-            return underlyingIterator.next();
-        }
-
-        long peek() {
-            if (!hasNext()) {
-                throw new NoSuchElementException();
-            }
-            if (!hasPeekedValue) {
-                peekValue = underlyingIterator.next();
-                hasPeekedValue = true;
-            }
-            return peekValue;
-        }
-
-        void close() {
-            underlyingIterator.close();
-            hasPeekedValue = false;
-            underlyingIterator = null;
-        }
-    }
-
-    private static class PeekFileValueIteratorComparator implements Comparator<PeekFileValueIterator>, Serializable {
-        private static final long serialVersionUID = 1L;
-
-        public int compare(final PeekFileValueIterator it1, final PeekFileValueIterator it2) {
-            if (it1.peek() < it2.peek()) {
-                return -1;
-            }
-            if (it1.peek() == it2.peek()) {
-                return 0;
-            }
-            return 1;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/StopWatch.java b/src/main/java/htsjdk/samtools/util/StopWatch.java
deleted file mode 100644
index 8e12916..0000000
--- a/src/main/java/htsjdk/samtools/util/StopWatch.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Utility to help in performance testing.
- */
-public class StopWatch {
-
-    private long startTime = 0;
-    private long elapsedTime = 0;
-    private boolean running = false;
-
-
-    public void start() {
-        this.startTime = System.currentTimeMillis();
-        this.running = true;
-    }
-
-
-    public void stop() {
-        long stopTime = System.currentTimeMillis();
-        elapsedTime += stopTime - startTime;
-        this.running = false;
-    }
-
-    public void reset() {
-        stop();
-        elapsedTime = 0;
-        startTime = 0;
-    }
-
-    /**
-     * Returns the cumulative time between all the start() and stop() calls made to this object.  If the
-     * StopWatch is currently running, also includes the time between the most recent start() and now.
-     * @return elapsedTime in milliseconds
-     */
-    public long getElapsedTime() {
-        final long currentElapsed;
-        if (running) {
-             currentElapsed = (System.currentTimeMillis() - startTime);
-        } else {
-            currentElapsed = 0;
-        }
-        return currentElapsed + elapsedTime;
-    }
-
-
-    /**
-     * @return same as getElapsedTime(), but truncated to seconds.
-     */
-    public long getElapsedTimeSecs() {
-        return getElapsedTime() / 1000;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/StringLineReader.java b/src/main/java/htsjdk/samtools/util/StringLineReader.java
deleted file mode 100644
index ed383a2..0000000
--- a/src/main/java/htsjdk/samtools/util/StringLineReader.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import java.util.regex.Pattern;
-
-/**
- * Implementation of LineReader that gets its input from a String.  No charset conversion
- * is necessary because the String is in unicode.  Handles CR, LF or CRLF line termination,
- * but if asked to return the line terminator, it always comes back as LF.
- */
-public class StringLineReader implements LineReader {
-    private static final Pattern CRLF = Pattern.compile("\r\n");
-    private final String theString;
-    private int curPos = 0;
-    private int lineNumber = 0;
-
-    public StringLineReader(final String s) {
-        // Simplify later processing by replacing crlf with just lf, and replacing solo cr with lf.
-        // Note that String.replace(String, String) causes a regex to be used, so precompilation should be
-        // the best we can do short of handling the string directly.
-        this.theString = CRLF.matcher(s).replaceAll("\n").replace('\r', '\n');
-    }
-
-    /**
-     * Read a line and remove the line terminator
-     */
-    public String readLine() {
-        return readLine(false);
-    }
-
-    /**
-     * Read a line and optionally include the line terminator
-     *
-     * @param includeTerminators
-     * @return the next line from the input, with \n terminator if present and requested, or null if no more input.
-     */
-    private String readLine(final boolean includeTerminators) {
-        if (curPos == theString.length()) {
-            return null;
-        }
-        final int nextLfIndex = theString.indexOf('\n', curPos);
-        if (nextLfIndex == -1) {
-            final int startPos = curPos;
-            curPos = theString.length();
-            ++lineNumber;
-            return theString.substring(startPos);
-        }
-        final int startPos = curPos;
-        final int endPos = nextLfIndex + (includeTerminators? 1: 0);
-        curPos = nextLfIndex + 1;
-        ++lineNumber;
-        return theString.substring(startPos, endPos);
-    }
-
-    /**
-     * @return 1-based number of line most recently read
-     */
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Non-destructive one-character look-ahead.
-     *
-     * @return If not eof, the next character that would be read.  If eof, -1.
-     */
-    public int peek() {
-        if (curPos == theString.length()) {
-            return -1;
-        }
-        return theString.charAt(curPos);
-    }
-
-    public void close() {
-        curPos = theString.length();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/StringUtil.java b/src/main/java/htsjdk/samtools/util/StringUtil.java
deleted file mode 100644
index 9049253..0000000
--- a/src/main/java/htsjdk/samtools/util/StringUtil.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Grab-bag of stateless String-oriented utilities.
- */
-public class StringUtil {
-    private static final byte UPPER_CASE_OFFSET = 'A' - 'a';
-
-    /**
-     * @param separator String to interject between each string in strings arg
-     * @param objs List of objs to be joined
-     * @return String that concatenates the result of each item's to String method for all items in objs, with separator between each of them.
-     */
-    public static <T> String join(final String separator, final Collection<T> objs) {
-        if (objs.isEmpty()) {
-            return "";
-        }
-
-        boolean notFirst = false;
-
-        final StringBuilder ret = new StringBuilder();
-        for (final Object obj : objs) {
-            if(notFirst) {
-                ret.append(separator);
-            }
-            ret.append(obj.toString());
-            notFirst = true;
-        }
-        return ret.toString();
-    }
-
-    public static <T> String join(final String separator, final T... objs) {
-        final List<T> values = Arrays.asList(objs);
-        return join(separator, values);
-    }
-
-
-    /**
-     * Split the string into tokens separated by the given delimiter.  Profiling has
-     * revealed that the standard string.split() method typically takes > 1/2
-     * the total time when used for parsing ascii files.
-     * Note that if tokens arg is not large enough to all the tokens in the string, excess tokens are discarded.
-     *
-     * @param aString  the string to split
-     * @param tokens an array to hold the parsed tokens
-     * @param delim  character that delimits tokens
-     * @return the number of tokens parsed
-     */
-    public static int split(final String aString, final String[] tokens, final char delim) {
-
-        final int maxTokens = tokens.length;
-        int nTokens = 0;
-        int start = 0;
-        int end = aString.indexOf(delim);
-        if(end < 0) {
-            tokens[nTokens++] = aString;
-            return nTokens;
-        }
-        while ((end >= 0) && (nTokens < maxTokens))
-        {
-            tokens[nTokens++] = aString.substring(start, end);
-            start = end + 1;
-            end = aString.indexOf(delim, start);
-
-        }
-        // Add the trailing string,  if there is room and if it is not empty.
-        if (nTokens < maxTokens)
-        {
-            final String trailingString = aString.substring(start);
-            if (!trailingString.isEmpty())
-            {
-                tokens[nTokens++] = trailingString;
-            }
-        }
-        return nTokens;
-    }
-
-    /**
-     * Split the string into tokens separated by the given delimiter.  Profiling has
-     * revealed that the standard string.split() method typically takes > 1/2
-     * the total time when used for parsing ascii files.
-     * Note that the string is split into no more elements than tokens arg will hold, so the final tokenized
-     * element may contain delimiter chars.
-     *
-     * @param aString  the string to split
-     * @param tokens an array to hold the parsed tokens
-     * @param delim  character that delimits tokens
-     * @return the number of tokens parsed
-     */
-    public static int splitConcatenateExcessTokens(final String aString, final String[] tokens, final char delim) {
-
-        final int maxTokens = tokens.length;
-        int nTokens = 0;
-        int start = 0;
-        int end = aString.indexOf(delim);
-        if(end < 0) {
-            tokens[nTokens++] = aString;
-            return nTokens;
-        }
-        while ((end >= 0) && (nTokens < maxTokens - 1))
-        {
-            tokens[nTokens++] = aString.substring(start, end);
-            start = end + 1;
-            end = aString.indexOf(delim, start);
-
-        }
-        // Add the trailing string,  if it is not empty.
-        final String trailingString = aString.substring(start);
-        if (!trailingString.isEmpty())
-        {
-            tokens[nTokens++] = trailingString;
-        }
-        return nTokens;
-    }
-
-    /**
-     * @param b ASCII character
-     * @return lowercase version of arg if it was uppercase, otherwise returns arg
-     */
-    public static byte toLowerCase(final byte b) {
-        if (b < 'A' || b > 'Z') {
-            return b;
-        }
-        return (byte)(b - UPPER_CASE_OFFSET);
-    }
-
-    /**
-     * @param b ASCII character
-     * @return uppercase version of arg if it was lowercase, otherwise returns arg
-     */
-    public static byte toUpperCase(final byte b) {
-        if (b < 'a' || b > 'z') {
-            return b;
-        }
-        return (byte)(b + UPPER_CASE_OFFSET);
-    }
-
-    /**
-     * Converts in place all lower case letters to upper case in the byte array provided.
-     */
-    public static void toUpperCase(final byte[] bytes) {
-        final int length = bytes.length;
-        for (int i=0; i<length; ++i) {
-            if (bytes[i] >= 'a' && bytes[i] <= 'z') {
-                bytes[i] = (byte) (bytes[i] + UPPER_CASE_OFFSET);
-            }
-        }
-    }
-
-
-    /**
-     * Checks that a String doesn't contain one or more characters of interest.
-     *
-     * @param illegalChars the String to check
-     * @param chars the characters to check for
-     * @return String the input String for convenience
-     * @throws IllegalArgumentException if the String contains one or more of the characters
-     */
-    public static String assertCharactersNotInString(final String illegalChars, final char... chars) {
-        for (final char illegalChar : illegalChars.toCharArray()) {
-            for (final char ch: chars) {
-                if (illegalChar == ch) {
-                    throw new IllegalArgumentException("Supplied String contains illegal character '" + illegalChar + "'.");
-                }
-            }
-        }
-
-        return illegalChars;
-    }
-
-    /**
-     * Return input string with newlines inserted to ensure that all lines
-     * have length <= maxLineLength.  if a word is too long, it is simply broken
-     * at maxLineLength.  Does not handle tabs intelligently (due to implementer laziness).
-     */
-    public static String wordWrap(final String s, final int maxLineLength) {
-        final String[] lines = s.split("\n");
-        final StringBuilder sb = new StringBuilder();
-        for (final String line: lines) {
-            if (sb.length() > 0) {
-                sb.append('\n');
-            }
-            sb.append(wordWrapSingleLine(line, maxLineLength));
-        }
-        if (s.endsWith("\n")) {
-            sb.append('\n');
-        }
-        return sb.toString();
-    }
-
-    public static String wordWrapSingleLine(final String s, final int maxLineLength) {
-        if (s.length() <= maxLineLength) {
-            return s;
-        }
-        final StringBuilder sb = new StringBuilder();
-        int startCopyFrom = 0;
-        while (startCopyFrom < s.length()) {
-            int lastSpaceIndex = startCopyFrom;
-            int i;
-            // Find break point (if it exists)
-            for (i = startCopyFrom; i < s.length() && i - startCopyFrom < maxLineLength; ++i) {
-                if (Character.isWhitespace(s.charAt(i))) {
-                    lastSpaceIndex = i;
-                }
-            }
-            if (i - startCopyFrom < maxLineLength) {
-                lastSpaceIndex = i;
-            }
-            // Include any trailing whitespace
-            for (; lastSpaceIndex < s.length() && Character.isWhitespace(s.charAt(lastSpaceIndex)); ++lastSpaceIndex) {}
-            if (sb.length() > 0) {
-                sb.append('\n');
-            }
-            // Handle situation in which there is no word break.  Just break the word in the middle.
-            if (lastSpaceIndex == startCopyFrom) {
-                lastSpaceIndex = i;
-            }
-            sb.append(s.substring(startCopyFrom, lastSpaceIndex));
-            startCopyFrom = lastSpaceIndex;
-        }
-        return sb.toString();
-    }
-
-
-    public static String intValuesToString(final int[] intVals) {
-        final StringBuilder sb = new StringBuilder(intVals.length);
-        if(intVals.length > 0) {
-            sb.append(String.valueOf(intVals[0]));
-            for(int i = 1; i < intVals.length; i++) {
-                sb.append(", ");
-                sb.append(String.valueOf(intVals[i]));
-            }
-        }
-
-        return sb.toString();
-    }
-
-    public static String intValuesToString(final short[] shortVals) {
-        final StringBuilder sb = new StringBuilder(shortVals.length);
-        if(shortVals.length > 0) {
-            sb.append(String.valueOf(shortVals[0]));
-            for(int i = 1; i < shortVals.length; i++) {
-                sb.append(", ");
-                sb.append(String.valueOf(shortVals[i]));
-            }
-        }
-
-        return sb.toString();
-    }
-
-    ////////////////////////////////////////////////////////////////////
-    // The following methods all convert btw bytes and Strings, without
-    // using the Java character set mechanism.
-    ////////////////////////////////////////////////////////////////////
-
-    public static String bytesToString(final byte[] data) {
-        if (data == null) {
-            return null;
-        }
-        return bytesToString(data, 0, data.length);
-    }
-
-    @SuppressWarnings("deprecation")
-    public static String bytesToString(final byte[] buffer, final int offset, final int length) {
-/*
-        The non-deprecated way, that requires allocating char[]
-        final char[] charBuffer = new char[length];
-        for (int i = 0; i < length; ++i) {
-            charBuffer[i] = (char)buffer[i+offset];
-        }
-        return new String(charBuffer);
-*/
-        return new String(buffer, 0, offset, length);
-    }
-
-    @SuppressWarnings("deprecation")
-    public static byte[] stringToBytes(final String s) {
-/*
-        The non-deprecated way, that requires allocating char[]
-        final byte[] byteBuffer = new byte[s.length()];
-        final char[] charBuffer = s.toCharArray();
-        for (int i = 0; i < charBuffer.length; ++i) {
-            byteBuffer[i] = (byte)(charBuffer[i] & 0xff);
-        }
-        return byteBuffer;
-*/
-        final byte[] byteBuffer = new byte[s.length()];
-        s.getBytes(0, byteBuffer.length, byteBuffer, 0);
-        return byteBuffer;
-    }
-
-    @SuppressWarnings("deprecation")
-    public static byte[] stringToBytes(final String s, final int offset, final int length) {
-        final byte[] byteBuffer = new byte[length];
-        s.getBytes(offset, offset + length, byteBuffer, 0);
-        return byteBuffer;
-    }
-
-    // This method might more appropriately live in BinaryCodec, but all the byte <=> char conversion
-    // should be in the same place.
-    public static String readNullTerminatedString(final BinaryCodec binaryCodec) {
-        final StringBuilder ret = new StringBuilder();
-        for (byte b = binaryCodec.readByte(); b != 0; b = binaryCodec.readByte()) {
-            ret.append((char)(b & 0xff));
-        }
-        return ret.toString();
-    }
-
-    /**
-     * Convert chars to bytes merely by casting
-     * @param chars input chars
-     * @param charOffset where to start converting from chars array
-     * @param length how many chars to convert
-     * @param bytes where to put the converted output
-     * @param byteOffset where to start writing the converted output.
-     */
-    public static void charsToBytes(final char[] chars, final int charOffset, final int length,
-                                    final byte[] bytes, final int byteOffset) {
-        for (int i = 0; i < length; ++i) {
-            bytes[byteOffset + i] = (byte)chars[charOffset + i];
-        }
-    }
-
-    /**
-     * Convert ASCII char to byte.
-     */
-    public static byte charToByte(final char c) {
-        return (byte)c;
-    }
-
-    /**
-     * Convert ASCII byte to ASCII char.
-     */
-    public static char byteToChar(final byte b) {
-        return (char)(b & 0xff);
-    }
-
-    /**
-     * Convert a byte array into a String hex representation.
-     * @param data Input to be converted.
-     * @return String twice as long as data.length with hex representation of data.
-     */
-    public static String bytesToHexString(final byte[] data) {
-        final char[] chars = new char[2 * data.length];
-        for (int i = 0; i < data.length; i++) {
-            final byte b = data[i];
-            chars[2*i] = toHexDigit((b >> 4) & 0xF);
-            chars[2*i+1] = toHexDigit(b & 0xF);
-        }
-        return new String(chars);
-    }
-
-    /**
-     * Convert a String containing hex characters into an array of bytes with the binary representation
-     * of the hex string
-     * @param s Hex string.  Length must be even because each pair of hex chars is converted into a byte.
-     * @return byte array with binary representation of hex string.
-     * @throws NumberFormatException
-     */
-    public static byte[] hexStringToBytes(final String s)  throws NumberFormatException {
-        if (s.length() % 2 != 0) {
-            throw new NumberFormatException("Hex representation of byte string does not have even number of hex chars: " + s);
-        }
-        final byte[] ret = new byte[s.length() / 2];
-        for (int i = 0; i < ret.length; ++i) {
-            ret[i] = (byte) ((fromHexDigit(s.charAt(i * 2)) << 4) | fromHexDigit(s.charAt(i * 2 + 1)));
-        }
-        return ret;
-    }
-
-    public static char toHexDigit(final int value) {
-        return (char) ((value < 10) ? ('0' + value) : ('A' + value - 10));
-    }
-
-    public static int fromHexDigit(final char c) throws NumberFormatException {
-        final int ret = Character.digit(c, 16);
-        if (ret == -1) {
-            throw new NumberFormatException("Not a valid hex digit: " + c);
-        }
-        return ret;
-    }
-
-    /**
-     * Reverse the given string.  Does not check for null.
-     * @param s String to be reversed.
-     * @return New string that is the reverse of the input string.
-     */
-    public static String reverseString(final String s) {
-        final StringBuilder sb = new StringBuilder(s);
-        sb.reverse();
-        return sb.toString();
-    }
-
-    /**
-     * <p>Checks if a String is whitespace, empty ("") or null.</p>
-     *
-     * <pre>
-     * StringUtils.isBlank(null)      = true
-     * StringUtils.isBlank("")        = true
-     * StringUtils.isBlank(" ")       = true
-     * StringUtils.isBlank("sam")     = false
-     * StringUtils.isBlank("  sam  ") = false
-     * </pre>
-     *
-     * @param str  the String to check, may be null
-     * @return <code>true</code> if the String is null, empty or whitespace
-     */
-    public static boolean isBlank(String str) {
-        int strLen;
-        if (str == null || (strLen = str.length()) == 0) {
-            return true;
-        }
-        for (int i = 0; i < strLen; i++) {
-            if (!Character.isWhitespace(str.charAt(i)) ) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-     /* <p>Generates a string of one character to a specified length</p>
-     *
-     * @param c  the Character to repeat
-     * @param repeatNumber the number of times to repeat the character
-     * @return String with the character c repeated repeatNumber times
-     */
-    public static String repeatCharNTimes(char c, int repeatNumber) {
-        char[] output = new char[repeatNumber];
-        Arrays.fill(output, c);
-        return String.valueOf(output);
-    }
-
-    /** Returns {@link Object#toString()} of the provided value if it isn't null; "" otherwise. */
-    public static final String EMPTY_STRING = "";
-    public static String asEmptyIfNull(final Object string) {
-        return string == null ? EMPTY_STRING : string.toString();
-    }
-
-    /*
-    * This is from GIT!
-    *  This function implements the Damerau-Levenshtein algorithm to
-    * calculate a distance between strings.
-    *
-    * Basically, it says how many letters need to be swapped, substituted,
-    * deleted from, or added to string1, at least, to get string2.
-    *
-    * The idea is to build a distance matrix for the substrings of both
-    * strings.  To avoid a large space complexity, only the last three rows
-    * are kept in memory (if swaps had the same or higher cost as one deletion
-    * plus one insertion, only two rows would be needed).
-    *
-    * At any stage, "i + 1" denotes the length of the current substring of
-    * string1 that the distance is calculated for.
-    *
-    * row2 holds the current row, row1 the previous row (i.e. for the substring
-    * of string1 of length "i"), and row0 the row before that.
-    *
-    * In other words, at the start of the big loop, row2[j + 1] contains the
-    * Damerau-Levenshtein distance between the substring of string1 of length
-    * "i" and the substring of string2 of length "j + 1".
-    *
-    * All the big loop does is determine the partial minimum-cost paths.
-    *
-    * It does so by calculating the costs of the path ending in characters
-    * i (in string1) and j (in string2), respectively, given that the last
-    * operation is a substitution, a swap, a deletion, or an insertion.
-    *
-    * This implementation allows the costs to be weighted:
-    *
-    * Note that this algorithm calculates a distance _iff_ d == a.
-    */
-    public static int levenshteinDistance(final String string1, final String string2, int swap, int substitution, int insertion, int deletion) {
-        int i, j;
-
-        int[] row0 = new int[(string2.length() + 1)];
-        int[] row1 = new int[(string2.length() + 1)];
-        int[] row2 = new int[(string2.length() + 1)];
-        int[] dummy;
-
-        final byte[] str1 = string1.getBytes();
-        final byte[] str2 = string2.getBytes();
-
-        for (j = 0; j < str2.length; j++) {
-            row1[j] = j * insertion;
-        }
-        for (i = 0; i < str1.length; i++) {
-            row2[0] = (i + 1) * deletion;
-            for (j = 0; j < str2.length; j++) {
-                /* substitution */
-                row2[j + 1] = row1[j];
-                if (str1[i] != str2[j]) {
-                    row2[j + 1] += substitution;
-                }
-                /* swap */
-                if (i > 0 && j > 0 && str1[i - 1] == str2[j] &&
-                        str1[i] == str2[j - 1] &&
-                        row2[j + 1] > row0[j - 1] + swap) {
-                    row2[j + 1] = row0[j - 1] + swap;
-                }
-                /* deletion */
-                if (row2[j + 1] > row1[j + 1] + deletion) {
-                    row2[j + 1] = row1[j + 1] + deletion;
-                }
-                /* insertion */
-                if (row2[j + 1] > row2[j] + insertion) {
-                    row2[j + 1] = row2[j] + insertion;
-                }
-            }
-
-            dummy = row0;
-            row0 = row1;
-            row1 = row2;
-            row2 = dummy;
-        }
-
-        i = row1[str2.length];
-
-        return i;
-    }
-
-    /**
-     * Calculates the Hamming distance (number of character mismatches) between two strings s1 and s2.
-     * Since Hamming distance is not defined for strings of differing lengths, we throw an exception if
-     * the two strings are of different lengths.  Hamming distance is case sensitive and does not have
-     * any special treatment for DNA.
-     *
-     * @param s1 The first string to compare
-     * @param s2 The second string to compare, note that if s1 and s2 are swapped the value returned will be identical.
-     * @return Hamming distance between s1 and s2.
-     * @throws IllegalArgumentException If the two strings have differing lengths.
-     */
-    public static int hammingDistance(final String s1, final String s2) {
-        if (s1.length() != s2.length()) {
-            throw new IllegalArgumentException("Attempted to determine Hamming distance of strings with differing lengths. " +
-                    "The first string has length " + s1.length() + " and the second string has length " + s2.length() + ".");
-        }
-        int measuredDistance = 0;
-        for (int i = 0;i < s1.length();i++) {
-            if (s1.charAt(i) != s2.charAt(i)) {
-                measuredDistance++;
-            }
-        }
-        return measuredDistance;
-    }
-
-    /**
-     * Determines if two strings s1 and s2 are within maxHammingDistance of each other using the Hamming distance metric.
-     * Since Hamming distance is not defined for strings of differing lengths, we throw an exception if
-     * the two strings are of different lengths.  Hamming distance is case sensitive and does not have any
-     * special treatment for DNA.
-     *
-     * @param s1 The first string to compare
-     * @param s2 The second string to compare, note that if s1 and s2 are swapped the value returned will be identical.
-     * @param maxHammingDistance The largest Hamming distance the strings can have for this function to return true.
-     * @return true if the two strings are within maxHammingDistance of each other, false otherwise.
-     * @throws IllegalArgumentException If the two strings have differing lengths.
-     */
-    public static boolean isWithinHammingDistance(final String s1, final String s2, final int maxHammingDistance) {
-        if (s1.length() != s2.length()) {
-            throw new IllegalArgumentException("Attempted to determine if two strings of different length were within a specified edit distance.");
-        }
-        int measuredDistance = 0;
-        for (int i = 0;i < s1.length();i++) {
-            if (s1.charAt(i) != s2.charAt(i)) {
-                measuredDistance++;
-                // If the measuredDistance is larger than the maxHammingDistance we can short circuit and return
-                // false, there is no need to continue evaluating the distance.
-                if (measuredDistance > maxHammingDistance) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/TempStreamFactory.java b/src/main/java/htsjdk/samtools/util/TempStreamFactory.java
deleted file mode 100644
index 0915037..0000000
--- a/src/main/java/htsjdk/samtools/util/TempStreamFactory.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Factory class for wrapping input and output streams for temporary files.  If available, Snappy is used to
- * compress output files.  Therefore, if a temporary output file is written with an output stream obtained
- * from this class, it must be read by an input stream created by this class, otherwise a file written with
- * compression will not be read with decompression.
- */
-public class TempStreamFactory {
-    private static SnappyLoader snappyLoader = null;
-
-    private static synchronized SnappyLoader getSnappyLoader() {
-        if (snappyLoader == null) snappyLoader = new SnappyLoader();
-        return snappyLoader;
-    }
-
-    /**
-     * Wrap the given InputStream in a SnappyInputStream if available.
-     * @return If Snappy is available, a SnappyInputStream wrapping inputStream.
-     * If not, and bufferSize > 0, a BufferedInputStream.
-     * Otherwise inputStream is returned.
-     */
-    public InputStream wrapTempInputStream(final InputStream inputStream, final int bufferSize) {
-        InputStream is = IOUtil.maybeBufferInputStream(inputStream, bufferSize);
-        if (getSnappyLoader().SnappyAvailable) {
-            try {
-                return getSnappyLoader().wrapInputStream(is);
-            } catch (Exception e) {
-                throw new SAMException("Error creating SnappyInputStream", e);
-            }
-        } else {
-            return is;
-        }
-    }
-
-    /**
-     * Wrap the given OutputStream in a SnappyOutputStream if available.
-     * @return If Snappy is available, a SnappyOutputStream wrapping outputStream.
-     * If not, and bufferSize > 0, a BufferedOutputStream.
-     * Otherwise outputStream is returned.
-     */
-    public OutputStream wrapTempOutputStream(final OutputStream outputStream, final int bufferSize) {
-        OutputStream os = outputStream;
-        if (bufferSize > 0) os = new BufferedOutputStream(os, bufferSize);
-        if (getSnappyLoader().SnappyAvailable) {
-            try {
-                os = getSnappyLoader().wrapOutputStream(os);
-            } catch (Exception e) {
-                throw new SAMException("Error creating SnappyOutputStream", e);
-            }
-        }
-        return os;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/TestUtil.java b/src/main/java/htsjdk/samtools/util/TestUtil.java
deleted file mode 100644
index fd840d1..0000000
--- a/src/main/java/htsjdk/samtools/util/TestUtil.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.*;
-
-public class TestUtil {
-
-    /**
-     * Base url where all test files for http tests are found
-     */
-    public static final String BASE_URL_FOR_HTTP_TESTS = "https://personal.broadinstitute.org/picard/testdata/";
-
-    public static File getTempDirectory(final String prefix, final String suffix) {
-        final File tempDirectory;
-        try {
-            tempDirectory = File.createTempFile(prefix, suffix);
-        } catch (IOException e) {
-            throw new SAMException("Failed to create temporary file.", e);
-        }
-        if (!tempDirectory.delete())
-            throw new SAMException("Failed to delete file: " + tempDirectory);
-        if (!tempDirectory.mkdir())
-            throw new SAMException("Failed to make directory: " + tempDirectory);
-        tempDirectory.deleteOnExit();
-        return tempDirectory;
-    }
-
-    /**
-     * @deprecated Use properly spelled method. {@link #getTempDirectory}
-     */
-    @Deprecated
-    public static File getTempDirecory(final String prefix, final String suffix) {
-        return getTempDirectory(prefix, suffix);
-    }
-
-        /**
-         * Little test utility to help tests that create multiple levels of subdirectories
-         * clean up after themselves.
-         *
-         * @param directory The directory to be deleted (along with its subdirectories)
-         */
-    public static void recursiveDelete(final File directory) {
-        for (final File f : directory.listFiles()) {
-            if (f.isDirectory()) {
-                recursiveDelete(f);
-            }
-            f.delete();
-        }
-    }
-
-    /**
-     * Serialize and Deserialize an object
-     * Useful for testing if serialization is correctly handled for a class.
-     * @param input an object to serialize and then deserialize
-     * @param <T> any Serializable type
-     * @return a copy of the initial object
-     * @throws IOException
-     * @throws ClassNotFoundException
-     */
-    public static <T extends Serializable> T serializeAndDeserialize(T input) throws IOException, ClassNotFoundException {
-        final ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
-        final ObjectOutputStream out = new ObjectOutputStream(byteArrayStream);
-
-        out.writeObject(input);
-        final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteArrayStream.toByteArray()));
-
-        @SuppressWarnings("unchecked")
-        final T result = (T) in.readObject();
-
-        out.close();
-        in.close();
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/TrimmingUtil.java b/src/main/java/htsjdk/samtools/util/TrimmingUtil.java
deleted file mode 100644
index 06667d3..0000000
--- a/src/main/java/htsjdk/samtools/util/TrimmingUtil.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-/**
- * Utility code for performing quality trimming.
- *
- * @author Tim Fennell
- */
-public class TrimmingUtil {
-    /**
-     * Implements phred-style quality trimming. Takes in an array of quality values as a
-     * byte[] and return the first index within the byte array that should be clipped,
-     * such that the caller can then invoke things like:
-     *     int retval = findQualityTrimPoint(10, quals);
-     *     final byte[] trimmedQuals = Arrays.copyOfRange(quals, 0, retval);
-     *     final String trimmedBases = bases.substring(0, retval);
-     *
-     * If the entire read is of low quality this function may return 0!  It is left to the caller
-     * to decide whether or not to trim reads down to 0-bases, or to enforce some minimum length.
-     *
-     * @param quals a byte[] of quality scores in phred scaling (i.e. integer values between 0 and ~60)
-     * @param trimQual the lowest quality that is considered "good". In the simplest case
-     *                 where a read is composed exclusively of "good" qualities followed by
-     *                 "bad" qualities, this is the lowest quality value left after trimming.
-     * @return The zero-based index of the first base within the quality string that should be trimmed.
-     *         When no trimming is required, quals.length (i.e. an index one greater than the last valid
-     *         index) will be returned.
-     */
-    public static int findQualityTrimPoint(final byte[] quals, final int trimQual) {
-        final int length = quals.length;
-        int score = 0, maxScore = 0, trimPoint = length;
-        if (trimQual < 1 || length == 0) return 0;
-
-        for (int i=length-1; i>=0; --i) {
-            score += trimQual - (quals[i]);
-            if (score < 0) break;
-            if (score > maxScore) {
-                maxScore = score;
-                trimPoint = i;
-            }
-        }
-
-        return trimPoint;
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/Tuple.java b/src/main/java/htsjdk/samtools/util/Tuple.java
deleted file mode 100644
index 2177920..0000000
--- a/src/main/java/htsjdk/samtools/util/Tuple.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package htsjdk.samtools.util;
-
-/**
- * A simple tuple class.
- *
- * @author mccowan
- */
-public class Tuple<A, B> {
-    public final A a;
-    public final B b;
-
-    public Tuple(final A a, final B b) {
-        this.a = a;
-        this.b = b;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final Tuple<?, ?> tuple = (Tuple<?, ?>) o;
-
-        if (a != null ? !a.equals(tuple.a) : tuple.a != null) return false;
-
-        return !(b != null ? !b.equals(tuple.b) : tuple.b != null);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = a != null ? a.hashCode() : 0;
-        result = 31 * result + (b != null ? b.hashCode() : 0);
-
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return "[" + a + ", " + b + "]";
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/WholeGenomeReferenceSequenceMask.java b/src/main/java/htsjdk/samtools/util/WholeGenomeReferenceSequenceMask.java
deleted file mode 100644
index 1263285..0000000
--- a/src/main/java/htsjdk/samtools/util/WholeGenomeReferenceSequenceMask.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceRecord;
-
-/**
- * Implementation of ReferenceSequenceMask that indicates that all the loci in the sequence dictionary are of interest.
- * @author alecw at broadinstitute dot org
- */
-public class WholeGenomeReferenceSequenceMask implements ReferenceSequenceMask {
-
-    SAMFileHeader header;
-
-    public WholeGenomeReferenceSequenceMask(final SAMFileHeader header) {
-        this.header = header;
-    }
-
-    /**
-     * @return true if the mask is set for the given sequence and position
-     */
-    public boolean get(final int sequenceIndex, final int position) {
-        if (sequenceIndex < 0) {
-            throw new IllegalArgumentException("Negative sequence index " + sequenceIndex);
-        }
-        if (sequenceIndex >= header.getSequenceDictionary().size()) {
-            return false;
-        }
-        final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceIndex);
-        return position <= sequenceRecord.getSequenceLength();
-    }
-
-    /**
-     * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
-     */
-    public int nextPosition(final int sequenceIndex, final int position) {
-        if (get(sequenceIndex, position + 1)) {
-            return position + 1;
-        } else {
-            return -1;
-        }
-    }
-
-    /**
-     * @return Largest sequence index for which there are set bits.
-     */
-    public int getMaxSequenceIndex() {
-        return header.getSequenceDictionary().size() - 1;
-    }
-
-    /**
-     * @return the largest position on the last sequence index
-     */
-    public int getMaxPosition() {
-        SAMSequenceRecord lastSequenceRecord = header.getSequence(getMaxSequenceIndex());
-        return lastSequenceRecord.getSequenceLength();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ftp/FTPClient.java b/src/main/java/htsjdk/samtools/util/ftp/FTPClient.java
deleted file mode 100644
index 3af6deb..0000000
--- a/src/main/java/htsjdk/samtools/util/ftp/FTPClient.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTIES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.util.ftp;
-
-import htsjdk.samtools.SAMException;
-
-import java.io.BufferedReader;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.net.Socket;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-
-/**
- * @author jrobinso
- * @date Oct 30, 2010
- */
-public class FTPClient {
-
-    private Socket commandSocket = null;
-
-    public static int READ_TIMEOUT = 5 * 60 * 1000;
-
-    /**
-     * Stream to write commands.
-     * NOTE -- a PrintStream is used no purpose (as opposed to PrintWriter).  PrintWriter will not work!
-     */
-    private PrintStream commandStream = null;
-    private BufferedReader responseReader = null;
-    private InputStream dataStream;
-    private String passiveHost;
-    private int passivePort;
-    long restPosition = -1;
-    String host;
-
-    /**
-     * Connects to the given FTP host on the default port.
-     */
-    public FTPReply connect(String host) throws IOException {
-        this.host = host;
-        commandSocket = new Socket(host, 21);
-        commandSocket.setSoTimeout(READ_TIMEOUT);
-        commandStream = new PrintStream(commandSocket.getOutputStream());
-        responseReader = new BufferedReader(new InputStreamReader(commandSocket.getInputStream()));
-
-        FTPReply reply = new FTPReply(responseReader);
-
-        if (!reply.isPositiveCompletion()) {
-            disconnect();
-        }
-
-        return reply;
-    }
-
-
-    /**
-     * Executes the given FTP command on our current connection, returning the
-     * three digit response code from the server.  This method only works for
-     * commands that do not require an additional data port.
-     */
-    public FTPReply executeCommand(String command) throws IOException {
-        commandStream.println(command);
-        return new FTPReply(responseReader);
-    }
-
-
-    /**
-     * Wrapper for the commands <code>user [username]</code> and <code>pass
-     * [password]</code>.
-     */
-    public FTPReply login(String username, String password) throws IOException {
-        FTPReply response = executeCommand("user " + username);
-        if (!response.isPositiveIntermediate()) return response;
-        response = executeCommand("pass " + password);
-        return response;
-    }
-
-    public FTPReply quit() throws IOException {
-        return executeCommand("QUIT");
-    }
-
-    public FTPReply binary() throws IOException {
-        return executeCommand("TYPE I");
-    }
-
-
-    public FTPReply pasv() throws IOException {
-
-        FTPReply reply = executeCommand("PASV");
-
-        if (reply.getCode() == 226 || reply.getCode() == 426) {
-            reply = getReply();
-        }
-
-        String response = reply.getReplyString();
-
-
-        int code = reply.getCode();
-
-        int opening = response.indexOf('(');
-        int closing = response.indexOf(')', opening + 1);
-        if (closing > 0) {
-            String dataLink = response.substring(opening + 1, closing);
-            StringTokenizer tokenizer = new StringTokenizer(dataLink, ",");
-            try {
-                passiveHost = tokenizer.nextToken() + "." + tokenizer.nextToken() + "."
-                        + tokenizer.nextToken() + "." + tokenizer.nextToken();
-                passivePort = Integer.parseInt(tokenizer.nextToken()) * 256
-                        + Integer.parseInt(tokenizer.nextToken());
-            } catch (NumberFormatException e) {
-                throw new IOException("SimpleFTP received bad data link information: " + response);
-            } catch (NoSuchElementException e){
-                throw new IOException("SimpleFTP received bad data link information: " + response);
-            }
-        }
-
-        if (reply.isPositiveCompletion()) {
-            if (dataStream == null) {
-                Socket dataSocket = new Socket(passiveHost, passivePort);
-                dataSocket.setSoTimeout(READ_TIMEOUT);
-                dataStream = new SocketInputStream(dataSocket, dataSocket.getInputStream());
-            }
-        }
-        return reply;
-    }
-
-    public void setRestPosition(long position) {
-        this.restPosition = position;
-    }
-
-    public FTPReply retr(String file) throws IOException {
-
-        if (restPosition >= 0) {
-            FTPReply restReply = executeCommand("REST " + restPosition);
-            if (!restReply.isSuccess()) {
-                return restReply;
-            }
-        }
-
-        return executeCommand("RETR " + file);
-    }
-
-    public FTPReply getReply() throws IOException {
-        return new FTPReply(responseReader);
-    }
-
-    /**
-     * Return the size of the remote file
-     *
-     * @param file
-     * @return
-     * @throws IOException
-     */
-    public FTPReply size(String file) throws IOException {
-
-        return executeCommand("SIZE " + file);
-
-    }
-
-
-    public InputStream getDataStream() throws IOException {
-        return dataStream;
-    }
-
-    public void closeDataStream() throws IOException {
-        //  NOTE -- some ftp servers seem to need a pause before closing the data stream
-        // if (dataStream != null) {
-        //    try {
-        //        //
-        //        Thread.sleep(3000);
-        //    } catch (InterruptedException e) {
-        //
-        //    }
-        dataStream.close();
-        //}
-        dataStream = null;
-    }
-
-
-    /**
-     * Disconnects from the host to which we are currently connected.
-     */
-    public void disconnect() {
-        try {
-            //quit();
-            if (commandStream != null) {
-                commandStream.close();
-                responseReader.close();
-                commandSocket.close();
-
-                if (dataStream != null) {
-                    dataStream.close();
-                }
-            }
-        } catch (IOException e) {
-            throw new SAMException("Error disconnecting", e);
-        }
-
-        commandStream = null;
-        responseReader = null;
-        commandSocket = null;
-    }
-
-    class SocketInputStream extends FilterInputStream {
-
-        Socket socket;
-
-        SocketInputStream(Socket socket, InputStream inputStream) {
-            super(inputStream);
-            this.socket = socket;
-        }
-
-        @Override
-        public void close() throws IOException {
-            super.close();
-            socket.close();
-            FTPClient.this.dataStream = null;
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/samtools/util/ftp/FTPReply.java b/src/main/java/htsjdk/samtools/util/ftp/FTPReply.java
deleted file mode 100644
index 4648d9d..0000000
--- a/src/main/java/htsjdk/samtools/util/ftp/FTPReply.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.util.ftp;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-
-/**
- * @author jrobinso
- * @date Oct 30, 2010
- */
-public class FTPReply {
-
-    String reply;
-    int code;
-
-    public FTPReply(BufferedReader inputStream) throws IOException {
-
-        String response = null;
-        do {
-            response = inputStream.readLine();
-        } while (response != null &&
-                !(Character.isDigit(response.charAt(0)) &&
-                        Character.isDigit(response.charAt(1)) &&
-                        Character.isDigit(response.charAt(2)) &&
-                        response.charAt(3) == ' '));
-        if (response == null || response.length() < 3) {
-            code = -1;
-        } else {
-            code = Integer.parseInt(response.substring(0, 3));
-            reply = response.substring(3).trim();
-
-        }
-    }
-
-    /**
-     * Gets server reply code from the control port after an ftp command has
-     * been executed.  It knows the last line of the response because it begins
-     * with a 3 digit number and a space, (a dash instead of a space would be a
-     * continuation).
-     */
-
-    public int getCode() throws IOException {
-        return code;
-    }
-
-
-    /**
-     * Gets server reply string from the control port after an ftp command has
-     * been executed.  This consists only of the last line of the response,
-     * and only the part after the response code.
-     */
-    public String getReplyString()
-            throws IOException {
-
-        return reply;
-    }
-
-
-    public boolean isSuccess() {
-        return isPositiveCompletion() || isPositiveIntermediate();
-    }
-
-    /**
-     * Determine if a reply code is a positive completion response.  All
-     * codes beginning with a 2 are positive completion responses.
-     * The FTP server will send a positive completion response on the final
-     * successful completion of a command.
-     * <p/>
-     *
-     * @return True if a reply code is a postive completion response, false
-     *         if not.
-     *         *
-     */
-    public boolean isPositiveCompletion() {
-        return (code >= 200 && code < 300);
-    }
-
-
-    /**
-     * Determine if a reply code is a positive intermediate response.  All
-     * codes beginning with a 3 are positive intermediate responses.
-     * The FTP server will send a positive intermediate response on the
-     * successful completion of one part of a multi-part sequence of
-     * commands.  For example, after a successful USER command, a positive
-     * intermediate response will be sent to indicate that the server is
-     * ready for the PASS command.
-     * <p/>
-     *
-     * @return True if a reply code is a postive intermediate response, false
-     *         if not.
-     *         *
-     */
-    public boolean isPositiveIntermediate() {
-        return (code >= 300 && code < 400);
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ftp/FTPStream.java b/src/main/java/htsjdk/samtools/util/ftp/FTPStream.java
deleted file mode 100644
index 11a531c..0000000
--- a/src/main/java/htsjdk/samtools/util/ftp/FTPStream.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.util.ftp;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-
-/**
- * A "non-seekable" ftp stream.  This one doesn't support random access.
- *
- * It is assumed that the ftp client has been connected, put in passive mode,
- * set to binary, and otherwise prepped for reading before creating this stream.
- *
- * @author jrobinso
- * @date Oct 31, 2010
- */
-public class FTPStream extends FilterInputStream {
-
-    FTPClient ftp;
-
-    public FTPStream(FTPClient ftp) throws IOException {
-        super(ftp.getDataStream());
-        this.ftp = ftp;
-    }
-
-
-    @Override
-    public int read(byte[] bytes, int i, int i1) throws IOException {
-        return super.read(bytes, i, i1);    //To change body of overridden methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void close() throws IOException {
-        super.close();
-        ftp.disconnect();
-    }
-}
diff --git a/src/main/java/htsjdk/samtools/util/ftp/FTPUtils.java b/src/main/java/htsjdk/samtools/util/ftp/FTPUtils.java
deleted file mode 100644
index a9f8cde..0000000
--- a/src/main/java/htsjdk/samtools/util/ftp/FTPUtils.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.samtools.util.ftp;
-
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.seekablestream.UserPasswordInput;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * @author jrobinso
- * @date Aug 31, 2010
- */
-public class FTPUtils {
-
-    static Map<String, String> userCredentials = new HashMap<String, String>();
-
-    static int TIMEOUT = 10000;
-
-    public static boolean resourceAvailable(URL url) {
-        InputStream is = null;
-        try {
-            URLConnection conn = url.openConnection();
-            conn.setConnectTimeout(TIMEOUT);
-            conn.setReadTimeout(TIMEOUT);
-            is = conn.getInputStream();
-            return (is.read() >= 0);
-
-        } catch (IOException e) {
-            return false;
-        }
-        finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    throw new SAMException("Error closing connection", e);
-                }
-            }
-        }
-    }
-
-    public static long getContentLength(URL url) throws IOException {
-        FTPClient ftp = null;
-        try {
-            ftp = FTPUtils.connect(url.getHost(), url.getUserInfo(), null);
-            String sizeString = ftp.executeCommand("size " + url.getPath()).getReplyString();
-            return Integer.parseInt(sizeString);
-        } catch (Exception e) {
-            return -1 ;
-        }
-        finally {
-            if(ftp != null) {
-                ftp.disconnect();
-            }
-        }
-    }
-
-
-    /**
-     * Connect to an FTP server
-     *
-     * @param host
-     * @param userInfo
-     * @param userPasswordInput Dialog with which a user can enter credentials, if login fails
-     * @return
-     * @throws IOException
-     */
-    public static synchronized FTPClient connect(String host, String userInfo, UserPasswordInput userPasswordInput) throws IOException {
-
-        FTPClient ftp = new FTPClient();
-        FTPReply reply = ftp.connect(host);
-        if (!reply.isSuccess()) {
-            throw new RuntimeIOException("Could not connect to " + host);
-        }
-
-        String user = "anonymous";
-        String password = "igv at broadinstitute.org";
-
-        if (userInfo == null) {
-            userInfo = userCredentials.get(host);
-        }
-        if (userInfo != null) {
-            String[] tmp = userInfo.split(":");
-            user = tmp[0];
-            if (tmp.length > 1) {
-                password = tmp[1];
-            }
-        }
-
-        reply = ftp.login(user, password);
-        if (!reply.isSuccess()) {
-        	if (userPasswordInput == null) {
-                throw new RuntimeIOException("Login failure for host: " + host);
-        	}
-        	else {
-	        	userPasswordInput.setHost(host);
-	            boolean success = false;
-	            while (!success) {
-	                if (userPasswordInput.showDialog()) {
-	                    user = userPasswordInput.getUser();
-	                    password = userPasswordInput.getPassword();
-	                    reply = ftp.login(user, password);
-	                    success = reply.isSuccess();
-	                } else {
-	                    // canceled
-	                    break;
-	                }
-	
-	            }
-	            if (success) {
-	                userInfo = user + ":" + password;
-	                userCredentials.put(host, userInfo);
-	            } else {
-	                throw new RuntimeIOException("Login failure for host: " + host);
-	            }
-        	}
-        }
-
-        reply = ftp.binary();
-        if (!(reply.isSuccess())) {
-            throw new RuntimeIOException("Could not set binary mode on host: " + host);
-        }
-
-        return ftp;
-
-    }
-
-}
-
diff --git a/src/main/java/htsjdk/samtools/util/zip/DeflaterFactory.java b/src/main/java/htsjdk/samtools/util/zip/DeflaterFactory.java
deleted file mode 100644
index c15e7c6..0000000
--- a/src/main/java/htsjdk/samtools/util/zip/DeflaterFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util.zip;
-
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import java.util.zip.Deflater;
-
-/**
- * Factory for {@link Deflater} objects used by {@link BlockCompressedOutputStream}.
- * This class may be extended to provide alternative deflaters (e.g., for improved performance).
- */
-public class DeflaterFactory {
-
-    public DeflaterFactory() {
-        //Note: made explicit constructor to make searching for references easier
-    }
-
-    /**
-     * Returns a deflater object that will be used when writing BAM files.
-     * Subclasses may override to provide their own deflater implementation.
-     * @param compressionLevel the compression level (0-9)
-     * @param nowrap if true then use GZIP compatible compression
-     */
-    public Deflater makeDeflater(final int compressionLevel, final boolean nowrap) {
-        return new Deflater(compressionLevel, nowrap);
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/AbstractFeatureCodec.java b/src/main/java/htsjdk/tribble/AbstractFeatureCodec.java
deleted file mode 100644
index a1e2771..0000000
--- a/src/main/java/htsjdk/tribble/AbstractFeatureCodec.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-import java.io.IOException;
-
-/**
- * Simple basic class providing much of the basic functionality of codecs
- * Every concrete subclass must implement {@link FeatureCodec#canDecode(String)} to indicate whether it can decode the file.
- * Note that that method is the only way that the right codec for a file is identified and that <bold>only one</bold> codec
- * is allowed to identify itself as being able to decode any given file.
- */
-public abstract class AbstractFeatureCodec<FEATURE_TYPE extends Feature, SOURCE> implements FeatureCodec<FEATURE_TYPE, SOURCE> {
-    private final Class<FEATURE_TYPE> myClass;
-
-    protected AbstractFeatureCodec(final Class<FEATURE_TYPE> myClass) {
-        this.myClass = myClass;
-    }
-    
-    @Override
-    public Feature decodeLoc(final SOURCE source) throws IOException {
-        return decode(source);
-    }
-
-    @Override
-    public Class<FEATURE_TYPE> getFeatureType() {
-        return myClass;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/AbstractFeatureReader.java b/src/main/java/htsjdk/tribble/AbstractFeatureReader.java
deleted file mode 100644
index 80d9a6c..0000000
--- a/src/main/java/htsjdk/tribble/AbstractFeatureReader.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble;
-
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.tribble.util.TabixUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * jrobinso
- * <p/>
- * the feature reader class, which uses indices and codecs to read in Tribble file formats.
- */
-public abstract class AbstractFeatureReader<T extends Feature, SOURCE> implements FeatureReader<T> {
-    // the logging destination for this source
-    //private final static Logger log = Logger.getLogger("BasicFeatureSource");
-
-    // the path to underlying data source
-    String path;
-
-    // the query source, codec, and header
-    // protected final QuerySource querySource;
-    protected final FeatureCodec<T, SOURCE> codec;
-    protected FeatureCodecHeader header;
-
-    private static ComponentMethods methods = new ComponentMethods();
-
-    public static final Set<String> BLOCK_COMPRESSED_EXTENSIONS = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(".gz", ".gzip", ".bgz", ".bgzf")));
-
-    /**
-     * Calls {@link #getFeatureReader(String, FeatureCodec, boolean)} with {@code requireIndex} = true
-     */
-    public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureFile, final FeatureCodec<FEATURE, SOURCE> codec) throws TribbleException {
-        return getFeatureReader(featureFile, codec, true);
-    }
-
-    /**
-     * {@link #getFeatureReader(String, String, FeatureCodec, boolean)} with {@code null} for indexResource
-     * @throws TribbleException
-     */
-    public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, final FeatureCodec<FEATURE, SOURCE> codec, final boolean requireIndex) throws TribbleException {
-        return getFeatureReader(featureResource, null, codec, requireIndex);
-    }
-
-    /**
-     *
-     * @param featureResource the feature file to create from
-     * @param indexResource   the index for the feature file. If null, will auto-generate (if necessary)
-     * @param codec
-     * @param requireIndex    whether an index is required for this file
-     * @return
-     * @throws TribbleException
-     */
-    public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, String indexResource, final FeatureCodec<FEATURE, SOURCE> codec, final boolean requireIndex) throws TribbleException {
-
-        try {
-            // Test for tabix index
-            if (methods.isTabix(featureResource, indexResource)) {
-                if ( ! (codec instanceof AsciiFeatureCodec) )
-                    throw new TribbleException("Tabix indexed files only work with ASCII codecs, but received non-Ascii codec " + codec.getClass().getSimpleName());
-                return new TabixFeatureReader<FEATURE, SOURCE>(featureResource, indexResource, (AsciiFeatureCodec) codec);
-            }
-            // Not tabix => tribble index file (might be gzipped, but not block gzipped)
-            else {
-                return new TribbleIndexedFeatureReader<FEATURE, SOURCE>(featureResource, indexResource, codec, requireIndex);
-            }
-        } catch (IOException e) {
-            throw new TribbleException.MalformedFeatureFile("Unable to create BasicFeatureReader using feature file ", featureResource, e);
-        } catch (TribbleException e) {
-            e.setSource(featureResource);
-            throw e;
-        }
-    }
-
-    /**
-     * Return a reader with a supplied index.
-     *
-     * @param featureResource the path to the source file containing the features
-     * @param codec used to decode the features
-     * @param index index of featureResource
-     * @return a reader for this data
-     * @throws TribbleException
-     */
-    public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, final FeatureCodec<FEATURE, SOURCE>  codec, final Index index) throws TribbleException {
-        try {
-            return new TribbleIndexedFeatureReader<FEATURE, SOURCE>(featureResource, codec, index);
-        } catch (IOException e) {
-            throw new TribbleException.MalformedFeatureFile("Unable to create AbstractFeatureReader using feature file ", featureResource, e);
-        }
-
-    }
-
-    protected AbstractFeatureReader(final String path, final FeatureCodec<T, SOURCE> codec) {
-        this.path = path;
-        this.codec = codec;
-    }
-
-    /**
-     * Whether the reader has an index or not
-     * Default implementation returns false
-     * @return
-     */
-    public boolean hasIndex(){
-        return false;
-    }
-
-    public static void setComponentMethods(ComponentMethods methods){
-        AbstractFeatureReader.methods = methods;
-    }
-
-    /**
-     * Whether a filename ends in one of the BLOCK_COMPRESSED_EXTENSIONS
-     * @param fileName
-     * @return
-     */
-    public static boolean hasBlockCompressedExtension (final String fileName) {
-        for (final String extension : BLOCK_COMPRESSED_EXTENSIONS) {
-            if (fileName.toLowerCase().endsWith(extension))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Whether the name of a file ends in one of the BLOCK_COMPRESSED_EXTENSIONS
-     * @param file
-     * @return
-     */
-    public static boolean hasBlockCompressedExtension (final File file) {
-        return hasBlockCompressedExtension(file.getName());
-    }
-
-    /**
-     * Whether the path of a URI resource ends in one of the BLOCK_COMPRESSED_EXTENSIONS
-     * @param uri a URI representing the resource to check
-     * @return
-     */
-    public static boolean hasBlockCompressedExtension (final URI uri) {
-        return hasBlockCompressedExtension(uri.getPath());
-    }
-
-    /**
-     * get the header
-     *
-     * @return the header object we've read-in
-     */
-    public Object getHeader() {
-        return header.getHeaderValue();
-    }
-
-    static class EmptyIterator<T extends Feature> implements CloseableTribbleIterator<T> {
-        public Iterator iterator() { return this; }
-        public boolean hasNext() { return false; }
-        public T next() { return null; }
-        public void remove() { }
-        @Override public void close() { }
-    }
-
-    public static class ComponentMethods{
-
-        public boolean isTabix(String resourcePath, String indexPath) throws IOException{
-            if(indexPath == null){
-                indexPath = ParsingUtils.appendToPath(resourcePath, TabixUtils.STANDARD_INDEX_EXTENSION);
-            }
-            return hasBlockCompressedExtension(resourcePath) && ParsingUtils.resourceExists(indexPath);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/AsciiFeatureCodec.java b/src/main/java/htsjdk/tribble/AsciiFeatureCodec.java
deleted file mode 100644
index 141b764..0000000
--- a/src/main/java/htsjdk/tribble/AsciiFeatureCodec.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.tribble.readers.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A convenience base class for codecs that want to read in features from ASCII lines.
- * <p/>
- * This class overrides the general decode locs for streams and presents instead
- * Strings to decode(String) and readHeader(LineReader) functions.
- *
- * @param <T> The feature type this codec reads
- */
-public abstract class AsciiFeatureCodec<T extends Feature> extends AbstractFeatureCodec<T, LineIterator> {
-    protected AsciiFeatureCodec(final Class<T> myClass) {
-        super(myClass);
-    }
-    
-    @Override
-    public void close(final LineIterator lineIterator) {
-        CloserUtil.close(lineIterator);
-    }
-
-    @Override
-    public boolean isDone(final LineIterator lineIterator) {
-        return !lineIterator.hasNext();
-    }
-
-    @Override
-    public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream) {
-        final PositionalBufferedStream pbs;
-        if (bufferedInputStream instanceof PositionalBufferedStream) {
-            pbs = (PositionalBufferedStream) bufferedInputStream;
-        } else {
-            pbs = new PositionalBufferedStream(bufferedInputStream);
-        }
-        return new AsciiLineReaderIterator(new AsciiLineReader(pbs));
-    }
-
-    @Override
-    public LineIterator makeSourceFromStream(final InputStream bufferedInputStream) {
-        return new LineIteratorImpl(new SynchronousLineReader(bufferedInputStream));
-    }
-
-    /** 
-     * Convenience method.  Decoding in ASCII files operates line-by-line, so obviate the need to call 
-     * {@link htsjdk.tribble.readers.LineIterator#next()} in implementing classes and, instead, have them implement
-     * {@link AsciiFeatureCodec#decode(String)}.
-     */
-    @Override
-    public T decode(final LineIterator lineIterator) {
-        return decode(lineIterator.next());
-    }
-
-    /** @see AsciiFeatureCodec#decode(htsjdk.tribble.readers.LineIterator) */
-    public abstract T decode(String s);
-
-    @Override
-    public FeatureCodecHeader readHeader(final LineIterator lineIterator) throws IOException {
-        // TODO: Track header end here, rather than assuming there isn't one.
-        return new FeatureCodecHeader(readActualHeader(lineIterator), FeatureCodecHeader.NO_HEADER_END);
-    }
-
-    /**
-     * Read and return the header, or null if there is no header.
-     *
-     * @return the actual header data in the file, or null if none is available
-     */
-    abstract public Object readActualHeader(final LineIterator reader);
-}
diff --git a/src/main/java/htsjdk/tribble/BinaryFeatureCodec.java b/src/main/java/htsjdk/tribble/BinaryFeatureCodec.java
deleted file mode 100644
index dbd0afc..0000000
--- a/src/main/java/htsjdk/tribble/BinaryFeatureCodec.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.readers.PositionalBufferedStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Implements common methods of {@link FeatureCodec}s that read from {@link htsjdk.tribble.readers.PositionalBufferedStream}s.
- * @author mccowan
- */
-abstract public class BinaryFeatureCodec<T extends Feature> implements FeatureCodec<T, PositionalBufferedStream> {
-    @Override
-    public PositionalBufferedStream makeSourceFromStream(final InputStream bufferedInputStream) {
-        if (bufferedInputStream instanceof PositionalBufferedStream)
-            return (PositionalBufferedStream) bufferedInputStream;
-        else
-            return new PositionalBufferedStream(bufferedInputStream);
-    }
-
-    /** {@link PositionalBufferedStream} is already {@link LocationAware}. */
-    @Override
-    public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream) {
-        return makeSourceFromStream(bufferedInputStream);
-    }
-
-    @Override
-    public void close(final PositionalBufferedStream source) {
-        CloserUtil.close(source);
-    }
-
-    @Override
-    public boolean isDone(final PositionalBufferedStream source) {
-        try {
-            return source.isDone();
-        } catch (final IOException e) {
-            throw new RuntimeIOException("Failure reading from stream.", e);
-        }
-    }
-
-    /**
-     * Marked as final because binary features could not be tabix indexed
-     */
-    @Override
-    public final TabixFormat getTabixFormat() {
-        throw new TribbleException("Binary codecs does not support tabix");
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/CloseableTribbleIterator.java b/src/main/java/htsjdk/tribble/CloseableTribbleIterator.java
deleted file mode 100644
index 71c2cf6..0000000
--- a/src/main/java/htsjdk/tribble/CloseableTribbleIterator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.CloseableIterator;
-
-/**
- * The basic iterator we use in Tribble, which allows closing and basic iteration.
- * @param <T> the feature type
- */
-public interface CloseableTribbleIterator<T extends Feature> extends CloseableIterator<T>, Iterable<T> {}
diff --git a/src/main/java/htsjdk/tribble/Feature.java b/src/main/java/htsjdk/tribble/Feature.java
deleted file mode 100644
index 941790f..0000000
--- a/src/main/java/htsjdk/tribble/Feature.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-
-import htsjdk.samtools.util.Locatable;
-
-/**
- * Represents a locus on a reference sequence.   All Features are expected to return 1-based closed-ended intervals.
- */
-public interface Feature extends Locatable {
-
-    /**
-     * Return the features reference sequence name, e.g chromosome or contig
-     * @deprecated use getContig() instead
-     */
-    @Deprecated
-    default public String getChr() {
-        return getContig();
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/FeatureCodec.java b/src/main/java/htsjdk/tribble/FeatureCodec.java
deleted file mode 100644
index f14191a..0000000
--- a/src/main/java/htsjdk/tribble/FeatureCodec.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.tribble.index.tabix.TabixFormat;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * The base interface for classes that read in features.
- * <p/>
- * FeatureCodecs have to implement two key methods:
- * <p/>
- * {@link #readHeader(SOURCE)} - Reads the header, provided a {@link SOURCE} pointing at the beginning of the source input.
- * {@link #decode(SOURCE)} - Reads a {@link Feature} record, provided a {@link SOURCE} pointing at the beginning of a record within the 
- * source input.
- * <p/>
- * Note that it's not safe to carry state about the {@link SOURCE} within the codec.  There's no guarantee about its  state between calls.
- *
- * @param <FEATURE_TYPE> The type of {@link Feature} this codec generates
- * @param <SOURCE> The type of the data source this codec reads from
- */
-public interface FeatureCodec<FEATURE_TYPE extends Feature, SOURCE> {
-    /**
-     * Decode a line to obtain just its FeatureLoc for indexing -- contig, start, and stop.
-     *
-     * @param source the input stream from which to decode the next record
-     * @return Return the FeatureLoc encoded by the line, or null if the line does not represent a feature (e.g. is
-     *         a comment)
-     */
-    public Feature decodeLoc(final SOURCE source) throws IOException;
-
-    /**
-     * Decode a single {@link Feature} from the {@link SOURCE}, reading no further in the underlying source than beyond that feature.
-     *
-     * @param source the input stream from which to decode the next record
-     * @return Return the Feature encoded by the line,  or null if the line does not represent a feature (e.g. is
-     *         a comment)
-     */
-    public FEATURE_TYPE decode(final SOURCE source) throws IOException;
-
-    /**
-     * Read and return the header, or null if there is no header.
-     * 
-     * Note: Implementers of this method must be careful to read exactly as much from {@link SOURCE} as needed to parse the header, and no 
-     * more. Otherwise, data that might otherwise be fed into parsing a {@link Feature} may be lost.
-     *
-     * @param source the source from which to decode the header
-     * @return header object
-     */
-    public FeatureCodecHeader readHeader(final SOURCE source) throws IOException;
-
-    /**
-     * <p>
-     * This function returns the object the codec generates.  This is allowed to be Feature in the case where
-     * conditionally different types are generated.  Be as specific as you can though.
-     * </p>
-     * <p>
-     * This function is used by reflections based tools, so we can know the underlying type
-     * </p>
-     * 
-     * @return the feature type this codec generates.
-     */
-    public Class<FEATURE_TYPE> getFeatureType();
-
-    /**
-     * Generates a reader of type {@link SOURCE} appropriate for use by this codec from the generic input stream.  Implementers should
-     * assume the stream is buffered.
-     */
-    public SOURCE makeSourceFromStream(final InputStream bufferedInputStream);
-
-    /**
-     * Generates a {@link LocationAware} reader of type {@link SOURCE}.  Like {@link #makeSourceFromStream(java.io.InputStream)}, except
-     * the {@link LocationAware} compatibility is required for creating indexes.
-     * 
-     * Implementers of this method must return a type that is both {@link LocationAware} as well as {@link SOURCE}.  Note that this 
-     * requirement cannot be enforced via the method signature due to limitations in Java's generic typing system.  Instead, consumers
-     * should cast the call result into a {@link SOURCE} when applicable.
-     */
-    public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream);
-
-    /** Adapter method that assesses whether the provided {@link SOURCE} has more data. True if it does, false otherwise. */
-    public boolean isDone(final SOURCE source);
-
-    /** Adapter method that closes the provided {@link SOURCE}. */
-    public void close(final SOURCE source);
-
-    /**
-     * <p>
-     * This function returns true iff the File potentialInput can be parsed by this
-     * codec. Note that checking the file's extension is a perfectly acceptable implementation of this method
-     * and file contents only rarely need to be checked.
-     * </p>
-     * <p>
-     * There is an assumption that there's never a situation where two different Codecs
-     * return true for the same file.  If this occurs, the recommendation would be to error out.
-     * </p>
-     * Note this function must never throw an error.  All errors should be trapped
-     * and false returned.
-     *
-     * @param path the file to test for parsability with this codec
-     * @return true if potentialInput can be parsed, false otherwise
-     */
-    public boolean canDecode(final String path);
-
-    /**
-     * Define the tabix format for the feature, used for indexing. Default implementation throws an exception.
-     *
-     * Note that only {@link AsciiFeatureCodec} could read tabix files as defined in
-     * {@link AbstractFeatureReader#getFeatureReader(String, String, FeatureCodec, boolean)}
-     *
-     * @return the format to use with tabix
-     * @throws TribbleException if the format is not defined
-     */
-    default public TabixFormat getTabixFormat() {
-        throw new TribbleException(this.getClass().getSimpleName() + "does not have defined tabix format");
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/FeatureCodecHeader.java b/src/main/java/htsjdk/tribble/FeatureCodecHeader.java
deleted file mode 100644
index 042f1d0..0000000
--- a/src/main/java/htsjdk/tribble/FeatureCodecHeader.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-/**
- * A class to represent a header of a feature containing file.  Specific to a codec.  All
- * codecs must return a non-null value now for their header, but the header can be the
- * empty header object or the end case be set to NO_HEADER_END.
- *
- * Note that if the headerEnd value is > 0 the readers will skip the header for the codec upfront,
- * so that decode() doesn't have to deal with potentially seeing header records in the inputstream.
- *
- * @author Mark DePristo
- * @since 5/2/12
- */
-public class FeatureCodecHeader {
-    /** The value of the headerEnd field when there's no header */
-    public final static long NO_HEADER_END = 0;
-
-    /** An public instance representing no header */
-    public final static FeatureCodecHeader EMPTY_HEADER = new FeatureCodecHeader(null, NO_HEADER_END);
-
-    private final Object headerValue;
-    private final long headerEnd;
-
-    /**
-     * Create a FeatureCodecHeader indicating the contents of the header (can be null)
-     * and the byte position in the file where the header ends (not inclusive).  headerEnd
-     * should be NO_HEADER_END when no header is present.
-     *
-     * @param headerValue the header data read by the codec
-     * @param headerEnd the position (not inclusive) of the end of the header.  1 would
-     *                  mean just the first byte of the file is the header.  Zero indicates
-     *                  there's no header at all
-     */
-    public FeatureCodecHeader(final Object headerValue, final long headerEnd) {
-        if ( headerEnd < 0 ) throw new TribbleException("Header end < 0");
-        this.headerValue = headerValue;
-        this.headerEnd = headerEnd;
-    }
-
-    /**
-     * @return the header value provided by the codec for this file
-     */
-    public Object getHeaderValue() {
-        return headerValue;
-    }
-
-    /**
-     * @return to position, not inclusive, where the header ends.  Must be >= 0
-     */
-    public long getHeaderEnd() {
-        return headerEnd;
-    }
-
-    /**
-     * @return true if we should skip some bytes to skip this header
-     */
-    public boolean skipHeaderBytes() {
-        return getHeaderEnd() != NO_HEADER_END;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/FeatureReader.java b/src/main/java/htsjdk/tribble/FeatureReader.java
deleted file mode 100644
index 3471393..0000000
--- a/src/main/java/htsjdk/tribble/FeatureReader.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * the basic interface that feature sources need to match
- * @param <T> a feature type
- */
-public interface FeatureReader<T extends Feature> extends Closeable {
-    
-    public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException;
-
-    public CloseableTribbleIterator<T> iterator() throws IOException;
-
-    public void close() throws IOException;
-
-    public List<String> getSequenceNames();
-
-    public Object getHeader();
-
-}
diff --git a/src/main/java/htsjdk/tribble/NameAwareCodec.java b/src/main/java/htsjdk/tribble/NameAwareCodec.java
deleted file mode 100755
index ce90f5c..0000000
--- a/src/main/java/htsjdk/tribble/NameAwareCodec.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble;
-
-/**
- * Created by IntelliJ IDEA.
- * User: depristo
- * Date: Jun 29, 2010
- * Time: 3:48:47 PM
- * To change this template use File | Settings | File Templates.
- */
-public interface NameAwareCodec {
-    public String getName();
-    public void setName(String name);
-}
diff --git a/src/main/java/htsjdk/tribble/SimpleFeature.java b/src/main/java/htsjdk/tribble/SimpleFeature.java
deleted file mode 100644
index ddc62fa..0000000
--- a/src/main/java/htsjdk/tribble/SimpleFeature.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package htsjdk.tribble;
-
-/*
- * Copyright (c) 2012, The Broad Institute
- *
- * 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.
- */
-
-/**
- * A simple concrete Feature.
- */
-public class SimpleFeature implements Feature {
-
-    private final String contig;
-    private final int start;
-    private final int end;
-
-    public SimpleFeature(final String contig, final int start, final int end) {
-        this.contig = contig;
-        this.start = start;
-        this.end = end;
-    }
-
-    public String getContig() {
-        return contig;
-    }
-
-    public int getStart() {
-        return start;
-    }
-
-    public int getEnd() {
-        return end;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/TabixFeatureReader.java b/src/main/java/htsjdk/tribble/TabixFeatureReader.java
deleted file mode 100644
index 5d90295..0000000
--- a/src/main/java/htsjdk/tribble/TabixFeatureReader.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.readers.*;
-import htsjdk.tribble.util.ParsingUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @author Jim Robinson
- * @since 2/11/12
- */
-public class TabixFeatureReader<T extends Feature, SOURCE> extends AbstractFeatureReader<T, SOURCE> {
-
-    TabixReader tabixReader;
-    List<String> sequenceNames;
-
-    /**
-     *
-     * @param featureFile - path to a feature file. Can be a local file, http url, or ftp url
-     * @param codec
-     * @throws IOException
-     */
-    public TabixFeatureReader(final String featureFile, final AsciiFeatureCodec codec) throws IOException {
-        super(featureFile, codec);
-        tabixReader = new TabixReader(featureFile);
-        sequenceNames = new ArrayList<String>(tabixReader.getChromosomes());
-        readHeader();
-    }
-
-    /**
-     *
-     * @param featureFile - path to a feature file. Can be a local file, http url, or ftp url
-     * @param indexFile - path to the index file.
-     * @param codec
-     * @throws IOException
-     */
-    public TabixFeatureReader(final String featureFile, final String indexFile, final AsciiFeatureCodec codec) throws IOException {
-        super(featureFile, codec);
-        tabixReader = new TabixReader(featureFile, indexFile);
-        sequenceNames = new ArrayList<String>(tabixReader.getChromosomes());
-        readHeader();
-    }
-
-
-    /**
-     * read the header
-     *
-     * @return a Object, representing the file header, if available
-     * @throws IOException throws an IOException if we can't open the file
-     */
-    private void readHeader() throws IOException {
-        SOURCE source = null;
-        try {
-            source = codec.makeSourceFromStream(new PositionalBufferedStream(new BlockCompressedInputStream(ParsingUtils.openInputStream(path))));
-            header = codec.readHeader(source);
-        } catch (Exception e) {
-            throw new TribbleException.MalformedFeatureFile("Unable to parse header with error: " + e.getMessage(), path, e);
-        } finally {
-            if (source != null) {
-                codec.close(source);
-            }
-        }
-    }
-
-    @Override
-    public boolean hasIndex(){
-        return true;
-    }
-
-
-    public List<String> getSequenceNames() {
-        return sequenceNames;
-    }
-
-    /**
-     * Return iterator over all features overlapping the given interval
-     *
-     * @param chr
-     * @param start
-     * @param end
-     * @return
-     * @throws IOException
-     */
-    public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException {
-        final List<String> mp = getSequenceNames();
-        if (mp == null) throw new TribbleException.TabixReaderFailure("Unable to find sequence named " + chr +
-                " in the tabix index. ", path);
-        if (!mp.contains(chr)) {
-            return new EmptyIterator<T>();
-        }
-        final TabixIteratorLineReader lineReader = new TabixIteratorLineReader(tabixReader.query(tabixReader.chr2tid(chr), start - 1, end));
-        return new FeatureIterator<T>(lineReader, start - 1, end);
-    }
-
-    public CloseableTribbleIterator<T> iterator() throws IOException {
-        final InputStream is = new BlockCompressedInputStream(ParsingUtils.openInputStream(path));
-        final PositionalBufferedStream stream = new PositionalBufferedStream(is);
-        final LineReader reader = new SynchronousLineReader(stream);
-        return new FeatureIterator<T>(reader, 0, Integer.MAX_VALUE);
-    }
-
-    public void close() throws IOException {
-        tabixReader.close();
-    }
-
-
-    class FeatureIterator<T extends Feature> implements CloseableTribbleIterator<T> {
-        private T currentRecord;
-        private LineReader lineReader;
-        private int start;
-        private int end;
-
-        public FeatureIterator(final LineReader lineReader, final int start, final int end) throws IOException {
-            this.lineReader = lineReader;
-            this.start = start;
-            this.end = end;
-            readNextRecord();
-        }
-
-
-        /**
-         * Advance to the next record in the query interval.
-         *
-         * @throws IOException
-         */
-        protected void readNextRecord() throws IOException {
-            currentRecord = null;
-            String nextLine;
-            while (currentRecord == null && (nextLine = lineReader.readLine()) != null) {
-                final Feature f;
-                try {
-                    f = ((AsciiFeatureCodec)codec).decode(nextLine);
-                    if (f == null) {
-                        continue;   // Skip
-                    }
-                    if (f.getStart() > end) {
-                        return;    // Done
-                    }
-                    if (f.getEnd() <= start) {
-                        continue;   // Skip
-                    }
-
-                    currentRecord = (T) f;
-
-                } catch (TribbleException e) {
-                    e.setSource(path);
-                    throw e;
-                } catch (NumberFormatException e) {
-                    String error = "Error parsing line: " + nextLine;
-                    throw new TribbleException.MalformedFeatureFile(error, path, e);
-                }
-
-
-            }
-        }
-
-
-        public boolean hasNext() {
-            return currentRecord != null;
-        }
-
-        public T next() {
-            T ret = currentRecord;
-            try {
-                readNextRecord();
-            } catch (IOException e) {
-                throw new RuntimeIOException("Unable to read the next record, the last record was at " +
-                        ret.getContig() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
-            }
-            return ret;
-
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Remove is not supported in Iterators");
-        }
-
-        public void close() {
-            lineReader.close();
-        }
-
-        public Iterator<T> iterator() {
-            return this;
-        }
-    }
-
-
-}
diff --git a/src/main/java/htsjdk/tribble/Tribble.java b/src/main/java/htsjdk/tribble/Tribble.java
deleted file mode 100644
index 468f55d..0000000
--- a/src/main/java/htsjdk/tribble/Tribble.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.tribble.util.TabixUtils;
-
-import java.io.File;
-
-/**
- * Common, tribble wide constants and static functions
- */
-public class Tribble {
-    private Tribble() { } // can't be instantiated
-
-    public final static String STANDARD_INDEX_EXTENSION = ".idx";
-
-    /**
-     * Return the name of the index file for the provided vcf {@code filename}
-     * Does not actually create an index
-     * @param filename  name of the vcf file
-     * @return non-null String representing the index filename
-     */
-    public static String indexFile(final String filename) {
-        return indexFile(filename, STANDARD_INDEX_EXTENSION);
-    }
-
-    /**
-     * Return the File of the index file for the provided vcf {@code file}
-     * Does not actually create an index
-     * @param file  the vcf file
-     * @return a non-null File representing the index
-     */
-    public static File indexFile(final File file) {
-        return indexFile(file.getAbsoluteFile(), STANDARD_INDEX_EXTENSION);
-    }
-
-    /**
-     * Return the name of the tabix index file for the provided vcf {@code filename}
-     * Does not actually create an index
-     * @param filename  name of the vcf file
-     * @return non-null String representing the index filename
-     */
-    public static String tabixIndexFile(final String filename) {
-        return indexFile(filename, TabixUtils.STANDARD_INDEX_EXTENSION);
-    }
-
-    /**
-     * Return the File of the tabix index file for the provided vcf {@code file}
-     * Does not actually create an index
-     * @param file  the vcf file
-     * @return a non-null File representing the index
-     */
-    public static File tabixIndexFile(final File file) {
-        return indexFile(file.getAbsoluteFile(), TabixUtils.STANDARD_INDEX_EXTENSION);
-    }
-
-    /**
-     * Return the name of the index file for the provided vcf {@code filename} and {@code extension}
-     * Does not actually create an index
-     * @param filename  name of the vcf file
-     * @param extension the extension to use for the index
-     * @return non-null String representing the index filename
-     */
-    private static String indexFile(final String filename, final String extension) {
-        return ParsingUtils.appendToPath(filename, extension);
-    }
-
-    /**
-     * Return the File of the index file for the provided vcf {@code file} and {@code extension}
-     * Does not actually create an index
-     * @param file  the vcf file
-     * @param extension the extension to use for the index
-     * @return a non-null File representing the index
-     */
-    private static File indexFile(final File file, final String extension) {
-        return new File(file.getAbsoluteFile() + extension);
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/TribbleException.java b/src/main/java/htsjdk/tribble/TribbleException.java
deleted file mode 100644
index 86202eb..0000000
--- a/src/main/java/htsjdk/tribble/TribbleException.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-
-/**
- * @author Aaron
- *
- * The base Tribble exception; this allows external libraries to catch any exception Tribble generates
- * 
- */
-public class TribbleException extends RuntimeException {
-    // what file or input source we are working from
-    String source;
-
-    public TribbleException(String msg) {
-        super(msg);
-    }
-
-    public TribbleException(String message, Throwable throwable) {
-        super(message, throwable);
-    }
-
-    /**
-     * set the source for the file; where we got lines from
-     * @param source the source location, usually a file though it could be a http link or other source
-     */
-    public void setSource(String source) {
-        this.source = source;
-    }
-
-    /**
-     * override the default message with ours, which attaches the source file in question
-     * @return a string with our internal error, along with the causitive source file (or other input source)
-     */
-    public String getMessage() {
-        String ret = super.getMessage();
-        if ( source != null )
-            ret = ret + ", for input source: " + source;
-        return ret;
-    }
-
-    // //////////////////////////////////////////////////////////////////////
-    // other more specific exceptions generated in Tribble
-    // //////////////////////////////////////////////////////////////////////
-
-
-    // //////////////////////////////////////////////////////////////////////
-    // Codec exception
-    // //////////////////////////////////////////////////////////////////////
-    // if the line to decode is incorrect
-    public static class InvalidDecodeLine extends TribbleException {
-        public InvalidDecodeLine(String message, String line) { super (message + ", line = " + line); }
-
-        public InvalidDecodeLine(String message, int lineNo) { super (message + ", at line number " + lineNo); }
-    }
-
-    public static class InvalidHeader extends TribbleException {
-        public InvalidHeader(String message) { super ("Your input file has a malformed header: " + message); }
-    }
-
-    // capture other internal codec exceptions
-    public static class InternalCodecException extends TribbleException {
-        public InternalCodecException(String message) { super (message); }
-    }
-
-    // //////////////////////////////////////////////////////////////////////
-    // Index exceptions
-    // //////////////////////////////////////////////////////////////////////
-    public static class UnableToCreateCorrectIndexType extends TribbleException {
-        public UnableToCreateCorrectIndexType(String message, Exception e) {
-            super(message,e);
-        }
-        public UnableToCreateCorrectIndexType(String message) {
-            super(message);
-        }
-    }
-
-    // //////////////////////////////////////////////////////////////////////
-    // Source exceptions
-    // //////////////////////////////////////////////////////////////////////
-    public static class FeatureFileDoesntExist extends TribbleException {
-        public FeatureFileDoesntExist(String message, String file) {
-            super(message);
-            setSource(file);
-        }
-    }
-
-    public static class MalformedFeatureFile extends TribbleException {
-        public MalformedFeatureFile(String message, String f, Exception e) {
-            super(message,e);
-            setSource(f);
-        }
-        public MalformedFeatureFile(String message, String f) {
-            super(message);
-            setSource(f);
-        }
-    }
-
-    public static class UnableToReadIndexFile extends TribbleException {
-        public UnableToReadIndexFile(String message, String f, Exception e) {
-            super(message,e);
-            setSource(f);
-        }
-    }
-
-    public static class TabixReaderFailure extends TribbleException {
-        public TabixReaderFailure(String message, String f, Exception e) {
-            super(message,e);
-            setSource(f);
-        }
-
-        public TabixReaderFailure(String message, String f) {
-            super(message);
-            setSource(f);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/TribbleIndexedFeatureReader.java b/src/main/java/htsjdk/tribble/TribbleIndexedFeatureReader.java
deleted file mode 100644
index 514782d..0000000
--- a/src/main/java/htsjdk/tribble/TribbleIndexedFeatureReader.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.readers.PositionalBufferedStream;
-import htsjdk.tribble.util.ParsingUtils;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-
-/**
- * A reader for text feature files  (i.e. not tabix files).   This includes tribble-indexed and non-indexed files.  If
- * index both iterate() and query() methods are supported.
- * <p/>
- * Note: Non-indexed files can be gzipped, but not bgzipped.
- *
- * @author Jim Robinson
- * @since 2/11/12
- */
-public class TribbleIndexedFeatureReader<T extends Feature, SOURCE> extends AbstractFeatureReader<T, SOURCE> {
-
-    private Index index;
-
-    /**
-     * is the path pointing to our source data a regular file?
-     */
-    private final boolean pathIsRegularFile;
-
-    /**
-     * a potentially reusable seekable stream for queries over regular files
-     */
-    private SeekableStream seekableStream = null;
-
-    /**
-     * We lazy-load the index but it might not even exist
-     * Don't want to keep checking if that's the case
-     */
-    private boolean needCheckForIndex = true;
-
-    /**
-     * @param featurePath  - path to the feature file, can be a local file path, http url, or ftp url
-     * @param codec        - codec to decode the features
-     * @param requireIndex - true if the reader will be queries for specific ranges.  An index (idx) file must exist
-     * @throws IOException
-     */
-    public TribbleIndexedFeatureReader(final String featurePath, final FeatureCodec<T, SOURCE> codec, final boolean requireIndex) throws IOException {
-
-        super(featurePath, codec);
-
-        if (requireIndex) {
-            this.loadIndex();
-            if(!this.hasIndex()){
-                throw new TribbleException("An index is required, but none found.");
-            }
-        }
-
-        // does path point to a regular file?
-        this.pathIsRegularFile = SeekableStreamFactory.isFilePath(path);
-
-        readHeader();
-    }
-
-    /**
-     * @param featureFile  - path to the feature file, can be a local file path, http url, or ftp url
-     * @param indexFile    - path to the index file
-     * @param codec        - codec to decode the features
-     * @param requireIndex - true if the reader will be queries for specific ranges.  An index (idx) file must exist
-     * @throws IOException
-     */
-    public TribbleIndexedFeatureReader(final String featureFile, final String indexFile, final FeatureCodec<T, SOURCE> codec, final boolean requireIndex) throws IOException {
-        this(featureFile, codec, false); // required to read the header
-        if (indexFile != null && ParsingUtils.resourceExists(indexFile)) {
-            index = IndexFactory.loadIndex(indexFile);
-            this.needCheckForIndex = false;
-        } else {
-            if (requireIndex) {
-                this.loadIndex();
-                if(!this.hasIndex()){
-                    throw new TribbleException("An index is required, but none found.");
-                }
-            }
-        }
-    }
-
-    /**
-     * @param featureFile - path to the feature file, can be a local file path, http url, or ftp url
-     * @param codec       - codec to decode the features
-     * @param index       - a tribble Index object
-     * @throws IOException
-     */
-    public TribbleIndexedFeatureReader(final String featureFile, final FeatureCodec<T, SOURCE> codec, final Index index) throws IOException {
-        this(featureFile, codec, false); // required to read the header
-        this.index = index;
-        this.needCheckForIndex = false;
-    }
-
-    /**
-     * Attempt to load the index for the specified {@link #path}.
-     * If the {@link #path} has no available index file,
-     * does nothing
-     * @throws IOException
-     */
-    private void loadIndex() throws IOException{
-        String indexFile = Tribble.indexFile(this.path);
-        if (ParsingUtils.resourceExists(indexFile)) {
-            index = IndexFactory.loadIndex(indexFile);
-        } else {
-            // See if the index itself is gzipped
-            indexFile = ParsingUtils.appendToPath(indexFile, ".gz");
-            if (ParsingUtils.resourceExists(indexFile)) {
-                index = IndexFactory.loadIndex(indexFile);
-            }
-        }
-        this.needCheckForIndex = false;
-    }
-
-    /**
-     * Get a seekable stream appropriate to read information from the current feature path
-     * <p/>
-     * This function ensures that if reuseStreamInQuery returns true then this function will only
-     * ever return a single unique instance of SeekableStream for all calls given this instance of
-     * TribbleIndexedFeatureReader.  If reuseStreamInQuery() returns false then the returned SeekableStream
-     * will be newly opened each time, and should be closed after each use.
-     *
-     * @return a SeekableStream
-     */
-    private SeekableStream getSeekableStream() throws IOException {
-        final SeekableStream result;
-        if (reuseStreamInQuery()) {
-            // if the stream points to an underlying file, only create the underlying seekable stream once
-            if (seekableStream == null) seekableStream = SeekableStreamFactory.getInstance().getStreamFor(path);
-            result = seekableStream;
-        } else {
-            // we are not reusing the stream, so make a fresh copy each time we request it
-            result = SeekableStreamFactory.getInstance().getStreamFor(path);
-        }
-
-        return result;
-    }
-
-    /**
-     * Are we attempting to reuse the underlying stream in query() calls?
-     *
-     * @return true if
-     */
-    private boolean reuseStreamInQuery() {
-        return pathIsRegularFile;
-    }
-
-    public void close() throws IOException {
-        // close the seekable stream if that's necessary
-        if (seekableStream != null) seekableStream.close();
-    }
-
-    /**
-     * Return the sequence (chromosome/contig) names in this file, if known.
-     *
-     * @return list of strings of the contig names
-     */
-    public List<String> getSequenceNames() {
-        return !this.hasIndex() ? new ArrayList<String>() : new ArrayList<String>(index.getSequenceNames());
-    }
-
-    @Override
-    public boolean hasIndex() {
-        if(index == null && this.needCheckForIndex){
-            try {
-                this.loadIndex();
-            } catch (IOException e) {
-                throw new TribbleException("Error loading index file: " + e.getMessage(), e);
-            }
-        }
-        return index != null;
-    }
-
-    /**
-     * read the header from the file
-     *
-     * @throws IOException throws an IOException if we can't open the file
-     */
-    private void readHeader() throws IOException {
-        InputStream is = null;
-        PositionalBufferedStream pbs = null;
-        try {
-            is = ParsingUtils.openInputStream(path);
-            if (hasBlockCompressedExtension(new URI(URLEncoder.encode(path, "UTF-8")))) {
-                // TODO -- warning I don't think this can work, the buffered input stream screws up position
-                is = new GZIPInputStream(new BufferedInputStream(is));
-            }
-            pbs = new PositionalBufferedStream(is);
-            final SOURCE source = codec.makeSourceFromStream(pbs);
-            header = codec.readHeader(source);
-        } catch (Exception e) {
-            throw new TribbleException.MalformedFeatureFile("Unable to parse header with error: " + e.getMessage(), path, e);
-        } finally {
-            if (pbs != null) pbs.close();
-            else if (is != null) is.close();
-        }
-    }
-
-    /**
-     * Return an iterator to iterate over features overlapping the specified interval
-     * <p/>
-     * Note that TribbleIndexedFeatureReader only supports issuing and manipulating a single query
-     * for each reader.  That is, the behavior of the following code is undefined:
-     * <p/>
-     * reader = new TribbleIndexedFeatureReader()
-     * Iterator it1 = reader.query("x", 10, 20)
-     * Iterator it2 = reader.query("x", 1000, 1010)
-     * <p/>
-     * As a consequence of this, the TribbleIndexedFeatureReader are also not thread-safe.
-     *
-     * @param chr   contig
-     * @param start start position
-     * @param end   end position
-     * @return an iterator of records in this interval
-     * @throws IOException
-     */
-    public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException {
-
-        if (!this.hasIndex()) {
-            throw new TribbleException("Index not found for: " + path);
-        }
-
-        if (index.containsChromosome(chr)) {
-            final List<Block> blocks = index.getBlocks(chr, start - 1, end);
-            return new QueryIterator(chr, start, end, blocks);
-        } else {
-            return new EmptyIterator<T>();
-        }
-    }
-
-
-    /**
-     * @return Return an iterator to iterate over the entire file
-     * @throws IOException
-     */
-    public CloseableTribbleIterator<T> iterator() throws IOException {
-        return new WFIterator();
-    }
-
-    /**
-     * @deprecated use {@link #hasBlockCompressedExtension(String)} instead
-     */
-    //Visible for testing
-    @Deprecated
-    static boolean isGZIPPath(final String path) {
-        if (path.toLowerCase().endsWith(".gz")) {
-            return true;
-        }
-        else {
-            String uriPath = null;
-            try {
-                URI uri = new URI(path);
-                if (uri != null) {
-                    uriPath = uri.getPath();
-                    return uriPath != null && uriPath.toLowerCase().endsWith(".gz");
-                }
-                return false;
-            }
-            catch (URISyntaxException e) {
-                return false;
-            }
-        }
-    }
-
-    /**
-     * Class to iterator over an entire file.
-     */
-    class WFIterator implements CloseableTribbleIterator<T> {
-        private T currentRecord;
-        private SOURCE source;
-
-        /**
-         * Constructor for iterating over the entire file (seekableStream).
-         *
-         * @throws IOException
-         */
-        public WFIterator() throws IOException {
-            final InputStream inputStream = ParsingUtils.openInputStream(path);
-
-            final PositionalBufferedStream pbs;
-            if (hasBlockCompressedExtension(path)) {
-                // Gzipped -- we need to buffer the GZIPInputStream methods as this class makes read() calls,
-                // and seekableStream does not support single byte reads
-                final InputStream is = new GZIPInputStream(new BufferedInputStream(inputStream, 512000));
-                pbs = new PositionalBufferedStream(is, 1000);  // Small buffer as this is buffered already.
-            } else {
-                pbs = new PositionalBufferedStream(inputStream, 512000);
-            }
-            /**
-             * The header was already read from the original source in the constructor; don't read it again, since some codecs keep state
-             * about its initializagtion.  Instead, skip that part of the stream.
-             */
-            pbs.skip(header.getHeaderEnd());
-            source = codec.makeSourceFromStream(pbs);
-            readNextRecord();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return currentRecord != null;
-        }
-
-        @Override
-        public T next() {
-            final T ret = currentRecord;
-            try {
-                readNextRecord();
-            } catch (IOException e) {
-                throw new RuntimeIOException("Unable to read the next record, the last record was at " +
-                        ret.getContig() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
-            }
-            return ret;
-        }
-
-        /**
-         * Advance to the next record in the query interval.
-         *
-         * @throws IOException
-         */
-        private void readNextRecord() throws IOException {
-            currentRecord = null;
-
-            while (!codec.isDone(source)) {
-                final T f;
-                try {
-                    f = codec.decode(source);
-
-                    if (f == null) {
-                        continue;
-                    }
-
-                    currentRecord = f;
-                    return;
-
-                } catch (TribbleException e) {
-                    e.setSource(path);
-                    throw e;
-                } catch (NumberFormatException e) {
-                    final String error = "Error parsing line at byte position: " + source;
-                    throw new TribbleException.MalformedFeatureFile(error, path, e);
-                }
-            }
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException("Remove is not supported in Iterators");
-        }
-
-        @Override
-        public void close() {
-            codec.close(source);
-        }
-
-        @Override
-        public WFIterator iterator() {
-            return this;
-        }
-    }
-
-    /**
-     * Iterator for a query interval
-     */
-    class QueryIterator implements CloseableTribbleIterator<T> {
-        private String chrAlias;
-        int start;
-        int end;
-        private T currentRecord;
-        private SOURCE source;
-        private SeekableStream mySeekableStream;
-        private Iterator<Block> blockIterator;
-
-
-        public QueryIterator(final String chr, final int start, final int end, final List<Block> blocks) throws IOException {
-            this.start = start;
-            this.end = end;
-            mySeekableStream = getSeekableStream();
-            blockIterator = blocks.iterator();
-            advanceBlock();
-            readNextRecord();
-
-            // The feature chromosome might not be the query chromosome, due to alias definitions.  We assume
-            // the chromosome of the first record is correct and record it here.  This is not pretty.
-            chrAlias = (currentRecord == null ? chr : currentRecord.getContig());
-
-        }
-
-
-        public boolean hasNext() {
-            return currentRecord != null;
-        }
-
-        public T next() {
-            final T ret = currentRecord;
-            try {
-                readNextRecord();
-            } catch (IOException e) {
-                throw new RuntimeIOException("Unable to read the next record, the last record was at " +
-                        ret.getContig() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
-            }
-            return ret;
-        }
-
-
-        private void advanceBlock() throws IOException {
-            while (blockIterator != null && blockIterator.hasNext()) {
-                final Block block = blockIterator.next();
-                if (block.getSize() > 0) {
-                    final int bufferSize = Math.min(2000000, block.getSize() > 100000000 ? 10000000 : (int) block.getSize());
-                    source = codec.makeSourceFromStream(new PositionalBufferedStream(new BlockStreamWrapper(mySeekableStream, block), bufferSize));
-                    // note we don't have to skip the header here as the block should never start in the header
-                    return;
-                }
-            }
-
-            // If we get here the blocks are exhausted, set reader to null
-            if (source != null) {
-                codec.close(source);
-                source = null;
-            }
-        }
-
-        /**
-         * Advance to the next record in the query interval.
-         *
-         * @throws IOException
-         */
-        private void readNextRecord() throws IOException {
-
-            if (source == null) {
-                return;  // <= no more features to read
-            }
-
-            currentRecord = null;
-
-            while (true) {   // Loop through blocks
-                while (!codec.isDone(source)) {  // Loop through current block
-                    final T f;
-                    try {
-                        f = codec.decode(source);
-                        if (f == null) {
-                            continue;   // Skip
-                        }
-                        if ((chrAlias != null && !f.getContig().equals(chrAlias)) || f.getStart() > end) {
-                            if (blockIterator.hasNext()) {
-                                advanceBlock();
-                                continue;
-                            } else {
-                                return;    // Done
-                            }
-                        }
-                        if (f.getEnd() < start) {
-                            continue;   // Skip
-                        }
-
-                        currentRecord = f;     // Success
-                        return;
-
-                    } catch (TribbleException e) {
-                        e.setSource(path);
-                        throw e;
-                    } catch (NumberFormatException e) {
-                        final String error = "Error parsing line: " + source;
-                        throw new TribbleException.MalformedFeatureFile(error, path, e);
-                    }
-                }
-                if (blockIterator != null && blockIterator.hasNext()) {
-                    advanceBlock();   // Advance to next block
-                } else {
-                    return;   // No blocks left, we're done.
-                }
-            }
-        }
-
-
-        public void remove() {
-            throw new UnsupportedOperationException("Remove is not supported.");
-        }
-
-
-        public void close() {
-            // Note that this depends on BlockStreamWrapper not actually closing the underlying stream
-            codec.close(source);
-            if (!reuseStreamInQuery()) {
-                // if we are going to reuse the underlying stream we don't close the underlying stream.
-                try {
-                    mySeekableStream.close();
-                } catch (IOException e) {
-                    throw new TribbleException("Couldn't close seekable stream", e);
-                }
-            }
-        }
-
-        public Iterator<T> iterator() {
-            return this;
-        }
-    }
-
-
-    /**
-     * Wrapper around a SeekableStream that limits reading to the specified "block" of bytes.  Attempts to
-     * read beyond the end of the block should return -1  (EOF).
-     */
-    static class BlockStreamWrapper extends InputStream {
-
-        SeekableStream seekableStream;
-        long maxPosition;
-
-        BlockStreamWrapper(final SeekableStream seekableStream, final Block block) throws IOException {
-            this.seekableStream = seekableStream;
-            seekableStream.seek(block.getStartPosition());
-            maxPosition = block.getEndPosition();
-        }
-
-        @Override
-        public int read() throws IOException {
-            return (seekableStream.position() > maxPosition) ? -1 : seekableStream.read();
-        }
-
-        @Override
-        public int read(final byte[] bytes, final int off, final int len) throws IOException {
-            // note the careful treatment here to ensure we can continue to
-            // read very long > Integer sized blocks
-            final long maxBytes = maxPosition - seekableStream.position();
-            if (maxBytes <= 0) {
-                return -1;
-            }
-
-            final int bytesToRead = (int) Math.min(len, Math.min(maxBytes, Integer.MAX_VALUE));
-            return seekableStream.read(bytes, off, bytesToRead);
-
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/annotation/Strand.java b/src/main/java/htsjdk/tribble/annotation/Strand.java
deleted file mode 100644
index 581a885..0000000
--- a/src/main/java/htsjdk/tribble/annotation/Strand.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.annotation;
-
-/**
- * Enum for strand, which can be encoded as string
- */
-public enum Strand {
-    POSITIVE("+"), NEGATIVE("-"), NONE("!");  // not really sure what we should do for the NONE Enum
-
-    /**
-     * How we represent the strand information as text
-     */
-    private String encoding;
-    Strand(String str) {
-        encoding = str;
-    }
-
-    /**
-     * provide a way to take an encoding string, and produce a Strand
-     * @param encoding the encoding string
-     * @return a Strand object, if an appropriate one cannot be located an IllegalArg exception
-     */
-    public static Strand toStrand(String encoding) {
-        for (Strand st : Strand.values())
-            if (st.encoding.equals(encoding))
-                return st;
-        throw new IllegalArgumentException("Unable to match encoding to Strand enum for encoding string " + encoding);
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/bed/BEDCodec.java b/src/main/java/htsjdk/tribble/bed/BEDCodec.java
deleted file mode 100644
index ea1e889..0000000
--- a/src/main/java/htsjdk/tribble/bed/BEDCodec.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.bed;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.AsciiFeatureCodec;
-import htsjdk.tribble.annotation.Strand;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.readers.LineIterator;
-import htsjdk.tribble.util.ParsingUtils;
-
-import java.util.regex.Pattern;
-
-/**
- * Codec for parsing BED file, as described by UCSC
- * See https://genome.ucsc.edu/FAQ/FAQformat.html#format1
- *
- * @author jrobinso
- *         Date: Dec 20, 2009
- */
-public class BEDCodec extends AsciiFeatureCodec<BEDFeature> {
-
-    /** Default extension for BED files. */
-    public static final String BED_EXTENSION = ".bed";
-
-    private static final Pattern SPLIT_PATTERN = Pattern.compile("\\t|( +)");
-    private final int startOffsetValue;
-
-    /**
-     * Calls {@link #BEDCodec(StartOffset)} with an argument
-     * of {@code StartOffset.ONE}
-     */
-    public BEDCodec() {
-        this(StartOffset.ONE);
-    }
-
-
-    /**
-     * BED format is 0-based, but Tribble is 1-based.
-     * Set desired start position at either ZERO or ONE
-     */
-    public BEDCodec(final StartOffset startOffset) {
-        super(BEDFeature.class);
-        this.startOffsetValue = startOffset.value();
-    }
-
-
-    public BEDFeature decodeLoc(String line) {
-        return decode(line);
-    }
-
-    @Override
-    public BEDFeature decode(String line) {
-
-        if (line.trim().isEmpty()) {
-            return null;
-        }
-
-        if (line.startsWith("#") || line.startsWith("track") || line.startsWith("browser")) {
-            this.readHeaderLine(line);
-            return null;
-        }
-
-        String[] tokens = SPLIT_PATTERN.split(line, -1);
-        return decode(tokens);
-    }
-
-    @Override
-    public Object readActualHeader(LineIterator reader) {
-        return null;
-    }
-
-    public BEDFeature decode(String[] tokens) {
-        int tokenCount = tokens.length;
-
-        // The first 3 columns are non optional for BED.  We will relax this
-        // and only require 2.
-
-        if (tokenCount < 2) {
-            return null;
-        }
-
-        String chr = tokens[0];
-
-        // The BED format uses a first-base-is-zero convention,  Tribble features use 1 => add 1.
-        int start = Integer.parseInt(tokens[1]) + startOffsetValue;
-
-        int end = start;
-        if (tokenCount > 2) {
-            end = Integer.parseInt(tokens[2]);
-        }
-
-        FullBEDFeature feature = new FullBEDFeature(chr, start, end);
-
-        // The rest of the columns are optional.  Stop parsing upon encountering
-        // a non-expected value
-
-        // Name
-        if (tokenCount > 3) {
-            String name = tokens[3].replaceAll("\"", "");
-            feature.setName(name);
-        }
-
-        // Score
-        if (tokenCount > 4) {
-            try {
-                float score = Float.parseFloat(tokens[4]);
-                feature.setScore(score);
-            } catch (NumberFormatException numberFormatException) {
-
-                // Unexpected, but does not invalidate the previous values.
-                // Stop parsing the line here but keep the feature
-                // Don't log, would just slow parsing down.
-                return feature;
-            }
-        }
-
-        // Strand
-        if (tokenCount > 5) {
-            String strandString = tokens[5].trim();
-            char strand = (strandString.isEmpty())
-                    ? ' ' : strandString.charAt(0);
-
-            if (strand == '-') {
-                feature.setStrand(Strand.NEGATIVE);
-            } else if (strand == '+') {
-                feature.setStrand(Strand.POSITIVE);
-            } else {
-                feature.setStrand(Strand.NONE);
-            }
-        }
-
-        //Color
-        if (tokenCount > 8) {
-            String colorString = tokens[8];
-            feature.setColor(ParsingUtils.parseColor(colorString));
-        }
-
-        // Coding information is optional
-        if (tokenCount > 11) {
-            createExons(start, tokens, feature, feature.getStrand());
-        }
-
-        return feature;
-    }
-
-    protected boolean readHeaderLine(String line) {
-        //We don't parse BED header
-        return false;
-    }
-
-    private void createExons(int start, String[] tokens, FullBEDFeature gene,
-                             Strand strand) throws NumberFormatException {
-
-        int cdStart = Integer.parseInt(tokens[6]) + startOffsetValue;
-        int cdEnd = Integer.parseInt(tokens[7]);
-
-        int exonCount = Integer.parseInt(tokens[9]);
-        String[] exonSizes = new String[exonCount];
-        String[] startsBuffer = new String[exonCount];
-        ParsingUtils.split(tokens[10], exonSizes, ',');
-        ParsingUtils.split(tokens[11], startsBuffer, ',');
-
-        int exonNumber = (strand == Strand.NEGATIVE ? exonCount : 1);
-
-        if (startsBuffer.length == exonSizes.length) {
-            for (int i = 0; i < startsBuffer.length; i++) {
-                int exonStart = start + Integer.parseInt(startsBuffer[i]);
-                int exonEnd = exonStart + Integer.parseInt(exonSizes[i]) - 1;
-                gene.addExon(exonStart, exonEnd, cdStart, cdEnd, exonNumber);
-
-                if (strand == Strand.NEGATIVE) {
-                    exonNumber--;
-                } else {
-                    exonNumber++;
-                }
-            }
-        }
-    }
-
-    @Override
-    public boolean canDecode(final String path) {
-        final String toDecode;
-        if (AbstractFeatureReader.hasBlockCompressedExtension(path)) {
-            toDecode = path.substring(0, path.lastIndexOf("."));
-        } else {
-            toDecode = path;
-        }
-        return toDecode.toLowerCase().endsWith(BED_EXTENSION);
-    }
-
-    public int getStartOffset() {
-        return this.startOffsetValue;
-    }
-
-    /**
-     * Indicate whether co-ordinates or 0-based or 1-based.
-     * <p/>
-     * Tribble uses 1-based, BED files use 0.
-     * e.g.:
-     * start_position = bedline_start_position - startIndex.value()
-     */
-    public enum StartOffset {
-        ZERO(0),
-        ONE(1);
-        private int start;
-
-        private StartOffset(int start) {
-            this.start = start;
-        }
-
-        public int value() {
-            return this.start;
-        }
-    }
-
-    @Override
-    public TabixFormat getTabixFormat() {
-        return TabixFormat.BED;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/bed/BEDFeature.java b/src/main/java/htsjdk/tribble/bed/BEDFeature.java
deleted file mode 100644
index d70e605..0000000
--- a/src/main/java/htsjdk/tribble/bed/BEDFeature.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.bed;
-
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.annotation.Strand;
-
-import java.awt.*;
-
-/**
- * @author jrobinso
- * @date Dec 24, 2009
- *
- * BED feature start and end positions must adhere to the Feature interval specifications.
- * This is different than the 0-based representation in a BED file.  This conversion is handled by {@link BEDCodec}.
- * Anyone writing a bed file should be aware of this difference.
- */
-public interface BEDFeature extends Feature {
-    Strand getStrand();
-
-    String getType();
-
-    Color getColor();
-
-    String getDescription();
-
-    java.util.List<FullBEDFeature.Exon> getExons();
-
-    String getName();
-
-    float getScore();
-
-    String getLink();
-}
diff --git a/src/main/java/htsjdk/tribble/bed/FullBEDFeature.java b/src/main/java/htsjdk/tribble/bed/FullBEDFeature.java
deleted file mode 100644
index eab5688..0000000
--- a/src/main/java/htsjdk/tribble/bed/FullBEDFeature.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.bed;
-
-import htsjdk.tribble.annotation.Strand;
-
-import java.util.ArrayList;
-
-/**
- * Object for full BED file.
- */
-public class FullBEDFeature extends SimpleBEDFeature implements BEDFeature {
-
-    private java.util.List<Exon> exons = new ArrayList();
-
-    public FullBEDFeature(String chr, int start, int end) {
-        super(start, end, chr);
-
-    }
-
-    public java.util.List<Exon> getExons() {
-        return exons;
-    }
-
-    public void setExons(java.util.List<Exon> exons) {
-        this.exons = exons;
-    }
-
-    public void addExon(Exon exon) {
-        if (exon == null) {
-            this.exons = new ArrayList();
-        }
-        exons.add(exon);
-    }
-
-    public void addExon(int exonStart, int exonEnd, int cdStart, int cdEnd, int exonNumber) {
-        Exon exon = new Exon(exonStart, exonEnd);
-        exon.setCodingStart(cdStart);
-        exon.setCodingEnd(cdEnd);
-        exon.setNumber(exonNumber);
-        addExon(exon);
-    }
-
-    /**
-     * A sub region of a feature.  For example,  a Gene exon
-     *
-     * @author jrobinso
-     */
-    public class Exon {
-
-        int start;
-        int end;
-        /**
-         * The index of the exon relative to the start codon.  The exon with the start
-         * codon is number "1".
-         */
-        private int number;
-        private int readingFrame = -1;
-
-        /**
-         * Coding start position.  This is the leftmost position of the coding region, not neccessarily the 5'utr end
-         */
-        private int codingStart;
-        private int codingEnd;
-        boolean utr = false;
-
-        // The position of the first base of this exon relative to the start of the mRNA.  This will correspond
-        // to either the beginning or end of the exon, depending on the strand
-        private int mrnaBase = -1;
-
-
-        public void setMrnaBase(int base) {
-            this.mrnaBase = base;
-        }
-
-
-        /**
-         * Constructs ...
-         *
-         * @param start
-         * @param end
-         */
-        public Exon(int start, int end) {
-            this.start = start;
-            this.end = end;
-
-            // By default the entre exon is a coding region
-            this.codingStart = start;
-            this.codingEnd = end;
-        }
-
-        /**
-         * Flag indicating that the entire exon is the UTR.
-         *
-         * @param utr
-         */
-        public void setUTR(boolean utr) {
-            this.utr = utr;
-            if (strand == Strand.POSITIVE) {
-                codingStart = codingEnd = end;
-            } else {
-                codingStart = codingEnd = start;
-            }
-        }
-
-        /**
-         * Method description
-         *
-         * @param codingStart
-         */
-        public void setCodingStart(int codingStart) {
-            this.codingStart = Math.max(start, codingStart);
-        }
-
-        /**
-         * Method description
-         *
-         * @param codingEnd
-         */
-        public void setCodingEnd(int codingEnd) {
-            this.codingEnd = Math.min(end, codingEnd);
-        }
-
-        /**
-         * Method description
-         *
-         * @param offset
-         */
-        public void setReadingFrame(int offset) {
-            this.readingFrame = offset;
-        }
-
-        /**
-         * Method description
-         *
-         * @param phase
-         */
-        public void setPhase(int phase) {
-            if (strand == Strand.POSITIVE) {
-                readingFrame = phase;
-            } else if (strand == Strand.NEGATIVE) {
-                int modLen = (getCodingLength() - phase) % 3;
-                readingFrame = modLen;
-            }
-        }
-
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCdStart() {
-            return codingStart;
-        }
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCdEnd() {
-            return this.codingEnd;
-        }
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCodingLength() {
-            return utr ? 0 : Math.max(0, codingEnd - codingStart + 1);
-        }
-
-        /**
-         * This is exposed for unit tests.
-         *
-         * @return
-         */
-        int getReadingShift() {
-            return readingFrame;
-        }
-
-
-        public String getValueString(double position) {
-            String msg = number > 0 ? "Exon number: " + number : "";
-            return msg;
-        }
-
-        public int getNumber() {
-            return number;
-        }
-
-        public void setNumber(int number) {
-            this.number = number;
-        }
-    }
-
-
-    public class Exon2 {
-
-        /**
-         * The index of the exon relative to the start codon.  The exon with the start
-         * codon is number "1".
-         */
-        private int number;
-        private int readingFrame = -1;
-
-        /**
-         * Coding start position.  This is the leftmost position of the coding region, not neccessarily the 5'utr end
-         */
-        private int start;
-        private int end;
-        private int codingStart;
-        private int codingEnd;
-        //private AminoAcidSequence aminoAcidSequence;
-        boolean utr = false;
-
-        // The position of the first base of this exon relative to the start of the mRNA.  This will correspond
-        // to either the beginning or end of the exon, depending on the strand
-        private int mrnaBase = -1;
-
-
-        public Exon2(int start, int end, int codingStart, int codingDne) {
-
-            this.start = start;
-            this.end = end;
-            this.codingStart = codingStart;
-            this.codingEnd = codingDne;
-        }
-
-
-        public void setMrnaBase(int base) {
-            this.mrnaBase = base;
-        }
-
-        public int getAminoAcidNumber(int genomeCoordinate) {
-            if (mrnaBase < 0) {
-                return -1;
-            }
-            if (genomeCoordinate < getStart() || genomeCoordinate > getEnd()) {
-                throw new IndexOutOfBoundsException();
-            }
-            if (getStrand() == Strand.POSITIVE) {
-                int mrnaCoord = mrnaBase + (genomeCoordinate - codingStart) - 1;
-                return mrnaCoord < 0 ? -1 : mrnaCoord / 3 + 1;
-
-            } else if (getStrand() == Strand.NEGATIVE) {
-                int mrnaCoord = mrnaBase + (codingEnd - genomeCoordinate);
-                return mrnaCoord < 0 ? -1 : mrnaCoord / 3 + 1;
-
-            } else {
-                return 0;
-            }
-        }
-
-        /**
-         * Flag indicating that the entire exon is the UTR.
-         *
-         * @param utr
-         */
-        public void setUTR(boolean utr) {
-            this.utr = utr;
-            if (getStrand() == Strand.POSITIVE) {
-                codingStart = codingEnd = getEnd();
-            } else {
-                codingStart = codingEnd = getStart();
-            }
-        }
-
-        /**
-         * Method description
-         *
-         * @param codingStart
-         */
-        public void setCodingStart(int codingStart) {
-            this.codingStart = Math.max(getStart(), codingStart);
-        }
-
-        /**
-         * Method description
-         *
-         * @param codingEnd
-         */
-        public void setCodingEnd(int codingEnd) {
-            this.codingEnd = Math.min(getEnd(), codingEnd);
-        }
-
-        /**
-         * Method description
-         *
-         * @param offset
-         */
-        public void setReadingFrame(int offset) {
-            this.readingFrame = offset;
-        }
-
-        /**
-         * Method description
-         *
-         * @param phase
-         */
-        public void setPhase(int phase) {
-            if (getStrand() == Strand.POSITIVE) {
-                readingFrame = phase;
-            } else if (getStrand() == Strand.NEGATIVE) {
-                int modLen = (getCodingLength() - phase) % 3;
-                readingFrame = modLen;
-            }
-        }
-
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCdStart() {
-            return codingStart;
-        }
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCdEnd() {
-            return this.codingEnd;
-        }
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        public int getCodingLength() {
-            return utr ? 0 : Math.max(0, codingEnd - codingStart);
-        }
-
-        /**
-         * This is exposed for unit tests.
-         *
-         * @return
-         */
-        int getReadingShift() {
-            return readingFrame;
-        }
-
-
-        /**
-         * Method description
-         *
-         * @return
-         */
-        /*
-        public AminoAcidSequence getAminoAcidSequence() {
-            if (aminoAcidSequence == null) {
-                computeAminoAcidSequence();
-            }
-            return aminoAcidSequence;
-        }
-        */
-
-
-        /*
-        public void setAminoAcidSequence(AminoAcidSequence aminoAcidSequence) {
-            this.aminoAcidSequence = aminoAcidSequence;
-        }
-        */
-
-        /*
-        private void computeAminoAcidSequence() {
-
-            if (utr) {
-                return;
-            }
-            int start = getStart();
-            int end = getEnd();
-            String chr = getChr();
-            if (readingFrame >= 0) {
-                int readStart = (codingStart > start) ? codingStart : start + readingFrame;
-                int readEnd = Math.min(end, codingEnd);
-                if (readEnd > readStart + 3) {
-                    String genome = IGVModel.getInstance().getViewContext().getGenomeId();
-                    aminoAcidSequence = AminoAcidManager.getAminoAcidSequence(genome, chr, readStart,
-                            readEnd, getStrand());
-                }
-            }
-        }
-        */
-
-
-        public String getValueString(double position) {
-            String msg = number > 0 ? "Exon number: " + number : "";
-            int aaNumber = this.getAminoAcidNumber((int) position);
-            if (aaNumber > 0) {
-                msg += "<br>Amino acid number: " + aaNumber;
-            }
-            return msg;
-        }
-
-        public int getNumber() {
-            return number;
-        }
-
-        public void setNumber(int number) {
-            this.number = number;
-        }
-
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/bed/SimpleBEDFeature.java b/src/main/java/htsjdk/tribble/bed/SimpleBEDFeature.java
deleted file mode 100644
index 77a030f..0000000
--- a/src/main/java/htsjdk/tribble/bed/SimpleBEDFeature.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.bed;
-
-import htsjdk.tribble.annotation.Strand;
-
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *  Feature from a BED file without exon blocks.
- */
-public class SimpleBEDFeature implements BEDFeature {
-    protected String chr;
-    protected int start = -1;
-    protected int end = -1;
-    protected Strand strand = Strand.NONE;
-    private String name = "";
-    private float score = Float.NaN;
-    private String type = "";
-    private Color color;
-    private String description;//protected float confidence;
-    //private String identifier;
-    private String link;
-
-    public SimpleBEDFeature(int start, int end, String chr) {
-        this.start = start;
-        this.end = end;
-        this.chr = chr;
-    }
-
-    @Override
-    public String getContig() {
-        return chr;
-    }
-
-    public int getStart() {
-        return start;
-    }
-
-    public int getEnd() {
-        return end;
-    }
-
-    public Strand getStrand() {
-        return strand;
-    }
-
-    public void setStrand(Strand strand) {
-        this.strand = strand;
-    }
-
-    public void setChr(String chr) {
-        this.chr = chr;
-    }
-
-    public void setStart(int start) {
-        this.start = start;
-    }
-
-    public void setEnd(int end) {
-        this.end = end;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Color getColor() {
-        return color;
-    }
-
-    public void setColor(Color color) {
-        this.color = color;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public float getScore() {
-        return score;
-    }
-
-    public void setScore(float score) {
-        this.score = score;
-    }
-
-    public String getLink() {
-        return link;
-    }
-
-    public void setLink(String link) {
-        this.link = link;
-    }
-
-    final static List<FullBEDFeature.Exon> emptyExonList = new ArrayList();
-
-    public java.util.List<FullBEDFeature.Exon> getExons() {
-        return emptyExonList;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/example/CountRecords.java b/src/main/java/htsjdk/tribble/example/CountRecords.java
deleted file mode 100644
index 230c1bf..0000000
--- a/src/main/java/htsjdk/tribble/example/CountRecords.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.example;
-
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.gelitext.GeliTextCodec;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.index.linear.LinearIndex;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * An example of how to index a feature file, and then count all the records in the file.
- * This is also useful for testing the feature reader
- */
-public class CountRecords {
-
-    /**
-     *  The main method of this class:
-     *  1) checks to see that the feature file exists
-     *  2) loads an index from disk, if one doesn't exist, it creates it and writes it to disk
-     *  3) creates a FeatureSource
-     *  4) iterates over the records, emitting a final tally for the number of features seen
-     *
-     * @param args a single parameter, the file name to load
-     */
-    public static void main(String[] args) {
-        
-        // check yourself before you wreck yourself - we require one arg, the input file
-        if (args.length > 2)
-            printUsage();
-
-        // our feature file
-        File featureFile = new File(args[0]);
-        if (!featureFile.exists()) {
-            System.err.println("File " + featureFile.getAbsolutePath() + " doesnt' exist");
-            printUsage();
-        }
-
-        int optimizeIndex = args.length == 2 ? Integer.valueOf(args[1]) : -1;
-
-        // determine the codec
-        FeatureCodec codec = getFeatureCodec(featureFile);
-
-        runWithIndex(featureFile, codec, optimizeIndex);
-
-    }
-
-    /**
-     *
-     * @see htsjdk.tribble.index.linear.LinearIndex#optimize(double)
-     * @param featureInput  File containing features
-     * @param codec  Codec used to read the features
-     * @param optimizeThreshold Threshold used to optimize the linear index
-     * @return
-     */
-    public static long runWithIndex(File featureInput, FeatureCodec codec, int optimizeThreshold) {
-        // get an index
-        Index index = loadIndex(featureInput, codec);
-        if ( optimizeThreshold != -1 )
-            ((LinearIndex)index).optimize(optimizeThreshold);
-
-        // get a reader
-        AbstractFeatureReader reader = null;
-        try {
-            reader =   AbstractFeatureReader.getFeatureReader(featureInput.getAbsolutePath(), codec, index);
-
-            // now read iterate over the file
-            long recordCount = 0l;
-
-            // this call could be replaced with a query
-            Iterator<Feature> iter = reader.iterator();
-
-            // cycle through the iterators
-            while (iter.hasNext()) {
-                Feature feat = iter.next();
-                ++recordCount;
-            }
-
-            System.err.println("We saw " + recordCount + " record in file " + featureInput);
-            return recordCount;
-
-        } catch (IOException e) {
-            throw new RuntimeIOException("Something went wrong while reading feature file " + featureInput, e);
-        }
-    }
-
-    /**
-     * print usage information
-     */
-    public static void printUsage() {
-        System.err.println("Usage: java -jar CountRecords.jar <inputFile>");
-        System.err.println("    Where input can be of type: VCF (ends in .vcf or .VCF");
-        System.err.println("                                Bed (ends in .bed or .bed");
-        /**
-         * you could add others here; also look in the GATK code-base for an example of a dynamic way
-         * to load Tribble codecs.
-         */
-        System.exit(1);
-    }
-
-    /**
-     *
-     * @param featureFile the feature file
-     * @param codec the codec to decode features with
-     * @return an index instance
-     */
-    public static Index loadIndex(File featureFile, FeatureCodec codec) {
-        // lets setup a index file name
-        File indexFile = Tribble.indexFile(featureFile);
-
-        // our index instance;
-        Index index = null;
-
-        // can we read the index file
-        if (indexFile.canRead()) {
-            System.err.println("Loading index from disk for index file -> " + indexFile);
-            index = IndexFactory.loadIndex(indexFile.getAbsolutePath());
-        // else we want to make the index, and write it to disk if possible
-        } else {
-            System.err.println("Creating the index and memory, then writing to disk for index file -> " + indexFile);
-            index = createAndWriteNewIndex(featureFile,indexFile,codec);
-        }
-
-        return index;
-    }
-
-    /**
-     * creates a new index, given the feature file and the codec
-     * @param featureFile the feature file (i.e. .vcf, .bed)
-     * @param indexFile the index file; the location we should be writing the index to
-     * @param codec the codec to read features with
-     * @return an index instance
-     */
-    public static Index createAndWriteNewIndex(File featureFile, File indexFile, FeatureCodec codec) {
-        try {
-            Index index = IndexFactory.createLinearIndex(featureFile, codec);
-
-            // try to write it to disk
-            LittleEndianOutputStream stream = new LittleEndianOutputStream(new BufferedOutputStream(new FileOutputStream(indexFile)));
-            		
-            index.write(stream);
-            stream.close();
-
-            return index;
-        } catch (IOException e) {
-            throw new RuntimeIOException("Unable to create index from file " + featureFile,e);
-        }
-    }
-
-    /**
-     * Return a {@code FeatureCodec} instance appropriate for the given
-     * {@code featureFile}. Codec is generated based on file extension
-     * @param featureFile
-     * @return
-     * @throws IllegalArgumentException If a codec cannot be found
-     */
-    public static FeatureCodec getFeatureCodec(File featureFile) {
-        // quickly determine the codec type
-        //if (featureFile.getName().endsWith(".vcf") || featureFile.getName().endsWith(".VCF") )
-        //    return new VCFCodec();
-        if (featureFile.getName().endsWith(".bed") || featureFile.getName().endsWith(".BED") )
-            return new BEDCodec();
-        if (featureFile.getName().endsWith(".geli.calls") || featureFile.getName().endsWith(".geli") )
-            return new GeliTextCodec();
-        throw new IllegalArgumentException("Unable to determine correct file type based on the file name, for file -> " + featureFile);
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/example/ExampleBinaryCodec.java b/src/main/java/htsjdk/tribble/example/ExampleBinaryCodec.java
deleted file mode 100644
index 9628cc4..0000000
--- a/src/main/java/htsjdk/tribble/example/ExampleBinaryCodec.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.example;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.SimpleFeature;
-import htsjdk.tribble.BinaryFeatureCodec;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.tribble.FeatureCodecHeader;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.readers.AsciiLineReader;
-import htsjdk.tribble.readers.LineIterator;
-import htsjdk.tribble.readers.PositionalBufferedStream;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * An example binary codec that encodes / decodes contig / start / stop values via DataInputStreams
- *
- * @author Mark DePristo
- */
-public class ExampleBinaryCodec extends BinaryFeatureCodec<Feature> {
-    public final static String HEADER_LINE = "# BinaryTestFeature";
-
-    @Override
-    public Feature decodeLoc(final PositionalBufferedStream stream) throws IOException {
-        return decode(stream);
-    }
-
-    @Override
-    public Feature decode(final PositionalBufferedStream stream) throws IOException {
-        DataInputStream dis = new DataInputStream(stream);
-        String contig = dis.readUTF();
-        int start = dis.readInt();
-        int stop = dis.readInt();
-        return new SimpleFeature(contig, start, stop);
-    }
-
-    @Override
-    public FeatureCodecHeader readHeader(final PositionalBufferedStream stream) throws IOException {
-        // Construct a reader that does not read ahead (because we don't want to consume data from the stream that is not the header)
-        final AsciiLineReader nonReadAheadLineReader = new AsciiLineReader(stream);
-        final List<String> headerLines = new ArrayList<String>();
-        long headerLengthInBytes = 0;
-        while (stream.peek() == ('#' & 0xff)) { // Look for header lines, which are prefixed by '#'.
-            headerLines.add(nonReadAheadLineReader.readLine());
-            headerLengthInBytes = stream.getPosition();
-        }
-        return new FeatureCodecHeader(headerLines, headerLengthInBytes);
-    }
-
-    @Override
-    public Class<Feature> getFeatureType() {
-
-        return Feature.class;
-    }
-    @Override
-    public boolean canDecode(final String path) {
-        return false;
-    }
-
-    /**
-     * Convenience method that creates an ExampleBinaryCodec file from another feature file.
-     *
-     * For testing purposes really
-     *
-     * @param source file containing the features
-     * @param dest the place to write the binary features
-     * @param codec of the source file features
-     * @throws IOException
-     */
-    public static <FEATURE_TYPE extends Feature> void convertToBinaryTest(final File source, final File dest, final FeatureCodec<FEATURE_TYPE, LineIterator> codec) throws IOException {
-        final FeatureReader<FEATURE_TYPE> reader = AbstractFeatureReader.getFeatureReader(source.getAbsolutePath(), codec, false); // IndexFactory.loadIndex(idxFile));
-        final OutputStream output = new FileOutputStream(dest);
-        ExampleBinaryCodec.convertToBinaryTest(reader, output);
-    }
-
-    /**
-     * Convenience method that creates an ExampleBinaryCodec file from another feature file.
-     *
-     * For testing purposes really
-     *
-     * @throws IOException
-     */
-    public static <FEATURE_TYPE extends Feature> void convertToBinaryTest(final FeatureReader<FEATURE_TYPE> reader, final OutputStream out) throws IOException {
-        DataOutputStream dos = new DataOutputStream(out);
-        dos.writeBytes(HEADER_LINE + "\n");
-        Iterator<FEATURE_TYPE> it = reader.iterator();
-        while ( it.hasNext() ) {
-            final Feature f = it.next();
-            dos.writeUTF(f.getContig());
-            dos.writeInt(f.getStart());
-            dos.writeInt(f.getEnd());
-        }
-        dos.close();
-        reader.close();
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/example/IndexToTable.java b/src/main/java/htsjdk/tribble/example/IndexToTable.java
deleted file mode 100644
index 9cf6c70..0000000
--- a/src/main/java/htsjdk/tribble/example/IndexToTable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.example;
-
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.index.linear.LinearIndex;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-
-public class IndexToTable {
-
-    /**
-     * this class:
-     *  1) checks to see that the feature file exists
-     *  2) loads an index from disk, if one doesn't exist, it creates it and writes it to disk
-     *  3) Converts the index to a human readable table
-     *  @see htsjdk.tribble.index.linear.LinearIndex#writeTable(java.io.PrintStream)
-     *
-     * @param args 2 parameters:
-     *             1) The path of the file to index
-     *             2) The output file path
-     */
-    public static void main(String[] args) {
-
-        // check yourself before you wreck yourself - we require one arg, the input file
-        if (args.length != 2)
-            printUsage();
-
-        //LinearIndex.enableAdaptiveIndexing = false;
-        LinearIndex idx = (LinearIndex) IndexFactory.loadIndex(new File(args[0]).getAbsolutePath());
-        try {
-            idx.writeTable(new PrintStream(new FileOutputStream(new File(args[1]))));
-        } catch ( FileNotFoundException e ) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    /**
-     * print usage information
-     */
-    public static void printUsage() {
-        System.err.println("Usage: java -jar IndexToTable.jar index.file output.table");
-        System.exit(1);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/example/IndicesAreEqual.java b/src/main/java/htsjdk/tribble/example/IndicesAreEqual.java
deleted file mode 100644
index b0ea712..0000000
--- a/src/main/java/htsjdk/tribble/example/IndicesAreEqual.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.example;
-
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-
-import java.io.File;
-
-/**
- * Check with two index files are equal
- */
-public class IndicesAreEqual {
-
-    /**
-     *
-     * @param args 2 parameters, the paths of the two index files to compare
-     */
-    public static void main(String[] args) {
-        if ( args.length != 2 )
-            printUsage();
-        else {
-            Index index1 = loadIndex(args[0]);
-            Index index2 = loadIndex(args[1]);
-            System.out.printf("%n");
-            System.out.printf("index1: %s%n", args[0]);
-            System.out.printf("index2: %s%n", args[1]);
-            boolean eq = index1.equals(index2);
-            System.out.printf("  equals() = %b%n", eq);
-        }
-    }
-
-    /**
-     * print usage information
-     */
-    public static void printUsage() {
-        System.err.println("Usage: java -jar IndicesAreEqual.jar index1 index2");
-        System.err.println("    Prints out true / false if index1 and index2 are equal");
-        System.exit(1);
-    }
-
-    /**
-     * @return an index instance
-     */
-    public static Index loadIndex(String filename) {
-        //System.err.println("Loading index from disk for index file -> " + filename);
-        File file = new File(filename);
-        if (file.canRead()) {
-            return IndexFactory.loadIndex(file.getAbsolutePath());
-        } else {
-            printUsage();
-            return null;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/example/ProfileIndexReading.java b/src/main/java/htsjdk/tribble/example/ProfileIndexReading.java
deleted file mode 100644
index 6e3ef13..0000000
--- a/src/main/java/htsjdk/tribble/example/ProfileIndexReading.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.example;
-
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-
-public class ProfileIndexReading {
-
-    /**
-     * This class times the loading of an index file a number of times,
-     * and prints the result of each trial
-     * @param args Two parameters:
-     *             1) The number of trials to run
-     *             2) Index file to load
-     */
-    public static void main(String[] args) {
-
-        // check yourself before you wreck yourself - we require one arg, the input file
-        if (args.length < 2)
-            printUsage();
-
-        int iterations = Integer.valueOf(args[0]);
-        for ( int j = 1; j < args.length; j++  ) {
-            String indexFile = args[j];
-            System.out.printf("Reading %s%n", indexFile);
-            long startTime = System.currentTimeMillis();
-            for ( int i = 0; i < iterations; i++ ) {
-                System.out.printf("  iteration %d%n", i);
-                Index index = IndexFactory.loadIndex(indexFile);
-            }
-            long stopTime = System.currentTimeMillis();
-            System.out.printf("Runtime %s %.2f%n", indexFile, (stopTime - startTime) / 1000.0);
-        }
-    }
-
-    /**
-     * print usage information
-     */
-    public static void printUsage() {
-        System.err.println("Usage: java -jar ReadIndices.jar iterations index.file...");
-        System.exit(1);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/exception/CodecLineParsingException.java b/src/main/java/htsjdk/tribble/exception/CodecLineParsingException.java
deleted file mode 100644
index 8cc3042..0000000
--- a/src/main/java/htsjdk/tribble/exception/CodecLineParsingException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.exception;
-
-
-/**
- * Class CodecLineParsingException
- *
- * a generic exception we use if the codec has trouble parsing the line its given
- *
- * @author aaron
- */
-public class CodecLineParsingException extends RuntimeException {
-
-    public CodecLineParsingException(Throwable cause) {
-        super(cause);
-    }
-
-    public CodecLineParsingException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public CodecLineParsingException(String message) {
-        super(message);
-    }
-
-    public CodecLineParsingException() {
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/exception/UnsortedFileException.java b/src/main/java/htsjdk/tribble/exception/UnsortedFileException.java
deleted file mode 100644
index 7f5e387..0000000
--- a/src/main/java/htsjdk/tribble/exception/UnsortedFileException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.exception;
-
-/**
- * an exception for when we've discovered that an input file is unsorted; sorted files are required by Tribble
- */
-public class UnsortedFileException extends RuntimeException {
-
-    public UnsortedFileException(Throwable cause) {
-        super(cause);
-    }
-
-    public UnsortedFileException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public UnsortedFileException(String message) {
-        super(message);
-    }
-
-    public UnsortedFileException() {
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/gelitext/DiploidGenotype.java b/src/main/java/htsjdk/tribble/gelitext/DiploidGenotype.java
deleted file mode 100644
index f533432..0000000
--- a/src/main/java/htsjdk/tribble/gelitext/DiploidGenotype.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.gelitext;
-
-
-/**
- * Class DiploidGenotype
- *
- * Enum describing all possible combinations of diploid genotype variations;
- * AA, AC, etc.
- *
- * @author aaron
- */
- at Deprecated
-public enum DiploidGenotype {
-    AA, AC, AG, AT, CC, CG, CT, GG, GT, TT;
-
-    public static DiploidGenotype toDiploidGenotype(String genotype) {
-        if (genotype.length() != 2)
-            throw new DiploidGenotypeException("Genotype string for conversion should be of length 2, we were passed = " + genotype);
-        genotype = genotype.toUpperCase();
-        for (DiploidGenotype g: DiploidGenotype.values())
-            if (g.toString().equals(genotype)) return g;
-        throw new DiploidGenotypeException("Unable to find genotype matching " + genotype);
-    }
-
-    public boolean isHet() {
-        return toString().toCharArray()[0] != toString().toCharArray()[1];
-    }
-
-    public boolean containsBase(char base) {
-        return (toString().charAt(0) == base || toString().charAt(1) == base);
-    }
-}
-
- at Deprecated
-class DiploidGenotypeException extends RuntimeException {
-    DiploidGenotypeException(String s) {
-        super(s);
-    }
-
-    DiploidGenotypeException(String s, Throwable throwable) {
-        super(s, throwable);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/gelitext/GeliTextCodec.java b/src/main/java/htsjdk/tribble/gelitext/GeliTextCodec.java
deleted file mode 100644
index 394b5dc..0000000
--- a/src/main/java/htsjdk/tribble/gelitext/GeliTextCodec.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.gelitext;
-
-import htsjdk.samtools.util.CollectionUtil;
-import htsjdk.tribble.AsciiFeatureCodec;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.exception.CodecLineParsingException;
-import htsjdk.tribble.readers.LineIterator;
-
-import java.util.Arrays;
-
-
-/**
- * <p/>
- * A codec for parsing geli text files, which is the text version of the geli binary format.
- * <p/>
- * <p/>
- * GELI text has the following tab-seperated fields:
- * contig             the contig (string)
- * position           the position on the contig (long)
- * refBase            the reference base (char)
- * depthOfCoverage    the depth of coverage at this position (int)
- * maximumMappingQual the maximum mapping quality of a read at this position (int)
- * genotype           the called genotype (string)
- * LODBestToReference the LOD score of the best to the reference (double)
- * LODBestToNext      the LOD score of the best to the next best genotype (double)
- * likelihoods        the array of all genotype likelihoods, in ordinal ordering (array of 10 doubles, in ordinal order)
- *
- * @author aaron
- * @deprecated This is deprecated and unsupported.
- */
- at Deprecated
-public class GeliTextCodec extends AsciiFeatureCodec<GeliTextFeature> {
-    public GeliTextCodec() {
-        super(GeliTextFeature.class);
-    }
-
-    public Feature decodeLoc(final String line) {
-        return decode(line);
-    }
-
-    @Override
-    public GeliTextFeature decode(final String line) {
-        // clean out header lines and comments
-        if (line.startsWith("#") || line.startsWith("@"))
-            return null;
-
-        // parse into tokens
-        final String[] parts = line.trim().split("\\s+");
-        return decode(parts);
-    }
-
-    @Override
-    public boolean canDecode(String path){
-	return path.toLowerCase().endsWith(".geli.calls") || path.toLowerCase().endsWith(".geli");
-    }
-
-    @Override
-    public Object readActualHeader(LineIterator reader) {
-        return null;
-    }
-
-    public GeliTextFeature decode(final String[] tokens) {
-        try {
-            // check that we got the correct number of tokens in the split
-            if (tokens.length != 18)
-                throw new CodecLineParsingException("Invalid GeliTextFeature row found -- incorrect element count.  Expected 18, got " + tokens.length + " line = " + CollectionUtil.join(Arrays.asList(tokens), " "));
-
-            // UPPER case and sort
-            final char[] x = tokens[5].toUpperCase().toCharArray();
-            Arrays.sort(x);
-            final String bestGenotype = new String(x);
-
-            final double[] genotypeLikelihoods = new double[10];
-            for (int pieceIndex = 8, offset = 0; pieceIndex < 18; pieceIndex++, offset++) {
-                genotypeLikelihoods[offset] = Double.valueOf(tokens[pieceIndex]);
-            }
-            return new GeliTextFeature(tokens[0],
-                    Long.valueOf(tokens[1]),
-                    Character.toUpperCase(tokens[2].charAt(0)),
-                    Integer.valueOf(tokens[3]),
-                    Integer.valueOf(tokens[4]),
-                    DiploidGenotype.toDiploidGenotype(bestGenotype),
-                    Double.valueOf(tokens[6]),
-                    Double.valueOf(tokens[7]),
-                    genotypeLikelihoods);
-        } catch (CodecLineParsingException e) {
-            e.printStackTrace();
-            throw new RuntimeException("Unable to parse line " + CollectionUtil.join(Arrays.asList(tokens), " "), e);
-        } catch (NumberFormatException e) {
-            e.printStackTrace();
-            throw new RuntimeException("Unable to parse line " + CollectionUtil.join(Arrays.asList(tokens), " "), e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/gelitext/GeliTextFeature.java b/src/main/java/htsjdk/tribble/gelitext/GeliTextFeature.java
deleted file mode 100644
index baad1ca..0000000
--- a/src/main/java/htsjdk/tribble/gelitext/GeliTextFeature.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.gelitext;
-
-import htsjdk.tribble.Feature;
-
-import java.util.Arrays;
-
-
-/**
- *         <p/>
- *         Class GeliTextFeature
- *         <p/>
- *         This is a feature for the Geli text object, which is the text version of the Geli binary genotyping format.
- *
- * @author aaron
- * @deprecated this is deprecated and no longer supported
- */
- at Deprecated
-public class GeliTextFeature implements Feature {
-
-    private final String contig;                // the contig name
-    private final long position;                // the position on the contig
-    private final char refBase;                 // the reference base
-    private final int depthOfCoverage;          // the depth of coverage at this position
-    private final int maximumMappingQual;       // the maximum mapping quality of a read at this position
-    private final DiploidGenotype genotype;     // the called genotype
-    private final double LODBestToReference;    // the LOD score of the best to the reference
-    private final double LODBestToNext;         // the LOD score of the best to the next best genotype
-    private final double likelihoods[];         // the array of all genotype likelihoods, in ordinal order
-
-    /**
-     * Create a geli text feature, given:
-     *
-     * @param contig             the contig
-     * @param position           the position on the contig
-     * @param refBase            the reference base
-     * @param depthOfCoverage    the depth of coverage at this position
-     * @param maximumMappingQual the maximum mapping quality of a read at this position
-     * @param genotype           the called genotype
-     * @param LODBestToReference the LOD score of the best to the reference
-     * @param LODBestToNext      the LOD score of the best to the next best genotype
-     * @param likelihoods        the array of all genotype likelihoods, in ordinal ordering
-     */
-    public GeliTextFeature(String contig,
-                           long position,
-                           char refBase,
-                           int depthOfCoverage,
-                           int maximumMappingQual,
-                           DiploidGenotype genotype,
-                           double LODBestToReference,
-                           double LODBestToNext,
-                           double[] likelihoods) {
-        this.contig = contig;
-        this.position = position;
-        this.refBase = refBase;
-        this.depthOfCoverage = depthOfCoverage;
-        this.maximumMappingQual = maximumMappingQual;
-        this.genotype = genotype;
-        this.LODBestToReference = LODBestToReference;
-        this.LODBestToNext = LODBestToNext;
-        this.likelihoods = likelihoods;
-    }
-
-    @Override
-    public String getContig() {
-        return this.contig;
-    }
-
-    /** Return the start position in 1-based coordinates (first base is 1) */
-    public int getStart() {
-        return (int) this.position;
-    }
-
-    /**
-     * Return the end position following 1-based fully closed conventions.  The length of a feature is
-     * end - start + 1;
-     */
-    public int getEnd() {
-        return (int) this.position;
-    }
-
-    public char getRefBase() {
-        return refBase;
-    }
-
-    public int getDepthOfCoverage() {
-        return depthOfCoverage;
-    }
-
-    public int getMaximumMappingQual() {
-        return maximumMappingQual;
-    }
-
-    public DiploidGenotype getGenotype() {
-        return genotype;
-    }
-
-    public double getLODBestToNext() {
-        return LODBestToNext;
-    }
-
-    public double getLODBestToReference() {
-        return LODBestToReference;
-    }
-
-    public double[] getLikelihoods() {
-        return likelihoods;
-    }
-
-    private static double Epsilon = 0.0001;
-    public boolean equals(Object o) {
-        if (!(o instanceof GeliTextFeature)) return false;
-        GeliTextFeature other = (GeliTextFeature)o;
-        if (!Arrays.equals(likelihoods,other.likelihoods)) return false;
-        if (!contig.equals(other.contig)) return false;
-        if (!(position == other.position)) return false;
-        if (!(refBase == other.refBase)) return false;
-        if (!(depthOfCoverage == other.depthOfCoverage)) return false;
-        if (!(maximumMappingQual == other.maximumMappingQual)) return false;
-        if (!(genotype == other.genotype)) return false;
-        if (!(Math.abs(LODBestToReference - other.LODBestToReference) < Epsilon)) return false;
-        if (!(Math.abs(LODBestToNext - other.LODBestToNext) < Epsilon)) return false;
-        return true;
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/index/AbstractIndex.java b/src/main/java/htsjdk/tribble/index/AbstractIndex.java
deleted file mode 100644
index 47e31cc..0000000
--- a/src/main/java/htsjdk/tribble/index/AbstractIndex.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index;
-
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * <p/>
- * An abstract implementation of the index class.  This class takes care of the basics that are common
- * to all of the current indexing classes; including the version information, common header properties,
- * and reading and writing the header to disk.
- *
- * @author jrobinso
- */
-public abstract class AbstractIndex implements MutableIndex {
-
-    public enum IndexType {
-        LINEAR(1),
-        INTERVAL_TREE(2);
-        public final int fileHeaderTypeIdentifier;
-
-        IndexType(int fileHeaderTypeIdentifier) {
-            this.fileHeaderTypeIdentifier = fileHeaderTypeIdentifier;
-        }
-    }
-
-    // todo -- up to version 4 and use ETag to detect out of date
-    // todo -- inode number + size in bytes + modification time
-    // todo -- remove MD5
-
-    // the current version of the index
-    public static final int VERSION = 3;
-    public static final int MAGIC_NUMBER = 1480870228;   //  byte[]{'T', 'I', 'D', 'X'};
-
-
-    private final static String NO_MD5 = "";
-    private final static long NO_FILE_SIZE = -1L;
-    private final static long NO_TS = -1L;
-
-    protected int version;                    // Our version value
-    protected File indexedFile = null;         // The file we've created this index for
-    protected long indexedFileSize = NO_FILE_SIZE; // The size of the indexed file
-    protected long indexedFileTS = NO_TS;      // The timestamp
-    protected String indexedFileMD5 = NO_MD5;        // The MD5 value, generally not filled in (expensive to calc)
-    protected int flags;
-
-    public boolean hasFileSize() {
-        return indexedFileSize != NO_FILE_SIZE;
-    }
-
-    public boolean hasTimestamp() {
-        return indexedFileTS != NO_TS;
-    }
-
-    public boolean hasMD5() {
-        return indexedFileMD5 != NO_MD5;
-    }
-
-    private LinkedHashMap<String, String> properties;
-
-    /**
-     * the map of our chromosome bins
-     */
-    protected LinkedHashMap<String, ChrIndex> chrIndices;
-
-    /**
-     * Any flags we're using
-     */
-    private static final int SEQUENCE_DICTIONARY_FLAG = 0x8000; // if we have a sequence dictionary in our header
-
-    /**
-     * @param obj
-     * @return true if this and obj are 'effectively' equivalent data structures.
-     */
-    public boolean equalsIgnoreProperties(final Object obj) {
-        if (this == obj) return true;
-        if (!(obj instanceof AbstractIndex)) {
-            System.err.printf("equals: %s not instance of AbstractIndex", obj);
-            return false;
-        }
-
-        final AbstractIndex other = (AbstractIndex) obj;
-
-        if (version != other.version) {
-            System.err.printf("equals version: this %d != other %d%n", version, other.version);
-            return false;
-        }
-
-        if (indexedFile != other.indexedFile && (indexedFile == null || !indexedFile.equals(other.indexedFile))) {
-            System.err.printf("equals indexedFile: this %s != other %s%n", indexedFile, other.indexedFile);
-            return false;
-        }
-
-        if (indexedFileSize != other.indexedFileSize) {
-            System.err.printf("equals indexedFileSize: this %d != other %d%n", indexedFileSize, other.indexedFileSize);
-            return false;
-        }
-
-        if (!indexedFileMD5.equals(other.indexedFileMD5)) {
-            System.err.printf("equals indexedFileMD5: this %s != other %s%n", indexedFileMD5, other.indexedFileMD5);
-            return false;
-        }
-
-        if (flags != other.flags) {
-            System.err.printf("equals flags: this %d != other %d%n", flags, other.flags);
-            return false;
-        }
-
-        if (!chrIndices.equals(other.chrIndices)) {
-            System.err.printf("equals chrIndeces: this %s != other %s%n", chrIndices, other.chrIndices);
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * create an abstract index, with defaults for the version value, and empty properties and chromosome lists
-     */
-    public AbstractIndex() {
-        this.version = VERSION; // <= is overriden when file is read
-        this.properties = new LinkedHashMap<String, String>();
-        chrIndices = new LinkedHashMap<String, ChrIndex>();
-    }
-
-    /**
-     * create an index file from the target feature file
-     *
-     * @param featureFile the feature file to create an index from
-     */
-    public AbstractIndex(final String featureFile) {
-        this(new File(featureFile));
-    }
-
-    public AbstractIndex(final File featureFile) {
-        this();
-        this.indexedFile = featureFile;
-    }
-
-    public AbstractIndex(final AbstractIndex parent) {
-        this();
-        this.version = parent.version;
-        this.indexedFile = parent.indexedFile;
-        this.indexedFileSize = parent.indexedFileSize;
-        this.indexedFileTS = parent.indexedFileTS;
-        this.indexedFileMD5 = parent.indexedFileMD5;
-        this.flags = parent.flags;
-        this.properties = (LinkedHashMap<String, String>) parent.properties.clone();
-    }
-
-    protected void validateIndexHeader(final int indexType, final LittleEndianInputStream dis) throws IOException {
-        final int magicNumber = dis.readInt();
-        if (magicNumber != MAGIC_NUMBER) {
-            throw new TribbleException(String.format("Unexpected magic number %d", magicNumber));
-        }
-        final int type = dis.readInt();
-        if (type != indexType) {
-            throw new TribbleException(String.format("Unexpected index type %d", type));
-        }
-
-    }
-
-    /**
-     * check the current version against the version we read in
-     *
-     * @return true if we're up to date, false otherwise
-     */
-    public boolean isCurrentVersion() {
-        return version == VERSION;
-    }
-
-    public File getIndexedFile() {
-        return indexedFile;
-    }
-
-    public long getIndexedFileSize() {
-        return indexedFileSize;
-    }
-
-    public long getIndexedFileTS() {
-        return indexedFileTS;
-    }
-
-    public String getIndexedFileMD5() {
-        return indexedFileMD5;
-    }
-
-    public int getFlags() {
-        return flags;
-    }
-
-    public int getVersion() {
-        return version;
-    }
-
-    public void setMD5(final String md5) {
-        this.indexedFileMD5 = md5;
-    }
-
-    public boolean containsChromosome(final String chr) {
-        return chrIndices.containsKey(chr);
-    }
-
-    public void finalizeIndex() {
-        // these two functions must be called now because the file may be being written during on the fly indexing
-        if (indexedFile != null) {
-            this.indexedFileSize = indexedFile.length();
-            this.indexedFileTS = indexedFile.lastModified();
-        }
-    }
-
-    /**
-     * write the header to the target output stream
-     *
-     * @param dos the little endian output stream
-     * @throws IOException an exception when we can't write to the file
-     */
-    private void writeHeader(final LittleEndianOutputStream dos) throws IOException {
-        dos.writeInt(MAGIC_NUMBER);
-        dos.writeInt(getType());
-        dos.writeInt(version);
-        dos.writeString(indexedFile.getAbsolutePath());
-        dos.writeLong(indexedFileSize);
-        dos.writeLong(indexedFileTS);
-        dos.writeString(indexedFileMD5);
-        dos.writeInt(flags);
-
-        // Properties (Version 3 and later)
-        dos.writeInt(properties.size());
-        for (final Map.Entry<String, String> prop : properties.entrySet()) {
-            dos.writeString(prop.getKey());
-            dos.writeString(prop.getValue());
-        }
-    }
-
-    /**
-     * read the header from the input stream
-     *
-     * @param dis the little endian input stream
-     * @throws IOException if we fail to read from the file at any point
-     */
-    private void readHeader(final LittleEndianInputStream dis) throws IOException {
-
-        version = dis.readInt();
-        indexedFile = new File(dis.readString());
-        indexedFileSize = dis.readLong();
-        indexedFileTS = dis.readLong();
-        indexedFileMD5 = dis.readString();
-        flags = dis.readInt();
-        if (version < 3 && (flags & SEQUENCE_DICTIONARY_FLAG) == SEQUENCE_DICTIONARY_FLAG) {
-            readSequenceDictionary(dis);
-        }
-
-        if (version >= 3) {
-            int nProperties = dis.readInt();
-            while (nProperties-- > 0) {
-                final String key = dis.readString();
-                final String value = dis.readString();
-                properties.put(key, value);
-            }
-        }
-    }
-
-    /**
-     * Kept to maintain backward compatibility with pre version 3 indexes.  The sequence dictionary is no longer
-     * used,  use getSequenceNames() instead.
-     *
-     * @param dis
-     * @throws IOException
-     */
-    private void readSequenceDictionary(final LittleEndianInputStream dis) throws IOException {
-        final int size = dis.readInt();
-        if (size < 0) throw new IllegalStateException("Size of the sequence dictionary entries is negative");
-        for (int x = 0; x < size; x++) {
-            dis.readString();
-            dis.readInt();
-        }
-    }
-
-    public List<String> getSequenceNames() {
-        return new ArrayList<String>(chrIndices.keySet());
-    }
-
-    public List<Block> getBlocks(final String chr, final int start, final int end) {
-        return getChrIndex(chr).getBlocks(start, end);
-    }
-
-    public List<Block> getBlocks(final String chr) {
-        return getChrIndex(chr).getBlocks();
-    }
-
-    /**
-     * @param chr
-     * @return return the ChrIndex associated with chr,
-     * @throws IllegalArgumentException if {@code chr} not found
-     */
-    private final ChrIndex getChrIndex(final String chr) {
-        final ChrIndex chrIdx = chrIndices.get(chr);
-        if (chrIdx == null) {
-            throw new IllegalArgumentException("getBlocks() called with of unknown contig " + chr);
-        } else {
-            return chrIdx;
-        }
-    }
-
-    public void write(final LittleEndianOutputStream stream) throws IOException {
-        writeHeader(stream);
-
-        //# of chromosomes
-        stream.writeInt(chrIndices.size());
-        for (final ChrIndex chrIdx : chrIndices.values()) {
-            chrIdx.write(stream);
-        }
-    }
-
-    @Override
-    public void write(final File idxFile) throws IOException {
-        try(final LittleEndianOutputStream idxStream = new LittleEndianOutputStream(new BufferedOutputStream(new FileOutputStream(idxFile)))) {
-            write(idxStream);
-        }
-    }
-
-    @Override
-    public void writeBasedOnFeatureFile(final File featureFile) throws IOException {
-        if (!featureFile.isFile()) return;
-        write(Tribble.indexFile(featureFile));
-    }
-
-    public void read(final LittleEndianInputStream dis) throws IOException {
-        try {
-            readHeader(dis);
-
-            int nChromosomes = dis.readInt();
-            chrIndices = new LinkedHashMap<String, ChrIndex>(nChromosomes);
-
-            while (nChromosomes-- > 0) {
-                final ChrIndex chrIdx = (ChrIndex) getChrIndexClass().newInstance();
-                chrIdx.read(dis);
-                chrIndices.put(chrIdx.getName(), chrIdx);
-            }
-
-        } catch (final InstantiationException e) {
-            throw new TribbleException.UnableToCreateCorrectIndexType("Unable to create class " + getChrIndexClass(), e);
-        } catch (final IllegalAccessException e) {
-            throw new TribbleException.UnableToCreateCorrectIndexType("Unable to create class " + getChrIndexClass(), e);
-        } finally {
-            dis.close();
-        }
-
-        //printIndexInfo();
-    }
-
-    protected void printIndexInfo() {
-        System.out.println(String.format("Index for %s with %d indices", indexedFile, chrIndices.size()));
-        final BlockStats stats = getBlockStats(true);
-        System.out.println(String.format("  total blocks %d", stats.total));
-        System.out.println(String.format("  total empty blocks %d", stats.empty));
-    }
-
-    protected static class BlockStats {
-        long total = 0, empty = 0, objects = 0, size = 0;
-    }
-
-    protected BlockStats getBlockStats(final boolean logDetails) {
-        final BlockStats stats = new BlockStats();
-        for (final Map.Entry<String, ChrIndex> elt : chrIndices.entrySet()) {
-            final List<Block> blocks = elt.getValue().getBlocks();
-
-            if (blocks != null) {
-                final int nBlocks = blocks.size();
-
-                int nEmptyBlocks = 0;
-                for (final Block b : elt.getValue().getBlocks()) {
-                    if (b.getSize() == 0) nEmptyBlocks++;
-                }
-                stats.empty += nEmptyBlocks;
-                stats.total += nBlocks;
-
-                if (logDetails)
-                    System.out.println(String.format("  %s => %d blocks, %d empty, %.2f", elt.getKey(), nBlocks, nEmptyBlocks, (100.0 * nEmptyBlocks) / nBlocks));
-            }
-        }
-
-        return stats;
-    }
-
-    protected String statsSummary() {
-        final BlockStats stats = getBlockStats(false);
-        return String.format("%12d blocks (%12d empty (%.2f%%))", stats.total, stats.empty, (100.0 * stats.empty) / stats.total);
-    }
-
-    public void addProperty(final String key, final String value) {
-        properties.put(key, value);
-    }
-
-    public void addProperties(final Map<String, String> properties) {
-        this.properties.putAll(properties);
-    }
-
-    /**
-     * return a mapping of name to property value
-     *
-     * @return the mapping of values as an unmodifiable map
-     */
-    public Map<String, String> getProperties() {
-        return Collections.unmodifiableMap(properties);
-    }
-
-    /**
-     * get the index type
-     *
-     * @return The index type
-     */
-    protected abstract int getType();
-
-    /**
-     * returns the class for the index type
-     *
-     * @return a Class, from which a new instance can be created
-     */
-    public abstract Class getChrIndexClass();
-}
diff --git a/src/main/java/htsjdk/tribble/index/Block.java b/src/main/java/htsjdk/tribble/index/Block.java
deleted file mode 100644
index 15ac799..0000000
--- a/src/main/java/htsjdk/tribble/index/Block.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-/**
- * Represents a contiguous block of bytes in a file, defined by a start position and size (in bytes)
-*/
-public class Block {
-
-    private final long startPosition;
-    private long size;
-
-    /**
-     * @param startPosition  in bytes
-     * @param size in bytes
-     */
-    public Block(final long startPosition, final long size) {
-        this.startPosition = startPosition;
-        this.size = size;
-    }
-
-    /**
-     * @return the startPosition
-     */
-    public long getStartPosition() {
-        return startPosition;
-    }
-
-    public long getEndPosition() {
-        return startPosition + size;
-    }
-
-    /**
-     * This method is used to aid in consolidating blocks.
-     * Sets the size based on the provided {@code endPosition}
-     * @param endPosition Where the block ends, in bytes
-     */
-    public void setEndPosition(final long endPosition) {
-        if(endPosition < startPosition)
-            throw new IllegalArgumentException("Attempting to set block end position to " +
-                                                                           endPosition + " which is before the start of " + startPosition);
-        size = endPosition - startPosition;
-
-    }
-
-    /**
-     * @return the # of bytes in this block.  Note that for block-compressed files, this is not truly the
-     * size of the block in the file.  getEndPosition should be used to determine the virtual file offset
-     * of the end of the region of interest.
-     */
-    public long getSize() {
-        return size;
-    }
-
-    public boolean equals(final Object obj) {
-        if ( this == obj ) return true;
-        if ( ! (obj instanceof Block) ) return false;
-        final Block otherBlock = (Block)obj;
-        return this.startPosition == otherBlock.startPosition && this.size == otherBlock.size;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/ChrIndex.java b/src/main/java/htsjdk/tribble/index/ChrIndex.java
deleted file mode 100644
index b1582ea..0000000
--- a/src/main/java/htsjdk/tribble/index/ChrIndex.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Represents an index on a specific chromosome
- */
-
-public interface ChrIndex {
-
-    public String getName();
-
-    /**
-     * @return all blocks in ChrIndex
-     */
-    List<Block> getBlocks();
-
-    /**
-     * @param start the start position, one based
-     * @param end   the end position, one based
-     * @return a list of blocks that include the region defined from start to stop.  Can never return null
-     */
-    List<Block> getBlocks(int start, int end);
-
-    void write(LittleEndianOutputStream dos) throws IOException;
-
-    void read(LittleEndianInputStream dis) throws IOException;
-}
diff --git a/src/main/java/htsjdk/tribble/index/DynamicIndexCreator.java b/src/main/java/htsjdk/tribble/index/DynamicIndexCreator.java
deleted file mode 100644
index 52153a5..0000000
--- a/src/main/java/htsjdk/tribble/index/DynamicIndexCreator.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.index;
-
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.index.interval.IntervalIndexCreator;
-import htsjdk.tribble.index.linear.LinearIndexCreator;
-import htsjdk.tribble.util.MathUtils;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * A DynamicIndexCreator creates the proper index based on an {@link IndexFactory.IndexBalanceApproach} and
- * the characteristics of the file.  Ultimately this is either a LinearIndex or an IntervalTreeIndex, with index
- * parameters based on whether seek time or file size is to be minimized.
- */
-public class DynamicIndexCreator extends TribbleIndexCreator {
-    IndexFactory.IndexBalanceApproach iba;
-    Map<IndexFactory.IndexType,TribbleIndexCreator> creators;
-
-    /**
-     * we're interested in two stats:
-     * the longest feature and the density of features
-      */
-    int longestFeatureLength = 0;
-    long featureCount = 0;
-
-    MathUtils.RunningStat stats = new MathUtils.RunningStat();
-    long basesSeen = 0;
-    Feature lastFeature = null;
-    File inputFile;
-
-    public DynamicIndexCreator(final File inputFile, final IndexFactory.IndexBalanceApproach iba) {
-        this.iba = iba;
-        // get a list of index creators
-        this.inputFile = inputFile;
-        creators = getIndexCreators(inputFile,iba);
-    }
-
-    public Index finalizeIndex(final long finalFilePosition) {
-        // finalize all of the indexes
-        // return the score of the indexes we've generated
-        final Map<Double,TribbleIndexCreator> mapping = scoreIndexes((double)featureCount/(double)basesSeen, creators, longestFeatureLength, iba);
-        final TribbleIndexCreator creator = getMinIndex(mapping, this.iba);
-
-        for (final Map.Entry<String, String> entry : properties.entrySet()) {
-            creator.addProperty(entry.getKey(), entry.getValue());
-        }
-
-        // add our statistics to the file
-        creator.addProperty("FEATURE_LENGTH_MEAN",String.valueOf(stats.mean()));
-        creator.addProperty("FEATURE_LENGTH_STD_DEV",String.valueOf(stats.standardDeviation()));
-        creator.addProperty("MEAN_FEATURE_VARIANCE",String.valueOf(stats.variance()));
-
-        // add the feature count
-        creator.addProperty("FEATURE_COUNT",String.valueOf(featureCount));
-
-        // Now let's finalize and create the index itself
-        return creator.finalizeIndex(finalFilePosition);
-    }
-
-    /**
-     * create a list of index creators (initialized) representing the common index types we'd suspect they'd like to use
-     * @param inputFile the input file to use to create the indexes
-     * @return a map of index type to the best index for that balancing approach
-     */
-    private Map<IndexFactory.IndexType,TribbleIndexCreator> getIndexCreators(final File inputFile, final IndexFactory.IndexBalanceApproach iba) {
-        final Map<IndexFactory.IndexType,TribbleIndexCreator> creators = new HashMap<IndexFactory.IndexType,TribbleIndexCreator>();
-
-        if (iba == IndexFactory.IndexBalanceApproach.FOR_SIZE) {
-            // add a linear index with the default bin size
-            final LinearIndexCreator linearNormal = new LinearIndexCreator(inputFile, LinearIndexCreator.DEFAULT_BIN_WIDTH);
-            creators.put(IndexFactory.IndexType.LINEAR,linearNormal);
-
-            // create a tree index with the default size
-            final IntervalIndexCreator treeNormal = new IntervalIndexCreator(inputFile, IntervalIndexCreator.DEFAULT_FEATURE_COUNT);
-            creators.put(IndexFactory.IndexType.INTERVAL_TREE,treeNormal);
-        }
-
-        // this section is a little more arbitrary; we're creating indexes with a bin size that's a portion of the default; these
-        // values were determined experimentally
-        if (iba == IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME) {
-            // create a linear index with a small bin size
-            final LinearIndexCreator linearSmallBin =
-                    new LinearIndexCreator(inputFile, Math.max(200, LinearIndexCreator.DEFAULT_BIN_WIDTH / 4));
-            creators.put(IndexFactory.IndexType.LINEAR,linearSmallBin);
-
-            // create a tree index with a small index size
-            final IntervalIndexCreator treeSmallBin =
-                    new IntervalIndexCreator(inputFile, Math.max(20, IntervalIndexCreator.DEFAULT_FEATURE_COUNT / 8));
-            creators.put(IndexFactory.IndexType.INTERVAL_TREE,treeSmallBin);
-        }
-
-        return creators;
-    }
-
-
-    public void addFeature(final Feature f, final long filePosition) {
-        // protected static Map<Double,Index> createIndex(FileBasedFeatureIterator<Feature> iterator, Map<IndexType,IndexCreator> creators, IndexBalanceApproach iba) {
-        // feed each feature to the indexes we've created
-        // first take care of the stats
-        featureCount++;
-
-        // calculate the number of bases seen - we have to watch out for the situation where the last record was on the previous chromosome
-        basesSeen = (lastFeature == null) ? basesSeen + f.getStart() :
-                ((f.getStart() - lastFeature.getStart() >= 0) ? basesSeen + (f.getStart() - lastFeature.getStart()) : basesSeen + f.getStart());
-
-        longestFeatureLength = Math.max(longestFeatureLength,(f.getEnd()-f.getStart()) + 1);
-
-        // push the longest feature to the running stats
-        stats.push(longestFeatureLength);
-
-        // now feed the feature to each of our creators
-        for (final IndexCreator creator : creators.values()) {
-            creator.addFeature(f,filePosition);
-        }
-
-        //Redundant check, done in IndexFactory
-        // if the last feature is after the current feature, exception out
-//        if (lastFeature != null && f.getStart() < lastFeature.getStart() && lastFeature.getChr().equals(f.getChr()))
-//            throw new TribbleException.MalformedFeatureFile("We saw a record with a start of " + f.getChr() + ":" + f.getStart() +
-//                    " after a record with a start of " + lastFeature.getChr() + ":" + lastFeature.getStart(), inputFile.getAbsolutePath());
-
-        // save the last feature
-        lastFeature = f;
-    }
-
-    /**
-     * score the available indexes for the specified density and feature lengths
-     *
-     * The scoring method is trying to determine how many features would be returned for a sample one base query; or:
-     * (features/seek).  For the interval index this is clear: it's the bin size (interval is binned by feature count).
-     * for Linear indexes it's the density of features X the number of bins we need to retrieve (which is determined
-     * by the bin size X the longest feature).
-     *
-     * @param densityOfFeatures the density of features (features/base)
-     * @param indexes Map from IndexType -> IndexCreator
-     * @param longestFeature the longest feature we've found
-     * @param iba the index balancing approach
-     * @return the best index available for the target indexes
-     */
-    protected static LinkedHashMap<Double,TribbleIndexCreator> scoreIndexes(final double densityOfFeatures, final Map<IndexFactory.IndexType,TribbleIndexCreator> indexes, final int longestFeature, final IndexFactory.IndexBalanceApproach iba) {
-        if (indexes.size() < 1) throw new IllegalArgumentException("Please specify at least one index to evaluate");
-
-        final LinkedHashMap<Double,TribbleIndexCreator> scores = new LinkedHashMap<Double,TribbleIndexCreator>();
-
-        for (final Map.Entry<IndexFactory.IndexType,TribbleIndexCreator> entry : indexes.entrySet()) {
-            // we have different scoring
-            if (entry.getValue() instanceof LinearIndexCreator) {
-                final double binSize = ((LinearIndexCreator)(entry.getValue())).getBinSize();
-                scores.put(binSize * densityOfFeatures * Math.ceil((double) longestFeature / binSize), entry.getValue());
-            } else if (entry.getValue() instanceof IntervalIndexCreator) {
-                scores.put((double) ((IntervalIndexCreator)entry.getValue()).getFeaturesPerInterval(), entry.getValue());
-            } else {
-                throw new TribbleException.UnableToCreateCorrectIndexType("Unknown index type, we don't have a scoring method for " + entry.getValue().getClass());
-            }
-        }
-        return scores;
-    }
-
-    /**
-     * utility function to find the min of a list
-     * @param scores the list of scaled features/bin scores for each index type
-     * @return the best score <b>index value</b>
-     */
-    private TribbleIndexCreator getMinIndex(final Map<Double,TribbleIndexCreator> scores, final IndexFactory.IndexBalanceApproach iba) {
-        final TreeMap<Double,TribbleIndexCreator> map = new TreeMap<Double,TribbleIndexCreator>();
-        map.putAll(scores);
-        
-        // if we are optimizing for seek time, choose the lowest score (adjusted features/bin value), if for storage size, choose the opposite
-        final TribbleIndexCreator idx = (iba != IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME) ? map.get(map.lastKey()) : map.get(map.firstKey());
-        return idx;
-    }
-
-    @Override
-    public void addProperty(final String key, final String value) {
-        for (final TribbleIndexCreator creator : creators.values()) {
-            creator.addProperty(key, value);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/Index.java b/src/main/java/htsjdk/tribble/index/Index.java
deleted file mode 100644
index ca6cc60..0000000
--- a/src/main/java/htsjdk/tribble/index/Index.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Interface for all index implementations.
- * An index file is used for efficient lookup of features from a feature file;
- * and Index represents that index file.
- */
-public interface Index {
-    /**
-     * Query the index.
-     * @param chr the chromosome
-     * @param start the start position
-     * @param end the end position
-     * @return a list of blocks that contain the specified interval.  Can never return null
-     * @throws IllegalArgumentException of chr isn't part of this index
-     */
-    List<Block> getBlocks(String chr, int start, int end);
-
-    /**
-     * @return true if the index is up to date, false otherwise
-     */
-    public boolean isCurrentVersion();
-
-    /**
-     * @return a list of the sequence names we've seen during indexing, in order
-     */
-    List<String> getSequenceNames();
-
-    /**
-     * @param chr the chromosome (or contig) name
-     * @return true if we have an entry; false otherwise
-     */
-    public boolean containsChromosome(final String chr);
-
-    /**
-     * all indexes are writable to disk
-     * @param stream the stream to write the index to.  Caller must close after invocation.
-     * @throws IOException if the index is unable to write to the specified location
-     */
-    public void write(LittleEndianOutputStream stream) throws IOException;
-
-    /**
-     * Writes the index into a file.
-     *
-     * @param idxFile Where to write the index.
-     * @throws IOException if the index is unable to write to the specified file
-     */
-    public void write(final File idxFile) throws IOException;
-
-    /**
-     * Write an appropriately named and located Index file based on the name and location of the featureFile.
-     * If featureFile is not a normal file, the index will silently not be written.
-     * @param featureFile
-     */
-    public void writeBasedOnFeatureFile(File featureFile) throws IOException;
-
-    /**
-     * @return get the list of properties for this index.  Returns null if no properties.
-     */
-    public Map<String,String> getProperties();
-
-    /**
-     * Returns true if this and obj are 'effectively' equivalent indices.  Ignores the
-     * time stamp on the file, as this may not be the same for even identical indices
-     * @param obj
-     * @return
-     */
-    public boolean equalsIgnoreProperties(Object obj);
-}
diff --git a/src/main/java/htsjdk/tribble/index/IndexCreator.java b/src/main/java/htsjdk/tribble/index/IndexCreator.java
deleted file mode 100644
index c90ec9f..0000000
--- a/src/main/java/htsjdk/tribble/index/IndexCreator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.tribble.Feature;
-
-/**
- *
- * An interface for creating indexes
- *
- * @author jrobinso
- */                                                                           
-public interface IndexCreator {
-    /**
-     * Add a feature to the index
-     * @param feature the feature, of which start, end, and contig must be filled in
-     * @param filePosition the current file position, at the beginning of the specified feature
-     */
-    public void addFeature(Feature feature, long filePosition);
-
-    /**
-     * Create the index, given the stream of features passed in to this point
-     * @param finalFilePosition the final file position, for indexes that have to close out with the final position
-     * @return an index object
-     */
-    public Index finalizeIndex(long finalFilePosition);
-
-    /**
-     * Set the sequence dictionary for the index. Default implementation does nothing.
-     * @param dict the dictionary to add to the index.
-     */
-    public default void setIndexSequenceDictionary(final SAMSequenceDictionary dict) { }
-}
-
-
diff --git a/src/main/java/htsjdk/tribble/index/IndexFactory.java b/src/main/java/htsjdk/tribble/index/IndexFactory.java
deleted file mode 100644
index 4e23e93..0000000
--- a/src/main/java/htsjdk/tribble/index/IndexFactory.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.seekablestream.ISeekableStreamFactory;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.BlockCompressedStreamConstants;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.tribble.*;
-import htsjdk.tribble.index.interval.IntervalIndexCreator;
-import htsjdk.tribble.index.interval.IntervalTreeIndex;
-import htsjdk.tribble.index.linear.LinearIndex;
-import htsjdk.tribble.index.linear.LinearIndexCreator;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.index.tabix.TabixIndex;
-import htsjdk.tribble.index.tabix.TabixIndexCreator;
-import htsjdk.tribble.readers.PositionalBufferedStream;
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.tribble.util.TabixUtils;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Factory class for creating indexes.  It is the responsibility of this class to determine and create the
- * correct index type from the input file or stream.  Only LinearIndex and IntervalTreeIndex are supported
- * by this factory.
- */
-public class IndexFactory {
-    /** We can optimize index-file-creation for different factors. As of this writing, those are index-file size or seeking time. */
-    public enum IndexBalanceApproach {
-        FOR_SIZE,
-        FOR_SEEK_TIME
-    }
-
-    /**
-     * an enum that contains all of the information about the index types, and how to create them
-     */
-    public enum IndexType {
-        LINEAR(LinearIndex.MAGIC_NUMBER, LinearIndex.INDEX_TYPE, LinearIndexCreator.class, LinearIndex.class, LinearIndexCreator.DEFAULT_BIN_WIDTH),
-        INTERVAL_TREE(IntervalTreeIndex.MAGIC_NUMBER, IntervalTreeIndex.INDEX_TYPE, IntervalIndexCreator.class, IntervalTreeIndex.class, IntervalIndexCreator.DEFAULT_FEATURE_COUNT),
-        // Tabix index initialization requires additional information, so generic construction won't work, thus indexCreatorClass is null.
-        TABIX(TabixIndex.MAGIC_NUMBER, null, null, TabixIndex.class, -1);
-
-        private final int magicNumber;
-        private final Integer tribbleIndexType;
-        private final Class<IndexCreator> indexCreatorClass;
-        private final int defaultBinSize;
-        private final Class<Index> indexType;
-
-        public int getDefaultBinSize() {
-            return defaultBinSize;
-        }
-
-        public IndexCreator getIndexCreator() {
-            try {
-                return indexCreatorClass.newInstance();
-            } catch ( final InstantiationException e ) {
-                throw new TribbleException("Couldn't make index creator in " + this, e);
-            } catch ( final IllegalAccessException e ) {
-                throw new TribbleException("Couldn't make index creator in " + this, e);
-            }
-        }
-
-        public boolean canCreate() {
-            return indexCreatorClass != null;
-        }
-
-        IndexType(final int magicNumber, final Integer tribbleIndexType, final Class creator, final Class indexClass, final int defaultBinSize) {
-            this.magicNumber = magicNumber;
-            this.tribbleIndexType = tribbleIndexType;
-            indexCreatorClass = creator;
-            indexType = indexClass;
-            this.defaultBinSize = defaultBinSize;
-        }
-
-        public Integer getTribbleIndexType() {
-            return tribbleIndexType;
-        }
-
-        public Class<Index> getIndexType() {
-            return indexType;
-        }
-
-        public int getMagicNumber() { return magicNumber; }
-
-        /**
-         *
-         * @param is InputStream of index.  This will be reset to location it was at when method was invoked.
-         * @return The {@code IndexType} based on the {@code headerValue}
-         * @throws TribbleException.UnableToCreateCorrectIndexType
-         */
-        public static IndexType getIndexType(final BufferedInputStream is) {
-            // Currently only need 8 bytes, so this should be plenty
-            is.mark(128);
-            final LittleEndianInputStream dis = new LittleEndianInputStream(is);
-            final int magicNumber;
-            final int type;
-
-            try {
-                // Read the type and version,  then create the appropriate type
-                magicNumber = dis.readInt();
-                // This is not appropriate for all types, but it doesn't hurt to read it.
-                type = dis.readInt();
-                is.reset();
-
-                for (final IndexType indexType : IndexType.values()) {
-                    if (indexType.magicNumber == magicNumber &&
-                            (indexType.tribbleIndexType == null || indexType.tribbleIndexType == type)) {
-                        return indexType;
-                    }
-                }
-            } catch (final IOException e) {
-                throw new TribbleException("Problem detecting index type", e);
-            }
-
-            throw new TribbleException.UnableToCreateCorrectIndexType(
-                    String.format("Unknown index type.  magic number: 0x%x; type %d", magicNumber, type));
-        }
-    }
-
-
-    /**
-     * Load in index from the specified file.   The type of index (LinearIndex or IntervalTreeIndex) is determined
-     * at run time by reading the type flag in the file.
-     *
-     * @param indexFile from which to load the index
-     */
-    public static Index loadIndex(final String indexFile) {
-        // Must be buffered, because getIndexType uses mark and reset
-        try (BufferedInputStream bufferedInputStream = new BufferedInputStream(indexFileInputStream(indexFile), Defaults.NON_ZERO_BUFFER_SIZE)){
-            final Class<Index> indexClass = IndexType.getIndexType(bufferedInputStream).getIndexType();
-            final Constructor<Index> ctor = indexClass.getConstructor(InputStream.class);
-            return ctor.newInstance(bufferedInputStream);
-        } catch (final IOException ex) {
-            throw new TribbleException.UnableToReadIndexFile("Unable to read index file", indexFile, ex);
-        } catch (final Exception ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private static InputStream indexFileInputStream(final String indexFile) throws IOException {
-        final InputStream inputStreamInitial = ParsingUtils.openInputStream(indexFile);
-        if (indexFile.endsWith(".gz")) {
-            return new GZIPInputStream(inputStreamInitial);
-        }
-        else if (indexFile.endsWith(TabixUtils.STANDARD_INDEX_EXTENSION)) {
-            return new BlockCompressedInputStream(inputStreamInitial);
-        }
-        else {
-            return inputStreamInitial;
-        }
-    }
-
-    /**
-     * a helper method for creating a linear binned index with default bin size
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     */
-    public static LinearIndex createLinearIndex(final File inputFile, final FeatureCodec codec) {
-        return createLinearIndex(inputFile, codec, LinearIndexCreator.DEFAULT_BIN_WIDTH);
-    }
-
-    /**
-     * a helper method for creating a linear binned index
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     * @param binSize   the bin size
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> LinearIndex createLinearIndex(final File inputFile,
-                                                                                      final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                      final int binSize) {
-        final LinearIndexCreator indexCreator = new LinearIndexCreator(inputFile, binSize);
-        return (LinearIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
-    }
-
-    /**
-     * create an interval-tree index with the default features per bin count
-     *
-     * @param inputFile the file containing the features
-     * @param codec to decode the features
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> IntervalTreeIndex createIntervalIndex(final File inputFile,
-                                                                                        final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec) {
-        return createIntervalIndex(inputFile, codec, IntervalIndexCreator.DEFAULT_FEATURE_COUNT);
-    }
-
-
-    /**
-     * a helper method for creating an interval-tree index
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     * @param featuresPerInterval
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> IntervalTreeIndex createIntervalIndex(final File inputFile,
-                                                                                        final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                        final int featuresPerInterval) {
-        final IntervalIndexCreator indexCreator = new IntervalIndexCreator(inputFile, featuresPerInterval);
-        return (IntervalTreeIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
-    }
-
-    /**
-     * Create a dynamic index with the default balancing approach
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createDynamicIndex(final File inputFile, final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec) {
-        return createDynamicIndex(inputFile, codec, IndexBalanceApproach.FOR_SEEK_TIME);
-    }
-
-    /**
-     * Create a index of the specified type with default binning parameters
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     * @param type      the type of index to create
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createIndex(final File inputFile,
-                                                                                final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                final IndexType type) {
-        return createIndex(inputFile, codec, type, null);
-    }
-
-    /**
-     * Create an index of the specified type with default binning parameters
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     * @param type      the type of index to create
-     * @param sequenceDictionary May be null, but if present may reduce memory footprint for tabix index creation
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createIndex(final File inputFile,
-                                                                                final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                final IndexType type,
-                                                                                final SAMSequenceDictionary sequenceDictionary) {
-        switch (type) {
-            case INTERVAL_TREE: return createIntervalIndex(inputFile, codec);
-            case LINEAR:        return createLinearIndex(inputFile, codec);
-            case TABIX:         return createTabixIndex(inputFile, codec, sequenceDictionary);
-        }
-        throw new IllegalArgumentException("Unrecognized IndexType " + type);
-    }
-
-    /**
-     * Write the index to a file; little endian.
-     * @param idx
-     * @param idxFile
-     * @throws IOException
-     * @deprecated use {@link Index#write(File)} instead
-     */
-    @Deprecated
-    public static void writeIndex(final Index idx, final File idxFile) throws IOException {
-        idx.write(idxFile);
-    }
-
-    /**
-     * create a dynamic index, given an input file, codec, and balance approach
-     *
-     * @param inputFile the input file to load features from
-     * @param codec     the codec to use for decoding records
-     * @param iba       the index balancing approach
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createDynamicIndex(final File inputFile,
-                                                                                       final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                       final IndexBalanceApproach iba) {
-        // get a list of index creators
-        final DynamicIndexCreator indexCreator = new DynamicIndexCreator(inputFile, iba);
-        return createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
-    }
-
-    /**
-     * @param inputFile The file to be indexed.
-     * @param codec Mechanism for reading inputFile.
-     * @param tabixFormat Header fields for TabixIndex to be produced.
-     * @param sequenceDictionary May be null, but if present may reduce memory footprint for index creation.  Features
-     *                           in inputFile must be in the order defined by sequenceDictionary, if it is present.
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> TabixIndex createTabixIndex(final File inputFile,
-                                                                                     final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-                                                                                     final TabixFormat tabixFormat,
-                                                                                     final SAMSequenceDictionary sequenceDictionary) {
-        final TabixIndexCreator indexCreator = new TabixIndexCreator(sequenceDictionary, tabixFormat);
-        return (TabixIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
-    }
-
-    /**
-     * @param inputFile The file to be indexed.
-     * @param codec the codec to use for decoding records
-     * @param sequenceDictionary May be null, but if present may reduce memory footprint for index creation.  Features
-     *                           in inputFile must be in the order defined by sequenceDictionary, if it is present.
-     *
-     */
-    public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> TabixIndex createTabixIndex(final File inputFile,
-            final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
-            final SAMSequenceDictionary sequenceDictionary) {
-        return createTabixIndex(inputFile, codec, codec.getTabixFormat(), sequenceDictionary);
-    }
-
-    private static Index createIndex(final File inputFile, final FeatureIterator iterator, final IndexCreator creator) {
-        Feature lastFeature = null;
-        Feature currentFeature;
-        final Map<String, Feature> visitedChromos = new HashMap<String, Feature>(40);
-        while (iterator.hasNext()) {
-            final long position = iterator.getPosition();
-            currentFeature = iterator.next();
-
-            checkSorted(inputFile, lastFeature, currentFeature);
-            //should only visit chromosomes once
-            final String curChr = currentFeature.getContig();
-            final String lastChr = lastFeature != null ? lastFeature.getContig() : null;
-            if(!curChr.equals(lastChr)){
-                if(visitedChromos.containsKey(curChr)){
-                    String msg = "Input file must have contiguous chromosomes.";
-                    msg += " Saw feature " + featToString(visitedChromos.get(curChr));
-                    msg += " followed later by " + featToString(lastFeature);
-                    msg += " and then " + featToString(currentFeature);
-                    throw new TribbleException.MalformedFeatureFile(msg, inputFile.getAbsolutePath());
-                }else{
-                    visitedChromos.put(curChr, currentFeature);
-                }
-            }
-
-            creator.addFeature(currentFeature, position);
-
-            lastFeature = currentFeature;
-        }
-
-        iterator.close();
-        return creator.finalizeIndex(iterator.getPosition());
-    }
-
-    private static String featToString(final Feature feature){
-        return feature.getContig() + ":" + feature.getStart() + "-" + feature.getEnd();
-    }
-
-    private static void checkSorted(final File inputFile, final Feature lastFeature, final Feature currentFeature){
-        // if the last currentFeature is after the current currentFeature, exception out
-        if (lastFeature != null && currentFeature.getStart() < lastFeature.getStart() && lastFeature.getContig().equals(currentFeature.getContig()))
-            throw new TribbleException.MalformedFeatureFile("Input file is not sorted by start position. \n" +
-                    "We saw a record with a start of " + currentFeature.getContig() + ":" + currentFeature.getStart() +
-                    " after a record with a start of " + lastFeature.getContig() + ":" + lastFeature.getStart(), inputFile.getAbsolutePath());
-    }
-
-
-    /**
-     * Iterator for reading features from a file, given a {@code FeatureCodec}.
-     */
-    static class FeatureIterator<FEATURE_TYPE extends Feature, SOURCE> implements CloseableTribbleIterator<Feature> {
-        // the stream we use to get features
-        private final SOURCE source;
-        // the next feature
-        private Feature nextFeature;
-        // our codec
-        private final FeatureCodec<FEATURE_TYPE, SOURCE> codec;
-        private final File inputFile;
-
-        // we also need cache our position
-        private long cachedPosition;
-
-        /**
-         *
-         * @param inputFile The file from which to read. Stream for reading is opened on construction.
-         * @param codec
-         */
-        public FeatureIterator(final File inputFile, final FeatureCodec<FEATURE_TYPE, SOURCE> codec) {
-            this.codec = codec;
-            this.inputFile = inputFile;
-            final FeatureCodecHeader header = readHeader();
-            source = (SOURCE) codec.makeIndexableSourceFromStream(initStream(inputFile, header.getHeaderEnd()));
-            readNextFeature();
-        }
-
-        /**
-         * Some codecs,  e.g. VCF files,  need the header to decode features.  This is a rather poor design,
-         * the internal header is set as a side-affect of reading it, but we have to live with it for now.
-         */
-        private FeatureCodecHeader readHeader() {
-            try {
-                final SOURCE source = this.codec.makeSourceFromStream(initStream(inputFile, 0));
-                final FeatureCodecHeader header = this.codec.readHeader(source);
-                codec.close(source);
-                return header;
-            } catch (final IOException e) {
-                throw new TribbleException.InvalidHeader("Error reading header " + e.getMessage());
-            }
-        }
-
-        private PositionalBufferedStream initStream(final File inputFile, final long skip) {
-            try {
-                final FileInputStream fileStream = new FileInputStream(inputFile);
-                final InputStream is;
-
-                // if this looks like a block compressed file and it in fact is, we will use it
-                // otherwise we will use the file as is
-                if (AbstractFeatureReader.hasBlockCompressedExtension(inputFile)) {
-                    // make a buffered stream to test that this is in fact a valid block compressed file
-                    final int bufferSize = Math.max(Defaults.BUFFER_SIZE, BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE);
-                    final BufferedInputStream bufferedStream = new BufferedInputStream(fileStream, bufferSize);
-
-                    if (!BlockCompressedInputStream.isValidFile(bufferedStream)) {
-                        throw new TribbleException.MalformedFeatureFile("Input file is not in valid block compressed format.", inputFile.getAbsolutePath());
-                    }
-
-                    final ISeekableStreamFactory ssf = SeekableStreamFactory.getInstance();
-                    // if we got here, the file is valid, make a SeekableStream for the BlockCompressedInputStream to read from
-                    final SeekableStream seekableStream =
-                            ssf.getBufferedStream(ssf.getStreamFor(inputFile.getAbsolutePath()));
-                    is = new BlockCompressedInputStream(seekableStream);
-                }
-                else {
-                    is = fileStream;
-                }
-
-                final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
-
-                if ( skip > 0 ) pbs.skip(skip);
-                return pbs;
-            } catch (final FileNotFoundException e) {
-                throw new TribbleException.FeatureFileDoesntExist("Unable to open the input file, most likely the file doesn't exist.", inputFile.getAbsolutePath());
-            } catch (final IOException e) {
-                throw new TribbleException.MalformedFeatureFile("Error initializing stream", inputFile.getAbsolutePath(), e);
-            }
-        }
-
-        public boolean hasNext() {
-            return nextFeature != null;
-        }
-
-        public Feature next() {
-            final Feature ret = nextFeature;
-            readNextFeature();
-            return ret;
-        }
-
-        /**
-         * @throws UnsupportedOperationException
-         */
-        public void remove() {
-            throw new UnsupportedOperationException("We cannot remove");
-        }
-
-
-        /**
-         * @return the file position from the underlying reader
-         */
-        public long getPosition() {
-            return (hasNext()) ? cachedPosition : ((LocationAware) source).getPosition();
-        }
-
-        @Override
-        public Iterator<Feature> iterator() {
-            return this;
-        }
-
-        @Override
-        public void close() {
-            codec.close(source);
-        }
-
-        /**
-         * Read the next feature from the stream
-         * @throws TribbleException.MalformedFeatureFile
-         */
-        private void readNextFeature() {
-            cachedPosition = ((LocationAware) source).getPosition();
-            try {
-                nextFeature = null;
-                while (nextFeature == null && !codec.isDone(source)) {
-                    nextFeature = codec.decodeLoc(source);
-                }
-            } catch (final IOException e) {
-                throw new TribbleException.MalformedFeatureFile("Unable to read a line from the file", inputFile.getAbsolutePath(), e);
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/MutableIndex.java b/src/main/java/htsjdk/tribble/index/MutableIndex.java
deleted file mode 100644
index 425b996..0000000
--- a/src/main/java/htsjdk/tribble/index/MutableIndex.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import java.util.Map;
-
-/**
- * Some Index implementations can be modified in memory.  Also, properties do not make sense for all index types.
- * Only the relevant index implementations implement this interface.
- */
-public interface MutableIndex extends Index {
-    void addProperty(String key, String value);
-
-    void addProperties(Map<String, String> properties);
-}
diff --git a/src/main/java/htsjdk/tribble/index/TribbleIndexCreator.java b/src/main/java/htsjdk/tribble/index/TribbleIndexCreator.java
deleted file mode 100644
index f7385e8..0000000
--- a/src/main/java/htsjdk/tribble/index/TribbleIndexCreator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-
-import java.util.LinkedHashMap;
-
-/**
- * Base class for Tribble-specific index creators.
- */
-public abstract class TribbleIndexCreator implements IndexCreator {
-    // a constant we use for marking sequence dictionary entries in the Tribble index property list
-    private static final String SEQUENCE_DICTIONARY_PROPERTY_PREDICATE = "DICT:";
-
-    protected LinkedHashMap<String, String> properties = new LinkedHashMap<String, String>();
-
-    public void addProperty(final String key, final String value) {
-        properties.put(key, value);
-    }
-
-    /** Set the sequence dictionary entries for the index property list. */
-    @Override
-    public void setIndexSequenceDictionary(final SAMSequenceDictionary dict) {
-        for (final SAMSequenceRecord seq : dict.getSequences()) {
-            final String contig = SEQUENCE_DICTIONARY_PROPERTY_PREDICATE + seq.getSequenceName();
-            final String length = String.valueOf(seq.getSequenceLength());
-            addProperty(contig,length);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/interval/Interval.java b/src/main/java/htsjdk/tribble/index/interval/Interval.java
deleted file mode 100644
index 9d47877..0000000
--- a/src/main/java/htsjdk/tribble/index/interval/Interval.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.interval;
-
-import htsjdk.tribble.index.Block;
-
-
-/**
- *  Quick and dirty interval class
- *  Describes a genomic interval and where in a file information for that
- *  interval can be obtained
- */
-public class Interval implements Comparable {
-    /**
-     * Start of the interval in genomic coordinates -- this is exposed on purpose, getters have a significant
-     * performance penalty for this field.
-     */
-     final int start;
-
-    /**
-     * End of the interval in genomic coordinates -- this is exposed on purpose, getters have a significant
-     * performance penalty for this field.
-     */
-     final int end;
-
-    /**
-     * File block  (position, size) containing the data for this interval
-     */
-    private Block block;
-
-    public Interval(int start, int end) {
-        assert start <= end;
-        this.start = start;
-        this.end = end;
-    }
-
-
-    public Interval(int start, int end, Block block) {
-        assert start <= end;
-        this.start = start;
-        this.end = end;
-        this.block = block;
-    }
-
-
-    public boolean equals(Object other) {
-        if (this == other)
-            return true;
-        if (this.getClass().equals(other.getClass())) {
-            Interval otherInterval = (Interval) other;
-            return (this.start == otherInterval.start &&
-                    this.end == otherInterval.end);
-        }
-        return false;
-    }
-
-
-    public int hashCode() {
-        return start;
-    }
-
-
-    public int compareTo(Object o) {
-        Interval other = (Interval) o;
-        if (this.start < other.start)
-            return -1;
-        if (this.start > other.start)
-            return 1;
-
-        if (this.end < other.end)
-            return -1;
-        if (this.end > other.end)
-            return 1;
-
-        return 0;
-    }
-
-    public String toString() {
-        return "Interval[" + this.start + ", " + this.end + "]";
-    }
-
-
-    /**
-     * @return whether this interval overlaps the other.
-     */
-    public boolean overlaps(Interval other) {
-        return (this.start <= other.end &&
-                other.start <= this.end);
-    }
-
-
-    /**
-     * @return The file block for this interval
-     */
-    public Block getBlock() {
-        return block;
-    }
-}
-
diff --git a/src/main/java/htsjdk/tribble/index/interval/IntervalIndexCreator.java b/src/main/java/htsjdk/tribble/index/interval/IntervalIndexCreator.java
deleted file mode 100644
index e826eda..0000000
--- a/src/main/java/htsjdk/tribble/index/interval/IntervalIndexCreator.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.interval;
-
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.TribbleIndexCreator;
-import htsjdk.tribble.index.interval.IntervalTreeIndex.ChrIndex;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * Creates interval indexes from a stream of features
- * @author jrobinso
- */
-public class IntervalIndexCreator extends TribbleIndexCreator {
-
-    public static int DEFAULT_FEATURE_COUNT = 600;
-
-    /**
-     * Maximum number of features stored per interval.
-     * @see #DEFAULT_FEATURE_COUNT
-     */
-    private int featuresPerInterval = DEFAULT_FEATURE_COUNT;
-
-    private final LinkedList<ChrIndex> chrList = new LinkedList<ChrIndex>();
-
-    /**
-     * Instance variable for the number of features we currently are storing in the interval
-     */
-    private int featureCount = 0;
-
-    private final ArrayList<MutableInterval> intervals = new ArrayList<MutableInterval>();
-
-    File inputFile;
-
-    public IntervalIndexCreator(final File inputFile, final int featuresPerInterval) {
-        this.inputFile = inputFile;
-        this.featuresPerInterval = featuresPerInterval;
-    }
-
-    public IntervalIndexCreator(final File inputFile) {
-        this(inputFile, DEFAULT_FEATURE_COUNT);
-    }
-
-    public void addFeature(final Feature feature, final long filePosition) {
-        // if we don't have a chrIndex yet, or if the last one was for the previous contig, create a new one
-        if (chrList.isEmpty() || !chrList.getLast().getName().equals(feature.getContig())) {
-            // if we're creating a new chrIndex (not the first), make sure to dump the intervals to the old chrIndex
-            if (!chrList.isEmpty())
-                addIntervalsToLastChr(filePosition);
-
-            // create a new chr index for the current contig
-            chrList.add(new ChrIndex(feature.getContig()));
-            intervals.clear();
-        }
-
-        // if we're about to overflow the current bin, make a new one
-        if (featureCount >= featuresPerInterval || intervals.isEmpty()) {
-            final MutableInterval i = new MutableInterval();
-            i.setStart(feature.getStart());
-            i.setStartFilePosition(filePosition);
-            if(!intervals.isEmpty()) intervals.get(intervals.size()-1).setEndFilePosition(filePosition);
-            featureCount = 0; // reset the feature count
-            intervals.add(i);
-        }
-        
-        // make sure we update the ending position of the bin
-        intervals.get(intervals.size()-1).setStop(Math.max(feature.getEnd(),intervals.get(intervals.size()-1).getStop()));
-        featureCount++;
-    }
-
-    /**
-     * dump the intervals we have stored to the last chrList entry
-     * @param currentPos the current position, for the last entry in the interval list
-     */
-    private void addIntervalsToLastChr(final long currentPos) {
-        for (int x = 0; x < intervals.size(); x++) {
-            if (x == intervals.size()-1) intervals.get(x).setEndFilePosition(currentPos);
-            chrList.getLast().insert(intervals.get(x).toInterval());
-        }
-    }
-
-    /**
-     * finalize the index; create a tree index given the feature list passed in so far
-     * @param finalFilePosition the final file position, for indexes that have to close out with the final position
-     * @return a Tree Index
-     */
-    public Index finalizeIndex(final long finalFilePosition) {
-        final IntervalTreeIndex featureIndex = new IntervalTreeIndex(inputFile.getAbsolutePath());
-        // dump the remaining bins to the index
-        addIntervalsToLastChr(finalFilePosition);
-        featureIndex.setChrIndex(chrList);
-        featureIndex.addProperties(properties);
-        featureIndex.finalizeIndex();
-        return featureIndex;
-    }
-
-    public int getFeaturesPerInterval() {
-        return featuresPerInterval;
-    }
-}
-
-/**
- * The interval class isn't mutable; use this private class as a temporary storage until we're ready to make intervals
- */
-class MutableInterval {
-
-    // the start, the stop, and the start position
-    private int start;
-    private int stop;                                                                                                                                               
-    private long startFilePosition;
-    private long endFilePosition;
-
-    public void setStart(final int start) {
-        if (start < 0) throw new IllegalArgumentException("Start must be greater than 0!");
-        this.start = start;
-    }
-
-    public void setStop(final int stop) {
-        if (stop < 0) throw new IllegalArgumentException("Start must be greater than 0!");
-        this.stop = stop;
-    }
-
-    public void setStartFilePosition(final long startFilePosition) {
-        this.startFilePosition = startFilePosition;
-    }
-
-    public void setEndFilePosition(final long endFilePosition) {
-        this.endFilePosition = endFilePosition;
-    }
-
-    public Interval toInterval() {
-        return new Interval(start,stop,new Block(startFilePosition, endFilePosition - startFilePosition));
-    }
-
-    public int getStop() {
-        return stop;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/index/interval/IntervalTree.java b/src/main/java/htsjdk/tribble/index/interval/IntervalTree.java
deleted file mode 100644
index 855ade9..0000000
--- a/src/main/java/htsjdk/tribble/index/interval/IntervalTree.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.interval;
-
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * An implementation of an interval tree, following the explanation.
- * from CLR. For efficiently finding all intervals which overlap a given
- * interval or point.
- * <p/>
- * References:
- * http://en.wikipedia.org/wiki/Interval_tree
- * <p/>
- * Cormen, Thomas H.; Leiserson, Charles E., Rivest, Ronald L. (1990). Introduction to Algorithms (1st ed.). MIT Press and McGraw-Hill. ISBN 0-262-03141-8
- */
-public class IntervalTree {
-
-    Node root;
-    Node NIL = Node.NIL;
-
-    /**
-     * See {@link #getSize()}
-     */
-    int size;
-
-    public IntervalTree() {
-        this.root = NIL;
-        this.size = 0;
-    }
-
-
-    public void insert(Interval interval) {
-        Node node = new Node(interval);
-        insert(node);
-        size++;
-    }
-
-    /**
-     * The estimated size of the tree. We keep a running count
-     * on each insert, this getter returns that count.
-     *
-     * @return
-     * @see #size()
-     */
-    public int getSize() {
-        return size;
-    }
-
-    /**
-     * @param interval
-     * @return all matches as a list of Intervals
-     */
-    public List<Interval> findOverlapping(Interval interval) {
-
-        if (root().isNull()) {
-            return Collections.emptyList();
-        }
-
-        List<Interval> results = new ArrayList<Interval>();
-        searchAll(interval, root(), results);
-        return results;
-    }
-
-    public String toString() {
-        return root().toString();
-    }
-
-    private List<Interval> searchAll(Interval interval, Node node, List<Interval> results) {
-        if (node.interval.overlaps(interval)) {
-            results.add(node.interval);
-        }
-        if (!node.left.isNull() && node.left.max >= interval.start) {
-            searchAll(interval, node.left, results);
-        }
-        if (!node.right.isNull() && node.right.min <= interval.end) {
-            searchAll(interval, node.right, results);
-        }
-        return results;
-    }
-
-    /**
-     * Return all intervals in tree.
-     * TODO: an iterator would be more effecient.
-     *
-     * @return
-     */
-    public List<Interval> getIntervals() {
-        if (root().isNull()) {
-            return Collections.emptyList();
-        }
-        List<Interval> results = new ArrayList<Interval>(size);
-        getAll(root(), results);
-        return results;
-    }
-
-    /**
-     * Get all nodes which are descendants of {@code node}, inclusive.
-     * {@code results} is modified in place
-     *
-     * @param node
-     * @param results
-     * @return the total list of descendants, including original {@code results}
-     */
-    private List<Interval> getAll(Node node, List<Interval> results) {
-
-        results.add(node.interval);
-        if (!node.left.isNull()) {
-            getAll(node.left, results);
-        }
-        if (!node.right.isNull()) {
-            getAll(node.right, results);
-        }
-        return results;
-    }
-
-
-    /**
-     * Used for testing only.
-     *
-     * @param node
-     * @return
-     */
-    private int getRealMax(Node node) {
-        if (node.isNull())
-            return Integer.MIN_VALUE;
-        int leftMax = getRealMax(node.left);
-        int rightMax = getRealMax(node.right);
-        int nodeHigh = (node.interval).end;
-
-        int max1 = (leftMax > rightMax ? leftMax : rightMax);
-        return (max1 > nodeHigh ? max1 : nodeHigh);
-    }
-
-    /**
-     * Used for testing only
-     *
-     * @param node
-     * @return
-     */
-    private int getRealMin(Node node) {
-        if (node.isNull())
-            return Integer.MAX_VALUE;
-
-        int leftMin = getRealMin(node.left);
-        int rightMin = getRealMin(node.right);
-        int nodeLow = (node.interval).start;
-
-        int min1 = (leftMin < rightMin ? leftMin : rightMin);
-        return (min1 < nodeLow ? min1 : nodeLow);
-    }
-
-
-    private void insert(Node x) {
-        assert (x != null);
-        assert (!x.isNull());
-
-        treeInsert(x);
-        x.color = Node.RED;
-        while (x != this.root && x.parent.color == Node.RED) {
-            if (x.parent == x.parent.parent.left) {
-                Node y = x.parent.parent.right;
-                if (y.color == Node.RED) {
-                    x.parent.color = Node.BLACK;
-                    y.color = Node.BLACK;
-                    x.parent.parent.color = Node.RED;
-                    x = x.parent.parent;
-                } else {
-                    if (x == x.parent.right) {
-                        x = x.parent;
-                        this.leftRotate(x);
-                    }
-                    x.parent.color = Node.BLACK;
-                    x.parent.parent.color = Node.RED;
-                    this.rightRotate(x.parent.parent);
-                }
-            } else {
-                Node y = x.parent.parent.left;
-                if (y.color == Node.RED) {
-                    x.parent.color = Node.BLACK;
-                    y.color = Node.BLACK;
-                    x.parent.parent.color = Node.RED;
-                    x = x.parent.parent;
-                } else {
-                    if (x == x.parent.left) {
-                        x = x.parent;
-                        this.rightRotate(x);
-                    }
-                    x.parent.color = Node.BLACK;
-                    x.parent.parent.color = Node.RED;
-                    this.leftRotate(x.parent.parent);
-                }
-            }
-        }
-        this.root.color = Node.BLACK;
-    }
-
-
-    private Node root() {
-        return this.root;
-    }
-
-
-    private void leftRotate(Node x) {
-        Node y = x.right;
-        x.right = y.left;
-        if (y.left != NIL) {
-            y.left.parent = x;
-        }
-        y.parent = x.parent;
-        if (x.parent == NIL) {
-            this.root = y;
-        } else {
-            if (x.parent.left == x) {
-                x.parent.left = y;
-            } else {
-                x.parent.right = y;
-            }
-        }
-        y.left = x;
-        x.parent = y;
-
-        applyUpdate(x);
-        // no need to apply update on y, since it'll y is an ancestor
-        // of x, and will be touched by applyUpdate().
-    }
-
-
-    private void rightRotate(Node x) {
-        Node y = x.left;
-        x.left = y.right;
-        if (y.right != NIL) {
-            y.right.parent = x;
-        }
-        y.parent = x.parent;
-        if (x.parent == NIL) {
-            this.root = y;
-        } else {
-            if (x.parent.right == x) {
-                x.parent.right = y;
-            } else {
-                x.parent.left = y;
-            }
-        }
-        y.right = x;
-        x.parent = y;
-
-
-        applyUpdate(x);
-        // no need to apply update on y, since it'll y is an ancestor
-        // of x, and will be touched by applyUpdate().
-    }
-
-
-    /**
-     * Note:  Does not maintain RB constraints,  this is done post insert
-     *
-     * @param x
-     */
-    private void treeInsert(Node x) {
-        Node node = this.root;
-        Node y = NIL;
-        while (node != NIL) {
-            y = node;
-            if (x.interval.start <= node.interval.start) {
-                node = node.left;
-            } else {
-                node = node.right;
-            }
-        }
-        x.parent = y;
-
-        if (y == NIL) {
-            this.root = x;
-            x.left = x.right = NIL;
-        } else {
-            if (x.interval.start <= y.interval.start) {
-                y.left = x;
-            } else {
-                y.right = x;
-            }
-        }
-
-        this.applyUpdate(x);
-    }
-
-
-    // Applies the statistic update on the node and its ancestors.
-
-    private void applyUpdate(Node node) {
-        while (!node.isNull()) {
-            this.update(node);
-            node = node.parent;
-        }
-    }
-
-    private void update(Node node) {
-        node.max = Math.max(Math.max(node.left.max, node.right.max), node.interval.end);
-        node.min = Math.min(Math.min(node.left.min, node.right.min), node.interval.start);
-    }
-
-    /**
-     * @return Returns the number of nodes in the tree.
-     * Recalculated each call
-     * @see #getSize()
-     */
-    public int size() {
-        return _size(this.root);
-    }
-
-
-    private int _size(Node node) {
-        if (node.isNull())
-            return 0;
-        return 1 + _size(node.left) + _size(node.right);
-    }
-
-
-    private boolean allRedNodesFollowConstraints(Node node) {
-        if (node.isNull())
-            return true;
-
-        if (node.color == Node.BLACK) {
-            return (allRedNodesFollowConstraints(node.left) &&
-                    allRedNodesFollowConstraints(node.right));
-        }
-
-        // At this point, we know we're on a RED node.
-        return (node.left.color == Node.BLACK &&
-                node.right.color == Node.BLACK &&
-                allRedNodesFollowConstraints(node.left) &&
-                allRedNodesFollowConstraints(node.right));
-    }
-
-
-    // Check that both ends are equally balanced in terms of black height.
-
-    private boolean isBalancedBlackHeight(Node node) {
-        if (node.isNull())
-            return true;
-        return (blackHeight(node.left) == blackHeight(node.right) &&
-                isBalancedBlackHeight(node.left) &&
-                isBalancedBlackHeight(node.right));
-    }
-
-
-    // The black height of a node should be left/right equal.
-
-    private int blackHeight(Node node) {
-        if (node.isNull())
-            return 0;
-        int leftBlackHeight = blackHeight(node.left);
-        if (node.color == Node.BLACK) {
-            return leftBlackHeight + 1;
-        } else {
-            return leftBlackHeight;
-        }
-    }
-
-
-    /**
-     * Test code: make sure that the tree has all the properties
-     * defined by Red Black trees and interval trees
-     * <p/>
-     * o.  Root is black.
-     * <p/>
-     * o.  NIL is black.
-     * <p/>
-     * o.  Red nodes have black children.
-     * <p/>
-     * o.  Every path from root to leaves contains the same number of
-     * black nodes.
-     * <p/>
-     * o.  getMax(node) is the maximum of any interval rooted at that node..
-     * <p/>
-     * This code is expensive, and only meant to be used for
-     * assertions and testing.
-     */
-    public boolean isValid() {
-        if (this.root.color != Node.BLACK) {
-            //logger.warn("root color is wrong");
-            return false;
-        }
-        if (NIL.color != Node.BLACK) {
-            //logger.warn("NIL color is wrong");
-            return false;
-        }
-        if (allRedNodesFollowConstraints(this.root) == false) {
-            //logger.warn("red node doesn't follow constraints");
-            return false;
-        }
-        if (isBalancedBlackHeight(this.root) == false) {
-            //logger.warn("black height unbalanced");
-            return false;
-        }
-
-        return hasCorrectMaxFields(this.root) &&
-                hasCorrectMinFields(this.root);
-    }
-
-
-    private boolean hasCorrectMaxFields(Node node) {
-        if (node.isNull())
-            return true;
-        return (getRealMax(node) == (node.max) &&
-                hasCorrectMaxFields(node.left) &&
-                hasCorrectMaxFields(node.right));
-    }
-
-
-    private boolean hasCorrectMinFields(Node node) {
-        if (node.isNull())
-            return true;
-        return (getRealMin(node) == (node.min) &&
-                hasCorrectMinFields(node.left) &&
-                hasCorrectMinFields(node.right));
-    }
-
-
-    static class Node {
-
-        public static boolean BLACK = false;
-        public static boolean RED = true;
-
-        Interval interval;
-        int min;
-        int max;
-        Node left;
-        Node right;
-
-        // Color and parent are used for inserts.  If tree is immutable these are not required (no requirement
-        // to store these persistently).
-        boolean color;
-        Node parent;
-
-
-        private Node() {
-            this.max = Integer.MIN_VALUE;
-            this.min = Integer.MAX_VALUE;
-        }
-
-        public void store(DataOutputStream dos) throws IOException {
-            dos.writeInt(interval.start);
-            dos.writeInt(interval.end);
-            dos.writeInt(min);
-            dos.writeInt(max);
-
-        }
-
-        public Node(Interval interval) {
-            this();
-            this.parent = NIL;
-            this.left = NIL;
-            this.right = NIL;
-            this.interval = interval;
-            this.color = RED;
-        }
-
-
-        static Node NIL;
-
-        static {
-            NIL = new Node();
-            NIL.color = BLACK;
-            NIL.parent = NIL;
-            NIL.left = NIL;
-            NIL.right = NIL;
-        }
-
-
-        public boolean isNull() {
-            return this == NIL;
-        }
-
-
-        public String toString() {
-
-            // Make some shorthand for the nodes
-            Map<Interval, Integer> keys = new LinkedHashMap<Interval, Integer>();
-
-            if (this == NIL) {
-                return "nil";
-            }
-
-            StringBuffer buf = new StringBuffer();
-            _toString(buf, keys);
-
-            buf.append('\n');
-            for (Map.Entry<Interval, Integer> entry : keys.entrySet()) {
-                buf.append(entry.getValue() + " = " + entry.getKey());
-                buf.append('\n');
-            }
-
-            return buf.toString();
-        }
-
-        public void _toString(StringBuffer buf, Map<Interval, Integer> keys) {
-            if (this == NIL) {
-                buf.append("nil");
-                buf.append('\n');
-                return;
-            }
-
-            Integer selfKey = keys.get(this.interval);
-            if (selfKey == null) {
-                selfKey = keys.size();
-                keys.put(this.interval, selfKey);
-            }
-            Integer leftKey = keys.get(this.left.interval);
-            if (leftKey == null) {
-                leftKey = keys.size();
-                keys.put(this.left.interval, leftKey);
-            }
-            Integer rightKey = keys.get(this.right.interval);
-            if (rightKey == null) {
-                rightKey = keys.size();
-                keys.put(this.right.interval, rightKey);
-            }
-
-
-            buf.append(selfKey + " -> " + leftKey + " , " + rightKey);
-            buf.append('\n');
-            this.left._toString(buf, keys);
-            this.right._toString(buf, keys);
-        }
-    }
-}
-
diff --git a/src/main/java/htsjdk/tribble/index/interval/IntervalTreeIndex.java b/src/main/java/htsjdk/tribble/index/interval/IntervalTreeIndex.java
deleted file mode 100644
index 055888e..0000000
--- a/src/main/java/htsjdk/tribble/index/interval/IntervalTreeIndex.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.interval;
-
-import htsjdk.tribble.index.AbstractIndex;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * Index based on an interval tree
- *
- * @author jrobinso
- * @date Jul 9, 2010
- * @see IntervalTree
- */
-public class IntervalTreeIndex extends AbstractIndex {
-    public static final int INDEX_TYPE = IndexType.INTERVAL_TREE.fileHeaderTypeIdentifier;
-
-    /**
-     * Load from file.
-     *
-     * @param inputStream This method assumes that the input stream is already buffered as appropriate.  Caller
-     *                    should close after this object is constructed.
-     */
-    public IntervalTreeIndex(final InputStream inputStream) throws IOException {
-        final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
-        validateIndexHeader(INDEX_TYPE, dis);
-        read(dis);
-    }
-
-    /**
-     * Prepare to build an index.
-     *
-     * @param featureFile File which we are indexing
-     */
-    public IntervalTreeIndex(final String featureFile) {
-        super(featureFile);
-    }
-
-    @Override
-    public Class getChrIndexClass() {
-        return ChrIndex.class;
-    }
-
-    @Override
-    protected int getType() {
-        return INDEX_TYPE;
-    }
-
-    /**
-     * Add a new interval to this index
-     *
-     * @param chr      Chromosome
-     * @param interval
-     */
-    public void insert(final String chr, final Interval interval) {
-        ChrIndex chrIdx = (ChrIndex) chrIndices.get(chr);
-        if (chrIdx == null) {
-            chrIdx = new ChrIndex(chr);
-            chrIndices.put(chr, chrIdx);
-        }
-        chrIdx.insert(interval);
-    }
-
-    protected void setChrIndex(final List<ChrIndex> indicies) {
-        for (final ChrIndex index : indicies) {
-            chrIndices.put(index.getName(), index);
-        }
-    }
-
-    public void printTree() {
-
-        for (final String chr : chrIndices.keySet()) {
-            System.out.println(chr + ":");
-            final ChrIndex chrIdx = (ChrIndex) chrIndices.get(chr);
-            chrIdx.printTree();
-            System.out.println();
-        }
-    }
-
-    public static class ChrIndex implements htsjdk.tribble.index.ChrIndex {
-
-        IntervalTree tree;
-        String name;
-
-        /**
-         * Default constructor needed for factory methods -- DO NOT REMOVE
-         */
-        public ChrIndex() {
-
-        }
-
-        public ChrIndex(final String name) {
-            this.name = name;
-            tree = new IntervalTree();
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void insert(final Interval iv) {
-            tree.insert(iv);
-        }
-
-        public List<Block> getBlocks() {
-            return null;
-        }
-
-
-        public List<Block> getBlocks(final int start, final int end) {
-
-            // Get intervals and build blocks list
-            final List<Interval> intervals = tree.findOverlapping(new Interval(start, end));
-
-            // save time (and save throwing an exception) if the blocks are empty, return now
-            if (intervals == null || intervals.isEmpty()) return new ArrayList<Block>();
-
-            final Block[] blocks = new Block[intervals.size()];
-            int idx = 0;
-            for (final Interval iv : intervals) {
-                blocks[idx++] = iv.getBlock();
-            }
-
-            // Sort blocks by start position
-            Arrays.sort(blocks, new Comparator<Block>() {
-                public int compare(final Block b1, final Block b2) {
-                    // this is a little cryptic because the normal method (b1.getStartPosition() - b2.getStartPosition()) wraps in int space and we incorrectly sort the blocks in extreme cases
-                    return b1.getStartPosition() - b2.getStartPosition() < 1 ? -1 : (b1.getStartPosition() - b2.getStartPosition() > 1 ? 1 : 0);
-                }
-            });
-
-            // Consolidate blocks  that are close together
-            final List<Block> consolidatedBlocks = new ArrayList<Block>(blocks.length);
-            Block lastBlock = blocks[0];
-            consolidatedBlocks.add(lastBlock);
-            for (int i = 1; i < blocks.length; i++) {
-                final Block block = blocks[i];
-                if (block.getStartPosition() < (lastBlock.getEndPosition() + 1000)) {
-                    lastBlock.setEndPosition(block.getEndPosition());
-                } else {
-                    lastBlock = block;
-                    consolidatedBlocks.add(lastBlock);
-                }
-            }
-
-            return consolidatedBlocks;
-        }
-
-        public void printTree() {
-            System.out.println(tree.toString());
-        }
-
-        public void write(final LittleEndianOutputStream dos) throws IOException {
-
-            dos.writeString(name);
-            final List<Interval> intervals = tree.getIntervals();
-
-            dos.writeInt(intervals.size());
-            for (final Interval interval : intervals) {
-                dos.writeInt(interval.start);
-                dos.writeInt(interval.end);
-                dos.writeLong(interval.getBlock().getStartPosition());
-                dos.writeInt((int) interval.getBlock().getSize());
-            }
-
-        }
-
-        public void read(final LittleEndianInputStream dis) throws IOException {
-
-            tree = new IntervalTree();
-
-            name = dis.readString();
-            int nIntervals = dis.readInt();
-            while (nIntervals-- > 0) {
-
-                final int start = dis.readInt();
-                final int end = dis.readInt();
-                final long pos = dis.readLong();
-                final int size = dis.readInt();
-
-                final Interval iv = new Interval(start, end, new Block(pos, size));
-                tree.insert(iv);
-            }
-
-
-        }
-
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/linear/LinearIndex.java b/src/main/java/htsjdk/tribble/index/linear/LinearIndex.java
deleted file mode 100644
index 4f4d910..0000000
--- a/src/main/java/htsjdk/tribble/index/linear/LinearIndex.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.linear;
-
-import htsjdk.tribble.index.AbstractIndex;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Index defined by dividing the genome by chromosome, then each chromosome into bins of fixed width (in
- * genomic coordinates).   Features are allocated to bins by start position.  The longest feature in each
- * recorded and used to adjust the start position of a query to include all bins that might have a feature
- * that overlaps the query interval.  This works well for feature sets of approximately homogeneous length,
- * or whose longest feature is on the order of the bin width or less.
- * <p/>
- * magicNumber      integer
- * type             integer
- * version          integer
- * filename         null terminated character array
- * filesize         long
- * lastModified     long
- * md5              String
- * flags            integer
- * <p/>
- * ------  LINEAR INDEX
- * nChromosomes     integer
- */
-public class LinearIndex extends AbstractIndex {
-
-    // NOTE: To debug uncomment the System.getProperty and recompile.
-    public static final double MAX_FEATURES_PER_BIN = Double.valueOf(System.getProperty("MAX_FEATURES_PER_BIN", "100"));
-    public static final int INDEX_TYPE = IndexType.LINEAR.fileHeaderTypeIdentifier;
-
-    private final static int MAX_BIN_WIDTH = 1 * 1000 * 1000 * 1000; //  widths must be less than 1 billion
-
-    // 1MB: we will no merge bins with any features in them beyond this size, no matter how sparse, per chromosome
-    private static final long MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX = Long.valueOf(System.getProperty("MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX", "1024000"));
-
-    public static boolean enableAdaptiveIndexing = true;
-
-    /**
-     * Initialize using the specified {@code indices}
-     * @param indices
-     * @param featureFile
-     */
-    public LinearIndex(final List<ChrIndex> indices, final File featureFile) {
-        super(featureFile.getAbsolutePath());
-        for (final ChrIndex index : indices)
-            chrIndices.put(index.getName(), index);
-    }
-
-    private LinearIndex(final LinearIndex parent, final List<ChrIndex> indices) {
-        super(parent);
-        for (final ChrIndex index : indices)
-            chrIndices.put(index.getName(), index);
-    }
-
-    /**
-     * Initialize with default parameters
-     * @param featureFile File for which this is an index
-     */
-    public LinearIndex(final String featureFile) {
-        super(featureFile);
-    }
-
-    /**
-     * Load from file.
-     * @param inputStream This method assumes that the input stream is already buffered as appropriate.
-     */
-    public LinearIndex(final InputStream inputStream) throws IOException {
-        final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
-        validateIndexHeader(INDEX_TYPE, dis);
-        read(dis);
-    }
-
-    public boolean isCurrentVersion() {
-        if (!super.isCurrentVersion()) return false;
-
-        // todo fixme nasty hack to determine if this is an old style V3 linear index (without nFeaturesPerBin)
-        for (final htsjdk.tribble.index.ChrIndex chrIndex : chrIndices.values())
-            if (((ChrIndex) chrIndex).OLD_V3_INDEX)
-                return false;
-
-        return true;
-    }
-
-    @Override
-    protected int getType() {
-        return INDEX_TYPE;
-    }
-
-    public List<String> getSequenceNames() {
-        return (chrIndices == null ? Collections.EMPTY_LIST :
-                Collections.unmodifiableList(new ArrayList<String>(chrIndices.keySet())));
-    }
-
-    @Override
-    public Class getChrIndexClass() {
-        return ChrIndex.class;
-    }
-
-
-    /**
-     * Blocks are organized as a simple flat list:
-     * <p/>
-     * Block 0
-     * Block 1
-     * Block 2
-     * <p/>
-     * There's a constant bin width, so that each block corresponds to a specific interval
-     * over the genome based on its index, as in:
-     * <p/>
-     * Block 0: (0 - binWidth]
-     * Block 1: (binWidth - 2 * binWidth]
-     * Block 2: (2 * binWidth - 3 * binWidth]
-     * <p/>
-     * Note that covered regions are open on the left ( and closed on the right ].
-     * <p/>
-     * In general, if block i is the ith block (starting from 0), then block i
-     * contains all records that have starting position > (i * binWidth) and
-     * <= ((i + 1) * binWidth))
-     */
-    public static class ChrIndex implements htsjdk.tribble.index.ChrIndex {
-        private String name = "";
-        private int binWidth;
-        private int longestFeature;
-        private int nFeatures;
-        private List<Block> blocks;
-
-        private boolean OLD_V3_INDEX = false;
-
-        /**
-         * Default constructor needed for factory methods -- DO NOT REMOVE
-         */
-        public ChrIndex() {
-
-        }
-
-        ChrIndex(final String name, final int binWidth) {
-            this.name = name;
-            this.binWidth = binWidth;
-            this.blocks = new ArrayList<Block>(100);
-            this.longestFeature = 0;
-            //this.largestBlockSize = 0;
-            this.nFeatures = 0;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        void addBlock(final Block block) {
-            blocks.add(block);
-            //largestBlockSize = Math.max(largestBlockSize, block.getSize());
-        }
-
-        public int getNBlocks() {
-            return blocks.size();
-        }
-
-        public List<Block> getBlocks() {
-            return blocks;
-        }
-
-        public List<Block> getBlocks(final int start, final int end) {
-            if (blocks.isEmpty()) {
-                return Collections.emptyList();
-            } else {
-                // Adjust position for the longest feature in this chromosome.  This insures we get
-                // features that start before the bin but extend into it
-                final int adjustedPosition = Math.max(start - longestFeature, 0);
-                final int startBinNumber = adjustedPosition / binWidth;
-                if (startBinNumber >= blocks.size()) // are we off the end of the bin list, so return nothing
-                    return Collections.emptyList();
-                else {
-                    final int endBinNumber = Math.min((end - 1) / binWidth, blocks.size() - 1);
-
-                    // By definition blocks are adjacent for the liner index.  Combine them into one merged block
-
-                    final long startPos = blocks.get(startBinNumber).getStartPosition();
-                    final long endPos = blocks.get(endBinNumber).getStartPosition() + blocks.get(endBinNumber).getSize();
-                    final long size = endPos - startPos;
-                    if (size == 0) {
-                        return Collections.EMPTY_LIST;
-                    } else {
-                        final Block mergedBlock = new Block(startPos, size);
-                        return Arrays.asList(mergedBlock);
-                    }
-                }
-            }
-        }
-
-
-        public void updateLongestFeature(final int featureLength) {
-            longestFeature = Math.max(longestFeature, featureLength);
-        }
-
-        public int getNFeatures() {
-            return this.nFeatures;
-        }
-
-        public void incrementFeatureCount() {
-            this.nFeatures++;
-        }
-
-        public void write(final LittleEndianOutputStream dos) throws IOException {
-
-            // Chr name, binSize,  # bins,  longest feature
-            dos.writeString(name);
-            dos.writeInt(binWidth);
-            dos.writeInt(blocks.size());
-            dos.writeInt(longestFeature);
-            dos.writeInt(0);    // no longer used
-            //dos.writeInt(largestBlockSize);
-            dos.writeInt(nFeatures);
-
-            long pos = 0;
-            long size = 0;
-            for (final Block block : blocks) {
-                pos = block.getStartPosition();
-                size = block.getSize();
-                dos.writeLong(pos);
-            }
-            // End of last block for this chromosome
-            dos.writeLong(pos + size);
-        }
-
-        public void read(final LittleEndianInputStream dis) throws IOException {
-            name = dis.readString();
-            binWidth = dis.readInt();
-            final int nBins = dis.readInt();
-            longestFeature = dis.readInt();
-            //largestBlockSize = dis.readInt();
-            // largestBlockSize and totalBlockSize are old V3 index values.  largest block size should be 0 for
-            // all newer V3 block.  This is a nasty hack that should be removed when we go to V4 (XML!) indices
-            OLD_V3_INDEX = dis.readInt() > 0;
-            nFeatures = dis.readInt();
-
-            // note the code below accounts for > 60% of the total time to read an index
-            blocks = new ArrayList<Block>(nBins);
-            long pos = dis.readLong();
-            for (int binNumber = 0; binNumber < nBins; binNumber++) {
-                final long nextPos = dis.readLong();
-                final long size = nextPos - pos;
-                blocks.add(new Block(pos, size));
-                pos = nextPos;
-            }
-        }
-
-        public boolean equals(final Object obj) {
-            if (this == obj) return true;
-            if (!(obj instanceof ChrIndex)) return false;
-            final ChrIndex other = (ChrIndex) obj;
-            return binWidth == other.binWidth
-                    && longestFeature == other.longestFeature
-                    //&& largestBlockSize == other.largestBlockSize
-                    && nFeatures == other.nFeatures
-                    && name.equals(other.name)
-                    && blocks.equals(other.blocks);
-        }
-
-        /**
-         * @return  Total size of all blocks
-         */
-        public long getTotalSize() {
-            long n = 0;
-            for (final Block b : getBlocks())
-                n += b.getSize();
-            return n;
-        }
-
-        public double getAverageFeatureSize() {
-            return (1.0 * getTotalSize()) / getNFeatures();
-        }
-
-        public double getFeaturesPerBlock() {
-            return (1.0 * getNFeatures()) / getNBlocks();
-        }
-
-        private double getNFeaturesOfMostDenseBlock(final double featureSize) {
-            double m = -1;
-            for (final Block b : getBlocks()) {
-                final double n = b.getSize() / featureSize;
-                if (m == -1 || n > m) m = n;
-            }
-            return m;
-        }
-
-        private double optimizeScore() {
-            return getNFeaturesOfMostDenseBlock(getAverageFeatureSize());
-        }
-
-        public ChrIndex optimize(final double threshold) {
-            return optimize(this, threshold, 0);
-        }
-
-        private static boolean badBinWidth(final ChrIndex idx) {
-            if (idx.binWidth > MAX_BIN_WIDTH || idx.binWidth < 0) // an overflow occurred
-                return true;
-            else if (MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX != 0 && idx.getNFeatures() > 1 && idx.binWidth > MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX) {
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        private static ChrIndex optimize(ChrIndex idx, final double threshold, int level) {
-            ChrIndex best = idx;
-
-            while (true) {
-                final double score = idx.optimizeScore();
-
-                if (score > threshold || idx.getNBlocks() == 1 || badBinWidth(idx))
-                    break;
-                else {
-                    best = idx; // remember the last best option
-
-                    // try to make a better one
-                    idx = mergeBlocks(idx);
-                    level++;
-                }
-
-                if (level > 30) throw new IllegalStateException("Too many iterations");
-            }
-
-            return best;
-        }
-
-        private static ChrIndex mergeBlocks(final ChrIndex idx) {
-            final ChrIndex merged = new ChrIndex(idx.name, idx.binWidth * 2); // increasing width by 2 each time
-            merged.longestFeature = idx.longestFeature;
-            merged.nFeatures = idx.nFeatures;
-
-            final Iterator<Block> blocks = idx.getBlocks().iterator();
-            if (!blocks.hasNext())
-                throw new IllegalStateException("Block iterator cannot be empty at the start for " + idx.getName());
-
-            // extremely simple merging algorithm.  Walk left to right, joining up blocks adjacent blocks.
-            while (blocks.hasNext()) {
-                final Block b1 = blocks.next();
-                final Block b2 = blocks.hasNext() ? blocks.next() : null;
-
-                if (b2 == null)
-                    merged.addBlock(b1);
-                else
-                    // the new block is simply the start of the first block and the size of both together
-                    merged.addBlock(new Block(b1.getStartPosition(), b1.getSize() + b2.getSize()));
-            }
-
-            return merged;
-        }
-
-        private static String dupString(final char c, final int nCopies) {
-            final char[] chars = new char[nCopies];
-            Arrays.fill(chars, c);
-            return new String(chars);
-        }
-    }
-
-    /**
-     * Adapative optimization of the linear index
-     * @param threshold threshold to use for optimizing each constituent {@code chrIndex}
-     * @return The new optimized index
-     */
-    public Index optimize(final double threshold) {
-        if (enableAdaptiveIndexing) {
-
-            final List<ChrIndex> newIndices = new ArrayList<ChrIndex>(this.chrIndices.size());
-            for (final String name : chrIndices.keySet()) {
-                final LinearIndex.ChrIndex oldIdx = (LinearIndex.ChrIndex) chrIndices.get(name);
-                final LinearIndex.ChrIndex newIdx = oldIdx.optimize(threshold);
-                newIndices.add(newIdx);
-            }
-            return new LinearIndex(this, newIndices);
-        } else {
-            return this;
-        }
-    }
-
-    public Index optimize() {
-        return optimize(MAX_FEATURES_PER_BIN);
-    }
-
-    /**
-     * Code to convert linear index to a text table for analysis
-     * @param out Stream to which to write out table to
-     */
-    public void writeTable(final PrintStream out) {
-        out.printf("chr binWidth avg.feature.size nFeatures.total block.id start.pos size nFeatures%n");
-        for (final String name : chrIndices.keySet()) {
-            final LinearIndex.ChrIndex chrIdx = (LinearIndex.ChrIndex) chrIndices.get(name);
-            int blockCount = 0;
-            for (final Block b : chrIdx.getBlocks()) {
-                out.printf("%s %d %.2f %d %d %d %d %d%n", name, chrIdx.binWidth, chrIdx.getAverageFeatureSize(), chrIdx.getNFeatures(), blockCount,
-                        blockCount * chrIdx.binWidth, b.getSize(), (int) (b.getSize() / chrIdx.getAverageFeatureSize()));
-                blockCount++;
-            }
-        }
-    }
-
-    // purely for testing purposes
-    protected final void setTS(final long ts) {
-        this.indexedFileTS = ts;
-    }
-}
-
diff --git a/src/main/java/htsjdk/tribble/index/linear/LinearIndexCreator.java b/src/main/java/htsjdk/tribble/index/linear/LinearIndexCreator.java
deleted file mode 100644
index 1158fdf..0000000
--- a/src/main/java/htsjdk/tribble/index/linear/LinearIndexCreator.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index.linear;
-
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.TribbleIndexCreator;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * For creating a LinearIndex from a stream of features.
- *
- * @author jrobinso
- */
-public class LinearIndexCreator  extends TribbleIndexCreator {
-    public static int DEFAULT_BIN_WIDTH = 8000;
-    // the set bin width
-    private int binWidth = DEFAULT_BIN_WIDTH;
-
-    // the input file
-    private final File inputFile;
-
-    private final LinkedList<LinearIndex.ChrIndex> chrList = new LinkedList<LinearIndex.ChrIndex>();
-    private int longestFeature= 0;
-
-    private final ArrayList<Block> blocks = new ArrayList<Block>();
-
-    public LinearIndexCreator(final File inputFile, final int binSize) {
-        this.inputFile = inputFile;
-        binWidth = binSize;
-    }
-
-    public LinearIndexCreator(final File inputFile) {
-        this(inputFile, DEFAULT_BIN_WIDTH);
-    }
-
-    /**
-     * add a feature to the index
-     * @param feature the feature, from which we use the contig, start, and stop
-     * @param filePosition the position of the file at the BEGINNING of the current feature
-     */
-    public void addFeature(final Feature feature, final long filePosition) {
-        // fi we don't have a chrIndex yet, or if the last one was for the previous contig, create a new one
-        if (chrList.isEmpty() || !chrList.getLast().getName().equals(feature.getContig())) {
-            // if we're creating a new chrIndex (not the first), make sure to dump the blocks to the old chrIndex
-            if (!chrList.isEmpty())
-                for (int x = 0; x < blocks.size(); x++) {
-                    blocks.get(x).setEndPosition((x + 1 == blocks.size()) ? filePosition : blocks.get(x + 1).getStartPosition());
-                    chrList.getLast().addBlock(blocks.get(x));
-                }
-            chrList.add(new LinearIndex.ChrIndex(feature.getContig(),binWidth));
-            blocks.clear();
-
-            // Add the first block
-            blocks.add(new Block(filePosition, 0));
-            longestFeature = 0;
-        }
-
-        // if start > current bin location, make new bins until we're at the correct location
-        while (feature.getStart() > blocks.size() * binWidth) {
-            blocks.add(new Block(filePosition,0));
-        }
-        if ((feature.getEnd()- feature.getStart())+1 > longestFeature) {
-            longestFeature = (feature.getEnd()- feature.getStart())+1;
-            chrList.getLast().updateLongestFeature(longestFeature);
-        }
-        chrList.getLast().incrementFeatureCount();
-    }
-
-    /**
-     * finalize the index; producing an index object
-     * @param finalFilePosition the final file position, for indexes that have to close out with the final position
-     * @return an Index object
-     */
-    public Index finalizeIndex(final long finalFilePosition) {
-        if (finalFilePosition == 0)
-            throw new IllegalArgumentException("finalFilePosition != 0, -> " + finalFilePosition);
-
-        for (int x = 0; x < blocks.size(); x++) {
-            blocks.get(x).setEndPosition((x + 1 == blocks.size()) ? finalFilePosition : blocks.get(x+1).getStartPosition());
-            chrList.getLast().addBlock(blocks.get(x));
-        }
-        blocks.clear();
-
-        final LinearIndex index = new LinearIndex(chrList,inputFile);
-        index.addProperties(properties);
-        index.finalizeIndex();
-        return index.optimize();
-    }
-
-    /**
-     * the current default bin size
-     * @return
-     */
-    public int defaultBinSize() {
-        return DEFAULT_BIN_WIDTH;
-    }
-
-    public int getBinSize() { return binWidth; }
-}
-
diff --git a/src/main/java/htsjdk/tribble/index/tabix/TabixFormat.java b/src/main/java/htsjdk/tribble/index/tabix/TabixFormat.java
deleted file mode 100644
index 0cf910f..0000000
--- a/src/main/java/htsjdk/tribble/index/tabix/TabixFormat.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index.tabix;
-
-import htsjdk.tribble.TribbleException;
-
-/**
- * The values in a Tabix header that define the format of the file being indexed, e.g. gff, bed, vcf
- */
-public class TabixFormat implements Cloneable {
-    public static final int ZERO_BASED    = 0x10000;
-    public static final int GENERIC_FLAGS = 0;
-    public static final int SAM_FLAGS     = 1;
-    public static final int VCF_FLAGS     = 2;
-    public static final int UCSC_FLAGS    = GENERIC_FLAGS | ZERO_BASED;
-
-    /** Predefined headers for known formats */
-    public static TabixFormat GFF = new TabixFormat(GENERIC_FLAGS, 1, 4, 5, '#', 0);
-    public static TabixFormat BED = new TabixFormat(UCSC_FLAGS, 1, 2, 3, '#', 0);
-    public static TabixFormat PSLTBL = new TabixFormat(UCSC_FLAGS, 15, 17, 18, '#', 0);
-    public static TabixFormat SAM = new TabixFormat(SAM_FLAGS, 3, 4, 0, '@', 0);
-    public static TabixFormat VCF = new TabixFormat(VCF_FLAGS, 1, 2, 0, '#', 0);
-
-    /** Describes interpretation of file being indexed.  See FLAGS constants above. */
-    public int flags;
-    /** One-based index of the column in the file being indexed containing the sequence name */
-    public int sequenceColumn;
-    /** One-based index of the column in the file being indexed containing the start position. */
-    public int startPositionColumn;
-    /**
-     * One-based index of the column in the file being indexed containing the end position. Zero implies
-     * there is no end position column.
-     */
-    public int endPositionColumn;
-    /** Lines in the file being indexed that start with this character are ignored. */
-    public char metaCharacter;
-    /** This is part of the index header, but does not appear to be used. */
-    public int numHeaderLinesToSkip;
-
-    public TabixFormat() {
-    }
-
-    public TabixFormat(final int flags, final int sequenceColumn, final int startPositionColumn, final int endPositionColumn, final char metaCharacter, final int numHeaderLinesToSkip) {
-        this.flags = flags;
-        this.sequenceColumn = sequenceColumn;
-        this.startPositionColumn = startPositionColumn;
-        this.endPositionColumn = endPositionColumn;
-        this.metaCharacter = metaCharacter;
-        this.numHeaderLinesToSkip = numHeaderLinesToSkip;
-    }
-
-    @Override
-    public TabixFormat clone() {
-        try {
-            return (TabixFormat)super.clone();
-        } catch (final CloneNotSupportedException e) {
-            throw new TribbleException("unpossible!");
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final TabixFormat that = (TabixFormat) o;
-
-        if (endPositionColumn != that.endPositionColumn) return false;
-        if (flags != that.flags) return false;
-        if (metaCharacter != that.metaCharacter) return false;
-        if (numHeaderLinesToSkip != that.numHeaderLinesToSkip) return false;
-        if (sequenceColumn != that.sequenceColumn) return false;
-        if (startPositionColumn != that.startPositionColumn) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = flags;
-        result = 31 * result + sequenceColumn;
-        result = 31 * result + startPositionColumn;
-        result = 31 * result + endPositionColumn;
-        result = 31 * result + (int) metaCharacter;
-        result = 31 * result + numHeaderLinesToSkip;
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/tabix/TabixIndex.java b/src/main/java/htsjdk/tribble/index/tabix/TabixIndex.java
deleted file mode 100644
index 044cefe..0000000
--- a/src/main/java/htsjdk/tribble/index/tabix/TabixIndex.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index.tabix;
-
-import htsjdk.samtools.Bin;
-import htsjdk.samtools.BinningIndexContent;
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.LinearIndex;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.StringUtil;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.util.LittleEndianInputStream;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-import htsjdk.tribble.util.TabixUtils;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.*;
-
-/**
- * This class represent a Tabix index that has been built in memory or read from a file.  It can be queried or
- * written to a file.
- */
-public class TabixIndex implements Index {
-    private static final byte[] MAGIC = {'T', 'B', 'I', 1};
-    public static final int MAGIC_NUMBER;
-
-    static {
-        final ByteBuffer bb = ByteBuffer.allocate(MAGIC.length);
-        bb.put(MAGIC);
-        bb.flip();
-        MAGIC_NUMBER = bb.order(ByteOrder.LITTLE_ENDIAN).getInt();
-    }
-
-    private final TabixFormat formatSpec;
-    private final List<String> sequenceNames;
-    private final BinningIndexContent[] indices;
-
-    /**
-     * @param formatSpec    Information about how to interpret the file being indexed.  Unused by this class other than
-     *                      written to an output file.
-     * @param sequenceNames Sequences in the file being indexed, in the order they appear in the file.
-     * @param indices       One for each element of sequenceNames
-     */
-    public TabixIndex(final TabixFormat formatSpec, final List<String> sequenceNames, final BinningIndexContent[] indices) {
-        if (sequenceNames.size() != indices.length) {
-            throw new IllegalArgumentException("sequenceNames.size() != indices.length");
-        }
-        this.formatSpec = formatSpec.clone();
-        this.sequenceNames = Collections.unmodifiableList(new ArrayList<String>(sequenceNames));
-        this.indices = indices;
-    }
-
-    /**
-     * @param inputStream This is expected to be buffered and be gzip-decompressing as appropriate.  Caller
-     *                    should close input stream after ctor returns.
-     */
-    public TabixIndex(final InputStream inputStream) throws IOException {
-        this(inputStream, false);
-    }
-
-    /**
-     * Convenient ctor that opens the file, wraps with with BGZF reader, and closes after reading index.
-     */
-    public TabixIndex(final File tabixFile) throws IOException {
-        this(new BlockCompressedInputStream(tabixFile), true);
-    }
-
-    private TabixIndex(final InputStream inputStream, final boolean closeInputStream) throws IOException {
-        final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
-        if (dis.readInt() != MAGIC_NUMBER) {
-            throw new TribbleException(String.format("Unexpected magic number 0x%x", MAGIC_NUMBER));
-        }
-        final int numSequences = dis.readInt();
-        indices = new BinningIndexContent[numSequences];
-        formatSpec = new TabixFormat();
-        formatSpec.flags = dis.readInt();
-        formatSpec.sequenceColumn = dis.readInt();
-        formatSpec.startPositionColumn = dis.readInt();
-        formatSpec.endPositionColumn = dis.readInt();
-        formatSpec.metaCharacter = (char) dis.readInt();
-        formatSpec.numHeaderLinesToSkip = dis.readInt();
-        final int nameBlockSize = dis.readInt();
-        final byte[] nameBlock = new byte[nameBlockSize];
-        if (dis.read(nameBlock) != nameBlockSize) throw new EOFException("Premature end of file reading Tabix header");
-        final List<String> sequenceNames = new ArrayList<String>(numSequences);
-        int startPos = 0;
-        for (int i = 0; i < numSequences; ++i) {
-            int endPos = startPos;
-            while (nameBlock[endPos] != '\0') ++endPos;
-            sequenceNames.add(StringUtil.bytesToString(nameBlock, startPos, endPos - startPos));
-            startPos = endPos + 1;
-        }
-        if (startPos != nameBlockSize) {
-            throw new TribbleException("Tabix header format exception.  Sequence name block is longer than expected");
-        }
-        for (int i = 0; i < numSequences; ++i) {
-            indices[i] = loadSequence(i, dis);
-        }
-        if (closeInputStream) CloserUtil.close(dis);
-        this.sequenceNames = Collections.unmodifiableList(sequenceNames);
-    }
-
-    /**
-     * @param chr   the chromosome
-     * @param start the start position, one-based, inclusive.
-     * @param end   the end position, one-based, inclusive.
-     * @return List of regions of file that are candidates for the given query.
-     * <p/>
-     * TODO: This method has not yet been tested, since the primary task is index writing.
-     */
-    @Override
-    public List<Block> getBlocks(final String chr, final int start, final int end) {
-        final int sequenceIndex = sequenceNames.indexOf(chr);
-        if (sequenceIndex == -1 || indices[sequenceIndex] == null) {
-            return Collections.emptyList();
-        }
-        final List<Chunk> chunks = indices[sequenceIndex].getChunksOverlapping(start, end);
-        if (chunks == null) {
-            return Collections.emptyList();
-        } else {
-            final List<Block> ret = new ArrayList<>(chunks.size());
-            chunks.stream()
-                  .map(chunk -> new Block(chunk.getChunkStart(), chunk.getChunkEnd() - chunk.getChunkStart()))
-                  .forEach(ret::add);
-            return ret;
-        }
-    }
-
-    @Override
-    public boolean isCurrentVersion() {
-        return true;
-    }
-
-    @Override
-    public List<String> getSequenceNames() {
-        return sequenceNames;
-    }
-
-    @Override
-    public boolean containsChromosome(final String chr) {
-        return sequenceNames.contains(chr);
-    }
-
-    /**
-     * No arbitrary properties in Tabix
-     */
-    @Override
-    public Map<String, String> getProperties() {
-        return null;
-    }
-
-    @Override
-    public boolean equalsIgnoreProperties(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final TabixIndex that = (TabixIndex) o;
-
-        if (!formatSpec.equals(that.formatSpec)) return false;
-        if (!Arrays.equals(indices, that.indices)) return false;
-        return sequenceNames.equals(that.sequenceNames);
-
-    }
-
-    public TabixFormat getFormatSpec() {
-        return formatSpec;
-    }
-
-    /**
-     * Writes the index with BGZF.
-     *
-     * @param tabixFile Where to write the index.
-     */
-    @Override
-    public void write(final File tabixFile) throws IOException {
-        try(final LittleEndianOutputStream los = new LittleEndianOutputStream(new BlockCompressedOutputStream(tabixFile))) {
-            write(los);
-        }
-    }
-
-    /**
-     * Writes to a file with appropriate name and directory based on feature file.
-     *
-     * @param featureFile File being indexed.
-     */
-    @Override
-    public void writeBasedOnFeatureFile(final File featureFile) throws IOException {
-        if (!featureFile.isFile()) return;
-        write(new File(featureFile.getAbsolutePath() + TabixUtils.STANDARD_INDEX_EXTENSION));
-    }
-
-    /**
-     * @param los It is assumes that caller has done appropriate buffering and BlockCompressedOutputStream wrapping.
-     *            Caller should close output stream after invoking this method.
-     * @throws IOException
-     */
-    @Override
-    public void write(final LittleEndianOutputStream los) throws IOException {
-        los.writeInt(MAGIC_NUMBER);
-        los.writeInt(sequenceNames.size());
-        los.writeInt(formatSpec.flags);
-        los.writeInt(formatSpec.sequenceColumn);
-        los.writeInt(formatSpec.startPositionColumn);
-        los.writeInt(formatSpec.endPositionColumn);
-        los.writeInt(formatSpec.metaCharacter);
-        los.writeInt(formatSpec.numHeaderLinesToSkip);
-        int nameBlockSize = sequenceNames.size(); // null terminators
-        for (final String sequenceName : sequenceNames) nameBlockSize += sequenceName.length();
-        los.writeInt(nameBlockSize);
-        for (final String sequenceName : sequenceNames) {
-            los.write(StringUtil.stringToBytes(sequenceName));
-            los.write(0);
-        }
-        for (final BinningIndexContent index : indices) {
-            writeSequence(index, los);
-        }
-    }
-
-    private void writeSequence(final BinningIndexContent indexContent, final LittleEndianOutputStream los) throws IOException {
-        if (indexContent == null) {
-            los.writeInt(0);
-        } else {
-            final BinningIndexContent.BinList binList = indexContent.getBins();
-            los.writeInt(binList.numberOfNonNullBins);
-            for (final Bin bin : binList) {
-                writeBin(bin, los);
-            }
-            writeLinearIndex(indexContent.getLinearIndex(), los);
-        }
-    }
-
-    private void writeLinearIndex(final LinearIndex linearIndex, final LittleEndianOutputStream los) throws IOException {
-        if (linearIndex.getIndexStart() != 0) {
-            // This could be handled by writing zeroes, but it is not expected so just fail.
-            throw new IllegalArgumentException("Non-zero linear index start");
-        }
-        final long[] entries = linearIndex.getIndexEntries();
-        los.writeInt(entries.length);
-        for (final long entry : entries) los.writeLong(entry);
-    }
-
-    private void writeBin(final Bin bin, final LittleEndianOutputStream los) throws IOException {
-        los.writeInt(bin.getBinNumber());
-        final List<Chunk> chunkList = bin.getChunkList();
-        los.writeInt(chunkList.size());
-        for (final Chunk chunk : chunkList) {
-            los.writeLong(chunk.getChunkStart());
-            los.writeLong(chunk.getChunkEnd());
-        }
-    }
-
-    /**
-     * Although this is probably identical to BAM index reading code, code does not exist there to load directly
-     * into a BinningIndexContent object, so that is implemented here.
-     *
-     * @param referenceSequenceIndex Merely for setting in the returned object, not for seeking into the file.
-     * @param dis                    This method assumes that the current position is at the start of the reference.
-     */
-    private BinningIndexContent loadSequence(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
-        final int numBins = dis.readInt();
-        if (numBins == 0) return null;
-        int nonNullBins = 0;
-        final ArrayList<Bin> bins = new ArrayList<Bin>();
-        for (int i = 0; i < numBins; ++i) {
-            final Bin bin = loadBin(referenceSequenceIndex, dis);
-            if (bin != null) {
-                // File is not sparse, but array being produced is sparse, so grow array with nulls as appropriate
-                // so that bin number == index into array.
-                ++nonNullBins;
-                if (bins.size() > bin.getBinNumber()) {
-                    if (bins.get(bin.getBinNumber()) != null) {
-                        throw new TribbleException("Bin " + bin.getBinNumber() + " appears more than once in file");
-                    }
-                    bins.set(bin.getBinNumber(), bin);
-                } else {
-                    // Grow bins array as needed.
-                    bins.ensureCapacity(bin.getBinNumber() + 1);
-                    while (bins.size() < bin.getBinNumber()) bins.add(null);
-                    bins.add(bin);
-                }
-            }
-        }
-        final LinearIndex linearIndex = loadLinearIndex(referenceSequenceIndex, dis);
-        return new BinningIndexContent(referenceSequenceIndex,
-                new BinningIndexContent.BinList(bins.toArray(new Bin[bins.size()]), nonNullBins), linearIndex);
-    }
-
-    private LinearIndex loadLinearIndex(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
-        final int numElements = dis.readInt();
-        final long[] elements = new long[numElements];
-        for (int i = 0; i < numElements; ++i) {
-            elements[i] = dis.readLong();
-        }
-        return new LinearIndex(referenceSequenceIndex, 0, elements);
-    }
-
-    private Bin loadBin(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
-        final int binNumber = dis.readInt();
-        final Bin ret = new Bin(referenceSequenceIndex, binNumber);
-        final int numChunks = dis.readInt();
-        final List<Chunk> chunkList = new ArrayList<Chunk>(numChunks);
-        for (int i = 0; i < numChunks; ++i) {
-            chunkList.add(loadChunk(dis));
-        }
-        ret.setChunkList(chunkList);
-        return ret;
-    }
-
-    private Chunk loadChunk(final LittleEndianInputStream dis) throws IOException {
-        final long start = dis.readLong();
-        final long end = dis.readLong();
-        return new Chunk(start, end);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final TabixIndex index = (TabixIndex) o;
-
-        if (!formatSpec.equals(index.formatSpec)) return false;
-        if (!Arrays.equals(indices, index.indices)) return false;
-        if (!sequenceNames.equals(index.sequenceNames)) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = formatSpec.hashCode();
-        result = 31 * result + sequenceNames.hashCode();
-        result = 31 * result + Arrays.hashCode(indices);
-        return result;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/index/tabix/TabixIndexCreator.java b/src/main/java/htsjdk/tribble/index/tabix/TabixIndexCreator.java
deleted file mode 100644
index 001dabc..0000000
--- a/src/main/java/htsjdk/tribble/index/tabix/TabixIndexCreator.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index.tabix;
-
-import htsjdk.samtools.BinningIndexBuilder;
-import htsjdk.samtools.BinningIndexContent;
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexCreator;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * IndexCreator for Tabix.
- * Features are expected to be 1-based, inclusive.
- */
-public class TabixIndexCreator implements IndexCreator {
-    private final TabixFormat formatSpec;
-    private final List<BinningIndexContent> indexContents = new ArrayList<BinningIndexContent>();
-    private final List<String> sequenceNames = new ArrayList<String>();
-    // Merely a faster way to ensure that features are added in a specific sequence name order
-    private final Set<String> sequenceNamesSeen = new HashSet<String>();
-    // A sequence dictionary is not required, but if it is provided all sequences names must be present in it.
-    // It is used to determine the length of a sequence in order to optimize index memory allocation.
-    private final SAMSequenceDictionary sequenceDictionary;
-
-    private String currentSequenceName = null;
-    private BinningIndexBuilder indexBuilder = null;
-    // A feature can't be added to the index until the next feature is added because the next feature
-    // defines the location of the end of the previous feature in the output file.
-    private TabixFeature previousFeature = null;
-
-
-    /**
-     * @param sequenceDictionary is not required, but if present all features added must refer to sequences in the
-     *                           dictionary.  It is used to optimize the memory needed to build the index.
-     */
-    public TabixIndexCreator(final SAMSequenceDictionary sequenceDictionary,
-                             final TabixFormat formatSpec) {
-        this.sequenceDictionary = sequenceDictionary;
-        this.formatSpec = formatSpec.clone();
-    }
-
-    public TabixIndexCreator(final TabixFormat formatSpec) {
-        this(null, formatSpec);
-    }
-
-    @Override
-    public void addFeature(final Feature feature, final long filePosition) {
-        final String sequenceName = feature.getContig();
-        final int referenceIndex;
-        if (sequenceName.equals(currentSequenceName)) {
-            referenceIndex = sequenceNames.size() - 1;
-        } else {
-            referenceIndex = sequenceNames.size();
-            if (currentSequenceName != null && sequenceNamesSeen.contains(sequenceName)) {
-                throw new IllegalArgumentException("Sequence " + feature + " added out sequence of order");
-            }
-        }
-        final TabixFeature thisFeature = new TabixFeature(referenceIndex, feature.getStart(), feature.getEnd(), filePosition);
-        if (previousFeature != null) {
-            if (previousFeature.compareTo(thisFeature) > 0) {
-                throw new IllegalArgumentException(String.format("Features added out of order: previous (%s) > next (%s)",
-                        previousFeature, thisFeature));
-            }
-            finalizeFeature(filePosition);
-        }
-        previousFeature = thisFeature;
-        if (referenceIndex == sequenceNames.size()) {
-            advanceToReference(sequenceName);
-        }
-    }
-
-    private void finalizeFeature(final long featureEndPosition) {
-        previousFeature.featureEndFilePosition = featureEndPosition;
-        if (previousFeature.featureStartFilePosition >= previousFeature.featureEndFilePosition) {
-            throw new IllegalArgumentException(String.format("Feature start position %d >= feature end position %d",
-                    previousFeature.featureStartFilePosition, previousFeature.featureEndFilePosition));
-        }
-        indexBuilder.processFeature(previousFeature);
-    }
-
-    private void advanceToReference(final String sequenceName) {
-        if (indexBuilder != null) {
-            indexContents.add(indexBuilder.generateIndexContent());
-        }
-        // If sequence dictionary is provided, BinningIndexBuilder can reduce size of array it allocates.
-        final int sequenceLength;
-        if (sequenceDictionary != null) {
-            sequenceLength = sequenceDictionary.getSequence(sequenceName).getSequenceLength();
-        } else {
-            sequenceLength = 0;
-        }
-        indexBuilder = new BinningIndexBuilder(sequenceNames.size(), sequenceLength);
-        sequenceNames.add(sequenceName);
-        currentSequenceName = sequenceName;
-        sequenceNamesSeen.add(sequenceName);
-    }
-
-    @Override
-    public Index finalizeIndex(final long finalFilePosition) {
-        if (previousFeature != null) {
-            finalizeFeature(finalFilePosition);
-        }
-        if (indexBuilder != null) {
-            indexContents.add(indexBuilder.generateIndexContent());
-        }
-        // Make this as big as the sequence dictionary, even if there is not content for every sequence,
-        // but truncate the sequence dictionary before its end if there are sequences in the sequence dictionary without
-        // any features.
-        final BinningIndexContent[] indices = indexContents.toArray(new BinningIndexContent[sequenceNames.size()]);
-        return new TabixIndex(formatSpec, sequenceNames, indices);
-    }
-
-
-    private static class TabixFeature implements BinningIndexBuilder.FeatureToBeIndexed, Comparable<TabixFeature> {
-        private final int referenceIndex;
-        private final int start;
-        private final int end;
-        private final long featureStartFilePosition;
-        // Position after this feature in the file.
-        private long featureEndFilePosition = -1;
-
-        private TabixFeature(final int referenceIndex, final int start, final int end, final long featureStartFilePosition) {
-            this.referenceIndex = referenceIndex;
-            this.start = start;
-            this.end = end;
-            this.featureStartFilePosition = featureStartFilePosition;
-        }
-
-        @Override
-        public int getStart() {
-            return start;
-        }
-
-        @Override
-        public int getEnd() {
-            return end;
-        }
-
-        /**
-         *
-         * @return null -- Let index builder compute this.
-         */
-        @Override
-        public Integer getIndexingBin() {
-            return null;
-        }
-
-        @Override
-        public Chunk getChunk() {
-            if (featureEndFilePosition == -1) {
-                throw new IllegalStateException("End position is not set");
-            }
-            return new Chunk(featureStartFilePosition, featureEndFilePosition);
-        }
-
-        @Override
-        public int compareTo(final TabixFeature other) {
-            final int ret = this.referenceIndex - other.referenceIndex;
-            if (ret != 0) return ret;
-            return this.start - other.start;
-        }
-
-        @Override
-        public String toString() {
-            return "TabixFeature{" +
-                    "referenceIndex=" + referenceIndex +
-                    ", start=" + start +
-                    ", end=" + end +
-                    ", featureStartFilePosition=" + featureStartFilePosition +
-                    ", featureEndFilePosition=" + featureEndFilePosition +
-                    '}';
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readers/AsciiLineReader.java b/src/main/java/htsjdk/tribble/readers/AsciiLineReader.java
deleted file mode 100644
index 8f06205..0000000
--- a/src/main/java/htsjdk/tribble/readers/AsciiLineReader.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.tribble.TribbleException;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A simple class that provides {@link #readLine()} functionality around a PositionalBufferedStream
- *
- * {@link BufferedReader} and its {@link java.io.BufferedReader#readLine()} method should be used in preference to this class (when the
- * {@link htsjdk.samtools.util.LocationAware} functionality is not required) because it offers greater performance.
- * 
- * @author jrobinso
- */
-public class AsciiLineReader implements LineReader, LocationAware {
-    private static final int BUFFER_OVERFLOW_INCREASE_FACTOR = 2;
-    private static final byte LINEFEED = (byte) ('\n' & 0xff);
-    private static final byte CARRIAGE_RETURN = (byte) ('\r' & 0xff);
-
-    PositionalBufferedStream is;
-    char[] lineBuffer;
-
-    public AsciiLineReader(final InputStream is){
-        this(new PositionalBufferedStream(is));
-    }
-
-    public AsciiLineReader(final PositionalBufferedStream is) {
-        this.is = is;
-        // Allocate this only once, even though it is essentially a local variable of
-        // readLine.  This makes a huge difference in performance
-        lineBuffer = new char[10000];
-    }
-
-    /**
-     * @return The position of the InputStream
-     */
-    public long getPosition(){
-        if(is == null){
-            throw new TribbleException("getPosition() called but no default stream was provided to the class on creation");
-        }
-        return is.getPosition();
-    }
-
-    /**
-     * Read a line of text.  A line is considered to be terminated by any one
-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
-     * followed immediately by a linefeed.
-     *
-     * @param stream the stream to read the next line from
-     * @return A String containing the contents of the line or null if the
-     *         end of the stream has been reached
-     */
-    public final String readLine(final PositionalBufferedStream stream) throws IOException{
-        int linePosition = 0;
-
-        while (true) {
-            final int b = stream.read();
-
-            if (b == -1) {
-                // eof reached.  Return the last line, or null if this is a new line
-                if (linePosition > 0) {
-                    return new String(lineBuffer, 0, linePosition);
-                } else {
-                    return null;
-                }
-            }
-
-            final char c = (char) (b & 0xFF);
-            if (c == LINEFEED || c == CARRIAGE_RETURN) {
-                if (c == CARRIAGE_RETURN && stream.peek() == LINEFEED) {
-                    stream.read(); // <= skip the trailing \n in case of \r\n termination
-                }
-
-                return new String(lineBuffer, 0, linePosition);
-            } else {
-                // Expand line buffer size if neccessary.  Reserve at least 2 characters
-                // for potential line-terminators in return string
-
-                if (linePosition > (lineBuffer.length - 3)) {
-                    final char[] temp = new char[BUFFER_OVERFLOW_INCREASE_FACTOR * lineBuffer.length];
-                    System.arraycopy(lineBuffer, 0, temp, 0, lineBuffer.length);
-                    lineBuffer = temp;
-                }
-
-                lineBuffer[linePosition++] = c;
-            }
-        }
-    }
-
-    /**
-     * Same as {@link #readLine(PositionalBufferedStream)} but uses the stream provided in the constructor
-     *
-     * @return
-     */
-    public final String readLine() throws IOException{
-        if ( is == null ){
-            throw new TribbleException("readLine() called without an explicit stream argument but no default stream was provided to the class on creation");
-        }
-        return readLine(is);
-    }
-
-    @Override
-    public void close() {
-        if ( is != null ) is.close();
-        lineBuffer = null;
-    }
-
-    public static void main(final String[] args) throws Exception {
-        final File testFile = new File(args[0]);
-        final int iterations = Integer.valueOf(args[1]);
-        final boolean includeBufferedReader = Boolean.valueOf(args[2]);
-        long t0, lineCount, dt;
-        double rate;
-
-        System.out.printf("Testing %s%n", args[0]);
-        for (int i = 0; i < iterations; i++) {
-            if ( includeBufferedReader ) {
-                final BufferedReader reader2 = new BufferedReader(new FileReader(testFile));
-                t0 = System.currentTimeMillis();
-                lineCount = 0;
-                while (reader2.readLine() != null) {
-                    lineCount++;
-                }
-                dt = System.currentTimeMillis() - t0;
-                rate = ((double) lineCount) / dt;
-                printStatus("BufferedReader", lineCount, rate, dt);
-                reader2.close();
-            }
-
-            if ( includeBufferedReader ) {
-                final LongLineBufferedReader longLineBufferedReader = new LongLineBufferedReader(new BufferedReader(new FileReader(testFile)));
-                t0 = System.currentTimeMillis();
-                lineCount = 0;
-                while (longLineBufferedReader.readLine() != null) {
-                    lineCount++;
-                }
-                dt = System.currentTimeMillis() - t0;
-                rate = ((double) lineCount) / dt;
-                printStatus("BufferedReader", lineCount, rate, dt);
-                longLineBufferedReader.close();
-            }
-            
-            final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(testFile));
-            final LineReader reader = new AsciiLineReader(pbs);
-            t0 = System.currentTimeMillis();
-            lineCount = 0;
-            while (reader.readLine() != null) {
-                lineCount++;
-            }
-            dt = System.currentTimeMillis() - t0;
-            rate = ((double) lineCount) / dt;
-            printStatus("PositionalBufferedStream", lineCount, rate, dt);
-            pbs.close();
-        }
-    }
-
-    private static final void printStatus(final String name, final long lineCount, final double rate, final long dt) {
-        System.out.printf("%30s: %d lines read.  Rate = %.2e lines per second.  DT = %d%n", name, lineCount, rate, dt);
-        System.out.flush();
-    }
-}
-
diff --git a/src/main/java/htsjdk/tribble/readers/AsciiLineReaderIterator.java b/src/main/java/htsjdk/tribble/readers/AsciiLineReaderIterator.java
deleted file mode 100644
index 5db3b91..0000000
--- a/src/main/java/htsjdk/tribble/readers/AsciiLineReaderIterator.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.AbstractIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.Tuple;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/**
- * A class that iterates over the lines and line positions in an {@link AsciiLineReader}.
- * 
- * This class is slower than other {@link LineIterator}s because it is driven by {@link AsciiLineReader}, but offers the benefit of 
- * implementing {@link htsjdk.samtools.util.LocationAware}, which is required for indexing.  If you do not require {@link htsjdk.samtools.util.LocationAware}, consider using
- * {@link LineIteratorImpl} as an alternative to this class.
- * 
- * Note an important distinction in the way this class and its inner iterator differ: in the inner iterator, the position stored with
- * a line is the position at the start of that line.  However, {@link #getPosition()} of the outer class must return the position at the
- * end of the most-recently-returned line (or the start of the underlying {@link AsciiLineReader}, if no line has been read).  The latter
- * bit of logic here is required to conform with the interface described by {@link htsjdk.samtools.util.LocationAware#getPosition()}.
- * 
- * @author mccowan
- */
-public class AsciiLineReaderIterator implements LocationAware, LineIterator, Closeable {
-    private final AsciiLineReader asciiLineReader;
-    private final TupleIterator i;
-    private Tuple<String, Long> current = null;
-
-    public AsciiLineReaderIterator(final AsciiLineReader asciiLineReader) {
-        this.asciiLineReader = asciiLineReader;
-        this.i = new TupleIterator();
-    }
-
-    @Override
-    public void close() throws IOException {
-        CloserUtil.close(asciiLineReader);
-    }
-
-    @Override
-    public boolean hasNext() {
-        return i.hasNext();
-    }
-
-    @Override
-    public String next() {
-        current = i.next();
-        return current.a;
-    }
-
-    @Override
-    public void remove() {
-        i.remove();
-    }
-
-    /**
-     * Returns the byte position at the end of the most-recently-read line (a.k.a., the beginning of the next line) from {@link #next()} in
-     * the underlying {@link AsciiLineReader}.
-     */
-    @Override
-    public long getPosition() {
-        return i.getPosition();
-    }
-
-    @Override
-    public String peek() {
-        return i.peek().a;
-    }
-
-    /**
-     * This is stored internally since it iterates over {@link htsjdk.samtools.util.Tuple}, not {@link String} (and the outer
-     * class can't do both).
-     */
-    private class TupleIterator extends AbstractIterator<Tuple<String, Long>> implements LocationAware {
-        
-        public TupleIterator() {
-            hasNext(); // Initialize the iterator, which appears to be a requirement of the parent class.  TODO: Really?
-        }
-        
-        @Override
-        protected Tuple<String, Long> advance() {
-            final String line;
-            final long position = asciiLineReader.getPosition(); // A line's position is where it starts, so get it before reading the line.
-            try {
-                line = asciiLineReader.readLine();
-            } catch (IOException e) {
-                throw new RuntimeIOException(e);
-            }
-            return line == null ? null : new Tuple<String, Long>(line, position);
-        }
-
-        /** Returns the byte position at the beginning of the next line. */
-        @Override
-        public long getPosition() {
-            final Tuple<String, Long> peek = peek();
-            // Be careful: peek will be null at the end of the stream.
-            return peek != null ? peek.b : asciiLineReader.getPosition();
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readers/LineIterator.java b/src/main/java/htsjdk/tribble/readers/LineIterator.java
deleted file mode 100644
index f582025..0000000
--- a/src/main/java/htsjdk/tribble/readers/LineIterator.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package htsjdk.tribble.readers;
-
-import java.util.Iterator;
-
-/**
- * A very simple descriptor for line-iterables.
- * @author mccowan
- */
-public interface LineIterator extends Iterator<String> {
-    /** Peeks at the next line, without expending any elements in the underlying iterator. */
-    public String peek();
-}
diff --git a/src/main/java/htsjdk/tribble/readers/LineIteratorImpl.java b/src/main/java/htsjdk/tribble/readers/LineIteratorImpl.java
deleted file mode 100644
index be24dc7..0000000
--- a/src/main/java/htsjdk/tribble/readers/LineIteratorImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.AbstractIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/** A simple iterator over the elements in LineReader. */
-public class LineIteratorImpl extends AbstractIterator<String> implements LineIterator, Closeable {
-    private final LineReader lineReader;
-
-    /**
-     * @param lineReader The line reader whose elements are to be iterated over.
-     */
-    public LineIteratorImpl(final LineReader lineReader) {
-        this.lineReader = lineReader;
-    }
-
-    @Override
-    protected String advance() {
-        try {
-            return lineReader.readLine();
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    @Override
-    public void close() throws IOException {
-        CloserUtil.close(lineReader);
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readers/LineReader.java b/src/main/java/htsjdk/tribble/readers/LineReader.java
deleted file mode 100644
index 969b6b5..0000000
--- a/src/main/java/htsjdk/tribble/readers/LineReader.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.readers;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/**
- * Interface for line-oriented readers.
- */
-public interface LineReader extends Closeable {
-
-    /**
-     * @return The next "line" from the source. Typically a line is a set of characters
-     * terminated by '\n', '\r', or '\r\n'. The line-terminator is not included
-     * @throws IOException
-     */
-    public String readLine() throws IOException;
-
-
-    public void close();
-}
diff --git a/src/main/java/htsjdk/tribble/readers/LineReaderUtil.java b/src/main/java/htsjdk/tribble/readers/LineReaderUtil.java
deleted file mode 100644
index 83a0545..0000000
--- a/src/main/java/htsjdk/tribble/readers/LineReaderUtil.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package htsjdk.tribble.readers;
-
-import java.io.InputStream;
-import java.io.StringReader;
-
-/**
- * A collection of factories for generating {@link LineReader}s.
- *
- * @Deprecated use {@link SynchronousLineReader} directly.
- * @author mccowan
- */
- at Deprecated
-public class LineReaderUtil {
-    @Deprecated
-    public enum LineReaderOption {
-        ASYNCHRONOUS,   //Note: the asynchronous option has no effect - this class does not provide asynchronous reading anymore
-        SYNCHRONOUS
-    }
-
-    /**
-     * Creates a line reader from the given stream.
-     * @Deprecated use <code>new SynchronousLineReader(stream);</code>
-     */
-    @Deprecated
-    public static LineReader fromBufferedStream(final InputStream stream) {
-        return new SynchronousLineReader(stream);
-    }
-
-    /**
-     * Creates a line reader from the given string reader.
-     * @Deprecated use <code>new SynchronousLineReader(stringReader);</code>
-     */
-    @Deprecated
-    public static LineReader fromStringReader(final StringReader stringReader) {
-        return new SynchronousLineReader(stringReader);
-    }
-
-    /**
-     * Creates a line reader from the given string reader.
-     * @Deprecated Asynchronous mode is not going to be supported. Use <code>new SynchronousLineReader(stringReader);</code>
-     */
-    @Deprecated
-    public static LineReader fromStringReader(final StringReader stringReader, final Object ignored) {
-        return new SynchronousLineReader(stringReader);
-    }
-
-    /**
-     * Convenience factory for composing a LineReader from an InputStream.
-     * @Deprecated Asynchronous mode is not going to be supported. Use <code>new SynchronousLineReader(bufferedStream);</code>
-     */
-    @Deprecated
-    public static LineReader fromBufferedStream(final InputStream bufferedStream, final Object ignored) {
-        return new SynchronousLineReader(bufferedStream);
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/readers/LongLineBufferedReader.java b/src/main/java/htsjdk/tribble/readers/LongLineBufferedReader.java
deleted file mode 100644
index 5ca8e8d..0000000
--- a/src/main/java/htsjdk/tribble/readers/LongLineBufferedReader.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.readers;
-
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * A variant of {@link java.io.BufferedReader} with improved performance reading files with long lines.
- * 
- * This class is almost identical to BufferedReader, but it retains a single line buffer for accumulating characters in a line, and allows
- * its size to grow. Conversely, {@link java.io.BufferedReader} assumes each new line will be approximately 80 characters and its
- * performance suffers when that is not the case.
- * 
- * Unlike {@link java.io.BufferedReader}, this class is not thread safe.
- *
- * @author mccowan
- */
-public class LongLineBufferedReader extends Reader {
-
-    private Reader in;
-
-    private char cb[];
-    private int nChars, nextChar;
-
-    private static final int INVALIDATED = -2;
-    private static final int UNMARKED = -1;
-    private int markedChar = UNMARKED;
-    private int readAheadLimit = 0; /* Valid only when markedChar > 0 */
-
-    /**
-     * If the next character is a line feed, skip it
-     */
-    private boolean skipLF = false;
-
-    /**
-     * The skipLF flag when the mark was set
-     */
-    private boolean markedSkipLF = false;
-
-    private static final int DEFAULT_CHAR_BUFFER_SIZE = 8192;
-    private static final int DEFAULT_EXPECTED_LINE_LENGTH = 80;
-
-    private StringBuilder lineBuffer = new StringBuilder(DEFAULT_EXPECTED_LINE_LENGTH);
-
-    /**
-     * Creates a buffering character-input stream that uses an input buffer of
-     * the specified size.
-     *
-     * @param in A Reader
-     * @param sz Input-buffer size
-     * @throws IllegalArgumentException If sz is <= 0
-     */
-    public LongLineBufferedReader(Reader in, int sz) {
-        super(in);
-        if (sz <= 0)
-            throw new IllegalArgumentException("Buffer size <= 0");
-        this.in = in;
-        cb = new char[sz];
-        nextChar = nChars = 0;
-    }
-
-    /**
-     * Creates a buffering character-input stream that uses a default-sized
-     * input buffer.
-     *
-     * @param in A Reader
-     */
-    public LongLineBufferedReader(Reader in) {
-        this(in, DEFAULT_CHAR_BUFFER_SIZE);
-    }
-
-    /**
-     * Checks to make sure that the stream has not been closed
-     */
-    private void ensureOpen() throws IOException {
-        if (in == null)
-            throw new IOException("Stream closed");
-    }
-
-    /**
-     * Fills the input buffer, taking the mark into account if it is valid.
-     */
-    private void fill() throws IOException {
-        int dst;
-        if (markedChar <= UNMARKED) {
-        /* No mark */
-            dst = 0;
-        } else {
-        /* Marked */
-            int delta = nextChar - markedChar;
-            if (delta >= readAheadLimit) {
-        /* Gone past read-ahead limit: Invalidate mark */
-                markedChar = INVALIDATED;
-                readAheadLimit = 0;
-                dst = 0;
-            } else {
-                if (readAheadLimit <= cb.length) {
-		    /* Shuffle in the current buffer */
-                    System.arraycopy(cb, markedChar, cb, 0, delta);
-                    markedChar = 0;
-                    dst = delta;
-                } else {
-		    /* Reallocate buffer to accommodate read-ahead limit */
-                    char ncb[] = new char[readAheadLimit];
-                    System.arraycopy(cb, markedChar, ncb, 0, delta);
-                    cb = ncb;
-                    markedChar = 0;
-                    dst = delta;
-                }
-                nextChar = nChars = delta;
-            }
-        }
-
-        int n;
-        do {
-            n = in.read(cb, dst, cb.length - dst);
-        } while (n == 0);
-        if (n > 0) {
-            nChars = dst + n;
-            nextChar = dst;
-        }
-    }
-
-    /**
-     * Reads a single character.
-     *
-     * @return The character read, as an integer in the range
-     *         0 to 65535 (<tt>0x00-0xffff</tt>), or -1 if the
-     *         end of the stream has been reached
-     * @throws IOException If an I/O error occurs
-     */
-    public int read() throws IOException {
-        synchronized (lock) {
-            ensureOpen();
-            for (; ; ) {
-                if (nextChar >= nChars) {
-                    fill();
-                    if (nextChar >= nChars)
-                        return -1;
-                }
-                if (skipLF) {
-                    skipLF = false;
-                    if (cb[nextChar] == '\n') {
-                        nextChar++;
-                        continue;
-                    }
-                }
-                return cb[nextChar++];
-            }
-        }
-    }
-
-    /**
-     * Reads characters into a portion of an array, reading from the underlying
-     * stream if necessary.
-     */
-    private int read1(char[] cbuf, int off, int len) throws IOException {
-        if (nextChar >= nChars) {
-	    /* If the requested length is at least as large as the buffer, and
-	       if there is no mark/reset activity, and if line feeds are not
-	       being skipped, do not bother to copy the characters into the
-	       local buffer.  In this way buffered streams will cascade
-	       harmlessly. */
-            if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {
-                return in.read(cbuf, off, len);
-            }
-            fill();
-        }
-        if (nextChar >= nChars) return -1;
-        if (skipLF) {
-            skipLF = false;
-            if (cb[nextChar] == '\n') {
-                nextChar++;
-                if (nextChar >= nChars)
-                    fill();
-                if (nextChar >= nChars)
-                    return -1;
-            }
-        }
-        int n = Math.min(len, nChars - nextChar);
-        System.arraycopy(cb, nextChar, cbuf, off, n);
-        nextChar += n;
-        return n;
-    }
-
-    /**
-     * Reads characters into a portion of an array.
-     * <p/>
-     * <p> This method implements the general contract of the corresponding
-     * <code>{@link Reader#read(char[], int, int) read}</code> method of the
-     * <code>{@link Reader}</code> class.  As an additional convenience, it
-     * attempts to read as many characters as possible by repeatedly invoking
-     * the <code>read</code> method of the underlying stream.  This iterated
-     * <code>read</code> continues until one of the following conditions becomes
-     * true: <ul>
-     * <p/>
-     * <li> The specified number of characters have been read,
-     * <p/>
-     * <li> The <code>read</code> method of the underlying stream returns
-     * <code>-1</code>, indicating end-of-file, or
-     * <p/>
-     * <li> The <code>ready</code> method of the underlying stream
-     * returns <code>false</code>, indicating that further input requests
-     * would block.
-     * <p/>
-     * </ul> If the first <code>read</code> on the underlying stream returns
-     * <code>-1</code> to indicate end-of-file then this method returns
-     * <code>-1</code>.  Otherwise this method returns the number of characters
-     * actually read.
-     * <p/>
-     * <p> Subclasses of this class are encouraged, but not required, to
-     * attempt to read as many characters as possible in the same fashion.
-     * <p/>
-     * <p> Ordinarily this method takes characters from this stream's character
-     * buffer, filling it from the underlying stream as necessary.  If,
-     * however, the buffer is empty, the mark is not valid, and the requested
-     * length is at least as large as the buffer, then this method will read
-     * characters directly from the underlying stream into the given array.
-     * Thus redundant <code>BufferedReaderTwo</code>s will not copy data
-     * unnecessarily.
-     *
-     * @param cbuf Destination buffer
-     * @param off  Offset at which to start storing characters
-     * @param len  Maximum number of characters to read
-     * @return The number of characters read, or -1 if the end of the
-     *         stream has been reached
-     * @throws IOException If an I/O error occurs
-     */
-    public int read(char cbuf[], int off, int len) throws IOException {
-        synchronized (lock) {
-            ensureOpen();
-            if ((off < 0) || (off > cbuf.length) || (len < 0) ||
-                    ((off + len) > cbuf.length) || ((off + len) < 0)) {
-                throw new IndexOutOfBoundsException();
-            } else if (len == 0) {
-                return 0;
-            }
-
-            int n = read1(cbuf, off, len);
-            if (n <= 0) return n;
-            while ((n < len) && in.ready()) {
-                int n1 = read1(cbuf, off + n, len - n);
-                if (n1 <= 0) break;
-                n += n1;
-            }
-            return n;
-        }
-    }
-
-    /**
-     * Reads a line of text.  A line is considered to be terminated by any one
-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
-     * followed immediately by a linefeed.
-     *
-     * @param ignoreLF If true, the next '\n' will be skipped
-     * @return A String containing the contents of the line, not including
-     *         any line-termination characters, or null if the end of the
-     *         stream has been reached
-     * @throws IOException If an I/O error occurs
-     * @see java.io.LineNumberReader#readLine()
-     */
-    String readLine(boolean ignoreLF) throws IOException {
-        int startChar;
-        lineBuffer.setLength(0);
-        
-        synchronized (lock) {
-            ensureOpen();
-            boolean omitLF = ignoreLF || skipLF;
-
-            bufferLoop:
-            for (; ; ) {
-
-                if (nextChar >= nChars)
-                    fill();
-                if (nextChar >= nChars) { /* EOF */
-                    if (lineBuffer != null && lineBuffer.length() > 0)
-                        return lineBuffer.toString();
-                    else
-                        return null;
-                }
-                boolean eol = false;
-                char c = 0;
-                int i;
-
-                /* Skip a leftover '\n', if necessary */
-                if (omitLF && (cb[nextChar] == '\n'))
-                    nextChar++;
-                skipLF = false;
-                omitLF = false;
-
-                charLoop:
-                for (i = nextChar; i < nChars; i++) {
-                    c = cb[i];
-                    if ((c == '\n') || (c == '\r')) {
-                        eol = true;
-                        break charLoop;
-                    }
-                }
-
-                startChar = nextChar;
-                nextChar = i;
-
-                if (eol) {
-                    String str;
-                    lineBuffer.append(cb, startChar, i - startChar);
-                    str = lineBuffer.toString();
-                    nextChar++;
-                    if (c == '\r') {
-                        skipLF = true;
-                    }
-                    return str;
-                }
-
-                lineBuffer.append(cb, startChar, i - startChar);
-            }
-        }
-    }
-
-    /**
-     * Reads a line of text.  A line is considered to be terminated by any one
-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
-     * followed immediately by a linefeed.
-     *
-     * @return A String containing the contents of the line, not including
-     *         any line-termination characters, or null if the end of the
-     *         stream has been reached
-     * @throws IOException If an I/O error occurs
-     */
-    public String readLine() throws IOException {
-        return readLine(false);
-    }
-
-    /**
-     * Skips characters.
-     *
-     * @param n The number of characters to skip
-     * @return The number of characters actually skipped
-     * @throws IllegalArgumentException If <code>n</code> is negative.
-     * @throws IOException              If an I/O error occurs
-     */
-    public long skip(long n) throws IOException {
-        if (n < 0L) {
-            throw new IllegalArgumentException("skip value is negative");
-        }
-        synchronized (lock) {
-            ensureOpen();
-            long r = n;
-            while (r > 0) {
-                if (nextChar >= nChars)
-                    fill();
-                if (nextChar >= nChars)	/* EOF */
-                    break;
-                if (skipLF) {
-                    skipLF = false;
-                    if (cb[nextChar] == '\n') {
-                        nextChar++;
-                    }
-                }
-                long d = nChars - nextChar;
-                if (r <= d) {
-                    nextChar += r;
-                    r = 0;
-                    break;
-                } else {
-                    r -= d;
-                    nextChar = nChars;
-                }
-            }
-            return n - r;
-        }
-    }
-
-    /**
-     * Tells whether this stream is ready to be read.  A buffered character
-     * stream is ready if the buffer is not empty, or if the underlying
-     * character stream is ready.
-     *
-     * @throws IOException If an I/O error occurs
-     */
-    public boolean ready() throws IOException {
-        synchronized (lock) {
-            ensureOpen();
-
-	    /* 
-	     * If newline needs to be skipped and the next char to be read
-	     * is a newline character, then just skip it right away.
-	     */
-            if (skipLF) {
-		/* Note that in.ready() will return true if and only if the next 
-		 * read on the stream will not block.
-		 */
-                if (nextChar >= nChars && in.ready()) {
-                    fill();
-                }
-                if (nextChar < nChars) {
-                    if (cb[nextChar] == '\n')
-                        nextChar++;
-                    skipLF = false;
-                }
-            }
-            return (nextChar < nChars) || in.ready();
-        }
-    }
-
-    /**
-     * Tells whether this stream supports the mark() operation, which it does.
-     */
-    public boolean markSupported() {
-        return true;
-    }
-
-    /**
-     * Marks the present position in the stream.  Subsequent calls to reset()
-     * will attempt to reposition the stream to this point.
-     *
-     * @param readAheadLimit Limit on the number of characters that may be
-     *                       read while still preserving the mark. An attempt
-     *                       to reset the stream after reading characters
-     *                       up to this limit or beyond may fail.
-     *                       A limit value larger than the size of the input
-     *                       buffer will cause a new buffer to be allocated
-     *                       whose size is no smaller than limit.
-     *                       Therefore large values should be used with care.
-     * @throws IllegalArgumentException If readAheadLimit is < 0
-     * @throws IOException              If an I/O error occurs
-     */
-    public void mark(int readAheadLimit) throws IOException {
-        if (readAheadLimit < 0) {
-            throw new IllegalArgumentException("Read-ahead limit < 0");
-        }
-        synchronized (lock) {
-            ensureOpen();
-            this.readAheadLimit = readAheadLimit;
-            markedChar = nextChar;
-            markedSkipLF = skipLF;
-        }
-    }
-
-    /**
-     * Resets the stream to the most recent mark.
-     *
-     * @throws IOException If the stream has never been marked,
-     *                     or if the mark has been invalidated
-     */
-    public void reset() throws IOException {
-        synchronized (lock) {
-            ensureOpen();
-            if (markedChar < 0)
-                throw new IOException((markedChar == INVALIDATED)
-                        ? "Mark invalid"
-                        : "Stream not marked");
-            nextChar = markedChar;
-            skipLF = markedSkipLF;
-        }
-    }
-
-    public void close() throws IOException {
-        synchronized (lock) {
-            if (in == null)
-                return;
-            in.close();
-            in = null;
-            cb = null;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readers/Positional.java b/src/main/java/htsjdk/tribble/readers/Positional.java
deleted file mode 100644
index 50f4039..0000000
--- a/src/main/java/htsjdk/tribble/readers/Positional.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.LocationAware;
-
-import java.io.IOException;
-
-/**
- * Minimal interface for an object at support getting the current position in the stream / writer / file, as well as a handful of other
- * reader-like features.
- * 
- * @author depristo
- */
-public interface Positional extends LocationAware {
-    /**
-     * Is the stream done?  Equivalent to ! hasNext() for an iterator?
-     * @return true if the stream has reached EOF, false otherwise
-     */
-    public boolean isDone() throws IOException;
-
-    /**
-     * Skip the next nBytes in the stream.
-     * @param nBytes to skip, must be >= 0
-     * @return the number of bytes actually skippped.
-     * @throws IOException
-     */
-    public long skip(long nBytes) throws IOException;
-
-    /**
-     * Return the next byte in the first, without actually reading it from the stream.
-     *
-     * Has the same output as read()
-     *
-     * @return the next byte, or -1 if EOF encountered
-     * @throws IOException
-     */
-    public int peek() throws IOException;
-}
diff --git a/src/main/java/htsjdk/tribble/readers/PositionalBufferedStream.java b/src/main/java/htsjdk/tribble/readers/PositionalBufferedStream.java
deleted file mode 100644
index ac642df..0000000
--- a/src/main/java/htsjdk/tribble/readers/PositionalBufferedStream.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.tribble.TribbleException;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-/**
- * A wrapper around an {@code InputStream} which performs it's own buffering, and keeps track of the position.
- * 
- * @author depristo
- */
-public final class PositionalBufferedStream extends InputStream implements Positional {
-    final InputStream is;
-    final byte[] buffer;
-    int nextChar;
-    int nChars;
-    long position;
-
-    public PositionalBufferedStream(final InputStream is) {
-        this(is, 512000);
-    }
-
-    public PositionalBufferedStream(final InputStream is, final int bufferSize) {
-        this.is = is;
-        buffer = new byte[bufferSize];
-        nextChar = nChars = 0;
-    }
-
-    public final long getPosition() {
-        return position;
-    }
-
-    @Override
-    public final int read() throws IOException {
-        final int c = peek();
-        if ( c >= 0 ) {
-            // update position and buffer offset if peek says we aren't yet done
-            position++;
-            nextChar++;
-        }
-        return c;
-    }
-
-    @Override
-    public final int read(final byte[] bytes, final int start, final int len) throws IOException {
-        if ( len == 0 ) // If len is zero, then no bytes are read and 0 is returned
-            return 0;
-        if (nChars < 0) // If no byte is available because the stream is at end of file, the value -1 is returned
-            return -1;
-        else {
-            int nRead = 0;
-            int remaining = len;
-
-            while ( remaining > 0 ) {
-                // Try to Refill buffer if at the end of current buffer
-                if ( nChars == nextChar )
-                    if ( fill() < 0 ) { // EOF
-                        break;
-                    }
-
-                // we copy as many bytes from the buffer as possible, up to the number of need
-                final int nCharsToCopy = Math.min(nChars - nextChar, remaining);
-                System.arraycopy(buffer, nextChar, bytes, start + nRead, nCharsToCopy);
-
-                // update nextChar (pointer into buffer) and keep track of nRead and remaining
-                nextChar  += nCharsToCopy;
-                nRead     += nCharsToCopy;
-                remaining -= nCharsToCopy;
-            }
-
-            // make sure we update our position tracker to reflect having advanced by nRead bytes
-            position += nRead;
-            
-            /** Conform to {@link InputStream#read(byte[], int, int)} contract by returning -1 if EOF and no data was read. */
-            return nRead == 0 ? -1 : nRead;
-        }
-    }
-
-    @Override
-    public final int read(final byte[] bytes) throws IOException {
-        return read(bytes, 0, bytes.length);
-    }
-
-    @Override
-    public final boolean isDone() throws IOException {
-        return nChars == -1 || peek() == -1;
-    }
-
-    @Override
-    public final int peek() throws IOException {
-        // Check for EOF
-        if (nChars < 0) {
-            return -1;
-        } else if (nextChar == nChars){
-            //Try to Refill buffer if at the end of current buffer
-            if ( fill() < 0 ){
-                return -1;
-            }
-        }
-
-        return byteToInt(buffer[nextChar]);
-    }
-
-    private final int fill() throws IOException {
-        nChars = is.read(buffer);
-        nextChar = 0;
-        return nChars;
-    }
-
-    public final long skip(final long nBytes) throws IOException {
-        long remainingToSkip = nBytes;
-
-        // because we have this buffer, that may be shorter than nBytes
-        // we loop while there are bytes to skip, filling the buffer
-        // When the buffer contains enough data that we have less than
-        // its less left to skip we increase nextChar by the remaining
-        // amount
-        while ( remainingToSkip > 0 && ! isDone() ) {
-            final long bytesLeftInBuffer = nChars - nextChar;
-            if ( remainingToSkip > bytesLeftInBuffer ) {
-                // we need to refill the buffer and continue our skipping
-                remainingToSkip -= bytesLeftInBuffer;
-                fill();
-            } else {
-                // there are enough bytes in the buffer to not read again
-                // we just push forward the pointer nextChar
-                nextChar += remainingToSkip;
-                remainingToSkip = 0;
-            }
-        }
-
-        final long actuallySkipped = nBytes - remainingToSkip;
-        position += actuallySkipped;
-        return actuallySkipped;
-    }
-
-    public final void close() {
-        try {
-            is.close();
-        } catch (IOException ex) {
-            new TribbleException("Failed to close PositionalBufferedStream", ex);
-        }
-    }
-
-    private final static int byteToInt(byte b) {
-        return b & 0xFF;
-    }
-
-    public static void main(String[] args) throws Exception {
-        final File testFile = new File(args[0]);
-        final int iterations = Integer.valueOf(args[1]);
-        final boolean includeInputStream = Boolean.valueOf(args[2]);
-        final boolean doReadFileInChunks = Boolean.valueOf(args[3]);
-
-        System.out.printf("Testing %s%n", args[0]);
-        for (int i = 0; i < iterations; i++) {
-            if ( includeInputStream ) {
-                final InputStream is = new FileInputStream(testFile);
-                if ( doReadFileInChunks )
-                    readFileInChunks("InputStream", is);
-                else
-                    readFileByLine("InputStream", is);
-                is.close();
-            }
-
-            final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(testFile));
-            if ( doReadFileInChunks )
-                readFileInChunks("PositionalBufferedStream", pbs);
-            else
-                readFileByLine("PositionalBufferedStream", pbs);
-            pbs.close();
-        }
-    }
-
-    private static void readFileByLine(final String name, final InputStream is) throws IOException {
-        final BufferedReader reader2 = new BufferedReader(new InputStreamReader(is));
-        final long t0 = System.currentTimeMillis();
-        long lineCount = 0;
-        while (reader2.readLine() != null) {
-            lineCount++;
-        }
-        final long dt = System.currentTimeMillis() - t0;
-        final double rate = ((double) lineCount) / dt;
-        printStatus(name, lineCount, rate, dt);
-        reader2.close();
-    }
-
-    private static void readFileInChunks(final String name, final InputStream is) throws IOException {
-        final long t0 = System.currentTimeMillis();
-        long chunk = 0;
-        final byte[] bytes = new byte[4096];
-        while (is.read(bytes) != -1) {
-            chunk++;
-        }
-        final long dt = System.currentTimeMillis() - t0;
-        final double rate = ((double) chunk) / dt;
-        printStatus(name, chunk, rate, dt);
-        is.close();
-    }
-
-
-    private static final void printStatus(final String name, long lineCount, double rate, long dt) {
-        System.out.printf("%30s: %d lines read.  Rate = %.2e lines per second.  DT = %d%n", name, lineCount, rate, dt);
-        System.out.flush();
-    }
-}
-
diff --git a/src/main/java/htsjdk/tribble/readers/SynchronousLineReader.java b/src/main/java/htsjdk/tribble/readers/SynchronousLineReader.java
deleted file mode 100644
index 5de8b22..0000000
--- a/src/main/java/htsjdk/tribble/readers/SynchronousLineReader.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-/**
- * Implementation of {@link LineReader} that reads lines directly from the underlying stream or reader.
- */
-public final class SynchronousLineReader implements LineReader{
-    private final LongLineBufferedReader longLineBufferedReader;
-
-    public SynchronousLineReader(final InputStream stream){
-        this(new InputStreamReader(stream));
-    }
-
-    public SynchronousLineReader(final Reader reader){
-        this.longLineBufferedReader = new LongLineBufferedReader(reader);
-    }
-
-    @Override
-    public String readLine() {
-        try {
-            return longLineBufferedReader.readLine();
-        } catch (final IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    @Override
-    public void close() {
-        CloserUtil.close(longLineBufferedReader);
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/readers/TabixIteratorLineReader.java b/src/main/java/htsjdk/tribble/readers/TabixIteratorLineReader.java
deleted file mode 100644
index 49b6f0c..0000000
--- a/src/main/java/htsjdk/tribble/readers/TabixIteratorLineReader.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.util.RuntimeIOException;
-
-import java.io.IOException;
-
-/**
- * @author Jim Robinson
- * @date 2/11/12
- */
-public class TabixIteratorLineReader implements LineReader {
-
-    TabixReader.Iterator iterator;
-
-
-    public TabixIteratorLineReader(TabixReader.Iterator iterator) {
-        this.iterator = iterator;
-    }
-
-    public String readLine() {
-        try {
-            return iterator != null ? iterator.next() : null;
-        } catch (IOException e) {
-            throw new RuntimeIOException(e);
-        }
-    }
-
-    public void close() {
-        // Ignore -
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readers/TabixReader.java b/src/main/java/htsjdk/tribble/readers/TabixReader.java
deleted file mode 100644
index 8867d07..0000000
--- a/src/main/java/htsjdk/tribble/readers/TabixReader.java
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.readers;
-
-import htsjdk.samtools.seekablestream.ISeekableStreamFactory;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.tribble.util.TabixUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Heng Li <hengli at broadinstitute.org>
- */
-public class TabixReader {
-    private String mFn;
-    private String mIdxFn;
-    private BlockCompressedInputStream mFp;
-
-    private int mPreset;
-    private int mSc;
-    private int mBc;
-    private int mEc;
-    private int mMeta;
-    //private int mSkip; (not used)
-    private String[] mSeq;
-
-    private Map<String, Integer> mChr2tid;
-
-    private static int MAX_BIN = 37450;
-    //private static int TAD_MIN_CHUNK_GAP = 32768; (not used)
-    private static int TAD_LIDX_SHIFT = 14;
-
-    protected static class TPair64 implements Comparable<TPair64> {
-        long u, v;
-
-        public TPair64(final long _u, final long _v) {
-            u = _u;
-            v = _v;
-        }
-
-        public TPair64(final TPair64 p) {
-            u = p.u;
-            v = p.v;
-        }
-
-        public int compareTo(final TPair64 p) {
-            return u == p.u ? 0 : ((u < p.u) ^ (u < 0) ^ (p.u < 0)) ? -1 : 1; // unsigned 64-bit comparison
-        }
-    }
-
-    protected static class TIndex {
-        HashMap<Integer, TPair64[]> b; // binning index
-        long[] l; // linear index
-    }
-
-    protected TIndex[] mIndex;
-
-    private static class TIntv {
-        int tid, beg, end;
-    }
-
-    private static boolean less64(final long u, final long v) { // unsigned 64-bit comparison
-        return (u < v) ^ (u < 0) ^ (v < 0);
-    }
-
-    /**
-     * @param fn File name of the data file
-     */
-    public TabixReader(final String fn) throws IOException {
-        this(fn, null, SeekableStreamFactory.getInstance().getBufferedStream(SeekableStreamFactory.getInstance().getStreamFor(fn)));
-    }
-
-    /**
-     * @param fn File name of the data file
-     * @param idxFn Full path to the index file. Auto-generated if null
-     */
-    public TabixReader(final String fn, final String idxFn) throws IOException {
-        this(fn, idxFn, SeekableStreamFactory.getInstance().getBufferedStream(SeekableStreamFactory.getInstance().getStreamFor(fn)));
-    }
-
-    /**
-     * @param fn File name of the data file  (used for error messages only)
-     * @param stream Seekable stream from which the data is read
-     */
-    public TabixReader(final String fn, SeekableStream stream) throws IOException {
-        this(fn, null, stream);
-    }
-
-    /**
-     * @param fn File name of the data file  (used for error messages only)
-     * @param idxFn Full path to the index file. Auto-generated if null
-     * @param stream Seekable stream from which the data is read
-     */
-    public TabixReader(final String fn, final String idxFn, SeekableStream stream) throws IOException {
-        mFn = fn;
-        mFp = new BlockCompressedInputStream(stream);
-        if(idxFn == null){
-            mIdxFn = ParsingUtils.appendToPath(fn, TabixUtils.STANDARD_INDEX_EXTENSION);
-        } else {
-            mIdxFn = idxFn;
-        }
-        readIndex();
-    }
-
-    /** return the source (filename/URL) of that reader */
-    public String getSource()
-        {
-        return this.mFn;
-        }
-
-    private static int reg2bins(final int beg, final int _end, final int[] list) {
-        int i = 0, k, end = _end;
-        if (beg >= end) return 0;
-        if (end >= 1 << 29) end = 1 << 29;
-        --end;
-        list[i++] = 0;
-        for (k = 1 + (beg >> 26); k <= 1 + (end >> 26); ++k) list[i++] = k;
-        for (k = 9 + (beg >> 23); k <= 9 + (end >> 23); ++k) list[i++] = k;
-        for (k = 73 + (beg >> 20); k <= 73 + (end >> 20); ++k) list[i++] = k;
-        for (k = 585 + (beg >> 17); k <= 585 + (end >> 17); ++k) list[i++] = k;
-        for (k = 4681 + (beg >> 14); k <= 4681 + (end >> 14); ++k) list[i++] = k;
-        return i;
-    }
-
-    public static int readInt(final InputStream is) throws IOException {
-        byte[] buf = new byte[4];
-        is.read(buf);
-        return ByteBuffer.wrap(buf).order(ByteOrder.LITTLE_ENDIAN).getInt();
-    }
-
-    public static long readLong(final InputStream is) throws IOException {
-        byte[] buf = new byte[8];
-        is.read(buf);
-        return ByteBuffer.wrap(buf).order(ByteOrder.LITTLE_ENDIAN).getLong();
-    }
-
-    public static String readLine(final InputStream is) throws IOException {
-        StringBuffer buf = new StringBuffer();
-        int c;
-        while ((c = is.read()) >= 0 && c != '\n')
-            buf.append((char) c);
-        if (c < 0) return null;
-        return buf.toString();
-    }
-
-    /**
-     * Read the Tabix index from a file
-     *
-     * @param fp File pointer
-     */
-    private void readIndex(SeekableStream fp) throws IOException {
-        if (fp == null) return;
-        BlockCompressedInputStream is = new BlockCompressedInputStream(fp);
-        byte[] buf = new byte[4];
-
-        is.read(buf, 0, 4); // read "TBI\1"
-        mSeq = new String[readInt(is)]; // # sequences
-        mChr2tid = new HashMap<String, Integer>();
-        mPreset = readInt(is);
-        mSc = readInt(is);
-        mBc = readInt(is);
-        mEc = readInt(is);
-        mMeta = readInt(is);
-        readInt(is);//unused
-        // read sequence dictionary
-        int i, j, k, l = readInt(is);
-        buf = new byte[l];
-        is.read(buf);
-        for (i = j = k = 0; i < buf.length; ++i) {
-            if (buf[i] == 0) {
-                byte[] b = new byte[i - j];
-                System.arraycopy(buf, j, b, 0, b.length);
-                String s = new String(b);
-                mChr2tid.put(s, k);
-                mSeq[k++] = s;
-                j = i + 1;
-            }
-        }
-        // read the index
-        mIndex = new TIndex[mSeq.length];
-        for (i = 0; i < mSeq.length; ++i) {
-            // the binning index
-            int n_bin = readInt(is);
-            mIndex[i] = new TIndex();
-            mIndex[i].b = new HashMap<Integer, TPair64[]>(n_bin);
-            for (j = 0; j < n_bin; ++j) {
-                int bin = readInt(is);
-                TPair64[] chunks = new TPair64[readInt(is)];
-                for (k = 0; k < chunks.length; ++k) {
-                    long u = readLong(is);
-                    long v = readLong(is);
-                    chunks[k] = new TPair64(u, v); // in C, this is inefficient
-                }
-                mIndex[i].b.put(bin, chunks);
-            }
-            // the linear index
-            mIndex[i].l = new long[readInt(is)];
-            for (k = 0; k < mIndex[i].l.length; ++k)
-                mIndex[i].l[k] = readLong(is);
-        }
-        // close
-        is.close();
-    }
-
-    /**
-     * Read the Tabix index from the default file.
-     */
-    private void readIndex() throws IOException {
-        ISeekableStreamFactory ssf = SeekableStreamFactory.getInstance();
-        readIndex(ssf.getBufferedStream(ssf.getStreamFor(mIdxFn), 128000));
-    }
-
-    /**
-     * Read one line from the data file.
-     */
-    public String readLine() throws IOException {
-        return readLine(mFp);
-    }
-
-    /** return chromosome ID or -1 if it is unknown */
-    public int chr2tid(final String chr) {
-        Integer tid=this.mChr2tid.get(chr);
-       return tid==null?-1:tid;
-    }
-
-    /** return the chromosomes in that tabix file */
-    public Set<String> getChromosomes()
-        {
-        return Collections.unmodifiableSet(this.mChr2tid.keySet());
-        }
-
-    /**
-     * Parse a region in the format of "chr1", "chr1:100" or "chr1:100-1000"
-     *
-     * @param reg Region string
-     * @return An array where the three elements are sequence_id,
-     *         region_begin and region_end. On failure, sequence_id==-1.
-     */
-    public int[] parseReg(final String reg) { // FIXME: NOT working when the sequence name contains : or -.
-        String chr;
-        int colon, hyphen;
-        int[] ret = new int[3];
-        colon = reg.indexOf(':');
-        hyphen = reg.indexOf('-');
-        chr = colon >= 0 ? reg.substring(0, colon) : reg;
-        ret[1] = colon >= 0 ? Integer.parseInt(reg.substring(colon + 1, hyphen >= 0 ? hyphen : reg.length())) - 1 : 0;
-        ret[2] = hyphen >= 0 ? Integer.parseInt(reg.substring(hyphen + 1)) : 0x7fffffff;
-        ret[0] = this.chr2tid(chr);
-        return ret;
-    }
-
-    private TIntv getIntv(final String s) {
-        TIntv intv = new TIntv();
-        int col = 0, end = 0, beg = 0;
-        while ((end = s.indexOf('\t', beg)) >= 0 || end == -1) {
-            ++col;
-            if (col == mSc) {
-                intv.tid = chr2tid(end != -1 ? s.substring(beg, end) : s.substring(beg));
-            } else if (col == mBc) {
-                intv.beg = intv.end = Integer.parseInt(end != -1 ? s.substring(beg, end) : s.substring(beg));
-                if ((mPreset & 0x10000) != 0) ++intv.end;
-                else --intv.beg;
-                if (intv.beg < 0) intv.beg = 0;
-                if (intv.end < 1) intv.end = 1;
-            } else { // FIXME: SAM supports are not tested yet
-                if ((mPreset & 0xffff) == 0) { // generic
-                    if (col == mEc)
-                        intv.end = Integer.parseInt(end != -1 ? s.substring(beg, end) : s.substring(beg));
-                } else if ((mPreset & 0xffff) == 1) { // SAM
-                    if (col == 6) { // CIGAR
-                        int l = 0, i, j;
-                        String cigar = s.substring(beg, end);
-                        for (i = j = 0; i < cigar.length(); ++i) {
-                            if (cigar.charAt(i) > '9') {
-                                int op = cigar.charAt(i);
-                                if (op == 'M' || op == 'D' || op == 'N')
-                                    l += Integer.parseInt(cigar.substring(j, i));
-                                j = i + 1;
-                            }
-                        }
-                        intv.end = intv.beg + l;
-                    }
-                } else if ((mPreset & 0xffff) == 2) { // VCF
-                    String alt;
-                    alt = end >= 0 ? s.substring(beg, end) : s.substring(beg);
-                    if (col == 4) { // REF
-                        if (!alt.isEmpty()) intv.end = intv.beg + alt.length();
-                    } else if (col == 8) { // INFO
-                        int e_off = -1, i = alt.indexOf("END=");
-                        if (i == 0) e_off = 4;
-                        else if (i > 0) {
-                            i = alt.indexOf(";END=");
-                            if (i >= 0) e_off = i + 5;
-                        }
-                        if (e_off > 0) {
-                            i = alt.indexOf(';', e_off);
-                            intv.end = Integer.parseInt(i > e_off ? alt.substring(e_off, i) : alt.substring(e_off));
-                        }
-                    }
-                }
-            }
-            if (end == -1) break;
-            beg = end + 1;
-        }
-        return intv;
-    }
-
-    public interface Iterator
-        {
-        /** return null when there is no more data to read */
-        public String next() throws IOException;
-        }
-
-    /** iterator returned instead of null when there is no more data */
-    private static final Iterator EOF_ITERATOR=new Iterator()  {
-        @Override
-        public String next() throws IOException {
-            return null;
-            }
-        };
-
-    /** default implementation of Iterator */
-    private class IteratorImpl implements Iterator {
-        private int i;
-        //private int n_seeks;
-        private int tid, beg, end;
-        private TPair64[] off;
-        private long curr_off;
-        private boolean iseof;
-
-        private IteratorImpl(final int _tid, final int _beg, final int _end, final TPair64[] _off) {
-            i = -1;
-            //n_seeks = 0;
-            curr_off = 0;
-            iseof = false;
-            off = _off;
-            tid = _tid;
-            beg = _beg;
-            end = _end;
-        }
-
-        @Override
-        public String next() throws IOException {
-            if (iseof) return null;
-            for (; ;) {
-                if (curr_off == 0 || !less64(curr_off, off[i].v)) { // then jump to the next chunk
-                    if (i == off.length - 1) break; // no more chunks
-                    if (i >= 0) assert (curr_off == off[i].v); // otherwise bug
-                    if (i < 0 || off[i].v != off[i + 1].u) { // not adjacent chunks; then seek
-                        mFp.seek(off[i + 1].u);
-                        curr_off = mFp.getFilePointer();
-                        //++n_seeks;
-                    }
-                    ++i;
-                }
-                String s;
-                if ((s = readLine(mFp)) != null) {
-                    TIntv intv;
-                    char[] str = s.toCharArray();
-                    curr_off = mFp.getFilePointer();
-                    if (str.length == 0 || str[0] == mMeta) continue;
-                    intv = getIntv(s);
-                    if (intv.tid != tid || intv.beg >= end) break; // no need to proceed
-                    else if (intv.end > beg && intv.beg < end) return s; // overlap; return
-                } else break; // end of file
-            }
-            iseof = true;
-            return null;
-        }
-    }
-
-    /**
-     * Return
-     * @param tid Sequence id
-     * @param beg beginning of interval, genomic coords
-     * @param end end of interval, genomic coords
-     * @return an iterator over the lines within the specified interval
-     */
-    public Iterator query(final int tid, final int beg, final int end) {
-        TPair64[] off, chunks;
-        long min_off;
-        if(tid< 0 || tid>=this.mIndex.length) return EOF_ITERATOR;
-        TIndex idx = mIndex[tid];
-        int[] bins = new int[MAX_BIN];
-        int i, l, n_off, n_bins = reg2bins(beg, end, bins);
-        if (idx.l.length > 0)
-            min_off = (beg >> TAD_LIDX_SHIFT >= idx.l.length) ? idx.l[idx.l.length - 1] : idx.l[beg >> TAD_LIDX_SHIFT];
-        else min_off = 0;
-        for (i = n_off = 0; i < n_bins; ++i) {
-            if ((chunks = idx.b.get(bins[i])) != null)
-                n_off += chunks.length;
-        }
-        if (n_off == 0) return EOF_ITERATOR;
-        off = new TPair64[n_off];
-        for (i = n_off = 0; i < n_bins; ++i)
-            if ((chunks = idx.b.get(bins[i])) != null)
-                for (int j = 0; j < chunks.length; ++j)
-                    if (less64(min_off, chunks[j].v))
-                        off[n_off++] = new TPair64(chunks[j]);
-        Arrays.sort(off, 0, n_off);
-        // resolve completely contained adjacent blocks
-        for (i = 1, l = 0; i < n_off; ++i) {
-            if (less64(off[l].v, off[i].v)) {
-                ++l;
-                off[l].u = off[i].u;
-                off[l].v = off[i].v;
-            }
-        }
-        n_off = l + 1;
-        // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing
-        for (i = 1; i < n_off; ++i)
-            if (!less64(off[i - 1].v, off[i].u)) off[i - 1].v = off[i].u;
-        // merge adjacent blocks
-        for (i = 1, l = 0; i < n_off; ++i) {
-            if (off[l].v >> 16 == off[i].u >> 16) off[l].v = off[i].v;
-            else {
-                ++l;
-                off[l].u = off[i].u;
-                off[l].v = off[i].v;
-            }
-        }
-        n_off = l + 1;
-        // return
-        TPair64[] ret = new TPair64[n_off];
-        for (i = 0; i < n_off; ++i) {
-            if (off[i] != null) ret[i] = new TPair64(off[i].u, off[i].v); // in C, this is inefficient
-        }
-        if (ret.length == 0 || (ret.length == 1 && ret[0] == null))
-            return EOF_ITERATOR;
-        return new TabixReader.IteratorImpl(tid, beg, end, ret);
-    }
-
-    /**
-     *
-     * @see #parseReg(String)
-     * @param reg A region string of the form acceptable by {@link #parseReg(String)}
-     * @return
-     */
-    public Iterator query(final String reg) {
-        int[] x = parseReg(reg);
-        if(x[0]<0) return EOF_ITERATOR;
-        return query(x[0], x[1], x[2]);
-    }
-
-    /**
-    *
-    * @see #parseReg(String)
-    * @param reg a chromosome
-    * @param start start interval
-    * @param end end interval
-    * @return a tabix iterator
-    */
-   public Iterator query(final String reg,int start,int end) {
-       int tid=this.chr2tid(reg);
-       if(tid==-1) return EOF_ITERATOR;
-       return query(tid, start, end);
-   }
-
-    public static void main(String[] args) {
-        if (args.length < 1) {
-            System.out.println("Usage: java -cp .:sam.jar TabixReader <in.gz> [region]");
-            System.exit(1);
-        }
-        try {
-            TabixReader tr = new TabixReader(args[0]);
-            String s;
-            if (args.length == 1) { // no region is specified; print the whole file
-                while ((s = tr.readLine()) != null)
-                    System.out.println(s);
-            } else { // a region is specified; random access
-                TabixReader.Iterator iter = tr.query(args[1]); // get the iterator
-                while ((s = iter.next()) != null)
-                    System.out.println(s);
-            }
-        } catch (IOException e) {
-        }
-    }
-
-    // ADDED BY JTR
-    public void close() {
-        if(mFp != null) {
-            try {
-                mFp.close();
-            } catch (IOException e) {
-
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "TabixReader: filename:"+getSource();
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/readme.txt b/src/main/java/htsjdk/tribble/readme.txt
deleted file mode 100644
index 6ee86c3..0000000
--- a/src/main/java/htsjdk/tribble/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Source root for tribble project -- indexed, queryable genomic file formats
\ No newline at end of file
diff --git a/src/main/java/htsjdk/tribble/util/FTPHelper.java b/src/main/java/htsjdk/tribble/util/FTPHelper.java
deleted file mode 100644
index c28650f..0000000
--- a/src/main/java/htsjdk/tribble/util/FTPHelper.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package htsjdk.tribble.util;
-
-import htsjdk.samtools.util.ftp.FTPClient;
-import htsjdk.samtools.util.ftp.FTPStream;
-import htsjdk.samtools.util.ftp.FTPUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * @author jacob
- * @date 2013-Apr-11
- */
-public class FTPHelper implements URLHelper {
-
-    private URL url;
-
-    public FTPHelper(URL url) {
-        if (!url.getProtocol().toLowerCase().equals("ftp")) {
-            throw new IllegalArgumentException("FTPHelper can only be used with ftp protocol, not " + url.getProtocol());
-        }
-        this.url = url;
-    }
-
-    @Override
-    public URL getUrl() {
-        return this.url;
-    }
-
-    @Override
-    public long getContentLength() throws IOException {
-        return FTPUtils.getContentLength(this.url);
-    }
-
-    @Override
-    public InputStream openInputStream() throws IOException {
-        String file = url.getPath();
-        FTPClient ftp = FTPUtils.connect(url.getHost(), url.getUserInfo(), null);
-        ftp.pasv();
-        ftp.retr(file);
-        return new FTPStream(ftp);
-    }
-
-    @Override
-    @Deprecated
-    public InputStream openInputStreamForRange(long start, long end) throws IOException {
-        throw new UnsupportedOperationException("Cannot perform range operations over FTP");
-    }
-
-    @Override
-    public boolean exists() throws IOException {
-        return FTPUtils.resourceAvailable(this.url);
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/util/HTTPHelper.java b/src/main/java/htsjdk/tribble/util/HTTPHelper.java
deleted file mode 100644
index 90e6228..0000000
--- a/src/main/java/htsjdk/tribble/util/HTTPHelper.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.tribble.util;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.Proxy;
-import java.net.URL;
-import java.net.URLConnection;
-
-/**
- * Simple implementation of URLHelper based on the JDK URL and HttpURLConnection classes.  This
- * version optionally takes a proxy, but does not support authentication.
- *
- * @author jrobinso
- * @date Jun 28, 2011
- */
-public class HTTPHelper implements URLHelper {
-    /**
-     * Global proxy setting -- shared by all instances
-     */
-    static Proxy proxy;
-
-    private URL url;
-
-    public HTTPHelper(URL url) {
-        this.url = url;
-        proxy = null;
-
-        try {
-            URLConnection conn = openConnection();
-            conn.setDefaultUseCaches(false);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static synchronized void setProxy(Proxy p) {
-        proxy = p;
-    }
-
-    public URL getUrl() {
-        return url;
-    }
-
-    /**
-     * @return content length of the resource
-     * @throws IOException
-     */
-    public long getContentLength() throws IOException {
-
-        HttpURLConnection con = null;
-        try {
-            con = openConnection();
-            con.setRequestMethod("HEAD");
-            if ((con.getResponseCode() != HttpURLConnection.HTTP_OK)) {
-                System.out.println("Error (" + con.getResponseMessage() + " ) fetching content length: " + url);
-                return -1;
-            } else {
-                String contentLength = con.getHeaderField("Content-Length");
-                return contentLength == null ? -1 : Long.parseLong(contentLength);
-            }
-        } finally {
-            if (con != null) con.disconnect();
-        }
-    }
-
-
-    public InputStream openInputStream() throws IOException {
-
-        HttpURLConnection connection = openConnection();
-        return new WrapperInputStream(connection, connection.getInputStream());
-    }
-
-
-    /**
-     * Open an input stream for the requested byte range.  Its the client's responsibility to close the stream.
-     *
-     * @param start start of range in bytes
-     * @param end   end of range ni bytes
-     * @return
-     * @throws IOException
-     */
-    @Deprecated
-    public InputStream openInputStreamForRange(long start, long end) throws IOException {
-
-        HttpURLConnection connection = openConnection();
-        String byteRange = "bytes=" + start + "-" + end;
-        connection.setRequestProperty("Range", byteRange);
-        return new WrapperInputStream(connection, connection.getInputStream());
-    }
-
-    private HttpURLConnection openConnection() throws IOException {
-        HttpURLConnection connection;
-        if (proxy == null) {
-            connection = (HttpURLConnection) url.openConnection();
-        } else {
-            connection = (HttpURLConnection) url.openConnection(proxy);
-        }
-        return connection;
-    }
-
-    public boolean exists() throws IOException {
-        HttpURLConnection con = null;
-        try {
-            con = openConnection();
-            con.setRequestMethod("HEAD");
-            return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
-        } catch (IOException e) {
-            // This is what we are testing for, so its not really an exception
-            return false;
-        } finally {
-            if (con != null) con.disconnect();
-        }
-    }
-
-    class WrapperInputStream extends FilterInputStream {
-
-        HttpURLConnection connection;
-
-        protected WrapperInputStream(HttpURLConnection connection, InputStream inputStream) {
-            super(inputStream);
-            this.connection = connection;
-        }
-
-        @Override
-        public void close() throws IOException {
-            super.close();
-            connection.disconnect();
-        }
-    }
-
-
-}
diff --git a/src/main/java/htsjdk/tribble/util/LittleEndianInputStream.java b/src/main/java/htsjdk/tribble/util/LittleEndianInputStream.java
deleted file mode 100644
index 350f47c..0000000
--- a/src/main/java/htsjdk/tribble/util/LittleEndianInputStream.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-* Adapted from example code in
-* Title: Hardcore Java
-* Title: Java I/O
-* Second Edition: May 2006
-* ISBN 10: 0-596-52750-0
-* ISBN 13: 9780596527501
-*
-* http://www.javafaq.nu/java-example-code-1078.html
-*
-*/
-package htsjdk.tribble.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-
-/**
- * Input stream with methods to convert byte arrays to numeric values using "little endian" order.
- * <p/>
- * Note: This class is not thread safe => instances should not be shared amongst threads
- */
-public class LittleEndianInputStream extends FilterInputStream {
-
-    byte[] buffer;
-
-    public LittleEndianInputStream(InputStream in) {
-        super(in);
-        buffer = new byte[8];
-
-    }
-
-    /**
-     *
-     * @return the next byte of this input stream, interpreted as an unsigned 8-bit number
-     * @throws IOException
-     */
-    public byte readByte() throws IOException {
-        int ch = in.read();
-        if (ch < 0) {
-            throw new EOFException();
-        }
-        return (byte) (ch);
-    }
-
-    public short readShort() throws IOException {
-        int byte1 = in.read();
-        int byte2 = in.read();
-        if (byte2 < 0) {
-            throw new EOFException();
-        }
-
-        return (short) (((byte2 << 24) >>> 16) + ((byte1 << 24) >>> 24));
-    }
-
-
-    public int readInt() throws IOException {
-        int byte1 = in.read();
-        int byte2 = in.read();
-        int byte3 = in.read();
-        int byte4 = in.read();
-        if (byte4 < 0) {
-            throw new EOFException();
-        }
-        return (byte4 << 24)
-                + ((byte3 << 24) >>> 8)
-                + ((byte2 << 24) >>> 16)
-                + ((byte1 << 24) >>> 24);
-
-    }
-
-    /**
-     *
-     */
-
-    public long readLong() throws IOException {
-        readFully(buffer);
-        long byte1 = (long) buffer[0];
-        long byte2 = (long) buffer[1];
-        long byte3 = (long) buffer[2];
-        long byte4 = (long) buffer[3];
-        long byte5 = (long) buffer[4];
-        long byte6 = (long) buffer[5];
-        long byte7 = (long) buffer[6];
-        long byte8 = (long) buffer[7];
-        return (byte8 << 56)
-                + ((byte7 << 56) >>> 8)
-                + ((byte6 << 56) >>> 16)
-                + ((byte5 << 56) >>> 24)
-                + ((byte4 << 56) >>> 32)
-                + ((byte3 << 56) >>> 40)
-                + ((byte2 << 56) >>> 48)
-                + ((byte1 << 56) >>> 56);
-    }
-
-    public final double readDouble() throws IOException {
-        return Double.longBitsToDouble(this.readLong());
-    }
-
-    public final float readFloat() throws IOException {
-        return Float.intBitsToFloat(this.readInt());
-    }
-
-    /**
-     * Read a null terminated byte array and return result as a string
-     *
-     * @return
-     * @throws IOException
-     */
-
-    public String readString() throws IOException {
-        ByteArrayOutputStream bis = new ByteArrayOutputStream(100);
-        byte b;
-        while ((b = (byte) in.read()) != 0) {
-            if(b < 0) {
-                throw new EOFException();
-            }
-            bis.write(b);
-        }
-        return new String(bis.toByteArray());
-    }
-
-
-    /**
-     * Keep reading until the input buffer is filled.
-     */
-    private void readFully(byte b[]) throws IOException {
-        int len = b.length;
-        if (len < 0)
-            throw new IndexOutOfBoundsException();
-        int n = 0;
-        while (n < len) {
-            int count = read(b, n, len - n);
-            if (count < 0)
-                throw new EOFException();
-            n += count;
-        }
-    }
-
-
-}
diff --git a/src/main/java/htsjdk/tribble/util/LittleEndianOutputStream.java b/src/main/java/htsjdk/tribble/util/LittleEndianOutputStream.java
deleted file mode 100644
index 9bec071..0000000
--- a/src/main/java/htsjdk/tribble/util/LittleEndianOutputStream.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-* Adapted from example code in
-* Title: Hardcore Java
-* Title: Java I/O
-* Second Edition: May 2006
-* ISBN 10: 0-596-52750-0
-* ISBN 13: 9780596527501
-*
-* http://www.javafaq.nu/java-example-code-1078.html
-* 
-*/
-
-package htsjdk.tribble.util;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-
-public final class LittleEndianOutputStream extends FilterOutputStream {
-
-    protected long written;
-
-    public LittleEndianOutputStream(OutputStream out) {
-        super(out);
-    }
-
-    public void write(int b) throws IOException {
-        out.write(b);
-        written++;
-    }
-
-    public void write(byte[] data, int offset, int length)
-            throws IOException {
-        out.write(data, offset, length);
-        written += length;
-    }
-
-    public void writeBoolean(boolean b) throws IOException {
-        if (b) this.write(1);
-        else this.write(0);
-    }
-
-    public void writeByte(int b) throws IOException {
-        out.write(b);
-        written++;
-    }
-
-    public void writeShort(int s) throws IOException {
-        out.write(s & 0xFF);
-        out.write((s >>> 8) & 0xFF);
-        written += 2;
-    }
-
-    public void writeChar(int c) throws IOException {
-        out.write(c & 0xFF);
-        out.write((c >>> 8) & 0xFF);
-        written += 2;
-    }
-
-    public void writeInt(int i) throws IOException {
-
-        out.write(i & 0xFF);
-        out.write((i >>> 8) & 0xFF);
-        out.write((i >>> 16) & 0xFF);
-        out.write((i >>> 24) & 0xFF);
-        written += 4;
-
-    }
-
-    public void writeLong(long l) throws IOException {
-
-        out.write((int) l & 0xFF);
-        out.write((int) (l >>> 8) & 0xFF);
-        out.write((int) (l >>> 16) & 0xFF);
-        out.write((int) (l >>> 24) & 0xFF);
-        out.write((int) (l >>> 32) & 0xFF);
-        out.write((int) (l >>> 40) & 0xFF);
-        out.write((int) (l >>> 48) & 0xFF);
-        out.write((int) (l >>> 56) & 0xFF);
-        written += 8;
-
-    }
-
-    public final void writeFloat(float f) throws IOException {
-        this.writeInt(Float.floatToIntBits(f));
-    }
-
-    public final void writeDouble(double d) throws IOException {
-        this.writeLong(Double.doubleToLongBits(d));
-    }
-
-    public void writeBytes(String s) throws IOException {
-        int length = s.length();
-        for (int i = 0; i < length; i++) {
-            out.write((byte) s.charAt(i));
-        }
-        written += length;
-    }
-
-    /**
-     * Srite a string as a null terminated byte array.
-     *
-     * @param s
-     * @throws IOException
-     */
-    public void writeString(String s) throws IOException {
-        writeBytes(s);
-        write((byte) 0);
-    }
-
-    public long getWrittenCount() {
-        return written;
-    }
-
-    // Method provide to enable "reseting" to a previous state.
-    public void setWrittenCount(long count) {
-        this.written = count;
-    }
-}// end LittleEndianOutputStream
diff --git a/src/main/java/htsjdk/tribble/util/MathUtils.java b/src/main/java/htsjdk/tribble/util/MathUtils.java
deleted file mode 100644
index 9b4d8ce..0000000
--- a/src/main/java/htsjdk/tribble/util/MathUtils.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.util;
-
-/**
- * a collection of functions and classes for various common calculations
- */
-public class MathUtils {
-
-    /**
-     * a class for calculating moving statistics - this class returns the
-     * mean, variance, and std dev after accumulating any number of records.
-     * taken from http://www.johndcook.com/standard_deviation.html
-     */
-    public static class RunningStat {
-        private double oldMean, newMean, oldStdDev, newStdDev;
-        private long recordCount = 0;
-
-        /**
-         * @param x the value to add to the running mean and variance
-         */
-        public void push(double x) {
-            recordCount++;
-            // See Knuth TAOCP vol 2, 3rd edition, page 232
-            if (recordCount == 1) {
-                oldMean = newMean = x;
-                oldStdDev = 0.0;
-            } else {
-                newMean = oldMean + (x - oldMean) / recordCount;
-                newStdDev = oldStdDev + (x - oldMean) * (x - newMean);
-
-                // set up for next iteration
-                oldMean = newMean;
-                oldStdDev = newStdDev;
-            }
-        }
-
-        public void clear() { recordCount = 0; }
-        public final long numDataValues() { return recordCount; }
-        public final double mean() { return (recordCount > 0) ? newMean : 0.0; }
-        public double variance() { return ((recordCount > 1) ? newStdDev / (recordCount - 1) : 0.0); }
-        public double standardDeviation() { return Math.sqrt(variance()); }
-    }
-
-}
diff --git a/src/main/java/htsjdk/tribble/util/ParsingUtils.java b/src/main/java/htsjdk/tribble/util/ParsingUtils.java
deleted file mode 100644
index 2a88ed7..0000000
--- a/src/main/java/htsjdk/tribble/util/ParsingUtils.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.util;
-
-import java.awt.Color;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-/**
- * @author jrobinso
- */
-public class ParsingUtils {
-
-    public static Map<Object, Color> colorCache = new WeakHashMap<Object, Color>(100);
-
-    // HTML 4.1 color table,  + orange and magenta
-    static Map<String, String> colorSymbols = new HashMap();
-
-    private static final Class defaultUrlHelperClass = RemoteURLHelper.class;
-    public static Class urlHelperClass = defaultUrlHelperClass;
-
-    static {
-        colorSymbols.put("white", "FFFFFF");
-        colorSymbols.put("silver", "C0C0C0");
-        colorSymbols.put("gray", "808080");
-        colorSymbols.put("black", "000000");
-        colorSymbols.put("red", "FF0000");
-        colorSymbols.put("maroon", "800000");
-        colorSymbols.put("yellow", "FFFF00");
-        colorSymbols.put("olive", "808000");
-        colorSymbols.put("lime", "00FF00");
-        colorSymbols.put("green", "008000");
-        colorSymbols.put("aqua", "00FFFF");
-        colorSymbols.put("teal", "008080");
-        colorSymbols.put("blue", "0000FF");
-        colorSymbols.put("navy", "000080");
-        colorSymbols.put("fuchsia", "FF00FF");
-        colorSymbols.put("purple", "800080");
-        colorSymbols.put("orange", "FFA500");
-        colorSymbols.put("magenta", "FF00FF");
-    }
-
-
-    public static InputStream openInputStream(String path)
-            throws IOException {
-
-        InputStream inputStream;
-
-        if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("ftp:")) {
-            inputStream = getURLHelper(new URL(path)).openInputStream();
-        } else {
-            File file = new File(path);
-            inputStream = new FileInputStream(file);
-        }
-
-        return inputStream;
-    }
-
-    //public static String join(String separator, Collection<String> strings) {
-    //    return join( separator, strings.toArray(new String[0]) );
-    //}
-
-    public static <T> String join(String separator, Collection<T> objects) {
-        if (objects.isEmpty()) {
-            return "";
-        }
-        Iterator<T> iter = objects.iterator();
-        final StringBuilder ret = new StringBuilder(iter.next().toString());
-        while (iter.hasNext()) {
-            ret.append(separator);
-            ret.append(iter.next().toString());
-        }
-
-        return ret.toString();
-    }
-
-    /**
-     * a small utility function for sorting a list
-     *
-     * @param list
-     * @param <T>
-     * @return
-     */
-    public static <T extends Comparable> List<T> sortList(Collection<T> list) {
-        ArrayList<T> ret = new ArrayList<T>();
-        ret.addAll(list);
-        Collections.sort(ret);
-        return ret;
-    }
-
-    public static <T extends Comparable<T>, V> String sortedString(Map<T, V> c) {
-        List<T> t = new ArrayList<T>(c.keySet());
-        Collections.sort(t);
-
-        List<String> pairs = new ArrayList<String>();
-        for (T k : t) {
-            pairs.add(k + "=" + c.get(k));
-        }
-
-        return "{" + ParsingUtils.join(", ", pairs.toArray(new String[pairs.size()])) + "}";
-    }
-
-    /**
-     * join an array of strings given a seperator
-     *
-     * @param separator the string to insert between each array element
-     * @param strings   the array of strings
-     * @return a string, which is the joining of all array values with the separator
-     */
-    public static String join(String separator, String[] strings) {
-        return join(separator, strings, 0, strings.length);
-    }
-
-    /**
-     * join a set of strings, using the separator provided, from index start to index stop
-     *
-     * @param separator the separator to use
-     * @param strings   the list of strings
-     * @param start     the start position (index in the list)0
-     * @param end       the end position (index in the list)
-     * @return a joined string, or "" if end - start == 0
-     */
-    public static String join(String separator, String[] strings, int start, int end) {
-        if ((end - start) == 0) {
-            return "";
-        }
-        StringBuilder ret = new StringBuilder(strings[start]);
-        for (int i = start + 1; i < end; ++i) {
-            ret.append(separator);
-            ret.append(strings[i]);
-        }
-        return ret.toString();
-    }
-
-
-    /**
-     * Split the string into tokens separated by the given delimiter. This looks
-     * suspiciously like what String.split should do. It is here because
-     * String.split has particularly poor performance for this use case in some
-     * versions of the Java SE API because of use of java.util.regex APIs
-     * (see bug report at http://bugs.java.com/view_bug.do?bug_id=6840246 for
-     * information).
-     *
-     * @param input the string to split
-     * @param delim the character that delimits tokens
-     * @return a list of the tokens
-     */
-    public static List<String> split(String input, char delim) {
-        if (input.isEmpty()) return Arrays.asList("");
-        final ArrayList<String> output = new ArrayList<String>(1+input.length()/2);
-        int from = -1, to;
-        for (to = input.indexOf(delim);
-             to >= 0;
-             from = to, to = input.indexOf(delim, from+1)) {
-            output.add(input.substring(from+1, to));
-        }
-        output.add(input.substring(from+1));
-        return output;
-    }
-
-
-    /**
-     * Split the string into tokesn separated by the given delimiter.  Profiling has
-     * revealed that the standard string.split() method typically takes > 1/2
-     * the total time when used for parsing ascii files.
-     *
-     * @param aString the string to split
-     * @param tokens  an array to hold the parsed tokens
-     * @param delim   character that delimits tokens
-     * @return the number of tokens parsed
-     */
-    public static int split(String aString, String[] tokens, char delim) {
-        return split(aString, tokens, delim, false);
-    }
-
-    /**
-     * Split the string into tokens separated by the given delimiter.  Profiling has
-     * revealed that the standard string.split() method typically takes > 1/2
-     * the total time when used for parsing ascii files.
-     *
-     * @param aString                the string to split
-     * @param tokens                 an array to hold the parsed tokens
-     * @param delim                  character that delimits tokens
-     * @param condenseTrailingTokens if true and there are more tokens than will fit in the tokens array,
-     *                               condense all trailing tokens into the last token
-     * @return the number of tokens parsed
-     */
-    public static int split(String aString, String[] tokens, char delim, boolean condenseTrailingTokens) {
-
-        int maxTokens = tokens.length;
-        int nTokens = 0;
-        int start = 0;
-        int end = aString.indexOf(delim);
-
-        if (end == 0) {
-            if (aString.length() > 1) {
-                start = 1;
-                end = aString.indexOf(delim, start);
-            } else {
-                return 0;
-            }
-        }
-
-        if (end < 0) {
-            tokens[nTokens++] = aString.substring(start);
-            return nTokens;
-        }
-
-        while ((end > 0) && (nTokens < maxTokens)) {
-            tokens[nTokens++] = aString.substring(start, end);
-            start = end + 1;
-            end = aString.indexOf(delim, start);
-        }
-
-        // condense if appropriate
-        if (condenseTrailingTokens && nTokens == maxTokens) {
-            tokens[nTokens - 1] = tokens[nTokens - 1] + delim + aString.substring(start);
-        }
-        // Add the trailing string
-        else if (nTokens < maxTokens) {
-            String trailingString = aString.substring(start);
-            tokens[nTokens++] = trailingString;
-        }
-
-        return nTokens;
-    }
-
-
-    // trim a string for the given character (i.e. not just whitespace)
-
-    public static String trim(String str, char ch) {
-        char[] array = str.toCharArray();
-        int start = 0;
-        while (start < array.length && array[start] == ch)
-            start++;
-
-        int end = array.length - 1;
-        while (end > start && array[end] == ch)
-            end--;
-
-        return str.substring(start, end + 1);
-    }
-
-
-    /**
-     * Split the string into tokens separated by tab or space(s).  This method
-     * was added so support wig and bed files, which apparently accept space delimiters.
-     * <p/>
-     * Note:  TODO REGEX expressions are not used for speed.  This should be re-evaluated with JDK 1.5 or later
-     *
-     * @param aString the string to split
-     * @param tokens  an array to hold the parsed tokens
-     * @return the number of tokens parsed
-     */
-    public static int splitWhitespace(String aString, String[] tokens) {
-
-        int maxTokens = tokens.length;
-        int nTokens = 0;
-        int start = 0;
-        int tabEnd = aString.indexOf('\t');
-        int spaceEnd = aString.indexOf(' ');
-        int end = tabEnd < 0 ? spaceEnd : spaceEnd < 0 ? tabEnd : Math.min(spaceEnd, tabEnd);
-        while ((end > 0) && (nTokens < maxTokens)) {
-            //tokens[nTokens++] = new String(aString.toCharArray(), start, end-start); //  aString.substring(start, end);
-            tokens[nTokens++] = aString.substring(start, end);
-
-            start = end + 1;
-            // Gobble up any whitespace before next token -- don't gobble tabs, consecutive tabs => empty cell
-            while (start < aString.length() && aString.charAt(start) == ' ') {
-                start++;
-            }
-
-            tabEnd = aString.indexOf('\t', start);
-            spaceEnd = aString.indexOf(' ', start);
-            end = tabEnd < 0 ? spaceEnd : spaceEnd < 0 ? tabEnd : Math.min(spaceEnd, tabEnd);
-
-        }
-
-        // Add the trailing string
-        if (nTokens < maxTokens) {
-            String trailingString = aString.substring(start);
-            tokens[nTokens++] = trailingString;
-        }
-        return nTokens;
-    }
-
-    public static <T extends Comparable<? super T>> boolean isSorted(Iterable<T> iterable) {
-        Iterator<T> iter = iterable.iterator();
-        if (!iter.hasNext())
-            return true;
-
-        T t = iter.next();
-        while (iter.hasNext()) {
-            T t2 = iter.next();
-            if (t.compareTo(t2) > 0)
-                return false;
-
-            t = t2;
-        }
-
-        return true;
-    }
-
-    /**
-     * Convert an rgb string, hex, or symbol to a color.
-     *
-     * @param string
-     * @return
-     */
-    public static Color parseColor(String string) {
-        try {
-            Color c = colorCache.get(string);
-            if (c == null) {
-                if (string.contains(",")) {
-                    String[] rgb = string.split(",");
-                    int red = Integer.parseInt(rgb[0]);
-                    int green = Integer.parseInt(rgb[1]);
-                    int blue = Integer.parseInt(rgb[2]);
-                    c = new Color(red, green, blue);
-                } else if (string.startsWith("#")) {
-                    c = hexToColor(string.substring(1));
-                } else {
-                    String hexString = colorSymbols.get(string.toLowerCase());
-                    if (hexString != null) {
-                        c = hexToColor(hexString);
-                    }
-                }
-
-                if (c == null) {
-                    c = Color.black;
-                }
-                colorCache.put(string, c);
-            }
-            return c;
-
-        } catch (NumberFormatException numberFormatException) {
-            //TODO Throw this exception?
-            return Color.black;
-        }
-    }
-
-
-    private static Color hexToColor(String string) {
-        if (string.length() == 6) {
-            int red = Integer.parseInt(string.substring(0, 2), 16);
-            int green = Integer.parseInt(string.substring(2, 4), 16);
-            int blue = Integer.parseInt(string.substring(4, 6), 16);
-            return new Color(red, green, blue);
-        } else {
-            return null;
-        }
-
-    }
-
-    public static boolean resourceExists(String resource) throws IOException{
-
-        boolean remoteFile = resource.startsWith("http://") || resource.startsWith("https://") || resource.startsWith("ftp://");
-        if (remoteFile) {
-            URL url = null;
-            try {
-                url = new URL(resource);
-            } catch (MalformedURLException e) {
-                // Malformed URLs by definition don't exist
-                return false;
-            }
-            URLHelper helper = getURLHelper(url);
-            return helper.exists();
-        } else {
-            return (new File(resource)).exists();
-        }
-    }
-
-    /**
-     * Return the registered URLHelper, constructed with the provided URL
-     * @see #registerHelperClass(Class)
-     * @param url
-     * @return
-     */
-    public static URLHelper getURLHelper(URL url) {
-        try {
-            return getURLHelper(urlHelperClass, url);
-        } catch (Exception e) {
-            return getURLHelper(defaultUrlHelperClass, url);
-        }
-    }
-
-    private static URLHelper getURLHelper(Class helperClass, URL url) {
-        try {
-            Constructor constr = helperClass.getConstructor(URL.class);
-            return (URLHelper) constr.newInstance(url);
-        } catch (Exception e) {
-            String errMsg = "Error instantiating url helper for class: " + helperClass;
-            throw new IllegalStateException(errMsg, e);
-        }
-    }
-
-    /**
-     * Register a {@code URLHelper} class to be used for URL operations. The helper
-     * may be used for both FTP and HTTP operations, so if any FTP URLs are used
-     * the {@code URLHelper} must support it.
-     *
-     * The default helper class is {@link RemoteURLHelper}, which delegates to FTP/HTTP
-     * helpers as appropriate.
-     *
-     * @see URLHelper
-     * @param helperClass Class which implements {@link URLHelper}, and have a constructor
-     *                    which takes a URL as it's only argument.
-     */
-    public static void registerHelperClass(Class helperClass) {
-        if (!URLHelper.class.isAssignableFrom(helperClass)) {
-            throw new IllegalArgumentException("helperClass must implement URLHelper");
-            //TODO check that it has 1 arg constructor of proper type
-        }
-        urlHelperClass = helperClass;
-    }
-
-    /**
-     * Add the {@code indexExtension} to the {@code filepath}, preserving
-     * query string elements if present. Intended for use where {@code filepath}
-     * is a URL. Will behave correctly on regular file paths (just add the extension
-     * to the end)
-     * @param filepath
-     * @param indexExtension
-     * @return
-     */
-    public static String appendToPath(String filepath, String indexExtension) {
-        String tabxIndex = null;
-        URL url = null;
-        try{
-            url = new URL(filepath);
-        }catch (MalformedURLException e){
-            //pass
-        }
-        if (url != null) {
-            String path = url.getPath();
-            String indexPath = path + indexExtension;
-            tabxIndex = filepath.replace(path, indexPath);
-        } else {
-            tabxIndex = filepath + indexExtension;
-        }
-        return tabxIndex;
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/util/RemoteURLHelper.java b/src/main/java/htsjdk/tribble/util/RemoteURLHelper.java
deleted file mode 100644
index 2493edb..0000000
--- a/src/main/java/htsjdk/tribble/util/RemoteURLHelper.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package htsjdk.tribble.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * Implementation of URLHelper designed for remote resources.
- * Determines appropriate helper based on protocol (ftp/http),
- * and then delegates.
- *
- * @author jacob
- * @date 2013-Apr-11
- */
-public class RemoteURLHelper implements URLHelper {
-
-    private URLHelper wrappedHelper;
-
-    public RemoteURLHelper(URL url) {
-        String protocol = url.getProtocol().toLowerCase();
-        if (protocol.startsWith("http")) {
-            this.wrappedHelper = new HTTPHelper(url);
-        } else if (protocol.startsWith("ftp")) {
-            this.wrappedHelper = new FTPHelper(url);
-        } else {
-            throw new IllegalArgumentException("Unable to create helper for url with protocol " + protocol);
-        }
-    }
-
-    @Override
-    public URL getUrl() {
-        return this.wrappedHelper.getUrl();
-    }
-
-    @Override
-    public long getContentLength() throws IOException {
-        return this.wrappedHelper.getContentLength();
-    }
-
-    @Override
-    public InputStream openInputStream() throws IOException {
-        return this.wrappedHelper.openInputStream();
-    }
-
-    @Override
-    @Deprecated
-    public InputStream openInputStreamForRange(long start, long end) throws IOException {
-        return this.wrappedHelper.openInputStreamForRange(start, end);
-    }
-
-    @Override
-    public boolean exists() throws IOException {
-        return this.wrappedHelper.exists();
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/util/TabixUtils.java b/src/main/java/htsjdk/tribble/util/TabixUtils.java
deleted file mode 100644
index aa365cd..0000000
--- a/src/main/java/htsjdk/tribble/util/TabixUtils.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.util;
-
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.readers.TabixReader;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * classes that have anything to do with tabix
- */
-public class TabixUtils {
-
-    public static final String STANDARD_INDEX_EXTENSION = ".tbi";
-
-    public static class TPair64 implements Comparable<TPair64> {
-        public long u, v;
-
-        public TPair64(final long _u, final long _v) {
-            u = _u;
-            v = _v;
-        }
-
-        public TPair64(final TPair64 p) {
-            u = p.u;
-            v = p.v;
-        }
-
-        public int compareTo(final TPair64 p) {
-            return u == p.u ? 0 : ((u < p.u) ^ (u < 0) ^ (p.u < 0)) ? -1 : 1; // unsigned 64-bit comparison
-        }
-    }
-
-    public static class TIndex {
-        public HashMap<Integer, TPair64[]> b; // binning index
-        public long[] l; // linear index
-    }
-
-
-    public static class TIntv {
-        public int tid, beg, end;
-    }
-
-
-    public static boolean less64(final long u, final long v) { // unsigned 64-bit comparison
-        return (u < v) ^ (u < 0) ^ (v < 0);
-    }
-
-    /**
-     * Generates the SAMSequenceDictionary from the given tabix index file
-     *
-     * @param tabixIndex the tabix index file
-     * @return non-null sequence dictionary
-     */
-    public static SAMSequenceDictionary getSequenceDictionary(final File tabixIndex) {
-        if (tabixIndex == null) throw new IllegalArgumentException();
-
-        try {
-            final BlockCompressedInputStream is = new BlockCompressedInputStream(tabixIndex);
-
-            // read preliminary bytes
-            byte[] buf = new byte[32];
-            is.read(buf, 0, 32);
-
-            // read sequence dictionary
-            int i, j, len = TabixReader.readInt(is);
-            buf = new byte[len];
-            is.read(buf);
-
-            final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>();
-            for (i = j = 0; i < buf.length; ++i) {
-                if (buf[i] == 0) {
-                    byte[] b = new byte[i - j];
-                    System.arraycopy(buf, j, b, 0, b.length);
-                    sequences.add(new SAMSequenceRecord(new String(b), b.length));
-                    j = i + 1;
-                }
-            }
-            is.close();
-
-            return new SAMSequenceDictionary(sequences);
-        } catch (Exception e) {
-            throw new TribbleException("Unable to read tabix index: " + e.getMessage());
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/tribble/util/URLHelper.java b/src/main/java/htsjdk/tribble/util/URLHelper.java
deleted file mode 100644
index 9a4fdcb..0000000
--- a/src/main/java/htsjdk/tribble/util/URLHelper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard.  All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package htsjdk.tribble.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * Interface defining a helper class for dealing with URL resources.  Purpose of this class is to provide the
- * flexibility to use either URLConnection or Apache HTTPClient. Also want to delegate to either HTTP or FTP
- *
- * @see HTTPHelper
- * @see FTPHelper
- * @author jrobinso
- * @date Jun 28, 2011
- */
-public interface URLHelper {
-
-    URL getUrl();
-
-    long getContentLength() throws IOException;
-
-    InputStream openInputStream() throws IOException;
-
-    /**
-     * May throw an OperationUnsupportedException
-     * @deprecated Will be removed in a future release, as is somewhat fragile
-     * and not used.
-     * @param start
-     * @param end
-     * @return
-     * @throws IOException
-     */
-    @Deprecated
-    InputStream openInputStreamForRange(long start, long end) throws IOException;
-
-    public boolean exists() throws IOException;
-
-}
diff --git a/src/main/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculation.java b/src/main/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculation.java
deleted file mode 100755
index 8cee877..0000000
--- a/src/main/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculation.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.util.popgen;
-
-/**
-* The Broad Institute
-* SOFTWARE COPYRIGHT NOTICE AGREEMENT
-* This software and its documentation are copyright 2004 by the
-* Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
-*
-* This software is supplied without any warranty or guaranteed support whatsoever. Neither
-* the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
-*/
-
-/**
-* This class calculates a HardyWeinberg p-value given three values representing
-* the observed frequences of homozygous and heterozygous genotypes in the
-* test population.
-*
-* @author Bob Handsaker
-*/
-public final class HardyWeinbergCalculation {
-   /**
-    * This class is not instantiable.
-    */
-   private HardyWeinbergCalculation() {
-   }
-
-   /**
-    * Calculates exact two-sided hardy-weinberg p-value. Parameters
-    * are number of genotypes, number of rare alleles observed and
-    * number of heterozygotes observed.
-    *
-    * (c) 2003 Jan Wigginton, Goncalo Abecasis (goncalo at umich.edu)
-    */
-   public static double hwCalculate(int obsAA, int obsAB, int obsBB) {
-       int diplotypes = obsAA + obsAB + obsBB;
-       int rare = (obsAA * 2) + obsAB;
-       int hets = obsAB;
-
-       //make sure "rare" allele is really the rare allele
-       if (rare > diplotypes) {
-           rare = (2 * diplotypes) - rare;
-       }
-
-       //make sure numbers aren't screwy
-       if (hets > rare) {
-           return -1;
-       }
-
-       double[] tailProbs = new double[rare + 1];
-
-       for (int z = 0; z < tailProbs.length; z++) {
-           tailProbs[z] = 0;
-       }
-
-       //start at midpoint
-       //cast to long and back to int to avoid overflow at large numbers
-       int mid = (int) (((long) rare * ((2 * diplotypes) - rare)) / (2 * diplotypes));
-
-       //check to ensure that midpoint and rare alleles have same parity
-       if (((rare & 1) ^ (mid & 1)) != 0) {
-           mid++;
-       }
-
-       int het = mid;
-       int hom_r = (rare - mid) / 2;
-       int hom_c = diplotypes - het - hom_r;
-
-       //Calculate probability for each possible observed heterozygote
-       //count up to a scaling constant, to avoid underflow and overflow
-       tailProbs[mid] = 1.0;
-
-       double sum = tailProbs[mid];
-
-       for (het = mid; het > 1; het -= 2) {
-           tailProbs[het - 2] = (tailProbs[het] * het * (het - 1.0)) / (4.0 * (hom_r + 1.0) * (hom_c +
-               1.0));
-           sum += tailProbs[het - 2];
-
-           //2 fewer hets for next iteration -> add one rare and one common homozygote
-           hom_r++;
-           hom_c++;
-       }
-
-       het = mid;
-       hom_r = (rare - mid) / 2;
-       hom_c = diplotypes - het - hom_r;
-
-       for (het = mid; het <= (rare - 2); het += 2) {
-           tailProbs[het + 2] = (tailProbs[het] * 4.0 * hom_r * hom_c) / ((het + 2.0) * (het +
-               1.0));
-           sum += tailProbs[het + 2];
-
-           //2 more hets for next iteration -> subtract one rare and one common homozygote
-           hom_r--;
-           hom_c--;
-       }
-
-       for (int z = 0; z < tailProbs.length; z++) {
-           tailProbs[z] /= sum;
-       }
-
-       double top = tailProbs[hets];
-
-       for (int i = hets + 1; i <= rare; i++) {
-           top += tailProbs[i];
-       }
-
-       double otherSide = tailProbs[hets];
-
-       for (int i = hets - 1; i >= 0; i--) {
-           otherSide += tailProbs[i];
-       }
-
-       if ((top > 0.5) && (otherSide > 0.5)) {
-           return 1.0;
-       }
-
-       if (top < otherSide) {
-           return top * 2;
-       }
-
-       return otherSide * 2;
-   }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2Codec.java b/src/main/java/htsjdk/variant/bcf2/BCF2Codec.java
deleted file mode 100644
index a945764..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2Codec.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.tribble.BinaryFeatureCodec;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.FeatureCodecHeader;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.readers.*;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.LazyGenotypesContext;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import htsjdk.variant.variantcontext.VariantContextUtils;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFCompoundHeaderLine;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFContigHeaderLine;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Decode BCF2 files
- */
-public final class BCF2Codec extends BinaryFeatureCodec<VariantContext> {
-    private final static int ALLOWED_MAJOR_VERSION = 2;
-    private final static int MIN_MINOR_VERSION = 1;
-
-    private BCFVersion bcfVersion = null;
-
-    private VCFHeader header = null;
-
-    /**
-     * Maps offsets (encoded in BCF) into contig names (from header) for the CHROM field
-     */
-    private final ArrayList<String> contigNames = new ArrayList<String>();
-
-    /**
-     * Maps header string names (encoded in VCF) into strings found in the BCF header
-     *
-     * Initialized when processing the header
-     */
-    private ArrayList<String> dictionary;
-
-    /**
-     * Our decoder that reads low-level objects from the BCF2 records
-     */
-    private final BCF2Decoder decoder = new BCF2Decoder();
-
-    /**
-     * Provides some sanity checking on the header
-     */
-    private final static int MAX_HEADER_SIZE = 0x08000000;
-
-    /**
-     * Genotype field decoders that are initialized when the header is read
-     */
-    private BCF2GenotypeFieldDecoders gtFieldDecoders = null;
-
-    /**
-     * A cached array of GenotypeBuilders for efficient genotype decoding.
-     *
-     * Caching it allows us to avoid recreating this intermediate data
-     * structure each time we decode genotypes
-     */
-    private GenotypeBuilder[] builders = null;
-
-    // for error handling
-    private int recordNo = 0;
-    private int pos = 0;
-
-
-    // ----------------------------------------------------------------------
-    //
-    // Feature codec interface functions
-    //
-    // ----------------------------------------------------------------------
-
-    @Override
-    public Feature decodeLoc( final PositionalBufferedStream inputStream ) {
-        return decode(inputStream);
-    }
-
-    @Override
-    public VariantContext decode( final PositionalBufferedStream inputStream ) {
-        try {
-            recordNo++;
-            final VariantContextBuilder builder = new VariantContextBuilder();
-
-            final int sitesBlockSize = decoder.readBlockSize(inputStream);
-            final int genotypeBlockSize = decoder.readBlockSize(inputStream);
-
-            decoder.readNextBlock(sitesBlockSize, inputStream);
-            decodeSiteLoc(builder);
-            final SitesInfoForDecoding info = decodeSitesExtendedInfo(builder);
-
-            decoder.readNextBlock(genotypeBlockSize, inputStream);
-            createLazyGenotypesDecoder(info, builder);
-            return builder.fullyDecoded(true).make();
-        } catch ( IOException e ) {
-            throw new TribbleException("Failed to read BCF file", e);
-        }
-    }
-
-    @Override
-    public Class<VariantContext> getFeatureType() {
-        return VariantContext.class;
-    }
-
-    @Override
-    public FeatureCodecHeader readHeader( final PositionalBufferedStream inputStream ) {
-        try {
-            // note that this reads the magic as well, and so does double duty
-            bcfVersion = BCFVersion.readBCFVersion(inputStream);
-            if ( bcfVersion == null )
-                error("Input stream does not contain a BCF encoded file; BCF magic header info not found");
-
-            if ( bcfVersion.getMajorVersion() != ALLOWED_MAJOR_VERSION )
-                error("BCF2Codec can only process BCF2 files, this file has major version " + bcfVersion.getMajorVersion());
-            if ( bcfVersion.getMinorVersion() < MIN_MINOR_VERSION )
-                error("BCF2Codec can only process BCF2 files with minor version >= " + MIN_MINOR_VERSION + " but this file has minor version " + bcfVersion.getMinorVersion());
-
-            if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                System.err.println("Parsing data stream with BCF version " + bcfVersion);
-            }
-
-            final int headerSizeInBytes = BCF2Type.INT32.read(inputStream);
-
-            if ( headerSizeInBytes <= 0 || headerSizeInBytes > MAX_HEADER_SIZE) // no bigger than 8 MB
-                error("BCF2 header has invalid length: " + headerSizeInBytes + " must be >= 0 and < "+ MAX_HEADER_SIZE);
-
-            final byte[] headerBytes = new byte[headerSizeInBytes];
-            if ( inputStream.read(headerBytes) != headerSizeInBytes )
-                error("Couldn't read all of the bytes specified in the header length = " + headerSizeInBytes);
-
-            final PositionalBufferedStream bps = new PositionalBufferedStream(new ByteArrayInputStream(headerBytes));
-            final LineIterator lineIterator = new LineIteratorImpl(new SynchronousLineReader(bps));
-            final VCFCodec headerParser = new VCFCodec();
-            this.header = (VCFHeader) headerParser.readActualHeader(lineIterator);
-            bps.close();
-        } catch ( IOException e ) {
-            throw new TribbleException("I/O error while reading BCF2 header");
-        }
-
-        // create the config offsets
-        if ( ! header.getContigLines().isEmpty() ) {
-            contigNames.clear();
-            for ( final VCFContigHeaderLine contig : header.getContigLines()) {
-                if ( contig.getID() == null || contig.getID().equals("") )
-                    error("found a contig with an invalid ID " + contig);
-                contigNames.add(contig.getID());
-            }
-        } else {
-            error("Didn't find any contig lines in BCF2 file header");
-        }
-
-        // create the string dictionary
-        dictionary = parseDictionary(header);
-
-        // prepare the genotype field decoders
-        gtFieldDecoders = new BCF2GenotypeFieldDecoders(header);
-
-        // create and initialize the genotype builder array
-        final int nSamples = header.getNGenotypeSamples();
-        builders = new GenotypeBuilder[nSamples];
-        for ( int i = 0; i < nSamples; i++ ) {
-            builders[i] = new GenotypeBuilder(header.getGenotypeSamples().get(i));
-        }
-
-        // position right before next line (would be right before first real record byte at end of header)
-        return new FeatureCodecHeader(header, inputStream.getPosition());
-    }
-
-    @Override
-    public boolean canDecode( final String path ) {
-        FileInputStream fis = null;
-        try {
-            fis = new FileInputStream(path);
-            final BCFVersion version = BCFVersion.readBCFVersion(fis);
-            return version != null && version.getMajorVersion() == ALLOWED_MAJOR_VERSION;
-        } catch ( FileNotFoundException e ) {
-            return false;
-        } catch ( IOException e ) {
-            return false;
-        } finally {
-            try {
-                if ( fis != null ) fis.close();
-            } catch ( IOException e ) {
-                // do nothing
-            }
-        }
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // implicit block
-    //
-    // The first four records of BCF are inline untype encoded data of:
-    //
-    // 4 byte integer chrom offset
-    // 4 byte integer start
-    // 4 byte integer ref length
-    // 4 byte float qual
-    //
-    // --------------------------------------------------------------------------------
-
-    /**
-     * Decode the sites level data from this classes decoder
-     *
-     * @param builder
-     * @return
-     */
-    private final void decodeSiteLoc(final VariantContextBuilder builder) throws IOException {
-        final int contigOffset = decoder.decodeInt(BCF2Type.INT32);
-        final String contig = lookupContigName(contigOffset);
-        builder.chr(contig);
-
-        this.pos = decoder.decodeInt(BCF2Type.INT32) + 1; // GATK is one based, BCF2 is zero-based
-        final int refLength = decoder.decodeInt(BCF2Type.INT32);
-        builder.start((long)pos);
-        builder.stop((long)(pos + refLength - 1)); // minus one because GATK has closed intervals but BCF2 is open
-    }
-
-    /**
-     * Decode the sites level data from this classes decoder
-     *
-     * @param builder
-     * @return
-     */
-    private final SitesInfoForDecoding decodeSitesExtendedInfo(final VariantContextBuilder builder) throws IOException {
-        final Object qual = decoder.decodeSingleValue(BCF2Type.FLOAT);
-        if ( qual != null ) {
-            builder.log10PError(((Double)qual) / -10.0);
-        }
-
-        final int nAlleleInfo = decoder.decodeInt(BCF2Type.INT32);
-        final int nFormatSamples = decoder.decodeInt(BCF2Type.INT32);
-        final int nAlleles = nAlleleInfo >> 16;
-        final int nInfo = nAlleleInfo & 0x0000FFFF;
-        final int nFormatFields = nFormatSamples >> 24;
-        final int nSamples = nFormatSamples & 0x00FFFFF;
-
-        if ( header.getNGenotypeSamples() != nSamples )
-            error("Reading BCF2 files with different numbers of samples per record " +
-                    "is not currently supported.  Saw " + header.getNGenotypeSamples() +
-                    " samples in header but have a record with " + nSamples + " samples");
-
-        decodeID(builder);
-        final List<Allele> alleles = decodeAlleles(builder, pos, nAlleles);
-        decodeFilter(builder);
-        decodeInfo(builder, nInfo);
-
-        final SitesInfoForDecoding info = new SitesInfoForDecoding(nFormatFields, nSamples, alleles);
-        if ( ! info.isValid() )
-            error("Sites info is malformed: " + info);
-        return info;
-    }
-
-    protected final static class SitesInfoForDecoding {
-        final int nFormatFields;
-        final int nSamples;
-        final List<Allele> alleles;
-
-        private SitesInfoForDecoding(final int nFormatFields, final int nSamples, final List<Allele> alleles) {
-            this.nFormatFields = nFormatFields;
-            this.nSamples = nSamples;
-            this.alleles = alleles;
-        }
-
-        public boolean isValid() {
-            return nFormatFields >= 0 &&
-                    nSamples >= 0 &&
-                    alleles != null && ! alleles.isEmpty() && alleles.get(0).isReference();
-        }
-
-        @Override
-        public String toString() {
-            return String.format("nFormatFields = %d, nSamples = %d, alleles = %s", nFormatFields, nSamples, alleles);
-        }
-    }
-
-    /**
-     * Decode the id field in this BCF2 file and store it in the builder
-     * @param builder
-     */
-    private void decodeID( final VariantContextBuilder builder ) throws IOException {
-        final String id = (String)decoder.decodeTypedValue();
-
-        if ( id == null )
-            builder.noID();
-        else
-            builder.id(id);
-    }
-
-    /**
-     * Decode the alleles from this BCF2 file and put the results in builder
-     * @param builder
-     * @param pos
-     * @param nAlleles
-     * @return the alleles
-     */
-    private List<Allele> decodeAlleles( final VariantContextBuilder builder, final int pos, final int nAlleles ) throws IOException {
-        // TODO -- probably need inline decoder for efficiency here (no sense in going bytes -> string -> vector -> bytes
-        List<Allele> alleles = new ArrayList<Allele>(nAlleles);
-        String ref = null;
-
-        for ( int i = 0; i < nAlleles; i++ ) {
-            final String alleleBases = (String)decoder.decodeTypedValue();
-
-            final boolean isRef = i == 0;
-            final Allele allele = Allele.create(alleleBases, isRef);
-            if ( isRef ) ref = alleleBases;
-
-            alleles.add(allele);
-        }
-        assert ref != null;
-
-        builder.alleles(alleles);
-
-        assert !ref.isEmpty();
-
-        return alleles;
-    }
-
-    /**
-     * Decode the filter field of this BCF2 file and store the result in the builder
-     * @param builder
-     */
-    private void decodeFilter( final VariantContextBuilder builder ) throws IOException {
-        final Object value = decoder.decodeTypedValue();
-
-        if ( value == null )
-            builder.unfiltered();
-        else {
-            if ( value instanceof Integer ) {
-                // fast path for single integer result
-                final String filterString = getDictionaryString((Integer)value);
-                if ( VCFConstants.PASSES_FILTERS_v4.equals(filterString))
-                    builder.passFilters();
-                else
-                    builder.filter(filterString);
-            } else {
-                for ( final int offset : (List<Integer>)value )
-                    builder.filter(getDictionaryString(offset));
-            }
-        }
-    }
-
-    /**
-     * Loop over the info field key / value pairs in this BCF2 file and decode them into the builder
-     *
-     * @param builder
-     * @param numInfoFields
-     */
-    private void decodeInfo( final VariantContextBuilder builder, final int numInfoFields ) throws IOException {
-        if ( numInfoFields == 0 )
-            // fast path, don't bother doing any work if there are no fields
-            return;
-
-        final Map<String, Object> infoFieldEntries = new HashMap<String, Object>(numInfoFields);
-        for ( int i = 0; i < numInfoFields; i++ ) {
-            final String key = getDictionaryString();
-            Object value = decoder.decodeTypedValue();
-            final VCFCompoundHeaderLine metaData = VariantContextUtils.getMetaDataForField(header, key);
-            if ( metaData.getType() == VCFHeaderLineType.Flag ) value = true; // special case for flags
-            infoFieldEntries.put(key, value);
-        }
-
-        builder.attributes(infoFieldEntries);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Decoding Genotypes
-    //
-    // --------------------------------------------------------------------------------
-
-    /**
-     * Create the lazy loader for the genotypes data, and store it in the builder
-     * so that the VC will be able to decode on demand the genotypes data
-     *
-     * @param siteInfo
-     * @param builder
-     */
-    private void createLazyGenotypesDecoder( final SitesInfoForDecoding siteInfo,
-                                             final VariantContextBuilder builder ) {
-        if (siteInfo.nSamples > 0) {
-            final LazyGenotypesContext.LazyParser lazyParser =
-                    new BCF2LazyGenotypesDecoder(this, siteInfo.alleles, siteInfo.nSamples, siteInfo.nFormatFields, builders);
-
-            final LazyData lazyData = new LazyData(header, siteInfo.nFormatFields, decoder.getRecordBytes());
-            final LazyGenotypesContext lazy = new LazyGenotypesContext(lazyParser, lazyData, header.getNGenotypeSamples());
-
-            // did we resort the sample names?  If so, we need to load the genotype data
-            if ( !header.samplesWereAlreadySorted() )
-                lazy.decode();
-
-            builder.genotypesNoValidation(lazy);
-        }
-    }
-
-    public static class LazyData {
-        final public VCFHeader header;
-        final public int nGenotypeFields;
-        final public byte[] bytes;
-
-        public LazyData(final VCFHeader header, final int nGenotypeFields, final byte[] bytes) {
-            this.header = header;
-            this.nGenotypeFields = nGenotypeFields;
-            this.bytes = bytes;
-        }
-    }
-
-    private final String getDictionaryString() throws IOException {
-        return getDictionaryString((Integer) decoder.decodeTypedValue());
-    }
-
-    protected final String getDictionaryString(final int offset) {
-        return dictionary.get(offset);
-    }
-
-    /**
-     * Translate the config offset as encoded in the BCF file into the actual string
-     * name of the contig from the dictionary
-     *
-     * @param contigOffset
-     * @return
-     */
-    private final String lookupContigName( final int contigOffset ) {
-        return contigNames.get(contigOffset);
-    }
-
-    private final ArrayList<String> parseDictionary(final VCFHeader header) {
-        final ArrayList<String> dict = BCF2Utils.makeDictionary(header);
-
-        // if we got here we never found a dictionary, or there are no elements in the dictionary
-        if ( dict.isEmpty() )
-            error("Dictionary header element was absent or empty");
-
-        return dict;
-    }
-
-    /**
-     * @return the VCFHeader we found in this BCF2 file
-     */
-    protected VCFHeader getHeader() {
-        return header;
-    }
-
-    protected BCF2GenotypeFieldDecoders.Decoder getGenotypeFieldDecoder(final String field) {
-        return gtFieldDecoders.getDecoder(field);
-    }
-
-    private void error(final String message) throws RuntimeException {
-        throw new TribbleException(String.format("%s, at record %d with position %d:", message, recordNo, pos));
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2Decoder.java b/src/main/java/htsjdk/variant/bcf2/BCF2Decoder.java
deleted file mode 100644
index 0dd166e..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2Decoder.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.utils.GeneralUtils;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-public final class BCF2Decoder {
-    byte[] recordBytes = null;
-    ByteArrayInputStream recordStream = null;
-
-    public BCF2Decoder() {
-        // nothing to do
-    }
-
-    /**
-     * Create a new decoder ready to read BCF2 data from the byte[] recordBytes, for testing purposes
-     *
-     * @param recordBytes
-     */
-    protected BCF2Decoder(final byte[] recordBytes) {
-        setRecordBytes(recordBytes);
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Routines to load, set, skip blocks of underlying data we are decoding
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Reads the next record from input stream and prepare this decoder to decode values from it
-     *
-     * @param stream
-     */
-    public void readNextBlock(final int blockSizeInBytes, final InputStream stream) {
-        if ( blockSizeInBytes < 0 ) throw new TribbleException("Invalid block size " + blockSizeInBytes);
-        setRecordBytes(readRecordBytes(blockSizeInBytes, stream));
-    }
-
-    /**
-     * Skips the next record from input stream, invalidating current block data
-     *
-     * @param stream
-     */
-    public void skipNextBlock(final int blockSizeInBytes, final InputStream stream) {
-        try {
-            final int bytesRead = (int)stream.skip(blockSizeInBytes);
-            validateReadBytes(bytesRead, 1, blockSizeInBytes);
-        } catch ( IOException e ) {
-            throw new TribbleException("I/O error while reading BCF2 file", e);
-        }
-        this.recordBytes = null;
-        this.recordStream = null;
-    }
-
-    /**
-     * Returns the byte[] for the block of data we are currently decoding
-     * @return
-     */
-    public byte[] getRecordBytes() {
-        return recordBytes;
-    }
-
-    /**
-     * The size of the current block in bytes
-     *
-     * @return
-     */
-    public int getBlockSize() {
-        return recordBytes.length;
-    }
-
-    public boolean blockIsFullyDecoded() {
-        return recordStream.available() == 0;
-    }
-
-    /**
-     * Use the recordBytes[] to read BCF2 records from now on
-     *
-     * @param recordBytes
-     */
-    public void setRecordBytes(final byte[] recordBytes) {
-        this.recordBytes = recordBytes;
-        this.recordStream = new ByteArrayInputStream(recordBytes);
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // High-level decoder
-    //
-    // ----------------------------------------------------------------------
-
-    public final Object decodeTypedValue() throws IOException {
-        final byte typeDescriptor = readTypeDescriptor();
-        return decodeTypedValue(typeDescriptor);
-    }
-
-    public final Object decodeTypedValue(final byte typeDescriptor) throws IOException {
-        final int size = decodeNumberOfElements(typeDescriptor);
-        return decodeTypedValue(typeDescriptor, size);
-    }
-
-    public final Object decodeTypedValue(final byte typeDescriptor, final int size) throws IOException {
-        if ( size == 0 ) {
-            // missing value => null in java
-            return null;
-        } else {
-            final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-            if ( type == BCF2Type.CHAR ) { // special case string decoding for efficiency
-                return decodeLiteralString(size);
-            } else if ( size == 1 ) {
-                return decodeSingleValue(type);
-            } else {
-                final ArrayList<Object> ints = new ArrayList<Object>(size);
-                for ( int i = 0; i < size; i++ ) {
-                    final Object val = decodeSingleValue(type);
-                    if ( val == null ) continue; // auto-pruning.  We remove trailing nulls
-                    ints.add(val);
-                }
-                return ints.isEmpty() ? null : ints; // return null when all of the values are null
-            }
-        }
-    }
-
-    public final Object decodeSingleValue(final BCF2Type type) throws IOException {
-        // TODO -- decodeTypedValue should integrate this routine
-        final int value = decodeInt(type);
-
-        if ( value == type.getMissingBytes() )
-            return null;
-        else {
-            switch (type) {
-                case INT8:
-                case INT16:
-                case INT32: return value;
-                case FLOAT: return rawFloatToFloat(value);
-                case CHAR:  return value & 0xFF; // TODO -- I cannot imagine why we'd get here, as string needs to be special cased
-                default:    throw new TribbleException("BCF2 codec doesn't know how to decode type " + type );
-            }
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Decode raw primitive data types (ints, floats, and strings)
-    //
-    // ----------------------------------------------------------------------
-
-    private final Object decodeLiteralString(final int size) {
-        assert size > 0;
-
-        // TODO -- assumes size > 0
-        final byte[] bytes = new byte[size]; // TODO -- in principle should just grab bytes from underlying array
-        try {
-            recordStream.read(bytes);
-
-            int goodLength = 0;
-            for ( ; goodLength < bytes.length ; goodLength++ )
-                if ( bytes[goodLength] == 0 ) break;
-
-            if ( goodLength == 0 )
-                return null;
-            else {
-                final String s = new String(bytes, 0, goodLength);
-                return BCF2Utils.isCollapsedString(s) ? BCF2Utils.explodeStringList(s) : s;
-            }
-        } catch ( IOException e ) {
-            throw new TribbleException("readByte failure", e);
-        }
-    }
-
-    public final int decodeNumberOfElements(final byte typeDescriptor) throws IOException {
-        if ( BCF2Utils.sizeIsOverflow(typeDescriptor) )
-            // -1 ensures we explode immediately with a bad size if the result is missing
-            return decodeInt(readTypeDescriptor(), -1);
-        else
-            // the size is inline, so just decode it
-            return BCF2Utils.decodeSize(typeDescriptor);
-    }
-
-    /**
-     * Decode an int from the stream.  If the value in the stream is missing,
-     * returns missingValue.  Requires the typeDescriptor indicate an inline
-     * single element event
-     *
-     * @param typeDescriptor
-     * @return
-     */
-    public final int decodeInt(final byte typeDescriptor, final int missingValue) throws IOException {
-        final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-        final int i = decodeInt(type);
-        return i == type.getMissingBytes() ? missingValue : i;
-    }
-
-    public final int decodeInt(final BCF2Type type) throws IOException {
-        return type.read(recordStream);
-    }
-
-    /**
-     * Low-level reader for int[]
-     *
-     * Requires a typeDescriptor so the function knows how many elements to read,
-     * and how they are encoded.
-     *
-     * If size == 0 => result is null
-     * If size > 0 => result depends on the actual values in the stream
-     *      -- If the first element read is MISSING, result is null (all values are missing)
-     *      -- Else result = int[N] where N is the first N non-missing values decoded
-     *
-     * @param maybeDest if not null we'll not allocate space for the vector, but instead use
-     *                  the externally allocated array of ints to store values.  If the
-     *                  size of this vector is < the actual size of the elements, we'll be
-     *                  forced to use freshly allocated arrays.  Also note that padded
-     *                  int elements are still forced to do a fresh allocation as well.
-     * @return see description
-     */
-    public final int[] decodeIntArray(final int size, final BCF2Type type, int[] maybeDest) throws IOException {
-        if ( size == 0 ) {
-            return null;
-        } else {
-            if ( maybeDest != null && maybeDest.length < size )
-                maybeDest = null; // by nulling this out we ensure that we do fresh allocations as maybeDest is too small
-
-            final int val1 = decodeInt(type);
-            if ( val1 == type.getMissingBytes() ) {
-                // fast path for first element being missing
-                for ( int i = 1; i < size; i++ ) decodeInt(type);
-                return null;
-            } else {
-                // we know we will have at least 1 element, so making the int[] is worth it
-                final int[] ints = maybeDest == null ? new int[size] : maybeDest;
-                ints[0] = val1; // we already read the first one
-                for ( int i = 1; i < size; i++ ) {
-                    ints[i] = decodeInt(type);
-                    if ( ints[i] == type.getMissingBytes() ) {
-                        // read the rest of the missing values, dropping them
-                        for ( int j = i + 1; j < size; j++ ) decodeInt(type);
-                        // deal with auto-pruning by returning an int[] containing
-                        // only the non-MISSING values.  We do this by copying the first
-                        // i elements, as i itself is missing
-                        return Arrays.copyOf(ints, i);
-                    }
-                }
-                return ints; // all of the elements were non-MISSING
-            }
-        }
-    }
-
-    public final int[] decodeIntArray(final byte typeDescriptor, final int size) throws IOException {
-        final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-        return decodeIntArray(size, type, null);
-    }
-
-    private double rawFloatToFloat(final int rawFloat) {
-        return (double)Float.intBitsToFloat(rawFloat);
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Utility functions
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Read the size of the next block from inputStream
-     *
-     * @param inputStream
-     * @return
-     */
-    public final int readBlockSize(final InputStream inputStream) throws IOException {
-        return BCF2Type.INT32.read(inputStream);
-    }
-
-    /**
-     * Read all bytes for a BCF record block into a byte[], and return it
-     *
-     * Is smart about reading from the stream multiple times to fill the buffer, if necessary
-     *
-     * @param blockSizeInBytes number of bytes to read
-     * @param inputStream the stream to read from
-     * @return a non-null byte[] containing exactly blockSizeInBytes bytes from the inputStream
-     */
-    private static byte[] readRecordBytes(final int blockSizeInBytes, final InputStream inputStream) {
-        assert blockSizeInBytes >= 0;
-
-        final byte[] record = new byte[blockSizeInBytes];
-        try {
-            int bytesRead = 0;
-            int nReadAttempts = 0; // keep track of how many times we've read
-
-            // because we might not read enough bytes from the file in a single go, do it in a loop until we get EOF
-            while ( bytesRead < blockSizeInBytes ) {
-                final int read1 = inputStream.read(record, bytesRead, blockSizeInBytes - bytesRead);
-                if ( read1 == -1 )
-                    validateReadBytes(bytesRead, nReadAttempts, blockSizeInBytes);
-                else
-                    bytesRead += read1;
-            }
-
-            if ( GeneralUtils.DEBUG_MODE_ENABLED && nReadAttempts > 1 ) { // TODO -- remove me
-                System.err.println("Required multiple read attempts to actually get the entire BCF2 block, unexpected behavior");
-            }
-
-            validateReadBytes(bytesRead, nReadAttempts, blockSizeInBytes);
-        } catch ( IOException e ) {
-            throw new TribbleException("I/O error while reading BCF2 file", e);
-        }
-
-        return record;
-    }
-
-    /**
-     * Make sure we read the right number of bytes, or throw an error
-     *
-     * @param actuallyRead
-     * @param nReadAttempts
-     * @param expected
-     */
-    private static void validateReadBytes(final int actuallyRead, final int nReadAttempts, final int expected) {
-        assert expected >= 0;
-
-        if ( actuallyRead < expected ) {
-            throw new TribbleException(
-                    String.format("Failed to read next complete record: expected %d bytes but read only %d after %d iterations",
-                            expected, actuallyRead, nReadAttempts));
-        }
-    }
-
-    public final byte readTypeDescriptor() throws IOException {
-        return BCF2Utils.readByte(recordStream);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2GenotypeFieldDecoders.java b/src/main/java/htsjdk/variant/bcf2/BCF2GenotypeFieldDecoders.java
deleted file mode 100644
index 13c2716..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2GenotypeFieldDecoders.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFHeader;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * An efficient scheme for building and obtaining specialized
- * genotype field decoders.  Used by the BCFCodec to parse
- * with little overhead the fields from BCF2 encoded genotype
- * records
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class BCF2GenotypeFieldDecoders {
-    private final static boolean ENABLE_FASTPATH_GT = true;
-    private final static int MIN_SAMPLES_FOR_FASTPATH_GENOTYPES = 0; // TODO -- update to reasonable number
-
-    // initialized once per writer to allow parallel writers to work
-    private final HashMap<String, Decoder> genotypeFieldDecoder = new HashMap<String, Decoder>();
-    private final Decoder defaultDecoder = new GenericDecoder();
-
-    public BCF2GenotypeFieldDecoders(final VCFHeader header) {
-        // TODO -- fill in appropriate decoders for each FORMAT field in the header
-
-        genotypeFieldDecoder.put(VCFConstants.GENOTYPE_KEY, new GTDecoder());
-        // currently the generic decoder handles FILTER values properly, in so far as we don't tolerate multiple filter field values per genotype
-        genotypeFieldDecoder.put(VCFConstants.GENOTYPE_FILTER_KEY, new FTDecoder());
-        genotypeFieldDecoder.put(VCFConstants.DEPTH_KEY, new DPDecoder());
-        genotypeFieldDecoder.put(VCFConstants.GENOTYPE_ALLELE_DEPTHS, new ADDecoder());
-        genotypeFieldDecoder.put(VCFConstants.GENOTYPE_PL_KEY, new PLDecoder());
-        genotypeFieldDecoder.put(VCFConstants.GENOTYPE_QUALITY_KEY, new GQDecoder());
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Genotype field decoder
-    //
-    // -----------------------------------------------------------------
-
-    /**
-     * Return decoder appropriate for field, or the generic decoder if no
-     * specialized one is bound
-     * @param field the GT field to decode
-     * @return a non-null decoder
-     */
-    public Decoder getDecoder(final String field) {
-        final Decoder d = genotypeFieldDecoder.get(field);
-        return d == null ? defaultDecoder : d;
-    }
-
-    /**
-     * Decoder a field (implicit from creation) encoded as
-     * typeDescriptor in the decoder object in the GenotypeBuilders
-     * one for each sample in order.
-     *
-     * The way this works is that this decode method
-     * iterates over the builders, decoding a genotype field
-     * in BCF2 for each sample from decoder.
-     *
-     * This system allows us to easily use specialized
-     * decoders for specific genotype field values. For example,
-     * we use a special decoder to directly read the BCF2 data for
-     * the PL field into a int[] rather than the generic List of Integer
-     */
-    public interface Decoder {
-        public void decode(final List<Allele> siteAlleles,
-                           final String field,
-                           final BCF2Decoder decoder,
-                           final byte typeDescriptor,
-                           final int numElements,
-                           final GenotypeBuilder[] gbs) throws IOException;
-    }
-
-    private class GTDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            if ( ENABLE_FASTPATH_GT && siteAlleles.size() == 2 && numElements == 2 && gbs.length >= MIN_SAMPLES_FOR_FASTPATH_GENOTYPES )
-                fastBiallelicDiploidDecode(siteAlleles, decoder, typeDescriptor, gbs);
-            else {
-                generalDecode(siteAlleles, numElements, decoder, typeDescriptor, gbs);
-            }
-        }
-
-        /**
-         * fast path for many samples with diploid genotypes
-         *
-         * The way this would work is simple.  Create a List<Allele> diploidGenotypes[] object
-         * After decoding the offset, if that sample is diploid compute the
-         * offset into the alleles vector which is simply offset = allele0 * nAlleles + allele1
-         * if there's a value at diploidGenotypes[offset], use it, otherwise create the genotype
-         * cache it and use that
-         *
-         * Some notes.  If there are nAlleles at the site, there are implicitly actually
-         * n + 1 options including
-         */
-        @SuppressWarnings({"unchecked"})
-        private final void fastBiallelicDiploidDecode(final List<Allele> siteAlleles,
-                                                      final BCF2Decoder decoder,
-                                                      final byte typeDescriptor,
-                                                      final GenotypeBuilder[] gbs) throws IOException {
-            final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-
-            final int nPossibleGenotypes = 3 * 3;
-            final Object allGenotypes[] = new Object[nPossibleGenotypes];
-
-            for ( final GenotypeBuilder gb : gbs ) {
-                final int a1 = decoder.decodeInt(type);
-                final int a2 = decoder.decodeInt(type);
-
-                if ( a1 == type.getMissingBytes() ) {
-                    assert a2 == type.getMissingBytes();
-                    // no called sample GT = .
-                    gb.alleles(null);
-                } else if ( a2 == type.getMissingBytes() ) {
-                    gb.alleles(Arrays.asList(getAlleleFromEncoded(siteAlleles, a1)));
-                } else {
-                    // downshift to remove phase
-                    final int offset = (a1 >> 1) * 3 + (a2 >> 1);
-                    assert offset < allGenotypes.length;
-
-                    // TODO -- how can I get rid of this cast?
-                    List<Allele> gt = (List<Allele>)allGenotypes[offset];
-                    if ( gt == null ) {
-                        final Allele allele1 = getAlleleFromEncoded(siteAlleles, a1);
-                        final Allele allele2 = getAlleleFromEncoded(siteAlleles, a2);
-                        gt = Arrays.asList(allele1, allele2);
-                        allGenotypes[offset] = gt;
-                    }
-
-                    gb.alleles(gt);
-                }
-
-                final boolean phased = (a1 & 0x01) == 1;
-                gb.phased(phased);
-            }
-        }
-
-        private final void generalDecode(final List<Allele> siteAlleles,
-                                         final int ploidy,
-                                         final BCF2Decoder decoder,
-                                         final byte typeDescriptor,
-                                         final GenotypeBuilder[] gbs) throws IOException {
-            final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-
-            // a single cache for the encoded genotypes, since we don't actually need this vector
-            final int[] tmp = new int[ploidy];
-
-            for ( final GenotypeBuilder gb : gbs ) {
-                final int[] encoded = decoder.decodeIntArray(ploidy, type, tmp);
-                if ( encoded == null )
-                    // no called sample GT = .
-                    gb.alleles(null);
-                else {
-                    assert encoded.length > 0;
-
-                    // we have at least some alleles to decode
-                    final List<Allele> gt = new ArrayList<Allele>(encoded.length);
-
-                    // note that the auto-pruning of fields magically handles different
-                    // ploidy per sample at a site
-                    for ( final int encode : encoded )
-                        gt.add(getAlleleFromEncoded(siteAlleles, encode));
-
-                    gb.alleles(gt);
-                    final boolean phased = (encoded[0] & 0x01) == 1;
-                    gb.phased(phased);
-                }
-            }
-        }
-
-        private final Allele getAlleleFromEncoded(final List<Allele> siteAlleles, final int encode) {
-            final int offset = encode >> 1;
-            return offset == 0 ? Allele.NO_CALL : siteAlleles.get(offset - 1);
-        }
-    }
-
-    private class DPDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                // the -1 is for missing
-                gb.DP(decoder.decodeInt(typeDescriptor, -1));
-            }
-        }
-    }
-
-    private class GQDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                // the -1 is for missing
-                gb.GQ(decoder.decodeInt(typeDescriptor, -1));
-            }
-        }
-    }
-
-    private class ADDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                gb.AD(decoder.decodeIntArray(typeDescriptor, numElements));
-            }
-        }
-    }
-
-    private class PLDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                gb.PL(decoder.decodeIntArray(typeDescriptor, numElements));
-            }
-        }
-    }
-
-    private class GenericDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                Object value = decoder.decodeTypedValue(typeDescriptor, numElements);
-                if ( value != null ) { // don't add missing values
-                    if ( value instanceof List && ((List)value).size() == 1) {
-                        // todo -- I really hate this, and it suggests that the code isn't completely right
-                        // the reason it's here is that it's possible to prune down a vector to a singleton
-                        // value and there we have the contract that the value comes back as an atomic value
-                        // not a vector of size 1
-                        value = ((List)value).get(0);
-                    }
-                    gb.attribute(field, value);
-                }
-            }
-        }
-    }
-
-    private class FTDecoder implements Decoder {
-        @Override
-        public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
-            for ( final GenotypeBuilder gb : gbs ) {
-                Object value = decoder.decodeTypedValue(typeDescriptor, numElements);
-                assert value == null || value instanceof String;
-                gb.filter((String)value);
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2LazyGenotypesDecoder.java b/src/main/java/htsjdk/variant/bcf2/BCF2LazyGenotypesDecoder.java
deleted file mode 100644
index aadea53..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2LazyGenotypesDecoder.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.LazyGenotypesContext;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Lazy version of genotypes decoder for BCF2 genotypes
- *
- * @author Mark DePristo
- * @since 5/12
- */
-public class BCF2LazyGenotypesDecoder implements LazyGenotypesContext.LazyParser {
-    // the essential information for us to use to decode the genotypes data
-    // initialized when this lazy decoder is created, as we know all of this from the BCF2Codec
-    // and its stored here again for code cleanliness
-    private final BCF2Codec codec;
-    private final List<Allele> siteAlleles;
-    private final int nSamples;
-    private final int nFields;
-    private final GenotypeBuilder[] builders;
-
-    BCF2LazyGenotypesDecoder(final BCF2Codec codec, final List<Allele> alleles, final int nSamples,
-                             final int nFields, final GenotypeBuilder[] builders) {
-        this.codec = codec;
-        this.siteAlleles = alleles;
-        this.nSamples = nSamples;
-        this.nFields = nFields;
-        this.builders = builders;
-    }
-
-    @Override
-    public LazyGenotypesContext.LazyData parse(final Object data) {
-        try {
-
-            // load our byte[] data into the decoder
-            final BCF2Decoder decoder = new BCF2Decoder(((BCF2Codec.LazyData)data).bytes);
-
-            for ( int i = 0; i < nSamples; i++ )
-                builders[i].reset(true);
-
-            for ( int i = 0; i < nFields; i++ ) {
-                // get the field name
-                final int offset = (Integer) decoder.decodeTypedValue();
-                final String field = codec.getDictionaryString(offset);
-
-                // the type of each element
-                final byte typeDescriptor = decoder.readTypeDescriptor();
-                final int numElements = decoder.decodeNumberOfElements(typeDescriptor);
-                final BCF2GenotypeFieldDecoders.Decoder fieldDecoder = codec.getGenotypeFieldDecoder(field);
-                try {
-                    fieldDecoder.decode(siteAlleles, field, decoder, typeDescriptor, numElements, builders);
-                } catch ( ClassCastException e ) {
-                    throw new TribbleException("BUG: expected encoding of field " + field
-                            + " inconsistent with the value observed in the decoded value");
-                }
-            }
-
-            final ArrayList<Genotype> genotypes = new ArrayList<Genotype>(nSamples);
-            for ( final GenotypeBuilder gb : builders )
-                genotypes.add(gb.make());
-
-            return new LazyGenotypesContext.LazyData(genotypes, codec.getHeader().getSampleNamesInOrder(), codec.getHeader().getSampleNameToOffset());
-        } catch ( IOException e ) {
-            throw new TribbleException("Unexpected IOException parsing already read genotypes data block", e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2Type.java b/src/main/java/htsjdk/variant/bcf2/BCF2Type.java
deleted file mode 100644
index 11c8edf..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2Type.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.EnumSet;
-
-/**
- * BCF2 types and associated information
- *
- * @author depristo
- * @since 05/12
- */
-public enum BCF2Type {
-    // the actual values themselves
-    MISSING(0, 0, 0x00) {
-        @Override public int read(final InputStream in) throws IOException {
-            throw new IllegalArgumentException("Cannot read MISSING type");
-        }
-        @Override public void write(final int value, final OutputStream out) throws IOException {
-            throw new IllegalArgumentException("Cannot write MISSING type");
-        }
-    },
-
-    INT8 (1, 1, 0xFFFFFF80,        -127,        127) {
-        @Override
-        public int read(final InputStream in) throws IOException {
-            return BCF2Utils.readByte(in);
-        }
-
-        @Override
-        public void write(final int value, final OutputStream out) throws IOException {
-            out.write(0xFF & value);   // TODO -- do we need this operation?
-        }
-    },
-
-    INT16(2, 2, 0xFFFF8000,      -32767,      32767) {
-        @Override
-        public int read(final InputStream in) throws IOException {
-            final int b2 = BCF2Utils.readByte(in) & 0xFF;
-            final int b1 = BCF2Utils.readByte(in) & 0xFF;
-            return (short)((b1 << 8) | b2);
-        }
-
-        @Override
-        public void write(final int value, final OutputStream out) throws IOException {
-            // TODO -- optimization -- should we put this in a local buffer?
-            out.write((0x00FF & value));
-            out.write((0xFF00 & value) >> 8);
-        }
-    },
-
-    INT32(3, 4, 0x80000000, -2147483647, 2147483647) {
-        @Override
-        public int read(final InputStream in) throws IOException {
-            final int b4 = BCF2Utils.readByte(in) & 0xFF;
-            final int b3 = BCF2Utils.readByte(in) & 0xFF;
-            final int b2 = BCF2Utils.readByte(in) & 0xFF;
-            final int b1 = BCF2Utils.readByte(in) & 0xFF;
-            return (int)(b1 << 24 | b2 << 16 | b3 << 8 | b4);
-        }
-
-        @Override
-        public void write(final int value, final OutputStream out) throws IOException {
-            out.write((0x000000FF & value));
-            out.write((0x0000FF00 & value) >> 8);
-            out.write((0x00FF0000 & value) >> 16);
-            out.write((0xFF000000 & value) >> 24);
-        }
-    },
-
-    FLOAT(5, 4, 0x7F800001) {
-        @Override
-        public int read(final InputStream in) throws IOException {
-            return INT32.read(in);
-        }
-
-        @Override
-        public void write(final int value, final OutputStream out) throws IOException {
-            INT32.write(value, out);
-        }
-    },
-
-    CHAR (7, 1, 0x00000000) {
-        @Override
-        public int read(final InputStream in) throws IOException {
-            return INT8.read(in);
-        }
-
-        @Override
-        public void write(final int value, final OutputStream out) throws IOException {
-            INT8.write(value, out);
-        }
-    };
-
-    private final int id;
-    private final Object missingJavaValue;
-    private final int missingBytes;
-    private final int sizeInBytes;
-    private final long minValue, maxValue;
-
-    BCF2Type(final int id, final int sizeInBytes, final int missingBytes) {
-        this(id, sizeInBytes, missingBytes, 0, 0);
-    }
-
-    BCF2Type(final int id, final int sizeInBytes, final int missingBytes, final long minValue, final long maxValue) {
-        this.id = id;
-        this.sizeInBytes = sizeInBytes;
-        this.missingJavaValue = null;
-        this.missingBytes = missingBytes;
-        this.minValue = minValue;
-        this.maxValue = maxValue;
-    }
-
-    /**
-     * How many bytes are used to represent this type on disk?
-     * @return
-     */
-    public int getSizeInBytes() {
-        return sizeInBytes;
-    }
-
-    /**
-     * The ID according to the BCF2 specification
-     * @return
-     */
-    public int getID() { return id; }
-
-    /**
-     * Can we encode value v in this type, according to its declared range.
-     *
-     * Only makes sense for integer values
-     *
-     * @param v
-     * @return
-     */
-    public final boolean withinRange(final long v) { return v >= minValue && v <= maxValue; }
-
-    /**
-     * Return the java object (aka null) that is used to represent a missing value for this
-     * type in Java
-     *
-     * @return
-     */
-    public Object getMissingJavaValue() { return missingJavaValue; }
-
-    /**
-     * The bytes (encoded as an int) that are used to represent a missing value
-     * for this type in BCF2
-     *
-     * @return
-     */
-    public int getMissingBytes() { return missingBytes; }
-
-    /**
-     * An enum set of the types that might represent Integer values
-     */
-    private final static EnumSet<BCF2Type> INTEGERS = EnumSet.of(INT8, INT16, INT32);
-
-    /**
-     * @return true if this BCF2Type corresponds to the magic "MISSING" type (0x00)
-     */
-    public boolean isMissingType() {
-        return this == MISSING;
-    }
-
-    public boolean isIntegerType() {
-        return INTEGERS.contains(this);
-    }
-
-    /**
-     * Read a value from in stream of this BCF2 type as an int [32 bit] collection of bits
-     *
-     * For intX and char values this is just the int / byte value of the underlying data represented as a 32 bit int
-     * For a char the result must be converted to a char by (char)(byte)(0x0F & value)
-     * For doubles it's necessary to convert subsequently this value to a double via Double.bitsToDouble()
-     *
-     * @param in
-     * @return
-     * @throws IOException
-     */
-    public int read(final InputStream in) throws IOException {
-        throw new IllegalArgumentException("Not implemented");
-    }
-
-    public void write(final int value, final OutputStream out) throws IOException {
-        throw new IllegalArgumentException("Not implemented");
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCF2Utils.java b/src/main/java/htsjdk/variant/bcf2/BCF2Utils.java
deleted file mode 100644
index f2fb1a8..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCF2Utils.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLine;
-import htsjdk.variant.vcf.VCFIDHeaderLine;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Common utilities for working with BCF2 files
- *
- * Includes convenience methods for encoding, decoding BCF2 type descriptors (size + type)
- *
- * @author depristo
- * @since 5/12
- */
-public final class BCF2Utils {
-    public static final int MAX_ALLELES_IN_GENOTYPES = 127;
-
-    public static final int OVERFLOW_ELEMENT_MARKER = 15;
-    public static final int MAX_INLINE_ELEMENTS = 14;
-
-    public final static BCF2Type[] INTEGER_TYPES_BY_SIZE = new BCF2Type[]{BCF2Type.INT8, BCF2Type.INT16, BCF2Type.INT32};
-    public final static BCF2Type[] ID_TO_ENUM;
-
-    static {
-        int maxID = -1;
-        for ( BCF2Type v : BCF2Type.values() ) maxID = Math.max(v.getID(), maxID);
-        ID_TO_ENUM = new BCF2Type[maxID+1];
-        for ( BCF2Type v : BCF2Type.values() ) ID_TO_ENUM[v.getID()] = v;
-    }
-
-    private BCF2Utils() {}
-
-    /**
-     * Create a strings dictionary from the VCF header
-     *
-     * The dictionary is an ordered list of common VCF identifers (FILTER, INFO, and FORMAT)
-     * fields.
-     *
-     * Note that its critical that the list be dedupped and sorted in a consistent manner each time,
-     * as the BCF2 offsets are encoded relative to this dictionary, and if it isn't determined exactly
-     * the same way as in the header each time it's very bad
-     *
-     * @param header the VCFHeader from which to build the dictionary
-     * @return a non-null dictionary of elements, may be empty
-     */
-    public static ArrayList<String> makeDictionary(final VCFHeader header) {
-        final Set<String> seen = new HashSet<String>();
-        final ArrayList<String> dict = new ArrayList<String>();
-
-        // special case the special PASS field which doesn't show up in the FILTER field definitions
-        seen.add(VCFConstants.PASSES_FILTERS_v4);
-        dict.add(VCFConstants.PASSES_FILTERS_v4);
-
-        // set up the strings dictionary
-        for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) {
-            if ( line.shouldBeAddedToDictionary() ) {
-                final VCFIDHeaderLine idLine = (VCFIDHeaderLine)line;
-                if ( ! seen.contains(idLine.getID())) {
-                    dict.add(idLine.getID());
-                    seen.add(idLine.getID());
-                }
-            }
-        }
-
-        return dict;
-    }
-
-    public static byte encodeTypeDescriptor(final int nElements, final BCF2Type type ) {
-        return (byte)((0x0F & nElements) << 4 | (type.getID() & 0x0F));
-    }
-
-    public static int decodeSize(final byte typeDescriptor) {
-        return (0xF0 & typeDescriptor) >> 4;
-    }
-
-    public static int decodeTypeID(final byte typeDescriptor) {
-        return typeDescriptor & 0x0F;
-    }
-
-    public static BCF2Type decodeType(final byte typeDescriptor) {
-        return ID_TO_ENUM[decodeTypeID(typeDescriptor)];
-    }
-
-    public static boolean sizeIsOverflow(final byte typeDescriptor) {
-        return decodeSize(typeDescriptor) == OVERFLOW_ELEMENT_MARKER;
-    }
-
-    public static byte readByte(final InputStream stream) throws IOException {
-        return (byte)(stream.read() & 0xFF);
-    }
-
-    /**
-     * Collapse multiple strings into a comma separated list
-     *
-     * ["s1", "s2", "s3"] => ",s1,s2,s3"
-     *
-     * @param strings size > 1 list of strings
-     * @return
-     */
-    public static String collapseStringList(final List<String> strings) {
-        if ( strings.isEmpty() ) return "";
-        else if ( strings.size() == 1 ) return strings.get(0);
-        else {
-            final StringBuilder b = new StringBuilder();
-            for ( final String s : strings ) {
-                if ( s != null ) {
-                    assert s.indexOf(",") == -1; // no commas in individual strings
-                    b.append(',').append(s);
-                }
-            }
-            return b.toString();
-        }
-    }
-
-    /**
-     * Inverse operation of collapseStringList.
-     *
-     * ",s1,s2,s3" => ["s1", "s2", "s3"]
-     *
-     *
-     * @param collapsed
-     * @return
-     */
-    public static List<String> explodeStringList(final String collapsed) {
-        assert isCollapsedString(collapsed);
-        final String[] exploded = collapsed.substring(1).split(",");
-        return Arrays.asList(exploded);
-    }
-
-    public static boolean isCollapsedString(final String s) {
-        return !s.isEmpty() && s.charAt(0) == ',';
-    }
-
-    /**
-     * Returns a good name for a shadow BCF file for vcfFile.
-     *
-     * foo.vcf => foo.bcf
-     * foo.xxx => foo.xxx.bcf
-     *
-     * If the resulting BCF file cannot be written, return null.  Happens
-     * when vcfFile = /dev/null for example
-     *
-     * @param vcfFile
-     * @return the BCF
-     */
-    public static final File shadowBCF(final File vcfFile) {
-        final String path = vcfFile.getAbsolutePath();
-        if ( path.contains(".vcf") )
-            return new File(path.replace(".vcf", ".bcf"));
-        else {
-            final File bcf = new File( path + ".bcf" );
-            if ( bcf.canRead() )
-                return bcf;
-            else {
-                try {
-                    // this is the only way to robustly decide if we could actually write to BCF
-                    final FileOutputStream o = new FileOutputStream(bcf);
-                    o.close();
-                    bcf.delete();
-                    return bcf;
-                } catch ( FileNotFoundException e ) {
-                    return null;
-                } catch ( IOException e ) {
-                    return null;
-                }
-            }
-        }
-    }
-
-    public static BCF2Type determineIntegerType(final int value) {
-        for ( final BCF2Type potentialType : INTEGER_TYPES_BY_SIZE) {
-            if ( potentialType.withinRange(value) )
-                return potentialType;
-        }
-
-        throw new TribbleException("Integer cannot be encoded in allowable range of even INT32: " + value);
-    }
-
-    public static BCF2Type determineIntegerType(final int[] values) {
-        // find the min and max values in the array
-        int max = 0, min = 0;
-        for ( final int v : values ) {
-            if ( v > max ) max = v;
-            if ( v < min ) min = v;
-        }
-
-        final BCF2Type maxType = determineIntegerType(max);
-        final BCF2Type minType = determineIntegerType(min);
-
-        // INT8 < INT16 < INT32 so this returns the larger of the two
-        return maxType.compareTo(minType) >= 0 ? maxType : minType;
-    }
-
-    /**
-     * Returns the maximum BCF2 integer size of t1 and t2
-     *
-     * For example, if t1 == INT8 and t2 == INT16 returns INT16
-     *
-     * @param t1
-     * @param t2
-     * @return
-     */
-    public static BCF2Type maxIntegerType(final BCF2Type t1, final BCF2Type t2) {
-        switch ( t1 ) {
-            case INT8: return t2;
-            case INT16: return t2 == BCF2Type.INT32 ? t2 : t1;
-            case INT32: return t1;
-            default: throw new TribbleException("BUG: unexpected BCF2Type " + t1);
-        }
-    }
-
-    public static BCF2Type determineIntegerType(final List<Integer> values) {
-        BCF2Type maxType = BCF2Type.INT8;
-        for ( final int value : values ) {
-            final BCF2Type type1 = determineIntegerType(value);
-            switch ( type1 ) {
-                case INT8: break;
-                case INT16: maxType = BCF2Type.INT16; break;
-                case INT32: return BCF2Type.INT32; // fast path for largest possible value
-                default: throw new TribbleException("Unexpected integer type " + type1 );
-            }
-        }
-        return maxType;
-    }
-
-    /**
-     * Helper function that takes an object and returns a list representation
-     * of it:
-     *
-     * o == null => []
-     * o is a list => o
-     * else => [o]
-     *
-     * @param c  the class of the object
-     * @param o  the object to convert to a Java List
-     * @return
-     */
-    public static <T> List<T> toList(final Class<T> c, final Object o) {
-        if ( o == null ) return Collections.emptyList();
-        else if ( o instanceof List ) return (List<T>)o;
-        else if ( o.getClass().isArray() ) {
-            final int arraySize = Array.getLength(o);
-            final List<T> list = new ArrayList<T>(arraySize);
-            for (int i=0; i<arraySize; i++)
-                list.add((T)Array.get(o, i));
-            return list;
-        }
-        else return Collections.singletonList((T)o);
-    }
-
-    /**
-     * Are the elements and their order in the output and input headers consistent so that
-     * we can write out the raw genotypes block without decoding and recoding it?
-     *
-     * If the order of INFO, FILTER, or contrig elements in the output header is different than
-     * in the input header we must decode the blocks using the input header and then recode them
-     * based on the new output order.
-     *
-     * If they are consistent, we can simply pass through the raw genotypes block bytes, which is
-     * a *huge* performance win for large blocks.
-     *
-     * Many common operations on BCF2 files (merging them for -nt, selecting a subset of records, etc)
-     * don't modify the ordering of the header fields and so can safely pass through the genotypes
-     * undecoded.  Some operations -- those at add filters or info fields -- can change the ordering
-     * of the header fields and so produce invalid BCF2 files if the genotypes aren't decoded
-     */
-    public static boolean headerLinesAreOrderedConsistently(final VCFHeader outputHeader, final VCFHeader genotypesBlockHeader) {
-        // first, we have to have the same samples in the same order
-        if ( ! nullAsEmpty(outputHeader.getSampleNamesInOrder()).equals(nullAsEmpty(genotypesBlockHeader.getSampleNamesInOrder())) )
-            return false;
-
-        final Iterator<? extends VCFIDHeaderLine> outputLinesIt = outputHeader.getIDHeaderLines().iterator();
-        final Iterator<? extends VCFIDHeaderLine> inputLinesIt = genotypesBlockHeader.getIDHeaderLines().iterator();
-
-        while ( inputLinesIt.hasNext() ) {
-            if ( ! outputLinesIt.hasNext() ) // missing lines in output
-                return false;
-
-            final VCFIDHeaderLine outputLine = outputLinesIt.next();
-            final VCFIDHeaderLine inputLine = inputLinesIt.next();
-
-            if ( ! inputLine.getClass().equals(outputLine.getClass()) || ! inputLine.getID().equals(outputLine.getID()) )
-                return false;
-        }
-
-        return true;
-    }
-
-    private static <T> List<T> nullAsEmpty(List<T> l) {
-        if ( l == null )
-            return Collections.emptyList();
-        else
-            return l;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/bcf2/BCFVersion.java b/src/main/java/htsjdk/variant/bcf2/BCFVersion.java
deleted file mode 100644
index 7605d03..0000000
--- a/src/main/java/htsjdk/variant/bcf2/BCFVersion.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-/**
- * Simple holder for BCF version information
- *
- * User: depristo
- * Date: 8/2/12
- * Time: 2:16 PM
- */
-public class BCFVersion {
-    /**
-     * BCF2 begins with the MAGIC info BCF_M_m where M is the major version (currently 2)
-     * and m is the minor version, currently 1
-     */
-    public static final byte[] MAGIC_HEADER_START = "BCF".getBytes();
-
-    final int majorVersion;
-    final int minorVersion;
-
-    public BCFVersion(int majorVersion, int minorVersion) {
-        this.majorVersion = majorVersion;
-        this.minorVersion = minorVersion;
-    }
-
-    /**
-     * @return the major version number of this BCF file
-     */
-    public int getMajorVersion() {
-        return majorVersion;
-    }
-
-    /**
-     * @return the minor version number of this BCF file
-     */
-    public int getMinorVersion() {
-        return minorVersion;
-    }
-
-    /**
-     * Return a new BCFVersion object describing the major and minor version of the BCF file in stream
-     *
-     * Note that stream must be at the very start of the file.
-     *
-     * @param stream
-     * @return a BCFVersion object, or null if stream doesn't contain a BCF file
-     * @throws IOException
-     */
-    public static BCFVersion readBCFVersion(final InputStream stream) throws IOException {
-        final byte[] magicBytes = new byte[MAGIC_HEADER_START.length];
-        stream.read(magicBytes);
-        if ( Arrays.equals(magicBytes, MAGIC_HEADER_START) ) {
-            // we're a BCF file
-            final int majorByte = stream.read();
-            final int minorByte = stream.read();
-            return new BCFVersion( majorByte, minorByte );
-        } else
-            return null;
-    }
-
-    /**
-     * Write out the BCF magic information indicating this is a BCF file with corresponding major and minor versions
-     * @param out
-     * @throws IOException
-     */
-    public void write(final OutputStream out) throws IOException {
-        out.write(MAGIC_HEADER_START);
-        out.write(getMajorVersion() & 0xFF);
-        out.write(getMinorVersion() & 0xFF);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("BCF%d.%d", getMajorVersion(), getMinorVersion());
-    }
-}
diff --git a/src/main/java/htsjdk/variant/example/PrintVariantsExample.java b/src/main/java/htsjdk/variant/example/PrintVariantsExample.java
deleted file mode 100755
index 4471cea..0000000
--- a/src/main/java/htsjdk/variant/example/PrintVariantsExample.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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
- */
-package htsjdk.variant.example;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.ProgressLogger;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.readers.LineIterator;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.writer.Options;
-import htsjdk.variant.variantcontext.writer.VariantContextWriter;
-import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFHeader;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.stream.Collectors;
-
-/**
- * This is a example program showing how to use Feature readers and (optionally) writers.
- * It's also useful for measuring time.
- * An example invocation is:
- * java -cp dist/htsjdk-2.1.1.jar htsjdk.variant.example.PrintVariantsExample in.vcf out.vcf
- * <p>
- * Arguments:
- * - the first argument is the input file (VCF)
- * - the second argument is optional and is the name of the output file (nothing gets written if this argument is missing)
- */
-public final class PrintVariantsExample {
-    private PrintVariantsExample() {
-    }
-
-    private static final Log log = Log.getInstance(PrintVariantsExample.class);
-
-    public static void main(final String[] args) throws IOException {
-        if (args.length < 1) {
-            System.out.println("Usage: " + PrintVariantsExample.class.getCanonicalName() + " inFile [outFile]");
-            System.exit(1);
-        }
-        final File inputFile = new File(args[0]);
-        final File outputFile = args.length >= 2 ? new File(args[1]) : null;
-
-        final long start = System.currentTimeMillis();
-
-        log.info("Start with args:" + Arrays.toString(args));
-        printConfigurationInfo();
-
-        try(final VariantContextWriter writer = outputFile == null ? null : new VariantContextWriterBuilder().setOutputFile(outputFile).setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).unsetOption(Options.INDEX_ON_THE_FLY).build();
-            final AbstractFeatureReader<VariantContext, LineIterator> reader = AbstractFeatureReader.getFeatureReader(inputFile.getAbsolutePath(), new VCFCodec(), false)){
-
-            log.info(reader.getClass().getSimpleName() + " hasIndex " + reader.hasIndex());
-            if (writer != null){
-                log.info(writer.getClass().getSimpleName());
-                writer.writeHeader((VCFHeader) reader.getHeader());
-            }
-
-            final ProgressLogger pl = new ProgressLogger(log, 1000000);
-            for (final VariantContext vc : reader.iterator()) {
-                if (writer != null){
-                    writer.add(vc);
-                }
-                pl.record(vc.getContig(), vc.getStart());
-            }
-        }
-
-        final long end = System.currentTimeMillis();
-        log.info(String.format("Done. Elapsed time %.3f seconds", (end - start) / 1000.0));
-    }
-
-    private static void printConfigurationInfo() throws IOException {
-        log.info("Executing as " +
-                System.getProperty("user.name") + '@' + InetAddress.getLocalHost().getHostName() +
-                " on " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") +
-                ' ' + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") +
-                ' ' + System.getProperty("java.runtime.version"));
-
-        log.info(Defaults.allDefaults().entrySet().stream().map(e -> e.getKey() + ':' + e.getValue()).collect(Collectors.<String>joining(" ")));
-    }
-}
diff --git a/src/main/java/htsjdk/variant/utils/GeneralUtils.java b/src/main/java/htsjdk/variant/utils/GeneralUtils.java
deleted file mode 100644
index 56230ed..0000000
--- a/src/main/java/htsjdk/variant/utils/GeneralUtils.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.utils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Constants and utility methods used throughout the VCF/BCF/VariantContext classes
- */
-public class GeneralUtils {
-
-    /**
-     * Setting this to true causes the VCF/BCF/VariantContext classes to emit debugging information
-     * to standard error
-     */
-    public static final boolean DEBUG_MODE_ENABLED = false;
-
-    /**
-     * The smallest log10 value we'll emit from normalizeFromLog10 and other functions
-     * where the real-space value is 0.0.
-     */
-    public final static double LOG10_P_OF_ZERO = -1000000.0;
-
-    /**
-     * Returns a string of the form elt1.toString() [sep elt2.toString() ... sep elt.toString()] for a collection of
-     * elti objects (note there's no actual space between sep and the elti elements).  Returns
-     * "" if collection is empty.  If collection contains just elt, then returns elt.toString()
-     *
-     * @param separator the string to use to separate objects
-     * @param objects a collection of objects.  the element order is defined by the iterator over objects
-     * @param <T> the type of the objects
-     * @return a non-null string
-     */
-    public static <T> String join(final String separator, final Collection<T> objects) {
-        if (objects.isEmpty()) { // fast path for empty collection
-            return "";
-        } else {
-            final Iterator<T> iter = objects.iterator();
-            final T first = iter.next();
-
-            if ( ! iter.hasNext() ) // fast path for singleton collections
-                return first.toString();
-            else { // full path for 2+ collection that actually need a join
-                final StringBuilder ret = new StringBuilder(first.toString());
-                while(iter.hasNext()) {
-                    ret.append(separator);
-                    ret.append(iter.next().toString());
-                }
-                return ret.toString();
-            }
-        }
-    }
-
-    /**
-     * normalizes the log10-based array.  ASSUMES THAT ALL ARRAY ENTRIES ARE <= 0 (<= 1 IN REAL-SPACE).
-     *
-     * @param array the array to be normalized
-     * @return a newly allocated array corresponding the normalized values in array
-     */
-    public static double[] normalizeFromLog10(double[] array) {
-        return normalizeFromLog10(array, false);
-    }
-
-    /**
-     * normalizes the log10-based array.  ASSUMES THAT ALL ARRAY ENTRIES ARE <= 0 (<= 1 IN REAL-SPACE).
-     *
-     * @param array             the array to be normalized
-     * @param takeLog10OfOutput if true, the output will be transformed back into log10 units
-     * @return a newly allocated array corresponding the normalized values in array, maybe log10 transformed
-     */
-    public static double[] normalizeFromLog10(double[] array, boolean takeLog10OfOutput) {
-        return normalizeFromLog10(array, takeLog10OfOutput, false);
-    }
-
-    /**
-     * See #normalizeFromLog10 but with the additional option to use an approximation that keeps the calculation always in log-space
-     *
-     * @param array
-     * @param takeLog10OfOutput
-     * @param keepInLogSpace
-     *
-     * @return
-     */
-    public static double[] normalizeFromLog10(double[] array, boolean takeLog10OfOutput, boolean keepInLogSpace) {
-        // for precision purposes, we need to add (or really subtract, since they're
-        // all negative) the largest value; also, we need to convert to normal-space.
-        double maxValue = arrayMax(array);
-
-        // we may decide to just normalize in log space without converting to linear space
-        if (keepInLogSpace) {
-            for (int i = 0; i < array.length; i++) {
-                array[i] -= maxValue;
-            }
-            return array;
-        }
-
-        // default case: go to linear space
-        double[] normalized = new double[array.length];
-
-        for (int i = 0; i < array.length; i++)
-            normalized[i] = Math.pow(10, array[i] - maxValue);
-
-        // normalize
-        double sum = 0.0;
-        for (int i = 0; i < array.length; i++)
-            sum += normalized[i];
-        for (int i = 0; i < array.length; i++) {
-            double x = normalized[i] / sum;
-            if (takeLog10OfOutput) {
-                x = Math.log10(x);
-                if ( x < LOG10_P_OF_ZERO || Double.isInfinite(x) )
-                    x = array[i] - maxValue;
-            }
-
-            normalized[i] = x;
-        }
-
-        return normalized;
-    }
-
-    public static double arrayMax(final double[] array) {
-        return array[maxElementIndex(array, array.length)];
-    }
-
-    public static int maxElementIndex(final double[] array) {
-        return maxElementIndex(array, array.length);
-    }
-
-    public static int maxElementIndex(final double[] array, final int endIndex) {
-        if (array == null || array.length == 0)
-            throw new IllegalArgumentException("Array cannot be null!");
-
-        int maxI = 0;
-        for (int i = 1; i < endIndex; i++) {
-            if (array[i] > array[maxI])
-                maxI = i;
-        }
-
-        return maxI;
-    }
-
-    public static <T> List<T> cons(final T elt, final List<T> l) {
-        List<T> l2 = new ArrayList<T>();
-        l2.add(elt);
-        if (l != null) l2.addAll(l);
-        return l2;
-    }
-
-    /**
-     * Make all combinations of N size of objects
-     *
-     * if objects = [A, B, C]
-     * if N = 1 => [[A], [B], [C]]
-     * if N = 2 => [[A, A], [B, A], [C, A], [A, B], [B, B], [C, B], [A, C], [B, C], [C, C]]
-     *
-     * @param objects
-     * @param n
-     * @param <T>
-     * @param withReplacement if false, the resulting permutations will only contain unique objects from objects
-     * @return
-     */
-    public static <T> List<List<T>> makePermutations(final List<T> objects, final int n, final boolean withReplacement) {
-        final List<List<T>> combinations = new ArrayList<List<T>>();
-
-        if ( n <= 0 )
-            ;
-        else if ( n == 1 ) {
-            for ( final T o : objects )
-                combinations.add(Collections.singletonList(o));
-        } else {
-            final List<List<T>> sub = makePermutations(objects, n - 1, withReplacement);
-            for ( List<T> subI : sub ) {
-                for ( final T a : objects ) {
-                    if ( withReplacement || ! subI.contains(a) )
-                        combinations.add(cons(a, subI));
-                }
-            }
-        }
-
-        return combinations;
-    }
-
-    /**
-     * Compares double values for equality (within 1e-6), or inequality.
-     *
-     * @param a the first double value
-     * @param b the second double value
-     * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a.
-     */
-    public static byte compareDoubles(double a, double b) {
-        return compareDoubles(a, b, 1e-6);
-    }
-
-    /**
-     * Compares double values for equality (within epsilon), or inequality.
-     *
-     * @param a       the first double value
-     * @param b       the second double value
-     * @param epsilon the precision within which two double values will be considered equal
-     * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a.
-     */
-    public static byte compareDoubles(double a, double b, double epsilon) {
-        if (Math.abs(a - b) < epsilon) {
-            return 0;
-        }
-        if (a > b) {
-            return -1;
-        }
-        return 1;
-    }
-
-    static public final <T> List<T> reverse(final List<T> l) {
-        final List<T> newL = new ArrayList<T>(l);
-        Collections.reverse(newL);
-        return newL;
-    }
-}
-
-
diff --git a/src/main/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractor.java b/src/main/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractor.java
deleted file mode 100644
index 8de9d4e..0000000
--- a/src/main/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractor.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.utils;
-
-import htsjdk.samtools.BamFileIoUtils;
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMTextHeaderCodec;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
-import htsjdk.samtools.util.BufferedLineReader;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.CollectionUtil;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.IntervalList;
-import htsjdk.variant.vcf.VCFFileReader;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Tiny class for automatically loading a SAMSequenceDictionary given a file
- * @author farjoun on 2/25/2014
- */
-public class SAMSequenceDictionaryExtractor {
-
-    enum TYPE {
-        FASTA(ReferenceSequenceFileFactory.FASTA_EXTENSIONS) {
-            @Override
-            SAMSequenceDictionary extractDictionary(final File reference) {
-                final SAMSequenceDictionary dict = ReferenceSequenceFileFactory.getReferenceSequenceFile(reference).getSequenceDictionary();
-                if (dict == null)
-                    throw new SAMException("Could not find dictionary next to reference file " + reference.getAbsoluteFile());
-                return dict;
-            }
-        },
-        DICTIONARY(IOUtil.DICT_FILE_EXTENSION) {
-            @Override
-            SAMSequenceDictionary extractDictionary(final File dictionary) {
-                BufferedLineReader bufferedLineReader = null;
-                try {
-                    bufferedLineReader = new BufferedLineReader(new FileInputStream(dictionary));
-                    final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
-                    final SAMFileHeader header = codec.decode(bufferedLineReader, dictionary.toString());
-                    return header.getSequenceDictionary();
-                } catch (final FileNotFoundException e) {
-                    throw new SAMException("Could not open sequence dictionary file: " + dictionary, e);
-                } finally {
-                    CloserUtil.close(bufferedLineReader);
-                }
-            }
-        },
-        SAM(IOUtil.SAM_FILE_EXTENSION, BamFileIoUtils.BAM_FILE_EXTENSION) {
-            @Override
-            SAMSequenceDictionary extractDictionary(final File sam) {
-                return SamReaderFactory.makeDefault().getFileHeader(sam).getSequenceDictionary();
-            }
-        },
-        VCF(IOUtil.VCF_EXTENSIONS) {
-            @Override
-            SAMSequenceDictionary extractDictionary(final File vcf) {
-                VCFFileReader vcfFileReader = null;
-                try {
-                    vcfFileReader = new VCFFileReader(vcf, false);
-                    return vcfFileReader.getFileHeader().getSequenceDictionary();
-                } finally {
-                    CloserUtil.close(vcfFileReader);
-                }
-            }
-        },
-        INTERVAL_LIST(IOUtil.INTERVAL_LIST_FILE_EXTENSION) {
-            @Override
-            SAMSequenceDictionary extractDictionary(final File intervalList) {
-                return IntervalList.fromFile(intervalList).getHeader().getSequenceDictionary();
-            }
-        };
-
-        final Collection<String> applicableExtensions;
-
-        TYPE(final String... s) {
-            applicableExtensions = CollectionUtil.makeSet(s);
-        }
-
-        TYPE(final Collection<String> extensions) {
-            applicableExtensions = extensions;
-        }
-
-        abstract SAMSequenceDictionary extractDictionary(final File file);
-
-        static TYPE forFile(final File dictionaryExtractable) {
-            for (final TYPE type : TYPE.values()) {
-                for (final String s : type.applicableExtensions) {
-                    if (dictionaryExtractable.getName().endsWith(s)) {
-                        return type;
-                    }
-                }
-            }
-            throw new SAMException("Cannot figure out type of file " + dictionaryExtractable.getAbsolutePath() + " from extension. Current implementation understands the following types: " + Arrays.toString(TYPE.values()));
-        }
-
-        @Override
-        public String toString() {
-            return super.toString() + ": " + applicableExtensions.toString();
-        }
-    }
-
-    public static SAMSequenceDictionary extractDictionary(final File file) {
-        return TYPE.forFile(file).extractDictionary(file);
-    }
-
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/Allele.java b/src/main/java/htsjdk/variant/variantcontext/Allele.java
deleted file mode 100644
index 44fc6aa..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/Allele.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.samtools.util.StringUtil;
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Immutable representation of an allele.
- *<p>
- * Types of alleles:
- *</p>
- *<pre>
- Ref: a t C g a // C is the reference base
-    : a t G g a // C base is a G in some individuals
-    : a t - g a // C base is deleted w.r.t. the reference
-    : a t CAg a // A base is inserted w.r.t. the reference sequence
- </pre>
- *<p> In these cases, where are the alleles?</p>
- *<ul>
- * <li>SNP polymorphism of C/G  -> { C , G } -> C is the reference allele</li>
- * <li>1 base deletion of C     -> { tC , t } -> C is the reference allele and we include the preceding reference base (null alleles are not allowed)</li>
- * <li>1 base insertion of A    -> { C ; CA } -> C is the reference allele (because null alleles are not allowed)</li>
- *</ul>
- *<p>
- * Suppose I see a the following in the population:
- *</p>
- *<pre>
- Ref: a t C g a // C is the reference base
-    : a t G g a // C base is a G in some individuals
-    : a t - g a // C base is deleted w.r.t. the reference
- </pre>
- * <p>
- * How do I represent this?  There are three segregating alleles:
- * </p>
- *<blockquote>
- *  { C , G , - }
- *</blockquote>
- *<p>and these are represented as:</p>
- *<blockquote>
- *  { tC, tG, t }
- *</blockquote>
- *<p>
- * Now suppose I have this more complex example:
- </p>
- <pre>
- Ref: a t C g a // C is the reference base
-    : a t - g a
-    : a t - - a
-    : a t CAg a
- </pre>
- * <p>
- * There are actually four segregating alleles:
- * </p>
- *<blockquote>
- *   { Cg , -g, --, and CAg } over bases 2-4
- *</blockquote>
- *<p>   represented as:</p>
- *<blockquote>
- *   { tCg, tg, t, tCAg }
- *</blockquote>
- *<p>
- * Critically, it should be possible to apply an allele to a reference sequence to create the
- * correct haplotype sequence:</p>
- *<blockquote>
- * Allele + reference => haplotype
- *</blockquote>
- *<p>
- * For convenience, we are going to create Alleles where the GenomeLoc of the allele is stored outside of the
- * Allele object itself.  So there's an idea of an A/C polymorphism independent of it's surrounding context.
- *
- * Given list of alleles it's possible to determine the "type" of the variation
- </p>
- <pre>
-      A / C @ loc => SNP
-      - / A => INDEL
- </pre>
- * <p>
- * If you know where allele is the reference, you can determine whether the variant is an insertion or deletion.
- * </p>
- * <p>
- * Alelle also supports is concept of a NO_CALL allele.  This Allele represents a haplotype that couldn't be
- * determined. This is usually represented by a '.' allele.
- * </p>
- * <p>
- * Note that Alleles store all bases as bytes, in **UPPER CASE**.  So 'atc' == 'ATC' from the perspective of an
- * Allele.
- * </p>
- * @author ebanks, depristo
- */
-public class Allele implements Comparable<Allele>, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    private static final byte[] EMPTY_ALLELE_BASES = new byte[0];
-
-    private boolean isRef = false;
-    private boolean isNoCall = false;
-    private boolean isSymbolic = false;
-
-    private byte[] bases = null;
-
-    /** A generic static NO_CALL allele for use */
-    public final static String NO_CALL_STRING = ".";
-
-    /** A generic static SPAN_DEL allele for use */
-    public final static String SPAN_DEL_STRING = "*";
-
-    // no public way to create an allele
-    protected Allele(final byte[] bases, final boolean isRef) {
-        // null alleles are no longer allowed
-        if ( wouldBeNullAllele(bases) ) {
-            throw new IllegalArgumentException("Null alleles are not supported");
-        }
-
-        // no-calls are represented as no bases
-        if ( wouldBeNoCallAllele(bases) ) {
-            this.bases = EMPTY_ALLELE_BASES;
-            isNoCall = true;
-            if ( isRef ) throw new IllegalArgumentException("Cannot tag a NoCall allele as the reference allele");
-            return;
-        }
-
-        if ( wouldBeSymbolicAllele(bases) ) {
-            isSymbolic = true;
-            if ( isRef ) throw new IllegalArgumentException("Cannot tag a symbolic allele as the reference allele");
-        }
-        else {
-            StringUtil.toUpperCase(bases);
-        }
-
-        this.isRef = isRef;
-        this.bases = bases;
-
-        if ( ! acceptableAlleleBases(bases, isRef) )
-            throw new IllegalArgumentException("Unexpected base in allele bases \'" + new String(bases)+"\'");
-    }
-
-    protected Allele(final String bases, final boolean isRef) {
-        this(bases.getBytes(), isRef);
-    }
-
-    /**
-     * Creates a new allele based on the provided one.  Ref state will be copied unless ignoreRefState is true
-     * (in which case the returned allele will be non-Ref).
-     *
-     * This method is efficient because it can skip the validation of the bases (since the original allele was already validated)
-     *
-     * @param allele  the allele from which to copy the bases
-     * @param ignoreRefState  should we ignore the reference state of the input allele and use the default ref state?
-     */
-    protected Allele(final Allele allele, final boolean ignoreRefState) {
-        this.bases = allele.bases;
-        this.isRef = ignoreRefState ? false : allele.isRef;
-        this.isNoCall = allele.isNoCall;
-        this.isSymbolic = allele.isSymbolic;
-    }
-
-
-    private final static Allele REF_A = new Allele("A", true);
-    private final static Allele ALT_A = new Allele("A", false);
-    private final static Allele REF_C = new Allele("C", true);
-    private final static Allele ALT_C = new Allele("C", false);
-    private final static Allele REF_G = new Allele("G", true);
-    private final static Allele ALT_G = new Allele("G", false);
-    private final static Allele REF_T = new Allele("T", true);
-    private final static Allele ALT_T = new Allele("T", false);
-    private final static Allele REF_N = new Allele("N", true);
-    private final static Allele ALT_N = new Allele("N", false);
-    public final static Allele SPAN_DEL = new Allele(SPAN_DEL_STRING, false);
-    public final static Allele NO_CALL = new Allele(NO_CALL_STRING, false);
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // creation routines
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Create a new Allele that includes bases and if tagged as the reference allele if isRef == true.  If bases
-     * == '-', a Null allele is created.  If bases ==  '.', a no call Allele is created. If bases ==  '*', a spanning deletions Allele is created.
-     *
-     * @param bases the DNA sequence of this variation, '-', '.', or '*'
-     * @param isRef should we make this a reference allele?
-     * @throws IllegalArgumentException if bases contains illegal characters or is otherwise malformated
-     */
-    public static Allele create(final byte[] bases, final boolean isRef) {
-        if ( bases == null )
-            throw new IllegalArgumentException("create: the Allele base string cannot be null; use new Allele() or new Allele(\"\") to create a Null allele");
-
-        if ( bases.length == 1 ) {
-            // optimization to return a static constant Allele for each single base object
-            switch (bases[0]) {
-                case '.':
-                    if ( isRef ) throw new IllegalArgumentException("Cannot tag a NoCall allele as the reference allele");
-                    return NO_CALL;
-                case '*':
-                    if ( isRef ) throw new IllegalArgumentException("Cannot tag a spanning deletions allele as the reference allele");
-                    return SPAN_DEL;
-                case 'A': case 'a' : return isRef ? REF_A : ALT_A;
-                case 'C': case 'c' : return isRef ? REF_C : ALT_C;
-                case 'G': case 'g' : return isRef ? REF_G : ALT_G;
-                case 'T': case 't' : return isRef ? REF_T : ALT_T;
-                case 'N': case 'n' : return isRef ? REF_N : ALT_N;
-                default: throw new IllegalArgumentException("Illegal base [" + (char)bases[0] + "] seen in the allele");
-            }
-        } else {
-            return new Allele(bases, isRef);
-        }
-    }
-
-    public static Allele create(final byte base, final boolean isRef) {
-        return create( new byte[]{ base }, isRef);
-    }
-
-    public static Allele create(final byte base) {
-        return create( base, false );
-    }
-
-    public static Allele extend(final Allele left, final byte[] right) {
-        if (left.isSymbolic())
-            throw new IllegalArgumentException("Cannot extend a symbolic allele");
-        byte[] bases = new byte[left.length() + right.length];
-        System.arraycopy(left.getBases(), 0, bases, 0, left.length());
-        System.arraycopy(right, 0, bases, left.length(), right.length);
-
-        return create(bases, left.isReference());
-    }
-
-    /**
-     * @param bases  bases representing an allele
-     * @return true if the bases represent the null allele
-     */
-    public static boolean wouldBeNullAllele(final byte[] bases) {
-        return (bases.length == 1 && bases[0] == htsjdk.variant.vcf.VCFConstants.NULL_ALLELE) || bases.length == 0;
-    }
-
-    /**
-     * @param bases bases representing an allele
-     * @return true if the bases represent the SPAN_DEL allele
-     */
-    public static boolean wouldBeStarAllele(final byte[] bases) {
-        return bases.length == 1 && bases[0] == htsjdk.variant.vcf.VCFConstants.SPANNING_DELETION_ALLELE;
-    }
-
-    /**
-     * @param bases  bases representing an allele
-     * @return true if the bases represent the NO_CALL allele
-     */
-    public static boolean wouldBeNoCallAllele(final byte[] bases) {
-        return bases.length == 1 && bases[0] == htsjdk.variant.vcf.VCFConstants.NO_CALL_ALLELE;
-    }
-
-    /**
-     * @param bases  bases representing an allele
-     * @return true if the bases represent a symbolic allele
-     */
-    public static boolean wouldBeSymbolicAllele(final byte[] bases) {
-    	if ( bases.length <= 1 )
-            return false;
-        else {
-            final String strBases = new String(bases);
-            return (bases[0] == '<' || bases[bases.length-1] == '>') || // symbolic or large insertion
-            		(bases[0] == '.' || bases[bases.length-1] == '.') || // single breakend
-                    (strBases.contains("[") || strBases.contains("]")); // mated breakend
-        }
-    }
-
-    /**
-     * @param bases  bases representing a reference allele
-     * @return true if the bases represent the well formatted allele
-     */
-    public static boolean acceptableAlleleBases(final String bases) {
-        return acceptableAlleleBases(bases.getBytes(), true);
-    }
-
-    /**
-     * @param bases bases representing an allele
-     * @param isReferenceAllele is a reference allele
-     * @return true if the bases represent the well formatted allele
-     */
-    public static boolean acceptableAlleleBases(final String bases, boolean isReferenceAllele) {
-        return acceptableAlleleBases(bases.getBytes(), isReferenceAllele);
-    }
-
-    /**
-     * @param bases  bases representing a reference allele
-     * @return true if the bases represent the well formatted allele
-     */
-    public static boolean acceptableAlleleBases(final byte[] bases) {
-        return acceptableAlleleBases(bases, true);
-    }
-
-    /**
-     *
-     * @param bases bases representing an allele
-     * @param isReferenceAllele true if a reference allele
-     * @return true if the bases represent the well formatted allele
-     */
-    public static boolean acceptableAlleleBases(final byte[] bases, final boolean isReferenceAllele) {
-        if ( wouldBeNullAllele(bases) )
-            return false;
-
-        if ( wouldBeNoCallAllele(bases) || wouldBeSymbolicAllele(bases) )
-            return true;
-
-        if ( wouldBeStarAllele(bases) )
-            return !isReferenceAllele;
-
-        for (byte base :  bases ) {
-            switch (base) {
-                case 'A': case 'C': case 'G': case 'T':  case 'a': case 'c': case 'g': case 't': case 'N' : case 'n' :
-                    break;
-                default:
-                    return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * @see #Allele(byte[], boolean)
-     *
-     * @param bases  bases representing an allele
-     * @param isRef  is this the reference allele?
-     */
-    public static Allele create(final String bases, final boolean isRef) {
-        return create(bases.getBytes(), isRef);
-    }
-
-
-    /**
-     * Creates a non-Ref allele.  @see Allele(byte[], boolean) for full information
-     *
-     * @param bases  bases representing an allele
-     */
-    public static Allele create(final String bases) {
-        return create(bases, false);
-    }
-
-    /**
-     * Creates a non-Ref allele.  @see Allele(byte[], boolean) for full information
-     *
-     * @param bases  bases representing an allele
-     */
-    public static Allele create(final byte[] bases) {
-        return create(bases, false);
-    }
-
-    /**
-     * Creates a new allele based on the provided one.  Ref state will be copied unless ignoreRefState is true
-     * (in which case the returned allele will be non-Ref).
-     *
-     * This method is efficient because it can skip the validation of the bases (since the original allele was already validated)
-     *
-     * @param allele  the allele from which to copy the bases
-     * @param ignoreRefState  should we ignore the reference state of the input allele and use the default ref state?
-     */
-    public static Allele create(final Allele allele, final boolean ignoreRefState) {
-        return new Allele(allele, ignoreRefState);
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // accessor routines
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    // Returns true if this is the NO_CALL allele
-    public boolean isNoCall()           { return isNoCall; }
-    // Returns true if this is not the NO_CALL allele
-    public boolean isCalled()           { return ! isNoCall(); }
-
-    // Returns true if this Allele is the reference allele
-    public boolean isReference()        { return isRef; }
-    // Returns true if this Allele is not the reference allele
-    public boolean isNonReference()     { return ! isReference(); }
-
-    // Returns true if this Allele is symbolic (i.e. no well-defined base sequence)
-    public boolean isSymbolic()         { return isSymbolic; }
-
-    // Returns a nice string representation of this object
-    public String toString() {
-        return ( isNoCall() ? NO_CALL_STRING : getDisplayString() ) + (isReference() ? "*" : "");
-    }
-
-    /**
-     * Return the DNA bases segregating in this allele.  Note this isn't reference polarized,
-     * so the Null allele is represented by a vector of length 0
-     *
-     * @return the segregating bases
-     */
-    public byte[] getBases() { return isSymbolic ? EMPTY_ALLELE_BASES : bases; }
-
-    /**
-     * Return the DNA bases segregating in this allele in String format.
-     * This is useful, because toString() adds a '*' to reference alleles and getBases() returns garbage when you call toString() on it.
-     *
-     * @return the segregating bases
-     */
-    public String getBaseString() { return isNoCall() ? NO_CALL_STRING : new String(getBases()); }
-
-    /**
-     * Return the printed representation of this allele.
-     * Same as getBaseString(), except for symbolic alleles.
-     * For symbolic alleles, the base string is empty while the display string contains <TAG>.
-     *
-     * @return the allele string representation
-     */
-    public String getDisplayString() { return new String(bases); }
-
-    /**
-     * Same as #getDisplayString() but returns the result as byte[].
-     *
-     * Slightly faster then getDisplayString()
-     *
-     * @return the allele string representation
-     */
-    public byte[] getDisplayBases() { return bases; }
-
-    /**
-     * @param other  the other allele
-     *
-     * @return true if these alleles are equal
-     */
-    public boolean equals(Object other) {
-        return ( ! (other instanceof Allele) ? false : equals((Allele)other, false) );
-    }
-
-    /**
-     * @return hash code
-     */
-    public int hashCode() {
-        int hash = 1;
-        for (int i = 0; i < bases.length; i++)
-            hash += (i+1) * bases[i];
-        return hash;
-    }
-
-    /**
-     * Returns true if this and other are equal.  If ignoreRefState is true, then doesn't require both alleles has the
-     * same ref tag
-     *
-     * @param other            allele to compare to
-     * @param ignoreRefState   if true, ignore ref state in comparison
-     * @return true if this and other are equal
-     */
-    public boolean equals(final Allele other, final boolean ignoreRefState) {
-        return this == other || (isRef == other.isRef || ignoreRefState) && isNoCall == other.isNoCall && (bases == other.bases || Arrays.equals(bases, other.bases));
-    }
-
-    /**
-     * @param test  bases to test against
-     *
-     * @return  true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
-     */
-    public boolean basesMatch(final byte[] test) { return !isSymbolic && (bases == test || Arrays.equals(bases, test)); }
-
-    /**
-     * @param test  bases to test against
-     *
-     * @return  true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
-     */
-    public boolean basesMatch(final String test) { return basesMatch(test.toUpperCase().getBytes()); }
-
-    /**
-     * @param test  allele to test against
-     *
-     * @return  true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
-     */
-    public boolean basesMatch(final Allele test) { return basesMatch(test.getBases()); }
-
-    /**
-     * @return the length of this allele.  Null and NO_CALL alleles have 0 length.
-     */
-    public int length() {
-        return isSymbolic ? 0 : bases.length;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // useful static functions
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public static Allele getMatchingAllele(final Collection<Allele> allAlleles, final byte[] alleleBases) {
-        for ( Allele a : allAlleles ) {
-            if ( a.basesMatch(alleleBases) ) {
-                return a;
-            }
-        }
-
-        if ( wouldBeNoCallAllele(alleleBases) )
-            return NO_CALL;
-        else
-            return null;    // couldn't find anything
-    }
-
-    public int compareTo(final Allele other) {
-        if ( isReference() && other.isNonReference() )
-            return -1;
-        else if ( isNonReference() && other.isReference() ) 
-            return 1;
-        else
-            return getBaseString().compareTo(other.getBaseString()); // todo -- potential performance issue
-    }
-
-    public static boolean oneIsPrefixOfOther(final Allele a1, final Allele a2) {
-        if ( a2.length() >= a1.length() )
-            return firstIsPrefixOfSecond(a1, a2);
-        else
-            return firstIsPrefixOfSecond(a2, a1);
-    }
-
-    private static boolean firstIsPrefixOfSecond(final Allele a1, final Allele a2) {
-        String a1String = a1.getBaseString();
-        return a2.getBaseString().substring(0, a1String.length()).equals(a1String);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/CommonInfo.java b/src/main/java/htsjdk/variant/variantcontext/CommonInfo.java
deleted file mode 100644
index e2f9083..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/CommonInfo.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-
-/**
- * Common utility routines for VariantContext and Genotype
- *
- * @author depristo
- */
-public final class CommonInfo implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    public static final double NO_LOG10_PERROR = 1.0;
-
-    private static Set<String> NO_FILTERS = Collections.emptySet();
-    private static Map<String, Object> NO_ATTRIBUTES = Collections.unmodifiableMap(new HashMap<String, Object>());
-
-    private double log10PError = NO_LOG10_PERROR;
-    private String name = null;
-    private Set<String> filters = null;
-    private Map<String, Object> attributes = NO_ATTRIBUTES;
-
-    public CommonInfo(String name, double log10PError, Set<String> filters, Map<String, Object> attributes) {
-        this.name = name;
-        setLog10PError(log10PError);
-        this.filters = filters;
-        if ( attributes != null && ! attributes.isEmpty() ) {
-            this.attributes = attributes;
-        }
-    }
-
-    /**
-     * @return the name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets the name
-     *
-     * @param name    the name associated with this information
-     */
-    public void setName(String name) {
-        if ( name == null ) throw new IllegalArgumentException("Name cannot be null " + this);
-        this.name = name;
-    }
-
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Filter
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public Set<String> getFiltersMaybeNull() {
-        return filters;
-    }
-
-    public Set<String> getFilters() {
-        return filters == null ? NO_FILTERS : Collections.unmodifiableSet(filters);
-    }
-
-    public boolean filtersWereApplied() {
-        return filters != null;
-    }
-
-    public boolean isFiltered() {
-        return filters == null ? false : !filters.isEmpty();
-    }
-
-    public boolean isNotFiltered() {
-        return ! isFiltered();
-    }
-
-    public void addFilter(String filter) {
-        if ( filters == null ) // immutable -> mutable
-            filters = new HashSet<String>();
-
-        if ( filter == null ) throw new IllegalArgumentException("BUG: Attempting to add null filter " + this);
-        if ( getFilters().contains(filter) ) throw new IllegalArgumentException("BUG: Attempting to add duplicate filter " + filter + " at " + this);
-        filters.add(filter);
-    }
-
-    public void addFilters(Collection<String> filters) {
-        if ( filters == null ) throw new IllegalArgumentException("BUG: Attempting to add null filters at" + this);
-        for ( String f : filters )
-            addFilter(f);
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Working with log error rates
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public boolean hasLog10PError() {
-        return getLog10PError() != NO_LOG10_PERROR;
-    }
-
-    /**
-     * @return the -1 * log10-based error estimate
-     */
-    public double getLog10PError() { return log10PError; }
-
-    /**
-     * Floating-point arithmetic allows signed zeros such as +0.0 and -0.0.
-     * Adding the constant 0.0 to the result ensures that the returned value is never -0.0
-     * since (-0.0) + 0.0 = 0.0.
-     *
-     * When this is set to '0.0', the resulting VCF would be 0 instead of -0.
-     *
-     * @return double - Phred scaled quality score
-     */
-    public double getPhredScaledQual() { return (getLog10PError() * -10) + 0.0; }
-
-    public void setLog10PError(double log10PError) {
-        if ( log10PError > 0 && log10PError != NO_LOG10_PERROR)
-            throw new IllegalArgumentException("BUG: log10PError cannot be > 0 : " + this.log10PError);
-        if ( Double.isInfinite(this.log10PError) )
-            throw new IllegalArgumentException("BUG: log10PError should not be Infinity");
-        if ( Double.isNaN(this.log10PError) )
-            throw new IllegalArgumentException("BUG: log10PError should not be NaN");
-        this.log10PError = log10PError;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Working with attributes
-    //
-    // ---------------------------------------------------------------------------------------------------------
-    public void clearAttributes() {
-        attributes = new HashMap<String, Object>();
-    }
-
-    /**
-     * @return the attribute map
-     */
-    public Map<String, Object> getAttributes() {
-        return Collections.unmodifiableMap(attributes);
-    }
-
-    // todo -- define common attributes as enum
-
-    public void setAttributes(Map<String, ?> map) {
-        clearAttributes();
-        putAttributes(map);
-    }
-
-    public void putAttribute(String key, Object value) {
-        putAttribute(key, value, false);
-    }
-
-    public void putAttribute(String key, Object value, boolean allowOverwrites) {
-        if ( ! allowOverwrites && hasAttribute(key) )
-            throw new IllegalStateException("Attempting to overwrite key->value binding: key = " + key + " this = " + this);
-
-        if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
-            attributes = new HashMap<String, Object>();
-
-        attributes.put(key, value);
-    }
-
-    public void removeAttribute(String key) {
-        if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
-            attributes = new HashMap<String, Object>();
-        attributes.remove(key);
-    }
-
-    public void putAttributes(Map<String, ?> map) {
-        if ( map != null ) {
-            // for efficiency, we can skip the validation if the map is empty
-            if (attributes.isEmpty()) {
-                if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
-                    attributes = new HashMap<String, Object>();
-                attributes.putAll(map);
-            } else {
-                for ( Map.Entry<String, ?> elt : map.entrySet() ) {
-                    putAttribute(elt.getKey(), elt.getValue(), false);
-                }
-            }
-        }
-    }
-
-    public boolean hasAttribute(String key) {
-        return attributes.containsKey(key);
-    }
-
-    public int getNumAttributes() {
-        return attributes.size();
-    }
-
-    /**
-     * @param key    the attribute key
-     *
-     * @return the attribute value for the given key (or null if not set)
-     */
-    public Object getAttribute(String key) {
-        return attributes.get(key);
-    }
-
-    public Object getAttribute(String key, Object defaultValue) {
-        if ( hasAttribute(key) )
-            return attributes.get(key);
-        else
-            return defaultValue;
-    }
-
-    /**
-     * Gets the attributes from a key as a list.
-     *
-     * Note: int[] and double[] arrays are boxed.
-     *
-     * @return empty list if the key was not found; {@link Collections#singletonList(Object)} if
-     * there is only one value; a list containing the values if the value is a {@link List} or array.
-     */
-    @SuppressWarnings("unchecked")
-    public List<Object> getAttributeAsList(String key) {
-        Object o = getAttribute(key);
-        if ( o == null ) return Collections.emptyList();
-        if ( o instanceof List ) return (List<Object>)o;
-        if ( o.getClass().isArray() ) {
-            if (o instanceof int[]) {
-                return Arrays.stream((int[])o).boxed().collect(Collectors.toList());
-            } else if (o instanceof double[]) {
-                return Arrays.stream((double[])o).boxed().collect(Collectors.toList());
-            }
-            return Arrays.asList((Object[])o);
-        }
-        return Collections.singletonList(o);
-    }
-
-    private <T> List<T> getAttributeAsList(String key, Function<Object, T> transformer) {
-        return getAttributeAsList(key).stream().map(transformer).collect(Collectors.toList());
-    }
-
-    public List<String> getAttributeAsStringList(String key, String defaultValue) {
-        return getAttributeAsList(key, x -> (x == null) ? defaultValue : String.valueOf(x));
-    }
-
-    public List<Integer> getAttributeAsIntList(String key, Integer defaultValue) {
-        return getAttributeAsList(key, x -> {
-            if (x == null || x == VCFConstants.MISSING_VALUE_v4) {
-                return defaultValue;
-            } else if (x instanceof Number) {
-                return ((Number) x).intValue();
-            } else {
-                return Integer.valueOf((String)x); // throws an exception if this isn't a string
-            }
-        });
-    }
-
-    public List<Double> getAttributeAsDoubleList(String key, Double defaultValue) {
-        return getAttributeAsList(key, x -> {
-            if (x == null || x == VCFConstants.MISSING_VALUE_v4) {
-                return defaultValue;
-            } else if (x instanceof Number) {
-                return ((Number) x).doubleValue();
-            } else {
-                return Double.valueOf((String)x); // throws an exception if this isn't a string
-            }
-        });
-    }
-
-    public String getAttributeAsString(String key, String defaultValue) {
-        Object x = getAttribute(key);
-        if ( x == null ) return defaultValue;
-        if ( x instanceof String ) return (String)x;
-        return String.valueOf(x); // throws an exception if this isn't a string
-    }
-
-    public int getAttributeAsInt(String key, int defaultValue) {
-        Object x = getAttribute(key);
-        if ( x == null || x == VCFConstants.MISSING_VALUE_v4 ) return defaultValue;
-        if ( x instanceof Integer ) return (Integer)x;
-        return Integer.valueOf((String)x); // throws an exception if this isn't a string
-    }
-
-    public double getAttributeAsDouble(String key, double defaultValue) {
-        Object x = getAttribute(key);
-        if ( x == null ) return defaultValue;
-        if ( x instanceof Double ) return (Double)x;
-        if ( x instanceof Integer ) return (Integer)x;
-        return Double.valueOf((String)x); // throws an exception if this isn't a string
-    }
-
-    public boolean getAttributeAsBoolean(String key, boolean defaultValue) {
-        Object x = getAttribute(key);
-        if ( x == null ) return defaultValue;
-        if ( x instanceof Boolean ) return (Boolean)x;
-        return Boolean.valueOf((String)x); // throws an exception if this isn't a string
-    }
-
-//    public String getAttributeAsString(String key)      { return (String.valueOf(getExtendedAttribute(key))); } // **NOTE**: will turn a null Object into the String "null"
-//    public int getAttributeAsInt(String key)            { Object x = getExtendedAttribute(key); return x instanceof Integer ? (Integer)x : Integer.valueOf((String)x); }
-//    public double getAttributeAsDouble(String key)      { Object x = getExtendedAttribute(key); return x instanceof Double ? (Double)x : Double.valueOf((String)x); }
-//    public boolean getAttributeAsBoolean(String key)      { Object x = getExtendedAttribute(key); return x instanceof Boolean ? (Boolean)x : Boolean.valueOf((String)x); }
-//    public Integer getAttributeAsIntegerNoException(String key)  { try {return getAttributeAsInt(key);} catch (Exception e) {return null;} }
-//    public Double getAttributeAsDoubleNoException(String key)    { try {return getAttributeAsDouble(key);} catch (Exception e) {return null;} }
-//    public String getAttributeAsStringNoException(String key)    { if (getExtendedAttribute(key) == null) return null; return getAttributeAsString(key); }
-//    public Boolean getAttributeAsBooleanNoException(String key)  { try {return getAttributeAsBoolean(key);} catch (Exception e) {return null;} }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/FastGenotype.java b/src/main/java/htsjdk/variant/variantcontext/FastGenotype.java
deleted file mode 100644
index 665e672..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/FastGenotype.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * This class encompasses all the basic information about a genotype.
- *
- * For the sake of performance, it does not make a copy of the Collections/arrays it's constructed from, and so
- * subsequent changes to those Collections/arrays will be reflected in the FastGenotype object
- *
- * A genotype has several key fields
- *
- * <ul>
- * <li> a sample name, must be a non-null string</li>
- * <li> an ordered list of alleles, intrepreted as the genotype of the sample,
- *    each allele for each chromosome given in order.  If alleles = [a*, t]
- *    then the sample is a/t, with a (the reference from the *) the first
- *    chromosome and t on the second chromosome</li>
- * <li> an <code>isPhased</code> marker indicating where the alleles are phased with respect to some global
- *    coordinate system.  See VCF4.1 spec for a detailed discussion</li>
- * <li> Inline, optimized <code>int</code>s and <code>int[]</code> values for:
- * <ul>
- *      <li> GQ: the phred-scaled genotype quality, or <code>-1</code> if it's missing</li>
- *      <li> DP: the count of reads at this locus for this sample, or <code>-1</code> if missing</li>
- *      <li> AD: an array of counts of reads at this locus, one for each Allele at the site,
- *             that is, for each allele in the surrounding <code>VariantContext</code>.  <code>null</code> if missing.</li>
- *      <li> PL: phred-scaled genotype likelihoods in standard VCF4.1 order for
- *             all combinations of the alleles in the surrounding <code>VariantContext</code>, given
- *             the ploidy of the sample (from the alleles vector).  <code>null</code> if missing.</li>
- * </ul>
- * </li>
- *
- * <li> A general map from String keys to -> Object values for all other attributes in
- *    this genotype.  Note that this map should not contain duplicate values for the
- *    standard bindings for GQ, DP, AD, and PL.  Genotype filters can be put into
- *    this genotype, but it isn't respected by the GATK in analyses</li>
- *</ul>
- *
- * <p>The only way to build a <code>Genotype</code> object is with a <code>GenotypeBuilder</code>, which permits values
- * to be set in any order, which means that <code>GenotypeBuilder</code> may at some in the chain of
- * sets pass through invalid states that are not permitted in a fully formed immutable
- * <code>Genotype</code>.</p>
- *
- * <p>Note this is a simplified, refactored Genotype object based on the original
- * generic (and slow) implementation from the original VariantContext + Genotype
- * codebase.</p>
- *
- * @author Mark DePristo
- * @since 05/12
- */
-public final class FastGenotype extends Genotype {
-    private final List<Allele> alleles;
-    private final boolean isPhased;
-    private final int GQ;
-    private final int DP;
-    private final int[] AD;
-    private final int[] PL;
-    private final Map<String, Object> extendedAttributes;
-
-    /**
-     * The only way to make one of these, for use by GenotypeBuilder only
-     *
-     * @param sampleName
-     * @param alleles
-     * @param isPhased
-     * @param GQ
-     * @param DP
-     * @param AD
-     * @param PL
-     * @param extendedAttributes
-     */
-    protected FastGenotype(final String sampleName,
-                           final List<Allele> alleles,
-                           final boolean isPhased,
-                           final int GQ,
-                           final int DP,
-                           final int[] AD,
-                           final int[] PL,
-                           final String filters,
-                           final Map<String, Object> extendedAttributes) {
-        super(sampleName, filters);
-        this.alleles = alleles;
-        this.isPhased = isPhased;
-        this.GQ = GQ;
-        this.DP = DP;
-        this.AD = AD;
-        this.PL = PL;
-        this.extendedAttributes = extendedAttributes;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Implmenting the abstract methods
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    @Override public List<Allele> getAlleles() {
-        return alleles;
-    }
-
-    @Override public Allele getAllele(int i) {
-        return alleles.get(i);
-    }
-
-    @Override public boolean isPhased() {
-        return isPhased;
-    }
-
-    @Override public int getDP() {
-        return DP;
-    }
-
-    @Override public int[] getAD() {
-        return AD;
-    }
-
-    @Override public int getGQ()  {
-        return GQ;
-    }
-
-    @Override public int[] getPL() {
-        return PL;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    // 
-    // get routines for extended attributes
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public Map<String, Object> getExtendedAttributes() {
-        return extendedAttributes;
-    }
-
-    /**
-     * Is values a valid AD or PL field
-     * @param values
-     * @return
-     */
-    private static boolean validADorPLField(final int[] values) {
-        if ( values != null )
-            for ( int v : values )
-                if ( v < 0 )
-                    return false;
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/variantcontext/Genotype.java b/src/main/java/htsjdk/variant/variantcontext/Genotype.java
deleted file mode 100644
index 8d781a0..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/Genotype.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * This class encompasses all the basic information about a genotype.  It is immutable.
- *
- * @author Mark DePristo
- */
-public abstract class Genotype implements Comparable<Genotype>, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    /**
-     * A list of genotype field keys corresponding to values we
-     * manage inline in the Genotype object.  They must not appear in the
-     * extended attributes map
-     */
-    public final static Collection<String> PRIMARY_KEYS = Arrays.asList(
-            VCFConstants.GENOTYPE_FILTER_KEY,
-            VCFConstants.GENOTYPE_KEY,
-            VCFConstants.GENOTYPE_QUALITY_KEY,
-            VCFConstants.DEPTH_KEY,
-            VCFConstants.GENOTYPE_ALLELE_DEPTHS,
-            VCFConstants.GENOTYPE_PL_KEY);
-
-    public final static String PHASED_ALLELE_SEPARATOR = "|";
-    public final static String UNPHASED_ALLELE_SEPARATOR = "/";
-
-    private final String sampleName;
-    private GenotypeType type = null;
-    private final String filters;
-
-    protected Genotype(final String sampleName, final String filters) {
-        this.sampleName = sampleName;
-        this.filters = filters == null || filters.isEmpty() ? null : filters;
-    }
-
-    /**
-     * @return the alleles for this genotype.  Cannot be null.  May be empty
-     */
-    public abstract List<Allele> getAlleles();
-
-    /**
-     * Returns how many times allele appears in this genotype object?
-     *
-     * @param allele
-     * @return a value >= 0 indicating how many times the allele occurred in this sample's genotype
-     */
-    public int countAllele(final Allele allele) {
-        int c = 0;
-        for ( final Allele a : getAlleles() )
-            if ( a.equals(allele) )
-                c++;
-
-        return c;
-    }
-
-    /**
-     * Get the ith allele in this genotype
-     *
-     * @param i the ith allele, must be < the ploidy, starting with 0
-     * @return the allele at position i, which cannot be null
-     */
-    public abstract Allele getAllele(int i);
-
-    /**
-     * Are the alleles phased w.r.t. the global phasing system?
-     *
-     * @return true if yes
-     */
-    public abstract boolean isPhased();
-
-    /**
-     * What is the ploidy of this sample?
-     *
-     * @return the ploidy of this genotype.  0 if the site is no-called.
-     */
-    public int getPloidy() {
-        return getAlleles().size();
-    }
-
-    /**
-     * @return the sequencing depth of this sample, or -1 if this value is missing
-     */
-    public abstract int getDP();
-
-    /**
-     * @return the count of reads, one for each allele in the surrounding Variant context,
-     *      matching the corresponding allele, or null if this value is missing.  MUST
-     *      NOT BE MODIFIED!
-     */
-    public abstract int[] getAD();
-
-    /**
-     * Returns the name associated with this sample.
-     *
-     * @return a non-null String
-     */
-    public String getSampleName() {
-        return sampleName;
-    }
-
-    /**
-     * Returns a phred-scaled quality score, or -1 if none is available
-     * @return
-     */
-    public abstract int getGQ();
-
-    /**
-     * Does the PL field have a value?
-     * @return true if there's a PL field value
-     */
-    public boolean hasPL() {
-        return getPL() != null;
-    }
-
-    /**
-     * Does the AD field have a value?
-     * @return true if there's a AD field value
-     */
-    public boolean hasAD() {
-        return getAD() != null;
-    }
-
-    /**
-     * Does the GQ field have a value?
-     * @return true if there's a GQ field value
-     */
-    public boolean hasGQ() {
-        return getGQ() != -1;
-    }
-
-    /**
-     * Does the DP field have a value?
-     * @return true if there's a DP field value
-     */
-    public boolean hasDP() {
-        return getDP() != -1;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // The type of this genotype
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * @return the high-level type of this sample's genotype
-     */
-    public GenotypeType getType() {
-        if ( type == null ) {
-            type = determineType();
-        }
-        return type;
-    }
-
-    /**
-     * Internal code to determine the type of the genotype from the alleles vector
-     * @return the type
-     */
-    protected GenotypeType determineType() {
-        // TODO -- this code is slow and could be optimized for the diploid case
-        final List<Allele> alleles = getAlleles();
-        if ( alleles.isEmpty() )
-            return GenotypeType.UNAVAILABLE;
-
-        boolean sawNoCall = false, sawMultipleAlleles = false;
-        Allele observedAllele = null;
-
-        for ( final Allele allele : alleles ) {
-            if ( allele.isNoCall() )
-                sawNoCall = true;
-            else if ( observedAllele == null )
-                observedAllele = allele;
-            else if ( !allele.equals(observedAllele) )
-                sawMultipleAlleles = true;
-        }
-
-        if ( sawNoCall ) {
-            if ( observedAllele == null )
-                return GenotypeType.NO_CALL;
-            return GenotypeType.MIXED;
-        }
-
-        if ( observedAllele == null )
-            throw new IllegalStateException("BUG: there are no alleles present in this genotype but the alleles list is not null");
-
-        return sawMultipleAlleles ? GenotypeType.HET : observedAllele.isReference() ? GenotypeType.HOM_REF : GenotypeType.HOM_VAR;
-    }
-
-    /**
-     * @return true if all observed alleles are the same (regardless of whether they are ref or alt); if any alleles are no-calls, this method will return false.
-     */
-    public boolean isHom()    { return isHomRef() || isHomVar(); }
-
-    /**
-     * @return true if all observed alleles are ref; if any alleles are no-calls, this method will return false.
-     */
-    public boolean isHomRef() { return getType() == GenotypeType.HOM_REF; }
-
-    /**
-     * @return true if all observed alleles are alt; if any alleles are no-calls, this method will return false.
-     */
-    public boolean isHomVar() { return getType() == GenotypeType.HOM_VAR; }
-
-    /**
-     * @return true if we're het (observed alleles differ); if the ploidy is less than 2 or if any alleles are no-calls, this method will return false.
-     */
-    public boolean isHet() { return getType() == GenotypeType.HET; }
-
-    /**
-     * @return true if we're het (observed alleles differ) and neither allele is reference; if the ploidy is less than 2 or if any alleles are no-calls, this method will return false.
-     */
-    public boolean isHetNonRef() { return (getType() == GenotypeType.HET && getAllele(0).isNonReference() && getAllele(1).isNonReference()); }
-
-    /**
-     * @return true if this genotype is not actually a genotype but a "no call" (e.g. './.' in VCF); if any alleles are not no-calls (even if some are), this method will return false.
-     */
-    public boolean isNoCall() { return getType() == GenotypeType.NO_CALL; }
-
-    /**
-     * @return true if this genotype is comprised of any alleles that are not no-calls (even if some are).
-     */
-    public boolean isCalled() { return getType() != GenotypeType.NO_CALL && getType() != GenotypeType.UNAVAILABLE; }
-
-    /**
-     * @return true if this genotype is comprised of both calls and no-calls.
-     */
-    public boolean isMixed() { return getType() == GenotypeType.MIXED; }
-
-    /**
-     * @return true if the type of this genotype is set.
-     */
-    public boolean isAvailable() { return getType() != GenotypeType.UNAVAILABLE; }
-
-    // ------------------------------------------------------------------------------
-    //
-    // methods for getting genotype likelihoods for a genotype object, if present
-    //
-    // ------------------------------------------------------------------------------
-
-    /**
-     * @return Returns true if this Genotype has PL field values
-     */
-    public boolean hasLikelihoods() {
-        return getPL() != null;
-    }
-
-    /**
-     * Convenience function that returns a string representation of the PL field of this
-     * genotype, or . if none is available.
-     *
-     * @return a non-null String representation for the PL of this sample
-     */
-    public String getLikelihoodsString() {
-        return hasLikelihoods() ? getLikelihoods().toString() : VCFConstants.MISSING_VALUE_v4;
-    }
-
-    /**
-     * Returns the GenotypesLikelihoods data associated with this Genotype, or null if missing
-     * @return null or a GenotypesLikelihood object for this sample's PL field
-     */
-    public GenotypeLikelihoods getLikelihoods() {
-        return hasLikelihoods() ? GenotypeLikelihoods.fromPLs(getPL()) : null;
-    }
-
-    /**
-     * Are all likelihoods for this sample non-informative?
-     *
-     * Returns true if all PLs are 0 => 0,0,0 => true
-     * 0,0,0,0,0,0 => true
-     * 0,10,100 => false
-     *
-     * @return true if all samples PLs are equal and == 0
-     */
-    public boolean isNonInformative() {
-        if ( getPL() == null )
-            return true;
-        else {
-            for ( final int PL : getPL() ) {
-                if ( PL != 0 )
-                    return false;
-            }
-
-            return true;
-        }
-    }
-
-    /**
-     * Unsafe low-level accessor the PL field itself, may be null.
-     *
-     * @return a pointer to the underlying PL data.  MUST NOT BE MODIFIED!
-     */
-    public abstract int[] getPL();
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Many different string representations
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Return a VCF-like string representation for the alleles of this genotype.
-     *
-     * Does not append the reference * marker on the alleles.
-     *
-     * @return a string representing the genotypes, or null if the type is unavailable.
-     */
-    public String getGenotypeString() {
-        return getGenotypeString(true);
-    }
-
-    /**
-     * Return a VCF-like string representation for the alleles of this genotype.
-     *
-     * If ignoreRefState is true, will not append the reference * marker on the alleles.
-     *
-     * @return a string representing the genotypes, or null if the type is unavailable.
-     */
-    public String getGenotypeString(boolean ignoreRefState) {
-        if ( getPloidy() == 0 )
-            return "NA";
-
-        // Notes:
-        // 1. Make sure to use the appropriate separator depending on whether the genotype is phased
-        final String separator = isPhased() ? PHASED_ALLELE_SEPARATOR : UNPHASED_ALLELE_SEPARATOR;
-        // 2. If ignoreRefState is true, then we want just the bases of the Alleles (ignoring the '*' indicating a ref Allele)
-        if (ignoreRefState) {
-          return ParsingUtils.join(separator, getAlleleStrings());
-        }
-        // 3. So that everything is deterministic with regards to integration tests, we sort Alleles (when the genotype isn't phased, of course)
-        List<Allele> alleles = isPhased() ? getAlleles() : ParsingUtils.sortList(getAlleles());
-        return ParsingUtils.join(separator, alleles);
-    }
-
-    /**
-     * Utility that returns a list of allele strings corresponding to the alleles in this sample
-     * @return
-     */
-    protected List<String> getAlleleStrings() {
-        final List<String> al = new ArrayList<String>(getPloidy());
-        for ( Allele a : getAlleles() )
-            al.add(a.getBaseString());
-
-        return al;
-    }
-
-    public String toString() {
-        return String.format("[%s %s%s%s%s%s%s%s]",
-                getSampleName(),
-                getGenotypeString(false),
-                toStringIfExists(VCFConstants.GENOTYPE_QUALITY_KEY, getGQ()),
-                toStringIfExists(VCFConstants.DEPTH_KEY, getDP()),
-                toStringIfExists(VCFConstants.GENOTYPE_ALLELE_DEPTHS, getAD()),
-                toStringIfExists(VCFConstants.GENOTYPE_PL_KEY, getPL()),
-                toStringIfExists(VCFConstants.GENOTYPE_FILTER_KEY, getFilters()),
-                sortedString(getExtendedAttributes()));
-    }
-
-    public String toBriefString() {
-        return String.format("%s:Q%d", getGenotypeString(false), getGQ());
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Comparison operations
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * comparable genotypes -> compareTo on the sample names
-     * @param genotype
-     * @return
-     */
-    @Override
-    public int compareTo(final Genotype genotype) {
-        return getSampleName().compareTo(genotype.getSampleName());
-    }
-
-    public boolean sameGenotype(final Genotype other) {
-        return sameGenotype(other, true);
-    }
-
-    public boolean sameGenotype(final Genotype other, boolean ignorePhase) {
-        if (getPloidy() != other.getPloidy())
-            return false; // gotta have the same number of allele to be equal
-
-        // By default, compare the elements in the lists of alleles, element-by-element
-        Collection<Allele> thisAlleles = this.getAlleles();
-        Collection<Allele> otherAlleles = other.getAlleles();
-
-        if (ignorePhase) { // do not care about order, only identity of Alleles
-            thisAlleles = new TreeSet<Allele>(thisAlleles);   //implemented Allele.compareTo()
-            otherAlleles = new TreeSet<Allele>(otherAlleles);
-        }
-
-        return thisAlleles.equals(otherAlleles);
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // get routines for extended attributes
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Returns the extended attributes for this object
-     * @return is never null, but is often isEmpty()
-     */
-    public abstract Map<String, Object> getExtendedAttributes();
-
-    /**
-     * Is key associated with a value (even a null one) in the extended attributes?
-     *
-     * Note this will not return true for the inline attributes DP, GQ, AD, or PL
-     *
-     * @param key a non-null string key to check for an association
-     * @return true if key has a value in the extendedAttributes
-     */
-    public boolean hasExtendedAttribute(final String key) {
-        return getExtendedAttributes().containsKey(key);
-    }
-
-    /**
-     * Get the extended attribute value associated with key, if possible
-     *
-     * @param key a non-null string key to fetch a value for
-     * @param defaultValue the value to return if key isn't in the extended attributes
-     * @return a value (potentially) null associated with key, or defaultValue if no association exists
-     */
-    public Object getExtendedAttribute(final String key, final Object defaultValue) {
-        return hasExtendedAttribute(key) ? getExtendedAttributes().get(key) : defaultValue;
-    }
-
-    /**
-     * Same as #getExtendedAttribute with a null default
-     *
-     * @param key
-     * @return
-     */
-    public Object getExtendedAttribute(final String key) {
-        return getExtendedAttribute(key, null);
-    }
-
-    /**
-     * Returns the filter string associated with this Genotype.
-     *
-     * @return If this result == null, then the genotype is considered PASSing filters
-     *   If the result != null, then the genotype has failed filtering for the reason(s)
-     *   specified in result.  To be reference compliant multiple filter field
-     *   string values can be encoded with a ; separator.
-     */
-    public final String getFilters() {
-        return filters;
-    }
-
-    /**
-     * Is this genotype filtered or not?
-     *
-     * @return returns false if getFilters() == null
-     */
-    public final boolean isFiltered() {
-        return getFilters() != null;
-    }
-
-    @Deprecated public boolean hasLog10PError() { return hasGQ(); }
-    @Deprecated public double getLog10PError() { return getGQ() / -10.0; }
-    @Deprecated public int getPhredScaledQual() { return getGQ(); }
-
-    @Deprecated
-    public String getAttributeAsString(String key, String defaultValue) {
-        Object x = getExtendedAttribute(key);
-        if ( x == null ) return defaultValue;
-        if ( x instanceof String ) return (String)x;
-        return String.valueOf(x); // throws an exception if this isn't a string
-    }
-
-    @Deprecated
-    public int getAttributeAsInt(String key, int defaultValue) {
-        Object x = getExtendedAttribute(key);
-        if ( x == null || x == VCFConstants.MISSING_VALUE_v4 ) return defaultValue;
-        if ( x instanceof Integer ) return (Integer)x;
-        return Integer.valueOf((String)x); // throws an exception if this isn't a string
-    }
-
-    @Deprecated
-    public double getAttributeAsDouble(String key, double defaultValue) {
-        Object x = getExtendedAttribute(key);
-        if ( x == null ) return defaultValue;
-        if ( x instanceof Double ) return (Double)x;
-        return Double.valueOf((String)x); // throws an exception if this isn't a string
-    }
-
-    /**
-     * A totally generic getter, that allows you to get specific keys that correspond
-     * to even inline values (GQ, for example).  Can be very expensive.  Additionally,
-     * all <code>int[]</code> are converted inline into <code>List<Integer></code> for convenience.
-     *
-     * @param key
-     * @return
-     */
-    public Object getAnyAttribute(final String key) {
-        if (key.equals(VCFConstants.GENOTYPE_KEY)) {
-            return getAlleles();
-        } else if (key.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
-            return getGQ();
-        } else if (key.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
-            if (hasAD()) {
-                final List<Integer> intList = new ArrayList<Integer>(getAD().length);
-                for(int i : getAD()) intList.add(i);
-                return intList;
-            }
-            return Collections.EMPTY_LIST;
-        } else if (key.equals(VCFConstants.GENOTYPE_PL_KEY)) {
-            if (hasPL()) {
-                final List<Integer> intList = new ArrayList<Integer>(getPL().length);
-                for(int i : getPL()) intList.add(i);
-                return intList;
-            }
-            return Collections.EMPTY_LIST;
-        } else if (key.equals(VCFConstants.DEPTH_KEY)) {
-            return getDP();
-        } else if (key.equals(VCFConstants.GENOTYPE_FILTER_KEY)) {
-            return getFilters();
-        } else {
-            return getExtendedAttribute(key);
-        }
-    }
-
-    public boolean hasAnyAttribute(final String key) {
-        if (key.equals(VCFConstants.GENOTYPE_KEY)) {
-            return isAvailable();
-        } else if (key.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
-            return hasGQ();
-        } else if (key.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
-            return hasAD();
-        } else if (key.equals(VCFConstants.GENOTYPE_PL_KEY)) {
-            return hasPL();
-        } else if (key.equals(VCFConstants.DEPTH_KEY)) {
-            return hasDP();
-        } else if (key.equals(VCFConstants.GENOTYPE_FILTER_KEY)) {
-            return true;  //always available
-        } else {
-            return hasExtendedAttribute(key);
-        }
-    }
-
-    // TODO -- add getAttributesAsX interface here
-
-    // ------------------------------------------------------------------------------
-    //
-    // private utilities
-    //
-    // ------------------------------------------------------------------------------
-
-    /**
-     * a utility method for generating sorted strings from a map key set.
-     * @param c the map
-     * @param <T> the key type
-     * @param <V> the value type
-     * @return a sting, enclosed in {}, with comma seperated key value pairs in order of the keys
-     */
-    protected static <T extends Comparable<T>, V> String sortedString(Map<T, V> c) {
-
-        // NOTE -- THIS IS COPIED FROM GATK UTILS TO ALLOW US TO KEEP A SEPARATION BETWEEN THE GATK AND VCF CODECS
-        final List<T> t = new ArrayList<T>(c.keySet());
-        Collections.sort(t);
-
-        final List<String> pairs = new ArrayList<String>();
-        for (final T k : t) {
-            pairs.add(k + "=" + c.get(k));
-        }
-
-        return pairs.isEmpty() ? "" : " {" + ParsingUtils.join(", ", pairs.toArray(new String[pairs.size()])) + "}";
-    }
-
-    /**
-     * Returns a display name for field name with value v if this isn't -1.  Otherwise returns ""
-     * @param name of the field ("AD")
-     * @param v the value of the field, or -1 if missing
-     * @return a non-null string for display if the field is not missing
-     */
-    protected final static String toStringIfExists(final String name, final int v) {
-        return v == -1 ? "" : " " + name + " " + v;
-    }
-
-    /**
-     * Returns a display name for field name with String value v if this isn't null.  Otherwise returns ""
-     * @param name of the field ("FT")
-     * @param v the value of the field, or null if missing
-     * @return a non-null string for display if the field is not missing
-     */
-    protected final static String toStringIfExists(final String name, final String v) {
-        return v == null ? "" : " " + name + " " + v;
-    }
-
-    /**
-     * Returns a display name for field name with values vs if this isn't null.  Otherwise returns ""
-     * @param name of the field ("AD")
-     * @param vs the value of the field, or null if missing
-     * @return a non-null string for display if the field is not missing
-     */
-    protected final static String toStringIfExists(final String name, final int[] vs) {
-        if ( vs == null )
-            return "";
-        else {
-            StringBuilder b = new StringBuilder();
-            b.append(' ').append(name).append(' ');
-            for ( int i = 0; i < vs.length; i++ ) {
-                if ( i != 0 ) b.append(',');
-                b.append(vs[i]);
-            }
-            return b.toString();
-        }
-    }
-
-    /**
-     * Does the attribute map have a mapping involving a forbidden key (i.e.,
-     * one that's managed inline by this Genotypes object?
-     *
-     * @param attributes the extended attributes key
-     * @return
-     */
-    protected final static boolean hasForbiddenKey(final Map<String, Object> attributes) {
-        for ( final String forbidden : PRIMARY_KEYS)
-            if ( attributes.containsKey(forbidden) )
-                return true;
-        return false;
-    }
-
-    protected final static boolean isForbiddenKey(final String key) {
-        return PRIMARY_KEYS.contains(key);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/GenotypeBuilder.java b/src/main/java/htsjdk/variant/variantcontext/GenotypeBuilder.java
deleted file mode 100644
index 483e1c6..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/GenotypeBuilder.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A builder class for genotypes
- *
- * Provides convenience setter methods for all of the Genotype field
- * values.  Setter methods can be used in any order, allowing you to
- * pass through states that wouldn't be allowed in the highly regulated
- * immutable Genotype class.
- *
- * All fields default to meaningful MISSING values.
- *
- * Call make() to actually create the corresponding Genotype object from
- * this builder.  Can be called multiple times to create independent copies,
- * or with intervening sets to conveniently make similar Genotypes with
- * slight modifications.
- *
- * Re-using the same GenotypeBuilder to build multiple Genotype objects via calls
- * to make() is dangerous, since reference types in the builder (eg., Collections/arrays)
- * don't get copied when making each Genotype. To safely re-use the same builder object
- * multiple times, use makeWithShallowCopy() instead of make().
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public final class GenotypeBuilder {
-    private static final List<Allele> HAPLOID_NO_CALL = Arrays.asList(Allele.NO_CALL);
-    private static final List<Allele> DIPLOID_NO_CALL = Arrays.asList(Allele.NO_CALL, Allele.NO_CALL);
-
-    private String sampleName = null;
-    private List<Allele> alleles = Collections.emptyList();
-
-    private boolean isPhased = false;
-    private int GQ = -1;
-    private int DP = -1;
-    private int[] AD = null;
-    private int[] PL = null;
-    private Map<String, Object> extendedAttributes = null;
-    private String filters = null;
-    private int initialAttributeMapSize = 5;
-
-    private final static Map<String, Object> NO_ATTRIBUTES =
-            Collections.unmodifiableMap(new HashMap<String, Object>(0));
-
-    // -----------------------------------------------------------------
-    //
-    // Factory methods
-    //
-    // -----------------------------------------------------------------
-
-    public static Genotype create(final String sampleName, final List<Allele> alleles) {
-        return new GenotypeBuilder(sampleName, alleles).make();
-    }
-
-    public static Genotype create(final String sampleName,
-                                        final List<Allele> alleles,
-                                        final Map<String, Object> attributes) {
-        return new GenotypeBuilder(sampleName, alleles).attributes(attributes).make();
-    }
-
-    protected static Genotype create(final String sampleName,
-                                           final List<Allele> alleles,
-                                           final double[] gls) {
-        return new GenotypeBuilder(sampleName, alleles).PL(gls).make();
-    }
-
-    /**
-     * Create a new Genotype object for a sample that's missing from the VC (i.e., in
-     * the output header).  Defaults to a diploid no call genotype ./.
-     *
-     * @param sampleName the name of this sample
-     * @return an initialized Genotype with sampleName that's a diploid ./. no call genotype
-     */
-    public static Genotype createMissing(final String sampleName, final int ploidy) {
-        final GenotypeBuilder builder = new GenotypeBuilder(sampleName);
-        switch ( ploidy ) {
-            case 1:  builder.alleles(HAPLOID_NO_CALL); break;
-            case 2:  builder.alleles(DIPLOID_NO_CALL); break;
-            default: builder.alleles(Collections.nCopies(ploidy, Allele.NO_CALL)); break;
-        }
-        return builder.make();
-    }
-
-    /**
-     * Create a empty builder.  Both a sampleName and alleles must be provided
-     * before trying to make a Genotype from this builder.
-     */
-    public GenotypeBuilder() {}
-
-    /**
-     * Create a builder using sampleName.  Alleles must be provided
-     * before trying to make a Genotype from this builder.
-     * @param sampleName
-     */
-    public GenotypeBuilder(final String sampleName) {
-        name(sampleName);
-    }
-
-    /**
-     * Make a builder using sampleName and alleles for starting values
-     * @param sampleName
-     * @param alleles
-     */
-    public GenotypeBuilder(final String sampleName, final List<Allele> alleles) {
-        name(sampleName);
-        alleles(alleles);
-    }
-
-    /**
-     * Create a new builder starting with the values in Genotype g
-     * @param g
-     */
-    public GenotypeBuilder(final Genotype g) {
-        copy(g);
-    }
-
-    /**
-     * Copy all of the values for this builder from Genotype g
-     * @param g
-     * @return
-     */
-    public GenotypeBuilder copy(final Genotype g) {
-        name(g.getSampleName());
-        alleles(g.getAlleles());
-        phased(g.isPhased());
-        GQ(g.getGQ());
-        DP(g.getDP());
-        AD(g.getAD());
-        PL(g.getPL());
-        filter(g.getFilters());
-        attributes(g.getExtendedAttributes());
-        return this;
-    }
-
-    /**
-     * Reset all of the builder attributes to their defaults.  After this
-     * function you must provide sampleName and alleles before trying to
-     * make more Genotypes.
-     */
-    public final void reset(final boolean keepSampleName) {
-        if ( ! keepSampleName ) sampleName = null;
-        alleles = Collections.emptyList();
-        isPhased = false;
-        GQ = -1;
-        DP = -1;
-        AD = null;
-        PL = null;
-        filters = null;
-        extendedAttributes = null;
-    }
-
-    /**
-     * Create a new Genotype object using the values set in this builder.
-     *
-     * After creation the values in this builder can be modified and more Genotypes
-     * created, althrough the contents of array values like PL should never be modified
-     * inline as they are not copied for efficiency reasons.
-     *
-     * Note: if attributes are added via this builder after a call to make(), the new Genotype will
-     * be modified. Use {@link #makeWithShallowCopy} to safely re-use the same builder object
-     * multiple times.
-     *
-     * @return a newly minted Genotype object with values provided from this builder
-     */
-    public Genotype make() {
-        final Map<String, Object> ea = (extendedAttributes == null) ? NO_ATTRIBUTES : extendedAttributes;
-        return new FastGenotype(sampleName, alleles, isPhased, GQ, DP, AD, PL, filters, ea);
-    }
-
-    /**
-     * Create a new Genotype object using the values set in this builder, and perform a
-     * shallow copy of reference types to allow safer re-use of this builder
-     *
-     * After creation the values in this builder can be modified and more Genotypes
-     * created.
-     *
-     * @return a newly minted Genotype object with values provided from this builder
-     */
-    public Genotype makeWithShallowCopy() {
-        final Map<String, Object> ea = (extendedAttributes == null) ? NO_ATTRIBUTES : new HashMap<>(extendedAttributes);
-        final List<Allele> al = new ArrayList<>(alleles);
-        final int[] copyAD = (AD == null) ? null : Arrays.copyOf(AD, AD.length);
-        final int[] copyPL = (PL == null) ? null : Arrays.copyOf(PL, PL.length);
-        return new FastGenotype(sampleName, al, isPhased, GQ, DP, copyAD, copyPL, filters, ea);
-    }
-
-    /**
-     * Set this genotype's name
-     * @param sampleName
-     * @return
-     */
-    public GenotypeBuilder name(final String sampleName) {
-        this.sampleName = sampleName;
-        return this;
-    }
-
-    /**
-     * Set this genotype's alleles
-     * @param alleles
-     * @return
-     */
-    public GenotypeBuilder alleles(final List<Allele> alleles) {
-        if ( alleles == null )
-            this.alleles = Collections.emptyList();
-        else
-            this.alleles = alleles;
-        return this;
-    }
-
-    /**
-     * Is this genotype phased?
-     * @param phased
-     * @return
-     */
-    public GenotypeBuilder phased(final boolean phased) {
-        isPhased = phased;
-        return this;
-    }
-
-    public GenotypeBuilder GQ(final int GQ) {
-        this.GQ = GQ;
-        return this;
-    }
-
-    /**  Set the GQ with a log10PError value
-     *
-     * @param pLog10Error
-     * @return
-     */
-    public GenotypeBuilder log10PError(final double pLog10Error) {
-        if ( pLog10Error == CommonInfo.NO_LOG10_PERROR )
-            return noGQ();
-        else
-            return GQ((int)Math.round(pLog10Error * -10));
-    }
-
-    /**
-     * This genotype has no GQ value
-     * @return
-     */
-    public GenotypeBuilder noGQ() { GQ = -1; return this; }
-
-    /**
-     * This genotype has no AD value
-     * @return
-     */
-    public GenotypeBuilder noAD() { AD = null; return this; }
-
-    /**
-     * This genotype has no DP value
-     * @return
-     */
-    public GenotypeBuilder noDP() { DP = -1; return this; }
-
-    /**
-     * This genotype has no PL value
-     * @return
-     */
-    public GenotypeBuilder noPL() { PL = null; return this; }
-
-    /**
-     * This genotype has this DP value
-     * @return
-     */
-    public GenotypeBuilder DP(final int DP) {
-        this.DP = DP;
-        return this;
-    }
-
-    /**
-     * This genotype has this AD value
-     * @return
-     */
-    public GenotypeBuilder AD(final int[] AD) {
-        this.AD = AD;
-        return this;
-    }
-
-    /**
-     * This genotype has this PL value, as int[].  FAST
-     * @return
-     */
-    public GenotypeBuilder PL(final int[] PL) {
-        this.PL = PL;
-        return this;
-    }
-
-    /**
-     * This genotype has this PL value, converted from double[]. SLOW
-     * @return
-     */
-    public GenotypeBuilder PL(final double[] GLs) {
-        this.PL = GenotypeLikelihoods.fromLog10Likelihoods(GLs).getAsPLs();
-        return this;
-    }
-
-    /**
-     * This genotype has these attributes. Attributes are added to previous ones.
-     *
-     * Cannot contain inline attributes (DP, AD, GQ, PL). Note: this is not checked
-     * @return
-     */
-    public GenotypeBuilder attributes(final Map<String, Object> attributes) {
-        for ( Map.Entry<String, Object> pair : attributes.entrySet() )
-            attribute(pair.getKey(), pair.getValue());
-        return this;
-    }
-
-    /**
-     * Tells this builder to remove all extended attributes
-     *
-     * @return
-     */
-    public GenotypeBuilder noAttributes() {
-        this.extendedAttributes = null;
-        return this;
-    }
-
-    /**
-     * This genotype has this attribute key / value pair.
-     *
-     * Cannot contain inline attributes (DP, AD, GQ, PL). Note: this is not checked
-     * @return
-     */
-    public GenotypeBuilder attribute(final String key, final Object value) {
-        if ( extendedAttributes == null )
-            extendedAttributes = new HashMap<String, Object>(initialAttributeMapSize);
-        extendedAttributes.put(key, value);
-        return this;
-    }
-
-    /**
-     * Tells this builder to make a Genotype object that has had filters applied,
-     * which may be empty (passes) or have some value indicating the reasons
-     * why it's been filtered.
-     *
-     * @param filters non-null list of filters.  empty list => PASS
-     * @return this builder
-     */
-    public GenotypeBuilder filters(final List<String> filters) {
-        if ( filters.isEmpty() )
-            return filter(null);
-        else if ( filters.size() == 1 )
-            return filter(filters.get(0));
-        else
-            return filter(ParsingUtils.join(";", ParsingUtils.sortList(filters)));
-    }
-
-    /**
-     * varargs version of #filters
-     * @param filters
-     * @return
-     */
-    public GenotypeBuilder filters(final String ... filters) {
-        return filters(Arrays.asList(filters));
-    }
-
-    /**
-     * Most efficient version of setting filters -- just set the filters string to filters
-     *
-     * @param filter if filters == null or filters.equals("PASS") => genotype is PASS
-     * @return
-     */
-    public GenotypeBuilder filter(final String filter) {
-        this.filters = VCFConstants.PASSES_FILTERS_v4.equals(filter) ? null : filter;
-        return this;
-    }
-
-    /**
-     * This genotype is unfiltered
-     *
-     * @return
-     */
-    public GenotypeBuilder unfiltered() {
-        return filter(null);
-    }
-
-    /**
-     * Tell's this builder that we have at most these number of attributes
-     * @return
-     */
-    public GenotypeBuilder maxAttributes(final int i) {
-        initialAttributeMapSize = i;
-        return this;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/variantcontext/GenotypeJEXLContext.java b/src/main/java/htsjdk/variant/variantcontext/GenotypeJEXLContext.java
deleted file mode 100644
index 8d2cd10..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/GenotypeJEXLContext.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package htsjdk.variant.variantcontext;
-
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * @author bbimber
- *
- * implements the JEXL context for Genotype; this saves us from
- * having to generate a JEXL context lookup map everytime we want to evaluate an expression.
- *
- */
-public class GenotypeJEXLContext extends VariantJEXLContext {
-    private Genotype g;
-
-    private interface AttributeGetter {
-        public Object get(Genotype g);
-    }
-
-    private static Map<String, AttributeGetter> attributes = new HashMap<String, AttributeGetter>();
-
-    static {
-        attributes.put("g", (Genotype g) -> g);
-        attributes.put(VCFConstants.GENOTYPE_KEY, Genotype::getGenotypeString);
-
-        attributes.put("isHom", (Genotype g) -> g.isHom() ? true_string : false_string);
-        attributes.put("isHomRef", (Genotype g) -> g.isHomRef() ? true_string : false_string);
-        attributes.put("isHet", (Genotype g) -> g.isHet() ? true_string : false_string);
-        attributes.put("isHomVar", (Genotype g) -> g.isHomVar() ? true_string : false_string);
-        attributes.put("isCalled", (Genotype g) -> g.isCalled() ? true_string : false_string);
-        attributes.put("isNoCall", (Genotype g) -> g.isNoCall() ? true_string : false_string);
-        attributes.put("isMixed", (Genotype g) -> g.isMixed() ? true_string : false_string);
-        attributes.put("isAvailable", (Genotype g) -> g.isAvailable() ? true_string : false_string);
-        attributes.put("isPassFT", (Genotype g) -> g.isFiltered() ? false_string : true_string);
-        attributes.put(VCFConstants.GENOTYPE_FILTER_KEY, (Genotype g) -> g.isFiltered()?  g.getFilters() : VCFConstants.PASSES_FILTERS_v4);
-        attributes.put(VCFConstants.GENOTYPE_QUALITY_KEY, Genotype::getGQ);
-    }
-
-    public GenotypeJEXLContext(VariantContext vc, Genotype g) {
-        super(vc);
-        this.g = g;
-    }
-
-    @Override
-    public Object get(String name) {
-        //should matching genotype attributes always supersede vc?
-        if ( attributes.containsKey(name) ) { // dynamic resolution of name -> value via map
-            return attributes.get(name).get(g);
-        } else if ( g.hasAnyAttribute(name) ) {
-            return g.getAnyAttribute(name);
-        } else if ( g.getFilters() != null && g.getFilters().contains(name) ) {
-            return true_string;
-        } else
-            return super.get(name);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/GenotypeLikelihoods.java b/src/main/java/htsjdk/variant/variantcontext/GenotypeLikelihoods.java
deleted file mode 100644
index ee3e08d..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/GenotypeLikelihoods.java
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-public class GenotypeLikelihoods {
-    private final static int NUM_LIKELIHOODS_CACHE_N_ALLELES = 5;
-    private final static int NUM_LIKELIHOODS_CACHE_PLOIDY = 10;
-    // caches likelihoods up to 5 alleles and up to 10 ploidy
-    private final static int[][] numLikelihoodCache = new int[NUM_LIKELIHOODS_CACHE_N_ALLELES][NUM_LIKELIHOODS_CACHE_PLOIDY];
-
-    public final static int MAX_PL = Integer.MAX_VALUE;
-
-    //
-    // There are two objects here because we are lazy in creating both representations
-    // for this object: a vector of log10 Probs and the PL phred-scaled string.  Supports
-    // having one set during initializating, and dynamic creation of the other, if needed
-    //
-    private double[] log10Likelihoods = null;
-    private String likelihoodsAsString_PLs = null;
-
-    /**
-     * initialize num likelihoods cache
-     */
-    static {
-        // must be done before PLIndexToAlleleIndex
-        for ( int numAlleles = 1; numAlleles < NUM_LIKELIHOODS_CACHE_N_ALLELES; numAlleles++ ) {
-            for ( int ploidy = 1; ploidy < NUM_LIKELIHOODS_CACHE_PLOIDY; ploidy++ ) {
-                numLikelihoodCache[numAlleles][ploidy] = calcNumLikelihoods(numAlleles, ploidy);
-            }
-        }
-    }
-
-    /**
-     * The maximum number of diploid alternate alleles that we can represent as genotype likelihoods
-     */
-    public final static int MAX_DIPLOID_ALT_ALLELES_THAT_CAN_BE_GENOTYPED = 50;
-
-    /**
-     * A cache of the PL index to the 2 alleles it represents over all possible numbers of alternate alleles
-     */
-    private final static GenotypeLikelihoodsAllelePair[] diploidPLIndexToAlleleIndex = calculateDiploidPLcache(MAX_DIPLOID_ALT_ALLELES_THAT_CAN_BE_GENOTYPED);
-
-    /**
-     * A cache of PL index to a list of alleles for any ploidy.
-     * For example, for a ploidy of 3, the allele lists for each PL index is:
-     * {0,0,0}, {0,0,1}, {0,1,1}, {1,1,1}, {0,0,2}, {0,1,2}, {1,1,2}, {0,2,2}, {1,2,2}, {2,2,2}
-     */
-    protected final static Map<Integer, List<List<Integer>>> anyploidPloidyToPLIndexToAlleleIndices = new HashMap<Integer, List<List<Integer>>>();
-
-    public final static GenotypeLikelihoods fromPLField(String PLs) {
-        return new GenotypeLikelihoods(PLs);
-    }
-
-    @Deprecated
-    public final static GenotypeLikelihoods fromGLField(String GLs) {
-        return new GenotypeLikelihoods(parseDeprecatedGLString(GLs));
-    }
-
-    public final static GenotypeLikelihoods fromLog10Likelihoods(double[] log10Likelihoods) {
-        return new GenotypeLikelihoods(log10Likelihoods);
-    }
-
-    public final static GenotypeLikelihoods fromPLs(final int[] pls) {
-        return new GenotypeLikelihoods(PLsToGLs(pls));
-    }
-
-    //
-    // You must use the factory methods now
-    //
-    private GenotypeLikelihoods(String asString) {
-        likelihoodsAsString_PLs = asString;
-    }
-
-    private GenotypeLikelihoods(double[] asVector) {
-        log10Likelihoods = asVector;
-    }
-
-    /**
-     * The genotypes likelihoods in -10log10(x) vector format.  pr{AA} = x, this
-     * vector returns math.log10(x) for each of the genotypes.  Can return null if the
-     * genotype likelihoods are "missing".
-     *
-     * @return genotypes likelihoods in negative log10 vector format
-     */
-    public double[] getAsVector() {
-        // assumes one of the likelihoods vector or the string isn't null
-        if ( log10Likelihoods == null ) {
-            // make sure we create the GL string if it doesn't already exist
-            log10Likelihoods = parsePLsIntoLikelihoods(likelihoodsAsString_PLs);
-        }
-
-        return log10Likelihoods;
-    }
-
-    public int[] getAsPLs() {
-        final double[] GLs = getAsVector();
-        return GLs == null ? null : GLsToPLs(GLs);
-    }
-
-    public String toString() {
-        return getAsString();
-    }
-
-    public String getAsString() {
-        if ( likelihoodsAsString_PLs == null ) {
-            // todo -- should we accept null log10Likelihoods and set PLs as MISSING?
-            if ( log10Likelihoods == null )
-                throw new TribbleException("BUG: Attempted to get likelihoods as strings and neither the vector nor the string is set!");
-            likelihoodsAsString_PLs = convertLikelihoodsToPLString(log10Likelihoods);
-        }
-
-        return likelihoodsAsString_PLs;
-    }
-
-    @Override public boolean equals(Object aThat) {
-        //check for self-comparison
-        if ( this == aThat ) return true;
-
-        if ( !(aThat instanceof GenotypeLikelihoods) ) return false;
-        GenotypeLikelihoods that = (GenotypeLikelihoods)aThat;
-
-        // now a proper field-by-field evaluation can be made.
-        // GLs are considered equal if the corresponding PLs are equal
-        return Arrays.equals(getAsPLs(), that.getAsPLs());
-    }
-
-    //Return genotype likelihoods as an EnumMap with Genotypes as keys and likelihoods as values
-    //Returns null in case of missing likelihoods
-    public EnumMap<GenotypeType,Double> getAsMap(boolean normalizeFromLog10){
-        //Make sure that the log10likelihoods are set
-        double[] likelihoods = normalizeFromLog10 ? GeneralUtils.normalizeFromLog10(getAsVector()) : getAsVector();
-        if(likelihoods == null)
-            return null;
-        EnumMap<GenotypeType,Double> likelihoodsMap = new EnumMap<GenotypeType, Double>(GenotypeType.class);
-        likelihoodsMap.put(GenotypeType.HOM_REF,likelihoods[GenotypeType.HOM_REF.ordinal()-1]);
-        likelihoodsMap.put(GenotypeType.HET,likelihoods[GenotypeType.HET.ordinal()-1]);
-        likelihoodsMap.put(GenotypeType.HOM_VAR, likelihoods[GenotypeType.HOM_VAR.ordinal() - 1]);
-        return likelihoodsMap;
-    }
-
-    //Return the neg log10 Genotype Quality (GQ) for the given genotype
-    //Returns Double.NEGATIVE_INFINITY in case of missing genotype
-
-    /**
-     * This is really dangerous and returns completely wrong results for genotypes from a multi-allelic context.
-     * Use <code>getLog10GQ(Genotype,VariantContext)</code>
-     *  or <code>getLog10GQ(Genotype,List<Allele>)</code> in place of it.
-     *
-     * If you <strong>know</strong> you're biallelic, use <code>getGQLog10FromLikelihoods</code> directly.
-     * @param genotype - actually a genotype type (no call, hom ref, het, hom var)
-     * @return an unsafe quantity that could be negative. In the bi-allelic case, the GQ resulting from best minus next best (if the type is the best).
-     */
-    @Deprecated
-    public double getLog10GQ(GenotypeType genotype){
-        return getGQLog10FromLikelihoods(genotype.ordinal() - 1 /* NO_CALL IS FIRST */, getAsVector());
-    }
-
-    private double getLog10GQ(List<Allele> genotypeAlleles,List<Allele> contextAlleles) {
-        int allele1Index = contextAlleles.indexOf(genotypeAlleles.get(0));
-        int allele2Index = contextAlleles.indexOf(genotypeAlleles.get(1));
-        int plIndex = calculatePLindex(allele1Index,allele2Index);
-        return getGQLog10FromLikelihoods(plIndex,getAsVector());
-    }
-
-    public double getLog10GQ(Genotype genotype, List<Allele> vcAlleles ) {
-        return getLog10GQ(genotype.getAlleles(),vcAlleles);
-    }
-
-    public double getLog10GQ(Genotype genotype, VariantContext context) {
-        return getLog10GQ(genotype,context.getAlleles());
-    }
-
-    public static double getGQLog10FromLikelihoods(int iOfChoosenGenotype, double[] likelihoods){
-        if(likelihoods == null)
-            return Double.NEGATIVE_INFINITY;
-
-        double qual = Double.NEGATIVE_INFINITY;
-        for (int i=0; i < likelihoods.length; i++) {
-            if (i==iOfChoosenGenotype)
-                continue;
-            if (likelihoods[i] >= qual)
-                qual = likelihoods[i];
-        }
-
-        // qual contains now max(likelihoods[k]) for all k != bestGTguess
-        qual = likelihoods[iOfChoosenGenotype] - qual;
-
-        if (qual < 0) {
-            // QUAL can be negative if the chosen genotype is not the most likely one individually.
-            // In this case, we compute the actual genotype probability and QUAL is the likelihood of it not being the chosen one
-            double[] normalized = GeneralUtils.normalizeFromLog10(likelihoods);
-            double chosenGenotype = normalized[iOfChoosenGenotype];
-            return Math.log10(1.0 - chosenGenotype);
-        } else {
-            // invert the size, as this is the probability of making an error
-            return -1 * qual;
-        }
-    }
-
-    private final static double[] parsePLsIntoLikelihoods(String likelihoodsAsString_PLs) {
-        if ( !likelihoodsAsString_PLs.equals(VCFConstants.MISSING_VALUE_v4) ) {
-            String[] strings = likelihoodsAsString_PLs.split(",");
-            double[] likelihoodsAsVector = new double[strings.length];
-            try {
-                for ( int i = 0; i < strings.length; i++ ) {
-                    likelihoodsAsVector[i] = Integer.parseInt(strings[i]) / -10.0;
-                }
-            } catch (NumberFormatException e) {
-                throw new TribbleException("The GL/PL tag contains non-integer values: " + likelihoodsAsString_PLs);
-            }
-            return likelihoodsAsVector;
-        } else
-            return null;
-    }
-
-    /**
-     * Back-compatibility function to read old style GL formatted genotype likelihoods in VCF format
-     * @param GLString
-     * @return
-     */
-    private final static double[] parseDeprecatedGLString(String GLString) {
-        if ( !GLString.equals(VCFConstants.MISSING_VALUE_v4) ) {
-            String[] strings = GLString.split(",");
-            double[] likelihoodsAsVector = new double[strings.length];
-            for ( int i = 0; i < strings.length; i++ ) {
-                likelihoodsAsVector[i] = Double.parseDouble(strings[i]);
-            }
-            return likelihoodsAsVector;
-        }
-
-        return null;
-    }
-
-    private final static String convertLikelihoodsToPLString(final double[] GLs) {
-        if ( GLs == null )
-            return VCFConstants.MISSING_VALUE_v4;
-
-        final StringBuilder s = new StringBuilder();
-        boolean first = true;
-        for ( final int pl : GLsToPLs(GLs) ) {
-            if ( ! first )
-                s.append(',');
-            else
-                first = false;
-
-            s.append(pl);
-        }
-
-        return s.toString();
-    }
-
-    private final static int[] GLsToPLs(final double[] GLs) {
-        final int[] pls = new int[GLs.length];
-        final double adjust = maxPL(GLs);
-
-        for ( int i = 0; i < GLs.length; i++ ) {
-            pls[i] = (int)Math.round(Math.min(-10 * (GLs[i] - adjust), MAX_PL));
-        }
-
-        return pls;
-    }
-
-    private final static double maxPL(final double[] GLs) {
-        double adjust = Double.NEGATIVE_INFINITY;
-        for ( double l : GLs ) adjust = Math.max(adjust, l);
-        return adjust;
-    }
-
-    private final static double[] PLsToGLs(final int pls[]) {
-        double[] likelihoodsAsVector = new double[pls.length];
-        for ( int i = 0; i < pls.length; i++ ) {
-            likelihoodsAsVector[i] = pls[i] / -10.0;
-        }
-        return likelihoodsAsVector;
-    }
-
-    // -------------------------------------------------------------------------------------
-    //
-    // Static conversion utilities, going from GL/PL index to allele index and vice versa.
-    //
-    // -------------------------------------------------------------------------------------
-
-    /*
-    * Class representing the 2 alleles (or rather their indexes into VariantContext.getAllele()) corresponding to a specific PL index.
-    * Note that the reference allele is always index=0.
-    */
-    public static class GenotypeLikelihoodsAllelePair {
-        public final int alleleIndex1, alleleIndex2;
-
-        public GenotypeLikelihoodsAllelePair(final int alleleIndex1, final int alleleIndex2) {
-            this.alleleIndex1 = alleleIndex1;
-            this.alleleIndex2 = alleleIndex2;
-        }
-    }
-
-    /**
-     * Calculate the cache of diploid alleles for each PL index
-     *
-     * @param altAlleles   number of alternate alleles
-     * @return cache of diploid alleles for each PL index
-     */
-    private static GenotypeLikelihoodsAllelePair[] calculateDiploidPLcache(final int altAlleles) {
-        final int numLikelihoods = numLikelihoods(1 + altAlleles, 2);
-        final GenotypeLikelihoodsAllelePair[] cache = new GenotypeLikelihoodsAllelePair[numLikelihoods];
-
-        // for all possible combinations of 2 alleles
-        for ( int allele1 = 0; allele1 <= altAlleles; allele1++ ) {
-            for ( int allele2 = allele1; allele2 <= altAlleles; allele2++ ) {
-                cache[calculatePLindex(allele1, allele2)] = new GenotypeLikelihoodsAllelePair(allele1, allele2);
-            }
-        }
-
-        // a bit of sanity checking
-        for ( int i = 0; i < cache.length; i++ ) {
-            if ( cache[i] == null )
-                throw new IllegalStateException("BUG: cache entry " + i + " is unexpected null");
-        }
-
-        return cache;
-    }
-
-
-    /**
-     * Calculate the alleles for each PL index for a ploidy.
-     * Creates the ordering for all possible combinations of ploidy alleles. Computed recursively and the
-     * result is stored in a cache.
-     *
-     * The implementation is described in The Variant Call Format Specification VCF 4.3, Section 1.6.2 Genotype fields
-     * The likelihoods are ordered for ploidy P and N alternate alleles as follows:
-     * for aP = 0...N
-     *  for aP-1 = 0...aP
-     *      ...
-     *      for a1 = 0...a2
-     *          a1,a2..aP
-     *
-     * This is implemented recursively:
-     *
-     * PLIndexToAlleleIndices(N, P, suffix=empty):
-     *      for a in 0...N
-     *          if (P == 1) accum += (a + suffix)  // have all the alleles for a PL index
-     *          if (P > 1) PLIndexToAlleleIndices(a, P-1, a + suffix )
-     *
-     * @param altAlleles     Number of alternate alleles
-     * @param ploidy         Number of chromosomes in set
-     * @param anyploidPLIndexToAlleleIndices PL index to the alleles of general ploidy over all possible alternate alleles
-     * @param genotype       An entry of ploidy alleles
-     */
-    private static void calculatePLIndexToAlleleIndices(final int altAlleles, final int ploidy, final List<List<Integer>> anyploidPLIndexToAlleleIndices,
-                                                   final List<Integer> genotype) {
-        for (int a=0; a <= altAlleles; a++) {
-            final List<Integer> gt = new ArrayList<Integer>(Arrays.asList(a));
-            gt.addAll(genotype);
-            if ( ploidy == 1 ) {// have all ploidy alleles for a PL index
-                anyploidPLIndexToAlleleIndices.add(gt);
-            } else if ( ploidy > 1 ) {
-                calculatePLIndexToAlleleIndices(a, ploidy - 1, anyploidPLIndexToAlleleIndices, gt);
-            }
-        }
-    }
-
-    /**
-     * Calculate the cache of allele indices for each PL index for a ploidy.
-     * Calculation in @see #calculatePLIndexToAlleleIndices
-     *
-     * @param altAlleles Number of alternate alleles
-     * @param ploidy    Number of chromosomes in set
-     * @return PL index to the alleles of general ploidy over all possible alternate alleles
-     * @return The alleles for each PL index for a ploidy
-     */
-    protected static List<List<Integer>> calculateAnyploidPLcache(final int altAlleles, final int ploidy) {
-        List<List<Integer>> anyploidPLIndexToAlleleIndices = new ArrayList<List<Integer>>();
-        calculatePLIndexToAlleleIndices(altAlleles, ploidy, anyploidPLIndexToAlleleIndices, new ArrayList<Integer>());
-        return anyploidPLIndexToAlleleIndices;
-    }
-
-    // -------------------------------------------------------------------------------------
-    //
-    // num likelihoods given number of alleles and ploidy
-    //
-    // -------------------------------------------------------------------------------------
-
-    /**
-     * Actually does the computation in @see #numLikelihoods
-     *
-     * @param numAlleles    number of alleles
-     * @param ploidy        number of chromosomes
-     * @return  number of likelihoods
-     */
-    private static final int calcNumLikelihoods(final int numAlleles, final int ploidy) {
-        if (numAlleles == 1)
-            return 1;
-        else if (ploidy == 1)
-            return numAlleles;
-        else {
-            int acc =0;
-            for (int k=0; k <= ploidy; k++ )
-                acc += calcNumLikelihoods(numAlleles - 1, ploidy - k);
-            return acc;
-        }
-    }
-
-    /**
-     * Compute how many likelihood elements are associated with the given number of alleles
-     * Equivalent to asking in how many ways N non-negative integers can add up to P is S(N,P)
-     * where P = ploidy (number of chromosomes) and N = total # of alleles.
-     * Each chromosome can be in one single state (0,...,N-1) and there are P of them.
-     * Naive solution would be to store N*P likelihoods, but this is not necessary because we can't distinguish chromosome states, but rather
-     * only total number of alt allele counts in all chromosomes.
-     *
-     * For example, S(3,2) = 6: For alleles A,B,C, on a diploid organism we have six possible genotypes:
-     * AA,AB,BB,AC,BC,CC.
-     * Another way of expressing is with vector (#of A alleles, # of B alleles, # of C alleles)
-     * which is then, for ordering above, (2,0,0), (1,1,0), (0,2,0), (1,1,0), (0,1,1), (0,0,2)
-     * In general, for P=2 (regular biallelic), then S(N,2) = N*(N+1)/2
-     *
-     * Note this method caches the value for most common num Allele / ploidy combinations for efficiency
-     *
-     * Recursive implementation:
-     *   S(N,P) = sum_{k=0}^P S(N-1,P-k)
-     *  because if we have N integers, we can condition 1 integer to be = k, and then N-1 integers have to sum to P-K
-     * With initial conditions
-     *   S(N,1) = N  (only way to have N integers add up to 1 is all-zeros except one element with a one. There are N of these vectors)
-     *   S(1,P) = 1 (only way to have 1 integer add to P is with that integer P itself).
-     *
-     *   @param  numAlleles      Number of alleles (including ref)
-     *   @param  ploidy          Ploidy, or number of chromosomes in set
-     *   @return    Number of likelihood elements we need to hold.
-     */
-    public static int numLikelihoods(final int numAlleles, final int ploidy) {
-        if ( numAlleles < NUM_LIKELIHOODS_CACHE_N_ALLELES
-                && ploidy < NUM_LIKELIHOODS_CACHE_PLOIDY )
-            return numLikelihoodCache[numAlleles][ploidy];
-        else {
-            // have to calculate on the fly
-            return calcNumLikelihoods(numAlleles, ploidy);
-        }
-    }
-
-    // As per the VCF spec: "the ordering of genotypes for the likelihoods is given by: F(j/k) = (k*(k+1)/2)+j.
-    // In other words, for biallelic sites the ordering is: AA,AB,BB; for triallelic sites the ordering is: AA,AB,BB,AC,BC,CC, etc."
-    // Assumes that allele1Index < allele2Index
-    public static int calculatePLindex(final int allele1Index, final int allele2Index) {
-        return (allele2Index * (allele2Index+1) / 2) + allele1Index;
-    }
-
-
-    /**
-     * Get the diploid allele index pair for the given PL index
-     *
-     * @param PLindex   the PL index
-     * @return the diploid allele index pair
-     * @throws IllegalStateException if PLindex is negative value or greater than the cache computed by @see #calculateDiploidPLcache
-     */
-    public static GenotypeLikelihoodsAllelePair getAllelePair(final int PLindex) {
-        // check the index, make sure that we've cached enough data
-        if ( PLindex < 0 || PLindex >= diploidPLIndexToAlleleIndex.length ) {
-            final String msg = "The PL index " + PLindex + " cannot be " + (PLindex < 0 ? " negative" : " more than " + (diploidPLIndexToAlleleIndex.length - 1));
-            throw new IllegalStateException(msg);
-        }
-
-        return diploidPLIndexToAlleleIndex[PLindex];
-    }
-
-    /**
-     * Initialize cache of allele anyploid indices
-     * If initialized multiple times with the same ploidy, the alternate alleles from the last initialization will be used
-     *
-     * @param altAlleles number of alternate alleles
-     * @param ploidy    number of chromosomes
-     * @throws IllegalArgumentException if altAlleles or ploidy &lt= 0
-     */
-    public static synchronized void initializeAnyploidPLIndexToAlleleIndices(final int altAlleles, final int ploidy) {
-        if ( altAlleles <= 0 )
-            throw new IllegalArgumentException("Must have at least one alternate allele, not " + altAlleles );
-
-        if ( ploidy <= 0 )
-            throw new IllegalArgumentException("Ploidy must be at least 1, not " + ploidy);
-
-        // create the allele indices for each PL index for a ploidy
-        anyploidPloidyToPLIndexToAlleleIndices.put(ploidy, calculateAnyploidPLcache(altAlleles, ploidy));
-    }
-
-    /**
-     * Get the allele ploidy indices for the given PL index
-     * Must use the same ploidy as @see #initializeAnyploidPLIndexToAlleleIndices
-     *
-     * @param PLindex   the PL index
-     * @param ploidy    number of chromosomes
-     * @return the ploidy allele indices
-     * @throws IllegalStateException if @see #anyploidPloidyToPLIndexToAlleleIndices does not contain the requested ploidy or PL index
-     */
-    public static synchronized List<Integer> getAlleles(final int PLindex, final int ploidy) {
-        if ( ploidy == 2 ) { // diploid
-            final GenotypeLikelihoodsAllelePair pair = getAllelePair(PLindex);
-            return Arrays.asList(pair.alleleIndex1, pair.alleleIndex2);
-        } else { // non-diploid
-            if (!anyploidPloidyToPLIndexToAlleleIndices.containsKey(ploidy))
-                throw new IllegalStateException("Must initialize the cache of allele anyploid indices for ploidy " + ploidy);
-
-            if (PLindex < 0 || PLindex >= anyploidPloidyToPLIndexToAlleleIndices.get(ploidy).size()) {
-                final String msg = "The PL index " + PLindex + " does not exist for " + ploidy + " ploidy, " +
-                        (PLindex < 0 ? "cannot have a negative value." : "initialized the cache of allele anyploid indices with the incorrect number of alternate alleles.");
-                throw new IllegalStateException(msg);
-            }
-
-            return anyploidPloidyToPLIndexToAlleleIndices.get(ploidy).get(PLindex);
-        }
-    }
-
-    // An index conversion from the deprecated PL ordering to the new VCF-based ordering for up to 3 alternate alleles
-    protected static final int[] PLindexConversion = new int[]{0, 1, 3, 6, 2, 4, 7, 5, 8, 9};
-
-    /**
-     * get the allele index pair for the given PL using the deprecated PL ordering:
-     *    AA,AB,AC,AD,BB,BC,BD,CC,CD,DD instead of AA,AB,BB,AC,BC,CC,AD,BD,CD,DD.
-     * Although it's painful to keep this conversion around, our DiploidSNPGenotypeLikelihoods class uses the deprecated
-     *    ordering and I know with certainty that external users have built code on top of it; changing it now would
-     *    cause a whole lot of heartache for our collaborators, so for now at least there's a standard conversion method.
-     * This method assumes at most 3 alternate alleles.
-     *
-     * @param PLindex   the PL index
-     * @return the allele index pair
-     */
-    @Deprecated
-    public static GenotypeLikelihoodsAllelePair getAllelePairUsingDeprecatedOrdering(final int PLindex) {
-        return getAllelePair(PLindexConversion[PLindex]);
-    }
-
-    /**
-     * get the PL indexes (AA, AB, BB) for the given allele pair; assumes allele1Index <= allele2Index.
-     *
-     * @param allele1Index    the index in VariantContext.getAllele() of the first allele
-     * @param allele2Index    the index in VariantContext.getAllele() of the second allele
-     * @return the PL indexes
-     */
-    public static int[] getPLIndecesOfAlleles(final int allele1Index, final int allele2Index) {
-
-        final int[] indexes = new int[3];
-        indexes[0] = calculatePLindex(allele1Index, allele1Index);
-        indexes[1] = calculatePLindex(allele1Index, allele2Index);
-        indexes[2] = calculatePLindex(allele2Index, allele2Index);
-        return indexes;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/GenotypeType.java b/src/main/java/htsjdk/variant/variantcontext/GenotypeType.java
deleted file mode 100644
index d549d97..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/GenotypeType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-/**
- * Summary types for Genotype objects
- *
- * @author Your Name
- * @since Date created
- */
-public enum GenotypeType {
-    /** The sample is no-called (all alleles are NO_CALL */
-    NO_CALL,
-    /** The sample is homozygous reference */
-    HOM_REF,
-    /** The sample is heterozygous, with at least one ref and at least one one alt in any order */
-    HET,
-    /** All alleles are non-reference */
-    HOM_VAR,
-    /** There is no allele data availble for this sample (alleles.isEmpty) */
-    UNAVAILABLE,
-    /** Some chromosomes are NO_CALL and others are called */
-    MIXED  // no-call and call in the same genotype
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/GenotypesContext.java b/src/main/java/htsjdk/variant/variantcontext/GenotypesContext.java
deleted file mode 100644
index c146875..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/GenotypesContext.java
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Represents an ordered collection of Genotype objects
- */
-public class GenotypesContext implements List<Genotype>, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    /**
-     * static constant value for an empty GenotypesContext.  Useful since so many VariantContexts have no genotypes
-     */
-    public final static GenotypesContext NO_GENOTYPES =
-            new GenotypesContext(new ArrayList<Genotype>(0), new HashMap<String, Integer>(0), Collections.<String>emptyList()).immutable();
-
-    /**
-     *sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical order
-     */
-    protected List<String> sampleNamesInOrder = null;
-
-    /**
-     * a map optimized for efficient lookup.  Each genotype in genotypes must have its
-     * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
-     * genotype in the vector of genotypes
-     */
-    protected Map<String, Integer> sampleNameToOffset = null;
-
-    /**
-     * An ArrayList of genotypes contained in this context
-     *
-     * WARNING: TO ENABLE THE LAZY VERSION OF THIS CLASS, NO METHODS SHOULD DIRECTLY
-     * ACCESS THIS VARIABLE.  USE getGenotypes() INSTEAD.
-     *
-     */
-    protected ArrayList<Genotype> notToBeDirectlyAccessedGenotypes;
-
-    /**
-     * Cached value of the maximum ploidy observed among all samples
-     */
-    private int maxPloidy = -1;
-
-    /** Are we allowing users to modify the list? */
-    private boolean immutable = false;
-
-    /**
-     * Custom serialization routine. Needed to ensure that we decode any lazily-decoded data
-     * before serialization.
-     *
-     * @param out stream to which to serialize this object
-     */
-    private void writeObject(ObjectOutputStream out) throws IOException {
-        // If we're a LazyGenotypesContext, decode the genotype data before serialization.
-        //
-        // Ugly, but we can't do this in LazyGenotypesContext.writeObject(), since
-        // by the time that's called we'll already have serialized the superclass
-        // data in GenotypesContext, and we need to make sure that we decode any lazy
-        // data BEFORE serializing the fields in GenotypesContext.
-        if ( getClass() == LazyGenotypesContext.class ) {
-            ((LazyGenotypesContext)this).decode();
-        }
-
-        out.defaultWriteObject();
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // private constructors -- you have to use static create methods to make these classes
-    //
-    // ---------------------------------------------------------------------------
-
-    /**
-     * Create an empty GenotypeContext
-     */
-    protected GenotypesContext() {
-        this(10);
-    }
-
-    /**
-     * Create an empty GenotypeContext, with initial capacity for n elements
-     */
-    protected GenotypesContext(final int n) {
-        this(new ArrayList<Genotype>(n));
-    }
-
-    /**
-     * Create an GenotypeContext containing genotypes
-     */
-    protected GenotypesContext(final ArrayList<Genotype> genotypes) {
-        this.notToBeDirectlyAccessedGenotypes = genotypes;
-        this.sampleNameToOffset = null;
-    }
-
-    /**
-     * Create a fully resolved GenotypeContext containing genotypes, sample lookup table,
-     * and sorted sample names
-     *
-     * @param genotypes our genotypes in arbitrary
-     * @param sampleNameToOffset map optimized for efficient lookup.  Each genotype in genotypes must have its
-     * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
-     * genotype in the vector of genotypes
-     * @param sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical
-     * order.
-     */
-    protected GenotypesContext(final ArrayList<Genotype> genotypes,
-                             final Map<String, Integer> sampleNameToOffset,
-                             final List<String> sampleNamesInOrder) {
-        this.notToBeDirectlyAccessedGenotypes = genotypes;
-        this.sampleNameToOffset = sampleNameToOffset;
-        this.sampleNamesInOrder = sampleNamesInOrder;
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // public static factory methods
-    //
-    // ---------------------------------------------------------------------------
-
-    /**
-     * Basic creation routine
-     * @return an empty, mutable GenotypeContext
-     */
-    public static final GenotypesContext create() {
-        return new GenotypesContext();
-    }
-
-    /**
-     * Basic creation routine
-     * @return an empty, mutable GenotypeContext with initial capacity for nGenotypes
-     */
-    public static final GenotypesContext create(final int nGenotypes) {
-        return new GenotypesContext(nGenotypes);
-    }
-
-    /**
-     * Create a fully resolved GenotypeContext containing genotypes, sample lookup table,
-     * and sorted sample names
-     *
-     * @param genotypes our genotypes in arbitrary
-     * @param sampleNameToOffset map optimized for efficient lookup.  Each genotype in genotypes must have its
-     * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
-     * genotype in the vector of genotypes
-     * @param sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical
-     * order.
-     * @return an mutable GenotypeContext containing genotypes with already present lookup data
-     */
-    public static final GenotypesContext create(final ArrayList<Genotype> genotypes,
-                                                final Map<String, Integer> sampleNameToOffset,
-                                                final List<String> sampleNamesInOrder) {
-        return new GenotypesContext(genotypes, sampleNameToOffset, sampleNamesInOrder);
-    }
-
-    /**
-     * Create a fully resolved GenotypeContext containing genotypes
-     *
-     * @param genotypes our genotypes in arbitrary
-     * @return an mutable GenotypeContext containing genotypes
-     */
-    public static final GenotypesContext create(final ArrayList<Genotype> genotypes) {
-        return genotypes == null ? NO_GENOTYPES : new GenotypesContext(genotypes);
-    }
-
-    /**
-     * Create a fully resolved GenotypeContext containing genotypes
-     *
-     * @param genotypes our genotypes in arbitrary
-     * @return an mutable GenotypeContext containing genotypes
-     */
-    public static final GenotypesContext create(final Genotype... genotypes) {
-        return create(new ArrayList<Genotype>(Arrays.asList(genotypes)));
-    }
-
-    /**
-     * Create a freshly allocated GenotypeContext containing the genotypes in toCopy
-     *
-     * @param toCopy the GenotypesContext to copy
-     * @return an mutable GenotypeContext containing genotypes
-     */
-    public static final GenotypesContext copy(final GenotypesContext toCopy) {
-        return create(new ArrayList<Genotype>(toCopy.getGenotypes()));
-    }
-
-    /**
-     * Create a GenotypesContext containing the genotypes in iteration order contained
-     * in toCopy
-     *
-     * @param toCopy the collection of genotypes
-     * @return an mutable GenotypeContext containing genotypes
-     */
-    public static final GenotypesContext copy(final Collection<Genotype> toCopy) {
-        return toCopy == null ? NO_GENOTYPES : create(new ArrayList<Genotype>(toCopy));
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // Mutability methods
-    //
-    // ---------------------------------------------------------------------------
-
-    public final GenotypesContext immutable() {
-        immutable = true;
-        return this;
-    }
-
-    public boolean isMutable() {
-        return ! immutable;
-    }
-
-    public final void checkImmutability() {
-        if ( immutable )
-            throw new IllegalAccessError("GenotypeMap is currently immutable, but a mutator method was invoked on it");
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // caches
-    //
-    // ---------------------------------------------------------------------------
-
-    protected void invalidateSampleNameMap() {
-        sampleNameToOffset = null;
-    }
-
-    protected void invalidateSampleOrdering() {
-        sampleNamesInOrder = null;
-    }
-
-    protected void ensureSampleOrdering() {
-        if ( sampleNamesInOrder == null ) {
-            sampleNamesInOrder = new ArrayList<String>(size());
-
-            for ( int i = 0; i < size(); i++ ) {
-                sampleNamesInOrder.add(getGenotypes().get(i).getSampleName());
-            }
-            Collections.sort(sampleNamesInOrder);
-        }
-    }
-
-    protected void ensureSampleNameMap() {
-        if ( sampleNameToOffset == null ) {
-            sampleNameToOffset = new HashMap<String, Integer>(size());
-
-            for ( int i = 0; i < size(); i++ ) {
-                sampleNameToOffset.put(getGenotypes().get(i).getSampleName(), i);
-            }
-        }
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // Lazy methods
-    //
-    // ---------------------------------------------------------------------------
-
-    public boolean isLazyWithData() {
-        return this instanceof LazyGenotypesContext &&
-                ((LazyGenotypesContext)this).getUnparsedGenotypeData() != null;
-    }
-
-    // ---------------------------------------------------------------------------
-    //
-    // Map methods
-    //
-    // ---------------------------------------------------------------------------
-
-    protected ArrayList<Genotype> getGenotypes() {
-        return notToBeDirectlyAccessedGenotypes;
-    }
-
-    @Override
-    public void clear() {
-        checkImmutability();
-        invalidateSampleNameMap();
-        invalidateSampleOrdering();
-        getGenotypes().clear();
-    }
-
-    @Override
-    public int size() {
-        return getGenotypes().size();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return getGenotypes().isEmpty();
-    }
-
-    /**
-     * Adds a single genotype to this context.
-     *
-     * There are many constraints on this input, and important
-     * impacts on the performance of other functions provided by this
-     * context.
-     *
-     * First, the sample name of genotype must be unique within this
-     * context.  However, this is not enforced in the code itself, through
-     * you will invalid the contract on this context if you add duplicate
-     * samples and are running with CoFoJa enabled.
-     *
-     * Second, adding genotype also updates the sample name -> index map,
-     * so add() followed by containsSample and related function is an efficient
-     * series of operations.
-     *
-     * Third, adding the genotype invalidates the sorted list of sample names, to
-     * add() followed by any of the SampleNamesInOrder operations is inefficient, as
-     * each SampleNamesInOrder must rebuild the sorted list of sample names at
-     * an O(n log n) cost.
-     *
-     * @param genotype
-     * @return
-     */
-    @Override
-    public boolean add(final Genotype genotype) {
-        checkImmutability();
-        invalidateSampleOrdering();
-
-        if ( sampleNameToOffset != null ) {
-            // update the name map by adding entries
-            sampleNameToOffset.put(genotype.getSampleName(), size());
-        }
-
-        return getGenotypes().add(genotype);
-    }
-
-    @Override
-    public void add(final int i, final Genotype genotype) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds all of the genotypes to this context
-     *
-     * See {@link #add(Genotype)} for important information about this functions
-     * constraints and performance costs
-     *
-     * @param genotypes
-     * @return
-     */
-    @Override
-    public boolean addAll(final Collection<? extends Genotype> genotypes) {
-        checkImmutability();
-        invalidateSampleOrdering();
-
-        if ( sampleNameToOffset != null ) {
-            // update the name map by adding entries
-            int pos = size();
-            for ( final Genotype g : genotypes ) {
-                sampleNameToOffset.put(g.getSampleName(), pos++);
-            }
-        }
-
-        return getGenotypes().addAll(genotypes);
-    }
-
-    @Override
-    public boolean addAll(final int i, final Collection<? extends Genotype> genotypes) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean contains(final Object o) {
-        return getGenotypes().contains(o);
-    }
-
-    @Override
-    public boolean containsAll(final Collection<?> objects) {
-        return getGenotypes().containsAll(objects);
-    }
-
-    private boolean containsAny(final Collection<? extends Genotype> genotypes) {
-        for ( final Genotype g : genotypes ) {
-            if ( contains(g) ) return true;
-        }
-        return false;
-    }
-
-    @Override
-    public Genotype get(final int i) {
-        return getGenotypes().get(i);
-    }
-
-    /**
-     * What is the max ploidy among all samples?  Returns defaultPloidy if no genotypes are present
-     *
-     * @param defaultPloidy the default ploidy, if all samples are no-called
-     * @return
-     */
-    public int getMaxPloidy(final int defaultPloidy) {
-        if ( defaultPloidy < 0 ) throw new IllegalArgumentException("defaultPloidy must be greater than or equal to 0");
-
-        if ( maxPloidy == -1 ) {
-            maxPloidy = 0; // necessary in the case where there are no genotypes
-            for ( final Genotype g : getGenotypes() ) {
-                maxPloidy = Math.max(g.getPloidy(), maxPloidy);
-            }
-
-            // everything is no called so we return the default ploidy
-            if ( maxPloidy == 0 ) maxPloidy = defaultPloidy;
-        }
-
-        return maxPloidy;
-    }
-
-    /**
-     * Gets sample associated with this sampleName, or null if none is found
-     *
-     * @param sampleName
-     * @return
-     */
-    public Genotype get(final String sampleName) {
-        Integer offset = getSampleI(sampleName);
-        return offset == null ? null : getGenotypes().get(offset);
-    }
-
-    private Integer getSampleI(final String sampleName) {
-        ensureSampleNameMap();
-        return sampleNameToOffset.get(sampleName);
-    }
-
-    @Override
-    public int indexOf(final Object o) {
-        return getGenotypes().indexOf(o);
-    }
-
-    @Override
-    public Iterator<Genotype> iterator() {
-        return getGenotypes().iterator();
-    }
-
-    @Override
-    public int lastIndexOf(final Object o) {
-        return getGenotypes().lastIndexOf(o);
-    }
-
-    @Override
-    public ListIterator<Genotype> listIterator() {
-        // todo -- must be immutable
-        throw new UnsupportedOperationException();
-//        return genotypes.listIterator();
-    }
-
-    @Override
-    public ListIterator<Genotype> listIterator(final int i) {
-        // todo -- must be immutable
-        throw new UnsupportedOperationException();
-//        return genotypes.listIterator(i);
-    }
-
-    /**
-     * Note that remove requires us to invalidate our sample -> index
-     * cache.  The loop:
-     *
-     * GenotypesContext gc = ...
-     * for ( sample in samples )
-     *   if ( gc.containsSample(sample) )
-     *     gc.remove(sample)
-     *
-     * is extremely inefficient, as each call to remove invalidates the cache
-     * and containsSample requires us to rebuild it, an O(n) operation.
-     *
-     * If you must remove many samples from the GC, use either removeAll or retainAll
-     * to avoid this O(n * m) operation.
-     *
-     * @param i
-     * @return
-     */
-    @Override
-    public Genotype remove(final int i) {
-        checkImmutability();
-        invalidateSampleNameMap();
-        invalidateSampleOrdering();
-        return getGenotypes().remove(i);
-    }
-
-    /**
-     * See for important warning {@link #remove(int)}
-     * @param o
-     * @return
-     */
-    @Override
-    public boolean remove(final Object o) {
-        checkImmutability();
-        invalidateSampleNameMap();
-        invalidateSampleOrdering();
-        return getGenotypes().remove(o);
-    }
-
-    @Override
-    public boolean removeAll(final Collection<?> objects) {
-        checkImmutability();
-        invalidateSampleNameMap();
-        invalidateSampleOrdering();
-        return getGenotypes().removeAll(objects);
-    }
-
-    @Override
-    public boolean retainAll(final Collection<?> objects) {
-        checkImmutability();
-        invalidateSampleNameMap();
-        invalidateSampleOrdering();
-        return getGenotypes().retainAll(objects);
-    }
-
-    @Override
-    public Genotype set(final int i, final Genotype genotype) {
-        checkImmutability();
-        final Genotype prev = getGenotypes().set(i, genotype);
-
-        invalidateSampleOrdering();
-        if ( sampleNameToOffset != null ) {
-            // update the name map by removing the old entry and replacing it with the new one
-            sampleNameToOffset.remove(prev.getSampleName());
-            sampleNameToOffset.put(genotype.getSampleName(), i);
-        }
-
-        return prev;
-    }
-
-    /**
-     * Replaces the genotype in this context -- note for efficiency
-     * reasons we do not add the genotype if it's not present.  The
-     * return value will be null indicating this happened.
-     *
-     * Note this operation is preserves the map cache Sample -> Offset but
-     * invalidates the sorted list of samples.  Using replace within a loop
-     * containing any of the SampleNameInOrder operation requires an O(n log n)
-     * resorting after each replace operation.
-     *
-     * @param genotype a non null genotype to bind in this context
-     * @return null if genotype was not added, otherwise returns the previous genotype
-     */
-    public Genotype replace(final Genotype genotype) {
-        checkImmutability();
-        Integer offset = getSampleI(genotype.getSampleName());
-        if ( offset == null )
-            return null;
-        else
-            return set(offset, genotype);
-    }
-
-    @Override
-    public List<Genotype> subList(final int i, final int i1) {
-        return getGenotypes().subList(i, i1);
-    }
-
-    @Override
-    public Object[] toArray() {
-        return getGenotypes().toArray();
-    }
-
-    @Override
-    public <T> T[] toArray(final T[] ts) {
-        return getGenotypes().toArray(ts);
-    }
-
-    /**
-     * Iterate over the Genotypes in this context in the order specified by sampleNamesInOrder
-     *
-     * @param sampleNamesInOrder a Iterable of String, containing exactly one entry for each Genotype sample name in
-     * this context
-     * @return a Iterable over the genotypes in this context.
-     */
-    public Iterable<Genotype> iterateInSampleNameOrder(final Iterable<String> sampleNamesInOrder) {
-        return new Iterable<Genotype>() {
-            @Override
-            public Iterator<Genotype> iterator() {
-                return new InOrderIterator(sampleNamesInOrder.iterator());
-            }
-        };
-    }
-
-    /**
-     * Iterate over the Genotypes in this context in their sample name order (A, B, C)
-     * regardless of the underlying order in the vector of genotypes
-     * @return a Iterable over the genotypes in this context.
-     */
-    public Iterable<Genotype> iterateInSampleNameOrder() {
-        return iterateInSampleNameOrder(getSampleNamesOrderedByName());
-    }
-
-    private final class InOrderIterator implements Iterator<Genotype> {
-        final Iterator<String> sampleNamesInOrder;
-
-        private InOrderIterator(final Iterator<String> sampleNamesInOrder) {
-            this.sampleNamesInOrder = sampleNamesInOrder;
-        }
-
-        @Override
-        public boolean hasNext() {
-            return sampleNamesInOrder.hasNext();
-        }
-
-        @Override
-        public Genotype next() {
-            return get(sampleNamesInOrder.next());
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * @return The set of sample names for all genotypes in this context, in arbitrary order
-     */
-    public Set<String> getSampleNames() {
-        ensureSampleNameMap();
-        return sampleNameToOffset.keySet();
-    }
-
-    /**
-     * @return The set of sample names for all genotypes in this context, in their natural ordering (A, B, C)
-     */
-    public List<String> getSampleNamesOrderedByName() {
-        ensureSampleOrdering();
-        return sampleNamesInOrder;
-    }
-
-    public boolean containsSample(final String sample) {
-        ensureSampleNameMap();
-        return sampleNameToOffset.containsKey(sample);
-    }
-
-    public boolean containsSamples(final Collection<String> samples) {
-        return getSampleNames().containsAll(samples);
-    }
-
-    /**
-     * Return a freshly allocated subcontext of this context containing only the samples
-     * listed in samples.  Note that samples can contain names not in this context, they
-     * will just be ignored.
-     *
-     * @param samples
-     * @return
-     */
-    public GenotypesContext subsetToSamples( final Set<String> samples ) {
-        final int nSamples = samples.size();
-
-        if ( nSamples == 0 )
-            return NO_GENOTYPES;
-        else { // nGenotypes < nSamples
-            final GenotypesContext subset = create(samples.size());
-            for ( final String sample : samples ) {
-                final Genotype g = get(sample);
-                if ( g != null )
-                    subset.add(g);
-            }
-            return subset;
-        }
-    }
-
-    @Override
-    public String toString() {
-        final List<String> gS = new ArrayList<String>();
-        for ( final Genotype g : this.iterateInSampleNameOrder() )
-            gS.add(g.toString());
-        return "[" + join(",", gS) + "]";
-    }
-
-    // copied from Utils
-    private static <T> String join(final String separator, final Collection<T> objects) {
-        if (objects.isEmpty()) { // fast path for empty collection
-            return "";
-        } else {
-            final Iterator<T> iter = objects.iterator();
-            final T first = iter.next();
-
-            if ( ! iter.hasNext() ) // fast path for singleton collections
-                return first.toString();
-            else { // full path for 2+ collection that actually need a join
-                final StringBuilder ret = new StringBuilder(first.toString());
-                while(iter.hasNext()) {
-                    ret.append(separator);
-                    ret.append(iter.next().toString());
-                }
-                return ret.toString();
-            }
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/JEXLMap.java b/src/main/java/htsjdk/variant/variantcontext/JEXLMap.java
deleted file mode 100644
index 33ec595..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/JEXLMap.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package htsjdk.variant.variantcontext;
-
-import htsjdk.variant.variantcontext.VariantContextUtils.JexlVCMatchExp;
-import org.apache.commons.jexl2.JexlContext;
-import org.apache.commons.jexl2.JexlException;
-import org.apache.commons.jexl2.MapContext;
-
-import java.util.*;
-
-/**
- * This is an implementation of a Map of {@link JexlVCMatchExp} to true or false values.
- * It lazily initializes each value as requested to save as much processing time as possible.
- */
-
-class JEXLMap implements Map<JexlVCMatchExp, Boolean> {
-    /**
-     * If a JEXL expression contains values that are not available in the given context, the default behavior is to
-     * treat that expression as a miss match.
-     */
-    public static final JexlMissingValueTreatment DEFAULT_MISSING_VALUE_TREATMENT = JexlMissingValueTreatment.TREAT_AS_MISMATCH;
-
-    // our variant context and/or Genotype
-    private final VariantContext vc;
-    private final Genotype g;
-
-    private final JexlMissingValueTreatment howToTreatMissingValues;
-
-    /**
-     * our mapping from {@link JexlVCMatchExp} to {@link Boolean}s, which will be set to {@code NULL}
-     * for previously un-cached {@link JexlVCMatchExp}.
-     */
-    private final Map<JexlVCMatchExp,Boolean> jexl;
-
-    // our context
-    private JexlContext jContext = null;
-
-    /**
-     * Construct a new JEXLMap which can evaluate expressions against a specific genotype and variant context
-     * @param jexlCollection collection of expressions to be evaluated
-     * @param vc VariantContext to evaluate expressions against
-     * @param g genotype to evaluate expressions against, may be null
-     * @param howToTreatMissingValues how missing values in vc and g should be treated
-     */
-    public JEXLMap(final Collection<JexlVCMatchExp> jexlCollection, final VariantContext vc, final Genotype g, final JexlMissingValueTreatment howToTreatMissingValues) {
-        this.jexl = initializeMap(jexlCollection);
-        this.vc = vc;
-        this.g = g;
-        this.howToTreatMissingValues = howToTreatMissingValues;
-    }
-
-
-    /**
-     * Construct a new JEXLMap which can evaluate expressions against a specific genotype and variant context
-     * @param jexlCollection collection of expressions to be evaluated
-     * @param vc VariantContext to evaluate expressions against
-     * @param g genotype to evaluate expressions against, may be null
-     *
-     * missing values are treated as false
-     */
-    public JEXLMap(final Collection<JexlVCMatchExp> jexlCollection, final VariantContext vc, final Genotype g) {
-        this(jexlCollection, vc, g, DEFAULT_MISSING_VALUE_TREATMENT);
-    }
-
-    /**
-     * Construct a new JEXLMap which can evaluate expressions against a specific VariantContext
-     * @param jexlCollection collection of expressions to be evaluated
-     * @param vc VariantContext to evaluate expressions against
-     *
-     * missing values are treated as non matches (false)
-     */
-    public JEXLMap(final Collection<JexlVCMatchExp> jexlCollection, final VariantContext vc) {
-        this(jexlCollection, vc, null, DEFAULT_MISSING_VALUE_TREATMENT);
-    }
-
-    /**
-     * Note: due to laziness, this accessor actually modifies the instance by possibly forcing evaluation of an Jexl expression.
-     *
-     * @throws IllegalArgumentException when {@code key} is {@code null} or
-     *                                  when any of the JexlVCMatchExp (i.e. keys) contains invalid Jexl expressions.
-     */
-    public Boolean get(Object key) {
-        if (key == null) {
-            throw new IllegalArgumentException("Query key is null");
-        }
-
-        // if we've already determined the value, return it
-        final Boolean value = jexl.get(key);
-        if (jexl.containsKey(key) && value != null) {
-            return value;
-        }
-
-        // otherwise cast the expression and try again
-        final JexlVCMatchExp exp = (JexlVCMatchExp) key;
-        final boolean matches = evaluateExpression(exp);
-        jexl.put(exp, matches);
-        return matches;
-    }
-
-    /**
-     * do we contain the specified key
-     * @param o the key
-     * @return true if we have a value for that key
-     */
-    public boolean containsKey(Object o) { return jexl.containsKey(o); }
-
-    public Set<JexlVCMatchExp> keySet() {
-        return jexl.keySet();
-    }
-
-    /**
-     * Get all the values of the map, i.e. the {@link Boolean} values.
-     * This is an expensive call, since it evaluates all keys that haven't been evaluated yet.
-     * This is fine if you truly want all the keys, but if you only want a portion, or  know
-     * the keys you want, you would be better off using get() to get them by name.
-     *
-     * Note: due to laziness, this accessor actually modifies the instance by possibly forcing evaluation of an Jexl expression.
-     *
-     * @return a collection of boolean values, representing the results of all the variants evaluated
-     *
-     * @throws IllegalArgumentException when any of the JexlVCMatchExp (i.e. keys) contains invalid Jexl expressions.
-     */
-    public Collection<Boolean> values() {
-        for (final JexlVCMatchExp exp : jexl.keySet()) {
-            jexl.computeIfAbsent(exp, k -> evaluateExpression(exp));
-        }
-        return jexl.values();
-    }
-
-    /**
-     * @return the number of keys, i.e. {@link JexlVCMatchExp}'s held by this mapping.
-     */
-    public int size() {
-        return jexl.size();
-    }
-
-    public boolean isEmpty() { return this.jexl.isEmpty(); }
-
-    public Boolean put(JexlVCMatchExp jexlVCMatchExp, Boolean aBoolean) {
-        return jexl.put(jexlVCMatchExp, aBoolean);
-    }
-
-    public void putAll(Map<? extends JexlVCMatchExp, ? extends Boolean> map) {
-        jexl.putAll(map);
-    }
-
-    /**
-     * Initializes a map and give all keys with null values indicating that they have not yet been evaluated.
-     * The actual value will be computed only when the key is requested via {@link #get(Object)} or {@link #values()}.
-     *
-     * @return an initialized map of jexlExpression -> null
-     */
-    private static Map<JexlVCMatchExp,Boolean> initializeMap(final Collection<JexlVCMatchExp> jexlCollection) {
-        final Map<JexlVCMatchExp,Boolean> jexlMap = new HashMap<>(jexlCollection.size());
-        for (final JexlVCMatchExp exp: jexlCollection) {
-            jexlMap.put(exp, null);
-        }
-
-        return jexlMap;
-    }
-
-    /**
-     * Evaluates a {@link JexlVCMatchExp}'s expression, given the current context (and setup the context if it's {@code null}).
-     *
-     * @param exp the {@link JexlVCMatchExp} to evaluate
-     * @return true if the expression matched the context
-     * @throws IllegalArgumentException when {@code exp} is {@code null}, or
-     *                                  when the Jexl expression in {@code exp} fails to evaluate the JexlContext
-     *                                  constructed with the input VC or genotype.
-     */
-    private boolean evaluateExpression(final JexlVCMatchExp exp) {
-        // if the context is null, we need to create it to evaluate the JEXL expression
-        if (this.jContext == null) {
-            jContext = createContext();
-        }
-
-        try {
-            //TODO figure out of this can ever evaluate to null or if that isn't actually possible
-            final Boolean value = (Boolean) exp.exp.evaluate(jContext);
-            return value == null ? howToTreatMissingValues.getMissingValueOrExplode() : value;
-        } catch (final JexlException.Variable e) {
-            //this occurs when the jexl expression contained a literal that didn't match anything in the given context
-            return howToTreatMissingValues.getMissingValueOrExplode();
-        } catch (final JexlException e) {
-            // todo - might be better if no exception is caught here but let's user decide how to deal with them; note this will propagate to get() and values()
-            throw new IllegalArgumentException(String.format("Invalid JEXL expression detected for %s", exp.name), e);
-        }
-    }
-
-    /**
-     * Create a new JexlContext
-     * This code is where new JEXL context variables should get added.
-     * @return a new jexl context initialized appropriately
-     */
-    private JexlContext createContext() {
-        if (vc == null) {
-            return new MapContext(Collections.emptyMap());
-        } else if (g == null) {
-            return new VariantJEXLContext(vc);
-        } else {
-            return new GenotypeJEXLContext(vc, g);
-        }
-    }
-
-    // //////////////////////////////////////////////////////////////////////////////////////
-    // The Following are unsupported at the moment (date: 2016/08/18)
-    // //////////////////////////////////////////////////////////////////////////////////////
-
-    // this doesn't make much sense to implement, boolean doesn't offer too much variety to deal
-    // with evaluating every key in the internal map.
-    public boolean containsValue(Object o) {
-        throw new UnsupportedOperationException("containsValue() not supported on a JEXLMap");
-    }
-
-    // this doesn't make much sense
-    public Boolean remove(Object o) {
-        throw new UnsupportedOperationException("remove() not supported on a JEXLMap");
-    }
-
-
-    public Set<Entry<JexlVCMatchExp, Boolean>> entrySet() {
-        throw new UnsupportedOperationException("entrySet() not supported on a JEXLMap");
-    }
-
-    // nope
-    public void clear() {
-        throw new UnsupportedOperationException("clear() not supported on a JEXLMap");
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/JexlMissingValueTreatment.java b/src/main/java/htsjdk/variant/variantcontext/JexlMissingValueTreatment.java
deleted file mode 100644
index 204cc3f..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/JexlMissingValueTreatment.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package htsjdk.variant.variantcontext;
-
-import java.util.function.Supplier;
-
-/**
- * How to treat values that appear in a jexl expression but are missing in the context it's applied to
- */
-public enum JexlMissingValueTreatment {
-    /**
-     * Treat expressions with a missing value as a mismatch and evaluate to false
-     */
-    TREAT_AS_MISMATCH(() -> false),
-
-    /**
-     * Treat expressions with a missing value as a match and evaluate to true
-     */
-    TREAT_AS_MATCH(() -> true),
-
-    /**
-     * Treat expressions with a missing value as an error and throw an {@link IllegalArgumentException}
-     */
-    THROW(() -> {throw new IllegalArgumentException("Jexl Expression couldn't be evaluated because there was a missing value.");});
-
-    private final Supplier<Boolean> resultSupplier;
-
-    JexlMissingValueTreatment(final Supplier<Boolean> resultSupplier){
-        this.resultSupplier = resultSupplier;
-    }
-
-    /**
-     * get the missing value that corresponds to this option or throw an exception
-     * @return the value that should be used in case of a missing value
-     * @throws IllegalArgumentException if this should be treated as an error
-     */
-    boolean getMissingValueOrExplode(){
-        return resultSupplier.get();
-    }
-
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/LazyGenotypesContext.java b/src/main/java/htsjdk/variant/variantcontext/LazyGenotypesContext.java
deleted file mode 100644
index f5781cf..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/LazyGenotypesContext.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Lazy-loading GenotypesContext.  A lazy-loading context has access to the
- * VCFParser and a unparsed string of genotype data.  If the user attempts to manipulate
- * the genotypes contained in this context, we decode the data and become a full blown
- * GenotypesContext.  However, if the user never does this we are spared a lot of expense
- * decoding the genotypes unnecessarily.
- */
-public class LazyGenotypesContext extends GenotypesContext {
-
-    /**
-     * The LazyParser we'll use to decode unparsedGenotypeData if necessary.
-     *
-     * Transient because it would be extremely expensive to serialize. Instead, we fully decode
-     * all LazyGenotypesContexts before serializing them.
-     */
-    private transient LazyParser parser;
-
-    /**
-     * Lazily-parsed raw genotype data.
-     *
-     * Transient because since we always fully decode the genotype data before serializing it,
-     * there is never any case where we need to serialize unparsed genotype data.
-     */
-    private transient Object unparsedGenotypeData;
-
-    /**
-     * nUnparsedGenotypes the number of genotypes contained in the unparsedGenotypes data
-     * (known already in the parser).  Useful for isEmpty and size() optimizations
-     */
-    private int nUnparsedGenotypes;
-
-    /**
-     * True if we've already decoded the values in unparsedGenotypeData
-     */
-    private boolean loaded = false;
-
-    /**
-     * Custom de-serialization routine to ensure that all LazyGenotypesContexts we de-serialize
-     * are fully decoded. Throws an IllegalStateException if that is not the case.
-     *
-     * Necessary because the LazyParser required to decode the lazy context is transient.
-     *
-     * Note that the custom writeObject() companion to this method is implemented
-     * in the superclass (GenotypesContext), since decoding lazy data writes to superclass
-     * fields.
-     *
-     * @param in stream from which to de-serialize the LazyGenotypesContext
-     */
-    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-        in.defaultReadObject();
-
-        if ( ! loaded || unparsedGenotypeData != null ) {
-            throw new IllegalStateException("Deserialized LazyGenotypesContext is not fully decoded, but is required to have been fully decoded before serialization");
-        }
-    }
-
-    private final static ArrayList<Genotype> EMPTY = new ArrayList<Genotype>(0);
-
-    /**
-     * Simple lazy parser interface.  Provide an object implementing this
-     * interface to LazyGenotypesContext, and it's parse method will be called
-     * when the use of the lazy context requires the underlying genotypes data
-     * be parsed into Genotype objects.  The data argument is the data provided
-     * to the LazyGenotypesContext holding encoded genotypes data
-     */
-    public interface LazyParser {
-        public LazyData parse(Object data);
-    }
-
-    /**
-     * Returns the data used in the full GenotypesContext constructor
-     *
-     * {@link GenotypesContext#GenotypesContext(java.util.ArrayList, java.util.Map, java.util.List)}
-     */
-    public static class LazyData {
-        final ArrayList<Genotype> genotypes;
-        final Map<String, Integer> sampleNameToOffset;
-        final List<String> sampleNamesInOrder;
-
-        public LazyData(final ArrayList<Genotype> genotypes,
-                        final List<String> sampleNamesInOrder,
-                        final Map<String, Integer> sampleNameToOffset) {
-            this.genotypes = genotypes;
-            this.sampleNamesInOrder = sampleNamesInOrder;
-            this.sampleNameToOffset = sampleNameToOffset;
-        }
-    }
-
-    /**
-     * Creates a new lazy loading genotypes context using the LazyParser to create
-     * genotypes data on demand.
-     *
-     * @param parser the parser to be used to load on-demand genotypes data
-     * @param unparsedGenotypeData the encoded genotypes data that we will decode if necessary
-     * @param nUnparsedGenotypes the number of genotypes that will be produced if / when we actually decode the genotypes data
-     */
-    public LazyGenotypesContext(final LazyParser parser, final Object unparsedGenotypeData, final int nUnparsedGenotypes) {
-        super(EMPTY);
-        this.parser = parser;
-        this.unparsedGenotypeData = unparsedGenotypeData;
-        this.nUnparsedGenotypes = nUnparsedGenotypes;
-    }
-
-    /**
-     * Overrides the genotypes accessor.  If we haven't already, decode the genotypes data
-     * and store the decoded results in the appropriate variables.  Otherwise we just
-     * returned the decoded result directly.  Note some care needs to be taken here as
-     * the value in notToBeDirectlyAccessedGenotypes may diverge from what would be produced
-     * by decode, if after the first decode the genotypes themselves are replaced
-     * @return
-     */
-    @Override
-    protected ArrayList<Genotype> getGenotypes() {
-        decode();
-        return notToBeDirectlyAccessedGenotypes;
-    }
-
-    /**
-     * Force us to decode the genotypes, if not already done
-     */
-    public void decode() {
-        if ( ! loaded ) {
-            //System.out.printf("Loading genotypes... %s:%d%n", contig, start);
-            LazyData parsed = parser.parse(unparsedGenotypeData);
-            notToBeDirectlyAccessedGenotypes = parsed.genotypes;
-            sampleNamesInOrder = parsed.sampleNamesInOrder;
-            sampleNameToOffset = parsed.sampleNameToOffset;
-            loaded = true;
-            unparsedGenotypeData = null; // don't hold the unparsed data any longer
-            nUnparsedGenotypes = 0;
-
-            // warning -- this path allows us to create a VariantContext that doesn't run validateGenotypes()
-            // That said, it's not such an important routine -- it's just checking that the genotypes
-            // are well formed w.r.t. the alleles list, but this will be enforced within the VCFCodec
-        }
-    }
-
-    /**
-     * Overrides the ensure* functionality.  If the data hasn't been loaded
-     * yet and we want to build the cache, just decode it and we're done.  If we've
-     * already decoded the data, though, go through the super class
-     */
-    @Override
-    protected synchronized void ensureSampleNameMap() {
-        if ( ! loaded ) {
-            decode(); // will load up all of the necessary data
-        } else {
-            super.ensureSampleNameMap();
-        }
-    }
-
-    @Override
-    protected synchronized void ensureSampleOrdering() {
-        if ( ! loaded ) {
-            decode(); // will load up all of the necessary data
-        } else {
-            super.ensureSampleOrdering();
-        }
-    }
-
-    @Override
-    protected void invalidateSampleNameMap() {
-        // if the cache is invalidated, and we haven't loaded our data yet, do so
-        if ( ! loaded ) decode();
-        super.invalidateSampleNameMap();
-    }
-
-    @Override
-    protected void invalidateSampleOrdering() {
-        // if the cache is invalidated, and we haven't loaded our data yet, do so
-        if ( ! loaded ) decode();
-        super.invalidateSampleOrdering();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        // optimization -- we know the number of samples in the unparsed data, so use it here to
-        // avoid parsing just to know if the genotypes context is empty
-        return loaded ? super.isEmpty() : nUnparsedGenotypes == 0;
-    }
-
-    @Override
-    public int size() {
-        // optimization -- we know the number of samples in the unparsed data, so use it here to
-        // avoid parsing just to know the size of the context
-        return loaded ? super.size() : nUnparsedGenotypes;
-    }
-
-    public Object getUnparsedGenotypeData() {
-        return unparsedGenotypeData;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/StructuralVariantType.java b/src/main/java/htsjdk/variant/variantcontext/StructuralVariantType.java
deleted file mode 100644
index 36b517a..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/StructuralVariantType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext;
-
-/**
- * Type of Structural Variant as defined in the VCF spec 4.2
- *
- */
-public enum StructuralVariantType {
-    /** Deletion relative to the reference */
-    DEL,
-    /** Insertion of novel sequence relative to the reference */
-    INS,
-    /** Region of elevated copy number relative to the reference */
-    DUP,
-    /** Inversion of reference sequence */
-    INV,
-    /** Copy number variable region */
-    CNV,
-    /** breakend structural variation. VCF Specification : <cite>An arbitrary rearrangement
-     *  event can be summarized as a set of novel adjacencies.
-     *  Each adjacency ties together two breakends.</cite>
-     */
-    BND
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantContext.java b/src/main/java/htsjdk/variant/variantcontext/VariantContext.java
deleted file mode 100644
index 55825fb..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/VariantContext.java
+++ /dev/null
@@ -1,1734 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.vcf.VCFCompoundHeaderLine;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLineCount;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-
-import java.io.Serializable;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 
- * <h3> High-level overview </h3>
- *
- * The VariantContext object is a single general class system for representing genetic variation data composed of:
- * <ul>
- * <li>Allele: representing single genetic haplotypes (A, T, ATC, -) (note that null alleles are used here for illustration; see the Allele class for how to represent indels)</li>
- * <li>Genotype: an assignment of alleles for each chromosome of a single named sample at a particular locus</li>
- * <li>VariantContext: an abstract class holding all segregating alleles at a locus as well as genotypes
- *    for multiple individuals containing alleles at that locus</li>
- * </ul>
- * <p>
- * The class system works by defining segregating alleles, creating a variant context representing the segregating
- * information at a locus, and potentially creating and associating genotypes with individuals in the context.
- *</p>
- *<p>
- * All of the classes are highly validating -- call <code>validate()</code> if you modify them -- so you can rely on the
- * self-consistency of the data once you have a <code>VariantContext</code> in hand.  The system has a rich set of assessor
- * and manipulator routines, as well as more complex static support routines in <code>VariantContextUtils</code>.
- *</p>
- *<p>
- * The <code>VariantContext</code> (and <code>Genotype</code>) objects are attributed (supporting addition of arbitrary key/value pairs) and
- * filtered (can represent a variation that is viewed as suspect).
- *</p>
- *<p>
- *<code>VariantContext</code>s are dynamically typed, so whether a <code>VariantContext</code> is a SNP, Indel, or NoVariant depends
- * on the properties of the alleles in the context.  See the detailed documentation on the <code>Type</code> parameter below.
- *</p>
- *<p>
- * It's also easy to create subcontexts based on selected genotypes.
- *</p>
- * <h3>Working with Variant Contexts</h3>
- * By default, VariantContexts are immutable.  In order to access (in the rare circumstances where you need them)
- * setter routines, you need to create <code>MutableVariantContext</code>s and <code>MutableGenotype</code>s.
- *
- * <h3>Some example data </h3>
- *<pre>
- * Allele A, Aref, T, Tref;
- * Allele del, delRef, ATC, ATCref;
- *</pre>
- *<p>
- * A [ref] / T at 10
- *</p>
- *<pre> 
- * GenomeLoc snpLoc = GenomeLocParser.createGenomeLoc("chr1", 10, 10);
- *</pre>
- *<p>
- * A / ATC [ref] from 20-23
- *</p>
- *<pre>
- * GenomeLoc delLoc = GenomeLocParser.createGenomeLoc("chr1", 20, 22);
- *</pre>
- *<p>
- *  // A [ref] / ATC immediately after 20
- *  </p>
- *  <pre>
- * GenomeLoc insLoc = GenomeLocParser.createGenomeLoc("chr1", 20, 20);
- *</pre>
- * <h3> Alleles </h3>
- *
- * See the documentation in the <code>Allele</code> class itself
- *
- * <h4>What are they?</h4>
- *
- * <p>Alleles can be either reference or non-reference</p>
- *
- * <p>Examples of alleles used here:</p>
- *<pre>
- *   A = new Allele("A");
- *   Aref = new Allele("A", true);
- *   T = new Allele("T");
- *   ATC = new Allele("ATC");
- *</pre>
- * <h3> Creating variant contexts </h3>
- *
- * <h4> By hand </h4>
- *
- * Here's an example of a A/T polymorphism with the A being reference:
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, snpLoc, Arrays.asList(Aref, T));
- * </pre>
- *
- * If you want to create a non-variant site, just put in a single reference allele
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, snpLoc, Arrays.asList(Aref));
- * </pre>
- *
- * A deletion is just as easy:
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, delLoc, Arrays.asList(ATCref, del));
- * </pre>
- *
- * The only thing that distinguishes between an insertion and deletion is which is the reference allele.
- * An insertion has a reference allele that is smaller than the non-reference allele, and vice versa for deletions.
- *
- * <pre>
- * VariantContext vc = new VariantContext("name", insLoc, Arrays.asList(delRef, ATC));
- * </pre>
- *
- * <h4> Converting rods and other data structures to <code>VariantContext</code>s </h4>
- *
- * You can convert many common types into VariantContexts using the general function:
- *
- * <pre>
- * VariantContextAdaptors.convertToVariantContext(name, myObject)
- * </pre>
- *
- * dbSNP and VCFs, for example, can be passed in as <code>myObject</code> and a <code>VariantContext</code> corresponding to that
- * object will be returned.  A <code>null</code> return value indicates that the type isn't yet supported.  This is the best
- * and easiest way to create contexts using RODs.
- *
- *
- * <h3> Working with genotypes </h3>
- *
- * <pre>
- * List<Allele> alleles = Arrays.asList(Aref, T);
- * Genotype g1 = new Genotype(Arrays.asList(Aref, Aref), "g1", 10);
- * Genotype g2 = new Genotype(Arrays.asList(Aref, T), "g2", 10);
- * Genotype g3 = new Genotype(Arrays.asList(T, T), "g3", 10);
- * VariantContext vc = new VariantContext(snpLoc, alleles, Arrays.asList(g1, g2, g3));
- * </pre>
- *
- * At this point we have 3 genotypes in our context, g1-g3.
- *
- * You can assess a good deal of information about the genotypes through the <code>VariantContext</code>:
- *
- * <pre>
- * vc.hasGenotypes()
- * vc.isMonomorphicInSamples()
- * vc.isPolymorphicInSamples()
- * vc.getSamples().size()
- *
- * vc.getGenotypes()
- * vc.getGenotypes().get("g1")
- * vc.hasGenotype("g1")
- *
- * vc.getCalledChrCount()
- * vc.getCalledChrCount(Aref)
- * vc.getCalledChrCount(T)
- * </pre>
- *
- * <h3> NO_CALL alleles </h3>
- *
- * The system allows one to create <code>Genotype</code>s carrying special NO_CALL alleles that aren't present in the
- * set of context alleles and that represent undetermined alleles in a genotype:
- *<pre>
- * Genotype g4 = new Genotype(Arrays.asList(Allele.NO_CALL, Allele.NO_CALL), "NO_DATA_FOR_SAMPLE", 10);
- *</pre>
- *
- * <h3> subcontexts </h3>
- * It's also very easy get subcontext based only the data in a subset of the genotypes:
- *
- * <pre>
- * VariantContext vc12 = vc.subContextFromGenotypes(Arrays.asList(g1,g2));
- * VariantContext vc1 = vc.subContextFromGenotypes(Arrays.asList(g1));
- * </pre>
- *
- * <!-- comment by jdenvir: not sure what this tag is supposed to do:-->
- * <!-- <s3> -->
- *     <h3>Fully decoding.</h3>  
- *     Currently <code>VariantContext</code>s support some fields, particularly those
- *     stored as generic attributes, to be of any type.  For example, a field AB might
- *     be naturally a floating point number, 0.51, but when it's read into a VC its
- *     not decoded into the Java presentation but left as a string "0.51".  A fully
- *     decoded <code>VariantContext</code> is one where all values have been converted to their
- *     corresponding Java object types, based on the types declared in a <code>VCFHeader</code>.
- *
- *     The <code>fullyDecode(...)</code> method takes a header object and creates a new fully decoded <code>VariantContext</code>
- *     where all fields are converted to their true java representation.  The <code>VCBuilder</code>
- *     can be told that all fields are fully decoded, in which case no work is done when
- *     asking for a fully decoded version of the VC.
- * <!-- </s3> -->
- *
- * @author depristo
- */
-public class VariantContext implements Feature, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    private final static boolean WARN_ABOUT_BAD_END = true;
-    private final static int MAX_ALLELE_SIZE_FOR_NON_SV = 150;
-    private boolean fullyDecoded = false;
-    protected CommonInfo commonInfo = null;
-    public final static double NO_LOG10_PERROR = CommonInfo.NO_LOG10_PERROR;
-
-    public final static Set<String> PASSES_FILTERS = Collections.unmodifiableSet(new LinkedHashSet<String>());
-
-    /** The location of this VariantContext */
-    final protected String contig;
-    final protected long start;
-    final protected long stop;
-    private final String ID;
-
-    /** The type (cached for performance reasons) of this context */
-    protected Type type = null;
-
-    /** A set of the alleles segregating in this context */
-    final protected List<Allele> alleles;
-
-    /** A mapping from sampleName -> genotype objects for all genotypes associated with this context */
-    protected GenotypesContext genotypes = null;
-
-    /** Counts for each of the possible Genotype types in this context */
-    protected int[] genotypeCounts = null;
-
-    public final static GenotypesContext NO_GENOTYPES = GenotypesContext.NO_GENOTYPES;
-
-    // a fast cached access point to the ref / alt alleles for biallelic case
-    private Allele REF = null;
-
-    // set to the alt allele when biallelic, otherwise == null
-    private Allele ALT = null;
-
-    /* cached monomorphic value: null -> not yet computed, False, True */
-    private Boolean monomorphic = null;
-
-    /*
-* Determine which genotype fields are in use in the genotypes in VC
-* @return an ordered list of genotype fields in use in VC.  If vc has genotypes this will always include GT first
-*/
-    public List<String> calcVCFGenotypeKeys(final VCFHeader header) {
-        final Set<String> keys = new HashSet<>();
-
-        boolean sawGoodGT = false;
-        boolean sawGoodQual = false;
-        boolean sawGenotypeFilter = false;
-        boolean sawDP = false;
-        boolean sawAD = false;
-        boolean sawPL = false;
-        for (final Genotype g : this.getGenotypes()) {
-            keys.addAll(g.getExtendedAttributes().keySet());
-            if ( g.isAvailable() ) sawGoodGT = true;
-            if ( g.hasGQ() ) sawGoodQual = true;
-            if ( g.hasDP() ) sawDP = true;
-            if ( g.hasAD() ) sawAD = true;
-            if ( g.hasPL() ) sawPL = true;
-            if (g.isFiltered()) sawGenotypeFilter = true;
-        }
-
-        if ( sawGoodQual ) keys.add(VCFConstants.GENOTYPE_QUALITY_KEY);
-        if ( sawDP ) keys.add(VCFConstants.DEPTH_KEY);
-        if ( sawAD ) keys.add(VCFConstants.GENOTYPE_ALLELE_DEPTHS);
-        if ( sawPL ) keys.add(VCFConstants.GENOTYPE_PL_KEY);
-        if ( sawGenotypeFilter ) keys.add(VCFConstants.GENOTYPE_FILTER_KEY);
-
-        List<String> sortedList = ParsingUtils.sortList(new ArrayList<>(keys));
-
-        // make sure the GT is first
-        if (sawGoodGT) {
-            final List<String> newList = new ArrayList<>(sortedList.size() + 1);
-            newList.add(VCFConstants.GENOTYPE_KEY);
-            newList.addAll(sortedList);
-            sortedList = newList;
-        }
-
-        if (sortedList.isEmpty() && header.hasGenotypingData()) {
-            // this needs to be done in case all samples are no-calls
-            return Collections.singletonList(VCFConstants.GENOTYPE_KEY);
-        } else {
-            return sortedList;
-        }
-    }
-
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // validation mode
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public enum Validation {
-        ALLELES,
-        GENOTYPES
-    }
-
-    private final static EnumSet<Validation> NO_VALIDATION = EnumSet.noneOf(Validation.class);
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // constructors: see VariantContextBuilder
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Copy constructor
-     *
-     * @param other the VariantContext to copy
-     */
-    protected VariantContext(VariantContext other) {
-        this(other.getSource(), other.getID(), other.getContig(), other.getStart(), other.getEnd(),
-                other.getAlleles(), other.getGenotypes(), other.getLog10PError(),
-                other.getFiltersMaybeNull(),
-                other.getAttributes(),
-                other.fullyDecoded, NO_VALIDATION);
-    }
-
-    /**
-     * the actual constructor.  Private access only
-     *
-     * @param source          source
-     * @param contig          the contig
-     * @param start           the start base (one based)
-     * @param stop            the stop reference base (one based)
-     * @param alleles         alleles
-     * @param genotypes       genotypes map
-     * @param log10PError  qual
-     * @param filters         filters: use null for unfiltered and empty set for passes filters
-     * @param attributes      attributes
-     * @param validationToPerform     set of validation steps to take
-     */
-    protected VariantContext(final String source,
-                             final String ID,
-                             final String contig,
-                             final long start,
-                             final long stop,
-                             final Collection<Allele> alleles,
-                             final GenotypesContext genotypes,
-                             final double log10PError,
-                             final Set<String> filters,
-                             final Map<String, Object> attributes,
-                             final boolean fullyDecoded,
-                             final EnumSet<Validation> validationToPerform ) {
-        if ( contig == null ) { throw new IllegalArgumentException("Contig cannot be null"); }
-        this.contig = contig;
-        this.start = start;
-        this.stop = stop;
-
-        // intern for efficiency.  equals calls will generate NPE if ID is inappropriately passed in as null
-        if ( ID == null || ID.equals("") ) throw new IllegalArgumentException("ID field cannot be the null or the empty string");
-        this.ID = ID.equals(VCFConstants.EMPTY_ID_FIELD) ? VCFConstants.EMPTY_ID_FIELD : ID;
-
-        this.commonInfo = new CommonInfo(source, log10PError, filters, attributes);
-
-        if ( alleles == null ) { throw new IllegalArgumentException("Alleles cannot be null"); }
-
-        // we need to make this a LinkedHashSet in case the user prefers a given ordering of alleles
-        this.alleles = makeAlleles(alleles);
-
-        if ( genotypes == null || genotypes == NO_GENOTYPES ) {
-            this.genotypes = NO_GENOTYPES;
-        } else {
-            this.genotypes = genotypes.immutable();
-        }
-
-        // cache the REF and ALT alleles
-        int nAlleles = alleles.size();
-        for ( Allele a : alleles ) {
-            if ( a.isReference() ) {
-                REF = a;
-            } else if ( nAlleles == 2 ) { // only cache ALT when biallelic
-                ALT = a;
-            }
-        }
-
-        this.fullyDecoded = fullyDecoded;
-
-        if ( ! validationToPerform.isEmpty() ) {
-            validate(validationToPerform);
-        }
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Selectors
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * This method subsets down to a set of samples.
-     *
-     * At the same time returns the alleles to just those in use by the samples,
-     * if rederiveAllelesFromGenotypes is true, otherwise the full set of alleles
-     * in this VC is returned as the set of alleles in the subContext, even if
-     * some of those alleles aren't in the samples
-     *
-     * WARNING: BE CAREFUL WITH rederiveAllelesFromGenotypes UNLESS YOU KNOW WHAT YOU ARE DOING
-     *
-     * @param sampleNames    the sample names
-     * @param rederiveAllelesFromGenotypes if true, returns the alleles to just those in use by the samples, true should be default
-     * @return new VariantContext subsetting to just the given samples
-     */
-    public VariantContext subContextFromSamples(Set<String> sampleNames, final boolean rederiveAllelesFromGenotypes ) {
-        if ( sampleNames.containsAll(getSampleNames()) && ! rederiveAllelesFromGenotypes ) {
-            return this; // fast path when you don't have any work to do
-        } else {
-            VariantContextBuilder builder = new VariantContextBuilder(this);
-            GenotypesContext newGenotypes = genotypes.subsetToSamples(sampleNames);
-
-            if ( rederiveAllelesFromGenotypes ) {
-                Set<Allele> allelesFromGenotypes = allelesOfGenotypes(newGenotypes);
-
-                // ensure original order of genotypes
-                List<Allele> rederivedAlleles = new ArrayList<>(allelesFromGenotypes.size());
-                for (Allele allele : alleles)
-                    if (allelesFromGenotypes.contains(allele))
-                        rederivedAlleles.add(allele);
-
-                builder.alleles(rederivedAlleles);
-            }
-            else {
-                builder.alleles(alleles);
-            }
-
-            return builder.genotypes(newGenotypes).make();
-        }
-    }
-
-    /**
-     * @see #subContextFromSamples(java.util.Set, boolean) with rederiveAllelesFromGenotypes = true
-     *
-     * @param sampleNames
-     * @return
-     */
-    public VariantContext subContextFromSamples(final Set<String> sampleNames) {
-        return subContextFromSamples(sampleNames, true);
-    }
-
-    public VariantContext subContextFromSample(String sampleName) {
-        return subContextFromSamples(Collections.singleton(sampleName));
-    }
-
-    /**
-     * helper routine for subcontext
-     * @param genotypes genotypes
-     * @return allele set
-     */
-    private final Set<Allele> allelesOfGenotypes(Collection<Genotype> genotypes) {
-        final Set<Allele> alleles = new HashSet<>();
-
-        boolean addedref = false;
-        for ( final Genotype g : genotypes ) {
-            for ( final Allele a : g.getAlleles() ) {
-                addedref = addedref || a.isReference();
-                if ( a.isCalled() )
-                    alleles.add(a);
-            }
-        }
-        if ( ! addedref ) alleles.add(getReference());
-
-        return alleles;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // type operations
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * @see <a href="http://www.ncbi.nlm.nih.gov/bookshelf/br.fcgi?book=handbook&part=ch5&rendertype=table&id=ch5.ch5_t3">NCBI Handbook</a>
-     *
-     * <h3>Format:</h3>
-     * <ul>
-     * <li><strong>dbSNP variation class</strong></li>
-     * <li>Rules for assigning allele classes</li>
-     * <li>Sample allele definition</li>
-     * </ul>
-     * <h3>Supported Types</h3>
-     * <ul>
-     * <li><strong>Single Nucleotide Polymorphisms (SNPs)a</strong></li>
-     * <li>Strictly defined as single base substitutions involving A, T, C, or G.</li>
-     * <li>A/T</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>Deletion/Insertion Polymorphisms (DIPs)</strong></li>
-     * <li>Designated using the full sequence of the insertion as one allele, and either a fully
-     *   defined string for the variant allele or a '-' character to specify the deleted allele.
-     *   This class will be assigned to a variation if the variation alleles are of different lengths or
-     *   if one of the alleles is deleted ('-').</li>
-     * <li>T/-/CCTA/G</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>No-variation</strong></li>
-     * <li>Reports may be submitted for segments of sequence that are assayed and determined to be invariant
-     *   in the sample.</li>
-     * <li>(NoVariation)</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>Mixed</strong></li>
-     * <li>Mix of other classes</li>
-     * </ul>
-     * 
-     * Also supports NO_VARIATION type, used to indicate that the site isn't polymorphic in the population
-     *
-     *
-     * <h3>Not currently supported:</h3>
-     *
-     * <ul>
-     * <li><strong>Heterozygous sequence</strong></li>
-     * <li>The term heterozygous is used to specify a region detected by certain methods that do not
-     * resolve the polymorphism into a specific sequence motif. In these cases, a unique flanking
-     * sequence must be provided to define a sequence context for the variation.</li>
-     * <li>(heterozygous)</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>Microsatellite or short tandem repeat (STR)</strong></li>
-     * <li>Alleles are designated by providing the repeat motif and the copy number for each allele.
-     * Expansion of the allele repeat motif designated in dbSNP into full-length sequence will
-     * be only an approximation of the true genomic sequence because many microsatellite markers are
-     * not fully sequenced and are resolved as size variants only.</li>
-     * <li>(CAC)8/9/10/11</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>Named variant</strong></li>
-     * <li>Applies to insertion/deletion polymorphisms of longer sequence features, such as retroposon
-     * dimorphism for Alu or line elements. These variations frequently include a deletion '-' indicator
-     * for the absent allele.</li>
-     * <li>(alu) / -</li>
-     * </ul>
-     * <br>
-     * <ul>
-     * <li><strong>Multi-Nucleotide Polymorphism (MNP)</strong></li>
-     * <li>Assigned to variations that are multi-base variations of a single, common length</li>
-     * <li>GGA/AGT</li>
-     * </ul>
-     */
-    public enum Type {
-        NO_VARIATION,
-        SNP,
-        MNP,    // a multi-nucleotide polymorphism
-        INDEL,
-        SYMBOLIC,
-        MIXED,
-    }
-
-    /**
-     * Determines (if necessary) and returns the type of this variation by examining the alleles it contains.
-     *
-     * @return the type of this VariantContext
-     **/
-    public Type getType() {
-        if ( type == null )
-            determineType();
-
-        return type;
-    }
-
-    /**
-     * convenience method for SNPs
-     *
-     * @return true if this is a SNP, false otherwise
-     */
-    public boolean isSNP() { return getType() == Type.SNP; }
-
-
-    /**
-     * convenience method for variants
-     *
-     * @return true if this is a variant allele, false if it's reference
-     */
-    public boolean isVariant() { return getType() != Type.NO_VARIATION; }
-
-    /**
-     * convenience method for point events
-     *
-     * @return true if this is a SNP or ref site, false if it's an indel or mixed event
-     */
-    public boolean isPointEvent() { return isSNP() || !isVariant(); }
-
-    /**
-     * convenience method for indels
-     *
-     * @return true if this is an indel, false otherwise
-     */
-    public boolean isIndel() { return getType() == Type.INDEL; }
-
-    /**
-     * @return true if the alleles indicate a simple insertion (i.e., the reference allele is Null)
-     */
-    public boolean isSimpleInsertion() {
-        // can't just call !isSimpleDeletion() because of complex indels
-        return isSimpleIndel() && getReference().length() == 1;
-    }
-
-    /**
-     * @return true if the alleles indicate a simple deletion (i.e., a single alt allele that is Null)
-     */
-    public boolean isSimpleDeletion() {
-        // can't just call !isSimpleInsertion() because of complex indels
-        return isSimpleIndel() && getAlternateAllele(0).length() == 1;
-    }
-
-    /**
-     * @return true if the alleles indicate a simple indel, false otherwise.
-     */
-    public boolean isSimpleIndel() {
-        return getType() == Type.INDEL                   // allelic lengths differ
-                && isBiallelic()                         // exactly 2 alleles
-                && getReference().length() > 0           // ref is not null or symbolic
-                && getAlternateAllele(0).length() > 0    // alt is not null or symbolic
-                && getReference().getBases()[0] == getAlternateAllele(0).getBases()[0]    // leading bases match for both alleles
-                && (getReference().length() == 1 || getAlternateAllele(0).length() == 1);
-    }
-
-    /**
-     * @return true if the alleles indicate neither a simple deletion nor a simple insertion
-     */
-    public boolean isComplexIndel() {
-        return isIndel() && !isSimpleDeletion() && !isSimpleInsertion();
-    }
-
-    public boolean isSymbolic() {
-        return getType() == Type.SYMBOLIC;
-    }
-
-    public boolean isStructuralIndel() {
-        if ( getType() == Type.INDEL ) {
-            List<Integer> sizes = getIndelLengths();
-            if ( sizes != null ) {
-                for ( Integer length : sizes ) {
-                    if ( length > MAX_ALLELE_SIZE_FOR_NON_SV ) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     *
-     * @return true if the variant is symbolic or a large indel
-     */
-    public boolean isSymbolicOrSV() {
-        return isSymbolic() || isStructuralIndel();
-    }
-
-    public boolean isMNP() {
-        return getType() == Type.MNP;
-    }
-
-    /**
-     * convenience method for indels
-     *
-     * @return true if this is an mixed variation, false otherwise
-     */
-    public boolean isMixed() { return getType() == Type.MIXED; }
-
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Generic accessors
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    public boolean hasID() {
-        return getID() != VCFConstants.EMPTY_ID_FIELD;
-    }
-
-    public boolean emptyID() {
-        return ! hasID();
-    }
-
-    public String getID() {
-        return ID;
-    }
-
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // get routines to access context info fields
-    //
-    // ---------------------------------------------------------------------------------------------------------
-    public String getSource()                   { return commonInfo.getName(); }
-    public Set<String> getFiltersMaybeNull()    { return commonInfo.getFiltersMaybeNull(); }
-    public Set<String> getFilters()             { return commonInfo.getFilters(); }
-    public boolean isFiltered()                 { return commonInfo.isFiltered(); }
-    public boolean isNotFiltered()              { return commonInfo.isNotFiltered(); }
-    public boolean filtersWereApplied()         { return commonInfo.filtersWereApplied(); }
-    public boolean hasLog10PError()             { return commonInfo.hasLog10PError(); }
-    public double getLog10PError()              { return commonInfo.getLog10PError(); }
-    public double getPhredScaledQual()          { return commonInfo.getPhredScaledQual(); }
-
-    public Map<String, Object>  getAttributes() { return commonInfo.getAttributes(); }
-    public boolean hasAttribute(String key)     { return commonInfo.hasAttribute(key); }
-    public Object getAttribute(String key)      { return commonInfo.getAttribute(key); }
-
-    public Object getAttribute(String key, Object defaultValue) {
-        return commonInfo.getAttribute(key, defaultValue);
-    }
-
-    public String getAttributeAsString(String key, String defaultValue)   { return commonInfo.getAttributeAsString(key, defaultValue); }
-    public int getAttributeAsInt(String key, int defaultValue)            { return commonInfo.getAttributeAsInt(key, defaultValue); }
-    public double getAttributeAsDouble(String key, double  defaultValue)  { return commonInfo.getAttributeAsDouble(key, defaultValue); }
-    public boolean getAttributeAsBoolean(String key, boolean  defaultValue)  { return commonInfo.getAttributeAsBoolean(key, defaultValue); }
-    /** returns the value as an empty list if the key was not found,
-        as a java.util.List if the value is a List or an Array,
-        as a Collections.singletonList if there is only one value */
-    public List<Object> getAttributeAsList(String key)  { return commonInfo.getAttributeAsList(key); }
-    public List<String> getAttributeAsStringList(String key, String defaultValue) { return commonInfo.getAttributeAsStringList(key, defaultValue); }
-    public List<Integer> getAttributeAsIntList(String key, int defaultValue) { return commonInfo.getAttributeAsIntList(key, defaultValue); }
-    public List<Double> getAttributeAsDoubleList(String key, double defaultValue) { return commonInfo.getAttributeAsDoubleList(key, defaultValue); }
-    public CommonInfo getCommonInfo() {
-        return commonInfo;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Working with alleles
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * @return the reference allele for this context
-     */
-    public Allele getReference() {
-        Allele ref = REF;
-        if ( ref == null )
-            throw new IllegalStateException("BUG: no reference allele found at " + this);
-        return ref;
-    }
-
-
-    /**
-     * @return true if the context is strictly bi-allelic
-     */
-    public boolean isBiallelic() {
-        return getNAlleles() == 2;
-    }
-
-    /**
-     * @return The number of segregating alleles in this context
-     */
-    public int getNAlleles() {
-        return alleles.size();
-    }
-
-    /**
-     * Returns the maximum ploidy of all samples in this VC, or default if there are no genotypes
-     *
-     * This function is caching, so it's only expensive on the first call
-     *
-     * @param defaultPloidy the default ploidy, if all samples are no-called
-     * @return default, or the max ploidy
-     */
-    public int getMaxPloidy(final int defaultPloidy) {
-        return genotypes.getMaxPloidy(defaultPloidy);
-    }
-
-    /**
-     * @return The allele sharing the same bases as this String.  A convenience method; better to use byte[]
-     */
-    public Allele getAllele(String allele) {
-        return getAllele(allele.getBytes());
-    }
-
-    /**
-     * @return The allele sharing the same bases as this byte[], or null if no such allele is present.
-     */
-    public Allele getAllele(byte[] allele) {
-        return Allele.getMatchingAllele(getAlleles(), allele);
-    }
-
-    /**
-     * @return True if this context contains Allele allele, or false otherwise
-     */
-    public boolean hasAllele(final Allele allele) {
-        return hasAllele(allele, false, true);
-    }
-
-    public boolean hasAllele(final Allele allele, final boolean ignoreRefState) {
-        return hasAllele(allele, ignoreRefState, true);
-    }
-
-    public boolean hasAlternateAllele(final Allele allele) {
-        return hasAllele(allele, false, false);
-    }
-
-    public boolean hasAlternateAllele(final Allele allele, final boolean ignoreRefState) {
-        return hasAllele(allele, ignoreRefState, false);
-    }
-
-    private boolean hasAllele(final Allele allele, final boolean ignoreRefState, final boolean considerRefAllele) {
-        if ( (considerRefAllele && allele == REF) || allele == ALT ) // optimization for cached cases
-            return true;
-
-        final List<Allele> allelesToConsider = considerRefAllele ? getAlleles() : getAlternateAlleles();
-        for ( Allele a : allelesToConsider ) {
-            if ( a.equals(allele, ignoreRefState) )
-                return true;
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Gets the alleles.  This method should return all of the alleles present at the location,
-     * including the reference allele.  There are no constraints imposed on the ordering of alleles
-     * in the set. If the reference is not an allele in this context it will not be included.
-     *
-     * @return the set of alleles
-     */
-    public List<Allele> getAlleles() { return alleles; }
-
-    /**
-     * Gets the alternate alleles.  This method should return all the alleles present at the location,
-     * NOT including the reference allele.  There are no constraints imposed on the ordering of alleles
-     * in the set.
-     *
-     * @return the set of alternate alleles
-     */
-    public List<Allele> getAlternateAlleles() {
-        return alleles.subList(1, alleles.size());
-    }
-
-    /**
-     * Gets the sizes of the alternate alleles if they are insertion/deletion events, and returns a list of their sizes
-     *
-     * @return a list of indel lengths ( null if not of type indel or mixed )
-     */
-    public List<Integer> getIndelLengths() {
-        if ( getType() != Type.INDEL && getType() != Type.MIXED ) {
-            return null;
-        }
-
-        List<Integer> lengths = new ArrayList<>();
-        for ( Allele a : getAlternateAlleles() ) {
-            lengths.add(a.length() - getReference().length());
-        }
-
-        return lengths;
-    }
-
-    /**
-     * @param i -- the ith allele (from 0 to n - 2 for a context with n alleles including a reference allele)
-     * @return the ith non-reference allele in this context
-     * @throws IllegalArgumentException if i is invalid
-     */
-    public Allele getAlternateAllele(int i) {
-        return alleles.get(i+1);
-    }
-
-    /**
-     * @param  other  VariantContext whose alleles to compare against
-     * @return true if this VariantContext has the same alleles (both ref and alts) as other,
-     *         regardless of ordering. Otherwise returns false.
-     */
-    public boolean hasSameAllelesAs ( final VariantContext other ) {
-        return hasSameAlternateAllelesAs(other) && other.getReference().equals(getReference(), false);
-    }
-
-    /**
-     * @param  other  VariantContext whose alternate alleles to compare against
-     * @return true if this VariantContext has the same alternate alleles as other,
-     *         regardless of ordering. Otherwise returns false.
-     */
-    public boolean hasSameAlternateAllelesAs ( final VariantContext other ) {
-        List<Allele> thisAlternateAlleles = getAlternateAlleles();
-        List<Allele> otherAlternateAlleles = other.getAlternateAlleles();
-
-        if ( thisAlternateAlleles.size() != otherAlternateAlleles.size() ) {
-            return false;
-        }
-
-        for ( Allele allele : thisAlternateAlleles ) {
-            if ( ! otherAlternateAlleles.contains(allele) ) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Working with genotypes
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * @return the number of samples in the context
-     */
-    public int getNSamples() {
-        return genotypes.size();
-    }
-
-    /**
-     * @return true if the context has associated genotypes
-     */
-    public boolean hasGenotypes() {
-        return ! genotypes.isEmpty();
-    }
-
-    public boolean hasGenotypes(Collection<String> sampleNames) {
-        return genotypes.containsSamples(sampleNames);
-    }
-
-    /**
-     * @return set of all Genotypes associated with this context
-     */
-    public GenotypesContext getGenotypes() {
-        return genotypes;
-    }
-
-    public Iterable<Genotype> getGenotypesOrderedByName() {
-        return genotypes.iterateInSampleNameOrder();
-    }
-
-    public Iterable<Genotype> getGenotypesOrderedBy(Iterable<String> sampleOrdering) {
-        return genotypes.iterateInSampleNameOrder(sampleOrdering);
-    }
-
-    /**
-     * Returns a map from sampleName -> Genotype for the genotype associated with sampleName.  Returns a map
-     * for consistency with the multi-get function.
-     *
-     * @param sampleName   the sample name
-     * @return mapping from sample name to genotype
-     * @throws IllegalArgumentException if sampleName isn't bound to a genotype
-     */
-    public GenotypesContext getGenotypes(String sampleName) {
-        return getGenotypes(Collections.singleton(sampleName));
-    }
-
-    /**
-     * Returns a map from sampleName -> Genotype for each sampleName in sampleNames.  Returns a map
-     * for consistency with the multi-get function.
-     *
-     * For testing convenience only
-     *
-     * @param sampleNames a unique list of sample names
-     * @return subsetting genotypes context
-     * @throws IllegalArgumentException if sampleName isn't bound to a genotype
-     */
-    protected GenotypesContext getGenotypes(Collection<String> sampleNames) {
-        return getGenotypes().subsetToSamples(new HashSet<>(sampleNames));
-    }
-
-    public GenotypesContext getGenotypes(Set<String> sampleNames) {
-        return getGenotypes().subsetToSamples(sampleNames);
-    }
-
-
-    /**
-     * @return the set of all sample names in this context, not ordered
-     */
-    public Set<String> getSampleNames() {
-        return getGenotypes().getSampleNames();
-    }
-
-    public List<String> getSampleNamesOrderedByName() {
-        return getGenotypes().getSampleNamesOrderedByName();
-    }
-
-    /**
-     * @param sample  the sample name
-     *
-     * @return the Genotype associated with the given sample in this context or null if the sample is not in this context
-     */
-    public Genotype getGenotype(String sample) {
-        return getGenotypes().get(sample);
-    }
-
-    public boolean hasGenotype(String sample) {
-        return getGenotypes().containsSample(sample);
-    }
-
-    /**
-     * @param ith the sample index
-     *
-     * @return the ith genotype in this context or null if there aren't that many genotypes
-     */
-    public Genotype getGenotype(int ith) {
-        return genotypes.size() > ith ? genotypes.get(ith) : null;
-    }
-
-    /**
-     * Returns the number of chromosomes carrying any allele in the genotypes (i.e., excluding NO_CALLS)
-     *
-     * @return chromosome count
-     */
-    public int getCalledChrCount() {
-        final Set<String> noSamples = Collections.emptySet();
-        return  getCalledChrCount(noSamples);
-    }
-
-    /**
-     * Returns the number of chromosomes carrying any allele in the genotypes (i.e., excluding NO_CALLS)
-     *
-     * @param sampleIds IDs of samples to take into account. If empty then all samples are included.
-     * @return chromosome count
-     */
-    public int getCalledChrCount(Set<String> sampleIds) {
-        int n = 0;
-        GenotypesContext genotypes = sampleIds.isEmpty() ? getGenotypes() : getGenotypes(sampleIds);
-
-        for ( final Genotype g : genotypes) {
-            for ( final Allele a : g.getAlleles() )
-                n += a.isNoCall() ? 0 : 1;
-        }
-
-        return n;
-    }
-
-    /**
-     * Returns the number of chromosomes carrying allele A in the genotypes
-     *
-     * @param a allele
-     * @return chromosome count
-     */
-    public int getCalledChrCount(Allele a) {
-        return getCalledChrCount(a, new HashSet<>(0));
-    }
-
-    /**
-     * Returns the number of chromosomes carrying allele A in the genotypes
-     *
-     * @param a allele
-     * @param sampleIds - IDs of samples to take into account. If empty then all samples are included.
-     * @return chromosome count
-     */
-    public int getCalledChrCount(Allele a, Set<String> sampleIds) {
-        int n = 0;
-        GenotypesContext genotypes = sampleIds.isEmpty() ? getGenotypes() : getGenotypes(sampleIds);
-
-        for ( final Genotype g : genotypes ) {
-            n += g.countAllele(a);
-        }
-
-        return n;
-    }
-
-    /**
-     * Genotype-specific functions -- are the genotypes monomorphic w.r.t. to the alleles segregating at this
-     * site?  That is, is the number of alternate alleles among all fo the genotype == 0?
-     *
-     * @return true if it's monomorphic
-     */
-    public boolean isMonomorphicInSamples() {
-        if ( monomorphic == null )
-            monomorphic = ! isVariant() || (hasGenotypes() && getCalledChrCount(getReference()) == getCalledChrCount());
-        return monomorphic;
-    }
-
-    /**
-     * Genotype-specific functions -- are the genotypes polymorphic w.r.t. to the alleles segregating at this
-     * site?  That is, is the number of alternate alleles among all fo the genotype > 0?
-     *
-     * @return true if it's polymorphic
-     */
-    public boolean isPolymorphicInSamples() {
-        return ! isMonomorphicInSamples();
-    }
-
-    private void calculateGenotypeCounts() {
-        if ( genotypeCounts == null ) {
-            genotypeCounts = new int[GenotypeType.values().length];
-
-            for ( final Genotype g : getGenotypes() ) {
-                genotypeCounts[g.getType().ordinal()]++;
-            }
-        }
-    }
-
-    /**
-     * Genotype-specific functions -- how many no-calls are there in the genotypes?
-     *
-     * @return number of no calls
-     */
-    public int getNoCallCount() {
-        calculateGenotypeCounts();
-        return genotypeCounts[GenotypeType.NO_CALL.ordinal()];
-    }
-
-    /**
-     * Genotype-specific functions -- how many hom ref calls are there in the genotypes?
-     *
-     * @return number of hom ref calls
-     */
-    public int getHomRefCount() {
-        calculateGenotypeCounts();
-        return genotypeCounts[GenotypeType.HOM_REF.ordinal()];
-    }
-
-    /**
-     * Genotype-specific functions -- how many het calls are there in the genotypes?
-     *
-     * @return number of het calls
-     */
-    public int getHetCount() {
-        calculateGenotypeCounts();
-        return genotypeCounts[GenotypeType.HET.ordinal()];
-    }
-
-    /**
-     * Genotype-specific functions -- how many hom var calls are there in the genotypes?
-     *
-     * @return number of hom var calls
-     */
-    public int getHomVarCount() {
-        calculateGenotypeCounts();
-        return genotypeCounts[GenotypeType.HOM_VAR.ordinal()];
-    }
-
-    /**
-     * Genotype-specific functions -- how many mixed calls are there in the genotypes?
-     *
-     * @return number of mixed calls
-     */
-    public int getMixedCount() {
-        calculateGenotypeCounts();
-        return genotypeCounts[GenotypeType.MIXED.ordinal()];
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // validation: extra-strict validation routines for paranoid users
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Run all extra-strict validation tests on a Variant Context object
-     *
-     * @param reportedReference   the reported reference allele
-     * @param observedReference     the observed reference allele
-     * @param rsIDs               the true dbSNP IDs
-     */
-    public void extraStrictValidation(final Allele reportedReference, final Allele observedReference, final Set<String> rsIDs) {
-        // validate the reference
-        validateReferenceBases(reportedReference, observedReference);
-
-        // validate the RS IDs
-        validateRSIDs(rsIDs);
-
-        // validate the alternate alleles
-        validateAlternateAlleles();
-
-        // validate the AN and AC fields
-        validateChromosomeCounts();
-
-        // TODO: implement me
-        //checkReferenceTrack();
-    }
-
-    public void validateReferenceBases(final Allele reportedReference, final Allele observedReference) {
-        if ( reportedReference != null && !reportedReference.basesMatch(observedReference) ) {
-            throw new TribbleException.InternalCodecException(String.format("the REF allele is incorrect for the record at position %s:%d, fasta says %s vs. VCF says %s", getContig(), getStart(), observedReference.getBaseString(), reportedReference.getBaseString()));
-        }
-    }
-
-    public void validateRSIDs(Set<String> rsIDs) {
-        if ( rsIDs != null && hasID() ) {
-            for ( String id : getID().split(VCFConstants.ID_FIELD_SEPARATOR) ) {
-                if ( id.startsWith("rs") && !rsIDs.contains(id) )
-                    throw new TribbleException.InternalCodecException(String.format("the rsID %s for the record at position %s:%d is not in dbSNP", id, getContig(), getStart()));
-            }
-        }
-    }
-
-    public void validateAlternateAlleles() {
-        if ( !hasGenotypes() )
-            return;
-
-        // maintain a list of non-symbolic alleles expected in the REF and ALT fields of the record
-        // (we exclude symbolic alleles because it's commonly expected that they don't show up in the genotypes, e.g. with GATK gVCFs)
-        final List<Allele> reportedAlleles = new ArrayList<Allele>();
-        for ( final Allele allele : getAlleles() ) {
-            if ( !allele.isSymbolic() )
-                reportedAlleles.add(allele);
-        }
-
-        // maintain a list of non-symbolic alleles observed in the genotypes
-        final Set<Allele> observedAlleles = new HashSet<>();
-        observedAlleles.add(getReference());
-        for ( final Genotype g : getGenotypes() ) {
-            if ( g.isCalled() ) {
-                for ( final Allele allele : g.getAlleles() ) {
-                    if ( !allele.isSymbolic() )
-                        observedAlleles.add(allele);
-                }
-            }
-        }
-        if ( observedAlleles.contains(Allele.NO_CALL) )
-            observedAlleles.remove(Allele.NO_CALL);
-
-        if ( reportedAlleles.size() != observedAlleles.size() )
-            throw new TribbleException.InternalCodecException(String.format("one or more of the ALT allele(s) for the record at position %s:%d are not observed at all in the sample genotypes", getContig(), getStart()));
-
-        int originalSize = reportedAlleles.size();
-        // take the intersection and see if things change
-        observedAlleles.retainAll(reportedAlleles);
-        if ( observedAlleles.size() != originalSize )
-            throw new TribbleException.InternalCodecException(String.format("one or more of the ALT allele(s) for the record at position %s:%d are not observed at all in the sample genotypes", getContig(), getStart()));
-    }
-
-    private void validateAttributeIsExpectedSize(final String attributeKey, final int numAlternateAlleles ) {
-        final List<Object> actualValues = getAttributeAsList(attributeKey);
-        if (!actualValues.isEmpty()) {
-            // always have at least one actual value
-            final int expectedValuesSize = numAlternateAlleles > 0 ? numAlternateAlleles : 1;
-            if (actualValues.size() != expectedValuesSize) {
-                throw new TribbleException.InternalCodecException(String.format("the %s tag has the incorrect number of records at position %s:%d, %d vs. %d", attributeKey, getContig(), getStart(), actualValues.size(), expectedValuesSize));
-            }
-        }
-    }
-
-    public void validateChromosomeCounts() {
-        final int numberOfAlternateAlleles = alleles.size() - 1;
-        validateAttributeIsExpectedSize(VCFConstants.ALLELE_COUNT_KEY, numberOfAlternateAlleles);
-        validateAttributeIsExpectedSize(VCFConstants.ALLELE_FREQUENCY_KEY, numberOfAlternateAlleles);
-
-        if ( !hasGenotypes() )
-            return;
-
-        // AN
-        if ( hasAttribute(VCFConstants.ALLELE_NUMBER_KEY) ) {
-            final int reportedAN = Integer.valueOf(getAttribute(VCFConstants.ALLELE_NUMBER_KEY).toString());
-            final int observedAN = getCalledChrCount();
-            if ( reportedAN != observedAN )
-                throw new TribbleException.InternalCodecException(String.format("the Allele Number (AN) tag is incorrect for the record at position %s:%d, %d vs. %d", getContig(), getStart(), reportedAN, observedAN));
-        }
-
-        // AC
-        if ( hasAttribute(VCFConstants.ALLELE_COUNT_KEY) ) {
-            final ArrayList<Integer> observedACs = new ArrayList<>();
-
-            // if there are alternate alleles, record the relevant tags
-            if ( numberOfAlternateAlleles > 0 ) {
-                for ( Allele allele : getAlternateAlleles() ) {
-                    observedACs.add(getCalledChrCount(allele));
-                }
-            }
-            else { // otherwise, set them to 0
-                observedACs.add(0);
-            }
-
-            final List<Object> reportedACs = getAttributeAsList(VCFConstants.ALLELE_COUNT_KEY);
-
-            for (int i = 0; i < observedACs.size(); i++) {
-                // need to cast to int to make sure we don't have an issue below with object equals (earlier bug) - EB
-                final int reportedAC = Integer.valueOf(reportedACs.get(i).toString());
-                if ( reportedAC != observedACs.get(i) )
-                    throw new TribbleException.InternalCodecException(String.format("the Allele Count (AC) tag is incorrect for the record at position %s:%d, %s vs. %d", getContig(), getStart(), reportedAC, observedACs.get(i)));
-            }
-        }
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // validation: the normal validation routines are called automatically upon creation of the VC
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    private boolean validate(final EnumSet<Validation> validationToPerform) {
-        validateStop();
-        for (final Validation val : validationToPerform ) {
-            switch (val) {
-                case ALLELES: validateAlleles(); break;
-                case GENOTYPES: validateGenotypes(); break;
-                default: throw new IllegalArgumentException("Unexpected validation mode " + val);
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Check that getEnd() == END from the info field, if it's present
-     */
-    private void validateStop() {
-        if ( hasAttribute(VCFConstants.END_KEY) ) {
-            final int end = getAttributeAsInt(VCFConstants.END_KEY, -1);
-            assert end != -1;
-            if ( end != getEnd() ) {
-                final String message = "Badly formed variant context at location " + getContig() + ":"
-                        + getStart() + "; getEnd() was " + getEnd()
-                        + " but this VariantContext contains an END key with value " + end;
-                if ( GeneralUtils.DEBUG_MODE_ENABLED && WARN_ABOUT_BAD_END ) {
-                    System.err.println(message);
-                }
-                else {
-                    throw new TribbleException(message);
-                }
-            }
-        } else {
-            final long length = (stop - start) + 1;
-            if ( ! hasSymbolicAlleles() && length != getReference().length() ) {
-                throw new IllegalStateException("BUG: GenomeLoc " + contig + ":" + start + "-" + stop + " has a size == " + length + " but the variation reference allele has length " + getReference().length() + " this = " + this);
-            }
-        }
-    }
-
-    private void validateAlleles() {
-
-        boolean alreadySeenRef = false;
-
-        for ( final Allele allele : alleles ) {
-            // make sure there's only one reference allele
-            if ( allele.isReference() ) {
-                if ( alreadySeenRef ) throw new IllegalArgumentException("BUG: Received two reference tagged alleles in VariantContext " + alleles + " this=" + this);
-                alreadySeenRef = true;
-            }
-
-            if ( allele.isNoCall() ) {
-                throw new IllegalArgumentException("BUG: Cannot add a no call allele to a variant context " + alleles + " this=" + this);
-            }
-        }
-
-        // make sure there's one reference allele
-        if ( ! alreadySeenRef )
-            throw new IllegalArgumentException("No reference allele found in VariantContext");
-    }
-
-    private void validateGenotypes() {
-        if ( this.genotypes == null ) throw new IllegalStateException("Genotypes is null");
-
-        for ( final Genotype g : this.genotypes ) {
-            if ( g.isAvailable() ) {
-                for ( Allele gAllele : g.getAlleles() ) {
-                    if ( ! hasAllele(gAllele) && gAllele.isCalled() )
-                        throw new IllegalStateException("Allele in genotype " + gAllele + " not in the variant context " + alleles);
-                }
-            }
-        }
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // utility routines
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    private void determineType() {
-        if ( type == null ) {
-            switch ( getNAlleles() ) {
-                case 0:
-                    throw new IllegalStateException("Unexpected error: requested type of VariantContext with no alleles!" + this);
-                case 1:
-                    // note that this doesn't require a reference allele.  You can be monomorphic independent of having a
-                    // reference allele
-                    type = Type.NO_VARIATION;
-                    break;
-                default:
-                    determinePolymorphicType();
-            }
-        }
-    }
-
-    private void determinePolymorphicType() {
-        type = null;
-
-        // do a pairwise comparison of all alleles against the reference allele
-        for ( Allele allele : alleles ) {
-            if ( allele == REF )
-                continue;
-
-            // find the type of this allele relative to the reference
-            Type biallelicType = typeOfBiallelicVariant(REF, allele);
-
-            // for the first alternate allele, set the type to be that one
-            if ( type == null ) {
-                type = biallelicType;
-            }
-            // if the type of this allele is different from that of a previous one, assign it the MIXED type and quit
-            else if ( biallelicType != type ) {
-                type = Type.MIXED;
-                return;
-            }
-        }
-    }
-
-    private static Type typeOfBiallelicVariant(Allele ref, Allele allele) {
-        if ( ref.isSymbolic() )
-            throw new IllegalStateException("Unexpected error: encountered a record with a symbolic reference allele");
-
-        if ( allele.isSymbolic() )
-            return Type.SYMBOLIC;
-
-        if ( ref.length() == allele.length() ) {
-            if ( allele.length() == 1 )
-                return Type.SNP;
-            else
-                return Type.MNP;
-        }
-
-        // Important note: previously we were checking that one allele is the prefix of the other.  However, that's not an
-        // appropriate check as can be seen from the following example:
-        // REF = CTTA and ALT = C,CT,CA
-        // This should be assigned the INDEL type but was being marked as a MIXED type because of the prefix check.
-        // In truth, it should be absolutely impossible to return a MIXED type from this method because it simply
-        // performs a pairwise comparison of a single alternate allele against the reference allele (whereas the MIXED type
-        // is reserved for cases of multiple alternate alleles of different types).  Therefore, if we've reached this point
-        // in the code (so we're not a SNP, MNP, or symbolic allele), we absolutely must be an INDEL.
-
-        return Type.INDEL;
-
-        // old incorrect logic:
-        // if (oneIsPrefixOfOther(ref, allele))
-        //     return Type.INDEL;
-        // else
-        //     return Type.MIXED;
-    }
-
-    public String toString() {
-        // Note: passing genotypes to String.format() will implicitly decode the genotypes
-        // This may not be desirable, so don't decode by default
-
-        return genotypes.isLazyWithData() ? toStringUnparsedGenotypes() : toStringDecodeGenotypes();
-    }
-
-    public String toStringDecodeGenotypes() {
-        return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s GT=%s",
-                getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
-                hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
-                this.getType(),
-                ParsingUtils.sortList(this.getAlleles()),
-                ParsingUtils.sortedString(this.getAttributes()),
-                this.getGenotypes());
-    }
-
-    private String toStringUnparsedGenotypes() {
-        return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s GT=%s",
-                getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
-                hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
-                this.getType(),
-                ParsingUtils.sortList(this.getAlleles()),
-                ParsingUtils.sortedString(this.getAttributes()),
-                ((LazyGenotypesContext)this.genotypes).getUnparsedGenotypeData());
-    }
-
-    public String toStringWithoutGenotypes() {
-        return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s",
-                getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
-                hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
-                this.getType(),
-                ParsingUtils.sortList(this.getAlleles()),
-                ParsingUtils.sortedString(this.getAttributes()));
-    }
-
-    // protected basic manipulation routines
-    private static List<Allele> makeAlleles(Collection<Allele> alleles) {
-        final List<Allele> alleleList = new ArrayList<>(alleles.size());
-
-        boolean sawRef = false;
-        for ( final Allele a : alleles ) {
-            for ( final Allele b : alleleList ) {
-                if ( a.equals(b, true) )
-                    throw new IllegalArgumentException("Duplicate allele added to VariantContext: " + a);
-            }
-
-            // deal with the case where the first allele isn't the reference
-            if ( a.isReference() ) {
-                if ( sawRef )
-                    throw new IllegalArgumentException("Alleles for a VariantContext must contain at most one reference allele: " + alleles);
-                alleleList.add(0, a);
-                sawRef = true;
-            }
-            else
-                alleleList.add(a);
-        }
-
-        if ( alleleList.isEmpty() )
-            throw new IllegalArgumentException("Cannot create a VariantContext with an empty allele list");
-
-        if ( alleleList.get(0).isNonReference() )
-            throw new IllegalArgumentException("Alleles for a VariantContext must contain at least one reference allele: " + alleles);
-
-        return alleleList;
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // Fully decode
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    /**
-     * Return a VC equivalent to this one but where all fields are fully decoded
-     *
-     * See VariantContext document about fully decoded
-     *
-     * @param header containing types about all fields in this VC
-     * @return a fully decoded version of this VC
-     */
-    public VariantContext fullyDecode(final VCFHeader header, final boolean lenientDecoding) {
-        if ( isFullyDecoded() )
-            return this;
-        else {
-            // TODO -- warning this is potentially very expensive as it creates copies over and over
-            final VariantContextBuilder builder = new VariantContextBuilder(this);
-            fullyDecodeInfo(builder, header, lenientDecoding);
-            fullyDecodeGenotypes(builder, header);
-            builder.fullyDecoded(true);
-            return builder.make();
-        }
-    }
-
-    /**
-     * See VariantContext document about fully decoded
-     * @return true if this is a fully decoded VC
-     */
-    public boolean isFullyDecoded() {
-        return fullyDecoded;
-    }
-
-    private final void fullyDecodeInfo(final VariantContextBuilder builder, final VCFHeader header, final boolean lenientDecoding) {
-        builder.attributes(fullyDecodeAttributes(getAttributes(), header, lenientDecoding));
-    }
-
-    private final Map<String, Object> fullyDecodeAttributes(final Map<String, Object> attributes,
-                                                            final VCFHeader header,
-                                                            final boolean lenientDecoding) {
-        final Map<String, Object> newAttributes = new HashMap<>(10);
-
-        for ( final Map.Entry<String, Object> attr : attributes.entrySet() ) {
-            final String field = attr.getKey();
-
-            if ( field.equals(VCFConstants.GENOTYPE_FILTER_KEY) )
-                continue; // gross, FT is part of the extended attributes
-
-            final VCFCompoundHeaderLine format = VariantContextUtils.getMetaDataForField(header, field);
-            final Object decoded = decodeValue(field, attr.getValue(), format);
-
-            if ( decoded != null &&
-                    ! lenientDecoding
-                    && format.getCountType() != VCFHeaderLineCount.UNBOUNDED
-                    && format.getType() != VCFHeaderLineType.Flag ) { // we expect exactly the right number of elements
-                final int obsSize = decoded instanceof List ? ((List) decoded).size() : 1;
-                final int expSize = format.getCount(this);
-                if ( obsSize != expSize ) {
-                    throw new TribbleException.InvalidHeader("Discordant field size detected for field " +
-                            field + " at " + getContig() + ":" + getStart() + ".  Field had " + obsSize + " values " +
-                            "but the header says this should have " + expSize + " values based on header record " +
-                            format);
-                }
-            }
-            newAttributes.put(field, decoded);
-        }
-
-        return newAttributes;
-    }
-
-    private final Object decodeValue(final String field, final Object value, final VCFCompoundHeaderLine format) {
-        if ( value instanceof String ) {
-            if ( field.equals(VCFConstants.GENOTYPE_PL_KEY) )
-                return GenotypeLikelihoods.fromPLField((String)value);
-
-            final String string = (String)value;
-            if ( string.indexOf(',') != -1 ) {
-                final String[] splits = string.split(",");
-                final List<Object> values = new ArrayList<>(splits.length);
-                for ( int i = 0; i < splits.length; i++ )
-                    values.add(decodeOne(field, splits[i], format));
-                return values;
-            } else {
-                return decodeOne(field, string, format);
-            }
-        } else if ( value instanceof List && (((List) value).get(0)) instanceof String ) {
-            final List<String> asList = (List<String>)value;
-            final List<Object> values = new ArrayList<>(asList.size());
-            for ( final String s : asList )
-                values.add(decodeOne(field, s, format));
-            return values;
-        } else {
-            return value;
-        }
-
-        // allowMissingValuesComparedToHeader
-    }
-
-    private final Object decodeOne(final String field, final String string, final VCFCompoundHeaderLine format) {
-        try {
-            if ( string.equals(VCFConstants.MISSING_VALUE_v4) )
-                return null;
-            else {
-                switch ( format.getType() ) {
-                    case Character: return string;
-                    case Flag:
-                        final boolean b = Boolean.valueOf(string) || string.equals("1");
-                        if ( b == false )
-                            throw new TribbleException("VariantContext FLAG fields " + field + " cannot contain false values"
-                                    + " as seen at " + getContig() + ":" + getStart());
-                        return b;
-                    case String:    return string;
-                    case Integer:   return Integer.valueOf(string);
-                    case Float:     return Double.valueOf(string);
-                    default: throw new TribbleException("Unexpected type for field" + field);
-                }
-            }
-        } catch (NumberFormatException e) {
-            throw new TribbleException("Could not decode field " + field + " with value " + string + " of declared type " + format.getType());
-        }
-    }
-
-    private final void fullyDecodeGenotypes(final VariantContextBuilder builder, final VCFHeader header) {
-        final GenotypesContext gc = new GenotypesContext();
-        for ( final Genotype g : getGenotypes() ) {
-            gc.add(fullyDecodeGenotypes(g, header));
-        }
-        builder.genotypesNoValidation(gc);
-    }
-
-    private final Genotype fullyDecodeGenotypes(final Genotype g, final VCFHeader header) {
-        final Map<String, Object> map = fullyDecodeAttributes(g.getExtendedAttributes(), header, true);
-        return new GenotypeBuilder(g).attributes(map).make();
-    }
-
-    // ---------------------------------------------------------------------------------------------------------
-    //
-    // tribble integration routines -- not for public consumption
-    //
-    // ---------------------------------------------------------------------------------------------------------
-
-    @Override
-    public String getContig() {
-        return contig;
-    }
-
-    /**
-     * @return 1-based inclusive start position of the Variant
-     * INDEL events usually start on the first unaltered reference base before the INDEL
-     * 
-     * <strong>Warning:</strong> be aware that the start position of the VariantContext is defined in terms of the start position specified in the
-     * underlying vcf file, VariantContexts representing the same biological event may have different start positions depending on the
-     * specifics of the vcf file they are derived from
-     */
-    public int getStart() {
-        return (int)start;
-    }
-
-    /**
-     * @return 1-based closed end position of the Variant
-     * If the END info field is specified that value is returned, otherwise the end is the start + reference allele length - 1.
-     * For VariantContexts with a single alternate allele, if that allele is an insertion, the end position will be on the reference base
-     * before the insertion event.  If the single alt allele is a deletion, the end will be on the final deleted reference base.
-     */
-    public int getEnd() {
-        return (int)stop;
-    }
-
-    public boolean hasSymbolicAlleles() {
-        return hasSymbolicAlleles(getAlleles());
-    }
-
-    public static boolean hasSymbolicAlleles( final List<Allele> alleles ) {
-        return alleles.stream().anyMatch(Allele::isSymbolic);
-    }
-
-    public Allele getAltAlleleWithHighestAlleleCount() {
-        // optimization: for bi-allelic sites, just return the only alt allele
-        if ( isBiallelic() )
-            return getAlternateAllele(0);
-
-        return getAlternateAlleles().stream()
-                .max(Comparator.comparing(this::getCalledChrCount))
-                .orElse(null);
-    }
-
-    /**
-     * Lookup the index of allele in this variant context
-     *
-     * @param allele the allele whose index we want to get
-     * @return the index of the allele into getAlleles(), or -1 if it cannot be found
-     */
-    public int getAlleleIndex(final Allele allele) {
-        return getAlleles().indexOf(allele);
-    }
-
-    /**
-     * Return the allele index #getAlleleIndex for each allele in alleles
-     *
-     * @param alleles the alleles we want to look up
-     * @return a list of indices for each allele, in order
-     */
-    public List<Integer> getAlleleIndices(final Collection<Allele> alleles) {
-        return alleles.stream()
-                .map(this::getAlleleIndex)
-                .collect(Collectors.toCollection(() -> new ArrayList<>(alleles.size())));
-    }
-
-    public int[] getGLIndecesOfAlternateAllele(Allele targetAllele) {
-        final int index = getAlleleIndex(targetAllele);
-        if ( index == -1 ) throw new IllegalArgumentException("Allele " + targetAllele + " not in this VariantContex " + this);
-        return GenotypeLikelihoods.getPLIndecesOfAlleles(0, index);
-    }
-    
-    /** 
-     * Search for the INFO=SVTYPE and return the type of Structural Variant 
-     * @return the StructuralVariantType of null if there is no property SVTYPE 
-     * */
-    public StructuralVariantType getStructuralVariantType() {
-        final String svType = this.getAttributeAsString(VCFConstants.SVTYPE, null);
-        return svType == null ? null : StructuralVariantType.valueOf(svType);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantContextBuilder.java b/src/main/java/htsjdk/variant/variantcontext/VariantContextBuilder.java
deleted file mode 100644
index 33844db..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/VariantContextBuilder.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * <p>Builder class for <code>VariantContext</code>.</p>
- *
- * <p>Some basic assumptions here:</p>
- * <ol>
- * <li> data isn't protectively copied.  If you provide an attribute map to
- * the build, and modify it later, the builder will see this and so will any
- * resulting variant contexts.  It's best not to modify collections provided
- * to a builder.</li>
- *
- * <li> the system uses the standard builder model, allowing the simple construction idiom:
- *<blockquote>
- *   <code>builder.source("a").genotypes(gc).id("x").make()</code> => <code>VariantContext</code>
- *</blockquote></li>
- *<li>The best way to copy a VariantContext is:
- *<blockquote>
- *   <code>new VariantContextBuilder(vc).make()</code> => a copy of VC
- *</blockquote>
- * <li> validation of arguments is done at the during the final <code>make()</code> call, so a
- * <code>VariantContextBuilder</code> can exist in an inconsistent state as long as those issues
- * are resolved before the call to <code>make()</code> is issued.
- *</ol>
- * @author depristo
- */
-public class VariantContextBuilder {
-    // required fields
-    private boolean fullyDecoded = false;
-    private String source = null;
-    private String contig = null;
-    private long start = -1;
-    private long stop = -1;
-    private Collection<Allele> alleles = null;
-
-    // optional -> these are set to the appropriate default value
-    private String ID = VCFConstants.EMPTY_ID_FIELD;
-    private GenotypesContext genotypes = GenotypesContext.NO_GENOTYPES;
-    private double log10PError = VariantContext.NO_LOG10_PERROR;
-    private Set<String> filters = null;
-    private Map<String, Object> attributes = null;
-    private boolean attributesCanBeModified = false;
-
-    /** enum of what must be validated */
-    final private EnumSet<VariantContext.Validation> toValidate = EnumSet.noneOf(VariantContext.Validation.class);
-
-    /**
-     * Create an empty VariantContextBuilder where all values adopt their default values.  Note that
-     * source, chr, start, stop, and alleles must eventually be filled in, or the resulting VariantContext
-     * will throw an error.
-     */
-    public VariantContextBuilder() {}
-
-    /**
-     * Create an empty VariantContextBuilder where all values adopt their default values, but the bare min.
-     * of info (source, chr, start, stop, and alleles) have been provided to start.
-     */
-    public VariantContextBuilder(final String source, final String contig, final long start, final long stop, final Collection<Allele> alleles) {
-        this.source = source;
-        this.contig = contig;
-        this.start = start;
-        this.stop = stop;
-        this.alleles = alleles;
-        this.attributes = Collections.emptyMap(); // immutable
-        toValidate.add(VariantContext.Validation.ALLELES);
-    }
-
-    /**
-     * Returns a new builder based on parent -- the new VC will have all fields initialized
-     * to their corresponding values in parent.  This is the best way to create a derived VariantContext
-     *
-     * @param parent  Cannot be null
-     */
-    public VariantContextBuilder(final VariantContext parent) {
-        if ( parent == null ) throw new IllegalArgumentException("BUG: VariantContextBuilder parent argument cannot be null in VariantContextBuilder");
-        this.alleles = parent.getAlleles();
-        this.attributes = parent.getAttributes();
-        this.attributesCanBeModified = false;
-        this.contig = parent.getContig();
-        this.filters = parent.getFiltersMaybeNull();
-        this.genotypes = parent.getGenotypes();
-        this.ID = parent.getID();
-        this.log10PError = parent.getLog10PError();
-        this.source = parent.getSource();
-        this.start = parent.getStart();
-        this.stop = parent.getEnd();
-        this.fullyDecoded = parent.isFullyDecoded();
-    }
-
-    public VariantContextBuilder(final VariantContextBuilder parent) {
-        if ( parent == null ) throw new IllegalArgumentException("BUG: VariantContext parent argument cannot be null in VariantContextBuilder");
-        this.alleles = parent.alleles;
-        this.attributesCanBeModified = false;
-        this.contig = parent.contig;
-        this.genotypes = parent.genotypes;
-        this.ID = parent.ID;
-        this.log10PError = parent.log10PError;
-        this.source = parent.source;
-        this.start = parent.start;
-        this.stop = parent.stop;
-        this.fullyDecoded = parent.fullyDecoded;
-
-        this.attributes(parent.attributes);
-        this.filters(parent.filters);
-    }
-
-    public VariantContextBuilder copy() {
-        return new VariantContextBuilder(this);
-    }
-
-    /**
-     * Tells this builder to use this collection of alleles for the resulting VariantContext
-     *
-     * @param alleles
-     * @return this builder
-     */
-    public VariantContextBuilder alleles(final Collection<Allele> alleles) {
-        this.alleles = alleles;
-        toValidate.add(VariantContext.Validation.ALLELES);
-        return this;
-    }
-
-    public VariantContextBuilder alleles(final List<String> alleleStrings) {
-        final List<Allele> alleles = new ArrayList<Allele>(alleleStrings.size());
-
-        for ( int i = 0; i < alleleStrings.size(); i++ ) {
-            alleles.add(Allele.create(alleleStrings.get(i), i == 0));
-        }
-
-        return alleles(alleles);
-    }
-
-    public VariantContextBuilder alleles(final String ... alleleStrings) {
-        return alleles(Arrays.asList(alleleStrings));
-    }
-
-    public List<Allele> getAlleles() {
-        return new ArrayList<Allele>(alleles);
-    }
-
-    /**
-     * Tells this builder to use this map of attributes for the resulting <code>VariantContext</code>. The
-     * contents of the Map are copied to a new Map to ensure that modifications to the provided Map post-invocation
-     * don't affect the VariantContext and also to ensure additional attributes can be added in case the provided
-     * map doesn't support changes (e.g. UnmodifiableMap).
-     *
-     * Attributes can be <code>null</code> -> meaning there are no attributes.  After
-     * calling this routine the builder assumes it can modify the attributes
-     * object here, if subsequent calls are made to set attribute values
-     *
-     * Value for each attribute must be of a type that implements {@link Serializable} or else
-     * serialization will fail.
-     *
-     * @param attributes a Map of attributes to replace any existing attributes with
-     */
-    public VariantContextBuilder attributes(final Map<String, ?> attributes) {
-        this.attributes = new HashMap<>();
-        if (attributes != null) this.attributes.putAll(attributes);
-        this.attributesCanBeModified = true;
-        return this;
-    }
-
-    /**
-     * Puts the key -> value mapping into this builder's attributes
-     *
-     * @param key key for the attribute
-     * @param value value for the attribute (must be of a type that implements {@link Serializable} or else serialization will fail)
-     */
-    public VariantContextBuilder attribute(final String key, final Object value) {
-        makeAttributesModifiable();
-        attributes.put(key, value);
-        return this;
-    }
-
-    /**
-     * Removes key if present in the attributes
-     *
-     * @param key  key to remove
-     * @return
-     */
-    public VariantContextBuilder rmAttribute(final String key) {
-        makeAttributesModifiable();
-        attributes.remove(key);
-        return this;
-    }
-
-    /**
-     * Removes list of keys if present in the attributes
-     *
-     * @param keys  list of keys to remove
-     * @return
-     */
-    public VariantContextBuilder rmAttributes(final List<String> keys) {
-        makeAttributesModifiable();
-        for ( final String key : keys )
-            attributes.remove(key);
-        return this;
-    }
-
-    /**
-     * Makes the attributes field modifiable.  In many cases attributes is just a pointer to an immutable
-     * collection, so methods that want to add / remove records require the attributes to be copied to a
-     */
-    private void makeAttributesModifiable() {
-        if ( ! attributesCanBeModified ) {
-            this.attributesCanBeModified = true;
-            if (attributes == null) {
-            	this.attributes = new HashMap<String, Object>();
-            } else {
-            	this.attributes = new HashMap<String, Object>(attributes);
-            }
-        }
-    }
-
-    /**
-     * This builder's filters are set to this value
-     *
-     * filters can be <code>null</code> -> meaning there are no filters
-     * @param filters
-     */
-    public VariantContextBuilder filters(final Set<String> filters) {
-        this.filters = filters;
-        return this;
-    }
-
-    /**
-     * {@link #filters}
-     *
-     * @param filters
-     * @return
-     */
-    public VariantContextBuilder filters(final String ... filters) {
-        filters(new LinkedHashSet<String>(Arrays.asList(filters)));
-        return this;
-    }
-
-    public VariantContextBuilder filter(final String filter) {
-        if ( this.filters == null ) this.filters = new LinkedHashSet<String>(1);
-        this.filters.add(filter);
-        return this;
-    }
-
-    /**
-     * Tells this builder that the resulting VariantContext should have PASS filters
-     *
-     * @return
-     */
-    public VariantContextBuilder passFilters() {
-        return filters(VariantContext.PASSES_FILTERS);
-    }
-
-    /**
-     * Tells this builder that the resulting VariantContext be unfiltered
-     *
-     * @return
-     */
-    public VariantContextBuilder unfiltered() {
-        this.filters = null;
-        return this;
-    }
-
-    /**
-     * Tells this builder that the resulting <code>VariantContext</code> should use this genotype's <code>GenotypeContext</code>.
-     *
-     * Note that genotypes can be <code>null</code> -> meaning there are no genotypes
-     *
-     * @param genotypes
-     */
-    public VariantContextBuilder genotypes(final GenotypesContext genotypes) {
-        this.genotypes = genotypes;
-        if ( genotypes != null )
-            toValidate.add(VariantContext.Validation.GENOTYPES);
-        return this;
-    }
-
-    public VariantContextBuilder genotypesNoValidation(final GenotypesContext genotypes) {
-        this.genotypes = genotypes;
-        return this;
-    }
-
-    /**
-     * Tells this builder that the resulting <code>VariantContext</code> should use a <code>GenotypeContext</code> containing genotypes
-     *
-     * Note that genotypes can be <code>null</code>, meaning there are no genotypes
-     *
-     * @param genotypes
-     */
-    public VariantContextBuilder genotypes(final Collection<Genotype> genotypes) {
-        return genotypes(GenotypesContext.copy(genotypes));
-    }
-
-    /**
-     * Tells this builder that the resulting <code>VariantContext</code> should use a <code>GenotypeContext</code> containing genotypes
-     * @param genotypes
-     */
-    public VariantContextBuilder genotypes(final Genotype ... genotypes) {
-        return genotypes(GenotypesContext.copy(Arrays.asList(genotypes)));
-    }
-
-    /**
-     * Tells this builder that the resulting VariantContext should not contain any GenotypeContext
-     */
-    public VariantContextBuilder noGenotypes() {
-        this.genotypes = null;
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have ID
-     * @param ID
-     * @return
-     */
-    public VariantContextBuilder id(final String ID) {
-        this.ID = ID;
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should not have an ID
-     * @return
-     */
-    public VariantContextBuilder noID() {
-        return id(VCFConstants.EMPTY_ID_FIELD);
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have log10PError
-     * @param log10PError
-     * @return
-     */
-    public VariantContextBuilder log10PError(final double log10PError) {
-        this.log10PError = log10PError;
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have source field set to source
-     * @param source
-     * @return
-     */
-    public VariantContextBuilder source(final String source) {
-        this.source = source;
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have the specified location
-     * @param contig
-     * @param start
-     * @param stop
-     * @return
-     */
-    public VariantContextBuilder loc(final String contig, final long start, final long stop) {
-        this.contig = contig;
-        this.start = start;
-        this.stop = stop;
-        toValidate.add(VariantContext.Validation.ALLELES);
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have the specified contig chr
-     * @param contig
-     * @return
-     */
-    public VariantContextBuilder chr(final String contig) {
-        this.contig = contig;
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have the specified contig start
-     * @param start
-     * @return
-     */
-    public VariantContextBuilder start(final long start) {
-        this.start = start;
-        toValidate.add(VariantContext.Validation.ALLELES);
-        return this;
-    }
-
-    /**
-     * Tells us that the resulting VariantContext should have the specified contig stop
-     * @param stop
-     * @return
-     */
-    public VariantContextBuilder stop(final long stop) {
-        this.stop = stop;
-        return this;
-    }
-
-    /**
-     * @see #computeEndFromAlleles(java.util.List, int, int) with endForSymbolicAlleles == -1
-     */
-    public VariantContextBuilder computeEndFromAlleles(final List<Allele> alleles, final int start) {
-        return computeEndFromAlleles(alleles, start, -1);
-    }
-
-    /**
-     * Compute the end position for this VariantContext from the alleles themselves
-     *
-     * assigns this builder the stop position computed.
-     *
-     * @param alleles the list of alleles to consider.  The reference allele must be the first one
-     * @param start the known start position of this event
-     * @param endForSymbolicAlleles the end position to use if any of the alleles is symbolic.  Can be -1
-     *                              if no is expected but will throw an error if one is found
-     * @return this builder
-     */
-    public VariantContextBuilder computeEndFromAlleles(final List<Allele> alleles, final int start, final int endForSymbolicAlleles) {
-        stop(VariantContextUtils.computeEndFromAlleles(alleles, start, endForSymbolicAlleles));
-        return this;
-    }
-
-    /**
-     * @return true if this builder contains fully decoded data
-     *
-     * See VariantContext for more information
-     */
-    public boolean isFullyDecoded() {
-        return fullyDecoded;
-    }
-
-    /**
-     * Sets this builder's fully decoded state to true.
-     *
-     * A fully decoded builder indicates that all fields are represented by their
-     * proper java objects (e.g., Integer(10) not "10").
-     *
-     * See VariantContext for more information
-     *
-     * @param isFullyDecoded
-     */
-    public VariantContextBuilder fullyDecoded(boolean isFullyDecoded) {
-        this.fullyDecoded = isFullyDecoded;
-        return this;
-    }
-
-    /**
-     * Takes all of the builder data provided up to this point, and instantiates
-     * a freshly allocated VariantContext with all of the builder data.  This
-     * VariantContext is validated as appropriate and if not failing QC (and
-     * throwing an exception) is returned.
-     *
-     * Note that this function can be called multiple times to create multiple
-     * VariantContexts from the same builder.
-     */
-    public VariantContext make() {
-        return make(false);
-    }
-
-    public VariantContext make(final boolean leaveModifyableAsIs) {
-        if(!leaveModifyableAsIs) attributesCanBeModified = false;
-
-        return new VariantContext(source, ID, contig, start, stop, alleles,
-                genotypes, log10PError, filters, attributes,
-                fullyDecoded, toValidate);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantContextComparator.java b/src/main/java/htsjdk/variant/variantcontext/VariantContextComparator.java
deleted file mode 100644
index d4e288f..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/VariantContextComparator.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package htsjdk.variant.variantcontext;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.variant.vcf.VCFContigHeaderLine;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A Comparator that orders VariantContexts by the ordering of the contigs/chromosomes in the List
- * provided at construction time, then by start position with each contig/chromosome.
- */
-public class VariantContextComparator implements Comparator<VariantContext>, Serializable {
-	private static final long serialVersionUID = 1L;
-
-	public static List<String> getSequenceNameList(final SAMSequenceDictionary dictionary) {
-		final List<String> list = new ArrayList<String>();
-		for (final SAMSequenceRecord record : dictionary.getSequences()) {
-			list.add(record.getSequenceName());
-		}
-		return list;
-	}
-
-	// For fast lookup of the contig's index in the contig list
-	private final Map<String, Integer> contigIndexLookup;
-
-	public VariantContextComparator(final List<String> contigs) {
-		if (contigs.isEmpty()) throw new IllegalArgumentException("One or more contigs must be in the contig list.");
-
-		final Map<String, Integer> protoContigIndexLookup = new HashMap<String, Integer>();
-		int index = 0;
-		for (final String contig : contigs) {
-			protoContigIndexLookup.put(contig, index++);
-		}
-
-		if (protoContigIndexLookup.size() != contigs.size()) {
-			throw new IllegalArgumentException("There are duplicate contigs/chromosomes in the input contig list.");
-		}
-
-		this.contigIndexLookup = Collections.unmodifiableMap(protoContigIndexLookup);
-	}
-
-	/**
-	 * Creates a VariantContextComparator from the given VCF contig header lines. The header lines'
-	 * index values are used to order the contigs. Throws IllegalArgumentException if there are dupe
-	 *
-	 */
-	public VariantContextComparator(final Collection<VCFContigHeaderLine> headerLines) {
-		if (headerLines.isEmpty()) throw new IllegalArgumentException("One or more header lines must be in the header line collection.");
-
-		final Map<String, Integer> protoContigIndexLookup = new HashMap<String, Integer>();
-		for (final VCFContigHeaderLine headerLine : headerLines) {
-			protoContigIndexLookup.put(headerLine.getID(), headerLine.getContigIndex());
-		}
-
-		if (protoContigIndexLookup.size() != headerLines.size()) {
-			throw new IllegalArgumentException("There are duplicate contigs/chromosomes in the input header line collection.");
-		}
-
-		final Set<Integer> protoIndexValues = new HashSet<Integer>(protoContigIndexLookup.values());
-		if (protoIndexValues.size() != headerLines.size()) {
-			throw new IllegalArgumentException("One or more contigs share the same index number.");
-		}
-
-		this.contigIndexLookup = Collections.unmodifiableMap(protoContigIndexLookup);
-	}
-
-    public VariantContextComparator(final SAMSequenceDictionary dictionary) {
-	    this(getSequenceNameList(dictionary));
-    }
-
-	@Override
-	public int compare(final VariantContext firstVariantContext, final VariantContext secondVariantContext) {
-		// Will throw NullPointerException -- happily -- if either of the chromosomes/contigs aren't
-		// present. This error checking should already have been done in the constructor but it's left
-		// in as defence anyway.
-		final int contigCompare =
-				this.contigIndexLookup.get(firstVariantContext.getContig()) - this.contigIndexLookup.get(secondVariantContext.getContig());
-		return contigCompare != 0
-				? contigCompare
-				: firstVariantContext.getStart() - secondVariantContext.getStart();
-	}
-
-	/**
-	 * Returns true if the given header lines are from a file sorted according to this VariantContextComparator.
-	 * For sorting to work properly, the contig in each header line must have the same index.
-	 */
-	public boolean isCompatible(final Collection<VCFContigHeaderLine> headerLines) {
-		for (final VCFContigHeaderLine headerLine : headerLines) {
-			final Integer existingIndex = this.contigIndexLookup.get(headerLine.getID());
-			if (existingIndex == null || headerLine.getContigIndex() != existingIndex.intValue()) return false;
-		}
-
-		return true;
-	}
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java b/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java
deleted file mode 100644
index face55b..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.samtools.util.Lazy;
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.vcf.VCFCompoundHeaderLine;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLineCount;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-import htsjdk.variant.vcf.VCFInfoHeaderLine;
-import org.apache.commons.jexl2.Expression;
-import org.apache.commons.jexl2.JexlEngine;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class VariantContextUtils {
-    private static Set<String> MISSING_KEYS_WARNED_ABOUT = new HashSet<String>();
-
-    /** Use a {@link Lazy} {@link JexlEngine} instance to avoid class-loading issues. (Applications that access this class are otherwise
-     * forced to build a {@link JexlEngine} instance, which depends on some apache logging libraries that mightn't be packaged.) */
-    final public static Lazy<JexlEngine> engine = new Lazy<JexlEngine>(new Lazy.LazyInitializer<JexlEngine>() {
-        @Override
-        public JexlEngine make() {
-            final JexlEngine jexl = new JexlEngine();
-            jexl.setSilent(false); // will throw errors now for selects that don't evaluate properly
-            jexl.setLenient(false);
-            jexl.setDebug(false);
-            return jexl;
-        }
-    });
-    private final static boolean ASSUME_MISSING_FIELDS_ARE_STRINGS = false;
-    
-    /**
-     * Computes the alternate allele frequency at the provided {@link VariantContext} by dividing its "AN" by its "AC".
-     * @param vc The variant whose alternate allele frequency is computed
-     * @return The alternate allele frequency in [0, 1]
-     * @throws AssertionError When either annotation is missing, or when the compuated frequency is outside the expected range
-     */
-    public static double calculateAltAlleleFrequency(final VariantContext vc) {
-        if (!vc.hasAttribute(VCFConstants.ALLELE_NUMBER_KEY) || !vc.hasAttribute(VCFConstants.ALLELE_COUNT_KEY))
-            throw new AssertionError(String.format(
-                    "Cannot compute the provided variant's alt allele frequency because it does not have both %s and %s annotations: %s",
-                    VCFConstants.ALLELE_NUMBER_KEY,
-                    VCFConstants.ALLELE_COUNT_KEY,
-                    vc));
-        final double altAlleleCount = vc.getAttributeAsInt(VCFConstants.ALLELE_COUNT_KEY, 0);
-        final double totalCount = vc.getAttributeAsInt(VCFConstants.ALLELE_NUMBER_KEY, 0);
-        final double aaf = altAlleleCount / totalCount;
-        if (aaf > 1 || aaf < 0)
-            throw new AssertionError(String.format("Expected a minor allele frequency in the range [0, 1], but got %s. vc=%s", aaf, vc));
-        return aaf;
-    }
-    
-    /**
-     * Update the attributes of the attributes map given the VariantContext to reflect the
-     * proper chromosome-based VCF tags
-     *
-     * @param vc          the VariantContext
-     * @param attributes  the attributes map to populate; must not be null; may contain old values
-     * @param removeStaleValues should we remove stale values from the mapping?
-     * @return the attributes map provided as input, returned for programming convenience
-     */
-    public static Map<String, Object> calculateChromosomeCounts(VariantContext vc, Map<String, Object> attributes, boolean removeStaleValues) {
-        return calculateChromosomeCounts(vc, attributes,  removeStaleValues, new HashSet<String>(0));
-    }
-
-    /**
-     * Update the attributes of the attributes map given the VariantContext to reflect the
-     * proper chromosome-based VCF tags
-     *
-     * @param vc          the VariantContext
-     * @param attributes  the attributes map to populate; must not be null; may contain old values
-     * @param removeStaleValues should we remove stale values from the mapping?
-     * @param founderIds - Set of founders Ids to take into account. AF and FC will be calculated over the founders.
-     *                  If empty or null, counts are generated for all samples as unrelated individuals
-     * @return the attributes map provided as input, returned for programming convenience
-     */
-    public static Map<String, Object> calculateChromosomeCounts(VariantContext vc, Map<String, Object> attributes, boolean removeStaleValues, final Set<String> founderIds) {
-        final int AN = vc.getCalledChrCount();
-
-        // if everyone is a no-call, remove the old attributes if requested
-        if ( AN == 0 && removeStaleValues ) {
-            if ( attributes.containsKey(VCFConstants.ALLELE_COUNT_KEY) )
-                attributes.remove(VCFConstants.ALLELE_COUNT_KEY);
-            if ( attributes.containsKey(VCFConstants.ALLELE_FREQUENCY_KEY) )
-                attributes.remove(VCFConstants.ALLELE_FREQUENCY_KEY);
-            if ( attributes.containsKey(VCFConstants.ALLELE_NUMBER_KEY) )
-                attributes.remove(VCFConstants.ALLELE_NUMBER_KEY);
-            return attributes;
-        }
-
-        if ( vc.hasGenotypes() ) {
-            attributes.put(VCFConstants.ALLELE_NUMBER_KEY, AN);
-
-            // if there are alternate alleles, record the relevant tags
-            if (!vc.getAlternateAlleles().isEmpty()) {
-                ArrayList<Double> alleleFreqs = new ArrayList<Double>();
-                ArrayList<Integer> alleleCounts = new ArrayList<Integer>();
-                ArrayList<Integer> foundersAlleleCounts = new ArrayList<Integer>();
-                double totalFoundersChromosomes = (double)vc.getCalledChrCount(founderIds);
-                int foundersAltChromosomes;
-                for ( Allele allele : vc.getAlternateAlleles() ) {
-                    foundersAltChromosomes = vc.getCalledChrCount(allele,founderIds);
-                    alleleCounts.add(vc.getCalledChrCount(allele));
-                    foundersAlleleCounts.add(foundersAltChromosomes);
-                    if ( AN == 0 ) {
-                        alleleFreqs.add(0.0);
-                    } else {
-                        final Double freq = (double)foundersAltChromosomes / totalFoundersChromosomes;
-                        alleleFreqs.add(freq);
-                    }
-                }
-
-                attributes.put(VCFConstants.ALLELE_COUNT_KEY, alleleCounts.size() == 1 ? alleleCounts.get(0) : alleleCounts);
-                attributes.put(VCFConstants.ALLELE_FREQUENCY_KEY, alleleFreqs.size() == 1 ? alleleFreqs.get(0) : alleleFreqs);
-            } else {
-                // if there's no alt AC and AF shouldn't be present
-                attributes.remove(VCFConstants.ALLELE_COUNT_KEY);
-                attributes.remove(VCFConstants.ALLELE_FREQUENCY_KEY);
-            }
-        }
-
-        return attributes;
-    }
-
-    /**
-     * Update the attributes of the attributes map in the VariantContextBuilder to reflect the proper
-     * chromosome-based VCF tags based on the current VC produced by builder.make()
-     *
-     * @param builder     the VariantContextBuilder we are updating
-     * @param removeStaleValues should we remove stale values from the mapping?
-     */
-    public static void calculateChromosomeCounts(VariantContextBuilder builder, boolean removeStaleValues) {
-        VariantContext vc = builder.make();
-        builder.attributes(calculateChromosomeCounts(vc, new HashMap<>(vc.getAttributes()), removeStaleValues, new HashSet<>(0)));
-    }
-
-    /**
-     * Update the attributes of the attributes map in the VariantContextBuilder to reflect the proper
-     * chromosome-based VCF tags based on the current VC produced by builder.make()
-     *
-     * @param builder     the VariantContextBuilder we are updating
-     * @param founderIds - Set of founders to take into account. AF and FC will be calculated over the founders only.
-     *                   If empty or null, counts are generated for all samples as unrelated individuals
-     * @param removeStaleValues should we remove stale values from the mapping?
-     */
-    public static void calculateChromosomeCounts(VariantContextBuilder builder, boolean removeStaleValues, final Set<String> founderIds) {
-        VariantContext vc = builder.make();
-        builder.attributes(calculateChromosomeCounts(vc, new HashMap<>(vc.getAttributes()), removeStaleValues, founderIds));
-    }
-
-    public final static VCFCompoundHeaderLine getMetaDataForField(final VCFHeader header, final String field) {
-        VCFCompoundHeaderLine metaData = header.getFormatHeaderLine(field);
-        if ( metaData == null ) metaData = header.getInfoHeaderLine(field);
-        if ( metaData == null ) {
-            if ( ASSUME_MISSING_FIELDS_ARE_STRINGS ) {
-                if ( ! MISSING_KEYS_WARNED_ABOUT.contains(field) ) {
-                    MISSING_KEYS_WARNED_ABOUT.add(field);
-                    if ( GeneralUtils.DEBUG_MODE_ENABLED )
-                        System.err.println("Field " + field + " missing from VCF header, assuming it is an unbounded string type");
-                }
-                return new VCFInfoHeaderLine(field, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "Auto-generated string header for " + field);
-            }
-            else
-                throw new TribbleException("Fully decoding VariantContext requires header line for all fields, but none was found for " + field);
-        }
-        return metaData;
-    }
-
-    /**
-     * A simple but common wrapper for matching {@link VariantContext} objects using JEXL expressions
-     */
-    public static class JexlVCMatchExp {
-        public String name;
-        public Expression exp;
-
-        /**
-         * Create a new matcher expression with name and JEXL expression exp
-         * @param name name
-         * @param exp  expression
-         * @throws IllegalArgumentException if either argument is {@code null}
-         */
-        public JexlVCMatchExp(String name, Expression exp) {
-            if (name == null) { throw new IllegalArgumentException("Cannot create JexlVCMatchExp with null name."); }
-            if (exp  == null) { throw new IllegalArgumentException("Cannot create JexlVCMatchExp with null expression."); }
-
-            this.name = name;
-            this.exp = exp;
-        }
-    }
-
-    /**
-     * Method for creating JexlVCMatchExp from input walker arguments names and exps.  These two arrays contain
-     * the name associated with each JEXL expression. initializeMatchExps will parse each expression and return
-     * a list of JexlVCMatchExp, in order, that correspond to the names and exps.  These are suitable input to
-     * match() below.
-     *
-     * @param names names
-     * @param exps  expressions
-     * @return list of matches
-     */
-    public static List<JexlVCMatchExp> initializeMatchExps(String[] names, String[] exps) {
-        if ( names == null || exps == null )
-            throw new IllegalArgumentException("BUG: neither names nor exps can be null: names " + Arrays.toString(names) + " exps=" + Arrays.toString(exps) );
-
-        if ( names.length != exps.length )
-            throw new IllegalArgumentException("Inconsistent number of provided filter names and expressions: names=" + Arrays.toString(names) + " exps=" + Arrays.toString(exps));
-
-        Map<String, String> map = new HashMap<String, String>();
-        for ( int i = 0; i < names.length; i++ ) { map.put(names[i], exps[i]); }
-
-        return VariantContextUtils.initializeMatchExps(map);
-    }
-
-    /**
-     * Method for creating JexlVCMatchExp from input walker arguments names and exps.  These two lists contain
-     * the name associated with each JEXL expression. initializeMatchExps will parse each expression and return
-     * a list of JexlVCMatchExp, in order, that correspond to the names and exps.  These are suitable input to
-     * match() below.
-     *
-     * @param names names
-     * @param exps  expressions
-     * @return list of matches
-     */
-    public static List<JexlVCMatchExp> initializeMatchExps(List<String> names, List<String> exps) {
-        String[] nameArray = new String[names.size()];
-        String[] expArray = new String[exps.size()];
-        return initializeMatchExps(names.toArray(nameArray), exps.toArray(expArray));
-    }
-
-    /**
-     * Method for creating JexlVCMatchExp from input walker arguments mapping from names to exps.  These two arrays contain
-     * the name associated with each JEXL expression. initializeMatchExps will parse each expression and return
-     * a list of JexlVCMatchExp, in order, that correspond to the names and exps.  These are suitable input to
-     * match() below.
-     *
-     * @param names_and_exps mapping of names to expressions
-     * @return list of matches
-     */
-    public static List<JexlVCMatchExp> initializeMatchExps(Map<String, String> names_and_exps) {
-        List<JexlVCMatchExp> exps = new ArrayList<>();
-
-        for ( Map.Entry<String, String> elt : names_and_exps.entrySet() ) {
-            String name = elt.getKey();
-            String expStr = elt.getValue();
-
-            if ( name == null || expStr == null ) throw new IllegalArgumentException("Cannot create null expressions : " + name +  " " + expStr);
-            try {
-                Expression exp = engine.get().createExpression(expStr);
-                exps.add(new JexlVCMatchExp(name, exp));
-            } catch (Exception e) {
-                throw new IllegalArgumentException("Argument " + name + "has a bad value. Invalid expression used (" + expStr + "). Please see the JEXL docs for correct syntax.") ;
-            }
-        }
-
-        return exps;
-    }
-
-    /**
-     * Returns true if {@code exp} match {@code vc}.
-     * See {@link #match(VariantContext, Collection)} for full docs.
-     * @param vc    variant context
-     * @param exp   expression
-     * @return      true if there is a match
-     */
-    public static boolean match(VariantContext vc, JexlVCMatchExp exp) {
-        return match(vc, Collections.singletonList(exp)).get(exp);
-    }
-
-    /**
-     * Matches each {@link JexlVCMatchExp} exp against the data contained in {@code vc},
-     * and returns a map from these expressions to {@code true} (if they matched) or {@code false} (if they didn't).
-     * This the best way to apply JEXL expressions to {@link VariantContext} records.
-     * Use the various {@code initializeMatchExps()}'s to create the list of {@link JexlVCMatchExp} expressions.
-     *
-     * Expressions that contain literals not available in the VariantContext or Genotype will be treated as not matching
-     * @param vc    variant context
-     * @param exps  expressions
-     * @return      true if there is a match
-     */
-    public static Map<JexlVCMatchExp, Boolean> match(VariantContext vc, Collection<JexlVCMatchExp> exps) {
-        return new JEXLMap(exps,vc);
-    }
-
-    /**
-     * Returns true if {@code exp} match {@code vc}, {@code g}.
-     * See {@link #match(VariantContext, Genotype, Collection)} for full docs.
-     * @param vc    variant context
-     * @param g     genotype
-     * @param exp   expression
-     * @return      true if there is a match
-     */
-    public static boolean match(VariantContext vc, Genotype g, JexlVCMatchExp exp) {
-        return match(vc, g, Collections.singletonList(exp), JEXLMap.DEFAULT_MISSING_VALUE_TREATMENT).get(exp);
-    }
-
-    /**
-     * Returns true if {@code exp} match {@code vc}, {@code g}.
-     * See {@link #match(VariantContext, Genotype, Collection)} for full docs.
-     * @param vc    variant context
-     * @param g     genotype
-     * @param exp   expression
-     * @param howToTreatMissingValues what to do if the jexl expression contains literals that aren't in the context
-     * @return      true if there is a match
-     */
-    public static boolean match(VariantContext vc, Genotype g, JexlVCMatchExp exp, JexlMissingValueTreatment howToTreatMissingValues) {
-        return match(vc, g, Collections.singletonList(exp), howToTreatMissingValues).get(exp);
-    }
-
-    /**
-     * Matches each {@link JexlVCMatchExp} exp against the data contained in {@code vc}, {@code g},
-     * and returns a map from these expressions to {@code true} (if they matched) or {@code false} (if they didn't).
-     * This the best way to apply JEXL expressions to {@link VariantContext} records.
-     * Use the various {@code initializeMatchExps()}'s to create the list of {@link JexlVCMatchExp} expressions.
-     *
-     * Expressions that contain literals not available in the VariantContext or Genotype will be treated as not matching
-     * @param vc    variant context
-     * @param g     genotype
-     * @param exps  expressions
-     * @return      true if there is a match
-     */
-    public static Map<JexlVCMatchExp, Boolean> match(VariantContext vc, Genotype g, Collection<JexlVCMatchExp> exps) {
-        return match(vc, g, exps, JEXLMap.DEFAULT_MISSING_VALUE_TREATMENT);
-    }
-
-    /**
-     * Matches each {@link JexlVCMatchExp} exp against the data contained in {@code vc}, {@code g},
-     * and returns a map from these expressions to {@code true} (if they matched) or {@code false} (if they didn't).
-     * This the best way to apply JEXL expressions to {@link VariantContext} records.
-     * Use the various {@code initializeMatchExps()}'s to create the list of {@link JexlVCMatchExp} expressions.
-     *
-     * @param vc    variant context
-     * @param g     genotype
-     * @param exps  expressions
-     * @param howToTreatMissingValues what to do if the jexl expression contains literals that aren't in the context
-     * @return      true if there is a match
-     */
-    public static Map<JexlVCMatchExp, Boolean> match(VariantContext vc, Genotype g, Collection<JexlVCMatchExp> exps, JexlMissingValueTreatment howToTreatMissingValues) {
-        return new JEXLMap(exps, vc, g, howToTreatMissingValues);
-    }
-
-    /**
-     * Answers if the provided variant is transitional (otherwise, it's transversional).
-     * Transitions:
-     * A->G
-     * G->A
-     * C->T
-     * T->C
-     * <p/>
-     * Transversions:
-     * A->C
-     * A->T
-     * C->A
-     * C->G
-     * G->C
-     * G->T
-     * T->A
-     * T->G
-     *
-     * @param vc a biallelic polymorphic SNP
-     * @return true if a transition and false if transversion
-     * @throws IllegalArgumentException if vc is monomorphic, not a SNP or not bi-allelic.
-
-          */
-    static public boolean isTransition(final VariantContext vc) throws IllegalArgumentException {
-        final byte refAllele = vc.getReference().getBases()[0];
-        final Collection<Allele> altAlleles = vc.getAlternateAlleles();
-
-        if(vc.getType() == VariantContext.Type.NO_VARIATION) {
-            throw new IllegalArgumentException("Variant context is monomorphic: " + vc.toString());
-        }
-
-        if(vc.getType() != VariantContext.Type.SNP) {
-            throw new IllegalArgumentException("Variant context is not a SNP: " + vc.toString());
-        }
-
-        if(altAlleles.size() != 1 ) {
-            throw new IllegalArgumentException("Expected exactly 1 alternative Allele. Found: " + altAlleles.size());
-        }
-
-        final Byte altAllele = altAlleles.iterator().next().getBases()[0];
-
-        return (refAllele == 'A' && altAllele == 'G')
-                || (refAllele == 'G' && altAllele == 'A')
-                || (refAllele == 'C' && altAllele == 'T')
-                || (refAllele == 'T' && altAllele == 'C');
-    }
-
-    /**
-     * Returns a newly allocated VC that is the same as VC, but without genotypes
-     * @param vc  variant context
-     * @return  new VC without genotypes
-     */
-    public static VariantContext sitesOnlyVariantContext(VariantContext vc) {
-        return new VariantContextBuilder(vc).noGenotypes().make();
-    }
-
-    /**
-     * Returns a newly allocated list of VC, where each VC is the same as the input VCs, but without genotypes
-     * @param vcs  collection of VCs
-     * @return new VCs without genotypes
-     */
-    public static Collection<VariantContext> sitesOnlyVariantContexts(Collection<VariantContext> vcs) {
-        List<VariantContext> r = new ArrayList<VariantContext>();
-        for ( VariantContext vc : vcs )
-            r.add(sitesOnlyVariantContext(vc));
-        return r;
-    }
-
-    public static int getSize( VariantContext vc ) {
-        return vc.getEnd() - vc.getStart() + 1;
-    }
-
-    public static Set<String> genotypeNames(final Collection<Genotype> genotypes) {
-        final Set<String> names = new HashSet<String>(genotypes.size());
-        for ( final Genotype g : genotypes )
-            names.add(g.getSampleName());
-        return names;
-    }
-
-    /**
-     * Compute the end position for this VariantContext from the alleles themselves
-     *
-     * In the trivial case this is a single BP event and end = start (open intervals)
-     * In general the end is start + ref length - 1, handling the case where ref length == 0
-     * However, if alleles contains a symbolic allele then we use endForSymbolicAllele in all cases
-     *
-     * @param alleles the list of alleles to consider.  The reference allele must be the first one
-     * @param start the known start position of this event
-     * @param endForSymbolicAlleles the end position to use if any of the alleles is symbolic.  Can be -1
-     *                              if no is expected but will throw an error if one is found
-     * @return this builder
-     */
-    public static int computeEndFromAlleles(final List<Allele> alleles, final int start, final int endForSymbolicAlleles) {
-        final Allele ref = alleles.get(0);
-
-        if ( ref.isNonReference() )
-            throw new IllegalStateException("computeEndFromAlleles requires first allele to be reference");
-
-        if ( VariantContext.hasSymbolicAlleles(alleles) ) {
-            if ( endForSymbolicAlleles == -1 )
-                throw new IllegalStateException("computeEndFromAlleles found a symbolic allele but endForSymbolicAlleles was provided");
-            return endForSymbolicAlleles;
-        } else {
-            return start + Math.max(ref.length() - 1, 0);
-        }
-    }
-
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantJEXLContext.java b/src/main/java/htsjdk/variant/variantcontext/VariantJEXLContext.java
deleted file mode 100644
index 34cde33..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/VariantJEXLContext.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import org.apache.commons.jexl2.JexlContext;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * @author aaron
- * @author depristo
- *
- * Class VariantJEXLContext
- *
- * implements the JEXL context for VariantContext; this saves us from
- * having to generate a JEXL context lookup map everytime we want to evaluate an expression.
- *
- * This is package protected, only classes in variantcontext should have access to it.
- *
- */
-
-class VariantJEXLContext implements JexlContext {
-    // our stored variant context
-    private VariantContext vc;
-
-    static final String true_string = "1";
-    static final String false_string = "0";
-
-    private interface AttributeGetter {
-        public Object get(VariantContext vc);
-    }
-
-    private static Map<String, AttributeGetter> attributes = new HashMap<String, AttributeGetter>();
-
-    static {
-        attributes.put("vc", (VariantContext vc) -> vc);
-        attributes.put("CHROM", VariantContext::getContig);
-        attributes.put("POS", VariantContext::getStart);
-        attributes.put("TYPE", (VariantContext vc) -> vc.getType().toString());
-        attributes.put("QUAL", (VariantContext vc) -> -10 * vc.getLog10PError());
-        attributes.put("ALLELES", VariantContext::getAlleles);
-        attributes.put("N_ALLELES", VariantContext::getNAlleles);
-        attributes.put("FILTER", (VariantContext vc) -> vc.isFiltered() ? true_string : false_string);
-
-        attributes.put("homRefCount", VariantContext::getHomRefCount);
-        attributes.put("hetCount", VariantContext::getHetCount);
-        attributes.put("homVarCount", VariantContext::getHomVarCount);
-    }
-
-    public VariantJEXLContext(VariantContext vc) {
-        this.vc = vc;
-    }
-
-    public Object get(String name) {
-        Object result = null;
-        if ( attributes.containsKey(name) ) { // dynamic resolution of name -> value via map
-            result = attributes.get(name).get(vc);
-        } else if ( vc.hasAttribute(name)) {
-            result = vc.getAttribute(name);
-        } else if ( vc.getFilters().contains(name) ) {
-            result = true_string;
-        }
-
-        return result;
-    }
-
-    public boolean has(String name) {
-        return get(name) != null;
-    }
-
-    /**
-     * @throws UnsupportedOperationException
-     */
-    public void	set(String name, Object value) {
-        throw new UnsupportedOperationException("remove() not supported on a VariantJEXLContext");
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/CompoundFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/CompoundFilter.java
deleted file mode 100644
index 9a3724a..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/CompoundFilter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.util.ArrayList;
-
-/**
- * A Predicate on VariantContexts that returns true when either all its sub-predicates are true, or none are false.
- *
- * @author Yossi Farjoun
- */
-public class CompoundFilter extends ArrayList<VariantContextFilter> implements VariantContextFilter {
-
-    final boolean requireAll;
-
-    /**
-     * A constructor that will determine if this compound filter will require that *all* the included filters pass
-     * or *some* of them pass (depending on the requireAll parameter in the constructor).
-     *
-     * @param requireAll a boolean parameter determining whether this filter requires all its elements to pass (true) for
-     * it to pass, or only one (false). If there are no variantfilters it will return true.
-     */
-    public CompoundFilter(final boolean requireAll) {
-        super();
-        this.requireAll = requireAll;
-    }
-
-    /**
-     * @param variantContext the record to examine against the sub-filters
-     * @return true if variantContext either passes all the filters (when requireAll==true)
-     * or doesn't fail any of the filters (when requireAll==false)
-     */
-    @Override
-    public boolean test(final VariantContext variantContext) {
-
-        if (requireAll) {
-            for (final VariantContextFilter filter : this) {
-                if (!filter.test(variantContext)) return false;
-            }
-
-            return true;
-        } else {
-            for (final VariantContextFilter filter : this) {
-                if (filter.test(variantContext)) return true;
-            }
-
-            return isEmpty();
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/FilteringIterator.java b/src/main/java/htsjdk/variant/variantcontext/filter/FilteringIterator.java
deleted file mode 100644
index 04609a8..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/FilteringIterator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.util.Iterator;
-
-/**
- * A filtering iterator for VariantContexts that takes a base iterator and a VariantContextFilter.
- *
- * The iterator returns all the variantcontexts for which the filter's function "test" returns true (and only those)
- *
- * @author Yossi Farjoun
- *
- * use {@link FilteringVariantContextIterator} instead
- */
-
- at Deprecated
-public class FilteringIterator extends FilteringVariantContextIterator{
-    public FilteringIterator(final Iterator<VariantContext> iterator, final VariantContextFilter filter) {
-        super(iterator, filter);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIterator.java b/src/main/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIterator.java
deleted file mode 100644
index e61d9a5..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIterator.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * A filtering iterator for VariantContexts that takes a base iterator and a VariantContextFilter.
- *
- * The iterator returns all the variantcontexts for which the filter's function "test" returns true (and only those)
- *
- * @author Yossi Farjoun
- */
-public class FilteringVariantContextIterator implements CloseableIterator<VariantContext>, Iterable<VariantContext>{
-    private final Iterator<VariantContext> iterator;
-    private final VariantContextFilter filter;
-    private VariantContext next = null;
-
-    /**
-     * Constructor of an iterator based on the provided iterator and predicate. The resulting
-     * records will be all those VariantContexts from iterator for which filter.test( . ) is true
-     *
-     * @param iterator the backing iterator
-     * @param filter   the filter
-     */
-    public FilteringVariantContextIterator(final Iterator<VariantContext> iterator, final VariantContextFilter filter) {
-        this.iterator = iterator;
-        this.filter = filter;
-        next = getNextVC();
-    }
-
-    @Override
-    public void close() {
-        CloserUtil.close(iterator);
-    }
-
-    /**
-     * Returns true if the iteration has more elements.
-     *
-     * @return true if the iteration has more elements.  Otherwise returns false.
-     */
-    @Override
-    public boolean hasNext() {
-        return next != null;
-    }
-
-    /**
-     * Returns the next element in the iteration.
-     *
-     * @return the next element in the iteration
-     * @throws NoSuchElementException if there are no more elements to return
-     *
-     */
-    @Override
-    public VariantContext next() throws NoSuchElementException {
-        if (next == null) {
-            throw new NoSuchElementException("Iterator has no more elements.");
-        }
-        final VariantContext result = next;
-        next = getNextVC();
-        return result;
-    }
-
-    /**
-     * Required method for Iterator API.
-     *
-     * @throws UnsupportedOperationException since it is unsupported here.
-     */
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException("Remove() not supported by FilteringVariantContextIterator");
-    }
-
-    /**
-     * Gets the next record from the underlying iterator that passes the filter
-     *
-     * @return VariantContext the next filter-passing record
-     */
-    private VariantContext getNextVC() {
-
-        while (iterator.hasNext()) {
-            final VariantContext record = iterator.next();
-
-            if (filter.test(record)) {
-                return record;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * function to satisfy the Iterable interface
-     *
-     * @return itself since the class inherits from Iterator
-     */
-    @Override
-    public Iterator<VariantContext> iterator() {
-        return this;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilter.java
deleted file mode 100644
index 862dcce..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- * A Predicate on VariantContexts that returns true at sites that are either unfiltered, or passing (as variants).
- *
- * @author Yossi Farjoun
- */
-public class GenotypeQualityFilter implements VariantContextFilter {
-
-    final private String sample;
-    final private int gqThreshold;
-
-    /**
-     * Constructor for a filter that will keep VC for which the
-     * genotype quality (GQ) of sample passes a threshold. If sample is null, the first genotype in the
-     * variant context will be used.
-     *
-     * @param gqThreshold the smallest value of GQ that this filter will pass
-     * @param sample the name of the sample in the variant context whose genotype should be examined.
-     */
-    public GenotypeQualityFilter(final int gqThreshold, final String sample ) {
-        this.sample = sample;
-        this.gqThreshold = gqThreshold;
-    }
-
-    /**
-     * Constructor as above that doesn't take a sample, instead it will look at the first genotype of the variant context.
-     * @param gqThreshold the smallest value of GQ that this filter will pass
-     */
-    public GenotypeQualityFilter(final int gqThreshold) {
-        this(  gqThreshold, null);
-    }
-
-    /**
-     * @return true if variantContext is to be kept, otherwise false
-     * Assumes that this.sample is a sample in the variantContext, if not null,
-     * otherwise looks for the first genotype (and assumes it exists).
-     * @param variantContext the record to examine for GQ
-     */
-    @Override
-    public boolean test(final VariantContext variantContext) {
-        final Genotype gt = (sample == null) ? variantContext.getGenotype(0) : variantContext.getGenotype(sample);
-
-        if (gt == null) {
-            throw new IllegalArgumentException((sample == null) ?
-                    "Cannot find any genotypes in VariantContext: " + variantContext :
-                    "Cannot find sample requested: " + sample);
-        }
-
-        return gt.getGQ() >= gqThreshold;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilter.java
deleted file mode 100644
index 0675b25..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- * A Predicate on VariantContexts that either returns true at heterozygous sites (invertible to false).
- * if optional "sample" argument to constructor is given, the genotype of that sample will be examined,
- * otherwise first genotype will be used.
- *
- * Missing sample, or no genotype will result in an exception being thrown.
- *
- * @author Yossi Farjoun
- */
-public class HeterozygosityFilter implements VariantContextFilter {
-
-    final private String sample;
-    final private boolean keepHets;
-
-    /**
-     * Constructor for a filter that will keep (or remove, if keepHets is false) VC for which the
-     * genotype of sample is heterozygous. If sample is null, the first genotype in the
-     * variant context will be used.
-     *
-     * @param keepHets determine whether to keep the het sites (true) or filter them out (false)
-     * @param sample the name of the sample in the variant context whose genotype should be examined.
-     */
-    public HeterozygosityFilter(final boolean keepHets, final String sample) {
-        this.keepHets = keepHets;
-        this.sample = sample;
-    }
-
-    /**
-     * Constructor as above that doesn't take a sample, instead it will look at the first genotype of the variant context.
-     * @param keepHets if true, the heterozygous variant contexts will pass the filter, otherwise they will fail.
-     */
-    public HeterozygosityFilter(final boolean keepHets) {
-        this(keepHets, null);
-    }
-
-    /**
-     * @return true if variantContext is to be kept, otherwise false
-     * Assumes that this.sample is a sample in the variantContext, if not null,
-     * otherwise looks for the first genotype (and assumes it exists).
-     * @param variantContext the record to examine for heterozygosity
-     */
-    @Override
-    public boolean test(final VariantContext variantContext) {
-        final Genotype gt = (sample == null) ? variantContext.getGenotype(0) : variantContext.getGenotype(sample);
-
-        if (gt == null) {
-            throw new IllegalArgumentException((sample == null) ?
-                    "Cannot find any genotypes in VariantContext: " + variantContext :
-                    "Cannot find sample requested: " + sample);
-        }
-
-        //XOR operator to reverse behaviour if keepHets is true.
-        return gt.isHet() ^ !keepHets;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilter.java
deleted file mode 100644
index bf8fa8e..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-
-import htsjdk.samtools.filter.AbstractJavascriptFilter;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-/**
- * javascript based variant filter The script puts the following variables in
- * the script context:
- *
- * - 'header' a htsjdk.variant.vcf.VCFHeader 
- * - 'variant' a htsjdk.variant.variantcontext.VariantContext
- * 
- * @author Pierre Lindenbaum PhD Institut du Thorax - INSERM - Nantes - France
- */
-public class JavascriptVariantFilter extends AbstractJavascriptFilter<VCFHeader, VariantContext>
-        implements VariantContextFilter {
-	/**
-	 * constructor using a javascript File
-	 * 
-	 * @param scriptFile
-	 *            the javascript file to be compiled
-	 * @param header
-	 *            the SAMHeader
-	 */
-	public JavascriptVariantFilter(final File scriptFile, final VCFHeader header) throws IOException {
-		super(scriptFile, header);
-	}
-
-	/**
-     * constructor using a Reader
-     * 
-     * @param scriptReader
-     *            the reader for the script to be compiled. Will be closed
-     * @param header
-     *            the SAMHeader
-     */
-    public JavascriptVariantFilter(final Reader scriptReader, final VCFHeader header) throws IOException {
-        super(scriptReader, header);
-    }
-    
-	/**
-	 * constructor using a javascript expression
-	 * 
-	 * @param scriptExpression
-	 *            the javascript expression to be compiled
-	 * @param header
-	 *            the SAMHeader
-	 */
-	public JavascriptVariantFilter(final String scriptExpression, final VCFHeader header) {
-		super(scriptExpression, header);
-	}
-
-	/**
-	 * Determines whether a VariantContext matches this filter
-	 *
-	 * @param record
-	 *            the VariantContext to evaluate
-	 * @return true if accept(record) returned true
-	 */
-	@Override
-	public boolean test(final VariantContext record) {
-		return accept(record);
-	}
-
-	@Override
-	public String getRecordKey() {
-		return "variant";
-	}
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/PassingVariantFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/PassingVariantFilter.java
deleted file mode 100644
index f24678f..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/PassingVariantFilter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- * A Predicate on VariantContexts that returns true at sites that are either unfiltered, or passing (as variants).
- *
- * @author Yossi Farjoun
- */
-public class PassingVariantFilter implements VariantContextFilter {
-
-    /**
-     * @return true if variantContext is a SNP
-     * @param variantContext the record to examine for being a SNP
-     */
-    @Override
-    public boolean test(final VariantContext variantContext) {
-        return variantContext.isNotFiltered();
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/SnpFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/SnpFilter.java
deleted file mode 100644
index 4d8b17b..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/SnpFilter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- * A Predicate on VariantContexts that  returns true at sites that are SNPs
- *
- * @author Yossi Farjoun
- */
-public class SnpFilter implements VariantContextFilter {
-
-    /**
-     * @return true if variantContext is a SNP
-     * @param variantContext the record to examine for being a SNP
-     */
-    @Override
-    public boolean test(final VariantContext variantContext) {
-        return variantContext.isSNP();
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/filter/VariantContextFilter.java b/src/main/java/htsjdk/variant/variantcontext/filter/VariantContextFilter.java
deleted file mode 100644
index 451dc63..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/filter/VariantContextFilter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- *
- * API for filtering VariantContexts
- *
- * @author Yossi Farjoun
- *
- */
-public interface VariantContextFilter {
-    /**
-     * Determines whether a VariantContext matches this filter
-     *
-     * @param record the VariantContext to evaluate
-     * @return true if the VariantContext matches the filter, otherwise false
-     */
-    boolean test(VariantContext record);
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/AsyncVariantContextWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/AsyncVariantContextWriter.java
deleted file mode 100644
index 4604316..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/AsyncVariantContextWriter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.util.AbstractAsyncWriter;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-/**
- * AsyncVariantContextWriter that can be wrapped around an underlying AsyncVariantContextWriter to provide asynchronous output. Records
- * added are placed into a queue, the queue is then drained into the underlying VariantContextWriter by a thread owned
- * by the instance.
- *
- * Exceptions experienced by the writer thread will be emitted back to the caller in subsequent calls to either
- * add() or close().
- *
- * @author George Grant
- */
-public class AsyncVariantContextWriter extends AbstractAsyncWriter<VariantContext> implements VariantContextWriter {
-    private final VariantContextWriter underlyingWriter;
-
-    /**
-     * Creates a new AsyncVariantContextWriter wrapping the provided VariantContextWriter.
-     */
-    public AsyncVariantContextWriter(final VariantContextWriter out) {
-        this(out, DEFAULT_QUEUE_SIZE);
-    }
-
-    /**
-     * Creates an AsyncVariantContextWriter wrapping the provided VariantContextWriter and using the specified
-     * queue size for buffer VariantContexts.
-     */
-    public AsyncVariantContextWriter(final VariantContextWriter out, final int queueSize) {
-        super(queueSize);
-        this.underlyingWriter = out;
-    }
-
-    @Override protected void synchronouslyWrite(final VariantContext item) { this.underlyingWriter.add(item); }
-
-    @Override protected void synchronouslyClose() { this.underlyingWriter.close();  }
-
-    @Override protected final String getThreadNamePrefix() { return "VariantContextWriterThread-"; }
-
-    public void add(final VariantContext vc) {
-        write(vc);
-    }
-
-    public void writeHeader(final VCFHeader header) {
-        this.underlyingWriter.writeHeader(header);
-    }
-    
-    @Override
-    public boolean checkError() {
-        return false;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Encoder.java b/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Encoder.java
deleted file mode 100644
index 495cd93..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Encoder.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.bcf2.BCF2Type;
-import htsjdk.variant.bcf2.BCF2Utils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public final class BCF2Encoder {
-    // TODO -- increase default size?
-    public static final int WRITE_BUFFER_INITIAL_SIZE = 16384;
-    private ByteArrayOutputStream encodeStream = new ByteArrayOutputStream(WRITE_BUFFER_INITIAL_SIZE);
-
-    // --------------------------------------------------------------------------------
-    //
-    // Functions to return the data being encoded here
-    //
-    // --------------------------------------------------------------------------------
-
-    public byte[] getRecordBytes() {
-        byte[] bytes = encodeStream.toByteArray();
-        encodeStream.reset();
-        return bytes;
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Writing typed values (have type byte)
-    //
-    // --------------------------------------------------------------------------------
-
-    public final void encodeTypedMissing(final BCF2Type type) throws IOException {
-        encodeType(0, type);
-    }
-
-    public final void encodeTyped(final Object value, final BCF2Type type) throws IOException {
-        if ( value == null )
-            encodeTypedMissing(type);
-        else {
-            switch ( type ) {
-                case INT8:
-                case INT16:
-                case INT32: encodeTypedInt((Integer)value, type); break;
-                case FLOAT: encodeTypedFloat((Double) value); break;
-                case CHAR:  encodeTypedString((String) value); break;
-                default:    throw new IllegalArgumentException("Illegal type encountered " + type);
-            }
-        }
-    }
-
-    public final void encodeTypedInt(final int v) throws IOException {
-        final BCF2Type type = BCF2Utils.determineIntegerType(v);
-        encodeTypedInt(v, type);
-    }
-
-    public final void encodeTypedInt(final int v, final BCF2Type type) throws IOException {
-        encodeType(1, type);
-        encodeRawInt(v, type);
-    }
-
-    public final void encodeTypedString(final String s) throws IOException {
-        encodeTypedString(s.getBytes());
-    }
-
-    public final void encodeTypedString(final byte[] s) throws IOException {
-        if ( s == null )
-            encodeType(0, BCF2Type.CHAR);
-        else {
-            encodeType(s.length, BCF2Type.CHAR);
-            for ( int i = 0; i < s.length; i++ ) {
-                encodeRawChar(s[i]);
-            }
-        }
-    }
-
-    public final void encodeTypedFloat(final double d) throws IOException {
-        encodeType(1, BCF2Type.FLOAT);
-        encodeRawFloat(d);
-    }
-
-    public final void encodeTyped(List<? extends Object> v, final BCF2Type type) throws IOException {
-        if ( type == BCF2Type.CHAR && !v.isEmpty()) {
-            final String s = BCF2Utils.collapseStringList((List<String>) v);
-            v = stringToBytes(s);
-        }
-
-        encodeType(v.size(), type);
-        encodeRawValues(v, type);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Writing raw values (don't have a type byte)
-    //
-    // --------------------------------------------------------------------------------
-
-    public final <T extends Object> void encodeRawValues(final Collection<T> v, final BCF2Type type) throws IOException {
-        for ( final T v1 : v ) {
-            encodeRawValue(v1, type);
-        }
-    }
-
-    public final <T extends Object> void encodeRawValue(final T value, final BCF2Type type) throws IOException {
-        try {
-            if ( value == type.getMissingJavaValue() )
-                encodeRawMissingValue(type);
-            else {
-                switch (type) {
-                    case INT8:
-                    case INT16:
-                    case INT32: encodeRawBytes((Integer) value, type); break;
-                    case FLOAT: encodeRawFloat((Double) value); break;
-                    case CHAR:  encodeRawChar((Byte) value); break;
-                    default:    throw new IllegalArgumentException("Illegal type encountered " + type);
-                }
-            }
-        } catch ( ClassCastException e ) {
-            throw new ClassCastException("BUG: invalid type cast to " + type + " from " + value);
-        }
-    }
-
-    public final void encodeRawMissingValue(final BCF2Type type) throws IOException {
-        encodeRawBytes(type.getMissingBytes(), type);
-    }
-
-    public final void encodeRawMissingValues(final int size, final BCF2Type type) throws IOException {
-        for ( int i = 0; i < size; i++ )
-            encodeRawMissingValue(type);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // low-level encoders
-    //
-    // --------------------------------------------------------------------------------
-
-    public final void encodeRawChar(final byte c) throws IOException {
-        encodeStream.write(c);
-    }
-
-    public final void encodeRawFloat(final double value) throws IOException {
-        encodeRawBytes(Float.floatToIntBits((float) value), BCF2Type.FLOAT);
-    }
-
-    public final void encodeType(final int size, final BCF2Type type) throws IOException {
-        if ( size <= BCF2Utils.MAX_INLINE_ELEMENTS ) {
-            final int typeByte = BCF2Utils.encodeTypeDescriptor(size, type);
-            encodeStream.write(typeByte);
-        } else {
-            final int typeByte = BCF2Utils.encodeTypeDescriptor(BCF2Utils.OVERFLOW_ELEMENT_MARKER, type);
-            encodeStream.write(typeByte);
-            // write in the overflow size
-            encodeTypedInt(size);
-        }
-    }
-
-    public final void encodeRawInt(final int value, final BCF2Type type) throws IOException {
-        type.write(value, encodeStream);
-    }
-
-    public final void encodeRawBytes(final int value, final BCF2Type type) throws IOException {
-        type.write(value, encodeStream);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // utility functions
-    //
-    // --------------------------------------------------------------------------------
-
-    public void encodeRawString(final String s, final int sizeToWrite) throws IOException {
-        final byte[] bytes = s.getBytes();
-        for ( int i = 0; i < sizeToWrite; i++ )
-            if ( i < bytes.length )
-                encodeRawChar(bytes[i]);
-            else
-                encodeRawMissingValue(BCF2Type.CHAR);
-    }
-
-    /**
-     * Totally generic encoder that examines o, determines the best way to encode it, and encodes it
-     *
-     * This method is incredibly slow, but it's only used for UnitTests so it doesn't matter
-     *
-     * @param o
-     * @return
-     */
-    public final BCF2Type encode(final Object o) throws IOException {
-        if ( o == null ) throw new IllegalArgumentException("Generic encode cannot deal with null values");
-
-        if ( o instanceof List ) {
-            final BCF2Type type = determineBCFType(((List) o).get(0));
-            encodeTyped((List) o, type);
-            return type;
-        } else {
-            final BCF2Type type = determineBCFType(o);
-            encodeTyped(o, type);
-            return type;
-        }
-    }
-
-    private final BCF2Type determineBCFType(final Object arg) {
-        final Object toType = arg instanceof List ? ((List)arg).get(0) : arg;
-
-        if ( toType instanceof Integer )
-            return BCF2Utils.determineIntegerType((Integer) toType);
-        else if ( toType instanceof String )
-            return BCF2Type.CHAR;
-        else if ( toType instanceof Double )
-            return BCF2Type.FLOAT;
-        else
-            throw new IllegalArgumentException("No native encoding for Object of type " + arg.getClass().getSimpleName());
-    }
-
-    private final List<Byte> stringToBytes(final String v) throws IOException {
-        if ( v == null || v.equals("") )
-            return Collections.emptyList();
-        else {
-            // TODO -- this needs to be optimized away for efficiency
-            final byte[] bytes = v.getBytes();
-            final List<Byte> l = new ArrayList<Byte>(bytes.length);
-            for ( int i = 0; i < bytes.length; i++) l.add(bytes[i]);
-            return l;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldEncoder.java b/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldEncoder.java
deleted file mode 100644
index 7d1f0de..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldEncoder.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.bcf2.BCF2Type;
-import htsjdk.variant.bcf2.BCF2Utils;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFCompoundHeaderLine;
-import htsjdk.variant.vcf.VCFHeaderLineCount;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public abstract class BCF2FieldEncoder {
-    /**
-     * The header line describing the field we will encode values of
-     */
-    final VCFCompoundHeaderLine headerLine;
-
-    /**
-     * The BCF2 type we'll use to encoder this field, if it can be determined statically.
-     * If not, this variable must be null
-     */
-    final BCF2Type staticType;
-
-    /**
-     * The integer offset into the strings map of the BCF2 file corresponding to this
-     * field.
-     */
-    final int dictionaryOffset;
-
-    /**
-     * The integer type we use to encode our dictionary offset in the BCF2 file
-     */
-    final BCF2Type dictionaryOffsetType;
-
-    // ----------------------------------------------------------------------
-    //
-    // Constructor
-    //
-    // ----------------------------------------------------------------------
-
-    private BCF2FieldEncoder(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict, final BCF2Type staticType) {
-        this.headerLine = headerLine;
-        this.staticType = staticType;
-
-        final Integer offset = dict.get(getField());
-        if ( offset == null ) throw new IllegalStateException("Format error: could not find string " + getField() + " in header as required by BCF");
-        this.dictionaryOffset = offset;
-        dictionaryOffsetType = BCF2Utils.determineIntegerType(offset);
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Basic accessors
-    //
-    // ----------------------------------------------------------------------
-
-    public final String getField() { return headerLine.getID(); }
-
-    /**
-     * Write the field key (dictionary offset and type) into the BCF2Encoder stream
-     *
-     * @param encoder where we write our dictionary offset
-     * @throws IOException
-     */
-    public final void writeFieldKey(final BCF2Encoder encoder) throws IOException {
-        encoder.encodeTypedInt(dictionaryOffset, dictionaryOffsetType);
-    }
-
-    @Override
-    public String toString() {
-        return "BCF2FieldEncoder for " + getField() + " with count " + getCountType() + " encoded with " + getClass().getSimpleName();
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // methods to determine the number of encoded elements
-    //
-    // ----------------------------------------------------------------------
-
-    protected final VCFHeaderLineCount getCountType() {
-        return headerLine.getCountType();
-    }
-
-    /**
-     * @return True if this field has a constant, fixed number of elements (such as 1 for an atomic integer)
-     */
-    public boolean hasConstantNumElements() {
-        return getCountType() == VCFHeaderLineCount.INTEGER;
-    }
-
-    /**
-     * @return True if the only way to determine how many elements this field contains is by
-     * inspecting the actual value directly, such as when the number of elements
-     * is a variable length list per site or per genotype.
-     */
-    public boolean hasValueDeterminedNumElements() {
-        return getCountType() == VCFHeaderLineCount.UNBOUNDED;
-    }
-
-    /**
-     * @return True if this field has a non-fixed number of elements that depends only on the properties
-     * of the current VariantContext, such as one value per Allele or per genotype configuration.
-     */
-    public boolean hasContextDeterminedNumElements() {
-        return ! hasConstantNumElements() && ! hasValueDeterminedNumElements();
-    }
-
-    /**
-     * @return the number of elements, assuming this field has a constant number of elements.
-     */
-    public int numElements() {
-        return headerLine.getCount();
-    }
-
-    /**
-     * @return the number of elements by looking at the actual value provided
-     */
-    public int numElements(final Object value) {
-        return numElementsFromValue(value);
-    }
-
-    /**
-     * @return the number of elements, assuming this field has context-determined number of elements.
-     */
-    public int numElements(final VariantContext vc) {
-        return headerLine.getCount(vc);
-    }
-
-    /**
-     * A convenience access for the number of elements.
-     * @param vc
-     * @param value
-     * @return the number of encoded elements, either from the fixed number
-     * it has, from the VC, or from the value itself.
-     */
-    public final int numElements(final VariantContext vc, final Object value) {
-        if ( hasConstantNumElements() ) return numElements();
-        else if ( hasContextDeterminedNumElements() ) return numElements(vc);
-        else return numElements(value);
-    }
-
-    /**
-     * Given a value, return the number of elements we will encode for it.
-     *
-     * Assumes the value is encoded as a List
-     *
-     * @param value
-     * @return the number of elements we will encode for {@param value}.
-     */
-    protected int numElementsFromValue(final Object value) {
-        if ( value == null ) return 0;
-        else if ( value instanceof List ) return ((List) value).size();
-        else return 1;
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // methods to determine the BCF2 type of the encoded values
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Is the BCF2 type of this field static, or does it have to be determine from
-     * the actual field value itself?
-     * @return true if the field is static
-     */
-    public final boolean isStaticallyTyped() { return ! isDynamicallyTyped(); }
-
-    /**
-     * Is the BCF2 type of this field static, or does it have to be determine from
-     * the actual field value itself?
-     * @return true if the field is not static
-     */
-    public final boolean isDynamicallyTyped() { return staticType == null; }
-
-    /**
-     * Get the BCF2 type for this field, either from the static type of the
-     * field itself or by inspecting the value itself.
-     *
-     * @return the BCF2 type for this field
-     */
-    public final BCF2Type getType(final Object value) {
-        return isDynamicallyTyped() ? getDynamicType(value) : getStaticType();
-    }
-
-    public final BCF2Type getStaticType() {
-        return staticType;
-    }
-
-    public BCF2Type getDynamicType(final Object value) {
-        throw new IllegalStateException("BUG: cannot get dynamic type for statically typed BCF2 field " + getField());
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // methods to encode values, including the key abstract method
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Key abstract method that should encode a value of the given type into the encoder.
-     *
-     * Value will be of a type appropriate to the underlying encoder.  If the genotype field is represented as
-     * an int[], this will be value, and the encoder needs to handle encoding all of the values in the int[].
-     *
-     * The argument should be used, not the getType() method in the superclass as an outer loop might have
-     * decided a more general type (int16) to use, even through this encoder could have been done with int8.
-     *
-     * If minValues > 0, then encodeValue must write in at least minValues items from value.  If value is atomic,
-     * this means that minValues - 1 MISSING values should be added to the encoder.  If minValues is a collection
-     * type (int[]) then minValues - values.length should be added.  This argument is intended to handle padding
-     * of values in genotype fields.
-     *
-     * @param encoder
-     * @param value
-     * @param type
-     * @param minValues
-     * @throws IOException
-     */
-    public abstract void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException;
-
-    // ----------------------------------------------------------------------
-    //
-    // Subclass to encode Strings
-    //
-    // ----------------------------------------------------------------------
-
-    public static class StringOrCharacter extends BCF2FieldEncoder {
-        public StringOrCharacter(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, BCF2Type.CHAR);
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            final String s = javaStringToBCF2String(value);
-            encoder.encodeRawString(s, Math.max(s.length(), minValues));
-        }
-
-        //
-        // Regardless of what the header says, BCF2 strings and characters are always encoded
-        // as arrays of CHAR type, which has a variable number of elements depending on the
-        // exact string being encoded
-        //
-        @Override public boolean hasConstantNumElements()          { return false; }
-        @Override public boolean hasContextDeterminedNumElements() { return false; }
-        @Override public boolean hasValueDeterminedNumElements()   { return true; }
-        @Override protected int numElementsFromValue(final Object value) {
-            return value == null ? 0 : javaStringToBCF2String(value).length();
-        }
-
-        /**
-         * Recode the incoming object to a String, compacting it into a
-         * BCF2 string if the value is a list.
-         *
-         * @param value a String or List<String> to encode, or null
-         * @return a non-null string to encode
-         */
-        private String javaStringToBCF2String(final Object value) {
-            if ( value == null )
-                return "";
-            else if (value instanceof List) {
-                final List<String> l = (List<String>)value;
-                return BCF2Utils.collapseStringList(l);
-            } else if ( value.getClass().isArray() ) {
-                final List<String> l = new ArrayList<String>();
-                Collections.addAll(l, (String[])value);
-                return BCF2Utils.collapseStringList(l);
-            } else
-                return (String)value;
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Subclass to encode FLAG
-    //
-    // ----------------------------------------------------------------------
-
-    public static class Flag extends BCF2FieldEncoder {
-        public Flag(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, BCF2Type.INT8);
-            if ( ! headerLine.isFixedCount() || headerLine.getCount() != 0 )
-                throw new IllegalStateException("Flag encoder only supports atomic flags for field " + getField());
-        }
-
-        @Override
-        public int numElements() {
-            return 1; // the header says 0 but we will write 1 value
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            encoder.encodeRawBytes(1, getStaticType());
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Subclass to encode FLOAT
-    //
-    // ----------------------------------------------------------------------
-
-    public static class Float extends BCF2FieldEncoder {
-        final boolean isAtomic;
-
-        public Float(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, BCF2Type.FLOAT);
-            isAtomic = hasConstantNumElements() && numElements() == 1;
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            int count = 0;
-            // TODO -- can be restructured to avoid toList operation
-            if ( isAtomic ) {
-                // fast path for fields with 1 fixed float value
-                if ( value != null ) {
-                    encoder.encodeRawFloat((Double)value);
-                    count++;
-                }
-            } else {
-                // handle generic case
-                final List<Double> doubles = BCF2Utils.toList(Double.class, value);
-                for ( final Double d : doubles ) {
-                    if ( d != null ) { // necessary because .,. => [null, null] in VC
-                        encoder.encodeRawFloat(d);
-                        count++;
-                    }
-                }
-            }
-            for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Subclass to encode int[]
-    //
-    // ----------------------------------------------------------------------
-
-    public static class IntArray extends BCF2FieldEncoder {
-        public IntArray(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, null);
-        }
-
-        @Override
-        protected int numElementsFromValue(final Object value) {
-            return value == null ? 0 : ((int[])value).length;
-        }
-
-        @Override
-        public BCF2Type getDynamicType(final Object value) {
-            return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType((int[])value);
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            int count = 0;
-            if ( value != null ) {
-                for ( final int i : (int[])value ) {
-                    encoder.encodeRawInt(i, type);
-                    count++;
-                }
-            }
-            for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // Subclass to encode List<Integer>
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Specialized int encoder for atomic (non-list) integers
-     */
-    public static class AtomicInt extends BCF2FieldEncoder {
-        public AtomicInt(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, null);
-        }
-
-        @Override
-        public BCF2Type getDynamicType(final Object value) {
-            return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType((Integer)value);
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            int count = 0;
-            if ( value != null ) {
-                encoder.encodeRawInt((Integer)value, type);
-                count++;
-            }
-            for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
-        }
-    }
-
-    public static class GenericInts extends BCF2FieldEncoder {
-        public GenericInts(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
-            super(headerLine, dict, null);
-        }
-
-        @Override
-        public BCF2Type getDynamicType(final Object value) {
-            return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType(BCF2Utils.toList(Integer.class, value));
-        }
-
-        @Override
-        public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
-            int count = 0;
-            for ( final Integer i : BCF2Utils.toList(Integer.class, value) ) {
-                if ( i != null ) { // necessary because .,. => [null, null] in VC
-                    encoder.encodeRawInt(i, type);
-                    count++;
-                }
-            }
-            for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriter.java
deleted file mode 100644
index f9dd458..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriter.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.bcf2.BCF2Type;
-import htsjdk.variant.bcf2.BCF2Utils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public abstract class BCF2FieldWriter {
-    private final VCFHeader header;
-    private final BCF2FieldEncoder fieldEncoder;
-
-    protected BCF2FieldWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-        this.header = header;
-        this.fieldEncoder = fieldEncoder;
-    }
-
-    protected VCFHeader getHeader() { return header; }
-    protected BCF2FieldEncoder getFieldEncoder() {
-        return fieldEncoder;
-    }
-    protected String getField() { return getFieldEncoder().getField(); }
-
-    public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-        fieldEncoder.writeFieldKey(encoder);
-    }
-
-    public void done(final BCF2Encoder encoder, final VariantContext vc) throws IOException { } // TODO -- overload done so that we null out values and test for correctness
-
-    @Override
-    public String toString() {
-        return "BCF2FieldWriter " + getClass().getSimpleName() + " with encoder " + getFieldEncoder();
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Sites writers
-    //
-    // --------------------------------------------------------------------------------
-
-    public static abstract class SiteWriter extends BCF2FieldWriter {
-        protected SiteWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-        }
-
-        public abstract void site(final BCF2Encoder encoder, final VariantContext vc) throws IOException;
-    }
-
-    public static class GenericSiteWriter extends SiteWriter {
-        public GenericSiteWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-        }
-
-        @Override
-        public void site(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-            final Object rawValue = vc.getAttribute(getField(), null);
-            final BCF2Type type = getFieldEncoder().getType(rawValue);
-            if ( rawValue == null ) {
-                // the value is missing, just write in null
-                encoder.encodeType(0, type);
-            } else {
-                final int valueCount = getFieldEncoder().numElements(vc, rawValue);
-                encoder.encodeType(valueCount, type);
-                getFieldEncoder().encodeValue(encoder, rawValue, type, valueCount);
-            }
-        }
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Genotypes writers
-    //
-    // --------------------------------------------------------------------------------
-
-    public static abstract class GenotypesWriter extends BCF2FieldWriter {
-        int nValuesPerGenotype = -1;
-        BCF2Type encodingType = null;
-
-        protected GenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-
-            if ( fieldEncoder.hasConstantNumElements() ) {
-                nValuesPerGenotype = getFieldEncoder().numElements();
-            }
-        }
-
-        @Override
-        public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-            // writes the key information
-            super.start(encoder, vc);
-
-            // only update if we need to
-            if ( ! getFieldEncoder().hasConstantNumElements() ) {
-                if ( getFieldEncoder().hasContextDeterminedNumElements() )
-                    // we are cheap -- just depends on genotype of allele counts
-                    nValuesPerGenotype = getFieldEncoder().numElements(vc);
-                else
-                    // we have to go fishing through the values themselves (expensive)
-                    nValuesPerGenotype = computeMaxSizeOfGenotypeFieldFromValues(vc);
-            }
-
-            encoder.encodeType(nValuesPerGenotype, encodingType);
-        }
-
-        public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
-            final Object fieldValue = g.getExtendedAttribute(getField(), null);
-            getFieldEncoder().encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
-        }
-
-        protected int numElements(final VariantContext vc, final Genotype g) {
-            return getFieldEncoder().numElements(vc, g.getExtendedAttribute(getField()));
-        }
-
-        private final int computeMaxSizeOfGenotypeFieldFromValues(final VariantContext vc) {
-            int size = -1;
-
-            for ( final Genotype g : vc.getGenotypes() ) {
-                size = Math.max(size, numElements(vc, g));
-            }
-
-            return size;
-        }
-    }
-
-    public static class StaticallyTypeGenotypesWriter extends GenotypesWriter {
-        public StaticallyTypeGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-            encodingType = getFieldEncoder().getStaticType();
-        }
-    }
-
-    public static class IntegerTypeGenotypesWriter extends GenotypesWriter {
-        public IntegerTypeGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-        }
-
-        @Override
-        public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-            // the only value that is dynamic are integers
-            final List<Integer> values = new ArrayList<Integer>(vc.getNSamples());
-            for ( final Genotype g : vc.getGenotypes() ) {
-                for ( final Integer i : BCF2Utils.toList(Integer.class, g.getExtendedAttribute(getField(), null)) ) {
-                    if ( i != null ) values.add(i);
-                }
-            }
-
-            encodingType = BCF2Utils.determineIntegerType(values);
-            super.start(encoder, vc);
-        }
-    }
-
-    public static class IGFGenotypesWriter extends GenotypesWriter {
-        final IntGenotypeFieldAccessors.Accessor ige;
-
-        public IGFGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder, final IntGenotypeFieldAccessors.Accessor ige) {
-            super(header, fieldEncoder);
-            this.ige = ige;
-
-            if ( ! (fieldEncoder instanceof BCF2FieldEncoder.IntArray) )
-                throw new IllegalArgumentException("BUG: IntGenotypesWriter requires IntArray encoder for field " + getField());
-        }
-
-        @Override
-        public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-            // TODO
-            // TODO this piece of code consumes like 10% of the runtime alone because fo the vc.getGenotypes() iteration
-            // TODO
-            encodingType = BCF2Type.INT8;
-            for ( final Genotype g : vc.getGenotypes() ) {
-                final int[] pls = ige.getValues(g);
-                final BCF2Type plsType = getFieldEncoder().getType(pls);
-                encodingType = BCF2Utils.maxIntegerType(encodingType, plsType);
-                if ( encodingType == BCF2Type.INT32 )
-                    break; // stop early
-            }
-
-            super.start(encoder, vc);
-        }
-
-        @Override
-        public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
-            getFieldEncoder().encodeValue(encoder, ige.getValues(g), encodingType, nValuesPerGenotype);
-        }
-
-        @Override
-        protected int numElements(final VariantContext vc, final Genotype g) {
-            return ige.getSize(g);
-        }
-    }
-
-    public static class FTGenotypesWriter extends StaticallyTypeGenotypesWriter {
-        public FTGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-        }
-
-        public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
-            final String fieldValue = g.getFilters();
-            getFieldEncoder().encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
-        }
-
-        @Override
-        protected int numElements(final VariantContext vc, final Genotype g) {
-            return getFieldEncoder().numElements(vc, g.getFilters());
-        }
-    }
-
-    public static class GTWriter extends GenotypesWriter {
-        final Map<Allele, Integer> alleleMapForTriPlus = new HashMap<Allele, Integer>(5);
-        Allele ref, alt1;
-
-        public GTWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
-            super(header, fieldEncoder);
-        }
-
-        @Override
-        public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
-            if ( vc.getNAlleles() > BCF2Utils.MAX_ALLELES_IN_GENOTYPES )
-                throw new IllegalStateException("Current BCF2 encoder cannot handle sites " +
-                        "with > " + BCF2Utils.MAX_ALLELES_IN_GENOTYPES + " alleles, but you have "
-                        + vc.getNAlleles() + " at " + vc.getContig() + ":" + vc.getStart());
-
-            encodingType = BCF2Type.INT8;
-            buildAlleleMap(vc);
-            nValuesPerGenotype = vc.getMaxPloidy(2);
-
-            super.start(encoder, vc);
-        }
-
-        @Override
-        public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
-            final int samplePloidy = g.getPloidy();
-            for ( int i = 0; i < nValuesPerGenotype; i++ ) {
-                if ( i < samplePloidy ) {
-                    // we encode the actual allele
-                    final Allele a = g.getAllele(i);
-                    final int offset = getAlleleOffset(a);
-                    final int encoded = ((offset+1) << 1) | (g.isPhased() ? 0x01 : 0x00);
-                    encoder.encodeRawBytes(encoded, encodingType);
-                } else {
-                    // we need to pad with missing as we have ploidy < max for this sample
-                    encoder.encodeRawBytes(encodingType.getMissingBytes(), encodingType);
-                }
-            }
-        }
-
-        /**
-         * Fast path code to determine the offset.
-         *
-         * Inline tests for == against ref (most common, first test)
-         * == alt1 (second most common, second test)
-         * == NO_CALL (third)
-         * and finally in the map from allele => offset for all alt 2+ alleles
-         *
-         * @param a the allele whose offset we wish to determine
-         * @return the offset (from 0) of the allele in the list of variant context alleles (-1 means NO_CALL)
-         */
-        private final int getAlleleOffset(final Allele a) {
-            if ( a == ref ) return 0;
-            else if ( a == alt1 ) return 1;
-            else if ( a == Allele.NO_CALL ) return -1;
-            else {
-                final Integer o = alleleMapForTriPlus.get(a);
-                if ( o == null ) throw new IllegalStateException("BUG: Couldn't find allele offset for allele " + a);
-                return o;
-            }
-        }
-
-        private final void buildAlleleMap(final VariantContext vc) {
-            // these are fast path options to determine the offsets for
-            final int nAlleles = vc.getNAlleles();
-            ref = vc.getReference();
-            alt1 = nAlleles > 1 ? vc.getAlternateAllele(0) : null;
-
-            if ( nAlleles > 2 ) {
-                // for multi-allelics we need to clear the map, and add additional looks
-                alleleMapForTriPlus.clear();
-                final List<Allele> alleles = vc.getAlleles();
-                for ( int i = 2; i < alleles.size(); i++ ) {
-                    alleleMapForTriPlus.put(alleles.get(i), i);
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriterManager.java b/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriterManager.java
deleted file mode 100644
index 20f9ce6..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2FieldWriterManager.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.vcf.VCFCompoundHeaderLine;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFFormatHeaderLine;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-import htsjdk.variant.vcf.VCFInfoHeaderLine;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public class BCF2FieldWriterManager {
-    final Map<String, BCF2FieldWriter.SiteWriter> siteWriters = new HashMap<String, BCF2FieldWriter.SiteWriter>();
-    final Map<String, BCF2FieldWriter.GenotypesWriter> genotypesWriters = new HashMap<String, BCF2FieldWriter.GenotypesWriter>();
-    final IntGenotypeFieldAccessors intGenotypeFieldAccessors = new IntGenotypeFieldAccessors();
-
-    public BCF2FieldWriterManager() { }
-
-    /**
-     * Setup the FieldWriters appropriate to each INFO and FORMAT in the VCF header
-     *
-     * Must be called before any of the getter methods will work
-     *
-     * @param header a VCFHeader containing description for every INFO and FORMAT field we'll attempt to write out to BCF
-     * @param encoder the encoder we are going to use to write out the BCF2 data
-     * @param stringDictionary a map from VCFHeader strings to their offsets for encoding
-     */
-    public void setup(final VCFHeader header, final BCF2Encoder encoder, final Map<String, Integer> stringDictionary) {
-        for (final VCFInfoHeaderLine line : header.getInfoHeaderLines()) {
-            final String field = line.getID();
-            final BCF2FieldWriter.SiteWriter writer = createInfoWriter(header, line, encoder, stringDictionary);
-            add(siteWriters, field, writer);
-        }
-
-        for (final VCFFormatHeaderLine line : header.getFormatHeaderLines()) {
-            final String field = line.getID();
-            final BCF2FieldWriter.GenotypesWriter writer = createGenotypesWriter(header, line, encoder, stringDictionary);
-            add(genotypesWriters, field, writer);
-        }
-    }
-
-    private final <T> void add(final Map<String, T> map, final String field, final T writer) {
-        if ( map.containsKey(field) )
-            throw new IllegalStateException("BUG: field " + field + " already seen in VCFHeader while building BCF2 field encoders");
-        map.put(field, writer);
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Master routine to look at the header, a specific line, and
-    // build an appropriate SiteWriter for that header element
-    //
-    // -----------------------------------------------------------------
-
-    private BCF2FieldWriter.SiteWriter createInfoWriter(final VCFHeader header,
-                                                        final VCFInfoHeaderLine line,
-                                                        final BCF2Encoder encoder,
-                                                        final Map<String, Integer> dict) {
-        return new BCF2FieldWriter.GenericSiteWriter(header, createFieldEncoder(line, encoder, dict, false));
-    }
-
-    private BCF2FieldEncoder createFieldEncoder(final VCFCompoundHeaderLine line,
-                                                final BCF2Encoder encoder,
-                                                final Map<String, Integer> dict,
-                                                final boolean createGenotypesEncoders ) {
-
-        if ( createGenotypesEncoders && intGenotypeFieldAccessors.getAccessor(line.getID()) != null ) {
-            if ( GeneralUtils.DEBUG_MODE_ENABLED && line.getType() != VCFHeaderLineType.Integer )
-                System.err.println("Warning: field " + line.getID() + " expected to encode an integer but saw " + line.getType() + " for record " + line);
-            return new BCF2FieldEncoder.IntArray(line, dict);
-        } else if ( createGenotypesEncoders && line.getID().equals(VCFConstants.GENOTYPE_KEY) ) {
-            return new BCF2FieldEncoder.GenericInts(line, dict);
-        } else {
-            switch ( line.getType() ) {
-                case Character:
-                case String:
-                    return new BCF2FieldEncoder.StringOrCharacter(line, dict);
-                case Flag:
-                    return new BCF2FieldEncoder.Flag(line, dict);
-                case Float:
-                    return new BCF2FieldEncoder.Float(line, dict);
-                case Integer:
-                    if ( line.isFixedCount() && line.getCount() == 1 )
-                        return new BCF2FieldEncoder.AtomicInt(line, dict);
-                    else
-                        return new BCF2FieldEncoder.GenericInts(line, dict);
-                default:
-                    throw new IllegalArgumentException("Unexpected type for field " + line.getID());
-            }
-        }
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Master routine to look at the header, a specific line, and
-    // build an appropriate Genotypes for that header element
-    //
-    // -----------------------------------------------------------------
-
-    private BCF2FieldWriter.GenotypesWriter createGenotypesWriter(final VCFHeader header,
-                                                                  final VCFFormatHeaderLine line,
-                                                                  final BCF2Encoder encoder,
-                                                                  final Map<String, Integer> dict) {
-        final String field = line.getID();
-        final BCF2FieldEncoder fieldEncoder = createFieldEncoder(line, encoder, dict, true);
-
-        if ( field.equals(VCFConstants.GENOTYPE_KEY) ) {
-            return new BCF2FieldWriter.GTWriter(header, fieldEncoder);
-        } else if ( line.getID().equals(VCFConstants.GENOTYPE_FILTER_KEY) ) {
-            return new BCF2FieldWriter.FTGenotypesWriter(header, fieldEncoder);
-        } else if ( intGenotypeFieldAccessors.getAccessor(field) != null ) {
-            return new BCF2FieldWriter.IGFGenotypesWriter(header, fieldEncoder, intGenotypeFieldAccessors.getAccessor(field));
-        } else if ( line.getType() == VCFHeaderLineType.Integer ) {
-            return new BCF2FieldWriter.IntegerTypeGenotypesWriter(header, fieldEncoder);
-        } else {
-            return new BCF2FieldWriter.StaticallyTypeGenotypesWriter(header, fieldEncoder);
-        }
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Accessors to get site / genotype writers
-    //
-    // -----------------------------------------------------------------
-
-    /**
-     * Get a site writer specialized to encode values for site info field
-     * @param field key found in the VCF header INFO records
-     * @return non-null writer if one can be found, or null if none exists for field
-     */
-    public BCF2FieldWriter.SiteWriter getSiteFieldWriter(final String field) {
-        return getWriter(field, siteWriters);
-    }
-
-    /**
-     * Get a genotypes writer specialized to encode values for genotypes field
-     * @param field key found in the VCF header FORMAT records
-     * @return non-null writer if one can be found, or null if none exists for field
-     */
-    public BCF2FieldWriter.GenotypesWriter getGenotypeFieldWriter(final String field) {
-        return getWriter(field, genotypesWriters);
-    }
-
-    public <T> T getWriter(final String key, final Map<String, T> map) {
-        return map.get(key);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Writer.java b/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Writer.java
deleted file mode 100644
index 8c16aac..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/BCF2Writer.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.index.IndexCreator;
-import htsjdk.variant.bcf2.BCF2Codec;
-import htsjdk.variant.bcf2.BCF2Type;
-import htsjdk.variant.bcf2.BCF2Utils;
-import htsjdk.variant.bcf2.BCFVersion;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.LazyGenotypesContext;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFContigHeaderLine;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * VariantContextWriter that emits BCF2 binary encoding
- *
- * Overall structure of this writer is complex for efficiency reasons
- *
- * -- The BCF2Writer manages the low-level BCF2 encoder, the mappings
- * from contigs and strings to offsets, the VCF header, and holds the
- * lower-level encoders that map from VC and Genotype fields to their
- * specific encoders.  This class also writes out the standard BCF2 fields
- * like POS, contig, the size of info and genotype data, QUAL, etc.  It
- * has loops over the INFO and GENOTYPES to encode each individual datum
- * with the generic field encoders, but the actual encoding work is
- * done with by the FieldWriters classes themselves
- *
- * -- BCF2FieldWriter are specialized classes for writing out SITE and
- * genotype information for specific SITE/GENOTYPE fields (like AC for
- * sites and GQ for genotypes).  These are objects in themselves because
- * the manage all of the complexity of relating the types in the VCF header
- * with the proper encoding in BCF as well as the type representing this
- * in java.  Relating all three of these pieces of information together
- * is the main complexity challenge in the encoder.  The piece of code
- * that determines which FieldWriters to associate with each SITE and
- * GENOTYPE field is the BCF2FieldWriterManager.  These FieldWriters
- * are specialized for specific combinations of encoders (see below)
- * and contexts (genotypes) for efficiency, so they smartly manage
- * the writing of PLs (encoded as int[]) directly into the lowest
- * level BCFEncoder.
- *
- * -- At the third level is the BCF2FieldEncoder, relatively simple
- * pieces of code that handle the task of determining the right
- * BCF2 type for specific field values, as well as reporting back
- * information such as the number of elements used to encode it
- * (simple for atomic values like Integer but complex for PLs
- * or lists of strings)
- *
- * -- At the lowest level is the BCF2Encoder itself.  This provides
- * just the limited encoding methods specified by the BCF2 specification.  This encoder
- * doesn't do anything but make it possible to conveniently write out valid low-level
- * BCF2 constructs.
- *
- * @author Mark DePristo
- * @since 06/12
- */
-class BCF2Writer extends IndexingVariantContextWriter {
-    public static final int MAJOR_VERSION = 2;
-    public static final int MINOR_VERSION = 1;
-
-    final private static boolean ALLOW_MISSING_CONTIG_LINES = false;
-
-    private final OutputStream outputStream;      // Note: do not flush until completely done writing, to avoid issues with eventual BGZF support
-    private VCFHeader header;
-    private final Map<String, Integer> contigDictionary = new HashMap<String, Integer>();
-    private final Map<String, Integer> stringDictionaryMap = new LinkedHashMap<String, Integer>();
-    private final boolean doNotWriteGenotypes;
-    private String[] sampleNames = null;
-
-    private final BCF2Encoder encoder = new BCF2Encoder(); // initialized after the header arrives
-    final BCF2FieldWriterManager fieldManager = new BCF2FieldWriterManager();
-
-    /**
-     * cached results for whether we can write out raw genotypes data.
-     */
-    private VCFHeader lastVCFHeaderOfUnparsedGenotypes = null;
-    private boolean canPassOnUnparsedGenotypeDataForLastVCFHeader = false;
-
-    public BCF2Writer(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                      final boolean enableOnTheFlyIndexing, final boolean doNotWriteGenotypes) {
-        super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing);
-        this.outputStream = getOutputStream();
-        this.doNotWriteGenotypes = doNotWriteGenotypes;
-    }
-
-    public BCF2Writer(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                      final IndexCreator indexCreator,
-                      final boolean enableOnTheFlyIndexing, final boolean doNotWriteGenotypes) {
-        super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing, indexCreator);
-        this.outputStream = getOutputStream();
-        this.doNotWriteGenotypes = doNotWriteGenotypes;
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Interface functions
-    //
-    // --------------------------------------------------------------------------------
-
-    @Override
-    public void writeHeader(VCFHeader header) {
-        // make sure the header is sorted correctly
-        header = new VCFHeader(header.getMetaDataInSortedOrder(), header.getGenotypeSamples());
-
-        // create the config offsets map
-        if ( header.getContigLines().isEmpty() ) {
-            if ( ALLOW_MISSING_CONTIG_LINES ) {
-                if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                    System.err.println("No contig dictionary found in header, falling back to reference sequence dictionary");
-                }
-                createContigDictionary(VCFUtils.makeContigHeaderLines(getRefDict(), null));
-            } else {
-                throw new IllegalStateException("Cannot write BCF2 file with missing contig lines");
-            }
-        } else {
-            createContigDictionary(header.getContigLines());
-        }
-
-        // set up the map from dictionary string values -> offset
-        final ArrayList<String> dict = BCF2Utils.makeDictionary(header);
-        for ( int i = 0; i < dict.size(); i++ ) {
-            stringDictionaryMap.put(dict.get(i), i);
-        }
-
-        sampleNames = header.getGenotypeSamples().toArray(new String[header.getNGenotypeSamples()]);
-
-        // setup the field encodings
-        fieldManager.setup(header, encoder, stringDictionaryMap);
-
-        try {
-            // write out the header into a byte stream, get its length, and write everything to the file
-            final ByteArrayOutputStream capture = new ByteArrayOutputStream();
-            final OutputStreamWriter writer = new OutputStreamWriter(capture);
-            this.header = VCFWriter.writeHeader(header, writer, doNotWriteGenotypes, VCFWriter.getVersionLine(), "BCF2 stream");
-            writer.append('\0'); // the header is null terminated by a byte
-            writer.close();
-
-            final byte[] headerBytes = capture.toByteArray();
-            new BCFVersion(MAJOR_VERSION, MINOR_VERSION).write(outputStream);
-            BCF2Type.INT32.write(headerBytes.length, outputStream);
-            outputStream.write(headerBytes);
-        } catch (IOException e) {
-            throw new RuntimeIOException("BCF2 stream: Got IOException while trying to write BCF2 header", e);
-        }
-    }
-
-    @Override
-    public void add( VariantContext vc ) {
-        if ( doNotWriteGenotypes )
-            vc = new VariantContextBuilder(vc).noGenotypes().make();
-        vc = vc.fullyDecode(header, false);
-
-        super.add(vc); // allow on the fly indexing
-
-        try {
-            final byte[] infoBlock = buildSitesData(vc);
-            final byte[] genotypesBlock = buildSamplesData(vc);
-
-            // write the two blocks to disk
-            writeBlock(infoBlock, genotypesBlock);
-        }
-        catch ( IOException e ) {
-            throw new RuntimeIOException("Error writing record to BCF2 file: " + vc.toString(), e);
-        }
-    }
-
-    @Override
-    public void close() {
-        try {
-            outputStream.flush();
-        }
-        catch ( IOException e ) {
-            throw new RuntimeIOException("Failed to flush BCF2 file");
-        }
-        super.close();
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // implicit block
-    //
-    // The first four records of BCF are inline untype encoded data of:
-    //
-    // 4 byte integer chrom offset
-    // 4 byte integer start
-    // 4 byte integer ref length
-    // 4 byte float qual
-    //
-    // --------------------------------------------------------------------------------
-    private byte[] buildSitesData( VariantContext vc ) throws IOException {
-        final int contigIndex = contigDictionary.get(vc.getContig());
-        if ( contigIndex == -1 )
-            throw new IllegalStateException(String.format("Contig %s not found in sequence dictionary from reference", vc.getContig()));
-
-        // note use of encodeRawValue to not insert the typing byte
-        encoder.encodeRawValue(contigIndex, BCF2Type.INT32);
-
-        // pos.  GATK is 1 based, BCF2 is 0 based
-        encoder.encodeRawValue(vc.getStart() - 1, BCF2Type.INT32);
-
-        // ref length.  GATK is closed, but BCF2 is open so the ref length is GATK end - GATK start + 1
-        // for example, a SNP is in GATK at 1:10-10, which has ref length 10 - 10 + 1 = 1
-        encoder.encodeRawValue(vc.getEnd() - vc.getStart() + 1, BCF2Type.INT32);
-
-        // qual
-        if ( vc.hasLog10PError() )
-            encoder.encodeRawFloat((float) vc.getPhredScaledQual());
-        else
-            encoder.encodeRawMissingValue(BCF2Type.FLOAT);
-
-        // info fields
-        final int nAlleles = vc.getNAlleles();
-        final int nInfo = vc.getAttributes().size();
-        final int nGenotypeFormatFields = getNGenotypeFormatFields(vc);
-        final int nSamples = header.getNGenotypeSamples();
-
-        encoder.encodeRawInt((nAlleles << 16) | (nInfo & 0x0000FFFF), BCF2Type.INT32);
-        encoder.encodeRawInt((nGenotypeFormatFields << 24) | (nSamples & 0x00FFFFF), BCF2Type.INT32);
-
-        buildID(vc);
-        buildAlleles(vc);
-        buildFilter(vc);
-        buildInfo(vc);
-
-        return encoder.getRecordBytes();
-    }
-
-
-    /**
-     * Can we safely write on the raw (undecoded) genotypes of an input VC?
-     *
-     * The cache depends on the undecoded lazy data header == lastVCFHeaderOfUnparsedGenotypes, in
-     * which case we return the previous result.  If it's not cached, we use the BCF2Util to
-     * compare the VC header with our header (expensive) and cache it.
-     *
-     * @param lazyData
-     * @return
-     */
-    private boolean canSafelyWriteRawGenotypesBytes(final BCF2Codec.LazyData lazyData) {
-        if ( lazyData.header != lastVCFHeaderOfUnparsedGenotypes ) {
-            // result is already cached
-            canPassOnUnparsedGenotypeDataForLastVCFHeader = BCF2Utils.headerLinesAreOrderedConsistently(this.header,lazyData.header);
-            lastVCFHeaderOfUnparsedGenotypes = lazyData.header;
-        }
-
-        return canPassOnUnparsedGenotypeDataForLastVCFHeader;
-    }
-
-    private BCF2Codec.LazyData getLazyData(final VariantContext vc) {
-        if ( vc.getGenotypes().isLazyWithData() ) {
-            final LazyGenotypesContext lgc = (LazyGenotypesContext)vc.getGenotypes();
-
-            if ( lgc.getUnparsedGenotypeData() instanceof BCF2Codec.LazyData &&
-                    canSafelyWriteRawGenotypesBytes((BCF2Codec.LazyData) lgc.getUnparsedGenotypeData())) {
-                return (BCF2Codec.LazyData)lgc.getUnparsedGenotypeData();
-            } else {
-                lgc.decode(); // WARNING -- required to avoid keeping around bad lazy data for too long
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Try to get the nGenotypeFields as efficiently as possible.
-     *
-     * If this is a lazy BCF2 object just grab the field count from there,
-     * otherwise do the whole counting by types test in the actual data
-     *
-     * @param vc
-     * @return
-     */
-    private int getNGenotypeFormatFields(final VariantContext vc) {
-        final BCF2Codec.LazyData lazyData = getLazyData(vc);
-        return lazyData != null ? lazyData.nGenotypeFields : vc.calcVCFGenotypeKeys(header).size();
-    }
-
-    private void buildID( VariantContext vc ) throws IOException {
-        encoder.encodeTypedString(vc.getID());
-    }
-
-    private void buildAlleles( VariantContext vc ) throws IOException {
-        for ( Allele allele : vc.getAlleles() ) {
-            final byte[] s = allele.getDisplayBases();
-            if ( s == null )
-                throw new IllegalStateException("BUG: BCF2Writer encountered null padded allele" + allele);
-            encoder.encodeTypedString(s);
-        }
-    }
-
-    private void buildFilter( VariantContext vc ) throws IOException {
-        if ( vc.isFiltered() ) {
-            encodeStringsByRef(vc.getFilters());
-        } else if ( vc.filtersWereApplied() ) {
-            encodeStringsByRef(Collections.singleton(VCFConstants.PASSES_FILTERS_v4));
-        } else {
-            encoder.encodeTypedMissing(BCF2Type.INT8);
-        }
-    }
-
-    private void buildInfo( VariantContext vc ) throws IOException {
-        for ( Map.Entry<String, Object> infoFieldEntry : vc.getAttributes().entrySet() ) {
-            final String field = infoFieldEntry.getKey();
-            final BCF2FieldWriter.SiteWriter writer = fieldManager.getSiteFieldWriter(field);
-            if ( writer == null ) errorUnexpectedFieldToWrite(vc, field, "INFO");
-            writer.start(encoder, vc);
-            writer.site(encoder, vc);
-            writer.done(encoder, vc);
-        }
-    }
-
-    private byte[] buildSamplesData(final VariantContext vc) throws IOException {
-        final BCF2Codec.LazyData lazyData = getLazyData(vc);  // has critical side effects
-        if ( lazyData != null ) {
-            // we never decoded any data from this BCF file, so just pass it back
-            return lazyData.bytes;
-        }
-
-        // we have to do work to convert the VC into a BCF2 byte stream
-        final List<String> genotypeFields = vc.calcVCFGenotypeKeys(header);
-        for ( final String field : genotypeFields ) {
-            final BCF2FieldWriter.GenotypesWriter writer = fieldManager.getGenotypeFieldWriter(field);
-            if ( writer == null ) errorUnexpectedFieldToWrite(vc, field, "FORMAT");
-
-            assert writer != null;
-
-            writer.start(encoder, vc);
-            for ( final String name : sampleNames ) {
-                Genotype g = vc.getGenotype(name);
-                if ( g == null ) g = GenotypeBuilder.createMissing(name, writer.nValuesPerGenotype);
-                writer.addGenotype(encoder, vc, g);
-            }
-            writer.done(encoder, vc);
-        }
-        return encoder.getRecordBytes();
-    }
-
-    /**
-     * Throws a meaningful error message when a field (INFO or FORMAT) is found when writing out a file
-     * but there's no header line for it.
-     *
-     * @param vc
-     * @param field
-     * @param fieldType
-     */
-    private void errorUnexpectedFieldToWrite(final VariantContext vc, final String field, final String fieldType) {
-        throw new IllegalStateException("Found field " + field + " in the " + fieldType + " fields of VariantContext at " +
-                vc.getContig() + ":" + vc.getStart() + " from " + vc.getSource() + " but this hasn't been defined in the VCFHeader");
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Low-level block encoding
-    //
-    // --------------------------------------------------------------------------------
-
-    /**
-     * Write the data in the encoder to the outputstream as a length encoded
-     * block of data.  After this call the encoder stream will be ready to
-     * start a new data block
-     *
-     * @throws IOException
-     */
-    private void writeBlock(final byte[] infoBlock, final byte[] genotypesBlock) throws IOException {
-        BCF2Type.INT32.write(infoBlock.length, outputStream);
-        BCF2Type.INT32.write(genotypesBlock.length, outputStream);
-        outputStream.write(infoBlock);
-        outputStream.write(genotypesBlock);
-    }
-
-    private BCF2Type encodeStringsByRef(final Collection<String> strings) throws IOException {
-        final List<Integer> offsets = new ArrayList<Integer>(strings.size());
-
-        // iterate over strings until we find one that needs 16 bits, and break
-        for ( final String string : strings ) {
-            final Integer got = stringDictionaryMap.get(string);
-            if ( got == null ) throw new IllegalStateException("Format error: could not find string " + string + " in header as required by BCF");
-            final int offset = got;
-            offsets.add(offset);
-        }
-
-        final BCF2Type type = BCF2Utils.determineIntegerType(offsets);
-        encoder.encodeTyped(offsets, type);
-        return type;
-    }
-
-    /**
-     * Create the contigDictionary from the contigLines extracted from the VCF header
-     *
-     * @param contigLines
-     */
-    private void createContigDictionary(final Collection<VCFContigHeaderLine> contigLines) {
-        int offset = 0;
-        for ( VCFContigHeaderLine contig : contigLines )
-            contigDictionary.put(contig.getID(), offset++);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/IndexingVariantContextWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/IndexingVariantContextWriter.java
deleted file mode 100644
index 6a77f6b..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/IndexingVariantContextWriter.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.index.DynamicIndexCreator;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexCreator;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.samtools.util.PositionalOutputStream;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * this class writes VCF files
- */
-abstract class IndexingVariantContextWriter implements VariantContextWriter {
-    private final String name;
-    private final File location;
-    private final SAMSequenceDictionary refDict;
-
-    private OutputStream outputStream;
-    private LocationAware locationSource = null;
-    private IndexCreator indexer = null;
-
-    private IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict) {
-        this.name = name;
-        this.location = location;
-        this.outputStream = output;
-        this.refDict = refDict;
-    }
-
-    /**
-     * Create a VariantContextWriter with an associated index using the default index creator
-     *
-     * @param name  the name of this writer (i.e. the file name or stream)
-     * @param location  the path to the output file
-     * @param output    the output stream to write to
-     * @param refDict   the reference dictionary
-     * @param enableOnTheFlyIndexing    is OTF indexing enabled?
-     */
-    protected IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                                           final boolean enableOnTheFlyIndexing) {
-        this(name, location, output, refDict);
-
-        if ( enableOnTheFlyIndexing ) {
-            initIndexingWriter(new DynamicIndexCreator(location, IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME));
-        }
-    }
-
-    /**
-     * Create a VariantContextWriter with an associated index using a custom index creator
-     *
-     * @param name  the name of this writer (i.e. the file name or stream)
-     * @param location  the path to the output file
-     * @param output    the output stream to write to
-     * @param refDict   the reference dictionary
-     * @param enableOnTheFlyIndexing    is OTF indexing enabled?
-     * @param idxCreator    the custom index creator.  NOTE: must be initialized
-     */
-    protected IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                                           final boolean enableOnTheFlyIndexing, final IndexCreator idxCreator) {
-        this(name, location, output, refDict);
-
-        if ( enableOnTheFlyIndexing ) {
-            // TODO: Handle non-Tribble IndexCreators
-            initIndexingWriter(idxCreator);
-        }
-    }
-
-    private void initIndexingWriter(final IndexCreator idxCreator) {
-        indexer = idxCreator;
-        if (outputStream instanceof LocationAware) {
-            locationSource = (LocationAware)outputStream;
-        } else {
-            final PositionalOutputStream positionalOutputStream = new PositionalOutputStream(outputStream);
-            locationSource = positionalOutputStream;
-            outputStream = positionalOutputStream;
-        }
-    }
-    
-    /** return true is the underlying stream is a PrintStream and 
-     * its checkError returned true. Used to stop linux pipelines 
-     */
-    @Override
-    public boolean checkError() {
-        return (getOutputStream() instanceof PrintStream) && 
-                PrintStream.class.cast(getOutputStream()).checkError();
-    }
-    
-    public OutputStream getOutputStream() {
-        return outputStream;
-    }
-
-    public String getStreamName() {
-        return name;
-    }
-
-    public abstract void writeHeader(VCFHeader header);
-
-    /**
-     * attempt to close the VCF file
-     */
-    public void close() {
-        try {
-            // close the underlying output stream
-            outputStream.close();
-
-            // close the index stream (keep it separate to help debugging efforts)
-            if (indexer != null) {
-                indexer.setIndexSequenceDictionary(refDict);
-                final Index index = indexer.finalizeIndex(locationSource.getPosition());
-                index.writeBasedOnFeatureFile(location);
-            }
-
-
-        } catch (final IOException e) {
-            throw new RuntimeIOException("Unable to close index for " + getStreamName(), e);
-        }
-    }
-
-    /**
-     * @return the reference sequence dictionary used for the variant contexts being written
-     */
-    public SAMSequenceDictionary getRefDict() {
-        return refDict;
-    }
-
-    /**
-     * add a record to the file
-     *
-     * @param vc      the Variant Context object
-     */
-    public void add(final VariantContext vc) {
-        // if we are doing on the fly indexing, add the record ***before*** we write any bytes
-        if ( indexer != null )
-            indexer.addFeature(vc, locationSource.getPosition());
-    }
-
-    /**
-     * Returns a reasonable "name" for this writer, to display to the user if something goes wrong
-     *
-     * @param location
-     * @param stream
-     * @return
-     */
-    protected static final String writerName(final File location, final OutputStream stream) {
-        return location == null ? stream.toString() : location.getAbsolutePath();
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/IntGenotypeFieldAccessors.java b/src/main/java/htsjdk/variant/variantcontext/writer/IntGenotypeFieldAccessors.java
deleted file mode 100644
index 1934d8d..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/IntGenotypeFieldAccessors.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.vcf.VCFConstants;
-
-import java.util.HashMap;
-
-/**
- * A convenient way to provide a single view on the many int and int[] field values we work with,
- * for writing out the values.  This class makes writing out the inline AD, GQ, PL, DP fields
- * easy and fast
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class IntGenotypeFieldAccessors {
-    // initialized once per writer to allow parallel writers to work
-    private final HashMap<String, Accessor> intGenotypeFieldEncoders = new HashMap<String, Accessor>();
-
-    public IntGenotypeFieldAccessors() {
-        intGenotypeFieldEncoders.put(VCFConstants.DEPTH_KEY, new IntGenotypeFieldAccessors.DPAccessor());
-        intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_ALLELE_DEPTHS, new IntGenotypeFieldAccessors.ADAccessor());
-        intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_PL_KEY, new IntGenotypeFieldAccessors.PLAccessor());
-        intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_QUALITY_KEY, new IntGenotypeFieldAccessors.GQAccessor());
-    }
-
-    /**
-     * Return an accessor for field, or null if none exists
-     * @param field
-     * @return
-     */
-    public Accessor getAccessor(final String field) {
-        return intGenotypeFieldEncoders.get(field);
-    }
-
-    public static abstract class Accessor {
-        public abstract int[] getValues(final Genotype g);
-
-        public final int getSize(final Genotype g) {
-            final int[] v = getValues(g);
-            return v == null ? 0 : v.length;
-        }
-    }
-
-    private static abstract class AtomicAccessor extends Accessor {
-        private final int[] singleton = new int[1];
-
-        @Override
-        public int[] getValues(final Genotype g) {
-            singleton[0] = getValue(g);
-            return singleton[0] == -1 ? null : singleton;
-        }
-
-        public abstract int getValue(final Genotype g);
-    }
-
-    public static class GQAccessor extends AtomicAccessor {
-        @Override public int getValue(final Genotype g) { return Math.min(g.getGQ(), VCFConstants.MAX_GENOTYPE_QUAL); }
-    }
-
-    public static class DPAccessor extends AtomicAccessor {
-        @Override public int getValue(final Genotype g) { return g.getDP(); }
-    }
-
-    public static class ADAccessor extends Accessor {
-        @Override public int[] getValues(final Genotype g) { return g.getAD(); }
-    }
-
-    public static class PLAccessor extends Accessor {
-        @Override public int[] getValues(final Genotype g) { return g.getPL(); }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/Options.java b/src/main/java/htsjdk/variant/variantcontext/writer/Options.java
deleted file mode 100644
index 50db1e9..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/Options.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-/**
- * Available writer options for VariantContextWriters
- *
- * @author Mark DePristo
- * @since 5/12
- */
-public enum Options {
-    INDEX_ON_THE_FLY,
-    DO_NOT_WRITE_GENOTYPES,
-    ALLOW_MISSING_FIELDS_IN_HEADER,
-    FORCE_BCF,
-    USE_ASYNC_IO,            // Turn on or off the use of asynchronous IO for writing output VCF files.
-    WRITE_FULL_FORMAT_FIELD  // Write the complete format field, even if trailing missing values could be trimmed?
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriter.java
deleted file mode 100644
index 2185482..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriter.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- * this class writes VCF files, allowing records to be passed in unsorted (up to a certain genomic distance away)
- */
-public class SortingVariantContextWriter extends SortingVariantContextWriterBase {
-
-    // the maximum START distance between records that we'll cache
-    private int maxCachingStartDistance;
-
-    /**
-     * create a local-sorting VCF writer, given an inner VCF writer to write to
-     *
-     * @param innerWriter        the VCFWriter to write to
-     * @param maxCachingStartDistance the maximum start distance between records that we'll cache
-     * @param takeOwnershipOfInner Should this Writer close innerWriter when it's done with it
-     */
-    public SortingVariantContextWriter(VariantContextWriter innerWriter, int maxCachingStartDistance, boolean takeOwnershipOfInner) {
-        super(innerWriter, takeOwnershipOfInner);
-        this.maxCachingStartDistance = maxCachingStartDistance;
-    }
-
-    public SortingVariantContextWriter(VariantContextWriter innerWriter, int maxCachingStartDistance) {
-        this(innerWriter, maxCachingStartDistance, false); // by default, don't own inner
-    }
-
-    protected void noteCurrentRecord(VariantContext vc) {
-        super.noteCurrentRecord(vc); // first, check for errors
-
-        // then, update mostUpstreamWritableLoc:
-        int mostUpstreamWritableIndex = vc.getStart() - maxCachingStartDistance;
-        this.mostUpstreamWritableLoc = Math.max(BEFORE_MOST_UPSTREAM_LOC, mostUpstreamWritableIndex);
-    }
-    
-    @Override
-    public boolean checkError() {
-        return false;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriterBase.java b/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriterBase.java
deleted file mode 100644
index 690a781..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/SortingVariantContextWriterBase.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-import java.io.Serializable;
-import java.util.Comparator;
-import java.util.Queue;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.PriorityBlockingQueue;
-
-/**
- * This class writes VCF files, allowing records to be passed in unsorted.
- * It also enforces that it is never passed records of the same chromosome with any other chromosome in between them.
- */
-abstract class SortingVariantContextWriterBase implements VariantContextWriter {
-
-    // The VCFWriter to which to actually write the sorted VCF records
-    private final VariantContextWriter innerWriter;
-
-    // the current queue of un-emitted records
-    private final Queue<VCFRecord> queue;
-
-    // The locus until which we are permitted to write out (inclusive)
-    protected Integer mostUpstreamWritableLoc;
-    protected static final int BEFORE_MOST_UPSTREAM_LOC = 0; // No real locus index is <= 0
-
-    // The set of chromosomes already passed over and to which it is forbidden to return
-    private final Set<String> finishedChromosomes;
-
-    // Should we call innerWriter.close() in close()
-    private final boolean takeOwnershipOfInner;
-
-    // --------------------------------------------------------------------------------
-    //
-    // Constructors
-    //
-    // --------------------------------------------------------------------------------
-
-    /**
-     * create a local-sorting VCF writer, given an inner VCF writer to write to
-     *
-     * @param innerWriter        the VCFWriter to write to
-     * @param takeOwnershipOfInner Should this Writer close innerWriter when it's done with it
-     */
-    public SortingVariantContextWriterBase(VariantContextWriter innerWriter, boolean takeOwnershipOfInner) {
-        this.innerWriter = innerWriter;
-        this.finishedChromosomes = new TreeSet<String>();
-        this.takeOwnershipOfInner = takeOwnershipOfInner;
-
-        // has to be PriorityBlockingQueue to be thread-safe
-        this.queue = new PriorityBlockingQueue<VCFRecord>(50, new VariantContextComparator());
-
-        this.mostUpstreamWritableLoc = BEFORE_MOST_UPSTREAM_LOC;
-    }
-
-    public SortingVariantContextWriterBase(VariantContextWriter innerWriter) {
-        this(innerWriter, false); // by default, don't own inner
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // public interface functions
-    //
-    // --------------------------------------------------------------------------------
-
-    @Override
-    public void writeHeader(VCFHeader header) {
-        innerWriter.writeHeader(header);
-    }
-
-    /**
-     * attempt to close the VCF file; we need to flush the queue first
-     */
-    @Override
-    public void close() {
-        stopWaitingToSort();
-
-        if (takeOwnershipOfInner)
-            innerWriter.close();
-    }
-
-
-    /**
-     * add a record to the file
-     *
-     * @param vc      the Variant Context object
-     */
-    @Override
-    public synchronized void add(VariantContext vc) {
-        /* Note that the code below does not prevent the successive add()-ing of: (chr1, 10), (chr20, 200), (chr15, 100)
-           since there is no implicit ordering of chromosomes:
-         */
-        VCFRecord firstRec = queue.peek();
-        if (firstRec != null && !vc.getContig().equals(firstRec.vc.getContig())) { // if we hit a new contig, flush the queue
-            if (finishedChromosomes.contains(vc.getContig()))
-                throw new IllegalArgumentException("Added a record at " + vc.getContig() + ":" + vc.getStart() + ", but already finished with chromosome" + vc.getContig());
-
-            finishedChromosomes.add(firstRec.vc.getContig());
-            stopWaitingToSort();
-        }
-
-        noteCurrentRecord(vc); // possibly overwritten
-
-        queue.add(new VCFRecord(vc));
-        emitSafeRecords();
-    }
-
-    /**
-     * Gets a string representation of this object.
-     * @return a string representation of this object
-     */
-    @Override
-    public String toString() {
-        return getClass().getName();
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // protected interface functions for subclasses to use
-    //
-    // --------------------------------------------------------------------------------
-
-    private synchronized void stopWaitingToSort() {
-        emitRecords(true);
-        mostUpstreamWritableLoc = BEFORE_MOST_UPSTREAM_LOC;
-    }
-
-    protected synchronized void emitSafeRecords() {
-        emitRecords(false);
-    }
-
-    protected void noteCurrentRecord(VariantContext vc) {
-        // did the user break the contract by giving a record too late?
-        if (mostUpstreamWritableLoc != null && vc.getStart() < mostUpstreamWritableLoc) // went too far back, since may have already written anything that is <= mostUpstreamWritableLoc
-            throw new IllegalArgumentException("Permitted to write any record upstream of position " + mostUpstreamWritableLoc + ", but a record at " + vc.getContig() + ":" + vc.getStart() + " was just added.");
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // private implementation functions
-    //
-    // --------------------------------------------------------------------------------
-
-    private synchronized void emitRecords(boolean emitUnsafe) {
-        while (!queue.isEmpty()) {
-            VCFRecord firstRec = queue.peek();
-
-            // No need to wait, waiting for nothing, or before what we're waiting for:
-            if (emitUnsafe || mostUpstreamWritableLoc == null || firstRec.vc.getStart() <= mostUpstreamWritableLoc) {
-                queue.poll();
-                innerWriter.add(firstRec.vc);
-            }
-            else {
-                break;
-            }
-        }
-    }
-
-    private static class VariantContextComparator implements Comparator<VCFRecord>, Serializable {
-        private static final long serialVersionUID = 1L;
-
-        public int compare(VCFRecord r1, VCFRecord r2) {
-            return r1.vc.getStart() - r2.vc.getStart();
-        }
-    }
-
-    private static class VCFRecord {
-        public VariantContext vc;
-
-        public VCFRecord(VariantContext vc) {
-            this.vc = vc;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/VCFWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/VCFWriter.java
deleted file mode 100644
index 71aef13..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/VCFWriter.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.index.IndexCreator;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFEncoder;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLine;
-import htsjdk.variant.vcf.VCFHeaderVersion;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-/**
- * this class writes VCF files
- */
-class VCFWriter extends IndexingVariantContextWriter {
-
-    private static final String VERSION_LINE =
-            VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_2.getFormatString() + "=" + VCFHeaderVersion.VCF4_2.getVersionString();
-
-	// Initialized when the header is written to the output stream
-	private VCFEncoder vcfEncoder = null;
-
-	// the VCF header we're storing
-	protected VCFHeader mHeader = null;
-
-	private final boolean allowMissingFieldsInHeader;
-
-	// should we write genotypes or just sites?
-	private final boolean doNotWriteGenotypes;
-
-    // should we always output a complete format record, even if we could drop trailing fields?
-    private final boolean writeFullFormatField;
-
-    /*
-     * The VCF writer uses an internal Writer, based by the ByteArrayOutputStream lineBuffer,
-     * to temp. buffer the header and per-site output before flushing the per line output
-     * in one go to the super.getOutputStream.  This results in high-performance, proper encoding,
-     * and allows us to avoid flushing explicitly the output stream getOutputStream, which
-     * allows us to properly compress vcfs in gz format without breaking indexing on the fly
-     * for uncompressed streams.
-     */
-    private static final int INITIAL_BUFFER_SIZE = 1024 * 16;
-    private final ByteArrayOutputStream lineBuffer = new ByteArrayOutputStream(INITIAL_BUFFER_SIZE);
-    /* Wrapping in a {@link BufferedWriter} avoids frequent conversions with individual writes to OutputStreamWriter. */
-    private final Writer writer = new BufferedWriter(new OutputStreamWriter(lineBuffer, VCFEncoder.VCF_CHARSET));
-
-    public VCFWriter(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                     final boolean enableOnTheFlyIndexing,
-                     final boolean doNotWriteGenotypes, final boolean allowMissingFieldsInHeader,
-                     final boolean writeFullFormatField) {
-        super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing);
-        this.doNotWriteGenotypes = doNotWriteGenotypes;
-        this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
-        this.writeFullFormatField = writeFullFormatField;
-    }
-
-    public VCFWriter(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
-                     final IndexCreator indexCreator, final boolean enableOnTheFlyIndexing,
-                     final boolean doNotWriteGenotypes, final boolean allowMissingFieldsInHeader,
-                     final boolean writeFullFormatField) {
-        super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing, indexCreator);
-        this.doNotWriteGenotypes = doNotWriteGenotypes;
-        this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
-        this.writeFullFormatField = writeFullFormatField;
-    }
-    // --------------------------------------------------------------------------------
-    //
-    // VCFWriter interface functions
-    //
-    // --------------------------------------------------------------------------------
-
-    /*
-     * Write String s to the internal buffered writer.
-     *
-     * writeAndResetBuffer() must be called to actually write the data to the true output stream.
-     *
-     * @param s the string to write
-     * @throws IOException
-     */
-    private void write(final String s) throws IOException {
-        writer.write(s);
-    }
-
-    /*
-     * Actually write the line buffer contents to the destination output stream. After calling this function
-     * the line buffer is reset so the contents of the buffer can be reused
-     */
-    private void writeAndResetBuffer() throws IOException {
-        writer.flush();
-        getOutputStream().write(lineBuffer.toByteArray());
-        lineBuffer.reset();
-    }
-
-    @Override
-    public void writeHeader(final VCFHeader header) {
-        // note we need to update the mHeader object after this call because they header
-        // may have genotypes trimmed out of it, if doNotWriteGenotypes is true
-        try {
-            this.mHeader = writeHeader(header, writer, doNotWriteGenotypes, getVersionLine(), getStreamName());
-            this.vcfEncoder = new VCFEncoder(this.mHeader, this.allowMissingFieldsInHeader, this.writeFullFormatField);
-            writeAndResetBuffer();
-
-        } catch ( IOException e ) {
-            throw new RuntimeIOException("Couldn't write file " + getStreamName(), e);
-        }
-    }
-
-    public static String getVersionLine() {
-        return VERSION_LINE;
-    }
-
-    public static VCFHeader writeHeader(VCFHeader header,
-                                        final Writer writer,
-                                        final boolean doNotWriteGenotypes,
-                                        final String versionLine,
-                                        final String streamNameForError) {
-        header = doNotWriteGenotypes ? new VCFHeader(header.getMetaDataInSortedOrder()) : header;
-        
-        try {
-            // the file format field needs to be written first
-            writer.write(versionLine + "\n");
-
-            for (final VCFHeaderLine line : header.getMetaDataInSortedOrder() ) {
-                if ( VCFHeaderVersion.isFormatString(line.getKey()) )
-                    continue;
-
-                writer.write(VCFHeader.METADATA_INDICATOR);
-                writer.write(line.toString());
-                writer.write("\n");
-            }
-
-            // write out the column line
-            writer.write(VCFHeader.HEADER_INDICATOR);
-            boolean isFirst = true;
-            for (final VCFHeader.HEADER_FIELDS field : header.getHeaderFields() ) {
-                if ( isFirst )
-                    isFirst = false; // don't write out a field separator
-                else
-                    writer.write(VCFConstants.FIELD_SEPARATOR);
-                writer.write(field.toString());
-            }
-
-            if ( header.hasGenotypingData() ) {
-                writer.write(VCFConstants.FIELD_SEPARATOR);
-                writer.write("FORMAT");
-                for (final String sample : header.getGenotypeSamples() ) {
-                    writer.write(VCFConstants.FIELD_SEPARATOR);
-                    writer.write(sample);
-                }
-            }
-
-            writer.write("\n");
-            writer.flush();  // necessary so that writing to an output stream will work
-        }
-        catch (IOException e) {
-            throw new RuntimeIOException("IOException writing the VCF header to " + streamNameForError, e);
-        }
-
-        return header;
-    }
-
-    /**
-     * attempt to close the VCF file
-     */
-    @Override
-    public void close() {
-        // try to close the vcf stream
-        try {
-            // TODO -- would it be useful to null out the line buffer so we don't have it around unnecessarily?
-            writer.close();
-        } catch (IOException e) {
-            throw new RuntimeIOException("Unable to close " + getStreamName(), e);
-        }
-
-        super.close();
-    }
-
-    /**
-     * Add a record to the file
-     */
-    @Override
-    public void add(final VariantContext context) {
-        try {
-            super.add(context);
-
-            if (this.doNotWriteGenotypes) write(this.vcfEncoder.encode(new VariantContextBuilder(context).noGenotypes().make()));
-            else write(this.vcfEncoder.encode(context));
-            write("\n");
-
-            writeAndResetBuffer();
-
-        } catch (IOException e) {
-            throw new RuntimeIOException("Unable to write the VCF object to " + getStreamName(), e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriter.java b/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriter.java
deleted file mode 100644
index 187ff17..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import java.io.Closeable;
-
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFHeader;
-
-/**
- * this class writes VCF files
- */
-public interface VariantContextWriter extends Closeable {
-
-    public void writeHeader(VCFHeader header);
-
-    /**
-     * attempt to close the VCF file
-     */
-    public void close();
-
-    /**
-     * @return true if the underlying stream is a java.io.PrintStream  and its checkError returned true, used for pipelines
-     */
-    public boolean checkError();
-    
-    public void add(VariantContext vc);
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilder.java b/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilder.java
deleted file mode 100644
index 56c8b8b..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilder.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
-* Copyright (c) 2014 The Broad Institute
-*
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Md5CalculatingOutputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.index.IndexCreator;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.index.tabix.TabixIndexCreator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.EnumSet;
-
-/*
- * Created with IntelliJ IDEA.
- * User: thibault
- * Date: 3/7/14
- * Time: 2:07 PM
- */
-/**
- * @author thibault
- * 
- * <p>
- * Provides methods for creating <code>VariantContextWriter</code>s using the Builder pattern.
- * Replaces <code>VariantContextWriterFactory</code>.
- * </p>
- * <p>
- * The caller must choose an output file or an output stream for the <code>VariantContextWriter</code> to write to.
- * When a file is chosen, the output stream is created implicitly based on Defaults and options passed to the builder.
- * When a stream is chosen, it is passed unchanged to the <code>VariantContextWriter</code>.
- * </p>
- * <p>
- * Example: Create a series of files with buffering and indexing on the fly.
- * Determine the appropriate file type based on filename.
- * </p>
-
-   <pre>
-   VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-       .setReferenceDictionary(refDict)
-       .setOption(Options.INDEX_ON_THE_FLY)
-       .setBuffer(8192);
- 
-   VariantContextWriter sample1_writer = builder
-       .setOutputFile("sample1.vcf")
-       .build();
-   VariantContextWriter sample2_writer = builder
-       .setOutputFile("sample2.bcf")
-       .build();
-   VariantContextWriter sample3_writer = builder
-       .setOutputFile("sample3.vcf.bgzf")
-       .build();
-   </pre>
-   
-   <p>
- * Example: Explicitly turn off buffering and explicitly set the file type
- * </p>
- * 
- * <pre>
-   VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-       .setReferenceDictionary(refDict)
-       .setOption(Options.INDEX_ON_THE_FLY)
-       .unsetBuffering();
- 
-   VariantContextWriter sample1_writer = builder
-       .setOutputFile("sample1.custom_extension")
-       .setOutputFileType(OutputType.VCF)
-       .build();
-   VariantContextWriter sample2_writer = builder
-       .setOutputFile("sample2.custom_extension")
-       .setOutputFileType(OutputType.BLOCK_COMPRESSED_VCF)
-       .build();
-   </pre>
- */
-public class VariantContextWriterBuilder {
-    public static final EnumSet<Options> DEFAULT_OPTIONS = EnumSet.of(Options.INDEX_ON_THE_FLY);
-    public static final EnumSet<Options> NO_OPTIONS = EnumSet.noneOf(Options.class);
-
-    public enum OutputType {
-        UNSPECIFIED,
-        VCF,
-        BCF,
-        BLOCK_COMPRESSED_VCF,
-        VCF_STREAM,
-        BCF_STREAM
-    }
-
-    public static final EnumSet<OutputType> FILE_TYPES = EnumSet.of(OutputType.VCF, OutputType.BCF, OutputType.BLOCK_COMPRESSED_VCF);
-    public static final EnumSet<OutputType> STREAM_TYPES = EnumSet.of(OutputType.VCF_STREAM, OutputType.BCF_STREAM);
-
-    private SAMSequenceDictionary refDict = null;
-    private OutputType outType = OutputType.UNSPECIFIED;
-    private File outFile = null;
-    private OutputStream outStream = null;
-    private IndexCreator idxCreator = null;
-    private int bufferSize = Defaults.BUFFER_SIZE;
-    private boolean createMD5 = Defaults.CREATE_MD5;
-    protected EnumSet<Options> options = DEFAULT_OPTIONS.clone();
-
-    /**
-     * Default constructor.  Adds <code>USE_ASYNC_IO</code> to the Options if it is present in Defaults.
-     */
-    public VariantContextWriterBuilder() {
-        if (Defaults.USE_ASYNC_IO_WRITE_FOR_TRIBBLE) {
-            options.add(Options.USE_ASYNC_IO);
-        }
-    }
-
-    /**
-     * Set the reference dictionary to be used by <code>VariantContextWriter</code>s created by this builder.
-     *
-     * @param refDict the reference dictionary
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setReferenceDictionary(final SAMSequenceDictionary refDict) {
-        this.refDict = refDict;
-        return this;
-    }
-
-    /**
-     * Set the output file for the next <code>VariantContextWriter</code> created by this builder.
-     * Determines file type implicitly from the filename.
-     *
-     * @param outFile the file the <code>VariantContextWriter</code> will write to
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOutputFile(final File outFile) {
-        this.outFile = outFile;
-        this.outStream = null;
-        this.outType = determineOutputTypeFromFile(outFile);
-        return this;
-    }
-
-    /**
-     * Set the output file for the next <code>VariantContextWriter</code> created by this builder.
-     * Determines file type implicitly from the filename.
-     *
-     * @param outFile the file the <code>VariantContextWriter</code> will write to
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOutputFile(final String outFile) {
-        return setOutputFile(new File(outFile));
-    }
-
-    /**
-     * Set the output file type for the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @param outType the type of file the <code>VariantContextWriter</code> will write to
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOutputFileType(final OutputType outType) {
-        if (!FILE_TYPES.contains(outType))
-            throw new IllegalArgumentException("Must choose a file type, not other output types.");
-
-        if (this.outFile == null || this.outStream != null)
-            throw new IllegalArgumentException("Cannot set a file type if the output is not to a file.");
-
-        this.outType = outType;
-        return this;
-    }
-
-    /**
-     * Set the output VCF stream for the next <code>VariantContextWriter</code> created by this builder.
-     * If buffered writing is desired, caller must provide some kind of buffered <code>OutputStream</code>.
-     *
-     * @param outStream the output stream to write to
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOutputVCFStream(final OutputStream outStream) {
-        this.outStream = outStream;
-        this.outFile = null;
-        this.outType = OutputType.VCF_STREAM;
-        return this;
-    }
-
-    /**
-     * Set the output BCF stream for the next <code>VariantContextWriter</code> created by this builder.
-     * If buffered writing is desired, caller must provide some kind of buffered <code>OutputStream</code>.
-     *
-     * @param outStream the output stream to write to
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOutputBCFStream(final OutputStream outStream) {
-        this.outStream = outStream;
-        this.outFile = null;
-        this.outType = OutputType.BCF_STREAM;
-        return this;
-    }
-
-    /**
-     * Set the output stream (VCF, by default) for the next <code>VariantContextWriter</code> created by this builder.
-     * If buffered writing is desired, caller must provide some kind of buffered <code>OutputStream</code>.
-     *
-     * @param outStream the output stream to write to
-     * @return this VariantContextWriterBuilder
-     */
-    public VariantContextWriterBuilder setOutputStream(final OutputStream outStream) {
-        return setOutputVCFStream(outStream);
-    }
-
-    /**
-     * Set an IndexCreator for the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @param idxCreator the <code>IndexCreator</code> to use
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setIndexCreator(final IndexCreator idxCreator) {
-        this.idxCreator = idxCreator;
-        return this;
-    }
-
-    /**
-     * Do not pass an <code>IndexCreator</code> to the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder clearIndexCreator() {
-        this.idxCreator = null;
-        return this;
-    }
-
-    /**
-     * Set a buffer size for the file output stream passed to the next <code>VariantContextWriter</code> created by this builder.
-     * Set to 0 for no buffering.
-     * Does not affect OutputStreams passed directly to <code>VariantContextWriterBuilder</code>.
-     *
-     * @param bufferSize the buffer size to use
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setBuffer(final int bufferSize) {
-        this.bufferSize = bufferSize;
-        return this;
-    }
-
-    /**
-     * Do not use buffering in the next <code>VariantContextWriter</code> created by this builder.
-     * Does not affect <code>OutputStream</code>s passed directly to <code>VariantContextWriterBuilder</code>.
-     *
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder unsetBuffering() {
-        this.bufferSize = 0;
-        return this;
-    }
-
-    /**
-     * Choose whether to also create an MD5 digest file for the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @param createMD5 boolean, <code>true</code> to create an MD5 digest
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setCreateMD5(final boolean createMD5) {
-        this.createMD5 = createMD5;
-        return this;
-    }
-
-    /**
-     * Create an MD5 digest file for the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setCreateMD5() {
-        return setCreateMD5(true);
-    }
-
-    /**
-     * Don't create an MD5 digest file for the next <code>VariantContextWriter</code> created by this builder.
-     *
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder unsetCreateMD5() {
-        return setCreateMD5(false);
-    }
-
-    /**
-     * Replace the set of <code>Options</code> for the <code>VariantContextWriterBuilder</code> with a new set.
-     *
-     * @param options the complete set of options to use
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOptions(final EnumSet<Options> options) {
-        this.options = options;
-        return this;
-    }
-
-    /**
-     * Add one option to the set of <code>Options</code> for the <code>VariantContextWriterBuilder</code>, if it's not already present.
-     *
-     * @param option the option to set
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder setOption(final Options option) {
-        this.options.add(option);
-        return this;
-    }
-
-    /**
-     * Remove one option from the set of <code>Options</code> for the <code>VariantContextWriterBuilder</code>, if it's present.
-     *
-     * @param option the option to unset
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder unsetOption(final Options option) {
-        this.options.remove(option);
-        return this;
-    }
-
-    /**
-     * Set or unset option depending on the boolean given
-     * @param option the option to modify
-     * @param setIt true to set the option, false to unset it.
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public VariantContextWriterBuilder modifyOption(final Options option, final boolean setIt) {
-        return (setIt) ? this.setOption(option) : this.unsetOption(option);
-    }
-
-    /**
-     * Add one option to the set of default <code>Options</code> that will be used as the initial set of options
-     * for all VariantContextWriterBuilders created after this call.
-     *
-     * @param option the option to set
-     */
-    public static void setDefaultOption(final Options option) {
-        VariantContextWriterBuilder.DEFAULT_OPTIONS.add(option);
-    }
-
-    /**
-     * Remove an option from the set of default <code>Options</code> that will be used as the initial set of options
-     * for all VariantContextWriterBuilders created after this call.
-     *
-     * @param option the option to unset
-     * @return this <code>VariantContextWriterBuilder</code>
-     */
-    public static void unsetDefaultOption(final Options option) {
-        VariantContextWriterBuilder.DEFAULT_OPTIONS.remove(option);
-    }
-
-    /**
-     * Remove all options from the set of <code>Options</code> for the <code>VariantContextWriterBuilder</code>.
-     *
-     * @return this VariantContextWriterBuilder
-     */
-    public VariantContextWriterBuilder clearOptions() {
-        this.options = NO_OPTIONS.clone();
-        return this;
-    }
-
-    /**
-     * Used for testing; tests if the option is set
-     * @param option the option to test
-     * @return true if the option is set, false otherwise.
-     */
-    boolean isOptionSet(final Options option) {
-        return this.options.contains(option);
-    }
-
-    /**
-     * Validate and build the <code>VariantContextWriter</code>.
-     *
-     * @return the <code>VariantContextWriter</code> as specified by previous method calls
-     * @throws RuntimeIOException if the writer is configured to write to a file, and the corresponding path does not exist.
-     * @throws IllegalArgumentException if no output file or stream is specified.
-     * @throws IllegalArgumentException if <code>Options.INDEX_ON_THE_FLY</code> is specified and no reference dictionary is provided.
-     * @throws IllegalArgumentException if <code>Options.INDEX_ON_THE_FLY</code> is specified and a stream output is specified.
-     */
-    public VariantContextWriter build() {
-        VariantContextWriter writer = null;
-
-        // don't allow FORCE_BCF to modify the outType state
-        OutputType typeToBuild = this.outType;
-
-        if (this.options.contains(Options.FORCE_BCF)) {
-            if (FILE_TYPES.contains(this.outType))
-                typeToBuild = OutputType.BCF;
-            else if (STREAM_TYPES.contains(this.outType))
-                typeToBuild = OutputType.BCF_STREAM;
-        }
-
-        OutputStream outStreamFromFile = this.outStream;
-        if (FILE_TYPES.contains(this.outType)) {
-            try {
-                outStreamFromFile = IOUtil.maybeBufferOutputStream(new FileOutputStream(outFile), bufferSize);
-            } catch (final FileNotFoundException e) {
-                throw new RuntimeIOException("File not found: " + outFile, e);
-            }
-
-            if (createMD5)
-                outStreamFromFile = new Md5CalculatingOutputStream(outStreamFromFile, new File(outFile.getAbsolutePath() + ".md5"));
-        }
-
-        switch (typeToBuild) {
-            case UNSPECIFIED:
-                throw new IllegalArgumentException("Must specify file or stream output type.");
-            case VCF:
-                if ((refDict == null) && (options.contains(Options.INDEX_ON_THE_FLY)))
-                    throw new IllegalArgumentException("A reference dictionary is required for creating Tribble indices on the fly");
-
-                writer = createVCFWriter(outFile, outStreamFromFile);
-                break;
-            case BLOCK_COMPRESSED_VCF:
-                if (refDict == null)
-                    idxCreator = new TabixIndexCreator(TabixFormat.VCF);
-                else
-                    idxCreator = new TabixIndexCreator(refDict, TabixFormat.VCF);
-
-                writer = createVCFWriter(outFile, new BlockCompressedOutputStream(outStreamFromFile, outFile));
-                break;
-            case BCF:
-                if ((refDict == null) && (options.contains(Options.INDEX_ON_THE_FLY)))
-                    throw new IllegalArgumentException("A reference dictionary is required for creating Tribble indices on the fly");
-
-                writer = createBCFWriter(outFile, outStreamFromFile);
-                break;
-            case VCF_STREAM:
-                if (options.contains(Options.INDEX_ON_THE_FLY))
-                    throw new IllegalArgumentException("VCF index creation not supported for stream output.");
-
-                writer = createVCFWriter(null, outStream);
-                break;
-            case BCF_STREAM:
-                if (options.contains(Options.INDEX_ON_THE_FLY))
-                    throw new IllegalArgumentException("BCF index creation not supported for stream output.");
-
-                writer = createBCFWriter(null, outStream);
-                break;
-        }
-
-        if (this.options.contains(Options.USE_ASYNC_IO))
-            writer = new AsyncVariantContextWriter(writer, AsyncVariantContextWriter.DEFAULT_QUEUE_SIZE);
-
-        return writer;
-     }
-
-    /**
-     * Attempts to determine the type of file/data to write based on the File path being
-     * written to. Will attempt to determine using the logical filename; if that fails it will
-     * attempt to resolve any symlinks and try again.  If that fails, and the output file exists
-     * but is neither a file or directory then VCF_STREAM is returned.
-     */
-    protected static OutputType determineOutputTypeFromFile(final File f) {
-        if (isBCF(f)) {
-            return OutputType.BCF;
-        } else if (isCompressedVCF(f)) {
-            return OutputType.BLOCK_COMPRESSED_VCF;
-        } else if (isVCF(f)) {
-            return OutputType.VCF;
-        }
-        else {
-            // See if we have a special file (device, named pipe, etc.)
-            final File canonical = new File(IOUtil.getFullCanonicalPath(f));
-            if (!canonical.equals(f)) {
-                return determineOutputTypeFromFile(canonical);
-            }
-            else if (f.exists() && !f.isFile() && !f.isDirectory()) {
-                return OutputType.VCF_STREAM;
-            } else {
-                return OutputType.UNSPECIFIED;
-            }
-        }
-    }
-
-    private static boolean isVCF(final File outFile) {
-        return outFile != null && outFile.getName().endsWith(".vcf");
-    }
-
-    private static boolean isBCF(final File outFile) {
-        return outFile != null && outFile.getName().endsWith(".bcf");
-    }
-
-    private static boolean isCompressedVCF(final File outFile) {
-        if (outFile == null)
-            return false;
-
-        return AbstractFeatureReader.hasBlockCompressedExtension(outFile);
-    }
-
-    private VariantContextWriter createVCFWriter(final File writerFile, final OutputStream writerStream) {
-        if (idxCreator == null) {
-            return new VCFWriter(writerFile, writerStream, refDict,
-                    options.contains(Options.INDEX_ON_THE_FLY),
-                    options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                    options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                    options.contains(Options.WRITE_FULL_FORMAT_FIELD));
-        }
-        else {
-            return new VCFWriter(writerFile, writerStream, refDict, idxCreator,
-                    options.contains(Options.INDEX_ON_THE_FLY),
-                    options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                    options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                    options.contains(Options.WRITE_FULL_FORMAT_FIELD));
-        }
-    }
-
-    private VariantContextWriter createBCFWriter(final File writerFile, final OutputStream writerStream) {
-        if (idxCreator == null) {
-            return new BCF2Writer(writerFile, writerStream, refDict,
-                    options.contains(Options.INDEX_ON_THE_FLY),
-                    options.contains(Options.DO_NOT_WRITE_GENOTYPES));
-        }
-        else {
-            return new BCF2Writer(writerFile, writerStream, refDict, idxCreator,
-                    options.contains(Options.INDEX_ON_THE_FLY),
-                    options.contains(Options.DO_NOT_WRITE_GENOTYPES));
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterFactory.java b/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterFactory.java
deleted file mode 100644
index e1e0026..0000000
--- a/src/main/java/htsjdk/variant/variantcontext/writer/VariantContextWriterFactory.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.index.IndexCreator;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.index.tabix.TabixIndexCreator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.EnumSet;
-
-/**
- * Factory methods to create VariantContext writers
- *
- * @author depristo
- * @since 5/12
- *
- * @deprecated Replaced by {@link VariantContextWriterBuilder}
- */
- at Deprecated
-public class VariantContextWriterFactory {
-
-    public static final EnumSet<Options> DEFAULT_OPTIONS = EnumSet.of(Options.INDEX_ON_THE_FLY);
-    public static final EnumSet<Options> NO_OPTIONS = EnumSet.noneOf(Options.class);
-
-    static {
-        if (Defaults.USE_ASYNC_IO_WRITE_FOR_TRIBBLE) {
-            DEFAULT_OPTIONS.add(Options.USE_ASYNC_IO);
-        }
-    }
-
-    private VariantContextWriterFactory() {}
-
-    public static VariantContextWriter create(final File location, final SAMSequenceDictionary refDict) {
-        return create(location, openOutputStream(location), refDict, DEFAULT_OPTIONS);
-    }
-
-    public static VariantContextWriter create(final File location, final SAMSequenceDictionary refDict, final EnumSet<Options> options) {
-        return create(location, openOutputStream(location), refDict, options);
-    }
-
-    /**
-     * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter create(final File location,
-                                              final OutputStream output,
-                                              final SAMSequenceDictionary refDict) {
-        return create(location, output, refDict, DEFAULT_OPTIONS);
-    }
-
-    /**
-     * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter create(final OutputStream output,
-                                              final SAMSequenceDictionary refDict,
-                                              final EnumSet<Options> options) {
-        return create(null, output, refDict, options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
-     *                 but does not control where the file is written
-     * @param output This is where the BCF is actually written. If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createBcf2(final File location,
-                                                  final OutputStream output,
-                                                  final SAMSequenceDictionary refDict,
-                                                  final EnumSet<Options> options) {
-        return maybeWrapWithAsyncWriter(new BCF2Writer(location, output, refDict,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES)), options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
-     *                 but does not control where the file is written
-     * @param output This is where the BCF is actually written.  If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createBcf2(final File location,
-                                                  final OutputStream output,
-                                                  final SAMSequenceDictionary refDict,
-                                                  final IndexCreator indexCreator,
-                                                  final EnumSet<Options> options) {
-        return maybeWrapWithAsyncWriter(new BCF2Writer(location, output, refDict, indexCreator,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES)), options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
-     *                 but does not control where the file is written
-     * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createVcf(final File location,
-                                                 final OutputStream output,
-                                                 final SAMSequenceDictionary refDict,
-                                                 final EnumSet<Options> options) {
-        return maybeWrapWithAsyncWriter(new VCFWriter(location, output, refDict,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                options.contains(Options.WRITE_FULL_FORMAT_FIELD)), options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
-     *                 but does not control where the file is written
-     * @param output This is where the VCF is actually written.  If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createVcf(final File location,
-                                                 final OutputStream output,
-                                                 final SAMSequenceDictionary refDict,
-                                                 final IndexCreator indexCreator,
-                                                 final EnumSet<Options> options) {
-        return maybeWrapWithAsyncWriter(new VCFWriter(location, output, refDict, indexCreator,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                options.contains(Options.WRITE_FULL_FORMAT_FIELD)), options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages,
-     *                 but does not control where the file is written
-     * @param output This is where the VCF is actually written.  If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createBlockCompressedVcf(final File location,
-                                                                final OutputStream output,
-                                                                final SAMSequenceDictionary refDict,
-                                                                final EnumSet<Options> options) {
-        final TabixIndexCreator indexCreator;
-        if (options.contains(Options.INDEX_ON_THE_FLY)) {
-            indexCreator = new TabixIndexCreator(refDict, TabixFormat.VCF);
-        } else {
-            indexCreator = null;
-        }
-        return maybeWrapWithAsyncWriter(new VCFWriter(location, BlockCompressedOutputStream.maybeBgzfWrapOutputStream(location, output),
-                refDict, indexCreator,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                options.contains(Options.WRITE_FULL_FORMAT_FIELD)), options);
-    }
-
-    /**
-     * @param location Note that this parameter is used to producing intelligent log messages,
-     *                 but does not control where the file is written
-     * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
-     *               some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter createBlockCompressedVcf(final File location,
-                                                                final OutputStream output,
-                                                                final SAMSequenceDictionary refDict,
-                                                                final IndexCreator indexCreator,
-                                                                final EnumSet<Options> options) {
-        return maybeWrapWithAsyncWriter(new VCFWriter(location, BlockCompressedOutputStream.maybeBgzfWrapOutputStream(location, output),
-                refDict, indexCreator,
-                options.contains(Options.INDEX_ON_THE_FLY),
-                options.contains(Options.DO_NOT_WRITE_GENOTYPES),
-                options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER),
-                options.contains(Options.WRITE_FULL_FORMAT_FIELD)), options);
-    }
-
-    public static VariantContextWriter create(final File location,
-        final OutputStream output,
-        final SAMSequenceDictionary refDict,
-        final EnumSet<Options> options) {
-
-        if (isBCFOutput(location, options)) {
-            return createBcf2(location, output, refDict, options);
-        } else if (isCompressedVcf(location)) {
-            return createBlockCompressedVcf(location, output, refDict, options);
-        } else {
-            return createVcf(location, output, refDict, options);
-        }
-    }
-
-    /**
-     * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
-     */
-    public static VariantContextWriter create(final File location,
-                                              final OutputStream output,
-                                              final SAMSequenceDictionary refDict,
-                                              final IndexCreator indexCreator,
-                                              final EnumSet<Options> options) {
-
-        if (isBCFOutput(location, options)) {
-            return createBcf2(location, output, refDict, indexCreator, options);
-        } else if (isCompressedVcf(location)) {
-            return createBlockCompressedVcf(location, output, refDict, indexCreator, options);
-        } else {
-            return createVcf(location, output, refDict, indexCreator, options);
-        }
-    }
-
-    private static VariantContextWriter maybeWrapWithAsyncWriter(final VariantContextWriter writer,
-                                                                 final EnumSet<Options> options) {
-        if (options.contains(Options.USE_ASYNC_IO)) {
-            return new AsyncVariantContextWriter(writer, AsyncVariantContextWriter.DEFAULT_QUEUE_SIZE);
-        }
-        else return writer;
-    }
-
-    /**
-     * Should we output a BCF file based solely on the name of the file at location?
-     *
-     * @param location
-     * @return
-     */
-    public static boolean isBCFOutput(final File location) {
-        return isBCFOutput(location, EnumSet.noneOf(Options.class));
-    }
-
-    public static boolean isBCFOutput(final File location, final EnumSet<Options> options) {
-        return options.contains(Options.FORCE_BCF) || (location != null && location.getName().contains(".bcf"));
-    }
-
-    public static boolean isCompressedVcf(final File location) {
-        if (location == null)
-            return false;
-
-        return AbstractFeatureReader.hasBlockCompressedExtension(location);
-    }
-
-    public static VariantContextWriter sortOnTheFly(final VariantContextWriter innerWriter, final int maxCachingStartDistance) {
-        return sortOnTheFly(innerWriter, maxCachingStartDistance, false);
-    }
-
-    public static VariantContextWriter sortOnTheFly(final VariantContextWriter innerWriter, final int maxCachingStartDistance, final boolean takeOwnershipOfInner) {
-        return new SortingVariantContextWriter(innerWriter, maxCachingStartDistance, takeOwnershipOfInner);
-    }
-
-    /**
-     * Returns a output stream writing to location, or throws an exception if this fails
-     * @param location
-     * @return
-     */
-    protected static OutputStream openOutputStream(final File location) {
-        try {
-            return IOUtil.maybeBufferOutputStream(new FileOutputStream(location));
-        } catch (final FileNotFoundException e) {
-            throw new RuntimeIOException(location + ": Unable to create VCF writer", e);
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/AbstractVCFCodec.java b/src/main/java/htsjdk/variant/vcf/AbstractVCFCodec.java
deleted file mode 100644
index 16857b4..0000000
--- a/src/main/java/htsjdk/variant/vcf/AbstractVCFCodec.java
+++ /dev/null
@@ -1,791 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.util.BlockCompressedInputStream;
-import htsjdk.tribble.AsciiFeatureCodec;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.NameAwareCodec;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.GenotypeLikelihoods;
-import htsjdk.variant.variantcontext.LazyGenotypesContext;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.zip.GZIPInputStream;
-
-
-public abstract class AbstractVCFCodec extends AsciiFeatureCodec<VariantContext> implements NameAwareCodec {
-    public final static int MAX_ALLELE_SIZE_BEFORE_WARNING = (int)Math.pow(2, 20);
-
-    protected final static int NUM_STANDARD_FIELDS = 8;  // INFO is the 8th column
-
-    // we have to store the list of strings that make up the header until they're needed
-    protected VCFHeader header = null;
-    protected VCFHeaderVersion version = null;
-
-    // a mapping of the allele
-    protected Map<String, List<Allele>> alleleMap = new HashMap<String, List<Allele>>(3);
-    
-    // for performance testing purposes
-    public static boolean validate = true;
-
-    // a key optimization -- we need a per thread string parts array, so we don't allocate a big array over and over
-    // todo: make this thread safe?
-    protected String[] parts = null;
-    protected String[] genotypeParts = null;
-    protected final String[] locParts = new String[6];
-
-    // for performance we cache the hashmap of filter encodings for quick lookup
-    protected HashMap<String,List<String>> filterHash = new HashMap<String,List<String>>();
-
-    // we store a name to give to each of the variant contexts we emit
-    protected String name = "Unknown";
-
-    protected int lineNo = 0;
-
-    protected Map<String, String> stringCache = new HashMap<String, String>();
-
-    protected boolean warnedAboutNoEqualsForNonFlag = false;
-
-    /**
-     * If true, then we'll magically fix up VCF headers on the fly when we read them in
-     */
-    protected boolean doOnTheFlyModifications = true;
-
-    /**
-     * If non-null, we will replace the sample name read from the VCF header with this sample name. This feature works
-     * only for single-sample VCFs.
-     */
-    protected String remappedSampleName = null;
-
-    protected AbstractVCFCodec() {
-        super(VariantContext.class);
-    }
-
-    /**
-     * Creates a LazyParser for a LazyGenotypesContext to use to decode
-     * our genotypes only when necessary.  We do this instead of eagarly
-     * decoding the genotypes just to turn around and reencode in the frequent
-     * case where we don't actually want to manipulate the genotypes
-     */
-    class LazyVCFGenotypesParser implements LazyGenotypesContext.LazyParser {
-        final List<Allele> alleles;
-        final String contig;
-        final int start;
-
-        LazyVCFGenotypesParser(final List<Allele> alleles, final String contig, final int start) {
-            this.alleles = alleles;
-            this.contig = contig;
-            this.start = start;
-        }
-
-        @Override
-        public LazyGenotypesContext.LazyData parse(final Object data) {
-            //System.out.printf("Loading genotypes... %s:%d%n", contig, start);
-            return createGenotypeMap((String) data, alleles, contig, start);
-        }
-    }
-
-    /**
-     * parse the filter string, first checking to see if we already have parsed it in a previous attempt
-     * @param filterString the string to parse
-     * @return a set of the filters applied
-     */
-    protected abstract List<String> parseFilters(String filterString);
-
-    /**
-     * create a VCF header from a set of header record lines
-     *
-     * @param headerStrings a list of strings that represent all the ## and # entries
-     * @return a VCFHeader object
-     */
-    protected VCFHeader parseHeaderFromLines( final List<String> headerStrings, final VCFHeaderVersion version ) {
-        this.version = version;
-
-        Set<VCFHeaderLine> metaData = new LinkedHashSet<VCFHeaderLine>();
-        Set<String> sampleNames = new LinkedHashSet<String>();
-        int contigCounter = 0;
-        // iterate over all the passed in strings
-        for ( String str : headerStrings ) {
-            if ( !str.startsWith(VCFHeader.METADATA_INDICATOR) ) {
-                String[] strings = str.substring(1).split(VCFConstants.FIELD_SEPARATOR);
-                if ( strings.length < VCFHeader.HEADER_FIELDS.values().length )
-                    throw new TribbleException.InvalidHeader("there are not enough columns present in the header line: " + str);
-
-                int arrayIndex = 0;
-                for (VCFHeader.HEADER_FIELDS field : VCFHeader.HEADER_FIELDS.values()) {
-                    try {
-                        if (field != VCFHeader.HEADER_FIELDS.valueOf(strings[arrayIndex]))
-                            throw new TribbleException.InvalidHeader("we were expecting column name '" + field + "' but we saw '" + strings[arrayIndex] + "'");
-                    } catch (IllegalArgumentException e) {
-                        throw new TribbleException.InvalidHeader("unknown column name '" + strings[arrayIndex] + "'; it does not match a legal column header name.");
-                    }
-                    arrayIndex++;
-                }
-
-                boolean sawFormatTag = false;
-                if ( arrayIndex < strings.length ) {
-                    if ( !strings[arrayIndex].equals("FORMAT") )
-                        throw new TribbleException.InvalidHeader("we were expecting column name 'FORMAT' but we saw '" + strings[arrayIndex] + "'");
-                    sawFormatTag = true;
-                    arrayIndex++;
-                }
-
-                while ( arrayIndex < strings.length )
-                    sampleNames.add(strings[arrayIndex++]);
-
-                if ( sawFormatTag && sampleNames.isEmpty())
-                    throw new TribbleException.InvalidHeader("The FORMAT field was provided but there is no genotype/sample data");
-
-                // If we're performing sample name remapping and there is exactly one sample specified in the header, replace
-                // it with the remappedSampleName. Throw an error if there are 0 or multiple samples and remapping was requested
-                // for this file.
-                if ( remappedSampleName != null ) {
-                    // We currently only support on-the-fly sample name remapping for single-sample VCFs
-                    if ( sampleNames.isEmpty() || sampleNames.size() > 1 ) {
-                        throw new TribbleException(String.format("Cannot remap sample name to %s because %s samples are specified in the VCF header, and on-the-fly sample name remapping is only supported for single-sample VCFs",
-                                                                 remappedSampleName, sampleNames.isEmpty() ? "no" : "multiple"));
-                    }
-
-                    sampleNames.clear();
-                    sampleNames.add(remappedSampleName);
-                }
-
-            } else {
-                if ( str.startsWith(VCFConstants.INFO_HEADER_START) ) {
-                    final VCFInfoHeaderLine info = new VCFInfoHeaderLine(str.substring(7), version);
-                    metaData.add(info);
-                } else if ( str.startsWith(VCFConstants.FILTER_HEADER_START) ) {
-                    final VCFFilterHeaderLine filter = new VCFFilterHeaderLine(str.substring(9), version);
-                    metaData.add(filter);
-                } else if ( str.startsWith(VCFConstants.FORMAT_HEADER_START) ) {
-                    final VCFFormatHeaderLine format = new VCFFormatHeaderLine(str.substring(9), version);
-                    metaData.add(format);
-                } else if ( str.startsWith(VCFConstants.CONTIG_HEADER_START) ) {
-                    final VCFContigHeaderLine contig = new VCFContigHeaderLine(str.substring(9), version, VCFConstants.CONTIG_HEADER_START.substring(2), contigCounter++);
-                    metaData.add(contig);
-                } else if ( str.startsWith(VCFConstants.ALT_HEADER_START) ) {
-                    final VCFSimpleHeaderLine alt = new VCFSimpleHeaderLine(str.substring(6), version, VCFConstants.ALT_HEADER_START.substring(2), Arrays.asList("ID", "Description"));
-                    metaData.add(alt);
-                } else {
-                    int equals = str.indexOf('=');
-                    if ( equals != -1 )
-                        metaData.add(new VCFHeaderLine(str.substring(2, equals), str.substring(equals+1)));
-                }
-            }
-        }
-
-        this.header = new VCFHeader(metaData, sampleNames);
-        if ( doOnTheFlyModifications )
-            this.header = VCFStandardHeaderLines.repairStandardHeaderLines(this.header);
-        return this.header;
-    }
-
-	/**
-	 * Explicitly set the VCFHeader on this codec. This will overwrite the header read from the file
-	 * and the version state stored in this instance; conversely, reading the header from a file will
-	 * overwrite whatever is set here. The returned header may not be identical to the header argument
-	 * since the header lines may be "repaired" (i.e., rewritten) if doOnTheFlyModifications is set.
-	 */
-	public VCFHeader setVCFHeader(final VCFHeader header, final VCFHeaderVersion version) {
-		this.version = version;
-
-		if (this.doOnTheFlyModifications) this.header = VCFStandardHeaderLines.repairStandardHeaderLines(header);
-		else this.header = header;
-
-		return this.header;
-	}
-
-    /**
-     * the fast decode function
-     * @param line the line of text for the record
-     * @return a feature, (not guaranteed complete) that has the correct start and stop
-     */
-    public Feature decodeLoc(String line) {
-        return decodeLine(line, false);
-    }
-
-    /**
-     * decode the line into a feature (VariantContext)
-     * @param line the line
-     * @return a VariantContext
-     */
-    public VariantContext decode(String line) {
-        return decodeLine(line, true);
-    }
-
-    private VariantContext decodeLine(final String line, final boolean includeGenotypes) {
-        // the same line reader is not used for parsing the header and parsing lines, if we see a #, we've seen a header line
-        if (line.startsWith(VCFHeader.HEADER_INDICATOR)) return null;
-
-        // our header cannot be null, we need the genotype sample names and counts
-        if (header == null) throw new TribbleException("VCF Header cannot be null when decoding a record");
-
-        if (parts == null)
-            parts = new String[Math.min(header.getColumnCount(), NUM_STANDARD_FIELDS+1)];
-
-        final int nParts = ParsingUtils.split(line, parts, VCFConstants.FIELD_SEPARATOR_CHAR, true);
-
-        // if we have don't have a header, or we have a header with no genotyping data check that we
-        // have eight columns.  Otherwise check that we have nine (normal columns + genotyping data)
-        if (( (header == null || !header.hasGenotypingData()) && nParts != NUM_STANDARD_FIELDS) ||
-                (header != null && header.hasGenotypingData() && nParts != (NUM_STANDARD_FIELDS + 1)) )
-            throw new TribbleException("Line " + lineNo + ": there aren't enough columns for line " + line + " (we expected " + (header == null ? NUM_STANDARD_FIELDS : NUM_STANDARD_FIELDS + 1) +
-                    " tokens, and saw " + nParts + " )");
-
-        return parseVCFLine(parts, includeGenotypes);
-    }
-
-    /**
-     * parse out the VCF line
-     *
-     * @param parts the parts split up
-     * @return a variant context object
-     */
-    private VariantContext parseVCFLine(final String[] parts, final boolean includeGenotypes) {
-        VariantContextBuilder builder = new VariantContextBuilder();
-        builder.source(getName());
-
-        // increment the line count
-        // TODO -- because of the way the engine utilizes Tribble, we can parse a line multiple times (especially when
-        // TODO --   the first record is far along the contig) and the line counter can get out of sync
-        lineNo++;
-
-        // parse out the required fields
-        final String chr = getCachedString(parts[0]);
-        builder.chr(chr);
-        int pos = -1;
-        try {
-            pos = Integer.valueOf(parts[1]);
-        } catch (NumberFormatException e) {
-            generateException(parts[1] + " is not a valid start position in the VCF format");
-        }
-        builder.start(pos);
-
-        if ( parts[2].isEmpty() )
-            generateException("The VCF specification requires a valid ID field");
-        else if ( parts[2].equals(VCFConstants.EMPTY_ID_FIELD) )
-            builder.noID();
-        else
-            builder.id(parts[2]);
-
-        final String ref = getCachedString(parts[3].toUpperCase());
-        final String alts = getCachedString(parts[4]);
-        builder.log10PError(parseQual(parts[5]));
-
-        final List<String> filters = parseFilters(getCachedString(parts[6]));
-        if ( filters != null ) builder.filters(new HashSet<String>(filters));
-        final Map<String, Object> attrs = parseInfo(parts[7]);
-        builder.attributes(attrs);
-
-        if ( attrs.containsKey(VCFConstants.END_KEY) ) {
-            // update stop with the end key if provided
-            try {
-                builder.stop(Integer.valueOf(attrs.get(VCFConstants.END_KEY).toString()));
-            } catch (Exception e) {
-                generateException("the END value in the INFO field is not valid");
-            }
-        } else {
-            builder.stop(pos + ref.length() - 1);
-        }
-
-        // get our alleles, filters, and setup an attribute map
-        final List<Allele> alleles = parseAlleles(ref, alts, lineNo);
-        builder.alleles(alleles);
-
-        // do we have genotyping data
-        if (parts.length > NUM_STANDARD_FIELDS && includeGenotypes) {
-            final LazyGenotypesContext.LazyParser lazyParser = new LazyVCFGenotypesParser(alleles, chr, pos);
-            final int nGenotypes = header.getNGenotypeSamples();
-            LazyGenotypesContext lazy = new LazyGenotypesContext(lazyParser, parts[8], nGenotypes);
-
-            // did we resort the sample names?  If so, we need to load the genotype data
-            if ( !header.samplesWereAlreadySorted() )
-                lazy.decode();
-
-            builder.genotypesNoValidation(lazy);
-        }
-
-        VariantContext vc = null;
-        try {
-            vc = builder.make();
-        } catch (Exception e) {
-            generateException(e.getMessage());
-        }
-
-        return vc;
-    }
-
-    /**
-     * get the name of this codec
-     * @return our set name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * set the name of this codec
-     * @param name new name
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Return a cached copy of the supplied string.
-     *
-     * @param str string
-     * @return interned string
-     */
-    protected String getCachedString(String str) {
-        String internedString = stringCache.get(str);
-        if ( internedString == null ) {
-            internedString = new String(str);
-            stringCache.put(internedString, internedString);
-        }
-        return internedString;
-    }
-
-    /**
-     * parse out the info fields
-     * @param infoField the fields
-     * @return a mapping of keys to objects
-     */
-    private Map<String, Object> parseInfo(String infoField) {
-        Map<String, Object> attributes = new HashMap<String, Object>();
-
-        if ( infoField.isEmpty() )
-            generateException("The VCF specification requires a valid (non-zero length) info field");
-
-        if ( !infoField.equals(VCFConstants.EMPTY_INFO_FIELD) ) {
-            if ( infoField.indexOf('\t') != -1 || infoField.indexOf(' ') != -1 )
-                generateException("The VCF specification does not allow for whitespace in the INFO field. Offending field value was \"" + infoField + "\"");
-
-            List<String> infoFields = ParsingUtils.split(infoField, VCFConstants.INFO_FIELD_SEPARATOR_CHAR);
-            for (int i = 0; i < infoFields.size(); i++) {
-                String key;
-                Object value;
-
-                int eqI = infoFields.get(i).indexOf("=");
-                if ( eqI != -1 ) {
-                    key = infoFields.get(i).substring(0, eqI);
-                    String valueString = infoFields.get(i).substring(eqI + 1);
-
-                    // split on the INFO field separator
-                    List<String> infoValueSplit = ParsingUtils.split(valueString, VCFConstants.INFO_FIELD_ARRAY_SEPARATOR_CHAR);
-                    if ( infoValueSplit.size() == 1 ) {
-                        value = infoValueSplit.get(0);
-                        final VCFInfoHeaderLine headerLine = header.getInfoHeaderLine(key);
-                        if ( headerLine != null && headerLine.getType() == VCFHeaderLineType.Flag && value.equals("0") ) {
-                            // deal with the case where a flag field has =0, such as DB=0, by skipping the add
-                            continue;
-                        }
-                    } else {
-                        value = infoValueSplit;
-                    }
-                } else {
-                    key = infoFields.get(i);
-                    final VCFInfoHeaderLine headerLine = header.getInfoHeaderLine(key);
-                    if ( headerLine != null && headerLine.getType() != VCFHeaderLineType.Flag ) {
-                        if ( GeneralUtils.DEBUG_MODE_ENABLED && ! warnedAboutNoEqualsForNonFlag ) {
-                            System.err.println("Found info key " + key + " without a = value, but the header says the field is of type "
-                                               + headerLine.getType() + " but this construct is only value for FLAG type fields");
-                            warnedAboutNoEqualsForNonFlag = true;
-                        }
-
-                        value = VCFConstants.MISSING_VALUE_v4;
-                    } else {
-                        value = true;
-                    }
-                }
-
-                // this line ensures that key/value pairs that look like key=; are parsed correctly as MISSING
-                if ( "".equals(value) ) value = VCFConstants.MISSING_VALUE_v4;
-
-                attributes.put(key, value);
-            }
-        }
-
-        return attributes;
-    }
-
-    /**
-     * create a an allele from an index and an array of alleles
-     * @param index the index
-     * @param alleles the alleles
-     * @return an Allele
-     */
-    protected static Allele oneAllele(String index, List<Allele> alleles) {
-        if ( index.equals(VCFConstants.EMPTY_ALLELE) )
-            return Allele.NO_CALL;
-        final int i;
-        try {
-            i = Integer.valueOf(index);
-        } catch ( NumberFormatException e ) {
-            throw new TribbleException.InternalCodecException("The following invalid GT allele index was encountered in the file: " + index);
-        }
-        if ( i >= alleles.size() )
-            throw new TribbleException.InternalCodecException("The allele with index " + index + " is not defined in the REF/ALT columns in the record");
-        return alleles.get(i);
-    }
-
-
-    /**
-     * parse genotype alleles from the genotype string
-     * @param GT         GT string
-     * @param alleles    list of possible alleles
-     * @param cache      cache of alleles for GT
-     * @return the allele list for the GT string
-     */
-    protected static List<Allele> parseGenotypeAlleles(String GT, List<Allele> alleles, Map<String, List<Allele>> cache) {
-        // cache results [since they are immutable] and return a single object for each genotype
-        List<Allele> GTAlleles = cache.get(GT);
-
-        if ( GTAlleles == null ) {
-            StringTokenizer st = new StringTokenizer(GT, VCFConstants.PHASING_TOKENS);
-            GTAlleles = new ArrayList<Allele>(st.countTokens());
-            while ( st.hasMoreTokens() ) {
-                String genotype = st.nextToken();
-                GTAlleles.add(oneAllele(genotype, alleles));
-            }
-            cache.put(GT, GTAlleles);
-        }
-
-        return GTAlleles;
-    }
-
-    /**
-     * parse out the qual value
-     * @param qualString the quality string
-     * @return return a double
-     */
-    protected static Double parseQual(String qualString) {
-        // if we're the VCF 4 missing char, return immediately
-        if ( qualString.equals(VCFConstants.MISSING_VALUE_v4))
-            return VariantContext.NO_LOG10_PERROR;
-
-        Double val = Double.valueOf(qualString);
-
-        // check to see if they encoded the missing qual score in VCF 3 style, with either the -1 or -1.0.  check for val < 0 to save some CPU cycles
-        if ((val < 0) && (Math.abs(val - VCFConstants.MISSING_QUALITY_v3_DOUBLE) < VCFConstants.VCF_ENCODING_EPSILON))
-            return VariantContext.NO_LOG10_PERROR;
-
-        // scale and return the value
-        return val / -10.0;
-    }
-
-    /**
-     * parse out the alleles
-     * @param ref the reference base
-     * @param alts a string of alternates to break into alleles
-     * @param lineNo  the line number for this record
-     * @return a list of alleles, and a pair of the shortest and longest sequence
-     */
-    protected static List<Allele> parseAlleles(String ref, String alts, int lineNo) {
-        List<Allele> alleles = new ArrayList<Allele>(2); // we are almost always biallelic
-        // ref
-        checkAllele(ref, true, lineNo);
-        Allele refAllele = Allele.create(ref, true);
-        alleles.add(refAllele);
-
-        if ( alts.indexOf(',') == -1 ) // only 1 alternatives, don't call string split
-            parseSingleAltAllele(alleles, alts, lineNo);
-        else
-            for ( String alt : alts.split(",") )
-                parseSingleAltAllele(alleles, alt, lineNo);
-
-        return alleles;
-    }
-
-    /**
-     * check to make sure the allele is an acceptable allele
-     * @param allele the allele to check
-     * @param isRef are we the reference allele?
-     * @param lineNo  the line number for this record
-     */
-    private static void checkAllele(String allele, boolean isRef, int lineNo) {
-        if ( allele == null || allele.isEmpty() )
-            generateException(generateExceptionTextForBadAlleleBases(""), lineNo);
-
-        if ( GeneralUtils.DEBUG_MODE_ENABLED && MAX_ALLELE_SIZE_BEFORE_WARNING != -1 && allele.length() > MAX_ALLELE_SIZE_BEFORE_WARNING ) {
-            System.err.println(String.format("Allele detected with length %d exceeding max size %d at approximately line %d, likely resulting in degraded VCF processing performance", allele.length(), MAX_ALLELE_SIZE_BEFORE_WARNING, lineNo));
-        }
-
-        if ( isSymbolicAllele(allele) ) {
-            if ( isRef ) {
-                generateException("Symbolic alleles not allowed as reference allele: " + allele, lineNo);
-            }
-        } else {
-            // check for VCF3 insertions or deletions
-            if ( (allele.charAt(0) == VCFConstants.DELETION_ALLELE_v3) || (allele.charAt(0) == VCFConstants.INSERTION_ALLELE_v3) )
-                generateException("Insertions/Deletions are not supported when reading 3.x VCF's. Please" +
-                        " convert your file to VCF4 using VCFTools, available at http://vcftools.sourceforge.net/index.html", lineNo);
-
-            if (!Allele.acceptableAlleleBases(allele, isRef))
-                generateException(generateExceptionTextForBadAlleleBases(allele), lineNo);
-
-            if ( isRef && allele.equals(VCFConstants.EMPTY_ALLELE) )
-                generateException("The reference allele cannot be missing", lineNo);
-        }
-    }
-
-    /**
-     * Generates the exception text for the case where the allele string contains unacceptable bases.
-     *
-     * @param allele   non-null allele string
-     * @return non-null exception text string
-     */
-    private static String generateExceptionTextForBadAlleleBases(final String allele) {
-        if ( allele.isEmpty() )
-            return "empty alleles are not permitted in VCF records";
-        if ( allele.contains("[") || allele.contains("]") || allele.contains(":") || allele.contains(".") )
-            return "VCF support for complex rearrangements with breakends has not yet been implemented";
-        return "unparsable vcf record with allele " + allele;
-    }
-
-    /**
-     * return true if this is a symbolic allele (e.g. <SOMETAG>) or
-     * structural variation breakend (with [ or ]), otherwise false
-     * @param allele the allele to check
-     * @return true if the allele is a symbolic allele, otherwise false
-     */
-    private static boolean isSymbolicAllele(String allele) {
-        return (allele != null && allele.length() > 2 &&
-                ((allele.startsWith("<") && allele.endsWith(">")) ||
-                        (allele.contains("[") || allele.contains("]"))));
-    }
-
-    /**
-     * parse a single allele, given the allele list
-     * @param alleles the alleles available
-     * @param alt the allele to parse
-     * @param lineNo  the line number for this record
-     */
-    private static void parseSingleAltAllele(List<Allele> alleles, String alt, int lineNo) {
-        checkAllele(alt, false, lineNo);
-
-        Allele allele = Allele.create(alt, false);
-        if ( ! allele.isNoCall() )
-            alleles.add(allele);
-    }
-
-    public static boolean canDecodeFile(final String potentialInput, final String MAGIC_HEADER_LINE) {
-        try {
-            //isVCFStream closes the stream that's passed in
-            return isVCFStream(new FileInputStream(potentialInput), MAGIC_HEADER_LINE) ||
-                    isVCFStream(new GZIPInputStream(new FileInputStream(potentialInput)), MAGIC_HEADER_LINE) ||
-                    isVCFStream(new BlockCompressedInputStream(new FileInputStream(potentialInput)), MAGIC_HEADER_LINE);
-        } catch ( FileNotFoundException e ) {
-            return false;
-        } catch ( IOException e ) {
-            return false;
-        }
-    }
-
-    private static boolean isVCFStream(final InputStream stream, final String MAGIC_HEADER_LINE) {
-        try {
-            byte[] buff = new byte[MAGIC_HEADER_LINE.length()];
-            int nread = stream.read(buff, 0, MAGIC_HEADER_LINE.length());
-            boolean eq = Arrays.equals(buff, MAGIC_HEADER_LINE.getBytes());
-            return eq;
-        } catch ( IOException e ) {
-            return false;
-        } catch ( RuntimeException e ) {
-            return false;
-        } finally {
-            try { stream.close(); } catch ( IOException e ) {}
-        }
-    }
-
-
-    /**
-     * create a genotype map
-     *
-     * @param str the string
-     * @param alleles the list of alleles
-     * @return a mapping of sample name to genotype object
-     */
-    public LazyGenotypesContext.LazyData createGenotypeMap(final String str,
-                                                              final List<Allele> alleles,
-                                                              final String chr,
-                                                              final int pos) {
-        if (genotypeParts == null)
-            genotypeParts = new String[header.getColumnCount() - NUM_STANDARD_FIELDS];
-
-        int nParts = ParsingUtils.split(str, genotypeParts, VCFConstants.FIELD_SEPARATOR_CHAR);
-        if ( nParts != genotypeParts.length )
-            generateException("there are " + (nParts-1) + " genotypes while the header requires that " + (genotypeParts.length-1) + " genotypes be present for all records at " + chr + ":" + pos, lineNo);
-
-        ArrayList<Genotype> genotypes = new ArrayList<Genotype>(nParts);
-
-        // get the format keys
-        List<String> genotypeKeys = ParsingUtils.split(genotypeParts[0], VCFConstants.GENOTYPE_FIELD_SEPARATOR_CHAR);
-
-        // cycle through the sample names
-        Iterator<String> sampleNameIterator = header.getGenotypeSamples().iterator();
-
-        // clear out our allele mapping
-        alleleMap.clear();
-
-        // cycle through the genotype strings
-        for (int genotypeOffset = 1; genotypeOffset < nParts; genotypeOffset++) {
-            List<String> genotypeValues = ParsingUtils.split(genotypeParts[genotypeOffset], VCFConstants.GENOTYPE_FIELD_SEPARATOR_CHAR);
-
-            final String sampleName = sampleNameIterator.next();
-            final GenotypeBuilder gb = new GenotypeBuilder(sampleName);
-
-            // check to see if the value list is longer than the key list, which is a problem
-            if (genotypeKeys.size() < genotypeValues.size())
-                generateException("There are too many keys for the sample " + sampleName + ", keys = " + parts[8] + ", values = " + parts[genotypeOffset]);
-
-            int genotypeAlleleLocation = -1;
-            if (!genotypeKeys.isEmpty()) {
-                gb.maxAttributes(genotypeKeys.size() - 1);
-
-                for (int i = 0; i < genotypeKeys.size(); i++) {
-                    final String gtKey = genotypeKeys.get(i);
-                    boolean missing = i >= genotypeValues.size();
-
-                    // todo -- all of these on the fly parsing of the missing value should be static constants
-                    if (gtKey.equals(VCFConstants.GENOTYPE_KEY)) {
-                        genotypeAlleleLocation = i;
-                    } else if ( missing ) {
-                        // if its truly missing (there no provided value) skip adding it to the attributes
-                    } else if (gtKey.equals(VCFConstants.GENOTYPE_FILTER_KEY)) {
-                        final List<String> filters = parseFilters(getCachedString(genotypeValues.get(i)));
-                        if ( filters != null ) gb.filters(filters);
-                    } else if ( genotypeValues.get(i).equals(VCFConstants.MISSING_VALUE_v4) ) {
-                        // don't add missing values to the map
-                    } else {
-                        if (gtKey.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
-                            if ( genotypeValues.get(i).equals(VCFConstants.MISSING_GENOTYPE_QUALITY_v3) )
-                                gb.noGQ();
-                            else
-                                gb.GQ((int)Math.round(Double.valueOf(genotypeValues.get(i))));
-                        } else if (gtKey.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
-                            gb.AD(decodeInts(genotypeValues.get(i)));
-                        } else if (gtKey.equals(VCFConstants.GENOTYPE_PL_KEY)) {
-                            gb.PL(decodeInts(genotypeValues.get(i)));
-                        } else if (gtKey.equals(VCFConstants.GENOTYPE_LIKELIHOODS_KEY)) {
-                            gb.PL(GenotypeLikelihoods.fromGLField(genotypeValues.get(i)).getAsPLs());
-                        } else if (gtKey.equals(VCFConstants.DEPTH_KEY)) {
-                            gb.DP(Integer.valueOf(genotypeValues.get(i)));
-                        } else {
-                            gb.attribute(gtKey, genotypeValues.get(i));
-                        }
-                    }
-                }
-            }
-
-            // check to make sure we found a genotype field if our version is less than 4.1 file
-            if ( ! version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_1) && genotypeAlleleLocation == -1 )
-                generateException("Unable to find the GT field for the record; the GT field is required before VCF4.1");
-            if ( genotypeAlleleLocation > 0 )
-                generateException("Saw GT field at position " + genotypeAlleleLocation + ", but it must be at the first position for genotypes when present");
-
-            final List<Allele> GTalleles = (genotypeAlleleLocation == -1 ? new ArrayList<Allele>(0) : parseGenotypeAlleles(genotypeValues.get(genotypeAlleleLocation), alleles, alleleMap));
-            gb.alleles(GTalleles);
-            gb.phased(genotypeAlleleLocation != -1 && genotypeValues.get(genotypeAlleleLocation).indexOf(VCFConstants.PHASED) != -1);
-
-            // add it to the list
-            try {
-                genotypes.add(gb.make());
-            } catch (TribbleException e) {
-                throw new TribbleException.InternalCodecException(e.getMessage() + ", at position " + chr+":"+pos);
-            }
-        }
-
-        return new LazyGenotypesContext.LazyData(genotypes, header.getSampleNamesInOrder(), header.getSampleNameToOffset());
-    }
-
-    private static final int[] decodeInts(final String string) {
-        List<String> split = ParsingUtils.split(string, ',');
-        int [] values = new int[split.size()];
-        try {
-            for (int i = 0; i < values.length; i++) {
-                values[i] = Integer.parseInt(split.get(i));
-            }
-        } catch (final NumberFormatException e) {
-            return null;
-        }
-        return values;
-    }
-
-    /**
-     * Forces all VCFCodecs to not perform any on the fly modifications to the VCF header
-     * of VCF records.  Useful primarily for raw comparisons such as when comparing
-     * raw VCF records
-     */
-    public final void disableOnTheFlyModifications() {
-        doOnTheFlyModifications = false;
-    }
-
-    /**
-     * Replaces the sample name read from the VCF header with the remappedSampleName. Works
-     * only for single-sample VCFs -- attempting to perform sample name remapping for multi-sample
-     * VCFs will produce an Exception.
-     *
-     * @param remappedSampleName replacement sample name for the sample specified in the VCF header
-     */
-    public void setRemappedSampleName( final String remappedSampleName ) {
-        this.remappedSampleName = remappedSampleName;
-    }
-
-    protected void generateException(String message) {
-        throw new TribbleException(String.format("The provided VCF file is malformed at approximately line number %d: %s", lineNo, message));
-    }
-
-    protected static void generateException(String message, int lineNo) {
-        throw new TribbleException(String.format("The provided VCF file is malformed at approximately line number %d: %s", lineNo, message));
-    }
-
-    @Override
-    public TabixFormat getTabixFormat() {
-        return TabixFormat.VCF;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCF3Codec.java b/src/main/java/htsjdk/variant/vcf/VCF3Codec.java
deleted file mode 100644
index 5f4f48e..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCF3Codec.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.readers.LineIterator;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * A feature codec for the VCF3 specification, to read older VCF files.  VCF3 has been
- * depreciated in favor of VCF4 (See VCF codec for the latest information)
- *
- * <p>
- * Reads historical VCF3 encoded files (1000 Genomes Pilot results, for example)
- * </p>
- *
- * <p>
- * See also: @see <a href="http://vcftools.sourceforge.net/specs.html">VCF specification</a><br>
- * See also: @see <a href="http://www.ncbi.nlm.nih.gov/pubmed/21653522">VCF spec. publication</a>
- * </p>
- *
- * @author Mark DePristo
- * @since 2010
- */
-public class VCF3Codec extends AbstractVCFCodec {
-    public final static String VCF3_MAGIC_HEADER = "##fileformat=VCFv3";
-
-    /**
-     * @param reader the line reader to take header lines from
-     * @return the number of header lines
-     */
-    public Object readActualHeader(final LineIterator reader) {
-        final List<String> headerStrings = new ArrayList<String>();
-
-        VCFHeaderVersion version = null;
-        boolean foundHeaderVersion = false;
-        while (reader.hasNext()) {
-            lineNo++;
-            final String line = reader.peek();
-            if (line.startsWith(VCFHeader.METADATA_INDICATOR)) {
-                final String[] lineFields = line.substring(2).split("=");
-                if (lineFields.length == 2 && VCFHeaderVersion.isFormatString(lineFields[0]) ) {
-                    if ( !VCFHeaderVersion.isVersionString(lineFields[1]) )
-                        throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
-                    foundHeaderVersion = true;
-                    version = VCFHeaderVersion.toHeaderVersion(lineFields[1]);
-                    if ( version != VCFHeaderVersion.VCF3_3 && version != VCFHeaderVersion.VCF3_2 )
-                        throw new TribbleException.InvalidHeader("This codec is strictly for VCFv3 and does not support " + lineFields[1]);
-                }
-                headerStrings.add(reader.next());
-            }
-            else if (line.startsWith(VCFHeader.HEADER_INDICATOR)) {
-                if (!foundHeaderVersion) {
-                    throw new TribbleException.InvalidHeader("We never saw a header line specifying VCF version");
-                }
-                headerStrings.add(reader.next());
-                return super.parseHeaderFromLines(headerStrings, version);
-            }
-            else {
-                throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
-            }
-
-        }
-        throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
-    }
-
-
-    /**
-     * parse the filter string, first checking to see if we already have parsed it in a previous attempt
-     * @param filterString the string to parse
-     * @return a set of the filters applied
-     */
-    protected List<String> parseFilters(String filterString) {
-
-        // null for unfiltered
-        if ( filterString.equals(VCFConstants.UNFILTERED) )
-            return null;
-
-        // empty set for passes filters
-        List<String> fFields = new ArrayList<String>();
-
-        if ( filterString.equals(VCFConstants.PASSES_FILTERS_v3) )
-            return new ArrayList<String>(fFields);
-
-        if (filterString.isEmpty())
-            generateException("The VCF specification requires a valid filter status");
-
-        // do we have the filter string cached?
-        if ( filterHash.containsKey(filterString) )
-            return new ArrayList<String>(filterHash.get(filterString));
-
-        // otherwise we have to parse and cache the value
-        if ( filterString.indexOf(VCFConstants.FILTER_CODE_SEPARATOR) == -1 )
-            fFields.add(filterString);
-        else
-            fFields.addAll(Arrays.asList(filterString.split(VCFConstants.FILTER_CODE_SEPARATOR)));
-
-        filterHash.put(filterString, fFields);
-
-        return fFields;
-    }
-
-    @Override
-    public boolean canDecode(final String potentialInput) {
-        return canDecodeFile(potentialInput, VCF3_MAGIC_HEADER);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFCodec.java b/src/main/java/htsjdk/variant/vcf/VCFCodec.java
deleted file mode 100644
index 89d6881..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFCodec.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.readers.LineIterator;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A feature codec for the VCF 4 specification
- *
- * <p>
- * VCF is a text file format (most likely stored in a compressed manner). It contains meta-information lines, a
- * header line, and then data lines each containing information about a position in the genome.
- * </p>
- * <p>One of the main uses of next-generation sequencing is to discover variation amongst large populations
- * of related samples. Recently the format for storing next-generation read alignments has been
- * standardised by the SAM/BAM file format specification. This has significantly improved the
- * interoperability of next-generation tools for alignment, visualisation, and variant calling.
- * We propose the Variant Call Format (VCF) as a standarised format for storing the most prevalent
- * types of sequence variation, including SNPs, indels and larger structural variants, together
- * with rich annotations. VCF is usually stored in a compressed manner and can be indexed for
- * fast data retrieval of variants from a range of positions on the reference genome.
- * The format was developed for the 1000 Genomes Project, and has also been adopted by other projects
- * such as UK10K, dbSNP, or the NHLBI Exome Project. VCFtools is a software suite that implements
- * various utilities for processing VCF files, including validation, merging and comparing,
- * and also provides a general Perl and Python API.
- * The VCF specification and VCFtools are available from http://vcftools.sourceforge.net.</p>
- *
- * <p>
- * See also: @see <a href="http://vcftools.sourceforge.net/specs.html">VCF specification</a><br>
- * See also: @see <a href="http://www.ncbi.nlm.nih.gov/pubmed/21653522">VCF spec. publication</a>
- * </p>
- *
- * <h2>File format example</h2>
- * <pre>
- *     ##fileformat=VCFv4.0
- *     #CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  NA12878
- *     chr1    109     .       A       T       0       PASS  AC=1    GT:AD:DP:GL:GQ  0/1:610,327:308:-316.30,-95.47,-803.03:99
- *     chr1    147     .       C       A       0       PASS  AC=1    GT:AD:DP:GL:GQ  0/1:294,49:118:-57.87,-34.96,-338.46:99
- * </pre>
- *
- * @author Mark DePristo
- * @since 2010
- */
-public class VCFCodec extends AbstractVCFCodec {
-    // Our aim is to read in the records and convert to VariantContext as quickly as possible, relying on VariantContext to do the validation of any contradictory (or malformed) record parameters.
-    public final static String VCF4_MAGIC_HEADER = "##fileformat=VCFv4";
-
-    /**
-     * Reads all of the header from the provided iterator, but no reads no further.
-     * @param lineIterator the line reader to take header lines from
-     * @return The parsed header
-     */
-    @Override
-    public Object readActualHeader(final LineIterator lineIterator) {
-        final List<String> headerStrings = new ArrayList<String>();
-
-        String line;
-        boolean foundHeaderVersion = false;
-        while (lineIterator.hasNext()) {
-            line = lineIterator.peek();
-            lineNo++;
-            if (line.startsWith(VCFHeader.METADATA_INDICATOR)) {
-                final String[] lineFields = line.substring(2).split("=");
-                if (lineFields.length == 2 && VCFHeaderVersion.isFormatString(lineFields[0]) ) {
-                    if ( !VCFHeaderVersion.isVersionString(lineFields[1]) )
-                        throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
-                    foundHeaderVersion = true;
-                    version = VCFHeaderVersion.toHeaderVersion(lineFields[1]);
-                    if ( ! version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) )
-                        throw new TribbleException.InvalidHeader("This codec is strictly for VCFv4; please use the VCF3 codec for " + lineFields[1]);
-                    if ( version != VCFHeaderVersion.VCF4_0 && version != VCFHeaderVersion.VCF4_1 && version != VCFHeaderVersion.VCF4_2 )
-                        throw new TribbleException.InvalidHeader("This codec is strictly for VCFv4 and does not support " + lineFields[1]);
-                }
-                headerStrings.add(lineIterator.next());
-            }
-            else if (line.startsWith(VCFHeader.HEADER_INDICATOR)) {
-                if (!foundHeaderVersion) {
-                    throw new TribbleException.InvalidHeader("We never saw a header line specifying VCF version");
-                }
-                headerStrings.add(lineIterator.next());
-                super.parseHeaderFromLines(headerStrings, version);
-                return this.header;
-            }
-            else {
-                throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
-            }
-
-        }
-        throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
-    }
-
-    /**
-     * parse the filter string, first checking to see if we already have parsed it in a previous attempt
-     *
-     * @param filterString the string to parse
-     * @return a set of the filters applied or null if filters were not applied to the record (e.g. as per the missing value in a VCF)
-     */
-    protected List<String> parseFilters(final String filterString) {
-        // null for unfiltered
-        if ( filterString.equals(VCFConstants.UNFILTERED) )
-            return null;
-
-        if ( filterString.equals(VCFConstants.PASSES_FILTERS_v4) )
-            return Collections.emptyList();
-        if ( filterString.equals(VCFConstants.PASSES_FILTERS_v3) )
-            generateException(VCFConstants.PASSES_FILTERS_v3 + " is an invalid filter name in vcf4", lineNo);
-        if (filterString.isEmpty())
-            generateException("The VCF specification requires a valid filter status: filter was " + filterString, lineNo);
-
-        // do we have the filter string cached?
-        if ( filterHash.containsKey(filterString) )
-            return filterHash.get(filterString);
-
-        // empty set for passes filters
-        final List<String> fFields = new LinkedList<String>();
-        // otherwise we have to parse and cache the value
-        if ( !filterString.contains(VCFConstants.FILTER_CODE_SEPARATOR) )
-            fFields.add(filterString);
-        else
-            fFields.addAll(Arrays.asList(filterString.split(VCFConstants.FILTER_CODE_SEPARATOR)));
-
-        filterHash.put(filterString, Collections.unmodifiableList(fFields));
-
-        return fFields;
-    }
-
-    @Override
-    public boolean canDecode(final String potentialInput) {
-        return canDecodeFile(potentialInput, VCF4_MAGIC_HEADER);
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFCompoundHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFCompoundHeaderLine.java
deleted file mode 100644
index 48e0cdf..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFCompoundHeaderLine.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.GenotypeLikelihoods;
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * a base class for compound header lines, which include info lines and format lines (so far)
- */
-public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCFIDHeaderLine {
-
-    public enum SupportedHeaderLineType {
-        INFO(true), FORMAT(false);
-
-        public final boolean allowFlagValues;
-        SupportedHeaderLineType(boolean flagValues) {
-            allowFlagValues = flagValues;
-        }
-    }
-
-    // the field types
-    private String name;
-    private int count = -1;
-    private VCFHeaderLineCount countType;
-    private String description;
-    private VCFHeaderLineType type;
-
-    // access methods
-    public String getID() { return name; }
-    public String getDescription() { return description; }
-    public VCFHeaderLineType getType() { return type; }
-    public VCFHeaderLineCount getCountType() { return countType; }
-    public boolean isFixedCount() { return countType == VCFHeaderLineCount.INTEGER; }
-    public int getCount() {
-        if (!isFixedCount())
-            throw new TribbleException("Asking for header line count when type is not an integer");
-        return count;
-    }
-
-    /**
-     * Get the number of values expected for this header field, given the properties of VariantContext vc
-     *
-     * If the count is a fixed count, return that.  For example, a field with size of 1 in the header returns 1
-     * If the count is of type A, return vc.getNAlleles - 1
-     * If the count is of type R, return vc.getNAlleles
-     * If the count is of type G, return the expected number of genotypes given the number of alleles in VC and the
-     *   max ploidy among all samples.  Note that if the max ploidy of the VC is 0 (there's no GT information
-     *   at all, then implicitly assume diploid samples when computing G values.
-     * If the count is UNBOUNDED return -1
-     *
-     * @param vc
-     * @return
-     */
-    public int getCount(final VariantContext vc) {
-        switch (countType) {
-            case INTEGER:
-                return count;
-            case UNBOUNDED:
-                return -1;
-            case A:
-                return vc.getNAlleles() - 1;
-            case R:
-                return vc.getNAlleles();
-            case G:
-                final int ploidy = vc.getMaxPloidy(2);
-                return GenotypeLikelihoods.numLikelihoods(vc.getNAlleles(), ploidy);
-            default:
-                throw new TribbleException("Unknown count type: " + countType);
-        }
-    }
-
-    public void setNumberToUnbounded() {
-        countType = VCFHeaderLineCount.UNBOUNDED;
-        count = -1;
-    }
-
-    // our type of line, i.e. format, info, etc
-    private final SupportedHeaderLineType lineType;
-
-    /**
-     * create a VCF format header line
-     *
-     * @param name         the name for this header line
-     * @param count        the count for this header line
-     * @param type         the type for this header line
-     * @param description  the description for this header line
-     * @param lineType     the header line type
-     */
-    protected VCFCompoundHeaderLine(String name, int count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) {
-        super(lineType.toString(), "");
-        this.name = name;
-        this.countType = VCFHeaderLineCount.INTEGER;
-        this.count = count;
-        this.type = type;
-        this.description = description;
-        this.lineType = lineType;
-        validate();
-    }
-
-    /**
-     * create a VCF format header line
-     *
-     * @param name         the name for this header line
-     * @param count        the count type for this header line
-     * @param type         the type for this header line
-     * @param description  the description for this header line
-     * @param lineType     the header line type
-     */
-    protected VCFCompoundHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) {
-        super(lineType.toString(), "");
-        this.name = name;
-        this.countType = count;
-        this.type = type;
-        this.description = description;
-        this.lineType = lineType;
-        validate();
-    }
-
-    /**
-     * create a VCF format header line
-     *
-     * @param line   the header line
-     * @param version      the VCF header version
-     * @param lineType     the header line type
-     *
-     */
-    protected VCFCompoundHeaderLine(String line, VCFHeaderVersion version, SupportedHeaderLineType lineType) {
-        super(lineType.toString(), "");
-
-        final ArrayList<String> expectedTags = new ArrayList(Arrays.asList("ID", "Number", "Type", "Description"));
-        if (version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_2))
-            expectedTags.add("Version");
-        final Map<String, String> mapping = VCFHeaderLineTranslator.parseLine(version, line, expectedTags);
-        name = mapping.get("ID");
-        count = -1;
-        final String numberStr = mapping.get("Number");
-        if (numberStr.equals(VCFConstants.PER_ALTERNATE_COUNT)) {
-            countType = VCFHeaderLineCount.A;
-        } else if (numberStr.equals(VCFConstants.PER_ALLELE_COUNT)) {
-            countType = VCFHeaderLineCount.R;
-        } else if (numberStr.equals(VCFConstants.PER_GENOTYPE_COUNT)) {
-            countType = VCFHeaderLineCount.G;
-        } else if ((version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) && numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v4)) ||
-                (!version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) && numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v3))) {
-            countType = VCFHeaderLineCount.UNBOUNDED;
-        } else {
-            countType = VCFHeaderLineCount.INTEGER;
-            count = Integer.valueOf(numberStr);
-
-        }
-
-        if (count < 0 && countType == VCFHeaderLineCount.INTEGER)
-            throw new TribbleException.InvalidHeader("Count < 0 for fixed size VCF header field " + name);
-
-        try {
-            type = VCFHeaderLineType.valueOf(mapping.get("Type"));
-        } catch (Exception e) {
-            throw new TribbleException(mapping.get("Type") + " is not a valid type in the VCF specification (note that types are case-sensitive)");
-        }
-        if (type == VCFHeaderLineType.Flag && !allowFlagValues())
-            throw new IllegalArgumentException("Flag is an unsupported type for this kind of field");
-
-        description = mapping.get("Description");
-        if (description == null && ALLOW_UNBOUND_DESCRIPTIONS) // handle the case where there's no description provided
-            description = UNBOUND_DESCRIPTION;
-
-        this.lineType = lineType;
-
-        validate();
-    }
-
-    private void validate() {
-        if (name == null || type == null || description == null || lineType == null)
-            throw new IllegalArgumentException(String.format("Invalid VCFCompoundHeaderLine: key=%s name=%s type=%s desc=%s lineType=%s",
-                    super.getKey(), name, type, description, lineType));
-        if (name.contains("<") || name.contains(">"))
-            throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain angle brackets");
-        if (name.contains("="))
-            throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain an equals sign");
-
-        if (type == VCFHeaderLineType.Flag && count != 0) {
-            count = 0;
-            if (GeneralUtils.DEBUG_MODE_ENABLED) {
-                System.err.println("FLAG fields must have a count value of 0, but saw " + count + " for header line " + getID() + ". Changing it to 0 inside the code");
-            }
-        }
-    }
-
-    /**
-     * make a string representation of this header line
-     * @return a string representation
-     */
-    protected String toStringEncoding() {
-        Map<String, Object> map = new LinkedHashMap<String, Object>();
-        map.put("ID", name);
-        Object number;
-        switch (countType) {
-            case A:
-                number = VCFConstants.PER_ALTERNATE_COUNT;
-                break;
-            case R:
-                number = VCFConstants.PER_ALLELE_COUNT;
-                break;
-            case G:
-                number = VCFConstants.PER_GENOTYPE_COUNT;
-                break;
-            case UNBOUNDED:
-                number = VCFConstants.UNBOUNDED_ENCODING_v4;
-                break;
-            case INTEGER:
-            default:
-                number = count;
-        }
-        map.put("Number", number);
-        map.put("Type", type);
-        map.put("Description", description);
-        return lineType.toString() + "=" + VCFHeaderLine.toStringEncoding(map);
-    }
-
-    /**
-     * returns true if we're equal to another compound header line
-     * @param o a compound header line
-     * @return true if equal
-     */
-    @Override
-    public boolean equals(final Object o) {
-        if ( this == o ) {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() || ! super.equals(o) ) {
-            return false;
-        }
-
-        final VCFCompoundHeaderLine that = (VCFCompoundHeaderLine) o;
-        return equalsExcludingDescription(that) &&
-               description.equals(that.description);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = super.hashCode();
-        result = 31 * result + name.hashCode();
-        result = 31 * result + count;
-        result = 31 * result + (countType != null ? countType.hashCode() : 0);  // only nullable field according to validate()
-        result = 31 * result + description.hashCode();
-        result = 31 * result + type.hashCode();
-        result = 31 * result + lineType.hashCode();
-        return result;
-    }
-
-    public boolean equalsExcludingDescription(VCFCompoundHeaderLine other) {
-        return count == other.count &&
-                countType == other.countType &&
-                type == other.type &&
-                lineType == other.lineType &&
-                name.equals(other.name);
-    }
-
-    public boolean sameLineTypeAndName(VCFCompoundHeaderLine other) {
-        return lineType == other.lineType &&
-                name.equals(other.name);
-    }
-
-    /**
-     * do we allow flag (boolean) values? (i.e. booleans where you don't have specify the value, AQ means AQ=true)
-     * @return true if we do, false otherwise
-     */
-    abstract boolean allowFlagValues();
-
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFConstants.java b/src/main/java/htsjdk/variant/vcf/VCFConstants.java
deleted file mode 100644
index 6a52d1d..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFConstants.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import java.util.Locale;
-
-public final class VCFConstants {
-    public static final Locale VCF_LOCALE = Locale.US;
-
-    // reserved INFO/FORMAT field keys
-    public static final String ANCESTRAL_ALLELE_KEY = "AA";
-    public static final String ALLELE_COUNT_KEY = "AC";
-    public static final String ALLELE_FREQUENCY_KEY = "AF";
-    public static final String ALLELE_NUMBER_KEY = "AN";
-    public static final String RMS_BASE_QUALITY_KEY = "BQ";
-    public static final String CIGAR_KEY = "CIGAR";
-    public static final String DBSNP_KEY = "DB";
-    public static final String DEPTH_KEY = "DP";
-    public static final String END_KEY = "END";
-
-    public static final String GENOTYPE_FILTER_KEY = "FT";
-    public static final String GENOTYPE_KEY = "GT";
-    public static final String GENOTYPE_POSTERIORS_KEY = "GP";
-    public static final String GENOTYPE_QUALITY_KEY = "GQ";
-    public static final String GENOTYPE_ALLELE_DEPTHS = "AD"; //AD isn't reserved, but is specifically handled by VariantContext
-    public static final String GENOTYPE_PL_KEY = "PL";   // phred-scaled genotype likelihoods
-    public static final String EXPECTED_ALLELE_COUNT_KEY = "EC";
-    @Deprecated public static final String GENOTYPE_LIKELIHOODS_KEY = "GL";         // log10 scaled genotype likelihoods
-
-    public static final String HAPMAP2_KEY = "H2";
-    public static final String HAPMAP3_KEY = "H3";
-    public static final String HAPLOTYPE_QUALITY_KEY = "HQ";
-    public static final String RMS_MAPPING_QUALITY_KEY = "MQ";
-    public static final String MAPPING_QUALITY_ZERO_KEY = "MQ0";
-    public static final String SAMPLE_NUMBER_KEY = "NS";
-    public static final String PHASE_QUALITY_KEY = "PQ";
-    public static final String PHASE_SET_KEY = "PS";
-    public static final String OLD_DEPTH_KEY = "RD";
-    public static final String STRAND_BIAS_KEY = "SB";
-    public static final String SOMATIC_KEY = "SOMATIC";
-    public static final String VALIDATED_KEY = "VALIDATED";
-    public static final String THOUSAND_GENOMES_KEY = "1000G";
-    
-    // reserved INFO for structural variants
-    /** INFO Type of structural variant */
-    public static final String SVTYPE = "SVTYPE";    
-
-    // separators
-    public static final String FORMAT_FIELD_SEPARATOR = ":";
-    public static final String GENOTYPE_FIELD_SEPARATOR = ":";
-    public static final char   GENOTYPE_FIELD_SEPARATOR_CHAR = ':';
-    public static final String FIELD_SEPARATOR = "\t";
-    public static final char   FIELD_SEPARATOR_CHAR = '\t';
-    public static final String FILTER_CODE_SEPARATOR = ";";
-    public static final String INFO_FIELD_ARRAY_SEPARATOR = ",";
-    public static final char INFO_FIELD_ARRAY_SEPARATOR_CHAR = ',';
-    public static final String ID_FIELD_SEPARATOR = ";";
-    public static final String INFO_FIELD_SEPARATOR = ";";
-    public static final char INFO_FIELD_SEPARATOR_CHAR = ';';
-    public static final String UNPHASED = "/";
-    public static final String PHASED = "|";
-    public static final String PHASED_SWITCH_PROB_v3 = "\\";
-    public static final String PHASING_TOKENS = "/|\\";
-
-    // header lines
-    public static final String FILTER_HEADER_START = "##FILTER";
-    public static final String FORMAT_HEADER_START = "##FORMAT";
-    public static final String INFO_HEADER_START = "##INFO";
-    public static final String ALT_HEADER_START = "##ALT";
-    public static final String CONTIG_HEADER_KEY = "contig";
-    public static final String CONTIG_HEADER_START = "##" + CONTIG_HEADER_KEY;
-
-    // old indel alleles
-    public static final char DELETION_ALLELE_v3 = 'D';
-    public static final char INSERTION_ALLELE_v3 = 'I';
-
-    // special alleles
-    public static final char SPANNING_DELETION_ALLELE = '*';
-    public static final char NO_CALL_ALLELE = '.';
-    public static final char NULL_ALLELE = '-';
-
-
-    // missing/default values
-    public static final String UNFILTERED = ".";
-    public static final String PASSES_FILTERS_v3 = "0";
-    public static final String PASSES_FILTERS_v4 = "PASS";
-    public static final String EMPTY_ID_FIELD = ".";
-    public static final String EMPTY_INFO_FIELD = ".";
-    public static final String EMPTY_ALTERNATE_ALLELE_FIELD = ".";
-    public static final String MISSING_VALUE_v4 = ".";
-    public static final String MISSING_QUALITY_v3 = "-1";
-    public static final Double MISSING_QUALITY_v3_DOUBLE = Double.valueOf(MISSING_QUALITY_v3);
-
-    public static final String MISSING_GENOTYPE_QUALITY_v3 = "-1";
-    public static final String MISSING_HAPLOTYPE_QUALITY_v3 = "-1";
-    public static final String MISSING_DEPTH_v3 = "-1";
-    public static final String UNBOUNDED_ENCODING_v4 = ".";
-    public static final String UNBOUNDED_ENCODING_v3 = "-1";
-    public static final String PER_ALTERNATE_COUNT = "A";
-    public static final String PER_ALLELE_COUNT = "R";
-    public static final String PER_GENOTYPE_COUNT = "G";
-    public static final String EMPTY_ALLELE = ".";
-    public static final String EMPTY_GENOTYPE = "./.";
-    public static final int MAX_GENOTYPE_QUAL = 99;
-
-    public static final Double VCF_ENCODING_EPSILON = 0.00005; // when we consider fields equal(), used in the Qual compare
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java
deleted file mode 100644
index 12e400c..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.tribble.TribbleException;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * A special class representing a contig VCF header line.  Knows the true contig order and sorts on that
- *
- * Note: this class has a natural ordering that is inconsistent with equals()
- *
- * @author mdepristo
- */
-public class VCFContigHeaderLine extends VCFSimpleHeaderLine {
-    final Integer contigIndex;
-
-    /**
-     * create a VCF contig header line
-     *
-     * @param line      the header line
-     * @param version   the vcf header version
-     * @param key            the key for this header line
-     */
-    public VCFContigHeaderLine(final String line, final VCFHeaderVersion version, final String key, final int contigIndex) {
-        super(line, version, key, null);
-	    if (contigIndex < 0) throw new TribbleException("The contig index is less than zero.");
-        this.contigIndex = contigIndex;
-    }
-
-    public VCFContigHeaderLine(final Map<String, String> mapping, final int contigIndex) {
-        super(VCFHeader.CONTIG_KEY, mapping);
-	    if (contigIndex < 0) throw new TribbleException("The contig index is less than zero.");
-        this.contigIndex = contigIndex;
-    }
-
-	VCFContigHeaderLine(final SAMSequenceRecord sequenceRecord, final String assembly) {
-        // Using LinkedHashMap to preserve order of keys in contig line (ID, length, assembly)
-        super(VCFHeader.CONTIG_KEY, new LinkedHashMap<String, String>() {{
-			// Now inside an init block in an anon HashMap subclass
-			this.put("ID", sequenceRecord.getSequenceName());
-			this.put("length", Integer.toString(sequenceRecord.getSequenceLength()));
-			if ( assembly != null ) this.put("assembly", assembly);
-		}});
-		this.contigIndex = sequenceRecord.getSequenceIndex();
-	}
-
-    public Integer getContigIndex() {
-        return contigIndex;
-    }
-
-	public SAMSequenceRecord getSAMSequenceRecord() {
-		final String lengthString = this.getGenericFieldValue("length");
-		if (lengthString == null) throw new TribbleException("Contig " + this.getID() + " does not have a length field.");
-		final SAMSequenceRecord record = new SAMSequenceRecord(this.getID(), Integer.valueOf(lengthString));
-        record.setAssembly(this.getGenericFieldValue("assembly"));
-		record.setSequenceIndex(this.contigIndex);
-		return record;
-	}
-
-    @Override
-    public boolean equals(final Object o) {
-        if ( this == o ) {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() || ! super.equals(o) ) {
-            return false;
-        }
-
-        final VCFContigHeaderLine that = (VCFContigHeaderLine) o;
-        return contigIndex.equals(that.contigIndex);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = super.hashCode();
-        result = 31 * result + contigIndex.hashCode();
-        return result;
-    }
-
-    /**
-     * IT IS CRITICAL THAT THIS BE OVERRIDDEN SO WE SORT THE CONTIGS IN THE CORRECT ORDER
-     */
-    @Override
-    public int compareTo(final Object other) {
-        if ( other instanceof VCFContigHeaderLine )
-            return contigIndex.compareTo(((VCFContigHeaderLine) other).contigIndex);
-        else {
-            return super.compareTo(other);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/vcf/VCFEncoder.java b/src/main/java/htsjdk/variant/vcf/VCFEncoder.java
deleted file mode 100644
index a909066..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFEncoder.java
+++ /dev/null
@@ -1,382 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.GenotypesContext;
-import htsjdk.variant.variantcontext.LazyGenotypesContext;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.writer.IntGenotypeFieldAccessors;
-
-import java.lang.reflect.Array;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Functions specific to encoding VCF records.
- */
-public class VCFEncoder {
-
-	/**
-	 * The encoding used for VCF files: ISO-8859-1
-	 */
-	public static final Charset VCF_CHARSET = Charset.forName("ISO-8859-1");
-	private static final String QUAL_FORMAT_STRING = "%.2f";
-	private static final String QUAL_FORMAT_EXTENSION_TO_TRIM = ".00";
-
-	private final IntGenotypeFieldAccessors GENOTYPE_FIELD_ACCESSORS = new IntGenotypeFieldAccessors();
-
-	private VCFHeader header;
-
-	private boolean allowMissingFieldsInHeader = false;
-
-	private boolean outputTrailingFormatFields = false;
-
-	/**
-	 * Prepare a VCFEncoder that will encode records appropriate to the given VCF header, optionally
-	 * allowing missing fields in the header.
-	 */
-	public VCFEncoder(final VCFHeader header, final boolean allowMissingFieldsInHeader, final boolean outputTrailingFormatFields) {
-		if (header == null) throw new NullPointerException("The VCF header must not be null.");
-		this.header = header;
-		this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
-		this.outputTrailingFormatFields = outputTrailingFormatFields;
-	}
-
-	/**
-	 * Please see the notes in the default constructor
-	 */
-	@Deprecated
-	public void setVCFHeader(final VCFHeader header) {
-		this.header = header;
-	}
-
-	/**
-	 * Please see the notes in the default constructor
-	 */
-	@Deprecated
-	public void setAllowMissingFieldsInHeader(final boolean allow) {
-		this.allowMissingFieldsInHeader = allow;
-	}
-
-	public String encode(final VariantContext context) {
-		if (this.header == null) {
-			throw new NullPointerException("The header field must be set on the VCFEncoder before encoding records.");
-		}
-
-		final StringBuilder stringBuilder = new StringBuilder();
-
-		// CHROM
-		stringBuilder.append(context.getContig()).append(VCFConstants.FIELD_SEPARATOR)
-				// POS
-				.append(String.valueOf(context.getStart())).append(VCFConstants.FIELD_SEPARATOR)
-				// ID
-				.append(context.getID()).append(VCFConstants.FIELD_SEPARATOR)
-				// REF
-				.append(context.getReference().getDisplayString()).append(VCFConstants.FIELD_SEPARATOR);
-
-		// ALT
-		if ( context.isVariant() ) {
-			Allele altAllele = context.getAlternateAllele(0);
-			String alt = altAllele.getDisplayString();
-			stringBuilder.append(alt);
-
-			for (int i = 1; i < context.getAlternateAlleles().size(); i++) {
-				altAllele = context.getAlternateAllele(i);
-				alt = altAllele.getDisplayString();
-				stringBuilder.append(',');
-				stringBuilder.append(alt);
-			}
-		} else {
-			stringBuilder.append(VCFConstants.EMPTY_ALTERNATE_ALLELE_FIELD);
-		}
-
-		stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
-
-		// QUAL
-		if ( ! context.hasLog10PError()) stringBuilder.append(VCFConstants.MISSING_VALUE_v4);
-		else stringBuilder.append(formatQualValue(context.getPhredScaledQual()));
-		stringBuilder.append(VCFConstants.FIELD_SEPARATOR)
-				// FILTER
-				.append(getFilterString(context)).append(VCFConstants.FIELD_SEPARATOR);
-
-		// INFO
-		final Map<String, String> infoFields = new TreeMap<String, String>();
-		for (final Map.Entry<String, Object> field : context.getAttributes().entrySet() ) {
-			if ( ! this.header.hasInfoLine(field.getKey())) fieldIsMissingFromHeaderError(context, field.getKey(), "INFO");
-
-			final String outputValue = formatVCFField(field.getValue());
-			if (outputValue != null) infoFields.put(field.getKey(), outputValue);
-		}
-		writeInfoString(infoFields, stringBuilder);
-
-		// FORMAT
-		final GenotypesContext gc = context.getGenotypes();
-		if (gc.isLazyWithData() && ((LazyGenotypesContext) gc).getUnparsedGenotypeData() instanceof String) {
-			stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
-			stringBuilder.append(((LazyGenotypesContext) gc).getUnparsedGenotypeData().toString());
-		} else {
-			final List<String> genotypeAttributeKeys = context.calcVCFGenotypeKeys(this.header);
-			if ( ! genotypeAttributeKeys.isEmpty()) {
-				for (final String format : genotypeAttributeKeys)
-					if ( ! this.header.hasFormatLine(format))
-						fieldIsMissingFromHeaderError(context, format, "FORMAT");
-
-				final String genotypeFormatString = ParsingUtils.join(VCFConstants.GENOTYPE_FIELD_SEPARATOR, genotypeAttributeKeys);
-
-				stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
-				stringBuilder.append(genotypeFormatString);
-
-				final Map<Allele, String> alleleStrings = buildAlleleStrings(context);
-				addGenotypeData(context, alleleStrings, genotypeAttributeKeys, stringBuilder);
-			}
-		}
-
-		return stringBuilder.toString();
-	}
-
-	VCFHeader getVCFHeader() {
-		return this.header;
-	}
-
-	boolean getAllowMissingFieldsInHeader() {
-		return this.allowMissingFieldsInHeader;
-	}
-
-	private String getFilterString(final VariantContext vc) {
-		if (vc.isFiltered()) {
-			for (final String filter : vc.getFilters()) {
-				if ( ! this.header.hasFilterLine(filter)) fieldIsMissingFromHeaderError(vc, filter, "FILTER");
-			}
-
-			return ParsingUtils.join(";", ParsingUtils.sortList(vc.getFilters()));
-		}
-		else if (vc.filtersWereApplied()) return VCFConstants.PASSES_FILTERS_v4;
-		else return VCFConstants.UNFILTERED;
-	}
-
-	private String formatQualValue(final double qual) {
-		String s = String.format(QUAL_FORMAT_STRING, qual);
-		if ( s.endsWith(QUAL_FORMAT_EXTENSION_TO_TRIM) )
-			s = s.substring(0, s.length() - QUAL_FORMAT_EXTENSION_TO_TRIM.length());
-		return s;
-	}
-
-	private void fieldIsMissingFromHeaderError(final VariantContext vc, final String id, final String field) {
-		if ( ! allowMissingFieldsInHeader)
-			throw new IllegalStateException("Key " + id + " found in VariantContext field " + field
-					+ " at " + vc.getContig() + ":" + vc.getStart()
-					+ " but this key isn't defined in the VCFHeader.  We require all VCFs to have"
-					+ " complete VCF headers by default.");
-	}
-
-	String formatVCFField(final Object val) {
-		final String result;
-		if ( val == null )
-			result = VCFConstants.MISSING_VALUE_v4;
-		else if ( val instanceof Double )
-			result = formatVCFDouble((Double) val);
-		else if ( val instanceof Boolean )
-			result = (Boolean)val ? "" : null; // empty string for true, null for false
-		else if ( val instanceof List ) {
-			result = formatVCFField(((List)val).toArray());
-		} else if ( val.getClass().isArray() ) {
-			final int length = Array.getLength(val);
-			if ( length == 0 )
-				return formatVCFField(null);
-			final StringBuilder sb = new StringBuilder(formatVCFField(Array.get(val, 0)));
-			for ( int i = 1; i < length; i++) {
-				sb.append(',');
-				sb.append(formatVCFField(Array.get(val, i)));
-			}
-			result = sb.toString();
-		} else
-			result = val.toString();
-
-		return result;
-	}
-
-	/**
-	 * Takes a double value and pretty prints it to a String for display
-	 *
-	 * Large doubles => gets %.2f style formatting
-	 * Doubles < 1 / 10 but > 1/100 => get %.3f style formatting
-	 * Double < 1/100 => %.3e formatting
-	 * @param d
-	 * @return
-	 */
-	public static String formatVCFDouble(final double d) {
-		final String format;
-		if ( d < 1 ) {
-			if ( d < 0.01 ) {
-				if ( Math.abs(d) >= 1e-20 )
-					format = "%.3e";
-				else {
-					// return a zero format
-					return "0.00";
-				}
-			} else {
-				format = "%.3f";
-			}
-		} else {
-			format = "%.2f";
-		}
-
-		return String.format(format, d);
-	}
-
-	static int countOccurrences(final char c, final String s) {
-		int count = 0;
-		for (int i = 0; i < s.length(); i++) {
-			count += s.charAt(i) == c ? 1 : 0;
-		}
-		return count;
-	}
-
-	static boolean isMissingValue(final String s) {
-		// we need to deal with the case that it's a list of missing values
-		return (countOccurrences(VCFConstants.MISSING_VALUE_v4.charAt(0), s) + countOccurrences(',', s) == s.length());
-	}
-
-	/*
-	 * Add the genotype data
-	 */
-	public void addGenotypeData(final VariantContext vc, final Map<Allele, String> alleleMap, final List<String> genotypeFormatKeys, final StringBuilder builder) {
-		final int ploidy = vc.getMaxPloidy(2);
-
-		for (final String sample : this.header.getGenotypeSamples()) {
-			builder.append(VCFConstants.FIELD_SEPARATOR);
-
-			Genotype g = vc.getGenotype(sample);
-			if (g == null) g = GenotypeBuilder.createMissing(sample, ploidy);
-
-			final List<String> attrs = new ArrayList<String>(genotypeFormatKeys.size());
-			for (final String field : genotypeFormatKeys) {
-				if (field.equals(VCFConstants.GENOTYPE_KEY)) {
-					if ( ! g.isAvailable()) {
-						throw new IllegalStateException("GTs cannot be missing for some samples if they are available for others in the record");
-					}
-
-					writeAllele(g.getAllele(0), alleleMap, builder);
-					for (int i = 1; i < g.getPloidy(); i++) {
-						builder.append(g.isPhased() ? VCFConstants.PHASED : VCFConstants.UNPHASED);
-						writeAllele(g.getAllele(i), alleleMap, builder);
-					}
-					continue;
-
-				} else {
-					final String outputValue;
-					if ( field.equals(VCFConstants.GENOTYPE_FILTER_KEY ) ) {
-						outputValue = g.isFiltered() ? g.getFilters() : VCFConstants.PASSES_FILTERS_v4;
-					} else {
-						final IntGenotypeFieldAccessors.Accessor accessor = GENOTYPE_FIELD_ACCESSORS.getAccessor(field);
-						if ( accessor != null ) {
-							final int[] intValues = accessor.getValues(g);
-							if ( intValues == null )
-								outputValue = VCFConstants.MISSING_VALUE_v4;
-							else if ( intValues.length == 1 ) // fast path
-								outputValue = Integer.toString(intValues[0]);
-							else {
-								final StringBuilder sb = new StringBuilder();
-								sb.append(intValues[0]);
-								for ( int i = 1; i < intValues.length; i++) {
-									sb.append(',');
-									sb.append(intValues[i]);
-								}
-								outputValue = sb.toString();
-							}
-						} else {
-							Object val = g.hasExtendedAttribute(field) ? g.getExtendedAttribute(field) : VCFConstants.MISSING_VALUE_v4;
-
-							final VCFFormatHeaderLine metaData = this.header.getFormatHeaderLine(field);
-							if ( metaData != null ) {
-								final int numInFormatField = metaData.getCount(vc);
-								if ( numInFormatField > 1 && val.equals(VCFConstants.MISSING_VALUE_v4) ) {
-									// If we have a missing field but multiple values are expected, we need to construct a new string with all fields.
-									// For example, if Number=2, the string has to be ".,."
-									final StringBuilder sb = new StringBuilder(VCFConstants.MISSING_VALUE_v4);
-									for ( int i = 1; i < numInFormatField; i++ ) {
-										sb.append(',');
-										sb.append(VCFConstants.MISSING_VALUE_v4);
-									}
-									val = sb.toString();
-								}
-							}
-
-							// assume that if key is absent, then the given string encoding suffices
-							outputValue = formatVCFField(val);
-						}
-					}
-
-					if ( outputValue != null )
-						attrs.add(outputValue);
-				}
-			}
-
-			// strip off trailing missing values
-			if (!outputTrailingFormatFields) {
-				for (int i = attrs.size() - 1; i >= 0; i--) {
-					if (isMissingValue(attrs.get(i))) attrs.remove(i);
-					else break;
-				}
-			}
-
-			for (int i = 0; i < attrs.size(); i++) {
-				if ( i > 0 || genotypeFormatKeys.contains(VCFConstants.GENOTYPE_KEY)) {
-					builder.append(VCFConstants.GENOTYPE_FIELD_SEPARATOR);
-				}
-				builder.append(attrs.get(i));
-			}
-		}
-	}
-
-	/*
-	 * Create the info string; assumes that no values are null
-	 */
-	private void writeInfoString(final Map<String, String> infoFields, final StringBuilder builder) {
-		if ( infoFields.isEmpty() ) {
-			builder.append(VCFConstants.EMPTY_INFO_FIELD);
-			return;
-		}
-
-		boolean isFirst = true;
-		for (final Map.Entry<String, String> entry : infoFields.entrySet()) {
-			if (isFirst) isFirst = false;
-			else builder.append(VCFConstants.INFO_FIELD_SEPARATOR);
-
-			builder.append(entry.getKey());
-
-			if ( ! entry.getValue().equals("")) {
-				final VCFInfoHeaderLine metaData = this.header.getInfoHeaderLine(entry.getKey());
-				if ( metaData == null || metaData.getCountType() != VCFHeaderLineCount.INTEGER || metaData.getCount() != 0 ) {
-					builder.append('=');
-					builder.append(entry.getValue());
-				}
-			}
-		}
-	}
-
-	public Map<Allele, String> buildAlleleStrings(final VariantContext vc) {
-		final Map<Allele, String> alleleMap = new HashMap<Allele, String>(vc.getAlleles().size()+1);
-		alleleMap.put(Allele.NO_CALL, VCFConstants.EMPTY_ALLELE); // convenience for lookup
-
-		final List<Allele> alleles = vc.getAlleles();
-		for ( int i = 0; i < alleles.size(); i++ ) {
-			alleleMap.put(alleles.get(i), String.valueOf(i));
-		}
-
-		return alleleMap;
-	}
-
-	private void writeAllele(final Allele allele, final Map<Allele, String> alleleMap, final StringBuilder builder) {
-		final String encoding = alleleMap.get(allele);
-		if ( encoding == null )
-			throw new RuntimeException("Allele " + allele + " is not an allele in the variant context");
-		builder.append(encoding);
-	}
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFFileReader.java b/src/main/java/htsjdk/variant/vcf/VCFFileReader.java
deleted file mode 100644
index 9024f34..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFFileReader.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.IntervalList;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.bcf2.BCF2Codec;
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Simplified interface for reading from VCF/BCF files.
- */
-public class VCFFileReader implements Closeable, Iterable<VariantContext> {
-
-	private final FeatureReader<VariantContext> reader;
-
-	/**
-	 * Returns true if the given file appears to be a BCF file.
-	 */
-	public static boolean isBCF(final File file) {
-		return file.getAbsolutePath().endsWith(".bcf");
-	}
-
-	/**
-	 * Returns the SAMSequenceDictionary from the provided VCF file.
-	 */
-	public static SAMSequenceDictionary getSequenceDictionary(final File file) {
-		final SAMSequenceDictionary dict = new VCFFileReader(file, false).getFileHeader().getSequenceDictionary();
-		CloserUtil.close(file);
-		return dict;
-	}
-
-    /** Constructs a VCFFileReader that requires the index to be present. */
-	public VCFFileReader(final File file) {
-		this(file, true);
-	}
-
-    /** Constructs a VCFFileReader with a specified index. */
-    public VCFFileReader(final File file, final File indexFile) {
-        this(file, indexFile, true);
-    }
-
-    /** Allows construction of a VCFFileReader that will or will not assert the presence of an index as desired. */
-	public VCFFileReader(final File file, final boolean requireIndex) {
-	  // Note how we deal with type safety here, just casting to (FeatureCodec)
-	  // in the call to getFeatureReader is not enough for Java 8.
-      FeatureCodec<VariantContext, ?> codec = isBCF(file) ? new BCF2Codec() : new VCFCodec();
-      this.reader = AbstractFeatureReader.getFeatureReader(
-                      file.getAbsolutePath(),
-                      codec,
-                      requireIndex);
-	}
-
-    /** Allows construction of a VCFFileReader with a specified index file. */
-    public VCFFileReader(final File file, final File indexFile, final boolean requireIndex) {
-      // Note how we deal with type safety here, just casting to (FeatureCodec)
-      // in the call to getFeatureReader is not enough for Java 8.
-      FeatureCodec<VariantContext, ?> codec = isBCF(file) ? new BCF2Codec() : new VCFCodec();
-      this.reader = AbstractFeatureReader.getFeatureReader(
-                      file.getAbsolutePath(),
-                      indexFile.getAbsolutePath(),
-                      codec,
-                      requireIndex);
-    }
-
-    /**
-     * Parse a VCF file and convert to an IntervalList The name field of the IntervalList is taken from the ID field of the variant, if it exists. if not,
-     * creates a name of the format interval-n where n is a running number that increments only on un-named intervals
-     * @param file
-     * @return
-     */
-    public static IntervalList fromVcf(final File file){
-        return fromVcf(file, false);
-    }
-
-    public static IntervalList fromVcf(final File file, final boolean includeFiltered){
-        final VCFFileReader vcfFileReader = new VCFFileReader(file, false);
-        final IntervalList intervalList = fromVcf(vcfFileReader, includeFiltered);
-        vcfFileReader.close();
-        return intervalList;
-    }
-
-    /**
-     * Converts a vcf to an IntervalList. The name field of the IntervalList is taken from the ID field of the variant, if it exists. If not,
-     * creates a name of the format interval-n where n is a running number that increments only on un-named intervals
-     * Will use a "END" tag in the info field as the end of the interval (if exists).
-     * @param vcf the vcfReader to be used for the conversion
-     * @return an IntervalList constructed from input vcf
-     */
-
-    public static IntervalList fromVcf(final VCFFileReader vcf){
-        return fromVcf(vcf,false);
-    }
-    public static IntervalList fromVcf(final VCFFileReader vcf, final boolean includeFiltered){
-
-        //grab the dictionary from the VCF and use it in the IntervalList
-        final SAMSequenceDictionary dict = vcf.getFileHeader().getSequenceDictionary();
-        final SAMFileHeader samFileHeader = new SAMFileHeader();
-        samFileHeader.setSequenceDictionary(dict);
-        final IntervalList list = new IntervalList(samFileHeader);
-
-        int intervals=0;
-        for(final VariantContext vc : vcf){
-            if(includeFiltered || !vc.isFiltered()){
-                String name = vc.getID();
-                final Integer intervalEnd=vc.getCommonInfo().getAttributeAsInt("END",vc.getEnd());
-                if(".".equals(name) || name == null)
-                    name = "interval-" + (++intervals);
-                list.add(new Interval(vc.getContig(), vc.getStart(), intervalEnd, false, name));
-            }
-        }
-
-        return list;
-    }
-
-    /** Returns the VCFHeader associated with this VCF/BCF file. */
-	public VCFHeader getFileHeader() {
-		return (VCFHeader) reader.getHeader();
-	}
-
-    /** Returns an iterator over all records in this VCF/BCF file. */
-	public CloseableIterator<VariantContext> iterator() {
-		try { return reader.iterator(); }
-        catch (final IOException ioe) {
-			throw new TribbleException("Could not create an iterator from a feature reader.", ioe);
-		}
-	}
-
-    /** Queries for records within the region specified. */
-    public CloseableIterator<VariantContext> query(final String chrom, final int start, final int end) {
-        try { return reader.query(chrom, start, end); }
-        catch (final IOException ioe) {
-            throw new TribbleException("Could not create an iterator from a feature reader.", ioe);
-        }
-    }
-
-	public void close() {
-		try { this.reader.close(); }
-        catch (final IOException ioe) {
-			throw new TribbleException("Could not close a variant context feature reader.", ioe);
-		}
-	}
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFFilterHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFFilterHeaderLine.java
deleted file mode 100644
index 5130963..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFFilterHeaderLine.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import java.util.Arrays;
-
-/**
- * @author ebanks
- * 
- * A class representing a key=value entry for FILTER fields in the VCF header
- */
-public class VCFFilterHeaderLine extends VCFSimpleHeaderLine  {
-    
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * create a VCF filter header line
-     *
-     * @param name         the name for this header line
-     * @param description  the description for this header line
-     */
-    public VCFFilterHeaderLine(final String name, final String description) {
-        super("FILTER", name, description);
-    }
-
-    /**
-     * Convenience constructor for FILTER whose description is the name
-     * @param name
-     */
-    public VCFFilterHeaderLine(final String name) {
-        super("FILTER", name, name);
-    }
-
-    /**
-     * create a VCF info header line
-     *
-     * @param line      the header line
-     * @param version   the vcf header version
-     */
-    public VCFFilterHeaderLine(final String line, final VCFHeaderVersion version) {
-        super(line, version, "FILTER", Arrays.asList("ID", "Description"));
-    }
-
-    @Override
-    public boolean shouldBeAddedToDictionary() {
-        return true;
-    }
-    
-    /**
-     * get the "Description" field
-     * @return the "Description" field
-     */
-    public String getDescription() {
-        return getGenericFieldValue("Description");
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFFormatHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFFormatHeaderLine.java
deleted file mode 100644
index 74f4d5e..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFFormatHeaderLine.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-
-/**
- * @author ebanks
- *         <p>
- *         Class VCFFormatHeaderLine
- *         </p>
- *         <p>
- *         A class representing a key=value entry for genotype FORMAT fields in the VCF header</p>
- */
-public class VCFFormatHeaderLine extends VCFCompoundHeaderLine {
-
-    public VCFFormatHeaderLine(String name, int count, VCFHeaderLineType type, String description) {
-        super(name, count, type, description, SupportedHeaderLineType.FORMAT);
-        if (type == VCFHeaderLineType.Flag)
-            throw new IllegalArgumentException("Flag is an unsupported type for format fields");
-    }
-
-    public VCFFormatHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) {
-        super(name, count, type, description, SupportedHeaderLineType.FORMAT);
-    }
-
-    public VCFFormatHeaderLine(String line, VCFHeaderVersion version) {
-        super(line, version, SupportedHeaderLineType.FORMAT);
-    }
-
-    // format fields do not allow flag values (that wouldn't make much sense, how would you encode this in the genotype).
-    @Override
-    boolean allowFlagValues() {
-        return false;
-    }
-
-    @Override
-    public boolean shouldBeAddedToDictionary() {
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeader.java b/src/main/java/htsjdk/variant/vcf/VCFHeader.java
deleted file mode 100644
index 30dce37..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeader.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.VariantContextComparator;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-
-/**
- * A class to represent a VCF header
- *
- * @author aaron
- * NOTE: This class stores header lines in lots of places. The original author noted that this should
- * be cleaned up at some point in the future (jgentry - 5/2013)
- */
-public class VCFHeader implements Serializable {
-    public static final long serialVersionUID = 1L;
-
-    // the mandatory header fields
-    public enum HEADER_FIELDS {
-        CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO
-    }
-
-    // the associated meta data
-    private final Set<VCFHeaderLine> mMetaData = new LinkedHashSet<VCFHeaderLine>();
-    private final Map<String, VCFInfoHeaderLine> mInfoMetaData = new LinkedHashMap<String, VCFInfoHeaderLine>();
-    private final Map<String, VCFFormatHeaderLine> mFormatMetaData = new LinkedHashMap<String, VCFFormatHeaderLine>();
-    private final Map<String, VCFFilterHeaderLine> mFilterMetaData = new LinkedHashMap<String, VCFFilterHeaderLine>();
-    private final Map<String, VCFHeaderLine> mOtherMetaData = new LinkedHashMap<String, VCFHeaderLine>();
-    private final List<VCFContigHeaderLine> contigMetaData = new ArrayList<VCFContigHeaderLine>();
-
-    // the list of auxillary tags
-    private final List<String> mGenotypeSampleNames = new ArrayList<String>();
-
-    // the character string that indicates meta data
-    public static final String METADATA_INDICATOR = "##";
-
-    // the header string indicator
-    public static final String HEADER_INDICATOR = "#";
-
-    public static final String SOURCE_KEY = "source";
-    public static final String REFERENCE_KEY = "reference";
-    public static final String CONTIG_KEY = "contig";
-    public static final String INTERVALS_KEY = "intervals";
-    public static final String EXCLUDE_INTERVALS_KEY = "excludeIntervals";
-    public static final String INTERVAL_MERGING_KEY = "interval_merging";
-    public static final String INTERVAL_SET_RULE_KEY = "interval_set_rule";
-    public static final String INTERVAL_PADDING_KEY = "interval_padding";
-
-    // were the input samples sorted originally (or are we sorting them)?
-    private boolean samplesWereAlreadySorted = true;
-
-    // cache for efficient conversion of VCF -> VariantContext
-    private ArrayList<String> sampleNamesInOrder = null;
-    private HashMap<String, Integer> sampleNameToOffset = null;
-
-    private boolean writeEngineHeaders = true;
-    private boolean writeCommandLine = true;
-
-    /**
-     * Create an empty VCF header with no header lines and no samples
-     */
-    public VCFHeader() {
-        this(Collections.<VCFHeaderLine>emptySet(), Collections.<String>emptySet());
-    }
-
-    /**
-     * create a VCF header, given a list of meta data and auxiliary tags
-     *
-     * @param metaData     the meta data associated with this header
-     */
-    public VCFHeader(final Set<VCFHeaderLine> metaData) {
-        mMetaData.addAll(metaData);
-        removeVCFVersionLines(mMetaData);
-        createLookupEntriesForAllHeaderLines();
-        checkForDeprecatedGenotypeLikelihoodsKey();
-    }
-
-    /**
-     * Creates a deep copy of the given VCFHeader, duplicating all its metadata and
-     * sample names.
-     */
-    public VCFHeader(final VCFHeader toCopy) {
-        this(toCopy.mMetaData, toCopy.mGenotypeSampleNames);
-    }
-
-    /**
-     * create a VCF header, given a list of meta data and auxillary tags
-     *
-     * @param metaData            the meta data associated with this header
-     * @param genotypeSampleNames the sample names
-     */
-    public VCFHeader(final Set<VCFHeaderLine> metaData, final Set<String> genotypeSampleNames) {
-        this(metaData, new ArrayList<String>(genotypeSampleNames));
-    }
-
-    public VCFHeader(final Set<VCFHeaderLine> metaData, final List<String> genotypeSampleNames) {
-        this(metaData);
-
-        if ( genotypeSampleNames.size() != new HashSet<String>(genotypeSampleNames).size() )
-            throw new TribbleException.InvalidHeader("BUG: VCF header has duplicate sample names");
-
-        mGenotypeSampleNames.addAll(genotypeSampleNames);
-        samplesWereAlreadySorted = ParsingUtils.isSorted(genotypeSampleNames);
-        buildVCFReaderMaps(genotypeSampleNames);
-    }
-
-    /**
-     * Tell this VCF header to use pre-calculated sample name ordering and the
-     * sample name -> offset map.  This assumes that all VariantContext created
-     * using this header (i.e., read by the VCFCodec) will have genotypes
-     * occurring in the same order
-     *
-     * @param genotypeSampleNamesInAppearenceOrder genotype sample names, must iterator in order of appearance
-     */
-    private void buildVCFReaderMaps(final Collection<String> genotypeSampleNamesInAppearenceOrder) {
-        sampleNamesInOrder = new ArrayList<String>(genotypeSampleNamesInAppearenceOrder.size());
-        sampleNameToOffset = new HashMap<String, Integer>(genotypeSampleNamesInAppearenceOrder.size());
-
-        int i = 0;
-        for (final String name : genotypeSampleNamesInAppearenceOrder) {
-            sampleNamesInOrder.add(name);
-            sampleNameToOffset.put(name, i++);
-        }
-        Collections.sort(sampleNamesInOrder);
-    }
-
-
-    /**
-     * Adds a new line to the VCFHeader. If there is an existing header line of the
-     * same type with the same key, the new line is not added and the existing line
-     * is preserved.
-     *
-     * @param headerLine header line to attempt to add
-     */
-    public void addMetaDataLine(final VCFHeaderLine headerLine) {
-        // Try to create a lookup entry for the new line. If this succeeds (because there was
-        // no line of this type with the same key), add the line to our master list of header
-        // lines in mMetaData.
-        if ( addMetadataLineLookupEntry(headerLine) ) {
-            mMetaData.add(headerLine);
-            checkForDeprecatedGenotypeLikelihoodsKey();
-        }
-    }
-
-    /**
-     * @return all of the VCF header lines of the ##contig form in order, or an empty list if none were present
-     */
-    public List<VCFContigHeaderLine> getContigLines() {
-        return Collections.unmodifiableList(contigMetaData);
-    }
-
-    /**
-     * Returns the contigs in this VCF file as a SAMSequenceDictionary. Returns null if contigs lines are
-     * not present in the header. Throws SAMException if one or more contig lines do not have length
-     * information.
-     */
-    public SAMSequenceDictionary getSequenceDictionary() {
-        final List<VCFContigHeaderLine> contigHeaderLines = this.getContigLines();
-        if (contigHeaderLines.isEmpty()) return null;
-
-        final List<SAMSequenceRecord> sequenceRecords = new ArrayList<SAMSequenceRecord>(contigHeaderLines.size());
-        for (final VCFContigHeaderLine contigHeaderLine : contigHeaderLines) {
-            sequenceRecords.add(contigHeaderLine.getSAMSequenceRecord());
-        }
-
-        return new SAMSequenceDictionary(sequenceRecords);
-    }
-
-    /**
-     * Completely replaces the contig records in this header with those in the given SAMSequenceDictionary.
-     */
-    public void setSequenceDictionary(final SAMSequenceDictionary dictionary) {
-        this.contigMetaData.clear();
-
-        // Also need to remove contig record lines from mMetaData
-        final List<VCFHeaderLine> toRemove = new ArrayList<VCFHeaderLine>();
-        for (final VCFHeaderLine line : mMetaData) {
-            if (line instanceof VCFContigHeaderLine) {
-                toRemove.add(line);
-            }
-        }
-        mMetaData.removeAll(toRemove);
-        for (final SAMSequenceRecord record : dictionary.getSequences()) {
-            contigMetaData.add(new VCFContigHeaderLine(record, record.getAssembly()));
-        }
-
-        this.mMetaData.addAll(contigMetaData);
-    }
-
-    public VariantContextComparator getVCFRecordComparator() {
-        return new VariantContextComparator(this.getContigLines());
-    }
-
-    /**
-     * @return all of the VCF FILTER lines in their original file order, or an empty list if none were present
-     */
-    public List<VCFFilterHeaderLine> getFilterLines() {
-        final List<VCFFilterHeaderLine> filters = new ArrayList<VCFFilterHeaderLine>();
-        for (final VCFHeaderLine line : mMetaData) {
-            if ( line instanceof VCFFilterHeaderLine )  {
-                filters.add((VCFFilterHeaderLine)line);
-            }
-        }
-        return filters;
-    }
-
-    /**
-     * @return all of the VCF FILTER lines in their original file order, or an empty list if none were present
-     */
-    public List<VCFIDHeaderLine> getIDHeaderLines() {
-        final List<VCFIDHeaderLine> filters = new ArrayList<VCFIDHeaderLine>();
-        for (final VCFHeaderLine line : mMetaData) {
-            if (line instanceof VCFIDHeaderLine)  {
-                filters.add((VCFIDHeaderLine)line);
-            }
-        }
-        return filters;
-    }
-
-    /**
-     * Remove all lines with a VCF version tag from the provided set of header lines
-     */
-    private void removeVCFVersionLines( final Set<VCFHeaderLine> headerLines ) {
-        final List<VCFHeaderLine> toRemove = new ArrayList<VCFHeaderLine>();
-        for (final VCFHeaderLine line : headerLines) {
-            if (VCFHeaderVersion.isFormatString(line.getKey())) {
-                toRemove.add(line);
-            }
-        }
-        headerLines.removeAll(toRemove);
-    }
-
-    /**
-     * Creates lookup table entries for all header lines in mMetaData.
-     */
-    private void createLookupEntriesForAllHeaderLines() {
-        for (final VCFHeaderLine line : mMetaData) {
-            addMetadataLineLookupEntry(line);
-        }
-    }
-
-    /**
-     * Add a single header line to the appropriate type-specific lookup table (but NOT to the master
-     * list of lines in mMetaData -- this must be done separately if desired).
-     *
-     * If a header line is present that has the same key as an existing line, it will not be added.  A warning
-     * will be shown if this occurs when GeneralUtils.DEBUG_MODE_ENABLED is true, otherwise this will occur
-     * silently.
-     *
-     * @param line header line to attempt to add to its type-specific lookup table
-     * @return true if the line was added to the appropriate lookup table, false if there was an existing
-     *         line with the same key and the new line was not added
-     */
-    private boolean addMetadataLineLookupEntry(final VCFHeaderLine line) {
-        if ( line instanceof VCFInfoHeaderLine )  {
-            final VCFInfoHeaderLine infoLine = (VCFInfoHeaderLine)line;
-            return addMetaDataLineMapLookupEntry(mInfoMetaData, infoLine.getID(), infoLine);
-        } else if ( line instanceof VCFFormatHeaderLine ) {
-            final VCFFormatHeaderLine formatLine = (VCFFormatHeaderLine)line;
-            return addMetaDataLineMapLookupEntry(mFormatMetaData, formatLine.getID(), formatLine);
-        } else if ( line instanceof VCFFilterHeaderLine ) {
-            final VCFFilterHeaderLine filterLine = (VCFFilterHeaderLine)line;
-            return addMetaDataLineMapLookupEntry(mFilterMetaData, filterLine.getID(), filterLine);
-        } else if ( line instanceof VCFContigHeaderLine ) {
-            return addContigMetaDataLineLookupEntry((VCFContigHeaderLine) line);
-        } else {
-            return addMetaDataLineMapLookupEntry(mOtherMetaData, line.getKey(), line);
-        }
-    }
-
-    /**
-     * Add a contig header line to the lookup list for contig lines (contigMetaData). If there's
-     * already a contig line with the same ID, does not add the line.
-     *
-     * Note: does not add the contig line to the master list of header lines in mMetaData --
-     *       this must be done separately if desired.
-     *
-     * @param line contig header line to add
-     * @return true if line was added to the list of contig lines, otherwise false
-     */
-    private boolean addContigMetaDataLineLookupEntry(final VCFContigHeaderLine line) {
-        for (VCFContigHeaderLine vcfContigHeaderLine : contigMetaData) {
-            // if we are trying to add a contig for the same ID
-            if (vcfContigHeaderLine.getID().equals(line.getID())) {
-                if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                    System.err.println("Found duplicate VCF contig header lines for " + line.getID() + "; keeping the first only" );
-                }
-                // do not add this contig if it exists
-                return false;
-            }
-        }
-
-        contigMetaData.add(line);
-        return true;
-    }
-
-    /**
-     * Add a header line to the provided map at a given key.  If the key already exists, it will not be replaced.
-     * If it does already exist and GeneralUtils.DEBUG_MODE_ENABLED is true, it will issue warnings about duplicates,
-     * otherwise it will silently leave the existing key/line pair as is.
-     *
-     * Note: does not add the header line to the master list of header lines in mMetaData --
-     *       this must be done separately if desired.
-     *
-     * @param map a map from each key to the associated VCFHeaderLine
-     * @param key the key to insert this line at
-     * @param line the line to insert at this key
-     * @param <T> a type of vcf header line that extends VCFHeaderLine
-     * @return true if the line was added to the map, false if it was not added because there's already a line with that key
-     */
-    private <T extends VCFHeaderLine> boolean addMetaDataLineMapLookupEntry(final Map<String, T> map, final String key, final T line) {
-        if ( map.containsKey(key) ) {
-            if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                System.err.println("Found duplicate VCF header lines for " + key + "; keeping the first only" );
-            }
-            return false;
-        }
-
-        map.put(key, line);
-        return true;
-    }
-
-    /**
-     * Check for the presence of a format line with the deprecated key {@link VCFConstants#GENOTYPE_LIKELIHOODS_KEY}.
-     * If one is present, and there isn't a format line with the key {@link VCFConstants#GENOTYPE_PL_KEY}, adds
-     * a new format line with the key {@link VCFConstants#GENOTYPE_PL_KEY}.
-     */
-    private void checkForDeprecatedGenotypeLikelihoodsKey() {
-        if ( hasFormatLine(VCFConstants.GENOTYPE_LIKELIHOODS_KEY) && ! hasFormatLine(VCFConstants.GENOTYPE_PL_KEY) ) {
-            if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                System.err.println("Found " + VCFConstants.GENOTYPE_LIKELIHOODS_KEY + " format, but no "
-                        + VCFConstants.GENOTYPE_PL_KEY + " field.  We now only manage PL fields internally"
-                        + " automatically adding a corresponding PL field to your VCF header");
-            }
-            addMetaDataLine(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_PL_KEY, VCFHeaderLineCount.G, VCFHeaderLineType.Integer, "Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification"));
-        }
-    }
-
-    /**
-     * get the header fields in order they're presented in the input file (which is now required to be
-     * the order presented in the spec).
-     *
-     * @return a set of the header fields, in order
-     */
-    public Set<HEADER_FIELDS> getHeaderFields() {
-        return new LinkedHashSet<HEADER_FIELDS>(Arrays.asList(HEADER_FIELDS.values()));
-    }
-
-    /**
-     * get the meta data, associated with this header, in sorted order
-     *
-     * @return a set of the meta data
-     */
-    public Set<VCFHeaderLine> getMetaDataInInputOrder() {
-        return makeGetMetaDataSet(mMetaData);
-    }
-
-    public Set<VCFHeaderLine> getMetaDataInSortedOrder() {
-        return makeGetMetaDataSet(new TreeSet<VCFHeaderLine>(mMetaData));
-    }
-
-    private static Set<VCFHeaderLine> makeGetMetaDataSet(final Set<VCFHeaderLine> headerLinesInSomeOrder) {
-        final Set<VCFHeaderLine> lines = new LinkedHashSet<VCFHeaderLine>();
-        lines.add(new VCFHeaderLine(VCFHeaderVersion.VCF4_2.getFormatString(), VCFHeaderVersion.VCF4_2.getVersionString()));
-        lines.addAll(headerLinesInSomeOrder);
-        return Collections.unmodifiableSet(lines);
-    }
-
-    /**
-     * Get the VCFHeaderLine whose key equals key.  Returns null if no such line exists
-     * @param key
-     * @return
-     */
-    public VCFHeaderLine getMetaDataLine(final String key) {
-        for (final VCFHeaderLine line: mMetaData) {
-            if ( line.getKey().equals(key) )
-                return line;
-        }
-
-        return null;
-    }
-
-    /**
-     * get the genotyping sample names
-     *
-     * @return a list of the genotype column names, which may be empty if hasGenotypingData() returns false
-     */
-    public List<String> getGenotypeSamples() {
-        return mGenotypeSampleNames;
-    }
-
-    public int getNGenotypeSamples() {
-        return mGenotypeSampleNames.size();
-    }
-
-    /**
-     * do we have genotyping data?
-     *
-     * @return true if we have genotyping columns, false otherwise
-     */
-    public boolean hasGenotypingData() {
-        return getNGenotypeSamples() > 0;
-    }
-
-    /**
-     * were the input samples sorted originally?
-     *
-     * @return true if the input samples were sorted originally, false otherwise
-     */
-    public boolean samplesWereAlreadySorted() {
-        return samplesWereAlreadySorted;
-    }
-
-    /** @return the column count */
-    public int getColumnCount() {
-        return HEADER_FIELDS.values().length + (hasGenotypingData() ? mGenotypeSampleNames.size() + 1 : 0);
-    }
-
-    /**
-     * Returns the INFO HeaderLines in their original ordering
-     */
-    public Collection<VCFInfoHeaderLine> getInfoHeaderLines() {
-        return mInfoMetaData.values();
-    }
-
-    /**
-     * Returns the FORMAT HeaderLines in their original ordering
-     */
-    public Collection<VCFFormatHeaderLine> getFormatHeaderLines() {
-        return mFormatMetaData.values();
-    }
-
-    /**
-     * @param id the header key name
-     * @return the meta data line, or null if there is none
-     */
-    public VCFInfoHeaderLine getInfoHeaderLine(final String id) {
-        return mInfoMetaData.get(id);
-    }
-
-    /**
-     * @param id    the header key name
-     * @return the meta data line, or null if there is none
-     */
-    public VCFFormatHeaderLine getFormatHeaderLine(final String id) {
-        return mFormatMetaData.get(id);
-    }
-
-    /**
-     * @param id    the header key name
-     * @return the meta data line, or null if there is none
-     */
-    public VCFFilterHeaderLine getFilterHeaderLine(final String id) {
-        return mFilterMetaData.get(id);
-    }
-
-    public boolean hasInfoLine(final String id) {
-        return getInfoHeaderLine(id) != null;
-    }
-
-    public boolean hasFormatLine(final String id) {
-        return getFormatHeaderLine(id) != null;
-    }
-
-    public boolean hasFilterLine(final String id) {
-        return getFilterHeaderLine(id) != null;
-    }
-
-    /**
-     * @param key    the header key name
-     * @return the meta data line, or null if there is none
-     */
-    public VCFHeaderLine getOtherHeaderLine(final String key) {
-        return mOtherMetaData.get(key);
-    }
-
-    /**
-     * Returns the other HeaderLines in their original ordering
-     */
-    public Collection<VCFHeaderLine> getOtherHeaderLines() {
-        return mOtherMetaData.values();
-    }
-
-    /**
-     * If true additional engine headers will be written to the VCF, otherwise only the walker headers will be output.
-     * @return true if additional engine headers will be written to the VCF
-     */
-    public boolean isWriteEngineHeaders() {
-        return writeEngineHeaders;
-    }
-
-    /**
-     * If true additional engine headers will be written to the VCF, otherwise only the walker headers will be output.
-     * @param writeEngineHeaders true if additional engine headers will be written to the VCF
-     */
-    public void setWriteEngineHeaders(final boolean writeEngineHeaders) {
-        this.writeEngineHeaders = writeEngineHeaders;
-    }
-
-    /**
-     * If true, and isWriteEngineHeaders also returns true, the command line will be written to the VCF.
-     * @return true if the command line will be written to the VCF
-     */
-    public boolean isWriteCommandLine() {
-        return writeCommandLine;
-    }
-
-    /**
-     * If true, and isWriteEngineHeaders also returns true, the command line will be written to the VCF.
-     * @param writeCommandLine true if the command line will be written to the VCF
-     */
-    public void setWriteCommandLine(final boolean writeCommandLine) {
-        this.writeCommandLine = writeCommandLine;
-    }
-
-    public ArrayList<String> getSampleNamesInOrder() {
-        return sampleNamesInOrder;
-    }
-
-    public HashMap<String, Integer> getSampleNameToOffset() {
-        return sampleNameToOffset;
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder b = new StringBuilder();
-        b.append("[VCFHeader:");
-        for ( final VCFHeaderLine line : mMetaData )
-            b.append("\n\t").append(line);
-        return b.append("\n]").toString();
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFHeaderLine.java
deleted file mode 100644
index c4c1e3b..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeaderLine.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-
-import java.io.Serializable;
-import java.util.Map;
-
-
-/**
- * @author ebanks
- *         <p>
- *         Class VCFHeaderLine
- *         </p>
- *         <p>
- *         A class representing a key=value entry in the VCF header
- *         </p>
- */
-public class VCFHeaderLine implements Comparable, Serializable {
-    public static final long serialVersionUID = 1L;
-
-    protected static final boolean ALLOW_UNBOUND_DESCRIPTIONS = true;
-    protected static final String UNBOUND_DESCRIPTION = "Not provided in original VCF header";
-
-    private String mKey = null;
-    private String mValue = null;
-
-    /**
-     * create a VCF header line
-     *
-     * @param key     the key for this header line
-     * @param value   the value for this header line
-     */
-    public VCFHeaderLine(String key, String value) {
-        if ( key == null )
-            throw new IllegalArgumentException("VCFHeaderLine: key cannot be null");
-        if ( key.contains("<") || key.contains(">") )
-            throw new IllegalArgumentException("VCFHeaderLine: key cannot contain angle brackets");
-        if ( key.contains("=") )
-            throw new IllegalArgumentException("VCFHeaderLine: key cannot contain an equals sign");
-        mKey = key;
-        mValue = value;
-    }
-
-    /**
-     * Get the key
-     *
-     * @return the key
-     */
-    public String getKey() {
-        return mKey;
-    }
-
-    /**
-     * Get the value
-     *
-     * @return the value
-     */
-    public String getValue() {
-        return mValue;
-    }
-
-    /**
-     * By default the header lines won't be added to the dictionary, unless this method will be override (for example in FORMAT, INFO or FILTER header lines)
-     *
-     * @return false
-     */
-    public boolean shouldBeAddedToDictionary() {
-        return false;
-    }
-
-    public String toString() {
-        return toStringEncoding();
-    }
-
-    /**
-     * Should be overloaded in sub classes to do subclass specific
-     *
-     * @return the string encoding
-     */
-    protected String toStringEncoding() {
-        return mKey + "=" + mValue;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if ( this == o ) {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() ) {
-            return false;
-        }
-
-        final VCFHeaderLine that = (VCFHeaderLine) o;
-        return mKey.equals(that.mKey) &&                                             // key not nullable
-               (mValue != null ? mValue.equals(that.mValue) : that.mValue == null);  // value is nullable
-    }
-
-    @Override
-    public int hashCode() {
-        int result = mKey.hashCode();
-        result = 31 * result + (mValue != null ? mValue.hashCode() : 0);
-        return result;
-    }
-
-    public int compareTo(Object other) {
-        return toString().compareTo(other.toString());
-    }
-
-    /**
-     * @param line    the line
-     * @return true if the line is a VCF meta data line, or false if it is not
-     */
-    public static boolean isHeaderLine(String line) {
-        return line != null && !line.isEmpty() && VCFHeader.HEADER_INDICATOR.equals(line.substring(0,1));
-    }
-
-    /**
-     * create a string of a mapping pair for the target VCF version
-     * @param keyValues a mapping of the key->value pairs to output
-     * @return a string, correctly formatted
-     */
-    public static String toStringEncoding(Map<String, ? extends Object> keyValues) {
-        StringBuilder builder = new StringBuilder();
-        builder.append('<');
-        boolean start = true;
-        for (Map.Entry<String,?> entry : keyValues.entrySet()) {
-            if (start) start = false;
-            else builder.append(',');
-
-            if ( entry.getValue() == null ) throw new TribbleException.InternalCodecException("Header problem: unbound value at " + entry + " from " + keyValues);
-
-            builder.append(entry.getKey());
-            builder.append('=');
-            builder.append(entry.getValue().toString().contains(",") ||
-                           entry.getValue().toString().contains(" ") ||
-                           entry.getKey().equals("Description") ? "\""+ escapeQuotes(entry.getValue().toString()) + "\"" : entry.getValue());
-        }
-        builder.append('>');
-        return builder.toString();
-    }
-
-    private static String escapeQuotes(final String value) {
-        // java escaping in a string literal makes this harder to read than it should be
-        // without string literal escaping and quoting the regex would be: replaceAll( ([^\])" , $1\" )
-        // ie replace: something that's not a backslash ([^\]) followed by a double quote
-        // with: the thing that wasn't a backslash ($1), followed by a backslash, followed by a double quote
-        return value.replaceAll("([^\\\\])\"", "$1\\\\\"");
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineCount.java b/src/main/java/htsjdk/variant/vcf/VCFHeaderLineCount.java
deleted file mode 100644
index 080153a..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineCount.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-/**
- * the count encodings we use for fields in VCF header lines
- */
-public enum VCFHeaderLineCount {
-    INTEGER, A, R, G, UNBOUNDED;
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineTranslator.java b/src/main/java/htsjdk/variant/vcf/VCFHeaderLineTranslator.java
deleted file mode 100644
index 071d815..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineTranslator.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A class for translating between vcf header versions
- */
-public class VCFHeaderLineTranslator {
-    private static Map<VCFHeaderVersion,VCFLineParser> mapping;
-
-    static {
-        mapping = new HashMap<VCFHeaderVersion,VCFLineParser>();
-        mapping.put(VCFHeaderVersion.VCF4_0,new VCF4Parser());
-        mapping.put(VCFHeaderVersion.VCF4_1,new VCF4Parser());
-        mapping.put(VCFHeaderVersion.VCF4_2,new VCF4Parser());
-        mapping.put(VCFHeaderVersion.VCF3_3,new VCF3Parser());
-        mapping.put(VCFHeaderVersion.VCF3_2,new VCF3Parser());
-    }
-
-    public static Map<String,String> parseLine(VCFHeaderVersion version, String valueLine, List<String> expectedTagOrder) {
-        return mapping.get(version).parseLine(valueLine,expectedTagOrder);
-    }
-}
-
-
-interface VCFLineParser {
-    public Map<String,String> parseLine(String valueLine, List<String> expectedTagOrder);
-}
-
-
-/**
- * a class that handles the to and from disk for VCF 4 lines
- */
-class VCF4Parser implements VCFLineParser {
-    /**
-     * parse a VCF4 line
-     * @param valueLine the line
-     * @return a mapping of the tags parsed out
-     */
-    public Map<String, String> parseLine(String valueLine, List<String> expectedTagOrder) {
-        // our return map
-        Map<String, String> ret = new LinkedHashMap<String, String>();
-
-        // a builder to store up characters as we go
-        StringBuilder builder = new StringBuilder();
-
-        // store the key when we're parsing out the values
-        String key = "";
-
-        // where are we in the stream of characters?
-        int index = 0;
-
-        // are we inside a quotation? we don't special case ',' then
-        boolean inQuote = false;
-
-        // if we are in a quote and we see a backslash followed by quote, treat it as an escaped quote
-        boolean escape = false;
-
-        // a little switch machine to parse out the tags. Regex ended up being really complicated and ugly [yes, but this machine is getting ugly now... MAD]
-        for (char c: valueLine.toCharArray()) {
-            if ( c == '\"') {
-                if (escape) {
-                    builder.append(c);
-                    escape = false;
-                } else {
-                    inQuote = !inQuote;
-                }
-            } else if ( inQuote ) {
-                if (escape) {
-                    // in VCF 4.2 spec the only valid characters to escape are double quote and backslash; otherwise copy the backslash through
-                    if (c == '\\') {
-                        builder.append(c);
-                    } else {
-                        builder.append('\\');
-                        builder.append(c);
-                    }
-                    escape = false;
-                } else if (c != '\\') {
-                    builder.append(c);
-                } else {
-                    escape = true;
-                }
-            } else {
-                escape = false;
-                switch (c) {
-                    case ('<') : if (index == 0) break; // if we see a open bracket at the beginning, ignore it
-                    case ('>') : if (index == valueLine.length()-1) ret.put(key,builder.toString().trim()); break; // if we see a close bracket, and we're at the end, add an entry to our list
-                    case ('=') : key = builder.toString().trim(); builder = new StringBuilder(); break; // at an equals, copy the key and reset the builder
-                    case (',') : ret.put(key,builder.toString().trim()); builder = new StringBuilder(); break; // drop the current key value to the return map
-                    default: builder.append(c); // otherwise simply append to the current string
-                }
-            }
-            
-            index++;
-        }
-
-        if (inQuote) {
-            throw new TribbleException.InvalidHeader("Unclosed quote in header line value " + valueLine);
-        }
-
-        // validate the tags against the expected list
-        index = 0;
-        if ( expectedTagOrder != null ) {
-            if ( ret.size() > expectedTagOrder.size() )
-                throw new TribbleException.InvalidHeader("unexpected tag count " + ret.size() + " in line " + valueLine);
-            for ( String str : ret.keySet() ) {
-                if ( !expectedTagOrder.get(index).equals(str) )
-                    throw new TribbleException.InvalidHeader("Unexpected tag " + str + " in line " + valueLine);
-                index++;
-            }
-        }
-        return ret;
-    }
-}
-
-class VCF3Parser implements VCFLineParser {
-
-    public Map<String, String> parseLine(String valueLine, List<String> expectedTagOrder) {
-        // our return map
-        Map<String, String> ret = new LinkedHashMap<String, String>();
-
-        // a builder to store up characters as we go
-        StringBuilder builder = new StringBuilder();
-
-        // where are we in the stream of characters?
-        int index = 0;
-        // where in the expected tag order are we?
-        int tagIndex = 0;
-
-        // are we inside a quotation? we don't special case ',' then
-        boolean inQuote = false;
-
-        // a little switch machine to parse out the tags. Regex ended up being really complicated and ugly
-        for (char c: valueLine.toCharArray()) {
-            switch (c) {
-                case ('\"') : inQuote = !inQuote; break; // a quote means we ignore ',' in our strings, keep track of it
-                case (',') : if (!inQuote) { ret.put(expectedTagOrder.get(tagIndex++),builder.toString()); builder = new StringBuilder(); break; } // drop the current key value to the return map
-                default: builder.append(c); // otherwise simply append to the current string
-            }
-            index++;
-        }
-        ret.put(expectedTagOrder.get(tagIndex++),builder.toString());
-        
-        // validate the tags against the expected list
-        index = 0;
-        if (tagIndex != expectedTagOrder.size()) throw new IllegalArgumentException("Unexpected tag count " + tagIndex + ", we expected " + expectedTagOrder.size());
-        for (String str : ret.keySet()){
-            if (!expectedTagOrder.get(index).equals(str)) throw new IllegalArgumentException("Unexpected tag " + str + " in string " + valueLine);
-            index++;
-        }
-        return ret;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineType.java b/src/main/java/htsjdk/variant/vcf/VCFHeaderLineType.java
deleted file mode 100644
index 785449d..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeaderLineType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-/**
- * the type encodings we use for fields in VCF header lines
- */
-public enum VCFHeaderLineType {
-    Integer, Float, String, Character, Flag;
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFHeaderVersion.java b/src/main/java/htsjdk/variant/vcf/VCFHeaderVersion.java
deleted file mode 100644
index b45d423..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFHeaderVersion.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-
-/**
- * information that identifies each header version
- */
-public enum VCFHeaderVersion {
-    VCF3_2("VCRv3.2","format"),
-    VCF3_3("VCFv3.3","fileformat"),
-    VCF4_0("VCFv4.0","fileformat"),
-    VCF4_1("VCFv4.1","fileformat"),
-    VCF4_2("VCFv4.2","fileformat");
-
-    private final String versionString;
-    private final String formatString;
-
-    /**
-     * create the enum, privately, using:
-     * @param vString the version string
-     * @param fString the format string
-     */
-    VCFHeaderVersion(String vString, String fString) {
-        this.versionString = vString;
-        this.formatString = fString;
-    }
-
-    /**
-     * get the header version
-     * @param version the version string
-     * @return a VCFHeaderVersion object
-     */
-    public static VCFHeaderVersion toHeaderVersion(String version) {
-        version = clean(version);
-        for (VCFHeaderVersion hv : VCFHeaderVersion.values())
-            if (hv.versionString.equals(version))
-                    return hv;
-        return null;
-    }
-
-    /**
-     * are we a valid version string of some type
-     * @param version the version string
-     * @return true if we're valid of some type, false otherwise
-     */
-    public static boolean isVersionString(String version){
-        return toHeaderVersion(version) != null;
-    }
-
-    /**
-     * are we a valid format string for some type
-     * @param format the format string
-     * @return true if we're valid of some type, false otherwise
-     */
-    public static boolean isFormatString(String format){
-        format = clean(format);
-        for (VCFHeaderVersion hv : VCFHeaderVersion.values())
-            if (hv.formatString.equals(format))
-                return true;
-        return false;
-    }
-
-    public static VCFHeaderVersion getHeaderVersion(String versionLine) {
-        String[] lineFields = versionLine.split("=");
-        if ( lineFields.length != 2 || !isFormatString(lineFields[0].substring(2)) )
-            throw new TribbleException.InvalidHeader(versionLine + " is not a valid VCF version line");
-
-        if ( !isVersionString(lineFields[1]) )
-            throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
-
-        return toHeaderVersion(lineFields[1]);
-    }
-
-    /**
-     * Utility function to clean up a VCF header string
-     * 
-     * @param s string
-     * @return  trimmed version of s
-     */
-    private static String clean(String s) {
-        return s.trim();
-    }
-
-    /**
-     * Determines whether this version is at least as recent as a given version
-     *
-     * @param target   the target version to compare against
-     * @return true if this version is at least as recent as the target version, false otherwise
-     */
-    public boolean isAtLeastAsRecentAs(final VCFHeaderVersion target) {
-        switch (target) {
-            case VCF4_2:
-                return this == VCF4_2;
-            case VCF4_1:
-                return this == VCF4_1 || this == VCF4_2;
-            case VCF4_0:
-                return this != VCF3_2 && this != VCF3_3;
-            case VCF3_3:
-                return this != VCF3_2;
-            case VCF3_2:
-            default:
-                return true;
-        }
-    }
-
-    public String getVersionString() {
-        return versionString;
-    }
-
-    public String getFormatString() {
-        return formatString;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFIDHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFIDHeaderLine.java
deleted file mode 100644
index 246f89e..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFIDHeaderLine.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-/** an interface for ID-based header lines **/
-public interface VCFIDHeaderLine {
-    String getID();
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFInfoHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFInfoHeaderLine.java
deleted file mode 100644
index afa1f81..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFInfoHeaderLine.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-
-/**
- * @author ebanks
- *         <p>
- *         Class VCFInfoHeaderLine
- *         </p>
- *         <p>
- *         A class representing a key=value entry for INFO fields in the VCF header
- *         </p>
- */
-public class VCFInfoHeaderLine extends VCFCompoundHeaderLine {
-    public VCFInfoHeaderLine(String name, int count, VCFHeaderLineType type, String description) {
-        super(name, count, type, description, SupportedHeaderLineType.INFO);
-    }
-
-    public VCFInfoHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) {
-        super(name, count, type, description, SupportedHeaderLineType.INFO);
-    }
-
-    public VCFInfoHeaderLine(String line, VCFHeaderVersion version) {
-        super(line, version, SupportedHeaderLineType.INFO);
-    }
-
-    // info fields allow flag values
-    @Override
-    boolean allowFlagValues() {
-        return true;
-    }
-
-    @Override
-    public boolean shouldBeAddedToDictionary() {
-        return true;
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFRecordCodec.java b/src/main/java/htsjdk/variant/vcf/VCFRecordCodec.java
deleted file mode 100644
index 8fe9b67..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFRecordCodec.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.samtools.util.SortingCollection;
-import htsjdk.variant.variantcontext.VariantContext;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * Writes VariantContext instances to an OutputStream without headers or metadata. For use
- * with SortingCollection ONLY.
- */
-public class VCFRecordCodec implements SortingCollection.Codec<VariantContext> {
-	private final VCFCodec vcfDecoder = new VCFCodec();
-	private final VCFEncoder vcfEncoder;
-	private PrintStream outputStream = null;
-	private BufferedReader inputReader = null;
-
-	public VCFRecordCodec(final VCFHeader header) {
-		this(header, false);
-    }
-
-	public VCFRecordCodec(final VCFHeader header, final boolean allowMissingFieldsInHeader) {
-		this.vcfEncoder = new VCFEncoder(header, allowMissingFieldsInHeader, false);
-		// Explicitly set the version because it's not available in the header itself.
-		this.vcfDecoder.setVCFHeader(header, VCFHeaderVersion.VCF4_2);
-	}
-
-	@Override
-	public void setOutputStream(final OutputStream stream) {
-		this.outputStream = new PrintStream(stream);
-	}
-
-	@Override
-	public void setInputStream(final InputStream stream) {
-		this.inputReader = new BufferedReader(new InputStreamReader(stream));
-	}
-
-	@Override
-	public void encode(final VariantContext context) {
-		this.outputStream.println(this.vcfEncoder.encode(context));
-	}
-
-	@Override
-	public VariantContext decode() {
-		try {
-			final String line;
-			return ((line = inputReader.readLine()) != null) ? this.vcfDecoder.decode(line) : null;
-		} catch (final IOException ioe) {
-			throw new RuntimeIOException("Could not decode/read a VCF record for a sorting collection: " + ioe.getMessage(), ioe);
-		}
-	}
-
-	@Override
-	public VCFRecordCodec clone() {
-		return new VCFRecordCodec(this.vcfEncoder.getVCFHeader(), this.vcfEncoder.getAllowMissingFieldsInHeader());
-	}
-}
-
diff --git a/src/main/java/htsjdk/variant/vcf/VCFSimpleHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFSimpleHeaderLine.java
deleted file mode 100644
index a5da687..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFSimpleHeaderLine.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * @author ebanks
- * 
- * A class representing a key=value entry for simple VCF header types
- */
-public class VCFSimpleHeaderLine extends VCFHeaderLine implements VCFIDHeaderLine {
-
-    private String name;
-    private Map<String, String> genericFields = new LinkedHashMap<String, String>();
-
-    /**
-     * create a VCF filter header line
-     *
-     * @param key            the key for this header line
-     * @param name           the name for this header line
-     * @param description    description for this header line
-     */
-    public VCFSimpleHeaderLine(String key, String name, String description) {
-        super(key, "");
-        Map<String, String> map = new LinkedHashMap<String, String>(1);
-        map.put("Description", description);
-        initialize(name, map);
-    }
-
-    /**
-     * create a VCF info header line
-     *
-     * @param line      the header line
-     * @param version   the vcf header version
-     * @param key            the key for this header line
-     * @param expectedTagOrdering the tag ordering expected for this header line
-     */
-    public VCFSimpleHeaderLine(final String line, final VCFHeaderVersion version, final String key, final List<String> expectedTagOrdering) {
-        this(key, VCFHeaderLineTranslator.parseLine(version, line, expectedTagOrdering));
-    }
-
-    public VCFSimpleHeaderLine(final String key, final Map<String, String> mapping) {
-        super(key, "");
-        name = mapping.get("ID");
-        initialize(name, mapping);
-    }
-
-	/**
-	 * Returns the String value associated with the given key. Returns null if there is no value. Key
-	 * must not be null.
-	 */
-	String getGenericFieldValue(final String key) {
-		return this.genericFields.get(key);
-	}
-
-    protected void initialize(String name, Map<String, String> genericFields) {
-        if ( name == null || genericFields == null || genericFields.isEmpty() )
-            throw new IllegalArgumentException(String.format("Invalid VCFSimpleHeaderLine: key=%s name=%s", super.getKey(), name));
-        if ( name.contains("<") || name.contains(">") )
-            throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain angle brackets");
-        if ( name.contains("=") )
-            throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain an equals sign");
-
-        this.name = name;
-        this.genericFields.putAll(genericFields);
-    }
-
-    protected String toStringEncoding() {
-        Map<String, Object> map = new LinkedHashMap<String, Object>();
-        map.put("ID", name);
-        map.putAll(genericFields);
-        return getKey() + "=" + VCFHeaderLine.toStringEncoding(map);
-    }
-
-    @Override
-    public boolean equals( final Object o ) {
-        if ( this == o ) {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() || ! super.equals(o) ) {
-            return false;
-        }
-
-        final VCFSimpleHeaderLine that = (VCFSimpleHeaderLine) o;
-        return name.equals(that.name) &&
-               genericFields.equals(that.genericFields);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = super.hashCode();
-        result = 31 * result + name.hashCode();
-        result = 31 * result + genericFields.hashCode();
-        return result;
-    }
-
-    public String getID() {
-        return name;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/htsjdk/variant/vcf/VCFStandardHeaderLines.java b/src/main/java/htsjdk/variant/vcf/VCFStandardHeaderLines.java
deleted file mode 100644
index de2817c..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFStandardHeaderLines.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.utils.GeneralUtils;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Manages header lines for standard VCF <pre>INFO</pre> and <pre>FORMAT</pre> fields.
- *
- * Provides simple mechanisms for
- *  1) registering standard lines,
- *  2) looking them up, and
- *  3) adding them to headers.
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class VCFStandardHeaderLines {
-    /**
-     * Enabling this causes us to repair header lines even if only their descriptions differ.
-     */
-    private final static boolean REPAIR_BAD_DESCRIPTIONS = false;
-    private static Standards<VCFFormatHeaderLine> formatStandards = new Standards<VCFFormatHeaderLine>();
-    private static Standards<VCFInfoHeaderLine> infoStandards = new Standards<VCFInfoHeaderLine>();
-
-    /**
-     * Walks over the VCF header and repairs the standard VCF header lines in it, returning a freshly
-     * allocated {@link VCFHeader} with standard VCF header lines repaired as necessary.
-     */
-    public static VCFHeader repairStandardHeaderLines(final VCFHeader header) {
-        final Set<VCFHeaderLine> newLines = new LinkedHashSet<VCFHeaderLine>(header.getMetaDataInInputOrder().size());
-        for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) {
-            if ( line instanceof VCFFormatHeaderLine ) {
-                line = formatStandards.repair((VCFFormatHeaderLine) line);
-            } else if ( line instanceof VCFInfoHeaderLine) {
-                line = infoStandards.repair((VCFInfoHeaderLine) line);
-            }
-
-            newLines.add(line);
-        }
-
-        return new VCFHeader(newLines, header.getGenotypeSamples());
-    }
-
-    /**
-     * Adds header lines for each of the format fields in IDs to header, returning the set of
-     * {@code IDs} without standard descriptions, unless {@code throwErrorForMissing} is true, in which
-     * case this situation results in a {@link TribbleException}
-     */
-    public static Set<String> addStandardFormatLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final Collection<String> IDs) {
-        return formatStandards.addToHeader(headerLines, IDs, throwErrorForMissing);
-    }
-
-    /**
-     * @see #addStandardFormatLines(java.util.Set, boolean, java.util.Collection)
-     */
-    public static Set<String> addStandardFormatLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final String ... IDs) {
-        return addStandardFormatLines(headerLines, throwErrorForMissing, Arrays.asList(IDs));
-    }
-
-    /**
-     * Returns the standard format line for {@code ID}.
-     * If none exists, return null or throw an exception, depending on {@code throwErrorForMissing}.
-     */
-    public static VCFFormatHeaderLine getFormatLine(final String ID, final boolean throwErrorForMissing) {
-        return formatStandards.get(ID, throwErrorForMissing);
-    }
-
-    /**
-     * Returns the standard format line for {@code ID}.
-     * If none exists, throw an {@link TribbleException}
-     */
-    public static VCFFormatHeaderLine getFormatLine(final String ID) {
-        return formatStandards.get(ID, true);
-    }
-
-    /**
-     * Adds header lines for each of the info fields in {@code IDs} to header, returning the set of
-     * IDs without standard descriptions, unless {@code throwErrorForMissing} is true, in which
-     * case this situation results in a {@link TribbleException}.
-     */
-    public static Set<String> addStandardInfoLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final Collection<String> IDs) {
-        return infoStandards.addToHeader(headerLines, IDs, throwErrorForMissing);
-    }
-
-    /**
-     * @see #addStandardFormatLines(java.util.Set, boolean, java.util.Collection)
-     */
-    public static Set<String> addStandardInfoLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final String ... IDs) {
-        return addStandardInfoLines(headerLines, throwErrorForMissing, Arrays.asList(IDs));
-    }
-
-    /**
-     * Returns the standard info line for {@code ID}.
-     * If none exists, return {@code null} or throw a {@link TribbleException}, depending on {@code throwErrorForMissing}.
-     */
-    public static VCFInfoHeaderLine getInfoLine(final String ID, final boolean throwErrorForMissing) {
-        return infoStandards.get(ID, throwErrorForMissing);
-    }
-
-    /**
-     * Returns the standard info line for {@code ID}.
-     * If none exists throw a {@link TribbleException}.
-     */
-    public static VCFInfoHeaderLine getInfoLine(final String ID) {
-        return getInfoLine(ID, true);
-    }
-
-
-    private static void registerStandard(final VCFInfoHeaderLine line) {
-        infoStandards.add(line);
-    }
-
-    private static void registerStandard(final VCFFormatHeaderLine line) {
-        formatStandards.add(line);
-    }
-
-    //
-    // VCF header line constants
-    //
-    static {
-        // FORMAT lines
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_KEY,           1,                            VCFHeaderLineType.String,  "Genotype"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_QUALITY_KEY,   1,                            VCFHeaderLineType.Integer, "Genotype Quality"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.DEPTH_KEY,              1,                            VCFHeaderLineType.Integer, "Approximate read depth (reads with MQ=255 or with bad mates are filtered)"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_PL_KEY,        VCFHeaderLineCount.G,         VCFHeaderLineType.Integer, "Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_ALLELE_DEPTHS, VCFHeaderLineCount.R,         VCFHeaderLineType.Integer, "Allelic depths for the ref and alt alleles in the order listed"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_FILTER_KEY,    VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String,  "Genotype-level filter"));
-        registerStandard(new VCFFormatHeaderLine(VCFConstants.PHASE_QUALITY_KEY,      1,                            VCFHeaderLineType.Float,   "Read-backed phasing quality"));
-
-        // INFO lines
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.END_KEY,                  1,                    VCFHeaderLineType.Integer, "Stop position of the interval"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.DBSNP_KEY,                0,                    VCFHeaderLineType.Flag,    "dbSNP Membership"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.DEPTH_KEY,                1,                    VCFHeaderLineType.Integer, "Approximate read depth; some reads may have been filtered"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.STRAND_BIAS_KEY,          1,                    VCFHeaderLineType.Float,   "Strand Bias"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY,     VCFHeaderLineCount.A, VCFHeaderLineType.Float,   "Allele Frequency, for each ALT allele, in the same order as listed"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY,         VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_NUMBER_KEY,        1,                    VCFHeaderLineType.Integer, "Total number of alleles in called genotypes"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.MAPPING_QUALITY_ZERO_KEY, 1,                    VCFHeaderLineType.Integer, "Total Mapping Quality Zero Reads"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.RMS_MAPPING_QUALITY_KEY,  1,                    VCFHeaderLineType.Float,   "RMS Mapping Quality"));
-        registerStandard(new VCFInfoHeaderLine(VCFConstants.SOMATIC_KEY,              0,                    VCFHeaderLineType.Flag,    "Somatic event"));
-    }
-
-    private static class Standards<T extends VCFCompoundHeaderLine> {
-        private final Map<String, T> standards = new HashMap<String, T>();
-
-        public T repair(final T line) {
-            final T standard = get(line.getID(), false);
-            if ( standard != null ) {
-                final boolean badCountType = line.getCountType() != standard.getCountType();
-                final boolean badCount     = line.isFixedCount() && ! badCountType && line.getCount() != standard.getCount();
-                final boolean badType      = line.getType() != standard.getType();
-                final boolean badDesc      = ! line.getDescription().equals(standard.getDescription());
-                final boolean needsRepair  = badCountType || badCount || badType || (REPAIR_BAD_DESCRIPTIONS && badDesc);
-
-                if ( needsRepair ) {
-                    if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
-                        System.err.println("Repairing standard header line for field " + line.getID() + " because"
-                                           + (badCountType ? " -- count types disagree; header has " + line.getCountType() + " but standard is " + standard.getCountType() : "")
-                                           + (badType ? " -- type disagree; header has " + line.getType() + " but standard is " + standard.getType() : "")
-                                           + (badCount ? " -- counts disagree; header has " + line.getCount() + " but standard is " + standard.getCount() : "")
-                                           + (badDesc ? " -- descriptions disagree; header has '" + line.getDescription() + "' but standard is '" + standard.getDescription() + "'": ""));
-                    }
-                    return standard;
-                } else {
-                    return line;
-                }
-            } else {
-                return line;
-            }
-        }
-
-        public Set<String> addToHeader(final Set<VCFHeaderLine> headerLines, final Collection<String> IDs, final boolean throwErrorForMissing) {
-            final Set<String> missing = new HashSet<String>();
-            for ( final String ID : IDs ) {
-                final T line = get(ID, throwErrorForMissing);
-                if ( line == null )
-                    missing.add(ID);
-                else
-                    headerLines.add(line);
-            }
-
-            return missing;
-        }
-
-        public void add(final T line) {
-            if ( standards.containsKey(line.getID()) ) {
-                throw new TribbleException("Attempting to add multiple standard header lines for ID " + line.getID());
-            }
-            standards.put(line.getID(), line);
-        }
-
-        public T get(final String ID, final boolean throwErrorForMissing) {
-            final T x = standards.get(ID);
-            if ( throwErrorForMissing && x == null ) {
-                throw new TribbleException("Couldn't find a standard VCF header line for field " + ID);
-            }
-            return x;
-        }
-    }
-}
diff --git a/src/main/java/htsjdk/variant/vcf/VCFUtils.java b/src/main/java/htsjdk/variant/vcf/VCFUtils.java
deleted file mode 100644
index c8eceea..0000000
--- a/src/main/java/htsjdk/variant/vcf/VCFUtils.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.variant.utils.GeneralUtils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-public class VCFUtils {
-
-    public static Set<VCFHeaderLine> smartMergeHeaders(final Collection<VCFHeader> headers, final boolean emitWarnings) throws IllegalStateException {
-        // We need to maintain the order of the VCFHeaderLines, otherwise they will be scrambled in the returned Set.
-        // This will cause problems for VCFHeader.getSequenceDictionary and anything else that implicitly relies on the line ordering.
-        final TreeMap<String, VCFHeaderLine> map = new TreeMap<String, VCFHeaderLine>(); // from KEY.NAME -> line
-        final HeaderConflictWarner conflictWarner = new HeaderConflictWarner(emitWarnings);
-
-        // todo -- needs to remove all version headers from sources and add its own VCF version line
-        for ( final VCFHeader source : headers ) {
-            //System.out.printf("Merging in header %s%n", source);
-            for ( final VCFHeaderLine line : source.getMetaDataInSortedOrder()) {
-
-                String key = line.getKey();
-                if ( line instanceof VCFIDHeaderLine )
-                    key = key + "-" + ((VCFIDHeaderLine)line).getID();
-
-                if ( map.containsKey(key) ) {
-                    final VCFHeaderLine other = map.get(key);
-                    if ( line.equals(other) ) {
-                        // continue;
-                    } else if ( ! line.getClass().equals(other.getClass()) ) {
-                        throw new IllegalStateException("Incompatible header types: " + line + " " + other );
-                    } else if ( line instanceof VCFFilterHeaderLine ) {
-                        final String lineName = ((VCFFilterHeaderLine) line).getID();
-                        final String otherName = ((VCFFilterHeaderLine) other).getID();
-                        if ( ! lineName.equals(otherName) )
-                            throw new IllegalStateException("Incompatible header types: " + line + " " + other );
-                    } else if ( line instanceof VCFCompoundHeaderLine ) {
-                        final VCFCompoundHeaderLine compLine = (VCFCompoundHeaderLine)line;
-                        final VCFCompoundHeaderLine compOther = (VCFCompoundHeaderLine)other;
-
-                        // if the names are the same, but the values are different, we need to quit
-                        if (! (compLine).equalsExcludingDescription(compOther) ) {
-                            if ( compLine.getType().equals(compOther.getType()) ) {
-                                // The Number entry is an Integer that describes the number of values that can be
-                                // included with the INFO field. For example, if the INFO field contains a single
-                                // number, then this value should be 1. However, if the INFO field describes a pair
-                                // of numbers, then this value should be 2 and so on. If the number of possible
-                                // values varies, is unknown, or is unbounded, then this value should be '.'.
-                                conflictWarner.warn(line, "Promoting header field Number to . due to number differences in header lines: " + line + " " + other);
-                                compOther.setNumberToUnbounded();
-                            } else if ( compLine.getType() == VCFHeaderLineType.Integer && compOther.getType() == VCFHeaderLineType.Float ) {
-                                // promote key to Float
-                                conflictWarner.warn(line, "Promoting Integer to Float in header: " + compOther);
-                                map.put(key, compOther);
-                            } else if ( compLine.getType() == VCFHeaderLineType.Float && compOther.getType() == VCFHeaderLineType.Integer ) {
-                                // promote key to Float
-                                conflictWarner.warn(line, "Promoting Integer to Float in header: " + compOther);
-                            } else {
-                                throw new IllegalStateException("Incompatible header types, collision between these two types: " + line + " " + other );
-                            }
-                        }
-                        if ( ! compLine.getDescription().equals(compOther.getDescription()) )
-                            conflictWarner.warn(line, "Allowing unequal description fields through: keeping " + compOther + " excluding " + compLine);
-                    } else {
-                        // we are not equal, but we're not anything special either
-                        conflictWarner.warn(line, "Ignoring header line already in map: this header line = " + line + " already present header = " + other);
-                    }
-                } else {
-                    map.put(key, line);
-                    //System.out.printf("Adding header line %s%n", line);
-                }
-            }
-        }
-        // returning a LinkedHashSet so that ordering will be preserved. Ensures the contig lines do not get scrambled.
-        return new LinkedHashSet<VCFHeaderLine>(map.values());
-    }
-
-    /**
-     * Add / replace the contig header lines in the VCFHeader with the in the reference file and master reference dictionary
-     *
-     * @param oldHeader the header to update
-     * @param referenceFile the file path to the reference sequence used to generate this vcf
-     * @param refDict the SAM formatted reference sequence dictionary
-     */
-    public static VCFHeader withUpdatedContigs(final VCFHeader oldHeader, final File referenceFile, final SAMSequenceDictionary refDict) {
-        return new VCFHeader(withUpdatedContigsAsLines(oldHeader.getMetaDataInInputOrder(), referenceFile, refDict), oldHeader.getGenotypeSamples());
-    }
-
-    public static Set<VCFHeaderLine> withUpdatedContigsAsLines(final Set<VCFHeaderLine> oldLines, final File referenceFile, final SAMSequenceDictionary refDict) {
-        return withUpdatedContigsAsLines(oldLines, referenceFile, refDict, false);
-    }
-
-    public static Set<VCFHeaderLine> withUpdatedContigsAsLines(final Set<VCFHeaderLine> oldLines, final File referenceFile, final SAMSequenceDictionary refDict, final boolean referenceNameOnly) {
-        final Set<VCFHeaderLine> lines = new LinkedHashSet<VCFHeaderLine>(oldLines.size());
-
-        for ( final VCFHeaderLine line : oldLines ) {
-            if ( line instanceof VCFContigHeaderLine )
-                continue; // skip old contig lines
-            if ( line.getKey().equals(VCFHeader.REFERENCE_KEY) )
-                continue; // skip the old reference key
-            lines.add(line);
-        }
-
-        for ( final VCFHeaderLine contigLine : makeContigHeaderLines(refDict, referenceFile) )
-            lines.add(contigLine);
-
-        final String referenceValue;
-        if (referenceFile != null) {
-            if (referenceNameOnly) {
-                final int extensionStart = referenceFile.getName().lastIndexOf('.');
-                referenceValue = extensionStart == -1 ? referenceFile.getName() : referenceFile.getName().substring(0, extensionStart);
-            }
-            else {
-                referenceValue = "file://" + referenceFile.getAbsolutePath();
-            }
-            lines.add(new VCFHeaderLine(VCFHeader.REFERENCE_KEY, referenceValue));
-        }
-        return lines;
-    }
-
-    /**
-     * Create VCFHeaderLines for each refDict entry, and optionally the assembly if referenceFile != null
-     * @param refDict reference dictionary
-     * @param referenceFile for assembly name.  May be null
-     * @return list of vcf contig header lines
-     */
-    public static List<VCFContigHeaderLine> makeContigHeaderLines(final SAMSequenceDictionary refDict,
-                                                                  final File referenceFile) {
-        final List<VCFContigHeaderLine> lines = new ArrayList<VCFContigHeaderLine>();
-        final String assembly = referenceFile != null ? getReferenceAssembly(referenceFile.getName()) : null;
-        for ( final SAMSequenceRecord contig : refDict.getSequences() )
-            lines.add(makeContigHeaderLine(contig, assembly));
-        return lines;
-    }
-
-    private static VCFContigHeaderLine makeContigHeaderLine(final SAMSequenceRecord contig, final String assembly) {
-        final Map<String, String> map = new LinkedHashMap<String, String>(3);
-        map.put("ID", contig.getSequenceName());
-        map.put("length", String.valueOf(contig.getSequenceLength()));
-        if ( assembly != null ) map.put("assembly", assembly);
-        return new VCFContigHeaderLine(map, contig.getSequenceIndex());
-    }
-
-    private static String getReferenceAssembly(final String refPath) {
-        // This doesn't need to be perfect as it's not a required VCF header line, but we might as well give it a shot
-        String assembly = null;
-        if (refPath.contains("b37") || refPath.contains("v37"))
-            assembly = "b37";
-        else if (refPath.contains("b36"))
-            assembly = "b36";
-        else if (refPath.contains("hg18"))
-            assembly = "hg18";
-        else if (refPath.contains("hg19"))
-            assembly = "hg19";
-        return assembly;
-    }
-
-    /** Only displays a warning if warnings are enabled and an identical warning hasn't been already issued */
-    private static final class HeaderConflictWarner {
-        boolean emitWarnings;
-        Set<String> alreadyIssued = new HashSet<String>();
-
-        private HeaderConflictWarner( final boolean emitWarnings ) {
-            this.emitWarnings = emitWarnings;
-        }
-
-        public void warn(final VCFHeaderLine line, final String msg) {
-            if ( GeneralUtils.DEBUG_MODE_ENABLED && emitWarnings && ! alreadyIssued.contains(line.getKey()) ) {
-                alreadyIssued.add(line.getKey());
-                System.err.println(msg);
-            }
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/cram/io/ExternalCompressionTest.java b/src/test/java/htsjdk/cram/io/ExternalCompressionTest.java
deleted file mode 100644
index 09f6e49..0000000
--- a/src/test/java/htsjdk/cram/io/ExternalCompressionTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import org.apache.commons.compress.utils.IOUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Files;
-
-public class ExternalCompressionTest {
-    public static final File BZIP2_FILE = new File("src/test/resources/htsjdk/samtools/cram/io/bzip2-test.bz2");
-    public static final byte [] TEST_BYTES = "This is a simple string to test BZip2".getBytes();
-
-    @Test
-    public void testBZip2Decompression() throws IOException {
-        final byte [] input = Files.readAllBytes(BZIP2_FILE.toPath());
-        final byte [] output = ExternalCompression.unbzip2(input);
-        Assert.assertEquals(output, "BZip2 worked".getBytes());
-    }
-
-    @Test
-    public void testBZip2Roundtrip() throws IOException {
-        final byte [] compressed = ExternalCompression.bzip2(TEST_BYTES);
-        final byte [] restored = ExternalCompression.unbzip2(compressed);
-        Assert.assertEquals(TEST_BYTES, restored);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/AbstractBAMFileIndexTest.java b/src/test/java/htsjdk/samtools/AbstractBAMFileIndexTest.java
deleted file mode 100644
index 74c2dd7..0000000
--- a/src/test/java/htsjdk/samtools/AbstractBAMFileIndexTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableStream;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-public class AbstractBAMFileIndexTest {
-
-    /**
-     * @see <a href="https://github.com/samtools/htsjdk/issues/73">https://github.com/samtools/htsjdk/issues/73</a>
-     */
-    @Test
-    public static void avoidDataExhaustionTest() {
-        final AbstractBAMFileIndex.IndexStreamBuffer buffer = new AbstractBAMFileIndex.IndexStreamBuffer(new SeekableStream() {
-            @Override
-            public long length() {
-                return 0;
-            }
-
-            @Override
-            public long position() throws IOException {
-                return 0;
-            }
-
-            @Override
-            public void seek(final long position) throws IOException {
-
-            }
-
-            @Override
-            public int read(final byte[] buffer, final int offset, final int length) throws IOException {
-                return 2; // This is the important line; pretend we feed 2 bytes at a time, which is fewer than any downstream calls ultimately request
-            }
-
-            @Override
-            public void close() throws IOException {
-
-            }
-
-            @Override
-            public boolean eof() throws IOException {
-                return false;
-            }
-
-            @Override
-            public String getSource() {
-                return null;
-            }
-
-            @Override
-            public int read() throws IOException {
-                return 0;
-            }
-        });
-
-        // Ensure these throw no exceptions
-        buffer.readLong();
-        buffer.readInteger();
-        buffer.readBytes(new byte[10000]);
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/BAMCigarOverflowTest.java b/src/test/java/htsjdk/samtools/BAMCigarOverflowTest.java
deleted file mode 100644
index dd630f9..0000000
--- a/src/test/java/htsjdk/samtools/BAMCigarOverflowTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.annotations.Test;
-import static org.testng.Assert.assertEquals;
-
-import java.io.File;
-
-/**
- * Test the fix of a bug reported by s-andrews in which the use of an arithmetic rather than a logical right shift in BinaryCigarCodec.binaryCigarToCigarElement()
- * causes an overflow in the CIGAR when reading a BAM file for a read that spans a very large intron.
- */
-public class BAMCigarOverflowTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test
-    public void testCigarOverflow() throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT).open(new File(TEST_DATA_DIR, "BAMCigarOverflowTest/CigarOverflowTest.bam"));
-
-        //Load the single read from the BAM file.
-        final SAMRecord testBAMRecord = reader.iterator().next();
-        CloserUtil.close(reader);
-
-        //The BAM file that exposed the bug triggered a SAM validation error because the bin field of the BAM record did not equal the computed value. Here we test for this error.
-        //Cast to int to avoid an ambiguity in the assertEquals() call between assertEquals(int,int) and assertEquals(Object,Object).
-        assertEquals(testBAMRecord.computeIndexingBin(), (int) testBAMRecord.getIndexingBin());
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/BAMFileIndexTest.java b/src/test/java/htsjdk/samtools/BAMFileIndexTest.java
deleted file mode 100755
index 170bc47..0000000
--- a/src/test/java/htsjdk/samtools/BAMFileIndexTest.java
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.StopWatch;
-import htsjdk.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-import static org.testng.Assert.*;
-
-/**
- * Test BAM file indexing.
- */
-public class BAMFileIndexTest {
-    private final File BAM_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-    private final boolean mVerbose = false;
-
-    @Test
-    public void testGetSearchBins()
-            throws Exception {
-        final DiskBasedBAMFileIndex bfi = new DiskBasedBAMFileIndex(new File(BAM_FILE.getPath() + ".bai"),
-                null);    // todo can null be replaced with a Sequence dictionary for the BAM_FILE?
-        final long[] bins = bfi.getSpanOverlapping(1, 0, 0).toCoordinateArray();
-        /***
-         if (bins == null) {
-         System.out.println("Search bins: " + bins);
-         return;
-         }
-         System.out.println("Search bins:");
-         for (int i = 0; i < bins.length; i++) {
-         System.out.println(" " + Long.toHexString(bins[i]));
-         }
-         ***/
-        assertNotNull(bins);
-        assertEquals(bins.length, 2);
-    }
-
-    @Test
-    public void testSpecificQueries()
-            throws Exception {
-        assertEquals(runQueryTest(BAM_FILE, "chrM", 10400, 10600, true), 1);
-        assertEquals(runQueryTest(BAM_FILE, "chrM", 10400, 10600, false), 2);
-    }
-
-    @Test(groups = {"slow"})
-    public void testRandomQueries()
-            throws Exception {
-        runRandomTest(BAM_FILE, 1000, new Random());
-    }
-
-    @Test
-    public void testWholeChromosomes() {
-        checkChromosome("chrM", 23);
-        checkChromosome("chr1", 885);
-        checkChromosome("chr2", 837);
-        /***
-         checkChromosome("chr3", 683);
-         checkChromosome("chr4", 633);
-         checkChromosome("chr5", 611);
-         checkChromosome("chr6", 585);
-         checkChromosome("chr7", 521);
-         checkChromosome("chr8", 507);
-         checkChromosome("chr9", 388);
-         checkChromosome("chr10", 477);
-         checkChromosome("chr11", 467);
-         checkChromosome("chr12", 459);
-         checkChromosome("chr13", 327);
-         checkChromosome("chr14", 310);
-         checkChromosome("chr15", 280);
-         checkChromosome("chr16", 278);
-         checkChromosome("chr17", 269);
-         checkChromosome("chr18", 265);
-         checkChromosome("chr19", 178);
-         checkChromosome("chr20", 228);
-         checkChromosome("chr21", 123);
-         checkChromosome("chr22", 121);
-         checkChromosome("chrX", 237);
-         checkChromosome("chrY", 29);
-         ***/
-    }
-
-    @Test
-    public void testQueryUnmapped() {
-        final StopWatch linearScan = new StopWatch();
-        final StopWatch queryUnmapped = new StopWatch();
-        int unmappedCountFromLinearScan = 0;
-        final File bamFile = BAM_FILE;
-        final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
-        linearScan.start();
-        CloseableIterator<SAMRecord> it = reader.iterator();
-        int mappedCount = 0;
-        while (it.hasNext()) {
-            final SAMRecord rec = it.next();
-            if (rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                unmappedCountFromLinearScan = 1;
-                break;
-            }
-            ++mappedCount;
-        }
-        linearScan.stop();
-        System.out.println("Found start of unmapped reads.  Num mapped reads: " + mappedCount);
-        System.out.println("Time so far: " + linearScan.getElapsedTimeSecs());
-        linearScan.start();
-
-        while (it.hasNext()) {
-            final SAMRecord rec = it.next();
-            Assert.assertEquals(rec.getReferenceIndex().intValue(), SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            ++unmappedCountFromLinearScan;
-        }
-        it.close();
-        linearScan.stop();
-        queryUnmapped.start();
-        it = reader.queryUnmapped();
-        int unmappedCountFromQueryUnmapped = 0;
-        while (it.hasNext()) {
-            final SAMRecord rec = it.next();
-            Assert.assertEquals(rec.getReferenceIndex().intValue(), SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-            ++unmappedCountFromQueryUnmapped;
-        }
-        it.close();
-        queryUnmapped.stop();
-        System.out.println("Linear scan total time: " + linearScan.getElapsedTimeSecs());
-        System.out.println("queryUnmapped time: " + queryUnmapped.getElapsedTimeSecs());
-        System.out.println("Number of unmapped reads:" + unmappedCountFromQueryUnmapped);
-        Assert.assertEquals(unmappedCountFromQueryUnmapped, unmappedCountFromLinearScan);
-        CloserUtil.close(reader);
-    }
-
-    @Test
-    public void testQueryAlignmentStart() {
-        final SamReader reader = SamReaderFactory.makeDefault().open(BAM_FILE);
-        CloseableIterator<SAMRecord> it = reader.queryAlignmentStart("chr1", 202160268);
-        Assert.assertEquals(countElements(it), 2);
-        it.close();
-        it = reader.queryAlignmentStart("chr1", 201595153);
-        Assert.assertEquals(countElements(it), 1);
-        it.close();
-        // There are records that overlap this position, but none that start here
-        it = reader.queryAlignmentStart("chrM", 10400);
-        Assert.assertEquals(countElements(it), 0);
-        it.close();
-        // One past the last chr1 record
-        it = reader.queryAlignmentStart("chr1", 246817509);
-        Assert.assertEquals(countElements(it), 0);
-        it.close();
-        CloserUtil.close(reader);
-    }
-
-    @Test
-    public void testQueryMate() {
-        final SamReader reader = SamReaderFactory.makeDefault().open(BAM_FILE);
-
-        // Both ends mapped
-        SAMRecord rec = getSingleRecordStartingAt(reader, "chrM", 1687);
-        SAMRecord mate = reader.queryMate(rec);
-        assertMate(rec, mate);
-        SAMRecord originalRec = reader.queryMate(mate);
-        Assert.assertEquals(originalRec, rec);
-
-        // One end mapped
-        rec = getSingleRecordStartingAt(reader, "chr11", 48720338);
-        mate = reader.queryMate(rec);
-        assertMate(rec, mate);
-        originalRec = reader.queryMate(mate);
-        Assert.assertEquals(originalRec, rec);
-
-        // Both ends mapped
-        final CloseableIterator<SAMRecord> it = reader.queryUnmapped();
-        rec = null;
-        while (it.hasNext()) {
-            final SAMRecord next = it.next();
-            if (next.getReadName().equals("2615")) {
-                rec = next;
-                break;
-            }
-        }
-        it.close();
-        Assert.assertNotNull(rec);
-        mate = reader.queryMate(rec);
-        assertMate(rec, mate);
-        originalRec = reader.queryMate(mate);
-        Assert.assertEquals(originalRec, rec);
-        CloserUtil.close(reader);
-    }
-
-    private void assertMate(final SAMRecord rec, final SAMRecord mate) {
-        Assert.assertNotNull(mate);
-        Assert.assertEquals(mate.getReadName(), rec.getReadName());
-        Assert.assertEquals(mate.getReferenceIndex(), rec.getMateReferenceIndex());
-        if (SAMUtils.getMateCigarString(rec) != null) {
-            Assert.assertEquals(mate.getCigarString(), SAMUtils.getMateCigarString(rec));
-        }
-        Assert.assertEquals(mate.getAlignmentStart(), rec.getMateAlignmentStart());
-        Assert.assertFalse(mate.getFirstOfPairFlag() == rec.getFirstOfPairFlag());
-    }
-
-    /**
-     * Compare the results of a multi-interval query versus the union of the results from each interval done
-     * separately.
-     */
-    @Test(dataProvider = "testMultiIntervalQueryDataProvider")
-    public void testMultiIntervalQuery(final boolean contained) {
-        final List<String> referenceNames = getReferenceNames(BAM_FILE);
-
-        final QueryInterval[] intervals = generateRandomIntervals(referenceNames.size(), 1000, new Random());
-        final Set<SAMRecord> multiIntervalRecords = new HashSet<SAMRecord>();
-        final Set<SAMRecord> singleIntervalRecords = new HashSet<SAMRecord>();
-        final SamReader reader = SamReaderFactory.makeDefault().open(BAM_FILE);
-        for (final QueryInterval interval : intervals) {
-            consumeAll(singleIntervalRecords, reader.query(referenceNames.get(interval.referenceIndex), interval.start, interval.end, contained));
-        }
-
-        final QueryInterval[] optimizedIntervals = QueryInterval.optimizeIntervals(intervals);
-        consumeAll(multiIntervalRecords, reader.query(optimizedIntervals, contained));
-        final Iterator<SAMRecord> singleIntervalRecordIterator = singleIntervalRecords.iterator();
-        boolean failed = false;
-        while (singleIntervalRecordIterator.hasNext()) {
-            final SAMRecord record = singleIntervalRecordIterator.next();
-            if (!multiIntervalRecords.remove(record)) {
-                System.out.println("SingleIntervalQuery found " + record + " but MultiIntervalQuery did not");
-                failed = true;
-            }
-        }
-        for (final SAMRecord record : multiIntervalRecords) {
-            System.out.println("MultiIntervalQuery found " + record + " but SingleIntervalQuery did not");
-            failed = true;
-        }
-        Assert.assertFalse(failed);
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "testMultiIntervalQueryDataProvider")
-    private Object[][] testMultiIntervalQueryDataProvider() {
-        return new Object[][]{{true}, {false}};
-    }
-
-    @Test
-    public void testUnmappedMateWithCoordinate() throws Exception {
-        // TODO: Use SAMRecordSetBuilder when it is able to create a pair with one end unmapped
-        final String samText = "@HD\tVN:1.0\tSO:coordinate\n" +
-                "@SQ\tSN:chr1\tLN:101\n" +
-                "@SQ\tSN:chr2\tLN:101\n" +
-                "@SQ\tSN:chr3\tLN:101\n" +
-                "@SQ\tSN:chr4\tLN:101\n" +
-                "@SQ\tSN:chr5\tLN:101\n" +
-                "@SQ\tSN:chr6\tLN:101\n" +
-                "@SQ\tSN:chr7\tLN:404\n" +
-                "@SQ\tSN:chr8\tLN:202\n" +
-                "@RG\tID:0\tSM:Hi,Mom!\n" +
-                "@PG\tID:1\tPN:Hey!\tVN:2.0\n" +
-                "one_end_mapped\t73\tchr7\t100\t255\t101M\t*\t0\t0\tCAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN\t)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&\tRG:Z:0\n" +
-                "one_end_mapped\t133\tchr7\t100\t0\t*\t=\t100\t0\tNCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA\t&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1\tRG:Z:0\n";
-        final ByteArrayInputStream bis = new ByteArrayInputStream(StringUtil.stringToBytes(samText));
-        final File bamFile = File.createTempFile("BAMFileIndexTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        bamFile.deleteOnExit();
-        final SamReader textReader = SamReaderFactory.makeDefault().open(SamInputResource.of(bis));
-        SAMFileWriterFactory samFileWriterFactory = new SAMFileWriterFactory();
-        samFileWriterFactory.setCreateIndex(true);
-        final SAMFileWriter writer = samFileWriterFactory.makeBAMWriter(textReader.getFileHeader(), true, bamFile);
-        for (final SAMRecord rec : textReader) {
-            writer.addAlignment(rec);
-        }
-        writer.close();
-        final SamReader bamReader = SamReaderFactory.makeDefault().open(bamFile);
-        SamFiles.findIndex(bamFile).deleteOnExit();
-        Assert.assertEquals(countElements(bamReader.queryContained("chr7", 100, 100)), 1);
-        Assert.assertEquals(countElements(bamReader.queryOverlapping("chr7", 100, 100)), 2);
-        bamReader.close();
-        textReader.close();
-    }
-
-    private <E> void consumeAll(final Collection<E> collection, final CloseableIterator<E> iterator) {
-        while (iterator.hasNext()) {
-            collection.add(iterator.next());
-        }
-        iterator.close();
-    }
-
-    private SAMRecord getSingleRecordStartingAt(final SamReader reader, final String sequence, final int alignmentStart) {
-        final CloseableIterator<SAMRecord> it = reader.queryAlignmentStart(sequence, alignmentStart);
-        Assert.assertTrue(it.hasNext());
-        final SAMRecord rec = it.next();
-        Assert.assertNotNull(rec);
-        Assert.assertFalse(it.hasNext());
-        it.close();
-        return rec;
-    }
-
-    private int countElements(final CloseableIterator<SAMRecord> it) {
-        int num;
-        for (num = 0; it.hasNext(); ++num, it.next()) {
-        }
-        it.close();
-        return num;
-    }
-
-    private void checkChromosome(final String name, final int expectedCount) {
-        int count = runQueryTest(BAM_FILE, name, 0, 0, true);
-        assertEquals(count, expectedCount);
-        count = runQueryTest(BAM_FILE, name, 0, 0, false);
-        assertEquals(count, expectedCount);
-    }
-
-    private void runRandomTest(final File bamFile, final int count, final Random generator) {
-        final List<String> referenceNames = getReferenceNames(bamFile);
-        final QueryInterval[] intervals = generateRandomIntervals(referenceNames.size(), count, generator);
-        for (final QueryInterval interval : intervals) {
-            final String refName = referenceNames.get(interval.referenceIndex);
-            final int startPos = interval.start;
-            final int endPos = interval.end;
-            System.out.println("Testing query " + refName + ":" + startPos + "-" + endPos + " ...");
-            try {
-                runQueryTest(bamFile, refName, startPos, endPos, true);
-                runQueryTest(bamFile, refName, startPos, endPos, false);
-            } catch (final Throwable exc) {
-                String message = "Query test failed: " + refName + ":" + startPos + "-" + endPos;
-                message += ": " + exc.getMessage();
-                throw new RuntimeException(message, exc);
-            }
-        }
-    }
-
-    private QueryInterval[] generateRandomIntervals(final int numReferences, final int count, final Random generator) {
-        final QueryInterval[] intervals = new QueryInterval[count];
-        final int maxCoordinate = 10000000;
-        for (int i = 0; i < count; i++) {
-            final int referenceIndex = generator.nextInt(numReferences);
-            final int coord1 = generator.nextInt(maxCoordinate + 1);
-            final int coord2 = generator.nextInt(maxCoordinate + 1);
-            final int startPos = Math.min(coord1, coord2);
-            final int endPos = Math.max(coord1, coord2);
-            intervals[i] = new QueryInterval(referenceIndex, startPos, endPos);
-        }
-
-        return intervals;
-    }
-
-    private List<String> getReferenceNames(final File bamFile) {
-        final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
-        final List<String> result = new ArrayList<String>();
-        final List<SAMSequenceRecord> seqRecords = reader.getFileHeader().getSequenceDictionary().getSequences();
-        for (final SAMSequenceRecord seqRecord : seqRecords) {
-            if (seqRecord.getSequenceName() != null) {
-                result.add(seqRecord.getSequenceName());
-            }
-        }
-        CloserUtil.close(reader);
-        return result;
-    }
-
-    private int runQueryTest(final File bamFile, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
-        final SamReader reader1 = SamReaderFactory.makeDefault().open(bamFile);
-        final SamReader reader2 = SamReaderFactory.makeDefault().open(bamFile);
-        final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
-        final Iterator<SAMRecord> iter2 = reader2.iterator();
-        // Compare ordered iterators.
-        // Confirm that iter1 is a subset of iter2 that properly filters.
-        SAMRecord record1 = null;
-        SAMRecord record2 = null;
-        int count1 = 0;
-        int count2 = 0;
-        int beforeCount = 0;
-        int afterCount = 0;
-        while (true) {
-            if (record1 == null && iter1.hasNext()) {
-                record1 = iter1.next();
-                count1++;
-            }
-            if (record2 == null && iter2.hasNext()) {
-                record2 = iter2.next();
-                count2++;
-            }
-            // System.out.println("Iteration:");
-            // System.out.println(" Record1 = " + ((record1 == null) ? "null" : record1.format()));
-            // System.out.println(" Record2 = " + ((record2 == null) ? "null" : record2.format()));
-            if (record1 == null && record2 == null) {
-                break;
-            }
-            if (record1 == null) {
-                checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
-                record2 = null;
-                afterCount++;
-                continue;
-            }
-            assertNotNull(record2);
-            final int ordering = compareCoordinates(record1, record2);
-            if (ordering > 0) {
-                checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
-                record2 = null;
-                beforeCount++;
-                continue;
-            }
-            assertTrue(ordering == 0);
-            checkPassesFilter(true, record1, sequence, startPos, endPos, contained);
-            checkPassesFilter(true, record2, sequence, startPos, endPos, contained);
-            assertEquals(record1.getReadName(), record2.getReadName());
-            assertEquals(record1.getReadString(), record2.getReadString());
-            record1 = null;
-            record2 = null;
-        }
-        CloserUtil.close(reader1);
-        CloserUtil.close(reader2);
-        verbose("Checked " + count1 + " records against " + count2 + " records.");
-        verbose("Found " + (count2 - beforeCount - afterCount) + " records matching.");
-        verbose("Found " + beforeCount + " records before.");
-        verbose("Found " + afterCount + " records after.");
-        return count1;
-    }
-
-    private void checkPassesFilter(final boolean expected, final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        final boolean passes = passesFilter(record, sequence, startPos, endPos, contained);
-        if (passes != expected) {
-            System.out.println("Error: Record erroneously " +
-                    (passes ? "passed" : "failed") +
-                    " filter.");
-            System.out.println(" Record: " + record.getSAMString());
-            System.out.println(" Filter: " + sequence + ":" +
-                    startPos + "-" + endPos +
-                    " (" + (contained ? "contained" : "overlapping") + ")");
-            assertEquals(passes, expected);
-        }
-    }
-
-    private boolean passesFilter(final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        if (record == null) {
-            return false;
-        }
-        if (!safeEquals(record.getReferenceName(), sequence)) {
-            return false;
-        }
-        final int alignmentStart = record.getAlignmentStart();
-        int alignmentEnd = record.getAlignmentEnd();
-        if (alignmentStart <= 0) {
-            assertTrue(record.getReadUnmappedFlag());
-            return false;
-        }
-        if (alignmentEnd <= 0) {
-            // For indexing-only records, treat as single base alignment.
-            assertTrue(record.getReadUnmappedFlag());
-            alignmentEnd = alignmentStart;
-        }
-        if (contained) {
-            if (startPos != 0 && alignmentStart < startPos) {
-                return false;
-            }
-            if (endPos != 0 && alignmentEnd > endPos) {
-                return false;
-            }
-        } else {
-            if (startPos != 0 && alignmentEnd < startPos) {
-                return false;
-            }
-            if (endPos != 0 && alignmentStart > endPos) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private int compareCoordinates(final SAMRecord record1, final SAMRecord record2) {
-        final int seqIndex1 = record1.getReferenceIndex();
-        final int seqIndex2 = record2.getReferenceIndex();
-        if (seqIndex1 == -1) {
-            return ((seqIndex2 == -1) ? 0 : -1);
-        } else if (seqIndex2 == -1) {
-            return 1;
-        }
-        int result = seqIndex1 - seqIndex2;
-        if (result != 0) {
-            return result;
-        }
-        result = record1.getAlignmentStart() - record2.getAlignmentStart();
-        return result;
-    }
-
-    private boolean safeEquals(final Object o1, final Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if (o1 == null || o2 == null) {
-            return false;
-        } else {
-            return o1.equals(o2);
-        }
-    }
-
-    private void verbose(final String text) {
-        if (mVerbose) {
-            System.out.println("# " + text);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/BAMFileWriterTest.java b/src/test/java/htsjdk/samtools/BAMFileWriterTest.java
deleted file mode 100644
index a8944d0..0000000
--- a/src/test/java/htsjdk/samtools/BAMFileWriterTest.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Test that BAM writing doesn't blow up.  For presorted writing, the resulting BAM file is read and contents are
- * compared with the original SAM file.
- */
-public class BAMFileWriterTest {
-
-    private SAMRecordSetBuilder getRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
-        final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
-        ret.addPair("readB", 20, 200, 300);
-        ret.addPair("readA", 20, 100, 150);
-        ret.addFrag("readC", 20, 140, true);
-        ret.addFrag("readD", 20, 140, false);
-        return ret;
-    }
-
-    /**
-     * Parse some SAM text into a SAM object, then write as BAM.  If SAM text was presorted, then the BAM file can
-     * be read and compared with the SAM object.
-     *
-     * @param samRecordSetBuilder source of input {@link SamReader} to be written and compared with
-     * @param sortOrder           How the BAM should be written
-     * @param presorted           If true, samText is in the order specified by sortOrder
-     */
-    private void testHelper(final SAMRecordSetBuilder samRecordSetBuilder, final SAMFileHeader.SortOrder sortOrder, final boolean presorted) throws Exception {
-        final SamReader samReader = samRecordSetBuilder.getSamReader();
-        final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        bamFile.deleteOnExit();
-        samReader.getFileHeader().setSortOrder(sortOrder);
-        final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(samReader.getFileHeader(), presorted, bamFile);
-        CloseableIterator<SAMRecord> it = samReader.iterator();
-        while (it.hasNext()) {
-            bamWriter.addAlignment(it.next());
-        }
-        bamWriter.close();
-        it.close();
-        samReader.close();
-
-        if (presorted) { // If SAM text input was presorted, then we can compare SAM object to BAM object
-            verifyBAMFile(samRecordSetBuilder, bamFile);
-        }
-    }
-
-    private void verifyBAMFile(final SAMRecordSetBuilder samRecordSetBuilder, final File bamFile) {
-
-        final SamReader bamReader = SamReaderFactory.makeDefault().open(bamFile);
-        final SamReader samReader = samRecordSetBuilder.getSamReader();
-        samReader.getFileHeader().setSortOrder(bamReader.getFileHeader().getSortOrder());
-        Assert.assertEquals(bamReader.getFileHeader(), samReader.getFileHeader());
-        final CloseableIterator<SAMRecord> it = samReader.iterator();
-        final CloseableIterator<SAMRecord> bamIt = bamReader.iterator();
-        while (it.hasNext()) {
-            Assert.assertTrue(bamIt.hasNext());
-            final SAMRecord samRecord = it.next();
-            final SAMRecord bamRecord = bamIt.next();
-
-            // SAMRecords don't have this set, so stuff it in there
-            samRecord.setIndexingBin(bamRecord.getIndexingBin());
-
-            // Force reference index attributes to be populated
-            samRecord.getReferenceIndex();
-            bamRecord.getReferenceIndex();
-            samRecord.getMateReferenceIndex();
-            bamRecord.getMateReferenceIndex();
-
-            Assert.assertEquals(bamRecord, samRecord);
-        }
-        Assert.assertFalse(bamIt.hasNext());
-        CloserUtil.close(samReader);
-    }
-
-    @DataProvider(name = "test1")
-    public Object[][] createTestData() {
-        return new Object[][]{
-                {"coordinate sorted", getRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.coordinate, false},
-                {"query sorted", getRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.queryname, false},
-                {"unsorted", getRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.unsorted, false},
-                {"coordinate presorted", getRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate), SAMFileHeader.SortOrder.coordinate, true},
-                {"query presorted", getRecordSetBuilder(true, SAMFileHeader.SortOrder.queryname), SAMFileHeader.SortOrder.queryname, true},
-        };
-    }
-
-    @Test(dataProvider = "test1")
-    public void testPositive(final String testName, final SAMRecordSetBuilder samRecordSetBuilder, final SAMFileHeader.SortOrder order, final boolean presorted) throws Exception {
-
-        testHelper(samRecordSetBuilder, order, presorted);
-    }
-
-    @Test(dataProvider = "test1")
-    public void testNullRecordHeaders(final String testName, final SAMRecordSetBuilder samRecordSetBuilder, final SAMFileHeader.SortOrder order, final boolean presorted) throws Exception {
-
-        // test that BAMFileWriter can write records that have a null header
-        final SAMFileHeader samHeader = samRecordSetBuilder.getHeader();
-        for (SAMRecord rec : samRecordSetBuilder.getRecords()) {
-            rec.setHeader(null);
-        }
-
-        // make sure the records can actually be written out
-        final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        bamFile.deleteOnExit();
-        samHeader.setSortOrder(order);
-        final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(samHeader, presorted, bamFile);
-        for (final SAMRecord rec : samRecordSetBuilder.getRecords()) {
-            bamWriter.addAlignment(rec);
-        }
-        bamWriter.close();
-
-        if (presorted) {
-            verifyBAMFile(samRecordSetBuilder, bamFile);
-        }
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullRecordsMismatchedHeader() throws Exception {
-
-        final SAMRecordSetBuilder samRecordSetBuilder = getRecordSetBuilder(true, SAMFileHeader.SortOrder.queryname);
-        for (final SAMRecord rec : samRecordSetBuilder.getRecords()) {
-            rec.setHeader(null);
-        }
-
-        // create a fake header to make sure the records cannot  be written using an invalid
-        // sequence dictionary and unresolvable references
-        final SAMFileHeader fakeHeader = new SAMFileHeader();
-        fakeHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
-        final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        bamFile.deleteOnExit();
-
-        try (final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(fakeHeader, false, bamFile);) {
-            for (SAMRecord rec : samRecordSetBuilder.getRecords()) {
-                bamWriter.addAlignment(rec);
-            }
-        }
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testRecordsMismatchedHeader() throws Exception {
-
-        final SAMRecordSetBuilder samRecordSetBuilder = getRecordSetBuilder(true, SAMFileHeader.SortOrder.queryname);
-
-        // create a fake header to make sure the records cannot  be written using an invalid
-        // sequence dictionary and unresolvable references
-        final SAMFileHeader fakeHeader = new SAMFileHeader();
-        fakeHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
-        final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        bamFile.deleteOnExit();
-
-        try (final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(fakeHeader, false, bamFile);) {
-            for (SAMRecord rec : samRecordSetBuilder.getRecords()) {
-                bamWriter.addAlignment(rec);
-            }
-        }
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNegativePresorted() throws Exception {
-
-        testHelper(getRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate), SAMFileHeader.SortOrder.queryname, true);
-        Assert.fail("Exception should be thrown");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/BAMIndexWriterTest.java b/src/test/java/htsjdk/samtools/BAMIndexWriterTest.java
deleted file mode 100644
index 09f9236..0000000
--- a/src/test/java/htsjdk/samtools/BAMIndexWriterTest.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.IOUtil;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-/**
- * Test BAM file index creation
- */
-public class BAMIndexWriterTest {
-    // Two input files for basic test
-    private final String BAM_FILE_LOCATION = "src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam";
-    private final String BAI_FILE_LOCATION = "src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai";
-    private final File BAM_FILE = new File(BAM_FILE_LOCATION);
-    private final File BAI_FILE = new File(BAI_FILE_LOCATION);
-
-    private final boolean mVerbose = true;
-
-    @Test(enabled = true)
-    public void testWriteText() throws Exception {
-        // Compare the text form of the c-generated bai file and a java-generated one
-        final File cBaiTxtFile = File.createTempFile("cBai.", ".bai.txt");
-        BAMIndexer.createAndWriteIndex(BAI_FILE, cBaiTxtFile, true);
-        verbose("Wrote textual C BAM Index file " + cBaiTxtFile);
-
-        final File javaBaiFile = File.createTempFile("javaBai.", "java.bai");
-        final File javaBaiTxtFile = new File(javaBaiFile.getAbsolutePath() + ".txt");
-        final SamReader bam = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(BAM_FILE);
-        BAMIndexer.createIndex(bam, javaBaiFile);
-        verbose("Wrote binary Java BAM Index file " + javaBaiFile);
-
-        // now, turn the bai file into text
-        BAMIndexer.createAndWriteIndex(javaBaiFile, javaBaiTxtFile, true);
-        // and compare them
-        verbose("diff " + javaBaiTxtFile + " " + cBaiTxtFile);
-        IOUtil.assertFilesEqual(javaBaiTxtFile, cBaiTxtFile);
-        cBaiTxtFile.deleteOnExit();
-        javaBaiFile.deleteOnExit();
-        javaBaiTxtFile.deleteOnExit();
-        CloserUtil.close(bam);
-    }
-
-    @Test(enabled = true)
-    public void testWriteBinary() throws Exception {
-        // Compare java-generated bai file with c-generated and sorted bai file
-        final File javaBaiFile = File.createTempFile("javaBai.", ".bai");
-        final SamReader bam = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(BAM_FILE);
-        BAMIndexer.createIndex(bam, javaBaiFile);
-        verbose("Wrote binary java BAM Index file " + javaBaiFile);
-
-        final File cRegeneratedBaiFile = File.createTempFile("cBai.", ".bai");
-        BAMIndexer.createAndWriteIndex(BAI_FILE, cRegeneratedBaiFile, false);
-        verbose("Wrote sorted C binary BAM Index file " + cRegeneratedBaiFile);
-
-        // Binary compare of javaBaiFile and cRegeneratedBaiFile should be the same
-        verbose("diff " + javaBaiFile + " " + cRegeneratedBaiFile);
-        IOUtil.assertFilesEqual(javaBaiFile, cRegeneratedBaiFile);
-        javaBaiFile.deleteOnExit();
-        cRegeneratedBaiFile.deleteOnExit();
-        CloserUtil.close(bam);
-    }
-
-    @Test(enabled = false, dataProvider = "linearIndexTestData")
-    /** Test linear index at specific references and windows */
-    public void testLinearIndex(String testName, String filepath, int problemReference, int problemWindowStart, int problemWindowEnd, int expectedCount) {
-        final SamReader sfr = SamReaderFactory.makeDefault().open(new File(filepath));
-        for (int problemWindow = problemWindowStart; problemWindow <= problemWindowEnd; problemWindow++) {
-            int count = countAlignmentsInWindow(problemReference, problemWindow, sfr, expectedCount);
-            if (expectedCount != -1)
-                assertEquals(expectedCount, count);
-        }
-        CloserUtil.close(sfr);
-    }
-
-    @DataProvider(name = "linearIndexTestData")
-    public Object[][] getLinearIndexTestData() {
-        // Add data here for test cases, reference, and windows where linear index needs testing
-        return new Object[][]{
-                new Object[]{"index_test", BAM_FILE_LOCATION, 1, 29, 66, -1},  // 29-66
-                new Object[]{"index_test", BAM_FILE_LOCATION, 1, 68, 118, -1},  // 29-66
-
-        };
-    }
-
-    private int countAlignmentsInWindow(int reference, int window, SamReader reader, int expectedCount) {
-        final int SIXTEEN_K = 1 << 14;       // 1 << LinearIndex.BAM_LIDX_SHIFT
-        final int start = window >> 14;             // window * SIXTEEN_K;
-        final int stop = ((window + 1) >> 14) - 1; // (window + 1 * SIXTEEN_K) - 1;
-
-        final String chr = reader.getFileHeader().getSequence(reference).getSequenceName();
-
-        // get records for the entire linear index window
-        SAMRecordIterator iter = reader.queryOverlapping(chr, start, stop);
-        SAMRecord rec;
-        int count = 0;
-        while (iter.hasNext()) {
-            rec = iter.next();
-            count++;
-            if (expectedCount == -1)
-                System.err.println(rec.getReadName());
-        }
-        iter.close();
-        return count;
-    }
-
-
-    @Test(enabled = false, dataProvider = "indexComparisonData")
-    /** Test linear index at all references and windows, comparing with existing index */
-    public void compareLinearIndex(String testName, String bamFile, String bamIndexFile) throws IOException {
-        // compare index generated from bamFile with existing bamIndex file
-        // by testing all the references' windows and comparing the counts
-
-        // 1. generate bai file
-        // 2. count its references
-        // 3. count bamIndex references comparing counts
-
-        // 1. generate bai file
-        File bam = new File(bamFile);
-        assertTrue(bam.exists(), testName + " input bam file doesn't exist: " + bamFile);
-
-        File indexFile1 = createIndexFile(bam);
-        assertTrue(indexFile1.exists(), testName + " generated bam file's index doesn't exist: " + indexFile1);
-
-        // 2. count its references
-        File indexFile2 = new File(bamIndexFile);
-        assertTrue(indexFile2.exists(), testName + " input index file doesn't exist: " + indexFile2);
-
-        final CachingBAMFileIndex existingIndex1 = new CachingBAMFileIndex(indexFile1, null); // todo null sequence dictionary?
-        final CachingBAMFileIndex existingIndex2 = new CachingBAMFileIndex(indexFile2, null);
-        final int n_ref = existingIndex1.getNumberOfReferences();
-        assertEquals(n_ref, existingIndex2.getNumberOfReferences());
-
-        final SamReader reader1 = SamReaderFactory.makeDefault().disable(SamReaderFactory.Option.EAGERLY_DECODE).open(bam);
-
-        final SamReader reader2 = SamReaderFactory.makeDefault().disable(SamReaderFactory.Option.EAGERLY_DECODE).open(bam);
-
-        System.out.println("Comparing " + n_ref + " references in " + indexFile1 + " and " + indexFile2);
-
-        for (int i = 0; i < n_ref; i++) {
-            final BAMIndexContent content1 = existingIndex1.getQueryResults(i);
-            final BAMIndexContent content2 = existingIndex2.getQueryResults(i);
-            if (content1 == null) {
-                assertTrue(content2 == null, "No content for 1st bam index, but content for second at reference" + i);
-                continue;
-            }
-            int[] counts1 = new int[LinearIndex.MAX_LINEAR_INDEX_SIZE];
-            int[] counts2 = new int[LinearIndex.MAX_LINEAR_INDEX_SIZE];
-            LinearIndex li1 = content1.getLinearIndex();
-            LinearIndex li2 = content2.getLinearIndex();
-            // todo not li1 and li2 sizes may differ. Implies 0's in the smaller index windows
-            // 3. count bamIndex references comparing counts
-            int baiSize = Math.max(li1.size(), li2.size());
-            for (int win = 0; win < baiSize; win++) {
-                counts1[win] = countAlignmentsInWindow(i, win, reader1, 0);
-                counts2[win] = countAlignmentsInWindow(i, win, reader2, counts1[win]);
-                assertEquals(counts2[win], counts1[win], "Counts don't match for reference " + i +
-                        " window " + win);
-            }
-        }
-
-        indexFile1.deleteOnExit();
-
-    }
-
-    @DataProvider(name = "indexComparisonData")
-    public Object[][] getIndexComparisonData() {
-        // enter bam file and alternate index file to be tested against generated bam index
-        return new Object[][]{
-                new Object[]{"index_test", BAM_FILE_LOCATION, BAI_FILE_LOCATION},
-        };
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testRequireCoordinateSortOrder() {
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.queryname);
-
-        new BAMIndexer(new ByteArrayOutputStream(), header);
-    }
-
-    /** generates the index file using the latest java index generating code */
-    private File createIndexFile(File bamFile) throws IOException {
-        final File bamIndexFile = File.createTempFile("Bai.", ".bai");
-        final SamReader bam = SamReaderFactory.makeDefault().open(bamFile);
-        BAMIndexer.createIndex(bam, bamIndexFile);
-        verbose("Wrote BAM Index file " + bamIndexFile);
-        bam.close();
-        return bamIndexFile;
-    }
-
-    private void verbose(final String text) {
-        if (mVerbose) {
-            System.out.println("#BAMIndexWriterTest " + text);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/BAMIteratorTest.java b/src/test/java/htsjdk/samtools/BAMIteratorTest.java
deleted file mode 100644
index 5fa9e7d..0000000
--- a/src/test/java/htsjdk/samtools/BAMIteratorTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class BAMIteratorTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test(dataProvider = "dataProvider")
-    public void testIterateEmptyBam(final String bam) throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, bam));
-        int numRecords = 0;
-        for (final SAMRecord rec : reader) {
-            ++numRecords;
-        }
-        Assert.assertEquals(numRecords, 0);
-        CloserUtil.close(reader);
-    }
-
-    @Test(dataProvider = "dataProvider")
-    public void testQueryUnmappedEmptyBam(final String bam) throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, bam));
-        final CloseableIterator<SAMRecord> it = reader.queryUnmapped();
-        int numRecords = 0;
-        while (it.hasNext()) {
-            it.next();
-            ++numRecords;
-        }
-        Assert.assertEquals(numRecords, 0);
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "dataProvider")
-    public Object[][] bams() {
-        return new Object[][]{
-                {"empty.bam"},
-                {"empty_no_empty_gzip_block.bam"}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilterTest.java b/src/test/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilterTest.java
deleted file mode 100644
index 7c0bb1f..0000000
--- a/src/test/java/htsjdk/samtools/BAMQueryMultipleIntervalsIteratorFilterTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.Random;
-
-public class BAMQueryMultipleIntervalsIteratorFilterTest {
-
-    private final byte[] BASES = {'A', 'C', 'G', 'T'};
-    private final Random random = new Random();
-
-    @DataProvider(name="compareIntervalToRecord")
-    public Object[][] compareIntervalToRecord() {
-        return new Object[][] {
-                { new QueryInterval(0, 20, 20), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-                { new QueryInterval(0, 20, 22), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-                { new QueryInterval(1, 10, 22), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-                { new QueryInterval(1, 0, 22), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-                { new QueryInterval(1, -1, 22), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-                { new QueryInterval(1, 1, 22), 0, 10, 5, BAMIteratorFilter.IntervalComparison.AFTER },
-
-                { new QueryInterval(0, 0, 4), 0, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 0, 5), 0, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 0, -1), 1, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 1, 0), 1, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 1, -1), 1, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 0, 0), 1, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 9, 9), 0, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 1, 4), 0, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-                { new QueryInterval(0, 1, 4), 1, 10, 5, BAMIteratorFilter.IntervalComparison.BEFORE },
-
-                { new QueryInterval(0, 0, 0), 0, 10, 5, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 1, -1), 0, 1, 100, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 1, 0), 0, 1, 100, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 1, 0), 0, 10, 5, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 1, -1), 0, 10, 5, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 10, 15), 0, 10, 5, BAMIteratorFilter.IntervalComparison.CONTAINED },
-                { new QueryInterval(0, 10, 0), 0, 10, 5, BAMIteratorFilter.IntervalComparison.CONTAINED },
-
-                { new QueryInterval(0, 10, 11), 0, 10, 5, BAMIteratorFilter.IntervalComparison.OVERLAPPING },
-                { new QueryInterval(0, 1, 10), 0, 9, 5, BAMIteratorFilter.IntervalComparison.OVERLAPPING },
-                { new QueryInterval(0, 0, 10), 0, 9, 5, BAMIteratorFilter.IntervalComparison.OVERLAPPING },
-                { new QueryInterval(0, 1, 10), 0, 9, 5, BAMIteratorFilter.IntervalComparison.OVERLAPPING },
-                { new QueryInterval(0, 1, 5), 0, 5, 10, BAMIteratorFilter.IntervalComparison.OVERLAPPING },
-        };
-    }
-
-    @Test(dataProvider = "compareIntervalToRecord")
-    public void testCompareIntervalToRecord(
-            final QueryInterval query,
-            final int refIndex,
-            final int start,
-            final int length,
-            final BAMIteratorFilter.IntervalComparison expectedState)
-    {
-        SAMRecord samRec = getSAMRecord(refIndex, start, length);
-        Assert.assertEquals(BAMQueryMultipleIntervalsIteratorFilter.compareIntervalToRecord(query, samRec), expectedState);
-    }
-
-    @DataProvider(name="compareToFilter")
-    public Object[][] compareToFilter() {
-        return new Object[][] {
-                { new QueryInterval[] { new QueryInterval(0, 10, 11), new QueryInterval(1, 1, 10) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 10, 11), new QueryInterval(1, 5, 10) },
-                        1, 1, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 20, 20), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 20, 22), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(1, 10, 22), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(1, 0, 22), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(1, -1, 22), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 10, 5), new QueryInterval(1, 1, 22) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 1, -1), new QueryInterval(1, 5, 10) },
-                        1, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION},
-
-                { new QueryInterval[] { new QueryInterval(0, 1, 4), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.STOP_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 0, 5), new QueryInterval(0, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.STOP_ITERATION },
-                { new QueryInterval[] { new QueryInterval(0, 0, 5), new QueryInterval(0, 5, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.STOP_ITERATION},
-                { new QueryInterval[] { new QueryInterval(0, 0, 5), new QueryInterval(1, 5, 5) },
-                        1, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.STOP_ITERATION},
-
-                { new QueryInterval[] { new QueryInterval(1, 10, 5), new QueryInterval(1, 10, 10) },
-                        1, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.CONTINUE_ITERATION},
-                { new QueryInterval[] { new QueryInterval(1, 10, 5), new QueryInterval(1, 10, 10) },
-                        1, 10, 5, false, BAMIteratorFilter.FilteringIteratorState.MATCHES_FILTER},
-
-                { new QueryInterval[] { new QueryInterval(0, 0, -1), new QueryInterval(1, 10, 5) },
-                        0, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.MATCHES_FILTER },
-                { new QueryInterval[] { new QueryInterval(0, 1, -1), new QueryInterval(1, 5, -1) },
-                        1, 10, 5, true, BAMIteratorFilter.FilteringIteratorState.MATCHES_FILTER},
-        };
-    }
-
-    @Test(dataProvider = "compareToFilter")
-    public void testCompareToFilter(
-            final QueryInterval[] query,
-            final int refIndex,
-            final int start,
-            final int length,
-            final boolean contained,
-            final BAMIteratorFilter.FilteringIteratorState expectedState)
-    {
-        SAMRecord samRec = getSAMRecord(refIndex, start, length);
-        BAMQueryMultipleIntervalsIteratorFilter it = new BAMQueryMultipleIntervalsIteratorFilter(query, contained);
-        Assert.assertEquals(it.compareToFilter(samRec), expectedState);
-    }
-
-    /**
-     * Fills in bases for the given record to length.
-     */
-    private SAMRecord getSAMRecord(final int refIndex, final int start, final int length) {
-        final byte[] bases = new byte[length];
-
-        SAMFileHeader samHeader = new SAMFileHeader();
-        samHeader.setSequenceDictionary(
-            new SAMSequenceDictionary(
-                Arrays.asList(
-                    new SAMSequenceRecord("chr1", 200),
-                    new SAMSequenceRecord("chr2", 200))
-            )
-        );
-        SAMRecord samRec = new SAMRecord(samHeader);
-        for (int i = 0; i < length; ++i) {
-            bases[i] = BASES[random.nextInt(BASES.length)];
-        }
-        samRec.setReadBases(bases);
-        samRec.setReferenceIndex(refIndex);
-        samRec.setAlignmentStart(start);
-        samRec.setCigarString(length + "M");
-
-        return samRec;
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/BAMRemoteFileTest.java b/src/test/java/htsjdk/samtools/BAMRemoteFileTest.java
deleted file mode 100644
index 4b686cf..0000000
--- a/src/test/java/htsjdk/samtools/BAMRemoteFileTest.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.TestUtil;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-
-import static org.testng.Assert.*;
-
-/**
- * Test BAM file indexing.
- */
-public class BAMRemoteFileTest {
-    private final File BAM_INDEX_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai");
-    private final File BAM_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-    private final String BAM_URL_STRING = TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam";
-    private final URL bamURL;
-
-    private final boolean mVerbose = false;
-
-    public BAMRemoteFileTest() throws Exception {
-        bamURL = new URL(BAM_URL_STRING);
-    }
-
-
-    @Test
-    void testRemoteLocal()
-            throws Exception {
-        runLocalRemoteTest(bamURL, BAM_FILE, "chrM", 10400, 10600, false);
-    }
-
-    @Test
-    public void testSpecificQueries()
-            throws Exception {
-        assertEquals(runQueryTest(bamURL, "chrM", 10400, 10600, true), 1);
-        assertEquals(runQueryTest(bamURL, "chrM", 10400, 10600, false), 2);
-    }
-
-    @Test(enabled = true)
-    public void testRandomQueries()
-            throws Exception {
-        runRandomTest(bamURL, 20, new Random());
-    }
-
-    @Test
-    public void testWholeChromosomes() {
-        checkChromosome("chrM", 23);
-        checkChromosome("chr1", 885);
-        checkChromosome("chr2", 837);
-        /***
-         checkChromosome("chr3", 683);
-         checkChromosome("chr4", 633);
-         checkChromosome("chr5", 611);
-         checkChromosome("chr6", 585);
-         checkChromosome("chr7", 521);
-         checkChromosome("chr8", 507);
-         checkChromosome("chr9", 388);
-         checkChromosome("chr10", 477);
-         checkChromosome("chr11", 467);
-         checkChromosome("chr12", 459);
-         checkChromosome("chr13", 327);
-         checkChromosome("chr14", 310);
-         checkChromosome("chr15", 280);
-         checkChromosome("chr16", 278);
-         checkChromosome("chr17", 269);
-         checkChromosome("chr18", 265);
-         checkChromosome("chr19", 178);
-         checkChromosome("chr20", 228);
-         checkChromosome("chr21", 123);
-         checkChromosome("chr22", 121);
-         checkChromosome("chrX", 237);
-         checkChromosome("chrY", 29);
-         ***/
-    }
-
-
-    private void checkChromosome(final String name, final int expectedCount) {
-        int count = runQueryTest(bamURL, name, 0, 0, true);
-        assertEquals(count, expectedCount);
-        count = runQueryTest(bamURL, name, 0, 0, false);
-        assertEquals(count, expectedCount);
-    }
-
-    private void runRandomTest(final URL bamFile, final int count, final Random generator) throws IOException {
-        final int maxCoordinate = 10000000;
-        final List<String> referenceNames = getReferenceNames(bamFile);
-        for (int i = 0; i < count; i++) {
-            final String refName = referenceNames.get(generator.nextInt(referenceNames.size()));
-            final int coord1 = generator.nextInt(maxCoordinate + 1);
-            final int coord2 = generator.nextInt(maxCoordinate + 1);
-            final int startPos = Math.min(coord1, coord2);
-            final int endPos = Math.max(coord1, coord2);
-            System.out.println("Testing query " + refName + ":" + startPos + "-" + endPos + " ...");
-            try {
-                runQueryTest(bamFile, refName, startPos, endPos, true);
-                runQueryTest(bamFile, refName, startPos, endPos, false);
-            } catch (Throwable exc) {
-                String message = "Query test failed: " + refName + ":" + startPos + "-" + endPos;
-                message += ": " + exc.getMessage();
-                throw new RuntimeException(message, exc);
-            }
-        }
-    }
-
-    private List<String> getReferenceNames(final URL bamFile) throws IOException {
-
-
-        final SamReader reader = SamReaderFactory.makeDefault().open(SamInputResource.of(bamFile.openStream()));
-
-        final List<String> result = new ArrayList<String>();
-        final List<SAMSequenceRecord> seqRecords = reader.getFileHeader().getSequenceDictionary().getSequences();
-        for (final SAMSequenceRecord seqRecord : seqRecords) {
-            if (seqRecord.getSequenceName() != null) {
-                result.add(seqRecord.getSequenceName());
-            }
-        }
-        reader.close();
-        return result;
-    }
-
-    private void runLocalRemoteTest(final URL bamURL, final File bamFile, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
-        final SamReader reader1 = SamReaderFactory.makeDefault()
-                .disable(SamReaderFactory.Option.EAGERLY_DECODE)
-                .open(SamInputResource.of(bamFile).index(BAM_INDEX_FILE));
-        final SamReader reader2 = SamReaderFactory.makeDefault()
-                .disable(SamReaderFactory.Option.EAGERLY_DECODE)
-                .open(SamInputResource.of(bamURL).index(BAM_INDEX_FILE));
-        final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
-        final Iterator<SAMRecord> iter2 = reader2.query(sequence, startPos, endPos, contained);
-
-        final List<SAMRecord> records1 = new ArrayList<SAMRecord>();
-        final List<SAMRecord> records2 = new ArrayList<SAMRecord>();
-
-        while (iter1.hasNext()) {
-            records1.add(iter1.next());
-        }
-        while (iter2.hasNext()) {
-            records2.add(iter2.next());
-        }
-
-        assertTrue(records1.size() > 0);
-        assertEquals(records1.size(), records2.size());
-        for (int i = 0; i < records1.size(); i++) {
-            //System.out.println(records1.get(i).format());
-            assertEquals(records1.get(i).getSAMString(), records2.get(i).getSAMString());
-        }
-
-
-    }
-
-    private int runQueryTest(final URL bamURL, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
-        final SamReader reader1 = SamReaderFactory.makeDefault()
-                .disable(SamReaderFactory.Option.EAGERLY_DECODE)
-                .open(SamInputResource.of(bamURL).index(BAM_INDEX_FILE));
-        final SamReader reader2 = SamReaderFactory.makeDefault()
-                .disable(SamReaderFactory.Option.EAGERLY_DECODE)
-                .open(SamInputResource.of(bamURL).index(BAM_INDEX_FILE));
-        final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
-        final Iterator<SAMRecord> iter2 = reader2.iterator();
-        // Compare ordered iterators.
-        // Confirm that iter1 is a subset of iter2 that properly filters.
-        SAMRecord record1 = null;
-        SAMRecord record2 = null;
-        int count1 = 0;
-        int count2 = 0;
-        int beforeCount = 0;
-        int afterCount = 0;
-        while (true) {
-            if (record1 == null && iter1.hasNext()) {
-                record1 = iter1.next();
-                count1++;
-            }
-            if (record2 == null && iter2.hasNext()) {
-                record2 = iter2.next();
-                count2++;
-            }
-            // System.out.println("Iteration:");
-            // System.out.println(" Record1 = " + ((record1 == null) ? "null" : record1.format()));
-            // System.out.println(" Record2 = " + ((record2 == null) ? "null" : record2.format()));
-            if (record1 == null && record2 == null) {
-                break;
-            }
-            if (record1 == null) {
-                checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
-                record2 = null;
-                afterCount++;
-                continue;
-            }
-            assertNotNull(record2);
-            final int ordering = compareCoordinates(record1, record2);
-            if (ordering > 0) {
-                checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
-                record2 = null;
-                beforeCount++;
-                continue;
-            }
-            assertTrue(ordering == 0);
-            checkPassesFilter(true, record1, sequence, startPos, endPos, contained);
-            checkPassesFilter(true, record2, sequence, startPos, endPos, contained);
-            assertEquals(record1.getReadName(), record2.getReadName());
-            assertEquals(record1.getReadString(), record2.getReadString());
-            record1 = null;
-            record2 = null;
-        }
-        CloserUtil.close(reader1);
-        CloserUtil.close(reader2);
-        verbose("Checked " + count1 + " records against " + count2 + " records.");
-        verbose("Found " + (count2 - beforeCount - afterCount) + " records matching.");
-        verbose("Found " + beforeCount + " records before.");
-        verbose("Found " + afterCount + " records after.");
-        return count1;
-    }
-
-    private void checkPassesFilter(final boolean expected, final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        final boolean passes = passesFilter(record, sequence, startPos, endPos, contained);
-        if (passes != expected) {
-            System.out.println("Error: Record erroneously " +
-                    (passes ? "passed" : "failed") +
-                    " filter.");
-            System.out.println(" Record: " + record.getSAMString());
-            System.out.println(" Filter: " + sequence + ":" +
-                    startPos + "-" + endPos +
-                    " (" + (contained ? "contained" : "overlapping") + ")");
-            assertEquals(passes, expected);
-        }
-    }
-
-    private boolean passesFilter(final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
-        if (record == null) {
-            return false;
-        }
-        if (!safeEquals(record.getReferenceName(), sequence)) {
-            return false;
-        }
-        final int alignmentStart = record.getAlignmentStart();
-        int alignmentEnd = record.getAlignmentEnd();
-        if (alignmentStart <= 0) {
-            assertTrue(record.getReadUnmappedFlag());
-            return false;
-        }
-        if (alignmentEnd <= 0) {
-            // For indexing-only records, treat as single base alignment.
-            assertTrue(record.getReadUnmappedFlag());
-            alignmentEnd = alignmentStart;
-        }
-        if (contained) {
-            if (startPos != 0 && alignmentStart < startPos) {
-                return false;
-            }
-            if (endPos != 0 && alignmentEnd > endPos) {
-                return false;
-            }
-        } else {
-            if (startPos != 0 && alignmentEnd < startPos) {
-                return false;
-            }
-            if (endPos != 0 && alignmentStart > endPos) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private int compareCoordinates(final SAMRecord record1, final SAMRecord record2) {
-        final int seqIndex1 = record1.getReferenceIndex();
-        final int seqIndex2 = record2.getReferenceIndex();
-        if (seqIndex1 == -1) {
-            return ((seqIndex2 == -1) ? 0 : -1);
-        } else if (seqIndex2 == -1) {
-            return 1;
-        }
-        int result = seqIndex1 - seqIndex2;
-        if (result != 0) {
-            return result;
-        }
-        result = record1.getAlignmentStart() - record2.getAlignmentStart();
-        return result;
-    }
-
-    private boolean safeEquals(final Object o1, final Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if (o1 == null || o2 == null) {
-            return false;
-        } else {
-            return o1.equals(o2);
-        }
-    }
-
-    private void verbose(final String text) {
-        if (mVerbose) {
-            System.out.println("# " + text);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/BinTest.java b/src/test/java/htsjdk/samtools/BinTest.java
deleted file mode 100644
index 271a411..0000000
--- a/src/test/java/htsjdk/samtools/BinTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-
-public class BinTest {
-    @Test
-    public void testEmptyBin() {
-        // Construct a new empty bin and ensure that the bin list is empty, not null.
-        Bin bin = new Bin(1,4681);
-        Assert.assertEquals(bin.getChunkList(),Collections.<Chunk>emptyList(),"getChunkList() in an empty bin should return an empty list.");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMBAIIndexerTest.java b/src/test/java/htsjdk/samtools/CRAMBAIIndexerTest.java
deleted file mode 100644
index 6f3b954..0000000
--- a/src/test/java/htsjdk/samtools/CRAMBAIIndexerTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.ContainerFactory;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.seekablestream.SeekableMemoryStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by vadim on 12/01/2016.
- */
-public class CRAMBAIIndexerTest {
-
-    private static CramCompressionRecord createRecord(int recordIndex, int seqId, int start) {
-        byte[] bases = "AAAAA".getBytes();
-        int readLength = bases.length;
-
-        final CramCompressionRecord record = new CramCompressionRecord();
-        record.setSegmentUnmapped(false);
-        record.setMultiFragment(false);
-        record.sequenceId = seqId;
-        record.alignmentStart =start;
-        record.readBases = record.qualityScores = bases;
-        record.readName = Integer.toString(recordIndex);
-        record.readLength = readLength;
-        record.readFeatures = Collections.emptyList();
-
-        return record;
-    }
-    @Test
-    public void test_processMultiContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        samFileHeader.addSequence(new SAMSequenceRecord("1", 10));
-        samFileHeader.addSequence(new SAMSequenceRecord("2", 10));
-        samFileHeader.addSequence(new SAMSequenceRecord("3", 10));
-        ByteArrayOutputStream indexBAOS = new ByteArrayOutputStream();
-        CRAMBAIIndexer indexer = new CRAMBAIIndexer(indexBAOS, samFileHeader);
-        int recordsPerContainer = 3;
-        ContainerFactory containerFactory = new ContainerFactory(samFileHeader, recordsPerContainer);
-        List<CramCompressionRecord> records = new ArrayList<>();
-        records.add(createRecord(0, 0, 1));
-        records.add(createRecord(1, 1, 2));
-        records.add(createRecord(2, 1, 3));
-
-        final Container container1 = containerFactory.buildContainer(records);
-        Assert.assertNotNull(container1);
-        Assert.assertEquals(container1.nofRecords, records.size());
-        Assert.assertEquals(container1.sequenceId, Slice.MULTI_REFERENCE);
-
-        indexer.processContainer(container1, ValidationStringency.STRICT);
-
-        records.clear();
-        records.add(createRecord(3, 1, 3));
-        records.add(createRecord(4, 2, 3));
-        records.add(createRecord(5, 2, 4));
-        final Container  container2 = containerFactory.buildContainer(records);
-        Assert.assertNotNull(container2);
-        Assert.assertEquals(container2.nofRecords, records.size());
-        Assert.assertEquals(container2.sequenceId, Slice.MULTI_REFERENCE);
-
-        indexer.processContainer(container2, ValidationStringency.STRICT);
-
-        indexer.finish();
-
-        BAMIndex index = new CachingBAMFileIndex(new SeekableMemoryStream(indexBAOS.toByteArray(), null), samFileHeader.getSequenceDictionary());
-        final BAMIndexMetaData metaData_0 = index.getMetaData(0);
-        Assert.assertNotNull(metaData_0);
-        Assert.assertEquals(metaData_0.getAlignedRecordCount(), 1);
-
-        final BAMIndexMetaData metaData_1 = index.getMetaData(1);
-        Assert.assertNotNull(metaData_1);
-        Assert.assertEquals(metaData_1.getAlignedRecordCount(), 3);
-
-        final BAMIndexMetaData metaData_2 = index.getMetaData(2);
-        Assert.assertNotNull(metaData_2);
-        Assert.assertEquals(metaData_2.getAlignedRecordCount(), 2);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java b/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java
deleted file mode 100644
index 11d2f3c..0000000
--- a/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIEntry;
-import htsjdk.samtools.cram.build.CramContainerIterator;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.FakeReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.ByteArraySeekableStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Companion to CRAMBAIIndexerTest, for testing CRAI indices created on cram
- * streams;
- */
-public class CRAMCRAIIndexerTest {
-
-    @Test
-    public void testCRAIIndexerFromContainer() throws IOException {
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/test2.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/test2.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-        CRAMFileReader reader = new CRAMFileReader(
-                CRAMFile,
-                null,
-                refSource,
-                ValidationStringency.STRICT);
-        SAMFileHeader samHeader = reader.getFileHeader();
-        Iterator<SAMRecord> it = reader.getIterator();
-        while(it.hasNext()) {
-            SAMRecord samRec = it.next();
-        }
-
-        reader.close();
-
-        FileInputStream fis = new FileInputStream(CRAMFile);
-        CramContainerIterator cit = new CramContainerIterator(fis);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-        CRAMCRAIIndexer craiIndexer = new CRAMCRAIIndexer(bos, samHeader);
-        while (cit.hasNext()) {
-            craiIndexer.processContainer(cit.next());
-        }
-        craiIndexer.finish();
-        bos.close();
-
-        List<CRAIEntry> craiEntries = CRAMCRAIIndexer.readIndex(new ByteArrayInputStream(bos.toByteArray())).getCRAIEntries();
-        Assert.assertEquals(craiEntries.size(), 1);
-    }
-
-    @Test
-    public void testCRAIIndexerFromStream() throws IOException {
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/test2.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/test2.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-
-        // get the header to use
-        CRAMFileReader reader = new CRAMFileReader(
-                CRAMFile,
-                null,
-                refSource,
-                ValidationStringency.STRICT);
-        SAMFileHeader samHeader = reader.getFileHeader();
-        reader.close();
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        CRAMCRAIIndexer craiIndexer = new CRAMCRAIIndexer(bos, samHeader);
-        craiIndexer.writeIndex(new SeekableFileStream(CRAMFile), bos);
-
-        List<CRAIEntry> craiEntries = CRAMCRAIIndexer.readIndex(new ByteArrayInputStream(bos.toByteArray())).getCRAIEntries();
-        Assert.assertEquals(craiEntries.size(), 1);
-    }
-
-    @Test
-    public void testMultiRefContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        samFileHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        
-        samFileHeader.addSequence(new SAMSequenceRecord("1", 10));
-        samFileHeader.addSequence(new SAMSequenceRecord("2", 10));
-        samFileHeader.addSequence(new SAMSequenceRecord("3", 10));
-
-        ReferenceSource source = new ReferenceSource(new FakeReferenceSequenceFile(samFileHeader.getSequenceDictionary().getSequences()));
-
-        ByteArrayOutputStream cramBAOS = new ByteArrayOutputStream();
-        ByteArrayOutputStream indexBAOS = new ByteArrayOutputStream();
-
-        // force the containers to be small to ensure there are 2
-        int originalDefaultSize = CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE;
-        CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = 3;
-
-        try {
-            CRAMContainerStreamWriter containerWriter = new CRAMContainerStreamWriter(cramBAOS, indexBAOS, source, samFileHeader, "test");
-            containerWriter.writeHeader(samFileHeader);
-
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 0, 0, 1));
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 1, 1, 2));
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 2, 1, 3));
-
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 3, 1, 3));
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 4, 2, 3));
-            containerWriter.writeAlignment(createSAMRecord(samFileHeader, 5, 2, 4));
-
-            containerWriter.finish(true);
-        }
-        finally {
-            // failing to reset this can cause unrelated tests to fail if this test fails
-            CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = originalDefaultSize;
-        }
-
-        // These tests all fail due to https://github.com/samtools/htsjdk/issues/531
-        // (metadata is incorrect after .crai->.bai conversion)
-        //SeekableStream baiStream = CRAIIndex.openCraiFileAsBaiStream(
-        //        new ByteArrayInputStream(indexBAOS.toByteArray()), samFileHeader.getSequenceDictionary());
-        //BAMIndex index = new CachingBAMFileIndex(baiStream, samFileHeader.getSequenceDictionary());
-        //final BAMIndexMetaData metaData_0 = index.getMetaData(0);
-        //Assert.assertNotNull(metaData_0);
-        //Assert.assertEquals(metaData_0.getAlignedRecordCount(), 1);
-        //final BAMIndexMetaData metaData_1 = index.getMetaData(1);
-        //Assert.assertNotNull(metaData_1);
-        //Assert.assertEquals(metaData_1.getAlignedRecordCount(), 3);
-        //final BAMIndexMetaData metaData_2 = index.getMetaData(2);
-        //Assert.assertNotNull(metaData_2);
-        //Assert.assertEquals(metaData_2.getAlignedRecordCount(), 2);
-
-        // NOTE: this test uses the default index format created by CRAMContainerStreamWriter
-        // which is currently .bai; when the
-        CRAMFileReader cramReader = new CRAMFileReader(
-                new ByteArraySeekableStream(cramBAOS.toByteArray()),
-                new ByteArraySeekableStream(indexBAOS.toByteArray()),
-                source,
-                ValidationStringency.DEFAULT_STRINGENCY
-        );
-        Assert.assertTrue(cramReader.hasIndex());
-
-        Iterator<SAMRecord> it = cramReader.query(new QueryInterval[]{new QueryInterval(0, 0, 5)}, false);
-        long count = getIteratorCount(it);
-        Assert.assertEquals(count, 1);
-
-        it = cramReader.query(new QueryInterval[]{new QueryInterval(1, 0, 5)}, false);
-        count = getIteratorCount(it);
-        Assert.assertEquals(count, 3);
-
-        it = cramReader.query(new QueryInterval[]{new QueryInterval(2, 0, 5)}, false);
-        count = getIteratorCount(it);
-        Assert.assertEquals(count, 2);
-    }
-
-    private static SAMRecord createSAMRecord(SAMFileHeader header, int recordIndex, int seqId, int start) {
-        byte[] bases = "AAAAA".getBytes();
-
-        final SAMRecord record = new SAMRecord(header);
-        record.setReferenceIndex(seqId);
-        record.setAlignmentStart(start);
-        record.setReadBases(bases);
-        record.setBaseQualities(bases);
-        record.setReadName(Integer.toString(recordIndex));
-
-        return record;
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testRequireCoordinateSortOrder() {
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.queryname);
-
-        new CRAMCRAIIndexer(new ByteArrayOutputStream(), header);
-    }
-
-    private long getIteratorCount(Iterator<SAMRecord> it) {
-        long count = 0;
-        while (it.hasNext()) {
-            count++;
-            it.next();
-        }
-        return count;
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/CRAMComplianceTest.java b/src/test/java/htsjdk/samtools/CRAMComplianceTest.java
deleted file mode 100644
index 81cd2f9..0000000
--- a/src/test/java/htsjdk/samtools/CRAMComplianceTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by vadim on 28/04/2015.
- */
-public class CRAMComplianceTest {
-
-    @DataProvider(name = "test1")
-    public Object[][] createData1() {
-        return new Object[][]{
-                {"auxf#values"},
-                {"c1#bounds"},
-                {"c1#clip"},
-                {"c1#noseq"},
-                {"c1#pad1"},
-                {"c1#pad2"},
-                {"c1#pad3"},
-                {"c1#unknown"},
-                {"ce#1"},
-                {"ce#2"},
-                {"ce#5b"},
-                {"ce#5"},
-                {"ce#large_seq"},
-                {"ce#supp"},
-                {"ce#tag_depadded"},
-                {"ce#tag_padded"},
-                {"ce#unmap1"},
-                {"ce#unmap2"},
-                {"ce#unmap"},
-                {"xx#blank"},
-                {"xx#large_aux2"},
-                {"xx#large_aux"},
-                {"xx#minimal"},
-                {"xx#pair"},
-                {"xx#rg"},
-                {"xx#triplet"},
-                {"xx#unsorted"},
-        };
-    }
-
-
-    @BeforeTest
-    public void beforeTest() {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-    }
-
-    private static class TestCase {
-        File bamFile;
-        File refFile;
-        File cramFile_21;
-        File cramFile_30;
-
-        public TestCase(File root, String name) {
-            bamFile = new File(root, name + ".sam");
-            refFile = new File(root, name.split("#")[0] + ".fa");
-            cramFile_21 = new File(root, name + ".2.1.cram");
-            cramFile_30 = new File(root, name + ".3.0.cram");
-        }
-    }
-
-    @Test(dataProvider = "test1")
-    public void test(String name) throws IOException {
-        TestCase t = new TestCase(new File("src/test/resources/htsjdk/samtools/cram/"), name);
-
-        ReferenceSource source = new ReferenceSource(t.refFile);
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(t.bamFile);
-
-        final SAMRecordIterator samRecordIterator = reader.iterator();
-        List<SAMRecord> samRecords = new ArrayList<SAMRecord>();
-        while (samRecordIterator.hasNext())
-            samRecords.add(samRecordIterator.next());
-        SAMFileHeader samFileHeader = reader.getFileHeader();
-        reader.close();
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        CRAMFileWriter cramFileWriter = new CRAMFileWriter(baos, source, samFileHeader, name);
-        for (SAMRecord samRecord : samRecords) {
-            cramFileWriter.addAlignment(samRecord);
-        }
-        cramFileWriter.close();
-
-
-        CRAMFileReader cramFileReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (SeekableStream)null, source, ValidationStringency.SILENT);
-        SAMRecordIterator cramFileReaderIterator = cramFileReader.getIterator();
-        for (SAMRecord samRecord : samRecords) {
-            Assert.assertTrue(cramFileReaderIterator.hasNext());
-            SAMRecord restored = cramFileReaderIterator.next();
-            Assert.assertNotNull(restored);
-            assertSameRecords(CramVersions.DEFAULT_CRAM_VERSION.major, samRecord, restored);
-        }
-        Assert.assertFalse(cramFileReaderIterator.hasNext());
-
-        //v2.1 test
-        cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_21), (SeekableStream)null, source, ValidationStringency.SILENT);
-        cramFileReaderIterator = cramFileReader.getIterator();
-        for (SAMRecord samRecord : samRecords) {
-            Assert.assertTrue(cramFileReaderIterator.hasNext());
-            SAMRecord restored = cramFileReaderIterator.next();
-            Assert.assertNotNull(restored);
-            assertSameRecords(CramVersions.CRAM_v2_1.major, samRecord, restored);
-        }
-        Assert.assertFalse(cramFileReaderIterator.hasNext());
-
-        //v3.0 test
-        cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_30), (SeekableStream)null, source, ValidationStringency.SILENT);
-        cramFileReaderIterator = cramFileReader.getIterator();
-        for (SAMRecord samRecord : samRecords) {
-            Assert.assertTrue(cramFileReaderIterator.hasNext());
-            SAMRecord restored = cramFileReaderIterator.next();
-            Assert.assertNotNull(restored);
-            assertSameRecords(CramVersions.CRAM_v3.major, samRecord, restored);
-        }
-        Assert.assertFalse(cramFileReaderIterator.hasNext());
-    }
-
-    private void assertSameRecords(int majorVersion, SAMRecord record1, SAMRecord record2) {
-        Assert.assertEquals(record2.getFlags(), record1.getFlags());
-        Assert.assertEquals(record2.getReadName(), record1.getReadName());
-        Assert.assertEquals(record2.getReferenceName(), record1.getReferenceName());
-        Assert.assertEquals(record2.getAlignmentStart(), record1.getAlignmentStart());
-
-        /**
-         * Known issue: CRAM v2.1 doesn't handle reads with missing bases correctly. This
-         * causes '*' bases to arise when reading CRAM. Skipping the base comparison asserts.
-         */
-        if (record1.getReadBases() != SAMRecord.NULL_SEQUENCE || majorVersion >= CramVersions.CRAM_v3.major) {
-            Assert.assertEquals(record2.getReadBases(), record1.getReadBases());
-        }
-
-        Assert.assertEquals(record2.getBaseQualities(), record1.getBaseQualities());
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMContainerStreamWriterTest.java b/src/test/java/htsjdk/samtools/CRAMContainerStreamWriterTest.java
deleted file mode 100644
index b26f4b0..0000000
--- a/src/test/java/htsjdk/samtools/CRAMContainerStreamWriterTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.SeekableMemoryStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.Log.LogLevel;
-import htsjdk.samtools.util.RuntimeIOException;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-public class CRAMContainerStreamWriterTest {
-
-    @BeforeClass
-    public void initClass() {
-        Log.setGlobalLogLevel(LogLevel.ERROR);
-    }
-
-    private List<SAMRecord> createRecords(int count) {
-        final List<SAMRecord> list = new ArrayList<SAMRecord>(count);
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        if (builder.getHeader().getReadGroups().isEmpty()) {
-            throw new IllegalStateException("Read group expected in the header");
-        }
-
-        int posInRef = 1;
-        for (int i = 0; i < count / 2; i++) {
-            builder.addPair(Integer.toString(i), i % 2, posInRef += 1, posInRef += 3);
-        }
-        list.addAll(builder.getRecords());
-
-        Collections.sort(list, new SAMRecordCoordinateComparator());
-
-        return list;
-    }
-
-    private SAMFileHeader createSAMHeader(SAMFileHeader.SortOrder sortOrder) {
-        final SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(sortOrder);
-        header.addSequence(new SAMSequenceRecord("chr1", 123));
-        header.addSequence(new SAMSequenceRecord("chr2", 123));
-        SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord("1");
-        header.addReadGroup(readGroupRecord);
-        return header;
-    }
-
-    private ReferenceSource createReferenceSource() {
-        final byte[] refBases = new byte[1024 * 1024];
-        Arrays.fill(refBases, (byte) 'A');
-        InMemoryReferenceSequenceFile rsf = new InMemoryReferenceSequenceFile();
-        rsf.add("chr1", refBases);
-        rsf.add("chr2", refBases);
-        return new ReferenceSource(rsf);
-    }
-
-    private void doTest(final List<SAMRecord> samRecords, final ByteArrayOutputStream outStream, final OutputStream indexStream) {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ReferenceSource refSource = createReferenceSource();
-
-        final CRAMContainerStreamWriter containerStream = new CRAMContainerStreamWriter(outStream, indexStream, refSource, header, "test");
-        containerStream.writeHeader(header);
-
-        for (SAMRecord record : samRecords) {
-            containerStream.writeAlignment(record);
-        }
-        containerStream.finish(true); // finish and issue EOF
-
-        // read all the records back in
-        final CRAMFileReader cReader = new CRAMFileReader(null, new ByteArrayInputStream(outStream.toByteArray()), refSource);
-        final SAMRecordIterator iterator = cReader.getIterator();
-        int count = 0;
-        while (iterator.hasNext()) {
-            SAMRecord actualRecord = iterator.next();
-            count++;
-        }
-        Assert.assertEquals(count, samRecords.size());
-    }
-
-    @Test(description = "Test CRAMContainerStream no index")
-    public void testCRAMContainerStreamNoIndex() {
-        final List<SAMRecord> samRecords = createRecords(100);
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        doTest(samRecords, outStream, null);
-    }
-
-    @Test(description = "Test CRAMContainerStream aggregating multiple partitions")
-    public void testCRAMContainerAggregatePartitions() throws IOException {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ReferenceSource refSource = createReferenceSource();
-
-        // create a bunch of records and write them out to separate streams in groups
-        final int nRecs = 100;
-        final int recsPerPartition = 20;
-        final int nPartitions = nRecs/recsPerPartition;
-
-        final List<SAMRecord> samRecords = createRecords(nRecs);
-        final ArrayList<ByteArrayOutputStream> byteStreamArray = new ArrayList<>(nPartitions);
-
-        for (int partition = 0, recNum = 0; partition < nPartitions; partition++) {
-            byteStreamArray.add(partition, new ByteArrayOutputStream());
-            final CRAMContainerStreamWriter containerStream =
-                    new CRAMContainerStreamWriter(byteStreamArray.get(partition), null, refSource, header, "test");
-
-            // don't write a header for the intermediate streams
-            for (int i = 0; i <  recsPerPartition; i++) {
-                containerStream.writeAlignment(samRecords.get(recNum++));
-            }
-            containerStream.finish(false); // finish but don't issue EOF container
-        }
-
-        // now create the final aggregate file by concatenating the individual streams, but this
-        // time with a CRAM and SAM header at the front and an EOF container at the end
-        final ByteArrayOutputStream aggregateStream = new ByteArrayOutputStream();
-        final CRAMContainerStreamWriter aggregateContainerStreamWriter = new CRAMContainerStreamWriter(aggregateStream, null, refSource, header, "test");
-        aggregateContainerStreamWriter .writeHeader(header); // write out one CRAM and SAM header
-        for (int j = 0; j < nPartitions; j++) {
-            byteStreamArray.get(j).writeTo(aggregateStream);
-        }
-        aggregateContainerStreamWriter.finish(true);// write out the EOF container
-
-        // now iterate through all the records in the aggregate file
-        final CRAMFileReader cReader = new CRAMFileReader(null, new ByteArrayInputStream(aggregateStream.toByteArray()), refSource);
-        final SAMRecordIterator iterator = cReader.getIterator();
-        int count = 0;
-        while (iterator.hasNext()) {
-            Assert.assertEquals(iterator.next().toString(), samRecords.get(count).toString());
-            count++;
-        }
-        Assert.assertEquals(count, nRecs);
-    }
-
-    @Test(description = "Test CRAMContainerStream with index")
-    public void testCRAMContainerStreamWithIndex() throws IOException {
-        final List<SAMRecord> samRecords = createRecords(100);
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        final ByteArrayOutputStream indexStream = new ByteArrayOutputStream();
-        doTest(samRecords, outStream, indexStream);
-        outStream.close();
-        indexStream.close();
-
-        // write the file out
-        final File cramTempFile = File.createTempFile("cramContainerStreamTest", ".cram");
-        cramTempFile.deleteOnExit();
-        final OutputStream cramFileStream = new FileOutputStream(cramTempFile);
-        cramFileStream.write(outStream.toByteArray());
-        cramFileStream.close();
-
-        // write the index out
-        final File indexTempFile = File.createTempFile("cramContainerStreamTest", ".bai");
-        indexTempFile.deleteOnExit();
-        OutputStream indexFileStream = new FileOutputStream(indexTempFile);
-        indexFileStream.write(indexStream.toByteArray());
-        indexFileStream.close();
-
-        final ReferenceSource refSource = createReferenceSource();
-        final CRAMFileReader reader = new CRAMFileReader(
-                cramTempFile,
-                indexTempFile,
-                refSource,
-                ValidationStringency.SILENT);
-        final CloseableIterator<SAMRecord> iterator = reader.query(new QueryInterval[]{new QueryInterval(1, 10, 10)}, false);
-        int count = 0;
-        while (iterator.hasNext()) {
-            SAMRecord actualRecord = iterator.next();
-            count++;
-        }
-        Assert.assertEquals(count, 2);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMEdgeCasesTest.java b/src/test/java/htsjdk/samtools/CRAMEdgeCasesTest.java
deleted file mode 100644
index e77e0e8..0000000
--- a/src/test/java/htsjdk/samtools/CRAMEdgeCasesTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * A collection of CRAM test based on round trip comparison of SAMRecord before and after CRAM compression.
- */
-public class CRAMEdgeCasesTest {
-
-    @BeforeTest
-    public void beforeTest() {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-    }
-
-    @Test
-    public void testUnsorted() throws IOException {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-        builder.addFrag("1", 0, 2, false);
-        builder.addFrag("1", 0, 1, false);
-        final Collection<SAMRecord> records = builder.getRecords();
-
-        testRecords(records, records.iterator().next().getReadBases());
-    }
-
-    // int test for CRAMException
-    // testing for a contig found in the reads but not in the reference
-    @Test(expectedExceptions = CRAMException.class)
-    public void testContigNotFoundInRef() throws IOException {
-        boolean sawException = false;
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa");
-        final ReferenceSource refSource = new ReferenceSource(refFile);
-        final CRAMIterator iterator = new CRAMIterator(new FileInputStream(CRAMFile), refSource, ValidationStringency.STRICT);
-        while (iterator.hasNext()) {
-            iterator.next();
-        }
-    }
-
-    @Test
-    public void testBizilionTags() throws IOException {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        builder.addFrag("1", 0, 1, false);
-        SAMRecord record = builder.getRecords().iterator().next();
-        for (int i = 0; i < 1000; i++) {
-            char b1 = (char) ('A' + i / 26);
-            char b2 = (char) ('A' + i % 26);
-            String tag = new String(new char[]{b1, b2});
-            if ("RG".equals(tag)) {
-                continue;
-            }
-            record.setAttribute(tag, i);
-        }
-
-        record.setAlignmentStart(1);
-        testSingleRecord(record, record.getReadBases());
-    }
-
-    @Test
-    public void testNullsAndBeyondRef() throws IOException {
-        testSingleRecord("A".getBytes(), "!".getBytes(), "A".getBytes());
-        testSingleRecord("A".getBytes(), SAMRecord.NULL_QUALS, "A".getBytes());
-        testSingleRecord(SAMRecord.NULL_SEQUENCE, SAMRecord.NULL_QUALS, "A".getBytes());
-        testSingleRecord("AAA".getBytes(), "!!!".getBytes(), "A".getBytes());
-    }
-
-    private void testRecords(Collection<SAMRecord> records, byte[] ref) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        InMemoryReferenceSequenceFile refFile = new InMemoryReferenceSequenceFile();
-        refFile.add("chr1", ref);
-        ReferenceSource source = new ReferenceSource(refFile);
-        final SAMFileHeader header = records.iterator().next().getHeader();
-        CRAMFileWriter cramFileWriter = new CRAMFileWriter(baos, source, header, "whatever");
-
-        Iterator<SAMRecord> it = records.iterator();
-        while (it.hasNext()) {
-            SAMRecord record = it.next();
-            cramFileWriter.addAlignment(record);
-        }
-        cramFileWriter.close();
-
-        CRAMFileReader cramFileReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (SeekableStream) null, source, ValidationStringency.SILENT);
-        final SAMRecordIterator iterator = cramFileReader.getIterator();
-        Assert.assertTrue(iterator.hasNext());
-
-        it = records.iterator();
-        while (it.hasNext()) {
-            SAMRecord record = it.next();
-            SAMRecord s2 = iterator.next();
-            Assert.assertNotNull(s2);
-            Assert.assertEquals(record.getFlags(), s2.getFlags());
-            Assert.assertEquals(record.getReadName(), s2.getReadName());
-            Assert.assertEquals(record.getReferenceName(), s2.getReferenceName());
-            Assert.assertEquals(record.getAlignmentStart(), s2.getAlignmentStart());
-            Assert.assertEquals(record.getReadBases(), s2.getReadBases());
-            Assert.assertEquals(record.getBaseQualities(), s2.getBaseQualities());
-        }
-        Assert.assertFalse(iterator.hasNext());
-    }
-
-    private void testSingleRecord(SAMRecord record, byte[] ref) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        InMemoryReferenceSequenceFile refFile = new InMemoryReferenceSequenceFile();
-        refFile.add("chr1", ref);
-        ReferenceSource source = new ReferenceSource(refFile);
-        CRAMFileWriter cramFileWriter = new CRAMFileWriter(baos, source, record.getHeader(), "whatever");
-        cramFileWriter.addAlignment(record);
-        cramFileWriter.close();
-
-        CRAMFileReader cramFileReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (SeekableStream) null, source, ValidationStringency.SILENT);
-        final SAMRecordIterator iterator = cramFileReader.getIterator();
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord s2 = iterator.next();
-        Assert.assertNotNull(s2);
-        Assert.assertFalse(iterator.hasNext());
-
-        Assert.assertEquals(record.getFlags(), s2.getFlags());
-        Assert.assertEquals(record.getReadName(), s2.getReadName());
-        Assert.assertEquals(record.getReferenceName(), s2.getReferenceName());
-        Assert.assertEquals(record.getAlignmentStart(), s2.getAlignmentStart());
-        Assert.assertEquals(record.getReadBases(), s2.getReadBases());
-        Assert.assertEquals(record.getBaseQualities(), s2.getBaseQualities());
-    }
-
-    private void testSingleRecord(byte[] bases, byte[] scores, byte[] ref) throws IOException {
-        SAMFileHeader header = new SAMFileHeader();
-        header.addReadGroup(new SAMReadGroupRecord("1"));
-        header.addSequence(new SAMSequenceRecord("chr1", ref.length));
-        SAMRecord s = new SAMRecord(header);
-        s.setReadBases(bases);
-        s.setBaseQualities(scores);
-        s.setFlags(0);
-        s.setAlignmentStart(1);
-        s.setReferenceName("chr1");
-        s.setReadName("1");
-        if (bases == SAMRecord.NULL_SEQUENCE) {
-            s.setCigarString("10M");
-        } else {
-            s.setCigarString(s.getReadLength() + "M");
-        }
-
-        testSingleRecord(s, ref);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMFileBAIIndexTest.java b/src/test/java/htsjdk/samtools/CRAMFileBAIIndexTest.java
deleted file mode 100644
index eba2b4c..0000000
--- a/src/test/java/htsjdk/samtools/CRAMFileBAIIndexTest.java
+++ /dev/null
@@ -1,301 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.ContainerParser;
-import htsjdk.samtools.cram.build.CramContainerIterator;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.reference.FakeReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.ByteArraySeekableStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * A collection of tests for CRAM BAI index write/read that use BAMFileIndexTest/index_test.bam file as the source of the test data.
- * The test will create a BAI index of the cram file before hand.
- * The scan* tests check that for every records in the BAM file the query returns the same records from the CRAM file.
- * Created by Vadim on 14/03/2015.
- */
-public class CRAMFileBAIIndexTest {
-    private final File BAM_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-    private File cramFile;
-    private File indexFile;
-    private byte[] cramBytes;
-    private byte[] baiBytes;
-    private ReferenceSource source;
-    private int nofUnmappedReads = 279 ;
-    private int nofMappedReads = 9721;
-    private int nofReads = 10000 ;
-    private int nofReadsPerContainer = 1000 ;
-
-
-    // Mixes testing queryAlignmentStart with each CRAMFileReaderConstructor
-    // Separate into individual tests
-    @Test
-    public void testConstructors () throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(cramFile, indexFile, source, ValidationStringency.SILENT);
-        CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-
-        reader = new CRAMFileReader(new SeekableFileStream(cramFile), indexFile, source, ValidationStringency.SILENT);
-        iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-
-        reader = new CRAMFileReader(new SeekableFileStream(cramFile), new SeekableFileStream(indexFile), source, ValidationStringency.SILENT);
-        iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-
-        reader = new CRAMFileReader(new SeekableFileStream(cramFile), (File)null, source, ValidationStringency.SILENT);
-        try {
-            reader.queryAlignmentStart("chrM", 1500);
-            Assert.fail("Expecting query to fail when there is no index");
-        } catch (SAMException e) {
-        }
-        reader.close();
-
-        reader = new CRAMFileReader(new SeekableFileStream(cramFile), (SeekableFileStream)null, source, ValidationStringency.SILENT);
-        try {
-            reader.queryAlignmentStart("chrM", 1500);
-            Assert.fail("Expecting query to fail when there is no index");
-        } catch (SAMException e) {
-        }
-        reader.close();
-    }
-
-    // this test is the same as the ones above in testConstructors
-    @Test
-    public void test_chrM_1500_location() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(cramFile, indexFile, source);
-        reader.setValidationStringency(ValidationStringency.SILENT);
-        CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-    }
-
-    @Test
-    public void scanMappedReads() throws IOException {
-        SamReader samReader = SamReaderFactory.makeDefault().open(BAM_FILE);
-        SAMRecordIterator samRecordIterator = samReader.iterator();
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT);
-        reader.setValidationStringency(ValidationStringency.SILENT);
-
-        int counter = 0;
-        while (samRecordIterator.hasNext()) {
-            SAMRecord samRecord = samRecordIterator.next();
-            if (samRecord.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) break;
-            // test only 1st and 2nd in every 100 to speed the test up:
-            if (counter++ %100 > 1) continue;
-            String s1 = samRecord.getSAMString();
-
-            CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart(samRecord.getReferenceName(), samRecord.getAlignmentStart());
-            Assert.assertTrue(iterator.hasNext(), counter + ": " + s1);
-            SAMRecord cramRecord = iterator.next();
-
-            String s2 = cramRecord.getSAMString();
-
-            Assert.assertEquals(samRecord.getReferenceName(), cramRecord.getReferenceName(), s1 + s2);
-            // default 'overlap' is true, so test records intersect the query:
-            Assert.assertTrue(CoordMath.overlaps(cramRecord.getAlignmentStart(), cramRecord.getAlignmentEnd(), samRecord.getAlignmentStart(), samRecord.getAlignmentEnd()), s1 + s2);
-        }
-        samRecordIterator.close();
-        reader.close();
-
-        Assert.assertEquals(counter, nofMappedReads);
-    }
-
-    @Test
-    public void testNoStringencyConstructor() throws IOException {
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-
-        long start = 0;
-        long end = CRAMFile.length();
-        long[] boundaries = new long[] {start << 16, (end - 1) << 16};
-        final CRAMIterator iterator = new CRAMIterator(new SeekableFileStream(CRAMFile), refSource, boundaries);
-        long count = 0;
-        while (iterator.hasNext()) {
-            count++;
-            iterator.next();
-        }
-        Assert.assertEquals(count, 2);
-    }
-
-    @Test
-    public void testIteratorFromFileSpan_WholeFile() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT);
-        reader.setValidationStringency(ValidationStringency.SILENT);
-
-        final SAMFileSpan allContainers = reader.getFilePointerSpanningReads();
-        final CloseableIterator<SAMRecord> iterator = reader.getIterator(allContainers);
-        Assert.assertTrue(iterator.hasNext());
-        int counter = 0;
-        while (iterator.hasNext()) {
-            iterator.next();
-            counter++;
-        }
-        Assert.assertEquals(counter, nofReads);
-    }
-
-    @Test
-    public void testIteratorFromFileSpan_SecondContainer() throws IOException, IllegalAccessException {
-        CramContainerIterator it = new CramContainerIterator(new ByteArrayInputStream(cramBytes));
-        it.hasNext();
-        it.next();
-        it.hasNext();
-        Container secondContainer = it.next();
-        Assert.assertNotNull(secondContainer);
-        final Map<Integer, AlignmentSpan> references = new ContainerParser(it.getCramHeader().getSamFileHeader()).getReferences(secondContainer, ValidationStringency.STRICT);
-        it.close();
-        int refId = new TreeSet<Integer>(references.keySet()).iterator().next();
-        final AlignmentSpan alignmentSpan = references.get(refId);
-
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT);
-        reader.setValidationStringency(ValidationStringency.SILENT);
-
-        final BAMIndex index = reader.getIndex();
-        final SAMFileSpan spanOfSecondContainer = index.getSpanOverlapping(refId, alignmentSpan.getStart(), alignmentSpan.getStart()+ alignmentSpan.getSpan());
-        Assert.assertNotNull(spanOfSecondContainer);
-        Assert.assertFalse(spanOfSecondContainer.isEmpty());
-        Assert.assertTrue(spanOfSecondContainer instanceof BAMFileSpan);
-
-        final CloseableIterator<SAMRecord> iterator = reader.getIterator(spanOfSecondContainer);
-        Assert.assertTrue(iterator.hasNext());
-        int counter = 0;
-        boolean matchFound = false;
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-            if (record.getReferenceIndex().intValue() == refId) {
-                boolean overlaps = CoordMath.overlaps(record.getAlignmentStart(), record.getAlignmentEnd(), alignmentSpan.getStart(), alignmentSpan.getStart()+ alignmentSpan.getSpan());
-                if (overlaps) matchFound = true;
-            }
-            counter++;
-        }
-        Assert.assertTrue(matchFound);
-        Assert.assertTrue(counter <= CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE);
-    }
-
-    @Test
-    public void testQueryInterval() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT);
-        QueryInterval[] query = new QueryInterval[]{new QueryInterval(0, 1519, 1520), new QueryInterval(1, 470535, 470536)};
-        final CloseableIterator<SAMRecord> iterator = reader.query(query, false);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord r1 = iterator.next();
-        Assert.assertEquals(r1.getReadName(), "3968040");
-
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord r2 = iterator.next();
-        Assert.assertEquals(r2.getReadName(), "140419");
-
-        Assert.assertFalse(iterator.hasNext());
-        iterator.close();
-        reader.close();
-    }
-
-    @Test
-    public void scanAllUnmappedReads() throws IOException {
-        SamReader samReader = SamReaderFactory.makeDefault().open(BAM_FILE);
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT);
-        reader.setValidationStringency(ValidationStringency.SILENT);
-        int counter = 0;
-
-        SAMRecordIterator unmappedSamIterator = samReader.queryUnmapped();
-        CloseableIterator<SAMRecord> unmappedCramIterator = reader.queryUnmapped();
-        while (unmappedSamIterator.hasNext()) {
-            Assert.assertTrue(unmappedCramIterator.hasNext());
-            SAMRecord r1 = unmappedSamIterator.next();
-            SAMRecord r2 = unmappedCramIterator.next();
-            Assert.assertEquals(r1.getReadName(), r2.getReadName());
-            Assert.assertEquals(r1.getBaseQualityString(), r2.getBaseQualityString());
-
-            counter++;
-        }
-        Assert.assertFalse(unmappedCramIterator.hasNext());
-        Assert.assertEquals(counter, nofUnmappedReads);
-
-        reader.close();
-    }
-
-    @BeforeTest
-    public void prepare() throws IOException {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-        source = new ReferenceSource(new FakeReferenceSequenceFile(SamReaderFactory.makeDefault().getFileHeader(BAM_FILE).getSequenceDictionary().getSequences()));
-        cramBytes = cramFromBAM(BAM_FILE, source);
-        cramFile = File.createTempFile(BAM_FILE.getName(), ".cram") ;
-        cramFile.deleteOnExit();
-        indexFile = new File (cramFile.getAbsolutePath() + ".bai");
-        indexFile.deleteOnExit();
-        FileOutputStream fos = new FileOutputStream(cramFile);
-        fos.write(cramBytes);
-        fos.close();
-
-        CRAMBAIIndexer.createIndex(new SeekableFileStream(cramFile), indexFile, null, ValidationStringency.STRICT);
-        baiBytes = readFile(indexFile);
-    }
-
-    private static byte[] readFile(File file) throws FileNotFoundException {
-        FileInputStream fis = new FileInputStream(file);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        IOUtil.copyStream(fis, baos);
-        return baos.toByteArray();
-    }
-
-    private byte[] cramFromBAM(File bamFile, ReferenceSource source) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
-        final SAMRecordIterator iterator = reader.iterator();
-        // to reduce granularity let's use this hacky approach:
-        int previousValue = CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE ;
-        CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = nofReadsPerContainer;
-        try {
-            CRAMFileWriter writer = new CRAMFileWriter(baos, source, reader.getFileHeader(), bamFile.getName());
-            while (iterator.hasNext()) {
-                SAMRecord record = iterator.next();
-                writer.addAlignment(record);
-            }
-            writer.close();
-        }
-        finally {
-            // failing to reset this can cause unrelated tests to fail if this test fails
-            CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = previousValue;
-        }
-        return baos.toByteArray();
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMFileCRAIIndexTest.java b/src/test/java/htsjdk/samtools/CRAMFileCRAIIndexTest.java
deleted file mode 100644
index 9084a0f..0000000
--- a/src/test/java/htsjdk/samtools/CRAMFileCRAIIndexTest.java
+++ /dev/null
@@ -1,368 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.ContainerParser;
-import htsjdk.samtools.cram.build.CramContainerIterator;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.reference.FakeReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.ByteArraySeekableStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CoordMath;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * Companion tests for the ones in CRAMFileBAIIndexTest, but run against a .bai
- * that has been converted from a .crai.
- *
- * A collection of tests for CRAM CRAI index write/read that use BAMFileIndexTest/index_test.bam
- * file as the source of the test data. The scan* tests check that for every records in the
- * CRAM file the query returns the same records from the CRAM file.
- */
-public class CRAMFileCRAIIndexTest {
-    private final File BAM_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-
-    private final int nofReads = 10000 ;
-    private final int nofReadsPerContainer = 1000 ;
-    private final int nofUnmappedReads = 279 ;
-    private final int nofMappedReads = 9721;
-
-    private File tmpCramFile;
-    private File tmpCraiFile;
-    private byte[] cramBytes;
-    private byte[] craiBytes;
-    private ReferenceSource source;
-
-    @Test
-    public void testFileFileConstructor () throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                tmpCramFile,
-                tmpCraiFile,
-                source,
-                ValidationStringency.STRICT);
-        CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart("chrM", 1500);
-
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record = iterator.next();
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-    }
-
-    @Test
-    public void testStreamFileConstructor () throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new SeekableFileStream(tmpCramFile),
-                tmpCraiFile,
-                source,
-                ValidationStringency.STRICT);
-        CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-    }
-
-    @Test
-    public void testStreamStreamConstructor() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new SeekableFileStream(tmpCramFile),
-                new SeekableFileStream(tmpCraiFile),
-                source,
-                ValidationStringency.STRICT);
-        CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart("chrM", 1500);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record = iterator.next();
-
-        Assert.assertEquals(record.getReferenceName(), "chrM");
-        Assert.assertTrue(record.getAlignmentStart() >= 1500);
-        reader.close();
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testFileFileConstructorNoIndex () throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new SeekableFileStream(tmpCramFile),
-                (File) null,
-                source,
-                ValidationStringency.STRICT);
-        try {
-            reader.queryAlignmentStart("chrM", 1500);
-        }
-        finally {
-            reader.close();
-        }
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testStreamStreamConstructorNoIndex () throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new SeekableFileStream(tmpCramFile),
-                (SeekableFileStream) null,
-                source,
-                ValidationStringency.STRICT);
-        try {
-            reader.queryAlignmentStart("chrM", 1500);
-        }
-        finally {
-            reader.close();
-        }
-    }
-
-    @Test
-    public void testMappedReads() throws IOException {
-
-        try (SamReader samReader = SamReaderFactory.makeDefault().open(BAM_FILE);
-             SAMRecordIterator samRecordIterator = samReader.iterator())
-        {
-            Assert.assertEquals(samReader.getFileHeader().getSortOrder(), SAMFileHeader.SortOrder.coordinate);
-            CRAMFileReader cramReader = new CRAMFileReader(
-                    new ByteArraySeekableStream(cramBytes),
-                    new ByteArraySeekableStream(craiBytes),
-                    source,
-                    ValidationStringency.STRICT);
-
-            int counter = 0;
-            while (samRecordIterator.hasNext()) {
-                SAMRecord samRecord = samRecordIterator.next();
-                if (samRecord.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
-                    break;
-                }
-                if (counter++ % 100 > 1) { // test only 1st and 2nd in every 100 to speed the test up:
-                    continue;
-                }
-                String sam1 = samRecord.getSAMString();
-
-                CloseableIterator<SAMRecord> iterator = cramReader.queryAlignmentStart(
-                        samRecord.getReferenceName(),
-                        samRecord.getAlignmentStart());
-
-                Assert.assertTrue(iterator.hasNext(), counter + ": " + sam1);
-                SAMRecord cramRecord = iterator.next();
-                String sam2 = cramRecord.getSAMString();
-                Assert.assertEquals(samRecord.getReferenceName(), cramRecord.getReferenceName(), sam1 + sam2);
-
-                // default 'overlap' is true, so test records intersect the query:
-                Assert.assertTrue(CoordMath.overlaps(
-                        cramRecord.getAlignmentStart(),
-                        cramRecord.getAlignmentEnd(),
-                        samRecord.getAlignmentStart(),
-                        samRecord.getAlignmentEnd()),
-                        sam1 + sam2);
-            }
-            Assert.assertEquals(counter, nofMappedReads);
-            cramReader.close();
-        }
-    }
-
-    @Test
-    public void testQueryUnmapped() throws IOException {
-        try (final SamReader samReader = SamReaderFactory.makeDefault().open(BAM_FILE);
-             final SAMRecordIterator unmappedSamIterator = samReader.queryUnmapped())
-        {
-            CRAMFileReader reader = new CRAMFileReader(
-                    new ByteArraySeekableStream(cramBytes),
-                    new ByteArraySeekableStream(craiBytes),
-                    source,
-                    ValidationStringency.STRICT);
-            int counter = 0;
-            CloseableIterator<SAMRecord> unmappedCramIterator = reader.queryUnmapped();
-
-            while (unmappedSamIterator.hasNext()) {
-                Assert.assertTrue(unmappedCramIterator.hasNext());
-                SAMRecord r1 = unmappedSamIterator.next();
-                SAMRecord r2 = unmappedCramIterator.next();
-                Assert.assertEquals(r1.getReadName(), r2.getReadName());
-                Assert.assertEquals(r1.getBaseQualityString(), r2.getBaseQualityString());
-                counter++;
-            }
-
-            Assert.assertFalse(unmappedCramIterator.hasNext());
-            Assert.assertEquals(counter, nofUnmappedReads);
-        }
-    }
-
-    @Test
-    public void testIteratorConstructor() throws IOException {
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-
-        long[] boundaries = new long[] {0, (CRAMFile.length() - 1) << 16};
-        final CRAMIterator iterator = new CRAMIterator(
-                new SeekableFileStream(CRAMFile),
-                refSource, boundaries,
-                ValidationStringency.STRICT);
-        long count = getIteratorCount(iterator);
-        Assert.assertEquals(count, 2);
-    }
-
-    @Test
-    public void testNoStringencyIteratorConstructor() throws IOException {
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-
-        long[] boundaries = new long[] {0, (CRAMFile.length() - 1) << 16};
-        final CRAMIterator iterator = new CRAMIterator(new SeekableFileStream(CRAMFile), refSource, boundaries);
-
-        long count = getIteratorCount(iterator);
-        Assert.assertEquals(count, 2);
-    }
-
-    @Test
-    public void testIteratorWholeFileSpan() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new ByteArraySeekableStream(cramBytes),
-                new ByteArraySeekableStream(craiBytes),
-                source,
-                ValidationStringency.STRICT);
-
-        final SAMFileSpan allContainers = reader.getFilePointerSpanningReads();
-        final CloseableIterator<SAMRecord> iterator = reader.getIterator(allContainers);
-        Assert.assertTrue(iterator.hasNext());
-        long count = getIteratorCount(iterator);
-        Assert.assertEquals(count, nofReads);
-    }
-
-    @Test
-    public void testIteratorSecondContainerSpan() throws IOException, IllegalAccessException {
-        CramContainerIterator it = new CramContainerIterator(new ByteArrayInputStream(cramBytes));
-        it.hasNext();
-        it.next();
-        it.hasNext();
-        Container secondContainer = it.next();
-        Assert.assertNotNull(secondContainer);
-        final Map<Integer, AlignmentSpan> references =
-                new ContainerParser(it.getCramHeader().getSamFileHeader()).getReferences(secondContainer, ValidationStringency.STRICT);
-        it.close();
-
-        int refId = new TreeSet<>(references.keySet()).iterator().next();
-        final AlignmentSpan alignmentSpan = references.get(refId);
-
-        CRAMFileReader reader = new CRAMFileReader(
-                new ByteArraySeekableStream(cramBytes),
-                new ByteArraySeekableStream(craiBytes),
-                source,
-                ValidationStringency.STRICT);
-
-        final BAMIndex index = reader.getIndex();
-        final SAMFileSpan spanOfSecondContainer = index.getSpanOverlapping(refId, alignmentSpan.getStart(), alignmentSpan.getStart()+ alignmentSpan.getSpan());
-        Assert.assertNotNull(spanOfSecondContainer);
-        Assert.assertFalse(spanOfSecondContainer.isEmpty());
-        Assert.assertTrue(spanOfSecondContainer instanceof BAMFileSpan);
-
-        final CloseableIterator<SAMRecord> iterator = reader.getIterator(spanOfSecondContainer);
-        Assert.assertTrue(iterator.hasNext());
-        int counter = 0;
-        boolean matchFound = false;
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-            if (record.getReferenceIndex().intValue() == refId) {
-                boolean overlaps = CoordMath.overlaps(record.getAlignmentStart(), record.getAlignmentEnd(), alignmentSpan.getStart(), alignmentSpan.getStart()+ alignmentSpan.getSpan());
-                if (overlaps) matchFound = true;
-            }
-            counter++;
-        }
-        Assert.assertTrue(matchFound);
-        Assert.assertTrue(counter <= CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE);
-    }
-
-    @Test
-    public void testQueryInterval() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(
-                new ByteArraySeekableStream(cramBytes),
-                new ByteArraySeekableStream(craiBytes),
-                source,
-                ValidationStringency.STRICT);
-        QueryInterval[] query = new QueryInterval[]{new QueryInterval(0, 1519, 1520), new QueryInterval(1, 470535, 470536)};
-        final CloseableIterator<SAMRecord> iterator = reader.query(query, false);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord r1 = iterator.next();
-        Assert.assertEquals(r1.getReadName(), "3968040");
-
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord r2 = iterator.next();
-        Assert.assertEquals(r2.getReadName(), "140419");
-
-        Assert.assertFalse(iterator.hasNext());
-        iterator.close();
-        reader.close();
-    }
-
-    @BeforeTest
-    public void prepare() throws IOException {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-        source = new ReferenceSource(new FakeReferenceSequenceFile(
-                SamReaderFactory.makeDefault().getFileHeader(BAM_FILE).getSequenceDictionary().getSequences()));
-
-        tmpCramFile = File.createTempFile(BAM_FILE.getName(), ".cram") ;
-        tmpCramFile.deleteOnExit();
-        tmpCraiFile = new File (tmpCramFile.getAbsolutePath() + ".crai");
-        tmpCraiFile.deleteOnExit();
-        cramBytes = cramFromBAM(BAM_FILE, source);
-
-        FileOutputStream fos = new FileOutputStream(tmpCramFile);
-        fos.write(cramBytes);
-        fos.close();
-
-        FileOutputStream fios = new FileOutputStream(tmpCraiFile);
-        CRAMCRAIIndexer.writeIndex(new SeekableFileStream(tmpCramFile), fios);
-        craiBytes = readFile(tmpCraiFile);
-    }
-
-    private static byte[] readFile(File file) throws FileNotFoundException {
-        FileInputStream fis = new FileInputStream(file);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        IOUtil.copyStream(fis, baos);
-        return baos.toByteArray();
-    }
-
-    private byte[] cramFromBAM(File bamFile, ReferenceSource source) throws IOException {
-
-        int previousValue = CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE;
-        CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = nofReadsPerContainer;
-
-        try (final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
-             final SAMRecordIterator iterator = reader.iterator();
-             final ByteArrayOutputStream baos = new ByteArrayOutputStream())
-        {
-            CRAMFileWriter writer = new CRAMFileWriter(
-                    baos,
-                    source,
-                    reader.getFileHeader(),
-                    bamFile.getName());
-            while (iterator.hasNext()) {
-                SAMRecord record = iterator.next();
-                writer.addAlignment(record);
-            }
-            writer.close();
-            return baos.toByteArray();
-        }
-        finally {
-            // failing to reset this can cause unrelated tests to fail if this test fails
-            CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE = previousValue;
-        }
-    }
-
-    private long getIteratorCount(Iterator<SAMRecord> it) {
-        long count = 0;
-        while (it.hasNext()) {
-            count++;
-            it.next();
-        }
-        return count;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMFileReaderTest.java b/src/test/java/htsjdk/samtools/CRAMFileReaderTest.java
deleted file mode 100644
index 3fcb3bd..0000000
--- a/src/test/java/htsjdk/samtools/CRAMFileReaderTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-
-/**
- * Additional tests for CRAMFileReader are in CRAMFileIndexTest
- */
-public class CRAMFileReaderTest {
-
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-    private static final File CRAM_WITH_CRAI = new File(TEST_DATA_DIR, "cram_with_crai_index.cram");
-    private static final File CRAM_WITHOUT_CRAI = new File(TEST_DATA_DIR, "cram_query_sorted.cram");
-    private static final ReferenceSource REFERENCE = createReferenceSource();
-    private static final File INDEX_FILE = new File(TEST_DATA_DIR, "cram_with_crai_index.cram.crai");
-
-
-    @BeforeClass
-    public void initClass() {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-    }
-
-    private static ReferenceSource createReferenceSource() {
-        byte[] refBases = new byte[10 * 10];
-        Arrays.fill(refBases, (byte) 'A');
-        InMemoryReferenceSequenceFile rsf = new InMemoryReferenceSequenceFile();
-        rsf.add("chr1", refBases);
-        return new ReferenceSource(rsf);
-    }
-
-    // constructor 1: CRAMFileReader(final File cramFile, final InputStream inputStream)
-
-    @Test(description = "Test CRAMReader 1 reference required", expectedExceptions = IllegalStateException.class)
-    public void testCRAMReader1_ReferenceRequired() {
-        InputStream bis = null;
-        // assumes that reference_fasta property is not set and the download service is not enabled
-        new CRAMFileReader(CRAM_WITH_CRAI, bis);
-    }
-
-    // constructor 2: CRAMFileReader(final File cramFile, final InputStream inputStream, final ReferenceSource referenceSource)
-
-    @Test(description = "Test CRAMReader 2 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader2ReferenceRequired() {
-        InputStream bis =  null;
-        new CRAMFileReader(CRAM_WITH_CRAI, bis, null);
-    }
-
-    @Test(description = "Test CRAMReader 2 input required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader2_InputRequired() {
-        File file = null;
-        InputStream bis =  null;
-        new CRAMFileReader(file, bis, createReferenceSource());
-    }
-
-    @Test
-    public void testCRAMReader2_ShouldAutomaticallyFindCRAMIndex() {
-        InputStream inputStream = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, inputStream, REFERENCE);
-        reader.getIndex();
-        Assert.assertTrue(reader.hasIndex(), "Can't find CRAM existing index.");
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testCRAMReader2_WithoutCRAMIndex() {
-        InputStream inputStream = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITHOUT_CRAI, inputStream, REFERENCE);
-        reader.getIndex();
-    }
-
-    // constructor 3: CRAMFileReader(final File cramFile, final File indexFile, final ReferenceSource referenceSource)
-
-    @Test(description = "Test CRAMReader 3 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader3_RequiredReference() {
-        File indexFile = null;
-        ReferenceSource refSource = null;
-        new CRAMFileReader(CRAM_WITH_CRAI, indexFile, refSource);
-    }
-
-    @Test(description = "Test CRAMReader 3 input required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader3_InputRequired() {
-        File inputFile = null;
-        File indexFile = null;
-        ReferenceSource refSource = null;
-        new CRAMFileReader(inputFile, indexFile, refSource);
-    }
-
-    @Test
-    public void testCRAMReader3_ShouldAutomaticallyFindCRAMIndex() {
-        File indexFile = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, indexFile, REFERENCE);
-        reader.getIndex();
-        Assert.assertTrue(reader.hasIndex(), "Can't find existing CRAM index.");
-    }
-
-    @Test
-    public void testCRAMReader3_ShouldUseCRAMIndex() {
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, INDEX_FILE, REFERENCE);
-        reader.getIndex();
-        Assert.assertTrue(reader.hasIndex(), "Can't find existing CRAM index.");
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testCRAMReader3_WithoutCRAMIndex() {
-        File indexFile = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITHOUT_CRAI, indexFile, REFERENCE);
-        reader.getIndex();
-    }
-
-    // constructor 4: CRAMFileReader(final File cramFile, final ReferenceSource referenceSource)
-
-    @Test(description = "Test CRAMReader 4 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader4_ReferenceRequired() {
-        ReferenceSource refSource = null;
-        new CRAMFileReader(CRAM_WITH_CRAI, refSource);
-    }
-
-    @Test(description = "Test CRAMReader 4 input required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader4_InputRequired() {
-        File inputFile = null;
-        new CRAMFileReader(inputFile, createReferenceSource());
-    }
-
-    @Test
-    public void testCRAMReader4_ShouldAutomaticallyFindCRAMIndex() {
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, REFERENCE);
-        reader.getIndex();
-        Assert.assertTrue(reader.hasIndex(), "Can't find existing CRAM index.");
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testCRAMReader4_WithoutCRAMIndex() {
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITHOUT_CRAI, REFERENCE);
-        reader.getIndex();
-    }
-
-    // constructor 5: CRAMFileReader(final InputStream inputStream, final SeekableStream indexInputStream,
-    //          final ReferenceSource referenceSource, final ValidationStringency validationStringency)
-    @Test(description = "Test CRAMReader 5 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader5_ReferenceRequired() throws IOException {
-        InputStream bis = new ByteArrayInputStream(new byte[0]);
-        SeekableFileStream sfs = null;
-        ReferenceSource refSource = null;
-        new CRAMFileReader(bis, sfs, refSource, ValidationStringency.STRICT);
-    }
-
-    @Test(description = "Test CRAMReader 5 input required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader5_InputRequired() throws IOException {
-        InputStream bis = null;
-        SeekableFileStream sfs = null;
-        new CRAMFileReader(bis, sfs, createReferenceSource(), ValidationStringency.STRICT);
-    }
-
-    // constructor 6: CRAMFileReader(final InputStream stream, final File indexFile, final ReferenceSource referenceSource,
-    //                final ValidationStringency validationStringency)
-    @Test(description = "Test CRAMReader 6 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader6_ReferenceRequired() throws IOException {
-        InputStream bis = new ByteArrayInputStream(new byte[0]);
-        File file = null;
-        ReferenceSource refSource = null;
-        new CRAMFileReader(bis, file, refSource, ValidationStringency.STRICT);
-    }
-
-    @Test(description = "Test CRAMReader 6 input required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader6_InputRequired() throws IOException {
-        InputStream bis = null;
-        File file = null;
-        new CRAMFileReader(bis, file, createReferenceSource(), ValidationStringency.STRICT);
-    }
-
-    // constructor 7: CRAMFileReader(final File cramFile, final File indexFile, final ReferenceSource referenceSource,
-    //                final ValidationStringency validationStringency)
-    @Test(description = "Test CRAMReader 7 reference required", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMReader7_ReferenceRequired() throws IOException {
-        ReferenceSource refSource = null;
-        new CRAMFileReader(CRAM_WITH_CRAI, CRAM_WITH_CRAI, refSource, ValidationStringency.STRICT);
-    }
-
-    @Test
-    public void testCRAMReader7_ShouldAutomaticallyFindCRAMIndex()throws IOException {
-        File indexFile = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, indexFile, REFERENCE, ValidationStringency.STRICT);
-        Assert.assertTrue(reader.hasIndex(), "Can't find existing CRAM index.");
-    }
-
-    @Test
-    public void testCRAMReader7_ShouldUseCRAMIndex() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITH_CRAI, INDEX_FILE, REFERENCE, ValidationStringency.STRICT);
-        Assert.assertTrue(reader.hasIndex(), "Can't find existing CRAM index.");
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testCRAMReader7_WithoutCRAMIndex() throws IOException {
-        File indexFile = null;
-        CRAMFileReader reader = new CRAMFileReader(CRAM_WITHOUT_CRAI, indexFile, REFERENCE, ValidationStringency.STRICT);
-        reader.getIndex();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java b/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java
deleted file mode 100644
index c495528..0000000
--- a/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import htsjdk.samtools.util.Log;
-import htsjdk.samtools.util.Log.LogLevel;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-public class CRAMFileWriterTest {
-
-    @BeforeClass
-    public void initClass() {
-        Log.setGlobalLogLevel(LogLevel.ERROR);
-    }
-
-    @Test(description = "Test for lossy CRAM compression invariants.")
-    public void lossyCramInvariantsTest() {
-        doTest(createRecords(1000));
-    }
-
-    @Test(description = "Tests a writing records with null SAMFileHeaders")
-    public void writeRecordsWithNullHeader() throws Exception {
-
-        final List<SAMRecord> samRecs = createRecords(50);
-        for (SAMRecord rec : samRecs) {
-            rec.setHeader(null);
-        }
-        doTest(samRecs);
-    }
-
-    @Test(description = "Tests a unmapped record with sequence and quality fields")
-    public void unmappedWithSequenceAndQualityField() throws Exception {
-        unmappedSequenceAndQualityFieldHelper(true);
-    }
-
-    @Test(description = "Tests a unmapped record with no sequence or quality fields")
-    public void unmappedWithNoSequenceAndQualityField() throws Exception {
-        unmappedSequenceAndQualityFieldHelper(false);
-    }
-
-    private void unmappedSequenceAndQualityFieldHelper(boolean unmappedHasBasesAndQualities) throws Exception {
-        List<SAMRecord> list = new ArrayList<SAMRecord>(2);
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        if (builder.getHeader().getReadGroups().isEmpty()) {
-            throw new Exception("Read group expected in the header");
-        }
-
-        builder.setUnmappedHasBasesAndQualities(unmappedHasBasesAndQualities);
-
-        builder.addUnmappedFragment("test1");
-        builder.addUnmappedPair("test2");
-
-        list.addAll(builder.getRecords());
-
-        Collections.sort(list, new SAMRecordCoordinateComparator());
-
-        doTest(list);
-    }
-
-    private List<SAMRecord> createRecords(int count) {
-        List<SAMRecord> list = new ArrayList<SAMRecord>(count);
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        if (builder.getHeader().getReadGroups().isEmpty()) {
-            throw new IllegalStateException("Read group expected in the header");
-        }
-
-        int posInRef = 1;
-        for (int i = 0; i < count / 2; i++) {
-            builder.addPair(Integer.toString(i), 0, posInRef += 1,
-                    posInRef += 3);
-        }
-        list.addAll(builder.getRecords());
-
-        Collections.sort(list, new SAMRecordCoordinateComparator());
-
-        return list;
-    }
-
-    private SAMFileHeader createSAMHeader(SAMFileHeader.SortOrder sortOrder) {
-        final SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(sortOrder);
-        header.addSequence(new SAMSequenceRecord("chr1", 123));
-        SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord("1");
-        header.addReadGroup(readGroupRecord);
-        return header;
-    }
-
-    private ReferenceSource createReferenceSource() {
-        byte[] refBases = new byte[1024 * 1024];
-        Arrays.fill(refBases, (byte) 'A');
-        InMemoryReferenceSequenceFile rsf = new InMemoryReferenceSequenceFile();
-        rsf.add("chr1", refBases);
-        return new ReferenceSource(rsf);
-    }
-
-    private void writeRecordsToCRAM(CRAMFileWriter writer, List<SAMRecord> samRecords) {
-        for (SAMRecord record : samRecords) {
-            writer.addAlignment(record);
-        }
-        writer.close();
-    }
-
-    private void validateRecords(final List<SAMRecord> expectedRecords, ByteArrayInputStream is, ReferenceSource referenceSource) {
-        CRAMFileReader cReader = new CRAMFileReader(null, is, referenceSource);
-
-        SAMRecordIterator iterator2 = cReader.getIterator();
-        int index = 0;
-        while (iterator2.hasNext()) {
-            SAMRecord actualRecord = iterator2.next();
-            SAMRecord expectedRecord = expectedRecords.get(index++);
-
-            Assert.assertEquals(actualRecord.getReadName(), expectedRecord.getReadName());
-            Assert.assertEquals(actualRecord.getFlags(), expectedRecord.getFlags());
-            Assert.assertEquals(actualRecord.getAlignmentStart(), expectedRecord.getAlignmentStart());
-            Assert.assertEquals(actualRecord.getAlignmentEnd(), expectedRecord.getAlignmentEnd());
-            Assert.assertEquals(actualRecord.getReferenceName(), expectedRecord.getReferenceName());
-            Assert.assertEquals(actualRecord.getMateAlignmentStart(),
-                    expectedRecord.getMateAlignmentStart());
-            Assert.assertEquals(actualRecord.getMateReferenceName(),
-                    expectedRecord.getMateReferenceName());
-            Assert.assertEquals(actualRecord.getReadBases(), expectedRecord.getReadBases());
-            Assert.assertEquals(actualRecord.getBaseQualities(), expectedRecord.getBaseQualities());
-        }
-        cReader.close();
-    }
-
-    private void doTest(final List<SAMRecord> samRecords) {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ReferenceSource refSource = createReferenceSource();
-        final ByteArrayOutputStream os = new ByteArrayOutputStream();
-
-        CRAMFileWriter writer = new CRAMFileWriter(os, refSource, header, null);
-        writeRecordsToCRAM(writer, samRecords);
-
-        validateRecords(samRecords, new ByteArrayInputStream(os.toByteArray()), refSource);
-    }
-
-    @Test(description = "Test CRAMWriter constructor with index stream")
-    public void testCRAMWriterWithIndex() {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ReferenceSource refSource = createReferenceSource();
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        final ByteArrayOutputStream indexStream = new ByteArrayOutputStream();
-
-        final List<SAMRecord> samRecords = createRecords(100);
-        CRAMFileWriter writer = new CRAMFileWriter(outStream, indexStream, refSource, header, null);
-
-        writeRecordsToCRAM(writer, samRecords);
-        validateRecords(samRecords, new ByteArrayInputStream(outStream.toByteArray()), refSource);
-        Assert.assertTrue(indexStream.size() != 0);
-    }
-
-    @Test(description = "Test CRAMWriter constructor with presorted==false")
-    public void testCRAMWriterNotPresorted() {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ReferenceSource refSource = createReferenceSource();
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        final ByteArrayOutputStream indexStream = new ByteArrayOutputStream();
-
-        CRAMFileWriter writer = new CRAMFileWriter(outStream, indexStream, false, refSource, header, null);
-
-        // force records to not be coordinate sorted to ensure we're relying on presorted=false
-        final List<SAMRecord> samRecords = createRecords(100);
-        Collections.sort(samRecords, new SAMRecordCoordinateComparator().reversed());
-
-        writeRecordsToCRAM(writer, samRecords);
-
-        // for validation, restore the sort order of the expected records so they match the order of the written records
-        Collections.sort(samRecords, new SAMRecordCoordinateComparator());
-        validateRecords(samRecords, new ByteArrayInputStream(outStream.toByteArray()), refSource);
-        Assert.assertTrue(indexStream.size() != 0);
-    }
-
-    @Test(description = "Test CRAMWriter constructor reference required 1", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMWriterConstructorRequiredReference_1() {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        new CRAMFileWriter(outStream, null, header, null);
-    }
-
-    @Test(description = "Test CRAMWriter constructor reference required 2", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMWriterConstructorRequiredReference_2() {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        new CRAMFileWriter(outStream, null, null, header, null);
-    }
-
-    @Test(description = "Test CRAMWriter constructor reference required 3", expectedExceptions = IllegalArgumentException.class)
-    public void testCRAMWriterConstructorRequiredReference_3() {
-        final SAMFileHeader header = createSAMHeader(SAMFileHeader.SortOrder.coordinate);
-        final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        new CRAMFileWriter(outStream, null, true, null, header, null);
-    }
-
-    @Test
-    public void test_roundtrip_tlen_preserved() throws IOException {
-        SamReader reader = SamReaderFactory.make().open(new File("src/test/resources/htsjdk/samtools/cram_tlen_reads.sorted.sam"));
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final ReferenceSource source = new ReferenceSource(new File("src/test/resources/htsjdk/samtools/cram_tlen.fasta"));
-        CRAMFileWriter writer = new CRAMFileWriter(baos, source, reader.getFileHeader(), "test.cram");
-        SAMRecordIterator iterator = reader.iterator();
-        List<SAMRecord> records = new ArrayList<SAMRecord>();
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-            writer.addAlignment(record);
-            records.add(record);
-        }
-        writer.close();
-
-        CRAMFileReader cramReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (File) null, source, ValidationStringency.STRICT);
-        iterator = cramReader.getIterator();
-        int i = 0;
-        while (iterator.hasNext()) {
-            SAMRecord record1 = iterator.next();
-            SAMRecord record2 = records.get(i++);
-            Assert.assertEquals(record1.getInferredInsertSize(), record2.getInferredInsertSize(), record1.getReadName());
-        }
-        Assert.assertEquals(records.size(), i);
-    }
-
-    @Test
-    public void testCRAMQuerySort() throws IOException {
-        final File input = new File("src/test/resources/htsjdk/samtools/cram_query_sorted.cram");
-        final File reference = new File("src/test/resources/htsjdk/samtools/cram_query_sorted.fasta");
-        final File outputFile = File.createTempFile("tmp.", ".cram");
-
-        try (final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(reference).open(input);
-             final SAMFileWriter writer = new SAMFileWriterFactory().makeWriter(reader.getFileHeader().clone(), false, outputFile, reference)) {
-            for (SAMRecord rec : reader) {
-                writer.addAlignment(rec);
-            }
-        }
-
-        try (final SamReader outReader = SamReaderFactory.makeDefault().referenceSequence(reference).open(outputFile)) {
-            String prevName = null;
-            for (final SAMRecord rec : outReader) {
-                if (prevName == null) {
-                    prevName = rec.getReadName();
-                    continue;
-                }
-                // test if the read names are sorted alphabetically:
-                Assert.assertTrue(rec.getReadName().compareTo(prevName) >= 0);
-            }
-        }
-
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMFileWriterWithIndexTest.java b/src/test/java/htsjdk/samtools/CRAMFileWriterWithIndexTest.java
deleted file mode 100644
index b7e3eab..0000000
--- a/src/test/java/htsjdk/samtools/CRAMFileWriterWithIndexTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import htsjdk.samtools.seekablestream.ByteArraySeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.Log;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Created by vadim on 23/03/2015.
- */
-public class CRAMFileWriterWithIndexTest {
-    private byte[] cramBytes;
-    private byte[] indexBytes;
-    private InMemoryReferenceSequenceFile rsf;
-    private ReferenceSource source;
-    private SAMFileHeader header;
-
-    @Test
-    public void test() throws IOException {
-        CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(indexBytes), source, ValidationStringency.SILENT);
-        for (SAMSequenceRecord sequenceRecord : reader.getFileHeader().getSequenceDictionary().getSequences()) {
-            final CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart(sequenceRecord.getSequenceName(), 1);
-            Assert.assertNotNull(iterator);
-            Assert.assertTrue(iterator.hasNext());
-            SAMRecord record = iterator.next();
-            Assert.assertEquals(record.getReferenceName(), sequenceRecord.getSequenceName());
-            Assert.assertEquals(record.getAlignmentStart(), 1);
-        }
-    }
-
-    private static class TabuRegionInputStream extends SeekableStream {
-        private SeekableStream delegate;
-        private List<Chunk> tabuChunks;
-
-        public TabuRegionInputStream(List<Chunk> tabuChunks, SeekableStream delegate) {
-            this.tabuChunks = tabuChunks;
-            this.delegate = delegate;
-        }
-
-        private boolean isTabu(long position) {
-
-            for (Chunk chunk : tabuChunks) {
-                if ((chunk.getChunkStart() >> 16) < position && position < (chunk.getChunkEnd() >> 16)) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-        @Override
-        public long length() {
-            return delegate.length();
-        }
-
-        @Override
-        public long position() throws IOException {
-            return delegate.position();
-        }
-
-        @Override
-        public void seek(long position) throws IOException {
-            if (isTabu(position)) {
-                throw new TabuError();
-            }
-            delegate.seek(position);
-        }
-
-        @Override
-        public int read() throws IOException {
-            if (isTabu(position())) throw new TabuError();
-            return delegate.read();
-        }
-
-        @Override
-        public int read(byte[] buffer, int offset, int length) throws IOException {
-            for (long pos = position(); pos < position() + length; pos++)
-                if (isTabu(pos)) {
-                    throw new TabuError();
-                }
-            return delegate.read(buffer, offset, length);
-        }
-
-        @Override
-        public void close() throws IOException {
-            delegate.close();
-        }
-
-        @Override
-        public boolean eof() throws IOException {
-            return delegate.eof();
-        }
-
-        @Override
-        public String getSource() {
-            return delegate.getSource();
-        }
-    }
-
-    private static class TabuError extends RuntimeException {
-
-    }
-
-    /**
-     * This is to check that the indexing actually works and not just skips records. The approach is to forbid reading of the first
-     * container and try accessing reads from the first and the second containers. The first attempt should fail but the second should succeed.
-     *
-     * @throws IOException
-     */
-    @Test
-    public void testUnnecessaryIO() throws IOException {
-        final SeekableStream baiStream = SamIndexes.asBaiSeekableStreamOrNull(new ByteArraySeekableStream(indexBytes), header.getSequenceDictionary());
-
-        BAMIndex index = new CachingBAMFileIndex(baiStream, header.getSequenceDictionary());
-        int refID = 0;
-        long start = index.getSpanOverlapping(refID, 1, Integer.MAX_VALUE).getFirstOffset();
-        long end = index.getSpanOverlapping(refID + 1, 1, Integer.MAX_VALUE).getFirstOffset();
-        TabuRegionInputStream tabuIS = new TabuRegionInputStream(Arrays.asList(new Chunk[]{new Chunk(start, end)}), new ByteArraySeekableStream(cramBytes));
-
-        CRAMFileReader reader = new CRAMFileReader(tabuIS, new ByteArraySeekableStream(indexBytes), source, ValidationStringency.SILENT);
-        try {
-            // the attempt to read 1st container, which will happen when the iterator is initialized, must throw
-            CloseableIterator<SAMRecord> it = reader.queryAlignmentStart(header.getSequence(refID).getSequenceName(), 1);
-            Assert.fail();
-        } catch (TabuError e) {
-
-        }
-
-        // reading after the 1st container should be ok:
-        refID = 2;
-        final CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart(header.getSequence(refID).getSequenceName(), 1);
-        Assert.assertNotNull(iterator);
-        Assert.assertTrue(iterator.hasNext());
-    }
-
-    @BeforeTest
-    public void beforeTest() throws Exception {
-        Log.setGlobalLogLevel(Log.LogLevel.ERROR);
-
-        header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord("1");
-
-        rsf = new InMemoryReferenceSequenceFile();
-        int nofSequencesInDictionary = 3;
-        int sequenceLength = 1024 * 1024;
-        for (int i = 0; i < nofSequencesInDictionary; i++)
-            addRandomSequence(header, sequenceLength, rsf);
-
-        source = new ReferenceSource(rsf);
-
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
-        builder.setHeader(header);
-        builder.setReadGroup(readGroupRecord);
-        header.addReadGroup(readGroupRecord);
-
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        ByteArrayOutputStream indexOS = new ByteArrayOutputStream();
-        CRAMFileWriter writer = new CRAMFileWriter(os, indexOS, source, header, null);
-
-        int readPairsPerSequence = CRAMContainerStreamWriter.DEFAULT_RECORDS_PER_SLICE;
-
-        for (SAMSequenceRecord sequenceRecord : header.getSequenceDictionary().getSequences()) {
-            int alignmentStart = 1;
-            for (int i = 0; i < readPairsPerSequence / 2; i++) {
-                builder.addPair(Integer.toString(i), sequenceRecord.getSequenceIndex(), alignmentStart, alignmentStart + 2);
-                alignmentStart++;
-            }
-        }
-
-        List<SAMRecord> list = new ArrayList<SAMRecord>(readPairsPerSequence);
-        list.addAll(builder.getRecords());
-        Collections.sort(list, new SAMRecordCoordinateComparator());
-
-        for (SAMRecord record : list)
-            writer.addAlignment(record);
-
-        list.clear();
-        writer.close();
-        cramBytes = os.toByteArray();
-        indexBytes = indexOS.toByteArray();
-    }
-
-    private static void addRandomSequence(SAMFileHeader header, int length, InMemoryReferenceSequenceFile rsf) {
-        String name = String.valueOf(header.getSequenceDictionary().size() + 1);
-        header.addSequence(new SAMSequenceRecord(name, length));
-        byte[] refBases = new byte[length];
-        Random random = new Random();
-        byte[] alphabet = "ACGTN".getBytes();
-        for (int i = 0; i < refBases.length; i++)
-            refBases[i] = alphabet[random.nextInt(alphabet.length)];
-
-        rsf.add(name, refBases);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CRAMIndexQueryTest.java b/src/test/java/htsjdk/samtools/CRAMIndexQueryTest.java
deleted file mode 100644
index df94310..0000000
--- a/src/test/java/htsjdk/samtools/CRAMIndexQueryTest.java
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.util.CloseableIterator;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
-import java.util.function.Function;
-
-/**
- * Test index query calls against a *SamReader* on a CRAM File, which will use
- * whatever index format (.bai or .crai converted to .bai) is available for the
- * target file.
- */
-public class CRAMIndexQueryTest {
-
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/cram");
-
-    private static final File cramQueryWithBAI = new File(TEST_DATA_DIR, "cramQueryWithBAI.cram");
-    private static final File cramQueryWithCRAI = new File(TEST_DATA_DIR, "cramQueryWithCRAI.cram");
-    private static File cramQueryWithLocalCRAI = null; // generated  by @BeforeClass from cramQueryWithCRAI
-    private static final File cramQueryReference = new File(TEST_DATA_DIR, "human_g1k_v37.20.21.10M-10M200k.fasta");
-
-    private static final File cramQueryReadsWithBAI = new File(TEST_DATA_DIR, "cramQueryTest.cram");
-    private static File cramQueryReadsWithLocalCRAI = null; // generated  by @BeforeClass from cramQueryReadsWithBAI
-
-    private static final File cramQueryTestEmptyWithBAI = new File(TEST_DATA_DIR, "cramQueryTestEmpty.cram");
-    private static File cramQueryTestEmptyWithLocalCRAI = null; // generated  by @BeforeClass from cramQueryTestEmptyWithBAI
-    private static final File cramQueryReadsReference = new File(TEST_DATA_DIR,"../hg19mini.fasta");
-
-
-    // htsjdk currently generates .bai index files instead of .crai due to https://github.com/samtools/htsjdk/issues/531;
-    // however we still want to test the htsjdk CRAI creation code. In order to run these index query tests against CRAI
-    // files generated by htsjdk, we copy the checked-in test files into new CRAMs  and then manually generate .CRAI files
-    // to run to use as additional test cases
-    @BeforeClass
-    public void createLocallyGeneratedCRAIFiles() throws IOException {
-        cramQueryWithLocalCRAI = File.createTempFile("cramQueryWithLocalCRAI.", ".cram");
-        cramQueryWithLocalCRAI.deleteOnExit();
-        File tempCRAIOut = new File(cramQueryWithLocalCRAI.getAbsolutePath() + ".crai");
-        tempCRAIOut.deleteOnExit();
-        createLocalCRAMAndCRAI(
-                cramQueryWithCRAI,
-                cramQueryReference,
-                cramQueryWithLocalCRAI,
-                tempCRAIOut
-        );
-
-        cramQueryReadsWithLocalCRAI = File.createTempFile("cramQueryReadsWithLocalCRAI.", ".cram");
-        tempCRAIOut = new File(cramQueryReadsWithLocalCRAI.getAbsolutePath() + ".crai");
-        tempCRAIOut.deleteOnExit();
-        cramQueryReadsWithLocalCRAI.deleteOnExit();
-        createLocalCRAMAndCRAI(
-                cramQueryReadsWithBAI,
-                cramQueryReadsReference,
-                cramQueryReadsWithLocalCRAI,
-                tempCRAIOut
-        );
-
-        cramQueryTestEmptyWithLocalCRAI = File.createTempFile("cramQueryTestEmptyWithLocalCRAI.", ".cram");
-        tempCRAIOut = new File(cramQueryTestEmptyWithLocalCRAI.getAbsolutePath() +".crai");
-        tempCRAIOut.deleteOnExit();
-        cramQueryTestEmptyWithLocalCRAI.deleteOnExit();
-        createLocalCRAMAndCRAI(
-                cramQueryTestEmptyWithBAI,
-                cramQueryReference,
-                cramQueryTestEmptyWithLocalCRAI,
-                tempCRAIOut
-        );
-    }
-
-    private void createLocalCRAMAndCRAI(
-            final File inputCRAM,
-            final File reference,
-            final File outputCRAM,
-            final File outputCRAI) throws IOException
-    {
-        Files.copy(inputCRAM.toPath(), outputCRAM.toPath(), StandardCopyOption.REPLACE_EXISTING);
-
-        SAMFileHeader samHeader = null;
-        try (SamReader reader = SamReaderFactory.makeDefault().referenceSequence(reference).open(inputCRAM)) {
-            samHeader = reader.getFileHeader();
-        }
-        try (FileOutputStream bos = new FileOutputStream(outputCRAI)) {
-            CRAMCRAIIndexer craiIndexer = new CRAMCRAIIndexer(bos, samHeader);
-            craiIndexer.writeIndex(new SeekableFileStream(outputCRAM), bos);
-        }
-    }
-
-    @DataProvider(name = "singleIntervalOverlapping")
-    public Object[][] singleIntervalOverlapping() {
-        return new Object[][] {
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 100009, 100009), new String[]{"a", "b", "c"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 100009, 100009), new String[]{"a", "b", "c"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 100009, 100009), new String[]{"a", "b", "c"}},
-
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 100009, 100011), new String[]{"a", "b", "c", "d", "e"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 100009, 100011), new String[]{"a", "b", "c", "d", "e"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 100009, 100011), new String[]{"a", "b", "c", "d", "e"}},
-
-            // interval with 1 start
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 1, 100010), new String[]{"a", "b", "c", "d"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 1, 100010), new String[]{"a", "b", "c", "d"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 1, 100010), new String[]{"a", "b", "c", "d"}},
-
-            // interval with 0 end
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 100015, 0), new String[]{"a", "b", "c", "d", "e", "f"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 100015, 0), new String[]{"a", "b", "c", "d", "e", "f"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 100015, 0), new String[]{"a", "b", "c", "d", "e", "f"}},
-
-            // interval with 1 start and 0 end
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-
-            //totally empty cram file
-            {cramQueryTestEmptyWithBAI, cramQueryReadsReference, new QueryInterval(0, 1, 0), new String[]{}},
-            {cramQueryTestEmptyWithLocalCRAI, cramQueryReadsReference, new QueryInterval(0, 1, 0), new String[]{}},
-        };
-    }
-
-    @Test(dataProvider="singleIntervalOverlapping")
-    public void testQueryOverlappingSingleInterval(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-                reader -> reader.queryOverlapping(new QueryInterval[]{interval}),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalOverlapping")
-    public void testQueryOverlappingSequence(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.queryOverlapping(
-                reader.getFileHeader().getSequence(interval.referenceIndex).getSequenceName(),
-                interval.start,
-                interval.end
-            ),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalOverlapping")
-    public void testQuerySingleIntervalContainedFalse(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.query(new QueryInterval[]{interval}, false),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalOverlapping")
-    public void testQuerySequenceContainedFalse(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.query(
-                reader.getFileHeader().getSequence(interval.referenceIndex).getSequenceName(),
-                interval.start,
-                interval.end,
-                false
-            ),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @DataProvider(name = "singleIntervalContained")
-    public Object[][] singleIntervalContained() {
-        return new Object[][] {
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 100013, 100070), new String[]{"f", "f",}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 100013, 100070), new String[]{"f", "f",}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 100013, 100070), new String[]{"f", "f"}},
-
-            // interval with 1 start
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 1, 100100), new String[]{"e", "f", "f"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 1, 100100), new String[]{"e", "f", "f"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 1, 100100), new String[]{"e", "f", "f"}},
-
-            // interval with 0 end
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 100010, 0), new String[]{"d", "e", "f", "f",}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 100010, 0), new String[]{"d", "e", "f", "f",}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 100010, 0), new String[]{"d", "e", "f", "f",}},
-
-            // interval with 1 start and 0 end
-            {cramQueryWithCRAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-            {cramQueryWithBAI, cramQueryReference, new QueryInterval(0, 1, 0), new String[]{"a", "b", "c", "d", "e", "f",  "f"}},
-
-            //totally empty cram file
-            {cramQueryTestEmptyWithBAI, cramQueryReadsReference, new QueryInterval(0, 1, 0), new String[]{}},
-            {cramQueryTestEmptyWithLocalCRAI, cramQueryReadsReference, new QueryInterval(0, 1, 0), new String[]{}},
-        };
-    }
-
-    @Test(dataProvider="singleIntervalContained")
-    public void testQueryContainedSingleInterval(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.queryContained(new QueryInterval[]{interval}),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalContained")
-    public void testQueryContainedSequence(
-        final File cramFileName,
-        final File referenceFileName,
-        final QueryInterval interval,
-        final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.queryContained(
-                reader.getFileHeader().getSequence(interval.referenceIndex).getSequenceName(),
-                interval.start,
-                interval.end
-            ),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalContained")
-    public void testQuerySingleIntervalContainedTrue(
-            final File cramFileName,
-            final File referenceFileName,
-            final QueryInterval interval,
-            final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.query(new QueryInterval[]{interval}, true),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @Test(dataProvider="singleIntervalContained")
-    public void testQuerySequenceContainedTrue(
-            final File cramFileName,
-            final File referenceFileName,
-            final QueryInterval interval,
-            final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-            reader -> reader.query(
-                reader.getFileHeader().getSequence(interval.referenceIndex).getSequenceName(),
-                interval.start,
-                interval.end,
-                true
-            ),
-            cramFileName,
-            referenceFileName,
-            expectedNames
-        );
-    }
-
-    @DataProvider(name = "multipleIntervalOverlapping")
-    public Object[][] multipleIntervalOverlapping() {
-        return new Object[][]{
-            {cramQueryWithCRAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100010, 100010), new QueryInterval(0, 100011, 100011)},
-                    new String[]{"a", "b", "c", "d", "e"}},
-            {cramQueryWithLocalCRAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100010, 100010), new QueryInterval(0, 100011, 100011)},
-                    new String[]{"a", "b", "c", "d", "e"}},
-            {cramQueryWithBAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100010, 100010), new QueryInterval(0, 100011, 100011)},
-                    new String[]{"a", "b", "c", "d", "e"}},
-            // no matching reads
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 300, 310), new QueryInterval(1, 300, 310)},
-                    new String[]{}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 300, 310), new QueryInterval(1, 300, 310)},
-                    new String[]{}},
-            // matching reads from first interval only
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 206), new QueryInterval(3, 300, 301)},
-                    new String[]{"a", "b"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 206), new QueryInterval(3, 300, 301)},
-                    new String[]{"a", "b"}},
-            // matching reads from last interval only
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(3, 700, 701)},
-                    new String[]{"k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(3, 700, 701)},
-                    new String[]{"k"}},
-            //matching reads from each interval
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 206), new QueryInterval(3, 700, 701)},
-                    new String[]{"a", "b", "k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 206), new QueryInterval(3, 700, 701)},
-                    new String[]{"a", "b", "k"}},
-            //matching reads from each interval - 4 intervals
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{
-                            new QueryInterval(0, 200, 201), new QueryInterval(1, 500, 501),
-                            new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 701)},
-                    new String[]{"a", "f", "i", "k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{
-                            new QueryInterval(0, 200, 201), new QueryInterval(1, 500, 501),
-                            new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 701)},
-                    new String[]{"a", "f", "i", "k"}},
-            // first read is before the first interval
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 701)},
-                    new String[]{"i", "k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 701)},
-                    new String[]{"i", "k"}},
-            // first interval is before the first read
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 201)},
-                    new String[]{"a"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 201)},
-                    new String[]{"a"}},
-            // intervals in reverse order
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 201)},
-                    new String[]{"a"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 201)},
-                    new String[]{"a"}},
-        };
-    }
-
-    @Test(dataProvider="multipleIntervalOverlapping")
-    public void testQueryOverlappingMultipleIntervals(
-            final File cramFileName,
-            final File referenceFileName,
-            final QueryInterval[] intervals,
-            final String[] expectedNames) throws IOException
-    {
-        QueryInterval[] optimizedIntervals = QueryInterval.optimizeIntervals(intervals);
-        Assert.assertTrue(optimizedIntervals.length > 1);
-
-        doQueryTest(
-                reader -> reader.queryOverlapping(optimizedIntervals),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-    }
-
-    @DataProvider(name = "otherMultipleIntervals")
-    public Object[][] otherMultipleIntervals() {
-        return new Object[][]{
-            // accept an empty QueryIntervalArray
-            {cramQueryWithBAI, cramQueryReference,
-                    new QueryInterval[]{},
-                    new String[]{}},
-            // intervals overlapping - optimized to a single interval
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 1000, 1030), new QueryInterval(0, 1020, 1076)},
-                    new String[]{"d"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 1000, 1030), new QueryInterval(0, 1020, 1076)},
-                    new String[]{"d"}}
-        };
-    }
-
-    // these are tested separately because we want the normal multi-interval test to
-    // assert that the interval list size is > 1 post-optimization to ensure we're
-    // using more than one interval; these tests optimize down to 0 or 1 interval
-    @Test(dataProvider="otherMultipleIntervals")
-    public void testOtherMultipleIntervals(
-            final File cramFileName,
-            final File referenceFileName,
-            final QueryInterval[] intervals,
-            final String[] expectedNames) throws IOException
-    {
-        QueryInterval[] optimizedIntervals = QueryInterval.optimizeIntervals(intervals);
-        doQueryTest(
-                reader -> reader.queryContained(optimizedIntervals),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-        doQueryTest(
-                reader -> reader.queryOverlapping(optimizedIntervals),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-    }
-
-    @DataProvider(name = "multipleIntervalContained")
-    public Object[][] multipleIntervalContained() {
-        return new Object[][]{
-            {cramQueryWithCRAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100008, 100008), new QueryInterval(0, 100013, 0)},
-                    new String[]{"f", "f"}},
-            {cramQueryWithLocalCRAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100008, 100008), new QueryInterval(0, 100013, 0)},
-                    new String[]{"f", "f"}},
-            {cramQueryWithBAI, cramQueryReference,
-                    new QueryInterval[]{new QueryInterval(0, 100008, 100008), new QueryInterval(0, 100013, 0)},
-                    new String[]{"f", "f"}},
-            // no matching reads
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 300, 310), new QueryInterval(1, 300, 310)},
-                    new String[]{}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 300, 310), new QueryInterval(1, 300, 310)},
-                    new String[]{}},
-            // matching reads from first interval only
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 305), new QueryInterval(3, 300, 301)},
-                    new String[]{"b", "c"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 205, 305), new QueryInterval(3, 300, 301)},
-                    new String[]{"b", "c"}},
-            // matching reads from last interval only
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(3, 700, 776)},
-                    new String[]{"k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(3, 700, 776)},
-                    new String[]{"k"}},
-            //matching reads from each interval
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 200, 281), new QueryInterval(3, 700, 776)},
-                    new String[]{"a", "b", "k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 200, 281), new QueryInterval(3, 700, 776)},
-                    new String[]{"a", "b", "k"}},
-            //matching reads from each interval - 4 intervals
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{
-                            new QueryInterval(0, 200, 281), new QueryInterval(1, 500, 576),
-                            new QueryInterval(2, 300, 376), new QueryInterval(3, 700, 776)},
-                    new String[]{"a", "b", "f", "i", "k"}},
-                {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{
-                            new QueryInterval(0, 200, 281), new QueryInterval(1, 500, 576),
-                            new QueryInterval(2, 300, 376), new QueryInterval(3, 700, 776)},
-                    new String[]{"a", "b", "f", "i", "k"}},
-            // first read is before the first interval
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 776)},
-                    new String[]{"k"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(2, 300, 301), new QueryInterval(3, 700, 776)},
-                    new String[]{"k"}},
-            // first interval is before the first read
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 276)},
-                    new String[]{"a"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 100, 101), new QueryInterval(0, 200, 276)},
-                    new String[]{"a"}},
-            // intervals in reverse order
-            {cramQueryReadsWithBAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 200, 276), new QueryInterval(0, 100, 101)},
-                    new String[]{"a"}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference,
-                    new QueryInterval[]{new QueryInterval(0, 200, 276), new QueryInterval(0, 100, 101)},
-                    new String[]{"a"}},
-        };
-    }
-
-    @Test(dataProvider="multipleIntervalContained")
-    public void testQueryContainedMultipleIntervals(
-            final File cramFileName,
-            final File referenceFileName,
-            final QueryInterval[] intervals,
-            final String[] expectedNames) throws IOException
-    {
-        QueryInterval[] optimizedIntervals = QueryInterval.optimizeIntervals(intervals);
-        Assert.assertTrue(optimizedIntervals.length > 1);
-        doQueryTest(
-                reader -> reader.queryContained(optimizedIntervals),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-    }
-
-    @DataProvider(name = "unmappedQueries")
-    public Object[][] unmappedQueries() {
-        return new Object[][] {
-            {cramQueryWithCRAI, cramQueryReference, new String[]{"g", "h", "h", "i", "i"}},
-            {cramQueryWithLocalCRAI, cramQueryReference, new String[]{"g", "h", "h", "i", "i"}},
-            {cramQueryWithBAI, cramQueryReference, new String[]{"g", "h", "h", "i", "i"}},
-            //no unmapped reads
-            {cramQueryReadsWithBAI, cramQueryReadsReference, new String[]{}},
-            {cramQueryReadsWithLocalCRAI, cramQueryReadsReference, new String[]{}}
-        };
-    }
-
-    @Test(dataProvider="unmappedQueries")
-    public void testQueryUnmapped(
-            final File cramFileName,
-            final File referenceFileName,
-            final String[] expectedNames) throws IOException
-    {
-        doQueryTest(
-                reader -> reader.queryUnmapped(),
-                cramFileName,
-                referenceFileName,
-                expectedNames
-        );
-    }
-
-    @DataProvider(name = "mateQueries")
-    public Object[][] mateQueries() {
-        return new Object[][] {
-                {cramQueryWithCRAI, cramQueryReference, "f"},
-                {cramQueryWithLocalCRAI, cramQueryReference, "f"},
-                {cramQueryWithBAI, cramQueryReference, "f"}
-        };
-    }
-
-    @Test(dataProvider="mateQueries")
-    public void testQueryMate(
-        final File cramFileName,
-        final File referenceFileName,
-        final String expectedName) throws IOException
-    {
-        SamReaderFactory factory = SamReaderFactory.makeDefault();
-        if (referenceFileName != null) {
-            factory = factory.referenceSequence(referenceFileName);
-        }
-        SAMRecord firstRecord = null;
-        SAMRecord secondRecord = null;
-        try (final SamReader reader = factory.open(cramFileName)) {
-            final CloseableIterator<SAMRecord> it = reader.queryAlignmentStart("20", 100013);
-            Assert.assertTrue(it.hasNext());
-            firstRecord = it.next();
-            Assert.assertTrue(it.hasNext());
-            secondRecord = it.next();
-            Assert.assertFalse(it.hasNext());
-        }
-
-        // get the mate for the first record
-        try (final SamReader reader = factory.open(cramFileName)) {
-            final SAMRecord samRecord = reader.queryMate(firstRecord);
-            Assert.assertEquals(samRecord, secondRecord);
-        }
-
-        // now query the mate's mate to ensure we get symmetric results
-        try (final SamReader reader = factory.open(cramFileName)) {
-            final SAMRecord samRecord = reader.queryMate(secondRecord);
-            Assert.assertEquals(samRecord, firstRecord);
-        }
-    }
-
-    private void doQueryTest(
-        final Function<SamReader, CloseableIterator <SAMRecord>> getIterator,
-        final File cramFileName,
-        final File referenceFileName,
-        final String[] expectedNames) throws IOException
-    {
-        SamReaderFactory factory = SamReaderFactory.makeDefault();
-        if (referenceFileName != null) {
-            factory = factory.referenceSequence(referenceFileName);
-        }
-        try (final SamReader reader = factory.open(cramFileName);
-             final CloseableIterator<SAMRecord> it = getIterator.apply(reader)) {
-            int count = 0;
-            while (it.hasNext()) {
-                SAMRecord samRec = it.next();
-                Assert.assertTrue(count < expectedNames.length);
-                Assert.assertEquals(samRec.getReadName(), expectedNames[count]);
-                count++;
-            }
-            Assert.assertEquals(count, expectedNames.length);
-        }
-    }
-
-
-    @DataProvider(name = "iteratorStateTests")
-    public Object[][] iteratorStateQueries() {
-        return new Object[][] {
-                {cramQueryWithCRAI, cramQueryReference},
-                {cramQueryWithLocalCRAI, cramQueryReference},
-                {cramQueryWithBAI, cramQueryReference}
-        };
-    }
-
-    // The current CRAMFileReader implementation allows multiple iterators to exist on a
-    // CRAM reader at the same time, but they're not properly isolated from each other. When
-    // CRAMFileReader is changed to support the SamReader contract of one-iterator-at-a-time
-    // (https://github.com/samtools/htsjdk/issues/563), these can be re-enabled.
-    //
-    @Test(dataProvider="iteratorStateTests", expectedExceptions=SAMException.class, enabled=false)
-    public void testIteratorState(
-            final File cramFileName,
-            final File referenceFileName,
-            final int expectedCount) throws IOException
-    {
-        SamReaderFactory factory = SamReaderFactory.makeDefault();
-        if (referenceFileName != null) {
-            factory = factory.referenceSequence(referenceFileName);
-        }
-
-        try (final SamReader reader = factory.open(cramFileName)) {
-            final CloseableIterator<SAMRecord> origIt = reader.iterator();
-
-            // opening the second iterator should throw
-            final CloseableIterator<SAMRecord> overlapIt = reader.queryOverlapping("20", 100013, 100070);
-        }
-    }
-
-    @DataProvider(name = "unmappedSliceTest")
-    public Object[][] unmappedMultiSliceTest() {
-        return new Object[][] {
-            // the main test feature of these files is that they have several mapped reads followed by
-            // some number of unmapped reads, each created with seqs_per_slice = 100 to force the unmapped
-            // reads to be distributed over multiple slices (at least for large numbers of unmapped reads)
-            // tests the fix to https://github.com/samtools/htsjdk/issues/562
-            {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram"),
-                    new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta"), 0},
-            {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram"),
-                    new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta"), 1},
-            {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram"),
-                    new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta"), 500},
-        };
-    }
-
-    @Test(dataProvider = "unmappedSliceTest")
-    private void testUnmappedMultiSlice(
-            final File cramFileName,
-            final File referenceFileName,
-            final int expectedCount) throws IOException
-    {
-        SamReaderFactory factory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
-        factory = factory.referenceSequence(referenceFileName);
-
-        int count = 0;
-        try (final SamReader reader = factory.open(cramFileName);
-             final CloseableIterator<SAMRecord> it = reader.queryUnmapped())
-        {
-            while (it.hasNext()) {
-                it.next();
-                count++;
-            }
-        }
-        Assert.assertEquals(count, expectedCount);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/ChunkTest.java b/src/test/java/htsjdk/samtools/ChunkTest.java
deleted file mode 100644
index d2bc157..0000000
--- a/src/test/java/htsjdk/samtools/ChunkTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class ChunkTest {
-    @Test
-    public void testOverlaps() {
-        // Test completely disjoint offsets.
-        Assert.assertFalse(new Chunk(1,5).overlaps(new Chunk(11,15)),"Test found overlap in non-overlapping offsets");
-        Assert.assertFalse(new Chunk(11,15).overlaps(new Chunk(1,5)),"Test found overlap in non-overlapping offsets");
-
-        // Test adjacent offsets
-        Assert.assertFalse(new Chunk(1,5).overlaps(new Chunk(6,10)),"Test found overlap in adjacent offsets");
-        Assert.assertFalse(new Chunk(6,10).overlaps(new Chunk(1,5)),"Test found overlap in adjacent offsets");
-
-        // Test overlapping offsets
-        Assert.assertTrue(new Chunk(1,5).overlaps(new Chunk(2,6)),"Test returned incorrect value for overlapping offsets");
-        Assert.assertTrue(new Chunk(2,6).overlaps(new Chunk(1,5)),"Test returned incorrect value for overlapping offsets");
-        Assert.assertTrue(new Chunk(1,5).overlaps(new Chunk(2,6)),"Test returned incorrect value for overlapping offsets");
-
-        // Completely disjoint and adjacent blocks
-        Assert.assertFalse(new Chunk(1<<16,2<<16).overlaps(new Chunk(3<<16,4<<16)),"Test found overlap in non-overlapping blocks");
-        Assert.assertFalse(new Chunk(1<<16,2<<16).overlaps(new Chunk(2<<16,3<<16)),"test found overlap in adjacent blocks");
-
-        // True overlaps in the same block
-        Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16,2<<16)),"Test failed to find overlap in completely overlapping chunks");
-        Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16,1<<16|0xFF00)),"Test failed to find overlap in chunks with head overlapping");
-        Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFF00,2<<16)),"Test failed to find overlap in overlapping chunks");
-        Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFEFF,1<<16|0xFF00)),"Test failed to find overlap in contained chunk");
-        Assert.assertTrue(new Chunk(1<<16|0xFEFF,1<<16|0xFF00).overlaps(new Chunk(1<<16,2<<16)),"Test failed to find overlap in enclosing chunk");
-        Assert.assertTrue(new Chunk(1<<16,1<<16|0xFF00).overlaps(new Chunk(1<<16|0xFEFF,2<<16)),"Test failed to find tail->head overlap");
-        Assert.assertTrue(new Chunk(1<<16|0xFEFF,2<<16).overlaps(new Chunk(1<<16,1<<16|0xFF00)),"Test failed to find head->tail overlap");
-
-        // Test overlaps spanning blocks
-        Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFF00,2<<16|0xFF00)),"Test failed to find overlap spanning blocks");
-    }
-
-    @Test
-    public void testAdjacency() {
-        // Test offset adjacency
-        Assert.assertTrue(new Chunk(1,5).isAdjacentTo(new Chunk(5,9)),"Offsets which should be adjacent are not");
-        Assert.assertTrue(new Chunk(5,9).isAdjacentTo(new Chunk(1,5)),"Offsets which should be adjacent are not");
-
-        // Test block adjacency
-        Assert.assertTrue(new Chunk(1<<16,2<<16).isAdjacentTo(new Chunk(2<<16,3<<16)),"Blocks which should be adjacent are not");
-
-        // Test offset-block adjacency
-        Assert.assertTrue(new Chunk(1<<16,2<<16|0xFF00).isAdjacentTo(new Chunk(2<<16|0xFF00,3<<16)),"Block-offsets which should be adjacent are not");
-
-        // Discontiguous and overlapping blocks
-        Assert.assertFalse(new Chunk(1,5).isAdjacentTo(new Chunk(11,15)),"Disjoint block should not be adjacent");
-        Assert.assertFalse(new Chunk(1,5).isAdjacentTo(new Chunk(2,3)),"Contained offset should not be adjacent");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CigarCodecTest.java b/src/test/java/htsjdk/samtools/CigarCodecTest.java
deleted file mode 100644
index 8275a94..0000000
--- a/src/test/java/htsjdk/samtools/CigarCodecTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-public class CigarCodecTest {
-
-
-    @Test
-    public void testDefault() {
-        final Cigar emptyCigar = new Cigar();
-        Assert.assertEquals(emptyCigar, BinaryCigarCodec.decode(new int[0]));
-        final int[] binaryCigar = BinaryCigarCodec.encode(emptyCigar);
-        Assert.assertEquals(0, binaryCigar.length);
-        Assert.assertEquals(emptyCigar, TextCigarCodec.decode(SAMRecord.NO_ALIGNMENT_CIGAR));
-        Assert.assertEquals(TextCigarCodec.encode(emptyCigar), SAMRecord.NO_ALIGNMENT_CIGAR);
-    }
-
-    private static class Cigarette {
-        final int length;
-        final char op;
-
-        private Cigarette(final int length, final char op) {
-            this.length = length;
-            this.op = op;
-        }
-
-        int getBinaryOp() {
-            switch (op) {
-                case 'M': return 0;
-                case 'I': return 1;
-                case 'D': return 2;
-                case 'N': return 3;
-                case 'S': return 4;
-                case 'H': return 5;
-                case 'P': return 6;
-                case '=': return 7;
-                case 'X' : return 8;
-                default: Assert.assertTrue(false);
-            }
-            return -1;
-        }
-    }
-
-    private String makeTextCigar(final Cigarette[] cigarettes) {
-        final StringBuilder sb = new StringBuilder();
-        for (final Cigarette c : cigarettes) {
-            sb.append(Integer.toString(c.length));
-            sb.append(c.op);
-        }
-        return sb.toString();
-    }
-
-    private int[] makeBinaryCigar(final Cigarette[] cigarettes) {
-        final int[] ret = new int[cigarettes.length];
-        for (int i = 0; i < cigarettes.length; ++i) {
-            ret[i] = cigarettes[i].length << 4 | cigarettes[i].getBinaryOp();
-        }
-        return ret;
-    }
-
-    @Test
-    public void testSimple() {
-        final Cigarette[] cigarettes = {
-                new Cigarette(100, 'M'),
-                new Cigarette(200, 'I'),
-                new Cigarette(50, 'D'),
-                new Cigarette(21, 'N'),
-                new Cigarette(12, 'S'),
-                new Cigarette(99, 'H'),
-                new Cigarette(20, 'P'),
-                new Cigarette(2, '='),
-                new Cigarette(2, 'X')
-        };
-        final String textCigar = makeTextCigar(cigarettes);
-        final int[] binaryCigar = makeBinaryCigar(cigarettes);
-        final Cigar fromText = TextCigarCodec.decode(textCigar);
-        final Cigar fromBinary = BinaryCigarCodec.decode(binaryCigar);
-        Assert.assertEquals(fromText, fromBinary);
-        final String anotherTextCigar = TextCigarCodec.encode(fromBinary);
-        final int[] anotherBinaryCigar = BinaryCigarCodec.encode(fromText);
-        Assert.assertEquals(anotherTextCigar, textCigar);
-        Assert.assertTrue(Arrays.equals(anotherBinaryCigar, binaryCigar));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/CigarTest.java b/src/test/java/htsjdk/samtools/CigarTest.java
deleted file mode 100644
index acdc224..0000000
--- a/src/test/java/htsjdk/samtools/CigarTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CigarTest {
-
-    @DataProvider(name = "positiveTestsData")
-    public Object[][] testPositive() {
-        return new Object[][]{
-                {""},
-                {"2M1P4M1P2D1P6D"},
-                {"10M5N1I12M"},
-                {"10M1I5N1I12M"},
-                {"9M1D5N1I12M"},
-
-                // I followed by D and vice versa is now allowed.
-                {"1M1I1D1M"},
-                {"1M1D1I1M"},
-
-                // Soft-clip inside of hard-clip now allowed.
-                {"29M1S15H"},
-        };
-    }
-
-    @Test(dataProvider = "positiveTestsData")
-    public void testPositive(final String cigar) {
-        Assert.assertNull(TextCigarCodec.decode(cigar).isValid(null, -1));
-    }
-
-    @DataProvider(name = "negativeTestsData")
-    public Object[][] negativeTestsData() {
-
-        return new Object[][]{
-                // Cannot have two consecutive insertions (of the same type)
-                {"1M1D1D1M", SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR},
-                {"1M1I1I1M", SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR},
-
-                // Soft clip must be at end of read or inside of hard clip
-                {"1M1D1S1M",   SAMValidationError.Type.INVALID_CIGAR},
-                {"1M1D1S1M1H", SAMValidationError.Type.INVALID_CIGAR},
-                {"1M1D1S1S",   SAMValidationError.Type.INVALID_CIGAR},
-                {"1M1D1S1S1H", SAMValidationError.Type.INVALID_CIGAR},
-                {"1H1S1S1M1D", SAMValidationError.Type.INVALID_CIGAR},
-                {"1S1S1M1D",   SAMValidationError.Type.INVALID_CIGAR},
-
-                // Soft clip must be at end of read or inside of hard clip, but there must be something left
-                {"1S1S", SAMValidationError.Type.INVALID_CIGAR},
-                {"1H1S", SAMValidationError.Type.INVALID_CIGAR},
-                {"1S1H", SAMValidationError.Type.INVALID_CIGAR},
-                {"1H1H", SAMValidationError.Type.INVALID_CIGAR},
-        };
-/*
-        // Zero length for an element not allowed. TODO: not sure why this is commented out
-       {"100M0D10M1D10M", SAMValidationError.Type.INVALID_CIGAR}
-*/
-    }
-
-    @Test(dataProvider = "negativeTestsData")
-    public void testNegative(final String cigar, final SAMValidationError.Type type) {
-        final List<SAMValidationError> errors = TextCigarCodec.decode(cigar).isValid(null, -1);
-        Assert.assertEquals(errors.size(), 1, String.format("Got %d error, expected exactly one error.", errors.size()));
-        Assert.assertEquals(errors.get(0).getType(), type);
-    }
-    
-    @Test
-    public void testMakeCigarFromOperators() {
-        final List<CigarOperator> cigarOperators = Arrays.asList(
-                CigarOperator.S,
-                CigarOperator.M,
-                CigarOperator.M,
-                CigarOperator.M,
-                CigarOperator.I,
-                CigarOperator.M,
-                CigarOperator.D,
-                CigarOperator.M
-                );
-        final Cigar cigar = Cigar.fromCigarOperators(cigarOperators);
-        Assert.assertFalse(cigar.isEmpty());
-        Assert.assertEquals(cigar.numCigarElements(), 6);
-        Assert.assertEquals(cigar.toString(),"1S3M1I1M1D1M");
-        Assert.assertFalse(cigar.containsOperator(CigarOperator.N));
-        Assert.assertTrue(cigar.containsOperator(CigarOperator.D));
-        Assert.assertTrue(cigar.isLeftClipped());
-        Assert.assertFalse(cigar.isRightClipped());
-        Assert.assertTrue(cigar.isClipped());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/DownsamplingIteratorTests.java b/src/test/java/htsjdk/samtools/DownsamplingIteratorTests.java
deleted file mode 100644
index e84ee2e..0000000
--- a/src/test/java/htsjdk/samtools/DownsamplingIteratorTests.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.DownsamplingIteratorFactory.Strategy;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Tests for the downsampling iterator class.
- * @author Tim Fennell
- */
-public class DownsamplingIteratorTests {
-    final int NUM_TEMPLATES = 50000;
-    final EnumMap<Strategy, Double> ACCURACY = new EnumMap<Strategy,Double>(Strategy.class){{
-        put(Strategy.HighAccuracy, 0.001);
-        put(Strategy.Chained, 0.005);
-        put(Strategy.ConstantMemory, 0.01);
-    }};
-
-    private static Random getRandom(){
-        //this test is probably too strict in it's tolerances
-        //not every random seed works, 10000 for example is rejected
-        return new Random(10001);
-    }
-
-    @Test
-    public void testBasicFunction() {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        final Random r = getRandom();
-        for (int i=0; i<NUM_TEMPLATES; ++i) {
-            builder.addPair("pair" + r.nextInt(), r.nextInt(24), r.nextInt(1000000), r.nextInt(1000000));
-        }
-        final Collection<SAMRecord> recs = builder.getRecords();
-
-        runTests("testBasicFunction", recs);
-    }
-
-    private void runTests(final String name, final Collection<SAMRecord> recs) {
-        for (final DownsamplingIteratorFactory.Strategy strategy : DownsamplingIteratorFactory.Strategy.values()) {
-            final double accuracy = ACCURACY.get(strategy);
-
-            for (final double p : new double[]{0, 0.01, 0.1, 0.5, 0.9, 1}) {
-                final DownsamplingIterator iterator = DownsamplingIteratorFactory.make(recs.iterator(), strategy, p, accuracy, 42);
-                final List<SAMRecord> out = new ArrayList<SAMRecord>();
-                while (iterator.hasNext()) out.add(iterator.next());
-
-                final String testcase = name + ": strategy=" + strategy.name() + ", p=" + p + ", accuracy=" + accuracy;
-
-                final double readFraction = iterator.getAcceptedFraction();
-                Assert.assertEquals(out.size(), iterator.getAcceptedCount(), "Mismatched sizes with " + testcase);
-                Assert.assertTrue(readFraction > p - accuracy && readFraction < p + accuracy, "Read fraction " + readFraction + " out of bounds in " + testcase);
-            }
-        }
-    }
-
-    @Test
-    public void testMixOfPairsAndFrags() {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        final Random r = getRandom();
-        for (int i=0; i<NUM_TEMPLATES; ++i) {
-            builder.addFrag("frag" + r.nextInt(), r.nextInt(24), r.nextInt(1000000), false);
-            builder.addPair("pair" + r.nextInt(), r.nextInt(24), r.nextInt(1000000), r.nextInt(1000000));
-        }
-
-        final Collection<SAMRecord> recs = builder.getRecords();
-        runTests("testMixOfPairsAndFrags", recs);
-    }
-
-    @Test
-    public void testSecondaryAlignments() {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        final Random r = getRandom();
-        for (int i=0; i<NUM_TEMPLATES; ++i) {
-            final int x = r.nextInt();
-            builder.addPair("pair" + x, r.nextInt(24), r.nextInt(1000000), r.nextInt(1000000));
-            builder.addPair("pair" + x, r.nextInt(24), r.nextInt(24), r.nextInt(1000000), r.nextInt(1000000), false, false, "50M", "50M", false, true, true, true, 20);
-        }
-
-        final Collection<SAMRecord> recs = builder.getRecords();
-        runTests("testSecondaryAlignments", recs);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/DuplicateSetIteratorTest.java b/src/test/java/htsjdk/samtools/DuplicateSetIteratorTest.java
deleted file mode 100644
index 5952953..0000000
--- a/src/test/java/htsjdk/samtools/DuplicateSetIteratorTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class DuplicateSetIteratorTest {
-    protected final static int DEFAULT_BASE_QUALITY = 10;
-
-    private SAMRecordSetBuilder getSAMRecordSetBuilder() {
-        return new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-    }
-
-    @Test
-    public void testSupplementalReads() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false);
-        records.addFrag("READ1", 1, 1, false);
-
-        //secondary alignment
-        records.addFrag("SECN0", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, true);
-        records.addFrag("SECN1", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, true);
-
-        //unmapped
-        records.addFrag("UNMP0", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("UNMP1", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY);
-
-        //supplemental
-        records.addFrag("SUPP0", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, false, true);
-        records.addFrag("SUPP1", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, false, true);
-
-        //supplemental secondary
-        records.addFrag("SUSE0", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, true, true);
-        records.addFrag("SUSE1", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY, true, true);
-
-        //unmapped secondary
-        records.addFrag("UNSE0", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, true);
-        records.addFrag("UNSE1", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, true);
-
-        //unmapped supplemental
-        records.addFrag("UNSU0", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, false, true);
-        records.addFrag("UNSU1", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, false, true);
-
-        //unmapped supplemental secondary
-        records.addFrag("UNSS0", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, true, true);
-        records.addFrag("UNSS1", 1, 1, false, true, "50M", null, DEFAULT_BASE_QUALITY, true, true);
-
-        Map<String, DuplicateSet> allSets = new HashMap<String, DuplicateSet>();
-
-        DuplicateSetIterator duplicateSetIterator = new DuplicateSetIterator(records.iterator(), getSAMRecordSetBuilder().getHeader(), false);
-        while (duplicateSetIterator.hasNext()) {
-            DuplicateSet set = duplicateSetIterator.next();
-            allSets.put(set.getRepresentative().getReadName(), set);
-        }
-
-        //we expect 15 duplicate sets one for the initial two reads and one for each of the additional 14 reads.
-        Assert.assertEquals(allSets.size(), 15, "Wrong number of duplicate sets.");
-        Assert.assertEquals(allSets.get("READ0").size(), 2, "Should be two reads in the READ0 duplicate set, but there are not.");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/GenomicIndexUtilTest.java b/src/test/java/htsjdk/samtools/GenomicIndexUtilTest.java
deleted file mode 100644
index 8f5569c..0000000
--- a/src/test/java/htsjdk/samtools/GenomicIndexUtilTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for GenomicIndexUtil.
- */
-public class GenomicIndexUtilTest {
-
-    @Test(dataProvider = "testRegionToBinDataProvider")
-    public void testRegionToBin(final int beg, final int end, final int bin) {
-        Assert.assertEquals(GenomicIndexUtil.regionToBin(beg, end), bin);
-    }
-
-    @DataProvider(name = "testRegionToBinDataProvider")
-    public Object[][] testRegionToBinDataProvider() {
-        return new Object[][] {
-                {0, 0, 0},
-                {1, 1, 4681},
-                {0, 1<<14, 4681},
-                {0, (1<<14)+1, 585},
-                
-                {1<<14, 1<<14, 585},
-                {(1<<14)+1, (1<<14)+1, 4682},
-                {1<<14, 1<<17, 585},
-                {1<<14, (1<<17)+1, 73},
-
-                {1<<17, 1<<17, 73},
-                {(1<<17)+1, (1<<17)+1, 4689},
-                {1<<17, 1<<20, 73},
-                {1<<17, (1<<20)+1, 9},
-
-                {1<<20, 1<<20, 9},
-                {(1<<20)+1, (1<<20)+1, 4745},
-                {1<<20, 1<<23, 9},
-                {1<<20, (1<<23)+1, 1},
-
-                {1<<23, 1<<23, 1},
-                {(1<<23)+1, (1<<23)+1, 5193},
-                {1<<23, 1<<26, 1},
-                {1<<23, (1<<26)+1, 0},
-
-                {1<<26, 1<<26, 0},
-                {(1<<26)+1, (1<<26)+1, 8777},
-                {1<<26, 1<<26+1, 2}
-        };
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/MergingSamRecordIteratorGroupCollisionTest.java b/src/test/java/htsjdk/samtools/MergingSamRecordIteratorGroupCollisionTest.java
deleted file mode 100644
index 18c10c7..0000000
--- a/src/test/java/htsjdk/samtools/MergingSamRecordIteratorGroupCollisionTest.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Tests for MultiIterator relating to group collision.
- *
- * @author Dave Tefft, Andre Mesarovic
- */
-public class MergingSamRecordIteratorGroupCollisionTest {
-
-    private GroupAdapter padapter = new ProgramGroupAdapter();
-    private GroupAdapter radapter = new ReadGroupAdapter();
-
-    @DataProvider(name = "adapters")
-    public Object[][] adapters() {
-        return new Object[][]{
-                {new ProgramGroupAdapter()},
-                {new ReadGroupAdapter()}
-        };
-    }
-
-
-    /** Test for groups with same ID and same attributes */
-    @Test(dataProvider = "adapters")
-    public void testSameIdsSameAttrs(GroupAdapter adapter) {
-        boolean addReadGroup = addReadGroup(adapter);
-
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
-        adapter.setAttribute(group0, "Hi Mom!");
-        adapter.setBuilderGroup(builder1, group0);
-        builder1.addFrag("read1", 20, 28833, addReadGroup);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group1 = adapter.newGroup("0");
-        adapter.setAttribute(group1, "Hi Mom!");
-        adapter.setBuilderGroup(builder2, group1);
-        builder2.addFrag("read2", 19, 28833, addReadGroup);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-        final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
-        Assert.assertEquals(outputGroups.size(), 1);
-
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(0), group0));
-
-        assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "0");
-        CloserUtil.close(readers);
-    }
-
-    /** Test for groups with same ID but different attributes */
-    // @Test(dataProvider = "adapters")
-    public void testSameIdsDifferentAttrs(GroupAdapter adapter) {
-        boolean addReadGroup = addReadGroup(adapter);
-
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
-        adapter.setAttribute(group0, "Hi Mom!");
-        adapter.setBuilderGroup(builder1, group0);
-        builder1.addFrag("read1", 20, 28833, addReadGroup);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group1 = adapter.newGroup("0");
-        adapter.setAttribute(group1, "Hi Dad!");
-        adapter.setBuilderGroup(builder2, group1);
-        builder2.addFrag("read2", 19, 28833, addReadGroup);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-        final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
-        Assert.assertEquals(outputGroups.size(), 2);
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(0), group0));
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(1), group1));
-
-        assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "0.1");
-        CloserUtil.close(readers);
-    }
-
-
-    /** Test for groups with different ID and same attributes */
-    // @Test(dataProvider = "adapters")
-    public void testDifferentIdsSameAttrs(GroupAdapter adapter) {
-        boolean addReadGroup = addReadGroup(adapter);
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
-        adapter.setAttribute(group0, "Hi Mom!");
-        adapter.setBuilderGroup(builder1, group0);
-        builder1.addFrag("read1", 20, 28833, addReadGroup);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group1 = adapter.newGroup("55");
-        adapter.setAttribute(group1, "Hi Mom!");
-        adapter.setBuilderGroup(builder2, group1);
-        builder2.addFrag("read2", 19, 28833, addReadGroup);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-        final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
-        Assert.assertEquals(outputGroups.size(), 2);
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(0), group0));
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(1), group1));
-
-        assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "55");
-        CloserUtil.close(readers);
-    }
-
-
-    /** Test for groups with different ID and different attributes */
-    @Test(dataProvider = "adapters")
-    public void testDifferentIdsDifferentAttrs(GroupAdapter adapter) {
-        boolean addReadGroup = addReadGroup(adapter);
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
-        adapter.setAttribute(group0, "Hi Mom!");
-        adapter.setBuilderGroup(builder1, group0);
-        builder1.addFrag("read1", 20, 28833, addReadGroup);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, addReadGroup);
-        final AbstractSAMHeaderRecord group1 = adapter.newGroup("55");
-        adapter.setAttribute(group1, "Hi Dad!");
-        adapter.setBuilderGroup(builder2, group1);
-        builder2.addFrag("read2", 19, 28833, addReadGroup);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-        final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
-        Assert.assertEquals(outputGroups.size(), 2);
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(0), group0));
-        Assert.assertTrue(adapter.equivalent(outputGroups.get(1), group1));
-
-        assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "55");
-        CloserUtil.close(readers);
-    }
-
-    @Test(dataProvider = "adapters")
-    public void differentIds(GroupAdapter adapter) throws Exception {
-        final String[] groupIds = {"group1", "group2"};
-        final List<? extends AbstractSAMHeaderRecord> groups = adapter.createGroups(groupIds);
-        Assert.assertEquals(groups.size(), 2);
-        int i = 0;
-        for (final AbstractSAMHeaderRecord g : groups) {
-            Assert.assertEquals(groupIds[i], adapter.getGroupId(g));
-            i++;
-        }
-    }
-
-    @Test(dataProvider = "adapters")
-    public void sameIds(GroupAdapter adapter) throws Exception {
-        final String[] groupIds = {"group1", "group1"};
-
-        final List<? extends AbstractSAMHeaderRecord> groups = adapter.createGroups(groupIds);
-        Assert.assertEquals(groups.size(), 1);
-        AbstractSAMHeaderRecord group = groups.get(0);
-        Assert.assertEquals(adapter.getGroupId(group), "group1");
-    }
-
-    /**
-     * List of program groups from the input files are merged, and renumbered, and SAMRecords
-     * with PG tags get assigned the updated PG ID.
-     * Original ProgramRecord-specific test.
-     */
-    @Test
-    public void testMergingProgramGroups() {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        final SAMProgramRecord program1 = new SAMProgramRecord("0");
-        program1.setCommandLine("Hi, Mom!");
-        builder1.setProgramRecord(program1);
-        builder1.addFrag("read1", 20, 28833, false);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        final SAMProgramRecord program2 = new SAMProgramRecord("0");
-        program2.setCommandLine("Hi, Dad!");
-        program2.setProgramVersion("123");
-        builder2.setProgramRecord(program2);
-        builder2.addFrag("read2", 19, 28833, false);
-        // No PG tag on this record
-        builder2.setProgramRecord(null);
-        builder2.addFrag("read3", 19, 28833, false);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-
-        final List<SAMProgramRecord> outputProgramGroups = headerMerger.getMergedHeader().getProgramRecords();
-        Assert.assertEquals(outputProgramGroups.size(), 2);
-        Assert.assertTrue(outputProgramGroups.get(0).equivalent(program1));
-        Assert.assertTrue(outputProgramGroups.get(1).equivalent(program2));
-
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, false);
-        SAMRecord samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
-        samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0.1");
-        samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), null);
-        Assert.assertFalse(iterator.hasNext());
-        CloserUtil.close(readers);
-    }
-
-    private void assertRecords(SamFileHeaderMerger headerMerger, Collection<SamReader> readers,
-                               GroupAdapter adapter, boolean addReadGroup, String... attrs) {
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, addReadGroup);
-        for (int j = 0; j < attrs.length; j++) {
-            SAMRecord samRecord = iterator.next();
-            Assert.assertEquals(samRecord.getAttribute(adapter.getTagName()), attrs[j]);
-        }
-        Assert.assertFalse(iterator.hasNext());
-    }
-
-    private boolean addReadGroup(GroupAdapter adapter) {
-        return adapter instanceof ProgramGroupAdapter;
-    }
-
-    /**
-     * List of program groups from the input files are merged, and renumbered, and SAMRecords
-     * with PG tags get assigned the updated PG ID.
-     * Original ProgramRecord-specific test.
-     */
-    @Test
-    public void testMergingProgramGroupsWithThreeReaders() {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        final SAMProgramRecord program1 = new SAMProgramRecord("0");
-        program1.setCommandLine("Hi, Mom!");
-        program1.setProgramVersion("123");
-        builder1.setProgramRecord(program1);
-        builder1.addFrag("read1", 20, 28833, false);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        final SAMProgramRecord program2 = new SAMProgramRecord("0");
-        program2.setCommandLine("Hi, Mom!");
-        program2.setProgramVersion("123");
-        builder2.setProgramRecord(program2);
-        builder2.addFrag("read2", 19, 28833, false);
-
-
-        final SAMRecordSetBuilder builder3 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        final SAMProgramRecord program3 = new SAMProgramRecord("0");
-        program3.setCommandLine("Hi, Dad!");
-        builder3.setProgramRecord(program3);
-        builder3.addFrag("read3", 19, 28833, false);
-
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-        readers.add(builder3.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-        headers.add(readers.get(2).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-        final List<SAMProgramRecord> outputProgramGroups = headerMerger.getMergedHeader().getProgramRecords();
-        Assert.assertEquals(outputProgramGroups.size(), 2);
-        Assert.assertTrue(outputProgramGroups.get(0).equivalent(program1));
-        Assert.assertTrue(outputProgramGroups.get(1).equivalent(program3));
-
-
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, false);
-        SAMRecord samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
-        samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
-        samRecord = iterator.next();
-        Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0.1");
-        Assert.assertFalse(iterator.hasNext());
-        CloserUtil.close(readers);
-    }
-
-    /**
-     * List of program groups from the input files are merged, and renumbered, and SAMRecords
-     * with PG tags get assigned the updated PG ID.
-     * Original ProgramRecord-specific test.
-     */
-    @Test
-    public void testMergingMultipleReadGroups() {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, false);
-        builder1.setReadGroup(createSAMReadGroupRecord("a0"));
-        builder1.setReadGroup(createSAMReadGroupRecord("a1"));
-        builder1.setReadGroup(createSAMReadGroupRecord("a2"));
-        builder1.addFrag("read1", 20, 28833, false);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, false);
-        builder2.setReadGroup(createSAMReadGroupRecord("0"));
-        builder2.setReadGroup(createSAMReadGroupRecord("a1"));      //collision 1
-        builder2.setReadGroup(createSAMReadGroupRecord("a2"));      //collision 2
-        builder2.setReadGroup(createSAMReadGroupRecord("a1.1"));    //doesn't collide
-        builder2.setReadGroup(createSAMReadGroupRecord("a2.1"));    //doesn't collide
-        builder2.setReadGroup(createSAMReadGroupRecord("a2.4.9"));  //doesn't collide
-        builder2.setReadGroup(createSAMReadGroupRecord("a2.4"));    //collision
-        builder2.addFrag("read1", 20, 28833, false);
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        readers.add(builder1.getSamReader());
-        readers.add(builder2.getSamReader());
-
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        headers.add(readers.get(0).getFileHeader());
-        headers.add(readers.get(1).getFileHeader());
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-
-        final List<? extends AbstractSAMHeaderRecord> outputGroups = headerMerger.getMergedHeader().getReadGroups();
-        // "0, a0, a1, a1.1, a1.3, a2, a2.1, a2.6
-        //the merged read groups are sorted in order
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(0)).getReadGroupId(), "0"); //0
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(1)).getReadGroupId(), "a0"); //1
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(2)).getReadGroupId(), "a1"); //2
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(3)).getReadGroupId(), "a1.1"); //3
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(4)).getReadGroupId(), "a1.2"); //4
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(5)).getReadGroupId(), "a2");  //5
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(6)).getReadGroupId(), "a2.1");
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(7)).getReadGroupId(), "a2.4");
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(8)).getReadGroupId(), "a2.4.9");
-        Assert.assertEquals(((SAMReadGroupRecord) outputGroups.get(9)).getReadGroupId(), "a2.4.A");
-        Assert.assertEquals(outputGroups.size(), 10);
-        CloserUtil.close(readers);
-    }
-
-    private SAMReadGroupRecord createSAMReadGroupRecord(String id) {
-        SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(id);
-        readGroupRecord.setAttribute(SAMTag.SM.name(), Double.toString(Math.random()));
-        return readGroupRecord;
-    }
-
-    /** Captures commonality between ProgramRecord and ReadGroup for having one set of tests */
-    abstract class GroupAdapter {
-
-        /** Gets the group's group ID */
-        abstract String getGroupId(AbstractSAMHeaderRecord group);
-
-        /** Gets the groups from header */
-        abstract List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header);
-
-        /** Gets the group's 'name' tag */
-        abstract String getTagName();
-
-        /** Creates groups for specified IDs */
-        abstract List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds);
-
-        /** Sets a group-specific attribute - for CL for ProgramRecord CL, for PU for ReadGroup */
-        abstract void setAttribute(AbstractSAMHeaderRecord group, String value);
-
-        /** Creates a new group */
-        abstract AbstractSAMHeaderRecord newGroup(String groupId);
-
-        /** Sets the group for the builder */
-        abstract void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group);
-
-        /** Attributes equivalent */
-        abstract boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2);
-
-        SamReader newFileReader() {
-            final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-            builder.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
-            return builder.getSamReader();
-        }
-    }
-
-    class ProgramGroupAdapter extends GroupAdapter {
-        String getGroupId(AbstractSAMHeaderRecord group) {
-            return ((SAMProgramRecord) group).getProgramGroupId();
-        }
-
-        List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header) {
-            return header.getProgramRecords();
-        }
-
-        String getTagName() {
-            return SAMTag.PG.toString();
-        }
-
-        List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) {
-            final List<SamReader> readers = new ArrayList<SamReader>();
-            for (final String groupId : groupIds) {
-                final SamReader samReader = newFileReader();
-                final List<SAMProgramRecord> records = new ArrayList<SAMProgramRecord>();
-                final SAMProgramRecord record = new SAMProgramRecord(groupId);
-                records.add(record);
-                samReader.getFileHeader().setProgramRecords(records);
-                readers.add(samReader);
-            }
-
-            final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-            for (final SamReader reader : readers) {
-                headers.add(reader.getFileHeader());
-            }
-            CloserUtil.close(readers);
-
-            final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
-            return fileHeaderMerger.getMergedHeader().getProgramRecords();
-        }
-
-        void setAttribute(AbstractSAMHeaderRecord group, String value) {
-            ((SAMProgramRecord) group).setCommandLine(value);
-        }
-
-        AbstractSAMHeaderRecord newGroup(String id) {
-            return new SAMProgramRecord(id);
-        }
-
-        void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group) {
-            builder.setProgramRecord((SAMProgramRecord) group);
-        }
-
-        boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2) {
-            return ((SAMProgramRecord) group1).equivalent((SAMProgramRecord) group2);
-        }
-    }
-
-    class ReadGroupAdapter extends GroupAdapter {
-        String getGroupId(AbstractSAMHeaderRecord group) {
-            return ((SAMReadGroupRecord) group).getReadGroupId();
-        }
-
-        List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header) {
-            return header.getReadGroups();
-        }
-
-        String getTagName() {
-            return SAMTag.RG.toString();
-        }
-
-        List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) {
-            final List<SamReader> readers = new ArrayList<SamReader>();
-
-            for (final String groupId : groupIds) {
-                final SamReader samReader = newFileReader();
-                final List<SAMReadGroupRecord> records = new ArrayList<SAMReadGroupRecord>();
-                final SAMReadGroupRecord record = new SAMReadGroupRecord(groupId);
-                records.add(record);
-                samReader.getFileHeader().setReadGroups(records);
-                readers.add(samReader);
-            }
-            final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-            for (final SamReader reader : readers) {
-                headers.add(reader.getFileHeader());
-            }
-            CloserUtil.close(readers);
-            final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
-            return fileHeaderMerger.getMergedHeader().getReadGroups();
-        }
-
-        void setAttribute(AbstractSAMHeaderRecord group, String value) {
-            ((SAMReadGroupRecord) group).setPlatformUnit(value);
-        }
-
-        AbstractSAMHeaderRecord newGroup(String id) {
-            SAMReadGroupRecord group = new SAMReadGroupRecord(id);
-            group.setAttribute(SAMTag.SM.name(), id);
-            return group;
-        }
-
-        void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group) {
-            builder.setReadGroup((SAMReadGroupRecord) group);
-        }
-
-        boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2) {
-            return ((SAMReadGroupRecord) group1).equivalent((SAMReadGroupRecord) group2);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/MergingSamRecordIteratorTest.java b/src/test/java/htsjdk/samtools/MergingSamRecordIteratorTest.java
deleted file mode 100644
index 885321b..0000000
--- a/src/test/java/htsjdk/samtools/MergingSamRecordIteratorTest.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.SequenceUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Tests for MultiIterator
- *
- * @author Dave Tefft
- */
-public class MergingSamRecordIteratorTest {
-
-    @Test
-    public void testVanillaCoordinateMultiIterator() throws Exception {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder();
-        builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
-        builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
-        final SamReader samReader = builder1.getSamReader();
-        samReader.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder();
-        builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
-        builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
-        builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
-        final SamReader samReader2 = builder2.getSamReader();
-        samReader2.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader);
-        readerList.add(samReader2);
-
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-
-        final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
-        int i = 0;
-
-        // This is the correct order for start bases.  The first two are on chr20, the next three on chr22
-        final int[] startBasesInOrder = {28833, 30000, 28834, 28835, 28835};
-
-        while (iterator.hasNext()) {
-            final SAMRecord rec = iterator.next();
-            System.out.println(rec.getSAMString());
-            Assert.assertEquals(rec.getAlignmentStart(), startBasesInOrder[i]);
-            i++;
-        }
-        samReader.close();
-        samReader2.close();
-    }
-
-    @Test
-    public void testVanillaReadOrderMultiIterator() throws Exception {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        builder1.addFrag("a", 20, 28833, false); // ok
-        builder1.addFrag("e", 19, 28834, false); // ok
-
-        final SamReader samReader = builder1.getSamReader();
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
-        builder2.addFrag("b", 20, 30000, false); // ok
-        builder2.addFrag("c", 22, 28835, false); // ok
-        builder2.addFrag("d", 20, 28835, false); // ok
-
-        final SamReader samReader2 = builder2.getSamReader();
-
-
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader);
-        readerList.add(samReader2);
-
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-
-        final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headerList, false);
-
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
-        int i = 0;
-
-        // This is the correct order for start bases.  The first two are on chr20, the next three on chr22
-        final String[] orderedReadNames = {"a", "b", "c", "d", "e"};
-
-        while (iterator.hasNext()) {
-            final SAMRecord rec = iterator.next();
-            System.out.println(rec.getReadName());
-            Assert.assertEquals(rec.getReadName(), orderedReadNames[i]);
-            i++;
-        }
-        samReader.close();
-        samReader2.close();
-    }
-
-    @Test
-    public void testVanillaUnsortedMultiIterator() throws Exception {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-        builder1.addFrag("b", 20, 28833, false); // ok
-        builder1.addFrag("a", 19, 28834, false); // ok
-
-        final SamReader samReader = builder1.getSamReader();
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-        builder2.addFrag("d", 20, 30000, false); // ok
-        builder2.addFrag("e", 22, 28835, false); // ok
-        builder2.addFrag("c", 20, 28835, false); // ok
-
-        final SamReader samReader2 = builder2.getSamReader();
-
-
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader);
-        readerList.add(samReader2);
-
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-
-        final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headerList, false);
-
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
-        int i = 0;
-
-        // With unsorted option there is no garantee that order of the names to come back from the iterator
-        final String[] readNames = {"b", "a", "d", "e", "c"};
-
-        while (iterator.hasNext()) {
-            final SAMRecord rec = iterator.next();
-            System.out.println(rec.getReadName());
-            i++;
-        }
-        Assert.assertEquals(i, readNames.length);
-        samReader.close();
-        samReader2.close();
-    }
-
-    @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
-    public void testConflictingHeaders() throws Exception {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder();
-        builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
-        builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
-        final SamReader samReader = builder1.getSamReader();
-        samReader.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder();
-        builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
-        builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
-        builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
-        final SamReader samReader2 = builder2.getSamReader();
-        samReader2.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-        //Change one of the header so they are no longer compatible
-        final SAMSequenceRecord sRec = new SAMSequenceRecord("BADSEQ", 0);
-        samReader2.getFileHeader().addSequence(sRec);
-
-
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader);
-        readerList.add(samReader2);
-
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-
-        final SamFileHeaderMerger samFileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
-        new MergingSamRecordIterator(samFileHeaderMerger, readerList, false);
-        Assert.fail("This method should throw exception before getting to this point");
-    }
-
-
-    @Test(expectedExceptions = SAMException.class)
-    public void filesNotSortedCorrectly() throws Exception {
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
-        builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
-        builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
-        final SamReader samReader = builder1.getSamReader();
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-
-        final SamReader samReader2 = builder2.getSamReader();
-
-        builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
-        builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
-        builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader);
-        readerList.add(samReader2);
-
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-
-        final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
-        new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-        Assert.fail("This method should throw exception before getting to this point");
-    }
-
-    @Test
-    public void testHeaderCommentMerge() throws Exception {
-        final String[] comments1 = {"@CO\tHi, Mom!", "@CO\tHi, Dad!"};
-        final String[] comments2 = {"@CO\tHello, World!", "@CO\tGoodbye, Cruel World!"};
-        final Set<String> bothComments = new HashSet<String>();
-        bothComments.addAll(Arrays.asList(comments1));
-        bothComments.addAll(Arrays.asList(comments2));
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
-        SAMFileHeader header = builder1.getHeader();
-        for (final String comment : comments1) {
-            header.addComment(comment);
-        }
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
-        header = builder2.getHeader();
-        for (final String comment : comments2) {
-            header.addComment(comment);
-        }
-        final SamFileHeaderMerger merger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate,
-                Arrays.asList(builder1.getSamReader().getFileHeader(), builder2.getSamReader().getFileHeader()), false);
-        final List<String> mergedComments = merger.getMergedHeader().getComments();
-        Assert.assertEquals(mergedComments.size(), bothComments.size());
-        for (final String comment : mergedComments) {
-            Assert.assertTrue(bothComments.contains(comment));
-        }
-        builder1.getSamReader().close();
-        builder2.getSamReader().close();
-    }
-
-    @Test
-    public void testReferenceIndexMapping() throws Exception {
-        // Create two SamReaders with sequence dictionaries such that a merging iterator with merged
-        // headers will require remapping a record's reference index to the merged dictionary
-        final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder();
-        SAMSequenceRecord fakeSequenceRec = new SAMSequenceRecord("FAKE_CONTIG_A", 0);
-        builder1.getHeader().addSequence(fakeSequenceRec);
-
-        final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder();
-        fakeSequenceRec = new SAMSequenceRecord("FAKE_CONTIG_B", 0);
-        builder2.getHeader().addSequence(fakeSequenceRec);
-
-        // create a record with a reference index that will need to be remapped after merging
-        SAMRecord recRequiresMapping = new SAMRecord(builder2.getHeader());
-        recRequiresMapping.setReadName("fakeread");
-        recRequiresMapping.setReferenceName("FAKE_CONTIG_B");
-        builder2.addRecord(recRequiresMapping);
-        // cache the original reference index
-        int originalRefIndex = recRequiresMapping.getReferenceIndex();
-        Assert.assertTrue(25 == originalRefIndex);
-
-        // get a merging iterator with a merged header
-        final SamReader samReader1 = builder1.getSamReader();
-        final SamReader samReader2 = builder2.getSamReader();
-        final List<SamReader> readerList = new ArrayList<SamReader>();
-        readerList.add(samReader1);
-        readerList.add(samReader2);
-        final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
-        headerList.add(samReader1.getFileHeader());
-        headerList.add(samReader2.getFileHeader());
-        final SamFileHeaderMerger samFileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, true);
-        final MergingSamRecordIterator iterator = new MergingSamRecordIterator(samFileHeaderMerger, readerList, false);
-
-        Assert.assertTrue(iterator.hasNext());
-        final SAMRecord rec = iterator.next();
-        Assert.assertTrue(26  == rec.getReferenceIndex());
-
-        samReader1.close();
-        samReader2.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/ProgramRecordChainingTest.java b/src/test/java/htsjdk/samtools/ProgramRecordChainingTest.java
deleted file mode 100644
index cd470c4..0000000
--- a/src/test/java/htsjdk/samtools/ProgramRecordChainingTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Test for SequenceUtil.chainProgramRecord
- */
-public class ProgramRecordChainingTest {
-
-    @Test
-    public void testChainProgramRecord() {
-        SAMFileHeader header = new SAMFileHeader();
-        SAMProgramRecord first = header.createProgramRecord();
-        SAMUtils.chainSAMProgramRecord(header, first);
-        Assert.assertEquals(header.getProgramRecords().size(), 1);
-        Assert.assertNull(first.getPreviousProgramGroupId());
-
-        SAMProgramRecord second = header.createProgramRecord();
-        SAMUtils.chainSAMProgramRecord(header, second);
-        Assert.assertEquals(header.getProgramRecords().size(), 2);
-        Assert.assertNull(first.getPreviousProgramGroupId());
-        Assert.assertEquals(second.getPreviousProgramGroupId(), first.getProgramGroupId());
-
-        SAMProgramRecord third = new SAMProgramRecord("3");
-        SAMUtils.chainSAMProgramRecord(header, third);
-        header.addProgramRecord(third);
-        Assert.assertEquals(header.getProgramRecords().size(), 3);
-        Assert.assertNull(first.getPreviousProgramGroupId());
-        Assert.assertEquals(second.getPreviousProgramGroupId(), first.getProgramGroupId());
-        Assert.assertEquals(third.getPreviousProgramGroupId(), second.getProgramGroupId());
-
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMBinaryTagAndValueUnitTest.java b/src/test/java/htsjdk/samtools/SAMBinaryTagAndValueUnitTest.java
deleted file mode 100644
index f5f7a5c..0000000
--- a/src/test/java/htsjdk/samtools/SAMBinaryTagAndValueUnitTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class SAMBinaryTagAndValueUnitTest {
-
-    @DataProvider(name="allowedAttributeTypes")
-    public Object[][] allowedTypes() {
-        return  new Object[][] {
-                {new String("a string")},
-                {new Byte((byte) 7)},
-                {new Short((short) 8)},
-                {new Integer(0)},
-                {new Character('C')},
-                {new Float(0.1F)},
-                // unsigned longs
-                {new Long(0)},
-                {new Long(BinaryCodec.MAX_UINT)},
-                // signed longs
-                {new Long(-1L)},
-                {new Long(Integer.MAX_VALUE)},
-                {new Long(Integer.MIN_VALUE)},
-                // array values
-                {new byte[]{0, 1, 2}},
-                {new short[]{3, 4, 5}},
-                {new int[]{6, 7, 8}},
-                {new float[]{0.1F, 0.2F}},
-        };
-    }
-
-    @Test(dataProvider="allowedAttributeTypes")
-    public void test_isAllowedAttribute(final Object value) {
-        Assert.assertTrue(SAMBinaryTagAndValue.isAllowedAttributeValue(value));
-    }
-
-    @Test(dataProvider="allowedAttributeTypes")
-    public void test_isAllowedConstructor(final Object value) {
-        Assert.assertNotNull(new SAMBinaryTagAndValue(SAMTagUtil.getSingleton().makeBinaryTag("UI"), value));
-    }
-
-    @DataProvider(name="notAllowedAttributeTypes")
-    public Object[][] notAllowedTypes() {
-        return  new Object[][] {
-                {new Long(BinaryCodec.MAX_UINT + 1L)},
-                {new Long(Integer.MIN_VALUE - 1L)},
-                {new Double(0.3F)},
-                {new Object()},
-                {new Object[]{}},
-                {new Integer[]{}}
-        };
-    }
-
-    @Test(dataProvider="notAllowedAttributeTypes")
-    public void test_isNotAllowedAttribute(final Object value) {
-        Assert.assertFalse(SAMBinaryTagAndValue.isAllowedAttributeValue(value));
-    }
-
-    @Test(dataProvider="notAllowedAttributeTypes", expectedExceptions=IllegalArgumentException.class)
-    public void test_isNotAllowedConstructor(final Object value) {
-        new SAMBinaryTagAndValue(SAMTagUtil.getSingleton().makeBinaryTag("ZZ"), value);
-    }
-
-    @DataProvider(name="allowedUnsignedArrayTypes")
-    public Object[][] allowedUnsignedArrayTypes() {
-        return  new Object[][] {
-                {new byte[]{0, 1, 2}},
-                {new short[]{3, 4, 5}},
-                {new int[]{6, 7, 8}},
-        };
-    }
-
-    @Test(dataProvider="allowedUnsignedArrayTypes")
-    public void test_isAllowedUnsignedArrayAttribute(final Object value) {
-        final short binaryTag = SAMTagUtil.getSingleton().makeBinaryTag("UI");
-        Assert.assertNotNull(new SAMBinaryTagAndUnsignedArrayValue(binaryTag, value));
-    }
-
-    @DataProvider(name="notAllowedUnsignedArrayTypes")
-    public Object[][] notAllowedUnsignedArrayTypes() {
-        return  new Object[][] {
-                {new float[]{0.1F, 0.2F}},
-                {new Object[]{}}
-        };
-    }
-
-    @Test(dataProvider="notAllowedUnsignedArrayTypes", expectedExceptions=IllegalArgumentException.class)
-    public void test_isNotAllowedUnsignedArrayAttribute(final Object value) {
-        final short binaryTag = SAMTagUtil.getSingleton().makeBinaryTag("UI");
-        new SAMBinaryTagAndUnsignedArrayValue(binaryTag, value);
-    }
-
-    @DataProvider(name="hashCopyEquals")
-    public Object[][] hashCopyEquals() {
-        final short tag = SAMTagUtil.getSingleton().makeBinaryTag("UI");
-        return new Object[][] {
-                {new SAMBinaryTagAndValue(tag, new String("a string")), new SAMBinaryTagAndValue(tag, new String("a string")), true, true},
-                {new SAMBinaryTagAndValue(tag, new String("a string")), new SAMBinaryTagAndValue(tag, new String("different string")), false, false},
-
-                {new SAMBinaryTagAndValue(tag, new Byte((byte) 0)), new SAMBinaryTagAndValue(tag, new Byte((byte) 0)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Byte((byte) 0)), new SAMBinaryTagAndValue(tag, new Byte((byte) 1)), false, false},
-
-                {new SAMBinaryTagAndValue(tag, new Short((short) 0)), new SAMBinaryTagAndValue(tag, new Short((short) 0)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Short((short) 0)), new SAMBinaryTagAndValue(tag, new Short((short) 1)), false, false},
-
-                {new SAMBinaryTagAndValue(tag, new Integer(0)), new SAMBinaryTagAndValue(tag, new Integer(0)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Integer(0)), new SAMBinaryTagAndValue(tag, new Integer(0)), true, true},
-
-                {new SAMBinaryTagAndValue(tag, new Character('C')), new SAMBinaryTagAndValue(tag, new Character('C')), true, true},
-                {new SAMBinaryTagAndValue(tag, new Character('C')), new SAMBinaryTagAndValue(tag, new Character('D')), false, false},
-
-                {new SAMBinaryTagAndValue(tag,new Float(0.1F)), new SAMBinaryTagAndValue(tag, new Float(0.1F)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Float(0.1F)), new SAMBinaryTagAndValue(tag, new Float(0.2F)), false, false},
-
-                {new SAMBinaryTagAndValue(tag,new Long(37L)), new SAMBinaryTagAndValue(tag, new Long(37L)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Long(37L)), new SAMBinaryTagAndValue(tag, new Long(38L)), false, false},
-
-                {new SAMBinaryTagAndValue(tag,new Long(BinaryCodec.MAX_UINT)), new SAMBinaryTagAndValue(tag, new Long(BinaryCodec.MAX_UINT)), true, true},
-                {new SAMBinaryTagAndValue(tag, new Long(BinaryCodec.MAX_UINT)), new SAMBinaryTagAndValue(tag, new Long(BinaryCodec.MAX_UINT-1)), false, false},
-
-                // arrays
-
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new byte[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new byte[]{0, 1, 2}), true, true},
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new byte[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new byte[]{3, 4, 5}), false, false},
-
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{0, 1, 2}), true, true},
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{3, 4, 5}), false, false},
-
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new int[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new int[]{0, 1, 2}), true, true},
-                {new SAMBinaryTagAndUnsignedArrayValue(tag, new int[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new int[]{3, 4, 5}), false, false},
-
-                // mix signed array and unsigned array; hashCodes are equal but objects are not
-                {new SAMBinaryTagAndValue(tag, new short[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{0, 1, 2}), true, false},
-
-                // mix signed array and unsigned array; hashCodes and objects are not equal
-                {new SAMBinaryTagAndValue(tag, new short[]{0, 1, 2}), new SAMBinaryTagAndUnsignedArrayValue(tag, new short[]{1, 1, 3}), false, false},
-        };
-    }
-
-    @Test(dataProvider="hashCopyEquals")
-    public void testHashAndEquals(
-            final SAMBinaryTagAndValue v1,
-            final SAMBinaryTagAndValue v2,
-            final boolean hashEquals,
-            final boolean isEquals)
-    {
-        Assert.assertEquals(hashEquals, v1.hashCode() == v2.hashCode());
-
-        Assert.assertEquals(isEquals, v1.equals(v2));
-        Assert.assertEquals(isEquals, v2.equals(v1));
-    }
-
-    @Test(dataProvider="hashCopyEquals")
-    public void testCopy(
-            final SAMBinaryTagAndValue v1,
-            final SAMBinaryTagAndValue v2,
-            final boolean unused_hashEquals,
-            final boolean isEquals)
-    {
-        Assert.assertTrue(v1.equals(v1.copy()));
-        Assert.assertTrue(v2.equals(v2.copy()));
-
-        Assert.assertEquals(isEquals, v1.equals(v2.copy()));
-        Assert.assertEquals(isEquals, v2.equals(v1.copy()));
-    }
-
-    @Test(dataProvider="hashCopyEquals")
-    public void testDeepCopy(
-            final SAMBinaryTagAndValue v1,
-            final SAMBinaryTagAndValue v2,
-            final boolean unused_hashEquals,
-            final boolean isEquals)
-    {
-        Assert.assertTrue(v1.equals(v1.deepCopy()));
-        Assert.assertTrue(v2.equals(v2.deepCopy()));
-
-        Assert.assertEquals(isEquals, v1.equals(v2.deepCopy()));
-        Assert.assertEquals(isEquals, v2.equals(v1.deepCopy()));
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SAMCloneTest.java b/src/test/java/htsjdk/samtools/SAMCloneTest.java
deleted file mode 100644
index 8fdfb3b..0000000
--- a/src/test/java/htsjdk/samtools/SAMCloneTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SAMCloneTest {
-    private SAMRecordSetBuilder getSAMReader(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
-        final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
-        ret.addPair("readB", 20, 200, 300);
-        ret.addPair("readA", 20, 100, 150);
-        ret.addFrag("readC", 20, 140, true);
-        ret.addFrag("readD", 20, 140, false);
-        return ret;
-    }
-
-    @Test
-    public void testBasic() throws Exception {
-        final SAMRecordSetBuilder recordSetBuilder = getSAMReader(true, SAMFileHeader.SortOrder.coordinate);
-        SamReader inputSAM = recordSetBuilder.getSamReader();
-        for (final SAMRecord samRecord : inputSAM) {
-            SAMRecord newRecord = (SAMRecord) samRecord.clone();
-            Assert.assertEquals(newRecord, samRecord);
-        }
-        inputSAM.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMFileWriterFactoryTest.java b/src/test/java/htsjdk/samtools/SAMFileWriterFactoryTest.java
deleted file mode 100644
index dc7a6f3..0000000
--- a/src/test/java/htsjdk/samtools/SAMFileWriterFactoryTest.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.util.IOUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.*;
-
-public class SAMFileWriterFactoryTest {
-
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    /** PIC-442Confirm that writing to a special file does not cause exception when writing additional files. */
-    @Test(groups={"unix"})
-    public void specialFileWriterTest() {
-        createSmallBam(new File("/dev/null"));
-    }
-
-    @Test()
-    public void ordinaryFileWriterTest() throws Exception {
-        final File outputFile = File.createTempFile("tmp.", BamFileIoUtils.BAM_FILE_EXTENSION);
-        outputFile.delete();
-        outputFile.deleteOnExit();
-        createSmallBam(outputFile);
-        final File indexFile = SamFiles.findIndex(outputFile);
-        indexFile.deleteOnExit();
-        final File md5File = new File(outputFile.getParent(), outputFile.getName() + ".md5");
-        md5File.deleteOnExit();
-        Assert.assertTrue(outputFile.length() > 0);
-        Assert.assertTrue(indexFile.length() > 0);
-        Assert.assertTrue(md5File.length() > 0);
-    }
-
-    @Test(description="create a BAM in memory,  should start with GZipInputStream.GZIP_MAGIC")
-    public void inMemoryBam()  throws Exception  {
-    	ByteArrayOutputStream os=new ByteArrayOutputStream();
-    	createSmallBamToOutputStream(os,true);
-    	os.flush();
-    	os.close();
-    	byte blob[]=os.toByteArray();
-        Assert.assertTrue(blob.length > 2);
-        int head = ((int) blob[0] & 0xff) | ((blob[1] << 8 ) & 0xff00 );
-        Assert.assertTrue(java.util.zip.GZIPInputStream.GZIP_MAGIC == head);
-    }
-
-    @Test(description="create a SAM in memory,  should start with '@HD'")
-    public void inMemorySam()  throws Exception  {
-    	ByteArrayOutputStream os=new ByteArrayOutputStream();
-    	createSmallBamToOutputStream(os,false);
-    	os.flush();
-    	os.close();
-    	String sam=new String(os.toByteArray());
-        Assert.assertFalse(sam.isEmpty());
-        Assert.assertTrue(sam.startsWith("@HD\t"),"SAM: bad prefix");
-    }
-
-    @Test(description="Read and then write SAM to verify header attribute ordering does not change depending on JVM version")
-    public void samRoundTrip()  throws Exception  {
-        final File input = new File(TEST_DATA_DIR, "roundtrip.sam");
-
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        final File outputFile = File.createTempFile("roundtrip-out", ".sam");
-        outputFile.delete();
-        outputFile.deleteOnExit();
-        FileOutputStream os = new FileOutputStream(outputFile);
-        final SAMFileWriterFactory factory = new SAMFileWriterFactory();
-        final SAMFileWriter writer = factory.makeSAMWriter(reader.getFileHeader(), false, os);
-        for (SAMRecord rec : reader) {
-            writer.addAlignment(rec);
-        }
-        writer.close();
-        os.close();
-
-        InputStream is = new FileInputStream(input);
-        String originalsam = IOUtil.readFully(is);
-        is.close();
-
-        is = new FileInputStream(outputFile);
-        String writtensam = IOUtil.readFully(is);
-        is.close();
-
-        Assert.assertEquals(writtensam, originalsam);
-    }
-
-    @Test(description="Write SAM records with null SAMFileHeader")
-    public void samNullHeaderRoundTrip()  throws Exception  {
-        final File input = new File(TEST_DATA_DIR, "roundtrip.sam");
-
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        final File outputFile = File.createTempFile("nullheader-out", ".sam");
-        outputFile.delete();
-        outputFile.deleteOnExit();
-        FileOutputStream os = new FileOutputStream(outputFile);
-        final SAMFileWriterFactory factory = new SAMFileWriterFactory();
-        final SAMFileWriter writer = factory.makeSAMWriter(reader.getFileHeader(), false, os);
-        for (SAMRecord rec : reader) {
-            rec.setHeader(null);
-            writer.addAlignment(rec);
-        }
-        writer.close();
-        os.close();
-
-        InputStream is = new FileInputStream(input);
-        String originalsam = IOUtil.readFully(is);
-        is.close();
-
-        is = new FileInputStream(outputFile);
-        String writtensam = IOUtil.readFully(is);
-        is.close();
-
-        Assert.assertEquals(writtensam, originalsam);
-    }
-
-    private void createSmallBam(final File outputFile) {
-        final SAMFileWriterFactory factory = new SAMFileWriterFactory();
-        factory.setCreateIndex(true);
-        factory.setCreateMd5File(true);
-        final SAMFileHeader header = new SAMFileHeader();
-        // index only created if coordinate sorted
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        header.addSequence(new SAMSequenceRecord("chr1", 123));
-        final SAMFileWriter writer = factory.makeBAMWriter(header, false, outputFile);
-        fillSmallBam(writer);
-        writer.close();
-    }
-
-
-   private void createSmallBamToOutputStream(final OutputStream outputStream,boolean binary) {
-        final SAMFileWriterFactory factory = new SAMFileWriterFactory();
-        factory.setCreateIndex(false);
-        factory.setCreateMd5File(false);
-        final SAMFileHeader header = new SAMFileHeader();
-        // index only created if coordinate sorted
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        header.addSequence(new SAMSequenceRecord("chr1", 123));
-        final SAMFileWriter writer = (binary?
-        			factory.makeBAMWriter(header, false, outputStream):
-        			factory.makeSAMWriter(header, false, outputStream)
-        			);
-        fillSmallBam(writer);
-        writer.close();
-    }
-   
-   private int fillSmallBam(SAMFileWriter writer) {
-       final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-       builder.addUnmappedFragment("HiMom!");
-       int numRecs = builder.getRecords().size();
-       for (final SAMRecord rec: builder.getRecords()) {
-           writer.addAlignment(rec);
-       }
-       return numRecs;
-    }
-
-    private File prepareOutputFile(String extension) throws IOException {
-        final File outputFile = File.createTempFile("tmp.", extension);
-        outputFile.delete();
-        outputFile.deleteOnExit();
-        return outputFile;
-    }
-
-    //  Create a writer factory that creates and index and md5 file and set the header to coord sorted
-    private SAMFileWriterFactory createWriterFactoryWithOptions(SAMFileHeader header) {
-        final SAMFileWriterFactory factory = new SAMFileWriterFactory();
-        factory.setCreateIndex(true);
-        factory.setCreateMd5File(true);
-        // index only created if coordinate sorted
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        header.addSequence(new SAMSequenceRecord("chr1", 123));
-        header.addReadGroup(new SAMReadGroupRecord("1"));
-        return factory;
-    }
-
-    private void verifyWriterOutput(File outputFile, ReferenceSource refSource, int nRecs, boolean verifySupplementalFiles) {
-        if (verifySupplementalFiles) {
-            final File indexFile = SamFiles.findIndex(outputFile);
-            indexFile.deleteOnExit();
-            final File md5File = new File(outputFile.getParent(), outputFile.getName() + ".md5");
-            md5File.deleteOnExit();
-            Assert.assertTrue(indexFile.length() > 0);
-            Assert.assertTrue(md5File.length() > 0);
-        }
-
-        SamReaderFactory factory =  SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT);
-        if (refSource != null) {
-            factory.referenceSource(refSource);
-        }
-        SamReader reader = factory.open(outputFile);
-        SAMRecordIterator it = reader.iterator();
-        int count = 0;
-        for (; it.hasNext(); it.next()) {
-            count++;
-        }
-
-        Assert.assertTrue(count == nRecs);
-    }
-
-    @DataProvider(name="bamOrCramWriter")
-    public Object[][] bamOrCramWriter() {
-        return new Object[][] {
-                { BamFileIoUtils.BAM_FILE_EXTENSION, },
-                { CramIO.CRAM_FILE_EXTENSION }
-        };
-    }
-
-    @Test(dataProvider="bamOrCramWriter")
-    public void testMakeWriter(String extension) throws Exception {
-        final File outputFile = prepareOutputFile(extension);
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMFileWriterFactory factory = createWriterFactoryWithOptions(header);
-        final File referenceFile = new File(TEST_DATA_DIR, "hg19mini.fasta");
-
-        final SAMFileWriter samWriter = factory.makeWriter(header, false, outputFile, referenceFile);
-        int nRecs = fillSmallBam(samWriter);
-        samWriter.close();
-
-        verifyWriterOutput(outputFile, new ReferenceSource(referenceFile), nRecs, true);
-    }
-
-    @Test
-    public void testMakeCRAMWriterWithOptions() throws Exception {
-        final File outputFile = prepareOutputFile(CramIO.CRAM_FILE_EXTENSION);
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMFileWriterFactory factory = createWriterFactoryWithOptions(header);
-        final File referenceFile = new File(TEST_DATA_DIR, "hg19mini.fasta");
-
-        final SAMFileWriter samWriter = factory.makeCRAMWriter(header, false, outputFile, referenceFile);
-        int nRecs = fillSmallBam(samWriter);
-        samWriter.close();
-
-        verifyWriterOutput(outputFile, new ReferenceSource(referenceFile), nRecs, true);
-    }
-
-    @Test
-    public void testMakeCRAMWriterIgnoresOptions() throws Exception {
-        final File outputFile = prepareOutputFile(CramIO.CRAM_FILE_EXTENSION);
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMFileWriterFactory factory = createWriterFactoryWithOptions(header);
-        final File referenceFile = new File(TEST_DATA_DIR, "hg19mini.fasta");
-
-        // Note: does not honor factory settings for CREATE_MD5 or CREATE_INDEX.
-        final SAMFileWriter samWriter = factory.makeCRAMWriter(header, new FileOutputStream(outputFile), referenceFile);
-        int nRecs = fillSmallBam(samWriter);
-        samWriter.close();
-
-        verifyWriterOutput(outputFile, new ReferenceSource(referenceFile), nRecs, false);
-    }
-
-    @Test
-    public void testMakeCRAMWriterPresortedDefault() throws Exception {
-        final File outputFile = prepareOutputFile(CramIO.CRAM_FILE_EXTENSION);
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMFileWriterFactory factory = createWriterFactoryWithOptions(header);
-        final File referenceFile = new File(TEST_DATA_DIR, "hg19mini.fasta");
-
-        // Defaults to preSorted==true
-        final SAMFileWriter samWriter = factory.makeCRAMWriter(header, outputFile, referenceFile);
-        int nRecs = fillSmallBam(samWriter);
-        samWriter.close();
-
-        verifyWriterOutput(outputFile, new ReferenceSource(referenceFile), nRecs, true);
-    }
-
-    @Test
-    public void testAsync() throws IOException {
-        final SAMFileWriterFactory builder = new SAMFileWriterFactory();
-
-        final File outputFile = prepareOutputFile(BamFileIoUtils.BAM_FILE_EXTENSION);
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMFileWriterFactory factory = createWriterFactoryWithOptions(header);
-        final File referenceFile = new File(TEST_DATA_DIR, "hg19mini.fasta");
-
-        SAMFileWriter writer = builder.makeWriter(header, false, outputFile, referenceFile);
-        Assert.assertEquals(writer instanceof AsyncSAMFileWriter, Defaults.USE_ASYNC_IO_WRITE_FOR_SAMTOOLS, "testAsync default");
-
-        writer = builder.setUseAsyncIo(true).makeWriter(header, false, outputFile, referenceFile);
-        Assert.assertTrue(writer instanceof AsyncSAMFileWriter, "testAsync option=set");
-
-        writer = builder.setUseAsyncIo(false).makeWriter(header, false, outputFile, referenceFile);
-        Assert.assertFalse(writer instanceof AsyncSAMFileWriter, "testAsync option=unset");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMFlagTest.java b/src/test/java/htsjdk/samtools/SAMFlagTest.java
deleted file mode 100644
index 7b5a553..0000000
--- a/src/test/java/htsjdk/samtools/SAMFlagTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The MIT License
- *
- * Author: Pierre Lindenbaum PhD @yokofakun
- *  Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class SAMFlagTest {
-    @Test
-    public void testFlags() {
-        Assert.assertTrue(SAMFlag.getFlags(83).contains(SAMFlag.READ_PAIRED));
-        Assert.assertTrue(SAMFlag.getFlags(83).contains(SAMFlag.PROPER_PAIR));
-        Assert.assertTrue(SAMFlag.getFlags(83).contains(SAMFlag.READ_REVERSE_STRAND));
-        Assert.assertTrue(SAMFlag.getFlags(83).contains(SAMFlag.FIRST_OF_PAIR));
-        Assert.assertFalse(SAMFlag.getFlags(83).contains(SAMFlag.READ_UNMAPPED));
-        Assert.assertFalse(SAMFlag.getFlags(83).contains(SAMFlag.MATE_UNMAPPED));
-        Assert.assertTrue(SAMFlag.getFlags(0).isEmpty());
-        Assert.assertEquals(SAMFlag.getFlags(4095).size(),12);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMIntegerTagTest.java b/src/test/java/htsjdk/samtools/SAMIntegerTagTest.java
deleted file mode 100644
index 133062a..0000000
--- a/src/test/java/htsjdk/samtools/SAMIntegerTagTest.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Confirm that integer tag types are stored and retrieved properly.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMIntegerTagTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/SAMIntegerTagTest");
-
-    private static final String BYTE_TAG = "BY";
-    private static final String SHORT_TAG = "SH";
-    private static final String INTEGER_TAG = "IN";
-    private static final String UNSIGNED_INTEGER_TAG = "UI";
-    private static final String STRING_TAG = "ST";
-
-    private static final long TOO_LARGE_UNSIGNED_INT_VALUE = BinaryCodec.MAX_UINT + 1L;
-
-    enum FORMAT {SAM, BAM, CRAM}
-
-    @Test
-    public void testBAM() throws Exception {
-        final SAMRecord rec = writeAndReadSamRecord("bam");
-        Assert.assertTrue(rec.getAttribute(BYTE_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(BYTE_TAG)).intValue(), 1);
-        Assert.assertTrue(rec.getAttribute(SHORT_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(SHORT_TAG)).intValue(), 1);
-        Assert.assertTrue(rec.getAttribute(INTEGER_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(INTEGER_TAG)).intValue(), 1);
-    }
-
-    @Test
-    public void testSAM() throws Exception {
-        final SAMRecord rec = writeAndReadSamRecord("sam");
-        Assert.assertTrue(rec.getAttribute(BYTE_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(BYTE_TAG)).intValue(), 1);
-        Assert.assertTrue(rec.getAttribute(SHORT_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(SHORT_TAG)).intValue(), 1);
-        Assert.assertTrue(rec.getAttribute(INTEGER_TAG) instanceof Integer);
-        Assert.assertEquals(((Number) rec.getAttribute(INTEGER_TAG)).intValue(), 1);
-    }
-
-    @Test
-    public void testUnsignedIntegerSAM() throws Exception {
-        final SAMRecord rec = createSamRecord();
-        final long val = 1l + Integer.MAX_VALUE;
-        rec.setAttribute(UNSIGNED_INTEGER_TAG, val);
-        final Object roundTripValue = rec.getAttribute(UNSIGNED_INTEGER_TAG);
-        Assert.assertTrue(roundTripValue instanceof Long);
-        Assert.assertEquals(((Long)roundTripValue).longValue(), val);
-    }
-
-    @Test
-    public void testGetTypedAttributeMethods() throws Exception {
-        final SAMRecord rec = writeAndReadSamRecord("bam");
-        Assert.assertEquals(rec.getByteAttribute(INTEGER_TAG).intValue(), 1);
-        Assert.assertEquals(rec.getShortAttribute(INTEGER_TAG).intValue(), 1);
-        Assert.assertEquals(rec.getIntegerAttribute(INTEGER_TAG).intValue(), 1);
-    }
-
-
-    @DataProvider
-    public Object[][] formatsAndValues(){
-        return new Object[][]{
-                new Object[]{"sam","Hello World!"},
-                new Object[]{"bam","Hello World!"},
-                new Object[]{"cram","Hello World!"},
-                new Object[]{"cram",""},
-                new Object[]{"bam",""},
-                new Object[]{"sam",""},
-        };
-    }
-    /**
-     * Should be able to write empty and non-empty strings
-     */
-    @Test(dataProvider = "formatsAndValues")
-    public void testWriteAndReadStrings(final String format,final String value) throws Exception {
-        final SAMRecord rec = createSamRecord();
-        rec.setAttribute(STRING_TAG, value);
-        writeAndReadSamRecord(format, rec);
-        Assert.assertEquals(rec.getStringAttribute(STRING_TAG),value);
-    }
-
-
-    @DataProvider
-    public Object[][] formatsAndValues2(){
-        return new Object[][]{
-                new Object[]{"sam",'a'},
-                new Object[]{"bam",'a'},
-                new Object[]{"cram",'a'},
-                new Object[]{"cram",null},
-                new Object[]{"bam",null},
-                new Object[]{"sam",null},
-        };
-    }
-    /**
-     * Should be able to write empty and non-empty strings
-     */
-    @Test(dataProvider = "formatsAndValues2")
-    public void testWriteAndReadCharacters(final String format,final Character value) throws Exception {
-        final SAMRecord rec = createSamRecord();
-        rec.setAttribute(STRING_TAG, value);
-        writeAndReadSamRecord(format, rec);
-        Assert.assertEquals(rec.getCharacterAttribute(STRING_TAG),value);
-    }
-
-    /**
-     * Should be an exception if a typed attribute call is made for the wrong type.
-     */
-    @Test(expectedExceptions = RuntimeException.class)
-    public void testGetTypedAttributeForWrongType() throws Exception {
-        final SAMRecord rec = createSamRecord();
-        rec.setAttribute(STRING_TAG, "Hello, World!");
-        writeAndReadSamRecord("bam", rec);
-        rec.getIntegerAttribute(STRING_TAG);
-        Assert.fail("Exception should have been thrown.");
-    }
-
-    /**
-     * Should be an exception if a typed attribute call is made for a value that cannot
-     * be coerced into the correct type.
-     * This test is a little lame because a RuntimeException could be thrown for some other reason.
-     */
-    @Test(expectedExceptions = RuntimeException.class)
-    public void testGetTypedAttributeOverflow() throws Exception {
-        final SAMRecord rec = createSamRecord();
-        rec.setAttribute(INTEGER_TAG, Integer.MAX_VALUE);
-        writeAndReadSamRecord("bam", rec);
-        rec.getShortAttribute(INTEGER_TAG);
-        Assert.fail("Exception should have been thrown.");
-    }
-
-    /**
-     * Should be an exception if a typed attribute call is made for a value that cannot
-     * be coerced into the correct type.
-     * This test is a little lame because a RuntimeException could be thrown for some other reason.
-     */
-    @Test(expectedExceptions = RuntimeException.class)
-    public void testGetTypedAttributeUnerflow() throws Exception {
-        final SAMRecord rec = createSamRecord();
-        rec.setAttribute(INTEGER_TAG, Integer.MIN_VALUE);
-        writeAndReadSamRecord("bam", rec);
-        rec.getShortAttribute(INTEGER_TAG);
-        Assert.fail("Exception should have been thrown.");
-    }
-
-    /**
-     * Create a SAMRecord with integer tags of various sizes, write to a file, and read it back.
-     *
-     * @param format "sam" or "bam".
-     * @return The record after having being read from file.
-     */
-    private SAMRecord writeAndReadSamRecord(final String format) throws IOException {
-        SAMRecord rec = createSamRecord();
-        rec.setAttribute(BYTE_TAG, (byte) 1);
-        rec.setAttribute(SHORT_TAG, (short) 1);
-        rec.setAttribute(INTEGER_TAG, 1);
-        rec = writeAndReadSamRecord(format, rec);
-        return rec;
-    }
-
-    /**
-     * Write a SAMRecord to a SAM file in the given format, and read it back.
-     *
-     * @param format "sam" or "bam".
-     * @param rec    The record to write.
-     * @return The same record, after having being written and read back.
-     */
-    private SAMRecord writeAndReadSamRecord(final String format, SAMRecord rec) throws IOException {
-        final File bamFile = File.createTempFile("htsjdk-writeAndReadSamRecord.", "." + format);
-        final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(rec.getHeader(), false, bamFile);
-        bamWriter.addAlignment(rec);
-        bamWriter.close();
-        final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
-        rec = reader.iterator().next();
-        reader.close();
-        bamFile.delete();
-        return rec;
-    }
-
-    private SAMRecord createSamRecord() {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-        builder.addFrag("readA", 20, 140, false);
-        return builder.iterator().next();
-    }
-
-    private static SamInputResource createSamForIntAttr(long value) {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        PrintStream ps = new PrintStream(baos);
-        ps.println("@HD\tVN:1.0");
-        ps.print("1\t4\t*\t0\t0\t*\t*\t0\t0\tA\t<\tUI:i:");
-        ps.println(value);
-        ps.close();
-
-        return new SamInputResource(new InputStreamInputResource(new ByteArrayInputStream(baos.toByteArray())));
-    }
-
-    @Test
-    public void testGoodSamStrict() throws IOException {
-        final SamReaderFactory factory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.STRICT);
-
-        Assert.assertEquals(0, ((Number) factory.open(createSamForIntAttr(0)).iterator().next().getAttribute("UI")).intValue());
-        Assert.assertEquals(-1, ((Number) factory.open(createSamForIntAttr(-1)).iterator().next().getAttribute("UI")).intValue());
-        Assert.assertEquals(Integer.MIN_VALUE, ((Number) factory.open(createSamForIntAttr(Integer.MIN_VALUE)).iterator().next().getAttribute("UI")).intValue());
-        Assert.assertEquals(Integer.MAX_VALUE, ((Number) factory.open(createSamForIntAttr(Integer.MAX_VALUE)).iterator().next().getAttribute("UI")).intValue());
-        Assert.assertEquals(1L + (long) Integer.MAX_VALUE, ((Number) factory.open(createSamForIntAttr(1L + (long) Integer.MAX_VALUE)).iterator().next().getAttribute("UI")).longValue());
-        Assert.assertEquals(BinaryCodec.MAX_UINT, ((Number) factory.open(createSamForIntAttr(BinaryCodec.MAX_UINT)).iterator().next().getAttribute("UI")).longValue());
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testBadSamStrict() throws IOException {
-        final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.STRICT).open(createSamForIntAttr(BinaryCodec.MAX_UINT + 1L));
-        reader.iterator().next();
-    }
-
-    @Test
-    public void testBadSamSilent() throws IOException {
-        final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(createSamForIntAttr(BinaryCodec.MAX_UINT + 1L));
-        reader.iterator().next();
-    }
-
-    @DataProvider(name = "legalIntegerAttributesFiles")
-    public Object[][] getLegalIntegerAttributesFiles() {
-        return new Object[][] {
-                { new File(TEST_DATA_DIR, "variousAttributes.sam") },
-                { new File(TEST_DATA_DIR, "variousAttributes.bam") }
-        };
-    }
-
-    @Test(dataProvider = "legalIntegerAttributesFiles")
-    public void testLegalIntegerAttributesFilesStrict( final File inputFile ) {
-        final SamReader reader = SamReaderFactory.makeDefault()
-                .enable(SamReaderFactory.Option.EAGERLY_DECODE)
-                .validationStringency(ValidationStringency.STRICT)
-                .open(inputFile);
-
-        final SAMRecord rec = reader.iterator().next();
-        final Map<String, Number> expectedTags = new HashMap<String, Number>();
-        expectedTags.put("SB", -128);
-        expectedTags.put("UB", 129);
-        expectedTags.put("SS", 32767);
-        expectedTags.put("US", 65535);
-        expectedTags.put("SI", 2147483647);
-        expectedTags.put("I2", -2147483647);
-        expectedTags.put("UI", 4294967295L);
-        for (final Map.Entry<String, Number> entry : expectedTags.entrySet()) {
-            final Object value = rec.getAttribute(entry.getKey());
-            Assert.assertTrue(((Number) value).longValue() == entry.getValue().longValue());
-        }
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "valid_set")
-    public static Object[][] valid_set() {
-        List<Object[]> params = new ArrayList<Object[]>();
-        for (FORMAT format:FORMAT.values()) {
-            for (ValidationStringency stringency:ValidationStringency.values()) {
-                params.add(new Object[]{0, format, stringency});
-                params.add(new Object[]{1, format, stringency});
-                params.add(new Object[]{-1, format, stringency});
-                params.add(new Object[]{Integer.MIN_VALUE, format, stringency});
-                params.add(new Object[]{Integer.MAX_VALUE, format, stringency});
-
-                params.add(new Object[]{1L, format, stringency});
-                params.add(new Object[]{-1L, format, stringency});
-                params.add(new Object[]{(long)Integer.MAX_VALUE+1L, format, stringency});
-                params.add(new Object[]{BinaryCodec.MAX_UINT, format, stringency});
-            }
-        }
-
-        return params.toArray(new Object[3][params.size()]);
-    }
-
-    @DataProvider(name = "invalid_set")
-    public static Object[][] invalid_set() {
-        List<Object[]> params = new ArrayList<Object[]>();
-        for (FORMAT format:FORMAT.values()) {
-            for (ValidationStringency stringency:ValidationStringency.values()) {
-                params.add(new Object[]{(long)Integer.MIN_VALUE -1L, format, stringency});
-                params.add(new Object[]{TOO_LARGE_UNSIGNED_INT_VALUE, format, stringency});
-            }
-        }
-
-        return params.toArray(new Object[3][params.size()]);
-    }
-
-    @Test(dataProvider = "valid_set")
-    public void testValidIntegerAttributeRoundtrip(final long value, final FORMAT format, ValidationStringency validationStringency) throws IOException {
-        testRoundtripIntegerAttribute(value, format, validationStringency);
-    }
-
-    @Test(dataProvider = "invalid_set", expectedExceptions = RuntimeException.class)
-    public void testInvalidIntegerAttributeRoundtrip(final long value, final FORMAT format, ValidationStringency validationStringency) throws IOException {
-        testRoundtripIntegerAttribute(value, format, validationStringency);
-    }
-
-    private void testRoundtripIntegerAttribute(final Number value, final FORMAT format, ValidationStringency validationStringency) throws IOException {
-        final SAMFileHeader header = new SAMFileHeader();
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        final SAMFileWriter w;
-        switch (format) {
-            case SAM:
-                w = new SAMFileWriterFactory().makeSAMWriter(header, false, baos);
-                break;
-            case BAM:
-                w = new SAMFileWriterFactory().makeBAMWriter(header, false, baos);
-                break;
-            case CRAM:
-                w = new SAMFileWriterFactory().makeCRAMWriter(header, baos, null);
-                break;
-            default:
-                throw new RuntimeException("Unknown format: " + format);
-        }
-
-        final SAMRecord record = new SAMRecord(header);
-        record.setAttribute("UI", value);
-        record.setReadName("1");
-        record.setReadUnmappedFlag(true);
-        record.setReadBases("A".getBytes());
-        record.setBaseQualityString("!");
-        Assert.assertEquals(value, record.getAttribute("UI"));
-
-        w.addAlignment(record);
-        w.close();
-
-        final SamReader reader = SamReaderFactory.make().validationStringency(validationStringency).referenceSource(new ReferenceSource((File)null)).
-                open(SamInputResource.of(new ByteArrayInputStream(baos.toByteArray())));
-        final SAMRecordIterator iterator = reader.iterator();
-        Assert.assertTrue(iterator.hasNext());
-        final SAMRecord record2 = iterator.next();
-        final Number returnedValue = (Number) record2.getAttribute("UI");
-        Assert.assertEquals(value.longValue(), returnedValue.longValue());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMRecordDuplicateComparatorTest.java b/src/test/java/htsjdk/samtools/SAMRecordDuplicateComparatorTest.java
deleted file mode 100644
index cb50925..0000000
--- a/src/test/java/htsjdk/samtools/SAMRecordDuplicateComparatorTest.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * The tests listed here are not exhaustive, and duplicate some of the work found in Picard's MarkDuplicates test classes.
- *
- * @author nhomer
- */
-public class SAMRecordDuplicateComparatorTest {
-    
-    private final static SAMRecordDuplicateComparator comparator = new SAMRecordDuplicateComparator();
-
-    protected final static int DEFAULT_BASE_QUALITY = 10;
-
-    private SAMRecordSetBuilder getSAMRecordSetBuilder() {
-        return  new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-    }
-    
-    private boolean matchesExpected(final int expected, final int actual) {
-        if (expected < 0) return (actual < 0);
-        else if (0 == expected) return (0 == actual);
-        else return (0 < actual);
-    }
-
-    private void assertEquals(List<Integer> expectedValues, final SAMRecordSetBuilder records, boolean fullCompare) {
-        SAMRecord previous = null, current;
-        
-        Assert.assertEquals(expectedValues.size() + 1, records.size());
-
-        Iterator<SAMRecord> iterator = records.getRecords().iterator();
-        Iterator<Integer> integerIterator = expectedValues.iterator();
-        while (iterator.hasNext()) {
-            current = iterator.next();
-
-            if (null != previous) {
-                if (fullCompare) {
-                    Assert.assertTrue(matchesExpected(integerIterator.next(), comparator.compare(previous, current)));
-                }
-                else {
-                    Assert.assertTrue(matchesExpected(integerIterator.next(), comparator.duplicateSetCompare(previous, current)));
-                }
-            }
-
-            previous = current;
-        }
-    }
-    
-    private void assertEquals(int expected, final SAMRecordSetBuilder records, boolean fullCompare) {
-        assertEquals(Collections.singletonList(expected), records, fullCompare);
-    }
-
-    /***
-     * Tests for comparing duplicate sets only, fragment reads.
-     */
-    @Test
-    public void testFragmentsSamePositive() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-        
-        records.addFrag("READ0", 1, 1, false);
-        records.addFrag("READ1", 1, 1, false);
-
-        assertEquals(0, records, false);
-    }
-
-    @Test
-    public void testFragmentsSameNegative() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, true);
-        records.addFrag("READ1", 1, 1, true);
-
-        assertEquals(0, records, false);
-    }
-
-    @Test
-    public void testFragmentsDifferentStrand() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false);
-        records.addFrag("READ1", 1, 1, true);
-
-        assertEquals(-1, records, false);
-    }
-
-    @Test
-    public void testFragmentsDifferentContig() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false);
-        records.addFrag("READ1", 2, 1, false);
-    
-        assertEquals(-1, records, false);
-    }
-
-    @Test
-    public void testFragmentsDifferentStart() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false);
-        records.addFrag("READ1", 1, 2, false);
-
-        assertEquals(-1, records, false);
-    }
-    
-    @Test
-    public void testFragmentsDifferentCigar() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ1", 1, 1, false, false, "51M", null, DEFAULT_BASE_QUALITY);
-
-        assertEquals(0, records, false);
-    }
-
-    @Test
-    public void testFragmentsOneUnmapped() {
-
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 1, false, false, "50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ1", 1, 1, false, true, null, null, DEFAULT_BASE_QUALITY);
-
-        assertEquals(-1, records, false);
-    }
-
-    @Test
-    public void testFragmentsOppositeStrandsLessThan() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ1", 1, 100, false, false, "50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ0", 1, 51, true, false, "50M", null, DEFAULT_BASE_QUALITY);
-
-        assertEquals(-1, records, false);
-    }
-
-    @Test
-    public void testFragmentsOppositeStrandsGreaterThan() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 50, true, false, "50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ1", 1, 101, false, false, "50M", null, DEFAULT_BASE_QUALITY);
-        
-        assertEquals(-1, records, false);
-    }
-
-    @Test
-    public void testFragmentsWithSoftClipping() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 55, false, false, "5S50M", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ1", 1, 60, false, false, "10S50M", null, DEFAULT_BASE_QUALITY);
-        
-        assertEquals(0, records, false);
-    }
-
-    @Test
-    public void testFragmentsReverseStrandWithSoftClipping() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addFrag("READ0", 1, 55, true, false, "50M10S", null, DEFAULT_BASE_QUALITY);
-        records.addFrag("READ1", 1, 60, true, false, "50M5S", null, DEFAULT_BASE_QUALITY);
-        
-        assertEquals(0, records, false);
-    }
-
-    /*
-    @Test
-    public void testPairedSamePositions() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addPair("READ0", 1, 55, 55);
-        records.addPair("READ1", 1, 55, 55);
-
-        assertEquals(0, records, false);
-    }
-    */
-
-    @Test
-    public void testPairedFirstEndDifferent() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addPair("READ0", 1, 55, 55);
-        records.addPair("READ1", 2, 55, 55);
-
-        assertEquals(Arrays.asList(-1,-1,-1), records, false);
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testNullHeaders() {
-        final SAMRecordSetBuilder records = getSAMRecordSetBuilder();
-
-        records.addPair("READ0", 1, 55, 55);
-        records.addPair("READ1", 2, 55, 55);
-        Collection<SAMRecord> recs = records.getRecords();
-        for (SAMRecord rec : recs) {
-            rec.setHeader(null);
-        }
-
-        assertEquals(Arrays.asList(-1, -1, -1), records, false);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SAMRecordUnitTest.java b/src/test/java/htsjdk/samtools/SAMRecordUnitTest.java
deleted file mode 100644
index 951ecee..0000000
--- a/src/test/java/htsjdk/samtools/SAMRecordUnitTest.java
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.BinaryCodec;
-import htsjdk.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.Arrays;
-import java.util.List;
-
-public class SAMRecordUnitTest {
-
-    @DataProvider(name = "serializationTestData")
-    public Object[][] getSerializationTestData() {
-        return new Object[][] {
-                { new File("src/test/resources/htsjdk/samtools/serialization_test.sam") },
-                { new File("src/test/resources/htsjdk/samtools/serialization_test.bam") }
-        };
-    }
-
-    @Test(dataProvider = "serializationTestData")
-    public void testSAMRecordSerialization( final File inputFile ) throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(inputFile);
-        final SAMRecord initialSAMRecord = reader.iterator().next();
-        reader.close();
-
-        final SAMRecord deserializedSAMRecord = TestUtil.serializeAndDeserialize(initialSAMRecord);
-
-        Assert.assertEquals(deserializedSAMRecord, initialSAMRecord, "Deserialized SAMRecord not equal to original SAMRecord");
-    }
-
-    @DataProvider
-    public Object [][] offsetAtReferenceData() {
-        return new Object[][]{
-                {"3S9M",   7, 10, false},
-                {"3S9M",   0,  0, false},
-                {"3S9M",  -1,  0, false},
-                {"3S9M",  13,  0, false},
-                {"4M1D6M", 4,  4, false},
-                {"4M1D6M", 4,  4, true},
-                {"4M1D6M", 5,  0, false},
-                {"4M1D6M", 5,  4, true},
-                {"4M1I6M", 5,  6, false},
-                {"4M1I6M", 11, 0, false},
-        };
-    }
-
-    @Test(dataProvider = "offsetAtReferenceData")
-    public void testOffsetAtReference(String cigar, int posInReference, int expectedPosInRead, boolean returnLastBaseIfDeleted) {
-
-            SAMRecord sam = new SAMRecordSetBuilder().addFrag("test", 0, 1, false, false, cigar, null, 2);
-            Assert.assertEquals(SAMRecord.getReadPositionAtReferencePosition(sam, posInReference, returnLastBaseIfDeleted), expectedPosInRead);
-    }
-
-    @DataProvider
-    public Object [][] referenceAtReadData() {
-        return new Object[][]{
-                {"3S9M", 7, 10},
-                {"3S9M", 0, 0},
-                {"3S9M", 0, 13},
-                {"4M1D6M", 4, 4},
-                {"4M1D6M", 6, 5},
-                {"4M1I6M", 0, 5},
-                {"4M1I6M", 5, 6},
-        };
-    }
-
-    @Test(dataProvider = "referenceAtReadData")
-    public void testOffsetAtRead(String cigar, int expectedReferencePos, int posInRead) {
-
-            SAMRecord sam = new SAMRecordSetBuilder().addFrag("test", 0, 1, false, false, cigar, null, 2);
-            Assert.assertEquals(sam.getReferencePositionAtReadPosition(posInRead), expectedReferencePos);
-    }
-
-    @DataProvider(name = "deepCopyTestData")
-    public Object [][] deepCopyTestData() {
-        return new Object[][]{
-                { new SAMRecordSetBuilder().addFrag("test", 0, 1, false, false, "3S9M", null, 2) },
-                { new SAMRecordSetBuilder().addFrag("test", 0, 1, false, false, "4M1I6M", null, 2) }
-        };
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepCopyBasic(final SAMRecord sam) {
-        testDeepCopy(sam);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepCopyCigar(SAMRecord sam) {
-        sam.setCigar(sam.getCigar());
-        final SAMRecord deepCopy = sam.deepCopy();
-        Assert.assertTrue(sam.equals(deepCopy));
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepCopyGetCigarString(SAMRecord sam) {
-        sam.setCigarString(sam.getCigarString());
-        final SAMRecord deepCopy = sam.deepCopy();
-        Assert.assertTrue(sam.equals(deepCopy));
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepCopyGetCigar(final SAMRecord sam)
-    {
-        testDeepCopy(sam);
-        sam.setCigarString(sam.getCigarString());
-        sam.getCigar(); // force cigar elements to be resolved for equals
-        testDeepCopy(sam);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepCopyMutate(final SAMRecord sam) {
-        final byte[] initialBaseQualityCopy = Arrays.copyOf(sam.getBaseQualities(), sam.getBaseQualities().length);
-        final int initialStart = sam.getAlignmentStart();
-
-        final SAMRecord deepCopy = testDeepCopy(sam);
-        Assert.assertTrue(Arrays.equals(sam.getBaseQualities(), deepCopy.getBaseQualities()));
-        Assert.assertTrue(sam.getAlignmentStart() == deepCopy.getAlignmentStart());
-
-        // mutate copy and make sure original remains unchanged
-        final byte[] copyBaseQuals = deepCopy.getBaseQualities();
-        for (int i = 0; i < copyBaseQuals.length; i++) {
-            copyBaseQuals[i]++;
-        }
-        deepCopy.setBaseQualities(copyBaseQuals);
-        deepCopy.setAlignmentStart(initialStart + 1);
-        Assert.assertTrue(Arrays.equals(sam.getBaseQualities(), initialBaseQualityCopy));
-        Assert.assertTrue(sam.getAlignmentStart() == initialStart);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepByteAttributes( final SAMRecord sam ) throws Exception {
-        SAMRecord deepCopy = testDeepCopy(sam);
-
-        final byte bytes[] = { -2, -1, 0, 1, 2 };
-        sam.setAttribute("BY", bytes);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        // validate reference inequality and content equality
-        final byte samBytes[] = sam.getByteArrayAttribute("BY");
-        final byte copyBytes[] = deepCopy.getByteArrayAttribute("BY");
-        Assert.assertFalse(copyBytes == samBytes);
-        Assert.assertTrue(Arrays.equals(copyBytes, samBytes));
-
-        // validate mutation independence
-        final byte testByte = -1;
-        Assert.assertTrue(samBytes[2] != testByte);  // ensure initial test condition
-        Assert.assertTrue(copyBytes[2] != testByte); // ensure initial test condition
-        samBytes[2] = testByte;                      // mutate original
-        Assert.assertTrue(samBytes[2] == testByte);
-        Assert.assertTrue(copyBytes[2] != testByte);
-        sam.setAttribute("BY", samBytes);
-        Assert.assertTrue(sam.getByteArrayAttribute("BY")[2] != deepCopy.getByteArrayAttribute("BY")[2]);
-
-        // now unsigned...
-        sam.setUnsignedArrayAttribute("BY", bytes);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-        final byte samUBytes[] = sam.getUnsignedByteArrayAttribute("BY");
-        final byte copyUBytes[] = deepCopy.getUnsignedByteArrayAttribute("BY");
-        Assert.assertFalse(copyUBytes == bytes);
-        Assert.assertTrue(Arrays.equals(copyUBytes, samUBytes));
-
-        // validate mutation independence
-        final byte uByte = 1;
-        Assert.assertTrue(samUBytes[2] != uByte); //  ensure initial test condition
-        Assert.assertTrue(samUBytes[2] != uByte); //  ensure initial test condition
-        samUBytes[2] = uByte;  // mutate original
-        Assert.assertTrue(samUBytes[2] == uByte);
-        Assert.assertTrue(copyUBytes[2] != uByte);
-        sam.setUnsignedArrayAttribute("BY", samBytes);
-        Assert.assertTrue(sam.getUnsignedByteArrayAttribute("BY")[2] != deepCopy.getUnsignedByteArrayAttribute("BY")[2]);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepShortAttributes( final SAMRecord sam ) throws Exception {
-        SAMRecord deepCopy = testDeepCopy(sam);
-
-        final short shorts[] = { -20, -10, 0, 10, 20 };
-        sam.setAttribute("SH", shorts);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        // validate reference inequality, content equality
-        final short samShorts[] = sam.getSignedShortArrayAttribute("SH");
-        final short copyShorts[] = deepCopy.getSignedShortArrayAttribute("SH");
-        Assert.assertFalse(copyShorts == samShorts);
-        Assert.assertTrue(Arrays.equals(copyShorts, samShorts));
-
-        // validate mutation independence
-        final short testShort = -1;
-        Assert.assertTrue(samShorts[2] != testShort); //  ensure initial test condition
-        Assert.assertTrue(samShorts[2] != testShort); //  ensure initial test condition
-        samShorts[2] = testShort;  // mutate original
-        Assert.assertTrue(samShorts[2] == testShort);
-        Assert.assertTrue(copyShorts[2] != testShort);
-        sam.setAttribute("SH", samShorts);
-        Assert.assertTrue(sam.getSignedShortArrayAttribute("SH")[2] != deepCopy.getSignedShortArrayAttribute("SH")[2]);
-
-        // now unsigned...
-        sam.setUnsignedArrayAttribute("SH", shorts);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        final short samUShorts[] = sam.getUnsignedShortArrayAttribute("SH");
-        final short copyUShorts[] = deepCopy.getUnsignedShortArrayAttribute("SH");
-        Assert.assertFalse(copyUShorts == shorts);
-        Assert.assertTrue(Arrays.equals(copyUShorts, samUShorts));
-
-        // validate mutation independence
-        final byte uShort = 1;
-        Assert.assertTrue(samUShorts[2] != uShort); //  ensure initial test condition
-        Assert.assertTrue(samUShorts[2] != uShort); //  ensure initial test condition
-        samUShorts[2] = uShort;  // mutate original
-        Assert.assertTrue(samUShorts[2] == uShort);
-        Assert.assertTrue(copyUShorts[2] != uShort);
-        sam.setUnsignedArrayAttribute("SH", samShorts);
-        Assert.assertTrue(sam.getUnsignedShortArrayAttribute("SH")[2] != deepCopy.getUnsignedShortArrayAttribute("SH")[2]);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepIntAttributes( final SAMRecord sam ) throws Exception {
-        SAMRecord deepCopy = testDeepCopy(sam);
-
-        final int ints[] = { -200, -100, 0, 100, 200 };
-        sam.setAttribute("IN", ints);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        // validate reference inequality and content equality
-        final  int samInts[] = sam.getSignedIntArrayAttribute("IN");
-        final  int copyInts[] = deepCopy.getSignedIntArrayAttribute("IN");
-        Assert.assertFalse(copyInts == ints);
-        Assert.assertTrue(Arrays.equals(copyInts, samInts));
-
-        // validate mutation independence
-        final short testInt = -1;
-        Assert.assertTrue(samInts[2] != testInt); //  ensure initial test condition
-        Assert.assertTrue(samInts[2] != testInt); //  ensure initial test condition
-        samInts[2] = testInt;  // mutate original
-        Assert.assertTrue(samInts[2] == testInt);
-        Assert.assertTrue(copyInts[2] != testInt);
-        sam.setAttribute("IN", samInts);
-        Assert.assertTrue(sam.getSignedIntArrayAttribute("IN")[2] != deepCopy.getSignedIntArrayAttribute("IN")[2]);
-
-        // now unsigned...
-        sam.setUnsignedArrayAttribute("IN", ints);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        final int samUInts[] = sam.getUnsignedIntArrayAttribute("IN");
-        final int copyUInts[] = deepCopy.getUnsignedIntArrayAttribute("IN");
-        Assert.assertFalse(copyUInts == ints);
-        Assert.assertTrue(Arrays.equals(copyUInts, samUInts));
-
-        // validate mutation independence
-        byte uInt = 1;
-        Assert.assertTrue(samUInts[2] != uInt); //  ensure initial test condition
-        Assert.assertTrue(samUInts[2] != uInt); //  ensure initial test condition
-        samInts[2] = uInt;  // mutate original
-        Assert.assertTrue(samUInts[2] == uInt);
-        Assert.assertTrue(copyUInts[2] != uInt);
-        sam.setUnsignedArrayAttribute("IN", samInts);
-        Assert.assertTrue(sam.getUnsignedIntArrayAttribute("IN")[2] != deepCopy.getUnsignedIntArrayAttribute("IN")[2]);
-    }
-
-    @Test(dataProvider = "deepCopyTestData")
-    public void testDeepFloatAttributes( final SAMRecord sam ) throws Exception {
-        SAMRecord deepCopy = testDeepCopy(sam);
-
-        final float floats[] = { -2.4f, -1.2f, 0, 2.3f, 4.6f };
-        sam.setAttribute("FL", floats);
-        deepCopy = sam.deepCopy();
-        Assert.assertEquals(sam, deepCopy);
-
-        // validate reference inequality and content equality
-        final float samFloats[] = sam.getFloatArrayAttribute("FL");
-        final float copyFloats[] = deepCopy.getFloatArrayAttribute("FL");
-        Assert.assertFalse(copyFloats == floats);
-        Assert.assertFalse(copyFloats == samFloats);
-        Assert.assertTrue(Arrays.equals(copyFloats, samFloats));
-
-        // validate mutation independence
-        final float testFloat = -1.0f;
-        Assert.assertTrue(samFloats[2] != testFloat); //  ensure initial test condition
-        Assert.assertTrue(samFloats[2] != testFloat); //  ensure initial test condition
-        samFloats[2] = testFloat;  // mutate original
-        Assert.assertTrue(samFloats[2] == testFloat);
-        Assert.assertTrue(copyFloats[2] != testFloat);
-        sam.setAttribute("FL", samFloats);
-        Assert.assertTrue(sam.getFloatArrayAttribute("FL")[2] != deepCopy.getFloatArrayAttribute("FL")[2]);
-    }
-
-    private SAMRecord testDeepCopy(SAMRecord sam) {
-        final SAMRecord deepCopy = sam.deepCopy();
-        Assert.assertTrue(sam.equals(deepCopy));
-        return deepCopy;
-    }
-
-    @Test
-    public void test_getUnsignedIntegerAttribute_valid() {
-        final String stringTag = "UI";
-        final short binaryTag = SAMTagUtil.getSingleton().makeBinaryTag(stringTag);
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = new SAMRecord(header);
-        Assert.assertNull(record.getUnsignedIntegerAttribute(stringTag));
-        Assert.assertNull(record.getUnsignedIntegerAttribute(binaryTag));
-
-        record.setAttribute("UI", (long) 0L);
-        Assert.assertEquals(new Long(0L), record.getUnsignedIntegerAttribute(stringTag));
-        Assert.assertEquals(new Long(0L), record.getUnsignedIntegerAttribute(binaryTag));
-
-        record.setAttribute("UI", BinaryCodec.MAX_UINT);
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute(stringTag));
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute(binaryTag));
-
-        final SAMBinaryTagAndValue tv_zero = new SAMBinaryTagAndValue(binaryTag, 0L);
-        record = new SAMRecord(header){
-            {
-                setAttributes(tv_zero);
-            }
-        };
-        Assert.assertEquals(new Long(0L), record.getUnsignedIntegerAttribute(stringTag));
-        Assert.assertEquals(new Long(0L), record.getUnsignedIntegerAttribute(binaryTag));
-
-        final SAMBinaryTagAndValue tv_max = new SAMBinaryTagAndValue(binaryTag, BinaryCodec.MAX_UINT);
-        record = new SAMRecord(header){
-            {
-                setAttributes(tv_max);
-            }
-        };
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute(stringTag));
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute(binaryTag));
-    }
-
-    /**
-     * This is an alternative to test_getUnsignedIntegerAttribute_valid().
-     * This is required for testing invalid (out of range) unsigned integer value.
-     */
-    @Test
-    public void test_getUnsignedIntegerAttribute_valid_alternative() {
-        final short tag = SAMTagUtil.getSingleton().makeBinaryTag("UI");
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record;
-
-        record = new SAMRecord(header);
-        record.setAttribute("UI", 0L);
-        Assert.assertEquals(new Long(0L), record.getUnsignedIntegerAttribute(tag));
-
-        record = new SAMRecord(header);
-        record.setAttribute("UI", BinaryCodec.MAX_UINT);
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute("UI"));
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void test_getUnsignedIntegerAttribute_negative() {
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = new SAMRecord(header);
-        record.setAttribute("UI", -1L);
-        record.getUnsignedIntegerAttribute("UI");
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void test_setUnsignedIntegerAttributeTooLarge() {
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = new SAMRecord(header);
-        record.setAttribute("UI", BinaryCodec.MAX_UINT + 1);
-    }
-
-    // NOTE: SAMRecord.asAllowedAttribute is deprecated, as it has been moved into
-    // SAMBinaryTagAndValue, but we'll leave this test here until the code is removed.
-    @Test
-    public void test_isAllowedAttributeDataType() {
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Byte((byte) 0)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Short((short) 0)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Integer(0)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue("a string"));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Character('C')));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Float(0.1F)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new byte[]{0}));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new short[]{0}));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new int[]{0}));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new float[]{0.1F}));
-
-        // unsigned integers:
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Long(0)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Long(BinaryCodec.MAX_UINT)));
-        Assert.assertTrue(SAMRecord.isAllowedAttributeValue(new Long(-1L)));
-        Assert.assertFalse(SAMRecord.isAllowedAttributeValue(new Long(BinaryCodec.MAX_UINT + 1L)));
-        Assert.assertFalse(SAMRecord.isAllowedAttributeValue(new Long(Integer.MIN_VALUE - 1L)));
-    }
-
-    @Test()
-    public void test_setAttribute_empty_string() {
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMRecord record = new SAMRecord(header);
-        Assert.assertNull(record.getStringAttribute(SAMTag.MD.name()));
-        record.setAttribute(SAMTag.MD.name(), "");
-        Assert.assertNotNull(record.getStringAttribute(SAMTag.MD.name()));
-        Assert.assertEquals(record.getStringAttribute(SAMTag.MD.name()),"");
-        record.setAttribute(SAMTag.MD.name(), null);
-        Assert.assertNull(record.getStringAttribute(SAMTag.MD.name()));
-    }
-
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void test_setAttribute_unsigned_int_negative() {
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = null;
-        record = new SAMRecord(header);
-        Assert.assertNull(record.getUnsignedIntegerAttribute("UI"));
-        record.setAttribute("UI", (long) Integer.MIN_VALUE - 1L);
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void test_setAttribute_unsigned_int_tooLarge() {
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = new SAMRecord(header);
-        Assert.assertNull(record.getUnsignedIntegerAttribute("UI"));
-        record.setAttribute("UI", (long) BinaryCodec.MAX_UINT + 1L);
-    }
-
-    @Test
-    public void test_setAttribute_null_removes_tag() {
-        final short tag = SAMTagUtil.getSingleton().makeBinaryTag("UI");
-        SAMFileHeader header = new SAMFileHeader();
-        SAMRecord record = new SAMRecord(header);
-        Assert.assertNull(record.getUnsignedIntegerAttribute(tag));
-
-        record.setAttribute(tag, BinaryCodec.MAX_UINT);
-        Assert.assertEquals(new Long(BinaryCodec.MAX_UINT), record.getUnsignedIntegerAttribute(tag));
-
-        record.setAttribute(tag, null);
-        Assert.assertNull(record.getUnsignedIntegerAttribute(tag));
-    }
-
-    private SAMRecord createTestRecordHelper() {
-        return new SAMRecordSetBuilder().addFrag("test", 0, 1, false, false, "3S9M", null, 2);
-    }
-
-    @Test
-    public void testReferenceName() {
-        SAMRecord sam = createTestRecordHelper();
-
-        // NO_ALIGNMENT_NAME
-        sam.setReferenceName(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME);
-        Assert.assertTrue(sam.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-        Assert.assertTrue(sam.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-
-        // valid reference name
-        sam = createTestRecordHelper();
-        sam.setReferenceName("chr4");
-        Assert.assertTrue(sam.getReferenceName().equals("chr4"));
-        Assert.assertTrue(sam.getReferenceIndex().equals(3));
-
-        // invalid reference name sets name but leaves ref index invalid
-        sam = createTestRecordHelper();
-        sam.setReferenceName("unresolvableName");
-        Assert.assertTrue(sam.getReferenceName().equals("unresolvableName"));
-        Assert.assertTrue(sam.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-    }
-
-    @Test
-    public void testReferenceIndex() {
-        // NO_ALIGNMENT_REFERENCE
-        SAMRecord sam = createTestRecordHelper();
-        sam.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        Assert.assertTrue(sam.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        Assert.assertTrue(sam.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-
-        // valid reference
-        sam = createTestRecordHelper();
-        sam.setReferenceIndex(3);
-        Assert.assertTrue(sam.getReferenceIndex().equals(3));
-        Assert.assertTrue(sam.getReferenceName().equals("chr4"));
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testInvalidReferenceIndex() {
-        // unresolvable reference
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setReferenceIndex(9999);
-    }
-
-    @Test
-    public void testMateReferenceName() {
-        // NO_ALIGNMENT_NAME
-        SAMRecord sam = createTestRecordHelper();
-        sam.setMateReferenceName(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME);
-        Assert.assertTrue(sam.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-
-        // valid reference
-        sam = createTestRecordHelper();
-        sam.setMateReferenceName("chr4");
-        Assert.assertTrue(sam.getMateReferenceName().equals("chr4"));
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(3));
-
-        // unresolvable reference
-        sam = createTestRecordHelper();
-        sam.setMateReferenceName("unresolvableName");
-        Assert.assertTrue(sam.getMateReferenceName().equals("unresolvableName"));
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-    }
-
-    @Test
-    public void testMateReferenceIndex() {
-        // NO_ALIGNMENT_REFERENCE
-        SAMRecord sam = createTestRecordHelper();
-        sam.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        Assert.assertTrue(sam.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-
-        // valid reference
-        sam = createTestRecordHelper();
-        sam.setMateReferenceIndex(3);
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(3));
-        Assert.assertTrue(sam.getMateReferenceName().equals("chr4"));
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testInvalidMateReferenceIndex() {
-        // unresolvable reference
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setMateReferenceIndex(9999);
-    }
-
-    @Test
-    public void testRecordValidation() {
-        final SAMRecord sam = createTestRecordHelper();
-        List<SAMValidationError> validationErrors = sam.isValid(false);
-        Assert.assertTrue(validationErrors == null);
-    }
-
-    @Test
-    public void testInvalidAlignmentStartValidation() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setAlignmentStart(0);
-        List<SAMValidationError> validationErrors = sam.isValid(false);
-        Assert.assertTrue(validationErrors != null && validationErrors.size() == 1);
-    }
-
-    // ----------------- NULL header tests ---------------------
-
-    @Test
-    public void testNullHeaderReferenceName() {
-        final SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        Assert.assertTrue(null != samHeader);
-        final String originalRefName = sam.getReferenceName();
-
-        // setting header to null retains the previously assigned ref name
-        sam.setHeader(null);
-        Assert.assertTrue(originalRefName.equals(sam.getReferenceName()));
-
-        // null header allows reference name to be set to NO_ALIGNMENT_REFERENCE_NAME
-        sam.setReferenceName(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME);
-        Assert.assertTrue(sam.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-        Assert.assertTrue(sam.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-
-        // null header allows reference name to be reset to a valid namw
-        sam.setReferenceName(originalRefName);
-        Assert.assertTrue(sam.getReferenceName().equals(originalRefName));
-    }
-
-    @Test
-    public void testNullHeaderReferenceIndex() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        int originalRefIndex = sam.getReferenceIndex();
-        Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalRefIndex);
-
-        // setting header to null resets the reference index to null
-        sam.setHeader(null);
-        Assert.assertTrue(null == sam.mReferenceIndex);
-        // restoring the header to restores the reference index back to the original
-        sam.setHeader(samHeader);
-        Assert.assertTrue(sam.getReferenceIndex().equals(originalRefIndex));
-
-        // setting the header to null allows setting the reference index to NO_ALIGNMENT_REFERENCE_INDEX
-        sam.setHeader(null);
-        sam.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        Assert.assertTrue(sam.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        Assert.assertTrue(sam.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-
-        // force the internal SAMRecord reference index value to (null) initial state
-        sam = new SAMRecord(null);
-        Assert.assertTrue(null == sam.mReferenceIndex);
-        Assert.assertTrue(sam.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-
-        // an unresolvable reference name doesn't throw
-        final String unresolvableRefName = "unresolvable";
-        sam.setReferenceName(unresolvableRefName);
-        // now force the SAMRecord to try to resolve the unresolvable name
-        sam.setHeader(samHeader);
-        Assert.assertTrue(null == sam.mReferenceIndex);
-        Assert.assertTrue(sam.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderSetReferenceIndex() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setHeader(null);
-        // setReferenceIndex with null header throws
-        sam.setReferenceIndex(3);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderGetReferenceIndex() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setHeader(null);
-        // getReferenceIndex with null header throws
-        sam.getReferenceIndex();
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderForceIndexResolutionFailure() {
-        // force the internal SAMRecord reference index value to null initial state
-        final SAMRecord sam = new SAMRecord(null);
-        sam.setReferenceName("unresolvable");
-        sam.getReferenceIndex();
-    }
-
-    @Test
-    public void testNullHeaderMateReferenceName() {
-        final SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        Assert.assertTrue(null != samHeader);
-        final String originalMateRefName = sam.getMateReferenceName();
-
-        // setting header to null retains the previously assigned mate ref name
-        sam.setHeader(null);
-        Assert.assertTrue(originalMateRefName.equals(sam.getMateReferenceName()));
-
-        // null header allows mate reference name to be set to NO_ALIGNMENT_REFERENCE_NAME
-        sam.setMateReferenceName(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME);
-        Assert.assertTrue(sam.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-
-        // null header allows reference name to be reset to a valid namw
-        sam.setMateReferenceName(originalMateRefName);
-        Assert.assertTrue(sam.getMateReferenceName().equals(originalMateRefName));
-    }
-
-    @Test
-    public void testNullHeaderMateReferenceIndex() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        sam.setMateReferenceName("chr1");
-        int originalMateRefIndex = sam.getMateReferenceIndex();
-        Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalMateRefIndex);
-
-        // setting header to null resets the mate reference index to null
-        sam.setHeader(null);
-        Assert.assertTrue(null == sam.mMateReferenceIndex);
-        // restoring the header to restores the reference index back to the original
-        sam.setHeader(samHeader);
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(originalMateRefIndex));
-
-        // setting the header to null allows setting the mate reference index to NO_ALIGNMENT_REFERENCE_INDEX
-        sam.setHeader(null);
-        sam.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        Assert.assertTrue(sam.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME));
-
-        // force the internal SAMRecord mate reference index value to (null) initial state
-        sam = new SAMRecord(null);
-        Assert.assertTrue(null == sam.mMateReferenceIndex);
-        Assert.assertTrue(sam.getMateReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-
-        // an unresolvable mate reference name doesn't throw
-        final String unresolvableRefName = "unresolvable";
-        sam.setMateReferenceName(unresolvableRefName);
-        // now force the SAMRecord to try to resolve the unresolvable mate reference name
-        sam.setHeader(samHeader);
-        Assert.assertTrue(null == sam.mMateReferenceIndex);
-        Assert.assertTrue(sam.getMateReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderSetMateReferenceIndex() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setHeader(null);
-        sam.setMateReferenceIndex(3);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderGetMateReferenceIndex() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setMateReferenceName("chr1");
-        sam.setHeader(null);
-        // getMateReferenceIndex with null header throws
-        sam.getMateReferenceIndex();
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testNullHeaderForceMateIndexResolutionFailure() {
-        // force the internal SAMRecord reference index value to null initial state
-        final SAMRecord sam = new SAMRecord(null);
-        sam.setMateReferenceName("unresolvable");
-        sam.getMateReferenceIndex();
-    }
-
-    @Test
-    public void testNullHeaderGetReadGroup() {
-        final SAMRecord sam = createTestRecordHelper();
-        Assert.assertTrue(null != sam.getHeader());
-
-        Assert.assertTrue(null != sam.getReadGroup() && sam.getReadGroup().getId().equals("1"));
-        sam.setHeader(null);
-        Assert.assertNull(sam.getReadGroup());
-    }
-
-    @Test(dataProvider = "serializationTestData")
-    public void testNullHeaderSerialization(final File inputFile) throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(inputFile);
-        final SAMRecord initialSAMRecord = reader.iterator().next();
-        reader.close();
-
-        initialSAMRecord.setHeader(null);
-        final SAMRecord deserializedSAMRecord = TestUtil.serializeAndDeserialize(initialSAMRecord);
-        Assert.assertEquals(deserializedSAMRecord, initialSAMRecord, "Deserialized SAMRecord not equal to original SAMRecord");
-    }
-
-
-    @Test
-    public void testValidateNonsenseCigar(){
-        // Create nonsense record
-        SAMRecord rec = createTestRecordHelper();
-        rec.setCigarString("nonsense");
-
-        //The default validationStringency of a sam record is SILENT.
-        rec.setValidationStringency(ValidationStringency.STRICT);
-        // Validate record
-        List<SAMValidationError> err = rec.validateCigar(-1);
-
-        Assert.assertNotNull(err);
-        Assert.assertEquals(err.size(), 1);
-        Assert.assertEquals(err.get(0).getType(), SAMValidationError.Type.INVALID_CIGAR);
-    }
-
-    @Test
-    public void testNullHeaderRecordValidation() {
-        final SAMRecord sam = createTestRecordHelper();
-        sam.setHeader(null);
-        List<SAMValidationError> validationErrors = sam.isValid(false);
-        Assert.assertTrue(validationErrors == null);
-    }
-
-    @Test
-    private void testNullHeaderDeepCopy() {
-        SAMRecord sam = createTestRecordHelper();
-        sam.setHeader(null);
-        final SAMRecord deepCopy = sam.deepCopy();
-
-        Assert.assertTrue(sam.equals(deepCopy));
-    }
-
-    private void testNullHeaderCigar(SAMRecord rec) {
-        Cigar origCigar = rec.getCigar();
-        Assert.assertNotNull(origCigar);
-        String originalCigarString = rec.getCigarString();
-
-        // set the cigar to null and then reset the cigar string in order to force getCigar to decode it
-        rec.setCigar(null);
-        Assert.assertNull(rec.getCigar());
-        rec.setCigarString(originalCigarString);
-        rec.setValidationStringency(ValidationStringency.STRICT);
-        rec.setHeader(null);
-        Assert.assertTrue(rec.getValidationStringency() == ValidationStringency.STRICT);
-
-        // force getCigar to decode the cigar string, validate that SAMRecord doesn't try to validate the cigar
-        Cigar cig = rec.getCigar();
-        Assert.assertNotNull(cig);
-        String cigString = TextCigarCodec.encode(cig);
-        Assert.assertEquals(cigString, originalCigarString);
-    }
-
-    @Test
-    private void testNullHeadGetCigarSAM() {
-        SAMRecord sam = createTestRecordHelper();
-        testNullHeaderCigar(sam);
-    }
-
-    @Test
-    private void testNullHeadGetCigarBAM() {
-        SAMRecord sam = createTestRecordHelper();
-        SAMRecordFactory factory = new DefaultSAMRecordFactory();
-        BAMRecord bamRec = factory.createBAMRecord(
-                sam.getHeader(),
-                sam.getReferenceIndex(),
-                sam.getAlignmentStart(),
-                (short) sam.getReadNameLength(),
-                (short) sam.getMappingQuality(),
-                0,
-                sam.getCigarLength(),
-                sam.getFlags(),
-                sam.getReadLength(),
-                sam.getMateReferenceIndex(),
-                sam.getMateAlignmentStart(),
-                0, null);
-
-        bamRec.setCigarString(sam.getCigarString());
-
-        testNullHeaderCigar(bamRec);
-    }
-
-    @Test
-    public void testSetHeaderStrictValid() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        Integer originalRefIndex = sam.getReferenceIndex();
-        Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalRefIndex);
-
-        // force re-resolution of the reference name
-        sam.setHeaderStrict(samHeader);
-        Assert.assertEquals(sam.getReferenceIndex(), originalRefIndex);
-    }
-
-    @Test
-    public void testSetHeaderStrictValidHeaderless() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        Integer originalRefIndex = sam.getReferenceIndex();
-        Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalRefIndex);
-
-        sam.setHeader(null);
-        // force re-resolution of the reference name
-        sam.setHeaderStrict(samHeader);
-        Assert.assertEquals(sam.getReferenceIndex(), originalRefIndex);
-    }
-
-    @Test
-    public void testSetHeaderStrictValidNewHeader() {
-        final SAMRecord sam = createTestRecordHelper();
-        final String origSequenceName = sam.getContig();
-
-        final SAMFileHeader origSamHeader = sam.getHeader();
-        final int origSequenceLength = origSamHeader.getSequence(origSequenceName).getSequenceLength();
-        final SAMFileHeader newHeader = new SAMFileHeader();
-        newHeader.addSequence(new SAMSequenceRecord(origSequenceName, origSequenceLength));
-
-        // force re-resolution of the reference name against the new header
-        sam.setHeaderStrict(newHeader);
-        Assert.assertEquals(sam.getReferenceIndex(), new Integer(0));
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testSetHeaderStrictInvalidReference() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-
-        sam.setReferenceName("unresolvable");
-        Assert.assertEquals(new Integer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX), sam.getReferenceIndex());
-
-        // throw on force re-resolution of the unresolvable reference name
-        sam.setHeaderStrict(samHeader);
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testSetHeaderStrictInvalidMateReference() {
-        SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-
-        sam.setMateReferenceName("unresolvable");
-        Assert.assertEquals(new Integer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX), sam.getMateReferenceIndex());
-
-        // throw on force re-resolution of the unresolvable mate reference name
-        sam.setHeaderStrict(samHeader);
-    }
-
-    @Test
-    public void testSetHeaderStrictNull() {
-        SAMRecord sam = createTestRecordHelper();
-        Assert.assertNotNull(sam.getHeader());
-        sam.setHeaderStrict(null);
-        Assert.assertNull(sam.getHeader());
-        Assert.assertNull(sam.mReferenceIndex);
-    }
-
-    // resolveIndexFromName
-
-    @Test
-    public void testResolveIndexResolvable() {
-        final SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        final String contigName = sam.getContig();
-        Assert.assertEquals(SAMRecord.resolveIndexFromName(contigName, samHeader, true), new Integer(samHeader.getSequenceIndex(contigName)));
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testResolveIndexUnresolvableNullHeader() {
-        SAMRecord.resolveIndexFromName("unresolvable", null, false);
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testResolveIndexUnresolvableStrict() {
-        final SAMFileHeader samHeader = new SAMFileHeader();
-        SAMRecord.resolveIndexFromName("unresolvable", samHeader, true);
-    }
-
-    @Test
-    public void testResolveIndexUnresolvableNotStrict() {
-        final SAMFileHeader samHeader = new SAMFileHeader();
-        Assert.assertEquals(SAMRecord.resolveIndexFromName("unresolvable", samHeader, false), null);
-    }
-
-    @Test
-    public void testResolveIndexNoAlignment() {
-        final SAMFileHeader samHeader = new SAMFileHeader();
-        Assert.assertEquals(SAMRecord.resolveIndexFromName(
-                SAMRecord.NO_ALIGNMENT_REFERENCE_NAME, samHeader, true), new Integer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testResolveIndexNullHeader() {
-        SAMRecord.resolveIndexFromName("unresolvable", null, true);
-    }
-
-    // resolveNameFromIndex
-
-    @Test
-    public void testResolveNameResolvable() {
-        final SAMRecord sam = createTestRecordHelper();
-        final SAMFileHeader samHeader = sam.getHeader();
-        final String contigName = sam.getContig();
-        final Integer contigIndex = samHeader.getSequenceIndex(contigName);
-        Assert.assertEquals(SAMRecord.resolveNameFromIndex(contigIndex, samHeader), contigName);
-    }
-
-    @Test(expectedExceptions=IllegalArgumentException.class)
-    public void testResolveNameUnresolvable() {
-        final SAMFileHeader samHeader = new SAMFileHeader();
-        SAMRecord.resolveNameFromIndex(99, samHeader);
-    }
-
-    @Test
-    public void testResolveNameNoAlignment() {
-        final SAMFileHeader samHeader = new SAMFileHeader();
-        Assert.assertEquals(SAMRecord.resolveNameFromIndex(
-                SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, samHeader), SAMRecord.NO_ALIGNMENT_REFERENCE_NAME);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void testResolveNameNullHeader() {
-        SAMRecord.resolveNameFromIndex(1, null);
-    }
-
-    @Test
-    public void testReverseComplement() {
-        final SAMRecord rec = createTestSamRec();
-
-        rec.reverseComplement(Arrays.asList("Y1"), Arrays.asList("X1", "X2", "X3", "X4", "X5"), false);
-        Assert.assertEquals(rec.getReadString(), "GTGTGTGTGT");
-        Assert.assertEquals(rec.getBaseQualityString(), "IIIIIHHHHH");
-        Assert.assertEquals(rec.getByteArrayAttribute("X1"), new byte[] {5,4,3,2,1});
-        Assert.assertEquals(rec.getSignedShortArrayAttribute("X2"), new short[] {5,4,3,2,1});
-        Assert.assertEquals(rec.getSignedIntArrayAttribute("X3"), new int[] {5,4,3,2,1});
-        Assert.assertEquals(rec.getFloatArrayAttribute("X4"), new float[] {5.0f,4.0f,3.0f,2.0f,1.0f});
-        Assert.assertEquals(rec.getStringAttribute("Y1"), "GTTTTCTTTT");
-    }
-
-    /**
-     * Note that since strings are immutable the Y1 attribute, which is a String, is not reversed in the original even
-     * if an in-place reverse complement occurred. The bases and qualities are byte[] so they are reversed if in-place
-     * is true.
-     */
-    @DataProvider
-    public Object [][] reverseComplementData() {
-        return new Object[][]{
-                {false, "ACACACACAC", "HHHHHIIIII", "AAAAGAAAAC", new byte[] {1,2,3,4,5}, new short[] {1,2,3,4,5}, new int[] {1,2,3,4,5}, new float[] {1,2,3,4,5}},
-                {true, "GTGTGTGTGT", "IIIIIHHHHH", "AAAAGAAAAC", new byte[] {5,4,3,2,1}, new short[] {5,4,3,2,1}, new int[] {5,4,3,2,1}, new float[] {5,4,3,2,1}},
-        };
-    }
-
-    @Test(dataProvider = "reverseComplementData")
-    public void testSafeReverseComplement(boolean inplace, String bases, String quals, String y1, byte[] x1, short[] x2, int[] x3, float[] x4) throws CloneNotSupportedException {
-        final SAMRecord original = createTestSamRec();
-        final SAMRecord cloneOfOriginal = (SAMRecord) original.clone();
-        //Runs a copy (rather than in-place) reverseComplement
-        cloneOfOriginal.reverseComplement(Arrays.asList("Y1"), Arrays.asList("X1", "X2", "X3", "X4", "X5"), inplace);
-
-        Assert.assertEquals(original.getReadString(), bases);
-        Assert.assertEquals(original.getBaseQualityString(), quals);
-        Assert.assertEquals(original.getByteArrayAttribute("X1"), x1);
-        Assert.assertEquals(original.getSignedShortArrayAttribute("X2"), x2);
-        Assert.assertEquals(original.getSignedIntArrayAttribute("X3"), x3);
-        Assert.assertEquals(original.getFloatArrayAttribute("X4"), x4);
-        Assert.assertEquals(original.getStringAttribute("Y1"), y1);
-
-        Assert.assertEquals(cloneOfOriginal.getReadString(), "GTGTGTGTGT");
-        Assert.assertEquals(cloneOfOriginal.getBaseQualityString(), "IIIIIHHHHH");
-        Assert.assertEquals(cloneOfOriginal.getByteArrayAttribute("X1"), new byte[] {5,4,3,2,1});
-        Assert.assertEquals(cloneOfOriginal.getSignedShortArrayAttribute("X2"), new short[] {5,4,3,2,1});
-        Assert.assertEquals(cloneOfOriginal.getSignedIntArrayAttribute("X3"), new int[] {5,4,3,2,1});
-        Assert.assertEquals(cloneOfOriginal.getFloatArrayAttribute("X4"), new float[] {5.0f,4.0f,3.0f,2.0f,1.0f});
-        Assert.assertEquals(cloneOfOriginal.getStringAttribute("Y1"), "GTTTTCTTTT");
-
-    }
-
-    public SAMRecord createTestSamRec() {
-        final SAMFileHeader header = new SAMFileHeader();
-        final SAMRecord rec = new SAMRecord(header);
-        rec.setReadString("ACACACACAC");
-        rec.setBaseQualityString("HHHHHIIIII");
-        rec.setAttribute("X1", new byte[] {1,2,3,4,5});
-        rec.setAttribute("X2", new short[] {1,2,3,4,5});
-        rec.setAttribute("X3", new int[] {1,2,3,4,5});
-        rec.setAttribute("X4", new float[] {1.0f,2.0f,3.0f,4.0f,5.0f});
-        rec.setAttribute("Y1", "AAAAGAAAAC");
-
-        return(rec);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMSequenceDictionaryCodecTest.java b/src/test/java/htsjdk/samtools/SAMSequenceDictionaryCodecTest.java
deleted file mode 100644
index 32de1cd..0000000
--- a/src/test/java/htsjdk/samtools/SAMSequenceDictionaryCodecTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 20016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.LineReader;
-import htsjdk.samtools.util.StringLineReader;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import javax.sound.sampled.Line;
-import java.io.BufferedWriter;
-import java.io.StringWriter;
-import java.util.List;
-import java.util.Random;
-
-import static org.testng.Assert.*;
-
-/**
- * @author Pavel_Silin at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-public class SAMSequenceDictionaryCodecTest {
-
-    private static final Random random = new Random();
-    private SAMSequenceDictionary dictionary;
-    private StringWriter writer;
-    private SAMSequenceDictionaryCodec codec;
-    private BufferedWriter bufferedWriter;
-
-    @BeforeMethod
-    public void setUp() throws Exception {
-        String[] seqs = new String[]{"chr1", "chr2", "chr12", "chr16", "chrX"};
-        dictionary = new SAMSequenceDictionary();
-        for (String seq : seqs) {
-            dictionary.addSequence(new SAMSequenceRecord(seq, random.nextInt(10_000_000)));
-        }
-        writer = new StringWriter();
-        bufferedWriter = new BufferedWriter(writer);
-        codec = new SAMSequenceDictionaryCodec(bufferedWriter);
-    }
-
-    @Test
-    public void testEncodeDecodeDictionary() throws Exception {
-        LineReader readerOne = null;
-        LineReader readerTwo = null;
-        try {
-            codec.encode(dictionary);
-            bufferedWriter.close();
-            readerOne = new StringLineReader(writer.toString());
-            SAMSequenceDictionary actual = codec.decode(readerOne, null);
-            assertEquals(actual, dictionary);
-
-            readerTwo = new StringLineReader(writer.toString());
-
-            String line = readerTwo.readLine();
-            assertTrue(line.startsWith("@HD"));
-
-            line = readerTwo.readLine();
-            while (line != null) {
-                assertTrue(line.startsWith("@SQ"));
-                line = readerTwo.readLine();
-            }
-        } finally {
-            assert readerOne != null;
-            assert readerTwo != null;
-            readerOne.close();
-            readerTwo.close();
-        }
-    }
-
-    @Test
-    public void testEncodeDecodeListOfSeqs() throws Exception {
-        LineReader readerOne = null;
-        LineReader readerTwo = null;
-
-        try {
-            List<SAMSequenceRecord> sequences = dictionary.getSequences();
-            codec.encodeHeaderLine(false);
-            sequences.forEach(codec::encodeSequenceRecord);
-            bufferedWriter.close();
-            readerOne = new StringLineReader(writer.toString());
-            SAMSequenceDictionary actual = codec.decode(readerOne, null);
-            assertEquals(actual, dictionary);
-            readerTwo = new StringLineReader(writer.toString());
-
-            String line = readerTwo.readLine();
-            assertTrue(line.startsWith("@HD"));
-
-            line = readerTwo.readLine();
-            while (line != null) {
-                assertTrue(line.startsWith("@SQ"));
-                line = readerTwo.readLine();
-            }
-        } finally {
-            assert readerOne != null;
-            assert readerTwo != null;
-            readerOne.close();
-            readerTwo.close();
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMSequenceDictionaryTest.java b/src/test/java/htsjdk/samtools/SAMSequenceDictionaryTest.java
deleted file mode 100644
index 0b1a507..0000000
--- a/src/test/java/htsjdk/samtools/SAMSequenceDictionaryTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * The MIT License
- *
- * Date: 2015
- * Author: Pierre Lindenbaum @yokofakun
- *     Institut du Thorax , Nantes, France
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-public class SAMSequenceDictionaryTest {
-    @Test
-    public void testAliases() {
-        final SAMSequenceRecord ssr1 = new SAMSequenceRecord("1", 1);
-        final SAMSequenceRecord ssr2 = new SAMSequenceRecord("2", 1);
-
-        final SAMSequenceDictionary dict = new SAMSequenceDictionary(
-                Arrays.asList(ssr1, ssr2));
-        Assert.assertEquals(dict.size(), 2);
-        dict.addSequenceAlias("1", "chr1");
-        dict.addSequenceAlias("1", "01");
-        dict.addSequenceAlias("1", "1");
-        dict.addSequenceAlias("01", "chr01");
-        Assert.assertEquals(dict.size(), 2);
-        Assert.assertNotNull(dict.getSequence("chr1"));
-        Assert.assertNull(dict.getSequence("chr2"));
-    }
-
-    /**
-     * should be saved as XML
-     * 
-     * <pre>
-     * <?xml version="1.0" encoding="UTF-8" standalone="yes"?><References><Reference assembly="as" md5="68b329da9893e34099c7d8ad5cb9c940" index="0" length="1" species="sp">1</Reference><Reference index="1" length="1">2</Reference></References>
-     * </pre>
-     * 
-     * @throws JAXBException
-     */
-    @Test
-    public void testXmlSeralization() throws JAXBException {
-        // create dict
-        final SAMSequenceRecord ssr1 = new SAMSequenceRecord("1", 1);
-        ssr1.setMd5("68b329da9893e34099c7d8ad5cb9c940");
-        ssr1.setAssembly("as");
-        ssr1.setSpecies("sp");
-        final SAMSequenceRecord ssr2 = new SAMSequenceRecord("2", 1);
-        final StringWriter xmlWriter = new StringWriter();
-        final SAMSequenceDictionary dict1 = new SAMSequenceDictionary(
-                Arrays.asList(ssr1, ssr2));
-        // create jaxb context
-        JAXBContext jaxbContext = JAXBContext
-                .newInstance(SAMSequenceDictionary.class);
-        // save to XML
-        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
-        jaxbMarshaller.marshal(dict1, xmlWriter);
-        // reload XML
-        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
-        final SAMSequenceDictionary dict2 = (SAMSequenceDictionary) jaxbUnmarshaller
-                .unmarshal(new StringReader(xmlWriter.toString()));
-        Assert.assertEquals(dict1, dict2);
-    }
-
-    @DataProvider(name="testMergeDictionariesData")
-    public Object[][] testMergeDictionariesData(){
-
-        final SAMSequenceRecord rec1, rec2, rec3, rec4, rec5;
-        rec1 = new SAMSequenceRecord("chr1", 100);
-        rec2 = new SAMSequenceRecord("chr1", 101);
-        rec2.setMd5("dummy");
-        rec3 = new SAMSequenceRecord("chr1", SAMSequenceRecord.UNKNOWN_SEQUENCE_LENGTH);
-        rec3.setMd5("dummy2");
-
-        rec4 = new SAMSequenceRecord("chr1", 100);
-        rec4.setAttribute(SAMSequenceRecord.URI_TAG,"file://some/file/name.ok");
-
-        rec5 = new SAMSequenceRecord("chr2", 200);
-        rec4.setAttribute(SAMSequenceRecord.URI_TAG,"file://some/file/name.ok");
-
-        return new Object[][]{
-                new Object[]{rec1, rec1, true},
-                new Object[]{rec2, rec2, true},
-                new Object[]{rec3, rec3, true},
-                new Object[]{rec4, rec4, true},
-                new Object[]{rec1, rec2, false},//since 100 != 101 in Length
-                new Object[]{rec1, rec3, true},
-                new Object[]{rec1, rec4, true},
-                new Object[]{rec2, rec3, false}, // since MD5 is not equal
-                new Object[]{rec2, rec4, false}, //length differs
-                new Object[]{rec3, rec4, true},
-                new Object[]{rec4, rec5, false}, // different name
-        };
-    }
-
-    @Test(dataProvider = "testMergeDictionariesData", expectedExceptions = IllegalArgumentException.class)
-    public void testMergeDictionaries(final SAMSequenceRecord rec1, final SAMSequenceRecord rec2, boolean canMerge) throws Exception {
-        final SAMSequenceDictionary dict1 = new SAMSequenceDictionary(Collections.singletonList(rec1));
-        final SAMSequenceDictionary dict2 = new SAMSequenceDictionary(Collections.singletonList(rec2));
-
-        try {
-            SAMSequenceDictionary.mergeDictionaries(dict1, dict2, SAMSequenceDictionary.DEFAULT_DICTIONARY_EQUAL_TAG);
-        } catch (final IllegalArgumentException e) {
-            if (canMerge) {
-                throw new Exception("Expected to be able to merge dictionaries, but wasn't:" , e);
-            } else {
-                throw e;
-            }
-        }
-        if (canMerge){
-            throw new IllegalArgumentException("Expected to be able to merge dictionaries, and was indeed able to do so.");
-        } else {
-            throw new Exception("Expected to not be able to merge dictionaries, but was able");
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMTextReaderTest.java b/src/test/java/htsjdk/samtools/SAMTextReaderTest.java
deleted file mode 100644
index c80924b..0000000
--- a/src/test/java/htsjdk/samtools/SAMTextReaderTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-public class SAMTextReaderTest {
-    // Simple input, spot check that parsed correctly, and make sure nothing blows up.
-    @Test
-    public void testBasic() throws Exception {
-        final String seq1 = "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG";
-        final String seq2 = "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA";
-        final String qual1 = "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<";
-        final String qual2 = "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<";
-        final String fileFormatVersion = "1.0";
-        final String sequence = "chr20";
-        final int sequenceLength = 62435964;
-        final String charTag = "XC";
-        final char charValue = 'q';
-        final String intTag = "XI";
-        final int intValue = 12345;
-        final String floatTag = "XF";
-        final float floatValue = 1.2345f;
-        final String stringTag = "XS";
-        final String stringValue = "Hi,Mom!";
-        final String samExample = "@HD\tVN:" + fileFormatVersion + "\t" + charTag + ":" + charValue + "\n" +
-                "@SQ\tSN:" + sequence + "\tAS:HG18\tLN:" + sequenceLength + "\t" + intTag + ":" + intValue + "\n" +
-                "@RG\tID:L1\tPU:SC_1_10\tLB:SC_1\tSM:NA12891" + "\t" + floatTag + ":" + floatValue + "\n" +
-                "@RG\tID:L2\tPU:SC_2_12\tLB:SC_2\tSM:NA12891\n" +
-                "@PG\tID:0\tVN:1.0\tCL:yo baby\t" + stringTag + ":" + stringValue + "\n" +
-                "@PG\tID:2\tVN:1.1\tCL:whassup? ? ? ?\n" +
-                "read_28833_29006_6945\t99\tchr20\t28833\t20\t10M1D25M\t=\t28993\t195\t" +
-                seq1.toLowerCase() + "\t" + qual1 + "\t" +
-                "MF:i:130\tNm:i:1\tH0:i:0\tH1:i:0\tRG:Z:L1\n" +
-                "read_28701_28881_323b\t147\tchr20\t28834\t30\t35M\t=\t28701\t-168\t" +
-                seq2 + "\t" + qual2 + "\t" +
-                "MF:i:18\tNm:i:0\tH0:i:1\tH1:i:0\tRG:Z:L2\n";
-
-        final String[] samResults =
-                {"read_28833_29006_6945\t99\tchr20\t28833\t20\t10M1D25M\t=\t28993\t195\t" + seq1 + "\t" + qual1 +
-                        "\tH0:i:0\tH1:i:0\tMF:i:130\tRG:Z:L1\tNm:i:1\n",
-                        "read_28701_28881_323b\t147\tchr20\t28834\t30\t35M\t=\t28701\t-168\t" + seq2 + "\t" + qual2 +
-                                "\tH0:i:1\tH1:i:0\tMF:i:18\tRG:Z:L2\tNm:i:0\n"
-                };
-
-        final SamReader samReader = createSamFileReader(samExample);
-        final SAMFileHeader fileHeader = samReader.getFileHeader();
-
-        Assert.assertEquals(fileHeader.getVersion(), fileFormatVersion);
-        Assert.assertEquals(fileHeader.getAttribute(charTag), Character.toString(charValue));
-        final SAMSequenceRecord sequenceRecord = fileHeader.getSequence(sequence);
-        Assert.assertNotNull(sequenceRecord);
-        Assert.assertEquals(sequenceRecord.getSequenceLength(), sequenceLength);
-        Assert.assertEquals(sequenceRecord.getAttribute(intTag), Integer.toString(intValue));
-        Assert.assertEquals(fileHeader.getReadGroup("L1").getAttribute(floatTag), Float.toString(floatValue));
-        Assert.assertEquals(fileHeader.getProgramRecord("0").getAttribute(stringTag), stringValue);
-
-        final CloseableIterator<SAMRecord> iterator = samReader.iterator();
-        int i = 0;
-        while (iterator.hasNext()) {
-            final SAMRecord rec = iterator.next();
-            Assert.assertEquals(rec.getSAMString(), samResults[i++]);
-        }
-        iterator.close();
-        iterator.close();
-        samReader.close();
-    }
-
-    private SamReader createSamFileReader(final String samExample) {
-        final ByteArrayInputStream inputStream = new ByteArrayInputStream(samExample.getBytes());
-        return SamReaderFactory.makeDefault().open(SamInputResource.of(inputStream));
-    }
-
-    @Test
-    public void testUnmapped() {
-        final String alignmentFromKris =
-                "0\t4\t*\t0\t0\t*\t*\t0\t0\tGCCTCGTAGTGCGCCATCAGTCTATCGATGTCGTTG\t44\"44===;;;;;;;;;::::88844\"4\"\"\"\"\"\"\"\"\n";
-        final SamReader samReader = createSamFileReader(alignmentFromKris);
-        final CloseableIterator<SAMRecord> iterator = samReader.iterator();
-        while (iterator.hasNext()) {
-            iterator.next();
-        }
-        iterator.close();
-        CloserUtil.close(samReader);
-    }
-
-    /**
-     * Colon separates fields of a text tag, but colon is also valid in a tag value, so assert that works properly.
-     */
-    @Test
-    public void testTagWithColon() {
-        // Create a SAMRecord with a String tag containing a colon
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-        samBuilder.addUnmappedFragment("Hi,Mom!");
-        final SAMRecord rec = samBuilder.iterator().next();
-        final String valueWithColons = "A:B::C:::";
-        rec.setAttribute(SAMTag.CQ.name(), valueWithColons);
-        // Write the record as SAM Text
-        final ByteArrayOutputStream os = new ByteArrayOutputStream();
-        final SAMFileWriter textWriter = new SAMFileWriterFactory().makeSAMWriter(samBuilder.getHeader(),
-                true, os);
-        textWriter.addAlignment(rec);
-        textWriter.close();
-
-        final SamReader reader = SamReaderFactory.makeDefault().open(SamInputResource.of(new ByteArrayInputStream(os.toByteArray())));
-        final SAMRecord recFromText = reader.iterator().next();
-        Assert.assertEquals(recFromText.getAttribute(SAMTag.CQ.name()), valueWithColons);
-        CloserUtil.close(reader);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMTextWriterTest.java b/src/test/java/htsjdk/samtools/SAMTextWriterTest.java
deleted file mode 100644
index 123ab6b..0000000
--- a/src/test/java/htsjdk/samtools/SAMTextWriterTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-public class SAMTextWriterTest {
-
-    private SAMRecordSetBuilder getSAMReader(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
-        final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
-        ret.addPair("readB", 20, 200, 300);
-        ret.addPair("readA", 20, 100, 150);
-        ret.addFrag("readC", 20, 140, true);
-        ret.addFrag("readD", 20, 140, false);
-        return ret;
-    }
-
-    @Test
-    public void testNullHeader() throws Exception {
-        final SAMRecordSetBuilder recordSetBuilder = getSAMReader(true, SAMFileHeader.SortOrder.coordinate);
-        for (final SAMRecord rec : recordSetBuilder.getRecords()) {
-            rec.setHeader(null);
-        }
-        doTest(recordSetBuilder);
-    }
-
-    @Test
-    public void testBasic() throws Exception {
-        doTest(SamFlagField.DECIMAL);
-    }
-
-    @Test
-    public void testBasicHexFlag() throws Exception {
-        doTest(SamFlagField.HEXADECIMAL);
-    }
-
-    @Test
-    public void testBasicOctalFlag() throws Exception {
-        doTest(SamFlagField.OCTAL);
-    }
-
-    @Test
-    public void testBasicStringFlag() throws Exception {
-        doTest(SamFlagField.STRING);
-    }
-
-    private void doTest(final SAMRecordSetBuilder recordSetBuilder) throws Exception {
-        doTest(recordSetBuilder, SamFlagField.DECIMAL);
-    }
-
-    private void doTest(final SamFlagField samFlagField) throws Exception {
-        doTest(getSAMReader(true, SAMFileHeader.SortOrder.coordinate), samFlagField);
-    }
-
-    private void doTest(final SAMRecordSetBuilder recordSetBuilder, final SamFlagField samFlagField) throws Exception {
-        SamReader inputSAM = recordSetBuilder.getSamReader();
-        final File samFile = File.createTempFile("tmp.", ".sam");
-        samFile.deleteOnExit();
-        final Map<String, Object> tagMap = new HashMap<String, Object>();
-        tagMap.put("XC", new Character('q'));
-        tagMap.put("XI", 12345);
-        tagMap.put("XF", 1.2345f);
-        tagMap.put("XS", "Hi,Mom!");
-        for (final Map.Entry<String, Object> entry : tagMap.entrySet()) {
-            inputSAM.getFileHeader().setAttribute(entry.getKey(), entry.getValue().toString());
-        }
-        final SAMFileWriter samWriter = new SAMFileWriterFactory().setSamFlagFieldOutput(samFlagField).makeSAMWriter(inputSAM.getFileHeader(), false, samFile);
-        for (final SAMRecord samRecord : inputSAM) {
-            samWriter.addAlignment(samRecord);
-        }
-        samWriter.close();
-
-        // Read it back in and confirm that it matches the input
-        inputSAM = recordSetBuilder.getSamReader();
-        // Stuff in the attributes again since this has been created again.
-        for (final Map.Entry<String, Object> entry : tagMap.entrySet()) {
-            inputSAM.getFileHeader().setAttribute(entry.getKey(), entry.getValue().toString());
-        }
-
-        final SamReader newSAM = SamReaderFactory.makeDefault().open(samFile);
-        Assert.assertEquals(newSAM.getFileHeader(), inputSAM.getFileHeader());
-        final Iterator<SAMRecord> inputIt = inputSAM.iterator();
-        final Iterator<SAMRecord> newSAMIt = newSAM.iterator();
-        while (inputIt.hasNext()) {
-            Assert.assertTrue(newSAMIt.hasNext());
-            final SAMRecord inputSAMRecord = inputIt.next();
-            final SAMRecord newSAMRecord = newSAMIt.next();
-
-            // Force reference index attributes to be populated
-            inputSAMRecord.getReferenceIndex();
-            newSAMRecord.getReferenceIndex();
-            inputSAMRecord.getMateReferenceIndex();
-            newSAMRecord.getMateReferenceIndex();
-
-            // Force these to be equal
-            newSAMRecord.setIndexingBin(inputSAMRecord.getIndexingBin());
-
-            Assert.assertEquals(newSAMRecord, inputSAMRecord);
-        }
-        Assert.assertFalse(newSAMIt.hasNext());
-        inputSAM.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SAMUtilsTest.java b/src/test/java/htsjdk/samtools/SAMUtilsTest.java
deleted file mode 100644
index 3be7e39..0000000
--- a/src/test/java/htsjdk/samtools/SAMUtilsTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.List;
-
-public class SAMUtilsTest {
-    @Test
-    public void testCompareMapqs() {
-        Assert.assertEquals(SAMUtils.compareMapqs(0, 0), 0);
-        Assert.assertEquals(SAMUtils.compareMapqs(255, 255), 0);
-        Assert.assertEquals(SAMUtils.compareMapqs(1, 1), 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(0, 255) < 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(0, 1) < 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(255, 1) < 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(1, 2) < 0);
-
-        Assert.assertTrue(SAMUtils.compareMapqs(255, 0) > 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(1, 0) > 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(1, 255) > 0);
-        Assert.assertTrue(SAMUtils.compareMapqs(2, 1) > 0);
-    }
-
-    @Test
-    public void testSimpleClippingOfRecord() {
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setCigar(TextCigarCodec.decode("10M"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(6); // should overlap 5M
-        record.setReadBases("AAAAAAAAAA".getBytes());
-
-        final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record);
-        Assert.assertEquals(numToClip, 5);
-
-        SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK
-
-        Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("5M5S")));
-    }
-
-    @Test
-    public void testClippingOfRecordWithSoftClipBasesAtTheEnd() {
-        /**
-         * Tests that if we need to clip a read with soft-clipping at the end, it does the right thing.
-         */
-
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setCigar(TextCigarCodec.decode("5M5S"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(5); // should overlap 1M5S
-        record.setReadBases("AAAAAAAAAA".getBytes());
-
-        final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record);
-        Assert.assertEquals(numToClip, 1);
-
-        SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK
-
-        Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("4M6S")));
-    }
-
-    @Test
-    public void testClippingOfRecordWithInsertion() {
-        /**
-         * Tests that if we need to clip a read with an insertion that overlaps
-         */
-
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setCigar(TextCigarCodec.decode("5M1I5M"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(5); // should overlap the 1M1I5M
-        record.setReadBases("AAAAAAAAAAA".getBytes());
-
-
-        final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record);
-        Assert.assertEquals(numToClip, 7);
-
-        SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK
-
-        Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("4M7S")));
-
-    }
-
-    @Test
-    public void testClippingOfRecordWithDeletion() {
-        /**
-         * Tests that if we need to clip a read with an deletion that overlaps
-         */
-
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setCigar(TextCigarCodec.decode("5M1D5M"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(5); // should overlap the 1M1D5M
-        record.setReadBases("AAAAAAAAAA".getBytes());
-
-        final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record);
-        Assert.assertEquals(numToClip, 6);
-
-        SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK
-        Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("4M6S")));
-
-    }
-
-    @Test
-    public void testClippingOfRecordWithMateAtSamePosition() {
-        /**
-         * Tests that we clip the first end of a pair if we have perfect overlap of a pair
-         */
-
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setFirstOfPairFlag(true);
-        record.setCigar(TextCigarCodec.decode("10M"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(1);
-        record.setReadBases("AAAAAAAAAA".getBytes());
-
-        Assert.assertEquals(SAMUtils.getNumOverlappingAlignedBasesToClip(record), 0);
-
-        // now make it the second end
-        record.setFirstOfPairFlag(false);
-        record.setSecondOfPairFlag(true);
-        Assert.assertEquals(SAMUtils.getNumOverlappingAlignedBasesToClip(record), 10);
-    }
-
-    @Test
-    public void testOtherCanonicalAlignments() {
-        // setup the record
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 1000));
-        header.addSequence(new SAMSequenceRecord("2", 1000));
-        final SAMRecord record = new SAMRecord(header);
-        record.setReadPairedFlag(true);
-        record.setFirstOfPairFlag(true);
-        record.setCigar(TextCigarCodec.decode("10M"));
-        record.setReferenceIndex(0);
-        record.setAlignmentStart(1);
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(1);
-        record.setReadPairedFlag(true);
-        record.setSupplementaryAlignmentFlag(true);//spec says first 'SA' record will be the primary record
-
-        record.setMateReferenceIndex(0);
-        record.setMateAlignmentStart(100);
-        record.setInferredInsertSize(99);
-
-        record.setReadBases("AAAAAAAAAA".getBytes());
-        record.setBaseQualities("##########".getBytes());
-        // check no alignments if no SA tag */
-        Assert.assertEquals(SAMUtils.getOtherCanonicalAlignments(record).size(),0);
-
-
-        record.setAttribute(SAMTagUtil.getSingleton().SA,
-                "2,500,+,3S2=1X2=2S,60,1;" +
-                "1,191,-,8M2S,60,*;");
-
-        // extract suppl alignments
-        final List<SAMRecord> suppl = SAMUtils.getOtherCanonicalAlignments(record);
-        Assert.assertNotNull(suppl);
-        Assert.assertEquals(suppl.size(), 2);
-
-        for(final SAMRecord other: suppl) {
-            Assert.assertFalse(other.getReadUnmappedFlag());
-            Assert.assertTrue(other.getReadPairedFlag());
-            Assert.assertFalse(other.getMateUnmappedFlag());
-            Assert.assertEquals(other.getMateAlignmentStart(),record.getMateAlignmentStart());
-            Assert.assertEquals(other.getMateReferenceName(),record.getMateReferenceName());
-
-            Assert.assertEquals(other.getReadName(),record.getReadName());
-            if( other.getReadNegativeStrandFlag()==record.getReadNegativeStrandFlag()) {
-                Assert.assertEquals(other.getReadString(),record.getReadString());
-                Assert.assertEquals(other.getBaseQualityString(),record.getBaseQualityString());
-                }
-        }
-
-        SAMRecord other = suppl.get(0);
-        Assert.assertFalse(other.getSupplementaryAlignmentFlag());//1st of suppl and 'record' is supplementary
-        Assert.assertEquals(other.getReferenceName(),"2");
-        Assert.assertEquals(other.getAlignmentStart(),500);
-        Assert.assertFalse(other.getReadNegativeStrandFlag());
-        Assert.assertEquals(other.getMappingQuality(), 60);
-        Assert.assertEquals(other.getAttribute(SAMTagUtil.getSingleton().NM),1);
-        Assert.assertEquals(other.getCigarString(),"3S2=1X2=2S");
-        Assert.assertEquals(other.getInferredInsertSize(),0);
-
-
-        other = suppl.get(1);
-        Assert.assertTrue(other.getSupplementaryAlignmentFlag());
-        Assert.assertEquals(other.getReferenceName(),"1");
-        Assert.assertEquals(other.getAlignmentStart(),191);
-        Assert.assertTrue(other.getReadNegativeStrandFlag());
-        Assert.assertEquals(other.getMappingQuality(), 60);
-        Assert.assertEquals(other.getAttribute(SAMTagUtil.getSingleton().NM),null);
-        Assert.assertEquals(other.getCigarString(),"8M2S");
-        Assert.assertEquals(other.getInferredInsertSize(),-91);//100(mate) - 191(other)
-
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SamFileHeaderMergerTest.java b/src/test/java/htsjdk/samtools/SamFileHeaderMergerTest.java
deleted file mode 100644
index 6e4fd75..0000000
--- a/src/test/java/htsjdk/samtools/SamFileHeaderMergerTest.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/**
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- **/
-
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.samtools.util.SequenceUtil;
-import htsjdk.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-
-
-/**
- * @author aaron
- * @version 1.0
- * @date May 20, 2009
- * <p/>
- * Class SamFileHeaderMergerTest
- * <p/>
- * Tests the ability of the SamFileHeaderMerger class to merge sequence dictionaries.
- */
-public class SamFileHeaderMergerTest {
-
-    private static File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    /** tests that if we've set the merging to false, we get a SAMException for bam's with different dictionaries. */
-    @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
-    public void testMergedException() {
-        File INPUT[] = {new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/Chromosome1to10.bam"),
-                new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/Chromosome5to9.bam")};
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        for (final File inFile : INPUT) {
-            IOUtil.assertFileIsReadable(inFile);
-            headers.add(SamReaderFactory.makeDefault().getFileHeader(inFile));
-        }
-        new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headers, false);
-    }
-
-    /** Tests that we can successfully merge two files with */
-    @Test
-    public void testMerging() {
-        File INPUT[] = {new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/Chromosome1to10.bam"),
-                new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/Chromosome5to9.bam")};
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        for (final File inFile : INPUT) {
-            IOUtil.assertFileIsReadable(inFile);
-            // We are now checking for zero-length reads, so suppress complaint about that.
-            final SamReader in = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(inFile);
-
-            readers.add(in);
-            headers.add(in.getFileHeader());
-        }
-        final MergingSamRecordIterator iterator;
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headers, true);
-        iterator = new MergingSamRecordIterator(headerMerger, readers, false);
-        headerMerger.getMergedHeader();
-
-        // count the total reads, and record read counts for each sequence
-        Map<Integer, Integer> seqCounts = new HashMap<Integer, Integer>();
-        int totalCount = 0;
-
-        while (iterator.hasNext()) {
-            SAMRecord r = iterator.next();
-            if (seqCounts.containsKey(r.getReferenceIndex())) {
-                seqCounts.put(r.getReferenceIndex(), seqCounts.get(r.getReferenceIndex()) + 1);
-            } else {
-                seqCounts.put(r.getReferenceIndex(), 1);
-            }
-            ++totalCount;
-        }
-        assertEquals(totalCount, 1500);
-        for (Integer i : seqCounts.keySet()) {
-            if (i < 4 || i > 8) {
-                // seqeunce 5 - 9 should have 200 reads (indices 4 - 8)
-                assertEquals(seqCounts.get(i).intValue(), 100);
-            } else {
-                // the others should have 100
-                assertEquals(seqCounts.get(i).intValue(), 200);
-            }
-        }
-        CloserUtil.close(readers);
-    }
-
-    private static final String sq1 = "@SQ\tSN:chr1\tLN:1000\n";
-    private static final String sq2 = "@SQ\tSN:chr2\tLN:1000\n";
-    private static final String sq3 = "@SQ\tSN:chr3\tLN:1000\n";
-    private static final String sq4 = "@SQ\tSN:chr4\tLN:1000\n";
-    private static final String sq5 = "@SQ\tSN:chr5\tLN:1000\n";
-
-    @Test
-    public void testSequenceDictionaryMerge() {
-        final String sd1 = sq1 + sq2 + sq5;
-        final String sd2 = sq2 + sq3 + sq4;
-        SamReader reader1 = SamReaderFactory.makeDefault().open(SamInputResource.of(new ByteArrayInputStream(StringUtil.stringToBytes(sd1))));
-        SamReader reader2 = SamReaderFactory.makeDefault().open(SamInputResource.of(new ByteArrayInputStream(StringUtil.stringToBytes(sd2))));
-        final List<SAMFileHeader> inputHeaders = Arrays.asList(reader1.getFileHeader(), reader2.getFileHeader());
-        SamFileHeaderMerger merger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, inputHeaders, true);
-        final SAMFileHeader mergedHeader = merger.getMergedHeader();
-        for (final SAMFileHeader inputHeader : inputHeaders) {
-            int prevTargetIndex = -1;
-            for (final SAMSequenceRecord sequenceRecord : inputHeader.getSequenceDictionary().getSequences()) {
-                final int targetIndex = mergedHeader.getSequenceIndex(sequenceRecord.getSequenceName());
-                Assert.assertNotSame(targetIndex, -1);
-                Assert.assertTrue(prevTargetIndex < targetIndex);
-                prevTargetIndex = targetIndex;
-            }
-        }
-        CloserUtil.close(reader1);
-        CloserUtil.close(reader2);
-    }
-
-    @Test(dataProvider = "data")
-    public void testProgramGroupAndReadGroupMerge(File inputFiles[], File expectedOutputFile) throws IOException {
-
-        BufferedReader reader = new BufferedReader(new FileReader(expectedOutputFile));
-
-        String line;
-        String expected_output = "";
-        while ((line = reader.readLine()) != null) {
-            expected_output += line + "\n";
-        }
-
-        final List<SamReader> readers = new ArrayList<SamReader>();
-        final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
-        for (final File inFile : inputFiles) {
-            IOUtil.assertFileIsReadable(inFile);
-
-            // We are now checking for zero-length reads, so suppress complaint about that.
-            final SamReader in = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(inFile);
-            readers.add(in);
-            headers.add(in.getFileHeader());
-        }
-        final MergingSamRecordIterator iterator;
-
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, true);
-        iterator = new MergingSamRecordIterator(headerMerger, readers, false);
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        SAMFileWriter writer = new SAMFileWriterFactory().makeSAMWriter(headerMerger.getMergedHeader(), true, baos);
-        while (iterator.hasNext()) {
-            writer.addAlignment(iterator.next());
-        }
-        writer.close();
-
-        String actual_output = StringUtil.bytesToString(baos.toByteArray());
-
-        List<String> actual = Arrays.asList(actual_output.split("\\n"));
-        List<String> expected = Arrays.asList(expected_output.split("\\n"));
-        for (int i = 0; i < expected.size(); i++) {
-            if (expected.get(i).startsWith("@")) {
-                Assert.assertTrue(headersEquivalent(actual.get(i), expected.get(i)));
-            } else {
-                List<String> expectedSamParts = Arrays.asList(expected.get(i).split("\\s*"));
-                List<String> actualSamParts = Arrays.asList(actual.get(i).split("\\s*"));
-                for (String exp : expectedSamParts) {
-                    Assert.assertTrue(actualSamParts.contains(exp));
-                }
-                for (String act : actualSamParts) {
-                    Assert.assertTrue(expectedSamParts.contains(act));
-                }
-            }
-        }
-        CloserUtil.close(readers);
-    }
-
-    private static final boolean headersEquivalent(String a, String b) {
-        if (a.length() != b.length()) return false;
-        List<String> remaining = new LinkedList<String>(Arrays.asList(a.split("\\t")));
-        for (final String item : b.split("\\t")) {
-            if (!remaining.remove(item)) return false;
-        }
-        return remaining.isEmpty(); 
-    }
-
-    @DataProvider(name = "data")
-    private Object[][] getProgramGroupAndReadGroupMergeData() {
-
-        return new Object[][]{
-                {
-
-                        new File[]{
-                                new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case1/chr11sub_file1.sam"),
-                                new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case1/chr11sub_file2.sam")},
-                        new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case1/expected_output.sam")
-                }, {
-                new File[]{
-                        new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case2/chr11sub_file1.sam"),
-                        new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case2/chr11sub_file2.sam"),
-                        new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case2/chr11sub_file3.sam"),
-                        new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case2/chr11sub_file4.sam")},
-                new File(TEST_DATA_DIR, "SamFileHeaderMergerTest/case2/expected_output.sam")
-        }
-        };
-    }
-
-    @Test(expectedExceptions = {SAMException.class})
-    public void testUnmergeableSequenceDictionary() {
-        final String sd1 = sq1 + sq2 + sq5;
-        final String sd2 = sq2 + sq3 + sq4 + sq1;
-        final SamReader reader1 = SamReaderFactory.makeDefault().open(SamInputResource.of(new ByteArrayInputStream(StringUtil.stringToBytes(sd1))));
-        final SamReader reader2 = SamReaderFactory.makeDefault().open(SamInputResource.of(new ByteArrayInputStream(StringUtil.stringToBytes(sd2))));
-        final List<SAMFileHeader> inputHeaders = Arrays.asList(reader1.getFileHeader(), reader2.getFileHeader());
-        new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, inputHeaders, true);
-        CloserUtil.close(reader1);
-        CloserUtil.close(reader2);
-    }
-
-    @DataProvider(name = "fourDigitBase36StrPositiveData")
-    public Object[][] positiveFourDigitBase36StrData() {
-        return new Object[][]{
-                {0, "0"},
-                {15, "F"},
-                {36, "10"},
-                {1200000, "PPXC"},
-                {36 * 36 * 36 * 36 - 2, "ZZZY"},
-                {36 * 36 * 36 * 36 - 1, "ZZZZ"},
-        };
-    }
-
-    @Test(dataProvider = "fourDigitBase36StrPositiveData")
-    public void fourDigitBase36StrPositiveTest(final int toConvert, final String expectedValue) {
-        final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, new ArrayList<SAMFileHeader>(), true);
-        Assert.assertEquals(expectedValue, headerMerger.positiveFourDigitBase36Str(toConvert));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SamFilesTest.java b/src/test/java/htsjdk/samtools/SamFilesTest.java
deleted file mode 100644
index 443a4d1..0000000
--- a/src/test/java/htsjdk/samtools/SamFilesTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package htsjdk.samtools;
-
-import java.nio.file.Path;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Test valid combinations of bam/cram vs bai/crai files.
- * Created by vadim on 10/08/2015.
- */
-public class SamFilesTest {
-    private static final String TEST_DATA = "src/test/resources/htsjdk/samtools/BAMFileIndexTest/";
-    private static final File BAM_FILE = new File(TEST_DATA + "index_test.bam");
-
-    @DataProvider(name = "FindIndexParams")
-    public static Object[][] paramsFindIndexForSuffixes() {
-        return new Object[][]{
-                // no index available sanity checks:
-                {".tmp", null, null},
-                {".bam", null, null},
-                {".cram", null, null},
-
-                // legit cases for BAM files:
-                {".bam", ".bai", ".bai"},
-                {".bam", ".bam.bai", ".bam.bai"},
-
-                // legit cases for CRAM files:
-                {".cram", ".cram.bai", ".cram.bai"},
-                {".cram", ".cram.crai", ".cram.crai"},
-
-                // special prohibited cases:
-                {".bam", ".crai", null},
-                {".tmp", ".crai", null},
-        };
-    }
-
-    @Test(dataProvider = "FindIndexParams")
-    public void testFindIndexForSuffixes(final String dataFileSuffix, final String indexFileSuffix, final String expectIndexSuffix) throws IOException {
-        final File dataFile = File.createTempFile("test", dataFileSuffix);
-        dataFile.deleteOnExit();
-        Assert.assertNull(SamFiles.findIndex(dataFile));
-        Assert.assertNull(SamFiles.findIndex(dataFile.toPath()));
-
-        File indexFile = null;
-        if (indexFileSuffix != null) {
-            indexFile = new File(dataFile.getAbsolutePath().replaceFirst("\\.\\S+$", indexFileSuffix));
-            indexFile.createNewFile();
-            indexFile.deleteOnExit();
-        }
-
-        final File foundIndexFile = SamFiles.findIndex(dataFile);
-        if (expectIndexSuffix == null) {
-            Assert.assertNull(foundIndexFile);
-        } else {
-            Assert.assertNotNull(foundIndexFile);
-            Assert.assertTrue(foundIndexFile.getName().endsWith(expectIndexSuffix));
-        }
-
-        final Path foundIndexPath = SamFiles.findIndex(dataFile.toPath());
-        if (expectIndexSuffix == null) {
-            Assert.assertNull(foundIndexPath);
-        } else {
-            Assert.assertNotNull(foundIndexPath);
-            Assert.assertTrue(foundIndexPath.getFileName().toString().endsWith(expectIndexSuffix));
-        }
-    }
-
-    @DataProvider(name = "filesAndIndicies")
-    public Object[][] getFilesAndIndicies() throws IOException {
-
-        final File REAL_INDEX_FILE = new File(BAM_FILE + ".bai"); //test regular file
-        final File SYMLINKED_BAM_WITH_SYMLINKED_INDEX = new File(TEST_DATA, "symlink_with_index.bam");
-
-        return new Object[][]{
-                {BAM_FILE, REAL_INDEX_FILE},
-                {SYMLINKED_BAM_WITH_SYMLINKED_INDEX, new File(SYMLINKED_BAM_WITH_SYMLINKED_INDEX + ".bai")},
-                {new File(TEST_DATA, "symlink_without_linked_index.bam"), REAL_INDEX_FILE.getCanonicalFile()},
-                {new File(TEST_DATA, "FileThatDoesntExist"), null}
-        };
-    }
-
-    @Test(dataProvider ="filesAndIndicies")
-    public void testIndexSymlinking(File bam, File expected_index) {
-        Assert.assertEquals(SamFiles.findIndex(bam), expected_index);
-        Assert.assertEquals(SamFiles.findIndex(bam.toPath()), expected_index == null ? null : expected_index.toPath());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SamFlagFieldTest.java b/src/test/java/htsjdk/samtools/SamFlagFieldTest.java
deleted file mode 100644
index f09e636..0000000
--- a/src/test/java/htsjdk/samtools/SamFlagFieldTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package htsjdk.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * @author nhomer
- */
-public class SamFlagFieldTest {
-
-    @Test
-    public void testAllFlags() {
-        int flagAsInteger = 0;
-        for (final SAMFlag samFlag : SAMFlag.values()) {
-            flagAsInteger |= samFlag.flag;
-        }
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "urURpP12sSxd");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testAllFlagsReverseOrder() {
-        int flagAsInteger = 0;
-        for (final SAMFlag samFlag : SAMFlag.values()) {
-            flagAsInteger |= samFlag.flag;
-        }
-        final String flagAsString = new StringBuilder("urURpP12sSxd").reverse().toString();
-
-        Assert.assertEquals(flagAsInteger, SamFlagField.STRING.parse(flagAsString));
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testForwardStrandFlags() {
-        final int flagAsInteger = SamFlagField.STRING.parse("f");
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mf");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testPairedForwardStrandFlags() {
-        final int flagAsInteger = SamFlagField.STRING.parse("mfMFp");
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mfMFp");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testMappedFlags() {
-        final int flagAsInteger = SamFlagField.STRING.parse("m");
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mf");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testPairedMappedFlags() {
-        final int flagAsInteger = SamFlagField.STRING.parse("pmM");
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mfMFp");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testMateMappedNotOnFragmentFlags() {
-        final int flagAsInteger = SAMFlag.MATE_UNMAPPED.flag;
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mfU");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testMateMappedOnlyOnPairsFlags() {
-        final int flagAsInteger = SAMFlag.MATE_UNMAPPED.flag | SAMFlag.READ_PAIRED.flag;
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mfUFp");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testMateForwardStrandNotOnFragmentFlags() {
-        final int flagAsInteger = 0;
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mf");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testMateForwardStrandOnlyOnPairsFlags() {
-        final int flagAsInteger = SAMFlag.READ_PAIRED.flag;
-        final String flagAsString = SamFlagField.STRING.format(flagAsInteger);
-
-        Assert.assertEquals(flagAsString, "mfMFp");
-        Assert.assertEquals(SamFlagField.STRING.parse(flagAsString), flagAsInteger);
-    }
-
-    @Test
-    public void testFlagTypesParsing() {
-        Assert.assertEquals(SamFlagField.of("0"), SamFlagField.DECIMAL);
-        Assert.assertEquals(SamFlagField.of("1234"), SamFlagField.DECIMAL);
-        Assert.assertEquals(SamFlagField.of("0xDOESNOTMATTER"), SamFlagField.HEXADECIMAL);
-        Assert.assertEquals(SamFlagField.of("0x"), SamFlagField.HEXADECIMAL);
-        Assert.assertEquals(SamFlagField.of("0[^x]DOESNOTMATTER"), SamFlagField.OCTAL);
-        Assert.assertEquals(SamFlagField.of("0a"), SamFlagField.OCTAL);
-        Assert.assertEquals(SamFlagField.of("DOESNOTMATTER"), SamFlagField.STRING);
-    }
-
-    @Test
-    public void testFlagTypesFormatting() {
-
-        Assert.assertEquals(SamFlagField.DECIMAL.format(1), "1");
-        Assert.assertEquals(SamFlagField.DECIMAL.format(124), "124");
-
-        Assert.assertEquals(SamFlagField.HEXADECIMAL.format(1), "0x1");
-        Assert.assertEquals(SamFlagField.HEXADECIMAL.format(9), "0x9");
-        Assert.assertEquals(SamFlagField.HEXADECIMAL.format(10), "0xa");
-        Assert.assertEquals(SamFlagField.HEXADECIMAL.format(16), "0x10");
-
-        Assert.assertEquals(SamFlagField.OCTAL.format(1), "01");
-        Assert.assertEquals(SamFlagField.OCTAL.format(124), "0174");
-
-        Assert.assertEquals(SamFlagField.STRING.format(337), "mrMFp1s");
-    }
-    
-    @Test(expectedExceptions = SAMFormatException.class)
-    public void testIllegalStringFlagCharacter(){
-        SamFlagField.STRING.parse("HELLO WORLD");
-    }
-
-    @Test(expectedExceptions = SAMFormatException.class)
-    public void testIllegalHexadecimalFlagCharacter(){
-        SamFlagField.HEXADECIMAL.parse("HELLO WORLD");
-    }
-
-    @Test(expectedExceptions = SAMFormatException.class)
-    public void testIllegalStringFlagCharacterExclamation(){
-        SamFlagField.STRING.parse("pmMr!F1s");
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/SamHeaderRecordComparatorTest.java b/src/test/java/htsjdk/samtools/SamHeaderRecordComparatorTest.java
deleted file mode 100644
index c11be38..0000000
--- a/src/test/java/htsjdk/samtools/SamHeaderRecordComparatorTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package htsjdk.samtools;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * 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:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * 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.
- */
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class SamHeaderRecordComparatorTest {
-
-	@DataProvider(name="UsualSuspects")
-	public Object[][] createData() {
-		final SAMReadGroupRecord left = new SAMReadGroupRecord("left");
-		left.setPlatformUnit("left.1");
-		left.setLibrary("library");
-
-		final SAMReadGroupRecord right = new SAMReadGroupRecord("right");
-		right.setPlatformUnit("right.1");
-		right.setLibrary("library");
-		right.setDescription("description");
-
-		return new Object[][] {{ left, right }};
-	}
-
-	@Test(dataProvider="UsualSuspects")
-	public void testEqualRecords(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
-		final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.PLATFORM_UNIT_TAG);
-		Assert.assertEquals(0, comparator.compare(left, left)); // see what I did there?
-	}
-
-	@Test(dataProvider="UsualSuspects")
-	public void testUnequalRecords(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
-		final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.PLATFORM_UNIT_TAG);
-		Assert.assertTrue(comparator.compare(left, right) < 0);
-		Assert.assertTrue(comparator.compare(right, left) > 0);
-	}
-
-	@Test(dataProvider="UsualSuspects")
-	public void testNullAttributes(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
-		final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.FLOW_ORDER_TAG);
-		Assert.assertEquals(0, comparator.compare(left, right)); // neither record has this attribute
-	}
-
-	@Test(dataProvider="UsualSuspects")
-	public void testOneNullAttribute(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
-		final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.DESCRIPTION_TAG);
-		Assert.assertTrue(comparator.compare(left, right) < 0);
-		Assert.assertTrue(comparator.compare(right, left) > 0);
-	}
-}
diff --git a/src/test/java/htsjdk/samtools/SamIndexesTest.java b/src/test/java/htsjdk/samtools/SamIndexesTest.java
deleted file mode 100644
index d13001f..0000000
--- a/src/test/java/htsjdk/samtools/SamIndexesTest.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAIEntry;
-import htsjdk.samtools.cram.CRAIIndex;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableMemoryStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.util.IOUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.zip.GZIPOutputStream;
-
-public class SamIndexesTest {
-
-    @Test
-    public void testEmptyBai() throws IOException {
-        final File baiFile = File.createTempFile("test", ".bai");
-        baiFile.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(baiFile);
-        fos.write(SamIndexes.BAI.magic);
-        fos.close();
-
-
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        baos.write(SamIndexes.BAI.magic);
-        baos.close();
-
-        final InputStream inputStream = SamIndexes.asBaiStreamOrNull(new ByteArrayInputStream(baos.toByteArray()), null);
-        for (final byte b : SamIndexes.BAI.magic) {
-            Assert.assertEquals(inputStream.read(), 0xFF & b);
-        }
-    }
-
-    @Test(expectedExceptions = NullPointerException.class)
-    public void testCraiRequiresDictionary() throws IOException {
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final GZIPOutputStream gos = new GZIPOutputStream(baos);
-        gos.close();
-
-        SamIndexes.asBaiStreamOrNull(new ByteArrayInputStream(baos.toByteArray()), null);
-    }
-
-    @Test
-    public void testEmptyCraiReadAsBai() throws IOException {
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final GZIPOutputStream gos = new GZIPOutputStream(baos);
-        gos.close();
-
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-        final InputStream inputStream = SamIndexes.asBaiStreamOrNull(new ByteArrayInputStream(baos.toByteArray()), dictionary);
-        for (final byte b : SamIndexes.BAI.magic) {
-            Assert.assertEquals(inputStream.read(), 0xFF & b);
-        }
-    }
-
-    @Test
-    public void testCraiInMemory() throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(baos, header);
-        final CRAIEntry entry = new CRAIEntry();
-        entry.sequenceId = 0;
-        entry.alignmentStart = 1;
-        entry.alignmentSpan = 2;
-        entry.sliceOffset = 3;
-        entry.sliceSize = 4;
-        entry.containerStartOffset = 5;
-        indexer.addEntry(entry);
-        indexer.finish();
-        baos.close();
-
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-
-        final InputStream baiStream = SamIndexes.asBaiStreamOrNull(new ByteArrayInputStream(baos.toByteArray()), dictionary);
-        Assert.assertNotNull(baiStream);
-
-        baos = new ByteArrayOutputStream();
-        IOUtil.copyStream(baiStream, baos);
-        final CachingBAMFileIndex bamIndex = new CachingBAMFileIndex(new SeekableMemoryStream(baos.toByteArray(), null), dictionary);
-        final BAMFileSpan span = bamIndex.getSpanOverlapping(entry.sequenceId, entry.alignmentStart, entry.alignmentStart);
-        Assert.assertNotNull(span);
-        final long[] coordinateArray = span.toCoordinateArray();
-        Assert.assertEquals(coordinateArray.length, 2);
-        Assert.assertEquals(coordinateArray[0] >> 16, entry.containerStartOffset);
-        Assert.assertEquals(coordinateArray[1] & 0xFFFF, 1);
-    }
-
-    @Test
-    public void testCraiFromFile() throws IOException {
-        final File file = File.createTempFile("test", ".crai");
-        file.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(file);
-
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(fos, header);
-        final CRAIEntry entry = new CRAIEntry();
-        entry.sequenceId = 0;
-        entry.alignmentStart = 1;
-        entry.alignmentSpan = 2;
-        entry.sliceOffset = 3;
-        entry.sliceSize = 4;
-        entry.containerStartOffset = 5;
-        indexer.addEntry(entry);
-        indexer.finish();
-        fos.close();
-
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-
-        final SeekableStream baiStream = SamIndexes.asBaiSeekableStreamOrNull(new SeekableFileStream(file), dictionary);
-        Assert.assertNotNull(baiStream);
-
-        final CachingBAMFileIndex bamIndex = new CachingBAMFileIndex(baiStream, dictionary);
-        final BAMFileSpan span = bamIndex.getSpanOverlapping(entry.sequenceId, entry.alignmentStart, entry.alignmentStart);
-        Assert.assertNotNull(span);
-        final long[] coordinateArray = span.toCoordinateArray();
-        Assert.assertEquals(coordinateArray.length, 2);
-        Assert.assertEquals(coordinateArray[0] >> 16, entry.containerStartOffset);
-        Assert.assertEquals(coordinateArray[1] & 0xFFFF, 1);
-    }
-
-    @Test(expectedExceptions = NullPointerException.class)
-    public void testOpenIndexFileAsBaiOrNull_NPE() throws IOException {
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-        Assert.assertNull(SamIndexes.openIndexFileAsBaiOrNull(null, dictionary));
-    }
-
-    @Test
-    public void testOpenIndexFileAsBaiOrNull_ReturnsNull() throws IOException {
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-        File file = File.createTempFile("test", ".notbai");
-        file.deleteOnExit();
-        Assert.assertNull(SamIndexes.openIndexFileAsBaiOrNull(file, dictionary));
-        file.delete();
-
-        file = File.createTempFile("test", ".notcrai");
-        file.deleteOnExit();
-        Assert.assertNull(SamIndexes.openIndexFileAsBaiOrNull(file, dictionary));
-        file.delete();
-    }
-
-    @Test
-    public void testOpenIndexUrlAsBaiOrNull() throws IOException {
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-
-        final File file = File.createTempFile("test", ".crai");
-        file.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(file);
-        SAMFileHeader header = new SAMFileHeader();
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(fos, header);
-        final CRAIEntry entry = new CRAIEntry();
-        entry.sequenceId = 0;
-        entry.alignmentStart = 1;
-        entry.alignmentSpan = 2;
-        entry.sliceOffset = 3;
-        entry.sliceSize = 4;
-        entry.containerStartOffset = 5;
-        indexer.addEntry(entry);
-        indexer.finish();
-        fos.close();
-
-        final InputStream baiStream = SamIndexes.openIndexUrlAsBaiOrNull(file.toURI().toURL(), dictionary);
-        Assert.assertNotNull(baiStream);
-
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        IOUtil.copyStream(baiStream, baos);
-        final CachingBAMFileIndex bamIndex = new CachingBAMFileIndex(new SeekableMemoryStream(baos.toByteArray(), null), dictionary);
-        final BAMFileSpan span = bamIndex.getSpanOverlapping(entry.sequenceId, entry.alignmentStart, entry.alignmentStart);
-        Assert.assertNotNull(span);
-        final long[] coordinateArray = span.toCoordinateArray();
-        Assert.assertEquals(coordinateArray.length, 2);
-        Assert.assertEquals(coordinateArray[0] >> 16, entry.containerStartOffset);
-        Assert.assertEquals(coordinateArray[1] & 0xFFFF, 1);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SamPairUtilTest.java b/src/test/java/htsjdk/samtools/SamPairUtilTest.java
deleted file mode 100644
index 80841c9..0000000
--- a/src/test/java/htsjdk/samtools/SamPairUtilTest.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.SamPairUtil.SetMateInfoIterator;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class SamPairUtilTest {
-
-    @Test(dataProvider = "testGetPairOrientation")
-    public void testGetPairOrientation(final String testName,
-                                       final int read1Start, final int read1Length, final boolean read1Reverse,
-                                       final int read2Start, final int read2Length, final boolean read2Reverse,
-                                       final SamPairUtil.PairOrientation expectedOrientation) {
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("chr1", 100000000));
-        final SAMRecord rec1 = makeSamRecord(header, read1Start, read1Length, read1Reverse, true);
-        final SAMRecord rec2 = makeSamRecord(header, read2Start, read2Length, read2Reverse, false);
-        SamPairUtil.setMateInfo(rec1, rec2, true);
-        Assert.assertEquals(SamPairUtil.getPairOrientation(rec1), expectedOrientation, testName + " first end");
-        Assert.assertEquals(SamPairUtil.getPairOrientation(rec2), expectedOrientation, testName + " second end");
-    }
-
-    @Test(dataProvider = "testSetMateInfoMateCigar")
-    public void testSetMateInfoMateCigar(final String testName,
-                                         final int read1Start, final boolean read1Reverse, final String read1Cigar,
-                                         final int read2Start, final boolean read2Reverse, final String read2Cigar) {
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("chr1", 100000000));
-        final SAMRecord rec1 = makeSamRecord2(header, read1Start, read1Reverse, read1Cigar, true);
-        final SAMRecord rec2 = makeSamRecord2(header, read2Start, read2Reverse, read2Cigar, false);
-        SamPairUtil.setMateInfo(rec1, rec2, true);
-        Assert.assertEquals(SAMUtils.getMateCigarString(rec1), rec2.getCigarString(), testName + " first end");
-        Assert.assertEquals(SAMUtils.getMateCigarString(rec2), rec1.getCigarString(), testName + " second end");
-    }
-
-    private void testSetMateInfoMateCigarOnSupplementalsAddRecord(final List<SAMRecord> records, final List<String> mateCigarList, final SAMRecord record, final String mateCigar) {
-        records.add(record);
-        mateCigarList.add(mateCigar);
-    }
-
-    @Test(dataProvider = "testSetMateInfoMateCigarOnSupplementals")
-    public void testSetMateInfoMateCigarOnSupplementals(final String testName,
-                                                        final int read1Start, final boolean read1Reverse, final String read1Cigar,
-                                                        final int read1SupplementalStart, final boolean read1SupplementalReverse, final String read1SupplementalCigar,
-                                                        final int read2Start, final boolean read2Reverse, final String read2Cigar,
-                                                        final int read2SupplementalStart, final boolean read2SupplementalReverse, final String read2SupplementalCigar
-    ) {
-        final SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("chr1", 100000000));
-
-        final List<SAMRecord> records = new ArrayList<SAMRecord>();
-        final List<String> mateCigarList = new ArrayList<String>();
-        final SAMRecord rec;
-
-
-        int numIterations = 10;
-        boolean isPaired = (0 < read1Start && 0 < read2Start);
-        for (int i = 0; i < numIterations; i++) {
-            final String readName = "READ" + i;
-            testSetMateInfoMateCigarOnSupplementalsAddRecord(records, mateCigarList, makeSamRecord3(header, read1Start, read1Reverse, read1Cigar, true, readName, isPaired, false), read2Cigar);
-            if (0 < read1SupplementalStart) {
-                testSetMateInfoMateCigarOnSupplementalsAddRecord(records, mateCigarList, makeSamRecord3(header, read1SupplementalStart, read1SupplementalReverse, read1SupplementalCigar, true, readName, isPaired, true), read2Cigar);
-            }
-            if (0 < read2Start) {
-                testSetMateInfoMateCigarOnSupplementalsAddRecord(records, mateCigarList, makeSamRecord3(header, read2Start, read2Reverse, read2Cigar, false, readName, isPaired, false), read1Cigar);
-            }
-            if (0 < read2SupplementalStart) {
-                testSetMateInfoMateCigarOnSupplementalsAddRecord(records, mateCigarList, makeSamRecord3(header, read2SupplementalStart, read2SupplementalReverse, read2SupplementalCigar, false, readName, isPaired, true), read1Cigar);
-            }
-        }
-
-        // Count the number of mate cigars we expect to add
-        int expectedNumberOfMateCigarsAdded = 0;
-        for (final String mateCigar : mateCigarList) {
-            if (null != mateCigar) expectedNumberOfMateCigarsAdded++;
-        }
-
-        int i = 0;
-        SetMateInfoIterator iterator = new SetMateInfoIterator(records.iterator(), true);
-        while (iterator.hasNext()) {
-            final SAMRecord record = iterator.next();
-            final Cigar mateCigar = SAMUtils.getMateCigar(record);
-            final String mateCigarString = (null == mateCigar) ? null : mateCigar.toString();
-            Assert.assertEquals(mateCigarString, mateCigarList.get(i), testName);
-            i++;
-        }
-
-        Assert.assertEquals(expectedNumberOfMateCigarsAdded, iterator.getNumMateCigarsAdded(), testName);
-
-        iterator.close();
-    }
-
-    private SAMRecord makeSamRecord(final SAMFileHeader header, final int alignmentStart, final int readLength,
-                                    final boolean reverse, final boolean firstOfPair) {
-        final SAMRecord rec = new SAMRecord(header);
-        rec.setReferenceIndex(0);
-        final StringBuilder sb = new StringBuilder();
-        final byte[] quals = new byte[readLength];
-        for (int i = 0; i < readLength; ++i) {
-            sb.append("A");
-            quals[i] = 20;
-        }
-        rec.setReadString(sb.toString());
-        rec.setBaseQualities(quals);
-        rec.setAlignmentStart(alignmentStart);
-        rec.setCigarString(readLength + "M");
-        rec.setReadPairedFlag(true);
-        rec.setReadNegativeStrandFlag(reverse);
-        if (firstOfPair) rec.setFirstOfPairFlag(true);
-        else rec.setSecondOfPairFlag(true);
-        return rec;
-    }
-
-    private SAMRecord makeSamRecord2(final SAMFileHeader header, final int alignmentStart, boolean reverse,
-                                     String cigarString, final boolean firstOfPair) {
-        return makeSamRecord3(header, alignmentStart, reverse, cigarString, firstOfPair, null, true, false);
-    }
-
-    private SAMRecord makeSamRecord3(final SAMFileHeader header, final int alignmentStart, boolean reverse,
-                                     String cigarString, final boolean firstOfPair, final String name, final boolean isPaired, final boolean isSupplemental) {
-        final SAMRecord rec = new SAMRecord(header);
-        final StringBuilder sb = new StringBuilder();
-        final Cigar cigar = TextCigarCodec.decode(cigarString);
-        final int readLength = cigar.getReadLength();
-        rec.setReferenceIndex(0);
-        final byte[] quals = new byte[readLength];
-        for (int i = 0; i < readLength; ++i) {
-            sb.append("A");
-            quals[i] = 20;
-        }
-        rec.setReadString(sb.toString());
-        rec.setBaseQualities(quals);
-        rec.setAlignmentStart(alignmentStart);
-        rec.setCigar(cigar);
-        rec.setReadNegativeStrandFlag(reverse);
-        if (isPaired) {
-            rec.setReadPairedFlag(true);
-            if (firstOfPair) rec.setFirstOfPairFlag(true);
-            else rec.setSecondOfPairFlag(true);
-        }
-        if (null != name) rec.setReadName(name);
-        rec.setSupplementaryAlignmentFlag(isSupplemental);
-        return rec;
-    }
-
-    @DataProvider(name = "testGetPairOrientation")
-    public Object[][] testGetPairOrientationDataProvider() {
-        /**
-         * @param testName
-         * @param read1Start
-         * @param read1Length
-         * @param read1Reverse
-         * @param read2Start
-         * @param read2Length
-         * @param read2Reverse
-         * @param expectedOrientation
-         */
-        return new Object[][]{
-                {"normal innie", 1, 100, false, 500, 100, true, SamPairUtil.PairOrientation.FR},
-                {"overlapping innie", 1, 100, false, 50, 100, true, SamPairUtil.PairOrientation.FR},
-                {"second end enclosed innie", 1, 100, false, 50, 50, true, SamPairUtil.PairOrientation.FR},
-                {"first end enclosed innie", 1, 50, false, 1, 100, true, SamPairUtil.PairOrientation.FR},
-                {"completely overlapping innie", 1, 100, false, 1, 100, true, SamPairUtil.PairOrientation.FR},
-                {"normal outie", 1, 100, true, 500, 100, false, SamPairUtil.PairOrientation.RF},
-                {"nojump outie", 1, 100, true, 101, 100, false, SamPairUtil.PairOrientation.RF},
-                {"forward tandem", 1, 100, true, 500, 100, true, SamPairUtil.PairOrientation.TANDEM},
-                {"reverse tandem", 1, 100, false, 500, 100, false, SamPairUtil.PairOrientation.TANDEM},
-                {"overlapping forward tandem", 1, 100, true, 50, 100, true, SamPairUtil.PairOrientation.TANDEM},
-                {"overlapping reverse tandem", 1, 100, false, 50, 100, false, SamPairUtil.PairOrientation.TANDEM},
-                {"second end enclosed forward tandem", 1, 100, true, 50, 50, true, SamPairUtil.PairOrientation.TANDEM},
-                {"second end enclosed reverse tandem", 1, 100, false, 50, 50, false, SamPairUtil.PairOrientation.TANDEM},
-                {"first end enclosed forward tandem", 1, 50, true, 1, 100, true, SamPairUtil.PairOrientation.TANDEM},
-                {"first end enclosed reverse tandem", 1, 50, false, 1, 100, false, SamPairUtil.PairOrientation.TANDEM},
-        };
-    }
-
-    @DataProvider(name = "testSetMateInfoMateCigar")
-    public Object[][] testSetMateInfoMateCigarDataProvider() {
-        /**
-         * @param testName
-         * @param read1Start
-         * @param read1Reverse
-         * @param read1Cigar
-         * @param read2Start
-         * @param read2Reverse
-         * @param read2Cigar
-         */
-        return new Object[][]{
-                {"50M/50M", 1, false, "50M", 500, true, "50M"},
-                {"50M/25M5I20M", 1, false, "50M", 500, true, "25M5I20M"},
-                {"25M5I20M/50M", 1, false, "25M5I20M", 500, true, "50M"},
-                {"50M/25M5D20M", 1, false, "50M", 500, true, "25M5D20M"},
-                {"25M5D20M/50M", 1, false, "25M5D20M", 500, true, "50M"},
-        };
-    }
-
-    @DataProvider(name = "testSetMateInfoMateCigarOnSupplementals")
-    public Object[][] testSetMateInfoMateCigarOnSupplementalsDataProvider() {
-        /**
-         * @param testName
-         * @param read1Start
-         * @param read1Reverse
-         * @param read1Cigar
-         * @param read1SupplementalStart
-         * @param read1SupplementalReverse
-         * @param read1SupplementalCigar
-         * @param read2Start
-         * @param read2Reverse
-         * @param read2Cigar
-         * @param read2SupplementalStart
-         * @param read2SupplementalReverse
-         * @param read2SupplementalCigar
-         * */
-        return new Object[][]{
-                {"fragment", 1, false, "50M", -1, false, null, -1, false, null, -1, false, null},
-                {"fragment with supplemental", 1, false, "50M", 10, false, "50M", -1, false, null, -1, false, null},
-                {"pair", 1, false, "50M", -1, false, null, 1, false, "20M", -1, false, null},
-                {"pair first supplemental", 1, false, "50M", 10, false, "50M", 1, false, "20M", -1, false, null},
-                {"pair second supplemental", 1, false, "50M", -1, false, null, 1, false, "20M", 10, false, "50M"},
-                {"pair both supplemental", 1, false, "50M", 10, false, "50M", 1, false, "20M", 10, false, "50M"}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SamReaderFactoryTest.java b/src/test/java/htsjdk/samtools/SamReaderFactoryTest.java
deleted file mode 100644
index 31ad5c2..0000000
--- a/src/test/java/htsjdk/samtools/SamReaderFactoryTest.java
+++ /dev/null
@@ -1,468 +0,0 @@
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.seekablestream.ISeekableStreamFactory;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableHTTPStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import htsjdk.samtools.util.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.BiFunction;
-
-public class SamReaderFactoryTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    private static final Log LOG = Log.getInstance(SamReaderFactoryTest.class);
-
-    @Test(dataProvider = "variousFormatReaderTestCases")
-    public void variousFormatReaderTest(final String inputFile) throws IOException {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        for (final SAMRecord ignored : reader) {
-        }
-        reader.close();
-    }
-
-    private int countRecordsInQueryInterval(final SamReader reader, final QueryInterval query) {
-        final SAMRecordIterator iter = reader.queryOverlapping(new QueryInterval[] { query });
-        int count = 0;
-        while (iter.hasNext()) {
-            iter.next();
-            count++;
-        }
-        iter.close();
-        return count;
-    }
-
-    private int countRecords(final SamReader reader) {
-        int count = 0;
-        try (final SAMRecordIterator iter = reader.iterator()) {
-            while (iter.hasNext()) {
-                iter.next();
-                count++;
-            }
-        }
-        return count;
-    }
-
-    // See https://github.com/samtools/htsjdk/issues/76
-    @Test(dataProvider = "queryIntervalIssue76TestCases")
-    public void queryIntervalIssue76(final String sequenceName, final int start, final int end, final int expectedCount) throws IOException {
-        final File input = new File(TEST_DATA_DIR, "issue76.bam");
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        final QueryInterval interval = new QueryInterval(reader.getFileHeader().getSequence(sequenceName).getSequenceIndex(), start, end);
-        Assert.assertEquals(countRecordsInQueryInterval(reader, interval), expectedCount);
-        reader.close();
-    }
-
-    @DataProvider(name = "queryIntervalIssue76TestCases")
-    public Object[][] queryIntervalIssue76TestCases() {
-        return new Object[][]{
-                {"1", 11966, 11966, 2},
-                {"1", 11966, 11967, 2},
-                {"1", 11967, 11967, 1}
-        };
-    }
-
-    @DataProvider(name = "variousFormatReaderTestCases")
-    public Object[][] variousFormatReaderTestCases() {
-        return new Object[][]{
-                {"block_compressed.sam.gz"},
-                {"uncompressed.sam"},
-                {"compressed.sam.gz"},
-                {"compressed.bam"},
-                {"unsorted.sam"}
-        };
-    }
-
-    // Tests for the SAMRecordFactory usage
-    class SAMRecordFactoryTester extends DefaultSAMRecordFactory {
-        int samRecordsCreated;
-        int bamRecordsCreated;
-
-        public SAMRecord createSAMRecord(final SAMFileHeader header) {
-            ++samRecordsCreated;
-            return super.createSAMRecord(header);
-        }
-
-        public BAMRecord createBAMRecord(final SAMFileHeader header, final int referenceSequenceIndex, final int alignmentStart, final short readNameLength, final short mappingQuality, final int indexingBin, final int cigarLen, final int flags, final int readLen, final int mateReferenceSequenceIndex, final int mateAlignmentStart, final int insertSize, final byte[] variableLengthBlock) {
-            ++bamRecordsCreated;
-            return super.createBAMRecord(header, referenceSequenceIndex, alignmentStart, readNameLength, mappingQuality, indexingBin, cigarLen, flags, readLen, mateReferenceSequenceIndex, mateAlignmentStart, insertSize, variableLengthBlock);
-        }
-    }
-
-    @Test(dataProvider = "variousFormatReaderTestCases")
-    public void samRecordFactoryTest(final String inputFile) throws IOException {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-
-        final SAMRecordFactoryTester recordFactory = new SAMRecordFactoryTester();
-        final SamReaderFactory readerFactory = SamReaderFactory.makeDefault().samRecordFactory(recordFactory);
-        final SamReader reader = readerFactory.open(input);
-
-        int i = 0;
-        for (final SAMRecord ignored : reader) {
-            ++i;
-        }
-        reader.close();
-
-        Assert.assertTrue(i > 0);
-        if (inputFile.endsWith(".sam") || inputFile.endsWith(".sam.gz")) Assert.assertEquals(recordFactory.samRecordsCreated, i);
-        else if (inputFile.endsWith(".bam")) Assert.assertEquals(recordFactory.bamRecordsCreated, i);
-    }
-
-    @Test(expectedExceptions=IllegalStateException.class)
-    public void samRecordFactoryNullHeaderBAMTest() {
-        final SAMRecordFactory recordFactory = new DefaultSAMRecordFactory();
-        recordFactory.createBAMRecord(
-                null, // null header
-                0,
-                0,
-                (short) 0,
-                (short) 0,
-                0,
-                0,
-                0,
-                0,
-                0,
-                0,
-                0,
-                null);
-    }
-
-
-    /**
-     * Unit tests for asserting all permutations of data and index sources read the same records and header.
-     */
-    final File localBam = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-    final File localBamIndex = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai");
-
-    final URL bamUrl, bamIndexUrl;
-
-    {
-        try {
-            bamUrl = new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam");
-            bamIndexUrl = new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam.bai");
-        } catch (final MalformedURLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @DataProvider
-    public Object[][] composeAllPermutationsOfSamInputResource() {
-        final List<SamInputResource> sources = new ArrayList<SamInputResource>();
-        for (final InputResource.Type dataType : InputResource.Type.values()) {
-            if (dataType.equals(InputResource.Type.SRA_ACCESSION))
-                continue;
-
-            sources.add(new SamInputResource(composeInputResourceForType(dataType, false)));
-            for (final InputResource.Type indexType : InputResource.Type.values()) {
-                if (indexType.equals(InputResource.Type.SRA_ACCESSION))
-                    continue;
-
-                sources.add(new SamInputResource(
-                        composeInputResourceForType(dataType, false),
-                        composeInputResourceForType(indexType, true)
-                ));
-            }
-        }
-        final Object[][] data = new Object[sources.size()][];
-        for (final SamInputResource source : sources) {
-            data[sources.indexOf(source)] = new Object[]{source};
-        }
-
-        return data;
-    }
-
-    private InputResource composeInputResourceForType(final InputResource.Type type, final boolean forIndex) {
-        final File f = forIndex ? localBamIndex : localBam;
-        final URL url = forIndex ? bamIndexUrl : bamUrl;
-        switch (type) {
-            case FILE:
-                return new FileInputResource(f);
-            case PATH:
-                return new PathInputResource(f.toPath());
-            case URL:
-                return new UrlInputResource(url);
-            case SEEKABLE_STREAM:
-                return new SeekableStreamInputResource(new SeekableHTTPStream(url));
-            case INPUT_STREAM:
-                try {
-                    return new InputStreamInputResource(new FileInputStream(f));
-                } catch (final FileNotFoundException e) {
-                    throw new RuntimeIOException(e);
-                }
-            default:
-                throw new IllegalStateException();
-        }
-    }
-
-    final Set<SAMFileHeader> observedHeaders = new HashSet<SAMFileHeader>();
-    final Set<List<SAMRecord>> observedRecordOrdering = new HashSet<List<SAMRecord>>();
-
-    @Test(dataProvider = "composeAllPermutationsOfSamInputResource")
-    public void exhaustInputResourcePermutation(final SamInputResource resource) throws IOException {
-        final SamReader reader = SamReaderFactory.makeDefault().open(resource);
-        LOG.info(String.format("Reading from %s ...", resource));
-        final List<SAMRecord> slurped = Iterables.slurp(reader);
-        final SAMFileHeader fileHeader = reader.getFileHeader();
-        reader.hasIndex();
-        reader.indexing().hasBrowseableIndex();
-        reader.close();
-        
-        /* Ensure all tests have read the same records in the same order or, if this is the first test, set it as the template. */
-        observedHeaders.add(fileHeader);
-        observedRecordOrdering.add(slurped);
-        Assert.assertEquals(observedHeaders.size(), 1, "read different headers than other testcases");
-        Assert.assertEquals(observedRecordOrdering.size(), 1, "read different records than other testcases");
-    }
-
-    @Test
-    public void openPath() throws IOException {
-        final Path path = localBam.toPath();
-        final List<SAMRecord> records;
-        final SAMFileHeader fileHeader;
-        try (final SamReader reader = SamReaderFactory.makeDefault().open(path)) {
-            LOG.info(String.format("Reading from %s ...", path));
-            records = Iterables.slurp(reader);
-            fileHeader = reader.getFileHeader();
-            reader.close();
-        }
-
-        try (final SamReader fileReader = SamReaderFactory.makeDefault().open(localBam)) {
-            final List<SAMRecord> expectedRecords = Iterables.slurp(fileReader);
-            final SAMFileHeader expectedFileHeader = fileReader.getFileHeader();
-            Assert.assertEquals(records, expectedRecords);
-            Assert.assertEquals(fileHeader, expectedFileHeader);
-        }
-    }
-
-
-    final Set<List<SAMRecord>> observedRecordOrdering1 = new HashSet<List<SAMRecord>>();
-    final Set<List<SAMRecord>> observedRecordOrdering3 = new HashSet<List<SAMRecord>>();
-    final Set<List<SAMRecord>> observedRecordOrdering20 = new HashSet<List<SAMRecord>>();
-
-    @Test(dataProvider = "composeAllPermutationsOfSamInputResource")
-    public void queryInputResourcePermutation(final SamInputResource resource) throws IOException {
-        final SamReader reader = SamReaderFactory.makeDefault().open(resource);
-        LOG.info(String.format("Query from %s ...", resource));
-        if (reader.hasIndex()) {
-            final StopWatch stopWatch = new StopWatch();
-            stopWatch.start();
-            final SAMRecordIterator q1 = reader.query("chr1", 500000, 100000000, true);
-            observedRecordOrdering1.add(Iterables.slurp(q1));
-            q1.close();
-            final SAMRecordIterator q20 = reader.query("chr20", 1, 1000000, true);
-            observedRecordOrdering20.add(Iterables.slurp(q20));
-            q20.close();
-            final SAMRecordIterator q3 = reader.query("chr3", 1, 10000000, true);
-            observedRecordOrdering3.add(Iterables.slurp(q3));
-            q3.close();
-            stopWatch.stop();
-            LOG.info(String.format("Finished queries in %sms", stopWatch.getElapsedTime()));
-
-            Assert.assertEquals(observedRecordOrdering1.size(), 1, "read different records for chromosome 1");
-            Assert.assertEquals(observedRecordOrdering20.size(), 1, "read different records for chromosome 20");
-            Assert.assertEquals(observedRecordOrdering3.size(), 1, "read different records for chromosome 3");
-        } else if (resource.indexMaybe() != null) {
-            LOG.warn("Resource has an index source, but is not indexed: " + resource);
-        } else {
-            LOG.info("Skipping query operation: no index.");
-        }
-        reader.close();
-    }
-
-
-    /**
-     * A path that pretends it's not based upon a file.  This helps in cases where we want to test branches
-     * that apply to non-file based paths without actually having to use non-file based resources (like cloud urls)
-     */
-    private static class NeverFilePathInputResource extends PathInputResource {
-        public NeverFilePathInputResource(Path pathResource) {
-            super(pathResource);
-        }
-
-        @Override
-        public File asFile() {
-            return null;
-        }
-    }
-
-    @Test
-    public void checkHasIndexForStreamingPathBamWithFileIndex() throws IOException {
-        InputResource bam = new NeverFilePathInputResource(localBam.toPath());
-        InputResource index = new FileInputResource(localBamIndex);
-
-        // ensure that the index is being used, not checked in queryInputResourcePermutation
-        try (final SamReader reader = SamReaderFactory.makeDefault().open(new SamInputResource(bam, index))) {
-            Assert.assertTrue(reader.hasIndex());
-        }
-    }
-
-    @Test
-    public void queryStreamingPathBamWithFileIndex() throws IOException {
-        InputResource bam = new NeverFilePathInputResource(localBam.toPath());
-        InputResource index = new FileInputResource(localBamIndex);
-
-        final SamInputResource resource = new SamInputResource(bam, index);
-        queryInputResourcePermutation(new SamInputResource(bam, index));
-    }
-
-    @Test
-    public void customReaderFactoryTest() throws IOException {
-        try {
-          CustomReaderFactory.setInstance(new CustomReaderFactory(
-              "https://www.googleapis.com/genomics/v1beta/reads/," +
-              "htsjdk.samtools.SamReaderFactoryTest$TestReaderFactory"));
-          final SamReader reader = SamReaderFactory.makeDefault().open(
-              SamInputResource.of(
-              "https://www.googleapis.com/genomics/v1beta/reads/?uncompressed.sam"));
-          int i = 0;
-          for (@SuppressWarnings("unused") final SAMRecord ignored : reader) {
-              ++i;
-          }
-          reader.close();
-  
-          Assert.assertTrue(i > 0);
-        } finally {
-          CustomReaderFactory.resetToDefaultInstance();
-        }
-    }
-    
-    public static class TestReaderFactory implements CustomReaderFactory.ICustomReaderFactory {
-      @Override
-      public SamReader open(URL url) {
-        final File file = new File(TEST_DATA_DIR, url.getQuery());
-        LOG.info("Opening customr reader for " + file.toString());
-        return SamReaderFactory.makeDefault().open(file);
-      }
-    }
-    
-    @Test
-    public void inputResourceFromStringTest() throws IOException {
-      Assert.assertEquals(SamInputResource.of("http://test.url").data().type(),
-          InputResource.Type.URL);
-      Assert.assertEquals(SamInputResource.of("https://test.url").data().type(),
-          InputResource.Type.URL);
-      Assert.assertEquals(SamInputResource.of("ftp://test.url").data().type(),
-          InputResource.Type.URL);
-      Assert.assertEquals(SamInputResource.of("/a/b/c").data().type(),
-          InputResource.Type.FILE);
-    }
-
-    @Test
-    public void testCRAMReaderFromURL() throws IOException {
-        // get a CRAM reader with an index from a URL-backed resource
-        getCRAMReaderFromInputResource(
-                (cramURL, indexURL) -> { return SamInputResource.of(cramURL).index(indexURL);},
-                true,
-                3);
-    }
-
-    @Test
-    public void testCRAMReaderFromURLStream() throws IOException {
-        // get a CRAM reader with an index from a stream-backed resource created from a URL
-        getCRAMReaderFromInputResource(
-                (cramURL, indexURL) -> {
-                    try {
-                        ISeekableStreamFactory streamFactory = SeekableStreamFactory.getInstance();
-                        return SamInputResource
-                                .of(streamFactory.getStreamFor(cramURL))
-                                .index(streamFactory.getStreamFor(indexURL));
-                    }
-                    catch (IOException e) {
-                        throw new RuntimeIOException(e);
-                    }
-                },
-                true,
-                3);
-    }
-
-    @Test
-    public void testCRAMReaderFromURLNoIndexFile() throws IOException {
-        // get just a CRAM reader (no index) from an URL-backed resource
-        getCRAMReaderFromInputResource(
-                (cramURL, indexURL) -> { return SamInputResource.of(cramURL); },
-            false,
-            11);
-    }
-
-    @Test(expectedExceptions=RuntimeIOException.class)
-    public void testCRAMReaderFromURLBadIndexFile() throws IOException {
-        // deliberately specify a bad index file to ensure we get an IOException
-        getCRAMReaderFromInputResource(
-                (cramURL, indexURL) -> { return SamInputResource.of(cramURL).index(new File("nonexistent.bai")); },
-            true,
-            3);
-    }
-
-    private void getCRAMReaderFromInputResource(
-            final BiFunction<URL, URL, SamInputResource> getInputResource,
-            final boolean hasIndex,
-            final int expectedCount) throws IOException {
-        final String cramFilePath = new File(TEST_DATA_DIR, "cram_with_bai_index.cram").getAbsolutePath();
-        final String cramIndexPath = new File(TEST_DATA_DIR, "cram_with_bai_index.cram.bai").getAbsolutePath();
-        final URL cramURL = new URL("file://" + cramFilePath);
-        final URL indexURL = new URL("file://" + cramIndexPath);
-
-        final SamReaderFactory factory = SamReaderFactory.makeDefault()
-                .referenceSource(new ReferenceSource(new File(TEST_DATA_DIR, "hg19mini.fasta")))
-                .validationStringency(ValidationStringency.SILENT);
-        final SamReader reader = factory.open(getInputResource.apply(cramURL, indexURL));
-
-        int count = hasIndex ?
-            countRecordsInQueryInterval(reader, new QueryInterval(1, 10, 1000)) :
-            countRecords(reader);
-        Assert.assertEquals(count, expectedCount);
-    }
-
-    @Test
-    public void testSamReaderFromSeekableStream() throws IOException {
-        // even though a SAM isn't indexable, make sure we can open one
-        // using a seekable stream
-        final File samFile = new File(TEST_DATA_DIR, "unsorted.sam");
-        final SamReaderFactory factory = SamReaderFactory.makeDefault()
-                .validationStringency(ValidationStringency.SILENT);
-        final SamReader reader = factory.open(
-                SamInputResource.of(new SeekableFileStream(samFile)));
-        Assert.assertEquals(countRecords(reader), 10);
-    }
-
-
-    @Test
-    public void testSamReaderFromURL() throws IOException {
-        final String samFilePath = new File(TEST_DATA_DIR, "unsorted.sam").getAbsolutePath();
-        final URL samURL = new URL("file://" + samFilePath);
-        final SamReaderFactory factory = SamReaderFactory.makeDefault()
-                .validationStringency(ValidationStringency.SILENT);
-        final SamReader reader = factory.open(SamInputResource.of(samURL));
-        Assert.assertEquals(countRecords(reader), 10);
-    }
-
-    @Test(expectedExceptions=SAMFormatException.class)
-    public void testSamReaderFromMalformedSeekableStream() throws IOException {
-        // use a bogus (.bai file) to force SamReaderFactory to fall through to the
-        // fallback code that assumes a SAM File when it can't determine the
-        // format of the input, to ensure that it results in a SAMFormatException
-        final File samFile = new File(TEST_DATA_DIR, "cram_with_bai_index.cram.bai");
-        final SamReaderFactory factory = SamReaderFactory.makeDefault()
-                .validationStringency(ValidationStringency.SILENT);
-        final SamReader reader = factory.open(
-                SamInputResource.of(new SeekableFileStream(samFile)));
-        countRecords(reader);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SamReaderSortTest.java b/src/test/java/htsjdk/samtools/SamReaderSortTest.java
deleted file mode 100755
index 584410f..0000000
--- a/src/test/java/htsjdk/samtools/SamReaderSortTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package htsjdk.samtools;
-
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Tests for the implementation of {@link SAMRecordIterator} in {@link SamReader}
- *
- * @author ktibbett at broadinstitute.org
- */
-public class SamReaderSortTest {
-
-    public static final String COORDINATE_SORTED_FILE = "src/test/resources/htsjdk/samtools/coordinate_sorted.sam";
-    public static final String QUERYNAME_SORTED_FILE = "src/test/resources/htsjdk/samtools/queryname_sorted.sam";
-    public static final String QUERYNAME_SORTED_NO_HEADER_SORT = "src/test/resources/htsjdk/samtools/unsorted.sam";
-
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void testSortsDisagree() throws Exception {
-        SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(COORDINATE_SORTED_FILE)).iterator();
-        try {
-            it.assertSorted(SAMFileHeader.SortOrder.queryname);
-            while (it.hasNext()) {
-                it.next();
-            }
-            Assert.fail("Queryname assertion should have failed on coordinate sorted file but didn't");
-        } finally {
-            it.close();
-        }
-    }
-
-    @Test(dataProvider = "validSorts")
-    public void testSortAssertionValid(String file, SAMFileHeader.SortOrder order) {
-        SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(file)).iterator();
-        try {
-            it.assertSorted(order);
-            while (it.hasNext()) {
-                it.next();
-            }
-        } finally {
-            it.close();
-        }
-    }
-
-    @DataProvider(name = "validSorts")
-    public Object[][] getValidSorts() {
-        return new Object[][]{
-                {COORDINATE_SORTED_FILE, SAMFileHeader.SortOrder.coordinate},
-                {QUERYNAME_SORTED_FILE, SAMFileHeader.SortOrder.queryname},
-                {QUERYNAME_SORTED_NO_HEADER_SORT, SAMFileHeader.SortOrder.queryname},
-                {COORDINATE_SORTED_FILE, SAMFileHeader.SortOrder.unsorted}
-        };
-    }
-
-
-    @Test(dataProvider = "invalidSorts", expectedExceptions = IllegalStateException.class)
-    public void testSortAssertionFails(String file, SAMFileHeader.SortOrder order) throws Exception {
-        SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(file)).iterator();
-        try {
-            it.assertSorted(order);
-            while (it.hasNext()) {
-                it.next();
-            }
-            Assert.fail("Iterated successfully over " + file + " with invalid sort assertion: " + order.name());
-        } finally {
-            it.close();
-        }
-    }
-
-    @DataProvider(name = "invalidSorts")
-    public Object[][] getInvalidSorts() {
-        return new Object[][]{
-                {QUERYNAME_SORTED_NO_HEADER_SORT, SAMFileHeader.SortOrder.coordinate}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/SamReaderTest.java b/src/test/java/htsjdk/samtools/SamReaderTest.java
deleted file mode 100644
index 093dffb..0000000
--- a/src/test/java/htsjdk/samtools/SamReaderTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class SamReaderTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test(dataProvider = "variousFormatReaderTestCases")
-    public void variousFormatReaderTest(final String inputFile) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        for (final SAMRecord rec : reader) {
-        }
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "variousFormatReaderTestCases")
-    public Object[][] variousFormatReaderTestCases() {
-        final Object[][] scenarios = new Object[][]{
-                {"block_compressed.sam.gz"},
-                {"uncompressed.sam"},
-                {"compressed.sam.gz"},
-                {"compressed.bam"},
-        };
-        return scenarios;
-    }
-
-    // tests for CRAM indexing
-
-    @Test(dataProvider = "SmallCRAMTest")
-    public void CRAMIndexTest(final String inputFile, final String referenceFile, QueryInterval queryInterval, String expectedReadName) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final File reference = new File(TEST_DATA_DIR, referenceFile);
-        final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(reference).open(input);
-        Assert.assertTrue(reader.hasIndex());
-
-        final CloseableIterator<SAMRecord> iterator = reader.query(new QueryInterval[]{queryInterval}, false);
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord r1 = iterator.next();
-        Assert.assertEquals(r1.getReadName(), expectedReadName);
-
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "SmallCRAMTest")
-    public Object[][] CRAMIndexTestData() {
-        final Object[][] testFiles = new Object[][]{
-                {"cram/test.cram", "cram/auxf.fa", new QueryInterval(0, 12, 13), "Jim"},
-                {"cram_with_bai_index.cram", "hg19mini.fasta", new QueryInterval(3, 700, 0), "k"},
-                {"cram_with_crai_index.cram", "hg19mini.fasta", new QueryInterval(2, 350, 0), "i"},
-        };
-        return testFiles;
-    }
-
-    @Test(dataProvider = "NoIndexCRAMTest")
-    public void CRAMNoIndexTest(final String inputFile, final String referenceFile) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final File reference = new File(TEST_DATA_DIR, referenceFile);
-        final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(reference).open(input);
-        Assert.assertFalse(reader.hasIndex());
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "NoIndexCRAMTest")
-    public Object[][] CRAMNoIndexTestData() {
-        final Object[][] testFiles = new Object[][]{
-                {"cram/test2.cram", "cram/auxf.fa"},
-        };
-        return testFiles;
-    }
-
-    // Tests for the SAMRecordFactory usage
-    class SAMRecordFactoryTester extends DefaultSAMRecordFactory {
-        int samRecordsCreated;
-        int bamRecordsCreated;
-
-        public SAMRecord createSAMRecord(final SAMFileHeader header) {
-            ++samRecordsCreated;
-            return super.createSAMRecord(header);
-        }
-
-        public BAMRecord createBAMRecord(final SAMFileHeader header, final int referenceSequenceIndex, final int alignmentStart, final short readNameLength, final short mappingQuality, final int indexingBin, final int cigarLen, final int flags, final int readLen, final int mateReferenceSequenceIndex, final int mateAlignmentStart, final int insertSize, final byte[] variableLengthBlock) {
-            ++bamRecordsCreated;
-            return super.createBAMRecord(header, referenceSequenceIndex, alignmentStart, readNameLength, mappingQuality, indexingBin, cigarLen, flags, readLen, mateReferenceSequenceIndex, mateAlignmentStart, insertSize, variableLengthBlock);
-        }
-    }
-
-    @Test(dataProvider = "variousFormatReaderTestCases")
-    public void samRecordFactoryTest(final String inputFile) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final SAMRecordFactoryTester factory = new SAMRecordFactoryTester();
-        final SamReader reader = SamReaderFactory.makeDefault().samRecordFactory(factory).open(input);
-
-        int i = 0;
-        for (final SAMRecord rec : reader) {
-            ++i;
-        }
-        CloserUtil.close(reader);
-
-        Assert.assertTrue(i > 0);
-        if (inputFile.endsWith(".sam") || inputFile.endsWith(".sam.gz")) Assert.assertEquals(factory.samRecordsCreated, i);
-        else if (inputFile.endsWith(".bam")) Assert.assertEquals(factory.bamRecordsCreated, i);
-    }
-
-    @Test(dataProvider = "cramTestCases", expectedExceptions=IllegalStateException.class)
-    public void testReferenceRequiredForCRAM(final String inputFile, final String ignoredReferenceFile) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        for (final SAMRecord rec : reader) {
-        }
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "cramTestCases")
-    public Object[][] cramTestPositiveCases() {
-        final Object[][] scenarios = new Object[][]{
-                {"cram_with_bai_index.cram", "hg19mini.fasta"},
-                {"cram_with_crai_index.cram", "hg19mini.fasta"},
-        };
-        return scenarios;
-    }
-
-    @Test(dataProvider = "cramTestCases")
-    public void testIterateCRAMWithIndex(final String inputFile, final String referenceFile) {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        final File reference = new File(TEST_DATA_DIR, referenceFile);
-        final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(reference).open(input);
-        for (final SAMRecord rec : reader) {
-        }
-        CloserUtil.close(reader);
-    }
-
-    @Test
-    public void samRecordFactoryNullHeaderTest() {
-        final SAMRecordFactory factory = new DefaultSAMRecordFactory();
-        final SAMRecord samRec = factory.createSAMRecord(null);
-        Assert.assertTrue(samRec.getHeader() == null);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SamSpecIntTest.java b/src/test/java/htsjdk/samtools/SamSpecIntTest.java
deleted file mode 100644
index 8305065..0000000
--- a/src/test/java/htsjdk/samtools/SamSpecIntTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class SamSpecIntTest {
-    private static final File SAM_INPUT = new File("src/test/resources/htsjdk/samtools/inttest.sam");
-    private static final File BAM_INPUT = new File("src/test/resources/htsjdk/samtools/inttest.bam");
-
-    @Test
-    public void testSamIntegers() throws IOException {
-        final List<String> errorMessages = new ArrayList<String>();
-        final SamReader samReader = SamReaderFactory.makeDefault().open(SAM_INPUT);
-        final File bamOutput = File.createTempFile("test", ".bam");
-        final File samOutput = File.createTempFile("test", ".sam");
-        final SAMFileWriter samWriter = new SAMFileWriterFactory().makeWriter(samReader.getFileHeader(), true, samOutput, null);
-        final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeWriter(samReader.getFileHeader(), true, bamOutput, null);
-
-        final SAMRecordIterator iterator = samReader.iterator();
-        while (iterator.hasNext()) {
-            try {
-                final SAMRecord rec = iterator.next();
-                samWriter.addAlignment(rec);
-                bamWriter.addAlignment(rec);
-            } catch (final Throwable e) {
-                System.out.println(e.getMessage());
-                errorMessages.add(e.getMessage());
-            }
-        }
-
-        CloserUtil.close(samReader);
-        samWriter.close();
-        bamWriter.close();
-        Assert.assertEquals(errorMessages.size(), 0);
-        bamOutput.deleteOnExit();
-        samOutput.deleteOnExit();
-    }
-
-    @Test
-    public void testBamIntegers() throws IOException {
-        final List<String> errorMessages = new ArrayList<String>();
-        final SamReader bamReader = SamReaderFactory.makeDefault().open(BAM_INPUT);
-        final File bamOutput = File.createTempFile("test", ".bam");
-        final File samOutput = File.createTempFile("test", ".sam");
-        final SAMFileWriter samWriter = new SAMFileWriterFactory().makeWriter(bamReader.getFileHeader(), true, samOutput, null);
-        final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeWriter(bamReader.getFileHeader(), true, bamOutput, null);
-        final SAMRecordIterator iterator = bamReader.iterator();
-        while (iterator.hasNext()) {
-            try {
-                final SAMRecord rec = iterator.next();
-                samWriter.addAlignment(rec);
-                bamWriter.addAlignment(rec);
-            } catch (final Throwable e) {
-                System.out.println(e.getMessage());
-                errorMessages.add(e.getMessage());
-            }
-        }
-
-        CloserUtil.close(bamReader);
-        samWriter.close();
-        bamWriter.close();
-        Assert.assertEquals(errorMessages.size(), 0);
-        bamOutput.deleteOnExit();
-        samOutput.deleteOnExit();
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/SamStreamsTest.java b/src/test/java/htsjdk/samtools/SamStreamsTest.java
deleted file mode 100644
index c92d6db..0000000
--- a/src/test/java/htsjdk/samtools/SamStreamsTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import htsjdk.samtools.seekablestream.SeekableStreamFactory;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.net.URL;
-
-public class SamStreamsTest {
-
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test(dataProvider = "makeData")
-    public void testDataFormat(final String inputFile, final boolean isGzippedSAMFile, final boolean isBAMFile, final boolean isCRAMFile) throws Exception {
-        final File input = new File(TEST_DATA_DIR, inputFile);
-        try(final InputStream fis = new BufferedInputStream(new FileInputStream(input))) { //must be buffered or the isGzippedSAMFile will blow up
-            Assert.assertEquals(SamStreams.isGzippedSAMFile(fis), isGzippedSAMFile, "isGzippedSAMFile:" + inputFile);
-            Assert.assertEquals(SamStreams.isBAMFile(fis), isBAMFile,   "isBAMFile:" + inputFile);
-            Assert.assertEquals(SamStreams.isCRAMFile(fis), isCRAMFile, "isCRAMFile:" + inputFile);
-        }
-    }
-
-    @DataProvider(name = "makeData")
-    public Object[][] makeData() {
-        final Object[][] scenarios = new Object[][]{
-                //isGzippedSAMFile isBAMFile isCRAMFile
-                {"block_compressed.sam.gz", true,  false, false},
-                {"uncompressed.sam",        false, false, false},
-                {"compressed.sam.gz",       true,  false, false},
-                {"compressed.bam",          true,  true,  false}, //this is slightly weird (responding true to isGzippedSAMFile)
-                {"cram_query_sorted.cram",  false, false, true},
-        };
-        return scenarios;
-    }
-
-    @DataProvider(name = "sourceLikeCram")
-    public Object[][] sourceLikeCramData() {
-        return new Object[][] {
-                {"cram_with_bai_index.cram", true, true },
-                {"compressed.bam", true, false },
-                {"unsorted.sam", true, false },
-                // fails due to https://github.com/samtools/htsjdk/issues/618
-                //{"ftp://ftp.broadinstitute.org/dummy.cram", false, true}
-                {"http://www.broadinstitute.org/dummy.cram", false, true},
-                {"https://www.broadinstitute.org/dummy.cram", false, true},
-                {"http://www.broadinstitute.org/dummy.cram?alt=media", false, true},
-                {"http://www.broadinstitute.org/test?file=my.cram", false, true},
-                {"http://www.broadinstitute.org/test?foo=bar,file=my.cram", false, true},
-                {"http://www.broadinstitute.org/test?file=my.bam", false, false}
-        };
-    }
-
-    @Test(dataProvider = "sourceLikeCram")
-    public void sourceLikeCram(
-            final String resourceName,
-            final boolean isFile,
-            final boolean expected) throws IOException
-    {
-        SeekableStream strm = isFile ?
-            new SeekableFileStream(new File(TEST_DATA_DIR, resourceName)) :
-            SeekableStreamFactory.getInstance().getStreamFor(new URL(resourceName));
-        Assert.assertEquals(SamStreams.sourceLikeCram(strm), expected);
-    }
-
-
-    @DataProvider(name = "sourceLikeBam")
-    public Object[][] sourceLikeBamData() {
-        return new Object[][] {
-                {"cram_with_bai_index.cram", true, false },
-                {"compressed.bam", true, true },
-                {"unsorted.sam", true, false },
-                // fails due to a combination of https://github.com/samtools/htsjdk/issues/619 and
-                // https://github.com/samtools/htsjdk/issues/618
-                //{"ftp://ftp.broadinstitute.org/dummy.cram", false, false},
-                {"ftp://ftp.broadinstitute.org/dummy.bam", false, true},
-                {"http://www.broadinstitute.org/dummy.bam", false, true},
-                {"https://www.broadinstitute.org/dummy.bam", false, true},
-                {"http://www.broadinstitute.org/dummy.bam?alt=media", false, true},
-                {"http://www.broadinstitute.org/test?file=my.bam", false, true},
-                {"http://www.broadinstitute.org/test?foo=bar,file=my.bam", false, true},
-                {"http://www.broadinstitute.org/test?file=my.cram", false, false}
-        };
-    }
-
-    @Test(dataProvider = "sourceLikeBam")
-    public void sourceLikeBam(
-            final String resourceName,
-            final boolean isFile,
-            final boolean expected) throws IOException
-    {
-        SeekableStream strm = isFile ?
-                new SeekableFileStream(new File(TEST_DATA_DIR, resourceName)) :
-                SeekableStreamFactory.getInstance().getStreamFor(new URL(resourceName));
-        Assert.assertEquals(SamStreams.sourceLikeBam(strm), expected);
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/SequenceNameTruncationAndValidationTest.java b/src/test/java/htsjdk/samtools/SequenceNameTruncationAndValidationTest.java
deleted file mode 100644
index 2c3a95c..0000000
--- a/src/test/java/htsjdk/samtools/SequenceNameTruncationAndValidationTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools;
-
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Test new functionality that truncates sequence names at first whitespace in order to deal
- * with older BAMs that had spaces in sequence names.
- *
- * @author alecw at broadinstitute.org
- */
-public class SequenceNameTruncationAndValidationTest {
-    private static File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test(expectedExceptions = {SAMException.class}, dataProvider = "badSequenceNames")
-    public void testSequenceRecordThrowsWhenInvalid(final String sequenceName) {
-        new SAMSequenceRecord(sequenceName, 123);
-        Assert.fail("Should not reach here.");
-    }
-
-    @DataProvider(name = "badSequenceNames")
-    public Object[][] badSequenceNames() {
-        return new Object[][]{
-                {" "},
-                {"\t"},
-                {"\n"},
-                {"="},
-                {"Hi, Mom!"}
-        };
-    }
-
-    @Test(dataProvider = "goodSequenceNames")
-    public void testSequenceRecordPositiveTest(final String sequenceName) {
-        new SAMSequenceRecord(sequenceName, 123);
-    }
-
-    @DataProvider(name = "goodSequenceNames")
-    public Object[][] goodSequenceNames() {
-        return new Object[][]{
-                {"Hi, at Mom!"}
-        };
-    }
-
-    @Test(dataProvider = "samFilesWithSpaceInSequenceName")
-    public void testSamSequenceTruncation(final String filename) {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, filename));
-        for (final SAMSequenceRecord sequence : reader.getFileHeader().getSequenceDictionary().getSequences()) {
-            Assert.assertFalse(sequence.getSequenceName().contains(" "), sequence.getSequenceName());
-        }
-        for (final SAMRecord rec : reader) {
-            Assert.assertFalse(rec.getReferenceName().contains(" "));
-        }
-        CloserUtil.close(reader);
-    }
-
-    @DataProvider(name = "samFilesWithSpaceInSequenceName")
-    public Object[][] samFilesWithSpaceInSequenceName() {
-        return new Object[][]{
-                {"sequenceWithSpace.sam"},
-                {"sequenceWithSpace.bam"}
-        };
-    }
-
-    @Test(expectedExceptions = {SAMFormatException.class})
-    public void testBadRname() {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, "readWithBadRname.sam"));
-        for (final SAMRecord rec : reader) {
-        }
-        Assert.fail("Should not reach here.");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/ValidateSamFileTest.java b/src/test/java/htsjdk/samtools/ValidateSamFileTest.java
deleted file mode 100644
index 4ce0b7a..0000000
--- a/src/test/java/htsjdk/samtools/ValidateSamFileTest.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009-2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools;
-
-import htsjdk.samtools.BamIndexValidator.IndexValidationStringency;
-import htsjdk.samtools.metrics.MetricBase;
-import htsjdk.samtools.metrics.MetricsFile;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.Histogram;
-import htsjdk.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.nio.channels.FileChannel;
-import java.nio.file.StandardOpenOption;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.LineNumberReader;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-/**
- * Tests almost all error conditions detected by the sam file validator. The
- * conditions not tested are proactively prevented by sam generation code.
- *
- * @author Doug Voet
- */
-public class ValidateSamFileTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/ValidateSamFileTest");
-    private static final int TERMINATION_GZIP_BLOCK_SIZE = 28;
-    private static final int RANDOM_NUMBER_TRUNC_BYTE = 128;
-
-    @Test
-    public void testValidSamFile() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(new File(TEST_DATA_DIR, "valid.sam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertTrue(results.isEmpty());
-    }
-
-    @Test
-    public void testSamFileVersion1pt5() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(new File(TEST_DATA_DIR, "test_samfile_version_1pt5.bam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertTrue(results.isEmpty());
-    }
-
-    @Test
-    public void testSortOrder() throws IOException {
-        Histogram<String> results = executeValidation(SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open(new File(TEST_DATA_DIR, "invalid_coord_sort_order.sam")), null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.RECORD_OUT_OF_ORDER.getHistogramString()).getValue(), 1.0);
-        results = executeValidation(SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open(new File(TEST_DATA_DIR, "invalid_queryname_sort_order.sam")), null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.RECORD_OUT_OF_ORDER.getHistogramString()).getValue(), 5.0);
-    }
-
-    @Test
-    public void testVerbose() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 20; i++) {
-            samBuilder.addFrag(String.valueOf(i), 1, i, false);
-        }
-        for (final SAMRecord record : samBuilder) {
-            record.setProperPairFlag(true);
-        }
-
-        final StringWriter results = new StringWriter();
-        final SamFileValidator validator = new SamFileValidator(new PrintWriter(results), 8000);
-        validator.setVerbose(true, 10);
-        validator.validateSamFileVerbose(samBuilder.getSamReader(), null);
-
-        final int lineCount = results.toString().split("\n").length;
-        Assert.assertEquals(lineCount, 11);
-    }
-
-    @Test
-    public void testUnpairedRecords() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 6; i++) {
-            samBuilder.addFrag(String.valueOf(i), i, i, false);
-        }
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next().setProperPairFlag(true);
-        records.next().setMateUnmappedFlag(true);
-        records.next().setMateNegativeStrandFlag(true);
-        records.next().setFirstOfPairFlag(true);
-        records.next().setSecondOfPairFlag(true);
-        records.next().setMateReferenceIndex(1);
-
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_NEG_STRAND.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_FIRST_OF_PAIR.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_SECOND_OF_PAIR.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_MATE_REF_INDEX.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testPairedRecords() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 5; i++) {
-            samBuilder.addPair(String.valueOf(i), i, i, i + 100);
-        }
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next().setMateReferenceName("*");
-        records.next().setMateAlignmentStart(Integer.MAX_VALUE);
-        records.next().setMateAlignmentStart(records.next().getAlignmentStart() + 1);
-        records.next().setMateNegativeStrandFlag(!records.next().getReadNegativeStrandFlag());
-        records.next().setMateReferenceIndex(records.next().getReferenceIndex() + 1);
-        records.next().setMateUnmappedFlag(!records.next().getReadUnmappedFlag());
-
-
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_ALIGNMENT_START.getHistogramString()).getValue(), 3.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_FLAG_MATE_NEG_STRAND.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_MATE_ALIGNMENT_START.getHistogramString()).getValue(), 2.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_MATE_REF_INDEX.getHistogramString()).getValue(), 2.0);
-    }
-
-    @Test(dataProvider = "missingMateTestCases")
-    public void testMissingMate(final SAMFileHeader.SortOrder sortOrder) throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder(true, sortOrder);
-
-        samBuilder.addPair(String.valueOf(1), 1, 1, 101);
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next();
-        records.remove();
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.MATE_NOT_FOUND.getHistogramString()).getValue(), 1.0);
-    }
-
-    @DataProvider(name = "missingMateTestCases")
-    public Object[][] missingMateTestCases() {
-        return new Object[][]{
-                {SAMFileHeader.SortOrder.coordinate},
-                {SAMFileHeader.SortOrder.queryname},
-                {SAMFileHeader.SortOrder.unsorted},
-        };
-    }
-
-    @Test
-    public void testUnmappedRecords() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 4; i++) {
-            samBuilder.addUnmappedFragment(String.valueOf(i));
-        }
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next().setReadNegativeStrandFlag(true);
-        records.next().setNotPrimaryAlignmentFlag(true);
-        records.next().setMappingQuality(10);
-        records.next().setCigarString("36M");
-
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_NOT_PRIM_ALIGNMENT.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_MAPPING_QUALITY.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testMappedRecords() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 2; i++) {
-            samBuilder.addFrag(String.valueOf(i), i, i, false);
-        }
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next().setCigarString("25M3S25M");
-        records.next().setReferenceName("*");
-
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_CIGAR.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_READ_UNMAPPED.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_TAG_NM.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testNmFlagValidation() throws IOException {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
-        for (int i = 0; i < 3; i++) {
-            samBuilder.addFrag(String.valueOf(i), i, i + 1, false);
-        }
-        final Iterator<SAMRecord> records = samBuilder.iterator();
-        records.next().setAttribute(ReservedTagConstants.NM, 4);
-
-        // PIC-215: Confirm correct NM value when there is an insertion and a deletion.
-        final SAMRecord recordWithInsert = records.next();
-        final byte[] sequence = recordWithInsert.getReadBases();
-        Arrays.fill(sequence, (byte) 'A');
-        recordWithInsert.setReadBases(sequence);
-        recordWithInsert.setCigarString("1D" + Integer.toString(sequence.length - 1) + "M1I");
-        recordWithInsert.setAttribute(ReservedTagConstants.NM, 2);
-
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), new ReferenceSequenceFile() {
-            private int index = 0;
-
-            public SAMSequenceDictionary getSequenceDictionary() {
-                return null;
-            }
-
-            public ReferenceSequence nextSequence() {
-                final byte[] bases = new byte[10000];
-                Arrays.fill(bases, (byte) 'A');
-                return new ReferenceSequence("foo", index++, bases);
-            }
-
-            public void reset() {
-                this.index = 0;
-            }
-
-            public boolean isIndexed() { return false; }
-
-            public ReferenceSequence getSequence(final String contig) {
-                throw new UnsupportedOperationException();
-            }
-
-            public ReferenceSequence getSubsequenceAt(final String contig, final long start, final long stop) {
-                throw new UnsupportedOperationException();
-            }
-
-            @Override
-            public void close() throws IOException {
-                //no-op
-            }
-        }, IndexValidationStringency.EXHAUSTIVE);
-
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_TAG_NM.getHistogramString()).getValue(), 1.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_TAG_NM.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test(dataProvider = "testMateCigarScenarios")
-    public void testMateCigarScenarios(final String scenario, final String inputFile, final SAMValidationError.Type expectedError)
-            throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, inputFile));
-        final Histogram<String> results = executeValidation(reader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertNotNull(results.get(expectedError.getHistogramString()));
-        Assert.assertEquals(results.get(expectedError.getHistogramString()).getValue(), 1.0);
-    }
-
-
-    @DataProvider(name = "testMateCigarScenarios")
-    public Object[][] testMateCigarScenarios() {
-        return new Object[][]{
-                {"invalid mate cigar", "invalid_mate_cigar_string.sam", SAMValidationError.Type.MISMATCH_MATE_CIGAR_STRING},
-                {"inappropriate mate cigar", "inappropriate_mate_cigar_string.sam", SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE}
-        };
-    }
-
-    @Test(dataProvider = "testTruncatedScenarios")
-    public void testTruncated(final String scenario, final String inputFile, final SAMValidationError.Type expectedError)
-            throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(new File(TEST_DATA_DIR, inputFile));
-        final Histogram<String> results = executeValidation(reader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertNotNull(results.get(expectedError.getHistogramString()));
-        Assert.assertEquals(results.get(expectedError.getHistogramString()).getValue(), 1.0);
-    }
-
-    @DataProvider(name = "testTruncatedScenarios")
-    public Object[][] testTruncatedScenarios() {
-        return new Object[][]{
-                {"truncated bam", "truncated.bam", SAMValidationError.Type.TRUNCATED_FILE},
-                {"truncated quals", "truncated_quals.sam", SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_QUALS_LENGTH},
-                // TODO: Because validation is turned off when parsing, this error is not detectable currently by validator.
-                //{"truncated tag", "truncated_tag.sam", SAMValidationError.Type.TRUNCATED_FILE},
-                // TODO: Currently, this is not considered an error.  Should it be?
-                //{"hanging tab", "hanging_tab.sam", SAMValidationError.Type.TRUNCATED_FILE},
-        };
-    }
-
-    @Test(expectedExceptions = SAMException.class, dataProvider = "testFatalParsingErrors")
-    public void testFatalParsingErrors(final String scenario, final String inputFile) throws Exception {
-        final SamReader reader = SamReaderFactory.makeDefault().open(new File(TEST_DATA_DIR, inputFile));
-        executeValidation(reader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.fail("Exception should have been thrown.");
-    }
-
-    @DataProvider(name = "testFatalParsingErrors")
-    public Object[][] testFatalParsingErrorScenarios() {
-        return new Object[][]{
-                {"missing fields", "missing_fields.sam"},
-                {"zero length read", "zero_length_read.sam"}
-        };
-    }
-
-    @Test
-    public void testHeaderVersionValidation() throws Exception {
-        final String header = "@HD	VN:Hi,Mom!	SO:queryname";
-        final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
-        final SamReader samReader = SamReaderFactory.makeDefault().open(SamInputResource.of(strm));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test(enabled = false, description = "File is actually valid for Standard quality scores so this test fails with an NPE.")
-    public void testQualityFormatValidation() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().open(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/illumina-as-standard.bam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        final Histogram.Bin<String> bin = results.get(SAMValidationError.Type.INVALID_QUALITY_FORMAT.getHistogramString());
-        final double value = bin.getValue();
-        Assert.assertEquals(value, 1.0);
-    }
-
-    @Test
-    public void testCigarOffEndOfReferenceValidation() throws Exception {
-        final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-        samBuilder.addFrag(String.valueOf(0), 0, 1, false);
-        final int contigLength = samBuilder.getHeader().getSequence(0).getSequenceLength();
-        // Should hang off the end.
-        samBuilder.addFrag(String.valueOf(1), 0, contigLength - 1, false);
-        final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertNotNull(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString()));
-        Assert.assertEquals(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test(expectedExceptions = SAMFormatException.class)
-    public void testConflictingTags() throws Exception {
-        final String header = "@HD	VN:1.0	SO:queryname	SO:coordinate";
-        final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
-        final SamReader reader = SamReaderFactory.makeDefault().open(SamInputResource.of(strm));
-        Assert.fail("Exception should have been thrown.");
-    }
-
-    @Test
-    public void testRedundantTags() throws Exception {
-        final String header = "@HD	VN:1.0	SO:coordinate	SO:coordinate";
-        final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
-        final SamReader samReader = SamReaderFactory.makeDefault().open(SamInputResource.of(strm));
-        Assert.assertEquals(SAMFileHeader.SortOrder.coordinate, samReader.getFileHeader().getSortOrder());
-        CloserUtil.close(samReader);
-    }
-
-    @Test
-    public void testHeaderValidation() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open(new File(TEST_DATA_DIR, "buggyHeader.sam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.UNRECOGNIZED_HEADER_TYPE.getHistogramString()).getValue(), 3.0);
-        Assert.assertEquals(results.get(SAMValidationError.Type.HEADER_TAG_MULTIPLY_DEFINED.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testPlatformMissing() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open((new File(TEST_DATA_DIR, "missing_platform_unit.sam")));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_PLATFORM_VALUE.getHistogramString()).getValue(), 1.0);
-    }
-    
-    @Test
-    public void testPlatformInvalid() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open((new File(TEST_DATA_DIR, "invalid_platform_unit.sam")));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_PLATFORM_VALUE.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testDuplicateRGIDs() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .open((new File(TEST_DATA_DIR, "duplicate_rg.sam")));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.DUPLICATE_READ_GROUP_ID.getHistogramString()).getValue(), 1.0);
-    }
-
-    @Test
-    public void testIndexFileValidation() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT)
-                .enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES).open((new File(TEST_DATA_DIR, "bad_index.bam")));
-
-        Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_INDEX_FILE_POINTER.getHistogramString()).getValue(), 1.0);
-
-        results = executeValidation(samReader, null, IndexValidationStringency.LESS_EXHAUSTIVE);
-        Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_INDEX_FILE_POINTER.getHistogramString()).getValue(), 1.0);
-
-    }
-
-    private void testHeaderVersion(final String version, final boolean expectValid) throws Exception {
-        final File samFile = File.createTempFile("validateHeader.", ".sam");
-        samFile.deleteOnExit();
-        final PrintWriter pw = new PrintWriter(samFile);
-        pw.println("@HD\tVN:" + version);
-        pw.close();
-        final SamReader reader = SamReaderFactory.makeDefault().open(samFile);
-        final Histogram<String> results = executeValidation(reader, null, IndexValidationStringency.EXHAUSTIVE);
-        if (expectValid) Assert.assertNull(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()));
-        else {
-            Assert.assertNotNull(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()));
-            Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()).getValue(), 1.0);
-        }
-    }
-
-    @Test
-    public void testHeaderVersions() throws Exception {
-        // Test the acceptable versions
-        for (final String version : SAMFileHeader.ACCEPTABLE_VERSIONS) {
-            testHeaderVersion(version, true);
-        }
-
-        // Test an unacceptable version
-        testHeaderVersion("1.6", false);
-    }
-
-    @Test(enabled = false)
-    public void duplicateReads() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(new File(TEST_DATA_DIR, "duplicated_reads.sam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertFalse(results.isEmpty());
-        Assert.assertEquals(results.get(SAMValidationError.Type.MATES_ARE_SAME_END.getHistogramString()).getValue(), 2.0);
-    }
-
-    @Test
-    public void duplicateReadsOutOfOrder() throws Exception {
-        final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(new File(TEST_DATA_DIR, "duplicated_reads_out_of_order.sam"));
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertFalse(results.isEmpty());
-        Assert.assertEquals(results.get(SAMValidationError.Type.MATES_ARE_SAME_END.getHistogramString()).getValue(), 2.0);
-    }
-
-
-    @DataProvider(name = "TagCorrectlyProcessData")
-    public Object[][] tagCorrectlyProcessData() throws IOException {
-        final String E2TagCorrectlyProcessTestData =
-                "@HD\tVN:1.0\tSO:unsorted\n" +
-                        "@SQ\tSN:chr1\tLN:101\n" +
-                        "@RG\tID:0\tSM:Hi,Mom!\n" +
-                        "E\t147\tchr1\t15\t255\t10M\t=\t2\t-30\tCAACAGAAGC\t)'.*.+2,))\tE2:Z:CAA";
-
-        final String U2TagCorrectlyProcessTestData =
-                "@HD\tVN:1.0\tSO:unsorted\n" +
-                        "@SQ\tSN:chr1\tLN:101\n" +
-                        "@RG\tID:0\tSM:Hi,Mom!\n" +
-                        "E\t147\tchr1\t15\t255\t10M\t=\t2\t-30\tCAACAGAAGC\t)'.*.+2,))\tU2:Z:CAA";
-
-        return new Object[][]{
-                {E2TagCorrectlyProcessTestData.getBytes(), SAMValidationError.Type.E2_BASE_EQUALS_PRIMARY_BASE},
-                {E2TagCorrectlyProcessTestData.getBytes(), SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_E2_LENGTH},
-                {U2TagCorrectlyProcessTestData.getBytes(), SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_U2_LENGTH}
-        };
-    }
-
-    @Test(dataProvider = "TagCorrectlyProcessData")
-    public void tagCorrectlyProcessTest(byte[] bytesFromFile,
-                                        SAMValidationError.Type errorType) throws Exception {
-        final SamReader samReader = SamReaderFactory
-                .makeDefault()
-                .validationStringency(ValidationStringency.SILENT)
-                .open(
-                        SamInputResource.of(
-                                new ByteArrayInputStream(bytesFromFile)
-                        )
-                );
-        final Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE);
-        Assert.assertEquals(results.get(errorType.getHistogramString()).getValue(), 1.0);
-    }
-
-    @DataProvider(name = "validateBamFileTerminationData")
-    public Object[][] validateBamFileTerminationData() throws IOException {
-        return new Object[][]{
-                {getBrokenFile(TERMINATION_GZIP_BLOCK_SIZE), SAMValidationError.Type.BAM_FILE_MISSING_TERMINATOR_BLOCK},
-                {getBrokenFile(RANDOM_NUMBER_TRUNC_BYTE), SAMValidationError.Type.TRUNCATED_FILE}
-        };
-    }
-
-    @Test(dataProvider = "validateBamFileTerminationData")
-    public void validateBamFileTerminationTest(File file, SAMValidationError.Type errorType) throws IOException {
-        final SamFileValidator samFileValidator = new SamFileValidator(new PrintWriter(System.out), 8000);
-        samFileValidator.validateBamFileTermination(file);
-        Assert.assertEquals(samFileValidator.getErrorsByType().get(errorType).getValue(), 1.0);
-    }
-
-    private Histogram<String> executeValidation(final SamReader samReader, final ReferenceSequenceFile reference,
-                                                final IndexValidationStringency stringency) throws IOException {
-        return executeValidationWithErrorIgnoring(samReader, reference, stringency, Collections.EMPTY_LIST);
-    }
-
-    private Histogram<String> executeValidationWithErrorIgnoring(final SamReader samReader, final ReferenceSequenceFile reference,
-                                                                 final IndexValidationStringency stringency, Collection<SAMValidationError.Type> ignoringError) throws IOException {
-        final File outFile = File.createTempFile("validation", ".txt");
-        outFile.deleteOnExit();
-
-        final PrintWriter out = new PrintWriter(outFile);
-        final SamFileValidator samFileValidator = new SamFileValidator(out, 8000);
-        samFileValidator.setIndexValidationStringency(stringency).setErrorsToIgnore(ignoringError);
-        samFileValidator.validateSamFileSummary(samReader, reference);
-
-        final LineNumberReader reader = new LineNumberReader(new FileReader(outFile));
-        if (reader.readLine().equals("No errors found")) {
-            return new Histogram<>();
-        }
-        final MetricsFile<MetricBase, String> outputFile = new MetricsFile<>();
-        outputFile.read(new FileReader(outFile));
-        Assert.assertNotNull(outputFile.getHistogram());
-        return outputFile.getHistogram();
-    }
-
-    private File getBrokenFile(int truncByte) throws IOException {
-        final FileChannel stream = FileChannel.open(new File(TEST_DATA_DIR + "/test_samfile_version_1pt5.bam").toPath());
-        final File breakingFile = File.createTempFile("trunc", ".bam");
-        breakingFile.deleteOnExit();
-        FileChannel.open(breakingFile.toPath(), StandardOpenOption.WRITE).transferFrom(stream, 0, stream.size() - truncByte);
-        return breakingFile;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/CRAIEntryTest.java b/src/test/java/htsjdk/samtools/cram/CRAIEntryTest.java
deleted file mode 100644
index 6cf4934..0000000
--- a/src/test/java/htsjdk/samtools/cram/CRAIEntryTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.Slice;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by vadim on 25/08/2015.
- */
-public class CRAIEntryTest {
-
-    @Test
-    public void testFromContainer() {
-        final Container container = new Container();
-        final Slice slice = new Slice();
-        slice.sequenceId = 1;
-        slice.alignmentStart = 2;
-        slice.alignmentSpan = 3;
-        slice.containerOffset = 4;
-        container.landmarks = new int[]{5};
-        container.slices = new Slice[]{slice};
-
-        final List<CRAIEntry> entries = CRAIEntry.fromContainer(container);
-        Assert.assertNotNull(entries);
-        Assert.assertEquals(entries.size(), 1);
-        final CRAIEntry entry = entries.get(0);
-
-        Assert.assertEquals(entry.sequenceId, slice.sequenceId);
-        Assert.assertEquals(entry.alignmentStart, slice.alignmentStart);
-        Assert.assertEquals(entry.alignmentSpan, slice.alignmentSpan);
-        Assert.assertEquals(entry.containerStartOffset, slice.containerOffset);
-    }
-
-    @Test
-    public void testFromCraiLine() {
-        int counter = 1;
-        final int sequenceId = counter++;
-        final int alignmentStart = counter++;
-        final int alignmentSpan = counter++;
-        final int containerOffset = Integer.MAX_VALUE + counter++;
-        final int sliceOffset = counter++;
-        final int sliceSise = counter++;
-
-        final String line = String.format("%d\t%d\t%d\t%d\t%d\t%d", sequenceId, alignmentStart, alignmentSpan, containerOffset, sliceOffset, sliceSise);
-        final CRAIEntry entry = new CRAIEntry(line);
-        Assert.assertNotNull(entry);
-        Assert.assertEquals(entry.sequenceId, sequenceId);
-        Assert.assertEquals(entry.alignmentStart, alignmentStart);
-        Assert.assertEquals(entry.alignmentSpan, alignmentSpan);
-        Assert.assertEquals(entry.containerStartOffset, containerOffset);
-    }
-
-    @Test
-    public void testIntersetcsZeroSpan() {
-        Assert.assertFalse(CRAIEntry.intersect(newEntry(1, 1), newEntry(1, 0)));
-    }
-
-    @Test
-    public void testIntersetcsSame() {
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 1), newEntry(1, 1)));
-    }
-
-    @Test
-    public void testIntersetcsIncluded() {
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 2), newEntry(1, 1)));
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 2), newEntry(2, 1)));
-
-        // is symmetrical?
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 1), newEntry(1, 2)));
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(2, 1), newEntry(1, 2)));
-    }
-
-    @Test
-    public void testIntersetcsOvertlaping() {
-        Assert.assertFalse(CRAIEntry.intersect(newEntry(1, 2), newEntry(0, 1)));
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 2), newEntry(0, 2)));
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(1, 2), newEntry(2, 1)));
-        Assert.assertFalse(CRAIEntry.intersect(newEntry(1, 2), newEntry(3, 1)));
-    }
-
-    @Test
-    public void testIntersetcsAnotherSequence() {
-        Assert.assertTrue(CRAIEntry.intersect(newEntry(10, 1, 2), newEntry(10, 2, 1)));
-        Assert.assertFalse(CRAIEntry.intersect(newEntry(10, 1, 2), newEntry(11, 2, 1)));
-    }
-
-    @Test
-    public void testCompareTo () {
-        final List<CRAIEntry> list = new ArrayList<CRAIEntry>(2);
-        CRAIEntry e1;
-        CRAIEntry e2;
-
-        e1 = new CRAIEntry();
-        e1.sequenceId = 100;
-        e2 = new CRAIEntry();
-        e2.sequenceId = 200;
-        list.add(e2);
-        list.add(e1);
-        Assert.assertTrue(list.get(1).sequenceId < list.get(0).sequenceId);
-        Collections.sort(list);
-        Assert.assertTrue(list.get(0).sequenceId < list.get(1).sequenceId);
-
-        list.clear();
-        e1 = new CRAIEntry();
-        e1.alignmentStart = 100;
-        e2 = new CRAIEntry();
-        e2.alignmentStart = 200;
-        list.add(e2);
-        list.add(e1);
-        Assert.assertTrue(list.get(1).alignmentStart < list.get(0).alignmentStart);
-        Collections.sort(list);
-        Assert.assertTrue(list.get(0).alignmentStart < list.get(1).alignmentStart);
-
-        list.clear();
-        e1 = new CRAIEntry();
-        e1.containerStartOffset = 100;
-        e2 = new CRAIEntry();
-        e2.containerStartOffset = 200;
-        list.add(e2);
-        list.add(e1);
-        Assert.assertTrue(list.get(1).containerStartOffset < list.get(0).containerStartOffset);
-        Collections.sort(list);
-        Assert.assertTrue(list.get(0).containerStartOffset < list.get(1).containerStartOffset);
-    }
-
-    private static CRAIEntry newEntry(final int start, final int span) {
-        return newEntry(1, start, span);
-    }
-
-    private static CRAIEntry newEntry(final int seqId, final int start, final int span) {
-        final CRAIEntry e1 = new CRAIEntry();
-        e1.sequenceId = seqId;
-        e1.alignmentStart = start;
-        e1.alignmentSpan = span;
-        return e1;
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/cram/CRAIIndexTest.java b/src/test/java/htsjdk/samtools/cram/CRAIIndexTest.java
deleted file mode 100644
index 7ebdb75..0000000
--- a/src/test/java/htsjdk/samtools/cram/CRAIIndexTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.BAMFileSpan;
-import htsjdk.samtools.CRAMCRAIIndexer;
-import htsjdk.samtools.DiskBasedBAMFileIndex;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.seekablestream.SeekableBufferedStream;
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.BiFunction;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Created by vadim on 25/08/2015.
- */
-public class CRAIIndexTest {
-
-    @Test
-    public void testFind() throws IOException, CloneNotSupportedException {
-        final List<CRAIEntry> index = new ArrayList<CRAIEntry>();
-
-        final int sequenceId = 1;
-        CRAIEntry e = new CRAIEntry();
-        e.sequenceId = sequenceId;
-        e.alignmentStart = 1;
-        e.alignmentSpan = 1;
-        e.containerStartOffset = 1;
-        e.sliceOffset = 1;
-        e.sliceSize = 0;
-        index.add(e);
-
-        e = e.clone();
-        e.alignmentStart = 2;
-        e.containerStartOffset = 2;
-        index.add(e);
-
-        e = e.clone();
-        e.alignmentStart = 3;
-        e.containerStartOffset = 3;
-        index.add(e);
-
-        Assert.assertFalse(allFoundEntriesIntersectQueryInFind(index, sequenceId, 1, 0));
-
-        Assert.assertTrue(allFoundEntriesIntersectQueryInFind(index, sequenceId, 1, 1));
-        Assert.assertTrue(allFoundEntriesIntersectQueryInFind(index, sequenceId, 1, 2));
-        Assert.assertTrue(allFoundEntriesIntersectQueryInFind(index, sequenceId, 2, 1));
-        Assert.assertTrue(allFoundEntriesIntersectQueryInFind(index, sequenceId, 1, 3));
-
-        final int nonExistentSequenceId = 2;
-        Assert.assertFalse(allFoundEntriesIntersectQueryInFind(index, nonExistentSequenceId, 2, 1));
-        // a query starting beyond all entries:
-        Assert.assertFalse(allFoundEntriesIntersectQueryInFind(index, sequenceId, 4, 1));
-    }
-
-    private boolean allFoundEntriesIntersectQueryInFind(final List<CRAIEntry> index, final int sequenceId, final int start, final int span) {
-        int foundCount = 0;
-        for (final CRAIEntry found : CRAIIndex.find(index, sequenceId, start, span)) {
-            foundCount++;
-            Assert.assertEquals(found.sequenceId, sequenceId);
-            boolean intersects = false;
-            for (int pos = Math.min(found.alignmentStart, start); pos <= Math.max(found.alignmentStart + found.alignmentSpan, start + span); pos++) {
-                if (pos >= found.alignmentStart && pos >= start &&
-                        pos <= found.alignmentStart + found.alignmentSpan && pos <= start + span) {
-                    intersects = true;
-                    break;
-                }
-            }
-            if (!intersects) {
-                return false;
-            }
-        }
-        return foundCount > 0;
-    }
-
-    @Test(expectedExceptions = NullPointerException.class)
-    public void testCraiRequiresDictionary() throws IOException {
-        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-             final GZIPOutputStream gos = new GZIPOutputStream(baos);
-             final BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
-            CRAIIndex.openCraiFileAsBaiStream(bis, null);
-        }
-    }
-
-    @Test
-    public void testCraiInMemory() throws IOException {
-        doCRAITest(this::getBaiStreamFromMemory);
-    }
-
-    @Test
-    public void testCraiFromFile() throws IOException {
-        doCRAITest(this::getBaiStreamFromFile);
-    }
-
-    private void doCRAITest(BiFunction<SAMSequenceDictionary, List<CRAIEntry>, SeekableStream> getBaiStreamForIndex) throws IOException {
-        final ArrayList<CRAIEntry> index = new ArrayList<CRAIEntry>();
-        final CRAIEntry entry = new CRAIEntry();
-        entry.sequenceId = 0;
-        entry.alignmentStart = 1;
-        entry.alignmentSpan = 2;
-        entry.sliceOffset = 3;
-        entry.sliceSize = 4;
-        entry.containerStartOffset = 5;
-        index.add(entry);
-
-        final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
-        dictionary.addSequence(new SAMSequenceRecord("1", 100));
-
-        final SeekableStream baiStream = getBaiStreamForIndex.apply(dictionary, index);
-
-        final DiskBasedBAMFileIndex bamIndex = new DiskBasedBAMFileIndex(baiStream, dictionary);
-        final BAMFileSpan span = bamIndex.getSpanOverlapping(entry.sequenceId, entry.alignmentStart, entry.alignmentStart);
-        Assert.assertNotNull(span);
-        final long[] coordinateArray = span.toCoordinateArray();
-        Assert.assertEquals(coordinateArray.length, 2);
-        Assert.assertEquals(coordinateArray[0] >> 16, entry.containerStartOffset);
-        Assert.assertEquals(coordinateArray[1] & 0xFFFF, 1);
-    }
-
-    public SeekableStream getBaiStreamFromMemory(SAMSequenceDictionary dictionary, final List<CRAIEntry> index) {
-        try {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            SAMFileHeader samHeader = new SAMFileHeader();
-            samHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-            CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(baos, samHeader);
-            for (CRAIEntry entry: index) {
-                indexer.addEntry(entry);
-            }
-            indexer.finish();
-            final SeekableStream baiStream = CRAIIndex.openCraiFileAsBaiStream(new ByteArrayInputStream(baos.toByteArray()), dictionary);
-            Assert.assertNotNull(baiStream);
-            return baiStream;
-        }
-        catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private SeekableStream getBaiStreamFromFile(SAMSequenceDictionary dictionary, final List<CRAIEntry> index) {
-        try {
-            final File file = File.createTempFile("test", ".crai");
-            file.deleteOnExit();
-            final FileOutputStream fos = new FileOutputStream(file);
-            SAMFileHeader samHeader = new SAMFileHeader();
-            samHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-            CRAMCRAIIndexer indexer = new CRAMCRAIIndexer(fos, samHeader);
-            for (CRAIEntry entry: index) {
-                indexer.addEntry(entry);
-            }
-            indexer.finish();
-            final SeekableStream baiStream = CRAIIndex.openCraiFileAsBaiStream(new SeekableBufferedStream(new SeekableFileStream(file)), dictionary);
-            Assert.assertNotNull(baiStream);
-            return baiStream;
-        }
-        catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Test
-    public void testGetLeftmost() throws CloneNotSupportedException {
-        final List<CRAIEntry> index = new ArrayList<CRAIEntry>();
-        Assert.assertNull(CRAIIndex.getLeftmost(index));
-
-        final CRAIEntry e1 = new CRAIEntry();
-        e1.sequenceId = 1;
-        e1.alignmentStart = 2;
-        e1.alignmentSpan = 3;
-        e1.containerStartOffset = 4;
-        e1.sliceOffset = 5;
-        e1.sliceSize = 6;
-        index.add(e1);
-        // trivial case of single entry in index:
-        Assert.assertEquals(e1, CRAIIndex.getLeftmost(index));
-
-        final CRAIEntry e2 = e1.clone();
-        e2.alignmentStart = e1.alignmentStart + 1;
-        index.add(e2);
-        Assert.assertEquals(e1, CRAIIndex.getLeftmost(index));
-    }
-
-    @Test
-    public void testFindLastAlignedEntry() {
-        final List<CRAIEntry> index = new ArrayList<CRAIEntry>();
-        Assert.assertEquals(-1, CRAIIndex.findLastAlignedEntry(index));
-
-        // Scan all allowed combinations of 10 mapped/unmapped entries and assert the found last aligned entry:
-        final int indexSize = 10;
-        for (int lastAligned = 0; lastAligned < indexSize; lastAligned++) {
-            index.clear();
-            for (int i = 0; i < indexSize; i++) {
-                final CRAIEntry e = new CRAIEntry();
-
-                e.sequenceId = (i <= lastAligned ? 0 : -1);
-                e.alignmentStart = i;
-                index.add(e);
-            }
-            // check expectations are correct before calling findLastAlignedEntry method:
-            Assert.assertTrue(index.get(lastAligned).sequenceId != -1);
-            if (lastAligned < index.size() - 1) {
-                Assert.assertTrue(index.get(lastAligned + 1).sequenceId == -1);
-            }
-            // assert the the found value matches the expectation:
-            Assert.assertEquals(CRAIIndex.findLastAlignedEntry(index), lastAligned);
-        }
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/cram/LosslessRoundTripTest.java b/src/test/java/htsjdk/samtools/cram/LosslessRoundTripTest.java
deleted file mode 100644
index 67cd483..0000000
--- a/src/test/java/htsjdk/samtools/cram/LosslessRoundTripTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.CRAMFileReader;
-import htsjdk.samtools.CRAMFileWriter;
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.CigarOperator;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMReadGroupRecord;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Created by vadim on 19/02/2016.
- */
-public class LosslessRoundTripTest {
-    @Test
-    public void test_MD_NM() throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        InMemoryReferenceSequenceFile rsf = new InMemoryReferenceSequenceFile();
-        rsf.add("1", "AAA".getBytes());
-        ReferenceSource source = new ReferenceSource(rsf);
-
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        samFileHeader.addSequence(new SAMSequenceRecord("1", 3));
-        samFileHeader.addReadGroup(new SAMReadGroupRecord("some read group"));
-
-        CRAMFileWriter w = new CRAMFileWriter(baos, source, samFileHeader, null);
-        SAMRecord record = new SAMRecord(samFileHeader);
-        record.setReadName("name");
-        record.setAlignmentStart(1);
-        record.setReferenceIndex(0);
-        record.setCigarString("3M");
-        record.setReadUnmappedFlag(false);
-        record.setReadBases("AAC".getBytes());
-        record.setBaseQualities("!!!".getBytes());
-
-        record.setAttribute("RG", "some read group");
-        // setting some bizzar values to provoke test failure if the values are auto-restored while reading CRAM:
-        record.setAttribute("MD", "nonsense");
-        record.setAttribute("NM", 123);
-        w.addAlignment(record);
-        w.close();
-
-        byte[] cramBytes = baos.toByteArray();
-        InputStream cramInputStream = new ByteArrayInputStream(cramBytes);
-        CRAMFileReader reader = new CRAMFileReader(cramInputStream, (File) null, source, ValidationStringency.STRICT);
-        final SAMRecordIterator iterator = reader.getIterator();
-        Assert.assertTrue(iterator.hasNext());
-        SAMRecord record2 = iterator.next();
-        Assert.assertNotNull(record2);
-
-        Assert.assertEquals(record2, record);
-        reader.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/VersionTest.java b/src/test/java/htsjdk/samtools/cram/VersionTest.java
deleted file mode 100644
index 0602eb3..0000000
--- a/src/test/java/htsjdk/samtools/cram/VersionTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package htsjdk.samtools.cram;
-
-import htsjdk.samtools.CRAMFileWriter;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.build.CramIO;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.io.CramInt;
-import htsjdk.samtools.cram.io.InputStreamUtils;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.cram.structure.Block;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramHeader;
-import htsjdk.samtools.seekablestream.SeekableMemoryStream;
-import htsjdk.samtools.seekablestream.SeekableStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.zip.CRC32;
-
-/**
- * Created by vadim on 18/02/2016.
- */
-public class VersionTest {
-    /**
-     * The test purpose is to ensure that a CRAM written by {@link CRAMFileWriter} adheres to CRAM3 specs expectations:
-     * 1. version 3.+, via both actual byte comparison and CramIO API
-     * 2. EOF container
-     * 3. trailing 4 bytes of a container bytes are a valid crc32 of previous bytes in the container
-     * 3. trailing 4 bytes of a block bytes are a valid crc32 of previous bytes in the block
-     * @throws IOException
-     */
-    @Test
-    public void test_V3() throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ReferenceSource source = new ReferenceSource((File) null);
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        Version version = CramVersions.CRAM_v3;
-        CRAMFileWriter w = new CRAMFileWriter(baos, source, samFileHeader, null);
-        SAMRecord record = new SAMRecord(samFileHeader);
-        record.setReadName("name");
-        record.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
-        record.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-        record.setReadUnmappedFlag(true);
-        record.setReadBases("AAA".getBytes());
-        record.setBaseQualities("!!!".getBytes());
-        w.addAlignment(record);
-        w.close();
-
-        byte[] cramBytes = baos.toByteArray();
-
-        SeekableStream cramSeekableStream = new SeekableMemoryStream(cramBytes, null);
-        CramHeader cramHeader = CramIO.readCramHeader(cramSeekableStream);
-        Assert.assertEquals(version, cramHeader.getVersion());
-
-        // read whole container:
-        long containerStart = cramSeekableStream.position();
-        Container container = ContainerIO.readContainer(version, cramSeekableStream);
-        Assert.assertNotNull(container);
-
-        // ensure EOF follows:
-        Container eof = ContainerIO.readContainer(version, cramSeekableStream);
-        Assert.assertNotNull(eof);
-        Assert.assertTrue(eof.isEOF());
-
-        // TODO: ensure there is nothing left in the stream.
-
-        // position stream at the start of the 1st container:
-        cramSeekableStream.seek(containerStart);
-        // read only container header:
-        ContainerIO.readContainerHeader(version.major, cramSeekableStream);
-
-        // read the following 4 bytes of CRC32:
-        int crcByteSize = 4;
-        cramSeekableStream.seek(cramSeekableStream.position() - crcByteSize);
-        byte[] crcBytes = InputStreamUtils.readFully(cramSeekableStream, crcByteSize);
-        long firstBlockStart = cramSeekableStream.position();
-
-        // rewind to 1st container start:
-        cramSeekableStream.seek(containerStart);
-        // read container header bytes:
-        byte[] containerHeaderBytes = InputStreamUtils.readFully(cramSeekableStream, (int) (firstBlockStart - containerStart) - crcByteSize);
-
-        // test that checksum matches:
-        CRC32 digester = new CRC32();
-        digester.update(containerHeaderBytes);
-        Assert.assertEquals(container.checksum, (int) digester.getValue());
-        Assert.assertEquals(CramInt.int32(crcBytes), container.checksum);
-
-        // test block's crc:
-        cramSeekableStream.seek(firstBlockStart);
-        Block.readFromInputStream(version.major, cramSeekableStream);
-        long blockByteSyze = cramSeekableStream.position() - firstBlockStart - crcByteSize;
-        cramSeekableStream.seek(firstBlockStart);
-        final byte[] blockBytes = InputStreamUtils.readFully(cramSeekableStream, (int) blockByteSyze);
-        crcBytes = InputStreamUtils.readFully(cramSeekableStream, crcByteSize);
-        digester = new CRC32();
-        digester.update(blockBytes);
-        Assert.assertEquals(CramInt.int32(crcBytes), (int) digester.getValue());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/build/CompressionHeaderFactoryTest.java b/src/test/java/htsjdk/samtools/cram/build/CompressionHeaderFactoryTest.java
deleted file mode 100644
index a3d91cd..0000000
--- a/src/test/java/htsjdk/samtools/cram/build/CompressionHeaderFactoryTest.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
-import htsjdk.samtools.cram.structure.CompressionHeader;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.EncodingID;
-import htsjdk.samtools.cram.structure.EncodingKey;
-import htsjdk.samtools.cram.structure.ReadTag;
-import htsjdk.samtools.cram.structure.SubstitutionMatrix;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by vadim on 07/01/2016.
- */
-public class CompressionHeaderFactoryTest {
-    @Test
-    public void testAllEncodingsPresent() {
-        final CompressionHeader header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), true);
-        for (final EncodingKey key : EncodingKey.values()) {
-            switch (key) {
-                // skip test marks and unused series:
-                case TV_TestMark:
-                case TM_TestMark:
-                case BB_bases:
-                case QQ_scores:
-                    Assert.assertFalse(header.encodingMap.containsKey(key), "Unexpected encoding key found: " + key.name());
-                    continue;
-            }
-            Assert.assertTrue(header.encodingMap.containsKey(key), "Encoding key not found: " + key.name());
-            Assert.assertNotNull(header.encodingMap.get(key));
-            Assert.assertFalse(header.encodingMap.get(key).id == EncodingID.NULL);
-        }
-    }
-
-    @Test
-    public void testAP_delta() {
-        boolean sorted = true;
-        CompressionHeader header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), sorted);
-        Assert.assertEquals(header.APDelta, sorted);
-
-        sorted = false;
-        header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), sorted);
-        Assert.assertEquals(header.APDelta, sorted);
-    }
-
-    @Test
-    public void testGetDataForTag() {
-        final CompressionHeaderFactory factory = new CompressionHeaderFactory();
-        final List<CramCompressionRecord> records = new ArrayList<>();
-        final CramCompressionRecord record = new CramCompressionRecord();
-        final int tagID = ReadTag.name3BytesToInt("ACi".getBytes());
-        final byte[] data = new byte[]{1, 2, 3, 4};
-        final ReadTag tag = new ReadTag(tagID, data, ValidationStringency.STRICT);
-        record.tags = new ReadTag[]{tag};
-        records.add(record);
-
-        final byte[] dataForTag = factory.getDataForTag(records, tagID);
-        Assert.assertEquals(dataForTag, data);
-    }
-
-    @Test
-    public void test_buildFrequencies() {
-        final CramCompressionRecord record = new CramCompressionRecord();
-        final Substitution s = new Substitution();
-        s.setPosition(1);
-        final byte refBase = 'A';
-        final byte readBase = 'C';
-
-        s.setBase(readBase);
-        s.setReferenceBase(refBase);
-        s.setCode((byte) 1);
-        record.readFeatures = new ArrayList<>();
-        record.readFeatures.add(s);
-        record.readLength = 2;
-
-        final List<CramCompressionRecord> records = new ArrayList<>();
-        records.add(record);
-
-        final long[][] frequencies = CompressionHeaderFactory.buildFrequencies(records);
-        for (int i = 0; i < frequencies.length; i++) {
-            for (int j = 0; j < frequencies[i].length; j++) {
-                if (i != refBase && j != readBase) {
-                    Assert.assertEquals(frequencies[i][j], 0);
-                }
-            }
-
-        }
-        Assert.assertEquals(frequencies[refBase][readBase], 1);
-    }
-
-    @Test
-    public void test_getBestExternalCompressor() {
-        try {
-            Assert.assertNotNull(CompressionHeaderFactory.getBestExternalCompressor(null));
-            Assert.fail("NPE expected for null data");
-        } catch (final NullPointerException e) {
-
-        }
-        Assert.assertNotNull(CompressionHeaderFactory.getBestExternalCompressor("".getBytes()));
-        Assert.assertNotNull(CompressionHeaderFactory.getBestExternalCompressor("qwe".getBytes()));
-    }
-
-    @Test
-    public void test_geByteSizeRangeOfTagValues() {
-        final List<CramCompressionRecord> records = new ArrayList<>();
-        final int tagID = ReadTag.name3BytesToInt("ACi".getBytes());
-        // test empty list:
-        CompressionHeaderFactory.ByteSizeRange range = CompressionHeaderFactory.geByteSizeRangeOfTagValues(records, tagID);
-        Assert.assertNotNull(range);
-        Assert.assertEquals(range.min, Integer.MAX_VALUE);
-        Assert.assertEquals(range.max, Integer.MIN_VALUE);
-
-        // test single record with a single tag:
-        final CramCompressionRecord record = new CramCompressionRecord();
-        final byte[] data = new byte[]{1, 2, 3, 4};
-        final ReadTag tag = new ReadTag(tagID, data, ValidationStringency.STRICT);
-        record.tags = new ReadTag[]{tag};
-        records.add(record);
-
-        range = CompressionHeaderFactory.geByteSizeRangeOfTagValues(records, tagID);
-        Assert.assertNotNull(range);
-        Assert.assertEquals(range.min, 4);
-        Assert.assertEquals(range.max, 4);
-    }
-
-    @Test
-    public void test_getTagType() {
-        Assert.assertEquals(CompressionHeaderFactory.getTagType(ReadTag.name3BytesToInt("ACi".getBytes())), 'i');
-    }
-
-    @Test
-    public void test_getUnusedByte() {
-        final byte[] data = new byte[256];
-        for (int i = 0; i < data.length; i++) {
-            data[i] = (byte) i;
-        }
-
-        int unusedByte = CompressionHeaderFactory.getUnusedByte(data);
-        Assert.assertEquals(unusedByte, -1);
-
-        data[5] = 0;
-        unusedByte = CompressionHeaderFactory.getUnusedByte(data);
-        Assert.assertEquals(unusedByte, 5);
-        data[5] = 5;
-
-        data[150] = 0;
-        unusedByte = CompressionHeaderFactory.getUnusedByte(data);
-        Assert.assertEquals(unusedByte, 150);
-    }
-
-    @Test
-    public void test_updateSubstitutionCodes() {
-        final CramCompressionRecord record = new CramCompressionRecord();
-        final Substitution s = new Substitution();
-        s.setPosition(1);
-        final byte refBase = 'A';
-        final byte readBase = 'C';
-
-        s.setBase(readBase);
-        s.setReferenceBase(refBase);
-        record.readFeatures = new ArrayList<>();
-        record.readFeatures.add(s);
-        record.readLength = 2;
-
-        final List<CramCompressionRecord> records = new ArrayList<>();
-        records.add(record);
-
-        final long[][] frequencies = new long[256][256];
-        frequencies[refBase][readBase] = 1;
-        SubstitutionMatrix matrix = new SubstitutionMatrix(frequencies);
-
-        Assert.assertTrue(s.getCode() == -1);
-        CompressionHeaderFactory.updateSubstitutionCodes(records, matrix);
-        Assert.assertFalse(s.getCode() == -1);
-        Assert.assertEquals(s.getCode(), matrix.code(refBase, readBase));
-    }
-
-    @Test
-    public void test_getTagValueByteSize() {
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'i', 1), 4);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'I', 1), 4);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'c', (byte) 1), 1);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'C', -(byte) 1), 1);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 's', (short) 1), 2);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'S', -(short) 1), 2);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'A', 1), 1);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'f', 1f), 4);
-
-        // string values are null-terminated:
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'Z', "blah-blah"), "blah-blah".length() + 1);
-
-        // byte length of an array tag value is: element type (1 byte) + nof bytes (4 bytes) + nof elements * byte size of element
-        int elementTypeLength = 1;
-        int arraySizeByteLength = 4;
-        int arraySize = 3;
-        int byteElementSize = 1;
-        int int_float_long_elementSize = 4;
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'B', new byte[]{0, 1, 2}), elementTypeLength + arraySizeByteLength + arraySize * byteElementSize);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'B', new int[]{0, 1, 2}), elementTypeLength + arraySizeByteLength + arraySize * int_float_long_elementSize);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'B', new float[]{0, 1, 2}), elementTypeLength + arraySizeByteLength + arraySize * int_float_long_elementSize);
-        Assert.assertEquals(CompressionHeaderFactory.getTagValueByteSize((byte) 'B', new long[]{0, 1, 2}), elementTypeLength + arraySizeByteLength + arraySize * int_float_long_elementSize);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/build/ContainerFactoryTest.java b/src/test/java/htsjdk/samtools/cram/build/ContainerFactoryTest.java
deleted file mode 100644
index cb004a7..0000000
--- a/src/test/java/htsjdk/samtools/cram/build/ContainerFactoryTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import htsjdk.samtools.reference.InMemoryReferenceSequenceFile;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by vadim on 15/12/2015.
- */
-public class ContainerFactoryTest {
-
-    @Test
-    public void testUnmapped() throws IOException, IllegalAccessException {
-        SAMFileHeader header = new SAMFileHeader();
-
-        int recordsPerContainer = 10;
-        ContainerFactory factory = new ContainerFactory(header, recordsPerContainer);
-
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i = 0; i < recordsPerContainer; i++) {
-            final CramCompressionRecord record = new CramCompressionRecord();
-            record.setSegmentUnmapped(true);
-            record.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-            record.alignmentStart = SAMRecord.NO_ALIGNMENT_START;
-            record.readBases = record.qualityScores = "ACGTN".getBytes();
-            record.readName = Integer.toString(i);
-
-            records.add(record);
-        }
-
-        final Container container = factory.buildContainer(records);
-        Assert.assertNotNull(container);
-        Assert.assertEquals(container.nofRecords, records.size());
-
-        assertContainerAlignmentBoundaries(container, SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, Slice.NO_ALIGNMENT_START, Slice.NO_ALIGNMENT_SPAN);
-    }
-
-    @Test
-    public void testMapped() throws IOException, IllegalAccessException {
-        InMemoryReferenceSequenceFile refFile = new InMemoryReferenceSequenceFile();
-        String refName = "1";
-        String refString = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
-        refFile.add(refName, refString.getBytes());
-        ReferenceSource source = new ReferenceSource(refFile);
-        SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord(refName, refString.length()));
-        int sequenceId = header.getSequenceIndex(refName);
-
-        int recordsPerContainer = 10;
-        byte[] bases = "AAAAA".getBytes();
-        int readLength = bases.length;
-        int alignmentStartOffset = 3;
-        ContainerFactory factory = new ContainerFactory(header, recordsPerContainer);
-
-        List<CramCompressionRecord> records = new ArrayList<>();
-        int span = 0;
-        for (int i = 0; i < recordsPerContainer; i++) {
-            final CramCompressionRecord record = new CramCompressionRecord();
-            record.setSegmentUnmapped(false);
-            record.sequenceId = sequenceId;
-            record.alignmentStart = alignmentStartOffset + i;
-            record.readBases = record.qualityScores = bases;
-            record.readName = Integer.toString(i);
-            record.readLength = readLength;
-            record.readFeatures = Collections.emptyList();
-
-            records.add(record);
-            span = record.alignmentStart + readLength - alignmentStartOffset;
-        }
-
-        final Container container = factory.buildContainer(records);
-        Assert.assertNotNull(container);
-        Assert.assertEquals(container.nofRecords, records.size());
-
-        assertContainerAlignmentBoundaries(container, sequenceId, alignmentStartOffset, span);
-    }
-
-    @Test
-    public void testMultiref() throws IOException, IllegalAccessException {
-        SAMFileHeader header = new SAMFileHeader();
-        header.addSequence(new SAMSequenceRecord("1", 100));
-        header.addSequence(new SAMSequenceRecord("2", 200));
-
-        int recordsPerContainer = 10;
-        byte[] bases = "AAAAA".getBytes();
-        int readLength = bases.length;
-        int alignmentStartOffset = 3;
-        ContainerFactory factory = new ContainerFactory(header, recordsPerContainer);
-
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i = 0; i < recordsPerContainer; i++) {
-            final CramCompressionRecord record = new CramCompressionRecord();
-            record.setSegmentUnmapped(false);
-            record.sequenceId = i % 2;
-            record.alignmentStart = alignmentStartOffset + i;
-            record.readBases = record.qualityScores = bases;
-            record.readName = Integer.toString(i);
-            record.readLength = readLength;
-            record.readFeatures = Collections.emptyList();
-
-            records.add(record);
-        }
-
-        final Container container = factory.buildContainer(records);
-        Assert.assertNotNull(container);
-        Assert.assertEquals(container.nofRecords, records.size());
-
-        assertContainerAlignmentBoundaries(container, Slice.MULTI_REFERENCE, Slice.NO_ALIGNMENT_START, Slice.NO_ALIGNMENT_SPAN);
-    }
-
-
-    private void assertContainerAlignmentBoundaries(Container container, int sequenceId, int alignmentStart, int alignmentSpan) {
-        Assert.assertEquals(container.sequenceId, sequenceId);
-        Assert.assertEquals(container.alignmentStart, alignmentStart);
-        Assert.assertEquals(container.alignmentSpan, alignmentSpan);
-
-        if (sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX || sequenceId == Slice.MULTI_REFERENCE) {
-            Assert.assertEquals(container.alignmentStart, Slice.NO_ALIGNMENT_START);
-            Assert.assertEquals(container.alignmentSpan, Slice.NO_ALIGNMENT_SPAN);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/build/ContainerParserTest.java b/src/test/java/htsjdk/samtools/cram/build/ContainerParserTest.java
deleted file mode 100644
index fe25ce6..0000000
--- a/src/test/java/htsjdk/samtools/cram/build/ContainerParserTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.common.Version;
-import htsjdk.samtools.cram.structure.AlignmentSpan;
-import htsjdk.samtools.cram.structure.Container;
-import htsjdk.samtools.cram.structure.ContainerIO;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.cram.structure.Slice;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by vadim on 11/01/2016.
- */
-public class ContainerParserTest {
-
-    @Test
-    public void testEOF() throws IOException, IllegalAccessException {
-        ContainerParser parser = new ContainerParser(new SAMFileHeader());
-        ByteArrayOutputStream v2_baos = new ByteArrayOutputStream();
-        Version version = CramVersions.CRAM_v2_1;
-        CramIO.issueEOF(version, v2_baos);
-        Container container = ContainerIO.readContainer(version, new ByteArrayInputStream(v2_baos.toByteArray()));
-        Assert.assertTrue(container.isEOF());
-        Assert.assertTrue(parser.getRecords(container, null, ValidationStringency.STRICT).isEmpty());
-
-        ByteArrayOutputStream v3_baos = new ByteArrayOutputStream();
-        version = CramVersions.CRAM_v3;
-        CramIO.issueEOF(version, v3_baos);
-        container = ContainerIO.readContainer(version, new ByteArrayInputStream(v3_baos.toByteArray()));
-        Assert.assertTrue(container.isEOF());
-        Assert.assertTrue(parser.getRecords(container, null, ValidationStringency.STRICT).isEmpty());
-    }
-
-    @Test
-    public void testSingleRefContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        ContainerFactory factory = new ContainerFactory(samFileHeader, 10);
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i=0; i<10; i++) {
-            CramCompressionRecord record = new CramCompressionRecord();
-            record.readBases="AAA".getBytes();
-            record.qualityScores="!!!".getBytes();
-            record.setSegmentUnmapped(false);
-            record.readName=""+i;
-            record.sequenceId=0;
-            record.setLastSegment(true);
-            record.readFeatures = Collections.emptyList();
-
-            records.add(record);
-        }
-
-        Container container = factory.buildContainer(records);
-        Assert.assertEquals(container.nofRecords, 10);
-        Assert.assertEquals(container.sequenceId, 0);
-
-        ContainerParser parser = new ContainerParser(samFileHeader);
-        final Map<Integer, AlignmentSpan> referenceSet = parser.getReferences(container, ValidationStringency.STRICT);
-        Assert.assertNotNull(referenceSet);
-        Assert.assertEquals(referenceSet.size(), 1);
-        Assert.assertTrue(referenceSet.containsKey(0));
-    }
-
-    @Test
-    public void testUnmappedContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        ContainerFactory factory = new ContainerFactory(samFileHeader, 10);
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i=0; i<10; i++) {
-            CramCompressionRecord record = new CramCompressionRecord();
-            record.readBases="AAA".getBytes();
-            record.qualityScores="!!!".getBytes();
-            record.setSegmentUnmapped(true);
-            record.readName=""+i;
-            record.sequenceId= SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-            record.setLastSegment(true);
-
-            records.add(record);
-        }
-
-        Container container = factory.buildContainer(records);
-        Assert.assertEquals(container.nofRecords, 10);
-        Assert.assertEquals(container.sequenceId, SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
-
-        ContainerParser parser = new ContainerParser(samFileHeader);
-        final Map<Integer, AlignmentSpan> referenceSet = parser.getReferences(container, ValidationStringency.STRICT);
-        Assert.assertNotNull(referenceSet);
-        Assert.assertEquals(referenceSet.size(), 1);
-        Assert.assertTrue(referenceSet.containsKey(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-
-    }
-
-    @Test
-    public void testMappedAndUnmappedContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        ContainerFactory factory = new ContainerFactory(samFileHeader, 10);
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i=0; i<10; i++) {
-            CramCompressionRecord record = new CramCompressionRecord();
-            record.readBases="AAA".getBytes();
-            record.qualityScores="!!!".getBytes();
-            record.readName=""+i;
-            record.alignmentStart=i+1;
-
-            record.setMultiFragment(false);
-            if (i%2==0) {
-                record.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-                record.setSegmentUnmapped(true);
-            } else {
-                record.sequenceId=0;
-                record.readFeatures = Collections.emptyList();
-                record.setSegmentUnmapped(false);
-            }
-            records.add(record);
-        }
-
-
-
-        Container container = factory.buildContainer(records);
-        Assert.assertEquals(container.nofRecords, 10);
-        Assert.assertEquals(container.sequenceId, Slice.MULTI_REFERENCE);
-
-        ContainerParser parser = new ContainerParser(samFileHeader);
-        final Map<Integer, AlignmentSpan> referenceSet = parser.getReferences(container, ValidationStringency.STRICT);
-        Assert.assertNotNull(referenceSet);
-        Assert.assertEquals(referenceSet.size(), 2);
-        Assert.assertTrue(referenceSet.containsKey(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        Assert.assertTrue(referenceSet.containsKey(0));
-    }
-
-    @Test
-    public void testMultirefContainer() throws IOException, IllegalAccessException {
-        SAMFileHeader samFileHeader = new SAMFileHeader();
-        ContainerFactory factory = new ContainerFactory(samFileHeader, 10);
-        List<CramCompressionRecord> records = new ArrayList<>();
-        for (int i=0; i<10; i++) {
-            CramCompressionRecord record = new CramCompressionRecord();
-            record.readBases="AAA".getBytes();
-            record.qualityScores="!!!".getBytes();
-            record.readName=""+i;
-            record.alignmentStart=i+1;
-            record.readLength = 3;
-
-            record.setMultiFragment(false);
-            if (i < 9) {
-                record.sequenceId=i;
-                record.readFeatures = Collections.emptyList();
-                record.setSegmentUnmapped(false);
-            } else {
-                record.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-                record.setSegmentUnmapped(true);
-            }
-            records.add(record);
-        }
-
-        Container container = factory.buildContainer(records);
-        Assert.assertEquals(container.nofRecords, 10);
-        Assert.assertEquals(container.sequenceId, Slice.MULTI_REFERENCE);
-
-        ContainerParser parser = new ContainerParser(samFileHeader);
-        final Map<Integer, AlignmentSpan> referenceSet = parser.getReferences(container, ValidationStringency.STRICT);
-        Assert.assertNotNull(referenceSet);
-        Assert.assertEquals(referenceSet.size(), 10);
-        Assert.assertTrue(referenceSet.containsKey(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX));
-        for (int i=0; i<9; i++) {
-            Assert.assertTrue(referenceSet.containsKey(i));
-            AlignmentSpan span = referenceSet.get(i);
-            Assert.assertEquals(span.getCount(), 1);
-            Assert.assertEquals(span.getStart(), i+1);
-            Assert.assertEquals(span.getSpan(), 3);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/build/CramIOTest.java b/src/test/java/htsjdk/samtools/cram/build/CramIOTest.java
deleted file mode 100644
index 1035f24..0000000
--- a/src/test/java/htsjdk/samtools/cram/build/CramIOTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package htsjdk.samtools.cram.build;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.structure.CramHeader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-/**
- * Created by vadim on 25/08/2015.
- */
-public class CramIOTest {
-    @Test
-    public void testCheckHeaderAndEOF_v2() throws IOException {
-        final String id = "testid";
-
-        final CramHeader cramHeader = new CramHeader(CramVersions.CRAM_v2_1, id, new SAMFileHeader());
-        final File file = File.createTempFile("test", ".cram");
-        file.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(file);
-        CramIO.writeCramHeader(cramHeader, fos);
-        CramIO.issueEOF(cramHeader.getVersion(), fos);
-        fos.close();
-
-        Assert.assertTrue(CramIO.checkHeaderAndEOF(file));
-        file.delete();
-    }
-
-    @Test
-    public void testCheckHeaderAndEOF_v3() throws IOException {
-        final String id = "testid";
-
-        final CramHeader cramHeader = new CramHeader(CramVersions.CRAM_v3, id, new SAMFileHeader());
-        final File file = File.createTempFile("test", ".cram");
-        file.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(file);
-        CramIO.writeCramHeader(cramHeader, fos);
-        CramIO.issueEOF(cramHeader.getVersion(), fos);
-        fos.close();
-
-        Assert.assertTrue(CramIO.checkHeaderAndEOF(file));
-        file.delete();
-    }
-
-    @Test
-    public void testReplaceCramHeader() throws IOException {
-        final String id = "testid";
-
-        final CramHeader cramHeader = new CramHeader(CramVersions.CRAM_v3, id, new SAMFileHeader());
-        Assert.assertTrue(cramHeader.getSamFileHeader().getSequenceDictionary().isEmpty());
-        final File file = File.createTempFile("test", ".cram");
-        file.deleteOnExit();
-        final FileOutputStream fos = new FileOutputStream(file);
-        CramIO.writeCramHeader(cramHeader, fos);
-        CramIO.issueEOF(cramHeader.getVersion(), fos);
-        fos.close();
-        final long length = file.length();
-
-        final SAMFileHeader samFileHeader = new SAMFileHeader();
-        final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord("1", 123);
-        samFileHeader.addSequence(sequenceRecord);
-        final String id2 = "testid2";
-        final CramHeader cramHeader2 = new CramHeader(CramVersions.CRAM_v3, id2, samFileHeader);
-        final boolean replaced = CramIO.replaceCramHeader(file, cramHeader2);
-        Assert.assertTrue(replaced);
-        Assert.assertEquals(file.length(), length);
-        Assert.assertTrue(CramIO.checkHeaderAndEOF(file));
-
-        final CramHeader cramHeader3 = CramIO.readCramHeader(new FileInputStream(file));
-        Assert.assertEquals(cramHeader3.getVersion(), CramVersions.CRAM_v3);
-        Assert.assertFalse(cramHeader3.getSamFileHeader().getSequenceDictionary().isEmpty());
-        Assert.assertNotNull(cramHeader3.getSamFileHeader().getSequenceDictionary().getSequence(0));
-        Assert.assertEquals(cramHeader3.getSamFileHeader().getSequence(sequenceRecord.getSequenceName()).getSequenceLength(), sequenceRecord.getSequenceLength());
-        file.delete();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanTest.java b/src/test/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanTest.java
deleted file mode 100644
index f2ca2f2..0000000
--- a/src/test/java/htsjdk/samtools/cram/encoding/huffman/codec/HuffmanTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package htsjdk.samtools.cram.encoding.huffman.codec;
-
-import htsjdk.samtools.cram.io.DefaultBitInputStream;
-import htsjdk.samtools.cram.io.DefaultBitOutputStream;
-import htsjdk.samtools.cram.structure.ReadTag;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * Created by vadim on 22/04/2015.
- */
-public class HuffmanTest {
-    @Test
-    public void testHuffmanIntHelper() throws IOException {
-        int size = 1000000;
-
-        HuffmanParamsCalculator cal = new HuffmanParamsCalculator();
-        cal.add(ReadTag.nameType3BytesToInt("OQ", 'Z'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X0", 'C'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X0", 'c'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X0", 's'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X1", 'C'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X1", 'c'), size);
-        cal.add(ReadTag.nameType3BytesToInt("X1", 's'), size);
-        cal.add(ReadTag.nameType3BytesToInt("XA", 'Z'), size);
-        cal.add(ReadTag.nameType3BytesToInt("XC", 'c'), size);
-        cal.add(ReadTag.nameType3BytesToInt("XT", 'A'), size);
-        cal.add(ReadTag.nameType3BytesToInt("OP", 'i'), size);
-        cal.add(ReadTag.nameType3BytesToInt("OC", 'Z'), size);
-        cal.add(ReadTag.nameType3BytesToInt("BQ", 'Z'), size);
-        cal.add(ReadTag.nameType3BytesToInt("AM", 'c'), size);
-
-        cal.calculate();
-
-        HuffmanIntHelper helper = new HuffmanIntHelper(cal.values(), cal.bitLens());
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DefaultBitOutputStream bos = new DefaultBitOutputStream(baos);
-
-        for (int i = 0; i < size; i++) {
-            for (int b : cal.values()) {
-                helper.write(bos, b);
-            }
-        }
-
-        bos.close();
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        DefaultBitInputStream bis = new DefaultBitInputStream(bais);
-
-        int counter = 0;
-        for (int i = 0; i < size; i++) {
-            for (int b : cal.values()) {
-                int v = helper.read(bis);
-                if (v != b) {
-                    Assert.fail("Mismatch: " + v + " vs " + b + " at " + counter);
-                }
-
-                counter++;
-            }
-        }
-    }
-
-    @Test
-    public void testHuffmanByteHelper() throws IOException {
-        int size = 1000000;
-
-        long time5 = System.nanoTime();
-        HuffmanParamsCalculator cal = new HuffmanParamsCalculator();
-        for (byte i = 33; i < 33 + 15; i++) {
-            cal.add(i);
-        }
-        cal.calculate();
-
-        HuffmanByteHelper helper = new HuffmanByteHelper(cal.valuesAsBytes(), cal.bitLens());
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DefaultBitOutputStream bos = new DefaultBitOutputStream(baos);
-
-        for (int i = 0; i < size; i++) {
-            for (byte b : cal.valuesAsBytes()) {
-                helper.write(bos, b);
-            }
-        }
-
-        bos.close();
-
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        DefaultBitInputStream bis = new DefaultBitInputStream(bais);
-
-        int counter = 0;
-        for (int i = 0; i < size; i++) {
-            for (int b : cal.values()) {
-                int v = helper.read(bis);
-                if (v != b) {
-                    Assert.fail("Mismatch: " + v + " vs " + b + " at " + counter);
-                }
-
-                counter++;
-            }
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/encoding/rans/RansTest.java b/src/test/java/htsjdk/samtools/cram/encoding/rans/RansTest.java
deleted file mode 100644
index ca84686..0000000
--- a/src/test/java/htsjdk/samtools/cram/encoding/rans/RansTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package htsjdk.samtools.cram.encoding.rans;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * Created by vadim on 22/04/2015.
- */
-public class RansTest {
-    @Test
-    public void testEmpty() {
-        roundTrip(new byte[0]);
-    }
-
-    @Test
-    public void testOneByte() {
-        roundTrip(new byte[] { 0 });
-    }
-
-    @Test
-    public void testTwoByte() {
-        roundTrip(new byte[] { 0, 1 });
-    }
-
-    @Test
-    public void testThreeByte() {
-        roundTrip(new byte[] { 0, 1, 2 });
-    }
-
-    @Test
-    public void testFourBytes() {
-        roundTrip(new byte[] { 0, 1, 2, 3 });
-    }
-
-    @Test
-    public void testByteRange() {
-        byte[] data = new byte[256];
-        for (int i = 0; i < data.length; i++)
-            data[i] = (byte) i;
-        roundTrip(data);
-    }
-
-    @Test
-    public void testZeroBytes() {
-        roundTrip(new byte[1000]);
-    }
-
-    @Test
-    public void testUniBytes() {
-        byte[] data = new byte[1000];
-        Arrays.fill(data, (byte) 1);
-        roundTrip(data);
-    }
-
-    @Test
-    public void testZeroOneStretches() {
-        byte[] data = new byte[1000];
-        Arrays.fill(data, data.length / 2, data.length, (byte) 1);
-        roundTrip(data);
-    }
-
-    @Test
-    public void testByteMin() {
-        byte[] data = new byte[1000];
-        Arrays.fill(data, Byte.MIN_VALUE);
-        roundTrip(data);
-    }
-
-    @Test
-    public void testByteMax() {
-        byte[] data = new byte[1000];
-        Arrays.fill(data, Byte.MAX_VALUE);
-        roundTrip(data);
-    }
-
-    @Test
-    public void test1000_0dot1() {
-        roundTrip(randomBytes_GD(1000, 0.1));
-    }
-
-    @Test
-    public void test1000_0dot01() {
-        roundTrip(randomBytes_GD(1000, 0.01));
-    }
-
-    @Test
-    public void testSizeRange_tiny() {
-        for (int i = 0; i < 20; i++) {
-            byte[] data = randomBytes_GD(100, 0.1);
-            ByteBuffer in = ByteBuffer.wrap(data);
-            for (int size = 1; size < data.length; size++) {
-                in.position(0);
-                in.limit(size);
-                try {
-                    roundTrip(in);
-                } catch (AssertionError e) {
-                    System.err.printf("Failed at size %d and data %s\n", size,
-                            Arrays.toString(data));
-                    throw e;
-                }
-            }
-        }
-    }
-
-    @Test
-    public void testSizeRange_small() {
-        byte[] data = randomBytes_GD(1000, 0.01);
-        ByteBuffer in = ByteBuffer.wrap(data);
-        for (int size = 4; size < data.length; size++) {
-            in.position(0);
-            in.limit(size);
-            roundTrip(in);
-        }
-    }
-
-    @Test
-    public void testLargeSize() {
-        int size = 100 * 1000 + 3;
-        byte[] data = randomBytes_GD(size, 0.01);
-        ByteBuffer in = ByteBuffer.wrap(data);
-        for (int limit = size - 4; limit < size; limit++) {
-            in.position(0);
-            in.limit(limit);
-            roundTrip(in);
-        }
-    }
-
-    @Test
-    public void testXLSize() {
-        int size = 10 * 1000 * 1000 + 1;
-        roundTrip(randomBytes_GD(size, 0.01));
-    }
-
-    @Test
-    public void testBuffersMeetBoundaryExpectations() {
-        int size = 1001;
-        ByteBuffer raw = ByteBuffer.wrap(randomBytes_GD(size, 0.01));
-        for (RANS.ORDER order : RANS.ORDER.values()) {
-            ByteBuffer compressed = RANS.compress(raw, order, null);
-            Assert.assertFalse(raw.hasRemaining());
-            Assert.assertEquals(raw.limit(), size);
-
-            Assert.assertEquals(compressed.position(), 0);
-            Assert.assertTrue(compressed.limit() > 10);
-            Assert.assertEquals(compressed.get(), (byte) order.ordinal());
-            Assert.assertEquals(compressed.getInt(), compressed.limit() - 1 - 4 - 4);
-            Assert.assertEquals(compressed.getInt(), size);
-            compressed.rewind();
-
-            ByteBuffer uncompressed = RANS.uncompress(compressed, null);
-            Assert.assertFalse(compressed.hasRemaining());
-            Assert.assertEquals(uncompressed.limit(), size);
-            Assert.assertEquals(uncompressed.position(), 0);
-
-            raw.rewind();
-        }
-    }
-
-    @Test
-    public void testRansHeader() {
-        byte[] data = randomBytes_GD(1000, 0.01);
-        ByteBuffer compressed = RANS.compress(ByteBuffer.wrap(data),
-                RANS.ORDER.ZERO, null);
-        Assert.assertEquals(compressed.get(), (byte) 0);
-        Assert.assertEquals(compressed.getInt(), compressed.limit() - 9);
-        Assert.assertEquals(compressed.getInt(), data.length);
-    }
-
-    private static void roundTrip(ByteBuffer data) {
-        for (RANS.ORDER order : RANS.ORDER.values()) {
-            roundTrip(data, order);
-            data.rewind();
-        }
-    }
-
-    private static void roundTrip(byte[] data) {
-        for (RANS.ORDER order : RANS.ORDER.values())
-            roundTrip(data, order);
-    }
-
-    private static void roundTrip(ByteBuffer data, RANS.ORDER order) {
-        ByteBuffer compressed = RANS.compress(data, order, null);
-        ByteBuffer uncompressed = RANS.uncompress(compressed, null);
-        data.rewind();
-        while (data.hasRemaining()) {
-            if (!uncompressed.hasRemaining())
-                Assert.fail("Premature end of uncompressed data.");
-            Assert.assertEquals(uncompressed.get(), data.get());
-        }
-        Assert.assertFalse(uncompressed.hasRemaining());
-    }
-
-    private static void roundTrip(byte[] data, RANS.ORDER order) {
-        roundTrip(ByteBuffer.wrap(data), order);
-    }
-
-    private Random random = new Random();
-
-    private byte[] randomBytes_GD(int size, double p) {
-        byte[] data = new byte[size];
-        randomBytes_GD(data, p);
-        return data;
-    }
-
-    private void randomBytes_GD(byte[] data, double p) {
-        for (int i = 0; i < data.length; i++)
-            data[i] = randomByteGeometricDistribution(p);
-    }
-
-    /**
-     * A crude implementation of RNG for sampling geometric distribution. The
-     * value returned is offset by -1 to include zero. For testing purposes
-     * only, no refunds!
-     *
-     * @param p
-     *            the probability of success
-     * @return an almost random byte value.
-     */
-    private byte randomByteGeometricDistribution(double p) {
-        double rand = random.nextDouble();
-        double g = Math.ceil(Math.log(1 - rand) / Math.log(1 - p)) - 1;
-        return (byte) g;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/io/ITF8Test.java b/src/test/java/htsjdk/samtools/cram/io/ITF8Test.java
deleted file mode 100644
index 5d95d2c..0000000
--- a/src/test/java/htsjdk/samtools/cram/io/ITF8Test.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import htsjdk.samtools.util.Tuple;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by vadim on 03/02/2015.
- */
-public class ITF8Test {
-
-    private ExposedByteArrayOutputStream testBAOS;
-    private ByteArrayInputStream testBAIS;
-
-    @BeforeClass
-    public void initialize() {
-        testBAOS = new ExposedByteArrayOutputStream();
-        testBAIS = new ByteArrayInputStream(testBAOS.getBuffer());
-    }
-
-    @BeforeMethod
-    public void reset() {
-        testBAOS.reset();
-        testBAIS.reset();
-    }
-
-
-    @DataProvider(name = "testITF8")
-    public static Object[][] testValues() {
-        List<Integer> list = new ArrayList<Integer>() ;
-
-        // basics:
-        list.add(0);
-        list.add(1);
-        list.add(127);
-        list.add(128);
-        list.add(255);
-        list.add(256);
-        list.add(-1);
-
-        // scan with bits:
-        for (int i = 0; i <= 32; i++) {
-            list.add((1 << i) - 2);
-            list.add((1 << i) - 1);
-            list.add(1 << i);
-            list.add((1 << i) + 1);
-            list.add((1 << i) + 1);
-        }
-
-        // special cases:
-        list.add(Integer.MAX_VALUE) ;
-        list.add(Integer.MIN_VALUE);
-        list.add(268435456);
-
-        Object[][] params = new Object[list.size()][] ;
-        for (int i=0; i<params.length; i++)
-            params[i] = new Object[]{list.get(i)} ;
-        return params;
-    }
-
-    @Test(dataProvider = "testITF8")
-    public void testITF8(int value) throws IOException {
-        int len = ITF8.writeUnsignedITF8(value, testBAOS);
-        Assert.assertTrue(len <= (8 * 9));
-
-        long result = ITF8.readUnsignedITF8(testBAIS);
-        Assert.assertEquals(value, result);
-    }
-
-    @DataProvider(name = "predefined")
-    public static Object[][] predefinedProvider() {
-        List<Tuple<Integer, byte[]>> list = new ArrayList<Tuple<Integer, byte[]>>() ;
-        list.add(new Tuple<Integer, byte[]>(4542278, new byte[]{(byte) (0xFF & 224), 69, 79, 70})) ;
-        list.add(new Tuple<Integer, byte[]>(16384, new byte[]{-64, 64, 0})) ;
-        list.add(new Tuple<Integer, byte[]>(192, new byte[]{-128, -64})) ;
-        list.add(new Tuple<Integer, byte[]>(-4757, new byte[]{-1, -1, -2, -42, 107})) ;
-
-        Object[][] params = new Object[list.size()][] ;
-        for (int i=0; i<params.length; i++)
-            params[i] = new Object[]{list.get(i).a, list.get(i).b} ;
-        return params;
-    }
-
-    @Test(dataProvider = "predefined")
-    public void testPredefined (int value, byte[] itf8) {
-        final byte[] bytes = ITF8.writeUnsignedITF8(value);
-        Assert.assertEquals(itf8, bytes);
-
-        int n = ITF8.readUnsignedITF8(itf8);
-        Assert.assertEquals(value, n);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/io/LTF8Test.java b/src/test/java/htsjdk/samtools/cram/io/LTF8Test.java
deleted file mode 100644
index 5103797..0000000
--- a/src/test/java/htsjdk/samtools/cram/io/LTF8Test.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package htsjdk.samtools.cram.io;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by vadim on 03/02/2015.
- */
-public class LTF8Test {
-
-    private ExposedByteArrayOutputStream ltf8TestBAOS;
-    private ByteArrayInputStream ltf8TestBAIS;
-
-    @BeforeClass
-    public void initialize() {
-        ltf8TestBAOS = new ExposedByteArrayOutputStream();
-        ltf8TestBAIS = new ByteArrayInputStream(ltf8TestBAOS.getBuffer());
-    }
-
-    @BeforeMethod
-    public void reset() {
-        ltf8TestBAOS.reset();
-        ltf8TestBAIS.reset();
-    }
-
-
-    @DataProvider(name = "testLTF8")
-    public static Object[][] testValues() {
-        List<Long> list = new ArrayList<Long>() ;
-
-        // basics:
-        list.add(0L);
-        list.add(0L);
-        list.add(1L);
-        list.add(127L);
-        list.add(128L);
-        list.add(255L);
-        list.add(256L);
-
-        // scan with bits:
-        for (int i = 0; i <= 64; i++) {
-            list.add((1L << i) - 2);
-            list.add((1L << i) - 1);
-            list.add(1L << i);
-            list.add((1L << i) + 1);
-            list.add((1L << i) + 1);
-        }
-
-        // special cases:
-        list.add(1125899906842622L) ;
-        list.add(1125899906842622L);
-        list.add(562949953421312L);
-        list.add(4294967296L);
-        list.add(268435456L);
-        list.add(2147483648L);
-        list.add(-1L);
-
-        Object[][] params = new Object[list.size()][] ;
-        for (int i=0; i<params.length; i++)
-            params[i] = new Object[]{list.get(i)} ;
-        return params;
-    }
-
-    @Test(dataProvider = "testLTF8")
-    public void testLTF8(long value) throws IOException {
-        int len = LTF8.writeUnsignedLTF8(value, ltf8TestBAOS);
-        Assert.assertTrue(len <= (8 * 9));
-
-        long result = LTF8.readUnsignedLTF8(ltf8TestBAIS);
-        Assert.assertEquals(value, result);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/lossy/QualityScorePreservationTest.java b/src/test/java/htsjdk/samtools/cram/lossy/QualityScorePreservationTest.java
deleted file mode 100644
index 34b4676..0000000
--- a/src/test/java/htsjdk/samtools/cram/lossy/QualityScorePreservationTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package htsjdk.samtools.cram.lossy;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SamInputResource;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.cram.build.CramNormalizer;
-import htsjdk.samtools.cram.build.Sam2CramRecordFactory;
-import htsjdk.samtools.cram.common.CramVersions;
-import htsjdk.samtools.cram.ref.ReferenceTracks;
-import htsjdk.samtools.cram.structure.CramCompressionRecord;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static org.testng.Assert.*;
-
-public class QualityScorePreservationTest {
-
-    @Test
-    public void test1() {
-        QualityScorePreservation p = new QualityScorePreservation("m999_8");
-        List<PreservationPolicy> policies = p.getPreservationPolicies();
-
-        assertNotNull(p);
-        assertEquals(policies.size(), 1);
-
-        PreservationPolicy policy0 = policies.get(0);
-        assertEquals(policy0.readCategory.type,
-                ReadCategoryType.LOWER_MAPPING_SCORE);
-
-        assertEquals(policy0.readCategory.param, 999);
-
-        if (policy0.baseCategories != null)
-            assertEquals(policy0.baseCategories.isEmpty(), true);
-
-        QualityScoreTreatment treatment = policy0.treatment;
-        assertNotNull(treatment);
-
-        assertEquals(treatment.type, QualityScoreTreatmentType.BIN);
-        assertEquals(treatment.param, 8);
-    }
-
-    @Test
-    public void test2() {
-        QualityScorePreservation p = new QualityScorePreservation("R8-N40");
-        List<PreservationPolicy> policies = p.getPreservationPolicies();
-
-        assertNotNull(p);
-        assertEquals(policies.size(), 2);
-
-        {
-            PreservationPolicy policy0 = policies.get(0);
-            assertNull(policy0.readCategory);
-
-            List<BaseCategory> baseCategories = policy0.baseCategories;
-            assertNotNull(baseCategories);
-            assertEquals(baseCategories.size(), 1);
-
-            BaseCategory c0 = baseCategories.get(0);
-            assertEquals(c0.type, BaseCategoryType.MATCH);
-            assertEquals(c0.param, -1);
-
-            QualityScoreTreatment treatment = policy0.treatment;
-            assertNotNull(treatment);
-
-            assertEquals(treatment.type, QualityScoreTreatmentType.BIN);
-            assertEquals(treatment.param, 8);
-        }
-
-        {
-            PreservationPolicy policy1 = policies.get(1);
-            assertNull(policy1.readCategory);
-
-            List<BaseCategory> baseCategories = policy1.baseCategories;
-            assertNotNull(baseCategories);
-            assertEquals(baseCategories.size(), 1);
-
-            BaseCategory c0 = baseCategories.get(0);
-            assertEquals(c0.type, BaseCategoryType.MISMATCH);
-            assertEquals(c0.param, -1);
-
-            QualityScoreTreatment treatment = policy1.treatment;
-            assertNotNull(treatment);
-
-            assertEquals(treatment.type, QualityScoreTreatmentType.PRESERVE);
-            assertEquals(treatment.param, 40);
-        }
-    }
-
-    private SAMFileHeader samFileHeader = new SAMFileHeader();
-
-    private SAMRecord buildSAMRecord(String seqName, String line) {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        try {
-            baos.write("@HD\tVN:1.0\tGO:none SO:coordinate\n".getBytes());
-            baos.write(("@SQ\tSN:" + seqName + "\tLN:247249719\n").getBytes());
-            baos.write(line.replaceAll("\\s+", "\t").getBytes());
-            baos.close();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        SamReader reader = SamReaderFactory.makeDefault().open(SamInputResource.of(bais));
-        try {
-            return reader.iterator().next();
-        } finally {
-            CloserUtil.close(reader);
-        }
-    }
-
-    @Test
-    public void test3() {
-        String line1 = "98573 0 20 1 10 40M * 0 0 AAAAAAAAAA !!!!!!!!!!";
-        String seqName = "20";
-
-        byte[] ref = new byte[40];
-        Arrays.fill(ref, (byte) 'A');
-        SAMRecord record = buildSAMRecord(seqName, line1);
-        byte[] b1 = new byte[40];
-        Arrays.fill(b1, (byte) 'A');
-        byte[] s1 = new byte[40];
-        for (int i = 0; i < s1.length; i++)
-            s1[i] = 0;
-
-        record.setReadBases(b1);
-        record.setBaseQualities(s1);
-
-        QualityScorePreservation p = new QualityScorePreservation("R8-*40");
-        byte[] scores = compressScores(record, ref, p);
-        assertEquals(record.getBaseQualities(), scores);
-
-        Arrays.fill(record.getReadBases(), (byte)'C') ;
-        scores = compressScores(record, ref, p);
-        assertEquals(record.getBaseQualities(), scores);
-        for (int i=0; i<scores.length; i++) {
-            Assert.assertEquals(scores[i], Binning.ILLUMINA_BINNING_MATRIX[record.getBaseQualities()[i]]);
-        }
-    }
-
-    private byte[] compressScores (SAMRecord record, byte[] ref, QualityScorePreservation p) {
-        ReferenceTracks tracks = new ReferenceTracks(0, record.getReferenceName(), ref);
-
-        Sam2CramRecordFactory f = new Sam2CramRecordFactory(ref, record.getHeader(), CramVersions.CRAM_v3);
-        CramCompressionRecord cramRecord = f.createCramRecord(record);
-
-        p.addQualityScores(record, cramRecord, tracks);
-        if (!cramRecord.isForcePreserveQualityScores()) {
-            CramNormalizer.restoreQualityScores((byte) 30, Collections.singletonList(cramRecord));
-        }
-        return cramRecord.qualityScores;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/ref/EnaRefServiceTest.java b/src/test/java/htsjdk/samtools/cram/ref/EnaRefServiceTest.java
deleted file mode 100644
index 852a513..0000000
--- a/src/test/java/htsjdk/samtools/cram/ref/EnaRefServiceTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package htsjdk.samtools.cram.ref;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-public class EnaRefServiceTest {
-
-    @Test
-    public void test() throws IOException, EnaRefService.GaveUpException {
-        Assert.assertNotNull(new EnaRefService().getSequence("57151e6196306db5d9f33133572a5482"));
-        Assert.assertNotNull(new EnaRefService().getSequence("0000088cbcebe818eb431d58c908c698"));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/structure/CramCompressionRecordTest.java b/src/test/java/htsjdk/samtools/cram/structure/CramCompressionRecordTest.java
deleted file mode 100644
index 03360bd..0000000
--- a/src/test/java/htsjdk/samtools/cram/structure/CramCompressionRecordTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.cram.encoding.readfeatures.Deletion;
-import htsjdk.samtools.cram.encoding.readfeatures.InsertBase;
-import htsjdk.samtools.cram.encoding.readfeatures.Insertion;
-import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
-import htsjdk.samtools.cram.encoding.readfeatures.SoftClip;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-
-/**
- * Created by vadim on 28/09/2015.
- */
-public class CramCompressionRecordTest {
-    @Test
-    public void test_getAlignmentEnd() {
-        CramCompressionRecord r = new CramCompressionRecord();
-        r.alignmentStart = 1;
-        r.setSegmentUnmapped(true);
-        Assert.assertEquals(r.getAlignmentEnd(), SAMRecord.NO_ALIGNMENT_START);
-
-        r = new CramCompressionRecord();
-        int readLength = 100;
-        r.alignmentStart = 1;
-        r.readLength = readLength;
-        r.setSegmentUnmapped(false);
-        Assert.assertEquals(r.getAlignmentEnd(), r.readLength + r.alignmentStart - 1);
-
-        r = new CramCompressionRecord();
-        r.alignmentStart = 1;
-        r.readLength = readLength;
-        r.setSegmentUnmapped(false);
-        r.readFeatures = new ArrayList<ReadFeature>();
-        String softClip = "AAA";
-        r.readFeatures.add(new SoftClip(1, softClip.getBytes()));
-        Assert.assertEquals(r.getAlignmentEnd(), r.readLength + r.alignmentStart - 1 - softClip.length());
-
-        r = new CramCompressionRecord();
-        r.alignmentStart = 1;
-        r.readLength = readLength;
-        r.setSegmentUnmapped(false);
-        r.readFeatures = new ArrayList<ReadFeature>();
-        int deletionLength = 5;
-        r.readFeatures.add(new Deletion(1, deletionLength));
-        Assert.assertEquals(r.getAlignmentEnd(), r.readLength + r.alignmentStart - 1 + deletionLength);
-
-        r = new CramCompressionRecord();
-        r.alignmentStart = 1;
-        r.readLength = readLength;
-        r.setSegmentUnmapped(false);
-        r.readFeatures = new ArrayList<ReadFeature>();
-        String insertion = "CCCCCCCCCC";
-        r.readFeatures.add(new Insertion(1, insertion.getBytes()));
-        Assert.assertEquals(r.getAlignmentEnd(), r.readLength + r.alignmentStart - 1 - insertion.length());
-
-
-        r = new CramCompressionRecord();
-        r.alignmentStart = 1;
-        r.readLength = readLength;
-        r.setSegmentUnmapped(false);
-        r.readFeatures = new ArrayList<ReadFeature>();
-        r.readFeatures.add(new InsertBase(1, (byte) 'A'));
-        Assert.assertEquals(r.getAlignmentEnd(), r.readLength + r.alignmentStart - 1 - 1);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/structure/ReadTagTest.java b/src/test/java/htsjdk/samtools/cram/structure/ReadTagTest.java
deleted file mode 100644
index 3ed0b40..0000000
--- a/src/test/java/htsjdk/samtools/cram/structure/ReadTagTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.ValidationStringency;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ReadTagTest {
-
-    @Test
-    public void test () {
-        SAMFileHeader h = new SAMFileHeader();
-        SAMRecord r = new SAMRecord(h);
-        r.setAttribute("OQ", "A:SOME:RANDOM:NONSENSE".getBytes());
-        r.setAttribute("XA", 1333123);
-        r.setAttribute("XB", (byte) 31);
-        r.setAttribute("XB", 'Q');
-        r.setAttribute("XC", "A STRING");
-
-        int intValue = 1123123123;
-        byte[] data = ReadTag.writeSingleValue((byte) 'i', intValue, false);
-        ByteBuffer byteBuffer = ByteBuffer.wrap(data);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-        Object value = ReadTag.readSingleValue((byte) 'i', byteBuffer, ValidationStringency.DEFAULT_STRINGENCY);
-        Assert.assertEquals (((Integer) value).intValue(), intValue);
-
-        String sValue = "value";
-        data = ReadTag.writeSingleValue((byte) 'Z', sValue, false);
-        byteBuffer = ByteBuffer.wrap(data);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-        value = ReadTag.readSingleValue((byte) 'Z', byteBuffer, ValidationStringency.DEFAULT_STRINGENCY);
-        Assert.assertEquals(sValue, value);
-
-        byte[] baValue = "value".getBytes();
-        data = ReadTag.writeSingleValue((byte) 'B', baValue, false);
-        byteBuffer = ByteBuffer.wrap(data);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-        value = ReadTag.readSingleValue((byte) 'B', byteBuffer, ValidationStringency.DEFAULT_STRINGENCY);
-        Assert.assertEquals((byte[]) value, baValue);
-    }
-
-    @Test
-    public void testUnsignedInt() {
-        long intValue = Integer.MAX_VALUE+1L;
-        byte[] data = ReadTag.writeSingleValue((byte) 'I', intValue, false);
-        ByteBuffer byteBuffer = ByteBuffer.wrap(data);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-        Object value = ReadTag.readSingleValue((byte) 'I', byteBuffer, ValidationStringency.SILENT);
-        Assert.assertTrue(value instanceof Long);
-        long lValue = (Long)value;
-        Assert.assertEquals (lValue & 0xFFFFFFFF, intValue);
-    }
-
-    @Test
-    public void testParallelReadTag() throws Exception {
-        // NOTE: testng 5.5 (circa 2007) doesn't support parallel data providers, but modern versions do.
-        // For now, roll our own.
-        final Object[][] allArgs = getParallelReadTagData();
-        final long timeout = 1000L * 5; // just in case
-        final List<Thread> threads = new ArrayList<Thread>(allArgs.length);
-        final Map<Object[], Exception> results = Collections.synchronizedMap(new HashMap<Object[], Exception>());
-        for (final Object[] argLine: allArgs) {
-            threads.add(new Thread() {
-                @Override
-                public void run() {
-                    try {
-                        testParallelReadTag((Byte)argLine[0], argLine[1]);
-                    } catch (final Exception e) {
-                        Assert.assertNull(results.put(argLine, e));
-                    }
-                }
-            });
-        }
-        for (final Thread thread: threads) {
-            thread.start();
-        }
-        for (final Thread thread: threads) {
-            thread.join(timeout);
-        }
-        for (final Map.Entry<Object[], Exception> result: results.entrySet()) {
-            // Will fail only on the first, for now, but a debugger will be able to see all the results.
-            Assert.fail("failed: " + Arrays.toString(result.getKey()), result.getValue());
-        }
-    }
-
-    //@Test(dataProvider = "parallelReadTagData")
-    public void testParallelReadTag(final byte tagType, final Object originalValue) {
-        // refactored from ReadTag.main()
-        final byte[] data = ReadTag.writeSingleValue(tagType, originalValue, false);
-        final ByteBuffer byteBuffer = ByteBuffer.wrap(data);
-        byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-        final Object readValue = ReadTag.readSingleValue(tagType, byteBuffer, ValidationStringency.DEFAULT_STRINGENCY);
-        Assert.assertEquals(readValue, originalValue);
-    }
-
-    //@DataProvider(name = "parallelReadTagData", parallel = true)
-    public Object[][] getParallelReadTagData() {
-        final int testCount = 10;
-        final Object[][] testData = new Object[testCount][];
-        for (int i = 0; i < testCount; i++) {
-            testData[i] = new Object[]{(byte)'Z', "test" + i};
-        }
-        return testData;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/structure/SliceTests.java b/src/test/java/htsjdk/samtools/cram/structure/SliceTests.java
deleted file mode 100644
index c52dccb..0000000
--- a/src/test/java/htsjdk/samtools/cram/structure/SliceTests.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package htsjdk.samtools.cram.structure;
-
-import htsjdk.samtools.CRAMFileReader;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.ValidationStringency;
-import htsjdk.samtools.cram.CRAMException;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-import htsjdk.samtools.util.SequenceUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Created by vadim on 07/12/2015.
- */
-public class SliceTests {
-    @Test
-    public void testUnmappedValidateRef() {
-        Slice slice = new Slice();
-        slice.alignmentStart= SAMRecord.NO_ALIGNMENT_START;
-        slice.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
-
-        Assert.assertTrue(slice.validateRefMD5(null));
-        Assert.assertTrue(slice.validateRefMD5(new byte[0]));
-        Assert.assertTrue(slice.validateRefMD5(new byte[1024]));
-    }
-
-    @Test
-    public void test_validateRef() {
-        byte[] ref = "AAAAA".getBytes();
-        final byte[] md5 = SequenceUtil.calculateMD5(ref, 0, Math.min(5, ref.length));
-        Slice slice = new Slice();
-        slice.sequenceId=0;
-        slice.alignmentSpan=5;
-        slice.alignmentStart=1;
-        slice.setRefMD5(ref);
-
-        Assert.assertEquals(slice.refMD5, md5);
-        Assert.assertTrue(slice.validateRefMD5(ref));
-    }
-
-    @Test(expectedExceptions= CRAMException.class)
-    public void testFailsMD5Check() throws IOException {
-        // auxf.alteredForMD5test.fa has been altered slightly from the original reference
-        // to cause the CRAM md5 check to fail
-        final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram");
-        final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa");
-        ReferenceSource refSource = new ReferenceSource(refFile);
-        CRAMFileReader reader = null;
-        try {
-            reader = new CRAMFileReader(
-                    CRAMFile,
-                    null,
-                    refSource,
-                    ValidationStringency.STRICT);
-            Iterator<SAMRecord> it = reader.getIterator();
-            while (it.hasNext()) {
-                it.next();
-            }
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/cram/structure/SubstitutionMatrixTest.java b/src/test/java/htsjdk/samtools/cram/structure/SubstitutionMatrixTest.java
deleted file mode 100644
index 31e7708..0000000
--- a/src/test/java/htsjdk/samtools/cram/structure/SubstitutionMatrixTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package htsjdk.samtools.cram.structure;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeGroups;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Parameters;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-/**
- * Created by Vadim on 12/03/2015.
- */
-public class SubstitutionMatrixTest {
-
-    SubstitutionMatrix m;
-    long[][] freqs;
-
-    @BeforeGroups(groups = "matrix2code")
-    public void m() {
-        m = new SubstitutionMatrix(new byte[]{27, (byte) 228, 27, 27, 27});
-    }
-
-    @BeforeGroups(groups = "freqs2matrix")
-    public void b() {
-        freqs = new long[255][255];
-        for (int r = 0; r < SubstitutionMatrix.BASES.length; r++) {
-            for (int b = 0; b < SubstitutionMatrix.BASES.length; b++) {
-                if (r == b)
-                    continue;
-                freqs[SubstitutionMatrix.BASES[r]][SubstitutionMatrix.BASES[b]] = b;
-            }
-        }
-        m = new SubstitutionMatrix(freqs);
-    }
-
-
-    @Test(dataProvider = "matrix2code", groups = "matrix2code")
-    public void testMatrix2code(char refBase, char base, int code) {
-        if (refBase == base)
-            return;
-        Assert.assertEquals(m.code((byte) refBase, (byte) base), code);
-        Assert.assertEquals(m.base((byte) refBase, (byte) code), base);
-    }
-
-    @Test(dataProvider = "freqs2matrix", groups = "freqs2matrix")
-    public void testFreqs2matrix(char refBase, char base, int code) {
-        if (refBase == base)
-            return;
-        Assert.assertEquals(m.code((byte) refBase, (byte) base), code);
-        Assert.assertEquals(m.base((byte) refBase, (byte) code), base);
-    }
-
-    @DataProvider(name = "matrix2code")
-    public Object[][] provider1() {
-        return new Object[][]{
-                {'A', 'C', 0},
-                {'A', 'G', 1},
-                {'A', 'T', 2},
-                {'A', 'N', 3},
-                {'C', 'A', 3},
-                {'C', 'G', 2},
-                {'C', 'T', 1},
-                {'C', 'N', 0},
-                {'G', 'A', 0},
-                {'G', 'C', 1},
-                {'G', 'T', 2},
-                {'G', 'N', 3},
-                {'T', 'A', 0},
-                {'T', 'C', 1},
-                {'T', 'G', 2},
-                {'T', 'N', 3},
-                {'N', 'A', 0},
-                {'N', 'C', 1},
-                {'N', 'G', 2},
-                {'N', 'T', 3},
-        };
-    }
-
-    @DataProvider(name = "freqs2matrix")
-    public Object[][] provider2() {
-        return new Object[][]{
-                {'A', 'C', 3},
-                {'A', 'G', 2},
-                {'A', 'T', 1},
-                {'A', 'N', 0},
-                {'C', 'A', 3},
-                {'C', 'G', 2},
-                {'C', 'T', 1},
-                {'C', 'N', 0},
-                {'G', 'A', 3},
-                {'G', 'C', 2},
-                {'G', 'T', 1},
-                {'G', 'N', 0},
-                {'T', 'A', 3},
-                {'T', 'C', 2},
-                {'T', 'G', 1},
-                {'T', 'N', 0},
-                {'N', 'A', 3},
-                {'N', 'C', 2},
-                {'N', 'G', 1},
-                {'N', 'T', 0},
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/fastq/FastqRecordTest.java b/src/test/java/htsjdk/samtools/fastq/FastqRecordTest.java
deleted file mode 100644
index f6f238e..0000000
--- a/src/test/java/htsjdk/samtools/fastq/FastqRecordTest.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package htsjdk.samtools.fastq;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public final class FastqRecordTest {
-
-    @Test
-    public void testBasic() {
-        final String seqHeaderPrefix = "FAKE0003 Original version has Solexa scores from 62 to -5 inclusive (in that order)";
-        final String seqLine = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT";
-        final String qualHeaderPrefix = "";
-        final String qualLine = ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
-        final FastqRecord fastqRecord = new FastqRecord(seqHeaderPrefix, seqLine, qualHeaderPrefix, qualLine);
-
-        Assert.assertNull(fastqRecord.getBaseQualityHeader());
-
-        Assert.assertEquals(fastqRecord.getReadHeader(), seqHeaderPrefix);
-        Assert.assertEquals(fastqRecord.getBaseQualityString(), qualLine);
-        Assert.assertEquals(fastqRecord.getReadString(), seqLine);
-        Assert.assertNotNull(fastqRecord.toString());//just check not nullness
-        Assert.assertNotEquals(fastqRecord, null);
-        Assert.assertFalse(fastqRecord.equals(null));
-        Assert.assertNotEquals(null, fastqRecord);
-        Assert.assertEquals(fastqRecord, fastqRecord);
-        Assert.assertNotEquals(fastqRecord, "fred");
-        Assert.assertNotEquals("fred", fastqRecord);
-        Assert.assertEquals(fastqRecord.length(), seqLine.length());
-        Assert.assertEquals(fastqRecord.getBaseQualityString().length(), fastqRecord.getReadString().length());
-        Assert.assertEquals(fastqRecord.getReadString().length(), fastqRecord.length());
-    }
-
-    @Test
-    public void testBasicEmptyHeaderPrefix() {
-        final String seqHeaderPrefix = "";
-        final String seqLine = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT";
-        final String qualHeaderPrefix = "";
-        final String qualLine = ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
-        final FastqRecord fastqRecord = new FastqRecord(seqHeaderPrefix, seqLine, qualHeaderPrefix, qualLine);
-        Assert.assertNull(fastqRecord.getReadHeader());
-        Assert.assertNull(fastqRecord.getBaseQualityHeader());
-    }
-
-    @Test
-    public void testCopy() {
-        final String seqHeaderPrefix = "FAKE0003 Original version has Solexa scores from 62 to -5 inclusive (in that order)";
-        final String seqLine = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT";
-        final String qualHeaderPrefix = "";
-        final String qualLine = ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
-        final FastqRecord fastqRecord = new FastqRecord(seqHeaderPrefix, seqLine, qualHeaderPrefix, qualLine);
-        final FastqRecord fastqRecordCopy = new FastqRecord(fastqRecord);
-
-        Assert.assertEquals(fastqRecord, fastqRecordCopy);
-        Assert.assertNotSame(fastqRecord, fastqRecordCopy);
-        Assert.assertSame(fastqRecord.getReadString(), fastqRecordCopy.getReadString());
-        Assert.assertSame(fastqRecord.getBaseQualityString(), fastqRecordCopy.getBaseQualityString());
-        Assert.assertSame(fastqRecord.getBaseQualityHeader(), fastqRecordCopy.getBaseQualityHeader());
-    }
-
-    @Test
-    public void testNullSeq() {
-        final String seqHeaderPrefix = "header";
-        final String seqLine = null;
-        final String qualHeaderPrefix = "";
-        final String qualLine = ";<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
-        new FastqRecord(seqHeaderPrefix, seqLine, qualHeaderPrefix, qualLine);
-        //Note: this does not blow up now but it will once we enforce non null seqLine
-    }
-
-    @Test
-    public void testEqualsWithNullHeader() {
-        final String seqLine = "GATTACA";
-        final String qualHeaderPrefix = "";
-        final String qualLine = "ABCDEFG";
-        final FastqRecord fastqRecord1 = new FastqRecord("", seqLine, qualHeaderPrefix, qualLine);
-        final FastqRecord fastqRecord2 = new FastqRecord("header", seqLine, qualHeaderPrefix, qualLine);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-
-        Assert.assertNotEquals(fastqRecord1.hashCode(), fastqRecord2.hashCode());
-        Assert.assertNotEquals(fastqRecord2.hashCode(), fastqRecord1.hashCode());
-        Assert.assertEquals(fastqRecord1.hashCode(), fastqRecord1.hashCode());
-        Assert.assertEquals(fastqRecord2.hashCode(), fastqRecord2.hashCode());
-    }
-
-    @Test
-    public void testEqualsWithNullSeqLine() {
-        final String seqLine = "GATTACA";
-        final String qualHeaderPrefix = "";
-        final String qualLine = "ABCDEFG";
-        final FastqRecord fastqRecord1 = new FastqRecord("", null, qualHeaderPrefix, qualLine);
-        final FastqRecord fastqRecord2 = new FastqRecord("header", seqLine, qualHeaderPrefix, qualLine);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-    }
-
-    @Test
-    public void testEqualsWithNullQualLine() {
-        final String seqLine = "GATTACA";
-        final String qualHeaderPrefix = "";
-        final String qualLine = "ABCDEFG";
-        final FastqRecord fastqRecord1 = new FastqRecord("", seqLine, qualHeaderPrefix, null);
-        final FastqRecord fastqRecord2 = new FastqRecord("header", seqLine, qualHeaderPrefix, qualLine);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-    }
-
-    @Test
-    public void testEqualsWithNullBaseQualityHeader() {
-        final String seqHeaderPrefix = "header";
-        final String seqLine = "GATTACA";
-        final String qualLine = "ABCDEFG";
-        final FastqRecord fastqRecord1 = new FastqRecord(seqHeaderPrefix, seqLine, null, qualLine);
-        final FastqRecord fastqRecord2 = new FastqRecord(seqHeaderPrefix, seqLine, "qualHeaderPrefix", qualLine);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-
-        Assert.assertNotEquals(fastqRecord1.hashCode(), fastqRecord2.hashCode());
-        Assert.assertNotEquals(fastqRecord2.hashCode(), fastqRecord1.hashCode());
-        Assert.assertEquals(fastqRecord1.hashCode(), fastqRecord1.hashCode());
-        Assert.assertEquals(fastqRecord2.hashCode(), fastqRecord2.hashCode());
-    }
-
-    @Test
-    public void testNullQual() {
-        final String seqHeaderPrefix = "header";
-        final String seqLine = "GATTACA";
-        new FastqRecord(seqHeaderPrefix, seqLine, "qualHeaderPrefix", null);
-        //Note: this does not blow up now but it will once we enforce non null quals
-    }
-
-    @Test
-    public void testNullString() {
-        final String seqHeaderPrefix = "header";
-        final String qualLine = "GATTACA";
-        new FastqRecord(seqHeaderPrefix, null, "qualHeaderPrefix", qualLine);
-        //Note: this does not blow up now but it will once we enforce non null seqLine
-    }
-
-    @Test
-    public void testEmptyQual() {
-        final String seqHeaderPrefix = "header";
-        final String seqLine = "GATTACA";
-        new FastqRecord(seqHeaderPrefix, seqLine, "qualHeaderPrefix", "");
-        //Note: this does not blow up now but it will once we enforce non empty quals
-    }
-
-    @Test
-    public void testEmptyString() {
-        final String seqHeaderPrefix = "header";
-        final String qualLine = "GATTACA";
-        new FastqRecord(seqHeaderPrefix, "", "qualHeaderPrefix", qualLine);
-        //Note: this does not blow up now but it will once we enforce non empty seqLine
-    }
-
-    @Test
-    public void testNotEqualQuals() {
-        final String seqLine1 = "GATTACA";
-        final String qualLine1 = "ABCDEFG";
-
-        final String seqLine2 = seqLine1;
-        final String qualLine2 = seqLine2.replace('A', 'X');
-
-        final FastqRecord fastqRecord1 = new FastqRecord("header", seqLine1, "qualHeaderPrefix", qualLine1);
-        final FastqRecord fastqRecord2 = new FastqRecord("header", seqLine2, "qualHeaderPrefix", qualLine2);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-
-        Assert.assertEquals(fastqRecord1.getReadString(), fastqRecord2.getReadString());
-        Assert.assertNotEquals(fastqRecord1.getBaseQualityString(), fastqRecord2.getBaseQualityString());
-
-        Assert.assertNotEquals(fastqRecord1.hashCode(), fastqRecord2.hashCode());
-        Assert.assertNotEquals(fastqRecord2.hashCode(), fastqRecord1.hashCode());
-    }
-
-    @Test
-    public void testNotEqualStrings() {
-        final String seqLine1 = "GATTACA";
-        final String qualLine1 = "ABCDEFG";
-
-        final String seqLine2 = seqLine1.replace('A', 'X');
-        final String qualLine2 = qualLine1;
-
-        final FastqRecord fastqRecord1 = new FastqRecord("header", seqLine1, "qualHeaderPrefix", qualLine1);
-        final FastqRecord fastqRecord2 = new FastqRecord("header", seqLine2, "qualHeaderPrefix", qualLine2);
-        Assert.assertNotEquals(fastqRecord1, fastqRecord2);
-        Assert.assertNotEquals(fastqRecord2, fastqRecord1);
-
-        Assert.assertNotEquals(fastqRecord1.getReadString(), fastqRecord2.getReadString());
-        Assert.assertEquals(fastqRecord1.getBaseQualityString(), fastqRecord2.getBaseQualityString());
-
-        Assert.assertNotEquals(fastqRecord1.hashCode(), fastqRecord2.hashCode());
-        Assert.assertNotEquals(fastqRecord2.hashCode(), fastqRecord1.hashCode());
-    }
-
-    @Test
-    public void testNotEqualLengths() {
-        final String seqLine1 = "GATTACA";
-        final String qualLine1 = seqLine1 + "X";
-
-        new FastqRecord("header", seqLine1, "qualHeaderPrefix", qualLine1);
-        //Note: this does not blow up now but it will once we enforce that seqLine and qualLine be the same length
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/fastq/FastqWriterTest.java b/src/test/java/htsjdk/samtools/fastq/FastqWriterTest.java
deleted file mode 100644
index eba5c5b..0000000
--- a/src/test/java/htsjdk/samtools/fastq/FastqWriterTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The MIT License
- *
- * Pierre Lindenbaum PhD
- *
- * 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.
- */
-package htsjdk.samtools.fastq;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import htsjdk.samtools.util.TestUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-
-/**
- * test fastq
- */
-public class FastqWriterTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest");
-
-    @DataProvider(name = "fastqsource")
-    public Object[][] createTestData() {
-        return new Object[][]{
-                {"solexa_full_range_as_solexa.fastq"},
-                {"5k-30BB2AAXX.3.aligned.sam.fastq"}
-        };
-    }
-
-    @Test(dataProvider = "fastqsource")
-    public void testReadReadWriteFastq(final String basename) throws Exception {
-        final File tmpFile = File.createTempFile("test.", ".fastq");
-        tmpFile.deleteOnExit();
-        final FastqReader fastqReader = new FastqReader(new File(TEST_DATA_DIR,basename));
-        final FastqWriterFactory writerFactory = new FastqWriterFactory();
-        final FastqWriter fastqWriter = writerFactory.newWriter(tmpFile);
-        for(final FastqRecord rec: fastqReader) fastqWriter.write(rec);
-        fastqWriter.close();
-        fastqReader.close();
-    }
-    
-    @Test(dataProvider = "fastqsource")
-    public void testFastqSerialize(final String basename) throws Exception {
-        //write 
-        final ArrayList<FastqRecord> records = new ArrayList<>();
-        final FastqReader fastqReader = new FastqReader(new File(TEST_DATA_DIR,basename));
-        for(final FastqRecord rec: fastqReader) {
-            records.add(rec);
-            if(records.size()>100) break;
-        }
-        fastqReader.close();
-        Assert.assertEquals(TestUtil.serializeAndDeserialize(records),records);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/FailsVendorReadQualityFilterTest.java b/src/test/java/htsjdk/samtools/filter/FailsVendorReadQualityFilterTest.java
deleted file mode 100644
index cb2cb05..0000000
--- a/src/test/java/htsjdk/samtools/filter/FailsVendorReadQualityFilterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class FailsVendorReadQualityFilterTest {
-
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-    private final FailsVendorReadQualityFilter filter = new FailsVendorReadQualityFilter();
-
-    /**
-     * Basic positive and negative tests for the FailsReadQualityFilter
-     *
-     * @param readQualityFlag   The read quality flag to be tested
-     * @param expectedResult    The expected result (true is the sequence should match the filter, otherwise false)
-     */
-    @Test(dataProvider="data")
-    public void testFailsReadQualityFilter(final String testName, final boolean readQualityFlag,
-                                           final boolean expectedResult) {
-        builder.addUnmappedFragment("testfrag");
-        final SAMRecord record = builder.iterator().next();
-        record.setReadFailsVendorQualityCheckFlag(readQualityFlag);
-        Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
-    }
-
-
-    /**
-     * Data for various sequences which may or may not match the filter.
-     */
-    @DataProvider(name = "data")
-    private Object[][] getFailsReadQualityTestData()
-    {
-        return new Object[][]{
-            {"Failed read, should be filtered out", true, true},
-            {"Passing read, should not be filtered out", false, false},
-        };
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/filter/InsertSizeFilterTest.java b/src/test/java/htsjdk/samtools/filter/InsertSizeFilterTest.java
deleted file mode 100644
index fc4937d..0000000
--- a/src/test/java/htsjdk/samtools/filter/InsertSizeFilterTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class InsertSizeFilterTest {
-    private static final int READ_LENGTH = 20;
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-
-    @BeforeTest
-    public void setUp() {
-        builder.setReadLength(READ_LENGTH);
-        builder.addFrag("mapped_unpaired", 1, 1, false);
-        builder.addUnmappedPair("unmapped_paired"); // insert size = 0
-        builder.addPair("mapped_paired_short", 1, 1, 31); // insert size = 50
-        builder.addPair("mapped_paired_long", 1, 1, 81); // insert size = 100
-        builder.addPair("mapped_paired_long_flipped", 1, 81, 1); // insert size = 100
-    }
-
-    @Test(dataProvider = "data")
-    public void testInsertSizeFilter(final int minInsertSize, final int maxInsertSize, final int expectedPassingRecords) {
-        final InsertSizeFilter filter = new InsertSizeFilter(minInsertSize, maxInsertSize);
-        int actualPassingRecords = 0;
-        for (final SAMRecord rec : builder) {
-            if (!filter.filterOut(rec)) actualPassingRecords++;
-        }
-        Assert.assertEquals(actualPassingRecords, expectedPassingRecords);
-    }
-
-    @DataProvider(name = "data")
-    private Object[][] testData() {
-        return new Object[][]{
-                {0, 0, 2},
-                {50, 50, 2},
-                {50, 100, 6},
-                {0, Integer.MAX_VALUE, 8}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/IntervalKeepPairFilterTest.java b/src/test/java/htsjdk/samtools/filter/IntervalKeepPairFilterTest.java
deleted file mode 100644
index 3d30255..0000000
--- a/src/test/java/htsjdk/samtools/filter/IntervalKeepPairFilterTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecordSetBuilder;
-import htsjdk.samtools.util.CollectionUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import htsjdk.samtools.util.Interval;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.stream.StreamSupport;
-
-public class IntervalKeepPairFilterTest {
-    private static final int READ_LENGTH = 151;
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-
-    @BeforeTest
-    public void setUp() {
-        builder.setReadLength(READ_LENGTH);
-        // Will be kept when an interval overlaps chromosome 1 in the first 151
-        // bases.
-        builder.addPair("mapped_pair_chr1", 0, 1, 151);
-        // Will be kept when an interval overlaps chromsome 2 in the first 151
-        // bases.
-        builder.addPair("mapped_pair_chr2", 1, 1, 151);
-        // The first read should pass and second should not, but both will
-        // be kept in first test.
-        builder.addPair("one_of_pair", 0, 1, 1000);
-        // The second read is unmapped, but both should be kept in an
-        // interval test where the interval includes chromosome four, where
-        // read one will overlap.
-        builder.addPair("second_mate_unmapped", 3, -1, 1, 1000, false, true,
-                "151M", null, false, false, false, false, -1);
-        // The first read is unmapped but both should be kept in an
-        // interval test where the interval includes chromosome four, where
-        // read two will overlap.
-        builder.addPair("first_mate_unmapped", -1, 3, 1000, 1, true, false,
-                null, "151M", false, false, false, false, -1);
-        // This pair will overlap any interval that includes chromosome 1:1000
-        builder.addPair("prove_one_of_pair", 0, 1000, 1000);
-        // These reads are unmapped and will not map to any intervals, so they
-        // are never kept. This is tested below.
-        builder.addPair("both_unmapped", -1, -1, 1, 1, true, true, null, null,
-                false, false, false, false, -1);
-        // Secondary alignments are never kept by the interval filter.
-        builder.addFrag("mapped_pair_chr1", 0, 1, false, false, "151M", null, -1, true, false);
-        // Supplementary alignment are never kept by the interval filter.
-        builder.addFrag("mapped_pair_chr1", 0, 1, false, false, "151M", null, -1, false, true);
-    }
-
-    @Test(dataProvider = "testData")
-    public void testIntervalPairFilter(final List<Interval> intervals, final long expectedPassingRecords) {
-        final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervals);
-
-        long actualPassingRecords = StreamSupport.stream(builder.spliterator(), false)
-                .filter(rec -> !filter.filterOut(rec))
-                .count();
-
-        Assert.assertEquals(actualPassingRecords, expectedPassingRecords);
-    }
-
-    @Test
-    public void testUnmappedPair() {
-        final List<Interval> intervalList = new ArrayList<>();
-
-        final Interval interval1 = new Interval("chr1", 1, 999);
-        final Interval interval2 = new Interval("chr3", 1, 2);
-        final Interval interval3 = new Interval("chr2", 1, 2);
-        final Interval interval4 = new Interval("chr4", 1, 2);
-
-        intervalList.addAll(CollectionUtil.makeList(interval1, interval2, interval3, interval4));
-
-        final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervalList);
-
-        boolean unmappedPassed = StreamSupport.stream(builder.spliterator(), false)
-                .filter(rec -> !filter.filterOut(rec))
-                .anyMatch(rec -> rec.getReadName().equals("both_unmapped"));
-
-        Assert.assertFalse(unmappedPassed);
-    }
-
-    @Test
-    public void testNotPrimaryReads() {
-        final List<Interval> intervalList = new ArrayList<>();
-        final Interval interval1 = new Interval("chr1", 1, 999);
-        intervalList.add(interval1);
-
-        final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervalList);
-
-        boolean notPrimary = StreamSupport.stream(builder.spliterator(), false)
-                .filter(rec -> !filter.filterOut(rec))
-                .anyMatch(rec -> rec.getNotPrimaryAlignmentFlag() || rec.getSupplementaryAlignmentFlag());
-
-        Assert.assertFalse(notPrimary);
-    }
-
-    @DataProvider(name = "testData")
-    private Object[][] testData() {
-        Interval interval = new Interval("chr1", 1, 999);
-        final List<Interval> intervalList_twoPair = new ArrayList<>();
-        intervalList_twoPair.add(interval);
-
-        interval = new Interval("chr3", 1, 2);
-        final List<Interval> intervalList_noMatch = new ArrayList<>();
-        intervalList_noMatch.add(interval);
-
-        interval = new Interval("chr2", 1, 2);
-        final List<Interval> intervalList_onePair = new ArrayList<>();
-        intervalList_onePair.add(interval);
-
-        interval = new Interval("chr4", 1, 2);
-        final List<Interval> intervalList_unmapped = new ArrayList<>();
-        intervalList_unmapped.add(interval);
-
-        return new Object[][]{
-                {intervalList_twoPair, 4},
-                {intervalList_noMatch, 0},
-                {intervalList_onePair, 2},
-                {intervalList_unmapped, 4}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/JavascriptSamRecordFilterTest.java b/src/test/java/htsjdk/samtools/filter/JavascriptSamRecordFilterTest.java
deleted file mode 100644
index 7835576..0000000
--- a/src/test/java/htsjdk/samtools/filter/JavascriptSamRecordFilterTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.util.CloserUtil;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * @author Pierre Lindenbaum PhD Institut du Thorax - INSERM - Nantes - France
- */
-
-public class JavascriptSamRecordFilterTest {
-    final File testDir = new File("./src/test/resources/htsjdk/samtools");
-
-    @DataProvider
-    public Object[][] jsData() {
-        return new Object[][] { { "unsorted.sam", "samFilter01.js", 8 }, { "unsorted.sam", "samFilter02.js", 10 }, };
-    }
-
-    @Test(dataProvider = "jsData")
-    public void testJavascriptFilters(final String samFile, final String javascriptFile, final int expectCount) {
-        final SamReaderFactory srf = SamReaderFactory.makeDefault();
-        final SamReader samReader = srf.open(new File(testDir, samFile));
-        final JavascriptSamRecordFilter filter;
-        try {
-            filter = new JavascriptSamRecordFilter(new File(testDir, javascriptFile),
-                    samReader.getFileHeader());    
-        } catch (IOException err) {
-            Assert.fail("Cannot read script",err);
-            return;
-        }
-        final SAMRecordIterator iter = samReader.iterator();
-        int count = 0;
-        while (iter.hasNext()) {
-            if (filter.filterOut(iter.next())) {
-                continue;
-            }
-            ++count;
-        }
-        iter.close();
-        CloserUtil.close(samReader);
-        Assert.assertEquals(count, expectCount, "Expected number of reads " + expectCount + " but got " + count);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/MappingQualityFilterTest.java b/src/test/java/htsjdk/samtools/filter/MappingQualityFilterTest.java
deleted file mode 100644
index 2bffcd6..0000000
--- a/src/test/java/htsjdk/samtools/filter/MappingQualityFilterTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class MappingQualityFilterTest {
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-
-    @BeforeTest
-    public void setUp() {
-        // note the side effects...
-        builder.addFrag("zeroMQ", 1, 1, false).setMappingQuality(0);
-        builder.addFrag("lowMQ", 1, 1, false).setMappingQuality(10);
-        builder.addFrag("highMQ", 1, 1, false).setMappingQuality(30);
-    }
-
-    @Test(dataProvider = "data")
-    public void testMappingQualityFilter(final int minMappingQuality, final int expectedPassingRecords) {
-        final MappingQualityFilter filter = new MappingQualityFilter(minMappingQuality);
-        int actualPassingRecords = 0;
-        for (final SAMRecord rec : builder) {
-            if (!filter.filterOut(rec)) actualPassingRecords++;
-        }
-        Assert.assertEquals(actualPassingRecords, expectedPassingRecords);
-    }
-
-    @DataProvider(name = "data")
-    private Object[][] testData() {
-        return new Object[][]{
-                {0, 3},
-                {10, 2},
-                {30, 1}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/OverclippedReadFilterTest.java b/src/test/java/htsjdk/samtools/filter/OverclippedReadFilterTest.java
deleted file mode 100644
index bff8491..0000000
--- a/src/test/java/htsjdk/samtools/filter/OverclippedReadFilterTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class OverclippedReadFilterTest {
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-    private final int unclippedBasesThreshold = 30;
-
-    private SAMRecord buildFrag(final String name, final String cigarString) {
-        // for this test, all we care about is the CIGAR
-        return builder.addFrag(name, 0, 1, false, false, cigarString, null, 30);
-    }
-
-    @Test(dataProvider = "data")
-    public void testOverclippedReadFilter(final String name, final String cigar, final boolean filterSingleEndClips, final boolean shouldFail) {
-        final OverclippedReadFilter filter = new OverclippedReadFilter(unclippedBasesThreshold, filterSingleEndClips);
-        final SAMRecord rec = buildFrag(name, cigar);
-        Assert.assertEquals(filter.filterOut(rec), shouldFail);
-    }
-
-    @DataProvider(name = "data")
-    private Object[][] testData() {
-        return new Object[][]{
-                {"foo", "1S10M1S", false, true},
-                {"foo", "1S10X1S", false, true},
-                {"foo", "1H1S10M1S1H", false, true},
-                {"foo", "1S40M1S", false, false},
-                {"foo", "1S40X1S", false, false},
-                {"foo", "1H10M1S", false, false},
-                {"foo", "1S10M1H", false, false},
-                {"foo", "10M1S", false, false},
-                {"foo", "1S10M", false, false},
-                {"foo", "10M1S", true, true},
-                {"foo", "1S10M", true, true},
-                {"foo", "1S10M10D10M1S", false, true},
-                {"foo", "1S1M40I1S", false, false},
-                {"foo", "1S10I1S", false, true},
-                {"foo", "1S40I1S", false, false},
-                {"foo", "1S40I1S", true, false},
-                {"foo", "25S40I25M", true, false},
-                {"foo", "25S25M", true, true},
-                {"foo", "25S25X", true, true},
-                {"foo", "25S25H", true, true},
-                {"foo", "25S25H", false, false},
-                {"foo", "25S25M25S", false, true},
-                {"foo", "25M25S", true, true},
-                {"foo", "25S25M", true, true},
-                {"foo", "25S35S", true, true},
-                {"foo", "25S35M25S", true, false},
-                {"foo", "35M25S", true, false},
-                {"foo", "25S35M", true, false}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/filter/SolexaNoiseFilterTest.java b/src/test/java/htsjdk/samtools/filter/SolexaNoiseFilterTest.java
deleted file mode 100644
index 96fa324..0000000
--- a/src/test/java/htsjdk/samtools/filter/SolexaNoiseFilterTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Basic test for the SolexaNoiseFilter
- */
-public class SolexaNoiseFilterTest {
-
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-    private final SolexaNoiseFilter filter = new SolexaNoiseFilter();
-
-    /**
-     * Basic positive and negative tests for the PolyANoiseFilter
-     *
-     * @param sequence          The sequence to be tested
-     * @param expectedResult    The expected result (true is the sequence should match the filter, otherwise false)
-     */
-    @Test(dataProvider="data")
-    public void testSolexaNoiseFilter(final String testName, final String sequence, final boolean expectedResult) {
-        builder.addUnmappedFragment("testfrag");
-        final SAMRecord record = builder.iterator().next();
-        record.setReadString(sequence);
-        Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
-    }
-
-
-    /**
-     * Data for various sequences which may or may not match the filter.
-     */
-    @DataProvider(name = "data")
-    private Object[][] getSolexaNoiseTestData()
-    {
-        return new Object[][]{
-            {"36-base read all a's filter out", "AAAAAaaaaaAAAAAAAAAAAAAAAAAAAAaaaaaa", true},
-            {"36-base read with n, filter out", "AAAAAaaaaaAAAAAAAAAAAAAAAAAAAAaaaaan", true}, 
-            {"51-base read, final base mismatch", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT", false},
-            {"51-base read, middle base mismatch", "aaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaa", false},
-            {"76-base read, a's and n's, filter out",
-                    "aaaaaaaaaaaaaaaaaNNaaaaaaaaaaaaaaaaaaaaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", true},
-            {"76-base doesn't match",
-                    "NNNATAAAnnnnnnnnnnTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", false},
-        };
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/filter/TagFilterTest.java b/src/test/java/htsjdk/samtools/filter/TagFilterTest.java
deleted file mode 100644
index 6e0c702..0000000
--- a/src/test/java/htsjdk/samtools/filter/TagFilterTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.filter;
-
-import htsjdk.samtools.ReservedTagConstants;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests for the TagFilter class
- */
-public class TagFilterTest {
-    private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-
-
-    /**
-     * Basic positive and negative tests for the TagFilter
-     *
-     * @param tag               The tag to be tested
-     * @param validValues       The values the filter should test for
-     * @param testValue         The value to test for in the record
-     * @param expectedResult    The expected result (true is the sequence should match the filter, otherwise false)
-     */
-    @Test(dataProvider="data")
-    public void testTagFilter(final String testName, final String tag, final List<Object> validValues,
-                              final Object testValue, final boolean expectedResult) {
-        final TagFilter filter = new TagFilter(tag, validValues);
-        builder.addUnmappedFragment("testfrag");
-        final SAMRecord record = builder.iterator().next();
-        if (testValue != null) {
-            record.setAttribute(tag, testValue);
-        }
-        Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
-    }
-
-
-    /**
-     * Data for various sequences which may or may not match the filter.
-     */
-    @DataProvider(name = "data")
-    private Object[][] getTagFilterTestData()
-    {
-        return new Object[][]{
-            {"Basic positive test", ReservedTagConstants.XN, Arrays.asList(1), 1, true},
-            {"Multi-value positive test", ReservedTagConstants.XN, Arrays.asList(1,2,3), 1, true},
-            {"Incorrect value negative test", ReservedTagConstants.XN, Arrays.asList(1), 2, false},
-            {"Null value negative test", ReservedTagConstants.XN, Arrays.asList(1), null, false} 
-        };
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/liftover/LiftOverTest.java b/src/test/java/htsjdk/samtools/liftover/LiftOverTest.java
deleted file mode 100644
index 8e9f92e..0000000
--- a/src/test/java/htsjdk/samtools/liftover/LiftOverTest.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.liftover;
-
-import htsjdk.samtools.util.Interval;
-import htsjdk.samtools.util.OverlapDetector;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class LiftOverTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/liftover");
-    private static final File CHAIN_FILE = new File(TEST_DATA_DIR, "hg18ToHg19.over.chain");
-
-    private LiftOver liftOver;
-    Map<String, Set<String>> contigMap;
-
-    @BeforeClass
-    public void initLiftOver() {
-        liftOver = new LiftOver(CHAIN_FILE);
-        contigMap = liftOver.getContigMap();
-    }
-
-    @Test(dataProvider = "testIntervals")
-    public void testBasic(final Interval in, final Interval expected) {
-        final Interval out = liftOver.liftOver(in);
-        Assert.assertEquals(out, expected);
-
-    }
-
-    @DataProvider(name = "testIntervals")
-    public Object[][] makeTestIntervals() {
-        return new Object[][] {
-                {new Interval("chr3", 50911035, 50911051), null},
-                {new Interval("chr1", 16776377, 16776452),    new Interval("chr1", 16903790, 16903865)},
-                {new Interval("chr2", 30575990, 30576065),    new Interval("chr2", 30722486, 30722561)},
-                {new Interval("chr3", 12157217, 12157292),    new Interval("chr3", 12182217, 12182292)},
-                {new Interval("chr4", 12503121, 12503196),    new Interval("chr4", 12894023, 12894098)},
-                {new Interval("chr5", 13970930, 13971005),    new Interval("chr5", 13917930, 13918005)},
-                {new Interval("chr6", 13838774, 13838849),    new Interval("chr6", 13730795, 13730870)},
-                {new Interval("chr7", 23978336, 23978411),    new Interval("chr7", 24011811, 24011886)},
-                {new Interval("chr8", 13337368, 13337443),    new Interval("chr8", 13292997, 13293072)},
-                {new Interval("chr9", 35059282, 35059357),    new Interval("chr9", 35069282, 35069357)},
-                {new Interval("chr10", 7893794, 7893869),     new Interval("chr10", 7853788, 7853863)},
-                {new Interval("chr11", 17365784, 17365859),   new Interval("chr11", 17409208, 17409283)},
-                {new Interval("chr12", 4530193, 4530268),     new Interval("chr12", 4659932, 4660007)},
-                {new Interval("chr13", 29398707, 29398782),   new Interval("chr13", 30500707, 30500782)},
-                {new Interval("chr14", 22955252, 22955327),   new Interval("chr14", 23885412, 23885487)},
-                {new Interval("chr15", 27477379, 27477454),   new Interval("chr15", 29690087, 29690162)},
-                {new Interval("chr16", 13016380, 13016455),   new Interval("chr16", 13108879, 13108954)},
-                {new Interval("chr17", 28318218, 28318293),   new Interval("chr17", 31294105, 31294180)},
-                {new Interval("chr18", 42778225, 42778300),   new Interval("chr18", 44524227, 44524302)},
-                {new Interval("chr19", 8340119, 8340194),     new Interval("chr19", 8434119, 8434194)},
-                {new Interval("chr20", 39749226, 39749301),   new Interval("chr20", 40315812, 40315887)},
-                {new Interval("chr21", 20945136, 20945211),   new Interval("chr21", 22023265, 22023340)},
-                {new Interval("chr22", 32307031, 32307106),   new Interval("chr22", 33977031, 33977106)},
-                {new Interval("chrX", 34252958, 34253033) ,   new Interval("chrX", 34343037, 34343112)},
-                // Sampling from /seq/references/HybSelOligos/whole_exome_refseq_coding/whole_exome_refseq_coding.targets.interval_list
-                {new Interval("chr1", 58952, 59873),	new Interval("chr1", 69089, 70010)},
-                {new Interval("chr1", 7733844, 7734041),	new Interval("chr1", 7811257, 7811454)},
-                {new Interval("chr1", 16261179, 16261276),	new Interval("chr1", 16388592, 16388689)},
-                {new Interval("chr1", 23634929, 23635110),	new Interval("chr1", 23762342, 23762523)},
-                {new Interval("chr1", 31910910, 31911030),	new Interval("chr1", 32138323, 32138443)},
-                {new Interval("chr1", 39686851, 39687024),	new Interval("chr1", 39914264, 39914437)},
-                {new Interval("chr1", 46434068, 46434185),	new Interval("chr1", 46661481, 46661598)},
-                {new Interval("chr1", 60102890, 60102928),	new Interval("chr1", 60330302, 60330340)},
-                {new Interval("chr1", 84734151, 84734336),	new Interval("chr1", 84961563, 84961748)},
-                {new Interval("chr1", 100529545, 100529650),	new Interval("chr1", 100756957, 100757062)},
-                {new Interval("chr1", 114771320, 114771441),	new Interval("chr1", 114969797, 114969918)},
-                {new Interval("chr1", 148564831, 148564965),	new Interval("chr1", 150298207, 150298341)},
-                {new Interval("chr1", 153293008, 153293090),	new Interval("chr1", 155026384, 155026466)},
-                {new Interval("chr1", 158167550, 158167677),	new Interval("chr1", 159900926, 159901053)},
-                {new Interval("chr1", 169444555, 169444718),	new Interval("chr1", 171177931, 171178094)},
-                {new Interval("chr1", 183535970, 183536100),	new Interval("chr1", 185269347, 185269477)},
-                {new Interval("chr1", 201411300, 201411508),	new Interval("chr1", 203144677, 203144885)},
-                {new Interval("chr1", 212862043, 212862249),	new Interval("chr1", 214795420, 214795626)},
-                {new Interval("chr1", 228992499, 228992560),	new Interval("chr1", 230925876, 230925937)},
-                {new Interval("chr1", 246268191, 246269133),	new Interval("chr1", 248201568, 248202510)},
-                {new Interval("chr2", 25027765, 25027929),	new Interval("chr2", 25174261, 25174425)},
-                {new Interval("chr2", 32572109, 32572240),	new Interval("chr2", 32718605, 32718736)},
-                {new Interval("chr2", 53988959, 53989061),	new Interval("chr2", 54135455, 54135557)},
-                {new Interval("chr2", 71749748, 71749847),	new Interval("chr2", 71896240, 71896339)},
-                {new Interval("chr2", 96059879, 96060011),	new Interval("chr2", 96696152, 96696284)},
-                {new Interval("chr2", 109923614, 109923763),	new Interval("chr2", 110566325, 110566474)},
-                {new Interval("chr2", 130655571, 130655646),	new Interval("chr2", 130939101, 130939176)},
-                {new Interval("chr2", 159228028, 159228205),	new Interval("chr2", 159519782, 159519959)},
-                {new Interval("chr2", 172639236, 172639282),	new Interval("chr2", 172930990, 172931036)},
-                {new Interval("chr2", 189558634, 189558751),	new Interval("chr2", 189850389, 189850506)},
-                {new Interval("chr2", 203547300, 203547466),	new Interval("chr2", 203839055, 203839221)},
-                {new Interval("chr2", 219578985, 219579191),	new Interval("chr2", 219870741, 219870947)},
-                {new Interval("chr2", 232982284, 232982404),	new Interval("chr2", 233274040, 233274160)},
-                {new Interval("chr3", 3114819, 3114976),	new Interval("chr3", 3139819, 3139976)},
-                {new Interval("chr3", 16333337, 16333745),	new Interval("chr3", 16358333, 16358741)},
-                {new Interval("chr3", 40183652, 40183736),	new Interval("chr3", 40208648, 40208732)},
-                {new Interval("chr3", 48601077, 48601227),	new Interval("chr3", 48626073, 48626223)},
-                {new Interval("chr3", 52287255, 52287419),	new Interval("chr3", 52312215, 52312379)},
-                {new Interval("chr3", 63979313, 63979425),	new Interval("chr3", 64004273, 64004385)},
-                {new Interval("chr3", 110234255, 110234364),	new Interval("chr3", 108751565, 108751674)},
-                {new Interval("chr3", 126088466, 126088539),	new Interval("chr3", 124605776, 124605849)},
-                {new Interval("chr3", 137600279, 137600363),	new Interval("chr3", 136117589, 136117673)},
-                {new Interval("chr3", 159845116, 159845200),	new Interval("chr3", 158362422, 158362506)},
-                {new Interval("chr3", 185387877, 185387927),	new Interval("chr3", 183905183, 183905233)},
-                {new Interval("chr3", 199065658, 199065715),	new Interval("chr3", 197581261, 197581318)},
-                {new Interval("chr4", 10152742, 10152765),	new Interval("chr4", 10543644, 10543667)},
-                {new Interval("chr4", 47243396, 47243638),	new Interval("chr4", 47548639, 47548881)},
-                {new Interval("chr4", 72632227, 72632303),	new Interval("chr4", 72413363, 72413439)},
-                {new Interval("chr4", 88942682, 88942736),	new Interval("chr4", 88723658, 88723712)},
-                {new Interval("chr4", 114381088, 114381190),	new Interval("chr4", 114161639, 114161741)},
-                {new Interval("chr4", 151338602, 151338707),	new Interval("chr4", 151119152, 151119257)},
-                {new Interval("chr4", 184429225, 184429390),	new Interval("chr4", 184192231, 184192396)},
-                {new Interval("chr5", 14804176, 14804350),	new Interval("chr5", 14751176, 14751350)},
-                {new Interval("chr5", 43687596, 43687745),	new Interval("chr5", 43651839, 43651988)},
-                {new Interval("chr5", 71651730, 71651806),	new Interval("chr5", 71615974, 71616050)},
-                {new Interval("chr5", 95017504, 95017771),	new Interval("chr5", 94991748, 94992015)},
-                {new Interval("chr5", 128984208, 128984352),	new Interval("chr5", 128956309, 128956453)},
-                {new Interval("chr5", 140033038, 140033159),	new Interval("chr5", 140052854, 140052975)},
-                {new Interval("chr5", 153045976, 153046084),	new Interval("chr5", 153065783, 153065891)},
-                {new Interval("chr5", 176255669, 176255768),	new Interval("chr5", 176323063, 176323162)},
-                {new Interval("chr6", 10810586, 10810710),	new Interval("chr6", 10702600, 10702724)},
-                {new Interval("chr6", 30666289, 30666459),	new Interval("chr6", 30558310, 30558480)},
-                {new Interval("chr6", 33082591, 33082598),	new Interval("chr6", 32974613, 32974620)},
-                {new Interval("chr6", 39940185, 39940263),	new Interval("chr6", 39832207, 39832285)},
-                {new Interval("chr6", 50789726, 50789768),	new Interval("chr6", 50681767, 50681809)},
-                {new Interval("chr6", 79721666, 79721720),	new Interval("chr6", 79664947, 79665001)},
-                {new Interval("chr6", 108336822, 108336934),	new Interval("chr6", 108230129, 108230241)},
-                {new Interval("chr6", 131240935, 131241085),	new Interval("chr6", 131199242, 131199392)},
-                {new Interval("chr6", 151799272, 151799384),	new Interval("chr6", 151757579, 151757691)},
-                {new Interval("chr6", 169897302, 169897445),	new Interval("chr6", 170155377, 170155520)},
-                {new Interval("chr7", 17341792, 17341937),	new Interval("chr7", 17375267, 17375412)},
-                {new Interval("chr7", 38875269, 38875380),	new Interval("chr7", 38908744, 38908855)},
-                {new Interval("chr7", 72563000, 72563120),	new Interval("chr7", 72925064, 72925184)},
-                {new Interval("chr7", 89839403, 89839480),	new Interval("chr7", 90001467, 90001544)},
-                {new Interval("chr7", 100063781, 100063867),	new Interval("chr7", 100225845, 100225931)},
-                {new Interval("chr7", 111889559, 111889671),	new Interval("chr7", 112102323, 112102435)},
-                {new Interval("chr7", 133900771, 133900840),	new Interval("chr7", 134250231, 134250300)},
-                {new Interval("chr7", 149124615, 149124769),	new Interval("chr7", 149493682, 149493836)},
-                {new Interval("chr8", 9647462, 9647548),	new Interval("chr8", 9610052, 9610138)},
-                {new Interval("chr8", 27203588, 27203614),	new Interval("chr8", 27147671, 27147697)},
-                {new Interval("chr8", 43171970, 43172044),	new Interval("chr8", 43052813, 43052887)},
-                {new Interval("chr8", 76088775, 76088894),	new Interval("chr8", 75926220, 75926339)},
-                {new Interval("chr8", 103641854, 103642290),	new Interval("chr8", 103572678, 103573114)},
-                {new Interval("chr8", 133913660, 133913828),	new Interval("chr8", 133844478, 133844646)},
-                {new Interval("chr8", 145697031, 145697164),	new Interval("chr8", 145726223, 145726356)},
-                {new Interval("chr9", 26985517, 26985849),	new Interval("chr9", 26995517, 26995849)},
-                {new Interval("chr9", 68496721, 68496793),	new Interval("chr9", 69206901, 69206973)},
-                {new Interval("chr9", 94051959, 94052046),	new Interval("chr9", 95012138, 95012225)},
-                {new Interval("chr9", 110750285, 110750337),	new Interval("chr9", 111710464, 111710516)},
-                {new Interval("chr9", 124416836, 124417782),	new Interval("chr9", 125377015, 125377961)},
-                {new Interval("chr9", 130939690, 130939794),	new Interval("chr9", 131899869, 131899973)},
-                {new Interval("chr9", 138395593, 138395667),	new Interval("chr9", 139275772, 139275846)},
-                {new Interval("chr10", 6048112, 6048310),	new Interval("chr10", 6008106, 6008304)},
-                {new Interval("chr10", 26599573, 26599693),	new Interval("chr10", 26559567, 26559687)},
-                {new Interval("chr10", 51507890, 51507920),	new Interval("chr10", 51837884, 51837914)},
-                {new Interval("chr10", 74343070, 74343234),	new Interval("chr10", 74673064, 74673228)},
-                {new Interval("chr10", 93604764, 93604865),	new Interval("chr10", 93614784, 93614885)},
-                {new Interval("chr10", 101985412, 101985513),	new Interval("chr10", 101995422, 101995523)},
-                {new Interval("chr10", 115325644, 115325755),	new Interval("chr10", 115335654, 115335765)},
-                {new Interval("chr10", 129062310, 129062470),	new Interval("chr10", 129172320, 129172480)},
-                {new Interval("chr11", 1904274, 1904289),	new Interval("chr11", 1947698, 1947713)},
-                {new Interval("chr11", 11928485, 11928607),	new Interval("chr11", 11971909, 11972031)},
-                {new Interval("chr11", 33326642, 33326942),	new Interval("chr11", 33370066, 33370366)},
-                {new Interval("chr11", 55554469, 55555445),	new Interval("chr11", 55797893, 55798869)},
-                {new Interval("chr11", 62505888, 62506060),	new Interval("chr11", 62749312, 62749484)},
-                {new Interval("chr11", 65488560, 65488619),	new Interval("chr11", 65731984, 65732043)},
-                {new Interval("chr11", 71618353, 71618446),	new Interval("chr11", 71940705, 71940798)},
-                {new Interval("chr11", 89174516, 89174750),	new Interval("chr11", 89534868, 89535102)},
-                {new Interval("chr11", 111349955, 111350190),	new Interval("chr11", 111844745, 111844980)},
-                {new Interval("chr11", 120195672, 120195841),	new Interval("chr11", 120690462, 120690631)},
-                {new Interval("chr12", 1089617, 1089776),	new Interval("chr12", 1219356, 1219515)},
-                {new Interval("chr12", 8894021, 8894139),	new Interval("chr12", 9002754, 9002872)},
-                {new Interval("chr12", 26455518, 26455614),	new Interval("chr12", 26564251, 26564347)},
-                {new Interval("chr12", 46663731, 46663788),	new Interval("chr12", 48377464, 48377521)},
-                {new Interval("chr12", 51502394, 51502432),	new Interval("chr12", 53216127, 53216165)},
-                {new Interval("chr12", 55603883, 55604103),	new Interval("chr12", 57317616, 57317836)},
-                {new Interval("chr12", 69218200, 69218280),	new Interval("chr12", 70931933, 70932013)},
-                {new Interval("chr12", 97543837, 97544677),	new Interval("chr12", 99019706, 99020546)},
-                {new Interval("chr12", 108438951, 108439074),	new Interval("chr12", 109954568, 109954691)},
-                {new Interval("chr12", 119021215, 119021343),	new Interval("chr12", 120536832, 120536960)},
-                {new Interval("chr12", 127849755, 127849917),	new Interval("chr12", 129283802, 129283964)},
-                {new Interval("chr13", 28900978, 28901035),	new Interval("chr13", 30002978, 30003035)},
-                {new Interval("chr13", 48646570, 48646698),	new Interval("chr13", 49748569, 49748697)},
-                {new Interval("chr13", 98989699, 98989814),	new Interval("chr13", 100191698, 100191813)},
-                {new Interval("chr14", 20929460, 20929643),	new Interval("chr14", 21859620, 21859803)},
-                {new Interval("chr14", 33338689, 33340068),	new Interval("chr14", 34268938, 34270317)},
-                {new Interval("chr14", 55217155, 55217163),	new Interval("chr14", 56147402, 56147410)},
-                {new Interval("chr14", 71260115, 71260358),	new Interval("chr14", 72190362, 72190605)},
-                {new Interval("chr14", 89806293, 89806451),	new Interval("chr14", 90736540, 90736698)},
-                {new Interval("chr14", 102548185, 102548280),	new Interval("chr14", 103478432, 103478527)},
-                {new Interval("chr15", 31917122, 31918453),	new Interval("chr15", 34129830, 34131161)},
-                {new Interval("chr15", 40481129, 40481302),	new Interval("chr15", 42693837, 42694010)},
-                {new Interval("chr15", 48649374, 48649484),	new Interval("chr15", 50862082, 50862192)},
-                {new Interval("chr15", 61768839, 61768953),	new Interval("chr15", 63981786, 63981900)},
-                {new Interval("chr15", 72115399, 72115456),	new Interval("chr15", 74328346, 74328403)},
-                {new Interval("chr15", 83031858, 83032011),	new Interval("chr15", 85230854, 85231007)},
-                {new Interval("chr16", 79709, 79902),	new Interval("chr16", 139709, 139902)},
-                {new Interval("chr16", 2285590, 2285744),	new Interval("chr16", 2345589, 2345743)},
-                {new Interval("chr16", 14872977, 14873044),	new Interval("chr16", 14965476, 14965543)},
-                {new Interval("chr16", 23611004, 23611155),	new Interval("chr16", 23703503, 23703654)},
-                {new Interval("chr16", 31004784, 31005007),	new Interval("chr16", 31097283, 31097506)},
-                {new Interval("chr16", 55745701, 55745922),	new Interval("chr16", 57188200, 57188421)},
-                {new Interval("chr16", 66647766, 66647830),	new Interval("chr16", 68090265, 68090329)},
-                {new Interval("chr16", 79224415, 79224636),	new Interval("chr16", 80666914, 80667135)},
-                {new Interval("chr17", 1320663, 1320735),	new Interval("chr17", 1373913, 1373985)},
-                {new Interval("chr17", 5304981, 5305155),	new Interval("chr17", 5364257, 5364431)},
-                {new Interval("chr17", 8588568, 8588654),	new Interval("chr17", 8647843, 8647929)},
-                {new Interval("chr17", 18192362, 18192481),	new Interval("chr17", 18251637, 18251756)},
-                {new Interval("chr17", 26514328, 26514522),	new Interval("chr17", 29490202, 29490396)},
-                {new Interval("chr17", 35069238, 35069334),	new Interval("chr17", 37815712, 37815808)},
-                {new Interval("chr17", 38377148, 38377241),	new Interval("chr17", 41123622, 41123715)},
-                {new Interval("chr17", 44472316, 44472454),	new Interval("chr17", 47117317, 47117455)},
-                {new Interval("chr17", 55482984, 55483122),	new Interval("chr17", 58128202, 58128340)},
-                {new Interval("chr17", 64595087, 64595211),	new Interval("chr17", 67083492, 67083616)},
-                {new Interval("chr17", 72814816, 72814876),	new Interval("chr17", 75303221, 75303281)},
-                {new Interval("chr17", 78167687, 78167812),	new Interval("chr17", 80574398, 80574523)},
-                {new Interval("chr18", 19653801, 19653961),	new Interval("chr18", 21399803, 21399963)},
-                {new Interval("chr18", 46766985, 46767455),	new Interval("chr18", 48512987, 48513457)},
-                {new Interval("chr19", 822924, 823120),	new Interval("chr19", 871924, 872120)},
-                {new Interval("chr19", 4200223, 4200327),	new Interval("chr19", 4249223, 4249327)},
-                {new Interval("chr19", 8094666, 8094894),	new Interval("chr19", 8188666, 8188894)},
-                {new Interval("chr19", 11657040, 11657607),	new Interval("chr19", 11796040, 11796607)},
-                {new Interval("chr19", 16298665, 16298844),	new Interval("chr19", 16437665, 16437844)},
-                {new Interval("chr19", 19650533, 19650597),	new Interval("chr19", 19789533, 19789597)},
-                {new Interval("chr19", 42008351, 42008363),	new Interval("chr19", 37316511, 37316523)},
-                {new Interval("chr19", 46446486, 46446567),	new Interval("chr19", 41754646, 41754727)},
-                {new Interval("chr19", 51212087, 51212169),	new Interval("chr19", 46520247, 46520329)},
-                {new Interval("chr19", 55052042, 55052201),	new Interval("chr19", 50360230, 50360389)},
-                {new Interval("chr19", 60200495, 60200669),	new Interval("chr19", 55508683, 55508857)},
-                {new Interval("chr20", 3244380, 3244434),	new Interval("chr20", 3296380, 3296434)},
-                {new Interval("chr20", 25145282, 25145374),	new Interval("chr20", 25197282, 25197374)},
-                {new Interval("chr20", 35182714, 35182855),	new Interval("chr20", 35749300, 35749441)},
-                {new Interval("chr20", 46797751, 46797826),	new Interval("chr20", 47364344, 47364419)},
-                {new Interval("chr20", 61546454, 61546633),	new Interval("chr20", 62076010, 62076189)},
-                {new Interval("chr21", 36666540, 36666701),	new Interval("chr21", 37744670, 37744831)},
-                {new Interval("chr21", 46450176, 46450285),	new Interval("chr21", 47625748, 47625857)},
-                {new Interval("chr22", 22890366, 22890533),	new Interval("chr22", 24560366, 24560533)},
-                {new Interval("chr22", 32487356, 32487465),	new Interval("chr22", 34157356, 34157465)},
-                {new Interval("chr22", 40469028, 40469146),	new Interval("chr22", 42139082, 42139200)},
-                {new Interval("chr22", 49365651, 49365713),	new Interval("chr22", 51018785, 51018847)},
-                {new Interval("chrX", 24135748, 24135895),	new Interval("chrX", 24225827, 24225974)},
-                {new Interval("chrX", 48708293, 48708459),	new Interval("chrX", 48823349, 48823515)},
-                {new Interval("chrX", 69406673, 69406721),	new Interval("chrX", 69489948, 69489996)},
-                {new Interval("chrX", 101459444, 101459531),	new Interval("chrX", 101572788, 101572875)},
-                {new Interval("chrX", 128442357, 128442474),	new Interval("chrX", 128614676, 128614793)},
-                {new Interval("chrX", 152701873, 152701902),	new Interval("chrX", 153048679, 153048708)},
-                {new Interval("chrY", 2715028, 2715646),	new Interval("chrY", 2655028, 2655646)},
-                {new Interval("chrY", 26179988, 26180064),	new Interval("chrY", 27770600, 27770676)},
-                // Some intervals that are flipped in the new genome
-                {new Interval("chr1", 2479704, 2479833, false, "target_549"),        new Interval("chr1", 2494585, 2494714, true, "target_549")},
-                {new Interval("chr1", 2480081, 2480116, false, "target_550"),        new Interval("chr1", 2494302, 2494337, true, "target_550")},
-                {new Interval("chr1", 2481162, 2481308, false, "target_551"),        new Interval("chr1", 2493110, 2493256, true, "target_551")},
-                {new Interval("chr1", 2482263, 2482357, false, "target_552"),        new Interval("chr1", 2492061, 2492155, true, "target_552")},
-                {new Interval("chr1", 2482999, 2483158, false, "target_553"),        new Interval("chr1", 2491260, 2491419, true, "target_553")},
-                {new Interval("chr1", 2484509, 2484638, false, "target_554"),        new Interval("chr1", 2489780, 2489909, true, "target_554")},
-                {new Interval("chr1", 2485143, 2485255, false, "target_555"),        new Interval("chr1", 2489163, 2489275, true, "target_555")},
-                {new Interval("chr1", 2486244, 2486316, false, "target_556"),        new Interval("chr1", 2488102, 2488174, true, "target_556")},
-                {new Interval("chr2", 110735471, 110735558, false, "target_101982"), new Interval("chr2", 110585640, 110585727, true, "target_101982")},
-                {new Interval("chr2", 110735648, 110735831, false, "target_101983"), new Interval("chr2", 110585367, 110585550, true, "target_101983")},
-                {new Interval("chr2", 110736772, 110736922, false, "target_101984"), new Interval("chr2", 110584276, 110584426, true, "target_101984")},
-                {new Interval("chr2", 110737181, 110737322, false, "target_101985"), new Interval("chr2", 110583876, 110584017, true, "target_101985")},
-                {new Interval("chr2", 110737585, 110737747, false, "target_101986"), new Interval("chr2", 110583451, 110583613, true, "target_101986")},
-                {new Interval("chr2", 110738666, 110738793, false, "target_101987"), new Interval("chr2", 110582405, 110582532, true, "target_101987")},
-                {new Interval("chr2", 110738957, 110739136, false, "target_101988"), new Interval("chr2", 110582062, 110582241, true, "target_101988")},
-                {new Interval("chr2", 110739216, 110739401, false, "target_101989"), new Interval("chr2", 110581797, 110581982, true, "target_101989")},
-                {new Interval("chr2", 110741555, 110741768, false, "target_101990"), new Interval("chr2", 110579480, 110579693, true, "target_101990")},
-                {new Interval("chr2", 110743887, 110743978, false, "target_101991"), new Interval("chr2", 110577271, 110577362, true, "target_101991")},
-                {new Interval("chr2", 110750021, 110750220, false, "target_101992"), new Interval("chr2", 110571035, 110571234, true, "target_101992")},
-                {new Interval("chr2", 110754786, 110754935, false, "target_101993"), new Interval("chr2", 110566325, 110566474, true, "target_101993")},
-                {new Interval("chr2", 110755277, 110755511, false, "target_101994"), new Interval("chr2", 110565749, 110565983, true, "target_101994")},
-                {new Interval("chr2", 110759547, 110759703, false, "target_101995"), new Interval("chr2", 110561554, 110561710, true, "target_101995")},
-                {new Interval("chr2", 110760135, 110760250, false, "target_101996"), new Interval("chr2", 110561007, 110561122, true, "target_101996")},
-                {new Interval("chr2", 110761828, 110761899, false, "target_101997"), new Interval("chr2", 110559358, 110559429, true, "target_101997")},
-                {new Interval("chr2", 110769521, 110769596, false, "target_101998"), new Interval("chr2", 110552041, 110552116, true, "target_101998")},
-                {new Interval("chr2", 111012182, 111012298, false, "target_101999"), new Interval("chr2", 108484181, 108484297, true, "target_101999")},
-                {new Interval("chr13", 113547048, 113547139, false, "target_51005"), new Interval("chr13", 114566804, 114566895, true, "target_51005")},
-                {new Interval("chr13", 113547227, 113547397, false, "target_51006"), new Interval("chr13", 114566546, 114566716, true, "target_51006")},
-                {new Interval("chr13", 113562918, 113562946, false, "target_51007"), new Interval("chr13", 114550997, 114551025, true, "target_51007")},
-                {new Interval("chr13", 113564379, 113564445, false, "target_51008"), new Interval("chr13", 114549498, 114549564, true, "target_51008")},
-                {new Interval("chr13", 113571118, 113571244, false, "target_51009"), new Interval("chr13", 114542699, 114542825, true, "target_51009")},
-                {new Interval("chr13", 113572777, 113572903, false, "target_51010"), new Interval("chr13", 114541040, 114541166, true, "target_51010")},
-                {new Interval("chr13", 113575333, 113575459, false, "target_51011"), new Interval("chr13", 114538484, 114538610, true, "target_51011")},
-                {new Interval("chr13", 113576296, 113576421, false, "target_51012"), new Interval("chr13", 114537522, 114537647, true, "target_51012")},
-                {new Interval("chr13", 113578216, 113578338, false, "target_51013"), new Interval("chr13", 114535605, 114535727, true, "target_51013")},
-                {new Interval("chr13", 113578480, 113578673, false, "target_51014"), new Interval("chr13", 114535270, 114535463, true, "target_51014")},
-                {new Interval("chr13", 113582257, 113582425, false, "target_51015"), new Interval("chr13", 114531518, 114531686, true, "target_51015")},
-                {new Interval("chr13", 113583804, 113583976, false, "target_51016"), new Interval("chr13", 114529967, 114530139, true, "target_51016")},
-                {new Interval("chr13", 113587418, 113587597, false, "target_51017"), new Interval("chr13", 114526346, 114526525, true, "target_51017")},
-                {new Interval("chr13", 113588782, 113589014, false, "target_51018"), new Interval("chr13", 114524929, 114525161, true, "target_51018")},
-                {new Interval("chr13", 113589950, 113590108, false, "target_51019"), new Interval("chr13", 114523835, 114523993, true, "target_51019")},
-                {new Interval("chr13", 113599065, 113599236, false, "target_51020"), new Interval("chr13", 114514707, 114514878, true, "target_51020")},
-                {new Interval("chr13", 113605940, 113606087, false, "target_51021"), new Interval("chr13", 114507856, 114508003, true, "target_51021")},
-                {new Interval("chr13", 113609156, 113609319, false, "target_51022"), new Interval("chr13", 114504624, 114504787, true, "target_51022")},
-                {new Interval("chr13", 113610056, 113610145, false, "target_51023"), new Interval("chr13", 114503798, 114503887, true, "target_51023")},
-                {new Interval("chr13", 113611549, 113611633, false, "target_51024"), new Interval("chr13", 114502310, 114502394, true, "target_51024")},
-                {new Interval("chr13", 113615731, 113615824, false, "target_51025"), new Interval("chr13", 114498119, 114498212, true, "target_51025")},
-                {new Interval("chr13", 113641808, 113641874, false, "target_51026"), new Interval("chr13", 114472069, 114472135, true, "target_51026")},
-                {new Interval("chr13", 113644711, 113644857, false, "target_51027"), new Interval("chr13", 114469086, 114469232, true, "target_51027")},
-                {new Interval("chr13", 113651799, 113651848, false, "target_51028"), new Interval("chr13", 114462241, 114462290, true, "target_51028")},
-                {new Interval("chr17", 33541604, 33542176, false, "target_76102"),   new Interval("chr17", 36294030, 36294602, true, "target_76102")},
-                {new Interval("chr17", 33543154, 33543310, false, "target_76103"),   new Interval("chr17", 36292896, 36293052, true, "target_76103")},
-                {new Interval("chr17", 33543677, 33543780, false, "target_76104"),   new Interval("chr17", 36292426, 36292529, true, "target_76104")},
-                {new Interval("chr17", 33544240, 33544309, false, "target_76105"),   new Interval("chr17", 36291897, 36291966, true, "target_76105")},
-                {new Interval("chr17", 33544690, 33544788, false, "target_76106"),   new Interval("chr17", 36291418, 36291516, true, "target_76106")},
-                {new Interval("chr17", 33545498, 33545622, false, "target_76107"),   new Interval("chr17", 36290584, 36290708, true, "target_76107")},
-                {new Interval("chr17", 33547465, 33547578, false, "target_76109"),   new Interval("chr17", 36288629, 36288742, true, "target_76109")},
-                {new Interval("chr17", 33547904, 33548015, false, "target_76110"),   new Interval("chr17", 36288192, 36288303, true, "target_76110")},
-                {new Interval("chr17", 33548455, 33548539, false, "target_76111"),   new Interval("chr17", 36287668, 36287752, true, "target_76111")},
-                {new Interval("chr17", 33549018, 33549061, false, "target_76112"),   new Interval("chr17", 36287146, 36287189, true, "target_76112")},
-                {new Interval("chr17", 33550341, 33550430, false, "target_76113"),   new Interval("chr17", 36285777, 36285866, true, "target_76113")},
-                {new Interval("chr17", 33550589, 33550664, false, "target_76114"),   new Interval("chr17", 36285543, 36285618, true, "target_76114")},
-                {new Interval("chrX", 148575967, 148576994, false, "target_184692"), new Interval("chrX", 148797411, 148798438, true, "target_184692")},
-                {new Interval("chrX", 148577066, 148577143, false, "target_184693"), new Interval("chrX", 148797262, 148797339, true, "target_184693")},
-                {new Interval("chrX", 148578167, 148578266, false, "target_184694"), new Interval("chrX", 148796139, 148796238, true, "target_184694")},
-                {new Interval("chrX", 148579488, 148579587, false, "target_184695"), new Interval("chrX", 148794818, 148794917, true, "target_184695")},
-                {new Interval("chrX", 148603758, 148603770, false, "target_184696"), new Interval("chrX", 148770634, 148770646, true, "target_184696")},
-                // Some that don't map in hg19
-                {new Interval("chr2", 111013693, 111013832), null},
-                {new Interval("chr3", 14174511, 14175398), null},
-                {new Interval("chr3", 50911035, 50911051), null},
-                {new Interval("chr6", 32071709, 32071869), null},
-                {new Interval("chr6", 32072183, 32072358), null},
-                {new Interval("chr6", 32104446, 32104606), null},
-                {new Interval("chr6", 32104920, 32105095), null},
-                {new Interval("chr7", 101995561, 101995739), null},
-                {new Interval("chr7", 142178782, 142178825), null},
-                {new Interval("chr7", 142179850, 142180013), null},
-                {new Interval("chr7", 142181067, 142181324), null},
-                {new Interval("chr7", 142181720, 142181860), null},
-                {new Interval("chr7", 142182157, 142182313), null},
-                {new Interval("chr15", 19335778, 19336302), null},
-                {new Interval("chr17", 33364376, 33364428), null},
-                {new Interval("chr17", 33546162, 33546214), null},
-                {new Interval("chr17", 33706667, 33706736), null},
-                {new Interval("chr17", 59772721, 59772781), null},
-                {new Interval("chr17", 59779355, 59779421), null},
-                {new Interval("chr17", 59781483, 59781540), null},
-                {new Interval("chr17", 59783488, 59783565), null},
-                {new Interval("chr17", 59784584, 59784615), null},
-                {new Interval("chr17", 59786025, 59786136), null},
-                {new Interval("chr17", 59787203, 59787494), null},
-                {new Interval("chr17", 59791235, 59791514), null},
-                {new Interval("chr17", 59794247, 59794502), null},
-                {new Interval("chr17", 59801884, 59802193), null},
-                {new Interval("chr17", 59804685, 59804982), null},
-                {new Interval("chr17", 59817352, 59817382), null},
-                {new Interval("chr17", 59817465, 59817532), null},
-                {new Interval("chr17", 59875754, 59875812), null},
-                {new Interval("chr17", 59875899, 59875944), null},
-                {new Interval("chr17", 59879183, 59879456), null},
-                {new Interval("chr17", 59883988, 59884276), null},
-                {new Interval("chr17", 59887398, 59887512), null},
-                {new Interval("chrX", 48774611, 48775058), null},
-
-        };
-    }
-
-    @Test(dataProvider = "failingIntervals")
-    public void testDiagnosticLiftover(final Interval fromInterval) {
-        final List<LiftOver.PartialLiftover> partials = liftOver.diagnosticLiftover(fromInterval);
-        System.out.println("Diagnosing " + fromInterval + " (len " + fromInterval.length() + ")");
-        for (final LiftOver.PartialLiftover partial : partials) {
-            System.out.println(partial);
-        }
-    }
-
-    @DataProvider(name = "failingIntervals")
-    public Object[][] makeFailingIntervals() {
-        return new Object[][] {
-                {new Interval("chr3", 50911035, 50911051)},
-                {new Interval("chr2", 111013693, 111013832)},
-                {new Interval("chr3", 14174511, 14175398)},
-                {new Interval("chr3", 50911035, 50911051)},
-                {new Interval("chr6", 32071709, 32071869)},
-                {new Interval("chr6", 32072183, 32072358)},
-                {new Interval("chr6", 32104446, 32104606)},
-                {new Interval("chr6", 32104920, 32105095)},
-                {new Interval("chr7", 101995561, 101995739)},
-                {new Interval("chr7", 142178782, 142178825)},
-                {new Interval("chr7", 142179850, 142180013)},
-                {new Interval("chr7", 142181067, 142181324)},
-                {new Interval("chr7", 142181720, 142181860)},
-                {new Interval("chr7", 142182157, 142182313)},
-                {new Interval("chr15", 19335778, 19336302)},
-                {new Interval("chr17", 33364376, 33364428)},
-                {new Interval("chr17", 33546162, 33546214)},
-                {new Interval("chr17", 33706667, 33706736)},
-                {new Interval("chr17", 59772721, 59772781)},
-                {new Interval("chr17", 59779355, 59779421)},
-                {new Interval("chr17", 59781483, 59781540)},
-                {new Interval("chr17", 59783488, 59783565)},
-                {new Interval("chr17", 59784584, 59784615)},
-                {new Interval("chr17", 59786025, 59786136)},
-                {new Interval("chr17", 59787203, 59787494)},
-                {new Interval("chr17", 59791235, 59791514)},
-                {new Interval("chr17", 59794247, 59794502)},
-                {new Interval("chr17", 59801884, 59802193)},
-                {new Interval("chr17", 59804685, 59804982)},
-                {new Interval("chr17", 59817352, 59817382)},
-                {new Interval("chr17", 59817465, 59817532)},
-                {new Interval("chr17", 59875754, 59875812)},
-                {new Interval("chr17", 59875899, 59875944)},
-                {new Interval("chr17", 59879183, 59879456)},
-                {new Interval("chr17", 59883988, 59884276)},
-                {new Interval("chr17", 59887398, 59887512)},
-                {new Interval("chrX", 48774611, 48775058)},
-
-        };
-    }
-
-    @Test
-    public void testWriteChain() throws Exception {
-        final OverlapDetector<Chain> chains = Chain.loadChains(CHAIN_FILE);
-        File outFile = File.createTempFile("test.", ".chain");
-        outFile.deleteOnExit();
-        PrintWriter pw = new PrintWriter(outFile);
-        final Map<Integer, Chain> originalChainMap = new TreeMap<Integer, Chain>();
-        for (final Chain chain : chains.getAll()) {
-            chain.write(pw);
-            originalChainMap.put(chain.id, chain);
-        }
-        pw.close();
-
-        final OverlapDetector<Chain> newChains = Chain.loadChains(outFile);
-        final Map<Integer, Chain> newChainMap = new TreeMap<Integer, Chain>();
-        for (final Chain chain : newChains.getAll()) {
-            newChainMap.put(chain.id, chain);
-        }
-        Assert.assertEquals(newChainMap, originalChainMap);
-    }
-
-    @Test(dataProvider = "testIntervals")
-    public void testGetContigMap(final Interval in, final Interval expected) {
-        if (expected != null) {
-            Assert.assertTrue(contigMap.get(in.getContig()).contains(expected.getContig()));
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/metrics/MetricBaseTest.java b/src/test/java/htsjdk/samtools/metrics/MetricBaseTest.java
deleted file mode 100644
index cbbbbc3..0000000
--- a/src/test/java/htsjdk/samtools/metrics/MetricBaseTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package htsjdk.samtools.metrics;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class MetricBaseTest {
-
-    private static class TestMetric extends MetricBase{
-        public Object anyObject;
-
-        public TestMetric(final Object anyObject) {
-            this.anyObject = anyObject;
-        }
-    }
-
-    @Test
-    public void testHashCodeWithNull(){
-        TestMetric metric = new TestMetric(null);
-        metric.hashCode(); //test that it can get a hashcode without crashing
-    }
-
-    @DataProvider(name = "equalityTest")
-    public Object[][] equalityTestProvider(){
-        return new Object[][]{
-                {null,null, true},
-                {null, 1, false},
-                {1, null, false},
-                {1, 1, true},
-                {"Hi", "Hi", true},
-                {"Hi", "There", false},
-                {"1","1.0000000000000000001d", false},
-                {"1", 1.0000000000000000001d, true}, /* Object fields are saved using instance of which performs rounding, but loaded as a string*/
-                {1.00000000000000001d, 1.0000000002918d, true}, /* precision limit is set by {@link FormatUtil#DECIMAL_DIGITS_TO_PRINT}, if that changes this test may fail */
-                {1.0000, 1.0001, false},
-                {1.0, 1.0, true},
-                {1, 2, false}
-        };
-    }
-
-    @Test(dataProvider = "equalityTest")
-    public void testEqualsNull(Object a, Object b, boolean shouldBeEqual){
-        TestMetric metricA = new TestMetric(a);
-        TestMetric metricB = new TestMetric(b);
-        Assert.assertEquals(metricA.equals(metricB), shouldBeEqual);
-
-        //check that hashcodes are the same if they're equal
-        if(shouldBeEqual) {
-            Assert.assertEquals(metricA.hashCode(), metricB.hashCode());
-        }
-    }
-
-
-    public class A extends MetricBase {
-        public int a = 1;
-    }
-    public class B extends A{
-        public int b = 1;
-    }
-
-    @Test
-    public void testSubclassEquality(){
-        final A a = new A();
-        final B b = new B();
-        Assert.assertFalse(a.equals(b));
-        Assert.assertFalse(b.equals(a));
-    }
-
-    @Test void testSelfEquality(){
-        final A a = new A();
-        final B b = new B();
-        Assert.assertTrue(a.equals(a));
-        Assert.assertTrue(b.equals(b));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/metrics/MetricsFileTest.java b/src/test/java/htsjdk/samtools/metrics/MetricsFileTest.java
deleted file mode 100644
index 228d87d..0000000
--- a/src/test/java/htsjdk/samtools/metrics/MetricsFileTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.FormatUtil;
-import htsjdk.samtools.util.Histogram;
-import htsjdk.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * Tests for the various classes in the metrics package.  Constructs a MetricsFile,
- * populates it with various items and then ensure that it can be written to disk
- * and read back without altering any values.
- *
- * @author Tim Fennell
- */
-public class MetricsFileTest {
-    public enum TestEnum {One, Two, Three}
-
-    public static class TestMetric extends MetricBase implements Cloneable, Serializable {
-        private static final long serialVersionUID = 1l;
-
-        public String    STRING_PROP;
-        public Date      DATE_PROP;
-        public Short     SHORT_PROP;
-        public Integer   INTEGER_PROP;
-        public Long      LONG_PROP;
-        public Float     FLOAT_PROP;
-        public Double    DOUBLE_PROP;
-        public TestEnum  ENUM_PROP;
-        public Boolean   BOOLEAN_PROP;
-        public Character CHARACTER_PROP;
-        public short     SHORT_PRIMITIVE;
-        public int       INT_PRIMITIVE;
-        public long      LONG_PRIMITIVE;
-        public float     FLOAT_PRIMITIVE;
-        public double    DOUBLE_PRIMITIVE;
-        public boolean   BOOLEAN_PRIMITIVE;
-        public char      CHAR_PRIMITIVE;
-
-        @Override
-        public TestMetric clone()  {
-            try { return (TestMetric) super.clone(); }
-            catch (CloneNotSupportedException cnse) { throw new SAMException("That's Unpossible!"); }
-        }
-    }
-
-    public static class FloatingPointMetric extends MetricBase{
-        public double DOUBLE_PRIMITIVE;
-        public Double DOUBLE_PROP;
-        public float  FLOAT_PRIMITIVE;
-        public Float FLOAT_PROP;
-    }
-
-    @Test
-    public void testFloatingPointEquality() throws IOException {
-        MetricsFile<FloatingPointMetric,Integer> file = new MetricsFile<FloatingPointMetric,Integer>();
-
-        FloatingPointMetric metric = new FloatingPointMetric();
-        metric.DOUBLE_PRIMITIVE = .0000000000000000001d;
-        metric.DOUBLE_PROP = .0000000000000000001d;
-        metric.FLOAT_PRIMITIVE = .0000000000000000001f;
-        metric.FLOAT_PROP = .0000000000000000001f;
-        file.addMetric(metric);
-
-        MetricsFile<FloatingPointMetric,Integer> file2 = writeThenReadBack(file);
-        Assert.assertEquals(file, file2);
-
-
-
-    }
-
-    @Test
-    public void testWriteMetricsFile() throws IOException, ClassNotFoundException {
-        MetricsFile<TestMetric,Integer> file = new MetricsFile<TestMetric,Integer>();
-        TestMetric metric = new TestMetric();
-        metric.STRING_PROP       = "Hello World";
-        metric.DATE_PROP         = new FormatUtil().parseDate("2008-12-31");
-        metric.SHORT_PROP        = 123;
-        metric.INTEGER_PROP      = null;
-        metric.LONG_PROP         = Long.MAX_VALUE;
-        metric.FLOAT_PROP        = 456.789f;
-        metric.DOUBLE_PROP       = 0.713487;
-        metric.ENUM_PROP         = TestEnum.Two;
-        metric.BOOLEAN_PROP      = false;
-        metric.CHARACTER_PROP    = 'A';
-        metric.SHORT_PRIMITIVE   = 123;
-        metric.INT_PRIMITIVE     = 919834781;
-        metric.LONG_PRIMITIVE    = Long.MAX_VALUE - Integer.MAX_VALUE;
-        metric.FLOAT_PRIMITIVE   = 0.55694f;
-        metric.DOUBLE_PRIMITIVE  = 0.229233;
-        metric.BOOLEAN_PRIMITIVE = true;
-        metric.CHAR_PRIMITIVE    = 'B';
-        file.addMetric(metric);
-
-        MetricsFile<TestMetric,Integer> file2 = writeThenReadBack(file);
-        Assert.assertEquals(file, file2);
-
-        // Now add some headers and run the test again
-        StringHeader stringHeader = new StringHeader();
-        stringHeader.setValue("Hello, I'm a String Header!");
-        file.addHeader(stringHeader);
-
-        VersionHeader version = new VersionHeader();
-        version.setVersionedItem("MetricsFileTest");
-        version.setVersionString("1.0");
-        file.addHeader(version);
-
-        version = new VersionHeader();
-        version.setVersionedItem("Nada");
-        version.setVersionString("0.0alpha1");
-        file.addHeader(version);
-
-        file2 = writeThenReadBack(file);
-        Assert.assertEquals(file, file2);
-
-        // Now add a Histogram and make sure it still works
-        Histogram<Integer> histo = new Histogram<Integer>();
-        histo.setBinLabel("small_number");
-        histo.setValueLabel("big_number");
-        histo.increment(1, 101);
-        histo.increment(2, 202);
-        histo.increment(3, 4000);
-        histo.increment(5, 123981);
-        histo.increment(1000, 10981982);
-        file.setHistogram(histo);
-
-        file2 = writeThenReadBack(file);
-        Assert.assertEquals(file, file2);
-
-        // And lastly add some more metrics rows to the file
-        TestMetric metric2 = metric.clone();
-        metric2.ENUM_PROP = TestEnum.One;
-        metric2.FLOAT_PROP = 0.998f;
-        metric2.STRING_PROP = "Wheeeee!";
-        file.addMetric(metric2);
-
-        metric2 = metric.clone();
-        metric2.ENUM_PROP = TestEnum.Three;
-        metric2.DOUBLE_PRIMITIVE = 1.299d;
-        file.addMetric(metric2);
-
-        file2 = writeThenReadBack(file);
-        Assert.assertEquals(file, file2);
-
-        //Test that we can serialize and deserialize this whole thing
-        MetricsFile<TestMetric, Integer> file3 = TestUtil.serializeAndDeserialize(file);
-
-        Assert.assertEquals(file, file3);
-    }
-
-    @Test
-    public void areMetricsFilesEqualTest(){
-        final File TEST_DIR = new File("src/test/resources/htsjdk/samtools/metrics/");
-        final File file1 = new File(TEST_DIR,"metricsOne.metrics");
-        final File file2 = new File(TEST_DIR,"metricsOneCopy.metrics");
-        final File fileModifiedHist = new File(TEST_DIR,"metricsOneModifiedHistogram.metrics");
-        final File fileModifiedMet = new File(TEST_DIR,"metricsOneModifiedMetrics.metrics");
-
-        Assert.assertTrue(MetricsFile.areMetricsEqual(file1, file2));
-        Assert.assertTrue(MetricsFile.areMetricsEqual(file1, fileModifiedHist));
-
-        Assert.assertFalse(MetricsFile.areMetricsAndHistogramsEqual(file1, fileModifiedHist));
-        Assert.assertFalse(MetricsFile.areMetricsEqual(file1, fileModifiedMet));
-        Assert.assertFalse(MetricsFile.areMetricsAndHistogramsEqual(file1, fileModifiedMet));
-    }
-
-    /** Helper method to persist metrics to file and read them back again. */
-    private <METRIC extends MetricBase> MetricsFile<METRIC, Integer> writeThenReadBack(MetricsFile<METRIC,Integer> in) throws IOException {
-        File f = File.createTempFile("test", ".metrics");
-        f.deleteOnExit();
-        FileWriter out = new FileWriter(f);
-        in.write(out);
-
-        MetricsFile<METRIC,Integer> retval = new MetricsFile<METRIC,Integer>();
-        retval.read(new FileReader(f));
-        return retval;
-    }
-
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/metrics/StringHeaderTest.java b/src/test/java/htsjdk/samtools/metrics/StringHeaderTest.java
deleted file mode 100644
index 32f1322..0000000
--- a/src/test/java/htsjdk/samtools/metrics/StringHeaderTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package htsjdk.samtools.metrics;
-
-
-import htsjdk.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-public class StringHeaderTest {
-
-    @Test
-    public void testStringHeaderSerialization() throws IOException, ClassNotFoundException {
-        final Header header = new StringHeader("some value");
-        final Header deserializedHeader = TestUtil.serializeAndDeserialize(header);
-        Assert.assertEquals(deserializedHeader, header);
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/metrics/VersionHeaderTest.java b/src/test/java/htsjdk/samtools/metrics/VersionHeaderTest.java
deleted file mode 100644
index 576f8d1..0000000
--- a/src/test/java/htsjdk/samtools/metrics/VersionHeaderTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package htsjdk.samtools.metrics;
-
-import htsjdk.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-
-public class VersionHeaderTest {
-
-    @Test
-    public void testSerializeVersionHeader() throws IOException, ClassNotFoundException {
-        final VersionHeader versionHeader = new VersionHeader();
-        versionHeader.setVersionedItem("SomeThing");
-        versionHeader.setVersionString("1.0.1");
-        final VersionHeader deserialized = TestUtil.serializeAndDeserialize(versionHeader);
-        Assert.assertEquals(deserialized, versionHeader);
-
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/reference/FakeReferenceSequenceFile.java b/src/test/java/htsjdk/samtools/reference/FakeReferenceSequenceFile.java
deleted file mode 100644
index a42a555..0000000
--- a/src/test/java/htsjdk/samtools/reference/FakeReferenceSequenceFile.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.cram.ref.ReferenceSource;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by vadim on 17/03/2015.
- */
-public class FakeReferenceSequenceFile implements
-        ReferenceSequenceFile {
-    Map<String, SAMSequenceRecord> map = new HashMap<String, SAMSequenceRecord>();
-    List<String> index= new ArrayList<String>() ;
-    int current = 0;
-
-    public FakeReferenceSequenceFile(List<SAMSequenceRecord> sequences) {
-        for (SAMSequenceRecord s:sequences) {
-            map.put(s.getSequenceName(), s) ;
-            index.add(s.getSequenceName()) ;
-        }
-    }
-
-    private static ReferenceSequence buildReferenceSequence (SAMSequenceRecord samSequenceRecord) {
-        byte[] bases = new byte[samSequenceRecord.getSequenceLength()] ;
-        Arrays.fill(bases, (byte)'N');
-        return new ReferenceSequence(samSequenceRecord.getSequenceName(), samSequenceRecord.getSequenceIndex(), bases) ;
-    }
-
-    @Override
-    public void reset() {
-        current = 0;
-    }
-
-    @Override
-    public ReferenceSequence nextSequence() {
-        if (current >= index.size()) return null;
-        return buildReferenceSequence(map.get(index.get(current++)));
-    }
-
-    @Override
-    public boolean isIndexed() {
-        return true;
-    }
-
-    @Override
-    public ReferenceSequence getSubsequenceAt(final String contig, final long start,
-                                              final long stop) {
-        byte[] bases = new byte[(int) (stop-start+1)] ;
-        Arrays.fill(bases, (byte)'N');
-        return new ReferenceSequence(contig, bases.length, bases) ;
-    }
-
-    @Override
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return null;
-    }
-
-    @Override
-    public ReferenceSequence getSequence(final String contig) {
-        return buildReferenceSequence(map.get(contig));
-    }
-
-    @Override
-    public void close() throws IOException {
-        map.clear();
-        index.clear();
-        current = 0;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/reference/FastaSequenceFileTest.java b/src/test/java/htsjdk/samtools/reference/FastaSequenceFileTest.java
deleted file mode 100644
index 87927f6..0000000
--- a/src/test/java/htsjdk/samtools/reference/FastaSequenceFileTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.PrintWriter;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class FastaSequenceFileTest {
-    @Test
-    public void testTrailingWhitespace() throws Exception {
-        final File fasta = File.createTempFile("test", ".fasta");
-        fasta.deleteOnExit();
-        final PrintWriter writer = new PrintWriter(fasta);
-        final String chr1 = "chr1";
-        writer.println(">" + chr1);
-        final String sequence = "ACGTACGT";
-        writer.println(sequence);
-        writer.println(sequence + " \t");
-        writer.close();
-        final FastaSequenceFile fastaReader = new FastaSequenceFile(fasta, true);
-        final ReferenceSequence referenceSequence = fastaReader.nextSequence();
-        Assert.assertEquals(referenceSequence.getName(), chr1);
-        Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), sequence + sequence);
-    }
-
-    @Test
-    public void testIntermediateWhitespace() throws Exception {
-        final File fasta = File.createTempFile("test", ".fasta");
-        fasta.deleteOnExit();
-        final PrintWriter writer = new PrintWriter(fasta);
-        final String chr1 = "chr1";
-        writer.println(">" + chr1 + " extra stuff after sequence name");
-        final String sequence = "ACGTACGT";
-        writer.println(sequence + "  ");
-        writer.println(sequence + " \t");
-        writer.println(sequence);
-        writer.close();
-        final FastaSequenceFile fastaReader = new FastaSequenceFile(fasta, true);
-        final ReferenceSequence referenceSequence = fastaReader.nextSequence();
-        Assert.assertEquals(referenceSequence.getName(), chr1);
-        Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), sequence + sequence + sequence);
-    }
-
-    // There was a bug when reading a fasta with trailing whitespace, only when a sequence dictionary exists.
-    @Test
-    public void testTrailingWhitespaceWithPreexistingSequenceDictionary() throws Exception {
-        final File fasta = new File("src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta");
-        final FastaSequenceFile fastaReader = new FastaSequenceFile(fasta, true);
-        ReferenceSequence referenceSequence = fastaReader.nextSequence();
-        Assert.assertEquals(referenceSequence.getName(), "chr1");
-        Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), "ACGTACGT");
-        referenceSequence = fastaReader.nextSequence();
-        Assert.assertEquals(referenceSequence.getName(), "chr2");
-        Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), "TCGATCGA");
-
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/reference/FastaSequenceIndexTest.java b/src/test/java/htsjdk/samtools/reference/FastaSequenceIndexTest.java
deleted file mode 100644
index bfef121..0000000
--- a/src/test/java/htsjdk/samtools/reference/FastaSequenceIndexTest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Iterator;
-
-/**
- * Test the fasta sequence index reader.
- */
-public class FastaSequenceIndexTest {
-    private static File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/reference");
-
-    @DataProvider(name="homosapiens")
-    public Object[][] provideHomoSapiens() throws FileNotFoundException {
-        final File sequenceIndexFile = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.fasta.fai");
-        return new Object[][] { new Object[]
-            { new FastaSequenceIndex(sequenceIndexFile) },
-            { new FastaSequenceIndex(sequenceIndexFile.toPath()) } };
-    }
-
-    @DataProvider(name="specialcharacters")
-    public Object[][] provideSpecialCharacters() throws FileNotFoundException {
-        final File sequenceIndexFile = new File(TEST_DATA_DIR,"testing.fai");
-        return new Object[][] { new Object[]
-            { new FastaSequenceIndex(sequenceIndexFile) },
-            { new FastaSequenceIndex(sequenceIndexFile.toPath()) } };
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testInitialContig(FastaSequenceIndex sequenceIndex) {
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrM"),"Contig chrM is not present");
-        FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chrM");
-        Assert.assertEquals(entry.getContig(),"chrM","Contig chrM name is incorrect");
-        Assert.assertEquals(entry.getLocation(),6L,"Contig chrM location is incorrect");
-        Assert.assertEquals(entry.getSize(),16571L,"Contig chrM size is incorrect");
-        Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chrM bases per line is incorrect");
-        Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chrM bytes per line is incorrect");
-
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testMiddleContig(FastaSequenceIndex sequenceIndex) {
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8"),"Contig chr8 is not present");
-        FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chr8");
-        Assert.assertEquals(entry.getContig(),"chr8","Contig chr8 name is incorrect");
-        Assert.assertEquals(entry.getLocation(),1419403101L,"Contig chr8 location is incorrect");
-        Assert.assertEquals(entry.getSize(),146274826L,"Contig chr8 size is incorrect");
-        Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chr8 bases per line is incorrect");
-        Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chr8 bytes per line is incorrect");
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testLastContig(FastaSequenceIndex sequenceIndex) {
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX_random"),"Contig chrX_random is not present");
-        FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chrX_random");
-        Assert.assertEquals(entry.getContig(),"chrX_random","Contig chrX_random name is incorrect");
-        Assert.assertEquals(entry.getLocation(),3156698441L,"Contig chrX_random location is incorrect");
-        Assert.assertEquals(entry.getSize(),1719168L,"Contig chrX_random size is incorrect");
-        Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chrX_random bases per line is incorrect");
-        Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chrX_random bytes per line is incorrect");
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testAllContigsPresent(FastaSequenceIndex sequenceIndex) {
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrM"),"Contig chrM is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr1"),"Contig chr1 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr2"),"Contig chr2 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr3"),"Contig chr3 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr4"),"Contig chr4 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr5"),"Contig chr5 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr6"),"Contig chr6 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr7"),"Contig chr7 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8"),"Contig chr8 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr9"),"Contig chr9 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr10"),"Contig chr10 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr11"),"Contig chr11 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr12"),"Contig chr12 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr13"),"Contig chr13 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr14"),"Contig chr14 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr15"),"Contig chr15 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr16"),"Contig chr16 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr17"),"Contig chr17 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr18"),"Contig chr18 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr19"),"Contig chr19 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr20"),"Contig chr20 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr21"),"Contig chr21 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr22"),"Contig chr22 is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX"),"Contig chrX is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrY"),"Contig chrY is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr1_random"),"Contig chr1_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr2_random"),"Contig chr2_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr3_random"),"Contig chr3_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr4_random"),"Contig chr4_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr5_random"),"Contig chr5_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr6_random"),"Contig chr6_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr7_random"),"Contig chr7_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8_random"),"Contig chr8_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr9_random"),"Contig chr9_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr10_random"),"Contig chr10_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr11_random"),"Contig chr11_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr13_random"),"Contig chr13_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr15_random"),"Contig chr15_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr16_random"),"Contig chr16_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr17_random"),"Contig chr17_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr18_random"),"Contig chr18_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr19_random"),"Contig chr19_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr21_random"),"Contig chr21_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chr22_random"),"Contig chr22_random is not present");
-        Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX_random"),"Contig chrX_random is not present");
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testHasInvalidEntry(FastaSequenceIndex sequenceIndex) {
-        Assert.assertFalse(sequenceIndex.hasIndexEntry("invalid"),"Found an invalid entry");
-    }
-
-    @Test(dataProvider="homosapiens",expectedExceptions=SAMException.class)
-    public void testGetInvalidEntry(FastaSequenceIndex sequenceIndex) {
-        sequenceIndex.getIndexEntry("invalid");
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testIteration(FastaSequenceIndex sequenceIndex) {
-        Iterator<FastaSequenceIndexEntry> sequenceIndexEntries = sequenceIndex.iterator();
-
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrM","Contig chrM is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr1","Contig chr1 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr2","Contig chr2 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr3","Contig chr3 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr4","Contig chr4 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr5","Contig chr5 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr6","Contig chr6 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr7","Contig chr7 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr8","Contig chr8 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr9","Contig chr9 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr10","Contig chr10 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr11","Contig chr11 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr12","Contig chr12 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr13","Contig chr13 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr14","Contig chr14 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr15","Contig chr15 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr16","Contig chr16 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr17","Contig chr17 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr18","Contig chr18 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr19","Contig chr19 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr20","Contig chr20 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr21","Contig chr21 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr22","Contig chr22 is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrX","Contig chrX is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrY","Contig chrY is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr1_random","Contig chr1_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr2_random","Contig chr2_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr3_random","Contig chr3_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr4_random","Contig chr4_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr5_random","Contig chr5_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr6_random","Contig chr6_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr7_random","Contig chr7_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr8_random","Contig chr8_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr9_random","Contig chr9_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr10_random","Contig chr10_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr11_random","Contig chr11_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr13_random","Contig chr13_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr15_random","Contig chr15_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr16_random","Contig chr16_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr17_random","Contig chr17_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr18_random","Contig chr18_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr19_random","Contig chr19_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr21_random","Contig chr21_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr22_random","Contig chr22_random is not present");
-        Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrX_random","Contig chrX_random is not present");
-        Assert.assertFalse(sequenceIndexEntries.hasNext(),"Iterator still has more entries");
-    }
-
-    @Test(dataProvider="specialcharacters")
-    public void testSpecialCharacters(FastaSequenceIndex specialCharactersIndex) {
-        /* file contents:
-        chrM	16571	6	50	51
-        chr1;boat	247249719	16915	50	51
-        chr2:money	242951149	252211635	50	51
-        chr3::;	199501827	500021813	50	51
-        ;;;;;;  1234            1234            1234    1234
-        file:gi|17981852|ref|NC_001807.4|    16571   2911876801      70      71
-        */
-        Iterator<FastaSequenceIndexEntry> sequenceIndexEntries = specialCharactersIndex.iterator();
-        FastaSequenceIndexEntry ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),"chrM","Contig chrM is not present");
-        Assert.assertEquals(ent.getSize(),16571,"Contig chrM size is not correct");
-        Assert.assertEquals(ent.getLocation(),6,"Contig chrM location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chrM bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chrM bytes per line is not correct");
-
-        ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),"chr1;boat","Contig chr1;boat is not present");
-        Assert.assertEquals(ent.getSize(),247249719,"Contig chr1;boat size is not correct");
-        Assert.assertEquals(ent.getLocation(),16915,"Contig chr1;boat location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr1;boat bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr1;boat bytes per line is not correct");
-
-        ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),"chr2:money","Contig chr2:money is not present");
-        Assert.assertEquals(ent.getSize(),242951149,"Contig chr2:money size is not correct");
-        Assert.assertEquals(ent.getLocation(),252211635,"Contig chr2:money location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr2:money bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr2:money bytes per line is not correct");
-
-        ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),"chr3::;","Contig chr3::; is not present");
-        Assert.assertEquals(ent.getSize(),199501827,"Contig chr3::; size is not correct");
-        Assert.assertEquals(ent.getLocation(),500021813,"Contig chrM location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr3::; bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr3::; bytes per line is not correct");
-
-        ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),";;;;;;;;","Contig ;;;;;;;; is not present");
-        Assert.assertEquals(ent.getSize(),123,"Contig ;;;;;;;; size is not correct");
-        Assert.assertEquals(ent.getLocation(),234,"Contig ;;;;;;;; location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),456,"Contig ;;;;;;;; bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),789,"Contig ;;;;;;;; bytes per line is not correct");
-
-        ent = sequenceIndexEntries.next();
-        Assert.assertEquals(ent.getContig(),"file:gi|17981852|ref|NC_001807.4|","Contig file:gi|17981852|ref|NC_001807.4| is not present");
-        Assert.assertEquals(ent.getSize(),16571,"Contig file:gi|17981852|ref|NC_001807.4| size is not correct");
-        Assert.assertEquals(ent.getLocation(),2911876801L,"Contig file:gi|17981852|ref|NC_001807.4| location is not correct");
-        Assert.assertEquals(ent.getBasesPerLine(),70,"Contig file:gi|17981852|ref|NC_001807.4| bases per line is not correct");
-        Assert.assertEquals(ent.getBytesPerLine(),71,"Contig file:gi|17981852|ref|NC_001807.4| bytes per line is not correct");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/reference/InMemoryReferenceSequenceFile.java b/src/test/java/htsjdk/samtools/reference/InMemoryReferenceSequenceFile.java
deleted file mode 100644
index ce15f59..0000000
--- a/src/test/java/htsjdk/samtools/reference/InMemoryReferenceSequenceFile.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class InMemoryReferenceSequenceFile implements
-        ReferenceSequenceFile {
-    Map<String, ReferenceSequence> map = new HashMap<String, ReferenceSequence>();
-    List<String> index;
-    int current = 0;
-
-    public void add(final String name, final byte[] bases) {
-        final ReferenceSequence sequence = new ReferenceSequence(name,
-                map.size(), bases);
-        map.put(sequence.getName(), sequence);
-    }
-
-    @Override
-    public void reset() {
-        current = 0;
-    }
-
-    @Override
-    public ReferenceSequence nextSequence() {
-        if (current >= index.size()) return null;
-        return map.get(index.get(current++));
-    }
-
-    @Override
-    public boolean isIndexed() {
-        return true;
-    }
-
-    @Override
-    public ReferenceSequence getSubsequenceAt(final String contig, final long start,
-                                              final long stop) {
-        final ReferenceSequence sequence = getSequence(contig);
-        if (sequence == null) return null;
-        final byte[] bases = new byte[(int) (stop - start) + 1];
-        System.arraycopy(sequence.getBases(), (int) start - 1, bases, 0,
-                bases.length);
-        return new ReferenceSequence(contig, sequence.getContigIndex(),
-                bases);
-    }
-
-    @Override
-    public SAMSequenceDictionary getSequenceDictionary() {
-        return null;
-    }
-
-    @Override
-    public ReferenceSequence getSequence(final String contig) {
-        return map.get(contig);
-    }
-
-    @Override
-    public void close() throws IOException {
-        map.clear();
-        index.clear();
-        current = 0;
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/reference/IndexedFastaSequenceFileTest.java b/src/test/java/htsjdk/samtools/reference/IndexedFastaSequenceFileTest.java
deleted file mode 100644
index 086b3be..0000000
--- a/src/test/java/htsjdk/samtools/reference/IndexedFastaSequenceFileTest.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * Test the indexed fasta sequence file reader.
- */
-public class IndexedFastaSequenceFileTest{
-    private static File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/reference");
-    private static File SEQUENCE_FILE = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.trimmed.fasta");
-    private static File SEQUENCE_FILE_NODICT = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.trimmed.nodict.fasta");
-
-    private final String firstBasesOfChrM = "GATCACAGGTCTATCACCCT";
-    private final String extendedBasesOfChrM = "GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT" +
-                                               "TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG" +
-                                               "GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT";
-    private final String lastBasesOfChr20 = "ttgtctgatgctcatattgt";
-    private final int CHR20_LENGTH = 1000000;
-
-    @DataProvider(name="homosapiens")
-    public Object[][] provideSequenceFile() throws FileNotFoundException {
-        return new Object[][] { new Object[]
-                { new IndexedFastaSequenceFile(SEQUENCE_FILE) },
-                { new IndexedFastaSequenceFile(SEQUENCE_FILE_NODICT) },
-                { new IndexedFastaSequenceFile(SEQUENCE_FILE.toPath()) },
-                { new IndexedFastaSequenceFile(SEQUENCE_FILE_NODICT.toPath()) }};
-    }
-
-    @DataProvider(name="comparative")
-    public Object[][] provideOriginalAndNewReaders() throws FileNotFoundException {
-        return new Object[][] {
-                new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE),
-                                               new IndexedFastaSequenceFile(SEQUENCE_FILE) },
-                new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE, true),
-                                               new IndexedFastaSequenceFile(SEQUENCE_FILE) },
-                new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE.toPath()),
-                                               new IndexedFastaSequenceFile(SEQUENCE_FILE.toPath()) },
-                new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE.toPath(), true),
-                                               new IndexedFastaSequenceFile(SEQUENCE_FILE.toPath()) },};
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testOpenFile(IndexedFastaSequenceFile sequenceFile) {
-        long startTime = System.currentTimeMillis();
-        Assert.assertNotNull(sequenceFile);
-        long endTime = System.currentTimeMillis();
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testOpenFile runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testFirstSequence(IndexedFastaSequenceFile sequenceFile) {
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",1,firstBasesOfChrM.length());
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),firstBasesOfChrM,"First n bases of chrM are incorrect");
-
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testFirstSequence runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testFirstSequenceExtended(IndexedFastaSequenceFile sequenceFile) {
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",1,extendedBasesOfChrM.length());
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),extendedBasesOfChrM,"First n bases of chrM are incorrect");
-
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testFirstSequenceExtended runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testReadStartingInCenterOfFirstLine(IndexedFastaSequenceFile sequenceFile) {
-        final int bytesToChopOff = 5;
-        String truncated = extendedBasesOfChrM.substring(bytesToChopOff);
-
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",
-                                                                   bytesToChopOff + 1,
-                                                                   bytesToChopOff + truncated.length());
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),truncated,"First n bases of chrM are incorrect");
-
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testReadStartingInCenterOfFirstLine runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="homosapiens")
-    public void testReadStartingInCenterOfMiddleLine(IndexedFastaSequenceFile sequenceFile) {
-        final int bytesToChopOff = 120;
-        String truncated = extendedBasesOfChrM.substring(bytesToChopOff);
-
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",
-                                                                   bytesToChopOff + 1,
-                                                                   bytesToChopOff + truncated.length());
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),truncated,"First n bases of chrM are incorrect");
-
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testReadStartingInCenterOfMiddleLine runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="comparative")
-    public void testFirstCompleteContigRead(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
-        ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSequence("chrM");
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
-        CloserUtil.close(originalSequenceFile);
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testFirstCompleteContigRead runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="homosapiens",expectedExceptions=SAMException.class)
-    public void testReadThroughEndOfContig(IndexedFastaSequenceFile sequenceFile) {
-        long startTime = System.currentTimeMillis();
-        try {
-            sequenceFile.getSubsequenceAt("chrM",16500,16600);
-        }
-        finally {
-            long endTime = System.currentTimeMillis();
-
-            CloserUtil.close(sequenceFile);
-
-            System.err.printf("testReadThroughEndOfContig runtime: %dms%n", (endTime - startTime)) ;
-        }
-    }
-
-    @Test(dataProvider="homosapiens",expectedExceptions=SAMException.class)
-    public void testReadPastEndOfContig(IndexedFastaSequenceFile sequenceFile) {
-         long startTime = System.currentTimeMillis();
-         try {
-             sequenceFile.getSubsequenceAt("chrM",16800,16900);
-         }
-         finally {
-             long endTime = System.currentTimeMillis();
-
-             CloserUtil.close(sequenceFile);
-
-             System.err.printf("testReadPastEndOfContig runtime: %dms%n", (endTime - startTime)) ;
-         }
-     }
-
-    @Test(dataProvider="comparative")
-    public void testLastCompleteContigRead(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
-        ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-        while( !expectedSequence.getName().equals("chr20") )
-            expectedSequence = originalSequenceFile.nextSequence();
-
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSequence("chr20");
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrX_random is incorrect");
-
-        CloserUtil.close(originalSequenceFile);
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testLastCompleteContigRead runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-
-    @Test(dataProvider="homosapiens")
-    public void testLastOfChr20(IndexedFastaSequenceFile sequenceFile) {
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chr20",
-                                                                   CHR20_LENGTH - lastBasesOfChr20.length()+1,
-                                                                   CHR20_LENGTH);
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),lastBasesOfChr20,"First n bases of chr1 are incorrect");
-
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testFirstOfChr1 runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="comparative")
-    public void testFirstElementOfIterator(ReferenceSequenceFile originalSequenceFile,IndexedFastaSequenceFile sequenceFile) {
-        ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
-        long startTime = System.currentTimeMillis();
-        ReferenceSequence sequence = sequenceFile.nextSequence();
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(), "chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(), 0,"Sequence contig index is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
-        CloserUtil.close(originalSequenceFile);
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testFirstElementOfIterator runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="comparative")
-    public void testNextElementOfIterator(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
-        // Skip past the first one and load the second one.
-        originalSequenceFile.nextSequence();
-        ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
-        long startTime = System.currentTimeMillis();
-        sequenceFile.nextSequence();
-        ReferenceSequence sequence = sequenceFile.nextSequence();
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
-        Assert.assertEquals(sequence.length(),expectedSequence.length(),"Sequence size is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chr1 is incorrect");
-
-        CloserUtil.close(originalSequenceFile);
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testNextElementOfIterator runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(dataProvider="comparative")
-    public void testReset(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
-        // Skip past the first one and load the second one.
-        ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
-        long startTime = System.currentTimeMillis();
-        sequenceFile.nextSequence();
-        sequenceFile.nextSequence();
-        sequenceFile.reset();
-        ReferenceSequence sequence = sequenceFile.nextSequence();
-        long endTime = System.currentTimeMillis();
-
-        Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
-        Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
-        Assert.assertEquals(sequence.length(),expectedSequence.length(), "Sequence size is not correct");
-        Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
-        CloserUtil.close(originalSequenceFile);
-        CloserUtil.close(sequenceFile);
-
-        System.err.printf("testReset runtime: %dms%n", (endTime - startTime)) ;
-    }
-
-    @Test(expectedExceptions = FileNotFoundException.class)
-    public void testMissingFile() throws Exception {
-        new IndexedFastaSequenceFile(new File(TEST_DATA_DIR, "non-existent.fasta"));
-        Assert.fail("FileNotFoundException should have been thrown");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileFactoryTests.java b/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileFactoryTests.java
deleted file mode 100644
index 6eeae7b..0000000
--- a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileFactoryTests.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package htsjdk.samtools.reference;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Simple tests for the reference sequence file factory
- */
-public class ReferenceSequenceFileFactoryTests {
-    public static final File hg18 = new File("src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta");
-
-    @Test public void testPositivePath() {
-        final ReferenceSequenceFile f = ReferenceSequenceFileFactory.getReferenceSequenceFile(hg18);
-        Assert.assertTrue(f instanceof AbstractFastaSequenceFile);
-    }
-
-    @Test public void testGetIndexedReader() {
-        final ReferenceSequenceFile f = ReferenceSequenceFileFactory.getReferenceSequenceFile(hg18, true, true);
-        Assert.assertTrue(f instanceof IndexedFastaSequenceFile, "Got non-indexed reader when expecting indexed reader.");
-    }
-
-    @Test public void testGetNonIndexedReader1() {
-        final ReferenceSequenceFile f = ReferenceSequenceFileFactory.getReferenceSequenceFile(hg18, false, true);
-        Assert.assertTrue(f instanceof FastaSequenceFile, "Got indexed reader when truncating at whitespace! FAI must truncate.");
-    }
-
-    @Test public void testGetNonIndexedReader2() {
-        final ReferenceSequenceFile f = ReferenceSequenceFileFactory.getReferenceSequenceFile(hg18, true, false);
-        Assert.assertTrue(f instanceof FastaSequenceFile, "Got indexed reader when requesting non-indexed reader.");
-    }
-
-    @Test public void testDefaultToIndexed() {
-        final ReferenceSequenceFile f = ReferenceSequenceFileFactory.getReferenceSequenceFile(hg18, true);
-        Assert.assertTrue(f instanceof IndexedFastaSequenceFile, "Got non-indexed reader by default.");
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileWalkerTest.java b/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileWalkerTest.java
deleted file mode 100644
index fa746d6..0000000
--- a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceFileWalkerTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package htsjdk.samtools.reference;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Created by farjoun on 2/14/14.
- */
-public class ReferenceSequenceFileWalkerTest {
-
-
-    @DataProvider(name = "TestReference")
-    public Object[][] TestReference() {
-        return new Object[][]{
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 0, 1},
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 1, 1},
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 0, 0},
-        };
-    }
-
-
-    @Test(dataProvider = "TestReference")
-    public void testGet(final String fileName, final int index1, final int index2) throws SAMException {
-        final File refFile = new File(fileName);
-        final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(refFile);
-
-        ReferenceSequence sequence = refWalker.get(index1);
-        Assert.assertEquals(sequence.getContigIndex(), index1);
-
-        sequence = refWalker.get(index2);
-        Assert.assertEquals(sequence.getContigIndex(), index2);
-        CloserUtil.close(refWalker);
-    }
-
-
-    @DataProvider(name = "TestFailReference")
-    public Object[][] TestFailReference() {
-        return new Object[][]{
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta", 1,3},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta", 2,3},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta", 1,0},  //fail because not allowed to look back
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta", -1,0},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", -1, 0},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 1, -1},    //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 2,3},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 1,3},  //fail because out of bounds
-                new Object[]{"src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta", 1, 0} // fasta is indexed, but not allowed to look back
-        };
-    }
-
-
-    @Test(expectedExceptions = {SAMException.class}, dataProvider = "TestFailReference")
-    public void testFailGet(final String fileName, final int index1, final int index2) throws SAMException {
-        final File refFile = new File(fileName);
-        final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(refFile);
-
-        try {
-            refWalker.get(index1);
-
-            refWalker.get(index2);
-        }
-        finally {
-            CloserUtil.close(refWalker);
-        }
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceTests.java b/src/test/java/htsjdk/samtools/reference/ReferenceSequenceTests.java
deleted file mode 100644
index 797b0b3..0000000
--- a/src/test/java/htsjdk/samtools/reference/ReferenceSequenceTests.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.reference;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.util.Random;
-
-/**
- * Tests for the reading of reference sequences in various formats.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequenceTests {
-    private static final byte[] BASES = "acgtACGTN".getBytes();
-    private final Random random = new Random();
-
-    @Test(dataProvider="fastaTestParameters")
-    public void testSingleShortSequence(int chroms, int basesPerChrom) throws Exception {
-        File f = makeRandomReference(chroms, basesPerChrom);
-        ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(f);
-
-        for (int i=1; i<=chroms; ++i) {
-            ReferenceSequence seq = ref.nextSequence();
-            Assert.assertNotNull(seq);
-            Assert.assertEquals(seq.length(), basesPerChrom);
-            Assert.assertEquals(seq.getName(), "chr" + i);
-            Assert.assertEquals(seq.getContigIndex(), i-1);
-        }
-
-        Assert.assertNull(ref.nextSequence());
-    }
-
-    @DataProvider
-    Object[][] fastaTestParameters() {
-        return new Object[][] {
-                new Object[] { 1,     60},
-                new Object[] { 2,     60},
-                new Object[] {10,     60},
-                new Object[] { 1,   1000},
-                new Object[] { 2,   1000},
-                new Object[] {10,   1000},
-                new Object[] { 1, 250000},
-                new Object[] { 2, 250000},
-                new Object[] {10, 250000}
-        };
-    }
-
-
-    /** Utility method to write a random reference sequence of specified length. */
-    private File makeRandomReference(int chroms, int basesPerChrom) throws Exception {
-        File file = File.createTempFile("reference.", ".fasta");
-        file.deleteOnExit();
-        BufferedWriter out = new BufferedWriter(new FileWriter(file));
-
-        for (int i=1; i<=chroms; ++i) {
-            out.write("> chr" + i);
-            out.newLine();
-
-            for (int j=1; j<=basesPerChrom; ++j) {
-                out.write(BASES[random.nextInt(BASES.length)]);
-
-                if (j % 80 == 0 || j == basesPerChrom) out.newLine();
-            }
-        }
-
-        out.flush();
-        out.close();
-        return file;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekableBufferedStreamTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekableBufferedStreamTest.java
deleted file mode 100644
index 9720218..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekableBufferedStreamTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import static org.testng.Assert.assertEquals;
-
-public class SeekableBufferedStreamTest {
-
-//    private final File BAM_INDEX_FILE = new File("testdata/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai");
-    private final File BAM_FILE = new File("src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam");
-    private final String BAM_URL_STRING = "http://broadinstitute.github.io/picard/testdata/index_test.bam";
-    private static File TestFile = new File("src/test/resources/htsjdk/samtools/seekablestream/megabyteZeros.dat");
-
-    /**
-     * Test reading across a buffer boundary (buffer size is 512000).   The test first reads a range of
-     * bytes using an unbuffered stream file stream,  then compares this to results from a buffered http stream.
-     *
-     * @throws IOException
-     */
-    @Test
-    public void testRandomRead() throws IOException {
-
-        int startPosition = 500000;
-        int length = 50000;
-
-        byte[] buffer1 = new byte[length];
-        SeekableStream unBufferedStream = new SeekableFileStream(BAM_FILE);
-        unBufferedStream.seek(startPosition);
-        int bytesRead = unBufferedStream.read(buffer1, 0, length);
-        assertEquals(length, bytesRead);
-
-        byte[] buffer2 = new byte[length];
-        SeekableStream bufferedStream = new SeekableBufferedStream(new SeekableHTTPStream(new URL(BAM_URL_STRING)));
-        bufferedStream.seek(startPosition);
-        bytesRead = bufferedStream.read(buffer2, 0, length);
-        assertEquals(length, bytesRead);
-
-        assertEquals(buffer1, buffer2);
-    }
-
-    /**
-     * Test an attempt to read past the end of the file.  The test file is 594,149 bytes in length.  The test
-     * attempts to read a 1000 byte block starting at position 594000.  A correct result would return 149 bytes.
-     *
-     * @throws IOException
-     */
-    @Test
-    public void testEOF() throws IOException {
-
-        int remainder = 149;
-        long fileLength = BAM_FILE.length();
-        long startPosition = fileLength - remainder;
-        int length = 1000;
-
-
-        byte[] buffer = new byte[length];
-        SeekableStream bufferedStream = new SeekableBufferedStream(new SeekableHTTPStream(new URL(BAM_URL_STRING)));
-        bufferedStream.seek(startPosition);
-        int bytesRead = bufferedStream.read(buffer, 0, length);
-        assertEquals(remainder, bytesRead);
-
-        // Subsequent reads should return -1
-        bytesRead = bufferedStream.read(buffer, 0, length);
-        assertEquals(-1, bytesRead);
-    }
-
-    @Test
-    public void testSkip() throws IOException {
-        final int[] BUFFER_SIZES = new int[]{8, 96, 1024, 8*1024, 16*1024, 96*1024, 48*1024};
-
-        for (final int bufferSize : BUFFER_SIZES) {
-            final SeekableBufferedStream in1 = new SeekableBufferedStream(new SeekableFileStream(BAM_FILE), bufferSize);
-            final SeekableBufferedStream in2 = new SeekableBufferedStream(new SeekableFileStream(BAM_FILE), bufferSize);
-
-            final int SIZE = 10000;
-            final byte[] bytes1 = new byte[SIZE];
-            final byte[] bytes2 = new byte[SIZE];
-
-            reallyRead(bytes1, in1);
-            reallyRead(bytes1, in1);
-            in1.skip(bytes1.length);
-            reallyRead(bytes1, in1);
-
-            reallyRead(bytes2, in2);
-            reallyRead(bytes2, in2);
-            in2.seek(bytes2.length * 3);
-            reallyRead(bytes2, in2);
-
-            in1.close();
-            in2.close();
-
-            Assert.assertEquals(bytes1, bytes2, "Error at buffer size " + bufferSize);
-        }
-    }
-
-    private int reallyRead(final byte[] bytes, final SeekableBufferedStream in) throws IOException {
-        int read = 0, total = 0;
-        do {
-            read = in.read(bytes, total, bytes.length-total);
-            total += read;
-        } while (total != bytes.length && read > 0);
-
-        return total;
-    }
-
-
-    @Test
-    public void testDivisableReads()throws IOException{
-
-        testReadsLength(1);
-        testReadsLength(2);
-        testReadsLength(4);
-        testReadsLength(5);
-        testReadsLength(10);
-        testReadsLength(20);
-        testReadsLength(50);
-        testReadsLength(100);
-
-    }
-
-    private void testReadsLength(final int length) throws IOException {
-
-        final int BUFFERED_STREAM_BUFFER_SIZE = 100;
-        final byte buffer[]=new byte[BUFFERED_STREAM_BUFFER_SIZE*10];
-        final SeekableFileStream fileStream = new SeekableFileStream(TestFile);
-        final SeekableBufferedStream  bufferedStream = new SeekableBufferedStream(fileStream,BUFFERED_STREAM_BUFFER_SIZE);
-
-        for( int i=0; i<10*BUFFERED_STREAM_BUFFER_SIZE/length ; ++i ){
-            assertEquals(bufferedStream.read(buffer, 0, length), length);
-        }
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekableFTPStreamTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekableFTPStreamTest.java
deleted file mode 100644
index 966c18e..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekableFTPStreamTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * @author Jim Robinson
- * @since 10/3/11
- */
-public class SeekableFTPStreamTest {
-
-
-    static String urlString = "ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt";
-    static long fileSize = 27;
-    static byte[] expectedBytes = "abcdefghijklmnopqrstuvwxyz\n".getBytes();
-    SeekableFTPStream stream;
-
-    @BeforeMethod
-    public void setUp() throws IOException {
-        stream = new SeekableFTPStream(new URL(urlString));
-
-    }
-
-    @AfterMethod
-    public void tearDown() throws IOException {
-        stream.close();
-    }
-
-    @Test
-    public void testLength() throws Exception {
-        long length = stream.length();
-        Assert.assertEquals(fileSize, length);
-    }
-
-
-    /**
-     * Test a buffered read.  The buffer is much large than the file size,  assert that the desired # of bytes are read
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testBufferedRead() throws Exception {
-
-        byte[] buffer = new byte[64000];
-        int nRead = stream.read(buffer);
-        Assert.assertEquals(fileSize, nRead);
-
-    }
-
-    /**
-     * Test requesting a range that extends beyond the end of the file
-     */
-
-    @Test
-    public void testRange() throws Exception {
-        stream.seek(20);
-        byte[] buffer = new byte[64000];
-        int nRead = stream.read(buffer);
-        Assert.assertEquals(fileSize - 20, nRead);
-
-    }
-
-    /**
-     * Test requesting a range that begins beyond the end of the file
-     */
-
-    @Test
-    public void testBadRange() throws Exception {
-        stream.seek(30);
-        byte[] buffer = new byte[64000];
-        int nRead = stream.read(buffer);
-        Assert.assertEquals(-1, nRead);
-    }
-
-
-}
-
-
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekableFileStreamTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekableFileStreamTest.java
deleted file mode 100644
index 35e1545..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekableFileStreamTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.util.BufferedLineReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Created by IntelliJ IDEA.
- * User: jrobinso
- * Date: Dec 20, 2009
- * Time: 11:13:19 AM
- * To change this template use File | Settings | File Templates.
- */
-public class SeekableFileStreamTest {
-
-    @Test
-    public void testSeek() throws Exception {
-        String expectedLine = "ccccccccc";
-        File testFile = new File("src/test/resources/htsjdk/samtools/seekablestream/seekTest.txt");
-        SeekableFileStream is = new SeekableFileStream(testFile);
-        is.seek(20);
-        BufferedLineReader reader = new BufferedLineReader(is);
-        String nextLine = reader.readLine();
-        Assert.assertEquals(expectedLine, nextLine);
-        reader.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekableMemoryStreamTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekableMemoryStreamTest.java
deleted file mode 100644
index 09ad92d..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekableMemoryStreamTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.seekablestream;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.EOFException;
-import java.io.IOException;
-
-public class SeekableMemoryStreamTest {
-
-    @Test
-    public void test_getSource() {
-        String source = "source";
-        SeekableMemoryStream stream = new SeekableMemoryStream("qwe".getBytes(), source);
-        Assert.assertEquals(stream.getSource(), source);
-    }
-
-    @Test
-    public void test_EOF() throws IOException {
-        SeekableMemoryStream stream = new SeekableMemoryStream(new byte[]{}, null);
-        Assert.assertTrue(stream.eof());
-        Assert.assertEquals(stream.read(), -1);
-        Assert.assertTrue(stream.eof());
-    }
-
-    @Test
-    public void test_read_byte() throws IOException {
-        byte[] data = new byte[1024];
-        for (int i = 0; i < data.length; i++) {
-            data[i] = (byte) i;
-        }
-        SeekableMemoryStream stream = new SeekableMemoryStream(data, null);
-
-        for (int i = 0; i < data.length; i++) {
-            byte expectedByteValue = (byte) i;
-            Assert.assertEquals((byte) stream.read(), expectedByteValue);
-        }
-    }
-
-    @Test
-    public void test_read_into_array() throws IOException {
-        byte[] data = new byte[1024];
-        for (int i = 0; i < data.length; i++) {
-            data[i] = (byte) i;
-        }
-        SeekableMemoryStream stream = new SeekableMemoryStream(data, null);
-
-        byte[] copy = new byte[data.length];
-
-        int length = data.length;
-        int numberOfBytesReadSoFar = 0, maxBytesPerRead = 11;
-        while (numberOfBytesReadSoFar < length) {
-            final int count = stream.read(copy, numberOfBytesReadSoFar, Math.min(maxBytesPerRead, length - numberOfBytesReadSoFar));
-            if (count < 0) {
-                throw new EOFException();
-            }
-            numberOfBytesReadSoFar += count;
-        }
-
-        Assert.assertEquals(copy, data);
-    }
-
-    @Test(expectedExceptions = IOException.class)
-    public void test_reset() throws IOException {
-        SeekableMemoryStream stream = new SeekableMemoryStream("qwe".getBytes(), null);
-        stream.mark(3);
-        stream.reset();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekablePathStreamTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekablePathStreamTest.java
deleted file mode 100644
index 067f5be..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekablePathStreamTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.seekablestream;
-
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class SeekablePathStreamTest {
-
-    @Test
-    public void testRead() throws Exception {
-        Path testPath = new File("src/test/resources/htsjdk/samtools/seekablestream/seekTest.txt").toPath();
-        SeekablePathStream is = new SeekablePathStream(testPath);
-        Assert.assertEquals(is.position(), 0);
-        Assert.assertEquals(is.read(), (int) 'a');
-        Assert.assertEquals(is.position(), 1);
-        is.seek(20);
-        Assert.assertEquals(is.position(), 20);
-        byte[] buf = new byte[2];
-        Assert.assertEquals(is.read(buf, 0, buf.length), 2);
-        Assert.assertEquals(buf, new byte[] { (byte) 'c', (byte) 'c' });
-        Assert.assertEquals(is.skip(8), 8);
-        Assert.assertEquals(is.position(), 30);
-        Assert.assertEquals(is.length(), Files.size(testPath));
-        is.close();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/seekablestream/SeekableStreamFactoryTest.java b/src/test/java/htsjdk/samtools/seekablestream/SeekableStreamFactoryTest.java
deleted file mode 100644
index 5eb0af6..0000000
--- a/src/test/java/htsjdk/samtools/seekablestream/SeekableStreamFactoryTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package htsjdk.samtools.seekablestream;
-
-import htsjdk.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-public class SeekableStreamFactoryTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools");
-
-    @Test
-    public void testIsFilePath() throws Exception {
-        Assert.assertEquals(SeekableStreamFactory.isFilePath("x"), true);
-        Assert.assertEquals(SeekableStreamFactory.isFilePath(""), true);
-        Assert.assertEquals(SeekableStreamFactory.isFilePath("http://broadinstitute.org"), false);
-        Assert.assertEquals(SeekableStreamFactory.isFilePath("https://broadinstitute.org"), false);
-        Assert.assertEquals(SeekableStreamFactory.isFilePath("ftp://broadinstitute.org"), false);
-    }
-
-    @DataProvider(name="getStreamForData")
-    public Object[][] getStreamForData() throws Exception {
-        return new Object[][] {
-                { new File(TEST_DATA_DIR, "BAMFileIndexTest/index_test.bam").getAbsolutePath(),
-                        new File(TEST_DATA_DIR, "BAMFileIndexTest/index_test.bam").getAbsolutePath() },
-                { new File(TEST_DATA_DIR, "cram_with_bai_index.cram").getAbsolutePath(),
-                        new File(TEST_DATA_DIR, "cram_with_bai_index.cram").getAbsolutePath() },
-                { new URL("file://" + new File(TEST_DATA_DIR, "cram_with_bai_index.cram").getAbsolutePath()).toExternalForm(),
-                        new File(TEST_DATA_DIR, "cram_with_bai_index.cram").getAbsolutePath() },
-                { new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam").toExternalForm(),
-                        new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam").toExternalForm() },
-                { new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam.bai").toExternalForm(),
-                       new URL(TestUtil.BASE_URL_FOR_HTTP_TESTS + "index_test.bam.bai").toExternalForm() }
-        };
-    }
-
-    @Test(dataProvider = "getStreamForData")
-    public void testGetStreamFor(final String path, final String expectedPath) throws IOException {
-        Assert.assertEquals(SeekableStreamFactory.getInstance().getStreamFor(path).getSource(), expectedPath);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/sra/AbstractSRATest.java b/src/test/java/htsjdk/samtools/sra/AbstractSRATest.java
deleted file mode 100644
index 297b892..0000000
--- a/src/test/java/htsjdk/samtools/sra/AbstractSRATest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordIterator;
-import org.testng.Assert;
-import org.testng.SkipException;
-import org.testng.annotations.BeforeGroups;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Method;
-import java.util.NoSuchElementException;
-
- at Test(groups = "sra")
-public abstract class AbstractSRATest {
-    private static boolean canResolveNetworkAccession = false;
-    private static String checkAccession = "SRR000123";
-
-    @BeforeGroups(groups = "sra")
-    public final void checkIfCanResolve() {
-        if (SRAAccession.checkIfInitialized() != null) {
-            return;
-        }
-        canResolveNetworkAccession = SRAAccession.isValid(checkAccession);
-    }
-
-    @BeforeMethod
-    public final void assertSRAIsSupported() {
-        if(SRAAccession.checkIfInitialized() != null){
-            throw new SkipException("Skipping SRA Test because SRA native code is unavailable.");
-        }
-    }
-
-    @BeforeMethod
-    public final void skipIfCantResolve(Method method, Object[] params) {
-        String accession = null;
-
-        if (params.length > 0) {
-            Object firstParam = params[0];
-            if (firstParam instanceof String) {
-                accession = (String)firstParam;
-            } else if (firstParam instanceof SRAAccession) {
-                accession = firstParam.toString();
-            }
-        }
-
-        if (accession != null &&
-                accession.matches(SRAAccession.REMOTE_ACCESSION_PATTERN) && !canResolveNetworkAccession) {
-            throw new SkipException("Skipping network SRA Test because cannot resolve remote SRA accession '" +
-                    checkAccession + "'.");
-        }
-    }
-
-    /**
-     * Exhaust the iterator and check that it produce the expected number of mapped and unmapped reads.
-     * Also checks that the hasNext() agrees with the actual results of next() for the given iterator.
-     * @param expectedNumMapped expected number of mapped reads, specify -1 to skip this check
-     * @param expectedNumUnmapped expected number of unmapped reads, specify -1 to skip this check
-     */
-    static void assertCorrectCountsOfMappedAndUnmappedRecords(SAMRecordIterator samRecordIterator,
-                                                                        int expectedNumMapped, int expectedNumUnmapped) {
-        int numMapped = 0, numUnmapped = 0;
-        while (true) {
-            boolean hasRecord = samRecordIterator.hasNext();
-            SAMRecord record;
-            try {
-                record = samRecordIterator.next();
-                Assert.assertNotNull(record);
-                Assert.assertTrue(hasRecord); // exception is not thrown if we came to this point
-            } catch (final NoSuchElementException e) {
-                Assert.assertFalse(hasRecord);
-                break;
-            }
-
-            if (record.getReadUnmappedFlag()) {
-                numUnmapped++;
-            } else {
-                numMapped++;
-            }
-        }
-
-        if (expectedNumMapped != -1) {
-            Assert.assertEquals(numMapped, expectedNumMapped);
-        }
-        if (expectedNumUnmapped != -1) {
-            Assert.assertEquals(numUnmapped, expectedNumUnmapped);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRAAccessionTest.java b/src/test/java/htsjdk/samtools/sra/SRAAccessionTest.java
deleted file mode 100644
index 4b89b7e..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRAAccessionTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package htsjdk.samtools.sra;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for SRAAccession logic
- */
-public class SRAAccessionTest extends AbstractSRATest {
-
-    @DataProvider(name = "isValidAccData")
-    private Object[][] getIsValidAccData() {
-        return new Object[][] {
-            { "SRR000123", true },
-            { "DRR010511", true },
-            { "src/test/resources/htsjdk/samtools/sra/test_archive.sra", true },
-            { "src/test/resources/htsjdk/samtools/compressed.bam", false },
-            { "src/test/resources/htsjdk/samtools/uncompressed.sam", false },
-        };
-    }
-
-    @Test(dataProvider = "isValidAccData")
-    public void testIsValidAcc(String accession, boolean isValid) {
-        Assert.assertEquals(isValid, SRAAccession.isValid(accession));
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRAIndexTest.java b/src/test/java/htsjdk/samtools/sra/SRAIndexTest.java
deleted file mode 100644
index 0cdfc69..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRAIndexTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.BAMFileSpan;
-import htsjdk.samtools.Bin;
-import htsjdk.samtools.GenomicIndexUtil;
-import htsjdk.samtools.SRAFileReader;
-import htsjdk.samtools.SRAIndex;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * Unit tests for SRAIndex
- *
- * Created by andrii.nikitiuk on 10/28/15.
- */
-public class SRAIndexTest extends AbstractSRATest {
-    private static final SRAAccession DEFAULT_ACCESSION = new SRAAccession("SRR2096940");
-    private static final int LAST_BIN_LEVEL = GenomicIndexUtil.LEVEL_STARTS.length - 1;
-    private static final int SRA_BIN_OFFSET = GenomicIndexUtil.LEVEL_STARTS[LAST_BIN_LEVEL];
-
-    @Test
-    public void testLevelSize() {
-        final SRAIndex index = getIndex(DEFAULT_ACCESSION);
-        Assert.assertEquals(index.getLevelSize(0), GenomicIndexUtil.LEVEL_STARTS[1] - GenomicIndexUtil.LEVEL_STARTS[0]);
-
-        Assert.assertEquals(index.getLevelSize(LAST_BIN_LEVEL), GenomicIndexUtil.MAX_BINS - GenomicIndexUtil.LEVEL_STARTS[LAST_BIN_LEVEL] - 1);
-    }
-
-    @Test
-    public void testLevelForBin() {
-        final SRAIndex index = getIndex(DEFAULT_ACCESSION);
-        final Bin bin = new Bin(0, SRA_BIN_OFFSET);
-        Assert.assertEquals(index.getLevelForBin(bin), LAST_BIN_LEVEL);
-    }
-
-    @DataProvider(name = "testBinLocuses")
-    private Object[][] createDataForBinLocuses() {
-        return new Object[][] {
-                {DEFAULT_ACCESSION, 0, 0, 1, SRAIndex.SRA_BIN_SIZE},
-                {DEFAULT_ACCESSION, 0, 1, SRAIndex.SRA_BIN_SIZE + 1, SRAIndex.SRA_BIN_SIZE * 2}
-        };
-    }
-
-    @Test(dataProvider = "testBinLocuses")
-    public void testBinLocuses(SRAAccession acc, int reference, int binIndex, int firstLocus, int lastLocus) {
-        final SRAIndex index = getIndex(acc);
-        final Bin bin = new Bin(reference, SRA_BIN_OFFSET + binIndex);
-
-        Assert.assertEquals(index.getFirstLocusInBin(bin), firstLocus);
-        Assert.assertEquals(index.getLastLocusInBin(bin), lastLocus);
-    }
-
-    @DataProvider(name = "testBinOverlappings")
-    private Object[][] createDataForBinOverlappings() {
-        return new Object[][] {
-                {DEFAULT_ACCESSION, 0, 1, SRAIndex.SRA_BIN_SIZE, new HashSet<>(Arrays.asList(0))},
-                {DEFAULT_ACCESSION, 0, SRAIndex.SRA_BIN_SIZE + 1, SRAIndex.SRA_BIN_SIZE * 2, new HashSet<>(Arrays.asList(1))},
-                {DEFAULT_ACCESSION, 0, SRAIndex.SRA_BIN_SIZE + 1, SRAIndex.SRA_BIN_SIZE * 3, new HashSet<>(Arrays.asList(1, 2))},
-                {DEFAULT_ACCESSION, 0, SRAIndex.SRA_BIN_SIZE * 2, SRAIndex.SRA_BIN_SIZE * 2 + 1, new HashSet<>(Arrays.asList(1, 2))}
-        };
-    }
-
-
-    @Test(dataProvider = "testBinOverlappings")
-    public void testBinOverlappings(SRAAccession acc, int reference, int firstLocus, int lastLocus, Set<Integer> binNumbers) {
-        final SRAIndex index = getIndex(acc);
-        final Iterator<Bin> binIterator = index.getBinsOverlapping(reference, firstLocus, lastLocus).iterator();
-        final Set<Integer> binNumbersFromIndex = new HashSet<>();
-        while (binIterator.hasNext()) {
-            final Bin bin = binIterator.next();
-            binNumbersFromIndex.add(bin.getBinNumber() - SRA_BIN_OFFSET);
-        }
-
-        Assert.assertEquals(binNumbers, binNumbersFromIndex);
-    }
-
-    @DataProvider(name = "testSpanOverlappings")
-    private Object[][] createDataForSpanOverlappings() {
-        return new Object[][] {
-                {DEFAULT_ACCESSION, 0, 1, SRAIndex.SRA_BIN_SIZE, new long[] {0, SRAIndex.SRA_CHUNK_SIZE} },
-                {DEFAULT_ACCESSION, 0, SRAIndex.SRA_BIN_SIZE * 2, SRAIndex.SRA_BIN_SIZE * 2 + 1, new long[]{0, SRAIndex.SRA_CHUNK_SIZE} },
-                {DEFAULT_ACCESSION, 0, SRAIndex.SRA_CHUNK_SIZE, SRAIndex.SRA_CHUNK_SIZE + 1, new long[]{0, SRAIndex.SRA_CHUNK_SIZE, SRAIndex.SRA_CHUNK_SIZE, SRAIndex.SRA_CHUNK_SIZE * 2} },
-        };
-    }
-
-    @Test(dataProvider = "testSpanOverlappings")
-    public void testSpanOverlappings(SRAAccession acc, int reference, int firstLocus, int lastLocus, long[] spanCoordinates) {
-        final SRAIndex index = getIndex(acc);
-        final BAMFileSpan span = index.getSpanOverlapping(reference, firstLocus, lastLocus);
-
-        long[] coordinatesFromIndex = span.toCoordinateArray();
-
-        Assert.assertTrue(Arrays.equals(coordinatesFromIndex, spanCoordinates),
-                "Coordinates mismatch. Expected: " + Arrays.toString(spanCoordinates) +
-                " but was : " + Arrays.toString(coordinatesFromIndex));
-    }
-
-    private SRAIndex getIndex(SRAAccession acc) {
-        final SRAFileReader reader = new SRAFileReader(acc);
-        return (SRAIndex) reader.getIndex();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRALazyRecordTest.java b/src/test/java/htsjdk/samtools/sra/SRALazyRecordTest.java
deleted file mode 100644
index 36ef346..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRALazyRecordTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SRAFileReader;
-import htsjdk.samtools.util.TestUtil;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for SRA extension of SAMRecord objects which load fields on demand
- */
-public class SRALazyRecordTest extends AbstractSRATest {
-    private static final SRAAccession DEFAULT_ACCESSION = new SRAAccession("SRR2096940");
-
-    @DataProvider(name = "serializationTestData")
-    private Object[][] getSerializationTestData() {
-        return new Object[][] {
-                { DEFAULT_ACCESSION }
-        };
-    }
-
-    @Test(dataProvider = "serializationTestData")
-    public void testSerialization(final SRAAccession accession) throws Exception {
-        final SRAFileReader reader = new SRAFileReader(accession);
-        final SAMRecord initialSAMRecord = reader.getIterator().next();
-        reader.close();
-
-        final SAMRecord deserializedSAMRecord = TestUtil.serializeAndDeserialize(initialSAMRecord);
-
-        Assert.assertEquals(deserializedSAMRecord, initialSAMRecord, "Deserialized SAMRecord not equal to original SAMRecord");
-    }
-
-    @Test
-    public void testCloneAndEquals() throws Exception {
-        final SRAFileReader reader = new SRAFileReader(DEFAULT_ACCESSION);
-        final SAMRecord record = reader.getIterator().next();
-        reader.close();
-
-        final SAMRecord newRecord = (SAMRecord)record.clone();
-        Assert.assertFalse(record == newRecord);
-        Assert.assertNotSame(record, newRecord);
-        Assert.assertEquals(record, newRecord);
-        Assert.assertEquals(newRecord, record);
-
-        newRecord.setAlignmentStart(record.getAlignmentStart() + 100);
-        Assert.assertFalse(record.equals(newRecord));
-        Assert.assertFalse(newRecord.equals(record));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRAQueryTest.java b/src/test/java/htsjdk/samtools/sra/SRAQueryTest.java
deleted file mode 100644
index 575b3dd..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRAQueryTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SamInputResource;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.ValidationStringency;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class SRAQueryTest extends AbstractSRATest {
-
-    @DataProvider(name = "testUnmappedCounts")
-    private Object[][] createDataForUnmappedCounts() {
-        return new Object[][] {
-                {"SRR2096940", 498}
-        };
-    }
-
-    @Test(dataProvider = "testUnmappedCounts")
-    public void testUnmappedCounts(String acc, int expectedNumUnmapped) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.queryUnmapped();
-
-        assertCorrectCountsOfMappedAndUnmappedRecords(samRecordIterator, 0, expectedNumUnmapped);
-    }
-
-    @DataProvider(name = "testReferenceAlignedCounts")
-    private Object[][] createDataForReferenceAlignedCounts() {
-        return new Object[][] {
-                {"SRR2096940", "CM000681.1", 0, 10591},
-                {"SRR2096940", "CM000681.1", 55627015, 10591},
-                {"SRR2096940", "CM000681.1", 55627016, 0},
-        };
-    }
-
-    @Test(dataProvider = "testReferenceAlignedCounts")
-    public void testReferenceAlignedCounts(String acc, String reference, int referenceStart, int expectedNumMapped) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.queryAlignmentStart(reference, referenceStart);
-
-        assertCorrectCountsOfMappedAndUnmappedRecords(samRecordIterator, expectedNumMapped, 0);
-    }
-
-    @DataProvider(name = "testQueryCounts")
-    private Object[][] createDataForQueryCounts() {
-        return new Object[][] {
-                {"SRR2096940", "CM000681.1", 0, 59128983, true, 10591, 0},
-                {"SRR2096940", "CM000681.1", 55627015, 59128983, true, 10591, 0},
-                {"SRR2096940", "CM000681.1", 55627016, 59128983, true, 0, 0},
-                {"SRR2096940", "CM000681.1", 55627016, 59128983, false, 10591, -1},
-        };
-    }
-
-    @Test(dataProvider = "testQueryCounts")
-    public void testQueryCounts(String acc, String reference, int referenceStart, int referenceEnd, boolean contained, int expectedNumMapped, int expectedNumUnmapped) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.query(reference, referenceStart, referenceEnd, contained);
-
-        assertCorrectCountsOfMappedAndUnmappedRecords(samRecordIterator, expectedNumMapped, expectedNumUnmapped);
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRAReferenceTest.java b/src/test/java/htsjdk/samtools/sra/SRAReferenceTest.java
deleted file mode 100644
index dd2b374..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRAReferenceTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class SRAReferenceTest extends AbstractSRATest {
-    @DataProvider(name = "testReference")
-    private Object[][] createDataForReference() {
-        return new Object[][] {
-                {"SRR2096940", "CM000681.1", 95001, 95050, "AGATGATTCAGTCTCACCAAGAACACTGAAAGTCACATGGCTACCAGCAT"},
-        };
-    }
-
-    @Test(dataProvider = "testReference")
-    public void testReference(String acc, String refContig, int refStart, int refStop, String refBases) {
-        final ReferenceSequenceFile refSeqFile = new SRAIndexedSequenceFile(new SRAAccession(acc));
-        final ReferenceSequence refSeq = refSeqFile.getSubsequenceAt(refContig, refStart, refStop);
-        Assert.assertEquals(new String(refSeq.getBases()), refBases);
-    }
-
-    class TestReferenceMtData {
-        String refContig;
-        int refStart;
-        int refStop;
-        String refBases;
-
-        TestReferenceMtData(String refContig, int refStart, int refStop, String refBases) {
-            this.refContig = refContig;
-            this.refStart = refStart;
-            this.refStop = refStop;
-            this.refBases = refBases;
-        }
-
-        @Override
-        public String toString() {
-            return refContig + ":" + refStart + "-" + refStop + " = " + refBases;
-        }
-    }
-
-    @DataProvider(name = "testReferenceMt")
-    private Object[][] createDataForReferenceMt() {
-        return new Object[][] {
-                {
-                    "SRR353866", Arrays.asList(
-                        new TestReferenceMtData("AAAB01001871.1", 1, 50, "TGACGCGCATGAATGGATTAACGAGATTCCCTCTGTCCCTATCTACTATC"),
-                        new TestReferenceMtData("AAAB01001871.1", 901, 950, "ACCAAGCGTACGATTGTTCACCCTTTCAAGGGAACGTGAGCTGGGTTTAG"),
-                        new TestReferenceMtData("AAAB01008987.1", 1, 50, "TTTTGGACGATGTTTTTGGTGAACAGAAAACGAGCTCAATCATCCAGAGC"),
-                        new TestReferenceMtData("AAAB01008859.1", 1, 50, "CAAAACGATGCCACAGATCAGAAGTTAATTAACGCACATTCTCCACCCAC")
-                    )
-                },
-        };
-    }
-
-    @Test(dataProvider = "testReferenceMt")
-    public void testReferenceMt(String acc, List<TestReferenceMtData> parallelTests) throws Exception {
-        final ReferenceSequenceFile refSeqFile = new SRAIndexedSequenceFile(new SRAAccession(acc));
-        final long timeout = 1000L * 5; // just in case
-        final List<Thread> threads = new ArrayList<Thread>(parallelTests.size());
-        final Map<TestReferenceMtData, Exception> runErrors = Collections.synchronizedMap(new HashMap<TestReferenceMtData, Exception>());
-        for (final TestReferenceMtData testData: parallelTests) {
-            threads.add(new Thread() {
-                @Override
-                public void run() {
-                    try {
-                        final ReferenceSequence refSeq = refSeqFile.getSubsequenceAt(testData.refContig,
-                                testData.refStart, testData.refStop);
-                        Assert.assertEquals(new String(refSeq.getBases()), testData.refBases);
-                    } catch (final Exception e) {
-                        Assert.assertNull(runErrors.put(testData, e));
-                    }
-                }
-            });
-        }
-        for (final Thread thread: threads) {
-            thread.start();
-        }
-        for (final Thread thread: threads) {
-            thread.join(timeout);
-        }
-        for (final Map.Entry<TestReferenceMtData, Exception> result: runErrors.entrySet()) {
-            // Will fail only on the first, but a debugger will be able to see all the results.
-            Assert.fail("failed: " + result.getKey(), result.getValue());
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/sra/SRATest.java b/src/test/java/htsjdk/samtools/sra/SRATest.java
deleted file mode 100644
index c106bfc..0000000
--- a/src/test/java/htsjdk/samtools/sra/SRATest.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-package htsjdk.samtools.sra;
-
-import htsjdk.samtools.BAMFileSpan;
-import htsjdk.samtools.BrowseableBAMIndex;
-import htsjdk.samtools.Chunk;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMReadGroupRecord;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.SAMUtils;
-import htsjdk.samtools.SAMValidationError;
-import htsjdk.samtools.SamInputResource;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.ValidationStringency;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Integration tests for SRA functionality
- *
- * Created by andrii.nikitiuk on 8/24/15.
- */
-public class SRATest extends AbstractSRATest {
-
-    @DataProvider(name = "testCounts")
-    private Object[][] createDataForCounts() {
-        return new Object[][] {
-            {"SRR2096940", 10591, 498},
-            {"SRR000123", 0, 4583}
-        };
-    }
-
-    @Test(dataProvider = "testCounts")
-    public void testCounts(String acc, int expectedNumMapped, int expectedNumUnmapped) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.iterator();
-
-        assertCorrectCountsOfMappedAndUnmappedRecords(samRecordIterator, expectedNumMapped, expectedNumUnmapped);
-    }
-
-    @DataProvider(name = "testCountsBySpan")
-    private Object[][] createDataForCountsBySpan() {
-        return new Object[][] {
-            {"SRR2096940", Arrays.asList(new Chunk(0, 59128983), new Chunk(59128983, 59141089)), 10591, 498},
-            {"SRR2096940", Arrays.asList(new Chunk(0, 29128983), new Chunk(29128983, 59141089)), 10591, 498},
-            {"SRR2096940", Arrays.asList(new Chunk(0, 59134983), new Chunk(59134983, 59141089)), 10591, 498},
-            {"SRR2096940", Arrays.asList(new Chunk(0, 59130000)),                                10591, 0},
-            {"SRR2096940", Arrays.asList(new Chunk(0, 59140889)),                                10591, 298}
-        };
-    }
-
-    @Test(dataProvider = "testCountsBySpan")
-    public void testCountsBySpan(String acc, List<Chunk> chunks, int expectedNumMapped, int expectedNumUnmapped) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = ((SamReader.Indexing) reader).iterator(new BAMFileSpan(chunks));
-
-        assertCorrectCountsOfMappedAndUnmappedRecords(samRecordIterator, expectedNumMapped, expectedNumUnmapped);
-    }
-
-    @DataProvider(name = "testGroups")
-    private Object[][] createDataForGroups() {
-        return new Object[][] {
-            {"SRR1035115", new TreeSet<>(Arrays.asList("15656144_B09YG", "15656144_B09MR"))},
-            {"SRR2096940", new TreeSet<>(Arrays.asList("SRR2096940"))}
-        };
-    }
-
-    @Test(dataProvider = "testGroups")
-    public void testGroups(String acc, Set<String> groups) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.iterator();
-
-        SAMFileHeader header = reader.getFileHeader();
-        Set<String> headerGroups = new TreeSet<>();
-        for (SAMReadGroupRecord group : header.getReadGroups()) {
-            Assert.assertEquals(group.getReadGroupId(), group.getId());
-            headerGroups.add(group.getReadGroupId());
-        }
-
-        Assert.assertEquals(groups, headerGroups);
-
-        Set<String> foundGroups = new TreeSet<>();
-
-        for (int i = 0; i < 10000; i++) {
-            if (!samRecordIterator.hasNext()) {
-                break;
-            }
-            SAMRecord record = samRecordIterator.next();
-            String groupName = (String)record.getAttribute("RG");
-
-            foundGroups.add(groupName);
-        }
-
-        // please note that some groups may be introduced after 10k records, which is not an error
-        Assert.assertEquals(groups, foundGroups);
-    }
-
-    @DataProvider(name = "testReferences")
-    private Object[][] createDataForReferences() {
-        return new Object[][] {
-            // primary alignment only
-            {"SRR353866", 9,
-                    Arrays.asList(
-                            "AAAB01001871.1", "AAAB01002233.1", "AAAB01004056.1", "AAAB01006027.1",
-                            "AAAB01008846.1", "AAAB01008859.1", "AAAB01008960.1", "AAAB01008982.1",
-                            "AAAB01008987.1"
-                    ),
-                    Arrays.asList(
-                            1115, 1034, 1301, 1007,
-                            11308833, 12516315, 23099915, 1015562,
-                            16222597
-                    )},
-        };
-    }
-
-    @Test(dataProvider = "testReferences")
-    public void testReferences(String acc, int numberFirstReferenceFound, List<String> references, List<Integer> refLengths) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.iterator();
-
-        SAMFileHeader header = reader.getFileHeader();
-        Set<String> headerRefNames = new TreeSet<>();
-
-        for (SAMSequenceRecord ref : header.getSequenceDictionary().getSequences()) {
-            String refName = ref.getSequenceName();
-
-            int refIndex = references.indexOf(refName);
-            Assert.assertTrue(refIndex != -1, "Unexpected reference: " + refName);
-
-            Assert.assertEquals(refLengths.get(refIndex), (Integer) ref.getSequenceLength(), "Reference length is incorrect");
-
-            headerRefNames.add(refName);
-        }
-
-        Assert.assertEquals(new TreeSet<>(references), headerRefNames);
-
-        Set<String> foundRefNames = new TreeSet<>();
-        for (int i = 0; i < 10000; i++) {
-            if (!samRecordIterator.hasNext()) {
-                break;
-            }
-            SAMRecord record = samRecordIterator.next();
-
-            if (record.getReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX)) {
-                continue;
-            }
-
-            String refName = record.getReferenceName();
-            Assert.assertNotNull(refName);
-
-            foundRefNames.add(refName);
-        }
-
-        Assert.assertEquals(new TreeSet<>(references.subList(0, numberFirstReferenceFound)), foundRefNames);
-    }
-
-    @DataProvider(name = "testRows")
-    private Object[][] createDataForRowsTest() {
-        return new Object[][] {
-            // primary alignment only
-            {"SRR2127895", 1, 83, "SRR2127895.R.1",
-                    "CGTGCGCGTGACCCATCAGATGCTGTTCAATCAGTGGCAAATGCGGAACGGTTTCTGCGGGTTGCCGATATTCTGGAGAGTAATGCCAGGCAGGGGCAGGT",
-                    "DDBDDDDDBCABC at CCDDDC?99CCA:CDCDDDDDDDECDDDFFFHHHEGIJIIGIJIHIGJIJJJJJJJIIJIIHIGJIJJJIJJIHFFBHHFFFDFBBB",
-                    366, "29S72M", "gi|152968582|ref|NC_009648.1|", 147, true, false, false},
-
-            // small SRA archive
-            {"SRR2096940", 1, 16, "SRR2096940.R.3",
-                    "GTGTGTCACCAGATAAGGAATCTGCCTAACAGGAGGTGTGGGTTAGACCCAATATCAGGAGACCAGGAAGGAGGAGGCCTAAGGATGGGGCTTTTCTGTCACCAATCCTGTCCCTAGTGGCCCCACTGTGGGGTGGAGGGGACAGATAAAAGTACCCAGAACCAGAG",
-                    "AAAABFFFFFFFGGGGGGGGIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGGGGGFGFFDFFFFFC",
-                    55627016, "167M", "CM000681.1", 42, false, false, false},
-
-            {"SRR2096940", 10591, 4, "SRR2096940.R.10592",
-                    "CTCTGGTTCTGGGTACTTTTATCTGTCCCCTCCACCCCACAGTGGCGAGCCAGATTCCTTATCTGGTGACACAC",
-                    "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-                    -1, null, null, -1, false, false, false},
-
-            // primary and secondary alignments
-            {"SRR833251", 81, 393, "SRR833251.R.51",
-                    "ATGCAAATCCGAATGGGCTATTTGTGGGTACTTGGGCAGGTAAGTAGCTGGCAATCTTGGTCGGTAAACCAATACCCAAGTTCACATAGGCACCATCGGGA",
-                    "CCCFFFFFHHHHHIJJJIJJJJJIIJJJGIJIJIIJIJJJDGIGIIJIJIHIJJJJJJGIGHIHEDFFFFDDEEEDDDDDCDEEDDDDDDDDDDDDDBBDB",
-                    1787186, "38M63S", "gi|169794206|ref|NC_010410.1|", 11, true, true, true},
-
-            // local SRA file
-            {"src/test/resources/htsjdk/samtools/sra/test_archive.sra", 1, 99, "test_archive.R.2",
-                    "TGTCGATGCTGAAAGTGTCTGCGGTGAACCACTTCATGCACAGCGCACACTGCAGCTCCACTTCACCCAGCTGACGGCCGTTCTCATCGTCTCCAGAGCCCGTCTGAGCGTCCGCTGCTTCAGAACTGTCCCCGGCTGTATCCTGAAGAC",
-                    "BBAABBBFAFFFGGGGGGGGGGGGEEFHHHHGHHHHHFHHGHFDGGGGGHHGHHHHHHHHHHHHFHHHGHHHHHHGGGGGGGHGGHHHHHHHHHGHHHHHGGGGHGHHHGGGGGGGGGHHHHEHHHHHHHHHHGCGGGHHHHHHGBFFGF",
-                    2811570, "150M", "NC_007121.5", 60, true, false, false}
-        };
-    }
-
-    @Test(dataProvider = "testRows")
-    public void testRows(String acc, int recordIndex, int flags, String readName, String bases, String quals, int refStart, String cigar,
-                         String refName, int mapQ, boolean hasMate, boolean isSecondOfPair, boolean isSecondaryAlignment) {
-        SAMRecord record = getRecordByIndex(acc, recordIndex, false);
-
-        checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
-    }
-
-    @Test(dataProvider = "testRows")
-    public void testRowsAfterIteratorDetach(String acc, int recordIndex, int flags, String readName, String bases, String quals,
-                                            int refStart, String cigar, String refName, int mapQ, boolean hasMate,
-                                            boolean isSecondOfPair, boolean isSecondaryAlignment) {
-        SAMRecord record = getRecordByIndex(acc, recordIndex, true);
-
-        checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
-    }
-
-    @Test(dataProvider = "testRows")
-    public void testRowsOverrideValues(String acc, int recordIndex, int flags, String readName, String bases, String quals,
-                                       int refStart, String cigar, String refName, int mapQ, boolean hasMate,
-                                       boolean isSecondOfPair, boolean isSecondaryAlignment) {
-        SAMRecord record = getRecordByIndex(acc, recordIndex, true);
-        SAMFileHeader header = record.getHeader();
-
-        record.setFlags(0);
-        record.setReadUnmappedFlag(refStart == -1);
-        record.setReadBases("C".getBytes());
-        record.setBaseQualities(SAMUtils.fastqToPhred("A"));
-        if (refStart == -1) {
-            checkSAMRecord(record, 4, readName, "C", "A", refStart, "1M", refName, mapQ, false, false, false);
-        } else {
-            int sequenceIndex = header.getSequenceIndex(refName);
-            Assert.assertFalse(sequenceIndex == -1);
-
-            if (sequenceIndex == 0) {
-                if (header.getSequenceDictionary().getSequences().size() > 1) {
-                    sequenceIndex++;
-                }
-            } else {
-                sequenceIndex--;
-            }
-
-            refName = header.getSequence(sequenceIndex).getSequenceName();
-
-            record.setAlignmentStart(refStart - 100);
-            record.setCigarString("1M");
-            record.setMappingQuality(mapQ - 1);
-            record.setReferenceIndex(sequenceIndex);
-
-            checkSAMRecord(record, 0, readName, "C", "A", refStart - 100, "1M", refName, mapQ - 1, false, false, false);
-        }
-    }
-
-    @Test(dataProvider = "testRows")
-    public void testRowsBySpan(String acc, int recordIndex, int flags, String readName, String bases, String quals,
-                                            int refStart, String cigar, String refName, int mapQ, boolean hasMate,
-                                            boolean isSecondOfPair, boolean isSecondaryAlignment) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        SAMFileHeader header = reader.getFileHeader();
-
-        Chunk chunk;
-        if (refStart != -1) {
-            long refOffset = 0;
-            int refIndex = header.getSequenceDictionary().getSequence(refName).getSequenceIndex();
-            for (SAMSequenceRecord sequenceRecord : header.getSequenceDictionary().getSequences()) {
-                if (sequenceRecord.getSequenceIndex() <  refIndex) {
-                    refOffset += sequenceRecord.getSequenceLength();
-                }
-            }
-
-            chunk = new Chunk(refOffset + refStart - 1, refOffset + refStart);
-        } else {
-            long totalRefLength = header.getSequenceDictionary().getReferenceLength();
-            long totalRecordRange = ((BAMFileSpan)reader.indexing().getFilePointerSpanningReads()).toCoordinateArray()[1];
-            chunk = new Chunk(totalRefLength, totalRecordRange);
-        }
-
-        final SAMRecordIterator samRecordIterator = ((SamReader.Indexing) reader).iterator(new BAMFileSpan(chunk));
-
-        SAMRecord record = null;
-        while (samRecordIterator.hasNext()) {
-            SAMRecord currentRecord = samRecordIterator.next();
-            if (currentRecord.getReadName().equals(readName)) {
-                record = currentRecord;
-                break;
-            }
-        }
-
-        checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
-    }
-
-    @Test(dataProvider = "testRows")
-    public void testRowsByIndex(String acc, int recordIndex, int flags, String readName, String bases, String quals,
-                                int refStart, String cigar, String refName, int mapQ, boolean hasMate,
-                                boolean isSecondOfPair, boolean isSecondaryAlignment) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        Assert.assertTrue(reader.hasIndex());
-        Assert.assertTrue(reader.indexing().hasBrowseableIndex());
-
-        SAMFileHeader header = reader.getFileHeader();
-        BrowseableBAMIndex index = reader.indexing().getBrowseableIndex();
-
-        BAMFileSpan span;
-        if (refStart != -1) {
-            int refIndex = header.getSequenceDictionary().getSequence(refName).getSequenceIndex();
-            span = index.getSpanOverlapping(refIndex, refStart, refStart + 1);
-        } else {
-            long chunkStart = index.getStartOfLastLinearBin();
-            long totalRecordRange = ((BAMFileSpan) reader.indexing().getFilePointerSpanningReads()).toCoordinateArray()[1];
-            span = new BAMFileSpan(new Chunk(chunkStart, totalRecordRange));
-        }
-
-        final SAMRecordIterator samRecordIterator = ((SamReader.Indexing) reader).iterator(span);
-
-        SAMRecord record = null;
-        while (samRecordIterator.hasNext()) {
-            SAMRecord currentRecord = samRecordIterator.next();
-            if (refStart != -1 && currentRecord.getAlignmentStart() + currentRecord.getReadLength() < refStart) {
-                continue;
-            }
-
-            if (currentRecord.getReadName().equals(readName)
-                    && currentRecord.getNotPrimaryAlignmentFlag() == isSecondaryAlignment
-                    && (!hasMate || currentRecord.getSecondOfPairFlag() == isSecondOfPair)) {
-                record = currentRecord;
-                break;
-            }
-        }
-
-        checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
-    }
-
-    private SAMRecord getRecordByIndex(String acc, int recordIndex, boolean detach) {
-        SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(
-                SamInputResource.of(new SRAAccession(acc))
-        );
-
-        final SAMRecordIterator samRecordIterator = reader.iterator();
-
-        while (recordIndex != 0) {
-            Assert.assertTrue(samRecordIterator.hasNext(), "Record set is too small");
-
-            samRecordIterator.next();
-            recordIndex--;
-        }
-        Assert.assertTrue(samRecordIterator.hasNext(), "Record set is too small");
-
-        SAMRecord record = samRecordIterator.next();
-
-        if (detach) {
-            samRecordIterator.next();
-        }
-
-        return record;
-    }
-
-    private void checkSAMRecord(SAMRecord record, int flags, String readName, String bases, String quals,
-                                int refStart, String cigar, String refName, int mapQ, boolean hasMate,
-                                boolean isSecondOfPair, boolean isSecondaryAlignment) {
-
-        Assert.assertNotNull(record, "Record with read id: " + readName + " was not found by span created from index");
-
-        List<SAMValidationError> validationErrors = record.isValid();
-        Assert.assertNull(validationErrors, "SRA Lazy record is invalid. List of errors: " +
-                (validationErrors != null ? validationErrors.toString() : ""));
-
-        Assert.assertEquals(record.getReadName(), readName);
-        Assert.assertEquals(new String(record.getReadBases()), bases);
-        Assert.assertEquals(record.getBaseQualityString(), quals);
-        Assert.assertEquals(record.getReadPairedFlag(), hasMate);
-        Assert.assertEquals(record.getFlags(), flags);
-        Assert.assertEquals(record.getNotPrimaryAlignmentFlag(), isSecondaryAlignment);
-        if (hasMate) {
-            Assert.assertEquals(record.getSecondOfPairFlag(), isSecondOfPair);
-        }
-        if (refStart == -1) {
-            Assert.assertEquals(record.getReadUnmappedFlag(), true);
-            Assert.assertEquals(record.getAlignmentStart(), 0);
-            Assert.assertEquals(record.getCigarString(), "*");
-            Assert.assertEquals(record.getReferenceName(), "*");
-            Assert.assertEquals(record.getMappingQuality(), 0);
-        } else {
-            Assert.assertEquals(record.getReadUnmappedFlag(), false);
-            Assert.assertEquals(record.getAlignmentStart(), refStart);
-            Assert.assertEquals(record.getCigarString(), cigar);
-            Assert.assertEquals(record.getReferenceName(), refName);
-            Assert.assertEquals(record.getMappingQuality(), mapQ);
-        }
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/AbstractLocusInfoTest.java b/src/test/java/htsjdk/samtools/util/AbstractLocusInfoTest.java
deleted file mode 100644
index a21c743..0000000
--- a/src/test/java/htsjdk/samtools/util/AbstractLocusInfoTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMSequenceRecord;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-
-public class AbstractLocusInfoTest {
-    private final byte[] qualities = {30, 50, 50, 60, 60, 70, 70, 70, 80, 90, 30, 50, 50, 60, 60, 70, 70, 70, 80, 90};
-    private byte[] bases = {'A', 'C', 'G', 'T', 'A', 'C', 'G', 'T', 'T', 'C', 'A', 'C', 'G', 'T', 'A', 'C', 'G', 'T', 'T', 'C'};
-    private EdgingRecordAndOffset typedRecordAndOffset;
-    private EdgingRecordAndOffset typedRecordAndOffsetEnd;
-    private SAMSequenceRecord sequence = new SAMSequenceRecord("chrM", 100);
-
-    @BeforeTest
-    public void setUp() {
-        SAMRecord record = new SAMRecord(new SAMFileHeader());
-        record.setReadName("testRecord");
-        record.setReadBases(bases);
-        record.setBaseQualities(qualities);
-        typedRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 10, 10, 10);
-        typedRecordAndOffsetEnd = EdgingRecordAndOffset.createEndRecord(typedRecordAndOffset);
-    }
-
-    @Test
-    public void testConstructor() {
-        AbstractLocusInfo<EdgingRecordAndOffset> info = new AbstractLocusInfo<>(sequence, 1);
-        assertEquals("chrM", info.getSequenceName());
-        assertEquals(0, info.getRecordAndOffsets().size());
-        assertEquals(100, info.getSequenceLength());
-        assertEquals(1, info.getPosition());
-    }
-
-    @Test
-    public void testAdd() {
-        AbstractLocusInfo<EdgingRecordAndOffset> info = new AbstractLocusInfo<>(sequence, 10);
-        info.add(typedRecordAndOffset);
-        info.add(typedRecordAndOffsetEnd);
-        assertEquals(2, info.getRecordAndOffsets().size());
-        assertEquals(typedRecordAndOffset, info.getRecordAndOffsets().get(0));
-        assertEquals(typedRecordAndOffsetEnd, info.getRecordAndOffsets().get(1));
-        assertEquals(10, info.getPosition());
-        assertEquals('A', info.getRecordAndOffsets().get(0).getReadBase());
-        assertEquals('A', info.getRecordAndOffsets().get(1).getReadBase());
-        assertEquals(30, info.getRecordAndOffsets().get(0).getBaseQuality());
-        assertEquals(30, info.getRecordAndOffsets().get(1).getBaseQuality());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/AbstractLocusIteratorTestTemplate.java b/src/test/java/htsjdk/samtools/util/AbstractLocusIteratorTestTemplate.java
deleted file mode 100644
index 0c08436..0000000
--- a/src/test/java/htsjdk/samtools/util/AbstractLocusIteratorTestTemplate.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-
-/**
- * Common template for testing classes, that extend AbstractLocusIterator.
- * 
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- * 
- */
-public abstract class AbstractLocusIteratorTestTemplate {
-
-    /** Coverage for tests with the same reads */
-    final static int coverage = 2;
-
-    /** the read length for the tests */
-    final static int readLength = 36;
-
-    final static SAMFileHeader header = new SAMFileHeader();
-
-    static {
-        header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
-        SAMSequenceDictionary dict = new SAMSequenceDictionary();
-        dict.addSequence(new SAMSequenceRecord("chrM", 100000));
-        header.setSequenceDictionary(dict);
-    }
-
-    /** Get the record builder for the tests with the default parameters that are needed */
-    static SAMRecordSetBuilder getRecordBuilder() {
-        final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-        builder.setHeader(header);
-        builder.setReadLength(readLength);
-        return builder;
-    }
-
-    public abstract void testBasicIterator();
-    public abstract void testEmitUncoveredLoci();
-    public abstract void testSimpleGappedAlignment();
-    public abstract void testOverlappingGappedAlignmentsWithoutIndels();
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/util/AbstractRecordAndOffsetTest.java b/src/test/java/htsjdk/samtools/util/AbstractRecordAndOffsetTest.java
deleted file mode 100644
index 568c84c..0000000
--- a/src/test/java/htsjdk/samtools/util/AbstractRecordAndOffsetTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-/**
- * 
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- *
- */
-
-public class AbstractRecordAndOffsetTest {
-
-    private final byte[] qualities = {30, 40, 50, 60, 70, 80 ,90, 70, 80, 90};
-    private byte[] bases = {'A', 'C', 'G', 'T', 'A', 'C', 'G', 'T', 'T', 'C'};
-    SAMRecord record;
-
-    @BeforeTest
-    public void setUp(){
-        record = new SAMRecord(new SAMFileHeader());
-        record.setReadName("testRecord");
-        record.setReadBases(bases);
-        record.setBaseQualities(qualities);
-    }
-
-    @Test
-    public void testConstructor(){
-        AbstractRecordAndOffset abstractRecordAndOffset = new AbstractRecordAndOffset(record, 0, 10, 3);
-        assertArrayEquals(qualities, abstractRecordAndOffset.getBaseQualities());
-        assertArrayEquals(bases, abstractRecordAndOffset.getRecord().getReadBases());
-        assertEquals('A', abstractRecordAndOffset.getReadBase());
-        assertEquals(30, abstractRecordAndOffset.getBaseQuality());
-        assertEquals(0, abstractRecordAndOffset.getOffset());
-        assertEquals(-1, abstractRecordAndOffset.getRefPos());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/AsyncBufferedIteratorTest.java b/src/test/java/htsjdk/samtools/util/AsyncBufferedIteratorTest.java
deleted file mode 100644
index 817c60e..0000000
--- a/src/test/java/htsjdk/samtools/util/AsyncBufferedIteratorTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Daniel Cameron
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class AsyncBufferedIteratorTest {
-    private static class TestCloseableIterator implements CloseableIterator<Integer> {
-        private int[] results;
-        private volatile int offset = 0;
-        public volatile boolean isClosed = false;
-        public TestCloseableIterator(int[] results) {
-            this.results = results;
-        }
-        @Override
-        public void close() {
-            isClosed = true;
-        }
-        @Override
-        public boolean hasNext() {
-            return offset < results.length;
-        }
-        @Override
-        public Integer next() {
-            return results[offset++];
-        }
-        public int consumed() {
-            return offset;
-        }
-    }
-    @Test
-    public void testWrapUnderlying() {
-        AsyncBufferedIterator<Integer> abi = new AsyncBufferedIterator<Integer>(new TestCloseableIterator(new int[] { 0, 1, 2, 3}), 1, 1);
-        for (int i = 0; i < 4; i++) {
-            Assert.assertEquals(i, (int)abi.next());
-        }
-        abi.close();
-    }
-    @Test
-    public void testClose() {
-        TestCloseableIterator tci = new TestCloseableIterator(new int[] { 0, 1, 2, 3});
-        AsyncBufferedIterator<Integer> abi = new AsyncBufferedIterator<Integer>(tci, 1, 1);
-        abi.close();
-        Assert.assertTrue(tci.isClosed);
-    }
-    /**
-     * Background thread should block when buffers are full
-     */
-    @Test
-    public void testBackgroundBlocks() throws InterruptedException {
-        TestCloseableIterator it = new TestCloseableIterator(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
-        AsyncBufferedIterator<Integer> abi = new AsyncBufferedIterator<Integer>(it, 3, 2, "testBackgroundBlocks");
-        Assert.assertNotNull(getThreadWithName("testBackgroundBlocks"));
-        Thread.sleep(10); // how do we write this test and not be subject to race conditions?
-        // should have read 9 records: 2*3 in the buffers, and another 3 read but
-        // blocking waiting to be added 
-        Assert.assertEquals(it.consumed(), 9);
-        abi.close();
-    }
-    @Test
-    public void testBackgroundThreadCompletes() throws InterruptedException {
-        TestCloseableIterator it = new TestCloseableIterator(new int[] { 0, 1, 2, 3, 4, 5 });
-        AsyncBufferedIterator<Integer> abi = new AsyncBufferedIterator<Integer>(it, 3, 2, "testBackgroundThreadCompletes");
-        Assert.assertNotNull(getThreadWithName("testBackgroundThreadCompletes"));
-        // both buffers should be full
-        // clear out one buffer so the background thread can write the end of stream indicator
-        // and complete
-        abi.next();
-        
-        // how do we write this test and not be subject to a race condition
-        // since we're waiting for a background thread we have no access?
-        Thread t;
-        for (int i = 0; i < 64; i++) {
-            Thread.sleep(1);
-            t = getThreadWithName("testBackgroundThreadCompletes");
-            if (t == null || !t.isAlive()) break;
-        }
-        t = getThreadWithName("testBackgroundThreadCompletes");
-        Assert.assertTrue(t == null || !t.isAlive());
-        abi.close();
-    }
-    private static Thread getThreadWithName(String name) {
-        Thread[] allthreads = new Thread[Thread.activeCount() + 16];
-        int threadCount = Thread.enumerate(allthreads);
-        for (int i = 0; i < threadCount; i++) {
-            String threadName = allthreads[i].getName(); 
-            if (name.equals(threadName)) {
-                return allthreads[i];
-            }
-        }
-        return null;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/AsyncWriterTest.java b/src/test/java/htsjdk/samtools/util/AsyncWriterTest.java
deleted file mode 100644
index c807cef..0000000
--- a/src/test/java/htsjdk/samtools/util/AsyncWriterTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Len Trigg
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class AsyncWriterTest {
-    private static class MyException extends RuntimeException {
-        final Integer item;
-        public MyException(Integer item) {
-            this.item = item;
-        }
-    }
-    private static class TestAsyncWriter extends AbstractAsyncWriter<Integer> {
-        protected TestAsyncWriter() {
-            super(1); // Queue size of 1 to give us more control over the order of events
-        }
-
-        @Override
-        protected String getThreadNamePrefix() {
-            return "TestAsyncWriter";
-        }
-
-        @Override
-        protected void synchronouslyWrite(Integer item) {
-            throw new MyException(item);
-        }
-
-        @Override
-        protected void synchronouslyClose() {
-            // Nothing
-        }
-    }
-    @Test
-    public void testNoSelfSuppression() {
-        try (TestAsyncWriter t = new TestAsyncWriter()) {
-            try {
-                t.write(1); // Will trigger exception in writing thread
-                t.write(2); // Will block if the above write has not been executed, but may not trigger checkAndRethrow()
-                t.write(3); // Will trigger checkAndRethrow() if not already done by the above write
-                Assert.fail("Expected exception");
-            } catch (MyException e) {
-                // Pre-bug fix, this was a "Self-suppression not permitted" exception from Java, rather than MyException
-                Assert.assertEquals(1, e.item.intValue());
-            }
-            // Verify that attempts to write after exception will fail
-            try {
-                t.write(4);
-                Assert.fail("Expected exception");
-            } catch (RuntimeIOException e) {
-                // Expected
-            }
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/BinaryCodecTest.java b/src/test/java/htsjdk/samtools/util/BinaryCodecTest.java
deleted file mode 100644
index 91e1147..0000000
--- a/src/test/java/htsjdk/samtools/util/BinaryCodecTest.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-
-/*
-  * The Broad Institute
-  * SOFTWARE COPYRIGHT NOTICE AGREEMENT
-  * This software and its documentation are copyright Jan 9, 2009 by the
-  * Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
-  *
-  * This software is supplied without any warranty or guaranteed support whatsoever. Neither
-  * the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
-  */
-
-public class BinaryCodecTest {
-	public final static String TEST_BASENAME = "htsjdk-BinaryCodecTest";
-
-    @Test
-    public void testReadAndWrite() throws IOException {
-        final byte[] value = new byte[2];
-        value[0] = 1;
-        value[1] = 2;
-        //Writing to file
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeBytes(value);
-        codec.close();
-
-        //Reading from file
-        final byte[] valuesTwo = new byte[2];
-        valuesTwo[0] = 1;
-        valuesTwo[1] = 2;
-
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        final byte[] bytesFromBinaryFile = new byte[2];
-        readCodec.readBytes(bytesFromBinaryFile);
-        Assert.assertEquals(valuesTwo, bytesFromBinaryFile);
-        readCodec.close();
-        outputFile.delete();
-    }
-
-    @Test
-    public void testReadAndWriteString() throws IOException {
-        final String value = "Test String to Write";
-
-        //Writing to file
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeString(value, true, false);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        final int stringLength = readCodec.readInt();
-        Assert.assertEquals(value.length(), stringLength);
-        final String s = readCodec.readString(stringLength);
-        Assert.assertEquals(value, s);
-        readCodec.close();
-    }
-
-    @Test
-    public void testReadAndWriteInt() throws IOException {
-        final int value = 42;
-
-        //Writing to file
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeInt(value);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        Assert.assertEquals(value, readCodec.readInt());
-        readCodec.close();
-    }
-
-    @Test
-    public void testReadAndWriteDouble() throws IOException {
-        final double value = 54.4;
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeDouble(value);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        Assert.assertEquals(value, readCodec.readDouble());
-        readCodec.close();
-    }
-
-    @Test
-    public void testReadAndWriteLong() throws IOException {
-        final long value = 42;
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeLong(value);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        Assert.assertEquals(value, readCodec.readLong());
-        readCodec.close();
-
-    }
-
-    @Test
-    public void testReadAndWriteFloat()  throws IOException{
-        final float value = 42.5F;
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeFloat(value);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        Assert.assertEquals(value, readCodec.readFloat());
-        readCodec.close();
-    }
-
-    @Test
-    public void testReadAndWriteBoolean()  throws IOException{
-
-        boolean values[] = {true, false};
-
-        for (boolean value : values) {
-            final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-            outputFile.deleteOnExit();
-            final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-            final BinaryCodec codec = new BinaryCodec(stream);
-            codec.writeBoolean(value);
-            codec.close();
-
-            //Reading from file
-            final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-            final BinaryCodec readCodec = new BinaryCodec(instream);
-            Assert.assertEquals(value, readCodec.readBoolean());
-            readCodec.close();
-        }
-    }
-
-    @Test
-    public void testReadAndWriteMutlitpleData()  throws IOException{
-        final float fValue = 42.5F;
-        final String sValue = "TestString";
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        codec.writeFloat(fValue);
-        codec.writeString(sValue, true, false);
-        codec.close();
-
-        //Reading from file
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-        Assert.assertEquals(fValue, readCodec.readFloat());
-        final int stringLength = readCodec.readInt();
-        Assert.assertEquals(sValue, readCodec.readString(stringLength));
-        readCodec.close();
-    }
-
-    @Test
-    public void readPastEndOfFile() throws IOException{
-        final long startTime = System.currentTimeMillis();
-        int i = 0;
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        while (i<100){
-            codec.writeInt(i);
-            i++;
-        }
-        codec.close();
-
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-
-        System.out.println((System.currentTimeMillis() - startTime) + "ms to write");
-        int z = 0;
-        boolean reachedStatement = false;
-        while (z<1000) {
-            try {
-                Assert.assertEquals(z, readCodec.readInt());
-            } catch (Exception e) {
-               Assert.assertEquals(RuntimeEOFException.class, e.getClass());
-                reachedStatement = true;
-            }
-            z++;
-        }
-
-        Assert.assertTrue(reachedStatement);
-        readCodec.close();
-    }
-
-    @Test
-    public void timeTest() throws IOException{
-        final long startTime = System.currentTimeMillis();
-        int i = 0;
-
-        final File outputFile = File.createTempFile(TEST_BASENAME, ".bin");
-        outputFile.deleteOnExit();
-        final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
-        final BinaryCodec codec = new BinaryCodec(stream);
-        while (i<100){
-            codec.writeInt(i);
-            i++;
-        }
-        codec.close();
-
-        final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
-        final BinaryCodec readCodec = new BinaryCodec(instream);
-
-        System.out.println((System.currentTimeMillis() - startTime) + "ms to write");
-        int z = 0;
-        boolean reachedStatement = false;
-        while (z<1000) {
-            try {
-                Assert.assertEquals(z, readCodec.readInt());
-            } catch (Exception e) {
-               Assert.assertEquals(RuntimeEOFException.class, e.getClass());
-                reachedStatement = true;
-            }
-            z++;
-        }
-
-        Assert.assertTrue(reachedStatement);
-        readCodec.close();
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/BlockCompressedFilePointerUtilTest.java b/src/test/java/htsjdk/samtools/util/BlockCompressedFilePointerUtilTest.java
deleted file mode 100644
index 850b4bf..0000000
--- a/src/test/java/htsjdk/samtools/util/BlockCompressedFilePointerUtilTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class BlockCompressedFilePointerUtilTest
-{
-    @Test
-    public void basicTest() 
-    {
-        List<Long> pointers = new ArrayList<Long>();
-        pointers.add(makeFilePointer(0, 0));
-        pointers.add(makeFilePointer(0, BlockCompressedFilePointerUtil.MAX_OFFSET));
-        final long BIG_BLOCK_ADDRESS = 1L << 46;
-        pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS-1, 0));
-        pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS-1, BlockCompressedFilePointerUtil.MAX_OFFSET));
-        pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS, 0));
-        pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS, BlockCompressedFilePointerUtil.MAX_OFFSET));
-        pointers.add(makeFilePointer(BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS, 0));
-        pointers.add(makeFilePointer(BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS, BlockCompressedFilePointerUtil.MAX_OFFSET));
-        for (int i = 0; i < pointers.size() - 1; ++i) {
-            for (int j = i+1; j < pointers.size(); ++j) {
-                Assert.assertTrue(BlockCompressedFilePointerUtil.compare(pointers.get(i), pointers.get(j)) < 0,
-                        BlockCompressedFilePointerUtil.asString(pointers.get(i)) + " should be < " +
-                                BlockCompressedFilePointerUtil.asString(pointers.get(j)));
-                Assert.assertTrue(BlockCompressedFilePointerUtil.compare(pointers.get(j), pointers.get(i)) > 0,
-                        BlockCompressedFilePointerUtil.asString(pointers.get(j)) + " should be > " +
-                                BlockCompressedFilePointerUtil.asString(pointers.get(i)));
-            }
-        }
-        
-    }
-
-    /**
-     * Create the virtual file pointer, and also assert that is can be converted back into the input parameters.
-     * @param blockAddress
-     * @param blockOffset
-     * @return block compressed file pointer
-     */
-    private long makeFilePointer(long blockAddress, int blockOffset)
-    {
-        final long ret = BlockCompressedFilePointerUtil.makeFilePointer(blockAddress, blockOffset);
-        Assert.assertEquals(BlockCompressedFilePointerUtil.getBlockAddress(ret), blockAddress);
-        Assert.assertEquals(BlockCompressedFilePointerUtil.getBlockOffset(ret), blockOffset);
-        Assert.assertEquals(BlockCompressedFilePointerUtil.compare(ret, ret), 0);
-        return ret;
-    }
-
-    @Test(dataProvider = "badInputs", expectedExceptions = IllegalArgumentException.class)
-    public void negativeTests(long blockAddress, int blockOffset) {
-        BlockCompressedFilePointerUtil.makeFilePointer(blockAddress, blockOffset);
-        Assert.assertFalse(true, "Should not get here.");
-    }
-
-    @DataProvider(name="badInputs")
-    public Object[][]  badInputs() {
-        return new Object[][]{
-                {-1L, 0},
-                {0L, -1},
-                {BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS+1, 0},
-                {0L, BlockCompressedFilePointerUtil.MAX_OFFSET+1}
-        };
-    }
-}
-
-/******************************************************************/
-/**************************[END OF BlockCompressedFilePointerUtilTest.java]*************************/
-/******************************************************************/
diff --git a/src/test/java/htsjdk/samtools/util/BlockCompressedOutputStreamTest.java b/src/test/java/htsjdk/samtools/util/BlockCompressedOutputStreamTest.java
deleted file mode 100644
index 8a0d97f..0000000
--- a/src/test/java/htsjdk/samtools/util/BlockCompressedOutputStreamTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.FileTruncatedException;
-import htsjdk.samtools.util.zip.DeflaterFactory;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.zip.Deflater;
-
-public class BlockCompressedOutputStreamTest {
-
-    private static final String HTSJDK_TRIBBLE_RESOURCES = "src/test/resources/htsjdk/tribble/";
-
-    @Test
-    public void testBasic() throws Exception {
-        final File f = File.createTempFile("BCOST.", ".gz");
-        f.deleteOnExit();
-        final List<String> linesWritten = new ArrayList<>();
-        System.out.println("Creating file " + f);
-        final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream(f);
-        String s = "Hi, Mom!\n";
-        bcos.write(s.getBytes());
-        linesWritten.add(s);
-        s = "Hi, Dad!\n";
-        bcos.write(s.getBytes());
-        linesWritten.add(s);
-        bcos.flush();
-        final StringBuilder sb = new StringBuilder(BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE * 2);
-        s = "1234567890123456789012345678901234567890123456789012345678901234567890\n";
-        while (sb.length() <= BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE) {
-            sb.append(s);
-            linesWritten.add(s);
-        }
-        bcos.write(sb.toString().getBytes());
-        bcos.close();
-        final BlockCompressedInputStream bcis = new BlockCompressedInputStream(f);
-        final BufferedReader reader = new BufferedReader(new InputStreamReader(bcis));
-        String line;
-        for(int i = 0; (line = reader.readLine()) != null; ++i) {
-            Assert.assertEquals(line + "\n", linesWritten.get(i));
-        }
-        bcis.close();
-        final BlockCompressedInputStream bcis2 = new BlockCompressedInputStream(f);
-        int available = bcis2.available();
-        Assert.assertFalse(bcis2.endOfBlock(), "Should not be at end of block");
-        Assert.assertTrue(available > 0);
-        byte[] buffer = new byte[available];
-        Assert.assertEquals(bcis2.read(buffer), available, "Should read to end of block");
-        Assert.assertTrue(bcis2.endOfBlock(), "Should be at end of block");
-        bcis2.close();
-    }
-
-    @DataProvider(name = "seekReadExceptionsData")
-    private Object[][] seekReadExceptionsData()
-    {
-        return new Object[][]{
-                {HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.truncated.gz", FileTruncatedException.class,
-                        BlockCompressedInputStream.PREMATURE_END_MSG + System.getProperty("user.dir") + "/" +
-                                HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.truncated.gz", true, false, 0},
-                {HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.truncated.hdr.gz", IOException.class,
-                        BlockCompressedInputStream.INCORRECT_HEADER_SIZE_MSG + System.getProperty("user.dir") + "/" +
-                                HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.truncated.hdr.gz", true, false, 0},
-                {HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.gz", IOException.class,
-                        BlockCompressedInputStream.CANNOT_SEEK_STREAM_MSG, false, true, 0},
-                {HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.gz", IOException.class,
-                        BlockCompressedInputStream.INVALID_FILE_PTR_MSG + 1000 + " for " + System.getProperty("user.dir") + "/" +
-                                HTSJDK_TRIBBLE_RESOURCES + "vcfexample.vcf.gz", true, true, 1000 }
-        };
-    }
-
-    @Test(dataProvider = "seekReadExceptionsData")
-    public void testSeekReadExceptions(final String filePath, final Class c, final String msg, final boolean isFile, final boolean isSeek, final int pos) throws Exception {
-
-        final BlockCompressedInputStream bcis = isFile ?
-                new BlockCompressedInputStream(new File(filePath)) :
-                new BlockCompressedInputStream(new FileInputStream(filePath));
-        boolean haveException = false;
-        try {
-            if ( isSeek ) {
-                bcis.seek(pos);
-            } else {
-                final BufferedReader reader = new BufferedReader(new InputStreamReader(bcis));
-                reader.readLine();
-            }
-        } catch (final Exception e) {
-            if ( e.getClass().equals(c) ) {
-                haveException = true;
-                Assert.assertEquals(e.getMessage(), msg);
-            }
-        }
-
-        if ( !haveException ) {
-            Assert.fail("Expected " + c.getSimpleName());
-        }
-    }
-
-    @Test public void testOverflow() throws Exception {
-        final File f = File.createTempFile("BCOST.", ".gz");
-        f.deleteOnExit();
-        final List<String> linesWritten = new ArrayList<>();
-        System.out.println("Creating file " + f);
-        final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream(f);
-        Random r = new Random(15555);
-        final int INPUT_SIZE = 64 * 1024;
-        byte[] input = new byte[INPUT_SIZE];
-        r.nextBytes(input);
-        bcos.write(input);
-        bcos.close();
-
-        final BlockCompressedInputStream bcis = new BlockCompressedInputStream(f);
-        byte[] output = new byte[INPUT_SIZE];
-        int len;
-        int i = 0;
-        while ((len = bcis.read(output, 0, output.length)) != -1) {
-            for (int j = 0; j < len; j++) {
-               Assert.assertEquals(output[j], input[i++]);
-            }
-        }
-        Assert.assertEquals(i, INPUT_SIZE);
-        bcis.close();
-    }
-
-    // PIC-393 exception closing BGZF stream opened to /dev/null
-    // I don't think this will work on Windows, because /dev/null doesn't work
-    @Test(groups = "broken")
-    public void testDevNull() throws Exception {
-        final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream("/dev/null");
-        bcos.write("Hi, Mom!".getBytes());
-        bcos.close();
-    }
-
-    @Test
-    public void testCustomDeflater() throws Exception {
-        final File f = File.createTempFile("testCustomDeflater.", ".gz");
-        f.deleteOnExit();
-        System.out.println("Creating file " + f);
-
-        final int[] deflateCalls = {0}; //Note: using and array is a HACK to fool the compiler
-
-        class MyDeflater extends Deflater{
-            MyDeflater(int level, boolean nowrap){
-                super(level, nowrap);
-            }
-            @Override
-            public int deflate(byte[] b, int off, int len) {
-                deflateCalls[0]++;
-                return super.deflate(b, off, len);
-            }
-
-        }
-        final DeflaterFactory myDeflaterFactory= new DeflaterFactory(){
-            public Deflater makeDeflater(final int compressionLevel, final boolean nowrap) {
-                return new MyDeflater(compressionLevel, nowrap);
-            }
-        };
-        final List<String> linesWritten = new ArrayList<>();
-        final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream(f, 5, myDeflaterFactory);
-        String s = "Hi, Mom!\n";
-        bcos.write(s.getBytes()); //Call 1
-        linesWritten.add(s);
-        s = "Hi, Dad!\n";
-        bcos.write(s.getBytes()); //Call 2
-        linesWritten.add(s);
-        bcos.flush();
-        final StringBuilder sb = new StringBuilder(BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE * 2);
-        s = "1234567890123456789012345678901234567890123456789012345678901234567890\n";
-        while (sb.length() <= BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE) {
-            sb.append(s);
-            linesWritten.add(s);
-        }
-        bcos.write(sb.toString().getBytes()); //Call 3
-        bcos.close();
-        final BlockCompressedInputStream bcis = new BlockCompressedInputStream(f);
-        final BufferedReader reader = new BufferedReader(new InputStreamReader(bcis));
-        String line;
-        for(int i = 0; (line = reader.readLine()) != null; ++i) {
-            Assert.assertEquals(line + "\n", linesWritten.get(i));
-        }
-        bcis.close();
-        Assert.assertEquals(deflateCalls[0], 3, "deflate calls");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/BlockCompressedTerminatorTest.java b/src/test/java/htsjdk/samtools/util/BlockCompressedTerminatorTest.java
deleted file mode 100644
index 5b58372..0000000
--- a/src/test/java/htsjdk/samtools/util/BlockCompressedTerminatorTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class BlockCompressedTerminatorTest {
-    private static final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/util");
-
-    @Test
-    public void testFileWithTerminator() throws Exception {
-        final File tmpCompressedFile = File.createTempFile("test.", ".bgzf");
-        tmpCompressedFile.deleteOnExit();
-        final BlockCompressedOutputStream os = new BlockCompressedOutputStream(tmpCompressedFile);
-        os.write("Hi, Mom!\n".getBytes());
-        os.close();
-        Assert.assertEquals(BlockCompressedInputStream.checkTermination(tmpCompressedFile),
-                BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK);
-    }
-
-    @Test
-    public void testValidFileWithoutTerminator() throws Exception {
-        Assert.assertEquals(BlockCompressedInputStream.checkTermination(new File(TEST_DATA_DIR, "no_bgzf_terminator.bam")),
-                BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK);
-    }
-
-    @Test
-    public void testDefectiveFile() throws Exception {
-        Assert.assertEquals(BlockCompressedInputStream.checkTermination(new File(TEST_DATA_DIR, "defective_bgzf.bam")),
-                BlockCompressedInputStream.FileTermination.DEFECTIVE);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/CigarUtilTest.java b/src/test/java/htsjdk/samtools/util/CigarUtilTest.java
deleted file mode 100644
index 0aca395..0000000
--- a/src/test/java/htsjdk/samtools/util/CigarUtilTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.Cigar;
-import htsjdk.samtools.CigarElement;
-import htsjdk.samtools.TextCigarCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Basic positive tests for testing cigar string clipping
- *
- * @author Martha Borkan  mborkan at broadinstitute.org
- */
-public class CigarUtilTest {
-
-   @Test(dataProvider="clipData")
-    public void basicTest(final String testName, final int start, final String inputCigar, final boolean negativeStrand,
-                          final int clipPosition,
-                          final String expectedCigar, final int expectedAdjustedStart) throws IOException {
-      List<CigarElement> cigar =  TextCigarCodec.decode(inputCigar).getCigarElements();
-      if (negativeStrand){
-          List<CigarElement> copiedList = new ArrayList<CigarElement>(cigar);
-          Collections.reverse(copiedList);
-          cigar = copiedList;
-      }
-      List<CigarElement> result = CigarUtil.softClipEndOfRead(clipPosition, cigar);
-       Cigar newCigar = new Cigar(result);
-       Cigar oldCigar = new Cigar(cigar);
-       if (negativeStrand){
-           Collections.reverse(result);
-           newCigar = new Cigar(result);
-           int oldLength = oldCigar.getReferenceLength();
-           int newLength = newCigar.getReferenceLength();
-           int sizeChange = oldLength - newLength;
-           //Assert.assertEquals(sizeChange, numClippedBases + adjustment, testName + " sizeChange == numClippedBases");
-           Assert.assertEquals(start + sizeChange, expectedAdjustedStart, sizeChange + " " +  testName);
-           Assert.assertTrue(sizeChange >= 0, "sizeChange >= 0. " + sizeChange);
-      }
-       Assert.assertEquals (TextCigarCodec.encode(newCigar), expectedCigar, testName);
-       Assert.assertEquals(newCigar.getReadLength(), oldCigar.getReadLength());
-       Assert.assertNull(newCigar.isValid(testName, -1));
-    }
-
-    @DataProvider(name = "clipData")
-    private Object[][] getCigarClippingTestData() {
-        // numClippedBases = (readLength - clipPosition) +1
-        return new Object[][]{
-            {"Test 1:simple + strand", 100, "50M", false, 43, "42M8S", 100},
-            {"Test 1s:+ strand already clipped", 100, "42M8S", false, 43, "42M8S", 100},
-            {"Test 2:simple - strand", 100, "50M", true, 41, "10S40M", 110},
-            {"Test 3:boundary + strand", 100, "42M3D8M", false, 43, "42M8S", 100},
-            {"Test 3s:boundary + strand", 100, "42M3D8S", false, 43, "42M8S", 100},
-            {"Test 3x:stutter + strand", 100, "42M2D1D8M", false, 43, "42M8S", 100},
-            {"Test 3y:stutter + strand", 100, "42M1D2D8M", false, 43, "42M8S", 100},
-            {"Test 3a:boundary + strand", 100, "42M1D8M", false, 43, "42M8S", 100},
-            {"Test 4:boundary - strand", 98, "10M2D40M", true, 41, "10S40M", 110},
-            {"Test 5:deletion + strand", 100, "44M1D6M", false, 43, "42M8S", 110},
-            {"Test 6:deletion - strand", 98, "6M2D44M", true, 41, "10S40M", 110},
-
-            {"Test 7:insertion + strand", 100, "42M3I5M", false, 43, "42M8S", 100},
-            {"Test 8:insertion - strand", 102, "8M2I40M", true, 41, "10S40M", 110},
-            {"Test 9:insertion within + strand", 100, "44M2I4M", false, 43, "42M8S", 100},
-            {"Test 9x:insertion stutter within + strand", 100, "44M2I2I2M", false, 43, "42M8S", 100},
-            {"Test 10:insertion within - strand", 100, "3M3I44M", true, 41, "10S40M", 107},
-            {"Test 11:insertion straddling + strand", 100, "40M4I6M", false, 43, "40M10S", 100},
-            {"Test 11s:insertion straddling + strand", 100, "40M4I6S", false, 43, "40M10S", 100},
-            {"Test 11a:insertion straddling + strand", 100, "40M2I8M", false, 43, "40M10S", 100},
-            {"Test 12:insertion straddling - strand", 104, "4M4I42M", true, 41, "10S40M", 110},
-            {"Test 12a:insertion straddling - strand", 102, "8M2I40M", true, 41, "10S40M", 110},
-
-            {"Test 13:deletion before clip + strand", 100, "10M5D35M", false, 38, "10M5D27M8S", 100},
-            {"Test 14:deletion before clip - strand", 100, "35M5D10M", true, 36, "10S25M5D10M", 110},
-            {"Test 15:insertion before clip + strand", 100, "10M5I35M", false, 43, "10M5I27M8S", 100},
-            {"Test 16:insertion before clip - strand", 100, "16M5I29M", true, 41, "10S6M5I29M", 110},
-
-            {"Test 17:second, earlier clip", 100, "48M2S", false, 43, "42M8S", 100},
-            {"Test 17s:second, earlier clip", 100, "2S48M", true, 43, "8S42M", 106},
-            {"Test 18:second, later clip", 100, "42M8S", false, 48, "42M8S", 100},
-            {"Test 18s:second, later clip", 100, "8S42M", true, 48, "8S42M", 100},
-        };
-    }
-
-    @Test(dataProvider="addData")
-     public void addingSoftClippedBasesTest(final String testName, final String cigar, final boolean negativeStrand,
-                           final int threePrimeEnd, final int fivePrimeEnd, final String expectedCigar) throws IOException {
-
-        Assert.assertEquals(CigarUtil.addSoftClippedBasesToEndsOfCigar(TextCigarCodec.decode(cigar), negativeStrand,
-                threePrimeEnd, fivePrimeEnd).toString(), expectedCigar, testName);
-     }
-
-     @DataProvider(name = "addData")
-     private Object[][] getCigarAddingTestData() {
-         // numClippedBases = (readLength - clipPosition) +1
-         return new Object[][]{
-                 {"Add to 5' end only, +", "36M", false, 0, 5, "5S36M"},
-                 {"Add to 5' end only, -", "30M1I5M", true, 0, 5, "30M1I5M5S"},
-                 {"Add to 3' end only, +", "26M", false, 3, 0, "26M3S"},
-                 {"Add to 3' end only, -", "19M3D7M", true, 3, 0, "3S19M3D7M"},
-                 {"Add to 5' end already soft-clipped, +", "6S20M", false, 0, 5, "11S20M"},
-                 {"Add to 5' end already soft-clipped, -", "28M4S", true, 0, 5, "28M9S"},
-                 {"Add to 3' end already soft-clipped, +", "15M5I10M2S", false, 7, 0, "15M5I10M9S"},
-                 {"Add to 3' end already soft-clipped, -", "2S34M", true, 6, 0, "8S34M"},
-                 {"Add to 5' and 3' ends, no merging, +", "36M", false, 15, 30, "30S36M15S"},
-                 {"Add to 5' and 3' ends, no merging, -", "36M", true, 15, 30, "15S36M30S"},
-                 {"Add to 5' and 3' ends, merging 5' end, +", "5S31M", false, 15, 30, "35S31M15S"},
-                 {"Add to 5' and 3' ends, merging 5' end, -", "31M5S", true, 15, 30, "15S31M35S"},
-                 {"Add to 5' and 3' ends, merging 3' end, +", "20M6S", false, 10, 12, "12S20M16S"},
-                 {"Add to 5' and 3' ends, merging 3' end, -", "6S25M", true, 10, 12, "16S25M12S"},
-                 {"Add to 5' and 3' ends, merging both ends, +", "3S31M2S", false, 10, 15, "18S31M12S"},
-                 {"Add to 5' and 3' ends, merging both ends, -", "2S26M8S", true, 10, 12, "12S26M20S"}
-         };
-     }
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/CloseableIteratorTest.java b/src/test/java/htsjdk/samtools/util/CloseableIteratorTest.java
deleted file mode 100644
index b96d1f6..0000000
--- a/src/test/java/htsjdk/samtools/util/CloseableIteratorTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-public class CloseableIteratorTest {
-    @Test
-    public void testToList() {
-        final List<Integer> expected = Arrays.asList(1,2,3,4,5);
-        final PeekableIterator<Integer> peeky = new PeekableIterator<>(expected.iterator());
-        final List<Integer> actual = peeky.toList();
-
-        Assert.assertEquals(actual, expected);
-        Assert.assertEquals(peeky.toList(), new ArrayList<>()); // Should be empty the second time
-    }
-
-    @Test
-    public void testToStream() {
-        final List<Integer> inputs = Arrays.asList(1,2,3,4,5);
-        final PeekableIterator<Integer> peeky = new PeekableIterator<>(inputs.iterator());
-        final List<Integer> expected = inputs.stream().map(i -> i*2).collect(Collectors.toList());
-        final List<Integer> actual   = peeky.stream().map(i -> i*2).collect(Collectors.toList());
-
-        Assert.assertEquals(actual, expected);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/CodeUtilTest.java b/src/test/java/htsjdk/samtools/util/CodeUtilTest.java
deleted file mode 100644
index e8b9957..0000000
--- a/src/test/java/htsjdk/samtools/util/CodeUtilTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class CodeUtilTest {
-
-    @Test
-    public void getOrElseTest() {
-        final String notNull = "Not null!";
-        Assert.assertEquals(CodeUtil.getOrElse(notNull, null), notNull);
-        Assert.assertEquals(CodeUtil.getOrElse(null, notNull), notNull);
-        Assert.assertEquals((Object) CodeUtil.getOrElse(null, null), (Object) null);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/ComparableTupleTest.java b/src/test/java/htsjdk/samtools/util/ComparableTupleTest.java
deleted file mode 100644
index 7e8b082..0000000
--- a/src/test/java/htsjdk/samtools/util/ComparableTupleTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.variant.variantcontext.Allele;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Created by farjoun on 1/28/16.
- */
-public class ComparableTupleTest {
-
-    private enum Tenum {
-        Hi,
-        Bye,
-        Ciao
-    }
-
-    private Allele A = Allele.create("A", false);
-    private Allele Aref = Allele.create("A", true);
-    private Allele G = Allele.create("G", false);
-
-    @DataProvider(name = "testComparableTupleData")
-    public Object[][] testComparableTupleData() {
-        return new Object[][]{
-                new Object[]{new ComparableTuple<>(1, 2), new ComparableTuple<>(1, 1), 2 - 1},
-                new Object[]{new ComparableTuple<>(1, 2), new ComparableTuple<>(2, 2), 1 - 2},
-                new Object[]{new ComparableTuple<>(1, 2), new ComparableTuple<>(1, 2), 0},
-
-                new Object[]{new ComparableTuple<>(1, "hi"), new ComparableTuple<>(1, "bye"), "hi".compareTo("bye")},
-                new Object[]{new ComparableTuple<>(1, "hi"), new ComparableTuple<>(2, "bye"), 1 - 2},
-                new Object[]{new ComparableTuple<>(1, "hi"), new ComparableTuple<>(1, "hi"), 0},
-
-                new Object[]{new ComparableTuple<>(A, Tenum.Hi), new ComparableTuple<>(Aref, Tenum.Bye), A.compareTo(Aref)},
-                new Object[]{new ComparableTuple<>(Aref, Tenum.Hi), new ComparableTuple<>(Aref, Tenum.Bye), Tenum.Hi.compareTo(Tenum.Bye)},
-                new Object[]{new ComparableTuple<>(Aref, Tenum.Hi), new ComparableTuple<>(Aref, Tenum.Hi), 0},
-                new Object[]{new ComparableTuple<>(Aref, Tenum.Hi), new ComparableTuple<>(G, Tenum.Ciao), Aref.compareTo(G)},
-                new Object[]{new ComparableTuple<>(A, Tenum.Ciao), new ComparableTuple<>(G, Tenum.Hi), A.compareTo(G)}
-        };
-    }
-
-    @Test(dataProvider = "testComparableTupleData")
-    public <T extends Comparable<T>, R extends Comparable<R>> void testComparableTuple(final ComparableTuple<T,R> lhs, final ComparableTuple<T,R> rhs, final int result) {
-        Assert.assertEquals(lhs.compareTo(rhs), result);
-    }
-
-
-    @DataProvider(name = "testComparableTupleNullData")
-    public Object[][] testComparableTupleNullData() {
-        return new Object[][]{
-                new Object[]{null, 2},
-                new Object[]{null, null},
-                new Object[]{"string", null}
-        };
-    }
-
-    @Test(dataProvider = "testComparableTupleNullData", expectedExceptions = IllegalArgumentException.class)
-    public void testComparableTupleNullData(String left, Integer right) {
-        new ComparableTuple<>(left, right);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/CoordSpanInputSteamTest.java b/src/test/java/htsjdk/samtools/util/CoordSpanInputSteamTest.java
deleted file mode 100644
index 1b90882..0000000
--- a/src/test/java/htsjdk/samtools/util/CoordSpanInputSteamTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.seekablestream.ByteArraySeekableStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * Created by vadim on 25/03/2015.
- */
-public class CoordSpanInputSteamTest {
-
-    @Test
-    public void test_first_3_bytes() throws IOException {
-        byte[] data = new byte[1024 * 1024];
-        new Random().nextBytes(data);
-
-        long[] coords = new long[]{0, 1, 1, 2, 2, 3};
-
-        CoordSpanInputSteam csis = new CoordSpanInputSteam(new ByteArraySeekableStream(data), coords);
-
-        Assert.assertEquals(csis.read(), 0xFF & data[0]);
-        Assert.assertEquals(csis.read(), 0xFF & data[1]);
-        Assert.assertEquals(csis.read(), 0xFF & data[2]);
-
-        Assert.assertEquals(csis.read(), -1);
-    }
-
-    @Test
-    public void test_3_ranges_byte_single_read() throws IOException {
-        byte[] data = new byte[1024 * 1024];
-        new Random().nextBytes(data);
-
-        long[] coords = new long[]{0, 100, 10, 20, 100, 200, data.length - 1, Long.MAX_VALUE};
-
-        CoordSpanInputSteam csis = new CoordSpanInputSteam(new ByteArraySeekableStream(data), coords);
-
-        for (int i = 0; i < coords.length; i += 2) {
-            for (int c = (int) coords[i]; c < coords[i + 1]; c++) {
-                int read = csis.read();
-                if (c >= data.length) {
-                    Assert.assertEquals(read, -1);
-                    break;
-                } else
-                    Assert.assertEquals(read, 0xFF & data[c], String.format("At %d: read=%d, data=%d\n", c, read, data[c]));
-            }
-        }
-    }
-
-    @Test
-    public void test_range_read() throws IOException {
-        byte[] data = new byte[1024 * 1024];
-        new Random().nextBytes(data);
-
-        long[] coords = new long[]{0, 100, 10, 20, 100, 200, data.length - 1, Long.MAX_VALUE};
-
-        CoordSpanInputSteam csis = new CoordSpanInputSteam(new ByteArraySeekableStream(data), coords);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        for (int i = 0; i < coords.length; i += 2) {
-            for (int c = (int) coords[i]; c < coords[i + 1]; c++) {
-                int read = csis.read();
-                if (read == -1) break;
-                baos.write(data[c]);
-            }
-        }
-        byte[] contiguous = baos.toByteArray();
-        ByteArrayInputStream bais = new ByteArrayInputStream(contiguous);
-        csis = new CoordSpanInputSteam(new ByteArraySeekableStream(data), coords);
-
-        byte[] buf1 = new byte[100];
-        byte[] buf2 = new byte[100];
-        DataInputStream dis1 = new DataInputStream(csis);
-        DataInputStream dis2 = new DataInputStream(bais);
-
-        Arrays.fill(buf1, (byte) 0);
-        Arrays.fill(buf2, (byte) 0);
-        dis1.readFully(buf1, 0, 10);
-        dis2.readFully(buf2, 0, 10);
-        Assert.assertEquals(buf1, buf2);
-
-        int len = 11;
-        while (true) {
-            try {
-                dis1.readFully(buf1, 0, len);
-            } catch (EOFException e) {
-                break;
-            }
-            dis2.readFully(buf2, 0, len);
-            Assert.assertEquals(buf1, buf2);
-        }
-        try {
-            dis2.readFully(buf2, 0, len);
-        } catch (EOFException e) {
-
-        }
-        Assert.assertEquals(dis1.read(), -1);
-        Assert.assertEquals(dis2.read(), -1);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/DiskBackedQueueTest.java b/src/test/java/htsjdk/samtools/util/DiskBackedQueueTest.java
deleted file mode 100644
index 88b05e2..0000000
--- a/src/test/java/htsjdk/samtools/util/DiskBackedQueueTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-
-public class DiskBackedQueueTest extends SortingCollectionTest {
-    @DataProvider(name = "diskBackedQueueProvider")
-    public Object[][] createDBQTestData() {
-        return new Object[][] {
-                {"empty", 0, 100},
-                {"singleton", 1, 100},
-                {"no ram records", 10, 0},
-                {"less than threshold", 100, 200},
-                {"threshold minus 1", 99, 100},
-                {"greater than threshold", 550, 100},
-                {"threshold multiple", 600, 100},
-                {"threshold multiple plus one", 101, 100},
-                {"exactly threshold", 100, 100},
-        };
-    }
-
-    @BeforeMethod void setup() { resetTmpDir(); }
-    @AfterMethod void tearDown() { resetTmpDir(); }
-
-    /**
-     * Generate some strings, put into SortingCollection, confirm that the right number of
-     * Strings come out, and in the right order.
-     * @param numStringsToGenerate
-     * @param maxRecordsInRam
-     */
-    @Test(dataProvider = "diskBackedQueueProvider")
-    public void testPositive(final String testName, final int numStringsToGenerate, final int maxRecordsInRam) {
-        final String[] strings = new String[numStringsToGenerate];
-        int numStringsGenerated = 0;
-        final DiskBackedQueue<String> diskBackedQueue = makeDiskBackedQueue(maxRecordsInRam);
-        for (final String s : new RandomStringGenerator(numStringsToGenerate)) {
-            diskBackedQueue.add(s);
-            strings[numStringsGenerated++] = s;
-        }
-        Assert.assertEquals(tmpDirIsEmpty(), numStringsToGenerate <= maxRecordsInRam);
-        assertQueueEqualsList(strings, diskBackedQueue);
-        Assert.assertEquals(diskBackedQueue.canAdd(), numStringsToGenerate <= maxRecordsInRam);
-        Assert.assertEquals(diskBackedQueue.size(), 0);
-        Assert.assertTrue(diskBackedQueue.isEmpty());
-        Assert.assertEquals(diskBackedQueue.poll(), null);
-        diskBackedQueue.clear();
-        Assert.assertTrue(diskBackedQueue.canAdd());
-    }
-
-    private void assertQueueEqualsList(final String[] strings, final DiskBackedQueue<String> diskBackedQueue) {
-        int i = 0;
-        while (!diskBackedQueue.isEmpty()) {
-            final String s = diskBackedQueue.poll();
-            Assert.assertEquals(s, strings[i]);
-            i++;
-        }
-        Assert.assertEquals(i, strings.length);
-    }
-
-    private DiskBackedQueue<String> makeDiskBackedQueue(final int maxRecordsInRam) {
-        return DiskBackedQueue.newInstance(new StringCodec(), maxRecordsInRam, Collections.singletonList(tmpDir()));
-    }
-
-    @Test
-    public void testReadOnlyQueueJustBeforeReadingFromDisk() {
-        final DiskBackedQueue<String> queue = makeDiskBackedQueue(2);
-        queue.add("foo");
-        queue.add("bar");
-        queue.add("baz");
-        Assert.assertEquals("foo", queue.poll());
-        Assert.assertEquals("bar", queue.poll());
-
-        // Spilled-to-disk records have not been read yet, but one has been loaded into headRecord, so the queue is
-        // closed for enqueue-ing.
-        Assert.assertFalse(queue.canAdd());
-        Assert.assertEquals("baz", queue.poll());
-
-        Assert.assertEquals(queue.size(), 0);
-        Assert.assertTrue(queue.isEmpty());
-        Assert.assertEquals(queue.poll(), null);
-        queue.clear();
-        Assert.assertTrue(queue.canAdd());
-    }
-
-    /** See: https://github.com/broadinstitute/picard/issues/327 */
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void testPathologyIssue327() {
-
-        final DiskBackedQueue<String> queue = makeDiskBackedQueue(2);
-
-        // testing a particular order of adding to the queue, setting the result state, and emitting.
-        queue.add("0");
-        queue.add("1");
-        queue.add("2"); // spills to disk
-        Assert.assertEquals(queue.poll(), "0"); // gets from ram, so now there is space in ram, but a record on disk
-        queue.add("3"); // adds, but we assumed we added all records before removing them
-        Assert.assertEquals(queue.poll(), "1");
-        Assert.assertEquals(queue.poll(), "2");
-        Assert.assertEquals(queue.poll(), "3");
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/EdgeReadIteratorTest.java b/src/test/java/htsjdk/samtools/util/EdgeReadIteratorTest.java
deleted file mode 100644
index a5459c6..0000000
--- a/src/test/java/htsjdk/samtools/util/EdgeReadIteratorTest.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecordSetBuilder;
-import htsjdk.samtools.SamReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.InputStreamReader;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests check that for each alignment block of processed reads, iterator returns a <code>EdgingRecordAndOffset</code>
- * with type <code>BEGIN</code> for the reference position of read start and a <code>EdgingRecordAndOffset</code> with
- * type <code>END</code> for the reference position + 1 of read end.
- */
-public class EdgeReadIteratorTest extends AbstractLocusIteratorTestTemplate {
-
-    @Override
-    @Test
-    public void testBasicIterator() {
-        final EdgeReadIterator sli = new EdgeReadIterator(createSamFileReader());
-        int pos = 1;
-        for (final AbstractLocusInfo<EdgingRecordAndOffset> li : sli) {
-            if (pos == 1 || pos == 37) {
-                assertEquals(pos++, li.getPosition());
-                assertEquals(2, li.getRecordAndOffsets().size());
-            } else {
-                assertEquals(pos++, li.getPosition());
-                assertEquals(0, li.getRecordAndOffsets().size());
-            }
-        }
-
-    }
-
-    /**
-     * Since EdgeReadIterator does not support emitting uncovered loci, this test just check that
-     * iterator return correctly aligned objects for start and end of a read.
-     */
-    @Override
-    @Test
-    public void testEmitUncoveredLoci() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", null, 10);
-        }
-        final int coveredEnd = CoordMath.getEnd(startPosition, readLength) +1;
-        final EdgeReadIterator sli = new EdgeReadIterator(builder.getSamReader());
-
-        int pos = 1;
-        final int coveredStart = 165;
-        for (final AbstractLocusInfo li : sli) {
-            Assert.assertEquals(li.getPosition(), pos++);
-            final int expectedReads;
-            if (li.getPosition() == coveredStart || li.getPosition() == coveredEnd) {
-                expectedReads = 2;
-            } else {
-                expectedReads = 0;
-            }
-            Assert.assertEquals(li.getRecordAndOffsets().size(), expectedReads);
-        }
-        Assert.assertEquals(pos, 100001);
-    }
-
-    /**
-     * Try all CIGAR operands (except H and P) and confirm that loci produced by SamLocusIterator are as expected.
-     */
-    @Override
-    @Test
-    public void testSimpleGappedAlignment() {final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "3S3M3N3M3D3M3I1N18M3S", null, 10);
-        }
-        final EdgeReadIterator sli = new EdgeReadIterator(builder.getSamReader());
-        while (sli.hasNext()) {
-            AbstractLocusInfo<EdgingRecordAndOffset> info = sli.next();
-            int pos = info.getPosition();
-            if (pos == startPosition || pos == startPosition + 6 || pos == startPosition + 12 || pos == startPosition + 16) {
-                assertEquals(EdgingRecordAndOffset.Type.BEGIN, info.getRecordAndOffsets().get(0).getType());
-                assertEquals(EdgingRecordAndOffset.Type.BEGIN, info.getRecordAndOffsets().get(1).getType());
-            } else if (pos == startPosition + 3 || pos == startPosition + 9 || pos == startPosition + 15 || pos == startPosition + 34) {
-                assertEquals(EdgingRecordAndOffset.Type.END, info.getRecordAndOffsets().get(0).getType());
-                assertEquals(EdgingRecordAndOffset.Type.END, info.getRecordAndOffsets().get(1).getType());
-            }
-        }
-    }
-
-    /**
-     * Test two reads that overlap because one has a deletion in the middle of it.
-     */
-    @Override
-    @Test
-    public void testOverlappingGappedAlignmentsWithoutIndels() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 1;
-        // Were it not for the gap, these two reads would not overlap
-
-        builder.addFrag("record1", 0, startPosition, true, false, "18M10D18M", null, 10);
-        builder.addFrag("record2", 0, 41, true, false, "36M", null, 10);
-
-        final EdgeReadIterator sli = new EdgeReadIterator(builder.getSamReader());
-        // 5 base overlap btw the two reads
-        final int numBasesCovered = 81;
-        final int[] expectedReferencePositions = new int[numBasesCovered];
-        final int[] expectedDepths = new int[numBasesCovered];
-        final int[][] expectedReadOffsets = new int[numBasesCovered][];
-        List<Integer> start = Arrays.asList(0, 28, 40);
-        List<Integer> end = Arrays.asList(19, 47, 77);
-
-        int i;
-        // First 18 bases are from the first read
-        expectedDepths[0] = 1;
-        expectedReferencePositions[0] = 1;
-        expectedReadOffsets[0] = new int[]{0};
-
-        for (i = 1; i < 18; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-        expectedDepths[i] = 1;
-        expectedReferencePositions[i] = 19;
-        expectedReadOffsets[i++] = new int[]{0};
-
-        for (; i < 28; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-
-        // Gap of 10, then 13 bases from the first read
-        expectedDepths[i] = 1;
-        expectedReferencePositions[i] = 29;
-        expectedReadOffsets[i++] = new int[]{18};
-
-        for (; i < 40; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-
-        expectedDepths[i] = 1;
-        expectedReferencePositions[i] = 41;
-        expectedReadOffsets[i++] = new int[]{0};
-
-        for (; i < 46; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-
-        expectedDepths[i] = 1;
-        expectedReferencePositions[i] = 47;
-        expectedReadOffsets[i++] = new int[]{18};
-
-        // Last 5 bases of first read overlap first 5 bases of second read
-        for (; i < 76; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-
-        expectedDepths[i] = 1;
-        expectedReferencePositions[i] = 77;
-        expectedReadOffsets[i++] = new int[]{0};
-
-        // Last 31 bases of 2nd read
-
-        for (; i <= 80; ++i) {
-            fillEmptyLocus(expectedReferencePositions, expectedDepths, expectedReadOffsets, i);
-        }
-
-        i = 0;
-        for (final AbstractLocusInfo<EdgingRecordAndOffset> li : sli) {
-            Assert.assertEquals(li.getRecordAndOffsets().size(), expectedDepths[i]);
-            Assert.assertEquals(li.getPosition(), expectedReferencePositions[i]);
-            Assert.assertEquals(li.getRecordAndOffsets().size(), expectedReadOffsets[i].length);
-            for (int j = 0; j < expectedReadOffsets[i].length; ++j) {
-                Assert.assertEquals(li.getRecordAndOffsets().get(j).getOffset(), expectedReadOffsets[i][j]);
-                if (start.contains(li.getPosition() - 1)) {
-                    Assert.assertEquals(li.getRecordAndOffsets().get(j).getType(), EdgingRecordAndOffset.Type.BEGIN);
-                }
-                if (end.contains(li.getPosition() - 1)) {
-                    Assert.assertEquals(li.getRecordAndOffsets().get(j).getType(), EdgingRecordAndOffset.Type.END);
-                }
-            }
-            ++i;
-            if (i == 80) {
-                break;
-            }
-        }
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testSetQualityCutOff() {
-        final EdgeReadIterator sli = new EdgeReadIterator(createSamFileReader());
-
-        sli.setQualityScoreCutoff(10);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testSetMaxReadsToAccumulatePerLocus() {
-        final EdgeReadIterator sli = new EdgeReadIterator(createSamFileReader());
-
-        sli.setMaxReadsToAccumulatePerLocus(100);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testSetEmitUncoveredLoci() {
-        final EdgeReadIterator sli = new EdgeReadIterator(createSamFileReader());
-
-        sli.setEmitUncoveredLoci(false);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testSetIncludeIndels() {
-        final EdgeReadIterator sli = new EdgeReadIterator(createSamFileReader());
-
-        sli.setIncludeIndels(true);
-    }
-
-    /**
-     * Tests that reads, that don't intersect given interval list, are excluded from iterator
-     */
-    @Test
-    public void testNotIntersectingInterval() {
-        SamReader samReader = createSamFileReader();
-
-        IntervalList intervals = createIntervalList("@HD\tSO:coordinate\tVN:1.0\n" +
-                "@SQ\tSN:chrM\tLN:100\n" +
-                "chrM\t50\t60\t+\ttest");
-        EdgeReadIterator iterator = new EdgeReadIterator(samReader, intervals);
-        int locusPosition = 50;
-        while (iterator.hasNext()) {
-            AbstractLocusInfo<EdgingRecordAndOffset> next = iterator.next();
-            assertEquals(locusPosition++, next.getPosition());
-            assertEquals(0, next.getRecordAndOffsets().size());
-        }
-        assertEquals(61, locusPosition);
-    }
-
-    /**
-     * Tests that for reads, that intersect given interval list read start is shifted to the start of the interval and
-     * length is adjusted to the end of the interval.
-     */
-    @Test
-    public void testIntersectingInterval() {
-        SamReader samReader = createSamFileReader();
-        IntervalList intervals = createIntervalList("@HD\tSO:coordinate\tVN:1.0\n" +
-                "@SQ\tSN:chrM\tLN:100\n" +
-                "chrM\t5\t15\t+\ttest");
-        EdgeReadIterator iterator = new EdgeReadIterator(samReader, intervals);
-        int locusPosition = 5;
-        while (iterator.hasNext()) {
-            AbstractLocusInfo<EdgingRecordAndOffset> next = iterator.next();
-            int position = next.getPosition();
-            assertEquals(locusPosition++, position);
-            if (position == 5) {
-                assertEquals(2, next.getRecordAndOffsets().size());
-                for (EdgingRecordAndOffset record : next.getRecordAndOffsets()) {
-                    assertEquals(11, record.getLength());
-                }
-            } else {
-                assertEquals(0, next.getRecordAndOffsets().size());
-            }
-        }
-        assertEquals(16, locusPosition);
-    }
-
-    /**
-     * Test for mixed reads: intersecting and not the interval
-     */
-    @Test
-    public void testIntersectingAndNotInterval() {
-
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 40;
-        // Were it not for the gap, these two reads would not overlap
-        builder.addFrag("record2", 0, startPosition, true, false, "36M", null, 10);
-
-        IntervalList intervals = createIntervalList("@HD\tSO:coordinate\tVN:1.0\n" +
-                "@SQ\tSN:chrM\tLN:100\n" +
-                "chrM\t40\t80\t+\ttest");
-
-        EdgeReadIterator iterator = new EdgeReadIterator(builder.getSamReader(), intervals);
-        int locusPosition = 40;
-        while (iterator.hasNext()) {
-            AbstractLocusInfo<EdgingRecordAndOffset> next = iterator.next();
-            int position = next.getPosition();
-            assertEquals(locusPosition++, position);
-            if (position == 40) {
-                assertEquals(1, next.getRecordAndOffsets().size());
-                for (EdgingRecordAndOffset record : next.getRecordAndOffsets()) {
-                    assertEquals(36, record.getLength());
-                    assertEquals(EdgingRecordAndOffset.Type.BEGIN, record.getType());
-                }
-            } else if (position == 76) {
-                assertEquals(1, next.getRecordAndOffsets().size());
-                for (EdgingRecordAndOffset record : next.getRecordAndOffsets()) {
-                    assertEquals(36, record.getLength());
-                    assertEquals(EdgingRecordAndOffset.Type.END, record.getType());
-                }
-            } else {
-                assertEquals(0, next.getRecordAndOffsets().size());
-            }
-        }
-        assertEquals(81, locusPosition);
-    }
-
-
-    /**
-     * Test for intersecting interval for read with a deletion in the middle
-     */
-    @Test
-    public void testIntersectingIntervalWithComplicatedCigar() {
-
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 1;
-        // Were it not for the gap, these two reads would not overlap
-        builder.addFrag("record", 0, startPosition, true, false, "10M3D26M", null, 10);
-
-        IntervalList intervals = createIntervalList("@HD\tSO:coordinate\tVN:1.0\n" +
-                "@SQ\tSN:chrM\tLN:100\n" +
-                "chrM\t5\t20\t+\ttest");
-
-        EdgeReadIterator iterator = new EdgeReadIterator(builder.getSamReader(), intervals);
-        int locusPosition = 5;
-        int[] expectedLength = new int[]{6, 7};
-        int i = 0;
-        while (iterator.hasNext()) {
-            AbstractLocusInfo<EdgingRecordAndOffset> next = iterator.next();
-            int position = next.getPosition();
-            assertEquals(locusPosition++, position);
-            if (position == 5 || position == 14) {
-                assertEquals(1, next.getRecordAndOffsets().size());
-                for (EdgingRecordAndOffset record : next.getRecordAndOffsets()) {
-                    assertEquals(expectedLength[i], record.getLength());
-                    assertEquals(EdgingRecordAndOffset.Type.BEGIN, record.getType());
-                }
-            } else if (position == 11) {
-                assertEquals(1, next.getRecordAndOffsets().size());
-                for (EdgingRecordAndOffset record : next.getRecordAndOffsets()) {
-                    assertEquals(expectedLength[i], record.getLength());
-                    assertEquals(EdgingRecordAndOffset.Type.END, record.getType());
-                }
-                i++;
-            } else {
-                assertEquals(0, next.getRecordAndOffsets().size());
-            }
-        }
-        assertEquals(21, locusPosition);
-    }
-
-
-    private void fillEmptyLocus(int[] expectedReferencePositions, int[] expectedDepths, int[][] expectedReadOffsets, int i) {
-        expectedReferencePositions[i] = i + 1;
-        expectedDepths[i] = 0;
-        expectedReadOffsets[i] = new int[]{};
-    }
-
-    private SamReader createSamFileReader() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 1;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", null, 10);
-        }
-        return builder.getSamReader();
-    }
-
-
-    private IntervalList createIntervalList(String s) {
-        return IntervalList.fromReader(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(s.getBytes()))));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/EdgingRecordAndOffsetTest.java b/src/test/java/htsjdk/samtools/util/EdgingRecordAndOffsetTest.java
deleted file mode 100644
index a4f6478..0000000
--- a/src/test/java/htsjdk/samtools/util/EdgingRecordAndOffsetTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMRecord;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-
-/**
- * 
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- *
- */
-
-public class EdgingRecordAndOffsetTest {
-    private final byte[] qualities = {30, 50, 50, 60, 60, 70 ,70, 70, 80, 90};
-    private final byte[] bases = {'A', 'C', 'G', 'T', 'A', 'C', 'G', 'T', 'T', 'C'};
-    private SAMRecord record;
-
-    @BeforeTest
-    public void setUp(){
-        record = new SAMRecord(new SAMFileHeader());
-        record.setReadName("testRecord");
-        record.setReadBases(bases);
-        record.setBaseQualities(qualities);
-    }
-
-    @Test
-    public void testConstructor(){
-        EdgingRecordAndOffset typedRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 0, 10, 3);
-        assertArrayEquals(qualities, typedRecordAndOffset.getBaseQualities());
-        assertArrayEquals(bases, typedRecordAndOffset.getRecord().getReadBases());
-        assertEquals('A', typedRecordAndOffset.getReadBase());
-        assertEquals(0, typedRecordAndOffset.getOffset());
-        assertEquals(3, typedRecordAndOffset.getRefPos());
-        assertEquals(EdgingRecordAndOffset.Type.BEGIN, typedRecordAndOffset.getType());
-    }
-
-    @Test
-    public void  testGetSetStart(){
-        EdgingRecordAndOffset typedRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 0, 10, 3);
-        EdgingRecordAndOffset typedRecordAndOffsetEnd = EdgingRecordAndOffset.createEndRecord(typedRecordAndOffset);
-        assertEquals(typedRecordAndOffset, typedRecordAndOffsetEnd.getStart());
-        assertEquals(EdgingRecordAndOffset.Type.END, typedRecordAndOffsetEnd.getType());
-    }
-
-    @Test
-    public void testNotEqualsTypedRecords(){
-        EdgingRecordAndOffset typedRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 0, 10, 3);
-        EdgingRecordAndOffset secondEdgingRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 5, 10, 3);
-        assertNotSame(typedRecordAndOffset.getBaseQuality(), secondEdgingRecordAndOffset.getBaseQuality());
-        assertArrayEquals(typedRecordAndOffset.getBaseQualities(), secondEdgingRecordAndOffset.getBaseQualities());
-    }
-
-    @Test
-    public void testGetOffset(){
-        EdgingRecordAndOffset secondEdgingRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 5, 10, 3);
-        assertEquals(70, secondEdgingRecordAndOffset.getBaseQuality());
-        assertEquals('C', secondEdgingRecordAndOffset.getReadBase());
-    }
-
-    @Test
-    public void testGetQualityAtPosition(){
-        EdgingRecordAndOffset secondEdgingRecordAndOffset = EdgingRecordAndOffset.createBeginRecord(record, 0, 10, 1);
-        assertEquals(50, secondEdgingRecordAndOffset.getBaseQuality(2));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/HistogramTest.java b/src/test/java/htsjdk/samtools/util/HistogramTest.java
deleted file mode 100644
index 62b1441..0000000
--- a/src/test/java/htsjdk/samtools/util/HistogramTest.java
+++ /dev/null
@@ -1,366 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashSet;
-
-import static java.lang.Math.abs;
-import static java.lang.StrictMath.pow;
-
-public class HistogramTest {
-
-    @Test(dataProvider = "histogramData")
-    public void testHistogramFunctions(final int[] values, final double mean, final double stdev, final Integer trimByWidth) {
-        final Histogram<Integer> histo = new Histogram<>();
-        for (int value : values) {
-            histo.increment(value);
-        }
-
-        if (trimByWidth != null) histo.trimByWidth(trimByWidth);
-        final double m = histo.getMean();
-        final double sd = histo.getStandardDeviation();
-
-        Assert.assertEquals(round(mean), round(m), "Means are not equal");
-        Assert.assertEquals(round(stdev), round(sd), "Stdevs are not equal");
-    }
-
-    @DataProvider(name = "histogramData")
-    public Object[][] histogramData() {
-        return new Object[][] {
-            new Object[] {new int[] {1,2,3,4,5,6,7,8,9,10} , 5.5d, 3.027650d, null },
-            new Object[] {new int[] {1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9}, 6.333333d, 2.236068d, null  },
-            new Object[] {new int[] {-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15}, 5d, 6.204837d, null  },
-                new Object[] {new int[] {1,2,3,4,5,6,7,8,9,10, 11, 11, 12, 100, 1000} , 5.5d, 3.027650d, 10 },
-                new Object[] {new int[] {1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9, 20, 20, 21, 25, 25}, 6.333333d, 2.236068d, 11  },
-                new Object[] {new int[] {-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 101, 102, 103, 200, 2000}, 5d, 6.204837d, 20  }
-        };
-    }
-
-    @Test
-    public void testGeometricMean() {
-        final int[] is = {4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertTrue(abs(histo.getGeometricMean() - 6.216797) < 0.00001);
-    }
-
-    @Test
-    public void testGetSum() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getSum(), (double)(2*4+3*5), 0.000001);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testGetSumBlowup() {
-        final String[] is = {"foo", "foo", "bar"};
-        final Histogram<String> histo = new Histogram<>();
-        for (final String i : is) histo.increment(i);
-        histo.getSum();//blow up
-    }
-
-    @Test
-    public void testGetSumOfValues() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getSumOfValues(), (double)(2+3), 0.000001);
-    }
-
-    @Test
-    public void testGetMeanBinSize() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getMeanBinSize(), (2+3)/2.0, 0.000001);
-    }
-
-    @Test
-    public void testGetStandardDeviationBinSize() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        final double std = Math.sqrt((pow(2.0-2.5, 2)+pow(3.0-2.5, 2.0))); //sample variance so dividing by 1
-        Assert.assertEquals(histo.getStandardDeviationBinSize(histo.getMeanBinSize()), std, 0.000001);
-    }
-
-    @Test
-    public void testGetKeySet() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-
-        Assert.assertEquals(histo.keySet(), new HashSet<>(Arrays.asList(4,5)));
-    }
-
-    @Test
-    public void testLabelsAndComparator() {
-        final String[] is = {"a", "B", "a"};
-        final Histogram<String> histo = new Histogram<>("FOO", "BAR", String.CASE_INSENSITIVE_ORDER);
-        for (final String i : is) histo.increment(i);
-        Assert.assertEquals(histo.get("a").getValue(), 2.0);
-        Assert.assertEquals(histo.get("B").getValue(), 1.0);
-        Assert.assertEquals(histo.get("a").getId(), "a");
-        Assert.assertEquals(histo.get("B").getId(), "B");
-    }
-
-
-    @Test
-    public void testPrefillBins() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        Assert.assertEquals(histo.get(4), null);
-        Assert.assertEquals(histo.get(5), null);
-        histo.prefillBins(4);
-        Assert.assertEquals(histo.get(4).getValue(),0.0);
-        Assert.assertEquals(histo.get(5), null);
-
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.get(4).getValue(),2.0);
-        Assert.assertEquals(histo.get(5).getValue(),3.0);
-    }
-
-    @Test
-    public void testLabels() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>("FOO", "BAR");
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getBinLabel(),"FOO");
-        Assert.assertEquals(histo.getValueLabel(),"BAR");
-    }
-
-    @Test
-    public void testCopyCtor() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo1 = new Histogram<>();
-        for (final int i : is) histo1.increment(i);
-
-        final Histogram<Integer> histo2 = new Histogram<>(histo1);
-        Assert.assertEquals(histo1, histo2);
-        Assert.assertEquals(histo2, histo1);
-    }
-
-    @Test
-    public void testGet() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-
-        Assert.assertEquals(histo.get(4).getValue(), 2.0);
-        Assert.assertEquals(histo.get(5).getValue(), 3.0);
-        Assert.assertEquals(histo.get(6), null);
-    }
-
-    @Test
-    public void testAddHistogram() {
-        final int[] is1 = {4,4,5,5,5};
-        final Histogram<Integer> histo1 = new Histogram<>();
-        Assert.assertTrue(histo1.isEmpty());
-        for (final int i : is1) histo1.increment(i);
-
-        Assert.assertFalse(histo1.isEmpty());
-
-        final int[] is2 = {5,5, 6,6,6,6};
-        final Histogram<Integer> histo2 = new Histogram<>();
-        for (final int i : is2) histo2.increment(i);
-
-        Assert.assertEquals(histo1.get(4).getValue(), 2.0);
-        Assert.assertEquals(histo1.get(5).getValue(), 3.0);
-        Assert.assertEquals(histo1.get(6), null);
-
-        histo1.addHistogram(histo2);
-
-        Assert.assertEquals(histo1.get(4).getValue(), 2.0);
-        Assert.assertEquals(histo1.get(5).getValue(), 5.0);
-        Assert.assertEquals(histo1.get(6).getValue(), 4.0);
-    }
-
-    @Test
-    public void testGetCumulativeProbability() {
-        final int[] is = {4,4,5,5,5,6,6,6,6};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getCumulativeProbability(2.0), 0.0);
-        Assert.assertEquals(histo.getCumulativeProbability(4.0), 2.0/9);
-        Assert.assertEquals(histo.getCumulativeProbability(5.0), 5.0/9);
-        Assert.assertEquals(histo.getCumulativeProbability(6.0), 9.0/9);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testGetCumulativeProbabilityBlowup() {
-        final String[] is = {"foo"};
-        final Histogram<String> histo = new Histogram<>();
-        for (final String i : is) histo.increment(i);
-        histo.getCumulativeProbability(2.0);
-    }
-
-    @Test
-    public void testPercentile() {
-        final int[] is = {4,4,5,5,5,6,6,6,6};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getPercentile(0.01), 4.0);
-        Assert.assertEquals(histo.getPercentile(2.0/9), 4.0);
-        Assert.assertEquals(histo.getPercentile(5.0/9), 5.0);
-        Assert.assertEquals(histo.getPercentile(0.99999), 6.0);
-    }
-
-    @Test
-    public void testGetMinMax() {
-        final int[] is = {4,4,5,5,5,6,6,6,6};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getMin(), 4.0);
-        Assert.assertEquals(histo.getMax(), 6.0);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testGetMinBlowup() {
-        final String[] is = {"foo", "bar", "bar"};
-        final Histogram<String> histo = new Histogram<>();
-        for (final String i : is) histo.increment(i);
-        histo.getMin();//blow up
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testGetMaxBlowup() {
-        final String[] is = {"foo", "bar", "bar"};
-        final Histogram<String> histo = new Histogram<>();
-        for (final String i : is) histo.increment(i);
-        histo.getMax();//blow up
-    }
-
-    @Test
-    public void testGetMedianBinSize() {
-        final int[] is = {4,4,5,5,5,6,6,6,6};
-        final Histogram<Integer> histo = new Histogram<>();
-        Assert.assertEquals(histo.getMedianBinSize(), 0, 0.000001); //empty
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getMedianBinSize(), 3, 0.000001); //three fives
-    }
-
-    @Test
-    public void testGetMedianBinSize_Even() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        Assert.assertEquals(histo.getMedianBinSize(), 0, 0.000001); //empty
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getMedianBinSize(), (2+3)/2.0, 0.000001); //even split
-    }
-
-    @Test
-    public void testSize() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.size(), 2); //2 unique values
-    }
-
-
-    @Test
-    public void testMode() {
-        final int[] is = {4,4,5,5,5,6};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-        Assert.assertEquals(histo.getMode(), 5.0);
-    }
-
-    @Test(expectedExceptions = UnsupportedOperationException.class)
-    public void testModeBlowup() {
-        final String[] is = {"foo"};
-        final Histogram<String> histo = new Histogram<>();
-        for (final String i : is) histo.increment(i);
-        histo.getMode();//blowup
-    }
-
-    @Test
-    public void testComparator() {
-        final int[] is = {4,4,5,5,5};
-        final Histogram<Integer> histo1 = new Histogram<>();
-        for (final int i : is) histo1.increment(i);
-        Assert.assertNull(histo1.comparator());
-
-        final Histogram<Integer> histo2 = new Histogram<>(Comparator.comparingInt(Integer::intValue));
-        Comparator<Integer> comp = (Comparator<Integer>) histo2.comparator();
-        Assert.assertNotNull(comp);
-        Assert.assertEquals(comp.compare(4,5), -1);
-    }
-
-    @Test
-    public void testEquals() {
-        final int[] is = {4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8};
-        final Histogram<Integer> histo1 = new Histogram<>();
-        final Histogram<Integer> histo2 = new Histogram<>();
-        for (final int i : is) histo1.increment(i);
-        for (final int i : is) histo2.increment(i);
-        Assert.assertEquals(histo1, histo1);
-        Assert.assertEquals(histo2, histo1);
-        Assert.assertEquals(histo1, histo2);
-
-        Assert.assertEquals(histo1.hashCode(), histo2.hashCode());
-
-        Assert.assertNotEquals(null, histo1);
-        Assert.assertNotEquals(histo1, null);
-
-        histo2.increment(4);//make them not equal
-        Assert.assertEquals(histo1, histo1);
-        Assert.assertNotEquals(histo2, histo1);
-        Assert.assertNotEquals(histo1, histo2);
-        Assert.assertNotEquals(histo1.hashCode(), histo2.hashCode());
-
-
-    }
-
-    @Test(dataProvider = "medianTestData")
-    public void testMedian(final int [] values, final double median) {
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : values) histo.increment(i);
-        Assert.assertEquals(histo.getMedian(), median);
-    }
-
-    @DataProvider(name = "medianTestData")
-    public Object[][] medianTestData() {
-        return new Object[][] {
-                new Object[] {new int[] {} , 0d},
-                new Object[] {new int[] {999} , 999d},
-                new Object[] {new int[] {1,2,3,4,5,6} , 3.5d},
-                new Object[] {new int[] {5,5,5,5,5,6,6} , 5d},
-                new Object[] {new int[] {5,5,5,5,5,6,6,6,6,6} , 5.5d},
-        };
-    }
-
-    @Test
-    public void testMad() {
-        final int[] is = {4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8};
-        final Histogram<Integer> histo = new Histogram<>();
-        for (final int i : is) histo.increment(i);
-
-        Assert.assertEquals(7d, histo.getMedian());
-        Assert.assertEquals(1d, histo.getMedianAbsoluteDeviation());
-        Assert.assertTrue(abs(histo.estimateSdViaMad() - 1.4826) < 0.0001);
-    }
-
-
-    @Test(dataProvider = "histogramData") //this data provider has several extra variables that we don't make use of here
-    public void testSerializeHistogram(final int[] values, final double mean, final double stdev, final Integer trimByWidth) throws IOException, ClassNotFoundException {
-        final Histogram<Integer> histo = new Histogram<>();
-        for (int value : values) {
-            histo.increment(value);
-        }
-
-        Histogram<Integer> deserializedHistogram = TestUtil.serializeAndDeserialize(histo);
-        Assert.assertEquals(deserializedHistogram, histo);
-    }
-
-    private double round(final double in) {
-        long l = (long) (in * 10000);
-        return l / 10000d;
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/IntervalListTest.java b/src/test/java/htsjdk/samtools/util/IntervalListTest.java
deleted file mode 100644
index 6c5fcd4..0000000
--- a/src/test/java/htsjdk/samtools/util/IntervalListTest.java
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * Tests the IntervalList class
- */
-public class IntervalListTest {
-
-    final SAMFileHeader fileHeader;
-    final IntervalList list1, list2, list3;
-
-    public IntervalListTest() {
-        fileHeader = IntervalList.fromFile(new File("src/test/resources/htsjdk/samtools/intervallist/IntervalListchr123_empty.interval_list")).getHeader();
-        fileHeader.setSortOrder(SAMFileHeader.SortOrder.unsorted);
-
-        list1 = new IntervalList(fileHeader);
-        list2 = new IntervalList(fileHeader);
-        list3 = new IntervalList(fileHeader);
-
-        list1.add(new Interval("1", 1, 100));     //de-facto: 1:1-200 1:202-300     2:100-150 2:200-300
-        list1.add(new Interval("1", 101, 200));
-        list1.add(new Interval("1", 202, 300));
-        list1.add(new Interval("2", 200, 300));
-        list1.add(new Interval("2", 100, 150));
-
-        list2.add(new Interval("1", 50, 150));   //de-facto 1:50-150 1:301-500      2:1-150 2:250-270 2:290-400
-        list2.add(new Interval("1", 301, 500));
-        list2.add(new Interval("2", 1, 150));
-        list2.add(new Interval("2", 250, 270));
-        list2.add(new Interval("2", 290, 400));
-
-        list3.add(new Interval("1", 25, 400));    //de-facto 1:25-400                2:200-600                            3:50-470
-        list3.add(new Interval("2", 200, 600));
-        list3.add(new Interval("3", 50, 470));
-    }
-
-    @DataProvider(name = "intersectData")
-    public Object[][] intersectData() {
-        final IntervalList intersect123 = new IntervalList(fileHeader);
-        final IntervalList intersect12 = new IntervalList(fileHeader);
-        final IntervalList intersect13 = new IntervalList(fileHeader);
-        final IntervalList intersect23 = new IntervalList(fileHeader);
-
-        intersect123.add(new Interval("1", 50, 150));
-        intersect123.add(new Interval("2", 250, 270));
-        intersect123.add(new Interval("2", 290, 300));
-
-        intersect12.add(new Interval("1", 50, 150));
-        intersect12.add(new Interval("2", 100, 150));
-        intersect12.add(new Interval("2", 250, 270));
-        intersect12.add(new Interval("2", 290, 300));
-
-        intersect13.add(new Interval("1", 25, 200));
-        intersect13.add(new Interval("1", 202, 300));
-        intersect13.add(new Interval("2", 200, 300));
-
-        intersect23.add(new Interval("1", 50, 150));
-        intersect23.add(new Interval("1", 301, 400));
-        intersect23.add(new Interval("2", 250, 270));
-        intersect23.add(new Interval("2", 290, 400));
-
-        return new Object[][]{
-                new Object[]{Arrays.asList(list1, list2, list3), intersect123},
-                new Object[]{Arrays.asList(list1, list2), intersect12},
-                new Object[]{Arrays.asList(list2, list1), intersect12},
-                new Object[]{Arrays.asList(list2, list3), intersect23},
-                new Object[]{Arrays.asList(list3, list2), intersect23},
-                new Object[]{Arrays.asList(list1, list3), intersect13},
-                new Object[]{Arrays.asList(list3, list1), intersect13}
-        };
-    }
-
-    @Test(dataProvider = "intersectData")
-    public void testIntersectIntervalLists(final List<IntervalList> lists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.intersection(lists).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @DataProvider(name = "mergeData")
-    public Object[][] mergeData() {
-        final IntervalList merge123 = new IntervalList(fileHeader);
-        final IntervalList merge12 = new IntervalList(fileHeader);
-        final IntervalList merge23 = new IntervalList(fileHeader);
-        final IntervalList merge13 = new IntervalList(fileHeader);
-
-        merge123.add(new Interval("1", 1, 100));     //de-facto: 1:1-200 1:202-300     2:100-150 2:200-300
-        merge123.add(new Interval("1", 101, 200));
-        merge123.add(new Interval("1", 202, 300));
-        merge123.add(new Interval("2", 200, 300));
-        merge123.add(new Interval("2", 100, 150));
-
-        merge123.add(new Interval("1", 50, 150));   //de-facto 1:50-150 1:301-500      2:1-150 2:250-270 2:290-400
-        merge123.add(new Interval("1", 301, 500));
-        merge123.add(new Interval("2", 1, 150));
-        merge123.add(new Interval("2", 250, 270));
-        merge123.add(new Interval("2", 290, 400));
-
-        merge123.add(new Interval("1", 25, 400));    //de-facto 1:25-400                2:200-600                            3:50-470
-        merge123.add(new Interval("2", 200, 600));
-        merge123.add(new Interval("3", 50, 470));
-
-        merge12.add(new Interval("1", 1, 100));     //de-facto: 1:1-200 1:202-300     2:100-150 2:200-300
-        merge12.add(new Interval("1", 101, 200));
-        merge12.add(new Interval("1", 202, 300));
-        merge12.add(new Interval("2", 200, 300));
-        merge12.add(new Interval("2", 100, 150));
-
-        merge12.add(new Interval("1", 50, 150));   //de-facto 1:50-150 1:301-500      2:1-150 2:250-270 2:290-400
-        merge12.add(new Interval("1", 301, 500));
-        merge12.add(new Interval("2", 1, 150));
-        merge12.add(new Interval("2", 250, 270));
-        merge12.add(new Interval("2", 290, 400));
-
-        merge23.add(new Interval("1", 50, 150));   //de-facto 1:50-150 1:301-500      2:1-150 2:250-270 2:290-400
-        merge23.add(new Interval("1", 301, 500));
-        merge23.add(new Interval("2", 1, 150));
-        merge23.add(new Interval("2", 250, 270));
-        merge23.add(new Interval("2", 290, 400));
-
-        merge23.add(new Interval("1", 25, 400));    //de-facto 1:25-400                2:200-600                            3:50-470
-        merge23.add(new Interval("2", 200, 600));
-        merge23.add(new Interval("3", 50, 470));
-
-        merge13.add(new Interval("1", 1, 100));     //de-facto: 1:1-200 1:202-300     2:100-150 2:200-300
-        merge13.add(new Interval("1", 101, 200));
-        merge13.add(new Interval("1", 202, 300));
-        merge13.add(new Interval("2", 200, 300));
-        merge13.add(new Interval("2", 100, 150));
-
-        merge13.add(new Interval("1", 25, 400));    //de-facto 1:25-400                2:200-600                            3:50-470
-        merge13.add(new Interval("2", 200, 600));
-        merge13.add(new Interval("3", 50, 470));
-
-        return new Object[][]{
-                new Object[]{Arrays.asList(list1, list2, list3), merge123},
-                new Object[]{Arrays.asList(list1, list2), merge12},
-                new Object[]{Arrays.asList(list2, list3), merge23},
-                new Object[]{Arrays.asList(list1, list3), merge13}
-        };
-    }
-
-    @Test(dataProvider = "mergeData")
-    public void testMergeIntervalLists(final List<IntervalList> lists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.concatenate(lists).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @DataProvider(name = "unionData")
-    public Object[][] unionData() {
-        final IntervalList union123 = new IntervalList(fileHeader);
-        final IntervalList union12 = new IntervalList(fileHeader);
-        final IntervalList union13 = new IntervalList(fileHeader);
-        final IntervalList union23 = new IntervalList(fileHeader);
-
-        union123.add(new Interval("1", 1, 500));
-        union123.add(new Interval("2", 1, 150));
-        union123.add(new Interval("2", 200, 600));
-        union123.add(new Interval("3", 50, 470));
-
-        union12.add(new Interval("1", 1, 200));
-        union12.add(new Interval("1", 202, 500));
-        union12.add(new Interval("2", 1, 150));
-        union12.add(new Interval("2", 200, 400));
-
-        union23.add(new Interval("1", 25, 500));
-        union23.add(new Interval("2", 1, 150));
-        union23.add(new Interval("2", 200, 600));
-        union23.add(new Interval("3", 50, 470));
-
-        union13.add(new Interval("1", 1, 400));
-        union13.add(new Interval("2", 100, 150));
-        union13.add(new Interval("2", 200, 600));
-        union13.add(new Interval("3", 50, 470));
-
-        return new Object[][]{
-                new Object[]{Arrays.asList(list1, list2, list3), union123},
-                new Object[]{Arrays.asList(list1, list2), union12},
-                new Object[]{Arrays.asList(list1, list2), union12},
-                new Object[]{Arrays.asList(list2, list3), union23},
-                new Object[]{Arrays.asList(list2, list3), union23},
-                new Object[]{Arrays.asList(list1, list3), union13},
-                new Object[]{Arrays.asList(list1, list3), union13}
-        };
-    }
-
-    @Test(dataProvider = "unionData", enabled = true)
-    public void testUnionIntervalLists(final List<IntervalList> lists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.union(lists).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @DataProvider(name = "invertData")
-    public Object[][] invertData() {
-        final IntervalList invert1 = new IntervalList(fileHeader);
-        final IntervalList invert2 = new IntervalList(fileHeader);
-        final IntervalList invert3 = new IntervalList(fileHeader);
-
-        final IntervalList full = new IntervalList(fileHeader);
-        final IntervalList fullChopped = new IntervalList(fileHeader);
-        final IntervalList empty = new IntervalList(fileHeader);
-
-        invert1.add(new Interval("1", 201, 201));
-        invert1.add(new Interval("1", 301, fileHeader.getSequence("1").getSequenceLength()));
-        invert1.add(new Interval("2", 1, 99));
-        invert1.add(new Interval("2", 151, 199));
-        invert1.add(new Interval("2", 301, fileHeader.getSequence("2").getSequenceLength()));
-        invert1.add(new Interval("3", 1, fileHeader.getSequence("3").getSequenceLength()));
-
-        invert2.add(new Interval("1", 1, 49));
-        invert2.add(new Interval("1", 151, 300));
-        invert2.add(new Interval("1", 501, fileHeader.getSequence("1").getSequenceLength()));
-        invert2.add(new Interval("2", 151, 249));
-        invert2.add(new Interval("2", 271, 289));
-        invert2.add(new Interval("2", 401, fileHeader.getSequence("2").getSequenceLength()));
-        invert2.add(new Interval("3", 1, fileHeader.getSequence("3").getSequenceLength()));
-
-        invert3.add(new Interval("1", 1, 24));
-        invert3.add(new Interval("1", 401, fileHeader.getSequence("1").getSequenceLength()));
-        invert3.add(new Interval("2", 1, 199));
-        invert3.add(new Interval("2", 601, fileHeader.getSequence("2").getSequenceLength()));
-        invert3.add(new Interval("3", 1, 49));
-        invert3.add(new Interval("3", 471, fileHeader.getSequence("3").getSequenceLength()));
-
-        for (final SAMSequenceRecord samSequenceRecord : fileHeader.getSequenceDictionary().getSequences()) {
-            full.add(new Interval(samSequenceRecord.getSequenceName(), 1, samSequenceRecord.getSequenceLength()));
-
-            fullChopped.add(new Interval(samSequenceRecord.getSequenceName(), 1, samSequenceRecord.getSequenceLength() / 2));
-            fullChopped.add(new Interval(samSequenceRecord.getSequenceName(), samSequenceRecord.getSequenceLength() / 2 + 1, samSequenceRecord.getSequenceLength()));
-        }
-
-        return new Object[][]{
-                new Object[]{list1, invert1},
-                new Object[]{list2, invert2},
-                new Object[]{list3, invert3},
-                new Object[]{full, empty},
-                new Object[]{empty, full},
-                new Object[]{fullChopped, empty}
-        };
-    }
-
-    @Test(dataProvider = "invertData")
-    public void testInvertSquared(final IntervalList list, @SuppressWarnings("UnusedParameters") final IntervalList ignored) throws Exception {
-        final IntervalList inverseSquared = IntervalList.invert(IntervalList.invert(list));
-        final IntervalList originalClone = new IntervalList(list.getHeader());
-
-        for (final Interval interval : list) {
-            originalClone.add(interval);
-        }
-
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(inverseSquared.iterator()),
-                CollectionUtil.makeCollection(originalClone.uniqued().iterator()));
-    }
-
-    @Test(dataProvider = "invertData")
-    public void testInvert(final IntervalList list, final IntervalList inverse) throws Exception {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.invert(list).iterator()),
-                CollectionUtil.makeCollection(inverse.iterator()));
-    }
-
-    @DataProvider(name = "subtractSingletonData")
-    public Object[][] subtractSingletonData() {
-        final IntervalList subtract1_from_2 = new IntervalList(fileHeader);
-        final IntervalList subtract2_from_3 = new IntervalList(fileHeader);
-        final IntervalList subtract1_from_3 = new IntervalList(fileHeader);
-        final IntervalList subtract3_from_1 = new IntervalList(fileHeader);
-
-        subtract1_from_2.add(new Interval("1", 301, 500));
-        subtract1_from_2.add(new Interval("2", 1, 99));
-        subtract1_from_2.add(new Interval("2", 301, 400));
-
-        subtract2_from_3.add(new Interval("1", 25, 49));
-        subtract2_from_3.add(new Interval("1", 151, 300));
-        subtract2_from_3.add(new Interval("2", 200, 249));
-        subtract2_from_3.add(new Interval("2", 271, 289));
-        subtract2_from_3.add(new Interval("2", 401, 600));
-        subtract2_from_3.add(new Interval("3", 50, 470));
-
-        subtract1_from_3.add(new Interval("1", 201, 201));
-        subtract1_from_3.add(new Interval("1", 301, 400));
-        subtract1_from_3.add(new Interval("2", 301, 600));
-        subtract1_from_3.add(new Interval("3", 50, 470));
-
-        subtract3_from_1.add(new Interval("1", 1, 49));    //de-facto 1:25-400                2:200-600                            3:50-470
-        subtract3_from_1.add(new Interval("2", 100, 150));
-
-        return new Object[][]{
-                new Object[]{list2, list1, subtract1_from_2},
-                new Object[]{list3, list2, subtract2_from_3},
-                new Object[]{list3, list1, subtract1_from_3},
-        };
-    }
-
-    @DataProvider(name = "subtractData")
-    public Object[][] subtractData() {
-        final IntervalList subtract12_from_3 = new IntervalList(fileHeader);
-
-        subtract12_from_3.add(new Interval("1", 201, 201));
-        subtract12_from_3.add(new Interval("2", 401, 600));
-        subtract12_from_3.add(new Interval("3", 50, 470));
-
-        return new Object[][]{
-                new Object[]{CollectionUtil.makeList(list3), CollectionUtil.makeList(list1, list2), subtract12_from_3},
-        };
-    }
-
-    @Test(dataProvider = "subtractData")
-    public void testSubtractIntervalLists(final List<IntervalList> fromLists, final List<IntervalList> whatLists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.subtract(fromLists, whatLists).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @Test(dataProvider = "subtractSingletonData")
-    public void testSubtractSingletonIntervalLists(final IntervalList fromLists, final IntervalList whatLists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.subtract(fromLists, whatLists).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @Test(dataProvider = "subtractSingletonData")
-    public void testSubtractSingletonasListIntervalList(final IntervalList fromLists, final IntervalList whatLists, final IntervalList list) {
-        Assert.assertEquals(
-                CollectionUtil.makeCollection(IntervalList.subtract(Collections.singletonList(fromLists), Collections.singletonList(whatLists)).iterator()),
-                CollectionUtil.makeCollection(list.iterator()));
-    }
-
-    @DataProvider(name = "VCFCompData")
-    public Object[][] VCFCompData() {
-        return new Object[][]{
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTest.vcf", "src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list", false},
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTest.vcf", "src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverse.interval_list", true},
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManual.vcf", "src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManualComp.interval_list", false},
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManual.vcf", "src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list", true}
-        };
-    }
-
-    @Test(dataProvider = "VCFCompData")
-    public void testFromVCF(final String vcf, final String compInterval, final boolean invertVCF) {
-
-        final File vcfFile = new File(vcf);
-        final File compIntervalFile = new File(compInterval);
-
-        final IntervalList compList = IntervalList.fromFile(compIntervalFile);
-        final IntervalList list = invertVCF ? IntervalList.invert(VCFFileReader.fromVcf(vcfFile)) : VCFFileReader.fromVcf(vcfFile);
-
-        compList.getHeader().getSequenceDictionary().assertSameDictionary(list.getHeader().getSequenceDictionary());
-
-        final Collection<Interval> intervals = CollectionUtil.makeCollection(list.iterator());
-        final Collection<Interval> compIntervals = CollectionUtil.makeCollection(compList.iterator());
-
-        //assert that the intervals correspond
-        Assert.assertEquals(intervals, compIntervals);
-
-        final List<String> intervalNames = new LinkedList<String>();
-        final List<String> compIntervalNames = new LinkedList<String>();
-
-        for (final Interval interval : intervals) {
-            intervalNames.add(interval.getName());
-        }
-        for (final Interval interval : compIntervals) {
-            compIntervalNames.add(interval.getName());
-        }
-        //assert that the names match
-        Assert.assertEquals(intervalNames, compIntervalNames);
-    }
-
-    @DataProvider
-    public Object[][] testFromSequenceData() {
-        return new Object[][]{
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list", "1", 249250621},
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list", "2", 243199373},
-                new Object[]{"src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list", "3", 198022430},
-        };
-    }
-
-    @Test(dataProvider = "testFromSequenceData")
-    public void testFromSequenceName(final String intervalList, final String referenceName, final Integer length) {
-
-        final IntervalList intervals = IntervalList.fromFile(new File(intervalList));
-        final IntervalList test = IntervalList.fromName(intervals.getHeader(), referenceName);
-        Assert.assertEquals(test.getIntervals(), CollectionUtil.makeList(new Interval(referenceName, 1, length)));
-    }
-
-    @Test
-    public void testMerges() {
-        final SortedSet<Interval> intervals = new TreeSet<Interval>() {{
-            add(new Interval("1", 500, 600, false, "foo"));
-            add(new Interval("1", 550, 650, false, "bar"));
-            add(new Interval("1", 625, 699, false, "splat"));
-        }};
-
-        Interval out = IntervalList.merge(intervals, false);
-        Assert.assertEquals(out.getStart(), 500);
-        Assert.assertEquals(out.getEnd(), 699);
-
-        intervals.add(new Interval("1", 626, 629, false, "whee"));
-        out = IntervalList.merge(intervals, false);
-        Assert.assertEquals(out.getStart(), 500);
-        Assert.assertEquals(out.getEnd(), 699);
-    }
-
-    @Test
-    public void testBreakAtBands() {
-        final List<Interval> intervals = new ArrayList<Interval>() {{
-            add(new Interval("A", 1, 99, false, "foo"));
-            add(new Interval("A", 98, 99, true, "psyduck"));
-            add(new Interval("1", 500, 600, false, "foo")); // -> 2
-            add(new Interval("1", 550, 650, false, "bar")); // -> 2
-            add(new Interval("1", 625, 699, false, "splat"));
-            add(new Interval("2", 99, 201, false, "geodude")); // -> 3
-            add(new Interval("3", 100, 99, false, "charizard"));  // Empty Interval
-            add(new Interval("3", 101, 100, false, "golduck"));   // Empty Interval
-        }};
-
-        final List<Interval> brokenIntervals = IntervalList.breakIntervalsAtBandMultiples(intervals, 100);
-
-        Assert.assertEquals(brokenIntervals.size(), 12);
-        Assert.assertEquals(brokenIntervals.get(0), new Interval("A", 1, 99, false, "foo"));
-
-        Assert.assertEquals(brokenIntervals.get(1), new Interval("A", 98, 99, true, "psyduck"));
-
-        Assert.assertEquals(brokenIntervals.get(2), new Interval("1", 500, 599, false, "foo.1"));
-        Assert.assertEquals(brokenIntervals.get(3), new Interval("1", 600, 600, false, "foo.2"));
-
-        Assert.assertEquals(brokenIntervals.get(4), new Interval("1", 550, 599, false, "bar.1"));
-        Assert.assertEquals(brokenIntervals.get(5), new Interval("1", 600, 650, false, "bar.2"));
-
-        Assert.assertEquals(brokenIntervals.get(6), new Interval("1", 625, 699, false, "splat"));
-
-        Assert.assertEquals(brokenIntervals.get(7), new Interval("2", 99, 99, false, "geodude.1"));
-        Assert.assertEquals(brokenIntervals.get(8), new Interval("2", 100, 199, false, "geodude.2"));
-        Assert.assertEquals(brokenIntervals.get(9), new Interval("2", 200, 201, false, "geodude.3"));
-
-        Assert.assertEquals(brokenIntervals.get(10), new Interval("3", 100, 99, false, "charizard"));
-        Assert.assertEquals(brokenIntervals.get(11), new Interval("3", 101, 100, false, "golduck"));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void TestFailAdd() {
-        IntervalList test = new IntervalList(this.fileHeader);
-        test.add(new Interval("blarg", 1, 1));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void TestFailAddAll() {
-        IntervalList test = new IntervalList(this.fileHeader);
-        test.addall(CollectionUtil.makeList(new Interval("blarg", 1, 1), new Interval("bloorg", 1, 1)));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void changeHeader() {
-        SAMFileHeader clonedHeader = fileHeader.clone();
-        clonedHeader.addSequence(new SAMSequenceRecord("4", 1000));
-        IntervalList usingClone1 = new IntervalList(clonedHeader);
-        usingClone1.add(new Interval("4", 1, 100));
-        IntervalList usingClone2 = new IntervalList(clonedHeader);
-        usingClone2.add(new Interval("4", 10, 20));
-
-
-        IntervalList expected = new IntervalList(clonedHeader);
-        expected.add(new Interval("4", 1, 9));
-        expected.add(new Interval("4", 21, 100));
-
-        //pull rug from underneath (one call will change all the headers, since there's actually only one)
-        usingClone1.getHeader().setSequenceDictionary(fileHeader.getSequenceDictionary());
-
-        //now interval lists are in "illegal state" since they contain contigs that are not in the header.
-        //this next step should fail
-        IntervalList.subtract(usingClone1, usingClone2);
-
-        Assert.assertTrue(false);
-
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/IntervalTreeMapTest.java b/src/test/java/htsjdk/samtools/util/IntervalTreeMapTest.java
deleted file mode 100644
index 2e725ff..0000000
--- a/src/test/java/htsjdk/samtools/util/IntervalTreeMapTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-
-public class IntervalTreeMapTest {
-    @Test
-    public void testBasic() {
-        IntervalTreeMap<Interval> m=new IntervalTreeMap<Interval>();
-
-        Interval chr1Interval = new Interval("chr1", 10,100);
-        m.put(chr1Interval, chr1Interval);
-        Interval chr2Interval = new Interval("chr2", 1,200);
-        m.put(chr2Interval, chr2Interval);
-        
-        
-        Assert.assertTrue(m.containsContained(new Interval("chr1", 9,101)));
-        Assert.assertTrue(m.containsOverlapping(new Interval("chr1", 50,150)));
-        Assert.assertFalse(m.containsOverlapping(new Interval("chr3", 1,100)));
-        Assert.assertFalse(m.containsOverlapping(new Interval("chr1", 101,150)));
-        Assert.assertFalse(m.containsContained(new Interval("chr1", 11,101)));
-        Assert.assertFalse(m.isEmpty());
-        Assert.assertTrue(m.size()==2);
-        
-        final Iterator<Interval> iterator = m.keySet().iterator();
-        Assert.assertEquals(iterator.next(), chr1Interval);
-        Assert.assertEquals(iterator.next(), chr2Interval);
-        Assert.assertFalse(iterator.hasNext());
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/IntervalTreeTest.java b/src/test/java/htsjdk/samtools/util/IntervalTreeTest.java
deleted file mode 100644
index 50d84c0..0000000
--- a/src/test/java/htsjdk/samtools/util/IntervalTreeTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class IntervalTreeTest {
-    @Test
-    public void testNoMatches()
-    {
-        // Test empty tree
-        final IntervalTree<String> intervalTree = new IntervalTree<String>();
-        Iterator<IntervalTree.Node<String>> results = intervalTree.overlappers(1, 500);
-        Assert.assertEquals(countElements(results), 0, "Testing with no left-hand set failed.");
-
-        // Test no matches at all
-        intervalTree.put(1, 400, "foo");
-        intervalTree.put(600, 800, "foo2");
-        results = intervalTree.overlappers(450, 599);
-        Assert.assertEquals(countElements(results), 0, "Testing with no overlaps at all.");
-
-    }
-
-    private int countElements(final Iterator<IntervalTree.Node<String>> it) {
-        int ret = 0;
-        while (it.hasNext()) {
-            ++ret;
-            it.next();
-        }
-        return ret;
-    }
-
-    @Test
-    public void testMatches()
-    {
-        final IntervalTree<String> intervalTree = new IntervalTree<String>();
-        intervalTree.put(1, 10, "foo1");
-        intervalTree.put(2, 9, "foo2");
-        intervalTree.put(3, 8, "foo3");
-        intervalTree.put(4, 7, "foo4");
-        intervalTree.put(5, 6, "foo5");
-        intervalTree.put(1, 9, "foo6");
-
-        // Single match
-        Assert.assertEquals(countElements(intervalTree.overlappers(10, 10)), 1, "Test single overlap");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(10, 10), "foo1"), "Test single overlap for correct overlapee");
-
-        // Multiple matches
-        Assert.assertEquals(countElements(intervalTree.overlappers(7, 8)), 5, "Test multiple overlap");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo1"), "Test multiple overlap for correct overlapees");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo2"), "Test multiple overlap for correct overlapees");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo3"), "Test multiple overlap for correct overlapees");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo4"), "Test multiple overlap for correct overlapees");
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo6"), "Test multiple overlap for correct overlapees");
-        Assert.assertTrue(!iteratorContains(intervalTree.overlappers(7, 8), "foo5"), "Test multiple overlap for correct overlapees");
-    }
-
-    private boolean iteratorContains(final Iterator<IntervalTree.Node<String>> nodeIterator, final String s) {
-        while (nodeIterator.hasNext()) {
-            if (nodeIterator.next().getValue().equals(s)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Test
-    public void testNearEnds()
-    {
-        final IntervalTree<String> intervalTree = new IntervalTree<String>();
-        intervalTree.put(10, 20, "foo");
-        Assert.assertEquals(countElements(intervalTree.overlappers(10, 10)), 1, "Test overlap (no buffers) at near end exactly");
-        Assert.assertEquals(countElements(intervalTree.overlappers(9, 10)), 1, "Test overlap (no buffers) at near end exactly");
-        Assert.assertEquals(countElements(intervalTree.overlappers(9, 9)), 0, "Test just before overlap (no buffers)");
-        Assert.assertEquals(countElements(intervalTree.overlappers(20, 20)), 1, "Test overlap (no buffers) at far end exactly");
-        Assert.assertEquals(countElements(intervalTree.overlappers(20, 21)), 1, "Test overlap (no buffers) at far end exactly");
-        Assert.assertEquals(countElements(intervalTree.overlappers(21, 21)), 0, "Test just beyond overlap (no buffers)");
-    }
-
-    @Test
-    public void performanceTest()
-    {
-        final IntervalTree<String> intervalTree = new IntervalTree<String>();
-        final long start = System.currentTimeMillis();
-        for (int i = 1; i <= 50000; i++)  intervalTree.put(i, i, "frob");
-        System.out.println("Time to construct a tree with 50000 nodes: " + (System.currentTimeMillis() - start) + " milliseconds" );
-
-        final long end   = System.currentTimeMillis() + 10000;
-        int count = 0;
-        while (System.currentTimeMillis() < end) {
-            intervalTree.overlappers(17000, 17099);
-            ++count;
-        }
-        System.out.println("Queried for the same 100-length mapping " + count + " times in 10 seconds.");
-    }
-
-    @Test
-    public void testHandlingOfDuplicateMappings()
-    {
-        final IntervalTree<String> intervalTree = new IntervalTree<String>();
-        intervalTree.put(1, 10, "foo1");
-        // This call replaces foo1 with foo2
-        Assert.assertEquals(intervalTree.put(1, 10, "foo2"), "foo1");
-        intervalTree.put(2, 8, "foo3");
-
-        Assert.assertEquals(countElements(intervalTree.overlappers(3, 5)), 2);
-        Assert.assertFalse(iteratorContains(intervalTree.overlappers(3, 5), "foo1"));
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(3, 5), "foo2"));
-        Assert.assertTrue(iteratorContains(intervalTree.overlappers(3, 5), "foo3"));
-    }
-
-    /**
-     * Test of PIC-123
-     */
-    @Test
-    public void testRemove() {
-        int[][] adds = {
-                {46129744, 46129978},
-                {46393843, 46394077},
-                {46260491, 46260725},
-                {46402360, 46402594},
-                {46369255, 46369464},
-                {46293772, 46293981},
-                {46357687, 46357896},
-                {46431752, 46431961},
-                {46429997, 46430206},
-                {46404026, 46404192},
-                {46390511, 46390677},
-                {46090593, 46090759},
-                {46045352, 46045518},
-                {46297633, 46297799},
-                {46124297, 46124463},
-                {46395291, 46395504},
-                {46439072, 46439240},
-                {46400792, 46400959},
-                {46178616, 46178851},
-                {46129747, 46129982},
-                {46396546, 46396781},
-                {46112353, 46112588},
-                {46432996, 46433231},
-                {46399109, 46399344},
-                {46372058, 46372292},
-                {46386826, 46387060},
-                {46381795, 46382029},
-                {46179789, 46180023},
-                {46394409, 46394643},
-                {46376176, 46376429},
-                {46389943, 46390177},
-                {46433654, 46433888},
-                {46379440, 46379674},
-                {46391117, 46391351},
-        };
-        IntervalTree<String> intervalTree = new IntervalTree<String>();
-        for (int[] add : adds) {
-            intervalTree.put(add[0], add[1], "frob");
-        }
-        Assert.assertEquals(intervalTree.remove(46402360, 46402594), "frob");
-        intervalTree.checkMaxEnds();
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/IoUtilTest.java b/src/test/java/htsjdk/samtools/util/IoUtilTest.java
deleted file mode 100644
index 0e4cd7a..0000000
--- a/src/test/java/htsjdk/samtools/util/IoUtilTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.List;
-
-public class IoUtilTest {
-
-    private static final File SLURP_TEST_FILE = new File("src/test/resources/htsjdk/samtools/io/slurptest.txt");
-    private static final File EMPTY_FILE = new File("src/test/resources/htsjdk/samtools/io/empty.txt");
-    private static final File FIVE_SPACES_THEN_A_NEWLINE_THEN_FIVE_SPACES_FILE = new File("src/test/resources/htsjdk/samtools/io/5newline5.txt");
-    private static final List<String> SLURP_TEST_LINES = Arrays.asList("bacon   and rice   ", "for breakfast  ", "wont you join me");
-    private static final String SLURP_TEST_LINE_SEPARATOR = "\n";
-    private static final String TEST_FILE_PREFIX = "htsjdk-IOUtilTest";
-    private static final String TEST_FILE_EXTENSIONS[] = {".txt", ".txt.gz"};
-    private static final String TEST_STRING = "bar!";
-    private File existingTempFile;
-    private String systemTempDir;
-
-    @BeforeClass
-    public void setUp() throws IOException {
-        existingTempFile = File.createTempFile("FiletypeTest.", ".tmp");
-        existingTempFile.deleteOnExit();
-        systemTempDir = System.getProperty("java.io.tmpdir");
-        final File tmpDir = new File(systemTempDir);
-        if (!tmpDir.isDirectory()) tmpDir.mkdir();
-        if (!tmpDir.isDirectory())
-            throw new RuntimeException("java.io.tmpdir (" + systemTempDir + ") is not a directory");
-    }
-
-    @Test
-    public void testFileReadingAndWriting() throws IOException {
-        String randomizedTestString = TEST_STRING + System.currentTimeMillis();
-        for (String ext : TEST_FILE_EXTENSIONS) {
-            File f = File.createTempFile(TEST_FILE_PREFIX, ext);
-            f.deleteOnExit();
-
-            OutputStream os = IOUtil.openFileForWriting(f);
-            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
-            writer.write(randomizedTestString);
-            writer.close();
-
-            InputStream is = IOUtil.openFileForReading(f);
-            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-            String line = reader.readLine();
-            Assert.assertEquals(randomizedTestString, line);
-        }
-    }
-
-    @Test(groups = {"unix"})
-    public void testGetCanonicalPath() throws IOException {
-        String tmpPath = System.getProperty("java.io.tmpdir");
-        String userName = System.getProperty("user.name");
-
-        if (tmpPath.endsWith(userName)) {
-            tmpPath = tmpPath.substring(0, tmpPath.length() - userName.length());
-        }
-
-        File tmpDir = new File(tmpPath, userName);
-        tmpDir.mkdir();
-        File actual = new File(tmpDir, "actual.txt");
-        ProcessExecutor.execute(new String[]{"touch", actual.getAbsolutePath()});
-        File symlink = new File(tmpDir, "symlink.txt");
-        ProcessExecutor.execute(new String[]{"ln", "-s", actual.getAbsolutePath(), symlink.getAbsolutePath()});
-        File lnDir = new File(tmpDir, "symLinkDir");
-        ProcessExecutor.execute(new String[]{"ln", "-s", tmpDir.getAbsolutePath(), lnDir.getAbsolutePath()});
-        File lnToActual = new File(lnDir, "actual.txt");
-        File lnToSymlink = new File(lnDir, "symlink.txt");
-
-
-        File files[] = {actual, symlink, lnToActual, lnToSymlink};
-        for (File f : files) {
-            Assert.assertEquals(IOUtil.getFullCanonicalPath(f), actual.getCanonicalPath());
-        }
-
-        actual.delete();
-        symlink.delete();
-        lnToActual.delete();
-        lnToSymlink.delete();
-        lnDir.delete();
-        tmpDir.delete();
-    }
-
-    @Test
-    public void testUtfWriting() throws IOException {
-        final String utf8 = new StringWriter().append((char) 168).append((char) 197).toString();
-        for (String ext : TEST_FILE_EXTENSIONS) {
-            final File f = File.createTempFile(TEST_FILE_PREFIX, ext);
-            f.deleteOnExit();
-
-            final BufferedWriter writer = IOUtil.openFileForBufferedUtf8Writing(f);
-            writer.write(utf8);
-            CloserUtil.close(writer);
-
-            final BufferedReader reader = IOUtil.openFileForBufferedUtf8Reading(f);
-            final String line = reader.readLine();
-            Assert.assertEquals(utf8, line, f.getAbsolutePath());
-
-            CloserUtil.close(reader);
-
-        }
-    }
-
-    @Test
-    public void slurpLinesTest() throws FileNotFoundException {
-        Assert.assertEquals(IOUtil.slurpLines(SLURP_TEST_FILE), SLURP_TEST_LINES);
-    }
-
-    @Test
-    public void slurpWhitespaceOnlyFileTest() throws FileNotFoundException {
-        Assert.assertEquals(IOUtil.slurp(FIVE_SPACES_THEN_A_NEWLINE_THEN_FIVE_SPACES_FILE), "     \n     ");
-    }
-
-    @Test
-    public void slurpEmptyFileTest() throws FileNotFoundException {
-        Assert.assertEquals(IOUtil.slurp(EMPTY_FILE), "");
-    }
-
-    @Test
-    public void slurpTest() throws FileNotFoundException {
-        Assert.assertEquals(IOUtil.slurp(SLURP_TEST_FILE), CollectionUtil.join(SLURP_TEST_LINES, SLURP_TEST_LINE_SEPARATOR));
-    }
-
-    @Test(dataProvider = "fileTypeTestCases")
-    public void testFileType(final String path, boolean expectedIsRegularFile) {
-        final File file = new File(path);
-        Assert.assertEquals(IOUtil.isRegularPath(file), expectedIsRegularFile);
-    }
-
-    @Test(dataProvider = "unixFileTypeTestCases", groups = {"unix"})
-    public void testFileTypeUnix(final String path, boolean expectedIsRegularFile) {
-        final File file = new File(path);
-        Assert.assertEquals(IOUtil.isRegularPath(file), expectedIsRegularFile);
-    }
-
-    @DataProvider(name = "fileTypeTestCases")
-    private Object[][] fileTypeTestCases() {
-        return new Object[][]{
-                {existingTempFile.getAbsolutePath(), Boolean.TRUE},
-                {systemTempDir, Boolean.FALSE}
-
-        };
-    }
-
-    @DataProvider(name = "unixFileTypeTestCases")
-    private Object[][] unixFileTypeTestCases() {
-        return new Object[][]{
-                {"/dev/null", Boolean.FALSE},
-                {"/dev/stdout", Boolean.FALSE},
-                {"/non/existent/file", Boolean.TRUE},
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/Iso8601DateTest.java b/src/test/java/htsjdk/samtools/util/Iso8601DateTest.java
deleted file mode 100644
index ce0ae08..0000000
--- a/src/test/java/htsjdk/samtools/util/Iso8601DateTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Date;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class Iso8601DateTest {
-    @Test
-    public void testBasic() {
-        final String dateStr = "2008-12-15";
-        Iso8601Date first = new Iso8601Date(dateStr);
-        String firstFormatted = first.toString();
-        Iso8601Date second = new Iso8601Date(firstFormatted);
-        Assert.assertEquals(first, second);
-        String secondFormatted = second.toString();
-        Assert.assertEquals(firstFormatted, secondFormatted);
-    }
-
-    @Test
-    public void testMillisecondTruncation() {
-        // Create a Date with milliseconds
-        final Date now = new Date();
-        if (now.getTime() % 1000 == 0) {
-            now.setTime(now.getTime() + 3);
-        }
-        Iso8601Date isoDate = new Iso8601Date(now);
-        Assert.assertEquals(isoDate.getTime() % 1000, 0);
-        Assert.assertEquals(isoDate.getTime() / 1000, now.getTime() / 1000);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/IupacTest.java b/src/test/java/htsjdk/samtools/util/IupacTest.java
deleted file mode 100644
index 64b78c0..0000000
--- a/src/test/java/htsjdk/samtools/util/IupacTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.BamFileIoUtils;
-import htsjdk.samtools.SAMFileHeader;
-import htsjdk.samtools.SAMFileWriter;
-import htsjdk.samtools.SAMFileWriterFactory;
-import htsjdk.samtools.SAMRecord;
-import htsjdk.samtools.SAMRecordIterator;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-
-public class IupacTest {
-    @Test(dataProvider = "basicDataProvider")
-    public void basic(final String tempFileExtension) throws Exception {
-        final File outputFile = File.createTempFile("iupacTest.", tempFileExtension);
-        outputFile.deleteOnExit();
-        final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(new SAMFileHeader(), false, outputFile);
-        final String bases1 = "=ACMGRSVTWYHKDBNA";
-        final String bases2 = "A=ACMGRSVTWYHKDBN"; // Test both high-order and low-order base encoding.
-        final byte[] quals = new byte[bases1.length()];
-        Arrays.fill(quals, (byte) 20);
-        final String[] reads = {bases1, bases1.toLowerCase(), bases2, bases2.toLowerCase()};
-        for (int i = 0; i < reads.length; ++i) {
-            final SAMRecord rec = new SAMRecord(writer.getFileHeader());
-            rec.setReadName("read" + i);
-            rec.setReadUnmappedFlag(true);
-            rec.setReadString(reads[i]);
-            rec.setBaseQualities(quals);
-            writer.addAlignment(rec);
-        }
-        writer.close();
-        final SamReader reader = SamReaderFactory.makeDefault().open(outputFile);
-        final SAMRecordIterator it = reader.iterator();
-        for (int i = 0; i < reads.length; ++i) {
-            final SAMRecord rec = it.next();
-            Assert.assertEquals(rec.getReadString(), reads[i].toUpperCase());
-        }
-        reader.close();
-    }
-
-    @DataProvider(name = "basicDataProvider")
-    public Object[][] basicDataProvider() {
-        return new Object[][]{
-                {BamFileIoUtils.BAM_FILE_EXTENSION},
-                {".sam"}
-        };
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/MergingIteratorTest.java b/src/test/java/htsjdk/samtools/util/MergingIteratorTest.java
deleted file mode 100644
index d36bb6d..0000000
--- a/src/test/java/htsjdk/samtools/util/MergingIteratorTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Queue;
-
-public class MergingIteratorTest {
-
-	private static class QueueBackedIterator<T> implements CloseableIterator<T> {
-
-		private final Iterator<T> backing;
-		QueueBackedIterator(final Queue<T> queue) {
-			this.backing = queue.iterator();
-		}
-
-		@Override
-		public void close() {
-			// no-op
-		}
-
-		@Override
-		public boolean hasNext() {
-			return backing.hasNext();
-		}
-
-		@Override
-		public T next() {
-			return backing.next();
-		}
-
-		@Override
-		public void remove() {
-			backing.remove();
-		}
-	}
-
-	private static final Comparator<Integer> INTEGER_COMPARATOR = new Comparator<Integer>() {
-		@Override
-		public int compare(Integer integer, Integer integer2) {
-			return integer - integer2;
-		}
-	};
-
-	@Test
-	public void testOrderingAndCompleteness() {
-		final Queue<Integer> queueOne = new LinkedList<Integer>();
-		queueOne.add(1);
-		queueOne.add(3);
-		queueOne.add(5);
-
-		final Queue<Integer> queueTwo = new LinkedList<Integer>();
-		queueTwo.add(2);
-		queueTwo.add(4);
-		queueTwo.add(6);
-
-		final Queue<Integer> queueThree = new LinkedList<Integer>();
-		queueThree.add(0);
-		queueThree.add(1);
-
-		final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
-		Collections.addAll(
-				iterators,
-				new QueueBackedIterator<Integer>(queueOne),
-				new QueueBackedIterator<Integer>(queueTwo),
-				new QueueBackedIterator<Integer>(queueThree));
-
-		final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
-				INTEGER_COMPARATOR,
-				iterators);
-
-		int count = 0;
-		int last = -1;
-		while (mergingIterator.hasNext()) {
-			final Integer integer = mergingIterator.next();
-			count++;
-			if (integer == 1) Assert.assertTrue(integer >= last);
-			else Assert.assertTrue(integer > last);
-			last = integer;
-		}
-
-		Assert.assertEquals(queueOne.size() + queueTwo.size() + queueThree.size(), count);
-	}
-
-	@Test
-	public void testIteratorsOfUnevenLength() {
-		final Queue<Integer> queueOne = new LinkedList<Integer>();
-		queueOne.add(1);
-		queueOne.add(3);
-		queueOne.add(5);
-		queueOne.add(7);
-		queueOne.add(9);
-		queueOne.add(11);
-		queueOne.add(13);
-
-		final Queue<Integer> queueTwo = new LinkedList<Integer>();
-		queueTwo.add(2);
-
-		final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
-		Collections.addAll(
-				iterators,
-				new QueueBackedIterator<Integer>(queueOne),
-				new QueueBackedIterator<Integer>(queueTwo));
-
-		final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
-				INTEGER_COMPARATOR,
-				iterators);
-
-		int count = 0;
-		int last = -1;
-		while (mergingIterator.hasNext()) {
-			final Integer integer = mergingIterator.next();
-			count++;
-			Assert.assertTrue(integer > last);
-			last = integer;
-		}
-
-		Assert.assertEquals(queueOne.size() + queueTwo.size(), count);
-	}
-
-	@Test(expectedExceptions = IllegalStateException.class)
-	public void testOutOfOrderIterators() {
-		final Queue<Integer> queueOne = new LinkedList<Integer>();
-		queueOne.add(1);
-		queueOne.add(3);
-
-		final Queue<Integer> queueTwo = new LinkedList<Integer>();
-		queueTwo.add(4);
-		queueTwo.add(2);
-
-		final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
-		Collections.addAll(
-				iterators,
-				new QueueBackedIterator<Integer>(queueOne),
-				new QueueBackedIterator<Integer>(queueTwo));
-
-		final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
-				INTEGER_COMPARATOR,
-				iterators);
-
-		Assert.assertEquals(mergingIterator.next().intValue(), 1);
-		Assert.assertEquals(mergingIterator.next().intValue(), 3);
-		Assert.assertEquals(mergingIterator.next().intValue(), 4);
-		mergingIterator.next(); // fails, because the next element would be "2"
-	}
-}
diff --git a/src/test/java/htsjdk/samtools/util/OverlapDetectorTest.java b/src/test/java/htsjdk/samtools/util/OverlapDetectorTest.java
deleted file mode 100644
index ecde965..0000000
--- a/src/test/java/htsjdk/samtools/util/OverlapDetectorTest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-public class OverlapDetectorTest {
-
-    @DataProvider(name="intervalsMultipleContigs")
-    public Object[][] intervalsMultipleContigs(){
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1", 10, 100),
-                new Interval("2", 200, 300)
-        );
-        final List<Locatable> empty = new ArrayList<>();
-        final List<Locatable> contig1 = Arrays.asList(
-                new Interval("1",  10, 100)
-        );
-        final List<Locatable> contig2 = Arrays.asList(
-                new Interval("2", 200, 300)
-        );
-
-        // returns input, query range, expected SimpleIntervals
-        return new Object[][] {
-                // we already test elsewhere that it works within a contig, so here we just have to make sure that
-                // it picks the correct contig and can deal with not-yet-mentioned contigs.
-                new Object[] {input, new Interval("1", 100, 200), contig1},
-                new Object[] {input, new Interval("1", 1, 5), empty},
-                new Object[] {input, new Interval("2", 100, 200), contig2},
-                new Object[] {input, new Interval("3", 100, 200), empty},
-        };
-    }
-
-    @Test(dataProvider = "intervalsMultipleContigs")
-    public void testOverlap(final List<Locatable> input, final Locatable query, final Collection<Locatable> expected) throws Exception {
-        final OverlapDetector<Locatable> targetDetector = new OverlapDetector<>(0, 0);
-        targetDetector.addAll(input, input);
-
-        final Collection<Locatable> actual = targetDetector.getOverlaps(query);
-        Assert.assertEquals(actual, expected);
-    }
-
-    @DataProvider(name="intervalsSameContig")
-    public Object[][] intervalsSameContig(){
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final List<Locatable> empty = new ArrayList<>();
-        final List<Locatable> manyOverlapping = Arrays.asList(
-                new Interval("1",10,100),
-                // special case: multiple intervals starting at the same place
-                new Interval("1",20,50),
-                new Interval("1",20,51),
-                new Interval("1",20,52)
-        );
-        final List<Locatable> mixInput = Arrays.asList(
-                // ends before query interval
-                new Interval("1",10,20),
-                // ends in query interval
-                new Interval("1",10,60),
-                // equal to query interval
-                new Interval("1",30,50),
-                // covered by query interval
-                new Interval("1",40,42),
-                // ends after query interval
-                new Interval("1",45,60),
-                // starts after query interval
-                new Interval("1",60,100)
-        );
-        final List<Locatable> mixExpected = Arrays.asList(
-                // ends in query interval
-                new Interval("1",10,60),
-                // equal to query interval
-                new Interval("1",30,50),
-                // covered by query interval
-                new Interval("1",40,42),
-                // ends after query interval
-                new Interval("1",45,60)
-        );
-        // returns input single SimpleInterval, query range, expected SimpleInterval
-        return new Object[][] {
-                // single-point boundary cases
-                new Object[] {input, new Interval("1", 10, 10), input},
-                new Object[] {input, new Interval("1", 100, 100), input},
-                new Object[] {input, new Interval("1", 9, 9), empty},
-                new Object[] {input, new Interval("1", 11, 11), input},
-                new Object[] {input, new Interval("1", 99, 99), input},
-                new Object[] {input, new Interval("1", 101, 101), empty},
-                // different contig
-                new Object[] {input, new Interval("2", 10, 100), empty},
-                // empty list boundary case
-                new Object[] {empty, new Interval("1", 101, 101), empty},
-                // input exactly matches the query interval
-                new Object[] {input, new Interval("1", 10, 100), input},
-                // multiple intervals in the same place (potential edge case for indexing)
-                new Object[] {manyOverlapping, new Interval("1", 20, 20), manyOverlapping},
-                // input with multiple intervals
-                new Object[] {mixInput, new Interval("1",30,50), mixExpected},
-                // input with multiple intervals , non overlapping query
-                new Object[] {mixInput, new Interval("1",300,500), empty},
-        };
-    }
-
-    @Test(dataProvider = "intervalsSameContig")
-    public void testOverlap(final List<Locatable> input, final Interval query, final List<Locatable> expected) throws Exception {
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-
-        final Set<Locatable> actual = targetDetector.getOverlaps(query);
-        Assert.assertEquals(actual, new HashSet<>(expected));
-
-        Assert.assertEquals(targetDetector.overlapsAny(query), !expected.isEmpty());
-
-        Assert.assertEquals(new HashSet<>(targetDetector.getAll()), new HashSet<>(input));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testOverlapsNullArg() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.overlapsAny(null);
-    }
-
-    @Test
-    public void testNoOverlapsAny() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,110)
-        );
-        final OverlapDetector<Locatable> trimmedTargetDetector = new OverlapDetector(20,20);
-        trimmedTargetDetector.addAll(input, input);
-        Assert.assertFalse(trimmedTargetDetector.overlapsAny( new Interval("1",50,85)));//no overlap because of trim
-        Assert.assertTrue(trimmedTargetDetector.getOverlaps( new Interval("1",50,85)).isEmpty());//no overlap because of trim
-
-        final OverlapDetector<Locatable> untrimmedTargetDetector = new OverlapDetector(0,0);
-        untrimmedTargetDetector.addAll(input, input);
-        Assert.assertTrue(untrimmedTargetDetector.overlapsAny( new Interval("1",50,85)));//overlaps - no trim
-    }
-
-    @Test
-    public void testLotsOfTinyIntervals() throws Exception {
-        final List<Locatable> input = new ArrayList<>();
-        final int n = 1000000;
-        for (int i = 0; i < n; i++) {
-            input.add(new Interval("1", 3*i+1, 3*i+2)); //1:1-2, 1:4-5, 1:7-8
-        }
-        final OverlapDetector<Locatable> detector = OverlapDetector.create(input);
-        final Set<Locatable> overlapping = detector.getOverlaps(new Interval("1", 1, 3 * n + 2));
-        Assert.assertEquals(new HashSet<>(input), overlapping);
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testAddAllDifferentSizes() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-
-        final List<Locatable> input1Interval = Arrays.asList(
-                new Interval("1",11,101)
-        );
-
-        final List<Locatable> input2Intervals = Arrays.asList(
-                new Interval("1",20,200),
-                new Interval("1",20,200)
-        );
-        targetDetector.addAll(input1Interval, input2Intervals);
-
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullObjectAddLHS() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.addLhs(null, new Interval("2",10,100));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullIntervalAddLHS() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.addLhs(new Interval("2",10,100), null);
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullObjectsAddAll() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.addAll(null, Arrays.asList(new Interval("2",10,100)));
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullIntervalsAddAll() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.addAll(Arrays.asList(new Interval("2",10,100)), null);
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testDifferentSizesAddAll() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        final List<Locatable> l1 = Arrays.asList(new Interval("2", 10, 100));
-        final List<Locatable> l2 = Arrays.asList(new Interval("2", 10, 100), new Interval("3", 10, 100));
-        targetDetector.addAll(l1, l2);
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testNullArgGetOverlaps() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> targetDetector = OverlapDetector.create(input);
-        targetDetector.getOverlaps(null);
-    }
-
-    @Test
-    public void testAddTwice() throws Exception {
-        final List<Locatable> input = Arrays.asList(
-                new Interval("1",10,100),
-                new Interval("1",10,100)
-        );
-        final OverlapDetector<Locatable> detector = OverlapDetector.create(input);
-        final Set<Locatable> overlaps = detector.getOverlaps(new Interval("1", 50, 200));
-        Assert.assertEquals(overlaps.size(), 1);
-        Assert.assertEquals(overlaps, Collections.singleton(new Interval("1",10,100)));
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/PositionalOutputStreamTest.java b/src/test/java/htsjdk/samtools/util/PositionalOutputStreamTest.java
deleted file mode 100644
index 49de11d..0000000
--- a/src/test/java/htsjdk/samtools/util/PositionalOutputStreamTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2015 Daniel Gómez-Sánchez
- *
- * 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.
- */
-
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * @author Daniel Gomez-Sanchez (magicDGS)
- */
-public class PositionalOutputStreamTest {
-
-    @Test
-    public void basicPositionTest() throws Exception {
-        // wrapped null output stream to check
-        final PositionalOutputStream wrapped = new PositionalOutputStream(new OutputStream() {
-            @Override
-            public void write(int b) throws IOException {}
-        });
-        int position = 0;
-        // check that we start at position 0
-        Assert.assertEquals(wrapped.getPosition(), position);
-        // check that write one int just add one
-        wrapped.write(100);
-        Assert.assertEquals(wrapped.getPosition(), ++position);
-        // check that write a byte array adds its length
-        final byte[] bytes = new byte[]{1, 3, 5, 7};
-        wrapped.write(bytes);
-        position += bytes.length;
-        Assert.assertEquals(wrapped.getPosition(), position);
-        // check that write just some bytes from an array adds its length
-        wrapped.write(bytes, 2, 2);
-        position += 2;
-        Assert.assertEquals(wrapped.getPosition(), position);
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/util/QualityEncodingDetectorTest.java b/src/test/java/htsjdk/samtools/util/QualityEncodingDetectorTest.java
deleted file mode 100644
index 9e014d7..0000000
--- a/src/test/java/htsjdk/samtools/util/QualityEncodingDetectorTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMException;
-import htsjdk.samtools.SAMRecordSetBuilder;
-import htsjdk.samtools.SamReader;
-import htsjdk.samtools.SamReaderFactory;
-import htsjdk.samtools.fastq.FastqReader;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-public class QualityEncodingDetectorTest {
-
-    private static class Testcase {
-        private final File f;
-        private final FastqQualityFormat q;
-
-        Testcase(final File file, final FastqQualityFormat qualityFormat) {
-            this.f = file;
-            this.q = qualityFormat;
-        }
-    }
-
-    final static List<Testcase> FASTQ_TESTCASES = Arrays.asList(
-            // Need to use full-range quality here, as Solexa and Illumina are near indistinguishable
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa_full_range_as_solexa.fastq"), FastqQualityFormat.Solexa),
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/s_1_sequence.txt"), FastqQualityFormat.Illumina),
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/5k-30BB2AAXX.3.aligned.sam.fastq"), FastqQualityFormat.Standard)
-    );
-    final static List<Testcase> BAM_TESTCASES = Arrays.asList(
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/unmapped.sam"), FastqQualityFormat.Standard),
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam"), FastqQualityFormat.Standard),
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa-as-standard.bam"), FastqQualityFormat.Solexa),
-            new Testcase(new File("./src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/illumina-as-standard.bam"), FastqQualityFormat.Illumina)
-
-    );
-
-    Object[][] renderObjectArrayArray(final List<Testcase> testcaseList) {
-        final Object[][] data = new Object[testcaseList.size()][];
-        for (int i = 0; i < data.length; i++) {
-            final Testcase testcase = testcaseList.get(i);
-            data[i] = new Object[]{testcase.f, testcase.q};
-        }
-        return data;
-    }
-
-    @DataProvider(name = "BAM_TESTCASES")
-    Object[][] bamTestcases() {
-        return renderObjectArrayArray(BAM_TESTCASES);
-    }
-
-    @DataProvider(name = "FASTQ_TESTCASES")
-    Object[][] fastqTestcases() {
-        return renderObjectArrayArray(FASTQ_TESTCASES);
-    }
-
-    @Test(dataProvider = "FASTQ_TESTCASES", groups = {"unix"})
-    public void testFastqQualityInference(final File input, final FastqQualityFormat expectedQualityFormat) {
-        final FastqReader reader = new FastqReader(input);
-        Assert.assertEquals(QualityEncodingDetector.detect(reader), expectedQualityFormat);
-        reader.close();
-    }
-
-    @Test(dataProvider = "BAM_TESTCASES", groups = {"unix"})
-    public void testBamQualityInference(final File input, final FastqQualityFormat expectedQualityFormat) {
-        final SamReader reader = SamReaderFactory.makeDefault().open(input);
-        Assert.assertEquals(QualityEncodingDetector.detect(reader), expectedQualityFormat);
-    }
-
-    @Test
-    public void testSmallBamForDetectorFailure() {
-        final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
-        Assert.assertNotSame(QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
-                null), FastqQualityFormat.Standard);
-    }
-
-    @Test
-    public void testSmallBamWithExpectedQuality() {
-        final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
-        Assert.assertEquals(QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
-                FastqQualityFormat.Standard), FastqQualityFormat.Standard);
-    }
-
-    @Test(expectedExceptions = SAMException.class)
-    public void testQualitySanity() {
-        final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
-        QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
-                FastqQualityFormat.Illumina);
-    }
-
-    private SAMRecordSetBuilder createSmallUnmappedSam() {
-        final SAMRecordSetBuilder samRecordSetBuilder = new SAMRecordSetBuilder();
-        samRecordSetBuilder.setReadLength(25);
-        samRecordSetBuilder.addFrag("READ0", -1, -1, false, true, null, "@@@FFFFFHHHHHJIJIIJIIJJJJ", -1);
-        samRecordSetBuilder.addFrag("READ1", -1, -1, false, true, null, "@@@FFFFFHHHHHJIJIIJIIJJJJ", -1);
-        samRecordSetBuilder.addFrag("READ2", -1, -1, false, true, null, "@CCFDFEDHHHFFHIIII at GH<FFH", -1);
-        samRecordSetBuilder.addFrag("READ3", -1, -1, false, true, null, "@@?DFFDFHFFHDHIIHIIEIIJGG", -1);
-        samRecordSetBuilder.addFrag("READ4", -1, -1, false, true, null, "@CCFFDDFHHHHHIIJJHFJJJJJH", -1);
-        samRecordSetBuilder.addFrag("READ5", -1, -1, false, true, null, "BCCFFFFFHHHHHJJJJJIJJJJJJ", -1);
-        samRecordSetBuilder.addFrag("READ6", -1, -1, false, true, null, "@@CDFFFFHHHFHHIJJJJJJJIJJ", -1);
-        samRecordSetBuilder.addFrag("READ7", -1, -1, false, true, null, "CCCFFFFFHHHHHJJJJIJJJJHII", -1);
-        samRecordSetBuilder.addFrag("READ8", -1, -1, false, true, null, "CCCFFFFFHHHHHJJJJJJJJJJJJ", -1);
-        return samRecordSetBuilder;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/RelativeIso8601DateTest.java b/src/test/java/htsjdk/samtools/util/RelativeIso8601DateTest.java
deleted file mode 100644
index e4e9ef9..0000000
--- a/src/test/java/htsjdk/samtools/util/RelativeIso8601DateTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-/** @author mccowan */
-
-public class RelativeIso8601DateTest {
-
-    // 1 second resolution is ISO date
-    private final static double DELTA_FOR_TIME = 1000;
-
-    @Test
-    public void testLazyInstance() {
-        final RelativeIso8601Date lazy = RelativeIso8601Date.generateLazyNowInstance();
-        Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
-        Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
-        Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
-        Assert.assertEquals(lazy.getTime(), new Iso8601Date(new Date(System.currentTimeMillis())).getTime(), DELTA_FOR_TIME);
-        // Assert no exception thrown; this should be valid, because toString should now return an iso-looking date.
-        new Iso8601Date(lazy.toString());
-    }
-
-    @Test
-    public void testNonLazyInstance() {
-        final long time = new Iso8601Date(new Date(System.currentTimeMillis())).getTime(); // ISO strips off milliseconds
-
-        // Test both constructor methods
-        final List<RelativeIso8601Date> testDates = Arrays.<RelativeIso8601Date>asList(
-                new RelativeIso8601Date(new Date(time)),
-                new RelativeIso8601Date(new Iso8601Date(new Date(time)).toString())
-        );
-
-        for (final RelativeIso8601Date nonLazy : testDates) {
-            Assert.assertFalse(nonLazy.toString().equals(RelativeIso8601Date.LAZY_NOW_LABEL));
-            Assert.assertEquals((double) nonLazy.getTime(), (double) time, DELTA_FOR_TIME);
-            // Assert no exception thrown; this should be valid, because toString return an iso-looking date.
-            new RelativeIso8601Date(nonLazy.toString());
-        }
-    }
-
-    @Test
-    public void equalityTest() {
-        final String s = new Iso8601Date(new Date(12345)).toString();
-        final Iso8601Date iso8601Date = new Iso8601Date(s);
-        final RelativeIso8601Date relativeIso8601Date = new RelativeIso8601Date(s);
-        Assert.assertEquals(relativeIso8601Date.getTime(), iso8601Date.getTime(), DELTA_FOR_TIME);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/SamLocusIteratorTest.java b/src/test/java/htsjdk/samtools/util/SamLocusIteratorTest.java
deleted file mode 100644
index 262b7c9..0000000
--- a/src/test/java/htsjdk/samtools/util/SamLocusIteratorTest.java
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * @author alecw at broadinstitute.org
- * @author Mariia_Zueva at epam.com, EPAM Systems, Inc. <www.epam.com>
- */
-public class SamLocusIteratorTest extends AbstractLocusIteratorTestTemplate {
-
-    /** Create the SamLocusIterator with the builder*/
-    private SamLocusIterator createSamLocusIterator(final SAMRecordSetBuilder builder) {
-        final SamLocusIterator ret = new SamLocusIterator(builder.getSamReader());
-        ret.setEmitUncoveredLoci(false);
-        return ret;
-    }
-
-    /**
-     * Test a simple with only matches, with both including or not indels
-     */
-    @Override
-    @Test
-    public void testBasicIterator() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", null, 10);
-        }
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getPosition(), pos++);
-                Assert.assertEquals(li.getRecordAndPositions().size(), coverage);
-                Assert.assertEquals(li.size(), coverage);
-                // make sure that we are not accumulating indels
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-            }
-        }
-    }
-
-    @Test
-    public void testMissingQualityString() {
-
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", "*", 0);
-        }
-        final SamLocusIterator sli = createSamLocusIterator(builder);
-
-        // make sure we accumulated depth of 2 for each position
-        int pos = 165;
-        for (final SamLocusIterator.LocusInfo li : sli) {
-            Assert.assertEquals(li.getPosition(), pos++);
-            Assert.assertEquals(li.getRecordAndPositions().size(), 2);
-            Assert.assertEquals(li.size(), 2);
-        }
-    }
-
-    /**
-     * Test the emit uncovered loci, with both including or not indels
-     */
-    @Override
-    @Test
-    public void testEmitUncoveredLoci() {
-
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", null, 10);
-        }
-
-        final int coveredEnd = CoordMath.getEnd(startPosition, readLength);
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setEmitUncoveredLoci(true);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth of 2 for each position
-            int pos = 1;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getPosition(), pos++);
-                final int expectedReads;
-                if (li.getPosition() >= startPosition && li.getPosition() <= coveredEnd) {
-                    expectedReads = coverage;
-                } else {
-                    expectedReads = 0;
-                }
-                Assert.assertEquals(li.getRecordAndPositions().size(), expectedReads);
-                Assert.assertEquals(li.size(), expectedReads);
-                // make sure that we are not accumulating indels
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-            }
-            Assert.assertEquals(pos, header.getSequence(0).getSequenceLength() + 1);
-        }
-    }
-
-    /**
-     * Test the quality filter, with both including or not indels
-     */
-    @Test
-    public void testQualityFilter() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            final String qualityString;
-            // half of the reads have a different quality
-            if (i % 2 == 0) {
-                qualityString = null;
-            } else {
-                qualityString = "+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*";
-            }
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "36M", qualityString, 10);
-        }
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setQualityScoreCutoff(10);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth coverage for even positions, coverage/2 for odd positions
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getRecordAndPositions().size(), (pos % 2 == 0) ? coverage / 2 : coverage);
-                Assert.assertEquals(li.size(), (pos % 2 == 0) ? coverage / 2 : coverage);
-                Assert.assertEquals(li.getPosition(), pos++);
-                // make sure that we are not accumulating indels
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-            }
-        }
-    }
-
-    /**
-     * Test a simple deletion, with both including or not indels
-     */
-    @Test
-    public void testSimpleDeletion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "18M10D18M", null, 10);
-        }
-        final int deletionStart = 183;
-        final int deletionEnd = 192;
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                boolean isDeletedPosition = (pos >= deletionStart && pos <= deletionEnd);
-                if (!incIndels && isDeletedPosition) {
-                    pos = deletionEnd + 1;
-                    isDeletedPosition = false;
-                }
-                Assert.assertEquals(li.getPosition(), pos++);
-                if (isDeletedPosition) {
-                    // make sure there are no reads without indels
-                    Assert.assertEquals(li.getRecordAndPositions().size(), 0);
-                    Assert.assertEquals(li.size(), coverage); // should include deletions
-
-                    // make sure that we are accumulating indels
-                    Assert.assertEquals(li.getDeletedInRecord().size(), coverage);
-                    Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-                } else {
-                    // make sure we are accumulating normal coverage
-                    Assert.assertEquals(li.getRecordAndPositions().size(), coverage);
-                    Assert.assertEquals(li.size(), coverage);
-
-                    // make sure that we are not accumulating indels
-                    Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                    Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-                }
-            }
-        }
-    }
-
-    /**
-     * Test a simple insertion, with both including or not indels
-     */
-    @Test
-    public void testSimpleInsertion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "30M3I3M", null, 10);
-        }
-        final int insStart = 194;
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getPosition(), pos++);
-                // make sure we are accumulating normal coverage
-                Assert.assertEquals(li.getRecordAndPositions().size(), coverage);
-                Assert.assertEquals(li.size(), coverage);
-
-                // make sure that we are not accumulating deletions
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                if (incIndels && li.getPosition() == insStart) {
-                    Assert.assertEquals(li.getInsertedInRecord().size(), coverage);
-                } else {
-                    Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-                }
-            }
-        }
-    }
-
-    /**
-     * Test an insertion at the start of the read, with both including or not indels
-     */
-    @Test
-    public void testStartWithInsertion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "3I33M", null, 10);
-        }
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = (incIndels) ? startPosition - 1 : startPosition;
-            boolean indelPosition = incIndels;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getPosition(), pos);
-                // accumulation of coverage
-                Assert.assertEquals(li.getRecordAndPositions().size(), (indelPosition) ? 0 : coverage);
-                Assert.assertEquals(li.size(), (indelPosition) ? 0 : coverage);
-
-                // no accumulation of deletions
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                // accumulation of insertion
-                Assert.assertEquals(li.getInsertedInRecord().size(), (indelPosition) ? coverage : 0);
-                // check offsets of the insertion
-                if (indelPosition) {
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 0);
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 0);
-                    indelPosition = false;
-                }
-                pos++;
-            }
-        }
-    }
-
-    /**
-     * Test an insertion at the start of a soft-clipped read, with both including or not indels
-     */
-    @Test
-    public void testStartWithSoftClipAndInsertion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "1S3I32M", null, 10);
-        }
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = (incIndels) ? startPosition - 1 : startPosition;
-            boolean indelPosition = incIndels;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                Assert.assertEquals(li.getPosition(), pos);
-                // accumulation of coverage
-                Assert.assertEquals(li.getRecordAndPositions().size(), (indelPosition) ? 0 : coverage);
-                Assert.assertEquals(li.size(), (indelPosition) ? 0 : coverage);
-                // no accumulation of deletions
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                // accumulation of insertion
-                Assert.assertEquals(li.getInsertedInRecord().size(), (indelPosition) ? coverage : 0);
-                // check offsets of the insertion
-                if (indelPosition) {
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 1);
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 1);
-                    indelPosition = false;
-                }
-                pos++;
-            }
-        }
-    }
-
-    /**
-     * Test an insertion after N in CIGAR
-     */
-    @Test
-    public void testNBeforeInsertion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "2M4N3I27M", null, 10);
-        }
-        final int startN = 167;
-        final int endN = 170;
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                // skipping Ns
-                if (pos >= startN && pos <= endN) {
-                    pos = (incIndels) ? endN : endN + 1;
-                }
-                Assert.assertEquals(li.getPosition(), pos);
-                // accumulation of coverage
-                Assert.assertEquals(li.getRecordAndPositions().size(), (pos == endN) ? 0 : coverage);
-                Assert.assertEquals(li.size(), (pos == endN) ? 0 : coverage);
-                // no accumulation of deletions
-                Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                // accumulation of insertion
-                Assert.assertEquals(li.getInsertedInRecord().size(), (pos == endN) ? coverage : 0);
-                // check offsets of the insertion
-                if (pos == endN) {
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 2);
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 2);
-                }
-                pos++;
-            }
-        }
-    }
-
-    /**
-     * Test a deletion after N in CIGAR
-     */
-    @Test
-    public void testNBeforeDeletion() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "2M4N4D5M", null, 10);
-        }
-        final int startN = 167;
-        final int endN = 170;
-        final int startDel = 171;
-        final int endDel = 174;
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-            // make sure we accumulated depth for each position
-            int pos = startPosition;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                if (pos >= startN && pos <= endN) {
-                    if (incIndels) {
-                        // skipping Ns
-                        pos = endN + 1;
-                    } else {
-                        // skip deletions
-                        pos = endDel + 1;
-                    }
-                }
-                final boolean insideDeletion = incIndels && (pos >= startDel && pos <= endDel);
-                Assert.assertEquals(li.getPosition(), pos);
-                // accumulation of coverage
-                Assert.assertEquals(li.getRecordAndPositions().size(), (insideDeletion) ? 0 : coverage);
-                Assert.assertEquals(li.size(), coverage); // either will be all deletions, or all non-deletions, but always of size `coverage`.
-                // accumulation of deletions
-                Assert.assertEquals(li.getDeletedInRecord().size(), (insideDeletion) ? coverage : 0);
-                // no accumulation of insertion
-                Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-                // check offsets of the insertion
-                if (pos == endN) {
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 2);
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), 2);
-                }
-                pos++;
-            }
-        }
-    }
-
-    /**
-     * Try all CIGAR operands (except H and P) and confirm that loci produced by SamLocusIterator are as expected,
-     * with both including or not indels
-     */
-    @Override
-    @Test
-    public void testSimpleGappedAlignment() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        for (int i = 0; i < coverage; i++) {
-            // add a negative-strand fragment mapped on chrM with base quality of 10
-            builder.addFrag("record" + i, 0, startPosition, true, false, "3S3M3N3M3D3M3I18M3S", null, 10);
-        }
-
-        // make sure we accumulated depth of 2 for each position
-        final int[] expectedPositions = new int[]{
-                // 3S
-                165, 166, 167, // 3M
-                // 3N
-                171, 172, 173, // 3M
-                174, 175, 176, // 3D
-                177, 178, 179, // 3M
-                // 3I
-                180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197}; // 18M
-
-        final int[] expectedReadOffsets = new int[]{
-                // 3S
-                3, 4, 5, // 3M
-                // 3N
-                6, 7, 8, // 3M
-                8, 8, 8, // 3D previous 0-based offset
-                9, 10, 11, // 3M
-                // 3I
-                15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 // 3M
-        };
-
-        // to check the range of the insertion
-        final int firstDelBase = 174;
-        final int lastDelBase = 176;
-
-        final int expectedInsertionPosition = 179; // previous reference base
-        final int expectedInsertionOffset = 12; // first read base in the insertion
-
-        // test both for include indels and do not include indels
-        for (final boolean incIndels : new boolean[] {false, true}) {
-            final SamLocusIterator sli = createSamLocusIterator(builder);
-            sli.setIncludeIndels(incIndels);
-
-            int i = 0;
-            for (final SamLocusIterator.LocusInfo li : sli) {
-                // check if it is in the deletion range
-                boolean inDelRange = (expectedPositions[i] >= firstDelBase && expectedPositions[i] <= lastDelBase);
-                // if we are not including indels, the expected position index change if it is in an deletion range
-                if (!incIndels && inDelRange) {
-                    i += 3;
-                    inDelRange = false; // set to false to do not check the range of deletions
-                }
-                // check if the LocusInfo is the expected
-                Assert.assertEquals(li.getPosition(), expectedPositions[i]);
-                // check the insertions
-                if (incIndels && li.getPosition() == expectedInsertionPosition) {
-                    // check the accumulated coverage
-                    Assert.assertEquals(li.getInsertedInRecord().size(), coverage);
-                    // check the record offset
-                    Assert.assertEquals(li.getInsertedInRecord().get(0).getOffset(), expectedInsertionOffset);
-                    Assert.assertEquals(li.getInsertedInRecord().get(1).getOffset(), expectedInsertionOffset);
-                } else {
-                    Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-                }
-                // check the range of deletions
-                if (inDelRange) {
-                    // check the coverage for insertion and normal records
-                    Assert.assertEquals(li.getDeletedInRecord().size(), coverage);
-                    Assert.assertEquals(li.getRecordAndPositions().size(), 0);
-                    Assert.assertEquals(li.size(), coverage); // includes deletions
-                    // check the offset for the deletion
-                    Assert.assertEquals(li.getDeletedInRecord().get(0).getOffset(), expectedReadOffsets[i]);
-                    Assert.assertEquals(li.getDeletedInRecord().get(1).getOffset(), expectedReadOffsets[i]);
-                } else {
-                    // if it is not a deletion, perform the same test as before
-                    Assert.assertEquals(li.getRecordAndPositions().size(), coverage);
-                    Assert.assertEquals(li.size(), coverage);
-                    // Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-                    Assert.assertEquals(li.getRecordAndPositions().get(0).getOffset(), expectedReadOffsets[i]);
-                    Assert.assertEquals(li.getRecordAndPositions().get(1).getOffset(), expectedReadOffsets[i]);
-                }
-                ++i;
-            }
-        }
-
-
-    }
-
-    /**
-     * Test two reads that overlap because one has a deletion in the middle of it, without tracking indels
-     */
-    @Override
-    @Test
-    public void testOverlappingGappedAlignmentsWithoutIndels() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        // Were it not for the gap, these two reads would not overlap
-        builder.addFrag("record1", 0, startPosition, true, false, "18M10D18M", null, 10);
-        builder.addFrag("record2", 0, 206, true, false, "36M", null, 10);
-
-        final SamLocusIterator sli = createSamLocusIterator(builder);
-
-        // 5 base overlap btw the two reads
-        final int numBasesCovered = 36 + 36 - 5;
-        final int[] expectedReferencePositions = new int[numBasesCovered];
-        final int[] expectedDepths = new int[numBasesCovered];
-        final int[][] expectedReadOffsets = new int[numBasesCovered][];
-
-        int i;
-        // First 18 bases are from the first read
-        for (i = 0; i < 18; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 1;
-            expectedReadOffsets[i] = new int[]{i};
-        }
-        // Gap of 10, then 13 bases from the first read
-        for (; i < 36 - 5; ++i) {
-            expectedReferencePositions[i] = startPosition + 10 + i;
-            expectedDepths[i] = 1;
-            expectedReadOffsets[i] = new int[]{i};
-        }
-        // Last 5 bases of first read overlap first 5 bases of second read
-        for (; i < 36; ++i) {
-            expectedReferencePositions[i] = startPosition + 10 + i;
-            expectedDepths[i] = 2;
-            expectedReadOffsets[i] = new int[]{i, i - 31};
-
-        }
-        // Last 31 bases of 2nd read
-        for (; i < 36 + 36 - 5; ++i) {
-            expectedReferencePositions[i] = startPosition + 10 + i;
-            expectedDepths[i] = 1;
-            expectedReadOffsets[i] = new int[]{i - 31};
-        }
-
-        i = 0;
-        for (final SamLocusIterator.LocusInfo li : sli) {
-            Assert.assertEquals(li.getRecordAndPositions().size(), expectedDepths[i]);
-            Assert.assertEquals(li.size(), expectedDepths[i]);
-            Assert.assertEquals(li.getPosition(), expectedReferencePositions[i]);
-            Assert.assertEquals(li.getRecordAndPositions().size(), expectedReadOffsets[i].length);
-            for (int j = 0; j < expectedReadOffsets[i].length; ++j) {
-                Assert.assertEquals(li.getRecordAndPositions().get(j).getOffset(), expectedReadOffsets[i][j]);
-            }
-            // make sure that we are not accumulating indels
-            Assert.assertEquals(li.getDeletedInRecord().size(), 0);
-            Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-            ++i;
-        }
-    }
-
-    /**
-     * Test two reads that overlap because one has a deletion in the middle of it, tracking indels
-     */
-    @Test
-    public void testOverlappingGappedAlignmentsWithIndels() {
-        final SAMRecordSetBuilder builder = getRecordBuilder();
-        // add records up to coverage for the test in that position
-        final int startPosition = 165;
-        // Were it not for the gap, these two reads would not overlap
-        builder.addFrag("record1", 0, startPosition, true, false, "18M10D18M", null, 10);
-        builder.addFrag("record2", 0, 206, true, false, "36M", null, 10);
-
-        final SamLocusIterator sli = createSamLocusIterator(builder);
-        sli.setIncludeIndels(true);
-
-        // 46 for the gapped alignment, and 5 base overlap btw the two reads
-        final int numBasesCovered = 46 + 36 - 5;
-        final int[] expectedReferencePositions = new int[numBasesCovered];
-        final int[] expectedDepths = new int[numBasesCovered];
-        final int[] expectedDelDepths = new int[numBasesCovered];
-        final int[][] expectedReadOffsets = new int[numBasesCovered][];
-        final int expectedDelOffset = 17; // previous 0-based offset
-
-        int i;
-        // First 18 bases are from the first read
-        for (i = 0; i < 18; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 1;
-            expectedDelDepths[i] = 0;
-            expectedReadOffsets[i] = new int[]{i};
-        }
-        // Gap of 10
-        for (; i < 18 + 10; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 0;
-            expectedDelDepths[i] = 1;
-            expectedReadOffsets[i] = new int[0];
-        }
-        // the next bases for the first read (without the 5 overlapping)
-        for (; i < 46 - 5; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 1;
-            expectedDelDepths[i] = 0;
-            expectedReadOffsets[i] = new int[]{i - 10};
-        }
-        // last 5 bases of the first read overlap first 5 bases of second read
-        for (; i < 46; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 2;
-            expectedDelDepths[i] = 0;
-            expectedReadOffsets[i] = new int[]{i - 10, i + 10 - 46 - 5};
-        }
-        // Last 31 bases of 2nd read
-        for (; i < numBasesCovered; ++i) {
-            expectedReferencePositions[i] = startPosition + i;
-            expectedDepths[i] = 1;
-            expectedDelDepths[i] = 0;
-            expectedReadOffsets[i] = new int[]{i + 10 - 46 - 5};
-        }
-        i = 0;
-        for (final SamLocusIterator.LocusInfo li : sli) {
-            // checking the same as without indels
-            Assert.assertEquals(li.getRecordAndPositions().size(), expectedDepths[i]);
-            Assert.assertEquals(li.size(), expectedDepths[i] + expectedDelDepths[i]); // include deletions
-            Assert.assertEquals(li.getPosition(), expectedReferencePositions[i]);
-            Assert.assertEquals(li.getRecordAndPositions().size(), expectedReadOffsets[i].length);
-            for (int j = 0; j < expectedReadOffsets[i].length; ++j) {
-                Assert.assertEquals(li.getRecordAndPositions().get(j).getOffset(), expectedReadOffsets[i][j]);
-            }
-            // check the deletions
-            Assert.assertEquals(li.getDeletedInRecord().size(), expectedDelDepths[i]);
-            if (expectedDelDepths[i] != 0) {
-                Assert.assertEquals(li.getDeletedInRecord().get(0).getOffset(), expectedDelOffset);
-            }
-            // checking that insertions are not accumulating
-            Assert.assertEquals(li.getInsertedInRecord().size(), 0);
-            ++i;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/samtools/util/SequenceUtilTest.java b/src/test/java/htsjdk/samtools/util/SequenceUtilTest.java
deleted file mode 100644
index 008cca5..0000000
--- a/src/test/java/htsjdk/samtools/util/SequenceUtilTest.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import htsjdk.samtools.*;
-import htsjdk.samtools.reference.ReferenceSequence;
-import htsjdk.samtools.reference.ReferenceSequenceFile;
-import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SequenceUtilTest {
-    private static final String HEADER = "@HD\tVN:1.0\tSO:unsorted\n";
-    private static final String SEQUENCE_NAME=
-        "@SQ\tSN:phix174.seq\tLN:5386\tUR:/seq/references/PhiX174/v0/PhiX174.fasta\tAS:PhiX174\tM5:3332ed720ac7eaa9b3655c06f6b9e196";
-
-    @Test
-    public void testExactMatch() {
-        final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
-    }
-
-    @DataProvider
-    public Object[][] compatibleNonEqualLists(){
-        final String s = HEADER +
-                String.format("@SQ\tSN:phix174.seq\tLN:%d\tUR:%s\tAS:PhiX174\tM5:%s\n", 5386, "/seq/references/PhiX174/v0/PhiX174.fasta", "3332ed720ac7eaa9b3655c06f6b9e196")+
-                String.format("@SQ\tSN:phix175.seq\tLN:%d\tUR:%s\tAS:HiMom\tM5:%s\n", 5385, "/seq/references/PhiX174/v0/HiMom.fasta", "deadbeed");
-
-        return new Object[][]{ {makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196"),
-                new SAMTextHeaderCodec().decode(new StringLineReader(s), null).getSequenceDictionary()}};
-    }
-
-    @Test(dataProvider = "compatibleNonEqualLists")
-    public void testCompatible(SAMSequenceDictionary sd1, SAMSequenceDictionary sd2) {
-         SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2, true);
-    }
-
-    @Test(dataProvider = "compatibleNonEqualLists",expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
-    public void testinCompatible(SAMSequenceDictionary sd1, SAMSequenceDictionary sd2) {
-        SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2, false);
-    }
-
-    @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
-    public void testMismatch() {
-        final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "deadbeef");
-        SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
-        Assert.fail();
-    }
-
-    @Test
-    public void testFileColonDifference() {
-        final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "file:/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
-    }
-
-    @Test
-    public void testURDifferent() {
-        final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "file:/seq/references/PhiX174/v1/PhiX174.fasta",
-                "3332ed720ac7eaa9b3655c06f6b9e196");
-        SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
-    }
-
-    private SAMSequenceDictionary makeSequenceDictionary(final int length, final String ur, final String m5) {
-        final String s = HEADER +
-                String.format("@SQ\tSN:phix174.seq\tLN:%d\tUR:%s\tAS:PhiX174\tM5:%s\n", length, ur, m5);
-        return new SAMTextHeaderCodec().decode(new StringLineReader(s), null).getSequenceDictionary();
-    }
-
-    @Test(dataProvider = "makeReferenceFromAlignment")
-    public void testMakeReferenceFromAlignment(final String seq, final String cigar, final String md,
-                                               boolean includeReferenceBasesForDeletions,
-                                               final String expectedReference) {
-        final SAMRecord rec = new SAMRecord(null);
-        rec.setReadName("test");
-        rec.setReadString(seq);
-        rec.setCigarString(cigar);
-        rec.setAttribute(SAMTag.MD.name(), md);
-        final byte[] refBases = SequenceUtil.makeReferenceFromAlignment(rec, includeReferenceBasesForDeletions);
-        Assert.assertEquals(StringUtil.bytesToString(refBases), expectedReference);
-    }
-
-    @DataProvider(name = "makeReferenceFromAlignment")
-    public Object[][] testMakeReferenceFromAlignmentDataProvider() {
-        return new Object[][] {
-               {"ACGTACGTACGT", "12M2H", "4GAAA4", true, "ACGTGAAAACGT"},
-                {"ACGTACGTACGT", "2H12M", "12", false, "ACGTACGTACGT"},
-                {"ACGTACGTACGT", "4M4I4M2H", "8", false, "ACGT----ACGT"},
-                {"ACGTACGTACGT", "2S4M2I4M2S", "8", false, "00GTAC--ACGT00"},
-                {"ACGTACGTACGT", "6M2D6M2H", "4GA^TT0TG4", true, "ACGTGATTTGACGT"},
-                {"ACGTACGTACGT", "6M2D6M2H", "4GA^TT0TG4", false, "ACGTGATGACGT"},
-                // When CIGAR has N, MD will not have skipped bases.
-                {"ACGTACGTACGT", "6M2N6M2H", "4GA0TG4", true, "ACGTGANNTGACGT"},
-                {"ACGTACGTACGT", "6M2N6M2H", "4GA0TG4", false, "ACGTGATGACGT"},
-                {"ACGTACGTACGT", "6M2N6M2H", "4GATG4", true, "ACGTGANNTGACGT"},
-                {"ACGTACGTACGT", "6M2N6M2H", "4GATG4", false, "ACGTGATGACGT"},
-        };
-    }
-
-    @Test(dataProvider = "mismatchCountsDataProvider")
-    public void testCountMismatches(final String readString, final String cigar, final String reference,
-                                    final int expectedMismatchesExact, final int expectedMismatchesAmbiguous) {
-        final SAMRecord rec = new SAMRecord(null);
-        rec.setReadName("test");
-        rec.setReadString(readString);
-        rec.setCigarString(cigar);
-
-        final byte[] refBases = StringUtil.stringToBytes(reference);
-
-        final int nExact = SequenceUtil.countMismatches(rec, refBases, -1, false, false);
-        Assert.assertEquals(nExact, expectedMismatchesExact);
-
-        final int nAmbiguous = SequenceUtil.countMismatches(rec, refBases, -1, false, true);
-        Assert.assertEquals(nAmbiguous, expectedMismatchesAmbiguous);
-    }
-
-    @DataProvider(name="mismatchCountsDataProvider")
-    public Object[][] testMakeMismatchCountsDataProvider() {
-        // note: R=A|G
-        return new Object[][] {
-                {"A", "1M", "A", 0, 0},
-                {"A", "1M", "R", 1, 0},
-                {"G", "1M", "R", 1, 0},
-                {"C", "1M", "R", 1, 1},
-                {"T", "1M", "R", 1, 1},
-                {"N", "1M", "R", 1, 1},
-                {"R", "1M", "A", 1, 1},
-                {"R", "1M", "C", 1, 1},
-                {"R", "1M", "G", 1, 1},
-                {"R", "1M", "T", 1, 1},
-                {"R", "1M", "N", 1, 0},
-                {"R", "1M", "R", 0, 0},
-                {"N", "1M", "N", 0, 0}
-        };
-    }
-
-    @Test(dataProvider = "countInsertedAndDeletedBasesTestCases")
-    public void testCountInsertedAndDeletedBases(final String cigarString, final int insertedBases, final int deletedBases) {
-        final Cigar cigar = TextCigarCodec.decode(cigarString);
-        Assert.assertEquals(SequenceUtil.countInsertedBases(cigar), insertedBases);
-        Assert.assertEquals(SequenceUtil.countDeletedBases(cigar), deletedBases);
-    }
-
-    @DataProvider(name = "countInsertedAndDeletedBasesTestCases")
-    public Object[][] countInsertedAndDeletedBasesTestCases() {
-        return new Object[][] {
-                {"2H2S32M", 0, 0},
-                {"2H2S32M12I2M2I3M", 14, 0},
-                {"32M2D10M", 0, 2},
-                {"32M2D10M3D1M", 0, 5},
-                {"2H2S32M12I2M3D1M2I3M2D1M", 14, 5}
-        };
-    }
-
-    @DataProvider(name = "testKmerGenerationTestCases")
-    public Object[][] testKmerGenerationTestCases() {
-        return new Object[][] {
-                {0, new String[]{""}},
-                {1, new String[]{"A","C","G","T"}},
-                {2, new String[]{"AA","AC","AG","AT","CA","CC","CG","CT","GA","GC","GG","GT","TA","TC","TG","TT"}}
-        };
-    }
-
-    @Test(dataProvider = "testKmerGenerationTestCases")
-    public void testKmerGeneration(final int length, final String[] expectedKmers) {
-        final Set<String> actualSet = new HashSet<String>();
-        for (final byte[] kmer : SequenceUtil.generateAllKmers(length)) {
-            actualSet.add(StringUtil.bytesToString(kmer));
-        }
-        final Set<String> expectedSet = new HashSet<String>(Arrays.asList(expectedKmers));
-        Assert.assertTrue(actualSet.equals(expectedSet));
-    }
-
-    @DataProvider(name = "testBisulfiteConversionDataProvider")
-    public Object[][] testBisulfiteConversionDataProvider() {
-        // C ref -> T read on the positive strand, and G ref -> A read on the negative strand
-        return new Object[][] {
-                {'C', 'T', false, false},
-                {'C', 'A', false, false},
-                {'C', 'C', false, false},
-                {'T', 'C', true, false},
-                {'G', 'T', false, false},
-                {'G', 'A', false, false},
-                {'G', 'G', false, false},
-                {'A', 'G', false, true}
-        };
-    }
-
-    @Test(dataProvider = "testBisulfiteConversionDataProvider")
-    public void testBisulfiteConversion(final char readBase, final char refBase, final boolean posStrandExpected, final boolean negStrandExpected) {
-        final boolean posStrand = SequenceUtil.isBisulfiteConverted((byte) readBase, (byte) refBase, false);
-        Assert.assertEquals(posStrand, posStrandExpected);
-        final boolean negStrand = SequenceUtil.isBisulfiteConverted((byte) readBase, (byte) refBase, true);
-        Assert.assertEquals(negStrand, negStrandExpected);
-    }
-
-    @Test(dataProvider = "basesEqualDataProvider")
-    public void testBasesEqual(final char base1, final char base2,
-                               final boolean expectedB1EqualsB2,
-                               final boolean expectedB1ReadMatchesB2Ref,
-                               final boolean expectedB2ReadMatchesB1Ref) {
-
-        final char[] base1UcLc = new char[] { toUpperCase(base1), toLowerCase(base1) };
-        final char[] base2UcLc = new char[] { toUpperCase(base2), toLowerCase(base2) };
-        // Test over all permutations - uc vs uc, uc vs lc, lc vs uc, lc vs lc
-        for (char theBase1 : base1UcLc) {
-            for (char theBase2 : base2UcLc) {
-                // for equality, order should not matter
-                final boolean b1EqualsB2 = SequenceUtil.basesEqual((byte) theBase1, (byte) theBase2);
-                Assert.assertEquals(b1EqualsB2, expectedB1EqualsB2, "basesEqual test failed for '" + theBase1 + "' vs. '" + theBase2 + "'");
-                final boolean b2EqualsB1 = SequenceUtil.basesEqual((byte) theBase2, (byte) theBase1);
-                Assert.assertEquals(b2EqualsB1, expectedB1EqualsB2, "basesEqual test failed for '" + theBase1 + "' vs. '" + theBase2 + "'");
-
-                // for ambiguous read/ref matching, the order does matter
-                final boolean b1ReadMatchesB2Ref = SequenceUtil.readBaseMatchesRefBaseWithAmbiguity((byte) theBase1, (byte) theBase2);
-                Assert.assertEquals(b1ReadMatchesB2Ref, expectedB1ReadMatchesB2Ref, "readBaseMatchesRefBaseWithAmbiguity test failed for '" + theBase1 + "' vs. '" + theBase2 + "'");
-                final boolean b2ReadMatchesB1Ref = SequenceUtil.readBaseMatchesRefBaseWithAmbiguity((byte) theBase2, (byte) theBase1);
-                Assert.assertEquals(b2ReadMatchesB1Ref, expectedB2ReadMatchesB1Ref, "readBaseMatchesRefBaseWithAmbiguity test failed for '" + theBase1 + "' vs. '" + theBase2 + "'");
-            }
-        }
-    }
-
-    /*
-     * For reference:
-     * M = A|C
-     * R = A|G
-     * W = A|T
-     * S = C|G
-     * Y = C|T
-     * K = G|T
-     * V = A|C|G
-     * H = A|C|T
-     * D = A|G|T
-     * B = C|G|T
-     * N = A|C|G|T
-     */
-    @DataProvider(name="basesEqualDataProvider")
-    public Object[][] testBasesEqualDataProvider() {
-        return new Object[][] {
-                {'A', 'A', true, true, true},
-                {'A', 'C', false, false, false},
-                {'A', 'G', false, false, false},
-                {'A', 'T', false, false, false},
-                {'A', 'M', false, true, false},
-                {'A', 'R', false, true, false},
-                {'A', 'W', false, true, false},
-                {'A', 'S', false, false, false},
-                {'A', 'Y', false, false, false},
-                {'A', 'K', false, false, false},
-                {'A', 'V', false, true, false},
-                {'A', 'H', false, true, false},
-                {'A', 'D', false, true, false},
-                {'A', 'B', false, false, false},
-                {'A', 'N', false, true, false},
-                {'C', 'C', true, true, true},
-                {'C', 'G', false, false, false},
-                {'C', 'T', false, false, false},
-                {'C', 'M', false, true, false},
-                {'C', 'R', false, false, false},
-                {'C', 'W', false, false, false},
-                {'C', 'S', false, true, false},
-                {'C', 'Y', false, true, false},
-                {'C', 'K', false, false, false},
-                {'C', 'V', false, true, false},
-                {'C', 'H', false, true, false},
-                {'C', 'D', false, false, false},
-                {'C', 'N', false, true, false},
-                {'G', 'G', true, true, true},
-                {'G', 'T', false, false, false},
-                {'G', 'M', false, false, false},
-                {'G', 'R', false, true, false},
-                {'G', 'W', false, false, false},
-                {'G', 'S', false, true, false},
-                {'G', 'Y', false, false, false},
-                {'G', 'K', false, true, false},
-                {'G', 'V', false, true, false},
-                {'G', 'H', false, false, false},
-                {'G', 'N', false, true, false},
-                {'T', 'T', true, true, true},
-                {'T', 'W', false, true, false},
-                {'T', 'Y', false, true, false},
-                {'T', 'V', false, false, false},
-                {'M', 'T', false, false, false},
-                {'M', 'M', true, true, true},
-                {'M', 'R', false, false, false},
-                {'M', 'W', false, false, false},
-                {'M', 'S', false, false, false},
-                {'M', 'Y', false, false, false},
-                {'M', 'V', false, true, false},
-                {'M', 'N', false, true, false},
-                {'R', 'T', false, false, false},
-                {'R', 'R', true, true, true},
-                {'R', 'W', false, false, false},
-                {'R', 'S', false, false, false},
-                {'R', 'Y', false, false, false},
-                {'R', 'V', false, true, false},
-                {'W', 'W', true, true, true},
-                {'W', 'Y', false, false, false},
-                {'S', 'T', false, false, false},
-                {'S', 'W', false, false, false},
-                {'S', 'S', true, true, true},
-                {'S', 'Y', false, false, false},
-                {'S', 'V', false, true, false},
-                {'Y', 'Y', true, true, true},
-                {'K', 'T', false, false, true},
-                {'K', 'M', false, false, false},
-                {'K', 'R', false, false, false},
-                {'K', 'W', false, false, false},
-                {'K', 'S', false, false, false},
-                {'K', 'Y', false, false, false},
-                {'K', 'K', true, true, true},
-                {'K', 'V', false, false, false},
-                {'K', 'N', false, true, false},
-                {'V', 'W', false, false, false},
-                {'V', 'Y', false, false, false},
-                {'V', 'V', true, true, true},
-                {'H', 'T', false, false, true},
-                {'H', 'M', false, false, true},
-                {'H', 'R', false, false, false},
-                {'H', 'W', false, false, true},
-                {'H', 'S', false, false, false},
-                {'H', 'Y', false, false, true},
-                {'H', 'K', false, false, false},
-                {'H', 'V', false, false, false},
-                {'H', 'H', true, true, true},
-                {'H', 'N', false, true, false},
-                {'D', 'G', false, false, true},
-                {'D', 'T', false, false, true},
-                {'D', 'M', false, false, false},
-                {'D', 'R', false, false, true},
-                {'D', 'W', false, false, true},
-                {'D', 'S', false, false, false},
-                {'D', 'Y', false, false, false},
-                {'D', 'K', false, false, true},
-                {'D', 'V', false, false, false},
-                {'D', 'H', false, false, false},
-                {'D', 'D', true, true, true},
-                {'D', 'N', false, true, false},
-                {'B', 'C', false, false, true},
-                {'B', 'G', false, false, true},
-                {'B', 'T', false, false, true},
-                {'B', 'M', false, false, false},
-                {'B', 'R', false, false, false},
-                {'B', 'W', false, false, false},
-                {'B', 'S', false, false, true},
-                {'B', 'Y', false, false, true},
-                {'B', 'K', false, false, true},
-                {'B', 'V', false, false, false},
-                {'B', 'H', false, false, false},
-                {'B', 'D', false, false, false},
-                {'B', 'B', true, true, true},
-                {'B', 'N', false, true, false},
-                {'N', 'T', false, false, true},
-                {'N', 'R', false, false, true},
-                {'N', 'W', false, false, true},
-                {'N', 'S', false, false, true},
-                {'N', 'Y', false, false, true},
-                {'N', 'V', false, false, true},
-                {'N', 'N', true, true, true}
-        };
-    }
-
-    private char toUpperCase(final char base) {
-        return base > 90 ? (char) (base - 32) : base;
-    }
-
-    private char toLowerCase(final char base) {
-        return (char) (toUpperCase(base) + 32);
-    }
-
-    @Test(dataProvider = "testGetSamReadNameFromFastqHeader")
-    public void testGetSamReadNameFromFastqHeader(final String fastqHeader,
-                                                  final String expectedSamReadName) {
-        Assert.assertEquals(SequenceUtil.getSamReadNameFromFastqHeader(fastqHeader), expectedSamReadName);
-    }
-
-    @DataProvider(name = "testGetSamReadNameFromFastqHeader")
-    public Object[][] testGetSamReadNameFromFastqHeaderTestCases() {
-        return new Object[][] {
-                {"Simple:Name",          "Simple:Name"},
-                {"Simple:Name",          "Simple:Name"},
-                {"Name/1",               "Name"},
-                {"Name/2",               "Name"},
-                {"Name/3",               "Name/3"},
-                {"Simple:Name Blank",    "Simple:Name"},
-                {"Simple:Name Blank /1", "Simple:Name"},
-                {"Name/1/2",             "Name"}
-        };
-    }
-
-    @Test
-    public void testCalculateNmTag() {
-        final File TEST_DIR = new File("src/test/resources/htsjdk/samtools/SequenceUtil");
-        final File referenceFile = new File(TEST_DIR, "reference_with_lower_and_uppercase.fasta");
-        final File samFile = new File(TEST_DIR, "upper_and_lowercase_read.sam");
-
-        SamReader reader = SamReaderFactory.makeDefault().open(samFile);
-        ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(referenceFile);
-
-        reader.iterator().stream().forEach(r -> {
-            Integer nm = SequenceUtil.calculateSamNmTag(r, ref.getSequence(r.getContig()).getBases());
-            String md = r.getStringAttribute(SAMTag.MD.name());
-            Assert.assertEquals(r.getIntegerAttribute(SAMTag.NM.name()), nm, "problem with NM in read \'" + r.getReadName() + "\':");
-            SequenceUtil.calculateMdAndNmTags(r, ref.getSequence(r.getContig()).getBases(), true, true);
-
-            Assert.assertEquals(r.getIntegerAttribute(SAMTag.NM.name()), nm, "problem with NM in read \'" + r.getReadName() + "\':");
-            if (md != null) {
-                Assert.assertEquals(r.getStringAttribute(SAMTag.MD.name()), md, "problem with MD in read \'" + r.getReadName() + "\':");
-            }
-        });
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/SolexaQualityConverterTest.java b/src/test/java/htsjdk/samtools/util/SolexaQualityConverterTest.java
deleted file mode 100644
index 09cc829..0000000
--- a/src/test/java/htsjdk/samtools/util/SolexaQualityConverterTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-public class SolexaQualityConverterTest {
-    //declared as a staic variable because we reuse it in IlluminaUtilTest
-    public static Object[][] SOLEXA_QUALS_TO_PHRED_SCORE = new Object[][] {
-                new Object[]{new byte[]{}, new byte[]{}},
-                new Object[]{iToB(new int[]{120}), iToB(new int[]{56})},
-                new Object[]{iToB(new int[]{64, 65, 120, 121}), iToB(new int[]{3, 4, 56, 57})},
-                new Object[]{iToB(new int[]{0, 1, 63}), iToB(new int[]{0, 0, 0})}
-    };
-
-    public static Object[][] SOLEXA_QUALS_TO_PHRED_SCORE_1_3 = new Object[][] {
-                new Object[]{new byte[]{}, new byte[]{}},
-                new Object[]{iToB(new int[]{120}), iToB(new int[]{56})},
-                new Object[]{iToB(new int[]{64, 65, 120, 121, 156, 157}), iToB(new int[]{0, 1, 56, 57, 92, 93})},
-                new Object[]{iToB(new int[]{0, 1, 63}), iToB(new int[]{-64, -63, -1})}
-    };
-
-    public static Object[][] INVALID_SOLEXA_QUALS = new Object[][] {
-                new Object[]{iToB(new int[]{-1}), iToB(new int[]{-65})},
-                new Object[]{iToB(new int[]{-1, -2}), iToB(new int[]{-65, -66})}
-    };
-
-    private static final byte [] iToB(int [] intVals) {
-        byte [] byteVals = new byte[intVals.length];
-        for(int i = 0; i < byteVals.length; i++) {
-            byteVals[i] = (byte) intVals[i];
-        }
-        return byteVals;
-    }
-
-    @DataProvider(name="solexaQualsToPhredScore")
-    public Object[][] solexaQualsToPhredScore() {return SOLEXA_QUALS_TO_PHRED_SCORE;}
-
-    @DataProvider(name="solexaQualsToPhredScore_1_3")
-    public Object[][] solexaQualsToPhredScore_1_3() {return SOLEXA_QUALS_TO_PHRED_SCORE_1_3;}
-
-    @DataProvider(name="invalidSolexaQuals")
-    public Object[][] invalidSolexaQuals() {return INVALID_SOLEXA_QUALS;}
-
-    @Test(dataProvider="solexaQualsToPhredScore")
-    public void solexaQualsToPhredScoreTestArray(byte [] solexaQuals, byte [] phredScores) {
-       byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
-       SolexaQualityConverter.getSingleton().convertSolexaQualityCharsToPhredBinary(qualsToPhred);
-       Assert.assertEquals(phredScores, qualsToPhred);
-    }
-
-    @Test(dataProvider="solexaQualsToPhredScore_1_3")
-    public void solexaQualsToPhredScoreTestArray_1_3(byte [] solexaQuals, byte [] phredScores) {
-       byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
-       SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(qualsToPhred);
-       Assert.assertEquals(phredScores, qualsToPhred);
-    }
-
-    @Test(dataProvider="invalidSolexaQuals")
-    public void invalidSolexaQualsTestArray(byte [] solexaQuals,  byte [] phredScores) {
-       byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
-       SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(qualsToPhred);
-       Assert.assertEquals(phredScores, qualsToPhred);
-    }
-
-    @Test(dataProvider="solexaQualsToPhredScore")
-    public void solexaCharToPhredBinaryTest(final byte [] solexaQuals, byte [] phredScores) {
-       final SolexaQualityConverter solexaConverter = SolexaQualityConverter.getSingleton();
-       for(int i = 0; i < solexaQuals.length; i++) {
-           Assert.assertEquals(phredScores[i], solexaConverter.solexaCharToPhredBinary(solexaQuals[i]));
-       }
-    }
-
-    @Test(dataProvider="invalidSolexaQuals", expectedExceptions = IndexOutOfBoundsException.class)
-    public void invalidSolexaCharToPhredBinaryTest(final byte [] solexaQuals,  byte [] phredScores) {
-       final SolexaQualityConverter solexaConverter = SolexaQualityConverter.getSingleton();
-       for(int i = 0; i < solexaQuals.length; i++) {
-           solexaConverter.solexaCharToPhredBinary(solexaQuals[i]);
-       }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/SortingCollectionTest.java b/src/test/java/htsjdk/samtools/util/SortingCollectionTest.java
deleted file mode 100644
index 1ec928d..0000000
--- a/src/test/java/htsjdk/samtools/util/SortingCollectionTest.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Random;
-
-public class SortingCollectionTest {
-    // Create a separate directory for files so it is possible to confirm that the directory is emptied
-    protected File tmpDir() {
-        return new File(System.getProperty("java.io.tmpdir") + "/" + System.getProperty("user.name"), getClass().getSimpleName());
-    }
-    
-    @BeforeMethod void setup() { resetTmpDir(); }
-    @AfterMethod void tearDown() { resetTmpDir(); }
-
-    /** Deletes and re-creates the temporary directory. */
-    void resetTmpDir() {
-        System.err.println("Resetting tmpdir");
-        IOUtil.deleteDirectoryTree(tmpDir());
-        if (!tmpDir().mkdirs()) throw new IllegalStateException("Could not create tmpdir: " + tmpDir().getAbsolutePath());
-
-    }
-
-    protected boolean tmpDirIsEmpty() {
-        return tmpDir().listFiles().length == 0;
-    }
-
-    @DataProvider(name = "test1")
-    public Object[][] createTestData() {
-        return new Object[][] {
-                {"empty", 0, 100},
-                {"singleton", 1, 100},
-                {"less than threshold", 100, 200},
-                {"threshold minus 1", 99, 100},
-                {"greater than threshold", 550, 100},
-                {"threshold multiple", 600, 100},
-                {"threshold multiple plus one", 101, 100},
-                {"exactly threshold", 100, 100},
-        };
-    }
-
-    /**
-     * Generate some strings, put into SortingCollection, confirm that the right number of
-     * Strings come out, and in the right order.
-     * @param numStringsToGenerate
-     * @param maxRecordsInRam
-     */
-    @Test(dataProvider = "test1")
-    public void testPositive(final String testName, final int numStringsToGenerate, final int maxRecordsInRam) {
-        final String[] strings = new String[numStringsToGenerate];
-        int numStringsGenerated = 0;
-        final SortingCollection<String> sortingCollection = makeSortingCollection(maxRecordsInRam);
-        for (final String s : new RandomStringGenerator(numStringsToGenerate)) {
-            sortingCollection.add(s);
-            strings[numStringsGenerated++] = s;
-        }
-        Arrays.sort(strings, new StringComparator());
-
-        Assert.assertEquals(tmpDirIsEmpty(), numStringsToGenerate <= maxRecordsInRam);
-        sortingCollection.setDestructiveIteration(false);
-        assertIteratorEqualsList(strings, sortingCollection.iterator());
-        assertIteratorEqualsList(strings, sortingCollection.iterator());
-        
-        sortingCollection.cleanup();
-        Assert.assertEquals(tmpDir().list().length, 0);
-    }
-
-    private void assertIteratorEqualsList(final String[] strings, final Iterator<String> sortingCollection) {
-        int i = 0;
-        while (sortingCollection.hasNext()) {
-            final String s = sortingCollection.next();
-            Assert.assertEquals(s, strings[i++]);
-        }
-        Assert.assertEquals(i, strings.length);
-    }
-
-    private SortingCollection<String> makeSortingCollection(final int maxRecordsInRam) {
-        return SortingCollection.newInstance(String.class, new StringCodec(), new StringComparator(), maxRecordsInRam, tmpDir());
-    }
-
-    /**
-     * Generate pseudo-random Strings for testing
-     */
-    static class RandomStringGenerator implements Iterable<String>, Iterator<String> {
-        Random random = new Random(0);
-        int numElementsToGenerate;
-        int numElementsGenerated = 0;
-
-        /**
-         * @param numElementsToGenerate Iteration ends after this many have been generated.
-         */
-        RandomStringGenerator(final int numElementsToGenerate) {
-            this.numElementsToGenerate = numElementsToGenerate;
-        }
-
-        public Iterator<String> iterator() {
-            return this;
-        }
-
-        public boolean hasNext() {
-            return numElementsGenerated < numElementsToGenerate;
-        }
-
-        public String next() {
-            ++numElementsGenerated;
-            return Integer.toString(random.nextInt());
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    static class StringComparator implements Comparator<String> {
-
-        public int compare(final String s, final String s1) {
-            return s.compareTo(s1);
-        }
-    }
-
-    static class StringCodec implements SortingCollection.Codec<String> {
-        ByteBuffer byteBuffer = ByteBuffer.allocate(4);
-        OutputStream os;
-        InputStream is;
-
-        public SortingCollection.Codec<String> clone() {
-            return new StringCodec();
-        }
-
-        /**
-         * Where to write encoded output
-         *
-         * @param os
-         */
-        public void setOutputStream(final OutputStream os) {
-            this.os = os;
-        }
-
-        /**
-         * Where to read encoded input from
-         *
-         * @param is
-         */
-        public void setInputStream(final InputStream is) {
-            this.is = is;
-        }
-
-        /**
-         * Write object to file
-         *
-         * @param val what to write
-         */
-        public void encode(final String val) {
-            try {
-                byteBuffer.clear();
-                byteBuffer.putInt(val.length());
-                os.write(byteBuffer.array());
-                os.write(val.getBytes());
-            } catch (IOException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-
-        /**
-         * Read the next record from the input stream and convert into a java object.
-         *
-         * @return null if no more records.  Should throw exception if EOF is encountered in the middle of
-         *         a record.
-         */
-        public String decode() {
-            try {
-                byteBuffer.clear();
-                int bytesRead = is.read(byteBuffer.array());
-                if (bytesRead == -1) {
-                    return null;
-                }
-                if (bytesRead != 4) {
-                    throw new RuntimeException("Unexpected EOF in middle of record");
-                }
-                byteBuffer.limit(4);
-                final int length = byteBuffer.getInt();
-                final byte[] buf = new byte[length];
-                bytesRead = is.read(buf);
-                if (bytesRead != length) {
-                    throw new RuntimeException("Unexpected EOF in middle of record");
-                }
-                return new String(buf);
-            } catch (IOException e) {
-                throw new RuntimeIOException(e);
-            }
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/SortingLongCollectionTest.java b/src/test/java/htsjdk/samtools/util/SortingLongCollectionTest.java
deleted file mode 100644
index 4817ef5..0000000
--- a/src/test/java/htsjdk/samtools/util/SortingLongCollectionTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SortingLongCollectionTest {
-    // Create a separate directory for files so it is possible to confirm that the directory is emptied
-    private final File tmpDir = new File(System.getProperty("java.io.tmpdir") + "/" + System.getProperty("user.name"),
-            "SortingCollectionTest");
-
-    @BeforeTest
-    void setup() {
-        // Clear out any existing files if the directory exists
-        if (tmpDir.exists()) {
-            for (final File f : tmpDir.listFiles()) {
-                f.delete();
-            }
-        }
-        tmpDir.mkdir();
-    }
-
-    @AfterTest
-    void tearDown() {
-        if (!tmpDir.exists()) {
-            // I don't know why it wouldn't exist, but sometimes it doesn't, and it causes the unit test
-            // to fail.  AW 20-May-2009
-            return;
-        }
-        for (final File f : tmpDir.listFiles()) {
-            f.delete();
-        }
-        tmpDir.delete();
-    }
-
-    private boolean tmpDirIsEmpty() {
-        return tmpDir.listFiles().length == 0;
-    }
-
-    @DataProvider(name = "test1")
-    public Object[][] createTestData() {
-        return new Object[][]{
-                {"empty", 0, 100},
-                {"less than threshold", 100, 200},
-                {"greater than threshold", 550, 100},
-                {"threshold multiple", 600, 100},
-                {"threshold multiple plus one", 101, 100},
-                {"exactly threshold", 100, 100},
-        };
-    }
-
-    /**
-     * Generate some values, put into SortingLongCollection, confirm that the right number of
-     * values come out, and in the right order.
-     *
-     * @param numValuesToGenerate
-     * @param maxValuesInRam
-     */
-    @Test(dataProvider = "test1")
-    public void testPositive(final String testName, final int numValuesToGenerate, final int maxValuesInRam) {
-        final long[] values = new long[numValuesToGenerate];
-        int numStringsGenerated = 0;
-        final SortingLongCollection sortingCollection = new SortingLongCollection(maxValuesInRam, tmpDir);
-        final Random valueGenerator = new Random(123);
-        for (int i = 0; i < numValuesToGenerate; ++i) {
-            final long value = valueGenerator.nextLong();
-            sortingCollection.add(value);
-            values[numStringsGenerated++] = value;
-        }
-        Arrays.sort(values);
-
-        Assert.assertEquals(tmpDirIsEmpty(), numValuesToGenerate <= maxValuesInRam);
-        assertIteratorEqualsList(values, sortingCollection);
-
-        sortingCollection.cleanup();
-        Assert.assertTrue(tmpDirIsEmpty());
-    }
-
-    private void assertIteratorEqualsList(final long[] values, final SortingLongCollection sortingCollection) {
-        int i = 0;
-        sortingCollection.doneAddingStartIteration();
-        while (sortingCollection.hasNext()) {
-            Assert.assertEquals(sortingCollection.next(), values[i++], "values failed.  i: " + (i - 1) + "; values[i]" + values[i - 1]);
-        }
-        Assert.assertEquals(i, values.length);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/StringLineReaderTest.java b/src/test/java/htsjdk/samtools/util/StringLineReaderTest.java
deleted file mode 100644
index 9919f89..0000000
--- a/src/test/java/htsjdk/samtools/util/StringLineReaderTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class StringLineReaderTest {
-
-    private static final String[] TERMINATORS = {"\r", "\n", "\r\n"};
-    private static final boolean[] LAST_LINE_TERMINATED = {false, true};
-
-    enum EmptyLineState {
-        FIRST_LINE, LAST_LINE, MIDDLE_LINE, COMPLETELY_EMPTY
-    }
-
-    /**
-     * Test a bunch of combinations instead of writing a method for each.
-     */
-    @Test
-    public void testBasic() {
-        for (final String terminator : TERMINATORS) {
-            for (final boolean lastLineTerminated : LAST_LINE_TERMINATED) {
-                for (final EmptyLineState emptyLineState : EmptyLineState.values()) {
-                    if (emptyLineState == EmptyLineState.COMPLETELY_EMPTY) {
-                        emptyTestHelper(terminator, lastLineTerminated);
-                    } else {
-                        testHelper(terminator, lastLineTerminated, emptyLineState);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * various test cases where there is no input, except perhaps a line terminator
-     * @param terminator what the terminator should be in the input
-     * @param lastLineTerminated does the input have a terminator
-     */
-    private void emptyTestHelper(final String terminator, final boolean lastLineTerminated) {
-        final String input;
-        if (lastLineTerminated) {
-            input = terminator;
-        } else {
-            input = "";
-        }
-        final StringLineReader slr = new StringLineReader(input);
-        final String output = slr.readLine();
-        if (lastLineTerminated) {
-            Assert.assertEquals(output, "");
-        }
-        Assert.assertNull(slr.readLine());
-    }
-
-    /**
-     * Test a variety of test cases in which there is more than one line.
-     * @param terminator to use in the input
-     * @param lastLineTerminated should the input end with a terminator
-     * @param emptyLineState where in the input should an empty line be.
-     */
-    private void testHelper(final String terminator, final boolean lastLineTerminated, final EmptyLineState emptyLineState) {
-        final String[] lines = new String[3];
-        if (emptyLineState == EmptyLineState.FIRST_LINE) {
-            lines[0] = "";
-            lines[1] = "Hi, Mom!";
-            lines[2] = "Hi, Dad?";
-        } else if (emptyLineState == EmptyLineState.LAST_LINE) {
-            lines[0] = "Hi, Dad?";
-            lines[1] = "Hi, Mom!";
-            lines[2] = "";
-        } else  if (emptyLineState == EmptyLineState.MIDDLE_LINE) {
-            lines[0] = "Hi, Dad?";
-            lines[1] = "";
-            lines[2] = "Hi, Mom!";
-        }
-        String input = StringUtil.join(terminator, lines);
-        if (lastLineTerminated) {
-            input = input.concat(terminator);
-        }
-        final StringLineReader slr = new StringLineReader(input);
-        for (int i = 0; i < lines.length - 1; ++i) {
-            final String s = slr.readLine();
-            String expected = lines[i];
-            Assert.assertEquals(s, expected);
-        }
-
-        // Last line may need to be handled specially
-        String s = slr.readLine();
-        if (!lastLineTerminated && emptyLineState == EmptyLineState.LAST_LINE) {
-            Assert.assertNull(s);
-        } else {
-            String expected = lines[lines.length - 1];
-            Assert.assertEquals(s, expected);
-        }
-        s = slr.readLine();
-        Assert.assertNull(s);
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/StringUtilTest.java b/src/test/java/htsjdk/samtools/util/StringUtilTest.java
deleted file mode 100644
index dbb2a07..0000000
--- a/src/test/java/htsjdk/samtools/util/StringUtilTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class StringUtilTest {
-    @Test(dataProvider = "provider")
-    public void testSplit(final String input, final String[] expectedResult, final boolean concatenateExcess) {
-        String[] ret = new String[expectedResult.length];
-        int tokensExpected;
-        for (tokensExpected = 0; tokensExpected < expectedResult.length && expectedResult[tokensExpected] != null;
-             ++tokensExpected) {
-        }
-        final int tokensFound;
-        if (concatenateExcess) {
-            tokensFound = StringUtil.splitConcatenateExcessTokens(input, ret, ':');
-        } else {
-           tokensFound = StringUtil.split(input, ret, ':');
-        }
-        Assert.assertEquals(tokensFound, tokensExpected);
-        Assert.assertEquals(ret, expectedResult);
-    }
-
-    @DataProvider(name="provider")
-    public Object[][] splitScenarios() {
-        return new Object[][] {
-                {"A:BB:C", new String[]{"A", "BB", "C"}, false},
-                {"A:BB:C", new String[]{"A", "BB", "C"}, true},
-                {"A:BB", new String[]{"A", "BB", null}, false},
-                {"A:BB", new String[]{"A", "BB", null}, true},
-                {"A:BB:", new String[]{"A", "BB", null}, false},
-                {"A:BB:", new String[]{"A", "BB", null}, true},
-                {"A:BB:C:DDD", new String[]{"A", "BB", "C"}, false},
-                {"A:BB:C:DDD", new String[]{"A", "BB", "C:DDD"}, true},
-                {"A:", new String[]{"A", null, null}, false},
-                {"A:", new String[]{"A", null, null}, true},
-                {"A", new String[]{"A", null, null}, false},
-                {"A", new String[]{"A", null, null}, true},
-                {"A:BB:C", new String[]{"A", "BB", "C"}, false},
-                {"A:BB:C:", new String[]{"A", "BB", "C:"}, true}, 
-        };
-    }
-
-    @DataProvider(name="withinHammingDistanceProvider")
-    public Object[][] isWithinHammingDistanceProvider() {
-        return new Object[][] {
-                {"ATAC", "GCAT", 3, true},
-                {"ATAC", "GCAT", 2, false},
-                {"ATAC", "GCAT", 1, false},
-                {"ATAC", "GCAT", 0, false}
-        };
-    }
-
-    @Test(dataProvider = "withinHammingDistanceProvider")
-    public void testIsWithinHammingDistance(final String s1, final String s2, final int maxHammingDistance, final boolean expectedResult) {
-        Assert.assertEquals(StringUtil.isWithinHammingDistance(s1, s2, maxHammingDistance), expectedResult);
-    }
-
-    @DataProvider(name="withinHammingDistanceExceptionProvider")
-    public Object[][] isWithinHammingDistanceException() {
-        return new Object[][] {
-                {"ATAC", "GCT" , 3},
-                {"ATAC", "AT"  , 2},
-                {"ATAC", "T"   , 1},
-                {""    , "GCAT", 0}
-        };
-    }
-
-    @Test(dataProvider = "withinHammingDistanceExceptionProvider", expectedExceptions = IllegalArgumentException.class)
-    public void testIsWithinHammingDistanceExceptions(final String s1, final String s2, final int maxHammingDistance) {
-        StringUtil.isWithinHammingDistance(s1, s2, maxHammingDistance);
-    }
-
-    @Test(dataProvider = "withinHammingDistanceExceptionProvider", expectedExceptions = IllegalArgumentException.class)
-    public void testHammingDistanceExceptions(final String s1, final String s2, final int maxHammingDistance) {
-        StringUtil.hammingDistance(s1, s2);
-    }
-
-    @DataProvider(name="hammingDistanceProvider")
-    public Object[][] hammingDistance() {
-        return new Object[][] {
-                {"ATAC" , "GCAT" , 3},
-                {"ATAGC", "ATAGC", 0},
-                {"ATAC" , "atac" , 4}, // Hamming distance is case sensitive.
-                {""     , ""     , 0}, // Two empty strings should have Hamming distance of 0.
-                {"nAGTN", "nAGTN", 0} // Ensure that matching Ns are not counted as mismatches.
-        };
-    }
-
-    @Test(dataProvider = "hammingDistanceProvider")
-    public void testHammingDistance(final String s1, final String s2, final int expectedResult) {
-        Assert.assertEquals(StringUtil.hammingDistance(s1, s2), expectedResult);
-    }
-
-}
diff --git a/src/test/java/htsjdk/samtools/util/TrimmingUtilTest.java b/src/test/java/htsjdk/samtools/util/TrimmingUtilTest.java
deleted file mode 100644
index 12cffc6..0000000
--- a/src/test/java/htsjdk/samtools/util/TrimmingUtilTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2016 Tim Fennell
- *
- * 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.
- */
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Tests for a simple phred-style quality trimming algorithm.
- */
-public class TrimmingUtilTest {
-    @Test
-    public void testEasyCases() {
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(30,30,30,30,30, 2, 2, 2, 2, 2), 15), 5);
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(30,30,30,30,30,30,30,30,30,30), 15), 10);
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(12,12,12,12,12,12,12,12,12,12), 15), 0);
-    }
-
-    @Test
-    public void testBoundaryCasesForTrimQual() {
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(12,12,12,12,12,12,12,12,12,12), 11), 10);
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(12,12,12,12,12,12,12,12,12,12), 12), 10);
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(12,12,12,12,12,12,12,12,12,12), 13), 0);
-    }
-
-    @Test
-    public void testLowQualityWithOccasionalHighQuality() {
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(30,30,30, 2, 5, 2, 3,20, 2, 6), 15), 3);
-    }
-
-    @Test
-    public void testAlternatingHighAndLowQuality() {
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(30, 2,30, 2,30, 2,30, 2,30, 2), 15), 9);
-    }
-    @Test
-    public void testEmptyQuals() {
-        Assert.assertEquals(TrimmingUtil.findQualityTrimPoint(byteArray(), 15), 0);
-    }
-
-    /** Makes a byte[] from a variable length argument list of ints. */
-    byte[] byteArray(final int... ints) {
-        final byte[] bytes = new byte[ints.length];
-        for (int i=0; i<bytes.length; ++i) {
-            bytes[i] = (byte) ints[i];
-        }
-
-        return bytes;
-    }
-}
diff --git a/src/test/java/htsjdk/samtools/util/TupleTest.java b/src/test/java/htsjdk/samtools/util/TupleTest.java
deleted file mode 100644
index bed4550..0000000
--- a/src/test/java/htsjdk/samtools/util/TupleTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package htsjdk.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Created by farjoun on 1/29/16.
- */
-public class TupleTest {
-
-    @Test
-    public void testEquals() throws Exception {
-        Assert.assertEquals(new Tuple<>(1, "hi"), new Tuple<>(1, "hi"));
-
-        Assert.assertEquals(new Tuple<>(1, null), new Tuple<>(1, null));
-        Assert.assertEquals(new Tuple<>(null, "hi"), new Tuple<>(null, "hi"));
-        Assert.assertEquals(new Tuple<>(null, null), new Tuple<>(null, null));
-
-
-        Assert.assertNotSame(new Tuple<Integer, Integer>(1, null), new Tuple<Integer, String>(1, null));
-        Assert.assertNotSame(new Tuple<Integer, String>(null, "hi"), new Tuple<String, String>(null, "hi"));
-        Assert.assertNotSame(new Tuple<Integer, Integer>(null, null), new Tuple<Integer, String>(null, null));
-
-
-        Assert.assertNotSame(new Tuple<>(1, "hi"), new Tuple<>(1, "bye"));
-        Assert.assertNotSame(new Tuple<>(2, "hi"), new Tuple<>(1, "hi"));
-        Assert.assertNotSame(new Tuple<>(2, "hi"), new Tuple<>(1, null));
-        Assert.assertNotSame(new Tuple<>(2, "hi"), new Tuple<>(null, "hi"));
-
-    }
-
-    @Test
-    public void testHashCode() throws Exception {
-        Assert.assertEquals(new Tuple<>(1, "hi").hashCode(), new Tuple<>(1, "hi").hashCode());
-
-        Assert.assertEquals(new Tuple<>(1, null).hashCode(), new Tuple<>(1, null).hashCode());
-        Assert.assertEquals(new Tuple<>(null, "hi").hashCode(), new Tuple<>(null, "hi").hashCode());
-        Assert.assertEquals(new Tuple<>(null, null).hashCode(), new Tuple<>(null, null).hashCode());
-
-        //even though these are of different types, the value is null and so I have to make these equal...
-        Assert.assertEquals(new Tuple<Integer, Integer>(1, null).hashCode(), new Tuple<Integer, String>(1, null).hashCode());
-        Assert.assertEquals(new Tuple<Integer, String>(null, "hi").hashCode(), new Tuple<String, String>(null, "hi").hashCode());
-        Assert.assertEquals(new Tuple<Integer, Integer>(null, null).hashCode(), new Tuple<Integer, String>(null, null).hashCode());
-
-        Assert.assertNotSame(new Tuple<>(1, "hi").hashCode(), new Tuple<>(1, "bye").hashCode());
-        Assert.assertNotSame(new Tuple<>(2, "hi").hashCode(), new Tuple<>(1, "hi").hashCode());
-        Assert.assertNotSame(new Tuple<>(2, "hi").hashCode(), new Tuple<>(1, null).hashCode());
-        Assert.assertNotSame(new Tuple<>(2, "hi").hashCode(), new Tuple<>(null, "hi").hashCode());
-
-    }
-
-    @Test
-    public void testToString() throws Exception {
-        Assert.assertEquals(new Tuple<>(1, 2).toString(), "[1, 2]");
-        Assert.assertEquals(new Tuple<>(1, "hi!").toString(), "[1, hi!]");
-        Assert.assertEquals(new Tuple<>(1, new Tuple<>(2, 3)).toString(), "[1, [2, 3]]");
-
-        Assert.assertEquals(new Tuple<>(1, null).toString(), "[1, null]");
-        Assert.assertEquals(new Tuple<>(null, null).toString(), "[null, null]");
-
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/tribble/AbstractFeatureReaderTest.java b/src/test/java/htsjdk/tribble/AbstractFeatureReaderTest.java
deleted file mode 100644
index 6d65e9d..0000000
--- a/src/test/java/htsjdk/tribble/AbstractFeatureReaderTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.samtools.util.TestUtil;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.bed.BEDFeature;
-import htsjdk.tribble.readers.LineIterator;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import static org.testng.Assert.*;
-
-/**
- * @author jacob
- * @date 2013-Apr-10
- */
-public class AbstractFeatureReaderTest {
-
-    final static String HTTP_INDEXED_VCF_PATH = TestUtil.BASE_URL_FOR_HTTP_TESTS + "ex2.vcf";
-    final static String LOCAL_MIRROR_HTTP_INDEXED_VCF_PATH = VariantBaseTest.variantTestDataRoot + "ex2.vcf";
-
-    /**
-     * Asserts readability and correctness of VCF over HTTP.  The VCF is indexed and requires and index.
-     */
-    @Test
-    public void testVcfOverHTTP() throws IOException {
-        final VCFCodec codec = new VCFCodec();
-        final AbstractFeatureReader<VariantContext, LineIterator> featureReaderHttp =
-                AbstractFeatureReader.getFeatureReader(HTTP_INDEXED_VCF_PATH, codec, true); // Require an index to
-        final AbstractFeatureReader<VariantContext, LineIterator> featureReaderLocal =
-                AbstractFeatureReader.getFeatureReader(LOCAL_MIRROR_HTTP_INDEXED_VCF_PATH, codec, false);
-        final CloseableTribbleIterator<VariantContext> localIterator = featureReaderLocal.iterator();
-        for (final Feature feat : featureReaderHttp.iterator()) {
-            assertEquals(feat.toString(), localIterator.next().toString());
-        }
-        assertFalse(localIterator.hasNext());
-    }
-
-    @Test
-    public void testLoadBEDFTP() throws Exception {
-        final String path = "ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands with spaces.hg18.bed";
-        final BEDCodec codec = new BEDCodec();
-        final AbstractFeatureReader<BEDFeature, LineIterator> bfs = AbstractFeatureReader.getFeatureReader(path, codec, false);
-        for (final Feature feat : bfs.iterator()) {
-            assertNotNull(feat);
-        }
-    }
-
-    @DataProvider(name = "blockCompressedExtensionExtensionStrings")
-    public Object[][] createBlockCompressedExtensionStrings() {
-        return new Object[][] {
-                { "testzip.gz", true },
-                { "test.gzip", true },
-                { "test.bgz", true },
-                { "test.bgzf", true },
-                { "test.bzip2", false }
-        };
-    }
-
-    @Test(enabled = true, dataProvider = "blockCompressedExtensionExtensionStrings")
-    public void testBlockCompressionExtensionString(final String testString, final boolean expected) {
-        Assert.assertEquals(AbstractFeatureReader.hasBlockCompressedExtension(testString), expected);
-    }
-
-    @Test(enabled = true, dataProvider = "blockCompressedExtensionExtensionStrings")
-    public void testBlockCompressionExtensionFile(final String testString, final boolean expected) {
-        Assert.assertEquals(AbstractFeatureReader.hasBlockCompressedExtension(new File(testString)), expected);
-    }
-
-    @DataProvider(name = "blockCompressedExtensionExtensionURIStrings")
-    public Object[][] createBlockCompressedExtensionURIs() {
-        return new Object[][]{
-                {"testzip.gz", true},
-                {"test.gzip", true},
-                {"test.bgz", true},
-                {"test.bgzf", true},
-                {"test", false},
-                {"test.bzip2", false},
-
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gz", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gzip", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgz", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgzf", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bzip2", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877", false},
-
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gz?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gzip?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgz?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgzf?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bzip2?alt=media", false},
-
-                {"ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands.hg18.gz", true},
-                {"ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands.hg18.bed", false}
-        };
-    }
-
-    @Test(enabled = true, dataProvider = "blockCompressedExtensionExtensionURIStrings")
-    public void testBlockCompressionExtension(final String testURIString, final boolean expected) throws URISyntaxException {
-        URI testURI = URI.create(testURIString);
-        Assert.assertEquals(AbstractFeatureReader.hasBlockCompressedExtension(testURI), expected);
-    }
-
-}
diff --git a/src/test/java/htsjdk/tribble/BinaryFeaturesTest.java b/src/test/java/htsjdk/tribble/BinaryFeaturesTest.java
deleted file mode 100644
index eff8939..0000000
--- a/src/test/java/htsjdk/tribble/BinaryFeaturesTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.example.ExampleBinaryCodec;
-import htsjdk.tribble.readers.LineIterator;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-
-
-public class BinaryFeaturesTest {
-    @DataProvider(name = "BinaryFeatureSources")
-    public Object[][] createData1() {
-        return new Object[][] {
-                { new File(TestUtils.DATA_DIR + "test.bed"),  new BEDCodec() },
-                { new File(TestUtils.DATA_DIR + "bed/Unigene.sample.bed"),  new BEDCodec() },
-                { new File(TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed"),  new BEDCodec() },
-        };
-    }
-
-    @Test(enabled = true, dataProvider = "BinaryFeatureSources")
-    public void testBinaryCodec(final File source, final FeatureCodec<Feature, LineIterator> codec) throws IOException {
-        final File tmpFile = File.createTempFile("testBinaryCodec", ".binary.bed");
-        ExampleBinaryCodec.convertToBinaryTest(source, tmpFile, codec);
-        tmpFile.deleteOnExit();
-
-        final FeatureReader<Feature> originalReader = AbstractFeatureReader.getFeatureReader(source.getAbsolutePath(), codec, false);
-        final FeatureReader<Feature> binaryReader = AbstractFeatureReader.getFeatureReader(tmpFile.getAbsolutePath(), new ExampleBinaryCodec(), false);
-
-        // make sure the header is what we expect
-        final List<String> header = (List<String>) binaryReader.getHeader();
-        Assert.assertEquals(header.size(), 1, "We expect exactly one header line");
-        Assert.assertEquals(header.get(0), ExampleBinaryCodec.HEADER_LINE, "Failed to read binary header line");
-
-        final Iterator<Feature> oit = originalReader.iterator();
-        final Iterator<Feature> bit = binaryReader.iterator();
-        while ( oit.hasNext() ) {
-            final Feature of = oit.next();
-
-            Assert.assertTrue(bit.hasNext(), "Original iterator has items, but there's no items left in binary iterator");
-            final Feature bf = bit.next();
-
-            Assert.assertEquals(bf.getContig(), of.getContig(), "Chr not equal between original and binary encoding");
-            Assert.assertEquals(bf.getStart(), of.getStart(), "Start not equal between original and binary encoding");
-            Assert.assertEquals(bf.getEnd(), of.getEnd(), "End not equal between original and binary encoding");
-        }
-        Assert.assertTrue(! bit.hasNext(), "Original iterator is done, but there's still some data in binary iterator");
-
-        originalReader.close();
-        binaryReader.close();
-    }
-
-    @Test(expectedExceptions = TribbleException.class)
-    public void testGetTabixFormatThrowsException() {
-        new ExampleBinaryCodec().getTabixFormat();
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/FeatureReaderTest.java b/src/test/java/htsjdk/tribble/FeatureReaderTest.java
deleted file mode 100644
index d62693c..0000000
--- a/src/test/java/htsjdk/tribble/FeatureReaderTest.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.samtools.seekablestream.SeekableFileStream;
-import htsjdk.samtools.util.CloserUtil;
-import htsjdk.samtools.util.LocationAware;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.example.ExampleBinaryCodec;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.util.ParsingUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-
-public class FeatureReaderTest {
-    private final static File asciiBedFile = new File(TestUtils.DATA_DIR + "test.bed");
-    private File binaryBedFile;
-    private final static File tabixBedFile = new File(TestUtils.DATA_DIR + "test.tabix.bed.gz");
-
-    @BeforeClass
-    public void setup() throws IOException {
-        binaryBedFile = File.createTempFile("htsjdk-test.featurereader", ".bed");
-        binaryBedFile.deleteOnExit();
-        ExampleBinaryCodec.convertToBinaryTest(asciiBedFile, binaryBedFile, new BEDCodec());
-    }
-
-    @AfterClass
-    public void tearDown() throws Exception {
-        binaryBedFile.delete();
-    }
-
-    @DataProvider(name = "indexProvider")
-    public Object[][] createData1() {
-        return new Object[][]{
-                {asciiBedFile, IndexFactory.IndexType.LINEAR, new BEDCodec()},
-                {asciiBedFile, IndexFactory.IndexType.INTERVAL_TREE, new BEDCodec()},
-                {tabixBedFile, IndexFactory.IndexType.TABIX, new BEDCodec()},
-                {binaryBedFile, IndexFactory.IndexType.LINEAR, new ExampleBinaryCodec()},
-                {binaryBedFile, IndexFactory.IndexType.INTERVAL_TREE, new ExampleBinaryCodec()},
-        };
-    }
-
-    @Test(dataProvider = "indexProvider")
-    public void testBedQuery(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
-        final AbstractFeatureReader<Feature, ?> reader = getReader(featureFile, indexType, codec);
-
-        // Query
-        testQuery(reader, "chr1", 1, 500, 3);
-        testQuery(reader, "chr1", 1, 200, 1);
-        testQuery(reader, "chr1", 1, 201, 2);
-        testQuery(reader, "chr1", 500, 600, 0);
-        testQuery(reader, "chr1", 100000, 100010, 1);
-        testQuery(reader, "chr1", 100000, 100000, 0);
-        testQuery(reader, "chr1", 100001, 100001, 1);
-        testQuery(reader, "chr1", 100005, 100006, 1);
-        testQuery(reader, "chr1", 100009, 100011, 1);
-        testQuery(reader, "chr1", 100010, 100010, 1);
-        testQuery(reader, "chr1", 100011, 100011, 0);
-        testQuery(reader, "chr2", 1, 100, 2);
-        testQuery(reader, "chr2", 1, 10, 1);
-        testQuery(reader, "chr2", 15, 16, 0);
-        testQuery(reader, "chr3", 1, 201, 0);
-
-        // Close reader
-        reader.close();
-    }
-
-    @Test(dataProvider = "indexProvider")
-    public void testLargeNumberOfQueries(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
-        final AbstractFeatureReader<Feature, LocationAware> reader = getReader(featureFile, indexType, codec);
-        for (int i = 0; i < 2000; i++) {
-            for (final int start : Arrays.asList(500, 200, 201, 600, 100000)) {
-                for (final String chr : Arrays.asList("chr1", "chr2", "chr3")) {
-                    CloseableTribbleIterator<Feature> iter = null;
-                    try {
-                        iter = reader.query(chr, start, start + 1);
-                        Assert.assertNotNull(iter, "Failed to create non-null iterator");
-                    } finally {
-                        CloserUtil.close(iter);
-                    }
-                }
-            }
-        }
-
-        // Close reader
-        reader.close();
-    }
-
-    private void testQuery(final AbstractFeatureReader<Feature, ?> reader, final String chr, final int start, final int stop, final int expectedNumRecords) throws IOException {
-        final Iterator<Feature> iter = reader.query(chr, start, stop);
-        int count = 0;
-        while (iter.hasNext()) {
-            final Feature f = iter.next();
-            Assert.assertTrue(f.getEnd() >= start && f.getStart() <= stop);
-            count++;
-        }
-        Assert.assertEquals(count, expectedNumRecords);
-    }
-
-    @Test(dataProvider = "indexProvider")
-    public void testBedNames(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
-        final AbstractFeatureReader<Feature, ?> reader = getReader(featureFile, indexType, codec);
-        final String[] expectedSequences = {"chr1", "chr2"};
-
-        final List<String> seqNames = reader.getSequenceNames();
-        Assert.assertEquals(seqNames.size(), expectedSequences.length,
-                "Expected sequences " + ParsingUtils.join(",", expectedSequences) + " but saw " + ParsingUtils.join(",", seqNames));
-
-        for (final String s : expectedSequences) {
-            Assert.assertTrue(seqNames.contains(s));
-        }
-    }
-
-    private static <FEATURE extends Feature, SOURCE extends LocationAware> AbstractFeatureReader<FEATURE, SOURCE> getReader(final File featureFile,
-                                                                                                                            final IndexFactory.IndexType indexType,
-                                                                                                                            final FeatureCodec<FEATURE, SOURCE> codec)
-            throws IOException {
-        if (indexType.canCreate()) {
-            // for types we can create make a new index each time
-            final File idxFile = Tribble.indexFile(featureFile);
-
-            // delete an already existing index
-            if (idxFile.exists()) {
-                idxFile.delete();
-            }
-            final Index idx = IndexFactory.createIndex(featureFile, codec, indexType);
-            idx.write(idxFile);
-
-            idxFile.deleteOnExit();
-        } // else  let's just hope the index exists, and if so use it
-
-        return AbstractFeatureReader.getFeatureReader(featureFile.getAbsolutePath(), codec);
-    }
-
-    @Test
-    public void testReadingBeyondIntSizedBlock() throws IOException {
-        final Block block = new Block(0, ((long) Integer.MAX_VALUE) * 2);
-        final SeekableFileStream stream = new SeekableFileStream(new File("/dev/zero"));
-        final TribbleIndexedFeatureReader.BlockStreamWrapper blockStreamWrapper = new TribbleIndexedFeatureReader.BlockStreamWrapper(stream, block);
-        final int chunkSize = 100000; // 10 Mb
-        final int chunksToRead = (int) Math.ceil(block.getSize() / (chunkSize * 1.0));
-
-        final byte[] bytes = new byte[chunkSize];
-        long totalRead = 0;
-        for (int chunk = 0; chunk < chunksToRead; chunk++) {
-            //System.out.println("Reading chunk " + chunk + " of " + chunkSize + " total read " + totalRead);
-            final int nRead = blockStreamWrapper.read(bytes);
-            Assert.assertTrue(nRead != -1, "Prematurely got EOF after " + totalRead + " bytes");
-            totalRead += nRead;
-        }
-
-        // /dev/zero doesn't advance file stream on Linux, so reading never terminates
-        // Therefore, we only require a minimum number of bytes
-        Assert.assertTrue(totalRead >= block.getSize(), "Failed to read all bytes from a block with size > 2B = " + block.getSize());
-
-    }
-}
-
diff --git a/src/test/java/htsjdk/tribble/TestUtils.java b/src/test/java/htsjdk/tribble/TestUtils.java
deleted file mode 100644
index f686d25..0000000
--- a/src/test/java/htsjdk/tribble/TestUtils.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/** 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.
- */
-
-package htsjdk.tribble;
-
-
-/**
- * User: jacob
- * Date: 2012-Dec-13
- */
-public class TestUtils {
-    public static String DATA_DIR = "src/test/resources/htsjdk/tribble/";
-}
diff --git a/src/test/java/htsjdk/tribble/TribbleIndexFeatureReaderTest.java b/src/test/java/htsjdk/tribble/TribbleIndexFeatureReaderTest.java
deleted file mode 100644
index afdd827..0000000
--- a/src/test/java/htsjdk/tribble/TribbleIndexFeatureReaderTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.tribble.readers.LineIterator;
-import htsjdk.tribble.TestUtils;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import static org.testng.Assert.assertEquals;
-
-
-public class TribbleIndexFeatureReaderTest {
-
-    @DataProvider(name = "extensionURIStrings")
-    public Object[][] createBlockCompressedExtensionURIs() {
-        return new Object[][]{
-                {"testzip.gz", true},
-                {"testzip.GZ", true},
-                {"testzip.gZ", true},
-                {"testzip.Gz", true},
-
-                {"test", false},
-                {"test.gzip", false},
-                {"test.bgz", false},
-                {"test.bgzf", false},
-                {"test.bzip2", false},
-
-                {"file://testzip.gz", true},
-                {"file://apath/testzip.gz", true},
-
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gz", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.GZ", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gzip", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgz", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgzf", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bzip2", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877", false},
-
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gz?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.GZ?alt=media", true},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gzip?alt=media", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgz?alt=media", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bgzf?alt=media", false},
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.bzip2?alt=media", false},
-
-                {"ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands.hg18.gz", true},
-                {"ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands.hg18.bed", false},
-
-                {"https://www.googleapis.com/download/storage/v1/b/deflaux-public-test/o/NA12877.vcf.gz", true},
-        };
-    }
-
-    @Test(enabled = true, dataProvider = "extensionURIStrings")
-    public void testGZExtension(final String testString, final boolean expected) throws URISyntaxException {
-        Assert.assertEquals(TribbleIndexedFeatureReader.isGZIPPath(testString), expected);
-    }
-
-    @DataProvider(name = "featureFileStrings")
-    public Object[][] createFeatureFileStrings() {
-        return new Object[][]{
-                {TestUtils.DATA_DIR + "test.vcf", 5},
-                {TestUtils.DATA_DIR + "test.vcf.gz", 5},
-                {TestUtils.DATA_DIR + "test.vcf.bgz", 5},
-                {TestUtils.DATA_DIR + "test with spaces.vcf", 5}
-        };
-    }
-
-    @Test(dataProvider = "featureFileStrings")
-    public void testIndexedGZIPVCF(final String testPath, final int expectedCount) throws IOException {
-        final VCFCodec codec = new VCFCodec();
-        try (final TribbleIndexedFeatureReader<VariantContext, LineIterator> featureReader =
-                new TribbleIndexedFeatureReader(testPath, codec, false)) {
-            final CloseableTribbleIterator<VariantContext> localIterator = featureReader.iterator();
-            int count = 0;
-            for (final Feature feat : featureReader.iterator()) {
-                localIterator.next();
-                count++;
-            }
-            Assert.assertEquals(count, expectedCount);
-        }
-    }
-
-}
diff --git a/src/test/java/htsjdk/tribble/TribbleTest.java b/src/test/java/htsjdk/tribble/TribbleTest.java
deleted file mode 100644
index e8366c4..0000000
--- a/src/test/java/htsjdk/tribble/TribbleTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package htsjdk.tribble;
-
-import htsjdk.tribble.util.TabixUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-
-public class TribbleTest {
-
-    @Test
-    public void testStandardIndex() {
-
-	final String vcf = "foo.vcf";
-	final String expectedIndex = vcf + Tribble.STANDARD_INDEX_EXTENSION;
-
-	Assert.assertEquals(Tribble.indexFile(vcf), expectedIndex);
-	Assert.assertEquals(Tribble.indexFile(new File(vcf).getAbsolutePath()), new File(expectedIndex).getAbsolutePath());
-    }
-
-    @Test
-    public void testTabixIndex() {
-
-	final String vcf = "foo.vcf.gz";
-	final String expectedIndex = vcf + TabixUtils.STANDARD_INDEX_EXTENSION;
-
-	Assert.assertEquals(Tribble.tabixIndexFile(vcf), expectedIndex);
-	Assert.assertEquals(Tribble.tabixIndexFile(new File(vcf).getAbsolutePath()), new File(expectedIndex).getAbsolutePath());
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java b/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java
deleted file mode 100644
index dbf23a0..0000000
--- a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.tribble.bed;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.Feature;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.annotation.Strand;
-import htsjdk.tribble.bed.FullBEDFeature.Exon;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.index.linear.LinearIndex;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.awt.*;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.List;
-
-public class BEDCodecTest {
-
-    @Test
-    public void testSimpleDecode() {
-        BEDCodec codec = new BEDCodec();
-
-        BEDFeature feature;
-
-        feature = codec.decode("chr1 1");
-        Assert.assertEquals(feature.getContig(), "chr1");
-        Assert.assertEquals(feature.getStart(), 2);
-        Assert.assertEquals(feature.getEnd(), 2);
-
-        feature = codec.decode("chr1 1 2");
-        Assert.assertEquals(feature.getContig(), "chr1");
-        Assert.assertEquals(feature.getStart(), 2);
-        Assert.assertEquals(feature.getEnd(), 2);
-
-        feature = codec.decode("chr1 1 3");
-        Assert.assertEquals(feature.getContig(), "chr1");
-        Assert.assertEquals(feature.getStart(), 2);
-        Assert.assertEquals(feature.getEnd(), 3);
-    }
-
-    @Test
-    public void testFullDecode() {
-        BEDCodec codec = new BEDCodec();
-
-        FullBEDFeature feature;
-        List<Exon> exons;
-
-        // Borrowed samples from Example: on http://genome.ucsc.edu/FAQ/FAQformat#format1
-
-        feature = (FullBEDFeature) codec.decode("chr22 1000 5000 cloneA 960 + 1000 5000 0 2 567,488, 0,3512");
-        Assert.assertEquals(feature.getContig(), "chr22");
-        Assert.assertEquals(feature.getStart(), 1001);
-        Assert.assertEquals(feature.getEnd(), 5000);
-        Assert.assertEquals(feature.getName(), "cloneA");
-        Assert.assertEquals(feature.getScore(), 960f);
-        Assert.assertEquals(feature.getStrand(), Strand.POSITIVE);
-        Assert.assertEquals(feature.getColor(), new Color(0));
-
-        exons = feature.getExons();
-        Assert.assertEquals(exons.size(), 2);
-
-        Assert.assertEquals(exons.get(0).getNumber(), 1);
-        Assert.assertEquals(exons.get(0).start, 1001);
-        Assert.assertEquals(exons.get(0).end, 1567);
-        Assert.assertEquals(exons.get(0).getCdStart(), 1001);
-        Assert.assertEquals(exons.get(0).getCdEnd(), 1567);
-        Assert.assertEquals(exons.get(0).getCodingLength(), 567);
-
-        Assert.assertEquals(exons.get(1).getNumber(), 2);
-        Assert.assertEquals(exons.get(1).start, 4513);
-        Assert.assertEquals(exons.get(1).end, 5000);
-        Assert.assertEquals(exons.get(1).getCdStart(), 4513);
-        Assert.assertEquals(exons.get(1).getCdEnd(), 5000);
-        Assert.assertEquals(exons.get(1).getCodingLength(), 488);
-
-        feature = (FullBEDFeature) codec.decode("chr22 2000 6000 cloneB 900 - 2000 6000 0 2 433,399, 0,3601");
-        Assert.assertEquals(feature.getContig(), "chr22");
-        Assert.assertEquals(feature.getStart(), 2001);
-        Assert.assertEquals(feature.getEnd(), 6000);
-        Assert.assertEquals(feature.getName(), "cloneB");
-        Assert.assertEquals(feature.getScore(), 900f);
-        Assert.assertEquals(feature.getStrand(), Strand.NEGATIVE);
-        Assert.assertEquals(feature.getColor(), new Color(0));
-
-        exons = feature.getExons();
-        Assert.assertEquals(exons.size(), 2);
-
-        Assert.assertEquals(exons.get(0).getNumber(), 2);
-        Assert.assertEquals(exons.get(0).start, 2001);
-        Assert.assertEquals(exons.get(0).end, 2433);
-        Assert.assertEquals(exons.get(0).getCdStart(), 2001);
-        Assert.assertEquals(exons.get(0).getCdEnd(), 2433);
-        Assert.assertEquals(exons.get(0).getCodingLength(), 433);
-
-        Assert.assertEquals(exons.get(1).getNumber(), 1);
-        Assert.assertEquals(exons.get(1).start, 5602);
-        Assert.assertEquals(exons.get(1).end, 6000);
-        Assert.assertEquals(exons.get(1).getCdStart(), 5602);
-        Assert.assertEquals(exons.get(1).getCdEnd(), 6000);
-        Assert.assertEquals(exons.get(1).getCodingLength(), 399);
-    }
-
-    @Test
-    public void testDecodeBEDFile_good() throws Exception {
-        String filepath = TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed";
-        int expected_lines = 34;
-        /*
-        Line 0:
-        1	25592413	25657872
-        Line 3:
-        1	152555536	152587611
-        Line 28:
-        14	73996607	74025282
-        Remember tribble increments numbers by 1
-         */
-
-        BEDCodec codec = new BEDCodec();
-
-        AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(filepath, codec, false);
-
-        Iterable<Feature> iter = reader.iterator();
-        int count = 0;
-        for (Feature feat : iter) {
-            Assert.assertTrue(feat.getContig().length() > 0);
-            Assert.assertTrue(feat.getEnd() >= feat.getStart());
-
-            if (count == 0) {
-                Assert.assertEquals("1", feat.getContig());
-                Assert.assertEquals(25592413 + 1, feat.getStart());
-                Assert.assertEquals(25657872, feat.getEnd());
-            }
-
-            if (count == 3) {
-                Assert.assertEquals("1", feat.getContig());
-                Assert.assertEquals(152555536 + 1, feat.getStart());
-                Assert.assertEquals(152587611, feat.getEnd());
-            }
-
-            if (count == 28) {
-                Assert.assertEquals("14", feat.getContig());
-                Assert.assertEquals(73996607 + 1, feat.getStart());
-                Assert.assertEquals(74025282, feat.getEnd());
-            }
-
-            count += 1;
-        }
-
-        Assert.assertEquals(expected_lines, count);
-
-        reader.close();
-
-    }
-
-    /**
-     * Test reading a BED file which is malformed.
-     *
-     * @throws Exception
-     */
-    @Test(expectedExceptions = RuntimeException.class)
-    public void testDecodeBEDFile_bad() throws Exception {
-        //This file has an extra tab in the second to last line
-        String filepath = TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed";
-        //The iterator implementation next() actually performs a get / read_next. The bad line is number 32,
-        //so we actually will only get 31 lines before reading that line.
-        int expected_count = 31;
-        BEDCodec codec = new BEDCodec();
-
-        AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(filepath, codec, false);
-
-        Iterable<Feature> iter = reader.iterator();
-        int count = 0;
-        for (Feature feat : iter) {
-            count += 1;
-        }
-        reader.close();
-    }
-
-    private void createIndex(File testFile, File idxFile) throws IOException {
-        // Create an index if missing
-        if (idxFile.exists()) {
-            idxFile.delete();
-        }
-        LinearIndex idx = (LinearIndex) IndexFactory.createLinearIndex(testFile, new BEDCodec());
-
-        LittleEndianOutputStream stream = null;
-        try {
-            stream = new LittleEndianOutputStream(new BufferedOutputStream(new FileOutputStream(idxFile)));
-            idx.write(stream);
-        } finally {
-            if (stream != null) {
-                stream.close();
-            }
-        }
-    }
-
-    @Test
-    public void testGetTabixFormat() {
-        Assert.assertEquals(new BEDCodec().getTabixFormat(), TabixFormat.BED);
-    }
-
-    @Test
-    public void testCanDecode() {
-        final BEDCodec codec = new BEDCodec();
-        final String pattern = "filename.%s%s";
-        for(final String bcExt: AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) {
-            Assert.assertTrue(codec.canDecode(String.format(pattern, "bed", bcExt)));
-            Assert.assertFalse(codec.canDecode(String.format(pattern, "vcf", bcExt)));
-            Assert.assertFalse(codec.canDecode(String.format(pattern, "bed.gzip", bcExt)));
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/gelitext/GeliTextTest.java b/src/test/java/htsjdk/tribble/gelitext/GeliTextTest.java
deleted file mode 100644
index c670bf1..0000000
--- a/src/test/java/htsjdk/tribble/gelitext/GeliTextTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package htsjdk.tribble.gelitext;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-
-/**
- * @author aaron
- *         <p/>
- *         Class GeliTextTest
- *         <p/>
- *         test out the geli text source codec and feature
- */
- at Deprecated
-public class GeliTextTest {
-    public static final File testFile = new File(TestUtils.DATA_DIR + "testGeliText.txt");
-    public static Index index;
-    private FeatureReader<GeliTextFeature> source;
-
-    // setup a new source before each class
-
-    @BeforeSuite
-    public void beforeTest() {
-        index = IndexFactory.createLinearIndex(testFile, new GeliTextCodec());
-        source = AbstractFeatureReader.getFeatureReader(testFile.getAbsolutePath(), new GeliTextCodec(), index);
-    }
-
-    @Test
-    public void testReadAllLines() {
-        // Query
-        try {
-            Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14592250);
-            int count = 0;
-            while (iter.hasNext()) {
-                GeliTextFeature feat = iter.next();
-                count++;
-            }
-            Assert.assertEquals(count, 50);
-        } catch (IOException e) {
-            Assert.fail("failed to generate iterator from feature source");
-        }
-    }
-
-    @Test
-    public void testGetSubRegion() {
-        // Query
-        try {
-            Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14539060); // should be the first 41 records
-            int count = 0;
-            while (iter.hasNext()) {
-                GeliTextFeature feat = iter.next();
-                count++;
-            }
-            Assert.assertEquals(count, 41);
-        } catch (IOException e) {
-            Assert.fail("failed to generate iterator from feature source");
-        }
-    }
-
-    @Test
-    public void testFirstRecord() {
-        // Query
-        try {
-            Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14592250);
-            int count = 0;
-
-            GeliTextFeature feat = iter.next();
-            // check the first records contents
-            // 22 14438070 A   0 0     GG      33.2618 33.2618 0       0       0       0     0 0       0       33.2618 0       0
-            Assert.assertTrue("22".equals(feat.getContig()));
-            Assert.assertEquals(feat.getStart(), 14438070);
-            Assert.assertEquals('A', feat.getRefBase());
-            Assert.assertEquals(feat.getDepthOfCoverage(), 0.0, 0.0001);
-            Assert.assertEquals(feat.getMaximumMappingQual(), 0.0, 0.0001);
-            Assert.assertTrue(DiploidGenotype.GG.equals(feat.getGenotype()));
-            Assert.assertEquals(feat.getDepthOfCoverage(), 0.0, 0.0001);
-            Assert.assertEquals(feat.getLODBestToReference(), 33.2618, 0.0001);
-            Assert.assertEquals(feat.getLODBestToNext(), 33.2618, 0.0001);
-            for (int x = 0; x < feat.getLikelihoods().length; x++) {
-                if (x == DiploidGenotype.GG.ordinal())
-                    Assert.assertEquals(feat.getLikelihoods()[x], 33.2618, 0.0001);
-                else
-                    Assert.assertEquals(feat.getLikelihoods()[x], 0, 0.0001);
-            }
-
-        } catch (IOException e) {
-            Assert.fail("failed to generate iterator from feature source");
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/index/IndexFactoryTest.java b/src/test/java/htsjdk/tribble/index/IndexFactoryTest.java
deleted file mode 100644
index 016049f..0000000
--- a/src/test/java/htsjdk/tribble/index/IndexFactoryTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.index.linear.LinearIndex;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.index.tabix.TabixIndex;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-/**
- * User: jacob
- * Date: 2012-Aug-23
- */
-public class IndexFactoryTest {
-
-    final File sortedBedFile = new File(TestUtils.DATA_DIR + "bed/Unigene.sample.bed");
-    final File unsortedBedFile = new File(TestUtils.DATA_DIR + "bed/unsorted.bed");
-    final File discontinuousFile = new File(TestUtils.DATA_DIR + "bed/disconcontigs.bed");
-    final BEDCodec bedCodec = new BEDCodec();
-
-    @Test
-    public void testCreateLinearIndex() throws Exception {
-        Index index = IndexFactory.createLinearIndex(sortedBedFile, bedCodec);
-        String chr = "chr2";
-
-        Assert.assertTrue(index.getSequenceNames().contains(chr));
-        Assert.assertTrue(index.containsChromosome(chr));
-        Assert.assertEquals(1, index.getSequenceNames().size());
-        List<Block> blocks = index.getBlocks(chr, 1, 50);
-        Assert.assertEquals(1, blocks.size());
-
-        Block block = blocks.get(0);
-        Assert.assertEquals(78, block.getSize());
-    }
-
-    @Test(expectedExceptions = TribbleException.MalformedFeatureFile.class, dataProvider = "indexFactoryProvider")
-    public void testCreateIndexUnsorted(IndexFactory.IndexType type) throws Exception{
-        Index index = IndexFactory.createIndex(unsortedBedFile, bedCodec, type);
-    }
-
-    @Test(expectedExceptions = TribbleException.MalformedFeatureFile.class, dataProvider = "indexFactoryProvider")
-    public void testCreateIndexDiscontinuousContigs(IndexFactory.IndexType type) throws Exception{
-        Index index = IndexFactory.createIndex(discontinuousFile, bedCodec, type);
-    }
-
-    @DataProvider(name = "indexFactoryProvider")
-    public Object[][] getIndexFactoryTypes(){
-        return new Object[][] {
-                new Object[] { IndexFactory.IndexType.LINEAR },
-                new Object[] { IndexFactory.IndexType.INTERVAL_TREE }
-        };
-    }
-
-    @Test
-    public void testCreateTabixIndexOnBlockCompressed() {
-        // index a VCF
-        final File inputFileVcf = new File("src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf");
-        final VCFFileReader readerVcf = new VCFFileReader(inputFileVcf, false);
-        final SAMSequenceDictionary vcfDict = readerVcf.getFileHeader().getSequenceDictionary();
-        final TabixIndex tabixIndexVcf =
-                IndexFactory.createTabixIndex(inputFileVcf, new VCFCodec(), TabixFormat.VCF,
-                vcfDict);
-
-        // index the same bgzipped VCF
-        final File inputFileVcfGz = new File("src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz");
-        final VCFFileReader readerVcfGz = new VCFFileReader(inputFileVcfGz, false);
-        final TabixIndex tabixIndexVcfGz =
-                IndexFactory.createTabixIndex(inputFileVcfGz, new VCFCodec(), TabixFormat.VCF,
-                        readerVcfGz.getFileHeader().getSequenceDictionary());
-
-        // assert that each sequence in the header that represents some VCF row ended up in the index
-        // for both the VCF and bgzipped VCF
-        for (SAMSequenceRecord samSequenceRecord : vcfDict.getSequences()) {
-            Assert.assertTrue(
-                    tabixIndexVcf.containsChromosome(samSequenceRecord.getSequenceName()),
-                    "Tabix indexed VCF does not contain sequence: " + samSequenceRecord.getSequenceName());
-
-            Assert.assertTrue(
-                    tabixIndexVcfGz.containsChromosome(samSequenceRecord.getSequenceName()),
-                    "Tabix indexed (bgzipped) VCF does not contain sequence: " + samSequenceRecord.getSequenceName());
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/index/IndexTest.java b/src/test/java/htsjdk/tribble/index/IndexTest.java
deleted file mode 100644
index aa179a9..0000000
--- a/src/test/java/htsjdk/tribble/index/IndexTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package htsjdk.tribble.index;
-
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.index.linear.LinearIndex;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.tribble.index.tabix.TabixIndex;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-import htsjdk.tribble.util.TabixUtils;
-import htsjdk.variant.vcf.VCFCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class IndexTest {
-    private final static String CHR = "1";
-    private final static File MassiveIndexFile = new File(TestUtils.DATA_DIR + "Tb.vcf.idx");
-
-    @DataProvider(name = "StartProvider")
-    public Object[][] makeStartProvider() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-//        for ( int mid = 0; mid <= end; mid += 1000000 ) {
-//            tests.add(new Object[]{0, mid, mid+1000000, end});
-//        }
-
-        tests.add(new Object[]{1226943, 1226943, 1226943, 2000000});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "StartProvider")
-    public void testMassiveQuery(final int start, final int mid, final int mid2, final int end) throws IOException {
-        LinearIndex index = (LinearIndex)IndexFactory.loadIndex(MassiveIndexFile.getAbsolutePath());
-
-        final List<Block> leftBlocks = index.getBlocks(CHR, start, mid);
-        final List<Block> rightBlocks = index.getBlocks(CHR, mid2, end); // gap must be big to avoid overlaps
-        final List<Block> allBlocks = index.getBlocks(CHR, start, end);
-
-        final long leftSize = leftBlocks.isEmpty() ? 0 : leftBlocks.get(0).getSize();
-        final long rightSize = rightBlocks.isEmpty() ? 0 : rightBlocks.get(0).getSize();
-        final long allSize = allBlocks.isEmpty() ? 0 : allBlocks.get(0).getSize();
-
-        Assert.assertTrue(leftSize >= 0, "Expected leftSize to be positive " + leftSize);
-        Assert.assertTrue(rightSize >= 0, "Expected rightSize to be positive " + rightSize);
-        Assert.assertTrue(allSize >= 0, "Expected allSize to be positive " + allSize);
-
-        Assert.assertTrue(allSize >= Math.max(leftSize,rightSize), "Expected size of joint query " + allSize + " to be at least >= max of left " + leftSize + " and right queries " + rightSize);
-    }
-
-
-    @DataProvider(name = "writeIndexData")
-    public Object[][] writeIndexData() {
-        return new Object[][]{
-                {new File("src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf"), IndexFactory.IndexType.LINEAR, new VCFCodec()},
-                {new File("src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz"), IndexFactory.IndexType.TABIX, new VCFCodec()},
-                {new File("src/test/resources/htsjdk/tribble/test.bed"), IndexFactory.IndexType.LINEAR, new BEDCodec()}
-        };
-    }
-
-    private final static OutputStream nullOutputStrem = new OutputStream() {
-        @Override
-        public void write(int b) throws IOException { }
-    };
-
-    @Test(dataProvider = "writeIndexData")
-    public void testWriteIndex(final File inputFile, final IndexFactory.IndexType type, final  FeatureCodec codec) throws Exception {
-        // temp index file for this test
-        final File tempIndex = File.createTempFile("index", (type == IndexFactory.IndexType.TABIX) ? TabixUtils.STANDARD_INDEX_EXTENSION : Tribble.STANDARD_INDEX_EXTENSION);
-        tempIndex.delete();
-        tempIndex.deleteOnExit();
-        // create the index
-        final Index index = IndexFactory.createIndex(inputFile, codec, type);
-        Assert.assertFalse(tempIndex.exists());
-        // write the index to a file
-        index.write(tempIndex);
-        Assert.assertTrue(tempIndex.exists());
-        // load the generated index
-        final Index loadedIndex = IndexFactory.loadIndex(tempIndex.getAbsolutePath());
-        // tess that the sequences and properties are the same
-        Assert.assertEquals(loadedIndex.getSequenceNames(), index.getSequenceNames());
-        Assert.assertEquals(loadedIndex.getProperties(), index.getProperties());
-        // test that write to a stream does not blows ip
-        index.write(new LittleEndianOutputStream(nullOutputStrem));
-    }
-
-}
diff --git a/src/test/java/htsjdk/tribble/index/interval/IntervalTreeTest.java b/src/test/java/htsjdk/tribble/index/interval/IntervalTreeTest.java
deleted file mode 100644
index ca47089..0000000
--- a/src/test/java/htsjdk/tribble/index/interval/IntervalTreeTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.interval;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.CloseableTribbleIterator;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.bed.BEDFeature;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * User: jrobinso
- * Date: Mar 24, 2010
- */
-public class IntervalTreeTest {
-
-    static IntervalTree tree;
-
-    @BeforeClass
-    public static void setupTree() {
-        tree = new IntervalTree();
-        tree.insert(new Interval(0, 3, null));
-        tree.insert(new Interval(5, 8, null));
-        tree.insert(new Interval(6, 10, null));
-        tree.insert(new Interval(8, 9, null));
-        tree.insert(new Interval(15, 23, null));
-        tree.insert(new Interval(16, 21, null));
-        tree.insert(new Interval(17, 19, null));
-        tree.insert(new Interval(19, 20, null));
-        tree.insert(new Interval(25, 30, null));
-        tree.insert(new Interval(26, 27, null));
-    }
-
-    @Test
-    public void testSearch() {
-
-        final Interval queryInterval = new Interval(1, 2);
-        List<Interval> intervals = tree.findOverlapping(queryInterval);
-        Assert.assertNotNull(intervals);
-
-        for (Interval iv : intervals) {
-            Assert.assertTrue(queryInterval.overlaps(iv));
-        }
-    }
-
-    @Test
-    public void testBed() throws Exception {
-        String bedFile = TestUtils.DATA_DIR + "/index/chrY_Y4_small.bed";
-        tree = new IntervalTree();
-        Assert.assertTrue(tree.isValid());
-
-        BufferedReader br = new BufferedReader(new FileReader(bedFile));
-        String nextLine = "";
-        while ((nextLine = br.readLine()) != null) {
-            if (!(nextLine.startsWith("#") || nextLine.startsWith("track"))) {
-                String[] tokens = nextLine.split("\t");
-                if (tokens.length > 2) {
-                    int start = Integer.parseInt(tokens[1]);
-                    int end = Integer.parseInt(tokens[2]);
-                    tree.insert(new Interval(start, end));
-                }
-
-            }
-        }
-
-//        List iv = (List) tree.findOverlapping(new Interval(2770226, 2770300));
-        Interval searchInterval = new Interval(2782632, 2782732);
-        List<Interval> iv = tree.findOverlapping(searchInterval);
-        for (Interval i : iv) {
-            Assert.assertTrue(i.overlaps(searchInterval));
-        }
-
-        br.close();
-
-    }
-
-    @Test
-    /**
-     *
-     * chr2	1	200000000	LONG_FEATURE
-     * ...
-     * chr2	179098961	179380395	Hs.134602
-     * chr2	179209546	179287210	Hs.620337
-     * chr2	179266309	179266748	Hs.609465
-     * chr2	179296428	179300012	Hs.623987
-     * chr2	179302952	179303488	Hs.594545
-
-     */
-    public void testOverlappingFeatures() throws Exception {
-        //chr2:179,222,066-179,262,059<- CONTAINS TTN
-
-        Set<String> names = new HashSet<String>(Arrays.asList("Hs.134602", "Hs.620337", "Hs.609465", "Hs.623987",
-                "Hs.594545", "LONG_FEATURE"));
-
-        String bedFile = TestUtils.DATA_DIR + "/bed/Unigene.sample.bed";
-        String chr = "chr2";
-        int start = 179266309;
-        int end = 179303488 ;
-        int expectedCount = 6;
-
-
-        // Interval tree index
-        int batchSize = 1;
-        Index idx = IndexFactory.createIntervalIndex(new File(bedFile), new BEDCodec(), batchSize);
-
-        FeatureReader<BEDFeature> bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
-        CloseableTribbleIterator<BEDFeature>iter = bfr.query(chr, start, end);
-        int countInterval = 0;
-        while (iter.hasNext()) {
-            BEDFeature feature = iter.next();
-            Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
-            Assert.assertTrue(names.contains(feature.getName()));
-            countInterval++;
-        }
-
-        Assert.assertEquals(countInterval, expectedCount);
-
-
-    }
-
-
-}
-
diff --git a/src/test/java/htsjdk/tribble/index/linear/LinearIndexTest.java b/src/test/java/htsjdk/tribble/index/linear/LinearIndexTest.java
deleted file mode 100644
index 09f920e..0000000
--- a/src/test/java/htsjdk/tribble/index/linear/LinearIndexTest.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package htsjdk.tribble.index.linear;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.CloseableTribbleIterator;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.TestUtils;
-import htsjdk.tribble.bed.BEDCodec;
-import htsjdk.tribble.bed.BEDFeature;
-import htsjdk.tribble.index.Block;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class LinearIndexTest {
-    private static final File RANDOM_FILE = new File("notMeaningful");
-
-    private final static Block CHR1_B1 = new Block(1, 10);
-    private final static Block CHR1_B2 = new Block(10, 20);
-    private final static Block CHR1_B3 = new Block(20, 30);
-    private final static Block CHR2_B1 = new Block(1, 100);
-    private final static Block CHR2_B2 = new Block(100, 200);
-
-    private LinearIndex idx;
-
-    @BeforeTest
-    public void setup() {
-        idx = createTestIndex();
-    }
-
-    // chr1 (0, 10]
-    // chr1 (10, 20]
-    // chr1 (20, 30]
-    // chr2 (0, 100]
-    // chr2 (100, 200]
-    private static LinearIndex createTestIndex() {
-        final LinearIndex.ChrIndex chr1 = new LinearIndex.ChrIndex("chr1", 10);
-        chr1.addBlock(CHR1_B1);
-        chr1.addBlock(CHR1_B2);
-        chr1.addBlock(CHR1_B3);
-        chr1.updateLongestFeature(1);
-
-        final LinearIndex.ChrIndex chr2 = new LinearIndex.ChrIndex("chr2", 100);
-        chr2.addBlock(CHR2_B1);
-        chr2.addBlock(CHR2_B2);
-        chr2.updateLongestFeature(50);
-
-        final List<LinearIndex.ChrIndex> indices = Arrays.asList(chr1, chr2);
-        return new LinearIndex(indices, RANDOM_FILE);
-    }
-
-    @Test()
-    public void testBasicFeatures() {
-        Assert.assertEquals(idx.getChrIndexClass(), LinearIndex.ChrIndex.class);
-        Assert.assertEquals(idx.getType(), LinearIndex.INDEX_TYPE);
-        Assert.assertFalse(idx.hasFileSize());
-        Assert.assertFalse(idx.hasTimestamp());
-        Assert.assertFalse(idx.hasMD5());
-        Assert.assertTrue(idx.isCurrentVersion());
-
-        Assert.assertNotNull(idx.getSequenceNames());
-        Assert.assertEquals(idx.getSequenceNames().size(), 2);
-        Assert.assertTrue(idx.getSequenceNames().contains("chr1"));
-        Assert.assertTrue(idx.getSequenceNames().contains("chr2"));
-        Assert.assertTrue(idx.containsChromosome("chr1"));
-        Assert.assertTrue(idx.containsChromosome("chr2"));
-        Assert.assertFalse(idx.containsChromosome("chr3"));
-
-        Assert.assertEquals(idx.getIndexedFile(), new File(RANDOM_FILE.getAbsolutePath()));
-
-        Assert.assertNotNull(idx.getBlocks("chr1"));
-        Assert.assertEquals(idx.getBlocks("chr1").size(), 3);
-
-        Assert.assertNotNull(idx.getBlocks("chr2"));
-        Assert.assertEquals(idx.getBlocks("chr2").size(), 2);
-    }
-
-    @Test()
-    public void testEquals() {
-        final LinearIndex idx2 = createTestIndex();
-
-        Assert.assertEquals(idx, idx, "Identical indices are equal");
-        Assert.assertTrue(idx.equalsIgnoreProperties(idx), "Identical indices are equalIgnoreTimeStamp");
-        Assert.assertTrue(idx.equalsIgnoreProperties(idx2), "Indices constructed the same are equalIgnoreTimeStamp");
-
-        idx2.setTS(123456789);
-        Assert.assertNotSame(idx, idx2, "Indices with different timestamps are not the same");
-        Assert.assertTrue(idx.equalsIgnoreProperties(idx2), "Indices with different timestamps are equalIgnoreTimeStamp");
-    }
-
-
-    // chr1 (0, 10]
-    // chr1 (10, 20]
-    // chr1 (20, 30]
-    // chr2 (0, 100]
-    // chr2 (100, 200]
-    //@Test()
-    // TODO -- this is not a useful test as written -- the linear index always returns a single block since by
-    // TODO -- definition they are contiguous and can be collapsed to a single block.
-    public void testBasicQuery() {
-        testQuery("chr1", 1, 1, CHR1_B1);
-        testQuery("chr1", 1, 2, CHR1_B1);
-        testQuery("chr1", 1, 9, CHR1_B1);
-        testQuery("chr1", 10, 10, CHR1_B1);
-
-        testQuery("chr1", 10, 11, CHR1_B1, CHR1_B2);
-        testQuery("chr1", 11, 11, CHR1_B2);
-        testQuery("chr1", 11, 12, CHR1_B2);
-        testQuery("chr1", 11, 19, CHR1_B2);
-
-        testQuery("chr1", 10, 19, CHR1_B1, CHR1_B2);
-        testQuery("chr1", 10, 21, CHR1_B1, CHR1_B2, CHR1_B3);
-        testQuery("chr1", 25, 30, CHR1_B3);
-        testQuery("chr1", 35, 40);
-
-        testQuery("chr2", 1, 1, CHR2_B1);
-        testQuery("chr2", 100, 100, CHR2_B1);
-        testQuery("chr2", 125, 125, CHR2_B1, CHR2_B2); // because of the 50 bp events
-        testQuery("chr2", 151, 151, CHR2_B2); // because of the 50 bp events
-        testQuery("chr2", 249, 249, CHR2_B2); // because of the 50 bp events
-        testQuery("chr2", 251, 251); // just escaping the 50 bp longest event
-    }
-
-    private final void testQuery(final String chr, final int start, final int stop, final Block... expectedBlocksArray) {
-        final List<Block> qBlocks = idx.getBlocks(chr, start, stop);
-        final List<Block> eBlocks = Arrays.asList(expectedBlocksArray);
-
-        Assert.assertEquals(qBlocks.size(), eBlocks.size(),
-                String.format("Query %s:%d-%d returned %d blocks but we only expected %d.", chr, start, stop, qBlocks.size(), eBlocks.size()));
-        for (int i = 0; i < qBlocks.size(); i++)
-            Assert.assertEquals(qBlocks.get(i), eBlocks.get(i));
-    }
-
-    File fakeBed = new File(TestUtils.DATA_DIR + "fakeBed.bed");
-
-    @Test
-    public void oneEntryFirstChr() {
-        final BEDCodec code = new BEDCodec();
-        final Index index = IndexFactory.createLinearIndex(fakeBed, code);
-        final AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(fakeBed.getAbsolutePath(), code, index);
-
-        try {
-            final CloseableTribbleIterator it = reader.iterator();
-            int count = 0;
-            while (it.hasNext()) {
-                it.next();
-                count++;
-            }
-            Assert.assertEquals(51, count);
-        } catch (final IOException e) {
-            Assert.fail("Unable to get iterator due to " + e.getMessage());
-        }
-    }
-
-
-    @Test
-    /**
-     *
-     * chr2	1	200000000	LONG_FEATURE
-     * ...
-     * chr2	179098961	179380395	Hs.134602
-     * chr2	179209546	179287210	Hs.620337
-     * chr2	179266309	179266748	Hs.609465
-     * chr2	179296428	179300012	Hs.623987
-     * chr2	179302952	179303488	Hs.594545
-
-     */
-    public void testOverlappingFeatures() throws Exception {
-        //chr2:179,222,066-179,262,059<- CONTAINS TTN
-
-        final Set<String> names = new HashSet<String>(Arrays.asList("Hs.134602", "Hs.620337", "Hs.609465", "Hs.623987",
-                "Hs.594545", "LONG_FEATURE"));
-
-        final String bedFile = TestUtils.DATA_DIR + "bed/Unigene.sample.bed";
-        final String chr = "chr2";
-        final int start = 179266309;
-        final int end = 179303488;
-        final int expectedCount = 6;
-
-
-        // Linear binned index
-        LinearIndex.enableAdaptiveIndexing = false;
-        final int binSize = 1000;
-        Index idx = IndexFactory.createLinearIndex(new File(bedFile), new BEDCodec(), binSize);
-
-        FeatureReader<BEDFeature> bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
-        CloseableTribbleIterator<BEDFeature> iter = bfr.query(chr, start, end);
-        int countInterval = 0;
-        while (iter.hasNext()) {
-            final BEDFeature feature = iter.next();
-            Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
-            Assert.assertTrue(names.contains(feature.getName()));
-            countInterval++;
-        }
-
-        Assert.assertEquals(countInterval, expectedCount);
-
-        //Repeat with adaptive indexing
-        LinearIndex.enableAdaptiveIndexing = true;
-        idx = IndexFactory.createLinearIndex(new File(bedFile), new BEDCodec(), binSize);
-
-        bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
-        iter = bfr.query(chr, start, end);
-        countInterval = 0;
-        while (iter.hasNext()) {
-            final BEDFeature feature = iter.next();
-            Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
-            Assert.assertTrue(names.contains(feature.getName()));
-            countInterval++;
-        }
-
-        Assert.assertEquals(countInterval, expectedCount);
-
-
-    }
-
-}
diff --git a/src/test/java/htsjdk/tribble/index/tabix/TabixIndexTest.java b/src/test/java/htsjdk/tribble/index/tabix/TabixIndexTest.java
deleted file mode 100644
index 6981b87..0000000
--- a/src/test/java/htsjdk/tribble/index/tabix/TabixIndexTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.tribble.index.tabix;
-
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.tribble.util.LittleEndianOutputStream;
-import htsjdk.tribble.util.TabixUtils;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.writer.VariantContextWriter;
-import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-public class TabixIndexTest {
-    private static final File SMALL_TABIX_FILE = new File("src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz.tbi");
-    private static final File BIGGER_TABIX_FILE = new File("src/test/resources/htsjdk/tribble/tabix/bigger.vcf.gz.tbi");
-
-    /**
-     * Read an existing index from disk, write it to a temp file, read that in, and assert that both in-memory
-     * representations are identical.  Disk representations may not be identical due to arbitrary bin order and
-     * compression differences.
-     */
-    @Test(dataProvider = "readWriteTestDataProvider")
-    public void readWriteTest(final File tabixFile) throws Exception {
-        final TabixIndex index = new TabixIndex(tabixFile);
-        final File indexFile = File.createTempFile("TabixIndexTest.", TabixUtils.STANDARD_INDEX_EXTENSION);
-        indexFile.deleteOnExit();
-        final LittleEndianOutputStream los = new LittleEndianOutputStream(new BlockCompressedOutputStream(indexFile));
-        index.write(los);
-        los.close();
-        final TabixIndex index2 = new TabixIndex(indexFile);
-        Assert.assertEquals(index, index2);
-        // Unfortunately, can't do byte comparison of original file and temp file, because 1) different compression
-        // levels; and more importantly, arbitrary order of bins in bin list.
-    }
-
-    @DataProvider(name = "readWriteTestDataProvider")
-    public Object[][] readWriteTestDataProvider() {
-        return new Object[][]{
-                {SMALL_TABIX_FILE},
-                {BIGGER_TABIX_FILE}
-        };
-    }
-
-    @Test
-    public void testQueryProvidedItemsAmount() throws IOException {
-        final String VCF = "src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf";
-        // Note that we store only compressed files
-        final File plainTextVcfInputFile = new File(VCF);
-        plainTextVcfInputFile.deleteOnExit();
-        final File plainTextVcfIndexFile = new File(VCF + ".tbi");
-        plainTextVcfIndexFile.deleteOnExit();
-        final File compressedVcfInputFile = new File(VCF + ".gz");
-        final File compressedTbiIndexFile = new File(VCF + ".gz.tbi");
-        final VCFFileReader compressedVcfReader = new VCFFileReader(compressedVcfInputFile, compressedTbiIndexFile);
-
-        //create plain text VCF without "index on the fly" option
-        final VariantContextWriter plainTextVcfWriter = new VariantContextWriterBuilder()
-                .setOptions(VariantContextWriterBuilder.NO_OPTIONS)
-                .setOutputFile(VCF)
-                .build();
-        plainTextVcfWriter.writeHeader(compressedVcfReader.getFileHeader());
-        for (VariantContext vc : compressedVcfReader) {
-            if (vc != null) plainTextVcfWriter.add(vc);
-        }
-        plainTextVcfWriter.close();
-
-        IndexFactory.createTabixIndex(plainTextVcfInputFile,
-                new VCFCodec(),
-                TabixFormat.VCF,
-                new VCFFileReader(plainTextVcfInputFile, false).getFileHeader().getSequenceDictionary()
-        ) // create TabixIndex straight from plaintext VCF
-                .write(plainTextVcfIndexFile); // write it
-
-        final VCFFileReader plainTextVcfReader = new VCFFileReader(plainTextVcfInputFile, plainTextVcfIndexFile);
-        // Now we have both plaintext and compressed VCFs with provided TabixIndex-es and could test their "queryability"
-
-        // magic numbers chosen from just looking in provided VCF file
-        try {
-            // just somewhere in middle of chromosome
-            Assert.assertEquals(42, countIteratedElements(compressedVcfReader.query("1", 868379 - 1, 1006891 + 1)));
-            Assert.assertEquals(42, countIteratedElements(plainTextVcfReader.query("1", 868379 - 1, 1006891 + 1)));
-            // chromosome start
-            Assert.assertEquals(13, countIteratedElements(compressedVcfReader.query("1", 1, 836463 + 1)));
-            Assert.assertEquals(13, countIteratedElements(plainTextVcfReader.query("1", 1, 836463 + 1)));
-            // chromosome end
-            Assert.assertEquals(36, countIteratedElements(compressedVcfReader.query("1", 76690833 - 1, 76837502 + 11111111)));
-            Assert.assertEquals(36, countIteratedElements(plainTextVcfReader.query("1", 76690833 - 1, 76837502 + 11111111)));
-            // where's no one feature in the middle of chromosome
-            Assert.assertEquals(0, countIteratedElements(compressedVcfReader.query("1", 36606472 + 1, 36623523 - 1)));
-            Assert.assertEquals(0, countIteratedElements(plainTextVcfReader.query("1", 36606472 + 1, 36623523 - 1)));
-            // before chromosome
-            Assert.assertEquals(0, countIteratedElements(compressedVcfReader.query("1", 1, 10)));
-            Assert.assertEquals(0, countIteratedElements(plainTextVcfReader.query("1", 1, 10)));
-            // after chromosome
-            Assert.assertEquals(0, countIteratedElements(compressedVcfReader.query("1", 76837502 * 15, 76837502 * 16)));
-            Assert.assertEquals(0, countIteratedElements(plainTextVcfReader.query("1", 76837502 * 15, 76837502 * 16)));
-        } catch (NullPointerException e) {
-            Assert.fail("Exception caught on querying: ", e);
-            // before fix exception was thrown from 'TabixIndex.getBlocks()' on 'chunks.size()' while 'chunks == null' for plain files
-        } finally {
-            plainTextVcfReader.close();
-            compressedVcfReader.close();
-        }
-    }
-
-    private static int countIteratedElements(Iterator iterator) {
-        int counter = 0;
-        while (iterator.hasNext()) {
-            iterator.next();
-            counter++;
-        }
-        return counter;
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/AsciiLineReaderTest.java b/src/test/java/htsjdk/tribble/readers/AsciiLineReaderTest.java
deleted file mode 100644
index 822f6cf..0000000
--- a/src/test/java/htsjdk/tribble/readers/AsciiLineReaderTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.tribble.TestUtils;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-/**
- * User: jacob
- * Date: 2012/05/09
- */
-public class AsciiLineReaderTest {
-    @BeforeMethod
-    public void setUp() throws Exception {
-
-    }
-
-    @AfterMethod
-    public void tearDown() throws Exception {
-
-    }
-
-    /**
-     * Test that we read the correct number of lines
-     * from a file
-     * @throws Exception
-     */
-    @Test
-    public void testReadLines() throws Exception {
-        String filePath = TestUtils.DATA_DIR + "gwas/smallp.gwas";
-        InputStream is = new FileInputStream(filePath);
-        AsciiLineReader reader = new AsciiLineReader(is);
-        int actualLines = 0;
-        int expectedNumber = 20;
-        String nextLine = "";
-
-        while((nextLine = reader.readLine()) != null && actualLines < (expectedNumber + 5)){
-            actualLines++;
-            //This particular test file has no empty lines
-            assertTrue(nextLine.length() > 0);
-        }
-
-        assertEquals(expectedNumber, actualLines);
-
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/LongLineBufferedReaderTest.java b/src/test/java/htsjdk/tribble/readers/LongLineBufferedReaderTest.java
deleted file mode 100644
index 6c4c946..0000000
--- a/src/test/java/htsjdk/tribble/readers/LongLineBufferedReaderTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-
-/**
- * @author mccowan
- */
-public class LongLineBufferedReaderTest {
-
-    /**
-     * Test that we read the correct number of lines
-     * from a file
-     * @throws Exception
-     */
-    @Test
-    public void testReadLines() throws Exception {
-        String filePath = TestUtils.DATA_DIR + "large.txt";
-        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
-        LongLineBufferedReader testReader = new LongLineBufferedReader(new InputStreamReader(new FileInputStream(filePath)));
-        String line;
-        while((line = reader.readLine()) != null){
-            Assert.assertEquals(testReader.readLine(), line);
-        }
-        Assert.assertNull(testReader.readLine());
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/PositionalBufferedStreamTest.java b/src/test/java/htsjdk/tribble/readers/PositionalBufferedStreamTest.java
deleted file mode 100644
index 3dd7cf3..0000000
--- a/src/test/java/htsjdk/tribble/readers/PositionalBufferedStreamTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * User: jacob
- * Date: 2012/05/09
- */
-public class PositionalBufferedStreamTest {
-
-    InputStream FileIs;
-    long expectedBytes;
-
-
-    @BeforeMethod
-    public void setUp() throws Exception {
-        File fi =  new File(TestUtils.DATA_DIR + "test.bed");
-        FileIs = new FileInputStream(fi);
-        expectedBytes = fi.length();
-    }
-
-    @AfterMethod
-    public void tearDown() throws Exception {
-        if(FileIs != null){
-            FileIs.close();
-            FileIs = null;
-        }
-    }
-
-    @Test
-    public void testPeek() throws Exception{
-        int trials = 10;
-        PositionalBufferedStream is = new PositionalBufferedStream(FileIs);
-        int bb = is.peek();
-        for(int ii=0; ii < trials; ii++){
-            Assert.assertEquals(is.peek(), bb);
-            Assert.assertEquals(is.getPosition(), 0);
-        }
-
-        while((bb = is.peek()) >= 0){
-            Assert.assertEquals(is.read(), bb);
-        }
-    }
-
-    @Test
-    public void testIsDone() throws Exception{
-        PositionalBufferedStream is = new PositionalBufferedStream(FileIs);
-        while(!is.isDone()){
-            is.read();
-        }
-        Assert.assertTrue(is.isDone());
-        Assert.assertEquals(is.getPosition(), expectedBytes);
-    }
-
-    @Test
-    public void testReadCorrectNumberBytes() throws Exception{
-        int[] bufSizes= new int[]{5, 20, 60, 120, 131, 150, 200, 1000, 10000, 20000, 512000, 2 << 20};
-        for(Integer bufSize: bufSizes){
-            setUp();
-            tstReadCorrectNumberBytes(bufSize);
-            tearDown();
-        }
-    }
-
-    public void tstReadCorrectNumberBytes(int bufferSize) throws Exception{
-        InputStream is = new PositionalBufferedStream(FileIs, bufferSize);
-        long count = 0;
-        while(is.read() >= 0){
-            count++;
-        }
-
-        Assert.assertEquals(count, expectedBytes);
-    }
-
-    @DataProvider(name = "ReadBytesTestData")
-    public Object[][] createReadBytesTestData() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        for ( int byteReadSize : Arrays.asList(5, 10, 100, 255) )
-            for ( int bufSize : Arrays.asList(1, 10, 100, 1000) )
-                tests.add( new Object[]{ (Integer)byteReadSize, (Integer)bufSize });
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "ReadBytesTestData")
-    public void testReadBytes(final int byteReadSize, final int bufsize) throws Exception {
-        final byte[] bytes = new byte[255];
-        for ( int i = 0; i < bytes.length; i++ ) bytes[i] = (byte)i;
-        final ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-
-        final byte[] readBytes = new byte[byteReadSize];
-        final PositionalBufferedStream pbs = new PositionalBufferedStream(bais, bufsize);
-
-        int i = 0;
-        while ( i < 255 ) {
-            final int expectedBytesToRead = Math.min(255 - i, readBytes.length);
-            final int nBytesRead = pbs.read(readBytes);
-            Assert.assertEquals(nBytesRead, expectedBytesToRead, "Didn't read as many bytes as expected from PBS");
-
-            for ( int j = 0; j < nBytesRead; j++ )
-                Assert.assertEquals(readBytes[j], bytes[i+j], "Bytes read not those expected");
-
-            i += nBytesRead;
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/ReaderTest.java b/src/test/java/htsjdk/tribble/readers/ReaderTest.java
deleted file mode 100644
index d700e04..0000000
--- a/src/test/java/htsjdk/tribble/readers/ReaderTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package htsjdk.tribble.readers;
-
-
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests for streams and readers
- */
-public class ReaderTest {
-    @BeforeClass
-    public void setup() throws IOException {
-    }
-
-    @AfterClass
-    public void teardown() throws Exception {
-
-    }
-
-    @Test
-    public void testMultipleLines() throws IOException {
-        testStream("line 1\nline2\n");
-    }
-
-    @Test
-    public void testSingleLine() throws IOException {
-        testStream("line 1\n");
-    }
-
-    @Test
-    public void testEmpty() throws IOException {
-        testStream("");
-    }
-
-
-    @Test
-    public void testLotsOfLines() throws IOException {
-        final StringBuilder b = new StringBuilder();
-        for ( int i = 0; i < 10000; i++ ) {
-            b.append("line " + i + "\n");
-        }
-        testStream(b.toString());
-    }
-
-    @Test
-    public void testMassiveLines() throws IOException {
-        final StringBuilder b = new StringBuilder();
-        for ( int i = 0; i < 10; i++ ) {
-            for ( int j = 0; j < 1000000; j++) {
-                b.append(i + "." + j);
-            }
-            b.append("\n");
-        }
-        testStream(b.toString());
-    }
-
-    @Test
-    public void testSkip() throws IOException {
-        for ( int skipSizeBase : Arrays.asList(0, 10, 100, 1000, 10000, 1000000)) {
-            for ( int skipSizeAdd = 0; skipSizeAdd < 10; skipSizeAdd ++ ) {
-                final int skipSize = skipSizeBase + skipSizeAdd;
-                final byte[] bytes = new byte[skipSize+2];
-                Arrays.fill(bytes, 0, skipSize, (byte)0);
-                bytes[skipSize] = 1;
-                bytes[skipSize+1] = 2;
-
-                final InputStream is = new ByteArrayInputStream(bytes);
-                final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
-                pbs.skip(skipSize);
-
-                // first value is 1
-                Assert.assertTrue(! pbs.isDone());
-                Assert.assertEquals(pbs.getPosition(), skipSize);
-                Assert.assertEquals(pbs.peek(), 1);
-                Assert.assertEquals(pbs.read(), 1);
-
-                Assert.assertTrue(! pbs.isDone());
-                Assert.assertEquals(pbs.getPosition(), skipSize + 1);
-                Assert.assertEquals(pbs.peek(), 2);
-                Assert.assertEquals(pbs.read(), 2);
-
-                Assert.assertTrue(pbs.isDone());
-            }
-        }
-    }
-
-    private void testStream(final String s) throws IOException {
-        testStream(s.getBytes());
-        testLineReader(s);
-    }
-
-    private void testStream(final byte[] bytes) throws IOException {
-        final InputStream is = new ByteArrayInputStream(bytes);
-        final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
-
-        int bytePos = 0;
-        while ( ! pbs.isDone() ) {
-            Assert.assertTrue(bytePos < bytes.length);
-
-            // test position
-            Assert.assertEquals(pbs.getPosition(), bytePos);
-
-            // test peek
-            final byte atPos = bytes[bytePos];
-            Assert.assertEquals(toByte(pbs.peek()), atPos);
-            // test position
-            Assert.assertEquals(pbs.getPosition(), bytePos);
-
-            // test read
-            Assert.assertEquals(toByte(pbs.read()), atPos);
-            bytePos++;
-            // test position
-            Assert.assertEquals(pbs.getPosition(), bytePos);
-
-            // test repeek
-            if ( bytePos < bytes.length ) {
-                Assert.assertEquals(toByte(pbs.peek()), bytes[bytePos]);
-                // test position
-                Assert.assertEquals(pbs.getPosition(), bytePos);
-            }
-        }
-
-        Assert.assertEquals(bytePos, bytes.length);
-        pbs.close();
-    }
-
-    private void testLineReader(final String lines) throws IOException {
-        // read all of the lines into the
-        final BufferedReader br = new BufferedReader(new StringReader(lines));
-        final List<String> eachLine = new ArrayList<String>();
-        while (true) {
-            final String line = br.readLine();
-            if ( line == null ) break;
-            eachLine.add(line);
-        }
-
-        final byte[] bytes = lines.getBytes();
-        final InputStream is = new ByteArrayInputStream(bytes);
-        final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
-        final LineReader alr = new AsciiLineReader(pbs); // AsciiLineReader must be used here because it does not read ahead.
-
-        int bytePos = 0, linePos = 0;
-        /** 
-         * TODO: Requires revision: we're calling readLine() here, but making assumptions about how the underlying input stream operates.
-         * Specifically, these tests assume the underlying stream only advances exactly the required number of characters to find the
-         * newline, which is not true for most buffered readers.
-         */
-        while ( ! pbs.isDone() ) {
-            Assert.assertTrue(bytePos < bytes.length);
-
-            // test position
-            Assert.assertEquals(pbs.getPosition(), bytePos);
-
-            // test read
-            final String readLine = alr.readLine();
-            Assert.assertEquals(readLine, eachLine.get(linePos));
-            linePos++;
-
-            bytePos += readLine.length() + 1; // 1 for the terminator
-            // test position
-            Assert.assertEquals(pbs.getPosition(), bytePos);
-        }
-
-        Assert.assertEquals(linePos, eachLine.size());
-        Assert.assertEquals(bytePos, bytes.length);
-        pbs.close();
-    }
-
-    private final byte toByte(int i) {
-        return (byte)(i & 0xFF);
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/SynchronousLineReaderUnitTest.java b/src/test/java/htsjdk/tribble/readers/SynchronousLineReaderUnitTest.java
deleted file mode 100644
index fbb5d18..0000000
--- a/src/test/java/htsjdk/tribble/readers/SynchronousLineReaderUnitTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package htsjdk.tribble.readers;
-
-import htsjdk.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-
-/**
- * @author mccowan
- */
-public class SynchronousLineReaderUnitTest {
-    @Test
-    public void testLineReaderIterator_streamConstructor() throws Exception {
-        final File filePath = new File(TestUtils.DATA_DIR + "gwas/smallp.gwas");
-        final LineIterator lineIterator = new LineIteratorImpl(new SynchronousLineReader(new PositionalBufferedStream(new FileInputStream(filePath))));
-        final BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
-
-        while (lineIterator.hasNext()) {
-            Assert.assertEquals(lineIterator.next(), br.readLine());
-        }
-        Assert.assertNull(br.readLine());
-    }
-
-    @Test
-    public void testLineReaderIterator_readerConstructor() throws Exception {
-        final File filePath = new File(TestUtils.DATA_DIR + "gwas/smallp.gwas");
-        final LineIterator lineIterator = new LineIteratorImpl(new SynchronousLineReader(new InputStreamReader(new PositionalBufferedStream(new FileInputStream(filePath)))));
-        final BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
-
-        while (lineIterator.hasNext()) {
-            Assert.assertEquals(lineIterator.next(), br.readLine());
-        }
-        Assert.assertNull(br.readLine());
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/readers/TabixReaderTest.java b/src/test/java/htsjdk/tribble/readers/TabixReaderTest.java
deleted file mode 100644
index d7b36df..0000000
--- a/src/test/java/htsjdk/tribble/readers/TabixReaderTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package htsjdk.tribble.readers;
-
-
-import htsjdk.samtools.util.TestUtil;
-import htsjdk.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import static org.testng.AssertJUnit.assertTrue;
-
-
-/**
- * Created by IntelliJ IDEA.
- * User: jrobinso
- * Date: Jul 6, 2010
- * Time: 8:57:40 PM
- * To change this template use File | Settings | File Templates.
- */
-public class TabixReaderTest {
-
-    static String tabixFile = TestUtils.DATA_DIR + "tabix/trioDup.vcf.gz";
-    static TabixReader tabixReader;
-    static List<String> sequenceNames;
-
-    @BeforeClass
-    public void setup() throws IOException {
-        tabixReader = new TabixReader(tabixFile);
-        sequenceNames = new ArrayList<String>(tabixReader.getChromosomes());
-    }
-
-    @AfterClass
-    public void teardown() throws Exception {
-        tabixReader.close();
-    }
-
-    @Test
-    public void testSequenceNames() {
-        String[] expectedSeqNames = new String[24];
-        for (int i = 1; i < 24; i++) {
-            expectedSeqNames[i - 1] = String.valueOf(i);
-        }
-        expectedSeqNames[22] = "X";
-        expectedSeqNames[23] = "Y";
-        Assert.assertEquals(expectedSeqNames.length, sequenceNames.size());
-
-        for (String s : expectedSeqNames) {
-            Assert.assertTrue(sequenceNames.contains(s));
-        }
-
-
-    }
-    
-    @Test
-    public void testSequenceSet() {
-        Set<String> chroms= tabixReader.getChromosomes();
-        Assert.assertFalse(chroms.isEmpty());
-        Assert.assertTrue(chroms.contains("1"));
-        Assert.assertFalse(chroms.contains("MT"));
-        
-    }
-
-
-    @Test
-    public void testIterators() throws IOException {
-        TabixReader.Iterator iter=tabixReader.query("1", 1, 400);
-        Assert.assertNotNull(iter);
-        Assert.assertNotNull(iter.next());
-        Assert.assertNull(iter.next());
-        
-        iter=tabixReader.query("UN", 1, 100);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-        
-        iter=tabixReader.query("UN:1-100");
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-       
-        
-        iter=tabixReader.query("1:10-1");
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
- 
-        iter=tabixReader.query(999999,9,9);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-        
-        iter=tabixReader.query("1",Integer.MAX_VALUE-1,Integer.MAX_VALUE);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-        
-        final int pos_snp_in_vcf_chr1=327;
-        
-        iter=tabixReader.query("1",pos_snp_in_vcf_chr1,pos_snp_in_vcf_chr1);
-        Assert.assertNotNull(iter);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-
-        iter=tabixReader.query("1",pos_snp_in_vcf_chr1-1,pos_snp_in_vcf_chr1-1);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-
-        iter=tabixReader.query("1",pos_snp_in_vcf_chr1+1,pos_snp_in_vcf_chr1+1);
-        Assert.assertNotNull(iter);
-        Assert.assertNull(iter.next());
-
-    }
-    
-    
-    
-    /**
-     * Test reading a local tabix file
-     *
-     * @throws java.io.IOException
-     */
-    @Test
-    public void testLocalQuery() throws IOException {
-
-         TabixIteratorLineReader lineReader = new TabixIteratorLineReader(
-                tabixReader.query(tabixReader.chr2tid("4"), 320, 330));
-
-        int nRecords = 0;
-        String nextLine;
-        while ((nextLine = lineReader.readLine()) != null) {
-            assertTrue(nextLine.startsWith("4"));
-            nRecords++;
-        }
-        assertTrue(nRecords > 0);
-
-
-    }
-
-    /**
-     * Test reading a tabix file over http
-     *
-     * @throws java.io.IOException
-     */
-    @Test
-    public void testRemoteQuery() throws IOException {
-        String tabixFile = TestUtil.BASE_URL_FOR_HTTP_TESTS +"igvdata/tabix/trioDup.vcf.gz";
-
-        TabixReader tabixReader = new TabixReader(tabixFile);
-
-        TabixIteratorLineReader lineReader = new TabixIteratorLineReader(
-                tabixReader.query(tabixReader.chr2tid("4"), 320, 330));
-
-        int nRecords = 0;
-        String nextLine;
-        while ((nextLine = lineReader.readLine()) != null) {
-            assertTrue(nextLine.startsWith("4"));
-            nRecords++;
-        }
-        assertTrue(nRecords > 0);
-
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/util/ParsingUtilsTest.java b/src/test/java/htsjdk/tribble/util/ParsingUtilsTest.java
deleted file mode 100644
index 1c3ad1f..0000000
--- a/src/test/java/htsjdk/tribble/util/ParsingUtilsTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package htsjdk.tribble.util;
-
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * Parsing utils tests
- */
-public class ParsingUtilsTest {
-
-    static final String AVAILABLE_FTP_URL = "ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt";
-    static final String UNAVAILABLE_FTP_URL = "ftp://www.example.com/file.txt";
-
-    static final String AVAILABLE_HTTP_URL = "https://www.google.com";
-    static final String UNAVAILABLE_HTTP_URL = "http://www.unknownhostwhichshouldntexist.com";
-
-    @Test
-    public void testSplit1() {
-        String[] tokens = new String[10];
-        String blankColumnLine = "a\tb\t\td";
-        int nTokens = ParsingUtils.split(blankColumnLine, tokens, '\t');
-        Assert.assertEquals(nTokens,4);
-        Assert.assertEquals(tokens[0],"a");
-        Assert.assertEquals(tokens[1],"b");
-        Assert.assertEquals(tokens[2],"");
-        Assert.assertEquals(tokens[3],"d");
-    }
-
-    @Test
-    public void testSplit2() {
-        String[] tokens = new String[10];
-        String blankColumnLine = "a\tb\t\td\t";
-        int nTokens = ParsingUtils.split(blankColumnLine, tokens, '\t');
-        Assert.assertEquals(nTokens,5);
-        Assert.assertEquals(tokens[0],"a");
-        Assert.assertEquals(tokens[1],"b");
-        Assert.assertEquals(tokens[2],"");
-        Assert.assertEquals(tokens[3],"d");
-        Assert.assertEquals(tokens[4],"");
-    }
-
-    @Test
-    public void testSplitWhitespace1() {
-        String[] tokens = new String[10];
-        String blankColumnLine = "a b\t\td";
-        int nTokens = ParsingUtils.splitWhitespace(blankColumnLine, tokens);
-        Assert.assertEquals(nTokens,4);
-        Assert.assertEquals(tokens[0],"a");
-        Assert.assertEquals(tokens[1],"b");
-        Assert.assertEquals(tokens[2],"");
-        Assert.assertEquals(tokens[3],"d");
-    }
-
-    @Test
-    public void testSplitWhitespace2() {
-        String[] tokens = new String[10];
-        String blankColumnLine = "a b\t\td\t";
-        int nTokens = ParsingUtils.splitWhitespace(blankColumnLine, tokens);
-        Assert.assertEquals(nTokens,5);
-        Assert.assertEquals(tokens[0],"a");
-        Assert.assertEquals(tokens[1],"b");
-        Assert.assertEquals(tokens[2],"");
-        Assert.assertEquals(tokens[3],"d");
-    }
-
-    /**
-     * Tests that the string "joined", when split by "delim" using ParsingUtils.split(String, char),
-     * <ol>
-     * <li>Ends up with the expected number of items</li>
-     * <li>Ends up with the expected items</li>
-     * <li>Ends up with the same items as when the split is performed using String.split</li>
-     * <li>When re-joined (using ParsingUtils.join(String, Collection>String<) ) results in
-     *    the original string</li>
-     * </ol>
-     *
-     * @param joined
-     * @param delim
-     * @param expectedItems
-     */
-    private void testSplitJoinRoundtrip(String joined, char delim, List<String> expectedItems) {
-        List<String> split = ParsingUtils.split(joined, delim);
-        Assert.assertEquals(split.size(), expectedItems.size());
-        Assert.assertEquals(joined.split(Character.toString(delim), -1), split.toArray());
-        Assert.assertEquals(joined, ParsingUtils.join(Character.toString(delim), split));
-    }
-
-    @Test
-    public void testSplitJoinEmptyItem() {
-        testSplitJoinRoundtrip("a\tb\t\td", '\t', Arrays.asList("a", "b", "", "d"));
-    }
-
-    @Test
-    public void testSplitJoinEmptyAtEnd() {
-        testSplitJoinRoundtrip("a\tb\t\td\t", '\t', Arrays.asList("a", "b", "", "d", ""));
-    }
-
-    @Test
-    public void testSplitJoinEmpty() {
-        testSplitJoinRoundtrip("", '\t', Arrays.asList(""));
-    }
-
-    @Test
-    public void testSplitJoinSingleItem() {
-        testSplitJoinRoundtrip("a", '\t', Arrays.asList("a"));
-    }
-
-    @Test
-    public void testSplitJoinEmptyFirst() {
-        testSplitJoinRoundtrip("\ta\tb", '\t', Arrays.asList("", "a", "b"));
-    }
-
-    @Test
-    public void testFTPDoesExist() throws IOException{
-        tstExists(AVAILABLE_FTP_URL, true);
-    }
-
-    @Test
-    public void testFTPNotExist() throws IOException{
-        tstExists(UNAVAILABLE_FTP_URL, false);
-    }
-
-    @Test
-    public void testHTTPDoesExist() throws IOException{
-        tstExists(AVAILABLE_HTTP_URL, true);
-    }
-
-    @Test
-    public void testHTTPNotExist() throws IOException{
-        tstExists(UNAVAILABLE_HTTP_URL, false);
-    }
-
-    private void tstExists(String path, boolean expectExists) throws IOException{
-        boolean exists = ParsingUtils.resourceExists(path);
-        Assert.assertEquals(exists, expectExists);
-    }
-
-    @Test
-    public void testFTPOpenInputStream() throws IOException{
-        tstStream(AVAILABLE_FTP_URL);
-    }
-
-    @Test
-    public void testHTTPOpenInputStream() throws IOException{
-        tstStream(AVAILABLE_HTTP_URL);
-    }
-
-    private void tstStream(String path) throws IOException{
-        InputStream is = ParsingUtils.openInputStream(path);
-        Assert.assertNotNull(is, "InputStream is null for " + path);
-        int b = is.read();
-        Assert.assertNotSame(b, -1);
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/tribble/util/ftp/FTPClientTest.java b/src/test/java/htsjdk/tribble/util/ftp/FTPClientTest.java
deleted file mode 100644
index 3979b08..0000000
--- a/src/test/java/htsjdk/tribble/util/ftp/FTPClientTest.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package htsjdk.tribble.util.ftp;
-
-import htsjdk.samtools.util.ftp.FTPClient;
-import htsjdk.samtools.util.ftp.FTPReply;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.UnknownHostException;
-
-/**
-* @author Jim Robinson
-* @since 10/3/11
-*/
-public class FTPClientTest {
-
-    static String host = "ftp.broadinstitute.org";
-    static String file = "/pub/igv/TEST/test.txt";
-    static int fileSize = 27;
-    static byte[] expectedBytes = "abcdefghijklmnopqrstuvwxyz\n".getBytes();
-    FTPClient client;
-
-    @BeforeMethod
-    public void setUp() throws IOException {
-        client = new FTPClient();
-        FTPReply reply = client.connect(host);
-        Assert.assertTrue(reply.isSuccess(), "connect");
-    }
-
-    @AfterMethod
-    public void tearDown() {
-        System.out.println("Disconnecting");
-        client.disconnect();
-    }
-
-    @Test
-    public void testLogin() throws Exception {
-
-    }
-
-    @Test
-    public void testPasv() throws Exception {
-        try {
-            FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-            Assert.assertTrue(reply.isSuccess(), "login");
-
-            reply = client.pasv();
-            Assert.assertTrue(reply.isSuccess(), "pasv");
-        } finally {
-            client.closeDataStream();
-        }
-    }
-
-    @Test
-    public void testSize() throws Exception {
-
-        FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-        Assert.assertTrue(reply.isSuccess());
-
-        reply = client.binary();
-        Assert.assertTrue(reply.isSuccess(), "binary");
-
-        reply = client.size(file);
-        String val = reply.getReplyString();
-        int size = Integer.parseInt(val);
-        Assert.assertEquals(fileSize, size, "size");
-    }
-
-    @Test
-    public void testDownload() throws Exception {
-        try {
-            FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-            Assert.assertTrue(reply.isSuccess(), "login");
-
-            reply = client.binary();
-            Assert.assertTrue(reply.isSuccess(), "binary");
-
-            reply = client.pasv();
-            Assert.assertTrue(reply.isSuccess(), "pasv");
-
-            reply = client.retr(file);
-            Assert.assertEquals(reply.getCode(), 150, "retr");
-
-            InputStream is = client.getDataStream();
-            int idx = 0;
-            int b;
-            while ((b = is.read()) >= 0) {
-                Assert.assertEquals(expectedBytes[idx], (byte) b,"reading from stream");
-                idx++;
-            }
-
-        } finally {
-            client.closeDataStream();
-            FTPReply reply = client.retr(file);
-            System.out.println(reply.getCode());
-            Assert.assertTrue(reply.isSuccess(), "close");
-        }
-    }
-
-    @Test
-    public void testRest() throws Exception {
-        try {
-            FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-            Assert.assertTrue(reply.isSuccess(), "login");
-
-            reply = client.binary();
-            Assert.assertTrue(reply.isSuccess(), "binary");
-
-            reply = client.pasv();
-            Assert.assertTrue(reply.isSuccess(), "pasv");
-
-            final int restPosition = 5;
-            client.setRestPosition(restPosition);
-
-            reply = client.retr(file);
-            Assert.assertEquals(reply.getCode(), 150, "retr");
-
-            InputStream is = client.getDataStream();
-            int idx = restPosition;
-            int b;
-            while ((b = is.read()) >= 0) {
-                Assert.assertEquals(expectedBytes[idx], (byte) b, "reading from stream");
-                idx++;
-            }
-
-        } finally {
-            client.closeDataStream();
-            FTPReply reply = client.retr(file);
-            System.out.println(reply.getCode());
-            Assert.assertTrue(reply.isSuccess(), "close");
-        }
-    }
-
-    /**
-     * Test accessing a non-existent file
-     */
-    @Test
-    public void testNonExistentFile() throws Exception {
-
-        String host = "ftp.broadinstitute.org";
-        String file = "/pub/igv/TEST/fileDoesntExist.txt";
-        FTPClient client = new FTPClient();
-
-        FTPReply reply = client.connect(host);
-        Assert.assertTrue(reply.isSuccess(), "connect");
-
-        reply = client.login("anonymous", "igv at broadinstitute.org");
-        Assert.assertTrue(reply.isSuccess(), "login");
-
-        reply = client.binary();
-        Assert.assertTrue(reply.isSuccess(), "binary");
-
-        reply = client.executeCommand("size " + file);
-        Assert.assertEquals(550, reply.getCode(), "size");
-
-        client.disconnect();
-    }
-
-    /**
-     * Test accessing a non-existent server
-     */
-    @Test
-    public void testNonExistentServer() throws Exception {
-
-        String host = "ftp.noSuchServer.org";
-        String file = "/pub/igv/TEST/fileDoesntExist.txt";
-        FTPClient client = new FTPClient();
-
-        FTPReply reply = null;
-        try {
-            reply = client.connect(host);
-        } catch (UnknownHostException e) {
-            // This is expected
-        }
-
-        client.disconnect();
-    }
-
-    @Test
-    public void testMultiplePasv() throws Exception {
-
-        try {
-            FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-            Assert.assertTrue(reply.isSuccess(), "login");
-
-            reply = client.pasv();
-            Assert.assertTrue(reply.isSuccess(), "pasv 1");
-            client.closeDataStream();
-
-            reply = client.pasv();
-            Assert.assertTrue(reply.isSuccess(), "pasv 2");
-            client.closeDataStream();
-        }
-        finally {
-
-        }
-    }
-
-    @Test
-    public void testMultipleRest() throws Exception {
-        FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
-        Assert.assertTrue(reply.isSuccess(), "login");
-
-        reply = client.binary();
-        Assert.assertTrue(reply.isSuccess(), "binary");
-
-        restRetr(5, 10);
-        restRetr(2, 10);
-        restRetr(15, 10);
-    }
-
-    private void restRetr(int restPosition, int length) throws IOException {
-
-        try {
-
-            if (client.getDataStream() == null) {
-                FTPReply reply = client.pasv();
-                Assert.assertTrue(reply.isSuccess(), "pasv");
-            }
-
-            client.setRestPosition(restPosition);
-
-            FTPReply reply = client.retr(file);
-            //assertTrue(reply.getCode() == 150);
-
-            InputStream is = client.getDataStream();
-
-            byte[] buffer = new byte[length];
-            is.read(buffer);
-
-            for (int i = 0; i < length; i++) {
-                System.out.print((char) buffer[i]);
-                Assert.assertEquals(expectedBytes[i + restPosition], buffer[i], "reading from stream");
-            }
-            System.out.println();
-        }
-
-        finally {
-            client.closeDataStream();
-            FTPReply reply = client.getReply();  // <== MUST READ THE REPLY
-            System.out.println(reply.getReplyString());
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/util/ftp/FTPUtilsTest.java b/src/test/java/htsjdk/tribble/util/ftp/FTPUtilsTest.java
deleted file mode 100644
index a5f3b0e..0000000
--- a/src/test/java/htsjdk/tribble/util/ftp/FTPUtilsTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package htsjdk.tribble.util.ftp;
-
-import htsjdk.samtools.util.ftp.FTPUtils;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-/**
-* @author Jim Robinson
-* @since 10/4/11
-*/
-public class FTPUtilsTest {
-
-    @Test
-    public void testResourceAvailable() throws Exception {
-
-        URL goodUrl = new URL("ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt");
-        assertTrue(FTPUtils.resourceAvailable(goodUrl));
-
-        URL nonExistentURL = new URL("ftp://ftp.broadinstitute.org/pub/igv/TEST/doesntExist");
-        assertFalse(FTPUtils.resourceAvailable(nonExistentURL));
-
-        URL nonExistentServer = new URL("ftp://noSuchServer/pub/igv/TEST/doesntExist");
-        assertFalse(FTPUtils.resourceAvailable(nonExistentServer));
-
-
-    }
-}
diff --git a/src/test/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculationTest.java b/src/test/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculationTest.java
deleted file mode 100644
index fcf1bea..0000000
--- a/src/test/java/htsjdk/tribble/util/popgen/HardyWeinbergCalculationTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package htsjdk.tribble.util.popgen;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Created by farjoun on 7/18/14.
- */
-public class HardyWeinbergCalculationTest {
-
-    @DataProvider
-    public Object[][] testHwCalculateData() {
-        return new Object[][] {
-                new Object[] {generateHWTrio(100, 0.01), 1.0},
-                new Object[] {generateHWTrio(100, 0.1), 1.0},
-                new Object[] {generateHWTrio(1000, 0.1), 1.0},
-                new Object[] {generateHWTrio(1000, 0.01), 1.0},
-                new Object[] {generateHWTrio(1000, 0.001), 1.0},
-                new Object[] {generateHWTrio(10000, 0.1), 1.0},
-                new Object[] {generateHWTrio(10000, 0.01), 1.0},
-                new Object[] {generateHWTrio(10000, 0.001), 1.0},
-                new Object[] {generateHWTrio(100000, 0.1), 1.0},
-                new Object[] {generateHWTrio(100000, 0.01), 1.0},
-                new Object[] {generateHWTrio(100000, 0.001), 1.0},
-
-        };
-    }
-
-    private int[] generateHWTrio(final int total, final double p) {
-        return new int[] {
-                (int) Math.round(total * p * p),
-                (int) Math.round(total * 2 * p * (1 - p)),
-                (int) Math.round(total * (1 - p) * (1 - p))};
-    }
-
-    @Test(dataProvider = "testHwCalculateData")
-    public void testHwCalculate(final int[] genotypeCounts, final double expectedHWS) throws Exception {
-        Assert.assertEquals(HardyWeinbergCalculation.hwCalculate(genotypeCounts[0], genotypeCounts[1], genotypeCounts[2]), expectedHWS);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/PrintVariantsExampleTest.java b/src/test/java/htsjdk/variant/PrintVariantsExampleTest.java
deleted file mode 100644
index c82f2db..0000000
--- a/src/test/java/htsjdk/variant/PrintVariantsExampleTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* 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.
-*/
-
-package htsjdk.variant;
-
-import htsjdk.samtools.util.IOUtil;
-import htsjdk.variant.example.PrintVariantsExample;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.List;
-import java.util.OptionalInt;
-import java.util.stream.IntStream;
-
-public class PrintVariantsExampleTest {
-    @Test
-    public void testExampleWriteFile() throws IOException {
-        final File tempFile = File.createTempFile("example", ".vcf");
-        tempFile.deleteOnExit();
-        File f1 = new File("src/test/resources/htsjdk/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf");
-        final String[] args = {
-                f1.getAbsolutePath(),
-                tempFile.getAbsolutePath()
-        };
-        Assert.assertEquals(tempFile.length(), 0);
-        PrintVariantsExample.main(args);
-        Assert.assertNotEquals(tempFile.length(), 0);
-
-        assertFilesEqualSkipHeaders(tempFile, f1);
-    }
-
-    private void assertFilesEqualSkipHeaders(File tempFile, File f1) throws FileNotFoundException {
-        final List<String> lines1 = IOUtil.slurpLines(f1);
-        final List<String> lines2 = IOUtil.slurpLines(tempFile);
-        final int firstNonComment1 = IntStream.range(0, lines1.size()).filter(i -> !lines1.get(i).startsWith("#")).findFirst().getAsInt();
-        final int firstNonComment2 = IntStream.range(0, lines2.size()).filter(i -> !lines2.get(i).startsWith("#")).findFirst().getAsInt();
-        Assert.assertEquals(lines1.subList(firstNonComment1, lines1.size()), lines2.subList(firstNonComment2,lines2.size()));
-    }
-}
diff --git a/src/test/java/htsjdk/variant/VariantBaseTest.java b/src/test/java/htsjdk/variant/VariantBaseTest.java
deleted file mode 100644
index 87345a0..0000000
--- a/src/test/java/htsjdk/variant/VariantBaseTest.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.SAMSequenceRecord;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFConstants;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Base class for test classes within org.broadinstitute.variant
- */
-public class VariantBaseTest {
-
-    public static final String variantTestDataRoot = new File("src/test/resources/htsjdk/variant/").getAbsolutePath() + "/";
-
-    /**
-     * Creates a temp file that will be deleted on exit after tests are complete.
-     * @param name Prefix of the file.
-     * @param extension Extension to concat to the end of the file.
-     * @return A file in the temporary directory starting with name, ending with extension, which will be deleted after the program exits.
-     */
-    public static File createTempFile(String name, String extension) {
-        try {
-            File file = File.createTempFile(name, extension);
-            file.deleteOnExit();
-            return file;
-        } catch (IOException ex) {
-            throw new RuntimeException("Cannot create temp file: " + ex.getMessage(), ex);
-        }
-    }
-
-    private static final double DEFAULT_FLOAT_TOLERANCE = 1e-1;
-
-    public static final void assertEqualsDoubleSmart(final Object actual, final Double expected) {
-        Assert.assertTrue(actual instanceof Double, "Not a double");
-        assertEqualsDoubleSmart((double)(Double)actual, (double)expected);
-    }
-
-    public static final void assertEqualsDoubleSmart(final Object actual, final Double expected, final double tolerance) {
-        Assert.assertTrue(actual instanceof Double, "Not a double");
-        assertEqualsDoubleSmart((double)(Double)actual, (double)expected, tolerance);
-    }
-
-    public static final void assertEqualsDoubleSmart(final double actual, final double expected) {
-        assertEqualsDoubleSmart(actual, expected, DEFAULT_FLOAT_TOLERANCE);
-    }
-
-    public static final <T> void assertEqualsSet(final Set<T> actual, final Set<T> expected, final String info) {
-        final Set<T> actualSet = new HashSet<T>(actual);
-        final Set<T> expectedSet = new HashSet<T>(expected);
-        Assert.assertTrue(actualSet.equals(expectedSet), info); // note this is necessary due to testng bug for set comps
-    }
-
-    public static void assertEqualsDoubleSmart(final double actual, final double expected, final double tolerance) {
-        assertEqualsDoubleSmart(actual, expected, tolerance, null);
-    }
-
-    public static void assertEqualsDoubleSmart(final double actual, final double expected, final double tolerance, final String message) {
-        if ( Double.isNaN(expected) ) // NaN == NaN => false unfortunately
-            Assert.assertTrue(Double.isNaN(actual), "expected is nan, actual is not");
-        else if ( Double.isInfinite(expected) ) // NaN == NaN => false unfortunately
-            Assert.assertTrue(Double.isInfinite(actual), "expected is infinite, actual is not");
-        else {
-            final double delta = Math.abs(actual - expected);
-            final double ratio = Math.abs(actual / expected - 1.0);
-            Assert.assertTrue(delta < tolerance || ratio < tolerance, "expected = " + expected + " actual = " + actual
-                    + " not within tolerance " + tolerance
-                    + (message == null ? "" : "message: " + message));
-        }
-    }
-
-    public static SAMSequenceDictionary createArtificialSequenceDictionary() {
-        final int[] contigLengths = { 249250621, 243199373, 198022430, 191154276, 180915260, 171115067, 159138663, 146364022,
-                                      141213431, 135534747, 135006516, 133851895, 115169878, 107349540, 102531392, 90354753,
-                                      81195210, 78077248, 59128983, 63025520, 48129895, 51304566, 155270560, 59373566, 16569 };
-        List<SAMSequenceRecord> contigs = new ArrayList<SAMSequenceRecord>();
-
-        for ( int contig = 1; contig <= 22; contig++ ) {
-            contigs.add(new SAMSequenceRecord(Integer.toString(contig), contigLengths[contig - 1]));
-        }
-
-        int position = 22;
-        for ( String contigName : Arrays.asList("X", "Y", "MT") ) {
-            contigs.add(new SAMSequenceRecord(contigName, contigLengths[position]));
-            position++;
-        }
-
-        return new SAMSequenceDictionary(contigs);
-    }
-
-    /**
-     * Asserts that the two provided VariantContext objects are equal.
-     *
-     * @param actual actual VariantContext object
-     * @param expected expected VariantContext to compare against
-     */
-    public static void assertVariantContextsAreEqual( final VariantContext actual, final VariantContext expected ) {
-        Assert.assertNotNull(actual, "VariantContext expected not null");
-        Assert.assertEquals(actual.getContig(), expected.getContig(), "chr");
-        Assert.assertEquals(actual.getStart(), expected.getStart(), "start");
-        Assert.assertEquals(actual.getEnd(), expected.getEnd(), "end");
-        Assert.assertEquals(actual.getID(), expected.getID(), "id");
-        Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "alleles for " + expected + " vs " + actual);
-
-        assertAttributesEquals(actual.getAttributes(), expected.getAttributes());
-        Assert.assertEquals(actual.filtersWereApplied(), expected.filtersWereApplied(), "filtersWereApplied");
-        Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "isFiltered");
-        assertEqualsSet(actual.getFilters(), expected.getFilters(), "filters");
-        assertEqualsDoubleSmart(actual.getPhredScaledQual(), expected.getPhredScaledQual());
-
-        Assert.assertEquals(actual.hasGenotypes(), expected.hasGenotypes(), "hasGenotypes");
-        if ( expected.hasGenotypes() ) {
-            assertEqualsSet(actual.getSampleNames(), expected.getSampleNames(), "sample names set");
-            Assert.assertEquals(actual.getSampleNamesOrderedByName(), expected.getSampleNamesOrderedByName(), "sample names");
-            final Set<String> samples = expected.getSampleNames();
-            for ( final String sample : samples ) {
-                assertGenotypesAreEqual(actual.getGenotype(sample), expected.getGenotype(sample));
-            }
-        }
-    }
-
-    /**
-     * Asserts that the two provided Genotype objects are equal.
-     *
-     * @param actual actual Genotype object
-     * @param expected expected Genotype object to compare against
-     */
-    public static void assertGenotypesAreEqual(final Genotype actual, final Genotype expected) {
-        Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names");
-        Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles");
-        Assert.assertEquals(actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string");
-        Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type");
-
-        // filters are the same
-        Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields");
-        Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered");
-
-        // inline attributes
-        Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp");
-        Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD()));
-        Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq");
-        Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL");
-        Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD");
-        Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ");
-        Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP");
-
-        Assert.assertEquals(actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods");
-        Assert.assertEquals(actual.getLikelihoodsString(), expected.getLikelihoodsString(), "Genotype getlikelihoodsString");
-        Assert.assertEquals(actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods");
-        Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL()));
-
-        Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype phredScaledQual");
-        assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes());
-        Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased");
-        Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy");
-    }
-
-    /**
-     * Asserts that the two sets of attribute mappings are equal. Ignores null-valued attributes in
-     * "actual" that are not present in "expected" while performing the comparison.
-     *
-     * @param actual actual mapping of attributes
-     * @param expected expected mapping of attributes
-     */
-    private static void assertAttributesEquals(final Map<String, Object> actual, Map<String, Object> expected) {
-        final Set<String> expectedKeys = new HashSet<String>(expected.keySet());
-
-        for ( final Map.Entry<String, Object> act : actual.entrySet() ) {
-            final Object actualValue = act.getValue();
-            if ( expected.containsKey(act.getKey()) && expected.get(act.getKey()) != null ) {
-                final Object expectedValue = expected.get(act.getKey());
-                if ( expectedValue instanceof List ) {
-                    final List<Object> expectedList = (List<Object>)expectedValue;
-                    Assert.assertTrue(actualValue instanceof List, act.getKey() + " should be a list but isn't");
-                    final List<Object> actualList = (List<Object>)actualValue;
-                    Assert.assertEquals(actualList.size(), expectedList.size(), act.getKey() + " size");
-                    for ( int i = 0; i < expectedList.size(); i++ ) {
-                        assertAttributeEquals(act.getKey(), actualList.get(i), expectedList.get(i));
-                    }
-                }
-                else {
-                    assertAttributeEquals(act.getKey(), actualValue, expectedValue);
-                }
-            }
-            else {
-                // it's ok to have a binding in x -> null that's absent in y
-                Assert.assertNull(actualValue, act.getKey() + " present in one but not in the other");
-            }
-            expectedKeys.remove(act.getKey());
-        }
-
-        // now expectedKeys contains only the keys found in expected but not in actual,
-        // and they must all be null
-        for ( final String missingExpected : expectedKeys ) {
-            final Object value = expected.get(missingExpected);
-            Assert.assertTrue(isMissingAttribute(value), "Attribute " + missingExpected + " missing in one but not in other" );
-        }
-    }
-
-    /**
-     * Asserts that the two provided attribute values are equal. If the values are Doubles, uses a
-     * more lenient comparision with a tolerance of 1e-2.
-     *
-     * @param key key for the attribute values
-     * @param actual actual attribute value
-     * @param expected expected attribute value against which to compare
-     */
-    private static void assertAttributeEquals(final String key, final Object actual, final Object expected) {
-        if ( expected instanceof Double ) {
-            // must be very tolerant because doubles are being rounded to 2 sig figs
-            assertEqualsDoubleSmart(actual, (Double) expected, 1e-2);
-        }
-        else {
-            Assert.assertEquals(actual, expected, "Attribute " + key);
-        }
-    }
-
-    /**
-     * Determines whether the provided attribute value is missing according to the VCF spec.
-     * An attribute value is missing if it's null, is equal to {@link VCFConstants#MISSING_VALUE_v4},
-     * or if it's a List that is either empty or contains only null values.
-     *
-     * @param value attribute value to test
-     * @return true if value is a missing VCF attribute value, otherwise false
-     */
-    private static boolean isMissingAttribute(final Object value) {
-        if ( value == null || value.equals(VCFConstants.MISSING_VALUE_v4) ) {
-            return true;
-        }
-        else if ( value instanceof List ) {
-            // handles the case where all elements are null or the list is empty
-            for ( final Object elt : (List)value) {
-                if (elt != null) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        return false;
-    }
-
-}
diff --git a/src/test/java/htsjdk/variant/bcf2/BCF2EncoderDecoderUnitTest.java b/src/test/java/htsjdk/variant/bcf2/BCF2EncoderDecoderUnitTest.java
deleted file mode 100644
index 5122a42..0000000
--- a/src/test/java/htsjdk/variant/bcf2/BCF2EncoderDecoderUnitTest.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-// the imports for unit testing.
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.writer.BCF2Encoder;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-
-public class BCF2EncoderDecoderUnitTest extends VariantBaseTest {
-    private final double FLOAT_TOLERANCE = 1e-6;
-    final List<BCF2TypedValue> primitives = new ArrayList<BCF2TypedValue>();
-    final List<BCF2TypedValue> basicTypes = new ArrayList<BCF2TypedValue>();
-    final List<BCF2TypedValue> forCombinations = new ArrayList<BCF2TypedValue>();
-
-    @BeforeSuite
-    public void before() {
-        basicTypes.add(new BCF2TypedValue(1, BCF2Type.INT8));
-        basicTypes.add(new BCF2TypedValue(1000, BCF2Type.INT16));
-        basicTypes.add(new BCF2TypedValue(1000000, BCF2Type.INT32));
-        basicTypes.add(new BCF2TypedValue(1.2345e6, BCF2Type.FLOAT));
-        basicTypes.add(new BCF2TypedValue("A", BCF2Type.CHAR));
-
-        // small ints
-        primitives.add(new BCF2TypedValue(0, BCF2Type.INT8));
-        primitives.add(new BCF2TypedValue(10, BCF2Type.INT8));
-        primitives.add(new BCF2TypedValue(-1, BCF2Type.INT8));
-        primitives.add(new BCF2TypedValue(100, BCF2Type.INT8));
-        primitives.add(new BCF2TypedValue(-100, BCF2Type.INT8));
-        primitives.add(new BCF2TypedValue(-127, BCF2Type.INT8));    // last value in range
-        primitives.add(new BCF2TypedValue( 127, BCF2Type.INT8));    // last value in range
-
-        // medium ints
-        primitives.add(new BCF2TypedValue(-1000, BCF2Type.INT16));
-        primitives.add(new BCF2TypedValue(1000, BCF2Type.INT16));
-        primitives.add(new BCF2TypedValue(-128, BCF2Type.INT16));    // first value in range
-        primitives.add(new BCF2TypedValue( 128, BCF2Type.INT16));    // first value in range
-        primitives.add(new BCF2TypedValue(-32767, BCF2Type.INT16)); // last value in range
-        primitives.add(new BCF2TypedValue( 32767, BCF2Type.INT16)); // last value in range
-
-        // larger ints
-        primitives.add(new BCF2TypedValue(-32768, BCF2Type.INT32)); // first value in range
-        primitives.add(new BCF2TypedValue( 32768, BCF2Type.INT32)); // first value in range
-        primitives.add(new BCF2TypedValue(-100000, BCF2Type.INT32));
-        primitives.add(new BCF2TypedValue(100000, BCF2Type.INT32));
-        primitives.add(new BCF2TypedValue(-2147483647, BCF2Type.INT32));
-        primitives.add(new BCF2TypedValue(2147483647, BCF2Type.INT32));
-
-        // floats
-        primitives.add(new BCF2TypedValue(0.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-0.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.1, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.1, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(5.0 / 3.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-5.0 / 3.0, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.23e3, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.23e6, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.23e9, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.23e12, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(1.23e15, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.23e3, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.23e6, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.23e9, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.23e12, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(-1.23e15, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(Float.MIN_VALUE, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(Float.MAX_VALUE, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(Double.NEGATIVE_INFINITY, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(Double.POSITIVE_INFINITY, BCF2Type.FLOAT));
-        primitives.add(new BCF2TypedValue(Double.NaN, BCF2Type.FLOAT));
-
-        // strings
-        //primitives.add(new BCF2TypedValue("", BCFType.CHAR)); <- will be null (which is right)
-        primitives.add(new BCF2TypedValue("S", BCF2Type.CHAR));
-        primitives.add(new BCF2TypedValue("S2", BCF2Type.CHAR));
-        primitives.add(new BCF2TypedValue("12345678910", BCF2Type.CHAR));
-        primitives.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-        primitives.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-
-        // missing values
-        for ( BCF2Type type : BCF2Type.values() ) {
-            primitives.add(new BCF2TypedValue(null, type));
-        }
-
-        forCombinations.add(new BCF2TypedValue(10, BCF2Type.INT8));
-        forCombinations.add(new BCF2TypedValue(100, BCF2Type.INT8));
-        forCombinations.add(new BCF2TypedValue(-100, BCF2Type.INT8));
-        forCombinations.add(new BCF2TypedValue(-128, BCF2Type.INT16));    // first value in range
-        forCombinations.add(new BCF2TypedValue( 128, BCF2Type.INT16));    // first value in range
-        forCombinations.add(new BCF2TypedValue(-100000, BCF2Type.INT32));
-        forCombinations.add(new BCF2TypedValue(100000, BCF2Type.INT32));
-        forCombinations.add(new BCF2TypedValue(0.0, BCF2Type.FLOAT));
-        forCombinations.add(new BCF2TypedValue(1.23e6, BCF2Type.FLOAT));
-        forCombinations.add(new BCF2TypedValue(-1.23e6, BCF2Type.FLOAT));
-        forCombinations.add(new BCF2TypedValue("S", BCF2Type.CHAR));
-        forCombinations.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-        forCombinations.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-
-        // missing values
-        for ( BCF2Type type : BCF2Type.values() ) {
-            forCombinations.add(new BCF2TypedValue(null, type));
-        }
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // merge case Provider
-    //
-    // --------------------------------------------------------------------------------
-
-    private class BCF2TypedValue {
-        final BCF2Type type;
-        final Object value;
-
-        private BCF2TypedValue(final int value, final BCF2Type type) {
-            this(new Integer(value), type);
-        }
-
-        private BCF2TypedValue(final double value, final BCF2Type type) {
-            this(new Double(value), type);
-        }
-
-        private BCF2TypedValue(final Object value, final BCF2Type type) {
-            this.type = type;
-            this.value = value;
-        }
-
-        public boolean isMissing() { return value == null; }
-
-        @Override
-        public String toString() {
-            return String.format("%s of %s", value, type);
-        }
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Test encoding of basic types
-    //
-    // -----------------------------------------------------------------
-
-    @DataProvider(name = "BCF2EncodingTestProviderBasicTypes")
-    public Object[][] BCF2EncodingTestProviderBasicTypes() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        for ( BCF2TypedValue tv : basicTypes )
-            tests.add(new Object[]{Arrays.asList(tv)});
-        return tests.toArray(new Object[][]{});
-    }
-
-    private interface EncodeMe {
-        public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException;
-    }
-
-
-    @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
-    public void testBCF2BasicTypesWithStaticCalls(final List<BCF2TypedValue> toEncode) throws IOException {
-        testBCF2BasicTypesWithEncodeMe(toEncode,
-                new EncodeMe() {
-                    @Override
-                    public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
-                        switch ( tv.type ) {
-                            case INT8:
-                            case INT16:
-                            case INT32:
-                                encoder.encodeTypedInt((Integer)tv.value, tv.type);
-                                break;
-                            case FLOAT:
-                                encoder.encodeTypedFloat((Double)tv.value);
-                                break;
-                            case CHAR:
-                                encoder.encodeTypedString((String)tv.value);
-                                break;
-                        }
-                    }
-                });
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
-    public void testBCF2BasicTypesWithObjectType(final List<BCF2TypedValue> toEncode) throws IOException {
-        testBCF2BasicTypesWithEncodeMe(toEncode,
-                new EncodeMe() {
-                    @Override
-                    public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
-                        encoder.encodeTyped(tv.value, tv.type);
-                    }
-                });
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
-    public void testBCF2BasicTypesWithObjectNoType(final List<BCF2TypedValue> toEncode) throws IOException {
-        testBCF2BasicTypesWithEncodeMe(toEncode,
-                new EncodeMe() {
-                    @Override
-                    public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
-                        encoder.encode(tv.value);
-                    }
-                });
-    }
-
-    public void testBCF2BasicTypesWithEncodeMe(final List<BCF2TypedValue> toEncode, final EncodeMe func) throws IOException {
-        for ( final BCF2TypedValue tv : toEncode ) {
-            BCF2Encoder encoder = new BCF2Encoder();
-            func.encode(encoder, tv);
-
-            BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-            final Object decoded = decoder.decodeTypedValue();
-
-            Assert.assertNotNull(decoded);
-            Assert.assertFalse(decoded instanceof List);
-            myAssertEquals(tv, decoded);
-        }
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
-    public void testBCF2EncodingVectors(final List<BCF2TypedValue> toEncode) throws IOException {
-        for ( final BCF2TypedValue tv : toEncode ) {
-            for ( final int length : Arrays.asList(2, 5, 10, 15, 20, 25) ) {
-                BCF2Encoder encoder = new BCF2Encoder();
-                List<Object> expected = Collections.nCopies(length, tv.value);
-                encoder.encodeTyped(expected, tv.type);
-
-                BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-                final Object decoded = decoder.decodeTypedValue();
-
-                Assert.assertTrue(decoded instanceof List);
-                final List<Object> decodedList = (List<Object>)decoded;
-                Assert.assertEquals(decodedList.size(), expected.size());
-                for ( Object decodedValue : decodedList )
-                    myAssertEquals(tv, decodedValue);
-            }
-        }
-    }
-
-    @DataProvider(name = "BCF2EncodingTestProviderSingletons")
-    public Object[][] BCF2EncodingTestProviderSingletons() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        for ( BCF2TypedValue tv : primitives )
-            tests.add(new Object[]{Arrays.asList(tv)});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderSingletons")
-    public void testBCF2EncodingSingletons(final List<BCF2TypedValue> toEncode) throws IOException {
-        final byte[] record = encodeRecord(toEncode);
-        decodeRecord(toEncode, record);
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Test encoding of vectors
-    //
-    // -----------------------------------------------------------------
-
-    @DataProvider(name = "BCF2EncodingTestProviderSequences")
-    public Object[][] BCF2EncodingTestProviderSequences() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        for ( BCF2TypedValue tv1 : forCombinations )
-            for ( BCF2TypedValue tv2 : forCombinations )
-                for ( BCF2TypedValue tv3 : forCombinations )
-                    tests.add(new Object[]{Arrays.asList(tv1, tv2, tv3)});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
-    public void testBCF2EncodingVectorsWithMissing(final List<BCF2TypedValue> toEncode) throws IOException {
-        for ( final BCF2TypedValue tv : toEncode ) {
-            if ( tv.type != BCF2Type.CHAR ) {
-                for ( final int length : Arrays.asList(2, 5, 10, 15, 20, 25) ) {
-                    final byte td = BCF2Utils.encodeTypeDescriptor(1, tv.type);
-
-                    final BCF2Encoder encoder = new BCF2Encoder();
-                    for ( int i = 0; i < length; i++ ) {
-                        encoder.encodeRawValue(i % 2 == 0 ? null : tv.value, tv.type);
-                    }
-
-                    final BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-
-                    for ( int i = 0; i < length; i++ ) {
-                        final Object decoded = decoder.decodeTypedValue(td);
-                        myAssertEquals(i % 2 == 0 ? new BCF2TypedValue(null, tv.type) : tv, decoded);
-                    }
-                }
-            }
-        }
-    }
-
-    @Test(dataProvider = "BCF2EncodingTestProviderSequences", dependsOnMethods = "testBCF2EncodingSingletons")
-    public void testBCF2EncodingTestProviderSequences(final List<BCF2TypedValue> toEncode) throws IOException {
-        final byte[] record = encodeRecord(toEncode);
-        decodeRecord(toEncode, record);
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Test strings and lists of strings
-    //
-    // -----------------------------------------------------------------
-
-    @DataProvider(name = "ListOfStrings")
-    public Object[][] listOfStringsProvider() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        tests.add(new Object[]{Arrays.asList("s1", "s2"), ",s1,s2"});
-        tests.add(new Object[]{Arrays.asList("s1", "s2", "s3"), ",s1,s2,s3"});
-        tests.add(new Object[]{Arrays.asList("s1", "s2", "s3", "s4"), ",s1,s2,s3,s4"});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "ListOfStrings")
-    public void testEncodingListOfString(List<String> strings, String expected) throws IOException {
-        final String collapsed = BCF2Utils.collapseStringList(strings);
-        Assert.assertEquals(collapsed, expected);
-        Assert.assertEquals(BCF2Utils.explodeStringList(collapsed), strings);
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Tests to determine the best type of arrays of integers
-    //
-    // -----------------------------------------------------------------
-
-    @DataProvider(name = "BestIntTypeTests")
-    public Object[][] BestIntTypeTests() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        tests.add(new Object[]{Arrays.asList(1), BCF2Type.INT8});
-        tests.add(new Object[]{Arrays.asList(1, 10), BCF2Type.INT8});
-        tests.add(new Object[]{Arrays.asList(1, 10, 100), BCF2Type.INT8});
-        tests.add(new Object[]{Arrays.asList(1, -1), BCF2Type.INT8});
-        tests.add(new Object[]{Arrays.asList(1, 1000), BCF2Type.INT16});
-        tests.add(new Object[]{Arrays.asList(1, 1000, 10), BCF2Type.INT16});
-        tests.add(new Object[]{Arrays.asList(1, 1000, 100), BCF2Type.INT16});
-        tests.add(new Object[]{Arrays.asList(1000), BCF2Type.INT16});
-        tests.add(new Object[]{Arrays.asList(100000), BCF2Type.INT32});
-        tests.add(new Object[]{Arrays.asList(100000, 10), BCF2Type.INT32});
-        tests.add(new Object[]{Arrays.asList(100000, 100), BCF2Type.INT32});
-        tests.add(new Object[]{Arrays.asList(100000, 1, -10), BCF2Type.INT32});
-        tests.add(new Object[]{Arrays.asList(-100000, 1, -10), BCF2Type.INT32});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "BestIntTypeTests")
-    public void determineBestEncoding(final List<Integer> ints, final BCF2Type expectedType) throws IOException {
-        BCF2Encoder encoder = new BCF2Encoder();
-        Assert.assertEquals(BCF2Utils.determineIntegerType(ints), expectedType);
-        Assert.assertEquals(BCF2Utils.determineIntegerType(toPrimitive(ints.toArray(new Integer[0]))), expectedType);
-    }
-
-    private static int[] toPrimitive ( final Integer[] array ) {
-        if ( array == null ) {
-            return null;
-        }
-        else if ( array.length == 0 ) {
-            return new int[0];
-        }
-
-        final int[] result = new int[array.length];
-        for (int i = 0; i < array.length; i++) {
-            result[i] = array[i].intValue();
-        }
-        return result;
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Tests managing and skipping multiple blocks
-    //
-    // -----------------------------------------------------------------
-
-    @Test(dataProvider = "BCF2EncodingTestProviderSequences", dependsOnMethods = "testBCF2EncodingTestProviderSequences")
-    public void testReadAndSkipWithMultipleBlocks(final List<BCF2TypedValue> block) throws IOException {
-        testReadAndSkipWithMultipleBlocks(block, forCombinations);
-        testReadAndSkipWithMultipleBlocks(forCombinations, block);
-    }
-
-    public void testReadAndSkipWithMultipleBlocks(final List<BCF2TypedValue> block1, final List<BCF2TypedValue> block2) throws IOException {
-        final byte[] record1 = encodeRecord(block1);
-        final byte[] record2 = encodeRecord(block2);
-
-        // each record is individually good
-        decodeRecord(block1, record1);
-        decodeRecord(block2, record2);
-
-        BCF2Decoder decoder = new BCF2Decoder();
-
-        // test setting
-        decoder.setRecordBytes(record1);
-        decodeRecord(block1, decoder);
-        decoder.setRecordBytes(record2);
-        decodeRecord(block2, decoder);
-
-        // test combining the streams
-        final byte[] combined = combineRecords(record1, record2);
-        final List<BCF2TypedValue> combinedObjects = new ArrayList<BCF2TypedValue>(block1);
-        combinedObjects.addAll(block2);
-
-        // the combined bytes is the same as the combined objects
-        InputStream stream = new ByteArrayInputStream(combined);
-        decoder.readNextBlock(record1.length, stream);
-        decodeRecord(block1, decoder);
-        decoder.readNextBlock(record2.length, stream);
-        decodeRecord(block2, decoder);
-
-        // skipping the first block allows us to read the second block directly
-        stream = new ByteArrayInputStream(combined);
-        decoder.skipNextBlock(record1.length, stream);
-        decoder.readNextBlock(record2.length, stream);
-        decodeRecord(block2, decoder);
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Test encoding / decoding arrays of ints
-    //
-    // This checks that we can encode and decode correctly with the
-    // low-level decodeIntArray function arrays of values.  This
-    // has to be pretty comprehensive as decodeIntArray is a highly optimized
-    // piece of code with lots of edge cases.  The values we are encoding
-    // don't really matter -- just that the values come back as expected.
-    //
-    // -----------------------------------------------------------------
-
-    @DataProvider(name = "IntArrays")
-    public Object[][] makeIntArrays() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        for ( int nValues : Arrays.asList(0, 1, 2, 5, 10, 100) ) {
-            for ( int nPad : Arrays.asList(0, 1, 2, 5, 10, 100) ) {
-                int nElements = nValues + nPad;
-
-                List<Integer> values = new ArrayList<Integer>(nElements);
-
-                // add nValues from 0 to nValues - 1
-                for ( int i = 0; i < nValues; i++ )
-                    values.add(i);
-
-                // add nPad nulls
-                for ( int i = 0; i < nPad; i++ )
-                    values.add(null);
-
-                tests.add(new Object[]{values});
-            }
-        }
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "IntArrays")
-    public void testIntArrays(final List<Integer> ints) throws IOException {
-        final BCF2Encoder encoder = new BCF2Encoder();
-        encoder.encodeTyped(ints, BCF2Type.INT16);
-
-        final BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-
-        final byte typeDescriptor = decoder.readTypeDescriptor();
-
-        // read the int[] with the low-level version
-        final int size = decoder.decodeNumberOfElements(typeDescriptor);
-        final int[] decoded = decoder.decodeIntArray(typeDescriptor, size);
-
-        if ( isMissing(ints) ) {
-            // we expect that the result is null in this case
-            Assert.assertNull(decoded, "Encoded all missing values -- expected null");
-        } else {
-            // we expect at least some values to come back
-            Assert.assertTrue(decoded.length > 0, "Must have at least 1 element for non-null encoded data");
-
-            // check corresponding values
-            for ( int i = 0; i < ints.size(); i++ ) {
-                final Integer expected = ints.get(i);
-
-                if ( expected == null ) {
-                    Assert.assertTrue(decoded.length <= i, "we expect decoded to be truncated for missing values");
-                } else {
-                    Assert.assertTrue(decoded.length > i, "we expected at least " + i + " values in decoded array");
-                    Assert.assertEquals(decoded[i], (int)expected);
-                }
-            }
-        }
-    }
-
-    // -----------------------------------------------------------------
-    //
-    // Helper routines
-    //
-    // -----------------------------------------------------------------
-
-    private final byte[] combineRecords(final byte[] record1, final byte[] record2) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        baos.write(record1);
-        baos.write(record2);
-        return baos.toByteArray();
-    }
-
-    private final byte[] encodeRecord(final List<BCF2TypedValue> toEncode) throws IOException {
-        BCF2Encoder encoder = new BCF2Encoder();
-
-        for ( final BCF2TypedValue tv : toEncode ) {
-            if ( tv.isMissing() )
-                encoder.encodeTypedMissing(tv.type);
-            else {
-                final BCF2Type encodedType = encoder.encode(tv.value);
-                if ( tv.type != null ) // only if we have an expectation
-                    Assert.assertEquals(encodedType, tv.type);
-            }
-        }
-
-        // check output
-        final byte[] record = encoder.getRecordBytes();
-        Assert.assertNotNull(record);
-        Assert.assertTrue(record.length > 0);
-        return record;
-    }
-
-    private final void decodeRecord(final List<BCF2TypedValue> toEncode, final byte[] record) throws IOException {
-        decodeRecord(toEncode, new BCF2Decoder(record));
-    }
-
-    private final void decodeRecord(final List<BCF2TypedValue> toEncode, final BCF2Decoder decoder) throws IOException {
-        for ( final BCF2TypedValue tv : toEncode ) {
-            Assert.assertFalse(decoder.blockIsFullyDecoded());
-            final Object decoded = decoder.decodeTypedValue();
-
-            myAssertEquals(tv, decoded);
-        }
-
-        Assert.assertTrue(decoder.blockIsFullyDecoded());
-    }
-
-    private final void myAssertEquals(final BCF2TypedValue tv, final Object decoded) {
-        if ( tv.value == null ) { // special needs for instanceof double
-            Assert.assertEquals(decoded, tv.value);
-        } else if ( tv.type == BCF2Type.FLOAT ) { // need tolerance for floats, and they aren't null
-            Assert.assertTrue(decoded instanceof Double);
-
-            final double valueFloat = (Double)tv.value;
-            final double decodedFloat = (Double)decoded;
-
-            VariantBaseTest.assertEqualsDoubleSmart(decodedFloat, valueFloat, FLOAT_TOLERANCE);
-        } else
-            Assert.assertEquals(decoded, tv.value);
-    }
-
-    private final boolean isMissing(final List<Integer> values) {
-        if ( values != null )
-            for ( Integer value : values )
-                if ( value != null )
-                    return false;
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/bcf2/BCF2UtilsUnitTest.java b/src/test/java/htsjdk/variant/bcf2/BCF2UtilsUnitTest.java
deleted file mode 100644
index 91804c4..0000000
--- a/src/test/java/htsjdk/variant/bcf2/BCF2UtilsUnitTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.bcf2;
-
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.vcf.VCFContigHeaderLine;
-import htsjdk.variant.vcf.VCFFilterHeaderLine;
-import htsjdk.variant.vcf.VCFFormatHeaderLine;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLine;
-import htsjdk.variant.vcf.VCFHeaderLineCount;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-import htsjdk.variant.vcf.VCFIDHeaderLine;
-import htsjdk.variant.vcf.VCFInfoHeaderLine;
-import htsjdk.variant.vcf.VCFSimpleHeaderLine;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-
-/**
- * Tests for BCF2Utils
- */
-public final class BCF2UtilsUnitTest extends VariantBaseTest {
-    @DataProvider(name = "CollapseExpandTest")
-    public Object[][] makeCollapseExpandTest() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        tests.add(new Object[]{Arrays.asList("A"), "A", false});
-        tests.add(new Object[]{Arrays.asList("A", "B"), ",A,B", true});
-        tests.add(new Object[]{Arrays.asList("AB"), "AB", false});
-        tests.add(new Object[]{Arrays.asList("AB", "C"), ",AB,C", true});
-        tests.add(new Object[]{Arrays.asList(), "", false});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "CollapseExpandTest")
-    public void testCollapseExpandTest(final List<String> in, final String expectedCollapsed, final boolean isCollapsed) {
-        final String actualCollapsed = BCF2Utils.collapseStringList(in);
-        Assert.assertEquals(actualCollapsed, expectedCollapsed);
-        Assert.assertEquals(BCF2Utils.isCollapsedString(actualCollapsed), isCollapsed);
-        if ( isCollapsed )
-            Assert.assertEquals(BCF2Utils.explodeStringList(actualCollapsed), in);
-    }
-
-    @Test
-    public void testCreateDictionary() {
-        final List<VCFHeaderLine> inputLines = new ArrayList<VCFHeaderLine>();
-        int counter = 0;
-        inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
-        inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
-        inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
-        inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
-        inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFHeaderLine("x", "misc"));
-        inputLines.add(new VCFHeaderLine("y", "misc"));
-        inputLines.add(new VCFSimpleHeaderLine("GATKCommandLine","z","misc"));
-        inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        final int inputLineCounter = counter;
-        final VCFHeader inputHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(inputLines));
-        final ArrayList<String> dict = BCF2Utils.makeDictionary(inputHeader);
-        final int dict_size = dict.size();
-        Assert.assertEquals(7,dict_size);
-    }
-
-    /**
-     * Wrapper class for HeaderOrderTestProvider test cases to prevent TestNG from calling toString()
-     * on the VCFHeaders and spamming the log output.
-     */
-    private static class HeaderOrderTestCase {
-        public final VCFHeader inputHeader;
-        public final VCFHeader testHeader;
-        public final boolean expectedConsistent;
-
-        public HeaderOrderTestCase( final VCFHeader inputHeader, final VCFHeader testHeader, final boolean expectedConsistent ) {
-            this.inputHeader = inputHeader;
-            this.testHeader = testHeader;
-            this.expectedConsistent = expectedConsistent;
-        }
-    }
-
-    @DataProvider(name = "HeaderOrderTestProvider")
-    public Object[][] makeHeaderOrderTestProvider() {
-        final List<VCFHeaderLine> inputLines = new ArrayList<VCFHeaderLine>();
-        final List<VCFHeaderLine> extraLines = new ArrayList<VCFHeaderLine>();
-
-        int counter = 0;
-        inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
-        inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
-        inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
-        inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
-        inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        final int inputLineCounter = counter;
-        final VCFHeader inputHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(inputLines));
-
-        extraLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
-        extraLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
-        extraLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        extraLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
-        extraLines.add(new VCFHeaderLine("x", "misc"));
-        extraLines.add(new VCFHeaderLine("y", "misc"));
-
-        List<Object[]> tests = new ArrayList<Object[]>();
-        for ( final int extrasToTake : Arrays.asList(0, 1, 2, 3) ) {
-            final List<VCFHeaderLine> empty = Collections.emptyList();
-            final List<List<VCFHeaderLine>> permutations = extrasToTake == 0
-                    ? Collections.singletonList(empty)
-                    : GeneralUtils.makePermutations(extraLines, extrasToTake, false);
-            for ( final List<VCFHeaderLine> permutation : permutations ) {
-                for ( int i = -1; i < inputLines.size(); i++ ) {
-                    final List<VCFHeaderLine> allLines = new ArrayList<VCFHeaderLine>(inputLines);
-                    if ( i >= 0 )
-                        allLines.remove(i);
-                    allLines.addAll(permutation);
-                    final VCFHeader testHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(allLines));
-                    final boolean expectedConsistent = expectedConsistent(testHeader, inputLineCounter);
-                    tests.add(new Object[]{new HeaderOrderTestCase(inputHeader, testHeader, expectedConsistent)});
-                }
-            }
-        }
-
-        // sample name tests
-        final List<List<String>> sampleNameTests = Arrays.asList(
-                new ArrayList<String>(),
-                Arrays.asList("A"),
-                Arrays.asList("A", "B"),
-                Arrays.asList("A", "B", "C"));
-        for ( final List<String> inSamples : sampleNameTests ) {
-            for ( final List<String> testSamples : sampleNameTests ) {
-                final VCFHeader inputHeaderWithSamples = new VCFHeader(inputHeader.getMetaDataInInputOrder(), inSamples);
-
-                final List<List<String>> permutations = testSamples.isEmpty()
-                        ? Collections.singletonList(testSamples)
-                        : GeneralUtils.makePermutations(testSamples, testSamples.size(), false);
-                for ( final List<String> testSamplesPermutation : permutations ) {
-                    final VCFHeader testHeaderWithSamples = new VCFHeader(inputHeader.getMetaDataInInputOrder(), testSamplesPermutation);
-                    final boolean expectedConsistent = testSamples.equals(inSamples);
-                    tests.add(new Object[]{new HeaderOrderTestCase(inputHeaderWithSamples, testHeaderWithSamples, expectedConsistent)});
-                }
-            }
-        }
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    private static boolean expectedConsistent(final VCFHeader combinationHeader, final int minCounterForInputLines) {
-        final List<Integer> ids = new ArrayList<Integer>();
-        for ( final VCFHeaderLine line : combinationHeader.getMetaDataInInputOrder() ) {
-            if ( line instanceof VCFIDHeaderLine) {
-                ids.add(Integer.valueOf(((VCFIDHeaderLine) line).getID()));
-            }
-        }
-
-        // as long as the start contains all of the ids up to minCounterForInputLines in order
-        for ( int i = 0; i < minCounterForInputLines; i++ )
-            if ( i >= ids.size() || ids.get(i) != i )
-                return false;
-
-        return true;
-    }
-
-    //
-    // Test to make sure that we detect correctly the case where we can preserve the genotypes data in a BCF2
-    // even when the header file is slightly different
-    //
-    @Test(dataProvider = "HeaderOrderTestProvider")
-    public void testHeaderOrder( final HeaderOrderTestCase testCase ) {
-        final boolean actualOrderConsistency = BCF2Utils.headerLinesAreOrderedConsistently(testCase.testHeader, testCase.inputHeader);
-        Assert.assertEquals(actualOrderConsistency, testCase.expectedConsistent);
-    }
-
-
-    private void assertListsAreEquivalent(final List<?> a, final List<?> b) {
-        Assert.assertEquals(a.size(), b.size());
-        for (int i=0; i<a.size(); i++)
-            Assert.assertEquals(a.get(i), b.get(i));
-    }
-
-    @DataProvider(name = "toListTestProvider")
-    public Object[][] makeToListTest() {
-        final List<Object[]> tests = new ArrayList<Object[]>();
-        tests.add(new Object[]{Object.class, null, Collections.emptyList()});
-        tests.add(new Object[]{Integer.class, 1, Arrays.asList(1)});
-        tests.add(new Object[]{Integer.class, new int[]{1, 2, 3}, Arrays.asList(1, 2, 3)});
-        tests.add(new Object[]{String.class, Arrays.asList("X", "Y"), Arrays.asList("X", "Y")});
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "toListTestProvider")
-    public void testToList(final Class<?> cls, final Object input, final List<Object> expectedOutput) {
-        assertListsAreEquivalent(BCF2Utils.toList(cls, input), expectedOutput);
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractorTest.java b/src/test/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractorTest.java
deleted file mode 100644
index 9fb13e8..0000000
--- a/src/test/java/htsjdk/variant/utils/SAMSequenceDictionaryExtractorTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.utils;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.SequenceUtil;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-
-/**
- * @author farjoun on 4/9/14.
- */
-public class SAMSequenceDictionaryExtractorTest {
-    String path = "src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/";
-
-    @DataProvider(name = "testExtractDictionaries")
-    public Object[][] dictionaries() {
-        return new Object[][]{
-                new Object[]{"test1_comp.interval_list", "test1.dict"},
-                new Object[]{"test1.vcf", "test1.dict"},
-                new Object[]{"test1.dict", "test1.dict"},
-                new Object[]{"empty.interval_list", "test1.dict"},
-                new Object[]{"Homo_sapiens_assembly18.trimmed.fasta", "Homo_sapiens_assembly18.trimmed.dict"},
-                new Object[]{"test2_comp.interval_list", "Homo_sapiens_assembly18.trimmed.dict"},
-                new Object[]{"ScreenSamReads.100.input.sam", "test3_comp.interval_list"},
-                new Object[]{"ScreenSamReads.100.input.sam", "test4_comp.interval_list"},
-        };
-    }
-
-    @Test(dataProvider = "testExtractDictionaries")
-    public void testExtractDictionary(final String dictSource, final String dictExpected) throws Exception {
-        final File dictSourceFile = new File(path, dictSource);
-        final File dictExpectedFile = new File(path, dictExpected);
-        final SAMSequenceDictionary dict1 = SAMSequenceDictionaryExtractor.extractDictionary(dictSourceFile);
-        final SAMSequenceDictionary dict2 = SAMSequenceDictionaryExtractor.extractDictionary(dictExpectedFile);
-
-        Assert.assertTrue(SequenceUtil.areSequenceDictionariesEqual(dict1,
-                dict2));
-        Assert.assertTrue(dict1.md5().equals(dict2.md5()));
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/AlleleUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/AlleleUnitTest.java
deleted file mode 100644
index c2aa79f..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/AlleleUnitTest.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.Allele;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-//    public Allele(byte[] bases, boolean isRef) {
-//    public Allele(boolean isRef) {
-//    public Allele(String bases, boolean isRef) {
-//    public boolean isReference()        { return isRef; }
-//    public boolean isNonReference()     { return ! isReference(); }
-//    public byte[] getBases() { return bases; }
-//    public boolean equals(Allele other) {
-//    public int length() {
-
-/**
- * Basic unit test for RecalData
- */
-public class AlleleUnitTest extends VariantBaseTest {
-    Allele ARef, A, T, ATIns, ATCIns, NoCall, SpandDel;
-    
-    @BeforeSuite
-    public void before() {
-        A = Allele.create("A");
-        ARef = Allele.create("A", true);
-        T = Allele.create("T");
-
-        ATIns = Allele.create("AT");
-        ATCIns = Allele.create("ATC");
-
-        NoCall = Allele.create(Allele.NO_CALL_STRING);
-
-        SpandDel = Allele.create(Allele.SPAN_DEL_STRING);
-    }
-
-    @Test
-    public void testCreatingSNPAlleles() {
-        Assert.assertTrue(A.isNonReference());
-        Assert.assertFalse(A.isReference());
-        Assert.assertTrue(A.basesMatch("A"));
-        Assert.assertEquals(A.length(), 1);
-
-        Assert.assertTrue(ARef.isReference());
-        Assert.assertFalse(ARef.isNonReference());
-        Assert.assertTrue(ARef.basesMatch("A"));
-        Assert.assertFalse(ARef.basesMatch("T"));
-
-        Assert.assertTrue(T.isNonReference());
-        Assert.assertFalse(T.isReference());
-        Assert.assertTrue(T.basesMatch("T"));
-        Assert.assertFalse(T.basesMatch("A"));
-    }
-
-    @Test
-    public void testCreatingNoCallAlleles() {
-        Assert.assertTrue(NoCall.isNonReference());
-        Assert.assertFalse(NoCall.isReference());
-        Assert.assertFalse(NoCall.basesMatch(Allele.NO_CALL_STRING));
-        Assert.assertEquals(NoCall.length(), 0);
-        Assert.assertTrue(NoCall.isNoCall());
-        Assert.assertFalse(NoCall.isCalled());
-    }
-
-    @Test
-    public void testCreatingSpanningDeletionAlleles() {
-        Assert.assertTrue(SpandDel.isNonReference());
-        Assert.assertFalse(SpandDel.isReference());
-        Assert.assertTrue(SpandDel.basesMatch(Allele.SPAN_DEL_STRING));
-        Assert.assertEquals(SpandDel.length(), 1);
-    }
-
-    @Test
-    public void testCreatingIndelAlleles() {
-        Assert.assertEquals(ATIns.length(), 2);
-        Assert.assertEquals(ATCIns.length(), 3);
-        Assert.assertEquals(ATIns.getBases(), "AT".getBytes());
-        Assert.assertEquals(ATCIns.getBases(), "ATC".getBytes());
-    }
-
-
-    @Test
-    public void testConstructors1() {
-        Allele a1 = Allele.create("A");
-        Allele a2 = Allele.create("A".getBytes());
-        Allele a3 = Allele.create("A");
-        Allele a4 = Allele.create("A", true);
-
-        Assert.assertTrue(a1.equals(a2));
-        Assert.assertTrue(a1.equals(a3));
-        Assert.assertFalse(a1.equals(a4));
-    }
-
-    @Test
-    public void testInsConstructors() {
-        Allele a1 = Allele.create("AC");
-        Allele a2 = Allele.create("AC".getBytes());
-        Allele a3 = Allele.create("AC");
-        Allele a4 = Allele.create("AC", true);
-
-        Assert.assertTrue(a1.equals(a2));
-        Assert.assertTrue(a1.equals(a3));
-        Assert.assertFalse(a1.equals(a4));
-    }
-    
-    @Test
-    public void testVCF42Breakend() {
-        Allele a;
-        
-        a = Allele.create("A.");
-        Assert.assertTrue(a.isSymbolic());
-        Assert.assertEquals("A.", a.getDisplayString());
-        
-        a = Allele.create(".A");
-        Assert.assertTrue(a.isSymbolic());
-        Assert.assertEquals(".A", a.getDisplayString());
-        
-        Assert.assertTrue(Allele.create("AA.").isSymbolic());
-        Assert.assertTrue(Allele.create(".AA").isSymbolic());
-    }
-    
-    @Test
-    public void testBreakpoint() {
-        Allele a = Allele.create("A[chr1:1[");
-
-        Assert.assertTrue(a.isSymbolic());
-        Assert.assertEquals("A[chr1:1[", a.getDisplayString());
-        
-        Assert.assertTrue(Allele.create("]chr1:1]A").isSymbolic());
-        Assert.assertTrue(Allele.create("[chr1:1[A").isSymbolic());
-        Assert.assertTrue(Allele.create("A]chr1:1]").isSymbolic());
-    }
-    
-    @Test
-    public void testBreakpointSymbolicBreakend() {
-        Assert.assertTrue(Allele.create("A[<contig>:1[").isSymbolic());
-        Assert.assertTrue(Allele.create("A]<contig>:1]").isSymbolic());
-        Assert.assertTrue(Allele.create("]<contig>:1]A").isSymbolic());
-        Assert.assertTrue(Allele.create("[<contig>:1[A").isSymbolic());        
-    }
-    
-    @Test
-    public void testInsSymbolicShorthand() {
-        Assert.assertTrue(Allele.create("A<ctg1>").isSymbolic());
-        Assert.assertTrue(Allele.create("<ctg1>A").isSymbolic());
-    }
-    
-    @Test
-    public void testTelomericBreakend() {
-        Assert.assertTrue(Allele.create(".[1:10]").isSymbolic());
-        Assert.assertTrue(Allele.create("[1:10].").isSymbolic());
-    }
-    
-    @Test
-    public void testSymbolic() {
-        Allele a = Allele.create("<SYMBOLIC>");
-
-        Assert.assertTrue(a.isSymbolic());
-        Assert.assertEquals("<SYMBOLIC>", a.getDisplayString());
-    }
-
-    @Test
-    public void testEquals() {
-        Assert.assertTrue(ARef.basesMatch(A));
-        Assert.assertFalse(ARef.equals(A));
-        Assert.assertFalse(ARef.equals(ATIns));
-        Assert.assertFalse(ARef.equals(ATCIns));
-
-        Assert.assertTrue(T.basesMatch(T));
-        Assert.assertFalse(T.basesMatch(A));
-        Assert.assertFalse(T.equals(A));
-
-        Assert.assertTrue(ATIns.equals(ATIns));
-        Assert.assertFalse(ATIns.equals(ATCIns));
-        Assert.assertTrue(ATIns.basesMatch("AT"));
-        Assert.assertFalse(ATIns.basesMatch("A"));
-        Assert.assertFalse(ATIns.basesMatch("ATC"));
-
-        Assert.assertTrue(ATIns.basesMatch("AT"));
-        Assert.assertFalse(ATIns.basesMatch("ATC"));
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs1() {
-        byte[] foo = null;
-        Allele.create(foo);
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs2() {
-        Allele.create("x");
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs3() {
-        Allele.create("--");
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs4() {
-        Allele.create("-A");
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs5() {
-        Allele.create("A A");
-    }
-    
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadConstructorArgs6() {
-        Allele.create("<symbolic>", true); // symbolic cannot be ref allele
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadNoCallAllelel() {
-        Allele.create(Allele.NO_CALL_STRING, true); // no call cannot be ref allele
-    }
-
-    @Test (expectedExceptions = IllegalArgumentException.class)
-    public void testBadSpanningDeletionAllelel() {
-        Allele.create(Allele.SPAN_DEL_STRING, true); // spanning deletion cannot be ref allele
-    }
-
-    @Test
-    public void testExtend() {
-        Assert.assertEquals("AT", Allele.extend(Allele.create("A"), "T".getBytes()).toString());
-        Assert.assertEquals("ATA", Allele.extend(Allele.create("A"), "TA".getBytes()).toString());
-        Assert.assertEquals("A", Allele.extend(Allele.NO_CALL, "A".getBytes()).toString());
-        Assert.assertEquals("ATCGA", Allele.extend(Allele.create("AT"), "CGA".getBytes()).toString());
-        Assert.assertEquals("ATCGA", Allele.extend(Allele.create("ATC"), "GA".getBytes()).toString());
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/GenotypeBuilderTest.java b/src/test/java/htsjdk/variant/variantcontext/GenotypeBuilderTest.java
deleted file mode 100644
index 5e3f0b9..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/GenotypeBuilderTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2016 The Broad Institute
-*
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class GenotypeBuilderTest extends VariantBaseTest {
-
-    @Test
-    public void testMakeWithShallowCopy() {
-        final GenotypeBuilder gb = new GenotypeBuilder("test");
-        final List<Allele> alleles = new ArrayList<>(
-                Arrays.asList(Allele.create("A", true), Allele.create("T")));
-        final int[] ad = new int[]{1,5};
-        final int[] pl = new int[]{1,6};
-        final int[] first = new int[]{1, 2};
-        final int[] second = new int[]{3, 4};
-        final Genotype firstG = gb.alleles(alleles).attribute("first", first).makeWithShallowCopy();
-        final Genotype secondG = gb.AD(ad).PL(pl).attribute("second", second).makeWithShallowCopy();
-        // both genotypes have the first field
-        Assert.assertEquals(first, firstG.getExtendedAttribute("first"));
-        Assert.assertEquals(first, secondG.getExtendedAttribute("first"));
-        // both genotypes have the the alleles
-        Assert.assertEquals(alleles, firstG.getAlleles());
-        Assert.assertEquals(alleles, secondG.getAlleles());
-        // only the second genotype should have the AD field
-        Assert.assertNull(firstG.getAD());
-        Assert.assertEquals(ad, secondG.getAD());
-        // only the second genotype should have the PL field
-        Assert.assertNull(firstG.getPL());
-        Assert.assertEquals(pl, secondG.getPL());
-        // only the second genotype should have the second field
-        Assert.assertNull(firstG.getExtendedAttribute("second"));
-        Assert.assertEquals(second, secondG.getExtendedAttribute("second"));
-        // modification of alleles does not change the genotypes
-        alleles.add(Allele.create("C"));
-        Assert.assertNotEquals(alleles, firstG.getAlleles());
-        Assert.assertNotEquals(alleles, secondG.getAlleles());
-        // modification of ad or pl does not change the genotypes
-        ad[0] = 0;
-        pl[0] = 10;
-        Assert.assertNotEquals(ad, secondG.getAD());
-        Assert.assertNotEquals(pl, secondG.getPL());
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/GenotypeLikelihoodsUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/GenotypeLikelihoodsUnitTest.java
deleted file mode 100644
index a7c2bb6..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/GenotypeLikelihoodsUnitTest.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.utils.GeneralUtils;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * Basic unit test for Genotype likelihoods objects
- */
-public class GenotypeLikelihoodsUnitTest extends VariantBaseTest {
-    double [] v = new double[]{-10.5, -1.25, -5.11};
-    final static String vGLString = "-10.50,-1.25,-5.11";
-    final static String vPLString = "93,0,39";
-    double[] triAllelic = new double[]{-4.2,-2.0,-3.0,-1.6,0.0,-4.0}; //AA,AB,AC,BB,BC,CC
-
-    @BeforeMethod
-    public void initializeAnyploidPLIndexToAlleleIndices() {
-        GenotypeLikelihoods.anyploidPloidyToPLIndexToAlleleIndices.clear();
-        GenotypeLikelihoods.initializeAnyploidPLIndexToAlleleIndices(1, 1);
-        GenotypeLikelihoods.initializeAnyploidPLIndexToAlleleIndices(2, 2);
-        GenotypeLikelihoods.initializeAnyploidPLIndexToAlleleIndices(2, 3);
-    }
-
-    @Test
-    public void testFromVector2() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(v);
-        assertDoubleArraysAreEqual(gl.getAsVector(), v);
-        Assert.assertEquals(gl.getAsString(), vPLString);
-    }
-
-    @Test
-    public void testFromString1() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString);
-        assertDoubleArraysAreEqual(gl.getAsVector(), new double[]{-9.3, 0, -3.9});
-        Assert.assertEquals(gl.getAsString(), vPLString);
-    }
-
-    @Test
-    public void testFromString2() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromGLField(vGLString);
-        assertDoubleArraysAreEqual(gl.getAsVector(), v);
-        Assert.assertEquals(gl.getAsString(), vPLString);
-    }
-
-    @Test (expectedExceptions = TribbleException.class)
-    public void testErrorBadFormat() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField("adf,b,c");
-        gl.getAsVector();
-    }
-
-    @Test
-    public void testGetAsMap(){
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(v);
-        //Log scale
-        EnumMap<GenotypeType,Double> glMap = gl.getAsMap(false);
-        Assert.assertEquals(v[GenotypeType.HOM_REF.ordinal()-1],glMap.get(GenotypeType.HOM_REF));
-        Assert.assertEquals(v[GenotypeType.HET.ordinal()-1],glMap.get(GenotypeType.HET));
-        Assert.assertEquals(v[GenotypeType.HOM_VAR.ordinal()-1],glMap.get(GenotypeType.HOM_VAR));
-
-        //Linear scale
-        glMap = gl.getAsMap(true);
-        double [] vl = GeneralUtils.normalizeFromLog10(v);
-        Assert.assertEquals(vl[GenotypeType.HOM_REF.ordinal()-1],glMap.get(GenotypeType.HOM_REF));
-        Assert.assertEquals(vl[GenotypeType.HET.ordinal()-1],glMap.get(GenotypeType.HET));
-        Assert.assertEquals(vl[GenotypeType.HOM_VAR.ordinal()-1],glMap.get(GenotypeType.HOM_VAR));
-
-        //Test missing likelihoods
-        gl = GenotypeLikelihoods.fromPLField(".");
-        glMap = gl.getAsMap(false);
-        Assert.assertNull(glMap);
-
-    }
-
-    @Test
-    public void testCalculateNumLikelihoods() {    
-        
-        for (int nAlleles=2; nAlleles<=5; nAlleles++)
-            // simplest case: diploid
-            Assert.assertEquals(GenotypeLikelihoods.numLikelihoods(nAlleles, 2), nAlleles*(nAlleles+1)/2);
-
-        // some special cases: ploidy = 20, #alleles = 4
-        Assert.assertEquals(GenotypeLikelihoods.numLikelihoods(4, 20), 1771);
-    }
-    
-    @Test
-    public void testGetLog10GQ(){
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString);
-
-        //GQ for the best guess genotype
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),-3.9);
-
-        double[] test = GeneralUtils.normalizeFromLog10(gl.getAsVector());
-
-        //GQ for the other genotypes
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF), Math.log10(1.0 - test[GenotypeType.HOM_REF.ordinal()-1]));
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR), Math.log10(1.0 - test[GenotypeType.HOM_VAR.ordinal()-1]));
-
-       //Test missing likelihoods
-        gl = GenotypeLikelihoods.fromPLField(".");
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF),Double.NEGATIVE_INFINITY);
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),Double.NEGATIVE_INFINITY);
-        Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR),Double.NEGATIVE_INFINITY);
-
-    }
-
-    @Test
-    public void testgetQualFromLikelihoods() {
-        double[] likelihoods = new double[]{-1, 0, -2};
-        // qual values we expect for each possible "best" genotype
-        double[] expectedQuals = new double[]{-0.04100161, -1, -0.003930294};
-
-        for ( int i = 0; i < likelihoods.length; i++ ) {
-            Assert.assertEquals(GenotypeLikelihoods.getGQLog10FromLikelihoods(i, likelihoods), expectedQuals[i], 1e-6,
-                    "GQ value for genotype " + i + " was not calculated correctly");
-        }
-    }
-
-    // this test is completely broken, the method is wrong.
-    public void testGetQualFromLikelihoodsMultiAllelicBroken() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(triAllelic);
-        double actualGQ = gl.getLog10GQ(GenotypeType.HET);
-        double expectedGQ = 1.6;
-        Assert.assertEquals(actualGQ,expectedGQ);
-    }
-
-    public void testGetQualFromLikelihoodsMultiAllelic() {
-        GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(triAllelic);
-        Allele ref = Allele.create((byte)'A',true);
-        Allele alt1 = Allele.create((byte)'C');
-        Allele alt2 = Allele.create((byte)'T');
-        List<Allele> allAlleles = Arrays.asList(ref,alt1,alt2);
-        List<Allele> gtAlleles = Arrays.asList(alt1,alt2);
-        GenotypeBuilder gtBuilder = new GenotypeBuilder();
-        gtBuilder.alleles(gtAlleles);
-        double actualGQ = gl.getLog10GQ(gtBuilder.make(),allAlleles);
-        double expectedGQ = 1.6;
-        Assert.assertEquals(actualGQ,expectedGQ);
-    }
-
-    private void assertDoubleArraysAreEqual(double[] v1, double[] v2) {
-        Assert.assertEquals(v1.length, v2.length);
-        for ( int i = 0; i < v1.length; i++ ) {
-            Assert.assertEquals(v1[i], v2[i], 1e-6);
-        }
-    }
-
-    @Test
-    public void testCalculatePLindex(){
-        int counter = 0;
-        for ( int i = 0; i <= 3; i++ ) {
-            for ( int j = i; j <= 3; j++ ) {
-                Assert.assertEquals(GenotypeLikelihoods.calculatePLindex(i, j), GenotypeLikelihoods.PLindexConversion[counter++], "PL index of alleles " + i + "," + j + " was not calculated correctly");
-            }
-        }
-    }
-
-    @DataProvider
-    public Object[][] testGetAllelePairData() {
-        return new Object[][]{
-                {0, 0, 0},
-                {1, 0, 1},
-                {2, 1, 1},
-                {3, 0, 2},
-                {4, 1, 2},
-                {5, 2, 2},
-                {6, 0, 3},
-                {7, 1, 3},
-                {8, 2, 3},
-                {9, 3, 3}
-        };
-    }
-
-    @Test(dataProvider = "testGetAllelePairData")
-    public void testGetAllelePair(final int PLindex, final int allele1, final int allele2) {
-        Assert.assertEquals(GenotypeLikelihoods.getAllelePair(PLindex).alleleIndex1, allele1, "allele index " + allele1 + " from PL index " + PLindex + " was not calculated correctly");
-        Assert.assertEquals(GenotypeLikelihoods.getAllelePair(PLindex).alleleIndex2, allele2, "allele index " + allele2 + " from PL index " + PLindex + " was not calculated correctly");
-    }
-
-    @DataProvider
-    public Object[][] testCalculateAnyploidPLcacheData() {
-        return new Object[][]{
-                {
-                        1, 1,
-                        Arrays.asList(Arrays.asList(0),
-                                Arrays.asList(1)
-                        )
-                },
-                {
-                        2, 2,
-                        Arrays.asList(Arrays.asList(0, 0),
-                                Arrays.asList(0, 1),
-                                Arrays.asList(1, 1),
-                                Arrays.asList(0, 2),
-                                Arrays.asList(1, 2),
-                                Arrays.asList(2, 2)
-                        )
-                },
-                {
-                        2, 3,
-                        Arrays.asList(Arrays.asList(0, 0, 0),
-                                Arrays.asList(0, 0, 1),
-                                Arrays.asList(0, 1, 1),
-                                Arrays.asList(1, 1, 1),
-                                Arrays.asList(0, 0, 2),
-                                Arrays.asList(0, 1, 2),
-                                Arrays.asList(1, 1, 2),
-                                Arrays.asList(0, 2, 2),
-                                Arrays.asList(1, 2, 2),
-                                Arrays.asList(2, 2, 2)
-                        )
-                },
-                {
-                        2, -1,
-                        Arrays.asList(Arrays.asList())
-                },
-                {
-                        -1, 2,
-                        Arrays.asList(Arrays.asList())
-                }
-        };
-    }
-
-    @Test(dataProvider = "testCalculateAnyploidPLcacheData")
-    public void testCalculateAnyploidPLcache(final int altAlleles, final int ploidy, final List<List<Integer>> expected) {
-        List<List<Integer>> anyploidPLIndexToAlleleIndices = GenotypeLikelihoods.calculateAnyploidPLcache(altAlleles, ploidy);
-        for ( int i=0; i < anyploidPLIndexToAlleleIndices.size(); i++ )
-            Assert.assertEquals(anyploidPLIndexToAlleleIndices.get(i), expected.get(i));
-    }
-
-    @Test(dataProvider = "testCalculateAnyploidPLcacheData")
-    public void testInitializeAnyploidPLIndexToAlleleIndices(final int altAlleles, final int ploidy, final List<List<Integer>> expected) {
-        if ( altAlleles >= 1 && ploidy >= 1 ) { // Bypass test with bad data
-            Map<Integer, List<List<Integer>>> expectedMap = new HashMap<Integer, List<List<Integer>>>();
-            expectedMap.put(ploidy, expected);
-            for (Map.Entry<Integer, List<List<Integer>>> entry : GenotypeLikelihoods.anyploidPloidyToPLIndexToAlleleIndices.entrySet()) {
-                if (expectedMap.containsKey(entry.getKey()))
-                    Assert.assertEquals(entry.getValue(), expectedMap.get(entry.getKey()));
-            }
-        }
-    }
-
-    @DataProvider
-    public Object[][] testInitializeAnyploidPLIndexToAlleleIndiceseBadData() {
-        return new Object[][]{
-                { 2, -1 },
-                { -1, 2 }
-        };
-    }
-
-    @Test(dataProvider = "testInitializeAnyploidPLIndexToAlleleIndiceseBadData", expectedExceptions = IllegalArgumentException.class)
-    public void testInitializeAnyploidPLIndexToAlleleIndicesBadData(final int altAlleles, final int ploidy) {
-        GenotypeLikelihoods.initializeAnyploidPLIndexToAlleleIndices(altAlleles, ploidy);
-    }
-
-    @DataProvider
-    public Object[][] testGetAllelesData() {
-        return new Object[][]{
-                {0, 2, 3, Arrays.asList(0,0,0)},
-                {1, 2, 3, Arrays.asList(0,0,1)},
-                {2, 2, 3, Arrays.asList(0,1,1)},
-                {3, 2, 3, Arrays.asList(1,1,1)},
-                {4, 2, 3, Arrays.asList(0,0,2)},
-                {5, 2, 3, Arrays.asList(0,1,2)},
-                {6, 2, 3, Arrays.asList(1,1,2)},
-                {7, 2, 3, Arrays.asList(0,2,2)},
-                {8, 2, 3, Arrays.asList(1,2,2)},
-                {9, 2, 3, Arrays.asList(2,2,2)},
-                {1, 2, 1, Arrays.asList(1)}
-        };
-    }
-
-    @Test(dataProvider = "testGetAllelesData")
-    public void testGetAlleles(final int PLindex, final int altAlleles, final int ploidy, final List<Integer> expected ) {
-        Assert.assertEquals(GenotypeLikelihoods.getAlleles(PLindex, ploidy), expected);
-    }
-
-    @DataProvider
-    public Object[][] testGetAllelesIndexOutOfBoundsData() {
-        return new Object[][]{
-                {-1, 3},  // PL index too small, non-diploid
-                {10, 3},  // PL index too large, non-diploid
-                {-1, 2},  // PL index too small, diploid
-                {GenotypeLikelihoods.numLikelihoods(GenotypeLikelihoods.MAX_DIPLOID_ALT_ALLELES_THAT_CAN_BE_GENOTYPED+1,2), 2} // PL index too large, diploid
-        };
-    }
-
-    @Test(dataProvider = "testGetAllelesIndexOutOfBoundsData", expectedExceptions = IllegalStateException.class)
-    public void testGetAllelesOutOfBounds(final int PLindex, final int ploidy) {
-        final List<Integer> alleles = GenotypeLikelihoods.getAlleles(PLindex, ploidy);
-    }
-
-    @Test(expectedExceptions = IllegalStateException.class)
-    public void testGetAllelesUnitialized() {
-        GenotypeLikelihoods.anyploidPloidyToPLIndexToAlleleIndices.clear();
-        final List<Integer> alleles = GenotypeLikelihoods.getAlleles(0, 3);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/GenotypeUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/GenotypeUnitTest.java
deleted file mode 100644
index a447a0b..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/GenotypeUnitTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.vcf.VCFConstants;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-
-public class GenotypeUnitTest extends VariantBaseTest {
-    Allele A, Aref, T;
-
-    @BeforeSuite
-    public void before() {
-        A = Allele.create("A");
-        Aref = Allele.create("A", true);
-        T = Allele.create("T");
-    }
-
-    private static final GenotypeBuilder makeGB() {
-        return new GenotypeBuilder("misc");
-    }
-
-    @Test
-    public void testFilters() {
-        Assert.assertFalse(makeGB().make().isFiltered(), "by default Genotypes must be PASS");
-        Assert.assertNull(makeGB().make().getFilters(), "by default Genotypes must be PASS => getFilters() == null");
-        Assert.assertFalse(makeGB().filter(null).make().isFiltered(), "setting filter == null => Genotypes must be PASS");
-        Assert.assertNull(makeGB().filter(null).make().getFilters(), "Genotypes PASS => getFilters == null");
-        Assert.assertFalse(makeGB().filter("PASS").make().isFiltered(), "setting filter == PASS => Genotypes must be PASS");
-        Assert.assertNull(makeGB().filter("PASS").make().getFilters(), "Genotypes PASS => getFilters == null");
-        Assert.assertTrue(makeGB().filter("x").make().isFiltered(), "setting filter != null => Genotypes must be PASS");
-        Assert.assertEquals(makeGB().filter("x").make().getFilters(), "x", "Should get back the expected filter string");
-        Assert.assertEquals(makeGB().filters("x", "y").make().getFilters(), "x;y", "Multiple filter field values should be joined with ;");
-        Assert.assertEquals(makeGB().filters("x", "y", "z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;");
-        Assert.assertTrue(makeGB().filters("x", "y", "z").make().isFiltered(), "Multiple filter values should be filtered");
-        Assert.assertEquals(makeGB().filter("x;y;z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;");
-        Assert.assertEquals(makeGB().filter("x;y;z").make().getAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "x;y;z", "getAnyAttribute(GENOTYPE_FILTER_KEY) should return the filter");
-        Assert.assertTrue(makeGB().filter("x;y;z").make().hasAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "hasAnyAttribute(GENOTYPE_FILTER_KEY) should return true");
-        Assert.assertTrue(makeGB().make().hasAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "hasAnyAttribute(GENOTYPE_FILTER_KEY) should return true");
-        Assert.assertFalse(makeGB().filter("").make().isFiltered(), "empty filters should count as unfiltered");
-        Assert.assertEquals(makeGB().filter("").make().getFilters(), null, "empty filter string should result in null filters");
-    }
-
-//    public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased) {
-//    public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased, double[] log10Likelihoods) {
-//    public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, double[] log10Likelihoods)
-//    public Genotype(String sampleName, List<Allele> alleles, double negLog10PError)
-//    public Genotype(String sampleName, List<Allele> alleles)
-//    public List<Allele> getAlleles()
-//    public List<Allele> getAlleles(Allele allele)
-//    public Allele getAllele(int i)
-//    public boolean isPhased()
-//    public int getPloidy()
-//    public Type getType()
-//    public boolean isHom()
-//    public boolean isHomRef()
-//    public boolean isHomVar()
-//    public boolean isHet()
-//    public boolean isNoCall()
-//    public boolean isCalled()
-//    public boolean isAvailable()
-//    public boolean hasLikelihoods()
-//    public GenotypeLikelihoods getLikelihoods()
-//    public boolean sameGenotype(Genotype other)
-//    public boolean sameGenotype(Genotype other, boolean ignorePhase)
-//    public String getSampleName()
-//    public boolean hasLog10PError()
-//    public double getLog10PError()
-//    public double getPhredScaledQual()
-//    public boolean hasExtendedAttribute(String key)
-//    public Object getExtendedAttribute(String key)
-//    public Object getExtendedAttribute(String key, Object defaultValue)
-//    public String getAttributeAsString(String key, String defaultValue)
-//    public int getAttributeAsInt(String key, int defaultValue)
-//    public double getAttributeAsDouble(String key, double  defaultValue)
-//    public boolean getAttributeAsBoolean(String key, boolean  defaultValue)
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/GenotypesContextUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/GenotypesContextUnitTest.java
deleted file mode 100644
index 0f30753..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/GenotypesContextUnitTest.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.utils.GeneralUtils;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-
-public class GenotypesContextUnitTest extends VariantBaseTest {
-    Allele Aref, C, T;
-    Genotype AA, AT, TT, AC, CT, CC, MISSING;
-    List<Genotype> allGenotypes;
-
-    @BeforeSuite
-    public void before() {
-        C = Allele.create("C");
-        Aref = Allele.create("A", true);
-        T = Allele.create("T");
-        AA = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        AT = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        TT = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        AC = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
-        CT = GenotypeBuilder.create("CT", Arrays.asList(C, T));
-        CC = GenotypeBuilder.create("CC", Arrays.asList(C, C));
-        MISSING = GenotypeBuilder.create("MISSING", Arrays.asList(C, C));
-
-        allGenotypes = Arrays.asList(AA, AT, TT, AC, CT, CC);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Provider
-    //
-    // --------------------------------------------------------------------------------
-
-    private interface ContextMaker {
-        public GenotypesContext make(List<Genotype> initialSamples);
-    }
-
-    private ContextMaker baseMaker = new ContextMaker() {
-        @Override
-        public GenotypesContext make(final List<Genotype> initialSamples) {
-            return GenotypesContext.copy(initialSamples);
-        }
-
-        @Override
-        public String toString() {
-            return "GenotypesContext";
-        }
-    };
-
-    private final class lazyMaker implements LazyGenotypesContext.LazyParser, ContextMaker {
-        @Override
-        public LazyGenotypesContext.LazyData parse(final Object data) {
-            GenotypesContext gc = GenotypesContext.copy((List<Genotype>)data);
-            gc.ensureSampleNameMap();
-            gc.ensureSampleOrdering();
-            return new LazyGenotypesContext.LazyData(gc.notToBeDirectlyAccessedGenotypes, gc.sampleNamesInOrder, gc.sampleNameToOffset);
-        }
-
-        @Override
-        public GenotypesContext make(final List<Genotype> initialSamples) {
-            return new LazyGenotypesContext(this, initialSamples, initialSamples.size());
-        }
-
-        @Override
-        public String toString() {
-            return "LazyGenotypesContext";
-        }
-    }
-
-    private Collection<ContextMaker> allMakers = Arrays.asList(baseMaker, new lazyMaker());
-
-    private class GenotypesContextProvider {
-        String name;
-        ContextMaker maker;
-        final List<Genotype> initialSamples;
-
-        private GenotypesContextProvider(ContextMaker maker, List<Genotype> initialSamples) {
-            this.name = String.format("%s with %d samples", maker.toString(), initialSamples.size());
-            this.maker = maker;
-            this.initialSamples = initialSamples;
-        }
-
-        public GenotypesContext makeContext() {
-            return maker.make(initialSamples);
-        }
-    }
-
-    @DataProvider(name = "GenotypesContextProvider")
-    public Object[][] MakeSampleNamesTest() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        for ( ContextMaker maker : allMakers ) {
-            for ( int i = 0; i < allGenotypes.size(); i++ ) {
-                List<Genotype> samples = allGenotypes.subList(0, i);
-                // sorted
-                tests.add(new Object[]{new GenotypesContextProvider(maker, samples)});
-                // unsorted
-                tests.add(new Object[]{new GenotypesContextProvider(maker, GeneralUtils.reverse(samples))});
-            }
-        }
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    private final static void testIterable(Iterable<Genotype> genotypeIterable, Set<String> expectedNames) {
-        int count = 0;
-        for ( final Genotype g : genotypeIterable ) {
-            Assert.assertTrue(expectedNames.contains(g.getSampleName()));
-            count++;
-        }
-        Assert.assertEquals(count, expectedNames.size(), "Iterable returned unexpected number of genotypes");
-    }
-
-    @Test(dataProvider = "GenotypesContextProvider")
-    public void testInitialSamplesAreAsExpected(GenotypesContextProvider cfg) {
-        testGenotypesContextContainsExpectedSamples(cfg.makeContext(), cfg.initialSamples);
-    }
-
-    private final void testGenotypesContextContainsExpectedSamples(GenotypesContext gc, List<Genotype> expectedSamples) {
-        Assert.assertEquals(gc.isEmpty(), expectedSamples.isEmpty());
-        Assert.assertEquals(gc.size(), expectedSamples.size());
-
-        // get(index) is doing the right thing
-        for ( int i = 0; i < expectedSamples.size(); i++ ) {
-            Assert.assertEquals(gc.get(i), expectedSamples.get(i));
-        }
-        Assert.assertFalse(gc.containsSample(MISSING.getSampleName()));
-
-        // we can fetch samples by name
-        final Set<String> genotypeNames = VariantContextUtils.genotypeNames(expectedSamples);
-        for ( final String name : genotypeNames ) {
-            Assert.assertTrue(gc.containsSample(name));
-        }
-        Assert.assertFalse(gc.containsSample(MISSING.getSampleName()));
-
-        // all of the iterators are working
-        testIterable(gc.iterateInSampleNameOrder(), genotypeNames);
-        testIterable(gc, genotypeNames);
-        testIterable(gc.iterateInSampleNameOrder(genotypeNames), genotypeNames);
-        if ( ! genotypeNames.isEmpty() ) {
-            Set<String> first = Collections.singleton(genotypeNames.iterator().next());
-            testIterable(gc.iterateInSampleNameOrder(first), first);
-        }
-
-        // misc. utils are working as expected
-        assertEqualsSet(gc.getSampleNames(), genotypeNames, "gc sample names vs. expected sample names");
-        Assert.assertTrue(ParsingUtils.isSorted(gc.getSampleNamesOrderedByName()));
-        Assert.assertTrue(ParsingUtils.isSorted(gc.iterateInSampleNameOrder()));
-        Assert.assertTrue(gc.containsSamples(genotypeNames));
-
-        final Set<String> withMissing = new HashSet<String>(Arrays.asList(MISSING.getSampleName()));
-        withMissing.addAll(genotypeNames);
-        Assert.assertFalse(gc.containsSamples(withMissing));
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testImmutable(GenotypesContextProvider cfg) {
-        GenotypesContext gc = cfg.makeContext();
-        Assert.assertEquals(gc.isMutable(), true);
-        gc.immutable();
-        Assert.assertEquals(gc.isMutable(), false);
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider", expectedExceptions = Throwable.class )
-    public void testImmutableCall1(GenotypesContextProvider cfg) {
-        GenotypesContext gc = cfg.makeContext();
-        gc.immutable();
-        gc.add(MISSING);
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testClear(GenotypesContextProvider cfg) {
-        GenotypesContext gc = cfg.makeContext();
-        gc.clear();
-        testGenotypesContextContainsExpectedSamples(gc, Collections.<Genotype>emptyList());
-    }
-
-    private static final List<Genotype> with(List<Genotype> genotypes, Genotype ... add) {
-        List<Genotype> l = new ArrayList<Genotype>(genotypes);
-        l.addAll(Arrays.asList(add));
-        return l;
-    }
-
-    private static final List<Genotype> without(List<Genotype> genotypes, Genotype ... remove) {
-        List<Genotype> l = new ArrayList<Genotype>(genotypes);
-        l.removeAll(Arrays.asList(remove));
-        return l;
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testAdds(GenotypesContextProvider cfg) {
-        Genotype add1 = GenotypeBuilder.create("add1", Arrays.asList(Aref, Aref));
-        Genotype add2 = GenotypeBuilder.create("add2", Arrays.asList(Aref, Aref));
-
-        GenotypesContext gc = cfg.makeContext();
-        gc.add(add1);
-        testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1));
-
-        gc = cfg.makeContext();
-        gc.add(add1);
-        gc.add(add2);
-        testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1, add2));
-
-        gc = cfg.makeContext();
-        gc.addAll(Arrays.asList(add1, add2));
-        testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1, add2));
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testRemoves(GenotypesContextProvider cfg) {
-        Genotype rm1 = AA;
-        Genotype rm2 = AC;
-
-        GenotypesContext gc = cfg.makeContext();
-        if (gc.size() > 1) {
-            Genotype rm = gc.get(0);
-            gc.remove(rm);
-            testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm));
-        }
-
-        gc = cfg.makeContext();
-        gc.remove(rm1);
-        testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1));
-
-        gc = cfg.makeContext();
-        gc.remove(rm1);
-        gc.remove(rm2);
-        testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1, rm2));
-
-        gc = cfg.makeContext();
-        gc.removeAll(Arrays.asList(rm1, rm2));
-        testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1, rm2));
-
-        gc = cfg.makeContext();
-        HashSet<Genotype> expected = new HashSet<Genotype>();
-        if ( gc.contains(rm1) ) expected.add(rm1);
-        if ( gc.contains(rm2) ) expected.add(rm2);
-        gc.retainAll(Arrays.asList(rm1, rm2));
-
-        // ensure that the two lists are the same
-        assertEqualsSet(new HashSet<Genotype>(gc.getGenotypes()), expected, "gc genotypes vs. expected");
-        // because the list order can change, we use the gc's list itself
-        testGenotypesContextContainsExpectedSamples(gc, gc.getGenotypes());
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testSet(GenotypesContextProvider cfg) {
-        Genotype set = GenotypeBuilder.create("replace", Arrays.asList(Aref, Aref));
-        int n = cfg.makeContext().size();
-        for ( int i = 0; i < n; i++ ) {
-            GenotypesContext gc = cfg.makeContext();
-            Genotype setted = gc.set(i, set);
-            Assert.assertNotNull(setted);
-            ArrayList<Genotype> l = new ArrayList<Genotype>(cfg.initialSamples);
-            l.set(i, set);
-            testGenotypesContextContainsExpectedSamples(gc, l);
-        }
-    }
-
-    @Test(enabled = true, dataProvider = "GenotypesContextProvider")
-    public void testReplace(GenotypesContextProvider cfg) {
-        int n = cfg.makeContext().size();
-        for ( int i = 0; i < n; i++ ) {
-            GenotypesContext gc = cfg.makeContext();
-            Genotype toReplace = gc.get(i);
-            Genotype replacement = GenotypeBuilder.create(toReplace.getSampleName(), Arrays.asList(Aref, Aref));
-            gc.replace(replacement);
-            ArrayList<Genotype> l = new ArrayList<Genotype>(cfg.initialSamples);
-            l.set(i, replacement);
-            Assert.assertEquals(replacement, gc.get(i));
-            testGenotypesContextContainsExpectedSamples(gc, l);
-        }
-    }
-
-    // subset to samples tested in VariantContextUnitTest
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/VariantContextBuilderTest.java b/src/test/java/htsjdk/variant/variantcontext/VariantContextBuilderTest.java
deleted file mode 100644
index f400028..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/VariantContextBuilderTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package htsjdk.variant.variantcontext;
-
-import htsjdk.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-public class VariantContextBuilderTest extends VariantBaseTest {
-    Allele Aref, C;
-
-    String snpLoc = "chr1";
-    String snpSource = "test";
-    long snpLocStart = 10;
-    long snpLocStop = 10;
-
-    @BeforeTest
-    public void before() {
-
-        C = Allele.create("C");
-        Aref = Allele.create("A", true);
-    }
-
-    @DataProvider(name = "trueFalse")
-    public Object[][] testAttributesWorksTest() {
-        return new Object[][]{{true}, {false}};
-    }
-
-    @Test(dataProvider = "trueFalse")
-    public void testAttributeResettingWorks(final boolean leaveModifyableAsIs) {
-        final VariantContextBuilder root1 = new VariantContextBuilder(snpSource, snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C));
-        final VariantContextBuilder root2 = new VariantContextBuilder(snpSource, snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C));
-
-        final VariantContext result1 = root1.attribute("AC", 1).make(leaveModifyableAsIs);
-
-        //this is a red-herring and should not change anything, however, if leaveModifyableAsIs is true, it does change result1.
-        final VariantContext ignored = root1.attribute("AC", 2).make(leaveModifyableAsIs);
-
-        final VariantContext result2 = root2.attribute("AC", 1).make(leaveModifyableAsIs);
-
-        if (leaveModifyableAsIs) {
-            Assert.assertNotSame(result1.getAttribute("AC"), result2.getAttribute("AC"));
-        } else {
-            Assert.assertEquals(result1.getAttribute("AC"), result2.getAttribute("AC"));
-        }
-    }
-
-    @Test()
-    public void testAttributeResettingWorks() {
-        final VariantContextBuilder root1 = new VariantContextBuilder(snpSource, snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C));
-        final VariantContextBuilder root2 = new VariantContextBuilder(snpSource, snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C));
-
-        final VariantContext result1 = root1.attribute("AC", 1).make();
-
-        //this is a red-herring and should not change anything.
-        final VariantContext ignored = root1.attribute("AC", 2).make();
-
-        final VariantContext result2 = root2.attribute("AC", 1).make();
-
-       Assert.assertEquals(result1.getAttribute("AC"), result2.getAttribute("AC"));
-
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/VariantContextTestProvider.java b/src/test/java/htsjdk/variant/variantcontext/VariantContextTestProvider.java
deleted file mode 100644
index 613dec5..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/VariantContextTestProvider.java
+++ /dev/null
@@ -1,1014 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.tribble.FeatureCodecHeader;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.readers.*;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.bcf2.BCF2Codec;
-import htsjdk.variant.utils.GeneralUtils;
-import htsjdk.variant.variantcontext.writer.Options;
-import htsjdk.variant.variantcontext.writer.VariantContextWriter;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFContigHeaderLine;
-import htsjdk.variant.vcf.VCFFilterHeaderLine;
-import htsjdk.variant.vcf.VCFFormatHeaderLine;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLine;
-import htsjdk.variant.vcf.VCFHeaderLineCount;
-import htsjdk.variant.vcf.VCFHeaderLineType;
-import htsjdk.variant.vcf.VCFInfoHeaderLine;
-
-import org.testng.Assert;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Routines for generating all sorts of VCs for testing
- *
- * @author Your Name
- * @since Date created
- */
-public class VariantContextTestProvider {
-    final private static boolean ENABLE_GENOTYPE_TESTS = true;
-    final private static boolean ENABLE_A_AND_G_TESTS = true;
-    final private static boolean ENABLE_VARARRAY_TESTS = true;
-    final private static boolean ENABLE_PLOIDY_TESTS = true;
-    final private static boolean ENABLE_PL_TESTS = true;
-    final private static boolean ENABLE_SYMBOLIC_ALLELE_TESTS = true;
-    final private static boolean ENABLE_SOURCE_VCF_TESTS = true;
-    final private static boolean ENABLE_VARIABLE_LENGTH_GENOTYPE_STRING_TESTS = true;
-    final private static List<Integer> TWENTY_INTS = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
-
-    private static VCFHeader syntheticHeader;
-    final static List<VariantContextTestData> TEST_DATAs = new ArrayList<VariantContextTestData>();
-    private static VariantContext ROOT;
-
-    private final static List<File> testSourceVCFs = new ArrayList<File>();
-    static {
-        testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf"));
-        testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "ex2.vcf"));
-        testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "dbsnp_135.b37.1000.vcf"));
-        if ( ENABLE_SYMBOLIC_ALLELE_TESTS ) {
-            testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "diagnosis_targets_testfile.vcf"));
-            testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "VQSR.mixedTest.recal"));
-            testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "breakpoint.vcf"));
-        }
-    }
-
-    public static class VariantContextContainer {
-        private VCFHeader header;
-        private Iterable<VariantContext> vcs;
-
-        public VariantContextContainer( VCFHeader header, Iterable<VariantContext> vcs ) {
-            this.header = header;
-            this.vcs = vcs;
-        }
-
-        public VCFHeader getHeader() {
-            return header;
-        }
-
-        public Iterable<VariantContext> getVCs() {
-            return vcs;
-        }
-    }
-
-    public abstract static class VariantContextIOTest<CODECTYPE> {
-        public String toString() {
-            return "VariantContextIOTest:" + getExtension();
-        }
-        public abstract String getExtension();
-        public abstract CODECTYPE makeCodec();
-        public abstract VariantContextWriter makeWriter(final File outputFile, final EnumSet<Options> baseOptions);
-
-        public abstract VariantContextContainer readAllVCs(final File input) throws IOException;
-        
-        public List<VariantContext> preprocess(final VCFHeader header, List<VariantContext> vcsBeforeIO) {
-            return vcsBeforeIO;
-        }
-
-        public List<VariantContext> postprocess(final VCFHeader header, List<VariantContext> vcsAfterIO) {
-            return vcsAfterIO;
-        }
-    }
-
-    public static class VariantContextTestData {
-        public final VCFHeader header;
-        public List<VariantContext> vcs;
-
-        public VariantContextTestData(final VCFHeader header, final VariantContextBuilder builder) {
-            this(header, Collections.singletonList(builder.fullyDecoded(true).make()));
-        }
-
-        public VariantContextTestData(final VCFHeader header, final List<VariantContext> vcs) {
-            final Set<String> samples = new HashSet<String>();
-            for ( final VariantContext vc : vcs )
-                if ( vc.hasGenotypes() )
-                    samples.addAll(vc.getSampleNames());
-            this.header = samples.isEmpty() ? header : new VCFHeader(header.getMetaDataInSortedOrder(), samples);
-            this.vcs = vcs;
-        }
-
-        public boolean hasGenotypes() {
-            return vcs.get(0).hasGenotypes();
-        }
-
-        public String toString() {
-            StringBuilder b = new StringBuilder();
-            b.append("VariantContextTestData: [");
-            final VariantContext vc = vcs.get(0);
-            final VariantContextBuilder builder = new VariantContextBuilder(vc);
-            builder.noGenotypes();
-            b.append(builder.make().toString());
-            if ( vc.getNSamples() < 5 ) {
-                for ( final Genotype g : vc.getGenotypes() )
-                    b.append(g.toString());
-            } else {
-                b.append(" nGenotypes = ").append(vc.getNSamples());
-            }
-
-            if ( vcs.size() > 1 ) b.append(" ----- with another ").append(vcs.size() - 1).append(" VariantContext records");
-            b.append("]");
-            return b.toString();
-        }
-    }
-
-    private final static VariantContextBuilder builder() {
-        return new VariantContextBuilder(ROOT);
-    }
-
-    private final static void add(VariantContextBuilder builder) {
-        TEST_DATAs.add(new VariantContextTestData(syntheticHeader, builder));
-    }
-
-    public static void initializeTests() throws IOException {
-        createSyntheticHeader();
-        makeSyntheticTests();
-        makeEmpiricalTests();
-    }
-
-    private static void makeEmpiricalTests() throws IOException {
-        if ( ENABLE_SOURCE_VCF_TESTS ) {
-            for ( final File file : testSourceVCFs ) {
-                VCFCodec codec = new VCFCodec();
-                VariantContextContainer x = readAllVCs( file, codec );
-                List<VariantContext> fullyDecoded = new ArrayList<VariantContext>();
-
-                for ( final VariantContext raw : x.getVCs() ) {
-                    if ( raw != null )
-                        fullyDecoded.add(raw.fullyDecode(x.getHeader(), false));
-                }
-
-                TEST_DATAs.add(new VariantContextTestData(x.getHeader(), fullyDecoded));
-            }
-        }
-    }
-
-    private final static void addHeaderLine(final Set<VCFHeaderLine> metaData, final String id, final int count, final VCFHeaderLineType type) {
-        metaData.add(new VCFInfoHeaderLine(id, count, type, "x"));
-        if ( type != VCFHeaderLineType.Flag )
-            metaData.add(new VCFFormatHeaderLine(id, count, type, "x"));
-    }
-
-    private final static void addHeaderLine(final Set<VCFHeaderLine> metaData, final String id, final VCFHeaderLineCount count, final VCFHeaderLineType type) {
-        metaData.add(new VCFInfoHeaderLine(id, count, type, "x"));
-        if ( type != VCFHeaderLineType.Flag )
-            metaData.add(new VCFFormatHeaderLine(id, count, type, "x"));
-    }
-
-    private static void createSyntheticHeader() {
-        Set<VCFHeaderLine> metaData = new TreeSet<VCFHeaderLine>();
-
-        addHeaderLine(metaData, "STRING1", 1, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "END", 1, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "STRING3", 3, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "STRING20", 20, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "VAR.INFO.STRING", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String);
-
-        addHeaderLine(metaData, "GT", 1, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "GQ", 1, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "ADA", VCFHeaderLineCount.A, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "PL", VCFHeaderLineCount.G, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "GS", 2, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "GV", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String);
-        addHeaderLine(metaData, "FT", 1, VCFHeaderLineType.String);
-
-        // prep the header
-        metaData.add(new VCFContigHeaderLine(Collections.singletonMap("ID", "1"), 0));
-
-        metaData.add(new VCFFilterHeaderLine("FILTER1"));
-        metaData.add(new VCFFilterHeaderLine("FILTER2"));
-
-        addHeaderLine(metaData, "INT1", 1, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "INT3", 3, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "INT20", 20, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "INT.VAR", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer);
-        addHeaderLine(metaData, "FLOAT1", 1, VCFHeaderLineType.Float);
-        addHeaderLine(metaData, "FLOAT3", 3, VCFHeaderLineType.Float);
-        addHeaderLine(metaData, "FLAG", 0, VCFHeaderLineType.Flag);
-
-        syntheticHeader = new VCFHeader(metaData);
-    }
-
-
-    private static void makeSyntheticTests() {
-        VariantContextBuilder rootBuilder = new VariantContextBuilder();
-        rootBuilder.source("test");
-        rootBuilder.loc("1", 10, 10);
-        rootBuilder.alleles("A", "C");
-        rootBuilder.unfiltered();
-        ROOT = rootBuilder.make();
-
-        add(builder());
-        add(builder().alleles("A"));
-        add(builder().alleles("A", "C", "T"));
-        add(builder().alleles("A", "AC"));
-        add(builder().alleles("A", "ACAGT"));
-        add(builder().loc("1", 10, 11).alleles("AC", "A"));
-        add(builder().loc("1", 10, 13).alleles("ACGT", "A"));
-
-        // make sure filters work
-        add(builder().unfiltered());
-        add(builder().passFilters());
-        add(builder().filters("FILTER1"));
-        add(builder().filters("FILTER1", "FILTER2"));
-
-        add(builder().log10PError(VariantContext.NO_LOG10_PERROR));
-        add(builder().log10PError(-1));
-        add(builder().log10PError(-1.234e6));
-
-        add(builder().noID());
-        add(builder().id("rsID12345"));
-
-
-        add(builder().attribute("INT1", 1));
-        add(builder().attribute("INT1", 100));
-        add(builder().attribute("INT1", 1000));
-        add(builder().attribute("INT1", 100000));
-        add(builder().attribute("INT1", null));
-        add(builder().attribute("INT3", Arrays.asList(1, 2, 3)));
-        add(builder().attribute("INT3", Arrays.asList(1000, 2000, 3000)));
-        add(builder().attribute("INT3", Arrays.asList(100000, 200000, 300000)));
-        add(builder().attribute("INT3", null));
-        add(builder().attribute("INT20", TWENTY_INTS));
-
-        add(builder().attribute("FLOAT1", 1.0));
-        add(builder().attribute("FLOAT1", 100.0));
-        add(builder().attribute("FLOAT1", 1000.0));
-        add(builder().attribute("FLOAT1", 100000.0));
-        add(builder().attribute("FLOAT1", null));
-        add(builder().attribute("FLOAT3", Arrays.asList(1.0, 2.0, 3.0)));
-        add(builder().attribute("FLOAT3", Arrays.asList(1000.0, 2000.0, 3000.0)));
-        add(builder().attribute("FLOAT3", Arrays.asList(100000.0, 200000.0, 300000.0)));
-        add(builder().attribute("FLOAT3", null));
-
-        add(builder().attribute("FLAG", true));
-        //add(builder().attribute("FLAG", false)); // NOTE -- VCF doesn't allow false flags
-
-        add(builder().attribute("STRING1", "s1"));
-        add(builder().attribute("STRING1", null));
-        add(builder().attribute("STRING3", Arrays.asList("s1", "s2", "s3")));
-        add(builder().attribute("STRING3", null));
-        add(builder().attribute("STRING20", Arrays.asList("s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15", "s16", "s17", "s18", "s19", "s20")));
-
-        add(builder().attribute("VAR.INFO.STRING", "s1"));
-        add(builder().attribute("VAR.INFO.STRING", Arrays.asList("s1", "s2")));
-        add(builder().attribute("VAR.INFO.STRING", Arrays.asList("s1", "s2", "s3")));
-        add(builder().attribute("VAR.INFO.STRING", null));
-
-        if ( ENABLE_GENOTYPE_TESTS ) {
-            addGenotypesToTestData();
-            addComplexGenotypesTest();
-        }
-
-        if ( ENABLE_A_AND_G_TESTS )
-            addGenotypesAndGTests();
-
-        if ( ENABLE_SYMBOLIC_ALLELE_TESTS )
-            addSymbolicAlleleTests();
-    }
-
-    private static void addSymbolicAlleleTests() {
-        // two tests to ensure that the end is computed correctly when there's (and not) an END field present
-        add(builder().alleles("N", "<VQSR>").start(10).stop(11).attribute("END", 11));
-        add(builder().alleles("N", "<VQSR>").start(10).stop(10));
-    }
-
-    private static void addGenotypesToTestData() {
-        final ArrayList<VariantContext> sites = new ArrayList<VariantContext>();
-
-        sites.add(builder().alleles("A").make());
-        sites.add(builder().alleles("A", "C", "T").make());
-        sites.add(builder().alleles("A", "AC").make());
-        sites.add(builder().alleles("A", "ACAGT").make());
-
-        for ( VariantContext site : sites ) {
-            addGenotypes(site);
-        }
-    }
-
-    private static void addGenotypeTests( final VariantContext site, Genotype ... genotypes ) {
-        // for each sites VC, we are going to add create two root genotypes.
-        // The first is the primary, and will be added to each new test
-        // The second is variable.  In some tests it's absent (testing 1 genotype), in others it is duplicated
-        // 1 once, 10, 100, or 1000 times to test scaling
-
-        final VariantContextBuilder builder = new VariantContextBuilder(site);
-
-        // add a single context
-        builder.genotypes(genotypes[0]);
-        add(builder);
-
-        if ( genotypes.length > 1 ) {
-            // add all
-            add(builder.genotypes(Arrays.asList(genotypes)));
-
-            // add all with the last replicated 10x and 100x times
-            for ( int nCopiesOfLast : Arrays.asList(10, 100, 1000) ) {
-                final GenotypesContext gc = new GenotypesContext();
-                final Genotype last = genotypes[genotypes.length-1];
-                for ( int i = 0; i < genotypes.length - 1; i++ )
-                    gc.add(genotypes[i]);
-                for ( int i = 0; i < nCopiesOfLast; i++ )
-                    gc.add(new GenotypeBuilder(last).name("copy" + i).make());
-                add(builder.genotypes(gc));
-            }
-        }
-    }
-
-    private static void addGenotypes( final VariantContext site) {
-        // test ref/ref
-        final Allele ref = site.getReference();
-        final Allele alt1 = site.getNAlleles() > 1 ? site.getAlternateAllele(0) : null;
-        final Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(ref, ref));
-        addGenotypeTests(site, homRef);
-
-        if ( alt1 != null ) {
-            final Genotype het = GenotypeBuilder.create("het", Arrays.asList(ref, alt1));
-            final Genotype homVar = GenotypeBuilder.create("homVar", Arrays.asList(alt1, alt1));
-            addGenotypeTests(site, homRef, het);
-            addGenotypeTests(site, homRef, het, homVar);
-
-            // test no GT at all
-            addGenotypeTests(site, new GenotypeBuilder("noGT", new ArrayList<Allele>(0)).attribute("INT1", 10).make());
-
-            final List<Allele> noCall = Arrays.asList(Allele.NO_CALL, Allele.NO_CALL);
-
-            // ploidy
-            if ( ENABLE_PLOIDY_TESTS ) {
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("noCall", noCall),
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("noCall",  noCall),
-                        GenotypeBuilder.create("noCall2", noCall),
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("noCall", noCall),
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("noCall", noCall),
-                        GenotypeBuilder.create("noCall2", noCall),
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("nocall", noCall),
-                        GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
-                        GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-            }
-
-
-            //
-            //
-            // TESTING PHASE
-            //
-            //
-            final Genotype gUnphased = new GenotypeBuilder("gUnphased", Arrays.asList(ref, alt1)).make();
-            final Genotype gPhased = new GenotypeBuilder("gPhased", Arrays.asList(ref, alt1)).phased(true).make();
-            final Genotype gPhased2 = new GenotypeBuilder("gPhased2", Arrays.asList(alt1, alt1)).phased(true).make();
-            final Genotype gPhased3 = new GenotypeBuilder("gPhased3", Arrays.asList(ref, ref)).phased(true).make();
-            final Genotype haploidNoPhase = new GenotypeBuilder("haploidNoPhase", Arrays.asList(ref)).make();
-            addGenotypeTests(site, gUnphased, gPhased);
-            addGenotypeTests(site, gUnphased, gPhased2);
-            addGenotypeTests(site, gUnphased, gPhased3);
-            addGenotypeTests(site, gPhased, gPhased2);
-            addGenotypeTests(site, gPhased, gPhased3);
-            addGenotypeTests(site, gPhased2, gPhased3);
-            addGenotypeTests(site, haploidNoPhase, gPhased);
-            addGenotypeTests(site, haploidNoPhase, gPhased2);
-            addGenotypeTests(site, haploidNoPhase, gPhased3);
-            addGenotypeTests(site, haploidNoPhase, gPhased, gPhased2);
-            addGenotypeTests(site, haploidNoPhase, gPhased, gPhased3);
-            addGenotypeTests(site, haploidNoPhase, gPhased2, gPhased3);
-            addGenotypeTests(site, haploidNoPhase, gPhased, gPhased2, gPhased3);
-
-            final Genotype gUnphasedTet = new GenotypeBuilder("gUnphasedTet", Arrays.asList(ref, alt1, ref, alt1)).make();
-            final Genotype gPhasedTet = new GenotypeBuilder("gPhasedTet", Arrays.asList(ref, alt1, alt1, alt1)).phased(true).make();
-            addGenotypeTests(site, gUnphasedTet, gPhasedTet);
-        }
-
-        if ( ENABLE_PL_TESTS ) {
-            if ( site.getNAlleles() == 2 ) {
-                // testing PLs
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{0, -1, -2}),
-                        GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3}));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
-                        GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3}));
-
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
-                        GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2000, -1000}));
-
-                addGenotypeTests(site, // missing PLs
-                        GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
-                        GenotypeBuilder.create("g2", Arrays.asList(ref, ref)));
-            }
-            else if ( site.getNAlleles() == 3 ) {
-                // testing PLs
-                addGenotypeTests(site,
-                        GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{0, -1, -2, -3, -4, -5}),
-                        GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3, -4, -5, -6}));
-            }
-        }
-
-        // test attributes
-        addGenotypeTests(site,
-                attr("g1", ref, "INT1", 1),
-                attr("g2", ref, "INT1", 2));
-        addGenotypeTests(site,
-                attr("g1", ref, "INT1", 1),
-                attr("g2", ref, "INT1"));
-        addGenotypeTests(site,
-                attr("g1", ref, "INT3", 1, 2, 3),
-                attr("g2", ref, "INT3", 4, 5, 6));
-        addGenotypeTests(site,
-                attr("g1", ref, "INT3", 1, 2, 3),
-                attr("g2", ref, "INT3"));
-
-        addGenotypeTests(site,
-                attr("g1", ref, "INT20", TWENTY_INTS),
-                attr("g2", ref, "INT20", TWENTY_INTS));
-
-
-        if (ENABLE_VARARRAY_TESTS) {
-            addGenotypeTests(site,
-                    attr("g1", ref, "INT.VAR", 1, 2, 3),
-                    attr("g2", ref, "INT.VAR", 4, 5),
-                    attr("g3", ref, "INT.VAR", 6));
-            addGenotypeTests(site,
-                    attr("g1", ref, "INT.VAR", 1, 2, 3),
-                    attr("g2", ref, "INT.VAR"),
-                    attr("g3", ref, "INT.VAR", 5));
-        }
-
-        addGenotypeTests(site,
-                attr("g1", ref, "FLOAT1", 1.0),
-                attr("g2", ref, "FLOAT1", 2.0));
-        addGenotypeTests(site,
-                attr("g1", ref, "FLOAT1", 1.0),
-                attr("g2", ref, "FLOAT1"));
-        addGenotypeTests(site,
-                attr("g1", ref, "FLOAT3", 1.0, 2.0, 3.0),
-                attr("g2", ref, "FLOAT3", 4.0, 5.0, 6.0));
-        addGenotypeTests(site,
-                attr("g1", ref, "FLOAT3", 1.0, 2.0, 3.0),
-                attr("g2", ref, "FLOAT3"));
-
-        if (ENABLE_VARIABLE_LENGTH_GENOTYPE_STRING_TESTS) {
-            //
-            //
-            // TESTING MULTIPLE SIZED LISTS IN THE GENOTYPE FIELD
-            //
-            //
-            addGenotypeTests(site,
-                    attr("g1", ref, "GS", Arrays.asList("S1", "S2")),
-                    attr("g2", ref, "GS", Arrays.asList("S3", "S4")));
-
-            addGenotypeTests(site, // g1 is missing the string, and g2 is missing FLOAT1
-                    attr("g1", ref, "FLOAT1", 1.0),
-                    attr("g2", ref, "GS", Arrays.asList("S3", "S4")));
-
-            // variable sized lists
-            addGenotypeTests(site,
-                    attr("g1", ref, "GV", "S1"),
-                    attr("g2", ref, "GV", Arrays.asList("S3", "S4")));
-
-            addGenotypeTests(site,
-                    attr("g1", ref, "GV", Arrays.asList("S1", "S2")),
-                    attr("g2", ref, "GV", Arrays.asList("S3", "S4", "S5")));
-
-            addGenotypeTests(site, // missing value in varlist of string
-                    attr("g1", ref, "FLOAT1", 1.0),
-                    attr("g2", ref, "GV", Arrays.asList("S3", "S4", "S5")));
-        }
-
-        //
-        //
-        // TESTING GENOTYPE FILTERS
-        //
-        //
-        addGenotypeTests(site,
-                new GenotypeBuilder("g1-x", Arrays.asList(ref, ref)).filters("X").make(),
-                new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make());
-        addGenotypeTests(site,
-                new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
-                new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make());
-        addGenotypeTests(site,
-                new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
-                new GenotypeBuilder("g2-xy", Arrays.asList(ref, ref)).filters("X", "Y").make());
-        addGenotypeTests(site,
-                new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
-                new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make(),
-                new GenotypeBuilder("g3-xy", Arrays.asList(ref, ref)).filters("X", "Y").make());
-    }
-
-    private static void addGenotypesAndGTests() {
-//        for ( final int ploidy : Arrays.asList(2)) {
-        for ( final int ploidy : Arrays.asList(1, 2, 3, 4, 5)) {
-            final List<List<String>> alleleCombinations =
-                    Arrays.asList(
-                            Arrays.asList("A"),
-                            Arrays.asList("A", "C"),
-                            Arrays.asList("A", "C", "G"),
-                            Arrays.asList("A", "C", "G", "T"));
-
-            for ( final List<String> alleles : alleleCombinations ) {
-                final VariantContextBuilder vcb = builder().alleles(alleles);
-                final VariantContext site = vcb.make();
-                final int nAlleles = site.getNAlleles();
-                final Allele ref = site.getReference();
-
-                // base genotype is ref/.../ref up to ploidy
-                final List<Allele> baseGenotype = new ArrayList<Allele>(ploidy);
-                for ( int i = 0; i < ploidy; i++) baseGenotype.add(ref);
-                final int nPLs = GenotypeLikelihoods.numLikelihoods(nAlleles, ploidy);
-
-                // ada is 0, 1, ..., nAlleles - 1
-                final List<Integer> ada = new ArrayList<Integer>(nAlleles);
-                for ( int i = 0; i < nAlleles - 1; i++ ) ada.add(i);
-
-                // pl is 0, 1, ..., up to nPLs (complex calc of nAlleles and ploidy)
-                final int[] pl = new int[nPLs];
-                for ( int i = 0; i < pl.length; i++ ) pl[i] = i;
-
-                final GenotypeBuilder gb = new GenotypeBuilder("ADA_PL_SAMPLE");
-                gb.alleles(baseGenotype);
-                gb.PL(pl);
-                gb.attribute("ADA", nAlleles == 2 ? ada.get(0) : ada);
-                vcb.genotypes(gb.make());
-
-                add(vcb);
-            }
-        }
-    }
-
-    private static Genotype attr(final String name, final Allele ref, final String key, final Object ... value) {
-        if ( value.length == 0 )
-            return GenotypeBuilder.create(name, Arrays.asList(ref, ref));
-        else {
-            final Object toAdd = value.length == 1 ? value[0] : Arrays.asList(value);
-            return new GenotypeBuilder(name, Arrays.asList(ref, ref)).attribute(key, toAdd).make();
-        }
-    }
-
-    public static List<VariantContextTestData> generateSiteTests() {
-        return TEST_DATAs;
-    }
-
-    public static void testReaderWriterWithMissingGenotypes(final VariantContextIOTest tester, final VariantContextTestData data) throws IOException {
-        final int nSamples = data.header.getNGenotypeSamples();
-        if ( nSamples > 2 ) {
-            for ( final VariantContext vc : data.vcs )
-                if ( vc.isSymbolic() )
-                    // cannot handle symbolic alleles because they may be weird non-call VCFs
-                    return;
-
-            final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension());
-            tmpFile.deleteOnExit();
-            Tribble.indexFile(tmpFile).deleteOnExit();
-
-            // write expected to disk
-            final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY);
-            final VariantContextWriter writer = tester.makeWriter(tmpFile, options);
-
-            final Set<String> samplesInVCF = new HashSet<String>(data.header.getGenotypeSamples());
-            final List<String> missingSamples = Arrays.asList("MISSING1", "MISSING2");
-            final List<String> allSamples = new ArrayList<String>(missingSamples);
-            allSamples.addAll(samplesInVCF);
-
-            final VCFHeader header = new VCFHeader(data.header.getMetaDataInInputOrder(), allSamples);
-            writeVCsToFile(writer, header, data.vcs);
-
-            // ensure writing of expected == actual
-            final VariantContextContainer p = tester.readAllVCs(tmpFile);
-            final Iterable<VariantContext> actual = p.getVCs();
-
-            int i = 0;
-            for ( final VariantContext readVC : actual ) {
-                if ( readVC == null ) continue; // sometimes we read null records...
-                final VariantContext expected = data.vcs.get(i++);
-                for ( final Genotype g : readVC.getGenotypes() ) {
-                    Assert.assertTrue(allSamples.contains(g.getSampleName()));
-                    if ( samplesInVCF.contains(g.getSampleName()) ) {
-                        assertEquals(g, expected.getGenotype(g.getSampleName()));
-                    } else {
-                        // missing
-                        Assert.assertTrue(g.isNoCall());
-                    }
-                }
-            }
-
-        }
-    }
-
-    public static void testReaderWriter(final VariantContextIOTest tester, final VariantContextTestData data) throws IOException {
-        testReaderWriter(tester, data.header, data.vcs, data.vcs, true);
-    }
-
-    public static void testReaderWriter(final VariantContextIOTest tester,
-                                        final VCFHeader header,
-                                        final List<VariantContext> expected,
-                                        final Iterable<VariantContext> vcs,
-                                        final boolean recurse) throws IOException {
-        final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension());
-        tmpFile.deleteOnExit();
-        Tribble.indexFile(tmpFile).deleteOnExit();
-
-        // write expected to disk
-        final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY);
-        final VariantContextWriter writer = tester.makeWriter(tmpFile, options);
-        writeVCsToFile(writer, header, vcs);
-
-        // ensure writing of expected == actual
-        final VariantContextContainer p = tester.readAllVCs(tmpFile);
-        final Iterable<VariantContext> actual = p.getVCs();
-        assertEquals(actual, expected);
-
-        if ( recurse ) {
-            // if we are doing a recursive test, grab a fresh iterator over the written values
-            final Iterable<VariantContext> read = tester.readAllVCs(tmpFile).getVCs();
-            testReaderWriter(tester, p.getHeader(), expected, read, false);
-        }
-    }
-
-    private static void writeVCsToFile(final VariantContextWriter writer, final VCFHeader header, final Iterable<VariantContext> vcs) {
-        // write
-        writer.writeHeader(header);
-        for ( VariantContext vc : vcs )
-            if (vc != null)
-                writer.add(vc);
-        writer.close();
-    }
-
-    public static abstract class VCIterable<SOURCE> implements Iterable<VariantContext>, Iterator<VariantContext> {
-        final FeatureCodec<VariantContext, SOURCE> codec;
-        final VCFHeader header;
-
-        public VCIterable(final FeatureCodec<VariantContext, SOURCE> codec, final VCFHeader header) {
-            this.codec = codec;
-            this.header = header;
-        }
-
-        @Override
-        public Iterator<VariantContext> iterator() {
-            return this;
-        }
-
-        @Override
-        public abstract boolean hasNext();
-
-        public abstract SOURCE nextSource();
-        
-        @Override
-        public VariantContext next() {
-            try {
-                final VariantContext vc = codec.decode(nextSource());
-                return vc == null ? null : vc.fullyDecode(header, false);
-            } catch ( IOException e ) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public void remove() { }
-    }
-
-    public static VariantContextContainer readAllVCs(final File input, final BCF2Codec codec) throws IOException {
-        PositionalBufferedStream headerPbs = new PositionalBufferedStream(new FileInputStream(input));
-        FeatureCodecHeader header = codec.readHeader(headerPbs);
-        headerPbs.close();
-
-        final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(input));
-        pbs.skip(header.getHeaderEnd());
-
-        final VCFHeader vcfHeader = (VCFHeader)header.getHeaderValue();
-        return new VariantContextTestProvider.VariantContextContainer(vcfHeader, new VariantContextTestProvider.VCIterable(codec, vcfHeader) {
-            @Override
-            public boolean hasNext() {
-                try {
-                    return !pbs.isDone();
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-
-            @Override
-            public Object nextSource() {
-                return pbs;
-            }
-        });
-    }
-
-    public static VariantContextContainer readAllVCs(final File input, final VCFCodec codec) throws FileNotFoundException {
-        final LineIterator lineIterator = new LineIteratorImpl(new SynchronousLineReader(new BufferedInputStream(new FileInputStream(input))));
-        final VCFHeader vcfHeader = (VCFHeader) codec.readActualHeader(lineIterator);
-        return new VariantContextTestProvider.VariantContextContainer(vcfHeader, new VariantContextTestProvider.VCIterable<LineIterator>(codec, vcfHeader) {
-            @Override
-            public boolean hasNext() {
-                return lineIterator.hasNext();
-            }
-
-            @Override
-            public LineIterator nextSource() {
-                return lineIterator;
-            }
-        });
-    }
-    
-    public static void assertVCFandBCFFilesAreTheSame(final File vcfFile, final File bcfFile) throws IOException {
-        final VariantContextContainer vcfData = readAllVCs(vcfFile, new VCFCodec());
-        final VariantContextContainer bcfData = readAllVCs(bcfFile, new BCF2Codec());
-        assertEquals(bcfData.getHeader(), vcfData.getHeader());
-        assertEquals(bcfData.getVCs(), vcfData.getVCs());
-    }
-
-    public static void assertEquals(final Iterable<VariantContext> actual, final Iterable<VariantContext> expected) {
-        final Iterator<VariantContext> actualIT = actual.iterator();
-        final Iterator<VariantContext> expectedIT = expected.iterator();
-
-        while ( expectedIT.hasNext() ) {
-            final VariantContext expectedVC = expectedIT.next();
-            if ( expectedVC == null )
-                continue;
-
-            VariantContext actualVC;
-            do {
-                Assert.assertTrue(actualIT.hasNext(), "Too few records found in actual");
-                actualVC = actualIT.next();
-            } while ( actualIT.hasNext() && actualVC == null );
-
-            if ( actualVC == null )
-                Assert.fail("Too few records in actual");
-
-            assertEquals(actualVC, expectedVC);
-        }
-        Assert.assertTrue(! actualIT.hasNext(), "Too many records found in actual");
-    }
-
-    /**
-     * Assert that two variant contexts are actually equal
-     * @param actual
-     * @param expected
-     */
-    public static void assertEquals( final VariantContext actual, final VariantContext expected ) {
-        Assert.assertNotNull(actual, "VariantContext expected not null");
-        Assert.assertEquals(actual.getContig(), expected.getContig(), "chr");
-        Assert.assertEquals(actual.getStart(), expected.getStart(), "start");
-        Assert.assertEquals(actual.getEnd(), expected.getEnd(), "end");
-        Assert.assertEquals(actual.getID(), expected.getID(), "id");
-        Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "alleles for " + expected + " vs " + actual);
-
-        assertAttributesEquals(actual.getAttributes(), expected.getAttributes());
-        Assert.assertEquals(actual.filtersWereApplied(), expected.filtersWereApplied(), "filtersWereApplied");
-        Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "isFiltered");
-        VariantBaseTest.assertEqualsSet(actual.getFilters(), expected.getFilters(), "filters");
-        VariantBaseTest.assertEqualsDoubleSmart(actual.getPhredScaledQual(), expected.getPhredScaledQual());
-
-        Assert.assertEquals(actual.hasGenotypes(), expected.hasGenotypes(), "hasGenotypes");
-        if ( expected.hasGenotypes() ) {
-            VariantBaseTest.assertEqualsSet(actual.getSampleNames(), expected.getSampleNames(), "sample names set");
-            Assert.assertEquals(actual.getSampleNamesOrderedByName(), expected.getSampleNamesOrderedByName(), "sample names");
-            final Set<String> samples = expected.getSampleNames();
-            for ( final String sample : samples ) {
-                assertEquals(actual.getGenotype(sample), expected.getGenotype(sample));
-            }
-        }
-    }
-
-    public static void assertEquals(final Genotype actual, final Genotype expected) {
-        Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names");
-        Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles");
-        Assert.assertEquals(actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string");
-        Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type");
-
-        // filters are the same
-        Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields");
-        Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered");
-
-        // inline attributes
-        Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp");
-        Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD()));
-        Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq");
-        Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL");
-        Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD");
-        Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ");
-        Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP");
-
-        Assert.assertEquals(actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods");
-        Assert.assertEquals(actual.getLikelihoodsString(), expected.getLikelihoodsString(), "Genotype getlikelihoodsString");
-        Assert.assertEquals(actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods");
-        Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL()));
-
-        Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype phredScaledQual");
-        assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes());
-        Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased");
-        Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy");
-    }
-
-    private static void assertAttributesEquals(final Map<String, Object> actual, Map<String, Object> expected) {
-        final Set<String> expectedKeys = new HashSet<String>(expected.keySet());
-
-        for ( final Map.Entry<String, Object> act : actual.entrySet() ) {
-            final Object actualValue = act.getValue();
-            if ( expected.containsKey(act.getKey()) && expected.get(act.getKey()) != null ) {
-                final Object expectedValue = expected.get(act.getKey());
-                if ( expectedValue instanceof List ) {
-                    final List<Object> expectedList = (List<Object>)expectedValue;
-                    Assert.assertTrue(actualValue instanceof List, act.getKey() + " should be a list but isn't");
-                    final List<Object> actualList = (List<Object>)actualValue;
-                    Assert.assertEquals(actualList.size(), expectedList.size(), act.getKey() + " size");
-                    for ( int i = 0; i < expectedList.size(); i++ )
-                        assertAttributeEquals(act.getKey(), actualList.get(i), expectedList.get(i));
-                } else
-                    assertAttributeEquals(act.getKey(), actualValue, expectedValue);
-            } else {
-                // it's ok to have a binding in x -> null that's absent in y
-                Assert.assertNull(actualValue, act.getKey() + " present in one but not in the other");
-            }
-            expectedKeys.remove(act.getKey());
-        }
-
-        // now expectedKeys contains only the keys found in expected but not in actual,
-        // and they must all be null
-        for ( final String missingExpected : expectedKeys ) {
-            final Object value = expected.get(missingExpected);
-            Assert.assertTrue(isMissing(value), "Attribute " + missingExpected + " missing in one but not in other" );
-        }
-    }
-
-    private static final boolean isMissing(final Object value) {
-        if ( value == null ) return true;
-        else if ( value.equals(VCFConstants.MISSING_VALUE_v4) ) return true;
-        else if ( value instanceof List ) {
-            // handles the case where all elements are null or the list is empty
-            for ( final Object elt : (List)value)
-                if ( elt != null )
-                    return false;
-            return true;
-        } else
-            return false;
-    }
-
-    private static void assertAttributeEquals(final String key, final Object actual, final Object expected) {
-        if ( expected instanceof Double ) {
-            // must be very tolerant because doubles are being rounded to 2 sig figs
-            VariantBaseTest.assertEqualsDoubleSmart(actual, (Double)expected, 1e-2);
-        } else
-            Assert.assertEquals(actual, expected, "Attribute " + key);
-    }
-
-    public static void addComplexGenotypesTest() {
-        final List<Allele> allAlleles = Arrays.asList(
-                Allele.create("A", true),
-                Allele.create("C", false),
-                Allele.create("G", false));
-
-        for ( int nAlleles : Arrays.asList(2, 3) ) {
-            for ( int highestPloidy : Arrays.asList(1, 2, 3) ) {
-                // site alleles
-                final List<Allele> siteAlleles = allAlleles.subList(0, nAlleles);
-
-                // possible alleles for genotypes
-                final List<Allele> possibleGenotypeAlleles = new ArrayList<Allele>(siteAlleles);
-                possibleGenotypeAlleles.add(Allele.NO_CALL);
-
-                // there are n^ploidy possible genotypes
-                final List<List<Allele>> possibleGenotypes = makeAllGenotypes(possibleGenotypeAlleles, highestPloidy);
-                final int nPossibleGenotypes = possibleGenotypes.size();
-
-                VariantContextBuilder vb = new VariantContextBuilder("unittest", "1", 1, 1, siteAlleles);
-
-                // first test -- create n copies of each genotype
-                for ( int i = 0; i < nPossibleGenotypes; i++ ) {
-                    final List<Genotype> samples = new ArrayList<Genotype>(3);
-                    samples.add(GenotypeBuilder.create("sample" + i, possibleGenotypes.get(i)));
-                    add(vb.genotypes(samples));
-                }
-
-                // second test -- create one sample with each genotype
-                {
-                    final List<Genotype> samples = new ArrayList<Genotype>(nPossibleGenotypes);
-                    for ( int i = 0; i < nPossibleGenotypes; i++ ) {
-                        samples.add(GenotypeBuilder.create("sample" + i, possibleGenotypes.get(i)));
-                    }
-                    add(vb.genotypes(samples));
-                }
-
-                // test mixed ploidy
-                for ( int i = 0; i < nPossibleGenotypes; i++ ) {
-                    for ( int ploidy = 1; ploidy < highestPloidy; ploidy++ ) {
-                        final List<Genotype> samples = new ArrayList<Genotype>(highestPloidy);
-                        final List<Allele> genotype = possibleGenotypes.get(i).subList(0, ploidy);
-                        samples.add(GenotypeBuilder.create("sample" + i, genotype));
-                        add(vb.genotypes(samples));
-                    }
-                }
-            }
-        }
-    }
-
-    private static List<List<Allele>> makeAllGenotypes(final List<Allele> alleles, final int highestPloidy) {
-        return GeneralUtils.makePermutations(alleles, highestPloidy, true);
-    }
-
-    public static void assertEquals(final VCFHeader actual, final VCFHeader expected) {
-        Assert.assertEquals(actual.getMetaDataInSortedOrder().size(), expected.getMetaDataInSortedOrder().size(), "No VCF header lines");
-
-        // for some reason set.equals() is returning false but all paired elements are .equals().  Perhaps compare to is busted?
-        //Assert.assertEquals(actual.getMetaDataInInputOrder(), expected.getMetaDataInInputOrder());
-        final List<VCFHeaderLine> actualLines = new ArrayList<VCFHeaderLine>(actual.getMetaDataInSortedOrder());
-        final List<VCFHeaderLine> expectedLines = new ArrayList<VCFHeaderLine>(expected.getMetaDataInSortedOrder());
-        for ( int i = 0; i < actualLines.size(); i++ ) {
-            Assert.assertEquals(actualLines.get(i), expectedLines.get(i), "VCF header lines");
-        }
-    }
-
-    public static void main( String argv[] ) {
-        final File variants1 = new File(argv[0]);
-        final File variants2 = new File(argv[1]);
-        try {
-            VariantContextTestProvider.assertVCFandBCFFilesAreTheSame(variants1, variants2);
-        } catch ( IOException e ) {
-            throw new RuntimeException(e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/VariantContextUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/VariantContextUnitTest.java
deleted file mode 100644
index 14056f8..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/VariantContextUnitTest.java
+++ /dev/null
@@ -1,1621 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.CloserUtil;
-
-// the imports for unit testing.
-
-import htsjdk.samtools.util.TestUtil;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.FeatureCodec;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.bcf2.BCF2Codec;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.vcf.VCFConstants;
-import htsjdk.variant.vcf.VCFFileReader;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import java.io.File;
-import java.util.*;
-
-
-public class VariantContextUnitTest extends VariantBaseTest {
-    Allele A, Aref, C, T, Tref;
-    Allele del, delRef, ATC, ATCref;
-
-    // A [ref] / T at 10
-    String snpLoc = "chr1";
-    int snpLocStart = 10;
-    int snpLocStop = 10;
-
-    // - / ATC [ref] from 20-22
-    String delLoc = "chr1";
-    int delLocStart = 20;
-    int delLocStop = 22;
-
-    // - [ref] / ATC from 20-20
-    String insLoc = "chr1";
-    int insLocStart = 20;
-    int insLocStop = 20;
-
-    VariantContextBuilder basicBuilder, snpBuilder, insBuilder;
-
-    @BeforeSuite
-    public void before() {
-        del = Allele.create("A");
-        delRef = Allele.create("A", true);
-
-        A = Allele.create("A");
-        C = Allele.create("C");
-        Aref = Allele.create("A", true);
-        T = Allele.create("T");
-        Tref = Allele.create("T", true);
-
-        ATC = Allele.create("ATC");
-        ATCref = Allele.create("ATC", true);
-    }
-
-    @BeforeMethod
-    public void beforeTest() {
-        basicBuilder = new VariantContextBuilder("test", snpLoc,snpLocStart, snpLocStop, Arrays.asList(Aref, T));
-        snpBuilder = new VariantContextBuilder("test", snpLoc,snpLocStart, snpLocStop, Arrays.asList(Aref, T));
-        insBuilder = new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATC));
-    }
-
-    @Test
-    public void testDetermineTypes() {
-        Allele ACref = Allele.create("AC", true);
-        Allele AC = Allele.create("AC");
-        Allele AT = Allele.create("AT");
-        Allele C = Allele.create("C");
-        Allele CAT = Allele.create("CAT");
-        Allele TAref = Allele.create("TA", true);
-        Allele TA = Allele.create("TA");
-        Allele TC = Allele.create("TC");
-        Allele symbolic = Allele.create("<FOO>");
-
-        // test REF
-        List<Allele> alleles = Arrays.asList(Tref);
-        VariantContext vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.NO_VARIATION);
-
-        // test SNPs
-        alleles = Arrays.asList(Tref, A);
-        vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
-
-        alleles = Arrays.asList(Tref, A, C);
-        vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
-
-        // test MNPs
-        alleles = Arrays.asList(ACref, TA);
-        vc = snpBuilder.alleles(alleles).stop(snpLocStop+1).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MNP);
-
-        alleles = Arrays.asList(ATCref, CAT, Allele.create("GGG"));
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MNP);
-
-        // test INDELs
-        alleles = Arrays.asList(Aref, ATC);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
-        alleles = Arrays.asList(ATCref, A);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
-        alleles = Arrays.asList(Tref, TA, TC);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
-        alleles = Arrays.asList(ATCref, A, AC);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
-        alleles = Arrays.asList(ATCref, A, Allele.create("ATCTC"));
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
-        // test MIXED
-        alleles = Arrays.asList(TAref, T, TC);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
-        alleles = Arrays.asList(TAref, T, AC);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
-        alleles = Arrays.asList(ACref, ATC, AT);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
-        alleles = Arrays.asList(Aref, T, symbolic);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
-        // test SYMBOLIC
-        alleles = Arrays.asList(Tref, symbolic);
-        vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
-        Assert.assertEquals(vc.getType(), VariantContext.Type.SYMBOLIC);
-    }
-
-    @Test
-    public void testMultipleSNPAlleleOrdering() {
-        final List<Allele> allelesNaturalOrder = Arrays.asList(Aref, C, T);
-        final List<Allele> allelesUnnaturalOrder = Arrays.asList(Aref, T, C);
-        VariantContext naturalVC = snpBuilder.alleles(allelesNaturalOrder).make();
-        VariantContext unnaturalVC = snpBuilder.alleles(allelesUnnaturalOrder).make();
-        Assert.assertEquals(new ArrayList<Allele>(naturalVC.getAlleles()), allelesNaturalOrder);
-        Assert.assertEquals(new ArrayList<Allele>(unnaturalVC.getAlleles()), allelesUnnaturalOrder);
-    }
-
-    @Test
-    public void testCreatingSNPVariantContext() {
-
-        List<Allele> alleles = Arrays.asList(Aref, T);
-        VariantContext vc = snpBuilder.alleles(alleles).make();
-
-        Assert.assertEquals(vc.getContig(), snpLoc);
-        Assert.assertEquals(vc.getStart(), snpLocStart);
-        Assert.assertEquals(vc.getEnd(), snpLocStop);
-        Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
-        Assert.assertTrue(vc.isSNP());
-        Assert.assertFalse(vc.isIndel());
-        Assert.assertFalse(vc.isSimpleInsertion());
-        Assert.assertFalse(vc.isSimpleDeletion());
-        Assert.assertFalse(vc.isSimpleIndel());
-        Assert.assertFalse(vc.isMixed());
-        Assert.assertTrue(vc.isBiallelic());
-        Assert.assertEquals(vc.getNAlleles(), 2);
-
-        Assert.assertEquals(vc.getReference(), Aref);
-        Assert.assertEquals(vc.getAlleles().size(), 2);
-        Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
-        Assert.assertEquals(vc.getAlternateAllele(0), T);
-
-        Assert.assertFalse(vc.hasGenotypes());
-
-        Assert.assertEquals(vc.getSampleNames().size(), 0);
-    }
-
-    @Test
-    public void testCreatingRefVariantContext() {
-        List<Allele> alleles = Arrays.asList(Aref);
-        VariantContext vc = snpBuilder.alleles(alleles).make();
-
-        Assert.assertEquals(vc.getContig(), snpLoc);
-        Assert.assertEquals(vc.getStart(), snpLocStart);
-        Assert.assertEquals(vc.getEnd(), snpLocStop);
-        Assert.assertEquals(VariantContext.Type.NO_VARIATION, vc.getType());
-        Assert.assertFalse(vc.isSNP());
-        Assert.assertFalse(vc.isIndel());
-        Assert.assertFalse(vc.isSimpleInsertion());
-        Assert.assertFalse(vc.isSimpleDeletion());
-        Assert.assertFalse(vc.isSimpleIndel());
-        Assert.assertFalse(vc.isMixed());
-        Assert.assertFalse(vc.isBiallelic());
-        Assert.assertEquals(vc.getNAlleles(), 1);
-
-        Assert.assertEquals(vc.getReference(), Aref);
-        Assert.assertEquals(vc.getAlleles().size(), 1);
-        Assert.assertEquals(vc.getAlternateAlleles().size(), 0);
-        //Assert.assertEquals(vc.getAlternateAllele(0), T);
-
-        Assert.assertFalse(vc.hasGenotypes());
-        Assert.assertEquals(vc.getSampleNames().size(), 0);
-    }
-
-    @Test
-    public void testCreatingDeletionVariantContext() {
-        List<Allele> alleles = Arrays.asList(ATCref, del);
-        VariantContext vc = new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
-
-        Assert.assertEquals(vc.getContig(), delLoc);
-        Assert.assertEquals(vc.getStart(), delLocStart);
-        Assert.assertEquals(vc.getEnd(), delLocStop);
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-        Assert.assertFalse(vc.isSNP());
-        Assert.assertTrue(vc.isIndel());
-        Assert.assertFalse(vc.isSimpleInsertion());
-        Assert.assertTrue(vc.isSimpleDeletion());
-        Assert.assertTrue(vc.isSimpleIndel());
-        Assert.assertFalse(vc.isMixed());
-        Assert.assertTrue(vc.isBiallelic());
-        Assert.assertEquals(vc.getNAlleles(), 2);
-
-        Assert.assertEquals(vc.getReference(), ATCref);
-        Assert.assertEquals(vc.getAlleles().size(), 2);
-        Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
-        Assert.assertEquals(vc.getAlternateAllele(0), del);
-
-        Assert.assertFalse(vc.hasGenotypes());
-
-        Assert.assertEquals(vc.getSampleNames().size(), 0);
-    }
-
-    @Test
-    public void testCreatingComplexSubstitutionVariantContext() {
-        List<Allele> alleles = Arrays.asList(Tref, ATC);
-        VariantContext vc = new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, alleles).make();
-
-        Assert.assertEquals(vc.getContig(), insLoc);
-        Assert.assertEquals(vc.getStart(), insLocStart);
-        Assert.assertEquals(vc.getEnd(), insLocStop);
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-        Assert.assertFalse(vc.isSNP());
-        Assert.assertTrue(vc.isIndel());
-        Assert.assertFalse(vc.isSimpleInsertion());
-        Assert.assertFalse(vc.isSimpleDeletion());
-        Assert.assertFalse(vc.isSimpleIndel());
-        Assert.assertFalse(vc.isMixed());
-        Assert.assertTrue(vc.isBiallelic());
-        Assert.assertEquals(vc.getNAlleles(), 2);
-
-        Assert.assertEquals(vc.getReference(), Tref);
-        Assert.assertEquals(vc.getAlleles().size(), 2);
-        Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
-        Assert.assertEquals(vc.getAlternateAllele(0), ATC);
-
-        Assert.assertFalse(vc.hasGenotypes());
-
-        Assert.assertEquals(vc.getSampleNames().size(), 0);
-    }
-
-    @Test
-    public void testMatchingAlleles() {
-        List<Allele> alleles = Arrays.asList(ATCref, del);
-        VariantContext vc = new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
-        VariantContext vc2 = new VariantContextBuilder("test2", delLoc, delLocStart+12, delLocStop+12, alleles).make();
-
-        Assert.assertTrue(vc.hasSameAllelesAs(vc2));
-        Assert.assertTrue(vc.hasSameAlternateAllelesAs(vc2));
-    }
-
-    @Test
-    public void testCreatingInsertionVariantContext() {
-        List<Allele> alleles = Arrays.asList(delRef, ATC);
-        VariantContext vc = insBuilder.alleles(alleles).make();
-
-        Assert.assertEquals(vc.getContig(), insLoc);
-        Assert.assertEquals(vc.getStart(), insLocStart);
-        Assert.assertEquals(vc.getEnd(), insLocStop);
-        Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-        Assert.assertFalse(vc.isSNP());
-        Assert.assertTrue(vc.isIndel());
-        Assert.assertTrue(vc.isSimpleInsertion());
-        Assert.assertFalse(vc.isSimpleDeletion());
-        Assert.assertTrue(vc.isSimpleIndel());
-        Assert.assertFalse(vc.isMixed());
-        Assert.assertTrue(vc.isBiallelic());
-        Assert.assertEquals(vc.getNAlleles(), 2);
-
-        Assert.assertEquals(vc.getReference(), delRef);
-        Assert.assertEquals(vc.getAlleles().size(), 2);
-        Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
-        Assert.assertEquals(vc.getAlternateAllele(0), ATC);
-        Assert.assertFalse(vc.hasGenotypes());
-
-        Assert.assertEquals(vc.getSampleNames().size(), 0);
-    }
-
-    @Test
-    public void testCreatingPartiallyCalledGenotype() {
-        List<Allele> alleles = Arrays.asList(Aref, C);
-        Genotype g = GenotypeBuilder.create("foo", Arrays.asList(C, Allele.NO_CALL));
-        VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g).make();
-
-        Assert.assertTrue(vc.isSNP());
-        Assert.assertEquals(vc.getNAlleles(), 2);
-        Assert.assertTrue(vc.hasGenotypes());
-        Assert.assertFalse(vc.isMonomorphicInSamples());
-        Assert.assertTrue(vc.isPolymorphicInSamples());
-        Assert.assertEquals(vc.getGenotype("foo"), g);
-        Assert.assertEquals(vc.getCalledChrCount(), 1); // we only have 1 called chromosomes, we exclude the NO_CALL one isn't called
-        Assert.assertEquals(vc.getCalledChrCount(Aref), 0);
-        Assert.assertEquals(vc.getCalledChrCount(C), 1);
-        Assert.assertFalse(vc.getGenotype("foo").isHet());
-        Assert.assertFalse(vc.getGenotype("foo").isHom());
-        Assert.assertFalse(vc.getGenotype("foo").isNoCall());
-        Assert.assertFalse(vc.getGenotype("foo").isHom());
-        Assert.assertTrue(vc.getGenotype("foo").isMixed());
-        Assert.assertEquals(vc.getGenotype("foo").getType(), GenotypeType.MIXED);
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadConstructorArgs1() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATCref)).make();
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadConstructorArgs2() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, del)).make();
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadConstructorArgs3() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(del)).make();
-    }
-
-    @Test (expectedExceptions = Throwable.class)
-    public void testBadConstructorArgs4() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Collections.<Allele>emptyList()).make();
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadConstructorArgsDuplicateAlleles1() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(Aref, T, T)).make();
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadConstructorArgsDuplicateAlleles2() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(Aref, A)).make();
-    }
-
-    @Test (expectedExceptions = Throwable.class)
-    public void testBadLoc1() {
-        List<Allele> alleles = Arrays.asList(Aref, T, del);
-        new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
-    }
-
-    @Test (expectedExceptions = Throwable.class)
-    public void testBadID1() {
-        new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, Arrays.asList(Aref, T)).id(null).make();
-    }
-
-    @Test (expectedExceptions = Exception.class)
-    public void testBadID2() {
-        new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, Arrays.asList(Aref, T)).id("").make();
-    }
-
-    @Test (expectedExceptions = Throwable.class)
-    public void testBadPError() {
-        new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATCref)).log10PError(0.5).make();
-    }
-
-    @Test
-    public void testAccessingSimpleSNPGenotypes() {
-        List<Allele> alleles = Arrays.asList(Aref, T);
-
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-
-        VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
-                .genotypes(g1, g2, g3).make();
-
-        Assert.assertTrue(vc.hasGenotypes());
-        Assert.assertFalse(vc.isMonomorphicInSamples());
-        Assert.assertTrue(vc.isPolymorphicInSamples());
-        Assert.assertEquals(vc.getSampleNames().size(), 3);
-
-        Assert.assertEquals(vc.getGenotypes().size(), 3);
-        Assert.assertEquals(vc.getGenotypes().get("AA"), g1);
-        Assert.assertEquals(vc.getGenotype("AA"), g1);
-        Assert.assertEquals(vc.getGenotypes().get("AT"), g2);
-        Assert.assertEquals(vc.getGenotype("AT"), g2);
-        Assert.assertEquals(vc.getGenotypes().get("TT"), g3);
-        Assert.assertEquals(vc.getGenotype("TT"), g3);
-
-        Assert.assertTrue(vc.hasGenotype("AA"));
-        Assert.assertTrue(vc.hasGenotype("AT"));
-        Assert.assertTrue(vc.hasGenotype("TT"));
-        Assert.assertFalse(vc.hasGenotype("foo"));
-        Assert.assertFalse(vc.hasGenotype("TTT"));
-        Assert.assertFalse(vc.hasGenotype("at"));
-        Assert.assertFalse(vc.hasGenotype("tt"));
-
-        Assert.assertEquals(vc.getCalledChrCount(), 6);
-        Assert.assertEquals(vc.getCalledChrCount(Aref), 3);
-        Assert.assertEquals(vc.getCalledChrCount(T), 3);
-    }
-
-    @Test
-    public void testAccessingCompleteGenotypes() {
-        List<Allele> alleles = Arrays.asList(Aref, T, ATC);
-
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        Genotype g4 = GenotypeBuilder.create("Td", Arrays.asList(T, ATC));
-        Genotype g5 = GenotypeBuilder.create("dd", Arrays.asList(ATC, ATC));
-        Genotype g6 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-
-        VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
-                .genotypes(g1, g2, g3, g4, g5, g6).make();
-
-        Assert.assertTrue(vc.hasGenotypes());
-        Assert.assertFalse(vc.isMonomorphicInSamples());
-        Assert.assertTrue(vc.isPolymorphicInSamples());
-        Assert.assertEquals(vc.getGenotypes().size(), 6);
-
-        Assert.assertEquals(3, vc.getGenotypes(Arrays.asList("AA", "Td", "dd")).size());
-
-        Assert.assertEquals(10, vc.getCalledChrCount());
-        Assert.assertEquals(3, vc.getCalledChrCount(Aref));
-        Assert.assertEquals(4, vc.getCalledChrCount(T));
-        Assert.assertEquals(3, vc.getCalledChrCount(ATC));
-        Assert.assertEquals(2, vc.getCalledChrCount(Allele.NO_CALL));
-
-        Assert.assertEquals(T, vc.getAltAlleleWithHighestAlleleCount());
-    }
-
-    @Test
-    public void testAccessingRefGenotypes() {
-        List<Allele> alleles1 = Arrays.asList(Aref, T);
-        List<Allele> alleles2 = Arrays.asList(Aref);
-        List<Allele> alleles3 = Arrays.asList(Aref, T);
-        for ( List<Allele> alleles : Arrays.asList(alleles1, alleles2, alleles3)) {
-            Genotype g1 = GenotypeBuilder.create("AA1", Arrays.asList(Aref, Aref));
-            Genotype g2 = GenotypeBuilder.create("AA2", Arrays.asList(Aref, Aref));
-            Genotype g3 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-            VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
-                    .genotypes(g1, g2, g3).make();
-
-            Assert.assertTrue(vc.hasGenotypes());
-            Assert.assertTrue(vc.isMonomorphicInSamples());
-            Assert.assertFalse(vc.isPolymorphicInSamples());
-            Assert.assertEquals(vc.getGenotypes().size(), 3);
-
-            Assert.assertEquals(4, vc.getCalledChrCount());
-            Assert.assertEquals(4, vc.getCalledChrCount(Aref));
-            Assert.assertEquals(0, vc.getCalledChrCount(T));
-            Assert.assertEquals(2, vc.getCalledChrCount(Allele.NO_CALL));
-
-            //bi allelic, only one alt allele
-            Allele expected;
-            if (alleles.size()>1) {
-                expected = alleles.get(1);
-            } else {
-                expected = null;
-            }
-
-            Assert.assertEquals( vc.getAltAlleleWithHighestAlleleCount(), expected);
-        }
-    }
-
-    @Test
-    public void testFilters() {
-        List<Allele> alleles = Arrays.asList(Aref, T);
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-
-        VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1, g2).make();
-
-        Assert.assertTrue(vc.isNotFiltered());
-        Assert.assertFalse(vc.isFiltered());
-        Assert.assertEquals(0, vc.getFilters().size());
-        Assert.assertFalse(vc.filtersWereApplied());
-        Assert.assertNull(vc.getFiltersMaybeNull());
-
-        vc = new VariantContextBuilder(vc).filters("BAD_SNP_BAD!").make();
-
-        Assert.assertFalse(vc.isNotFiltered());
-        Assert.assertTrue(vc.isFiltered());
-        Assert.assertEquals(1, vc.getFilters().size());
-        Assert.assertTrue(vc.filtersWereApplied());
-        Assert.assertNotNull(vc.getFiltersMaybeNull());
-
-        Set<String> filters = new HashSet<String>(Arrays.asList("BAD_SNP_BAD!", "REALLY_BAD_SNP", "CHRIST_THIS_IS_TERRIBLE"));
-        vc = new VariantContextBuilder(vc).filters(filters).make();
-
-        Assert.assertFalse(vc.isNotFiltered());
-        Assert.assertTrue(vc.isFiltered());
-        Assert.assertEquals(3, vc.getFilters().size());
-        Assert.assertTrue(vc.filtersWereApplied());
-        Assert.assertNotNull(vc.getFiltersMaybeNull());
-    }
-
-    @Test
-    public void testGetGenotypeCounts() {
-        List<Allele> alleles = Arrays.asList(Aref, T);
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        Genotype g4 = GenotypeBuilder.create("A.", Arrays.asList(Aref, Allele.NO_CALL));
-        Genotype g5 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-
-        // we need to create a new VariantContext each time
-        VariantContext vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-        Assert.assertEquals(1, vc.getHetCount());
-        vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-        Assert.assertEquals(1, vc.getHomRefCount());
-        vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-        Assert.assertEquals(1, vc.getHomVarCount());
-        vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-        Assert.assertEquals(1, vc.getMixedCount());
-        vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-        Assert.assertEquals(1, vc.getNoCallCount());
-    }
-
-    @Test
-    public void testVCFfromGenotypes() {
-        List<Allele> alleles = Arrays.asList(Aref, C, T);
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        Genotype g4 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-        Genotype g5 = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
-        VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-
-        VariantContext vc12 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g2.getSampleName())), true);
-        VariantContext vc1 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName())), true);
-        VariantContext vc23 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g2.getSampleName(), g3.getSampleName())), true);
-        VariantContext vc4 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g4.getSampleName())), true);
-        VariantContext vc14 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g4.getSampleName())), true);
-        VariantContext vc125 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g2.getSampleName(), g5.getSampleName())), true);
-
-        Assert.assertTrue(vc12.isPolymorphicInSamples());
-        Assert.assertTrue(vc23.isPolymorphicInSamples());
-        Assert.assertTrue(vc1.isMonomorphicInSamples());
-        Assert.assertTrue(vc4.isMonomorphicInSamples());
-        Assert.assertTrue(vc14.isMonomorphicInSamples());
-        Assert.assertTrue(vc125.isPolymorphicInSamples());
-
-        Assert.assertTrue(vc12.isSNP());
-        Assert.assertTrue(vc12.isVariant());
-        Assert.assertTrue(vc12.isBiallelic());
-
-        Assert.assertFalse(vc1.isSNP());
-        Assert.assertFalse(vc1.isVariant());
-        Assert.assertFalse(vc1.isBiallelic());
-
-        Assert.assertTrue(vc23.isSNP());
-        Assert.assertTrue(vc23.isVariant());
-        Assert.assertTrue(vc23.isBiallelic());
-
-        Assert.assertFalse(vc4.isSNP());
-        Assert.assertFalse(vc4.isVariant());
-        Assert.assertFalse(vc4.isBiallelic());
-
-        Assert.assertFalse(vc14.isSNP());
-        Assert.assertFalse(vc14.isVariant());
-        Assert.assertFalse(vc14.isBiallelic());
-
-        Assert.assertTrue(vc125.isSNP());
-        Assert.assertTrue(vc125.isVariant());
-        Assert.assertFalse(vc125.isBiallelic());
-
-        Assert.assertEquals(3, vc12.getCalledChrCount(Aref));
-        Assert.assertEquals(1, vc23.getCalledChrCount(Aref));
-        Assert.assertEquals(2, vc1.getCalledChrCount(Aref));
-        Assert.assertEquals(0, vc4.getCalledChrCount(Aref));
-        Assert.assertEquals(2, vc14.getCalledChrCount(Aref));
-        Assert.assertEquals(4, vc125.getCalledChrCount(Aref));
-    }
-
-    @Test
-    public void testMonomorphicVariant() {
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("BB", Arrays.asList(Aref, Allele.NO_CALL));
-        Genotype g3 = GenotypeBuilder.create("CC", Arrays.asList(Allele.NO_CALL,Allele.NO_CALL));
-        GenotypesContext gc = GenotypesContext.create(g1, g2, g3);
-        VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Collections.singletonList(Aref)).genotypes(gc).make();
-
-        Assert.assertEquals(vc.getType(), VariantContext.Type.NO_VARIATION);
-        Assert.assertNull(vc.getAltAlleleWithHighestAlleleCount());
-        Assert.assertEquals(vc.getCalledChrCount(Aref), 3);
-
-    }
-
-
-    public void testGetGenotypeMethods() {
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        GenotypesContext gc = GenotypesContext.create(g1, g2, g3);
-        VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
-
-        Assert.assertEquals(vc.getGenotype("AA"), g1);
-        Assert.assertEquals(vc.getGenotype("AT"), g2);
-        Assert.assertEquals(vc.getGenotype("TT"), g3);
-        Assert.assertEquals(vc.getGenotype("CC"), null);
-
-        Assert.assertEquals(vc.getGenotypes(), gc);
-        Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT")), Arrays.asList(g1, g2));
-        Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "TT")), Arrays.asList(g1, g3));
-        Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT", "TT")), Arrays.asList(g1, g2, g3));
-        Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT", "CC")), Arrays.asList(g1, g2));
-
-        Assert.assertEquals(vc.getGenotype(0), g1);
-        Assert.assertEquals(vc.getGenotype(1), g2);
-        Assert.assertEquals(vc.getGenotype(2), g3);
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test allele merging
-    //
-    // --------------------------------------------------------------------------------
-
-    private class GetAllelesTest {
-        List<Allele> alleles;
-        String name;
-
-        private GetAllelesTest(String name, Allele... arg) {
-            this.name = name;
-            this.alleles = Arrays.asList(arg);
-        }
-
-        public String toString() {
-            return String.format("%s input=%s", name, alleles);
-        }
-    }
-
-    @DataProvider(name = "getAlleles")
-    public Object[][] mergeAllelesData() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        tests.add(new Object[]{new GetAllelesTest("A*",   Aref)});
-        tests.add(new Object[]{new GetAllelesTest("A*/C", Aref, C)});
-        tests.add(new Object[]{new GetAllelesTest("A*/C/T", Aref, C, T)});
-        tests.add(new Object[]{new GetAllelesTest("A*/T/C", Aref, T, C)});
-        tests.add(new Object[]{new GetAllelesTest("A*/C/T/ATC", Aref, C, T, ATC)});
-        tests.add(new Object[]{new GetAllelesTest("A*/T/C/ATC", Aref, T, C, ATC)});
-        tests.add(new Object[]{new GetAllelesTest("A*/ATC/T/C", Aref, ATC, T, C)});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "getAlleles")
-    public void testMergeAlleles(GetAllelesTest cfg) {
-        final List<Allele> altAlleles = cfg.alleles.subList(1, cfg.alleles.size());
-        final VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, cfg.alleles).make();
-
-        Assert.assertEquals(vc.getAlleles(), cfg.alleles, "VC alleles not the same as input alleles");
-        Assert.assertEquals(vc.getNAlleles(), cfg.alleles.size(), "VC getNAlleles not the same as input alleles size");
-        Assert.assertEquals(vc.getAlternateAlleles(), altAlleles, "VC alt alleles not the same as input alt alleles");
-
-
-        for ( int i = 0; i < cfg.alleles.size(); i++ ) {
-            final Allele inputAllele = cfg.alleles.get(i);
-
-            Assert.assertTrue(vc.hasAllele(inputAllele));
-            if ( inputAllele.isReference() ) {
-                final Allele nonRefVersion = Allele.create(inputAllele.getBases(), false);
-                Assert.assertTrue(vc.hasAllele(nonRefVersion, true));
-                Assert.assertFalse(vc.hasAllele(nonRefVersion, false));
-            }
-
-            Assert.assertEquals(inputAllele, vc.getAllele(inputAllele.getBaseString()));
-            Assert.assertEquals(inputAllele, vc.getAllele(inputAllele.getBases()));
-
-            if ( i > 0 ) { // it's an alt allele
-                Assert.assertEquals(inputAllele, vc.getAlternateAllele(i-1));
-            }
-        }
-
-        final Allele missingAllele = Allele.create("AACCGGTT"); // does not exist
-        Assert.assertNull(vc.getAllele(missingAllele.getBases()));
-        Assert.assertFalse(vc.hasAllele(missingAllele));
-        Assert.assertFalse(vc.hasAllele(missingAllele, true));
-    }
-
-    private class SitesAndGenotypesVC {
-        VariantContext vc, copy;
-        String name;
-
-        private SitesAndGenotypesVC(String name, VariantContext original) {
-            this.name = name;
-            this.vc = original;
-            this.copy = new VariantContextBuilder(original).make();
-        }
-
-        public String toString() {
-            return String.format("%s input=%s", name, vc);
-        }
-    }
-
-    @DataProvider(name = "SitesAndGenotypesVC")
-    public Object[][] MakeSitesAndGenotypesVCs() {
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-
-        VariantContext sites = new VariantContextBuilder("sites", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).make();
-        VariantContext genotypes = new VariantContextBuilder(sites).source("genotypes").genotypes(g1, g2, g3).make();
-
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        tests.add(new Object[]{new SitesAndGenotypesVC("sites", sites)});
-        tests.add(new Object[]{new SitesAndGenotypesVC("genotypes", genotypes)});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test modifying routines
-    //
-    // --------------------------------------------------------------------------------
-    @Test(dataProvider = "SitesAndGenotypesVC")
-    public void runModifyVCTests(SitesAndGenotypesVC cfg) {
-        VariantContext modified = new VariantContextBuilder(cfg.vc).loc("chr2", 123, 123).make();
-        Assert.assertEquals(modified.getContig(), "chr2");
-        Assert.assertEquals(modified.getStart(), 123);
-        Assert.assertEquals(modified.getEnd(), 123);
-
-        modified = new VariantContextBuilder(cfg.vc).id("newID").make();
-        Assert.assertEquals(modified.getID(), "newID");
-
-        Set<String> newFilters = Collections.singleton("newFilter");
-        modified = new VariantContextBuilder(cfg.vc).filters(newFilters).make();
-        Assert.assertEquals(modified.getFilters(), newFilters);
-
-        // test the behavior when the builder's attribute object is null
-        modified = new VariantContextBuilder(modified).attributes(null).make();
-        Assert.assertTrue(modified.getAttributes().isEmpty());
-        modified = new VariantContextBuilder(modified).attributes(null).rmAttribute("AC").make();
-        Assert.assertTrue(modified.getAttributes().isEmpty());
-        modified = new VariantContextBuilder(modified).attributes(null).attribute("AC", 1).make();
-        Assert.assertEquals(modified.getAttribute("AC"), 1);
-
-        // test the behavior when the builder's attribute object is not initialized
-        modified = new VariantContextBuilder(modified.getSource(), modified.getContig(), modified.getStart(), modified.getEnd(), modified.getAlleles()).attribute("AC", 1).make();
-
-        // test normal attribute modification
-        modified = new VariantContextBuilder(cfg.vc).attribute("AC", 1).make();
-        Assert.assertEquals(modified.getAttribute("AC"), 1);
-        modified = new VariantContextBuilder(modified).attribute("AC", 2).make();
-        Assert.assertEquals(modified.getAttribute("AC"), 2);
-
-        Genotype g1 = GenotypeBuilder.create("AA2", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT2", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT2", Arrays.asList(T, T));
-        GenotypesContext gc = GenotypesContext.create(g1,g2,g3);
-        modified = new VariantContextBuilder(cfg.vc).genotypes(gc).make();
-        Assert.assertEquals(modified.getGenotypes(), gc);
-        modified = new VariantContextBuilder(cfg.vc).noGenotypes().make();
-        Assert.assertTrue(modified.getGenotypes().isEmpty());
-
-        // test that original hasn't changed
-        Assert.assertEquals(cfg.vc.getContig(), cfg.copy.getContig());
-        Assert.assertEquals(cfg.vc.getStart(), cfg.copy.getStart());
-        Assert.assertEquals(cfg.vc.getEnd(), cfg.copy.getEnd());
-        Assert.assertEquals(cfg.vc.getAlleles(), cfg.copy.getAlleles());
-        Assert.assertEquals(cfg.vc.getAttributes(), cfg.copy.getAttributes());
-        Assert.assertEquals(cfg.vc.getID(), cfg.copy.getID());
-        Assert.assertEquals(cfg.vc.getGenotypes(), cfg.copy.getGenotypes());
-        Assert.assertEquals(cfg.vc.getLog10PError(), cfg.copy.getLog10PError());
-        Assert.assertEquals(cfg.vc.getFilters(), cfg.copy.getFilters());
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test subcontext
-    //
-    // --------------------------------------------------------------------------------
-    private class SubContextTest {
-        Set<String> samples;
-        boolean updateAlleles;
-
-        private SubContextTest(Collection<String> samples, boolean updateAlleles) {
-            this.samples = new HashSet<String>(samples);
-            this.updateAlleles = updateAlleles;
-        }
-
-        public String toString() {
-            return String.format("%s samples=%s updateAlleles=%b", "SubContextTest", samples, updateAlleles);
-        }
-    }
-
-    @DataProvider(name = "SubContextTest")
-    public Object[][] MakeSubContextTest() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        for ( boolean updateAlleles : Arrays.asList(true, false)) {
-            tests.add(new Object[]{new SubContextTest(Collections.<String>emptySet(), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Collections.singleton("MISSING"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Collections.singleton("AA"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Collections.singleton("AT"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Collections.singleton("TT"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "TT"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "MISSING"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "TT", "MISSING"), updateAlleles)});
-            tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "AC"), updateAlleles)});
-        }
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "SubContextTest")
-    public void runSubContextTest(SubContextTest cfg) {
-        Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
-        Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-        Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-        Genotype g4 = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
-
-        GenotypesContext gc = GenotypesContext.create(g1, g2, g3, g4);
-        VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C, T)).genotypes(gc).make();
-        VariantContext sub = vc.subContextFromSamples(cfg.samples, cfg.updateAlleles);
-
-        // unchanged attributes should be the same
-        Assert.assertEquals(sub.getContig(), vc.getContig());
-        Assert.assertEquals(sub.getStart(), vc.getStart());
-        Assert.assertEquals(sub.getEnd(), vc.getEnd());
-        Assert.assertEquals(sub.getLog10PError(), vc.getLog10PError());
-        Assert.assertEquals(sub.getFilters(), vc.getFilters());
-        Assert.assertEquals(sub.getID(), vc.getID());
-        Assert.assertEquals(sub.getAttributes(), vc.getAttributes());
-
-        Set<Genotype> expectedGenotypes = new HashSet<Genotype>();
-        if ( cfg.samples.contains(g1.getSampleName()) ) expectedGenotypes.add(g1);
-        if ( cfg.samples.contains(g2.getSampleName()) ) expectedGenotypes.add(g2);
-        if ( cfg.samples.contains(g3.getSampleName()) ) expectedGenotypes.add(g3);
-        if ( cfg.samples.contains(g4.getSampleName()) ) expectedGenotypes.add(g4);
-        GenotypesContext expectedGC = GenotypesContext.copy(expectedGenotypes);
-
-        // these values depend on the results of sub
-        if ( cfg.updateAlleles ) {
-            // do the work to see what alleles should be here, and which not
-            List<Allele> expectedAlleles = new ArrayList<Allele>();
-            expectedAlleles.add(Aref);
-
-            Set<Allele> genotypeAlleles = new HashSet<Allele>();
-            for ( final Genotype g : expectedGC )
-                genotypeAlleles.addAll(g.getAlleles());
-            genotypeAlleles.remove(Aref);
-
-            // ensure original allele order
-            for (Allele allele: vc.getAlleles())
-                if (genotypeAlleles.contains(allele))
-                    expectedAlleles.add(allele);
-
-            Assert.assertEquals(sub.getAlleles(), expectedAlleles);
-        } else {
-            // not updating alleles -- should be the same
-            Assert.assertEquals(sub.getAlleles(), vc.getAlleles());
-        }
-
-        // same sample names => success
-        Assert.assertTrue(sub.getGenotypes().getSampleNames().equals(expectedGC.getSampleNames()));
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test sample name functions
-    //
-    // --------------------------------------------------------------------------------
-    private class SampleNamesTest {
-        List<String> sampleNames;
-        List<String> sampleNamesInOrder;
-
-        private SampleNamesTest(List<String> sampleNames, List<String> sampleNamesInOrder) {
-            this.sampleNamesInOrder = sampleNamesInOrder;
-            this.sampleNames = sampleNames;
-        }
-
-        public String toString() {
-            return String.format("%s samples=%s order=%s", "SampleNamesTest", sampleNames, sampleNamesInOrder);
-        }
-    }
-
-    @DataProvider(name = "SampleNamesTest")
-    public Object[][] MakeSampleNamesTest() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1"), Arrays.asList("1"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "1"), Arrays.asList("1", "2"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1", "2"), Arrays.asList("1", "2"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1", "2", "3"), Arrays.asList("1", "2", "3"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "1", "3"), Arrays.asList("1", "2", "3"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "3", "1"), Arrays.asList("1", "2", "3"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("3", "1", "2"), Arrays.asList("1", "2", "3"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("3", "2", "1"), Arrays.asList("1", "2", "3"))});
-        tests.add(new Object[]{new SampleNamesTest(Arrays.asList("NA2", "NA1"), Arrays.asList("NA1", "NA2"))});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    private final static void assertGenotypesAreInOrder(Iterable<Genotype> gIt, List<String> names) {
-        int i = 0;
-        for ( final Genotype g : gIt ) {
-            Assert.assertEquals(g.getSampleName(), names.get(i), "Unexpected genotype ordering");
-            i++;
-        }
-    }
-
-
-    @Test(dataProvider = "SampleNamesTest")
-    public void runSampleNamesTest(SampleNamesTest cfg) {
-        GenotypesContext gc = GenotypesContext.create(cfg.sampleNames.size());
-        for ( final String name : cfg.sampleNames ) {
-            gc.add(GenotypeBuilder.create(name, Arrays.asList(Aref, T)));
-        }
-
-        VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
-
-        // same sample names => success
-        Assert.assertTrue(vc.getSampleNames().equals(new HashSet<String>(cfg.sampleNames)), "vc.getSampleNames() = " + vc.getSampleNames());
-        Assert.assertEquals(vc.getSampleNamesOrderedByName(), cfg.sampleNamesInOrder, "vc.getSampleNamesOrderedByName() = " + vc.getSampleNamesOrderedByName());
-
-        assertGenotypesAreInOrder(vc.getGenotypesOrderedByName(), cfg.sampleNamesInOrder);
-        assertGenotypesAreInOrder(vc.getGenotypesOrderedBy(cfg.sampleNames), cfg.sampleNames);
-    }
-
-    @Test
-    public void testGenotypeCounting() {
-        Genotype noCall = GenotypeBuilder.create("nocall", Arrays.asList(Allele.NO_CALL));
-        Genotype mixed  = GenotypeBuilder.create("mixed", Arrays.asList(Aref, Allele.NO_CALL));
-        Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(Aref, Aref));
-        Genotype het    = GenotypeBuilder.create("het", Arrays.asList(Aref, T));
-        Genotype homVar = GenotypeBuilder.create("homVar", Arrays.asList(T, T));
-
-        List<Genotype> allGenotypes = Arrays.asList(noCall, mixed, homRef, het, homVar);
-        final int nCycles = allGenotypes.size() * 10;
-
-        for ( int i = 0; i < nCycles; i++ ) {
-            int nNoCall = 0, nNoCallAlleles = 0, nA = 0, nT = 0, nMixed = 0, nHomRef = 0, nHet = 0, nHomVar = 0;
-            int nSamples = 0;
-            GenotypesContext gc = GenotypesContext.create();
-            for ( int j = 0; j < i; j++ ) {
-                nSamples++;
-                Genotype g = allGenotypes.get(j % allGenotypes.size());
-                final String name = String.format("%s_%d%d", g.getSampleName(), i, j);
-                gc.add(GenotypeBuilder.create(name, g.getAlleles()));
-                switch ( g.getType() ) {
-                    case NO_CALL: nNoCall++; nNoCallAlleles++; break;
-                    case HOM_REF: nA += 2; nHomRef++; break;
-                    case HET: nA++; nT++; nHet++; break;
-                    case HOM_VAR: nT += 2; nHomVar++; break;
-                    case MIXED: nA++; nNoCallAlleles++; nMixed++; break;
-                    default: throw new RuntimeException("Unexpected genotype type " + g.getType());
-                }
-
-            }
-
-            VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
-            Assert.assertEquals(vc.getNSamples(), nSamples);
-            if ( nSamples > 0 ) {
-                Assert.assertEquals(vc.isPolymorphicInSamples(), nT > 0);
-                Assert.assertEquals(vc.isMonomorphicInSamples(), nT == 0);
-            }
-            Assert.assertEquals(vc.getCalledChrCount(), nA + nT);
-
-            Assert.assertEquals(vc.getCalledChrCount(Allele.NO_CALL), nNoCallAlleles);
-            Assert.assertEquals(vc.getCalledChrCount(Aref), nA);
-            Assert.assertEquals(vc.getCalledChrCount(T), nT);
-
-            Assert.assertEquals(vc.getNoCallCount(), nNoCall);
-            Assert.assertEquals(vc.getHomRefCount(), nHomRef);
-            Assert.assertEquals(vc.getHetCount(), nHet);
-            Assert.assertEquals(vc.getHomVarCount(), nHomVar);
-            Assert.assertEquals(vc.getMixedCount(), nMixed);
-        }
-    }
-    @Test
-    public void testSetAttribute() {
-    	VariantContextBuilder builder = new VariantContextBuilder();
-    	builder.attribute("Test", "value");
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test validation methods
-    //
-    // --------------------------------------------------------------------------------
-
-    // create a VariantContext object for various alleles and genotypes to test against
-    private VariantContext createTestVariantContext(final List<Allele> alleles, final Map<String, Object> attributes, final Genotype... genotypes) {
-        final EnumSet<VariantContext.Validation> toValidate = EnumSet.noneOf(VariantContext.Validation.class);
-        final Set<String> filters = null;
-        final boolean fullyDecoded = false;
-
-        // no genotypes needs to use GenotypesContext.NO_GENOTYPES,
-        // otherwise we build up a GenotypesContext from the passed genotypes
-        final GenotypesContext gc;
-        if (genotypes == null || genotypes.length == 0) {
-            gc = GenotypesContext.NO_GENOTYPES;
-        } else {
-            gc = new GenotypesContext();
-            for (final Genotype genotype : genotypes) {
-                gc.add(genotype);
-            }
-        }
-        // most of the fields are not important to the tests, we just need alleles and gc set properly
-        return new VariantContext("genotypes", VCFConstants.EMPTY_ID_FIELD, snpLoc, snpLocStart, snpLocStop, alleles,
-                gc, VariantContext.NO_LOG10_PERROR, filters, attributes,
-                fullyDecoded, toValidate);
-    }
-
-    // validateReferenceBases: PASS conditions
-    @DataProvider
-    public Object[][] testValidateReferencesBasesDataProvider() {
-        final VariantContext vc = createValidateReferencesContext(Arrays.asList(Aref, T));
-        return new Object[][]{
-                // null ref will pass validation
-                {vc, null, A},
-                // A vs A-ref will pass validation
-                {vc, Aref, A}
-        };
-    }
-    @Test(dataProvider = "testValidateReferencesBasesDataProvider")
-    public void testValidateReferenceBases(final VariantContext vc, final Allele allele1, final Allele allele2) {
-        // validateReferenceBases throws exceptions if it fails, so no Asserts here...
-        vc.validateReferenceBases(allele1, allele2);
-    }
-    // validateReferenceBases: FAIL conditions
-    @DataProvider
-    public Object[][] testValidateReferencesBasesFailureDataProvider() {
-        final VariantContext vc = createValidateReferencesContext(Arrays.asList(Aref, T));
-
-        final Allele symbolicAllele = Allele.create("<A>");
-
-        return new Object[][]{
-                // T vs A-ref will NOT pass validation
-                {vc, Aref, T},
-                // symbolic alleles will NOT pass validation
-                {vc, Aref, symbolicAllele}
-        };
-    }
-    @Test(dataProvider = "testValidateReferencesBasesFailureDataProvider", expectedExceptions = TribbleException.class)
-    public void testValidateReferenceBasesFailure(final VariantContext vc, final Allele allele1, final Allele allele2) {
-        // validateReferenceBases throws exceptions if it fails, so no Asserts here...
-        vc.validateReferenceBases(allele1, allele2);
-    }
-    private VariantContext createValidateReferencesContext(final List<Allele> alleles) {
-        return createTestVariantContext(alleles, null);
-    }
-
-
-    // validateRSIDs: PASS conditions
-    @DataProvider
-    public Object[][] testValidateRSIDsDataProvider() {
-        final VariantContext vcNoId = createTestVariantContextRsIds(VCFConstants.EMPTY_ID_FIELD);
-        final VariantContext vcNonRs = createTestVariantContextRsIds("abc456");
-        final VariantContext vc = createTestVariantContextRsIds("rs123");
-        final VariantContext vcMultipleRs = createTestVariantContextRsIds("rs123;rs456;rs789");
-
-        return new Object[][]{
-                // no ID will pass validation
-                {vcNoId, makeRsIDsSet("rs123")},
-                // non-rs ID will pass validation
-                {vcNonRs, makeRsIDsSet("rs123")},
-                // matching ID will pass validation
-                {vc, makeRsIDsSet("rs123")},
-                // null rsIDs to check will pass validation
-                {vc, null},
-                // context with multiple rsIDs that are contained within the rsID list will pass
-                {vcMultipleRs, makeRsIDsSet("rs123", "rs321", "rs456", "rs654", "rs789")}
-        };
-    }
-    @Test(dataProvider = "testValidateRSIDsDataProvider")
-    public void testValidateRSIDs(final VariantContext vc, final Set<String> rsIDs) {
-        // validateRSIDs throws exceptions if it fails, so no Asserts here...
-        vc.validateRSIDs(rsIDs);
-    }
-    // validateRSIDs: FAIL conditions
-    @DataProvider
-    public Object[][] testValidateRSIDsFailureDataProvider() {
-        final VariantContext vc = createTestVariantContextRsIds("rs123");
-        final VariantContext vcMultipleRs = createTestVariantContextRsIds("rs123;rs456;rs789");
-
-        return new Object[][]{
-                // mismatching ID will fail validation
-                {vc, makeRsIDsSet("rs123456")},
-                // null rsIDs to check will pass validation
-                {vcMultipleRs, makeRsIDsSet("rs456")}
-        };
-    }
-    @Test(dataProvider = "testValidateRSIDsFailureDataProvider", expectedExceptions = TribbleException.class)
-    public void testValidateRSIDsFailure(final VariantContext vc, final Set<String> rsIDs) {
-        // validateRSIDs throws exceptions if it fails, so no Asserts here...
-        vc.validateRSIDs(rsIDs);
-    }
-    // create a VariantContext appropriate for testing rsIDs
-    private VariantContext createTestVariantContextRsIds(final String rsId) {
-        final EnumSet<VariantContext.Validation> toValidate = EnumSet.noneOf(VariantContext.Validation.class);
-        final Set<String> filters = null;
-        final Map<String, Object> attributes = null;
-        final boolean fullyDecoded = false;
-
-        return new VariantContext("genotypes", rsId, snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T),
-                GenotypesContext.NO_GENOTYPES, VariantContext.NO_LOG10_PERROR, filters, attributes,
-                fullyDecoded, toValidate);
-    }
-    private Set<String> makeRsIDsSet(final String... rsIds) {
-        return new HashSet<String>(Arrays.asList(rsIds));
-    }
-
-
-    // validateAlternateAlleles: PASS conditions
-    @DataProvider
-    public Object[][] testValidateAlternateAllelesDataProvider() {
-        final Genotype homVarT = GenotypeBuilder.create("homVarT", Arrays.asList(T, T));
-
-        // no genotypes passes validateAlternateAlleles
-        final VariantContext vcNoGenotypes =
-                // A-ref/T with no GT
-                createValidateAlternateAllelesContext(Arrays.asList(Aref, T));
-
-        // genotypes that match ALTs will pass
-        final VariantContext vcHasGenotypes =
-                // A-ref/T vs T/T
-                createValidateAlternateAllelesContext(Arrays.asList(Aref, T), homVarT);
-
-        return new Object[][]{
-                {vcNoGenotypes},
-                {vcHasGenotypes}
-        };
-    }
-    @Test(dataProvider = "testValidateAlternateAllelesDataProvider")
-    public void testValidateAlternateAlleles(final VariantContext vc) {
-        // validateAlternateAlleles throws exceptions if it fails, so no Asserts here...
-        vc.validateAlternateAlleles();
-    }
-    // validateAlternateAlleles: FAIL conditions
-    @DataProvider
-    public Object[][] testValidateAlternateAllelesFailureDataProvider() {
-        final Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(Aref, Aref));
-        final Genotype homVarA = GenotypeBuilder.create("homVarA", Arrays.asList(A, A));
-
-        // alts not observed in the genotypes will fail validation
-        // this is the throw in VariantContext from: if ( reportedAlleles.size() != observedAlleles.size() )
-        final VariantContext vcHasAltNotObservedInGT =
-                // A-ref/T vs A-ref/A-ref
-                createValidateAlternateAllelesContext(Arrays.asList(Aref, T), homRef);
-
-        // alts not observed in the genotypes will fail validation
-        // but this time it is the second throw in VariantContext after: observedAlleles.retainAll(reportedAlleles);
-        final VariantContext vcHasAltNotObservedInGTIntersection =
-                // A-ref/T vs A/A
-                createValidateAlternateAllelesContext(Arrays.asList(Aref, T), homVarA);
-
-        return new Object[][]{
-                {vcHasAltNotObservedInGT},
-                {vcHasAltNotObservedInGTIntersection}
-        };
-    }
-    @Test(dataProvider = "testValidateAlternateAllelesFailureDataProvider", expectedExceptions = TribbleException.class)
-    public void testValidateAlternateAllelesFailure(final VariantContext vc) {
-        // validateAlternateAlleles throws exceptions if it fails, so no Asserts here...
-        vc.validateAlternateAlleles();
-    }
-    private VariantContext createValidateAlternateAllelesContext(final List<Allele> alleles, final Genotype... genotypes) {
-        return createTestVariantContext(alleles, null, genotypes);
-    }
-
-
-
-    // validateChromosomeCounts: PASS conditions
-    @DataProvider
-    public Object[][] testValidateChromosomeCountsDataProvider() {
-        final Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(Aref, Aref));
-        final Genotype homVarT = GenotypeBuilder.create("homVarT", Arrays.asList(T, T));
-        final Genotype hetVarTC = GenotypeBuilder.create("hetVarTC", Arrays.asList(T, C));
-        final Genotype homRefNoCall = GenotypeBuilder.create("homRefNoCall", Arrays.asList(Aref, Allele.NO_CALL));
-
-
-        // no genotypes passes validateChromosomeCounts
-        final VariantContext vcNoGenotypes =
-                // A-ref/T with no GT
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T), null);
-
-        /** AN : total number of alleles in called genotypes **/
-        // with AN set and hom-ref, we expect AN to be 2 for Aref/Aref
-        final Map<String, Object> attributesAN = new HashMap<String, Object>();
-        attributesAN.put(VCFConstants.ALLELE_NUMBER_KEY, "2");
-        final VariantContext vcANSet =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesAN, homRef);
-
-        // with AN set, one no-call (no-calls get ignored by getCalledChrCount() in VariantContext)
-        // we expect AN to be 1 for Aref/no-call
-        final Map<String, Object> attributesANNoCall = new HashMap<String, Object>();
-        attributesANNoCall.put(VCFConstants.ALLELE_NUMBER_KEY, "1");
-        final VariantContext vcANSetNoCall =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesANNoCall, homRefNoCall);
-
-
-        /** AC : allele count in genotypes, for each ALT allele, in the same order as listed **/
-        // with AC set, and T/T, we expect AC to be 2 (for 2 counts of ALT T)
-        final Map<String, Object> attributesAC = new HashMap<String, Object>();
-        attributesAC.put(VCFConstants.ALLELE_COUNT_KEY, "2");
-        final VariantContext vcACSet =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T), attributesAC, homVarT);
-
-        // with AC set and no ALT (GT is 0/0), we expect AC count to be 0
-        final Map<String, Object> attributesACNoAlts = new HashMap<String, Object>();
-        attributesACNoAlts.put(VCFConstants.ALLELE_COUNT_KEY, "0");
-        final VariantContext vcACSetNoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesACNoAlts, homRef);
-
-        // with AC set, and two different ALTs (T and C), with GT of 1/2, we expect a count of 1 for each.
-        // With two ALTs, a list is expected, so we set the attribute as a list of 1,1
-        final Map<String, Object> attributesACTwoAlts = new HashMap<String, Object>();
-        attributesACTwoAlts.put(VCFConstants.ALLELE_COUNT_KEY, Arrays.asList("1", "1"));
-        final VariantContext vcACSetTwoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACTwoAlts, hetVarTC);
-
-        // with AC set, and two different ALTs (T and C), with no GT, we expect a 2 count values.
-        final Map<String, Object> attributesACNoGtTwoAlts = new HashMap<String, Object>();
-        attributesACNoGtTwoAlts.put(VCFConstants.ALLELE_COUNT_KEY, Arrays.asList("1", "1"));
-        final VariantContext vcACNoGtSetTwoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACNoGtTwoAlts, null);
-
-        // with AF set, and two different ALTs (T and C), with GT of 1/2, we expect two frequncy values.
-        // With two ALTs, a list is expected, so we set the attribute as a list of 0.5,0.5
-        final Map<String, Object> attributesAFTwoAlts = new HashMap<String, Object>();
-        attributesAFTwoAlts.put(VCFConstants.ALLELE_FREQUENCY_KEY, Arrays.asList("0.5", "0.5"));
-        final VariantContext vcAFSetTwoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesAFTwoAlts, hetVarTC);
-
-        // with AF set, and two different ALTs (T and C), with no GT, we expect two frequency values.
-        final Map<String, Object> attributesAFNoGtTwoAlts = new HashMap<String, Object>();
-        attributesAFNoGtTwoAlts.put(VCFConstants.ALLELE_FREQUENCY_KEY, Arrays.asList("0.5", "0.5"));
-        final VariantContext vcAFNoGtSetTwoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesAFNoGtTwoAlts, null);
-
-        return new Object[][]{
-                {vcNoGenotypes},
-                {vcANSet},
-                {vcANSetNoCall},
-                {vcACSet},
-                {vcACSetNoAlts},
-                {vcACNoGtSetTwoAlts},
-                {vcAFSetTwoAlts},
-                {vcAFNoGtSetTwoAlts}
-        };
-    }
-    @Test(dataProvider = "testValidateChromosomeCountsDataProvider")
-    public void testValidateChromosomeCounts(final VariantContext vc) {
-        // validateChromosomeCounts throws exceptions if it fails, so no Asserts here...
-        vc.validateChromosomeCounts();
-    }
-    // validateChromosomeCounts: FAIL conditions
-    @DataProvider
-    public Object[][] testValidateChromosomeCountsFailureDataProvider() {
-        final Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(Aref, Aref));
-        final Genotype hetVarTC = GenotypeBuilder.create("hetVarTC", Arrays.asList(T, C));
-        final Genotype homRefNoCall = GenotypeBuilder.create("homRefNoCall", Arrays.asList(Aref, Allele.NO_CALL));
-
-        /** AN : total number of alleles in called genotypes **/
-        // with AN set and hom-ref, we expect AN to be 2 for Aref/Aref, so 3 will fail
-        final Map<String, Object> attributesAN = new HashMap<String, Object>();
-        attributesAN.put(VCFConstants.ALLELE_NUMBER_KEY, "3");
-        final VariantContext vcANSet =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesAN, homRef);
-
-        // with AN set, one no-call (no-calls get ignored by getCalledChrCount() in VariantContext)
-        // we expect AN to be 1 for Aref/no-call, so 2 will fail
-        final Map<String, Object> attributesANNoCall = new HashMap<String, Object>();
-        attributesANNoCall.put(VCFConstants.ALLELE_NUMBER_KEY, "2");
-        final VariantContext vcANSetNoCall =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesANNoCall, homRefNoCall);
-
-        /** AC : allele count in genotypes, for each ALT allele, in the same order as listed **/
-        // with AC set but no ALTs, we expect a count of 0, so the wrong count will fail here
-        final Map<String, Object> attributesACWrongCount = new HashMap<String, Object>();
-        attributesACWrongCount.put(VCFConstants.ALLELE_COUNT_KEY, "2");
-        final VariantContext vcACWrongCount =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref), attributesACWrongCount, homRef);
-
-        // with AC set, two ALTs, but AC is not a list with count for each ALT
-        final Map<String, Object> attributesACTwoAlts = new HashMap<String, Object>();
-        attributesACTwoAlts.put(VCFConstants.ALLELE_COUNT_KEY, "1");
-        final VariantContext vcACSetTwoAlts =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACTwoAlts, hetVarTC);
-
-        // with AC set, two ALTs, and a list is correctly used, but wrong counts (we expect counts to be 1,1)
-        final Map<String, Object> attributesACTwoAltsWrongCount = new HashMap<String, Object>();
-        attributesACTwoAltsWrongCount.put(VCFConstants.ALLELE_COUNT_KEY, Arrays.asList("1", "2"));
-        final VariantContext vcACSetTwoAltsWrongCount =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACTwoAltsWrongCount, hetVarTC);
-
-        // with AC set, two ALTs, but only count for one ALT (we expect two items in the list: 1,1)
-        final Map<String, Object> attributesACTwoAltsOneAltCount = new HashMap<String, Object>();
-        attributesACTwoAltsOneAltCount.put(VCFConstants.ALLELE_COUNT_KEY, Arrays.asList("1"));
-        final VariantContext vcACSetTwoAltsOneAltCount =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACTwoAltsOneAltCount, hetVarTC);
-
-        // with AC set, no GT, two ALTs, but only count for one ALT (we expect two items in the list: 1,1)
-        final Map<String, Object> attributesACNoGtTwoAltsOneAltCount = new HashMap<String, Object>();
-        attributesACNoGtTwoAltsOneAltCount.put(VCFConstants.ALLELE_COUNT_KEY, Arrays.asList("1"));
-        final VariantContext vcACNoGtSetTwoAltsOneAltCount =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesACNoGtTwoAltsOneAltCount, null);
-
-        // with AF set, two ALTs, but only frequency for one ALT (we expect two items in the list
-        final Map<String, Object> attributesAFTwoAltsWrongFreq = new HashMap<String, Object>();
-        attributesAFTwoAltsWrongFreq.put(VCFConstants.ALLELE_FREQUENCY_KEY, Arrays.asList("0.5"));
-        final VariantContext vcAFSetTwoAltsWrongFreq =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesAFTwoAltsWrongFreq, hetVarTC);
-
-        // with AF set, no GT, two ALTs, but only frequency for one ALT (we expect two items in the list
-        final Map<String, Object> attributesAFNoGtTwoAltsWrongCount = new HashMap<String, Object>();
-        attributesAFNoGtTwoAltsWrongCount.put(VCFConstants.ALLELE_FREQUENCY_KEY, Arrays.asList("0.5"));
-        final VariantContext vcAFNoGtSetTwoAltsWrongFreq =
-                createValidateChromosomeCountsContext(Arrays.asList(Aref, T, C), attributesAFNoGtTwoAltsWrongCount, null);
-
-        return new Object[][]{
-                {vcANSet},
-                {vcANSetNoCall},
-                {vcACWrongCount},
-                {vcACSetTwoAlts},
-                {vcACSetTwoAltsWrongCount},
-                {vcACSetTwoAltsOneAltCount},
-                {vcACNoGtSetTwoAltsOneAltCount},
-                {vcAFSetTwoAltsWrongFreq},
-                {vcAFNoGtSetTwoAltsWrongFreq}
-        };
-    }
-    @Test(dataProvider = "testValidateChromosomeCountsFailureDataProvider", expectedExceptions = TribbleException.class)
-    public void testValidateChromosomeCountsFailure(final VariantContext vc) {
-        // validateChromosomeCounts throws exceptions if it fails, so no Asserts here...
-        vc.validateChromosomeCounts();
-    }
-    private VariantContext createValidateChromosomeCountsContext(final List<Allele> alleles, final Map<String, Object> attributes, final Genotype... genotypes) {
-        return createTestVariantContext(alleles, attributes, genotypes);
-    }
-
-
-    // the extraStrictValidation method calls the other validation methods
-    @DataProvider
-    public Object[][] testExtraStrictValidationDataProvider() {
-        // get the data providers for each of the passing tests of the individual methods
-        final Object[][] passingValidateReferenceBasesData = testValidateReferencesBasesDataProvider();
-        final Object[][] passingValidateRSIDsData = testValidateRSIDsDataProvider();
-        final Object[][] passingValidateAlternateAllelesData = testValidateAlternateAllelesDataProvider();
-        final Object[][] passingValidateChromosomeCountsData = testValidateChromosomeCountsDataProvider();
-
-        // the total number of tests we will run here is the sum of each of the test cases
-        final int numDataPoints =
-                passingValidateReferenceBasesData.length +
-                        passingValidateRSIDsData.length +
-                        passingValidateAlternateAllelesData.length +
-                        passingValidateChromosomeCountsData.length;
-
-        // create the data provider structure for this extra strict test
-        final Object[][] extraStrictData = new Object[numDataPoints][];
-
-        int testNum = 0;
-        for (final Object[] testRefBases : passingValidateReferenceBasesData) {
-            final VariantContext vc = (VariantContext) testRefBases[0];
-            final Allele refAllele = (Allele) testRefBases[1];
-            final Allele allele = (Allele) testRefBases[2];
-
-            // for this test, rsIds does not matter, so we hold it constant
-            extraStrictData[testNum++] = new Object[]{vc, refAllele, allele, null};
-        }
-
-        for (final Object[] testRsIDs : passingValidateRSIDsData) {
-            final VariantContext vc = (VariantContext) testRsIDs[0];
-            final Set<String> rsIDs = (Set<String>) testRsIDs[1];
-
-            // for this test, reportedReference and observedReference does not matter,
-            // so we hold it constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, rsIDs};
-        }
-
-        for (final Object[] testAlternateAlleles : passingValidateAlternateAllelesData) {
-            final VariantContext vc = (VariantContext) testAlternateAlleles[0];
-
-            // for this test, only VariantContext is used, so we hold
-            // reportedReference, observedReference and rsIds constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, null};
-        }
-
-        for (final Object[] testChromomeCounts : passingValidateChromosomeCountsData) {
-            final VariantContext vc = (VariantContext) testChromomeCounts[0];
-
-            // for this test, only VariantContext is used, so we hold
-            // reportedReference, observedReference and rsIds constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, null};
-        }
-
-        return extraStrictData;
-    }
-
-    @DataProvider(name = "serializationTestData")
-    public Object[][] getSerializationTestData() {
-        return new Object[][] {
-                { new File("src/test/resources/htsjdk/variant/HiSeq.10000.vcf"), new VCFCodec() },
-                { new File("src/test/resources/htsjdk/variant/serialization_test.bcf"), new BCF2Codec() }
-        };
-    }
-
-    @Test(dataProvider = "serializationTestData")
-    public void testSerialization( final File testFile, final FeatureCodec<VariantContext, ?> codec ) throws Exception {
-        final AbstractFeatureReader<VariantContext, ?> featureReader = AbstractFeatureReader.getFeatureReader(testFile.getAbsolutePath(), codec, false);
-        final VariantContext initialVC = featureReader.iterator().next();
-
-        final VariantContext vcDeserialized = TestUtil.serializeAndDeserialize(initialVC);
-
-        assertVariantContextsAreEqual(vcDeserialized, initialVC);
-    }
-
-    @Test(dataProvider = "testExtraStrictValidationDataProvider")
-    public void testExtraStrictValidation(final VariantContext vc, final Allele reportedReference, final Allele observedReference, final Set<String> rsIDs) {
-        // extraStrictValidation throws exceptions if it fails, so no Asserts here...
-        vc.extraStrictValidation(reportedReference, observedReference, rsIDs);
-    }
-    @DataProvider
-    public Object[][] testExtraStrictValidationFailureDataProvider() {
-        // get the data providers for each of the failure tests of the individual methods
-        final Object[][] failingValidateReferenceBasesData = testValidateReferencesBasesFailureDataProvider();
-        final Object[][] failingValidateRSIDsData = testValidateRSIDsFailureDataProvider();
-        final Object[][] failingValidateAlternateAllelesData = testValidateAlternateAllelesFailureDataProvider();
-        final Object[][] failingValidateChromosomeCountsData = testValidateChromosomeCountsFailureDataProvider();
-
-        // the total number of tests we will run here is the sum of each of the test cases
-        final int numDataPoints =
-                failingValidateReferenceBasesData.length +
-                        failingValidateRSIDsData.length +
-                        failingValidateAlternateAllelesData.length +
-                        failingValidateChromosomeCountsData.length;
-
-        // create the data provider structure for this extra strict test
-        final Object[][] extraStrictData = new Object[numDataPoints][];
-
-        int testNum = 0;
-        for (final Object[] testRefBases : failingValidateReferenceBasesData) {
-            final VariantContext vc = (VariantContext) testRefBases[0];
-            final Allele refAllele = (Allele) testRefBases[1];
-            final Allele allele = (Allele) testRefBases[2];
-
-            // for this test, rsIds does not matter, so we hold it constant
-            extraStrictData[testNum++] = new Object[]{vc, refAllele, allele, null};
-        }
-
-        for (final Object[] testRsIDs : failingValidateRSIDsData) {
-            final VariantContext vc = (VariantContext) testRsIDs[0];
-            final Set<String> rsIDs = (Set<String>) testRsIDs[1];
-
-            // for this test, reportedReference and observedReference does not matter,
-            // so we hold it constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, rsIDs};
-        }
-
-        for (final Object[] testAlternateAlleles : failingValidateAlternateAllelesData) {
-            final VariantContext vc = (VariantContext) testAlternateAlleles[0];
-
-            // for this test, only VariantContext is used, so we hold
-            // reportedReference, observedReference and rsIds constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, null};
-        }
-
-        for (final Object[] testChromomeCounts : failingValidateChromosomeCountsData) {
-            final VariantContext vc = (VariantContext) testChromomeCounts[0];
-
-            // for this test, only VariantContext is used, so we hold
-            // reportedReference, observedReference and rsIds constant
-            extraStrictData[testNum++] = new Object[]{vc, Tref, T, null};
-        }
-
-        return extraStrictData;
-    }
-    @Test(dataProvider = "testExtraStrictValidationFailureDataProvider", expectedExceptions = TribbleException.class)
-    public void testExtraStrictValidationFailure(final VariantContext vc, final Allele reportedReference, final Allele observedReference, final Set<String> rsIDs) {
-        // extraStrictValidation throws exceptions if it fails, so no Asserts here...
-        vc.extraStrictValidation(reportedReference, observedReference, rsIDs);
-    }
-    
-    
-    @DataProvider(name = "structuralVariationsTestData")
-    public Object[][] getStructuralVariationsTestData() {
-        return new Object[][] {
-         {new File("src/test/resources/htsjdk/variant/structuralvariants.vcf")}
-        };
-    }
-    
-    @Test(dataProvider = "structuralVariationsTestData")
-    public void testExtractStructuralVariationsData(final File vcfFile) {
-        VCFFileReader reader = null;
-        CloseableIterator<VariantContext> iter = null;
-        try {
-            reader = new VCFFileReader(vcfFile , false );
-            iter = reader.iterator();
-            while(iter.hasNext()) {
-                final VariantContext ctx = iter.next();
-                final StructuralVariantType st = ctx.getStructuralVariantType();
-                Assert.assertNotNull(st);
-            }
-        } finally {
-            CloserUtil.close(iter);
-            CloserUtil.close(reader);
-        }
-    }
-
-    @Test
-    public void testGetAttributeAsIntList() {
-        final VariantContext context = basicBuilder
-                .attribute("Empty", new int[0])
-                .attribute("DefaultIntegerList", new int[5])
-                .attribute("ListWithMissing", new Object[]{1, null, null})
-                .attribute("IntegerList", new int[]{0, 1, 2, 3})
-                .attribute("DoubleList", new double[]{1.8, 1.6, 2.1})
-                .attribute("StringList", new String[]{"1", "2"})
-                .attribute("NotNumeric", new String[]{"A", "B"})
-                .make();
-        // test an empty value
-        Assert.assertTrue(context.getAttributeAsIntList("Empty", 5).isEmpty());
-        // test as integer
-        Assert.assertEquals(context.getAttributeAsIntList("DefaultIntegerList", 5), Arrays.asList(0, 0, 0, 0, 0));
-        Assert.assertEquals(context.getAttributeAsIntList("ListWithMissing", 5), Arrays.asList(1, 5, 5));
-        Assert.assertEquals(context.getAttributeAsIntList("IntegerList", 5), Arrays.asList(0, 1, 2, 3));
-        Assert.assertEquals(context.getAttributeAsIntList("DoubleList", 5), Arrays.asList(1, 1, 2));
-        Assert.assertEquals(context.getAttributeAsIntList("StringList", 5), Arrays.asList(1, 2));
-        Assert.assertThrows(() -> context.getAttributeAsIntList("NotNumeric", 5));
-        // test the case of a missing key
-        Assert.assertTrue(context.getAttributeAsIntList("MissingList", 5).isEmpty());
-    }
-
-    @Test
-    public void testGetAttributeAsDoubleList() {
-        final VariantContext context = basicBuilder
-                .attribute("Empty", new int[0])
-                .attribute("DefaultIntegerList", new int[5])
-                .attribute("ListWithMissing", new Object[]{1, null, null})
-                .attribute("IntegerList", new int[]{0, 1, 2, 3})
-                .attribute("DoubleList", new double[]{1.8, 1.6, 2.1})
-                .attribute("StringList", new String[]{"1", "2"})
-                .attribute("NotNumeric", new String[]{"A", "B"})
-                .make();
-        // test an empty value
-        Assert.assertTrue(context.getAttributeAsDoubleList("Empty", 5).isEmpty());
-        // test as double
-        Assert.assertEquals(context.getAttributeAsDoubleList("DefaultIntegerList", 5), Arrays.asList(0d, 0d, 0d, 0d, 0d));
-        Assert.assertEquals(context.getAttributeAsDoubleList("ListWithMissing", 5), Arrays.asList(1d, 5d, 5d));
-        Assert.assertEquals(context.getAttributeAsDoubleList("IntegerList", 5), Arrays.asList(0d, 1d, 2d, 3d));
-        Assert.assertEquals(context.getAttributeAsDoubleList("DoubleList", 5), Arrays.asList(1.8, 1.6, 2.1));
-        Assert.assertEquals(context.getAttributeAsDoubleList("StringList", 5), Arrays.asList(1d, 2d));
-        Assert.assertThrows(() -> context.getAttributeAsDoubleList("NotNumeric", 5));
-        // test the case of a missing key
-        Assert.assertTrue(context.getAttributeAsDoubleList("MissingList", 5).isEmpty());
-    }
-
-    @Test
-    public void testGetAttributeAsStringList() {
-        final VariantContext context = basicBuilder
-                .attribute("Empty", new int[0])
-                .attribute("DefaultIntegerList", new int[5])
-                .attribute("ListWithMissing", new Object[]{1, null, null})
-                .attribute("IntegerList", new int[]{0, 1, 2, 3})
-                .attribute("DoubleList", new double[]{1.8, 1.6, 2.1})
-                .attribute("StringList", new String[]{"1", "2"})
-                .attribute("NotNumeric", new String[]{"A", "B"})
-                .make();
-        // test an empty value
-        Assert.assertTrue(context.getAttributeAsStringList("Empty", "empty").isEmpty());
-        // test as string
-        Assert.assertEquals(context.getAttributeAsStringList("DefaultIntegerList", "empty"), Arrays.asList("0", "0", "0", "0", "0"));
-        Assert.assertEquals(context.getAttributeAsStringList("ListWithMissing", "empty"), Arrays.asList("1", "empty", "empty"));
-        Assert.assertEquals(context.getAttributeAsStringList("IntegerList", "empty"), Arrays.asList("0", "1", "2", "3"));
-        Assert.assertEquals(context.getAttributeAsStringList("DoubleList", "empty"), Arrays.asList("1.8", "1.6", "2.1"));
-        Assert.assertEquals(context.getAttributeAsStringList("StringList", "empty"), Arrays.asList("1", "2"));
-        Assert.assertEquals(context.getAttributeAsStringList("NotNumeric", "empty"), Arrays.asList("A", "B"));
-        // test the case of a missing key
-        Assert.assertTrue(context.getAttributeAsStringList("MissingList", "empty").isEmpty());
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/VariantJEXLContextUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/VariantJEXLContextUnitTest.java
deleted file mode 100644
index 78bf565..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/VariantJEXLContextUnitTest.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext;
-
-import htsjdk.tribble.SimpleFeature;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.VariantContextUtils.JexlVCMatchExp;
-
-import htsjdk.variant.vcf.VCFConstants;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-
-/**
- * 
- * @author aaron
- * @author bimber
- * @author hyq
- *
- *
- * Test out parts of the VariantJEXLContext and GenotypeJEXLContext
- */
-public class VariantJEXLContextUnitTest extends VariantBaseTest {
-
-    private static final VariantContextUtils.JexlVCMatchExp exp
-            = new VariantContextUtils.JexlVCMatchExp("name", VariantContextUtils.engine.get().createExpression("QUAL > 500.0"));
-
-    private static final JexlVCMatchExp missingValueExpression = new VariantContextUtils.JexlVCMatchExp(
-            "Zis10", VariantContextUtils.engine.get().createExpression("Z==10"));
-
-
-    // SNP alleles: A[ref]/T[alt] at chr1:10. One (crappy) sample, one (bare minimum) VC.
-    private static final SimpleFeature eventLoc = new SimpleFeature("chr1", 10, 10);
-    private static final Allele Aref = Allele.create("A", true);
-    private static final Allele Talt = Allele.create("T");
-    private static final Genotype gt = new GenotypeBuilder("DummySample", Arrays.asList(Aref, Talt))
-                                            .phased(false)
-                                            .DP(2)
-                                            .noGQ()
-                                            .noAD()
-                                            .noPL()
-                                            .filter("lowDP")
-                                            .attribute("WA", "whatEver")
-                                            .make();
-    private static final VariantContext vc = new VariantContextBuilder("test", eventLoc.getContig(), eventLoc.getStart(), eventLoc.getEnd(), Arrays.asList(Aref, Talt))
-                                                .genotypes(gt)
-                                                .noID()
-                                                .filter("q10")
-                                                .attribute("attr", "notEmpty")
-                                                .make();
-
-    //////////////////////// testing JEXLMap ////////////////////////
-    @Test
-    public void testGetValue() {
-        final Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap = getJEXLMap();
-
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 1);
-
-        // eval our known expression
-        Assert.assertTrue(!jexlMap.get(exp));
-    }
-
-    @Test(dataProvider = "getMissingValueTestData")
-    public void testMissingBehaviorThroughMatch(VariantContext vc, JexlMissingValueTreatment missingValueTreatment, boolean expected, Class<? extends Exception> expectedException){
-        if(expectedException == null) {
-            Assert.assertEquals(VariantContextUtils.match(vc, null, missingValueExpression, missingValueTreatment), expected);
-        } else {
-            Assert.assertThrows(expectedException, () -> VariantContextUtils.match(vc, null, missingValueExpression, missingValueTreatment));
-        }
-    }
-
-    @Test(dataProvider = "getMissingValueTestData")
-    public void testMissingBehavior(VariantContext vc, JexlMissingValueTreatment missingValueTreatment, boolean expected, Class<? extends Exception> expectedException){
-        final JEXLMap jexlMap = new JEXLMap(Collections.singletonList(missingValueExpression), vc, null, missingValueTreatment);
-        if(expectedException == null) {
-            Assert.assertEquals((boolean) jexlMap.get(missingValueExpression), expected);
-        } else {
-            Assert.assertThrows(expectedException, () -> jexlMap.get(missingValueExpression));
-        }
-    }
-
-    @DataProvider
-    public Object[][] getMissingValueTestData(){
-        final List<Allele> alleles = Arrays.asList(Aref, Talt);
-        VariantContextBuilder vcb = new VariantContextBuilder("test", "chr1", 10, 10, alleles);
-        VariantContext noZ = vcb.make();
-        VariantContext hasZ = vcb.attribute("Z", 0).make();
-
-        return new Object[][]{
-                {noZ, JEXLMap.DEFAULT_MISSING_VALUE_TREATMENT, false, null},
-                {hasZ, JEXLMap.DEFAULT_MISSING_VALUE_TREATMENT, false, null}, //the value isn't missing but the expression is false
-                {noZ, JexlMissingValueTreatment.TREAT_AS_MATCH, true, null},
-                {hasZ, JexlMissingValueTreatment.TREAT_AS_MATCH, false, null}, //the value isn't missing but the expression is false
-                {noZ, JexlMissingValueTreatment.TREAT_AS_MISMATCH, false, null},
-                {hasZ, JexlMissingValueTreatment.TREAT_AS_MISMATCH, false, null},
-                {noZ, JexlMissingValueTreatment.THROW, false, IllegalArgumentException.class},
-                {hasZ, JexlMissingValueTreatment.THROW, false, null}
-        };
-    }
-
-    // Testing the new 'FT' and 'isPassFT' expressions in the JEXL map
-    @Test
-    public void testJEXLGenotypeFilters() {
-    	
-    	final JexlVCMatchExp passFlag = new VariantContextUtils.JexlVCMatchExp(
-    			"passFlag", VariantContextUtils.engine.get().createExpression("isPassFT==1"));
-    	final JexlVCMatchExp passFT = new VariantContextUtils.JexlVCMatchExp(
-    			"FTPASS", VariantContextUtils.engine.get().createExpression("FT==\"PASS\""));
-    	final JexlVCMatchExp failFT = new VariantContextUtils.JexlVCMatchExp(
-    			"FTBadCall", VariantContextUtils.engine.get().createExpression("FT==\"BadCall\""));
-        final JexlVCMatchExp AD1 = new VariantContextUtils.JexlVCMatchExp(
-                "AD1", VariantContextUtils.engine.get().createExpression("g.hasAD() && g.getAD().0==1"));
-        final JexlVCMatchExp AD2 = new VariantContextUtils.JexlVCMatchExp(
-                "AD2", VariantContextUtils.engine.get().createExpression("g.hasAD() && g.getAD().1==2"));
-
-    	final List<JexlVCMatchExp> jexlTests = Arrays.asList(passFlag, passFT, failFT, AD1, AD2);
-
-    	final List<Allele> alleles = Arrays.asList(Aref, Talt);
-    	final VariantContextBuilder vcb = new VariantContextBuilder("test", "chr1", 10, 10, alleles);
-        final VariantContext vcPass = vcb.filters("PASS").make();
-        final VariantContext vcFail = vcb.filters("BadVariant").make();
-        final GenotypeBuilder gb = new GenotypeBuilder("SAMPLE", alleles);
-
-        final Genotype genoNull = gb.make();
-        final Genotype genoPass = gb.filters("PASS").AD(new int[]{1,2}).DP(3).make();
-        final Genotype genoFail = gb.filters("BadCall").AD(null).DP(0).make();
-
-        Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap;
-
-        // Create the JEXL Maps using the combinations above of vc* and geno*
-        jexlMap = new JEXLMap(jexlTests, vcPass, genoPass);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertTrue(jexlMap.get(passFlag));
-        Assert.assertTrue(jexlMap.get(passFT));
-        Assert.assertFalse(jexlMap.get(failFT));
-        Assert.assertTrue(jexlMap.get(AD1));
-        Assert.assertTrue(jexlMap.get(AD2));
-
-        jexlMap = new JEXLMap(jexlTests, vcPass, genoFail);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertFalse(jexlMap.get(passFlag));
-        Assert.assertFalse(jexlMap.get(passFT));
-        Assert.assertTrue(jexlMap.get(failFT));
-        Assert.assertFalse(jexlMap.get(AD1));
-        Assert.assertFalse(jexlMap.get(AD2));
-
-        // Null genotype filter is equivalent to explicit "FT==PASS"
-        jexlMap = new JEXLMap(jexlTests, vcPass, genoNull);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertTrue(jexlMap.get(passFlag));
-        Assert.assertTrue(jexlMap.get(passFT));
-        Assert.assertFalse(jexlMap.get(failFT));
-        Assert.assertFalse(jexlMap.get(AD1));
-        Assert.assertFalse(jexlMap.get(AD2));
-        
-        // Variant-level filters should have no effect here
-        jexlMap = new JEXLMap(jexlTests, vcFail, genoPass);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertTrue(jexlMap.get(passFlag));
-        Assert.assertTrue(jexlMap.get(passFT));
-        Assert.assertFalse(jexlMap.get(failFT));
-        
-        jexlMap = new JEXLMap(jexlTests, vcFail, genoFail);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertFalse(jexlMap.get(passFlag));
-        Assert.assertFalse(jexlMap.get(passFT));
-        Assert.assertTrue(jexlMap.get(failFT));
-        
-        jexlMap = new JEXLMap(jexlTests, vcFail, genoNull);
-        // make sure the context has a value
-        Assert.assertTrue(!jexlMap.isEmpty());
-        Assert.assertEquals(jexlMap.size(), 5);
-        Assert.assertTrue(jexlMap.get(passFlag));
-        Assert.assertTrue(jexlMap.get(passFT));
-        Assert.assertFalse(jexlMap.get(failFT));
-    }
-
-    @Test(expectedExceptions=UnsupportedOperationException.class)
-    public void testContainsValue() {
-        final Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap = getJEXLMap();
-
-        jexlMap.containsValue(exp);
-    }
-
-    @Test(expectedExceptions=UnsupportedOperationException.class)
-    public void testRemove() {
-        final Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap = getJEXLMap();
-
-        jexlMap.remove(exp);
-    }
-
-    @Test(expectedExceptions=UnsupportedOperationException.class)
-    public void testEntrySet() {
-        final Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap = getJEXLMap();
-
-        jexlMap.entrySet();
-    }
-
-    @Test(expectedExceptions=UnsupportedOperationException.class)
-    public void testClear() {
-        final Map<VariantContextUtils.JexlVCMatchExp, Boolean> jexlMap = getJEXLMap();
-
-        jexlMap.clear();
-    }
-
-    /**
-     * @return a JEXLMap for use by actual tests
-     */
-    private JEXLMap getJEXLMap() {
-        return new JEXLMap(Collections.singletonList(exp), vc);
-    }
-
-    //////////////////////// testing GenotypeJEXLContext and its base VariantJEXLContext ////////////////////////
-
-    /**
-     * Test the various if-else cases in {@link GenotypeJEXLContext#get(String)} and {@link VariantJEXLContext#get(String)}
-     * {@link GenotypeJEXLContext#has(String)} is not tested because it simply checks if get() will return null.
-     */
-    @Test
-    public void testVariantJEXLContextGetMethod() {
-
-        final VariantJEXLContext jEXLContext = getJEXLContext();
-
-        // This is not tested because there's no simple test for equality for VariantContext,
-        // except exhaustive attributes testing, which is what happening below.
-//        Assert.assertEquals(jEXLContext.get("vc"), new VariantContextBuilder("test", "chr1", 10, 10, Arrays.asList(Aref, Talt)).make());
-
-        // GenotypeJEXLContext
-        Assert.assertTrue( ((Genotype) jEXLContext.get("g")).sameGenotype(gt, false));
-        Assert.assertEquals(jEXLContext.get("isHom"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get("isHomRef"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get("isHomVar"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get("isHet"), VariantJEXLContext.true_string);
-        Assert.assertEquals(jEXLContext.get("isCalled"), VariantJEXLContext.true_string);
-        Assert.assertEquals(jEXLContext.get("isNoCall"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get("isMixed"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get("isAvailable"), VariantJEXLContext.true_string);
-        Assert.assertEquals(jEXLContext.get("isPassFT"), VariantJEXLContext.false_string);
-        Assert.assertEquals(jEXLContext.get(VCFConstants.GENOTYPE_KEY), gt.getGenotypeString());
-        Assert.assertEquals(jEXLContext.get(VCFConstants.GENOTYPE_FILTER_KEY),"lowDP");
-        Assert.assertEquals(jEXLContext.get(VCFConstants.GENOTYPE_QUALITY_KEY),Integer.valueOf(VCFConstants.MISSING_GENOTYPE_QUALITY_v3));
-        Assert.assertEquals(jEXLContext.get("WA"),"whatEver"); // hasAnyAttribute->getAnyAttribute
-        Assert.assertEquals(jEXLContext.get("lowDP"),VariantJEXLContext.true_string); // getFilters()!=null
-
-        // VariantJEXLContext
-        Assert.assertEquals(jEXLContext.get("CHROM"), eventLoc.getContig());
-        Assert.assertEquals(jEXLContext.get("POS"), eventLoc.getStart());
-        Assert.assertEquals(jEXLContext.get("TYPE"), VariantContext.Type.SNP.name());
-        Assert.assertEquals(jEXLContext.get("QUAL"), -10.0); // because of noGQ() when building the genotype
-        Assert.assertEquals(jEXLContext.get("ALLELES"), vc.getAlleles());
-        Assert.assertEquals(jEXLContext.get("N_ALLELES"), vc.getNAlleles());
-        Assert.assertEquals(jEXLContext.get("FILTER"), VariantJEXLContext.true_string);
-        Assert.assertEquals(jEXLContext.get("homRefCount"), 0);
-        Assert.assertEquals(jEXLContext.get("homVarCount"), 0);
-        Assert.assertEquals(jEXLContext.get("hetCount"), 1);
-        Assert.assertEquals(jEXLContext.get("attr"), "notEmpty"); // hasAnyAttribute->getAnyAttribute
-        Assert.assertEquals(jEXLContext.get("q10"), VariantJEXLContext.true_string); // getFilters()!=null
-
-        // all if-else fall through
-        Assert.assertNull(jEXLContext.get("mustBeNull"));
-    }
-
-    @Test(expectedExceptions=UnsupportedOperationException.class)
-    public void testVariantJEXLContextSetMethodException(){
-        getJEXLContext().set("noMatterWhat", "willBlowup");
-    }
-
-    /**
-     * @return a GenotypeJEXLContext for use by actual tests
-     */
-    private VariantJEXLContext getJEXLContext(){
-        return new GenotypeJEXLContext(vc, gt);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/AllFailFilter.java b/src/test/java/htsjdk/variant/variantcontext/filter/AllFailFilter.java
deleted file mode 100644
index d62e146..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/AllFailFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- *  A trivial filter (always false) that can be used in testing
- *
- *  @author Yossi Farjoun
- */
-public class AllFailFilter implements VariantContextFilter {
-
-    /* @return false so that all VCs are filtered out. */
-    @Override
-    public boolean test(final VariantContext record) {
-
-        return false;
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/AllPassFilter.java b/src/test/java/htsjdk/variant/variantcontext/filter/AllPassFilter.java
deleted file mode 100644
index b29aa51..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/AllPassFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-
-/**
- *  A trivial filter (always true) that can be used in testing
- *
- *  @author Yossi Farjoun
- */
-public class AllPassFilter implements VariantContextFilter {
-
-    /* @return true so that all VCs are kept. */
-    @Override
-    public boolean test(final VariantContext record) {
-
-        return true;
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/CompoundFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/CompoundFilterTest.java
deleted file mode 100644
index 0a49853..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/CompoundFilterTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Created by farjoun on 9/9/15.
- */
-public class CompoundFilterTest {
-
-    static AllPassFilter pass = new AllPassFilter();
-    static AllFailFilter fail = new AllFailFilter();
-
-    static Allele refA = Allele.create("A", true);
-    static Allele G = Allele.create("G", false);
-
-    static VariantContext vc = new VariantContextBuilder("dummy", "chr1", 1, 1, Arrays.asList(refA, G)).make();
-
-    @DataProvider
-    Iterator<Object[]> testCompoundFilterProvider() {
-        final List<Object[]> filters = new ArrayList<Object[]>(10);
-
-        // requireAll = TRUE
-        { // all pass
-            final CompoundFilter compoundFilter = new CompoundFilter(true);
-            compoundFilter.add(pass);
-            compoundFilter.add(pass);
-            compoundFilter.add(pass);
-            filters.add(new Object[]{compoundFilter, true});
-        }
-        { // one fail
-            final CompoundFilter compoundFilter = new CompoundFilter(true);
-            compoundFilter.add(pass);
-            compoundFilter.add(fail);
-            compoundFilter.add(pass);
-            filters.add(new Object[]{compoundFilter, false});
-        }
-        { // empty
-            final CompoundFilter compoundFilter = new CompoundFilter(true);
-            filters.add(new Object[]{compoundFilter, true});
-        }
-
-        //requireAll = FALSE
-        { // all fail
-            final CompoundFilter compoundFilter = new CompoundFilter(false);
-            compoundFilter.add(fail);
-            compoundFilter.add(fail);
-            compoundFilter.add(fail);
-            filters.add(new Object[]{compoundFilter, false});
-        }
-        { // one fail
-            final CompoundFilter compoundFilter = new CompoundFilter(false);
-            compoundFilter.add(pass);
-            compoundFilter.add(fail);
-            compoundFilter.add(pass);
-            filters.add(new Object[]{compoundFilter, true});
-        }
-        { // empty
-            final CompoundFilter compoundFilter = new CompoundFilter(false);
-            filters.add(new Object[]{compoundFilter, true});
-        }
-        return filters.iterator();
-    }
-
-    @Test(dataProvider = "testCompoundFilterProvider")
-    public void testCompoundFilter(final VariantContextFilter filter, final boolean shouldPass) {
-        Assert.assertEquals(filter.test(vc), shouldPass, filter.toString());
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIteratorTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIteratorTest.java
deleted file mode 100644
index d8decfd..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/FilteringVariantContextIteratorTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Tests for testing the (VariantContext)FilteringVariantContextIterator, and the HeterozygosityFilter
- */
-
-public class FilteringVariantContextIteratorTest {
-    final File testDir = new File("src/test/resources/htsjdk/variant");
-
-    @DataProvider
-    public Object [][] filteringIteratorData() {
-        return new Object[][] {
-                {new HeterozygosityFilter(true, "NA00001"), 2},
-                {new HeterozygosityFilter(false, "NA00001"), 3},
-                {new HeterozygosityFilter(true, null), 2},
-                {new HeterozygosityFilter(false, null), 3},
-                {new AllPassFilter(), 5},
-                {new HeterozygosityFilter(true, "NA00002"), 4},
-                {new HeterozygosityFilter(false, "NA00002"), 1},
-        };
-    }
-
-    @Test(dataProvider = "filteringIteratorData")
-    public void testFilteringIterator(final VariantContextFilter filter, final int expectedCount) {
-
-        final File vcf = new File(testDir,"ex2.vcf");
-        final VCFFileReader vcfReader = new VCFFileReader(vcf, false);
-        final FilteringVariantContextIterator filteringIterator = new FilteringVariantContextIterator(vcfReader.iterator(), filter);
-        int count = 0;
-
-        for(final VariantContext vc : filteringIterator) {
-            count++;
-        }
-
-        Assert.assertEquals(count, expectedCount);
-    }
-
-    @DataProvider
-    public Object [][] badSampleData() {
-        return new Object[][] {
-                {"ex2.vcf", "DOES_NOT_EXIST"},
-                {"breakpoint.vcf", null},
-        };
-    }
-
-    @Test(dataProvider = "badSampleData", expectedExceptions = IllegalArgumentException.class)
-    public void testMissingSample(final String file, final String sample) {
-
-        final File vcf = new File(testDir, file);
-        final VCFFileReader vcfReader = new VCFFileReader(vcf, false);
-        final HeterozygosityFilter heterozygosityFilter = new HeterozygosityFilter(true, sample);
-
-        new FilteringVariantContextIterator(vcfReader.iterator(), heterozygosityFilter).next();
-    }
-}
-
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilterTest.java
deleted file mode 100644
index 809133f..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/GenotypeQualityFilterTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-public class GenotypeQualityFilterTest {
-
-    Allele refA = Allele.create("A", true);
-    Allele G = Allele.create("G", false);
-
-    @DataProvider
-    public Iterator<Object[]> genotypeProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Arrays.asList(refA, G));
-        final GenotypeBuilder gt_builder = new GenotypeBuilder("test").alleles(Arrays.asList(refA, G));
-        final List<Object[]> variants = new ArrayList<Object[]>(10);
-
-        //without gq
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.make()).make(), null, false});
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.make()).make(), "test", false});
-
-        //without sample
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ( 1).make()).make(), null, false});
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ(10).make()).make(), null, true});
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ(20).make()).make(), null, true});
-
-        //with sample
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ( 1).make()).make(), "test", false});
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ(10).make()).make(), "test", true});
-        variants.add(new Object[]{vc_builder.genotypes(gt_builder.GQ(20).make()).make(), "test", true});
-
-        return variants.iterator();
-    }
-
-    @Test(dataProvider = "genotypeProvider")
-    public void testHetFilter(final VariantContext vc, final String sample, final boolean shouldPass) {
-        final GenotypeQualityFilter gqFilter = getFilter(sample);
-
-        Assert.assertEquals(gqFilter.test(vc), shouldPass, vc.toString());
-    }
-
-    @DataProvider(name = "badSamplesProvider")
-    public Iterator<Object[]> badSamplesProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Arrays.asList(refA, G));
-        final GenotypeBuilder gt_builder = new GenotypeBuilder();
-        final List<Object[]> hets = new ArrayList<Object[]>(10);
-
-        hets.add(new Object[]{vc_builder.make(), null});
-        hets.add(new Object[]{vc_builder.genotypes(Arrays.asList(gt_builder.name("test1").make(), gt_builder.name("test2").make())).make(), "notNull"});
-        hets.add(new Object[]{vc_builder.genotypes(Collections.singleton(gt_builder.name("This").make())).make(), "That"});
-
-        return hets.iterator();
-    }
-
-    @Test(dataProvider = "badSamplesProvider", expectedExceptions = IllegalArgumentException.class)
-    public void testbadSample(final VariantContext vc, final String sample) {
-        final GenotypeQualityFilter gqFilter = getFilter(sample);
-
-        //should fail
-        gqFilter.test(vc);
-    }
-
-    private GenotypeQualityFilter getFilter(String sample){
-        if (sample == null) {
-            return new GenotypeQualityFilter(10);
-        } else {
-            return new GenotypeQualityFilter(10, sample);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilterTest.java
deleted file mode 100644
index b4cd3a8..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/HeterozygosityFilterTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-public class HeterozygosityFilterTest {
-
-    Allele refA = Allele.create("A", true);
-    Allele G = Allele.create("G", false);
-
-    @DataProvider(name = "Hets")
-    public Iterator<Object[]> hetsProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Arrays.asList(refA, G));
-        final GenotypeBuilder gt_builder = new GenotypeBuilder("test");
-        final List<Object[]> hets = new ArrayList<Object[]>(10);
-
-        hets.add(new Object[]{vc_builder.genotypes(gt_builder.alleles(Arrays.asList(refA, G)).make()).make(), null, true});
-        hets.add(new Object[]{vc_builder.genotypes(gt_builder.alleles(Arrays.asList(refA, G)).make()).make(), "test", true});
-
-        //non-variant
-        hets.add(new Object[]{vc_builder.genotypes(gt_builder.alleles(Collections.singletonList(refA)).make()).make(), "test", false});
-        hets.add(new Object[]{vc_builder.genotypes(gt_builder.alleles(Collections.singletonList(refA)).make()).make(), null, false});
-
-        return hets.iterator();
-    }
-
-    @Test(dataProvider = "Hets")
-    public void testHetFilter(final VariantContext vc, final String sample, final boolean shouldPass) {
-        final HeterozygosityFilter hf = getFilter(shouldPass, sample);
-
-        Assert.assertTrue(hf.test(vc));
-    }
-
-    @DataProvider(name = "badSamplesProvider")
-    public Iterator<Object[]> badSamplesProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Arrays.asList(refA, G));
-        final GenotypeBuilder gt_builder = new GenotypeBuilder();
-        final List<Object[]> hets = new ArrayList<Object[]>(10);
-
-        hets.add(new Object[]{vc_builder.make(), null});
-        hets.add(new Object[]{vc_builder.genotypes(Arrays.asList(gt_builder.name("test1").make(), gt_builder.name("test2").make())).make(), "notNull"});
-        hets.add(new Object[]{vc_builder.genotypes(Collections.singleton(gt_builder.name("This").make())).make(), "That"});
-
-        return hets.iterator();
-    }
-
-    @Test(dataProvider = "badSamplesProvider", expectedExceptions = IllegalArgumentException.class)
-    public void testbadSample(final VariantContext vc, final String sample) {
-        final HeterozygosityFilter hf = getFilter(true, sample);
-
-        //should fail
-        hf.test(vc);
-    }
-
-    @DataProvider(name = "variantsProvider")
-    public Object[][] variantsProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Arrays.asList(refA, G));
-        final GenotypeBuilder gt_builder = new GenotypeBuilder("test");
-        final List<VariantContext> vcs = new ArrayList<VariantContext>(10);
-
-        //hets:
-        vcs.add(vc_builder.genotypes(gt_builder.alleles(Arrays.asList(refA, G)).make()).make());
-        vcs.add(vc_builder.loc("chr1", 10, 10).genotypes(gt_builder.alleles(Arrays.asList(refA, G)).make()).make());
-
-        //non-variant:
-        vcs.add(vc_builder.loc("chr1", 20, 20).genotypes(gt_builder.alleles(Collections.singletonList(refA)).make()).make());
-        vcs.add(vc_builder.loc("chr1", 30, 30).genotypes(gt_builder.alleles(Collections.singletonList(refA)).make()).make());
-
-        return new Object[][]{new Object[]{vcs.iterator(), new int[]{1, 10}}};
-    }
-
-    @Test(dataProvider = "variantsProvider")
-    public void testFilteringIterator(final Iterator<VariantContext> vcs, final int[] passingPositions) {
-        final Iterator<VariantContext> filteringIterator = new FilteringVariantContextIterator(vcs, new HeterozygosityFilter(true, "test"));
-
-        int i = 0;
-        while (filteringIterator.hasNext()) {
-            final VariantContext vc = filteringIterator.next();
-            Assert.assertTrue(i < passingPositions.length);
-            Assert.assertEquals(vc.getStart(), passingPositions[i++]);
-        }
-    }
-
-    private HeterozygosityFilter getFilter(final boolean shouldPass, String sample) {
-        if (sample == null) {
-            return new HeterozygosityFilter(shouldPass);
-        } else {
-            return new HeterozygosityFilter(shouldPass, sample);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilterTest.java
deleted file mode 100644
index 3993b79..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/JavascriptVariantFilterTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2015 Pierre Lindenbaum @yokofakun Institut du Thorax - Nantes - France
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.vcf.VCFFileReader;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * @author Pierre Lindenbaum PhD Institut du Thorax - INSERM - Nantes - France
- */
-
-public class JavascriptVariantFilterTest {
-    final File testDir = new File("src/test/resources/htsjdk/variant");
-
-    @DataProvider
-    public Object[][] jsData() {
-        return new Object[][] {
-                { "ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf", "variantFilter01.js",61 },
-                { "ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf", "variantFilter02.js",38 }, };
-    }
-
-    @Test(dataProvider = "jsData")
-    public void testJavascriptFilters(final String vcfFile, final String javascriptFile, final int expectCount) {
-        final File vcfInput = new File(testDir, vcfFile);
-        final File jsInput = new File(testDir, javascriptFile);
-        final VCFFileReader vcfReader = new VCFFileReader(vcfInput, false);
-        final JavascriptVariantFilter filter;
-        try {
-            filter = new JavascriptVariantFilter(jsInput, vcfReader.getFileHeader());
-        } catch (IOException err) {
-            Assert.fail("cannot read script "+jsInput, err);
-            vcfReader.close();
-            return;
-        }
-        final FilteringVariantContextIterator iter = new FilteringVariantContextIterator(vcfReader.iterator(), filter);
-        int count = 0;
-        while (iter.hasNext()) {
-            iter.next();
-            ++count;
-        }
-        iter.close();
-        vcfReader.close();
-        Assert.assertEquals(count, expectCount, "Expected number of variants " + expectCount + " but got " + count);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/PassingVariantFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/PassingVariantFilterTest.java
deleted file mode 100644
index 3cbb60c..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/PassingVariantFilterTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Created by farjoun on 9/10/15.
- */
-public class PassingVariantFilterTest {
-    Allele refA = Allele.create("A", true);
-    Allele G = Allele.create("G", false);
-
-    @DataProvider()
-    public Iterator<Object[]> variantProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("test", "chr1", 1, 1, Arrays.asList(refA, G));
-        final List<Object[]> variants = new ArrayList<Object[]>(10);
-
-        // unfiltered
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G)).make(), true});
-        // passing
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G)).passFilters().make(), true});
-
-        // failing
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G)).filters(Collections.singleton("FILTER")).make(), false});
-
-        return variants.iterator();
-    }
-
-    @Test(dataProvider = "variantProvider")
-    public void testPassingVariantFilter(final VariantContext vc, final boolean shouldPass) {
-        final PassingVariantFilter passingVariantFilter = new PassingVariantFilter();
-
-        Assert.assertEquals(passingVariantFilter.test(vc), shouldPass, vc.toString());
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/variantcontext/filter/SnpFilterTest.java b/src/test/java/htsjdk/variant/variantcontext/filter/SnpFilterTest.java
deleted file mode 100644
index 74f1bb5..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/filter/SnpFilterTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package htsjdk.variant.variantcontext.filter;
-
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Created by farjoun on 9/9/15.
- */
-public class SnpFilterTest {
-    Allele refA = Allele.create("A", true);
-    Allele refAG = Allele.create("AG", true);
-
-    Allele G = Allele.create("G", false);
-    Allele T = Allele.create("T", false);
-    Allele AG = Allele.create("AG", false);
-    Allele AT = Allele.create("AT", false);
-    Allele star = Allele.create("<*>", false);
-
-
-    @DataProvider()
-    public Iterator<Object[]> variantProvider() {
-
-        final VariantContextBuilder vc_builder = new VariantContextBuilder("testCode", "chr1", 1, 1, Collections.<Allele>emptyList());
-        final List<Object[]> variants = new ArrayList<Object[]>(10);
-
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G))         .make(), true});    // SNP
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G, T))      .make(), true});    // SNP
-
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, AG))         .make(), false}); // INDEL
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, G, AG))      .make(), false}); // MIXED
-        variants.add(new Object[]{vc_builder.alleles(Arrays.asList(refA, star))       .make(), false}); // SYMBOLIC
-        variants.add(new Object[]{vc_builder.stop(2).alleles(Arrays.asList(refAG, T)) .make(), false}); // INDEL
-        variants.add(new Object[]{vc_builder.stop(2).alleles(Arrays.asList(refAG, AT)).make(), false}); // MNP
-
-        return variants.iterator();
-    }
-
-    @Test(dataProvider = "variantProvider")
-    public void testSnpFilter(final VariantContext vc, final boolean shouldPass) {
-        final SnpFilter snpFilter = new SnpFilter();
-
-        Assert.assertEquals(snpFilter.test(vc), shouldPass, vc.toString());
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java b/src/test/java/htsjdk/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java
deleted file mode 100644
index 2fd1520..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * 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.
- */
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.CloseableTribbleIterator;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.index.tabix.TabixIndex;
-import htsjdk.tribble.util.TabixUtils;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.vcf.VCF3Codec;
-import htsjdk.variant.vcf.VCFHeader;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.EnumSet;
-
-public class TabixOnTheFlyIndexCreationTest {
-    private static final File SMALL_VCF = new File("src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz");
-    @Test
-    public void simpleTest() throws Exception {
-        final VCF3Codec codec = new VCF3Codec();
-        final FeatureReader<VariantContext> reader = AbstractFeatureReader.getFeatureReader(SMALL_VCF.getAbsolutePath(), codec, false);
-        final VCFHeader headerFromFile = (VCFHeader)reader.getHeader();
-        final File vcf = File.createTempFile("TabixOnTheFlyIndexCreationTest.", ".vcf.gz");
-        final File tabix = new File(vcf.getAbsolutePath() + TabixUtils.STANDARD_INDEX_EXTENSION);
-        vcf.deleteOnExit();
-        tabix.deleteOnExit();
-        final VariantContextWriter vcfWriter = new VariantContextWriterBuilder()
-                .setOutputFile(vcf)
-                .setReferenceDictionary(headerFromFile.getSequenceDictionary())
-                .setOptions(EnumSet.of(Options.INDEX_ON_THE_FLY, Options.ALLOW_MISSING_FIELDS_IN_HEADER))
-                .build();
-        vcfWriter.writeHeader(headerFromFile);
-        final CloseableTribbleIterator<VariantContext> it = reader.iterator();
-        while (it.hasNext()) {
-            vcfWriter.add(it.next());
-        }
-        it.close();
-        vcfWriter.close();
-
-        // Hard to validate, so just confirm that index can be read.
-        new TabixIndex(tabix);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/writer/VCFWriterUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/writer/VCFWriterUnitTest.java
deleted file mode 100644
index eaf2f95..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/writer/VCFWriterUnitTest.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.TestUtil;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.FeatureReader;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.util.TabixUtils;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.Genotype;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.GenotypesContext;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFFileReader;
-import htsjdk.variant.vcf.VCFHeader;
-import htsjdk.variant.vcf.VCFHeaderLine;
-import htsjdk.variant.vcf.VCFHeaderVersion;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * @author aaron
- *         <p/>
- *         Class VCFWriterUnitTest
- *         <p/>
- *         This class tests out the ability of the VCF writer to correctly write VCF files
- */
-public class VCFWriterUnitTest extends VariantBaseTest {
-    private Set<VCFHeaderLine> metaData;
-    private Set<String> additionalColumns;
-    private File tempDir;
-
-    @BeforeClass
-    private void createTemporaryDirectory() {
-        tempDir = TestUtil.getTempDirectory("VCFWriter", "StaleIndex");
-    }
-
-    @AfterClass
-    private void deleteTemporaryDirectory() {
-        for (File f : tempDir.listFiles()) {
-            f.delete();
-        }
-        tempDir.delete();
-    }
-
-    /** test, using the writer and reader, that we can output and input a VCF file without problems */
-    @Test(dataProvider = "vcfExtensionsDataProvider")
-    public void testBasicWriteAndRead(final String extension) throws IOException {
-        final File fakeVCFFile = File.createTempFile("testBasicWriteAndRead.", extension);
-        fakeVCFFile.deleteOnExit();
-        if (".vcf.gz".equals(extension)) {
-            new File(fakeVCFFile.getAbsolutePath() + ".tbi").deleteOnExit();
-        } else {
-            Tribble.indexFile(fakeVCFFile).deleteOnExit();
-        }
-        metaData = new HashSet<VCFHeaderLine>();
-        additionalColumns = new HashSet<String>();
-        final SAMSequenceDictionary sequenceDict = createArtificialSequenceDictionary();
-        final VCFHeader header = createFakeHeader(metaData, additionalColumns, sequenceDict);
-        final VariantContextWriter writer = new VariantContextWriterBuilder()
-                .setOutputFile(fakeVCFFile)
-                .setReferenceDictionary(sequenceDict)
-                .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
-                .build();
-        writer.writeHeader(header);
-        writer.add(createVC(header));
-        writer.add(createVC(header));
-        writer.close();
-        final VCFCodec codec = new VCFCodec();
-        final FeatureReader<VariantContext> reader = AbstractFeatureReader.getFeatureReader(fakeVCFFile.getAbsolutePath(), codec, false);
-        final VCFHeader headerFromFile = (VCFHeader)reader.getHeader();
-
-        int counter = 0;
-
-        // validate what we're reading in
-        validateHeader(headerFromFile, sequenceDict);
-        
-        try {
-            final Iterator<VariantContext> it = reader.iterator();
-            while(it.hasNext()) {
-                it.next();
-                counter++;
-            }
-            Assert.assertEquals(counter, 2);
-        }
-        catch (final IOException e ) {
-            throw new RuntimeException(e.getMessage());
-        }
-
-    }
-
-    /**
-     * create a fake header of known quantity
-     * @param metaData           the header lines
-     * @param additionalColumns  the additional column names
-     * @return a fake VCF header
-     */
-    public static VCFHeader createFakeHeader(final Set<VCFHeaderLine> metaData, final Set<String> additionalColumns,
-                                             final SAMSequenceDictionary sequenceDict) {
-        metaData.add(new VCFHeaderLine(VCFHeaderVersion.VCF4_0.getFormatString(), VCFHeaderVersion.VCF4_0.getVersionString()));
-        metaData.add(new VCFHeaderLine("two", "2"));
-        additionalColumns.add("extra1");
-        additionalColumns.add("extra2");
-        final VCFHeader ret = new VCFHeader(metaData, additionalColumns);
-        ret.setSequenceDictionary(sequenceDict);
-        return ret;
-    }
-
-    /**
-     * create a fake VCF record
-     * @param header the VCF header
-     * @return a VCFRecord
-     */
-    private VariantContext createVC(final VCFHeader header) {
-
-       return createVCGeneral(header,"1",1);
-    }
-
-    private VariantContext createVCGeneral(final VCFHeader header, final String chrom, final int position) {
-        final List<Allele> alleles = new ArrayList<Allele>();
-        final Map<String, Object> attributes = new HashMap<String,Object>();
-        final GenotypesContext genotypes = GenotypesContext.create(header.getGenotypeSamples().size());
-
-        alleles.add(Allele.create("A",true));
-        alleles.add(Allele.create("ACC",false));
-
-        attributes.put("DP","50");
-        for (final String name : header.getGenotypeSamples()) {
-            final Genotype gt = new GenotypeBuilder(name,alleles.subList(1,2)).GQ(0).attribute("BB", "1").phased(true).make();
-            genotypes.add(gt);
-        }
-        return new VariantContextBuilder("RANDOM", chrom, position, position, alleles)
-                .genotypes(genotypes).attributes(attributes).make();
-    }
-
-
-    /**
-     * validate a VCF header
-     * @param header the header to validate
-     */
-    public void validateHeader(final VCFHeader header, final SAMSequenceDictionary sequenceDictionary) {
-        // check the fields
-        int index = 0;
-        for (final VCFHeader.HEADER_FIELDS field : header.getHeaderFields()) {
-            Assert.assertEquals(VCFHeader.HEADER_FIELDS.values()[index], field);
-            index++;
-        }
-        Assert.assertEquals(header.getMetaDataInSortedOrder().size(), metaData.size() + sequenceDictionary.size());
-        index = 0;
-        for (final String key : header.getGenotypeSamples()) {
-            Assert.assertTrue(additionalColumns.contains(key));
-            index++;
-        }
-        Assert.assertEquals(index, additionalColumns.size());
-    }
-
-    @Test(dataProvider = "vcfExtensionsDataProvider")
-    public void TestWritingLargeVCF(final String extension) throws FileNotFoundException, InterruptedException {
-
-        final Set<VCFHeaderLine> metaData = new HashSet<VCFHeaderLine>();
-        final Set<String> Columns = new HashSet<String>();
-        for (int i = 0; i < 123; i++) {
-
-            Columns.add(String.format("SAMPLE_%d", i));
-        }
-
-        final SAMSequenceDictionary dict = createArtificialSequenceDictionary();
-        final VCFHeader header = createFakeHeader(metaData,Columns, dict);
-
-        final File vcf = new File(tempDir, "test" + extension);
-        final String indexExtension;
-        if (extension.equals(".vcf.gz")) {
-            indexExtension = TabixUtils.STANDARD_INDEX_EXTENSION;
-        } else {
-            indexExtension = Tribble.STANDARD_INDEX_EXTENSION;
-        }
-        final File vcfIndex = new File(vcf.getAbsolutePath() + indexExtension);
-        vcfIndex.deleteOnExit();
-
-        for(int count=1;count<2; count++){
-            final VariantContextWriter writer =  new VariantContextWriterBuilder()
-                    .setOutputFile(vcf)
-                    .setReferenceDictionary(dict)
-                    .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
-                    .build();
-            writer.writeHeader(header);
-
-            for (int i = 1; i < 17 ; i++) { // write 17 chromosomes
-                for (int j = 1; j < 10; j++) { //10 records each
-                    writer.add(createVCGeneral(header, String.format("%d", i), j * 100));
-                }
-            }
-            writer.close();
-
-            Assert.assertTrue(vcf.lastModified() <= vcfIndex.lastModified());
-        }
-    }
-
-    @DataProvider(name = "vcfExtensionsDataProvider")
-    public Object[][]vcfExtensionsDataProvider() {
-        return new Object[][] {
-                // TODO: BCF doesn't work because header is not properly constructed.
-                // {".bcf"},
-                {".vcf"},
-                {".vcf.gz"}
-        };
-    }
-
-
-    /**
-     * A test to ensure that if we add a line to a VCFHeader it will persist through
-     * a round-trip write/read cycle via VariantContextWriter/VCFFileReader
-     */
-    @Test
-    public void testModifyHeader() {
-        final File originalVCF = new File("src/test/resources/htsjdk/variant/HiSeq.10000.vcf");
-        final VCFFileReader reader = new VCFFileReader(originalVCF, false);
-        final VCFHeader header = reader.getFileHeader();
-        reader.close();
-
-        header.addMetaDataLine(new VCFHeaderLine("FOOBAR", "foovalue"));
-
-        final File outputVCF = createTempFile("testModifyHeader", ".vcf");
-        final VariantContextWriter writer = new VariantContextWriterBuilder().setOutputFile(outputVCF).setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER)).build();
-        writer.writeHeader(header);
-        writer.close();
-
-        final VCFFileReader roundtripReader = new VCFFileReader(outputVCF, false);
-        final VCFHeader roundtripHeader = roundtripReader.getFileHeader();
-        roundtripReader.close();
-
-        Assert.assertNotNull(roundtripHeader.getOtherHeaderLine("FOOBAR"), "Could not find FOOBAR header line after a write/read cycle");
-        Assert.assertEquals(roundtripHeader.getOtherHeaderLine("FOOBAR").getValue(), "foovalue", "Wrong value for FOOBAR header line after a write/read cycle");
-    }
-}
-
diff --git a/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java
deleted file mode 100644
index 179c4cb..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
-* Copyright (c) 2014 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-import htsjdk.samtools.Defaults;
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.samtools.util.BlockCompressedOutputStream;
-import htsjdk.samtools.util.RuntimeIOException;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.util.TabixUtils;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder.OutputType;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-
-public class VariantContextWriterBuilderUnitTest extends VariantBaseTest {
-	private static final String TEST_BASENAME = "htsjdk-test.VariantContextWriterBuilderUnitTest";
-    private SAMSequenceDictionary dictionary;
-
-    private File vcf;
-    private File vcfIdx;
-    private File vcfMD5;
-    private File bcf;
-    private File bcfIdx;
-    private File unknown;
-
-    private List<File> blockCompressedVCFs;
-    private List<File> blockCompressedIndices;
-
-    @BeforeSuite
-    public void before() throws IOException {
-        dictionary = createArtificialSequenceDictionary();
-        vcf = File.createTempFile(TEST_BASENAME, ".vcf");
-        vcf.deleteOnExit();
-        vcfIdx = Tribble.indexFile(vcf);
-        vcfIdx.deleteOnExit();
-        vcfMD5 = new File(vcf.getAbsolutePath() + ".md5");
-        vcfMD5.deleteOnExit();
-        bcf = File.createTempFile(TEST_BASENAME, ".bcf");
-        bcf.deleteOnExit();
-        bcfIdx = Tribble.indexFile(bcf);
-        bcfIdx.deleteOnExit();
-        unknown = File.createTempFile(TEST_BASENAME, ".unknown");
-        unknown.deleteOnExit();
-
-        blockCompressedVCFs = new ArrayList<File>();
-        blockCompressedIndices = new ArrayList<File>();
-        for (final String extension : AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) {
-            final File blockCompressed = File.createTempFile(TEST_BASENAME, ".vcf" + extension);
-            blockCompressed.deleteOnExit();
-            blockCompressedVCFs.add(blockCompressed);
-
-            final File index = new File(blockCompressed.getAbsolutePath() + TabixUtils.STANDARD_INDEX_EXTENSION);
-            index.deleteOnExit();
-            blockCompressedIndices.add(index);
-        }
-    }
-
-    @Test
-    public void testSetOutputFile() throws IOException {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary);
-
-        VariantContextWriter writer = builder.setOutputFile(vcf.getAbsolutePath()).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile VCF String");
-        Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile VCF String was compressed");
-
-        writer = builder.setOutputFile(vcf).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile VCF File");
-        Assert.assertFalse(((VCFWriter)writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile VCF File was compressed");
-
-        for (final String extension : AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) {
-            final File file = File.createTempFile(TEST_BASENAME + ".setoutput", extension);
-            file.deleteOnExit();
-            final String filename = file.getAbsolutePath();
-
-            writer = builder.setOutputFile(filename).build();
-            Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile " + extension + " String");
-            Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile " + extension + " String was not compressed");
-
-            writer = builder.setOutputFile(file).build();
-            Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile " + extension + " File");
-            Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile " + extension + " File was not compressed");
-        }
-
-        writer = builder.setOutputFile(bcf).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFile BCF String");
-
-        writer = builder.setOutputFile(bcf.getAbsolutePath()).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFile BCF File");
-    }
-
-    @Test
-    public void testDetermineOutputType() {
-        Assert.assertEquals(OutputType.VCF, VariantContextWriterBuilder.determineOutputTypeFromFile(this.vcf));
-        Assert.assertEquals(OutputType.BCF, VariantContextWriterBuilder.determineOutputTypeFromFile(this.bcf));
-        Assert.assertEquals(OutputType.VCF_STREAM, VariantContextWriterBuilder.determineOutputTypeFromFile(new File("/dev/stdout")));
-        for (final File f: this.blockCompressedVCFs) {
-            Assert.assertEquals(OutputType.BLOCK_COMPRESSED_VCF, VariantContextWriterBuilder.determineOutputTypeFromFile(f));
-        }
-
-        // Test symlinking
-        try {
-            final Path link = Files.createTempFile("foo.", ".tmp");
-            Files.deleteIfExists(link);
-            Files.createSymbolicLink(link, this.vcf.toPath());
-            link.toFile().deleteOnExit();
-            Assert.assertEquals(OutputType.VCF, VariantContextWriterBuilder.determineOutputTypeFromFile(link.toFile()));
-            link.toFile().delete();
-        }
-        catch (final IOException ioe) {
-            throw new RuntimeIOException(ioe);
-        }
-    }
-
-    @Test
-    public void testSetOutputFileType() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile(unknown);
-
-        VariantContextWriter writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType VCF");
-        Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType VCF was compressed");
-
-        writer = builder.setOption(Options.FORCE_BCF).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set -> expected BCF, was VCF");
-
-        // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF
-        writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set 2 -> expected BCF, was VCF");
-
-        writer = builder.unsetOption(Options.FORCE_BCF).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType FORCE_BCF unset -> expected VCF, was BCF");
-        Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType FORCE_BCF unset was compressed");
-
-        writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BLOCK_COMPRESSED_VCF).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile BLOCK_COMPRESSED_VCF");
-        Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType BLOCK_COMPRESSED_VCF was not compressed");
-
-        writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BCF).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType BCF");
-    }
-
-    @Test
-    public void testSetOutputStream() {
-        final OutputStream stream = new ByteArrayOutputStream();
-
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .unsetOption(Options.INDEX_ON_THE_FLY)
-                .setOutputStream(stream);
-
-        VariantContextWriter writer = builder.build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream default");
-
-        writer = builder.setOption(Options.FORCE_BCF).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set -> expected BCF stream, was VCF stream");
-
-        // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF
-        writer = builder.setOutputVCFStream(stream).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set 2 -> expected BCF stream, was VCF stream");
-
-        writer = builder.unsetOption(Options.FORCE_BCF).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream FORCE_BCF unset -> expected VCF stream, was BCF stream");
-
-        writer = builder.setOutputBCFStream(stream).build();
-        Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream BCF");
-
-        writer = builder.setOutputVCFStream(stream).build();
-        Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream VCF");
-    }
-
-    @Test
-    public void testAsync() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile(vcf);
-
-        VariantContextWriter writer = builder.build();
-        Assert.assertEquals(writer instanceof AsyncVariantContextWriter, Defaults.USE_ASYNC_IO_WRITE_FOR_TRIBBLE, "testAsync default");
-
-        writer = builder.setOption(Options.USE_ASYNC_IO).build();
-        Assert.assertTrue(writer instanceof AsyncVariantContextWriter, "testAsync option=set");
-
-        writer = builder.unsetOption(Options.USE_ASYNC_IO).build();
-        Assert.assertFalse(writer instanceof AsyncVariantContextWriter, "testAsync option=unset");
-    }
-
-    @Test
-    public void testBuffering() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile(vcf)
-                .unsetOption(Options.INDEX_ON_THE_FLY);     // so the potential BufferedOutputStream is not wrapped in a PositionalOutputStream
-
-        VariantContextWriter writer = builder.build();
-        Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was not buffered by default");
-
-        writer = builder.unsetBuffering().build();
-        Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was buffered when unset");
-
-        writer = builder.setBuffer(8192).build();
-        Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was not buffered when set");
-    }
-
-    @Test
-    public void testMD5() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile(vcf);
-
-        VariantContextWriter writer = builder.build();
-        writer.close();
-        Assert.assertEquals(vcfMD5.exists(), Defaults.CREATE_MD5, "MD5 default setting not respected");
-
-        if (vcfMD5.exists())
-            vcfMD5.delete();
-
-        writer = builder.setCreateMD5().build();
-        writer.close();
-        Assert.assertTrue(vcfMD5.exists(), "MD5 not created when requested");
-        vcfMD5.delete();
-
-        writer = builder.unsetCreateMD5().build();
-        writer.close();
-        Assert.assertFalse(vcfMD5.exists(), "MD5 created when not requested");
-
-        writer = builder.setCreateMD5(false).build();
-        writer.close();
-        Assert.assertFalse(vcfMD5.exists(), "MD5 created when not requested via boolean parameter");
-
-        writer = builder.setCreateMD5(true).build();
-        writer.close();
-        Assert.assertTrue(vcfMD5.exists(), "MD5 not created when requested via boolean parameter");
-        vcfMD5.delete();
-
-        for (final File blockCompressed : blockCompressedVCFs) {
-            final File md5 = new File(blockCompressed + ".md5");
-            if (md5.exists())
-                md5.delete();
-            md5.deleteOnExit();
-            writer = builder.setOutputFile(blockCompressed).build();
-            writer.close();
-            Assert.assertTrue(md5.exists(), "MD5 digest not created for " + blockCompressed);
-        }
-    }
-
-    @Test
-    public void testIndexingOnTheFly() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOption(Options.INDEX_ON_THE_FLY);
-
-        if (vcfIdx.exists())
-            vcfIdx.delete();
-        VariantContextWriter writer = builder.setOutputFile(vcf).build();
-        writer.close();
-        Assert.assertTrue(vcfIdx.exists(), String.format("VCF index not created for %s / %s", vcf, vcfIdx));
-
-        if (bcfIdx.exists())
-            bcfIdx.delete();
-        writer = builder.setOutputFile(bcf).build();
-        writer.close();
-        Assert.assertTrue(bcfIdx.exists(), String.format("BCF index not created for %s / %s", bcf, bcfIdx));
-
-        for (int i = 0; i < blockCompressedVCFs.size(); i++) {
-            final File blockCompressed = blockCompressedVCFs.get(i);
-            final File index = blockCompressedIndices.get(i);
-            if (index.exists())
-                index.delete();
-            writer = builder.setOutputFile(blockCompressed).setReferenceDictionary(dictionary).build();
-            writer.close();
-            Assert.assertTrue(index.exists(), String.format("Block-compressed index not created for %s / %s", blockCompressed, index));
-
-            // Tabix does not require a reference dictionary.
-            // Tribble does: see tests testRefDictRequiredForVCFIndexOnTheFly / testRefDictRequiredForBCFIndexOnTheFly
-
-            index.delete();
-            writer = builder.setReferenceDictionary(null).build();
-            writer.close();
-            Assert.assertTrue(index.exists(), String.format("Block-compressed index not created for %s / %s", blockCompressed, index));
-        }
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testInvalidImplicitFileType() {
-        new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile("test.bam")
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testSetInvalidFileType() {
-        new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputFile("test.bam")
-                .setOutputFileType(VariantContextWriterBuilder.OutputType.VCF_STREAM)
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testInvalidSetFileTypeForStream() {
-        new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputStream(new ByteArrayOutputStream())
-                .setOutputFileType(VariantContextWriterBuilder.OutputType.VCF)
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testUnsupportedIndexOnTheFlyForStreaming() {
-        new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputStream(new ByteArrayOutputStream())
-                .setOption(Options.INDEX_ON_THE_FLY)
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testUnsupportedDefaultIndexOnTheFlyForStreaming() {
-        new VariantContextWriterBuilder()
-                .setReferenceDictionary(dictionary)
-                .setOutputStream(new ByteArrayOutputStream())
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testRefDictRequiredForVCFIndexOnTheFly() {
-        new VariantContextWriterBuilder()
-                .setOutputFile(vcf)
-                .setOption(Options.INDEX_ON_THE_FLY)
-                .build();
-    }
-
-    @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testRefDictRequiredForBCFIndexOnTheFly() {
-        new VariantContextWriterBuilder()
-                .setOutputFile(bcf)
-                .setOption(Options.INDEX_ON_THE_FLY)
-                .build();
-    }
-
-    @Test
-    public void testClearOptions() {
-        // Verify that clearOptions doesn't have a side effect of carrying previously set options
-        // forward to subsequent builders
-        VariantContextWriterBuilder vcwb = new VariantContextWriterBuilder();
-        vcwb.clearOptions().setOption(Options.INDEX_ON_THE_FLY);
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder().clearOptions();
-        Assert.assertTrue(builder.options.isEmpty());
-    }
-
-    @Test
-    public void testModifyOption() {
-        final VariantContextWriterBuilder builder = new VariantContextWriterBuilder().clearOptions();
-        for (final Options option : Options.values()) {
-            Assert.assertFalse(builder.isOptionSet(option)); // shouldn't be set
-            builder.modifyOption(option, false);
-            Assert.assertFalse(builder.isOptionSet(option)); // still shouldn't be set
-            builder.modifyOption(option, true);
-            Assert.assertTrue(builder.isOptionSet(option)); // now is set
-            builder.modifyOption(option, false);
-            Assert.assertFalse(builder.isOptionSet(option)); // has been unset
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWritersUnitTest.java b/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWritersUnitTest.java
deleted file mode 100644
index 3782965..0000000
--- a/src/test/java/htsjdk/variant/variantcontext/writer/VariantContextWritersUnitTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.variantcontext.writer;
-
-
-// the imports for unit testing.
-
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.bcf2.BCF2Codec;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextTestProvider;
-import htsjdk.variant.vcf.VCFCodec;
-import htsjdk.variant.vcf.VCFHeader;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.List;
-
-
-public class VariantContextWritersUnitTest extends VariantBaseTest {
-    private SAMSequenceDictionary dictionary;
-
-    @BeforeSuite
-    public void before() throws IOException {
-        dictionary = createArtificialSequenceDictionary();
-        VariantContextTestProvider.initializeTests();
-    }
-
-    @DataProvider(name = "VariantContextTest_SingleContexts")
-    public Object[][] SiteVCsTest() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-        for ( VariantContextTestProvider.VariantContextTestData testData : VariantContextTestProvider.generateSiteTests() )
-            tests.add(new Object[]{testData});
-        return tests.toArray(new Object[][]{});
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test BCF2 reader / writer
-    //
-    // --------------------------------------------------------------------------------
-
-    @Test(dataProvider = "VariantContextTest_SingleContexts")
-    public void testBCF2WriterReader(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
-        VariantContextTestProvider.testReaderWriter(new BCFIOTester(), testData);
-    }
-
-    @Test(dataProvider = "VariantContextTest_SingleContexts")
-    public void testBCF2WriterReaderMissingGenotypes(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
-        VariantContextTestProvider.testReaderWriterWithMissingGenotypes(new BCFIOTester(), testData);
-    }
-
-    private class BCFIOTester extends VariantContextTestProvider.VariantContextIOTest<BCF2Codec> {
-        @Override
-        public String getExtension() {
-            return ".bcf";
-        }
-
-        @Override
-        public BCF2Codec makeCodec() {
-            return new BCF2Codec();
-        }
-
-        @Override
-        public VariantContextWriter makeWriter(final File file, final EnumSet<Options> baseOptions) {
-            return new VariantContextWriterBuilder()
-                    .setOutputFile(file)
-                    .setReferenceDictionary(dictionary)
-                    .setOptions(baseOptions)
-                    .build();
-        }
-
-        @Override
-        public VariantContextTestProvider.VariantContextContainer readAllVCs(File input) throws IOException {
-            final BCF2Codec codec = this.makeCodec();
-            return VariantContextTestProvider.readAllVCs(input, codec);
-        }
-    }
-
-    // --------------------------------------------------------------------------------
-    //
-    // Test VCF reader / writer
-    //
-    // --------------------------------------------------------------------------------
-
-    @Test(enabled = true, dataProvider = "VariantContextTest_SingleContexts")
-    public void testVCF4WriterReader(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
-        VariantContextTestProvider.testReaderWriter(new VCFIOTester(), testData);
-    }
-
-    @Test(enabled = true, dataProvider = "VariantContextTest_SingleContexts")
-    public void testVCF4WriterReaderMissingGenotypes(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
-        VariantContextTestProvider.testReaderWriterWithMissingGenotypes(new VCFIOTester(), testData);
-    }
-
-    private class VCFIOTester extends VariantContextTestProvider.VariantContextIOTest<VCFCodec> {
-        @Override
-        public String getExtension() {
-            return ".vcf";
-        }
-
-        @Override
-        public List<VariantContext> postprocess(final VCFHeader header, final List<VariantContext> vcsAfterIO) {
-            final List<VariantContext> fullyDecoded = new ArrayList<VariantContext>(vcsAfterIO.size());
-
-            for ( final VariantContext withStrings : vcsAfterIO )
-                fullyDecoded.add(withStrings.fullyDecode(header, false));
-
-            return fullyDecoded;
-        }
-
-        @Override
-        public VCFCodec makeCodec() {
-            return new VCFCodec();
-        }
-
-        @Override
-        public VariantContextWriter makeWriter(final File file, final EnumSet<Options> baseOptions) {
-            return new VariantContextWriterBuilder()
-                    .setOutputFile(file)
-                    .setReferenceDictionary(dictionary)
-                    .setOptions(baseOptions)
-                    .build();
-        }
-
-        @Override
-        public VariantContextTestProvider.VariantContextContainer readAllVCs(File input) throws FileNotFoundException {
-            final VCFCodec codec = this.makeCodec();
-            return VariantContextTestProvider.readAllVCs(input, codec);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/htsjdk/variant/vcf/AbstractVCFCodecTest.java b/src/test/java/htsjdk/variant/vcf/AbstractVCFCodecTest.java
deleted file mode 100644
index 9f81547..0000000
--- a/src/test/java/htsjdk/variant/vcf/AbstractVCFCodecTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.index.tabix.TabixFormat;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.VariantContext;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.List;
-
-
-
-public class AbstractVCFCodecTest extends VariantBaseTest {
-
-	@Test
-	public void shouldPreserveSymbolicAlleleCase() {
-		VCFFileReader reader = new VCFFileReader(new File(VariantBaseTest.variantTestDataRoot + "breakpoint.vcf"), false);
-		VariantContext variant = reader.iterator().next();
-		reader.close();
-		
-		// VCF v4.1 s1.4.5
-		// Tools processing VCF files are not required to preserve case in the allele String, except for IDs, which are case sensitive.
-		Assert.assertTrue(variant.getAlternateAllele(0).getDisplayString().contains("chr12"));
-	}
-
-	@Test
-	public void TestSpanDelParseAlleles(){
-		List<Allele> list = VCF3Codec.parseAlleles("A", Allele.SPAN_DEL_STRING, 0);
-	}
-
-	@Test(expectedExceptions = TribbleException.class)
-	public void TestSpanDelParseAllelesException(){
-		List<Allele> list1 = VCF3Codec.parseAlleles(Allele.SPAN_DEL_STRING, "A", 0);
-	}
-
-	@DataProvider(name="thingsToTryToDecode")
-	public Object[][] getThingsToTryToDecode(){
-		return new Object[][] {
-				{"src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf", true},
-				{"src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz", true},
-				{"src/test/resources/htsjdk/tribble/nonexistant.garbage", false},
-				{"src/test/resources/htsjdk/tribble/testIntervalList.list", false}
-		};
-	}
-
-	@Test(dataProvider = "thingsToTryToDecode")
-	public void testCanDecodeFile(String potentialInput, boolean canDecode) {
-		Assert.assertEquals(AbstractVCFCodec.canDecodeFile(potentialInput, VCFCodec.VCF4_MAGIC_HEADER), canDecode);
-	}
-
-	@Test
-	public void testGetTabixFormat() {
-		Assert.assertEquals(new VCFCodec().getTabixFormat(), TabixFormat.VCF);
-		Assert.assertEquals(new VCF3Codec().getTabixFormat(), TabixFormat.VCF);
-	}
-}
diff --git a/src/test/java/htsjdk/variant/vcf/IndexFactoryUnitTest.java b/src/test/java/htsjdk/variant/vcf/IndexFactoryUnitTest.java
deleted file mode 100644
index 9d084f3..0000000
--- a/src/test/java/htsjdk/variant/vcf/IndexFactoryUnitTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.SAMSequenceDictionary;
-import htsjdk.tribble.AbstractFeatureReader;
-import htsjdk.tribble.CloseableTribbleIterator;
-import htsjdk.tribble.Tribble;
-import htsjdk.tribble.index.Index;
-import htsjdk.tribble.index.IndexFactory;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.writer.Options;
-import htsjdk.variant.variantcontext.writer.VariantContextWriter;
-import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.EnumSet;
-
-/**
- * tests out the various functions in the index factory class
- */
-public class IndexFactoryUnitTest extends VariantBaseTest {
-
-    File inputFile = new File(variantTestDataRoot + "HiSeq.10000.vcf");
-    File outputFile = createTempFile("onTheFlyOutputTest", ".vcf");
-    File outputFileIndex = Tribble.indexFile(outputFile);
-
-    private SAMSequenceDictionary dict;
-
-    @BeforeTest
-    public void setup() {
-        dict = createArtificialSequenceDictionary();
-    }
-
-    //
-    // test out scoring the indexes
-    //
-    @Test
-    public void testOnTheFlyIndexing1() throws IOException {
-        final Index indexFromInputFile = IndexFactory.createDynamicIndex(inputFile, new VCFCodec());
-        if ( outputFileIndex.exists() ) {
-            System.err.println("Deleting " + outputFileIndex);
-            outputFileIndex.delete();
-        }
-
-        for ( int maxRecords : Arrays.asList(0, 1, 10, 100, 1000, -1)) {
-            final AbstractFeatureReader source = AbstractFeatureReader.getFeatureReader(inputFile.getAbsolutePath(), new VCFCodec(), indexFromInputFile);
-
-            int counter = 0;
-            VariantContextWriter writer = new VariantContextWriterBuilder()
-                    .setOutputFile(outputFile)
-                    .setReferenceDictionary(dict)
-                    .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER))
-                    .build();
-            writer.writeHeader((VCFHeader)source.getHeader());
-            CloseableTribbleIterator<VariantContext> it = source.iterator();
-            while (it.hasNext() && (counter++ < maxRecords || maxRecords == -1) ) {
-                VariantContext vc = it.next();
-                writer.add(vc);
-            }
-            writer.close();
-
-            // test that the input index is the same as the one created from the identical input file
-            // test that the dynamic index is the same as the output index, which is equal to the input index
-            //WalkerTest.assertOnDiskIndexEqualToNewlyCreatedIndex(outputFileIndex, "unittest", outputFile);
-        }
-    }
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFCompoundHeaderLineUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFCompoundHeaderLineUnitTest.java
deleted file mode 100644
index fe19fc5..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFCompoundHeaderLineUnitTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-
-/**
- * User: ebanks
- * Date: Apr 2, 2014
- */
-public class VCFCompoundHeaderLineUnitTest extends VariantBaseTest {
-
-    @Test
-    public void supportsVersionFields() {
-	final String line = "<ID=FOO,Number=1,Type=Float,Description=\"foo\",Version=3>";
-	final VCFCompoundHeaderLine headerline = new VCFInfoHeaderLine(line, VCFHeaderVersion.VCF4_2);
-	// if we don't support version fields then we should fail before we ever get here
-	Assert.assertTrue(true);
-    }
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFEncoderTest.java b/src/test/java/htsjdk/variant/vcf/VCFEncoderTest.java
deleted file mode 100644
index 2c4ff0f..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFEncoderTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.util.ParsingUtils;
-import htsjdk.variant.variantcontext.Allele;
-import htsjdk.variant.variantcontext.GenotypeBuilder;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.VariantContextBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-public class VCFEncoderTest {
-
-	@DataProvider(name = "VCFWriterDoubleFormatTestData")
-	public Object[][] makeVCFWriterDoubleFormatTestData() {
-		final List<Object[]> tests = new ArrayList<Object[]>();
-		tests.add(new Object[]{1.0, "1.00"});
-		tests.add(new Object[]{10.1, "10.10"});
-		tests.add(new Object[]{10.01, "10.01"});
-		tests.add(new Object[]{10.012, "10.01"});
-		tests.add(new Object[]{10.015, "10.02"});
-		tests.add(new Object[]{0.0, "0.00"});
-		tests.add(new Object[]{0.5, "0.500"});
-		tests.add(new Object[]{0.55, "0.550"});
-		tests.add(new Object[]{0.555, "0.555"});
-		tests.add(new Object[]{0.5555, "0.556"});
-		tests.add(new Object[]{0.1, "0.100"});
-		tests.add(new Object[]{0.050, "0.050"});
-		tests.add(new Object[]{0.010, "0.010"});
-		tests.add(new Object[]{0.012, "0.012"});
-		tests.add(new Object[]{0.0012, "1.200e-03"});
-		tests.add(new Object[]{1.2e-4, "1.200e-04"});
-		tests.add(new Object[]{1.21e-4, "1.210e-04"});
-		tests.add(new Object[]{1.212e-5, "1.212e-05"});
-		tests.add(new Object[]{1.2123e-6, "1.212e-06"});
-		tests.add(new Object[]{Double.POSITIVE_INFINITY, "Infinity"});
-		tests.add(new Object[]{Double.NEGATIVE_INFINITY, "-Infinity"});
-		tests.add(new Object[]{Double.NaN, "NaN"});
-		return tests.toArray(new Object[][]{});
-	}
-
-	@Test(dataProvider = "VCFWriterDoubleFormatTestData")
-	public void testVCFWriterDoubleFormatTestData(final double d, final String expected) {
-		Assert.assertEquals(VCFEncoder.formatVCFDouble(d), expected, "Failed to pretty print double in VCFWriter");
-	}
-
-    @DataProvider(name = "MissingFormatTestData")
-    public Object[][] makeMissingFormatTestData() {
-        final VCFHeader header = createSyntheticHeader(Arrays.asList("Sample1"));
-
-        final VCFEncoder dropMissing = new VCFEncoder(header, false, false);
-        final VCFEncoder keepMissing = new VCFEncoder(header, false, true);
-        final VariantContextBuilder baseVC = new VariantContextBuilder().chr("1").start(1).stop(1).noID().passFilters().log10PError(1).alleles("A", "C");
-        final GenotypeBuilder baseGT = new GenotypeBuilder("Sample1").alleles(Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-        final Map<Allele, String> alleleMap = new HashMap<Allele, String>(3);
-        final List<String> formatKeys = Arrays.asList("GT", "AA", "BB");
-        alleleMap.put(Allele.NO_CALL, VCFConstants.EMPTY_ALLELE);
-        alleleMap.put(Allele.create("A", true), "0");
-        alleleMap.put(Allele.create("C", false), "1");
-
-        final List<Object[]> tests = new ArrayList<Object[]>();
-
-        VariantContext vc = baseVC.genotypes(baseGT.attribute("AA", "a").make()).make();
-        tests.add(new Object[]{dropMissing, vc, "./.:a", alleleMap, formatKeys});
-        tests.add(new Object[]{keepMissing, vc, "./.:a:.", alleleMap, formatKeys});
-        baseGT.noAttributes();
-
-        vc = baseVC.genotypes(baseGT.attribute("AA", "a").attribute("BB", 2).make()).make();
-        tests.add(new Object[]{dropMissing, vc, "./.:a:2", alleleMap, formatKeys});
-        tests.add(new Object[]{keepMissing, vc, "./.:a:2", alleleMap, formatKeys});
-        baseGT.noAttributes();
-
-        vc = baseVC.genotypes(baseGT.make()).make();
-        tests.add(new Object[]{dropMissing, vc, "./.", alleleMap, formatKeys});
-        tests.add(new Object[]{keepMissing, vc, "./.:.:.", alleleMap, formatKeys});
-        baseGT.noAttributes();
-
-        vc = baseVC.genotypes(baseGT.attribute("BB", 2).make()).make();
-        tests.add(new Object[]{dropMissing, vc, "./.:.:2", alleleMap, formatKeys});
-        tests.add(new Object[]{keepMissing, vc, "./.:.:2", alleleMap, formatKeys});
-        baseGT.noAttributes();
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "MissingFormatTestData")
-    public void testMissingFormatFields(final VCFEncoder encoder, final VariantContext vc, final String expectedLastColumn, final Map<Allele, String> alleleMap, final List<String> genotypeFormatKeys) {
-        final StringBuilder sb = new StringBuilder();
-        final String[] columns = new String[5];
-
-        encoder.addGenotypeData(vc, alleleMap, genotypeFormatKeys, sb);
-        final int nCol = ParsingUtils.split(sb.toString(), columns, VCFConstants.FIELD_SEPARATOR_CHAR);
-        Assert.assertEquals(columns[nCol-1], expectedLastColumn, "Format fields don't handle missing data in the expected way");
-    }
-
-    private Set<VCFHeaderLine> createSyntheticMetadata() {
-        final Set<VCFHeaderLine> metaData = new TreeSet<VCFHeaderLine>();
-
-        metaData.add(new VCFContigHeaderLine(Collections.singletonMap("ID", "1"), 0));
-
-        metaData.add(new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.String, "x"));
-        metaData.add(new VCFFormatHeaderLine("AA", 1, VCFHeaderLineType.String, "aa"));
-        metaData.add(new VCFFormatHeaderLine("BB", 1, VCFHeaderLineType.Integer, "bb"));
-        return metaData;
-    }
-
-    private VCFHeader createSyntheticHeader() {
-        return new VCFHeader(createSyntheticMetadata());
-    }
-
-    private VCFHeader createSyntheticHeader(final List<String> samples) {
-        return new VCFHeader(createSyntheticMetadata(), samples);
-    }
-
-
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFHeaderLineTranslatorUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFHeaderLineTranslatorUnitTest.java
deleted file mode 100644
index 88a8cce..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFHeaderLineTranslatorUnitTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.tribble.TribbleException;
-import htsjdk.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Map;
-
-public class VCFHeaderLineTranslatorUnitTest extends VariantBaseTest {
-
-    @Test
-    public void testParseVCF4HeaderLine() {
-        // the following tests exercise the escaping of quotes and backslashes in VCF header lines
-
-        // test a case with no escapes
-        final Map<String,String> values = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=SnpCluster,Description=\"SNPs found in clusters\">", null);
-        Assert.assertEquals(values.size(), 2);
-        Assert.assertEquals(values.get("ID"), "SnpCluster");
-        Assert.assertEquals(values.get("Description"), "SNPs found in clusters");
-
-        // test escaped quotes
-        final Map<String,String> values2 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION != \\\"NA\\\" || ANNOTATION <= 0.01\">", null);
-        Assert.assertEquals(values2.size(), 2);
-        Assert.assertEquals(values2.get("ID"), "ANNOTATION");
-        Assert.assertEquals(values2.get("Description"), "ANNOTATION != \"NA\" || ANNOTATION <= 0.01");
-
-        // test escaped quotes and an escaped backslash
-        final Map<String,String> values3 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION \\\\= \\\"NA\\\" || ANNOTATION <= 0.01\">", null);
-        Assert.assertEquals(values3.size(), 2);
-        Assert.assertEquals(values3.get("ID"), "ANNOTATION");
-        Assert.assertEquals(values3.get("Description"), "ANNOTATION \\= \"NA\" || ANNOTATION <= 0.01");
-
-        // test a header line with two value tags, one with an escaped backslash and two escaped quotes, one with an escaped quote
-        final Map<String,String> values4 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION \\\\= \\\"NA\\\" || ANNOTATION <= 0.01\", Description2=\"foo\\\"bar\">", null);
-        Assert.assertEquals(values4.size(), 3);
-        Assert.assertEquals(values4.get("ID"), "ANNOTATION");
-        Assert.assertEquals(values4.get("Description"), "ANNOTATION \\= \"NA\" || ANNOTATION <= 0.01");
-        Assert.assertEquals(values4.get("Description2"), "foo\"bar");
-
-        // test a line with a backslash that appears before something other than a quote or backslash
-        final Map<String,String> values5 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION \\n with a newline in it\">", null);
-        Assert.assertEquals(values5.size(), 2);
-        Assert.assertEquals(values5.get("ID"), "ANNOTATION");
-        Assert.assertEquals(values5.get("Description"), "ANNOTATION \\n with a newline in it");
-
-        // test with an unclosed quote
-        try {
-            final Map<String, String> values6 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION \\n with a newline in it>", null);
-            Assert.fail("Should have thrown a TribbleException for having an unclosed quote in the description line");
-        } catch (TribbleException.InvalidHeader e) {
-        }
-
-        // test with an escaped quote at the end
-        try {
-            final Map<String, String> values7 = VCFHeaderLineTranslator.parseLine(VCFHeaderVersion.VCF4_2, "<ID=ANNOTATION,Description=\"ANNOTATION \\n with a newline in it\\\">", null);
-            Assert.fail("Should have thrown a TribbleException for having an unclosed quote in the description line");
-        } catch (TribbleException.InvalidHeader e) {
-        }
-
-    }
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFHeaderLineUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFHeaderLineUnitTest.java
deleted file mode 100644
index 02cde53..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFHeaderLineUnitTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package htsjdk.variant.vcf;
-
-import htsjdk.variant.VariantBaseTest;
-import org.testng.annotations.Test;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-
-public class VCFHeaderLineUnitTest extends VariantBaseTest {
-
-    @Test
-    public void testEncodeVCFHeaderLineWithUnescapedQuotes() {
-
-        final Map<String, String> attributes = new LinkedHashMap<>();
-        attributes.put("ID", "VariantFiltration");
-        attributes.put("CommandLineOptions", "filterName=[ANNOTATION] filterExpression=[ANNOTATION == \"NA\" || ANNOTATION <= 2.0]");
-
-        final String encodedAttributes = VCFHeaderLine.toStringEncoding(attributes);
-        assertNotNull(encodedAttributes);
-
-        final String expectedEncoding = "<ID=VariantFiltration,CommandLineOptions=\"filterName=[ANNOTATION] filterExpression=[ANNOTATION == \\\"NA\\\" || ANNOTATION <= 2.0]\">";
-        assertEquals(encodedAttributes, expectedEncoding);
-    }
-
-
-    @Test
-    public void testEncodeVCFHeaderLineWithEscapedQuotes() {
-
-        final Map<String, String> attributes = new LinkedHashMap<>();
-        attributes.put("ID", "VariantFiltration");
-        attributes.put("CommandLineOptions", "filterName=[ANNOTATION] filterExpression=[ANNOTATION == \\\"NA\\\" || ANNOTATION <= 2.0]");
-
-        final String encodedAttributes = VCFHeaderLine.toStringEncoding(attributes);
-        assertNotNull(encodedAttributes);
-
-        final String expectedEncoding = "<ID=VariantFiltration,CommandLineOptions=\"filterName=[ANNOTATION] filterExpression=[ANNOTATION == \\\"NA\\\" || ANNOTATION <= 2.0]\">";
-        assertEquals(encodedAttributes, expectedEncoding);
-    }
-
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java
deleted file mode 100644
index e9135cc..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.samtools.util.CloseableIterator;
-import htsjdk.samtools.util.TestUtil;
-import htsjdk.tribble.TribbleException;
-import htsjdk.tribble.readers.*;
-import htsjdk.variant.VariantBaseTest;
-import htsjdk.variant.variantcontext.VariantContext;
-import htsjdk.variant.variantcontext.writer.Options;
-import htsjdk.variant.variantcontext.writer.VariantContextWriter;
-import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by IntelliJ IDEA.
- * User: aaron
- * Date: Jun 30, 2010
- * Time: 3:32:08 PM
- * To change this template use File | Settings | File Templates.
- */
-public class VCFHeaderUnitTest extends VariantBaseTest {
-
-    private File tempDir;
-
-    private VCFHeader createHeader(String headerStr) {
-        VCFCodec codec = new VCFCodec();
-        VCFHeader header = (VCFHeader) codec.readActualHeader(new LineIteratorImpl(new SynchronousLineReader(
-                new StringReader(headerStr))));
-        Assert.assertEquals(header.getMetaDataInInputOrder().size(), VCF4headerStringCount);
-        return header;
-    }
-
-    @BeforeClass
-    private void createTemporaryDirectory() {
-        tempDir = TestUtil.getTempDirectory("VCFHeader", "VCFHeaderTest");
-    }
-
-    @AfterClass
-    private void deleteTemporaryDirectory() {
-        for (File f : tempDir.listFiles()) {
-            f.delete();
-        }
-        tempDir.delete();
-    }
-
-    @Test
-    public void testVCF4ToVCF4() {
-        VCFHeader header = createHeader(VCF4headerStrings);
-        checkMD5ofHeaderFile(header, "91c33dadb92e01ea349bd4bcdd02d6be");
-    }
-
-    @Test
-    public void testVCF4ToVCF4_alternate() {
-        VCFHeader header = createHeader(VCF4headerStrings_with_negativeOne);
-        checkMD5ofHeaderFile(header, "39318d9713897d55be5ee32a2119853f");
-    }
-
-    @Test
-    public void testVCFHeaderSampleRenamingSingleSampleVCF() throws Exception {
-        final VCFCodec codec = new VCFCodec();
-        codec.setRemappedSampleName("FOOSAMPLE");
-        final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "HiSeq.10000.vcf")));
-        final VCFHeader header = (VCFHeader) codec.readHeader(vcfIterator).getHeaderValue();
-
-        Assert.assertEquals(header.getNGenotypeSamples(), 1, "Wrong number of samples in remapped header");
-        Assert.assertEquals(header.getGenotypeSamples().get(0), "FOOSAMPLE", "Sample name in remapped header has incorrect value");
-
-        int recordCount = 0;
-        while (vcfIterator.hasNext() && recordCount < 10) {
-            recordCount++;
-            final VariantContext vcfRecord = codec.decode(vcfIterator.next());
-
-            Assert.assertEquals(vcfRecord.getSampleNames().size(), 1, "Wrong number of samples in vcf record after remapping");
-            Assert.assertEquals(vcfRecord.getSampleNames().iterator().next(), "FOOSAMPLE", "Wrong sample in vcf record after remapping");
-        }
-    }
-
-    @Test
-    public void testVCFHeaderDictionaryMerging() {
-        VCFHeader headerOne = new VCFFileReader(new File(variantTestDataRoot + "dbsnp_135.b37.1000.vcf"), false).getFileHeader();
-        VCFHeader headerTwo = new VCFHeader(headerOne); // deep copy
-        final List<String> sampleList = new ArrayList<String>();
-        sampleList.addAll(headerOne.getSampleNamesInOrder());
-
-        // Check that the two dictionaries start out the same
-        headerOne.getSequenceDictionary().assertSameDictionary(headerTwo.getSequenceDictionary());
-
-        // Run the merge command
-        final VCFHeader mergedHeader = new VCFHeader(VCFUtils.smartMergeHeaders(Arrays.asList(headerOne, headerTwo), false), sampleList);
-
-        // Check that the mergedHeader's sequence dictionary matches the first two
-        mergedHeader.getSequenceDictionary().assertSameDictionary(headerOne.getSequenceDictionary());
-    }
-
-    @Test(expectedExceptions = TribbleException.class)
-    public void testVCFHeaderSampleRenamingMultiSampleVCF() throws Exception {
-        final VCFCodec codec = new VCFCodec();
-        codec.setRemappedSampleName("FOOSAMPLE");
-        final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "ex2.vcf")));
-        final VCFHeader header = (VCFHeader) codec.readHeader(vcfIterator).getHeaderValue();
-    }
-
-    @Test(expectedExceptions = TribbleException.class)
-    public void testVCFHeaderSampleRenamingSitesOnlyVCF() throws Exception {
-        final VCFCodec codec = new VCFCodec();
-        codec.setRemappedSampleName("FOOSAMPLE");
-        final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "dbsnp_135.b37.1000.vcf")));
-        final VCFHeader header = (VCFHeader) codec.readHeader(vcfIterator).getHeaderValue();
-    }
-
-    private VCFHeader getHiSeqVCFHeader() {
-        final File vcf = new File("src/test/resources/htsjdk/variant/HiSeq.10000.vcf");
-        final VCFFileReader reader = new VCFFileReader(vcf, false);
-        final VCFHeader header = reader.getFileHeader();
-        reader.close();
-        return header;
-    }
-
-    @Test
-    public void testVCFHeaderAddInfoLine() {
-        final VCFHeader header = getHiSeqVCFHeader();
-        final VCFInfoHeaderLine infoLine = new VCFInfoHeaderLine("TestInfoLine", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "test info line");
-        header.addMetaDataLine(infoLine);
-
-        Assert.assertTrue(header.getInfoHeaderLines().contains(infoLine), "TestInfoLine not found in info header lines");
-        Assert.assertTrue(header.getMetaDataInInputOrder().contains(infoLine), "TestInfoLine not found in set of all header lines");
-        Assert.assertNotNull(header.getInfoHeaderLine("TestInfoLine"), "Lookup for TestInfoLine by key failed");
-
-        Assert.assertFalse(header.getFormatHeaderLines().contains(infoLine), "TestInfoLine present in format header lines");
-        Assert.assertFalse(header.getFilterLines().contains(infoLine), "TestInfoLine present in filter header lines");
-        Assert.assertFalse(header.getContigLines().contains(infoLine), "TestInfoLine present in contig header lines");
-        Assert.assertFalse(header.getOtherHeaderLines().contains(infoLine), "TestInfoLine present in other header lines");
-    }
-
-    @Test
-    public void testVCFHeaderAddFormatLine() {
-        final VCFHeader header = getHiSeqVCFHeader();
-        final VCFFormatHeaderLine formatLine = new VCFFormatHeaderLine("TestFormatLine", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "test format line");
-        header.addMetaDataLine(formatLine);
-
-        Assert.assertTrue(header.getFormatHeaderLines().contains(formatLine), "TestFormatLine not found in format header lines");
-        Assert.assertTrue(header.getMetaDataInInputOrder().contains(formatLine), "TestFormatLine not found in set of all header lines");
-        Assert.assertNotNull(header.getFormatHeaderLine("TestFormatLine"), "Lookup for TestFormatLine by key failed");
-
-        Assert.assertFalse(header.getInfoHeaderLines().contains(formatLine), "TestFormatLine present in info header lines");
-        Assert.assertFalse(header.getFilterLines().contains(formatLine), "TestFormatLine present in filter header lines");
-        Assert.assertFalse(header.getContigLines().contains(formatLine), "TestFormatLine present in contig header lines");
-        Assert.assertFalse(header.getOtherHeaderLines().contains(formatLine), "TestFormatLine present in other header lines");
-    }
-
-    @Test
-    public void testVCFHeaderAddFilterLine() {
-        final VCFHeader header = getHiSeqVCFHeader();
-        final String filterDesc = "TestFilterLine Description";
-        final VCFFilterHeaderLine filterLine = new VCFFilterHeaderLine("TestFilterLine",filterDesc);
-        Assert.assertEquals(filterDesc,filterLine.getDescription());
-        header.addMetaDataLine(filterLine);
-
-        Assert.assertTrue(header.getFilterLines().contains(filterLine), "TestFilterLine not found in filter header lines");
-        Assert.assertTrue(header.getMetaDataInInputOrder().contains(filterLine), "TestFilterLine not found in set of all header lines");
-        Assert.assertNotNull(header.getFilterHeaderLine("TestFilterLine"), "Lookup for TestFilterLine by key failed");
-
-        Assert.assertFalse(header.getInfoHeaderLines().contains(filterLine), "TestFilterLine present in info header lines");
-        Assert.assertFalse(header.getFormatHeaderLines().contains(filterLine), "TestFilterLine present in format header lines");
-        Assert.assertFalse(header.getContigLines().contains(filterLine), "TestFilterLine present in contig header lines");
-        Assert.assertFalse(header.getOtherHeaderLines().contains(filterLine), "TestFilterLine present in other header lines");
-    }
-
-    @Test
-    public void testVCFHeaderAddContigLine() {
-        final VCFHeader header = getHiSeqVCFHeader();
-        final VCFContigHeaderLine contigLine = new VCFContigHeaderLine("<ID=chr1,length=1234567890,assembly=FAKE,md5=f126cdf8a6e0c7f379d618ff66beb2da,species=\"Homo sapiens\">", VCFHeaderVersion.VCF4_0, "chr1", 0);
-        header.addMetaDataLine(contigLine);
-
-        Assert.assertTrue(header.getContigLines().contains(contigLine), "Test contig line not found in contig header lines");
-        Assert.assertTrue(header.getMetaDataInInputOrder().contains(contigLine), "Test contig line not found in set of all header lines");
-
-        Assert.assertFalse(header.getInfoHeaderLines().contains(contigLine), "Test contig line present in info header lines");
-        Assert.assertFalse(header.getFormatHeaderLines().contains(contigLine), "Test contig line present in format header lines");
-        Assert.assertFalse(header.getFilterLines().contains(contigLine), "Test contig line present in filter header lines");
-        Assert.assertFalse(header.getOtherHeaderLines().contains(contigLine), "Test contig line present in other header lines");
-    }
-
-    @Test
-    public void testVCFHeaderAddOtherLine() {
-        final VCFHeader header = getHiSeqVCFHeader();
-        final VCFHeaderLine otherLine = new VCFHeaderLine("TestOtherLine", "val");
-        header.addMetaDataLine(otherLine);
-
-        Assert.assertTrue(header.getOtherHeaderLines().contains(otherLine), "TestOtherLine not found in other header lines");
-        Assert.assertTrue(header.getMetaDataInInputOrder().contains(otherLine), "TestOtherLine not found in set of all header lines");
-        Assert.assertNotNull(header.getOtherHeaderLine("TestOtherLine"), "Lookup for TestOtherLine by key failed");
-
-        Assert.assertFalse(header.getInfoHeaderLines().contains(otherLine), "TestOtherLine present in info header lines");
-        Assert.assertFalse(header.getFormatHeaderLines().contains(otherLine), "TestOtherLine present in format header lines");
-        Assert.assertFalse(header.getContigLines().contains(otherLine), "TestOtherLine present in contig header lines");
-        Assert.assertFalse(header.getFilterLines().contains(otherLine), "TestOtherLine present in filter header lines");
-    }
-
-    @Test
-    public void testVCFHeaderAddMetaDataLineDoesNotDuplicateContigs() {
-        File input = new File("src/test/resources/htsjdk/variant/ex2.vcf");
-
-        VCFFileReader reader = new VCFFileReader(input, false);
-        VCFHeader header = reader.getFileHeader();
-
-        final int numContigLinesBefore = header.getContigLines().size();
-
-        VCFInfoHeaderLine newInfoField = new VCFInfoHeaderLine("test", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "test info field");
-        header.addMetaDataLine(newInfoField);
-
-        // getting the sequence dictionary was failing due to duplicating contigs in issue #214,
-        // we expect this to not throw an exception
-        header.getSequenceDictionary();
-
-        final int numContigLinesAfter = header.getContigLines().size();
-        // assert that we have the same number of contig lines before and after
-        Assert.assertEquals(numContigLinesBefore, numContigLinesAfter);
-    }
-
-    @Test
-    public void testVCFHeaderAddDuplicateContigLine() {
-        File input = new File("src/test/resources/htsjdk/variant/ex2.vcf");
-
-        VCFFileReader reader = new VCFFileReader(input, false);
-        VCFHeader header = reader.getFileHeader();
-
-
-        final int numContigLinesBefore = header.getContigLines().size();
-        // try to readd the first contig line
-        header.addMetaDataLine(header.getContigLines().get(0));
-        final int numContigLinesAfter = header.getContigLines().size();
-
-        // assert that we have the same number of contig lines before and after
-        Assert.assertEquals(numContigLinesBefore, numContigLinesAfter);
-    }
-
-    @Test
-    public void testVCFHeaderAddDuplicateHeaderLine() {
-        File input = new File("src/test/resources/htsjdk/variant/ex2.vcf");
-
-        VCFFileReader reader = new VCFFileReader(input, false);
-        VCFHeader header = reader.getFileHeader();
-
-        VCFHeaderLine newHeaderLine = new VCFHeaderLine("key", "value");
-        // add this new header line
-        header.addMetaDataLine(newHeaderLine);
-
-        final int numHeaderLinesBefore = header.getOtherHeaderLines().size();
-        // readd the same header line
-        header.addMetaDataLine(newHeaderLine);
-        final int numHeaderLinesAfter = header.getOtherHeaderLines().size();
-
-        // assert that we have the same number of other header lines before and after
-        Assert.assertEquals(numHeaderLinesBefore, numHeaderLinesAfter);
-    }
-
-    @Test
-    public void testVCFHeaderSerialization() throws Exception {
-        final VCFFileReader reader = new VCFFileReader(new File("src/test/resources/htsjdk/variant/HiSeq.10000.vcf"), false);
-        final VCFHeader originalHeader = reader.getFileHeader();
-        reader.close();
-
-        final VCFHeader deserializedHeader = TestUtil.serializeAndDeserialize(originalHeader);
-
-        Assert.assertEquals(deserializedHeader.getMetaDataInInputOrder(), originalHeader.getMetaDataInInputOrder(), "Header metadata does not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getContigLines(), originalHeader.getContigLines(), "Contig header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getFilterLines(), originalHeader.getFilterLines(), "Filter header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getFormatHeaderLines(), originalHeader.getFormatHeaderLines(), "Format header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getIDHeaderLines(), originalHeader.getIDHeaderLines(), "ID header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getInfoHeaderLines(), originalHeader.getInfoHeaderLines(), "Info header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getOtherHeaderLines(), originalHeader.getOtherHeaderLines(), "Other header lines do not match before/after serialization");
-        Assert.assertEquals(deserializedHeader.getGenotypeSamples(), originalHeader.getGenotypeSamples(), "Genotype samples not the same before/after serialization");
-        Assert.assertEquals(deserializedHeader.samplesWereAlreadySorted(), originalHeader.samplesWereAlreadySorted(), "Sortedness of samples not the same before/after serialization");
-        Assert.assertEquals(deserializedHeader.getSampleNamesInOrder(), originalHeader.getSampleNamesInOrder(), "Sorted list of sample names in header not the same before/after serialization");
-        Assert.assertEquals(deserializedHeader.getSampleNameToOffset(), originalHeader.getSampleNameToOffset(), "Sample name to offset map not the same before/after serialization");
-        Assert.assertEquals(deserializedHeader.toString(), originalHeader.toString(), "String representation of header not the same before/after serialization");
-    }
-
-    @Test
-    public void testVCFHeaderQuoteEscaping() throws Exception {
-        // this test ensures that the end-to-end process of quote escaping is stable when headers are
-        // read and re-written; ie that quotes that are already escaped won't be re-escaped. It does
-        // this by reading a test file, adding a header line with an unescaped quote, writing out a copy
-        // of the file, reading it back in and writing a second copy, and finally reading back the second
-        // copy and comparing it to the first.
-
-        // read an existing VCF
-        final VCFFileReader originalFileReader = new VCFFileReader(new File("src/test/resources/htsjdk/variant/VCF4HeaderTest.vcf"), false);
-        final VCFHeader originalHeader = originalFileReader.getFileHeader();
-
-        // add a header line with quotes to the header
-        final Map<String, String> attributes = new LinkedHashMap<>();
-        attributes.put("ID", "VariantFiltration");
-        attributes.put("CommandLineOptions", "filterName=[ANNOTATION] filterExpression=[ANNOTATION == \"NA\" || ANNOTATION <= 2.0]");
-        final VCFSimpleHeaderLine addedHeaderLine = new VCFSimpleHeaderLine("GATKCommandLine.Test", attributes);
-        originalHeader.addMetaDataLine(addedHeaderLine);
-
-        final VCFFilterHeaderLine originalCopyAnnotationLine1 = originalHeader.getFilterHeaderLine("ANNOTATION");
-        Assert.assertNotNull(originalCopyAnnotationLine1);
-        Assert.assertEquals(originalCopyAnnotationLine1.getGenericFieldValue("Description"), "ANNOTATION != \"NA\" || ANNOTATION <= 0.01", originalCopyAnnotationLine1.toString());
-
-        final VCFFilterHeaderLine originalCopyAnnotationLine2 = originalHeader.getFilterHeaderLine("ANNOTATION2");
-        Assert.assertNotNull(originalCopyAnnotationLine2);
-        Assert.assertEquals(originalCopyAnnotationLine2.getGenericFieldValue("Description"), "ANNOTATION with quote \" that is unmatched but escaped");
-
-        final VCFInfoHeaderLine originalEscapingQuoteInfoLine = originalHeader.getInfoHeaderLine("EscapingQuote");
-        Assert.assertNotNull(originalEscapingQuoteInfoLine);
-        Assert.assertEquals(originalEscapingQuoteInfoLine.getDescription(), "This description has an escaped \" quote in it");
-
-        final VCFInfoHeaderLine originalEscapingBackslashInfoLine = originalHeader.getInfoHeaderLine("EscapingBackslash");
-        Assert.assertNotNull(originalEscapingBackslashInfoLine);
-        Assert.assertEquals(originalEscapingBackslashInfoLine.getDescription(), "This description has an escaped \\ backslash in it");
-
-        final VCFInfoHeaderLine originalEscapingNonQuoteOrBackslashInfoLine = originalHeader.getInfoHeaderLine("EscapingNonQuoteOrBackslash");
-        Assert.assertNotNull(originalEscapingNonQuoteOrBackslashInfoLine);
-        Assert.assertEquals(originalEscapingNonQuoteOrBackslashInfoLine.getDescription(), "This other value has a \\n newline in it");
-
-        // write the file out into a new copy
-        final File firstCopyVCFFile = File.createTempFile("testEscapeHeaderQuotes1.", ".vcf");
-        firstCopyVCFFile.deleteOnExit();
-
-        final VariantContextWriter firstCopyWriter = new VariantContextWriterBuilder()
-                .setOutputFile(firstCopyVCFFile)
-                .setReferenceDictionary(createArtificialSequenceDictionary())
-                .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
-                .build();
-        firstCopyWriter.writeHeader(originalHeader);
-        final CloseableIterator<VariantContext> firstCopyVariantIterator = originalFileReader.iterator();
-        while (firstCopyVariantIterator.hasNext()) {
-            VariantContext variantContext = firstCopyVariantIterator.next();
-            firstCopyWriter.add(variantContext);
-        }
-        originalFileReader.close();
-        firstCopyWriter.close();
-
-        // read the copied file back in
-        final VCFFileReader firstCopyReader = new VCFFileReader(firstCopyVCFFile, false);
-        final VCFHeader firstCopyHeader = firstCopyReader.getFileHeader();
-        final VCFHeaderLine firstCopyNewHeaderLine = firstCopyHeader.getOtherHeaderLine("GATKCommandLine.Test");
-        Assert.assertNotNull(firstCopyNewHeaderLine);
-
-        final VCFFilterHeaderLine firstCopyAnnotationLine1 = firstCopyHeader.getFilterHeaderLine("ANNOTATION");
-        Assert.assertNotNull(firstCopyAnnotationLine1);
-        Assert.assertEquals(firstCopyAnnotationLine1.getGenericFieldValue("Description"), "ANNOTATION != \"NA\" || ANNOTATION <= 0.01");
-
-        final VCFFilterHeaderLine firstCopyAnnotationLine2 = firstCopyHeader.getFilterHeaderLine("ANNOTATION2");
-        Assert.assertNotNull(firstCopyAnnotationLine2);
-
-        final VCFInfoHeaderLine firstCopyEscapingQuoteInfoLine = firstCopyHeader.getInfoHeaderLine("EscapingQuote");
-        Assert.assertNotNull(firstCopyEscapingQuoteInfoLine);
-        Assert.assertEquals(firstCopyEscapingQuoteInfoLine.getDescription(), "This description has an escaped \" quote in it");
-
-        final VCFInfoHeaderLine firstCopyEscapingBackslashInfoLine = firstCopyHeader.getInfoHeaderLine("EscapingBackslash");
-        Assert.assertNotNull(firstCopyEscapingBackslashInfoLine);
-        Assert.assertEquals(firstCopyEscapingBackslashInfoLine.getDescription(), "This description has an escaped \\ backslash in it");
-
-        final VCFInfoHeaderLine firstCopyEscapingNonQuoteOrBackslashInfoLine = firstCopyHeader.getInfoHeaderLine("EscapingNonQuoteOrBackslash");
-        Assert.assertNotNull(firstCopyEscapingNonQuoteOrBackslashInfoLine);
-        Assert.assertEquals(firstCopyEscapingNonQuoteOrBackslashInfoLine.getDescription(), "This other value has a \\n newline in it");
-
-
-        // write one more copy to make sure things don't get double escaped
-        final File secondCopyVCFFile = File.createTempFile("testEscapeHeaderQuotes2.", ".vcf");
-        secondCopyVCFFile.deleteOnExit();
-        final VariantContextWriter secondCopyWriter = new VariantContextWriterBuilder()
-                .setOutputFile(secondCopyVCFFile)
-                .setReferenceDictionary(createArtificialSequenceDictionary())
-                .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
-                .build();
-        secondCopyWriter.writeHeader(firstCopyHeader);
-        final CloseableIterator<VariantContext> secondCopyVariantIterator = firstCopyReader.iterator();
-        while (secondCopyVariantIterator.hasNext()) {
-            VariantContext variantContext = secondCopyVariantIterator.next();
-            secondCopyWriter.add(variantContext);
-        }
-        secondCopyWriter.close();
-
-        // read the second copy back in and verify that the two files have the same header line
-        final VCFFileReader secondCopyReader = new VCFFileReader(secondCopyVCFFile, false);
-        final VCFHeader secondCopyHeader = secondCopyReader.getFileHeader();
-
-        final VCFHeaderLine secondCopyNewHeaderLine = secondCopyHeader.getOtherHeaderLine("GATKCommandLine.Test");
-        Assert.assertNotNull(secondCopyNewHeaderLine);
-
-        final VCFFilterHeaderLine secondCopyAnnotationLine1 = secondCopyHeader.getFilterHeaderLine("ANNOTATION");
-        Assert.assertNotNull(secondCopyAnnotationLine1);
-
-        final VCFFilterHeaderLine secondCopyAnnotationLine2 = secondCopyHeader.getFilterHeaderLine("ANNOTATION2");
-        Assert.assertNotNull(secondCopyAnnotationLine2);
-
-        Assert.assertEquals(firstCopyNewHeaderLine, secondCopyNewHeaderLine);
-        Assert.assertEquals(firstCopyNewHeaderLine.toStringEncoding(), "GATKCommandLine.Test=<ID=VariantFiltration,CommandLineOptions=\"filterName=[ANNOTATION] filterExpression=[ANNOTATION == \\\"NA\\\" || ANNOTATION <= 2.0]\">");
-        Assert.assertEquals(secondCopyNewHeaderLine.toStringEncoding(), "GATKCommandLine.Test=<ID=VariantFiltration,CommandLineOptions=\"filterName=[ANNOTATION] filterExpression=[ANNOTATION == \\\"NA\\\" || ANNOTATION <= 2.0]\">");
-
-        Assert.assertEquals(firstCopyAnnotationLine1, secondCopyAnnotationLine1);
-        Assert.assertEquals(secondCopyAnnotationLine1.getGenericFieldValue("Description"), "ANNOTATION != \"NA\" || ANNOTATION <= 0.01");
-        Assert.assertEquals(firstCopyAnnotationLine2, secondCopyAnnotationLine2);
-        Assert.assertEquals(secondCopyAnnotationLine2.getGenericFieldValue("Description"), "ANNOTATION with quote \" that is unmatched but escaped");
-
-        final VCFInfoHeaderLine secondCopyEscapingQuoteInfoLine = secondCopyHeader.getInfoHeaderLine("EscapingQuote");
-        Assert.assertNotNull(secondCopyEscapingQuoteInfoLine);
-        Assert.assertEquals(secondCopyEscapingQuoteInfoLine.getDescription(), "This description has an escaped \" quote in it");
-
-        final VCFInfoHeaderLine secondCopyEscapingBackslashInfoLine = secondCopyHeader.getInfoHeaderLine("EscapingBackslash");
-        Assert.assertNotNull(secondCopyEscapingBackslashInfoLine);
-        Assert.assertEquals(secondCopyEscapingBackslashInfoLine.getDescription(), "This description has an escaped \\ backslash in it");
-
-        final VCFInfoHeaderLine secondCopyEscapingNonQuoteOrBackslashInfoLine = secondCopyHeader.getInfoHeaderLine("EscapingNonQuoteOrBackslash");
-        Assert.assertNotNull(secondCopyEscapingNonQuoteOrBackslashInfoLine);
-        Assert.assertEquals(secondCopyEscapingNonQuoteOrBackslashInfoLine.getDescription(), "This other value has a \\n newline in it");
-
-        firstCopyReader.close();
-        secondCopyReader.close();
-
-    }
-
-    /**
-     * a little utility function for all tests to md5sum a file
-     * Shameless taken from:
-     * <p/>
-     * http://www.javalobby.org/java/forums/t84420.html
-     *
-     * @param file the file
-     * @return a string
-     */
-    private static String md5SumFile(File file) {
-        MessageDigest digest;
-        try {
-            digest = MessageDigest.getInstance("MD5");
-        } catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException("Unable to find MD5 digest");
-        }
-        InputStream is;
-        try {
-            is = new FileInputStream(file);
-        } catch (FileNotFoundException e) {
-            throw new RuntimeException("Unable to open file " + file);
-        }
-        byte[] buffer = new byte[8192];
-        int read;
-        try {
-            while ((read = is.read(buffer)) > 0) {
-                digest.update(buffer, 0, read);
-            }
-            byte[] md5sum = digest.digest();
-            BigInteger bigInt = new BigInteger(1, md5sum);
-            return bigInt.toString(16);
-
-        } catch (IOException e) {
-            throw new RuntimeException("Unable to process file for MD5", e);
-        } finally {
-            try {
-                is.close();
-            } catch (IOException e) {
-                throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
-            }
-        }
-    }
-
-    private void checkMD5ofHeaderFile(VCFHeader header, String md5sum) {
-        File myTempFile = null;
-        PrintWriter pw = null;
-        try {
-            myTempFile = File.createTempFile("VCFHeader", "vcf");
-            myTempFile.deleteOnExit();
-            pw = new PrintWriter(myTempFile);
-        } catch (IOException e) {
-            Assert.fail("Unable to make a temp file!");
-        }
-        for (VCFHeaderLine line : header.getMetaDataInSortedOrder())
-            pw.println(line);
-        pw.close();
-        Assert.assertEquals(md5SumFile(myTempFile), md5sum);
-    }
-
-    public static int VCF4headerStringCount = 16;
-
-    public static String VCF4headerStrings =
-            "##fileformat=VCFv4.2\n" +
-                    "##filedate=2010-06-21\n" +
-                    "##reference=NCBI36\n" +
-                    "##INFO=<ID=GC, Number=0, Type=Flag, Description=\"Overlap with Gencode CCDS coding sequence\">\n" +
-                    "##INFO=<ID=DP, Number=1, Type=Integer, Description=\"Total number of reads in haplotype window\">\n" +
-                    "##INFO=<ID=AF, Number=A, Type=Float, Description=\"Dindel estimated population allele frequency\">\n" +
-                    "##INFO=<ID=CA, Number=1, Type=String, Description=\"Pilot 1 callability mask\">\n" +
-                    "##INFO=<ID=HP, Number=1, Type=Integer, Description=\"Reference homopolymer tract length\">\n" +
-                    "##INFO=<ID=NS, Number=1, Type=Integer, Description=\"Number of samples with data\">\n" +
-                    "##INFO=<ID=DB, Number=0, Type=Flag, Description=\"dbSNP membership build 129 - type match and indel sequence length match within 25 bp\">\n" +
-                    "##INFO=<ID=NR, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on reverse strand\">\n" +
-                    "##INFO=<ID=NF, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on forward strand\">\n" +
-                    "##FILTER=<ID=NoQCALL, Description=\"Variant called by Dindel but not confirmed by QCALL\">\n" +
-                    "##FORMAT=<ID=GT, Number=1, Type=String, Description=\"Genotype\">\n" +
-                    "##FORMAT=<ID=HQ, Number=2, Type=Integer, Description=\"Haplotype quality\">\n" +
-                    "##FORMAT=<ID=GQ, Number=1, Type=Integer, Description=\"Genotype quality\">\n" +
-                    "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n";
-
-
-    public static String VCF4headerStrings_with_negativeOne =
-            "##fileformat=VCFv4.2\n" +
-                    "##filedate=2010-06-21\n" +
-                    "##reference=NCBI36\n" +
-                    "##INFO=<ID=GC, Number=0, Type=Flag, Description=\"Overlap with Gencode CCDS coding sequence\">\n" +
-                    "##INFO=<ID=YY, Number=., Type=Integer, Description=\"Some weird value that has lots of parameters\">\n" +
-                    "##INFO=<ID=AF, Number=A, Type=Float, Description=\"Dindel estimated population allele frequency\">\n" +
-                    "##INFO=<ID=CA, Number=1, Type=String, Description=\"Pilot 1 callability mask\">\n" +
-                    "##INFO=<ID=HP, Number=1, Type=Integer, Description=\"Reference homopolymer tract length\">\n" +
-                    "##INFO=<ID=NS, Number=1, Type=Integer, Description=\"Number of samples with data\">\n" +
-                    "##INFO=<ID=DB, Number=0, Type=Flag, Description=\"dbSNP membership build 129 - type match and indel sequence length match within 25 bp\">\n" +
-                    "##INFO=<ID=NR, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on reverse strand\">\n" +
-                    "##INFO=<ID=NF, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on forward strand\">\n" +
-                    "##FILTER=<ID=NoQCALL, Description=\"Variant called by Dindel but not confirmed by QCALL\">\n" +
-                    "##FORMAT=<ID=GT, Number=1, Type=String, Description=\"Genotype\">\n" +
-                    "##FORMAT=<ID=HQ, Number=2, Type=Integer, Description=\"Haplotype quality\">\n" +
-                    "##FORMAT=<ID=TT, Number=., Type=Integer, Description=\"Lots of TTs\">\n" +
-                    "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n";
-
-}
diff --git a/src/test/java/htsjdk/variant/vcf/VCFStandardHeaderLinesUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFStandardHeaderLinesUnitTest.java
deleted file mode 100644
index f72cd87..0000000
--- a/src/test/java/htsjdk/variant/vcf/VCFStandardHeaderLinesUnitTest.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-* 
-* 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.
-*/
-
-package htsjdk.variant.vcf;
-
-import htsjdk.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by IntelliJ IDEA.
- * User: aaron
- * Date: Jun 30, 2010
- * Time: 3:32:08 PM
- * To change this template use File | Settings | File Templates.
- */
-public class VCFStandardHeaderLinesUnitTest extends VariantBaseTest {
-    @DataProvider(name = "getStandardLines")
-    public Object[][] makeGetStandardLines() {
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        // info
-        tests.add(new Object[]{"AC", "info", true});
-        tests.add(new Object[]{"AN", "info", true});
-        tests.add(new Object[]{"AF", "info", true});
-        tests.add(new Object[]{"DP", "info", true});
-        tests.add(new Object[]{"DB", "info", true});
-        tests.add(new Object[]{"END", "info", true});
-        tests.add(new Object[]{"SB", "info", true});
-        tests.add(new Object[]{"MQ", "info", true});
-        tests.add(new Object[]{"MQ0", "info", true});
-        tests.add(new Object[]{"SOMATIC", "info", true});
-
-        // format
-        tests.add(new Object[]{"GT", "format", true});
-        tests.add(new Object[]{"GQ", "format", true});
-        tests.add(new Object[]{"DP", "format", true});
-        tests.add(new Object[]{"AD", "format", true});
-        tests.add(new Object[]{"PL", "format", true});
-        tests.add(new Object[]{"FT", "format", true});
-        tests.add(new Object[]{"PQ", "format", true});
-
-        tests.add(new Object[]{"NOT_STANDARD", "info", false});
-        tests.add(new Object[]{"NOT_STANDARD", "format", false});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-
-    @Test(dataProvider = "getStandardLines")
-    public void getStandardLines(final String key, final String type, final boolean expectedToBeStandard) {
-        VCFCompoundHeaderLine line = null;
-        if ( type.equals("info") )
-            line = VCFStandardHeaderLines.getInfoLine(key, false);
-        else if ( type.equals("format") )
-            line = VCFStandardHeaderLines.getFormatLine(key, false);
-        else
-            throw new IllegalArgumentException("Unexpected type in getStandardLines " + type);
-
-        if ( expectedToBeStandard ) {
-            Assert.assertNotNull(line);
-            Assert.assertEquals(line.getID(), key);
-            Assert.assertTrue(deeperTest(line));
-        } else {
-            Assert.assertNull(line);
-        }
-    }
-
-    private boolean deeperTest(final VCFCompoundHeaderLine line){
-
-        final String id = line.getID();
-        if(id.equals(VCFConstants.GENOTYPE_KEY))
-            return line.getType().equals(VCFHeaderLineType.String) && line.getCount()==1 ;
-        else if(id.equals(VCFConstants.GENOTYPE_QUALITY_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.DEPTH_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.GENOTYPE_PL_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCountType().equals(VCFHeaderLineCount.G);
-        else if(id.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCountType().equals(VCFHeaderLineCount.R);
-        else if(id.equals(VCFConstants.GENOTYPE_FILTER_KEY))
-            return line.getType().equals(VCFHeaderLineType.String) && line.getCountType().equals(VCFHeaderLineCount.UNBOUNDED);
-        else if(id.equals(VCFConstants.PHASE_QUALITY_KEY))
-            return line.getType().equals(VCFHeaderLineType.Float) && line.getCount()==1;
-        else if(id.equals(VCFConstants.END_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.DBSNP_KEY))
-            return line.getType().equals(VCFHeaderLineType.Flag) && line.getCount()==0;
-        else if(id.equals(VCFConstants.DEPTH_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.STRAND_BIAS_KEY))
-            return line.getType().equals(VCFHeaderLineType.Float) && line.getCount()==1;
-        else if(id.equals(VCFConstants.ALLELE_FREQUENCY_KEY))
-            return line.getType().equals(VCFHeaderLineType.Float) && line.getCountType().equals(VCFHeaderLineCount.A);
-        else if(id.equals(VCFConstants.ALLELE_COUNT_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCountType().equals(VCFHeaderLineCount.A);
-        else if(id.equals(VCFConstants.ALLELE_NUMBER_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.MAPPING_QUALITY_ZERO_KEY))
-            return line.getType().equals(VCFHeaderLineType.Integer) && line.getCount()==1;
-        else if(id.equals(VCFConstants.RMS_MAPPING_QUALITY_KEY))
-            return line.getType().equals(VCFHeaderLineType.Float) && line.getCount()==1;
-        else if(id.equals(VCFConstants.SOMATIC_KEY))
-            return line.getType().equals(VCFHeaderLineType.Flag) && line.getCount()==0;
-        else
-            throw new IllegalArgumentException("Unexpected id : " + id);
-    }
-
-    private class RepairHeaderTest {
-        final VCFCompoundHeaderLine original, expectedResult;
-
-        private RepairHeaderTest(final VCFCompoundHeaderLine original) {
-            this(original, original);
-        }
-
-        private RepairHeaderTest(final VCFCompoundHeaderLine original, final VCFCompoundHeaderLine expectedResult) {
-            this.original = original;
-            this.expectedResult = expectedResult;
-        }
-
-        public String toString() {
-            return "RepairHeaderTest: Original: " + original.toStringEncoding() + "  Expected: " + expectedResult.toStringEncoding();
-        }
-    }
-
-    @DataProvider(name = "RepairHeaderTest")
-    public Object[][] makeRepairHeaderTest() {
-        final VCFInfoHeaderLine standardAC = VCFStandardHeaderLines.getInfoLine("AC");
-        final VCFInfoHeaderLine goodAC = new VCFInfoHeaderLine("AC", VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "x");
-
-        final VCFFormatHeaderLine standardGT = VCFStandardHeaderLines.getFormatLine("GT");
-        final VCFFormatHeaderLine goodGT = new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.String, "x");
-
-        List<Object[]> tests = new ArrayList<Object[]>();
-
-        tests.add(new Object[]{new RepairHeaderTest( standardGT, standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( goodGT, goodGT )});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 2, VCFHeaderLineType.String, "x"), standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.Integer, "x"), standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.Float, "x"), standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "x"), standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.G, VCFHeaderLineType.String, "x"), standardGT)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.A, VCFHeaderLineType.String, "x"), standardGT)});
-
-        tests.add(new Object[]{new RepairHeaderTest( standardAC, standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( goodAC, goodAC )});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.Integer, "x"), standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", VCFHeaderLineCount.G, VCFHeaderLineType.Integer, "x"), standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"), standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.Float, "x"), standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.String, "x"), standardAC)});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 0, VCFHeaderLineType.Flag, "x"), standardAC)});
-
-        tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("NON_STANDARD_INFO", 1, VCFHeaderLineType.String, "x"))});
-        tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("NON_STANDARD_FORMAT", 1, VCFHeaderLineType.String, "x"))});
-
-        return tests.toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "RepairHeaderTest")
-    public void testRepairHeaderTest(final RepairHeaderTest cfg) {
-        final VCFHeader toRepair = new VCFHeader(Collections.singleton((VCFHeaderLine)cfg.original));
-        final VCFHeader repaired = VCFStandardHeaderLines.repairStandardHeaderLines(toRepair);
-
-        VCFCompoundHeaderLine repairedLine = (VCFCompoundHeaderLine)repaired.getFormatHeaderLine(cfg.original.getID());
-        if ( repairedLine == null ) repairedLine = (VCFCompoundHeaderLine)repaired.getInfoHeaderLine(cfg.original.getID());
-
-        Assert.assertNotNull(repairedLine, "Repaired header didn't contain the expected line");
-        Assert.assertEquals(repairedLine.getID(), cfg.expectedResult.getID());
-        Assert.assertEquals(repairedLine.getType(), cfg.expectedResult.getType());
-        Assert.assertEquals(repairedLine.getCountType(), cfg.expectedResult.getCountType());
-        if ( repairedLine.getCountType() == VCFHeaderLineCount.INTEGER ) {
-            Assert.assertEquals(repairedLine.getCount(), cfg.expectedResult.getCount());
-        }
-    }
-}
diff --git a/src/test/resources/htsjdk/samtools/BAMCigarOverflowTest/CigarOverflowTest.bam b/src/test/resources/htsjdk/samtools/BAMCigarOverflowTest/CigarOverflowTest.bam
deleted file mode 100755
index 5a926af..0000000
Binary files a/src/test/resources/htsjdk/samtools/BAMCigarOverflowTest/CigarOverflowTest.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam b/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam
deleted file mode 100644
index 8aa4751..0000000
Binary files a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai b/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai
deleted file mode 100644
index 49b423e..0000000
Binary files a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/index_test.bam.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam b/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam
deleted file mode 120000
index 53313ae..0000000
--- a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam
+++ /dev/null
@@ -1 +0,0 @@
-index_test.bam
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam.bai b/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam.bai
deleted file mode 120000
index 0f95610..0000000
--- a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_with_index.bam.bai
+++ /dev/null
@@ -1 +0,0 @@
-index_test.bam.bai
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_without_linked_index.bam b/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_without_linked_index.bam
deleted file mode 120000
index 53313ae..0000000
--- a/src/test/resources/htsjdk/samtools/BAMFileIndexTest/symlink_without_linked_index.bam
+++ /dev/null
@@ -1 +0,0 @@
-index_test.bam
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.bam b/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.bam
deleted file mode 100755
index ab0e1a2..0000000
Binary files a/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.sam b/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.sam
deleted file mode 100644
index a1349e9..0000000
--- a/src/test/resources/htsjdk/samtools/SAMIntegerTagTest/variousAttributes.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD	VN:1.0
- at SQ	SN:chr20	AS:HG18	LN:62435964
-read_28833_29006_6945	99	chr20	28833	20	10M1D25M	=	28993	195	AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG	<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<	MF:i:130	Nm:i:1	H0:i:0	H1:i:0	SB:i:-128	UB:i:129	SS:i:32767	US:i:65535	SI:i:2147483647	I2:i:-2147483647	UI:i:4294967295
-
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome1to10.bam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome1to10.bam
deleted file mode 100755
index 671814e..0000000
Binary files a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome1to10.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome5to9.bam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome5to9.bam
deleted file mode 100755
index d32ab86..0000000
Binary files a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/Chromosome5to9.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file1.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file1.sam
deleted file mode 100644
index a6963c2..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file1.sam
+++ /dev/null
@@ -1,5 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:something
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file2.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file2.sam
deleted file mode 100644
index 17a41ab..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/chr11sub_file2.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:A
- at PG	ID:1.1	PN:B
- at PG	ID:2	PN:C	PP:1
- at PG	ID:2.1	PN:D	PP:1.1
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/expected_output.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/expected_output.sam
deleted file mode 100644
index c43a2e9..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case1/expected_output.sam
+++ /dev/null
@@ -1,13 +0,0 @@
- at HD	VN:1.5	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	PL:ILLUMINA	SM:sample1
- at PG	ID:1	PN:something
- at PG	ID:1.1	PN:A
- at PG	ID:1.1.2	PN:B
- at PG	ID:2	PN:C	PP:1.1
- at PG	ID:2.1	PN:D	PP:1.1.2
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file1.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file1.sam
deleted file mode 100644
index a2575f0..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file1.sam
+++ /dev/null
@@ -1,9 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:A
- at PG	ID:2	PN:B	PP:1
- at PG	ID:3	PN:C	PP:1
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:19789:20399:BI	73	chrM	50921	0	101M	=	50921	0	CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN	97:>?A>>BB>@B@?@CA5@?5=C@############################################################################	RG:Z:1	E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT	OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??############################################################################	 [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file2.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file2.sam
deleted file mode 100644
index 5e6e7ea..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file2.sam
+++ /dev/null
@@ -1,7 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:A
- at PG	ID:2	PN:B	PP:1
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file3.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file3.sam
deleted file mode 100644
index 6bda955..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file3.sam
+++ /dev/null
@@ -1,9 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	SM:sample2	PL:ILLUMINA
- at PG	ID:1	PN:X
- at PG	ID:2	PN:B	PP:1
- at PG	ID:3	PN:Y	PP:2
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:19789:20399:BI	73	chrM	50921	0	101M	=	50921	0	CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN	97:>?A>>BB>@B@?@CA5@?5=C@############################################################################	RG:Z:1	E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT	OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??############################################################################	 [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file4.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file4.sam
deleted file mode 100644
index d0c43d7..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/chr11sub_file4.sam
+++ /dev/null
@@ -1,5 +0,0 @@
- at HD	VN:1.0	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1.1	SM:sample3	PL:ILLUMINA
- at PG	ID:2	PN:B
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1.1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@ [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/expected_output.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/expected_output.sam
deleted file mode 100644
index 6755f30..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/case2/expected_output.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD	VN:1.5	GO:none	SO:coordinate
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb	SP:Homo sapiens
- at RG	ID:1	PL:ILLUMINA	SM:sample1
- at RG	ID:1.1	PL:ILLUMINA	SM:sample2
- at RG	ID:1.1.2	PL:ILLUMINA	SM:sample3
- at PG	ID:1	PN:A
- at PG	ID:1.1	PN:X
- at PG	ID:2	PN:B
- at PG	ID:2.3	PN:B	PP:1
- at PG	ID:2.4	PN:B	PP:1.1
- at PG	ID:3	PN:C	PP:1
- at PG	ID:3.6	PN:Y	PP:2.4
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1.1.1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACC [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI	99	chrM	50418	0	101M	=	50678	360	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1.1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@ [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1.1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCC [...]
-6194MAAXX100108:2:55:3087:12679:BI	147	chrM	50678	0	101M	=	50418	-360	TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT	:99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9	RG:Z:1	E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC	OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:19789:20399:BI	73	chrM	50921	0	101M	=	50921	0	CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN	97:>?A>>BB>@B@?@CA5@?5=C@############################################################################	RG:Z:1.1	E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT	OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??########################################################################### [...]
-6194MAAXX100108:2:55:19789:20399:BI	73	chrM	50921	0	101M	=	50921	0	CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN	97:>?A>>BB>@B@?@CA5@?5=C@############################################################################	RG:Z:1	E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT	OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??############################################################################	 [...]
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/1.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/1.sam
deleted file mode 100644
index f4f16f8..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/1.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.0	GO:none	SO:unsorted
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:A
- at PG	ID:1.1	PN:B
- at PG	ID:2	PN:C	PP:1
- at PG	ID:2.1	PN:D	PP:1.1
-A	0	chrM	100	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:1	NM:i:0	UQ:i:0
-F	0	chrM	600	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:1.1	NM:i:0	UQ:i:0
-E	0	chrM	500	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:2	NM:i:0	UQ:i:0
-D	0	chrM	400	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:2.1	NM:i:0	UQ:i:0
diff --git a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/2.sam b/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/2.sam
deleted file mode 100644
index 70991a7..0000000
--- a/src/test/resources/htsjdk/samtools/SamFileHeaderMergerTest/unsorted_input/2.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.0	GO:none	SO:unsorted
- at SQ	SN:chrM	LN:16571	AS:HG18	UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
- at RG	ID:1	SM:sample1	PL:ILLUMINA
- at PG	ID:1	PN:A
- at PG	ID:1.1	PN:B
- at PG	ID:2	PN:C	PP:1
- at PG	ID:2.1	PN:D	PP:1.1
-H	0	chrM	800	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:1	NM:i:0	UQ:i:0
-B	0	chrM	200	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:1.1	NM:i:0	UQ:i:0
-C	0	chrM	300	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:2	NM:i:0	UQ:i:0
-G	0	chrM	700	0	101M	*	0	0	TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG	9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9<	RG:Z:1	E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT	OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C	PG:Z:2.1	NM:i:0	UQ:i:0
diff --git a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.dict b/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.dict
deleted file mode 100644
index db5b251..0000000
--- a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.5	SO:unsorted
- at SQ	SN:chr1	LN:16	M5:56b74a652b3ed2f610263b8bb423167c	UR:file:src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
- at SQ	SN:chr2	LN:16	M5:b835d2c026aa66c52a05838dcc0b59d4	UR:file:src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
diff --git a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta b/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
deleted file mode 100644
index 0b446ca..0000000
--- a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
+++ /dev/null
@@ -1,4 +0,0 @@
->chr1
-ACGTACGTacgtacgt
->chr2
-TCGATCGAtcgatcga
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta.fai b/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta.fai
deleted file mode 100644
index 9314c8f..0000000
--- a/src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chr1	16	6	16	17
-chr2	16	29	16	16
diff --git a/src/test/resources/htsjdk/samtools/SequenceUtil/upper_and_lowercase_read.sam b/src/test/resources/htsjdk/samtools/SequenceUtil/upper_and_lowercase_read.sam
deleted file mode 100644
index 82efe85..0000000
--- a/src/test/resources/htsjdk/samtools/SequenceUtil/upper_and_lowercase_read.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:16	M5:56b74a652b3ed2f610263b8bb423167c	UR:file:src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
- at SQ	SN:chr2	LN:16	M5:b835d2c026aa66c52a05838dcc0b59d4	UR:file:src/test/resources/htsjdk/samtools/SequenceUtil/reference_with_lower_and_uppercase.fasta
- at CO	chr1 value is                           ACGTACGTacgtacgt
- at CO	chr2 value is                           TCGATCGAtcgatcga
-read1	0	chr1	1	0	16M	*	0	0	AcGtAcGTaCGtAcGt	AAAAAAAAAAAAAAAA	NM:i:0
-read2	0	chr1	1	0	16M	*	0	0	AcGtAcGTaCGtAcGt	AAAAAAAAAAAAAAAA	NM:i:0
-read3	0	chr2	1	0	16M	*	0	0	AcGtAcGTaCGtAcGt	AAAAAAAAAAAAAAAA	NM:i:8	MD:Z:0T2A0T2A0t2a0t2a0
-read4	0	chr2	1	0	8M	*	0	0	TCGATCGA	AAAAAAAA	NM:i:0
-read5	0	chr2	1	0	4M1D2M1S	*	0	0	TCGACGAA	AAAAAAAA	NM:i:1	MD:Z:4^T2
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bai b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bai
deleted file mode 100644
index bf4bc62..0000000
Binary files a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bam
deleted file mode 100644
index 8aa4751..0000000
Binary files a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/bad_index.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/buggyHeader.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/buggyHeader.sam
deleted file mode 100755
index 5d2b1b4..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/buggyHeader.sam
+++ /dev/null
@@ -1,30 +0,0 @@
- at HD VN:1.0  SO:coordinate
- at SQ	SN:chr1	SN:chr123	LN:247249719	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:9ebc6df9496613f373e73396d5b3b6b6 SP:Homo sapiens
- at SQ	SN:chr2	LN:242951149	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:b12c7373e3882120332983be99aeb18d SP:Homo sapiens
- at SQ	SN:chr3	LN:199501827	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:4e390df72c70f259b074be639d8f9578 SP:Homo sapiens
- at SQ	SN:chr4	LN:191273063	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:cf37020337904229dca8401907b626c2 SP:Homo sapiens
- at SQ	SN:chr5	LN:180857866	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:031c851664e31b2c17337fd6f9004858 SP:Homo sapiens
- at SQ	SN:chr6	LN:170899992	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:bfe8005c536131276d448ead33f1b583 SP:Homo sapiens
- at SQ	SN:chr7	LN:158821424	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:74239c5ceee3b28f0038123d958114cb SP:Homo sapiens
- at SQ	SN:chr8	LN:146274826	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:1eb00fe1ce26ce6701d2cd75c35b5ccb SP:Homo sapiens
- at SQ	SN:chr9	LN:140273252	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:ea244473e525dde0393d353ef94f974b SP:Homo sapiens
- at SQ	SN:chr10	LN:135374737	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:4ca41bf2d7d33578d2cd7ee9411e1533 SP:Homo sapiens
- at SQ	SN:chr11	LN:134452384	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:425ba5eb6c95b60bafbf2874493a56c3 SP:Homo sapiens
- at SQ	SN:chr12	LN:132349534	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:d17d70060c56b4578fa570117bf19716 SP:Homo sapiens
- at SQ	SN:chr13	LN:114142980	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:c4f3084a20380a373bbbdb9ae30da587 SP:Homo sapiens
- at SQ	SN:chr14	LN:106368585	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:c1ff5d44683831e9c7c1db23f93fbb45 SP:Homo sapiens
- at SQ	SN:chr15	LN:100338915	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:5cd9622c459fe0a276b27f6ac06116d8 SP:Homo sapiens
- at SQ	SN:chr16	LN:88827254	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:3e81884229e8dc6b7f258169ec8da246 SP:Homo sapiens
- at SQ	SN:chr17	LN:78774742	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:2a5c95ed99c5298bb107f313c7044588 SP:Homo sapiens
- at SQ	SN:chr18	LN:76117153	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:3d11df432bcdc1407835d5ef2ce62634 SP:Homo sapiens
- at SQ	SN:chr19	LN:63811651	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:2f1a59077cfad51df907ac25723bff28 SP:Homo sapiens
- at SQ	SN:chr20	LN:62435964	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:f126cdf8a6e0c7f379d618ff66beb2da SP:Homo sapiens
- at SQ	SN:chr21	LN:46944323	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:f1b74b7f9f4cdbaeb6832ee86cb426c6 SP:Homo sapiens
- at SQ	SN:chr22	LN:49691432	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:2041e6a0c914b48dd537922cca63acb8 SP:Homo sapiens
- at SQ	SN:chrX	LN:154913754	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:d7e626c80ad172a4d7c95aadb94d9040 SP:Homo sapiens
- at SQ	SN:chrY	LN:57772954	UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta	M5:62f69d0e82a12af74bad85e2e4a8bd91 SP:Homo sapiens
- at RG     ID:A    PL:solid        PU:083_20090618_2_SL_notag      LB:ANG_TCGA-OVA.09.T_000sA      DT:2009-06-18T19:00:00-0500     SM:TCGA-09-0364-01A-02W-0370-010     CN:Baylor
- at RG     ID:B    PL:solid        PU:083_20090618_2_SL_detag      LB:ANG_TCGA-OVA.09.T_000sA      DT:2009-06-18T19:00:00-0500     SM:TCGA-09-0364-01A-02W-0370-010     CN:Baylor
- at PG	ID:0	VN:4.0r2.0 CL:/data/bucket2/corona_lite_v4.0r2.0 -t 50 or 30 -z 10 -e 6:50 or 3:30
- at CO	Hi, Mom!
-1003_834_22	0	chr1	7330	255	50M	*	0	0	CCCAGGCCTCCCGAGCCGAGCCATCCGTCACCCCCTGGCTCCTGGCCGCT	@@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>9@@@?9<@@(((!	RG:Z:0	CS:Z:T20012030220032230322301320312110000210322021030332	CQ:Z:499;=,4988	MD:Z:23C23TA1
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicate_rg.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicate_rg.sam
deleted file mode 100644
index 1ec8faa..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicate_rg.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:101	UR:merger.fasta	M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ	SN:chr2	LN:101	UR:merger.fasta	M5:31c33e2155b3de5e2554b693c475b310
- at SQ	SN:chr3	LN:101	UR:merger.fasta	M5:631593c6dd2048ae88dcce2bd505d295
- at SQ	SN:chr4	LN:101	UR:merger.fasta	M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ	SN:chr5	LN:101	UR:merger.fasta	M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ	SN:chr6	LN:101	UR:merger.fasta	M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ	SN:chr7	LN:404	UR:merger.fasta	M5:da488fc432cdaf2c20c96da473a7b630
- at SQ	SN:chr8	LN:202	UR:merger.fasta	M5:d339678efce576d5546e88b49a487b63
- at RG	ID:H7U2W.1	PU:H7U2WADXX140408.1.AAGTAGAG	LB:Solexa-1	PI:0	DT:2014-04-08T00:00:00-0400	SM:K-562	CN:BI
- at RG	ID:H7U2W.1	PU:H7U2WADXX140408.1.AAGTAGAG	LB:Solexa-2	PI:0	DT:2014-04-08T00:00:00-0400	SM:K-562	CN:BI
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads.sam
deleted file mode 100644
index e9e003c..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads.sam
+++ /dev/null
@@ -1,17 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:404
- at SQ	SN:chr8	LN:202
- at RG	ID:0	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:1	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:2	SM:Hi,Mom!	LB:my-library	PL:Illumina
- at PG	ID:1	PN:Hey!	VN:2.0
-duplicate_read	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	141	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	141	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads_out_of_order.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads_out_of_order.sam
deleted file mode 100644
index 23094dc..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/duplicated_reads_out_of_order.sam
+++ /dev/null
@@ -1,17 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:404
- at SQ	SN:chr8	LN:202
- at RG	ID:0	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:1	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:2	SM:Hi,Mom!	LB:my-library	PL:Illumina
- at PG	ID:1	PN:Hey!	VN:2.0
-duplicate_read	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	141	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-duplicate_read	141	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/hanging_tab.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/hanging_tab.sam
deleted file mode 100644
index a4a4331..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/hanging_tab.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	PL:illumina	PU:300TDAAXX090429.8	LB:Solexa-3536	DT:Wed Apr 29 00:00:00 EDT 2009	SM:CLONED Phi-X Control	CN:broad
-300TDAAXX090429:8:100:0:1001#0	589	*	0	0	*	*	0	0	NNNNNNNNNNNNNNNNNNNNNNNNN	#########################	XN:i:1	RG:Z:0	
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/inappropriate_mate_cigar_string.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/inappropriate_mate_cigar_string.sam
deleted file mode 100644
index 167ed36..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/inappropriate_mate_cigar_string.sam
+++ /dev/null
@@ -1,13 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:101	UR:merger.fasta	M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ	SN:chr2	LN:101	UR:merger.fasta	M5:31c33e2155b3de5e2554b693c475b310
- at SQ	SN:chr3	LN:101	UR:merger.fasta	M5:631593c6dd2048ae88dcce2bd505d295
- at SQ	SN:chr4	LN:101	UR:merger.fasta	M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ	SN:chr5	LN:101	UR:merger.fasta	M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ	SN:chr6	LN:101	UR:merger.fasta	M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ	SN:chr7	LN:404	UR:merger.fasta	M5:da488fc432cdaf2c20c96da473a7b630
- at SQ	SN:chr8	LN:202	UR:merger.fasta	M5:d339678efce576d5546e88b49a487b63
- at RG	ID:0	SM:Hi,Mom!
- at PG	ID:0	PN:myAligner	VN:1.0	CL:align!
-pair_read	73	chr7	3	9	6M	=	3	0	CAACAG	)'.*.+	MC:Z:*	PG:Z:0	RG:Z:0	NM:i:4	UQ:i:33
-pair_read	133	chr7	3	0	*	=	3	0	NCGCGG	&/1544	MC:Z:6M	PG:Z:0	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_coord_sort_order.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_coord_sort_order.sam
deleted file mode 100644
index 7f22b9a..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_coord_sort_order.sam
+++ /dev/null
@@ -1,27 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:202
- at SQ	SN:chr8	LN:202
-SL-XAV:1:1:0:764#0/1	89	chr1	1	255	101M	*	0	0	TTCATGCTGANGCNCTCTTACGATCGTACAGATGCAAATATTAACANNCNTTNAAGNNCANNNNNNNNNCAATACAATANTAGAGTACGTNAACACTCCAN	&/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0&	RG:Z:0	XN:i:1
-SL-XAV:1:1:0:1668#0/2	153	chr2	1	255	101M	*	0	0	CATCTCTACANGCGCGTCCTACCAGACGCGCTTCCGATCTGAGAGCATACTTTTCATTGGATTCCAGCACAACTCCATTTTTGATCCACTNGACACCTTTN	(/,'-/'0////(1'&&1&&&&'2''-6/,/3-33653.6:1'.86/-++32.-4864653/5/583/346423203+28888644446688456/4880&	RG:Z:0	XN:i:1
-SL-XAV:1:1:0:1914#0/2	153	chr3	1	255	101M	*	0	0	CGTATGCGCTNTTTATGTCGCCCACAGTGCCTAGTATAGCCCCTGCTAATAAAAAGAGATGAATACGTTTACTTAAAAAACTGAAACTAGNAATGTGCAAN	(0,7&&*/*0*,)10/).-*&.&*/6669.&-337599;3,&,6/.,5::999987893+387020775777547999::668997448:::9;999::0&	RG:Z:0
-SL-XAV:1:1:0:1639#0/2	153	chr1	1	255	101M	*	0	0	CGTGATACCANCTCATGTTCACAGCCAAAGCCTGAAGCTGTCTATTATATTTCTCAACCATAAACTTTTGCCTCAGGCATCCGCAGAATGNTTTGCAGCCN	'.&.&&'.0+01'2(1'(''-)','+0041/.+032;:867115/5267-.0/)-5.&-26200224,,0+0/0275/5605688::646875568882*&	RG:Z:0
-SL-XAV:1:1:0:68#0/2	137	chr5	1	255	101M	*	0	0	NTCTCATTTANAAATGGTTATAAAAACATTTATGCTGAAAAGGTGAAGTTCATTAATGAACAGGCTGACTGTCTCACTATCGCGTTCGCANGACGTTATCT	&1<<999;;;;<<<87579:556972789977444.'.023.&,7621/54.49.)/53055-22--''+(.'-))6-168/(3&&0(<).))*&&&&&'0	RG:Z:0
-SL-XAV:1:1:0:700#0/2	137	chr6	1	255	101M	*	0	0	NAATTGTTCTNAGTTTCTCGGTTTATGTGCTCTTCCAGGTGGGTAACACAATAATGGCCTTCCAGATCGTAAGAGCGACGTGTGTTGCACNAGTGTCGATC	&0::887::::6/646::838388811/679:87640&./2+/-4/28:3,536/4''&&.78/(/554/./02*)*',-(57()&.6(6:(0601'/(,*	RG:Z:0
-SL-XAV:1:1:0:1721#0/1	83	chr7	1	255	101M	=	102	40	CAACAGAAGGNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCGAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-SL-XAV:1:1:0:1721#0/2	163	chr7	102	255	101M	=	1	-40	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-SL-XAV:1:1:0:105#0/2	147	chr8	1	255	101M	=	102	79	CACATCGTGANTCTTACAATCTGCGGTTTCAGATGTGGAGCGATGTGTGAGAGATTGAGCAACTGATCTGAAAAGCAGACACAGCTATTCNTAAGATGACN	/))3--/&*()&)&&+'++.'-&,(.))'4,)&'&&,')8,&&*'.&*0'225/&)3-8//)*,5-*).7851453583.3568526:863688:::85.&	RG:Z:0
-SL-XAV:1:1:0:105#0/1	99	chr8	102	255	101M	=	1	-79	NCAGGTTCAANTGTGCAGCCCNTTTTGAGAGATNNNNNNNNTGNNCTGNAANANNGACACAGCTATTCCTAAGATGACAAGATCAGANAANAAGTCAAGCA	&06665578::41.*/7577/&/77403-324.&&&&&&&&/.&&..&&.0&&&&',:9:/-/(55002020+3'12+2/&.2-&//&),&*&&&&&&&51	RG:Z:0
-SL-XAV:1:1:0:1300#0/1	77	*	0	0	*	*	0	0	NAAACACAAGNNANAGTCTTANCNGCTATTCCNNNNNNNNNCTNNNCTNAGNANNACATACAACAGTATCCACACAAGTGTACTCGTNCANACATGTGAAC	&*5535)*-,,&.&.*-1)*,&'&)&1&&.,)&&&&&&&&&)0&&&0'&&&&.&&*2'/4''0/**&)&,'-&*,&,&&&.0.&)&&&**&,.&&&')&&)	RG:Z:0
-SL-XAV:1:1:0:1300#0/2	141	*	0	0	*	*	0	0	NGATCATGGANGACTCTCCCCATCCCCCGCTCCAGCGCTCAGTTATATGCCTAGCCTCGGACACGTCACCAACATCTCACGCACTCTGCANAGTCTCTCAC	&&'+''3*&-/)/1'26/*-2-/542-*&-&/'/*/&-'&)-')&.'-/&&2+122*'&+,(/-&)((,/-,,.'2(2'+)/&/&-66-&&/16&)&*&'3	RG:Z:0
-SL-XAV:1:1:0:1639#0/1	101	*	0	0	*	chr1	1	0	NCCCTCTCAGNNTNTCTGCCANANCCTTAAGCNNNNNNNNNTANNNCTNAANCNNAAACTTTTGCCTCAGGCATCCGCAGAATGTTTNTCNGCCTATATCG	&1::::::64/&/&0:3.280&/&087881,/&&&&&&&&&..&&&..&,,&-&&,265341-)/5680&-.5552-25/322/42/&)&&).421&-&-/	RG:Z:0
-SL-XAV:1:1:0:1668#0/1	101	*	0	0	*	chr2	1	0	NATAGCATACNNTNCATTGGANTNCAGCACAANNNNNNNNNTGNNNCANTNNANNCCTTTGAGATCGGAAGAGCGGTTCAGCAGGAANNCNCAGACCGATC	&1988998890&0&.8863//&.&.0-2875.&&&&&&&&&.)&&&..&.&&.&&.5782-2+262)&-0-0510*.332-2.-,0*&&*&'.&-2-)0.,	RG:Z:0
-SL-XAV:1:1:0:1914#0/1	101	*	0	0	*	chr3	1	0	NTTTTTCTCCNNCNGTGCCTANTNTAGCCCCTNNNNNNNNNAANNNATNANNANNTTTACTTAAAAAACTGAAACTAGTAATGTGCANNANATCGNAAGAG	&0::::<<;90&/&.244760&,&.414798/&&&&&&&&&00&&&0.&/&&-&&.4475687363504.&.557/.*)65.&/*./&&.&.+*)&..).&	RG:Z:0
-SL-XAV:1:1:0:68#0/1	581	*	0	0	*	chr4	1	0	NAATATTCATNNGNTCAGCCTNTNCATTAATTNNNNNNNNNTTNNNATNATNANNTTTTTTATAACCATTTATAAATGAGAGAGATCNTANCACAATATCA	&0<<:::::</&&&.73'290&.&0;:::90&&&&&&&&&&..&&&0)&0-&0&&&.743799995253348597921.,.'050.*&.0&)*)&&&&*).	RG:Z:0
-SL-XAV:1:1:0:700#0/1	581	*	0	0	*	chr5	1	0	NGAAGCCCATNNTNGTGTTACNCNCCTGGAAGNNNNNNNNNACNNNGANACNTNNAACAATTCAGATCGGAAGAGCGGTTCAGCAGANNTNCCGAGACCGA	&.88888:88/&0&,03189.&/&.8/))12/&&&&&&&&&./&&&&.&1.&)&&/35962/6432-3&),0&/2+0,),61&-6,&&&'&/,.0&...)0	RG:Z:0
-SL-XAV:1:1:0:764#0/2	165	*	0	0	*	chr6	1	0	NACAGATGCANATATTAACAGGCTTTAAAGGACAGATGGACTGCAATACAATAATAGAGTACGTCAACACTCCACAGATCGCTAGAGCATNACATCGGTGT	&/:5358::9999::99998255::7275,,/5567-'+387537857:54-4.51'31059547320;73/720+22.4(6.;((.;(;8()(''&&2&&	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_mate_cigar_string.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_mate_cigar_string.sam
deleted file mode 100644
index a7e33b7..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_mate_cigar_string.sam
+++ /dev/null
@@ -1,19 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:101	UR:merger.fasta	M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ	SN:chr2	LN:101	UR:merger.fasta	M5:31c33e2155b3de5e2554b693c475b310
- at SQ	SN:chr3	LN:101	UR:merger.fasta	M5:631593c6dd2048ae88dcce2bd505d295
- at SQ	SN:chr4	LN:101	UR:merger.fasta	M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ	SN:chr5	LN:101	UR:merger.fasta	M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ	SN:chr6	LN:101	UR:merger.fasta	M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ	SN:chr7	LN:404	UR:merger.fasta	M5:da488fc432cdaf2c20c96da473a7b630
- at SQ	SN:chr8	LN:202	UR:merger.fasta	M5:d339678efce576d5546e88b49a487b63
- at RG	ID:0	SM:Hi,Mom!
- at PG	ID:0	PN:myAligner	VN:1.0	CL:align!
-pair_both_hit	65	chr7	1	100	101M	=	120	120	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	MC:Z:99M	PG:Z:0	RG:Z:0	NM:i:21	MQ:i:100	UQ:i:144
-pair_both_multihit	321	chr7	1	100	101M	=	120	120	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:0	NM:i:21	MQ:i:100	UQ:i:144
-pair_both_multihit	321	chr7	10	100	101M	=	130	121	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:1	NM:i:83	MQ:i:100	UQ:i:865
-pair_both_hit	129	chr7	120	100	101M	=	1	-120	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	MC:Z:101M	PG:Z:0	RG:Z:0	NM:i:73	MQ:i:100	UQ:i:944
-pair_both_multihit	385	chr7	120	100	101M	=	1	-120	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:0	NM:i:73	MQ:i:100	UQ:i:944
-pair_both_multihit	385	chr7	130	100	101M	=	10	-121	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:1	NM:i:84	MQ:i:100	UQ:i:1072
-pair_both_multihit	65	chr8	1	100	101M	=	101	101	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:2	NM:i:86	MQ:i:100	UQ:i:940
-pair_both_multihit	129	chr8	101	100	101M	=	1	-101	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	MC:Z:101M	PG:Z:0	RG:Z:0	HI:i:2	NM:i:81	MQ:i:100	UQ:i:1042
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_platform_unit.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_platform_unit.sam
deleted file mode 100644
index c594c8f..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_platform_unit.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:404
- at SQ	SN:chr8	LN:202
- at RG	ID:0	SM:Hi,Mom!	LB:my-library	PL:TRICORDER
- at RG	ID:1	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:2	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at PG	ID:1	PN:Hey!	VN:2.0
-both_reads_align_clip_marked	1107	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns	89	chr7	1	255	101M	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps	83	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:2	PG:Z:1	NM:i:8	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter	147	chr7	16	255	101M	=	21	-96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:1	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter	99	chr7	21	255	101M	=	16	96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:1	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_marked	163	chr7	302	255	101M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0	PG:Z:1	NM:i:5	MQ:i:255	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps	163	chr7	302	255	10M1D10M5I76M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:2	PG:Z:1	NM:i:6	MQ:i:255	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns	165	*	0	0	*	chr7	1	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:1	PG:Z:1	
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_queryname_sort_order.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_queryname_sort_order.sam
deleted file mode 100644
index 553ec81..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/invalid_queryname_sort_order.sam
+++ /dev/null
@@ -1,27 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:202
- at SQ	SN:chr8	LN:202
-SL-XAV:1:1:0:764#0/1	89	chr1	1	255	101M	*	0	0	TTCATGCTGANGCNCTCTTACGATCGTACAGATGCAAATATTAACANNCNTTNAAGNNCANNNNNNNNNCAATACAATANTAGAGTACGTNAACACTCCAN	&/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0&	RG:Z:0	XN:i:1
-SL-XAV:1:1:0:1668#0/2	153	chr2	1	255	101M	*	0	0	CATCTCTACANGCGCGTCCTACCAGACGCGCTTCCGATCTGAGAGCATACTTTTCATTGGATTCCAGCACAACTCCATTTTTGATCCACTNGACACCTTTN	(/,'-/'0////(1'&&1&&&&'2''-6/,/3-33653.6:1'.86/-++32.-4864653/5/583/346423203+28888644446688456/4880&	RG:Z:0	XN:i:1
-SL-XAV:1:1:0:1914#0/2	153	chr3	1	255	101M	*	0	0	CGTATGCGCTNTTTATGTCGCCCACAGTGCCTAGTATAGCCCCTGCTAATAAAAAGAGATGAATACGTTTACTTAAAAAACTGAAACTAGNAATGTGCAAN	(0,7&&*/*0*,)10/).-*&.&*/6669.&-337599;3,&,6/.,5::999987893+387020775777547999::668997448:::9;999::0&	RG:Z:0
-SL-XAV:1:1:0:1639#0/2	153	chr4	1	255	101M	*	0	0	CGTGATACCANCTCATGTTCACAGCCAAAGCCTGAAGCTGTCTATTATATTTCTCAACCATAAACTTTTGCCTCAGGCATCCGCAGAATGNTTTGCAGCCN	'.&.&&'.0+01'2(1'(''-)','+0041/.+032;:867115/5267-.0/)-5.&-26200224,,0+0/0275/5605688::646875568882*&	RG:Z:0
-SL-XAV:1:1:0:68#0/2	137	chr5	1	255	101M	*	0	0	NTCTCATTTANAAATGGTTATAAAAACATTTATGCTGAAAAGGTGAAGTTCATTAATGAACAGGCTGACTGTCTCACTATCGCGTTCGCANGACGTTATCT	&1<<999;;;;<<<87579:556972789977444.'.023.&,7621/54.49.)/53055-22--''+(.'-))6-168/(3&&0(<).))*&&&&&'0	RG:Z:0
-SL-XAV:1:1:0:700#0/2	137	chr6	1	255	101M	*	0	0	NAATTGTTCTNAGTTTCTCGGTTTATGTGCTCTTCCAGGTGGGTAACACAATAATGGCCTTCCAGATCGTAAGAGCGACGTGTGTTGCACNAGTGTCGATC	&0::887::::6/646::838388811/679:87640&./2+/-4/28:3,536/4''&&.78/(/554/./02*)*',-(57()&.6(6:(0601'/(,*	RG:Z:0
-SL-XAV:1:1:0:1721#0/1	83	chr7	1	255	101M	=	102	40	CAACAGAAGGNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCGAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-SL-XAV:1:1:0:1721#0/2	163	chr7	102	255	101M	=	1	-40	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-SL-XAV:1:1:0:105#0/2	147	chr8	1	255	101M	=	102	79	CACATCGTGANTCTTACAATCTGCGGTTTCAGATGTGGAGCGATGTGTGAGAGATTGAGCAACTGATCTGAAAAGCAGACACAGCTATTCNTAAGATGACN	/))3--/&*()&)&&+'++.'-&,(.))'4,)&'&&,')8,&&*'.&*0'225/&)3-8//)*,5-*).7851453583.3568526:863688:::85.&	RG:Z:0
-SL-XAV:1:1:0:105#0/1	99	chr8	102	255	101M	=	1	-79	NCAGGTTCAANTGTGCAGCCCNTTTTGAGAGATNNNNNNNNTGNNCTGNAANANNGACACAGCTATTCCTAAGATGACAAGATCAGANAANAAGTCAAGCA	&06665578::41.*/7577/&/77403-324.&&&&&&&&/.&&..&&.0&&&&',:9:/-/(55002020+3'12+2/&.2-&//&),&*&&&&&&&51	RG:Z:0
-SL-XAV:1:1:0:1300#0/1	77	*	0	0	*	*	0	0	NAAACACAAGNNANAGTCTTANCNGCTATTCCNNNNNNNNNCTNNNCTNAGNANNACATACAACAGTATCCACACAAGTGTACTCGTNCANACATGTGAAC	&*5535)*-,,&.&.*-1)*,&'&)&1&&.,)&&&&&&&&&)0&&&0'&&&&.&&*2'/4''0/**&)&,'-&*,&,&&&.0.&)&&&**&,.&&&')&&)	RG:Z:0
-SL-XAV:1:1:0:1300#0/2	141	*	0	0	*	*	0	0	NGATCATGGANGACTCTCCCCATCCCCCGCTCCAGCGCTCAGTTATATGCCTAGCCTCGGACACGTCACCAACATCTCACGCACTCTGCANAGTCTCTCAC	&&'+''3*&-/)/1'26/*-2-/542-*&-&/'/*/&-'&)-')&.'-/&&2+122*'&+,(/-&)((,/-,,.'2(2'+)/&/&-66-&&/16&)&*&'3	RG:Z:0
-SL-XAV:1:1:0:1639#0/1	101	*	0	0	*	chr1	1	0	NCCCTCTCAGNNTNTCTGCCANANCCTTAAGCNNNNNNNNNTANNNCTNAANCNNAAACTTTTGCCTCAGGCATCCGCAGAATGTTTNTCNGCCTATATCG	&1::::::64/&/&0:3.280&/&087881,/&&&&&&&&&..&&&..&,,&-&&,265341-)/5680&-.5552-25/322/42/&)&&).421&-&-/	RG:Z:0
-SL-XAV:1:1:0:1668#0/1	101	*	0	0	*	chr2	1	0	NATAGCATACNNTNCATTGGANTNCAGCACAANNNNNNNNNTGNNNCANTNNANNCCTTTGAGATCGGAAGAGCGGTTCAGCAGGAANNCNCAGACCGATC	&1988998890&0&.8863//&.&.0-2875.&&&&&&&&&.)&&&..&.&&.&&.5782-2+262)&-0-0510*.332-2.-,0*&&*&'.&-2-)0.,	RG:Z:0
-SL-XAV:1:1:0:1914#0/1	101	*	0	0	*	chr3	1	0	NTTTTTCTCCNNCNGTGCCTANTNTAGCCCCTNNNNNNNNNAANNNATNANNANNTTTACTTAAAAAACTGAAACTAGTAATGTGCANNANATCGNAAGAG	&0::::<<;90&/&.244760&,&.414798/&&&&&&&&&00&&&0.&/&&-&&.4475687363504.&.557/.*)65.&/*./&&.&.+*)&..).&	RG:Z:0
-SL-XAV:1:1:0:68#0/1	581	*	0	0	*	chr4	1	0	NAATATTCATNNGNTCAGCCTNTNCATTAATTNNNNNNNNNTTNNNATNATNANNTTTTTTATAACCATTTATAAATGAGAGAGATCNTANCACAATATCA	&0<<:::::</&&&.73'290&.&0;:::90&&&&&&&&&&..&&&0)&0-&0&&&.743799995253348597921.,.'050.*&.0&)*)&&&&*).	RG:Z:0
-SL-XAV:1:1:0:700#0/1	581	*	0	0	*	chr5	1	0	NGAAGCCCATNNTNGTGTTACNCNCCTGGAAGNNNNNNNNNACNNNGANACNTNNAACAATTCAGATCGGAAGAGCGGTTCAGCAGANNTNCCGAGACCGA	&.88888:88/&0&,03189.&/&.8/))12/&&&&&&&&&./&&&&.&1.&)&&/35962/6432-3&),0&/2+0,),61&-6,&&&'&/,.0&...)0	RG:Z:0
-SL-XAV:1:1:0:764#0/2	165	*	0	0	*	chr6	1	0	NACAGATGCANATATTAACAGGCTTTAAAGGACAGATGGACTGCAATACAATAATAGAGTACGTCAACACTCCACAGATCGCTAGAGCATNACATCGGTGT	&/:5358::9999::99998255::7275,,/5567-'+387537857:54-4.51'31059547320;73/720+22.4(6.;((.;(;8()(''&&2&&	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_no_oqs.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_no_oqs.sam
deleted file mode 100755
index efe2be2..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_no_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:REF	LN:1000
-A	99	REF	100	50	10M	=	200	100	CAACAGAAGC	)'.*.+2,))	MC:Z:5M1I4M
-A	147	REF	200	50	5M1I4M	=	100	-100	CAACAGAAGC	)'.*.+2,))	MC:Z:10M
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_oqs.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_oqs.sam
deleted file mode 100755
index 3782ad7..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/mate_cigar_and_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:REF	LN:1000
-A	99	REF	100	50	10M	=	200	100	CAACAGAAGC	)'.*.+2,))	MC:Z:5M1I4M	OQ:Z:IIIIIIIIII
-A	147	REF	200	50	5M1I4M	=	100	-100	CAACAGAAGC	)'.*.+2,))	MC:Z:10M	OQ:Z:IIIIIIIIII
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_fields.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_fields.sam
deleted file mode 100644
index a9c0bbf..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_fields.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	PL:illumina	PU:300TDAAXX090429.8	LB:Solexa-3536	DT:Wed Apr 29 00:00:00 EDT 2009	SM:CLONED Phi-X Control	CN:broad
-300TDAAXX090429:8:100:0:1001#0	589	*	0	0	*	*	0
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_platform_unit.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_platform_unit.sam
deleted file mode 100644
index c0fabd8..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/missing_platform_unit.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:101	UR:merger.fasta	M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ	SN:chr2	LN:101	UR:merger.fasta	M5:31c33e2155b3de5e2554b693c475b310
- at SQ	SN:chr3	LN:101	UR:merger.fasta	M5:631593c6dd2048ae88dcce2bd505d295
- at SQ	SN:chr4	LN:101	UR:merger.fasta	M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ	SN:chr5	LN:101	UR:merger.fasta	M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ	SN:chr6	LN:101	UR:merger.fasta	M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ	SN:chr7	LN:404	UR:merger.fasta	M5:da488fc432cdaf2c20c96da473a7b630
- at SQ	SN:chr8	LN:202	UR:merger.fasta	M5:d339678efce576d5546e88b49a487b63
- at RG	ID:H7U2W.1	PU:H7U2WADXX140408.1.AAGTAGAG	LB:Solexa-219641	PI:0	DT:2014-04-08T00:00:00-0400	SM:K-562	CN:BI
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/test_samfile_version_1pt5.bam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/test_samfile_version_1pt5.bam
deleted file mode 100644
index e8d2a70..0000000
Binary files a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/test_samfile_version_1pt5.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated.bam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated.bam
deleted file mode 100644
index bcef65a..0000000
Binary files a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_quals.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_quals.sam
deleted file mode 100644
index 34bd776..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_quals.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	PL:illumina	PU:300TDAAXX090429.8	LB:Solexa-3536	DT:Wed Apr 29 00:00:00 EDT 2009	SM:CLONED Phi-X Control	CN:broad
-300TDAAXX090429:8:100:0:1001#0	589	*	0	0	*	*	0	0	NNNNNNNNNNNNNNNNNNNNNNNNN	#########################	XN:i:1	RG:Z:0	SQ:H:07CCCBC186CA85D087CFC5D1D4CACCD6D3D1D0CDD30CD0D2D5
-300TDAAXX090429:8:100:0:1001#0	653	*	0	0	*	*	0	0	NNNNNNNNNNNNNNNNNNNNNNNNN	######################
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_tag.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_tag.sam
deleted file mode 100644
index ef4def1..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/truncated_tag.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	PL:illumina	PU:300TDAAXX090429.8	LB:Solexa-3536	DT:Wed Apr 29 00:00:00 EDT 2009	SM:CLONED Phi-X Control	CN:broad
-300TDAAXX090429:8:100:0:1001#0	589	*	0	0	*	*	0	0	NNNNNNNNNNNNNNNNNNNNNNNNN	#########################	XN:i:1	RG:Z:0	SQ:H:07CCCBC186CA85D087CFC5D1D4CACCD6D3D1D0CDD30CD0D2D5
-300TDAAXX090429:8:100:0:1001#0	653	*	0	0	*	*	0	0	NNNNNNNNNNNNNNNNNNNNNNNNN	#########################	XN:i:
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/valid.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/valid.sam
deleted file mode 100644
index 15ffe09..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/valid.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:404
- at SQ	SN:chr8	LN:202
- at RG	ID:0	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:1	SM:Hi,Mom!	LB:my-library	PL:ILLUMINA
- at RG	ID:2	SM:Hi,Mom!	LB:my-library	PL:Illumina
- at PG	ID:1	PN:Hey!	VN:2.0
-both_reads_align_clip_marked	1107	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	PG:Z:1	NM:i:0	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns	89	chr7	1	255	101M	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:3	MQ:i:255	XT:Z:foo	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps	83	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:2	PG:Z:1	NM:i:8	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter	147	chr7	16	255	101M	=	21	-96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:1	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter	99	chr7	21	255	101M	=	16	96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:1	PG:Z:1	NM:i:1	MQ:i:255	XT:Z:foo2	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_marked	163	chr7	302	255	101M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0	PG:Z:1	NM:i:5	MQ:i:255	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps	163	chr7	302	255	10M1D10M5I76M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:2	PG:Z:1	NM:i:6	MQ:i:255	OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns	165	*	0	0	*	chr7	1	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:1	PG:Z:1	
diff --git a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/zero_length_read.sam b/src/test/resources/htsjdk/samtools/ValidateSamFileTest/zero_length_read.sam
deleted file mode 100644
index 50d2fe4..0000000
--- a/src/test/resources/htsjdk/samtools/ValidateSamFileTest/zero_length_read.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	PL:illumina	PU:300TDAAXX090429.8	LB:Solexa-3536	DT:Wed Apr 29 00:00:00 EDT 2009	SM:CLONED Phi-X Control	CN:broad
-300TDAAXX090429:8:100:0:1001#0	589	*	0	0	*	*	0	0	
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/block_compressed.sam.gz b/src/test/resources/htsjdk/samtools/block_compressed.sam.gz
deleted file mode 100644
index d948382..0000000
Binary files a/src/test/resources/htsjdk/samtools/block_compressed.sam.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/compressed.bam b/src/test/resources/htsjdk/samtools/compressed.bam
deleted file mode 100644
index 9d20ade..0000000
Binary files a/src/test/resources/htsjdk/samtools/compressed.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/compressed.sam.gz b/src/test/resources/htsjdk/samtools/compressed.sam.gz
deleted file mode 100644
index bf84cd8..0000000
Binary files a/src/test/resources/htsjdk/samtools/compressed.sam.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/coordinate_sorted.sam b/src/test/resources/htsjdk/samtools/coordinate_sorted.sam
deleted file mode 100755
index 00942a9..0000000
--- a/src/test/resources/htsjdk/samtools/coordinate_sorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at RG	ID:0	SM:Hi,Mom!
-B	99	chr1	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	99	chr1	2	255	10M	=	15	30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	147	chr1	15	255	10M	=	2	-30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	147	chr1	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-A	73	chr2	1	255	10M	*	0	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	99	chr2	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	147	chr2	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	99	chr3	1	255	10M	=	25	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	147	chr3	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-A	133	*	0	0	*	chr2	1	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram
deleted file mode 100644
index 59f11d2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram.bai b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram.bai
deleted file mode 100644
index fcb31fc..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.dict b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.dict
deleted file mode 100644
index 7f41717..0000000
--- a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.dict
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD	VN:1.4	SO:unsorted
- at SQ	SN:Shelly	LN:20	M5:7ddd8a4b4f2c1dec43476a738b1a9b72	UR:file:/Users/edwardk/Documents/htsjdk/testdata/htsjdk/samtools/cram/auxf.fa
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa
deleted file mode 100644
index 63e0c92..0000000
--- a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->Shelly
-GCTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa.fai b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa.fai
deleted file mode 100644
index 3deea7f..0000000
--- a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-Shelly	20	8	20	21
diff --git a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fasta b/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fasta
deleted file mode 100644
index 11d25dd..0000000
--- a/src/test/resources/htsjdk/samtools/cram/CRAMException/testContigNotInRef.fasta
+++ /dev/null
@@ -1,2 +0,0 @@
->Sheila
-GCTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram
deleted file mode 100644
index 96ca860..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram.crai b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram.crai
deleted file mode 100644
index 1ca5df2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram.crai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram
deleted file mode 100644
index 4c74ab9..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram.crai b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram.crai
deleted file mode 100644
index 3fee0e2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram.crai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram
deleted file mode 100644
index fbfbbf7..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram.crai b/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram.crai
deleted file mode 100644
index b50f3ce..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram.crai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf#values.2.1.cram b/src/test/resources/htsjdk/samtools/cram/auxf#values.2.1.cram
deleted file mode 100644
index bf81b01..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/auxf#values.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram b/src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram
deleted file mode 100644
index f4d35b6..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/auxf#values.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf#values.sam b/src/test/resources/htsjdk/samtools/cram/auxf#values.sam
deleted file mode 100644
index 4e0902f..0000000
--- a/src/test/resources/htsjdk/samtools/cram/auxf#values.sam
+++ /dev/null
@@ -1,5 +0,0 @@
- at HD	VN:1.4	SO:unsorted
- at SQ	SN:Sheila	LN:20
- at RG	ID:ID	SM:foo
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	RG:Z:ID	A!:A:!	Ac:A:c	AC:A:C	I0:i:0	I1:i:1	I2:i:127	I3:i:128	I4:i:255	I5:i:256	I6:i:32767	I7:i:32768	I8:i:65535	I9:i:65536	IA:i:2147483647	i1:i:-1	i2:i:-127	i3:i:-128	i4:i:-255	i5:i:-256	i6:i:-32767	i7:i:-32768	i8:i:-65535	i9:i:-65536	iA:i:-2147483647	iB:i:-2147483648	F0:f:-1	F1:f:0	F2:f:1	F3:f:9.9e-19	F4:f:-9.9e-19	F5:f:9.9e+19	F6:f:-9.9e+19	H0:H:AA	H1:H:dead00beef	Z0:Z:space space
-Jim	16	Sheila	11	11	10M	*	0	0	AAAAAAAAAA	*	BC:B:C,0,127,128,255	Bc:B:c,-128,-127,0,127	BS:B:S,0,32767,32768,65535	Bs:B:s,-32768,-32767,0,32767	BI:B:I,0,2147483647,2147483648,4294967295	Bi:B:i,-2147483648,-2147483647,0,2147483647
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa b/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa
deleted file mode 100644
index 1089240..0000000
--- a/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->Sheila
-CTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa.fai b/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa.fai
deleted file mode 100644
index 5709288..0000000
--- a/src/test/resources/htsjdk/samtools/cram/auxf.alteredForMD5test.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-Sheila	19	8	19	20
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf.fa b/src/test/resources/htsjdk/samtools/cram/auxf.fa
deleted file mode 100644
index 11d25dd..0000000
--- a/src/test/resources/htsjdk/samtools/cram/auxf.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->Sheila
-GCTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/auxf.fa.fai b/src/test/resources/htsjdk/samtools/cram/auxf.fa.fai
deleted file mode 100644
index f3cdedb..0000000
--- a/src/test/resources/htsjdk/samtools/cram/auxf.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-Sheila	20	8	20	21
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#bounds.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#bounds.2.1.cram
deleted file mode 100644
index ee44c86..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#bounds.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#bounds.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#bounds.3.0.cram
deleted file mode 100644
index cc96487..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#bounds.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#bounds.sam b/src/test/resources/htsjdk/samtools/cram/c1#bounds.sam
deleted file mode 100644
index 181dbe0..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#bounds.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at SQ	SN:c1	LN:10
-s0	0	c1	1	0	10M	*	0	0	AACCGCGGTT	**********
-s1	0	c1	2	0	10M	*	0	0	ACCGCGGTTC	**********
-s2	0	c1	3	0	10M	*	0	0	CCGCGGTTCG	**********
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#clip.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#clip.2.1.cram
deleted file mode 100644
index 66d010c..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#clip.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#clip.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#clip.3.0.cram
deleted file mode 100644
index 0a4bc16..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#clip.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#clip.sam b/src/test/resources/htsjdk/samtools/cram/c1#clip.sam
deleted file mode 100644
index fd073f0..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#clip.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at SQ	SN:c1	LN:10
-s0a	0	c1	1	0	10M	*	0	0	AACCGCGGTT	**********
-s0A	0	c1	1	0	3M4N3M	*	0	0	AACGTT	******
-s0b	0	c1	2	0	1S8M1S	*	0	0	AACCGCGGTT	**********
-s0B	0	c1	2	0	1H8M1H	*	0	0	ACCGCGGT	********
-s0c	0	c1	3	0	2S6M2S	*	0	0	AACCGCGGTT	**********
-s0c	0	c1	3	0	2S3M2I3M2S	*	0	0	AACCGNNCGGTT	************
-s0C	0	c1	3	0	2H6M2H	*	0	0	CCGCGG	******
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#noseq.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#noseq.2.1.cram
deleted file mode 100644
index 6e8aefb..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#noseq.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#noseq.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#noseq.3.0.cram
deleted file mode 100644
index 7db8639..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#noseq.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#noseq.sam b/src/test/resources/htsjdk/samtools/cram/c1#noseq.sam
deleted file mode 100644
index fda58c2..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#noseq.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ	SN:c1	LN:10
-sq1	0	c1	1	0	10M	*	0	0	AACCGCGGTT	**********	MD:Z:10	NM:i:0
-sQ1	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*	MD:Z:10	NM:i:0
-SQ1	0	c1	1	0	10M	*	0	0	*	*	MD:Z:10	NM:i:0
-sq2	0	c1	1	0	4M1D5M	*	0	0	AACCCGGTT	*********	MD:Z:4^G5	NM:i:1
-sQ2	0	c1	1	0	4M1D5M	*	0	0	AACCCGGTT	*	MD:Z:4^G5	NM:i:1
-SQ2	0	c1	1	0	4M1D5M	*	0	0	*	*	MD:Z:4^G5	NM:i:1
-sq3	4	c1	1	0	*	*	0	0	AACCCGGTT	*********
-sQ3	4	c1	1	0	*	*	0	0	AACCCGGTT	*
-SQ3	4	c1	1	0	*	*	0	0	*	*
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad1.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad1.2.1.cram
deleted file mode 100644
index 4fe23b6..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad1.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad1.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad1.3.0.cram
deleted file mode 100644
index cfcf220..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad1.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad1.sam b/src/test/resources/htsjdk/samtools/cram/c1#pad1.sam
deleted file mode 100644
index 54f7a11..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#pad1.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ	SN:c1	LN:10
-s0a	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s0b	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s0c	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s1	0	c1	1	0	5M6I5M	*	0	0	AACCGGTTAACCGGTT	*
-s2	0	c1	1	0	5M1P4I1P5M	*	0	0	AACCGTTAACGGTT	*
-s3	0	c1	1	0	5M3I3P5M	*	0	0	AACCGGTTCGGTT	*
-s4	0	c1	1	0	5M3P3I5M	*	0	0	AACCGAACCGGTT	*
-s5	0	c1	1	0	4M1D2P2I2P1D4M	*	0	0	AACCTAGGTT	*
-s6	0	c1	1	0	2M3D6I3D2M	*	0	0	AAGTTAACTT	*
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad2.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad2.2.1.cram
deleted file mode 100644
index 5b8a3a2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad2.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad2.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad2.3.0.cram
deleted file mode 100644
index 3fbc8f3..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad2.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad2.sam b/src/test/resources/htsjdk/samtools/cram/c1#pad2.sam
deleted file mode 100644
index 66da374..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#pad2.sam
+++ /dev/null
@@ -1,14 +0,0 @@
- at SQ	SN:c1	LN:10
-s0a	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s0b	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s0c	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s0d	0	c1	1	0	10M	*	0	0	AACCGCGGTT	*
-s1	0	c1	1	0	5M6I5M	*	0	0	AACCGGTTAACCGGTT	*
-s2	0	c1	1	0	5M1P4I1P5M	*	0	0	AACCGTTAACGGTT	*
-s3	0	c1	1	0	5M3I3P5M	*	0	0	AACCGGTTCGGTT	*
-s4	0	c1	1	0	5M3P3I5M	*	0	0	AACCGAACCGGTT	*
-s5	0	c1	1	0	4M1D2P2I2P1D4M	*	0	0	AACCTAGGTT	*
-s6	0	c1	1	0	2M3D6I3D2M	*	0	0	AAGTTAACTT	*
-s7	0	c1	1	0	4M2D4M	*	0	0	AACCGGTT	*
-s8	0	c1	1	0	5D2P2I2P5D	*	0	0	TA	*
-s9	0	c1	5	0	1M2P2I2P	*	0	0	GTA	*
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad3.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad3.2.1.cram
deleted file mode 100644
index 6690038..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad3.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad3.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#pad3.3.0.cram
deleted file mode 100644
index c48ac8b..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#pad3.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#pad3.sam b/src/test/resources/htsjdk/samtools/cram/c1#pad3.sam
deleted file mode 100644
index c77da85..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#pad3.sam
+++ /dev/null
@@ -1,14 +0,0 @@
- at SQ	SN:c1	LN:10
- at RG	ID:p.sam	SM:unknown	LB:p.sam
-s0a	0	c1	6	0	5I6P5M	*	0	0	AACCGCGGTT	*	RG:Z:p.sam
-s0b	0	c1	6	0	5I6P5M	*	0	0	AACCGCGGTT	*	RG:Z:p.sam
-s0c	0	c1	6	0	5I6P5M	*	0	0	AACCGCGGTT	*	RG:Z:p.sam
-s0d	0	c1	6	0	5I6P5M	*	0	0	AACCGCGGTT	*	RG:Z:p.sam
-s1	0	c1	6	0	11I5M	*	0	0	AACCGGTTAACCGGTT	*	RG:Z:p.sam
-s2	0	c1	6	0	5I1P4I1P5M	*	0	0	AACCGTTAACGGTT	*	RG:Z:p.sam
-s3	0	c1	6	0	8I3P5M	*	0	0	AACCGGTTCGGTT	*	RG:Z:p.sam
-s4	0	c1	6	0	5I3P3I5M	*	0	0	AACCGAACCGGTT	*	RG:Z:p.sam
-s5	0	c1	6	0	4I3P2I2P1D4M	*	0	0	AACCTAGGTT	*	RG:Z:p.sam
-s6	0	c1	6	0	2I3P6I3D2M	*	0	0	AAGTTAACTT	*	RG:Z:p.sam
-s7	0	c1	6	0	4I7P1D4M	*	0	0	AACCGGTT	*	RG:Z:p.sam
-s8	0	c1	6	0	7P2I2P	*	0	0	TA	!!	RG:Z:p.sam
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#unknown.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c1#unknown.2.1.cram
deleted file mode 100644
index c6fdcca..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#unknown.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#unknown.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c1#unknown.3.0.cram
deleted file mode 100644
index a90e703..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c1#unknown.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c1#unknown.sam b/src/test/resources/htsjdk/samtools/cram/c1#unknown.sam
deleted file mode 100644
index 1f1616a..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1#unknown.sam
+++ /dev/null
@@ -1,9 +0,0 @@
- at SQ	SN:c1	LN:10
- at CO	Tests permuations of seq / qual being present or "*" in mapped
- at CO	and unmapped forms.  Also tests MD/NM tag generation.
-_sqm	0	c1	1	0	2M1I4M1D3M	*	0	0	AACCCTCGTT	IIIIIIIIII	MD:Z:4G1^G3	NM:i:3
-_sm	0	c1	1	0	2M1I4M1D3M	*	0	0	AACCCTCGTT	*	MD:Z:4G1^G3	NM:i:3
-_m	0	c1	1	0	2M1I4M1D3M	*	0	0	*	*	MD:Z:4G1^G3	NM:i:3
-_squ	4	c1	1	0	*	*	0	0	AACCCTCGTT	IIIIIIIIII
-_su	4	c1	1	0	*	*	0	0	AACCCTCGTT	*
-_u	4	c1	1	0	*	*	0	0	*	*
diff --git a/src/test/resources/htsjdk/samtools/cram/c1.fa b/src/test/resources/htsjdk/samtools/cram/c1.fa
deleted file mode 100644
index 12c54c9..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->c1
-AACCGCGGTT
diff --git a/src/test/resources/htsjdk/samtools/cram/c1.fa.fai b/src/test/resources/htsjdk/samtools/cram/c1.fa.fai
deleted file mode 100644
index fc35bec..0000000
--- a/src/test/resources/htsjdk/samtools/cram/c1.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-c1	10	4	10	11
diff --git a/src/test/resources/htsjdk/samtools/cram/c2#pad.2.1.cram b/src/test/resources/htsjdk/samtools/cram/c2#pad.2.1.cram
deleted file mode 100644
index 12ce718..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c2#pad.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/c2#pad.3.0.cram b/src/test/resources/htsjdk/samtools/cram/c2#pad.3.0.cram
deleted file mode 100644
index e069a6b..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/c2#pad.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#1.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#1.2.1.cram
deleted file mode 100644
index 6931cdd..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#1.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#1.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#1.3.0.cram
deleted file mode 100644
index 4b55413..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#1.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#1.sam b/src/test/resources/htsjdk/samtools/cram/ce#1.sam
deleted file mode 100644
index 4376deb..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#1.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
-SRR065390.14978392	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	AS:i:-18	XS:i:-18	YT:Z:UU
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#2.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#2.2.1.cram
deleted file mode 100644
index 6c74ef5..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#2.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#2.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#2.3.0.cram
deleted file mode 100644
index 21ff68e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#2.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#2.sam b/src/test/resources/htsjdk/samtools/cram/ce#2.sam
deleted file mode 100644
index 8a4eead..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#2.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
-SRR065390.14978392	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-SRR065390.921023	16	CHROMOSOME_I	3	12	100M	*	0	0	CTAAGCCTAAATCTAAGCCTAACCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###############################################???88:;98768700000<>:BBA?BBAB?BBBBBBBB>B>BB::;?:00000	XG:i:0	XM:i:3	XN:i:0	XO:i:0	AS:i:-6	XS:i:-13	YT:Z:UU
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#5.2.1.cram
deleted file mode 100644
index bb075f7..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#5.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#5.3.0.cram
deleted file mode 100644
index 2a2f292..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#5.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5.sam b/src/test/resources/htsjdk/samtools/cram/ce#5.sam
deleted file mode 100644
index 0535065..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#5.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
- at SQ	SN:CHROMOSOME_II	LN:5000
- at SQ	SN:CHROMOSOME_III	LN:5000
- at SQ	SN:CHROMOSOME_IV	LN:5000
- at SQ	SN:CHROMOSOME_V	LN:5000
-I	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-II.14978392	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-III	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-IV	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-V	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-VI	2048	CHROMOSOME_I	2	1	27M100000D73M	*	0	0	ACTAAGCCTAAGCCTAAGCCTAAGCCAATTATCGATTTCTGAAAAAATTATCGAATTTTCTAGAAATTTTGCAAATTTTTTCATAAAATTATCGATTTTA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5b.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#5b.2.1.cram
deleted file mode 100644
index 313f76d..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#5b.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5b.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#5b.3.0.cram
deleted file mode 100644
index cda2aff..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#5b.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#5b.sam b/src/test/resources/htsjdk/samtools/cram/ce#5b.sam
deleted file mode 100644
index f778394..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#5b.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
- at SQ	SN:CHROMOSOME_II	LN:5000
- at SQ	SN:CHROMOSOME_III	LN:5000
- at SQ	SN:CHROMOSOME_IV	LN:5000
- at SQ	SN:CHROMOSOME_V	LN:5000
-I	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-II.14978392	16	CHROMOSOME_II	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-III	16	CHROMOSOME_III	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-IV	16	CHROMOSOME_IV	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-V	16	CHROMOSOME_V	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	XS:i:-18	AS:i:-18	YT:Z:UU
-VI	0	CHROMOSOME_V	10	1	7S20M1D23M10I30M10S	*	0	0	AGCCTAAGCCTAAGCCTAAGCCTAAGCTAAGCCTAAGCCTAAGCCTAAGCTTTTTTTTTTCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	*
-VI	256	CHROMOSOME_V	10	1	7S20M1D23M10I30M10S	*	0	0	*	*
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#large_seq.2.1.cram
deleted file mode 100644
index 0041c19..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#large_seq.3.0.cram
deleted file mode 100644
index 472234e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.sam b/src/test/resources/htsjdk/samtools/cram/ce#large_seq.sam
deleted file mode 100644
index 7df381d..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#large_seq.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
-S1	0	CHROMOSOME_I	1	255	36M4I33M2D18M4I13M3I5M2I7M1I8M4I30M1D20M5D25M4D63M1D31M2I13M4I83M3I36M4D77M2D8M2D5M2D14M2I5M4D1M1D27M5I3M4D47M2D5M4D7M1I70M3D42M4I59M5I2M2I13M4D3M5D6M4I5M4I58M1I10M3I57M1I15M5D57M4I10M1I19M4D9M3I27M4D11M3I9M4I21M4I62M4I51M1I8M3D23M1I5M4I24M2D1M5I4M4D14M3D63M5I1M2I20M4D10M5D7M2D22M4I22M2I9M3I46M5I1M4D12M5D8M3D17M5D149M1D20M1D61M1I14M2I38M4D9M4I62M1I8M1I55M3D62M4I8M4I50M5D19M3D11M2I53M4D7M2D32M2D57M3I48M2D11M4D15M1I23M2D16M5I7M1I3M1D27M5D4M1I18M1D79M5D1M5D8M5D20M1D2 [...]
-V	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#supp.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#supp.2.1.cram
deleted file mode 100644
index 1215d49..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#supp.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#supp.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#supp.3.0.cram
deleted file mode 100644
index 5f8aae5..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#supp.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#supp.sam b/src/test/resources/htsjdk/samtools/cram/ce#supp.sam
deleted file mode 100644
index 666e774..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#supp.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at SQ	SN:CHROMOSOME_I	LN:1009800
- at CO	Test supplementary reads, for CRAM
-supp	99	CHROMOSOME_I	100	1	50M50S	*	0	0	TAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTACCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC	*
-supp	2147	CHROMOSOME_I	200	1	50H50M	*	0	0	CCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC	*
-supp	2195	CHROMOSOME_I	500	1	50M50H	*	0	0	TTTTAGTGAAGCTTCTAGATATTTGGCGGGTACCTCTAATTTTGCCTGCC	*
-supp	147	CHROMOSOME_I	600	1	50S50M	*	0	0	TTTTAGTGAAGCTTCTAGATATTTGGCGGGTACCTCTAATTTTGCCTGCCAGCCTAATACTAAGCCTAAGCCTAAGACTAAGCCTAATACTAAGCCTAAG	*
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.2.1.cram
deleted file mode 100644
index b340b0e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.3.0.cram
deleted file mode 100644
index cffd9b6..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.sam b/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.sam
deleted file mode 100644
index 2026dd7..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#tag_depadded.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.4	SO:coordinate
- at RG	ID:UNKNOWN	SM:unknown	LB:UNKNOWN
- at SQ	SN:CHROMOSOME_I	LN:1009800
-I	16	CHROMOSOME_I	2	1	100M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:27;28;+;STOP;Note=tag1
-II.14978392	16	CHROMOSOME_I	2	1	100M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:27;27;+;PRIM;Note=tag2|28;28;+;OLIG;Note=tag3
-III	0	CHROMOSOME_I	2	1	27M1I73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTCAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###########################"##@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:1;1;+;COMM|101;101;+;COMM
-IV	16	CHROMOSOME_I	2	1	100M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-V	0	CHROMOSOME_I	2	1	100M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-*	768	CHROMOSOME_I	2	255	1M	*	0	0	*	*	CT:Z:+;STOP
-*	768	CHROMOSOME_I	28	255	2M	*	0	0	*	*	CT:Z:+;COMM;Note=consensus%0Amulti%09line%0Atag%0A!"#$%25^&*()_+<>?:@~{}%7C%0A1234567890-=[]'%3B#,./\
-*	768	CHROMOSOME_I	101	255	1M	*	0	0	*	*	CT:Z:+;STOP
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.2.1.cram
deleted file mode 100644
index e49f4d1..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.3.0.cram
deleted file mode 100644
index e036ddd..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.sam b/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.sam
deleted file mode 100644
index 47a57c2..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#tag_padded.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD	VN:1.4	SO:coordinate
- at RG	ID:UNKNOWN	SM:unknown	LB:UNKNOWN
- at SQ	SN:CHROMOSOME_I	LN:1009800
-I	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:27;29;+;STOP;Note=tag1
-II.14978392	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:27;27;+;PRIM;Note=tag2|29;29;+;OLIG;Note=tag3
-III	0	CHROMOSOME_I	2	1	101M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTCAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###########################"##@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	PT:Z:1;1;+;COMM|101;101;+;COMM
-IV	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-V	0	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-*	768	CHROMOSOME_I	2	255	1M	*	0	0	*	*	CT:Z:+;STOP
-*	768	CHROMOSOME_I	28	255	3M	*	0	0	*	*	CT:Z:+;COMM;Note=consensus%0Amulti%09line%0Atag%0A!"#$%25^&*()_+<>?:@~{}%7C%0A1234567890-=[]'%3B#,./\
-*	768	CHROMOSOME_I	102	255	1M	*	0	0	*	*	CT:Z:+;STOP
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap.2.1.cram
deleted file mode 100644
index e08f9a2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap.3.0.cram
deleted file mode 100644
index 5ddcbf1..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap.sam b/src/test/resources/htsjdk/samtools/cram/ce#unmap.sam
deleted file mode 100644
index fec218c..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#unmap.sam
+++ /dev/null
@@ -1,6 +0,0 @@
-I	4	*	0	1	*	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-II	4	*	0	1	*	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-III	4	*	0	1	*	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-IV	4	*	0	1	*	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-V	4	*	0	1	*	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-VI	4	*	0	1	*	*	0	0	ACTAAGCCTAAGCCTAAGCCTAAGCCAATTATCGATTTCTGAAAAAATTATCGAATTTTCTAGAAATTTTGCAAATTTTTTCATAAAATTATCGATTTTA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap1.2.1.cram
deleted file mode 100644
index 30f4aac..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap1.3.0.cram
deleted file mode 100644
index cab813b..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.sam b/src/test/resources/htsjdk/samtools/cram/ce#unmap1.sam
deleted file mode 100644
index e1e464e..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#unmap1.sam
+++ /dev/null
@@ -1,20 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:CHROMOSOME_I	LN:1009800
- at SQ	SN:CHROMOSOME_II	LN:5000
- at SQ	SN:CHROMOSOME_III	LN:5000
- at SQ	SN:CHROMOSOME_IV	LN:5000
- at SQ	SN:CHROMOSOME_V	LN:5000
- at SQ	SN:CHROMOSOME_X	LN:5000
- at SQ	SN:CHROMOSOME_MtDNA	LN:5000
- at RG	ID:UNKNOWN	SM:UNKNOWN
- at PG	ID:bowtie2	PN:bowtie2	VN:2.0.0-beta5
-SRR065390.33808391	4	*	0	0	*	*	0	0	GATCGCACTGAAAATCTGGATATAGAACGTGTGCAAATGATTGTCTCTACCGTTCCGTAAAAATTATTGCTAATTAGCAATGATTTTAAGCTAATTAGTT	CCCCCCCCCCCCCCCCCCCACCCCCACCCCCCCCCCCCB;CCCAACCCCCCCCCCCCCD=B9BCABCBCB>BBBC at B<<@BA;BCC?B>A<<@(?:4==4	YT:Z:UU
-SRR065390.33808433	4	*	0	0	*	*	0	0	NCATCTTCTGCAGGCGCGGTCGGCACCGTGTATTCGTTACGTTCCACGCCGATGATATTAGACACCAGCACGGTGTGATGCGCAGTCACCGCACGACCCG	!###################################################################################################	YT:Z:UU
-SRR065390.33808462	4	*	0	0	*	*	0	0	NGTTTGAGCGCAATGACTTGACGATGACCGGTGATTACAGTAACCAGCATATTGTGCCGATGAAGCAGGCTGTCGCTCCGCAATTTGAAGAGGGACACGA	!###################################################################################################	YT:Z:UU
-SRR065390.33808468	4	*	0	0	*	*	0	0	NGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTTTATTTTACTCTCTGTGGCTTTATCGATTATTTTTTTCTCCTTGGCTTTCCTCTTTATTTTT	!))))))''&585555AAAAA6AA############################################################################	YT:Z:UU
-SRR065390.33808471	4	*	0	0	*	*	0	0	NCGTCTTCTGCGGTTTCTATGATAGAGCAATTCTGTGGCGGATATTAAGATAACGGGTATCTGTTCTTTAATGATGCCGCAAAAAATGGAAAGTTAAGAA	!###################################################################################################	YT:Z:UU
-SRR065390.33808489	4	*	0	0	*	*	0	0	NGGAAATTCTGCGGTATCGAGAGATATTTGCCTTTAATTACCCCATAGCCGATTAACATCCCGGCACTATTAATCATTTCAATATTATCAATCACAAAGT	!###################################################################################################	YT:Z:UU
-SRR065390.33808504	4	*	0	0	*	*	0	0	NTGGAACACCATGCCCACTTTCGCACGCAGCAGGGCGATATCCTGAGAGTTGGTCAGGATGTTGTCGCCATCAAGCAGAATTTCACCTTCCGCACGCTGC	!###################################################################################################	YT:Z:UU
-SRR065390.33808511	4	*	0	0	*	*	0	0	NCAGAAATATATTGAACTTTTGAAACATGTCCCAACTTTTTTTTTTTTTAGAACACGTTGGCTGGTTTTTCAAGTTTTGAATACTTTTTAGGTTTTTTTG	!***()(+++AAAAAAAAAA:78:8318::AAAAAAAAAAAA##########################################################	YT:Z:UU
-SRR065390.33808521	4	*	0	0	*	*	0	0	NTGTCAATACATTGTAAGGATTTCCCATTATGTCAATACATAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATTTCGTATGTCGTGTTTCTTT	!###################################################################################################	YT:Z:UU
-SRR065390.33808523	4	*	0	0	*	*	0	0	NTACTTCTTACAAGATTTTTATCGCTACTTGAAAAAAATTCATCAACATAATCGCCATGACTATCTGCACCGTGAGTATGATAAGCAGCAACTCTATCTG	!***+--,')AAAA778577A72AA50888AAAAAAA72A88858AAAA77AAAAAA7AAAAAAAAA8AA##############################	YT:Z:UU
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.2.1.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap2.2.1.cram
deleted file mode 100644
index bc5bf5b..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.3.0.cram b/src/test/resources/htsjdk/samtools/cram/ce#unmap2.3.0.cram
deleted file mode 100644
index 03c638a..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.sam b/src/test/resources/htsjdk/samtools/cram/ce#unmap2.sam
deleted file mode 100644
index d002a34..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce#unmap2.sam
+++ /dev/null
@@ -1,29 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:CHROMOSOME_I	LN:1009800
- at SQ	SN:CHROMOSOME_II	LN:5000
- at SQ	SN:CHROMOSOME_III	LN:5000
- at SQ	SN:CHROMOSOME_IV	LN:5000
- at SQ	SN:CHROMOSOME_V	LN:5000
- at SQ	SN:CHROMOSOME_X	LN:5000
- at SQ	SN:CHROMOSOME_MtDNA	LN:5000
- at RG	ID:UNKNOWN	SM:UNKNOWN
- at PG	ID:bowtie2	PN:bowtie2	VN:2.0.0-beta5
-SRR065390.14978392	16	CHROMOSOME_I	2	1	27M1D73M	*	0	0	CCTAGCCCTAACCCTAACCCTAACCCTAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#############################@B?8B?BA@@DDBCDDCBC at CDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:1	XM:i:5	XN:i:0	XO:i:1	AS:i:-18	XS:i:-18	YT:Z:UU
-SRR065390.921023	16	CHROMOSOME_I	3	12	100M	*	0	0	CTAAGCCTAAATCTAAGCCTAACCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###############################################???88:;98768700000<>:BBA?BBAB?BBBBBBBB>B>BB::;?:00000	XG:i:0	XM:i:3	XN:i:0	XO:i:0	AS:i:-6	XS:i:-13	YT:Z:UU
-SRR065390.1871511	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	<?@<@A8>0:BB@>B<=B@???@=8 at B>BB at CA@DACDCBBCCCA at CCCCACCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.3743423	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	##################?6@:7<=@3=@ABAAB>BDBBABADABDDDBDDBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.4251890	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###########@BB=BCBBC?B>B;>B@@ADBBB at DBBBBDCCBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.5238868	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	@,=@@D8D;?BBB>;?BBB==BB at D;>D>BBB>BBDDB<DABADCACDCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.6023338	0	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAAGCTAC	CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC at CCDDDBCCABB=DABBA?################	XG:i:0	XM:i:3	XN:i:0	XO:i:0	AS:i:-6	XS:i:-6	YT:Z:UU
-SRR065390.6815812	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###############?@.@?B;B0B=;<DADB@@BDDBBDDBCBCBD at CCDCCCCCCCDCCCCCCCCACCCCCCCCCCBCCCCCCDCCCCCCCCCCCBCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.6905811	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	#######################BB@>A<BC>@@BCCB@=BACBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.8289592	16	CHROMOSOME_I	3	1	100M	*	0	0	CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA	###############################A?@C9@@BC=AABDD at A@DC at CB=@BA?6 at CCAAC@+CCCCCCCCCCCCCCC at CCCCCCCCCCCCCCCC	XG:i:0	XM:i:0	XN:i:0	XO:i:0	AS:i:0	XS:i:0	YT:Z:UU
-SRR065390.33808391	4	*	0	0	*	*	0	0	GATCGCACTGAAAATCTGGATATAGAACGTGTGCAAATGATTGTCTCTACCGTTCCGTAAAAATTATTGCTAATTAGCAATGATTTTAAGCTAATTAGTT	CCCCCCCCCCCCCCCCCCCACCCCCACCCCCCCCCCCCB;CCCAACCCCCCCCCCCCCD=B9BCABCBCB>BBBC at B<<@BA;BCC?B>A<<@(?:4==4	YT:Z:UU
-SRR065390.33808433	4	*	0	0	*	*	0	0	NCATCTTCTGCAGGCGCGGTCGGCACCGTGTATTCGTTACGTTCCACGCCGATGATATTAGACACCAGCACGGTGTGATGCGCAGTCACCGCACGACCCG	!###################################################################################################	YT:Z:UU
-SRR065390.33808462	4	*	0	0	*	*	0	0	NGTTTGAGCGCAATGACTTGACGATGACCGGTGATTACAGTAACCAGCATATTGTGCCGATGAAGCAGGCTGTCGCTCCGCAATTTGAAGAGGGACACGA	!###################################################################################################	YT:Z:UU
-SRR065390.33808468	4	*	0	0	*	*	0	0	NGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTTTATTTTACTCTCTGTGGCTTTATCGATTATTTTTTTCTCCTTGGCTTTCCTCTTTATTTTT	!))))))''&585555AAAAA6AA############################################################################	YT:Z:UU
-SRR065390.33808471	4	*	0	0	*	*	0	0	NCGTCTTCTGCGGTTTCTATGATAGAGCAATTCTGTGGCGGATATTAAGATAACGGGTATCTGTTCTTTAATGATGCCGCAAAAAATGGAAAGTTAAGAA	!###################################################################################################	YT:Z:UU
-SRR065390.33808489	4	*	0	0	*	*	0	0	NGGAAATTCTGCGGTATCGAGAGATATTTGCCTTTAATTACCCCATAGCCGATTAACATCCCGGCACTATTAATCATTTCAATATTATCAATCACAAAGT	!###################################################################################################	YT:Z:UU
-SRR065390.33808504	4	*	0	0	*	*	0	0	NTGGAACACCATGCCCACTTTCGCACGCAGCAGGGCGATATCCTGAGAGTTGGTCAGGATGTTGTCGCCATCAAGCAGAATTTCACCTTCCGCACGCTGC	!###################################################################################################	YT:Z:UU
-SRR065390.33808511	4	*	0	0	*	*	0	0	NCAGAAATATATTGAACTTTTGAAACATGTCCCAACTTTTTTTTTTTTTAGAACACGTTGGCTGGTTTTTCAAGTTTTGAATACTTTTTAGGTTTTTTTG	!***()(+++AAAAAAAAAA:78:8318::AAAAAAAAAAAA##########################################################	YT:Z:UU
-SRR065390.33808521	4	*	0	0	*	*	0	0	NTGTCAATACATTGTAAGGATTTCCCATTATGTCAATACATAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATTTCGTATGTCGTGTTTCTTT	!###################################################################################################	YT:Z:UU
diff --git a/src/test/resources/htsjdk/samtools/cram/ce.fa b/src/test/resources/htsjdk/samtools/cram/ce.fa
deleted file mode 100644
index ac19897..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce.fa
+++ /dev/null
@@ -1,20803 +0,0 @@
->CHROMOSOME_I
-GCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGC
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGC
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGC
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAAAAATTGAGATAAGAAAA
-CATTTTACTTTTTCAAAATTGTTTTCATGCTAAATTCAAAACGTTTTTTT
-TTTAGTGAAGCTTCTAGATATTTGGCGGGTACCTCTAATTTTGCCTGCCT
-GCCAACCTATATGCTCCTGTGTTTAGGCCTAATACTAAGCCTAAGCCTAA
-GCCTAATACTAAGCCTAAGCCTAAGACTAAGCCTAATACTAAGCCTAAGC
-CTAAGACTAAGCCTAAGACTAAGCCTAAGACTAAGCCTAATACTAAGCCT
-AAGCCTAAGACTAAGCCTAAGCCTAATACTAAGCCTAAGCCTAAGACTAA
-GCCTAATACTAAGCCTAAGCCTAAGACTAAGCCTAAGACTAAGCCTAAGA
-CTAAGCCTAATACTAAGCCTAAGCCTAAGACTAAGCCTAAGCCTAAAAGA
-ATATGGTAGCTACAGAAACGGTAGTACACTCTTCTGAAAATACAAAAAAT
-TTGCAATTTTTATAGCTAGGGCACTTTTTGTCTGCCCAAATATAGGCAAC
-CAAAAATAATTGCCAAGTTTTTAATGATTTGTTGCATATTGAAAAAAACA
-TTTTTCGGGTTTTTTGAAATGAATATCGTAGCTACAGAAACGGTTGTGCA
-CTCATCTGAAAGTTTGTTTTTCTTGTTTTCTTGCACTTTGTGCAGAATTC
-TTGATTCTTGATTCTTGCAGAAATTTGCAAGAAAATTCGCAAGAAATTTG
-TATTAAAAACTGTTCAAAATTTTTGGAAATTAGTTTAAAAATCTCACATT
-TTTTTTAGAAAAATTATTTTTAAGAATTTTTCATTTTAGGAATATTGTTA
-TTTCAGAAAATAGCTAAATGTGATTTCTGTAATTTTGCCTGCCAAATTCG
-TGAAATGCAATAAAAATCTAATATCCCTCATCAGTGCGATTTCCGAATCA
-GTATATTTTTACGTAATAGCTTCTTTGACATCAATAAGTATTTGCCTATA
-TGACTTTAGACTTGAAATTGGCTATTAATGCCAATTTCATGATATCTAGC
-CACTTTAGTATAATTGTTTTTAGTTTTTGGCAAAACTATTGTCTAAACAG
-ATATTCGTGTTTTCAAGAAATTTTTCATGGTTTTTCTTGGTCTTTTCTTG
-GTATTTTTTTGACAAAAATTTTTGTTTCTTGATTCTTGCAAAAATTTTTC
-CGTTTGACGGCCTTGATGTGCACTACCTTCGCTTAAATACTACATTTTCT
-GAAAATGTTATAATAGTGTTCATTGTTTCATACAAATACTTATTTAATAG
-TATTTCTGGTTATATAATTTGTATAAAAAGTGGTTGACATAACAAGGCTG
-ACGAAACTTTGTGATGGCTGAAAATATTTTCCTAGCTTTATTGATTTTTA
-TTTATACGTGTTTGAATAACTTGGCCAAATCGCCGAGAAGGAATAGAATA
-CTGGACGACATTGTACATATTTTCCAAAAAATCAGAAAGTAGATGACGGG
-ACCAATTCTTTCTGTCAGGTTTTACAACCGCCCAGTGCGTCTACGTCACA
-TGTTGTATAAATGGTTGTAAACAATATGCGGAAACAATCAAATGCATTCC
-CATAAGGCATAATATAGAGGCTACAGGCAATGAGTATCGCTCTTTGCTTT
-GTTTAAAGGGGGAGTAGAGTTTGTGGGGAAATATATGTTTCTGACTCTAA
-TTTTGCCCCTGATACCGAATATCGATGTGAAAAAATTTAAAAAAATTTCC
-CTGATTTTATATTAATTTTTAAAATCCGAAAATCCATTGGATGCCTATAT
-GTGAGTTTTTAAACGCAAAATTTTCCCGGCAGAGACGCCCCGCCCACGAA
-ACCGTGCCGCACGTGTGGGTTTACGAGCTGAATATTTTCCTTCTATTTTT
-ATTTGATTTTATACCGATTTTCGTCGATTTTTCTCATTTTTTCTCTTTTT
-TTTGGTGTTTTTTATTGAAAATTTTGTGATTTTCGTAAATTTATTCCTAT
-TTATTAATAAAAACAAAAACAATTCCATTAAATATCCCATTTTCAGCGCA
-AAATCGACTGGAGACTAGGAAAATCGTCTGGAGATAGAACGGATCAACAA
-GATTATTATTATATCATTAATAATATTTATCAATTTTCTTCTGAGAGTCT
-CATTGAGACTCTTATTTACGCCAAGAAATAAATTTAACATTAAAATTGTT
-CATTTTTGAAAAAAAAATAATTAAAAAAACACATTTTTTGGAAAAAAAAA
-TAAATAAAAAAAATTGTCCTCGAGGATCCTCCGGAGCGCGTCGAATCAAT
-GTTTCCGGAACTCTGAAAATTAAATGTTTGTATGATTGTAGAACCCTTTC
-GCTATTGAGATTTGATAACTTTTAAGTAATAAAATTTTCGCAGTAAGACA
-TTAAAACATTTCACAATTAAGCTGGTTCTGAACTGTGTGAAGTATATTGA
-AAAAAACTAACTGATACAAAAATATAATTTTATGATAGTTTTCTGGATGT
-CCCAATATAAACGATGTCAATTCTGCGACATGCTACAGTCATCCACGAAA
-GTAACCCGAATACCGACAAAAGAAGAGGAACGCCAACTTTGGATAGACGC
-TCTAGGGGCTGATTTTGGTCGGAAAATAGTCGGGAAAAAATAGAGGACAT
-TACAGATGAGGATGAGGATGAAGATAGAAATTTGCCGACAACTTCGTCAT
-GCCGCTGATTTTTTTGATGTTCTACGCTTAAATTTTCAGCGAACGAACTA
-TTTTTTATATTTTGATTGTTTTTAAATAATATTTGCCATAAGAAATTCTC
-ACTTTTCCAGGAAACGTCGTTTCGCCGCGATTTTCCTCGTCTCCAGTCGA
-TTTTGCGCTGAAAATGGGATATTTAATGGAATTGTTTTTGTTTTTATTAA
-TAAATAGGAATAAATTTACGAAAATCACAAAATTTTCAATAAAAAACACC
-AAAAAAAAAGAGAAAAAATGAGAAAAATCGACGAAAATCGGTATAAAATC
-AAATAAAAATAGAAGGAAAATATTCAGCTCGTAAACCCGCAAGTGCGGCA
-CGGTTTCGTGGGCGGGGCGTCTCTGGCGGGAAAATTTTGCGTTTGAAAAC
-TCACATATAGGCATCCAATGGATTTTCGGATTTTCAAAATTAATATAAAA
-TCAGGGAAATTTTTTTAAATTTTGTCACATCGATATTCGGTATCAGGGGC
-AAAATTAGAGTCAGAAACATATATTTCCCCACAAACTCTACTCCCCCTTT
-AACAACCACCCGAGGATATATTCGACAAACGATCTATCTACTAGGAATAA
-CTCGATTATTGACATATTATAGACTTCTTTTAGTATTTGTAAAATAGAGG
-ATCAGACCCAAAATTCAGCCCGCGAAGGCATGACGTCAGCGCGAGGCAGT
-AGTTTCCAGAAGAACTCTGTCGTCTACCTTAATGCCTCAAATGCGAACCC
-GCTTCGGCCATCCTTCTCGCTCAGAGAATGGATTAGAGTTCTCATCAACT
-CCTCTGTCTAATTTTCAACTGCGGCGGTTGGCGACCGGTATTACCGCGGC
-GACCGACACCTCCCGGGTTCCGTCGATCGCTGTCTGTTGTGTGCGCCGCG
-ACTCCGCCCACCGGTGGTAACTTTTTGTGGGGGAATCTTTGTTTTTGGTC
-ATTTTTCAGCGCTTTTCAGCGATTATTGACCAATTTTGAATAAAATTTTC
-AACAGAATATCATCTAAAATATTGCTTAACATTTATTTAACAGAAATAAC
-GTGAGCACGCATGTAAAACATGAAATTTTCGGGAAAATTGCAATTAAACG
-AATAAAAATCGATATTTAAATCAATTATTGGTGAATCCGGTGTGTTGAGG
-CTTCAATGCATACATTTTTACTGGATAAATCTCCTTTGGGAATCCGGTTT
-GCAGTGCTTTCGAGACCATGTCCAGTTGAGAATCGGCGAACGCTTTAAGA
-AGCTCGGGCTGAATAATGAATTGTTTTAAAAAATGTTTAGTAAAAAATTG
-TTTTCGTGCAAATTGTCTTCGATATTATCCAAACGTGACGTTTTGCGATT
-TTCGCGCTAAAATTACAGTAAGTGGGGTCTCGACACGACAATTTTTGTGA
-AATACAAACGGGCGTGTGTCTTTAAGAAGTACTGTAGTTTAAAAACTTCA
-TTTCTGTGGAATTTTCATATATTTTTCATAGTTTTTCTCTTTAAATAAAT
-CACTTTTCAACAAAAAACTATGAGACAATAGTTTGAAATTACAGTATTCT
-TTAAAGGTGCACGCCTGCTCGAATTTCGCAAAAACGTGTCGTGTCGAGAC
-CCCAATTACAGTATTTTTGACCCGAATATCGCGAAATTTCGAGTCTGGGT
-GAAAACATTGAAATTTTTGGCAAAATAAAAGAAATATGTCCTTTTTCAGA
-ATATATTTTCTAAATTTCGAGACGAAACAACAATTTTAAATGAATTTTAA
-TTTTAAATATTAAATATTTCGGAATTTGGCGTTTTTTATGCATGTCGATT
-CACTAACGATTTTGTACTACACGTGGGCAAGTTTATACAGTTTTTGGCTA
-AAATTTGTGAATTTGAACCGTTTTTCGGCGAATATTTGAAAAATTGGCAA
-AACTGGTTCAAAAACAAAAATTTTTTAAACTGTACAAACTGTCCAAAAAT
-TCGTCGTAAATCGACACACCCTTCTCATTTTTTCAAAATTTTAATTGTTT
-TCGAATGTTTTTTTTGCAGAATAATTTGTAAAATGAGCCTTTTGTGAATT
-TTTTTTAATTTCAAAGTTTTTATTATTTTTTCTCAAACCAGCACCTCTGT
-TCTCGTCCAACTATGATCATCATCGTCGAATAACCGTTTCTCGTGATTTG
-TCACATTATCCTTGAGCACAATACATCCACCAGGTTTCAGTCCTTTCTGA
-AAATGAAAATTAATTTTAAAAAAATTGAATTATTTTAAATGAAACAGTTT
-TCAGAGATTTCTCAACTTTTGAGTCCACCACCAGGCCTGCACGTTTTTCG
-GGTTTTATCTTTTAAAAAACTGAAAAATCGAAAAATTTCAATTTCTGTTT
-TGTGGTCAAAATTGTAATTACAGGTAAGCAAATAGTTTAATTTTAAAATT
-GAAAATTAGGGAAATGACCGGACATAAGTTTAAAAACCCGATTTTTTCAA
-TAAAAAGGAAAATTGAAAATTTAATAAAACAGGTTGTAAATCAAGGAGAT
-CGTATTGATTGAAAAAAAATCCGAATGTTCCGGATTTTTCAGTGGTTTTT
-TTTGAAAGAAAATCGAAAAAGTAAATGTTTTTAATTTTTAAATTTAAATT
-TTTAATCGGAAAAAATGTACGAAATTGACTTTTTAATGTGAAAAATTGTT
-GTTTTAAAAAAAAATTTTAACCGATACAGATTTTCTAGACTCAGTTTTTT
-CGGTTGAATATTGTTTTTTACTATTTTTTCATTACAGAAAGAATCCAATT
-TTATTTCGCTTAAAAAATAACCGGAGCATCGAAAATATTTTTTTTTCTGT
-TTTACTCAAAGCATTTCAATTACCTAGAATTTTGTTTAAAAACTACATGC
-TTTATTTATGAACGTAATAAATAAGACCCCCTCTTATTTATAAACTTTCA
-ACATATTTTCAGTTTTCAGTGCTATCTAGTGCTTACCGCACATCTTTTAA
-AGAAATCAACCAAATCCTCATCAACCAAATGCCCTGAAACCCATTGAATC
-CATATCAAATCATAACGTCGTTCGGGCGGTGCAAACGTCTGCAGTCCTTC
-GACGAATTTATCTCCAATTCGTGGATGTTTTCCAATATATTGATCACTTT
-TCGTGATCAACTCCTCGACGACGTCTTCCATATCAACTTTCGAGAAGAAT
-GGCATTAAGAGATGCTTTGTAACACGTCCGATACCCGCTCCGCAGTCCAG
-TGCATAGTCAAAGTAGCCGAATAGATTCTGGAAAATATTTATAAAATTCA
-AAGTTGGCCCAGGGGTGACCGGCAATTTCAAGCAAATCGGCAAATTGTCA
-ATTTTCTGAATTTGCCGAAAATTTGACAAAAACGACAATTTGCCGGTTCG
-CCGAATTTACCTTTTTTAAATTTAATTTTCAATTCAGGCAAACTGACGAT
-TTTCCGTTTGCCGGATATCAATTTGCAGGAATTTCTCAAAGGAATTTTTA
-TTAAGACGGAAACACAGTGCTTTTTTGAATTTTTTTTCCCGTTTTCTTCA
-GATATTTTTATAGAATTTACTGACTTTTCAGAATAGATGTAGGACAATTT
-TGTTGTTTTAAAAATTGAAATTCTGAAATTTCCAACAAAAAAACATGTGC
-AAACCCACAAGTTGGCAAAAATATTTTGCATTTGCCGTTTTTCCCGTTTG
-CCGAAAAGTCTAATTTCGGTAATTGGGCCATTTTTCGAAATTTTGAGCCA
-CATAAAAAACTTTGAACCATTTTTGAGAAGTATTATTACGACATTCGTTT
-ATTTGAGCACAATTTGGGCCTATACTTTCAAAATCGGGGTTTGAAAACCC
-CTATATGTTCGACCGAATGTTAATCTCATAAAAATTTGATGAAAATAAAA
-TTTTCTACGGCTCATAAACGTATAGCCCCCGTCAGTCTCAAAATTTATAC
-GATAGACACTTTTTGGCGTTTATCGCCTATATTCCGTCAAAAACCATTAT
-TCATCATTCTTTCAATGTTGTTTTTTTTAAGGCTAAAAAACTTTCATGCA
-AATTTGTTAGCCGTGTCGTGGTTTATACGAAAATTTCAGAATTTATAAAA
-TAAAGGAAAACGAAAATGTTTCTATATACCCTATTTATGTTCTCTGATTC
-CGAATACCAATGTGAAAAATTCAAAAAAAATTCCCTGATTTTATATAAAT
-TTTTGTAAGCGACAAAAATTGTCGTTTGAATTTCACACTTGGTTACAAAA
-ATTTATGAAAATGAGGAAAATTTGTTTTAATTTTTTCACATTGATATTCG
-GAATCAGGAAAATAAATAGGGTCTATAGAAAAATTCCGAACCTTCACTCC
-TTCTCTGAGTATAATAAATTTAAAATAAATACAGAAAATTTCAGTTCAGA
-CCTCATTAAATTTGGGTATATTTCTAGGATCCGAGTTTTTACACCAGATT
-TACAAACTTTTAGCCTTTCACCGCCTTTTTATGCGCATTTCCCATCAGTC
-AACTCCAAAAAAATCGCAACTTTTGCCTCATATTTCAAGAATATTCCCCT
-TTCTCTCCCCATTGAAAGTCATTTTCGAAACAAGCGGAAGATTCGTCATA
-TGTGGTAATGTGTGGCGTGCGTTGGCAAACAACAAGAAAGAATCATTCTC
-TGAAAACAAAAAGCGTTTTGGGTGCCAAAGTAATATTGAAAATCTGCCGT
-GTTTTCTCATTTTCCATCAAAAGAAAATGAGAAAAAAGTTTCGGCGTTTT
-ATTTGATTTCCGGGAAAGAAGACTCGGAAAAAGATTTAATTGAATTTTTC
-ATAGCAAACCTATATTGCAACAACTTTCTAAAAGGTCAGAAATTGCCGCG
-TAGCCTAGAAAATTGGAAAACTCTTCCAGCTGGTATTATTTCAGACATGG
-TGCATCGAAAATTCGAAAATTACAGAAATTAACATTTTGGAGCATCTGCC
-AGAAAATTGAGATTACAGTACCCCACTTCTGCCGAGAAATTCGAGGTGGA
-AGAGGTCTTACAAAATTTTCGGTCACGTGAAAATGGGAAGCGTTCAGGCT
-CCACACGACGGAATTCACCTAGTTTTCAGGTGAGAAGATATCGTACGAGG
-AGAATTGACCTCCAAATCCTGATCGTGACTACAGGTCGTCGTTCGGAGCT
-GTGGAAGAGTTTTGAAAATCTTCGACCATGAGAGAAATAGACAGGACGAC
-CAAACATTTTCAGTGGAAGAGCTTTTCCTAGGCCATCAGGATGCTATTTC
-GACAGAGCTGAGTTATCCTCAAGTCGTTACGAGGTGTGGAAAAGTTTTCC
-AAAATCCCCGACCAGGTAGAAAATGAGCACACCGATTAAGTTTCTCCAGT
-GGTAGAGTTTTTTCTAGGCCATCATTATGCTATCTAGAAAAAAGCTTCGG
-CCATGGGGTTTTTAGGCCGTCTATTTATTTCTCATAACTTTCTCAGAAAT
-TCGTCTATTTCTCAGAACCCCCCAATGATAAGTTTTTTGCAAAAAAAGTT
-CTGCTTTGCTCATCAGCCGTAATCAGGTGACCTCATTAGGCCTACCCAAA
-CACAGATTTGTCATTATTTTTCAGACAAAAAACACGAAAAAAATCTTCAC
-GCATGGGGTGATAACCTGATTTTAAATCTTACTGTGCCGGCTGGCGCGGC
-GAGCTTCGATCACTGAGCCGAAAGATTATGAAAACTATGGGAATGACGGC
-GTAGCCTAGAAATCGTCCAGGCAGAGATTCTGTCTAATTTTCGAGCATAT
-ATCTCCCAGTTTTGTTATTAATTTAAGTAAACTCAAACCTAGAAACAAGT
-AAAACGGGAGGGGGGGGGGGAATATCAGAAAATTAAATCTTGCGACACTT
-TTCCATTGATACTTTCAAGGTAATGCCCAGAGGTGTGCGGCAAATTTTGA
-AACTTGCGCATGCCGCCTTTTTTTTTTTCTAGAAAACAGTCAGAATTTTT
-TGTCGAATTTGTTGAAAATTCGCTAATATACTGTGAGTTTAGAAAAAATA
-ACGAAAAAACTCGGAAAAGGAGGAAGAGATCTGAAATATGTAGATTTTTT
-TAGAAAAGACCAGAAATTACTGAAAAATTGGCATTTTTCGTCGAAACCCC
-AATATACTAAATTATTCGGATTTTTAGAAAATTTTCAAATTCACCATACA
-GTGCATTTTTTCCTACTTCTACGACTTTAAAGGGGGGAGCATTTATGCGG
-AAGGGTCTTGCCGCGCATTTAGTCATCATTTTTAGCAGTTTCTGTGTAAA
-ATTCGCGTAGATCACATGAAGATCACAAAATATTTATCCCATATTTCGTA
-TTTCTGTTGCTTTTTCACAAATTAATTGTGATCTACGCGTGATCTCCGCG
-AATTTTGAGCAGACTTTGTTAAAAATGATGACTATGTGCACGGCAAGACC
-CTTCCGCATAAATGCGCCCCCCTTTAAAGTCGTAGAAGTGGAAAAAAAAT
-GCACTGTAGCAAAAAATCGAACATTTCTGTTCGATTTTTGAATTTCTCGA
-AATTTTTTAAAATAATTTTTAAAATAACATTTTTATTTTATTTCGAAAAC
-TACCGATTTTAGAAAAATTCTAAAATTTCGATTTTTTTTGTTGATTTTTC
-GATTTTTAAAATAAAATTTCATAATTTTTTAAACCGATCTTTCTTGCTTT
-TCCTGAAAAATCGATGATTTCTATACCTTTTTCTTCAGTCCTTCAATAAA
-TCGTTTCGACGCCGATATGTCGGGCGCGTGAAGCGCTTCGAATCCGCCGA
-GCATTCCGTTGACGTCCTGGCTCGCGCGGCTCCAGTATTCCTCCGCCTGA
-AAGAGAATAGTTGAAAACATTGTTTTGAGACTTAAAAATTTTTTTTTTAG
-TTTTTTTCAAAAATTCTTACATGTTATAGAGTTTTTTTTTCAAATTTTCA
-GCTTTTTTCAGAAAAACTTAGTATTTTCGATAATTTTAAATAAAAAAGTT
-TTTTTTCAAAAAATGTTTCGGTTTTTTTTTTAATTTTTGGTCTAAAATTC
-TCCGCAAAAGATTTGCGTGCTGGCCGAACTTTTTGATTTTGTACCTTTTC
-ATAAACATCTTCACCATTGTGAATTCTAGAAGATGATGAAGAGCTCATTT
-TTGATGTTGTGACAGCTGCTCCGAGCAATCTGGAGACTTTTGTGACGAAA
-AGACGAGAGGTCACGGATATGATGATGATACTGGAAATGAGATATTTATA
-TTTACTAGTTCATCGGGAAAATTATTACGAGAAAGATAAACAGACATGTG
-CGTTTTTTTAATGGAAGAGAAACACAAGAAAAATCTGGAAAACTAGGCCA
-CGGCTATCAGTGTCGATTTACGGCATACGGTCTCGACACGACTATTTTTG
-TTAAATGTGAAGGTATGCACCTTTAAAGAGTACTGTAGTTTGTAACTCTC
-ATTGCTGCAACATATTTGACGCTCAGCGAAAACTACAGCAATTCTTCAAA
-AGACTACTGTAGCCTTTGTGTTGACTTACGGGCTCGATTCTCGAAACGAA
-TTTCTGCTCGAATTGTGACAGCCATATTCAATTTGGTATAGTCTTTTCGT
-ATTTTTTGCCATTTTTCTGTTTTCTTCTAATATTTAATCTATTATTAAAT
-TATGTCCGTAACTCCCTCCAAAATTAGAACTGCGACCGAACAGAGATTCG
-TTCCGCCCCATATTCCGGCCAATCAGATCGAGTAGGCGGAGTTCGAAGTC
-GCTGATTGGTTTGAAAAGTCGCGGAAATTTGCAAGTTTTAAGGTAGCGAA
-AACTGATGACTATTGTAGCGCGCTTGTGTCGATTTACGGAATCTCGATTT
-TCAGGAATGAATTTTTAATTACATTTTTTCGCTCAATTAATATTCTAAAT
-AAATAAATAAATGATTTGAATTAATTTAATTTCATTCGAGCCCGTAGATC
-GACACATGTGCTACAGTAATCATTAGTTTTCGCTACGAGATATTTTGCGC
-GTAAAATATTTTCCCGTAATAACTCTACTCCGACAAACATTACGACCTCC
-ATGGAGGCCTCCAGGTATAGGTGAGACTCTTGTATTTCCAATTCAGAGAC
-AATGCGTCACTGGAAGAGAAAACGAAGCGGAAAAAAAAACACGGAAACCC
-AAAAATAGTGTTTGCCCCGCTCTATTCTTCTCCAATAATTTCTGTGTCTA
-ATTTTGAAAGACTCCACCTGTGTATGCCTTCTCGACATAAACCCCCCCCC
-CCCCCCCTATCTTACATGGTACTGATAACACTTTCAGTCTTTCACACTTT
-TGGCGCGCAACGCCGCTCTTTTTTCGCGGCGAGCTGATGACGTCATCAAT
-TTTTCATCGCTTTTGATTATCTTCAATGTTCTAGAAGGGCACATAGGTCA
-TCCTTATTTTTTCCTTCTCTTTCTCGTGACGGCCCTTGTTGCGCATGCCC
-GCCCCCTAGAGCAGGGCGTGGCCTGAACGGCGGCTCCGAGAGCTACTCAT
-TCTTGCCGCGTCACCCTCCAGCGCCACCCAAACTTCTTCGGTTCTAGAGA
-TCGAGAAGAACGTATGATTTTTTAAAATTATAATTGTTTCTTTCGAAAAA
-AAAAATTTCATTTACAGTAAGCCAAACATACACAATCAACATGAAACTCG
-TAATTCTGCTATCTTTTGTTGCGACAGTTGCGGTTTTTGGTGAGTTTATG
-CTTTAGATAATACTTTTCCGCCAAAAATACAGTTGCCGGTCTCGGTATGG
-CAATATTTTTGTTAAATTCGAAAAGCAGTGAGTAATGTAGTTTCGAATTT
-TCGTTTCTGCTTAATTTTCATCAATTCATCGTTTTTCTCACGACTTCTTC
-TTTATGAAAAATCAATGAAAATTCTGACTAGGTCAGCTTAGGGGTGAGGT
-ACCTAGAGACGCCACATATGCCAAACGGAAGCTGAGATCATTGGCTACAA
-GAATATGCTTTCAAATTCTGCAACGGACCTCTGGGAGTCTGGAAATTCTT
-GTCTGAAATTATGCTTTTGAATGCTCGAAAGTGGTAAGAATTTAGAATTT
-ATTACAGAAAAACGTTTAATTAATAAAATTAGTTTTATACTTGAAACAAG
-TACTGTATGCACTGTATCAAAACACATTTTCATCTTTTCTAGGTATTCAA
-CTTCACGTTTTTCTGTAATAAATTCTAAATTCTTACCACTTTCGAGCATT
-CAAAAGCATAATTTCAGACAAGAATTTCCAGACTCCCAGAGGTCCGTTGC
-AGAATTTGAAAGCATATTCTTGTAGCCAATGATCTCAGCTTCCGTTTGGC
-ATATGTGGCGTCTCTAGGTACCTCACCCCTAAGCTGACCATTCCCTAGTG
-AGCAAACAAAATTTTGAAATTACAGTACTATTTAAAGGCACATTGATTTT
-TTGGGTCAAGCAAAAATTTGTCGTGTCGAGACCGGCTACGGTATTTTCGC
-GAAAAATCGCAAAATCTTGCGGCTGGGATATACTTGTGCGAAATACTTTT
-TGCATTAATTTTGAGCAAAATTATTTTTTTTAGACTTTTTGAAATCCAAA
-TTTTTTGGATTGCGAAAAAAACCTGTGTCCGGTTGTTTCATTAGGCCAAC
-AAAGTTCCTGGAACACTGATGAAAACCATGATAGAGGCGGAGCATAATAT
-CGATTTTTCGTACTTTCCTGTATTTCTTCTTCTATATGGCCGAGTAGAAC
-AGGATTAGGGGTAAAGTCAAAATTTTTCTCATATGGATATCATATGGATA
-TCAAAATTTTTCTCATATGGATATGGAGAAAATTTTTCTCATATGGACTT
-TGAAAGTTGAATCACTTGACATCTGGGAAATTAGTATTCCAGGCGTAAGT
-CGGATCTGTTAGAAACGGAATACTTATAGGCTTCGTGAATTAGGTAGACT
-TTCAATTAATCTGATCCATGGGAGTCAGACGCGGTTTCCAGGCCTGACGC
-CTGCCTCCAACTTGCCCGCCTCACGCCGGTCTCTCGCCTCATTTCTGCAC
-TGTGACGAGACAGACGAAGGTCGCCTTCTGGCGCCCGCATGGAAATCCTA
-CGAATATGTCAGCTTCTGATGGGACTCCGTAAATCGACACACAGGGGTAC
-CTCAGACATTTCCCTCCCCCTTACAAATTGTTAGGACAAGGAGGGGGAAT
-TCATCTCCACTCGAGACACACATATGTTGTCGTCAGTGAAGTGTAAAGAT
-CTAAACGATTGCGTGTATGAAAAAGCACTCTATGATCACCTTTTTCATCT
-TCCTACACCCTTTTTAGGTGTGGTGCCCATCGAGCACTCACGCCAGGCAG
-GGAGAGCACCGGTCCCTGACTAATGGGATTCGAATGTTTTAGACCGGAAA
-TAGGAGCGATGAAAGAGCATAGAAATGATCATTTGGAAATCACGTTTAAT
-TAGGTTACGGCGAAAATTTGCAAAAAAGAGCAGGAAACTTGGCTCAAATC
-CTTCGAAATATAACAACTAGGACTTCCATGTAGGCGTTAAAGCGCCCTGT
-CTCTCACCCCAATCCGTACCTTAAGCTGAAACAAACGTGAACTTTTTTCA
-TTTCTTAAAGGAGTATCGTCAATGGGAAAATTGTTTTAAAATGTAGTATT
-TGTACTTCAACTTCCAATTATTGCAAAAGAAAAACGGAAAAAATCCGTTA
-ACATTCAGCATTTTAAGTCGAAGAAATCTTTAAAATTTAACTAGAGAAAT
-CCTAGGCCACGACGCTCATTCGAATTTTAATTTGTTTTGATATTGTATTT
-TGAAAAAAAAACTTAATACAATTCCTTCTTCCCAGTTTTCTATAACTTTT
-TGAGAAAAAAACGAATTAAATTCCGAAAAAACTACATTTAAATCAATATT
-TTGTTTACGAATATGGCCTAGAAATCGCGTGGTGGCCTAGGATTCATTTG
-CGCGCGAAATTCAAATTCCGTCACTTTCGTCGATTTCAACGGCTAAATGC
-TGAATGTCAACGGATTTTTCCCGTTTTTCTTTTGCAATAATTAGAAGTTT
-GAGTACAAATACTACATTTTAAAACAATTTTATTTTTGGTATTTTGACGA
-AAAATTGATTTATTGGTTTTTTTGGTTGTTTGGGACCAAAAAATCCAAAA
-AAAATGTTTGGCGTGTCTAGTTTCGACTCGAGACTATTCTGTATTAAAAA
-TACATTAAAACATGTATTTTAACACAGTTGTGACGTCATAAATGTATTTT
-GATACATTTTGCAACATTACTTAAATAACCCCATTAAAAATTAACCTAAG
-CATCAAAAATTTTTTGGTTTTTTTGGTTTTTCGAAAATTTCAATTTTTTT
-TGTTTTTTGGTTTTTTTTGGTTTTTCAAAAACTTCAATTTTTTGTTTTTT
-GGTCCAACATTTTTTTTTGGTCTCAGCTCTGCTGCCTACCCTAGAAGAAC
-TAATAGCGCTTCAAAAACTGATGAAAACGTTCAAATTTGTCGAAATATTA
-CGAAAATTTGAAAAGTTGGCTCAAATCTAGATTGAATCGGCCGATTTTCC
-ACAAGTTTCCAAGTTTCCACAAGTCGCCACATATCCCGAGAAAAATCGAT
-TCAAATTGTTTGAAAATTGGAATACTGCGAATTTTGAACCAAATTTCCCT
-GGCTTCTCTGTTGAAATACTTGAAAATACCGCGAAGCAAACAAAAAATCT
-AATTATTACGTGAACACAAAATTCTGAAAATGCGTATATATTGCGCAACA
-TATTTGACGCGCAAAATATCTCGTAGCGAAAACTACATTAATTCTTTAAA
-TGACACGCTGTATGTGGTGATTTACGGGCTCAAAAAATTATTTTCGAAAA
-TCAAGCCCGTAAATCCACACGTAGTAATTATATAAAGAATTACTGTAGTT
-TTCGCTACGAGATATTTTGCGCGCCAAGTATGTTGCGCAATACGCAACCC
-CATATGTTGATATATACTGATGTGAGGATAAAAAACAACACAACTTTCAG
-CGGCTCCATCGGCTCCGGCAGGTCTCGAGGAGAAGCTGCGTGCTCTTCAG
-GAGCAACTGTACAGTCTGGAGAAAGAGAACGGAGTTGATGTGAAGCAAAA
-GGAGCAACCAGCAGCAGCCGACACATTCCTTGGATTTGTTCCACAGAAGA
-GAATGGTCGCGTGGCAGCCGATGAAGCGGTCGATGATCAATGAGGATTCT
-AGAGCTCCATGTAAGTTAGTGGTGGTGGCCGGAAAAGAGAAAACTCGGCC
-AAGCTGCTCGGAGTTTTTGAATTTTTGATAATCCGAAATAAAAATTGATT
-GCTCGAAAAGGAACAATCTTTTGGAAAAAAACGAATTTTGTCATTTTTTT
-CAGCAAAAATTGATTTTCGAATTTTTCCAATAAAAAATCGATAATTTCTC
-CCCGTGCAGTGGAAAACAAACAATATTTTTTTGTTGATCGTTCTCTTCCA
-AACCCGGAATAGGTACACACATTCCTGCGTCATCCCATTCTCTTATCACA
-CTTTTTTTTCGAAAATAAAAGTGTAGAGACGGAAAAGTGAGAAAGGAGTC
-AATTTTATGCGAAATTTTGCATGATAATACACTCAAATTAAAAAAACTGC
-GTGGCGTGCACTGCAGAAAACCTCATATTTAGGCCCCGCCTTTTTCTCGT
-CCACTCACGGAGAAAAGGCAAAAATTTGGGGACCAACCAATATCAGGCCG
-CCGACATCCTACGGGTTCCGCGCGCCGCTATGTTTAACTCGCTGTGGGTG
-TGGCGAGCTGTCTCCGCCCGCTGCGAGTTAAACATAGCGGCGCGCGGAAC
-CCGTAGGAAGTCGGCGGCCTGATATTGTTGGTCCCCAAATTTTTTCCTTT
-TCTCCGTGAGTGGACGAGAAAAAGGCGGGGCCTAATTATGAGGTTTTCTG
-CAGTACACGCCACGCAGTTTTTTTATTTTGAGTGTATAGGTCTCGATTCT
-CGAAAGTATGACAGTTATTTAAATGATGAACTCGTGATGACTGTTAAATT
-TTTGGAAATTTCGGGGGAATTATATCGATTTTTCGATAAATTTACAGGAA
-AAAAGTCCAAAATCTAGGTATTCCATGGTAGGCAGGCGCGATTTCTTGAC
-GCCTGCCTGGAATCTGTCCGCCTCACACCAAAAAATGTCAATCATTTTGC
-TGAAAACCAAATTAAGAAATGAAAAAGTGCACTTAGAGATGATGACGGAG
-GTCGCCTTAAGGTCAGACAGGTTAAAAAACCGATTTTAGTTGAGTTTTCC
-CGAAATTTTCTGAACAACCGAATTAGAAATATGCTGCTTGTCATTTTTGA
-GTAAAAATTAACGAAAACTTCGACCAAAACCACGAAAAAAATGAAGAAAA
-TAAAGATTTTTCGAGAAAATAACAACAAAATCCAGCAAATAGTGAAAAAT
-AGTTTTATCCGAGAAAAAGTAGTTTAGACGCTATGAACTCTCGAAAATCA
-GATTTTTTCAATCTAAAAGCCATAAAATTATCGATTTTTTAAAAATTCTC
-ACTGAAAACCGGCGAATTTCAGTGCTCCACGCAATCGAAGCCCGCTTGGC
-CGAAGTGTTGAGAGCCGGAGAACGCCTCGGAGTCAACCCGGAGGAAGTTT
-TGGCGGATCTTCGTGCTCGTAATCAATTCCAATAAATATTCTTTGCCCTA
-AATACTTTAAATTATCCATCTGACAACTAAAATTTCGGTTCTTCTTGGCT
-TCTTCTATTTGTGAAATGGTTTATTTTCCCCCGAACTCTCAAAAGGTTTA
-AATATTGTTCGATTACCCCTTTTTATCAATTATTTTCTTCAATTTCTTAT
-TTATCATTATTTTTCTAAACGAAGACGGATGTGATTTTAAATTATGTTAA
-TGGACTATTTTACAAACTGAATAAATTCAGCATGTTGGCAGGTTTTTTCA
-GTAGTTTTTGAGTGAAAATAGAGGTAAAAAGACAGAAAATCAATAAAAAA
-TGAAAACAAAACTATGAAAAATGGTTGAAAATCGAGCAAAAATCGTTCAA
-AAAAAAATAAATTCAAAAAATAATTGCGTCGAGAAACGCGTCAGTAGCCG
-CTCTCTGCGTCTCTCACCCTTCAGCACGCGGAGAGAGCCACGAGAAATGC
-GCAAAGGCTAAATTCGGCGCGGAAAATCATTTTTCAAAATAAATTCGACG
-AGAAAATCAATACTTAAGTAATTATCGATTTTCAGCTCGTTCAAAAAATT
-TTCAGAAACGTTTTAGTCGTTTAAAGGTTTTTTTAAAATTAAAATCGTCG
-GAAGTAAAAAAATAGCGCGGATGGAAATCTACGGAGTGCGGAGCGAACAA
-ACGCGCGGTAATTCAAATGGGTAGAATAGTCAAAATTGAAAATTAGCCAG
-CATCGACCGATTTTTTTAAAACTTAATGGATTTTTTCGTTTTTCTTTTGT
-GGTATTTCGGCATTTAGGATTAGATAGCACATTTTAAAGTAAAATTCCCA
-TCCAAGCTACTCCACCTTCTCCAGACTGTACAGTTAAACCAATTTGAAAA
-GTGTATTGTATCCCGTTTTTTTTTCTGAACAATTTTGAAAATTTTTCGTT
-TATCCAGGATACGATAATCATGATTCAAATTCGTTAACAAAAAATGAATA
-TATGAGAGCGATTAAAGCATTTGTGTCGGAAAATATGGGTTAAATGGGGA
-GAAGGGGGCGGACATTTGGATGGGGTACAAAAAAATATGCAAAAAATGGG
-CTAAAAACAATATTTTCAAATTATGCCCGACAAAGGTTCAAAAGTCAATA
-TATAGAAATGAGAACATGAGTATTATGCCACGTGGCGGGAAAAATATGTG
-GAATGTAATACGATGAGATCCTTGTGAATACAAAGCTTGTGACGACGTGG
-CCGAGAAGAACTTTTTAAGCCAACGAGAAAAAAGGGGTTCAAGGCCGAAA
-TTTTTTTTGGGCCACCTATTAAGTTAAATTGAAAATTTAAAAAAAACACA
-GCGGATCCAATTATTTGCCGAGTTTTGACTTGAGCTCGGCGCGATACGTG
-TCGATTGACTGAAAATATTGTTTTTTTTTATTTCCGAATAAAAAATGGTG
-AGTACCTCCAAAATTAGCTTTTCATTGTCCATATAGAACTTTTTGATTTG
-TTCCACAGTTTTTGTGGCCATCAACTCGGCGATCAACTCGAAATTGTCCT
-TGTACCAGTGGAAACCTGAAGGAATTTCGGATGTTTTTGCTTAATCATAA
-TCATAATAATCTTAATCATAAGACTTGGAAAATGCGAAATTTTTCGAGAA
-TATTCAATTTATCTTCAGATTTTATTGCAACAAATCGATTTTCAACATAA
-AATTAATTTTTCCAACTTTTTTTCCCAATTTATGAGAGTTTAAAGATTGT
-TTTAAAGCAAACCGCCAACTTTACATAAAAAATTAAAATATTGTGAAAAA
-AATGATGAAATTTAGCAGATTTTCTGATAAAAAATTGAATTTTTTTGGAT
-TCGCGCTTCAATTTCACATTGTTCTTTTAGAAAAGTCGAAATTTTATATT
-TCCAATTTTCAGATTTAAAAAAATTTAAAAAGGAATGAACTTTTCCAAAG
-AAAAACTGAATATAACCAGAAATTGTGATTTTTCAGCATTTTTTTTTAGG
-TTTGAATTTTTTTTTCATGATTAATCACGTGAAAAGTCAATTTTACCGCA
-AAACATTTAAAAAATCAAGATTTTTCAATTTTCTCTGAATTCCTGCAGAT
-TTTTCGATGAAAAATTGAATTTTCCTTGGAATTTATATTTTTCGGGTATT
-TAAAGTTTCGGATATTAAAAAAAATTTTCAATTTTCTCTGAAGTTATCGA
-TAAAAATTATTTTCTGCAAAAAATCTACTTTTTTTCGTTGAATATTCCGG
-AAAAAAAATCAGAATTTCAAGGCACATTTCCTTTTCTAATCTAATTCGAA
-TAATTCAATATTCTTTTAAAAATTCGGGGTAGAAAAGGAATTGTACCAAT
-TTTTATTTTTAAAAGTTAATTTTTCTAATTTTCAAAATTTTCTTGAATTT
-TCGAATTACAGATTTTCAAAAAAATTTTTTTTGTTTTTTTTTCTCGAAAA
-TTTGAAATCCATACATCTAATAGCATTCTTCTTTTCCTCAGGACTCCAAC
-CATAATTTATCCTGACTTTTCCAGATCGATTGCCATTTGTTGCAGTAGTA
-TCTAGTTCAGGAGTAAATCTCTCGAATCTTCCCTTCAACGCCATCATATC
-TTTCTTCCAATTTGCAATTTCTCCTTTTGGTACACGGCTGTATGTCATTG
-TTGCACGGAACATTTGTTGACGGGCTTCTTCATTCAGAATTCTGGAAAAA
-TTGATGTTGTGCGATTTTTTTTGGTTAAAAAAAACAATTTTCGTAAGTTT
-AATTAACTAATATTTTAAAAAATCTCTCATTTTCTGAGGCACCACGGATT
-CAAGATCTGGTGGGATTCCGGATCTGGCACCGTGCCAACGCATTAAATGC
-AATTTTTCTGAAAAAAGGGCAACGAAGATCCGATTTAAAAAAATTTTTCA
-ATTATTTTTCAAAATTTTCACTAACTATAAGAAATTAGAGATTTTTCACA
-AAAATTCCAGTTTTCTGTTAGAATTTGAAAAAAAAATTGAATTTTTCCTA
-AAAAATTTGTAATTTTCCGATATTTCAAGCTGTCAAAACCTAAAATCTGA
-AAACTGAATTTTTAAAGGAAAAATTTTGAGCATTCTTATCAAAAAATTGT
-TTCAACTTTTTCTCAAAATGTTTCAACCTTTTTCTTTCTAAATTCTGAAA
-AGCATATCTCAGCTTTTGCTAAACTATTTTTTTCCTCAATTTTTGAGAAA
-ATTAAAATATAATATATAATATAGTAAATATTGCTTATTTTCTAATAATT
-TTTGGTATTTCTATTCTTTCGTTTTTTTTTTCAAAAATTCCAAATAGTTT
-TAAATGTTCATATTATTTTTTTTGACGAAAATAAATTTTAATTTTAAACC
-GGAAAATTGTTTCGTAACTTTTTTTTTCAAAAAATTTGAATTTTCGACAT
-GAAAGATGTAAAGTGTAATTTAAAAATAATAGTGCAGGTATTTTCAGTTT
-ACAGCAAAAGTCAGTTTAAAAAATTTCGACTGGTTTTCAAAATGAGTTTC
-CTTATTTTTTACACGTAGAACTTTTTTTATTTTCCGATTTTTTTTGTTGC
-GCAGAAATTTTTTTTCCGCAAAATCAGGAAAAATTCAGAAAAAGACAGTC
-AAAAAATTGTAGATACAATTTTTTGACTGTCTTTTTCTGAATTTTTCCTG
-ATTTTGCGGAAAAAAAAATTTATTTTTTCATGAATAAAAATCGAATACCC
-ATCCAATTCCACAAACTTACTCGTTCTCCTCCATACATTTCGTTTGTTTA
-ACTCTCCAAACAAGTGGAACACACATATGATGTTTTCTCTTGATATTATC
-AATTAATGCCAGTGCAGCCGGTGTATCGAAGCACCGTGTCATTCTGCACG
-TATTCTCATCGATTGGATCAGCTTCAATCGATTGCTCCACAATGTAGGGG
-CCTGATGGTTTACGGAGAAGGCAGTCGTCTGGAGAAAAATAGAATAGAAT
-AATGATTTTTAGGTTATTTTACGTTTAAAAATCTAATTTTTAAGACGCGT
-AAACGTTGAGCTCATTTATAAAAATTCGGCAAACCGGCAATTTGCCGAAA
-AATTTCGGAAAATTGTCGGTTTGCACATTTTTTCTTGAAATTTCAGAACT
-TCGATTTCAAACGGCAAAATTGTATACATCCTATCAAAACATCAATCTTG
-AAAAGCCAGTAAACTCTATGAAAATGTCTAAAGAAAAGAAAACGGTAAAA
-AAATACAGTTTTAAATGTTTCCGTCTTATTAATAACAAAATTCGACAATT
-TGCCGGAATTGAAATTTTTTTTTCTCCAATTTCCGAAAAAAACCCACCGA
-CCACCATAATATCATCGTCTTCTTCTTTTTCTTTTCCAATTCCAAGCCGT
-TTGATCGCTTTTCCGTTGGCTGGCTCCATGAGCTCAAGATATCCGTATAC
-ATAAATTTTCATGTCTGAAAGAAAATTCAAATTTCTTCTGGAATCAGTTA
-TTCGAAACTAACATTCTGGACATAAAACTCGTTGCCGTCGTTTTGTCAGT
-GCACGGAGGCTTGCCGGACGTGGAACACGCATCAAACGGAAATAAAGGAT
-ACACGGTTTACATTCGTGACGCGACATTACACGATTTAGCTTAAAATTGT
-GAAATTAATTTTTTTTAATAGCTCTTTATTTTTTTGAAAATTTCTCCCAT
-GCTTTTTCCATTTTTTCAACGAGTTTCCTTATTTTTTGTCCATTTACTGT
-AAGTTTTTTTTGAGAATTTTTTTTTGTTAATTTAACATTTTATTAGCTCA
-AAACATTTATTAGCAAAAATTTTATTAGCAAAAAAATTTTTTAATTTTTT
-TAAATTAGCTCAAAATTCTCGAAATTTTAAATTTTTAGGGTAAACAATAT
-AAAACTTAGGGAGTTTTGAGCTATAAAATGATAAATTGATTTTAAAAAGG
-ATGAAAAACTTATTTTAAAAAACCGACAAAAATCGACAAAAATGAAGGGA
-ACAGGCAGCAGCTTAGCCCCATGCTTAGCCAGCAGCCCCGTAGCAACCCA
-GTATCAATAATATCCCGTGCCAATTTTCATAAAACTGAATATAAATTGGG
-TTGATGTTGCTAAAGGGCTGCGAAAAACTGACCTGGGATGAAGCTGGGCT
-GCAAGGGGCTGCGAAGTGCTGCGAGGGCAAAGCGCTACAGTGCTAAAAGG
-GGGCTGAGCCCAGACCCTCAGGAAAAAACTCATACTCGCAGCCCTTCGCA
-GCCCACATTTGCGCTCTGATCGCGTGCTATCCGCGCGCACAGAATTTCGA
-AAGTATTTTCCAAATTCGGAATGCGCGCGGAGCAGACGCAATTAGAGCGC
-GGATCTGGCACGTAAGGAAGAAGTGTGACTGGAGCACGAACCAGTAATCT
-AGTCGCGCCCCGTCCGCGCTCCAGGAGGAGCGATTTGCCGAGCAGTTCAG
-CCCTTCGCAGCCCTTTAGCAACAACCAAATTTATACAGTTTTATGAAAAT
-TGGAACGGGATATTATTGATACGCCTAAGCAGCCCTATTAAATAGTGATG
-AGGGCGTAAATGAAATTCGCCATTTCCAGCTAAAATATAAATTTTTTGAA
-TTTTTTAACATTGATATTCGGAATGGATTCAGCAGAAAATTTGAAGTCAT
-TTGAAAATATTTTCCAGATTTCGGTACTCCACTTTTAAAATTGAATAAAA
-CTGTAGTCTTTATTCAATGTTTCTTCAAAATTTAAAAAGTAGAATATAAC
-TGTGAGAAAATTTCCAAAATTGTCAAAATTTCAAATAGCTGAAATATTTC
-ACGGCCCGGCGGGGGGTACATGGATGAGAATTCTCTACCGTATTCCAATT
-TGGCTGACTGCGTGCTCAACGTTGAATACTCAGTGTAAACTTTCGTACAC
-CGTTGCGTACTGCACAGCGCGCATTTTAATTGACGACATTTAGCAAAAAT
-TGAACATAAGATTTTTCGGAATTATGAAGCTCAATTTTCACAAAAATAAT
-GAGTTTTTTGTAGAATTTATGAAAAAACGTGAATATATAGATTTTTTGTT
-CATGATATTCAAGAAAAAGCGATTTTTAGTTCTTCACAGAGGAATCCTCT
-CGCATTTCACTTGCTCATGATGTTTTTTGCTCCACTTTAGGACGATAAAA
-ATGCGAATTGTTGATAAAATGAATGAATAATATAAAAAGTGCAAATATGA
-CTTCAGCAAGTGTTAAATCCCAAATTTTTCCTGCGATTTTCTGCTAGATT
-CCTGGTTTTGAGTAAACAGTCTGATATATTCATGATTATAATGATAACAA
-TAACGAACATAATAATAAAAATGGAGAGCACAGAGAAACAACAAATTGCA
-AAAACAGCAACTGATATCAGAATTAACGACGACCACGGAAACCGCCTCGG
-TCTCCACCTCGCCCACCACGGAAGCCACCACCTCTGTCGCGTCCTCTGAA
-TCCTCCTCGATCTCCACCGAATCCACCTCTAAATCCTCCATCGCGGTCTT
-CTGATCTACCACGGAAGCCTCCACCTCCACCAGGATCTGTTGAAAGTCCT
-CTGAAGCCTCCTCGATCGCCACCTCCACGGAAGCCACCACGATCCGCGGA
-TTTTCCTCTATAGCCTTCGAGGCTTCAGTTGTACCCCATTCTTCGTTGGC
-ACGCTTCAGATCTCTACAAAAAAAACAAATTAGAAGCATTCAATTATCGA
-AATGTGTACCTATCCCGATTTATCGCAATCTGTCTATTCTTCTCCTTCTG
-ATTCTCAACTTCTTTAACTTGTCCAGTAGCGGCAGCTTGCTTACGAGCAG
-CATTTTCCCGAATCGCCTTCACCTCTGCCTCCTCAGCATCCTGTTGCTCC
-TTGACAATCGTAAGTCTTCGAATGACACGTTGCTCACTCTCCTGCTCACG
-ACGCTTTTTCATCTGCTTCTTCTTGTTTATAGTCACCGCATTATGCTTGT
-GATAGAGAACCTCTCCCTCATCGATTTCTTCTTCAATTTTGACGAGTTCC
-AGGGTCAGTCGGGTCCGATCTCACGAAGACGGACGTTGCTATTCTGGCCA
-ATTCCGCAGTCACGTCCTTCATAAATGTCTTGTGGAAGTTCTTCTTGCTG
-AGGGGGCTGCTGAAACCAATGTCGGCATGATGAGAGTTCCGGTCTTCTGA
-ATCCATTTCCTGCGTGGGCTGTGGCGACGAGCTGCACGTCTGAAAATCAA
-GTTTTTGTAATTTTTGGGCGCATGATATGGAGCTGAATCATTCGATTTTA
-GAATCAGCATGCTTTTATTCATATTTTAGGATCTTTTTAAAAAATCTGGA
-CCAACAGTTTTCGAAAAAATTTAATTTTTGTTCAGAAATGTGAATATTCA
-CTAAATCGAAAAAAATAATTGCAAAATCCGTCAGCTGAACATTCAAAACT
-TATCAATTTGAAATCAGCATATTTCAGTGTATAATTAAAAAAGTTTCAAA
-AATTCTGAGACCAATTTTTATTGAGAAAAATAATTTTTCGCTCGAATTAT
-TGAATTTTCACTAAATGCAAAAAACAGTAAACTTGGGCCCATGCTACAAG
-CCTGAATCTTTCAAATTAAGAACCAGCATGATTTTTTCAATATTCTAGGA
-CGTTTAAAAAAAATCTGGACCAACAGTTTTTGAGGAACGTAATTTTTTAT
-ACAAAAATGTTCTGATTTTTCACTAAACTCAAAAAAATAGTCAAGTTGGG
-CCCATGCTGTACACCTAAATCATTAAAATTCAGAACCGCCATGTATTTTT
-TCTTACCAAAGGCTCTTTAAAAAAAATCTGGACCAACAGTTTTTGAGATA
-TTTAGAAAAACAACTCACTTTTCGACGTTTTTCGCCTTTTCGTGGCTCAC
-CCGGTTGATTTTTGCGGCGATTTGTGGTCTTTCGCTGAAAATATTATTTT
-TATTTCAATTATTAACGAAGAAAACAAGAAAAAACGACGAGAAAACATCA
-AAAAAACGCGAAAAAACATCGAAAAACCACCGCAACCTCATGAACAAAAA
-AAAAGCATTGCAGCCGCGGGACTAGTTTTCGCAACTTTCTAGGCCATGTC
-CCGTTCGCCGTGCCGTGTATTTGTTTAATTCCCTTTTTGGAAAAAGTCAA
-CATATTTTTCTAACAAATCGTTTTTCTATTAATTTTTTTCTAAAACTCAC
-AATCAACAGATCACTTTTTGCATTGCAATTCTCACAATATCCCGACGGAA
-CCCTCTCCAAATGATTGACCTCTTTGAATAGTTCATCATAAGTGTCGGTT
-TCATTCAAATGCACATTAATCATTGTTTTATAGTTTTGCACTTTTTTCGT
-GTTGTAATAGTATTGGATAATGGAAGAAAGCGAGCGTTGGGGCATCTGCA
-AAAAATAATGAAATTTATTTTCTTTTTATGATTAAATTAAATTTTCAAAA
-ATTCCCTTTTTTTGACATATGCACTTACAGCCGCATGAATCTTCTTGAAC
-CGTTTTCCGAAATGAAAGAAGCAAGTGGAGAAAAGACTAATTTCTTCTGC
-CGTCCAATCATCATGAATTTCTTTTCTTCTCATCGCTTGAACCATCGCAG
-CGTCGAAATCATTTGACTGTTTGTTCAGAATGAACAGAGCCTGTAAAAGC
-AGTTAGTTTTTTTTTCAAATTCAAAGTACATTTCCGAAAAATAAAAAAAA
-GGCTTGATTTTTTAAAATCTCGAATTTTTATTATGGTCAATTGTTATTTT
-TTCCAGAGAAAAACTCATTTTCTCCCAATTTTCAGACGTTTCTCTCTAAA
-TTTGGTGTTTTTCCAATCGTACCCTATCTATAGGTAATTGATATCGTCCA
-GTAGCTTCTGAAATGTATTCTGTAAGCCGATTCTCGTTCATTTCGTCTGG
-AAACGCCCAAATTTGTTGATCTCTGCACGGTTCTTTTTCCAATTGCTCTG
-CAGTTGGCTGTATAATCGCCTGATATTCGGTTCCCACGTGGATTAGATTG
-TCGACGTTGGAAAGTGGATTTGCTGGAAGAAATTGGGAATTTTTCAAGGT
-TTTAAGTGGATTTTCAAGCTATTTATAAAAGCATGAAAAAGCTCAGAAAT
-GACTATAAAACCTTTTTTTACGTCGTATTTTTTTCAATGAAATTACCTAC
-TTTTAATTAATTGTTCGGCTTAAAACCAGAAAATTGTTTCATATCGATTT
-TCCCGGTGAAAATCGAAGGAATCGTCGCATTCTCAAAGTTTTTTCACCGA
-TTTGTTTCAATTTTAGCACAACTAAATGGAAAAATCACAAAAATTCCATT
-ACAGCCGATTTTCGTGAATTTTCCTACATTTCGAACTAAAAATTGTCCTT
-TCTTCTGTTTAAACCGGAAATTCTCTTTTGAAAAACCAATGAAAATTTGA
-ATTTTCTGGGCTTTTCTTCGGAAAATTATTCTCGAAATTTATCAATCGAT
-CCTTGGGCTTTTTTTGTTCCGCAGAGGCTGGCGGAGTTTACAAGCGTACG
-AAGTGGTTCAACTTTTATATAAAGCTTTATAAATGGGACATAGATGAATA
-TTTCGAATGCTAAATGCAAAAAGAATCAGTAAAAAAGCGCGCAGCCCCGT
-CCTTCTCTGACGAAAAACGCCGTTTAAGGATCGATTGCTAAATTTTGGCA
-GTAGTTAGAAGTGTCAAAATTTCTGCCGGAGAGTCGTCAAATTTCACTGA
-AACGTAACCCGGTAATTTCCACAATTAATGGTCGATTTTTCGCAAAAAGT
-GGTATGTTTGTCAGGATTTATTAGAAATTGTGGCTGTCCAGATTTTAAAG
-AGTATTTTTGGGCAAAAATGTCGAATTTTCTCTGAAAAAGTTCGATTTTT
-ATCGAAAATTCAGATTTTTTAGATAGTTTTCATCGATTTTCCCAGTTTTC
-AGCCTGAGAACTTTACTAACAGAAAGATGTGTCATGAGCACCACTTTCAT
-GATGCTCACGAGCTTCAGCTTCTTCATCTTCGTCCTCTTCATCCTCCAAA
-TCTTCATCCTCATCGCCCATTGATTCCCCAGACGTTGTTTCGCGTTTTCT
-CATGGATCTTATAGGACGAGCCATCTGAAGTTTCAATTTTAGCTTTTAAA
-TTCAATTTTACCGCTTAAAAATCGATAATTCTCCCGTACTCTGCTGGTTT
-CTTCTTCTTGTTCCGCCTGCTCCTCTGGATCATCTTCCTCCATTGGCTCC
-GGCGATGCATTCAACATATTCAAGCCTTCGTCTGAAATATCTGGCCAATT
-TATAGAAAAACCGACAAAATAATAAGCCTCACTTTCTTTTCGAGAGGCGT
-CTTCGTCAGATGACGTGTACGAATCCATTTTCTGGAATTTGAGGATTTTT
-GAATGTTTTTAAACAAACTTTATAGAGAAAACATTCGAAACACTAGAAGT
-TATGTTGAAACACGAGAAAATTTTTTAAAAATCCATGAGAAAAACAGTTT
-TGAAAAATCTGTTTTTGGAGGCTCTCCGGATTTTGAGGAATCGTCACCCC
-GGAGACGCAGATTCTCCGGTAATTTTTCATTCATATTTGAGTTTAAGAAC
-AAAACAGTTTAAAAAAATGTTTTTAGTATTTGAATGAAACTTATAATGTA
-TTTTTTCTTCCATTAAAACTTAAAAAAAACTACAAAATTATTATGAATCA
-AATTTGAAACCGTGAATCAATCTCCGCGGAAGGGCGAGTCTATACTGCTG
-CAAGCGCACTCTATCGCAAATGTACAATTGGCGGTTTTTCAAACAGGAAT
-TAATCGGATTCTCGTAGTTTATTTTGGATTTCTTTTTTCGGGAACATATT
-GGTGTTTTTGCGTTCAATATTCAAATTTAGAGGAAAACTGCTTCAAATAT
-TTAGGTAAACTCTTGAAACCGCTGAAAATAGGCAAAAATAATTATTTTTG
-TATTTTTTAGGCTACTTTCTATACTTTTGCGTAAATACTATAGTTTTTCT
-ATAAAACACCCATTAAAATTATTTTTATAAAATGATTTTTCCAATAAAAA
-TAAAATGCGCAAAATGATTCTTTTCCAGAATCCTATATGCGCCTTTAAAA
-TCTCTCGGATTACTGTAGTTTCAAAGAAATTATCCTTTATATTTTTAATT
-TTAAATTTTTTCCTGAATGTCAAATATTAGGGGAAAAATTATAATAATAT
-GTGCTTTATTCATATGAGTGTAGAATTAGTGAAAAAGAAAAAAAACATGT
-ATGGACTGTAAAATTGGAATTTTAGCGAGAAAATAAAAATAATATGCAGA
-AAAAATTAAAATTTTCAGGAAAAAAGTCAGTAAAGCCATCAAAAACTACT
-CGATTTTGAAGGAAATCAGCAAGAAAAATTAGAAAAAAGTATTTTTAAGT
-TGGAAAACCCCTGCTTGAATTTGTACACTAAATTGGGCATAAAAGCGTAC
-AAATTCGCAAAAACCGGTAAAAATCTGGGGATCGTGATGGATGGAGTGTT
-TTGTGAAAAAATGCAGCGAAAAATTGAGTAGACAATTTCAAAAATGTCGA
-TTTTTGAAATTTGTGACGAAAAAATTGAACAAAAACTGTTTTTTTTTGGA
-ATTTTCAACAAGAAGTTTTATAAATTTTTTTGTTTAAAATTTTGAATATT
-ATATGAGTTTGGTTTCACTTAACAGAACAATTCGAACAAAAGTATTCTAG
-AAAGGAAATGTGCGCTCCAGCACACTATTTGCCCGTGGAGCGCACTTGTG
-TGCACGAACGCTAGCGAGAATGTGTGGTAGAAAGGGAGGGAATAGGAAAT
-ATTAACAAAATTGGGCAAAATATGTAAGATTCGGAGAAAGAATTGGAGAA
-AAATATGTATTTCGAGCTCCGCGAGCTGATCAATCCAAAGGCTTTCTCCA
-TCCTTTTTTCGAGAGGCACATTGCATTATAGTTACACACAGCACGTGTAT
-AATGGAACATTGAAGCCTGGAAACGAGCCATCGCTACCATCATTACCACG
-TGGATCTGAAAAAATTAAAGTTTGATGATTCGAAAATTTTCTGGAAAAGT
-TATGATTGTGAGATAAATTGAATTCTTTGAAAAATCAAAATTCAAAAGCT
-TGTAGAAAATTTTATATATTTTTTTAAGCGTATTTTTTCCGTATACATTT
-CCAAATTTTTTTGTTACCCAATTTTAAAGATTTTCTTGAATTTTAAAATT
-TCTTTCAGTAAAAACTTTTTTTCAACTTTTTGATTTTTTTTCCGCATTTT
-TTAAAATTTTATTCAGAATTATTAGATTCTTTTGAATTTAACGAATTTTT
-TTCGCTAAAAAATTGTTCGATTTTTCCCGAATTAAGAAAAATATTATTTG
-GTTTTTGAATTATTTTCCTGATTTTTTTCGATTAATAAATTTGTAAAAAC
-AATTTTTTTTCTAATTTTTGGTTTTGATGATTGTGTTTTTTTTCTGAACT
-TTACAGTTTTCAAAGTTTACACCGAACTTCCACATTAAAAAATTCTGATA
-CAAAAAAGTATTCACATGATTTTTAAAATTTAAATATTTTTCAAAAAAAA
-TAATATTTAAACTGTGTTTTTTTCGGAATTTTTTTTCGATTTTTTCCGAG
-TTTTTTTTGGAATTTTTTCCTTTCTGCTCCAAAAATATTCAAATTCAATG
-TTGTGTAGAAATTTTATTCAAAAAAAGTGTTCAACTTCTGAGTCTAAACC
-TTTTCCGAATCCTTAAATCCTGGCAGAGCTCTCGTGAATTCAGTTGTCAA
-TTTATGTGGATAGCAAGCTGCCAGTTTAATGAAAGTTTTAGTTCCTTTGT
-CAAGTACTCGATTAATTTTCGAATAATCATAATCATCGACTCGAACACCA
-TATAATCCTTGAGTATAGTTCCAAATTGCTTCACGGAATGCAGCAGTGTC
-AATTTCATTCTGATTCACGGCGGCTGGTGGTTCTCCGTCTCCAGATGCAT
-GGGATGAGCCGGATGGCCTGAAAAATTAATTTTTTGGAATTATTATATTT
-TTCTGTTTTTGAAATTTCATGCATCTCGAATATTTTAACAAAATTACCAA
-ATTCAACTAGATTTCTTACAACTTTCACTGTGTCGATTTACGGGTTCGTT
-ATACGAATTGAATTTGTTTATCGATAGAATATTAAAATTTAGCTAAAATT
-GAGAAGAATATAAGAAGAAATTAATTTTTTTAATTTCAAAAATCGAGCCA
-GTAAATCGACACGAGCGATCGACACAGTAGTCATTTAAAGACCAGTTTCC
-GCCACGAAATATTTCGCGCTTCAAACATGTTGCGTAGTACGTATTCTCAA
-AATTGTGCGTTCACGTATAATATTTATGCGAATTTTTGGTCTACTTTGTT
-AGAGAAATCATCACTAACATATTGCCAGTAAGAGTCCGAATATGATCGAA
-CATTCGATCAAGCCGTGACGTCAGTGTATCCGTATACTCATTCATCGTAT
-TATAAACATGATCCCATCCAAATTCTTCAACTCGGAATGGCGGAATATCC
-TTTTCAGGTCGCTTTCTAAAATCAATATATCCAAATGTTCGATGATGCGA
-GTAAATTGGATAATTACACGGCGGCTCTTTTTCCATAATATCTTCTCCAT
-TTTCATCGATATTTGCAAGAAGAAGTACAGGCGAGTAGTTTTTCCGATTG
-GAACTATATGTTGCTGCAGGAGCACTAATTAATGATTCAATAGTTTCAGT
-AGTCATTGCACACATCTTCGCTGGTGGCCTAGTTTGTCCTTTTTCCGTCT
-TTTTCAGCTCACTGATCAAATATTCGACTTCAGTTGGCCGACGATCTGGG
-ACTTTTCGGAAATAGGCCGACATTCTCGCCTCCCAATAGTCGAGATCATC
-GATATTAAGGAAATCAATCTCATCTTGTGTCAAATCAACACGACGTTCCA
-ATCCAATACAGCATATAACTGTGCACATTGCGTGAGTCATTGACATTATT
-CCGACGGCGTGGTGGAGAGAGCAAACCGAGAAAAACGCAGGACCACCGTC
-TGGCGTGCGGCGAGCGAAGAGCACCTGGAAATTTTCAAATTCTTGAGAAA
-AACCTAACATCGTTGTTATACGTTCGTTCTCTTGGCATTGGAGTTGGCAG
-AATTTGTTTTGAAAAAACGTTGTTTTTTTTTTGAAAGAACATTTTTTTAT
-TACGGGACCATGAGATCATGAGAATTCCTATTTACTGGCGCGAAAATATT
-GGCAGGCCACGGCAACGAGAGAGCATATGGCAAAGAGAGACGCATCTTAT
-TTTGTCTTGTAATTTTTTTTTAAAATAATTTACAATCCCTTTTCAACTAT
-CGTGATTGTAAAATATTACAAATTTCAGAATTTCGCTACCAAATTATTAC
-TGGAAAACTAAACTCTGAGAATGCGCATTGAGCAACATATTTGACGCGCA
-AAGCATCTCGTAGCGAAAACTACAGTTATTCTTTAAATGACTACTGTAGC
-GCTTGTGTCGATTTACGGGTTCGGTTTTTGAAATAATTTTCTTTTCGAGA
-AGTGACAGTGATATTCCATTTTCCTTCTTTTCTTCCTATTATTTTATCAT
-TATTTGCTTAATTTTAATATTCAATTCATAACTAAATTACTTTAATTCAT
-TTCGAGTAGACATTCAAAGAATTCCGGTAGTTTTCGCTTCGAGATATTTT
-GCGCGTGAAATATGTTGTGAAATACGCATTCTTAGAATATGGTGTTCCCG
-TAATATTCAGAAAAGAAAAGATTTCCAAGAACTTTCTGAAGATTTCAATA
-TTTGCAAAATCAGAAACCAGTTCTGAATATTCTTTATTTTTAGAAATTTT
-TCAAGGTTTTCTAAATAACTTTTCTAAATAACCTACCGTATTTCTTCTAT
-TAATATGGCTGCAATACTATTTTTCGATGGTCTTCCCGCTTGCAATACTA
-TTAGGGAGTGCAAGTCTAATAGGGAGTGCCATACTATTCTTCAGAAAATT
-TTTCTGTGTTGGGGCTTACTAGATTCTACTTGAAAAAACTCCAATTTTAT
-TTGGAAGTATAGAAAATTTGATTGAAATTGCAACAAAAAGGTACAATAAC
-TTCAATCTCTAAAAATTTTGTTATAAACTGTTGCAAAATAGGCAAAAAAT
-GTTATTAAAATTTTAAAATTAGTAAGGAGTGTTTGCAACAAAAAAAAGTA
-GGTGCAAGACTATTAGGGAGTGCAACACTAATAGGGAGTGCAATACTAAT
-TTTCGGAAGGTCTCCGAGGGGCAATACTAATAGGGAGTGCAAATCTAATA
-GGGAGGCCATATTAATAGAAGATATACGGTATATATAGCTTTGAAAAATC
-GGAAAATGCCTAATTTTTACTTTTTGAGGTTTGAAAATCTCTAAAAATTC
-AATAAAATTTCAAATTACCGCTAGATTTTTCCAATGAATCATCCATGGTC
-TATGACAGAGCATTCGATTCAAATAATCCAATTTTCGAAATTTCATGTAT
-GACCAATCAATGCCCAACAACCACATTTGTTGTCCACCCTTTTCCAGAAA
-TTTGCGACGATGATGATCCATAAGTGATAGGCATCTGTGACGTGATGCAG
-CCATTAGTGCAAGATAATGACGAGCCGAAGCTGGTAGATCACTTATATCA
-ACGAACATATGGCCATAACTTCCTGTCATATGAACATGTAGAGTTGGGTG
-TTTACATGTGAAACGGAATAATCTGGAAACGTGAGGGAAATTAGTTCGAG
-ACGGGGAGGGGCAGGTTGGCGGTGCCAACCGACAGCCGAACATTGGGGTT
-TCTCAGCTGGTAGCGCCAGCCGACAGTCTACTGCAGTACTGCAGATAAAT
-TTTCGTCGGCTGTCGGCTGGTGAAAATTTTCATGAAAATCAATAATTTTA
-AAGAAATTGTTGCAAATTTTTCCCAAACTTGACCAAATTTGTTGGCTGGC
-TGTACCAGCCGACACCCGAAATTTAGAACATTGATTAGAGGCTGCTTGGC
-AGAAATAATTTTAAATTCAGAAATTCAATTCGTTTTCAAAAAATATTTTT
-TAAAACTTTACCGATCAACTTCTGGAATCGGATCAAAATTGAGCCAATCC
-ATGGCTTTTCGTCTTTTAGTTGTAGTGTGCATTGTGTAGATCTTTTTATA
-TTGCTGCGAGGTGAGTAAATGAAGAATTTTCGCGACCCGTTTCTGAAAAA
-ACTCAGTTTTCTAAGGAAATTTTGAAAATAAATTCGAGAAAAAGAAACTG
-AGTCAGCAAAAGAAAATTGGAAATGTCTGTCTGGAAATATTCGAATATTA
-TATTCAAAAGTTTTCAAAAAAACAACGAAATTACAAGCAATTGTGATCAG
-AAACCGCGGAAGGAACTGGACGAAAAAAATTATCTTTGAGACGAATCTCT
-TTGCATCTTTGTGATCTAAAAGATTAATAAAGGTTGTCATCACATTTTTC
-GAGATTTGGGAATGTGATAAGGGTGAAAAATGGAGATTAATTGTGGTAAA
-ATGAGGAAAAACCTAATTTTTGGTGAGAAAATTGTGGAAAAACTATAAAA
-GAATCTTTATGGAGTTTAAAACTCAAGTTTTTCACGCTTTTCCGCACTGT
-GCGGAACGTTTTTTGAGAGAATTTGGCCGAATTCGGTGATTAAAAAAATA
-ATTTCAAAACTTTGCGCCTCAATTGTGATGTATTACCGTACTCTGTTGCC
-ATTCCACCAAAATTTCCTTCATTGTTTTGCCATTTTTCTGCATAATAACT
-GTTCTGGGTTTTTTTGCTTCATGTGCCCAAATGTACGAATTTCCCTAAAA
-ATTATACCTATTTTTTCAAAATTTTTAATCGCTAGAATTTTTTTTTCTGC
-ATTTTCTTTAAAAAAAGAGATTTCTCGCAAGTAGAAGGAGAAAAAATGTG
-TGGCTATACTTCTTCTTAAAGAATGCACGACTAGCCATAGCTCAAGCCCC
-CTCTGGAACGTTCCATCTTCCTCCCATTTTCCCACGTTCAAGAATCATCA
-GCTTCTTCTCCCTCAGCTTCTCTTCTTCTAAAACCACAACTAGACAAATG
-TTCTTGTTTTCCACCCTATTTTTCACATAAAACCGCCGAGAAACCCGCTA
-TCACAGACTCAATGCGCACCGGAGGGGCTCTTTGTGTGTGTGTACTGATC
-TCTGCGTTATATTCGAACACCGGCGCACACTCGGATTGAACCAGAGGGGG
-GGGGGGAGGGGGGGGGGGGGGTGAAAAAAGAGAAATACTCTGAAATTCCA
-TAAAATCTAGAAGAAGAAAGAAAACAAAGGAAAAATTGGACATTCCGAAG
-TCAGGCTAAAAAATCTCATAAAACAAAATCTATTCGATTTGTGACCATTT
-TCATCTATCTCTCTCAAAACCCGAATAAACAAAGCCTCCCGTCCCCAAAG
-TGTGCTCTCATGCTCTTCTGGAGCCTTCTAGACTGTCTGTAGAGCCTAGA
-GACAGCGGAATTGCACTGAAGTGATGGAGAGACGTAGAGAAAACGCCTGA
-AGAAAAAAACGAACACTTTGGTGGAGGAGGAGATGGCTTCCCTCCAAATA
-AACAACAATTTCTATCGTTTCTCTGTGATTGTGTTCTCTTCTATGTATAC
-TGTTACGATATTGAACAGGAAATTAAATTGAGCACTCTGAATACATAATA
-CACAATAAATAAATACAAAAACTATAGTTTCAGCACAAAAAATTCGAAAA
-AAAAACGATTTTTTTTGTCCGAGAGGAGTATATGGCCTAGAAAAAGAAAA
-CTCGGCCACTCTGATGCAATAAATTTAAAAAATTATGGCCGAATTTTAGA
-TTTCTCAGGCCAATTTGATACGTTTCTCGAAAAGCCATAAATTAGTCGGT
-TTTTCACGGGCTTCTTGCCTTCCTCATTGCATTTTTCGCGCTCCATTGGC
-AATCTCCTGCTGGACAACGCGTGGGAAATCGTGTGCCCCACACGGGCAAA
-TACATTTTGTTTTACAAAGAAAACCGTGCCGCGACGCGACACGCAACGAG
-CCGTAAATCTACCCCAGATATGGCCGAGCTCAAATGGCCTAACCTGTCAA
-AATCTTCCACTTCAAAATATGAGGGAAGCCAGAAGCGCGTGTTGTTTCTG
-AAAAAAAAACCCGCCTAAAGTTGATTTAAATTATCGTTTTTTTGGAAATA
-ATAAAATCGATGAATTTGTAGATTTTGATAAATTTCCGATAAAAAAAAAA
-TTTTAAAAGAGGAAAAAAAATGTTTCTTCGCCCTTTAGTACCAAAAATAC
-GCCCAACTAACCAAATCGTTCTTTCAATCTTTTTTAAATGTTTGTGCGTC
-TATAATTGTCGCTTCAGAAAACTACACAAAACACACACACACACAAGGAG
-AAGAAAAGAAAAAACGTGTTCCATGACCTGCCACTGGGATCGATCTGTAA
-AAGAATTGGGGAAAATTGAGGTAAACTGGTTTTTTATCGGGAAGATTTTT
-TCGGAAGGATTGAGATGAAAGTTCGAAAGGTAATTGGCAAAGTTGAAAAT
-TGAAAAATTCGAAAAAAATCTCAATTCTCTGCTGTAACCCCCAATTTTGC
-GTCATGGCCTAGAGTATGCAGCGTGGCCTAGAAATTCCTAACGTGGCCTA
-AAAGATCACGGCGGTACCTATGATTTTCTAGCGTGACCTAGAATATACCA
-GACCTAGAATTTGATAGCGTAGAATTTCCCAGTATATCCTAGCAGTCTTA
-AGTGACAGTTTCTCAGTACGTCCAAGAATTCGTCAGCATGACCTAGGATG
-TTAAAGCGTGGCCTACAAATTTTCAGAGTCTTCTAGGATATTCCAGTCTA
-AAAATTTTCAGTGAGGCCTGAAATCATCGCGTGTCCTAGAATGTCTAATA
-ATTGCAAAAAAAAGATTTGAAAACTAGTATTTACCCTAAAATTGCATTTT
-GAGCATTATTTTTAATCTAGTTTTAAGGAAAAAATCAGAAAAAATAAACA
-TTTTTTGATTAAATCTTCCGATCTACAGATAGAAAGTGTGCAAGAAAGAA
-TGCAACATTGTGCTCGGTGGAGCAAGAAGATAAAAGAAAGAGAAAGAAGG
-TCCCCCACCCCTCCAGTGGTCGAAACAATGATAAATTGGACAAACGGAGG
-ACCAAGGGGCCGGGCAGACACAAGAGAGAGAGTACGTGAACTGAGGAGGG
-TGTGCAGGGAAAAATGGGATGGGGGCAAATCTAGTTCAAAGATGAGACAC
-TTTTCAGGATCTTTGATTCTGAGAAAAATTTTGAACAAAAAGAATACTTC
-AATAATTTAATGGCACATAGAAATATTTTCAGATTGTTCTTCAAAAGAAA
-AATATTTTTATGCCCGGAAAATTTATTTATTGCATTTCTTCCAAAACAGT
-GGCCGGTCTCGACACGACAAATTTTTGTTAAATGCGAAGAGGTGTGCGCC
-TTTAAAGAGTACTGTAATTTCAAACTTTCGTTTTAATATTTACTTGTGGG
-AAAACATTAATGCTTAACGAAAAATTACAGTACTCTTTAAAAGCGCACAT
-CTTTTCGCATGTGACAAACATTTTCGCGTCTCGGTGACAACTTTTAAGTT
-AAAGGCACATAGAACTTTTCTGAAGAATTTTATTTATTTTTCTGAAAGTT
-AATTGCTACAGTATCCTTTTTCAAGTCGCACCGAGAGCCAAACTGTAGCA
-AATCATCAAAAAAAAGTCGACAAAACGTGCCGAAATCAGTAAACTTGAGA
-GCTTTAAAACTCTATTATCAGTTCTTCGCCAACAAAAAAAAAGAGTACCG
-TATCAAAAACGAACTTCGACTTTTTTGGCTCTCCTGCATACGGACATGAT
-TCTGATTGACAGTTTTCATGTTTTTTTTTGGGAGTTTTATTTATTGTGCA
-TTTAAAAAATCGTATAGTTTGATGCGTGGCCTAGAATTTGCCAGTGTGAG
-CATTAACTCTCCACGGTAGCCAAGAAATTTTCTACGGTGGCCTAAAAACT
-GCCAGTGTAGCCTAAAATATTTTATTGTGGCCTAAATTTTCCAATGGTCT
-GTTTTTTTTATAGTTGCCTAGAATTTCTTTTCGTGACCTAGAAGCGTACA
-GAGTGGTGGCCTAGAAAACGATTCATGGCAGAGTTTTGAAAAAAAAACGA
-AATTTCGAGAAACAAGCGAACAAAAATCGTCTGTCGAAAGAGTATTTCGA
-ATGCTGGGGATGCAAATCAGCAAATCATTCAAAAAAAACTTTTGTGATAA
-GAAATCAAACTGATAAGCCAGTGTCAAAGTCTCGAGGATTAAAAATAGCA
-TTTCAGGTCGGGGTACGGTAGGGTTTTTGTAGAAATTAATGCAAAATTTC
-AGTGGGAAACGAGTTCGTGGCCTAGAAAAATCATGTCTGAAAAATTGCAA
-ATGCGCTCCCCCGAAATGGTTAAAAATTTTCAATTGATAGCCTATTTGAA
-GTGGCGGCCTAGAATATCAAATAATGGCCTAGAACTCAAATTGGCGGCCT
-AGAAATCAAACTAATGACCTAGATTAGGGCATCTTGTAGGCAGCTTAGAT
-CACCTATTATAGGCAGGTGTAGGTAAAATTGTAGACAAATGTAAGTTTCT
-TTGAAGATAGGCGTAGGTTCCTTTGCAGGCATACATAGATCATTTATTAG
-GCAGATGTAGGCCTGATTGTAGGTACAGTGCCGGCCAAAAATATATCCTA
-TTTTTGACTTTTGATAAATTTACAAATTTTCCAAACGAGCACAACTTTAA
-AACTAGAAATGTTATCGAAAAAAGTTCAACTCATGTATGTATTGCCCATA
-ATTACGTCTACTCGTATTCAATTGTTTGTTGTTTACTAGTGTCACGACAA
-CAAATACAGCGGCCGACATCTCGTAAGCCCGTTTTTGACAACGTTTACTG
-ATTCGGCCGTATCTCGAAAACTAATTTTTTTCTGAAAATGTTGTTAAAGT
-GAAATAGTTTTCATGTTATTTGTTATCATTTGTGTTTATTCACTTTGTTC
-TGAAAAATCCAGTAAAAAAGTTATGGGAGTGCAAACTTGTCGCTCACTGC
-CACTCACCCGCTACAATCAAAAATCAGGTTACTTATAGTTAGTTCTAATT
-TTTTTTTTGTAGAGCATTTTTTAGAAATAACACATGTAAAATCACAATGA
-AGCTATATTCAAACACGATATCAAGATTCAGGAAAAAATTCATTGTTTGC
-GAGAAATGTTCAAGGCGTGGCCAAACACTATTCAAGTTTAATCTCTCATA
-ACTCTTTTTCTGGATTTTTCAGAACAAAGTGAATAGACATAAATGATGAC
-AAGTAGTATGAAAACTATTTCACTTTAACAACACCTCGAAAAAAAAATCG
-CTCTCGAGATACGGCCGAATCAGTAAACGTTGTCAAAAACGGGCTCACGA
-GATGTCGGCCGCTGTATTTTTTGTCGTGGCACTGGTAAAAAACTTAAAAA
-ATTGAATACAAGTAGACGCAATTATGGGCAATACTTCATCAGTTAAACTT
-TTTTCGATAACATTTCTAGTTTTAAAGTTTTGCTCGTTTGGAAAAGTTGT
-AAAGTTATCAAAAATCGAAAATGGCATATGTTTTTGGCCGGCCCTGTAGG
-TTAAATATTTTCGTTATCAGGTGTAGGCATGAATCGCCATGTAGGCGGGC
-GTAGGTATCTTCTAGGTAGGCGTAGGTTACCTGAGTCAAATTATAGGCAG
-ACGTAAGTAATCATAAAAATTGACACTTTGTGGGCAGGCGTAGGTCACCT
-TTTAGACAATCATAGTTAGCTTTCTAAGTAGGGTTAGGACACCTATTATA
-GGCAGGTTTAATTCCTCTTATATGTGTGCGTAGAACACGTTATAGTCAGG
-TGTAGGTCACTTTGTAGGCAAGTCTAGGTTCTTCTTTCGGCAGGCGAAGG
-TCATCTTCTGAGCAAGTTAAGGTTCGCCTTGTAGGTCGGTGTAGGTTGCC
-TCGTAGGCAGACTAAGTTACCTTCTGGGCATGCCTAGATTGACTAGTAGG
-CAGGTGTTGGCACCAAGGGTGTCAGTGTCCCGTAAAAATTACAAAAACGG
-GACAACGGGATGTCCCGTTCCCGTGAAAATTTTAAAAACGGGACAACGGG
-ACGTCCCGTTCCCACGAAAACACCCAAAAAACGGGACAACGGGACATCCC
-GTTCCCGTGAAAACGCTCAAAAACGGGACAAAAGACGTCCCGTTCCCGTA
-AAAATGACAAAAACGGGACACCGGGACGTCCCGTTCCCGTGATAATTTTG
-AAAACGGGACAACGGGACGTCCCGTTCCCGTGAAAACACCCAAAAAACAC
-CCAAAAAAACGGGACAACGGGACAAACGGGACACGGGACTTGACACCCTT
-GGTTGGCACCACTGAAGAATGCTGAAACCGACTTTTTTTTCAAAAATGTC
-CTGCTCAACGAGCCGAATGCATTTTGGTCGGATTATATTGGCACACCTTT
-TTGCCCCCGAGAGAATCATTGAACAAAATCTCATGCACTTTCAATTTCAT
-TTTTCATTTCATCAAATAAAAAGATTCGGGAGGATTTGATATATATTGGA
-AAAATAAATGAATGGGGGATTTGTATGGTGGGGGAAAAGTGCACACCCGG
-AAATGAGCAGTAGGATTTTGAGCAGGAAATTGAAGGAGCTGGAGCAGGAG
-AGCAGCTACAGTAACCACCCCTTCACAGCAAAACACATGGCTCATAAAAT
-TGAATATTTGAAGTGAACTACTAGTGATAAGCGGTGAAACGGGGTATGTG
-GCACTAATTTTTTTTTCTTCAAAAAACCCATTTCTTATCACTTGTGTGCA
-GAAGCATTATGGAGACAGGCAGGAGGCAAGTGGTGGTCTAAAAATTAGAA
-AAGTTCGGCCACAGCTTGCCCGATAGGAGCACACGGGCATACTGTTTCAA
-CAAAAATTCGAAAAAATTGGAAAATCCCGGAATTTTGATTCCGCGGAATC
-CGACGATTAAAGAAATTCTCGCGTTTCTGATTTCACGGAAATCGGTATTC
-TCGAAATTTGGTTTCTGCGGTGTCTATTGTTTTGGAAATGTTGTGTTCAT
-GTTTTATGAAGAACAATATAATATTATGTATAATAGATATTATATATTAT
-ATATAATAGAATAATTTTAGTAAAAACCCCACAAAACTTCGAAAATAGAA
-GAAATTCTCGCGTGTCTCCAAAATTACAAAAAAATCAGTTTTTTTCCTTT
-ATTTTATATTACACAGGATATTTATATCAATTCAGCAAAAAAACGGGCGG
-GACAGAAAATTAAGAAATTTGCGAATATTCGTTCCCACGGAAGTAAATTT
-CCCCGAATTAGAAAAAATTCGAATTTTTACTGGATTTGTCTCAAGCTTTT
-GAATCTAGAAACATTTTCTAGTAAAATCTCTTTAAAAAATTTTTTACACC
-AAAAAACTTTTTAGGCCCTGAATTCTGCGAATTAAAAAATTCCGCAAGAG
-ACCACACAAAATCGAGAGACTTAGTTAGACAAGTAGAGGGAAAAATAAGA
-GGCAACAAATCATCGAAAGTTTTTTTCTGCAGAGAGAATGGGGGAGAAGT
-TGCGGCGCTGAAAGAGAGAGAAAGAGAGAGAGAGACAGAGAGGGTGAGAG
-ATATAACAGAAAACCAGGATAGTGCGGAGGAAGAGAAGAAAAAAGTGTTA
-GAAATATTTGTCCGTCGACGCCTTCTTCGTCTTCTTCGTCGCCTTCATAA
-ATGAAACTATGCATTTTCCTCAGATATTGCCTTACTATTAAATGGGGCCC
-GGGCTAAAGGGTGTGGCCGGCCGATCCAAAACGGTGGCCTAGAAAAATAT
-CGGCGGTGGCCGATATCAAATAAAAAAAACATCGATAGTTATGAGACCAT
-AATTTTTAGTTTTTCAGATTTTGAGTCACTTTTCTGATTTTTATCCCAAA
-AATAGAGCTCTTTGCTGTTTTTCTGCAGAATCAGCAGGTGGCAACTTGGT
-TTTCGGAATTTGTGCTATTCTTAGAAATTCCCGACACAGCATCGAGTTTT
-ACTGGAGAACACGTAGCGAGCACAGAAAAAGGAAGGAAAGACAAGAATTG
-GCTCGGCGAGCAACCAGAAAAGCAGCAAGAAAAAACTGACCGAGCAAAGA
-ACAGCGCGATGGGGCTCATATATATCTAAAAATGGATGGATGGAGAGATG
-AGAGACAGCAGCAGTATTCGGTCAAATGAAGACAAGCCAATTTCGAAGCT
-TATTTGGTATTCATGCGTGTCTTTTTTTTTCTTGCAAGAAAAACTGATCA
-TTAGCAGAAAATTCAAAAAATATTGGTTGTCCGAGAGGAGTACAGAAATT
-AAAAAAAATCGTCCGAAAGGAGTACAAAATTCAAAATGTCTATTATCCAA
-GAGAAGTACAAAATTCAAAAGTGTATATTGTCCGAGAGGAGTACAAGATC
-CAAAATATGAATTGTCCGAGAGGAGTAAAAATTCAAACCACAAAAATCCG
-AATTTGCCAAGAAAGGGGCGGAGCCTGATTCGAGTGGAGTGTCGTTGCAA
-AACGCAAAACTTCAAAAACATACGGTTTTCAAAATCTACCTCGCCGACCT
-ACCGTAACCCTCTAAAATTTCTAGGATCAAATATCATCGCAAGAAAAGTG
-TTCGTTCGAAACGAAAAATATTTCTGACGCCTCATCAATCATCATATCAG
-TAACAAAAACCTGAGAGAGACGGAAACAAAGAAATATATTTTGAACCGAA
-CAGGGATCCTGCAACAAATCACGTAATGGACAAAATGCGCCCTATTGCTA
-AATATGCAGCAAGACGCAATTGCATTCTTCTGCCAGAATATCGATTTTTA
-TACGTACTTATAGTGATAAAAAAAATGCTGAATTATCGATTTTTAATTCC
-CCGGAAAAATGTGCGACAGAGCGTGTTTGCATTTTTTTTTTCGAATTTTC
-GTGCAGAAAAACCCGTAAGCATCGATTTTTCTCAGTAAAAATTTCTCGCG
-CCAAAATTGTTTCTATTTTTTTCGGGAAAAATCGAAAATCTCCAAAACTT
-CGGTGGAGCGCACTTTCTGGACCACAATTTTTGAAGGGAAACATCACTTT
-CTGCGGTTTTCAATAAACGAACAAACATCAACAAGAAACGAGAGAGAGTT
-TTTGTTGACTTTCAAGAAAAAAATGGATATCGAATTTCTGTGCTCCATTT
-CCCTCTCCGGGAAATGGCGCGGGGAACGTGCAAACAATGCGAGTATGTCT
-AATGGCTCTCACGTAGATCGAGAAAGTGGAAAATTTGCTAGTATAGACAG
-TTTAAGGAGGCTCTTTTATTCTATTGGGGAACCGATTTGTTTATGTCTTG
-CCGTGGAGCGTAGTTACTGTAATTTTTTTGCAAACGTGCTCCATCGAACA
-GTAAAAAAATCAGTATGCATACTAGTATGTACCTTTAAATAGCTGTAACA
-CGAATTGCCTGTGAAAATAAAAATCTCGGCAAGTTCTCTCCATCGGATCA
-ATGTAGGGAATTTTGCTGTTTATAATGCAAACTCGCTCTAATAAACTACA
-ATTTTCGATCGGTATTTCATGCATTTCGACTGATTTTCGTTATTTTTTAT
-GTACGCTCTCTATTGAAACACGGGGCCCGAGAAAATATCCAAAATCTAGA
-GAGGTTGTATTGCTTAGGCTTAGCCGAAAACCTGTAAAGATTTTTTAAAA
-ATTGTTCAGCCTGCGATGGACGACTTTTTGTAAAACTTGGCCACCAACTT
-TTTTACGGTGCGGCTACATCGCATTTGGGTGACCTTTAATGTGTTCAGGG
-TGTCTAAACATGCACCCAAAAGAGAGTGTCATTTTTAACGCGAAACAGCA
-TCAATCCAAACGGGGCGACAAAAAATGAGAGAGAGAGAGAGAGCGGGCGC
-AATCTAATGTTTTATCAAGTGTCTCTTCTTCTCCTCCGACCTCGTTTGCA
-TCCCCCTAATTCATCATTCGTCGGTTTGTAATACAGAGAGAGGGACATAG
-TGAGTGAGAGGGAAAATTGAGGAGATTCAGAGAGTTAGAAAGAGAGAGTG
-AGAGGGAACTTCAACTTTTTTTTTCAAAAGTTTTGGTCGATGATTTTGAC
-ATTTGATAAAACTGAATGAGAGATGATGCTTAGATAAATGAAAATTGATG
-AGATGATATTTATAAATGCACTTGCGATGTTGTTTTACGTGCAAATTGCT
-GATTAGTCGAGAAGTTGTGATTTTCGTGTCGGGAATATTTCACTAGGAAC
-GCCCTTGCGCCTTTAAAATGTAAAGTAGCATAATTTATTTTCAGAAAATT
-TAAGCGTTGGAAAAATAAGTAGTGCGCAACATATTTGACTCCCAAAATGT
-TTTGTAGCGAAAACTACAGTAACTCTTTAAACGAATACTGTGGTTCTGGT
-GTCGAGTTACGGGCTGCCAAAATTCGAAAGTAAATTCATTTATAATCGAA
-CCCGTAAATCGACACAAGCGCTGCAGAAGTCATTCGAAGAATTACTGTTG
-TTTTCGCTACTAGATATTTTGCGCGTCAAACATGTTGCGCAGTACACATT
-CTCAGAATTTTGTGTTCCCGTGATATAACAATTCATTTTTCTGTCTATAA
-CCTCTTTCAATTATAAGAAACCATTTGCAGCGAAACACAAAAAATTTAGC
-CGATTTCTATTTCACCTATAAAATTCGCGTCAAATGGCCCGCGCTGTCAA
-GACAGTCATAAAACCAAATGTTATGCAAATGGCGTAAAATTCAACAGTGC
-CCGCCCGCATGGTCATTGATCGTTTAAGAAGAATGGAGGAGGGTGCGGGG
-AGCATCATTTCCTGAAATGAGCCCAGAAGCGAGAGATTAGAGAATTAGAG
-AAATGAGAGATCAATGAGGAGAGGGTGAAAGGTATGAACAATGAATAAGA
-AAGGGATGGAAATGATCACAGATGGAAATAGATGGAATAATGAAGTGCAT
-CGATGCACCATTTCAGATTTTTCGGGCTTTTCGCAGATAATTGAGGAATT
-ACATTTTTCGGGCTCCATCGATAATACCCTGCCGGACAACGCGTTGGAAA
-GTGTGTGTACTCCACACGGGCAAATACCTTTAGTTTTACAATGAAACCCG
-AGCCGCGACCCGACACGCAACGCGCCGTAAATCGACCCCAGCCGTGGCCG
-AACCAAAATGGCCTAATTCGTCAAACTTTTACATTCCAAAATATCAGGGA
-AACCAGAAGTGCGCGTTTCCTGTTGTCCGAAAAAAGATTACAACAAAAAA
-GAAGAAATGGAGCATTTGCGCTCCATCACACTCTCAGACAATTTCATTTT
-CCACATCCTATATATATTTTGGTTTTTCTGTCGTATTTTGTTTTAATTTA
-TTGGTATTTCGTTCAAAAATAATTATTTTGACTGTATTTTTGGTTGCATA
-CATGTAGAACTGCTGTTTTTTAAGATATTCTGCCCATTCAAGTTTTTCAG
-TGTAAAATTGATATATTTCATTCCAACTGAAAATGAGATCGAAACGATGG
-AAAACCTCGGATATTACTGATTATGGAAAGAAGAGAAAAGAATCGGAAAG
-TTGTGGATCAAGTTCACCGATTCTCGAAACACAGTCATCTGGCGGTGCGG
-AACTTGACGAAGTTACTGAGGATGAATATTCTAGTAATTCGAGCAGTAAT
-GAAACTAGCGACGAAGAGGAAAACTCAGAAGTACCAAATGTCTTATCTAT
-AACAGAAAGAGGTAAGAATTGCGTCTTCTAGTGATCATACTTTTCGCCAG
-ATTCCCTAATGTAATATATTTTGTTGTAGAGAAAAGTTGGCAAAAGTTAA
-CGGAAAACGATTTGGGACGAATTCGTTTCATCTTGAAGTACACTAGCAAT
-ACTAAAAAATGCGTGAACGAGTATTTTCAATATAATCATGGGCAAAACAA
-TGAAATTATGAAAAGTCTATTATTGGATACCGATGGAACTATGACTGCAA
-AGGCTTGTTCGGAATGTGCCTACGATTTGAATCAGTAAGTTACTCTCTCG
-ATTTATTCCCAAAATTAATATGTGCTTCAGGTGCCACTGCAAAAAACCGC
-TTCGCTTCATCAATGCTCCGTGTGGTTGGTTTGCTATTCAAAACTATAAA
-TAGTTCACTGTTTCCGTTCAGAGGTCATCAACCAAGTTCTTCATGTTGAA
-AATGCGGAGCCCACCAGGATCAACCATGTAATCGCAACACTCTTCCGGAA
-TCACATTGGCGAGATTTTGTTGGTCCACTCTATTTCTGTGCGAGAACTGT
-GATAAAACTAGTATTTTCAGCACAAAGGCTCGAACTGCGGAAGCTCGCGC
-ATCTGAAGAAGCTCAAATCAGGATTCAAATCCAAGACAACTCGAACGCAT
-TCCAAAGATCGTATCATAACGATCCACAACCTTCATCAGCCGAAGAACAT
-GAGGAAGATATCGTGGTGGATGGCTGAGTACGGAGCTCAAATGCCTTAAG
-GCGAAACAATTGGTTTTTTAATTTGCTGGTTATCATGTTAGATTTTGAAC
-GTGTTAGGTCTTTCAATTGTTTTTTTTTTTCGAAATGTTGTTGTTCTAAT
-AAATTTGTTTTATTTAATCAAACGTTTTTTAGTCTACTACGGGCGTGAAG
-CCAGATATCAGTGGTATCTTCTTATCAGAAGCTGAATCATTTCCGGTTGA
-CAATGTTTGAAGGACATAAGAAAGGCTGTGTTACTGATTTCGACCATTGA
-TTTGTTTATATATGGATATGTTCCACTGCCTTTTGGAAAGGCAGTATTCC
-CGGTATATATGGGCCTAATACGGAATCTAAAATAACCTGACACAAACCTG
-ACGTTGACCTGTTGCCGGCCCGCGGCGGCTTAGTGTCAACTTGACAGCGG
-GTCGCGATTTCACCTGCCAGTTGTTCTCCATTCAGCAGCCAGCGACCTGC
-TGGCAGGTTGCCACTAACCTGACGCGGTTTACCTGTGTTATCGGCGCGTG
-CATAGCTTAGTGGTTTCAGGAAATGATGCTAGTAATCAGAAGATCGGGGT
-TCGGGAAACGGCAGGGGCTTGAAGGTTAGGTTCTATGAAGCAGGGCGAAG
-GGTTGACAAGGAGAGGCAATAAGCAAGTAGTAGGGGTTCTCTAGAAAACA
-TTTTTGTCTTTAATATGCGTTTCCTACTGATTTATTATTGATATTTGGAT
-CCCCTTTTCTAGAAAAAAAAATCAGAATCAGCAGAAAAATTTGAGAAAAA
-GTCATAGCAAATCAGAGTTGGTCAGAGTAAATCAGAGCTAGTCATAGTAA
-ATCATAGCTAGTCAGAGAATATCAGAGTTAATCAGGGTAATAAGTAGACC
-TAGTCATAGTAAATCAGAGCTAGGCATAGTAAAGCGTGGTTACTCCGAGT
-AAAACCACACTTGCACCGAACTGCGGTTAGTGTGCTTTACCATTATGTAA
-CTCCGCTTTTTACTCTGAGTTAGTATGATATGGTTTGTCTGAGCTGTGGT
-TGGGCTTCGCGGGAAACTTGAATAATTCGAGACAAAATCTAATTTTAGCG
-AATTTTCTTTAATTTCTTTGAGGTTTCTACGACAGAACTCGAAAAATTTC
-GGGTTTTAATGTTTACACATTTTATTTAAAATTGAATAATCAACTGCGGG
-ACTCCTCGAAAATCACATGCTCATTTAAATTTTGAAGTTCAAACCTCAAA
-AAACGCGCAAAAACCAAATTCAGCTAGGATATCAAATTTATGATTGAAAT
-CTATATTTTGATGCGGTGTTTCTGAAGTTTTCGCGATAAAATCCGAATAA
-TAATTCCACGTACCGTATATTCTCTATCTAATTTCCAGGTCATTTTTTAA
-TGCAGCACTATTAGAGACTGTCGTACTACTGGAGACTGCAGCATTAATTT
-TCGAACGGCTACTGTCAATTATAGATCACTAGTATTTAGTCACAAAAGCT
-AATTTTTTAAGCAGAAATTCATAAAAATGTTTTCAATATTGCGAACTTTT
-GTAACAAAAAGACCCAGTAATTCAATTACTTTCGTAAATTATCAAAAAAT
-CATCAAAAATATACAAAAAAATACCAAAAAATATTGAAACTTTCAAGTGA
-CTCTTTCAATAGAAAATGGGGTGCAGCACTAATAGAGACTGCTGCACTAT
-TTTTCGGACCCTTTTTGAATGCAGCACTATTAGAGACTGCAGTATTTACT
-ACTGGAGATGCAGCACTAATAGAGAATATACGGTATATACGTAATATATT
-CTTGCAGAAAAAAGTACGATTATCAATGAAAAATAGCTGATAAGAGGCTT
-TTGTTTGAACTAACAGACGGAACGACTCCGGTTTAGTTCAAAAAATTCTA
-AAAACACGTTGTGTCAGGCTGTCTCATTGCGGTTTGATCTACGAAAAATG
-CGGGAATATTTTTCCAGAAAAATTGTGACGTCAGCACGCTCTTAACCATG
-CGAAACGAGATGAGATGTCTGCGTCTCTTTTCCCGCATTTTTCGAAGATC
-AAAACGAATGGGACTTTCTGACTCCACGTGTAAAAAGGGGTTACGACGGA
-CCCTGGCCTAGAAATTAGGCGTGAAAATTCTCGGGCACTGGATGTAGTGA
-ACGCCCGCGATGAAAAATTGGGGGAAAATTAGGCTTTCTTTGCGAGAAAG
-ATTAATTAAAAATGTTTTCCTTTGTCGAAAATAATTTTTAAAAAACACAC
-CACGTGTATTCAGCTCGACCAACGCCTCGAAAATTTTCAAAAAAGGCGGG
-AAAAATTAGTTGAATTCGCCAAGAGGAATTTCACCGCAGCGCGTGCAAAA
-ATTTCAGCATTTGCGCGTGACGGTGTTTGCACAAATTACACCGAATGGTC
-GAGCTGAAAACACGTGCACACTTTTAAATAAAACTAGAAAATAAATCCCA
-GGCCTGCAAATATTGCACACAAAACCGTAATCCCCTTCGCGCTAAACAAC
-ACGCGCAACGATGCTCCGCTTGGGGACAAGGAAAAATTAATTTAACTCGG
-GATTTTCATTAAAAAATTAGGTTTTTAGTTAATTTTTCGATGTTTTCACT
-GCGAAAAAGTGTTAAAATAACGATTTTTCAACCTATTTTCAATTAATCCG
-TGCAAAAAATCGTGTATTTCTCGAGTTTTGAAAGAAATTTATGAAAATCG
-GCATTTTTAATAATGGTTTTTCAAATAAAAATATAATTTTTCGGTGCAGA
-AAAGTCGTTGCTCGTACAGTTTTTTTAAAGCATTTTCACATCAAAATCCT
-CCATTTTTCCAGTAAATCGATATGGAGTGCGACGAGACAAAGCTGAGCGA
-CGGCGCAAGCGGCTGGGTGCCGAGTATCCCGACAGATATCGATTCAAAAG
-ACACACCGTTGCTCGATATATCTTCTCAGGCGATTTGGGCGCTTTCCAGT
-TGTAAAAGCGGTAAATTTTCCGACTTTCAAGGGAGAAAAGTGTAGAAAAA
-TCGAAATTACTTCTTAAAAATCTCGTAAAAATCGAATTCTTTCAGGATTC
-GGCATCGACGAGCTCCTATCCGACAGTGTTGAGAAATATTGGCAAAGCGA
-TGGCCCGCAGCCGCACACGATTCTTCTAGAATTCCAGAAAAAGACCGACG
-TGGCTATGATGATGTTCTATTTGGATTTTAAAAACGACGAGTCTTATACA
-CCGTCAAAGTTAGCATTTTTGGCTTTTTCAAACGAAAAAATACAATGAAA
-CACTGAATATCTAGTTTTTTTCTCAATTTTTGCCTAAAAAACGGCGATTT
-TTCACTAGCTTTTCAATTAAAATTTGAACAAAAAGTTTTTTAAAGGAAAA
-ACATGAATTTCTAGCTTTTTCAGAGGTTTTCTATTAAAAAATAGAGATTT
-TTGTGATATCTGACTGAAAAATTACCAAACTGTCGATTTTTTTAAACTAT
-TTTTCACTTAAAATCTGCAATTTTTTTTTTCGAGGAAACATGTGAATTTC
-AAGCTTTTTCAGAGATTTTCTATGAAAAAGGTTCGTGCCGAGACCCATGT
-GCTTTTAAACTTCAGAATTTTCCCAATTTTGAAATTAAAAAGAGAATGAA
-AATTGATTTTCATGGAAAAATGCGTTTTTGGCCCAAAACCTCCAAAAAGT
-ACAAATATAGGTCGACTTTCAACTGTTTTAGATCAATTTTTTTGCAGAAT
-TCAAGTAAAAATGGGTTCATCTCACCAGGATATATTTTTCCGTCAAACAC
-AAACATTCAACGAGCCCCAGGGATGGACATTTATCGATTTACGCGACAAA
-AATGGGAAACCGAATCGCGTTTTTTGGCTTCAAGTACAAGTTATTCAGAA
-TCATCAAAATGGGAGAGATACTCATATAAGGTAGAGGAATTGAGAATTTC
-AGAACGAAAATTGCCGAAAAAATGAAATTTTAGCGAATTTGAGTCGGAAA
-TTTCGAAATTTGATTGATTTTAAGCAAATTTCCAACTAAAATCTTGAAAA
-TTTGATCTTTTTAGATAAATTTTTTTTTAATTTTGTGCTTTTCAAAAAAC
-CTCAAAAAACAATTAAAAATTGAAGTAAAATTAATTTTTCAACAATTTTT
-GAAAGGCCGAATTTTTGATTGAAAATTTTCACAATTTGTCCATTTTGTGG
-TGGGGCTTATTCCGAAAAATCGTTGTTTTTTTTTTCAAAAAAGTTATAAA
-AACTTTAAAATTGCCATGTAAAATATGTTTATTCTCAGACCTCGTAGGCA
-CGAAGCAGGCGTAGGTCGCCTCGCAATAAATTTGAAAATCTCAAGAAAAA
-TCAATAAATTTGTGATTAATCAAAAAAATTTAATTTCCTGGTCCCAGCAC
-GAATGCTATTTTTCGAAAAAAAAAAAGAGGCGAGCCTAATATAGACCACG
-CCCACAAAATGGGCAAAAGTTTGATTTTTCAAAAAATCGAAACAAAAATT
-TTTCCAATTTTGTGAGATTTTAAAATTTCCGGTTTTTGGAAAATCGAAAA
-AAAATTTCTCGTTTTTTAATTTTCAAAAAAAATTGTGCCTAAAATTCAAA
-AAAAAAATCAATACTTTCTCAAAATTTCCAGAAAACAGTCCATTTTCCAG
-GCACGTTCGAGTCCTTGGACCCCAGCGATCTCGTGTCTCCACAACGAATC
-GAATATTCACCGGAGAACCACACGGACCGATTCCCGATAAAAATATCACT
-AATTTCGACGACGAGGATTTTGCCAATTTTATCGATCACTCACTTGTTCA
-CTTATCACTTCGTTAAATTTACCTCCAGTGATTCCAGATAATGAGCCAGT
-TTTGCATTGAAATTTAGTGCCAAAATATAGAAAATCGCATGATTTAACAT
-AAAATAGCGTTTCGAATTGAAACAATGGAAAAAAAGTGCTATGATGATTT
-TTTAACACTTTTAATTGTTCCAATTTGAAGTAAAATCTATTTTCAGATAA
-ATCAACTGATTTTCTATATTCTGCCACTAAAGCTTAAAAACTTGCCCTGC
-TGTCCTAACCTTCAAATTGTTCCCTGCAAATTTTATTATTCTTGTTTCAT
-ATTTTTGCGATTGCTTCGCGAGACCCAAACTCACACATTTACCTGTAAAA
-TATAATCGAATAATTATTTATATATTTTCTGTAAATTTCCTTAGTATACT
-ATAAATTTTCTGATCTCTCTTCAAAAATCGCTAGAAAAAATAAACAAATG
-TCGGTTTAAAAATTCCTGGTAATTTACCTTCTATAGAAAATTTTTCGAAA
-AAAAAACCGAAGAAATTCAGATGGAAATTCCCGATCCCGAACTGCCGGGA
-ATACCGATTGATCCGCAAGATTTGGAGATTCTAGACACGCCCACACGGTT
-TTACGAGAAGCTTTTAGTGCGTTTTTCGTGTCGGGACCCGGAAATTTGAC
-ATTTTTGGCGCGCGGCTTGTTAGACTCCAAACCTTTTCAAAGATTTTTTT
-TTCGAATTAAATAACATTCGTGCTTGGGCCCGGAAATTGAATTTTTGATT
-TGAAAACAATTTTTTTTGAGTCCAAAATTTTCAAAGTTTGTCCATTTTTG
-GCGCGTGGCCTAGTAGGATCCGCCCCTTCTAAATTTTTTTTGAGCAAGTT
-TTCTGAAGCATTGATTTCAAAAATTTTTTTTGGAAATTTCTGGTTTATTT
-TTCCGGTTTTTTTCCGAGTTGCTGTTTAAGTTTGGAGAAATTCCAGAATT
-TGTCAATTTTTGGGGCGTGGCTTTTTCAGTAAGCACAGTTTTTTTTTTTT
-GAAAAATTGAAATTTTCGCGGTGCGGTTCAAGAAAAACCACAAAAACTCA
-ATGATTTTTTAACGAAAATTTCAAATTTCTTGCAAGACCTACTGCAATTT
-CGATTTTTAGAAACTTTTTGAAAAAAATCCGAATTTTCTGATTTAGCCCC
-GCCCCAAAAATGGAAAGATTTCCGAAAATTCGAACCAAAAGTTCGCAAAA
-ACTTGAATTTCTCTCACACAGATTGACGCGCTAATTTGAATTTTTCCAAA
-AATAAGCCCCGCCCCAAAAATGGACAAATTTTAAAAATTTTGAACCAAAT
-AAATTCAATTTTTTTTCGCTTTTTTCCGTTTTCGAACAAAAAATTCTAAA
-AATATATGGTTCTAGGCGGGGCTCAGGCACCCATCTACCTACTTAAAAAT
-GCGTTAAATTTCAGGAATTAACTGCATCAACCGAACGGCGTCTCGCATTG
-TGTAGTCTGTATTTGGGCGAAGGAGATCTCGAAAAAAATCTGATCGCTGC
-GATCCGAGAAAGATCCGAAAAATCCGAGATTGAAGTGACGATTCTGTTGG
-ATTTTTTGCGCGGAACACGGACCAATTCAAGCGGCGAAAGTAGTGTAACA
-GTGCTGAAACCTATTTCGGAAAAGTCAAAAGTTGGTTTTTTTTGCAAAAA
-AAAATCGATAAATCGATAAAAACCGACAATTTTGAGAATTTTCATTTCAA
-ATTTGAGTCCCACATGCGCCTTTAAATATGGTGTACTGTAGTTTTAGCTC
-GAATGTTGAATTTCAAAAATTGAGAATAAAGAAATGTCGTGACGAGACCC
-ACAAATGTTTTGAAAAAAATTTTCAATTTCAAAAAAATGTAAAAAATTGG
-GAATTTCCCTCCAAAAGTTAAATTGGTTTAGTCACAAACTTTGAAATTTT
-GAAATAAAATTTTTTTCGGCTAAAAATAAGTATTTTTTAAAAACTATTTT
-GAAGAAAAAAAGTTAGGTCTCGCCACGATGTATCTTGTATATGTGTATCT
-AAATTGCCATGTCGTGACGAGACCCTCTCATATTTTACACTGCAACTTTT
-TCCTCACGAGGGACGAGGAAAAGTGGTTTCTAGGCCATGGCCGAGGGGCC
-GACAAGTTTCATCGGCCATTTATCTTGCTTTGTTTTCCGCCTGTTTTCTT
-TCGTTTTTCACAGCTTTTTCCCATTTTTTCTTATTAAAACTGATAAATAA
-ATATTTTTGCAGATGCCAAAACGATTTTCAAGTAAAAAAATCATGTATTC
-AGTGGGCAAGCAGCGGTGAAAGTGGGCATTGTAATATGATGGATTACGGG
-AATACAAAACCTAAACTTTTTCTGAAACATGATACATATGATGCTTAAAT
-GCTGAGACTACCTGATTTTCATAACGAGACCGCTGAAAAAGTTTTGAGGT
-TTTCAAAATTCAACTTTTTGTGCGAAAATCTCGACTTTTTCACCGAAAAA
-GTTGAATTTTGGAAACCTCAAAACTTTTTCAGCGGTCTTGATATGAAAAT
-CAGGTAGCTTCAGCATCTAAGCAGCATATGTATCATGTTAAAGAAAAAGT
-TTAGGTTTTGTATTCCTGTAATCCATCATATTACATTGCCCACTTTCACC
-GCTGCTTGCCCACTGAATACATAATTTTTTCACTTGGAAATTGTTTTAGC
-ATCTGCAAAAAATATTTATTTATCAGTTTTATTAAGAAAAAACGAAAAAA
-ATCAGTGAAAAACGAAAGAAGACAGGCGGAAAACAATACAAGATAAATGG
-CCGCTGAAACTTATCGGCCCCTCGGCCATGGCCTAGAAATCACTTTTCCT
-CGTCCCTCGTGAGGAAAAAGTTGCAGTGATTTTGCTCAAATAAAAAAATC
-CCCCAAAAACCGATAATTTCACCATTTATCAGATATATCTCTTCCACACA
-CCGGAGCTTAGTGGCTTAGTAAAACGAGTTCTTCCACAGCGAGCCGACGA
-GATTATCGGTCTCCAGCACATGAAATTATACATTTTTGATGACAATGTAT
-TGATTAGTGGGTTAGTTTTTTGTTTGCATGGGTCAGACTACAAACTACAA
-AAAGCCTAATTTCAGAGCAAATTTGTCGGATTCTTATTTTACTAATCGAA
-CGGATCGATATTTTCTATTCAGAAATTGCAAACCATTGGCAGATTTCTTC
-CACGAAATTATCAATGTTGTTGGTGAGTTGGCGATTGCGCTCCACCGCAC
-ACACTGTTCAATGGGGCTCGCTTGAACTGATAATTTTTTCTAAAAAATTA
-CAAAAATTGTTTTAATTTGCCTTCAAAAAACCATCAGTTAATTAAAATTT
-TCTAAGCAAAAAATTATATACTTTCTAAAAAAATTGAATTTCCCGCGAAA
-ATAATTTTTTCTGAGAAAATTTGAATTTTTCACCAAAATATTTTTTTCAA
-CATTTTTTACCACAAAATGAGGCGGGGCCTCGGTATACACGCTCAAAAAA
-TCAAAAAATACTTGTAAATTTGACTACCAGCTATTTTTTTTTCGAAAAAA
-AAATCGAAAAGTAGGCCAGTTTTCGAAAAATTCTCGACAAAAATTCCGAA
-AAATGGGGCGGAGACCTGTGCGGTATTCGGCATTCGGCATATGCCGATGC
-CGGTTTTTGGAGCCCGTCATATGCCGTTATGCCGATTTGAAAATTCACGG
-CATATGCCGAAAATGCCGTTATGCCGAAAAATCCCGAATGCCGCACAAGT
-CTGGGCGGGACTTCAAAAACCACGCCCACAACAGAGAACAAAAATTTGGA
-GTGATGGTTTGCAATTCCCTCGCGCACTTTTTCTTGTTTTTTTTCAAAAA
-GATGAAAAAGCGCTCTACTGTACACGTTTTTTTTCGAATATTTTCATTAA
-AAATCCAATTTTCAGCCGACTCGAGCTTCATTGTCGAAAATGAGCAACTG
-GTGCCGAGCCCAAAATGTGATGTGCACCCATATTTAGGTAATCTGAAAGG
-ATGGGTAACCTGAAATTTTTCCAAAAAAATTTTTTTTAAGGCTCCGCTCA
-TCTCTACCGAGAAATGCTCAAAACACGTGTGAATCGAGTTATCGAAAAAT
-ACAAAGAATCGCGAAAAACGTCGTCGAATTGCATGTCTGCTGACACGTGG
-ATTTACCCCGTTTTACAAATGGGGCTTTTGGGAATTCATCAGGAGTTTGA
-ATTTTTGCAAAAACTTTTCTCACTGAAAAATCCGGAGCTCAAAATGACGA
-TGGCTTCGGGATATTTCAATTTTATTCGAGATTATGAGGAATCGATTCTG
-AAAGAAGGAGATTATCATTTGGATATTCTTACAGCTTCTCCTTTTGTAAG
-ATTTTTTTTGAGGGAAAAATATCTGAAATAAGTTCAAAAATTTCAAAATT
-GAATTTTTTCGAAATTTTTGTAGGAAATTTTGGTTAAAAAAAGTTTTCTC
-GAGAAATTTGAATTTCCCGCCAAATTTTTTCTGTGAAAATTTGATTTTCC
-CCTCAAACATGTTTTCTCATAAAATTTGAATTTCCCGTCAAAATGTTTCT
-GAGGAAGTTTGATTTTCTCATCAAAATTTTTCAAAATTTCCAGGCGAACG
-GATTCTTCGAATCAAATGGCTTCTCGAAATATATTCCACCACTATATTCC
-AACATTTCTGATCAATTTCTTCGAAAACGAGAAATCAACGGCCGATTGAA
-TGTAAAAATGTTCGAATATCGAAGAGAAGAATGGACATTTCATGCAAAAG
-GTCTTTGGGCAGAACATAATAATCAATTAATGACATTAATTGGCTCATCA
-AATTACGGTTATCGATCGGTTCATCGAGATCTTGAAGCTCAAGTGATGGT
-TGTTACAAGAAATCCGACACTTATCGATCGATTGAAAGATGAGAAAAATC
-TATTATTCGAATATTCATCGATACTTGACATGGCTGCACTTCAACAACCG
-GAACATCATATTCCACCATTAGTTCGAGTTATTTCACGTCTTATTCGGAG
-TTTTTTGTAGACGTTTTCCAATTTTTTATAGCGGAATAATAAGGTTTTTG
-ACTTTAATAAATCTTTGTAGATTTCAGTTTTTTTGAAATGCAACATTTTG
-CCGAATTAGGCCATTTGACAATTTTTGGTCGTGTCACGGCGCGGTTTGCA
-GTAGAAAACTAAATGTATTTTGATTTGTTTTTTCGAAATATCCGAAAAAC
-AACAAAAAAATCTGTTTTTTGTTGAAAAAAATGTTGCGAATTTCAGAAAA
-CGGCACTTTTCCGATTTCTGCCCCCTAGGGCTGTTATGAGGGACGTCCCC
-TATTGGGGGGCGGGGACGATCATTTGTCCCCCCATGGGGGACGGGGGCTC
-GTCCCCGTCCCCACGTCGGGGGACGGGGAGCGCCCCTTGTCCCCGATGGA
-ACGAAAAGTCGTCCCCTTTTAATTTTTGATTTATTTTAGATTTTCACTTC
-ATTTATTACCGGTACAGAGAGTGTAGATAGTTAGAGAGTGCCAGACATCC
-GGGACCCAATGGAGCGGGGCGCGCGGAAGAGACGATTAGTGTCGATTTAC
-GAAATTTTCCTCGTTGTCATCATTTCGTAAATCGACACAAATCGTCTCTT
-CCGCTTGGGTCCCGGATGTCTGGCACTCTAACTATCTACACTCTCTGTAC
-CGATAATAAAATATTTTTACGTGAATCTCGTTTCCACTAAGATGTGCGGG
-TGGATACCGTGGATATTCCACACAAAAAACGTGTCGCTTTAATAATTATG
-AAGCAAAATACAAACGCACATTCTTCACATTGGGTAAAGGGGGCGCGCTC
-CCCCTTTACCCGGGCGCCCCTTTTCGGGGGGGGGGGGGGGGCGTATTACG
-GGAGGTTTTTTGAAAAATAATTTTTGAAATTTGTCAACTGTCGACAGCTG
-TCGTTCAATTAATGTTTTTTTTTCAAATCTCCATACAAAAATGTTCATAG
-TAAATTCTTTATCAATATTGGGGTCCCTCACAAAGTTCAAGTTTTCTTCT
-CACTCTTCACGGCCGCCTTCGATTTTTTCTTAAGACCTTCATTTGCATCA
-AAATACATTCGACAAATTTGAGTCACATAAGCATCATCATGTGCGTTTGC
-CTGCAAATGTTAACAAAGTACCAGGCGGATGCCAAGCTTTCACGTCTTCA
-TGTCTACGTAGAAAATGCAGTCATGAAGTAGGCACGCAGACAGACAGGCA
-AGTACATAATCAGGCAATAAATGGGCAAGTAGGCAAAGCAGGCATGAAAT
-AGGCGCTTAGGCACGTGGGTAGGCAGGTATGAGACATAGGCAAACATGCA
-GGCAGGTATGAAAAGCGAGAAAAGGCAGGTGAGCATGATGAAGGCACATA
-GGCAGGTAGGCAAGGAAGCTCCTAGACAGGTACAAAATAGATGTGCGCAA
-AGTAGGCATGTGCAAAGAAACTAAGCTCGTCGCCAGGCATGAGGTAAGCG
-CATAGGCTTGCAAGTAGGCGAGTAAACACGCGGGCATCGAATAGGCAATT
-AGGCAGGTATTTTTGTGCTCCATTTGGAAACACACTTACTGGATAGAAAA
-GAGTGAGAGTCGTGTAAAATGCAAATGCCAAATAAATTGGATCCGGTGCA
-GCACATTTTCTCTTTGATCTCGTTTGTTCAATCAGACTCCGATAATTGAT
-TTCTCCAGTTTCACTTGTATTGATCGCTTGGAAGAGGCTCTCGATGACTG
-AAAAATGCTCAGAAATTTCGGATATGTTCTCGATTTTCAGTGAATTTTTC
-CTGAGAAAAAGCTAAAAACTCACGAACAAACGCTGCCGATCGTCCACCAC
-CAGTATTGCATACGACAAAAACCGGTCTCTCGCTGTCTGTCACTAGTTTC
-AACAAATACCTAATCTCCTCGGCATCTTTCGGTCCCATATGCTCCGGCCA
-TCCGGTATACTGGTAATGAGTCACCTCTTGAGTACGCTTCTTTCTGGAAA
-AAAGTTTGTTGCAGGCTACCTTTTATGCCTGCATGGAAAAAAATAGTAGG
-CGGACAGGCGTGAGGAAGGTTAGAATATTGATGAGAAAAATTGAAAACAA
-TCATTTCAAAAAGCAAAGAATTGACCGGTTATTATTAAAAAATAAAAATT
-TTTATCCGGACAATCCGATGCAGATGTGAGTGCCTGCCTACCGGCGTGCC
-ACCGCGCCTATTTCATGCCTGCGTGCCTATACTTACCCAAATGTTAGCAA
-CAATTGTCTAGTCTTCAACAAAGGCTTCGAGATACTCTTCGTGCAAGTGA
-TTGTTAAGTCCGCCAAAATTAGTTTTTCGTCGAGTTCAGTGGGAAAGTAC
-CTATCACAGTTCACCTTATTAGCTCCAATAAAGTGATCTGAAAAATAAAT
-GGATTAAAAACGGAGGGTGGCTTGATAGACAGGCAGGCAGGACTACTGCC
-CTGTGTAGGCCGTCTTGTAGACAAGCAGACAGGAGTGGGTCACCATGTAG
-GCAGACGGGAGGGTGTAGGTTGTCTAGTGGGCAGGCAGGCGTAGGCTGCT
-GCCAAGCAGATATAGGCTCACCTATTTCCGCGAAATCGCACAACATCACA
-ATTGTGCTTGGTTTATTCAGCTTCACTGACTCCCAAAATGCGGCAATCGC
-CAAAATATCGGAGCTTTTCTTATCAACAGGCAACTGCGGAGCAGGCATCA
-ACACAAACTTCAAGCCGTTATCCAATTCAACAACATGTGATGATTCTCCC
-TGGCTGAAAATGAAGATTTTTTGGTAGGTACCCATAATTTTGCCTACCTG
-TCTACCTATGTGCGCTTGAGTTAAAGGTTAAACCTAAGCCTATGCCTAAA
-CCTGAGCCTAAGCTGAAGCCTAAGCTTAAGGTTAAGTGTAAGCGTAAGCG
-TAAACCTAAGCAATATGTAGAGGCGAAAGGTAGGCAGGCAGGCGTAACAG
-TCTTACCCATTCTTTTTCGAAGACTCATATGACACCGGATCACATTGACA
-GTGATTACCTCCCTGTAAGCCGCAAAACTGGGCAAAATCGTCTCCCGTAA
-TTTCTAGGTTATTTGGAACATTCTCAAATACTGAAGTACAATTTCTTTTT
-CTAGTAACGAAATCCGAAATTTGCGTGTTGAATGTCTTGAGGAAGTTTGA
-AAAACGTGTCTCATTCACATCCACACGACTGATCATCTGATTTGGCGGGT
-ACAGTTTCTCTTTTTCTTCCGAGTCGAGTATTTTGTAGCCGTTCGGGGTT
-AAGCAAAAGTAAGCAATTATTGCACAAATTATGACAATGACGATCAGAGC
-CAAAATTACATATTGTCCGTGTGTTCTGGGATTTTGGAAATTTTTAGTGA
-AGCTTCTAGGCTTTAGCTTATGCTTAGGCATAGGCTTAGGCTTCGGCTTA
-GGATTAGGCCTAAACACAGGAGCATATAGGTTGGCAGGCAGGCAAAATTA
-GAGGTACCCGCCAAATATCTAGAAGCTTCACTAAAAAAAAAACGTTTTGA
-ATTTAGCATGAAAACAATTTTGAAAAAGTAAAATGTTTTCTTATCTCAAT
-TTTTTCCTTGATTTTATATTGTAATTAAAAATAATAATTTGAATTTTCAG
-CTCGATTTAGATAGAGTTGTGCTAGATTTCAAGAAGAAATTGAGAATTTT
-CGTAAAAAATATTTTTAACGCGAAAAAATTTTTAAAGCTTTAATCCAAAT
-TGTTCAAAAAAGTTTGGAGTAAAAAATTTGGAATTTTTTTGATTTTCACC
-CGAAAACCTTTCTTTAGAATGTCTGCCTCTTGCCTCCATCCGCGCCTTAT
-GCTCAATCCGCGCCTTATGATTTTTCTCCGGGAACTTGAGACGATTTGGT
-TGTTGGGAGAAGAAGTGCGGAATGTGGAGCGTTTGTTGAGAAAAGATAAA
-ATTTGGAATTTTTTTGATTTTCACCCGAAAACCTTTCTTTAGAATGTCTG
-CCTCTTGCCTCAATCCGCCTTATGATTTTTCTCCGGGAACTTGAGACGAT
-TTGGTTGTTGGGAGAAGAAGTGCGGAATGTGGAGCGTTTGTTGAGAAAAG
-ATAGATTTTCTACTATTTCTCAATTATTCAATACTATCGAACGACTTGAT
-GTCCAGTCTTTGAATGTTCTTGTCGAGGAGGCGAAGGTTATTGGTAAGTG
-TATGCGTGGCTTTCCGATGAATTACCAACGGCACGGAAAGCCTGAGTGTA
-CCCTTTCGATTTCATCTTCGGAAAGTGTGCTAAGCGTAGGCGCGTTAAGC
-TAATTTTTCCTGGTAAATCCGCAATTCTTGAAGATCGAACCAATAGGGAA
-CACTGTGGCACCACGTGCAACTTCAGGGGTAGGCGGCAAACACAACGGAA
-ATTTATCGATTTGCCCAATTTGCCAGAAATTTCGGTTTCCGAAATTTTGT
-CGATGCATTAAGGGTTTGATAATAAAATCGAGTTTGGGAATTAGCGTTTT
-TCAAAAATTGTCGAATACCTTCAGAATTTTGGTTTCCGAAAGTTTGTCTA
-AAAATGCAGGGGTAGGCGGCAACTGCCGTTTGGCATATTTATTTTTGGCG
-AATTCACCAAATTCCCGTGAAACATGCGTGAACTTTCTTCTCGTTTCTTA
-ATTAGTTTTTCATCAAATTGATAAAAATGAGAAAATTATAAATTTGTAAA
-TTCACTTCAAAATGCAGGCGGGCAGGTTTCAGTCAAGCCCTGAAACCGCG
-CCTGTCTACCATGGAAGCCCTACTTTCAAATAAGATCAACTCACTGTGGT
-GGTGGACCATTCTTTTCAGAATTTCCAAGATCTGGCGGTGGGAGAATTGC
-AGTCGGCAGAGGCTTGAATAAATTTGAAAAAAACAAGTCAAGAGCAGCAA
-GAGCCTTTTTCGGTTCATCAAGTCTGTTTTGAAAACTTGAAAACTCCAGT
-CCACCATCATCCAAGCTCTTCAGAGCATCCTGAACTTCACCGAGCGACTT
-CTTATTGCCAACATCCTTCACAAGTTCTACCAGTTTTTCCAACGATTTTT
-CCAAGCCCATAAGACCACCAAGATTAGCCCAATCAACCTTCTTAGCTTCC
-GTGAAAACATAACCATAGTCTACAAATTTTGTGGAATCAGACTTTTTAAT
-TCCACTCTTCCATGCATCTAGCTGAACAAACATCACATCCAAAGATGCTC
-CAAGCGCCACCAGCTTCTCCAGATTATCCTTATCGTCCTGTGCCAAAGTG
-GCTCCACTCGCTGCCAACTCTCGTTGCACAATTTGTGCATGGTTCTTGAT
-AATATCCACATTTGCTCTTTCTCGGAGCACGTCCTCCAGTCGAGCAATTT
-CTTGTGCCGCTGGGCCAATGGAATTAGTGTGTTCAGCGGCGTTTGGAAAC
-TGGGATGTTTTATCCGAAGCAAATTTGCGGCGCTTGCTAAAGTACAGCGC
-CAGAGATTTCAGACCACTATTGAGGCTTGAAACTGAGATCAGAGCATCTT
-CGACGGCAGTGACTATCGGCGGGAATTTTTGATCTGCTCGGAACGAATTC
-AAATCTGACAGGTTCTTTTGAATTTTGTCCAATTCTTTGTTGGATTGAAG
-ACAGCTCAGTACGTCGAGAAATTGAGCAATATCAGATCGAGAGTCATTGA
-TTTTTTCAATAGCACGTTTTTCTAGTGTTTTCAAAAGATTCGGATTCAAG
-AAAGTAGCGTTTGCCGTCATTCTACTCATGGTCAGCGACAAGCCGGTCAT
-TTTTTTCACTCCATTAAAGCATGGCTCAGCGGTTGTCCAATTGCTATTGT
-TCATATCCTTGCAAACAGTGAGCACTTCTGCGTGTCCTGATTTGCTTTCA
-ACAAGTTGATTCATCACACTTTTCAATATCGATTTCGATTGTTCCAATTC
-GGTGTCAATGTTCGATGCAATTTTAGATAGTTCCTCCAGATTCGTGAAGT
-CGGGGGCGGTAGTTAGAGTAGATTTGGCGCATTGGGCTGAAAGTTTATTT
-TTATTTTCGTTTTTTTGAGTTTGAACTTTTGTGGACAACCGACAGATTGG
-CTCAAACTAAAAGGACTCTAAAATATACAAATTTTGGAACTCAAATCAAT
-TTCGCAAATATTACTTTTTTCTACGGAGCTTTGATCAGGGTGGGGTGGCA
-AACGATTTTTTTCCAGCAAACGGTAAATCGGCAAACCGGCATTTTGCCGA
-TTTTCCAAAATGGCCGAAAATTTTTGAATCCCTCCCTCTAAACACTTCCG
-GCAAATTGTTATCCAGCAAACTACAATTCGGCAAATTGCCTGAATTAAAA
-ATTTCCGCCCAATCGGCAAATTGCAGTAACTGCAAATTTCCGATAAATTT
-GGAGAAACCGGCAAATCGCCGAAAATTTTTGGTAACTGGAAAAAATTTCA
-AAAGGCACTGTACCCGTGCTTCCGTTTTTTAAAAAATGCTTCTAAACAGT
-TCCGGCATATTGATATCCGGCAAACGGCAAATCAGCAGTTTGGCTAAAAT
-AAAAATATCCGGCGAATCAGCAAATTGCTGGAATTAAAAAGTTCCTCCAA
-ATCGGCAAAACCGGGAATTTGGTGAATTCGCCAAAAATAAATATGCCAAA
-CGGCAGTTGCCGCCTACCCCTGCATTTTTAGACAAACTTTCGGAAACCAA
-AATTCTGAAGGTATTCGACAATTTTTGAAAAACGCTAATTCCCAAACTCG
-ATTTTATTATCAAACACTTAATGCATCGACAAAATTTCGGAAACCGAAAT
-TTCTGGCAAATTGGGCAAATCGATAAATTTCCGTTGTGTTTGCCGCCTAC
-CCCTGAAGTTGCACGTGGTGCCACAGTGTTCCCTATTGGTTCGATCTTCA
-AGAATTGCGGATTTACCAGGAAAAATTAGCTTAACGCGCCTACGCTTAGC
-ACACTTTCCGAAGATGAAATCGAAAGGGTACACTCAGGCTTTCCGTGCCG
-TTGGTAATTCATCGGAAAGCCACGCATACACTTACCAATAACCTTCGCCT
-CATCGACAAGAACATTCAAAGACTGGATATCAAGTCGTTCGATAGTATTG
-AATAATTGAGAAATAGTAGAAAATCTATCTTTTCTCAACAAACGCTCCAC
-ATTCCGCACTTCTTCTCCCAACAACCAAATCGTCTCAAGTTCCCGGAGAA
-AAATCATGTGATCAGTAGTTTCTCGGGCCCAAGCGTCGGTTGCCAATTGA
-GAGTTTAGTGCTCCAATATCAATTGCTCCATTCGGTAGACCAACTGTGTA
-CTTCTTGGTTCGCAGGGACTGCCCGATGGATTCGATGGTTTGAAGATGGA
-TCTTCGATTCTTGATTTGGAAATGCATTCCGGATAGATGCCATGTGTTCT
-TCTAGCTTTCTTAGTCCCCGATTGATGTCTACAATCTTGAAGGATGAAAT
-AAAGTTCATCACATCACGAACTTTTGGCCATAATACAAAGAAAGAAGCAG
-CAGAATTATTGTTTTTGAAGCCATGCAACGTAATCTTCGGATTCTCCACT
-ATGTTCAAAAAATCTTGGGATTTTTTCAACAAATCGTTTAACGCAGAATG
-GGATTTGGGAATATCGGTGAAACTAGTGAACGCTTCAATCTCTGTGTACG
-AGTTGCTCCATACTGATAGCTTTTCGGAAAGGGTTGTAACTGATGAAAAA
-CTGTCTGTAATGTCTTTCATGTCTGCCTTGAAATTAGTCTCGTCTGGCCA
-CTTCTTGAGATCTCCAATATCATGAGCCACGTGGACAACACTTTTGACAG
-TTGTGAAGAATTGATCTGCCTCAACATCGTCGCCGATATTCGATTGTAGT
-TCTATAAAGGTATAGTTTTTGGGGGCAAAAAACGAAAGTGGTTCAAAATT
-TTGGAACAAAATGCCTATTTTTAGATAGCTAAAATCTAAAATTTTGCAAT
-GCTGACAAGTTGTGAAAATTTGAAATTTTAACAGAAAATAGGCTTTTTCC
-TAAACTTTGAATCACCTTACTTTTTTTTTGAAATTTTCGAAACTTTTCGG
-TTATTTCCAAAAAAAAGCCGCAAATACTCTATCAGGGGTAGGCGGGAATT
-GCAGTTCGGCAAATGTATTTTCTGCAAATTCGGCAAATCGGGATGTGTAC
-AATTTTGTCGTCTCTGGCAGTTTACCGACTTGCCCATTTACCGAAAATTT
-TAATTCCGGCAAATTGTCCATACTCTATTACTACCATAGGCCCTTATATA
-ATCTTTTTCCGCCCACCCCTGTACTCTATTACCACCTAATCTGTTACTAC
-AGTGGATTTTTTGAAACCAAAATTTCAGCTTTTGAATTTTATATTCGTAG
-TGAAAAGATATTCGTAGTGAAAAGTTGAAACCTGGAAAACATAGTTGCAT
-AATTGCATCGTAATATGTAAAAATAGGTCTTCCATGGTAGATAGGCGCGG
-TTTCAGGGCCTGCCTGGAACCTGCCTGCCCTATGTGAACGAGTAGACTGT
-AGTTTTAAAAAACAAAAAAAGGTATTTGCCTAACAAAAAACATACTCAAA
-TATTTGAATGTTTGCAACCAAACCTTTAAGCGCTATCAGTTTAGATTCCA
-GCGAACTGTAGTCAATTGCATTCAGTTGATCCATTGAGAAATCGTATTTG
-AACAAATCCAAAGTTAAATTCATTGATGGAATGGTTCCTTTTGTCAATTC
-TTGTTGTAGGTACATTGCATTGATCAATCGTGAGGCGAATTGTAATCGCT
-CAACGGCAGTTATCAAGTTGTCATCTGCAACTTTTATGAATGATTTTTTT
-AAAAAGTTATTTGTTGTCATTTTTCTTTTATTAATTATTACGTATATTAT
-ACGTATCATGCGAGTTTAGCTTTCCAACCCCCCGCGAACTCTTTTTACTT
-TTTTTTTTTTTAACTTTTGTCTTTTTTGTCCTTTCTTGGCTATTTTTTTT
-ATGAGAATTGACCCGAATTTGACTTTTTTCGGATTTTTAGGAATTTCTAG
-GAATTTTTCTTTTTTGTCAAAGCGAGCTAACGCTCGCCACTGACGCCAAG
-CCTAACATAAGACTTAACCTAAGTCTTAGCCTAAGCCTTACAAGGAAAGT
-CTTTGAAGGGGCCTGTAGATTTGGGTTTCTCATGTTGATATTCCGATAGA
-AGAGTGTTAGTTTTGATCTCTCCAAAAAATTTAGCTGCCCAAGCCAAGTT
-TCAGCAAAGTAATGACATTTTGAAATTTCAGTTAAAAACACCATTGAAAT
-ACACTGTCTTACAGTGCTATCCACACAAATATCAGCTTGCGTGAACACCG
-AAAATGTGACGCCCACCACAATAGGCTGAAGACAGTGGATTTCAATGGTG
-TTTTTAACTGAAATTTCAAAATGTCATAACTTTGCTGAAACTTGACTTGG
-GCAGCTAAATTGTTTGGAGAGATCAAAACTAACACTCTTCTATCGGAATA
-TCAACATGAGAACCCCAAATCTACGGGCCGCTTTAAAGACTTCCCTTGTT
-AGCCTAAGCCTATGCAAGACACGCAAAATATACATTAACATATATATACA
-ACAAATACAACGTAAAAATTGTTTTTCTGTAATTCGACTGACAAACCTTT
-AGCTTCACGTTTGGAACGTGGATCTAATGACATCACATTAAAGAAACTGG
-ATTCTTCTGGAACAAAATATATTGAAATTAAAGCTCTGAAACAGTCAAGA
-AACCTTCGAAAGTATCCGAATTGACAACACGATTAACCGTTATAATTATC
-AAAACGATTATTATTTTGATTCCTGGAAGACAGAAGAAATTCGGAACGAA
-AATAAAAATCAACCTACTCATTGCAAAGTATTATGAAACTTCCCTTTGAT
-CGACGGTTTTTGAATCAATTAATGATTGGAAGTGTGAATTCTGAGAGAAG
-GAGTGTTGGAATTTTTATTTATTTTATAACGAAAAGGTCACGGTTTCTGT
-AATTTTAATTTCTATGAAAGTTTTAGGGACTCACAGAATGTCAAACACTA
-GATGGCCGAAGAAAATTTGACATAAGCAGCGAAATTTGACCTTTCAAAAA
-AAAATTAATATTACGTGAAATCTTTTTTTTTCCAATGGAATTGAATTTTT
-GGCTGATACATGAGGGAATGTGTTTCAAGCTGTAATTTCAGTAAAACTGT
-ACAAGAAAAAACGTTCAATATTTTTACCTTTGCTTATAACTCCTCTACAA
-AATTTTTTCGGACAAAAAAATAAAACAAGCATGGAGATTACAGGTGAATT
-TCGAATCCTCATCTTCATTTTTCAGACTGAAAATCCAAGAAAAGTAGCCC
-GAACTTTTTTCTGAAAAAGTTCCTATATACTCATCAAACATTCATAAACA
-GTATTTAAACAAAAAATCCCGAGATAACACTTTTGTCTTCAAGATATTCA
-GGTTGAAAACTAATGTCCTGAAACTTGGATTTTGGGTCCTTAAGAAGATA
-AAACAGATAATTAGCTTTTACGTTAATACCCGCAATCATTTGCAAATTAG
-AGCAAAATTAAATTGAAACTTTTTTTTGGATTTAAACATTTTTTGGAGCC
-GAAATACAAGTTTCAGGACACTAGTTTTCAACCTGAATATCTTGAAGACA
-AAAGTGTTATCTTGGGATTTTTTGTTTAAATACTGTTTATGAATGTTTGA
-TGAGTATTTAGGAACTTTTTCAGAAAAAAGTTCGGGCTACTTTTCTCGGA
-ATTTCAGTCTGAAAATGTATGATTTTTTAATTCAAAATTTGAGGGAATGT
-CGTTCATTGTGGCTCGAGGTCAATGGATAAATGGCTAAGACTAAAACATC
-ATTGATCGAAGAATGATTTTTTATTCATAAAAACTATATATTTGACCTGA
-AATCATTGTTTTTTGTCACTATAACCCATTGGAATGAGCTGTAGAAATTA
-ATTAAATTTAGAAATGATTTTACCGATACGTGGCAATGTTTAATACATTA
-GTTTTCTGGCCGAAGATTTGTATGTTTTCCCGAGAAAGTGAAGCGACAGC
-TTAAAAGCGCATCGCCTTTAGTGAGAGGCAGGTCTCGACGCGACGACATC
-TTTCCTCGCGCGCAGCGGCGAGATTTCGTCATTCTACGTGTTGGTAAAGA
-AAAAGGACGTGATTTTATCGATTTGCATCGATTTTTTTTGGATTTTTCTT
-TGTTTTTATTGTATTTTTATCGAATTTTTAGTAGTTTTAAGGTTTTTTAT
-CGATTTTCCTTGATTCCGTTGCGTTTTTAAGCGTTTTTCTCGTTCGTAAT
-GATAAAAAGGGGGTTATTTCTCCGTTTTCCAAGAGTTATCTGCGCGTATG
-CCAGATTTTGCAGGAGGAATCATCAAAATTCTCAGTTTTTGGCATGTAAT
-CCTTACGAAGAGTACTTTCTGAGGCTCAATGGCTTTTTCCCCCGCTGTTA
-GGTGCTTCAGTAAGTGTTCTACTCCTTTCAGGGGTTCCTTCTCTCGTCTA
-GGAGATTAAATATGTTCGCATTTGTTTCTTCCCTCTCTCTTACGCGCTCT
-TTCCAGCATTGTTAGTTTATCCACGCTCTTTTCCTCTGTAATTTTTCGTT
-TATCACTTTCTCTAATTTTTCGGTTTCCGGTTCGTGCACTCGCGCACCCT
-CTCCCTATTTTACTCTATCTCTCACTATCTCTCACATCTATCTCTATCTC
-TCACAAGCTATTTTGGTATTTTGCGCGTTAAGAAGTCATGTTTTGATGGA
-CCGTGTCCAAAGGAAGAATATTTTCGTCGAGTGAAAGGTATGTAACTTCG
-TGTGAAGTCGACTCCATGAGTCTTGTGAATATTCCGATAACGTTTTATCG
-AGATGTATTATCGGGCGGCCCGAATTTTATGTATGTTTTTCATTGTGGTT
-ACCATGTAACGGGAGTTCACATCGCAGAAAGAGCAATTCTTTATCGCGAA
-AGTACGATTTCAGGCCCCGGAAGGCTTTCTTATCAGTTTAATGCGACATC
-TTTCGTCGGGTGAGATATATTGTCTTGCGTTTCTATCGCATTTCATTGGA
-CCGGTCGAGCCAGGTCTGAGTGTTTATGAGTACGAGTCGACTCCGTGAGT
-CTCAATGATTTTCCGTTTTCAGGCGGTTTTCAAGGTTTCCCGTTCTTGGT
-TTCTGCTTCATCTTCTACTACCGTTTTAAGTAGGATTGGCTCAAGTCTAC
-GGAAGAGTAGAGCAAGCCTACGAAGAAGGTCTTCGAAAGAGTAGCGCAAG
-TTTACGGAGGATTCACGCAGGTCTACGGAAGAGTGGAGCAGGTATACGTT
-AGAGTGGCACTAGACCATACTGGGAGTCCGATTTCCAATTGGATTCTCGA
-AAAACCTTGTACCTGCACAAATAACCAGACGAGCCGATATATCTACCTTA
-CCGAGCTCCGGGTTAATCGTCGTCAAGTATTTCAGGATGAAGCGTATAAG
-GCGATGATTTTCTTTAGCTATGCCGCGCGTTTTGCAATTGCATAGCTGTG
-TATTCCGTGTAGACTTTATCGCTCACTTGTTCGATTTTCAGGACATCCGG
-TTCGACCTTTTTTCTTTCTCCCGCTATCGACGACGCAGATCACGTATGAG
-TTGCTTTTATATACGGCGATCGATTGGTCCGGTATACGTAAAATTAGCTC
-TATATTTTATCGCTTTCGTTGCTCACGCGATTCCCAGGTATTTTAATGTC
-GAATCATATTCCGTCACCTACCACTACGTAGGAGATATGCAGGGCTATGT
-GAGAATAACTCAGGTTTCGTAAGAGTTTCTCAAGACTAGGGAGGATATTC
-GCAGGTTGTTGAGTAATTTGTTTTTCCAATTAGCTATTCTCCTTGTCAGG
-ACTTATTCAGGTGTGAGTCGAAGTAGCCCGAGACGTTTGGCCCTAGTATG
-GATACTTCACGACAGTTTCAGACAGATTGTGGTCCGCCTTTAATGGGAAT
-TATTTCTACTGCACAGGTTCATAGCTGACTTAGCCGAATGAGCCCCTTCG
-ACGTCGCAATTTGGCGGTTAGCACACTTCCAGGAAGACATAGACGAATCA
-CAGTTTCAGAATTCCTATACACTTCAGTAACTACGGAGTAAGGCGATCAG
-TTCCTTGCCGCATTTATATGTTCATCTTAACTTTATTTTATATTAGCTCA
-CGGCTTTCATTGGAAACTACAGATAACTGAGCCAAATGCTTCGCCTTTTT
-GTCACTTTTTCCCAGTTCACTCAAGCCCAGAGTAGATGTAGTTTGAGGTT
-ATCTACTTCTCGTTTCCATGTGCGGATACTAGCAGAGTTTCTCCTGTTAT
-AACTGAGAGTCATTTCACACACAATACGGTTTATCTGTCGGCAGTTTCTT
-CTCACAAGGTTTTCGCTATAGATGAATATCTGGTATAGGGGTGAAGAATC
-TGTAATTATTAAACGCCTCAAGCTTATAGCCGTGACTGACAGTTATAGCC
-CCCGGCTTTGCTGGTTCTACCCTATACCACACAAAACCCAAACCAATAAA
-CCCATAATACTATATAATTCGTGTTGTCTTATTAGAGCGTAACTTGATCA
-GGGAAAACGAATTCTCGGGGAGCGAAGCGATCCGAGAATTGTATGTTTTC
-CCGAGAAAGTGAAGCGACAGCTTAAAGGCGCATCGCCTTTAGTGAGAGGC
-AGGTCTCGACGCGACGACATCTTTCCTCGCGCGCAGCGGCGAGATTTCGT
-CATTCTACGTGTTGGTTTCCCCCCTCCCGCCCCACACACATATTATTCCA
-AAGTGCGAGACACATATGCTATGATTTCCCTTCCGGAGAAAAATCGAATT
-ATTATGAAAATATTAAGTTTAAACCGTAAGTCGTTTATTTTCAGGAGGTG
-AGTTTTATTTTTCCTTCATTGTCGCCTGAGTGGGCAGTCGGTGTCTATCT
-GCAACATTCGCAGCTCGACCCTTGTGCTTGTTTTGGCGGTAGCAGGAAAC
-TTATGGGTTTTTTCACAGTTTCGGGAGAGATATTTACAGGCTCTGGTTCA
-GGGAACCAGATTCAGAGTTTAATAATGATATATCTTTACAGGAAAATTGT
-GGTTAGAGTTTCATGGCAGCTTCAGATCCCCTGATGATCAACAGTTCAAT
-CCACGGAAACACGGACGAAATGAGTGGTCCACCGAGCAACAATGTGGAAC
-GAGACGATTCCAGGTTTTCCATGCCCCCTAACATCGATGATGGTCTTATG
-GTAAAGTTCTTCCAATCAAGCGGTGTTCGTGTTTTGGATAAACTTCTTCG
-ATAAGTAATACTTGACTAAAAAATATCGAGAATTAAAGTCACAATTAAAA
-TTTACAAAATATTTTGTTCCAGATTATGAATTTTCGAAGATTAGACTATT
-CACGGCCACGTAGCGTTTGACATGTTGTGGGACTGAATTTCTACAAAAAC
-GTGAACTCACGTAGACTGTCTCTTGAATAATTTGAATGAAACAGATGTGA
-GCTCCGGAATAGGCTTAGGCTTAGGCTTAGGCGGGGCTGGGAGGAGAAAA
-AAATTGCGGAATTTGCCGTTTGAAGAGCTCGGCGAGTTTGCCGAGTTTGG
-CAAATTTTAAATTTTGCCGTACACACTACAAATTGGACAAAAAATCGAAA
-TATCAAAAATAACAAATTGTTCTGAGTTTGATCAGTTCGGTAAGAAAATT
-TTGAAAAAAGTGATTTGCAGAATTTGCCAAGCTCGCCTTTGTCTTTGGTC
-AATTTAGCACCATATGAGTGATTATTATCAATTTTCCCACTGTCGCTACT
-TCACATTTAAAAAGTAGTCATCAATTGCCGAAACAACTTCCTTCCAGCTT
-AAACTTTTTTCTTAGCCTCATCGGGACCCTTTCCTAATCCCTTCTTAACC
-TCATTCTTCCCATCTTCCAAAATTTCCATCCTTCTTCTTCTTCTTCTTCC
-CACTACGACCATCTTTGTCGTATAGCACCTTTCTCGCGAGAGTGTGTGGA
-AACAATTTGCGAAAAACGGCTCCCGATCCCCCCATTCGTTTTGGCGAAAT
-CAATAGACACAAAAATGTTCAAACAAATCTCCCCTTCTCGTTTATCCCCC
-TGTTGCACAATATCCTTTTCTCACAAAAAAACCTTTGCTCTTCAATTTTC
-GGAATCATCTTTTTGCGCTTTGTCGTGTTACTGTGAAAGGCGGAGTACTG
-AAATATGGAAAATATTTTTAAATGACTCCCTGATTCCGAATATCTATGTG
-AGAAAGTTCAAAAAATTTTCCCTCATTTTATATTTCAGCTTGAAATCGTG
-ACTTTCATTGTGCACTAATGAGATTTCGATTTCGAAGTTTTTTTGAAATG
-TGTTTTCAAGGTCAATTTTCAAGGTCAATTTATTATTTTACTATCGAAAA
-ACTAAAAAAATTTCAATGAGTAAAGTAAGTAAGTAAGCATTTCGTAAATA
-TACAAAAATCTCGTAAATCGACACATAGCGTCTCTGGCGCGAAAATTCGA
-AATCTCATGGGTGCACAAATGAAATGCGAGATTTCAAACTCAAATGTAAA
-ATAAGGGAAATTTTTTTGAATTTTGTCACATAGATATTCGGAATCAGGGG
-CAAATTTGAAGTCAATTAAAAATATTTTTCAGATTTCGTGGTACTCTAGT
-CTAAAACTAAAACTAAAACTAAACTAAAGTTAAATTAATATTAAATTACC
-ATGAATCTAATTTTTGTTTTTTAAAGTTTCCTGCAAAAATTCCAAGATCT
-CAGTTTGCCGAAGTCTAAATAACGACAACTCTGAACTTTTGTCCCGAAAG
-AAATCGAACACCGGTGTATACTAATAAGATCCCTCGAAGCTCGGTATACA
-AAAGGATCATGAAAAAGGGGTGTCTCACCTTGCGCATAATACCTTCTGTC
-TTTCCCCCTTCACCAGAAAGATTTCCTTCTTATATTTGTTCGTTTCGTTC
-CTGCACACTCTCCATCTCTTCTAACCCCCTCCTCATTCAGAATACTCTCT
-CATCTCACAACGCTTCTGTCTACCTGCCTGCGTCTCCTCGGTACCATATA
-CTATCTTGTAGCTGCCACTTACCAACAGACTTGCCTCTTGGAGGTCTCTC
-TCTCTTTTCCACCAAATCACCTTGTTCTTCCGACTTGTTCTCTCTTATCG
-AACTGACTTTTCGTGTCTGCGGGCCTTTCACATTATTTTCCAATTTTATT
-CGAATTTTATGTGCCCACTGCTTGCTAGGTTTATTGAGTGCCGCATTAAT
-TTTATTGATTAAAAAAAAAGCCACTTGTAACAATTTTTATGAAATTTGTT
-TGCATATTTATTTAACAGTAGCGAAATTGTTTTAAAATTCGTACTGTGTG
-AGAAATTTGCACTTTCGAAGTGTTTAAAACATTCTATTACGGGATCACAA
-GATTATGAGAATGCTTATTGCGCAACATTTTTGACGCGCAAAATATCTAG
-TAGCGAAAACTACAGTAATTCTTCAAATGACTACTGTAGCGCTTGTGTCG
-ATACTGGCTCGATTTTTTAAATGATTTTTTTTCGAATAGTGACGTCGATA
-TTCCATTTTGCTTTCTTTTTCGTATTATAATTTTATTCATTTCGAGAATC
-GAGCCCATAAATCGACACAAACACTACAGTAGTCATTTAAAGAATTACTG
-TTATTTTCGCTACGAGATATTTAGCGCGTCAAGATTTTTCCTTACGGAAA
-TACAAACTTCTTGGCGAAAATTTCACGAAAATTCAAATTTCCCGCTTAGA
-ATTTCCCGAATTTTTCGAATTTCCTGCCAAATAAAAACTAGTTTAAATAT
-TTAAAAAAAAGCTTAGAATTCTTAGAATGCGTATTGCGCAGCATATTTGA
-CGCCCAAAGTATCTCATAGCGAAAACACAGTAATTCTTGAAATGACTACT
-GTAGCGCTTTTGTCGATTTACGGGCTCGATTTTTGAAATAAATTTTTTAA
-AATCTTTTCGAATCAAGCCCGTGAATCGACACAAGCTCTACAGTAGTTAT
-TCAAAAAGTAGTTTTGGCTTCGATCGAGATATTTTGTGTGTCAAATATAT
-TCCCGTAAAACAAAATACCGTCTAAAGATATAAAATTTAACGCCTATTAC
-ACCCCAAAACCCGCCGGAAAATCCAGAAAAATTATATAAATTCGCAGTCA
-CTTCTCAAAAATAACCTGAATAGTTGACCGCGTAATTCGACCCGTTTCCC
-TACGACTGACCACACCCCGATTCTCTCGAATTACCCGCGACAAGCTTAAG
-CATCTTTCTTCATTCCCACACTTTTCGTAAACTTCTGAGAGACAAAACAA
-TAATATTTCTTTCTCAAATCAATAATGCCTATATTCTCCGCATCCCGTAG
-CCGATCCCATCACCGTAATTCTAGAAATCCCACGAAATTTTCCAATTTCT
-CTATTGAAAAGGTCTCTCTTTTATATTACCCAGGCGCAAAATTTCGTGCA
-AAAATACAATCGACGGTCTCGACGCGATAATTTTTGCTAAATTCCAAAAA
-TGTGTGCGCCTTTAAAGATTATTGTAAATAGCTTCAAACTTTCACCGATA
-TTTTTAAAAATTGATTTTTCTATGTTTTCCGTTTAATATATATTTATTTA
-TTTAAAAATTAAGTTGAAATTGAGAAATCGATGAAAATCGAAAATTACAT
-TACTCTTTAAAGGCGTACATGTCGTTTCGAGACCGGGTACAGTATTTTCG
-ACTGCGATTTTGGTTTTTAAAAAAACCTAACCAATAGAATTTCCAGCGCT
-CACACTCATTGGGTGGAAGCAGCAGCAGTCCGACGAGCTCTTTTTCGTCA
-AACGACGAATTCGACGATCGTCAGAACAAAAAGTGAGTCATCAGTTTTGT
-TTGAACAGCAGGTGTGAAATTTATTGTGAAATTTAAAATGGGAAATCCGA
-AAAAACACACCTTGTGTGATCTAAGATCCAAAAAAAATAGAACAATCGAT
-AATTTTCGGGTAATTTTAAAGTTATTTTTAGCGAAATAAACAATGCATTT
-TTGAGGGATTGGTTTTCAGTCATTTTCGATTAAAAAATTCAATGTTGAGC
-TGAAAATATCGATTTTTACCAGAAAATTGATAATTTTCGAGCTCAATACC
-ACAATTTTAATGTTTAAATCGCTTTGAAACCTCATAAAATCTCCCGCACC
-TCCAGTTTTTGTAGTTTTCCGCCTAAAATGTCGGAAATTCAACAGAATAC
-TCATTTTCCTAGCGAAATCTATTAGTTTATAATAAATTTGATCGTTTTCT
-GCTTAAAATTCCCTGAAACTTCTGAAAAAAAACCGATTAATCAGCTGAAA
-TTCGCTTAAAACTAATTTCGTGCCGGGACCACGGCCTTTTAAATCGGTAT
-GCGCTTTTAGTTTTGTACCGTATCTATTTTAGTTTTTAAAGTAAAAAATG
-AAATTTTCAGCAAGTTTTGGCGTCAAAGAAATGTATCGAACGCAGAAATT
-GAACGAATAATCGAGGATTTCATAGCGAATGGTATTTTAAGTGAGTTTTA
-TTCGATAAAATCGACGAAAAACCAGAAATAAACAGTTAATTTCCAGAAAT
-GAGCAACGGGAACAGCTACAATCACCATCACCAATTCCCGATGAGCATTC
-CAATATCGTGCTCGTCACACTCAATTCAATCACAATCACGAATGAACACT
-CTGAACGCGAATAGGGATCTCCTGTCTCCCGGCAACGACGTAATTGTCAC
-CAGAACCGTGTCACCGTCGTTTTATTCGCATGGAATGCCGGCCCGGGATA
-ATGTTTTTCGAAAAGACGATCATGTCAGGATATTGGGGAATACAACGGTA
-TGAAAATCTGCTTTTCATCGAAAAAAATTGGAATTTTCAGGACCCAGCGT
-GGTATCGAGCCCGTAATGCGAATCAGGAGGAGGGTCTGGTTCATGCAGAT
-TGTGTAGTGAGAATAAAGTTGGTTTTTCTGATCAATTTCTGTGAATAACC
-CCGATTCCCATGAAAATAGGATTTTCAGCAGAAACTCCAGGCAAATTGAG
-TTTTTGATGCGAATAATGGATTAAAAAAGATAAAAATCCATGAAAATTTA
-ATTTTTTACATCAAAAATCCATAAAAATCGGATTTTTGAGCGGATTAGAT
-TACTTTGCCGAAAATTCATTTAGAAAAAAACAATTCTTGCGCGCAATTGC
-GCAAAAAATTCAGAAAAATGAAACATAAAAGTTAAAAAAATTATTTTTAA
-ATATTTTTGAGCTGAAAATAAAAGAAAATTCGGATTTTGTGGCCAAAAAT
-TCAAGAATATTCCATGAAAATTAGTTTTTGTTTGCAAAAATCCGAACAAA
-AATTAATTCTTTTTTTCGCTAAAAATTGAGAAAATGGTTTTAACACAAAA
-ATCCACAAAAAATTGATTTTTAGGCCACAAAATCTATGAAAATTCTGATT
-TTCTGGAAAAAAATTAAGAAAATTCAAATTTTTTGTTCAAAAACTTTTTT
-CAAAAGCATTTCAAGAAAATTTGATTTTTCATCAAAAAAATTAATAAATT
-TTAGCGGGCAAGCCTACGACAATGGAATTGTAAGAATGAGAGCTAGCGGA
-TGTGACGTGGCTCCGGGAGCAGCTTCAACAACCTCCAGCACATCATCACA
-TCATTCAACTGCAGCAAACCATCAGCCATGGTTTCATTCAATGATTAGCA
-GAGAAAATACTGAAAAGTAATATTGAAAATGTTGGAAAAATCTGGAAAAA
-TGCGTCATTATCTCGGTTTTCAGTCGGTTTCCAGTTTTATGAAAAAAACG
-TCACTAAAAACGACATATTTCTTTAAAAACGTAAACATCGGAAATTGTTT
-GCATGAAAAATGTCGCGATTTTCTAGAAAATTTTAAAATTTAAAGAAAAA
-TGTTGAAAATAGATTTTTTCTGAATTTTTTGAATTTTATTAGAAAATAGA
-GAAAACATCATGTTTTTCAACGTTTTTCGCCTGAAACGCTGGAAAATGCA
-GAAAATGGTTTTTTTAGTGGAAAATAAAAATATTTTTTAAAAAAACGAGA
-ATTTTTTTTTCGTCGAAAGTTCCAACAAAAATTACATGTTTTACAAAACA
-TGTAATTTTTGTTGGAACGTCTTTTTTTTCTGAATTTTTCTTTGATTTTG
-TTAACTTTCTGAATTTCAATTCAAATCGGCAAAATTGTACGCGTCTTTTG
-AATGTTCCCACATCTATTTTGTAACGAATACGGGAAAAAATATTTCAAAA
-AGGCACATTTTTCAAGTGTTTCCGCCTTATAAAAAATTGCCACTTCCGGC
-AAATTGATATCCGACATACGGCAAATCGGCGAACTGACAAATTGCCGGAA
-TCGAAAGATTCCGGCAAACCGACAACCCTCCGATTTGCCGGTGTCAGAAA
-ATTGAAAAGTGTAGAAAAATGACGTCACAACTAAATTATAATACATGTCA
-TTTCTTAATGTATTTTAATACAGTTTTGACGTCATTTTTCTCCACTTTTC
-ATTTTTCCGGCACTACTTGAATAACCCTGTATACCACTTTTAAAAATCAT
-GTTTTACAAATTTGTAAACTCCAGATTACTCCGCGGCAAACCGGACGGAA
-CCTTCCTAGTACGTGAATCCACAAATTTCCCCGGCGACTTCACACTATGT
-ATGTCGTTTCACGGAAAAGTCGAACACTATCGCATCGAACAGACGTCCGG
-CGGACAGCTGACCTGTGACAAGGAAGAATACTTTTCCAATTTGACACAGT
-TGGTCTCGGTGAGTCATTTCGGGGCTGTAGAGACAGGAAAAGGGGGAGGA
-ATGGGTAATGAACCGGTATTCGTTAGAATGAGACAGGTGAAGATAACAGT
-TATGATTTTATATTGTGAAGAGTTGTATTATAAAAAAGGTTGGTAGAGAT
-TTGAATATTTGGGAGAAAGAGAAAATGAGGGGAAAATTGTTAAAATTCGG
-ATTTAAGTTTGAAAAGTCACAAAAATGTTATATAAATATTTATATTTATT
-GGATATAACTAATTAAGATTTTATATAGCAATACTTTAAATAATATGAAT
-ATTGTTAAATATTGATATAATATCATATCAATCTTCATTTAATGGCTAAT
-TGTAATTTCCAATTTTCCAGCACTACAAACGTGACGCGGACGGTCTCTGC
-CATCGCCTGGTAACTCCGATTATTTGTGAAACAGCGACATTTTCATCAAA
-CGGATCATCGTCATTTGGTTCATCGTCGACAGTTGATTTGGAAGATCGAA
-CATCAGTATTTCGACACGCGGGTCTAGTTATTTCATCGAACGATATTGAT
-GTTGGTGATACAATTGGACACGGAGAATTTGGAGATGTTCGATTGGGAAC
-TTATAAGAATCGAAAAGTCGCGTTAAAAGTGTCGAAAAGGCATGGAAATG
-GAATGTTGGACTCATTGCTGGATGAAGCCAAGTTTATGGTGTAAGTTATC
-AAATTATTGAGAAGAAAATAATTTTGGCAAAGCCCAAAACAATGCGTGTT
-GAACAAAGTCATATTAAAAATATATTTATGTTTCAAAAATGTTATAATTC
-AATTTATTTTTAATTTCGAAAATCTATAATAACAACTTTTCCAAGTTTTT
-AGTTATGAGTACCCCGAAATCTGAAAAATATTTTCAATTGACTCCAAATT
-TGCCCCTGATTCCGAAAATCTAAGTGAAAAATTCGAAACCTGATGGGCGC
-ACAAATTATTTGTACAATTTAAACACTTTTTAATTAAGATTAAAAATTTC
-CCCAATTTTTTTGAAAATATTCATTAATTTCTATTTTATGTTAATAATTG
-TTTCAGTTTATAACGCTTAGTTTCAAAATTTTCAATTTTCCTGATTGATG
-ACTGATAACTAATGGCAGCAAATAAATCTGAAAAATTCCGAATTTTGCAG
-AGGTCTCTCGCATCCAAATCTAGTGACACTTGTCGGTGTTGTACTGGATG
-ATGTGAATGTCTACATGATAACTGAATATATGGCAAATGGTAATTTAATC
-GATTTACTCCGATCTCGAGGAAGGCATGCGTTGGAGAGGAGGCAGTTGAT
-GATGTTTGCGATGTAAGAAAAAGTTGACAAATAAAAAAATTGGAATTTAA
-CATTCAAATTAGATTGTTCAAAAATTGTTGACATTTCTGCATTTTTATAA
-CCGAAAAATCGAAATTTCATTTTTTCCGCCTGAGTAATAGTAACTCACCA
-CGAAAAGGGTTACTGTAGCAGTGCTTTTAGCTGTCTCTGGTTTAGAAATT
-TACGATTTGCCGGTCTGTCTGAAACCCGATTTTTTCTAGATTTTAAACAA
-TTTTCTAGTATCCTGTTGAATTAATTCCAAAAACATTTTTTGCTAAATTT
-TTGTTCTCCGTTTGTCAAAAAGCCGACTTTTTAAAAACACTGCAAAATTT
-CTCTCTAAGTTTTTTAAAAAATGTTTGCCCTTGAAATCAATGCAGTTTTT
-TTTTTAAATTTTATTTTGGAGTTTTTTCGAACAAAAATTTATTTCTTCGT
-CTATTCGTACCGAAACACCAAAAAATCCACTTTTTTTCGAAATTTTTTTT
-TTCAAACAACAACCCTGATTTCAAGGGTAAACATTTTTTAAAAAATTTGA
-AAAAAATATTGTAAAATCGGTTTTAGTTTTTAAAAAAAGTCGTTTAAATT
-TGTTGCACAATTAAAAAAAAATTTAGAGAAAAATCTTGCAATGCTTCAGG
-CACACAGCTGAAAATGCTAATACAGTACTGCTTTTCGTGGTTGGACCCAG
-CCGTGGTTACTGTACCTCCGGCAAAGTGGAAAATTCGATTTTTTTTTGTT
-AGAAAATTTGAAAATGTCAAAGATCTGATTTGAATGTTTCAATTTTTTGT
-GACAGCTGTTCTTGAAATCCAAATTTTCAACTTTTTTTCCATTTTCAGGG
-ATATTTGCCAAGGAATGTGTTATCTGGAATCAAAACAGATTGTTCATCGA
-GACTTGGCCGCTCGAAATGTCCTACTCGACGATGATTTAGTAGCGAAAGT
-TTCGGATTTTGGATTAGCGAAAAAAGCAAACAGCCAGTCACATGATTCGG
-CTTCTGGCAAATTTCCGATTAAATGGACGGCACCTGAAGCGCTTAGACAT
-AGTGTAAGTTTGGTTGAAAAATTGAAAAAAATTGAGAAATTTTTACAGAA
-TTTATTCTTTCAAAATTAATTTCATAAAAAGAAACAAAATCATTTCAATT
-TAAATTGGAATTTCGTATTCTTAAATTTTTAATTTAAAAAAATCGATATT
-TTTTAAATTTAACAAAATTTGAAAAAAGAAATCCGAAAATCCGCCGGAAA
-ATGCCTCAAAAATCTGCACTTTTTTTGAATTTTTGCCCAAATTTCTAGAA
-TTTTCCCTTACTTCATTTTCTTTCATAGCTTGAATATCAAAAATGGGAAA
-ATCTTGAAAAAAAATCCCAAAAAAATAAAAAACGAAAAAATCGATTTTCA
-AAAGTTTATTTTTTAAAAATTTTTGTGATTTTTTTCTGATAAAAATAGTT
-TGAAACTAGAATTTTTAGAAAATATCCAAATTTTCTAATAGTTCGCTGAA
-AAATGACTCAAAAATCACCAAAAAATATTGAATTTTCGCATAAATTTTTC
-AAAAATGGAATTTTTTTCATTAAAAATTAAGAATTTTTGCAATTTTCCCA
-AATTTTTTTTAGCAATTCACCACAAAATCCGATGTTTGGTCATTCGGCAT
-TCTTCTTTGGGAAATTTTTTCATTCGGACGAGTACCGTACCCAAGAATTG
-TGAGTTTTCAGACAACATTTTTTTAATTAAAAAAATTTCTCGTGTTTTTT
-CATATTATTCCTCGCTAGCTGTTGTTTTTATTTCTTGGTTGGGATCATTT
-CTTTTAAGGCTCCACGGAAAGGGAATCTGCGCGAGAATGAGATCTACGAA
-AATGAGCGACGATGCTAGGATGAAACGCGCGTTGTTTAGCATGTTTTTGA
-GACTTTTCAAAAATAGAGTTTTTAACCTTTTTCGTAGATCCTCTTCTCGT
-AGATTCCTTTTTCGTGGGTCCTCTTCCTATATTTTCGGCTTGGCCGAGTT
-TTCTCCCGGCCACGATCATCACTATTTTATTGATTTTTGTCATGATTTTC
-AGGGAGCCGATGGTCGTTCGGTATGTGTATATTGCATTTTTTCGTTAGGT
-TCTATTTTTTTCAAATTCTATCCACTTCTATTATACAATACATCTCACTA
-TCTTTTCCCCTGCCTGAAATTTTTGAAAAAAAATGAAGAAATTTTAATTT
-TAAACTTTTTCCAAAATTTTCCAAAAAAAAAAGTTTTTTATCAATTTTTT
-CAATAGCTCGAATTCTGAAAATGAAAAATGATGATAGAAATTGTTTTAAA
-AAAATGATTTTTTTTGTTGCAAAATTTAATTTTTAAATCGAAATACAACG
-TTTTTTTCAAAAAAAAAACACCTTATTCGAGACAAAAATAAGTTTCTTTT
-TTTTTCAAAATTGAACATTTGGATTTTCTGGAAAATTGAATAATTAAAAA
-AGATTAAATGTTCGAAAAAAAGAGAAATATATATTTATTGGCTTATTTGG
-AAAAATCAAAAAATAGTAAGAAAAAAATCAAAATTGTTCGATTTTTTATT
-TTTGTTTTGTTTCCGAAGATGTCCTTGTGGTATATAGTATTTTGGGTCCC
-ACCACGAAAATCGCCGTGCGCCTTTAAATTCGGCCGACCACGTCTCGCCT
-AAGTCCAGTCCCCCACTAATGTCAAAAAAAATTTTTTTTCGCAAAACCTG
-AATTTTGAAATCTTTTTTCCAAAAAAAAAAACGTTTTTTATTTAATTTTA
-AAAGAAAAAATTGGAAAAAAGTATTATTTTTTCTAATTTTGAACTTTTTA
-AAAAAATTATTACACATTATCTGGATTTTCAAAATTTTCCATATTCGATG
-TTAAAAATTATAAACATTTTTCAGAAAGGAACACCGAAATTTTTTTTAGA
-AAAAAGTCAAATTTGGAGCGAAAATTATGTTTTTCAACAATTTTTCAACA
-ATAATTTTGTTCAATTTTTTTTTTGGATCCAAAAAAATCTGTGTGTTTTT
-GTGTGATTTCCGGCACCCAACTCCCCAGAATTTCCCTCAAAAACTCTATT
-TTTTTCTCTGCTACCTCTTCTCAATCTTCTAATTAATTCTATGTTTTTTC
-ACTATTTTTTATTATTTTTTCACCCCTTTCAGAGCTCATTTAGAGCCCAA
-AAATAACCATCAGAAACACAAAAAAAACAACTTTTTTTTTCTTTTTGAAT
-TAATTTTTTCAGCCTATCCAAGACGTTGTGAGATATATTGAGAAGGGATA
-TCGAATGGAAGCACCTGAAGGATGTCCACCGGAAATTTTCAAGGTTATGA
-ATGAAACATGGGCTCTATCGGCACAAGATCGACCGTCTTTTGGACAGGTA
-GATTTTTTAAGGGAAATTTTTTAGAATTTTAAGACGAAAATCTGAAAAAA
-AAACCTACAATTATGGCAATTTTTGTGATGAAAATCTACAAAATTGAATT
-TTTTTTCGAAAACCTGATAGAAAAAAGAATAAAAATTAATTTGAAAAATG
-CCGTAAATTGACCAAAAATATGGAATTTTTACCAAAATTTCAGGGGTTTT
-TCAGATTTTACCAGAGTTTCTGCCTTATAAATTAAAAATTTCAAAGAGAA
-ATATCTTTTTAAAATCAGCATTTTTAGCAATTTTTGTGATGAAAATTGTT
-TAAAAATTGCCAAAAATGGGAATGTTTGAAGAAAATTCAGAAAAATCTAA
-ATTTTGGGCAATTTTTGCAATAAAATTGAAAGATTCGGAAAATAATAAAT
-TTTTCGAAATCCTGAAAAAATTTCACAATTTTTGCGAAAAGAATTGTAGA
-AAATTCGAAATTTTATTATTAAAAATATTGAAAAAAACAAAAAATTTCAA
-AAATCCGCCGAAAATGGCTTAAAAATCTAAAAGAAAAGATTTTTTGCATT
-AAATTTTATTGCATTAGTATTTGCGAAAAACAAACCCGAAAATTCACTCT
-AAAATTACAAAAATTTCAATTTTCTGAAGCTGCGTCCACAAAATGGCTTT
-AAAAATCATTTTCATGTACAATGTCAAAATTTTAAAAAAAGTGAAATTTT
-GTTCAGAAGTTACTATAATAAAGGTTTTTTGCTTTCCGGTCATTTTTTTG
-AATTTTGGAACATTAACCGAAAAAAAAATTCCGCATTTTTACCCTGAAAA
-ATGCGAAAATGTTTGAATTTTTTGAAAATTCCACTTAAATTTTTTATATT
-TTCAGGTCTTGCAACGATTGACAACCATCCGAAATACAGTATGACATCGG
-CGCACATCTCGAAACTTCCAGAAATCCATCGAATTTTCTAGTCCATATGA
-TGTTTCTGTTTTTTTTTCGCTGTTTTTTACACAAATTTTGTCATATTTTA
-TTGTAATTTCCCCCACACATTTTTAGGCATCGTTATTATATATTTTCTAA
-TCCGCTGCCGCGCATTTCGGGAGATCCTGGAATTTAAAGGCACAGCGGTG
-TTTTTGGATGGGTCCCACCGCGAAAATTATTATGCGCCTTTGAAATTTTT
-TTTTCGATATTCCTAAAAATCACAAAAAACATTTTTTTTTCTAAATTAGA
-GAAGTTTTAGCCTTTCTTTCGAAAAGTCGATTTTTTTGGTTTAAATTTTT
-CTCGATTTGAAAAAAATTTCAATTTTTAGTGAAATCAAAGAAAAAACATC
-AAGAAACTTCTATTCGAAAGAATTTTTTAAAATTGTATTTTCCGAAATAA
-TTTTCTCTGTTGGGTCTCACCACGAAAATCGTCATGCACCTTTAAATTTC
-CTTGCCCACACCTCTCCGAACGGCCGATACCCAATCTACGGTTTCTTCAA
-TTTTCCTCTGCATTTTTCATCGATTTTTAAAAATTTTTATCGAATATTTT
-CACGTTTAAAATTATTAATTTGCAACGAATTTCCCTCAACAAAAAATGCT
-CAAAACTCCGCCCCTTTATTGGCATAATTTTTGCCGCCACGGAAAATGCA
-ATAAATTTTATATTACTTTTCACCGATTTTTTAAGATTATTTTTAGAACT
-TTTAGTTTTTGTATGTGTGTGTGCTCGTAGTTTATCGGCAAGAAATTATT
-GTTTTTTTTTCTTAATTTTTAATAAGGGAACATTTTTTAAAGAGATTTTC
-AGAAAATCGGTAAAGATTTAAGATGCTCTGAATATGTCCAACTTCACAAG
-CTTCGTAGATTACGCGGAAAAGGTGATTTTGAATGTTGAATGTGCAAGTG
-CGCCCTATGGATAAATGGAGCAGCGTGGCAATTCGAAAAAATTTAAATAA
-AAACGTATTACTCGAAAGTTCACAGAGTTTTTCACCAAAAAATTGAAAAT
-TCGCTGAAAAAGTCGCGGGACATTCCATTTTTATTTTTCGGGAAGAAATT
-CGAGAATTGACTGAAAAAAGCGCGTCTTTATTCCAGAAATTTTAGCGGAA
-AATTCCAGATTTTTTTATTTAAAAAGACTCAAAACATGAAAAAAATATTC
-TGGAGAAATCAAAAATTGATTGAAAAGTTTCAGTTTTAGGCTAAAATTTT
-TTTGCGAAAAATTCATTTAGTTTTTGTTGGTAAAGTTCCGATTTTTCTGC
-AAAATTTGAATTTCTTTCTGAAAAAGTGCGTTTTTTTTTTCAAAAAATTC
-TTAAAATCGGAAATTTTTCGCCCCGAAACTGAACCGAAAAATTCGAAAAA
-TGAAGCGCGGTCAATTTTTGAATTTTGGCATTGAAAATATTCTGAAAAAT
-TCAAAAATTGACGGAAAAGCTCAAAGTTTTTCACAATATAATCGATATTT
-TCTCATTTTTCAATGTAAAAATCGATAGTTTCAGCCGCACGTCGCAGCAA
-CAAGCCAGACACCAATACCGCCGTCACCGTTGAACGAAAAACGGCCAATT
-CCACTGTTTCCAAGTGAATTTATCGATTTTTCTGTAGAAAAATCTGAAAA
-TTTCTGAATTTTCAGACGAAATCAGCAGCTCTTCGTGCGATGACGTCTCG
-TTTTCCATGCAATTCGGAGAATCTGAGCAGGGACATGTTATATGTACAAA
-AGTTCGACTTCGATTCTATCCTGCCGTGGTGAAAGAGGTTCGAAATTCAA
-AAAAAAAAGAAAACAATATTACTATACATTCGTAAAAATTAAATTTCAGT
-TTAAAGGCGCATCTCACATTTAAATATGCATTATTATTCATTAGTGTCGA
-CCCAGATTGAAAGCGCATGCAAATTTTGAACTTTAAAACTGGAAAAAAAA
-TTTTATTACACATTCGTGTAACATGAATATTCAGTTTAAAGGCGCGTGCT
-AGTTTTAAACTTCAAAAATTAAAAAAATATATATATATTCGTGAAAAAAT
-GTTCTTTTTAAAAGCTCTTTAAAAGTTTAAAAATGATTATTATACGTTTC
-TCAAAATTTTCAAAAATCAGGTCAAATGCACTTAGAATATTGGAAAATAT
-GAAGAAAAATCTTTATACATTCCTGAAAAAATACGCATGGTCCAAAAGTC
-GACAAATCGTGGCCCAATATTTTCTATTTTTTCAGAGAAATCTTCCGCAA
-AGGTCGAAATTTTTCGACGATTTCTACGATGTTCCGCTCACTGCGATCGC
-CAGAATTGAGGTGGCCATTGTGAAAGGTGAAAAATATTTTTACTTCAAAA
-AATTATTATATTAAATTTACACATACACATTCGTGAAAAAATTTTGCCGG
-TAAAAATAATGAAAAATATATACAGAAAAATACGGAAAATTTGGATGAAA
-AATATTTTTTGGTGACAATTAGAATATTACCCGCAAACAAAATTCAAATG
-AATTTTTTCAGTTTTTGAAAATCTAAACAAATTTCAAAATGTTATTATAG
-ATTCGTGAAAAATTAAAACTCAGTTTAAAGGCGCATTTCATATTCAAATG
-AGAATTATTAAACATCTTAAAGACATAAACAAAAAAAATGAAATCTGAAG
-AAGAAAAATTATACATTCGTGAAAGTTGGGAACAAAATTTTGTAATTTGA
-GTGCTTGACATCAGTTTAATAAAAAATTTTGAAACCAAGAATTTTCGAAA
-AAAAATCACGTATACCTAAAAACTTGTAGTTTTTTAAAGTTAGTAAACTA
-TTTTCTCTCAAAAATTCAAAAATATTCCAGGTAACAGTAAAGGAAAAGCG
-GACAAATTTCAACGCCTCGAGACAAGCCTATCAACAATGGAAACAGTATC
-AATAATTCGTCTAATATTAAAAGATGTCAGAGTTGTTACAATTGACTTGA
-GAAGATCTCAAAATGCAAATATATTGGCTAATCAAATACTCTACTTCTCG
-AAAAGTGGACCAATCGAAAAAATGACTCAAGTTGGAGCTGCTATGGAGGA
-GCGCGGTGTGAAGGCGAAAAGTAGGCATTGGATAATTAGTATTGGGGGTT
-GGGAGGGGAGGGAGGAAAGTTCGAGAAAATCGGAATATCTTATAAATATT
-AGGCCGTTTGATTAATAAATCGACACATCAAGTAAATAAATTTTGAAACA
-AATTAAAAATTTTAAACGTTTCGATTGATATATGTGTATCAATTTTTTAA
-AAGATGTATATTAGTAACAAACAAGAAATTTTTTATTCAATAAAAATATA
-CTACGGGAGCACTAAATTTTTAGAATGCGTATTGCACAACATATTGGACC
-AGATATCTCGTAGCGAAAACTACAGTAATTCTTTAAATGACTGGTGTCGA
-TTTACGGGCTCTTTTTTCATTTCTCCGTATTATTTTCTCTTTTTTGCTTA
-ATTTTAATATTCTATCTATAACTAAAAAATTAATTCATTTCGAAAATCTA
-GCCCGTAAATCGACACAAGCGCTACAGTAGTCATTTAAAGGATTACTGTA
-ATTTCGCTACGCGATACTTTGTGCGTCAAATATATTGTGCATTACGCATT
-TTCAGAATTTTGTATTCTCGTAAAATTTTCGAAAAAGTAAATCTTTTAAA
-AAACTTTTTATTAAATGAATAAAAACGCATTTTTTGGAGAATCGGATAAA
-AATAATTTATTTAAGTTTTGAAATTTTAATATTTTGAAAAAAAAACATTT
-TAATTGGAAAAAAATATGAAACTTTCTTTTGTAAATATGGTTTTTACAAA
-ATTCCCGAATGTCCAATATACAAACTTATCATTTTCCAGCAGCATTCAAT
-AGCTACGAAGCATGGCGTTCGGAACTCCAAAGGTGCCAGCAGAAGACGGA
-TTCAACGTCTGTCTGGAAAATTGTAGCACTTAACAAAGAAGGCTTCAACT
-ATGCGGCTCAGGGGTGCGATTTTTGGAAAAAAAAACTGGATTTCCGATTA
-AAAATATGTATAGTGTATGTATTTTTCAAATTTCCAGCTACCCTGTGTAC
-GTAGTAGTGAGCAACTTCTTGGATCGTGTGGACATTGAACGACAACTACA
-ACACTACAAACAAGGACGATTTCCGATTTGGGTGTGGTCTCGGGCGAACG
-GACACTCGGCGTTATTCGTTTCGGCGGATCACGAGAACAATATCGCGATG
-CCGGCGATTTTGGCGAAGTTAGTACATTATATTTTAAATTTGTAAAATGT
-TATTTTCTTCCAGAATGCAAGAAAGTATCACCCGTTGCCATCCGAATAAC
-GAGAAGCCGCATGTTATAAAATTGGACGTCGATTTTGTGTCGAATGTTGG
-AAAAGCTTTTGATAATCTTCTATCGCTTTGTGCAATTGGTGAGGGAGAGC
-ATTTCATATTTAAAAAAAAAATTATTCGCCGTATTTTCAGCTGTTTTATT
-TTCCATTATTTTCCATATAATATGCATTTTCCCAGACTCCTACGAGCAAT
-ACGTTACACTGCAAAACGGTTGGAATACGAAACTCTCGAGAACCGGATGG
-CTTCATCTCGTCAAGCTGTGCCTTCAGACTACCTATCAGACGATTCAATG
-GATTGTTGATAGAGATCGATCGGTTATTTTACAGGGTACTATCAATTTAG
-GTTTTATTCAGAGAGAGAGAGATAGCAATTTTCAAAATATTTACAAACGA
-GTTAGTCATTTACATCCACAATCGACTGATCAGAATCTGATTCGTGGCCG
-TTTTCCTCCGCCAGAACTTTAGGAACTTGCACCGAACTACTTGCTGCTTG
-ATCCTCCCCCTCCAGAGGATCTTCTCCAGATGGGATACAACTTTTGATGA
-AGCTGATCATCGGATCCTCCTCTCCATCATCCGAACTAGTTTGTCTGAGA
-AGAATATCAACCAGTGTCTGCATTAAATCACCGGGTTCCGTTCTTGCTCG
-TCGAGTACTCAAATTGTGTCGGCACATGAATTTGTCCAACCATCCGCGGG
-ATGCCTGAATGATAAAGGTGGAGTAGCGTCGAATAGTTATTTTTTATGTT
-TTTCATATACTCGTTTGCATTAAAGTAACGGCTCTCCTACCTTGAAATCC
-GAGTTCTGACTGATTTTCTTTGCCGTTTCACCGATGATTCTTCTGGTGAC
-TCGTTGTTTCTCCTTACGCTGATCGTGAACCCATTTAATCAATTCCTTAT
-CAACGTCGTCATACTTTAAAGGTCTTCCACCTCCCGAAAGTCGCTTTGTT
-GCAGTTGAGCCGTTGTCTTCTCTGAAAGTGTTATTTGCCAAAAGGCAGCA
-AGTCGAAAATTTTTCAAAAAGAAAATTTGAAATCGAACAGAGAATTTATG
-TTATGCCCGTATTTCAAAATATAGGAATAGTTGAAATGACTTCTTTTGAT
-AGGATTAATTATAAGCCTAGAAAAAATCATAGTATTTGGAATAAAAGGTC
-CATAAAAGGTTCTCAATTGATAGGGCTTGCATGTAGGCGTTAAACCCTGC
-CTTTAAGGCGACCTCCGCTTGCCTCTCGGTTACGCCTTACGTTGTGCTAA
-AACATAATCAATCTTTTTTTTTTTAATTTCTATTTTGATTTTCATCAAAT
-TGAGAGAAATGAGAAAATTAGAAATTTGTAAATTCACATAGGCGGGTTTC
-AAGCAGGACCCTGACACCGCGCATGCCTAACATGAAAGTCCTAGCCCTGG
-ACTATTTTTTTGAACACAAAAATATGTCCGAAGTGGCAAAACTTACAACT
-GCTTCTCGATTTCAGCTTTCTGGGCGATCCACTGTTGAATGTTTTGCCTA
-TTCACATTCAAATCCTTTGCTGCTTTCGATATATTCTTATGTTCAAGGGC
-ATAATTTATGGCATGCAGTTTGAACTTCAAGTCATACGTTCTTTTTCGAG
-TTTTTACAGGCACTTCTGTAGGGATTTCGCTCATTGGTTTTCTCTGAAAA
-ATAAGTATATAACAAGCAAAGTCTTAACTAGTCAGCAAGTTATTGGAAAT
-AAAACATGTGAGAAAAGCGAACGAAGGGGCAAGACTAATGGAGACAGCAA
-ATTGGCACACACGCAGAGAGACATGGCTAATAGAGTGTGCAAGACTATTA
-GAGGGTAGAGGCAGTGAGACGAATTTCCGACTGGTCAGAATGTAAAGGGG
-GTGCAAGGCTAATAGGAGGAGACAAGACAAATAGAAAAACTACATTATTA
-TATGAAAAGAGAGTAAGACTGAATACGTGTATGGGCACCCCACATATTTG
-TATGTAAGTAGTTATGTAAATGACTTTTTGGAATTGAAAAGAAAATACCA
-AGAAATGGAAAAAACCTCCGGTCAATCGTAAAAAAATTATGAAAGAAGTT
-CGATCTACTCGGCTACGATTTACAGTTTCCCTTACTGATTTCTACTAAAA
-TGCATTAATCTTGAGTTTATCTCTAACAAATTGATGGTACTTTTGAATGG
-TTATAACACCGGATATTTTGCAGAAGACGAAGGATCAGATATGTCGATTA
-TTGTGGCCAGCCTCACGCAAATGTGCTGTGATCCATTTTACAGAACAACT
-ACGGGTGAGTTTATTAAATGTTTTTTCTGTACTAAAAATGGGGTTTAAAA
-AACTAATTTTAATTTAGTTCTCTCCTTGTATTAATTTCCAAAATTTTCCG
-AAATTTTTTTTTCAATTTAAAAATCAATTTCAGGTCTTCAACAACTCATC
-GAAAAAATGTGGATTGCCCTTGGCCACCCATTTGGTGAACGGCTACTCGG
-AAGAACCGACGATGATCCATCGAGACGTGGAAAACCACAGAATAAAATGA
-GAACTGACGTCATGCCGACGTGGTTGCTCTTCTTGGATTGTGTTTCACAG
-CTACATCGAATATATACATTTGAGTAGGTTTGGTAAAAAAAATGTTTTCC
-CCCGCAAAAAAATGTTTTCCTCAAAAAATTTGAATTTCCCACCCAAAATT
-TTTCTCAAAAATTTTTTTAAAAATTAATTTTAAAATTGTTTTCTCAAAAA
-ATTTGAATCTCCCGGATTTAAAAATTCCAAAAATTCGTCTATCAATAAAT
-TTTATATTGTTTTCGAATTTCGAATCATAAAAATTAGTTTCAAGTTAACA
-CACCTTTTTTTTCAAATAATTTTTTTAAAAAATAATTTTAAAAACAATTA
-ATTTTTTTCCTATTTCCAGATTCACATTCTCTCCACACGTTCTCATTGCA
-CTATGGGATCTTTCATTAACTGGAATGGTTCCATCAATGGCTTGTAATAA
-TCTGGAAGAGCAATTACTCGCAAAAGTCGGCGGTGGACCATTCCCATTGG
-ATCGATATTTTGAGAAAAGCTACTCGAAATTATTTGGAAATATTTGGCAC
-GACGCAGTGCTTTTTATGGAATCTATTAAGAAAAGTTGGTGCTTTTTAAG
-AAAAAAATTTTATATCGATTGTTCTTTTCTTTTTGATTTCAGCTACTTTT
-TCACCTCGGTCAGCAACATTTTTTTGCAACATTTTGGACGTGGCCGCGAA
-AAAAAAATTGGTGGCCGAGTTTTCTTTTTTTTCACTGCCATTAATTTCCG
-AGAGGAAAATCTAGGAATTAAAATTTTTTCGAAAGTATACAATGTTGACC
-GAGAAAAAATCGGTGGCCGAATTTTCTCTTTCTTCTCTGCCACGTTATTT
-TAGTAAAAAATTAGAAAAAAAAACACAAAATGTTGTTCAAATTTTGGAAA
-AAGTCTGTAAAAACAACAAAAAATTGATGGCCGAGTTTTTTTTCCATTTT
-CGCGGCCACGTGACAAGCAGTGATTTCTCAAATGTTTTCAGGAAAAAAAA
-ACAGGCGGAATTCAGATAATTCTACGAAAACTATTTTTGTTTCTGGAAAA
-AAGTCAAAACTTGAAAATCGGTGGTCGAGTGTTCTCTTTTTTTGCGGCCT
-TATCTCGATTTTTCCAGATCAACCAGTGTGTGCTCACTCGAAATTCCTTC
-AATGTGAATTTATTCGGCCACCGACGTCGTTTTGCGATATTCAACTGTGG
-TCCGAGTGCTATCTTCGATGGATTCCTCCGGCAAACGGGAAAAATTCGGG
-AAAACTCGGCGAAGAACTCTCGCTGGACGAGAAAATGATCGAAATGGCCA
-AAAAATGGAACAGTTCCGAGTGGAAAATGCATTTGGACCTACCGGAAGAG
-GTGACCAAACTTTTCGGATTTATAGGCTCTAAACATATTTTTACTTTCAA
-TTCTTAAATTTTTAGTATTCATCTGCATATCCTTACTCGATTCCGGAGAT
-TTCCCGCCCAATAATGGATTTAAATGATTTTGATATGATCCGGCCGGATG
-ATTTCGACGCAATGTCCATGAATTCATCCATCAACTCATATTCGTTCGTT
-AATACGGTAGGGATACTTATTAGCTCGGAAAATAAATTACGACATATTTT
-GTCTCGAATTTTTTATAGGTGACTTATAATAGACATTTAGTGTCTAGGCA
-CACATAAAAGTTAGATCTTTTTCAGCTATCGTTTCGATACTTTCACACAA
-AAGTAGGTTTTTTTTCGCAACTTTGTAAATTGAAAAATCAATAGGTCGGC
-AAATAATTGTTGGCGTATTTTGTCAATTCACGATATTTATCAAAAATTTT
-ATATGTGACTTCTGGTAGAAATTTATTATGGTTGGCAATAAGTACTGAGT
-CAAAATTCATATAACTTGTTTTGTTGCTTATCGATTTTTTTTAATTGCCG
-GAGTTCATGTTATTAACTATGGGCTTTCATCTGAAAGTAGTCACAAAACA
-TTTTAAAAACTCGAAGTGATCCAAGTCGAAACAACTTTTTCAAGGTTTAC
-GCCCTCTTATTTTTTCTCTTATTTTCAGCATTGATATGAGTTTATGTACG
-GATCAAGAGTGTCGGTTTTTCGATTTTTGTATAAAATCGAAATTTTTTTT
-TTGATTTTTCGATTTTCCCTGAAAAACACACAATTGAAAAATGTCACTCT
-TGGTACGGATATTGCTAAATCTATTATACAATGTGAGAATCCAATAAAAG
-TTTTATATTTTATTTTTGCAGCCAGTTCGTAACAACACGACAACAGAATC
-AATATTCGATCATTCGACACTTGAGAAACGAAATCGTCGAGCAGCTGCCA
-CAATTGGCTCCGAATCGCCAGTTATTCAAATGAGACCAAAAGAGCAAATT
-GTCGGATATTCGAAATATGCATTTGATGATTCATTATCACCAAGACCACA
-TTCCCGAACTGTTGAGACGCCTATTTTAAAGAATGTACGGGATTTTTGGA
-AAATTTAAAATTTGGAAAATGAAAAATTCAAACAAAACAATTTTTTCGCT
-TTCAAATTTCATAAAAATTTATGTTAAAAATAGTTTTTAATTGAATTTTT
-AAAAAATTCTTACTGAAAACTTTCGAAATAATTAAAAAAAAAAACCAAAC
-TATATTTGTTTTTTTATTATTGAAAAAGTTAAAAAAAATGTTTTTTTTTG
-ATAATTTTACACTGCTCGCCTTCAAAATTTGATGAAAATCTTAATACTAG
-ATTTTTTTAATTTTTCATTTAAGACTTTTCGAAAAATTCGAAAGTTCAAA
-AAAAAAAATCCAAAAAAAATTTCACTCAAATCAATCGCCTTCAAAATTTG
-ATAAAAACTCGATGAAAATTTTGTGGAATTAAAATGTTTAATTTATCATT
-CTGAGGCACCACGTTTTCAAGATCTGGTGGGATTCCGGATCTACATTCTT
-CATTTCAGCGCAAAATCCCTAAATCCGGAATTCCACCGAATCTTGAAACC
-GTGGTGCCTCATCATTCTACCTTTAAAAACTCGAAATTATAAAAAATTCT
-GCAAAACTCTAAAAAAATTTGATTTTCGATTTTCGAAAATTTATCTTTTT
-TTGTATTTAACATTCAATAAAATATTGATGAAAAAATTTCTAGAATCATA
-TTTTTAAATTTTGCTTTACAAAATTTTTTAAAAATCTACAATCGTTCACT
-TTCTTGCCTTCAAAATTTGAATGAAGAAAAAATTTCAAAAACTTTAAGAA
-TTAAATTTAAAATGTGCTCAAAAAATTCTTTAAAAATATGCGTTTCCCTA
-ATAATTTCCATGTTTCAGTCCCCATCGCCCTCCTACACCCCATTTCACCC
-GACGCCCGTTCACCGGAGCAACACCGTCCGTGCCGACAATCGCCCAATTC
-CCCCGCCCCGGCCGCAGGGCCTAGGAACACTGACCCCATCACGCCCCGAG
-ATAAGAGCTCATCGAGATGATATAGAGAGCCCTACTATTCGGGTCACAAG
-ATTTTGAAGAAAAAGTTATACTTTTATTTTAATTTCCGCTCAAAATCGGA
-ATTTTCTATAAATATGCCCCTTTAAATTGAGCTACAGTAGTCACGTCGAA
-AAATTTTCAATTTTTTTGAATTTTTTGAATTTTTTCATCCAGTTATAAAA
-AAAAGCTTGCCCCTCAGCTCTACCCCATTTTTCTTTCATTTGTCACCTAC
-TTCCTTCATATATGCCCGGTTAATTATGTATTTTTTGATGCTTTTTTAGT
-CCCGCCACGGTTTTTTTCATTTCGAAAAGTCGATCGATTATCGATTTTTT
-CGAAAATTTGGAAAATTTGGAGAAAATCTAAATATTATCGATTTTAAGCT
-AAAATTTTAAGATTTTATTTTTTCAAATAAAATTTTGGAAATGTTTTTTT
-GAAAAAAAAAGTGCAAAAAACACTCAAGGGAAAATTTTTAAAAAATTGGA
-AAAAATCTTGAAAGTTTGTCGATTTTTCAGTGTGCATTTTGGAGTTATCG
-GTTTTCTTTCCGAATTTTCATCAAATTTATTTTTGATCTACCAAAAAATC
-TCTAAAACCCCGTGGCGGGAACCTACTTCACTTTTATTCTGCATAATTAG
-ACAAAAATGTGATTATTTTCTCATTTCAAAACTTGTTACATATTTTGTGT
-TGTGATACATATGTCTAAATTTTTACGGACTGAAAAAATACTTTTTTCTT
-AATGTTTTTGAAATTTTCATTATTGGTGGCGTCATCCATGTCTATTTGAT
-TTTCCAGACCCCCCCCCCCCCCTCTAAAATGAAAAGAACAAGACGATTGA
-CAGCTAGCATGTGCGACGATCAAAGTACCGATTTGATTCAGTTGAAGGGA
-CACGAGAACGCGAAAAAGTCGGAAGCCCATCTGAAAGTGCTGGAATACAT
-TGGCAAACGCTATGAAATTCGAATGACCGACGGGCGGTACATACGTGGCA
-CGATGATCGCCACTGACAAGGACGCTAATATGGTTTTCAACAAGGTAAAA
-ATTTGATGAAAATTTGGTCCAAAAGCTCATAGTTTCAAATATTTTTCCTT
-AAAATTATGCGCCGCAGGCAAAACAACATTCCGCCTTTTTCTATTGCTGG
-CTTAGTTTTCGCAATTTTCTCGGCTACCAGGCTACTGCAAAAATGATCGA
-TCCGTGAATTGTGCAAACATCTGAGTTACACAGAGAGTGGGGCGGAGCGG
-AACATCGCAACACTGCCGCATGGTTTTTCCACAACTTTTTTTTTCAAGAA
-AGTTTCGATTGTACTTGTTTTTTCTCTTTTTTGTATAAAAATGGTATTCA
-TTCTAAATAATTCACATATGCTAAATTGCATATAAAAACATGGAATATCC
-TCTCAAATTAAGAGTCTTAATCTTATTAGAATTAAATTGGATATCATTTT
-CATTCGAAAAGAAAGAGAAAGAAACAAGTAAAATCGAAACTTTTTTGAAA
-AAAATGCTTGATTTTATTTCATTTTCGTTGTTTTTTTTTCAGTATTTAAC
-TTTTGAACGATCGATTATTTATAAGGTTTGCGGTTAAAAACGATGAATTT
-CGTGTTTTTCTTTTCTGGATTCAAATGACAAGTTTTAACCAATTCGAATG
-TCAAACACGGAAAAATAAGCGAAAATAACAAAAAATCGTGTATTGTAACC
-AAAAAGTTCTCCACGAGTAGTACACTAGAGCCGACGCGCCGCAGGTTTGC
-AAAACAACGCCCACCCCGTTTTCTGCGCGGCACTACACAATTTTCTATCT
-CACGAATAAATATTTCAGAAAAGGCAGGATTTTGTCTGAAAATCATGAAA
-AATCAAGTTTTTTTCAGGTTTCCAACGCTGAAATGGTTGGAATTAGGGTT
-TGTTACCAAAAATCGTATAATATTAAAATCCCAGTGCTTCTCTGTCTTTC
-AGCAATTTCTTTTAATTTCCAGGCAGACGAGCGATGGGACAAAGATCCAC
-AATTGAAAGGAGTCCGATTTCTAGGGCAAGCGATGATCTCGAAAAAGCAC
-GTGGAATCGATGCACGCGTTGCCGGACCCTAAAGAAACTGAAATTTGATC
-CAGTTTTCTTATTTTCTCTAATTTATCCCATCCTTTTCTTGTCAAGATTA
-ATATAAATTAATTTTTATCGAAGCGATTTTTGTTCATCTCATCCAAATAT
-GAAAAAACATTCGAAAAAAAATCGCAGGCTTCACTTGGAACCGCGCGCCA
-TCAGTTGAAAATGCTGAATATGTACAAAGACTGGAAAATATTAAATTTTT
-ATGTTTAAAATTTCACGTTTTTCGTGTTTTCCACAAAAAAGCAATGCATT
-GTCGTTTTTCAAAAAACACTCATGGTAAACGAAGTCCCCGTGGAGTACAC
-GACAATGTCGCATCGAGACCCAAACTGGGAAACGCCTGCGCCTTTAATTT
-TAGGAGTTTAATTTTCGAATTTCGAGTTATTTTTTTCTCAAGTCTTTTTG
-CGACTTTTTTTTGAATATTTTATTACTTGTAGCGCTGAAATATGACAGTT
-ATTATAGCGTCACACTGGGGACCTCAATCAAAACAGGTATTTTTCAAAAT
-TTCGCCGTAAAATCTAATAACCAATTTTGAGATGTTGCCACCCGAGCCCC
-CACGGATAATTCTGAGAGAAGTTCCGGTCCAGAATAACCAGAAAGAGCAT
-CCACCGGTTCAGGAGATCAAAACCGTGTCCAGCAAGTCGAAGGAACATCG
-CGTCAGTTCGAGCCGGAAAATTCCGGATCACTTCGACGTGGGCCCACGGT
-TCTACATGAATGTCCCCGCAGATGGCTCAGAAGTGTTCGAGGACGACGAA
-AAAGACGTCGAGAACGAGTGTTGGGCGGTGATCGAAAGAATAGGAAGCGA
-GGATGACAAGTTCGAGGCCTCTGAGCTTGTCGAGTACCGCGATCACGATT
-GGTACATCGCTTTGGCGATTAATAAGGAGAAAACGCCGGATAAGGCGAAT
-TATCAAGTAGGAATTACGAAAAAAATTTTGATTTTCAATCTCATTTTTTA
-AATTTCAGCACCTACTCTACAGCTATCGAGGCGGAATCCAACGCATAATT
-CTCACGCCTCAACAGACGGATTCGATCGACAAAACGCCGCTAGTGAAGTA
-CAAAATCATCGGAGACGGTCTGTACGAAGTGCTTCCGATTCACTCGTCCC
-TTCCTCAAACTGGTCTAATCAGTCCCAAATATCGTTACAACAAAGGCGTC
-GAGCTTCGGATTTTCGGGATAGTGAATTGGATTGATTTTGTGTTGGACGA
-CGATCATCAGACGCACAGGACGATGGTTTGGACAGATGCGGTCGGACCGA
-TCTATCTGAGTGCCGCGGATCGAGCCAATATTCGACGGAAGCTGCTGCTG
-ACCGAGATGCAGATTTTCGCGCCGTTGCGAATGTGCCATATTACTGTCAA
-GGCGGAATTTAACTTGTTAGTTAAAAAAAACGCGTAAAAAGAATAATAGT
-TCCAAATTTTCAGCTCGATTCCCGATGGTTCCCCGATTCAATGGACCATA
-TCATCGTTCCAGCCACTCATCGAAGAATCAGAGAAGGATCCGAATATTGG
-GCGCAATTTATGGCCAGCGAGAGTGCTCAGATTCGATGATTTAGTCGTTA
-CAAAGAAGGTGCTTAATCATTTTAATATTAAATTTTAACAGCATTTATAA
-TTATTTATCTATTTCCAGACACCGAACGGCTACTGGCTGAAGTCTCAAAG
-ATTGGAGGGTCACGTTAATGTGTTCGCCGGTGCAAATCAAATCGGAATCA
-TTGAGTCGGCGGGTGAAAAATACGCGACGAAGGGAAGCATGATGGCGTTC
-GTGGTTCCGTGCTATCAGAACAGCACGTTTGCATATTTCGAAGCACTTAT
-CGCCGGACCCCCGCGAGTCGTGATGATTATTACCGAAGGACGCTTTCTGA
-ATTATTGCCCGAAGACGTGGCCACCGTCTGTTCGGAAAATGCGTGATCAG
-TATCAGAAAGAGCACGTTGTAAGCACAATTTTCCAGAGAAAAAGGCTTTC
-GATAAATTTTCTTATTTTCAGCTGAAATCCGAAGTCCGAAGTTCACCAAT
-CTGCATGAAACAGCCGGATTATTGCCTCAAATCACTACGAGGATTCAGCG
-AGTGCCCATTTTGATCACTCAAAGTTTTATATATTTCTGTATTTCTTCTG
-CCTTATTTTAAAAAGTATTTTCCCGTTTTTTTTCTTTTGTTCAATTTTCC
-CTTTTTCTTTACTTGTTATGTCCTATGTTTCATGCTAAATTAACGTATAT
-TTTTAATTAGCAATTAAAAAACTTTCTGATTAACTGCCAGTTTTTGAGAA
-GAACCAGAAGATGGAACGCAGGCGAGTTTCTGAAACGGAAAGGGTTTGAA
-ATTTTTATCAATCAAACAAACTCGCAATTTTATCAAAAACCATGCCGTCG
-TTGCAAGTTTGAAAAAACCACATATATTTGCAACATTGATAGAATATCAT
-TGGATCGTATGGATCCGCCATGGCCAGACCATCATATTGACATGTACCGT
-TTAATGGGTTCGGTACCGCTGAAAAGTTGTTGGTCTCGCAGCGAAGTACT
-ACAGTAATCGGGAAAAAGCGCTGTTTATTATCGATTTTTCAATTAAAAAT
-CAATAAACTCGCCGCGAGATCCAAACCTCAACTTACGATAGCTTTTTGTA
-GGAGTCGATTGTCCATCGACAAGGAAGCCAGCAACTAGGAAAATTTTGAT
-AGGGAGAAGCATTGAAATTTAATTGTTTTTGGGGGTTTCGTTTGGTTTTT
-ATAGGAATTTTTGAGCTGTAAGAAAACAAAGCAACATTTATTTCAATTAA
-AACCGGAAAATATGAGTCATTATGGGGGGTTTTCAACCGTACGGAATTTG
-ACAAATTTGAAACTACCATAAAATGGTTAGTTTTGTAGTTAGAGAACTCA
-AAATTGATTTTCTAAGACAAAAAAATTGCCCTTTTTCAGAATATAGTAGG
-TTTGTATAATTTCCAAAAAATTATTTTTCTTGCCCAAAAAAAAAAGGACA
-GTCATTAGATGGCTGAAAAAAAAGTGGGCAAAAATAAAAAGTGTCTAATT
-TTGTTGAAAACGGGTAATTAATATATGCAGAATTCAGAAAATCTAGGTTT
-AACCCATCAAAAACCATTAAAAAGTGGCAAAATTTGGCAATTTTTGCAAA
-AACTCACAATTTTGAAACTCCTCTAAATTGGTTCAATTTGTAGCTAGAGA
-ACTTAAAATTGGTCTCCAAGCCCTAAAAAATTGTCCTTTTTCAAAATATA
-ATAGTTTTAAACGTTTTTAGAAAATTTATTTTTCTTGCCCAAAAAAAAGG
-ACAGTCATTAGATGGCTGAAAAAAATTGGGCAAAAATAAAAACTTGTCTA
-ATTTTGTTGAAAACGGGTAATTCATATATGCAGAATTCAGAAAATCTAGG
-TTTAACCCATCAAAAACCATTAAAAATCTAAAATGATTAATTTTCTAGTT
-AAAGGATTCAAAATTGATCTTCGAACACTAAAAAGTTGTCAAGTATCCAA
-AAAAAGTGGTTCAATTTAAAAAAAATTGGTCAGGGAAAATTATCGATTTT
-TTCGCCGCTTCGCAACTTGGACGAATTTTTCTTTCGCTGCACAAAAATCA
-ATAATTATTGATTTTTTTTCTAAAACAGAAAAATAGATATTTGCACTTTT
-CTGAAAAATCGATATTAAACGGAAATTCGCAAAAATCGATGGTCACTAAT
-TTTTTTGCAAAACCCCAGTAAAAAATCGCTTTTTTCGCCGCATTTCCTAA
-CTTTTTCTATGCCACCACTATTGATTTTTTTTCCAGAAATCTTGGAGCTT
-CCCAAACCCGCTCATCAGCCCGCGTGCTTCATCAATCATTCCGTTGAGAA
-CTATGAATTTTTCGAATGAAAATTAAAAAGAGGGGGATTTATTAGACTGA
-AAAAGTGTTTTTGTGCCACGTGGCGGCGGCCGAATTCTCCTGGACGGGAA
-TTTCTAGGCCATGCTTGGGGGAGATGAGGAGATGGGGGTCAACTTCAAAT
-GTGTGTAACAAAATAGAAAAAAAACTATAAAAGGTAAGAGGAGATCAAAG
-GTCACGCCACTAGGGCTTGAAAAATGAATGCCTGCCTACAAATAGACATG
-TAGGAATGTAGGCAGGCAGACAAAAAGTGGGTGAACAACGAGAAAAGGCA
-CGTAAAAAGGGGTAAAGGTTAGAGAAAAAGAAAAAAAAAGCTCACAGAGC
-ACATTAAAAATGGAAAAAAACGAGATCATTGGATATTCTGCTGCCGTTGA
-TCATCGTCATCATGAATGATCAGCTGATTGGGGTCGACTATCACATCATC
-TGGGTTCACGAGAGCATCTTCTTCGAGCAGCTCATGCGGAGGATGATCGT
-CGTGATGATTTGGCTCTTCCACAACCACTTGTTCGAGGACATCTGGAATT
-TATAGAATTAAAAAATACATTTTTTAGACAAGAAATCGACAAATTTCTGT
-GTTTATTTCTATTTTTCAGATAATTCCACACAATTAGATAGTTATTGAGT
-TTTCTTTCTATAAATTTCAAAAAAAAAAACGATAATTATTGATTTTTTTT
-TAAATCAAAAACTTCACAAAACTCAATAATTATATATTTTTCGTCCTCAT
-TCTCTTTCGGTTTTGTGTGTGTGTGAGTTTTTTTGAAAAACGCAAAATTT
-TCTGTGATATTTCTATTTTTTAACCTGACATGGGCAGTTTTTGAAAAAAT
-TTTGCAATATTTTCGGTGTTCTTTCTCAGAAAAACTCGAAAAATTGCAAA
-ATAAATGTAAAATTTATCAAAAATTACACATTTTCGGTCAACCTTTTGCT
-CAGAGAAACTAGAAAAAAAATTTCAATTTTTTTGGAAACCTGCCAAAAAA
-TGAAGTTTCAGTGAAACATTTTTTTTATCTTTTTTCGAAAATTTAATACA
-TTTTTTTGCAATTTTTTAATATCAATCCGTTCTCACATTTTTTGGTAAAA
-ATATGAGGAAAATGAATACATTTTGGATTTTTTCAGAAAATCTGTTTACC
-ATTAATCTGCTTCTCCCCAGTATAAACTTTAGGCTCATTCTCGTGCACTT
-CTTCTTCCAAATTAACATCATCACCAACTGTCCCAATAACTTCTTCCTCG
-ACAATTTCCTCAACAATTGCTCCATCAGGAGCCATATGCAAATGCATTTC
-TCCATTATCCATTTCTTCTCCAGCCATTATTTCGACTCCAAACGTGTGAT
-TCACTATTTGCAAGAGACGATGTTCGCTTTTTTCGAAGAGCATTTTGAAG
-AGCAAATCGAATGTCTCGTTGTCGGTTGCTGAGCCAAATGAGTTCTTGGC
-AATACGGAAGAGAGCCTCGTTTCGACTTGTTCCACGCGCCATTCCAGATT
-GTGATAGAGGCTGGAAATATTACTATTTCAGATTTTTAGATTAAATGTGG
-AGCTGGGAAATTCGAGTTTTCGACGAAAAAATAGCCTTTCAAAAGATTAT
-TTTCAGATATGTTTAAAAAAATTCCGTTGAAAACGACGAAATTAGATAAA
-AATTGGATTTTCAGCACATACACGGGCGTTTGATTACGTGGCCGTGAAAA
-CGGAGAAACTCGGCCACGTAGAAACAAAACCGAAAATTGCAGAAAATCCA
-GGAATTTTTTTTAATGACTCCGAAATTTCCCCGATTCCGAATAATATATA
-TGAATGAATATATACTTCTGAAAAATTTCAAAACCTTTGCTCACCAAGCC
-ACTACTCTGCTGCCCAAAATTTTTAGGCTCCTGATATTTCGCCTTTCTAT
-ACGGCAGCTGAATCTGTTGCTGGGATGATGATGGTTGCTGAATCTCTTCG
-GTATGTGAAACCTGAAGCTCTCGCTCGTCGAGCATCTCCTCAAGATGCAC
-ATTTTTCTTTCTGGATCCTCCTTCTGAAGCTTCTGCTGAAGCTCCAGCCG
-TGTCAGTCGTCCAATCATCCACAAAATCACCCGCCGCCGCCGAAACAATC
-ATCTCATTCTTCAACTCGTACGGATCATGATCATCTTCAGCATCCCGAAT
-ACCATCAGTCGCCGCCATAATCTCACGACGTCGTACATAATAGAGCATCT
-TCGTGTTCACCTGAATCCCATACTTCTCCAAAATCACTTTAGCCACCTCG
-GCAGGTGTCATTCTCGCGAGCAGCCGGAGCACATCCTCCCGAATGTGTGG
-TGGAAGACGTTGAAGTGAGTATTCTTGAGCGGAGCTCATCGTGCTCACGT
-TAACCGGAGCCGGCATCTCGCCGGGCTCAGTGTACCAGTAAATGATCATT
-GCGTTGCCGATTTGATGGCCATTCTTCAACACGTACGTCACCTTCTTGCG
-AAGACGTGGACAACGTGGAAGGGTGGCTGTGTAGACGTGAAGCTGGAATT
-CGATGAGATCCGAACGATGGGATGATGGTGTCTTCCAGATGCGTAGTTGA
-CCTTCTCGATTCAGTGCGAGCGCTTGTTTCGCAGATTTTGGACGTTTTGT
-GATGCCGTCTGAAAAACAGAAAAAAAATTAAGTTTGGAGCATCTTGAATT
-TGCCTTTTTTACTTTCGGAACGTCCCACTTTTGCTGATTTTTCGTGTTTT
-TTTTTCTGGAATTTTGGAATTACAGGGAATATCTCTCCAAACCAATTACA
-GGGAATATCTCTCCAAACTGGCCGTCGCAGGAAGACTTCACTTTTAAATT
-GTTTTACCTGTAGGCACAAAAGCAAAAGAGGAGAGCCTACATCTTTGTAT
-CTTCGATAAATTCGTTAAAAGTTCTTTTGTCTTTATTCATTTTTCAAATT
-ATTTTCCAATGTTTTAAAAACATTTTTTCTAAACTTTACAGTAATTTGGG
-CTATTTTCACTATTTTTCAACTTTTTGACGCGTTTTTAATTCTTCATTTC
-AACCTCATTTTGTCCAAACTTTCTCAAATTTCCACATAATATGGCCGATT
-TTCATGAAATTTTCATAATTTACACCAATATATTCAATTTTTAACCTCAT
-TTTTTTCACAGAAATTCCCAACATTTTCACATATTTTTCATGACAAATTT
-GAATTATTTCAATGTTTTCCAAACTTACGAGGATTGGTGCTAGTATTCTC
-TGACCACGGAACCAGTCCATCACACGTCAAATTTCTTGCATCAACCTCGA
-GCCCATCAATAAAGAAAACGAATGCGGCTTTGCCAGTTGTGGCTGGCGGA
-AGGGCCGGTACTCGATTGTTGAGGCATCCGAGGGACTCACTGCAAAAAAA
-TCATCGTTTTTTCTAGAAATGGATCGATGTTTGTGTAACTTTATCGATTT
-GCTAGAATATTATCGATTATTCCGAAAAAAAATTTTAAAACAACAACTGT
-ATTTCTATTTTTATTTTTTTAAAGATAGACTTCCAGATCATATTTTTTTT
-GAAAATTTATTTAAAAAATTATCGATTTCTCTAGGAAAAATATCGGCTAT
-TCTCGAAACTTGTGGATTTCCCTAGAGATTTATCGATTTCTGAAAAAATT
-ATCGAATTTTCTAGAAATTTTGCAAATTTTTTCATAAAATTATCGATTTT
-TCTGAAATATATCGACTTTTCGCCCAAAAAGTACGTACATCAATGAAGGC
-TTATTGACAAGAAAGTGTAATTGTCGATTCCTATCATTCCAGAACTCCAT
-ATCCAACAGCTGAAGATACAAACTACCATCATCGGCGGCTTGTGCTGGCA
-CAGCAAACGGGCATTCTTTCTCGCATTCCGACATATCCGACACATCATTA
-TCGATATCATGTATCTGCGTTGGCTGGAAAAATGGATCCTACACGCGTTG
-AGCACACACTTTGTGAGCTCTGCGAGAGCTCAATGAGAACCTACCGGTCG
-TTTTGTGGCTCGTTTCGCGAATCGTTTCAAATATCCGCCATGCATTCGTG
-GTAGCTCGCCTTCCTGATTATAGTCGTACATGATGAGCGCATGGCTCACC
-ACGAGCCGTGATTCGGTTTCCATCATGTAATAGATTTTTTTGCGTAGTCG
-TGGCTCGCGTGGATTGATGGAATACAGGAATACCAAGTGGAATGGGCACG
-TTTTGTAGTCCATGTTGTCTTTGGTCTGTGAGGGGTTTTGGATATTATTA
-CGGGAGGCATAAAATTCTGAGAATGCGTATTGCACAGCATATAGACCAGA
-TCCGTAAATCAACACAAGCCCTACAGTAGTTATTTAATAAATTACTGTAG
-TTTTTGCTGCGAGATATTTTGCGCGTCAAATGTGTTGCGAAATACGAATT
-CTCAGAATTTTTTGTTCCTAAGAACAGCTCGTCAATTTTTTTTTCAGTTT
-TTCAGGGTTATTCAAAAAAAACCTGTTTTTAAAGCTTCTAGGTCTCATAT
-TTAAAAAGTTTTGAGAATTTAATACATTTTTTTTAATAGAAATTTGGCAA
-TTTTTTCATCACCTCATCGTCGATTATTCTTTTTGAAAAATTTTCGATTT
-TTATGGGAATATATTTATTTTCCAAGAAGATTAACTTTTTTTCAAGAAAT
-CTGAAAATTTATCAATTTTTCAAAAGAAATTAATGAATTTTATCAAAAAA
-AGAATAACTTTTCCAGAAAATATTTTTTTTTCTTAAAAATTAAAAAAAAA
-TTGTTAAATCGCTTTTTGTGTCAATTTTTCAAAAAAAAAAAAGAGGCATC
-GAGAATATCCCATTTTTTTCGAAAAAAATTTTTTGGTTATTTTTCTTTTT
-TTAGATAAAATGTATATACTTTTTTAAAAATGTTTTTTCACCAACAAATT
-TTGATATTAAAAAGTTGGAATTTTATGACTAAATTATGGAAAACTTTTTC
-GATTTTTAGAAAATCGGAAAATTTTGAAAGTGGGCGTCGTCAAAAAATTT
-AATTTTTTAAGAAATTATAGAAAATATGCTGATTTTGGTATTTTTGGAGA
-GCGTCGATTTCCATCGGATTTTTTTGGTTGTTTTCCCTGGGATCCATGTA
-ACACCTGAAACTGTGATCCCAGCTCATCACAAATCACTCCGACTTTGCGA
-ACTTTCGTCCGATAGCACGTCGGATTCTGTGCATTTCCATTATGAGACCA
-TGGCGAGAAGTCGTCACGATTGATGTCGTGTGGAAAGATGGCTGTCCCGG
-CGACGAAGAATGCGTACGCACGAGAATTACGAACAATTGGTGGGTGTCCC
-GGCTTCGCGTAGTTCAGCAGACCACGTTCTTCGCTGGAAAAATGATGATT
-ATATCGAAACATTCGAGGAAAATGGATAGAAAAAACGAAAAATTCAATTT
-TTATCAAAGTTCGTTTATGTTGATGAAAACATTATTACGGGAACACAAAA
-TTCTGAGAATGCGTATTGTGCAAAGTATCTCGTAGCGAAAACTACAGTTA
-TTCTTCAAATGACTACTGTACCTATTGTGTCGATTTACGGAAATAATTTA
-TAAATCGATAAAACAGTAGTTATTTTTAGAATTACTGTAGTCCTCGCCAC
-GAGATATTTTGCGCGTCAAATATGATGCACAATACGCATTCTCCAAATTT
-TGTGTTCCGTAATAAAAAATAAAGTTGTTAGATGAATATTCAGGGTCTCA
-ACAAAATTTAATCTGTGTTTTCAGTTTTCATGTTTTTAGAGTGGAAAACG
-TTTTTTTTTCAGAAAACAGTCAGAAATGTAGATTTTGTTCCATATTTCAA
-AAAATCATTTAAAAAATATAGAACATTTTTTTGAAAAATCAAATTTCTCC
-AGAGTGTAGTACGCCATTAAAGGTCTCGTCACGATTTTGTTTGTTTTCAA
-TTTTTAAGTTTTTGAAGTAGAAAATTATTTTTTTTAGGAAAATTTTTCGT
-CGATTTCGTTGAAAATTCGCTAATAAACGGGGATTAAAAAAAACGAAATT
-TTCCAATTTTTCGAAAAAAAAAATCGAAAAATTCCTCCCAAACTTACACA
-ACATTGGTATTAGCAATCCACTCCAACACGGCCTCAAACGTGCTGGCGAC
-CCTCTTATGTCGAACAGTCAAGTAGATATGTCCCGTTTCCAATTGCCGGG
-GATTCTCAAAATAGGGCGCCGGGTTCTCCTGCTGAGTAAGCGGATCATCG
-TCAAACTCCAAATCGTAGCCATTGTTGAGCACATCCTCTTGAGACATATC
-CAACAAATCATCGTCTAGCAGATGTCCCTGAGCGTCTTGAGCAATCGAAA
-CATCTTGCATTAGCTGATGTTGCTGCTGCTGGTGCTGATCGTGTTGAAGC
-TGGATCTGATCTAGGGAATCATTGTGATGTCCGATGACTTCTTCTTCCAC
-AACTTCCAAATCTTCTACATCTATAAATTGTTCTTCATCATTCGGTGCAG
-CAGATGATGTAGATGGATCTTGTGATGTATCAATCTTCTTCTGATCGTCG
-ATCCATTTCGATCCTCCAACACCTCGTCCAGGTGTTCCAGGTGGTTTAAC
-ATACGGACACGGAACCGGACCATCTCTCACATATTCATAGATATAACACA
-CATTTCCGATCGTAATCGTATTGTTGCGTTGAATATAAATGAGACGCTTC
-CGAAGACGGGGACATCTCGCCAGGACGGACATTGTTTCGACGAGACACAA
-CTGTGACGAGTGCCAGCCGCCAGCCGTGTCTTTTGCCATTTGGAACTGGC
-CGTTGTCGTCTTGGACGATGGCTCGGCGAGTTGAGCGGACGCGGGGTGAC
-GGACCTTCCGAGGCAGCTGAAATTAATGAAACTACGGCACTCTGTACATC
-TCCGGAGGCACCACGTTTTCAAGATCTACCAAAACAAGATCTACTATTTG
-GAGATCTACGAAAACAAAATCTACGTTTTCAAGAAATGGTACCATGCTAA
-TTGCAGTTTTCGCAGTTTTCTCGAAGAACAACAAATCAACAATGTTGACC
-GCCCAGTGTGCTCCGATGTCGCGTGTTGTTTAGCGTTTAGAAAAATCTTT
-TTTGAAAGAAAAACTTCAGGAGAACGATAAACAACGCACGATGAGTAATA
-TGGAAGAATTTTTGTTTCGTTTTTCTTTGAGAAAACTGCGAAAAAGTGCT
-AGATCCTGAAAACGTATATCTTGTTTTGGTAGATCTTATTTTCGTAGATC
-TTGTTTTTGAACAGATCTCGAAAACGTGATGCCTCAATCTTCTGCAGTTG
-CCGAATTTTCACATTTTTAAACCTTAAAACATATTTTTTCTAAAACTTTT
-CCAAAAATCGATTTCTTCGTTTTCACGATTTTTTTCAGAGAAAATATAGA
-AAATCGAAAATTTGTAAATTTTCGATTGAAAAAATGGAAAAATTACAGGA
-AATTATTGAAGATTTAAACTTGTTTCTAAACAATCGAAAATTATCGTTTT
-TTTTCTTTTGGAAATTTTTTTTTGGATTTTTCCCAAAATGGTGGTTTTTG
-AAATCAAAAAGCGTTAAAAACAAATTTCTTTTAAAATTACCGGAAATTAT
-TTTAGAAAATTTCCGAAAAGTCAATAAATTAAAAAATCGAACAAGAGAAA
-GAGTTATTAAATTAAACAAAAACAATTTCACAAAAGTCGATAACTATTGA
-TTTTTCATCAGAATTTCCTAAAAGTCGATATTTTTAAACCTTCTGATAAA
-TTCTTTTTTTGTTAAAAAAAACTTTCGATTGATTAGAAACACGTTTAAAT
-CTTTAATAACTTCCTGTAATTTTTCCTTTTTTTAATCGAAAATTTACAAT
-TTTAATTTATTCTTTTAAAAAAATCAAAAAACGAAGAAATTGTTCGTTTT
-TTCTGGAAAAATTAATTCTTCGGCTCGAAATTTCGATGATTTCTTTTTAG
-AAAAAAATATATGTAAAAAATTATACAATTTCAAATAAAACACTGTTTTT
-TTTCTTTTGATATTGAAAATAGTAGAAATTTTTCAATAAAAATTCCAATT
-GTTCACTCAAAATTTCAAATTTTCGACAAAAAAACTTACGATTAACAGTC
-CACGGTGACAGTCCATCGCCAGTATGATTAATCTGATTTGCAACAAAATT
-CGCCGGCACAAAGTACACAAAAACGCCGGTTGTCGGAATAAGTGGCGGTA
-GGTACGGTGTTCGGCGATTCAAACAATTCGATTGGCTCAGCAGCTCGGGC
-TCATTCACCAAATATCGGAGGAGAAGCTTCTTGTTGTGTGCCCAACCGAG
-TTTTGCAAGTTTTACGCGAAGAAACATTCCACCACGTGGTCCTTCCACTA
-TCTCGTCTTCGAACTGGGAATTTTTTTTTGATGAATTTGAGAAAAATAGT
-TTAAATCTTTATATTTCAGTTTGAAATCGCCGAATTTCAGTTGTGCACCT
-TCGTGTATATTTACGATATGTTTAATCTTTTTCGGATGCTGATTTCCGAT
-CTTTAACGGTTTTCCTTCATTTTCGTCGGTTTTTTTTGGATATGTGTTTT
-TGAGGTCAATTAATGAACCATTTTATTATCAGAAAACTAGCAAAATGTTC
-AATACTCGACAGAAAATCCATATGCTATATGCTTTTCTCGACTGAAAACC
-GGAAATGTTGCTAGTTTTTGATAATAAAATGTTAAATTAACACATTTTCA
-AAAAAAAAACACTTCTACAAAAACCGACGAAAATTAAAGAAAATCGTTGA
-AAAAACGAAAATCAACACCCGATAAAGATTAAGCATTTCGTAAATATACA
-CGAATTTGGTAAATCGACACATGGCATCTCTAGCGCGAAAATTCGAAATT
-CGTAATTTCCAGCTGAAATATTAAATCAGGGAATTTTTCTGAATATTTCA
-CTTAGATATTCGGAATCAGGGAAAAATTTGGAGTTCTTATAAAAAAATTT
-ACTAAGCAAAGTTTTAGCAATTTAGGTTCTAATAGGCTTTACAAATATCA
-AAAAGTCCCGATTTTTCAAGGATCTATATATATTTTTAGAACCACAGATT
-TTTTGCTGTTTTTCAGCATTCTCGGAAGACCATACCGGTGTGGATCCGGG
-ATCATCCAGATCTAACGAGACGTGCGGATCAGTTGGATCGACCATCGCAT
-GTCTTAAATAGTCGTTTCCGTGCGGAAGATTTACGATTGGTGGAATTTCA
-CCGGGACACGTGTAGTCGTAGAGAATGAGCACGTTTCCATAGATTTGGCC
-ATCGCGGGAGAGGTAGAAAATCTGGAAAAAATTTTTTGAATAGATTTTTT
-CGCCTTTTCTGAAGGATTTTTTTTGAAATTTGAAGGAAGACGGGTTTTTG
-CTTGCATAGACTCAAAATAAACCCTTTAGAAAATTTTTACGTTGGCTCAA
-AATATCGAGAATAAAAACCAATTTTTTTCTAAAATTTCGAAAAAATGGGC
-ATAACGGCGGAAAATGTATTTTTATTTGATTATTGTACCTTTTTCAGTTC
-ATTTTGGAGCATTTTTGGCCCATAGGCTTAAAATTAACCTTAAACATTTA
-AAAAACGTGAAATAAGATATCAAAAAGCCATTATGGCCACTATGACCTAA
-AAAAAATATTTAAAAAAAAACAACTTTTTTTTGAATATTCAAATTTTCTG
-AAACTGATAATAAACCTTTTTTCTCAATCTTAACAGTCTCGGCAGCCACG
-CGCTGTACTCGGTGAGATGAAGTTCGGCGATACGTGGATCTCCTTTGACC
-GATTGGAGCCGTCCGTTGAGACGAGCAACCGGATGACGTCGGACATTCGG
-TTTGATGACTGGATCGTTGAAGTGTTGCTCGCCGCCAGTAGAGCTCCATG
-GCTTCAGATCGTCATTCGAGACGTCTTTTATCGACATGATTTTGGAGCCG
-TCCACGTAGAATGCGAAACAGGCTTTGTGTGGAACAAGTGGTGGGAGACG
-GGGTGGTTTGTCGAGAAGCCAACCTCCTTCGCGACTAAAAATGGGGACCG
-TTGATTTTTGTTTTTTTTTTCTGACCGATTTTTCGGACAATAGCTTGAAA
-TTTTGACAATTTTCTTTATTTTTAGAAGATATTTTTTTCTTATATTTTTT
-TTTCTCTAAAAACTATAGTAAAAAATAGTTCAATTTTTTGTGGTTCTGGC
-GAAAAATGTATTTTTTCGAAAAAAATTTTTTTTTTTCAAAACAAGATATT
-TAGATTTATCACTGAAAATTGCTAATTTCCAGTGCGAAAAATGACTTTTT
-CTGGCTATTTCTGCCTGATTTTTGATATAAATTCCAATTTTCACAATAAA
-ATTGCTGAAATTTTCTCCTTTTTTCACTGTCTCCGTACATCATTGCAATT
-TCGGTCTCGTTGGTGAGCAGCTCAATTATTCGTTCCTTTCTGAGAAGGTA
-GGCCAGGCAGCCTGATATCACTGTGGCGTAGCAATCACCGTTTTCCGTCA
-TTTCAACTTCATCTTCGAACTGCAAAAATTATAGAATTGAAAAAAAAAAA
-CGATAAAATCCGACTTTCTCGATGATTTTTATGATTTTTAACTGAAAAAT
-TGATTTTTCGGCATTTTCTGAAGGATTTTGATTAAAATTTGAAGGTTTTT
-TTTTCTCCCGTAGGCTCAAAAAACGCCCTTTTTATGGCGGCTCAAAGGCA
-AATTTTAAGTAATAATCGAATAAAAAATCATAAATTTACGACCCCTACGG
-CACGGGAAATTGGAGACTTCAGCTAAAACTAACCGTTGATTTTGAATATT
-TTGAGCCAAATTTGGCCAAATAGGCATTAAATGCACTCCAGATGACTAAA
-AACACGTGAAAAAAGCTATTAAAATTAGGTAAATAAGACAAAAACAGAAA
-AAAAAGAACTTGAAGCGAAACTGGAGCCCATTTTTGGAGACAATTCTCAT
-TACAAAATTGGTTTTTTGGGCACATTTTTTAGTCTTTCTAGTTATTTCGA
-ACATTTTCCGAAGAATTCCCATAAAACTTTGAAGCTTTTCCATGTAAGCC
-CCTACCAATTTCACGTGGTACTGCCTTTCAGCAAGAGCTTTACTGATAAC
-TCGTTCTCCTTGAACTCGGAACATTTTCGACGGTGTCGCCGCCGCCGGAT
-TTATAATTTTCATCGCCTTCTTCTCCTTATCCCCATCGTCGATAGACCCA
-TCGGTATCCATTGGCTTGCGTGTTCGGACACGTCGCTGTTTGCTGGGCCT
-GGAAAATTTCGATTTTAAAGATTTTTTAAATAAAAAATCCCCCACAAATT
-CATTTCCAAATCCGGTGGTTGCCCATCCATAAACCCGTCGTCCTCCTCCT
-CATCATCACCGAACGGGTCCATTTGTATGCGATCCTCGTCTCGATATCGG
-GAAAGGTTCAGAATTGGCGGCTCATCCTCTACGATGACCTCCGTCTCTGC
-GTGGAGCATCGAGTCGTCGCCGGCGAAGATGGGCTCTCCGAGCTCTCCGG
-CGGTGAGCTCCTCCAAATGTGGCGCTGGCTTTCTCTTTTTCGCGTTTCGA
-ACCGTACTTTCCTCCGTCCTGGAGCGTTTTGGAGCTGCGATCGAGCTTGT
-TGATGCAGAGGCGAGCGCTTCTTCCTTTGGGATGCCCAACTCGTAGTCTT
-CATTGTTGTAGAGCACGGATTTCCGAGCATTTCGACGTGGACGAGATTTT
-GTGGCTGGATCCTGGGGCTCTGCGGCAGGCTCTGGATTTTGCTGGGGCTC
-TTCGGCCGGCTCTGGATTTTGCTGGGGCTCTGTTGGATTTTGCACAAGCT
-CTTGATCAACTTCTTCCTGATTTTCTGCCAATTCTCCCGAATTTTCAGGA
-TTCTCGGACATTTTTCTGCAATTTAATAATTGAAAATAAGAATAATTAAC
-GGGGTGGAAAATTAAAAATTAAACAAGCATTAAAATAAATTTGAAAAAGT
-CCTGATTTGTAGTCCGCAACGCACGCACGCAAGCATACACCAGAACAACT
-AAGAGAGACGGGAGGAGAGATGGAGAATTTGAAAGAGACGGCGAGGCGAC
-GAGAGAGCCGGAGGATTGAGGAAGGACAAACACACAGATGTGGGGTCTTG
-CAGCGCTTTCTCTGCGTCTCTTTTTTCGACATTTTTCAATGGGAAATTTT
-TTTTTGGAGTTTTTCTTTTTTTTTATCGGAAAACTTCAAAAAATTCAAAT
-GGAAACGCTGTACGGACAATGCATAGAATAACACGCAAAAATGCACATTT
-TTAGGCCTTAGGTTACTGTAGTGGTCTCGGCGCGAAAATGCGGATTTTCA
-TTTTGAATTCAAAATAAAAAAACTGGACGTGATTTGGTACAAGCGTTTAG
-TGAAAATGTTTCACAAAATAGGAGATCAATTAGATATATTTATTTATTCA
-TGGAAAATGACTATTTGGAAAAAAATTGCGAAATAAATAAAACTCGATTA
-AAAACAATGTGCATATGTCTTCGTTGCTTTCTTGGCGAGGGTTTCTCGGT
-ATCGAGTTCTACAAGAGACACACATTACGAATAACCAAAATAGTTTAGGT
-AATATACACATTGGGTGGGGGTGGGCCAGAATAATATTGAATAAGGGTGA
-AGAAAAAATATTCAAAATACGTCGCTGAAGTTGGCATACAATCTTGAGTC
-GGATAAATGGTAAGAAAGCAGCACCACTCAACTCAGATCACAATCTTCTG
-AAGAAAAAGGGACGAATGTATAGGTTCGGAGGGGGGGGAGGGGGAAGGGG
-TGGGGATGGAGGCAATTACAAATAAATCTGAAAGAAAGTTACAAATACTA
-CACACCAAAACGGTGAAGACTTGCAAACGCAGTGCTTGCAAGAATTCGAT
-AAAACTCGCGGATGTTAAGAGCGAATCATTTGGATTTCGGGGGCAGTAAA
-TTAAATGGACAAGGCATTTCGAAAAATACACACGTTAGACTGAAAAAAAA
-AAACACGATGTGATTTATGGGATGCAACACTGCTTCTTTGGTGGGTCGGA
-CGCTGGCGAAGGAATGATTGTACCACTGCCACCGCCATATCCTTGTCTGT
-CAGTTCCTACATGCTTGTTGGATACTGATTTGTAGATTTCCGTCAGGATA
-TTAGTGAAAGCTGCTTCAACGTTGGTGCTGTCGAGGGCAGATGTTTCTGA
-AAAAAAAAAATATATAAACGCAATAGATTAGTTTAACTTACCAATAAACG
-ACAATTGATTTCTTTCGGCGTAGATCTTGGCCTCGTCTGTTGGAACTGCA
-CGCAAATGGCGCAAGTCGCTCTTGTTTCCGACCAACATAATCACAATGTT
-CTGATCGGCGTGATCACGAAGCTCCTTCAACCATCGCTCAACATTCTCGT
-ACGTCACATGCTTAGCGATGTCGTAGACTAGGAGAGCTCCGACAGCCCCA
-CGATAGTAAGCGGATGTGATGGCACGGTAACGTTCCTGTCCAGCAGTATC
-CCAAATTTGAGCCTTCACTGTCTTGCCTTCTACCTACAAAAATAATAATT
-TGAATCATAAGTGTATTCTAATGAAGTTCCTCACCGAGATGCTTCTCGTG
-GCAAACTCGACTCCGATTGTTGATTTTGATTCCAAGTTGAACTCATTTCT
-TGTGAAACGAGACAGGAGATTCGACTTTCCGACGCCTGAGTCTCCAATCA
-GAACAACTGAAACAATTTTTCGTTTGGGAATTGAAAAATGAAAAACAAAA
-TTACCCTTGAACAAGTAGTCGTATTCATCGTCACGAGAGCCCATCTTTAC
-TGCTGAGCTGTAAAATGATAAAGCTTGTTTGAAAGTTGTGTATATATTGG
-GACGATTGTAAAAAAGAAAAAGGGCATTGGTCACATGATTCATCAGCCGG
-GCGCAATGTTTTGTTGTAAAATCGATATTAAAAGAACGAGACACTGTTTT
-ATCGGCGGAGAATATTTTTATGTTCTGTTCCCGACACAAACGCGGAGTCA
-GGAACCGGTTGTCTATCTCGACGGGGATTGAAAAAATATAAGTGAACTTG
-ATTTAAGAATGATTCAAAGTATATGGAGTTGGGAGTTTTATATTGAATTT
-TATCAATATATGAGGGTGGTTAGTCAGAAGAAAAATGTGAAAATGTATAT
-AGAAGTGTGTTATGAAAGAGTATTTGAGGCTTATCATACCCGAAAAAGGG
-AAGGTGAGCGGCCGAACTTTGTTTGTCGACACGATTTCGAAATAGTTGAA
-CAGGATATTTTTAACAAGGGAAAGCTTTCTCTGGGTGTTCTTTTTTGATA
-ATTTCAGCTAAAAATTGAAAAAAATAATTAGTTTTATGGCTGTGAACATC
-CAGAATAAGCTTTTCCGAACGCGAAATGCGTGTGAAACCCATAAAATCGA
-ACGTAAAACAGGTCAGGCGCACCGGCGCAGCCACGTCGGTCTGAGGGTAC
-GCGACGCTAGCCGCAGCGCAAGCCTCCTCGGGTCTCGGCACGACAACTAC
-CGTACCCCTTTCGCAGCGGCGCAACGGAATCTCAATTTTACATTTTTTTC
-TTTTTGGCCTAACGAATTTTTCCGTTTTTTCAGAGCATTTTTCATTGATT
-TTCTTAAATTTTCATCAGAATAAATTTTAGAACTAATTTCCCGTAATTCT
-GATACGCGTTTTTTATAGTTTTCGTGAAGAAAATGCTGAACATTCGAAAA
-ATACTGAAATAATTTAGTTTTGAAAACTTGCTCCTCTGTTTCAATATCTT
-ATAATTTTCTTTTCTGATTAATATTTTGATTTTCCAGGTAATCAATCGCC
-TATAATGGCTCCAACGTAAGTTTTCTTTATAAATTTATATTAGATTGAAA
-TTTACTTTTAGGCCTGACTTTCAAATACTTCAATTTTGATATTAATTCTT
-GGTTTTTCAGAAAGAAAGTGCCACAGGTTCCAGAAACTGTGCTCAAGCGC
-AGAAAGCAGAGAGCCGATGCCCGCACCAAGGCTGCTCAACACAAGGTGAC
-CGTCGCCGCTGTAAGTTTATTTAACTGTCAGAAAACAGAAAATGCTCTTC
-AAAAGCACTGGTTTTAGGATCCACTATTATCCAAGCCAGCCGTCAAAACT
-GAGCTATAAGAATTATCTTGTTTTTGGGTGAGGTGTATTCAATTCAGAAT
-GCGTCTCAATAACACGATGACAATTCGAAATTTTAAAGTTTAAATTTTCT
-TTTAGGTGTTTGAAAATTAATTTGAACTAATCCTGCATTAAAAATAAAAT
-TTTTTACAGAAGAACAAGGAGAAGAAGACCCAATACTTCAAGCGTGCTGA
-GAAATACGTCCAGGAGTACAGAAACGCCCAAAAGGAAGGACTCAGACTCA
-AGCGCGAGGCTGAGGCCAAGGGAGACTTCTACGTTCCAGCTGAGCACAAG
-GTCGCCTTCGTCGTCAGAATTCGCGGTATCAACCAGCTTCATCCAAAGCC
-AAGAAAGGTGAAATTGTGTTAATGAGTTTTTTAATAACCATTCTTTGTTT
-TCAGGCTCTCCAGATCCTCCGTCTTCGTCAGATCAACAACGGAGTGTTCG
-TCAAGCTGAACAAGGCTACTCTTCCACTTCTCCGTATCATCGAGCCATAC
-GTAGCTTGGGGTTATCCAAACAACAAGACCATCCACGATCTCCTCTACAA
-GCGCGGATACGCCAAGGTTGACGGAAACCGTGTCCCAATCACCGACAACA
-CCATCGTCGAGCAGAGCCTCGGTAATTTGAAAACTTATGCTTTTTAATTC
-TTATTTAATTGTTTTCAGGAAAGTTCAACATCATCTGTCTTGAGGATTTG
-GCCCACGAGATCGCCACCGTCGGACCACACTTCAAGGAGGCCACCAACTT
-CTTGTGGCCCTTCAAGCTCAACAACCCAACTGGAGGATGGACCAAGAAGA
-CCAACCACTTCGTTGAAGGAGGAGACTTCGGAAACAGAGAAGATCAAATC
-AACAACCTTCTCCGAAAAATGGTCTAACTTGTTTGTTGTTCATACCTTCC
-TTCCGGATAAATCGTTATTGTTTGACGTTGTTTAATTATGTGCATAAATA
-ATCATGAAACGTGATCGTCTTGGCTCGACTCATCTCGCATTTCATGAAGC
-GTCTCATCATTCAGATGAATCGTAAAACCGCTTTGCTGACTACTCTCCCG
-AGAACAGTCACTGTTCCCTACTATGCTCCATCCTGTTTATTTCTAGAAAC
-TTTTCTTCGGAGCAAGCTAATTCCCTATGAAGTGAGAGCATTTAGGTTAA
-TAAACATAGTCCAGATTTAAATCCAGACAACGCAATGTTCTCTCTACAAT
-GTACTCCCTCGTGAGCACCTATACCCATTGATTGATGTCGATGGGTATTT
-CTTCAAAAATTTGATGGAAGGACTTGATTATCTGCTCGCCAAATATGGAA
-AAGTTGGCTTAAAACTAGAATTTTAGAAAAAGCTTAAATATTCTTCCAGT
-CTCTGGACTCGGGCCTGACTCCAAAAGAGCGAGCACAGGCTCTCGCATTG
-AGCGCTTTGCTCGACGAGCTTACTTGGATGCTCGCCTACTCGCGAGGCCA
-AGATTTCACGTGGCTCCGCGATGATCGTAAGATTATCGAAGACTTCGGGC
-TTGTTCAGCTCTATTTTTGGAGGAATTGGATTGTACCGCAGATGCAGAAA
-CGGGTAGATTATTGATATTTTATGGAAAAATCGATAAAATATTGATTTTT
-TACTGAAAAAATTGATCAAAAATCGATTTTTTTTTCCTCGGAAAATCTGT
-AAATTAGTAGTTTTTTGTTGAAACAATCGATAAAATTCTGGTTTTTCAGA
-AGCAAAATCGATATATTAGGCCAAAATCACCAAAAATTATCAATTTTCCT
-ATAAAATTTACCATTTTTGGCTAGATTATCGATTTTTAAGGCAAGAAAGT
-CGATATTTCACAATTTTTTATTGATTTTTTTGGCTTTCCAGCGCGCAAAC
-TGTGCCAAGATCTAAATTTTCCGAAATTTTCATTTCAGACACGCCGCCGA
-GTGCGAGGCTACGGAATATCCGGAAAATCGGCGAGAAAGGAGGTCGCCTG
-CCGAACTGAAGCAATGTTGGAGGCATTGGCCTCACTTTTGGCCTCGAATA
-AATACTTTTTCGATGTCAATGAACCGTCTTGGGTAGGTGGCAGCCAAAAA
-ACTCGGCCAAAACTCGGCCTTTCAGCTCGACTGCAAGGCGTTCGCCGTGC
-TGGCTCAATTCAAATATACACCACTGCAGAACGAGGCCCGCGTAAAACAA
-TTCATGAAGGACCGAACTCCAAATTTGGTGGGTGGCCTTGAGTTTTCTAG
-GCCACGAGATTTGAAAAATTCTATAATTAGGGCATGTGGTTTCAGATGAC
-ATTTGTGACGCGCATGAAAGAGGAATTCTGGTCGGATTGGTGCACCACGT
-CGGAGGATTGAATTTCGTGGAAAATGCTAATTTGTTTAATGTAATATGAT
-TTTGCTTCGTAGATTTTAACCTATGCTCGAATAAAATTTATATTCTAATT
-TTAAAAAAATTTCAAAACAAAAAATTTCTTACGTGACAATTAAAGGGTAT
-TACAATATGGGCATAAAAAATGTATTCCCTAATTTTCGAACTTGTTCAGT
-CTTGGTTGCCCAGGTAATTTTTTTGCAGTTCTTGTTTGGGACTCGGAGCG
-ATTTTGCGCAGATGCATCATATTTGACGCGCAGAGTTTTAATTGAGGTTT
-GAGCTTGAATTGAGTTTGAATTGAATTTTAATTAAATAAAGCGAATTCTA
-GAATAAAATGATGTGTTTATTGCGAAATAGATCGTGAACCTACAAAACAA
-CAGACTTTACGCGCAAATTTCCGAAATTTTCCAGAAAAACCAGTCAGAAT
-TTCAAATGATACTTGTTCCTCTTCTATTTCTTCTCCCAATTTTGTTGTGC
-GGTGGGAAAAAGAAAAAAGCGAACAAAAATGTGAAAGAGGCGTCGAAAGT
-GAACTCACTGGTTCCACCGTCGACCTCTACGGACCCGCTGAAGACTAAAG
-AGAAGGAGATGAAAAAAGAAGAAGCTCCGGGAGCACCAGACGCCCCGACT
-AAGCCGAAAAGTCCTCCGAAACCAGTGGTCCAGGACACGAAACTTGCTGA
-AGTGCTGCCTGAAAGTGAGAAGGAAGACGAAATGAAGAATGGTATTCAGT
-TGCCGAATCCGCCGAAAAATTTGGTGGGTCTCACGGCGATTTGAGTGTTT
-TATCGATTTTCTATGAAATAATTGATTTTTTCTAAAATTATTGAGATCTA
-GATTTGCGAGTTTTCTGAATTTTCTAATATATCGATTTTTCAGAAATGCG
-AAAGTGAAATTGCTCCAAAGGAAAAGCCGGCGGCTGACGAAAAGAAGGAC
-GAGAAAAAAGATGAAAGCAAGAAGGATAAGAAGGAAGAGAAAAAGGAGGA
-GAAAAAAAAGGAAAATGACGAAATTATGTGAAAAATTCGATAAATTGGTT
-CTTGAAGATTATTGATTTTTCATTGTCGATTTTTCAGAATTCCTCGAAAT
-TTATTTGCGCGTCATATATGGTGCATTGAGTCCATAGAGACTTCAAAGTT
-CACGCGCAAATGCAGACATTTTTGCACGCGCTGCGGTGAAATTCCTCTTG
-GCGAATTCAAATATTTTTTCCCGCCTTTTTTGAAAATTTTCGAGGCGTTG
-GTCGAGCTGAATACACGTGAAGTTTAGACTGAATGTCAAATCACAAATAC
-ATCACATTTGACGCGCAAAAAATTCGTTTTGAAAATTTGCGCGTCAAATA
-GGGTGCATTGAGTACGCGGAGCCAATACATCACACTTGCTTTTCGTGGAA
-AATGGAGCGAAATTTGATTTTTTGATTTAAATATTACGGGAACAGAAAAT
-TCTGAGAATGCGTATTGTGCAACATAATTGACGCGCAAAATATCTCGTAG
-CGAAAACTACAGTAATTCTTTAAATGACTACAGTAGCGCTTGTGTCGATT
-TACGGGCTTGATTTTTTTTCCATTTTCTTCAGTTTTTCTGACATTATTGT
-GTTTTATTTTAATATTTTTACCGATTAATAAATGATTTCCGTAAATCGAC
-ACAAACGCTACAGTAGTCATTTAAAGAATTACTGTAGTTTTCGCTGCGAG
-ATATTTTGCGCGTCAAATATGTTGTGCAATACGCATTCTCAGAATTTTGT
-GGCCACGTAATATTTGCGTTAAATAAAAATCAAAAAATTAAAAAAAAAAA
-AACATTTCAGAAATTTTCAAAAATTTTTTGAAAAATTGACGCACAAAGTC
-TCCTGTTTCCCTTTTCCCCAAAGTTTTAAACTAATAAAACTTTTTTAATT
-GTCGAATCCGACCAGTTATTTAATACGAGACAAAACGGAAACAAAGATTC
-CAATTTCCGATTACGGTCAGCTCAACACTTTCGCTCAAGGAATTCTCTAC
-GCTTAGATTTTGATCTTAATGGAAAACTGGTAGAACTTGGTATAAAACTA
-TCCAAAAAACTGGCAGAAAGAGTAGTCTTTCCGAAGAAATGAAGTCCCTA
-ATCGAGGAAGATGACTTGGAAGTCGGCAGATTCCGCCGCAACGCGTTTTC
-CGCCGTCGCCCTCTCCACCTCCTGTATTCTGGCGATTGTGGTGTTAACAC
-CAATTGCCTATCAGGCAATTCAGAGAATTCACTCAAATTTGCTTAACGAT
-GCCCATTTTTGTCAGGTAATTTTTTTAAAAAATTTAGAAATTTTGATTTG
-GAAATATTCAAATAAAAAAAAAGTTTTTCGAAATTTATTTTCAATCGTTT
-GAGATTTTGACATACATTCCAAAAATTCCTACTCTTCGCAATTTTTTAGT
-CAACTCAAACTCAAAACCTTAAAAAAAAACCGCAAACCTGTCATGGCGCA
-TCGATGTTATCCCTACGCTAAATGTTCTGTTTTCGAAGGTTACTTTTTTC
-CAATTTTTATCACCAAGGAAAATGTATACACAAAAATATATAGAATTTGA
-CGTGCAAATTGGCAAAAAACTAAACTTGCGCGTAAAATCACTGCATTGCC
-TCTGCGGACTCAACACACCAGATTTGAAATTTCAGGAACTTATCGATTTT
-TGTAAAATTTTGCAGCATGGCGCATCGATTAAATATTAAAAAAAAATTGA
-AAATTATCGATTTTTTTGAACACGAACAATTTGTGGAAAATATGAAATAA
-AAAAAAACATGGTGCATCGAAAAACTTACAGGCTCGAAACCGTGACCTCT
-GGACAGAAACAATGAAGATGGCTCGGAGCCGCGGCCGGGACGAGGAGCTC
-GTGGCCCGAACCAAGCGAGCGGTTAAAGGCACATGGCTCTTCGGACAGTA
-TATTCCAGACCGATCAAGCAGAAATCGACGACAGCAATACGCCGAGGCCG
-CTGGCGGAGGCGGTGGAGCACCACATGCCGAGTGTAGACGGGGTCCACCG
-GGACCACCGGGTGATGGTAGGTTTTTAGATTTGCGAGGCAATTGTGGTGT
-ATTGGTTTAATTTTACAGACGGGGTCGACGGAACGGACGGAAAAGACGGT
-GCACCTGGAACCGATGGAAAAGACGGTCAGGTACCACAAGGACCAGCCGA
-CGGAGGTTATCAAGAGGGACCATCTGATGCAGTTGAAGCATGCACACGTG
-AATGCCCACCAGGACCGCCTGGACCAACTGGAGCGCCCGGAGACAAAGGA
-TCTCGAGGCTACCCTGGAGAATCTGGAGAGCCAGGCACCCCGGGAAGCGC
-CGGACCGAAAGGAAATGCTGGACCGTAAGTGGAACTAAAGAATCGATAGT
-TTTCGGTAAAAAATCAATCATTTTAGGAAAAAAATCGATAATTTTCATTT
-TCATTTTTCTCCATTAAATTATGTTAACTTTCTAGAGCTGGACCACCAGG
-ACCACCCGGATATCCAGGACGTCCTGGAGAAACCGGAGATCACGGAAAGA
-CGATCGCCGGAGAGGCGCCACCTGGACCACCAGGACGACAAGGAGAAATG
-GGTCCACAAGGACCACCGGGACCACCAGGGCCACGTGGAAAGGACGGAGC
-CGGTGGAGAGAAGGGTGCTCCGGGAGATCAAGGTAATCCGGGACCATATG
-GAAAACCTGGGCAACCGGGAGCTCCAGGACCCGATGGCTCTGCTGGTGAG
-AAGGGAGGATGCGATCATTGCCCACCGCCAAGAACTCCACCTGGTTATTA
-AAGATTCTTCGATTGATATTTTATTTTATTTTCATGACGTTATTCATTTT
-GTCATTCGGTTTTCTTTTGTTGCAATATGATAATAAATCAGATTCTCTTG
-CCAGTAGTTCCAAGTGCCCCAACATATTTTTGAGTCCTTTATGTAGATCC
-CTCTCCTCGAAAGCTGGATGATTTAATAAATCTTTCAGAAAAATCGAAAA
-TTTTAGAAAAAAAAACATCAAAATTTTTGACAAACTGCATAATCAGTCAA
-TATTCTAAAAAAAAATACGATCGCACAAAAATAAACAACGACGCAACGAC
-ACTCCGCGGTTACTAAGCTCCGCCCACGATTTCATTTGCACTGCGTTGAG
-TCGGCCGTATTGTTATTCAAACATGAATGAATATACTGGTGAAGTTTAAA
-AAATTGGGTGTTTAGTTTTGAAGAAAATAATTTTTTTGGAATTTTGAATA
-AAGCACAATTGGCAGCTGAAACTGGACTTTCAGACAAATTTTGAACGGTG
-GTTGTTGATGCTTTGAGTTTATATTGTTATTCAAACATGTATGAACTTGT
-AAAGTGCTTGTAAAACTTGTAAGTTGCTTGTTCGCTCATTCTGAAATAAA
-ATTTAAATTAAATAAAAGTTCACGTGATACAAAAAAGCCAACTTATTGAT
-TGAAATCGATAAAATCGATAAGAAATTCATTCATTTAATAGTTTTTAACA
-AACAACAAATGCGATCAAAAAGTTCGGAAGGTGATTTACAACCAGAGGAC
-ACCCAATCCAGAGAAGATAAAGAGACGACTGCTACGTATAGTGAGGATAC
-AAAGCCAGGTAAATACAGTAGTCCTACCTTAAAATTACAGTAACCCAGCT
-GACTAAATATCATAATAAAACTTGCAAAAAAATGATGTAAAATCTTAGTT
-TTTAGTCTTTTGAACTGGTAGAAACTGTGTTAGCGCCACTTTTTGACTCT
-AAATAGAAAAATTTCCCATTTTAAAAGAGTTGTATTATGATACACTGCGT
-GGCGTGTAAAATACCAAAAAATAAGCGCGGTTTTTTTTTTCGTAAAATCA
-CAGGGAAAAATCCGAAATCGGAACTCCAATCAGCCGCCAACATCCCACGG
-GCCCAATAACTTCTGGGTTTTGTTTCAACAATCTCATTTACTCCAATTCC
-AGAAACCCAAAAGGAGAGAAACGCGGCACTGGACAATCTTGCCAAGACCC
-CAATCCAGTTAGTCGTCCAACCAACTCCTCTCACACCAGCCATCACGCCA
-TGCGAAGCACCACCACCACCACCTCCACCAAAACCCTCTAGCGATAATAA
-CAACTCGAAACGATTGAAAGTGAAAGATCAACTGATTGAAGTGCCCAGCG
-ATGAAGTAGGCCGAGTTGAGAATAATATAGACAATTTCCCGTTCTATCAT
-GGATTCATGGGAAGGAACGAGTGTGAGGCGATGTTGAGCAATCATGGAGA
-CTTTTTGATTCGAATGACGGAAATTGGGAAGAGGGTCGCCTATGTGATTA
-GTATCAAGTGGAAGTATCAAAATATTCATGTTCTAGTGAAACGGACCAAG
-ACGGTGAGAGTTGTTTGGTATTATCATTTAGTTTCGTTTCAAATCAGACC
-GAGATACATACAAATATTGAAGTTCAAATTTAGAACATGTTGCATCGCAA
-TGTGTTCATTGTGCTCCCTGAAGCATTATGCGGACATCACGAATTACATA
-AATTATTTTAACCAATGGTGGGCGGCAAATTGACAAATTGCCGATTTGCC
-GAATTTGCCAAAAATTTTCGGAAAATTGTATTTTTGCACATTTTTTTTAA
-ATTTCAAAATTTCAAATTTTATCGGCAAAATTGTATGCATCCTATGAATA
-TTTCTACATCTGTTTCGAAAAGTAAGCAAATTATATGAAAATATCTAAAG
-AAAAGGGGAAAAAATTCGAAAAGGCACAGTTTTCAGTGTTTCCGTCTTAC
-AAAAAAAACCTCGAAAAACTTTCGGCAAATAAGCAAACCGGCAAATTGCC
-GGAAATTATAGTTTCAGGCAAATCGGCAAACCGGCTATTTGCCGAATTTG
-CCGAACGGCAGTAGCCTCTCACCCCTGATTTGAACATGGTGCATTGCATC
-ACCGCTCCTCGACTTGGAAAGTTTATATCGGTAGATATTTGCAGCAGATG
-TAATTTACTGATATTTTCAGAAAAAGCTCTACTGGACCAAAAAGTACGCC
-TTCAAATCCATCTGTGAGCTTATTGCCTATCACAAGCGAAATCACAAGCC
-GATTTATGAGGGCATGACGTTGATCTGTGGCCTGGCACGACATGGATGGC
-AGCTGAACAACGAGCAGGTCACATTGAATAAGAAGTTGGGAGAGGGACAG
-TTTGGAGAAGTGCACAAAGGATCGCTGAAGACATCTGTATTTGCAGCCCC
-GGTCACTGTTGCCGTGAAGACCTTGCACCAGAACCATCTATCCGCCAATG
-AGAAGATCTTGTTCCTAAGAGAGGCCAATGTGATGCTCACCCTGTCTCAT
-GTAAGCTACCTGTTTCAAGTTGAACTAAACTAAAATTAATTTCAGCCAAA
-TGTGATAAAATTCTACGGAGTATGCACCATGAAGGAGCCCATCATGATTG
-TCATGGAGTTTTGCGACGGGAAATCCCTGGAGGACGCTCTACTCTCCAAG
-GAAGAAAAAGTGTCAGCTGAGGACAAGATTCTCTACCTTTTCCACGCCGC
-CTGCGGTATTGATTATTTGCACGGAAAGCAGGTTATTCACAGGGATATTG
-CGGCGAGAAATTGTTTGTTGAATTCCAAAAAGATCGTGAGTTTGTTTTTC
-AAAAATTTCTGAATCTATGTGAATGAAAAAATAAATTTCAGCTGAAAATC
-TCCGACTTTGGATTGTCGGTCAAAGGAGTTGCTATAAAGGAGCGAAAGGG
-AGGATGTCTGCCGGTCAAGTACATGGCTCCGGAGACATTGAAGAAGGGGT
-TGTACAGTACTGCCTCTGATATTTATAGGTGAGCCTACGAGCATACATAG
-ACATTGGTAGTGGCGTCAGCGGTGGCCTAGAAACCTTATCCGCGTCTGAA
-GGTTAATCAACCTCACACAAGTCTCTATGATTTCCAGCTACGGCGCTCTA
-ATGTACGAAGTCTACACGGACGGAAAGACGCCATTCGAAACGTGCGGGCT
-ACGTGGAAATGAGCTCCGAAAAGCGATCATCGGGAAGAGAATCAGCTTGG
-CCGTTGAGGTAGAGCTACCAGTGTTCATTGCCAACATTTTCGAGCAAAGC
-AGGCAGTACGAGACCGAAGATCGCATAAGCTCCAAGCAAATTATTCAGAT
-TTTTAAGGAGGTTTGTGAAGCATTTTATCGGTTTTTTGTTCAAAAAATTA
-GTAATTTTCCAGGAAGTCGGATTCCATGAAATTGAGACAAGTGGGATACT
-GCATAAGCTTGTCAATTCTCTTCCGAGAATTCACAATAAGGAAAGAAAAC
-CCGCGGCGGTGGCAGTGTAATAAATATCTGAAAATCCCCCCACCCCTGAA
-AATATTTGACTGTATTTTTTAAATCAAACACACAACGCACACAAACAGAC
-AGACAGAAAGCCTAAGTACACAGAGAAAATGTTTGAGGTGAGGTGCGAAA
-GGGAGGAGGCTAGAACACCTACTTTACGCCAACAAGTTATGACTTTTTGG
-AATTCAAAATGTCGTTTTTTGCTAGTTCACTGCTTACCTACAAACCTTCC
-TACCTTGTCTGCCTACCTTCCTTCCTATTCTCTTATTGCAAGATCTTTTG
-AATTTTTCTGAAACGTCTGTCTACTTCTGCGTCATTTGCAAACAGGCTGT
-TCTCAGTTTTAGGGGGTGGCAGCACCCACAAAAAAACATTGGAACAGAAA
-TCAGTCGGAGTGATCTACTAGATTAGATAAACATTAGATATCAGTTTGGA
-AAAGTTAAACATTATTAACTCACAATGGATTTTCTTATTGTGTTTCTTGA
-TATAAAGCGTTGAGCGGTATTGATACCATTACAATGCACTAAGCTAAAGG
-CTGTCAGAGCCGAATGAAAAACATGATACATCGAGCATGCGGCAATTGGC
-GTTCGGAAAATCGGCAAATTAAGATTTGCCGGAAATGTTTTGAGGGATTT
-TTTATAAGATTTAAATGTGCCTTTTTGAAATTGTGTCCCGTTTTCTTTAG
-ATATTTTTATAGGATTCGCTCACTTTTCAAAATAGACGTAGGAGAATTCA
-TAGGATGCATACACTTTTGCCGATTGAAATTTAAATTCTGAAATTTCCAA
-TAAAAGTGCATCACCACAATTTGCCGACTTTTGGCAATTGCCGTTTCTCC
-GGCAAATTCGACAAACCGGCAATTTGCCGATTTGTCGATTTGCCAGAAAT
-TTTCAATTCCGGCAATTTTTCGATTTGCCAATTTGCCGAGAATTTCAATT
-CCGTCAATTTGCCATATTGCCGGAAAAAATCGTTTGCCGCCCATCCCTGG
-TTCGAACTCCTAGAATGGTAGAATATGAGTATACTAAAAATAATTTGAAC
-AGAACTGGAACTGGAAGAAAAATTTTTTACCGACGTCTTCTGAGAAAATT
-TCGTGAAAATTGAGTTTTTATCACTTTCTGACTCACAATAAAAAAAATTT
-CCAAAATTTTTTGAATAGTTCTCGATCGTTTCCAAACTGGTCTTCCGACA
-TTCAGGTGCGTGATTGGTAAATATGAGGGAACTGCCATAATCAAATGAAA
-AACACGGTGTATCGTCTGAGAAAACCTTAAACTGTTCCGTTTTAGTAATT
-GGACAAGGATCTGCTGAATCTCGCTACTATAGCAACCGACATCTTGCGGG
-TCCAAAAAAGATTGATCTTGAAAATTTGATCCAAGTTTATTTAATCGCCG
-CCACACACACACTCACAAAAAAATCAATCAAATCACCCATATCAGTTGCG
-CGATTTCTAGTTTCTAGGCGCGAAAATCAAAAGGAGGAGAAGAAGCATTT
-CCGCATTACTCGTGTGTGTGCCGTTTCCGTTTATTTGTCCCTCAGGCTCC
-CCTCTCTGTTTTTTTTGTTTGCGAAAACTGTCTCTCTCTCTCTCTCTCCA
-TCACTTTTCTGTTGCGGAATAGAGGGAGAGAGAGAGAATTTCGGAGGGAA
-AAATACCTGAAATGTGATCCTCTCTCTGTATGTCATTGACTGTTGCGCGA
-GAGCCTTTTCCCGCGCGCGCGAGCCTCCCACCTACCCGTCGACGAGCCTA
-TTTTCTTGTCGGCGGTGCCATTCGGCAATACACGTCCCTCTCTCTTCTTG
-CTCTAGAAACATTCGGATTTTGATTTTTTGATTTTTCATGGTGGATCTGT
-AGGCTTTTTTAGGCCATCTTGGACTTTGTGGTGGCCTAATATATGGTGTA
-TTTTCCAATTTATCATATTTGCTTTAGTATTGTCCGACTTGTAGGCAAAT
-TGCACCATTTTAAGCCAAGTAATAAAGCTTTGAAGTTTGGCTGCCTAGGT
-TTTTCTAGCCACCAAACAATTTTTTTGTTTTCACAGCACACTTTTTTAAA
-GACTGTCATAAGTTTTCAAAATTCTTTGAAAAATTTTACACCGAATTTTG
-AGATCTTTAAGTTTGGTGGCCTAAATTTTTCAAAATTTTCTATGCCACCA
-GACTGAAACGTCCTAACTCTATTTGAATTATCTTTGAAACTATGAAAACT
-ACAAGTTCGACTAAATATGGCTTATCCAATTAAACTCGATTGGTGGCCTA
-GAAAACCAATTTCGATTTATTTCATTTTCTAGGCCACCAATAATCTTGTT
-CGAAAATTACTTTTATTTAATTACAGTGGAGTTTGGAATACTTACTGCCA
-TGGGCTGTAAGATGTTGCTCGCCTAACTTTTTCTATGCCAGCAACCAAAA
-AGTGGTGTTGGTGGCCGACAAACCCAAACTTGGACAATTGCATTTTCTAG
-GCCATCATTTTTTTTAAACTAATCGTTGTTGGTTTAGTCTACTGTAAAAA
-ATCAAATCGATAAGAACATTGGGAGCCAAGCTTTGGAGTTGGTGGCCTAG
-ATTTTTCTAGGTCACTAACTTGAAATGTCTGTAACTCTAAAAAATAATTT
-AGAGATATATAACAGAATTAGTAGGCTAATTTTAGGATGAGAAACTATTT
-AAACAATTGGTGGACTAGAAACTGAATTTTGAAATTTCTAGGCCACCAAT
-TCCAAATAAGCCTATTTCACTCCTGAATTGAGATAAAACGCTGAAATTTT
-GGACATATTAGAATACGCTATATTTGAAAAAATGGAATTGGTGACCTAGA
-AAATATTTTTTTGAAATTTCTGCTCCACCAATTTCAATTATAGCATAACT
-CATTTCATAGTTGTAGGACGGTGATTGAAATTTAGGATAGACAGATTTTA
-AACCAAAACAGATTGATGGCCCTTGAAATTTCTAGGCCACCTCTCCAGAA
-AAAAATCTGAAAATTGTTTTTATTTCTAATTCATTTTCTTCGTCCGTTTT
-TCATCTCTCGAGGATCTTATCCCCTTGTCTTACGTCTCCCACCCGCTGCT
-ATTTGGGCGACCTTCATAACTGTGAAAATTCTCACCATTCTCCCTCTCTC
-GTTTTTGCCCCCCCCCCCCGGTCTCCTATCATTGTTCAAGTACACCTGTT
-GTCCCATAACATCTGCCAACCAATTTTTTCCAATTTTGCCACAATTTTTA
-TTCAAAAAAGTGCATTGCAGCGGCAGGCATGCCTCACTCGTACACACACT
-TGAGCATACAGGAAAAGCGAAAAAATCAGTGATTGTTTGGATTCCTGGCT
-CTTTCTAGGAAAAAAACTCTTCCATTTTTGTAGTGCACATCAAAATGATC
-AAGCTGGTTAATTTTCAAGTGACTCCCAAAAAAATAACTGAGAAAGTTGC
-GTTTTAAAGTTTCTAGGCCATTGTGGGATTTCTAGGTAGGTTTTTGAAAA
-TAGAAGACAGTCTTGCACTAAAGTTTTGATTAGGCTGTTAAATGATTTTT
-GTCAGTACGTTTTTTGGAACTTCGATTTTTGCCAAAAATTCCTTTTTTAG
-TTTTTGTTTCAGTTTTTTGCAAATTTTTATTTCTTCCATATCTTACAACA
-TTTAGAAGGTCTCAAAGTCTCTGATAGCCAAGAATTGACTCTAATGACGT
-TATGAGCTCCGAGACTATTTTAACCTTTTTCCCTTTTAAGCATAAAATAT
-ATAAATATCAAAAATTTAATACAAAAACTTCTCGTTTCGAAACGTTTCGA
-AATCCTCCAGTTAAAAAAAAATTAGATTACGGCATCGGAAAAATTGCGAA
-ACTTTTGAATCTGAGGGATTTTCAATAGAGGGTCCCGCCAGGAATTTGAG
-TTTTTAACAGTACCCTTTCCATCGTCCTTCCCGAAGCCCATTACATCATC
-ATTAATTTTGCGACCTTTCTAAAAGCGGTCATGGGGGGGGGGACATGTGT
-TTGTTGCATATACAGGGACCCCCCGCCACAACCACCGCAACTAGAGATAA
-AGATCTGCTGCACACAGACAGCTGGCACATGGATGGACAGAATGTCTCCT
-TAATTTTACCGCCTATTTCATAATAATAAAAGTAGAACGGGGGGCAGAAA
-AGAGAATGATTGCGAAACCACCTGCTTGGCTGTCAGCGCATAAACTTTTC
-GGAAATTTTGGGTCCCACCACGCTTTTTTCGGTAACAAATTTTGAGATTT
-CTCGATACACCATGATGTCTTTTGGTGGAATTTTGGGTTATCATGGCTAA
-TACAAAGCTTTAACGTGCCTTGAACTTTCGCAATTTGAACTTTTGGCCTT
-TACTTAAAAATTTCGATGGGGCTCTATAAGCCATGTGGTTTCGAACTTTT
-CCTGAAAATTTAGATTTTTGTTCATGCACCATGTTGTTTTTTTTTTGGAA
-TAATTGAGGAATTCCTTACTTTTAAAGTAAAAAGTTTGGTGAGATCCATG
-TGTTTTCATATTATTCAGTTGGTAAATTATACAGATTATTGACTGAAGGT
-TAATTTTTTGTTGGGAAAATAAAAATCGCCAAAATCAATAAAATCGTATT
-TAGAAGTAGGGTTTCCATATAGGCGGTAAAAGGCTTGTCTGCCTGACAAT
-AAGACGACCGCCGCTCGCCTCAATCCGCGGCGGAGGCAGGCAGGGTTCAG
-GTAGGCACTGAAACCGCGCCTGCTTACCATGATGTTCCGTTCTTGTCGAT
-GCACCATGATAATTTTGGGTTACATTTTGAGCCTTTTCGAAAAATTAATG
-GTGGAAAATTTCAAGCTGAATTTTAATATTTATTTTTTTAACCGTATTGT
-GGGACATGCAAATGTCTTTCATTTTGTGTCCCTTCACTCTAACGTCTTCA
-GAATTTTCGAACTTCTCGATGCACCATAATGCTGTTTGGCGATAACTTTA
-GAGTAAGAATGGTAGCGATTTTTGCGATGCACCATGACGTTTTTATCGAT
-TTTCAGAAAAAAAATCACTCCGAGACCCAAATAGTTTCATTCTCGACGCA
-CTATAACGTTTTCGAAGTAAATTTCAAAATTGCTTCTCGGAAAAGTTTTT
-TGAGACCTACATGCACCTTTAATCTTCTTTGGAAACTTTGGAATTTCCGC
-CGAATACTCTCATTTCAGTTGTTCTCGATGCACCATGATGGTATTTTTTT
-CAAATTACTTTTTTTTGATTTTTCCATGAGAGGACCAATATCTGTCTTTA
-TAACGGCGCATTCTGTAACCAAATTTTGAAATTCCACGACATTCTGCTCT
-CATCGATTCAACATGATAATTTTAAAATGAAATTTAGCGATTTTTCGGGA
-AAAAAACAGTTTCGAGATTTTCTAGTTATTGGACACTCTGCACCTTGCTT
-ATTTGGAAATTACATTTTAAACCGACAACCCTTCAAAAACTGCTTTTCGT
-CGATGCACTATGAGTGCATAATTTTGTGTAAATCGTGGTGGGCCTCTAAA
-AAAACCGAAAAAAAAAACGTATAAAACGCAAACAAATTGTTTTTGTTGTA
-ATGTTGACACCAACAGATTCGGCGTGGAATATACGGAAGATCGGATTTCC
-AAAAAAACAACCGCTCTCCTGTTTTCGACGTTCCGCCGCTTTTTATGGGA
-GAAGTAGTATGTACCTTTAAGGGTACTGTAGCCCCTTGAATATTGGCCTA
-AAAGTGAAACTAGTGTTGCCAAAAAAAAACGAGATGACCAGTTTCAATAT
-GTCATTTACATCTACACATTTCTAAAATCTCATTTTAAATTCCATTGTTT
-TCTCGTTTCTTCTGTCCCAAAGTACCGTATCCTCATCCTTCTACCACCTT
-AATTTGCATTTCTTCTTCCTTATTCACTCTTCTTCCCCTGGACGAAAAAT
-GTTGCACGACAACAACAAAAGAGACCCGCCCCCCACCATCGGTTTCTCTG
-AACCTCTAACTGTCCCCGCCCCCTTTTGGGAGCCCACTGTCTTTTCTTTT
-TTTCTTTGGTCGCTGATTATGACGGATCGTTTTTGTCGTTTTTGTATTAC
-AGGAATACAAATTTCCCAAAACGCGTATTGCACAACATATTTGACGTGCA
-AAATATCTAGTAGCGAAAACTATAGTAACTCTTTAAATGACTTTTGTAGC
-ACTGATGCCGATTTAATTAAATTATTTATTAACAGATAAAATATTAAAAG
-AAAACACGACAATTCAAAAAAATTCATTTCGTAAATCGAGCCCGTAAATC
-GACACAAGCGCTACAGTAGTCATTTAAAGAATTACTGTTTTTTCGCTACG
-AGATATTTTGTGCGTCAAATATGTTGCGCAATACGCATTCTTATAATTTT
-GTGTACCCGTAGTATATTTTTGTCTCTCTGATTTCCATTGCAATTTTTTA
-ATTCCATATTTTTTTGGTGACAAATTTCTCCGCTTATCAATTTTTTTTTC
-AACCACATAATTATTAACCCCAAAACATCGCAGATTTTCAGGTAAAATGC
-CAGTCGTGAGCGTTAGACCTTTTTCTATGAGAAATGGTGAGCAATTTTTT
-TGAAGTTTTTTTTTGAAATTTTTAATTTTTCCAGAAGGCTTCTCAAACGG
-GCATAACACGTGGAACGACGCCGAATTTTGGAAACCGTGAGTTTTCGGCA
-AATAAGCTAACAGTCTAAGAAACACGAAAAAAAATCCAATTTTCTTTTCA
-AAATTCGTGATTTTCGGATGATTTTTGAACTTTTTGATTAATGTTCCCAC
-TGAAAATCCTCCAAATCTCTAAAAATCCGCTTCTAAAAAAGCCTCAAATG
-GCCTTGCGAGAATAGACGGAATGTTCAAGGATGACTGGTATAAAATCGGC
-AAACGTGTTGCCATTCAAACAGAATATCTCGAAATTTCGCCTTCCTTTTT
-TTTAAGTGGGTCGGATATTTAACATACAGAAGAGAATAGGGAGAGAAAAG
-AGGGAAAAGAGGGGAAAAGTCTTCTTGGAAACAACCTCGAACCGCAATTA
-AGTTTTTGCCTCACCCTTCAATTTTCGTGAGAAAGTTAAAAATCCAAATT
-TTTTTCTCCTTTTTTAAAAAAAGATTTCCTCCTCAAAAATTCAAAGGATC
-GAATTTTTTGTTACACGCCTGCCTCCTTTTTATTACCCTTGTTCTTGATC
-GCAACCTCTTTTCTAGATTACTTGAAAAAATGCGCTATTTTTTTTCCTTT
-TTCAACAGAGTCAATTTCAAAGGTGCTGTGGAAAAAGTTTCGGTTTTTTT
-TTGCAAAAATAATCGAAATTTGTTCGTTTATACTGCTTAAAAAATGACCA
-AAATTTCAAGTAATTCATTCGAAAAATCGATTTTTTTGAAATATACAAAA
-ATTTTCAATTTTTCATATCTGAAAACACAATTTTTTCGATTTTTCATTTT
-TCTTGGAAAAAACACAAAAAAAAACTGTATTTAATTTCCCACTTAATACT
-ACGATATCCAAGCCCCGCCTCCGCGTATTGTACGTGAACACGGCGGCCCA
-AAATTACACACTATCTCACACACGTTAAATGAGTGATACCGTACTCTCTC
-TGTTTTTTCTTTCATTTTTTCGGCGCCGAAAATTTTCAATTTTTGGTGGT
-TCTTTTGGCGGGATTTTTCGGATTTTTGTCGCGTTCACACACACACACCA
-GTTGGTGTTGCCTGTCGTCACCCACCCGCCCCACTCTTTGTCCGTGTACT
-GCTTTGCCATTTGTGCGCGCGTACCGCTGCCCGTCTGTCTTTCTCATCAT
-ATGCGCCTCGTTTTGTCGCTTTTTCTCCATTTGCCCTTCCTACATGGGTA
-CCTGCGGTTTTCATCGAAAATATCCTTAAAAATTCCGAAAAACCTCTATT
-TTTCGATTTTTGAATCGATTTTCGCCCAAACATAACCATTTTTCAGAATG
-AAGGAAGAACAAATCGCCTATAAATTGCCAGGGGCTTGGTATTACGAGGA
-GGACACTGCCTCGTGCTCTCCAGTCAGCGATCCGGAGGATATTGCGCAGT
-TTCTCAACTACAGAACGTCGATAGGCGTGCAAAATGTCACAGAGTCCGTG
-GAAGTTCCGACGTCGGAGCATGTCGCCGAGATTGTTGGTCGTCAAGGTAA
-AAATTGCCTTTTTAGTCAAATCTACAGTTTCCACAAATTTTCAGGCTGCA
-AAATTAAGGCACTGCGCGCCAAGACCAACACCTACATCAAGACACCGGTT
-CGCGGAGAAGATCCAATTTTCGTGGTCACCGGACGCCTGGAGGACGTGAA
-CGAGGCGAAACGAGAGATCGACTGCGCCGCCGAGCACTTCACACAGATCC
-GTGCGTCGAGAAGACATACACAAGGTAGGTGACCGTAGGCAGCCGGTTCC
-TGAGCGCCTTGTTCAGTTGTTCCAGGAGCCCATGCACCTGGACAGATCAC
-GAGCTATGTCAGAGTTCCGTTAAGAGTTGTCGGACTCGTCGTCGGACCGA
-AAGGAGCGACTATCAAGCGAATTCAACAGGACACCCACACGTACATCATT
-ACGCCGAGCCGAGAAAGGGAGCCCGTTTTTGAGGTAATTTTGTTGGAGAG
-CATAGAGTTTTGGAGCAAAATTCTCAGCAATTTCATGCTTTTTAACAAAA
-ACAGAGAAGTTTCTAGTTTCGGCTTAGAAAATACTGAAAATCGGCTTTTC
-CATGGCATATATCGTGCTGAAAATCTACTTTTGACTGAAAAATTCAAGTT
-TATGACTAAGAAAAGTTAGATAATTAGACCATGCTATTATTTCATAATAT
-TGGTCCAATTTTTGTTGCTTTGCTGAAAATTAACAAAATTTAAAAATCGG
-CGGGGTTTCTGAAATATTTCTGTATAAAAACCGATTTCAACTCCAATTTT
-CCTCGATTTTTACATATAAGTAATCTAGAAAAATTGTAAAATGGGGAGAA
-TTCATAAGAAAATCGGCTGTTTTGTAGCAAAGTTTGTAAATATATCATTC
-TGAAAGTCTCAGCGATAACCGTGATTCTAGAAAACCTCATCAGGATTTGA
-TTTCTGCGACACACTTCTCTCGAGTTTTACATAGAAGTTGTTCATTACAA
-ATTTCTATTTTTAAGGTCCCCATTACCATTGTCAATCTTTCATTCCGATT
-ATTTGTTTTTCCTCGTCACTGCAAGAAGGGGAGCCTAATGCCTAGACAGA
-GACAGAAAACACATGTGTGTTTGTAAGTGTCTGGTGTGATATACCCAATT
-CTTTTCGGCCGTCTCTTGTTTTCTTCCTGACACCGAGTTTCGAGCGATTT
-TCGAGGTCGTACAGTTGTGAATTGGCTGCCACTGCTGTGGCAAACAAACA
-AAAACAATCAAACTTGTGCGGAATTGATATTCTAAAGAGAATAAAGAGCA
-ACCATGGGCGCCGAAACGAGCAGCGGAAGGGCTTGTGACCTCTTGGTGTG
-AATTTTAAACGGTTTCCTTCCATCCGAAATGCTAAAAATTCCTCGGGAGC
-CGTTTAGGGTCTTCACTGAGAGATGATGATTAGAATCTTTTAATTTGGTA
-GAATTCCCCCCGCGGGACCGATTAATGTTGCATGTCGTCTTCTTCTTCTT
-GGCAGCAAAATATCATTGTTGATGAGATATCTCAGTTTGATGCTCAATGA
-CGCCTTGAGAAACATCCAGCACACAGTAGATTAGTCGAATTACCGATGGA
-TGGGGCCGCCCGGGTTTTTGGAGCCAAGAGTCACGCGATGGGGAGTCCAC
-ATACACACGCACCAACTCTTTCATTCCATCTAACAGGGTAGTAGGGTGAA
-GAAAAGGGGGGGGATCGCGATGACAAAGAGACTCAATTAATTAAATGACC
-GGGGCGGGCGCCAAATTGCACATATGCTTGGTTTTATTGCACCGTTGGCT
-CAGGGAGAGCAACATTTTGTGGCAGCACCAGGGGTACTTCAAAATGACGA
-ACAAAGGTCGTTGTTGTTTCTATAGGAAGGCTTCCGAACTTTTGAACAGT
-AATCAGATCATATTAGGGTTATGTAATTGACGGTTTTGACCGTATGTGTC
-TATAGATGCGTGTGTGTGTGTGTGTGTGGCGACATAAATTACCGTATCCG
-CATGGCCTTTTTCCTCCTTCCTCACAATGGTAATTATCATCCCCCACTAC
-TCTGGGTCGCCGGACGAACTGTGAATGTGTTGACAGTGCGGGCCCACTAG
-TACATGACATCTTGCCCCGGTGCGGTGCGCTCATCGTTATTCCTCCCAAT
-TTAGTTGTCCGTTTGACACAAATGCCTCCGGTACCCTGGACGAGACAAGG
-AGGTGATGGATTTGCCAGGCGGGGAAGGAATTACATGATGTTTGGGAGAA
-TATGAGGGAAAGGTACAGAAGCTTCACCTCGGATATTATATGCGTTCTAA
-AAAGACCAATTGTCGTTTTTGTTCGTGGCTCAAATGAATAATTGGTATGG
-AAATATAGAAAAATGTCCGACTAGTTTGGTAATAGAATTGTTTCGTTTTG
-AACATTTCAAAAATACCTCAAATAGTGCACTTGAGATCTTTGTTGAATTT
-TCAAAGGTTTTATTTTCAGATAAATTGAGCATTTTCCATACTTATAAAAT
-CAATTTTTGGTTCAAAAACTTCTAATTTTCTCACCGAAAAAGTTCTCACA
-AGACAGTGACAGAGGTCGCGTGTCGTTTTGATATCCATCTCGATAATCAG
-AGATTGTGATCTATGCCTCAATGACACAGTTCCGCGAAGGAGTCCGAGAA
-AAACGTACAAAATTGGGGAAAAATATTGGAAATAACATTTATTGAAAAAT
-TAAAAAAAAAACATAAACTATTTAAATTCACAAAAATTCGGAAGCATATT
-TCCTATAATGAAAACAAAAAATTCTGAAAATGTGTACTGCACAACATATT
-TGACGCGCATAATCTCTTGTAGCAAAAACTACAGTAATTCATAAAATTGA
-CTACTGTAGCGCTTGTTTTGAGTTACGTGCTCTACGAAATGAATTTAAAT
-AATTTATCGATGGAAAAATAATTTTAAGCAGAAAATGAGAAAATAATATG
-AAGAAACAAAAAGAAATTCGAGTTACGTGCTCTAAGAAATGAATTTAAAA
-AATTTATCGATGGAAAAATATTTTTAAGAAGAAAATGAGAAAATAATATG
-AAGAAACGAAAAGAAATTCATTCGAAAATCGAGCGCGTAAATCCAGAGCT
-ACAGTAATCAGTGAAAGAATTACTGTAGTTTTCGCTACTAGATATTTAGT
-GCGTCAAATATGTTGCGCAATACACATTTCTGGAATTTTGTGTTTCCGTA
-ATAAAATAAGTTTTTTGCGAGAACTACAAAAATATAACTATTTCTATTCC
-AGGTGACCGGCCTCCCACATAACGTCGAGGCTGCCCGCAAGGAGATCGAG
-ACGCACATCTTCCAGCGAACCGGAAATCTTCCAGAAACCGACAATGACTT
-TGCCGGACAGTTGGCCGGTGTCTCGTTGATGGTGCAGAAGCAGCAACAGG
-CTCAACAACAAATGCAGGAGGCTCAGCAACAATCGATGTTCTATCGAAGA
-GCATTCGGCAACAGTAATCCGTTCAATCAGAAGGAGATGTCGTCGTCGCC
-ATTCGGAATGGAGAGCTCGTTGGGATTGGACGCGTTGCTCCGCAGTTTCC
-CATCGATGCGTAGTTCGTTGACTCCGGAATCTCTTTCCGGTACTGGACTG
-TCTTCTCGTCCATCGTTGGGAGGAGGACAATCGGCGAAACAAGATCTGCC
-AACCTACGACTACTGGGGAACCAACAACTCGCTTAATGATATTATGGAGA
-ACGGTAAGCTTTTTTTGCGAATTTTAATAAGAATTTTAAATGACAAATAA
-GGATTTTTCAGAAATTCTCAGCCGCAAGTACGATGCCCTGTCCGCATGGT
-CGTCGATGGGATTGGAGAAACGCGAGGAATCCCCAACCAATGGGTATATA
-TTTTTGAAGGAATTTTATAAATTTTTGAAATAAAACTAAAAATTGCAATT
-TTCCTTCAAAGTTCTAAATTTTTGAAAGAAAATTTGATTTTCCGCTAAAA
-AATTTAAAAAAAAAACAAGTTTTCGTGTTTTCCACTCGGAACCTGACGGC
-TTCTTATCAATTTTTTAAATAAAAAATAACGTTTCTAAAACTCAGAATGT
-TTAAAAAATTTCACATTAAAAAATTATTTTTCCGAAATCTTGAACCTATC
-CGTTTTTGAAAATAAAAAAGAGTAAAATCGTAGTTTTCTCTATAAAAATT
-ATAATTTTCATTTGAAATTCAAAAATTTTTAAATAAAATTGGATTTTGTC
-CGTCAGAAATCTATAAAAAGAAAATTTTTTTTGAACAATAAAAGAAAAAT
-TGTAATTTTCTTTTGAACTTCAAAAAAATATGTTTTTTTTCACATGCAAA
-AAATTGATTTTTTCAAAACCTCGTTTTTGAGAGAAAAAGGTGAAATTCCA
-ATTTTAAGAGGTAAAGTTAAATTTATTTATTTTATGAGAAAAACTTGAAA
-TTTAAAGGAAAATTACTGAAATTTACAATTTATCATACATATTTTTTAAT
-TTCGACATATCTCGAAATATCAAGTCGTAAATTTTTTCCACAAAAGTGTG
-ATATTCTCTTTAAAAACTAGAAAATTTCAATTGTAAATTTATGAAAAATC
-AAATTTTTTGCAGGCTCATGTCCTCCCTCAAAGGAACATCCGCCGGCTTC
-GGTCTTCTCAGCACAATCTGGTCTGGCGGAAACATGAATCTGAGCCCAGG
-ATCGTTGGCTTCAGCATCTGCCTCGCCGACTTCATCGACCTGCGATCACA
-ACGATCATACTCTCGTGCCGATCAATGGATAAGCTGTGGATCCATTCATC
-ATTCCATTACTATCGTGTAGACTCTCATCTAGCAAAAACCCATCCTCAAC
-GAGTTCCAAATTCATCTTTCCATTCTTTAAAAGACTCTTTTTCCCATTTT
-CTACTTTGTTCATCGGTGTACGAGTCCCTCCATTCCCATTTTCTCACCTC
-TTTACTACATTACTAGAACACACAAAAATCACCATCATTCTCACCCCAAA
-ATCCTAGACAAAAAAAACGAAAAAAATCACATATATTTATATATAACTAT
-TATTATTTGTTATTCATATTTTTGAAATATCTATATTATATATATTTATA
-TATGTAACCCATGCAGTCCCCCAATATATATTCCTACAGTAGGTTTTTTT
-GGAAAATCTGTAACTTTCTCTATTATTCTTTTTTGCATTATGATAGGACG
-ACCAACTCATGTTTTAAACAAAAATTATATATATTATAAGGATTTCCTCT
-TTTCTCTCTATCTCTCACCTAGTGTTTAACTCCCAATTTTCCCCCTCTCT
-ACTACGCACAACTAACGGAGAATTGAGAGGCCTTTTATATTTATAGCACC
-TCTTTATAATTAAAAACTCGAGTGATCCCCACCTCACCCATCAAATTTAT
-CGTATTTTGTAAAAGTTCTGATATATTCCACAGATTTTGGTGTATGTGAA
-TGAAGCGATTCGTGTCGTCTCTCCATATTCTGGTATCCATAGCAACTCCC
-CGAGCTTTTGGCTCACTCGCGCACGCCCTATACTATACCTTTACTATTAT
-TAAATGCACTCAACAAATCCTATCCTGCGTCAATTGGCCGATCAATTGTC
-CGAATTGCCACAATATGCACCATTGCGGGTAATAATAGCACAATAGTTGA
-ATATATTAATAATTCAAAAATATTTATTATATTTTGAGGTGTCCCATTGT
-TTCAGACATATATCCGCGCGACGATAAGTGCCACGTTGGGGGAAACGCCA
-AAGAAAACGAGTAGGGATTTGACGTATAGAGGTGAAATTTTTAGAAAATT
-TGAAATTTTCTGAAAAAAAAAGGATTTTTCTTTTATGAAAAATGCTCTTT
-TCGCCAAAAAAATCACAATTTTCGACTTAAAAACTTCAAAATTTTTTCAG
-GAACACACAATTCAAAATACAAAATATCTCGTAGCAAAAACTACAGTAAT
-TCTTTAAATGACTACTGTAGAGCTTGTGTCGATTTACGGGCTCAATTTTA
-AAATTAGATAAAAATGAGAAAATAAAGACACGAAGAAACGAATGAAAGTG
-TAATATCGAAAATATTCGAAAATAAATAAATTTCAAAAATCGAGTCCGTA
-AATCGACACAAGAGCTACAGTAGTCATTTAAAGAATTACTGTAGTTTTCG
-TTACAAGATATTTTGCGCGTCAAATATATTGTGCAATATGCATTTTCAGA
-ATTTTGTGTTTCCGTAATAGGTAAAATGTCAGAAAATCAAGGATTCAGTG
-CAACCCCGCGTTCTACGGGTATTTTGGCCACGGCCACTTTTTGCAAAACT
-GCAAAATAGGCGTTGTTATTTCATTTTCTGAAAAAAACATTGAAAATTAT
-TATCGAGAAAGTACGATCTGACAAATTTCTCATAATTTATTTTTGATCTA
-CCTGTTGAACTTTACTCCGCCCCCAATCTTGTTGCCGTTGTTATTTTGTT
-GTAGCTGTCTTGTCGAAGGACGGGGAGGAGCCTAGTCAACAAGGTAGATA
-AAAAATATATTATGAGAAATTTGTGCGATCGTATTTTTTCGATTATATAT
-ATATATATATCTTCATGTAATTCTCATGAAATCTTGAAAAAAAACGCGAC
-ACATGGTATTACCACGCCCACTTTTTATAATTTGAGCGCGTGCAATTTTT
-TGTCGATAACATAGTTTCTATTTAAACAAAAAACATCGTGCGCCCACATT
-GAAGAAAATCCTATAATTGGGCGTGGCCTTAACTCTGAAAATTTACAGAA
-CGTGTCACCCATAGCATGATTGCCGATTGGCTCGAGCAGAATGGATATCC
-AATATCATCTCAAGTCTTGAAAACAGAAATGTCTGGAAACTACATGGAGA
-GTGCAGAAAAACACGTGGAAAATGGGGAAAAAATCGATAATCTATTGCGA
-AGTCAGCTGAAAATCGATATTCGCGATGGCACCGGTGACGATTTTGAACG
-AAAATCGATAAAATCGATTGGCGCCGGCCGCCCGTTTGCAAAAATTAATA
-TGGTCGATAAACAGCGAGCACCGTTGAAAATTACACCGCTTAGTGATGAG
-GAATTTCGAAAAACGATGCGGAAACGGATGGAAATGGAGAGGGAACGAGT
-GAGTTGCGTTAAATAATTTTTTTTTGAAATATTTAACAAAAGTCGACAAG
-GCGATTTTTTAAAATCGATGTTTCGCGACTTTTATTCAAAAGAAAAATTT
-CAATGCCCTAAATCACTCAAATGATGATTAAAAAAGTATTTGCGCGCGCG
-CGTAAAATTTAGTGCCAGCGTATGACACTATGTGGTGCAAACTTCACTCC
-GGGTCCGACACTTTTTGGATTTTGCGCATCGCTATAAAGATTTCAGATCG
-CGGCGTGAGAGCGGCGTTTGCGGCGCCGACATGAGAGTCCTACTTTCCTA
-CTTTTCTTGGCAAAAAAATCGATCGATTTTTCAGCTCGCACGTCTATCCA
-ACCAGGCAGAAGACGATTCCGACGATTCATCGTCCTCCTCCGACTCTTCC
-ACGTCATCCGCGTCGTCATCTTCCGAGGAGAAGTTGACTTTTTCGGATAT
-CTTGGGGAAACCCACAGCAGCTGGCGCGGAGAAAATGATCGAACTAAGCC
-AAATTCCCAACGCATGGGGTCCGTCAAAATCCGCGTTAGTCACTGATGAC
-GTGGCAAGCACTTCTGACCCACTTCCGGCGATTTTCAACGCACATCTTCC
-GCCGCTCTCCATGGGACGACCACCGCTGACAAAAAGCGCGAAAAGTCGGG
-AAATCGACGCCATTTTCGGCTCGGATAACGTGGATTATGATTTAGAGGAT
-TTCGAGCAGGATGGCGTGGCGAAGAAAAAGTCTATACTGCCTATGGAGAA
-AAAGAAGGAGGAAGCGAAACCAAAGGAACAGGAGCTAGTGGAGCCGTTGG
-TCTTGTCAGAAGGTAACTTTGAACTTGCACCATGCAAAAATTTCGAAAAA
-TTATGCACGTGGTCACTGGCTGTCCTTTTGCATAAGCTTGAAGCAAACGC
-GCCTCATTGAGAATTCACGTTTGCGCCAACTCTCGCTATCCATTGGGCGT
-GAGAGACGCAGATACTACTTTTTTCTCTGAACGTGAAAAACGCAAAGAAT
-AACCGTTTTGCCGTCTGCATCTCTTCTTTCACACGCTATTTTGGCTGTGG
-ACGAGGAATTCTCCTCTTCCAGGATTTTCTAGGCCATTTTCTCATATTTC
-TCAAGTTTTCTCGTCCGCGAGAAAACGTGAATTTTGAGACAGCCAGCGAG
-CACGTGATTATGCAACTCTCCTAAAAATCGATCATTGTTCCTGTAGCTTA
-TAATTTTAAAGGCGCATATTCCGCTTGCGGAGCAAAAGTAAAAAAAAAAC
-ATGCCTCTACATACAAATCGATGAATTTCCTGAAAAATCAATAATAAAAA
-ATTTTCAGGAGAATCAATCGACGAGCTTGAAGATTTCGACACCGGTCTAC
-TATCTTCCGGAGGATCCGATTATTCTTTTTAAAATTTTCTTCTTTTAAAA
-AATTTCTTTTGAAATAAATAAATTCTCACCTAGGAATTTCAACAATTCAA
-CTTGAAAAAAGTTCGCGCAAACTACGAACAAATGTGTGTCGAGCGGGCGG
-AGCCACTGAGAAAGAGGAGCAAAATGTACACAAAACCATATTTGAGTGTA
-ATTTTTCAAAGTTTGGCGCCGATTTTCTGTGAGAGATGAGTTTTCTCAAT
-TTATATTTGGTTATTTTTATTTTAGTTCTTACTGGTAAATTTCTGGGTAA
-GTCCTGATGACTTTGAAAACGAAAAAAACTCTTTCATTGATGCTAGTGCG
-ATTGCTAGGAAAGCAACTTTTCAGTTACCAAGAAAAAGTCCAAGGCCATA
-GGGATTAGCTGCGTGGCATAACAACTCATCCATCCTCGCAGATGCAAATC
-CGCTCTATTGGCAAATAACATGGAAGAGTATAAACATTTTCTCTTCCACA
-CGGAAACCTAGTCCCCTTGGGGAGCGGTAGTGCCCACAACCCCGCATGTT
-TACCAAACTACACAGACAGCGCTATTGTCTGCAAGTGGCAAAAAATGGCC
-GCCGAAAATTTTTACAATGTAAATAATTTTCAAAGTGTTACTATTTGCAC
-CTTTTTGGCAAAAATTCCATAAGTAAGAAATTTGATGGAAGAGATGCGAG
-GTGCGGGGAGTCTGAAAATGGCTGCATGGCCTGTATGTGACCTGTGTATG
-TGGCCTAAAGGTCTAGTTACCCCTAGAAATCAAAGTTCAGTTCAGCAAAG
-AGACTTTATTTTCAGCACTCCAACAAGAGGCAGAAACTCAACGGTACGAC
-GGATGGTACAACAACCTGGCGAACAGTGAATGGGGTTCTGCTGGTAGGTT
-TTTTTGGAAGAGAAATGACGTCACACTGACCTACTCCTTCAGGAAGTCGG
-CTGCATAGAGATGCACGTTCCTACTACTCAGACGGTGTATATTCAGTGAA
-TAACTCACTTCCGTCCGCCCGTGAACTCTCCGATATACTATTTAAAGGAG
-AGTCCGGTATTCCTAATACAAGAGGATGCACCACTTTATTGGCATTTTTC
-AGTTTGTATTTTTTTAATACTTATAGTAGCCAATGTTTGTAGGTCAAGTA
-GTTGCTTATGAAATAATGCAATCAAATGGAGTATCCTGTCCACTAGAGAC
-ACTTAAAATTCAAGTACCCCTATGTGATAATGTATTTGATAACGAATGCG
-AGGGGAAAACTACAATCCCATTTTACCGTGCAAAATACGACAAAGCAACT
-GGAAATGGTCTTAACTCGCCTCGAGAACAAATCAATGAACGGACTTCATG
-GATTGATGGATCATTCATCTATGGTACCACCCAGCCATGGGTGTCCGCAT
-TAAGATCTTTTAAACAAGGACGGTTAGCTGAAGGTGTACCTGGATATCCA
-CCACTTAACAACCCACATATTCCATTGAATAACCCCGCTCCGCCACAAGT
-ACATCGATTGATGAGTCCAGATAGATTATTTAGTGAGTTCATTGTTCTAT
-AGAAAAGTATAAATATTTAAAATTGAAGTGTTGGGAGACTCGCGTGTGAA
-TGAGAATCCTGGTCTTCTTTCATTTGGTCTGATCCTCTTCCGTTGGCATA
-ACTACAATGCAAATCAAATCTATCGAGAACATCCTGACTGGACAGACGAG
-CAAATCTTCCAGGCAGCACGTCGTTTGGTGATTGCATCTATGCAGAAGAT
-TATTGCATATGACTTTGTTCCAGGACTTCTAGGTTACTCAACTATCATTT
-AATAGCTTAAACTCAGTGTTTCTTTTAAGGTGAAGACGTTCGTTTGTCAA
-ACTACACCAAATACATGCCACATGTTCCACCTGGAATCTCGCATGCTTTT
-GGAGCAGCCGCCTTCAGGTTCCCTCACTCAATTGTGCCACCAGCAATGCT
-TCTGAGAAAACGAGGAAATAAATGTGAATTCCGGACGGAAGTTGGTGGAT
-ATCCTGCATTGAGATTGTGCCAGAATTGGTGGAATGCACAGGATATTGTG
-AAGGAGTACAGTGTGGATGAGATTATTCTTGGTTAGTTCATACTTGAGTG
-GTTATATAATAAAGATTGTAATTTCAGGAATGGCAAGCCAGATAGCTGAA
-CGAGATGATAACATAGTAGTCGAAGATCTTCGTGATTACATCTTCGGACC
-AATGCATTTCTCTCGTTTGGATGTTGTTGCTTCATCAATAATGAGAGGAA
-GGGACAATGGAGTACCACCGTATAATGAATTGAGAAGAACATTCGGACTT
-GCACCAAAGACATGGGAGACAATGAATGAAGATTTCTACAAGAAGCATAC
-TGCAAAAGTGGAAAAGTTGAAAGAGTTGTATGGAGGCAATATTTTATATC
-TGGATGCTTATGTTGGAGGGTAAGCGTTTTTTATAAATTAAGTTAGAGAT
-CCTCCAATATACCCTCATAACATATTGTATCAGTTTACTTCATCAATAAT
-TCAGCTTGAACCATTTAGAATGCTGGAAGGAGGTGAAAATGGGCCTGGAG
-AGATGTTCAAAGAAATCATAAAGGATCAGTTCACCCGTATTCGAGATGGA
-GATCGATTCTGGTTTGAGAATAAACTAAATAGATTATTCACTGATGAAGA
-AGTTCAAATGATTCATAGTATTACACTTCGTGATATTATCAAAGCAACAA
-CCGATATCGATGAGACGATGCTTCAGAAGGATGTGAGTTTATTGTAAACA
-CCCGTTGGTGATGATCGAGTAAGTTAATAGCATGTTTCATTCCAGTCATT
-GATTGATATTTTGTCATGAATTGTTATATAACAATATATGTATGTATTAT
-ATTACTCATGTCTCAATATTGCATTTAATTTCCAGGTATTTTTCTTCAAA
-GAAGGTGATCCATGCCCCCAGCCGTTCCAAGTGAATACCATTGGACTTGA
-GCCTTGTGCTCCACTTATTCAATCCACCTACTGGGATGATAACGATACTA
-CTTATATCTACACTCTAATTGGTTTGGCGTGTATTCCTTTAAGTCAGTCT
-TTATTTCAATCTAAATGACTACCGATAGAGACTCAGCGATTATAGAGTTG
-ATCAAGCTAAGAACTTTCAGTTTGCTATAGTATCGGTCATTATATGGTTG
-AACGACGTATCCGAATAGGTCATAACAGTGCTTGTGACAGCTTGACTACT
-GACTTTTCAACAGAAAGTCCCAAAGTTAATGTCTACAAAGTGAATGGTTC
-GTTATTTTTTCATACTTGATTTTTATTTAAATTATACGGTGAATCTGTTA
-CAGCTTTGGAATGGCTTCAAGAAGAGTACATACGGCAAGTTCGGATAGAA
-ATAGAGAATACCACGTTGACAGTGAAGAAGCCACGTGGTGGAATCCTTCG
-AAAAATTCGTTTTGAAACTGGACAGAAGATTGAGGTATTCCACTCTATAC
-CGAATCCATCAGCAATGCACGGACCATTTGTACTTTTGTCTCAAAAGAAT
-AATCATCATTTGGTGATAAGATTGTCGTCTGATAGAGATTTATCTAAATT
-TTTGGATCAAATTAGACAGGCGGCTAGTGGAATCAATGCAGAGGTTATCA
-TAAAGGATGAGGAGAATTCTGTGAGTTTACTTCAAGAAATACGTCGAATC
-TGGAAATTATTTCAGATTCTCTTGTCCCAAGCAATCACAAAAGAACGCCG
-TCAAGACCGACTGGACCTGTTCTTCCGTGAAGCCTACGCAAAAGCATTCA
-ATGATAGTGAACTTCAAGATTCGGAAACTTCATTTGACTCATCGAATGAT
-GATATATTAAATGAGACAATATCTCGTGAGGAATTGGCAAGTGCAATGGG
-AATGAAAGCTAATAATGAGTTTGTGAAGAGAATGTTCGCGATGACTGCAA
-AACATAATGAGGATTCGCTCAGTTTCAATGAGTTTTTGACAGTATTGAGG
-GAGTTTGTTAATGGTGAGTATGATTTACTAAAGTTCTGATCACAAAAACT
-ACACGTGAATGAATGTTCCAGTCCGTTTTACACTAGGTTCGGTAAATATG
-TATAATGTTATAGTGACTGTTACATGTTGAAGCAGTAGTCTTCTTTTCTT
-TGAATGGCAACAAAAAGGCTCCCTCATTATTTAAGCTGTATTTCACTGCG
-AATAACGGCTTAATGTGCTATTTAAACATTCGGGTCTATTAGTCTTTTAG
-TATATTGTCGCGCATACTAAGGCTCGCTTTAATAATCAGTTTGAAACGCG
-AATTTGATGGTGTTAAATACGATTTTAATTTGGGAATTGTTCACAATTAG
-ATGCTATCTTGACTAATAATAATTAAATACAGAAACAAAAAACTTTTAAT
-GGACAAAAATCACTCCGAAACTACCCAAATCGGCATTAGGTTAATGTCTT
-TGATTACTCACCTTCTTTCCTAATTTCCAGCTCCTCAAAAGCAAAAACTG
-CAAACTCTATTCAAAATGTGTGATTTGGAGGGAAAGAACAAGGTACTCCG
-AAAGGATCTCGCAGAACTCGTCAAGTCCCTCAATCAAACCGCCGGAGTTC
-ACATTACCGAAAGTGTGCAGCTTCGATTATTCAATGACGTGCTGCACAAG
-TCTGGTATACATCCCTGTTTAGTATGCCAAGTATTATAAGAAGTTTCAGG
-AGTAAGTGACGATGCGGAGTACTTGACTTGTAATAATTTCGACGCATTGT
-TCTCGGAGATCTCTGACGTCCAGCCGATCGGTCTGCCATTTAATAGGAAG
-AATTATAACTCACATATCAAGGAGTATGTTGTTGAATTCAAATCCGCAAG
-TAAATACAAACTTCAGGCCATCATGCCACACCTCATTCCCAATAGTGGAC
-CACTCTACTCCTGCTCCACTTTCTCTGATTCAGAGAATTTGTGCATTCCT
-GGAAACCTATCGCCAACACGTCTTCATCATCTTCTGCTTTGTCGCCATTA
-ACATTGTCCTTTTTTTCGAACTTTTCTGGCGTAAGTTTACTGTTTAGTTC
-GGTTTTCAAAAGCAATATTCAATTAAGATTCCCGCTACCTAAACGAAGAT
-CGAGACCTCCGTCGGGTGATGGGTGCCGGGATCGCTATCACTCTCTCTTC
-TGCGGGAGCCTTGTCATTTTGCATGGCGTTGATATTGCTCACAGTTTGTA
-GAAATATTATAACACTGCTTCGAGAGACAGTTATTGCGCAGTATATTCCA
-TTTGACTCGGCTATCGCGTTCCATAAGGTAAGAGCCTCTCTCTTGGCCTA
-GCGCTGTAAATAAAACTGCCAAATTTTTAAACTCCATCAATTTCAGATCG
-TCGCATTATTCACCCTATTCTGGTCTACCCTTCACACCATCGGCCATTGT
-GTTAACTTTTATCACGTTGGAACTCAAAGCGACCGTGGACTTGCTTGTCT
-CTTCCAGGAAACATTTTTCGGGTAAGCCCCACCTACTCGGTAGATCTCTC
-AGTAGATTGAACGTTGGCTTGCTTTCAGATCTGACGTCGTGCCTACCCTA
-AGCTATTGGTTCTATGGAACAATTACTGGGTTGACGGGAATTGGATTAGT
-TATTGTTATGAGTATCATTTATGTGTTCGCATTGCCAAAGTTCACTAGAA
-GAGCATATCACGCGTTCCGGCTGACTCATCTTTTGAATATTGGGTTTTAT
-GCACTCACTATTCTTCACGGACTTCCTTCACTTTTTGGGGTAAGGCTTAA
-TTTAATTTGATTCATTTACGCTCTTTTTACGCTCTTGACGTCAATATTTG
-TTACAGTCTCCCAAATTTGGCTACTACGTTGTTGGACCCATTGTCCTTTT
-TGTAATCGATCGTATAATTGGGTTGATGCAATATTACAAGTCGTTGGATA
-TTGCCCATGCAGAAATCCTTCCATCAGATATTATATACATCGAGTACCGT
-CGTCCAAGAGAATTTGAATATAAATCAGGACAATGGATTACTGTATCATC
-ACCATCTATATCATGTACCTTTAATGAATCTCACGCATTCTCGATTGCCT
-CAAGTCCACAGGATGAGAATATGAAGTTGTATATAAAAGCAGTTGGACCA
-TGGACATGGAAGTTGAGAAGTGAATTGATAAGATCATTGAATACAGGGTC
-ACCATTCCCATTAATTCATATGAAAGGACCATATGGTGATGGTAATCAGG
-AATGGATGAATTATGAAGTTGCAATAATGGTTGGAGCAGGAATCGGAGTG
-ACTCCATATGCATCCACGCTTGTTGATCTTGTACAAAAAACATCAAGTGA
-CTCGTTTCATAGAGTTCGATGTCGTAAAGTATATTTCCTATGGGTGTGTT
-CGAGTCACAAGAACTTTGAATGGTTTGTGGATATGCTGAAAAATGTTGAA
-AATCAAGCAAAGCCGGGAATCCTGGAGACACACATATTCGTCACTCAGAT
-GTTCCATAAGTTTGATTTAAGAACTACTATGCTTGTGAGTTTTTTATGCG
-TTTTTGGTTTTTTAGTGGTATAACTCTAAAACTAAATGTTTGGAGAAAAA
-GGCTTAACTAATAAAATGTTGCTCATAACTTTTTCTATGCAATAAAATAT
-GTTTCAAAATTTCATCCGAGATCTCACAAGTCCAAATTTGATTATTTTTC
-TTAAAACGAGTATATTTCAAGACCGAAAAGTTTTCTTGAAAAAATGGTAT
-ATTTTTTGCACATAATCATTTTTTCATAAAGTGCTCTGCAAATCAGAAAT
-TAAAGTTCGAACAGTCTTATAGTTAGTACCGTGACATTTATTGTAACTTA
-AAAAAAAAAATTACGCGACATAGAAACGCTCGATTATCTGAAAAACCAAA
-TTGGATTTTGATTCTAGTTAATTTATTTTCAAAAATAAACATATTTTGTG
-ATAATTGTAAACTAAAAACTATACCTGAATATTTTTATAAATTTTATGTG
-GTTTTTGGTTTCAGGATTAAAACAATGGTAAAATACTACCCTAACGGCTT
-ACCCAAGGCTCAGAAAATTGTAGTTAGTCTCAACAAATTAATACATATCA
-TTTCTTATTTGCAGTACATTTGCGAGAAGCACTTCCGTGCCACCAACTCA
-GGCATATCAATGTTCACTGGCCTACACGCTAAGAATCATTTCGGACGGCC
-CAACTTCAAAGCTTTCTTCCAATTTATTCAGAGTGAACATAAGGAGGTTA
-GTTTCATGGTTTTAACCTCTAAATAAAGCAAATTTGCAGCAATCCGAAAT
-TGGAGTGTTCAGTTGTGGACCTGTAAACTTAAATGAAAGTATAGCTGAAG
-GATGTGCAGATGCCAATCGACAACGAGATGCTCCGTCATTTGCACACCGC
-TTTGAAACTTTCTAATCTTTCTACTGTTACTTACTATGAAAATCATAAAA
-ATTAAGACGCTTCATGAATAAAACATTGAGAAAAAAAACCTGAAATAAAG
-AATTTTCACATTTGTCCAGGTAGTATATATCCCCAATACAAACATTTTGA
-GACGCGAACCTTCCCAAATAATCATCAGACATTGTTCTGTAATTAGGCAA
-AAAACCAGCCCCCTAGCCTCCTCCCTCACCACAAATAAAACCAATTCCCC
-CATTTCCCCCCAGTTCATTCACCAACAATGAGTTTGTTCAAAGTATACAC
-CTCGTTTTCTTTGTTTTTCTCCGTTCTATTCCTTCTCGTCGCTTTTATTG
-TGATCTATGACATTTTCGATGAAATTCGCGAATTTCAAGAAGTAATCGAA
-AAAGATGCCAGGAAGTTTGAGGTAAGGCAATATGTGGTGCAGCAATAATT
-TCCGCATTTTTCGTAGATCATACCGTTATGGGACAGTCTGACACCACGTG
-ATAAAATAGTATACTAAGTATTACAAGCAAGGTTGAAACGAAAATGAAAT
-TTCGTTTTCGAAAACGAAAACGAGAATTTTCGTTTTAAACGCGAAAAACG
-AAAACGAAAACGAAAATATCAGTTTTGTCCAATTTAATTGGTAAAATATA
-GATTTCATGAAATATTAGGTCCATTTTCGAATCAATAATAAACAAACAAT
-AGTTTTATTACAAAAAAAACAATAAAAATTAAATAAAGCAAAAGAACAAT
-AACAATAACACTTGCTGAACAACTATTCCATTAATCTAAACCAATTTTAA
-AGCCTAAAACTTTTTGATTTTGCTGTAAGAACACAGACTTGCTCAACGAC
-TTTGTAGACATCTTTCTTCTCAGCTTTGTAGAAACGCGGCCAGCTCCTGA
-AAAAACTCGTTCCGATTCAGCAGATGAAGCTGGAGTTGTCAGATATCTGT
-TCGCTATTTGAGAAAGCAATGGAAACTTAGATCGATTGAGCGGATTTTGC
-CAAAAAACAGCGGGGTCTGATTTTCTATTGTTATCGGTATCGTAGAAAAC
-TTCAACTTCTGCACTAGCACAGAGCATGGAATCTACAGGCGCTTTGTCTT
-TTCTTTTTCTGATCTTGGAATGCTTTTTCTCGTAAGCTTCAAACAGGTCG
-TCTATTCCCTCAAGAGTTTCATTTTCTGGCTCATCGACTGCTTCTTCCTC
-TTCTTTTGATAATCCTTGAGCTAAGCTCAAAACAAGCTCTTTTCCGTCAC
-AATATTTTCTTTTGTATCGTGGGTCAATGTTTGATGCAACAATCAGTTTG
-AATGTCACCAGTCGGTGCCCGCGCCGTAGGTGCGGTCAACGGCTGGTATG
-TATATAAAATATATTAGATTGAAAATATAACATTGAAAAAAAAAAACAAA
-CATTGAAACACAATAAAAATCAAAATATAGACGCTCTTTATTCTTGAATA
-AAAATAAGAATTACGAATTGTTCACTGGGAGTCAGCTTATTTCTTGTACA
-AAATAATGATTTTGACCAGTGTCAGCTCAAAAAAAATACGTTGACAGAGA
-GAGGTGGCATTTTCGTTTTTTCGAAAATTTTCGAAAACGAAAACGAAAAA
-ATCATTTTCGCCAAAAACCCGAAAATAACGAAAAAACGAAAATTCGAAAA
-CGAAAAAGTGACAAGCCTGATTACAAGGTCGGTATTTCATAATATGAATA
-TTGTAGAGAAAGGTTACTAGCGATGATTCCAAAAAAATTTAGATTCATCA
-GAGATGTACACCCAAATACCCAAGGCATAGGCCCTAATTATTGATTAGTC
-ACAACTTCTTACTTCCAACAAGCTTTTCCTATTTTTCCAGTTCTACTCCA
-CCGCCGCCTCACGTTCAATTGCCGGTCTCGACAAGCGGAGCCTATTCGGA
-GGAGCTGTTTCTTTTTAGTTGTATATACATCTATTCAAAATTAAAAGTCA
-TTGTTGTTGTTACCCATAAAACAGTGAATGAAAAAAAATGAAGTCTAGAC
-AGAAAATGTAAAGCTGGCACAGAATACTCAAAGAAGCATAAAATATGTAT
-AATAATGATGATATAGGGAAGGTTAGAACGTTTCAAAGCGATGTGCAAAT
-GAAGGAGCATCTCGTTGTCGGTTGGCATCTGCACATCCTTCAGCTATACT
-TTCATTCAAGTTTACAGGTCCACAACTGAACACTCCGATTTTGGATTGCT
-GCAAATTTGCTTTATTTAGAGGTTAAAAAGCATTTAACTAACCTCCTTAT
-GTTCACTCTGAATAAATTGGAAGAAAGCTTTGAAGTTGGGCCGTCCGAAA
-TGGTTCTTAGCGTGGAGACCAGTAAACATTGAAATTCCTGAGTTGGTGGC
-ACGGAAGTGCTTCTCGCAAATGTACTGCAAATAAGATGTTAAAGTTTAAA
-AGCTTCAGACCTTAAGATGCCACTGCGTTTAAATGCGTCCGCTTTAATCA
-GTTTATAACCAAACCTGACGTTTGATTTTGAAAATTATCTTCAATAAACT
-CACAAGCATAGTAGTTCTCAAATCAAACTTGTGGAACGTCTGAGTGACAA
-AGATATGTGTCTCCAAAATTCCCGACCTTGCTTGGTCTTCCACGTTCTTG
-AGCACATCCACAAACCATTCATAGTTCTTGTGAGTTGAGCACACCCATAG
-GAAATATACTTTACGGCAACGAACTCTGTGAAATGAGTCACTTGATGTTC
-GTTGTACAAGATCAACAAGTGTCGATGCATATGGAGTCACTCCGATTCCT
-GCTCCAACCATTATTGCAACTTCATAATCCATCCATTCTTGGTTACCATC
-ACCATATGGTCCTTTCATATGGATTAATGGAAATGGCGATCCTGTATTCA
-ATGATCTTATCAATTCGCTTCTCAACTTCCATGTCCATGGTCCAACTGCT
-TTTATATACAACTTCATATTCTCATCCTGTGGACTTGAGGCAATCGAGAA
-TGCGTGAGATTCATTAAAGGTACATGATATTGATGGTGATGATACAGTAA
-CCCATTGTCCTGATTTATATTTAAACTCTCTTGGACGACGGTACTCGATG
-TATATAATATCTGATGGAAGGATTTCTGCGTTTACAATTTCTAATTTTTT
-GTAATATTGCATCAAACCAATTATGCGATCAATTACAAATAACACGATGG
-GACCAACAACGTAGTAGCCAAATTTGGGAGACTGTAACAAATATTGAAGA
-AACTTCTTGAACCGAACAGTGGCAAAAACTCACATCCAACAACTTTGGAA
-GCCCATGAAGAAGAGTAAGTGCGTAAAAGGCAATATTGAGAAGATGTGTG
-AGCCGGAATGCGTGATAAGCTCTCTTAATGAAACATGGTAACGCGAAAAC
-ATAAATGATGCACATGACAGCGACCAATGCAATTCCTGTCAGACCTGTAA
-TTGTGCTGAAGAACCAGTAACTGATTGAAGGAAGGAAGTTGGATCTGAAA
-GTTATTTGATGAAAGTTGTTGACAGTCTTGAGGGAGTTTGTTAATGGTGC
-GTATTCTAGTAAGATTGAATGCAAAAATGAATTCAAGTAAAGTATTACCC
-AAAGAATGCTTCCTGAAAGAGACAAGCAAGACCTTCTTGACTTTGAGTTC
-CAACGTGATAGAAATTGACACAATGTCCAACGGTGTGAAGAGTGGCCCAG
-AAAGCCGCAAAGAGCGCAACGATCTAGAAATGTTCAGTTATTATAGAGTT
-TTTGATACTGGCGGTCATAATAAACAATACTTTGTCCGAAATATTAGTTT
-TCCCATTGTTTATCATAGTTTATTTTTTTATTCAAAAATCTGCCCTCTCT
-ACAGAACACTTATATGTAAAGTAGACTTAAAAACATCTGAGTTTTTTGAG
-CAACAAGAGACCCACACTCGTTCTAAAAAGAAATATATCTGGAGCACAGG
-AAAATCTAAACTTAGGAGACACTTTTTTGTCAACAGAACACTACACACAA
-TGAAGCAACACTGATCTAATGTTACCTTATCCTCACTTCTATTCATCATT
-TATTCTTGCCTTTTATACATCGATATTTGTGTTTTTTGCTTCTTCTCCAA
-TGTAGCCATTATTTTTTTTCTCATCTCTTTTTATTTTTGTTCCATTTTTA
-TTTATGTAACCACTTGTGATGGTTTGTATCTATTAATGTGTGTTTTTTTT
-CTACCTCACGATATCTTACTATCGTAATAAATTTAAAAAAATTAAACACT
-TACAAGTTTAGGATAACATCGCTATATCATAAGTTCACATCTGGCTGAGA
-AACACCATGTTCGATGCAAAGATCTTTCCTTTCATGCTTGTATTCTATTT
-TAAAAAATCTTTTCAAAACATTGGGTATGCACAGTACAGTTATCCTACTT
-GCATTAAACCTCCGCATTACTGTACAGATAATAAAATAACAAGTTTTCCC
-TTATATCTGAACATGCTAAATATTTTTAAAAACAACTGATTTGACAAAAT
-TTACTAATGCAATAATAATATTTAAAAAATGTGTTACACGCTGCCCTAAC
-GTTTCTCACCTTGTGGAACGCAATAGCCGAGTCAAATGGAATATACTGCG
-CAATGACTGTCTCTCGAAGAAGTGTGATTATGTTTCTACAAACTGTCAGC
-AATATCAACGCCATGCAAAATGACAAGGCTCCCGCGGCACCACGAGTAAT
-AGCGATTCCAGCTCCCATTACTCGTCGGAGATCCCTGTTTTCCGCCATGT
-AACGATAATCTGAAAACTAAATTAACATGAGCTCCCAATTATATGAACTT
-ACGCCAAAACCGTTCGAAGAAAAGAACAAGATTGATGGCAACAAAGCAGA
-AGACAATGAAAACGTGTTGGCGATAGGTCTCCAAGAACGCTGAAACTTTG
-TGGATCAAAGTTAGCGGTGCTGAACTGTTGATGGATCGATCCACGACGGC
-AAATGAGTTCAGAGAAGATGTTCTAAAAGTTATAATTGTTATACAGTCAG
-AGTCCTCCTGAATACTCACTCTCCAATACTTGGCTGATAGTTCTTTCGAT
-TGAACGGCAGTCCAACTGGTTGCTTGTCAGGTATATCCGAGAACAGAGCA
-TTGAAATCGTCGTAAGTCAGGTACTTGGCATCATTGCTCACTCCTGCATA
-GTGCAACACTTCATTGAATAATCGAAGCTGCACACTTTCAGTAATGTGAA
-CTCCAGCGGTTTGATTGAGGGACTTGACGAGTTCCGCGAGATCCTTTCGG
-AGTACCTTGTTCTTTCCCTCCAAATCACACATTTTGAATAGAGTTTGCAG
-TTTTTGCTTTTGAGGAGCTGGAAATTAAAGTAGGTGGTGCATAACATTTT
-TTAAAGGCAGTGTTGGTTTTTCTACTGTTCAGTAAAAGAAAATCTACAAT
-TGACTAAATTCTCAATACTTTGATGCCATATTAGTTGTGACCTCCCTGTC
-ACACGAGAACTTTCTACAGTGCTCGCAAATTCTATAGGACTCCCCCGAAT
-AAATTCAGATTCAGAATAAATAACCTTTAGAACTTTTACTATCTCGAAAT
-ATTGCCGACCATAGGACACCGAGTTTCACCTCACGGCTAATGAACCTACA
-AAATGTTAATCGGTCGCTAATCCCGGCCTAGTTTAAATTCAGATCAGAAG
-AAATAAATTTCTTTTCGCAGGAGACTTCGGCTCTCTTGAACCAAAACCTT
-TTATATGTAGTTTTGTACGTACAAAATCAAAGACAGTTCAAAACAACTTT
-ACCGCTACTGCTGTTACACGTAATTAAGCTGCATTAAGAAATTATATTTA
-TTCAATTAGAACTTATGTTAATGGGAAACACGCCGGAACATTCTAGAACG
-TAGTCTTTGTATCACAACAAATTTATGCTGAAATACTCACCATTAACAAA
-CTCTCTCAAGACTGTCAAAAACTCATTGAAACTGAGCGAATCCTCATTAT
-GTTTTGCAGTCATCGCGAACATTCTCTTCACAAACTCATTATTCGCTTTC
-ATTCCCATTGCACTTGCCAGTTCCTCACGAGATATTGTCTCATTTAATAT
-ATCATCATTTGATGAGTCAAATGAAGTTTCCGAATCTTGAAGTTCACTAT
-CATTGAATGCTTTTGCGTAGGCTTCACGGAAGAACAGGTCCAGTCGGTCT
-TGACGGCGTTCTTTTGTGATTGCTTGGGATAAGAGAATCTGAAATAATTT
-CCAGATTCAACGTATTTCTTGAAGTAAACTCACAGAATTCTCCTCATCCT
-TTATGATAACCTCTGCATTGATTCCACTAGCCGCCTGTCTAATTTGATCC
-AAAAATTTAGATAAATCTCTATCAGACGACAATCTTATCACCAAATGATG
-ATTATTCTTTTGAGACAGAAGTACAAATGGTCCGTGCATTGCTGATGGAT
-TCGGCATAGAGTGGAATAACTCAATCTTCTGTCCAGTTTCAAAACGAATT
-TTTCGAAGGATTCCACCGCGTGGCTTCTTTACTGCCAACGTGGTGTTTTC
-TATTTCTATCCTGACCTGTCGTATGTACTCTTCTTGAAGCCATTCCAAAG
-CATTTACACCATAAATATCTCCCTTCGCGCCACAATCATCATTTGCAAAG
-TCAGTAGTTAGGCTGTCACAAGCACTGTTGTGGCCAATAGCAATGCGACG
-ATTAACCAAGTATCGGCCAATTCCATAGCAAACTGAAAGCATTTTGGTTT
-GTATGGAACTAGATGCAATAGCTCACTTAATGGCACACATGCTAATCCAA
-TTAGGGTGAAAACATAAGTGGTGTCATTATCAGTCCAATAAGTTGATTGC
-ATAAATGGAACACATGGTTCAAGTCCAGTTGTGTTCACTTGGAATGGTTG
-CGGGCACGGGTCACCTTCCTTGAAGAAGAATACCTGGAGTGATAAATACA
-TTGCAATGCGGAATTCAAAAGAACATAATAATAAACCATTAAATTTGGAA
-AGTAACTTACATCCTTCTGAAGCATTGTCTCATCGATATCGGTGGTTGCT
-TTGATAATATCTCGAAGTGTAATACTATGAATCATTTGAACTTCTTCATC
-AGTGAATAATCCATTCAATTTATTCTCAAACCAGAATCTATCTCCATCAC
-GAATACGGGTGAATTGATCCTTTATGATTTCTTTGAACAACTCTCCAGGC
-CCATTTTCACCTCCTTCCAGCATTCTAAAATAATAACGTTTGATTAACGT
-AATCCAATATATGTGCACTGAGAAAGAAACAAGTATGCGTAATTTATTCT
-GCCTAGATTTGCAAAAAAAACTACCTTGCATGGGTAACGTTTGAAATACC
-GAAGGAATTGCACTATAAAACTGAGGTGACATACAACTTCCAGAGTTTAT
-GCCTGCTACAAATTTTAGAGTTTGACCAAAAGAAGCCGTTAGAAGTTTAC
-TCGTGAGAACTTTTTAACCCTTGAGAAGATTTAGTGAATATTCAAAATTC
-CACACTTCTTAAACCAATCAGTTATGTTAAAACGAATTGATTTTCATTGT
-TTTTGCTTGAAACTCTTCGAATTCACCGCATTTTAAGTTAAGCATTCCAC
-TTTAAACCCAAAACTAACCCTCCTACATAAGCATCCAAATATAAAATATT
-GCCTCCATACAACTCTTTCAACTTCTCCACCTTTGCAGTATGCTTCTTGT
-AAAAGTCTTCATTCATTGTCTCCCATGTCTTTGGCGCAAGTCCGAATGTT
-CTTCTCAATTCATTATACGGTGGTACTCCATTGTCCCTTCCTCTCATTAT
-TGATGAAGCAACAACATCCAAACGAGAGAAATGCATTGGTCCGAAGATGT
-AATCACGAAGATCTTCAACTACTATGTTATCATCTCGTTCAGCTATCTGG
-CTTGCCATTCCTGAAATTACAACCTTTATTATATAACCACTCAAGCATGA
-ACTAACCAAGAATAATCTCATCCACACTGTACTCCTTTACAATATCCTGC
-GCATTCCACCAATTCTGGCACAATCTCAATGCAGGATATCCACCAACTTC
-CGTCCGGAATTCACATTTATTTCCTCGTTTTCTCAGAAGCATTGCTGGTG
-GCACAATTGAGTGAGGGAACCTGAAGGCGGCTGCTCCAAAAGCATGCGAG
-ATTCCAGGTGGAACATGTGGCATGTATTTGGTGTAGTTTGACAAACGAAC
-GTCTTCACCTTAAAAGAAACACTGAGTTTAAGGTATTATAATATAGTTGA
-TTAACCTAACAGCCCTGGAACAAAGTCATATGCAATAATCTTCTGCATAG
-ATGCAATCACCAAACGACGTGCTGCCTGGAAGATTTGTTCGTCTGTCCAG
-TCAGGATGTTCTCGATGGATTTGATTTGCATTGTAGTTATGCCAACGGAA
-GAGGATCAGACCAAATGAGAGAAGACCTGGATTCTCATTCACACGCGAGT
-CTCCCAACACTTCAAGTTTAAATATTTATACTTTTCTATAAAACTATGAA
-CTCACTAAATAATCTATCTGGACTCATCAATCGATGTACTTGTGGCGGAG
-CGGGGTTATTCAATGGAATATGTGGGTTGTTAAGTGGTGGATATCCAGGT
-ACACCTTCAGCCAACCGCCCTTGTTTGAAAGATCTTAATGAGGACACCCA
-TGGCTGGGTGGTACCATAGATGAATGATCCATCAATCCATGAAGTCCGTT
-CATTGATTTGTTCTCGAGGTGAGTTGAGCCCATTTCCAGTTGCTTTATCG
-TATTTGGCACGTGTAAATGGGATTTCTGTCTTTCCCTCACATTCTTTATC
-AAATACATTATCACATAGGGGTACTTGAATTTTAAGTGTCTCTAGTGGAC
-AGGATACTCCATTTGATTGCATTATTTCATAAGCAACTACTTGACCTATA
-ATTATTATTACTAATTTTTGAGGTAGAGGGCAATAAAAACGAACTGAAAA
-ATGCCAATAAAGTCGTGCATCCTCTTGTATTAGGTATACCGGACTCTCCT
-TTGAATAGTATATCGGAGAGTTCACGGGCGGACGGAAGTGAGTTATTCAC
-TGAATATACACCGTCTGAGTAGTAGGAACGTGCATCTCTATGCAGCCGAC
-TTCCTGAAGGAGTAGGTCAATGTAACGTCATTTCTCTTCCGAAAAAACCT
-ACCAGCAGAACCCCATTCACTATTCGCCAGATTGTTGTACCATCCGTCGT
-ATCTTTGAAATTCCTCATTTTGTTGGATTCCTGAAAAGATAAATGTTACG
-AGTTTTTGATTTCCAGGCCACCAAAATCTATATGATGGCCTAGGTTCCTT
-ATTGAAATTTCTAGGTCACACATGCTCCCTTCACTACATTTTCACACCGA
-TTCGTGCATTTTCTCACTGAACGCGCAAATTTCCGGTCAGTAGCGGAGCA
-GAGCAAACATTTGCCCCGCCACCCGAAACAATTATTTTCGTATCATTTTC
-GCACCTATATTTATTCTGTTTGTTTGCCTATTTTTTGTACATTTTATCCT
-TTTTCTTGTATTGGGCGACGATGGCAAGGTCAGTAAAACAGGAAATTGTT
-CCTGATAACTCGGGAATTTCAGGAATTTTTCCAAAATTGGTTGGGAAACC
-ACCACTTTGTTGAAATTCGAAAGATACACATTTTGTTATTTAGGTGTAAA
-CATGAACACTTTCTTAGGTAAACTATGTGATTTTTATGAAAAAGAACACA
-GACACCGGGTGGCACACAGAGCTTATCAGTAAACAGCTATCAGTGATTTT
-GAAATTTTGGAGGGGCAGAAATGTTGCGGACAAGGAAAATTTTTGTTTGG
-AATTTGAAGTTTTGAAATACGCAATTTGAGAATTTTTGAACATTTTTTTG
-TAATTTTTATCCCATTCATTTTTAACCTAACATTTTGAAAATCTAGCACA
-GAAAATAGTACAGACACGTTCAATTGAGCTATTCCAAAAATTATCAATAT
-AGCGCACTTGGTGTCCATCTTCCTTAACTGTTTGCAATTAGTCTCTCTTT
-ACAAGAAATCAGCTACTATTTGAACAGATCTTGAACACATTTTCAAAGAT
-CGGCTCAAGATCAAAAGCCTCTTAAACATTTAAGATAGCAGGTCCGCTCT
-GTTGACAAATTTTCCACCCGGTCCTCCGAAAGGAATTTTTTTGGTCATCC
-AACAACCTAGACCATGACGGCACCGATCATGCAATTTGCCTGCTTATAAA
-AAACGATATTTCTAGGCCACCCATTTTTAAATATTTTTTTGCCTAGTCTT
-AGCTATGTGGAATAAATTCTAGGTCAGGAGGTTTTCTAGGCCACGTAATT
-CCACTCACCTTTCCCTCCAAAAATTGAACTGAACAGTATAGCTATGTACA
-GCACATGTTTTGAGCGCATTGCTCGTGCGCCTTAGAGTTTTAGTTGACCT
-GAAAATATTTGAATATTTAGAAATTGAAATTTTGAAACGCAATGATTAAA
-ACGGTCAAAAAAGATGTTATTTATACATACGCAACATTTCAAAATTGATA
-ACAAATATTTACAGGAACACTTTTTTCCAATAATACGGTGACTAAGGGGG
-AGTTTACTGATAGTAACAAATTGGAACGGTACAGGAAGAAAATTTAAAAC
-CGGCTCTACCCATTTTAGTGCTACCAGCCGACAACCAAAAAAATCAATCA
-GCCGCACACCCTGCTTGGAATGTGACAATCACAGAGTTTTGGAATTTTCC
-TAATTTCTAAAATTTAATTTTCTAAAAACTGGGGATTTTTTCTGTAATTT
-TTTTTTAATTTTAAATTATTTTTTAGGAACATTTTTTTGAAAATAACTTT
-TGTTTGAAAAATTGTTCGCTAAAAGAGTATAAATAAGATCAGGCTTCCGA
-AAATGTTTCAAAAAATATTTTTTCACGATTCTTGCAACAAAAAAAAACAA
-ATACTGAAAAAAAAATTGTAAGAAATTTATTTTGTTGAACTTTTCAAATC
-TACATTTACAACAAAAACAGTTCTTTATAATATTTTAAAATCCAAATAGA
-TTCCCAGTAGATTTTGTTTAAATATTCGGAAAACGACCAAACTTTCATTT
-TTTGAGTTCTTAAATTAAAAAAAAAATTTTAAATTAAAATTTTTGATTTT
-CAGTCTAAAAATTTCAAAAAAGAGCTTTTAGTTCTGTAACTTTTGGAATA
-AAAATTCAAAAAAAAATTGGGGGAGCCAAAAACTAACGCCTGCTTGAAAC
-CTGCCCGCGAGAACTTGCAAATATTCAATTTTCTCATTTTTATTAATTTG
-ATGAGAAAAATTTAGAAATAAAAAAAAATTTGCATAAGGCATCGATTGAG
-GCGAAAGGCAGGCGGAGGTAATTTTAAGGCCAGGCTGGCGTTTTAACTTA
-GGCTTCCATAGACCTAATATTTTCATACTTGTTGAAATTTCAGAGGTTTG
-AAAATTGAACAATTTAGGCCCAAAACCTTTGTTCCTACAGTACTACAAAA
-ATTCTTTGAAAAATTCCGGTAATAATAATTGGAGGAGGAGGAAAAATATA
-AAATGATTCTTCGTCAGACAGAAATAAATTGGTGAAGAGAAAAAAATGAA
-TTGAGAGAAAAAGAGAAAGAAAGACGGAGAGCGTCTTCGAAAGAAGGAAT
-CCTCCTGCGCGGGATCGAAAAAATAAGCAGCAGCCGGGAGTGAGAGAGTA
-CACTGCACTAGAAAAGATGCAGAGAGATTCACAGAAAATCGGGAGAGACC
-CCCCGTATGTCGGTCGAGACTGAACACCTAAGACCTACTTCATATTTCGA
-ACCGGTTCATTTTCATTGGCATTCGTATTATTATTAGTTTTGACAGGGGC
-AGTCGTCGTAGATGCTATTGTTGTCAGTTTGACGTGATGGCCGTGTCATG
-GGAAAAATTCGGCCATCAAAAATCGGGGGGTTCCTGCCACCCTTTGTCTT
-CTATGGTCGGAGAGGCGTTTTCTAGGCTACTTATTTTGGTAGAGTAGCTG
-TTAATTAAAAATTTCATCAATTTGGTAATAATGTGGCTGCAAATCATATT
-TAAATTTTCTATACAGTCAGTGCCACCCAATTAAAAATTTTCTGGCAGTG
-CCACCCAGAAAAAAAAAATATCCTAGGCCACCAATTTTTAAGATCATTAA
-TTTTTTGGCTATCAAATTAAGTAGACCACTAAAATGTTTCGTCATTAAAA
-TTTTCTAGGCCACCAATTTTGCTTGACTACTAACCTTCTTGGCCATCACA
-ATTTCTAGGCCACTAATTTTTTTTCTAGGCCACTAATTTTCTAGGCCACT
-AACAAACTGTTCAGGCCATAAAGTTTTCTAGGTCCCTATTTTTAGGTCTT
-CAATTTTTTCAGGCCACCAAAATTCTATTCCAACATTTCTCCGTCACCAA
-AGTTTCTAAGGCCTTTAATTTTATAGACGACTTCTTAATTGTAAGTCAAA
-TTGTTTCAAAACGATTATTTTCAATACATATCAAAAACCCAAAATTTTTC
-AAAAACTTAGTAAACTAAACTAAATTTCCAATACGTGCTTCATTTTTATA
-TGTAGGCGTTTAGACACCCCAGTGGGCAGCAGTAATTGTTAATTCTTATG
-ATTATCTCATTGGTACACTTTTCTTGTTCAACTTTAATTATTTATTTTTG
-AAAAGGATTATCATTGGCATTGGCAAATAAATAAAATTGTTAGTGACGTG
-GTGATATTGGACATTTTTTGATTTTAGTTTGCTTTTTGAAATTTCAATTT
-TCGGCACTTTGAAATGTTCAAAATGTTCATTTGTATAGCAAATTATTTTA
-TTAAAATTTTTTTCAAATTTATTACATTTTCAGTGAAAATTGCACAATTT
-TTTAAAACTTTCTAAAAACTGCAAAAAAATAATTAGGTTTAAATAATCAA
-ATCAATAATTTTTTAAAGGATTAAAATAAAATTATAGTTATTACAAATTA
-TTTAAAAGATGTATACTTAAAAACTACTATTTATGTTTTGATTTTTACTC
-GAAAATCCAGAAATTTTAAGTTTTCGAGAAAACTTTTTAAATTTGTTTTT
-AAAAGAGGTTTATATAAATATAATGAACCCAAACTTGAAAGTGCGAAAAT
-GTACTTAAAAGAGTCCAAAATAAGCAAATATCATCACGAAAAGCTCCGAA
-CGTTTTTAAGTTTTTCGAAATGTTCAGTTATAGTTTTGGTAAACTGCCAA
-CTTTACGAAAAATTCGGGTTTAATTTTCAATGTTTTTATACAAATATTTA
-AAACAGAGTAATAGTATAAAATTTGTAAAAAAAAATTTTTTGGTCGGTAT
-TTAAAAATGGTGATAGGTGATAGGGCCATTTTTGACAGTAAAAAAAACTT
-TTATAATTGTTTTACATTTTACCAACATAGGAGCTGCCTTAAAAAATATC
-TAAAGGCTTGGGGTTTTGCCCTACAGTCCCAAACTACCAAATATAAATGT
-AAAATTTTTATAAAAATGTTCAAAATTTTTAATGATTAAAAAAATTTGCG
-AAACTTAATCAAAATGCCGAATAATTGTTTCATTCCCGCGATTTTTTAAT
-AATAATTTTTTTGTATAATTTTTGCATTTAGTGGCGTCATTTGTTTACAT
-GTTGTGTTTTTCGGCAATATTAATAGAGGTTTTCAGAGATTTTCTAGTTT
-TTGAAGCACATTTTGCCTTGTTCCCGTAAAGAAAACTTGATAATTGGAAA
-GAAATTTGGCAAAACGGCGAAATTGACCAAATTGACCAAAAAAGTTAACA
-AACTGTATTTAAAAATAAATTATTAAGCAAAGTAAAAACAAAGAAAACCC
-ACATAAATGTCAAAAATGACGTCACTCATTTGAGCTGAAATTCAAAAAAG
-AATTCGGTCCTTCTTTTTTTTTTTCAAAACAAATTTTTCTTAAATCATAA
-AAAACATATTATAATTTTATGACTTTTCTGACAGTTATATTTGGAATAGT
-GGGACATTTACAAGGGAAGTCGAAAAACTGAACTCCGGACTTTGACATGC
-TATAGTTATTTTTCGATAAAAGAGTGAAAATAATGATCCCTCCAAAAAAT
-TTTGCTGCCGCGGACCAGGTTCAGCAAAGTTATGACGTTTTGAAAGTGCC
-GAAAAAAATTCCTTGACCAACCCAAGCAAAAAAAAACTTTCAAATTTTCA
-AAAAAAAAATTCTGAAAGTTGATAAAAACTATTGTAACTTATTCAAAAAT
-GTGAAAAACGTATATCATGCACGTTTTTTCTCCCCACGGACAAAAAACCA
-CATTGCTTGATCAAAATATCTTGAGCAAAATTCTAAAAATTACTTTTTCT
-TGTAGATTCATTTATTGGTTTTCTTCAGAGTTATGAGCTAAAACTTGCAT
-GGCATATGTTTTTCACTGTTTTGAATAATTTACAAATATTTTTTCCTCTT
-TTCAGAATTTTTTTTTTGAAATTTTTGAAATTTTTTAAAAGGGTGTTTCA
-GCCACTTTCAAAACGTCATAACTTTGCTGAAGCTGGCCCGCGGCAGCTAA
-ATTTTTTTGGAGAGATCGTTATTTTCACTCTTTTATTGAAAAATTACTAT
-GACATGTCAAAGTCCGGAGTTCAGTTTTTCGACTTCCCTTGTTAGGGCAA
-AAAATACCCACAGACGGTACTCCGCCTAAAATCAAAAAAGTTCCAGCAAC
-TCGAGATCACTTTTTTACCATCTCAAATCGTTCGGTTTGTTGGGGGGGGG
-GGGGGGGGGGCTTAAAGAAAAACGAAAAAATGAGACACTTGTTAATTTGA
-TGGTAACAAGTGAAATGGAGAGAGAAAGAGAGTGTAAATACAAGAAGGGA
-ACAAACACTTGAAAATCAAAATTGTCGGAAGGAACTAGGGGGAGGATAAA
-ATATTGGAAATTAGGTTTAATAGGATATGTATCTAATCCCGAAGAATATT
-ATTAAAATAATCGGTTCAAAGAATCTGAAAAAATCGATAAATGCGTTGTG
-TTGTCCTACTTCCGTCCTCTACACAACGTCGTCTTCTTCTTCAGGGCGCA
-TTCTTTTGTGTAACAGTGCCCCTTTTCTCTCTTGATGCCACAAAACACTT
-TGGCAGTTACGCAATCGAAAGGCGAGGAAAGCAAAACGGGTATCAGATGA
-TGATTAAGTGAAACTGGAACTGATAAGTGAGATGGATTGAAATACAGATA
-GCCGTAAACTTTTAATAACCTAGAATTTTAGTTATTAAAGGTGTTATGTA
-TGTTTCGAAATTTGAAAAGATTTTCTCAATTTTTGAATGAATTATGTTTG
-AAGTAATTTAAAATGCCGAATGAAGGGTTTCAATTTTTGTTTTTTTAAAA
-AGATTTTTCGTCCGGCCGATTTTTCGCAAAATGTTTTTTAAAATTTGGGT
-TTATGTTCTTCTCTTTTTTCATGCCTAAGCCTAAGCTAGGCTTAGGTTTA
-GGCTTACTAATCCTAATCCGAAGCATAAGCTTAATCCTAAGCCTAAACCT
-CTCCTACTCTTTTAAGCTTAATGAATGCCCTAGCTTCATTTTTTTCATTT
-TTCGCAGGTTTTTTTCTCAAAAACTCAAAAGCGATGCTACGAACACCAAA
-AATTGGTGGTTCAAAATGTGTGTTTCTATTTTTTTCAAAATTTATTTGAC
-TATACAAACCAGCTGACAATTTTCTTCAAAATTCCGTTTTTCTTATCAAA
-AATAGTCAATTTTTCATCTAGAAACTTCAAAAAACCGTTACCGTTTCCCT
-AAGTTTTGCTATCAGTTCCGTAAATCTTGTACCTTATGTCACATGGCATT
-AGAAATATTTCAATTGAACCAATCTTGTTCGCGTGGAGTACAAGTTAAAC
-ATTTATGATATGTGGATGGGTGCAATTGCGCTCTATTGAACAAACTATGT
-ATCAACAGAACGCGTTAACATTATTTGTACAGGTGGGGAAAAACAGGAAA
-AACGACTAGGCAAAACAAAAAGTATATAAGTTTTCTTCTACACGTCTCAT
-AAAGGAAATTCAAATTTTTTAGAAAAAGAGCGGGGGGGCGCGATTGCAAA
-GGTTTAGACGGCGTTAAGATCTTTGTCGACGAGTGGTTCAGCCGCTGAGA
-ATGTGATTGCCGCCGGAATATTGTCCTTCTCGTTGATTGAGTCTTTCGAG
-AAGAGCGCCAGAATGACGGGCAGAATGAAGAGACCGTGGAGGAGACCTGG
-GAGAATTTTAAAATTTTTGAGTTTCTAGGCCACGAGTGACGTCACTATTA
-TGTCCAAGAAGATATTCTAAGGACAAATTTGATGATTGTTCACTACTTTT
-TCACTAAAAATCAGCTTGAATCGTAGAAAACAAAGAACTTTCAGAAAATT
-TCAGCGCTCACCAATAGCAACGACCAAAAAAACGGTCTTAGCAAAGCACA
-CGATTGCATAAGTTGGCACAAAAATCAACGGAAGCATGCATAGGAATGTC
-GACAGTCCGGCTTCACACATTGGCATTGCCATTTCTGCCAGACTACTGTA
-GACACGTTCTTGTGGAGTGCCACGTGCACGAAAAAAGTTGTAGGCCACGT
-GAGCGGTGTAGTCGACCGAGAATCCCGTGGCGAGAAGGACGTCCACTTGG
-ATTACCGGGTCCAGGTCGGCACCCCAAAGGGAGAGACCACCGACGAGAAC
-TGTAAAAACGATTTTAAAAAAAAGTAACTTTTTCAGATTAAATCCAAGAA
-AAAAACATAATTAAAATTTGTTTCAATGGTTTTTTAAAGTGACAATTACT
-CATTTTCAGGTTTTAAAAACTTTAACTTGAAAAAAAAAAACATTTTGAGC
-TACTTTTGAAAAAGGTTCTATTTTGAATTTCCCATCCAAACTTTTTGAAA
-AAATACAAATGATAAAAATAATTGCTTTCTTAAAAAAAAATTGTTAGCAA
-CCCTACCGTTCGCTAAAGATCGTTGTCGTTTTTTCTCAGAAAATTTAAAT
-ATCCCGCCATATATATTTTCGGAGAATTTCAATTTCTCGAAAAATTGTTT
-TCTCTGAAAATTTGAATTTTCCGCCAATAATTTTTCTCAGAAAATTTGAA
-AAAAAGGATTAAAAACATGAATTTTCCGCAAAAAATGTTTTCTCAGAGAA
-TATGAATGTCCCGCCAAATATATTTTCAGATAATTTTAAAGTCTCGCCAA
-AACGTTTTCTTCGAACATTTTAGGATTATGTGTTGAATTTGTAGAATTTT
-GATCTTGATTTAAATTTTTTCAGTTTTCAATTGAAAAAAAACTAACCATA
-ACAGATACTTGCAATAACAGATGTAATCACAGCAACTGCATTAAAATTTG
-CAATAAACACAAAACAAACGATTGCCATACAGACTACCGTAACCGCAATC
-GATCCAATTAAGTCAGTGCCAACAGTCAGGATGATACTGAGAATTGCAGA
-GTCACAGTCAAAGAGTGTAGCGTTGAATTGACTTTCTTCATGAAGAATTG
-TTCGGATATGTTGCATTGCACGTGCTCTTTCTGCCCATTCAGACATTCCT
-TTACCGAGAAGTGTCAGACGGAACGCTGTGACAATTGTTCTGAAAATTTG
-GAAATTATTCGGATTGAAATTGAAAAGTGTATAGGAATTAAGTTTGAACT
-ATTTGAGAAGTTTGTATTTTAAATTTTGCGCTAAGTTGCCTGAAAAAAAA
-CTAATTTCGAACTATATACCTACAAATATTTTTCAAAGAGCTCAATATTT
-GAATTTCGCGCCTAAAATATTTCGAAAACTTAAAATTTGCGACAAAACTA
-TTTAAACTATTTGAGAAATTTGAACTTTTAATTAACATTTGAACTTTGCG
-CCAATTTTTTTTTGGAAAATATTAAACTTTTGAAATTCTAGTTGAAAGGA
-AATTCAGAAAAATTGAGGATGTAATTTTTTTATATGAAAAACTTTTAGAT
-TCGATTTCGCGTCGAAAATTTTTGAATTGTCAAAATTTAAATTTTGACTT
-TTGCAAAAAAATGGCGGGAAAGTGAAGTTTCATTAGGAAATTCAAATTTG
-ATAGGCGTTTGACTAACTTATTATCATCTCCCATGTGATATTTTACAAGT
-GGAGGGTTCCCGATCGCATCCATCCACGTCGGAAGATTATCATAAGATGG
-GCGGTATTTTTCTCCAACCAGAGTGGATAAAATATTCATCGTCTTATCAA
-AATTCACATATTGCGGAAGAAAAATCAGACTTCGATTGTCTCCACGAATA
-CCTGGCACGTGCTCGAGCCGATCCATCATATTGTTGAAAGAGTCGTACTG
-AAAATTGAATGGCCTAGTAAGTAAAAATTAGATCATGAACTTACCTCTGC
-TTTGATCTCGATATTTGGAGGGTTGTTCACTATTACTGTAATAGGAAAGT
-AACGGTTGAAGACTGGCCTGAAAAATGATAAATGCTCAAAAAATACAACT
-TTTTTCTTTTAATAACGTAAAAAGTTTTTTAAATCGATAAAATCAATAAA
-TCGGCATTTCAACTGTAAACCAAAAATAACAATTATTGATTTTTCTTACA
-AAGACCTTAAAAATAAAAAAAAATCAATAAAAATAGCGATTATCTTTCCA
-AAAATCTGAAAATCAATTCAAATAATTTTCTTGATCTTTTATGTTAACCT
-ATAAATACCAATTATTGATTGTCTGGAAAATCAGTAAAGATTATTGATTT
-TTTTGAGAACCTAAAAATCAATAAAACCCAATAAAAAAGTAATGTTTTTT
-CAAACGCTTTTTCAAACAAATTCTTGATTTTACTTTCAAAAAACCAACTT
-AATATTCGACAACGAATCCACCAGCTTCGAATTTGATGGGAATGCCTTTG
-CAGGTTCAAAGGTCGTTTTCATGGTGACTACTCCATAAGTTGTCAACGCA
-TACATCCCAAGGAGCACCATAATGCACGCTACACGCCCCTTCACGGAGCA
-CACGAAGCTCGAGTACTTGGAGAGCCACGTGTCGGCTCGGGAAATTTTTG
-GCTCCGTCTCATTGGCGATGGATTTGTAATCTGGGTCGTTGCAGAGGAAT
-ACAATTGGAGCTAGGATCGTATAGGTGAAGATGTAGTCGAGGAGCAAGGC
-GAGCGAGGCAGTTAGGCAGAACAAGGACATCTGGAAGAAGAGTTTTATTC
-AAGCTAGCCCACGTTTTCAAAAACTGGGCTACGTGCCAAAAAAGGTTACC
-TGAGGCGTTGGCGTCAAGAATCCGATTCCAAAAGCAATAATATTGGTAAG
-TGAGGTGATTGTAATCGATGGTCCAACATCGACAATCACTTGTTCCAAAC
-GGCGAGGTCTGAAAATTGCAATTTCACGATGCTTTTACAATACCCCTACA
-GTACTTTTGCAGTTTCTCTACAGCACCCCTGTACAACTACGGTACTTTTA
-TTTATTTATATATTTGTTCATCAGGCAACAATCATAATGATACAATTACA
-ACAAGGCAGTGAACTTTTACAATACAATGCCCCACCCTCTTTTTCCGTGA
-AAACTTACGTGTCAGTAATTGCAATATGATGTTTCCATCTGTGAAGTAGA
-ATAAAAGCATCATCAACTCCAATTCCAAGTACCAAAAACGGCGTAACACA
-TTGAATAGAGAACGACGGGAAGCCCATCCAACAAATTGCTCCAAACGAGG
-CGACAGTTGCAGCCATCGGAGTGAGCAATGATGTGGCAACCAGATAGAAT
-GCCATTTTGACAGATGACAGGCGGACAATGACAATGATGACCTGAGTCAG
-AAGTAGGAAGAATCCGATTGTCATTAGAGTGGTAGCTTCAATGGCTCCTC
-GAATCATTTCACGATTTGCTACTTGGTCACTGAAGATGGTGAACTGAACG
-TGCTCGAAGGCAGAGGAGTTTTTGGAAAGTTGGAAGAGCTCGTCGATTGC
-GTCCTGGGAAAAGTATAATTAGGAAATGCCGAGTGCTTGCCAGTTTTTTT
-TATTATGTAAATTTGCTTCCCAGAATCGCGAAAATTTGATTTCCCGCAGA
-AAAGACTGAAATTTAAATTTCTACTAAAAATTGTTCAGATGTTTGTTTTT
-AGAAATTTTCTTTAAAGACAAAGATTTGAATTTCCTATTGAAAATAGGTG
-AAAATTCAAATTTACTACAAAAAAATTGAGTTTTGTTAAAAACACACTGA
-AAAATTGAACTTCCTGATTAAAATTGATTGAAAAATTAGAGGCTCCTAAA
-AAATATTGAAAACTCGAAATGTAAATTCAAATTTCCCGTCCAAAAATTGA
-CAAAAATATTTGAACTTTCTGCCAGAAACAAGTTAAAAAATCAAAGGTTC
-CTCTAATAGTAAAACTGACTCAAAATTAATTGAAAATTGATCAAAAAGCC
-GTATGAGTCTTCTAGGCTATTCTCACCTTAAACGCCAATTTTCCTTCTGG
-AGTATCAGACCTCGAAAAATACCACAGCACCAAGGATTTGGAGCTGATCC
-TCTCGGTCGGTGGTTCTGAAAGTTTCAATATTTTTTCACATTTTTCCAGA
-ACTTTTTATAGTTAAAAAAATGAAATTTTAACTGGAAAGTGGCTAAATCA
-TAAAAACTATTTTTCAACTTTTCATTTAACATTTCAAAAAAAATCTTACC
-AAAATCCGCATTACTCAAGTGAAGTCCCAGGAAAATATCCAGTCCGCTAT
-ATGGCATATCCGGATAGGTGAATACACTTGTGGTACCATTGTTTCTCCGC
-GTCAAATTCTGAAAATTGCCATGTGGTCGTTGAAGAGTTTTCTAGTCCAC
-CACCACCACCACCAAGGGTTTCGGTTTTTCGACTTTTTAGAAAATCGAAA
-AATCGAACAATTTTTGAGAAAAACTTACAAAAAGCTGATAATGTTTTTAT
-TTTAACTTTTTTCTCCATCATTCATTTTAAGAATATAGATAAATGGGATA
-AGACCGTCCAGGTTTCTGTTCAGTTTTCCCTGTTGTTAAATTCATTAAGA
-TGTTTGGTCCCCAAAAAACAATGTTTCTTTCATTTTTCGATTTTCAATTT
-TTAGATTTTTCGATTTTCACTAAAAACATCGAATAATTGAAAAAATCGAA
-AAATGACACCCTAGACCACCACCTACCGCTAACAAGTGAAAGGGGCTGTT
-CAAGTCGCAGAGTGGATCGCAATTTTTTCGTCCATCCCCATCTTGGTAGC
-CAACTGCCGCCGATAGTCGATTGTCCACAGTATAAATCTGAAATTTTTTA
-AATTCCCGCCAGAAAAGTGGGCGTGACGGAGAATCAACTTACGTCTGCCA
-GTGCGCCTTCCTGGAGAATACTGGAATTTTCGCGCTTGGCGGTAAAAATA
-CAGAATGCTCGTTCCGGATAGATGTCGAGTCCGTAGTATTCCAGCCAGAC
-ACGGGTTTCACTGAAAAATGTAAAAAAATTTATAGAAATTTCCGCAAAAA
-GCATATATTTAAAATAGGAGTTTTAAAAAAATTAACAAAATAGTTACGAA
-CGAAATTTTCATTTGCTTTAAAGTTTTCTTTTTTTTCTTATTTATTTTTG
-ATCAAATATTTATTTTGGGTTTTTTAACTTCAAGTGGAATTCCAAAAAAA
-TTCAATTTTCTTCCCAGTCAACCAAACATTGACCAAATCACAATAAGAAA
-GGGAGAAAGGGAAATCGAATTAGAAAAAGAAAAACATTGCGAAAAAACGT
-GTTATTTCTGACTGGTGGAGGAAGGAGGCTTCAAGGTCAGTAGTCACTTA
-CTATCCAGCATCTGAATCATCCGGTGAAAAGGCTTTGCGAATATCTGGCT
-CTAAACGAATGTGCACAAGTCCTGAACTGAGAACTAGGATGGATAAGATG
-CTCACTGAAAATTGTCCAACTTGAAAAATTTCGATTTTTTATGTTTATTA
-AATTTTTTCTGGTGTAAAATAGCAGAAAATGCCAAAAAAAAATGTATCAG
-ACACAACTTTTTTTCAATTTTTCAAACTTTTCGTTGCAAGACCAAACATA
-CAATAACAATTGTCGTTCGAGCGCGTTTTGCCCATGCACCCTTAACGGAG
-ATTTTCATCGACTACTCTATAGAGCGCGTTGGTGATTTTGAAAATGAATT
-TTTCTTGGAAATTTAAAACTTTTAGAAAGGGATTTTTCTATTTTTTCCAA
-AAAATTATATTGAAAAATCAATAAATTAATTATTGATTTTTCAAAACTAT
-AGTGATTCTGATTTGAAAAATGAAAAACATTGCTTTTAAAATTATCTGAA
-CTCAGTTTTCACGAAAAATCAATAAATCGGTAATCGAAAAACATTCATTT
-TTCTATTTTTCTCAATTTTTCGATGTATTTTCCAAGAAAATCGATTAATT
-TATCGATTTTTTTTCCAGAATATCTGATCGATTTTTTTATTCATCGGAAA
-AGTTCAATTATTTTATTTTTAGGAAATTGTTTTCCAAACTTATATTGGTG
-GCCAAGTTTTCCCATTTCGACGACCATAAAGTTACAAAAAACTCACAAAG
-TATCGAATAAACCGGATAGGCGGCTAACAGCCGTGCCACGACGGCACTAA
-TCACATCCCATCCCATGTGCTGAAAAACTTCGAAATTTTTTTAATATTTC
-AGAATTTAAAGCAGCATGCAAACGCGCTCCAACAAAGAAAAATGTTTTTA
-AAAAATTGAAATTCAAAACACAAGCACGTGAAGCAGAGAATGCAGAAAAC
-AAGACCACTGTCACAAAATTGTAGAAGTGAGGGAGGGAGGGCTATTGCAG
-AGGTGACCAACGGGTTTCGGTTTCCAATTTTTCGGACACGGCGCAGAGGA
-TTTGAGTCATTATTATTGTGTTTAGAGAGTGTAAGAGAATTAGAGAATTA
-GGGATAGATGGGAAACTGTACGTACTTCTGCGAAATGGTGCACTTTTAGG
-ATCGGCGGCCTAGAAATTTACATGGTGCTCTAGAAGTCTAATAGATAGCC
-TAGATCTTTTTAAGTCCAGAAAATTACTTGGTGGTCTAGAAGTTTTTTTT
-GTGACCTAGAAATGCAGTTGGTGGACTATAAATTCACTTGGTGGCCTAGA
-AATTCATTTGGTAGCCTAGAAATGTACTTGGTGGCCTAGAAATTAACCTT
-GAAGCTTAGAAGTTTGTTTGAAAGCCCAGAAATTCACTTGATTGCCTATG
-AATTCACTTGGTGGTCGAGAAATGTTCGTGAAAGCCCAGATATTTACTTG
-GTGGTCTAAAACATTTTTCAGTTCAGAAATACATTGGAAAAAATTTCGAT
-TGAGAATTATGGCGTGGGATTTCAAGTGGTGACCTAGAAATTTGTCAAGG
-GACTGAGGAATTCATTTGGCGTCTGGAAATTTTTTTGGTGACCTAGAAAT
-TTATTTGGTGACCTGAAAATTCATTTCATGACCAGTGAATTTACTTGGTG
-GTCTAAAAAGTCTCATGGTGCCGGTCTTAAAGTCTCATGTGTTGCAAAAA
-TTATACTACAATATTTAACTTTGAAATAAAAATTCAGCGGGTCTAGATTT
-GCAAGAAAAATCTGTATTTTCTCAATTTTTTTCAGGTTTTTGATTAGTTA
-AAAAAAATCGAAATGATTGTTTAGAACTGCAGAGAAAAAACAATTTTGTA
-TCTCCGGAATGCGCTATTCTGGGGAGTCAGATTTACTGGATTTTACTTTT
-TTTCCTGCAATTCCAATGCAAAATAAGGTAAAAAAATGAGAAAACTGGCG
-GAACACGGCGGTACACACAGGGGCAACTTGAATGTAAGGCAGGTGTTTAG
-TAAGTGGACCGAGGGGACGGCAAAAGCTGGTATTTTTCCTGTGTCGATGG
-GGGACAGTAGTAGCACACAAGAAACAAGTATTTTGATGATAATACGAATA
-AGAAAAAGAAAAAGGCAGCAAAAAAGTGTGTGGCAGACCACCACCGTCCA
-TCGGATTAGGGAGCGGAGGCAAACTCGCTCTACCGAACAGAGGGGTGTCC
-GTTTCCCCCAAAATCCTCTGAATGTGACGTCATTGTTGGGGCGGCGGGGC
-GGCGTCCAAAAATTAGTGATTTTTTTTTTGGTATTTTGGAAAAAAAGGAA
-AAAATCGAGAAACATTTTTTTGTGTTTTTGGGGAGTTTGTCATGTGAAAT
-TTGAAAATGTTGGGTACAATCAAAAAATTGTTTTGGTTTTTATAATTTTA
-ATAGGAATTTTTAAAAATCTGAATCGTTTTTCTTTGAAAAATCAAAAAAC
-AACAAAACATCCGCTTTTTTTAAAAATTGTTTGTTAAAAAAATAGAAATC
-GGAAAACAAAATTTTCCGATCTTCTCGAAATTCACAAACTCATAAAAAAA
-TCGAAATCCCCTTGTACCCCACCCTAGTTCACTGAAGCGCGTTTGCTTTC
-TGGCCAAAGGCATGGAGGGAGGCGGGCACCTCCCTTTTGCAAAATTGACC
-TAAATAAAGGTGATATGCCAGTGATAAGGAACGGTTTAATGATCCGAAAC
-CGCCAAAAGTGCATAGTTTCTGCGTTAAAAAAAGTGACAACTGACATCAC
-ACGGAGGCTACAAAAGGGGACTCACAAGTTTGCCGGAGAGGAATGAAAAT
-TGGAAATTTGTACGGGTAAGGGGATCAATGTTCAGTGGTGGTCGCGAGGG
-AGGACGGAGGGAAAAAGTGGAATTAGAATTGAATGGGAAATTGGTGGCAA
-AACGGTAAACACTTCTTATTATCCAAATGCATGAGGGATGGAGAAAACTG
-GAAACCTTTGCAGAATTTTGGAGGGGGTGATGAAAAGTATTGGCAACACC
-TTGGTGGCCGAGAATTTTAAATTGATGATCTGGACTAAAAATTCAGATGA
-TGGCCGAGTTTTTCATATTCGCACCAATACAAATGATGGCCTAGAAAGTT
-TGGAGCGACCTAATTTTTCAAATTTACAAATAGATCTTTAATGTTTCATC
-GACAAGGGATGTGAACTAGAAATTAAGATGGTGGCCTAGAATTATATTTA
-TGGTTCGTCAAGAGGTGGCCTAACTCTTCAAATTCACGAAATATTCTAAA
-GTTTAAATTTCCTTTAATTAGTATTGTGGACTAAAAGTCGAGATAATGAC
-CGAACTTTTCATAAGCTCTCCACATCAATTGGTGGCCTTGAAATTCCGAC
-ATGGCCGAATTTTCGTAAGTCGACCCCAGTGGTGGCCGAGCCAAAAAACA
-TAATTCCGCAAACTCTTACATTTTAATATATGAGGGAAGCCAGAAGTGCG
-TGCCACATTATTTTTACATTTTTGACTATCGTGCCAAAATTCCAAAATCC
-TCAAAAATTTGAATTTCGCGGCACAATTTCGGGTTTTGAATATCTTTTTT
-TTAGTGTGATGTAGGGCGTACTTTCCAATTTGCATAAAATAAAAAATCAA
-CAAAAAGCCATACATAATGTCAAATGGTCAGTTGCAAAGAAAACAAACCT
-GCGGTCAGGATGGCCGAACCAGAAAAATCAATTCAAGCTTTCGATTTCGC
-CCGAAAAAAATGAGGATCAGAATAAGAAGGTGTCGCCTATTAGAGATTGG
-AGGATGTTGAGAAAAAGAGAATAGTGGAGGAAAATGATGAGGTAGAACGG
-AATTGAACATGCAAATAAAATGAATGTATTGGGTAGGAGAGGGAAGGTAA
-CACTGTGTGTTCTGTGTTTGGAAAAGGATTGAAGTGGTGGACAAAAGGAC
-TCTTGGTTTAATACTACTTGCCTGTTCTGATCAGGTTCAGAGGTATTTCA
-GCAATAGCTTTTGTATTTTGCATTTTGTCTTTTTAAGTACTATTATTTAT
-CAAATCCTTTTTTGTAACTTTGAATCTGATGTCAAACTTGTGGAAAGTTT
-GAACTCGAAGAAATTGCTCAAAAAGTAAAATTTGCGCCCAATTTTTCGAA
-TTTTTTTCGTTGTTTCTTTTTAATTTCAAAACACAAATCTTCGCCAAAAC
-ATTGTTACAAAATTAACATTTTAATTTTTAAACAGCTGCTAAAGCACTAC
-AAATGTGAAATTGATGCCTAAAATTGGAGAAAAATGGAGTTTTTCAAAAA
-AAATTGAAATAAGAAAGTTTGGAAACTAAATGTCTATATATGGGGAAAAT
-GCTATTTCGAATCTCGCGTTTTTTTAAGTTGGGCATCTCCAAAATATGAA
-AAAAATACAAAAAAAAACTCCAAAAGATAATGTTGAATTTTTTCAAAACC
-CTCACCAAGAAGTATGTTTTAATAAACAAAAATTTGAATTTCTTTTCGAA
-TTTTTTTCAAAATTCGTAATATAAGATACCTGTCACACTTATTTTCAAGC
-TAACAGGAAAAAATAAATGTTGAACTTTATTTAATGATAAAAATAGTTTG
-TAGAAAATTCGTAAATTTAAAAAAATTCAAATTCTACCAAAATATATTAG
-TTTTTCACCTGGAACTAAAAACATTTGAAGAATTTTTTTTAGCTTATATA
-ACACTACAACCGCAACACATTTTTGTGAGAACATGTCTAGCCTCTGTCAA
-ACAGTTTTCCGGTATCTTCGTGTGTGTGTTTGCTAGTGTTCAATAGATCT
-TCCTGTAAAAAATCGAAAATTTCCGATTATATGCTTTTTATGTGTTTGAT
-TCTATAAGCGTTTAGATTGTTATCAGATGATTTGACATTATTCGCAACAA
-TTTTTTTAAATCCGAATGTTTTTCGAATTTCTATTTTTTATAATTTTCCA
-GACAGTTTAAGAGCAAAGTTGAAGTTATTTTTTCCTATCAAAAAATGCAG
-GAATAAATACTACCTCAATTTTTGCAAGAAAAAAAATTTACAGTAGTTTT
-TTTGCTGGAAACTAAATTCCGCAGAATTTGAAAAATACTGAAAGGGTTTT
-TTTCCTTTTTTAATTTGTACTCCCTACAGTACCCCTTATTTTTGAATTAC
-AATTTGATGTTCGTACCTAAAATTGACACTTTTTCTCTAGTATATTTCCG
-AATTCAATTCATAATTATCAGTTGAAACTAGACCCCACCAAAATCACAAA
-TTGATAAGAAAACGTAGAAAGGGGAAAGCACGTGTAGCCTACAACAATAT
-TAACTGTTTTCAATTTATTATTTTTATTTTCCAAGGGTTTTATTCTTAAT
-TCTATTCACAATTTTTCGAAAAATATTCAGCAAAAAAGTATGCTTTCTGA
-CTATATTATCAGTATAAAGTGAGTTTTTTGTGAGCATTAAAAAAATCAAT
-TTTTTGTGGCCTAGCTTTGCATTTAGTGGCCTAAAAAATTAAATGCATTT
-CTTCCACGTTTTCCGTAAAAAAGACAGTGGAAGAGTTTTTATCCGTACTT
-GGGCAGGCTTAATATTTTGTGGCCAAATTTTTCGCGTGGTGCCTAGAAAC
-TTTTTTTACGTTTTTTCTCGGAAACTTATTTTTTTCCATGGCCGTGAACG
-AGTTTTGTTTAAATTTCAGGTCGCTTTCAATATTTTGATGACTAGTTTTT
-TAAAAAATATTTTCCTGCTTTTAGTAATGCTTGGCCAAACGTCTTCACGT
-GGTCGAGCTTTTCATTTGATGCCCTAGGATTTTTAACCTGTCGTTCTCTA
-GACAATAACTACCGTGGACTCGAAAGTTCTACGCCACGTTTTAAATATTT
-GTAGCCTAGAAATCAAAGTCACTTCCCGAGTGGCCTACGTTTCCCTGAGC
-ATAACTAGTCCTCGAGAAGTCCAGTCGACCGTTACTGTCTACAAGATTAT
-CGGCAAGATAATCCGTTTCGATTTCGATGTCCACTCATTCACTAGTCGTT
-TTGTCGTCGTTGCAACAATGTGGAAATTACTAAATTTTGGCATTTTTAAA
-GATTTTTAAACACATTTTTTCTGTCGGAAACTGAGAACCGCAGTTTGTAG
-AGAAAAAAATTGCATTTACTTTCCTGATTGAAAAATCTTTGTTAGCGTTC
-TTCCCCGCTGATTTATGTACCGTTTAAGTTTCAGCTGAGAGACAGCGTGG
-GATTGGGGGAGACGCAGACAGCGAGTGAGTTTGCGTCTCCCTCTCCCTCC
-CACTCTCTCATTTGCAAGTTTTGAGTTTTCATAACTCGGAGAGTGGAGCT
-ATCGAAAAATTCAAAAAAAAAAACAAAAAATTAAAATAAAAAAATTCTAC
-AAATTTTTAGTTGCTAATTTTTTGATAGCGCTGCTAGGTTTTGAGATAAT
-GACGTTTTTAACTCTACCTCGACTTTTTGTGTGTTACCAAGTTAGTATTC
-CTCTGACAAACCGCATGACCTCACCTCATTGTAGCCTCTTTCGAAATCTG
-TAAACTTTACAACTCATGTTTCCTAGTGATATCCGCCTCCATCTCAGCTG
-TTCTCTTTCCATCTTCTCCTAACTGTTTTCGTCTATTTTAAAAATGAGAT
-TATTCGGATTTCTTACTAGTTCCGCTCAAAAACCAATAAATTTATTTTGT
-AGAGCGAAAAATTCTACACATTTTTGTAGTCAACAAGTTTTTCAATGCAC
-CTCTCCTCGCTGAGTTTTTAAGATCTATAATTTGATAGTAAAAATATTTT
-TGACAGTAGCTTTTGTTTTAGAGATAATCAGGATTTCGCAAGCCACGGAC
-TTCAGTCTAGCCTCATTTCGAAAGTTGTGAACTCTGCAAGTCATGTTGAC
-TAATAGTATCCCTCTCCAGCTGTTCTTTCTCCTCCTTCACTCAAGTGGTG
-ATCGTTTTCTCACTTCTCTCGCTTTTTCGCCCCTCTCTGTAGTGTCCAGA
-GAGTATCAGTTATGTCTCCAGGACGCCGTGTGACGTCATCGCTGACAAGC
-CGTAGCCTACAGCGCCCGGCAGAAGACCTGTTTTGACATGCCATTCGTGA
-AAAATTTAGATTAGCCCTCTCACACTCTACATGTCTCCATGTTTTTTCAC
-ACAAACTATTTTTTTGAAGAAATATCTTTAAAACTTTGCTTTGTCTATAA
-TTGATAGCATAAAAGGTCCAATTTTTTCCGTAGCTCAGCAAATGGCGTAA
-CTAAATGGTGTGAAATGTTTGATAGGGGACCGGTTTTTGGCTGAAATCTC
-AGAAAAAATGGAGCCCTGCCTGCATAGAGACCCCTTTCGACTGATGACGT
-CACAGAGTAAGGTGTCACATCACACCATTCTTATTTCTCTATTTGAGGTC
-CAATTAGACTAGGGGGTCAGCGTGCTCTCGATTCCTAGCCGATGACGTCA
-CATATTTGCCATTCACAACTTTCTAAACTTCAAACATTTTTTAATTTTTC
-CCAAATTTCAGCCGATTCCTAATGGGAGGATTCCTCTCCAAACATCACCA
-CCTCACTGCAGTCCACGATGCCACGTGTGGCCCAATAAAAGGTGTCGGAT
-ATGAGCAAGTAGGTCATAAATTGAGCTCTCACTAAGTTAAGATGAAAGAA
-AATTATTTAGGAAGACGGTTCAGTGGTGGAGGGGTTCCTTGGAATCCCGT
-ACGCCGAGCCACCAATTGGAGCCTTGCGCTTTAAGAAGCCAGTTGCTCAT
-CGGAAATGGACGGAGCCGCTGGATTGTGTTAGGTTCGGGCCAAGGAGTCC
-GCAAAATGATGAGCTACTAGGGCAGGTGAGGCGCCTAAATCAGAGCAAAA
-CTCTGTCATTTTTATAATGTTCAGTTTGTGAACACAGTCGGGAAAAGTGA
-GGAGCACTGTCTCAGCCTGAACGTATTCACTCCAAAGTGGGAGTCAAATG
-AATGGCCCGACGGCTTCCCAGTGATGGTCTTCATCCATGGCGGAGGCTTC
-GCTGTTCACTCATCCAGCAACTACGGCTGCGCTTCCATCGCACGAAACCT
-TTGCACCAAGGACGTCGTCGTCGTGACCATTAACTACCGCCTCGGCGTCC
-TTGGATTCTTCACCACCGGCGACGAAGTGTGCCGTGGAAACCTTGGACTT
-TGGGATCAGACTGCCGCACTCGAGTGGGTTCAGGAGAACATTCAAAGCTT
-CCGAGGCGACCCTGATAATGTTACAATCTTTGGCCAAAGTGCAGGTGGAG
-CATCTGTGGATCTGCTTTGCCTATCGCCGCACTCGAGGGGATTGTTCAAT
-CGGGCGATTCCGATGGCAGGGAATGGAGAATGTGATTTTGCGATGCGGAC
-TAGTGAGCAGCAGGCTCAGTTGTCGAGGGAGTTTGCGAGATACCTTGGAT
-GGGAAGGAGATGGTAAGTGATTGAAATGTCGCTTAGTCGTAAGATGTTAG
-AAATTGCATTGTCATCAGAGTTGGATTGAGTTTGTTTAAGCGTAATTTTT
-ACTAAAGCCCATCGAAGCAGTTCCGTTGGCTACTTGGCCTACCACACTCA
-GCCTGGGAGCCCGTCATAGCAAGGCTCAAGACATTTCCTATGTAGTTATT
-TCTATTGCAAATTTAATACGGTGAATTTTCCAAAAATCTTGACGTATCCG
-AATGAAAAACCAGTGCAAACTTGTTGAGTAATATCCCTAATTACTTCATT
-CCAGACAACGACAGTGAAGACCTTCTCCAATTCATCGACCAGCAACCCCT
-TTACAAGATCGAGATGGGCATAAACCCGAAAAGAGGATTCAAGCATTCCC
-AGGCTGGAAGCTTGTATTTTGTGCCAAACTTTGACGGCGACTTCTTCCCG
-AAACCACTTAACCAGCTTAGAAAAGAAGCTCCAAAGATGCAAATAATGAC
-AGGAACCACCAAGTACGAGGGTCTATTTTTCAGTGAGTTTAAACTTCTGA
-AAATTTTCTGAAAATTTTCTATTATAGTCGCCCTCGGTGCCTTATCGAAA
-AATCCGGAAGGAATTAAAAAGTTCATGGGAAGAATCTTTAAAGAATGCGA
-CTATGGAGAGCGTGCTGACGATGTGCTGCAGATGGTCTACGACTTTTATT
-TCAAGGGGGTACATCCCAAGGATCATGAGAAGAATATGCATCAGATTGTG
-AAGGTAGGTGGCATAGAGCCTACAGGGCCATCAGCCAGTGTTTCAGTTCA
-TTGGAGACTATTCTATCAACTATGGTACATACCGTCTGGCTAACATTATG
-ACGGATCTTCAACACGATGTATACTTCTATCAGTTTGACTATCATAACTC
-TGCAGGATTCGGAGTGTTCCGGTGGCTTCTTCCGTTTTTGGGTGAGTTTA
-GGCAGGATGGGTCAGATTTTCTAAGCTCTGGGCCACATGCTTTTTGGTAG
-ATCAGTTTTAGAAATTCTAAGCTAGAAATGTATGAGTATGGTAAAACTTT
-TAAATCAGATTGAAAAGAAATTTTCCAAATTATAGGACTTTGTAAAAACT
-CCGATTGCTTAGGCTACTTCATCCGTACGACCGTAACCTGTCACTAACGA
-TTCTAATAGTGTACCTTATCTGAACAGTATTGCCGAACTAATTGAAATTA
-ATCCTGAGACTCCGAGATTACCTAGCGGTCCCTATCGCTGTGGCCCAGTG
-CCCATTTGGCTCAATATCCAATTTTCAGGCTCCACACATTGCACGGAAAT
-GAGATATGTGCTCGGCAAAGGAATAATCTCGAAATTCCGACCAAATGATA
-ATGATAAGAAGATGCTTCACGTTATGACAACTTATTTTACAAATTTTGCA
-AAATATGGGTACTTTTTTTGTGAACACTTTCGAAAAAAATTAAGCTGCTT
-TCAGAAACCCTAATGGAGAAAACCAGGAGACTGGAGAATGGCAAAAGCAC
-GACTCGGCACACCCGTTCCGCCATTTCAAGATTGATCTGGACGATTCTGA
-AATGGTTGAGGACTATCAGGAACGGAGAGCCGAGCTATGGGATAAACTGA
-GAGCATTAAATGTTAGCAGGGCTCAGATGTGAAATTGCTGTTATTTTTAC
-TTGATTGATTTTACGGGTTTATAAATATTTTTGATTTGTTATATATTTAT
-TTTTTCTGAGTTACATACATACATCAAGAAACATTTCAATATCTTGCAAT
-CTAACTGAATTTTATTTTATAATCAGTTATTTTTATTAATCCTGTACTAT
-GCCAAAAAATCTAACTTGTTTGAATCAATAACTCAACTACCAATCCTTAA
-CACAAAAACCAACACGGTTCTACCCAAACGATGTATAAGCTGGCACCATT
-ATAAATTATCCGCATACTTTTTCAAACAAAGGAAAAAGTCGGAAGCTTTC
-CATACATTCAACTCTATTATACTTTCCCCTTTCCATGGATGTGCTTTTTG
-TGTGAAACCAAAACTTAACCGCCAGAAAGCTTTTTACATAATCTATAACA
-GAGGTGGGCGGCAATTGCCGTTCGGCGAACATTCTGATTTTTTGGAAATT
-TTCATTTTTGGCAAATTGCCGATCTGCCGTTTGCCGGATATCAATTTGCC
-GGAAGTGTTTAGAGGGTTCTTTTTACGACGGAAACACTTAAAACTGTGCC
-TTTTTGAAAATATTTAATTTTTATTCTTTTTTTCGGCAAATTTGCCGGTT
-TGCCCAATTTGGCAATTCGCCGGAAATTTCAATTTCGGCAGTCTGCCAAT
-TTGCCAATTTTCAGAAAAAAAATTTCGACGCCCATCCCTGATGCATACCG
-TTTTTGACTCAATTTAAATAGTACACAACCTTCCACATTAATGTAGTAAC
-GGTAAGGTTGCCTAATTTGTTTGAACTTTGAAAGCCGCGCACAGCACCTA
-CAGTAATCAATCTCCTTAAAGAGTGTTTTCGCAATACCAAACATAGGAGT
-TTGTAGAAACATGAAACCGAAGGACAACACATTTTGAAACAGGTGTCACA
-TTTATGTATCTGCACTTGATAGCTATGCAGTCAATGAAGCATAACGAGAG
-ACATGTGTTCATTCCCGAATGGAGTCAATGAGTCATAAGGTTCTTCGTTC
-TCATTTTATTATTACAGGCTTGGGTCCCACATTGATTCATATTATACTTA
-CTTTTCAATTCATTGTTTTTTTGTGATTTTTTTTCATTAGAATAGTATTA
-TAATAATATTCTTCTAATAATGACAATCGAAATAGTTGCAAGTAGAATAA
-CGATTTGTACAGTGATGCCCATAATTGTGCATGTTTATAATGTTCTAATA
-TTTCAACGCAATCATGACACAAGCTCTATAGCATCTCGTGAGTTCATTTT
-TGGTGAGGTTTCAAAAAAAAAATCCTCTTGCTCAAGAGCCATACGTTTTC
-AGTTAAAAATTTCTTTAATAAAATATAATGCTCATTTCTCGAACGTTACC
-TGTTAATGTTAACTGCGCCTACCATGTCCGTTCAATCCCACTAGTCAGTT
-ATTCTTTGCAATTAAATGATAAACTTTAATGTCTAAATCTCTTCATGGAT
-ATCTCCATCTCAACCATCCATCGTTTTTTATCAACCATCATCATTCTCGT
-GTTCTCGTTCTCGGGGTCGCCTCCGCTTCTTCATCATCATCACCACGACC
-ATTCAAATCGTTCATCTTCCTAATCGACATATTCCCGCATTAAATTTCTC
-TGTTGGGTATCAATGACTACCCAAAAACGGTCGCATTTTCTGAAAAAATG
-GGAAAATTGATTCCTAATTTATTGGTTTTGACCGGTTGTAACTAACCCCC
-ACACACTGTTTTTTGATACTACCTACGTCTATTTTCGGCTAATTTTAAGA
-AGTCAATGATTCCTAATTGTCTTTTTTGTTATTTTCTGTGAAGTGAAGTA
-TCAAGATAAAATCAGTTTGCGTCTCGCTTCGATTTTCTCATTTTTCGAAT
-GCTATTCCCCCGTAGCAATATGGTTTTGTTATTACACATTTGCACTTTTT
-TGCTACCCTCCCAATTCTGACTCACACTTGCATTCCGGAGACTGCCTGAG
-AGTTAAAACTAAACATAATTGTTATATAATAAATGTCAAAGTTTTTCGCA
-AGCTGAAAATTTTTGCCAGCTGAATTATTCCTCCTTCAAAGGAGCATAAG
-TCTAAAAATGCTAGAGTTATTGGAAAGTTGCTAATTACAAGTTATAGAGT
-TTAAAATTTTGAGTAGTTTCTCGATTTACAATTTTTGAAGCTTTATTCCT
-TGCTCAAACTCGAGCAATGAGAGGCAGTGGGGACTCCCCCACTGGGGAGG
-GGAGAACCTTGTCAACCCACTAGGGAGGGGAGAACCTTGTCAACTTTAAA
-GCCACGTCCCTCTGCAGGGAAAAGATCTATCAAAAGGTTATCAACTAACA
-AAATGTGCAAAATTATACGCTCTACATTTTTGTAGTTAACCGTTTTCTGT
-TATCACAGTTAGTTTTTGTGAAACCATCAAATCTGTAGTTTCTCCATTAT
-TATTATCACCTAACAGTATTATTATCAGCTGATAAGTATCCTTTCTTTTT
-GGATAATCCCCTTGTAAAGGAATATACCATTGTCTTCATCTCCTTTTTCT
-GTGTCTACCCTTATCTTTGGGTCGCCATCTGCCTCTCCTCCCCGCATATC
-CCCTCTTATATCTTCAGAAATTCAGGTTCCAAGGAATATTCCGAAAAATT
-TTGTTTGGAAGGTGACATGTCCGATCAATCGCTGGTCCAGAAGGTTCCAC
-TACTTGGCTCGTGTTCTCAGGTGAGTATGCGCCTTTAAACATTGAGGGTA
-CTGTATGCACCATAACGCAAAATTGCAGATTTTATAGTGGGGCAGGTTTG
-TTCTACAGATAACCGTAAAATTTTTATGTCCCTTTAAAAGAAACTCGTCC
-GAAAAATTGATAATTTACGAGGAAAACAACTTTTAAAAATGTTTTTTTAC
-TTCAAACGATGCTCTATTGTGCCGAATCGCTTGTTGTTTAGCGGCGTTTC
-TAAATATTTATTTACTTATCGAAAATCTTTTTTTTCATATTTATAACTGT
-TTAAACAAAATCGATAATATTTATTTTTTCTGAAACTATTCTGAAAATTT
-TGAATTTCCCGCCAAAAAAATTTCGGAAAATTTTGATTTTTTTTGGCATA
-TTATTTTCTGATAGAATTTGAATTTTTGGCCAAAGAAATTCTGAAAGTTT
-TGAATTTCCCGCAAAAATTGTATTTCTGAGAGAATTTGAATTTCTTGCAA
-TTTTTCTGTGAAAAAACAATTGAAAATAAACGTGGTCGCCAATACGAGAA
-AACTCGGCCACCGATTTTTTTTTCGCAAATTTTGCATTCGTTGCTGCATG
-ACTGCCAAAAATTGGCGGCCGAGTTTTTTTATTCTACAGGGTTAAATTTC
-ACAGATGGCCGAGTTTTCTCAGTTTCACGGTCACAGGCTTCTAGTTTATT
-ATATTCATCTCCGCGGCGCGCGCACCGTACTTTCTCCTTCTCTACTCTCT
-CGTTGTTCAATCCCTCTCTCGGATCCAACCAACGCCCTCTGCGATTGTGT
-CATCATCGATTTGTTATCTCAAATTCCGTTTGGCTTTTCAATAACCGTGC
-CTTATTGTCTCAGGAATTTCAAATTTCCGGTCAACAATTCGGATTATTAA
-CCATTTCGAAAAAAATCCTTTAAATTATTTTTATTATAATGAAAAACGTG
-CGATTTTTTCTCGCTGGTGGGTCCTGGCACGACTGAAACTTTTCAGCTAC
-TGTACCCAGCATTGCTTTAGAATTTAAATTTTTGCCGGCAAATTAGAACT
-GCAAGATTTTTTTGTTAGTTTTTAATTATAATTGTTTGGGAAAAATTACA
-AACTTTAAAAAAACCTACCGTACTCCCAAGTACTGCAGCCAAGAAATAAT
-TTGTTTCGTGCCAAGACCCATTTTTCCTTTAAGAACTAGAAACCTCCCTT
-GTTTACAACTGTACTTAAAATCGAATTAGTTTGTTCGCTAAACATGTTTT
-TCGCGCGAAATTTCGCTTTACTTTCGAAAAATGTTTTTCTTCATTTTCGT
-CGGCATGCGCCTTTAAACTACTGTTTTTGAAACTTTCGAATGATAGAAAA
-AATTAGAAAATATTTTTAATTTTCGCTTTCGCCGGAATATTCGAAAATTC
-GAAAAAAAAACTAAATTTCATGGATTCTCAGTTAAAATTCACGGAAATTA
-AAACTTGCGTAGCGAGACCTCAACGATCACATTACCTATGCGCCTTTAAA
-GCTACCGTAACCCTATTTTTAATTAAAAAAAAAAGAATTTCCTTTTAAAA
-TCGCCGGATTTTCTCCGTCTCTTTTCCCATCTTTTTTCATCTTCGGTACC
-AATCATATGTAGGTGAGAATATCTCTGCACCCTCCAACGAACCCAACACT
-ATATCGCTGCGCACCGTCCTTCAACGATGTCATCTTCCTCCTACTTCGAC
-CCCCTCAATTTATTTCCGATTTCCTCTGATTTATTGATCTTTTTTCCTCT
-TTTTCATCATTTCTACGTTCTATAAAGCGAGGTTTATAGCCAAATGGACT
-CATTCAAACGATTACAATCCAAAGTTTTCACGTCAGTGAGCTCACTGCGA
-AAATCTGAAGAGAATGTGAGTAAAAAGCGGCGGAAGACGTAAAACATCTG
-AAATATTTTTAAAAAAATTTGTTAAAAGCCCCACATTTTCGAGATAAATC
-TAAATTTTCAAGTTTGTAGCAGCAAATTAAGCAAAGATATATATTTCAGG
-CCGACGAGCAGACATACAACACAAAACGATGCTTCATCCACGTCAATCAC
-TTATCGATCGCGATCGCCGTCGTCGAGCTCTCGATTTTAATTTATCAGGT
-AATTTGTTTGCCTGCAACTCAGACCAACGCTTAGTCGTCTAATTAGATTT
-CAACCATATTTGATTAGAAACTGAGCAAATATAATGGGGACATAATTAAT
-AGGCTTATGGATTTTATTTGATTTGACAATATGGATTTTCTAACCAAATA
-TGGTTAAAATCTAATCCAATATGGAGCAAATCTAATCAAATATGGCTGAG
-ATCGTGCCATATTGGATTAGATTTCGACCATATTGGATTAGATTTGTTTT
-CTAATGAAATATGGAGAAAATCTAATCTAACATGGATTTCTAATCTAATA
-TGGAGCAAATATAATGCAATATGGATTTTCTAAAAAATATGGTTGAAATC
-TCGTTGAATATGGTTGAAATCTAATTAGACGACTAAGCGTTTATCTGAGA
-AACTGGAAAAACCTAAAAAAAATCTGAAAATTTTCAGTTTTGTGTGGAAA
-AAATCAATGAAAAACTCAATCCTACAGTAATTTAAAAATTCTTTTTCACT
-AAAAAAATCAGTTCCCATTGAAAAAACAAACTGAAAATCAATTATTTCAG
-CTCTCAAATGGCAGTTGGGGCAATTCGGAGCACTCGACCGTCTTCACAAT
-CGCCGCCTTGCTCTTTCTGCTCGTCATTTTTCTGCTTTTCGTCGCGATTT
-TCTACCAAATCGGAAATCTTCTCATCCCGCACATCGTCATGCAGATTCTG
-CTCGTTTTGTGCTTCCTGGGACTCACATGTGCGACGCTTTATGCGCTTTT
-CCACGGTGCCACGTTTCAGTTGCTCGTCGTGGTTACAAATCCGCAAATCG
-CCGCTGATTCCATGGTAAGTGTGGTAAAAAATGAAATTTGTTTCCTTGGG
-AAATTCCTTCTTTTTCCTCAATTTTTCCTCATTTTTTTGCTTCCAAAAAA
-AAGACCCATTTTGCGAAAAAAATTTTTTTTTTTCATTAATATATGTATTT
-TAAATTTTCCAGACAATTCTCCCGGCGCCAATGATCACAACAAACGTGGT
-TTCCGGATTCCTAGTGGGCCTTCTCGTCATTTTCGCAGTCTCCTACTTGC
-TCATCGCTGTGCTGAATGTGAGCTTTTCCCATGGCGAGACCCATGTAACT
-TTAATTTTTGCAGACCTGGTGCATGTACGTCGTCATCGATAGTTACCAGC
-TTTTGAAGAGCCAGAAACTTCAATCTCGTACTCCGTCGGTCGAGGAGTAT
-TGTGCGCCGAAGACGATTCAACTCTCACTATACCCCAATCAAATCGTTCA
-GGCCACCGATTTTTAGTCTATATTTTAGACCATTTGTTGAATTTTTCTCG
-AAAAAATCCGGTAAATTTTTGTGTATATATGTCCCGAAATTCTTCACTTT
-TATCACATGTGTCAGGCTTTAATTTTTTCATACTTTATTTTCGAATTCTG
-TACAAAAATCTTTGATATATTCTATTTATTCTTCTCAATTAATAATCACA
-CGATCCATCTTTCCACCCGTCTCGCCACCTTTGCATCACATCTCGACACT
-CGAACTTTGGTTTTCCGGTTTTTTCGTTGACTTTATTGTGTAGCTGGCAC
-ATCCATAGCGCAAACGCCTCGCGGCTTTCCACTTTTGGCGGCGATTCTTT
-CAGATCTTTTCGGAGATCTTTGGCGCAGAAATCGCAGGGATATGTCTGAA
-AAATTTAGGCGTTTTTGTGGGAATCTTGAGCTTATTAGCTAACTTTTCCT
-AGAATAGACATGAAACTTCTGGCTCGATCCTTATCCTCGTCGGTAGGCTT
-TTCCGGGTAGTAAACCGACATTGTGTGTAGCAAATTCCACGTGGATCTGC
-CTGAAATTTGAAATTTTTGGTGGAAATTTGAATTAAAAGCGAACCGAGCT
-CATCCTTGTCTACTGGACATCCGTGCAACTTCGCTCCTGTGCTCGTGCTC
-GGCGTCGTCTCGGATTCTGCAAAGAACTAAAATAATTGAGATTTTTTGCT
-CTGGAAATCTAGGGAAATCACCTTTTTTCTTTATTTTTTCAGCCATTTCT
-CTGCCTTTTTTCATCATATCCTCTACACTGACGCATGCACGACACGGCTT
-TCCATCTGGACCGATTTCCATTCTGAAATTAATTTTTAAACTTGGTTTTC
-GTTTCGTCAGTTTTAGAAGCCGTTTTAGGGCGTAAACTTATGAAACTATA
-CATAGTCTACGACAAATCTATAGAAATGCATTAAAAATAGGTCAAAAATG
-TGAGAAATTGCGCAAAAAATGATGCAAAAACGAAAAAAAATTAACTAAAA
-ACAAGAAATGCAAGTGCGCTCCACTGACACGCGTTAGAGAGCGTAGACGC
-AGAGAAATCTCGAGATGAGGGAAATCGTGGCGCGCGGGAATCAAGCTTTT
-TTGAATTGTCTTGATTTTTAAAGCCCAAAAAATAGATTTTTGGCGGATTT
-TTGGTGGATTTTCTTGCTTTGCAATGTAAAAATTAATTATTTGTTGCATC
-TAATCACTTTTAACAGAGATTTACAATTTTTTTAGTGGTCTGAACCTGGG
-AAAATCCTTCAAAAATCAATTTTCCCTACAAAAATTCGTTATTTACCGCA
-TTTTCCGCCCAGCTGATCAAAAATTCTTCTATTTTCTCAATTTATTGATA
-ACACTCGCCCACCTCAAGCATTTTATCACCTGAAACTCGTCACACTTTAC
-AATTTGTTTGCAGAAATATGCGAAAATGAGCGTTACTCAGCTAAAAAATC
-TGAAACACGCGATAGCTCAGCTTCTGGAGTGGGATGGAACGAAAACGGCG
-AGAAAGGCAAGTTTTTGGTGGAATTTATCGAAAAAACCTGATTTGTTTTT
-TTGCAGAAAATCGTCGACGAGGTGGTTCTTCTCTATCACGCTCTGGGAGC
-GGAGGCATTAAGTGAGGATAACCAGGAGATATATGATTTGTATGATTTAT
-CTGCACGTATATTCAACTTAGCTAAGAAAGTTAGTTTTTTTTTTGTTAAA
-AAGTCGTAAACAACAAGTAAATTTAAAAATAAGCATTAAAAAATATTGAG
-GCTTATGAGAGCAAAAAATTCCAGGAAATCGAAGAAGCCAACCAACAATT
-CGAAAAAGAACGAAAAAAGGGCACAAGACGAAGCGAAAAACCAGTCCCAA
-CTCCACTTTTCGAGCTATCAATACAACATTTAAAACGTTGCTGTCAGCAG
-GGAATCGATCACAATCAGGTGCCATGGATAGCATATTGTCTGAAACTACT
-GGAATTTCCAATCACAATCACCGAAAAATCGATCGAAAACGAGATTTCCA
-ACGTGCTCCTATTGAGCTCCAACGCCTCACAGCTCCATTGGGCCGAGCAT
-GCTCATTTGAGCAGCTTATGGAAATGGATTTGGAGCCGTGTCGAGACCGC
-CGATATTGGGGCACTCGCCATGAGAAATTATATGGAATTGGCGGCGAACT
-TGCTGGAAAACGTGGATTACGTGGTTTTCGAGAAGTCGCCTATTGACCTG
-ATGGCGAAAGTGATGGGAACACTGAAGAAAAGTGTGGAAATGGGAAATCC
-CAAAGAATAGTGCGTGGAAAACGAGTTCTTGAAATAATGTTCAAAAAATT
-CAAATTGGCTTGGACTTAGGCTTAAGCTTAAGCTTAGATTTAGGCTTAGG
-CATAGGCTTACAAGGGAAGTATTTCAACTTATTCCCGGACTTCAGAATGA
-AACCTATGTCATTTCGAAGAAGACTCTTTAAGTAGGTCCCTACAAAAAAT
-TTAGCGGCAGAGGAGCACTTTGACCTGGAAAAAAGTCGCTCTGAAAACTT
-TTCAGTGCATTTTTTCACGGCTTTCAAGGCCCGTAAAATGGCTCCAAATG
-CGAATTTTTGTAGATTTTTGAAGATTTCTAGGATGCTCAGGGGCCGGAGA
-GCACTCGGAATTTTTTTTGGAATTTTTTAAAATTTTCGAAAAAATCTGAA
-ATTTTTTGAATAAGTCCATGGCAAAATTTTTCAGTGAATATATATATATA
-TTTTTTTTAAATTTCAGAAAAGTTGTCAGTTATTTAAGATCAAAATTGGG
-TGTTTTTACACAATGAAAATTTTTTTGAGATTTTTCGGAACTGCAAAAAC
-CAATTTTGGAAAAAAATCGGCACCCGGAGTCGAACCCCAGTCTTAAAAAA
-TATTAATCAAACTCGCTAACCACTCGGTCATTCAACGACAATTTTTCTTG
-TAAATGAAATGGATGACAAAAAAACGTGACTCTTTGATATCTACTTAAAT
-ATATAGGGACGTGAGAAATAGCTTTGGAAAAGGAGAGGACGCAGAGAAAA
-ATTTTCAGAGCGACTTTTTTCCAGTTCAAAGTGCTCCTCTGCCGCTAAAT
-TTTTTTGTAGGGGCCTACTTAAAGGGTCTTCTTCGAAATGACATAGGTTT
-CATTCAGAAATCCGGGATTAAGTTGAAATACTTCCCTTGTTAGGCTCACT
-AGGGAATGACCAGAATAAATGGAGCGATATTCAAAAAAAATATATTGTAT
-CGGAAAGCTGGCATTCTCTACTATAAGAATATGACTGAAATTTTTGCCCG
-TTCGGGCTGGAAATCTGAAATTTTTACGTCTGAAATTCTACACTGAAATC
-AGTGCATTTCCTATGGTTAACAGTGGATTTTTGTCTCTGGCGCCAACAGA
-AGTCTCACCACAATGGTGGAAGGGCGAAAACATCGGTTCGGTGGTCGAGT
-GGTGAACGCGTTCGCCTCTTGAGCAGAAGTTTGTGGGTTCGGTTCCCATA
-CATGGTTTAACTTTTGGCCTTTTTTATACAAAATTTTCAGAACGGGAAAC
-AAGTATTTAGAACATTTTTTTGAGGGTTTTACATAATTTTTTTGCTTTTT
-AATTGAACCATAATTACCCTGGAAACTTTTCAGAAATTTTAATTTTTTTC
-GAAAATTGTCACTTTTTTCTCCACCAAACCCATGAGAAAATTTGATCGAA
-AAATTTTTTTTTGAAATTTTTTTAAAAATGCATGAAATATTTTAGAGTGT
-CACAAATAACCTATTTTTCATTATTTTCAATGACCGAATCATTGATTCTG
-ATGCCTTATCAAGACGTTTTACCAAATCGATATTGGCAAAACATCTTGTT
-TTTGAGGCTCCATATCTCTGCAGGAAAAAATCGCACTAAAAAGTGATCAA
-CTAGAAACTTGTTAAACACAATGTGATCTAAAACATTTCAGTTGAACACT
-TTTTTGTAAAAAATTTCGTTGCCGAGTTGGAACCAATTGATTTGAGCTTC
-ATTATTTTTGAATATTCTAAATAGTTAAAGATCTATATCTTGGCAACGAA
-ATTTTTTACAAAAAAGTGTTCAACTGAAAAGTTTCAGATTACATTGTGTT
-TAACAAGTTTTCAGTTAATCACTTTTTAGTGCGATTTTTTCCTGCAGAGA
-TATGGAGCCTCAAAAACAAGATGTTTTGCCAATATCGATTTGGTAAAACT
-TTATTTTAATTTTTTTTTTTCATATTATTGTTTTTATATTGGGTCAAAAC
-GTATTTGCTCTGCTAAATAGTTAGCTGGCGCTAATTTTTAATTTTATTAT
-TTTCGTATTTTGATAAATTTCACTGAAATTGTCACTTTAATAGTTTACAT
-TCTATTGGTTTTCTTTTATTCAATGTCTTTTGATATCGGAAACGTGATGT
-TTGCCTTGCATCGTCATTTTCCCAATCCCCTCCCATCAAATCCCTCGATT
-TCGAGACATGAGCAGAAGGTGGCAGATCATTTGGCAAGCATTATAAAGGA
-ATCTTATTATGGAGATACCAGTGTGGAAGAATCCGAATATTTGGTTCAAG
-AAGAATATGGCGATTGGGAGCCAGAAGTTTTTGAGGTATGTTGGTTTCGA
-CACTATTAATTGTCATTTAAAAAACCTTTCAGCCGTATGACTGTGTGTTG
-CCGGATCAAGATGATGTATTGTTCGGTGAGAAAGCTGTATCAAGGGAAGA
-GTTGGATAAAGCGATCACCTTCTACCGTAGCGGAAAAATTGGAAGTAGGC
-CGATAACGACTATGCACCATAGTTATCGCTGGATACGAACCGATGCTCAT
-ATGAACAAACTGCGCAAGTACGAGAAAGATAAAAAAGCGTTCCAAGAAAG
-CGTGCGGGTTCGTTTGGCACAGCTTACACAACGGCTTTATGAGGAGGTCA
-AGGAGAAACTTGATAATGGTAACGAACATTAATATAACAAGTTTTAATAT
-AAATATTTCAGGAGTCAATTTGCATGATTCTGATTTGATGGCTATGGCAC
-TGGAAATCAACACCCGCGAAATGAAGTTGCAAAAACAAAACGAAATGAAG
-TTGCAAAAAGCGTCACAATCCTGGATAACCCGATGGAAGCAAAGCCACAG
-GTATGTAATAAATTGCGGAGTATGTTAGATATATATATATATATATATAT
-AATTTCAGAATCGTGAGTCGGAGAGTCACCAAGTTTGTCACACGGAAGTG
-CCTGATCAATAAAGACGCTATCAAAAAAAACGCGGATGATTTTGTCAAGA
-ATGCCAGAACAGAGATCTCCAACTATCACCCGTCGATGGTCTTCAATTGT
-GACCAAACCGGAATTCAAAAGGAGCTGTATCCAGCCCGGTCTTTAGCCTT
-TATGGGCGAAAAAACAGTCGAGAGGTTGGCGCAATCGAAATCGTCGCTGA
-CCCACTCGTTTACGTTTCTCCCGATGATTTTCCTCGATGGCTCAATGGGA
-CCCAAGGCGTTTATGGTAATCGCTGAACCAAAAGGCCAGTTTCCTCCGTC
-TCGTCCAATTCCAAACTGCCCAAATTTGGAAGTGCGGGCTGGATACAAGA
-CACACATCATGACGAAGCAATTGATGTGCGATTTTTTCGAAAGTTGTGTC
-TTCATTCCGTCTGTACCGAAAAAACTGTACATCATGCTGGACAGTTGGCC
-AGCGTTCAAGGACCATACAACGATCAAGAACTTGGTTCCCAATGGTCATG
-ATGTCGTCATTCGCAACATTCCAGAGCACACAACTGGAATGATCCAACCG
-TTGGATGTCTATTGGAATGCGCCATGGAAGGTATGAATTTAAATCTTTAT
-AACTTTTTGATAGTATTTTCCAGAGCTTGATCAAGAAGTTCACAGCATAT
-GCCCTTCGAACCCAGACGGATTACGTCATCGCACAGAGGAACAACGCAAT
-TTGCATGGTATCTGTGTTGTATCACCAGATCTCGGCAGAGCACTTCCGAC
-CGTTTTTACAGCATTGTTGGAAGAAAGCTGGATACGTGGGTGCTGCGAAT
-ACTTCATCAACACCATTTTTGACTCCAGCTCAATATTGCATTGATCATGG
-TGACACAGTGATTTGCTATCACACTGGATGTAACCATCTCGGATTCATCC
-GATGCGCAAGATGCAAGATGTTTGTTTGTTTTAATCATTTTGTTGTGTCA
-AAACAACATCTTTGTTCATCTCCTTGAATAATTAATAAATTCATGATTGC
-ATTACATTCAAGTTTCGCTATGAATAAAATTGTTTATATGAGGGGATCCA
-TGGTTGTAGTGGTCCATGGTTAAGTTTAAATTTTAGGGGAAAAGATGTTG
-AATGAATCATTATGGTGTTGGTCGACACATTGATCATGCTGATATCGATC
-AGAAAAATTAAAATTTGGGCTTTTATATAGTTTCGAAAAAACACGTTTAA
-ATTTTTGAAAAACTTTACGTTAGGGTGGAATTGAACCCCAGAGTCCCACC
-ATGCTTGTCATCCACTCTATCCACTCGGCCATCTCGCTGTTGCAGGCAGT
-ACTAATTGGGGATGGTGATAAGTAAAGCACGTCAAAACGAATAATTTCAG
-ACGTAAAAATTTCAGATTTCCAGCCCGAACGGGCAAAAATTTCAGTCATA
-TTCTTATAGTAGAGAATGTCAGCTTTCCGATACAATATTTTTTTTTTGAA
-TATCGCTCCATTTATTCTGGTCATTCCCTAGTCAGGATCAGCCTCAGGCC
-TAGGCTAAGCTTAGGATTAAGGGTAGGCTTTGGCTTAGGCTTATGCTCAC
-GCTTAGGCTTCGGCTTGAGCTCAATCATACATCTTGCTTAAGCACGCAGC
-TTAACAGCAAAGCTTAAGCACACAGATTGGGCTTAGGCTCAGGCTCAGGC
-TTAGAAAAAGTCGAAAAGTTAACTAAGTCAAAAAATTTTATTGTTAAAAA
-ATTGTTTAAAAAGTATTATGATTTTAATAGAAAATTGGAAAAAAACCGAA
-AAAAAATGAACATAAATCAAAAAAAAAATTTTTTTTTAAAGAAAACTTCT
-TTTTTTTGAAAAAAATGCAATTTTAAGGTTTTTCTGAAAAAAACTGGAAA
-ATACTTTGATTTTACTGTAAAGAGAATTTTTTCTGTTTTTTTCCAAGATT
-TCAACTTATTTCTGCGAGTTTTTTTTTTCAAATTTCCTCTTATTACAGTT
-GGTGTCATTACCGAAAATTCTCGGTCGTCCACATTCTCTCATATATCGTA
-CATCGTTGGGGTCTCGAAGCGAGAGATTTCATTCTTCGTGAGATTTTCGA
-GCTCACTGGTAGTTTGTCCAACTTGATATCAGTGGCTCATAAGGATGGAG
-AACAGTCCAAGGTTTGAGTTTTTTTTTCTGAGTTTGCAAACGCGCCCTAA
-TTATAAAAATTTGGAAAATTCCACGTGGAAAATAGTTTGGCGAAAGTTTT
-TATACAAATTTTTCGTGGAAATTAATTTTTTTTCGAAATTCTCTTTTAAA
-AAATTTAAAAATGTTTTATTGGCGTATTATTTTTCTAAATTTCAGTTTTT
-CGCAGATTTCACCAATAAAATATTTTTTTGAAAAATATCGCTTCGAGACC
-CAAAAAAATAATTATGATTTCAATGAAAAATTGAAAAAAGCCAATGAAAT
-CGAGAAATTATCGAAAATAATTCGAAAATTGGAACTTTTTAAAAATTTTA
-AATTTTTTTCAAAACAAAAATAGTTTCTCAACTTTTTGCTAAACAAGAAA
-TATATTTCGTGGCGAGACCCATTTCTACTAATTTTCTTTTTCAGAAATGC
-ATAATGCGTTTGATTGATGATCTCGTGAAGCTCGCCATGATCGAAACCGT
-ACACGGCCACCGTACCATGAACGAAGTGACACGTGGAAATATTCAAAAAC
-TCGTGAAAACCGGAATCCAAGAGTCTCTGAAATCGGCGCACCGAAATTTC
-TCAAGGAGTTCGACATTTTCGATTTCCGAAGAATGCGTGAGATATCTGAC
-GAGATGGTTGTTGGCCGAACGAAGACTTGAACAGCCGTCTGCGGCTATGA
-ATGAATCGTTTGAATTGACCGGTGATAGCAGTAGTAAGAAGAAGGACGAT
-GCCACGTTTGATAGTGCGTAAATGGAATTCTACCAAAAGGAGATCTACAA
-AAAGAAAATCTACGAAAATAGGATTTGGCACGGTGCCAGATCGATCTTTT
-TTCGGCTCAAAATTGGAAAAACCTGCAATTTTTATACATTTTTGGCTTCG
-AAAATCAGGGAACTCTGCAATTTTTGGCATTTTTCGCTAAAAAATTGGAA
-AAATCTGCAATTTTTATACATTTTTGGCTCACAAACTGGAAAAACTTCCA
-ATTTTCATCTCAAAAAATCGGGAATATCCGCAATTTTCCTCACATTTTTA
-GCTTAAATAATTGAAAAAATCTGCAATATTTTACATTTTTGGCTCAAAAA
-ATCGGGGAATTTTGCAATTTTTTACATTTTAAGTTTAAAAGTGGAAAATT
-GCAAAAATCGGCATAATTTTGAACGTTTTCTTTTTTCCGGTTTTCCGTTT
-TGTTACGATTTTCGTTTTGCATGGAAAATGCTTCGATTGATACCCTTCTT
-TCGGAAACGAGTTTCTCCTGAAATAGGCGTAGTCTCAAACCATTTTATGG
-GCGTGGTCTTTCTCTTATCTTGTTTTTATAAATGTTGTTCATTAAAACAT
-TTTCAGGCCTTATCGATCTCTCCTTTGGCTCGACGATTTCCGGAAAACAT
-AAATTGAACGCGTGGAATGGTGTAATGCAAATCCTGAATGAGCTCCTAAA
-AAGTCGACGACTCGAACTTCAAGTCACTGAAAAAATCGTGACAATCCTCT
-GGGAAAAGCGAAAATCCTACACAACGGAGCCACTCCGTACTGTGTTCTGC
-TCCATTCTCTCCACAGTCGTCTGCCAGGCCGATGTTCGATTCGGTCATCG
-GAAAGTGCCGACAATCGACTCGATTCTCAAATATTCGCTGTCTCTAATGC
-CAAATGTCGCATCTCTTCCCAGTGCCGCTGCGTTGACCGAAACGATTGTC
-AGATTCAGGACAGTATCACGAGAGGGTCTCCGTAACACGTGGGATACCGT
-ATCCCGAACTAGCTCCGGCTCATTTGAAGTTGTTCGGCTGATTTCGGCGT
-TGATCTCCGTTACGGAATTTGATGAGAATTCGAGATTCGCCAACGATGAG
-AGAGTTCGGAGTTGGAGGTAAGTCACTATGCCACGTGGATGGATTTCCTT
-TAAAAAGAGTTTTTGGAAAACAAATCAGATTTTGTATATCACTTCACCTT
-TAAAGCGAAATTCTTGTTTTTTTGCAGTTTTCGAAAAGACATAATCGAAT
-GGGTATTGCTGGATCCGAATGCACATAGTCACAAATTACTCTATCAGTTG
-TGCCAGTATCATCCAACGTATTGTTATGAATCAGAAGCTTCTTCTAGTGG
-TTAGTTTATTCCGTAGGGCTTCCATGGTAGGCAGGCGCGATTTCAGGGCC
-TGACGCCTGCCTGAAACCTGCTGACCTTTCGCCTCTTTTCTCTCATTGCT
-ATCAATTTGTTGAAAATCAAATTAAGAAATTAAAAAAAAAGTTCACGTAT
-GTTTTGTCGTGGATTGAGGCGAGGGGCAGGTGGTGGTGGTCTTAAGGTCA
-GGTAGGCAGGTGTTTTCACGCCTACATTGAAGCCATAGTACCCCATATGC
-CGAAAACGCTGAAGTTTTCTCATTTTTCCAGACGACTCCCTGCTTCAAAC
-TCTGAAACTATGTAAATTAGCTTGCTCTCCAGCTCCCCCATCGGCTCCAA
-AAGCCCTCCGACCACTCGAAGCTTCAATTGAAGAGATTGTGAGATATGTG
-CATGATAAGCTCAAGAGCATTCTCGGTGAGCATCGGCTGTCGTTTTTTTG
-ATTTTTGAATTTTTAAAAACATTTTCAGCGACTGAAATCACTCTGCCTGC
-ATTTGTGCTCTGCCACGAATTTGCTCTGAAGTATCCGGATAGATCTTATG
-AGTTTAATGTTGGTTTTTTTTTCTAATTTTCGAAAAATTTAAGAAATTTT
-AGGATATAAATAGAAATTGAAGAGAATTTGAATTTTTAAAAAATTTCGAA
-TTTATGGAAATTCAGTAAAGTTTGTCGGAGTTTTTAAACGAATTTTCAGA
-ATTTGTAATAAAAACTAAATTTTCTAATTTTTTTTCCACAATTTACAACA
-TCTAAAAAACTTTTTAGAAATGAATTGTTAGAAGTTAGAATTCCTGGAAA
-TTAAAAAAAAATTTGGATTTTTTTAGAATTCTTAAAAGTTTGATATTTTC
-AAATGATATGAAGTTAACACATTTTTTAAAATATTCAAAATAAGAACATT
-TTAATTTTTTTGAAGAAATGTTCAAAAAATTAACATTTTTTGGGACTTTC
-AGAAGTTTCTTCTTTTTTTTTGCGTCTTTCAAGATTTTTTGCAATTTGCG
-TAATTTTTATTAAGGGGACAGAAAATTCTGAGAATGCGGATTGCACAACA
-TATTTGACGCGCAAAATATCTCGGAGCGAAAACTACAGTAATTCTTTAAA
-TGACTACTGCTAAAATTGAGCATAAAAATAAAAATATATCGATGTATCTT
-GGATCCCGTAAATCGACACTAGCGCGCTACAGTAGTCTTTTGAAGAATTA
-CTGTAGTTTTCGCTACGAGATATTTTGCTCGTAAAGTGTGCACGAATTCT
-TATAATATTTTGTTCTCACAAAAGTTGGTCAATTTATGGGATTCTCAAAT
-TTTCGATGTTTTTTTTTTTGAAATTTAAGATTTTTAAAACATTTTTCAAA
-AAACTGATTTTTCTCTTAAATTGAAAAGGTTTTTTTTTCAGAAAATGTAC
-AAAAAGCTCTACCAAATCATGGAAGATCAAGAAGAAGACGAGTTTCTCCA
-ATCAGCTCGCCATTTCTCAAAATGGCCTCAAAATCTGACACTACCAATAC
-AAAAACAGACAATAAATTGCATGGCTGTCTTTTTCGAAGCGAATCTTGAC
-AATCAGCTCGTCGATCTCTGTCAGTGGAGTGACCGACGAAAAGTGCTTGT
-CGAGATGCTCGCCGAGCTGGCCGCCACAAGATCTGAAATTCGAGATAAAC
-TTCAAAAATCGATGCCGTTCAACAAATTCGTCAAGGAGTGTATAATGGAG
-AATCGCGGTGATTTGTATGAAATGACAAAGAGATTTGAGAAATATTCGTT
-TTTGCTCTCGATTCGGAATTTAATTGTTACTAGGATGATTATAACGTGAG
-TGTTTGTTTTGGGGATTGCCACGAAAAACTGGAAAAACGTTTCGAAAATT
-CAAAAAATATTTCTTCAACATTAGAAAGAATTTCCATTTTTTATATAATT
-TTGGAAAGTTTTTAGATTATTTTAGATAAAAAATCATTTCGAATTTACAA
-AAAAAAATTATGAAATTTTAAAAACAAGTTTGAAAATGTATTTTTAAAAA
-ATTTAAATATTAATAAAAAATCTTGTTTGAATTATTTAAATGTTTGCTAT
-TGTGTTTTAAAAAAGCTTAAATTAAAAATTTTTTTCAACAAATGACTAAA
-TTAACAATATATAACAAAAATTCAAAAAAAATTGTTTTCGAGAAAATTTT
-TTGCTTTTTTTAAAAATAAAATTATAAAAAGAAACAGAATAAAAATCGAA
-AAAAAAACAATTATTTTGAAATTTTCAAAAAAACTAGAAAAATGTAAAAA
-TTTTGAGGAAAAAAATTCAAACATCCCAATTTTTGCAGAAACGAAGCCGC
-CCGACTCCTAGGAGATGGTGAAACAATCAGTGAAACCGATATCTTCATAA
-TCGAAAAGCGTACTCTTTCCACGTGTATTCGTAATGTGTCCGAAGGAAAA
-GAGTTGAGCGGCTACACACTGGACCCCTATACGGTAGCTGCCAACGTGCA
-CAATGTGCATTTCGATCACATAAACGTCGAAATCTATCTGGAATTGCTGA
-AAAAGTCGCCATTTTTCGCTCAGAACATTGTACGCCACTTGTTACGGCAG
-AATGGAAAAGAAGCAGAAGAAGAGACGTGGCACTTGCATGCCACTGTGCT
-GAAAATTGTGATGAAAGATGAAAAGTTGCTGGCGGTAAGGAATTTTTTTG
-GAAAAACTTGAAAAAAAAGAATTTCATCGTATTTTTAAATAATTTTTTGA
-ATGAAAAATTCGGTACTTTTCCTTTTCTACCCCGCATTAAAAAAATATTC
-AAACTATTGACTTATTCGAATTTAATTCTCACGTGAATGTTTGTATTAAT
-ACTATTTTCATTTTTAGGCTTAGAAAACAACAGTACTAAGCCTTGAAATA
-CAGAAAAAGAAAAAGAGTTCACGTTTTTATCAATGAAAATATTCCTGAAA
-AAATGCGGGGTAAAAAAGGAAAAGTACCAAAAATCAAACTTTCAAAGTTA
-ACAATACGCAAGTTTTCAAGTTAATTTTAATAATGGATTGTTTAAATCCG
-GAATTAAAAAAGTGGTTCAAATTTTATTTTATTTGACTCTATTGTGGCGA
-TTTTCATGACAATTGAAACGATTTTTGAAACTTGTATTTATTGAAAAAAA
-AGTTGAAGCAGGTCGTAATTTTAATTTGAATATTTAAAAAAAACTTATAT
-GGGTGCTTCAATTTTGCAAAACATTGCAATTAAAAAAAAAATTTTCAAAA
-TGTGGTCGGCAAATCAGAGTGTTTGAAAAAAATCCTTCTAATTGTGTTTC
-CGGAATTTTTGGGATTTTTTCTTCGAAAATAGGAATGGTTTAAATTGAGT
-TAGAAATTTTTGCAAATAAAAATCGGTTTTTTAAAATCAATTTCTTGCAA
-TCAAAAAATTGAAATTTTCAGCAAAATAATAAAGTTTTCTCTAATTTTTC
-AATTTTCAGGTATGCGTGGCCACAATTCCAAATATGGTTCGATATCTCAA
-AGTCTATCAGATTCATTTCAGTCCGAAATCCAACGCGGCGAAGTTCTTGT
-AGGTTTTGTAACTGCGAATTTCAAAATTTTGCTCGTCTAATTTGACGCCT
-GCTCTGTTTTTTTTTACGCGCAAATCTTAGAAATCGGTGACTTTTTCGTT
-TAAAAACACCATTTTTCAGTAAAATCTGAGCAATTTTCGGTTTTTGCGCG
-TCAAATATGACTAATTGAGTCAAACTTGACGCGCAAAATTTTCAAAAAAA
-AAATTCAATATTTTTCCAGACACCTCGACATGGAATCGATTTCCCACTGC
-CAATCATATTTGCGAAAACCAACAAAATCATCCAATCTGATCACGGCCGC
-CAACTTTTTGACACTTTTCGGATGTGAAAAGCGCACGTGGAAGCGCCCGA
-TTCTCAGATTTTGGAGCATTTTCAAGCAGCAACCGGCTATGTGTTGCGAG
-AAATTGCTCATTTTTGTAAGCAATGATTTTTTGATAAGAAATTTCCCAAA
-AATTTTGAATTTTTGAATTATTTTTGTTAACTTCTTATTTTTAACTCAGT
-ATTTTTGCAAACTGAAAATTTCCAATTTTTGGGCTTAAAAAATCTCCATT
-TTTCAGGCTGAAGAATGTGTCGAACTTGGCCTGAACCACCGAATCGCTTG
-TCTTTTACGCGCACTGACAACCAGTGAATTCTGCCGAAAAGCTCTATGTG
-ATGAATATCTGAAAATCGCGTTTCAGCTGACTTATCGATCGATTTTTCTG
-ATTTTAAGCAAAAATGAGTGCAGGTTGGTGGAGAAGGATATGTGGAAAAA
-CAATATTTGAAAAATAAAAAAAAAACTAATTGATTTGAATTTTCAAAAAT
-TCCAAAAAAATAAAGAATTGTATTCCAATTTTCATGAAAATGGCAACAAA
-AAACTCAAAGTTTCATTGGAAAATTTTTGAAATTACAAAAAAATTAATTT
-TTGAGTTTCAATAAAGTTTCAAAAGTTTAGTTTGAGTAGTGTTGTCAACA
-AAAATTGAATGCCTATTAGAAATAGTTGAAAAAATTGGAATTTACAAAAA
-AAAACAATTTTTAAACTAATTTCTCGAATTTCAAAAAAAAAATCTTCTAA
-TTTTTGAAATTGAACAATTTGGAAATTTTTTGAATTTTCAAGAAAAATTT
-TCAATTTTTCGAATATTCAACAGTTCCAAAAAAAAATTTGTTGGATTTTT
-TTCCAATTTTAAACAAAAAATTTTCAAATTTCCACAGATTTTTTTTTAAT
-TTTTTAAATTTCAGAAAAAAATTAATTTTCATAAAAAATTGAAAATTTCC
-ATTCTTCAAAAATAAGTTTTCACATTTTTCAGACCAGAAATTGTGGAGCT
-CTGCGATGACATGAATCTTCGGTACGATCTTCTCCAGCACCAGATCAAAC
-ATGTCGCGGCTCACCATTTGGAGCACTTTGAGCGTTTCGAAACGAAAATC
-GCATTTTCTGTTGAGAAATTTCTGAAATCTGGAATTGATGGAATCGATTT
-TGAAGATTTAGGATTAGTCGAGTTTTATAAGCAGTTGAACGAAAATTTGA
-CAGAAGACGCGATCAGGAGCAATGAGGCGAGAAGTAAGGCCGTGGAATAT
-AAATTGGTGGCCGAGTTTTTTGTAAACTATGCCACCAAACTTGGTTTCTC
-CGTTCGTGGCCACAAAAATTTTGAATTTTTTGAGCTTCTCTTATAATGTT
-TAAAAGTGATTTCCTGGCAAAAATTCATTTCTTTAATTAGAAAATTCCAA
-AAAATTTGAAAAAAAAATGTAAACTCAATAAAAAGTCTAATTGTTTCAGA
-TTTATTCTGGTTTTTATTGAATTTTCAGATTTTTTCTTCAATTTTCAGTT
-TTTTTCGACTTTTCTAATTAAAAAAAACCAATTTTTGCCAGAACAAAAAC
-CATTAAAAATCGACAGTAGTCATCCCATTGGAGTACAAAAATTTTAATGT
-CCAAATTTTCATGACGAACGAAGAAACCTAGTTTGGTGGCCTAGTTTCCG
-AAAAAACTCTGTCACCAATTTCTTTCAAAATTCAACAAAATTTTAGTAAA
-TTCCAAAAAAACGAACATATTCGGCGAAAATTATTTCAAAAGCTTCCGAA
-CAAAATCTAAAAACGTTCAGAAAGTTCTGGGTAATTTTTTAAATATTAAA
-AAAATTCAACAAAAAAAGGGGGGCAGATAGCTCAGTCGGTAGTGGTGGCC
-GCTAGCAGTCTGGAGGTCACGAGTTCAAGTCCGGCCTCACCCCCTAGGTT
-CACCCAGCCTCTATTGGGAAGTGGAGCAATCCACGACTGGATTATCGGCC
-ACAGTCCCCGGCTAGGACGTGGCTTAAATTACAGCCCAGAGGGATCACCA
-CCAGGCAGTGTACCTGAATCCCAGATCCGCAGTGCATAGCACTTGAAGAA
-CGGATCGTCCTTTAATTCTTTCAAAACTAATTTTTTACTAAAAAAAATTT
-CCAGACATCTACATCGTCGACATTCTCTCAACAATTTGGCTCCAGCTCCC
-CTCAATTCGTCCTCAAATTCTACCGATTCTCGCCCGCTTCAAGCACATTT
-CCCCAGCGTGGACTAATTTCCCACAGCCGCCTCATATTTCGACAAACGAG
-AAATCATTTCTTCAACATCTACGATTTCATCTTTATCTAAAAATGATGAA
-TATCTCGAAATCCATGACGCAAGGCGAGTATGCCACGTGTATTATGATGC
-TCCTGACGAGCTACGACTCGAGCCATTTCGTTGCGGATTTGATAGAGAAA
-AAGCAGCTGGGAAAGCTGAAATTGCAGCAGAGAAGGAATGTTTTGTGCAT
-TTTGAGCCGACTTTTGAAAGATCAAGCTGTGATGGGTGATGAAGATGAGA
-CGATTATCGATCCGATTCTTTTTAAGGCAATCACCAAAGCTTCCGCCGTT
-TTTGTACGTTTTTATACGACGGAAATCACTGAATTTCATGTTTCTATGCC
-GAAAAATTATGAGCAATTAAATATACATCACAAGAAAGAAAATAGTTGCC
-GGTTTTTGAATTTTTCTGTCATATCGGCAATTTTGGCAACTGCCACTTTT
-TGAAGTTTTTAAAAATTTGGTAAATTTGGCAATTGCCAAAATTATCTCTG
-TTTCGATTTTTTTCATCAGAATCATAATATTTTAAATTTCGCGCTAATTT
-TTTTAGCAAATGATCTTCGAAAATTTAATGTCTCGCAGTTAAAAATACAT
-CTTTGCAGGAAGACACCGCCGCGTGCATCGTACCATTTTTGTTCAAAATT
-TGTGTGGATTTCAAGGGAAAATACGATAAATGTGTGATAAATTTGCTGGG
-ATGTCTTAAGGGAGTTAATGCAGGTATGATTTTTCGTCAGAAATGACTGG
-AACGAGTTTTTCGCATCAATTCAAATTTAATGTAATGGCATTTGGCATAT
-GACATCGAATGTCGAATGCTGGGAATGCCGAATAATATATTTTGGTCGAG
-TAGGAGAATAAACTAGACAAAGTTCAAATATATTCCCAACAGGGATGGCT
-TCACCCGTGACCCGTTTCACCCGTTCACCCATTTTTACAAGGGAAGGTTC
-TGAACTCGTTATCGGACTTCGTTACGCCACTATATACATTCGATAGAGAA
-TGGTTACAGATGATCACTCCAAAAAATTTAGCTGCTTCAGAGCAGGTTCG
-ACCAAGTTACGACACTTTGAAGATGCCGAAAAAAAAAATCATTGATGCAC
-CCCCTTTGAAAAAAATTGAAAATTTTCACTGAAAATTTTTTTTTTCTGAA
-AGTTGATAAAAATAGTTGTAATCGATTTAAATAGTAAAAAACATATATTA
-TACAAGTTTTAGCCCATCACTCTCAAAAAAACCCTTAAATTAATGTACAT
-ATCTTGAGAAAAATTCCAAAAAGTAGATGTTCATGTAGATCAATTTAAGG
-GAGAATTATGAACTGAAACTTGTATGGTATGATTTTTCCATCATTTGCAA
-CTATTTGAAAACATTTTATATCAACTTTTAGAAAAAAAATTTTTTTTTGA
-ATTTTTTGGAATTTTTAAAAAGGGGTATTTTGGCACTTTCAAAATGTCGT
-AACTTGGTCGAACCTGCTCTGAAGCAGCTAAATTTTTTGGAGTGATCATC
-TGTAACTAATCTCTAACGAATGTATATAGTGGCGTAACGAAGTCCGATAA
-CGAGTTCAGGGCCTTCCCTTGTTAGGCGTTTTTACGGGTGACGGGTGACC
-CGCTCGCCCGTTTTTTTTTTCGTTTTAGTTGTTTTCACGGGTGACGGGTG
-GCTCGCTCACCTGTTTTTCACCCGTTTTTGGAAGTTTTCACGGGTTATGG
-GTGATCCTTGGTTCCCAAGAGGCAGCCAGTTTAGGTCAATAGGTCGTAAA
-TATCGTTTTGGGCCACGTTTACAACTGGGCTGTGTGCAACTAGAGGTGCA
-CTTGGGTCGAAAAGGGTCGACCCGCTCCAACTTTAGGTAGCATTTGTAGC
-GACCCCGATAAATAAAATGTCGACCCCGAATGAAAATTTTAGCAAGGAGG
-CCATGCTCGTTTAATTTCCATTTTCAAAATTATGATCGGACTATTGGTTG
-AGCTACTGTGAAATAAGCGGGTCGACCCTGCTCGACCCATGAGCACCCCT
-AGTGGCAACCATGATTTTCGGCAACTGGCAATTGCCAGAGTTGCCGAACC
-CAATAAGTTTCGGCAACCGGCAATTGCCGAAGTTGCCGAACTCTAAAAAG
-TGCAACCGGCAACTTTTGCGCAGCCCTGGTTTACAACTACCTAACGACTT
-TTGGTAGACTAGAAATAACACATGTATTCGAATTCGACATATGCCGAATG
-CCGAAAAAAGTATTGAACGACATTAGGCACAGGGATGGGCGGATACCTTT
-TCGGATAACTTCACTAAATCAATTTATCAATAAGTATTGATTTAGTTATT
-CTGGAGATACTATACTAGAATAAAGAGTACCTATTGAGCAACATTTTCAT
-ATGACAAAAACTTTTAAAATTGTACGCATTTTCCTCGACAAGACCCTGAA
-ACTCGTTATCCGATCAAAATCGGCTAACAGATAACGGACTTGCATACTTT
-TTATACGGGAAACGTGTAGAATTTTAAAAAGTTTTGTGCCATGAAAATGT
-TGCTCACCAGTTTCAATTTTGTTCTGATGCACTTTTTCCAGAATTACTAC
-ATCAGCACGTATTGATAACTTGATTTAATGAAGTTACCCGAAAAAGTATC
-CACACCCCATAATCAGCATATTTCATATGTCAAATATCAAATTTCCTGAA
-TTCCGCACACCTCTGCTCTCCATACTCCAACTAATTTTAATTGCAGAAGA
-CGAAATAGTAGTCCGCTGCCTTGCCGAATGCGTCGACTCCATTGGACTCA
-ACGTGATTGCTCGTTACGAACGCCTGAACATTGAGACTCATTCGGAATTC
-GGTGTGAAATGGTTCTTCAAATTATCCCGTCTCTTTCTGAAACATGGATT
-TACTACGCATTCCTTCGCGATTGCGAATATATTATTTGACCGACTTTCGG
-CGAGAAAACGAAATACAATGATGATAGATCGTACGAGTTTAGACCGAATT
-GACAGATCACAGGAACTTATCAATCTTTTGGTGGAGATCTATGTGGCCGA
-GGGTAACTCGGTAGCGTTGTCCTCTCTGCCACCTGCGGTACAAAATAGAC
-CGGATGTTCGGCAGGTTATGAATAAGAGTTCAAAGGAATGGTTGAAATTG
-CTGTCTTCGAATCAAATGGACTCGTGGGAGTTGACTATTGTGCAGTGGAT
-GTGGTAATTGTTTATTTTGAAATTTTTCATTAGAATAGAAAGCAGTTTTC
-TGGAAATTTTCAGGAAAACGCATTAATTTTTTACCTATTCTGCATTTCTA
-GGTTCTTCAATTTTTTGAGAAAATATATATTCCTTCGAAAAAATCACTAA
-CTTCTTTTCGGAAATTTAAAAAAGTTACAGTCGACGACTTTAAAAAATTC
-AGTTAATAAAATTAGATTTCAAAAACAAATCGAATTTTTTAATTTGTACC
-GAAATCTGGAAAATATTTTTAAATGACTCCAAATTTTTCCCTGATTCCAA
-ATATCTATGAGATAAAATTCAAAAAATAATCCCTTTTTGATCTTGAAATC
-GCCGAATTTCATTTGTGCACTCATGAGATTTCGAAGTTTCGCGCCAGAGA
-CCCCATGTGTTGATTTACGAGATTTGTGTATATTTACGAACCCCTTAACC
-TTTATCGGTTGCTGATTTCCGTTTTTCAACGAGTTTTCTTCAGTTTCGTC
-GGTTTTTGTTAAAGTTTTTGTTTAAAACATTTTCAAAAAAACTTTGACAA
-AAATGAAGGGAACTCGTTGAAAAACGGCAATCAGCATCCGATAAAGGTTA
-AGGGGTTCGTAAATATACACAAATCTCGTAAATCGACACATGGAGTCTCT
-GGCGCCAAAATTCGAAATCTCATGAGTGCACAAATGAAATTCGCGATTTT
-AAGCTGAAATAAAGAACCAGGGAAAAACATTTTTTCACATAGATGTTCGG
-AATCAGGGTCAAATTTAGAGTGAAAAACTTTTAAATTTTTAAATTTTTTC
-AGTGGCATCCAATTCAATGCAATCACCGGCGATAAATACCTGAATTCAAT
-TCTTCGTTGCAATTTCAACGAGTACACCAAAAAAATCGATTCCCCATTAA
-AATTCGTCTATTTTCAACTATTCCATCTTTCGACGAGCACTCTGGAAATC
-GAAGAAGCCATTTCTAGCATGCCGTTGGCTCCAACAATCGATCAAATGCG
-GCTTATGATTATAGCCAACGCGACGGCAAGCTTCGAGCCACAATCCGTTG
-AAGAGCACGTTGTTCGAGCTGTTCGAGAGCTCCGAGAGACGTCAAATCGG
-CGAAAATCCGGTGGAAATGTGAAGGGAATTAATGAAAAAACAACGAGAAT
-GGTGAAACTGGCCGAGATGCTCACCGAGAATAAAGCATACGATGTACGGA
-GCAAAAAATAATGGAAAATTTGAATTTATTCAATTGTCAAAAAAAAGGAA
-ATTTCCTTAATTTTTCGGTTTTTTTTTTCGGAAAAATCTGAATTTTTTCT
-ATTTTGAGCAAAAAATTTAATTGAAAATCCGGAGAAAATCGTATACTTTT
-TCTGCGAACCATTTTGTGGGCGGAGCCTAACTAGTAACACTTTTCAATTT
-CCAAACAGAAAAGTGAGAAAAAATTCCTCTTTTTCTCAAAAATCTAAAAG
-AAAAAAAAATCGGAAATTTTTGAATTTTTCGGTTTTTTCTGAATTTTTCA
-ATTTTCATTCAAAGAAGGTCGAAAACTTTTCGATTTTCCGGTTTCCTTTT
-TGAAAAAAAATATTTTAAAAATGTGTAGTTTGTAGTTTGTAGTTTTTGTA
-GTTAATGTCTTCCACATTTTTAGGCGGCAATAAACCTGCTCGACACGTGG
-GAGCACGAGTGTCTCCAATGGACATCTGTCGCTGCCGAATCAATCGATAT
-CGATTTAATTCGAATCTGCAAACAACACGTGACGTGTCGGTCGGGAGATC
-CAAGAATGGCGGACATAAATCTACGAACAATGCATCCACGTGTCCCGGTG
-ATGAGTGACCTGGCGATTGCCGAATGGTCACTCGCGTTGAGCAAGATTAC
-AATTGAATATCGGAATGATATGGAAGAGGGTATTCGGATTTTGGAATTTG
-GATGCAAACATTTACAGAATAAGGATTCTGTAGAGACGAGGTTAAAGGTA
-CATGCGGTCGGGTCTTGCAGCGAAATAATGCATTTTTAAAAATTCGAGAA
-AAAAATTGTGAATTTTGCGCGTAAAACGTGATTCAATCTCGAATTGTTCT
-ATAGATTTTTCCGACAATTCGGAAAAATGCCGGAATTGAAAATTTCCGGC
-AAATCAGCAATTTGCCGTAATTCAAAATTTCCGGTAAATCGGCACATAGC
-CAAAAATTAAAAATTTCGGCAAGTCGGCAAATTGCCGGAATTCAAAATTT
-CCGGCAAATCGCCAAATTGTCGAAATTCAAAATTTCCCGAAAATCGGCTA
-ATTGCCGGAAGTGAAAGTTTTATTGATAGAGATAAATTTAGAACTATCAC
-TAGAATTTAAATGTAAAACAACTAGGAGTTATCATGTAAAACTTGTCATT
-TGAATTTAACACTAGGAGTCCAATAGATTTTCAGATTTTAAAAAATTAAT
-ATAAATTCAGGAAATTTTTTTTGAATTTATCCACATTAATATTCGGTATC
-AGGAGCATAAATAGGATCTATTGAGATATTTTAACAAATTTCCGAACAAA
-GTTTCAAATATTTTTTTCCAATTGATAGAATGTTCCATGAAACATTACAA
-AAAAATTATTCATCAGGTTCTCCTAAAACTCCATTCCGTCTGTATTGGCC
-AACTGTCGAAACTCGAAGAATATCGCGAAACGCGTACCTACCGTATGAAG
-CAGCAGGCGGTCACCGCATTCGAACAACAAATTCAAAATTCGTGTCGAAC
-CAGTCTGGCACGTGGCAATTCGGGTGACGAATGGACGAAAAAAACGGTGC
-AACGGGTGAGAAAAGAGCATCAGTTTGAGAAGAATGATTTGGAAAAAGTG
-GATAATTCGTTGAATTCGGCGGCCCGGAAAGCTGTATCGTCGGGTTTTGA
-TGCACTTTGTGAGCAATTTTTGAAGTTTTTATTGAAAATTCAAAACTTGC
-ACAAAAGGATTTTAAATTCGATTTTTCGCGATGTTTTAGCAATAAAATTT
-TGAAAAATGACAAATTTTTGAAATAATTTCAGAAAGAGTGTAAAGTTTCA
-GAAAAAAAAATTAAAATTAAAATTTATTTTAAAACTTAAAAAAACCGACT
-TTTAGCGAATTTTTTTACGAAAAACAAAGTATTTAATTTCATAAATTAAT
-TCAAAAAAAATATCTAAAATTTTTGTGAAAAACTGTTTTATACAGTTTCA
-GAAAAATTTAAGAAAAAATTTTTTTTCAGAAAAAACCGGATTTTCTGTTA
-ATTTGAAATTATGGAAAAAAAAACCCCAAAGGGTATTACGGAACTACAAA
-ATTCTGAGAATGCGTACCGCGCAAAATTTCTCGTGGCGAAAACTACAGTA
-ATTCTTTAAATGACTACTGTAGTGTTGGTGTCGATTTACGGGCTCGATTT
-TAAAATTGAGCAAAAAATTATCACATAATACGAAGAAACGAAGGAAAATG
-AAACTAAGTTATAAAAAAATTCGAAAATCGAGATCCCGTAAATCGACACG
-AGCGCTACAGTAGTCAAAAATTAAATTAAAATTAAAGGATTACTGTAGTT
-TTCGCTACGAAATATTTTGCGCGTCAAATGTGTTGCGCAATACGCAGAGA
-TCTCAAAATTCTATGCTCCCGTAATAGATTTAGAAAAATTTTCCGAAAAT
-TTACGTCTCGAAAAAGAAAAAAAAACTGGTGTAAAAAATTACACCAGTTT
-TAATATTTACTGAAAAAAATTGGTAAAATCTAAAAATTAATCAGCTGAAA
-TTGATATGTTTTGGGATAAAAAATTTTGGCGGGAAACTCAAGTTAAAAAA
-AAAAATTTCAGTATGCATCAGCCAACTGGAAGACGACGACGAAGCGATCC
-GCGCTTCATCTCTCATAATATTTCCATTAATCGATGTGATCTACAAATAC
-GAAACGGACGTCGGAGTGATCGCCTTGCTCAAAGAGCACACCAAATCGAA
-GCTCCCGTCGAAGCTGTGGATAAGTGCCACCTCACACATTGCCTCTAAGT
-GCTTCTCCATCGAAAAATCGCAAATCACGAGACACTTATCACAGATTCTG
-TGTCATCTCATCTATGACTACCCGTATCACGTTTTGCACACAATTTTGAT
-GTATGATGACGAGAAGAACGCTTCCAAGGTGAAAGGCTTCTTGAAAACGA
-TATTTGACGCGCGAGCTGACCAACGGGATTCGTCGAAGCTTAAGGAGATT
-GTGATTACTATTCGTGAGGCTCACCAGGCTTATAGGTACATACGGCGGCT
-AAATTTTTTTTGAAATTTCGAAAAAGACGAGAAATTCGATTTCTTATCAA
-GTTTACAAAAATCTTCGCTTTTTTCTGACAATTTTAGTGTCGTGGTATCC
-AATCAACGAAAAAAATTAGGTTCTTCTGGTTATTTTTGAGCATATTCAAT
-AATTTAAGCAAATACTCTTTTACTTCTAAACTTTCATCGGCGATACGTGA
-ACAATTTCCAAAATTATATATTATCTAACGCTACAGCATATAATTTTTAC
-CAATTTTCATTCATTTTGATGGAAAAAAGCATCTAGAACATGTAATATGT
-TCAATTGTTCGATTTCAATAAAAACCGACGGCATCCTTGGTTTGAATCGA
-AAGTTTAGAACAGTTTTTTTCAGAGAAATTGCAATGCTTGACGTGAGAGG
-AAACGTTCGGATACAACGTGTTGAAATAAACGGAAAAACGATGTACCGAT
-GGCCACATGATTTGAAGATTTTCAAGTGCAAATTGCGTCAATTGCCGATT
-CCCACCATTTCGCAAAAGGTTTGTTTTTATTTTATTAAAATAATTTAATG
-AATATGTATTTGATCATACAAAAAAAAAATGTTTTCTTCTAAATTCCAGA
-TTGGTTGCCCGGGTGACTACTCGACGACTGACCTAATCACGTGGAAACGA
-TGGAAAGATGTATTCACAATTGCCGACGGAATTTCCACTCCAAAAATCTG
-GGAAATTGAGGGTAGCGATGGAAAATGGTATAAAACTGTGTGGAAGAAGG
-ACGACGTACGACAGGATGTGCTTGTTGAGCAAATGTTTGATGTTACGAAT
-AATATGTTGGAGAAGGCGATGCTTCGGACGTATAATGTTGTCCCGTTAGA
-CACTGAATGTGGAGTTATAGAGTTTTGTGGTGGAACTGTTAGCTTAAGTT
-CGTTTTTTTTTCGTTTTTGAAAAAAACCAAAATAGTATTACGATAACACA
-ATATGCTGAGAATGCGTATTGTACAACATATTTGACGAGCAAAATATCTC
-ATAGCGAAAACTACAGTAATTTTTTAAATTACTACCGTAGCGCTTGTGTC
-GATTTACGGGCTCGATTGTCGAATATTACGGGGCCATGAGATCATGAGTA
-TGCCTATTTACTGGCGCGAAAATATTGGCAGGCCGCGGCAGCGAGAGAGC
-GTGTGGCGAAGAGAGACGCAGGTCCCTTCGCTACGAGATATTTCCCGCCA
-GAAAAGTAGCATTCTCATGATCTCATGGTCCCGTAATAGTGACAGCGATA
-TTCCATTTATTTCACTTCAAAAATCGAGATGCCGTAAATCAACACAAGCG
-CTACTGTCATTTAAAGAATTACTTTAGTTTTCGCTACGAGATATTTTTCC
-CGTCAAATATGTTGTGCAATACGCATTCTCAGAAGAAAAAAGAGGGGGGC
-AGATAGCTCAGTCGGTAGTGGTGGCCGCTAGCAGTCTGGAGGTCACGAGT
-TCAAGTCCGGCCTCACCCCCTAGGTTCACCCAGCCTCTATTGGGAAGTGG
-AGCAATCCACGACTGGATTATCGGCCACAGTCCCCGGCTAGGACGTGGCT
-TAAATTACAGCCCAGAGGGATCACCACCAGGCAGTGTACCTGAATCCCAG
-ATCCGCAGTGCATAGCACTTGAAGAACGGATCGTCCTTTAATCCTTTAAT
-CCTTTAAAAATGTAAAAAAATTTCATTGCAAAAATATCAAACTATGAGAT
-TTTTTCTATTATTTTTCAGAAGAAGTTATGTGTGGTGTGACACGAGAAGG
-CGGTCTCCACCGGGAGTTCAATTCAGAAGAAGTTTCGGCGAGTAAAGTGT
-CGTCAATGATGAGACAAGTACAGACAGAGTCCACAGAGACACGACGACAA
-GTTTTTGTGGAGATTTGTCAGCAGTATTCTCCAGTTTTTAGGTAATTTTT
-CTGAAAGTTGTCGAAGTTTTTTTTTTTGAAATTCAAAAAAATTCCCAAAC
-AATTGGCCTTTTTTCAAATTTTTCCAAAAAATAAAATTACAGACACTTCT
-TCTACACCAACTTTTCGACGGCGCAGATTTGGCGGCAAAAAATCATAAAT
-TACAGGCAGAGCTTGGCCACGTGGAGTATTGGTAGGTTTCGAACTAAAAA
-TGCTAAAAAATTTTCGAAGAATTCGAACATCTCAGATTTTTTCCGAAAAA
-TAATAAAAACGTTATTTTCCAATTTTCTGAAAATAAGAATTTATTAGTTT
-CTTGCGAAATGAAGAGTCTCAAAAAATCATATTTTTTTTAAAAATCAGAT
-TTTTAAATTCTTTTTTTAAAAGTTTTATCGTGAAATTGAACGTTTATGAA
-AAATGGCGAGAAAAACTTTTTTTTCGCTTTTTCAAATAATTCTCAAAATA
-AAAATTCCAGTGTGCTACATCGTTGGCCTCGGCGATCGACACGCGTCGAA
-TATTCTATTCGATCAGAAATTGTGCACATTTGTGCATATCGATTTGGGAA
-TGATTTTGGAGTATAGTAAACGAACGTTGCCAGTTCCCGAACAAGTTCCA
-TTCCGTATAACTCGAGATGTGCTCGACCCGATTCTGATTGAAGGAATCGA
-GAATGGACAGTTGGCTGAGGAATGTACGCAGATTATGGAGAAATTGAAGG
-AAAATGGAAAGGTACGGCGGTCTGGGGAAATTTATACGAAAAGAAAATTT
-TGGACTGACAAAATTTTGGACTTGTAAAGCTATTTAAAAAATTCAAATTT
-CCCGCCAAAAATATTTTTTCAAAGAATTTGAATTTTAGCTAAATTTTTAA
-ACAAAATCTGAAGTTACCGCCAAAAGTTTTCCAAAAAAAATCGAATTTCC
-CGCCTAAAATGTTTTTCAATAAATTCAAATTCCCGCCAATTTTTTTTACA
-CAAAATTTGAATTTCGCGTCAAAAATTTTCCAAAAAATATTCAAAATTCC
-CTGAATAGTTCAATTTCCCACCAAATATCAATTTTTCTGAATAAAATTTT
-AGAATTTCTCGCCAAATTTCTTTTTCAATTTTTTCAATTTCCAAAATTTC
-CAGGTAATCCTCGGTGTCGCCTCTGCTCTACTCCGCGAAACGATGACAAA
-TTTCCGAGAAGCCGAACAGGCTGCCGGCCGCCCGTCCTACATTTCTGAAA
-TGGCCATCGGACGGCTTCGAGAAAAGCTACGGGGCACCGATGACGGTGTG
-ACGGCCCAATCGTCGAATCTTCAAATTCGGCGACTTTTACGAGAAGCTAC
-GAGTGCTGACAATTTATCGCGAATGTTCTGCGGATGGATGCCGTTTTTGT
-AGAGAAATCAGAGAAAATTTTTCTCGAAAATTAAAATTTTTACTGTATTA
-TTGTTTTCTCGTATCAATTTTTCAGAATTTGCTTTGTTATTTTATTTTAC
-GCGCAAAATAATCTTTCTAATTTAGAAATTTTAAAATTATGGAAACTTTC
-TGAAATTTCTGCAAAATTCTAGAAAATCAAAAAATTTAGTTTTCCATCCT
-AATTTTTTTTTTCGTTGATTTTCCCCAGAAAATTCAAACTTTTACTGTAT
-TATTATTTTTTCATATCATGTAATGTTTTTTGTTCAACATTTACATGTTT
-TTCCTACCTCTTCTATGATTTCCCCTTCCCCCAGGTCTCATTTTTCTTCA
-CAATTTTTAAAATTGATTCACTGTTGAATGTGTTGTCTTTTTTCTATGCG
-AATTTTATTAATTTTATGAAAAAAATTTGTAATATTTTTGTGTAAATTTT
-GAGTCTTCTTACACTACAAAGTTAACCATTTCAGAGGAGTTTCAAAATAA
-ATAGTGAATTTTTACAAAAATTAGATTTTCTGATTTCAGCGTACATGAAT
-TGCCCGTTTTCAACAAAATAAGACAACTTTTTATTTTTGCCCAATTTTTT
-TTCAGCCATCTAATGACTGTCCTTTTTTTTTGGGCAAAAATAATAAATTT
-TCTAAAAGCGTTTAAAACTATTATATTTTGAAAAAAGACCATTTTTTAGG
-GCTTGGCAATTTTAAGTTCTCTAGCTACAAATTGAACCAATTTAGAGGTT
-TCAAAATTGTGAGTTTTTGCAAAAATTGCCAAATTTTGCCACTTTTTAAT
-GGTTTTTGATGGGTTAAACCTAGATTTTCTGAATTCTGCATATATGAATT
-ACCCGTTTTTAACAAAATTAGACAACTTTTTATTTTTGCCCAATTTTTTT
-TCAATGACTGTCCTTTTTTTTTGGGCAAGAAAAATAATTTTTTGGAATTT
-TTTTCTGAAAATGTTCGAAATTTTTGAAGTTTCTCTTGAAGCACTCCGAA
-AAACCAAACGACCAGCACTACTTGCAAAGTCCGAAAATTTAAGTTTAGAA
-AAATTTTGAAGTTTTAAAAGCTCCCAAACCAGAAACTCACGATATAGAAA
-TTATTTCCAAACATTTCCGAAAATTCCAAAAAATGAAAAATCAGAACAAT
-TTCGAAATTTTTTTCAAAACACTTCTGAAAAAAACCGAAACTGCAAAAAT
-TTGAAAATGTGCTAAACTCCAAACTGTACGATTTTCCACATTTCAGAAAT
-TCCAAAATTCGTAAATCTGCCAAATCCCTTCGGCGCAATAATCCCCCGGG
-GTACCCCCCCCCCCCGCCCTAAAACCTTTTGCCTCTATTGTCTCTGGCGC
-AGAAAATTGAAATTAAAAAATGAATCGATATTTTAAACTGTTATTCGTAG
-CCATCTTCTCCGGATGTATAATCGCCTACACGAATCTATTCAATCGATCG
-TTTTTCAACGGGTACTGTAGTAATAATGCTACGTGGCAACAGTCACAAGG
-CGAAAGCGACAGTCACGTGGCAAATTCGTTGGATTTGTGTCGTGGCGATG
-GTGTGAAGCAGTGTATTCCGCCGTTGATGAGGTTCAAACAGTTGTATCGG
-GTGAGAAAGATTATCGATTTTTAACACCCGTCTCGCCAATTTTTTTCTCA
-GAAATTGGAATTCCCGTCACAAAACTTTTACAGAATGTGAATTTTCGAAG
-AAATTGGAATGACACCCAAAAATTTTCTCAGAAATCTAAATTCTCGGCAA
-AAGTTTTCTCAGAAATTTGAATTCTCGTCAAAAATTTTCTCAGAAATTTG
-AATTCCCGCCAAAATTTAAATCAGAAATTTGAGTTACCACCCTTCTCTTC
-AAGTAACAGTATTCAACAATATACAATTAAATAGCTTTTCAAATTCCTAA
-AAAGTTTGCTGGAGTTATCAATTTTTGATTCAAAACTCGCTAAACCACTT
-GCCCATGTAGAATACATAATCAATTCTGAATAGAACGCTATTTTATCCTA
-TTTTCAGACATCAAAACCGAATAGCCTAATCGCATGTGTCATTGAAAAAT
-CATTTTCGACATTTCTTACTGCTATTATGTGCTTTTTACACGATCCACAA
-ACATTTAAAGACAGCAATCGAACACTGGATTCTGATATTTTTGGAGACAG
-GTTTGCGGCAAACGAACTCCGCTGCCGACTCTCGAATTATCAATTTTGCA
-GGCTTTGTAAGGATAAAAACGAATTTACCGAGTTGAAGAAGATCGGAAGC
-TGGCAGAAAATGTCGATTTTCACTGTGGTTCGGAATCCGATCGATCGGTT
-TGTATCAGGCTTCACGGATAAATGTTTAAGAGAAAATGTCTGGAAAAAGT
-TCAAAAATCGATGCGCCGGATGTAAGACTGTGCGTTTTATTTGCTAAAAT
-CTTTTACTTAAACAATTTTTTTGGAATCTTTTATTTTCGGGAGTTTCGAA
-AGTATATTGGAGTTTTTTAGAGAAAAAAATATCAATTGAAAAAGGTTTTT
-TGAAAGGGGGTAACATTTTTCTAGGCCACTAGGCTTTGTAAGGTGGCCTA
-GAAAATAATGTAAAAATCTAGGCCATAAGGGTTTATTGCGTGATGGCCTA
-TGAAAAAGCTAGGTCGCCATAACTTTTATCAGGGTTTAGGAAAGTTAAAA
-CTTCGGGCAGCAAGTTTCGCATAATGACCTAAAACTTTCTGGAGAACTAG
-GCTATAAAAATGTTCATGATGGTTTCAAAAAGCGGAACATTCGGTGACCA
-TAATCTTCTAGAATTTTTAGGAAAACTAGGCCATTAAGGTTTCTTCCGTG
-GTCTAGAAATTCTGGAATACTAGGCTGCCAGGGTTTCTAGGCCACATAAG
-AAAGGCCTAGATACAAAAATTTCAGAACGGTCTAGAAAAGTGGATAACTA
-GGCCACCAATTTTCTCTTCGGAGTTTCAAAAATATATGATTCATGATTTA
-CTTTTTTAAGAGTTTTTTTTTTCAAAAATTCTAAACTTTTGACACTAAAA
-TGCTTCTGAATTTTTGAAAACTTTGAAAATTAAATGTTTAAAAATAATTT
-TTTGAAAATCTCTCAATTTTTTTTCTTCGAAAAGCTCAAAAAAACGATAA
-ATTTCCACATTTTGGCCAGAATTTAACATGTTTCGTCGATAAAATGTACG
-ATCGGATGCATAGATTCGCGCGGAATCCGTATAAAGGAATCGATTTCGAC
-GACAGTCACTTTTTCCCACAATCTTGGTATCGGTAAACGCGCTCTATAGA
-TAAAGTCTCAATGGAGCGCATTTGCATTTTGAAATTTGATATATTTGTCG
-TTTCAGGAGATGCGAGTTCTCGTCTCATCTTGTCAAATACCAAATTTTTC
-AATTAGACGGTGCAAATTTCACAAATCAACTTCTTGGACTGCTGTCCGAG
-CGGGGAGTTGATGAGAATGGAATTAACTTTATTAGTGAGTCTTAATCAAG
-TTTGGGTCTCACCGCGAAAACCGTAATTGATTGGGGACAATGGGACCCAA
-GAGAGCCCAATGGAGCGGAATTGCAACTCCTATGAATTTTCCAGACGGAA
-GTCTCCATCACCGGACCCCACACAGCACAATGGATTCCGTGGAACGGGCG
-GCCGTCGAGGAAACTGTTCTGAGCAGTCCGTATTTGTTGCGAAAAATAAT
-TCAAATGTATTATTTTGACTTTTTGCTATTCGGGTATAAGCTTCCTGATA
-TTCCAGTTGGAAATTAGGAAAGTTCTTTATATGTATTTAATTGTTGTTAA
-ATAGTAAAAATCGATAAATTGCTTGAATTTTGATAAATTACGGCCACGTC
-AATTTTTAGATAATTAACGGGCAAAAAAAATCTAAAATTCTTACAAATTG
-AAAAAAAAAATTTCACAAAAAATAATAACATTTAGTCTAAATGTGTTATA
-GCTTAGGCTGAGGTTTAGGCTTGGGCAGGTTATTTTTTAATTTTCAAGGT
-TTCTCATTACATACTTTATTTCCGAAATACAAAAAAGAAGTCTCACAACG
-AGTCATCAGTGCGTGTTGGTGGGTGGGGTGGGAGATTCTGGTGGCGACCT
-ACAACTCACAAACAAAGATGACAACAGGGAAAATGTACACGTGGCAATAT
-GGTGAAGCTATATGTATATATAATGAATAATGATATGTAAATTTGCATAA
-TACAGGAACAGTACGTGATTGCTGGGGCGAGTAGAAATGTGGGTTATTAT
-CTATCGATTACCATTACACATGAATTACGCTGGATTACGGTTAGAATTTT
-GTGAAAAAAAATGAGTAAAACGCTGGGGCTATAAATCTATAATTGTCGAA
-GATGCTCAACGAGCCAGGAACGAGGGGAACATTGCGTCAAACTGGGCGGT
-CAATTCCATTAATGATGGTGCAGCTTGTGCATTGATTGCTGCAGCAGTAG
-GGACTCCATGCCTCATCACCGAATCGATAATCTTCTTTCCAGATGAGAAA
-CGCTCGAGACGGGAGGCGTGTTGGAGCACACGCTGCTTCATTTTCTCGTA
-CCATCCAGAGTAGAGAAGCAGAATAGCTGGTGGAAGTTGACGTTCTCTGG
-AAAAAAACAAGATTTTCTCTAGTTGCCTTAACACTTGGATTTACAGAATT
-AGTGAATATTTAAATCAGGGTGGGCGGCAATTTTTTTTCCGGCAAATTCA
-GCAAATTGCCGATTTGCCGGAAGTTTTTAAAAGGATTTTTAAAAGACGGA
-AACACTTAAAACTGTGCCTTTTTGAAATTTTCTCCCGATTTCTTTACATA
-TTTTCATAGATTTTACTGACTTTTCAAAATAAATGTAGGAACATTTATAG
-GATGCGTACAATTTTGCCGATTAAAATTGAAACTGTGAAATTTTCAGAAA
-AAATGTGCCGAATCACAATTTGCCGAAAATTTTAGTTCCGACAATTTGCC
-GTTTGCCGGAAAAAACCGTTTTCCAAGCCACGTGGATCATTTTTTGAAGA
-AAAAAATACGGCAAATTTACAGAAACTTTAGTACCATGTGGATTTTTTAA
-GAACTATTGCCAAAGTACGTGGAATGTTCAGAAATTTTTTTGCCTTTGTG
-AAATTTTGGATTTTTCTGGATTTTCGGAAAAAAATTCAAATTTTTCTATG
-AAGACGAATTTCTGATTTTTTTAAAAATTTTTCACGAACTCAAATAATAC
-TCAGACGCGAAATTTTACGTTTTCCGATCAAAACACGGTACCCGGGGTCT
-CGAATCGACATGCAGTATTTTTCTCGCTTTGTCATAGTTTCTCGATAAAA
-ATGGATTTTTTTGAATTCAAAATCCTTAAGTTTCTACCCAGGGGAGAAAA
-AGAAGACTATAAAAATTTGAAGTTAAAGTACTCTTTAAAGGCGCCCTTTT
-TTCGAACTTAACCAAAAATTGTCGTGTCGAGGCCTGGTACCGTATTGTGG
-TGCGAAAATCATTTAAAAAATTGCGTCGATTTTTGGTTTTTTGTTATTTT
-AAAAAATGTTCAATTTTTCAAAAATAGCTTTTAGATAAAAATAATAGGTT
-TTTCCTTCTTTTTTTCCGGCTAAATAATTTTAAGAATCCATTTGCCACGT
-TTCATCACAGAAAAAAAACTAACTCTGTGCCAATCAAAGCGGCGGTGCAA
-ATCGAAATCATTTGCTGAACGACATAGTTGCCATACTGGTGGAACAGAAG
-AATATCCAACGCATCACGATTCGACTCGACATCCTTCACATATCCACTGA
-AAATCTCCTCCATCATCTCGTGAAGCAACGCGGGCGGTGCAAACAAGAAC
-GCTCCCTCGATGACGTGCGACGCATACTTGTCCTGTGACATTGAGAGCAA
-GTTACGGAGCAGGCATTTATCGATGATAGTGTCTCTGTACATTTCCATGA
-TACCCGACGATTTGATGACGTATTGGATGACGTAGTTGGCGAACTCGTTG
-GAAGACAGCCGGTAGCAATTACGGACGATACACGTCATCAGAGAATGCAA
-CAATTGAATACGGAATTTGAAACACGGGAGCTTGGGATTCTCGGCGAGTC
-TATCGATGACCTGTTGCACGAGACGACATCCATACTTGTCCTGGCACACG
-GCCATCAGTGAATCTCCTGACGAGAGGAAATGCACGAAAAAGGTCCACAT
-GTCGACTGGAAGTTGCTTGACGACACGTTGAATCACGTGGATCGAGATTT
-GATCATCCAAGAGCTCAGCACATTGCCGCCAGGTCGAATGTGCTGAGCTC
-TTGGATGAGCTGGAAGACGTTGGAATGGTCGAATTTCTGAAATTAACAAA
-TTATTGATTTATTACACCTGGAAAGGCCTAAAAAGACCAAAAATAGCCCT
-AAAAATTTCGAAGAAATGGATTAATTTTTAGCTAAAACGTAATTTTTTGC
-CAACTTTTCTGTGTCGCGATTTTTTTAAACCAAAATCGAAAAATTTCGTT
-TTTCGATATTTTGAACAAATTTCAATTTTTTCGGGAGAATATCTTAAAAC
-TTAATTATTTTCCTCTAGGAGCCATTTTGTATGTTTTTTTCATCGACAAA
-AAATTTTCGTTAATGTGTGCACCTTTAAGTAGTACTGTAACTTTAAACTT
-TCATTGCTGCGGAATTTTTTAAAATTGATTTTCAATGTTTTTCTACAGTT
-GTCGTCCAATTTCATGCAATTTAGAAAAAAACAGAAGGAAAAAGTGAAAC
-ATCGATTTTAAAAAAATTCCGGAGCAATGAAAGTTCGGAGTTACAGTACT
-CTTTGAAGGCGCACACCTTTTTTGTTTTAACAAAAATTTGTCGTGATGAG
-ACTGGGGACAGTTTTTCGGCGGAAAAATCGCAAAATTTCGGCTAATATCG
-AAGAAAAATCAATTTCCGACCGCTGCGACACTTTAGCAAAAAATTGTGAT
-TTTAGCCAAAATTCAGTTATTTTTCGGAATTCCCGTGGCGAGACGTATTT
-CTCCCACCTGCAGAGCCAACTGCACAACTCGACATGCGAATTTATCCTTG
-CACATGGCCAAAAGCCCTCCGTCGATCATTTGACGAAGCAATTCCCGCTG
-CTCGGCCGGTGTTGCGAGCTCGACGAGCTTCTGAACGATGAAATTGCCAC
-TTCGACTGTGGCAGAGCCCCACGAAGAGCGTCGTGGATTCGGTGAGCTTC
-TCGAAGACGGCTTTACGAATCTGATCTTCGGAATCCAGTGGGTAGTTGGC
-CTCCAAGAACTTTACGCCCGATGGATCGATTGCGAAATCGATGAGCTGCC
-CGTTGAACAGCACATCTTCGAGCGAAATGAAAATCGGAGCAACTGGTGGT
-GGGGTCTCATCGTCGGAAGATCCCGATCCACTGTTGAAGATGTAGCTGTC
-CGAGTCGGAGGAGGTGGTGTTGCTTCCGTGGCGGTAGGGAAGAAGCTTGA
-CCGGCGGCTTTGGATTCTGGAAATTCGAATTTTAAATTTTTATTATATTT
-TCTATTTAAATTAGAAGTTTTTATGCAATATTCTACCTTGTTCTTGTGAG
-TTTTGTTCGACAAAAGCGAGAAATCCGGGTCGAAATCGAACGACGCGCCG
-AGCATGTTGTACGAGTCTGTGCTTCTACGATTCGGGGTCATTTAGACAGA
-AATGAATGAATACAGGTTAGTAGACGCTGAAAAATTTTGGGAATTAGGAT
-TTTCAACGGAAAAAAGAGTGAAAATGAGAGGAAAACATGTAAATTTCAAC
-GAAAATCGCGAAATTACCGCGCATCAAAATTCAAAATTGAATTTTTCGCG
-GTGGCCCGGGTTACGGTGATTTTTAAAGGCGCATGGTTGTTTTGAGTAAG
-GTCTTGACGCGAAATTTAAAATTATTGAACATTTTTATTTTATTTTTACA
-TTTTTAAAGAAAAAAATGATTAAAATTCGATTTTTTAGGAGAAATTAAAC
-ATTTTCACAAAAATTGCAAGAAATCGCTCGCCAAAATTCGAAAATGAAGA
-GTTTGGCGGTGCTCATGGATTACGGTGGATTTAAAGGCACATGGCTTTTT
-TGTATTAGGTTTCACCACGAAACTTGGAGTTTTGATAGTTTGCTTCCCAT
-TTTGGGATTTATTTTTTTAATTTTCGCTCGATTTTCACACATTTTCACTC
-ATTTGCACTCAATTTTTTTGCAGAAAAATGTCAATGGATATTGTTATGAA
-GTCAGATGAGCAGCCGTTCATCTCTGCGCCTGTATGCTTTAAGTAAGCTC
-CAATTTTTGTTATTCTGGCCTAAAATTATTTTTTTGATTTCCAGAACGTT
-CGCATTTTTCGCCAAAGCATCCGCAGAGGAATGCAAACTTCTCTTCGGGC
-TCCAACGCTCGAGAAAGTTTCCAGCAGGCCACGGGGCTCTCGGAGAAGAT
-CACGGAAGACATTTACCGCCAAATTGAGTAGGTTTTTCGATTTTTTTACC
-CTTAAAAACTACTATTTTTCTATTTTCCAGCGTCTCCCACATTTCGTCGA
-TGGTCTTCAACAGAGAAATGGACGGTGGCATCGAGAGAAATCGGCTCGGC
-TCGCAAGCGATTCTGCTCGACGAGAACTCCAGGCGCCGCAATCCACAGTT
-CAAATCGATCGCGCTCCGCTCTCCGCTACGATCACATCGATCATAGAGCG
-TTGGCAAGGAAATCGCCTCATCTGATGCCTCCGACTTTTATCAAAGAGGA
-AATTATGGATGATGAGCTCGACGAGGTGAAGGAAGAAGTGGTTTCCGTTG
-GAGAAGCCGCCTTGCCCACGCCAAAAGTCGAACTGAACATGGACCATCCG
-GAAAAGGACCTGATCATCAGCATTTCCGTGTATCTCGGCTACACCCGTAC
-CCTTCAATACCACGAGATTCGCCTCGGACGTTTGATGAAGATCACGGATC
-GGCTCGAGCTCACCGGAGATCACACGCTTCGCGATCTGAAAAACGCGTTC
-TCGTGCCCCATCGATTTCTCGTTTTCCGACGATTTTAGCGAGAAAAAGCC
-GTCGTTCAAGGATATGGCGAAAAATAAGTGGCCGTCGACGATGTTCTTCA
-TTCATGACACGTTTTATATATAACTGGAAATAATTTAATATTTTTCGAAC
-AAATTTGAAAACTATAAAACCATCTTATTTTGATAAAACTCCGCCGCTGC
-TCTCTGAAGCAATGAACTGCAATCAGACATCGAAGGGATCAGCCGATCAC
-GGAACCAACCTGCCATTGAGCTTCTGAAAATTAATATATTTGATTCAATT
-TATTGTACGAAATCGTTTTTACCCATATCTGTGAGCTAGCAAGCTAGCTA
-ATCGTGATTAATTGTTGGGTATTCCTTCGCGTTCTTCAGCTTCTCCACAA
-GCAAAATTCTTGTCTGCTCATCACAAATGATGTCATCAGCATCGCTCTGA
-TCTTGAAAATCCTGAAATTATAACATTCTAGAGGGTTTCTGATGAGAATA
-GTTACCTTACAACCAACACCAAATACGTTCTTCATTATGGCATCCGGCAG
-CTTTCCATAATCGCAGAAGAAGTGCTCGGCATCACGATCGGATGCTCTAT
-TTGGGAAACGACCGATGTAGACACGAACCATGTTGAGTGGCCGAGAGAGG
-GATCATCTGAAACATTTAAATGTTAACTAAACAGGAGTTTAGAAACTTTA
-AAACAACCTAACCTCCGTGATAACGTAGTTAGCTTCTCGAGTGAGCTTCT
-TCTTCAAAATAAAACAGAATGAAACAAGAATCAAGTGGGTAAAATTGTAA
-AATGAAGTATTTCAGACATTTTCGCTAATTTTGGCAGTAAAAACCTATAA
-TTTTGGTAAAAATCGCTTGTATTCTGAAAAAAGAACTCAATATTTAATTT
-TTTATAACTGATTTTAAAGAGAAACAAACGAAATATATGAAAAAATCGAA
-AAAATCCCTGAAAAAGGCCTCCGCAATATTGATTGTTAAAGGGACACCGA
-CTGTTCATCGAATGGGTCCCGCCGCGATTGTCCATTTCGAGCGCTTTTCG
-CGATTTTTTACTACTGTAAAAAAGTGTAGGAAAATGTCGAAAAATGTCGA
-AAAATGACGTCACAAATGTATTTAAATACATGTTTTTATTGTTACTTGAA
-TAAGGCAAAATATGTATTTAAATACACTTTAATTTTCCGACATTACTTGA
-ATAACCCCATAAAAAACCCCGAAAAAATTTTTTTTTTGTGAAAATAACCA
-GAAAAATACATGTTAAAACAATTTTGTGAACAAAAAACTAAAAAATATTT
-TTTTTGCAGAGATGAATCCCACGTGAACGTCGAATTTCCACGCCGCCTCG
-TCGAACGGAATTTCAGAAGAATCGCATGTGACACGTGCAAGGAGGCGTCG
-GCTCAGTGAGTACAGAAAAATCCATGGGGATTTTTTAGAAATTCGGAATT
-GATTCGATTCAATAAAATCGATTTTTATATTAAAAAAAAGGATTTTATTG
-GTTTTTAAAAAATTTAAGAAAAAATTACAAAAAATCTATAAAATCGATTT
-TTTATTTAAAAAATTGAAACTCAATAAAAGTTCTTTCTAATTTTAGAAAA
-ATCGATTAAAAAATAATGTTTTAAAAATCAGTAAGAATCGATTAAAAATT
-CAATTTCATCGATTTTATTTATTTTAAAAAAACTTAATTTTTATGAAAAT
-CGATCATATCGGAGTCCAAAAAATAATTGGGAAAAAACTAAATTTTCAAG
-AAAATAATCGAAAAATTTTAATTTTGTTCAAATAATTGATAAAAACTCAT
-TTTTTAGGTTTTTTTTCAAAAAAAATTTGAACAAAAAACACATATTTCTC
-GAGCTTTTTTTCACAAATTGACCCGATTTAAATTAAAAATTCATAAGCTA
-AAAACCTTCTTTTTTTAACCAAAAAAAAAACGAAATTCCCAAAAATCATC
-AATTAAATCCAATTTTTTCAGCTGGATGATCGTCGACCACGACAATCTGC
-TTCCCAACTCGCCAGGCTATCTGTGCTCTTCGTGCTACAAGGAATTCTGT
-TTCGACGTGAACGGCAACAAAGTGTGCCAGTTTAAGGCCGTACCGTATTG
-CGATCGAAAGGACATTGGCGACGGACGCCAATTCTTCACCGAGCTCGATC
-TTTAGAGAGCGAAATTTAAAATTCTGTATCATTTTTTGTTGTTTTTTTTT
-ATGTTTTTCGATTTGATTGTTTAATTATCAATTTTTGGCCTGTAACTGTG
-TATTTGTTGAAATTCCAAATTTCGTTTTTTTTTTAAATAAAATTTCTGTG
-TGCAAAAAAATTTATCCAATAAATAAACGGAATATATCGATGATATGGCA
-AGTAGGGGGAAACGGACGGGAAAATGATTATTTACAGAAAGGGCGCGCAC
-CAGAGGTTTCTCGGGGGAGCCCCGAGGCGGGTGGCGGAGCTTGGCTCAAA
-ATCTGTCGGAAAAATGGGTGAAATGAGAGAAGAGGTAACCTAGAAAATGA
-GATGAGAAATTCGGAAGTTTTGGGAAAAAAAAATCAACTTTTGAACAATT
-CAATTGAAAAATCGATAATATTGATTTTTTTAAAATTCTCTAAGATCGAT
-AAATCTGGTTTGGAAAAATCAATAAAATCGAATCTTAAATATCTTTTTAA
-AAAACTATTTTCAAAAATCAATAATATCGATTTTTGAACAATTTGAAAAA
-TCGATAATGTTGATTTTTAAAATTAAATTTTATTGATTTTTTGAAAATCG
-ATTATATTGTTGATTATTGATTTAAAAATCACCAGAATCGATAAATCTGA
-TTTGGAAAAACCAATAAAATTGATTTTTACAAAAATCAGCCAATAAAATA
-GATTTTTTATAATCAAAAAAATCTATTTTTAAAACCGAAAAAATCGATAT
-TTCAAAAATTGAAAAAAATCGATAAATCAATAAATCAATACATAGGTGAG
-CTCGTCTCGTCGATTTGTGTTTTTGTGATTGGTCCCGGCTGCTTTTGAGA
-TGGCCTAGGCGTTGTTCCGTATGACATTCTGGAATTTTTTTTTGTTGGGA
-ATTTGGCACGCCCACAAAATGGACGGTGGCGGAAATTTAATTATTTTAAA
-TACCTTTCTGGATAAAAAAAATCGATTTTTCCACTTTTTCGAGTGAATCG
-AAAATTAAAAAAAACATTCAAAATTGTTTAGGGTCTCGCCACGAAAAACT
-CACAAATGCACGTTATGCGGAGTGTCGTCGGATTCCGGTGTGTTGCTACG
-GATCGTGTCGTCCATGCTCAGCTTCATCGTCGATTGACGTCGCCGTTTTG
-TGGTGATCTGAGCGAGATTTATTGATTTTTAAAGGCGCATGGCCTAGAAA
-ACACAACACTTCGGCCACGGACTTTGGCGGCCGAGTTTTCTAGGCCATGC
-TGCGGCATTTAAAGGCACATACCATGATAATGAAGATCGCCAATCCGAAA
-ATGATGACCAATGCGAAAGTGATAATTACAATCATCGATGATAAGGAATA
-TGATGAAGTTTGCGTGGAAATCGAATCGATGTACGCTTGTGACGTCATTC
-CTGGAAATTATTGATTTTTTTTTGGAAAAAAATTAATAATTACTTACCGT
-CAACAGTAACACTCAACGAGTCAATTTTGTAATCCGAAATCATAGAGTTA
-TTGCGTGAAAATGCGGCTTCCAACCTGAATGTTAAAAAAAAATCTATAAT
-ATCGATTTTTTGAAAGTTTTTCGAAAAATTGATAAAATTGACGATTGATT
-GTTTGCCCATAGAAACAGATAAAAATCGATATAACTTAATATCGATTTTT
-TTTTGTGCACCTTTAAAGAGTACTGTAACTTCAAACTTTCATTGCTGCGG
-AATTTTTTTATCGGTTTTTACAATTTTTTGTACAGTTTCCGTCCAATTTT
-ACAGAATTGAACAACAACAGAAGGAAAAGTGAAAAATCGTAAAAAATGTC
-CGCAGCAATGAAAGTTTGAAGTTACAGTACTCTTTAAAGGCGCACACCTT
-TTTTGTTTTAACAAAAATTTGTCGTGGTAAGACTGGGGACCGTTTTTTCG
-GCGGAGAAGTCGCAAAATTTCGGCTAATATCGAAGAAAAATCAATTTCCA
-ACAGCAGCGACACATAAAAATTAGCAAAAAATTGTGATTTTAGCCAAAAT
-TCAGTTATTTTTCGGAATTCCCGTGGCGAGACCCATTTCTCCCACCTGTA
-GAGCCAACTGCACAACTCGACATGCGAGTTTATCCTTGCAGATGGCCAAA
-AGCCCTCCGTCGATCATTTGACGAAGCAATTCCCGCTGCTCGGCCGGTGT
-TGCGAGCTCGACGAGCTTCTGAACGATGAAATTGCCATTTCGACTGTGGC
-AGAGCCCACGAAGAGCGTCGTGGATTCGGTGAGCTTCTCGAAGACGGCTT
-TACGAATCTGATCTTCGGAATCCAGTGGGTAGTTGGCCTCCAAGAACTTT
-ACGCCCGATGGATCGATTGCGAAATCGATGAGCTGCCCGTTGAGCAGCAC
-ATCTTGGAGCGAGATGGTGATCGGAGCCACTGGTGGTGCAGTCTCATCGT
-CGGAAGATCCAGATCCGAAGGTGTAGCTGTCAGAGTCGGAGGAGGTGGTG
-TTGCTCCCGTGGCGGTAGGGAAGAAGCTTGACCGGCGGCTTTGGGTTCTG
-GAAATTCTATATTTGAATTTGAAAATCAACAAAATTCAATATTTTACCCT
-GCTCTTGTGAGTTTTGTTCGACAAAAGCGAAAAATCCGGGTCGAAATCGA
-ATGAAACGCCGAACATGGGGGCCATTTGGACAGAAATGAATGAATACAGG
-TTAGTAGACGCTGAAAAATTGGGAATTTCAATTAATTTAGGATTTTTTAA
-CGGAAAAATAAGTGAAAATGAGAGGCAAACATGCAAATTAAAATCGCGAA
-ATTACCGCGCTTTGAAAGGGACTCCACCGATCGGAGAGACGAGGGAAGTG
-GAGAGACGCAAATCGAAGAGACGCCTTTTCAGACATTTTTTCGTGATAAT
-TTTGCATGAATTGGCAAGTAGAGCTTACACGTGATGCGAATCATTGATAA
-AAACATCAATTGTTGTTTTTAGTGTACTGAAATTCCGGCACAATAGCTCT
-CGTAAATCGACACAAAAGTCACTCCGTGGAAAAGTGGAATTTGGATAATT
-TTGTTCTTTTTTTTAAATATGATTAACGTTTTTGAAGGCTTTTGTCTCAT
-AATTCATCAAATTCAAAACCGGAATTATCCAAATTCCACTTTTCCACGGA
-GTGACTTTTGTGTCGATTTACGAGAGCTATTGTGCTGGAATTTCAGTACA
-GTAGAAACAGAAAATGTTGTTTTTATCAACGATTCGCATCATGTGTAAGC
-TCTACTTGCCAATTCATGCAAAATTATCACGAAAAATGTCTGAAAAGGCG
-TCTCTCCGATTCGCGTCTCTCCACTTCCCTCGTCTCTCCGATCGGTGGAG
-TCTCTTTTGAAATTCGAAAATAAAAAGTTTCGCAGTGCGCCCGGGTTACG
-GTGAATTTTAAAAGCGCATCACGGTTTTGAGTGAGGTCTCGACGCGAAAT
-TAGCCGTTTTTGAAGATTTGTCGTTTATTTTGGCATTTTTGAAGGAAACA
-TAAGTGAAAATAAACAATTTTAATCTTAATTGAGAGAAACTTGAACATTT
-TTACAAAAATTGCAAGAAATTGCGCGTTAAAATTCAAAAATTAGAAGTAT
-CGCGGCGCTCAAGCCGTTGATAACAAGCCGTTATAAACTTATATAACTAT
-ATAATGTAACTCGATGATTTGTTGATGTGATCTTTAAAAAGGTTGAAACT
-GCCCCAGTCGATGTCCGCGCCAGAGGCGCTGTCAGCGGCTGGTTACTTAT
-ATATAAAAAATATCGGGAAAAACGCACTTCCGTTCCATTTGTTTCTTTGT
-TTTTGTGACGTCACTGAGAATTATGGGCGGGCCCGTCTGCCTTCGTGGTA
-AGACCCATCGTGGCGAGACATATCGTGGTGATATCCTTCGTGGCGAGACC
-CATCGTGGTGAGACCCATCGTGGCGAGACCCATCGTGGTGAGACCCATCG
-TGGTAAGACCCATCGTGGCGAGACCTTTCGAAAATTTGGTGGGAATTCAA
-ATTTTCTTAGAAACATTTTTTGGTGGGAATTCAAAATTTTCAAAGAAAAA
-CTTTGGCGGGAATTCAATTTTTCAATAAATAATTTTGGCGGGAATTCAAA
-TTTTCTAAGAATAATTTTGACGGGAAATTCAAATTTGTTGAGAAACTCGA
-GTAAATGCTGGAATGTTCTAGAACCTTCCTGGAGATTGGGGAAAATTTTA
-GTATGTTCTAGAACCATCGGCGAACTTAAGAAAATTCTGGAAAGTTCTAA
-AACCTTCTAGAAAATTCGTGAAAATTCTGGATTGTTCTAGAAATTTCTAG
-AAAATTCGAGAAAACTCTGGAACGTTCTATAGAACCTTCTAGAAAATTCG
-GGAAAATTCTGGAATGTTCTAGAAAATCTTGTTTGCCAAAAGCTCTCGGA
-AGGAACCGGAAAAGTTTCTTATGATTTGAAGAACGTCTAGAAACGTTCAA
-GAAATTTAGAAGTAGTTCCAGGAAACCTGGTATTTTTAAGTTGTAACTCT
-TGAAAACTTAGTTATATAATATTCATGTTGCGTTAAAAACTTCTGGAAAA
-CTGAGAAAAACGTTCCAAGGCTTAGAAATTTTAGAATTTCATCTTAATTT
-CGAGTACGCCAGTCGGAGCACGCGCATTGTGCGAACGGCTGGTATACAAA
-CAATAGTCAGTCAATCCCATGGATCAAATTTTGAATTTTTCTAAGACTGA
-ACTGTTCCTTTGATATGCAAAATTTTATAAAATTGTCTGTTATTGAAAGA
-CATGAAACAAACTTGAATTACAGTAATTCTGTAAATTCTGAACTTACTAT
-TAGAATCCTTAGTGAGCACACTTGAAAACGAATGAAATAAGGTATGTGAG
-AATACCGTATCAATCAGATACGTCTGACACTTCCCCAAAAAAAACTATCA
-GAATATGAGTACGATATGTTATTACTAGTGTGCATCTTTCCGCGCGACCA
-TCATGGCTCAGCAGGTAAGACTTCGGCGACGCCTCGAGACGACGAGGTAG
-TTGACGACTTTTTTCATTTTTTAGGCAGCGCCCAACTCTTGTCCGAGGTC
-TACAGGCTACATGGTTTGGACGGACAGAGTATTTGCTTTATTAGTAGTAA
-CAGAAATACACATAAAATCAATTAATAAGATCCATGAAATGCAATAAAAA
-TCCAGTTTTCACCCATCTACTATGTCTCTCATTGAAGAACTTTTTCAGAT
-AGCTTTTGGTATAGAATATATTAAAATTCATTCTTCGATTTTCTGTGGAA
-TTTCTTATTTGAAAGCTTTTTCCATACCAGACAGTCACTTCTCCAAATCC
-ATCCTTGAAATTTTCTTTGGGGATATTTAAAATATCATCGAGATACCAAC
-AATCTACTGGTTTTTCACCTACAAGACGTGCTCTTGAATTGAAAATGTCT
-GGGATATCCTCTGGAATATGTTTTTCTCCTTTGTCATGCTGATAGTATAA
-GTTGAATGTGACACTTCCATTTCTCTGGCTGTTTTGTTCAGTCAATCGGA
-TTAGCTTTGCTGTGACTCTGTCCATATTGTCCGGAGTAATGAGGAGATAC
-GTTTTAGGAAGTAGAACAGTCATACTCTTGGCTGGGAAGTTTCGTTGAAC
-ATTTGCAATCACATTGTCCATTGGTGAATAATAGTCGTTTTCCAGTTGTT
-CGTTCATTTCGAGTAACATATCCTCAGAGTATTGTAAATCGATCTCCACT
-TTTTCCAGAAGAACCCTCGAAACGGGTTGGGTGTTGAATGGTACATTGAA
-TACGGCATTTGAAAAGTCTTTAGACGTTTCCAAAATGAAATCCATATTTG
-AACTAAACATAGTATTAAAATGACCACTGTAAGCTTCGAACCGGAACTCC
-AGTCTGAAATCCTTAACATTCCACTTTGAAATAAGCTGGTATAAAAAGTC
-TCTTGGGATTGAAAGGAACTCTTTTCCCAGTATTAAAACGGTGAATGTGT
-GGCATGTTACCAATGAATTGAGGAAATAATTTGCTCGAGCACCAACTACG
-TACCGCCCTAGTTGCTTTTCGTATATGGTCCGATAAAACAACCTGTAAAA
-TGTAATCTTTATAATGTTCCTGAGCATATCATGTCAAGAGTGTCTGAGTT
-TTTCATCAACAAAAACAAAATTTGATTTTTTTGTTAATTTTCTAAACAAT
-CCGATTTTTGGTTTTCCGGAAAATTGAAACATCGAAATTTTCCGTTTTTC
-AATATCCAATTATTCGATTTTCCGATTTCCTCTCAGAAGAACGAAAAAAA
-CGAGAATAAAGTTTCCATGACATTGATCGCAGTGGGCTGTTTGTTTTTGG
-GATAACTTTAAGTGAAGGAATGGAGAGACTATCTAAGTATGAAAAACACG
-AGAATTCACTCTTTTGAGAACCTGTTACAATACGTGTACTGTTATAATAG
-AAAAACTAAAGCAGTGATTCAAACATCTGTTCGACGGTGTTCATTACAAA
-TGTATCAATTTACACTCACCAGTCTTTCATTTCCAGCGCTTTGTAATGAC
-GTGGAGATATCCTGATTTGATTTATGATTTCTATTATTTTTAATTCTCCA
-AATAGCTCTTCTCCCAATATTCGCAACTCATCAATTCCAAAATTGCTCAA
-TCGAAGATATGCGAATTTCCCGAATAGTTCGTTTAATCTGTCCATAAATC
-GATCATGCTCATCAACTCCAAAATTTTCCAACATCAAATTCAAAAACTGC
-TGCGGTATCGAATTTCCACCAAAATATTGAAGTTGAATACTATGAACTAT
-ACAGTTTTTATTTCTATGAATGTCTCGACATATTTGACAACCACAGCAAA
-AATCATTTTTATATTCTTCAACGAGTCCATCTAAAAATCATGAATGTCAA
-ATCAGTAGTTCAAAAGCCATATATTTTACTCAGAATTCTGAAAAACAGGC
-GCTCATGTCAAAAATTGACTTACAATCTACTCCAATCAAGCAATCGTGTA
-TGAGATCATTGAGTATAATTCGAGCATCCACTCCGCACGAAATTTCGTTT
-TTCTTAATCGGTTCGACATAAAGCTTGTAGACTTTCACATTTACCGTATT
-TTTTAAAAATCTGAAAATAATGTTACAGCTGAGTACAAAACATTAAAAAT
-TGGTTTAATTGATTGAAATTTTCACCACTTCTCATATTGTTTCCACGATC
-ACAAAAAAGCATAAAAAACTTCAACAGACTCAGAAAACACTTTTTAAAGG
-CAAGTTTTGAACCACCTATTTTGATGAAAAATTGTCTGAAACACTTCTCA
-GATCGACTTTTCCCTAGCTCAAAGTGATCCTCTGCCGCTAGCTCTTTTTT
-AGAGTGGTCATTCGAAAGTCCGGGTTTAAGTTGAAATATTTCCCTTACCG
-GTCAAAATTCTATCAACATCAAAATAAAATTGAATTTTTTGGTAGTTAAC
-AGAGGAAGCGGCGAGCAAAAAAACCAGGTTTTGAACAATTGATTTCAACT
-TACACGAATAAGTGTTTCACCTTGTTTTTGTTTATCTCCAGTGCATTTAT
-AAGAAACGAGCAAGTGCATCGACGAAGCTGTTTTAGCGGAAGTTCAGGAT
-CTACTTGATTGTTAATGAATATTGATCTTTTTCTTCAATTTTTACAAGTT
-TTGAAACTGTGAATTTGTATTTTTCGATGCTCATTTCGAATTTTGTGCAA
-AACTTCTTCGCTGAACAATTTATTTATCAGCTGAAAAAAGAGCGAATTAA
-AGTAAAATTGAACACAATTTTGATACCTGTCTATAATTAGGGATATCAGT
-CCGCTGTATTGATTTTTTTGTTTGAAAAACTGAGTTTTTGTTTATTTGCA
-GCGGCAAATTTTTATTAATTTTTTTTGATAAAAGTTCATCAATGCCATCA
-GTGTTGTGGCACCACGGAGTGGCGGAAGACCGAACCCTTTAAGCCTCAAG
-AGGAACCGAGCAACGAAGACTATGTCAGAGGTGCAGCATGGCATCGTCTA
-TTTGTATATGTATTGGAAAGAACAGAACACAGTTTCAATAAATATGTTTA
-TTACTCCAAAGGGGAGATAATCAACAGAGGGGGAGTGGGTCGTACACAAG
-AGAGAGGGAATTGTCTGGTGTGAGAATATCACGTCCTGCCACGCGGGTCT
-TTAGTCTGAAAAGGTCGAGTGTATGAATAGTCGGGGTCTTTGCAGACTCG
-TAGAATAATGTCTTTGGTCAACTACACTTTCCAAATAAAGGGAGGGAAAG
-GTAGGAAACGTCGGCAATTAGTCTGACTGGGAGCTGTCAATAACGGGGGG
-GGGGGGGAAGAGACCAGCAAAACCGAACCAAGAGTGGGGAGGAGAGTTCC
-TTTCCTGGTGCCACCGACGCTGCAGCTCGCTCCGTATCGTCGCTCATTGA
-GTCGCCGCGCAGCCAATCGTTGCTACGGGGCGCGAGTGTAACTCTCGTTA
-GAGAGCGTGTGGGAGCAAGAGACGCAGAAATACAGTAAACTTCTGCGACT
-CCTAACTGTATGGTAAGCTTAAGAGCTGGTCTTAAAAGGTCGAATTGAAT
-GTACCCCTCGCTCGGAGAACTGCTGAAGCAGTCGAGAGCGAGACATTGTG
-AAATGGGCGATACAGCAGAGCCCAGTTCACAACTCTCCGGGGGGCGGGAC
-TTGTAGGCTGGTTCACGTAGTGAACTTAAGGTTTGAAGCCTTCCTTTGCC
-TTTCTTGGAAGAGATTGGCGGAGTGGAAGGTCGTCTGAGCTCCTGGCTTC
-TTTTCGTGAGCGTTCAGCTTCTTTTGAAGATCTAGTATTAGGTGAGCTCG
-GAGCTTCTTTTCTAAATCTTGCTTCGTCTGAGCTTAAAGCTTCTTTCCTG
-GATTTAATAAATTTTAAAGATGGAAGCATAGGTAGTGAGGGTTCAGGAAA
-GTCGGAGTCCGTCTCTTCGTCTTTTTGTGGAATTTTGTCTTTATTGTCTA
-TGTCTTCCGCTGTAACCTCAAGAGGATACAGTTGATTTAGTGATCGTTCC
-AACGTGGAGTTATTGAAACGAACTCGTGCCGATTCAATGTTTCCTTCTTT
-ACTCGGAATGAGCTCCACAATTTTGCCCAGAGGCCATGTGTGTCTTGGCA
-ACATTTCTTGTCCGACGAGAACAATGTCTCCTTGTTTAGGATCTCGAGGA
-GCATCCCTTGTATTAGTCTTTTGTCTTTCTCTCAGAAACAGGAGATATGA
-TGTCGACCAGATTTGCCACAACTTTGCAACTGTTGTTTCAACTCTGGCTA
-AGTGTCTTCTCGTGATTTGCTCTGTTGATCGAGCTGTCTTTGGAGAATAT
-TCCATCGGTTCGTCTAGATCAACTTCATTCGGTGCATCTAGCTGAACTTT
-TGGTAGTAGAAAGTCGATTGGGCGGAGAGCCGTCAGATCATTGGGATCTG
-TGTTGTCTGGTGTAAGTGGACGGTTGTTAATCATCCCTTGCACCTGTCTT
-AACGTGCTGGACAGCTCGAAGAAGGTTAACTTTTTTTTGCCAATAGTCTT
-GCGAAGTTGGTGCTTCGCAATTCCAACAATCCTCTCGTACACTCCACCTT
-GCCAAGGGGCGAATGGAGTGATGTTGTGTACCTGAATTTCGTATTTGGCT
-AAAAAGCAAATCATTGAGTTGCTTGGTGCGTAAAGTCTGATGTCTTGGTT
-GACCATTTGGTGGCCGAGTGTAAATGTTGGTGCATTGTCACAGTAGATAT
-GGGGCGGAACACCACATGCACTGGAGATTGCTCTGAGTGCGAGCAAGTAG
-TTGGCTGTAGTAGCGTCTGGAATGAGTTCTAGAATGGTAGCTCTAGTCTT
-CAGACAAGTGTAGATAAGAGCATAGGCTTTACCTAGCTTGTCATCGTCTG
-TCTTGTATTGTATTGGACCCAAATAGTCGAGTCCTACATGGTCGAATGGT
-GCAGAAGGTACAGTTCTGCAGTTTGGTAGTCGTGTGTCGTAATTGTATTT
-AAAGGGTCGTGCTTTCACCTTTTTACAGTTCACGCACTGAGCAATTGTAG
-TTCTTGCAATTTTGCGATCATTTCTGATCCAAAAGTGCAGTCTTACCGTA
-GTTGCCAAATAGTGTAATGGTAAGTGGGTATTTCGTCTGTGGACATCTTC
-CACAATTAGACACAATCAGATGTGGAACCGGATTGGGTCCCACTATCCAA
-TGATGTTTGTTTCCGTCCTCGTCTACTGGGTTACGCAATGTGTCTTGCAA
-AGTGATTAAGTAACCGTCTGTAACAACTGGAGAAGTTGTGTCAAAAAATG
-TCTGAATCAGTATGATTTTGTCTCTGTCTTTGAATTCGAGAATTCGTATT
-GTCTTGCATTGACTGAGCATAAGAACAGTTTCCTGTTATATGACTCGGTG
-ACGAGCAAATCGTGCATCTACCATTGTTGATGCAGAAGCGTTTGACTTCA
-ATCGCACCCATTGTGCACGTTTGAAGTGGATGGTCTTTTTTGCAGGGAGG
-GCACGGATCTCCATCGAGAAATTCTTGCCAATTCTCCACGAGTCTGGAGG
-TAGTATTACCCGTCTTTTGTTGAATATGCAGGTTCAGGAGGTTTTCCTTT
-AGTTTTCTGTCCCGTTGGACATCAACCAAAGTACGTCGCCAATCTTCCGC
-GCAGTTGTCTTCAAGATGTTTTTTGAGGCTTACGATTGGATCGTCAGCCC
-GTCTGGGTCGTATAAAGTTACGCGGAGTCAGCTCGGTATAGTCAGCTTGA
-TAGTCTTGCATATAGTCTTTGAGATCTTTAATTATCATGTCTTTGGATTT
-AATCGTTGAAGGTTTCTGTTTAACAGTTTCCAACAAGTCTTTAATCGTCG
-ATAGTCTATGTCTCAAGTCACCAGAAATAACAATCATTTTCTGTCTGGCC
-AGATTAGTCGTGGATCGTATGATATCTGTTAAATTCAAAATTGGCGTACC
-TGTATCCTTTGCCTTCTCGGCGACGTCCTTGAACATCTCCTCGATGATAT
-CCGGCAATGAATTGGCTTCGACCAAGTATTGAGTCAGGTCTTTGTACCAT
-TTGTGAAGATCCTTGATGTAGTCCATATGCTGCTGCTTGTCACAATCGAT
-ATTGGCGTTAAGCCAGTCGGATGAAGACTTATCTTTGTGCTTCAAGTCTT
-CAGTCTTAAGTGCGATACGCGTCAGCAACAATGCTATGGATGATGAAGTG
-GAGAATGGGGTCCTGGATTCCCTTCCCAAGCTGCCACCACCGGAGTCGGG
-ATCAAGACTTCCACCTCCAAGATGAAAAGTCATTCTTCTTTGAAAACCGA
-GAAACTTGTTATCTAAAATCAATAATTGGTTAAGAAGAAAGACAAAATGT
-TTTGAGATTAAGTAAAAGACTTAATAAGAGATTAGGAAAGAAAGATGGGG
-ATGAAGACTCAATTTGAGTGATAAGAAAAAAAGGTATTTTAATATAAGAT
-TCTACAATAGGGATTGGGAAAGGTGTGCCGTGGCCTAATATAGGTTTGGT
-GGTACAATAAATAGGGGAAGTAATGACCCAATATGGGTGGGGGGATTATT
-AAATGTTACCTAATATGGGTGAATTATTAATTATTCCTTTGGCAGAGGAA
-TGTCGGTGAGGGCTAAGAGTTCCCTGTATTGTAGGTTGATTAGTCATGTA
-GGGGACTGGTGTAGAGTAATTTGGTGTAGAGTAATTTGGTGTAGAGTAGG
-TATTTGGTGTAGAGTAGGTTTTGGTGTAGAGTAGGTTTTGGTGTAGAGTA
-ATTTGGTGTAGAGTAATTGGTGTAGAGTAGGGATGGAGGGAATTCAACAC
-CGACTGGTCGTGAATCAGATCGGCCCTGAATTGGGGTAGGGGACAATAGA
-AAGAAACTACCGTGTGGCCAACTGCCCCCAGCAGGGACCTAGTTGGGATT
-GTTTTCACTTGAACACGAAAACAATGGGGGTTGGGAAAGTTAATAGGGAC
-AAAGGAGCAAAACGAAACGTCCATTCCCGCATCGAATTGCCTCATAGGCA
-CCGCACCCAAACTCTCCTGCCGCTGCAGCAGTCAGGGAATCCGACGCTCC
-ACGCTCTCCATCGCGACTGGAGACCAAGTTCTTCTTTCTTCTTATAGTCT
-TTTTTTTCTAGTGGCGCCGGTTAATTACTCCATTGCCAACTAGCTGTCGG
-GAAGTCAGAAGTCAAATGTCCTTGCGGACGTGGAATATAACATGTTTGAA
-ATTAGGGTGGTTTAAGTTTTTTGTGAGATCCCTATGGATAAATTTTGGTT
-AATTTTTAAATTTGAAAGGTTTTAAAAGATGTACAAATAATTTTTAATGA
-TGTATAATTTTTGGAGAAGGTACTAGTTGAAAGATATAAAGAATTTTTAA
-ATTGAAAGTTAAATTAAAATTTTGAGGGGAATTGGTGTAGAAAATTAGTT
-AAAATATATTTTTGGAATTTTTGAAATTTTATAATTTTTAAGGATTTTTT
-AAATTTTTTAGGAAGTTATAAAAGGGGGTAAATAAACTAACTGTTCGATC
-GCCGCGTCCTCCAACGAGCAAATCCTCCATCCATCCAGAGTTCTTGTCTA
-CCCGTCTTGTCGTCTATTCCTCCTTTTCTTCTTGTCTCTAGCACACAGGA
-GACTGTGCACTATTGTCTTTCCGTTGCAGTCAGCGAGCTGCCAGCAACTA
-GTCGCATCGTTAATGGCACCTTTGCCACTGTATTGAATGCTGTGAGCTGT
-TTTAAGTGCTATTACACTATAGTCTGTAGAAAACAAGAAATTTTGTAATC
-GTCTTTCGTCTTTCGTCTTGAACCATATTAACAGCCGAGATTTATTAAAT
-CAAGGAACAAATAACAGCTTCAACAATGTGGTATCAGATACCGGTGAGGA
-GTGGTGAGGGGGGAATTTCAAAAAATTTAAAAGATAAAAATTTAGTGATC
-GAATATCGAGATATTCGATGGGGATTGTCCTCGTGCCAATTTCTTGGCGA
-TCCTTGGTTGGTATCGGCGTCTGACCGGCTGGTGTTGTTGCTGCTGTTGC
-TGGAGTTGTGGTGGCGGTGGTCCAAATAGTTGTGGAGCAGGAACGCGAAG
-TGGTGGTGGGAACTCCTGTGCGGCTGGTACGAGTTGTGGTGGAGGTTGCT
-CTTCGGATGGTGGTGGCGTGTGAGCATTGAATCCTCCAGAGACTTCCATC
-GCGAGGGAGATCCTGTTGATCGCTGCGTGCACCACATCTATCTTGTCGTA
-CAGAACGACGTGATCCGCGGATTGGATCCACACTTCCTGGGAGCCAGAGC
-CTTGTGGAGCCGTCGCAGTCGTCGGGCCATTTGGGTCGCGGCCGGTCTGG
-GGGGCTGGGCCCGTACTTCCTGGGAAGTTGAGAAACCAGTCTTCGAAGAA
-CTCGGATGGAGATGTGTCGTCGGTGAGCGTCGGGTCGAACGGTCTGAGAA
-GATTTTAGAAAATTAATAATAGTATATGGAAAAATTGGATAAATTTTTAG
-AATTTTGAAAGAATTGATTGAAAATGTGTATAAATTGAATTTTTTAGAGA
-AAAATGATAAAATTTTTTAGAGAAAATAATAATTTTTAGATAATTTTTAA
-ATAAAATCGAAACTTCCTTTAGTCTGGCGCTTCGTGGATGGGTAGGCTCC
-ACTCAGCTGTCAACTTACGTACTACCAATGAAGAATTGCAGGATAATGTG
-CATATTAGATGCAAAACGACGAGAAATAGCGAATAATAAGTCGGGGAAAG
-TCGAAATTGTGCTCTGGGAGCATGAGTTTGCCAAACTCACGTCCCTCGGC
-GTCTGTGGGCTCGCGAGCCGCCCTTGTGTACGATTTTAGGGGTTTTTTAA
-TTTTGAATTTTTAGAATTTTAATTATTTTTAAAGAAAGTTTGGTAGAATA
-AAGGGACGGGGGATGTTTAAATAGATGTGTACCTGTCGTCTATCAAGTCT
-TCGACTATCGAAAACGTCGAGTCGTCGAAGTTCATATTGAATCGTCTCTT
-CACGGCCCGGCGGGGGGTACATGGACGAGAATTCTCTACCGTATTCCAAT
-TTGGCTGACTGCGTGCTCAACGTTGAATACTCAGTTTAAAGTTTCGTACA
-CCGTTGCGTACTGCACAGCGCGCATTTTAATTGACGAAATTTCGCGAAAA
-TTAACAGAAGATTTTTTTCGGAATTATAGAGCTGAAATTGAAAAAAAAAC
-TATCAAATTTTCATCGAATTTGTGAAAAATCGTAAGTATGAAGATCTTTT
-CTTCACTATATTCAAGGAAAATCGATATTTCGCTTTTCACAGACGAATGA
-TGTCTCATTTTACTCGATGAAAGTTTCTGATGAGCTGTTTTTATCGATTT
-TTGAGCGATAAAAATGCGATTTGTTGATAAAATGGATCAATTATATAAAG
-AAACAACATATATTGCTCTGAGATTACTTTTTGAGAATCAATTCTTTATT
-TTTCGGTCATTTTAAATTAAGCATTAAAATAAAAATATTAGAAATCATAA
-TAAAAAAAACAGAAAATCGATATATTACTTTTTCTTCGGAATTTCACGAC
-TTTTTTGGACGAATTTTATTCTGTAAACTTTCTTCTTCGAATTTGTGTCC
-ACGTGGCTTTCAGTCGAAGAAGATTCTGCAGCACTCCTTCTTGCTTGCCC
-ACAACTTACTCGAATTTTCTAAAATTTTTAACTTATTGAAATTGTCATTT
-CACCTTTACACTCACTTCAGCTAAACTATTACTGCATTTCGGAAGTTGAT
-AGGATACTGGTGGAGCAACAAGTGGATGGCTTCTAGTGATTGGCTGGCTT
-GTCGAGCAAGTTTGTGTGATTGCCTGAAATAATTTTTGATTTCAATTTTG
-AGTTGATTTAAAGCAGTGAACCTACCACCGGGTTCGGACGAGAAAGAGCA
-TTACTCGGTAGACCACGGAATCCAATTTTCGTTGAATTGCCTCCAAATGC
-AATAGAAGTTTGTACGTTTTGTGAGAAGTCGGGCTGAAAATTTTCAAAAT
-TTGAAACTTTTCGAGAAAAATAAAAATCTCACCACAGCATTTCGAGATTT
-TGTCGATTGTGGAAGCCTTTTCCTGGAGCGAAAATTGATTTTTTTTTTCG
-CTAAATTTTTTCTTTTTTGGGCAGCCGTGACGTCCCGAATAACTGCTTTT
-GGGTCCCGAAGATCATTTTGCGAAGAAATTGGCAGAACTGTTGCATCTTT
-TGGTACGATGGAAAGACCGGGAATGGACGTGTTCTGAAATAGTTGTGTTT
-TTAAGAATGCAGAAATGTTTTTCTGTACCAAAATTACCATAGTCATGTCA
-TTCATGATGTTACGACACATGAGCTCTCTCAGAACATGGATGTAACGCCT
-TTTCTTGTCCCGGTAATTGCAAAATCTCCTCTCAAGTGCATTGAAAATCG
-CGTGGACAGATTCAACTCCTTGTTCTGTGATCCTTCCAATGTTTCTCACA
-TCTTTTGCCATTTGTGGTGCATGGTAGACCAACAAGTGCAGCTTTAAAAT
-AATTGTTTCTTCGGGAACCGCTACTTTCAAATCCTCCACAAATCCGCGAA
-TCGAATTTTGAAGTATTAAGACGTCGGAATCATTTAAAAACTTGTTTCCC
-GAAAGTGACATAATAGTTGAAAGCTTTCCCATTGCTGATTTCAATCCGAG
-CAACATTGGGCATAAATTTGGGCCAAAAATGTTGAAAGTCTCCTCTACAA
-CAGCCGGCGTTAGCAGCAATTTCAAATGGTTTCCGCAAAATGATTGGAAC
-CAAGCCTGCTTGTCCGCTCCAAACTTAGCCCAACACTGTCCCATTTTTTC
-AAGTGTTCCTTCGGGAGTACCATTCACAATTGTATCGAGCAACAATTTTT
-CCGATTGAAGTGCTTTCAGTTCAGCATGCGACTCCAATTTCATCTTTCCG
-GTGGCTCCTTGATACTTTTCTTCCGCACTTTTAATTAGGTTAACAGCGTT
-TTTTAGAGTTGCTTTTCGTGTTTTCAGGATAGGAAAAGAAGTAGTGTTAT
-CCAAAGTATCAGAATATTTCCAGAGGGGATTGAAGATATATTTGTCAAAA
-ATACCCATGATAATGTGCAGAAGAGGAATCAAATAGAACATGATCGCAAC
-GTGTGGCAGAAGTGGAGTACATCCTTTGCGAACACCCAAGTCGCCATTTT
-CACAACAAGCTTTGTAAAGATCGATTGTTCGTGGGTGGAATGTTTCATCA
-ACATTCATATCCTTGATTTTCATCCTCTCTTCAGCTCCCCGTGGATTCTG
-TGCAAAACATTTGAAGCAGAAATTGTGGGATGAATGTCCTTGGTGTCCAA
-GAATATCAGATTGAAACTTGCAATCTCCAGTTGCAATTTGCACAATTTTT
-GCGGTTTTTTGAACTCCTTTGTCCAAATATCAAATTTTCGTTAGCTTGCC
-AAGCTGCTCAAGAACGTCCGGAATGAATTTTTTCAGAGACGAATAATTGT
-CGGATCCGTCATATACTGCAATTACCATAACGTGTCTCGAAGAATTCGGT
-CGAGATACGTTTCCGATTACCAATGCCAACTTTGTGCTTCCACCTCCAGC
-GTCACCAACGACTCCAATCTTGATTACTCCTTTCGTGTATCCGTCGTCCA
-CAAATTGATTTGAATTGCATAGAAGCTCTATTCGATAGGCTAAAACTTCT
-GCAATTTTCATGCACTGCACAATGGTAATCACTTTTCCTTTATTGTCGAA
-CGAAGTGGAAACTTTGAAACTGGAGATCATTGATAACTGGATTGACAAAT
-CTCTTGTGTTCTTTACCGATGGAAGCAAATCATAGCCAATGGCATTAGTC
-AAATAGTTTTTGATTTTTTCCATCTGACTTAGAGATAATCCGCATTTTGA
-TAAAAAGTCAACGGCCTCAAAGTTTGAAAGCTTGTTTTTGTAGCTTTGAT
-TCTCTTCTGAATTCAGGAATTTTGTGAATTTTCGAATAAATTGTCCGACG
-TCATCCTCGAGGCAGATTTCGTGTTGAAGCAAGTGAAGAGCTTTGCGAAA
-TCGATTTTTGATACAACTTTTGCTTCTTAGATTCGAAATATTAACTTTAA
-AAGCTGATTTTTTAAGGTTTTCAACTTCTTCGGCGTGTCTTTGTAGACTC
-AGAACCATAGCTTTGCCACTTTTCTTCACATCTGCACAGCTTCTCACCAA
-TCGACCTTCTATACCACTGACGATCGTTCGTATATTGCATACTTCCATTT
-GCAGCGAAGAATTAGATGCTCTTATAGTGATATTTTCATGGCGGACTATT
-TGCATTTCTTCCGAAAACACCGCAAACTCATCAATCCGCTTTTGTATTTC
-TTCTGATATTTCATTTTTTTCATTTTTCAGTCGTTCGATCGTTAGTCGGA
-GCATTTTGATCTGCGGAATTTGCTCAACATTGGAGATTATTCGAACCCTC
-GGTGTACTGAACGAGTTTCGTAAAGGTGTCGGTGGAAATACGGGATTGGA
-GAATCTCAGCAAAATCATATAATATTAGTTTTGAAATATTGAAAAAAATT
-ACATTGTGAGAAAAAGTCGGAATTTCGTCACTAAAATCCATTTCCACGTC
-TCTCGTCAGAATTCCTTCATCCATATTGAAACAATTTGACGACCTGCATG
-TAGTTGCGGAGCTACTGGAAGCAATGTCGGGATGGTGGGAGTTTCGATCT
-TCTGAACTGATTTCCTGATTAGCCTGTGGCGACGAGCTGCACGTCTGAAA
-ATCACGTTTTTGAAGTTAGAACAAACTACTCCAACTTAATTAAAGTTGAC
-AAAATTGAGCTGAACGAACCTCCACTTTCGAATTGTTCAGTTCTTCCTCT
-TCAGTTTGATCTTTTGAAACTCCATTAGCACTGTTCCTTGCTCTCTGGGC
-ATTTGCTAAAAGAAGGCCTGCACAAGATTTTTCTTTTCTTTTTTGTTTGA
-AGTATACTTTTGTCATCTGGAAATATTGCATGAATATTATAAGGGAAACA
-ATTTTTAAATATCGATTTTCACGAAATTTGAAAAAATCAATAATTTGGGC
-GCATGATATTGAGCTGAATGTTTCGAATTTAGAATCAGCATGCTTTTATT
-CATATTTTAGGATCTTTTTAAAAAATCTGGACCAACAGTTTTTGAAAAAA
-AAATACTTTTCGTTCAGAAATGTACTGATTTTCCACTGATTTTCACGAAA
-TTTGAAAAAATCAATAATTTAGGCGCATGATATTGAGCTGAATGTTTTGA
-ATTTAGAATCAGCATGCTTTTATTCATATTTTAGGATCTTTTTAAAAAAT
-CTGGACCAACAGTTTTCGAAAAAATTCAATTTTTGTTCAGAAATGTGAAT
-ATTCACTAAATCGAAAAAAATAATTGCAAAATCCGTCGGCTGAACATTCA
-AAACTTATCAATTTGAAATCAGCATATTTCAGTGTATAATTAAAAAAGGT
-TTCAAAAATTCTGAGACCAATTTTTGTTGAGAAAAATAATTTTTCGTTCG
-AATTATCGATTTTTCACGAAATGCCAAAAACAGTAAACTTGGGCCCATGC
-TAAAAGCCTGAATCTTTCAAATTAAAAACCAGCATGATTTTTTCTATATT
-CTAAGACGTTTAAAAAAAATCTGGACCAACAGTTCTTGAGGAAAGTAATT
-TTTTATACAAAAATGTGCTGATTTTTCACTAAATTCAAAAAAATAATCAA
-GTTGGGCCCATGCTATACACCTAAATCATTAAAATTCAGAACCGCCATGT
-ATGTATTTTTTCATACCATAGGCTCTTTAAAAAAAATCTGGACCAACAGT
-TTTTGAGATATGTCAAAAAAAACAACTCACTTTTTGACGTTTTTCGCCTT
-TTCGCGGATGATGCGGTCGATTTTTGCGGCGATTTGTGGTCTTTCGCTGA
-AAATATTATTTTTATTTCAATTTTTAACGAAGAAAACAAGAAAAAACGAC
-GAGAAAACATCAAAAAACACGAAAAAAACGTCGAAAAACTCCCGCAACCT
-CATGAAAAAAAATAAAGCACTGCAGCCGCGGGACTAGTTTTCGCAACTTT
-CTAGGCCATGTCCCGTTCGCCGTGCCGTGTCTTGTCGTGGTGGTGTGAAG
-TGTGTTGGTGTGAAGCGTGTGAGTACGGTAGGCTGCTGCAGATGTGGTGT
-GAGCTGTAAAAAATCGAAATAATTCAAGAATTACGACGATTTTCGTATTT
-TGAGAAGAAGAAAATTTTAAATCACGAAAATTCGAGAGAAAAAATGATCA
-AATTCAGTCTCAGAAGCGAAAAATGAACTTCTTTGTCTGGAAAACAGCGG
-TTGCTCGTGAGAAAAAATGTTTAAAATTGAAGAAGATCAACAAAAACAAA
-AAAAGACACGTAAATGCAACTTGTTTTTAAAGGTCGTGGCCGCGTCGCGG
-TCGCGCCGCGTGCGCACTTTTGTAGAAGACTCCGCCCCCTTTTTTCTTGG
-CGCCGTGCCAATTTTTAGAAGGAAGAGCGTTTTTGGTTGAAATAATCGAT
-TTTCGACGAGAAAATAGACTAAATCAAGTATGGTGAATCTGATTAAAGGC
-ATATTAACTTTGTAAACTGCACAATTAACTAGAAATCGTACTATAACCGA
-ATATAGTCAAAGGGTCGCTCAGTTCCCCCGGTCTAGAGTCCCAGGTTCAT
-CTTTCGAGCTGTTTCCTGAGAAATTGTACAGGATTTGTCTGAGTCGTGAA
-CTGAACACGCTTTTCAGGTAAACGTCGTCTGGATGTCCTGGAAATCAAAT
-GTTAGTCTTTGTATCGATGGAAAACATGGTTTTCTCAAGGAAATAGTCGG
-AAAGTCGGTCGATGCACCATGTTGTGGCACCACGGAGTGGCGGAAGACCG
-AACCCTTTAAGCCTCAAGAGGAACCGAGCAACGAAGACTATGTCAGAGGT
-GCAGCATGGCATCGTCTATTTGTATATGTATTGGAAAGAACAGAACACAG
-TTTTAATAAATATGTTTATTACTCCAAAGGGGAGATAATCAACAGAGGGG
-AGTGGGTCGTACACAAGAGAGAGGGAATTGTCTGGTGTGAGAATATCACG
-TCCTGCCACGCGGGTCTTTAGTCTGAAAAGGTCGAGTGTATGAATAGTCG
-GGGTCTTTGCAGACTCGTAGAATAATGTCTTTGGTCAACTACACTTTCCA
-AATAAAGGGAGGGAAAGGTAGGAAACGTCGGCAATTAGTCTGACTGGGAG
-CTGTCAATAACGGGGGGGGGGGGGGGGGGGGAAGAGACCAGCAAAACCGA
-ACCAAGAGTGGGGAGGAGAGTTCCTTTCCTGGTGCCACCGACGCTGCAGC
-TCGCTCCGTATCGTCGCTCATTGAGTCGCCGCGCAGCCAATCGTTGCTAC
-GGGGCGCGAGTGTAACTCTCGTTAGAGAGCGTGTGGGAGCAAGAGACGCA
-GAAATACAGTAAACTTCTCCTAACTGTATGGTAAGCTTAAGAGCTGGTCT
-TAAAAGGTCGAATTGAATGTACCCCTCGCTCGGAGAACTGCTGAAGCAGT
-CGAGAGCGAGACATTGTGAAATGGGCGATACAGCAGAGCCCAGTTCACAA
-CAATCAGACTAACTGGCACTTACGTATAAATAATATTATGGGTTTCGTCG
-CTCCCCCTCCAAATGTTTTAAAAACGATTTAAAACATAATTTATACTGTT
-TTTTTTTACTACTGACCAATGAAAGTTCATGGTTGATAACATAAATCCCC
-ACATTTTCAGAAAAATGGATAAGCAGAAAAAAAGTTATTAATGAACTCAT
-AATTTTCATCGAAATTAGCCAGCTTTAGTTTCGGTGTATTACCAGAAAAC
-AAATTTAAGTGATCTTACTCTCAACTCCAACAGAGTATCTAATTGATTAG
-ACACATTTTTTACAATCTTGCTGACAATTGTGCGATTTTTGAAGATTTTG
-TCAATAAGCACGTGATCCTGAAAATAAAAAAGTGAGTAATTTTACGCTCG
-CGAAATTGTGAGCCAGTGGCTGCCTAGATTTTCAATTTGTTACATTATTT
-TGCAGCCATACGTGGACCATAATTCTGGCGACCACTTTACGGCATTATAA
-TTTTTTGAACTGCAAACAAAACATGTAAATATACATATATGTATACTAGG
-AATTCGCACTAAAGTAAATTATTGAAATTCGTCAACTTTTATTTTCATTT
-CTTATATTTTGTCTAATTTTCAACGAATTATTGAAAATGAAAATTTTTAA
-TTCACGTCAAAATTAGTGAACGCGGTGAACGGCGACGGCGAAGGCGGGCC
-GGCGTGAGGCCGGCGTGAGGCCCGCGTTTCGCGCCTCACTTAGCTGGAAA
-CCCTAAGTTTCTCCAATTAAATTACAGGTGATATACATTTTTCCTCTTTA
-GGATAAGAAAAGATCATTTCCTAAGCCTGACAATACAAAAATGTGGTTCA
-CGTTTTTATTTTTCATAACTTAAAAAAATACTATTAAAATGAGGGCATGT
-AATACACAAATACCGGCAAACGGTGTTTCAAATCAAATATTGAAGAAAAA
-ACAAACAAAATATGATGAATTCTCTTTGTTCTTACCAAAATCGAAACCAT
-CATTTAAAATTTAGCAATTTTTTACAGTTATATTTGGTAATTACGGCCCA
-TTTTCTATAATATAAAGAAACAATTGAAACTGATCCACCCTGTCCGCCGA
-CTATTGGGCATCGACAGATGGTGTTCTCAAAATACCAAAAATGGGTGGAA
-CTCTCTCACGAGCGCTCTGCAGGTGTCGTTTTCCTTTGCAAAGGACTGCC
-CTTCCATTCATTTGTGTCTCTATACAACATCTCATCTGTCATGCAAACCG
-ACATTCCCAACATACTCGAAATCCCAATTGATGTAAGTTCTTGTTTCTTA
-AACTAAAATTAGCCAACTATTTTCTAGAAATATCAATCTAGACCGAAATA
-CCTTTTACTCTTGAATGATATCAAAAGTTTAAAAATGTTTTATCTGGTAA
-ATATATTATTCAGTCAATAATAACAGAGCAATAATTTCCTATTTGTAAGA
-CGGTTTGCCAGCCCTACTGATGTAAGCTAAAGGTCCTACAAAAAATCCCT
-GAATTTTGGGTCTCCTTTGCTAACTACAAATGGTAGGCAAAAGAACATAT
-TTGTGTACAAAAAAGTATGCAAGCAAAAGAGACAGCGTAGGCAGGCAAAA
-GATTCATAAAAGAGAGATAGCCCCCGCGGTCAAATCATTCTACTAGTGGC
-TTGAAGCCTCTGTTGATGTGATAAAAGTAACATTTTATATAGCATTGTGT
-TCGATTTTTCTAACAAATAAAATGCATATCATTACTTATACAGTGCGTGC
-ATGTTCTTTATGCCACCCCCAAAGTTTTTAATCATGGCAGTTTCTGTGTA
-ATTTGGTGAGCAAAAAGTATTGAAAACCTATTCACAATGAAAAACCTAAA
-CTCAAGAAATGTTGTGATTATATCTCGAAAATTGTGAAAAATAAGACAAT
-AAATCAAAAATTGGCCGTGCAACTTCTATATGCCACCTCGGATTTTTTTA
-TGATTTCTTATGATTTTAGACTATTAACTTATTATTCAAATAAAATTCGA
-TTCAATTCGTATACATTTCAGTGCTAAATAACTATTCCTGTAACTTCTCC
-CAAAGACGATACGATGATCAAAATATGGGGATATGTTCTAGATACTAATT
-AAACATAGTATGTGAATATTGGTTCACATTGGTGGATTTTTAGCGTCGCC
-AGAGGGACATATTTGGTGTCCCCAGCCGTTTTTGGTGAAAACACTATTTC
-TCTTTTTTTTCTCGGTGCCAATCAAGTTGAGAAATTTCAGGCATGCTCTC
-GAACCTTCAGGAAAGATCGAATACTGCAGAAAACCTGTAGACTAGGAAAA
-CAACTTGGAAGTTTCTTAAAAGTTTGGAATTTTACTAGAATTTTCTGAAA
-AATTTCAGAAAAAAAGAGACTTTCAAGAAACTTCTGAAAACTTCGAGAAA
-GTTCTGGAATGTTCCAGATTTTTCTAAAAAGTAACAAATTCCGTTCAGAA
-CAATGTTTTGAATATATGCCAGAATCTTACTCAAGTAAAATAATTTTTTT
-TAAATTCTGATACTCCAAAAATATTATGAAATTTCAAAAAAAATTAAATT
-TAATAGACGTTTGCAATACTATTGAAGACCTGAAAAAATGTTAGAAATTT
-AGAAATTGTTCATTTTGAAGTATTCGAAATACTGTTCGATTATTCATGAG
-ACTGATAATGTTATCAGTTTTTTTTATTTGAAAGCTTTCTAAGAATTTCA
-TATGATTAGAACATCGAAATAGTTTTACTTTAAAGAAAAAATTGCTCCTG
-GAAAATTTTAACTGCTGAAAACTTGGTTACAGAAATTTTATGATGCTCAA
-ACACTTCCTGGAAACTGAAAAAAAAAAACGTTTCATCTGCAAAGAAAAAC
-TTAGAACAAATTTCAATAATTTACTTTAGTGCAAATTCCTAGTATACATA
-TATGTATATTTACATGTTTTGTTTGCAGTTCAAAAAATTATAATGCCGTA
-AAATGGTCGCCAGAATTATGGTCCACGTATGGCTGCAAAATAATGTAAAA
-AATTGAAAATCTAGGCAGCCACTGGCTCACAATTTCGCGAGCGTAAAATT
-ACTCACTTTTTTATTTTCAGGATCACGTGCTTATTGACAAAATCTTCAAA
-AATCGCACAATTGTCAGCAAGATTGTAAAAAATGTGTCTAATCAATTAAA
-TACTCTGTTGGAGTTGAGAGTAAGATCACTTAAATTTGTTTTCTGGTAAT
-ACACCGAAACTAAAGCTGGCTAATTTCGATGAAAATTATGAGTTCATTAA
-TAACTTTTTTTCTGCTTATCCATTTTTCTGAAAATGTGGGGATTTATGTT
-ATCAACCATGAACTTTCATTGGTCAGTAGTAAAAAAAACAGTATAAATTA
-TGTTTTAAATCGTTTTTAAAACATTTGGAGGGGGAGCGACGAAACCCATA
-ATATTATTTATACGTAAGTGCCAGTTAGTCTGATGGCATTGATGAACTTT
-TATCAAAAAAAATTAATAAAAATTTGCCGCTGCAAATAAACAAAAACTTA
-GTTTTTCAAACAAAAAAAATCAATACAGCGGACTGATATCCCTAATTATA
-GACAGGTATCAAAATTGTGTTCAATTTTACTTTAATTCGCTCTTTTTTCA
-GCTGATAAATAAATTGTTCAGCGAAGAAGTTTTGCACAAAATTCGAAATG
-AGCATCGAAAAATACAAATTCACAGTTTCAAGACTTGTAAAAATTGAAGA
-AAAAGATCAATATTCATTAACAATCAAGTAGATCCTGAACTTCCGCTAAA
-ACAGCCTCGTCGATGCACTTGCTCGTTTCTTATAAATGCACTGGAGATAA
-ACAAGAACAAGGTGAAACACTTATTCGTGTAAGTTGAAATCAATTGTTCA
-AAACCTGGTTTTTTTGCTCGCCGCTTCCTCTGTTAACTACCAAAAAATTC
-AATTTTATTTTGATGTTGATAGAATTTTGACCGGTAAGGGAAATATTTCA
-ACTTAAACCCGGACTTTCGAATGACCACTCTAAAAAAGAGCTAGCGGCAG
-AGGATCAATTTGAGCTAGGGAAAAGTCGATCTGAGAAGTGTTTCAGACAA
-TTTTTCATCAAAATAGGTGGTTCAGAACTTGCCTTTAAAAAGTGTTTTCT
-GAGTCTGTTGAAGTTTTTTATGCTTTTTTGTGATCGTGGAAACAATATGA
-GAAGTGGTGAAAATTTCAATCAATTAAACCAATTTTTAATGTTTTGTACT
-CAGCTGTAACATTATTTTCAGATTTTTAAAAAATACGGTAAATGTGAAAG
-TCTACAAGCTTTATGTCGAACCGATTAAGAAAAACGAAATTTCGTGCGGA
-GTGGATGCTCGAATTATACTCAATGATCTCATACACGATTGCTTGATTGG
-AGTAGATTGTAAGTCAATTTTTGACATGAGCGCCTGTTTTTCAGAATTCT
-GAGTAAAATATATGGCTTTTGAACTACTGATTTGACATTCATGATTTTTA
-GATGGACTCGTTGAAGAATATAAAAATGATTTTTGCTGTGGTTGTCAAAT
-ATGTCGAGACATTCATAGAAATAAAAACTGTATAGTTCATAGTATTCAAC
-TTCAATATTTTGGTGGAAATTCGATACCGCAGCAGTTTTTGAATTTGATG
-TTGGAAAATTTTGGAGTTGATGAGCATGATCGATTTATGGACAGATTAAA
-CGAACTATTCGGGAAATTCGCATATCTTCGATTGAGCAATTTTGGAATTG
-ATGAGTTGCGAATATCGGGAGAAGAGCTATTTGGAGAATTAAAAATAATA
-GAAATCATAAATCAAATCAGGATATCTCCACATCATTACAAAGCGCTGGA
-AATGAAAGACTGGTGAGTGTAAATTGATACATTTGTAATGAACACCGTCG
-AACAGATGTTTGAATCACTGCTTTAGTTTTTCTATTATAACAGTACACGT
-ATTGTAACAGGTTCTCAAAAGAGTGAATTCTCGTGTTTTTCATACTTAGA
-TAGTCTCTCCATTCCTTCACTTAAAGTTATCCCAAAAACAAACAGCCCAC
-TGCGATCAATGTCATGGAAACTTTATTCTCGTTTTTTTCGTTCTTCTGAG
-AGGAAATCGGAAAATCGAATAATTGGATATTGAAAAACGGAAAATTTCGG
-TGTTTCAATTTTCCGGAAAACCAAAAATCGGATTGTTTAGAAAATTAACA
-AAAAAATCAAATTTTGTTTTTGTTGATGAAAAACTCAGACACTCTTGACA
-TGATATGCTCAGGAACATTATAAAGATTACATTTTACAGGTTGTTTTATC
-GGACCATATACGAAAAGCAACTAGGGCGGTACGTAGTTGGTGCTCGAGCA
-AATTATTTCCTCAATTCATTGGTAACATGCCACACATTCACCGTTTTAAT
-ACTGGGAAAAGAGTTCCTTTCAATCCCAAGAGACTTTTTATACCAGCTTA
-TTTCAAAGTGGAATGTTAAGGATTTCAGACTGGAGTTCCGGTTCGAAGCT
-TACAGTGGTCATTTTAATACTATGTTTAGTTCAAATATGGATTTCATTTT
-GGAAACGTCTAAAGACTTTTCAAATGCCGTATTCAATGTACCATTCAACA
-CCCAACCCGTTTCGAGGGTTCTTCTGGAAAAAGTGGAGATCGATTTACAA
-TACTCTGAGGATATGTTACTCGAAATGAACGAACAACTGGAAAACGACTA
-TTATTCACCAATGGACAATGTGATTGCAAATGTTCAACGAAACTTCCCAG
-CCAAGAGTATGACTGTTCTACTTCCTAAAACGTATCTCCTCATTACTCCG
-GACAATATGGACAGAGTCACAGCAAAGCTAATCCGATTGACTGAACAAAA
-CAGCCAGAGAAATGGAAGTGTCACATTCAACTTATACTATCAGCATGACA
-AAGGAGAAAAACATATTCCAGAGGATATCCCAGACATTTTCAATTCAAGA
-GCACGTCTTGTAGGTGAAAAACCAGTAGATTGTTGGTATCTCGATGATAT
-TTTAAATATCCCCAAAGAAAATTTCAAGGATGGATTTGGAGAAGTGACTG
-TCTGGTATGGAAAAAGCTTTCAAATAAGAAATTCCACAGAAAATCGAAGA
-ATGAATTTTAATATATTCTATACCAAAAGCTATCTGAAAAAGTTCTTCAA
-TGAGAGACATAGTAGATGGGTGAAAACTGGATTTTTATTGCATTTCATGG
-ATCTTATTAATTGATTTTATGTGTATTTCTGTTACTACTAATAAAGCAAA
-TACTCTGTCCGTCCAAACCATGTAGCCTGTAGACCTCGGACAAGAGTTGG
-GCGCTGCCTAAAAAATGAAAAAAGTCGTCAACTACCTCGTCGTCTCGAGG
-CGTCGCCGAAGTCTTACCTGCTGAGCCATGATGGTCGCGCGGAAAGATGC
-ACACTAGTAATAACATATCGTACTCATATTCTGATAGTTTTTTTTGGGGA
-AGTGTCAGACGTATCTGATTGATACGGTATTCTCACATACCTTATTTCAT
-TCGTTTTCAAGTGTGCTCACTAAGGATTCTAATAGTAAGTTCAGAATTTA
-CAGAATTACTGTAATTCAAGTTTGTTTCATGTCTTTCAATAACAGACAAT
-TTTATAAAATTTTGCATTTCAAAGGAACAGTTCAGTCTTAGAAAAATTCA
-AAATTTGATCCATGGGATTGACTGACTATTGTTTGTATACCAGCCGTTCG
-CACAATGCGAGTGCTCCGACTGGCGTACTCGAAATTAAGATGAAATTCTA
-AAATTTCTAAGCCTTGGAACGTTTTTCTCAGTCTTCCAGAAGTTTTTAAA
-GCAACATGAATATTATATAACTAAGTTTTCAAAAGTTACAGATGTTTTCG
-GCCGAAATTAGACTATTTTGCAATATTTTGCGACTTTTTGCTGAAAAATG
-GTACCCATCAGAGATGTGCGGCATGTGCCGAACGGCATGTGCCGATGTGC
-CGAAAATTATTCCACTCGGCACATCGGCATGTGCCGACCTTTTTTGTCGG
-CACATTTCGGCACATTTCGGCATATTCGGCACTGTCTGGAATATGTACCA
-AAATTTATTTTTTAATTTTAAAAATGCAAAGAAACTTCAAAAAATTGATT
-AAAATTTTCGGAATTTATCATTTCAACTTATAGTTTACTAACTTCAATAT
-TAAGACAAATGCACTGCATTTTTTATGGGGTTATCCAACTGAATGTTCCC
-GCTTTTTCCTCCTGTTTCCCCCCTCTAGTCGCGATCCAACTGGGAGGAAA
-AATGCATTTTCCCCTCGTTTTCGCATTTTTTAGCTGCGAAATTTCAGAAC
-TGAGCTTAGGGTGGGCATTTATAGACTTTTTTTAATTTTTTTTGACCAGA
-AAAAGTTAAATTTTTATAGTTATTTTACCAATTGGACCTTAAATTTGAGC
-TATGATATCTTTGTGGTAAGCCAGAGTCATGGTGAGTGATCAACTACAGA
-GTTGTAGCAAATTTTCTGTTTAAAATTTTGTTAGTTGATCAATTCTTGGT
-ATCATAGATTTTCACAGACTAACATAGCTGTGAAACTGGACAATTTCTTA
-ATGTAAATTGCGTACACGAGATTTCTCTATTTTCCGCGTGGAGTACTAAT
-ACCAAAAATTGATCAACTAACAAAATTTTAAACAGAAACCTTGCTACAAC
-TCTGTAGTTGATCACTTACCATGACTGTGGCTCACCACAAAGATATCATA
-GCTCAAAGTTAAGGTCCAATTCATTTTAAAAAAAACTATAAAAATTTAAC
-TATTTCTGGTCAAAGAAAGCTGGAACCGCATTAAAAATTATGTTATTTTA
-GTATTTCAACAAATGTCTAACTGTGAAAATTAAAAGTAAGTTTGAAAAAA
-TTTCTTTAAAACATTTTTTGATAATTTTTTCATGTCCTGTGCAGATTTCA
-AATTTTGAAACAATACTTTTAATTCTCATATATCTCCGTTGAAAAATTTT
-TTATGACAAAGTGATCAATTACAAAGTTGTACTTTGGATTAAGAAAAAAA
-AACTTTGTAGTTGATCACTTTGTCATATAAATTTTTTCCACGGAGATATA
-CGCATCCGAAGTGAATGAGTTTTCACTATCAATTCTACTAAACCCTATGT
-TTTTGTCTGAAATCGTGTTCAGAACATCCAAACTGAAAAAAACAACAAAC
-ATTGCAAGTAATTTTTTGTTATTTATTTAAATTGATGAACTTTTTGTTTT
-TTTTAAGAAGCTATATAGTATCTTTGCAAATGTGCCGAATGTGCCGATTT
-TTTTAGGTTCGGCATGTACCGAGTGCCGAGAAAAAATTAATTCGGCACAT
-CGGCATGTGCCGATGTGCCGAAATTTCAACAAGTGCCGCACATCTCTGGT
-ACCCATCGTCTCGTCACGACAAATTTTTGTTAAATTCGAGTATGTGTGCG
-CCTTTAAAGAGTACTGTAATTTGAAACTTTCGTTCCTATGGAATTTTCTT
-TGACTTTTCACTTTTTCCTCTGGTTTTTATCCAATATTCATAGAAAAAAA
-GAGAAAATTTTTCTAAAAATCGAAAGTTTGAAGTTACAGTACTCCTTAAA
-GGCGCATAACGTTTCGGAATAAACAAAAATTTGTCGTGGCGAGACCTGAG
-TATTATTACAGGAACGCAAAATTCGGAGAATGCGTTTTACACAACATATT
-TGACGCGCAAAATATCTCGTAGCGAAAACTACAGTCATTTTTTAAATGAC
-TACTGTAGCACTGGTGTCGATTTACGGGCTAGATTTTTATTAATTTCTGA
-AAATTGAGCACCCGTAAATCGACACTACTGTAGTTATTTGAACAGGATTA
-CTGTAGTTTTTCGCTACGAGATAATTTGCGCGTCAGATATTTTGTGCAAT
-ACGCATTATAAGGGACAAGTTCTCCAGTGAATTCTTCCAATTACATTGAA
-ATCCTTCTATTTTGAATACAAATTACTCAAAAGACAAAGTGTCGATTTAG
-CCTAAACATTGCGCATGCGTAATTTCTGAATCTTGTTCGTTCTTTACATC
-TGCACACTTGGGTAAGAAGTTGGGCAGCCTATGTTTTAGAGGGAAGTCAA
-CAATGTTATTTTCGCACTTGTGGCAACAGAGTTGAAACTACGGTACTGTA
-TATGGGTACACCTTTTAAAATTTTAAACAAAAATTTGTCTTGTTGAGACC
-GGAGCACATAGATATTCTCAGTGTGTATTTGTCTAAAAACCTGCCAATAT
-TTGAAAATCTTTCAAAACTTCAATATTTTGCTCCAAAAATTAAATTTTTC
-AAATAATCTACAAAAAGAATCCAATTTGACTGAAAACCTGCTAATATTTA
-AAAATCTTTCAAATGTATAATTTTTTTGCTCCAAAAACTGATTTTTTTCA
-AATAATCACAATTTCAATTTTAATTTCGATAAAGATACACAAAAAAAAAG
-AATAGCATTTAAGGATTTCCTTGTTAAGCTTCAACAGCGTAAGGGAAGGC
-CTCGTTGGCAATCATCATGCGTGTAAGTTCGGCGGCGCTGAAAATAAATT
-TTTGATGTTTAGCTTGCATGGTATGTATTACTGATCCCTCAACTCCGCCA
-TGGTCCGACCCTGACGAAGTGGTATCTCTCCAGCATGGTGAACTCTGACG
-TGATTCCAGTGCACAAGCCTTGTTGCAGTATACGACAGCCCACAGATACC
-GCAGTAATACGGATAGGGAAGGGTATGCAGATGGTAGACGTGGCGAGCCC
-TGAATGTTGAAACTGACTTTTTGAAATGACTGGAAAAATAATTACAAGTC
-AACTTGCTGTCCGAAATTCATCATTACAAATGGAGCATTGGAATTGTTGA
-GCATCAGGAGATTCCGAATTCCGATGGGTATCTTGAGGCTCTTCCATTTC
-CTGAAAATTGTAATTTTAGACTTTTTAGATAATATTCACAAAATCTGTTT
-AGGAAAAATTAACTACTAAAGTTACAGTAAGAATTTTGCTCTGAATTTGC
-TCATAAAGGAAATTTTTTTAAGCTTGCACCCTGATTTGTTTAAATTCTTC
-AATCTTTGGATTCCTCGCAAAAAATTCAATTCAGTCTCCTGGGCGTCGAA
-TTGCGATGGAGCGCGCTTGCCGTGCGTTGGCGCAGCCACGGTGGTTCAGT
-TGTAAGATGGGTGCAAACGCGCTCCACAGAGTTTTCGATCCCCAGGAGAC
-TGTGTCCAAGTAAACTGAGTGGTAGCTTTTTTGTTCAAAAAATGTGCCCC
-GCCCATTGGAAAAGCATGACCTTGTAATCGAAAATCCTTCAAATACGATT
-TCTATTCAAATTTACGAAACTGAAAAAAAATTAATTTTACGAACACTTTG
-ACGTCCATTCGGTGAGATTCTTTCAGGTGTGAATCGTTTTCTCTTGTTAC
-GAGCATCATTTGGCTCCGGCACCGCCATCTGACCGGCCTAAAATAAGAAT
-GTTTAAAAAAATATGCATTTAGGAAGTTTAATATTCAAAACAGAAGAGAC
-ACATTCCATATGAAAACAACTTACATTCTGAACGTTTCCAACGTCCGCCG
-ATTCCTTTACACCGTATCGATCGATTAAAAAATCGATCAGCTGACCGTTG
-AGCAGTACATCCTGGAGCGAGATGGTGATCGGAGCCACCGGTGGTGCAGT
-CTCATCGTCTGAAGATCCAGATCCGAAGGCATAGCTGTCCGAGTGGATGG
-TGTTGGAGTGGTCGAATTTCTGAAAATTGACCAATTTTTGATTTTTTAGA
-CTTGAAAAGGCCTAAAAAGGACAAAACGAGCCCCAAAAATTTGAACAAAA
-GGGTTGAAATTTCATATTTTGTTAATTTTTCTGTGTCACAATTTTGATTT
-TCAATCTATCGATATTTTGAATAAATTTCAATTTTTTCGGGAAAATATTG
-CAAAATTTAGTCATTTTTCCTCAAAATAAACCAAAATTTGATTTTAAAAG
-TTTGGAGAATGAATTGTTGAACTTGGAAACACCAAAATTAGCTCTAAAAT
-TTCGAAAAAATGGGTAATTTCAACTTTCCGTATCTTTTCAGTTTGTCGGA
-ATTTTTAAAAAATTTTATTACAGAAAACCACCAATAATTAAAATCTTGAC
-TTTTTTTTTAACCCTAAAAGATTTTTTTCGAGAAAATATCTTAAAATTTA
-GTCATTTTTCTTCTTTTTAGGAGCTATTTTTATGTTTTTTACTTTTTGTT
-CCGTCAAAAACAATTTTAATTGTAAAGGTTTTTTTACGATTTTTCCAGAA
-AAACCGGTAAATGACACTATTACGGGAACAAAAAATTTGGAAAATGCGTA
-CTGCACAACATATCTGACGCACAAAATATCTTGTAGCGAAAACTACAGTA
-ATCCTTTTCAAATGGCTACTGTAGTGTCGAATTACGGGGCTCGATGTTCA
-GAAATTAATTTTTTAATCGAGCCCCGTAAATCGACACTACAGTAGCCATT
-TGAAAAGTATTACTGTAGTTTTCGCTACGAGACCCTATTTTGCGCGTCGA
-ATATGTTGTACAGTACGCATTTTCAGAATTTTGTGTTCCTGTAATAATAC
-TAAGATCTCGCCACGACAAAGCGAAAAATTTTTATCGATTTTTCAGCAAT
-TTTTCTCTTGTTTTCATAAAAATTGGGCAAAAACCGGAGGAAAAAAGTGA
-CGAATTAATAAAAATTCCATGGCAACGAAAGTTTGAAGCTACAGTACTCT
-TTAAAGAAGTGCACCTTTTTGGATTAACAAAATTTTGTCGTGACGAGACC
-CTGGATACCATTTTTCCGGCGGAAAAGTCGCAAAATTAGCGATTTTGGGA
-ATTTTTCGCGGCGAGACAACTGCACAACTCGACATGCGAGTTTATCCTTG
-CAGATGGCCAAAAGCCCTCCGTCGATCATTTGACGAAGCAATTCCCTGGT
-GTTGCGAGCTCGACGAGCTTCTGAACGATGAAATTGCCATTTCGACTGTG
-GCAGAGCCCCACGAAGAGCGTCGTGGATTTGGTGAGCTTCTCGAACACGG
-CTTTACGAATCTGATCTTCGGAATTTAGTGGATAGTTGGCCTCCAAGAAC
-CTTACCCCCGATGGATAGATTGCGAAATCGATGAGCTGCCCGTTGAGCAG
-CACATCTTCGAGCGAAATGAAAATCGGAGCCACTGGTGGTGGGGTCTCAT
-CGTCGGATGATCCCGATCCACTGTTGAGGATAAAGCTGTCCGAGTCGGAG
-GAGGTGGTGTTGCTTCCGTGGCGGTAGGGGAGAAGCTTGACCGGCGGCTT
-TGGATTCTGGAAATTCGAATTTTAAACTTTTATTATATTTTTATTTAAAT
-TAGAAATTTTTATGCAATATTTTACCTTGTTCTTGTGAGTTTTTTTCGAC
-AAAAGCGAGAAATCCGGGTCGAAATCGAACGACGCGCCGAGCATGTTGTA
-CGAATCCGTGCTTTTACGATTCGGAGTCATTTAGACAGAAAAATGAATGA
-ATATAGGTTAGTAGACGCTGAAAAATTGGGAATTTTGGATTTTTTAACGG
-AAAAACGAGTGAAAATGAGAGAAAAACATGTAAATTTCAACGAAAATCGC
-GAAATTACCGCGCATCGAAATTCAAAATTGAATTTTTCGCGGTGGCCCGG
-GTTACGGTGATTTTTAAAGGCGCATGGTTGTTTTGAGTGAGGTATTGACG
-CGAAATTTAAAATTATTGAATATTTTTTTCTTATTTTTACATTTTTGAAG
-AAAAAAATGATTAAAATTCGATTTTTTAGGGAAAATTAAACATTTTCACA
-AAAATTGCAGGAAATCACTCGCCAAAATTCAAAAATGAAGAGTTTCGTGG
-TGCGCCGGGTTACGGTGGATTTTAAAGGCGCATGGCTGTTTTGTATTAGG
-TCTCACCACGAAACTTGGAGTTTTTGATAGTTTACTTCCTATTAGGGATT
-TATTTTTTTAATTTTCGCTCGATTTTCACACATTTTCACTCATATTCACT
-CAATTTTTTGCAGAAAAAATGTCAATGGACATTGTTATGAAGTCAGATGA
-GCAGCCGTTCATCTCTGCGCCTGTATGCTTTAAGTAAGCTCCAATTTTTG
-TTATTCTGGCCTAAAATTATTTTTTTGATTTCCAGAACGTTCGCATTTTT
-CGCCAAAGCATCCGCAGAGGAATGCAAACTTCTAGCTTCGGGCTCCAACG
-CTCGAGAAAGTTTCCAGCAGGCCACGGGGCTATCGGAGAAGATCACGGAA
-GACATTTACCGCCAAATTGAGTAGGTTTTTCGATTTTTTTACCCTTAAAA
-ACTACTATTTTTCTATTTTCCAGCGTCTCCCACATTTCATCGATGGTCTT
-CAACAGAGAAATGGACGGTGGCATCGAGAGAAATCGGCTCGGCTCGCAAG
-CGATTCTGCTCGACGAGAACTCCAGGCGCCGCAATCCACAGTTCAAATCG
-ATCGCGCTCCGCTCTCTCCGCTACGATCACATCGATCATAGAGCGTTGGC
-AAGGAAATCGCCTCATCTGATGCCTCCGACTTATATCAAAGAGGAAATTA
-TGGATGATGAGCTCGACGAGGTGAAGGAAGAAGTGGTTTCCGTTGGAGAA
-GCCGCCTTGCCCACGCCAAAAGTTGAACTGAACATGGACCATCCGGAAAA
-GGACCTGATCATCAGCATTTCCGTGTATCTCGGCTACACCCGTACCCTTC
-AATACCACGAGATTCGTCTCGGACGTTTGATGAAGGTCACGGATCGGCTC
-GAGCTCACCGGAGATCACACGCTTCGCGATCTGAAAAACGCGTTCTCGTG
-CCCCATCGATTTCTCGTTTTCCGACGATTTTAGCGAGAAAAAGCCGTCGT
-TCAAGGATATGGCGAAAAATAAGTGGCCGTCGTCGATGTTCTTCATTCAT
-GACACGTTTTATATCGACTCGAACACTGGCGACAAGTTTGTGGATCCGTC
-GATGTGAGCAAGGGTGCCGGCTAAAAGTTTTTCAGTGTTTTTTGAGCGAA
-AAGGAACAATTTTTTTCTGAAAATTATTGATTTTTCGTTAGTCTTCAGAA
-AAAATGATTTTTTACGCCGCAAAATCGGGAAAAAACAAAAGAAAACTGAA
-AATTAAGACATTTTCGTTGATAAAAACGAATTTTTTGGTTTTTTTTTTCA
-GAAATATATTATTTTTTGCTTTATTTCAACAAAAAAAACCCAAATTTTCA
-GCACAATCCGAAGTTGGGCCAAAAAGTTCGACTACATCGGTCCGATGCAC
-GTGAAACAGATGTCGGAGACGAGGATCGGGGATCTCATTTGTCGGCTCGG
-TCAGCCATACGTCTACATTCATCAAGGCGTCTGCGAGCACCTCATCGTCT
-TCAATGACTTGTGCCTGAGGTACGGAAATTCTGGAAAAATCGAAAATTTT
-GATTTAAAAAAACTCAAATATTTATGTGTTCTTTTTTTTACTAAAAATTT
-TTTTCAAATTGTTTATGAAAAAAACACTAAAAAATAAGTTTTTATCAATT
-ATTTAAACAAAATTTATATTTTCCGATTATCAAAATTGTTTTTTTTTTTC
-AAATAAAATACCCCGAAAAATATATATTTTTTAATTTTTTTTTTCTATTT
-TTTGCAGAGATGAATCCCACACAAACGTCGAATTTCCACGCCGCCTCGTC
-GAACGGAATTTCAGAAGAATTGCATGTGACACGTGCAAGGAGGCGTCGGC
-GCAGTGAGTAGTAGCATTTAGAAATTCGGAATTTTTTGTGAAACCCCCGA
-AAAATATAGTTTTTATCGGAGTTCGAATTTTCGAAAAAAAAATCCAAAGA
-GAATCGATTAAGGCAAAAATCATCAATTGAATCCAATTTTTTCAGCTGGA
-TGATCGTCGACCACGACAATCTGCTTCCCAACTCGCCAGGCTATCTGTGC
-TCTTCGTGCTACAAGGAGTTCTGTTTCGACGTGAACGGCAAAAAAGTGTG
-CCAGTTTAAGGCCGTACCGTATTGCGATCGAAAGGACATTGGCGACGGAC
-GCCAGTTCTTCACCGAGCTCGATCTTTAGAGAACGAGATTTAAAAGTCTG
-TATCATTTTTTGTTGTTTTTTTTTAAATGTTTTTCGATTTGATTGTTTAA
-TTACCGATTTTTGGCCTGTAACTATATTTGTTGAAATTTCAAATTTCTTT
-TTTTTTAAATAAAATTTTTGTTTGCAAAAAAATTTATCCAATAAATAAAC
-GGAATATATCGATGATATGGCAAGTAGGGGGAAACGGACGGGAAAATGAT
-TATTTACAGAAAGGGCGCGCACCAGAGGTTTCTCGGGGGAGCCCCGAGGC
-GGGTGGCGGAGCTTGGCTCAAAATCTGTCGGAAAAATGGGTTAAATGAGA
-GAAGAGGTAACCTAGAAAATGAGATGAGAAATTCGGAAGAATTTTGAACA
-ATTTGAAAAATCGATAATGTTGAATTTTAAAATTAAATTTTATTGATTTT
-TTGAAAATCGATTATATTGTTGATTATTGATTAAAAATCACTAGAATCAA
-TAAATCTGATTTGGAAAAATCAAAAAAATCGATTTTTTATAATCATAAAA
-ATCAATTTTTAAAATCCAAAAAAATCGATATTTAAGAAATTGAAAAAAAA
-TCGATAAATCAATACATAGGTGAGCTCGTCTCGTCGATTTGTGTTTTTGT
-GATTGGTCCCGGCTGCTTTTGAGATGGTCTAGGCGTTGTTCCGTATGACA
-TTCTGGAAATTTTTTTGTGAGGCAATGACACGCCCACAAAATGGACGGTG
-GCAGAAATTTAATAATTTTAAATAATTTTCTGGATAAAAAAATCGATTTT
-TCCACTTTTTCGAGTGAATCGAAAATTTAAAAAAAACATTCAAAATTGTT
-CAGGGTCTCGCCACGAAAAACTCACAAATGCACGTTATGCGGAGCGTCGT
-CGGATTCCGGTGTGTTGCTACGGATCGTGTCGTCCATGCTCAGCTTCATC
-GTCGATTGACGTCGCCGTTTTGTGGTGATCTGAGCGAGATTTATTGATTT
-TTAAAGACGCATGGCCTAGAAAACACAACACTTCGGCCACGGACTTTGGC
-GGCCGAGTTTTCTAGGCCATGCTGCGGCATTTAAAGGCACATACCATGAT
-AATGAAGATCGCCAATCCGAAAATGATGACCAATGCGAAAGTGATGATTA
-CAATCATCAGCGATGATAAGGAATATGATGAAGTTTGCGTGGAAATAGAA
-TCGATGTACGCTTGTGACGTCATTCCTGGAAATTATTGATTTTTTTGGAA
-AAAATCAATAATTACTTACCGTCAACAGTAACACTCAACGAATCAATCTT
-GTAATCCGAAATCATAGAGTTATTGCGTGAAAATGCGGCTTCGAACCTGA
-AATGTTAAAAAAATCAATTATCGATTTTTTTGAAAGTTTTTGAAAGTTTT
-TGAAAAATTGATACAATTAACTTGATATTCCCCCGGAAAACCTATAAATC
-AATGAAAAAGTTAATATCTAAATTTTTTCCAAAAATTGAACTAAAGTCGA
-TTATCGATTATCGATTTTACTAATCATTTTTCAAAAATCTATCATATAGA
-CGATTCCTACGGAAACCCCGAACAAATCAAAAATCGATAAAATTGACTAT
-CGATATTTTTTTCTAAATTTTACTTTTTTCGATAAAAGTCGATAGCGTTG
-ATAATCGATTTTTTAGAGTTTTCCTCAAAAAATGGTAATAAAATATTTCT
-AATCGGTAAGAACTCACAAATTAACAGCCATTTGAGCATCACCAAGTGAT
-TTTTTGGTGAGCACGTCGGCTCCGACAACCACTGATCCTTTGGTCAGTGA
-CTTGATTTCAACATTCACAAAATTGTCGTCTCCCGAAATGGAATTGATGA
-ATTCTCCGATCTGGAAAAAAATCAATAATTGTTTAAAATTGATTTTTTTC
-AGATCATTTTTAAAATAACTAGTCTAAATCTATATTGAAGTCTAACTCAA
-AATTTTCCACAAAGGCTTACTATTAGGCTTAGGCTTAGGCTTAGGCTTAA
-GCTCAGGCTTAGGCTTAGGCCACGCGAGATGAAAACAAAAGAGAAAATTT
-AGTGAAAACAAGAAAAATTTCTTTTAAAAAAAAGAAAAAAAAAAAAAAAA
-AAGAGCAACAGCCATGCAATTCTTAAATATAACAGGTTCAACTACTATCT
-TCAAAAATCAGTTTAATATCGATTTTTCCCAAATGTCAATAATCCATTAT
-CCATTTTTGACTCACCGCTGGCACCAAATCTTTCGCTAATCTCTTCGCAG
-GGCCACTCTGAATATCGTTGAATTCCTCTACAAATTCCAGTGAAATAATA
-CGAAAAACTATTGGTGTTCGAATGGATTTAGCCGGAAGGAATACTTTCGA
-TGAGTTTTGAAGTGCCACCGGCACAGTTGAAATATCTTCAAAAGTCGTGG
-ATTCCTCTGATGAGGTGGAGGTGGTCTCTTCGGAGGAGGTAGTGACGTCA
-GTGGAGAGGGTTGATGGCTCGGTTTCGGCCATGGTTGTGTCCATTGTGGT
-TTCCATAGTTTTTGTAGTTTCCATTGTTGAAGAGGATTTCATTCTGAAAA
-TTTTGAAGTTTTGAATTTTTTCCTGCAATATATGAACACTTCCGAACCAG
-CAAAACTCACTAGGTAGTGTTTTAACTATACGGTGCGATCGAGTAAAAGT
-GTCATGCGATAGCTGGCATCTTAGGCTTTCAGAATCTGTAATTTGTTCCG
-GCGGAAGACCTCTGTGAGTCTGGAAATTTTCATCTGAAAATTTAGTACTG
-AAATCTGCATTTCCTATGGTTAACAGTGGATTTTTGTCTCTGGCGCCAAC
-AGAAGTCTCACCACAATGGTGGAAGGGCGAAAACATCGCTTCGAAGCTGT
-TAACCATAGGAAATGCACTGATTTCAGTACTAAATTTTCAGATGAAAATT
-TCCAGACTCACAGAGGTCTTCCGCCGGAACAAATTACAGATTCTGAAAGC
-CTAAGATGCCAGCTATCGCATGACACGTTTACTTTTACTCGATCGCACCG
-TATAGTTAAAACACTCCCTAGTCAGATATGTGCTCTACACTTTTAAATTT
-TGCAATCAAAATACTTGAATATAAAATTAAGAGATTTTTGAATTTACTAG
-GCCACCTCGAAAATTTCTAGGCCACGGCAGGTTGGTAGGGTGAAGCTGCA
-GACCCCATAAAGCTGTGAGAACGGTTTTTTTGCAAATTTTTTAAAACAAA
-CATTTGTGAAGAATCTGAATATTATCAGAACAAAAAATAATTTCGACAAA
-AAATAATAAATTTTTTTATCAATATTCAAAATTTTTAACTTCCGAAAAAA
-CTCAAAAAAAAACTCACCCAGTCGTAGTGCTCTCGACCATCTGCTTCGTA
-GTTTTCGGGATATTCGACAAAATCTTTGGCTCTTCCTCAGACATTTTCAG
-AATTGGGAATGCGGGGCTCTGATCTGTGCTCAATGAGCTATCAATAACAC
-TTCCATCCTGCTCAAAAAGTCCTTCCAGTGCACTTTGATCAAATGGTGTT
-TCTCCGTCATCTCCAGCTTCTGATGGGTCACTTACTGCGACGGTGGATTG
-GGTTGTGGTCACTGTAAAATTGGAAATTTGGAAGAGAAAAACCTCGGCCA
-TTGGTGACGTCATACTTTTCGCCACTTCTTCGACCAGCTATAATGCCACG
-CTTTTAGCAAGTTTTATTTTTGGTAAACCAAAGAGCAACCAATTTTAAAA
-CTGTGTCTCCAGGTTTACCGCCAACTTAAGGGCGTGTCCGTACAGGGTTT
-GCCCGTTTTATGGGCGTCGCTTAATAAATCATTTTTCAAGTTTTCAGTTT
-CGTGGAAAATTAGCATCCGGGAAATTGAGTCATAAGTATGACGTCAGCAG
-CCGCGCGGCTTCCCATGACGTCACTCCATGCGCTCCCCCGACGTCCCTCT
-AAGACGTCACCACCTCTCACCTGGTTTAGTGGGTCGTGTCATCTCCTTCT
-CTTTCAAAACTCGTCTATCAGCGACCTCGTCAACCTCAATCGGAAGGGAG
-CTGAACGTAATCACCTCCAAGGGAGTGGTTGGCATCATTTCAGTCGTATT
-TTCAGCGGCGAGAGTTGTTTTCTCAGTGGATTCATCCTGATCCTCCATAC
-TATCATCTTCGATTGTTGCCTGGGAGAAGTTGAACATACCGCCGTCAAGC
-GGAGTTATTGGGGAGAAGACGGACGTTTTCTGGATTGGGTTCACTTCTAG
-GGAGGTGTCGTTCGGCGAGAGTTCGATCATTTCTGTACTTGTCTCGAAGG
-TATCTGATCTGAAAGTTATGACATTTTTTTGGTGGTGGCCTGGGAGAAAA
-CTAGGCCTCCTGGCCTAGAAATCTCAAACCTCGGCCTCCAGCTCTCACTA
-GCTGACCTAGGTTTACTAAACATCGGCAAGACCTCTTTTCGACTACTCCC
-TTACAAATTTTTAACAGTTTTTCATCACACAATTTTCCGATTCTTACCCC
-TCATTCATCATTTCTTCTTTCGGAACAGCCATCATCGGCATATCATCATT
-ATCAGGCATTACGGGTGTCGTTGTGTCTTTTGCCAGCGGTTTGTCGAACA
-CATCTTCAGAATTTTCGTCTTGCGCGAAGGAAACTGAAAAAGTTAAATTA
-CATTTTTTCTAGGCCACCAGGTTTTGCATTTTGGCCTAGAAAATGAAATG
-AGAAGCTAGACCATGTGGGTTTATTGCGAGGAAAAGCTATCCCACGAAAA
-CTTTTATAAGCGTCTAGAAAAGTAGAAACCTCGGCCACCAAGTTTTGCAC
-TGTGACCTAAACAATTTTGGTAAAATAGGCCAGCAAAATTTCCATGATGG
-CCTCAGGAAAACTAGGCCATTAAGGTTTCTTCCGTTACCTAGAAATTTTG
-TAAACCTAGGTCACCAGGGTTTCTAGGCCACACAAGAAAAGCTAAAAACC
-AACATTTCAGATCGGTCTGGAAAAGTGCAAAATTAAGCCACCAGGATTTG
-CATGGTGGTAAAAAATTGGTAAACGTGAACTAGAAGTTTATCGGTCATCA
-ACTTACGTGTCGTTGAAAATGCAATGAATAGAATAAAACCAAATGGTATG
-CGCATCGCTGAAAAATTGCAAAAATTAATTTATGTTTTGGAAAATCAGAA
-ATCGGAGTGTTCATTTTTTATGGGACAAGATAAAAAGAGATGGAGAAAAT
-TTATATGATATATCAGGTCAAAATGACCTTCGGAAATTGGGAATGAAAAA
-TCAAAATTAATTCGCGTGGAACTGGTTAAGATGATCGAAGATTGAAAAAT
-TTGACAGAAATTGCAACAATACTAATGCAAAAAGTTGGTAAAATATTTTT
-TTCAGTTTTCAGAAAAATCGATAGCAAAAGTCTTTTTTTTTAAATAAAAA
-TTTCTGAAATATTTTCGCTGCGAGACCTAAGGTGACAAATTGGATTAAAA
-ATTTTATGTGCCCATTAAGAGTTTTTCTGGAAACTGAAGAGAAAGTCGAA
-AAATTAATATACCCTACTTAAATTTAAAGGCGCACGGATGAATTTCCAGA
-AAACTAAAAAAAAACATCACAAAATTTGATACTCCAAGTTTAAAGATGCA
-TGGGTAATCTTTGAATGAGAATTTTGTTTTAAATTTTTGAACTGCCATTT
-CAGATATTATGAGAACACAAAATTCTAATAATGCGTATTGCGCAACATAT
-TTTGCGCTCAAAATATCTCGTAGCGAAAACTACAGTAATTCTTTAAATAA
-CTACTGTAACGCTTGTGTCGATTTACGCGCATCAAAATGAATTAAGATCA
-TACATTTACCGACAAAATATTAAAATTAGGCAAAAAATAATACGAATAAT
-GCATTTCGTAAATCGAGCACGTAAATCGACACAAGCGCTACAGTAGTCAT
-CAAGAAAAATTACTGTACTTCTCGTTACGAGATATTTTGCGCATAAAATA
-TGCTGCGCATTACGCATTCTCAGAATTTTGTGCGCCCGTAATAACCATTT
-GTTAAATGCTTAAAAAATTCAGATTTTATTGAAAAAAATTTTTGAGCAAA
-ATTTTTCGAAAAATAAATTTCGGCAATAAAATATTATTTTTCCATCGAAA
-AAGTATCGTATGGTGTGCTTGACATAATCTTGGTAAAAAGTGGCATATTT
-TGAAAACAAAAGGGGTTACCCCCTTCCTTCAGCCCGCCCGCCCGGGAAGC
-CTGGGCATGCGCGCAAGTGATTGTTTTGTCTGTTGTTGCTTATGTATATG
-CTTATTATTTACACATTTGTGTGTGTGTGAGTGACTACACTGCACACCTC
-TTGAAACGGATTATCCGGCCGTGGTCGAGGAGGGCCGCCGAATTATGCAC
-ATTCCTATGCTATGTATTGTGAATACTTCATTTCAATAACTTTATATATA
-TACAGTTAGCACATACGATTTTTGAAAATTGGGGTTGTGGAAGAGTTTTC
-ACACAAGTGGCCTAAAGTTTTTGAGTTTACTTTAATACTTCTAAATCACG
-TGGTGTCAGGCGGTCTCAATACAATTTGATCTACAAAAAATGCCGGCATT
-TTTTCCCAGAAAAATTGTGACGTCCGCACGCTCTCAACCATAAAAAATCA
-GATGAGATCTGCGTCTCAACTCCCGCATTTTTTGAAGATCAAAGCGAAAT
-GGGACTTTCTGACTCCACGTGCTAAATGAAATGTACGTTAAAAAATTATC
-TCTGGAAATTTGGAATTGCTCGGTGGAGCGCGTTTGCCGCTTAGTAGCTG
-AACCGTGATAGCTGCGCCGTGAAGAGAAGGGAAAAGTAAGGAAGTTATCA
-AAACCAACGACGCACTAATGAAAAGGAACACAAGAAAAAGTGAAAGTGTT
-TTTTTTTGGGTTTTTGTGATTTAGTTCGTGTGTGATAAAAGTTCAAATGG
-TTCGGCAGGACAATAGGAAGGAAACTGGAATTTTATATTTCATCTCTTGT
-TAAATTTACTTTTGTAGGTGTATGATTAGGTAGTGTTAATAGAAATCGGG
-ACTCGTGGCCTATCATTTTTTTGTGGCCGAGTAAAAAAATCTTCCACATT
-CGTCAACCATACGTGTGAATTTAAAGGTAATCTATAGGATATGATATTGG
-TAAACTTTCACAGAAATCCTAAAGCTAGGTTTTGAACTATGGAGCTTTGA
-AGTTTCTAGGCCCCTTTGGGAAACATAGGCCACCAACCTGAGAAAGGTAA
-GGGGAGGGCAGGGTACATAAAATACAACTTTTTCTCTGAAGTTTTTTTTA
-ATTAAGCGAAAAAGCCGACATAAATGTTTCAGTCATGGCCTAACTTGACA
-TTGGTGGCCGATTTTTTCGAAAAACTCTTCCACGATTTAGAACATGAACT
-TGGCAAAACTTCAAACAAATCCTAGAGATAGTTTTTGAATTATGAAGCTT
-TGAAACTTCTAGACACGTTGAAAAAGTTAGACCTCTTCCACTGTCATAAA
-CTTATAAATTCACAATTCAAAAATTATAGATTTCTTTCATATGTAGAATT
-AGCCCAATTTTTAAATCCATTGCACGGCTAGATTTGAAATCATAGCAATT
-TGAAAATTCTAGGCCACGCAAAAGAAAATTCTAGTTCATGGGAGTTGAAA
-GAGAGTCTCGGAAGCTAATTTTAAAAGCACAAGATAGAGGAAAACCAAAA
-ATTTATAAATTCATAAAAATCCAGTTTTTTAGCAGCTATGTGAAAAGGAT
-TAGAATTTCAACACGGCCACCACCGCCGGAGATACAATCATTTTGGGAAT
-ATATGTCGTTTTCGCGTATTTCTCACCAAAAAAAGATTCAAATCTTTTAA
-TACGAAAAAAAGTTGGAAAAGAATTAGAAAAATGCTGAGAAATTTTTTTT
-ATGAAAGCTTAGGCTTACAATTAGGCTTAGGCTTAGGCTTAGTTATTTTT
-TCAGTGTTTTCCAAGTGCAGAAAGGAAGAAACCGACGCTTCCTGACTTTC
-TATCACACACTGAGGGGAATTTCACCCAACCCCCCCCCCCCCCTCACTTC
-CCGCTACTACTTTTACTGTACACTTTCACCGAAAAGTTATTGTGTCATCA
-CGTCATTCGCCAAAAACGAATCGAACAAGGAGAAAAAATTGATGAGAAAA
-CGCAAGTGTTTCTTCCTACACTACATAGTGTTCAACACCCCTTCATGATA
-TGGCCGCGTGAAAACTCTTCCACGACCATAAAAGAAATTTACGGAACAAT
-CTAGCAAATTTTCATAAAAATCGGTTGGAAACTATAAAAGTTACAGGGGT
-TTGAATTTTCTAGGTCATGCGGAAAAAAACTCGGCCACGCAGGTTTTTAG
-GGTTAGGGAGGCGGTGTCTTCAAAAAAAAAGAAACCTCGCACCTAATGAT
-CCATGAATCTTCAAACAGAAAATGAGGTATAATCTTAGGTGGCCGAACTT
-TTGTTTCTGAAGAAAACTCGGCCAAGACCACGAAAAACGTATTTTTTTGT
-ATCGTTAATTGAAAAACTGAAAACAAGAAGTTTCTAGGCCATGTTGATAA
-ACCTTCAGTAAAAATTTTTCCTAAGCCATTAAATTACTACTGAACTGAAA
-ACCTAGGCCACGGCTTCAAAACATAGGCCACCAAAAACTGAAAGGGGGTC
-GTAGGACCGGAACCTGCTATTATGAAGCAAAGTTTTGTGCAATAAAAGTT
-TCAGAATTTCCAAGTTTTTAAACTATTTTTTGTCTGGAAATTATAAACCT
-GAAATTTCGGGTGCGAGACAAGATGGTCAAAGAAAAATAACGAGAATTCG
-GAGGGCAAAAAAATGAGAAGAATTTCCAGGAAAACAAGTGAAAGTGAGTA
-TGACTTTGACCTATACGCGTATTGTCTTTTTTGTTTTCTTCTTCTCGAGA
-AAAGAGAAACTGTCACAGCAGTAGTAGTTCTTCGATCACCTAATTACCTT
-ATTGCCCCCTTCCAGGAAGTCACAGTTTTTTTTAGGAAATGTGTGAAAAA
-TACACATTCCGCTAGGAAAAATTGAAATTGCGGTTATTGAGTTCCCTTGC
-CACGACAACGTGGCCTAGGATACCGCCATGCTCTAGAAATCCCGCTTGTA
-GCCTAGAATTTCCCATTGTGGCCTGGAGAAGTTTAGCGGGGCCTAAGACT
-TTTAATTGTGATCTGAGAGTTTTTTCACATGGCCTAAAATGCTATACGTG
-GTCTAAAATTCCTCATTGTTGAAATTTTTAGCGCGGCTTAGGATTTTCTA
-TTATGGCACTGGATTCTCGCCGTGACCTAGAATTTCGTAATGTGGCCTGA
-AAAGTTTAAGCGTGAAAAGTTTAAGTATTTTCAATCATAGCCTGGAGATT
-TTTTACAAGAATTCCTCATTGTGGCCTTGAATTTTCTATTATGGCCTAGA
-ATTTCGCATCGTGGCCTAGAAGAAATTTGCAGAGTGGTTTTGAAATTCGG
-TTTGTGACCTAGGGTGCTATATTGTGGCCTAAATTCTTCCATCATAACGT
-ATGATTTCACATTTTGACCTGAAAATTCTTTGCGTGGTCTAAGATTTCTC
-ATTATATTCTCGAATTTAACTTCGACACGTGAGAACAATTTTGATGGCCT
-AGAAATTGCTCCCGTGACCTAGGAAGTTTCAAATTTTTAAAGTTCAAATA
-AATTTCACCAGAAATTCATCAAAATTTACAATTACGGAAAAAGAATCATA
-TTAACCACTGCAACTTTTTTCGAACGAAGGACGAGGCAAAAAGGTTTCTA
-GGCCATGGCCGAGTCCCCGACAAATTTCAGCGGCCATTTATTTTGCTTTG
-TTTTTTGCGTGTTTTCTTTCGTTTTTCACCGATTTTTTCCGTTTTTTCTT
-ATCAAAACTAATAAATAAATATTTTTTGCAGATGCTAAAACAATTTCCAA
-GTGAAAAAATTGTGAATTCAGTCGGCAAGTAGCGGTAAAAGTGGTCAATG
-TAATATGATGGATTACGGGAATAAAAAACCCAAACTTTTTCCCAAACATG
-ATACATATGCTGTTTAGAAACACGGGAAAAATCGGTGAAAAACACAAGAA
-AACAAAGCAAGTACAAAATGTCGTAAAATGCGGTGTATTGTGTGCAAACA
-CCGATTTTTCGCATTTTTTCTCGGCCCTCGTTCGAAAAAAGTTGCAGTGT
-TAACGGCGGTGGAAGAGCTTTACCTTTACAAAAGGTGGCCACAAAAAAAA
-TAGAAGAAAGGATCCAAAAAGAGCAGGGAAGAGTTTTCTCAATTTGACGG
-CCACGTGTTCTATAGAAAAAGATAAATACAATAAATACGTTTTTTGAACA
-ATTAAAAAAACAAAAAATTTCAAGAAAAATTTAGAATATTTTTTCAGTTT
-TTTTCCTGAAATTCAAATAGAATAAATGGAAGTTCAACAAAAAAAGGTGA
-CCTAAATACTTATTAATTCACCTTCTTGACCTCTCGATTCTTCAGAAAAA
-AGAATAGGCTTCTCCTCCTCCCACCTCCCAGACACTTATCTACACTTTAC
-ATCATTCCTCCCGGCCCCCGGTTTTTTCACATTTTTCAACCTTGAAAATG
-ACGAAATAAACAAGTGTTTTAGATAAATGTTTCTGTGTATGTTATCTGAA
-ATCTTGGAAGGGTGTTGCAACAGAGCCCCGCGTGTAGCGTGGCCTAGAAA
-TCCAAAAAGTCTTCTTTTAGATCTTCAGCTTTCTCAGCAAGTTAGGTCTT
-AAGTCAAAAGGACTCTCCATGACCAAGTTATAACGATTTGTAGTTTCTAG
-GCCATGGAGTACTCTCCGAAGGGGAGACATTGACCCCCTGACGCCGGATT
-TGTAGGAATTTTCACGTGTTTATGCTACTGTAAGCGAGCTATATACGTTC
-TTCAAAAATATCCGTCAAATTGTGACCACCGTTTCAGCACTTTAAAATTT
-CTAGGCCACGCTGTCGCCATAATGGAATATTTTTCTCACGAGGAATAGAA
-ATTAAAAAAAAAACTCTTCAACTGGTCGATATTTGGAAAACCAAACTAAA
-ATGTTTCAGAATTATTAAAAGCTTAATTAAAACAAACAGCCACAAAAGTT
-ACCTAAACTGATGAAATAAAGACATAGGCATACAGATTTATAAATCCTAT
-AAGCATGGGTGTGTCACAGGTAAAGATTATGGAAAGTGAGGGAAAGTAGG
-AAGATATTACTGGAAAGTTCTGGGGGAGAACGGCTGAAATCAAAATGGAT
-TCGGTTGAACGCGTCGAATCACGGAGACTCGTTTGTAGGGCTTCCAGGTA
-GATAAAAAATGTTCTGCCTGAATTGGGCCAAAACACATGAATCTTCAAAA
-ACAAATTGACACAAGAAAATACATACTACTCCAAATTTTCAAAAATCAAA
-AAATAGGCGATAGGTTTTTAGATACTAAAGTATATTGAGCAATTAAACAA
-TTCACCCCCTACAACTGGCGGGCCCGCAGGGCCTGCTAGTCAGGCAAAAA
-ATATATGGCCCACACTCCCAGCGACAAGAAAAATTAGGGGATATTAGAGA
-CATTTACTCAAAAGGAGCATTACACAAATTTTAAAAATCTCAAAGCGGGA
-AATTTTTTTAATGCGTACTGAATAAGAAATCGACGTTTAATGAAACTCAA
-TTGCTACAACCCCGTAAACCTCCTTCACGTCCAATCAATAGTGACATGAA
-TCCTTCCGACCAACGTCATAAAGATTGGAGATGACGAAATTTAAGATGTA
-CCAAGTATGCTGGTACATACAATTTCTACGTCACAACATCTTGACAGTTT
-TTTCCCTCAAAGAGAGGTGAGCCTGTAGAAGAGATACAAACGCTGCGTCC
-TATCGTGGGTTCAGTTGTGGGGAAAAATTGTAAAAACTGTATGTACCAAC
-TATGCTGATGTGCCAACTACCAACCAGCATAGTTGGTGCATCTTCAATTT
-TGCCATCTCCAATCTTTATGACGTTGGTCGGAAGGACTTTTGTCACTATT
-GATTGGAGGCTTACGGGGTTGAAACAATCGTTCATTAAAAGTCGTATTCT
-TATTCAGTACGCATTTCAAAATGTTTCCCACTTTTTTTCGGCTTGATCTA
-CGTAGATCTTTAAAAAATGCGGGAGAAGATATGCAGTGTTCTCAACTAAT
-TTCGCATAGTTAAGAACGTGCTGACGTCACTTTTTTTTTGAGCAAAACAT
-TCCGGCATTTTTTGTAGATCAATCCGTAATTGGACAGCCTGGCACCACGT
-GTAAGAACACGATGCCTCTATTTTTGCCCGGGAGTGTGGGCCTTGAAAAG
-TTGTGAGCTGTAGAAAAATGGACAACAAGCATGTTGTCAGTTAGCAGCAT
-TTTATAAGTCAAGGACAAGTACAACCGAGATAAGTGAAAAGTTTGAAAAA
-TGGAAAACTTTCAAAAAACAGCGAAGGTTCTTTGATCGATGCAAGGGCAG
-AAAGTGAATAATGCATGTTTTTGAACTTAAAACAAATTGGCTAGACTTTG
-ACTGAAACTACCTTTTATAAAAATGAAGAAAATGAACCATTACGAAAATG
-TTAAATACACCTGAAAATTGGTGTGTTTTTATTGTCGTTCTGTAATTAAA
-TTTTGAATGATCGCTCTTCTGCAAAGAACAACCACAAAAAATAATTCGAT
-ATACTCAAGTATCGACACTTATGATTTGAATGCAAACATATAACAAATTA
-AAATTAAAATACGGTCATTATATTTTAGGAAAATTATGGAAATTTTTTAG
-GCTTATGATGTTTCAAAAACTTTCAGAACTCTAGTAAAAAACATTTTATA
-TGTAATAAAACACTCAGCGACTTTAAACTTTGCAAGACAATTTGGGACAT
-AATTTTGGGACATTGTAAGAACAGTTAATTGGAAAATAAAATAGTTATTC
-GAATGATCGTTCTTCAAACAACCTTACAAACAACAACACACCTACTCTGC
-TATAATAAGAAAATTTAAAATACTACTCAAGTTGTCACTTCAAGACCGCA
-TAAGTTTATACCACTCGAACAAAAAACAGTCTTCGTTCTTTCTTTCTTGA
-AAAGAGACATAATTGAAAATGAACTAATCAGCCGCTGCCCGGGATGGAAA
-AAAGAAAAGAAATTCCTATCATCTTTTGACCTTGTTATTTTTGCAAATCA
-TGTCTGAATAATACACTTTTTGATACATATAAATCAGGCGTGGGCGACAA
-ACAATTTTTCCGGCAAATCGGCAAATTGCTGGAATTGAAATTTCCGGCAA
-ATCGGCAAATCAAAAATGTTTGAAAATAGGAGAGTAAAAAGGTGGAAGTC
-AAGTGATGGTAAGTACCTATTTTGTTTCAATCAAATTAAATTTTACACCA
-TCTCTCTTTTTTTTCCTTATTTAACAGTCTTTGGTCTGTGTTCTGATGTT
-GAAAGATAAGGGAACATGGACGAGTTGTTTTTGGGAAAAAACATTCTTTT
-TGGATTATTTTAGTAAAAGAAAAATTTAAATTTATAAGCATATTCACTAA
-ATATTTTTGTGGGAATTTGAAAAAAAAAGAAATTAAAGAAGAAACTGATA
-AAAACTAGAAAATGTATAACTGGGAGAAAAAAGTTTCCAATTTTCAGAAC
-TTTTGAAAAATTGTAGAAAATAGTTCATGCTTTCAAAGTTGTAGGAAAAA
-ATAATATGTGGCCAATTTCCGAAAGAAAAAACTCTGCCACGACCAAAACT
-CAGAACTAGACTGAAATTTCAGTTGTAGCTGACAAAACCATCCAAAAGAT
-ATTGTAGGTTACAATATCTAGGCCGTGAAAATTAGAAAACTCGAATCAGA
-TATCCTTGGCCGGAATGCGAAAAAACAAAAATTAGAGTTTTCTAGGCCAC
-AAAAACTCGTCCACGTGTGCATGAACTGTCAAGTGGTCAACGTAAAAGGT
-GTGAAACCCTTCAGAGAAAAACACTAGAAATGAGATAAAGTAGGTGAGAC
-CTCCTGTCTCTGAGAAGCAACGTTCGAAATTCTTTTCCAATTCCATCTAT
-TATTATTATTATTATTATTATTAGGACGGTATGGCGCCAGGAACTGGTTG
-TTTATACTGACCACTGCCTCTTCCCGATTAGGATTCTGAATTTCGGATTT
-CGGGAAATTGAGAATGGCAGATGGATGTAATTTCATTAATCATGTTCCTC
-AATAAGTTAAGAAACAAAAGAAGGAAGATATAGTGAATCAGTGAGGAACA
-AGAACATAGCATATATGGAATTGGCGGTGTAAGACTGGTTTACATGGTTA
-CACGGAGGGAAAAAGATTTGAAAGTATTCGTCATCTTATCTAGGTAGTTG
-AGACACTTGATTAGTCATAGTTGAAAGAACAAATGGAAGAAGTTCATATG
-CTGAAAGCATCGCTAATAACATAATATTGGTTTTAAAGGTGGAGTACGGT
-CTGTGGGTTTTTAACCTAAATGACAGAATACAGTCCCAATATACCGAATA
-TAACTGTTAAAGATTTATAAAATTTATCTAAATTTTTTATGATTTTTAAA
-AAAGTTTTTTTTTTTTTAATTTAAAAATTTATTCAAAATTCCAAAAAAAT
-ATTTTATTCAAAACTAAAAACCCAAATTTTCTGAAACTTTACCATTTTAC
-TTATTTATGTCTTAACAATAATATACACATATTAACGAAATACCCACCGT
-TCAAAATTTGACTTAATCTCCAGTTTTAACTGCCAATGAGAATTTGTTCA
-AAATTCCAATCTCACACCCAATGTTTTTCTTTGTTTTTCATTTTAAAACA
-GTTCTATCCAGTTTAAAAATTTACCAAATAAAAATGTGTCTATTCCTCTC
-ACCTCCAATCCCGTGCATGTGTTCATGTTTACCTATTGAAACGTGTGTAT
-TACTATATAATACAGAACAAATATAAAATGGCCACTCTTGCACCTCCAGC
-GGAAAGAAAGCTTTTGAGGTGTTACGAACACTGCAACACTTTCCTATTTT
-ACTAGTTTTGAGCAATTTTCTGGTCCTTTTATTTATTTTTGTTTTGTCTG
-GAACAGGAAGTTGTTTGTGTTCTGTTTGGAAAATTAATCAGTTCTACCGT
-GAGATTTTTAAGTTATTTTTTGAATGGAATTTCAATTATTATTTCATTTC
-ATTTGTTTTTTTTTCTCACCGAAATCCACTTTTTTTAGAAACAATTTTTT
-TTTCTACATTTTTTTCCGATTTTTGTCATTCAATTTTTCAACTTCTCCAT
-TTTTTCTACAAAACACCGAAAACTACAAAATACCTAAAAATTGCAAATTA
-AAAAAATTTTTAAACATTTTTGCCCAAAAAATTGTTTTTTTTTTCAGAAC
-ATCTAAAACTCACTAAAAAATATGCTCAAAAATTTTTTTGAGAACACTTA
-ATTTTTCGAAAATCTTATTTTTGCAATATTAAATCCAGAGAAATTAGAAA
-AAAAAAACGGTTTTCTACAGTACTCCTACCCTCCCTCTCCAGTACTCTTA
-AAATATTCCTACAGTGTTCTTACAGTACTCTTACACCACTCCTACACTGT
-TCTTACAGTGATCCGATACTACTTTTATAAGACTCCCACAGACTCCTACT
-ATACCTATACCTTATCACTACAGTATCCCTGCCGTACCCCCCCCCCCCCC
-CCAGTACCTATACTTGCCACTACAGTATCCTACAGTATTTCTACAGTGCT
-CCTACACTACCTCTACAGTACTCCTACAGTACCATTACCAAAAATTTGAA
-TAGAAAAGTGAAATTATGAACATTTTTTCCTGTATACCAATTTTTAAAGT
-TTTAGTTTTGTAGTTGTTTTTGACAACGAAATCAATTTCAAAGTATTTTT
-CTTTAAACAATCGTACTTTTTGCGTACTGTTCTTGCACTTTTTGGGATCT
-TTTGGACTAAAAGTGCCCCCCGAAAAAAGCGCGGAATTAAAAGAACAAAA
-ACCGGATAGACTGAGGAGGTGTCGAACGATGGAATGAAAAAAGAAACAGA
-AATTAGATTTGGTTCAGTGAATTCTGTTTCTTTTATTTGGATTTTGGTTT
-TTTGGAGTCTTGGAAAAATGTTTTATTTTTGTTCTTTCCAAGAGTCCAAA
-CGTTTTTTTCCACCAAAACTCCAAAATTTTTAAAATTTGGAAATTTGATT
-CACTGCCAAAACTTCCAGAGAAATTAAATGTTCAGTTTCCCGTAAATAAC
-AGGGTTTCGTATCAAAAACTGTGAATTTTCCCGCCACCTATGTTTTTTAA
-AAATGATTATACTCTAATTTCCCGTCAACATTTTTTTATTTTGCGAAAAA
-TGATTATTTGAACATCCCAGAAAATTTTAAAAACGTCATGAGTTTTTTGA
-AAATTCAATTTTTCGTGTTCCTGTAATAAAAACCATAGAAACTGTTGACC
-TATAACCTGCCAGACGTTCTTCCTGTCTGTTTATACCCCCATCTGCTCTG
-CACACCAGACACCCCTCCTCCTAACTACACTTTAAACTGTTACCCCCCCC
-CCCCCCGTTTACCCCTCATTTGTTTTTTTTTCTAGTGCATCCCTTCCGTG
-TAACCTGACACTTTTTCCAAGAAGCTCGCATTTCTTAGGAGGAGCAGCAA
-TTTTTCGTTACTTAATTTTCCACACAGTAGGAAAGACAAAAAGAAAACGT
-CATAGAAATTAAAAATTCTGCGTTTAATTTTTTGTTCAGTTTCTGAAACT
-CAATTTTGTGGAACCGTTTTTTTCGATCTTTGTAAAATTGAATTTTTTTG
-ATTTTTGGAAAATTTGGATTTTTGCTGGAAAGTCAATTTTTGTGAGAAAA
-GGTTTGGCGGGAAATTTAAATTTATTGAGAAAAATTTTAGCGGGAAATTA
-AATTTTTTGATAGTGAGAAAAATTCAATTGAATACCTTTTTTGTGCGAAT
-TTTTCATAATATCTGAAACTCAAAAAATCTGAAAATTAACTCGAAAAAAT
-TTTCAAATTTGATATTTTGGCAATTCAAAAATTGCTTAAAGAAAATAACG
-GAACCTCGTTTTTTTTCTTTAAAAAAAGGTTTTAGTAACTTTTCCGGTAA
-CCAAGGTTACTCTTTCCCCATCAATCTCCCAAAAGCATGCCAGAAAAAAA
-AGAGAGAGAGAGAGAGATGCGTGTATGATTGTGTCATTTGACAGTGCGCA
-ACAGACACACATAAAACAGCTGACATCTTCTCTTTTTATTTCAACTGATT
-TTTAATTTCCCTCCTTGTGTTCTCTGAGTCTCTCTCATTTATTCAGTTTC
-TCGATTTTCTTCCAAATTCATTAATATTTTAATCTATGCGTAAAGTGGAG
-GAAGATTTCTTCTACGTTTTGATTTGCAATTTCTCGGGTTTTTCAAATTA
-TGGATTTTGAAAAAAAAAATTTCTGAAATTTATTTTTGATTCATGTCAGA
-AAATGAGTCTCCTGAATTTTTTTTGGAAAATATAAAACAAATTCTGAATT
-TTTTTTACTTTTTGATGTGTAAAACAAAAAAATTGATTAGAAAAATCTTT
-ATCTATTTTTTGAACTTTTCAATTTTAAAATCAAAATTAACTTCTAAGAA
-ATAAGATTTTTTTCGGAATTTTGAAAAAAAATGTTGTTTTTTTGAGATTT
-TAGTACATTCAATTTTCGTAAAATTCGAATTCATTTTTTTATTGTGCAAA
-TGTTTTCTGACTGACTATGAGAAAAATTTCAACATTTTGAAGAACCCCCC
-CCCCCCCCCCCCCCATTATTTGGACGGAGCCTGAATACGAAATGTGAGTT
-CTCAGAGAAGGAGGTGAACAATTTGATTGATGTGCATATGGAGATGCTCA
-TTGTGCATATCAGTTTGGAGCATCTATCTCAGAGTGAGCATGACATTTAC
-TTTTACCCATTTGCGTAGGCTCCGCCATTTCACGATTTTTTTTTTCCAAT
-TTTTGAACTAGTATAAAAATTTCTGAAATTTCTGTAATTTCTGCCATCTC
-CTCATAAATTCCATTGTATTCTTTGCACTATTGTTCCACAAAAGTGCAAA
-ATTTTCGAATTCGTAATGTGTCTTTCATATATATATCCATGCACTTTTGT
-CCCTTTTCCTGAATACTAATTTGGTGTGCTCCAAGAGGAAATTTTTTTGT
-TTTGTTGAAATTACTGCTCCTTTTCGGAATTTTTTAATTTCTGAGAAAAA
-TTCAATTCCTAAATGTATAATACTAAAGTCAAAATACTAAAGTGTAATGG
-TTTGTTTTTTGTTACAGTCTTTAGTTTGTAGCTTTTGTTTTGTGTAGTTT
-TCCAACTTTTTTTTTGCCAAAATGAAGGCTGAGAAACCGAAAAAAAAAAT
-TCAAAACATAGATTGGGCTGAAGCGGTATTATTGGTTTACTGTAGCATTA
-CTGGGTTACTCTAGTTTGGCCCATGTTTGGTGTACGTTAGTAGTAACAAC
-ATTTCGTTCATTTGTTTTTTGATTTGGTAACTTCTGGTGATTAAACTTTT
-AATGTACCTAAATCTTCTGTTGCATTATTGATTTGTTGTTTTCTTCTTTT
-TAAGTTAAACATGCTCAAATTAAATTCAAATTGAGTTGAAAATGCAAAAT
-TATTATCAACTTGAATACCCAAAATTTTGGACGGTATTTCAAAAAAATTG
-ATTTCCAGCCGCTTCGACCTTCGACACAACAAACGAATGCTAACTTTCCC
-AGGATTACACAAAATAGGTCAAAATCCCCTTTTCTCAATTTTTTGCACAT
-ACATCCTCATCATCATCATTGTAATGATCGTGACCATCCGGTCTTCTATT
-ATTAAATGAGAGAAGGAAAGAGTATACATATGTGTCTTTTATATTAAACT
-AATTATATTTCGACACATTCTGCGCATATCACTACTGCACTAGAATTACA
-TTTTAAGAATAAAATGTAACCAAAAGACCAAAAAGTTGTTTGCATTTATT
-GTTATAAACAGAATAGAATGAATGTTAGGAAACGTTATTAAAACTTGCAA
-AGTGACACAATTCGGTATATCGATTTCTCTGAAATTACTTAACTTAGTAG
-GCAGAGTTTTGATACTGATACGGATTTTACTAAATTTAATTTTTGTAAAT
-CAGTATTGCTTTTATAACCTATTAAGATTTTTTTGTTCCAGCGTGCAATT
-ATTTTTAATTCTATTTAGGATTTTAATAAATAGAAAAATACGTTTTGAAT
-TATTTTTTACGTTATAATATTCAATAGTAAAGAAGCACACATCAATTCCC
-CTATTCAGTTTCCATACTTTGCCTGATAAACATGAATAGTAAAATAGACA
-CTTTCATTTATACAGACACCCCCCCCCCCTTGCTTCCGGATTAAATCCCA
-ATAAAGGGTGTGGCAATAAGGCATTGTTGCAGTTTCATTGAATTTATTAA
-TCATTTGACAGCATGAAATTACAAAACTGGAGAATTTCTAGTTTAAACTT
-TTATACAATGAAGAAATCTTCCATAGAATCAATATTAAATTATCAATAAA
-TGAGTATTTACGTTTTTCAGCAACGGTATTATTTTTATACTTACTAGTTA
-TTAAGTTAGTAGTTAGTTACATTTTTAAATGCGATGCAGTCGAAATTTTT
-TTATAGACTAGAAATTGTCTTAGTTTCCAGCCACTGACAAGTCGGCCAAA
-TTTCAAACTTTCAGTAATTTTGCGTCATTTGTTGAGCCGCCATAACTCTT
-TTTTTGAGACGTTTTCAAGAAGTTGAAATTTGGTATTTTCAGACATTTGT
-ATCTTATTTAAAATATGAGTATTCACTCCTTTTACCTGCCAGTCGGCTGC
-CTCCTTATCTCCTATTTTTCTCTAATGAGCACACACCACTATCATCATTA
-TTATTACCACCTGTTCTTAATAATAAACATTTCCCGCACTTTATTTCCAT
-TTCGATGCATTTTATAGAAAATGTTCCCCCTTTTCGAGCTTTCCAATTAG
-ATTCACCCTTTGATTGCTCTTTCTTGGACGGAAGTGTTCCCCAATTCCCC
-TTCATCTTATTACATTTTTATGCAGATTTTATTGCATTTTAGTGCGCTAG
-ATTTTTCATGGGATTTTGCTAAATAATGCAATCACGCTCTAAATAAAATT
-CTCAGTTTATATTTTAATGTTAAAACTGTGTGTAAAATTTACAAACATAG
-TGAATACATTTTTCGAATAAAAGTATGAACATTTTTCGAGGGATCTATAG
-AAAATTGCCGGCTGTTCCTAAATGCCCTTTCACTGGTCACCAAGTTCCTG
-TTCATGCAATTCAAAAGAAATGTTCAGCCCCCCGCTCAATAGTCGCCCGC
-ACCACAAAATTGAAAAGCGAACATTTTACTAGTCGAACTTTTGAATTGAA
-CATTTTTGGAGTATTTTAAAGAAATGTTTTCAAGTCCACCAAAACATATG
-CCAGGCCACAAAAATTTCAATTTTCCGCCAATTTTTTTCTCACAAAAGTT
-GAATTTTCTCGAATTTCCGATAATTTTCGATTTATTTGAAAGTTATTGAA
-ATTTATATTTTCTAAAACACTTCCACAATAACAAATTAATAGATATAATA
-AAATTTGAAATTCCCATGCCACACCTCAAAAAGTGGCTCCCTTAACTCCT
-GAGTGCTCGCGGAGCCCTACCAAACTTGGAACATTCTTTTCCCAACGGAG
-TCATGAACATATGAGCATTAAATGAGTAGACGACATGTGTATACATAGGA
-CCACCACAGCTGTTCCTTCCTTTTTATGAGAAGACATGTCATACACACAA
-TGTCTCTTCTCCTTTCCGATTGGAAAATTAAAATTATAGGAGGGGGGGGG
-GGGGGGGGCGATTCTTGACATTTCAATTACCCCCCCCCCCCCCCCACATC
-CGTTATGTTGCATTTTGGTAGGCTTGGGGCCGAATAAGTCTCCCATGCAG
-GCGTCAAAACGTCTGCGGACCTACGCCTGCCTCACGCCGCGCCTGCTGTA
-CAGGAACCCGAAAAGTGTCGAACGCGGCTAAAGAACCACTTTTCGCACTA
-TGCGGTGTAAACACAAGGTTTTGATTTGTAGTCATAGTGCATATATGATG
-CGGGAGGCTGACAGGTAGGAGGCAAGCGTTCAACCGCGCATGCCCACCAT
-GGAAGCCCTAGAGCCTAGTTTTAGATGAGTTTCAGCATTTTTGATCTACA
-AGATTTTGAAAGTTTTACAAAAAAACCAAGATTTTTTGTAATTTATGAAG
-TGATTTTTCTACATTTCATCTAGAAACCAGCAGAGTTATTTTTTGGGTAA
-TTTATCAATAGAGCGCGTTCGCGTCATGAAAACAAAATGGCGGCCGAACT
-TTGAAAATCGATGGCTGAATTTTTCGGAACAAAAGTCCGTAGCTATAAAG
-CACAGGCCTACGTTTTTTTTGCTTTTAAATGACATAGTTTTCTAAAAAAA
-AGTCTGTGGCCGAATTTTTAAATTTTGAATAGGGGCTTATTTCAAAAAAA
-ATTTGAGGCCAACCTACTCTTCTCAATTATAACTTGCCATGGCAGAACTT
-TTGAACAACTATTACAACGTTTTCAAAAAACAAGTTAAAGCATTTTTTCG
-AATAAAGGTTAAATTGGTAGCCTAGTTTTCTCAAAACAAAATACTAAAAA
-AAATATCGATGACCGAAGTTTATATTTGAAAAAATATGTGACCTAGAACT
-TTTAACTACTCTTCCAATGTCTTCTAGCTTCTGAGAAAAAGTTCGTGGCC
-TAAGTGTACCACGATGGTCTAGTTATCTCGGAAATAGCCATAGCCTAGTT
-TTCTCAAAAAAATCGGTGGTCGAGTTTCCTGTATGTAGGCATGTAGGTAT
-GTAATTTTTATCTTCCAGGTATCTATTTGTACTTCCCGGTAGCCAGGAGC
-AATACTTTTGAATTCCTTTGCTCTCCCTATTCAGCTTCTCCCCTCACACT
-CGTTTTTGGTATTCTATTGTTCTCCTCCTCTTCCCATTCTACCCCCATTT
-CATTTTCCTCTTGGAGACCCCTGTCTCTCTCTCTTTGTATTGGCTCTTTT
-ACGTCTTCTAGTAGGCTTTTCCTTAATGAACTTGTGTGTGTGTGCTTGAA
-TCATCATCGCGTTCTCTCGTTCCATTTCCCTTTTGCAATTTTCTTTTCTT
-GGAGAAATTTGGAAAGTTTTGCTCAAAATTCCTACGTACACATGCCTCAA
-AATCTGGTTGTATATGGCCTAACATTCAATTTCTAGTGCACACAATAAAA
-TTTTCCGGGAAATTCAAATTTTCTGATAATGAGGAAGGACTTTGGCGGAA
-AATTCAAATTTTAAAAAAGTAGGCGGGAAATTCGAATTTCGAATTTTCTA
-AACTTTTTGGCCGGAATTTCAAATGTTCTGAAAAATAATTTTGGAGCGAA
-ATTCATATTTTCTCAGAAAAATCTCAGAAAATTTGAATCTCCCACTAATA
-TTCTTCTCAAAAAACTGTTACGTGACCTATTTATATCTTATTTATTGGTC
-CATTTATTACGTGGCCTAAAACATTTTTTCTTTTCCCCCGTTTACAGCGA
-TCATTTGAGATGGCCTAGAAAACGCACGTTAGGCCATCAGGTTTACGGGG
-TATAGTACAACCTCTTGCAGGGGACTGAGGTTCAGAAAACTACAAATTTA
-GCTAATTCCCTACCTACTCTTGCAAATCCAATAACTAACCCAATTTCCCG
-GGGAAATTTTTATTCTTAGAAAACAACTTGTATATCTCCGCAACTACATA
-TCCCTCCTTCAAAATAATAATAATGGGAAGCTTCTGCTTCTCTACACCTT
-CTTTTGACCAAAAACTTGTTGCCAGTGCCCTATTATGTACGGTCCGTTGA
-GTTTTGTTGTTGTTCACAATAATATGTGTAATTCGCGCATCTGAAGAGGG
-GAGGTGTAAATGTTGTGTCTAACCGTTATGTTGCTGTCACCTCCAAGTGG
-TACAGGTGGCCTAGAAATTTGCGAAAACTCTTCCACGATTATATTTCTCA
-AAAAATTACTTTTCTCAGAAAATTTGATTTTCTCACCAAAATATTTCTCA
-GATAATTTGAATTCCCGCCAAAATTGTTTAAAAAAATAGAATATCTCGTC
-AAAATTTTTATCAGAAAATTTGAATTCCCCACTAAAATTTTGCCAAAACA
-TTTTATTTTCCCACTTAAAAAAGTTTTTTTTTTAATTTGAAAGTGGAAAA
-GTTTTCTAGGTCACTTATACATTACCGGTGACCGAGGTCGAATTATTCCT
-AGGCCACAAATCTCCCAAAGGGGTATTCCCACACCTAATTGACACCTCCC
-CGGGCACCTTTGAGCACTAAGTAAGGACACCCACCCCTCTCAGCTTAATA
-GCTTTTAAAGGAGCACACCAGCCATATGTTTTCTCTAATTCTCTCACTCT
-CTCTCTCGGCTTCTAAATTCAATTTCCCCCCGTCACGCCTCTCGTTACGT
-GAGGAGTGTTCAACATGTTCCCATTCCCTTATCCGATAAGTTTTTGGTAG
-GCAGGAGCTTGTACTAGTAGAGGACATTTGTCGCTTCTTGGTCTTTCGCC
-TCCATTTTCCGTAATTTATACGTGACTTAGAAAATTAGAAAAAAACGCAT
-TCCACGAGTTTGTTGGACAACTTTTTTTACGTGGCCTAGAAAAAAATGAA
-ACTCGGCCACCGACTTTTCTTTCACTTTTGTGAAGATATGATCTCATTCT
-ATAATTCTGTCGAACCGATTAGGAGGGTGGCTGAGTTTGCACTTTTGCGT
-GTTCTATACCATTTACAGAAGCTAGTCCCCCCGTCATTCTTTTTCCTGCA
-AAATGTTTTTTTTTGCCCCCGGTGTCTCATCATACAGTACAGCAGCCAAT
-ATTATTTGTTTTTTGTTTCGTCTTTTCGTCTTTTCGGAGAAAAAACGCTC
-TATTCTATGACAAGGTGACGTCATTGGACTCGTGGCCTAGAAAGTTTGGC
-AAACTCTTCCACCATTCGATTTTACAGGAGCCTCAAAGCCCCACATGGGG
-CCTAGAAATCTTGACATTTCTAAAAAACATCCATTTTGAAATTTTTCGAA
-ATTGGTGCAACCTAGCAACCTCTAGAACTTCACGTGACCTAGAAAAAACA
-AAACCTCAAAATTTCATGTGGACTAGAAACTTTTAAAAACTCTTCCATCG
-ATTTTGTTTTGTGGCGGGGACTTTTTCCAGTTTCTTTTTCACATAAAAAC
-CAAAAAAAAACAAGACGTCAAGCTGTGAAAATGATTAGTCACAAAAAGAA
-GAAAAACAGTAGTGTCGTTCCTGCCAATTTCAGAGATTCCTTCTTCGCTT
-CTCACGACACGAGGGGGGGAGGGTCTAATTGGCACCCCCCCCCCCCCCTA
-CTGAGGTGAGAAGCTTGAGTTGACTCACACGTCGCTCTTGTTTTATTCAT
-TTTTGGCACAAAGTGAAGTGTGCGAAAATTGTAGTAGTCTGTGTGTGTGT
-GTGTGTATGAGCATTTCGAATTTTAAAATACTTTTTTAATGTACCGCAGG
-CCACGTGGTAAGTTTTTTTTCATAAATATAGGATTTGTTTTCTTGTAGAA
-AAGTTTTTCGAATTTTGAAATGAAAAGGATAACTGGGAACGGAGAAAAAT
-TAAGTTTTAATTTCTAGGCCACGTACCAATGAGGATGAGAAGTCGGTTTT
-CTAGATCACAAGGTCATCTAAACTTTTAGGAAATTTAAAAAGTTTGGTGA
-TTACGAGAATTTCTAGGCCACGTCGCAATACACCGGCGCGTTGGCGTTTT
-TACACTTTCTAGACTACTAAGATTTTCCTAGGCCACGTCCCAATCAGGGC
-TGTTGCAAAAAAAAATTTTCGACCAAAAAACAAAAAACAAAAAATTTTTT
-GGTCTAACTATGGACCAAAAAACAAAAAACAAAAAAACAAAAAACAAAAA
-AAAATTCAATGTTTGATATTGAACGGGACAAAACGGAATTTTTTCATGAA
-ATATTCTGGTGATTTTTTATAAAATATTGAAAATTGAACGAACAGAAGGT
-TTTTTGTTAGCTTTTTTGCTGAATCAGTGCTGTAATTTATTTTTTGGTTG
-TTTTTGGTTTTTTTTTTGGTCTCAAAAAACCAAAAAAACCAAAAAATCAA
-TTTTTCCCAAAAATACCAAAAAAAACCAAAAAAAAACAGCCCTGGTCCCA
-ATGTACAGGTGTTGTGGTGCTTTTTGTGAGCTCTTAGGCCAGCTGGAGTT
-TTCTAGGCCACTTGTAAATCAATGGTTTTTTTTCGGTGTTCTAGGCCACC
-TGTCACGCCTAGACCATTGACCTAGAAGTTTAATGTTTTTGAATAATAAG
-TACACGTACTCTCACATACCCGCAAATGCACATATCTATCTTCATTTCGT
-GATTCTCTTCATCTCATCTTATTTTCCATTTCGGTTTACCCTTTTTTTCT
-CTATGAATATATTTTCATGTACTTGCTCTTCTTCCCTGAAAAAGATTCTT
-TTACACTTTTTTCATTTCCTTAGGCAGTTGTAAAGAACTTGTCATTAGAA
-CTTTCAGAATGACATCAGAGTAGATGGCCGAACTTTTTCTAGGCCACGGC
-TTGGGAGCCAAACATGGCTAAACATTCTAACTTCCTGGGTCATCTAGAAG
-TTTCTAGGTCTTATGGGTGAAAATTGTCAAATGACAGAATTTTCTTAAGT
-TATAGTTGAATTTCCCGCCAAACCGATTTTTTTTTGAAAAATTTAAATTT
-CCCGCCAAAAATTTTTTGAAACGTTTAAATTTTATGCCAAACTTTTTCTG
-AGAGAATTTGGTTTCGCTCCCAATTTTATTCTCTGAAAATTTTAAATTCG
-CACCAAATTTTTCGAGAGCTTTTTGAAGTTCCCGGCAAAATTTGTTTTCG
-AAAAATTAGATCCCCGTCAACTATGATAGAGAAGTTACGTCATCTGGCTA
-CCCTGGCCGAATTTTCAATATATTTCTAGGCCACATATTGACCGCTAAAT
-CATGTTGTGGAAGAGTAGTGACGTCACTTGGCGACCGCGACCATCGAGCA
-GCGTGAGGGGCGAAGTATCCCCCTTCCCAACCCTAAAGACGTCGTTCATC
-GCTCCTTTTTTGTTGTTGTAGGAGTTCCGTTTTTTTGTGTCTCGATTCGT
-TTCCTCCTGTTTGTTGTCATTTCTGAACTCATCTCTACACTTCTCTCGTC
-TTCTCTGCGTCTCTCCATCCTGCACACTATTTTTGTTTACCTCGATGATC
-TTTCTTTTTGCGTGTGTGTCACTGACGAACGAACGGCTGACACAGACTAT
-TGTTTTAGTTTTGTTGTTTAGAAGTAGTTGTAGTATTCCAATAGTTTTTC
-ACACTTTGCATTATTTCAGATGGCTCAGGACGGAGACCGCCATCACATTT
-TTGTCAGTGCTCCGCCGCCGCCGCCACCTTCCTCGTCGATTCCAGCTCCA
-TCGCAGGTAAATTTAAGGTTGCAAGCGCGCTCTAATGACCTTTTTTGTGC
-CTCCGGCTCCTCTTTGGGTTATTGCCAACGCGCTCCAATTCGAATTATTC
-TTACTTTCAGCCAAATAGACTGGAAAAGGAGCCGCTCATCGATGAGGAAA
-CTGACATGATTGACGAATCCCGAGCCACGTATTGGAAGGGATGTGAATTC
-TTGAAAGCCTCTGGGTTGTACTCGAGTAAATGTGAGTTGGTCTAGAAAAT
-TTGTAAAGCTCTTCCACGAAGTAATTAATAAGGGATACTATTGCCGACAC
-CCAGGAACACGTATACCACGGAATTCAAATTTTAATTTTTTGAAAATATT
-TTGGCGGGAATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATT
-TAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATTTAAAATTTTAAT
-TTTTTGAAAATATTTTGGCGGGAATTCAAATTTTAATTTTTTGAAAATAT
-TTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAATATTTTGACGGGAAT
-TTAAAATTTTAATTTTCTGAAAATATTTTGGCGGGAATTCAAATTTTAAT
-TTTTTGAAAATATTTTGGCGGGAATTCAAATTTTAATTTTTTGAAAATAT
-TTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAAT
-TTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATTTAAAATTTTAA
-TTTTTTGAAAATATTTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAAT
-ATTTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGA
-ATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATTCAAATTTTA
-ATTTTTTGAAAATATTTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAA
-TATTTTGGCGGGAATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGG
-AATTTAAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATTTAAAATTT
-TAATTTTTTGAAAATATTTTGGCGGGAATTCAAATTTTAATTTTTTGAAA
-ATATTTTGGCGGGAATTTAAAATTTTAATTTTCTGAAAATATTTTGGCGG
-GAATTCAAATTTTAATTTTTTGAAAATATTTTGGCGGGAATTTAAAATTT
-TAATTTTTTGAAAATATTTTGGCTGGAATTTAAAATTTCTGAGAAAAAGA
-ACCTTCGTGTCGAGACCCATCGTGGTGAGACCCTTCGTGGTGAGACCCAT
-CGTGGTGACACCCATCGTGGTGAGACCCTTCGTAGTGAGACCCTTCGTGG
-TGAGACCTTTCGTGGTGAGACCCATCGTGGTGAGACCCATCGTGGTGAGA
-CTCATCGTGGTGAGACCCTTCGTGGTGATACCCATCGTGGTGAGACCTTT
-CGTGGTGAGACCCACCGTGGTGAGACCCATCGTGGTGAGACTCATCGTGG
-TGAGACCCTTCGTGGTGAGACCCATCGTGGTGAGACCTTTCGTGGTGAGA
-CCTTTCGTGGTGAGACCCATCGTGGTGAGACCTTTCGTGGTGAGACCTTT
-CGTGGTGAGACCTTTCGTGGTGAGACCCATCGTGGTGAGACCCTTCGTGG
-TGAGACCCATCGTGGTGAGACCTTTCGTGGTGAGACCCATCGTGGTGAGA
-CCCATCGTGGTGAGACCCATCGTGGTGAGACCCATCGTGGTGAGACCCTT
-CATGGTTAGACCCATCGTGGTGAGACCCTTCGTGCTGAGACCATTCATGG
-AGAGACCCATCGTGGTGAGACCCTTCGTGGTTAGACCCATCGTGGTGAGA
-TCTTTCGTGGTGAGACCCATCGTGGTGAGACTCATCGTGGTGAGACCCTT
-CGTGGGGAGACTCTTCGTGGTGAGACCCTTCGTGGTTAGACCCATCGTGG
-TTAGACCCATCGTGGTGAGATCTTTCGTGGTGAGCCCCATCGTGGTGAGA
-CCCATCGTGGTGAGACTTTTCGTGGTGAGACCCATCGTGGTGAGACTTTT
-CGTGGTGAGACCCATCGTGGTGAGACCTTTCGTGGTGAGACCCTTCGTGG
-GGAGACTCTTCGTGTTTGATATTATATTGGCGGGAGCTAAGGAGTTGGTG
-TGGGATAATGTCAAGGTACTCTAGGGGTATTGTGGATTTGCTGTAGGGTT
-ACTGTAGTTCAGAAAAATTGACTTTGTGCTTTTGAAGAGGTATTGGCTCG
-AGAGTTAGAGAGGCGGAAGCTTCTGTGATATTTTTTACATTCCAGAATGT
-TTGAAAAAGTAAAAGTTTCCACCTGTTTTCATGTGACATTGTTAAAAGAT
-TATATGGTGTTTTATGTGTCGAACAATTTAAATTTCGCCAGTCGTTGGCC
-GCGCCGTAGGCGCGGTCAGCGGCTGGTTTTTCCAGAAAAGGAATAAGAAA
-TAAATTATTTGGAAGTTACTAGGACCCTGAATAGAATTCTAGGCCATATC
-GAAAAAGGGGATGGGTGCACGTGGGAACCTTTTTTTGGATATTTTGGAAA
-GAAGTAAGAAGTAAGAAGTAAGAAGTTGACTTAAGAAGTTGACTTTTCTA
-GAGTAAGAAGTTGACTTTTCTAGAGATCATCTCCCCTCTATTATTCTCAG
-CGTGACCTAGTTATCCGGAAAACTCTTCCACCAAAAAATGAGTGTCTCCA
-ACTGAAAAATGCGTCATAAAACACACGGAAAAGGTACTTGTGTATTACAT
-GCCCTCATTTTAATAGTAGTTTTTTAAGCCATGAAAAATAAAAACGTGAA
-CCACAATTTGTATTTTTAGGCTTAGGAAATAACATTTTCTAAGCCTAAAG
-AGGAAAATGTGTAATACACAAGTACCACGGAAAATTTTTTGAAACCTTCC
-GAATTTGAAATAATTTAACTAAAAGTTTCTAGGCCACGATGAAAATAGAA
-ACAATGATGTCCCGATTTTGCTGAAAATTTCTGTCCATAGTTATTTAGAG
-TTCTGAAAAAAAAGATTTTCGAGAAATGATTTTCTAGGCCACCAGAAAAG
-TTTCTAGGCCATTATCCCTTCTTGATCCTTTATCATTATGATTATGATAT
-TTTTTAAACGATTTTTTAGGCCACCAGAGGGAATTCTAGTCCGTGTCAAA
-AAAAAAAGAAAGGGGGTATTCTTTCCACATAAAAATCCCGTTGGCCTTTT
-CAATCAAATTTCTTCAATTTTTCGCATAAAACTTACCTCCCGCTGTGACA
-AGCCTCCTCCCGTCTCCCAGTATTCTCAATTCATTAATCATCACCCCCAA
-TGCCCTCATCAACTACAGTATCCCTGCAATCCGCGTCTGCAAATATGTGC
-CGAATATGTCATACTTCTACGTCAACGCGGTCAAATCCGCTCATCTCACC
-GTGTCGATGCTCTGGAACACTGCTCTTTGTGCATAAGGCGTGTGTTGTGG
-TGAGCTCTTTTTTTGTAAAATTCAAAATAATAATTAAAAAATTTAAAAAA
-AAACCTTTTGTGGAATTTGCAATTTTTATAAAATCGTTAAAAACCAAATT
-CAATTTATACAAATTTCCACATTTTCCAAAATAAAAAGAAATAGCCATGC
-CCACAAAATGGGCGGCGCTTTCATAGCCACGTCCATTTTGTGGGCGGAGC
-CTCGGATCAAAGTTTTTTCAAAAACTTACTATAAGTTGAACACGGATTTC
-TGGCTTCCTTCATAAATCGAAATGGCAGAGTTTGCCGAACTAGGCCATTT
-TGGGTCGGAGAGATTTTGTGTAGATTTACGGCGTGTTGCGTGTCGCGTCG
-CGGCTCGTTTTTAGTTGTAAAACTGCTGTATTTGTCCGTGTGGAGTACAC
-GATTTTTTCCACGCGCTGTCCGGCAGGCGATTGTCAATGAGGAGCGAAAA
-TTCAATGCGAAAGGCCAGAAGCCCGTGGTTGAAGTGTGGTTTCAATATTA
-CAGAAATTTTAAAGAGGAATAAACATGCCTGCCTACAAAATGGGCGGAGC
-GTTGGAGGCGTGGTCTAAGAAGTCACGCCCTTTTTTTTAAATACTTGTTC
-TGATGTACAATAGAGCGCATTTACATCAAATTAATAATTTGTTTTTCAAT
-TTTTCCAGAGATGGCTGGAAATGTCGACTCGAAAAATGGTCCCATCACCA
-CGTTGCGAACTATGCGGCTACGATTATCGACGTGGAAATATATTTCAAAT
-GAAATCTTTACATGTTCCACACGTGGATCGATCATCTTGTCTGCTCAATG
-TGCTCTTTTTGATTACCGTATTAATTATGATATTTTGTGGATATTTTACG
-ATTCAATTCATTCAGGAGAATGCACTCTTAAAACGAAGGTGGGCGAAGTT
-TTCTGGTGATGACCTAGGAAATTAGAAAACTAGGCCACCCCGCAAATGTG
-GTGGCCTAGAATACCGAAATTTGACTAAGCTATGGCCTGCGGCCTAGAAA
-AATAAAAGTAGACTGTATAAAATTCTCATCAAGCCTTTTGGAGATGAACT
-GGAAACCCAAATTTTTTGGAAGAAAATATTGACCTCCTTTAAAACGGTGG
-CCTACTTTTTCTGATGGCCTAGGATTTTAGACAAAGAAGCCACACAGCTA
-CTATCCACATAGTTTCAGGAAAAAAAATAAGAAAAATAGGCTCCGCCCAC
-ATATTCTTTTGAATTAGAATATACACGAGCCATTTATTTTGCTAAGTTTT
-GAATGTTAGCTCCGCCCACATAATGATTTGAATTTCCCGCCCATTTTTCT
-CTCAAAAATTTGAATTCCCTGCCAAATTTTTTTTTGCGAAAAACTCAATA
-CTTTCAGGCTCTTCGCGCACAGTTCGACAAACACAGCGTACACGTGGAAA
-CGGCGTGGCTATTTCAGCGGAAACGGGAATGGAGACGGGGACGGTAGTTC
-GGATGGATATTTCTCGCGTACACCTGTCTCATCACTTTTTGACATAAAAG
-TGGTCTTGTGTGCCAGCATGTTCTTGGTCTCGTTCATTTTGGCCCTTTTT
-ACACAGTATAAGTGAGTTTTTTGACACGTGGCCTGGAAAATGAGAAAACT
-CGGCCACCGATTTTTTCAGCCGAATTTTTTTAGTTTAGCGGTCACACGGG
-CTTCTGGCCATTCTCTCTGCATTTTTCGCGCTCCATTGGCATTGGCTTGC
-CGGACAACGCGTGGGAAAGTCGTGTACTCCACACGGATAAATTTGTTCAG
-TTTTACATTGAAAACCGAGCCGTGACACGCCGTAAATCTACCCCGGCCGT
-GGCCGAGTCAAAATGGCATAGTTCGGCAAATTCTTGAATTTCAAAATATG
-ATGGAAGCCTGAAGCACGTGCGGTCATAAAAATCAATAAATTATCTTTTT
-TTTCCAGAGCCGAGTCCACGATATTCCGATGTATTTTCCGATTTTTTGTG
-ATCAATAAGAATTGGATGATCAAAAACTACGATATCAAGTGAGTGGGCGG
-AGTGTAATTTCGGCGGGAAATTCAAAATTTTTCAAATTTTTCAGAAAAAT
-TTCGCGCAAAGTTCAAAAACTCAAAACTTTCGGTAAATTTCGGCGCGAAA
-TTCAAAATGTTAAAAATTTTGGGGAAATTTTGGAGGGAAAATCAATTTTA
-AAAAACGTTTGTTTGAAATTTTTTTAATTTTCAGAAATGATCCCGAAATG
-GCTCACCGCCGCGGTCTCCAGAAGTCTTCACCTGTTCCGTTAACCTTATC
-AGCTTCTGATATGTGTATCCACGTGTCATCCTAGTCAACAATTCAACGAA
-AAAAACCATTCCAGTTACAATTTCTCATTTCTTTTCACCACTTTCGGGTT
-TTTTGCAAATTAAAAAAATTTCGATTTTTTTTTTGAAATTTTAATTTTCC
-AATTTTTATTTTTATTCCACAACTCAGGTTGCTCAACAGTGCCTAAAATA
-AATTTTATTTCTTTGATTTTTTATAAATTTACAAAAAAAATACAACAAAA
-AAATAATATTACACATTCGTGAAAAACGGAAAAAAAATTCAGCCTATTTA
-CATTAAAACACGTGGAATTTGAAATTTTAGCGATATATCGATTACCCTTT
-CTCGGAAAACTCGTAATAAATGTGAAAAAGGCGAGGAAATTGGAAGAAAT
-AAATGCGGGGGTTTCTAGAAAAAAAAATTGGGAGAAAGTTTAAAGAAAAA
-TTCAAAATAATGCTCCGGTGTCATCGTGTTCCACAGTGGTTAGATTCTGG
-TATTTTGTGCATGGTGTGCTCTGAAATTTAAAAAAAAAGTAAAAAATTGA
-AAAAAAAATTTCTTAAAAATTAAAAAAAATGAACTTTTTTTTAAAATTTA
-TATTCAAAAATAAAAATGTTTGGTATACCTAATTATTCATACTTTTATCA
-ATTTTCGAGAAACTTCAATTTTTCAACTGCTAACGTATACAACTCGCGTT
-ACTCGAAAAAGACCTGGGGACTAGTTTCCCACTTGGTGGCCTAGAAATCT
-CCAGTAAAAACATCGACGACCGAGATATGAGTTTCTAGGCCTCCATATGA
-AAAAAAAACTCGGTCGGGGACTAGGTTTCCACATGATGGCCTTGATAACT
-TCAAATTTTTTGGTGACCTAGATTTTTCAAAACTTGGATTACTAGGCCAC
-TAAAAGCTTTTCGGTGGCCTAGAAACCAAAATTGCGTGAATTTTTCATAA
-TTCTATATCAAAATTGACTAAACCGAAAAGAATGCGATGCTTTTGCAATA
-TTTCAGCAGTTGGTGTATCCCACGTGGCGACGGGATTTCGGGCGACCGTG
-CCATTGATTAGAGCCAACGGAAGATATTTTGAGCATTCGGCGGTGCTCTG
-CAAAAATTTTTTTTTTGCAAAAGTTAAAGACGCATGGTGGGTCTTGATCT
-ATGAAATTTCGTGATTATTCGAAAATTTTTTGTCCTTATTGACAATTTTT
-TTATCCACAAAAAAGGCGGATGTCCTAATTGCCAAAAATGTGGGTTTCTA
-GGCCACGAAAAATAATTTTTTGCTTCAAACATCCTGCTTTTTTTCCAAAA
-TTTAGCTTTAAAAAGTCGGTGGCCGAACTTTATTAAAAGTTCAATTTCTC
-GGCCACAGAAACTTTGTTTAAGTTTTCACATTTGGATTTCTAGCCCACCA
-ATAACGTTTTTATTTCATATTTTTATAAAAATCGAATTAAAAGTAGATGA
-TGACCTAGTTTTTTTTCAATAATTTGGGTTTCTAGGCCACCAACTTTTTT
-TAAAAATTTTCTTAATTTTCCATAACCAAAAAAAAAAAACAAAATCGATG
-GCCTAACTTTTTGGCTTCCTAGGCCACCAATAACTCTTTTATTACTAATT
-TTCCTCACTCTCTGATGTCGATAAACACTTTCTTGTCTCGAATATCGCTT
-CCCACACCCATCACACTCAAATGCTCCATTCGTCTCATGAGTGAGCAAGT
-GTTGATTGAGCCCATGCTTTTGCCGGAAAGTTTTCTCGCAGTCTCGACAT
-TTATAAGGTCCATTGTTGGGCTGGGCCTCGTGAGCCGACGACGGGGCCGC
-CCGTTTTTTCGCCCTTTTCCCCGATTTTTCCGGTGAAAAAGTGTCGAAAT
-ACGCGTTATTGTCATCTAATTTTGGTACATTCGCCAACATTGCTAGATTC
-TCCTGAGCCACCTGTTGTGACGTGTGAGGAATGTGATGGTGCTGATAGAG
-GTCTGGTGGTGGCTGAAAATGGGGAATATTCCCGGCGCCGAACATTTTCA
-GAAGTTCCAGGTCGAATCGTTGTTGAGCATCCGCGTCGACTACTTGATTG
-AGGGAGACGGTGAAGTCAGTTGAGGAGGTGGATGGCAGTTTTATAGAGAA
-ATCCTGCAAAAACTCAGGTTTTTGCTAAATTTTTCAATTTATCATTGTAA
-TTTCCGAAAAATTATAGCTTAATTTTTAGATTTTTCGCTTGATTCTCAAG
-TTTTTATGCGAAAATTTAGTTTTTTGTCAATTTTTTTTTGTTTTAAATGT
-AAAACTACGGTATTTAAAGGGAGGAGCACTAATTTATGCCGATGGGTCTC
-GCAGCGAAAACATTAAATGCCTTAATTTAGCCATGCGCCTGGAAGGTTAC
-TGTAGTTTTTATTGATTGATTTTTCATTCAATTTGTGGTTTTTGAAGGTT
-TTCAACTCATTTTGAAAGGCTTTTATAGATTTTTTTTTCTGAAAATCAAA
-TTTAAATGTTAAAATAATTTTTTTTTTTTTTCACACAAAAATAACAGAAA
-TTCCGAAAAATTGCAATTTAAACAGCTCTAAAATATGAAAATTAACGCGA
-TTTTTATCATTTTTTGCTTCAAATCGCTGACTTCTGGCAAAAAAAAGGAA
-AATTCAGCAAAAATCAATTTTTCAGAAAAATTTGATTGATTTTTGGAATT
-TTTCTTACCAATCCGTCGTCTTGCCGTAAATCCTGTAGCTTCATCTCCTT
-AGCCAGCAGATTTCTTACATCTAATTGCACGTGGCAATTGCAGTTCTGAA
-AAAAAAATGTTTTTGAGATTTTTAGAAAACTTATTTTGTAAATGTTCTAG
-GTGGGTTTTCAAATTTTTTTTTAAATTTAATTAAATCAAATTCTTCTCAC
-CGTCAGTTTCTCTTTGACAAAATCGCTCAAATTCTTCTGATTTTCCTGAA
-CTTTCTCCACTTTCACGGCCAAATCCTGCTGCTCACGCAAAAATTGTTTG
-ACAAGACACGTTAGCTGGTTCACATTTGATAGATTGTCCGGGATTTTTAT
-AATCTGAAATTTGAAATTAAGGATTTTAGCGGTTTTTTCGGCAAAACGTA
-AACTTTTAACGCTGAAAACTCACATTTTTCGAACTCCGCTCCAATAATCG
-TCTAGTGAATTCTTGAATAAATCCGGTTGCTTTCATAAAATTCTGAAATT
-CCTCATTTCCAATGAATTCGCCCATTTTCCGATGGAAGAAAAACCAATGG
-AAATACGGCAATATTTGCGCACAAAATCGATGCTGAAGTGTCGTCGGACG
-CAGTGTTTCGTGTGCAGTACACGCCTACGACAAATTGCGGACTTTTTTGT
-TATGGAGAGAGTAGAATAGAGAAGAAAAAAGAAGATAAAATGGATAAAAA
-TTGCGCGTTTTTCTCGTTTTTTCTCTGAATCTCTCAATTTTTAGGTTTTC
-GATCCATATACGTCCCGAGTGGAGATGAAGCCATAAATTTTTCTCTAAAA
-ATTGTTTCTTGCCCCTCCAAATCGCTTATTCGTTTTTAAAATTATGAAAA
-AAAAATGCTAAAAATGCTTACCAAACCGCAAATTTTTAATTGGAAAATAC
-CCAATATTTTGCAATTTATAGTTTAAATTCAAGAAGGTGCCAAAATTTCT
-GCAAAATTGCATATCTTCATATAAATTGTTACATTTTTTGTAAAAACTTG
-AAAACCCTGCTTTTCACATAATAGTACTGGAATTTTTCAATTTTCAACAA
-TTTCATAATTTTTGACCAATTTTTTATTGAAATTTTCAATAAAATATTTA
-AAAGATGTGGCTTTCCAAGCAGATTTTCCAATTTTTCCGAGTTTGAGTAA
-CTAAGTTTCAACCAAAATGATGTCACAAGTCAGAAAATTTCCCTAAATTT
-CAAAACACAGGTGAATAACTATAGGATTAGAATCTGCAAAGATTGAGTCT
-GGAGATAATTTCGGACATTTTTTCGGATAGTTTACGTTTCCTGTAGTTTC
-AAATAGGCAATTTTACTTTAAAGGTTGCTAATAAAATTAAGAAAAATCCT
-TATATAGTCTCCACCCACAGATTGGCTTTTTAGATATTTTCAAAATATCT
-TGTAACGAAAACTACAGTAATCTTTAAAATTAAAATTATTACTGTATTGC
-TTTTGTCCATTTACGGGCTCGATTTACGAAATTAAATTTAATAATCTTTA
-ATCTATAGAATATTAAAATTAAGCAAAAAATGAGAAAATAATACGAAGAA
-ATGAAGGAAAATGGAATATCGGTGTAACTATCCGAAAATAAATTCATTTA
-GAAAATCGAGCCCGTAAATCGACGTTACGAAGAATTACTGTAGTTTTCGC
-TACGAGATATTTTGCGCGTCAAATATGTTGAGCAATACGCATTTTAAGAA
-TTTACTGTTATCGTAATAGTTCAAATTTTTCGAGATAATAGTCTTCCAAA
-AAACTATTGTTTAAGGTTTTATTTTTTCCGTAATCTAAATTGATTATCAC
-TAGACACTGTTCATTAATCATTCAGAACTTGTATAATCCATCTCGGTTAA
-ATTGTTGGTGAGACAAAGTGTAATCTGTTCTAGTTGGGTCACACGATCCC
-TTTTCCACTCAATCGCTTACCCACTCAACACTATAGACTAGACACTCACA
-CAGGAAATAGTATTGTTTACCTGTTTTCTTTTGGACACTGTTTATAACTT
-TTCCCTCTCCGTTTCTCTACGTTTAAATTTGTCAAAAATTAATAATTTTC
-TTACTTCCACATTCAATACTCATTTAATGACCGGTATTTGAAAATATTTT
-AATTTTTTAATCTTTAGTTATTACAGGAACAGTAAACTCTGGGAATTCGT
-ATTGCACAACATATTTGACGCGCAAAATATCACGTTAGCTGGCATAATAT
-TAGGCATATATTGTTTCTACAATCTTGTAATGTATAACTGACTAACATCT
-TTGAAATAAGTTTGTAAAACTTGTGAGTTGGAAAACATTGTGCATGGATG
-TCGTGTTTCGCGCACGCGCTAGAGTAGTCATAAAAAGATTACTGTAGTTT
-TCGCTACGAGATATTTTGCGCGTCAAATATGTTGTGCAGTATGCATTCTC
-AGAATTTTGTGTTCACGTAATAAATTAAATTGTTAAAAGATATAATAAAA
-GTTAAAAGATATAACAGATTTTTTCTCACTTCCCTAATATGTTTAATAAT
-CAATCATTTTAAATTGTGCCGAAAATTTTCCGTTTTCCAATTGTTCGGAA
-TTTTTTCGGTTTTGCTCGAAAAAACCAAAAAGCAAATTTTTATAAATTTC
-CCTGGTGTTCAAAATTTTCCCGCAATTTTTACCTATTTTATTTTCAAAAT
-ATTTATTTATTTCAGTTCCCCCAAGTCAAACCGTTCGATGTTGTAGAAAT
-GGAGATAATTCCGCTGCATTACGGAGCACAAGTTGGGATTTATGACGAGG
-ATCATGAGGTTGGTAGATTTTAATTTGTTTTTTAAATCGTGGCCTAGCAC
-ATTCTAGGCCACAGGTAGTGACGTCACTCTGAACATTTTCAATATATGTA
-AATTTTAAATTCAAACTACTTAAAACTCGGAAATCACTTTTTCCGTCAGA
-TACACAGAAATAAACTAGTTTTACCTTTTAAAAAACTAAAACCATTGAAC
-TTTTCACAAATGTTCTTTGAAACTTGAGATAATCTGCAAATCCCAAACTA
-TTAAAAACTGAAAAAGGTAGCCTAGAAAATGAAAATTTTCAATAGTTTTT
-TCAAGTTCAAAGAAAAAAAATTGAATTTTTAAATTGTTTTTTTTCGCTAC
-AAGTCAAAATTATATTATATTTATTAGTTTTTTTCAATTTAAGAACATTA
-CTAAAATTAGTGCATATTTAAAAAAAATGTTTGTTTCGGAGAAAACAACT
-ATTAGTAATTGCACTGCAATCATCAGATTAGTGAGGAATTTAGTTCTATT
-TTTTTCTTTTTTTTCTGTTTCAAAGTCGTTTTTTCATGAAAAATAGACCT
-TCGAGCTACTGGTTTTTTGAGAAATATTATTTCAATTTTCAATTTCATGA
-TGAACAACATTTTTGGTAACACATTTAATTCTAGTAGAATATTATCCACT
-TTTTCTCTAATTTTTCAAAATTTATTCCTAAGTTTTTCTGATCAATGAAG
-AACTACCTTTTTACGACAATATTGCCTTCAATTTTTTCTCTCTGAAAATT
-CGAAATTTATCTGAATCAATGGTGCCGGTTTTCTTATTTCTGAATAACGA
-AATAGATTTTTTATTTATTTTTCAACAATTCCCGGAAATTTCTCTATTGT
-TAAAAACAAATGAAGTGAAAATCGATTTTTTTACTTCGAAAGTTTAACAT
-GAAATTCGATAAATTTAATCTATGATCTTTCAAGCTCCGCGAGTTTGAGG
-CGGGATGTTGATAATTAGAGATATGCCGGGGGAGAACACTACTCTCCAAT
-TATATTTCGGTTGCTCGAGAAATATTTTTAATGATAAATACTGGATACTA
-GATTCTATAGAAAACTAATTTATTTCAATAAATTTATTATTATTCAGGAG
-AATTATATTTTCTTGCTCGAAAGAAAATAAATAATCAAAAACCGACGCAT
-TTTCCTGAATTTATAGTTATTCAGAAGAATATAGATTTTTATTTTCAAAT
-TCTGAGAATTCAGAAAACATGGCTATTTGCCGGCCTAGAAAATAGAACAA
-CTAGGCCACCGATCATTTTTGTTTTGCCGTTGTCAGGCTTCTGGCCTAAC
-TTTCTCTATCTTAAAAGATTCCCAAATTCAAACTACTGGCTTTCCAAAAC
-CTTCAAATTGTGGAATGAACTTGTGATTCCAAAGATCTGATGTCAAGAAT
-TCAGTCCATAGTTCATATACTCCAACAACACTTTTGGAATTTTAAATCTT
-CATGGTTTTCAAAAAGAATCCACCAAATTATTTAGCAACGGGGTTTTCCC
-TTCTAAACAATTGTGTGACACAAATCATAATCTCCGTCACTTTGTACAAT
-TTTTCTAGTTTTGGTGATTTCCCCTCATGAGCTCAACGCGGCGGAGTAGA
-TCTTCCATGCAGGCGTTAAAACGCCTGCCTGCCTGACTTTAAGGCGGCCT
-CCGCCTGCCTAACGCTTCAGTCCTAGTCTTGTGCTAAACCATACATGAAC
-TATTTTTCTAATTCTTAATTTGGTTCTCATAAAATTGATAAAAATTAGGA
-AAATTTGAAATCTGAAATTTCAAGTAAAAATGGGCGGCAAACTTTGTATA
-AAAAAAAAAAGAAAGCTCGGCCACCAATTTTTCAAAGTTTCTTACCGCTC
-TCTGTCTTGCCTCGGGCAAGCCCTAAAACTTTAGAAAACATCCCCGAACA
-AAAAAGTAATAAATCCTTCAAATGTGGGAGATGCCCCGTGTATATGTCAC
-CTGTCGACTCGTCGAAAACGTTTGTGCCACCCGGCTCTTTACCTCGTCTC
-CTCTTACTCATCATTTTACTGCCCCCGTTGCTTTCCGGCTAATGAGGTTC
-TTAGGGCGTAGGACGCCATTGATTTGTGCTCTTTTCAGGCAAAATTTTAG
-ATTTTATTTCTCTGATTTCACTCAATTATCAGACAATCTAAGTTTTTTGA
-CATGTTCAATGCTGGAAGCAATTTTCGATTTTTTTATCGACCATGGCCTA
-AAATTACGGGTCAATTTCCTGAAACGGACGAACATTTTTGAAAGCAAAAC
-AGTTTGTAGAGTTTCGCTAAAATTTCTGATTTTTATCGAAAAAATCGGGC
-ACACCAAACAAAAGTTCGTTTGTGTCAGGACCTTGACGGTACGCAATTTT
-CGGACAAACCACGTGTGGCTGATTCAAAAATGTCAACTAAATTGACATCT
-TGAAAACATTTTTTTCACCTGAAAACCACTAACAGTGTCAGGTTAATCCG
-ATTCAAGCGCTATTTTTATGAACTTTCCTGAAAGTTTAATTCCACACGTT
-GTGAGGGAATTTGACACATTTTTAGAAAACCTGATCTCACGGTTAATTTT
-TAAACACTTCGAGGGCCCAGAAATCCTAGTTTTTTTTCTGGTTATTCATA
-GTTTTTCTAGAATTTAATTTCACATCTACATTTCTAAACAAAACTTTTGA
-AGGTCCTTGTAATTCTTCTCTAGTTTTTTATTGTCAAATTAAGTTTTCTC
-CAAATTAGGAAGAAGCGATAATTGCGGGTTTTGTGAGGGAAGTTTGTCGT
-CGGTCCATTTGTTTTGAAATGAGAATCGGAACGATTTCCTGTCTCCCGTA
-GAAACCAATTAAACGAAAACTTTTTTTTTTCATTTCGTTCATTTTGCATG
-CTTGCTAGCCTCGTCTATTGGAATTCTTTTGTACTATGATTCTATTCTAG
-TTGTGTCTGCATTAAAAAAATCGATTTTTTTGTTGAGTATATTTATTTTT
-CAAACAAGCCGAAAAAATAGATCAAAACTGAAAATTTTATAAGAAAAATT
-TCAGTTTAAATCTAGTTTTTTTTTCAATTGGCCAACTTATAATTTATATA
-TACTCTCAAAATCAAAAAAAAATGCACATTCTATATTACCCACAAACATC
-GAAAATCCGCTATTCCCTCAATTATAAAAAATGTGAGAAAATCCTCGATT
-CTTGGTTGCTATGAGACAGATTTCAGATTTTTCACCGGATAAACAAGACG
-TTATCATTACTTTTCAGTAATGCGCGTTTATTTTTCTATTCCATTTTTCG
-AATTTTGAGATGTTGTATTATTTAGAGAGCACGAAATTCTAAGAATGCGT
-ATTGCGCAACATATTTGAGGCACAAAATATCTCACAGCGAAAACTACAGT
-AATCCTTTAAATGGCTACTGTAGCGCTTGTGTCGATTTATGTAAATCATA
-TATTCGTCGATATAATATTGAGCGAAAATTAAGAAAATAATACGAAAAGC
-GAAAAATTAATATCGAAAATCGAGATTCCGTAAATCGACACAAGCGCTAC
-AGTAGTCATGTAAAGAATTACTGTAGTTTTTGCTACGAGATATTTTGCGC
-GTCTAATATGTTGTGCAATACGCATTCTTAGAGTTTTGTGCCTCCCGTAA
-TATTATGTACAATGCGTATTTCCTCTGCATGCAAGACTAATTTCCGATTG
-GTCTGTAGAGGTGCAGTTGGCTGGCTGACTTTTAATACTTATGTTCCTTT
-AAATTTTCAAGTACGATTAGGAACCCTTTCTCTCAGAATTTCACTAGTGT
-ACCTTAATGTTTGTCTTTTGCTACCTGAGACGATCATCAAGTCTTTTCTT
-TTGTTTGTATTAGATTTCGCAGTAAAATTGTGAAAAAAATTGCAAAAAAT
-TGAGAGCAAGAGCAGAAATGTGCACTTCTCGTTGTACCACGATTTTTCGT
-TTTCCCACTAAATACCTATACGTATAGGATTATCCAAAGATGATCCCGGG
-GATCACCAGTTCTTAGTTTCCTTATCAATTTTATATTACTCGTATGCCTT
-CCTCGTTTTTTTTTCTAAAGCCATGAAAATCATAGGTATCGCCTCAGCGG
-GTCGTAGAAGGAGCACAATGTACTCGAGCTCGTCACGAAGACCGTTTCGA
-CGGCTGGTTCCGCTTAAAATGGTTAGAGAACTGGGTCTTGATGCGATCCT
-AACAAATTTTTTGAATCTCTAAATAGTCCCTATAGATCATGTAATAATAT
-AGGTTGAACGTTTTACAGAATAAAGTTTTACAATAAACTTTATAGCATGG
-GTGTGTGGCAAATTTGCCGGACTTGCCGTTTTCCGAGATCGGCAAATTTG
-CCGAGTTTGCTGCACACATGAAAAATTTTTAATTAAGATTTTGTGCAAAA
-ACTAATGTAGCCCCTGGTTTACACCTTTTTACGATATTCTGAGTACATTC
-GAAAAGGATGTTTTAAATAGATTGAATATCAAATCAAAAAAGAAAGTTGC
-ATGAGTATTATATCTAAAAACTTTTAAAGAACACATTTTCAGGCACAAGG
-CCGAACGGCAACCGACTACGCGGGTCAGGACTACGATGAATGTTATGATA
-GGTTAGTTTCTTTTTCTATTATTTCATTCAGAATATTACGAATTAATGCT
-TAAAAAATTTTCAAATTAATTTTCAAATCAACCGCCTTAGCTCCACCCAG
-CTCTCTAGATCGCAACCCGCAATAAAGCCCATAAATCAGTGGGCAGCTGC
-TGCTGCTCCGTAGTGGATCAGTCTGTCGTCTCTCCGATCAGTGCGCTCTC
-GATGATACTCTCACATTTGACCTTTCTCGCTTTTTGTAAACTATGTGCTG
-GACACGTTGAAAGTAGTATCAATTGCACTTTTCTGGGTAGTTACCGATAA
-AATTGCCCAGATGGAAGAGTTTTCCATAACAATTTCTCTTCCATTTTCAT
-CTATCAGCTCTGTGGCCCCGCTCATTAGTGTTTCTCTAGCCGATGCTGTT
-CCAGGTTCCCATGGCAATGTGTACATGTGTGCCTAAAGTGAGCCAAAATG
-CTCTTTGAATTATTCATTCATCCTATGTTTTTTATTCGTCCTCACGTGAC
-CTGCACCACACTGCGCATTAAATATTAATTGGCACTGAAGAGAGCCGCCG
-CTCGGGCAAATGTTTAAATTTTAAATTTAATTGATTTATACATATTTGAA
-AAATGAGACACTATGTTATTTTCGCCGAATTCGTTCTCTGAGCATTGCGT
-TCATATCTTTGCACCTATATGAACAATTAAAATAATTTGTGTGTCCGGTA
-ACGAAAAACCCGAAATAAGTCTTGCCTATACAGGAGTTTGTGGAAAGTTT
-TCAAAATTTTTAATGCAAACAACGAAGGAAATTGGAGACGTAATACGATC
-ACTAGCAATCTGAATTTCTACTTTCAAAACGTTTTTTTCATAAGAAACTC
-CATTATCCAAAATCCGGCCACCTTGCTAATCCTGAGTCCATAATAGGCAT
-TGCTAAGGCAAATCTAGGGCTTTTGGCCGATAAAAGACTTTTTGATAATA
-ATTTCCAAGCTTAAACCTTATTCATATTACTTTTAGTAATCCTATAAGTT
-TTGTTTGCAGTGGTTCAGAATTGCCGAACATTCCAAGTTTTTTGATAAAG
-GTTTTACATATATGTTGAGCTTAAAAAATAAACTCAAAAAAATTAACAAT
-TAGTTCATACGTTATTAATTTCAACGAGTTTTAGTGTAAATATATATGTG
-GTCCTCTATATATTTTCCGTATTATTATTATTATTGATTCGCTCCAAAGC
-TTTAATTTCAGTCTCAAGACTATACTGCTCAACTGTGTTTATAGTAGTAT
-TTTCAAACGAACAAAAAGTGACAATACAGTATACTTTAAACTAAAAAAAA
-CTTTGTCGATGAAAGTCTATCGATCAAACTAGCGAAATCCGCCCGTTTAA
-TCCGTTTTCCCGCCACCATCACTTATTGTGTTTTCATAGAGCTTTATTTG
-ACGGAATTTCCTTTCTTCTGATTTTTCATATTTAACCAAAACTTACTTGA
-AAGAATCTTAAAAGGGATTTTTACAACTCTCTGGATCAGATTTTTCGAAT
-TGTTTCATTCGCAAAAGAAGAGCGACTCACTGCTATAAATGCAACATTCA
-CCACACTATCTCCACAATTTCATCTATTAATTCATACAATGACACTACAA
-TAATCCCCACTTGCTCAGAATTTGTCTCTCCCGCGGGGGACAAATTGGAA
-TCAATCATTCTGTCGGTCGACCATTGAACCACCACCACACAATATGGTTC
-AGCGGGGGGAGGTCCAGTTTTATTGTTATTACGTATACTGCTAGGGGAAC
-CCAATTTTCGGACCCCGCGCGGAATATTCAAATTGGAAAGAGTGTGTGTG
-CAAAAACTTTGTCCATCTTGTGTCCAGCAGACCAGCCAGCAGCTTCTCAA
-TTTCCGCTTCAACTTTCTCCACTTTCCCATGGGACAAACCTTTTGTCTTT
-CTTCTGGCTTCTCCTCTTACTTCTTATTCTTCTTCGTTGCCCAAATTGTG
-CTGGAAGAACTAGAGATGCTGAAAAGAAATAGGAAAAGAGCACGAAGACA
-ATATTTATGTTTTGTTTTCCATGGTTCGCCTCGAGTATTTGATTAGGCTT
-CTCCTTGTTGTCTTCACTCGACGTCGTGTTCTCTATTTTATGTCCACTCT
-TGAATTCCTGGAGTTTTCAGTGCACGCATTTGTTGAGCTGTAAGAAAGCT
-GCAGGAGTTTCCCAGAATTTGATCGATTTACGGAGCGGAGTGTCGTACTA
-CTTATTTCCGGATTATAAAATTCTGAGAATGCGTATTGCACACCATATTT
-GACGCGCAAATTATCTCATAGCGAAAACTACAGTAATTTTTACGTTTCGA
-GAATCGAGCCCCCCTAAATCTACACAAGAGCTACAGTAGTAATTTAAAGA
-ATTACATTTCCGAACCTTTCTCATTTTTCAACAATTTTTTAACTTGCCTA
-GCGTAGCCGAAAATTAGCGGTAATCGCTTCAAGACCCAAAACAAGCCAAT
-TTCATCAAATTTCAAGTAGAATTTTGTGAAAACAACCGTCACTACCATTC
-TGATGACCCTTTACTTCGACCGCCCAGTTCGTTAAACATTTTTGAATTTT
-GTTCACCTGTCTGCCACCACATATCTTTCTTCATCAAAATTCAACGTGCT
-GCGATCATCATCTTCATCTCTGTCTCTTCATCTCGCCCAAATTCATTTCC
-GTCACTGCGTCTCGTACTGATTTTTTTTCATTTGTCTCCAATCATTTAGA
-GGCCAAAAGACCTCCTCTCAATTTTTTTCTGTCTGTCATTGACCCCTCAG
-TTGCGAACCGATTCAGAGTTTACATAAACAAGCTCGCTTTGTATATAATG
-TTGAGTGAGCGAGAGAGTGAAAGAGAGAAGACGCAGGAAGCTAAGCGTTT
-CCTTTGTTTCAAGCTCTGTCAAATTGTCAATTTTCTAGCTAGAAGATTCT
-TATGAAGTTTTGAACATTCTAGATTTAGTTTGTTACCTACAACAGGTGAA
-TTTGTCTTTCTTGTCCAGAGATAAAACTTATCGTGGCCTTTTCCGAAATA
-GTATCAGATTTCCTTTGTACAAGGGCTTTCGTGAGGCGGTAAATCGCCTG
-CCTGACTTTAAGGTGACCTCCGCCTGCCTCTCGCCTCAATACGTTATGCT
-AAAACAAACGTGAACTTTTAAAAAAATTTAATTTTCAACAAATTGATAAA
-AATTTAAAAAATTTGAAATTTACCTGCCTACCATAGAAGCCCTACCTTGT
-TCCACTATTGATGCGATTCATTCTATTACAAATCAATGTAACGAACTCCG
-AAGTTTGATAGCCCGAGGCGTTTTCCTTGTTAATTTGATATCGATTATCA
-GTTTGACCAACCAAACACCATCGATTTGGCTTGATTTTCAAGGAATTTAT
-AGAATTTCGTAGAGTTTTGGACTATGTTTTGCATTTACGTTGAATGGAGA
-GAATTATATTTGAATAATTGAATAACTTGTTAATGGTTCAAGGATTACCC
-GTTCCGAAGTCTAGAAATGCCCTGGCGATGCTCCCGTCGAGAACTGTAAC
-CGATAATCAATCAATATTGCGGGTATTAATTGGCTAATATTCATAATCCT
-GAAAAGTTATTTGAATAACGGCAAACTCCCAAGAAACATACCATTTCCGA
-GGTGTATGAGAATTTTAACAAGACCTTAGGGTACATAAGCCTATCAGTTT
-GAAAAACAATGTCGGAATTTGTGCTTCCATGGTAGACAGGCGCGGTTTCA
-GGGTCTGAAGCTTGCCTGAAGGCCAGGCAGACAGGCGTTTTAATTCCTAC
-ATGGAAGCCCTAGAATACAGCATATACGGTACCTAAGCCAATTATCAAAT
-TTTACTTTTAAAAATTCATTCCACAGGTGTTCCTGTTCTGCTGCATCATC
-GTCACACAGACACTTACACGCGCCTTTTCACTTCTCATTTCCCACTTTTT
-CTTCGTTTTTCTCGCTTTTTCTTCTTCTCGACACGAAGAAGTAGGATAGA
-TCTAGAGACGTCGAAAGCCATAATTGTTTCCGTCGGCGTCTCCACGCGCA
-CTCGTACTGTCTACAAGTGCCACACACACACTTGAAGAAAATAGAGAGAG
-GTGCAGGAGGAAAAGGAGGGGACGACTTCTGAAAGTGTCGATAACTACCT
-CCTATTTGAGTAAAGAGTGCAAGAAATATATGTGCGTGTGTGTCTAATGA
-GAGGGTCTTGGAGCGATTTTTAAGCATGTACAGGCATGAATCAGGCGGCA
-GGTTCCAGCCAGGCTCTGAAACCGCGCCTGCATACCAGGGAAACCCAACG
-ATGGTTTTTCTTTGCCCGGTTGATCCCTTTCTTGGATAGTTTTAGTCTTC
-GTCCGTTTTTCATTCATACTCTTTTTGTAACTGTTCAAAAGTCTAGTTTC
-ATATAATCAGAAATTCGAGAAAAAGGATTTTTCGAGGCTCTGAAAAAAGA
-TCCCAGAAGATTGTGTCTAATTCTAATTCTCTACAGAAAATGCCCAAATC
-GAAAATTTTTCGACAGATCCTCGTATTTCGAAATTCTGGAACATTCGGCA
-AAGCTGAAAATGTCACAACTTGCCAAAATGAACATTTTCGGCAAATCGGC
-CAATAGCTGTATTTTTCAAACTTTCGGTAAACCGGCAGTTCGCCAAAAAA
-AATTCGGCCATGGTCTAGACTCTAGAGTTGGGCGGCAGACAATTATTTCG
-GGCAAACGCAAAAATTAAAAATGGAAATTGGTGTTCGGCAAATCGACAAT
-TCGCCGGAATTGAGAGTTTCCTGCAAATTCGGCAAACCGGCAATTTGCCG
-AAGGGCAACTTCTCCGAACTGACACCCCTTCCAAAAATCCGAAATTTTTT
-TAGCTTCACCCCCTTCCCTCCCTTCTCGTTTTCTAAAAACCGGACACACC
-TCTTACAATTATTACAAACACCACTACGTACGTATTAAACGTCTCTCGTA
-ATAAGTGGGGCGCCAAAATATAATGGTTTTTGTTGTGTTTAGTTAGCCTC
-CTCCTCTCTACTTCTCCACCATCATCAAATCTACCACCACAATAACATTA
-ATTCGATCATCAACTGACTACTTTTGTCTTTCAATGTGGATTTGTAGTTG
-TTGGTTATTTGAATTCTTAACTATATATCCATCCCTATGTTGAAAATTTG
-AAATTTTTGGTAAATTTGAAAGATACCAAGTTTATGTATATTATAATATA
-TTATAAAAATTTCCGGTAAATTGATATCCTGCAAACGGCAAACCGACAAT
-TTGCCGGAATTGAAAATTTCCGGCAAACCGCAATTTGCCGATAATAAATT
-TGCCTTTATTGATTCTAGGTTTCGAAAAATTACGTGTTCCGTTTTTTTTT
-TGAATATTAAAATAGGAATATCAGAATTTTTTATTTTTTATTCTGCAACT
-TTTCAAATTATGTTCAAATTTATTATAAAACTATCGTAAGTGTGAATTTG
-CAATTAATTTTCTTATTGCTAGGTATCAGTTTTACTAGGGCTGTCATGTA
-TGTACCAAAACGCCTACCGCGCCTTCTGTCTAGTGCGGTGCGGAACCCGA
-AAAGTGTCGGAATCATCTTTCGCAGTATGTGGTGCTGAAACCAAGCCTTT
-GAGTTCTCGCCATAGTGCGGCGAGAGGCCGGCATGAGGCGGGCAGGTAGG
-AGGCAGGCTTCAGGAACTGTGTCGCGTCTGCCTCCCAATCCCAGAATACT
-TTTTTTTTCAAAAAGTTGCAATGGAAATCAGATTTTCAAACGCAACCTGT
-CTTCCTCTTGTACTCAACTTTTACTTGATGATAGTCGATAAAGGTGTGAA
-CGCGGTGAGGTGTAACCGTGTGACAATACATCATTGTATTATTCTTTTTC
-GCAAAAAAAAAACATTCTTTTGGGTATTATATTCTACCAATGTATCTTTC
-ATTTTCTCGATTGATTTTTTCTCCGGCGAAAAGAAAACAAATTGAAAAAA
-AACGTCAAAACATAAACATTTGGAAAATATAAAGGTGGATATAAAAACGG
-TTTCTTTCTTCTGGAACATTCATTTTTAACCATTTTCCTACATATTTTCA
-CGCTAAGCCGGAGCAAAACAGAGACAGTCGAGACTGTCAAAACATGTAAA
-ATATACGTTTTTTGGTATACCTATTTATTAACAGGTGCTCCCTTTTCTCT
-AAAAGTTTAAATTTGTCGCGAAAAAATGCAAGAAATGTTTTTTTTCTAAA
-AACTAAAAACTCGATCAAAAATAATAATTGGGTATTTAAATATTCCGGAA
-TCTCCATTTTCTTCCCGTTCCTGCCCTTCCATTTTTTTCTTCCTGCACTT
-ACTCGAGTATTCATCCTCTTCTACTGCTGCCATAAAAGGTCTTCCGCTTC
-ACTGAAGCCTTCTGCACAGCAGCGTATCCTCCCGCTTCATATCTCGTTGC
-TGAACTCCATATAGCTTGTTATAGCTCAGTTTTAGACGGATTTAGGTTCG
-AATTTCTGTAGGGTCTCTAGGAGTACTGTAATAAGTGATGTGTCAAAAAT
-TTGGCCTAAACTGTCATTGCTATAGATTACGGTGATAGAAATTTGAATAT
-GTATGAAATAGTGAAAAATCAGTAGACTGAGCCTTACTCAAATTCACATC
-CGTTCGAGATATTTCTGAGTTCTGAATTTCTGTTGATTGCAATTGCCGTA
-ACTTATAGCAAGGAAAGAACAATTTGAAGCCGAATTTACGGCACAAAATT
-AGTTTTGGTGCTTCTAGAGCCTATTTTATAAAATATATACTTGACACGTG
-GCTTTTCAATATCACCATCTCAAGAAATTACCACAATCGTTTCAGGTGCG
-AACAAGAGTGTGGCGAGGAGGCGTGGCGAATCGCGTGCTGCTCACGAGTC
-GGGAAGATCGCCATCCTTGTCATGTCAATCATTGTATTATATCTTATCAT
-ATCAGGTTGGTTTAAATACATATTATTCAAATTTATCTGAGTTTACACAA
-TGAATTTTCAGCATTAACGCCCTCCGAAAGCACACACAAGACGGACCTCA
-ACGAGCCGCGGCCTGGTATTAATTTAACAAGGTGAGAATGTTGGGAACAT
-ATTACTATTGTAGGAAATTGCTCGATAATTCCACACTTATTGAGTTCACA
-ATTAATTTCTACTATATTAACTGTGTTTTTGGTAAAGAAGTATCACTTTT
-TCCCCTCCCAACTCCGATAATTCGGCATTCCTAGAGTTTTAACACAATGT
-TTTACGACATACTTATGAAGAGTTGATGCAAATCGCAAAAAAAAAACAGA
-AAAATAACTATTTTATGAATAGTATCATTATCGTATGGTGTCGTCAAAAT
-GTTTTGTTGTTTTAGTTTTTTTTTACTCGAAATTTTCTGAAAACACCGAA
-TTTCATATTGAATCAAATTTCTTGATAATTTATTAGACATTTCGATTTTA
-CAGAGCCAATCAAGTACTCACCGGATTATGTGATGCCTATGAGCGAGGAG
-ACGTTTCCGGAGACTCTTGTAATCGACTTTGCTATGATCGAAACTGGCTT
-GTCACTGACTTTTACGAAGGGCACAAGACTGTGGTCATAGTGAAAGATGG
-CGGACAGATTGCTGTCTATAAAAGCACAAAACCGTTTATGGATCAATTCG
-ACGAGCCGAAAGACCATCTGACGGATGCAGAGTTCTCGGATCGAGTAGTC
-GATATGGTGAATGATGAGCTGAGACTCGGATGGCCGAAACACTATCGACG
-GCATTTAATGGAGACTGTGTGGCCGACACTGTTACGGACCAAGGGAGAAG
-CCATGTCGAAAGCGGATCGACGATCCTTGTGGGCTTTGTTAAAGCAGCCT
-GAATTCATCCTGTTCCGAGTGTTACCGTTGACACGTGTCACGCCGAAGCT
-CATTGGGACGTGTGGACATATGTATCAGACTGAGTCACTGGTGGCGTTCA
-AGATGAAAGGGTATTATACGAATTTGAAGGTGGGGATTTTTTTTTAACTT
-GATTTTAAAAAAAAAATTTTCTCAATCCAAATTTACAGGCAAAAATCTTG
-GTGCATGTCATGGGAACCCTGAAGCTCTTATACGAATTTCTCGACGAACC
-CCTTCAATGGTGTGATGTTCGATTTGATAATCTCGGGTTATCAGCAGATT
-ATCCGAAAAGGTAGGTCTGCCTGTTTTTTTATTTGATTTTTTTTTCCGAA
-AAAATCTACATTTTCAATTATTCGAAACGTAATTCGAATAAAAGTTATTA
-ATGATTTTTTAAACAAAAAAATTGATGATAATCCAACCGGAAACTCAAAT
-TTTGAAAACCCCTAAAAATCCAAATTTCTCAATTTTTCTGCAGATTCGCT
-CTAATGGACGGTGACATGGTGTACACGAAATCGAAATTGGATTCTCTCCT
-AAAAGGACGTCCGTGTGAAAGTGATAATGATTGTAAAATTGGAGACTGTG
-AGGCGAGATGCACTTCTAATATGGTGTGCTCGTCGAGGAGTAACGGGAAT
-TTGGAGGTAAGCTTGAAAGTTGAAAAAGTTTGGAAAAATTGTGAAAAATC
-AATAAAATCGGCAAAAAACGAGCTTTTTTCCAGATGGCCGAATTTTTCAT
-AGTTTGCAAAAGTTCGTCCACCTGTGAAAAATTGCTAAAAAAGCAACAGC
-ATTGATGAATATTCATAAAAAACCAATAAATTCGACAAAAACCTTTTTGA
-TTTTTCCAAAAATCGAAAATCACATTCTGATGTTCAAATTGAATTTTCAA
-AAAAAATATAGAAATTTCCTAAAAGTTTTAATTCTCAAAAAACGAACGAC
-TGACAAAAAATTTTTAAAAAAGTGAATTTTCCGAATTTTTTCTAAAGAAA
-AACTGAAAATTTGAGAATTTTCAGTCAGAAATGTGATTTTTTTTTTGATT
-GAAAGGAGTTTATTTTGTAGAATTTAACTTCCACTATCAGAAAAAAATTT
-ACCTATTTACTTTGTAATAGGAAAAAAGTTGTGAAATTGTTAGGAAAATT
-TTTTTCAACTTTACAATTTCCCGGACAGGCCTGTAGTTCCTTTTTTTCAA
-AACGTAAAAGAAAAAATTAATTAAAAAGTTCAAACTCCTAGAATTTATAC
-ATTTATTTTGCATTCTAAAAAACAAAGTTTTTCTTGATTTTTTTGTGTAA
-AAATTGAAAAAAAATCCAAATTTTGTAGGTCTTCTGCGATAAACTGGTCA
-ACAAACTGTTCGCAAATCAATGGTCCAAAAATAATAAATATTTGGTCGCA
-TGCCGGGATACAGGACGAAATATCACAACTCGACTCAACGAATTACGGTT
-AACATGGTCATGGAATCTGCCGGATGTTTAAAGGAATCTAGCTCAATTCT
-TTCTTTTTTTTTCTTCTACTCCATGTGTCAAAAAATCCCCGTGTCTTATA
-ATTTTCTGGTGCTTTTTTCCATATTTTCCTTTTTTTGTGTTCTGGCTCAT
-TTTTCCATGGCTCACAGAGCCCGAAAGCTTAGGATTTTGAAATTTTATTC
-GTTTTTTTCTCATAATTCTGTCATCATTTTTTGCTCTGCATCATCATCAT
-CATCGTCAACATCATCGCGTTTTATTATGGGTTCATGTATTATTACACTT
-TCCTCGAAAAAAAATTTTGACGAACGTGTAATATGTTTCACCTTGTCTCA
-TTTGTACCTCGTTCATTGTTACGGGTTTGAAGTTTTAAAACTCTGAATTT
-ATATGAAGAATTTTAATTTAAAAAAAAACTTTGTTTCCTTTTTTGAATTT
-TTACAGACAAATTTTTGGCTTGAAAACTGAAAAACCCTGACTAAACTTAC
-TATTTATGTGTTGGGTATCAACGTGTATTGACCCACGACGTGGCTAAGAA
-GATCGTACAACGTGAACTCTATGAACTAACTTATTTATTCCTTAGTTTAG
-TAATGTAATAAACTACTCGTCTTCTCCTCCTCGTCTCGCCTTCGAATACA
-CAACATTATGAAAAGAGTTTTTCTTAAGATAAAAAATGTTCTAAAAAATC
-GATGGCCGAGTTTCCTATTTACGCGGCCACAAGACCAGTAAAAAAGTGTT
-AACACAAGTGCGAAAACTAGAACATTTATTTTCAAATTTCACCCGATTTC
-TACAAAAAATCAACAAAAAAGTCACAAAATTTAAAATATGAACATAATAA
-TCAATATCCCGCTGGCGCTGACTCCTCCCCTTTTCGGAAATCACTGTTCG
-CATAGATTTGGCCGTCGGAAAGTCGTTCGGCGGCGGTGACAACTGTCAAA
-TTGTTCACTGCCTTCATTACGTGACCACGATCGATCAGGGATTTCACGTA
-GGCTTTCGGGAAGTTTGGCTCGTACCACGTGTAATTTGGCTAAAAAATAA
-GGAAATTGGGAAAGGTTTTGATTTTATTGATTGAAAAATATTTCATGTGA
-AAGTCGAAAATTGATTGAAAATTAAATTCAGAAGTTTTTTTTCTGAAAAT
-TATTGATTTTTATTTTTAAAAAATCAACTTTTTGACAATTATCGATTTTT
-CCAACAAAAAAAAAATCAAATTTCGCGTGTAATTCTCTACCTGTAACTGA
-TTGTGCATCCTTGGAGCATCAACAGCTTGTTTAACATCTGCTTTCAGCCA
-TAACGCATGCAGTGCAACTCCAGCAACACCCGAAATAATGGTGGATCCAC
-CGGCTCCGCCGACCGCCATAAGCTCCGCCCCTTTTGTGTTAAAGATCACT
-AATGGACTTTGACTACTCATGGGGCGTTTTCCAGGGCGAATGAAATTGGC
-GGGAGACGGTGGGAAACCGAAGAAATTCGGATGACCGGGAGTGGAAAAGT
-CGTCCATTTCGTTATTCCAGAGAATTCCCGTCGATTCGGAGGATACTAGG
-GCACCCAGGCTGGAAGAATTTGAGATGGTGGAAGAGTTTTTTTGGCGGTG
-GCCTAGAAAATGTCTTCATATCCGAAAAAGTCAAAGTGATGGCCTAGAAA
-TTTAAGTTTGTGGCCTATAAACTTGAACTGATGGCCTAAAAATTGAACGT
-CGTCCTAAAAATGTTTTTAACTGATGGCCTAGAATTGAAAGGTGATGGCC
-TCCAAATTTCAGGTGGGCGTATATAAACTTTGGTTGATGGTCTAGAAATT
-ATACACGTGGCCCAGATTATGAAATCACTTCGGTATAAAATCCAGGTGGT
-AAACAATTTACTATTAAGACTGCCTAAAATCATCCCCTGGCCTAATTAGT
-TTAAAATTTTTGGTGACGACCTCGAACTTGTTCATTTTTATCAACTGCAG
-TTGCTTGTCGACTGAGGACTAACTTCTCACTTGCTGGCCGAGTTTTCGAA
-GTTCGGCCACCAAAAATTTCCTTTAAAAAAGCCAAACTCACTATAAGTTA
-ATGGTAGACGTAACCGAAACTGCATTGCCGTCTGCATCGATAATCGATAC
-ATGAGTTGTTCCATGATCCTGCGGTGGTGCTTCAAACGATCCTCCATAGT
-AATCATCAGGATGCGTCGTGTCTGTGATCTTCGACCTAACCCAATCCGCC
-CACTCTTTTGACGTAATATTTTTGGCGATTTCCGTGGCGTTTGCCACGAA
-TTGCGGGTCGCCAAGCCAGCTTCTAGCCGCATAACTAAATTTGCTAGATT
-CCAGAAAATGATGGTATAACGTTGCGATTTCGTTGAACGACTTCATGTTA
-TATTCGAAGCCATCCATCACGTTAAGTATTGCCTGAGCCACCGCTGAGCC
-CGAGGGAGGCGGCGGGCCGCAGACTCCGCGCCCGTTTTTCAGCTTTGTGT
-AGATCACATTTTTTGAGTCGTGGACTATTGATTTGTAATTTTTAAAGTCC
-TGAAGCCGGATGATCCCACCGTTGGCTTCGAACTCTTTGGCGAGTTGCTC
-GGCGAGCCGACCTGTATAAAAGTCGGCGATGGGATCTGTGGAGTTTGCGA
-GTAGCCGGAATGTTTCTAGAAGGTTTTGGCGGGTTTTTATCTGCTCTCCT
-GGTTGGAAGACACGCTGAGTTTCGGGGTTGATGAAGTTTTTCATGGTGGG
-CTCCGCGCGGATTTGGTGCTCGTTTTGGTTGAGAGCTTTTGCAAGGGCAT
-GGGACGTTGGGTAGCCTGGAATTTTTTAGGATGGCCTAGAAACATGAACC
-GATAACATAGTTACTTATTTTGTGACCTCGAAATTTTCATGATGGCTTAG
-AAATTTTTATGATGGCCTAGAATTTTTATGGTGACCTAGAAATTTTTTGA
-TGGTCTAGAAATTTTTAGTAATGTAATAAACTACTCGTCTTCTCCTCCTG
-AAAAAATTTGGGCCCGTCTCCCTTCGTGGTGAGACCCATCGTGGCGAGAC
-CCATCGTGGCGAGACCCATCGTGACGAGACCCATCGTGACGAGGCCTATC
-GTGGTGAGACCCATCGTGGCGAGACCCTCCGTTGAGAGACCCATCGTGAT
-GAGACCCATCGTGGTGAGACACGCCGTGGTGAGACTTATTGTGATACCCA
-TCTTAACGTACACAGTAATTGGAGAAACTTTTAAACTGATTTTTACAAAA
-AGTTCAACATTTAACTTACCAAGAGCTCAATATTCCGTTGCCTCGCTTTT
-TGTTGCCCTCAGGGATTATTGTTCTGTTGCCTCCATTTCCGTTACCCCTG
-TTGTGTTGCCTTCGAGCAGCGTTGAATCCGTTGCCCCCCCCCTTTTTCGT
-TGTCCCCGGGGAATATTAAATCCGTTGCCCCCGTTATCCGTTACCCCTAG
-GGATTGTTGGCCGGTCTAAAAACGGCCACCAGAAAAGTTTTTGAGCATCA
-AAAATGTTCTACGCCGTTAGGAGTTTTTTAGGCCAACAGAAATATTCTAG
-GCTCGCAGAAAAAGTGCCCACCTTCAGCCAACAAATCAATAGTTGGTTTC
-AACAACTGTCTCCACTCGACTTTTCCACTTCCGAATCTCTCGAATTCAGT
-CCGGAGGCCGTGAAGCTCTCCGGGCACCGCAATCGCCTTCCATCCGATTC
-TCGACTGATTCCATTTGTCACGGTACATTTCCTCTGTTGCGGCGAGCGGA
-GCAATCTCCCGAGCATCGATTACCGTACACTCTTTTGTCGTTCTGGAAGA
-ATTTTAGAGGTTTCTAAGTCATTGAAAATATTTTTAGGCCACGGCAGAAG
-TTTAAAGGCCACACGCGCTTCTGGCTTTCCTCATATTTTGAAATGGAAGA
-GTTTGCCGAGTTAGCCCGTTTGGACTAGGCCACGACCGGGGTAAATTTAC
-GGAGCGTCGTGTAGACGATTGTCAATGGAGCGCGAGAAAAACGCTTTGAC
-GAAGGCCAGAAACCAGTGAGGCCACAATGTGATGTTTGCAAAAATGTTTT
-TAATGGCCTAGGAAAATCATTCTTTCTTCCAAAATTTTTCTTCTTTGTTT
-TCCTTTTCGATTATTGATTTTTAGTTGAAAAATCAATATTAATAATTATC
-TTTTTTTTTAATTATTGATGTTCCGCTCCAATTCGTGGCGAGACCAACAA
-CTCACGCATTATAAATAGTCATAAAATGTCCGCCGCCAATTCCGGCCGAA
-TGTGTATCCATTACACCGATACAGAAAAGTGCGGCGATTGCCGAATCCAC
-CGCATTTCCGCCTTTCAGCAAAATATTCCGACCGATTTCTGAGCAAATTT
-CGTTGTCGGCGGCGACGGCGGCTTTCGAATATTTTCCGAGTGGAGAAAGT
-GATGGTCCAGGCCAACGGGGTAGGCGGGCATTGTTCTGGAAACCTTGCCG
-AGTTTTATTTTTATCGGCCACGTAGCAAATCGGCCAGCCATGAACCGACT
-GCGGACTAGTTTTCACCCTCGTGGCCTAGCTTTCTAACAAACCTGCATTA
-GTAAATGAAAATACAATGAAGCGAATGCGACCGTTGAGATTAACAACGTG
-AATACGAGAACCGTTAAGCCGACCGCCGCGACTAAAGTACGGATTTTCAT
-GGGTTGCTCGGCCTCGATAAGCGGCTCAACTTCATCAAATGGTCCATATT
-CTGGCGGTAAATTATCATCGTCCGGAAACGTGTTATAGTATTGAACAGGA
-GGTGGGTTACTGCTGAAAAGTCGAGTTTTGCGCGTCAAATTTGATGTATT
-GAGTGGCATGATCACTATTATTACAAGACCGCGAAATTTTGAGAATGCGT
-ATTGCACAACATTTTTGACGCGCAGAATATCTCGTAGCGAAAACTACAGT
-AACTCTTTAAATCACTACGGTAAAGCTTGTGTCGATTTACGGGGTTTCGG
-TTTTTTCATTTTTTTTGTGTTTTTTAAAAAACAATTTATCGACTAATGAA
-TGATTTCCGTAAATCGACACAAACACTACAGTAGTCATTTAAAGAATTAT
-TGTAGTTTTTGCTACGAGATATTTTGCGCGTCGAATATGTTGCGCAATAC
-GCATTCTCAGAATTTTGTGTTGCCGTAATAATTCTGATTTAAAAATGGAA
-TTTTCAAAAATCAGAGGTTTCCCAAAAATTTGAATATTCCACAAAAAAGA
-TGAATCTGAAGAGTATTTTCAATTTTTTGAGAAAATAATCGATTTTCTGG
-ATTAAAAAATTTGAATTTATAGATTTCTAGATTCTAAAATTTGAATTTGT
-GCAATTTCAAACAAAAATGTATCGATTTTTATCGACTTTTCATAAAATTT
-AATTTAATTTTCGAAATTCCGAAAATATTGCCCGTTTTTCATATACCAAA
-AAAGTTGTATCAATTTTTTCAAAAAATTAAATTTTCATCGATAGTTGTTT
-TCAAAGCATCATGATTTTTTTGAAAGAATTTGCAAATGTGAGAACTACAG
-TACTCCCTTAAAGGCGCACGCTTGTTTTTATTTTTAAAAAATTGGTCGTT
-TCGAGACCTGGTACCGTATTTTCGCATTTGGGTAATATTTCCAGCATTAT
-AAATTTAAAAACAATGCACTTTTTAAATCTTGAATCCATATATATATTTT
-TTTCAGAAACTCATGCCGCCTCGTTTGGGTCTCGATTCGAATTTTTTTCA
-CAAACGTATAATATTTTCTCGAAAAACCCGCGAATTTTTAACATTATCGA
-TTTTTCTCTCACCTCGTCGATTGCCCTTCAGGAGTCATTATTCAGAATTG
-AGTATGAATTAAAAAATCATAGAAAAAGTCAAAGCGCTGTCAATTGGAAA
-TTTAGGACGAGAATGTCAAAATTGCAACTTTTCACGATAACGGAATTCTA
-TCGCAAAACTAGATAAGAGCTACAGTTTGCTGCGTGTAAGCGCGCTCCAA
-TGACAAACGAGAAGAGAAGAGAAGAGGGGGTAACCGCCAATAGCTCTCTT
-TATCGAGGATAGTCTTCAAGTGACAGAAGAGATATTCTGTGGTGGGAGAG
-AGTTGGGTGGAAGGGGGAACAATGAGGACTACGGAAGAATGACTTTTAGA
-TTTGGAGTATAGGAGAAAGTGGAGGTTTTGGCTGAAATTATTTTCAAAAA
-CTTTAACTGTAACAACTAACGAGTAGATTTGAAAATGAGGATAATATTCA
-ACACAACAGAAAAAAAGTCGATAGGTAACTAATAAAAATTAGAGAAAATG
-TGGCATCGGGGAGAAGTGGTGGAACAAAAGAAGAAACTGATGATGATGAT
-AGGAGGATAGCCGCGAAACAAGCGATTAACAGTGAACAAGATTCATTTCG
-GTGAAGATGGAGAAGATAACAGCAAAAAAAAAAACACAACAAAAGTCCTT
-ATTATTGCCCATTGAGAGTTTGTTGAAGGACACTGGTAAGGTGCTCGTCG
-ATTCCATCTTGCTGCGCGAATTGTGGGAACGATGCGTAGATTTGCTTCAG
-GATTGTGACAATTCTTTGCTTGGTTTGGTTGCCGCTATCGTCGTCGTTGA
-AAGCATCGTTGGCGATTGAGAGCAAGCCTGAAAAATACAAATAAAAATAA
-AATAAGTTACGGATTTTTTTAGATTAGAACTTACAAACAAGGAAGATTCT
-CGGAAGATTCTGATTTTCTGGTCCAAAAAGTGCGGCGTCTTGTTTATCAA
-ACAATTCGGCGAGACACGTGTAAATGTAGGGGCTTTCCTCGGTGTCTGAA
-TATGTTGGCAACCAGCTCAGGAACATCTCGACGACCTGGAAATAATATGG
-AACTTTTTTCTTGAAAAACTGAATTCTAAAACCAACCTTTCCGTAGGCTT
-CAGCAGGAAGTGGCACATTGCCGATGATTTTGGCAAATGCAGAAATCGCG
-TTTTCCGTGGCAACAGTGCTCTCCTCGGTGGCTCGGGCGTCCTCTCGTTG
-AATCATGGCGGCCAGTGGCTCCAAACAGCTCAAAATCTCGTTTCGGTAGT
-CGCTGATCTGGTGGTAGTTGATGGCCATAACTCCGAAACCGTAGCTCGCT
-GCTTGTCTCACTTCAGGATACTCATCTCCCAACAACTTGTACATTATTGG
-AATAAGCTTCGGGAAGCGAGTTGGCATATGTCCGACACCGAACTCGATGG
-CGTCATCGAGAAGGCACATTCCCCATTGTCTCTCGAAGTATTGTTTGGAT
-CCCTCGATGAGTTGAATGGCACAGTTGAACACGTTGATCATTCCCTCGAA
-GATAGTTCCCTTGAACTCCTTCATAAGAGAGTGAGTCAAATCAGAGATGG
-CTCCAAGGCATGAGGCCTCCAATTCCATGAAATAATCGAGCTCCTCCTTA
-GCTTCAGCATCATCGTCATCTTCATCTTCAACTGGACGATCGCTCATTCT
-CTTTCCGTAGTTTTCAAGTTGCTTGAGAAGCACCGAAATGATGAGTTGAA
-CCTCTTCCTCGGCGATTCCCTCGGTTTTCATAACCTCAATGCACGATCCG
-ATGGTCGTCATGAACGAGGCGAGAATCTCGACATCGTCCTCCTCCTCCAT
-AGAGGTCGTCAATGCCTTCAAGAACTCGCACCACAAACGACGCTTGTCAG
-CCAATCCTTGCTTCTCAACACAGGTCAACAAGCATGGCATGATTTCAGCG
-GAAGCCGTACGAACTCCGTCGTGAAGTCCGAAATCGAGATTCTTGATGGC
-GAGCTCGTAGACGTCGACGACGTATGGCATGAAAGCCTCCTTCATCTCCT
-TGGCGAACGCGACAAGCATATCGCAAGCAGTTGCCTTCTCCTCAAGACCG
-CTGGTGCGGATTCCGACAGTCTTTTCTCCTCCGATTCCGTGGTATTCAAC
-TCCTTCCTCGTTTTCGTGAACATCTTCGTCTGAAATTTATATATTTTTTT
-AACACGTAAAACTAAAAAACACTCACTGTTGAAGATATTGAAGTCTGGGC
-GGTAACGAGCGGCACGAAGAACTGGATCCATGACAACTGGGAGGAATGGT
-GCGAAATCGGCTCCAAGAATAGAGCAGAAACGAGTCCATGAGCTGATCAT
-GTAGCTGTATTGTGGATCATCGATAGCCAAATCCTTCATTCCGTCTCCGA
-GAAGGTTCAGGATCTCGATTGCAGTAGCGTGGAATTGTTCCTTTCCGACA
-GCATATCCGATGAGAGAGATGCATTCGATGGTCTTTCCTCTCAACTCCTT
-GAGCTCTCCGACGTTTTGAAGAATGTGAACGAGGTTCGGGATGAGGCGAG
-CATGATGTTCCTTGAAGAGCTCCTCGGCGGCTTCAGCGACGGAGGCGATG
-GCGGTGACGATGTTCTCAACGACAACCTGGTATCTCTTGTCTCCGAGACG
-ATTGAACACAGCGGAAAGCACATTTTCGAGTTTCTGAAGAATGAATGGAA
-GATATTGTCCAATGATGCTCTTTGGGCACTCCTCGGCAAAGTTGACAAGA
-GCCGAAGCGGCATGAGCACAGACACGTGGAACATCGGTTCTGTCAAGAGA
-CTCGAGAAGAGCTGGTATGACGGCGGCGTGGCACTTCTTCTGAAGAGTTG
-GAGCGAAGTCAGAAGACATTTGTCCGATGGCGTTGCAAGCCGCGTATTGA
-ACTCTTGGATGAGCATCATTGACGTAATTGGTGATATGAGCCATAATTTG
-CTCTATGTGTGGTTCCATAGATCTTTGGCACCCTTCACCGACGGCGGAGA
-ACGCGCGAAGAGCCGCGTGCTTCATCTTCCAGTCTTCGCTGGTCAAAAGC
-TTCTCGACAAGTGGAAGGAACACTGGGAGCATCACTTTTCCGTTGATGCA
-GCAAGCAACACGGTCGATGGCGCTTTCGGCGATGATTGGGATACTGAAAA
-ATAATTTAATTGAAGAAAAACTAAAAATTTATCCTTACTCTTCATAGTCT
-TCTTCCTCTTCGATCTCGTTGAGCCACTCATTGAGCACATCGTCATCCAT
-TTCGGTCATGCATGAAAGAAGAGTCTCGAGAATTGGTCCAAGAGCTCCTG
-GTGCGTATTTCTTGAGTCCTTTTGGTGCGGATTCCATGTACGAGCAAATA
-ACTTCGATGGCGTTCTGACGGACCATCTCGTTCTTTTCCTTGTTTCCAGC
-AATCTGAAATTTGAAAAAATGAAATTTTTAAATTGGGCCATTTAAATTAC
-TTACAGCAAGAGTGACTTGAAGAACCTGAGACATATGAGTGTTAAGGCAT
-TTTGGCAGAGAAGAGGCGAGCTCGGCGAACTCTCCGAGTGGTCCATCTGA
-ATCATCCTCGTCGCTGGTTTCATTGCAAACTTGAAGAACATTTGGAACAA
-GAGAGGTCATAAGCCTGACAACATCCTTCTCCTCATCATTATCAACAGCG
-AAAGCGATAACAGCACGGACGGCGGTGGCCTTGATTTGCAAATCCGGTGT
-AGCCATGCACTTTTCCAAGACAACTTTGAGGGTTGGAAGGAAGTGGGCCA
-GCCTGTTTCCAAAAATTATTGGGCATCCGCGAAGAATAAGCAGGGCTATG
-TAGTTTCCGGTAAGATCCTCGCTCTTCAAACAATGATCCATCAGCTCGAG
-GACTCCTCCCCATGTCATATCTCCAGAATCGTCGATGAGGTTTGAAGCGA
-TTTCAGAGATCAAATCAGCAATCTTCTTCTTAATCGAGAGTTCGGTCTCG
-TGAACTATCATCTCGAGAACTTTGGCGAGAATGCGCTGTTTGTTCTCCTC
-GTTCAGCGTTTCCCAAATCGCATCCCAGTCTCTGGCGAGAACTCGTCGCA
-GAAACACCAAAACTGTGGATCTGGCCTGAAAATCGAAAATTCATGGAATA
-TATAGGAATTTGAGTGAACTAACATCAGAATTATTCGTGTGGTGTGTGTA
-GGCCTCGAAAAGTGCAGCTACTTTGGTTGGTCCTTCAATCTTTTCATAGA
-CTTCTTCAGCTTGTTTTCGGATATCATTGTCTGCTGACTGCAGTTTTGTG
-ATGAGCTCAGTGAATTGATTGACGTCCATTGTAGGGAACCCTGAAAATCA
-GAATATGTGCTAAAAATTTCAAAATTGAGAAGGAAAAAGATGAAAGCGAG
-TCGGTTTTGCAGATAAACGCCTGGGGAATACGCGGAATCGCTGAGGAAAA
-TAGATTTTTAGTATAAAAATTGGCATTTTCAACAAAAAACCTATCGGAAA
-ATGTGAAAAATAGGCCAACAAATATTGAATTTTGGGACAAAAACGCCTCG
-AGTGCACGATTCTCAACGGAGCGCACTTGCTGCGTCACACGCACTTTAAA
-CTGTACACGGCGGGAAGTTCAAATTTTAAAAGGATTCACGTGATTTTCAC
-GACATTTACTGGTTTTTTCAGCGAGTTTTCGCAACTTTTCGGCGACAACC
-GATGATGATTTATGTTTGGAATATGATGATGGTAGCGTGTTGCGAAATAA
-AAAATCGATGGAATGAGTCAGCGAGAAACTAATATTTGCATAGAGAACTG
-TTTGCAATTTTGGCATTACATTGGCCAGTGCACTGACAAAAAAAGAAAAA
-AATAAACGGCAAAATCTCTAATACCTATTCCAGGCAACCAGTGTCTGGCG
-ACGATGGAGAGTAATTCTGAAAGAGACGCAGTTGAAAAGAGTGTGTTTTT
-CGCTTTTTTTTTCAGACAGAAGAGTAAAAAGAGTAAATACGTATCAGTAG
-TAAAAACAATGTGCGAGCTGGGAAATCAGTAATAATTAACTACTTGTGAT
-ACAAATTCCTCAAGGAATGAAGGAGAAAGTGTACTTTTTTTGAGACCCGA
-AGAACTCGGGGGATGTCCAATTGGGGGGATTACCAACTCGGGGGATTGGC
-CCCGCCCACAGAACCGTGGCTTGCAATACGCCCATTTCTGCAACTGCCGC
-ACGGTTTTAAAACTGTATTTTTCTCAATAGAGCGAGAATTAACAAGAAAA
-AATAATTTTAAAACCGTGCGGCAGTTGCAGAAATGGGCGTATTGCAAGCC
-ACGGTTCTGTGGGCGGGGCCAAACTCCCGAGTTGGTAATCCCCCCAATTG
-GACATCCCCCGAGTTCTTCGGGTCTCCTTTTTTTTAATTTTGAATTGAAA
-AATTGTCCGAAAAGTGCAAACGTAGAACATCAAAACCAGTGGAGGGGCGA
-AATTTGATAGATCGCATGTTGCAAGAATGAGCATTCTACGAGTTTCGCGC
-CATTTCTGCGTAGCGCGCACAATATTGTGCAATAAATCTCGGTATTTGCG
-TACATGCATCATATCTTACGCGCAAATCATATTGGAAATTTCCCCGAAAC
-ACGGGGAGGCAAAGCTAACGTGGCTGAAGAAATTTCTACAGTAGTCCCAT
-TTGGCTGACTGAATATTCAACGCGAATAAGTTTTGTACACTATTGCGTAC
-TTTGCGTACGCGCATTTTATTTGACGACAATTCGTCAATATCAGCTCTGG
-CTAAAAGCGCTTTTCTCATTATTTAAGCGAATAAAAGTCGAAAAAAAATG
-TTTTGTGATAGAGAATAGTAATTTAAAAAATAAAAAAGTGCATATTTTAT
-GTTTCTCATTATGTTTCCACTGATTTTCTGAGAAAAACCGAAAATTTCCT
-CTTTTTTCGATGAATTTCAGCTGAATAGTTTGTTTTTATCTAGTTTTTCT
-TCCGATTGACTGAATAACACATTTAATAACATCAATATAACGTTTAAAAC
-ATTCATTGTCTCGAAAACCAATATAAAACTCGTCAGAGAGGGATACTTAG
-TAGATATGCTGAACAAGGAAAAGAGAGAGAAGAACATTAACCGAATGGGG
-AGGGGGGAATAAGAAATCTGAACAGGAACGAAATATAAAGAACATTATTA
-GAAAGAACAAGCATGGCTTGATCTTCTTGGCAGTCGTCTCCTTATCCTAT
-CACTTCTTCTCGGCGTCCTTCTGATCATGCTACCGAGCAACGTGGCACGA
-TCGAAGAGTTTCACAACGGTTTGATACTTTCGCTCCACGAGGGGGCTCCC
-AATTCAGCGAGGGTCCTCTCACGAAGTTTAATTTTTTAAAATTAAAAAAT
-AAGTAACACCTCAAGAATTCCATCGAAGTTGTGCTCCTTTGCAATAAGAC
-GAAATTTTTTTTTACGGAATTGAACAGGATCATTGAGGTACGGCATGAAA
-ACGGCTTCCTCGTTGAACGATGTTGAAGCTCCTTCACCATTGCACCTGAA
-AATCAACTTCTAAATTTTCCAATTTAAAGAAAATCCACATACTTATCCTC
-GGAAACGAATCCAATATTCTGGTTGCTGAGTGGAATTGCTTCAAAGATTT
-TGATCAGATTTTTTTTTGAAATTTTCGATCACACATCTTGTATCCACCAA
-ATCGCCGAGTGCTTCATGAACTTCAGACTCGTGCTTTCCAACCTCTTCCA
-TGAGCTTCACTTCTTCTGCTTGGAACTTTTGATTGCCTTCGGACCGATCT
-GACTTGTAGTTTCTTCTTAAATAGTGGCTGATTGAGCAGTCGACCTTGCA
-GTCCTACCTTCTTTGGCTTCTTCTGCGGCACTTGAGCCCTTGTAAGAGCA
-CTTATTGCTGCTTAACCTTCCTTATTAATACTTCGAACAGCTTCTTCTTG
-TTCGCATCTATTTCGAATTTTGTCTTGAAATCTTCCAATGCAGCGACAAC
-GTAATATCTGGAAATTATAAAAACATTAAGAGAAAATATTTTGAAAAAAA
-ATCGAAAATTGCACTGAATTCCTAAATTTTTTATTAAAATCGAAAAAAAA
-AAATGAAATACGTGAGATTGAGTTTCGAGACTTTTTTATTCAGAATCAGC
-ATATATTTCTCCATATTTGAGTAGGTTTTCAGAAATATTGTACCATAATT
-TTTGGAAAAATGTAATTTTTAATTCGAAATTGCACTGAATTTCTCGAATT
-TTTCACTAAAATCGAGAAAATAAATATGAAATACGCGAGATTGAGGTTCA
-AGACTTTTTAATTCGGAATCAGCATATATTTTTCCATATTTGAGTAGATT
-TTCAGAAATATTGTACCATAATTTTTCGAGATATTTTGAATAATAACTTA
-CTTTTCGACGTTTTTTGCCTTTGTCCGGTTTAATCCATCGAATTTCGAAG
-CGGTTTGCGTAGATTAGCTGAAAACATTATGCTTATTCCACGTAGTAACA
-AGAAAAAACAAGAAAAAATAAGAAAAAACGAAGAAAAATAAGCATATAAG
-TCAAATTAAAAATGTTTATTCGATCAAAATTCTTAACCATAGGAGGCGGT
-GGCTAGCCGGCGCACTCTCGCGGCCACGTTAGCTTTGCCTCCCCGTGGAA
-AGGAGCCATGATATTACGGAAACACTATTTGAATTCTGAGAACGCGAAAT
-ATCTCGTAGCGAAAACTACAGTAACCCTTTAAATGACTACTGTAGCGCTG
-GTGTCGATTTACGGGTTCGATTTTTAAAATTATTTTTTTTGTTTTTTGTG
-TGCGTCATCGATTACTAAATTATAAATTATTTCCGTAAATCGACATACAA
-TCGCTACAGTATTCATTTAAAGAATTACTGTAGTTTTCGCTACGAGATAT
-TTTGCGCGTCACTCCTTCAGGCACCACATCTTACACTCAAAATCGAGGTG
-AATTTCTGTGTATTTGACAGCAAAAATGTCGTGAAAAACAATTAAATAAG
-GCAATTTGAAGAGGAAAAAACTGGGGCAGATGTGAGATAAGAAGAAGAAG
-AAGCGGGGCTTCGACAACCGTAAACTAATCAGAGATGGAAAGTGAGAAAT
-TTGAAATTTAAGACAAAAAAGTTAACAACGGGGGATTTTTTTTAGAGAGA
-AAGAGCGAGTAATCGGGCAGCAGCAGAGAAAAAAAAAGATAATAAACAAT
-TGAAAAAATATAAATATCGGGGAAATTATTGCTGAATAGACTGCAAATAG
-GTGACAATCTCGGGCGGTACAGAACGAAGTGTCTCTGGACAATTTCCGGG
-TCCACGGACAAGAACGGCCTGCGCAAAGTAGGCCTTGTGGTTGGCGATGT
-TGGCGGCGACGGGCGGTTGCTTGGGAGCGTAACTCAGACGACAGAATGGG
-TTCACAAATTCTCCCTCGGCGTTGTACATTGAAGCTTGCTCTTCTTCTGG
-TGATAGGACGGCTCGATCGGAGGCTGAAGCAGCTTCCAGCAGCATTGCCA
-CCTCGTATGACAGAATTCCGTATTGACCACTGCAAAAAAAATTTATATGA
-GAAATTGAATTTAAAATGATTTTATTTGTAATTTTGTTTTTGTTAATTGT
-CGTTAATTGTTTTTTTTTTGAGAAAAAACCGAAAAAAAAATTAAAATCTT
-CATTTTTGATTTAATTTTTTTGTTGAAAAATCGGCAGTTTTCGATTTTGT
-TTTTTTGAAAAAATAGGGAAAAGTCGGTAATTGTCGATTTTTCAAAAAAC
-TGAAAATTCCAGATTTTGTCAGGAAAAAAAACGAAGAAATCGACAAAATT
-TCAATTTTATTTTTTTAAATTTGTGTTTTTCAAATTTTTTTTTGATATGT
-GATTTTTAACTTTTCTCTGGAAAAAAACCGAAAATTTGCAATTTTTCAAT
-TTTTTCCAAAAAAATCTTTAAAAAATAGAAAATTTTCGTTTTTTTTTCTG
-AAATATTTAAAAATTGTAACTTTCTATTTTTTTTAAACCCGTATTAAAGT
-TTAAAAAAAAAATCGGAGAAAAAAAAACTGAATCGAAAATATGTGATTTT
-CAATTTCCTTTGAAAAAAATATAAAAAATCGAAAATTTTCGTTTTTCGAT
-ATTTTTTCTGGAAAAAAGCCTAAATTTTCATTACTAACACAAGCTGCTGC
-GTGACATCGGCTAGCAAATTGCCCATTCCAATGGCAATAATCCGTTTCTC
-AGGCCCCGTTGTCGTTTGTTTCAGACCTGGCAAATCAATGCATACGACCT
-TCTCGATGAGCATTCCGAACATGCCAGTCTGAATATTCTCACACGATTGA
-ACAAGATCCTGTGCACTCCGGGCGATCGTAAATCGACACAAGAACACGAT
-GAATAGCTTCATAAACTTGGGTGTCTTCGACGATTGAACTCTTCGAAACA
-TTGTATTGAGCACAAATGTCATCGCGGAACCCTCGAAGTGCTCAATCGAC
-GGAAGAATCGTCGCCGCCAACTGGAAACCGTATTGATCCAAGGTTTTCGA
-GCCCAAAAGCCGCGCCAAATGGCTCAAGATCAACCCAGAATTCTCCGAGA
-CGACTCGCTGAGCATTCACGGAAAGGATCACTTCGAGAACCGAAAGTGCC
-GCTGGAACATTCGCTGATCTCGCCCAAAGACGTTCGGATAGCAGAAACGG
-AAGGAACGGTGAGAATTGATCGATCGATGAGTTTCTAGCGATACATGAGG
-AGACGAGAACTCCCGTGATTTGGAGAGCATATGGGATGAGATCTTCCAAA
-TCCTCGCGGAAGATCACTTCGATCAGTGGAAGGAGTTGAGCATCCAGTGA
-GGCGCCGATTGTTCGGGTCTGGAACAGGAAATTCGTTAAAAAATATAAAA
-TGTTCTTAAAATTGCTATCACTTTTTTTTTGAATAAGAAAAAAAATCACA
-AAAAGGAAAACACGAAAAAGCAGACAAATGTTTCGATTTTGCAATTTTTA
-ATTTTTTTTTTTCAGAAAAAAATTATCGATTTCTTCTTTAAAAAAAGAAG
-ATTCTTTTCGATTTTTTCGGAAAAAAACATCGAAAAATTGAAAAACAAAA
-AGTTTTGATTTTTTTTTCAGTGAAAATCGTTCAATTTTTCGGGGTTTGTT
-TCGACAAAAATAATTAAAAACTAAAATTTTTCAGTTTTTAGGTTTCTTAT
-CAGAAAAATTGAATTTTTTCGATTTTCCGAAAAATTAAAAAAAGGTATAT
-TTTTTGAAAACACGAAAACGGAAAAGTGTTGGTTTTTTGTAAATTTTTGC
-GTTTTCCAGCAAAATTGCCAATTTTTCCGAAAATTTTCAGATCGAAAGTT
-AAATTATCGATGTCTATTCCAATTTCCGAGTTTCAGCGAATTTTTTTTTG
-CAGAAAAATTTCAGAAAATTTGACAAGTTATGTTCCAATTTATGAAAAAA
-AATTTGAGACCAAAGTGCGGCACGGAAAAATGGGCGGAGTTTAGAGTGGT
-ATTTTTCTCTCAAACTACTCCTTACCTTGGTGATCAACACACAAATCGTC
-TCAAACAAAAAGTGCGTGTGCACCGAATCCGCCGGATTTTTCGTCGCCGA
-CTCGACCAACTGTGCGAGCTTGACCGCAATCGCGTCCGCATGCCGAATCG
-TGTCGTCATCGAGAATCACAATGATCCTCAAAATCGCCTTGATCAGATAC
-GGCGAGTTTTGCGCTTTGGCATCCTTGTCGAACGCGGTGACAAGGTTCTG
-AAGGATCGAGGAGACTGGAAGATTTTGAGCCGAGAAGATTTTGTTGGAAT
-CAGCGAGAAGGATCTTTTCAATAGCGTAAGCTGCGTACTTGTGCAGAATC
-GGAGTATTCGAGCTGAGAAGAGCGTCCGCCGACTTGATCGCAGTCATAAG
-GTGCTCTGGAGCCAGCTGTTTCCTGAAAGTGACCGCAAACTTCAGTGCAT
-CAGCTTTAAGGATCGGAGTTTGATTGACATCGGCGTTGAGATGTGTGGCC
-ACTTGTGTGATGAAGAAGTCGTTGATGTCCACCAGCGGGTTCGTCGCCGT
-TACTCCACTCTTAGCAGTCTCCGTCTTCACCGCGATCGCCGTGATCAGCG
-AGTAGACAATGTCGATCTTGATCCAATCACCACTTCCCAGCAGGTTCTGC
-ACGATCTCCCCCAGACATGGAAGCATTTGCGCCTCGAATCTTCGGCAGAG
-ACCTCGCGCAAGATCGATGGCTCCACGGCGTCGAGTTCCTACATCGGTAC
-CCTCGATGTCTCGCTTCATATAATCCAGTGGCTCATCCTCGAACAGTTCC
-ATATCCTGTTGACGAAGCAGAAGGTTCTGAACGCACACGTTCTCGGCGAG
-AGTCTTCAGAACGCCTTCACCAGTGAAGTGTCCCTCGTAGTACTGTCGCT
-GGCTGACCATCGACAGAAATTCCAGCGCGGCGCACACCATCGTATCGTAT
-CGAGTGTCGGGGCCGGTAGACTTGAGCAGATTCCAGACGGCAAGGATGAT
-GTCGGGCACGAACTCGGAGATCTCCTCCTCGTAGCGTTGCGAGTAGAGCG
-TGAAGATCTCACAGATCTCGTGCTTAAGCTCGTCCAGAGTTGTAGGTTCT
-CCCGAGTTGGAGGTCTGCGTCGGCGCGTCGATTTGCACGAGATGCAAGAA
-GTGTGGCATCCAGTCCTTGAGATGATCCTCGAAGTATTCCGGAATCTCCT
-GTGAGCACAGAGAATGGTAGACTTTTGCAATGAGAAGTAAGACTCGGAGC
-CATTGGGCGATCTCGTCGGCTCCGAGTTGATCCTTCCGCTGTCCCACCTC
-CATCATGTTCCGTAGCAACAGAGTTAGAGGCTCTTGGGTCTGAAAAATCG
-GTTCTTTTTATTTGTAACTGAAAAATCTGGGGAGAAAACAGTTTTTCGGT
-CCAAATTCGAGACTGACATTCAGATTTCTTCAATTTTTTGGCTCAAAAAT
-TTTGAAAATTTGTCCATTTTTATAGGAAAATTATCAATTTTCGCCAAAAA
-TTCCTCATTTTTGCTTTAGTTAAAATTTTTGACTAAAAAATCATAAAATG
-TTGAATTTTTCACGATTTTTCGGAAAACAAGGCCAGCTTTAGCTAGCTTA
-AATGTCTAATTTTGGTCATTTTTTAGGGTCAAAGCGGACAAAAATTCAAC
-TTCCGACGGCTGCGACGTAAAAAAGTGGCCAAAATTGGGGATTTTAGCTG
-AAATTAGCCAAATTTTGAGCCAAAACGCAACTCACGCTCAGTAGACACTT
-CTTCAGCTCTTTCCAAAGCTCTGCTGACTTGGATTCGAATCGGAATTTGC
-GGAAAATCTGCTCCATCGACGCCAGCGAGGCCACCAGGTGATTGAGATCC
-GCTCCGTTCAGGAATTTCGACAAATATGGAACCAAATCTGGCCATTTTTC
-GGGAAAATCTCTCTGAGCGATGAGATACAGAGCATTGGACAGGATTTCCT
-GAACATTTGATTTTGTATTGAACATCGCTTCGAGAAGCATGCTTCTGAAC
-TGCTCCTCGTCTTCCTGGCCCATTTCTACCTCTGGTGCCGGGCCCTGAAA
-CAATTTAAATATAAAATTCACGCATTTATTCAAATTTTCCAACCCAATTT
-CTCTTCACAAAATTTTTCAAAGCGACAGCCGCGGCGATTCGGATCTGCGG
-AGCAATTTGTTGCTGTTCGTTGACCACCAGTTGAAGAATTTGAATGATAT
-AGCCTGGATTTGATTGCAGCGAGCGGAGCGCTTCTTCTCCACGCTTGCGA
-ATCGCAGCATCCGGCTCCAGAGTCTGCTGGAGAGCTGCTCCGATTTGCTC
-CATCTGAAAATAGGGAAAAATAGCTGTTTTGGGGGTGAAATAGGGAAGAA
-TTAGGTGAAAGGACAAAGATAGTTTAGCTTAAAACTTGAAATCTAAAATT
-TCCGGTCAAAATATTAAAGTTTTACGCAATTTTTCGCAGGCCCGCGGGGA
-ATAAACTCGCAAAAATTCGCAAAAATAAAAAAAAAATTTCAAAAGTGTGA
-AGTGTTTGCGTACAGCGCACCCGACCCGACGCGCAAATTTTTTTCATTAT
-GTTCTCTGTTTTCACTGATTTTTACTGATTTTTCCTAGTTTTCCCTTGAT
-TTTCTTCAAATTTTCCACTTTTTCAGCAAAACGTGCATAAAAAAATAAAT
-TAAAACATTTCAATTTTCAAAACTTTGCAAAATAAAGGCGTCGTTGCGTA
-CAATGCGCACGACTTGACGCGCAAACTTCCCAATTTTTATTCTTAAATTT
-TCCTGGATACCCCTGGTTTTTTCTCTGTTTCCCCCCTAATTTTTCGCATT
-TTCAGCAAACATGGGTGTTGATAAAAAGCAAAAGCAACGAAAAACCAATC
-CATTCGAGCTAAAATTCAACAAATCCAAGCATGACGTGAGTTTTTCAGAG
-TTTTGAAGAAAAAATCGATTTTCTCGCAGATTCTCGGCCGGAAAAAGGGC
-GCACAAGTTGGAGCACCGACTGCGTCACGAAAACGAGCTCACGAGCAACG
-TGAACAGACGCTAGGCGTAGAATATGACCGGAAAAATAAGATTAGCAAAA
-TTGTCGACAAACGGCTCGGCGAAAAGGACGGAAAAAGCGAGGAGGAGAAG
-GGCGCGATGAGATTCACAGAGGAAAGAGTCAAAAATTATAAAAGAGCATC
-GAAATTCAACTTGACAGATGATGGAGATGAGGAGGAAGAAGGTTTATTCC
-GAAATAAATTGAGAAAAATTTTAATAAAGTAAATTTCAGTACTTACTCAC
-AAGGGAAAAGCGCTCTCGGACATTGAAAAATACGACAAATCGATGATTTC
-CGACTCGGATGACGATGAAGAGCCGGGAAATTTGGGCTCAAATATGGTAA
-AAGTGGCTCATTTCGGTGGTGGAGAGAAGACCGCCGAGGAGCACGTCCGC
-GAAAAAATCAGCCGAGAGGATATGATTTCGAATTTGATTGCGAAAACGAA
-GCTGGCGCGTCACGAGAAGCAACAGCAGAAGGATGAGCTCGAGCTGATGA
-CAGAGTCGTTGGATTCCAAGTATCAGGCTTTGATGGGCAAAATGAAGGCT
-TCATTTAGGCCGACCGGGCGCCAGCCGCTGGAAAAAGATGATTACGACAA
-ATTGGTACGGGAAACATCCCGGTTTTCTCCAAATTTTTAAGATAAAAGAT
-AATTATAAATTTAGAGTGAAAATCGATTTTTTTCACAATTTTTTAGTGGA
-AAACCTAAAACCCAAAAAACTTGATCTGAAAATGCTAATTTTTAACCATT
-TTTGCTATGGAAATTGGAAATTTTCATTAATTTTGCTGTAAAAGTTGAAG
-AAATCCAAGTTTTAGCTTTGTAATCAGAGAAAACACTGTAAAATTATTTC
-GGAATTTGTGCAATTTGAAGTGAAAAATAAAACATTTAACTTCTTATCGC
-GAAAGAAATTGAGCTGAACTGAGAATTTTTTTGACGAAAAATCATTAAAA
-AGTCAATTTTTTTGACAAAAATTCGAGAAAAGTCGGTTTTTCTTTTGACA
-AAAATGACGAAAAAGGCAATTTTTAATTTAAAAAAATAAATTTTTCGCCG
-AAAAATAACTTTAAAAAAGTCGTTTTTTTACAAAATAAAACAATTTAAAA
-TAACTATTTTTCGACAAAAAAATTAAGAAAAAGCCAATTTTTTTGTTTAA
-AAAATGATAGAAAAAGGCTTTTTTTTTGTTTCTTCGCCTAAAAAATCAAG
-AAAAATAGGTTTTATTCCATTTTTTATCCAAAAATTATTATTTTTCCAGA
-CAATCACCTTGAAAACCGAAGCCGACGCTCGTGCCACCCCAGCAGATCGT
-AAGCTATCCGAAGAAGAAGAAGCTCTGAAAGAAAAAGAACGTCTGGAAAC
-TCTCGAGGCCGCCCGTATCTCGAAAAATAATGCATTTTTCAACGCAAAAT
-CTCATTTATCAGCCGATGCCGACGTTGATATCGATGCTGGATCGAAGGCC
-GACGCCAGAAAAGTTCAGGCGAAAAATTCGAGATTTGAGGTCAAATTTGA
-CGATGAAGGTGGCCTGATCGATGAGGATACGGTGGAAAAATCCAGGATTT
-TAAAGAAAAATCTGGATGGTTCTGATGAATCTGACGATGACGAGGATCTA
-GAAGATGAGGAAGAGGATCTGGATGATCTACTGGAAGATGAGGATGAGCT
-GGAAGAAGATTCCGATGATGAGGAAGCTCAGGAAGCCCAAAAAGTCGTCA
-AAAAAGCGAAAAAATCTGCTCCAGAACCCGCTGAAACTCTGCCATTCGTA
-TTCGAAATGCCGAAAAACTATAAAAAATTCTGTGCTCTTCTGGAAAAACA
-CTCGGAATCGATGGATTTAGTGCTGGAACGACTCGTGAAATGTCATCATC
-CGAGCCTTAAAGAAGGAAATAAGAAGCGTCTGAATAAGCTTTTCCTCTTG
-TGTTTAAGATGGTTTGATGATATGTCGAAGGAGGAATTGACAGCGGAAAG
-TGTGAAGGAAATGAATTTAGCGCAGGAAACTATGCATGCGTTGATGAAGG
-TAGCGATTGGATGGAAAAGCTGAAAAATTACCGCACTTTTTAATCTGAAA
-ATTGAAAAAATTCGAGAATTTTTGACCTAAAATTTTGAAAAATTCCCGAT
-TTTTATACCCCAAAAATTGCAAAAAAGTCCCGATTTTTTACCAAAAAATG
-TTTTAAAATCCCCGAATTTTTTACCTAAAAATTGCAAAAAAGTTTCGATA
-TTTAGACCCAAAAATTGCAAAAAAGTCCCGATATTTTTACCAAAAAATGT
-TTTATAATCCCCGAATTTTTGACCTAAAAATTGCAAAAAAGTCTCGATTT
-TTAGACCCAAAAATTGCAAAAAAGTCCCGAATTTTTTACCAAAAAATGTT
-TTAAAATCCCCGAATTTTTGACCTAAAAATTGCAAAAAAGCCGGTTTTTT
-TACAAAAAAATGTTTTAAAATCCCCGAATTTTTGACCGAAAAATTGCAAA
-AAAGTCTCGATTTTTAGACCCAAAAATTGCAAAAAAGTCCCGAATTTTTT
-ACCAAAAAATGTTTTAAAATCCCCGAATTTTTTGACCTAAAAATTGCAAT
-AAATTCCAAAAACTTTGGCCAAAAAATTAAAAAAAATACCCGAATGTTTG
-ACCCAAAAATTGCAAAAAAGCCCCGATTTTTTGAGAAAAATCATGTGAAA
-TTAAAACCTTTTTTTTTTGAAAATCAGTCTCGAAAAAAAAAAGAAAAACC
-AGGAAAATCATGAAAATTTAAGAAAAAAATCATTAAAAATAGGAAACGAT
-CATGGAAATATTTTTAAAGAAACATTATATAAAAAATCATTAAAATTTCA
-GAAAAAAAATATGGAAAATCCTGAAAATAAAGAAAATAATATTAAAAATT
-CAGATTAAAAAACGCAAAAAATTCAACAATTGAAAAAAATTTCAAATTGT
-TTTTTGCAGTTCGACATTCAATACGGAGTCCGATGTGTGCGTGCTCTAAT
-CCGTCAACACTGGAAAGGCCGCCAGGATAAACAGAAGAGTAGCCCAGTGT
-CATTTGGATTAATCTCTGCAATTCGTCTTGTTTCCGGCCTCTTCCCAGTT
-GCCGATTCCTGGCATCCTGTAGTGGTTCCGGCTCTTTTTTTGGCAACTGA
-AGCACTTTGCTCGGCGAAATGTGCCAATTTGAATGCGTTGGCTAAACAAA
-TTCAATTGGCTAATGCTATTGTTGAATATGTGTCTGAATCCAAGAGGTAA
-TACTTGGAAACGAACATTTAAATAGGCAAATTTTGAAAAAAATACTGAAA
-GCTTTGATATAAAATAGGAAAAGTAACGAAAAAAAAAGCCAAAACCACCA
-AAAATATTATTTTCAAAAGCTAACTCAAAAAATTTAAAATTCAGAATTGT
-CGCTTAAAAAAATCTATTTTTTTCGATATCGAAAAAAGATTACTATAAAA
-ATTCAAAAAAGCAATTTTTTAAAATATAACTTGATTTTTTTTTCTGAAGT
-TCATTTTTTAACAAATAATTGCATTAATTTTCCATTTTAATGTTAAAAAA
-AAGCGAATTTTTCAAAAATTGATATAAATTTTGTTTTGGCAATTTTTAGA
-TCAGAAAACATTGAAAAAATACAAAAATCCCGTTTTTTTTTAAATTAATT
-TTTTAGAAAAAATTGCAATTTTTCAAAAATCTTCCGGTCATTTCTCTATT
-TTTAAAAAATCTCTCGTCTCTTTTAAAAAAATTTAAAAAACCGAATTATC
-GAAGCGTATCAAAATTTTGAAATTAAAAAAAAAACCGAACTCCATTTTTA
-CGAAAAATCCGAAAGTTGAAAATTGTTTTCAATAAAATAAATTTCAGATA
-CGTCCCCGAGCTGGTCGCATTTGCTCGAAGTGCTCTTCTGCTTGCAGTTA
-CAGAGAAAAGTGAGAAATTCGCGACAAATGGATTCCCGATTTCCAAGCCA
-CACACGGAAATGTTATGCTTTGAGGAGAAGGTAAATTTATAAAATTTGTT
-TTTTTGAGCAAAAAATTGGTTTTTTTTTTTGGTTTTCTCTTTAAAAAAAT
-TTGCTTAAAAACGCTCAATATTTAAAAAAAAAACTGGCAAAATCGAATTT
-TATAATATAAATTAAAAATTTTGTTCAAATAAAAATGATTTTTTTTTGAA
-AATTTAGTTTTGAAAAATTTAAAATTAAATTTTAAATTTTCACAAAATTG
-CCAATGATAAAATGTTCACTTTTTCTTGTATAAAACTGCTTGAAATTTTT
-TAAAAGCAATTTTCCGAAAAATAATTTTTTAATAGATTTCTGAAAAACCG
-AAAAACCACCGATTGAAAAACGAAAATCAAGTTTTTTTCCGAATTTTCTA
-TTTTTAACAAATTAAATATCAATTTTGCACATACAAAACGGTTAAAAAAA
-AACAAAAAAAATTGCCGAGAGCCAAAAAAATTTAAGTTTCAGCGATTTTG
-AAATTTTTTTTTTAGGAAACACGGTCTCCTCGGGTGGAAACGAAGGGGGA
-GGGAGATTGCTTGCGCGTTTCACCGATGCGCCTTTCGCGTGCTGGCGCAC
-TTCTGAATATTGAATTATTTTTGCGGAAAAAATTCATTTCTTCTATGAAA
-TTTTCTTGAGAAAGCAAAGGAAAGATGATGAAATGAATTTTTAAAATAGT
-TTTCTCAGTTAAAAAGAGAATACCTTGCTGCAAAAGGTTAAATTTATTGA
-AAAATTGAGAAAATAAGAAGTTTATCTTTGTTTTCACTACATAAAGTGGG
-GAAATCTCAAAAAAATTTGAAGACAATTAAGAAATATAATTAAATATATA
-GCCTGAAAGTCAAATAAGAAATGAAGGTTTGGTCACAAACAATTTTATTT
-TTGAATTGAAGTTTTGAGAAATGATCATGTGCCAGAATCACTAAATCTGA
-GACATTCAGCCCAATTTCTTTAATTTTCTGTGATTTTATCATGGAAGTGT
-GGCTTTTTCTGTGATCTTGCCAGTTTTAACAAGTTGAAATTGGAAAATCG
-TGAAGTGGGAAACTAGCAGTGAAGCTTCCAAAAATTTCAAGCCTTACTGA
-AAGGAAAGTATTGGAAACTAAAAACGAAAGCTTAAGAAGATACCGTTTTT
-ATATATTTGAGTTTTGAAAAGCCTTAATAGGTTTTAAATACAGTTTTCTC
-AAGAATTCAAACTTGTAACGATTAAGTTGAGGCACAGAATAAGATGGTAA
-TACTAAGTTATGTTGAAAAAAGCCAAGAAAGACTGAAAACATTGCTTTCA
-ATCTGATTTTTTGTAAGTAATGTAATGTTGAAACATTATTCTTCATAGTT
-CAGCACTTTGTATGGCTTATTTGAGCCCAAACGTACAGTAGTATGTGGCA
-AGAAATAAAATATTGTGCCAACAAAATTGGAGCCGAAAAACCCATGATAA
-AATGTTTAATACGTGTATTGCTCTAATAAAATACCAAATATTAATTAGAT
-TCACTGTCTCGACTCTTTTTAATTCAGATTAATAACTTTTAGCTCCTCTT
-TTTAACGAAAAATTATAACTGGATTTCACAAAAAGAGTTCGATCTGAGTT
-CTTTCAACAGGTACATAGACGAATTATATCTTAAAATGACGAGAAAAGTT
-TGCTCTATAAACGTTATCATTGCAGGTTATGAGAAAAACAAATAAAAATT
-TAATTTTAAAAAATCCGAAAATTCAGTTGTTATTTTCAAACAGTTCGTTA
-TGCATTTCCACCGAACGGTTTCCGATAATTTTTGTTTCTCCACTTTCGGT
-TCAGTCTACTTTATAATTGTTATCATTTTGAAATAGAAAAATCGACGAAA
-AACTAATAAAAATCGAGGGAAATCACTCTTCAACGGTGAAATCTCGGTGG
-ACGCAATGAAGCTGCAGCATTTCAAAAAAATTTTAGAAGCAATTTTGGTC
-ATTTCAGCTTCAAAAAGCTTTAAAACTTAAAAAAATTAAAATTCATTTCA
-AAAAATTTGAAATTAGTCATTTAAAATATAAAAATTAGAAAAATTCTAAT
-TTTCAGCGAATTTTCAAATTTATTTTTATTTCAGAAAAATTCAAATTTTG
-GCTTTCAAAAAAGCTTACAAAATATTAATTTTTAAAAAATCTAACTTTCC
-CAATTTTTCAGTACACTGGCCCCGCACTCCAGCCAATCTCCCTGACCACA
-ATCTTCAACAATTCCCCATCCGATCCATCTCTAAAGCTTCACGTTCTTCG
-TGCTCTGCTCTCCCTCATCCAACATCTCCGTGTAATCTACTCCAACCAAA
-ATGAGACCTATTCTATCGTTTTCAAGCCATTCCTCCGGATTTTGGAATCA
-ATTCAAGCCAAAAATCTTCCAGCCGAGGTCCAGGAAGAGCTGGAGACTCT
-GTGCGCCTCAATGAAGGCTGAAATTGGAGCCAAGTGCCGTCTGGTGCACC
-TGTCGCTGGTGAAAACCGAAAAGAGCATGCTGAAAATGCTGGAACCCCGT
-TTCGAGTGGGATTTCGATCCGGAACGCCCACATCACGGACCCAAAGACGA
-GAAGAAGAAGCTGACGAAGAATCTGAGGAACGAAAGACGCGGAGCCATCA
-AGGAGCTCAGAAAGGATACGGCATTCTTGGCCAGGAAGCAATTGTCGAGT
-GTCAAGACGAAGGATCGTGCGAGAATTGCGGCCACGAAACGTGTCATGGG
-CGGTCTTATGCAGCAGCAGGGTGAATGGAATAAGGAGAAGCGTACGGCGG
-ATGTTGAGAAGAAGAAGGACAAGAAATAATTTAAATTTTCCTATTTTTTG
-TTTGTTGAAAATGACTTTATTTGGCAAAAAAAACCCCTAAATTTCAGTTT
-TTCTCGATTTGTTGAAAAATAGTCAAAAAACTGATTTCTATGTTATTTTT
-GGTCAAAATTTGCCTTTTTCAAACATTTTTTTTGCCATTTTTCCTCCATT
-TTTTGTTATTTTTTTTTTTCGTTTTGTTATGAGATATGTTTCTGTTTTGT
-TGACATTTTTTATTATTGAAAATTAAACGAGTTTTCTGAATTTTTTTGTT
-CAATTTTTTTGAAATTTTCCGTTTCACATACGTTTGTCAATATCTCGATT
-AATTTTTGAAGTTTTCCAATTGACTCGCGCATTTTCTAAAAAGTTTTTAA
-ACTTTACATTGAAAATACCCCTCTAACTCGAATATCTGATTTTATTGGAA
-TTTTGAGTTTTTTTAGGTTAAAAAATTCTTGTGCTAAAATCATCCATTAT
-AGTTCGTAAGTCAGCAAATTTTGGCTCAAACTTAGAGCGATTTCCAATTT
-ATGGAGTTTTTTGTTCAGAATTCTCGAAATTTTCTCATTTCTGGAAATTT
-TGAGTCTACGAGTCACACAGTTGTTCCGTAATTAGCTTCACTTACATCTC
-CTCAACTCTGCAAACTCTCAAACTTTCGGGAAAGGGTCTCGCCACGAAAT
-CACGGGTGGGCGGCAATTGCAGTTCGGCAAATTGCCGGTTTGCCGGAAAT
-TTTCAATCCCGGCAAAATTCCGTTTGCCGGAAGTTTTTAAACGGGATCTT
-TTATAAGACGGAAACACTTAAAACTGCCATTTTTAATTTTTTGCCCGTTT
-TCTCTAAATATTTTCATAGAATTTACTGACTTTTTAGGATAGATGTTTTC
-ATGGGATGTGCACATGTTGTTCCGGCAAATCGGTAATTGCCGAAAATTTG
-AAAAACGACAATTTGCCAAAAAAATCGTTTGCCGTTCACCCCTGTATTGT
-ACCATTTTTGGCGAAAATGCGCGTAAATTAATATGCTTGCGTGTGTAATA
-TTTCGTTCATATATTCTAAATATACGCACCTTTTGAAATATTCATAATAT
-ATGCATTTACGTACGTTCGAGAATATTTTGGGAATACACATTTATCATCA
-TTCCCACCCGTTGCCATAGTATCCTCATCCCCGCCCCGCCCCGCCCCTTT
-CTCTCATTTCCTCTTCCAAATCCTTAATGGCTCATCCGGTCATTGGAGAG
-ATATGGCAGATGTGGCGGTTTTGACGAATGTTCTGGAGAACTCGAATTTT
-ATATAACTATTAGACAATTTCGATATTAAAAACATTTATATGTAAAATTT
-TCAATTTTTTGAATTTGCTCGCCGAATTTTGACTTTCTGACAATTGTGTG
-TCGATTTACGAGGGTTATGTATATTTACGATATGTTTTTAATCATTATCG
-AATGCTGATTTCCGTTTTTCTACGAGTTGTCTTCATTTTCGTTGGTTTTT
-TTTTGTTTTTTTTTTTTGAAAGTGTATTTTTTAAGGTCAAAAAACTAGAA
-AAATATTCAGTTTTCAGTCAGGAAAACCATTTATTTGGTTTTTTCAATAT
-TAAAAAAATTATTGGGAAAAATGAATGAAACTCGTCGAAAAACGAAAATC
-ATCATTCGATAAAGATTAAATATTTCGTAAATCGACACACATGTCTCCGC
-CGCGAAAAATCGAAATTTCATAGAGGCATAAAAATTCACAATATTTTAGT
-TTTTTTATTTTTTATTTTAATCCAAATCCCTATTCATGCTTAGATTTTTA
-GGTGTTTTTCTGTAAAAAATCAAAAAATTGTATATTACTCATAAATTTTT
-CCAATTTTCTCAAACCTTGGATCTCGCCACGACATTATTAAAAAATTCCC
-GTTTTCTGCAGAAATGACGACAACGGAAGAAGCTCCCAAATCGCCGCTTT
-TCGAGGCAATCGACAAAAATGACACTGAAGCAGCGCTGGCACTGCTGAAA
-ACGAAGGAACAAGCCGCTCAACGGGATCCCAGTGGAATGAGTGTGCTGGC
-AGCTGCCGCGTATAGGTATGCACCTTTAAAGCGGCGACGGTTACTGTATC
-CTCGCAGATTGTTTAAAGGTACATACCGTAATCCGTTGAATTTCAGAGGA
-AATCTTACGTTGGTCGAGAAAGCGATTGAGCTGAAATGTGATGTGAATGA
-TAAAACCGATGGAACTCTGTACACTCCACTCATGTTTGCCGCCTTATCAG
-GTAGGGCAAAAATTTTTTAAAAAAATTTTTTGCGTCAAATTTGATGCAAA
-TTCTGGTTTTTTACCGTTGAAAAGTAAAAAAAAATTCCGAAAAAATCGAT
-TTTTATGCTAACAACAAACTTTTAAGTGAAAAATCGTGGAAAATTAGACC
-CAAATCACGTATTTTTGATCTGAAATTCAATTTAGCGAAAAGTCATCGAA
-ATTTTATGGTTTTCGCGGTGAGACCCAATATTCGCAATTTTTTTTTGCAC
-CAAATACAACACATTTGACGCGCAAATTCAAATTTTTGAAACTTTTTTCC
-GTTTTTACAATATTTTTAGGCTGAACCCCAATATTTGAAAAAAAAAAAAC
-CAATACACTATATTTTACGCGCAAATGTTAAATTTTTATTTAAAATCCTC
-GTAAAGTTCTATTTTCTTTTTTTGATCGTTTTCAAGCTCAAAAATTCAAA
-TTTCAATTCGAAATATTACCGGAACACAAAATTCTGAAAATGCGTACTGG
-TCAACATATTTGACGCGCAAAATATCTCGTAGCGAAAACTACAGTAATTC
-ATTAAATGACTACGGTAACGCTTGTGTCGATTTACGGGCTCGTTATTAAA
-AATCATTAATTTCAAAAAAATCGAGCCCGTAAATCACCACAAGCGCTACC
-GTAGTCATTTAATGAATTACTGTAGTTTTCGCTACGAGATATTTTGCGCG
-TCAAATATGCTCAATACACATTCTCAGAATTTTGCGTTAACGTATTACTA
-CTTTCTTAGTTTTTCCAAAAAAAAAATTCGAATACACCATATTTGACGCG
-CAAACTTTTTTTTTCAAAGCAAAATTGTCAAACGTTTGCAGGAAAACAGG
-ACGTATGCCGCCTGCTAATGGACTCCGGAGCCCGTATGTATTTGGTGAAT
-GGAATCGGAAAAACCGCCTCTGAACTGGCGGCATTTGTGGGTCATCACGA
-GTGTGTGGCAATTATCAATAATCATATAACAATTGATGTGATCGAAGATC
-TTTTGCGGCCAAAAGTGAATGGAAAATATGAAGGAGCTGAGGAATATCCG
-GATGAGCTGGCTGTATTTATTCATTCATTGTGTGGATCACATGAGATTCA
-TCCTGTTAAGATTATTTTTCGATTCAGTAAATATCCCGATTCGTTGAAGT
-ATAAGAAAAAGGTACATAGCTGTGTAGTTTGGAAAAAAAACGAAAAATCT
-GAAAATTTGAGAAATTTCCTTAAGCTTTTTCAAGATGCGCATTTTTGTTC
-ATTCTTATTTTCAAAAAAATCCAAAAAGTTTTTTAAAAAATTTAATAAAG
-CATTCTTTTTAATTTCAAAACAAAAAAGTTATACCAAATAAAAACTTTTA
-GTAATCAAAATTTTTCACTTTTTCTCGGTTTTTCTCATCGTTTTTCAAAT
-TTGAGATCTCTTCCTGAATTTTGCCTAAAAATTGATTTTTTCAAAATATT
-TTCAGAAATGATTCTTTCTGTGAAAAAATGTTTGAAAATGCGAAAATATT
-CGAAACTAAAAAAACTTTTATTAAAATAAATTTTTGAAATTTTTCAGAAT
-TTAAAAATTGAATCGAATTAGGTATCAGTAGTTTTCAGATCGATTTTTTC
-GAATTTCTGAATTTGTTAAAAACTAGAAATTAAAAAAAAAACTTTTGATG
-TTAAATGTTTTTCGAGATTAAAATAAACCGAAAACCCAAAAAAAATGTAA
-AAATTGTGTTCTTTTTGTTATAATAAACCAGAATTTTCTCGAAATTTTCA
-GAAGGTTCTAGAATATTTCAGAATTTTCTCGAAATTTCCAAAAGGTTCTA
-GAACATTTCAGAATTTTCTCGAAATTTTCAGAAGGTTCTAGAACATTCCA
-GAATTTTCTCGAAATTTTCAGAAGGTTCTAGAATAGTTCAGAATTTTCTC
-GAAATTTCCAAAAGGTTCTAGAACATTACATAATTTTCTCGAAATTTCCA
-GAAGGTTCTAGAACATTCCAGAATTTTCTCGAAATTTTCAGAAGGTTCTA
-GAATATTTCAGAATTTTCTCGAAATTTCCAAAAGGTTCTAGAACATTTCA
-GAATTTTCTCGAAATTTTCAGAAGGTTCTAGAATATTTCAGAATTTTCTC
-GAAATTTCCAAAAGGTTCTAGAACATTACAGAATTTTCTCGAAATTTCCA
-AAAGGTTCTAGAACATTACAGAATTTTCTCGAAATTTTCAGAAGGTTCTA
-GAATATTTCAGAATTTTCTCGAAATTTCCAAAAGGTTCTAGAACAATCCA
-GAATAATGTTTTCAAAAAATTCAAATTTGAATTCCCGCCAAAATGTTTTC
-AAAAAATTAAAATTCGAATTTCCCGCCAAAATATGTACAGTACTCCTACA
-GTACCTCTACAGTACTACTACAGTACCCCGACCATATCCCACTACTAACC
-CCAAACCTATATCTCTTCAAAAGACTAAAACACAATTTTTCCTAAACTAC
-AGTAATCCTACCGTACTCCTACAGTACTACTACAGTACCCCCACCATATC
-CCACTACTAACCCCAAACCTATATCTCTTCAAAAGACTAAAACACAATTT
-TTCCTAAACTACAGTAATCCTACCGTACTCCTACAGTACTCCTACAGTAC
-TACTACAGTACCCCGACCATATCCCACTACTAAGCCCAAACTAATATCCC
-TCCATCAGCCGAAAACGCCTTGCCTTTGTAAACTATGACGTCACTACTTA
-ACAAACGGACACTATTTTTTTATATTTTTTTTTCAAAGCAAAAACCACCC
-ATTTTCCAGATCCTCTACGTCATCGATCGTGTCTTCGAGAAACAGCTTCG
-ATGTAAGGAAAGCAATGAAATAATGTCGCTCAAGCTTTGGCTAATTCTAT
-TTTCAATGCGTGAAACCTCGAAATTCGTGGAGTCGAACAAGGAAAAGTCG
-CCAGAAGAAGCGTCTCTACAGTACGCAAAACTGATTTCCACGTGGCAAGA
-GGGCGATGAAACTAGGCGAGCACTTGACGTGATGCTGAGAAATGCGGTTG
-CTTCGTTCCCGTATAAACATTCATTACTTCATGATACTCTACAAAAAGCA
-CTGCAAAAAAGTCAAATTGGTGAACGACCAAGTGCCTATGAATACATTGT
-TCAGGCACTTTTCGGACAACGAATCGCTGCGGTCTGCCAGTTTTGCTCGG
-TTTGCGGACATCCTGGAGCCAAGAAACGGTGCACACAGTGCAAAGTATGG
-AGTTTTTAGGGTTAAAAATAATTATTTAATAATTTAATAAAGCTCGAATT
-TGGGAAATAATCAATTCCAAATTTTAAAAATATGGAAAAAATTTTATTCC
-GTTACATTTTATGAATTTTCCCACAAACTCGGCATTTGGCTCTAGCTTCT
-TGCCCAAGTTTAGCCCAAAAAATATTAACTTGAAGCTGTCTAAACTTGGG
-CAAAAGTTAGACAAAACTTTGGCAAAACTTGGATTCAAGCTTTACCAAGG
-TCTAACCCAAGTTTCACCCAACTCTTGCCAAACTTTGGCCCAAACTTTTC
-TTATTTCGTTTCAAATTTGGGCCAAAGTTTGGCAAGAGTTGGGTGAAACT
-TGGGTTAGACTTTGGTAAAGCTTGAATCCAAGTTTTGCCAAAGTCTTGCC
-TAACTTTTGCCCAAGTTTAGACAGCTTCTGATCCAAGTTAACATTTTTTG
-GGCTAAACTTGGGCAAGAAGCAAGAGCCAAATGCCGAGAAACTCGAATAA
-AAATTGAAAGTTTTCAAAATTTCAGTTCGTTTTTAATTTACAAAATTTGG
-CAGCTCTAACAATTCTTTAAAGATTCTTTAAATTAAAAAAAAGAATTATT
-AAAACTTTTTAAAAAAATTCATTCTGTAGAAAATTCCCGTAAAATACTCT
-TTGAAAATCCGGGAAAAAACTTCAAAAAACAAAAATAAATTCTAGACATT
-CTGTAAATATCGAAAAAAGAACATTTTGTCTGTAAATGTATTAGTCAAAA
-TTAATTTCTGATACTTTTTCCAATTTTTCAAAATTTTAAGTGTCGAGGTT
-CAATTTTTTTGAATTTCCTGTTTTTCCTTTATTAAAAAAAGTTTTCTATA
-ATATGCTGTATTTGAAAATTAAAAACTATATCTGAAAATATCGAGGCACA
-ACGTTTTCAAGATCTGGTGAAATTCCGGATCTACGTTTTCCGGATCTACC
-ATTTCCGGATCTACGTTTTCCGGATCTGGCACCGTGCCAACGCACAAAAC
-GCTTTTTTGTTCACTCGACGCACGTTGTTTTTTGAAAATTTCTTCTAGAA
-GAAACGCTTAACAACACGCGACGCGTAACAACGGAGCATCGTTATCACGT
-TTTTCTCCGAGAAAAATAGCGTTTTAAGAGTTGGCACGGTGCCAGATCCG
-GAAATGGTAGATCCGGAAAACGGAGATCCGGAATTCCGCCAGATCTTGAA
-AATGTGGTGCCTCAAAATATCGATTAAAGAATTTTTTCTGAAAAATATCC
-AATTTTTCAACAACAGAATAGCTAAAAAGTGAAAAAAAACTCAATTCTCA
-TTATAAATTGCAAACAATTTCCAAATTTTGATAAAATGGAAAAGAGTTTA
-AAAATTTCAGGCAACACATTTTTTAACTCTAGTAAACGTTTTTTAAATTC
-CAACAATTTTTACAGCTCGCCTACTGTTCCCAAGAATGCCAAAAATTCGA
-CTGGCCAATTCACAAAAAAGTGTGCTCATTTCTGAAAACGCGACAAGAAG
-TGTCGCCCACCGACGAGACCGCCATGTCGCTGGACGATATTCAGGCTCAA
-ATCGCCAAAATCGACGTGTAGAAGTGCCGATATTTCGATCTCAATATACT
-TTTTTTCTGGAATTTATTTATTTTTAATGTATATTTCGGCTTCATCTCAT
-TGCACGAACTTTTAATTTCATTTTCATAAATTCATTTTTGAAGTCATTCC
-TTGAACAAAAATTCACTAAAACATGCATTAAGAAATATGGAATCCAAAAA
-TTAATCTAAAAACCTTTTCAAAAAACCACTTCGTCAAAAACTGATGATGG
-AAAACTCGTTGAAAAACGGAAAGAGTATCCAATAAAGATTAAAAATTTCG
-ACATTTCGTAAATCGACACAAATCTCGTAAATCGACAAAAATGAAAAAAT
-CAGGAACCCAAGAAATTCAATATTCTCATTTGTAAAGACAACTGGTAAAA
-CATTTTCAAATCAAAAAATTATTTTTTTTGCCCTCAAAATTGATCTCCGA
-ATACTATAAAAAAGAAAACTATAAAAAGTGGCGAAAATTCGAAATTTTTT
-AACCCCTCTAAAATGGTTCATTTTAGTTGTCTAATGATACAACAAAGTAG
-ACATAGTTCTACAATATCTGATAAATACTTGAAAAGTCTAAAAACAAAAG
-TTTTTTCGTTTTTTTAACGGATTTTTAAAATCCAGAAGAACGAAAAAAAA
-TTTTTTTAAGAGAATAGAGTAAACTAATCATGTTCGAGCAAAAAAATCCG
-ACTTAGAATATGAACGGACCCAAGTGTATCATAATTATTTTAATTTCTGT
-GTATCAGAATTATTTTAGTTTCCTTAGTGTGATTCCCAAACTGCTTAAAT
-TCTAGGAAATATTTCTTTACTGGAACACTCTTAGCCACTGTACGCTGCCG
-AACGAATAATAAGAGAATACAGAACACCAATTATGCCCGAGAAAAAGATC
-CTACTCAGAATATAAACATAGTCAAATTTATCGGATGTATAAAGATTCCC
-GAAGACACTTTCCAATTACCCAAATTGTTCATATTCTAAATCAAATTCTC
-TTACTAGAACGCTCTTGGCCAATGTACGCAGCCGAACGTATCATAAGTGA
-ATACAGAACACCAATTATGCCCGAGAAAAAGATCCTACTCAGAATATAAA
-CATAGTCAAATTTATCGGATGTATAAAGATTCCCGAAGACACTTTCCAAT
-TACCCAAATTGTTCATATTCTAAATGAAATTCTTTTACTAGAACACTCTT
-GGCCAATGTACGCAGCCGAACGTATCATAAGTGAATACAGAACACCAATT
-ATGCCCGAGAAAAAGATCCTACTCAGAATATAAACATAGTTAAATTTATT
-GGATGTATAAAGATTCCCGAAGACACTTTCCAATTACCCAAATTGTTCAT
-ATTCTAAATGAAATTCTCTTACTAGAACACTCTTGGCCAATGTACGCAGC
-CGAACGTATCATAAGTGAATACAGAACACCAATTATGCCCGAGAAAAAGA
-TCCTACTCAGAATATAAACATAGTCGAATTTATCGGATGTATAAAGATTC
-CCGAAGACACTTTCCAATTACCCAAATTGTTCATATTCTAAATGAAATTC
-TCTTACTAGAACACTCTTGGCCAATGTACGCAGCCGAACGTATCATAAGT
-GAATACAGAACACCAATTATGCCCGAGAAAAAGATCCTACTCAGAATATA
-AACATAGTTAAATTTATTGGATGTATAAAGATTCCCGAAGACACTTTCCA
-ATTACCCAAATTGTTCATATTCTAAATGAAATTCTCTTACTAGAACACTC
-TTGGCCAATGTACGCAGCCGAACGTATCATAAGTGAATACAGAACACCAA
-TTATGCCCGAGAAAAAGATCCTACTCAGAATATAAACATAGTCGAATTTA
-TCGGATGTATAAAGATTCCCGAAGACACTTTCCAATTACCCAAATTGTTC
-ATATTCTAAATGAAATTCTCTTACTAGAACACTCTTGGCCAATGTACGCA
-GCCGAACGTATCATAAGTGAATACAGAACACCAATTATGCCCGAGAAAAA
-GATCCTACTCAGAATATAAACATATTCGAATTTAACGGATGTATAAAGAT
-TCCCGAAGACACTTTCCAATTACCCAAATTGTTCATATTCTAAATGAAAT
-TCTCTTACTAGAACACTCTTGGCCAATGTACGCAGCCGAACGTATCATAA
-GTGAATACAGAACACCAATTATGCCCGGGAAAAAGATCCTACTCAGAATA
-TAAACATATTCGAATTTATCGGATGTATAAAGATTCCCGAAGACACTTTC
-CAATTACCCAAATTGTTCATATTCTAAATGAAATTCTCTTACTAGAACAC
-TCTTGGCCAATGTACGCAGCCGAACGTATCATAAGTGAATACAGAACACC
-AATTATGCCCGAGAAAAAGATCCTACTCAGAATATAAACATAGTCAAATT
-TATCGGATGTATAAAGATTCCCGAAGACACTTTCCAATTACCCAAATTGT
-TCATATTCTAAATGAAATTCTCTTACTAGAACACTCTTGGCCAATGTACG
-CAGCCTAACGTATCATAAGTGAATACAGAACACCAATTATGCCCGAGAAA
-AAGATCCAACTCAGAATAAAAACATATTCGAATTTACCGGATGTATAAAG
-ATTCCCGAAGACACTTTCCAATTACCCAAATTGTTCATATTCTGAATGAA
-ATTCTCTTACTAGAACACTCTTGGCCAATGTACGCAGCCGAACGTATCAT
-AAGTGAATACAGAACACCAATTATGCCCGAGAAAAAGATCCTACTCAGAA
-TATAAACATAGTCGAATTTATCGAATGTATAAAGATTCCCGAAGACACTT
-TCCAATTACCCAAATTGTTCATATTCTAAATGAAATTCTCTTACTAGAAC
-ACTCTTGGCCAATGTACGCAGCCGAACGTATCATAAGTGAATACAGAACA
-CCAATTATGCCCGAGAAAAAGATCCTACTCAGAATATAAACATATTCGAA
-TTTAACGGATGTATAAAGATTCCCGAAGACACTTTCCAATTACCCAAATT
-GTTCATATTCTAAATGAAATTCTCTTACTAGAACACTCTTGGCCAATGTA
-CGCAGCCGAACGTATCATAAGTGAATACAGAACACCAATTATGCCCGGGA
-AAAAGATCCTACTCAGAATATAAACATATTCGAATTTATCGGATGTATAA
-AGATTCCCGAAGACACTTTCCAATTACCCAAATTGTTCATATTCTAAATG
-AAATTCTCTTACTAGAACACTCTTGGCCAATGTACGCAGCCGAACGTATC
-ATAAGTGAATACAGAACACCAATTATGCCCGAGAAAAAGATCCAACTCAG
-AATATAAACATATTCGAATTTATCGGATGTATAAAGATTCCCGAAGACAC
-TTTCCAATTACCCAAATTGTTCATATTCTAAATGAAATTCTCTTACTAGA
-ACACTCTTGGCCAATGTACGCAGCCGAACGTATCATAAGTGAATACAGAA
-CACCAATCATGATCGAGCAAAAAGATCCGATTCAGAATATAAACATATTC
-GAATTTATCGGATGTATAAAGATTCCCTATTGGGAAGTGGAGCAATCCAC
-GACTGGTTTATCGGCCACAGTCCCCGGCTAGGACATGGCTTATATTATTG
-GGCCAAGGGGAGCACCACCAGGCAGTGTACCTGACTCCCAGATCAGCAGT
-ACATAGCACTTGAAGAATGGATCGTCCTTTAATCTTTTAATCTTTTAAAA
-AGAATCGAAGGAACTCTCATCGGGTCATGTGGTTGTGGGGACAAAGAGGG
-AGGCTTACATCAATACCAAATACCTGTGGTAGATCACAATACCTGTGGTA
-GATCACACCCTATCCACAAAGAAAATCTGTGGACGTCCTCAAAGGAGGCC
-GCCCGCGCCCTTGAGCTGGCCAACAAACCCTTCGAGCTGGGTGGAGGAAT
-ACTCCAGCCGAGCGACTGAAAACGGCGGTAACGCCACGTTGTCGCACAAT
-AACAACAAAAAAGCCCGCGGGCCCCAAGAAGCTCAAGAAGCCCACGGCTT
-AATTTTCAAATCAATTACCTTACTATGAATCTCCTTTTTGCTCTACGAGT
-CGTCGTTGATGTCATCCTTCCGTCCAACCTCCGTCAAACAGTCCATCTGA
-CCATCCGTCCAACCAACATGTGGTGGAGTGTCCAACGCATCTGAAATTGA
-AAAATATTTATATCTGATTTTTTAAATGGAACCATTTACAAAAAACATAA
-ACGGAAAACGCTTAGCAAAAAAACAAACAATTAGTATTTAGAAAAACGGA
-GACAAATGCTCTCGCGATCTTATTTATATTAATTTTCCAGTCGATTGCAA
-GGCATCTGCTCCCACGGGTTTATATAAAATTGTGTAACTAATTTTAAACT
-TCTCTTGAAACCTTTCAACCAGTACTTTTCAAGAGTTTTTGGTAATTTTT
-CGATTTTTCAGAAATTTCAAAAAAACGGCGAAATTCCACTCAGAACCCTC
-ATTAATATTTCACTAGTCCAGCACACTAACCCAAAAAATTATTTTTTTTT
-TGAACTACAGTAATCCTACAAAATTGCTACAGTACTATTACGGGACCATA
-ACAAAATTTTGATAATGCGTATTGCGCAACATATATGACGCGCAGAATAT
-CTTGTAACGAAAACTACAGTAATAATTTGAATGACTACTGTAGCGTTTGT
-GTCGATTTACGGGCTCAATTTTCGTAATGTTACACGACACATTTTTTTGA
-CAAATGCAAAAAAGTGTGCGCCTTCAAATTAAAAAAAAATTTGATTTTTG
-TTGCCGGCTTTTAACACATCGAAAAAATAAAAGAAACGAAAGTTTGTAAT
-TACAGTACTCCTCTTAAACGCGAACACCTTTTCGCTTTTCAGAAAAACTT
-GCGCCGTTTCGAAACCGGGTACTATACTTTTATATTAAAATCGATTAAAA
-ATCGCGAAATTTTGCGGTGGAGCATATGTCAAATTGCAACTCGAAAAGAA
-AAAATCTGAAAATGCATGCTGTGAAAAAAAAAGCAGCAGTACTCCAAGTC
-ACCCATTGGAAAGAATGACTGAAAATTGAAAACAATTCTTCACTTTGAGC
-GAAAAAATGCCGCGTTGAATGAGAGAGGGACGAATCGAAATTTAAAAGGA
-GAAGATCAAAAAAAAATGTTTGTGGTAGGTCTGGAATCTTGCAAATTATC
-GTTTTAAAATCAATTTTTAACACTTTTATATCATAAAAATAGTTTTTCAT
-CAATCAATCGATTAAAATACCAACTCTCGAAAATTAACAGCTTTAACAGC
-GCCGTCTACTGATTTGAAATTGCAGTCGCTGCCGCTCAATTAAATGTTTT
-GCGCGTCAATTAAAATGCCTTGTACGCAGATGCGCGTCTCCTAAAAAATA
-AAAAGTTGTCCAATTTTATTGAAAACGGGTATTTAATTCATGTAAATATG
-CTGAATTTAGAAAATCTAGGTTTAACCTATCAAAAACTATAAAAAAGTGG
-CAAAAATGGGCAATTTATGGCAAAAATTCACAATTTTGAAACTCCTCTAA
-AATGGTTCATTTTATTGGTAGAAGAGGACTAAAAATTGATATCCGAACCC
-TAAAAAAATTGTCCTTTTTCAATATTCAGAAGAAAATTATGAAGTTATTT
-ACTTCCATTTTTCGATTGTACGGTAAATCAAAACTAAAGGTGGGCACGGT
-ATCTGATAAAGTTACGATCGTTCCAGGATCACGAAAATCGAATAATTACA
-CAGCCAGAGTTACATGAAACAGTGTTTGGGAAATTTAAAAATCAGTACAA
-GAAAACCTCAAAAAAAAAACAAAATTACAGGAAAAAACGGAAATTTTCAG
-TAAAAAATTATAGGGTATGTAAAATCGATAAAATATTTAAAATTCAATCG
-TATTCTCCGTTTTCGGCGTTCGGATCGTTCACTGGAAGTACGGGATGTCG
-AAGTTTGAAATTGAAGAATTCGCACCAACCGGCTGGAAGTAGATCGTGGG
-AGCTGCAAAAAATGTTCGTGGCCGCGAAAAAAATCGGTGGCCGATTTTTG
-TTTTTTCGCGGCCACGTTGTGACTAGACGGCGAAATAAAAATTTGTTTTT
-TGGTTTTTAGTGTTCAAAACTGTTGTTCTTGTTGAAAAACAATTTTTTCG
-AATTTTTTTTGTTTTTTCAACTAATTTTTTTTTCTGAAAATGCTTTTAGA
-ACAGTTCATTTTGTTTTTTTTTCAATTTTTTTCAGACACCCCTTACTCCA
-TATCATAAAGCTCGGAAAATTCGGAATCCCATCCCTGAAACTCGATGAGC
-ACCGTTCTACCGTGTACTTCTTCGACGGAGGCCGGTGATATCCAGTAGGT
-CTCGTTTTGGCCGACGGCTTCAAGGACACGACCGAACTGAAAAATATTGT
-TTTTTTTTTCAAAACCATTTTTTTTAGGAAAAAATTTTTATTGAAACGTT
-TTTTTTTTAATTTTAAAATTCCAAAAAAACGCAAAAGTGCAAAAAAACTT
-GAAAAAAATGTTCTCAATATTTTTTCCGACTCACAATCAAAGAAAATTTG
-AATCGAAAAAAATTAATTGTTTTCTTTTAAAATTTAAGGAAATTATTTTT
-CTAATTATTTCTTCCAAAAAAAAGTTTAAAAATAATAATTTTTCAAGTGT
-TTTTCAAGAGAAAATTAAAAAATTTCAAATTTCAAATTTTAATATACTTT
-TTATTTTAAAAACTTGTATAAATCTCCGAATTATATGGATTTTTTTGAAA
-AATAAAAAATTTTTTTATTGGAAAAAGAAATCTGATTTTTATAGTTTTTT
-TTTTTAATTTGAAAAATACGAATTCTATCACGGCAACTCAAAATTCTGAG
-AATGCGTACTGCCCAATATATTTGACGCGCAAAATATCTCGTAGCGAAAC
-TACAGTAATTCTTTAGATGACTACTGTAGCGCTTGTGTCGATTTACGGGT
-TCAGTTATTTAAATGACTTTATTTTTCGTATTATTTTCTTCATTTCAATT
-AATTTTAAAAATTGAGCCCATAAATCGACGGTACCGTAGTCATTTCAGGA
-ATTACTGTAGTTTTCGCTACGAGATACTTTGCGCGTCAAATATGTTGTGT
-AGTACGCATTTTCAGAATTTTGAGCTGCCGTGATAGAATTCGTATTTTTC
-AAATTAAAAAAAAACTATAAAAATCAGATTTATTTTTCCAATAAAATTCG
-TCTAATTTATAAAAAAAAATAAAAATAAAAATTGAACAACGCTGAAAAAT
-CCCAGATTTTTTTTTCTTATTTTTTGAAAAAAAAAACTTTTTTTGGAATT
-TTAAATTACATAATTTTTTTGGTTCAATCAATTTTTTGGTTAAAAAGCGT
-TTTTTTTTCCTTCAAAAAAGCACCTCAAACATGTGCCTTCTCTCCTTGCT
-CGGCAACGGCCTAAGCATCTCATCAGGAATTTTTTCCGCCTGCTTCTCCT
-TCAAATACCCTTCCCACTTGAATTTCCCGGGCTCAGTGCCTGCAAGCCGA
-TCCAGCTTGATTCCGAACTTCTCAGCATAGCCGACAGGATGCATAAAATG
-ATTATCAATATGAATTGGGAAGGATTCATCGTCCGATTCTGTCTCATCAG
-GTGAAATAATTAAAAATCCAGGCGTTTTGCATATTTTTCGAATTGTTGCG
-ACGCAAAATGACTGGCGTAGGTCGCTGAGTGGATCCAAAAGTTCAAATTT
-TTGGCCGACTTTTAATAAATTTAATTTTTCAGCTGAAATGTCAGGTTTCC
-CAGCAAAAAGTTGCTCGAAAGTGACGTCATCTTTATGATAACTTCCAGAA
-CCTTCTGCGATCCGTCTGGAATGTTCCAAATAACCTTCCGTAGCCTTAGT
-CCGTAATCCATTAATCATTGCAAATCCGACTGGAAACAGGAAGAAGCTCG
-ACTCATCCACCCAAAACTCGACGTTTTCATGCTGAACCTGCCGATCTTTG
-GCCTCTACGGAAGGAAGATCTTCGGGATAATCCTGAGCGGTGACCATGAC
-CATCAGACGGCGGCCAAGGATCCTGAGGATCCGTGCGACACGGATTTCTG
-TTGGCTCCAAGTAGTTGAGTAGCTCGACGCGTTGATTCAGCCGGAAACGA
-GATGGGCGGTGGGCAAGGTGGCGGAGTTGGTCGAAGATTTTTGGCTCAGA
-GATTCGATTTTCGTGCAGCTCGGCTTGAAATTCCTGCAGGAAAATTTTTT
-TAGGAAATGGGAAAATCAGAAGGGTTTTTTGGAGTTTTTTTTCAGTATTA
-TTTTTTTTGTTGTTTTTTTGAGGCTTTGTTAAAGTTTTTAGGTGAATTTT
-TTTTGTTGATATTTTTGGTTTGTTTAAGAATAAATCATTTTTTGAAAAAA
-ATTCGTTTTTATATTTTCGGTTTTTTGCTGGTTTAGTTAAAAGTTTTTTT
-TTCGGATTTTCAGGTTTTTTGACAAAAATTGATTTTTTTTTTGGTGTATT
-TCTTAGGTTTTCGGGTTTTTTTTTTGGTTTTTGACGAAAAATTTATTTTA
-AAAAAAACGGACTTTTTTGCAAAAAATATGGGGTTTCTTAAAAAAAAAAA
-TTTCAATTTTTTTTGTTGGATAAAATTAAAGTTTCTTTTATGGTTGATTT
-TTCGCCTTTTTTCACATTCTCCACCAGAAAAAACATGAAAAAAACCAGAA
-ATGAGTAGTTTTGAGCAATTTTCAGGCAGTTTTTCCGCTCAGAAAATAAT
-TTTGGCCGGATTTTCATGGTTTCTCACATCCAGAATCTCCTCTGTTGGCC
-GTGGTACGGGCGGTGCAGGCGTAGATCCACGTCGCCAAAATTTCGGGCAT
-TGCATCGGTTTCAGCAAGCTCAGTGGCCTGTATTGAAGCCATTTCATCGC
-TGGATCCTGCTTGAGACCGCTGAAATTTCGCGTTTTTTTTTGGAAATTTT
-GTTGAAAAATAACCTTCCAATATCGAAAATATCCTCTGAAAGCATATGAA
-ACCAGCAGGGTCTTCTATTAAGTTCCCCCACAAATTTAATTGCCACGTAG
-AAGCCGCAGACAGCAGTCACCTCGCCGAACCAGCGGATTTCTGGAGATTT
-AGTGGTTATAGAAGGATCCAGAGACGGTCGGACGACTACTTCTAGCTGAA
-AACATTAAGATTATGGCTTTAAAGTTTTTTAAAAGAAAAACCAACTCGAA
-ATCCAGGTTTTAGGTGCTGATTTAGCTTTTCCAGCGGCAAACAACCCTCC
-AGCGCCTCGACAGGTAAAAATTGAGTATTTCCATCATAATTACATCGGAG
-TTCATCTGACCATGTGAATGTTCCTTCAATTTGTGGCTTTGGAATCCGCT
-GGGCGATTTTCTCAACTGGATTTCTTCGACGATAGAATAGCCGTTCTTCG
-GTGAAATATCGGTATTCTGCTTCTTCAAGTTTGTAATTATATTGACGCTG
-AAAGTAATAAATTATGTTTTTCGATAAAAATGCTTTTAAAATTACCTTTT
-TATTCGAAAAATTCATTGATTTTAATTAAAAATCTATTTAAATTGTTTAA
-ATTAAAAAGTTCCAAGCTTCTGTAGTTATCGCGTCGAGACCCAACACACT
-AATTACCACATGCGCCTTTATATAAATTTTAAGAAAATCAACATTTTAAA
-AGATTTTTACAGTTTTTTTGTCGTTAAATTTTTCGAAAAAATGATTTAAA
-CTCACAGTAAACTTGTTTGAAACTTGAATATTAAAATTTCACAGTCAATG
-GGTTAAATTTCAAGACTTTCCCACTGATGATACGGTAGGCGCGAAGTACG
-GTAGTTTGTTTTGTTTTTTTTTATTTTGCCGCCGAGTGATTCAAATTTGA
-ATTTATATCATCCGATTTTTTGATTTTTTCCTCAATATTTCTCGATTTTT
-CAGCTTTCAGTGTGATTTTCCAAGAGCCGTAGCTCGACCAGACGACGGAG
-AGCCTGAGGCTGGTCGCCAGAAGCACTATGAAGTGTGGGTTTTTTTTAAA
-GCATAATTTGCATTAATCTTCTAATATTTTAGCCACCCCACACCGTCCAC
-GAACAAACTCCGAATCGAAGCTCGGGGCTCGCGAGCAGCTTCTCCGGGAC
-TCTATACGAGTGGGTTTAAGTTCTTAATTTCAAATTTCACTCATTTAAAA
-ATTTTATTTTTTAGCTTCAAGTAGCTTCGGAGCCGTACGTCCACATGACA
-AAGGAATCCACGTGGGACGAGGCGAAAAAACTGGCGATCAGTCTTGAAAA
-GAAGCCGGACATTGTCCGTAAAGCGATATACAATCGTCGTCGCTTCGTCA
-ATGAAAAGATAAAAAGTGCGCTGGTCAAGCGCGAAATCATCGACCCAAGA
-AGCCCGGCAATCCATGAAATAGCAGTGGCGGCGGAGGTATTTTAAAAGAA
-AATCAGACAAATTTAATATCTAATTATTCCCCATTTTCTTGCAGACAATC
-GCCATAAACGTTGTGCACTTCTTGGAGACTCATCACGCAAAAATACTCGC
-TGAAATCAAAGCGGCCGCCGCTGGAGCCGGCGCCCAGCTCCGAACTGCAT
-GAATTAATTCAAATTAATATTTTTAAACTCATTTTTCACACAAATAATCA
-TTCATGTGTCCATTTTTCACTCTCGAAACCCATATACCCTCACTCTAAAT
-ATCAATATAATGCACATTTCTCATAGTTTTAATCTGCCCTTACCAATTAA
-ATCTTACCAATTTTCCGCCATGATCCCTTTTTCCATTTTGAATAAAATTC
-GACGACGATTTTTCCATTAAAACAAGAAATATATAAATAGATTCAAAAGT
-GGCGCTTGTGTCGCTCAGCGGTCTCCTCCACTTGCACACTATCTCACCGC
-GGCCTTCCAATTACTCGTCCATTTTCCAGCTGTAAAAAGTTTATAAAAAC
-TGAAATAAATGCAATTTTCAGCAGAAAATCGCTGAAAATGCGGCAAATCG
-TCGAGCTAAAGTCACTTTTGACTTCGGAGCCAATTAAAGCCATCGAGCTC
-TTCGATAGGCTCGTTGGACAAGGTTTGAGCCGAAAATCTAAACTTTTAAG
-CTGAGATTTCTTTTAAAAATCCCTTCCAGATGCCGACACAATCACCCAAG
-AAGCCTGTGGAACCCTCGCCAACTATATCCGGCATTCCAGTGTTTTTAAG
-CGACGGCTTCTGTTCACGGAGCTCCAAAAATGCTCGTTTTTTGCGAAATT
-GTGCATTTCGTTTCAATTTCACAGCTTTGAAGACACAGTTTTTCCGCGAA
-AATTGATTTTCGAACGATTCAGCGTGTTTTGCGGTGAACTGGAAAAGGAC
-AAGCCACGTGGGTTTTCATTTATTGAAAATTGAAAAGATTTTTGCAAAAA
-ATCATAAAATTTAATGTAAAACTGAACAAAACTCGATTTTTAACCGAACC
-TTTTTGTTTTTTCCGTGAAAAAATCGGTTTTCCAAGTTTTTCGAACATTT
-TCCGAAAAAAAATTACGCAAAAAAAACGATTTTCAAGTAACAAATCCGGA
-AAAATCAAACTTAAATATTTTCGGAAAATTTCATAATTTTCTTCAAATCT
-CTGTAAAAAGTAGATTCGATTTCTGGGAAATTTGAATTTATGTCATTTCT
-TTAAAAGCGCATGCTCTTTTGTAGGGTCTCGCAACGAATTATTCAATTTA
-AACTTTGAAATTCGCGCCGAAATTTGGGTCTCGGCGCGATTTTTCGAAAA
-ATAAATGAAAAATATGTACTATTAATTTTTTCTTGAAAATTATTGATTTT
-TCAGATCACCGGCACCACGTCACCGCTGTCGGATCGAATCGTTTCTTCAA
-TTTGGGACTACTTTCCGATGGAAGCCCCGTCTCAGAACCCCGACTGGTCC
-CCGTGCCACGTGTAATTCAAATCGAGATGACAAATACACACACAATATTT
-TTGACTGCTGAAAATCAGATTTACGGCTGCGGAAAAGCTTCATCTTTTTT
-GCCGGATAAAACGGAGGAGACGGACGGTGGTTATGTGGCACTGCCCACTT
-TGGTAGAAATTCCAAAAGTTACTGGATACGTGGCAGCTGTGAAGGTGTTC
-GATGGAGGATCACAGTTTTTGATTGGCGGCAAAGTACGGTTCTAGAAAAT
-TGGTGGCCGAGTATTTTTTCGCGGCCACATGGCGATTTTCTACACGAAAA
-GTTGTGTAAAAGACAAAAAGGTGTGCGCCTTCAGGGATTACTGTAGCTGA
-AGTTTTTCATAGATTTTTTTTTTGGCTTTAAAAAAATCCTTAAAGGTGCA
-TTTTCGTGTCGAGACCTTGTTGTATTATTTTGCTAATTTTGCTTAAAAAG
-TACAGTACCAGGTCTCGACACGAATAGTTTTGATAAATGCAAAAATGTGT
-GCGCCTTTAAGGATTACTGTAGTAAAAAATAAGAATCCCTTTTGGAAAAT
-TTGATAATTTTGTGAAGAAAAATAGATAATTCTTTGAAAATGAATAATTT
-TTTGGAAAAATCTTTTTTTCTTATTTTTCTAGACGTACACCTTTATTTCA
-TTAAAAAATTGTCGCGCCGAGACCTGATACCGTATTTTTGAGCGCAAAAT
-CGTGCCGAGACCCAAATTCGTGAATTCAAATTTTCAGTGGTATTGTGTTG
-GAAAATGTTCGATTTCCGGAGAAACGCGACGAATTTCGTCGAATTGTTTT
-GTTCTGGTAGAGGAGGAAAACGAGGAGAAATTGGAGAAAATGACGAAAAA
-TATCGATTTTTACGTGGCAAATGTGCCGATTGAGGAAAGGATTGTGAAGG
-TGGATTTTTTTTTTCAAAAATTTGAAAACAAAAAAACTAAAAAAAAAAAT
-TTTAATCTTAGTTTCTAGAATTCAAGCCAGTTATAATAATTTTTAAACTA
-AAAATTGCATCTTCCGAATTTTCAAGATTTTTTTTTCTGAAAATCGTTTA
-AAAAAATATCTTGAAAAATCAAAATTTCAAAAAAAACAAAACTTGAAAAA
-AAAAACGTCTTTAGCGGTATTTTTTCTATAATTTTTCAATTTTTTTCAGC
-TTAAAAATCATAGAAAATCGTAATTTTTTGACATTTCTTCCAGGTATATC
-TAAAAATGGACCAAAACGAGATTCTGTGGGATAGAACGAGCGATTTCTCA
-GCGGAAAAGCCGATTTCCTTCATAATCAATGGATTTCCACAAATGGCAAT
-TTTCGAATCATTTCAACTTTTAAATGATGGAACTATTTATGCTGCGAGAA
-ATTCACTTTTCAAAGGAAAATTGGAGCTATGGAAGAACAAAGATGACGGG
-TTTAAAGTGAAAAGCGGGACTGTTTTGGAGCATTTTGACACGAAATATAC
-ACTTATTGCACTGATGGAAGAGGTTCCCGGTACTATTGGAACAGAGTTTT
-TCAAAGTTTCACCAGATGGGCAGAATTTGATTATGAAGGTTCATTTTGTT
-TGGAATTTGAAGGAATTCGACCTTAAAAATATAAAAAATTGCACTGATGA
-TGTTATGGATTTTTTTTTCAGAAAAAAAAAAACGAAAAATTGAATGCTAA
-ATGACAGAAAATATGCCCCTGTAACATTTTTTTTTTGAATTTTCTAAATT
-TTAAATTATTTTTTTCAGTTTTGCGCAAATCAAAGAAACGGCCGAATTAA
-ATTTGAATTCCCGCGCAAAAGAGTGACGTCATTTTTTTTTTCCCGTTTTC
-CGGATGTATTATTAGGTTTTTATTTTAAACACAGTTTGTCAATTTTTCAG
-ACATTTTTTTTTAAACTTGATAACCCGAAAAAAGTGGCCTAGAAATCGGC
-TTTACAATTTTTTTTTTAAATCGACAAACTGTGTTTCAAATTATGAAACA
-AGGAAAAAACGAAGAAAAACTTATAGCCGGAAAACGCGAAAATGTCGAAA
-ATGACGTCACTAAATTGCGCGGGAAAAAATATAGAATTTTTTTTTAATTA
-ACAGCTATATTGAATCATTAGGGCTTGTTCTCCGTCAAAAAATTTCTCGA
-AAAAATTGATTTTTCGTTTTTTTTTGGAAAATCGAAAAATTTTGTTTCTC
-AAAAAAAACAAAATTGGAATTTTTATTAAAAAATTATTTTAATCCAACAA
-AAAAAACTAAAATTTTTTGCAAAATTTAAAAATTCATAAAACATTTAAAA
-AAATTTTTTAAAAGTTATATTGGGACTGTATTCTAATACTTGGACTAAAA
-AAACCCACATTTGACAAAAAATTCAATTTAAAATGAATATTTTCAGATGG
-GCTACCAAAACGAACAGAAAACCGAGAAATTCGAATTCGAGTCTCCCAAA
-ATTCACAAAATCATCAAAAATCGTGAAGTACAATGTGATCCAGTTGATAT
-TCCGTTAGACTCGACTATTCATTTTCATCAAAATTATAATCAAGAAGTAT
-TGAAATTTCAATCGAATCGATTATTATTTCAATGGATTTATCCGAATTAT
-TTGTTTCAAAACGATGGAGATGTACATTTTTCAATTGAACAATTGGAGAC
-TGTATTTGCTGTGGATTTGGAGAATTTGGAATTGTGAGGGTTTCTTTTAT
-TAATTAAAATTTTTTTAAGTGGAAAAATTTTGGTTTTCTTTTCAGAAATT
-ATTGTAATGTTGTAACTAAATATTACGGGAACACGAAATTCTAAGAATGC
-GTATTGCACAACACATTTGACGCGCAAAATATCTCGTAGCGAAAACTACA
-GTACTTCCTTTAATGACTACTGTAGCGCTCGTGTCGTTTTACAAGCTCAA
-TTTTTTAATACTTTAAATTAAAACTTTTACTTTAAATTTTAAAAAAATTC
-GTCTTATTTTTTAATTTTTGCTTTATTCCAATATTCTGTCGATAAATAAA
-TCATTTTAATAAATTTAGAAAATTGAGCCCGTAAATCGACATGCGCTACA
-GTATCCATTTAAAGAATTACTGTAGTTTTCGCTACGAGATACTTTGCGCG
-TCAAATATGTTGCGCCGTACGCATTCTCAGAGTTTTGTGTTCCCGTAATA
-TAGAAAATTAGAAGTATGTTAAAATTTTTAAAAAGTATTTTTTTTGGACT
-TTTACCCAAAGATTTTTTTTTGCAAATTTTTAGTGAAAATTATTATTTTT
-TTCAATTCACGCTAAAATTTATTAAAAATTTAAATAATTTTAGACTGTAT
-TCTATACAATCAAAAAACAACAAACATCAATAAAATTTTCAATGAGTTTA
-AAATTTTTTTGAATTTTTTAAAACTTTTCTTCGTTGACAAAACGTTCACA
-AAACTTGAAAAAATATATTTCAAATTAATACTTAAAAATTCAAACAAAAA
-ATTTTTAAAATTTTTCAGCCCGAAATACCAACCTATATCACCAGAAGAAT
-TCGTTCCCACCGACACTTCTCCCTCCGATATCTGGTATTTAAAATCCAGT
-GAAAAATTGAAAATCCCTTGTCACAAGTACCTTCTCCTACTACATTCACG
-TCAAATTGGCGCGATGCAGAGATTTCATTCAAATTATGGGAATTTCGGCG
-ATTTTAAGGATGGTAAATCTGAAAATGAAGTGGAAATTGAAGCGAATGCT
-AGTGTTGAAACTGTGAAAAATGCGCTGAGAGGGATGATCAATATTCGAAC
-TCTTTTCAAAATTAAGACTATTGAGGTAATTGGATTTTTGGTGAAATTTG
-AAATGAAAAAATATTTATAAAAATTGAATTTTTTTTCAAATTTTTTTTTC
-AGTCACCATAAGTCAATTTTCCATTAGATAAAAATCGATACTTTTTCTAA
-ATGCGATAAAAATTGGAAATTCTATAAATTCCGGAAAAATCGATTGATTT
-CAAAAAATCGATAATTTCCGGAAAATTGATAAATTCCAGAAAATCGGTAA
-TTTCCGGAAAAATCGATAATTACCGGGAAAACCAATTAATTTCCAGAAAA
-ATCGGTAATTTCCGGAAAAATCGATTGATTAAAAAAGTCAATAATTTCCG
-GAAAATTGATAATATCTAGAAAAATCATTAAATTCAGGAAAAATCGATAA
-ATTCCAAAAAAAAATCGATAATATCCTGAAAAGTGAATAAATTCCTAAAA
-ATCGATGAATTTCATCAATTCCGGGAATATTTTTTAAATTTAAACTTTAA
-AAAATATTTTTTTAAATCTTTAATCCTTATCTATTTTATTCAAAAAAAAA
-CTGATCAAAAAAATTTTTTTTTTTCAAAAATTCAATATTTTTGCAGTTAA
-TCGAATGCATCAACTTCTACGATTATCATTTAATGGATGAAATGTTCAAT
-GATTCAATGCATATTCTAATGGAAACAATCACTGAATTCACACTTCCATT
-TCTCTACGAATTATTCTATTCGTTTGAGGAAAAAGTGTTGGAGGGACTTT
-TGCAGAGGAAATATTTGATTTCTAACTCAATTTCCAGTGTTTTACCGCCA
-AAGGAGCTTCTTGTACGGTAAGTGAGTTAAGAAATGGAAAAAAACACATT
-TTTGCTACTGTTGGAATTTTTTTTATTTCACAAATATATTTTTTTTCATT
-TTAAAGTTAAGTAGGAGTTTATCAACTTTTCTGGATTTCATCAATTTTTC
-CGAAATATTTTGATTTTCCCGGAATTTCTGTGTTTTTCAGGAAAAAAACC
-CCAGAAAACTAACAAAAAGAATTAGCAAAAATGACCTAAAAACCGTAAAA
-CTATGTATCCCAACTTGTCCACGTGTAGTACAAAAAACCGATGTGCACCA
-ACAAGAATTTTTGCAAAAGCTATTTTTCCATTCAAAACTGCGCCCCAAAC
-AGTTGAAATTTTATAGAAAATTTTCGAAATTCGCTTCTCCGAAAATAAAA
-ATCTCAGATCCGCCCATTTCTTGGCTCTTCCAGATTCGCTGAAAAACTGG
-ACACCGATTGCCGCCGACACCACACATTAAAAGTTCCGTCGAAATTCAAA
-AATCTAGAAAATCTGAGCACCTATGAGCCCGAGTACATTGTCAAATATTT
-TCTGAATCTCGACCAAGATTCGGAGGATGTGACGTGGCGATCGATACGTC
-ACGAATTCCACGACACACTTGACACGTGGCACGCGGAAGCTGTGAAGAAG
-AGAGATGAGAGACGTATGCACGGAGCAACACGGAGCAGAACGAGTAGTAT
-TCGGAAGGAGAGCTTTACGAAAATTCAAAATGTTTCGATGACGTCATCGC
-CGGTAGGAATATCGATTTTTATGTATCGAATTTACTGGAAAACTATCAAA
-AGTTTAGGAAAAATATCGATTTTCCTGAAATTTATCGATTTTCCTGAAAT
-TTATCGATTTTCCTGAAATTTATCGATTTTCCTGAAATTTATCGATTTTT
-CTGGAATTTATCGATTTTTCTGGAATTTATCGATTTTCCTGAAATTTATC
-AATTTTTCTGGAATTTATCGATTTTTCTGGAATTTATCGATTTTTCTGGA
-ATTTATCGATTTTTCTGGAATTTATCGATTTTTCTGGAATTTATCGATTT
-TTCTGGAATATATCGATTTTTCTGGAATTTATCGATTTTTCTGGAATTTA
-TCGATTTTTCTGGAATTTATCGATTTTTCTGGAATATATCGATTTTCCTG
-AAATTTATCGATTTTTCTGGAATTTATCGATTTTCCTGAAATTTATCAAT
-TTTTCTGGAATTTATCGATTTTTCTGGAATTTATCGATTTTTCTGGAATT
-TATCGATTTTTCTGGAATTTATCGATTTTTCTGGAATATATCGATTTTTC
-TGGAATTCATCGATTTTTCTGGAATTCATCGAGTTTTCCGAGATTTATCG
-ATTTTTCTGGAAATTTTACTCCCCAAAAATTTAACAATATATCGTGCCGA
-GACACGAAAAACTCTAAAAATTACAGATTCCAATCGGAGGCGGCCGCTCG
-AAACCCGAAAGTTTCTCAAAATCAATCAATAGTCCTGTCATTCAATCGCC
-ACTCTCTCCCTCACCAATCAAAGGAATGCCAAAGGTAATCGTGTCGAGAC
-CCACCACGCCACCTGCGCCTTTAAATTCCACGTTTTGTAGTCCCGCCACG
-ATAGTATTTCCAATTCACTGGACGATTTTCCTGAAATGAGCATTTCACCG
-TCCCCCTCGACACCGAAATCCTCTTCCGGTGGCGGTCGCTTCGCACCAAA
-AGGAACTCGATTTAAAAAGGATTTCGAAATTCTCGTGAAACCTTCCCAGT
-CACCACAGAATCCGTGGAAAATGGGCGGAGCTTCCGCGTCGATTCGCGAA
-GAAATTGATCCGCAGGAGATCCGATTCGACGAAGTTGTGAAGAAGGAACA
-GAAATTGCAGACTAATATACGTGCGTCACTTGAAATTTTGGAAAAATCGA
-TAATTTTCAAAAAAATCGACCTTTTTTTGGAAATTATCGATTATTCTTGA
-AAATTATCGATTATTTTAAAAAATTATCGAATTTTCTGAAAAGGATCGAT
-TTTTTCGGAAAAAGTTTCGATTTTCTCGAAAAATAACGACTTTTTTTTTG
-AAAATTATCGATTTTTAAAGAAATTATCTATTTTTTTGGAATTTATCGAT
-TTTTTTTAGGAAATTATCGATTTTTTTAAGGAAATTATCGATTTTTTTAA
-GGAAATTATCGATTTTTTTGGAATTTATCGATTTTTTTTAGGAAAAAGTT
-TCGATTTTTCTCGAAAAATAACGACTTTTTAAAAAAAATTATCGATTTTT
-AAAGAAATTATCTATTTTTTTGGAAATTATCGATTTTTTTTGAAAATCAT
-CGATTTTTAAGGAAATTATCGATTTTTTTGGAATTTATCGATTTTTTTAG
-GAAATTATCGATTTTTTTGAAATTTATCGATTTTTTTAGGAAATTATAGA
-TTTTTTCTGAAAAATTATCGATTTCTCAAAGGAAAAGTATCGATTTTTGG
-AAATTATCGATTTTTAAGGAAATTATCGATTTTTCAAAAGAAGAGTATGG
-ATTTTTTGAAACTATCCATTTTTCTTTTAATTATTGATTTTTTTCCTGAA
-AAATTATCGATTTCTCGATGGAAAAATATCGATTTTTCTGAAAATTATCG
-ATATTCTTTTGGAAATTATCGATTATTCTAAAAAAAATTATCGATTTTGC
-AGGAAATTCTCGATTTTTAAAATAAAAACAGCGATTTTTTTTTTGAAAAT
-CATCGATTTTTAGGGAAATTATCGATTTTTCTGAAAATTATCGATTATTT
-CTTCAAAATTATCGATTTTTCGAAGAAAAGTATGGATTTTTGGAAACAAT
-CTATTTTTCTTCAAATTATTGATTTTTTTACCTGAAAAATTATCGATTTT
-TCTGAAAAAATATATAATACCACACATTAATTTCAGGAACCGGATTCAAA
-AAAGTGCAGCTTCTACCACACGTGGAGACGGAAGAGCTCGCCGGAGCTCA
-AATTTTGGAGGTTTTTCGACGAGAACTTCACGATGAGGCGCTCATATGTG
-TAGGAATTTGTGATGGTTTTTTTCTCAAAAATTTGAAATTTTTCAGGTGG
-AACTGGTGATGAGCGACGATTTGGAGGTGGAAAACGAGCAGATCATCTGG
-GGAAACATGCCGGGACTTGTTCGGCGTTAAATTTTAAATTTTTGATTTTT
-TTTTTTCTTGTAACTTGCATTTTTTGTTTAATTTAGTGTTTTCGGTGTTT
-TTTGTTGAAATTTTCGGGTTTTTAATATTCAAAAATTAATTAAATTATTA
-TAAAATAAATGCATTTAGAAATGCGGTATAAATTGAAAATTTTCAAAAAC
-CATCTCCCCGAATCCAGTGGTTTAGGATGAAAATCGTGGAAATCGAGCCG
-AACGAGAGAATTCCGAGTTGCCACGTGGGTCTGAAAATTGAGTGTATTTA
-ATTTTGGAAAATTTTGGAGATCTCTTACATTTTCTCAAAAATCCATAGCT
-TTTTCCCATTTTTTTGTTGCTGGATCATTTTCAGCTCTTCGGTTATATCG
-CAGACTTTGAAGCAAGGGTCTTCCGGGAGAATTTCCTGAACATTTGAAGT
-TTTTGGGTGAAAAAAAAGCTTTTTTAAAAGATTTTTTGGTATTTTCAAAT
-AATATCGGAAATTTGCGTTTAAATTTTTTTTTTCAAAAAAGTGAATTTTT
-TCAAATTTTTCGAAAAATCGAAAAAAAAATTTTCGGGTTTCTGGAAATTT
-TAATTAAATGTGTTTATGATGATGAGAAAATATAGTTGACAAAATAATTT
-TTTCCGATTTGTCAATTTTTCAAAAAATTTGAAAACAATTTTTTCCATTT
-TTATTCCTGAACATAAAAAATTCGAAAAATTTTCGTTTTTAATAATATTT
-CGGAAAAATTTTGAATTTACCGTAGTTGTGTCATTTTTAAAGAAACTCAC
-AATATTTCTAATCGAAGTATGCATATTTTTTAAATGAATTTTTGGAAAAA
-TTTCAAACTTGTTTTTTGTTGAATTTTTCGATTTTCTTTCGTTTTTTTAA
-ACAGAACAAATTTTTCATCATCTTTTCTACAAACAAAACAAAAAAAACAA
-TTTTTGTTTTTAGAAAAGCGAGAAAAATTTCGAAAAATTATTTTAAAAGT
-TAGAAAAATATCAATTTTGAACGGAATTTTTTCAAAATTCGATTTTTTTG
-TTTATTTTTCTAATATGTTCAGTTTTTGGCCATTTTTTTTTTTAAAAAGT
-TTGCTTTCAAAAAATTTTAAATGAGAATTTAGATTTTTTAACGAGAAATG
-TTGAAATTGAGAAGAAAAAAAAAATCAATTTTAAATAGAAAAATTTTCTT
-TTTCTAACATTTTCAGTTTTCTCAAAATTCCAAAAACTCGTACATCCTCC
-TGACAAGTACAGTAATCCATTGGATCCAGATTCTCCTCTCCAACACTCGT
-TTCCCGAATTTTTTCGAACCAATTGTTCATTTTCATAAGAACCGAGCTCA
-TCGCAATCAATTTCCCGATATTTCCATCGTATTCCTCCGAAAATTGCTGA
-AGCCGATTCAAATTTCCAATATCATGCTGGTGGAGAGAATACGGAGTGTT
-CAATAGATCCGTAATTGATTTAACTTTAAAATTTGGTTTTTTCATTGTAA
-TAATCATGCTAATCGTCTTGACATGATCTGTTAAATTCTCTCGTTTCGGC
-GGAGAATATAATCGATATTCCAGTGGCACGAGGTTGTCGAGAAATCTATT
-GAAATTCTGATAAATATCGTTCCAATCACTTCGAAGCTCGTCAGTTTCGG
-CTCCAGCTCCGCTTTTGAAGCCAGTCGTTTTTAGATTGTGCTCCAGCGTG
-TCTATTGAGCTCTGAAAATTTGATTTCAAAAATTTTGAGTAACTCAGACA
-ACCCCATTTTTCATCTAATTCGAAATTAGCCACATCTTATAAGAAATTAA
-CCACATCTAATTAGAAAAAACTTTTCTAATTAGAAAGGATGCATATCTAA
-TTAGAAAAGCTGCACACCACATCTAATTAGAAGGGATGCTCGTCGAATTA
-GAAATGAGGCACATCGAATTAGAAAGGGGGCGCGTTGAATTAGAAGTTAT
-GCGCATCTAATTAGAAAGGAGGCACATATAATTAGAAACACATTGCGCAC
-CACATCTAATTAGAAGGGATGCTCGTCGAATAGTACTACCTTTTAATGTA
-TGTACTACCTTTTAATGTATGTACTACCTTTTAATGTATGTACTACCTTT
-TAATGTAAGTACTACCTTTTAATGTATGTACTACCTTTTAATGTATGTAC
-TACCTTTTAATGTATGTACTACCTTTTAATGTATGTACTACCTTTTAATG
-TATTACCTTTTGGCTCTTAATGTTGAAAATAAATCGAATCAAATTAGAAA
-CAATGCGCGTCGAATTAGAAAAAAAGCATGCCGAACTGGTGCGCGTTAGT
-TGACCCTATTTTTCTAATTAGATGAGAGGAATAGGGTTGTCTGAGTAAGA
-CTGCAAATTATCAAAATTTTTTGGTTCAATTTGTTTTTGGAGAAAAAAGT
-GAAATTTCCTGGCAATTTTCAGTATTACGTAGACGTCGAAATATGAGATT
-TTTCACCATTTCTTATGGGTCTCGCCACGCCGACAATCAATTATTGTAGT
-TCATGTCGATTTACGGCGCCACTGTTGCATTAATATTCCAAATGACAAAT
-TTGCCGCCGAGTTTAAAAAATTCAATAAAAGCCCGTAAATCGACATGAAC
-TACAGTAGTTGGTTGTCGGCGTGACGAGACCCAATTCTCATCTTTCGACG
-TCCACGTAATATAGAAATTTTTTTTTTGAAAAAATCAAACGATTTTGCCT
-CAAAAAATTCAAAACTGTAAATTCAAAAAATACCACAAAAAAAAAGCGAA
-AAAAATCGCGGAAGACAGTGGCGCCAGGCTGTCTCAATACAGTTTGATCT
-ACAAAAAATGCGGGAATTTTTTCACAGAAAAATTGTGACGTCAGCACGTT
-CTTAATCATACGAAATCAGATGAGATTTCTGCGTCTGCCATCCCGCATTT
-TTCCAAGATCAAAGTGGAACTGGGACTTTCTGAATAGGACTTTCTGATTC
-CACGTGGGAAGGATGACAAATCCAAAATTGCGATATTTCACTAATTTCAC
-TGCTTGAATTTCCTTGGAACCAATCAGCGTCTTCAAACTCCGCCCACTCC
-ATCTGATTGGTTGAAAAATGGGCGGAGCAAATCGCTGATTGGTCGCAGTT
-CTCATTTTTAGCCAAAGTTAAAAATCTCGATTTTTCAAGGTTTTTTGACC
-ACCTCCAATTCCAAGCTTCTTCCTTACCTTCAAATCGTAGAATATTGCCA
-ATTCTCTGATTGCATCGAGTCCTTCCTTCAAAACCACAACATCTTGCAAC
-TCGAACCCCGAAAGCTGATATTTCTCGTTTAACTTGAATTCTCCTAGAAT
-ATCCTTCGCACGTAGCAACTCTCCAACGATTCCTTCAGTTGGTAGAAACT
-CTTGTAGAGTGTACACTGCCTCCCAGATCTTCTCAAGATCCCCGTAATTC
-CAGACATCTTCCGAGCTAGCCACAAGAAATTGCATATGTTGGTGTTTTTC
-GTTTCGAGCAACACATTCCAATGAGGATACGAAGTTAGACTCGTTGATTT
-TTGTTAAAACGTTTATCATGCTGGCGTAGATTTCCTCGAATTTGGTTTTT
-CTTTCTTGAAATTTTTTGTATAGTTTTGAGGGTACCATACAAAAATTCTC
-GGGAAACTTTTCGATATCATCTATCATCATCGTCAGGTTATCGAAATCTA
-TATACTACAGTGTTTTTTGAAGAGTTTCCACGATATTTTGATCGGTTTGA
-TGTTTGAATGCTTCGAGAATACGCTCGTCTCCGCAACGTCTTAACGTAAT
-GCAAGGCTGTGCGGTGTGTACAAGTGTCTTGTTTAGCTCTTCAAAACCGG
-AGCGATACATAGAAATGGTTTCATGCGCAGCGTCCAGCTGCTCAGGGCTC
-TTGAAAGTTTTCAAACATTCCGAGAAGCTCTCAACAATGCTGTTGAGGTT
-ATCCTTTGGCAGATTTTCCCGAATTTGATTAACTTCTGATAGATATTTAT
-CGATATATTCGATATTTTTATGATATTTTTCCGTGTTGTTTAGGATTTTT
-TGCATCGCAAATTCGAATTCCACATAGTATTCCAAAAACTTATTCAATGG
-ATGCAGGAATTGAATTGATCCTTTGCCAGAAACGCTTTTTATCCAATAAT
-TGCTCTGCTCTTTTATGGACTCTCGAATACTTTCTTCTCGTTTAGGGAGA
-CCTAAAGCTCCACGATCAATTCGTTTTTTGAAAGAAATAATTCAAAAATA
-CCCAAAAGAAAATTGCCTGATGGCCTGGAAGAATGCGTATCCGAGGATTG
-AATACTACGAATAACGTCCCTGACCTTTCGCACCCAATTTGAAAGCCCCA
-GTGTCGTATTGGTGTCGCGAATCATTTCTAAATCACTCAACGCCGCTTCG
-AAATTGTTCAGTCTTCCCACTGACAAGAAGTCTCGAACACTTTTACTTTC
-ATTTTTCATTATAGTCGTAGCGAGTTTGAAGAGATAAAATGGATCTTGAT
-GGAGCAATGCGAATTCTTTCTTGGCTCGTTCCGGAAAGAAATTTCTGTAG
-TAGGCGCCAACCTCTTCGACCGTTTCATAGTTCCGTTCTGTACGATCTTA
-AAAGGTGGAGTACCGAAATCTGGGGAATATTTCTAAATAACTCCAAATTT
-GCTCCTGATTTCAATTATCCATGTGAAAAAATTCAAAAAATCCCTGATTT
-TGTATTTCGGCTTGAAATTGCCGAATTCCATTTGTGCACACATGCAAATT
-TTTCAAACGCGCGCCCAAAGAAATTATCATTGGAGCGCGTTTGCCTCATT
-TGATTCTCTCCGGAGCACGGTAGCACAGAAACTAGATGGATTGGTTCATG
-ATACTCAGTCTGGAAACCTATATTGGCTACTATCTCGAAAACCATCATAA
-AATCGATTTTGCGATGCAAATAAGAAATGACCGCAATGAAATTATCTATC
-TCCATTCGTGATGAATTTTCGATTTTGTACTTCCTGGCCAAGTTATGCAC
-GTTTGTTCGGTGGAGCGCGTTTTCACCCATCTAGCAACTGACACGGTGGT
-TCAGTAGCCAATATAGGTTTCCAGACTGAGTATCATGAACCAATCCATCT
-AGTTTCTGTGCTACCGTGCTGAACCACCGTGCTCCATCTACCGTATTTCT
-TCCATTAATATGGCTGCAATACTATTTTTCGATGGTCTTCCCGCTTGCAA
-TACTAATAGGGAGTGCAATACTAATTTTCAGAATATTTTTCTGCCTTTGA
-GCTTACTAGTTTTTTTCTGAAAAAGCTCGAATTTTATGTAAAAATTCAGA
-AAATTGGTTTTAATTGTAACCTATAAGTTTCAAAAATTCAATCTCGTAGA
-AATTTTTTTGAAAAATTGTTGCAAAATAGGCAAAAAATATTGTAGAAGTC
-CTGAAATTAGCGAGACGGGATTGCAATAAAAAAAAGTAAACGCAAGACTA
-TTAGGGAGTGCAAGACTAATAGGGAGTGCCATACTAATTTTCGGAAGGTC
-TCCGAGGGGCAATACTAATAGGGAGTGCAAATCTAATAGGGAGGCCATAC
-TAATAGAAGAAATACGGTATTTTTAGTTCCTTTATTTTTTCAACGAGAAA
-ATCAAATGAGGCAAACGCGCTGCAATGAAAATTTAAATTTATTTGTGCGC
-GCATTTGAAAAAACTCATTCGGACGCAAATAATATTCACGAATTTAAGCT
-GAAATATAATATCAGGGAAATTTTTTTGTTTTTTTTTCATACAGATATTC
-TGAATCAGAGGAATTTTTTTTAGTTATTTGAAAATATTTCCTAGATTTCG
-GAAATCAAAACAGCAGCTTTTGTACAACAGCTTTTTTTTAAATGTAAAAC
-TTGTTTAAAAGTCAAACCACGTCCATTTTAAAAATTAATTTTTTAACTTA
-TAAAATAAAAACATGTGGAATGCTTTTGCATGTACATTTATACAAGTTTT
-TTGAGAAAAATACATTTAAATTTGAAAAATGTGTTTACTAAAATTCTGAT
-CAATTTTTTTGTTATTATATATTAATAGCTGAACTTTACTTTAAGACAAA
-AATTCCTCTAATTAAAATCTACCTTCAAACCATTTTTTCAGTTTTTGCAA
-ATTCTCCTCGGAAATCGCAGTAGGACTGGGAGCTAGATCATTGAGTGGCG
-AGAGAAAATCACGGAAATTTTTCAGGCGATTTTTCAGGCCCCATGTTGCC
-TCCCATCCGTATTTTGGTTTCATGAGAGATTGGAGATCATGAAATAAATG
-CAAAAAAGCATCCAGCGAGGTGGTGATCTTTTTCAGTGATTCTCGCTGTA
-GTTGAAGATGTGGGAGCTTCTTAAGTAAATTTACAGCTTCTTCTCTATCC
-TTATAAACTTTAGTGTTCTTCCTTTTCCCGACAATCTCCTCGAAAGCTCT
-CTGCTCATCCCATCCGCCAATAGATTTTGTTTTGTAGAAACTTGAAATCC
-TATCAAAATCGATATCCCGATCTAATAGCTGATTCGTCAGATCCGTAGAA
-GCGATTTCGCCGCTGAGAAGCCCATCGACGATAAGATAGCAGTTAAGGAG
-CGGTGGTAGTGAGCTCATCCAGTGAATCCACAGGTTTATGGAGTCCTTTC
-CGTAGACTGAAATTATTTTTAATATTAAAGTAGAAAAAAATTATTATATA
-AACTAACTATACGCAGGAAAACTCGCATTAAGTTCCAGATTTCGATCGAA
-GAATTGTGGATGTCCAGCTGGAAATTTTTATTTAAATTTAGTAAATTTAG
-TGAAGAAATTTAATTTAAAAATACCTGTCAAGCGCTGACCCTTAATCTGC
-TCCAACATTTGAATACCTTGCCGCTCCCTTTCCGAAATTTCGAGATCTCC
-GCAGTGTTTACCCGGTAGAAAAACAAGAAGAAAGGGAATTATCGTTATAA
-TCATCGTTATCTGGAAAAAAATTAATTTTCATGGAATATATTTCAAATTT
-TCGACAACCAAACGCTGAAAATTCACATTTTTTTCAGGAAATTTGGTTGA
-AAAATCTGTTTTTCATAATATTTTGAGAAAAAAACAAGCGTAAAGGTATT
-CAAGGCGCATGCAATTCACTTAAGCCAGGGTCTCGAAGCGAACAGAAAAC
-ATACGGTATTTGAAAATATTCTTGTTTTCCGCGGAAAGTCGCAGAATTTA
-ATTTGATTTTTTTAACTTAAAAAAACAGAAAATTAACCGTTATACCTTTT
-GAGCAAAAAATTCTACAAGATAATAATTTAAAACAATTAAAAATTGAATA
-AACATTGAAAATTAAATGCTTAAATTTCAAGGCGCGTGCATCAAACTTTT
-GTTTGGGTCTCACACCGAATGTAACAAGTACGGTAAGAGTGCGCGCTTAT
-TTTCATTTTTCGAATTTGTGCGACCAGTTCTCATGTTTTTTAAACGATTT
-TTGCGGTAATTTTGGCCATTTTTTCTAGTTCCCACCGACAAATTGCATTA
-TTTCCGTATTTTCAACGAAAATTTTGTTAAAAAACCAACAAAAATTTAGA
-AAATTGCATCATTTTGCAGGGATGAATGGTCAAGCGGATCGCTGCGACCG
-AACCGCCTACGTTTCGGGTCTTCAGCCGACAATCTCCGACATAGAACTGT
-TCGAGGTGTTCAATCGTGTCGCTCACGTCGAGAAGGTCATCGTTCGCAAT
-GGAGCCGCCCGTCACGCGCTCATTGTTTTCAAGTTGGCATTTTTTTTCCA
-TTTTTCCTCATCTAAATCTCTAATTTTCCTATTTTCAGAACTGTTCAAGG
-CCTGTATCAGGTGCTCGTAAACTTTCAAGGAACAACTCTTCACGGCCGTC
-AGCTGCACATTCGTCCACTGCGAGAAAGTTCGCACGCGAACAGCGAGGCC
-ATCTCAACGATGTTCGAGAAGGTCAAACATCAGGGAAATTCCGGGAATTC
-TTCGTATCGTCAAGAGCACTCGTTCCCCGAGTACCGAAACCAGAACCCAC
-AGGCTTCATCATACCTTCCACCGAATCCACGTGGTCATCGAAACTCGACG
-GGCTGTTTCAATGGTGGCGGCGGGGGCTATGGACGCCGACGTTCCGCCGG
-TGGATACAATCAGTACAATCAGAACAAGTATCCGAACGAAACGTACCCGG
-GAATGACTCTGTTCGATAATCATCCAGTGCAGCAGTATTCGGGCTTCAAT
-CCCATCGATTTTCGCTTTGATGACTATGTGGAAGGAGCCAAAAGGTGCAA
-AATTCGCCAAATTTCGCTAAAAAATCTGAAATTTCGCCGACTTTTCCCGT
-AGCGCAGCAGTTTTTTCTTGATTTAGGCACATTTCAGGCAATTATTTTCG
-GCAAATCAATATTTTTCCACCATATATGTTCTAGAATGTTTTAGATGTAC
-TAGATTTTATTTTCAGACGAATCAAGTGATTTTCTATATTTTTACACTAT
-TTTTTGTTGAAATATGACCAGAATATGCAACAAAGTGTTCCAGCTGCTGC
-GAAAAGGAAAAATCGGCGAAATTTCGAATTTCAGTCTATTTTAATCTGTT
-TAAGCAAAAAGAAAACTAATTTTTAAAATTCAGATTCGACAACCTTGCCA
-ACCTGATTCGCTCGAGCACCCCCACGGATCCGTTCGCTAATTATCAAAAG
-TATTTTTGAATTATTTTGAAAATCAATAAATTGGTTTTTTTTTCAGACCT
-TGTGAATCCACAAGCACATCTCGTTCTCGTACGAATTCAGCAAAAGATCA
-AAAGCATGGCCCGCCAACGTGGAAAATGGAGCTGCAGATTAAGAAAGATG
-ACCACCACCACGCCGGCGGCGGAGCAGCAACCACAGGACAGAAGCTGTCC
-CCACAACAGTTTTTGGCTCAGATAGCTCAGAGACAACAATCGGAGCAAAA
-CGCGGATGAGGTGGCCAAGAAGAAGCGTCCGAACCTTTCGGTTATCAATC
-CATCGCTTTTCTATGAGCAATACCCGAGAACATCGTCGCCAGTTGTTTAT
-GCTTCAAAATCTAGTAATATTTTTTGGAGATTTTGGGAAAAAAACAAATT
-TTCTCGAAAATACGCCCGAAATAGTGTTTCACGCGAAAATTGGCGATATT
-TCAATTTTTCTGAAAAATTGCTATAATTTTTTCGATTTTCACGTGAAATT
-GCAAGTTTTTGGATATTTTTCTCGAAAAACGTCAATTCATCGATTTACGC
-AGCTAGTATACTCAGCAATTGACCATTTTTTTGCAGACAATTTGGTATTT
-TTTACTTAAAATTCTTGATTTTCGACTTCTCGTGTGCTAATCACTTTTTC
-AAATGCGCGCCCGAAGAATTTCTCATTGGAGCGTGCTTGCTTCGTGTAGA
-TTTACGAGAGCTTTCCATTTATTTAACTTCTTTCGTGCTTTTTCAGTTTT
-CCAGCGAGTTTCTGGCTCGACCCCTCGGTGTATTTTGTGCAAACACCGTC
-ACGCGCAAATGCATGCACTTTTTCAACGCGCTGCGTGAAAATTCCTCTTG
-CGATTTCAAATATTTTTTCCCGCCATTTTCCAAAATTTTCGAGAGGGGGG
-GGGTCGAGCCAGAACACCTTGGTTTTCCAGCGAGCTTCCTTCATTTACGT
-CGATTTTTTTTTTAATCTTCGTTAAAGTTCTAAAAAAAAACGACTTAAAT
-CATTTTAAATTTTCCAAAATTCGGTTTTCCTTCTGCAAAAAAAATCAATT
-TCCAGAACCATCCGGCCACTACGACGACAAAATCGCATCTCCACACGATC
-CGGCAGTTCTCGCTTACAGTCGCCTTCGTGTACCTCAATCGGCCTTCGAC
-AGTCTCTCACCAATCGACACCGACAATTGCTCATTCATCACAAAACACTT
-GGGACCAACAACCGGTGTGAAGCGTGATTTGACGAACGACGAGTTGTCGG
-ATATGATTGTATCAACTGGAAATCTCCGAATCAATCCAACCAACATCGAT
-CATCATGACGAACCGGCACCATGGTCTCCGCTGAAACGTCTTCGCGCCGA
-AAGTGGATCCCTATCAACTGCACAAGTCGCGTCGCCCGAGTTCTCACCGA
-TCAAACCAAAGACAATGGAGTTCCACGAGACTGAGGATGATGTTTTTGAA
-ACTGGACCACCACCAACCTACTTATCCGAAGGAAACGAAAACGCGGAGAA
-GAAATGTGTTGAGCAGCCGAAAATCAACTACGACGACATTAATAATAGTC
-GTCTTCCGTCGAATTCTCATTCGGCAGCACCGAATTCCGAGAAGAAGCAT
-TTCGTTTTTCCGGTACGGGGGCTTTTTTTTGAATTACCGAAAAAATTCCC
-AACTTTTTAAAGTTCAAAAAAGTCAAAATTTTTGTCCATTTTCTGGGCGT
-GACTGCTTATGCCCCGCCCCCCTTTTTCGAAGTTTCTGCTTCTCGGAAAA
-TGTATTCCCAAAGTGCCAGTTTTGAGGCCCCACGAAAAGGGAGCAGAACG
-AAAGAGGCACCACGGATTCAAGATCTGGTGCGATTCCGGATCTGGCACCG
-TGCCAACAACTTGAAAACGTGGTGCCTCTGAAAATTTGCTGCCAAGGTTG
-AAATATCGAATGCATTACCCGTAAATCGACACGAGCTACAGTAACCTGTT
-ATCCGCGTGGCGAGACCCATGCGCGTCAGATGTGGCGAAAATTATACTAA
-AACCTGTTTAACTTGCAGAAAAACTTAATTTTTTTTGTTGAAAAAATTGA
-GCCAAAAGACTCAAAAATTTCATAAAGCGAAACTTTAAAAAAATATATAA
-TTTGTTAAAAATTTCACGAAATATTTATGAATTAATTAATTTTTCCAGGA
-ATACCCAATGTGCCGTCACTCGTCAGTTCCATCGATTGCTCACTTGGTCG
-GTGATCTGTCGGACTTTTGCCCACACGCTACAGCCGACGAGAAGATGCTG
-CTCGACGAGGCGTCTTCAATCATCGAAAATACAACTCCAGCAGTGTCTAC
-TGCTCCGGCTGCTGCTCCAGGAGCTACAATGCTCCAAATATAGGAGAAGA
-TCACATATACAATAATATAATCTTATTGCATTTTCGCAATTCTCGTTCTC
-TCCACACACATACACACATCATCCCAAGTATTCCTGTGCTGAATCTCAGT
-TTGAATGATGTTTCATACCGTTTTTATCCCACTATTGCCTTATCGTTTCC
-TGTTTTATTATATTTTTCATTTTTTATATTGCCACCACCACCACCAACAC
-CACCCTCTCTATCTTTTTTTGTTCTTTTGCCTCCAGCAACATCATCACCT
-AGTTTTCTGTGAATTTTGAATTTTGTGTTCCCCCGAGTCCCCTCTGATAG
-GAATGATAGGAAAAACAATGAAAATGCGAGTTTTTTCAAAAAAAAAAATA
-CAAACTAGGAAACTATAGAAACAAAAAAAAAACATTTGAGGCGCAGTACC
-GAAATCTCTCCAAATTTGGCCCGAAAAATTCAAAAGAAAATATTTATTTT
-TCTAAATTATTATTTTTCCGCCACTCCAGCCTCATTCTCATTGGAGCGCG
-CAAAGTCATGTCGATTTACGAGATTAAGATTTTCAACGAGTTTCATCATT
-GTTATCGATTTTCGTGTAAAGTTAACTAATTTTTTTGAAAATTTTCGCAA
-AAAATTTTGGATAATAAAATGTTCAATTGGCACGAAAATGCAGATCTTCA
-GCAAAAAAACCGACAGAAATGTGTAAAACTGAATCTCGTAAATCCACATG
-GCATAACGCGCTCCAATGAGAATGTTTTTAGCGAAAAGTTTGAACAAAGG
-AATATCAAATCAGGGCCAAATTTGGAGCAATTTCTAAAATATTTTCTCAA
-TTCTTTCGGTATTCCACATTCAAACAATTATTCGGCCGTTCCCATGAGCC
-TCTGAATCTCGATGGGATCCCTTGGCACTGCAGCAGTCAACAGCTCAATC
-CCTCCAGCTTCACTAGTCGCCACGTCATCCTCGATACGGTATCCAATGCC
-ACGAAACTCTTTGACAGGCCAATCCATCGGAACATACACTCCCGGCTCAA
-TGGTAAATGGCACATTCGGTGGTAGATCAATGTCTCGGGATACTGTCGGA
-CAATCGTGAACATCCATTCCGAGATAATGACTGACGTGGTGGGGACACAG
-CTTCTCCGCCTGATGAATCATCTCCTTGTGATCCGTAGATCGAATCAGGC
-CGAGTTCGGTGAAACTTGCCGCGAGAAGTTCGTTCATTCGGCGGAACAGG
-GCGCTTAGGCGGACTTTTTCCATTGAGTGGGCGTAGGTGAGCAGTTCTTC
-GTGAACGTAGAGAAGCGCTTCGTAGAGGGATAGTTGGGCGTCTGACCAGC
-TGCAAAAACGAATTTTTTTTTGGGAAGGTTTTTTGAAACGATTTTTCAAA
-TTTCGTTCGAATTATATTAAACTTTATATAAAACGATTATCCACGGATTT
-CTGGCTTCCCTCATAAATTGGAATGGAAGAGTTTACCGAACTAGGCCATT
-TTGGCTCGGCCATATCTGGTGCCGCGTCGCGGCTCGATTTTAGTTGTAAA
-ACTAAATGCATTTGTACGTGTGGAGTACACGACTTTCCCACGCGTTGTCC
-GGCGGGCGATTGTCAATGGAGCGCAAAAAATTCACTGAGGAAGGGGAGAA
-CTCCGTGATTAGCACCGCCTATTTCTCTCACGAATCTATTTCTTCGAAAT
-CTTCTATTTTTTAAAAATCAATTCCTGAATTCTGAAATTCATTATAGCGT
-AATTTTTTGGGAATTTCACCCTGAATTCCATTTCTACGGAACAACATTTT
-TTTCTCGAATTTGTGGTGACTCAAATTAGAATTTTCAAAATCTCCAGAAA
-AAAAATCATTTTTCCTGAATTTTCTGGAGATTTTTAAAGGAATAAAGTGC
-AAAAAAGACTCTTTTTGAGGCACCACCGAAAGGAGAAAGGAGAACACAAA
-CCACGCCCATTTTTCCGTGCCGCGCGCAAGTTTTTCTGCAAATTTTTATT
-TTCAAACGAGACAGCGAAACTCCGAAATAACGCATATCGTGTTCTTTATC
-ATCAACGTGTTATTTCGGAGCTTCGTTGTCTCGTTTGAAAATAAAAATTT
-GCAGAAAAACTTGCGCGCGGCACGGAAAAAATGGGCGTGGTTTCTGTTCT
-CCTTTTTCACCTGTTCTCCTTTCGGTGGTGCCTCTTCTTTTTTTTTTCTA
-TGTTTAGCGTAATTTTTTAGCCATCTTGGAATAGCCCCGCCCATTTCTCC
-CACAAATCCATATCTACGAAATCTCGCATTCCAGAATGATTTGTGGTGTC
-TCAAACGGGAATATTCAAAATTTCTAGAAAAACCCCATTTTTCTTGAATT
-TTGGCCGAACTTCTGTAATTTCTGAAATTCTGAGAAAAATTTTCATTTGA
-GTCACCACAAATACTGGAATGCAAGATTTCGTAGAAATAGACTTGTGGGC
-GAAATCAGCAAAAAATGGGAAAACATTCAATTTTTTTTAATTTTTTGGGG
-TTTTATCACTAATTTTTAGCACTTACAATCCAGAAATCGGAAAGCAACGT
-GTCACATCTGACACATAACCATTCAAATCACACCCAGCATCCACGAGAAC
-ACATTCCCGGGGATTTAGGTCATTATTTGCGTCCAAATAGTGAATAGTGT
-TGGCACGAACACCACCGGCAATCACTGGTGGATATGCTTGCATTTCTGAT
-CCACGACGACGTCCTTCAAACTCCAAGAGCCCGCAAATCGCGTTCTCGTT
-GTGTAGATCACGTGATCCCGATATCATTGAGCTCATTGTCTGGGCTCCCA
-CGTTGCACACGTCACGCATTGAGCTCATTTCGGATGGAGATTTTATTACT
-CGGCGACGTTCGATCTGCAAGGAAAACTTGAAAATTGGCAAAAAAATAAT
-TTTTTTTTTGAAATTTTAAAACGATTTTTCGGGTGTTCAGAAAAATTTTT
-TTTAGGAAAAAATTGGAATTTTCCAAAAGTTTCAAAAAAATAATTTCTAG
-AACTTTTTCCTAAAAAAAAAATGAATATTGAAAGCTTCGAAAACAGTAAA
-AATTGGGAAAATTTTTTTACCGTTAAAAAATTTTTTTTTTTCGAAAAAAA
-AATTTTCAGTTTAAAATTTGGAGCGTTTTCAATTTTATTGATAATTGGTG
-AAACAAAATAAAAAGTAAATAAAAAATTTTTTTTTTGAAAAATTTGAAAA
-ATTAGATTAAAAATGTTTATTCTGGGATGAAAAAAACCTCCTAAAACCAT
-TTTCTGGAAAATTTAAACTTCCTATTTTGTTCAGACAATTCTTTTTTTTC
-AAGAAAAAATCAAATTTTCCACTAGAAAATCGAAAAAAATTGACCTCGTT
-TAAAAATTGGACAAAATTTGAATTTTTACTTTGAAATCCTCGAAAATCGG
-ATTTTTTTTTCAAAGCTTGAACAATTTTCTGCAAATTCTATATATCTCTA
-AACTCACAAAATGATTAATTTCCCGAACAGAATTAGCTTTAGCCTGTACA
-AACTTATAGAGTAAATCATCAGAAGTCGAATCAAAAAACACTGCAGTTCC
-CTTATCGCAAACTTTTTCCAAAGTCTGTAGAATCCGGCTAGTCGGCACAC
-ATTCCGTGAATTTTGCAGTCTTTTCCCATTCGGATTCAGTTGGTAGGGCG
-CCTTCCCATAGCTCATCATAGGCACTACGACGGTCAGCAAAAAGAATATT
-TGTTTCTTTTGAAGATTCGGATATTCCTGATTGCATTATGTAATAACAAT
-CTGGTGTGGTGATTCCGTTTAGGTATCTGCAAAAAAAAAAAATTTTTCAA
-ATTTTTTTCTGTTAAAAATTTAATTTATTTTTTTTATCAAACAATTTTGA
-ATTTTTCCCAAAAAAAATCCGAAAATTGTGAACAAATCTATTATTTTCGT
-TGAACAAAAAAAAAACAAATTCAATTTTTAAATAATTTAATTTTCGTTCA
-GAAAAAGAAATTTGTCGATTTTCGGCGGCAATGATTTTTTTTAACGAAAT
-TTTCCTGAAAAATTCAATATTTCAATAATTCCTGATTTTCTAGTTTTTTT
-TTTAAAGAAGAACATGTTAAATTTCTACTAATTTTATAACAAAAAATTTC
-GGGAAAATCTAGAATTAAAAAAAAATGTTTTCAGAAAAATTCTACTAATA
-TATTAATTTTAGCTTAAATTTCGATAATTTTAGGTTATTTTTCAATTTTT
-TTAGGGCGAAATTTTGATTTTCAAAACAAAAATATTTTCTGACAAAAAAA
-TTAATTTTCATTCTTTTTTAGATTTTTTGAAAAATTTTCAATTTTTTTCT
-GAAGAATTTGGTACTTGTGTATTACATGCCCTCATTTTTAAATTAAATTA
-AATGTTCATTAATTTCTCCATTTAAATTAAACGTGATATACATTTTCTCT
-TTTTAGGCTTAGAAATTGCTATTTTGCTACTTAAAAAATTACTATTAAAA
-TGAGGGCATGTAATACACAAGTACCAAGAATTTCAATCAATTCTTGTTTT
-TGAAATTTTTTTTGGGAAAAATTCCAATTTTCGATTGTTTCTTCGATTTT
-TTCAGAAAAAAAATTTTCTAAAATTTATTTATTTGTTTGAAAATTGGATC
-TAAAAAAATTTCTCTAGTTTTTATTTTTTTTCTGGAAAAAGCTTTTTTTA
-ACTTAAAAAGTTAATCTGTGGCCGAGTTTTCTCTCATCATTTTCACGGCC
-ACGGCCATCAAAACCGAACCTGAAATGGCTTTTCTGTCGGAACGCGTGTG
-GAACATCCGGTGCAATATATGATTTCCGTGCTCCTTTCATCACAACGACC
-ACTTGCTTTTCTGAAACTTTGAGAGGTCATGGCCTAACTTTTAAATGGTT
-TTCTAGGCCACCATGGTGATTTTATTACGGTACCGGGTCTCGACACGATG
-AATTTTGTAGAATAAATTTTTCTGAAAAATTTCGTTTTTTTTTTTAGAAA
-AATCAAATTTTCAAGAAAAATGGGAAAACATTTTTCAGGAAAAATTTAAT
-TTTATAGAGAAAAATAGAATTTTTCCTTTAAAAAAATCTGAAAATTCGGA
-TTTTTGAGAATTCTCTTTATTTGGATTTTAAAATCCAAATTTTCAAAAAA
-AAATTTAAAAATCGGAAAATTCCAAATTTTTGAGAGTAAACTCGCCTTAA
-TTTTTTTTTTCAATTAAAAAAATTAATTTTTTAAAAGAAAATTGGAATTT
-TTACCCAAAAATTGGCAATTATTCGAGTTTTCAACGGAAAAATCTGAAAA
-ATCCGAATTTTTGAAAAAAAAATCTTTAAAAATCCCAATATTCAATTAAA
-AACCGCGAAATTTCGGATTTTTGAGAAAATTTTAATTTAAAAAAGTCCTA
-TTTGTACTGCAAATCCTCATTTCCAAATGATGGCCTAACTTTTTCAGAAT
-TCTAGGCCACCAGGCCATTTCTCTGCCTCTTACCCCCAGTTTTGACCTCT
-TTTTTGAGTAAATTCATCAAATTCGTCCTTCTCATCGCATATTCCTCATT
-TGGAATTCGCGATGGCCACATTGGTAGGCTCCGCCCACTTCTGAGCATTT
-TTTTTTTGGATCTGATCTGTGTGGGAGGGAAATTCGAATTTTTTTAGAAA
-TGAATAAAACTGAAAAAAATAGATTTTTTGGGAAACAGGGAACCTGAATT
-TTCGAGAGAAAAAAGGAGGTAAAACAAAAAATTCGATTTTATATTGAGCA
-AAAATTAATAGAAAAAATAAACTTAACAATTATGAACAGAAAAACCTACT
-AAAAAAGTCTAAAAAATGAATGAAAAATTGCAAAAAAAATCTACAATCGA
-TACGAGACTCCTCCTCCAACAATGCAGTTCTCGCCGGTGATGTACCTGAA
-AAAAAGTGATTTTTTTTTGAATTTTTAGAAAACAAAATTATGAAAAAAAC
-CAAAAAATTTCCGAATAATCGAAATTTTTCGGAAGTTTTAGGTTAAAAAA
-ATTTTTTTTTGATGAAAAGTTTTTTTTCAACAATTCTGAAAACTAAAAGT
-ACCAAAAAATTTTAGTTTTTTCGATTGTTTCAATATGATAATTTTTTTTA
-AATGTTTAAAATTGTATTTTTTCAAAAAATATTATCAATTTTCCAATTTT
-ATGGTAATTTTGGATGTGAGATTTTTTTCTTCAAATTTTCGAAACGTTTC
-TCGATAAAAAAATTTTTCAACTGAAAAACTACAAAAAATCCTCTTATTTT
-GAAGAAAAATCGATATTTTCTCAAATTGTTCAGATTTTTTCTGTTTTTAC
-CAAAAGTGACCAAATTTTGAGACTTTTCGATCCAATGTTTAAAATTTTTT
-TCCCGTTTTTTCGATATTTGCGGTTTAAATTTTTTTTAAATTTTTTGATT
-CAATTTTAATAAGTTTGAGTGTTTTTCGATTTTTTGTCCAAATTTTTTCA
-AATTTTTTTCCAGAAAATTGGTAGAAGCCAAAAAGTGCGATTTTTTTCCT
-TAAAAAAGATAATTATTCAGTTTTTCGACTGTTTTCTTCTTGCTTCCAGA
-TTTTTTCTCGAATTTTTTTTATATTTGAATTGTATTTTTAAATATTATAC
-TCCTAATCGATAAAAATTAGTTTTTTTTTCAATTTAAATTGGAAAAGAAC
-GTTCTTTTTCGTAAATTTTAGTGATTTTTGATTCCAAATTTTTGGATTTT
-TTCAAAAAATTTCCCAGAAAATTTTACCTGGCTTTGGTAGAAGCCAGAAA
-TTCGATTAAATAAGCTTTTTTGGGTTTTTCGACAATTTGTCAAGTTAGGA
-ATTAAACTTTTAAAATTTTTTTCAAAAATTTTAAAAAACTAAAAGTATTT
-CTGAGAATTTTTCTGAAATTAATTATTCAGTTTTTCGACTGATTTCTGCT
-TGCTTCCAGATTTTTTCTCGAAGTTTTTATATTTGATTTTTTTAAAAAAT
-ACTCTTAATCGAAAAAAATTCATTTTTTGAATTTTTTCGGGACTTTTTTT
-TTCGAAATTTTCGTAAGTGTTAGTGTTTTTCGATTTTTGATTCTAAATTA
-TTGGATTTCTTCAAAAAATTTTTTCAGAAAATTCTACCTGGCTCTGGTAG
-AAGCCAGAAATTCGATTGAAGAAGCTTTTTTTTCGGTTTTTTGGACAATT
-TTCCAAGTTTTAGTTAGGAGTTAAACTTTTTCAAATTTTTTTTGAATTTT
-TTTCAAAAACTTTAAAAACTAAAAGTATTTCTGAGAATTTTTGAGAAAAG
-CATTTTTTTTCTCGAATATTTGAACTTTTTAAATTTTTAAAGCTTTTTAT
-TTTTAAATATCAATTCGAATATTTTACTCTTAATCAATGAAAAATCGATT
-TTTTTGATAATTTTTTTCAAAAAAAAATTCGAATTTGAAATTTTTTTCAT
-TCAGAAAAGGGAATTTGACTATTTGAAAACAATTTTTTGTTGAATTTTTC
-GTAAATTTGAGTGATTTTCGATTTTTGATTCCAAATTTTTGGATTTTTTT
-TTGACAATTTTCCAAGTTTTGGTTAGGAGTTAGATTTCTTGGAATTTTTT
-TTTGAATTTTTTTCAAAAATTTTAAAAACTAAAAGAATTTCTGAGATTTT
-TTCCTTAAAAAAGAGGAATTTTTTAGTTTTTCGACAGATTTCTGCTTGCT
-TCCAGATTTTTTCTCCAAGTTTTTATATTTAAATCTTTAAAATTTATATT
-TTTAAATAATATTTCAGATATTATACTCCTAATCGATAAAAATTCGTTTT
-TTTTTCAAATTTTAATTGAAAAAAATCGATTTTTTCGATAATTTTTTAAT
-TTTTTTAAAATTCGAATTTGAAACTTTTTCATTCAGAAAAGAGAATTTGA
-TTATTTGAAAACAATTTTTAATTTAATTTTTTAATCCTTTAAATTTTCGT
-AAATTTGAGTGTTTTTTGATTTTTGATTCCAAATTTTTGGATTTTTTTCC
-AAATTCTCCAAATTCTTATTTTTGCAGAAAATTCTACCTGGCTTTGGTAG
-AAGCCAAAAATTCGATTTAAGAAGCTTTTTTTTGGTTTTTTTTGACAATT
-TTCCAAGTTTTAGTTAGGAGTTAAACTTTTTTCAATTTTTTTTTTTGACT
-TTAAAAAAAAATTTAAAAACTAAAAGTATTTCTTAGTTTTTTCCTTAAAA
-AAGAGGAATTTTTTAGTTTTTCGACTGACTTCGTTTTTGAATTTTTAAAA
-ATTCAAAAATTGTATTTTTTAAAATTCTAATCGATAAAAATTCGTATTTC
-GATTTTTGATTTCAAATTTTTGGATTTTTTTCAAACATTTTTCCAGAAAT
-TTTTACCTGGCTCTGCTAGAAGCCGAAAAGTGAGATTTTTTTCCAAAAAA
-AGATAATTATTTAGTTTTTTTTCTCGAACGTTTTATTATTTGAACTTTAA
-AATTGTATTTTTAAATAATATTAAAAATTTAAATAATAATATAGAATTTT
-TTTGAAAATTCCTGAATTTTCTGATTAAAAAAACATTTTCTGATGCATTT
-TAGAAACTGAAATTTTTTGAAATCTTTTTGGAATTTTGGAAAATTTCGAA
-TTTGTTGATTATACTCTTAATCGATAAAAATTCGTTTTTTTCCAATTTTA
-TTTGAAAAAAATGATTTTTTCGATAATTTTTTTGATTTATTTTCGGGAAT
-TGACTATTTGAAAACAAAAACTTTAAAAAAAAATCAAACTTTTTTTTTGA
-AATTTTCGTATTTAAATTTGAGTGTTTTTCGATTTTTGATTCTAAATTTT
-TGGATTTTTTCCAAATTCTCCAAATTCTTATTTTCAGAAAATTCTACCTA
-GCTCTGGTAGAAGCCAAACATTCGATTTAAGAATCTTTTTTTTTTTTTGG
-ATTTTTTTTTGACAATTTTCCAAGTTTTGGTTAGGAGTTAGATTTCTTGG
-AATTTTTTTTTGAATTTTTTTCAAAAATTTTAAAAACTAAAAGAATTTCT
-GAGATTTTTTCCTTAAAAAAGAGGAATTTTTTAGTTTTTCGACAGATTTC
-TGCTTGCTTCCAGATTTTTTCTCCAAGTTTTTATATTTAAATCTTTAAAA
-TTTATATTTTTAAATAATATTTCAGATATTATACTCCTAATCGATAAAAA
-TTCGTTTTTTTTTTCAAATTTTAATTGAAAAAAATCGATTTTTTCGATAA
-TTTTTGAATTTTTTTTTTACAAATTCGAATTTGAAATTTTTTTCATTCAG
-AAAAGAGAATTTGATTATTTGAAAACAATTTTTAATTTAATTTTTTAATC
-CTTTAAATTTTCGTAAATTTGAGTGTTTTTTGATTTTTGATTCCAAATTT
-TTGGATTTTTTTCCAAATTCTCCAAATTCTTATTTTGCAGAAAATTCTAC
-CTGGCTTTGGTAGAAGCCAAAAATTCGACATAAGAAGCAACATCAGACGG
-TCTTCCAAGTCTTCCCAACGGAATCATCGATTCCAAGTGTTGTTTAATCT
-GACGAGCTTCTTCTCCAGAAGCATGATCCCATACAGCACCAGTTCCGTCT
-CCTTCAATCATTCCAGACACCACACTATTCACGCGGACTCCTTGTTTCGC
-GGCACTCTGAGCTACGGATTTTGTAAGTGATAGGACACTGCTAGATGCAA
-CTGAGTAGAGACCCATATCGATTGATGGAGTGAAGCCGAAACATGACGTT
-AGGTAGATGATACTGCCGTTTCTGGAAAAAATCGATTTTTTTTGGACGGG
-AAATTTTGCCTGCCTACGTGCCTACCTGCCGGCCTATTTTAGCCTATTTT
-TCATTTTTTTTTTGTTGTTCTATTTTTTTGCCGTTTTTTGGGAATTTCAT
-GATTTCTAGGGTAGGCACGACTTCATGCCTACGTGCCTATCTACCGGCCT
-AACATTTGATATTTTTTTAGAATTCCATGATTTCTAGGTAGGCAGGTAGG
-CACGAATACATGCCTGCCTACCGCCTGTTTTTTTGAAATTTTTTTGTGTG
-AAAAATTAAAATTCATGGGAATGCTTTTTTTTTCAAAATTCAATGATTTT
-TAATGCAGACCGCGCCTATCTGCCTACCGCCTATTTTTGGCATTTTTTGT
-GTGCAAAACAAAATCAAATTAGCTTTTTTCTTTTCGTTTTTCTACGATTT
-TTTCCAAATTTCAAGATTTTTCGGATAGGCACGACTTCCCACCTACTGTG
-CCTACCTACCTACCGCCTATTTTCGGCATTTTTTGTGAGCAAAAAGAGAT
-CAAATTAGCTTTTTCTCCTGTTTTCTACGATTTTTTTGGGTAGGCACGAC
-TCCATGCCTACCGTACCTACCTACCTACCTCCTATTTTCGGCATTTTTTC
-TCGTGCAAAAAATCATATTTATGAAAACACTATTATTTTTGTTTTCTGAA
-TTTTTTTTCCAAATTTTGTGATTTCTAGGGTAGGCACCGACTTCATGCCT
-ACGTGCCTACCTACCTACCGCCTATTCTCGGCATTTTTGTGAGCAAAAAA
-TTAACATTCTTGAAAATCCTTTTTTTGTTTTACTACAATTTTTTCAAGTT
-GCATGATCTCTAGGGTAGGCACGATTTCATGCCTACTTGCCTATCTACCT
-ATTTTTCCCTTTTTTCGTGGTTTAGGTAGGCAGGCATGAGTCAGGCACGA
-AAATCTAGAAACATAATTTTGATTCTATCGGTAAAATAGGCTTTCAAGAC
-AGTTTGAATTTTTCGAATTTCTACCAGCAAAAAATAATATCTGAAATTTT
-CGCGGCGAGACCCAAAAACTGACTGAGATTTGGCGAGCGTCGACATAGCG
-GCTTGCGAAAGACGGAACGGTGTTGTCAGATTGTTGGCGAAAAGCTGAAA
-TTGGTTTTTCGAGGTCAATTTTCCACGTGGAATTCAAATTTCAGCACTCT
-CGAACCTTATCAAAATCCTCGCCGGATGTCTCAATAATCTCGCCGAGCAC
-CTCATTCTGTGGTGGAACTATAATTAAAGTGTCCAGACCGCCGAGCTTCT
-CAGCCACTTTCGTGATCAGCTCCTTCCTGTGCTCGGCATTTGCCACGTCT
-AATGAGAAAGCTGTGACGTCACCTCCAACCTGAATTTATTCCCGAATTTC
-TCTTTGTCAAGTTCTGAAAATCTGCCTAAACCTTTATATTGTCCTCTGCA
-ACCTTTCCCACACTATTCGGACAGTCTGCGGCGGCGGCGACCTTGTAGCC
-GGTGAACGCGAGTCTTCTCACGACGGCTTTACCCAGTGTGGACGTTGCCC
-CGATTACAAGTGCACATGACATTACGCTGAAAGCCCGATGAGGAGGCATA
-TTTATAGATACACCTAGACATCAGGTACATTTATTTGGAAATCCGTAGAA
-AATAAAGAACATGTGAAAATAAAACAGATCATTTTATTATTTAGAGGGGA
-GAGGGAGGGGGAGCAAAGTCGCTGACTGAGAACTTTCGAAAACCGGTTAG
-TTACTCCAGTTGTACGGCTTATTCATGCCATATTTTCCAAGATTTCCACC
-ATTGTGTTGGTATTGAGAATGTTGATTCTGCTGAGCTGCCGGCTTCGATC
-CAGACATCTTGTCGTAACTCTTGCGCTCGTCATCCTGTCCGTAGAGTTGA
-CGACCTCCAGCGCTGCTTCCAACATTGGGCATCATGTTCATGAATGGAGT
-AAACTGGTGTGGAGCAGGTGAGTACTGCTGCATGAACAACGACGACAAGT
-TTGGCTGCTGCATGTAGTTCGTCGCCTGGAACCCTGGTGGTGGTCCAACA
-TTCGACGCCTGCTGTGGCTGCTGATCCCGAGAGCTTTGAGATCCGAACTT
-ATTGAAGTCCATAAGTCCATGAGTCTCTCGTTGTTGACCAGATTGCACTT
-GTTGCGCAGAAGCAGCCTGTGACAGAGGAGCAGTTGGAAGCAAGCTTGTA
-AGATCAACTCCCATTCCGTATTGCATAAGAGCAGCAGTATATTGCTCATC
-TCGAACTCCTGGCATTGGATTGTACATGTTCATGTAGTTGTTCATGTATG
-GTGCATATGGGAGTTGTTGAGTGAACATCATATGTGGATGCTGTTGTGGA
-TGTCCAGTCGGTTGTGATTGAGCTGGTGGAGTTTGTTGCTGCTGCTGCAC
-TGGCTGTTGTGGGGCTTGTTGCTGCTGCTGCTGTGGCTGGTGCTGCTGAG
-CAGATTGCTGTGTTGGAAGTGGTCCAGAATTGTTGAACTTGTTCGGCGCC
-ATCCTGTCCGTTGGTTGATATGAAGCGGACGAAGTGTCATAGGACAATCC
-TCTGTTAGATTGACCATATGACAATGGAGGTGAAGTCGATTTTAAGTTGT
-AATCGCCGTTAGGAATTGACGTCCTTTCTGGCTGAAAAATAATCGAGAAT
-TAGAATAAATCGTCTTTGCAACAAATTTAACTCACCTCAACTTGTTTCGG
-CATAATACGAGAAGAGTTAAATATATTTTCACTGGCATTTGAGATCGAGG
-CAGCGGAGGATTCAGTAGAAGGAAGCTGTGGGCTTGGAGCAGCCTCAACA
-AATCCAAATGAGTAGTCATGAATGTTCGTTGGTGCAGTTGTGCCAACAAA
-TTCCACTCCAGGATCAGGAATAATCTGGACTGGTGCTGCACTTGGAATTG
-GAGATAATCCTAGTCCTGGTGCTTCACTCAATCCTATTCCAAGATCCGTC
-TTCAGTTGAGTGGTCCATGCTTGATTTGGTTCTGGGGTGCTTTGTACATT
-TTCATCGTGATGAGTCGACACATTAGGCGTCTGCTCCTCAGCCAAAACTG
-ATGATTCACTGAAAATTAAATTTTTAATAATCTAAATACAGGGACAGAAC
-AACTTACTTTTGGAAGAAACCATCTTCTTTCTCCGGCTGATGCGAAGTTT
-CTGGCTCGAAAAATACTGGCGCTGCTGCTGGCTCTTCTTTAACTGGTGCA
-ACTGACGGAAGTGGAGGTTGTGGGGAGAGACTCCTCCTTGGCGGAGCTGC
-TGGTTGAGGATTCTGTGCCTGGTGCTTTCGGAGTGCTTCTTTGCGATGGG
-CAGCTGCTGCTACTGCAGCAAATGAGATCGGTGCCGGCGCAGAAGATGTG
-GGAACAGTGGCGGTGACGGATTCCTCTACTGGTGGTTGAACTTCGGTGAC
-TGTGGTATCCACTTTAGTCTGATTCTGAAAAAAAAACACGTTTCGTCATT
-TTCCTTCTTCAAAAAATTCTTACCTCATCAAGATCAGCAGTGAACGCATC
-TGGCTCAAGTGCTGATGATGGAGCAACAGCTCGAGAATATCCACCTCTGG
-CGCCACCTCTTCCACCTCGTCCAACATACGGTTTTTCAAATCCTCCTCGA
-GTCGAGCGTGGTGCTGCTCCTTCCTTATTATCACGGTTATCCCGATTATT
-ATCTCGGCTTTCTCTTGGAGCTCCATTGGATCGCCCGCGGCCTCCTCGAT
-CGACGAAACCGGTGCCTCCACCTGAAAAAAACATATCAATATTTGATCTA
-TTTCAATCAAGCACGAACCTCTGCCTCTTGCTACAAATCCTCTGTTGTTA
-TAACTGCCCTCTTCCGGCTTCTTCTTTTCCTTTTTGGCTCCTTTCTGTTC
-AGTCCACGAGTCAAGTTTATCTCCAGCATCCAGAATGTGATCGATTGCGC
-CGTAAAGATTGTTGTCAGTATCCAATAGCGCTATCTCAGCTTGTGCTTGT
-GTACATCCGGTGGTTTCGATAATCTGAAAATGAAAAAGACATGAGCAGTG
-AAAAAACCCCTCTTGGGAATGCGCGAACACTTTAATTAGCCCAAATGAGT
-AGGACATCTGGGTACTCTTACTCTCGCTGCACCATCTCAAGCGCGGACAC
-CTGCTTTTGTCCTTTTATTTGCCATCTGGCCCCGTCTTATCGATTCGAAA
-TTCCTATTGACACTGAAAGCGGACACTAGAGAAGTTCAAAACAACAAAGT
-CACGTGCGTCATCATGTCGGTGTGTGGCGAGCGTTCGCGTGATGCAAAGA
-TCACTATTTTCAGGAAAGCGTCATTTCCAGCTTGGAGACTTACCGTCTTG
-ATCATAAACTGTATGTCCTCCTCATTTCCGGAATTTCCTTCCAGTGTGAG
-TCGTGCAAGTCGCGCTTGATCGCTGGTAGCTTTTTTGTCGCCTTTAATAC
-CCATTCTGAAAACAAATTATAAATAAAAAGGGTCAGTCATGTGAACGCAA
-GAATGGAATGAGAATCACGAGAATACAACTATCAAAGGAAGGTTGAATGA
-AAGGAAGGTCAAATAGATGACAAAAGTAGGAAAAGAACGAAATATGGAAC
-CTTCCAGATCAAAAAAACATTATCAAAAGAAAAGCCTCGCACAGAAGACT
-CTAACGAACATGTTAGGATGAAGAAATATTTCAGCAATACATCACGTTGA
-ACTTTGGAGGATATTCTAGAGAAGAAAACCCCTACATTTTACAATAATTT
-TGAAATGGAATTCGAATGAACTGCTATACAATGGAGAATCCTATTTAGCG
-ATGATAAAGTGTAGGCTTGTTACTAGATTGAATAAAAATTTCGAAATGTA
-ACAATACATTGACTGAAAATTTGGGTATTTCAGAGTGTGATATCACAAAA
-ATCAATATTTCCACTAAACTCAAAAGTTCTTACGCTGAAAAATCATTAAA
-AAATTGAAAAATCACCGCAAGCTAGACTAGAATCGCGTTCAAATCTCGCA
-AATTCCCGCAGTTGAAAATGCGGGCGACCGCGACGCGAGCCGCAACGCAC
-CCCTCCAAACATGCGGCATGGGTCTCGCCACGACCGAAAGTACGGTCACT
-CTTGGCAGTATAAAAGGCGACCATTTTCCGCTATTTTCCGGTAAATTTTC
-AAATGAAACTGTGTTGCGGAGGGGGTTTTCCGCTAATTTTGCGGAAATTT
-AGCTATTTAATGTGAAAATGTGAATAAAACAAAAGAAAGTGGGGAGGAAT
-AGCAAGGAAACACACTGTTGAACCCTGGGAATTATCGATTTTGTATGAAC
-TCTTCTTTTATGGCGTCGAAATTATCGACACGAAAACTCAAAACCTTGTC
-ACATTTCTGAGAGAGAAATATCATTTTCAGCACACATGAGTCTTCCCAGA
-TTTCGACTCGTTCAGGGAAAGGCGATCGGCGAGCGATCAACGCCAGGAGT
-CAGCACACCAGAGCCGGTAATTGTTTTTTTTTATTTCAAAATTTCTACAA
-CAACAAAAAGAACTAACAATAATTTATTCCTTTGATTCCAGGCCCCTCCG
-CAAATAAAGCAGGAAGTCGACTACCAAGATGCTCATCAAATGGCTCCGGA
-ACCCGTGGAAGCACCCCGTAAATATTTAAAAATTTAAAAAAGTTAGAAAA
-AAAATTTGAATCCCAATTTTCAGAGGCTCAAAACCATCAAATGCAGCCGC
-CTCGTCAACCTATACAACAGCAGATGCAGCATTTTCAGTCACCATCGCCA
-ATGGCTCCACAAGGGCCGCCCGGGACTCCACAAAACTCTGCAGCGGCGGC
-CGCCGCTGCTTCAGATGACAAAAACGTGACAAAATGCGTCCGCTTTCTGA
-AAACTTTAATTAATCTGTCGAATAACGATGATCCAGAAATGCCGGACAAG
-GCCGCCCGTGTCAAAGAGCTAATTCGAGTGAGGAATTGAGCGAAAAACGC
-GATAAAAACCGGACAAATTCGGATATTTCAGGGCGTAATTTATCTGGAAA
-CGACGGCTGAAGAGTTTACACGAAATCTGCAACAAGTGCTCAAATCTCAG
-GCTCAACCGCATCTTTTACCATTCCTTCAGAATACTCTTCCGGCATTGAG
-GAATGCTGTTCGAAATGGTTCGGTTTTATGTGCAAAAAAATTAAAATCGA
-CAAAAAAAAAATCATCGAAAAACAGGAAAATTTGAGTTGAAAAGCAGCGA
-AAAACTTGAATTTAACATAAAAAATTGCAAAAAATCCGTTGAATTACATT
-TTTCAAGAAATTGTGTAGAAATTCCATGAAAAAAATTCAAAATTTCCAAA
-TTTTTTGGCTATTTCTAGTCAATTTCTTTAAAATTCCATTTTTGATAGCG
-AAAATTATCAAGTTTCTAACAATTTCAAGCTGTTTTTGGTGATTTTTTCA
-ATTTTTCGGCTTTGAAATTCCATTTTCCGGAGTATATTGTCATAATATAT
-CCGAGTTCCACAAAATTGAGCAAAAAAAATTAAAAATTTCCCTTTATTTA
-AAAATATTTTCAGCTGTCAGTAATATATGGATTTTCCGCAATTTTTCTCA
-CAATTTTGAGCAAATTCCTGATTTTCAGCCAATTTATAAGGATTTTCACC
-CATTTTCATAATTTAGGGCTATTTTCAGCTGAAAAATTGTAATTTAAAGT
-TTTTAAAATTTTTATAGATTTTCTCAAATTTCAGCTCAAAAATTCGATTT
-TCAAGCGCATTTCCAGGCAATTTATTAAGATTTTCACCAATTTTTTTAGC
-TTAAAATTTAAAATTTCCACATTTTTTGTCTATTTCCAGTAAATTTCTTT
-AAAATTCTATTTTTGAAAGCAAAAATTATCAAGTTTATCGCACTTTTTCA
-ATTTTTCCGGAGTATATTTTGGTAATTTATCCGAGTTCCACGAAATTGAG
-CAAAACAATTATTTAAAAACTTCCCTTTATTTAGAGCTATTTCCGCAAAT
-TTTCTCGCAATTTTCACGCAATTTTCATAATTCAGGGCTATTTTCAGCTG
-AAAAATTGCAATTTAAAGTTTTTAAAATGTTTATAGATTTTCTCAACATT
-CAGCTCAAAAATTCGATTTTGAGGCGCATTTCCAGGCAATTTATGAGGAT
-TTTTACCTATTTTCTAGATTAAAAATCTTTTTTTTTCCTCAATTTTGGAC
-TATTTTCCCTAATTTTCAAATTTCCAGGCACTGCATCAGTTGAAGGCGTA
-AATCCACCGCCTGGCTACGTTTTCAACAATGGAAGAACCCCAGGACCCCC
-TCAGCCACCTCCACCTCAACAACAATCCCAGCAGCAGCCACCACTAGAAA
-TGCGTCAAATTCCGAATCCGAATCAAATACCCCCACAAATGGTTCAAGGG
-GGTCCCCATATGGTATCTGTAGGCGCCCGGCCAATGATCAGGCCTATGGG
-CCCCGGCGGCCCAAGCCCAATGGGCCTACAAGGCCCCGTACGAGGGCCGA
-TGGGACATCAGATGGTCCAGATGCATCCTCCTCCCCCACCACAGCAGATT
-CAACAGCAGCACCCGGCTCCCCCTGTAGAAATGGAGGTGGAAGAGAATTT
-ACAGCCTACCGCGGCGGCCACGGCCACGAGGCAATATCCTGAAGGATCGC
-TGAAATCGTCGATTCTGAAGCCGGATGAGGTGCTGAATAGGATCACGAAA
-CGAATGATGTCATCGTGTTCGGTGGAAGAGGAGGCGCTTGTCGCGATTTC
-AGATGCTGTTGAGTCGCATTTAAGGGAACTTATTACACTGATGGCCGGAG
-TTGCAGAACATCGGGTGGAGAGTTTGAGGTATTGAGGAGAATTGATTTTG
-CTTCAAAATACGGCAGCGAAAAAAAAATTAAGCAAAAATAAGGAAATTAT
-TGAAGAAAAATCGTCTTAAAAACAATTTTACATTAAAAAAAAAGATTTTT
-AAATTTCAAAGGTTCCGAACTATTTATTAAAAAAACATCTAGATTTTGTT
-TTAAAATCCAAACAAAAAACATTGCTGAAACGCGGTAATTTTTTTTCAAA
-AAAATATAAAAATCTGAGAAATATTTTCAAAAATATCTCCAATTTTCCCC
-TGATTCCGAATATCTATTCGAAAAAATTCAAAAAAAAAATTTCCCTTTAT
-ATTTCAGCTTGAAATCGCTTTGTGCATGCACACCATGAGATTTTTCAAAT
-GCGCGCCCAGATAAATTCTCATTGGGGCGCACTTGCTTCGTGTCGATTTA
-CGGGAGCTCTTCATTTTTAAATTTCTTTTAAGCTTTTTTTTTCAGTTTTT
-CAACGAGTTTCCTTGATCTTCGTCGATTTTTTGTCATTTTTTTTCCTGAA
-ATTTTGTTTTGTGTCAATTTGAAAATTTTTTAGGTCAAAACTCCTGTGTT
-CGTCGAGATCTGACGTAAAAATATAAAATTCCGGGAGTTTTGAGATATAA
-AAAAAATATTTTAAAAATTTCAGAAAAAAAACTGACAAAAAAGCGACAAA
-ATAAAAGAAACGCGCAAAAAAAAAAAAAAAAAACTTAAAAAAGCACGAAT
-AAATTTTTTTAAAAAATGGAGAGCTGCCGTAAATCGACACGAAGCAAGCA
-TAAAAAAATGGCTTTTTTCCTAACAATTTTTTGTGAAAAATCCGAATTTT
-CCATCCTAAACACTACAAAAGATTCCAGAATTCCGGAGAACTACGTGGCA
-ATTGATGACGTCAAACGGCAACTTCGATTCCTTGAAGATTTGGATCGTCA
-AGAGGAAGAATTAAGGGAAAGTCGAGAAAAAGAGTCGCTAATTCGAATGA
-GCAAGAATAAGAATAGTGGAAAAGAGACGATTGAAAAAGCGAAAGAAATG
-CAACGACAAGATGCTGAAGCGAAAAGGAATCGAGATGCGAATGCGGCTGC
-AATTGCAGCACTTTCCAGTAATAAAACTGTCAAGAATAAGTTCGTTTTTA
-GCGTGAAATTTGCAGAAAAATTATTTTTAAAAAATAGATTTAAAAAAAAC
-AATTTCCTGACCAAGGGTGTCATTTTTCGATTTTTCGGTTTTCAAAAATT
-CGAAAAATGAAAGTTTCGTTTTTCGATTAAAAAACTGAAAAACCGACACC
-TTTGTTTCTGAGATTTGGATTTAGAAATAAGCAAAAAAAAATTATTCAGA
-AAAAATTGTTTTACAATGCTGCAAAATCGATGAAAAAATAAAATAAATCA
-ATAACTAATTTCTAAAAAATGGAAAAAAATTTCGTTTTTTTCGAATTTGT
-ATTTCACAAAAAAAAATTTTTAGAATAAAAATTTTCAATTAAAAAATTAC
-TATTTAAAATCACTGAAAAAAAATGAAAAAAATAGAAAATTCAGAAAAAT
-AGCGAAAAAAAAGTTTTTTTCCAGAAATTTCGTTAAAACGATCAAGATTT
-TAACCCTAAAATTTAGATAAAATCAATTTCTTGTGGTTCTTAATTTAAAA
-AAAAAAACAGTACTTTCCAGTAATAAAACTTTCAAGAATAAATTCGTTTT
-TAGTGCGAAATTCGCAAAAAAAATTACGAAAAAGTGAAAATAGAAGCTGA
-AAGGAAAAATGTTTAAAAAATAAGAATATTTTCGACATTAATTGGTTTTT
-ATATATATTTTTTTGTAGAAGTTTAAAAAAATTACTAAAATCACTGAAAA
-AATTGAAAAAAATTTTAAAATCTGGAAAAAAAGCAACAAAAAATTAATTT
-TTCCAGAAATTTCGTTGAACTATTCGGTATTTTAAGCCTAAAATCAAGAT
-ACAATCAATTTGAACAAAATTTGCTTTAAAAATACTAAAAATTCGAAAGA
-AATAGAAAAAAAAAGAAATTTTCGAAATTTGGATTTATTGTTAGAGAAAA
-GCTGAACACTTACAAAAAATTAATTTTTTACGTTTTGAGAAAAATTTTTG
-AAAAAAAAAATCGATTTTTAAATAATTTTTAGAATTTTTTAGAACTATAA
-TTTTTGAATTTCAGTGACTTATAATCACAGAAAAAAATGAACGAAAAACA
-AATGAACATCTTTTCGGCAAAAAAACGTATTTTAAAAAAAAATTTAAATT
-TCTAGTGACTTTGAAAAAAAAACCACATTTTCCAATAATTTCCAGGAATA
-AACTAAATTTCTTTGGAGAAATTTGAAATTTATTTCACATTTCGAAAAAA
-TTTATATAGAAATAAAAATTTATATGAAAATAAAAAATTTGCAGCTCCTT
-CCAGTAATGAAACTGTCATTTGTTGAAAATTAGTTTTTTTTTAATTTAGA
-AATTCTCTTTTCGAAAAAAAAGGTTTTTTTAAAACTTGATTAAAAATTAA
-TTCATTTTTTTCCAAAATTAGGGAAAAAATAATTTCTAAAAAATTAGACA
-AATACACTTTTTTGTTGAAAAAAACAACATTTTCCAATAATTTTCTTTTT
-TTTTAAATTGCTTCCACTAAATTCACTTTTTGAAGAAATTTTTTGAAATT
-TTTACTGAAAATTGTTGGAAAATTATTAAATGTGCATTTTTTTGCAATTT
-CCAGTTGATAAACTAATTTCGGTTCAATTTAAAATAAATTTCGAAAACCA
-ATTTCAAAAAATTCATTTTTTACAATTTGTTTTTGTTGATAAAACGAGCT
-AGTTTCTACCAAAATACCGCTTTTTTACATTGAAAATTTAAATTTCAGAT
-GGGAAAACACGGGCGCCGCAACGACAGCACCTCGTCCACGAACAGTACGT
-GTAACAACTCGTGATCTACATCTTTTAGTCAATCAGGATAGCCGATTCAC
-AGGGTAGCGATTTTTTTTGTTTAAAAAATTTTTTTAAAAAACACCGTATT
-AAACATTGATTTTTATTGGAAAAAACTGATTTAAAAATTTTTCAAAAAAC
-TTTCAAACGAATGGTAGTTTTTAATATTTTAATTTTAAAAAATTCCAATA
-AAAATCAATTTTTATACGATTTAAAAAAATTTTGAAAAGTTATCCAATTT
-TCTCCTAAAAAAACTCATTTTTTTTCCAGAACATTCATCCGTGAAAAGAT
-GTCATACGGTGGTCCGGCAGTCGATACAACTATCTGAACTAAAGAAATCT
-CATGGAAAAAGGAGCGAAAATTCTGCTTTTCTCGTTTTCTTTTTTTAAAT
-TTAATTTTATTTTTCCACAAATTAAAACAATCACTTTTTTCCAGTCAAAT
-AATAATTATTTCTCATTTTTAAACGAAATGCTAGACATAAAAAAAAGCTT
-CTTTTTCAGCTTTTCAGCCAAAAATTTCAGATTTTTCAGAAAAAATTCAA
-CAACAAAAAATTGGCAAAGTGCAAAAAAACCAGAATTAGATATTAAAAAT
-ACAGGAAAAATCGAGAAAAATGAGTTACAATTCAGAAAATTAGGCAATTT
-TTTTTTCAAAATTTCTCAAAAACACTGAAATTTCGGTATTTTTTTCTCTA
-CTTGAGCACAACCTCGTGTTGCACCAATCGAACATAGTCTTTGAGCGTCG
-GTGGAAGTGGAAGCTCATCGATTATTCGCTGATAGACACCGTCGGCACCG
-GCGATTTCCAGATTTCTACGTTGGCGAAGGTGGATGGCGCGCTGGAAAAA
-TTTCTAATTTCGAGCTGAAAACTCTTTTATGAAAGCAAAATTTCATAGTT
-TCAATTCAAAGTTCGAATTCCTCGCAAAATTTCAGTCGGAAAACCGAAAA
-CTAGAAGTTTCTTGCTCGAATTTGAAATTTCGAGGGGTACGGTATCCTCG
-AAAGTACGCAAACACCGAATTTTGTTTTTTTGAAGTTTTGGCGCCAAAAA
-TACAATACCCGGGGTCTCGACACGACAAATTTTTAAAATTTTTTTGAGTA
-CTGTAATTTCAAACAAAAAGTTTTTTTTCGAATAAACTCGAATAATACGA
-TAAAAAACATATTTTAATAAAAACCGTGGCAACGAAAGTTTGAAAGTACA
-GTACTCTCTTCAAAGGCGCACACCTTTTACGCATTTAACTTTCGTGGCGA
-GACCCCGGGGATACCGTAATTTTTGACTCAAAATTTAAACAATAAATCCG
-TTAAAATATTAAAAAATTTTTAGATATTTTTCAAAAAGACTGTCGAAAAA
-TTGTTTTTTTATAATTTTTAGAATATTAACAAACAGTTTAAAAATTCCAA
-CAAATTTTGTTTTTCATACCGAAAAGAAGAAAAATGGACAAAATAGTAAG
-CTATTTTTGTGTGTCAAAGTGTCTTATTTCGGCTTGATCTACGTAGATCT
-ACAAAAAATGCGGGAGAAGAGACTCAGAGTTCTCAACTGATTTCGCATGG
-TTAAGAACGTGCTGACGTCACATTATTTTAAGGCGAAAAAATCCCGCCTT
-TTTTTGTAGACCAAACCGTAATGGGACAGCTTGGCACCACGTGACACCCC
-CCGATTCTCACCTGTTCGTGATTTTGGCGAACTGCCATTTCTTTCAAATA
-ATCGTCTAGCGGGGGACTCGATGCTGAAAAAAAAGTTTGATTCGTTAGAG
-GAGCACAAAATTCTGAAAATGCGTATTGCACAACATATTTGACGCGCAAA
-ATATCTCGCAGCGAAAACTACAGTAATTCTTTTTAAATGACTACTGTAGC
-GCTTGTGTCGATTTACGGGCATCGATAGAATATTTTTAAAAAAGAAGAAA
-AAAGAGGGAATAATACGAAGAAAAAAAGGAAAAAAATAAATTCATTTCAG
-AAATCGAGTTCGTAAATCGACACAAGCGCTACTGTAGTCATTTAAAGAGA
-TACTGTAGTTTTCGCTACGAGATATTTTGCGCGTCAAATATGTTGTGCAA
-TACGCATTTTAAGAATTTCCAGTTTTTTCAAACCTTTAAACTTACATTTT
-CGCGGTTTTTTGGCGCTCTCGGATTTCGGGGAACGTATACGTCGGCGACG
-TGACGTGGTTGAAGCAGGGTCCGTCGAACAACATGGCTCTTCGTCTTCCG
-ATACTTGGGATTCTGTTGATGTTGACGGTGATTCCTGAGGTTCCTCTAGA
-GCATCTGAAAGCTCTTGCTCATCTTCTGATAAATCTCCATTGGGACGTTC
-AACCAGGCCGGTGGTGGAAGGATCATTGATGTTCGGAATCATTACAATCT
-CCATTCTCGGAGTATTTGGAGTTTCTGGTCGAGCTATCGAGGAAAGTATG
-CGATGATGGCGGGGTCTATCATGATTAATCGTCCATTCGAGCACATATGC
-TGGTGCTGGAAGGATTGAAAATTGTAAAAACTAAGATTTTTTGGCCAAAA
-AAATAATATTTTCTCAAAAATTTTGAAATTCTCGACAAATATTTTTTACT
-ACTGCCGGTACAGAGAATGTAGATAGTTGAAGAGACACAGACATCCCGGG
-ACCCAAGGGACGGGGCGCGGGATGTCTGTGTCTCTTCAACTACCTGCACT
-CTGTGCTGGTAATATACTTTTTCCAAAAAAAAAACCTACATTTCGGAAGT
-AAAAATGGAAAATTTCGGAGTCTACACAATTGGAAATTTTAATTTTTAAA
-AAATTAAAAATTGTTTTAATTCGGAGTTTTAGACGGAAAAAATTATTAAA
-CTCTAAAATTTTTAAAAATCGAAAAAAAACAAGTCTGAGAGTGAAAAAAA
-TTAATAAATTTTGAACTGAACATTAGATATTTCGATTTTTTTTTGAAAAT
-CATAAATGTTTTCTCGCAAAATTCGGATTTTTTTTACCTGCTCGATTTTC
-AGTAGCCGGAGCTGTATTTCTGAGATTGGCACCATCCAAATGTGCTCGGG
-GCGCTGCAAATTTGATATGAAATTTCACTAAAAAATTAGGAACTTATACA
-AATTTTCTAAAAGAAATACTAATGTTAAGATAATCGAAAGTTTGGAGTGA
-CAGAAAAAATTGTTTCAGCTTCTAGAAATATTTTAATTTAGAAAAAAACT
-TCCAGAAAATTAAAATTTTTTTTTAGAACTTTTGAACATTTTTCCTGATT
-TTTCTTTTTTTTCCATTTTTTGGAATTGCTGGGAATTTCTCTTTTTTCCT
-TCATCCCACAGCTTCGCTTCAGCCTAGGCCTAAGCCTGAGCCTGAGCCTA
-TGCATAAATCTAAGCCTAAGCCTGAGCCTAACCCTATGCCTAAAACAAAG
-CCTGGACCTAGGCCCAAGTCTAAGTCTAAGCCCACGCTCAAATTTAAATC
-GACTCAAGTAACTACTTTAAAGTTGGCAGAAATATTTGAATTCAAAAAAA
-TTTTTAACCAAAAAAAAAATAATTTAAAAGAAATTGTTTTTTTTAAATAA
-AATCAACAATTCACCTGTAAAACCTTGCATTTCTCTCCAATTCAACATTT
-CTTGAAGAACGTCAGTTCTTGTTTCATTCCATCGACGAACATGATCTGCT
-ATAGTATTTCGAATATTTTGTTCATTGTTTTCTTGTTCTCTGGGATTATT
-ATTACGACCCAAATATTGATCCATGACGTCATCCAAGTGATTACGGGTTC
-TTTGATCTGCTGGGAATATTTATAAGCACTTTTTTAATTTAAAACATATT
-TTTTAGTGATTTTTTTTCGAACTTTTGAATTTTGAATTAAAAAAAAAAAA
-ATTAAAAAGTTAAATCCTGAGGGGAGCCAAGAAGTGGGCGTGTTTTAGGA
-CATACTCTTCACTTACGCTTTGGTCTACAAAAAATGCGGAAAACTTTTGC
-CCAAAAAATGTGACGTCAGCACGTTTTTAATCATGCAAAATCATTTGAGA
-GTTCTGCGTCTCTTCTCCCGCATTTCTTGTAGATCTACGTAGATCAAGCC
-TAAATGAGACACTCTGACACCACGTGGAAAATAAAAATCGAACATTTTCA
-AAAAAATTACTCAATTGATTGTCTGCTGGAGTTAGTTGGTCGATTCTGAA
-AAATATTAAAGTACTAAAAATTTTCCTTAGCAACATAGCGCGTTTGCATC
-AAGAAAGGCGGGATTTTTCTAAGCCCGCCCTTTAATGGATCATCAATTTC
-TAGGAAAAATCGATATTTTACACTAAAAGTGATCCAAGAAAATCAATAAA
-TCGGAAAATTTTCCGATTTTCCGTGCTTTTTTGCGAAGATTTATCGAAAA
-TGATTTCCATTAGAGCACGCTTGCAATTTTTTTCACCAATAGCTTTCAAA
-TTTCTTACGGTCTTGGATCAAAAAGTTGTCGACGCCGATTCAACTCTTCG
-AATTGTTCAGCTTGATGCCTTTGAACATGATCCATATACGTATTTCCACC
-TTTCATCACCATTATTGATCCGCAAATCTGACGATTGACACGTGGATTGT
-AGGCGTGTCGGCGAATGTCGCGGCGGAGTGCCTGACGCGCCAAGTAGGTC
-AACGTGCGGGGACCACTAAAAAATCCGGGTTATTGTGATTTCGTGGTGAG
-ACCCGAAAATAGTAGAATTTCCTCGTACATCCTGTGCCTAAGCAGGTTTT
-CAGTTTTTGATGGGTTGTTACCTTCATACACCTACCTGCCTTTGTGACTG
-CCTCCCTGCCTGCCTAAATGTGTGTATGCCTACCTACAGTCTGTTTATCT
-GCCTCAACGCCTTCATACCTACTTGCCTACCTTGCTTACATACCTGCCTA
-CGCGACTACCTATCGGCCTACCGGTTGGCAAGTAGGAAGGCTAACAGGTA
-GGTAAGCTGGCAGGCCTGAAATTTGCAATTTTTGCGAAAAACCGAATTAC
-CTTTCGAAAGGCGTAGGCGTTGAGATCCGTTCCTCCTTCGGAAGCCTGAT
-CATTGGAGAAAATGTCATTCTTCCAGGGACGTCATACACAGTACGATGCT
-TGGAAACTCTTCTGTATCGGCAAACCTGAAAACCTTTAAATGTGGAGGAG
-CCAAGAACTAGACGGAGCCTGTGTAAGGAATATTGTTTCCGGAAACACGG
-ATTTTCAAATTTTAGGCTCCACCCACTCACCACGCAAAATTTCATTTTTG
-GCCCAAAAAGTAAATGTGCAGAAATTGTATTTCAAATTGTAGAAAAACCA
-AGAAATGGGTGGAGCCTGCCTGCCTGCCGGGCTCCGCCCACTTCTTGCCA
-AACCATACCCCCTGTATACGTGGCATGACGAGTTGTCCTCCAACATTCAA
-CATTCCAAGCATTCGTTTCAACAACTGAGAATCATCGGCAACGAATCCGA
-CAAAAATTCGATCATATCGATTTTGATGAGCTTCAAGAAATTTGACATCG
-GTGATGTCGCACACTTTGAGCTCCGGCCGAGCCCAGCCGACAGAGCTCGC
-TTCGGGTGTAGTTATCCATTGATCAATGCATGTTTCCGAGTAGGTGACGA
-GATTCTCGTAGAGTTCGATCCCATGATTTATACCAGTTTCACCTTAAAAA
-TAGGGTTGTCAGGCCACGCCCATTTTTAAAAAATGAATTAAAATTTTCTG
-AGAAAAAATTTCAAACTTTGGTGGGGCATTAAATTTTTTCACATAAATTT
-TTTCGGCGGTAAATTCAAATTTTTTAAAAAATTTCTTTTTTTTTTGGCGG
-GAAATGTGCCGCAAATCAGAAAAACTGAAATTTCTACAAAAAAAGTTGGT
-GGCCGAGTTTTCTCATTTTGTGGTCAGAAAACTCGGCCACCGATTTCTTT
-TGCGGCCCTGTGATTACTTAAAAAAATCGGTGGCCGAGGATTTTTATTTT
-CGCGGCCACAAGTAATGAAGATTGCACAAAATTGATAATAGGGAAAACGC
-GGCCACGAAGTCTAACATGTGCCACGTGGCCGTTAAAAAAAAGCCGGTGG
-CCGAGTTTTATTATTTTTCTAGGCCACGTAACCAGAACTCACCCAATAAA
-ATGCCAGCAATCGTACTTAAATACCCTGAACCAGTTCCAATATGAAGAAA
-CGAGTGTCCTTTACGCAAATCCAAATAATCGAATAATTTCGCATAAATAT
-CAATTGCTCCAACACGAAGTGCTCCCGGATAGAATGGACCGCCCGGTTCT
-GTGGAGGTCAACGACGGAAGACGTGTAAATTTCCGTTCACTAATCGGAAG
-AAAATCGGATCGATCGACAAGTCGAAAGGCTCGTTCGATGTTTCGACGAC
-GGATTGTGTCGTTTTTTACGAGAAAATCGATAAGATCGTCGTTTTGGCTT
-TCACTATTGCCCATTTCTGGAAAATCGATTTTTTAAAATTTTAGATTTAT
-TTATTGATTTTAAATAAATAATTAGAGAGCAGTCATGTGTTTTTCCTTGT
-ATATTTACGAGAGAAATCTCAAAAAATTATTCAAATAGGAAATTTTACGC
-CAACAATAAAATGTAGAGTGGTGTGCGCCTTTAAAAAGTACTGTAATTTC
-AAACTTTTTGGCGCAAAATTTTAGAGTAGTTTTCTTTAAATTAAAAATTC
-AAAAAAAAAACAAATCAAGATAAATACAAAAGTTTGAAATTACAGTACTC
-TTTAAAGGATCACACCATTTTGCATTTAAAAAAATTTGTCATGTCGAGAC
-CGTAATTTTAACGCAAAAAACGTGAATTTTCGCGTCTGTGTAAAAGAAGT
-TAGTTAAGGAGAAAAAACAATTGAAAAATCAACAAAAATTGAACTTTCAA
-CGGAAAATCAAAAATCGTTGCGAGTCAATAATTTTTTAGCTTTGAGGAAA
-ATAACCCTTAAACTCAAAAAACAATTAATCGACTCAACATCAAAATTTCG
-TTACAAGACCCAAATTAAAATTTTTTATTTTGGGATAATTGCTCCTAAAA
-TTAATAAATTCCAGAGAAACGAGTAAATCGTGGCGAGACCCACTAGCGTG
-TACCTTTAATTTCGAAATTATTTTGGGCTGTTCATCACGAACACACGTGT
-TGCCTAGCTACCAAATTCAAAAAACGAAAAACAAAAAAAACAGGTTTCTT
-TGAAATGAAAAATCGATAATCAGCAACGTGGCAAGATGTCTCAAATTATT
-GGAAAAAAAAAACGTTGAAATTCTCAGAAAACGGACCGTTCTGTGGCAGA
-ATTGTGAACGGCGTGCAAGGCCACGACCCGTGGAGAGCGCGTGAGAGTGC
-AGAAAAAAGGAGGCGAGAGAAAACGGCTGACCCGTGGATAGACTTTGTGG
-ATTCAGGAGACGCAGAGCGACCGTGAGAGACCCAGAAATATATGCAGAAA
-GTTAAGGCGTGCAATAGTGTTGGAAATTATAATAAATGGGTACGGTAGGT
-ATGACCTTTCGGGATCTTTGTGGGTCTCGCCGCGACGAGTTTTCAAGGTG
-CATAAGGTTTTTGCGATGGGTCTCGTCACATAATTGTAGATTAAAATTGT
-TGATTCGAGATAAATGGAAATTCGAAGCGTCTAAAACAGTTAGAACTTTT
-AGTTTACATTAGGTTGAGCTCAACTGTCCAACCCCGTCAAACTTTTTCCA
-CTTTTTTTTTACTTTTGCCTTTATGTCCTTTTCGGCCGTTTTCCTGGGGG
-TTTTTACCAGACTACGAAATATCCTAACTTGGTAAGCCTCAGCCTAAGCC
-GAAGCCTAAACCTTGGCTTTCAACTATACATACACATTTCCTCCTTTTTA
-AACGATATTAATTAATTTACAAAACACCAAAAAAATATACAAAAAATGAT
-TTGAATTTATGAGTTTCCCGCTAAATACCTACCGAGACCCAACTTTTGGC
-CGTGGAGCGCGCTTGCACTTAAACTTCAATTTTTCACATCCCCATAATAA
-CTTCCTTGTTTTAAATTGTTTTTCCCTATATTATTATTATCCTTATCACG
-AGATGCCCTTGCAAAACACATTGTAAAAATAGTATTCTCAACTGATAATA
-ATATTTTGTGTACCCCACGATAGTCCTTCTGGACCATAAAAATATTGATA
-ATTACTGATAAGCTTTCTCTGTGGTTTCTGTAGTTTTGGTGATATTTTGG
-GCAACAAATTTATATTATGGAAACACGGAATTCTGAAAATGCGTATTGCG
-CAACATATTTGACGCGCAAAATATCTCGTGGCGAAAACTACAGTAATTCT
-TTAAATGACTACTGTATCGCTTGTGTCGATTTACGGGCTTGATGTTGGAA
-ATTAATTTATTTTCGAATTGTGACAGCGATATTCAGTTTTCCTTTGTTTT
-TTTTTTTCGTATTATTTTGTTATTTTTATGCTTTCTTTTAATATTTTATC
-AATTAATGAATGATTTCCGTAAATCGACACAAGCACTACAGTAGTCATTT
-AAACAATTACTGTAGTTTTCGCTTCGAGATATTTTGCGCGTCAAATATGT
-TGTGTAATACGTAAAGAAAGTTTGAAATAATTGTTTTTAAATAATTTCTT
-ATTCATTCACTGTCAATTCTCACCGAAAAAAAAAATCCAAGTTCCTCCCG
-CCAACTTGGCACGATGCCAAAAGGTTCTCAGGCCCATTCATGTCATTCAA
-TCCATTCAAATGAACGACTTTTCGTTCAGTTTAGGCTTCTTCTTTTTCCG
-GTTTAGTACTTTTTCAAACCGAAAAAAAAAATCCCAAATTGAATGCAAAT
-GTGCTCTATTTGGAATAGACTTCACCCTATTTCGGAATTTTTTCCGATTT
-TCTGAAAATCTTTAACACTTTTCTAACTGTTGCATTAATGACATTTTTCT
-AGAAATTCTACTGCAAACGCGCTCAGTTGCGAAAGTTTTTGGGTCTCACA
-ACGATTTCGGAAGAAAAACGTTTTATTCGTTGCGAGACCCGGAAGAGCCC
-GGTGGAGCGCGTTTGCAATTTTTTTGGTTTGAAAATTTTGCGCAACGATG
-CTCCAAAATAACACCTCGCGAATTTTATCGTTTTTTTAAATTATGACTTT
-TCCGGTCCCAGAACGAATTACAAAAGCAATTTTTATGAAAAATCGTTACA
-AGACCACAAAAAAAAGCGCAATAGAGCGCGTTTGCACCTTTTTTTCTTGG
-AAAAGTCTCGTTTTTTTCTCGGTAAATTCACTGTGACATTGACCTTTCTC
-GAAAAACGAAAAGTGTAATGGAAAGTGAACAAAAGTGACAATAATCTGGT
-GAATTGCGTTTTGTTGTAATATTTTTGTATCTTCTTTTCTTTTTTTAATC
-TGCGAAAAATAGAAAAGTTTTGGAGAGAAAGTGATTTTCGACGAAATTTT
-CCTGATTTTGCTAAAATTGAACAAAAATTGTCATCATTTTCTGTGGGGTT
-TCTCAAATGTTTTCTTAAAATTTATGCGCCTTTAAATTTGGGGGATTACT
-GTAATGTTTGTATTTTTCAATTTTGTTTCGGGAACACAAAATTCTGAGAA
-TGCGTACTGCACAATATATTTGACGCGTAAAATATCTCGTAGCGAAAACT
-ACAATGGATTAAAATTTAATGAAATATCGTTATCACTATTCGAAAAGAAT
-TTCATTATGAAGCCCGTAAATCGACACAAACTCTACTGTAGTCATTTAAA
-GAATTACTGTAGTTTTCGTTACGAGATATTTTGCGCGTTGTCCCCGTAAT
-AGTTTAACTTTTACCACGTGGCCGCCAGAAGAAAAACTTCTGCTACCGGA
-TTTCATTTCCTCGGCCACAAACCCTTTTGACCCCCGAAAAAGTACATAAA
-AACAATTCCGGGGACTGGGTCTCCAATCTCTCGCCCCCACTCACTAACAA
-GGGGGACACCCTCAGAAACGAATGCCGTCTAACCGTCTGCACCCTCTCTC
-TCGTCGCTCCAAATTCTTGGATCAATGCCAACTAACACGCAGTGTCCCCC
-CTCCTCCTTCATCCACCCAAATGTTTCATCACTTCCCGGCCACCGCAGGC
-TTCTCTCTCTTTCTCTAAATCTCTCATAAACTACTGTCTCTCTCTCTCTG
-CTTCTTTTGCTCAATTGTTCTTCTTCATCACTACTATTTGCTCAATTTTC
-GTAAATATTTTATTTTAAAATATCCCTTTTTCCTCCCCCCGCCTCTCTGC
-TTCTCGCTTGACGCGCCACATACACTAAAAAAACCGGTTTTTTCTATCTC
-TCTCCGCCCGATCATTGAATAGATAGTGTGTGCTGTACATCAAATTTCCA
-TGGAAAAATCGCGCCGAAATTCCAGAAAATTCCACTTTTTCTAGAATTTT
-CAGCGATTTTTTTCGGTTTTTGAATTTAATACAAAGCGAAATTCCGTGAA
-AAATTAATTTTTCCTCAATTTTTGACGAATAAAAAATATTAGTATTGTTT
-TTTTTTCAAGAAAGTGTGATTTTTTCACAATTTTCTATGGTTTTTACGGA
-GAAAATCTTGAAATTCCACAGAAAAACTTGACAAGTCTTTGAAAATTAAT
-AAAATTTCACCGTATCTGCCGATCGTTGCAAGACACACTCCACAAAAGAA
-GTCGTGCGCCTTTAAACTGTGTACGGTAACTATATTGATTTAATTTTTTT
-TTTCGATTTTGCGTCTATTTTTCCAATTTTTCTCTGATTTCGAACGATTT
-TTTGCATTTTACCTCAAAAAAATTAATTTATTTAGATGATAAAGTGGAAA
-TTGCTGATTTTTTACAAAAAAACACTTAAAAAACGAGTTTTCTCATCAAT
-TTCAGTTGTTTCTGGCATGGCTCATTGTTTATCGACACCTGCTTGTTTTT
-CTCCTCCTCTCCCATCAATTTTATGAGTTTTTCTTCGAAATTTCTCCATT
-TTTCCCGTTCAAAAACCGCCAAAATTCGCTTTTTTTTTTCCAGAATTCGC
-CTACTATAGCACTACTAGATGTGTTAATTTGGAATTATTTTTCAAAAAGA
-AATGTATCCGGACGGGCTAACTGAAAATGAGAAGCTCAAAGTGAAGGAGC
-TGTGCACTATGGTCAATATATCCGATGAGGATGCGATTAAATTGTTAAAA
-GGTGGATAATTAAGCTGAAAAGTGGAAAAAAAAATGCATTTTTTACCTAA
-AATTTACCTAAAAATTGGACCAAAACGTCATAAAAATACTGAAAAGTCAG
-AAAATTGTCTAAAAAAACTAATTTTCGCTAAATAATTCCAGAAAACGACT
-GGGACATTGCAATTTCATCGCGAAGAGTGTCGAAACAAGAGGATAAAACA
-TTGGTTCCGGGCACTTCGAGAGGTAAATTTTTGAAAATTTTCAGAATCAA
-ACTGAAAAATAGATATATTGTGTGAAAAAATCCATTTTCGCCGTAAGAAA
-AGTGAATTTTGAGCGGTTTTTCAAATTTTAAACTGAAAAAAAAAATCAAT
-TTATCTGAAATTTTGCTCTTTTCGGCGGGTTTTTTCTCAAAATTTGATGA
-AAAAGTTCTAGAAAAACGACAAAAAAGCCTTTAAATGTACTTTTTTCTGC
-GATTTTTTATCTTAAATTTAAAATTTTGCGCGTCAAATCTGGTGTTTTGA
-CTCCGCCCACTAAATTTAAACTTTTCGTGAAAAAAAAATGTTTTTCTCCG
-ATTTTTAATTGTTAATTTAGGCAAAAAAATACAAAATTTGCCCAATTCAC
-CTATTTTTTCCAAAAAATCACAAACTTTGCGCGTAAAATCGGGTGTTTAT
-GCTCCGCCCACAAAAATTTCTTAGAATTCGATTTTCGGCGGATTTTTTCT
-CAAAATTTGATGAAAAATCTGAGAAAAACTACAAAAAATCTTTGAGCTTT
-ACTTTTTCTCTGCGATTTTTATCTAAAATTTGAAGTTTTGCGCGTCAAAT
-CTGGTGCCTTGGCTCCGCCCACAAAATTTGAAGTTTTCGTTTAAAAAAAT
-GTTTTCACCACTTTTTCGCCGCTTTTTCGCCTGAAAAATCCCAATTTTTT
-TGCAGAAGAAATCGATTTGGATCGATTATCGAGTCGTCTACGTGTTCACG
-GATTAGCCTTCTATCTTCCAGATTTTGGAGGTTTTCCTAATGAATTTCGA
-ACGTTTTTGGAGAAGGATTTGATAGAGACGCAGACACAGAAGAGACTGGA
-GGCGTCCAGTAAGTTGTTTTCTGGAAAAATTGAAAAAAAAATTGAATAAA
-AAAAATGATTTTTTTAATCGAAAAAAAAAGTTTTCAAAAATAAAATTGGA
-AAAGGTGAAAAAAATTGAACAATTAAAAAAGAGCGACAAATGAATAAAAA
-AAAACTTTTTTTTTTTCGAAAAAAAAGAAAACAAATGTTTTTTAATCGAA
-AAAATAAAAAACGAAAAAAAAAGGAAATTTTTTTTACAATTAGAAAAAAA
-AAATTAAAAATGTATTAAAAATTTTTTTTTTTGACATTTTCTTTCGCTTT
-TTAATAAGTTTTGACTAGCGGGCCCTGCGGGCCCGCCAGTTGCAGGGGGT
-GTAGGGCGAGTCCCCCAGTCGGGCGTAGGTTCTCGGCTTCGCCTCGAACC
-TGTCAGAGGATTCGCGACAATTGCAGTGAGTCAATGGGAGGAGGGGAGAC
-CCACTCATATTTTATAAAATCGAACATTTCTATTTGAATCCCGAGCACTC
-ACAAAAAAACGAAAAAGTTTGTCAGTTGGGGGAATCGAGCAAAAGAGCAA
-ATTATTCACAGCCATACGCACTAACCACTCGGCCATGCGGGAGAGACCTG
-TCACAGAAATGTAGGGAAGGAAAATTTCTGGGGGGGGGGGGGGGGGGGGG
-AGTTGTCTTTCGATTCCGTTTTATTCAATAATGACAATTTGGGGAAAGAC
-GTTTGAAAACCGTTTATCACTGATAAGTCAGCAGGAAAACAATTTTTTGA
-AATTTTTTTATAGCATTGTACTCATTATTTAATTCCCGAAAGAGAGCCGA
-AAAGTTGAAGGTGTTATCTTGTAAATTGGTTTATTTGAAGAAAAAACAAG
-TTTTGGCCTGAAAATTTTGAAAAAATAATATCTCTTGGCAGAGCATTGCT
-AATGCGACGAAACTCCAGCTTCCATTAGATAAAATCAAAAACTATGAATC
-AGAAATACATTCCGCAAAACTTTAGTGGAAAAAATGTTCAGGAGACCCAG
-GAAACCACTCCCCCCAGTACTAAATTTTTGAATTATTTTTTCTTGAAAAA
-TTTTCCCACTGAACTTTTTACAAATTTTATATGTCTCGATGCGTCTTGAT
-GAGACCTACACGTCAATTTTTGGAAAACTAAGAAAACTTGAAAACTGACC
-GAGTTATGATTGAAAAAGTAGATTAGCAAAGATGGGAAAGTGTGCAAAAT
-TTGGCACTTATTCGTCTTGCTCGGCCGACTCATAGTACTTTTTCCAATTC
-TGAGTTAAAAATCGTGTTCAGCGTACTTTTGTACGTGGGATAAAGAAAAA
-AAATATCAAAAAAGATGAAGTAGAACTTGAGATAAAGACGAAAAACTACT
-TTTTCGGAAAAAATTTTTTTTTGGCAAAATGGCATTTTTTGGCCTTTTGT
-TTTATCACAACTTTTTGCCTTTTGCACTTATGAACTCAAACTTTCTTTCA
-AAAAATCCACCTCTCTGAGTAGTATCTTGCACATAAATTTGGAACAAAAC
-CGAGCAAAACCCGAATTTTAATTCAATTAAAACATGGTTTTTTGGGGGTA
-AAAAAAGCAACAAAAAATTTTTTCAAACTGGGGAAAGCCGCCCTGAGCTC
-AGTTTTGCTCCAAACTTTGTGCAGTTTTTTGCTCCCCCGTGGGGTGAAAT
-ATTTCTAGTAAGCTGTCAAATATTACAAAATTCAGTCAAACGGCTCTGGA
-GTTATTAATGAAAACGCAGTGTGACATTTTTTCGCAAGCCAAAAAAAACG
-CGAAAAAACGCGAAAAAGGGGCGGAGTCTGTACACTCGGCATTTATTAGA
-GGCTGCTTGGCAGATTTTGAAATATCGGAAAAACTTTAAAAGTTCTTTTT
-TTTCCAGGACACCTAAACTGGTGGCATCAATTCGGCCAAAAACTCTACCC
-GCTATCAACTACTGGAGACGGAAATTGCCTTCTTCACGCCGCATCGTTAG
-GTAAATGGTTTTTCAGAGCGAAAAATCGGAAAATCGCTAAAAACTTACTA
-TTTCCACTGAAAAAATTGTAGAGATCGCTCAAAATTTCACTATTTTCTGA
-ACATTTTGATAAAAAACGACAAAACTATTTCAAAACGAGCCCCGAAAATT
-GTTTTTTTACTAAATTTTTTTTGGAGAAGTGCAAAAATTTAAATTTTTGA
-ATTAAATCTTTAAATCTTCAACAAAATTTAATCGTAAATTTTCAGGTATG
-TGGGGAGTACATGATCGTCAGCTATCACTTCGTGAAACTCTCTACGAACT
-TCTTACAAATGGCGCCAGAAAAGAAGCAATCCGACGGCGATGGAAATGGG
-TTGAGAATCATATGAATCAGGTAATTGGCGAGAGAAGAATCTGTGAAAAA
-TTTCTTAAAATTCGGTGAAAAATGATCAAAAATGAGCTGAAAACCGGTCA
-CGTAGTTGAAATCCGCGGAATATGAAATTCCCAGAGGAAACAATTTTCGT
-GGATTTCAACTTCGCGAATTTTTCTCAAAAAGCTTGAGTAAAAACTCACG
-GAGTTGAAATCCGCAGAATTCGAAATTCCCAGAGGAAACAATTTTCGTGG
-ATTTCAACTTCGCGAATTTTTCTCAAAAAGCTTGAGTAAAAACTCACGGA
-GTTGAAATCCGCGGAATTCGAAATTCCCAGAGAAAACAATTTTCGTAGAT
-TTCAACTTCGCGAATTTTTCTCAAAAAGCTTGAGTAAAAACTCACGGAGT
-TGAAATTCGCGGAATTCGAAATTCCCAGAGAAAACAATTTTCGTAGATTT
-CAACTTTTCTAGATTTTTTGCCAATTTTTTATTACATGTTACAAAAAAAC
-GGCTGTAAATACTCACGGAGTTGAAATCCGCGGAATTCGATTTTTGTAGA
-TTTCATCTTTTCCAGAATTTTCCAACAAAAAAAACCGGAAAAAATTATCC
-GACACTCCATGGAATCTAGTTTTCGGAGATTTCAACATCGAGAACTTTTT
-TCGCACATTTTTTTGCATTTTTAAAAAATTTCACCAATTTTCCAATTAAA
-ATTTTTTAAATTTCCAGAGTAACGGTCTCGCATTGACCCTCTCGGAAAAT
-GAATGCTTGAGTAAAAACTCACGGAGTTGAAATCCGCGGAATTTGAAATT
-CCCAGAGAAAACAATTTTCGTAGATTTCAACTTCGCGGAGTTTTCTGTCA
-ATTTTTTGAGATTTTTTCTCAAAAAGCTTGAGTAAATACTCACGTAGTTG
-AAATCCGCGGAATTCGAGATTCCAGGAAATTCGATTTTCGTAAATTTCAT
-CTTTCCCAGAATTTTCCAATTAAAAAAAAACGGAAAAAATTATCCGACAC
-TCCATGGAATTTAGTTTTCGGAGATTTCAACATCGAGAACTTTTCTCGTA
-GATTTTTTTGCATTTTTTAAAAATTTCACCAATTTTTCAATTAAAATTTT
-TTTAAAAAATTTTCAGAGTAACGGTCTCGCATTGACCCTGTCGGAAAATG
-AATGGGAACTCGAATGGGATGTTGTACTCGGATTATCATCTCCATTACCC
-CGTAAACAAGAGGATAATGGCTCAAATTCCACAGATCAAATCTACGAGAG
-TCTTGAGGCAATCCACGTGTTCGCGTTGGCTCATGTGCTCAAAAGACCAG
-TTGTGGTTGTATCGGATACGGTAGGGAATTTTAAAATTTTTTAATTCTTC
-AAAAATTTATTGAAGAGAACAGTAACAAAAAATTTGGTTACTTGTGAATT
-TTACAGAAATATAGAAAATTTTAATTTAAAAAAATTTCGAGATTGGTGAG
-AATCAAGGGTGTCAAGTCCCGTGTCCCGTTTGTCCCGTTGTCCCGTTTTT
-TGAGTGTTTTTACGGGAACGGGACGTCTTTTGTCCCGTTTTTGAGCGTTT
-TCACGGGAACGGGATGTCCCGTTGTCCCGTTTTTTGGGTGTTTTCGCGGG
-AACGGGACGTCCCGTTGTCCCGTTTTTAAAATTTTCACGGGAACGGGACA
-TCCCGTTGTCCCGTTTTTGTCATTTTTACGGAACATTGACACCCTTGGTG
-AGAATAAAAAATCAATAATACACATAATTTTTGGAAGAAAAATCGATTTT
-AAAAATGAAGCTTAACATTTTTTTTCGAAAGAAAAAAAGTGTAAGAAGTT
-TATCAAAAAAAAAAACATTGAAAAAAATATCTTCAAAAATGTTCAATTTT
-GTTTTAAGGTGCAACTATTACAAGAGCACACAATTCTTAGAATACGTATT
-GCGCAACCTATTTGACGCGCGAAAACTACAGTAATACTTTAATTGTCTAC
-TGTAGTGCTTGTGTCTCGATTTACGAGCTCGATTGATAGAATATTCAAAT
-AATTTATTTATCGATTTAATATTCAAATTAGGCAAAAAATGAGAAAAAAT
-ATACATGTGAAAAAATTAATTTTAAAAATAGAGCCCGTAAATCGACACAG
-TAGTCATTTAAAGGATTACTGTAGTTTTCGCTGCGAGATATTTTGCGCGT
-CAAATTTGTTGCTTAATACGCATTCTTAGAATTTTGTGTTCACATAATAC
-GGTTTTTCAAAAATTTTAAATCTTCATAAAATTCATCAATAATAACTAAA
-ACTTAATCAAAAAAAAATTTAATTTTAGTGTAGTCATCAGAAAAAGTCCA
-TCAAAAAAAGTCCATCAAAAAACCATCAAAAAAAGAAAATTGAAAAATTT
-GAATTAAAACATTTTTTTCGAATTTTTGAAAATAAAAGTGTTTGAATATT
-AAACGTAATTAAAAAAAAAGATTTTCCTTTTTTAGAAAAATCTATTCATA
-TTAGAACAGTCGATTTTATAAAAGTATCGATTTTTTTATTAATTGGATTT
-TTTGTAAAATAATAATCGATTTTGAAAATAAATTGCTTAAAATATTGTAT
-TTTTTGACAGAAAAAATGTAAAAAATTTATCAAAAATAAATAAAATTGCA
-AATAATTTTACCTACAAATTAATTGTTTATTAAATAAAGTTTAAATAAAT
-TAGAACAGGAGTAAAACGAGTTTTCAAAATTATTCTTTAAAATCTCGGGT
-TCTTTTAATTCAAAAATTCTTTTAAAAAAAACTCAATAATTACGGATTTT
-TCAAAAATTCGAAAAATTCAGAAATTCAGAATTTGGATAACATAATTCTA
-GTTGACTTCCAAAAAAATGATATGTGACTTACTTAAGGTACAACTAACAT
-TAATTTTCCAAAATTCTTATGGCTGCTTTAAAACACGCCAATGGGGTCAT
-AATGACCGAATATTATGTTTAAAAAAATCAAAAAAAATTTTCTGATTTTA
-TATGATTTTTTGAAAATTGGAAAAATCACAGTTTTAACCTAATTATTTTT
-GAATTTCTGCCAATTGGATTTGTTCGGTGCAGCGCGCTTGCATTATTTTT
-ATTTATTTATTTTATTTATTCTCGTTATTTCACTGATTTTCTTCATTTTC
-TATGTTTTTTTTTCTCGGAAAATGAAAGAAATAAACAAGACAAATGCGAA
-ATGTTTGTTAAAAAGTAATTGAAAATGCGTAAAACTGTGATATTCTGAGT
-TCCGACGACGAAGAGCCTGAAATTAGTATATTTTTCAGTTTCACTCATTT
-TCAATTACTTTTAAACAAACATTTCGCATTTTTCTTGTTTATTTCTTCCA
-TTTTCTGAAGAAAAAACATAGAAAATGAAGAAAATCAGTGAAATAACGAG
-AAAAATATATATAATTCATTAAATAAAAATAATGCAAGCGCGCTCCACCG
-AACAAATCCAATTGGCAGAAATTCAAAAATAATTAGGTGAAAACTGTGAT
-TTTTCCAATTTTCAAAAAATCATATAAAATCTAGAAAATTTTTTTGAATT
-TTTTTATCATAATATTCGGTTATTGTGGCCCCATGGGCGTGTTTTAAAAC
-AATTTCCCCACTGAGCGTAGTCCACCTTTGAAATGTTCTCAAAAAATGAA
-AAAAAAACGAGTTATAAAAATTATTTTTTAAAAATCCAATATTTTAAATT
-AATTTTTTTTTGCAGATTCTGCGAAACGCGAAAGGCGAAGAACTGTCTCC
-AGTGGCTTTTGGTGGAATATATCTTCCATTAGAATGCCCACCATCACAAT
-GTCATCGTTCACCACTTGTTTTATGCTATGATTCTGCTCATTTCTCACCA
-CTTGTACTCATGAGAACAGAGACTAACAATAAACGTAAGCAATTTTTTTT
-TTGAGAAAAAATATTTTCAAAATCATTTTTTAACTGAATTTTCAAATTTC
-CCCCCCCCGTCCCCCCCATTTTTTTCGAAAAGTGAATTGGAATTTTCCTG
-AAATTTGCACAAATTTTTTTTTGAAAATTCAAATGTTCGTCAAATAATTA
-TTTTATTCGAAAAATCGACATTTTTCCAAATTGTAATATTTTTATTCTAA
-AAATCCAAAATTTGATTTGGTAAAATTTCTGTCAACAATCAATTAAAAAT
-CCAAAATTTTCAAAAAAATTGTGATTTTATTCGGGAAATTCGAAATTTCC
-TATTTAAAATTGGATAAATCTAAAAGTTTTCGATTTTATAATTTTTAGGA
-AAACAAGTTTTCAAATTTTTTTAATTATTAAAGTTTTTTTTTGCAATTTC
-ACTAAATGAGCCAAATTTTAAAAGTGGAGCACCGAAATTTGAGACTTTGC
-TTTTTTAGACTCAAATTGGTCCAAAACTACCGAATTTTGTAATGATACAT
-TCTGAAAATTTCTCAAAAAAAAGTTATGGCTGTTTAAAGTTCGGCAAAAT
-AAGGCCCATTTTCAGCTAAAATCAAAATTTTTTCCAACTTCTAGGTGTCG
-CAACGTCTGGACCCTAATTTTTATTTATTCATCACTTTTTAATAAATATT
-GTGGCCTTTGATTGGGCGTTTAATCGTTGTTTTAAGTACATTTATGATCT
-TTGGAGTACAAATAAACGTTACATTTTGTACCCCAAAGACCATAAATGTA
-TTTAAATCAACGATTAAACGCCCAATCAAAGACCACAATATTTATTAAAA
-AGTGTTGAATAAATAAAAATTAGGTTCCAGACGTTGCGACACCTAGAAGT
-TGGAAAAAATTTTGATTTTAGCTGAAAATGGGCCTTATTTTGCCGAACTT
-TGAACAGCCATAACTTTTTTTTGAAAAATTTTCAGAACGTTTCATTACGA
-AATTCGGTAGTTTTGGGCCAGTTGGGTCTAAAACAGCAAAGTCTCAAATT
-TCGGTACTCCACCTTTAAAGAATTCATATAATTTTCTAAAACAACATATT
-CTGATTTACAGAAATACATTTAATATCAATATGAATTATTTGAAAAATCA
-AAAAATTTATATTTATTTTCAGAAATAATTCCGATAATCGATGTGAACCG
-TAACCTGCTGCCTGTCCATTTTGCAGTTGATCCAGGAGAGTCATTCGATT
-GGTCCAAATTAGAAACAAATAGTAATACACAGACAACTACTGATATGTCA
-CAAATTGATAAGCTTGCGTTGATTAGTCAATATATGGATATTATTAGGTA
-AGAAAATGAGAAAAAGGATTTTTTCAATTTTTTTTTCTAAAAAAAATATT
-CAAAATATCGTTAAAAAGCCAAAAATGTGTACGTTTTAATTTAAAAAATA
-TTAAAATTTTTTTGTCCCAAAATTAAAATATCGAAATCAAAATGTTTCCG
-ACATTTATATAGAAATTCTGGAAATTTTTTTAAAATCGAAATCATATTTT
-GAATGAAACTACAGAAAACAGCGCCAAAAAAGAAAAAAAATCGTTTTTTT
-TTTTCGAATCTTTCATTACAAATATTTGAAAAAACGATACAATTATGTTT
-CGCGAAAATTTTTTAAAAAAACTTTAAAAAATTATTAAAATCAGCTATTT
-AATCACAAATGAGAAATATATCGGAAATCTGGAAAAAATTAAAAAAATTT
-TTTGCGTATTTGTCTGAATTTATTTTACAAATACCAAAAAAAAATCAATT
-ATTGTTGGAAAAAATTGAAATACAACGGAAATCGAATTATTTTTATTTAA
-AAAGAACGAAAAAAAATCCAGAAACCATCACAAAATTATTGGAAAACGAG
-AAAGCTGATTTTTCGCTAAAGTTCAAAAAAATTTACAAAAAAAGAAAAGT
-ATTAAAATCGGTAATTTTCCCAGCTTGAAAAACTGAAAAATTCGAGTTTT
-CTAAAAAAAATTAAAAAAAAAAATCAAAATATTCCTCAATTTTGGAAAAT
-TACGGAAAAAGTAGTTTTCTTTAGCTTTCGGCCAAAATTTTATCATAAAA
-ATTTCCGGAATGCATAGTTTTAGAGAATAATTTTAAATTGAAACACTAAA
-TTTTTTAAAAAACTTTTTTTTTTGAAAATCCCGGATTTAAAAAAAAATAA
-AATTTGAATTTCATATAAATATTTTGTTAGGAAAAATAGTTTCTAAACAA
-AAATTTGAAAAAAAAAATATTTTTTTTTTCATATTCTTTGAATAAAAAAA
-ATCTGAATTTCGAAACATTTCAGATTAGACGTTCGTCGTGGCTCAATCCG
-TAGCTCGCGGAGAGTTCGAAGTGCTCACGCGCAACTTCTCACCGAATCTC
-GTGGTGAAAATGGGCAAAATTTGCCCCAAAAATCAATTAAACCAAGAGAT
-TTAAGTGCACATTCTAGTGATGAACAACCATCAAATAATGCAAAAGGAAT
-GACATTAGCATCAAGTGGAATTGGTTCTGGAAGACATGAGAAATGGAGAT
-TAATCAATGAAATTCGGTAAGCATTTTTTTTTTGGATTTTTGGCCTGGAA
-AAAATTTTTCCAACAAAAACTTGAACAGAATTTTTGAAAAAAATGTTGGA
-AAATTAAAAAAAAATTTTTTAAAGTAATCAATTTTAATTTTAAAAATTAG
-AAACTTTTCAAATAAAACATTTTTATTTTTTCAAAAATTTTGAATTTCAT
-TTTCAGAATAATCATTAATGAAAATTCAAAAAATTCAAACTACAATACTA
-CGATAACAAAAAAAAATCAGAATGCGTACTACGCAACATATTTGACGCGC
-AAAATATCTCGTAGCGAAAACTACAGTAATCCTTTAAATGACTACTGTGT
-CGATTTACGGGCCTTGTTCTATTTTTGAAATTAATTCATTTTCGAATAGT
-GACAGCCATATTACATTTTTCTTCGCTTTTTTGTATTATTTTCTCTTTTT
-TTTTGCCTAATTTGAACATTCTATCAATCGAGCCCGTAAATCGACACAAG
-CGCTATAGTAGTCATTTAATGAATTACTGTAGTTTTCGCTACGAGATATT
-TTGCGCGTCAAGTATGTTGCGTAGTACGCATTCTCAAAATTTTGTGTTCC
-CGTAATATGGTAGTTTGAATTTTTTTAATTTTCATTAATGATTATTCTGA
-AAATGAAATTCTAAAGTTTTGAATAAATAAAAATGTTAAAAAATTTTTAT
-TTGAAAAGTTCCTCATTTTTTCAAATTAAAATGGATTACTTTTAATTTCC
-AAAATTTGTTTACAAAAAATTCGTTTAAAAAAAAATTAAACTGTTAAATG
-TTAAACTTTTCAAAAAAAAAGTTCAAAATTTTTCTGTAAATTTTTAAAAT
-GATACATGTAATTTAGATTATAATTTAAAAAAAAGACAAACATTTTTTGA
-CGAAAAATATTAAAATTTTGTTAAAAAATGAAAGTTTTTAAAGCCTAAGC
-CTTAGCCTCAGCCTAAGCCCAAGCCAAAGCCCAAGCCTAAGCCTAAGTTT
-GGTACTGCAGTATTTAAAAAAAAAGTTTTTCCCCAAATTTCTTCTGTTTT
-CTTAAAATTCAAAACTGTTATTTGCAAAAAAAAATGTTTTTGCAAAATTT
-GAAATTTATTGAACTGAAAAAAATGTGAATTTTTTAATTGCCTTTGTCGC
-AGCGGCTGGAAACAATTTTTTTTTTGAAATCAATTTTAAGAATAAAAATT
-GATTATCTTGCGTTTTAAACTTGATTAGGGTATTTAAAAATCGATGGACG
-GCGAGTTTTGGTTCAAAAAAATTAAAAATCTCGCCGTCCATCGATTTTTA
-AATACCCTAATCAAGTTTAAAACGCAAAGTAATTAACTTGTATACTCGAA
-ATTTGACGATGATTTCAAAAAAAAATTGTTTCCAGCCGCTGCGACATTGA
-TAAGTTGGTCAAATTTCCGATTTTAACTAATTTTAGGCCATTTTTTGAGC
-CGTCATAACTTTTTTCTGAAAAGTTTTCAAGAAGTTTCATTATAAAATTC
-GGTGTTTTCAGACAATTTTGAGTCTAAGAAGCCAATAAAAAATTCGACTA
-CACCACCTTTAAAGCTCAAAATAACGTCCAAAAATTCAATTTCCAGAACC
-CACGTGCTTCGAACTTTTCGTATTTCCTCATCAACACGTGGCAAAGAGAA
-ACTAATCGATACGGACGATTGTATTGCAAGAATGAATTCGACGTGCGTTC
-TCGCATCGGAATTATTGCCAACTCATCACCAATACATGGACAAAATAATC
-AATGAATACATGAAAAGTGCGAAACAACGATTCCAACAGAATCAGCGAAC
-ACAATCGGATAGTCGGAAACGGATTAGTCGAAGTTTCAGTGCAAGCTCAC
-TTATGCTCACGTGTATCGGTTGTGATTCGGTACGAGACCCACTTTTTGAT
-GGAATTTCGAGAAAAAAGTTGAAAAAACGGAGAATTTGGCACAAGTAGCC
-TCAATATTTGAAAAAAAAAACCGAAAAAATGGATGAGGGGAAGCCAAAAT
-ACCAGAATTTACACCCAATTTTCAAAGTTTTATTGATTTTTTACAAAAAT
-TTTCTCAGTTTTTCAGTAAATTTGCCAGATCTGACCATTTTTTAGGAAAA
-CTGAAAATTTTCGGTGTTTTGCCAGAATAGCAACTTCCTGAAAATTTAGA
-ACTAATTAATTTTTAATTTTTTGGGGGAATCATTTATTTCCTAACAGAAT
-TTGATTTGAATTTCGAAAAAAACCGATTCTAAGCTTAAAAATTGACAAAA
-ATAGCAATGAATGTCAAAAAAATTGCTAATACATAAAAATTGTTTGAAAA
-AATACAAAAATAACAATTTTTATTTAAACTTTAAAAATTTTTCAAATTTT
-AAAAATTGAAAAAATTAAAAAATTTTTAAATTAAAATTAAAACATTTTTT
-GTTAAAATTTGAAAAAAATTCAAAAAAAAAATTTACATTAAATTTTTTTT
-TTCAGGAATTCAAGCCGGCATCTCAAGTGACAAATATCATGTGTGATCAA
-TGTTTTGCTTGGCAAAAAATGAGTGTTCTCACGTCGAATTGCGACCAATT
-TATGGGAAATTCTGGGCCACCGTGCAAAAGTTCAACACTTCCGTCATTTG
-GTAGTAATGATAGTAATCAGAATGATAAGGAAAATATTGTGGAGGTACTT
-AATGTGGTGCCTAAAGATGGAGCCAAGACACTTACCAGGTATGGTTGAAA
-TTTTGAAAAAATTAGAATTTTCAACGAAAACAGAAATTATTTTAAAAATT
-TATTTTTAATTGAAAAATAAAAATTTCTCCCAAAAAATTTTCCCAAAAAA
-AGTGTTTATGTTATTTTTGAAAATTATAATTGAATTGATTTTAAAAATTA
-CGAGAACACAAAATTTGGAGAATGCGTATTGCGCTACATATTTGACGCGC
-AAAATATCTCGTAGCGAAAACTACAGAAATTCTTTAAATGGCTACTGTAG
-CGCGCTAGTGTCGATTTACGGGCTCTATTAACGAAATGAATTAAAATCAT
-TTAGTTATCGAATAATACAAAAATCATTTCATTTCGAAAATCAAGCTCGT
-AAATCGACACAAAAGCTACAGTAGTCCTTTAAAGGATTACTGTAGTTTTC
-GATCCGAGATATTTTGCGCGTAAAATATGTTGCGCAATACGCATTCTTTG
-AATTTTGGCTTCTCGTAATATACGAAGGTTGAAAATTTCAGATTTTTAAC
-ACAAAAACTTATGAAAATAAAATTTATGAAAAGTATAAAAAGTTGAGAAA
-ACAGAAATTTTAATTTTTGCGAAATCTAGATGTCAATTTCTTCACAAAAT
-TTTTCAAAAATCGATTTTTCTTTCGAAAATTTTTTTTTGTAATTATTTTA
-AATCAAAATTTGGCGATTTTCAAAATGTTTATTTTATATTTAATTTCTAA
-AATTAATTATTTTGATTAAAAAATATATAAATTCAATTTTCAGATTGTAA
-AATGAATTTTTTTGAGTTTGCCGTTGAAAAATAGAAAACAAATTATTTTT
-AATAACTGAAATAACTGAAAATGTTGTTTGAAAAATTACATTTTTCCAAA
-AAATCGAACATTTTTGACGCGCAAAAAAATTTGTAAAAAAAAATTTTCAA
-CAGAAAAAACTGTAAAATAGGAAAAAAATTTACCTAAAAAGCGTATGTGC
-CTTTAAAATGTACAGTAACCCCAAAAAAATCGATTTTTTGCAGTATGCGA
-GCTGTGGAGGACGAAAACGGTGTGGTTCACTATTATATGGACGATGAAGT
-AGCGGATTCGTGATTCTATTATACTCATTTCTTTTTTTGAAAATATATTT
-ACTAGAGACCAGTTTTCATTTGATTTTTATCGATTTTTTTTGGATTCCAA
-ATTTTTGTTTTTTTTTTGTTGCTTTTTGTGTGTTTTTTGCCGTCTATCCT
-TCTTTCCTGCCAACGGGATTTTCTCTTCTTTTTTTTTTTTGAAAAACTCA
-ATTTTCCCGCCTAGTATTGCTTTTTTCGAGATTTTTTCTTCCATTTTTCA
-TATCCGCGCCAGCTTTTTCTCTCCCCTCCTTTTTTCACCCATATTTTCGA
-GCTTTTTTCTGTGATTTTTTTTTCACCCCCAAAATTTTTTGTACCAAAAA
-ATTGATGCTTCTTTTTTTTCTCTTTATTTCCAACAAAATGCTTGGCCAAA
-GAAATAAACTCTTTTATAATTTATCATTCAAAAAATTTGAGACCAAATTG
-AAATCCACATCCAGCAACTGCAAAGTGTCATTTGACAATGCACAAATCGC
-ATGGCACGCCCCGTTTTCGTCGATCACCCGGGAACGCGTATTCTGGGACC
-AAATGAGGAGGCGGTGGCGATCGGAGAAAATGAAGTATGGACCACATCTG
-GAAGACACACCTGATTTTACGCGCAAAAATTTAGAAATGTATCGATTTTT
-CGGTCAAAAATCAATATTTATCGATTTTCGGAGGGCACATGGGCTTCTGG
-CCTTCCTCATTGAATATTCGCGCTCCATTTACACTCGCCTGCCGGACAAC
-GCGTGGAAAAGTGTGGTGTACTCCACACGGACAAATACATCAGTTTTACA
-ACTAAAATCGAGCCGTGACGCGACACGCAACGCGCCGTAAATCTACACAA
-AATCTCTCCGACCCAAAATGGCCTAGTTCGGCAAACTCTGCCATTTCGAT
-TTATGAGGGAAGCCAGAAATCCGTGAGGGCAAAGATTGAACAATCTGAGT
-TAAATCGTTTCCATACAAAATTTTTTGAAAATTTTATTCTGAAACTGTCT
-AAAACTCGAAAAGTTATCAATTTTCTGGTTAATTTCTGAGGAAATTCAAA
-AATTGATATTTTCGAAAAAAAAAATCGGAGCCAATACACATCATTTGACG
-CGCAAATGTTGAATTTTCAAATTTACGAGAACCCACGGGATTCTGGCTTC
-CCTCATAAATCGAAATGGCAGAGTTTGCCGAACTAGGCCATTTTGTGTCG
-GAGAGATTTTGTGTAGATTTACGGCGCGTTGTGTGTCACGTCGCGGCTCG
-TTTTCAGTTGTAAAATTGATGTATTTGCCCGTGTGGAGTACACGGCACTT
-TTCCACGCGTTGTCCGGCATTTGTCAATGGAGCGCGAAAATTCAATGAGA
-AAGGCCAGAACCCCGTGAGAATCCTAAAATTCTGAGAATGCGTATTGTGC
-ATCATATCTGACGCGCAAAATATCTCAAAGCGAAAACTAGAGTAATTCAA
-TAAATCACTACTGTAGTGCTTGTGTCGATTTACGGGCTTTCGAAGAAGTT
-ACTTTTTTAGTTTCTTCGTATTATTTTTTTTCATTTTTTGTCTAATTTTA
-ATATTCTATCGATAAATGAATGGGTTTTTATTTATTTTTATTATCGAGCC
-CGTAAATCGACACCAGTGCTACAGTAGTTTTCACTACGAGATATTTTGCG
-CAATATATTTATAAAAGTTGACTAGCGGGCCCTGCGGGCCCGCCAGTTGT
-AGGGGTGTAAGGCGAGTCCCCTTGCCGGGCGTAGGTTCTCGACTTCGCCT
-CGAACCTGTTAGAGGGTTTGTGAAAATTTCAGTAGGTCAATGGGAGTCTT
-CTTGTTTTTTGAGTTCGGTTTGACCAAAAACAGATGCACCCGATGAATCA
-GTTAAAGCTGAGTTTTGATTGATTGAAGTTTGAGGAGGCTTTATATTAGG
-GGAGACGTACCCATATTTTGTATAAAATTGAGTATTTCTATTCGAATCCC
-GATTACTCACAAAAAAACAAAAAAAATTGACACTTGGTAGAATTGAACCA
-ACTACCAAAATTTCTGCAGTCATACGCACTAACCACACGGCCATGCGGGA
-GACACCTCAAACTGGGATGTAGGGAAGAAAATTTTCTGGAGGAAGTCGTC
-TTTCGATTCCGCTTTCTTCAATTATTACTATTTGGGGAAGACGTTCGAAA
-ACCGTTTATCACTGATAAGTCAGCGGAAAACCTAATTTTTGAAAATTTTA
-TCACAGGATTGTACTCATTATTGAATTCCCGAAAAGGAGACGTACAGTTG
-AGGGTTATATCTTGTACACAGACAGATGTATAGAATAAAACAAGTTTTGG
-CCTGAAAATTAAAAAAAATAATATCTCTTGGCAGAGCATTGCTAACGCGA
-CGAAACTTCATCTTCCATTAAATAAAATCAAAAACTATGAATTAAAAATA
-CATTCCGCGAAACTTTAGTGGAAAAAATGTTCAGGGGACCCAGGAAACCA
-CTCCCCCCAGTAAAAAATTTTTGAATTATTTTTTTCTTGAAAAATTTTCC
-CACTGAACTTTTTACAAATTTTATATGTCTCGATGCGTCTTGATGAGACC
-TACACGTCATTTTTTAGAAAACTAAGAAAACTTGAAAACTGACCGAGTTA
-TGATTGAAAAAGTAGATTAGCAAAGATGGGAAAGTGTGCAAAATTTGGCA
-CTTATTCGTCTTGCTCGGCCGACTCATAGTACTTTTTCCAATTCTGAGTT
-AAAAATCGTGTTCAGCGTACTTTTGTACGTGGGATAAAGAAAAAAAATAT
-CAAAAAAGATGAAGTAGAACTTGAGATAAAGACGAAAAACTACTTTTTCG
-GAAAAAAAAATTTTTTGGCAAAATGTCATTTTTTGGCCTTTTGTTTTATC
-ACAACTTTTTTCCATTTGCACTTATGAACTCAAACTTTTTTTCAAAAAAT
-CAGTCTCTCTGAGTAGTATCTTGCACATGAGTTTGAAACAAAACAGAGCA
-AAACCCAAATTTTAATTCAATTAAAACATGCTTTTTTGGGGGTAAAAAGA
-GCAACAAAAAATTTTTTCAAACTGGGGAAAGCCGTCCTGGGCTCAATTTT
-GCTCCGAACTTAGTGCCGTTTTCTGCTCCACTGTGGGGCAAAATATTTCT
-AGTAGGATTTCAAATATTAGAGCATGAAGTCACACGGTTCAGGAGTTGTG
-AATGAAAACGAAGTGGGACATTTTTTCGCAAGCCAAAAAAAACGCGAAAA
-AACGCGAAAAAGGGGCGGAGTCTGTACACTCGGCATTTATTAGAGGCTGC
-TTGGCAGAAAATTATCAATTATGTATATGTATAAGAATTATATTCGAATT
-TCACGCGTAAGTTCCAAATTTAGCAGCATAGCCGCCTGAAGTTCGAAATT
-TAAAATAAAAAAACCGAAAAGTACCTGACAGCCAACGTGGCAACAAATGG
-AATCTCATCGACAAGTCCTTCAGAATTGAATACTGCAGCATTTGACGTAT
-GATAAATGACTGCCACGAATTGATTTTCAAATAATATTTTATTGATTGAC
-GTGGCAGTTTGGTGGCTGAGCGGTTTGTAGTCCAATGTTGGTAGAGTTAA
-TAGGTAAAGACCACCCGTCTCGGTTGCCACACACGCTTCTTCGCCGCTTC
-TGGAAAATTTGGTTTTGAATTTCTAGGCCATTGGGTTAGGCTTCGTTTTT
-GAAATGGGTTAGAAATGTAGAAAATGGAAATTCTAGGCCATCAATTTTCC
-TTTTGCATGTGTGTAGGAAATTGGCTAACATTCTAGAAAATCGATAATTT
-TATAGAAAGTGAAATTTTCGCAAAATCAATAATTCGATAAAAATCGATAA
-ACTTTGATAGAATTTTGTTCATCAAAAACCGATAATGTCCGAAAAATTTC
-AGAAAATTAGATTTTTTTAACAGTCCGTTCATTTCGTGGCCTAGAAACTT
-ATTTCTAGGCCATGGAAGAGTTTTTCCAAGATTCACGGCCACACGTACAC
-TTGCATGCTAACAATTGCGACAGGCTTATTAGAAGTCGAAGATCTTCGAA
-TTTTTCGCGACAGATCCGACACTGTGAGCTTTGTCCCGCCGAGTTTTTCG
-AGTCCTGATGTTCCGATTTGCCATAAAATTATATTACCATCGTCGGAGCC
-TGATAAGAGCCCGTGACGACACATTTCTAGGCAAGTTACTGCTCCGTCGG
-TTATCTGGAATAGAGAACATTTGGAACTTGTCGATTTTCAGAAACATTTT
-ACTGTACTTTTTTATGGGCAAAACATTGTTTTTTTTAATTAAACAAAACT
-ACTGATAATTGTAAAAAGATCAATTTTTTAGTGTTTGAAGATCATTTTTG
-AGTTCTCTAGCTACAAAATAAACAATTTTAGAGGAGTTGCAAAATTGTGA
-ATTTTAAAAATAAATTGCACAATTTTGCCACTTTTTAATGGTTTTTGATG
-GATTAAACCTAGATTTTCTGAATTCAGCATACATGAATTACCGCTTTTTG
-ACAAAATTAGACAACTTTTTATTTTTGTCCAATTTTTTTCAGCCATCTAA
-TGACTGTCCTTTTTTTTGGGCAAAAAAATAAATTTCCTAAAAGCGTTCGA
-AACTACTATATTTTGAAATATTTTGAAATAGGACATTTTTTTAGGGCTCG
-GAGATCAATTTTAAGTTCTCTAGCTACAAAATGCGGAAAAAAATGTAAAA
-AAGTTTGGTACTTGTGTATTATACCCCCGCCATTTTAAAAATTAATAAAA
-TTTCCATCAATTTATTTATTTAAATTAAACGTGATACCATTTTTCCTTGT
-TAGGCTTAGGAATGGTTTTTTCCTAAGCCTGAAATTCCACACGTTTTTAT
-TTAATGAGTTAAAAAATTAACTTTTAAAATGGCGGGGGTGTAATACACAA
-GTACCAAAAGTTTCTAGGCCCCATTTGCTGGGCCACAATTTATAGGCTAC
-AGTTTCTAGGACACATTTTCCTGGGAACATTTTCTAGGCCACATTTTTTA
-GGCCACATTTTCTTAGCCAAAAATGTACTCACAAACTTAGCAACGTGGCA
-ACAATTTCAAAAAAAACCTCATACCTTCTTCTCGAAAATTATTTTATCTT
-TCGAACACATTGAGATATTTCCAGAAACGTCGCCGAGAATAAATTGGGTC
-GATGAGTAGAAAACTGCAGAAATTGCACAAACCGGTAGAGGAATCGAGAA
-GCTCTGAAATTATTCTTCATTAATTTTTTCATGCAATTTTAATCTCGGAC
-CAATCAGCGTTTTGCCACGTCTTTTTTTTTTCGAACCAATCAGAGGAGTG
-GGCGTGGCTAGATGCTGATTGGTCAGTTTCAAATTTTTTACAAAATATGA
-CCTACCGTAGAAGAAGAGCACAAAAGTGCTCTCGCCTGATGGGAACAGAA
-AGTTTCATGAGAGATACCGCCGAACAGAATTAACGTTTTTCGTGAAGAGC
-TTGAAATCATTAGAATGATATTTTCATTTCGGGTCTGAAATAATTCAATT
-TTAAAGGTACACGCCACCACCGTATCCTACTTCCACATGGTACTTCTGCA
-CAGTTTCCAGCGCAACTTTATCGAATTTGTGAAATTCCAAAAGCCTGTCG
-TAGTTCACCTTAGAATCGTCACGCACGAAATCGTAAAGGAGGTTCAGAAC
-CTAAAAGTTTGAAAAATATGTCCTAGGAAATCAAACTGTGAATTTCTAGG
-CCACATGATGGAAATTCGTATGAAAATTGCGACGAGCCCTAACATGTGGC
-CTATTAATTGTGGCCTAGAATCTGCTGCCTACAAGTTGTGGCCTAGAAAA
-AATGTTTCCTAGAAATTGTGACCATGGCCTAGAAATTTTGGCCTAAAACA
-TCCGACATAGAAATTGTATGGCCTAGAAAGTGTGGGGGCAAAAGTTTTTA
-ATTTTCAATTCGGTTTTTTTTTTCACAAAATGGAGAATTTTTTGATTTTT
-ATGTCTGAAATTGAATGGGAAACGTGGAAATATTGCTAATAACCAACCTC
-TTTGCTAATTGTAATATCCTTTTTCACATTCTCGCCGACACCATTATCCA
-CAGAATCCGTCTGAACTTCTTTATTTTCTTGAAAATTTGCCACGCATTCC
-ACGTCTTTTTTATTTGTCTCTATCGTCTGCGTCTCCGACGTCTTATACAC
-TATTTCTCCCTGAAGGCGGATAGGTTTTCTCCACGTGAACTGGAATAGTG
-TGACGTCTTCCATTATTAGCTGAAAATTTGAGTTAAAACTGCTCTATCAC
-ACTAAACACGACGACACTCGTGGCCGCGGAAATTAGAAAACTCGGCCACG
-TAACTTGGTTAAATTAATGAAAATATTATAAAAAACTTTCGAAAATTTGA
-AACATTTTAACTTTTTTTAAAAAAAAACACATGCAAATGTTCCTAAACTG
-GCTAAATAAACAACGCACATCCCCGGCGGAGCTCTGGTTTTCCATGGCAA
-CCGAGAATGCGTGCGGGCCAACGGGGAGAATGTGGAGTACGTAGAGACGC
-AGACAGTTGTATAAAAGGGGCGGCAACTTGAAAAAATAAATTTCTAGAGA
-TTAATCCGTGCAAAGTTGTTTTTAATTACCGATGACCGAGTATGTGATTT
-TTCTAGGCCACGGAACCAAATTACGGCGGAGTTCCGTTGAAAATATCGCT
-TAATTGTTTTGTTTTTTCTACCAAATTAACTGACTGAAAATCCAGTTTTT
-TTTTTCTGAAATTAGGTTCTTTCAAAAATCACCTGAGTGTTCCTTGATTT
-GTTTTCGTAACTTTTTTCTCTCCAACTATTACACTACGGGTGTTTTGACA
-ACACAATGGAAAACATGTCTGTTCAGTTTAAAGACTGACAAGAGTCTCGT
-AGTCTCTCGCGGACTAGCTTACGGCCCTTGTGGTCTAGAATATTGAAAAA
-CTTAGTTTCAGTATTGTGGCCGCGAAATTTGAAAACTCGGCCATCGATTT
-TTTTTCCCACACCATGGGGCAATATTCACTAGACCATTCATTGTAACAAA
-TATTTCAAAACTAAGAATTAAAAAAACTCCTACGCAATTTCCCCAGTCAC
-TTGGCGGCTCTCACGCTCCCTATTTCAGATGTTAACCTCATTTGAATAAA
-TTGCTTCTCCCATGTGTTTTTGGATGGGATACTCCATCTTTTTCAACCAA
-TTTTTTCTCCTTACTTTTGTTTTTAACGGCTTTTTTTCATATTTCTGATT
-GAGAATAGGTCAAGTGATGACGTAATAGAGCGCGTGGAAGAGGAGTGACG
-TCACACGTGGCCTAGGAATCTCTGCGACCACCACATGAAAAACGTTTTAT
-TTTCTAGGCATCCCTACCTACCCGTGTTTTGTCTCTATTTTGACAATTTT
-TTGCAAGTAAATTCCCGGCTGAAACAAGGTCACCGCAACACAAAATAGGT
-GAAGGGATGATCTCTTTTTTTCCAGAGTCAGTCAACATACATAAATTATG
-TGTGTCTCTTCCATTTTCCTGTCGTCAATTTGTTCACTATTCGCTTCACT
-AATTCCTGCTTTGCATTTTAATGTCCGTGCCCTCTCACTGGAACTGACAT
-TTCACACAATGTTTTTTTCGGTGGAAAAAAGTTTTCTAGATTTTGATATT
-TGCTGGAAATTTGGAAAATTTAGCGACTTGACCGTGCAAAAATTTTGGTG
-GCCGAGTTTTCTCTTTGCGCGGCCACGTTGTAATAGTTGCCAGGTGTCGC
-AAGTTTTTAAAATGACCGAGTTTTCTCTATTCACGACCAGATCTCTCATT
-ATAGCCGACTTCCGACTTGCGTAAAAGTGCGACGTGGCCGAGAAAAATTT
-CAGTGGCCGAGTTTTCACGCGAAATCACATTTTTTTAGTTTTTTGGTACG
-TGGCCTAGTTTTTTAAAACCATTGTTTATCTCCACCCAATCTAAAAAAAT
-TTCTGCGGATTTTTAAACCATGGCCGTAAAAAAAAGCCACTCTCATATAT
-TTTTTCGACACCTTTCGGTTTTAGAAATATATTTTTAAAAATAAAATAAA
-TGGCTTTGAAATCCAAATAGAAATAATTTTCCAAAAAAAGTGGAAAATTT
-TCTAGGCCACTTGAAATTTTTTCCGAGATCTTTTTTGGGAAAGGAATTTG
-TGGCCTAAAAAACAAAAACTCGGCCACTATTTTTTGACCATTTTTTCCAT
-GTGACGTCACTTGTGACTTACAATTCCTTTTCTCAATTTCTTATGAGAAA
-TCGCTTTTTTTAAGACTTTTTGTGATTTTGTTGCATTTTCTCCCAGTCGG
-AGATTACGCCACGTGGAAATAGTAAACTCGGCCACACTCTTATAATTTTT
-TGGCGTCTTTTGGGAAAAGTAACAAGTTCAAACAATGTAAATTACATAGC
-CTAGACTTAGCTGACCAAGGCTTGTTTGAAATATTTTTGTGGCCTAGAAA
-AATAAATATTCGGCCATTACTTTTTCTTCTCATTTTTGTCAGAAGACGTC
-ACTGAAAACCTAGAAATCTCTCTTCCAGGGCTGCAAATGAGTATATCCTC
-CATACCTTCGTCACCGTCAATATCGGGATCTTCCACGTCATCGACCGCGC
-CGAACATTTCATTTTGCTATACATGGACCACTAAGGTAAGCGGCCTAGAA
-AAATAGAAAGTTCGGCCAGCTCTTAAAAAATCGATTAATGATAATTTTCA
-GTTAAAAACGCGAAAAACTGCGGACGGCGAGGCGACGATTTTATCGATTT
-CTCCGAAATTCGCGACAGTCCACCAACTTATTTCGTTTCAATGGAATATT
-CGAATTCATGCCACTTCTGAAATGGTAAGGCTTGTTTTTTTTTGAGGTAG
-GCAGGCACGAAAGCGTCTGCTTGCTTTTCGAAAACACGTGGCCGCGGACT
-GAAAAACTCGGCCACCAAAAATCTGAAACTGTGAGTCGCCCTGACAGAAT
-TTTTTATTTTCTCGGCCAAACAGCAAAAGCCGACAAGTGAAGTTAAAAAG
-GGAGGAGCATTTTTTTAAATAAAAAACTAGACTCCTAATGACCTCAAAAA
-TATCATATTTTTAAATGTAAGAGTCGGCCACGTCCGCGGTCGATTTACAC
-AGTGTCGCGGCTCGGTTTTCATTAATTGAGCACTGAGAAGTTTCACTTCT
-CCAATTTCAATTTTCAGAACGAAGAAGACGAAGAAGTGGACTACGTGGCA
-GTTGACCTTTACCTGGTAGATGGTCCTGTAAATGAGGTGAACGTTATGGC
-CGAGGTGGGGGCTCTAGAGAAAACATCCACAGCAACGTTGGGAAGCCTTC
-CCGCAGGTCAGAAAGAAGCAAAGACTATAAAAATGCAAAAGGGCTCTGGT
-TGTGAGATAACGGATGCAGATCGAGAATGTGTGTCGAAGTATTTGAAAGA
-GAACGTGGAGAATATCATCAAAATCTCCATAATTATAAATATGGAGACAC
-GACTTTTCGAACCATCAACCTATTTGGATGCAATATCTCCAACTCCTCGA
-GCATCATTTCTAACGGCAAATTACAATGCGAGAGTTAACAGTAAGGTATG
-GAAAAGGCGATCACGGAAAAGGAATGGAAGAATCGAGCGAAGAGTGTTAA
-GTGATAAAGAGAAGACGAAGTATGAGAGTAAAGTACAAATGATATTGGAT
-GAGGAACGGGAGAAGCTGTGTGATAAACGAGAGATGTTGAAGGAGGATGA
-TGGTGGATCGAGAAGAGCTTCGTTGATTTCTCAGTTCAGGGAGAATCAAC
-ATGAATCTGTGTTGGATGATCATATGTTCAAGAGGGTAAGGTTTTTATTT
-TTAATGCCTAAAACTTTGAGATTGAGGCAGTTCAATAGGCTATATACATA
-TAAGTGTGGACCCAACAAGTTTGTTACATGAAGTATTTTTTCCAGATCCT
-CGTTAGCTGCTGTGAATCTTGCGAGCAACGTCGTCTATCGTTCATGTGTG
-ACAGTCGAACCGAGGATGATTCTGAAGGGGAAGATTGTGAAGACAATGAA
-GAAGATGATGGAGAAGGTGGCTCCGATGATGAGGAAGACGATGGAGAGGA
-GCCTCATTTTGAATGTGATAAGAGTGATAAGGAGCATGTCCACGATGTAG
-GTCTCCTTTAAAATATCGTCCATAAAAGCTTAATTTTTTAGATGCTAGCA
-AATCTATACTTCAACAAAGTAGTCCTTCCCGAAATGGAATATGTCGAGGA
-TTTTGTGGATTTCCTGATTGATGCGGAGCTCAATGACTTGCCAGTTCTCA
-AAAGAGCTTGTGAGAGGTATTTGTGCAGTGAGCTGAATTCGGTAGGCTTC
-TGTTCAAAAAAATATAAAAATCTAATCGAAATATTTTCTAGAAAAAAGAC
-ATTGGAACTTGTCTCCTGTTGGATTTGCTTTTCAACTCGATTGTATTCAA
-CTTGCCTGTTATGAAGTCGATGACCTTGACGGAGTTGGCGAATCGAACGC
-ACGAGTTTGTGGATGCTGACACACTTTTGGATCAGGAAGAGTTTAAGTGA
-GTAGGGTGTGCGGCAAATTTGCCGAATTTGCCGAGCACGGCAAATTTCAA
-AAAAGTAGATTTGCCGAATTAGCCGAGCTCGGCAAATTTCGAAAAACTTA
-TTCATAAACCAGCAGTGTGTAAAGAATTCAGTAGTTTTGGTGCTCCAAAA
-ACATTAAAAAATATCAAATTTTTTCGAGTTTGTCAAGCACGGCAAATTTG
-CCGAATTTGTCGTGTTCGGCAAATATTGGAAAAATAGATTTGCCGAATTT
-GCCGAGTTCGGCAAATTTTGAGATTTGCCGCACACCCCTGGTGTGCACCG
-TTAAAAATTCTTTTTTTCCAAAAATCTAAAACTTGAGGTTAATAATGTGA
-CCGAAAAACTGAAAAAAAAAAGAATTTGCCGCTGCAAAACCATAATCCGC
-CAAAAGTTTTCTTTGTTTTTTTTTCGAATTGCAGGGTTTCCGAATCTGTC
-AAAATTGGAAACACGACAGTTTGCCGAAAAAATTTAATTTTTGAGTGAAC
-TGTTGATGCGAAATTCATTAAATACGATTTCAAAAAGCTCGGTCACGTAT
-TTGTAATTTTAGAGTGGGATTAGCTATTTAAAAATTACATTTGTAATTTC
-CAGAAACCTGGATAAAAGAATGCGAACGCTTGCCGATCGGAATCTCGTGG
-AGCTCATCGAGCAATGTGTTACGTTTCGTGACCAAAAAGCAAGAGTTCGC
-GTTTTGCCGACCGCCGAATCATTTGATATTTCGTTCGACTTAACTAATCA
-ATAATATTATCGTGTTACTTTTTTCCTCTGTTTTCTTTCTCATTTTTAAA
-AATGAATGCTTTTTTCTTTTTTTTTACCCGATTTTCCACACGACTAACTC
-CAAAATCAGCCGCGCCTTTTTGTCTTTTATCCCTGCTTTTCCACACATTT
-ATCAAATAAAGAGTGCAACGAAGTGCAAAATGGGAAGTAGTAGTGCTGCA
-ATCTCATTTAGAGTACACTTTTGGAGCTCTTTTCTCCAGATATATTATAT
-GCTGTAGATGGAAACTTTTCCAGTTTATATATAATATTTTTCATTTTCCA
-TATTGCCCTTCACTGCTCATCATCCAATGGGGTGCATCTAATTACGGCAA
-AGCTTCGCGGATGGGGCGAGTAATGAGCAAAAGAGCACAAGGATGGGGCT
-CTTTTGTTCCTCATTTTCATTGCTTTTTGATTTCATTTCCTTTTCAACAT
-GTTTCCATTTTCGAAATTAATCGGCTTTTCTGACCCAGGACTCACGGGAG
-ATGAAAATTAATCTTTAAGAATTGTGCTTTGAAAAACAATATCATACACT
-TTTCAAACTTCATTTCTCCGTTGTTCCCAGTAAATTCCAAGCTGTCATCC
-ATCAACTCTCTGATAAAAAATAATCATTTGGTCCGTCCGTCGCGAAAATG
-AAGTGAAAAAAGTTAATCCCGGCATGTTGAAATACACATTTCGTCGCGTG
-GAGTATAGTTATGCTTCGATTTCTCAAGAGGATTCTTCTTTCCCCCTTTT
-CATATTTTTTCGGGCAAAGAAGAAATCTCTGTCACCCCCCGACTAAAAAA
-CGCTAAAAATTCAGCGTTCATTGTTCGGTTTTCCGTTTCAAAAAGAAAAA
-AGTGTGTCAAAAACTCAAAAAGTCACCGCCTAAAGTTAGTTAGCACCTTT
-TTCCATTGTGAAGATTTTCTTTCCTTCAATACAACTACTACAGTTTGTTT
-CCTGTGTGTCGTCCTATTGTTGTGGGTGTAATTGTTCGATAGAGCGCGCT
-TTACAAAATCTCTCGAATTAATTGAAAGTAGTGTGTTGTAGAGACCTTGA
-CTCCTTTGTCAACACTGTAATTAGGAAGGAGTACACCGCCGGGCGGGTGA
-GAACAGTTATTATAACGATAGTGGTTTGTTATTGTTTGTTATTAATAGGT
-TAGTTGTCTACTTTAAACGTTTTTTGTTTGAAAAATTTCTGTTAATTAAA
-AAATACATAATTTATAAAAATGATGAGTTTTTTTTTCAAATTTCTCAAAA
-ACCGAACCCATGGGGTTTTTTGAGAAAAAATAAGAAAATTTTTCTAGTTA
-TTCAAAAAATCTATACATTTTAATATCTGTAAATTGTAAATTTGGAAGAC
-AAAATTTTGACAATGCGTATTGAATTTGAGTTTATTTAACTTAAAGAAGA
-GAAATAGACAAATAAATAATTATATATATTGCGCAACATATTTGAATAAT
-ACATTTATTTTTCGTAATATTTATTTTGAAAAATGATTGAAAATAAAACT
-CGAAGAAAACTATATTTAAAAATGTCGGTGCTTTTTTTACATTTTTTAAA
-CGAAAAAAAATGCGAAAAAAACCAATTTTCCGAGTTTTTTCTTCAAAATA
-TTCGTCCCTGTTCATGAAAAATGTTCTCACTTATGTAAGTAGTTGTCACG
-CAATGCAGTTGTTGACCAAAAATTATTTTCCGAGTAAACCCTATAATTTC
-CAAATTCTCTTCTTCTGAAATTTTGAACTTTCCATCGGGAAAATGTCATT
-TCAACTCGAATTCACACTAATTATACATCTGTATAATTATTTAGATTCGT
-ACTTTTTCCTCCTTTTGAAAAAGTGCACAGACACCGCCGTTATCTTTACA
-ACCGTCTGGCAGGACCGGTGTTGTAGGCTTTAAATAAATATTTTTCCATA
-AATTTCTTAATTTTTAGCTGAAACGATTTTCCAACAAAAAAAAACGCACA
-TTTAAAATGGTTACCGTATTTCTTCTATCAATATGGCTGCAATACTATTT
-TTCGATGGTCTTCCCGCTTGCAATACTAATAGGGAGTGCAAGACTATTAG
-GGAGTGCAATACTAATTTTCAGAACATTTTTCTGACTGTGAGCTTACTAT
-TTTTTTTTCTGAAAAAACTCGAACCTTGTGTGAAAATTCAGAAAATTTGA
-TTGTAATTGCAACAAAAAGGTGTAATTACTTCAATTTCATAGAAATTTTT
-CCAAAAATTGTTGCACAGTAGGCAAAAAATGTTGTTAAAATCTCAAAATT
-AGTGAGGTGATTTTGTACCAAAAAAAAAGTAGACGCAAGACTATTAGGGA
-GTGCAACACTAATTGGGAGTGCAATACTAATTTTCGGAGGGTGTTCAAGG
-AGCAATACTAATAGGGAGTGCAAGTCTAATAGGGAGGTCATATTAATAGA
-AGAAATACGGTAAATTTTATATTTTTCGGTGCATTTTCATTTTAAAAACA
-ATTTGTTTGAAAATAATTATTTTTAAAAATCGTTTTCTTCAAATTTTTTG
-TAATTATAAGAAACCAAAAAACCTTTATTTAATTTTCAACAAGTGTATTT
-TCTAATTAAAACAATTATGAAAATTCACAATAAAAGTTCAGGACTGAATC
-CAAAAAAACTTTTATTTCAAAAACGAAACACCTTGTTTGCCAAAAACCTG
-GAAAAGCCTGGAAACCTGGAAAATCGAATAACATCAAATTTTGCAAATTT
-TAAGCGTTTTCTCGAAAAAGTTGACCTGAAAAAATAGGATTTTTCAGTTT
-ATTTTATAAAAAAGCGAAAAAAAGCAAATTTTTTGAGAAAAAAATTGCCT
-AAATTTTCGAAAAATCATTTTCAAAACTATTCACGATTAAAATTCGTTTA
-TCCATTTCTCCTTCAATTCTTCCAGATTCGAATGAAAACTTGCTCAGAAA
-AAATGCTAAATTTGCTCTTTTTCGTATCCACTACTACTGCTACTACTAGT
-AGAAGTTCTTCATTCGGTGGCCGGACTACTTTGAATCAAATCACATTTGT
-CGGGAAGAAGGAGGTCGTGCCTTTGCACTTCTGGTCACTCCAGAAATTGA
-AGAAATTGAGCAGCTCGAGTTTTGGAGTATTCCAGGCAACTCGGTCGTTT
-TTGAAAACCTATTCTATGAAAACTGCAAACTATGTGGCTTCATCTGGTCT
-GGCTGGAATTTTTTGTTTCAAATTTTGACCCAGTACCTTGAGAATCAACC
-AGTTTTCCACGTATGCTAAAATCCGAAAAAGTGACTCACACGAGAAAGTT
-TCAATTTCCGTGATGACGTTCGCCTGGCTCTTCAGCTCATTCTTTTGTCT
-CCAGAGCTCTGGGGAGCTGCAAATGAGTTGAGAGCAAGCACATTGCGTGA
-GCAAGATAGCTCCAAAAGATATGAAGAGAGCAGGCGGGAGATGAAATTGG
-ACGATGAAAAGTCGCCAGAAGCATAATTTTGGTGCGGCGACACCCGAATA
-ATGAGACATTTACGACTTTTTGGAACATCTTCTACGGCCAGAATGTTTCG
-TAACATTTTGGTAATTTGAGTTGTAGTTTTGAGGGGCTTTTTTCGATTTT
-TAAATTTGTATTGACTCTTATTCGCAAAAAAAGAGAACTGCTATAGCACG
-TGTAGTCAAAATGTCTTTTTGATCTTCAAAAAATGCGGGAGTTAAGACGC
-AGACATCTCATCTGATTCGCATGGCTAAGAGCGTGCTGACGTCACAATTT
-TCTGGAAAAATATTCCCGCATTTTTTGTAGATCAGGCTATGATGTGTGTG
-TTCAATGAGACAGCCTGACACGACGTGATGTAGTTCACATTTTTCGGCAG
-TTTTTTTCCTGAAAAATGTGGATTTTCGTTTTTTCTTAAGTTGTCAAATT
-ATCGAAAGCTACTAAGCTTGAGTAACTTAGGAAAAGTAGGATTTTAAATT
-GTTTTCACGGGCCTCGCAACGAAAGATCTCACTACTATCACCAGAAATCC
-AAAAAAACGAAAATATTTGTCGTGCCGAGCCCAGGCTCCGTATTTTTGAA
-GCGAAATTCCTAAACTCCCTAACCGCTGAAAATTTCTGAGTTGATTTTCC
-ATCACCTTCTATATACAGTCTTTCGACCCGAAAACGATTTGAATTCGGCT
-TTCTCCTCAAATCCTCTGTATTGCATCCTCTTTCTTAGTTGATTTATTTG
-TAGCGGATTCTTCCCCTTCCCATCCGTGGCGTTATTGTTCGGTTACGATA
-CGCTTCTTGTGAAGGTTATATGCAAACGACTACTTGCCATTCGATTCTTT
-CTCCAAAAACGGGTTATTCCATTTCCTTCAACTAAGGAGCTGTTTTTTTC
-TTGGTTTTTTGTAGAAAACCTACATTCAAAGTCGAAGTAGTGAAAGTCAA
-AAATTACCAAATTTCGCAATTTAATTTTTAATAAAATGTCGCCCGAATTA
-ACGATAAGTTAATAAGAACAAAATTCAGTTAGTCCGAGAGTCGTGATTTG
-CCGATTTAGAACAGCATTTAGCTGAAAAAAACGATTTTTTTCCAAAGTTT
-GAACTGCCACTACATTTTTCTCAAGTATTGAGAGTTTTGAATTTCCATCA
-TTTAGTTGTAACCACACTTTTCTTCCGATTCCCATAGCAAGCGAAAGTTG
-TCTTGTTTCCGAATATCTGACCTAACTTGGTTTTTTTACGACTGATGCCG
-AATTTTGAAAAGTTTATTAGAAACTTTCCACGCTCTCCCCTTTCCAACCT
-CGCAAACCCTTTTGTCTGTAGTTGGGATCTGTTGCTTTTTTGGGCAATTT
-TTTGCCAGCTTGATCTACATATCATTGCTTGATCTACATATCTTGAGCAA
-AATTCCAAAAAGTACGTTTTCTTGTAGATTAATTTGTGGGTTTTTTTTGA
-GAGTTTTGAGCTAAAACTTGCATGGCATATTTTTTTCACTGTTTTAAATC
-ATTTACAAATTATTTTTTCCTCTTTTTAGAAAAAAAAAATGTTTGTTAAA
-ATTTTGGAAAAATTTCAAAAAGGTGTTTTATCCACTTCCAAAACGTCATA
-ACTTTGCTGAAACTGGACCGGGGCAGCTAAATTTTTCGGAGTGATCATTA
-TTTTCACTCTTTTATCGAAAAATTACTATGGCATGCCAAGCCCGGGGACC
-CATTTTTTCACTTCCCTTGTAAGCCGAAGCCTTAGTCTAAGTCTAAGCCT
-ACGACTGAGCATAAGCCTCAGCCTAAGCCTAAGCGTAAGCCTCAGCCTAA
-GCCGAAGCCTAAGAATAACGGGAAACTTTTTTTGTTGCTTTTTTTTGTTT
-TTTTTCAAATGCCGAAAAATAATTGCGGCATTTGAATTATGACTTTGTTG
-TTCCTAGAGATTCTGGTTTTCAAAATAGGCAAAAATGCCATGAACCTTAA
-CGATGTTCTTTCTCCCCGCCCTTTGAACACTCTGAAGTTTCCCGCCATGT
-CAACCTTTTTTGATCGTTCGGCACGATAACGTTCTGAGTGCCGCGGTGCC
-CGTTAATTTCCATCGAATCGTTAGGTTTTCTCCTTCGATTCCTAACGATC
-AAGCCATAATTTATCCGCAAAATGGGATTTTCTCCCTTTTGTGATGATGA
-TGATGATGGCCTCCCTCTTCTCTGCGATGACAGTCGAGTGATGAATGTCT
-TCCTTCACACTTGTCCGTTTATCATTTATCACTCTGTGCTGAAAACCGGT
-CTCTCTCTTCCCCTGACCTCTTCGGCTTTGTGAAACAGTGAAAGAGAAAC
-GGAAAACAGGCGGTGTCAGATGGTTGACACGTTGATGTCGTAATCCATTT
-AGTATTAATGCTACTATGTACGCCATTTGCTATATATGCCCATATTTTCA
-ATGGCTTTGAGCACAAGCTTTCAGAATTGGCAATCAATTTCTAAAATTTT
-AAAATTTTGAAAACCAATATATGGGTGGAGCCTATTTCTTAACTGTTCCG
-TAGTTACCGAAAAAGTCGGAAAGCGCCGATTATCTAATACTTTCGAATTC
-GGCAAAACTGAAATTTCTTCAGATTTTTATGATTTTGAGAGAAAAAATTA
-TATTTCTTTGCCAAAAAACATGTATTACTTAAAATTTGTTTGTTTTATTA
-TTTGAGCTCAATAACTATCAAATTGACAAACAATTCATTGGCAAAAATGC
-CGAATATCGTAAATTTGAAAAAATCGGCAATTCCCGAATTGCTGCACACA
-TCTTGGTTTTTTGAGCTAATTAATTGAATTTTTAAGAACTTTTATTTTGG
-TAATCTAAATTTTAGTTACTGAATTCATTGCGAAAAAAATTTCTTCAGAA
-TAGGGCTTCCATGTAGGCGTCAAAAAGCTTGCCAAACCTTAAGACGACCT
-CCGCCTGCCTACCTCAATCTATGTGCTGAAACATATGCGAACTTTTTTTG
-CAATTCTTGATTTGGTTTTCATCAAATTGATAGAAATGAGAAAATTTAAA
-ATTGAAAATTTACGCACAAGTACAAAAAAGGATTCAGGCAGGCGTCAGGC
-CGTGAAACCCCGCCTGCTTACCATGGAAGCCCTACTGCAGAAAATGAGAA
-ATCTGATGTTCAAAAAAAAAAAGAAACCAGCCGTGTTTTTCCTTGAAATT
-CGAAAAGTTCCCCGATTTTCCCCTCATTTCCGGACCGTTTGTTCCCATGG
-TGGACCGGTATTTTCACCACTCCGTCAAAGGCGATTATCGGGTCTGTCTG
-TCGTCGACGACCCATCACACCAAATCGGTTGAATTGTCGCACCCCTTTTT
-TAATCGGCAATATATTTACTTTTTATTTGTAACTAAGTAGTAAACAGTAA
-TAGTTTTTGCAAGAATATGCATAACACCTTATTTCACTTGGTAAAGTAAT
-TGAACTGTTGTAATTGAGCTGAACATGATTCACCTACGAAAAAATGCCTG
-TGACCTAGGGCTTGCATGTATGCGTTAAAATGGCTGCCTGCCTGACCTGA
-AGGCAGCCTCCGCCTGCCTTTTGCCGGTTTATGCTAAAAACACGGTTTAT
-GCTACGTGAAATTATTTTTTCATTTTTAATTTGATTTTCAACTTTTGAAA
-TTTGAAAATTCACGTCAAAATGCAGAAAAGAAGGTGAGGCAGGCAGGTTT
-CAGGCAGGCGTCAGGCCCTGAATCGGCGCCTGCCTATCATGAAAACCCTA
-CTCTGAACTCGATTTCGCCCTCCAAACATCAATTTCCGTCATTCTCCTTC
-CGTCCTTTTTACCCACTTTTTTAATGAATTTGAAATGAGTAGTCGAGGGA
-AATTTAGTGAACCTACTAGAAGTCGCCACGGTTTTCAGCAGCAAATTTTT
-TAATTTCGTAGAAATATGTGCTTCTGTGTTAAAATTAATAATAGCTAAAC
-TATTGGATAATGTACTTTAAGACGTGCAATGTCACTCCATATTTTATAAA
-ATGTTGAAAATTTTGGAAGGGATCGAGGAAGTTTTGATACTTTTTAGAAA
-TCGAAAATTTTCAATTTCCGATTCCCTTCAACATTATATACCTCAACAGT
-TTAATAAGATACAAAAAATCTTCAGAGAGTCATCTGTTCGCACACAGTTT
-TACCCCTATCAAATTACAGATGTGTTGCCTTGCACATCTGTGAGAACTTC
-ACACTATTCTGCTACAACAGATTTTCGGAACAGAAGGTGTGATGTTTCTA
-CCTGACTATGAAGATTCACGTGGGCGGCAATCCAAATTTTTTGAAATTTG
-GAGATTTTCGAGTTATCCATAAAAGATTCCGTTAAAGAGAGATCACAATT
-TTTTTTGTAGATTGACAAGAAAATTACCCCAACAATACTCAAAACAATTG
-TAATTACAATTGAATTATTACTTTTCAATTCTTAATTTTTTAAGTGCTGA
-AACTTTTCTATTGACGTTAACCCCTGCAAAAATGCAAAATTGATCAACAT
-CTAGTAAATCTACTAACAAGGGAAGTCTTTGAGGGGGTCCGTAGATTTGG
-GGTTTTCATGCTAAAATTCCTACAGAAGAGTGTTAGTTATGATCTCTCCA
-AACATTTTTGCGCATTTTTAAAGTGATTTTATTCTTATTCGGGAACCTAG
-AATCATTGTCCGCACTTTTTGGAAATTTTTATTTTTTTCATTTTTGCTCA
-AAATTTCTTGATCAACTCCAAGCAAAAAAATCAAAGTTTTTCAACAAACA
-TTTTGTTAGTTGATCATTTTTCAAAATAATTTATCTCAACGAAGTTATGC
-AACTTCAAAGTTGGTTAAATATTTTGCACAAAGTTCGTGAGATGTAGATC
-ATTTCGACGGTTTACTTGCGAATAGAGAGTTAAAACTTGTGTAATGTACG
-TTTCATACATTTCTGAACAATAAAATAGCAATTTCATACATTTTTACAAA
-AATAAAAAATTTCCTATTTTTGCTTGGAGTTGATCAAGAAATTTTGAGAA
-AAAAATGAAAAAAATAAAAATTTCCAAAAAGTGCGGACAATGATTCTAGG
-TTCCCGAATAAGAATAAAATCACTTTAAAAATGCGCAAAAATGTTTGAAT
-GAGTTGTTTAAAACTTTATTCAACTTACAAAAATATTTCAAAAATAGAAG
-GAATCGAACCAAACCTTAAATATTATCAGACGCGCGCACTCCCAACTCGG
-CCACCGAGGACAATTTTCAACTCAATGTGGTGGGTGTCACATTTTCGGTG
-GTCACGCAAGCTGAGATTTGCGTGGACTGCATGGTAAGACAGTGGATTTC
-AATGGTGTTTTTAACTTTCAAAACGTCATAACTTTGCTGAAACTTGACCG
-GGGCAGCTAAATTTTTTGGAGAGATCATAACTAACACTCTTCTGTAGGAA
-TTTTAGCATGAGAACCCCAAATTTACGGACCCCCTCAAAGACTTCCCTTG
-TAAGTCAAACAAAAATTCTGTATTTTTCAGAGTACTATACATAGTATATA
-TTTCTGAAATTCTCTCAACAAAATCCTTTCCCCTTCCTCATTTTCCCACG
-TAAAGTAAAGTCAAAATACATTTTAATTACCATTAATACCTAAATGAACC
-AAACAGGTCGGTCTTGCCCTCAATTCTACCATTTAGTCTCACGGCTTTTG
-TACTTGTTCACCCACTTCCCCCATTCTATAATCCAACCACACAACTTTTG
-GCAACAAAGTGTTCAATCGAAATGGGACACTATTTGCTATTCCTATAATT
-GACAGGCTGGTGGAAGGAGGAAAGCAGCACACGACGAAAGGCATAAAACA
-ACTTGGCGTTGTGTTAATCCCACCCGTATTGCATTCTATATTAGGTCGAC
-AAACAGTTCATTCATGTCGATTTTCGATCATTTCTCAGAGTTTTGCTTCG
-AATTGTAGGTTCATGGAGTTAGCCATTCTGTCTATTTTTTCCGCTGAATT
-TTAAGATGTTTAATACTTATTTGCCACCTTTTCGACGGAATGACATGTAC
-CGGTCAAATCTTGGAATCGATCTAAGAGATGACAATTTTGAATGTATATA
-CTCAAAATGGGCTCAAATGAACGAATTTCGTAATGAATTTTTTAAAAACT
-TTTTTCAAAATTTTTTATGGTGGTTCAAAGTTTCGAAAAAATTGACCGGT
-ACATGTCATTCCGTAAAAAAAAACGCGCTTCTATCTGAAACAACAATTTT
-TTTGATAAAAACTTTCAACTACAAACTTGTTCTTTACAAAAAGATCAACA
-ATTTATTAGTTGAGCACTTTTCTGTACAAAAAATTATCCGCGCAGATATG
-ATCTACCAAAGTGAATTTGGAAAATTGGCCCGTCAATGCTTCGTTGCAGT
-GCTATTTTAGGATCTTTGAGAGCTCGCCGTGAGCTTGGCTCTGGAGATTC
-GCAGCTAAAAAGGAGTAACCGTTTCTTTAGGAGTAACCGTTTCAAGACAT
-GGGCTATCGAATGGCATAGGTCTCATATGCAAGTCCGATGGGCACCTTCT
-GACGGTTCCCTAGTCAGATAGAAGCCAAAATTTGGGCGAGGTATGCCCAT
-TGTCATTCTAACTGTCGAAAAAGTGGCCTCCGCCAAGACGTGATAACTAT
-TTCTCTCAATTACTCTGCACTCCCAATAAATCCTACACACCGTTTGAATT
-GAGTCATTCAAGTGTCAGTTGTTCAGTTTCTAGCAGTTGATACGTGTGTG
-TGTGTGGTGGTGGTCAACCAACTGTCGCCCTTTTGAACACACACACACAC
-ACATACTTTTCCTGCCATATTCCTCCCCAAGAAAGAGAGAAAAATAAGTT
-GCATCTTTTCTTTTCTATATCTCTATCCACTAACACACCCTGTTATTCGC
-ATGTTCTCTCCATTCTCCAAACAACGCAATCAGTGTCCGCCTAAATCTAC
-ATAATCGATTCAGGGGGAATTAACTGTGTAGTTTTGTAATACTTTTCCTT
-AAGGTTCTTGAAATTTTATATTTATAACCGACCGATTATGCCTAATTATA
-ATTATAATTTAGAGAATTTTTCAATTTAACAACTATTGCGATGTTTTGAA
-TTTTTGATAAAACCGGAGTATTTTTTCAAGAAATTCTGTTTAAATTAGCT
-GAAAAATTTTGATTTACTAGTTTTTGGTTTGCCTCAAAAAAAATCGGTAA
-AAATTTTTTGGGGCTTTTTTCTCAAAAAAAAAAAAAGAACGATTCAGGAG
-ATTTTTCATAACTTCGAAACTTAGTGCAAAATCTTTTACGGGGTGTCGAT
-TTTTTGATATTCGAAAAATCGGGTTATTGCTCTATTAAGAAAAATTATTT
-CCTGGACATATTTTCTGAAGAATTCCTCGTCTTTTCCCATTTTTCTACAA
-TTTTTCCTGATTTTTCATAAAATTGAAACTTTCGCTGTTCAGTTTTCCCT
-TCAAAATGAATTTTTTCGACGACGAATGTTCAGAAAGTTAACAAATAATT
-TTAAGATTTTGTCAAATTTTCACACACGTACTTTTCCACCAAAATTGACA
-AAAAACCCTAAAATTTAATTTCTAAAATTTTCAAAAAATCGTGATCCATT
-CTTCCTTATCATGTTATGTCTTGCAAGCGTTGCCTCAAAGTCATCAATCA
-GCTAGTTGTCATCAATTCAGCGATACTTAGAGATTGAAAGAATGAGTAAT
-TCATCCTTGTTTCTTCTTCATCTCCTCACTTCACTTCCAATTTTCCATCT
-GTTACCAATCAATTTGGCCTGGCGATTAGTCATCTATTTGTTCGTCAAAT
-TTGGTGCAAATTGGCTCGTGTCACTGATAAGTGGTTATTTTTTCTTTTTG
-GTTGATAAGGTTACCTGATAAGGTCATTTCCTTTTTGCGCCTTTTTTCCA
-GTAGTAATTCCTCTAATGTTCGTTTTGAAGTTACTAATCGAAGTTGTTAA
-AGTATTAGATTTTTTTAAAATCAATAGGAATGTTTTTTTAATACAGTGTT
-AACAAAATTTTATGTTTTAAAAAGTTAAAATAAATTTTAAAAAATCTCTG
-AGTTGAATTGTTAATTTTTAAAACTATAAACAGCATTGGCATTCATAAAA
-AACAAATTTCGACAAAAAATTCGTAAAAATTGCTGAAATCGCACTAAAAA
-TACTCAAAACACTGAATTTTTTGCTCATAAAATCTGGAAAATCAAGTCGT
-TTTACTTGATATTGCCATAGGAAATTACAAAAAAAAAGTGATTTTATTAA
-AGGCTGGTCAAAATTTCATATTTGAACAACGTTTTATAAAACCGCTGTCA
-GAGTAGAACAATATAGGTGTAAAATGTAGTTAAAAACTATTCTTCGATTT
-TCCTACATTTTTTTTTCTGTAAATTGAAGTTTTCTCGTAGAACAAGAAAA
-TTTAAATTTAAACCAAGTTTTTAAATTTTCAATTAAAAAAAACTACAATT
-TTCGATTTTTAATAAAACATTTTAAATCCCAATTTTTCTTTCAAACATAT
-TTTCCAATGCTGATTCTGAATCCATGAAGTCTTAACACTTCAATTTCAAC
-ATTCTGTTGCAACAAGTCGTCCCATCTGACCAATAACAAGGGCTCATCAA
-TCACTGACGAGGGCCCCCGGGCGCCGCCATCATTTTCCTCTCTTTCTCTC
-TCTCTCTCTCTCTCTCTCTCTCTCTTTGTTTCTAAAAAGAAGGAAAATGA
-GCTGCAATTTATCAAATCCACGGTCTTTTTCCCTCAAATTCTCTGCCTCT
-CTAGTCTTCTCCCTCATGGTCATTGTCGCCACATTTGTGACTCACAAAAT
-GGGCCGTATTATACAAAAATAATTAAAGTTCAATGCGTATGCGTGTGTGT
-ATTTGTTGCTGGGTGAGGGCAAATGCACATTAGCCACCCACAACAAACTT
-ACGTTTTTTTTTTTGTATTTTGCCTTTTTCTTCTTGAAGAATGGTGTCAC
-ATCACATTACGACCTTTTCTTTGTTACGGAGAAAAGAAGATTGGAGCGGA
-ACTGACTGAGGTGTGAATACTTTGTTGGTTTTTTTGGCTATACCTATTAG
-TTACCTTATTTTTGAGAAAAAAAAATTTGAAGCATGTTATTTTTCGAGTT
-GTTGGTAGGATGTTGATAATTACTGTTATCGTGATTTTCTTATTAGAAAT
-TAATTTTTATTTATTTAGTAGAATTGGGGATTTTTATTCAAATGATCCAA
-AATAATCTTTCGACACTGAAATCACGACCATTTTTGAGCCAATCAACGTT
-TTCAAACTCCGCCTACTCTGTCTGATTGGTAGGAAAAGTGGGCGGAGCAA
-ATTGCTGATTGGTTTCGAAGTTCTCGACTTAGAAATACCAGAGTTCATCA
-AAACTGAAATATTGCGTTTTTAAAGGATATATTATTATTATTATTATTTT
-CTCTCGATTTTTTTATTCTGTGGTTGCTCTGAATTTCAGATTATTCGAGA
-TAGTTTTCGATAAAGCGACAGATTGTTCAGTTTCTGAATTTTCCATAATT
-TATCCTCTAAAAGTGAAAGTCAAGGTTTCGTTCTTTGCAAAAAACTCATT
-TTTTTGAGAGTTTTCGGAATTTTGGCTCGCATCACGCTCCAATAAATTAA
-TTCAAAATTTCGGAAATTATTAACTTCTTCCATTTTATCAATACTGTGTT
-AATCTCACTTTTCTAATTTGAAACAAAAATTGAATTTTCATCGATTTCCA
-AAATACTTTACATGCTTGGCAATTGAAAATTAGTTTTGTTTTTCAAATTC
-TCAGTTTCCAGCCACTGAAAACATTGCGAGCCTCCATTGGGTCCGCTCCT
-TCCTTCCGAAACACATTTCCCAGTACTCTTTCCAATCTGGTCAACATTTG
-AAAGGCTGTTGGGGGGTCGAAAGGCAATAAACAACCGAAAAATAGTTTAT
-TCCAATGTCATCGAATCCTCCCTGGCTTCTCATATTGTTGCCAAAAATGA
-TGATGGAAATTGTTTTTCGTTTGTATACACACACATCATCCTGTGCCACA
-CCTTTTCCCCACTCTTTTTCCCGACGAGCTTTTTCATTCGGAAGGCGACA
-CAGATAGCAATTACCGACATATGGAACCAATCGTACTCTCTCCGCTGACT
-GCGACTACCTAATTAACCTTTTATTGAAAAAATGAGAGAGAGAGAGAGAG
-AGGATATGAACGGAAGAAGAAAAAGAGGCAAAGCAATTGTTTACTTGTTT
-TTCGAAACAATTCAAAATTTTGTTTGGGCTGTGCGCCTTTAAAGATGGAA
-AAAAAACGGAAATTTTCCAGCAATTCGTTAATTTTTTTGTCGGCAAATTT
-GGCAAATCGGCGAATTACCGGTTCGCCGATTTGCCAGAAATTTTCATTTT
-CGGCAACTTGCCGGTTCGCCGATTTGCCAGAATTTTTCATTTTCGGCAAT
-TTGCCGGTTTGCCGTTGCCGGAAGTGTTTAGAGGAATTGTTTATGAGACG
-GAAGCACTGTGCCTGTTTGCCAATTAAAATTGAAATTCTGAAATTTCCAA
-AAAAATGTGCACAAGCACCATTTGCCAAAAACTTTTTCAGTTGCCGGTTT
-GCCGATTCGCCGGAAAATTTAAAATCCGGCAATTTGCTAATTTGCCGGAA
-AAAATCGTCTACCGCCCACCCCTCCACCGAATTCGGAAATTTTGTAAAAA
-ATAACTTTATTTTTGGGCCAATACGATACTACTTTTCCTAAAAAGAAGCT
-GTTACAGTAATCAATGTATCATCTTTTCCATCTCGAATGGTACCTGTGTT
-TACCTTAACTGTCACATAACTGTGAAGAGTACTTGAGATGACAAGTAGTC
-TTATCAGAAAACCTCCCCGCTTACTGCTTCTCGGGTGTCGGGTTACCGTG
-TTTGCTGAACGGTTTTTCGTAGGGATTACTGTAGAGAATTGGATGAGTAG
-TTGGGATTAGGCGATTAGGGGGAAATTGGAAAACATGTCTGTGCACTCCA
-TATGTTTCTAATAAGAATCCTTGGAAATTTGCATATAACTCAAGAATGGT
-ACTGGTCCAGTTTCGTTTTGTTATCTTGATTCTTCGAAATGGTGCTCACT
-CAACTTGATTCCATCCCCAGGACGCTAGTTATTTTCGTAATCTCCGCGTT
-CGATCTCGAGCTCCTCCTCTATGGAAATGTTAATTTGTGAGGGCTATCGC
-GTCCACAGATTTATAGCGTCCGTCGTGCGGTTTCGCTGGGTTCTCGCAGC
-CACCCCCCCCCCCCCCCACTCATCAATCGCGTAAACTTTTTGTGAGCACG
-CAGCACACAATGTGCTCAGGAGGCTTCTGTCTCTTCGGAGATCCAACATG
-TGGCACCTCCTCAAAGTGTTCACTGGCCTCCTCGGCTCGGCAGTCAAATT
-TATTCATCTCTTTGGAGATTGGCTCACAATTTTTTTGATTTGAATTCAGT
-GACTATTTATCGATTTCTAGGGCTTCTATGTAGGTTGCCTGTGTGCCTGT
-CGTCTGACGTTAAGGCGGCCTCCGCCTGCCTCTCGCCTCAATCCGTGCCT
-TGTGCCAAAACATACGAATTAATTCGATTTTTATCAAATTGATAAAAATG
-AGAAAATTAAAAATTTGTAAATTCAGACAGGCCTGAGGCAGGCAGATTTC
-AGGCAGGCATCAGGCTCAGAAACCGCGCCTGTCTACCATGGAAGCCCTAC
-TGCTATGTAACGTTTGAGATATTCGGTTCAGATAAAATAAGTTGAAGTTA
-CGCGAAGAAATTCTGAATTTTGAATATTTTCCAATAGTTTCTAATAGTAT
-TTAGATGTTGTATTTAGATACTGTTGCTACAAAATTTTTAGAAAATTCCG
-TGGTAAAGTTCAAAAGACTACTCTTTCTCTGAATATTGGTTAATAATATG
-AATCCGTTCTGCTTTTTTTCCGTATTCCAATTCTTGACGACTTGATATGA
-AGCCAGCTCAAATAATAGGCCTCCCACGTAGTGTCAGGCTGTCCCAATAC
-GGTTTGATCGACAAAAAATGCTGGAGTGTTATGCCCTTCAAAATGTGACG
-TAAGCGCGCTCTTAACCATGCAAAATCAGTTGAGAACTCTGCGTCTCAAC
-TCCCGCATTTTTTGTAGATCTACGTAGATCAAGCCGAAAGGATACACTCT
-GTCACCACGTGGCCTCCTAAGGACTATTTTGCAAGGACCTAATTTTCTGA
-ACCTTCACAAATTGATCTGCACCGTTTGAGATCGATTGAAAAGTTCTAAA
-ATTTTCTGTCCTGTATACTTTTTTCTGTACATAAGTCCTACCGAAAGGGT
-CCCCCGCGGTAATAATTACCCGTCAAAACAATGTGTACTACTAGCCGAGA
-TATGAGTTGTTATTGTTGTCATAATACAACAAGATTTGGATCACCGCCCA
-ATTTTCTTGTCAAAAAGTTCCGCTTATCTCGTTTTCTGCTAATTAGAGAA
-TACTCTATGGGAATTGGTTGATCCACTCCATTAGTGAATGTTCCCCCAAT
-AACCATGGAGCTGTTAGAACAAAGACGAAAACCCGCCAGAAGACACACCT
-TCTTGAGAGCAGGTATTAGAAAAATGAATGAAAGGAATTGGGAGGGGAAC
-CCGCGGTGGCCGAGACTTCCCACTTGACCCGATTTGTGCACATACGCAAT
-ATCGATGAGGAGTGGTGGTCCATTCGATACAGTCTTGCACCATGTTTGTC
-GAAATGCTATTTGGTTGGCTGGCAGATGTTTTTGGTCCAATTTTCTTGTC
-AAATTTTGTCTTGATCTGACAGATTTTAGGATTCTTGGAATTCGACTCTT
-CACCGAAAAAATATAATTTTTCGGAGTTTGTTCAATTTTTCAGTATCCTG
-ATTGGAACATTTTAATGTTTTACAAAATTCGATTCTAAATTTTAAAGCAC
-ATTTTGACCTAGTAGGACTTTCGGAATTTTGTAGCCTTTATAAAAAATCG
-GTGGCCAAGTTTTCTATAATTTTTTTACGTTTTGAAATTGCCTTTTTATG
-AATTTTAAAATGTGGAACATTTTTTGAATGACTTAGTTTTTCAAATTCCA
-CGTAGTGTCAGAGTGTCCCATACCAGTTTAATCGACGTTGATCTACAAAA
-ATCGCGGGAACTCTGACGCAGAGCTCGCAACTGATTTTGCAGGGTTAAGA
-CTTGCTGACGGCACATTTTTTGGGAAAATTTTCCGCATTTTTTTGTAGAT
-CAAACAAATTTCATATTGCCTCGATTTGTTCGCTATAGTTGTCTAGTTTT
-GAAATCGTTGGAATTTCTTGAAATTCGAGTTCTTGAAACATTTAGGTTTT
-CACCTAGTTTTCTCTGCGTGTTTTTTGTGTTGAAAAAACGGTTCTCAGAA
-ATTTGACTGCTTTGAAAATTTCGAATTTCATCTCCAAAAAAAAGTGAACA
-ATTCGTATTTTTCTAGAATTTTTGGAAATCTCTTTAAAATGAGTTTTTCT
-GAAACATTTTAATCTTGAAATAGTCAGAGTTACGTCAAATTCTATTTTTT
-GAGGAATTTATTTTTTGTGAGAAGAAAACAACAAATCCGCAATTTTTTTC
-CGAATAATTAACCAATCCAAGATCCCCCCTCAAACCGGATGGCATTTATT
-CGGATCCCGGCAGGTGTTCGAATGAGATATGTATCCATTAACACATTGTG
-CATACACATAGACACATTGTCAACGTATGCCGTACACAACAAAACAACTG
-CGCTCGTTCGCACCTCAATCCTTTGATGTTCTCCGCCGGGGGCTCCTGTA
-AGGTCAGGAGTTTTCTAAAAATGTTGCCTTCTTCTCCGTCTTCTTCCTCT
-TCATCATCGAATATTCCAGAGGGGGGCCGACACGCTTCACTTGATTTTCG
-ATGGCAATTTGTTTGAAGAATTCAAGAATTCGAAGAATTTATTTGGAAAC
-TCACTACTCTCTTTTTTACGTTTACATCCAACTTTTGGCACTTAGGCGCC
-TCCAACTGCAACCATATGGTGCTCAATGAGCCGAGAGGGATCATCTGTGA
-ATTTGGTGTTTTTTTCTCAATTGGTTGCCTATTTGATTGGAGAGAGATTA
-ATTTGCATACAATTACCTCTATTTGGCTCAGGGGTGGACGGATATTGCCG
-TTCGGCATTTTTTGCCGACAAGTACGGCAAATCGGCAATTCGCCGATTTG
-CCGGATTGCCGGAAATCTTGATTTTCGGCAAACCGGCAAACATCAGCGTA
-CTATTTTACTATTCAAAATAAATGTAGGAACATTCATAGGATGCGTACAA
-TTTTGCCGATAAAATTTAAATTCTGAAGCTTCAAAAAAAATGTGCAAAAC
-CACAATTTGCCGAAAATTCTAGCCGATTTCAATTCCGGCAATTTTTTGCC
-GAAAAAAATTGCCGCCCACCCCTGATTTATATTCAGTCTGTTACCGATTC
-TAGTGAGGGGTTTCCAGCCTTTGCATGAATAGGTGTCTGCTACATTAATT
-GCGCAATCCACATTGATACAGAGCAACCTCAATTGTTGTTTTTTCTGTGG
-CCCGTTCTGCTCGTTACACCTATAAAAAGGTGGTCAAACAAGTCGTAAAA
-TTTGGGTCATGAGATGGTCCCTGGGTTAATTGGAGAAGTGCCGTCATTGA
-GAGAGAGAGAGCCAATTACGTATGAGGTCTGCTCTGCTCTCGGGAAGACT
-CTATAACCCTTCGTTTTTGGCGGGAGATATGAGATATTTTGCTGTAATTA
-TCGCACTTGTTTTGGGTATTCTCTTTTTGTATGATTTACCTAAAATTTTT
-GAGCAGTTGTGATTATCCTATTTTGTTTCGAGAACCTAGAAATGTTTCCT
-ATCATAGTAACCGTTTAACTCTGTGAGTATAGTTTTACTTTAAGTTGCTC
-CGTTTTTTATTTGACTAGCACAGCTTTTTTACATTGCTCCGGTTTTGGCC
-AAAGGTTTTCTGTTTTTTTTTTGCAGTTCTGACTTATTCTGGCCTGCTTT
-ACCCAGCTAAGCCTAGGCCCGGTTACAGTCCATAAGACAACATTTTTGAA
-CTCAATAATTGCCGAATTGCCAAAATGCCAAATTTTCGATTGCTGCCCGT
-CTGAGTAAGTCTGAAACAGTTTGTGTGAAATTGAGCCGGAAACTACTCGG
-AGTGATGTGGCCACTTCCCTATTTAGTTTCTCGGTTGATTTTCACACTTC
-CCGCCGAGAGCCCGAAGCATCTGCCAGCTGAACGGTTTCCGTCGTTTTTC
-ATGTCTATCGCTAAAATGTGCGCGTTACACACACATAAACATCACTTCTC
-TCATAAAGTGATGGATAATTCGAGTGGATTGCATCTGACACCACACTTCC
-GATAATCGCTTCGTCGTCTTGTCATCATCGTCGTTTTCTTCGTCTTGTTG
-TCGTCCGGTCCCCACACACACATCAAAACGGCTACTTCCGACGTGTCGGT
-GGTTTGTGTGTGTGTCAAACGGCACCACCACAAGTGGTTGCCCTCGCCCG
-TGTGCTAATTCGCATTTTGTCTTGTTAATCACGCAATAGTGATAACAATC
-GCTTCCGGACCATTGCTAATATAATATATTGGCTACCGCGGGCATGTCTT
-GGCAATAACCTTGATGTCAAGTTTTATCGTTAAAATGTGAAGCTGTATGA
-TTGCGAAAAATTTGAAGTTTTCCCATTCAAATTGTAGGCATATTTGAAAA
-ATTTCTGAAGATTTATATCTGTCGTAAGTGGAACGGTTTATTTGGTTTCT
-TGGGTCTCGTCGCGAAAAGCTTTCACTATGGTTTGAAGCACGACTGGGCG
-ACAATCGAAGTCGAAGTTCGGCAATTCGATAATTCGGCAATTATCGAGTT
-CAAGATTTTCGAAAGAAAAACTCAAAAAATAATTTTGAAATCTATTTATT
-AGTTCTGGACACGCGGAGTCAGAAAGTCCCATTTCGCTTTGATCTACGAA
-AAATGCGGGAGTTGAGACGCAGACATCTCAACTGATTTCGCATGGTTAAG
-AGTGTGCTGACGTCACAATTGTTCTGGAAAAAAATTCCCGCATTTTTTGT
-AGATCAAACCGTAATGGGATAGCCTGGACGTAGAACTCGCCAAATCGTAG
-ATATATGCATAATGAAAACTCTAGAGTTAACTCTGCCACCCTCATAAAGT
-GAGTTAGAAACATTTCTGCTCTGAGGAACTATAGAACCCCCTTTCAAGTC
-GATCGTCAGCAAATTCTAGAAAGATCTGACAGTGGCCGATTTTTTAATGT
-TTCTAGGCCACGTAAAAAAGCTGATGTCTTGTTACTTTTCAATTCGAAAA
-TCCCTTTTTTTAATTTTTCGGCAGCACCCGGTCCGAGCCAACATCTTCCT
-AAACACTTCAAAACCCCGCCCCCTTCTGCCCTCCCGGGTGTCTCCGTGTT
-GTTCAGGGTGTTGTCCACCCCCTAGACACCCAACTGACCATTCACCCGTC
-TCCTCCTCCCCCTCTACAACAACCACCACCACCTGATCCATTCCATTATA
-ATGATATTCCGCATACTTGTCATACAGAGAATACCCGGTTTGCTGCTGCC
-AAACGGTTTTCATTTATTCCATTTCTCACTCCTTGATTGTTGTCAATTCT
-TCGATTCGATGCGGCAAAACTAGCGCCAGTGGGGAAATTGCTTTAATAGT
-AAACAATTTTTTTTTAAATTTCCTATATTTTTTGTATAAGATTTTCTTTT
-TTAATTGCAAATCCCATGGGAAAGTCTCAAATTGCATAAAATTCCAATTT
-GAATTCCCTCCAAGATTTCAATGTTCGATGGAGCGCACTTGAATTATTAT
-AATTTTTATCAATGAATTTTTTTATCATCTCTGACTGATTTTTCACGATT
-TTTTGTGTAGTTTTAGAGGAAATTTACTGAAAAATCCAAGTTAAATGTAA
-ATTTCCGATTTTTATACAATTTTTGGACTACTTTCCCCGCCGCCACCGCT
-AAAAATCCCAATTTCCTGCAAGTTTTCACCTGCTCTGACTCATTTCCGCG
-AGCGCGCGCGCTCGTACTTTTTATCTTTTACTATTTATTTATCTCCTCCA
-AAAAAAAATCCCGTTAATTTTTTTTCCCTTACAATTTCTCATAATTTACT
-CATTTAGTTTGGCTTAAAAAATGCTAAATTAAATTTTTTTTTCATTTCCA
-GATCACATGACACAACGAAAATGAGGAGAAAAATGAAGTTATTCCTATTT
-TTATTATTAGTAATTAATATATGTCGGTCGGCCGCTGCTAACGGTGACGA
-ATGCCCGAAATTGTGAGTTTTTCGCTTAAAAATCAGATTTTTTTCGAATT
-TACTGTGAAAAAGCGGGGGTTTTGCCTGAATTTTCACTTAAAACTGCTTT
-TTTTTGCTAAAATCCCGAATTTTTCAGAGAAAAATAATTCAAACTCCATT
-TTTCAGCTGTAAATGTGCTCCGGATCCGGTGCAGCCGACGTCTAAACTCC
-TATTATGCGACTATTCTTCGAAAAACACGACAATTACACCTATTGCGTCG
-TCGAATTATGATCAGGTTGCTAATATTCGGTGAGGTTTTTTGATTTTTGA
-ATGAAAAATTTGAGAAATTTTTAAAAATGGGAAAAAATGTGATTTTTAAA
-TCAAGATATCGGAAAATACGAAAAAATTTCCAAGAAAATGGTGGTTTTTA
-TCGAAAAAATGTTAAAAATGCATAGAAAATTTGGATTTTCGAGTTCGAAA
-TTTTCTGAAAACAAAAAAAAAAGTTTTTTTTTACACTAAAACATTAAAAT
-TGGATTTTTTTTTCCGAAAAACATAATTTTTCAATTTCTAACAGTAAAAA
-GCTCACAAAATTCCTTGAAAATTGACAAATTTAGTATTTTTTACACGAAA
-AATGCATTAAAATTGAATTTTTAAAACAATTTAAACTTAAAATAAAATTT
-TCATTTATTCTACACGGTAAATGTATTAAAATAATTAAAACTTCGAAATT
-TTAAATTAGAAAAAATCAAATTTCCTCCTTATTCTCAATTTTTTTTTACA
-GCAAAATTTCAGTTGAATTTTCCCATAATTTTGAATTAAAAATGTGTTTT
-ATTCCAAAAAAAAACTATTTTACAACAAAAAACTAGATTTTTTCCCAATT
-TTCTATGAAAAATTTAATTTACCAATAACTTATTTTCTTTTTCCAGATCA
-CTATTCATATCTTGTGATAATAATAATTTCCAATTTCCGGATGCCTACTT
-CAAGTCGTTAACCGCGTTGCATCATCTGCGGATAGTGGTGAGTTTATTAT
-ATTATCAGCTGTTCTCTACAGAACATCTGCTTTTTGCGTGTAAATTTAGA
-GGTCAATTTTCGGAAAAATTGGAAAAATTGGCCTAAATCTCAATTTGAAG
-TAGATTTTCACGTGTTCAAAAATGTTCAAAAAATTCAATCAAAAATTCGA
-TTTTTGGAATACTTCAAAAAAATTTAATTTTCTTCGAGAAAACCGGTAAA
-TTACAAAAAAAATTCGTTGGCGATTTTTTTCTGTAGTTTTCCAGAAAAAC
-AAACGAAAATTTTAATTTTTAATTTTTAAATTTTCCAAAAAAAATTTTTA
-AAAATTCATAAATATGTCCATTTTAATTTTAAAAATATCGGAAAATATTC
-AAAAAATGAACTTTTCTATCGAAAATTTAACAAGAAAAAATTACGAAAAG
-TTCATTCAAAAAATTAAAATTCTTCTATATCTGAGGAAGGCTAACAGTAA
-TTTTTTCCCATTTTTTGACTCTTTGAGCAAATAACCGTATCACTAATTAC
-CTTAACCATCAAAAAAGAAAGGTGTGCCTGTCTTCTATTCATCCTCCTCT
-CGACACCAAATTCTTAAGAAGAGCCCCCCACTCGGATGTCTCTAATTAGG
-CACAAATGTTACGTCATTTTGTCATTTGTACGGCCACAGATGACCTCCGG
-TGTGCTTGGAGGACTGCGAGAGAGGAGGATTAAGGGGATTTTTATGTCCT
-ACAATTGATTTTTTTAGGTCAAAAGTAGGGATTTTAAGGCCAAAAATAGA
-GATTTTTTAGGTCAAAAGTAGGGATTTTAAAGCAAAAAAAAAAAATTTTC
-GGCCAAAACAGTGGTTTTTAAGGCCAAAAAATTTAATTTTTCCGTTTATG
-ACACCTAAAATTGGGGTGAAATTTTTTTTTCGGATAGAAATCTAAAATTG
-CAATTGTTAATTATTCCAACATTTTTTTTTGCATTAAACGTTATTGTAAA
-AACATTGAAAATCACTTGATTTATCCGAAAATTTCATTTATTTCAGATAA
-ATATTGTTTAATAAAAAATGTGTTAAAAAACATGGTGCATAGATATATAG
-ATAATTTTGTAGAATAATTGAAAATTGCAATTTTTAACTTCCTACCCGAG
-TAAACAGAATTTAAATCCAATTTTAGGTGTCATAAACGGAAAAATCCCAA
-TTTTTGGCCTTAAAAAATCCCAATTTTTCGGCCTAAAACTCCCTAATTTT
-GGCCTAAATCACCCTATTTTTAGCCTAAAAAAGTCCCCTGTTTTTCCATT
-TTCCCCAGGAACTCGTAGAAGAACATGTGTTAGGCGTGAAGAGGTTAAGC
-CGATTAGCCATGTAATATTCAATACTTGAGTATAGAAGGGCCAGAAGCAG
-CAGCAGCAGGGGGTGCTCCAAGAGCACCACCTCAACAGATGTATAAAGTG
-GTTTTCGAGTAGATTTGTGGTTTTGCACACGGTGGAAGAAATCTGAAATT
-TGAATTTTTTAAAGCCATTTTTGTGCTGAAAAATGTACAGAATAACCGAA
-ATTTCACCACCCTTTAAGGTACGGGAAATCTCCGGGAAAAAGGCTCAAAA
-ATTGCATAAAAATGGAGATTTTAAAGCTAAAAATAGCTATTTTAACAAGT
-TTTTTTGCAGGGATGCGAGACCACACATTTCTCTGTGAAATTGTTCGAAG
-ATTTGGCCGCTTTGAGAAGATTGGAACTCGATCAGGTACATTTTTCTTGG
-AAAATCTAGAAAATTTTGCTGAAATTGGCTCAGAAATGTCCTAAATAGTA
-GAATTTTTCATTAAAAAGCCTCTCAAAACGGCTTAAAATTAAGTAAAAAT
-CGACATTTTTTCACAGATCTCCACCGCCTCAACCTCTTTCGAAATGACCG
-AAGACGTCCTAATGCCGTTGGCTCGTCTCGAAAAGTTTTCCCTCACGAGA
-TCACGGAATATCGAGCTTCCACAGCGACTTTTGTGCTCTCTGCCGCATTT
-ACAGGTATATTTTTGGGTAATTGATAATTCGCCAAAAAGAACAGCAGCCG
-AAAACTCAAATTTTTCACGAAATTTGCCGAAAAACTAGATTTGTAAAATA
-AAAAGAATGCAAGAATTTTTAGCTTAAAAATCTCAATTTTGAACGATTTT
-TAAAGCAATTTCAGTATGAAAAATCCAGATATTTTTTGGGTAAAAATTTG
-GTGAAAACGCGTTAAAATCTGCATTTTTGAACGAAATTCGCCAAAAATCA
-AGACTTTTGTAGTGCATTTTACTGTAAAAATGTATACCTATTTTCTATTT
-TTATGCGTACTGCGCAATATATTTGACGCGCAAAATACCTCGCAGCGAAA
-ACTACTCTTCAAATGACTACTGTAGCGCTTGTGTCGATTTACGGGATCGA
-TTGATAGAATATCAAAATTAGAAATAAATGGGAAACTACTGCGAAAACAA
-AAATTTATTTCAAAAATTGAGTCCGTAAATCGACACTACAGTAGCCATCT
-AAAGAATTACTGTAGTTTTCGCTACGAGATATTTTGCGCGTCAAATGTGT
-TGCGCAGTATGCATTCCCATCTTGTTCTCTACATTCAATTACCACCACAT
-CTCACAGAGAAGGAATTAGTTGTTTATTAGTACGTGGGGGGGGGGGGGCT
-TTAAAGCTTACTACTTCTTCTTTCTTTCCACTTTCTGACGTTCAACCATC
-TGGTATTCCTGGCGGCGGGGCAATTGAAAATGAGAACAAAAGGACATCGA
-TGGAGGGAGGAGGATTGAGAGTTTGGAAATTGTGAAGAATGCGCGCGGAA
-GGAGGAGGTCAAATATCACAAGCGCCGGAAGTTGTTGTCAGCCAGAAGCA
-ATAAAGGCCTAATTATGATGATGATGAAGAACCTCCCTGAAAGAGAATAG
-CGAAAATGTGAAGTTTCCATCTCAAGGGAGCGATTTTTTAGTGATCATGG
-AGTCTTGAAGTGTGCACATAGTCTACGTGCCCCACAAGAGCCTATGCCTG
-CCTTATGCCTACTCACATGCTCACAGCCAAACTCTTTCGAAATCAGAATT
-CTACATTGTAGAATCTACAACACTGAAGTTTCTGCCATAACGTTGAAAAT
-AGGCACCTACGCCTGAATACGTGCCTGATCAACATGGATGCCATATAGTC
-CAGGCTGTATAGTCGTAAAACAGGGATTTTTTAGGCTCATGGGTTTTTGT
-CGGAAAAAATCGAACATTGAGAAAACCAGAAATTTTTCAAATTTTCGTAT
-ACTATTCCACGAATCGTTTCTCCCGTTTATCGAATCTCCACGTCGCACTG
-TAATTTTTCAAGTATCGTTAGTCCATTCGCCCGAGAAACTCCACAGTTAC
-AAATGCTTTGCAAGCATTTTCAAGAAACCATGGTTCCTGGCATGTTTTGG
-CGCATTCAATAATGCCGCTAATAATAATAATAATGCCTCCTATTATGATG
-TCGCGTTGTCATCGTTTGCTGCTGCTCCGTCAGATACTTTATGGGGTTGT
-TGTTTTCTCCCTCCGCATCAAACGACGTTCCTCTCTTCAAAATGATGATG
-GATATACATATATCTATGTTTATAGAAGAATTGAACCCCACACTTTACAT
-ATGAATAGATGGGGACCTTGTTACCTTGACTATCGGGAAGAGATTGAAGG
-TTCCAAAGACGGCTGGCTGTGGCTCATTAGGCTAAATGATGCGTGATATT
-ATTCGCTCTACGGCACCTCTATGATCCAGGAATAGCAGTCACTGTCAACA
-AGAGTCACCTCACGGCAACAATACTCCGCTAATTACGGTTTGCGGCAAAT
-CCCAGAATTTATTTGAAATTCTAACTGGGTGTTGCAGATGGGTCGAGGAA
-ATATGATAGCAATAATTATTGTTACGTGGCAATTGTAATCCGTCAGATAT
-CGTTTCGAGACCTGCTGACTCAAGAATGTGAAAATGGACAAATTTGGAAA
-ATAGGTAGCGGAAAATTTTCGCAAGTTTTGAAAATTTCGGTCATGATACG
-ATACGAACTCCTTGATTTTCACAGCCCGACAAGCCGTACGCGTACGCAAT
-TTGTCTACCGTATACCTGAACGTTCAGGCTCGTCTATCTCGAAAACAGTT
-GGTCCAGCCTTTTTGTGGGGCATATAAAAAAGGTCAGAACATAAATTCTA
-AAATTTTTTGGACCATAGCTTGTTTCGTTATCACGCGCCCAAACCTGATC
-TACACTCAAATTATCAGTAGAGCGCATTTGCATGGATGTACCACTTGCCG
-GGCCGTGATTTTGAATGGAATATTAAATTCCACGTCACTCTAGTGAATCT
-CCGCTTCTCAATATGCTTCATAATTCATCAAATTCAATTCATTTTCGGAT
-AAGCCAGTTGTAAACAGTTGTGTGTGTGTGAGTGAGCTCATCCTTCATAA
-AATGAATAGAGATAGAACACTGACACTCTCTCAAAGACAAGAGGAATTAA
-TAAATATGAGAGCTCATTAGCTGCTCTTCTCGTGACTACTAATTAGGAGG
-GTGGTACATGAAACAGTGTATGTGTAAAGGGATCCCCGCCGCCGCCGCCG
-CCAATGTCTTTCGGTGTATGGCAATATCCGAGTGGTGTTCTCATTTTGAA
-GAGAGTATTAGGATGTAACGTATCAACTGGAGAGAGATAGTTCAAAGATT
-GGGGATTTGAGATATTTTAGGTGTCGAAATGGATGAAATATAAGCATAGG
-GAGGAAATAAATAGAAAACGATATACTTAAATAGCAATAGTTATTTGAGT
-TCTTACTGTAGTTTTCGCTAAGAGATATCGCGCGTCAAATAAAATGCTCT
-ACGTACGCATTCTCATGATTTATTGTTCCCGTAATATAAACATAGCAAAC
-ATTTTTAATGTTTAAATATTCCTCAATGCTATTGAAATTCAAATTAGTAC
-AAAGAAAGCAATTTTTCGATTTTTTTAACGAGAAAACTAAGTTTTCATCA
-AAAAATATGTAGATTTTGATGAAAATAATATGACAATTTATTTAAACCTA
-TATATTTTTTTGTCCAAAACAACTTTACGAAAAAAATTTTTTTTTAAATA
-AAATTATTGGATTTTTCGTCAACTTTACGATAAATTCCGAAAAATTAACA
-ATAAATATAGGAGAAAAAAATCCGAAATTAACGAAATCCCCTGTTCCAGG
-TTCTGAATATCTCGTCAAATGAGCTTCCATCACTGCGAAGAGAGGAATCG
-TGTGTCGCTCAGCAGCTTCTGATCGTCGATTTGTCTAGAAATCGGCTCAC
-CAACATCGAGTAAGGGATTTTCCGGATATTTTATAATTTTGATCTTTAAA
-AATTTCAAAGTTTGTGAAAATGTGAAAATCTAAAAATGTGGAACAAATAT
-TGGTTTTATCTATTTAATACCCCAAAACTTTGAGATTTTTCCGTTGAAAA
-ATCGAAAATTCGAAAATTATCTCAAAAATTTCAGGCAATTCCTACGTGGC
-ATCCCGGCAATCCGGCAAATTTCGGTGGCTTACAACTCGATCGCCGAGCT
-CGATTTATCGCTGGCAACTCCATTTCTACAACAACTCGATGCTGAAGCCA
-ATCGAATCGTCGACTTGACGTCACTTCCAGGCACTGTTGTACACGTGAAT
-TTGGCTGGAAACGCGCTGAAAAGGGTGCCGGATGCGGTAGCCGAGTTGGC
-GAGTCTTGTGGCGTTAAATGTGTCGAGAAATGAGATTGAAGCCGGAAATT
-CGTCGGTTTTTTGTGGGTTTTCGGATTTTTTTTTGGAAATTTGAAATTCG
-GAAAAAATTCAATTTTTACATACAATTTTGCGTATTTTGATCATATTTGT
-TTTAAAAATCGAGAAATTTAAAAAAAATCAAATTTCGCTTATTTTCATTG
-GAGAATACATGAGAAAAATATTTTTGTTTCGAAAAAGAAAAATAGCCAAA
-ATTTAATGCTATTTTTTCGAAAAATTTCGATTTTAATTTTTGAAAAAGTA
-TTGAATAATTTCATCAAATTTGTTTTATTTTGATGAGAAAATACGTGAAA
-AATGGAAAAAAAATATGAAAATCTTTAAAACAAAAAAATAATCAGATAAT
-TATGCAATTTGGCCTGAATTTTCAAAAAAAAAACTTGGATTTTCGAAAAT
-TTCATCAAATTTTGTGTATTTTCATGCAAAAAAAGATAGGAATTTCCAAT
-TTTTGACCTTAATTGCAAAGAAAAATTCCTAAAAAATTGTAACGTTTCAA
-AATCTCGATTTTCTTCTGAAATTCTCAAAATCTTCATATTTTTCCAGCTT
-CCCCAGAACTCGAAATGCTCGACGCCTCTTACAACAAATTGGACAGTCTG
-CCCGTCGAATGGCTTCAAAAATGCGAAAAACGCATTGCTCACCTCCATTT
-GGAGCACAATTCGATTGAGCAGTTGACTGGTGGAGTGCTGGCGAATGCGA
-CTAATTTACAGACGGTTCGTAGACTTGTTTTTTTTTTTTTTTGAAAAAAA
-ACACGCTGAAAAAATCTAATAAAACCCAAAAATTTGCATTTTTGTTTAAA
-AAATATGAAAAATTGTTCAAATTCCTAGTTTTCAATATTTTCAACAAAAA
-AAAATTCTAGAGCTTCCATGGTAGGCAGGCGCGGTTTCAGGGCCTGACGC
-CGACCTTTCGCCTCTTTTTTGCATTTTTACGGGAATTTTCAAATTTCTAA
-TTTTCCCCATTTCTATCAAATTATTGAAAATCAAATTAAAAACGCGAATC
-GCGTATTGAGGCGAGAGGCACGCAGAGGTTGCCTTAAGGTCAGACAGGCA
-AGCTTTTTAACGCCTAACGTAATTTTAAAACCTGAAACATTAGAAACTTC
-CACACGTTTGTAATTTCACTGAATTTTACTGCACCTCTTCATAAATTCAA
-TGTATTTAGATAGTGTAATTTTTAAAGGTGGAGTGCCGAAATTAAAGACT
-TTGCTTTTTTAGACCAAAATTGGTCCTAAATAACCGAATTTCGTAATGAG
-ACTTTCTGAAAATTTCTCAAAAAAAAGTTATGGCGGTTCAAAGTTCGGGA
-AAATAAGGTCAATTTTCAGCTAAAATCAAAATTTTTAAAATTTTTTATTT
-ATCACTTTTTGATAAATATTGTGGTCTTTGATTAGGCGGGGCACCAATAA
-AAGTTACATTTTGTGCCCCACTGACCATGAATGTATTTAAATCAACGAAT
-AAACGCCTAATCAAAGTATTTATTAAAAAGTGATAAATATAAAATTTAAA
-AATTTTGATTTTAGCAGAAAATGGGCTTTTTTTTCTCAAACTTTGAACCG
-CCATAACTTTTTTTTTGAGAAATGTTCATTACGAAATTCGGTAGTTTTGG
-ACCAATTTTGGTCTAAAAAAGCAAAGTCTCAAACTTCGGTACTCCACCTT
-TAAAGAACAGTGTAATTTTTTTCTATTTTCCAATCAGTGCAACTCTAATA
-GCAACTCTAAACTTATTTCAATAAACTCTAGGCACAGTATTTTGAATAGG
-CGATCGCGTGACAGTTTTAACCAAACATAGTCATGATGACCTTTTGTCCT
-TACAGAATCTTCTCAAGTTCATGCACACACAGGTGTCATTTACTCTGTCA
-AGTATTGTATAAGTGTGATCCCGAGAGTATTATAAATGGTAGTTAGACCA
-CCCTTATGGTTAAGTTGTTCGTATAATTGTAGGGGTGGGGATCTTACCAC
-ATTTATACGGCCCCCCTCCTATTGTATTGTATTGTTGCCACCAGTCGTCT
-TGAGAATCTCTTTCAATCCGGGGTGACAGAAGGTGTCATATTGTCGGAAT
-GTGTAATAGGTGGGTCTCGAATGGATATCACTAACAGCTGTGAAGGGATC
-CGAGAAGGGTTTTCGGTCTTTCTAGGGGTTTAACTTTCCGCTGTCAATAT
-TATTAATCTTACAAGGAAAGGGTTTTAGTTTACCGTCAGACTTTAAAACG
-AGACATGTGTCATTTGAAAGTGTTCCATAAGTGTATGTCACTCCAAAATT
-TCAAGCGGCAAAGCTCCAGTCTCAAACCCTCTAGCATCGATCTGAAAACG
-TTTCAGTGCATTTTTCACTACTTTGAGGCAAGTAGAATTTCTCCAAAATG
-TTTTTTTTGCAAATCTTCAATGTTTTTCAGAACGTTTAAAAGAAGGAAAA
-CAATCTGGAAAATTTTTGGAAAATTTTAAATTTTTTGAAAAAAATCTGAA
-ATTTCTTGGACCTGGTGGCGTGAAGAAATGTTCAGATTTTTTTCAAAAAG
-CTTAAAAATTTTCCAAAAATCTCCCAGATTGTTTTCCTACTTTTAAATGT
-TCTGAAAAACATTGAAATTTTGCATGTTAGTACGATTTGATAATCGTGTT
-ATAATTACATTACACATACATAATAATCAATTGAAATATACAATTCTTAA
-TTATAACCTGAAATTGAGATTAGATACCTTAGACAATACAACAAATAAGA
-ATGTGATCGATTCAGCAGACCCCTATTTGTGAAAAATGCCTTCTAAATTT
-TATTTTACACTTCTCCTAGTAGATGAACAGCACCTGCCAATAATTTCATT
-GACAGCCGGATGGTTTTTGGCTCCTCTAAGACAGTATAATCCCGTCTCCC
-CCGGGGGGAAGTGGTGTCAAATTGCTTTGCGGAGCAGGTGCTTTTTTCTG
-AATCGAATTGGCTTATTGGTGACGGAAAAACCCCTAATAGAATTGATACA
-ATTTGGTTTTCAAGAGGATTTGGGGAAGGGTTTAGAGGGTAATTGAAACT
-GAGTAGATCTTCGTCTGTCGTGGAGATCAGAAGATTGAGGGAAGTACTGG
-GTTTAAGGGGGTCAAGGAGTACTGTAGCGCATTTCGAATACTACTTTAGA
-TAGTTTAGGTATTATATCAATAGGATAATATATTATCAAGTTGCACCAAA
-ATTGGAGATTCTAGTAGTGCATTTTCTTTATATGCTAGGTATGTATAAGT
-TTCTAATAAGTGTATATACCTACCATGTACCTAGGGGGAGTAGAGTTTGT
-GGGTATTTTGCTTAAATAGACTAAAACGTGTCCAAAACCACCGAATTTCA
-AAATGAGACTTCACAAAAAATTTCCAAAATTTTTTTTATGGAAAAAAGAG
-CAAAATTTAACTAAAATCCGAAATTTCGCACAGTTTTCTTTGTCACAGCC
-GCTGGATTTGAATTTTTCTGAAATTATCACCCTTTAATCCTTATTTTAAT
-AATTTATCTCGCGGAAATTCGTTGATTGAGACAACTTTTAGGCCGATAGG
-CATCCCATCTTGATCATTTTTGGATGCCTATCGGCCTAAAAGTTTTTTAA
-TTTCAGAAAAACTAAAATCCAGCTGCTGTGACAAAGAAAAGTGTGCGAAA
-TTCCAGATTTTAGCAAAATTTGACTCTTTTTTTTCTCGAAATTTTGACTC
-GCCATAAAAATTTTTGGAAATTTTTTGTGAAGTCTCATTATTAAATTCGG
-TGGTTTTGTACCAGTTTTAGTCTATTTAAGCAAAATACCCACAAACTATT
-ACACTTTACTTTAACAAGACACACAATAATTCACAAATGGTGTAGTATCA
-TGCCGGAATTTATATAGGATTGATTCTTGAAGAACGAAATTTTAAATAGA
-TTATTGCAGACTATGTAACACTATTTGTATAAACAATTAACATAGTGTAT
-TGAATAATGACTTTATTGAAATTAATACAGTTTTTGATATACCCATCTTC
-TATTAGTATATCATGCAATACTAATAGGTAATATGCAATATCACTTTAAT
-TGTTATTTCCCATGCGTCGTGTTTATACAAATGCTTTATATACTCGAATA
-GTCTATAATAATCCAATTAAACTCGAGAATCCCAATACAGAATATAGTGT
-TTACCAAAAACACTTGTGTTATTATTCTAATATACATGCACACACACACC
-CACACACAGGTTTGACACCAGTTCTACTAATATTTGCATAATACCATTGA
-GATACCTGAAGTACCCTATAGATATGCACGGGATTCGTTTCGGGCACTGC
-CACGGAAAATATTGAAAAAGTGTGGTAAATTTACGAAAAACAACAAAAAA
-AATGCGATTTTCCAGAGAAATACGAAAAAAAAGAAAAAAATATTTAGAAA
-ATTAACAACAAAAAAAAAAATTTTTTTTTATTAAATAATAAAATGTGTTC
-ATTCTGTTTTTCCCCTTTCAGTTAAACTAGGGCTTCCATGGTAGGCAGGC
-GCGATTTCAGGGCCTGCCTGAAACCTGCCTGCTTCACGCCGGCCTCAGGT
-CGCCTTAAGACGGCTGCTAAAAATTTGAAAAAAAAATTTCAAAATTTGAA
-TTTCCGCGCTTTTTTCGAATTCCTAGAACGCTTTTTTTTAATTAAAAAAA
-AATTTCAGTTGGACCTTTCATCGAATCAACTTCGAGTTTTTCGAGACGAA
-GTACTTCCGGAGAATTCGAAAATTGGAAATTTGAGACTTTCCAACAACTC
-TTTGGAGCTCCTCGAGCCGTCGAGCCTGAGCGGCTTGAAATTGGGTAATC
-TAAATTTATATGAATTTTGCAAATTCTAAAAATCCTAATTTTTTCTAGAA
-TCCCTTGATCTGAGTCATAATAAGCTGACAGAAGTGCCCGCCGCAATTGG
-AAAAGTCGAGCAGCTGAAAAAAGTGGATTTGAGCCATAATAGAATTGCGA
-AGGTTTATCAATATGTGCTCAATAAGATTAAGCAATTGCATACTGTTGAT
-TTGTCGAATAATCAGTTGCAAAGTGTGAGTTTTTTGTTGATAAAAATTTA
-AAATTTGAATTTTTTCTTTTTTTTTAATTATTAATTCTGAAAAATTCAAC
-GAAATTTCCGAAAATTACTTGAAATTTAAATTTTTATCCAGAATTTAGTC
-TATAAAAACGAAAAAATACGAATTTTCGATTAAAAAAATTAATTTATTTA
-AAAACACACTTTCGAAAAAAATTTTGAATTAAAAAAAATTTAAAGTTCCT
-TAAAAAACTATTTCCTCAATTTTTTTTCTGAAATTTCACTCTTTCATTTT
-TTAATTCATTTTTTAAGTCTATAAATACGAAAAAACACGAATTTTCGATA
-AAAACACATTTTTCAAGTTTTTAAAAATAATTTTAAATTGGAATTTTTCT
-TTAAAAAATTGTTTTTTATAAAAAAACACATTAATGCATTTTTTAAAAAA
-TAATTTCTTGAAATCTTCCAAAATCGGTTGTAATTTTAGCGAAAATAACT
-ATTTTTTCCAGTTTTTATTTAAAAAATCCCTCGAAATTTGAATTTATCCA
-GAATTTAGTCAATAAATGCGAAAAAATACGAATTTTCGATTAAAAAAATT
-AATTTATTTAAAAAACACTTTCGAAAAAAAAATTTTCAATAAAGAAACTA
-GTTCTTAAAATTTTTTTTCTGAAATTTCACTTTTTCATTTTTTAATTCAA
-AAAATTTGAATTTATCTACAATTTACTCTATAAATACGAAAAAAATACAA
-ATTTTCGATGAAAAAACACAATTTTCAAATTAATAAAAATATAATAAAAA
-ACATATTACTAAATTTTTAAAAAATAATTTCTTGCAATTTTCCAAAACCG
-GTTTTAATTTTAGCGAAAATAACGATTTTTCCAGTTTTTATTTTAAAAAT
-TCCCTTGAAATTTGAATTTCTCCAAATTTTTTCTTGAAGTTTTTAAAAGT
-TCCATCATTTTCTACTGGAACTTTCAAAAAATGTTCCTTAAAAAATCTCT
-AATTTCCGCTAATTTCTACGTAAAATTTCAGCAAAAAAACAACGACATTT
-CATGTTTTTTTGTTAAAAAAATAATTTTCTTGAAAATTTCTTTGGAATTC
-GATTTTTTTTGAGTTTTAACCCAATAAAATGTATAATTTAAAAATATAAA
-AATTCCAGATCGGCCCCTACATCTTCTCCGACAGTTCTGAACTTCATTCC
-CTGGACGTGTCGAATAATGAGATTTCACTGCTGTTCAAGGACGCTTTTGC
-GAGATGCCCAAAGCTGAGGAAAATTTCGATGAAAATGAATAAAATTAGTG
-AGTTGAAGCACGAAAAACTGCCCAAAAATTAAAATTTTGAAATTTTTGTG
-TTTAAAAACCTAGAAAATCGAGATAAAGTAGGCTTAAAGTTGCTCAAAAT
-CCGCAGATTTTTTGAAATCGATTTTGAAAAGTGCACATGGAGCTAAATCA
-GACTTCAAAATTCTCAAATTAATTGCATTTTCACTCGAAAACCTCTGAAA
-ACTGCCTTCTTCCTATATTAAATCAAATTTTCTTTCAGAATCCCTCGACG
-AAGGTCTCACAGAAGCTTCCGGCCTCCGACGTCTCGACGTATCTCATAAC
-GAGATCCTCGTGCTGAAATGGTCGGCTTTACCTGAAAACTTGGAGATTCT
-CAACGCTGATAACAATGATATCAATCTCCTGACCGCCGCCTCAATGTCCC
-CAAGCACCGCAAACTTGAAGTCCGTTTCGCTTTCCAACAACGGCATCACC
-ATAATGAATGCGGACCAGATTCCGAATTCGCTCGAGTCGCTGGACGTGTC
-GAATAATCGACTTGCAAAGCTCGGGAAGACAGCGTTGGCCGCGAAATCTC
-AGTTGAGAAGGCTCAACTTGAAGGGCAATCTGCTTACCGTAGTGGCCACC
-GAGTCGATGAAAGTCGTAGAGGCTGTGCATCCGTTGAAAGTGGAAATCTC
-GGAGAATCCTCTGATCTGTGATTGTCAGATGGGATGGATGATTGGTGGAG
-CGAAGCCAAAGGTTCTCATTCAGGACTCTGAAACCGCAAGCTGTTCCCAT
-GCCGTTGATGGGCATCAGATCCAGATTCAAAGTCTCAGCAAGAAGGATCT
-ACTGTGCCCATACAAAAGTGTATGTGAGCCGGAATGTATCTGCTGTCAAT
-ACGGAAATTGCGATTGCAAATCCGTATGCCCCGCCAATTGCCGATGCTTC
-AGAGATGATCAGTTTAATATCAACATTGTCAGATGCCACGGGAACTCATC
-AATGGTGCCCAAAAGAGAATTCGTGGTCTCCGAGCTCCCGGTCTCTGCGA
-CAGAGATCATTCTGAGCGGAGTCACCCTTCCACAGCTCCGAACTCACAGC
-TTCATCGGAAGACTTCGTCTCCAGAGGCTTCATATCAATGGAACCGGGCT
-CCGATCCATCCAACCGAAGGCTTTCCATACTCTTCCAGCACTGAAGACGC
-TGGATTTGTCGGATAACTCGTTGATCTCGCTGAGCGGGGAGGAATTTCTA
-AAGTGTGGAGAAGTCTCGCAGCTTTTCCTCAATGGAAATCGATTTTCCAC
-GCTATCCCGTGGAATCTTCGAGAAGCTTCCGAACTTGAAATATCTGACAC
-TTCATAACAACTCCCTCGAAGACATCCCTCAGGTTCTTCACTCGACGGCG
-CTCTCCAAGATCTCCCTGTCATCGAACCCCTTGAGATGCGACTGCTCGGG
-AGGATCCCAACAGCACCTTCACCATCGTCGTGACCCAAAAGCTCATCCAT
-TCTGGGAGCATAATGCGGCCGAGTGGTTCTCGTTGCATCGGCATCTTGTC
-GTTGATTTCCCCAAGGTTGAATGCTGGGAGAACGTGACGAAGGCCTTCCT
-GACGAACGATACGACAGTGCTGAGCGCCTATCCACCTAATATGGGAAATG
-ACGTCTTTGTGATGCCTATTGAAGGTTGGTTTAAAATTTTTAAAAAAACG
-CGCGTCAAATATTTTAAAGTCTTTTGTTCGAAAAATAACCATTTTACAAT
-ATGTAGGATATATCTATAACAGCTACTGTAAAAACTCCAGATGTTTGAAT
-TTTTTTAAAAATGCGACGTGGTAAATATTATATTGATTACATATTATTAT
-TACAGTGTATTTTTTTCCACTTCTACGACTTTAAAGGGGGGCGCATTTAC
-GCGCGATGGTCCCAGCATTGGTCTCGCCACGCACCCCAAAAATCAATGGG
-TGGCGCGTGTCGAGACCATCGCGCGTAAATGCGCCCCCCTTTAAAGTCGT
-AGAAGTGGAAAAAAATTCACTGTATAATTATTAGTCAAATGATACTTATT
-ATGATATTAGAAATTAAAAAATTAGGTTTGAACATTTTTTTTCCTCGATT
-TTTTTACGGTATTTCACCATGTATGCGTTATAAATACAAATATGATCCCT
-ACCTTTTTATAACTTTAAAATAACTTTTAAAAAGGAATATAATACATGCA
-CAAGCACCATAAAATTTCAACGTTTGCTTTTTCTGGTCCGAAGAATTTTT
-TCAATACGTTTACTTTATATATCACATATACAAACAATATACTGAGAATG
-CGTATTGCGCATTATATTTGACGCGCAAAATATCTCGGAGCAAAAACTAC
-AGTAGTCCTATAAATTCCTACTGTACTGCTTGTGTCGATAGAATATTAAA
-ATTGCAAAAAAAATTTAAAAAAACGAAAAAAAAACAAAGTATAAGGGAAT
-ATATAGCTATTCCAAAATAAATCAATTTCAAAAATCGAGCCCGTAAAAGA
-GAAGGACTTACTGTAGTTTTCCCTACGAGATATTTTGCGCGTCAAATATG
-TTGTGAAATACGCATTCTGAAGATGTAGTGTACTCGTAATATATATTTTT
-TAACAATTCAAACATTTCCAGAATTCCTGCGCGACTACAACTCAACAATC
-TGTGTTCCATTCTCATCTGGATTCTTTGGACAAGACCCTCAGAATAGTAT
-ACTCTTTGTAATAATAACTATATCGATTGCTGTTCTCCTCTGTGTCCTCG
-TTATTCTCGCAATTTCATTTATTCGAAAATCTCACGACGCAATCAATCAA
-CGAAGATACAAAGCATCATCTCTAAATTGTTCAACATCAGCCGGCTCGTC
-GCCTCTTCCGGTTCCGCTGTTGAGTTATCACGCATTTGTGAGCTATTCGA
-AGAAGGACGAGAAAATGGTGATTGATCAATTGTGTCGACCGCTGGAAGAT
-GAAGATTATCAGTTGTGCCTGTTGCATCGGGATGGGCCGACTTATTGCTC
-GAATTTGCACGCGATATCTGATGAACTCATAGCTCAGATGGACTCGTCGC
-AATGCTTGATTCTTGTGTTGACTAAACACTTTTTGGAGAACGAGTGGAAA
-ACGCTGCAGATTAAGGTAACAAATTCAAACTTTCAGTTTAAAATTGATAT
-ATTCGTAAAAATAAGATGTTCTTAAAAATTCTGAGAATGCGTGTTGCGCA
-AAATATCTCGTAGCAAAAGCTACTGTAATTATTTTATATGACTATTGTAC
-CGTTCAAAATTACTATCCAAATATTTGATTTTTTGTTTTAAAAAATTATT
-TGGAATTTACTCAAATATTGAAAACAATATTATCGAAATTCCAGAAAATT
-TGGTGGAAATTCCGAAAATTTCAATTTTTTCGCTAATTTTCGAGAAAAAA
-AAAATTAAAATTTGGATTATATGAAATAAATTTCCAAACATTAAATTAAA
-AATTTTTTTTTTTTGGATTTTCCAATCTCGAACCTTCAAAAATTGAATTT
-TTTTGAAATTTTTTTTCGGAAAAAGTAAAAAATGCTCGAAATATCGACAA
-AAAGTTGAAGTATTTTTTTTTGTAAAATTGGAGATTTTTGAGATAAAAAA
-TCTGAATTTTCATTCAAATCTTGAACATCAAAATCAGCAAAAAAAATTGC
-TATAAATTTATTTAAATAAGATTTAAAAAGAGTAATTCGCTATGATTTCA
-AATTTTCAAAAAAAAAAATTTTTTTTTCAAGTTTTAATTTTTGAACACTA
-TCAAAAAATTTATTTTTAAACCAAAAAAATTCCGAATTTTCTGTAAAATC
-TCAAAAAAAAAACATTCCTAGAAATTTAATCGAATATGATTTAATAATAC
-TATTTTTAAATCATATTCAATTACATTTCTAGGAATTATTTTTGCTAGAT
-TTCAAAAAGTGTATGAAAAATTAAAACTTTTTGAAAAAAAAACTGTTCTA
-AATATAATTTATAACACCAGAAATTCACTAATAACACTCCACATTTTTCC
-AGACCTCCCACCAACTATTCGCCAAAAACCGTGCAAAACGAGTGATCGCC
-GTGCTCGGCGACGGTGTGGACGCGAATCTGCTGGACGATGAGCTCGGACA
-GATTCTACGGAAGCACACGAGAATCGAGATGCGGAGCCATTTATTCTGGA
-CACTTTTGCACTCATCACTTCCATCACGACTTCCATTACCATCGAATAGT
-GGCGATGATTCGTCTCAACTATATTCGGATATCTATGGAATTGTGCCTTC
-CGATGTTGTTTAGCTTACAGTTTTCCCGTTTAGGTCACAGTTTTTAGTAT
-TTTTTTTCCTCTTCCAAATGTACGAGTTTCCATTATTCACGAGGTTTCTT
-TTTCACCCCCAATTCTTCTGTGCACAATTTGCCATTTTTTGAATTTTTAC
-AACAATACCGGTACTATATTTTTCGATTTTCTTTCTTTTTCTATGAATCT
-TGCCATCATTCTCTAATAATTGACCAGCGATTATATTTTTGATTTAATAA
-TTGAATATTCTCGTTTTTCAGTTCAAATTATTGCTTTTTTCTGTCACCAC
-AAATTCAAATTCTCGTCCTACCCTGTGTGATCTTCTGTAATATATATATA
-TTAATAATCGTCGTTTCTTCTTGTTGTCATTTGCGGATGCTTATGAAGCT
-TGTATTTTAATTTTTTGTTTTGTTTTTTTTCCTGTTTCAGCTGCAAAAAA
-TTCGGTAGAAATTCTTGAAAACACGCAAAAAATGAATAAAAAAAATAGTA
-TATTAGCTTGTTCGAGAGGAGTTCACAAGCGGGTGGCCTAACATCTCCGC
-GGCCGCCCAGTGGTGTACTCCTCTCGGGTGAAAGAATTCCCATTTTATCA
-TCAGTTTTTCGGCCTATTTTTTCAGTTTTTCTCAACTAAATAGTCAATTA
-TCTCTTAAATAATGTCGAAATTAATTTAATTTACACATTTTTCCAATAAA
-ATTCCAATTTTCGGTCATTAAATTACCCCTTTCGAATTTTGCTCTCAAAA
-ATTAAATTTTCATCGATTTTTAATTCTCAAAATTCTTGAATTTTCAGCGA
-AGATGGGCAAATTCAGCAATCAGAAGAAAAATCGTGTCAAGAACAAGGTG
-GCGGTGACAGTAAAAAAAGCGCAACGCATGAAGGCAGACGCTAAAAATGC
-CAAAAAAGACGGTGAAGTGGATGTTGAGATGAAGGAGGAGGTGGTGAGAG
-TCAGAGGACTCGCCGTATCGTCGCTGGTGAGAAAAAAAAGGAAAAACTCG
-GCGAAATTCTTGATTTTGATTTTTTTTTTCAGAAAAAATTGGCCTCCGGT
-GAGCTGCAAAACGTGCCAAAAGTGAACGAGAAGAAGATTATCCGCAAGAC
-AGAGCTTCCAGTTCGAGAGAAGTAGGATTTTCTCGATCTCTCCAAACAAA
-AAAATTGTTTTTTTCAATTTCAGCAAAAAGATCCTGGACGCTCCGACTGG
-AAAACGTGGCACCACTGCTCAATACATCACAAAAAAGAAGGCAAAGAAGA
-TGTACAAGAAGATGACACACGACGCACGCGACAAATATCGAAAAATTCAG
-GCGGAACTGGCCGGAGACGGTGAAGATGACGAGGAGGGTGAAGCCGAGGT
-GATGGAGCAGTGATTTTGGATTTTTCCGCGGCATTTTTAAAATTGTTTTT
-TTTTGTTGATTTTGTTACTGTTTTTCATTTTCCACATAAAATAATCGAAA
-ATTTATTTATCACAAAAACTTTTGCACAATTTGCTCAGCTGAGTGAGCCA
-ACTGTTTGCCACGTGTCACGATTCGATGCATCCATCCATTGGGCTCCTCG
-AGCTCCGCTTTCGGAGCCTGTAGCTGCTTTAGAATTATTGTCCAGAGCTC
-AGAAATGTTCATCGAGTACTGCGCGGAAACTTCGACGAAATTGCACTTGT
-GTACTTTGGCCAGGCAGGCTCCTTCTGGAAAAATCAATTTAAAAATCGAT
-AATTTGAAGTTCCACGTGGAGCCGCGACGCGGCACGCGTTGCATCGTTTT
-TTTTGGTTGAAAAACATGGTGCATCGAAGAATTTTCCTTTGACGATTTTA
-TACGCAATGCATCACATTTGACGAACAAAAATTCAAAATACTTTACTTTG
-CAAACGCGCTCCATTGATAAACTTATGAAAAATCGATAATGCTCAAATTT
-CACAAAATTTTCCTCCATTTGAAATTATATAATTGTTAAACAAAATTAAT
-AAAACCAAACATTACGCGCAGTTTCCGATAAATTTCGATTTTTTCAAAAT
-GCAAGCGCGCTCCATTGCTAAACCTTGAAAAACCCACCCATTTTCGACAC
-CACCGTATTCCGTTTCAAATCGATTTTATTGCCAATCAGTATAATATTGG
-CTCCGCGAGCAATTTTTCGATTCAAAAGCCGACTGAGCAGGTCTGTGGCA
-CACACGAATGATTCTCGATTGTCAACGTTGTACACTATTGCGTACATTGT
-CAGTGATGACGCGAATGGAGAATTCTGGAAAAAAACAAGAGTTTAAAGGC
-GCAGGTGGGTCTCGCCACGATCCATGTTTTTTTGCGGGAATAGTGGAAAT
-TTGGAGTTAGTAAAAAAATCAAATTTGTGTAATTTTTAATAAAATCGGTT
-CGCAAATGCGCTAGTACATCAGATTTCACGAGCAAATTTCATTTTGTGAG
-ATTTGCACCAAAGATATGGGCATTTGAACTGATTTTTTAATGGTAAACAC
-GCGAAAAAAAATACATATCCAAAAATTGAAAAAATTTTAGGTTTCACAGT
-CTCCTCGGCATCGAAAGCGCAGTAGTAGGGGTGGCGATAGGGCGCCCTGC
-TAAATTTTCTATTTTTATGGTCTTTCTTTTCGTTTTGTGCTAATGAACAA
-AAGTTAAGTTCGAAATCTGCGAAAAAAATCGTTTCAACGCTAAGAAACGA
-AGAATTGTATTTCTCAACGGTAAAAAGATTCACTCCTGCGCCAAGGTGAC
-AGCAAGTGCGCCCCAGCCCAATTCGACGCTGAAGAGACTGTGGGTTTAAA
-AATTTAGAGAAGTCGCAAATTTTTTGTTCAAGATATCAGCCTAAGCTACG
-GTTTAAAGGCGCACAAGCACGTGGTGTCAAAGTGTCCCGTTTCGGTGTGA
-TCTACCAAAAATGCGGGAATTTAGACGCAGACTTCTCAGCAGATTTCGTA
-TGGTTAAGAGTGTGCTGACGTCACATTTTTTTCTGCAACAAATTCCCGCA
-TTTTTTGTAGATCACACCAAAATGGGACTGTTTGACAGCACGTGCACAAG
-CAGATCACAAGTGGGTCTTCGAGTTATCCTCCCCAAATCCTGTCCAGTAG
-AGCGCACTTACCTCCAACGTGGCTTCCAGCAACATTTCCAACTCGATTTG
-CTCGTTATTCAACAGGAAATTCATCGTTTTCGATGAAGTGTCATCTCCCT
-CATTTGACTCATTATTGTATTGGGTGACGAGCCGCGTGGCAAATTGGTTA
-ATTGCTGACAGCAATGTTTTCTTCCCGCTATTCCTTGATCCATAGACACG
-TAGAACCACATGTTGCATTGGAACATTCGACGTTTCTTGGAATAGCCAGA
-CTTCTGGACACGTGGCTCGGCGATCTTCTGAAAATTTTTAAATTTTCAAA
-AATTTGGTTAAAAATTTCAAAGGAAAATCAATAACAAAGCTACTCCAAAA
-TTTTCAGCCTGATTGGTTGGAAAATGAGCAAGTTACAGCGCTTCAAGAAT
-TCTAGGCCACGGTCACCAGGGAGTGGTGGCGGTGACCCTCTATTTCATTT
-TTAGATTTTTTAAATGGGAAACTCGAATTTAAATGTGAAACATCTGGAAC
-ATTCCAAGAAAAATTCAAAAAAACTCTCTAAGGAGTCGATAACCCTCCCC
-CAATTCCTGAGATGTGACGTCATCAGGGGGAGCCCGTGACCTCATAGCTT
-CAAATTTGAATTTTTCAACGAAAAGTGTGAAATTAGATGTAAAATTACTA
-GGAAATTAGAAGAAAGATTAGAAAAGAAATTTCGGGGGTGTCGCTCACCA
-CCCCCCCCCCCCATTTTTATAGTGTGACGTCATAGAAAGTGGGTCCCCGC
-TACCTTCCATTTTCAAAGTTTTTTTATTTTTCCGATGATTGTATTACTGT
-ACTCACTGTAATTATGTGCAACAACTGGTTGTCCAGTGGAGCACGTTTGC
-TTATACCCATTGTCCGTCACAAATCCATTCTTAATTCCAAAACTTCGAAG
-ACTTCCCTCCGGTCGTTTTTCGACGTCTTCGATGTTGTTTTGGTGCATTT
-GTAGAGAGTATTGGTATCTGGAATATTAAGGGGAAAATGGTGAAAAAATT
-CAGAAATGTACAGGTAATCGAGAAAAAAAGTTAAAACTTTTTTTGAACTA
-AATTTTTTTTTCAAAATTTCAAAAAAAAAATTTTATTTGAAGAACTTTTT
-TATAATGTTAATTTTTCTGAAATTACTTAACTTTTTCTCTCAAAACTTGC
-TCACTGAGTTTTTAAATAGATTTCTGAAATTGTCCACGTGAAGTACACTC
-CCAATATATCAAAGGAGCGCATTTGCGAACTAATTTTATTAAAAATTTCA
-CAAATTTATTTTTTTTAATAACCTAAAATTTCCGCTATTTTATCGTATTT
-TCTAAAATAAATAAAAAATTGTCCAGGAGGAGTACATGGCCAATTTATCA
-ATAGAGCTCATATGCACACTTGTTAAAAAACAAAAAAAAAACTTATTCAC
-CTTGGCGGTGGGTACCGCTTTTTCACACGACGAGGCGAGTTTTCCGAGCT
-GAAAAATGATACTTTTGGCTGGGAAGTTTTAGAATTTTGGGGAAAATAAG
-CATTTCCGGTGAAAAAAATTGTTTTTTATTGGAATAGTTTTTAATATTCT
-AGGCCATGTCGTAAAGAATTGAGTCAAAATTTAAATTTTTGAGGTACGAG
-CTTCCAGTTCCCCCCACAATTCCCCCTATGGCCTAGAATTTCAGAAAACT
-CTACCATCGATTCAAACTCTGTTACTTTTGAGGATAAGGGGTTCCGGACG
-CCCCAAACTTCCGCCCGTGGCCTAGAACTCCCAACTTCTTCCACCGACCT
-GGACGTGGTGCTCGTACTGGCAAAATGCTCATCAACATCTGGCAGTAAAT
-TGTTCAACCGTCTTGGGGACACGGTACGCGGGGTCGACGGTAGACTTCGG
-CGACTGATCGGCGATGTAGGAAGACTTCTGAAAAAAAATCAATCAATAAA
-ACAACGACACTCTGCTCGTGAGGATCCGCCCATTCCGCTTGTTGTTTACC
-AATTTCTTTTAAAAAAATTCTACAATGCGCAAAATTAATAGAACTACCTT
-CTTATAATTTTTTTTTAACTCAAAATTTTCAAAAAAACAACGACACTCCG
-CTTGTAGACTCCGCCCACTTTCCAAAAAGGACAATTCGGAGTGTCGTTTG
-AAAAATATCCTAAAATTTGAAAAATTCATTTTTAGTCTCAAATTTTAATG
-AAAATTACGTGAAAATCTATAACAACTACGACACTTTTGGCTCCGCCCAA
-AAACGTCTTTTGGCTCCGCCCGAAAACGGGGCGGAGCCTGGCACTAATAT
-TACAGTTTTTATTTCCATAAGTGATTAAAAAATCAACAAAAAAATTATTT
-AGAAAGTATCTCAATTATTGAATGAAATTTTATAAAATCTACGACACTCC
-GCTTGGAACCCCCTCCCCCTGCCAAGAATGGGGCGGAGCCTAGAACAAAC
-GGAGTTTTTGCAAGAAAAATATTGCTTGAAATTTTAAAGACATTAATAAA
-AATCCGAGTTTTTAGAAAAAATTGGGCCAAATCGAATAATAAAAAATACG
-TTACTCCGCTAATAAAACCAGCTCATTACCAAGAAAGGGGCGGAGCGTAT
-ACAAACGGAGCGTCGTTTGAAAAAATATTTTTTGGAAAACTAAAATGTTC
-CAGCGGGAGGAAGCTTCTGCAAAGGCAATCTAATTTTTTTCCGGAAATTC
-AATTTCCTCAGGGTTCTCTCTGCAAATTTGTTCACGAAAAAACTCGTGGT
-GCTGTGCAAATGCGCTCTATTGATAATTTCATCTAGAGAGCGCAATTACA
-TCAAATTAGCAATGGAGCGTTGTTGCATACCTTCTCGTTGCAGCGGGAGA
-CGCTGGTGACGGAGGTGATAGCCGTGATGAAAATTGTTGGGGTATCGCCA
-GCGCAACTGGAAGGGAAACACGACGATTCGACATTTTTCTGTAAAAAAAT
-CCATGATAAAACTAAAATTTAAAGAAAAAATAATGTAAATAAAAGTGGGG
-AAGTGGCTAAGCGGGGACACAAATACGCGGGAAATCCGCTTATTTTTGCT
-GGATTTGACGTAAAAATCCGAATCAACTGGCACTCGACGCGTTTTCCAAC
-AAGAAAAAACTAAAATTTCATATATTGGTGGCCTAGAAAATTCGAAAACT
-GTTCAAGCTTACGTAAAGTGTGTATTTTCCATATTAGAGAATAAGATTGG
-AAGAAAAATAAAATATTGTAATTTCTAGGCCACCGCAAAACTTCTAAGTC
-ACCTATGAAATTTCTAGGCTACCGTGAAAATTCTAGGCCATCATAAAAAT
-AAAATTTATATATTTTTGTCCTGAAACTAAGTCCACTTCCGCCAGAAATA
-ATAAAAGCAACAAAAAAGACAACACAAAAAATTGAGAACTCTTAAGAACA
-AAAGAAATCCGACCCGAAATCGAATACCCCACGAAAATTTTCGGAATTTA
-GAAAGAAAAACTATTTTTAGACACTTTTTTTCCTTCAAAAGGAGGAACTT
-TGTTGCGCGGCCTAAAAAATAGAAAACTCGGCCACCGATTTGTTTGCGGC
-CACGGGACACTCCGCAGTTGCAAAGGCTACAGATGCAAATACTGGAAAAC
-TAGGTCACCAAGTGGAAACCTTGGTCATCGCGTGGAAAAAAACTTTGACA
-AAAAATTTTTGAAAATTTTATAAATTTATTCTAGGCCACCACCTGTAAAC
-CTAGGTCACCATGTGGAAGGCTAGATCACCAAGTGGAGCCTAGACCAGCA
-CATAGGCCTCTAGGCCACCACGTAGGAAATTAGGTCACCAACTGGAAAGC
-TAGGCCTCCACATGATAAATAATATTTTTTGGAATTTCGTTTTGACCAAA
-GAAACTTGTTTTTACCAAAATATTTGAAAATCGTTTTCAAGGCCGTCCGG
-TGAAAACTGTGTAAACCTAGGCCACCAAATAGAAAGTCAGGCTGCGACAT
-CTAAACTTAGGCCACCAAGTAGAAAGCTAGGCCATCAAGTAAAAACCTAG
-ACCACTATGCCAAAATAGATGCCTTCTAAAAGTTTCAGGGAAAAAATGTT
-TTTCAACAAAAATTTTTAAAATCGTGGCCGAGTGGACTTTAATAAAATTT
-ACTTTTTCAGCCACGTGGCAGAGGGATATCGGAGCATCGTTTGAATTTTC
-TAATTTCTGAAAGAAAACCGGAACACATTGCAAAAATACGAAAAATATAA
-CTGAAGCTGACATATGAAATGAGTTCTATGCTCCCCGCCGCCTATTCTTC
-TCATTTTTCTGCTTATTTTTGTCGTTGGGGGGATGCTGGTATCATATTCT
-TCGTCCCCTCTTCTTTCATTGCCAGTCTATTCAGTATTATAATTAGCGTG
-TATTCCCTATTGGATTCTGCTCCCCGTCGTTTTTTTTTCTATGCGAAAAA
-AATAGAAAATACGAGGTGAACGGGAATTTTTATGAAAACGAACGAAGAAT
-TTGAGTTTTCTAGGCCACCAAATTGAAACATAGGCCAGCAAACGGATCTC
-TAGTAAAAACCTAAACCACAATACGAAAAACTAGGCCACCAACGAAAAAT
-GGGAGATTCCGCTTGTGTGTTCAAGCATTTTGTAAAATTCTAGATTGTTT
-TAAAAACTTAATTTTTCCAGTACAAAAATCGATTTAAAAACAATAAATAT
-GTCAAACTCGTGACGTTTGTCAATAGAGCGCGTTTGCATGTCAAACAAAA
-CATATTCGGTGTAGATTTACGGGGACACTTTACAAAACAAAAAACCTTCA
-CAAGGCTCCAAATAAGAGCTAGAAAATGGAACAAATTTCCGTTTTTTTTT
-TGTTGGTGAGTGTCTTGTGAGGAGGGGACCGCCCGTGTCTCTTCCAAAAA
-CATTATTAAATTAGTGTGACGTCATCACATTGAAAAACAACAAATATAGT
-TCGAGTTTTGAAGAAAAATTTCGGAATTTTTCTGGTGAAAAAATTTCAAA
-AATTTCAATTTTTTTTTAAATCTTAAAAAATTTTTTTATATATTTTTAAA
-TTCAATGTTTGATCTGAAAACCAAATTTTCACACAAAAAATCTGGTTTTT
-GACGTCTAAATTTGCTTTTTTTCACCCAATTACGAGGTTCTCCGTGGGAA
-GGTGTGTCTAGACACTTGAACTTTTGCTTTTTTATTTTTTTTCTAATTGA
-AAATGATTAAGCTAGATATATTTTCTCTCTTTTCTTAATCAGAATTGTTT
-TTGAAGATTTTAAATTTTTACACTCCCGTGCAGCAAATGCGCTCCGATGA
-GAAGTATGGAAAATTACAACTGGAGATTTTCAAAATGTTCAATTAAATTT
-TGCGTTTTTCTTTTAAAGGTTCAAGAGTCTAGAAAACTACGAAAAGGTGC
-TGTGACCTTATCGATGACGTCATCACAATTCTTGAAAAACTGGGAAAATG
-AGACGATGTGGAAAGAGGGGATTATTTATGCTTAAATAAACTTTTTGCAC
-TAATTAATTCATATAGTTGTAGTGCTTCTTTATATTTTAAGAGAAATTGC
-AAATTTTGCACCCAAAAAAGTAGACGGCCGAGTTATGGGAAAACTCTTCC
-ACGGACACAAGACGTGGAAAACTAAAAGTTTCCGTTGTTTTTTATACGCC
-CGCATGGCACATCCCCGCCCCAACAAAATTTTCAGGTTTTCAGGGTGAAA
-ACATTTTTTCAGCTGCTGGGCGGCTTCTCGTGCAGCTGGAAATGTATTTC
-CAGACGGGTTGGAACCGGGATTTGTCATTCAATTGTTGCAATTACGCTCT
-ACCGCTAAACCTCGTTTGGACTCCACGTGGACAACACGGTGCCTTATTGT
-AAATTTCTCTTCCATCTCCATAATTTCAGAACAAACCGTCGCTTTTATTC
-TCCATAATATTATAATTTTATTTAAAAAAATCTGGAAACATTTATCGATT
-TTTGTGAAAATCTATGTGAGATTATTGACAGAAATACAAGAAAATCGATG
-CAAACATGCTCTATTGCTAAATAGTTCGTGTACTCTACGTCGACGACACG
-ATTTCAAGAGTTTTTCGTTTTTTGAACAAATCATCTGTTATTATTGCAAA
-ATTCGGTACATTACTCAAAAAAAAACAATAATTGATAAACATGTAGAAAC
-ATACATGCAAACACGCTCCGATGCAAATTATTGATTCTCCAACTTTTATT
-GTTAAGTTATCTTGAAAAAAAAACTGATAAAACGAGAAGTCCTTGGTGGT
-ATCGGTCGCCTAGAAACAGATGAAAGAATGGAAAAACAAGTATTACGGGC
-GGCTCCGTTTCGTATTATGGGGGGTGGGCCGCAGATGATCCTTTAGAATA
-AGAAAAATGTCTAGTATTTTGTGATACTTGTGAAATATAACCCTAAACTT
-AAAAAATAAATTAGGGCTCAAAAATGGTATTTTTCTAATGTAAGCCTACA
-AGCACAAAGGTATTCAATTTTTTTTCAATAGCTAAAAAATTAATTTTTAA
-ATTGTGATATCATAATACTTACACAAGTACCAATTTTGTTTTAAACGATA
-GAATATTCCATAACTTTTGGGTAGGATTTTCTGCACTCGAAAAAAACGGG
-ATTTTCAACAAAAATAGTGGACTTTTTAAAAACAACGAAAAAGTTTTGCT
-TGGGACCAAGTCTAGCAGATTACAAAAACTGATTCTTCCAGTCAAAGATT
-TTATATATCACTTAACAATTGTTTTGCCTACCTAGCAAATTCCGAAGTCA
-GAAAAGTTGAATTTCCCTCCAACAATTTTTTTTCATAGTCAGCCAATTTG
-CATTTCCCGCGAAAAAATTTACGGATTCACCACAATGGGTCTCCCACCAA
-TAAAATTAATTATTCATTTATCTTCTTAAAAGGTCACACGAGATGCCAGC
-GACACAGGGCAAGTGCGACCACTATCCCGAAAAAGACACCGACAGAACCT
-AACGAAGGCTTCCAAAAATAGCATAGAAATACAAGAGACACAGAATATCC
-CATGATGTTCTGTCACTTTCAACATCATTCTGCCTTTTTTGTTCCCTTGT
-GTATGGTGACTATAATTTGATTGTTCTGAATAATCTGATGTCTACTTGTG
-TTGTGGACCACTATTGATTTTTGCTGCTTTGGTTAATTTGAGGTAATACT
-TTAACAAATTTGTTTTAAATATCATAGTCATTTTACAAATTTCAACAGTT
-TTCCTATTAATCCGCTAAACCGCAACTAAAAATGAAAAATTAAAACTTTT
-CTCAAAACTGTATGGGAAAGTTCAGTGACGGTTATGATAATTACAACATC
-GTTAATGCAAATTTAACAGGTTTCGCAAAATTATATTCAAAAAATTTTTT
-AAATCGTTTATTACGGTAACAAGAAATGTTGAGAATGCGTATTACACAAC
-ATATTTGACGGGCAAAATATCTCAGAGCGAAAACTACAGTAACTCTTTGA
-ATGAATTCTGTAGCGTTTGTATCGATTTACGGGCTCGATTTTCGAAATTA
-ATTTATATTTGTAAAGTGAAAGCTATATTCAATTTTTCTTCGATTATTTG
-TTGTTTTGTTTTATTGTGTTTTTGTTTTATTTTAATATATTTGTCACTTT
-TCAAATAGAAATTAATATCGAAAATCGAGCCCGTAAATGGACACAAACGC
-TACAGTAGTCATTCAAAGAGTTACTGTAGTTTTCGCTCTGAGATATTTTG
-CCCGTCAAATATGTTGTGCAATACGCATTCTCAACATTTCTTGTTACCGT
-GATAAACGATTTAAAATTTTTTTTAAAACTATTTTTTTAAGTAGAACAAA
-ATTCAGAAAACAACTCGATAAAAATGTCCTAGTCATCCGATTAAAATAAT
-TTTTTGAAATAAATAATATGAAAATTAAATTTTAAATATTAAAAATGTTA
-TTGTTGCTTTAAAAAACGTTATTGGACTTTTCAAGGCGGCAAAAAAATGA
-AAATAAAAATCGATTATTTTTTGAATTGTTGACTTTTCGGTTTTTAAATG
-TTGTTGAAAAGAAACGAATTGTATATACGAATTTCAATTAAAAAGTTTAA
-AATGTTTTTTAAAATGTTTTATTTTTTTCAGATAGATCAACTGAACTTCA
-TAACTTTAAAAAGCCAGTCTGGGATGTATCTATACCACTCTATCAGACTA
-CTCTTAGCACTAATCACAATGTACGACCCCGTGAGAGATTGTTGTCTGTA
-CTGGATACTACACGAGTGGTAGAATATAAAGAAGTGTGGTGACAAGTTTG
-GGATCTGAGTCCAGTAGAAAAAAATCATTCTACCGAAACTCGAAACTATG
-AGCGACTGGTCAAAACTATGCATTTGACGACGTCTACCTGTTTTAAGTTA
-TTGGTGGTGAGTGTGCCTTTGAAGAAGTCGCTCGAGCCTCGACCTTCTCC
-GACTGGCTTGAACTGAAAGATCCTCGGGAATCATTTTTAGAATTTAGAGG
-TGGAGTACCGTCTGTGGATTTTTTTTTGCTCGAAACGATAGAATACAGCC
-CCAATATTCCGAACAGGGGTGCGCGGCAATTGCCGTGTGGCAATAGAATT
-TTCGGCAATTTCGGCAATTGCGGCAACTTAGGCAATTGCCAAAATTGCCG
-AAAATTCACAAAACCGGCAATTGCCGAAATTGCCGATTGCCGGAAATCCG
-AATTGGAAATATAAATTTGATTTTTTTTTGTAGTTTTAAGAGCTTGAACA
-TGCATTTTACTAAACAATTTTCTCTTTTTAAGCTCAAAATGGTTTAATCC
-TTTGAAGATTGACCGTTTTCTTTTAGAAAATTACTGACAGAATATTAAAA
-AACAATGTGACATTTTTCAATTTTCGATATACATTTAGGTTTGAAAATTG
-CCGAAAATGCCCTGCAATCGGAATTTCGGCGATTTCGGCAATTGCCGAAA
-TTGCCGATTGCCGGAAATTTTGAAAACCGGCAATTGCCGAAATTGCCGCG
-CACCCCTGATACCGAATATAACTGTAAAAAATGTATTAATTTTTTTGTTG
-ATTTTTTGAAAATTTTCATAAAAGTAAAGAAAGGGCCAAATTATGTTTGA
-ACTACTAGTAGTCTGTGACTTCATTTTTGGCATTTTTCCGTTTTTCAGCA
-ATAATGATTGGTTTTCTTTGTTCTCTAATTTTAAACATATTTCTTCACAA
-ATGTCTCAAAAATTAACAACTTCAGTTTAAAGTAATAAAACAAAAAAAAA
-AGAAAAATAAAGAAAAACCAGTCAGTTTTTTCAAAAATAATTCAAAAATA
-ATTCGGTCCTTATTTTTTTTTTTTTGCAAAAAAAAACAAAACAAACTCCC
-CTATAAAAATTTTCCAAAAAAAAATTGGAAGGTTTTTTTTATTTCAGCCT
-ATTTTTGGAAGTTGTCGAACTCGATCAAAACATTTTTTCATTGGTTTAAG
-TTTTATTATGCTTGAAATATTCAAATTCCAACATACCAGGCATTGAAAAA
-TCAGTTTTCGTCGCTTTTTGACTCGAAATAAAAAAAACCAAAAATTTTTG
-AAAAGTTTTATTATGATAGAGTCATTCAATTATATTCCCAGTACTTTTAA
-ATAATCAAACAATTTTTTAGAATGGCTAGTTTCAAAATCGGCGGCTTTGT
-CGTTACATATGAAAACATGCACAACAATATGAAAAATAGGTATGTCTTCA
-AAAATATTAAAAACAATATTTTTTTAATTTTACAGATGTTAGCAGTTCGA
-CGAAGCAATGCAGGAACTACAGTTATACAATCAAATTCACGCTTTTTATA
-TATTAATTTTTAAAATCATAAAAATTACAATTTTCATCAACGTTGATCAG
-CTAGACGAATGCATTAAGAAAAGGGAAAACATAGGGCTTCCCAAAACGTC
-TGCCTCGCCCGCCTTGTGGCGACCTGCGCCTGCCTCGTGCAGGCCGCGTC
-TCCAGTCAGTGCAGTGCAGAAATTTTTATTTCAAAATTGTACAAAAACAT
-GGAAAAATAGAGAAGGATAATTTTTTAGGCCTCGGAAATCAATTTTAAGT
-CCTCTAGCTACAAAATGAACCATTTTAGAGGAGTTTCAAAATTGTGAATT
-TTTACAAAAATTACCCAATTTTGCCACTTTTTAATGGTTTTTGATGGGTT
-AAACCTAGATCTTCTGGATAATTCCGCATATATGAATTACCGTATTTCCT
-ATATTAGTTTTGCATGCAAGACTAATTTTCAATTGGTCTGTAGGGGTGCA
-AGACTAATAGAGACTGCAAGACTATTAGAGGCTGCAAGACTAATTTTCGA
-ATGCTATAAAACTCCGAAACGTGACCAATTTTTGATTGTAAACTCAACTT
-GATATCGTTTAAACAACAAAAAATACATCCTTTTCCAATATTTAATCAAT
-TATTTGAACGCTTTTAATCAAAAACTCGAGTTCAATTTGCCCAGAAATGG
-GCCAATTTATTAACGTTGCAGCATCTATGCAAGATATTGCTGGACTGGAA
-AAAAGTCGGGTGCAAGACTTTTAGAGACTGCAATACTAATAGAGGCTGCA
-AGACTAATTTTCGATTTGCCCGTAGGGGTGCAAGGCTAATAGGGATGCAA
-GACTATTAGAGGAAATACGGTACCTGTTTTTGACAAAATTAGACAACTTT
-TTATTTTTGCTCAATTTTTTTTCAGCCATCTAATTACTGTCCTTTTTTTT
-TGGACAATAAAAATAAATTTTCTAAAAGCGTTTGAAACCACTATATTTTG
-CAAAAGGACAATTTTTTAGGGATTGGAGATCAATTTTATGTCCTCTAGCT
-ACAAAATAAACAATTTTAGAGGAGTGTCAAAATTGTGAATTTTTACAAAA
-ATTGCCCAATTTCGCCACTTTTTATTTTGGTGGGTTATACCTAGATTTTT
-TAAATTCAGCATATATGAATTACCCGTTTTCAACAAAATTAGACAACTTT
-TGATTTTTGCCCAATTTTTTTTTCAGCCATCTAATGACTGTTCTTTTTTT
-GGGCAAAAAAAATAAATTTTTCTGCAAACGTACAAAACCATTAGAAATTG
-AAAAAAGGCAATTTTTTAGGGTTCCGATATCAATTTTGAGTCCTCTAACT
-TCAAAAATGACTATTTTAGAAGAGTTTCAAAATTGTGATTTTTCTGCCAT
-AAATTGCCCATTTTTGCCACTTTTAATGGTTTTTGGTGGGGTATACCTAG
-ATTTTCTGAATTCTGCATATATGAATTACCGTTTTCGACAAATTTAGACA
-ACTTTTTATTTAAAAAATTAAAAAGGATTAAAGGACGATCCGTTCTTCAA
-GTGCTATGCACTGCGGATCTGGGATTCAGGTACACTGCCTGGTGGTGATC
-CCTCTGGGCTGTAATTTAAGCCACGTCCTAGCCGAGGACTGTGGCCGATA
-ATCCAGTCGTGGATTGCTCCACTTCCCAATAGAGGCAGGGTGAACCTAGG
-GGGTGAGGCCGGACTTTTATCTCGTGACCTCCAGACTGCTAGCGGCCACC
-ACTACCGACTGAGCTATCTGCCCCCCTTGGGGAAAAAAATAATTTTTTTT
-TTTTTTGGGCAAAAAAATAATTTTTTGGAAATTGTACAAACCAAATATTA
-TATATTAAAAAATATTATCCAAATATTCCAAATATTCCAAATATTCCAAA
-TATTCCAAATTCCAAATATTCCAAATATTCCAAATTTATTCCAAATATTA
-TGAAAAAGGCCATTTTGTTAGGGCTGGGAAGTTTGAATTTTTACAAATAT
-TGCCCAATTTTGCCGCTTTTTAATGGTTTTTGATGGGTTAAACCTAGATT
-TTCTGAATTCTGCATGTATAACTTACTTGTTTTCAACTAATTCAGACAAC
-TTTTTATTGTTTTTTTTTCAAATTTTTTCAGCCAATTAATGACTGTCCTT
-TTTTGGGCAATTTTTTTTTTGAAACAAAAAAAAATTAAATTAAATTGCCC
-AATTTTGCCACTTTTTAATAGTTTTTGATGGGTCCCGGAAACCTAGGAAA
-CCTAGTCCCGGAAAATCGAAAAATCGAAAAAAAATTTTTTGAAAATTTAC
-CAATGAAAAAAAAAAGACTCAATTTTCTTCCAAAATAAAAAAGTGGGCAA
-AATTTTAAATATTTTTCGAAAAAAAAACATAACTTTTCAAAAAATTTTTC
-GATTTTCCAACAAAAAAGTGAAATAAGAAGACATGCAGGTTACTGTAGCT
-GATAAAGCTTCAAGCGTACCAGGACCCGAAAACCGCCGCCCGCGTAAATC
-GACATATTTAATGTACCATCAATTTGATCCTCCTCTTCCTCCTTCTTTCA
-ATGACACCACACAACTTCCTGTTATGAAGGTCTCAATTCCCCTTCATAAC
-ATTCTTTGTAATTAATGCACCCTAAACAAACTGTGCAAACACACTTAGAC
-ACCCCCCTCCTACACGGTCTTTGGAGTTCCCCCGCTCAACTCTAATGGAC
-CTGGTAATCCCTTGCGCGGTGGGATTTTTCGGGTCTCGCCGCGATTTTTA
-TCCGAATTCCGGAATACCGGAAATGGCGTGGAAATCGATATTGCAACAAA
-GAAAACTGTTTTATTTTCAAAAATCCGCTCACTTTTTTTAAAAGTGATCT
-TTCAATCATTTTTAAAGTTTTTTTTTTTGAAAGCACGCGTTTCTGGCTTC
-CCACATATTTTGGAATGTAAGAGATTGCCGAGTTAGGCCATTTGGACTCG
-GCCACGGCCGGGGTCGATTCACGTAGCGGCTCGGTTTCTGTAGAAAACTA
-AATGTATTTGTCCGTATGGAGTACACAAGCTTTTCCAGGCGTTATCCGGC
-AGGCGATAGAAGCCGCGACGCAACACGCAACGCGCCGTAAGTCTACCCCG
-GCCGTGGCTGAGTTATGATGGCCTAACTCGGCAAACTCTTGCATTTGAAA
-ATATGAGCGAAGCCAGAAGCAGGTGAACATGGATTTCTGGCTTCCCTCAT
-AAATTGAAAAGGGAGAGTTTACCGAACTAGGCCATTTTGGCTCGGCCATA
-TCTGGGGCAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTCGTTTTTA
-GTTGTAAAACTGAATGTATTTGTCCGTGTGGAGCACACGACTTCCCCACG
-CGTTGTCCGCTAGGCAATTGTTAATGGAGCGCGAAAAATTCAATGAGGAA
-GGCCAGAACCCCGTGTGTGATTTTTGCAACTACAGCCCAAAATTTGAACG
-GGATTAATACAAATTTAATTTGAAATTTGGATTTCGCAATTCAAAATTTG
-CGAAATTAAAATTTCGAAAACCCGAATCTCATCGAAATTAAATTCCAAAG
-TTTTCATTCAAATTTCAATGAGGTCTCTATTGAGCCGAATTCCCGCGCAC
-GGGAGGTAGTGGACCCCTTTTGTATGTTTAGGGGTACAAAGACCCCCTAC
-CACCCCTTGTATATGCACAATAGAGAACACTCAAGACCCGCCCACCCTAG
-GCCCCTCATCCAAAACATATCCGAATATACCCTCTACTGTACTTTATTTA
-CTTGCTCCGTTTACCCGGGTACCAGGGTACTCCCTAAACTAACTGAATTT
-CCAAGGTGGTGGCCTAGAAAAAGCTCTTCCACTGGTTTTTTTGTGGAAAG
-AAATGATGAAGGTTCTTGTTGTTTTATTGCTTATGGTAGGTTTTTTTTGC
-CACGTGTCCGGAATTTTTAAAACTATTTTTCTATTTTTTAAAGGCCCAAA
-ACTTTGTTTTTTTTAATGTTATCGTTTTTTCGTGAAAAAAATTATTTCAG
-AAAACGGGGGTTTTAGGTTTAGGCTAAAGCGTAGGCTTAGGTTTAGGCCT
-AGGCTTAGGCTTAGGCTAAGGCTTAGGCTTAGGCGTAGGCTTAGGCATAG
-GCGTAGGCTTTAGGTTTAGGCTAAAGCGTAGGCTTAGGTTTAGGCCTAGG
-CTTAGGCTTAGGCTAAGGCTTAGGCTTAGGCGTAGGCTTAGGCGTAGGCG
-TAGGCTTAGGCCTAGGTGTAGACTTCGGCTCAAACATAAGCTCAGGGGCA
-AAAAAAGGAGAAACTCCCACAAATTCCTAAAAATCCTGAAAATTTTTTTA
-AATCTTAAAATAGTCAATTTTCAGTGGAAATCACAGTGAGCATTTTGAAA
-ATCCAATAATTTTCAGGTAAATTCGACATTTTCGTTCGGATTGGACAATG
-AAATAATCGGTGAACCAAAGTTACAATGCAATCCGGAAAGTATTACATTC
-TCCTTCAACACACGGAATCCGTTTATGTTAGTCTTGGGGTCTCGACACGA
-ATTTTTCCCGCAAAATTAGTTTTCCACGCGTGAGTACACCGCAAGTAGAG
-CGCTTATCAATAAATTATAAATTATCAATAGAGCGCACTTGCCCCCGGTG
-AATTTCAAAATTTTCAGAGGAAACGTATATATTCGTGGCTTCTACCGAAC
-ACCCGGCTGTCGTCGGCAATTCCTCGCACCGAATCAGGCTGGCGGCTCAT
-TTACGGTACGGCTCGGCGATTGCGGGATGCGGCGGTCCCGACAAATCAGT
-GGACATTCGCCACGTGGCGTCAATCAGCACATCACTTTTGTTGCGAACTT
-TCATCCGAATCTCGCGACGAAAGAGGAACGATCATTCAATATTCGATGCT
-TTTATGCGCACAGTGAATCTGTTGTCAAAGCTGATCTGGATGTCAGGTAG
-GGATGCAAATCGATAAATTCCCCGAAAATCGATACATTTTCCAAAAATCA
-ATAAATACCCAAAAAATCAAACAATTCCCAGGAAACTGGAAGAAAATTCT
-CAGAAAATCAATAAATGTATTTGTTTTGCAGCTCAATGCCGGAGGAATCG
-TTCGAACAGGGTGTGACAATCGTGCCCCAATGCACATATTCCCTTCGTGA
-AGGGACATTTGAGGGCCCAAAAGTGTCGAATACACGTGTCGGAATGACAA
-TTGTTCATCGATGGGACTGTGATACATCGGGGAACTATGGAATACTGCTA
-CGTGGATGCACCATACTCGATTCACGTGGTGTTGAATCTTTTCCATTGCT
-TGATGAGAATGGGTAAGAGTAGGGAAGTGTCGGCCGCTAGAAAAGAAAAA
-TATATCACTAGAGCACGTTTTCTAAGCATTTTTCTCAATAGAGCGCGCTT
-GCTCAATTCCCTAAAATAAATTATGGTGCATCGAAACGTGTTTACGTACT
-GATAGAGCTGTAGTACTCGAGGAAGCTGAAAAAAATAATGAAGAAAGTGA
-AAAAAATCAAAAGTGTGAACACAGCAGCCTTGTCAGATAAATTTCAAAAA
-TCTGTGCATTTGGTCGTAAGTTATGGCGCATCAAAAGTTTTTTGAAATTC
-TCAATAGAGCACATTTCAAAAAAGAGCGATTTTCGCAAAGCCCCTTTCTT
-CGTTGTTTGATTTAAAAACAATGCAATTTCGTTTATTTCGCAAATTTTTG
-AAAAATGAGTTAAATTTGCAACAGAGCGCGATTGCACACACACACACACA
-CACATCAAACGTCAGAGACCCCACTGATTTTGGAGATTAAATTACGGTAG
-ATAGAGAATCACAAGGAAAACATCACGAACTTTGTTCCGTCAATTCCCGT
-GGTGCTTGTTATCATCAGAATGCAAAATTTGAAAGTCTGAAATTAAGCCG
-TTTCCGCTAAAACGTAGCGAATCTCATTCCACCGAGTCTATTTTCGTGAG
-GTCTCCAATTTTTCAAGTCTCTGCTCGTTATGGTGCATCGAAGGGTAATT
-CAAAATTTCAAATAATTTTTAGACACTTTTCGACCAGTTTCAAATTTTTT
-TTATGGTGCATCGAAAGAATTTTGCGTAATTTTCAATAGAGCGCGATTAC
-TACTCACCTCTAAATTTCTGCAAATTCTTTTTCCAGATGCTCAGTGTCCC
-GTGACTTCCCACAAGTGGTATATCTCCCATCACTGACGTCAGCCTACATG
-GCAATCGAAGCCATCTCATTTCCTGACCAACCATCGATTTCTTTCTCGTG
-TCAAATTAAGTTGTGTGATAAGGGAAGTGATGAGTGTCGGGGTATGAGTC
-CCCCCGCGTGTACCCCATTGACACAGGTCCCCATCACGGGACAAGTACCA
-ATGCCATTTGATAATACAATTGGAAATACGTTTGGTGAGTTATTTACGGC
-CGAGAAAACCTGCAAAAATAAAAGTTCAGCCACCGAACTTTTTGACATTT
-TTGCGCAACTGTATGCCGCACAAAACTTTACGTCAGAAGTGGGCGTGTCC
-GCCTGCAGGCCCCGATGTTTTAGATGTAAAAAATTAGATGTTTTAGATGT
-AAAAAATTGAAATTTGAATACAAAAAAAAATTCGGCCACCGATTTTTTTT
-GCTTTCACGTTTTGTCAATGCATTTCCAATTTTTTTCGTGAAACGTTTTT
-GTCAGAATTGGGCGTGTCTTGTAAAGTCCCGCCCAATTTATGGGCGTGGC
-TTGTTTCGACCAAAAATACTGTTTTTTTAACTCACAAAAACAGAGCTATA
-AACTTTTTGAAAAAAACATCCCTGTCCTCTCCTTTCTCCATTCTAAAATT
-TGAATTAGATGGCCGTGAAAAACCCCGGCCGCGGTCTTCAATTACAGTGA
-AGAATTTGGCGGCAGAGCGCGTTTTCACAGTCTTTTTTTGTCGTCACTGA
-GCAAACTTCAACTGCTTCCAGCCAGAAATTTACAAGCAAATTCAAATTTT
-CAGACGGAATCCCACTGGAGCCGTGGATGAAAGAGCCCTCTCCTCCCACT
-GATGACGTGGCAAACATCACCTCAGAAGGCGAGCCAATGCCTCGGCTCAT
-CACCGAAGAGGAACAATATCAAATCGAGTCGAACCATGTTGAGGCGCGAG
-AAAAACGATTTGCTCATCGATTATTCAATATCACATCGGAAGATCTCTAT
-GTTGAGCCAACCGTCGAGCCAATGGAAGTAGAGATGCCTGGAGCACCGAG
-AGAAACTGCTCGGAGGGTGTCTGAGCCATGTGTCTCGGTTGAAACTTTCT
-ATATTTCGGCGCTTGCTGTACTTTTCGTTTTTGTCGTTTCGATTGGGATG
-GTCTGTTTCTTCGGAAGTCATATGCTTAAAAAGTTGGTTTTTTATTGATT
-TTCCTCCCACAGGGTTCTGACCTTCCTCATTGATTTTTTTGCGCTCCATT
-GACAATCGCTTGTCGGAAAACGCATGGGAAAGTCGTGTACACGGACAAAT
-ACATTTGGTTTTACAACTAAAATCGAGCCGCGCCGCAACACGCAACGCGC
-CGTAAACCTACCCCAGCTATGGCCGAGTCAAAATGGCCTAGTTCGGCAAG
-CTCTTTCATTTCAAAATATGAGGGAAGCCAGAAATCCATTTCCCCAAATT
-GCAAGATATTTGTGGCGTGGCCGAAGTTTTCTAGTTTCTCGGCCACGTTG
-TCAAAATTATTTTAAAAAATCGCTGGAAACACTAAATTTAGATATCTCCT
-GTAGATTGTGATTCGCGGAAAAATTCCATGAATCTCGTTCTCCCAGTTTT
-TTTTTTGTAAATTCAACAAATCAAATGAGCGCCAAAACCTCACAAATCTC
-ATACTCCCAAAATTTGCGTTCCTCTTTTTCTTGAGGCCTCCTCTTTTCAC
-TGTAAAATTTAAAAAACTCGTAACTTTTTCTTCAGAGCGCGATTGTACGC
-ACAGAAAGTCTTTAAAGTCTGAAAATATTTTAAAGTTCCCCAAAATCCCA
-CAAGTCTCATTCCACCGAGAGGTCATTTTCCGTGAGGTCTCTTTCTTGGG
-TCTCGACGCGAAAATACTGTAATTTTATTAATTTTTTCAGAACTCAAGAC
-TGTGAAATGCCGATTCCAGTCCCAGAAGGATATTATCTAAGCAAACACTG
-AAACTCTTGTTTAAAAGTATTCGTTTCCCATCCACGTGCCATAATTCTTG
-CATTTTCTTTTTTTTTCCCTATTTTTATTCAATTTATTTACAATTTGTTC
-AATAAATAATCAATAAATAATAATTAAAAATAACATTAAAAGTCACATTT
-TCCGAAGGAACCACGCGTGGAATGTAACGGTGCCGTTGTCGAATGGTTCC
-GGCTGAAAATTGATTAGTTATCATTGGAGCGCAATTGCATTTTTCTCGAA
-AAATCGATGTTTTCGTGTGATGCAGAATTATCGATTTTTTTTAACTTGGT
-GGCCGAGAAAATGGAAAACTCAGTCATCGACTTTTATTTACCTGGAACGA
-AAAAATTTAAAGTATGATCACGCGCTAAAGCCTCAATTATGCAAAATGCT
-TTAAAAACGGGTTTTGGAATTTTCTAGACCACTGGTGACGTCACTCCTTT
-TCCATTTATTATTCTAACTGTTTTCTAGGCCACTGATGTCGATATTTTTC
-CACTGCTGGGTTTCTAGATCGCCTGCGACGTCATTTCTCTTCCATACCCT
-GCTCTAGCGGGTTTCTAGGCCACTGGAGAAATTATTTTTCTTCCAAAAAA
-AAATCTAGGCCATTAATGACGTCATCATTTTTTCTTTTCTTTAGGATTAC
-CTCAGGTTCCTCATATTTCAGATCCATCCTCGCCAATCGTTCATTCTCAT
-GAACTTTTTCCACTTTTTCACTGCTCGTACTCTTCTCATCTACTGTATCC
-GCCACCACAACGTCCGGAGCAACAACTTGCTCATCAATATGCTGATATTC
-GGGCTCCTGGCGGTCCCAACGTGGTGTCTCTGGTGCAGTTTCATATTGAT
-TTTGCTGCTTCTCCAGGAGGTTCTGTATTGAACTGATCGCTGAGGAGGAT
-CCAACGATCGGAGGCATCGGAGGCGGCAGAGGAGCCATAGATGGAGTCTG
-AGAAGCCATCATTTGGAGTTGGGGGTAATTCCTTTGTTGGGACATCTGTG
-GGGACATTTGTGGGGACATTTGAGGGGACGGGGACATTTGGAATACCATC
-GGAGGCATTGGAGGTGGTGGGGGTGCCGGAGCCATTCGTATCATTGGAGC
-CATCACGTAAGATGGTGGAGATGGTGGGAGACTGGAATTTTTTTTTTGAA
-TTTTTTTTCATAACACGGGCTTCTGGCCTTCCTCATTGCACTTTTCGCGC
-TCCGATGATAATCGCCTGCCGGACGACGCGTGGAAAAGTGGTGTACTCCC
-CACGGACAAATACATTTAGTTTTCAACTGAAAACCGAGCCGCGACGCGAC
-ACGCTACGCTCCGTAAATGGCCTAATTTCTTTTTTTTAATCTTGAGTTAA
-AGTTTAATTTTAATTATTTCTACAGAATTGAATGGCTGGGAATGTGCCAC
-GTGGCCGAGAATTCTCCTGCGTGGCCTAGAAAATTCAAAAAAATATTTTT
-TGGTGGTTTTGATTACAAAATAAAGGATTTATACGGATAAAAACCTATTT
-TAAAAGCCGTGAAAAAAATCATATCAACCACTGCCTAAAAGATTGAAATT
-TTTATGATGGCCGAGAATTCTCAAGTGTGGCCTAGGAAAAATCAAGGCTT
-TTGAAAATTTGCTCATTTCGAAAATTAAAAAAAACAACTCAATTGATAGT
-AAATTTTAAAATTAAAAATTATTTTTCTGGTTTTTTTTTCTCAATTTTTG
-CAAAATCAAAATTATAATCAATTTTTAATCCAGAATTCGTCAAGTGGCCT
-AGAATTCTACTGCGTGGCCTAGAAAATTCCACCAAAATTTAAATTTTCCA
-AATTGTAAAAATGCTCCAAAAAGTTGAATGGTGGCCGAGGTTTTTCGTTT
-TTCACTTTTCACAGCTACGGAAAAAAACTCGGCCACCAATAGTTTTTCCT
-AGGCCATGTTTCAAATGCCCTATTTCTATGTTAATTACAGTATTTTCTAG
-ACAAGATTTTAAAAAAACTCACGAATAGCACATGGAGCTCTGACACTTGC
-TCCCACCAATACAAAATTCCGAATTTTTTACAAAAAACTGCAAAACTATA
-AGAATTTGTGGTAGAAATTGGGGCATTTACGTAATAATAATAATAGAAAA
-ATGTCCGCAAATTTTTTTTCATAAATTTCATAGGGAGGAGGTAAGCTTCA
-GCTAGAAGCCATTCAATTTTATTGGGGCGCCGAAAATCTTCGGAACACTT
-TTACAATTTATACAGTAGTGTACAACTTTTACAACTTAATAATATCTTCA
-ATACTTCCAGAATATTCTTCTTTTTCCTCCTCAATTGCCACGTCATCATC
-TTGTAATCTGGTCCATTTTGCTGGCGAGGCGTCGGCAAACAGGCAGAATA
-TAGTATTTACGAAGAGAAGTAAGCCCGCATGCGCCAGGAAACAATTACGC
-CAGTCTGTGAATCTGAAAAAAATAATCTTGTCTTTTAGGGGACCTACGCC
-TGCCTGCCTACGTCTGCCTTGCAGGGGACCTTTGCCTACCTACTTGACTA
-CCTTCAAGTGAGACCTATGCTGGTTTGCCTGCATTTTTGTCAGTGCCTTC
-TAGGCCTATGCCTACCTTACAAACTATGTAGGTCAACTGCCTGCTTTCAA
-GGTGGCCTAGGTCAGCCTACATGCTATCTACGTCTACCCCAATGTACCCT
-GTGCCTATCTACCTGCTTTTAATGCTATCTGCCTTTTCGATAGTCTTTTA
-GGGAATCTACGCCGGTCCAGCTCACATAGGTTATCTATGCCTATGCCTTC
-CTGCCTGCCTCCAAAGTGACCTACGCTTACCGTGTTTTTTTTTCTAGACC
-GTATATACCTACATGCCTGCCTTTAAGTTTACCTATGCCTGCCTGCATTC
-CTCATGCCTGCGTGCCTACATGAATACCCTAAAAACTCACGTATCATCAG
-TAACAATCATATTGACGAAAAACGGTTCGATGAATATCGTGCAAGCCCAG
-ATGTTCATGATCTGGAAGAGAAATCGTTGGCCTAAAAATTTTCTCGGCCA
-CCCCCTTACCTGCTGCATTGCGAAATAGGCGTACTGCTGGGAGTGCAACG
-TGGCACACTTGTTGAATCCCGCCGTATTGCACCCCATCACACTTTCGGCG
-CAAATCTGGAATGATGGAAGAGAATAGGAAAACTAGGCCATGGATGTATG
-TGCGCTATGTTGATAATCGGTTATTTTCAACGTGGATTATCAATTGAGCG
-CACTTGTCCCACTGGAAGAGTTTTCCTATCTAGGCCACCACCACCACCCA
-CTCACCATTATAATAATAGCCAGCAAGTGTTTTTCCTGTGGAATAAATGC
-TAGAACGATGAAAAAAACGGCGGCCACGGCCAGAGCGATTGTGTTGAAAA
-TTTTAGTTTTCAGAGTTTCTGAGATGAATCTGGAATATTGATTTTTGGTG
-GCCGTAGAGAGGAAAAACTCGGCCACTGATTTTTTTCACAATTATAAAAT
-TATTTTTCCAGGAAAAACCCCCGAAAAACTCACTTAATATAATCACTAAT
-AATTCCCGACGATAATTTCGTAAAAAATTGAAAAATAATGGGTAAGGCGG
-CCAAAAAACCGGACGAAAGTACGTCATAGTTCAAATAATTTTTCATATAT
-TGCGGATTGAATTGGGATACCAATTGAACTGTTATCAAATCTCCAAACGA
-TGCGATCCAACAAGCCCACAGGCTTAAACTTGTCAGAATATGACGGAATG
-GAAGATTTTTTGGCCGGGATACCTGCAAAACGAAAAAGTAACGGGCTTCG
-AATTTCCCCCCCCATGTTTTCAAATGGAAGAGGTGGCCGTGAATAAAGCT
-AACCTCGACCGGGGGTCGCGACTCGCGACAAACGGGAAAACTCAAAGAAA
-TTTCGTACTGTCGCTACTTTTTTTGAGTTTTCCTGTTTGTCGCAGGTCGC
-GACCCCCGGTCGAGGTTCGCTTTTTTCACGGCCACCTCTTCCATTTGAAA
-ACATGGGGGAAATTCGAAGCCCGTGAAAAGTTAGGCCATGCAATGCGATG
-TGGTGGCCGAGGTTTTGAAAACTCGGTTACTCTCATGTAAAAAATCTTGA
-AGTTGAAGCAAATTTGCGTACATGAAACCCATTTACCTTGCTAGCAGTTT
-TAGAAAAATTTGGGATTTTCTCATACTAATGAGGGAACGTCTTAATTGTC
-GACAAATTGCGTACCCCGAGGAACCCACTAATTCAGTCCTAGGTTTAGGC
-ATAGGCTAAGGCATAGGCTTAGGCGTAGGCCTAGGCTTAGGCTTAGGCTT
-ACACGTGGTGTCAGAGTGCCTCATTTCGGCTTGATCTACGTAGATCTACA
-AAAAATGCGGGGGAAGAGCCGCAGAGTTTTCTACTGATTTCGCATGGTTA
-AGAGTGTGCTGACGTCACATTTTTTGGGGCAAAAATTCCCGCATTTTTGG
-TAGATCAAACCGTAATAGCACAGCCAGGCACCACGTGCGCTTAGGCTTGG
-GCTTTCCGTAGTCCTTCGGGCGCGTTTTTCTCAAAAATGATACGTGGTAC
-AATTTCAGGTTTTTTTCCGCTCCAAAATCTAGTTATAATTTGTGTCCGGT
-AGAGCGCGTTTGCACTCACTTTCTTTCCCGATTTCCCTTCTCGAATCCTC
-TCCAATTCCTTCTCGCCAACCCAACTGTGCTCACTCGGCGAGCACTTGAA
-AAATAGGAAAAACAGCGAAAAAGTGACCAACGATACACCGGCGTGCACAT
-AGTAAACCGACGTCCATCCACCAGACGAAGAGCATAACCATCCCGAAACT
-GGCATTGTAAATATATTTGAAAGTTGTGTATTTCCGGTTAATAGGCCAAT
-GAATACTCCGTGCTCGTATGGGGTCGCCCAATTTGCTGTAATTGAGCCAG
-CGAGGGGAAATGTGGCTGAAAATGCCATTCCTTGACAAATACGGGCGGCC
-ACAAACCATCCGTAGCCAATGGTACTTGCCAACGGGATAAGGGCTGTTGA
-AACTGGAAAAATTGAGTGCAATACATCATATTTGACGCGCAATTTTAAAA
-TTTAAAAAATGGAAACGCGCTCTAATGATGCTTGGTGTACTCCTCTCGGA
-CAATAAATGTCAATAATTTTTGAAAAATCGATAATTTTTTTTTAATTTCA
-GAAAAATTCGTGAAATCTGTTTTATTTTGCGCGTAAAATATGATTCTTAA
-ATACTTAATTCAGTATTTTACGCACGTGGTATCAGAGTGTCTCATTTAGG
-CTTGATCTACGTAGATCTACAAAAAATGCGGGAGAAGAGACGCAGAGTTC
-TCAACTGATTTCGTATGGTTAAGAACGTGCTGACGTCACATATTTTCGGG
-CAAATAATTCCCGCATTTTTTGTAGATCAAACCGTGATGGGACAGCCTGA
-CACCACGTGCTTACGCGGAATTTTTCACAATTTTTTGTGCTTCATGCACC
-ATGTTTTTGTTTCGAAAAATCAGATTATTGTTTTGCGCGTCAAATTCAAC
-GCCCACTGTGCAATACACCATATTTGACGATCAATTTCAAAAATTTTGTA
-TGCTTTCGATGCATGCTTTTTGGGGTACTGTAGCTTTGAAAATACGCATG
-CACTGGATCTGACGACAAAATGCACAGTTTTTATAAAATTAGTCTATAGA
-AATTAGTCAGTTTTCTCGAAACAAATAAAAACTACAGAAAACTCGGCCAC
-CGATATTTTTTTTTTTCGCGGCCACGATTGACGTCATACCTCCCGAAATA
-ATTCCGGCGACAATGAAGACAGGTTTATGCGGCAAATGTTGAAAAGAAAT
-GGAAAATGGAATCGAGGCGGCAAGACTTCCAATAGCCACACACGATTGAA
-GAAAATTCGACTCTGATTTGGTATAGTTCACTGAAAAAATCAACTATTTT
-GGCGGCCGCCAATGGAAAAACTCGGCCACCGAATTAAAAAAAAAACCTTT
-TGAAGTTGAAGTACTATTATCATCTTGCATACAAATTTTTGTAAAATTAT
-AAGTATTCATATTTGAAAGAATCGAGGTCAAACACAGTGTGGCACATATT
-AAAATCTGCAAAAAAATCGTGAAAATTCAATTTTCCGGGGGTTTTGAGTT
-CAAAAAGTACCAGAAATCGGACAGGAACCGGCGAGTTGACCATGGTGCAT
-CAGAAACCGGAATTTTAAATAAGTAAAAAAATTTATGATGCTCGTGGTGA
-TAACGAAAAGTGCAGTGATCAATTTAAGGGAAATACTGCTGGGGGATTAA
-ACGTTGACACTGTCAACTTGATAGTGTTAATTTGATCAATGCTTTGTACT
-TGTTTTTTGCAGGAAAAATTCTTTGAAAATTGCAAGACTATAGTATAGTC
-TGAAAATTTGATGAAATCTAAAACTTTAATAAATACCGTTAATTATCATT
-ATTTTTATGAAATTTTAATATAATCTACTTAAAATTTAATTTTCTAGGCA
-TCTGTGAGCTTAAATTTTCGATTATCCCTCGCCAAATTAAAGATTTGCAG
-ACTTTTAAGCTTATAAGCTTATTTCAGTGAGAGAGAGCATTGTGAGAAGA
-GAAACGCAGACGAGGCTGGCGCGTTTCTCGTGCTCTGACGCGAGTCTCGA
-TTTGCTTGCGCATTTCTCGTGCGCGCGACGTTCATTTTATTTTTCCGATT
-TTTTTTCAGTTTTTCTGAACTTTTCTTCTTGAATTTGTGATTTTTTATTT
-ATTTTTCACGTCTTGTTGCAAAATAACTGATTTTTCACACAAAATATTCG
-AATTTTCAGGTCGGCAACATGGGATTCTTGTGGAAAACTGCAAAACTCGG
-AATTAAAGTTGGACTCGTCGCCGGCGCCGTCAAACTGTCAATCGATAACG
-ATATTTGGTCGACTAACAATGTTAAAGTATTAGTTTTCCCCCGTTTTTCC
-ACGAAAATTTTCATTTTCAGGGCAGCGAACTGTATCAAAAGCTTAAAAAG
-TACATTCTTCCCGGCACCGTCGTCTTTCCAGAGCAGGTTTTATCGATTTT
-TTCTCTGAAAATGCAATTTTTTTCTTATTTTCAGCTCCCAACAGTCGAAG
-ATGTGCAGCTGAAGGCCGGTGGAAAGTGGAACAGTGCTGTTGACTCGGTA
-GGCTGCATTTTTGAGAGGAAACACGGAAAAATTGCTGCGAAAGTTGGAAA
-AAAGTCCTGGAAAATGGAGATTTGGCGCCGAACGTTCAAGAAATTCCATA
-ATTTCAAAAATCTATCTGAAAAATTGAAAAATATAAATTTTCAGTCATTT
-TTAGTCAAATTTCAGAGCTAAACGTCGAAAAAAGTGCCTAAAACTAGGAA
-AAATATGACAAAAAGACACAAATTTTGGAGAAAATTGCTGAAAATAATGC
-AAAACACTTTTTTTCACAAAAAGCGAAATTCAAAAAAAATTCCACGTCAA
-AAATTAACCAAATGCAAGTACGCTCCATCGCACTTTTTTCCAATTTCTGA
-CTCGAAAAGTCTTAAACTTCTGGTTTTGTAGGAAAGATAATGCAAAACGC
-AATTTTTAGTCCAAAATTCAGAGAAAATTCTGAAATTGTTTTTAAAAAAA
-ATGCAAGCACACTCCATGGCACTTTTTTTTCAAAATTTCGCGTAGAAAAT
-TACAGACATTAGCAAAATTCCGACGATTTCGCTGCGAGACCAGAAATATT
-GTAGGAAATTCAAACATTATCCGAAAATAATGCAAACGCGCTCTATCGCA
-CTTTTCTCCAAGTTCCCACTCAAAAAGCATAGAAAATACCTGAAATTGCC
-GTTTTTTTTCACCGGAATTTCAAATTTACGCGATTTCGCTGCGAGACCCA
-AGCTAGTGCAGTGGAGCGCATTTCCAACAATTTCAAACTCAATTTTTTTC
-AGGTATTCACCACAATCGAGAACGTCCCATCAAGCGTGAACACAGTGGCC
-AATCGACTCATCAATAATAAATAAATTCCCCATAAAAATTATCGATTTAT
-CGATTTTCCCCCCGAATCCTCGTGTATTCCTTCGTTAGAATGTACTTTTT
-CCCTCCTCATTTTCTAGAAGTATTTGTGTGTGTGCTCTATGAAAAAATTT
-GCAATTTTTGACTTTAAACGGACGGTGCATTATATTATTTTATCAGTTCC
-CATCGTTGATCAATTTTCTCCACTGATTATCAATTCACTGATAAGCTCAC
-ACTGCCTGCCCAACTCAATTCATCGCAACTTCTTCTCCCTGCTTTTTTTT
-GCCATGAATTCGACGGTGGCTTCCCGTTTCTCATGGGGACTCATTCTGGC
-GTCGATCGATTTTTTGGCGTGCCTACTGTTCGCCTGCCTGCATGATGGAA
-CTTTCAAATTCGCGAATTTTACTTCGCAATTTGGCGATTTTTCGTTTTTT
-ACGAGGTTCGATTGATTGGTGGCCGAGTTAATTTTAGGCCACGAAAAATG
-AAAATTGAAGCCGAGTGTCATTTTCGCTGGAATTCTAATTTTCAGTGTGT
-AAAAATATAGAAAACTGCAAAAAATTTTGAATTCCCGCCAAAAACTAACG
-TTACGAGACCCAAGTACAGTGGAGCGCAGTTGCAAAAAAAAATTTTTAAT
-GATTTTTTGCAACTACGCTCCACAGTCCTTGGGTCTCACAACGTTGAAAC
-TAAAATTTTGGAATTTCTCCCATAACTTCTTATAATAACGATATTCGGTG
-GTCTCGACACGACATATTTTCATTAAATAAAACGGGTGTGCGCCTTTAAA
-GAGTACTGCAGTTTCAAACTTTAGTTGCTAAGCGTATTTTCAACAAAGCA
-ACGAAAATTTGAACTTACAGTACTCTTTAAAGGCGCACGCCCGTTTTTAT
-TAAAACAAAAACTTGTCGTGTCGAGACCGGGCACCGTAGTTTTGACGCTA
-AAAATAAGATTTATGAAAAAGCGGGTTTCCAGAAAATTTCACTTTTCAAA
-CTTTGATGAAAATTTGAAGTTTCCAGCCAAAATCGCTGCGAGACAGTGGA
-ACGAGTGCAGTAGAGCGAAATTGCTGTAAAATTTTGAAAAAAAAGTGAGA
-AATTTAAAAACACGGATTTCTGGCCTCCCCCGTAAATTGAAATGGAAGAG
-TTTGCCGAACTAGGCCACTTTGGCTCGCCCATATCTGGGGTAGATTTACG
-GCGCGTTGCGTGTCGCGACGCGATTTTAGTTGGAAAACTAAATGTTTTTG
-CCCGTGTGGAGTACACGACTTTCCCACGTGTTGTCCTCTAGGTGATTGTC
-AATGGAGCGCAAAAAATCCAATGAGGAAGGCCAGAACCCCGTGAAAAAGT
-ACGCGTTTTTGAAGCAATTCATCGAAAGAAGACAGTAAAAAAAAAGTCAA
-AAATTCAAATTTCCAATAGAAAAACCACCAAACCCAACAATTTTTCCAGC
-ACAATCGACCTATTCTTGCTGCAATTTTTCCGTTTTGCACTATGGATGGT
-GCCGGCGGCAATCCACGTGGCCAACAAGGCGGACACGTTGACAATGTGGA
-AAGAGGTCGGTGGCCGCGTGGCCTAGAAATCCCGAAAATTTCAAATTTTC
-AGCCAATTTTCTGCTCGGCACTGCTCATCTGCGCGGCGAGCCCCACAAAA
-TTGCTCCTCCTCACAGAAAAGCTGAAGCCCGATGAGTTCCTCACTTTCGG
-CGACACTGCCTTCCTTGTCTGGAATTTCATTTCCGCGATCATTTTGAACT
-CCTCGTGGACAAGATACTTCTCGCGAACTCCGTCTTCATATATAATTCTG
-GAGGATGAGGATGTAAGTGCGCTCCGCTGAGAAAATGTTTTGATCACCCC
-CACGATTTTCAGCTCGAGGTGGCTCCAAAACAAACGTTTGAGCTTATTTT
-CCGCCTGCTCCAATACTGCAAACGTGAATGGCTCTGGCATATTTCCGGAT
-TCTCGTGGCTCTTTATTTATTCGATCAGTAAGAGAATATCCATCGGGGGT
-TTTTTGTTTCGAATTTAAAAAAAAACACAAGTGGAAGAGTTTTTAAGATT
-TCTAGGCCACGCACCCACTCCAAAACCCCAATTTTCAGCCCGTATCTTCG
-TTCCCTATTACACGGGACAAGTCATCGCTACCGTGGTCGCCACAAAATCG
-TACCCAGCCCTCTCCAACGCTGTCTACATCATGACAATCATCTCGTTGGT
-GAGCGCTGTCGCCGCCGGATTCCGTGGAGGATCCTTCGAGTACGCCTACG
-CAAGGATCCAGAGGGCAATCCGCTACGATTTGTTCCACGGACTCGTGAAA
-CAGGATGTCGCTTTCTATGATGCTCACAAGACCGGAGAGGTGACTTCTCG
-TCTGGCTGCTGATTGTCAGACTATGTCGGATACAGTTGCGTTGAATGTTA
-ACGTTTTCCTCAGGTAGGTGTGGGTCCGTGACCGAAGTTCCCAGATCACA
-TGACCTAATTTTCCCAAATTCTTCCAGAAACTGCGTTATGCTCCTTGGAT
-CGATGATCTTCATGATGAAGCTTTCGTGGCGCCTCTCCCTCGTCACATTC
-ATCCTCGTCCCAATTATCTTCGTCGCCTCCAAAATCTTCGGAACATATTA
-TGATGTAAGTGCGCTCCAGCGAAAACGTTTTTCTAAAGTTTTGACCCCAA
-AATTCTGTCAAAGTGCCCCATTTTGGTTTGATCTTCGGAAAATGCGGGAG
-AAGAGGCGCAGGCTTTGCAACTGATATCACATGGTTAAGATTGTGCTGAC
-GGCACATGGAAAAATTCCCACATTTTTTTGTAGATCAAACCGCACCTGAC
-ACCACGTGAAATTTTTGACAAGTCAAGAAAAATTTCGGCAATTGTGAAAT
-AATCGAATTACCGCCGCACGTGGTGCCAGGCTGTCCCATTACGGCTTGAT
-CTACAAAAAGTGCGGGATGTTTTTGCCCAACAAATTTGACGTCAGCACGT
-TCTTAGTCATGCGAAATTAGTTGAGAACTCTGCGTCTCTTCTCCCTCATT
-TCTTGTTGTTCTACGTAGATCAAGTCGAAATGACCCACTCTGACATCACG
-TGCCGCCTCCCACCCCTGCTCCGACCAGGAATCAGCGGATCTACTTAGTC
-TCAACTTGTTTTATTTCAGCTCCTCTCCGAAAGAACACAGGACACAATTG
-CCGAGTCCAATGACGTTGCCGAGGAAGTTCTCTCCACAATGCGTACAGTC
-CGATCCTTTTCCTGCGAGAACGTCGAAGCCGATCGCTTCTACGGGAAGCT
-CACCCACACACTTGATGTCACCAGAACCAAGGCGATCGCCTATATCGGAT
-TCCTCTGGGTCTCCGAACTTTTCCAGTCGTTCATCATTGTGTCAGTCCTC
-TGGTATGGAGGCCATCTAGTGCTCACCCAGAAAATGAAGGGAGATCTTCT
-AGTGTCATTTTTGTTGTATCAAATGCAACTCGGAGATAATCTTCGTCAAA
-TGGGAGAAGTCTGGACAGGATTGATGCAATCTGTTGGAGCAAGTCGTAAA
-GTGTTCGAGTACATTGATCGAGAGCCCCAGATTCAGCACAACGGGGAGTA
-TATGCCGGAGAATGTTGTTGGAAAGATCGAGTTCAGAAATGTTCACTTCA
-GTTATCCAACTCGTTCCGATCAGCCAATCCTTAAGGATCTCTCGTTTACC
-GTTGAACCAGGAGAGACTGTCGCATTGGTTGGACCATCTGGCTCTGGAAA
-GTCTTCGTGCATTTCTTTGCTTGAGAACTTCTACGTCCCGAATGCTGGAC
-AGGTTTTGGTGGATGGAGTTCCGTTGGAAGAATTCGAGCATCATTATATT
-CATAAGAAGGTACGTTGGCGTCAATTTCGGTTCGACAAATCGTTTGCCGG
-TTTGCCGGCAATTTTAATTTTTGGCAAATTGCCGATTTGCCGGAAGTGTT
-TAGAGTGCTTTTTTATAAGACGGAAACACTTGAAACTGTGTCCGTTTTTA
-AATTTTTGTGCCGGTTGGCGATTTGCATGATATTTTCAATTCCGGCAATT
-TGCCGATTTGCCGGAAATTTTCCATTATGGCAAGTTGCCGATATGCCGGA
-AATTTTGATTTCGAAAAATTGCCGATATGCCGGAAGTTTCAATTCCGGCA
-ACTCGCCGATTTGCCGGAAATTTCAATTCCGGTAATTTGCCGATTGGCAG
-GAACAAATCGTTTGCTCGCAGTCTATTCGGATAAAAATTGCGCCAACTGT
-TCATCCGTTTGCACAGAAAAAGCATTTCCGCGCTTCGCTATTGGCCAATT
-TCAAAATAGTGGGCGTGACCAACCAATCACGGGTGTTTCTTGCTTTCCAT
-TGCTGAAACTGTGATTGGTTGGTCACGCCCAATTTTTTGAAATTGACCAA
-TTGCGAAGCGATGACTTTGGACGCAAGAAACTTCCGTTTTCTCCTTTAGC
-TGTCGATCGAGATTCTCTCCTTTAAAAACACATTGCCGATCTTTTCAAAG
-CCCCTGTTTCAAACGACACAGCTAGTAACAACAAAAAACCTCGAAAACTT
-CCAATTTTTCAGATCGCCCTTGTCGGCCAGGAGCCCGTCCTGTTCGCTCG
-TTCTGTGATGGAAAATGTCAGATACGGTGTCGAAGTGGCGGATACGGTAA
-GCACGATTAAATGCACCATGAGCCAAACAAAAAAACTTGTTCAGGAAATC
-ATTCGCTCTTGTGAAATGGCGAATGCTCACGGATTCATTATGCAAACCAC
-GTTGAAATACGAAACAAACGTCGGAGAGAAGGGAACACAAATGTCCGGTG
-GTCAGAAGCAACGTATCGCAATTGCTCGTGCTCTTGTTCGTGAGCCAGCG
-ATTCTCTTGTTGGATGAAGCCACGTCGGCGTTGGACACCGAGTCCGAACA
-TCTTGTTCAGGAAGCGATTTATAAGAATTTGGATGGAAAGAGTGTCATTT
-TGATTGCACATCGATTATCGACTGTTGAGAAGGCTGATAAGATTGTGGTT
-ATTAATAAGGTGAGTTGCAATTGCGCTCGACCGAGATTTGGTCGCAAACC
-TGACACGGGGTTCTGGCCTTCCTCATTGAAATTTCCGCGCTCTATTGACA
-ATCGCCTGCCGGACAACGCGTGGGAAAGTCGTGTACTCCACACGGACAAA
-TACATTTAGTTTTACAACTAAAATCGAACCGCGACGCGACACGCAACGCG
-CCGTAAATCTACCCCAGATATGACAGAGCCAAAATGGCCTAGTTCAGCAA
-AAACTCTTCCATTTCAATTTATGAGGGAATCCAGAAATCCGTGCGCCCGT
-GGTGTATTACTCGTGGATAACTGCTCATATTTCAGAATTGAGAATTTCGC
-TAAAAACTGTAGAATCGCGTTAAAAATGAGACCTCACCAAAACAGGATTC
-ACGAAACAAGAATTCACAGAAATAGTATTCAGTGGGCGCAGTGTGCGCAG
-TGTGCGCGGGGGTTGCGAAAGCACACTTTTCGGTCCCGCCCCCTAAATCG
-TGTTTTTCGTGAATACTGAATCTGGGAAATTTGAAAACTCGGCGAGTTTT
-TCTGTGCGGCACACCCACGTGGTGTCAGGCTGTCTCATGGCCCGACAAAG
-GGTACATCAGTGTAAATGCGCTCTACCGAACAGAACGCATAACCCACGTG
-GTGCCAGGCTGTCCCATTACGGCTTGATCTACAAAAAGTGCGGGATGTTT
-TTGCCCAACAAATTTGACGTCAGCACGTTCTTAGTCATGCGAAATCAGTT
-GAGAACTCTATGTCTCTTCTCCCGCATTTTTTGTTGATCTACGTAGATCA
-AGCCAAAATGAGACACTCTGACATCACGTGATAACCTGGTTGATACTACG
-CGTACGGCTTGCCGGGCCGTGTTTCTCATTGCGGTTTGATCTACAAAAAT
-GCGGGAATTTTTCCCCCAGGAAAGTGTGACGTCAGCACACTCAGTCTGCG
-TCTCTTCTCCCGCATTTTTCGAAGATCAAACCAAAATGAGACATTTTGAC
-ACCAACACACACACACACACACACACACACACACACACACACACACACAC
-ACACACACACACACACACACACACACACACACACACACACACATCATATT
-TGACGAGCAAAATCGGCCCCATAATTACAGGGAAGAGTCGAACAAATCGG
-AAATCACGAAACCCTACTGAAGGACACCAACGGAACCTACGCGAAGCTCG
-TTCAACGCCAAATGATGGGAGATCAGAAGCCACGTAAACGGCCGGCGGTC
-GCCAGATCGGGACCTCAGCCAGCCGCGTCAATCAACGTGGCAGGACCATC
-GCAGGGTAATGCAATGTCCCTGTTGTCGACGTCTTTCAGCCAATCTGCCA
-GTAGTGTTACTTCTCATTAATTGTTTTTTCTTCTTGTTAATTGGCAAAAT
-ATTATGATGAACTTGTTGGGTTGATTAATTTGTAAGAATAAAGTATACAA
-TTATTCATTCATTATTAAAATTTGGGCACATAGAAAAAATTGTGGAAAAA
-CTGTAAAAAATCTGCAAAAACGTGGAAATTATTCAAATCAACTCCAGGTA
-GTCGTTGTCGACATCGTCTCGCTGCCGCATCGTGTTCTGAAAATCCATTT
-TTCACTTTTTTTAAAGCAGATTCCCAGCTAACCGTCGACCGGATCGTGTT
-GTTCCATCCGCGGATTTGAGAGTAGGAGCTTACGGTGCCACGTGTCTCGT
-TGGCAGCTTGCCAATTATTCACAGACAGCCTGTACGAGTCGCTCAACAGT
-GGACCGGCGTTTAGAGTCTGAAAATATATAACGGGAACACTAAAATTTTA
-GAATGCGTATTGTGCAACACATTTGACGCGCAAAATATCCAGTAGCGAAA
-ACTACAGTAATCCTTTAAGTGACTGCTGCACGTGGTGCCCAGCAGGGCTG
-GGAATTTTTTGGTTTTTTGGTTTTTTTGGTTTTTTGGGACCAAAAATCCA
-AAAAATCAAAAAAAAAAACAAGTTACCGTGTCTAGTCTCGACTCGAGACT
-ATTCTGTATTAAAATACATCGAAACATGTATTTTAACACAGTTGTGACGT
-CATAATGTAATACATTTGGCAACATTACTTGAATAACCCCATTAAAAATC
-ACCTAAAGCATAAAACATTTTTTGGTTTTTTTTTGGTTTTTTTGGTTTTT
-CCAAAATTTCAATTTTTTTGTTTTTTGGTTTTTTTGGTTTTTCAAAAACT
-TCAAATTTTTGTTTTTTGGTTTTTTGGTCCAAAATTTTTTTTTGGTCCCA
-GCCCTGGTGCCCAGCTGTCCCATTACGGTTTGATCTACAAAAAATGCGGA
-AATTTTTTGCCCGAAAACATGTGACGTCAGCACGTTTTTAACCATGCAAA
-ATCCATGCTTCTCCCGTATTGTTTGTAGATCAACGTAGATCAAGCCGAAA
-TGAGACACACTGTGACCGCGTGCTACTGTAGTGCTCGTGTCGATTTACGG
-GATCAATTTTCGAAATGATTATACATATAATTATCGATAGAATAATAAAA
-TTAAGCAAAAAAAAATCGGAAAATAATACGAAAAAACAAAGGAAAATTGA
-AAATCGCTGTCAAAATTCGAAAAAAATTAATTTCGAAAATTGAGTTCCCG
-TAAATCGACACAAGCGCTACAGTAGTCATTTAAAAAGGATTACTGTAGTT
-TTCGCTACGAGATATTTTGCGCGTCAAATATGTTGCGCAATACGCATTCT
-CAAAATTTTGAACTCTCCGCCTCTCACAGCTGGGTCTCGTTAGGTATGGG
-GGCGGATCCTTTTCAATTGGCGGTGGAGCGCGATTGAAAAAATTTTCGAT
-TTTTTTTCGATTTTTCAGAAAAAATATCGATTTTTTCCGATTTTTCAGAA
-AAAAAATTCGATTTTTTTTTGATTTTTCACAAAAATTATCGATTTTTTAG
-ATTTTTCAGAAAAAATATCGATTTTTTTTTCAGATTTTCAGAAATTATTT
-TGATTTTTTTTTAATGTTTTGTCCCTTTTTCTGAAATTCTACCTCATAAT
-GATTGCTTCTTCCACTTCCGCCTCGCTGCCCGTAGTTCAGTGTCGAGTAA
-TTCGCATTCGATACTGTGTAAATCGACAGTGGAATAACCGGGTAGATCAT
-AATGTAGTACAATGTGGCAAAGTGGATCACTAACTGAAAATTATTGGATT
-TTTCTAATAATAAGGTGGGGAAATCCGAAATATGTGAAAAATATTTTTAA
-TAAACAAATTTTCCCCTGATTCCGAATATCTATATGAAAAAATTCAAAAA
-AAAATTTTCCAGATTTTATATTTAAGCTTGAAATCGCTTGAGCCCGCATC
-ACTATTTTCAAATGCTTGCCCAAAGAAATTTGCATTAGAGCGCGCTTGCA
-TAGTTTGATTTTCTTCATTCAAATATTGTATTTATTACCGCCAAATTCAA
-TTTTTTAACCGGTTTCATTCATTTTTGTCGAAAAAATATATTTTTCAGAA
-AAAAACCGGTGAAAAAAAACCAAAATCGACAAAAACTAATGAAGCTGGCT
-GATAAAAATTGAATTCGGCGAAAATAAATAAAATATTTAAATGAAGAAAA
-TTCTTAGGCGCAAACGAAATTCGCCATTTCAAGCTTAAATATAAAATCAG
-GGATTTTTTATTTATTTTTTTTTCACATTGATTTTCGAAATCAGGGAAAA
-ATTTGGGGTTAATTATAAATATTTCCCAGATTTCGGTAAGAAAAATATGA
-TTATTTTTTTACTAAAAAATAACCCCCACCAGTAAAGCGTAGAAAATTGA
-GATGATAAATGCGAAAATGATGAACGCGGAAGAAAAAAAGTCGGGATTCT
-TTTGGGCAGTGCTGGAGTAGTTGAAGATCGAGATGATTGTAGAATAGTAG
-GACAGGAATGAAACAATCATCTGTAATTTATTTTTTTAAAGCTTCCAGGT
-CAATACACGTGGTGTCAGAGTGTCTCATTTCGGTTTGATCTACTGTGTAG
-ATCTACAAAAAATGCGGGAGAAGAGACGCAGAGTTCTCAACTGATTTCGC
-ATGGTTAAGAACGTGCTGACGTCACATTTTACTGGGAGAAAAATTTCCGC
-ATTTTTTGTAGATCAAGCTGTGATGGGACAGCCTGGCACCATGTGGGTGC
-CGAGGGTATTGCTTTTTGGTATTTTTTGGAATTTCGAAAAAAACTTTCCG
-ATTTTTTTGAAAATAGCTCTTTTTATAGAAGAAAATAGTTTTTTCTCATC
-AACACAAATTTTAGAACAATTTTTTCGATTATCCGGAAAATTGAAAACTT
-TCGTTTTTCTATGTTCCATTTTCGATTTTATAAATTTGGGAAAACCTAAA
-ATTTCGATTTTTTTTGAAAAAAAAACGAGTATTCAATAATTTATATATTA
-TAGGCATTCTTTTTCTCTAATTTCTTCTGAAAAACATTAAAAAAAAATTT
-TTTTTTTTTTAAACCAATTTTCAGTAATTTTTTTCTGTAAAAAATACGAT
-TTTTTTCCAATAAATTTCTAGTTTTTTCTCTCTTTTCGTACATTTGGACT
-GTTTCTAATTTTTGCTTGCTTTTTTCTATATTTTTTCTGCGATTTCCTAT
-GAAAAGTACCAAAAAATCGGAAATTGTTTTTTTTTTTCGATTTTTTAGGA
-AAAAAAACGATATTTCCTATAAATGTTTTTTTCATAAGTAAATACTTTTC
-TCCTTTTCCTTTTGATCTACAATATTTCGAATTTATTTTGAAAAAAATTT
-TTTAAACGTTTTTTTCTGAAACAAAGACCCAAATTTTCAATAATTCAATA
-ATTTTTCTGGATTGTTCAACCGAAATATACACATTTTTCAATAAATTTAT
-AGTGTTCTCCTCTATTTTTGTTGATTTTTACTACTATAATTTTTTCAAAA
-TTTTCGAAAAAAAAAATTTTTTTTTTGGAAAATTTTAATTTCAATTCGAT
-TTAAAAAATATAAATGTTCATATTTTTTCATCGAAATATATATTTTTTGA
-TTTTTCAACCTTTAAATTGTTTCATTTTCTCTGAAAAAATCGGAAAAATC
-AACAGAAAAATCGAATTTTTTAAAAATATTTTCCGATTCCGACCGTAATT
-TTTATGAAAAAAAATCGGTTTTCTCGTTATTTTCTACAACAAAACCTCAA
-AAAACATGCTGGGCAACGTCAAAATCGCTCGATATCGAATCTTCAGCTCA
-GTCTCATGTTTCACCAAATACACCGCATACAGAAACATCGTGCAGCTGAT
-GAAGAAGAAAATGAGCAGATATGCACACTTTTCCACGAAAAATTCGCCCG
-AAATCATGAAACGTGGCAAATTGAGCACAATTCGATGGAGCCAATAGCAG
-GTCGATGAGCTGCAGCGGAAGCTTTCATTGGGATCTGTGCAGTACGTTGG
-AACCGATAAATGTTCCTGCATTGATCGGATACAGTAGACGAGCAGGCAAA
-TGTATTTTACAAGTGAGATATTCTGAAAATTTTTGAATTTTTTTTCCGAA
-TTTAAAATTTTAGTTTCTCGATTGTTTTGAAGTAAAAAAATTGATTTTTT
-AGAAAATTATATGTTTTGTTTAATTTATTTAAAAATCTTTAAAGGTGGAG
-TAGCGCTAGTGGGGAAATTGCTTTAAAACATGCCTATGATACCACAATGA
-CCGAATATCATGATAAAAAAATTCAAAAAAATTTTCTAAATTTTATAGGT
-TTTTTTTTGAAAATTGAAAAATCTCAGTTTTTGCCTAATTCCAATTTGAA
-TTACCGCTAATTGGATTTGTTCGGTGGAGCGCGCTTGCACGTTTTTAAAT
-TTTTTTATTTTATTTTATGTTATTTTCCACCGATTTTTAATGTTTTCGGT
-GTATTTTTGCTCGAATTTTAGAGAAAAAGTCAAGATAAATGCAAATTTTC
-AATTAAAAAGCACGCTTACAGGCGTAAAAATGACAAAGTACCGATTTTAA
-ACGATTTCCAACCTGAATTAATTAATTTCACTGATTTACGCCTGTAATCG
-TCTTTTTTAATTGAAAATTTGCATTTATCTTGGCTTTTTCTCTAAAATTC
-GAGCAAAAATACACCGAAAACATTAAAAATCGGTGGAAAATAACAAAAAA
-TAAAATAAATAAATTTAAAAACGTGCAAGCGCGCTCCATCGAACAAATCC
-AATTGGCGGTAATTCAAATAGTAATTAACAAAAACTGAGATTTTTTTCAA
-TTTTCAAAAAAATCGTATAAAATTTAGAAAATTTTTAAAAAATTTTTTTA
-TCATGATATTCGGTCATTGTGGTACCGTGTTTTAAAGCAATTTCCCCACT
-AGCGCTACTCCACCTTTAAAGTGCTAATGTAAACTTTTTGTACACGTGGT
-GTCAGAAAGTCCCATTTCGGTTTGATCTACAAAAAATGCGGGAGAAGAGA
-CGCAGATTTCTCAACTGATTTCGCATGGTTAAGAACGTGCTGACGTCACA
-TTTTTTTGGGAGAAAAATTCCCGCATTTTTTGTAGATCAAACCGTAATGG
-GACAGCCTGGCACCACGTGTTTGTACAATTACACATTATCCTGGAACTTT
-CCAGAAAATTTGAATTTCCCGCCAAAACTTATGGGTCTCATCACGATGAG
-TCACTAACCTCAAACCGATATATTTTCTAAAAACAAAAACTCAAATTTTC
-TCAAACTACAGTAATCCTACAGTAATCCTACAGTACCCCTACAGTACTAC
-TACAGTACCTTGGCATTGTCCCCCACCAATATACAACCCAATATACCTTC
-AAAAAACAAACACGTAATTTTTCCCAAACTACAGTAATCCTACAGTACTC
-CCACAGTACCCCTGCAGTACTACTACAGTACCTTTTTAGAACATTTTTCT
-GTTTTTCGATTTTTTCGCAAAAAAAATTCAGTTTTTTCAGCAAAAAAATT
-GATTTAAAAATATTTCAAGTTACTTTTTAAAAGCTTTTCAAAAGTTTTTC
-AATCCGTAAAAATAAAATTTTACGAATTCTTGTATTTTTTAAATTATCTG
-AAATTTTTTTTTCTCAAAAAAAAAACTTTTTTTTTCAAGTTTTCAATTAA
-TTTCGGCAAATTTCAAAAATTTTAGGTTTAAAAAAATTCAATTTTTATGC
-TTAACATTTTATCGACATAAAAATCATTAACAACTACGAACAATTTGTGG
-AAAACGTTTTTGGCAGTGGAGCGCACTTGCGCCTCGTATTCAAAAAGCCA
-CACAAAATGGTGAAATATTCCCAAAAATCAAATAATTGTTTCGCTACGAG
-ACCCAAAATACCGCAAAATAGTAATTTTTACCATAGTAATTTTCAAAAGT
-GGCACGTAGACCTGATGAAACGTGTCGTTCACCTCCTCCGAGCTTCTGCC
-ACGTGAGCTGGTGCTCCGGCATGGCTGATACATTTGTGAAGTTCGCTAAA
-ACAGAAAAATATTATAAATAAGCGGAAAATTTCGTGGTCTCGACACGACA
-AAAAATAATAAAAATTATTCGTGGTGAGACCCGAGTTGTTTTGGAGCAAA
-ATTCTCAAAATTGGGGTATCACGTGGTGTCAGAGAGTCCCATTTCGGTTT
-GATCTACAAAAAATGCGGGAGAAGAGATGCAGAGTTTGCTGACGTCACAT
-TAAAAAAAAATTCCCGCATTTTTTGTAGATCAAACCATAATAGGACAGCC
-TGGCACCACGTGCGGGGATTAAAACCCGCGCCGCACAGAAAAAAGGCGGA
-GTGTTATTTCGCAACACCGCGGCACGGTTTTTTGTTGATCTTTTTCAATA
-GTCTTGATATTACTTGCGATTTTTGCAAATTCAAAAAATCAACAATAAAC
-CGACCGTGCCGCAGGGTTGCAAACTCCGCCTCTTTTTCTGTGCGATGCTG
-ATTTTTTGCGAAATTCACGAATCAAAAAGCACACGTGGTGTCAGTGTCTC
-TCATTTCGGCTTGATCTACGTAGATCTACAAAAAATGCGGGAGAAGAGAC
-GCAGAGGTCTCAACTGATTTCGCATGGCGCCACACATTTTTGGACAAAAA
-ATTCCCGCATTTTTTGTAGATCAAACCATAATGGGACAGCCTGGCGGGGA
-TTAGAAACCGCGCCGCACAGAAAAAAGGCGGACCGTAGTTTCGCAACACC
-GCGGAACGGTTTTTGATATTACTTGCGATTTTTGCAAATTCAAAAAATCA
-ACAAAAAACCGTGCCGCAGGGTTGCGAATTTACGCTCCGCCTCTTTTTCT
-GTGCGATGCTGCTTTTTTTGCGAAATTCACGAAAAAAAAAAAGAAAATAA
-AAGTACATTTACCGATAAAAGTGACGATAGACCGCCGATATACATGGAGA
-GAATAGAGAGAGAAATGTGAAGTTTATTAGAAAACAATTTTGTAAAATTA
-TGATGATGATGAAGATTTGCGGAATCTGGTAATCGGTTTTAATTGCCTTT
-TCTATTATATTATATTAATCACTTGATGATGTACGGCTTTGCGCTTCCTC
-GTCCACGGTCTCCAGATGACGGAATCCACGTGGCGATACTGATCGATTGT
-GTTTTGGAGTGGTGGTGCTGCTGGTGCTGGTGGAGGGAATTGAGGTGGTT
-GCAGTGGATATTACGCTGAAAAATTGAAAGGATTGGTGGAGGAAATGAGA
-GAAATTTGAGAGCATAAATTTTTAAAAATCGAAAAAAAATTTTTTTTTGC
-TATTTTTGGGCAGAAAATGGCGAAAACGGTGTTTTTTTGGGTAAAAAATA
-ATAAAAATTTACAATTTTTTTTGACAGAAAAATGCGGAAAAGCTGTTTTT
-AGGGTTGAAAAATCAAAAAAAAAATTTTTTTTTGCTATTTTTGGGCAGAA
-AATGGCGAAAAACGGTTTTTTCAAGTTTAAAACATCAAAACAATTTTTTT
-GCAATTTTTTTACAGAAAAATGAGGATAAGCGGTTTTAAAGGTTTAAAAA
-ATTTTTTAAAATTTTTTTTGCGAATGGAAATTTTCTGAAAAATCGTGCAA
-ATGCCTAATTTGTGCAAAAATCTTATCTGGTCAATGATTTTTAAGAGAAA
-ACACCGGTTTTAGAAGGGAAAAAGGCAAAAAACTGGATTTCCAGTGAATT
-TTATACTAAAAATGGAAAAAATTCAGAAATTTTTTAAGGAAAAATCAGAA
-TTTTCGCAATTTCTACACGAAATATATAGAAATTGAGGAGAACCTCGGAT
-TTTTTGCGGAGTTTAAACAATAATTTTTCGGCTAAAATTAACGATTTTCA
-GAGAAAAAACTTAAAAAAAACAGAATTTCAGTGAATTTTACACGAAAAAC
-GTAGCAAAAAGAGGTTTTTAGGGAATTTCCAAGTCAAATTTCCGAAATTC
-TTGCGATTTCAACCCTGAAAAATAGCGAAATTGAGGAAAATCTCGGATTT
-TTGCAGATAAATAATATTTTTTCCAATGATTTCCGTCTCCAAAACACAGA
-ATAATTTACCAATTCGACGATGGTGAGGAGGGAGAGCCCAGCTCGTTGGT
-GACAGCCGTGAGATCCGAGAACAAATTGACGCTGGCTGAAAAAATGGAAT
-AAACGCTAAATTGATGATTTCCGCTATTAAAGTGCATATAGAAATACGAA
-AAAGCAAAAAAAAAAATTTTTTTTAACCTTTTCCCTGGAATCGAAGAGCA
-GTTTGCTTGCGGATTGGACGTCGAAAAGGGCCTAAAATTCTCATTTTTCG
-GCCTGAAATTCCTCGAAAAACCCACTATTATTGGTAGTCGGAGATGGCTG
-ATCGCCTCGTCGCTGGTAATATAGCACGCCTAGCCAGAATCCGTAGAGAA
-AATAAATATAGACTGCCCACACTAGGATGATGGGAAGAAACGACAATCGG
-CAGGCGTCTGGAGTGAAGAAATCAAGATTTTTCAGATTAAAAATTAAAAA
-TCTTTAAAGGTGGACTACACCCTTGTTGGGAAATGGCTTTCAAACATGCC
-TATGGTACCACAATGACCAAATATCATGATTAAAAAATTCAAAAAATTTT
-TCTAGATTTTATATGATTTTTTGAAAATCGAAAAAATCTCAGTTTTTGCC
-TAATTCCTATTTGAATTACCGCCAATTGGATTTGTTCGATGGAGCGCGCT
-TGCACGTTTTTAAATTTATTTATTTTATTTATTGTTATTTTCCACCGATT
-TTCAATGTTTTCGGTGTATTTTTGCTTGAATTTTAGAGAAAAAGTTAAAA
-TAAATGCAAATTTCCGATTAAAAAATCACTGAAAATGCGTAAAACTGAAA
-AATATGCTAGTTTCAGGTTTGTTGTCGTCGGAACTCATTATTTTACAGTT
-TTACGTATTTTTCACATTTTTAAACACTTTTTAGCAAACATTCTGCATTA
-ATCTTGCTTTTTTACTTCTCTTTCCGATAAAAATACACAACTAATGAAGA
-AAATCAGTGACATAATAATAATAATAATAATAATAATAATAATAATAATT
-TATTACGCTCGCTGGGAGACGTGAAGGAATACAGAATACAAAAGTTATCA
-TTGTTCGCTTGAACTAGAATTGGTGCAGTCGGGCAATCGTTTCCATTCCA
-TTAAAATGTTGTCCTTGTCCTTGCGTTGTCCTTGCGTAGACTCCCCCATA
-GTGGGCGAGCGATTCCCGAGTGAAAATAATCACGGAATGAAAAAATAGAA
-GAAAAATAGAATAAATTAATAAAAAAAATAATGCAAGCGCGCTCCAACGA
-ACGAGTTCAATTGGCGGTAATTCAAATAGGAATTAGGCAAAAACTTTTTC
-AGATTTTTTCAATTTTCAAAAAATCATATAAAATTTATAAATTTTTTTTG
-AAGTTTTTTAACGTGATATTTGGTCATTGTGGTACCATAGGCGTGTTTTA
-AAGCAATTTCCCCACAGGGTGTAGTCCACATTTAAAAATTAAAAATTAAA
-AATTCTACCTAACAAAATCGAAAATTTCAGATTCTCCTTGATTAAAAGCT
-TTATTATTGAGTAAAGAGTCCGCAGCGTCCACACGGAGAGCGGGTACAAG
-ATGGAAATCTGAAAATATTTAGGATTTTCAAGGGAAAATATCGATTTTTT
-TTAGCAAAATACCACAGAAATTGCGGATGGAATGAGTAGAAGAGCCGGGT
-TGACTTTCCGGGGAAAGTTTCGACGTGTGATGCTCGTCTCGGAGAGCCTC
-ATTCCCAAGAATCCGGTTGCGATGCTGAAGAAAATCGATGGAAAAAGTCT
-AAAATATCCCCTGAAACCCTACCTAAAAATCAGAAAATACGAGAAAATAT
-TGATTAAATTCCGAGCCGGCACATAATTCGGGCGGATCAGCACTCCATTG
-AAGTTTCGAAACGTTTCGCCGTTCCACTGAAGTCCATCGAAGCCGGGAAC
-GGATGGCGGCTCGAAATGCTCGTCGACACTCATTTGACTGGCCCTGTAGA
-GCCCGATGATGGCAATGGCGAGCATTCCCACTTCCACATGGAATATCAGG
-CTCTGAAAATTAAAATTTAGCTTTTAGACGGAAAAAATCGATTACTTTGA
-CATGAACTTGATCGAAAAGCCAGCGATACGGGTATTTTCGGTGCAGGCGG
-CCTGATTCCGGACGTGCTCCTCGAGATATATTGGAATTTGTCGAGCGGAT
-ACTAATATCTGCCATTTTTTCGCTGAAAAATCAGAAAAAATAAGTTTTAA
-AACAGAATTTTAATGGAAAAATAAACGGAAAAATTCGAAACTTTTTTTTC
-CGCCATTGAACACCAATGTGCCTTTAAGGTACGGTAGCTCTTCGTGGTGA
-GACCACTGCGCCGCGCATCTGATTTCTCGTGGGAAATTTGTTTCGAATCC
-TACGTTTTTTACAGATTTTTCTTTTTTTTCGTTTCGCTCATCATTTTTTT
-GTTGCAAAAAATCCAATTTTCAGACAAAAATGTCAGAACGCCAATCCAAA
-TATTTTGACTATCAAGGTATCGTCATTTCCTCCACTGGACAAGATAACCA
-AGATTCGGAGACGGACCTCGTTTATCTCATTCAAGCTCATGTACGTGAAT
-TCCCTCCGTTTTCATATTTAAAATAATAAGCTCGTTTTCAGGGAAAAGCG
-GCCCCGAAGAACATCATGTACGGTGTCTCCAAGTGCGCATTTGTTCCAAC
-AAACTTGGAGAGGAATTTCGATAATATCGAAGAGGCAAAAAATCTTGAGT
-CAGTATTTATTTGATTTGAGCCCATTTTTAATCTGTTAACACTTGAATTT
-TTAGACGTCGATCCAAAATCCCGCTAAAGTTCGGTGAAGTCATCCTATGG
-AACGAATCGGACTGTGATCACGATAAGAGGATAATCCTTCATATCAAACG
-AGAAAAACCAATTTATGAAGCGTCTTCCAGCAGAAATGGACTTATTTTGA
-AAGTCGGTGGCGTCATCCAGCCCACCTCAACGACCTCGTTCTGGACGCCA
-TTATGCACCGTCACCATGCGTATGTTTCTTCTTGATTTTCGTCTCTCTAA
-CCATATATTTATTTCAGCAGAGACAGAGGCGACCCGTGCGGAGCCAGACG
-TTTGGCTATACGCCTGGATTCGATTCGAAACTACCATGAAGAGTGGTCTA
-GATCCTTTCAATATGACTGCAACATTCGAATCGTTTGACAGTTGCGATCC
-ATCCGACCAAGCACGCGTCTGTGAAGCGGTATTTGCTTTTTAAAAATTTT
-TTACGGGATTTTGAACAAATAACTTTCAGCCATGGAACGCAGGCTCTCCT
-GACTCTAAATTCGGTGTTTGGCGCCCGGATCCAAAGCCTGCTGATAGCGA
-CGACGAAATTGATATCGAGCCGAGAGAAGGCTGGCACTTGCCAGAAGACA
-AATGGGCCGAGGTTAAGGTTGCTTTGTGGATTCTCGTTGACAATTTGATT
-TTGCAGGTCATCAAGATGCAGCTTGGCCTGTATGTCGGCGAACGCCTACT
-GATTTGCAAAGAACTCTCGCAGTTCGACTTTATTATCCCACTGCAGAAGC
-CATTTTCCCGAGGAACGGACAAGACTTTGATCTACCCAGCCGTCGGAGAA
-TACTTTCATTTCAGTGCTATTTGGTCGATGCAGCACAACGGTTTTCTGAT
-CTATGAGCTTCAGCCAGTTCCACTTCTCAGACAGCATGTAACCTCTGTCA
-ACGGAAATGTAAGTTATAATATTGATTTTTTTGTCCAGAACATAATTTTT
-ATTTCAGCTCCTTACCCGCGTCGTTCCTGCCAGTATCAGAGGTCTCTTCG
-TTGACAAGGAGGGCACTCTTGGATTGATTGATGACCCACACCATCTTCTT
-TCATTCTTCGAGTTTCATCCAGCTGGTTATGAATTCTTGAAGGCTATGGT
-AATCATGAGTGGGTCTTATTTTGAAACAAACGCTTTCAATTTTCAGGCCG
-AAGTTCGTGCTGTTCGAACTTCAGAAAACAAATCTGTCCGTTACCGCATT
-GTTCGTACATCGGGAATGTCCATTTTTGAAAACTGGCTTCGTGATACTCA
-GGTCTCTAAAGTTAAATTAAACTCGTCCTTTTCACCCCTGAATTTTTCAG
-TTCGTTGTTGGTCCAGTCAAAGGAATTCGAATCAATGAAGACACTGTCAT
-TTGTGCCAAACATCCGAATGTCTACTTCAAAATCCCCAATAACTTGAAGG
-AAGGAATCCCCATTGGCGGAGGAGTTCAATTCGTTGGAAAGCGACAAGCT
-GGAGTCGACAGTGAAATTATGATCACCGAATGTTCTCCATGTCCAGCGTT
-CACTTGTAAAAATTACTCGGTCTCTGGTGATACGGTTAGTCTTCAATTAT
-TTAATAGTTTTTATTCTATGAGGAAAATATTCAGCGCTTGTTCCAAGTGT
-ACTTGAAGCCAAATTGCGATCATGAGCAGTTGGCGGAGAGTGATTCGATG
-GGATTTGTGGATTTCAGAGAGTTGGAGACTCCATGTAGAGGAAAGTGAGT
-GTGTCAGGATTTGTAAAAATAATTGTAACTGAATTTTAAGGTTCCTGGCA
-TGGGTCCGTGAATCCATTACTGTCAATGATTGTCGCCGTGCTGCTACCAT
-CATGGAAGTATGCTCGACAGCCATCTGTCCTCCGTTGATTGCAATGAGCG
-CGAATTCGAGCAGAGCAACATCGGCCAGAACTACGCCAGCTGGAAGTTCC
-ATTGGATCCAGATCATCAATTCAATCAAGAGCATCTGCAGCTACTTCAGT
-GAGCTCAAACGTAAGTTTATTTTTAAGGTTGGAAGATGATAAAAACAAGT
-TTTTCAGCGATTCGTTGGCCCTTCAAGCCGCAGAACTCCATCTGGTACTC
-CACAAAGCTCAACATCTTCCAGGGTCTAATTAAATATATACGCATCCCGT
-TTTCCCCCGTATTTGTGTTTCAAATGTTCTGCTCATTTTTAATCTACCCG
-TTATCCAACCAAACATTTATTTATTTAAACTTCAAGTTCCACCACCATCC
-CATTCCGCACAACTTGTCTCTCGTAATTTTCTCGTGCTCTAATGAAGTTG
-TGGTAGGTTATTCTAGTGAATACACCCATGTTAAGCAGCGAATACATCCA
-GAAAAGTCCCAACAAGCCGGCAGCGAGATACTCCCCCCAAAATGATGGTT
-GATCGGTACATCCAAGATAGGGTAGCATCGCGATAGACGTGAGCAAGTTC
-GTTATGCACTTGAAAAACTGAAATTTCAGAAAAGATTAGGTGTATCAGAA
-GGTTAAAAACAAACAAATGACATATAGATGAACGAAGCCAGTGATGGAAT
-CGGATTCCGAATACGAGAAGCCATTCCCGGAGATACTGTGATAAGAATCT
-GTGTGATCGAGAACACAATGAGCACACCCACCGGGAACATGAATTCCATG
-GAAACACGGAGGCAAAGGTCACAGTACTGCAAAAAATGCGAAATTTTGGC
-GATTTTTGCTCTAAAAAATGCACTGGCCGGGTCTCACCACGACAAATTTT
-TGTTGTCAGTTGAATGCCAATAGAGTGTGCGCCTTTAAGGAGTACTGTAG
-TTTCAAACTTTTGTTGCAATCGATTTTACAGTTTTCCCGAGAAACAAAAG
-TTTGAAACTACAGTACTCCTTAAAGGCGCACACACTCTTTCCGCATTCAA
-CTTAACAAAAGGTTGTCGTGTCGAGACCCGGCCACTGCATTTTTGTAGCA
-AAAAAAATTTGAAATTTTCAAGTCTGGATAATAATATATAATATTTTTAC
-CTCAACTATGGGAATTTGCATTTCCAAACTATCCAAACAATCGCTGAACC
-CGAAAGCATCACAAATAATCGATCGATATTGTCGCGGAATGTCACGTATC
-GATTGGTAGATCATGAATATGTTGCCAAGTAACGCGAAAATCTTGAAAAA
-TGGAGGATTTTGCTTTTAAAAAATCCAAAAAAAAAAACTTAAATTCGACA
-ATTTCCTGTTTGAATTCCCTCCAAAATGAGAACTGCAGGACCCATCAGCG
-ATTTGAGTGGGCGGAGTCCGAGGGCGCTGATTGGTCGTGCAGTTCTAATT
-TTGGAGGGAATTCAGCCAAATTTGAAAAATCTCGTTTTTTTTGCAATTCT
-TTTGTGGTATTTTCGACATGGGGTTCTTTCTGGCTTTCCTCATCAAGGGT
-GTCAATGTCCCGTAAAAATTTCGAAAACGGGACAACGGGACGTCCCGTTT
-TTTTGAAAACACTCAAAAAACGGGACAAACTGGGCGGTTAAAAAAAAGAG
-TGCATAGTTGGCGTAAATTTTAGTGTATTCGAGGCAAATTATAAAAAAAA
-CTGCATGTAAGTCATTAATCTGCATGAATTTAAGTCTTGAAACAAAACTC
-AAAAACAGAACTTTAAAATGTGCAACAAAATCATGAGAGAAATTGTCCCG
-TTCCCGTGATAATTTTGAAAACGGGACAGCGGGACGTCCCGTTCCCGTGA
-AAACACTCAAAAAACGGGACAACGGGACAAACGGGACACGGGACTTGACA
-CCCTTGTTCCTCATTAAAATTTTCGCGCTCCATTGATAATCGCCCTGGGA
-AAGTCGTGTACTCCACACGGACAAATCACATTTAGTTTTACAACTAAAAT
-CGAGAAAATTGGGAGAGTTTTTGCCGCGAACCTGGCCTAGTTCGCGGCAA
-AAACTCTTCCATTTCAAAATATGGGCGAAGCCAGAAATCCGTGATATTTT
-CAGCATATTTTTTTGATTCGAAGCAAATCTCAGTTTCTCACCACAACGAA
-CAACTTCACATTCGGATGCCGCCCGTCTTCGAAACGTGGAATTCCAACTG
-AATTCACCGATTCGACACTTGAACCGGGTGACATCATCATATTTTCAACC
-AGCTCATACTCGAACTCCGGAATATCCGGCACCACATCAATCGGTGCTGG
-TTCTGGCGGTGGCGGCTCAACTGACACTTTTCCTTGATCTAAAATTTGTT
-TTTTTCTGAAAATTTGTCACTGTACCAAATCAAAAAAAAAACCTTACCAG
-AACTCATAATTTTTGGATTTTAATTTGTAAATTGCAAAACAGAAAATGAA
-TTGGAATTTTTTCACTTTTTATTTATGGGAGGGGGAAATTCTTTGTTGTT
-GCAATAAAGTAAAACAATCACAGTAAATGCCAGTACAATAGTTTTTCACG
-TGTAATATATTAACCAATTACTATATTCAATAACTCTGTCGTCTAAATAC
-ATAGGGTAGGGGGGAAGGTGAGGGAAAATGGAAATAATAAAGTGAAATGT
-TTTGTGTACTTGCGATAAAACAATCAATAAATGGGAACAAGCCGATGATA
-AACTGATAAACCGAACGTGAATATCGAGAGAGGGAGGAAGAAAGCGTATA
-CCCGTTAATGAAATCAAGTTAATGGAATTATTTGGATTGAAACAAAACAA
-CGAAAATATCAATGTTTGAGCATAAGGAATGAGGGAATGGCACTGGTGGT
-GGTGGATAAATGAATCGGGGGGAACGGAATCTATGGAAGTTTCGAATACA
-TCGCATCGAGTTGCTTCGAGTAGTGAGCCTTCAGCTTCGGACGCTTGCTC
-TTCAACGTTGGCGTGAGAAGATCATTCTCGACGCTGAATTGCTCGGCGGA
-GAGACTGATATCGCGCACTTGCTCGAACGAGAAGAGCCCGGCTTTCTTGC
-CAACAGCGACCATGTCATCGAGGATCGCCTTTTTGACGGCGTCGTTGTTG
-CACAGCTCTTCGAATGTTCCCTTGATTCCTTGGTCGGCCATCGCTGGGAC
-GAGAACCTAGAAAAATTGAAAATTACATATATATATATATATATACACGC
-TCTCCTCAAAGCCGAATAATTATTAGAGCGCGCTTACTGCGCTTCGCGTT
-TCTGCATCCGCGGCATTTTGACTTTACACTGAAAAAAGCAGATATTTCAG
-ATTTATCGAATTTTTAGCTTTTAAAATTTTTTTCTGCATTTTTCGAACAA
-ACCTTTTGTTAAACAGTGAAAATTGAATTTAAAATGACTAAAATGAACTT
-TTTTCGTTCACTGGTTGTGAAATGGTTTGAATTTGAAGAAATCAAAGGGA
-TTTTTCTGAATTTTTTAATAATTTTCTATTAAAAATCGGTTTTAAACCAT
-TTTTTGACCCTAATGTTAAGTCACAAATGTATTGAAACCGGTTTTTAATA
-GAAAATATTTAGAAAATAAGAAAAATCCCGTTGATTTCTTCAAATTCAAA
-CCATTTCACAACCAGTGGACGAAAAAAGTTCATTTTAGTCATTTTAAATT
-CGATTTTCACAGTTTAACAAAACGTTTGTTCGAAAAATGCAGAAAAAAAA
-TTTTAAAAGCTAAAAAATCGATAAATCTGAAATATCTGCTTTTTTCAGTG
-GAAAGTCAAAATACCGAGGATGCAGAAATGCGAAGCGCAGCAAGCGCGCT
-CTAATAATTATTCGGCTTTGAGGAGAGCGTGATATATATATATTTTTTTT
-AATTTTGAAAATATTTAAAACCAAAAAACCAACCTCAGCATCAGGTACAA
-CAATAGCAATGAGACACGTCTTCAGTGATTCTCCATGAACAAATGATTGA
-GCGACATATTTCGAGCGGACATAGATGTTCTCAATCTTCTCCGGTGCCAC
-GTATTCTCCCTGCGAGAGCTTGAAAATGTGCTTCTTGCGATCCACAATTT
-TCAGCGTTCCCTCAGGAGTCCATCGTCCAATGTCTCCAGTGTGCAACCAT
-CCATCCTCATCGATCGTCTCCTTCGTTTGTTGCTCATTCTTATAGTATCC
-CTTGAAGATGATGTGTCCCTTGACACACACCTCGCCGGCTTGATCCTTCG
-CGTAATAGTTCAACTCGGGCACGTCGACCAACTTGATCTGACACGATGGG
-ATCACCATTCCGACGTGTCCGGCTAGCGAATCTCCTTCCATCGAGACAGT
-GCAAGCGGCGACACATTCCGTTTGACCGTAACCCTCGACGACGACACATC
-CCATAGCGGCACGAACGAAGGTGAGCACATTCGTCGAAAGTGGAGCCGAT
-CCGGTGATCATCAGACGCACACGCCCTCCGAATCCTTCGCGAATCTTTTT
-GAATACCAAATTGTCGAAGAATCCGTCATTTCTGATATTGAAGCTGGAAA
-AAAAAAGAAGATATTAAATACTATCAAATCATTCAGACCACTCACTTTGC
-CATATCTCTGGCCTTGTATGAGATAGCGAAATCAAACAACATCTTCTTCA
-AAGTCGACTTGTTCACTTCAGACATCACTTTATCGTAAAGCCGATTCAAG
-ACACGTGGCACCACTGGCACCACAGTCGGCTTCAACTCTTTGATATCCTC
-GGCCAACACACGTATGTCACCACGATAGAATCCGACTTTCGCGCCGACAC
-AGAAGCACACACTCTCGATGACTCTCTCGAGCATGTGAGCCAACGGAAGG
-AAGCTGATCATCGAATCGGTCGCCGCGATGCCACTGTGCTTGAAGAAGTC
-CATACAGACACCGTCGGCGATCACGTTCGCGTGAGTGAGCATCACACCTT
-TCGGTGTTCCAGTCGTTCCTGACGTGTAGCATATGGTCGCAAGATCCTCT
-GGTGTTGGTGGAATGTGTGCTGGACGAGTCTTGGCGTTCTTTCCAATCTT
-CTCGAGATCCTCGAACGTGAGCACCTCGACTCCGAGCGATGACGCAGTCG
-TTTTGAGCTCATCGGTGACTGGTTCCATCACAACAAGTGTGCTCAAACTT
-GGGCATTGCTCCTTGAACTTTAAGAGACCTGAAATCAAATTTCCTTTTGT
-TTTTAATAATATTCCTTATCAAACTCACCAGTGGCCTTTGAAATATCATC
-ACAGACAACAATCTTGATCTCTGCCTGATTCAAAATGAATATCGACGCTT
-CTGATCCAAGGGTCTCGTAGATCGGCACAATCACATTCGAATAGTTGTAG
-GTGGCGAATTCGGTGATGATCCATTCGGCGCGATTCTTCGAGTAGATCCC
-AATGTTCTCCGCGTTGCCAGTCGGAACGCCGAGCTCACGGAACGCGACGG
-ACACGTTGTCGGCTCGCTCGAGAATCGTATTGTACGACTCCCACACGTAC
-GGGATTGAACCATCCGACTGTTTGACTCGACGTCCGAGCATCGGCCCGTT
-GTTCGAGAGACGGGCTCCACGGCGAACACCCTGGTAGAGGGTGCGCGCGT
-CTTCGAACAGGAAAGCCTGGAGTTCGTCGTCCTTCAGGTAGGCGCTGATG
-CGGGAACCATCCTGGAAATTAACATTTTAGTCGGGGGGTTTTTTTGGAAT
-TTTTTTTTCGCTCGTTTTCTATTGTAAACCGAGCCACGACGCGACACGCC
-GTAAATCGACAAGCCCAAATGGCCTAATTCGGCAAAATCTTACATTTAAA
-AATATGAGGGAAGACAGAACTCCGTGATTGGAGAAAATTAAAGGAGGACT
-AACGGTTCGGACGATTTTGAACGTATAGACCCAAAATGAGCTCAAATGAA
-TGAATTTCGTAATGAAACTGCTCAAAAATTTTTATGGCGGTTCAAAATGT
-TGAAAAAATTACACTGATTTTGGCTAAAATCACGAATTTTCCCATTTTTC
-CGTGTCACATCTGTTCGAAGTTGGATTTTTTGGAATTATCGTTTTTTATT
-ACATATATTGGTAGTTTATCTCATTTAATTTCGTCGATTAAAGTACATTT
-AAAGCCGATAGGTAACCAATTTCGATAATTTTTGGTCACCTATCGGCTTT
-AAATGTACTTTAATCGACGAAATTAAATGAGATTAATTACCAATATATGT
-AATAAAGGACGATAATTTCAAAAAATCCAATTTCGAACAGATGTGACACG
-GAAAAATGAGAAAAATTCGTGATTTTCGCCAAAAACAGTGTAATTTTTTC
-AAAATTTTGAACCGCCATAAAAAATTTTTGAAAATTTTTTGAGCAGCTTC
-ATTACGAAATTCGTTCATTTGAGCTCATTTTTGGTCTATACGTTCAAAAT
-CGTCCGAACCGTTAGTCCTCCTTTAAGTTTAAAAAAAAAACGGCATATTT
-TGCCCAGTTTCTCTCCAAAACTCACCGGCAAAATGCGACTCTGATTCATC
-GGATCCACCAGTGGCTTGACATTTCCCGAATAGGTGACCCCACTGAACGA
-GTAGGATCCCGACGTCGATGACGAGCTCTTCGACAAGTAGTATCCGAGGC
-CCATGGTGACTGCGGCGGCGGCTCCGATTTGAACGTACGGTGGAAGGGAA
-GAGTTCGAGTTTGGTGCCGAAATGAAATCGACAATACTTCTGTAACAATT
-GAAATTATATATAGAGAGGACGGGTGATGATGATGAGTCATCCAGGTTGT
-TGTTGTCGCGCGCGCGCGCCCGCACTGTTCCCCACAAAACAAACAACTTA
-TTTGAAATTATGAAATCGAAGTTTCTTTGTTATTTTATTTTATTTCACAA
-GATGGTTTTCATGTTTTATATACCATTCGCAAAAACAATACCTAGTTTTT
-GCTCGTTTGGACTCAGAAATTTTGAGACTTTTCTGAAAAGTTTAATGGCA
-GATCAAAATTTCGGAAAAAGGTGAATTTTAGCGAAAATTCGCCGTGGTTT
-TTCGAAATTTTGATCTGCCATTAAAGGTGGTGTAGTCGAATTTTTTTATT
-GCTTTATTAGACTCAAAATTGTCTGAAAACACCGAATTTCATAATAAAAC
-TTAAATGGCCTAAAATTAGCTAAAATTTGAAATTTGACCGACTTGTCAAG
-CGGCTGGAAACGTTTTTTTTTTGAAATAACCGTCAAATTTTGAATATACA
-GTGCAATTATCTTGCGTTTTCAACTTTATTTAGGTACTTTAAAGTCGATG
-AACGGCGAGATTTGTTTTTAATTTTTCACGAAATCTCGCCGTCCATCGAC
-TGTAAAATACCTAAATGAAGTTGAAAACGCAAGATAATTGCACAGTATAC
-TCAAAATTCGACGGTGTTTTCAAAAAAAAAAAAACTGTTTCCAGCTGCGA
-CGTCGGTCAAATTTCAAATTTTAACTAATTTTAGGCCATTTTTTGAGCCG
-TCATAACTTTTTTTGAGGAGTTTTCAAGAAGTTTTATTATGAAATTCGGT
-GTTTTCAGACAATTTTGAGTCTAATAAAGCAATAAAAAAATTCGACTACA
-CCACCTGTAATGGCAGATCAAAATTTCGAAAAACCACGGCGAATTTTCGC
-TAAAATTCACTTTTTTTCCGAAATTTTGATCTGCCATTAAACTTTTCGGA
-AAAGTCTCAAACATTTTGAGTATAAACGAGCAAAAACTAGTCATTGTTTT
-TGCCAATGGTATATAAAACATGAAAACCATCCTGTGAAAAAAAAACAACA
-AAAACACTTGAAATTCGTAATTTCAAAGTTCTCCAAAAAAAACATACACA
-CACCTCGATTGAGACTGTACCCACGCAGCCGTGTCTGTGATAACCATTCT
-GTGTGTTTCTGTGTTTAAGTGGCCTATTTATAGTCTTCTGCCAAAAGACG
-AAACCGCTTCTAAAATGAGATTAAATTGAGGTGGAAACGACGACGACGAA
-GAGGTGGAAGAAGTGAGGGTGAAAATCGAAAAAACAAAGAAGAGATCAAA
-GTTATTCCATCTTTAGAACTTTCTCCACTGCCAGCAATTGATAATAATAA
-TAAGATTTTTATGTTGATAACTCTTTCGGTATCAATACAAAAAGGGGTGA
-AAACCCGCCTCGACAAGCCTTTCGATCAGGCCATATATTTCTTTATCACA
-CTCTCCGCACATTTCGGAACAACTTTGACCTCCCCGGCAAGGGGGCAAAA
-GTTTCGAGAAGTTGTGTTGCGCGCGAAGGAGATGGAGAAGATGGAGAAGA
-TAGGCAAACACGTACACCTCCTCAAACAGTAGTAGTAGTGATAATTGATT
-TGATTAGTGATTCGGGTGGGCAAAACGAGAGAGATAGAAAGAGAAAAAGC
-GAAGAGGACAACGAACACGTGTAATCAACCGTGTGCCAAAGTTCTCGCCC
-TTTGGACTAATTGCAGTTTTTTTGGAGGAAATTCAATTAACACTGAAAAC
-TAGTTCGTTTAAGTGTTTACGCTGAATGGGCCAGGTTTTGAGGGAAAACG
-ATTTTCGAAGAACTTTAAATGTGGGGTACCGAAATCTGAAAAATATTTTA
-AATTGACTCCAAATTTTCCCCTGACTCCGAATATCGATGCGAAAAAATTC
-AAAAAAAATTTTCCTGATTTTATATTTAAGCTTGAAATCGCCGAATTTCA
-TTTAGAAATTCGCATTGGAGCGCGCTTGCATCGTTCGATTTTTTTTTCGT
-TTATTTTATTTATTTTCGCCGAATTCAATGTTTTTAAAGCCAGTTTCATT
-CATTTTTGTCGAGTTCTCATCGAAAATTTTTTTGACAAAAATTAATGAAA
-CTGATTAAAAAATTAAATTCGGCGAAAATAAGTAAAATAAACGAAGAAAA
-TCAAACGATGCAAGCGCGCTCCAATGCGAATTTCTTTGGGCGCGAAGTTG
-AAAAAATGGCCCGGGGCACAAATGAAATTCGGCGATTTCAAGCTTATATA
-TAAAATCAGGGAAATTTTTTTGAATTCTTTCGCATCGATATTCGGAACCA
-GGGAAAAATTTGGAGTCAATTAAAAATATTTTTCAGGTTTCGGTACCCCG
-CCTTTAACGGATTTTTTGGCTTAAAATTGGAAACTCTTGGTATAAAACTT
-GTAGAAACACCGAGTAAACTGTACACGTTTTAGACGATAATTCAAAAGTA
-TCGAGGGAAGTATCCAGAAGTTGAAAAATTGCGAAAAACAGGTAAAATAA
-GGAATTCAACGCGTGAATTTTGCATTTTTAGACTGAAAATAGTGTGGTAT
-TTCTTCAAATATAGACGAAAATATCGACTCGCACTGGTTTTCGATCGATA
-TTTATAGGTCGAGTTCATTGCTATGCACAACATTCCGGGAAAACACGAGA
-TTTGAGGAATTTCTGAGCAACTTCTGAGTAAAGCCAACAAAACATTTTGT
-ACAATTTTCTTGTTGGTCTTGCTCAGAAAATTTTCAATCAAAAACCAATT
-GGAAATCGATATTTTCTGCTAGTTTTGAAAAAACACATGATTTTTAATCA
-AAAATTGTTAAATTCATGCAATTTTCCAAAGTTTTACACGATTTTTTCTC
-TGGAATTCACATGCTTTTTAAAGCAAACGGCCGTTTCTCGTTGTTGGCTT
-CCACGCGATTCCATAGAAACACTGGGGCACCAGAGAAACCGGGGTCGAAG
-CAAATGACCAACAAACAACAAACGGATGTGTGCTTTTTCTTCGTTTTCGT
-CTTCACGAGGAACCACCACGCAAAATGGAACTACAACTACGATTGATAAC
-GAAAAAAAAAAAGAAGAGATGATGATAGTTTTTGCAGCAATAAAAAGAGT
-GATAACAAGATACACTCTATCTCACCCACACCTTTCCGTTCAAAGATAAG
-GAAATAAGATTCGGGGGGTTCAAAGTGTTGGAGCCAAAAACGGAAAACGG
-AGGGAGCAATTGTTCGTTGAACGAACAATAAAAAACCATCATCTGCGTCT
-CAAAAATACACGTGTAAGTGAGCGAGTGAGTGAGTGAGTGCCGGGGAATA
-AAACGAGTTATATGACCAACACAACGAGCGACGTTGCTGCTGCGTTTCCT
-CACTCTCTCCTAGTGAGCGTGTGTGCGCACCACACTCACATGAGCGCATG
-CAAGGGTGTATGCGCAAGTGGTACATCGACTCGGTATGAGAAGGACAGAG
-CAGTAGTAAGGAGCACACGTTATGTTGCTCCACTACTCACTGTTGCGTAC
-CGTGTAGCCTCTGCGGGCCACCGCGGTGCAAAGTACAGTGGAAGGAGGAG
-AGTTGAAAAATTGGTGTTTATTTTACTTTTAAACTCGTTTTCCTCCGGAT
-TTTGAAGAGAATTGGTTGACTTTTTGAATTTTAGGCGAAAAGCGCGGGAA
-AAATCGAAAAAAGATGTGAAAACGAGTGAATTTTAGGGCAAAAGTGAACC
-GACAATTGTTATGAGCAATCGGGCTTCTCGGTCGGAAAACAGATCACAGA
-AAAATCGGAAAATCCAGCAAAATACTCGAAAATTATGCAATTTTCTAGAA
-TTCCAAGCGAAATTTTCTAGAATTTGAGGCAAAATGATACGGAAACCAAC
-GAGAAATCCAGAAAAAAAAACTATTTTCATCGAATTCTAGGTGAAAAGCT
-CTGAATTATTCGATTCTCCGTCGGGGTAGACTCAAAAATTATGCAATTTT
-ATAGAATTCTAGGCCAAACATCGCAGGATCGCCTACACAATTTCCGGAGA
-ACGATGAAAATCGGCAAATCTGAAGCAAATAGGAGTGAAGGAAGAGGCTT
-CGGATCAGTTTTTCTGAAGAAAATACAAAACTTTCGCTTTCGCAAAACTT
-TCGGGAAAATTCTCAGAAAAGGCGTCAAAAGCTCAAAAAATCGACGTTGC
-ACGATTTTCGACGGAAAAATAGAGTAAAATATCCGAATTTCTGCTTTAAA
-ACTCGAAAAATTGCCCAAAAATCCGTTTGTTTTCGCCAAATTTCTCCTAT
-TTGGGGGTCACAAGGCGAGCGGGAGCCGCCGACGACGAGATGAAGAGCTC
-CACAGAGCCCCTGAGCCAACAACACAACACTCACCCAAAAATATTGGAAT
-TCTCCGGAAGGAAATCGTCGTACGACGACGGCGGCGGCGACGGTGCCATT
-TTTCATGGGGAAAATTAGAACCTTGTTCGAATTTGTGATTTATTATCGAT
-TTTCTATGTGCCACGTGTGCCCTATTGCGTGACCCACCTGATTAGTTGCG
-CGAGTATTTTGTCAGTGCGGTCGACGATCACCCGAAGAATGGAGAAATTG
-TCTGAAAAATGCGAAAATTGGCTATAAAACGACGGAAAAAGAAATAAAAA
-CAAGTGAAATGAGGCCGAGAGGCAGGTGAATTGTTTATGCAATTTTAGAA
-ATGTGATATTTTGGCGGTGTAGATCGAAAAAAATGCGAAAAACACGAAAA
-CAGGTCGAGAAATTCGCAAATTTTCGACGACTAAAATTCAAATGCACAAC
-GTTCGCGCGCGCGCCGAAGTACGGTAGGTCCCGCATTTTTGCGCGCGCGA
-AATTCAAATTTTAATTTTAATATTTTTTCTTTCTTCTTTTCTTTGATTTT
-TTAAGAATATTGTGCAAAAAATTCGTTCATTTTTCGAATAAAATTGTTAA
-AAAAGACGAAAAAAAAAAGAAAAAATAAGACAATTTCTCGGTGGCATACA
-AATAAATACAAGTTATTGTTCGGGAAAAAAATCACAATTTTACATTAAAT
-CCAGGTTTGTAATAAAATCAATTATTATTTTATTTTCTTCCAAATCCGGC
-ACATGGATTTGGGCATCCGCTGGTCATGCAGCAGCCACCTCCACTCCCTC
-CGAGACACGCCAACGACTCGCCGGTTGAGATGGCGAGAAGCACGAAGCAA
-ACGACCATGACCTGGAAGAAAATGTGTGAATGTTAAGGTCTCTTAATATT
-CCAATAAAATTATTTGGTTTTTTTTTACCGGTGTTCTTGCCAGAAAAGTG
-CAAAAATTAATTAAAACTCTAATCGTGGCGAGACCCATCTTAGAAACGAG
-AGTATGCGCCTTTAAAATTGGGCTACCGTAATAATCGAATTTTTGCAATC
-TTGCAATTGTTGATTTCCGAAGAGCGTTAACAAGAAAACATTTGATAGAA
-ATGACACATGAATTAGGTAAAATTTGGTTTTTTTTTAGATTCTTATAATT
-CAGATTTCTATTTTGGACACGGAGTTCTGGCCTTCCTCATTGAATTTTTC
-GCGCTCCATTGACAATCGCCTGCCGGACAACGAGTGGGAAAGTTGTGTAC
-TCCACACGGACAAATACATTTAGTTTAACAACAAAAATCGAGACGCGACG
-CGACACGCAACGCGCCGTAAATCTACCACAGATATGGCCGAGCCATAATG
-GCCTAGTTCGGCAAACTCTTCCATTTCAATTTATCGATGTCAGAGTGTCC
-CATTTCAGCTTGATCTACCTAGATCTACAAAAAATGCGGGAATAATACGT
-AGAGTTCTCAACTGATTTCGCATGGTTAAGTACGTGCTGACGTCACATTT
-TTTGGGCTAAAAATTCCCGATTTTTTTGTAGATCAAAAAACTGTGATGGG
-ACAACCTGACACCACGTGATTTATGAGGAAAGCCAGAAATCCGTGATTTG
-GAGAGCACAACAAAAAAAGAAATTCGGCCACTGATTCGCGGCCACGAGCC
-ACTGTGCCTTCTCAAGATATTAGTTAATAATTGACGCTGTGAGACCCACA
-GTTAAAGGCGCATGCTCAGCATGACTGGCCAATCTAATAGCATCTACAAT
-GATAATTGAAAAAAAAACTCACAGTTTGGCAAAGTTTAGCGACGAGTGAC
-ATAATTCTCCGAAAGCTTCAGCTGAACAATTTCAGGGATTACTTGCTGTT
-TCCCATCGCTTCACCGTCTTATATAGTGCCATCGCCGATTGGCAGAATGG
-GATACACCTGCCCCCAACTGCGCAGTTGAATACGATCCGTGTCTCTCTGC
-GTCTAGCGGTTCTCCACGATGTTTCTTTGGCGGCGGTGAAGCCGTGTGTG
-TGTGTGTGGCTCCTCCATTCTGATTGAATGTGTAACACTGCGGGCAACCG
-ATTGGTTTTGGCGGCGGCGGGAAAACGAATCCGGATATACTACATACACA
-AACACACACTCACACACACCGAAGGAACTTTTCAGAGAAACCTGAACTGG
-CTTTTTATGATTTAAGTGCTTCTGCTGCCAGCATGATGTGGTGGTTGTGT
-GTTGTCAATAGGATTTATGCTAATTCCTGACACATTCAAGAGATGAAACA
-TCAAACCGGGTAGGAACTTAGTCCACCCAACACTGTGAGAGATTAATAGA
-ACCTTTAAAAGTGGCACTTCTAGGCAGAATTCAATAGAATGGTGGGCGCC
-TTGGAGCCTAGTCGACCTGCGATGTGAGTGGCAAGGTTGGCAGAGCTAGG
-ATAAGCTTCTGGAACTGTAGGACTGTAACAAGCAAGGATCCCGCTCTGGT
-ACTGTAGTGAACTTTGAGATCAAATTAGGTTTTTCAATATTTAACTAGCA
-CTGTTTCCGGCCCTGATCTTAGAAAGAAAAGAAAAAAAGGATGTGAACCA
-GGCGTGGGCGGCAAACGATTTTTTTCCGGCAAATCGGCAAATCACTAAGT
-TGCCGGAATTTAAAATTTCCGGGAAATCGGCAAACTGACACTTTGCCAAT
-TTGCCGAACGGCAATTGCCGCCCACACCTGATGTATACATATATATGCTT
-TCACTCATGTGGTGCCAGAATGTCTCACTGCGGTTTGATCTACGAAAAAT
-GCGGGAATATTTTTCCAGAAAAATTGCGGCGTCAGCACGCTCCTAACCAT
-GCAAAATCAGATGAGATGTATGCGTCTCTTCTCCCGCATTTTTCGAAGAT
-CACAGCAAAATAGAACTTTCTAACTCCACGTGTCTACTGAGAAAAGAGCC
-GAAAGCTTATTTTCCACGTATCAGGGATCGGAATCCCACCTAGCTAGTTC
-ATCCTATTGCATCATTGAAGCATCTTCCGGATTCTCCACTTTGTTTGCTT
-TTCGAAATCGTTTCAAACTGAAAGCCGCGCTTTCAAGGCCGTCTTCTTCC
-GATTTTCCGATCTACCTTTTGTTGATCATCACGTGCCTGGCGATCACAAC
-ACTGTTCAACCGGAATATCTGAAGATGTTCCACCAAATGGATCGTTTTTC
-TCAGGACGGAAGAATACTAATTTGCAAAAAGTCTGTTCTGTTCTAAAAGT
-TCTGAATCTTCTGAAAAAATTTCAGACTTAGATCCTGTCATTACATGGGC
-AAGCAGTGGAGTCGGAGATTTTTTATCAAAATATATGGATAGGTAATCAG
-GGAGAGACTGGCTCCTTTGTTACAATATATTAGGTTTTGTTCTTTAAAAT
-GTTCAAATGAAGCTGAAGAGTTCCGGCTAAAAGTATATGATTTTTCAATG
-ATTTTTCAAAAATTTCAAGGTATAACTCTGAAACTAAAATTTAAAAAAGA
-AACTAAATTGGATTTTAATGTTAGTTAGTTTATTAACAGAAAGAGCAGTA
-TTTTTTGATAATTGTAACCTGAAAACTCTATTTTTCTAGTTTCGTGAAGT
-AAAAATGTTTTATTATGTGACATTTATTGAAATTTAATTATAATACACTG
-TTAGAAATATTTTATTATCTAAAAAAGTAAATTGGATTATAATGTTAATT
-ATTTTACTATCAAAAAGATCAGTATTTTGTGATAGTTTTAACCTAAAAAC
-ATTTCTGAAGATCGTTTTTTGTGAGAAAAAATTATTTTAATATGTGTCAT
-TTAAAGCAACTTTTAAAAAATTGCGGTTTAGAAATGTTCAGCTATCAAAA
-AAAAGTACATTGGATTTTGGTGCCAGTCAATTTATCAACAGAAAAAGTGG
-TCCTAAAATAATTTCCAAACTTATTAATGGTGGTAGCATTAAAAAACACT
-TTTTTTTGGATTTTTTGAAATGAATAGTGTATTTACAGAGACAATGGTAG
-ATCAACCTAAAAGAACAAAAAATTTGCAATTTTTCCAGGTAGGACACTTT
-TTTGCTACTCGAATATAACTAACCTAAAATAATTTCCAAAAGTTTCAATG
-GTGGTAGCACAAAAAAAAACAATTTTTTTGATTTTTGAAATGAATAGTGT
-AGTTACAAAGACGGTGGTACATTGACCTAAAAAAACGAAAAATTTACTAC
-TTTTTCAGGTAGGACACTTTTTTGCTACTCGAATATAACTAACCTAAAAT
-AATTTCCAAACGTTTTAATGGTGGTAGAATGTAAAATAACTTGTTTTTTT
-TTGGTTTTTTGAAATGAATAGTGTAGTTACAGAGACAATGGTACATTGGC
-CTGAAAGAACAAAAAATTTGCTATTTTTCCATTTTGACCAAAACTATTGG
-TTTTGTCCCCAAAAAATTAGTAAAATGACCCACAATCCAGTTATTTTGCT
-GTTTAAGCAGACACACTACACGGAATTATTTTCAGAAACCAGATGTATGT
-TAAGATTTTAGTAGTTTCGGTGCTGCAAAAACCATCAAAAAATACCAAAT
-TTTTCGGCGTTTGTGAAGCACGGCAATTTTTGAGATTTGCCGCACACCCC
-AGGTACAGAGACAATTTTATATCGACGTGAACGAACAAAAAATTTGCTAT
-TTTCTCAGGTAGGCCACTTTTTTGCTGCTCTAATTTCACACACCTAAAAT
-AATTTTCAAATGTTCATCCTACCCTTATATGTAGTAAGAAGATTTCAAAT
-TCAAATTTTCATGCATCAACTCGTCCCCACCGTTTTTGTTTCCCTGGCTG
-ACTCATCTGACCTTGTCACCCCACGTGTGTTTGTCTTTGTGCCCCCTCTC
-GTGCTCACCTTGTTCCAAATTCTGTGAAAACTCATCTCGAAGGCCATTTT
-CTTCGTTTATGAGTTTTGAAAAAAAAACGTTCAGACAACTGCAAATGACC
-TCCCCGGCGTCGAGAATCGGTGATAACCTTGTACTTCTTAGATGAGACCA
-GATACAAAGTGCACCAAAAAATTCAAATTCGCTTGAGAAGCGCTGGCGAG
-AGATTCGAAGCGAAAACGAGTTGATTGACAATCGGAACATATACACACAC
-CAGAAGACAAAGTGGGGGAAGAAAGGAAACAAAAAAGATAGAGAGGAAGG
-AGATTTTGAAAAACGACAATCTCTCTGTGTGTGTGGGTGACAGGTGAAAA
-AGTGAGAGTGAGAAAAACGTGGTGGGTACTGTATTGATGAACGATCAGAC
-CAAGTTGCATTCAAATTTCTTTGATTGGATTGTTTCCTGATCGGTTTGGT
-AGAAGGTGAAGTTGGATTTTGTTCACTGAAGTTATTGGATTTCGAGACAT
-GAGCAAGCTAGGTTCAGGATGACTGTAGTGGCCGGCTAACTTTCCGTACA
-CCTTTGGCCGACTAGTGAGTGCAACCAGGGCTAGTAAGGAGGTACATCCT
-GGTTACCGTAAGCTTATTAAAATTCTGAAAACACCCTACAAAAACTGATA
-TTTGTAAAGTTCTCCAAAACAGGTGCTAAAACTTCTGAGGCAAGAGTAGG
-CACTTGGAGTCAGAATGTCTTATTTCGATTTGATCTACAAAAAACGCGGG
-AGTTGAGACGCAGAAATCTCATCTGATTTCGCATGTTTAAGAGCGTGCTG
-ACGTCACAATTTTTCTGGAAAAATATTCCCGCATTGTTTGTAGATCAAAC
-TGTAATGAGACAGCCTGGCACCACGTGGGTAGGTGTCGGGATGCACGTGG
-TGTCAGAGTGTCTCATTTCAGCTTGATCTACGTAGATCAACAAAAAAAAA
-TGCGGGAGAAGAGACGCAGAGTTCTCAACTGATTTTGCATAGTTAAGCTC
-GCGCTGACGTCACATTTTTTTTGCAAAAAATTCCCGCATTTTTTGTAGAT
-CAAACCGTAATGGGACACCCTGGCACCACGTGGGGATGCATTAGTATGAT
-TACTGTAGATAAACCTTGAACAATATATATACATTAATTTCGTAATGCTT
-GAAACTTGGACCCAAAAACTATCTGTAACTAGAAAATCTGCAAAAATGAG
-TTTGCGACTTAAAGCTGGAAGTATACAAGTTGCGCAAAGACCTTTCCAGT
-GGCTTCAGCTAGCAACAAAAAAATTTGTAAATTTGCCGGTCCCCACACCA
-CATCAAACGTGCAAGACGGGCAACTTGGTACATCCAGTTCACCTGCACTC
-CAACTACTTCCCAGAACGCCACATAGTTGAATTATTACCCAACTTGGTAC
-ATTATTTTGTCGACTCGACACACCATCACCCCACCATAAACCCCTGCAAA
-TAAGGAAGCCGATCGCTATCTACTCATCTTTAGGGACCTTTTTTGCCGCT
-TTTTATTGATTTGAACAAAATCTCAGCAGAGCAGTCAAAAATTGCCAATA
-TTCCAATTTTTCAGTTGCCAAAGATTTTAGAGTTTCAATACCTACTAAAT
-CCTCCCGTTCCAGCCATCCGTTCTTGATATTCTCTCCATAAATTTTCGCT
-TATCTCCTCTCTTGTAAAACTAACGTTCACTTATCCACATAATAAATACA
-ATAAATGTATTATATACATATATATTATATATATATATATATATATATAT
-ATATATATATATATATATATATATATATATGTATATATATATCTCAAAAA
-ATCAAACAGGATCTCTCTTTTCCTCCAGGAGAAAAAGAAGATGCCGTTTT
-GCAGCCAACAATACTCTCACTCTCAATACACGACGCGACGACGTGGCATC
-CCTCCCCCCATCCTGCCTTTCTTCCCCGTTTCTCCTGTGTCATCGAAATT
-TCTAGGGCAGCAGCACACCGGATTGGTTGGCATGTGAAGCCGACGTGGAT
-CGTGATGGTGATGATGTGGCGGATTGTGATAGATCGTGTTTTTTATCCGG
-CGATTACTGCGAGAATTGTCTGAAAGAGTGGCAGGGCCTGGCGCCTGTCT
-TTCGGCTCTTTTCAGCATTTTGACGTGAATTTCCAAATTTCTAATTTTCT
-CATTTCTATAAATTTGCTGAAAATCAATCAAAGAAATAAAAAAAAAGTTC
-ACTCATGTTTTAGCATACGGCGCGAGAGGCAGGCGGAAATCGCCTTAAGG
-TCAGGCAGGCAGGCAGGCGTTTAACGCCTACATGGAAGCCCTATAGCACA
-CATCTATCTGAAACTGGGAATGTTGTTCCGAAGTGCATTGGAGTGCCTGA
-AATTATACAATGTTTGTTCTAATTTATCATTTACTGTATATAAAGCGCTT
-ATTCCGTGTGTCCATAGTTGGTAGTCTATGTAGTCTGAAGTTTTGGCTTC
-TGGAAGGATAGTGAGTTGGGGTTAGTGTAGGGATATGGTCGGGGAACTGT
-AGTGGTACAATAGCGGTACGGTAGCAGTACTGTAAGATTATGGTACTTTC
-AGAAAAAAAAGTTTTCAGCCCCAGAAGTCGGGGTCCGTGCCGGAGGAGCG
-GACAACGGCTGGTTATCAATAAAGAATACCAACATTTTATCACAGATCCG
-GTTACCGCTAGACAAGAAGGTAAAAATTCGCATTCTGAGAAGGACTACTG
-TAGCAGGTGTTTAGCGTGTGTCCGAGTAGATGTGGCGACTCTTAATTTAA
-GTTGTAGTTTCCTGGTGTCCCCTAATCGCGAACTTCACGATAATTGTAAA
-TATTTTAGTGTGGCCTATGTTTACAGGTTTTACGGACAGCCTAGCCCGAG
-AAAAACTCTGGAAAAAAATCCCAAAGCTCTTATCCAAAACTACCAAAGTA
-TTCTATGCAATTCCCTTTTTGCATTTCCTCACCCCGCCTAATAAGGCATG
-TTGTTTACCGCCGACTTTCCGCAATAATCTATTCTCGCAATCATGTGATT
-TACCTGACGAATCGAAAGTATACGGTAACCTTCACATTTGGAAGAGGAGA
-AAGGAATTCGTTGGAGCCTTGACCCATTCTCCCCACAGGCATAATTCAAA
-AAAATATTCACATCAAGAATGCGGATTTGCCACAACCCAACGGGTTCTCC
-CATCCAGCATCTCTACCTTTGCCGAGGCAGAAACTGAGGACCGATCTCGA
-TCTGCCGCCGCGTTCCGACAAATGTAATAGCAGCCCCCCGCGCGATAGCT
-TTTCACTTTTTCTTCTCTTTCTGGCTACTGCTGCTGCCTCCTCCTGCGCA
-AGGATGATGCTGCTAGGATGATACCCTACGAGATTACGGAACTATCCGAT
-AAATTAGCTTGATGGAGACTAGAGAGATAGTCCCGAAGCTCTGAAGGAAC
-CTGATCTTGTTACAGTCTTGGAACCGAACAGCTGATTGCGTCGTCGTATT
-ATCGTTATTCATTTCGTAAATAGATTTTCTCTAGGATTGATTCCCGGTTG
-AGCCACGTCACTGTCCGAGAACATTCCGGAATGTTATGCATATGTTCTTG
-TAAATAACCTTTCTCCTTCCTCCGGCCGGCCAACTACTTTCATTTCTTGA
-TGCGTCGAGATACGATATCCAAGGCCATCTTTCAAAATCGCAAGTTATCC
-ATCTTTTTTCGCTGATGACTCTCTCTCTCTCTACTCCTTCGCCCATCTCG
-TCTTCAGAATCACCTACCGCAAAACAATTGAATAAGTGAGTGTGGAAGTC
-ACGTCATGAGCGCGACGAAAAGAGAGAAAGAGAGAGAGAGAGAGAGAAGT
-GCCGAAGACGTCGGAAGAGAAAAGCTGGAGGAACCAGCGGCTGGATCGTC
-GTTTGTTGATGATGCCTCCTGCCTGCCATTGTTATTCGATATTCCGATAT
-TCGATTCTTTTTTGCCGCCGCCGCCCAAGAGGAGAGGAGAATCAGAGAAG
-CTTGCGCGCTCCCTATCAAAAAAAAAAGATTATCAAATTTGAAGCAGCAG
-AAGCTGGGAAATGGAAATAATAGCGGATAAACAAAGAGAGCGAAATGTTT
-TGGGCAATAAATTTGTAGTTTGATGATAAGAGTGGCATTTTGATATGAGG
-AAGCTTGCAGAATCTAGTGGTGAACAGGAAGCTTTCGCTATGGAGCAAAA
-TGGATTCCGTCATTTTTCTTAAAGAATCGGAGTCGAGATGAAACACCCAG
-CCGGAGCTGAAAAATTATTCTGCTGAAAAATCGAGGTGCTTGAAGTACCA
-GGGCGTTATACAAAAGATCCAGGGATCCTAGTTCTGCAAAAAAAATTTCT
-GCATAATGAAATGGAGAACAGGGCGGTGCGGCAACCAAGATTTTCGGCAA
-CCGGCATTTGCCGAAGTTGCGGAACCCAAAACATTTTGGTAACCGGCAAT
-TGCCGAAGTTGCCGAATTCAAAAAATTTCGGCAACCGGCATTTGCCGAAG
-TTTCCGAATTCAAAAAATTTCGGTAACCGGTTGCCGCACAGCTCTGATGG
-AGAACCCGGTGGTCAGCTCAGAGTTTGGATCACCACAACCCAGAAATACC
-ATCTTTCAGTGCCTCATACGTAGAAACACTCTAGCTCAAAGTGCCCCTGA
-GGCCCTGGGATCTATCCTTACCTGGAAAACTGTGTAAAATTTCGAATATT
-CACAGATCCTAGGTTCGTAGTTTCACAAAATGTTCCCACTCTGCCTTCGG
-ATCCCCAGGACGCATTGCTACAATATTTTGCACTTGGTACAGTACTCAGC
-TTTCCCTTTTTGCACCAAAAAACATTATTGATCCTTACGATTAGCGTCCT
-AGATAGGCTACAAGGCCATCGAGATCTCAAATATGCAAATTCTTAGGAAA
-GAAAGTGATGTTTCATCATCTTCTTGGATTAAAAATTTCCGAGGAAAAAC
-ATGGCAAAAATCAGGTTGATCGTGAAACTCGTCGGGGGCTCCTCTCACTT
-CTTCCCCATCTTCATCTCTCCTTCTCTTTCCCGATCCGATCTTTTTTCCT
-TTCTTCCATTTTTTCTCGTTTTTCCTTTCCATTTTTTCTTCTCCTTCTTG
-TGTTTGATTATCCATCCTCCTTGCCCTTTCTCCTTGTTTCATTTTTCTTT
-ATTCATTCGGATGGAATAGAGATATGGTTCCGTAAATTCATTCCAATACT
-AGAAGAATTAGTAAGACATTCGTAGGGGGGAAAATTCCGCGCAGAAAGCG
-ACAGGAGGTTCGGGATTGGGTAATCGTCGGAAAAATGAAAAATCGCGCGC
-GCCCGCCCGCGCAGATGGGATATATACTAAATCACATGGGCAGCGACATG
-ATATACGATGGATTGCGTGATCGATAGGCTTTTCAAGGAGGTACATTAGC
-ACTGGTGGGCGTCGGGATCCTTGAAGGAACAACGATCTTTGAAGGAGATG
-ACGAGGATGTTGTGAAATTTAATTGTGATATCATTCTATTATGTAATCCC
-TGGCCTAGAATATACATCATCTTTTAGAATTCTGGTCGGCTAGATGTTTT
-CGGGAAGTGCTTCTAAAGGATCGGCGCTGCCATGTATGTAGGAAGTGCTT
-ATGCCAACCCCAATCATCTTCTCAATCTACTCCTCAGAAGTTCAGTTCTG
-CCAATCCGCACGCTCCACCTTCGTCGCCTATCCGTTTCTCATGCGAGTCT
-CGGGTCAAGGCAAGTGTGCGTGTCCTTCAGTCGTGAAGTCCTATTCATTT
-ATTTTTGCTGCCAAAGTCCGAACAGTTTTTTCTAGCCGTGTCGGCAAAAG
-GGTTCTTATTGCGAATTCACCTCCTCCCCACTCGAGAAATCGCCCCCCCG
-CCGTCCTTGGTAAAACTGACCTAGAAAAATAAAAACAACACAAAGCGCCT
-CCCGCATCATCACGCGTATATATGTATATATATAAGATGGTAGGCGGGAA
-GAGGAATCGACGCAATATCGACTGAAGGTTGCGCAATCGAGATGGCTCTT
-CCCGGCACGGATACCTCCTCCTCGCGTACCAGGCACCCGCATATAGCTAA
-AGTTCTCCGCCCATTTCGTTACTTTTTTGTGCTTCCCATATCATCGCAGC
-AGCGCTTATGCCATTGCGCCCGACCCGATCCAACTTCTTATTCTTGTTCC
-TTAGCCTTCTCCCCCTCCCATGTCCTCCCGATATCCAAAAAGTGGGAGGA
-GCATGCCATAGTGAGAGGGCGGGGCCGGGACACACACAAGGCTGGCCCCG
-AGAAAACGAACAACACTTATGCCGAGGACAGTCTCGACAGTTGGTGGTCA
-CCCCACCTGCGCCTTGATTACCCCGCCCGTCCGCGCCCGCCGGGCTAAAG
-TATTTTGTTTGCCATTCATGTTCCTCATTCGACGTTCATCATGCTTCTGT
-TATGCTTCTTGGTGTTGGTCCGGTTCCTTTCTCTCTCTCTCTCTTTCTTC
-CTTGTGGATCAGATGCCATTCCGCCTTTTTGCTAGATAAGCGCATATTCA
-TCTCACTCTTCTTTGTTTTCAATTCAGCATTCTTTATATATCCAATATCC
-TACATCCTATATCCTCGTTCTCTCCTCATTTTCATTCATATGCCGATCCA
-TTTGGTACTGGTGGTGTCGTTCTTCTTAGTTTCGCTTTCCAATTCTTTTC
-TAGACAATTCCTTCTATTTCCAGAAACTTTTTTCTACACAATGCTCCCAG
-ACAGCCCATCCCCACGCGCTGCCCTTGCTCTCTCCGATCTTCAGCCACAA
-ACCGGCGCCTCAACGTTCTCAATTGGCAGTGGATCAGGCAACTGGTAAGT
-CGAGTTCTTATGTAACTAGTAGGATGGTAGACATCGAGATTAACGATGTC
-TGGCATTCGTTACGTAACGAACGGGTTCTCCCGCCGACCATCGAAGCGCT
-TAAGCGCCGAGATTCTCGGCTTCATCGCACCCCGGTCTAGCAAGTTTTCC
-AATCCATCCCAAATTACAGGTCGACAAGAGGTGTTGGTGGAGTTAATGGT
-GATTACATGGACAAATCCGGCGGAGGAATGTTCGGAAACAGCAGAAACAA
-CGTGAGTTATAAAAATATCTGGGGGGGGGGGGGGGGGGGGAAGTGTTGTT
-CTAGGCCAGGGACATTGAGAACCGCGTGATGAAGAGTACTTTTATCCGAA
-TTAAATCATAGGCAACGAAAACAAGAATCAGGTTCTTGTGCTTTGCACAC
-CATGTCGGAATATCCGTCTCAATCAAAACGAAAAAAGCCTAAGCTGGACC
-AAGTGTTAAATGCTTAAATGCCAAAAATGAACAATCTTTCAAATCACTTT
-CATCTTCCTGTAAATCAGAGAATCCTGAAGCGCTGGCGCGCACACTTACG
-AAAAGTGAAAGCCGATATATCAAGTTTATCACCTAGCGGGACTTCCATTG
-TCTCATTGTCTCTTGGCTATCCGCCCCACTTTCCCCCCGGATCATCCGCC
-CCCTTTAATCCAAGACTCTCGAACAGTTTCGCTTCATTCCAGGACCGATT
-CGCATTCGGCAACAACAGCTCGTCGTCCTCATCAGCAGGCTGCTTTTCAT
-CGAACAATTCGTCAGGCGGACTTTTTTCCAGTAAATAAGTTAATATGTGA
-GTTTTTTTTGTGTACATTTTCTTCTTTTCAAGATCCATTAACATTTCAGA
-ATGCGATCGGCAGCCGGTATTCTTATTCTAATCTCAATAATTATTCCCAG
-TGTATATAGTGAACCGAAGTTGCCCGATTGCGAGCAAATACCAAAAGTCT
-TGTGCTGTACCCAACGTGTCTTAGATAAATGTATGTCTGGTTGTATCGAT
-TATGTCACTGAGAAATGCCCCCACAAATTGGAAAAATACGAGACGATCGA
-TGAAGAGCCATCGACGAGAGCTCCAAAGAAGCAGGTGAAGCCAGCTAAGG
-CAACTAGCAACAGAGTTGTCGGAGCAGTTGAAGTAGACCATGAAGCCAAG
-GAGCAGTTCATCGACTCCAAGGATATCAGAAGAGCACCACGAGTCGGTGA
-TGCCAAGCTTCTCAGCCAGGAGTACCCGATCACCGAGGTCACCGACGCCG
-ATCTCTCCTCCGAGTGCGGAACCGAGAAGTCTCAGCCACCATTCTCACCA
-TGCTTGTCCCGCAAGTCGGCCGACGACGTCTTCCTCTCCTGCTGTCGCCA
-ACAGGTTCCATCCAACTGTCACAGCCTCTGCACCTACGAGCATCGTGAGC
-ATGTCGCCGCTGAAACTCTGATCCAGGCGATCCAGCAAGAGCACTGCGAT
-ATGAAGGTAAGAATAGTTCAATCTTCCTATTGAGTTTTTTTTTTGAGTTT
-TTCCAAAATTCATTCTTTCAGTACTTCTCCAAACTGCTCTACTGTGCCAA
-CCAAAACCGCGACAACCGCGCGTGCTGCTCCAACCTCGGCATGTCAAACG
-CGGAACTCGGCGTCGGCGATCGTTGCCTACGTATGTGCAACATCTCCCCG
-TCGGGAGACCGTGTAAGCTCTATGGAGAAGGAGGATCTCGTCTGCCTGTC
-CAACTGGAACGTCATCATGTACTGTGCCAGAGGTGGTCTTCGTACCATCA
-ACTAGACCATCATCCCCGTTCTCTTCTCCCGTAATAAGCTGGCTCAGGTT
-GTTAATAATAATTCGCCGCTCGTCTTAATAATTTTCCATTTTCCAATCTC
-GTCCCCCCTTTTCAACACTACCACATTTCTCAGTGATATTCATCTGAACC
-GCCCGACATACATCAGTTCCTCATAGTACCTAACAGGGTTCAACAAACCC
-ATCCACACACCGTCCCCCCACGTAACACCCCCCCCCCCCCCACTTAAGGA
-CCAAGTCCTAGTTACTGAATGTGCAACATTATGGCCAGAATGCAATACTT
-GTCCCATCTGAATCCATGTTATTTGATAATCTATGACAGTATTATACAAC
-CCTTTTTTTTCAAAACACAAGCCCCCTTGAAAACGAACTCATTGTATGTC
-AAACGGTATCCCTTATTACACGATTAATTGTGGAGTTTGAAGCGAATAAA
-TCAATCAATTTCTCGTTGGGTCCCACAGCGAAATGACTATTACCGGTACA
-GAGAGTGTGGATAGTTAGAGAGTGACAGACATCCGGGACCCAATGGGGCG
-GGGCGCGCGGAAGAGACGATTTGTGTCGATTTACGAAATGATGACAACGA
-GGAAAATTTCGTAAATCGACACAAATCGTCTCTTCCGCGCGCCCCGCCCC
-ATCGGGTCCCGGATGTCTGTCGCTCTCTAACTATCTACACTCTCTGTACC
-GGTAATACTATTGCAGTAATCGCAGGTTATTTCATAGCGATTTTTCATAG
-CTTCACGGATTTCTGGATTCCCTCATAAATTGAAATGGAAGAGTTTTTGC
-TGAACTAGGCCATTTTGGCTCTGTCATATCTGGGGTAGATTTACGGCGCG
-TTGCGGTTCGATTTTAGTTGTAAAACTAAATGTATTTGTCCGTGTGGAGT
-ACACGACTTTCTCACGCGTGGTCCGGCAGGCGATTATCAATAGAGCGCGA
-AAAATTCAATGAGGAAGGCCAGAACTCCGTGCAGCTTTACTCGCGAATTC
-AGGTGTGTGTTTTAATTGTCTTTATTCAGTTTTCTGATAATGAATATACT
-TTTTTACAGAAAAACTGGAAAACTGATAAAAAAGTCCCCAGAAACTAGAT
-ATTGAAATTACAGTACACTTTAAAGGCGCACACATTTTCACAGTAAACAA
-AAAATTTGTCGTGCCGAGATATTTCATCCAGATTATCAGTTGTTAAAATT
-TGACAACACTCATTTTGAATATTTAATGAATTCGAATGGAAAATAGAAGA
-AAGCTGCCAAAAAGTGAAATTAAATTCTCAAAAACTTGATTTCCAGACTT
-TTTTGGCGATTTTCGACCAATTTCAGCAGAATTTTTAGCAGAATTTTACA
-AATTTTTTTATTTTAAAGCTTATTTTAATAATTTTTCTCTGAAATATATG
-AATATCTTTGCTTTCGATGGATCTTCCTCAAAAGTAGACACACATTTTTA
-TTTTTCTACAAAACTGTGCAAAGTTACGTCGTGGTGTTTGCGTACCTCGG
-CGGGAATTTAAAGAGAAATGGCATTTTTCACTTTTCTCGCAGTTTTTCTG
-ATTTTTTTTTCGTTTTTTCGTAGTTTCCTAATAAAAAATCGTTCCAATTG
-TTTCCAGGTAATGGCTGGATTTGAAATTCAAAGAGTCGAGTCCAAATTCT
-TCGACTTGGACGACATAATCGCCAAGTCAGACTCCACGTCTTGCACATTT
-GAGATTGGAGATTTGAATCCAGGTCTGAAATCGCATCGAAAACCTAAAAA
-TTCTAGTGATTTTTGTTCAGATTTCTTCCAGGAAATGCTGGGAGTTTCGA
-AGCCAACTCAAAATGCAGACGGATACGGCGTTGATGCTCCATACTGGCTG
-CTGGAATCCGTTAGAAGTTCATTTTCCGTGAGAATTTAGTTAGATTTGCC
-CCGAATTTTAATTGAGAATTCCAGATTCAACTGCCAAAAGCTTATAGTGT
-GAACATGCAAAATGTGCTGAACGCTGACAGCAAGAAATTGAATCTCTCCG
-GCTTGCAGCAACACTTTTACGGCAACGGGATGCAGTTATGCCGTCTGATG
-AAGGGCGAAAATCCGGACGGCGCGCTGAGCCTCGCACGATGCCTTGTCTC
-CACACTTACACAGCGATTAGGAGGTATTAATTAATATAATAAAGCACTTA
-TAAAATACAATTTCTGGTTTTTTTTTGTTGCAGAAATTGTGTCAACTGCA
-ACCCATCTGCAAAGCAAAGGCGAGAAATTTGACAGCCTCGAGACAAAAGT
-GTTCCTGGAGGGTAAACGGTGCAAAGAAGACATTGATACTTGGCTGAGAC
-AAGACAATAAGTGCTCGAGCAAGAAGCGTAAGAGACTTTCGTTATAAACT
-TCAAATTTCTTATGCTTGAATCTAATTTTATTTTTTTTAATTCGTCTGTA
-AATATAATTCAAACCCACCATTCTGTAATAATATTTTATTTTCTATTTTT
-TCACACTCATTTTTGTGTTTTATTGGTGTAATAAACCTGGTTTCATGACT
-TTTTTGCAAGGAATTTTGTTGAAAAGGCTGCTGCAAAAACTTTGCCAGCA
-AAAAATTTTGTGCAAGCACGCTCCATCGCACAGTTTGAACGTCGCGGGTC
-GAAGTTAGATGTGCAGGTCATATAGCAAAAAGAGAAACACCCCTTTTTTT
-CTCGAGAAGTTTCACCAATTTTGCGCGATTTTTCAACTATTTTTTTGCTT
-TTTTGGCTTAATTTTGGCTCAGATTTTCCTCAAAAACATGAAAATCCAAT
-CTAGAATAAGTAGTAATGGGTATATTCTAAGATTGTGCAAAAGTTAGCTT
-GAATTTCCTCGATTAAAGCTTTCCTACCAAGAAAAATGTGTGGATATTTT
-GAATTTACAAGTTTTTCATCTTTTTTTTGTAATATTCTCTTTGAAACTCC
-TGTTTCTCTCAAATTTGTAAACTTTCATAAACGTTTTTTTCAGGGTTACC
-ACATTAAACAATGACCGGAAGCACCGAAACTCGCCAGAAGGAAGTCAAGG
-AGGTTGGTTGTTCAAAGTGACGTCTAAAATATTTAAATTTCTATATTTCA
-GCCACAAGTTGACGTTTCGGATGATTCCGACAACGAGGCCGTCGAGCAAG
-AGCTCACCGAGGAGCAAAGACGTGTGGCCGAGGCTGCTGGACTTGGAGAT
-CACATCGACAAGCAGGCCAAGCAAAGCCGCTCCGAGAAGAAGGCCCGCAA
-GCTCTTCTCCAAGCTCGGACTCAAGCAAGTGACTGGTGTCTCCCGTGTCT
-GCATTCGCAAGTCGAAGAACATCCTCTTCGTCATAAACAAGCCAGACGTG
-TTCAAGAGCCCAGGATCTGACACCTACATCATCTTCGGAGAAGCCAAGAT
-CGAGGATCTCACCCAACACGCCCAGATGTCTGCTATTGAGAACTTGAAGC
-CAACTCGTGAGGCCCCACAACTCAAGACTGTCGAAGAGGACGAGAATGAG
-GATGTTGAGGTAATTCAGTAACTTAATCGGATTTATTACATTAATTGTAC
-GGTTTAAGGAGGATTCCACCGGCATTGAGGAGAAGGACATCGAGCTTGTC
-ATTTCCCAAGCCAACACCACCCGCAACAAGGCCATCAGGGCGCTTAAGGA
-AGCTGACAATGACATCGTCAATGCCATCATGAGCCTTACCATGTAGCTTG
-TTTCCTGATGACCTTGCAGATACTCTTGTTATCGTTGTATCTCTTGCTTA
-TCCCGTTTTCCGTTCCAAGTAAACGTTTATCAGTCTTTTTTAACTTTTTT
-GTTATGTTTAAAAAACAATTGCATCTTCGAATTGACCTACCTTTTACAGA
-AAAGAACAATTAAATCACTGTTTGTGTAAAACACCCCTCTATTGATCGAG
-AACTTTCACTTCTTCCAATTCTTTACTCGTATGACTGTGATTCATTTCAC
-CTGCTATCACTTTATCATGACATTCCAGTTTATATCAACAGCAAATACCA
-ATTGTGTGTATGTGAAAAATGCTATTGAATAGCAAGCGCGCCCCAACAAA
-CACGTTTGAATGCGCGGGCGAAACGGCGTTAGATGTGCAGGTCATATGAC
-AAAACGCATCGACCAGCAGCCAATGGCAAGTTACTGCGAGCTGTTATAGA
-TTTTTTCACATGGTTTCCAGTGTTATCAGTTGGAAATCGATCGATAATAC
-TGACTAGTAGTACTTAACATCTTCATTCCCACCGTTTCGCTGTCATTTGT
-GATACGTGGATTTATTTTTCCTTTCTCGCCGACTTTTCATTTCTAAATCT
-TTTCTGGAATTGCGAAATTTTCAGCCAGTTTCATGATCGAATGGCTCGTA
-ATGAACCATCATCTCAGCAGCCGAGTAGTTCCGGGAGTAATGGAACTCCA
-GCACAACAAAACGGGTCGGCAAAACCATCAAAAGTCACAGTAAAAGGTAA
-CAATTCGTAGATTTTTTGCATCTGTTCTAATAATATTTCCCCCTCTTAAT
-CATAGTCGTCAACGCGTCGTTCACCAAGGCAGCCGACTGCTATGTCGAAA
-TCACGAGTGACACGTCATCGGCGGCGCCAAAAAAGACGACTGTAAAGAAG
-AAGACGATGGCGCCCGAGTGGAATGAACATCTCAACGTTCATGCAAATGA
-ATCTTCGACAATTTCGTTTCGTCTATTGCAAAAAGCCAAGCTATTCGATG
-ACACGTGTCTAGGGATGGCGAAGCTGAAGCTTTCGAGTCTCACAAGAAAT
-GAGAATGGAGAGTGTAAGTGGTTTTATTGAAATTTTCTCAAAAAATCTAT
-TATTTCAGTCAAAAACGACATCAACAATATATCTTTGCTGGCCAAAGACT
-CCTCGAAAATCGGAACTCTCAACATAATTTTCTCCGGATATCCAGAGCGG
-AAACGAAGAAGCGCAGGAGTACGAGCTGAAACCGCCGCGTCTGCAAGTTC
-AGAGGCATCCACGTCAAATGGCGTTGCCACGTCATCCTCGGCGCGGAGAC
-CGGCGACAGCGAAGCGTGACACTTTGGCGGCTCCAACGGTAATCGTGACG
-AGACCCATTTTGAATTATTTAATTATTCATGAAACGCTCTACTGGAGTGT
-TCATAATTATTAGAGCGCGCTCGCGCGGCACCTCACGAACTCCAGAATTC
-GCGAGGACAGCAGTTTTTGGCTATTTTGGCTTCTATGGAAATTATTTTTA
-ATTTTTTGATTTAAAATATTGTTGAGAAGCATCATCCAAATTGAAAATGT
-GTAAAATTATGAAATTTGACCGAAAACTGAAGGTTTTACAGAGAGGAGTC
-ACCACGGCTTTCTTTAAAAAGTATCAGTACCGTCAGTATTTCGATTTCAG
-AGTCGTAAAATATGTCATTTTGTAGAGAAACGTCTGTTTCACAAAAATCC
-ATGTTTGATATTTTAATTGTTTAATTTCTAATATAAAAATATTCAAAAAA
-TCAACAAGTTTACGTTAAAATCGAATTTTTCAATCGTTCAGTTTTTAATA
-AGAACAATTTCATAATTTCAAACATGGATTTTTTTGAAACAGACTTTTCT
-CTACAAAATGACATATTTTACGACTCTGAAATCGAAAAAACTGACGGTAC
-TGATACATTTTAAAGAAAGTCGTGGTGACTCCTCTCTGTAAACCTTCAGT
-TTTCGTTAAAAATAATTTCCATAGAAGCCAAAAATAGCCAAAAACTGCTG
-TCCCCGCGAAACGAAATCCCGCGAATTCTGGAGTTCGTGAGGTGCCGCGC
-GAGCGCGCTCTAATAATTATGAACACTAGAGGAGAGCGTGAATGAGCGTT
-TTTTATTCTTTTCTCTGCATTTTTAATGCTACAGAATCATACACAAAATG
-TTGTCAAATACATGCATTACTCTACTACTCTTAATGTTTACTTTTCATTT
-GCAGAGTACCGCAGCGGCGGCAGCAGCAGCAACAGCAGGCGGCACCCCGG
-CCGCCGGAGCAGAAGAACAGCTTCCCGATGGATGGGAGATGCGTTTCGAT
-CAATACGGACGCAAGTACTACGTGGATCACACCACCAAGAGCACCACGTG
-GGAACGCCCGTCTACTCAGCCATTGCCACAGGGATGGGAAATGCGAAGAG
-ATCCGAGAGGAAGAGTGAGTTTTCCGGCGGAAAAAGCAGATTTAGCACGA
-GAAAAGCGTTTCTGATTATATTTTTGATGCGAAAATCATCAAAATTAAAA
-ATATCTACCGTAGCCGCGGATACCTGGACCAAAATGCCGAAAAAAGTGAC
-CTGATAAATTATTTTAAGGCTAAAATCTTGATTTTTACATAATTAGTGTC
-TTATTTTTGTTGATTTCTTGTCAAATTTTTGTAATTGCATCGAAATAGGC
-CAAAAATAAAGTAAAAATCAACTTCCAACACAGAAAAACTGACAAAATTG
-AAGATTTTTGCTGAATTCAGGCAATTTTTCGTAATTTTGATCCTCCATAA
-TTTTTTTTTTCGAGAAAATTTTGAAATTTTTTCTTTAAATACGGCCTGAA
-AATTAGGAAATTATAACGACGGATAAAAAATTCTGATTTTCTTTATTTTA
-ACCAAGGTCTCCAATTATTTGATAATCGAAAAAAAAAAAACTTTCCAGTG
-ATTTTTACTTGAAAAATGTCTAAAAATTCACGCCAGGTGCACAATCCATT
-TTCAGGTGTATTACGTGGATCACAACACGCGCACGACCACCTGGCAACGA
-CCGACAGCCGATATGCTTGAAGCACACGAACAATGGCAATCGGGAAGAGA
-TCAGGCGATGCTTCAATGGGAACAACGTTTCCTTCTCCAGCAGAACAACT
-TTAGCGCCGACGATCCACTCGGACCATTGCCCGAAGGATGGGAGAAGCGT
-CAGGATCCGAATACGTCGAGAATGTACTTTGTGAATCATGTAAATAGAAC
-GACACAATGGGAAGATCCGAGAACACAGGGGTATGTGAAAATTTTCAATT
-TTCCAATAATATTTCTATCAAAAATCACAGTTTTAATGTTTTAAAAGTTT
-CAGAGGCTCCGACCAACCTCTTCCGGATGGTTGGGAAATGCGATTCACCG
-AGCAAGGCGTTCCATTCTTCATCGATCACCAGTCTAAAACCACCACCTAT
-AATGATCCAAGAACCGGAAAACCCGTCGGCCCGCTCGGCGTCGTCGGTGT
-TCAAATGGCCATGGAGAAGAGTTTCCGGTGGAAAATTGCACAATTCAGAT
-ATTTATGCTTGGTAAGGGAGGGCGAGAAATTCTTTGATTTTAGCTATAAA
-TTGATGTAAATTTCAGTCAAACAGTGTGCCTAATCATGTCAAAATCACAG
-TATCCCGTAATAACGTGTTCGAAGACTCATTCCAAGAAATTATGCGTAAA
-AATGCAGTCGATCTACGCCGGCGGCTGTACATTCAATTCCGAGGCGAAGA
-GGGTCTCGACTATGGAGGTGTCGCCAGAGAATGGTTCTTCCTGCTGTCGC
-ACGAAGTGTTGAATCCAATGTATTGCCTATTCATGTATGCTGGTAATAAC
-AATTATAGTCTTCAAATCAATCCAGCTTCATTTGTTAACCCGGATCATCT
-TAAGTATTTCGAGTATATTGGACGATTCATTGCCATGGTGAGTGTTTTTT
-TTTAATTGAAAATCAGTTGAAAATTGGATGAAAAATTGCGAAATCGAGAG
-AAAATCGAGTTTTCCGCTTTTTACAATTGAATTTTAAAATTTTAAACGTT
-AAATTTTGCAGAAAATTCCAAAAAAAAGCACTTGGATCTAAAATTTTTGT
-TTTTTGATGAAGGAAATCCTTAAATATCGATTTTTTTTATTTTCAGCTCA
-AAAAACCTGGAAATTTCGATGATCTCAAATTTTCAGATCAATATATTTCA
-TTTTCTCCTAAAAATGTTATTTTTATTTAAACAAATAGTTTTTCTTAGAA
-AATTCCTTTATTTTCAAATTTCCAGGCGCTATTCCACGGGAAATTCATCT
-ACAGCGGTTTCACGATGCCATTCTACAAAAAGATGCTCAACAAGAAGATT
-GTTTTAAAGGACATTGAACAAGTCGATTCGGAAATTTATAATTCATTGAT
-GTGGATCAAGGATAACAATATCGATGAATGCGATATGGAGCTCTATTTTG
-TTGCCGATTACGAGCTGCTCGGCGAGCTCAAGACTTATGAGCTTAAGGAG
-GGCGGTACAGAGATTGCTGTTACCGAGGAGAATAAGGTGAGATTTTGGAT
-TAGCTAGAGCTTATAAAAATAATTTTTAAATAAAATAATTTAATTTAAAA
-AATCCCAATTTTCCAGCTTGAATACATCGAACTGCTCGTTGAGTGGCGCT
-TCAATCGCGGTGTCGAACAACAGACAAAAGCCTTCTTCACCGGCTTCAAC
-TCGGTCTTCCCGTTGGAATGGATGCAGTATTTCGATGAAAGAGAGCTCGA
-GCTGTTGCTCTGCGGAATGCAGGACGTTGATGTGGACGATTGGCAGAGAA
-ATACTGTCTACAGACATTATGCTCCACAGAGCAAGCAGGTAGGGGAGAAC
-ATTTGATTAAAACTTCTTTTTTTTTAATTAAAAAATACATTTATAGGTAA
-CCTGGTTCTGGCAATGGGTTCGAAGTCTGGACCAAGAAAAACGTGCCCGG
-CTCCTACAATTCGTCACAGGAACGTGCCGTGTGCCAGTCGGTGGATTTTC
-CGAGCTGATGGGCTCGACGGGACCACAACTATTCTGTATCGAGCGTGTCG
-GCAAGGAGAACTGGCTCCCACGGTCGCATACGTGCTTCAATCGACTCGAC
-TTGCCGCCATACAGAAGCTACGATCAGCTCGTCGAGAAGTTGAGCATGGC
-GATCGAGATGACGGAAGGATTTGGAAACGAGTAGTCTCCCGTTGTTTTTT
-TTTGGTTTTGCTGGCCGCCTAATTATTGTATAACCCTCATATTTCTTCTC
-ACCCACACCCCATTGATTTTCCTTTTTTTTCTCTCCATCAATTAATGTTT
-CTTTTTTTCGAATTTGTGTGATAATTTTCGTGTTGTGATACCACTTGCTT
-AGGTTCTCTCTCTCTCTTTCCTTTCCTTCTGGGTATGTACCTATATTTAG
-AATATAGACAAAGCATCTAGTTTTTTTGGATTTAATTTCCAAATTTCCCG
-TTTAATTCCAACAACAAAAAAACAATTCCACCACTTTTCAAATATTTTTT
-TTGTGTCCATTGCTTCATTGCTTTTCTTCTTCTCAACCATTTCAACCACC
-ACCACCCAATCTGCGCCTTATTCTTACTTGGTCCTTGTCATTCTTAGTTC
-CAGTTTTTTTCACGGAAGCAGCTCTCGATTATTAATTCAAATGCATCCCC
-CCAACCAATCCGTCACCCCCCGATTAGAACAATTTCTACTTTTTTTTTTG
-AAAACAAAAAAAAACACAATTCCTCGATTTGGTTGTAATGAATTTAATTT
-TTTAAATTTTGAGCCTTTTTTGTTGTTTTAGGTTTTCTTAACTTTCAGAA
-TTTCCATGCGGAACACACGGAGAGCAGAAGATCAATATTTTGAACCCTGC
-AGGAGAAGGACGGGACCCTTTGGTCACTCATGTCTCGGCTGTCTGCGTCT
-CTCCTCTCTCTCTGCACCAGCGGAGAGGATGGATAGCCTCATTCGTTTTA
-TTTCGGACTTTCGATTTTTCTTATTGCTCCACGTTTTAGCTTTTATCAGA
-TTCGGGGAGCTCTTGCTTTTTTCTTGATTTTTTCGTAAAGTGTTCTTGGG
-TCCCGCAGCGAAAATTAACTTTAAAATGATTTTTTAAAAACTTTCTAAAA
-ATTCATTTTTTTTTCCATTTTACGACTAGAAATTTCGAAATTTGAAAAAA
-AAAACCGTGTTGCAAATGCGCTCCAGCGTACAAAACAAAACCGCCACCAA
-AAAATTTAAATTACTGAAAAAAACGATGAAATTTTGAATTTGTTTTGCCA
-TTTTCCGGCAATGATTTTTTAAATAAAAAAAACTGTACAACAAATGCGCT
-CCAGCGAACTAACCTTCAAATTACCGAAAAAAATTATAAAAATTTGAATA
-TTTCCGATTAACCCAAGAAAAGAAAAATTCAATGATTTTCTTGAAAAAAG
-TTATTTTTTTCTCAATTTTTCGTCAATAATACTCAAAATTTGAAGAAAAA
-TTGTGTAGCAAGCGCGCTCTAGCGAACCAAACAAAATGTCTCCATTGAAG
-CGTTTCACGAGGTTCTGGCCTACCTCATTGAATTTTTCGCGCTCCATTGA
-CAATCGCCCGCCGATAACGCGTGGGAAAGTCGTGTACTCCACACGGACAA
-ATACATTTAGTTTTACTACAAATATCGAGCCGCGACGCGACACGCAACGC
-GCCGTAAATCTACCCCAGATATGGCCGAGCCAAAATGGCCTAGTTCGGCA
-AAAACTCTTCCATTTCAATTCATGAGGGAAGCCAGAAATCCGTGATCCAA
-GTAAAAAAAATCCCAAAAATTTCAATTTGCAAGGGCGCTCCATTGAAAAC
-TGTGGCGCCGATCGCAACTCACGGTCGAATTTGAATTTTTAGTTGAAAAA
-AAAACACCAATTTGAACTGAAAATTTGAATTTTCAATTTTTTCCCTAAAA
-TAAATTGTTCAGAGTTTCGCTGTCGAATTGTTGATACCCGCTCGTCAGAA
-TTGGAAATTGAGAAATTGAGAGAGAATTAGAGAAGGAGAGGAAGAGGAAC
-TGCTCACTGGTCCCCTCACTCCATCCGAAATTAGGCACTTTTTGCTCCGG
-CGGCACTAGAAGACGAAGAAAAAACGACGAGCAGAACACAATCAATTTCG
-TCTTCTTTTTTATTTTTTTTTGGTTTTTTCTTGTTGGTACCACGGATTTC
-TGGCTTCCCTCATAAATTGAAATGGAAGAGTTTTTGCCGAAATAGGCCAT
-TTTGGCTCGGCCATATCTGGGGTAGACTAACGGCGCGTTGCGTGTCGCGT
-CGCGGCTCGATTTTAGTTGTAAAACTAAATGTGATTTGTCCGTGTGGAGT
-ACACGACTTTCCCACGCGTTGTCCGGCGGCCGATTGTCAAAGGAGCGCGA
-AAAATTAAATGAGGAAGGCCAGAACCCCGTGGTAAAACATGGTGCATCAA
-CGCAAAAATTTTTCATTTTTTGGAAAAACTCAATTGTTTTTTTTTCGCGT
-CGGGACCACCAAACCAGAGCTCGTTTACTAAATTGAATTTCCAAAAAAAA
-AAAAATTTCGCTCTGTTCAAAATTCGAAATTCAGTTTTCTTTCCCTAAAA
-CCTAATAAAATGATCTTGGCACAATGCTCACTGTGAGCTTTGGGTCTAGA
-ACGATGGCCTAGAAATGTTGAGATTTCCTCTTCCAGCGCCCTTGCCAATA
-TGACCTAGAAATTTCAAATTAGTATAACTCGGCCATTTTCCATCCGTTTT
-CGCCAAAACTACACCATTATAACATTTAAAACTTACTTTTCAATATGATG
-ATAATACTTTTCCAGTGGAAGAGTTTTCCGCATTTCTAAGCCACCAAAAC
-CTCTCCTCCCGACGTTTTATCAAACAAATGATATCACTGTGATTTGTGTT
-GTAAGTTGCGCGCATGATTGCACTTGCGCAATTAATTAAGACAATTACTC
-AAAATTTTGATCGAATTAACCCCATGTACATATAAAATACAAGATTTTTG
-TGTATTGTTCTTCAAAGTTTTTTGTCGTATTTATATAGAAGCAGTGTACA
-CCTAAATTTGGCTTATTACGACCTTTTTTTCCAAGGAAAATACTCATTTT
-TAGGGTTATAAACCCCTTGATTGATACGTGGCCTAGAAAACTGCAAGCGC
-TTTTTCCTGGAAGTTTTAGGCCACCAGTTAGAGTCTTGCAAAGACGGACT
-AGTTCTCACATGACCCAGAAAGTCTTAGTCCATCACGTATTTCTTACGAC
-GCCTAGAAATGCAAATCTTCGGCCACCAATTTTCATAGACATTCTAGGCC
-ACCCTTTTTGACGTGGCCTAGAATCTTTAACAAAATTTGTAATGAAAATC
-CTAGGCCACCATTCAGTTAGCTCTCATTTTTGATACTTCGCCTAGATTTT
-TAACACGTGGCCTAGATTTCTATTTTAACACGGGGCTTAGATTTTTATTT
-TAACAAGTGGCCTAGGTTTTTGCTACTAGGCCTAGATTTTTTACATGTGA
-CCTAGATTTTTATTATAGCACCTGACCTAGATTGTTGGCATTTGGCCTAG
-ATTTCTGTCATGTGACCTAGATTTTTTAATGCACCAAAAATTCTCCATAC
-AAATTTAACTCCTACACTCTAATTTGTAATCAGAACCTTCGATAAGAAGA
-ACATGGAGCTACTGCGGTGCTCAAATTCCGAACAAAAAACGGCTGAAAAA
-CTGAGGTATACGTGGTTTTTTTTCGAAACTGATAAAAGTCAGCATAAATC
-ACGATAAACTGAACGTCCTTTGGCCAAGTTTAGAGAAACCTAGGCCACGG
-GTAGTGGTGGCCGAATTTTAAAAAAACTGGGCCACGAGGTTTACGTGGTG
-TCAAATTGCCCCATTTTGGTTTGATCTTCGAAAAATGCGGGAGACGAGAC
-GCAGACTTTTCAACTGATTTCGCATGGTTAAGAACGTGCTGATGTCATTT
-TTTTCCGTGGAAAAATTCCCGCATTTTTTGTATATCAAACCACAACGAGA
-CACTCTAACACCACCGTCCGGCCGTTCAAACGAAAATTTAGGCCACGGCC
-ACTAGGGTGAAGTGGAATGCCCTACCCTTCTCTACAAAATTCATTGGAGA
-AACCTAGGCCATGCTCAAAGAAACAGTGGCCGAGAAAGGAAAAACTAGGC
-CGCGTTCGCTTTGTACCTCTCTTATAAAACACTGTCTGTTAGTTCATAAA
-TCAGAGTCTGCCCCCTATCACTACTCTCTCATTTACCTGCCCCTCTTAAC
-AAACAATCAACCCCCCCCCCCCCTCTAAATCGACTACTTGTTCCCCGTTG
-TACCTGTCTGCGTCTAGCTATTTCTGTTAAATTTTTGGAACGAAAAAGTG
-GTATGTGAATGTACGAAACAAAAATAATAATCAATTGAATACAATTTTTG
-CCCCCCCCCCCCCCCCCCCTCCACCCCGCTTGCCTGTCTCTAACCGGTTT
-CCCCTTTTTCACCTCAATCAGCCCCCCCCCCCCCCCCCCCCCCCCAATTT
-CATTTGACTGTACATTTTCCTTTACCTATCTGCGTATCTACACAATTTTT
-GTATTTTTTCCTTTTATTTTTCTAATTATAAACCCTGCAATTTGCAAGAA
-AAAATCTCTAAAACGCTTGGCCCCTTACCCGGAGTGCGACCGTGGCCTAG
-AAATTTATATTTCTTATAAGACCCCCCGGCTCTTCCAATTTTTCATTTTT
-TTTCTTTGAAAGCCTAAATTTTCATTTTTTCTTAGAGATCAATATATTAT
-GGGTTAGTAAAAAATTTCAAAAACAAGCTCCCCGTGGGCGTGGAAGAGTT
-TTCCAAATTTCTAGGCCATACTTTTCGAAGGCGTTGGGGTACGCTCGCAC
-CCTAGTACTAAAAATTGTAAATTATAAAATTATCATAAAATTGGCTCAAA
-GCATTTGAAAATAATAAAAAAAATTTTAGAAAAAAAAACACGAAAAAAAC
-CCCTATTTTGAACATGGTTCATCGACCGGGACCTATATACTTTGAAAGCT
-TATATCTCGCTTCATGTTTGTTTTATCAAAAATTTTTCAACCAACAAAGT
-GTTTATTATTTCTTTTTCTATATTTTTGTAATTAAAAACTTTTTGATAGC
-TTCAAAAGTAACTGAGATACATGTTGTCAAACAGAGCAAACTTATAGCTT
-AGCCCAATTATTTATTTTTTGCTGTGTAACATTTCTTGTATAAACTTTTA
-AAGTTTACGGTTTTTTTAAATTTCTAAAAAAAATTATTGACACTTTAAAG
-GGAGGTCATGTGGAGATAGCCTGTACAAATAAAACTGATGAACTAGGACG
-AACCGAAATTCATAAACCATTATTTACACAGGTGATTCTTGCCTTTTTTG
-GAGGGTTAAAAAGGTTAAAAATTATTTAAAGCTTGGAATGAGCATTTGTG
-CGGCCGAGTTTTTATTTTCTAGGCCATAATTTTTAAAACAATGGCCTAGA
-AGCACAAATTTCTAAGTAATTTGAATTTCCCGCCAAAAATTTTTTTTTCC
-ATAAAATTTAAATTTCCCGTCGAAAATTTTTTTCGGAAAATTTGTATTTC
-CCGCCAAAAGATTTTTTGTCTCAAAAAATTTGAATTTCCCGCCAAAATGT
-TTTCTCAGAAAATTTAAATTTCCCGCCAAAATATTTTTTGTCTCAAAAAA
-TTTGAATTTCCCACCAAAAATTTTATCCCAAATTTTATCGAACATTTGGT
-GGCCGAATTTCCATTTTCTAGGCCACCCTCAGTTAAATCGTCAAATAAGT
-TGACCTAATTAAATTAAAAATTAACAATTTGTAATGTCTCCGACCAAAGT
-TTCATAATTGTATAGATCATCATGGTGGGAGGCGGGGTAGCACTTATGAG
-TGAACTTACCGGTTGACCGCCCGTCTATACATAGTAGCCAACACCCGACC
-ATTTTCTGCCAAATACCTATAATATCGCTTCGAGACCCAACTATTGCACA
-GTTGTGGTTTATTTCGGTTGAAGACCCAATATTAATTTACCTACAGCTGC
-TAAAGCGTTTTAAGACCTAAAAAATTAAGCAAGGCCCAAAAATCCAAACT
-TAATACTATAGTACTTCTCGTTTCGAGACCCAAAATCCAAAGCTAGGCCA
-TATTCTTGGTGAGACCCACCTGTAATAAATATCACTTGAGTGAAAGTGAA
-CTCTTACTTTTTTCTTTCGACAGCCAAAAAAAATTGAGTCAATTAGCAAA
-TAATTCACGTCTCCCCCTTTCAATGTTTACATACACATTACGAACGAGAA
-AAAAAAACGAGAGAAAAATTGAGTGAAATGGAATCAAAATGTGTTCATTT
-TTACTTTTTATGAAAATTTGGATAAGCACATGGCGTCAGAGTGTCCCATT
-TCGGCTTGATCTACGTAGATCTACAAAAAATGCGGGTGAAGAGACGCAGA
-GTTTTCAACTGATTTCGCTTTTTTTTGGGCGAAAATTTCCGCATTTCTTG
-TAGATCAAACCGCAACAGTGGATAAGCGCGCTCTATCGACAAACCCGGTG
-TGTACTACTCGCGGACAACCAGTATAGTTTTTTTTTTGAATTTTTGTTCG
-AAATTGAAATTGAAATAAGATGCCAAATTTAAATTTAAAAAATAACAATT
-TTTGAAATTAAATTTTTAAAAAAATTCCCCGTAAATCTACACTTAGTCGC
-GTAAATCGACAAGGCTATTTTTTTCAATTTTTGCCCATCGCACTTTTTTT
-GCCCAATCAATCATCGTCAATTGATCCATTGATCTTCTTCTTCTTCTCTT
-TCTCTTTTCTCACCACCGAAAATTTCATTTTATTTTTTGACACTGTCTGC
-GTCTCTCTGTACCCCCTATCTCTCGCCTCTCAAGGACTATTACAACGAAA
-AATTTGGGGAGAAGCCGTGATTTTCATTTTAATTTTGATGAAAAATTTTA
-ATGAAAATGAAAAAAAAAATTGTTTTTCAAAAAACAATCCCCTCGTAAAT
-CCACACCAAATTCAATATTCACCTTATTACAAATTGATTATTTTTCCCAA
-AAAACACACGACATCGGGCGCCCATCTATTGTTTTTTATTCCAAAAAATT
-TCTGCAACTGTCTGGGTCTCCGGTTAACACTGAGAAACAACAAATTTCAT
-TTTTCGATTCATTACATTCATTTTGAAGGTTTTTGGTTACAAATTCGACA
-CGGATTTCTGGCTTCCCTCATAAATTGAAATGGAAGAGTTTGCTGAACTA
-GGCCAACTTGGCTCGGCCATATTTGGCATAGATTTACGGCGCGTTGCGTG
-CCGCGTCGCGCCTCGATTTTAGTTGTAAAACTAAATGTGAAGTGTCCGTG
-TGGAGTACACGACTTTCCCACGCGTTGCCCGGTGAGAGATTATCAATGGA
-GCGCGAAAAATTCAATGAGGTAGGTCAGAACCCCTTGAAAATTGAGAAAA
-AAAAATCTCACAACGATACTCCGCAAAGTGTGCGTGTTGTTTATTAAATG
-ATAAATTCAAAAGCAAATAGCGATTTTGTTTCAAAAATATGCCGAAAAAA
-AAGAAAAAAAATTAAAACAAAAGTTCAGCCACCAATTTTATTTCTCGGCC
-ATGGTTGTGTCGTTGTTTATTTTTTTGCGATCGTATTTTTTCTATAATAA
-GACTTAAAATGAAAAAACATTAATAAAAATCAGTTTTCCATGGCCACTGT
-CAAAAGTCGCAACGACACTCCCCTTCCAGGCTCCTCCCCCCCGCGTGTAT
-TTTAGCATGTAGTGTAAATTACGCGATTTTGTGTATAAAACCCTAATTTT
-TTAGAAGATTTGAGAAAAAAAACTTTTAAAAAATGGGAAAAAATCCCCTT
-TCCCTTTTTTGAAATACTTTCCGACAAAGTTTAGCCAAAAGTCCAAAAAA
-AACCAATATGGCCTAGAAAAAATCAAAAACTCGGCCATCCAAAAAACTAG
-GCTACACGTTCTTTCGACCTCTGCTCCCCACACCTATGCTGCCCATATCA
-AATGTCTCCCGGACCCCTCATTCCGTCACACATTTCTCAAAAAAATGTCT
-CTTTTTCTCAAATTCTCTGTCGAAAATCCCATATCTCTTCAGTGTTCAGA
-ACTGACTGTTTTATTTCAATTCTCATGATCTCATGTCTCCCGTATGACTC
-ATTCCTTCGATATATTTTTCTTTTTTCAAAAATCATTTTTCCTATATATA
-GACTTTGTTCGGTGGGAATTTCTCATTTCAAAATATTTATTGAGGTCGCT
-TGTTCCCTTTTTATATGGTCGTGGCCTAGGTTTCTAAAACTCGGCTACCA
-TTTCCAAGTTGTAGCTTCGAGCTCTTTGTCTCGGAGTAGAAAAAATTCAC
-GAAATAAATAAAAGTTCACGTGGCCGTGGCCTAGATTTCCAAAACTCGGC
-CACCAATTTTTTTTCTCTTATCAGTAAACCACGTAGAACTCCTTTTTTTC
-TAGCCATTTTTTAACTGAATTTCCAACATATTCGGTGGCTCCATCAATTT
-TACTGATAGTAATTTCCAATAAAAAAAGGTATTTCTGTCGATAGGAACCC
-ATTTTCATCTACTTTTTGTTTCTACTTTATGGGTTTTGCCACTTTCCCGC
-ATGCCTACGTGCCTACCTATCTGCCGACCTAATATACCTCGTAGGCAGAC
-CTCGGCCGCCTTGTGGTGAGATGCCAGTCGCTTTGTAGGCAGGCGTAGTT
-TGTCTTGCTGGTATGAGTAGGCCTGTCAGCCGCCCAGTAGGCAAGCGTAG
-GCATGATGCAGGCGTAGCAGGCTTCTTAACTAGGCATCGGCTGCCTTGTA
-AGCCGGCGCAGGTAAGTGAAGGTTTCTTCGTGGCTGGCATCCTTGCAGTC
-AGGCACAAGTCGTCGGCTTGAAGGCAGGCAGATGCCGCCTAGTAGGCAGG
-CATATTTTACTTATAGGCAGGTATTAATGATCCTCTAGGCTTGCGTTGGT
-CGGTTTGTAAGCTGTCGTAGGCTGCCTTGTAGGCAAATTGAACTCTCAAA
-CCAAACAACACAAAAATTCCAATATTTTTTGTACCTTCTGATTTTGATCT
-CTGACTCATGATCTCTTTATCAATCTCATATCTTCCATTTTTAGAAATAA
-ACAATTTTTCCCTTCTATTCATTGACTTTAATCCCTTTCAATATTCATTC
-AATACACCTATAATACGAAAAACTCTTATCTTTTTTCATTTTATCACACA
-TGGTGCATAATATTATAGTTAGTGGCTATTGAAAAAGCACATCATTTTAT
-CACTTTTTGTCACTTTTCCACGATTCTCAACGTCTTTTTTTTAAACACAA
-AACGTTTCCCGTCATTTTCTACAGTACTCCCGCATTTTCATTTTCCAGGT
-GAGACCTGAGATGGAGGGCGACGAGTTGGTTCATCGTCCGACGGTCCTCT
-CGACGACGGCTTCTGCCACGTCACGGCCGCGACACAAGACTTTTGAGCTG
-TTGGGTCCGGTGAATAATATCTCGTTGGCTGATATGTATAAAGTGTGCGG
-GAAGATAATTGGCAGGTTCCCGATTGCATTTATTATTGCGACGGTGATCA
-TGTGCAGTGGTGGATGTTAGTTTTTTTTGACGTAAAAAATACAGTTTGAG
-AAAATCTTTTTTTAGATCAAAAAAGAAGAAAAATATGGAAAAAACAACAT
-TAAAATATTTTTTAGAAATCAAAAAATGTAAAAACTGTATGATTTTACTT
-AGGGCCTCCATGGTAGACAGGCACGGTTTTAGGGCCTGACGCCTGCCTGA
-AACCCACGTGGAGTCAGAAAGTCCCATTTCGCTTTGATCTTCAAAAAATG
-CGGGAGAAGAGACGCAGATATCTCATCTATTTCGCATGGTTAAGAGCGTG
-CTGACGTCACAATTTTTCTGGAAAAATAATCCCGCATTTTTCGTAGATCA
-AACCGCAATGAGACAGCCTGACACTATTAAGCCGCAAAGGCAAAAGTGTT
-TGCCGTCTGAATTTTGAAACAAAAGGTTTAACCGGTGAAAATTGAAAAAA
-AGTATAATAATAATAATAATAAAAGTAGAACTATTTTCAGTATACTAAGG
-CAAAATGATTGTTTTATAAAAAAACTTAATTTTAAAATTAGATCTCCTAA
-ATGTTTCAAGCAGCACAACTTTCATGTGATGTCAGGCTGTCTCATTACAG
-TTTGATCTACAGAAAACGCGGGAATTTTTCTCCCAGGAAAATGTGACGTC
-AGCACACAATGCATAATCAGATGAGATTTCAGCGCCTCAACTCCCGCATT
-TTTTGTAGATCAAACTAAAACAAGACTCTCTGACACCACGTGAATTTTCC
-AACCATCAAACTATCACAAAAAAATTGGCGCCAAAAAAACTTCTTTAAAA
-ACTTCTCATTTCCAGTAGGAACAATCGGTCTCGAACTGAAGGATAATGTG
-CGCGACGGGTACACGCCGAAAAACTCGCTATCCCGACTGGAAAATCGCCT
-TTATCGAGAGTTCCTGAGTTCCGAAGGTGATCCGGTGATGACTACAGTTC
-TCATGACTGCCAAAGACGGAGGATCCATGCATCGGATCAAGTATTTGGAA
-GAAGCACAGAGGGTGAGTGGCATAACATATCGGATACCGTATTTCCTCTA
-TTAGTAAGGCATGCAAAACTGATTTTCGGACACCTAATTTGATGCAAAAC
-TAATAGAGGGTGCAAAACTAATTTTCGAACAGGTTTTTTCTCATTAAGTT
-ATATTATAATATCATCAATTTCAATAACAACTTCTGAACCAAAATGGGCG
-AATTTTACGACTGATACGCAAAAATTGTCCGAGTTGTACTCATATTTTGC
-CAGTTTTGACTTGTTATACCAAGTCTGTAAGAGTTTTCCTAATTTTCAGA
-ACGATTTTATAATGCAAATTTTGAATTCCTAAACATAGGGAACAAATTAA
-GGGGTGCAAAACTATTAGAGGTGCAAAACTAATAGAGAGTGGAAAACTAA
-TTTTCGATTAGTGATTTTTGATGCAAAACTAATGGAGGTGCAAAACTAAT
-AGAGGTGCCTAACTAATAGAGGAAATACGGTATATTTTTTTGAATAAAAA
-ATTTCAGCAATGGCTCTACATCTCCAAAAACCTATCCGCAGACGTTGGAA
-ACGGCGAGTTCATGAAATTCGGAGATTTCTGTGGCCACTACTGCCAAGCC
-AACGACATCATAGGATACTTCCTGGACGCCTACAAAACCAAGTCAGCTGA
-CCCAAAAATGGATGGCTACCAACTCAATTACCCAATTACCACAGTAATGG
-GTTATCAGCTTCATCTCGAGCGTAACTTTTTCGGGGTTACTGTGAATCAG
-TCGGATCCGGTCACTAATATTCAGAGTATGAAGGTTCTGACGCTTCCTGT
-GTTGTCAGAGGTACGGACGTTTGAGGATACGGATAAGCTGAACAAGTGGG
-AGCTGGCGGTTTATAACTATGCTACAGGATACTCTGCACTCGAGGGTGAC
-GATCATTTGGTGGAGATTAATGTGAGTGAATAAATTGGACCATTTCAAAA
-ATATTGGGCCAGCCCTAAAAAGACAGCGGGCCGGCCCATATCGACCCACT
-TAACAGGCTCAAAAAAGTTTAGTTCAGTTGTGTGCCGCAAATTTTGAAAT
-TTGCCGAGCTCGGCAAAATCGGCAAATTTGGTAAATCGCATAATTTTCGA
-GCTCGGCAAATTCGACAAGGCTAAATGTTTGAATTTTGCCGTTTTCGGCA
-AACGGCAAATTTGGCAAATTTGCCTTACACCCCTGGTTTAGGGGTTTCGT
-GTTTAATTTTCAAAGCTTAGATAAACCTCTTTTCCAGGTGATCGGTGCTG
-AAGTCGTCGACACCGAAATGAACAAGGACGCTCAGAAAATGGTGCCCTAC
-TTCATCGTCGGAATCGTCTCGATGATCATCTTTATCTTCTGCACCGTATC
-CATCTCTGCCTCCTACTACGGATACTTCTCCTGGCGAATCGGACTCATCG
-CCCTCGCCTGCCTCTTGGTTCCGATTCTCGCAATTCTCACTGCATTCGGA
-ATCAATAATATGCTGGGAAATCGAACGAACTCTCCGATGATGATCATGCC
-GTTCTTGATCAATGGAATCGGAGTCAACGATGCGTTTTTGACACTTCAGA
-ATTGGTTGCAGCATAGCCCGGATCTTCCGTCAGGGAAGCGGTTGGGGTAT
-ATGTTGGCTGAAGCTGGTCCATCGATCACTACGACCACTTTGACAAATGT
-CATTGTTTTTTTGATCGGGTGGATGAACCCAACGGAAGGTAAGGTTCAGT
-GGTGGACGGCAAACTACTTTTTCCGGCAAATCGGTAAATCGGTAAATTGC
-CGGAATTGAAATTTCTGGCAAATCGGAAAACCGGCAATTTGTCGATTTGC
-CGAATTTGCCGGAAAAAAAATTGCCGAACGGCAACTGCGCCCTGGTAAGG
-TGCATAGCTTTGGCCTCTAACATAAAAAAATTTGTCTATTCATCCTTTAT
-TCCAAAACGACATGTATTCCAGAGATGTCAATCTTCTGCCTTGGATGTGC
-AATCTCCCTACTCCTCGCCTACGTCTACACCCTCACGTTCTTCTGTCCGG
-TGCTAGTTCTTCTGCTTAGCGAACGCGTCAATGAGCCCAGCAAGCTCGAG
-GGCACTTTCAACAAGGTTCTCGGATTCTACGCAAAAATCATATGCAGCCG
-ATGGACATTTGCACTTCTCATCATCGGAAGTCTTGTCTACTGGGGTTTCG
-GTATCTATGGAACACTGGGGATCCGTGCCGTGTTGAACACTGCAAAGATC
-CTTCCCCTGGAGACGCCGATCCGCAAACCGAACAGGATTATCGAGGAGAC
-CGTGTGGAAAGAGTTCTACCCAGTCACCGTGATTGTGAACAGCCCAGTTG
-ATATAAGCAATGCAAATGCACTTCGAGCATTTGACAACCTCGTTCACGAC
-TTTGAATCGATGGAAAAGTGCCGGGGATCCGAGTACACCATATCTCCAAT
-CAGAGACTATCAGACCTATTTTTACGGTGTAGGAGCCGAGGACTTTGATT
-ATGAGGAAGAAACCGTGAAGAACACCTCACATTCTTTAGATTTCAGTGTA
-AGTTAGCAGTCCACGCGTTCCTATTAAAATCTACATATATGCCTATAACG
-TGTTTATCCACAGAAGAGAAAAATCGCCATATCTGCCGCGCAAATGAATC
-CGCGGGAAGAGACAAAACTACTGTAGTTTTTAACCAATTTGTGTAGATTT
-ACGAGCTATTGCGTCATCGTTGTATTTAATTTTGAGCCGCAATTTTTAAT
-TTTCAGGCGTTTCACACGTTTTTATATTGAAATTTATCTATTTATTGAAT
-AAATCTTAAAAGAAAACACAAAAAAATTAGAAAAATTCCGAAAAACGCCT
-GAAAATTAAAAATTGCGGCTCAAAATTAAATTCAACGATGACGCAACAGC
-TCGTAAATCTACACAAATTGGTTAAAAACTACAGTAGTTTTGTCTCTTCC
-CGCGGTTTCATTTGCGCGGCAGATATGGCGATTTTTCTCATCTCTGGATA
-AACACGTAATACCTACATATTTTGTGTGCCTAAAAACATGCCTAGCAGTG
-AAAGTAGACAAATGTAAGCACACAAACGTGAGTAGGGCTTAAATGGTATG
-CAGGCACTGTTTTAGGGCCTGACGCCTGTCCAGGCCTGTCTTGTACGTTT
-CATCAATTCAAGCCGTATATTTCCAGAAGCTCACCGGATTCCTTGCCAAC
-CCTATCTACAAGCATCACAAGGGAGGACTAAAACTTAACTTTTCAAATCC
-GTTAGTTCCTATCTGCCACCTTACCCTAAATCGAGTACCATTTTCAGTGT
-TCCAATCCGAAAAGTGCAACTGATATTCGCTTATGAAAACGTAACCTCGT
-GGGATGAACGGATTCAGATTATGCAGGACTGGCGGACCATCGCAAGTTCC
-CACGTGGCCCTAAATGTTTCAGTGTGGAATGTGAACGCAATGTTCGTAGA
-TCAAATGCTGAGCCTGAAGGGATTGGCGATCTCGGTAAGATCTCAATGGT
-TCCAGCGCCCTATAAATACCGCTTATTCTTTCAGAATGCCCTAGTCACCT
-TGGGATGTATGGCTGCCGTCTGTGTAGTCTTCATCCGCAACCCCCTCTCA
-GTTGGCCTAGCGACCGCTTCGATTTTATCCATCTCCATTGGAGTAACTGG
-ATACCTGTGCTTCTGGGACTTGGATCTGGACCCTGTGACCCTGTGCGCAG
-TAATTGTTTCAATTGGAATGTCCGTTGACTTTGTTGCCCATGTGGCCTGT
-CACTATCAGGTCAGGTATAAAGAGTTCGAGGAGAAAGGAGTATTGAAGAG
-GATTGAGATGAAAACTCCCGAATCTCGAGTCGTCAACTCGCTGTCCAATG
-TGCTCTGGCCAATGGTCCAGTCGGCTTCTTCAACTCTTCTATGTGTACTT
-CCACTTGGTATTCTACAGGTACCTACCAATACCTATACTTTACCGATAAC
-CCTACCCCTCAAACATTCCAGAACTACCTCCCAATGGTTTTCGTGAAAAC
-CATCCTGCTCGTCGTGATCTGGGGAATGTTCCACGGTCTTGTGCTGCTCC
-CGTGCATTCTTGCACAGTTTCCCCTGTCTGTGTTCAACAAGACGTTCGCC
-GACTTGTTGTTCGGCAGAACATCCTCTTCGTCTTGCTCTTCGGAGTCCGA
-TTCGGAAACCGACACCGGTGATGCTCAGGAGATGGTTCCGCTCGCTGGAA
-CCGAGAAGGCTTAAGATCTGAAATTAGTTGTTGTTTGTTATTATGTACAG
-TTGGGATACAAAGTGTATTATGTAGTCTGTAGTGTCGCAGTGCTACAAAC
-TACAAATTCAAAGCTACAAACTATAAACTCATTGAGATCTGGCAGAGCTT
-TATAGTTTGTAGTTTTATGTAGCAGCTACAAACTACAAATTTCGATTGTT
-GTAGTTTGTAGTATGGCGCACAAACTACAATGTACATTTTGCAAGTTTTC
-TAGATTTTTTTCTCACTCACACACACACACACACACCGTTTTGCTACGTG
-GCTGCGAAAATGGAAAACTCGGCCACGTCGCAATTCACACATCGCCAGAA
-ACTTCTAGCTTTACCAGTAGCTTTTCATGATCTACTCTTCTTTTTTTTCC
-CCCCTCAATTTCTATTTGAAATTTCAGAATTCCCTCAATTAGTCTTCTGT
-CACCGTGTCCTCCTCTTTTCCGCAAGCGGGTCCCCTTTTCCCCCCACAGA
-TCGGCTTCTCAGGGTTCCTATAGCACTTTTTTCTTCGATTCTTGTCACAC
-AAAAAATTGTACTTCCATCGCTCGACGTGTCCATTTTTTCTTGTATTTTT
-TAAATGCATTTTTTGATAAATTTGATTTTTTTTATCATCCAGAAAATGGT
-CAAAAATTCAGATTTTCTTGCTGGGATTTTGCTGGAATTTTTTCAAGCAT
-CAGACATGCAAAAACTTATGCAAAACTACACAACACTATCGATGGGGACT
-GTTCGACTCTTCACCCCAGTCAAACTTTTTTTCACTATTTTTTTTAACTT
-CTGTTTTTTTGGTACTTTTCTGGCCGTTTTTATGGAATTTTTTAACCCGA
-CATTGGAGTTTACCTTTTTTTGTTCAGGATTTTAGGAATTTCTGCGACCT
-TCTCACTCATGTCCTCCAGCCCCGCCTAAGCCTATGCCTTAACTCAAGCC
-TAAGCCTAAGCCTAAGCCTAACCTAAATCGCGTCAGAGATAACGTTCGCC
-ACTGACGCCAAGCCTCAACCTAAGCCTAAGCCTAAGCCTAACACTAAGCC
-TAAGTATAAGCCTAAATCTAGGCCTCAGCCTAATACTAAGCCTAAGCCTA
-AGCCTAAACCCAAGCCATAAGAAGACACTCTAAAAATGTTCAGATTATTA
-AAAAATTACATTCAAAGTTTTCTTCAAAATTTTGCTTTCGACTTTCCAAG
-TAATCAATACCATGTAGAATTCCAAAATCTTCATACAAATCCCTCCCCTC
-TTCACATCTTTCCCGACAGCTTGTACTATTTCTCCTCCACCCACTAGGCC
-AGGTCAACGCTGCGTCTCTCGTGTTTCATATGCTATCTCCCTTTTGTGGA
-ATCCGTTCATCGTTTCGGATCGCTTACTTCTTCCGCGCGCGTCGCATTTC
-ACTTTGAAATAAACTTCAGTTTTCCTTTCCAAAATTTAATTGGTGGAAGC
-GTTTGAACATGCGAAATTTGTTAATTATCGTGTGTATTCATTTAATATTA
-CTACTTGTACATTTTACCGATGCATGTAAGTTTTGGATGTATCAAAAAAT
-TAAATAAATTTCTTAAAGGTGGAGTAGCGCTAGTGGGGAAATTGCTTTAA
-AACATGCCTATAGTACCACAATGACCGAATATCATGATAAAAAAATTCAA
-AAAATTTTTTAAAATTTTATATGATTTTTTGAAAATTGGAAAAATCTCAG
-TTTTTGCCTAATTCCAATTTGAATTACCGCTAATTGGATTTGTTCGATGG
-AGCGCGCTTGCACGTTTTTAAATTTATTTATTTTATTTTTTGTTATTTTC
-CACCGATTTTTAATGTTTTCGGTGTATTTTTGCTCTAATTTTAGAGAAAA
-AGTCAAGATGAATGCAGATTTTCGATTAAAAAGCACGCTCACAGGCGTAA
-AAATGACAAAGTAACGATTTTAAACGGTTTCGAACCTGAATTAATTAATT
-TCACTGATTTACGACTGTAAGCGTGCTTTTTAATCGAAAATTTGCATTCA
-TCTTGACTTTTTCTCTAAAATTCGAGCAAAAATACACCGAAAACATTAAA
-AATTGGTGGAAAATAACAAAAAATAAAATAAATAAATTTAAAAACGTGCA
-AGCGCGCTCCATCGAACAAATCCAATTAGCGGTAATTCAAATTGGAATTA
-GGCAAAAACTGAGATTTTTCCATTTTTCAAAAAATCATATAAAATTTAGA
-ATTTTTTAAAGAATTTTTTTATCATGATATTCGGTCATTGTGGTACTATA
-GGCATGTTTTAAAGCAATTTCCCCACTGGCGCTACTCCTCCTTTAAAGTT
-TGAAGTTTTAGTAAAAAAAGAGTGTCGGTTTTTTAGTTAATAATATTAAT
-TTCCAGTCGCCGGAACAGTTCGACCATTTTTCACCACTCTTCCAGTACCT
-GGAAGAAATGTTCCTATTATGAGATTATTCGAGAACTATGCTGCATCGTG
-CCGACCAAAAAGTAAAAAGGACTTCAATGTTGATCAGCTGGCAAATGTAG
-GTTTTTTCCCGCAAAAAGTCGTATTTCGTGCAAAACCGGCAAAAGCAAAA
-ATTTTGAATACCGGCAATTGTCGGAGTTGCCGATTGCCGGAAATCAAAAT
-TGCGGGAAATAAAATTTTGATACTTTTTTGTAGATTTAGGAGCCTAAAAA
-TGCATTTTAATGAACAATTTTTAATTTTCAAGCTCAAAATGATTTAATCC
-TTTAAGGATTGACCGTTTTCTTTAAAAAAGACTAACCGAATACTATAAAA
-AAAGGTGAAATTTTTTCAATTTCCAAAATATAATTAATTTTGGCAACTGC
-CGATTGCCGGAAATTGCCGATTGCCGGAACTTCACAATACCGGCAATTGC
-CGAAATTGCCGATTGCCGGAAATTTCCAAAACCGGTAATTGCCGGAATTG
-CCGATCGCCGGAAATTCCCGATTGCCGCGCACCCTTGTATTAAAGGATAC
-GGCAAACGATTTTTTCCGGCAAGCGGCAATATCGGCAATTGCCGAAATAA
-AATATTTTCGGCAAACGGCAAACGGCAGTCAGCAACATGCCACTTCTCCA
-ATTTTCGGCAATTTCGGCAAACGGTCAATTTGCCAGAAATCATCGGAAAA
-TTGTGATCTTGCACATTTTTTCTGGAAATTTCAGAATTTCAATTTTAAAC
-AACAACATTGTACACATCCTATGAATGACACATATCTTAAAAAGCCAGTA
-AATTCTATAAAAAATATCTAGAGAAACTGGCAAAATAATTAAAAAAGGCA
-CGGATTCATGTGATTTTGATTATTGAAAATATCTTTGAAAACTTTCGGAA
-AATTGATATCCGGCAAATCGGCAAATCGGCAACTTGCCGATTTCCCGAAT
-TTGCCGAGCAATGAACTACACTGTTCCAAATCGAATTCGTAACCGATATT
-ATACTTAGGAATGATATTTGTAACTCGTATAAATATTAAATAATATATAT
-ATATTCCAGCTTCTCCAATCTCTCCAAATGGATGAAGTAGCCACAAAAGC
-CTACAACTCCCTATTCTTCTCAATGGCTGATATGCAAATCGAAAAGTTCA
-TGGGTAAATGGTACACAGTTGTTGATTCGAAAGAAGTTCATAAAGAGGAT
-TGTTCAATTTTCTATTGTAAGTTTATTTTCATTCTGAAAATGAGATGCAA
-ATTTTCAGTCGATATGGTACTTCAAACTCCATACACCGCAACATTCACCT
-CAAAGCAGTACGGAGTGATTAATAATGATGTCGTCACCAATGAGGGGTAC
-GGTAGTATGGTTGGTCCAGAGCCCGGAGCCGTTCTTATTACAACTGGTAG
-TGAAAGGGATCAGTGTCCATGTAAGTATTTTAAATAACTTTGGTCCGGTG
-ATATTAAGATACAAGTTTAAATACTTCCCGTTTCAAAAACTTCGAATTTC
-CCGCCAAAACTTTTCTCTGAAAATTTTAATTTCTTTCCAAATTTTTTTCT
-TTGAAAATTTGAACTTCCCGCCAAAATTTTGTAGTCAAAAAATTTGAATT
-TCTCTCCAAGAATGTTTTCTCAGAAAATTTGAATTTCCCGCCAAATTGTT
-AATGTCAGAAATTTTGAATTTCTCGCCAAAATTTATTTTCTGAAAATTTG
-GATTTCCCGCCAAAATTTTTTTCTCAATAAATTTAAATTTCCCGCCAAAA
-TTTTTCTCTGAAAATTTTAATTTCTTTCCAAATTTTTTTCTTTGAAAATT
-TGAATTTCCCGCTAAAATTTTATTGTCAAAAAATTTGAATTTCTCTCCAA
-GACTGTTTTCTCAGAAAATTTGAATTTCCCGCCAAATTGTTAATGTCAGA
-AAATTTTAATTTCTCGCCAAAATTTATTTTCTGAAAATTTGGATTTCCCG
-CCAAAATTTTTTTCTCAATAAATTTAAATTTCCCGCCAAAATTTTGTTAT
-CAAAAAATTTGGATTTCTCGCCAAAATTTTATTGTCAGAAAACTTGAATT
-TCTCGCCAAAGTTTTTTCTCAAAAAATTTGAATTTCCTGTCAAAACTTTG
-TAATCAAAAAATTTGAATTTCCCGCCAATTTTTTTTCTCCGAAAATTTAA
-ATTTCCCGCCAAAACTTTGTTATCAAAAATTTGAATTTCTCGCCGAAATT
-TTATTGTCAGAAAATTTGAATTTCCCGAAATCTCTATGAATAAAACATTT
-GCAGTTTTCCCTGTACGAATCGGTGGCTTGAGTGACGAAGGAGAATATCA
-ATACATGATCTTAAGTACACCACTGAAGTATCCAACGATGGTCTTGACAA
-GGTAAGTTTGCCTTAAAATTTGTTTTCTAATTATTCCAATCTAATATTCA
-TGTGATGTTGAAAAATGCAAACATGTATTTTAATACATTTTCCCCCTATT
-GATGCGTACCGAAAAATGTAGAAAAATGGAATCATTTTTTTGCATTTTTC
-GACATTTTCGACATTTTTGACATTTTCCGACATTTTTCGACGTTATTCGA
-CATTTTCACGCATTTTTCAGAGTTTGCCGAACTAGGCCATTTTGGCTCGG
-CCATATCTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTTGA
-TTTTAGTTGTAAAACTAAATGTATTTGTCCGTGTGGAGTACACGACTTTC
-CCAGGCAATTGTCAATGGAGCGCGAAAAATTCAATGAGGAAGGACAGAAC
-CCCGTGTCCACAGGAAGAATTTTCTCTGCGTCTCTTGTCTTTAGCATTTA
-AAGTGGGGCGACGCCGATGTAGAAAAATGCTGAAAAATTTCGAAAAATGT
-CGAAAAATGCACAAAATGATGGCATTTTTCTACATTTTTCTGCATTTTTC
-GGCACGCAAAAAACATCACATGAATAACCCCATAAAAACTCCAATTTTTC
-CAGAGACCTAACCCTATTCGAAACGAAATGGAAGCGAGAAGTGTATGATT
-TTGTTGAGAAGAATGGTTTCATGAGTCCAATGGCAGCATTGAACACTCGT
-CTCCATTTCACAGATGTCGATGTTTGCAGAAAAGTGAATAAGTTATATGA
-GAATGGAAATGTTTGAGTTGAAGATTATCTTTTTTCTGATGATACGGCAG
-AGTTTTTGACGGGTTGTGCAGTGTTTATTTTTAACCTTCATGTGTATTTA
-AAAATAAAGATTAATTTAATTGAATCTGTGTTTAATATGAACTTTTAAAA
-CACAAAATTTCAGATTTTGGTTTAAAAACTGTAGACACTTGATACTTTGT
-TGAGTGTACCTAATTTGAATTTCGCGAAAAAATGACTGTCATATGATTCT
-TGACCGTGTACACCTCTCGGGCAATACATTAATATTTTAATATTATGGAT
-TATAAGCATTTTCAGTAGACTTTCCATATTTTCTCATGATTATTACTCAT
-TTTTATGACGAAAAGCATTGTTTGGAACTCAAAATTATCAACTTTAAATG
-TTAAAAAATATTCAGGAAAACATAATATTTGCCTATTAAAAAATTTCCCA
-TTAATTTTCCACAAAAAAGTTTCTTTTTTCTTTTTTTAATTTTTTCTCAG
-AAAAATCAAATCTCCCAACAAAGTTTTTCTCAGAAATTTTGAATCCACCG
-CCAAAAATTTTTCTCAAAAAATTTGAATTTCCCACCAAAAAAATTTTTCT
-CACAACTTGAAAATTTGAATTTCCCACCAAAAATGTTGTCTCAAAAATAG
-TAAGTTTCCCGCCAAAACTTTTTTTAAAAGAAAATTTGAATTTACCGCCA
-AAAATTACTTACCAGAAAATTTCAATTTCCCGCCAAAAATGTTTTCTCAG
-AAATTTTTAATTTTTGGTCAAAATTAAAATACTACTACGGTACCTTAATC
-CTACACCTCCACCCAAAAAATCATTTTTCAAAAACTACTACAGTACTACT
-CCTACAGTACTCCTACCGTACTCCTAAAGTACTCCTACCGTACTCCTACA
-GTACTCCGACCGTACTCCTACAGTATCACTACAGTACTCAAACCATATCC
-ACCACTAACACCAATCCAATATCCCTTCAAACGACAATAACTTTTTTATT
-CAAAAATACAGTAATCTTACTGTAGACAATCTTTTAAATTATAGTCTTCA
-TCCAAAACTATAACGGACTCCATCCCATAAAAAGTAAACGACAAGTCATA
-AAAATTGGAATTCGCGTAGTTTGCTCTTCCGTGAAGGCAAACACACGTGC
-TCAGCTATATTGATAAGAGATGAAAAACGAGAGGAATCAGTCGAGGTGTC
-TGATCTACTTCCAGGATGGTGACCGCTCTTCTACTCCTATTGGCTCTTGC
-AGCCACCTCTTTGGCGGCTCTTCCAGATTTGGGATATCCCGGATGGCAGT
-GCGATGCATCGCTTTATCAGAAGTAGGTGGCTTACTTTAATTACTAAAGT
-TTGAAATTTTCCTCGCTTTCAGGAGCAAAAATACCCCGACTTCTGCCCAC
-TCCGTCCGATTCACCGACATAAAAGTTTTGGGAGCTCTCGGAGACTCCTT
-GACCGCCGCCAATGGAGCCGGAGCACCAAAGGGAGACCCTCTGGCTGTGA
-TCCTTCAGTACAGAGGACTAGCCTTCCAGTGTGGAGGTGACCACTCTCTC
-GACGAGCATGTCACTGTTGCAAGTAAGCCATTTTTCTGGGGAATTGAGAA
-AACTGAGTTGTTGTAGATGTGCTGAAAAAGTTCAGCCCTAACCTAATGGG
-ATACTCCACTGGAATCGGAAGTGCCAACGTTTGGGAGGTCTCAAAACTGA
-ACCAAGCAGTTCCAGGAGCTGAAGCAATCGATATCATCACTCAGGCCAGA
-GCTCTGGTGCAAATTATCCAAAGCCACAAGGAGGTAGCCAAGTCCAAACT
-AAACATCAATTCCGATGCATTTCCAGATTGATTACAAAACTGATTGGAAG
-CTTATCAACGTATTCATTGGAGCAAACGACATGTGCGCCTATTGCAACGA
-CCGAGAAAATGTAAGATAGTCAAAGATCATTCCACACCCGTTTTATTGCA
-TTTTTATAGGGCCCACACTCAAAAGCAATCTGGAAGCAAAATGTGATCAC
-TGCCATTCAAATTTTAAAGGATAACTTACCAAGGTAGGTAAACTATAGGG
-ACATGACATTCTAAAGTAAATAACTATAATATTATGAAATTGTCACATAC
-CTATACCTACCTATAAATACCTACATGGTCCAGAGCTGTGTGGCAAATTT
-TGAAACCAGCAAATTCGGCAAATTTTCCGGGGTCGTCATACTTGGTAAAT
-CGCAACATTTTTTGGAGCTCAAAAAGTGCCAAAATTAACAGAAAATCTAA
-GTTGTTAAACATTTGTGGCAAATTCCAAATTTGTCCAAATTTTTGAAATT
-TGCCTTGCTCGGGCAAATTCGGCAAATTTGCCGTGGTTGTCGGACTCGGT
-AAAGCGCATCATTTTTTGGTGCTCAAAAAGTACCGAGTTGATGGAAAAAC
-TAAGTTGTTAAACATTTGTGGCAAATTACAAATTATGTCCAAATTTTTGA
-AATTTGCCTTGCTCGGAAACCGGCAAATTCGGGAAATTTGGCACACCCTT
-GATCCCATAGCAGTGGCGCAAAAAAATCTTTAAAATTGTGGCCGTTTCCG
-TGCCAATTATAAATTAAAGTTAAACATATTATCGAAAAAATACGATCGCA
-AATTTTTCTCGTAACTTATTTTTGATCTACCTTGTTGACTAGGCTCCTCC
-CCTTCCTTCGACAAGACAGCCACAACAAAATAACAACGGCAACAAGATTA
-TGGGCAAACACGTGGTGCCAGGCTGTCCCATTACAGTTTGATCTACAATA
-AATGCGGGAATTTTTCGCCCAAAAAAAAAGTGACGTCGGCACGTTCTTAA
-CCATACAAAATCAGTTGAGAACTCTGCGTCTCTTCTCCCGCATTTTTTGT
-AGATCAACGTAATTCAAGCCAAAATGAGACACTCTGACACCACGTGGGCA
-GAGTCAACTTCCAAAGGTAGATCAAAAATTAATTATGAAAAAAATTTGCG
-ATCGTATTTTTCGATAATAAGAGCCAACATTTTTCGGCTTTTTATGGAAA
-TTTTTTTTTCAAAAAGAGGAGTATGGTCCATAACTATGCCATCAATACCA
-AGTCCTTCCAGAACCATCGTATCCATGACCGGAATGTTCGACATGGCCAT
-GCTTCGCCAAATCGACCACGACAAGTATTTCTGCGACGGCCTCCATGTGT
-TCGAGTGCCCATGCGAGAAGAACAAGGACTTCCCGAATACCGACATCTCG
-GCTGCCTGCCATCTTTACATGGATGCTCAGCAGGAGATTCAAGACTCGGG
-AATCTTCGACTCAACAGATGACTTTACATTTGTCGTTCAACCATTCTTCA
-ATGGAATCACAGTTCCACCACTCAAGCCCGACGGAGAAGTCAATCTGGAT
-TGGTTTGCACCGGATTGCTTCCATTTCTCAAAACTAGGCCACGCCAATGT
-TGCCAAGCACTTGTGGAACAATATCGTTCAACCAGTCGGATCCAAGAACC
-ATCAAGTCAATCTGTCAGATCCTACCATTCCACTAAACTGCCCAGACACC
-AAGTGCCCATTCTTCAGAACAACTAAGAACAGTGTTGACTGCTCGAAATA
-TATGACTGCCTAGACTGTAGGAAATTGTGTTTGTGTGTGTAATTTGACGT
-ACTTATCGGGTCTGCAATAAAATGTTTTATCGTGTAATCTTTAATTTTTA
-ACGTGTGAGACATAAAAGAAAGAGCACCCTCAATAAAAATATCCACGTGG
-AGTACACAATATAGCTATCAATAGAGCGAGTAAATATTTTTGCAATAATT
-ATTTATTAGAAGAATGGAGATCAAGGTAAAGGAAGAGATCTTGATTTTGA
-AAAAAAGATACTGGAAATACTAATTGTTCACGGGATTTCATAGAAGGGGA
-TATATCACGACTTTTTCTTTGAAAAATAAAAACAACATAAAATTATTGCG
-GCTTCACAATCTGATCATCCGGTATTTCTCCAGATCTTTCCTTTTCCGAT
-TCGATCTTCTTCCACTTGGTACGCCGGTTTTGGAACCAGATTTTCACCTG
-GAATTTGAGAAATTTCAGCTATGCGTTGAGTGCCGCGTTACGTGCTGCGT
-TGCGTGCTGCGTTGCGTGCCGCGTTGCGTGCCGCGTTGCGTGCTGCGTTG
-CGGGCTGCGTTGCGTGCCGCGTTGCGTGCCGCGCTGCGTGCCTACCTGCG
-TCTCCGTGACATCCAATCGTTTTGCAAGCTCACTTCTGTCACTACTTGAC
-AAATACTTTTTCGCCTCAAACTGCTTCTCCAGTTCGAATACTTGTTTCCC
-GGAAAATGTCGTCCGCGCCTTCTTTCTCTTTGTTTTTTGACATTTTTCTA
-TAGGAGACTCTTTGGCTTGGTCGAGGCTGGATTCTGAAAAAATATTCTTA
-ACGGCTGATTATTTTTCTACGTGTAGCATTTTTCCGAAATTCATTGAACA
-AAATTAGTAAATTTCCAAAAAATTTTTTTTCCAAAATTTCGAAAACATTT
-TAATTTTTTTCAGATTTTCTAATATTTTAAAACAAAAATTGAGAGTAAAG
-GAAATAAAAATTGTGTCTTGTAATTTTTGTAATTTTTACTCAAAAAAAGG
-CCAGTGAAATACTATTACAGAAAATACGAATCGATGCACCATGTCAAAAA
-GAATAGTATTTCACCTCAAATGCACCATGCCCAAAACTAGTCTATTTTTC
-AACTACAAAACTTCATACACCTAATCCAAAGAAATCAACTTACTGCATCT
-TCCAAATTCATCAATTTCTCCATTAACAGTTGGTAAGTCAAGTATATCCT
-TTATCAGGTGACTAGTTCTTCTCTGAGGCTTCACATCAGACGTCAACAGT
-GCAAAATAGGGTTGAAGTAGTTGGAAGAGCAAGTCAGTTTCCATTTTGCA
-CGAATGAAAAGAACTTCTGAGAGACTTCTCTATACAGTAGGTCTCGAGGT
-CCCCGCCTTCTCTTCAATCAAATAATTGAAATTCTGGACTCTCGGGGGAC
-TTTTGACGGTTGACGACGACGACAATTTGCCAAAGTGGTCGACAATGATT
-GCGCAATTGGTGTGGAAAGAAGAAGAAGATGGGTGAGTTCTGAGATGATG
-ACAAAAAGAGCATGAGCCAGCAAATTGAATAAGAGACCGGATTTCGAGAA
-GGAGGAGGGGGAGAGGAGGATTGGTGGTAAGGGATGATACTTGATGCAAT
-TGAGGGAATGAGTTTCTCATACTTGACTATTAAATACTTTTCTTGAACTT
-AAATATTTGAATTGAAATTTTGGAGTAGCGGAGGCACATGTGATATTATT
-GTGCTAATTTGTAATACTTGGACTTTCAAATATAACCTCAATTATTTGAA
-AAAAACCTTTTGAATAGACCAGCAAGGTTGATCTACAATTTTTCATGGAA
-ATCGAATTAATTTTGTAAGGATGTCTACTGAGTATAAGCTTATTGTTAGG
-CTTAGGCTTAGGTCTAGACTTAAGGCTACACTTAAATTTAGGCCTAGGCT
-TAGGCTTAGGCTTAGGCTTAGGCTGAGGCTTAGGCTGAGGCTTAGGCTTA
-TGCTCAGACTTAGGCTTAGGCTTACGCTTAGGCTTAGGCTTAGGCTTAGG
-TGTTGGCTTCAGAATAAGCTCAGGCGGGGGTGAGGGAAGGGTAGAAAAAA
-AAGAAAGAGAAATTTCCAGAAATTCACAAAATCCAGAAAAAAACATATCT
-TTCACAAGTTTATATTTTTATAGCCTAAAAAATTACTTTTAAAATGAGGA
-TATGCAACCCGCACGCAAAAAAACCTTTTTTTTTTTGAGCAATTTCACGG
-CTCTTTTTTTTTTAATTTAAAAATACAATAAAAAAACCAAAAAAATTTTC
-CGAGCCCAAATTGCTCCCAAATGCTCTAAATTTCTTTTGAAGTTTGATAT
-ATTCCTATTAGAACTTGAGGAAAATGTAAAACTAGAGAAACATAATACTA
-CGCATGTTAAATGTAAATTACTTACTTTTAAAAAGTCGTACGTTATTTTG
-GAAAGTTTGAGGTTTTTGCATTTTTTCCGTAATATCACTGAACACTTTTA
-TTTAAATATCATCAATTATCGGAAGTTTATAGGTTGCAGGAGAAAAAATA
-TATTCTAGCGGGAAAATGAAATGAGACGGGGGGACATTTTTAACCAAAAA
-AAAATCAGAAAACAGTTGGTAATAAAATTATTCCAAGAAAGTATAAATTC
-ATGACTTCCATCTTGGGAACATTCTTAAAAAATGTCAACGAATAAATCTT
-TGTGGCAAACAAACTTTTTCCATAAATGTTTCAGACCTTATATAGCGGAC
-ATGAAAGTTGATTGCTTATTTGATATGTCTTGAGTTTATTTTTTTTTATT
-TCAAGCGAGGGGAGATTTATTTGCCTAGATATATATATAATTATTACTGG
-AACGAACTGGAAAAAAACTTGGGATCAAAAAAATCAAAAATTCAAATTCA
-AAAATTCAATTTTTCGAAACTTTTTCTACAGCTTTGTCGAGAAGCAACAG
-ACAAATACTTATAGCTAAAATTTTATTAATATTCTAGTTTTAGTCATGGT
-GAATCGAGAATTTGTCAATTTCCATGTGGTATCTTAAAAATAAACCGATA
-CACGTGGTGTCAGGCTGTCTCATTGCGGTTTGATCTACGAAAAATGCGGG
-AATATTTTTCCAGAAAAATTGTGACGTCAGCACGCAAAAATTAATAAGGG
-TCTAACCAAAAAAACTTGAATCTTGGAAATATTTTTAATTCACCCTAAAT
-TTTCCCCTGATTCCGAATATCTATGTGAAAAAATTCAAAAAAAATTTCCT
-GAATTTATATTTAAGCTTGAAATCTTTCATAAAAATTTTTTTTTTTTAAA
-TTTCATTTGTACTCGCATCACTTTTTTCAAACTCGCGCCCAAATAAATTA
-GCGCGCGCGTGCATCGTTTGACTTTTTTTCGTTTAGTTTTTTTTATTTTA
-GCCGAATTCAATTTTTTTAAAACCAGTTTCATTCATTTTTGTCGGTTTTT
-TTTTTCTGAAAAAAATGTAAAAAAACGAAAAAAAATCAAACAATGCAAGC
-GCGCTCCAATGCTAATTTATTTGAGCGCGTATTTAAAAAAGAGACCGGGA
-TACAAATGAAATTCGGCGATTTCAAGCTTAAATATAAAATCTGGCAAACT
-TGTTTTGAATTTTGAATTTTTTCACATAGATACTCGGAATCAGGGGAAAA
-TTAGGATTCATTCAAAAATATTTCCCAGATTTCGGTACCCCACCTTAAAA
-ATTTTTTTTTGGGAAAACAAGGAAAATTTCTAGCTTGAACTTATTTTATC
-AATACCTAAAATGCTGAACATTAAAACACACACACCCGTATGAGTATTAT
-ATACTTCCAAGGAAACATTTGAAAAATAAAGAGTTCTCCGCTTTGATTAT
-ACACTTGTGATATTCTCACGCCTGGCACTTGGCACCAGCTCAAAGTGCTC
-ATTTTGGCTATAATTGTTTGAAGGTATATGAAAAAGTGGAAATTGGGAGG
-AAAAATGGCATGTTTTGGCTTTCTCTACCTGGCCTATGTGTTAGAAAACT
-CTTCTATGAAAATTCAGTTTAATTTTTTAATTTTTCTTAATTTTTAAAAT
-TCTAAAAATGGCTAAACTTTCAAAAATATAATTTTTAAAAAGCCAAATAC
-TATAAAATTTCTTTGTTAATTTCTTTATAACCAAAATTAACGATTTTCAA
-AAGTCAAATTTTTCAAAATTACAAAAAATTTAAAATTACTGTAAGATGCG
-CAAAAATTACAGAGTTTTCAAAATATAAAACACTCTTGTGGCCGAAAACT
-TCCAAAGTTCAGGAAATAAAAATTCCAAAAAAAAATCAAGAAAAAAATGT
-ATCTCGAAAAATTACCGCTATTAGAAAATCGCCTTCTCTAAAATTTCCCA
-AATTTTGAAATTATGGAAATTCCCAGATTTTTCAAAAGCGATCTAGTCGG
-AGTTGTCAGAAAAAAAGTTCAAGAAAACTTTCTCTAGAAACTCAAAAGTT
-GGCCTGATCAGAACTTGTTGGATTTTTTCAATTTCCCAAAAAATTTTCAA
-AGTTGCCGAAAATTACCGAAACTCCAGGGCTCACTTTTAGACCTTAAAAT
-GAAACTTTTGCCATTTGAAAGAGGCTCTTTGAAAAAGGTCTCTGCAAAAA
-ATTTAGCGGCAGACGAGCACTTTGAACTAGAAAAATGTCGCTTTGAAATT
-GCTATCATTGAAATTTTTCACTACTATAGAGGCCGGTAAAATTGCTCCAA
-ATCATAATTTAAAATATTTTTTCATGATTTTTTTTTATTTTTTCATGATT
-TTCGAGGTAGGCAAATATTCTGGGAGCTTTTTTGGATATATTTATTTTTT
-TGGAAAAAAAAATCTGAAAAATCCCACATTTCCAATAAAAAAATTCCAAA
-AAGCTTTCAGAATACTTGTCTACCTCGAAATATCCTAAAATTCATAACAA
-TTTCAAAAAAAATATAATTTGGAGCAAATTAACGGGCTATTTCAAAGTCT
-AAAAGTGAGCTATAATGCATACATTCCAGAAAATGGAATAAAAAATAAAC
-TGAAGTCAATTTAATCTAATCTCATGATACCTCCTCCTCCTTCCCCCAAC
-AAATAATGCTCAATAGCCCCCAATCAACTCGTTCCAATTTGAATAGTGTA
-TTATTTAACAAGCTTCATCATCTCTTCCTCCTATTTTTTTTTGTCATTTT
-TATCGTCCCCTCGGCCGTTTGTATTATCCTCTCTTCCTTCTTCTTCTTCT
-TCTTGAAAACGAATTGAATTTCTTCATCCAATTCACTCAAATCACATCCT
-CCACGGACACATTCAATTAATCCAAACGTCCTTTTCAATTGAACACAACA
-ACAATCACTATTTCATAAAAATTGTTTTAAATGTACATATATCAAAAATT
-GCGACGGCTGGAAAAATTAAATTTTTACACCAGAAGAAAATTTGTAACCA
-TAGTTATGGTAGCTATAACTCAAAAAAGTAGGAAAATTATGTGACATGTT
-CTCAGGACTGCAGTGATCGCAATAAAAATAAATTCTGCTGATCCAATACT
-CTTGAAATAATAAATCGTTTCTGATTGATTCCATCATTCTCAGACAAATG
-GAGCTTGGTTGAGTGCTCAATTGGTCAATGTCGCTGTCATGGCACCAGGG
-TTGTGCGGCATCCGGATTTTCTGGCAATCGGAAATTGCCTTTTGCCGAAC
-TCTAATTTTTTTTCGGCGATCGGCATTTGACGGTTGCCGAAAAACTCGTT
-TTTTCGTTTTTTCGCCATTTTTCGGCATTTTTCGGCGTGCTTAAACTCTT
-TGAGGTTTTTTTTTTATTTTTTCTTGTATTTTATAAATCTAAATAATTCA
-ATTCCAAAGTTTGATAAGGAGTGTCTTGGTTTAAATTTTCTAGCACAGAT
-CAATTTCATTTATTAACGATCAGACTGGTAGGATAGTCAACGACCCCAGA
-GGCAAGAATGATTCAAAATAATTGCACACATGGACAGCAATAGACAAAAT
-CTTTGAGAGTTTTATGGTGGGGTGGCGATGTGTCGACCAAAAGAGTATAT
-CCACTATATGGCTAATAATTCAAATATGTTGTATTTTGGAAAGTGTTAGA
-ACACAAGTGACTTGAGTGTTTTCGGATACAAGAGACACAGAGATGTCCCT
-TGATTGTTCACAGAAAGCGATTTTTAAGGGTTTGACTACAATATTTGCGG
-ATTTATGTTTCAACGAATAAATGTAAAAAACTCGAATATCATTTACTATA
-TATAAAGCGCTTATTCCGTTTTTCCATAGTTTGTAGTCTATGTAGTCTTT
-GTAGTTTGCGTAGTTTTAGCTTCTGGAGGGATAGTGAGTTGGGGTTAGTG
-TAGGGATATAGTCGGCGTACTGTAGTGGTACAATGGTGGTACGGTAGGAG
-TACTGTATGATTACGGTAGTCTCAGAAAAATTGGTTTTCAGCTCCAGAAG
-TCGGGGACCGCGCCGGAGGTGCGGTCCACGGCTGGTATATACATATGTAT
-ATGTATGTATATATGTATACATATATTCAATTAAATTTAATTTAAAAAAT
-AAAAAAAACATTTCTCACAAATGCCGAAAACACCGAAAAATGGCGAACAT
-TTTTAGGCATTCGCCGATATTTTGACCAACTATTTTTTTTTGGCGAACGG
-CATTCGCCGTTTGCCGCACAGTCCTGCATGGCACCCCGACCGGTTTCGTG
-ACAATAGTTTTGACCTGAACGCACTAGGAGTCAGGAAGTTATAGGGGTCA
-TGGGTGCTTTAATGACCCCCTGTAAAAAGCACATATATTGACAACAAAAT
-TTGCTCGCTGTTTTTTGTATTAATTTTTTGTCTCCCCTCGATGCGCATTT
-CTAGTAATGATGCACATATTTATTTTTTTTCATGTACATATCTAACAAAA
-TCATAAAACTGAAAATTGCGCTTTTGTTCAAGTTAGCAAGACAACCATTA
-TAAAGCTTTCCAAATAGCAAATTAGCAAAATAAAGTGAGAAGCTAGAAGA
-TAATGGGGAGTCCCTATAATCTTTCGGGCACACCTTCAGACTTTGTGACT
-ATAATAGCCCAAACCCACAGTTTACTGAAAACTAGGGCTTCATTTGCTAT
-ATGGTACCCCTAAACTCTTTCAGTAATCGAATCCCAAGAAACCTTCACAT
-CTGTAACCTGGACAAAAAACACACAATTTCAAAAATATAGAATTCTTTAT
-TCAAGAATCATCATCATCATTTTTTTCAATTTGTACAGACAAATGCCGAC
-CATATTTTTTGTCAGGGGAATGGCAACGGCGGGAACCCAAGAAAATCAAA
-CAAAAATATGGAGAGAAAAATGAGCCAGAGAGCCTGAGCAACCATGCATA
-AATAATGAGGAGTTGGTGAGATGAAGAAAAAACAGATAAGTTACGACGCG
-AGGAACTATTTGAAAAATAAACTGCTAAATACTATGTGCTTAATCCTCCC
-AGGTAAGCGAGTGACGGTTCTCGTATCTCAGCTGGCAGTTTCTCTTTCCG
-TACCAGTTGACGTAGGCGAACTCGGCGTCGGAGACGATGGCGTTGAAGCG
-TCCTCCGAACTTGGCCGAGGCGTCTCCCTCGATCTTTCTGGCGGCCTCGA
-GGTTGTCCTGGAAGGTATCAGTGATTGGATTTGATTTATAGTTCTTCTTT
-TTTTTCTTTAATTTCTTGCTTGTAATTCTAAAGCAACTAGAAAAAAAAGT
-TTCGGAACGCATCTATCATGCCAATTTACATAACCGGTATGGGTTTGCGC
-GCGCGGGGGGCTTGCAACATTTTCTTAAATGACATTAAGGTATGAGAGGG
-GGGGGGGGTGTTGTAAATAGGTATCCAGTTCTTGTCTGTCCCCGTTATCA
-AGTTTCTCTGGTGACGCAACGCAAGAAGGCAGAAAACAAACCTTCTCGTT
-CTTCAAAGCGGCCTCAACGATGGCGCGGAGCTCTGGATCGTCGCAGTTTC
-CCTCGTCTCCTTCCTCATCGGCGTACTCGACAGCTTCGTTGGTCTCCTGG
-AAATTTAGAAATTAGATTTTTCTCGAAATTTGGCCGAATATTAAAAAAGT
-AATACTAAGAATTTCCCCACGAAAGGCTGAAAAATTGAGGTTTCCTGGGA
-AAAGTGAAATCCCGGTCTCAAAATTTTTTTTGATTTTTGAGCTCCGTTGA
-ATACCGACAACAAAAATGGCTCTGGAATTTGAAAATTACGGGGAACTGAA
-ACGCAACTTCTACTGCTGCCAGTATGTCTCTCCCGCATTTTTCGGAGGCT
-CAATCGTAGATCAAAGTTTTCCGAATAAGTTACTATTAGGTTTTTATCGA
-GAATTGGTACTAGACTATGTTGACAAATACCAAATATCAAATATTTACCC
-AGATGCAAGTTATGGTGCTTTGAACTAGAATTCCTGGGAACTGATTGTAA
-GTGTCAAAACCTCAGCCAACCGACCTAAGCCTAAGCCTAAAAAGGTGTAT
-CGAACTTAAATTTCGACATGGCATGGCATTCAAATGGGTATACCGATGAT
-TTTGTTTCAGCAAAATTTTTAGGGTCGAATTTTTAAGGTAGAGCAAAATT
-GGGATAATTTTAAAGACTATTAATTGTCCAAAAATCCAACAAATCCAACT
-TCAAATGAGCTTAAACTTTAGATCACCTTCCCAAAAACCCACCTCAACAG
-TATCAACTTGCTCGGTGGCGGTCTCGGTGGCGGTGGATGGCTGCTCCTCA
-ACAATATCATCATAGGTGCTCTCCTCCTTGGCAGCGGCAACTGGAGCCTG
-AGTCTCCTCGACAACTGGAGCTGGAGTCTCTTCAACGACAACTGGCGCCT
-CGGTCTCCTCGATCACAACTGGAGCCTCGGTCTCAACGACGGCTGGGGCT
-TCGGTCTCTGCAACGACGACTGGTGCTTCAGTCTCAGCGACGATTTCTGG
-AACGATTTCCTCTTGGACAGTCTCGACTACGGTTGGCTCTGGTGCTTGCT
-GTGGTTCTGGTGCTTGTTCTGGTTCTGGTGCTTGCTGTGGCTCGACAACA
-GTCTCGACGACCTGCTCGACTGGTGTTGGGACTGGCCCCTGGGTGTATGT
-GGCGACTGGTGCGACTTGCTCGACAACTGAAGTGTGGGTGAGGGTGAATG
-TGTGGGTGGGAGTGGTGCGAATCTGACTAAAAACTGTAAAAACTAACCTT
-GAACAGCCTGGTGCTCTGGTGGAGCTTGGTAGTTTCCTCCCTGAGAGACT
-TGGGTCACCTGGATAGAGCTGACTGGTCCCGATTGGTATCCTCCTTGTTG
-AACTTGCTCGACTGGGGCAGATGGTCCGGCGTTGTAGCCTCCTTGTGGGG
-CGACTGGGGCTGGTTGGGAAGCTCCAGCGTATGAGGGTCCTCCTCCGATT
-GGTCCTTGGGATCTAGCGTATGAGGATGCTCCGACAGCTTGGGAAGCTCC
-AGCGTATGATGGTCCAGCTTGCGATCCAGCGTGCGAAGATGCTCCTCCTC
-CGATTGGTCCTGGACCAGCTTGGTAGGCACCTCCACCGACTTGTCCTCCG
-AATCCTTGTGGTCCCTGGGAGTACGAGGCTCCTCCGACTGGTCCAGGTCC
-TCCGAATGGAGCGGCATATCCGGCTCCTCCACCGATTGGTGCCGGTGGTG
-GTGGTGGTGGGGGTGGAAGGGCAGGCGCGGCGGCATAGCTTCCGCCTCCG
-CCTCCGGTTGCGTAACTGTAAATGAACACATTGGGAATAGTATGGAAGAG
-GTGGCTAAAGGGGGAAGCAGGTTTTAGTTTTGGCGGCCAGCAGCAGGAAA
-AAGGACATTTTGCATGAATGGGGTGGCAAGTAGAATGGACTTTGTCGCTC
-CTTAAGGAAGACATCAAAAGAACTTCAGAAAGAAAGAAATTATTTTTGGA
-ATCAGGAAAAAGCATTTGAATAGCAGTAGAAAAAATATAACAATATAGTC
-ACAAAAATACAAAAAAAAAGGCAAAATCTTACCTCGAGCTAGAGCATGGT
-GGAGCTCCTCCTCCGCACGATGGCTGGGATGGTGGGCAACATCCACCGGC
-GCTTCCGGCACCTCCGATACACGCTAACGCAGGCGACACGGCCAATAAGA
-CGGCTACCAAGACTCTCATCGTTTTTGAGAAGGCAGAAATCGCAATGGAA
-TGCTGAGTAACTGTCGTCGAATGGCAACGTAGGACGTGCCTTTTCTACCT
-GCCACCCCAAACTAACTCCGCCCATGGCCGTCTGGAGGGGGCACGCGCGC
-GCACGAAGCCTTCCGAAAGACGCCCGATCGCGTTTTATCGATGATGATGA
-TGATGATGATGAGATGAAGCCTCTCTCTCTCCGTCGGAGGGCACCTTGCG
-ACATTCACCTTGTGTGCGTGTGTGTGTTGCAGAATAGGGGGAAGAAGAAG
-CGATCGCGTACAAATGGGGTTCGTGTTCATTTCCGAATGATCCAATGATC
-AGCTGGAATATTCCTATTAATGTGACTCGTGCCACGTCATTGTTAATGAT
-CTACTATGTTTGAGTGATTGGATATGTGTTGTTTCCTTTTCTAGTTAGAT
-TCCTGAACAGTTCACCTTTACCTAATCCGTGATCGATGTTCCAATGCTTC
-TTCCTTTCACTTCCACTGCGGCACCTAATCAGGCGGAATAACATGCTTTC
-ACTCTGCCGGTAAAGTGTGAAAATCCTAAAGTTTTAGATTTCAAAGATTT
-CAAAAACGATCGTTGATCCTACCGCGCTTCCGCATCAACTGATATCAGGT
-TTTTTTTAATGATAAGATTGTGGAGGAATGAACTGGTGAACTTTTAGGCT
-GATTTAGAGCCACGTGGAAACTTCCAGCTTTTACCTAGGTGACTACAAAC
-TACGGAAGATCAAATTACATACATTTTGTAAAAACATACATCACTTTCAA
-AAATTTCGGTTTAGTTCAAAAAATCACATTTTTACTGTTTTGAGATTTTT
-TTTTTCCCAAAAATGTCGATGCAATTTTGATGTCGATGCACCACGGGCGA
-TTTAAAGGAAATTATCAGTTTTCTGAATATTTTTGTTTTGTATGTCTTGA
-TTATGGGTTTTGTAGGCTTCGATGGCAGGCAGGCGAGGTTTCGGGTCCTG
-GCGCCCGTCTGAAACCTGCCCGCTTCACGCCGGCCTTTTGCCTCTTTTTT
-GCATTTTTACGTGGTGCCAGGCTGTCCCATCGCAGTTTGATCTACAAAAA
-ATACGGGAATTTTTCGCCCAAAAATATGTGACGTCAGCACGTCTTTAACC
-ATACGAAATCAGTTGAGTCTCTTCTCCCGCATTTTTTAGTAGATCTGTGT
-AGATCAAGCCGAAATGAAACACGCTGACACCACGTGTGTTTCTCATTGGA
-AATTGGAGGCCTAGAAAATCAAAAGTTAGGCCATCAACAGATTTTTGTTT
-CAGCAAAAGGCGCGGATTGAGGCGAGGTCGCTTTAAAGTCAGGCAGGCAG
-GCGGTTAACGCCTACAGGAAAACTTTAGGTTTTAGGTTATCTGTATGTTT
-CCCTTTTGTGTGTTTTTTAGACGTCCAAAGAATCGTATCAAAATGAATAG
-GTATTTTCTCGTTTTATGCAGATAGGTAAAGGTCTGTAACCTGAAAATCC
-AGAGCCTTATAATCCACACCTACATAATCATCAATTAAAATATTCAGATA
-ACTGATAATTTCCTGAAAATAAGATATCTGTAAATTGAATCAACGCCAAT
-TTTAGACATGGTGCATCAAATGCAACATTGTATTGATATATAAACTTTGG
-CAGTCAATACATGTTTTCTTATGCATTGTTCTCAGTGCACCTTGATCAAT
-TGAGTAGACTTCATCTATTCTTGTCCACTTCCTAAACATGAAATCAATCA
-CGGCACCCCATCAAAAAGCACTAAAAAAGTACATTTAAAAGAGTACATTA
-TTATTGCCCGTTCAATCCTCGTAATGTATCTTTGCAAGTTCCTTCTTCCT
-CTGACATTTCCCGTTCCAATTCTCCGCCATACCTGATATGCTCGACTTTT
-TCGATCATAGACGCGAATTGCGCAACGCGCGAAAATATCTTGCGCAATGA
-ACAAGGAGAAGAAGAAGAAGAAGAAGTAGGAGAAGCCAAATAAAAGATAG
-GTGATAACCGAGATGTTAAGCCAAAGAGAAGGAGTGTAATAGCTGAACAA
-GGCCTATTTTTGTGTAACTCCCCCCTCTGACAGCTTCTTCACTTTCCCTC
-CAACCGTTTTTACTCTGTATGGTAATTGTTGATGGATCGCCATGGAAAAG
-CCCTAATGGTCATGAATAAGCTGTAAAGCAGCGGGGGTGAGCTTGAAGGA
-CGATCGGACAAATGAGATATGAAGCGTGAAAAACGGAAAGCATGCTTAGA
-GGGGGAGATATATGTAGATTTGGGGAAAAGCTACAAGGTCGATTTTTATC
-CGGTGTCAGGATTATAGAGGTGTTTTGAAGTAGAAGCAAGGCACTGAAAT
-TCACCACTTCCTCTATTAGAATTGCACATTTTTTAAAACTATGTACCTGT
-TTTCTTAAGAATTGCTTGAAAAGTTGAATTTGAACTAGTAGTTCTTGCAA
-AAAGGCCAATTGAACTATCTGGTTTAGTTGCGTCCTTATTAATATTGCAC
-TTTTTAATTCCGGCAAAACGCCGGTTTACCGATTTGCCGGGGATTTTCAT
-TTTTGGCAAATCGCCGATTTGCCGTTTGCCGAAAAAATTTTTAACAGACG
-GAAAAACTTAAAACTGTGTCATTTTGAATTTATTACCGTTTTCTTTAGAT
-ATTTTCATAGAATTTGCTAACTTTTGAAAATAGATGAAGGAACATTTATA
-TTATTTGAAATTGAAATTCTGAAACTTCCAAAAAAATAAGTTGCAAAACC
-ACAATTTGCCGAAATGCCGTTTTCCCGGCAAATTCGGCAAATCGGCAATT
-CGCCGATTTGCCGAAAATTTCAATTCCGGCAATTTGCCGACAAAGCAATG
-TTTCATAATACATAAAATGTTTCTAATTTTTAAGAATGATTTTTTTAATT
-TTGACAAAGTTTTTTTATAAAAGAGCCGAATTATTTTAAATTCCCGCGCA
-AATAAGTGACGCCATTTTTTACATTATTTGTATTTTCTGGCTAAATTAAT
-TGGTTTATGTATGTTTTTTCTTTAGTTTATAACTTGAGTAAAATTCACAG
-TAAAAATTAATTTTGAAAAATCGATTTTTAGTTTAATTTCAATTTCAGAG
-TTTCGGCAAATGTATTCTCAATTAACAAGTTTTCCAAACGGAAAAAAATC
-TGAAAATTGACAAACCACGGTGTAGATCAAGCCGAAATGAGACACCCTGA
-CACCACGTGTGTTTCCCCTTGGAGGCCTAGAAAATCAAAAGTTGGGCCAC
-CATCAGGTTTTTGTTCGACTCAATTGGTAAACTTTGCAGACTAGGCTGAA
-ACGTGGTATTTGCAAAAATACAATTTTACACATTTATTTTCCACAAACCG
-AATAAAATCCTTATCTCAACAGTGTTATATAATTTTTTTTTTCAGATCAC
-TATCACGACATTTTAAAATATATTACAGCACTCTCTTCTTTAGGTTTTGA
-ACGTTGATGCTTCGAGGATAAACATGAAAACCAGATCAGCTTTTCCGTGA
-CCTCACATACTCATTTTCTCAAATTCTCAAAAATGTTCTGCCTTCTCCAA
-CGGTCTCTAAAAAAGCTTGGAAAACCCACAAAAGGTGTCTTGGGACACTT
-CTGTCTCTCTCTTTATCGATGACCGGATCGCCCGGATAAACGGGTTTTGC
-GGACTGACACCAGCAGGTGGAAATGGGCACACTTGTAAAATAAAACGAAA
-AATAATAATAAAAATAACACGGAATGCGGAGAGAAGTGGCAAGATCGGAA
-GAATGGTGGGGGGGGGGGGGGGGGGGATTACATAAAGATGGCGGCATAAA
-GTGCGTTTCATTAGGGGGATATTGGGGTTTTTATAGGGGGAAACTTTGAT
-TTTTTTGAAAAAAAAATTAAGAAAGAAGCGACAACAACCAACAACAAGGT
-CATTTTTAAAAGGAAAATTTGGCATGAAATTTACATTTTGGGATGAATTA
-TGAGGATATACTCATATAACCTAATTTTGTCACAAAAAAAACGTCGAAAT
-TTTTAAAAATGACTACATTCTGCAATTTTGAAAAATTTGGTGGTCCTACC
-ACGAAAAATCCATGGTTTTTTGGTATTTTGACGAAAAACTGATTTTTTGT
-GTTTTTTTTCTGGTATTTTGAAGCCGCTGTACTTCAAACCCTTTTCATAT
-TCTAAAAATATCTTTTTGCAAAATTCGGTTTTTTCTAAAGTTCAAAATAA
-ACCACTATTTTCAATTTTTAACGGAAAATCTGCAAATAAAATTTCGGAAA
-ATTCCGGCAATTTGCCGATTTGCCATAAATTTCAAGTTCCGGCAACTTGC
-CGATTTGCCGATTTGCCGTAAATTTCAAATTCCGGCAAATTTGCGAATTG
-CCGTCCTACCATGAAAAATCCTTTTTTTTTCTGGTATTTTGAGACCGCCG
-TACTTCAAACAATTTTCATATTTTACAAATATCTTTGAGCGAGCGGTTTT
-TTTTGAATTTCAAAATAAACCAAAAGTCTACTTTTTTTGGTTTGTTTTTG
-TAATTTTTTTTTTAGAAATTTCAATTTTTATCGGCAAATTGGCAATTTGC
-CGGTTTGCCGGAAAATTTCAAATCTGGCGATTTGCTGCTTTGCCGATTTG
-CAGGAAATACCTATCCCTGATGTAAATTACCAGAATTAGAAGTTTGGTAC
-ACGATTGGCACACAATTTTTTGGTACAAAACACGCTAAAAATTAAATGTT
-TTTGAAAAAAAAAATTCTTTTGAAATTGTTTTAGTGTGAATTTCCATGTA
-TTCAATTTTTATCATTTTTAGCCTGTTGCTCCAAACTAGGTTTTCTCCCA
-CGTGGCATCTCTCATTACACATAAAAATACCTGCTAACTCAAAACATTAA
-TCAGAGATCCATATCCATGTCTTCCTCACTTTCCAACTTTTTCCCTCTTA
-GCTTATCTAGATATATGTAGGTATATCTATATCTACAAACAACTTTCTCT
-TTTCAAACATCCAGTTTATCTTCTGACCTTTGCAACATTTTTCCTTTATT
-CCAAACTTCCGCCAGATTGCATCTTATTCAATTATTACATTCAAAGAGTG
-TCTAAAGTTTTGCTTAGAAGAAACAAAAGGTAAAATGTCAGATATGTTTA
-GAGAAGGTTGTAAAATTTGGCAATTTATTGTAAAAATTCGCAATTTTGAA
-ACTCCTTTAAAATGGTTAATTTTGTAGTTAGAGGACTCAAAATTAATGCC
-CGAGAACTAAAAAGTTGTCATTTTTCATTTATCAATGATTTTACTTAATT
-TCAAAAAAAAAATTTTGCCCAAAAAAGGACAGTCATTAGAAAAAAAAACG
-GAAAAATGATATGGAGTGATTCTTTTTTATTTTATAAAATTAATCAGCAT
-AGTCAAATGTACCAGAAAAAAGCAAATAAAATGTACTAGATTGACCGGAA
-GATTATTTGAAAAATTGCAGAAAATGCACCAAAAGCTGCTTTTTTCAAAA
-ATTCAAAAGTACGGTAAAATCATACGGAGCTATTCTTTTTTATTTCATAA
-AACTCTTCAGCATAGTCAATAATACCAGAATATGTCAATCAAAGTATAAT
-AGCTTGTACGGAAGTATCTTTTTAAAAATTGATAAAAATATATAAAAGCT
-GTTTTTTTCAAAAATTCAAAAGTATGGGAAAATCATAAGGAGTCATTCTT
-TTTTATTTCATAAAACTCTTCAGCATAGTCAAAAATACCAAAATATGTCA
-ATCAAAGTATAATAGCTTGTACGGAAGTATTTTTTTAAAAATTGATAAAA
-ATATATAAAAGCTGTTTTTTTCAAAAATTCAAAAGTATGGGAAAATCATA
-TGGAGTCATTCTTTTTTATTTCATAAAACTCTTCAGCATAGTCAAAAATA
-CCAGAATATATCAATCAAAGTATAATAGCTTGTACGGAAGTATTTTTTTA
-AAAATTGATAAAAATATATAAAAGCTGATTTTTTCAAAAATTCAAAAGTA
-CGGGAAAATCATAAGGAGTCATTCTTTTTTATTTCATAAAACTCTTCAGC
-ATAGTCAAAAATACCAGAATATGTCAATCAAAGTATTATAGCTTGTACGG
-AAGTATTTTTTTAAAAATTGATAAAAACAAATAAAAGCTGATTTTTTCAA
-AAATTCAAAAATTCAAAAGTATAGGAAAATCATATGGAGTCATTCTTTTT
-CATTTTATAAAATTCTTTAGCATAGTCAAAAATACCAGAATATGCCAATC
-AAAAGATAATAGCTTGTACGGAAGTATTTTTTTTTTAATTGATAAAATAT
-ATAAAAGCTGATTTTTTCAAAAATTCAAAAGTACGGAAAACTATATGGAG
-CGATTCTTTTTTCTGTTATAAAACTGTTCATCATTGCCACGTATACCTGA
-AACTACCAGAAAAAGTATGCTAGCATGTACGGAAGATTATTTGAAAAATT
-GCAGAAAATGCACCAAAAGCTACTTTTTTCAAAAATTCAAAAGTATGGAA
-AAATCATATGGAGCGATTCTTTTTTCTTTTATAAAACTGTTCAGCATAGT
-AAAATGTACCAGAAAATACCAAAAAAAAGTATGCTAGATGTTCGAAAAAT
-TGTTTTTATAATTTTTGAGAGGAGTTTCAAAATTGTGAATATTTACAAAA
-AATGGACATTCTTGCCACTTTTTACTAATTTTTGATGGGCTAAACCTAGA
-TTTTCTAAATTTTACATTTATGAATTACCCGTTTTCGACGAATTCAGGCA
-AATTTTTATTTTTTCCTATTTTTTTCAGCCATTTAATCAGCCATAATAAT
-GAATGTCCTTTTTTTTTGGGCAAAAAAAAATTTTTTAAGGCTCGAAGACC
-AATTTTAAGTTCTCTAGCTACAAAATGAACCATTTTAGAGGAGTTTCAAA
-ATTGTGAATTTTTACAAAAATTGCCCAAATTTGCCACTTTGTAATGGTTT
-TTGGTGGGTTAAACCTAGATTTTCTGTATTCTGCATATATGAATTACCCG
-TTTTCAACAAATTTTGACAAATTTGTATTTTTTCCAAAATTTTTTTTCAG
-CCATCTATTCCTTTTTTTTGTCTGTTTTTTTTTCGGGCAAAAAAACCTTT
-CCCCACTGGTGCTATACCACCTTTAACGGTAAATTTTACTGGTCTAAAAA
-TCGGCGAAAAAATGAAACTTCAAGTAATATAATGGTAATTGAGTTTTTTT
-TTCTATTTTCTTTGTTCAAAATATCAATTATGACAAAAAACGAGAAAATT
-ATATTGACACAGTTAAGCGGATATAAATAATAAAACATCACAAGCACATT
-TAATTTTTCAAACCCCCTCAGGAGTCATGAAGAAATCCTTCTCTGCACAT
-CTACCTTTCTCCACATCCAACTCCTGATTTATTTTCTCCGCAAACTCCGT
-GTAACTTTTAATTGCAACATTCAAAAGTTTTGTATGATGCTTCAAGTGAC
-CCAAGTCGATTACACAATCCCCGCAAAGAGCTTCGCTGCGAATTTTGTCA
-ATTCCCTCTTCTAAATTCACTTGTTCTCCAAACTTCACTGATTTCCTTAG
-GATCCCAGTGCTCAGGCAACAGTTTGTGCAAATTCTCAAGGTTTTTGATT
-TCAGTTGGCAAGCGGTGCAGATAGGGCTCTGGAATTTTAAATTATTGATT
-TTTTTAAAAATTATTAACTCACCTCGTCGCTTTCATGTGCTCTTCTTGGA
-TTATGGTCATATGGAACTAAGAATCTCGAAAGTTGTATTAAATCCCACAA
-AGATCGATTCACATTTTTCCTTTCAAACGCATTTTCTCGTTTACAGTGTG
-GACATCTCTTGTTCAGTAGTTGGAGTCGGCATCTGTCGCAGATAGTGTGA
-CCGCAAGTGCCTATACAAGGGATTTGGGTATCATGATCTGGAAAATTTGG
-TGTGTAGGGCTTCCATGGTAGGCAGGCGCGGGGCCTGGCCCGCCTCACAC
-CGGTGAATTTACAAATTTTTGATTTTCTCGTTTTTGTCATTTTGATGAAA
-AACATTGAGGCAGGCGGAGGTCGCCTCAAGTTCACTCGGCGTTTGCCGCC
-AGCTTCCTACCCAAAGCTTTGCAACTTCTTACCCAAGCCTTGCCCAAAAA
-ATAAAAAGCTTAAATATCAAAATTACTCAATTTTGTGTCATTCTACTAAT
-TTTCTGAGAAAATTTGAATTCCCGCCAAAAATTTTATTGGAAAATTTGAA
-CTACTGGCCAAAATTTTTTTTGGCTGCGCCAAAGATGATCTTAGAAATTT
-GAATTCTCGCCAAAATTTTTCCCAGAAATTTGAACTTCTTGCCAAAAATT
-TTTGTTGGATAATTTGAATTTCCGGCAAAAATTATCTTATAGTGAGGACA
-CAATCAATAGTTTTGGTCAAAATTGTATTGTCAAATTTTTGATGTGTGTT
-GGCAATTTTGGCAAATTTGCCGAGCTCGGCAAATTCGGCAAATTTGCCGA
-GCTCGGCAAATTCGGCAAATCTACTTTTTGAAATTCGCCAAATTTGGCAA
-ACGGCAGAAAAAAGTACAATTGAGATTTGAGGTACACAAGACTTACATCG
-AAATTAATCTAATTAAAAGAATATCACTTACCATATTCATCATAGCATAT
-ACTGCATTCAGTAACCTTCATCGCAAAAATAGTCTAGACACTGACCAAAC
-ACTACACACTTGATGCTATTTATATACTTTCTATGCTGAGCAATACAGAA
-CATGCGATGTGAGGAATCTTAGGTAGCAGAAGTACAAAAAGATTGACATG
-TGATTAAATTCCTAATTTGTTCCTTATCACATTTCCCATATGTCAATTAA
-TTCGTAGATAGATGCTATTGATAAAAGTTTTTCGAGAATTTGTAAGATAT
-GAAAATAATATTCCTCATTTTTAATTTAATGATACAGTACTTTGAAAATT
-TCAACAATTTCAACAATTTTTAACACCTATGTTATCATTCATATACAACA
-ATTTGTTTAATACAGTAATACATTTCCACCCACGTGGTATTAATACAGTG
-TTAAGCTTGTTATTTTTTAAGGAAAAATTTAGAAAATTTTTCTTCCTCAT
-TTTGCTTACTTTTCAAAAAAGCGTGCAACTCCCTCATTTAAAAAAGAAGT
-GTCGTCGCTGAGGAAAATGTTAAAAATTTCTCTCATGGTGCTAAAATTAC
-TAACTAAAAACAGTAAGTATCGTAGCGAAACATTTCAAAAATTTTCAAAA
-TTTTTTATTTATAGTCAACAGTTTTGGAAGTCAATTAAAAACATTTTTTA
-CTATTTTTAATATTTAAAAACGTTTCAGTTGCTTGTAACTTTATAAGTTT
-GCCTACCGTACATTTACCGTAAAACAACCTTAAAAATGTAAGCTTTTCTC
-CCGATAAAAATCTTTACTCAGGAGTTCGCGACTCTTCTCTTACATTAATT
-TTTTCTCTAATATATTGAGCTCAAACCTAGCTGTAAAATTGAACATACAT
-ATAACTTTGAGTGCAATTTAAATTTCAGAAAACTTTCACAAACCCAAAAA
-TTGAGAATGCTCAGGACAGTTTGACCTTTCAAGAAAATTGCTTCGAGAAA
-ATTCCAAGCTTCACAAAATTGCTCATTGCCAAGTTATTTCCTTTAGTTTG
-TGGCCAACGCCTTAAAAAATACAAATTAAAAAAAAAACTCTGACACCACG
-TGATGATGCAATCAGACTCACGAACTCACGGGGTTCTGCCCTTCCTCATT
-GAATTTTTCGCGCTCCATTGACAATCACCCGCCGTACAACACGTGGGAAA
-GTCGTGCACTCCACAAGGACAAATACATTTAGTTTTACAACTAAAATCGA
-GCCGCGACGCAACACGCAACGCGCCGTAAATCTACCCCAGATATGGCCAA
-GCCGAAATGGCCTAGTTCGACAAACTCTTCCATTTCAATTTATGAGGGAA
-GCCAGAAATCCGTGCGAACTGCGAGCCTAACGCTCTTTTTCAAAATATCG
-TATAACTCGGAAAACAAGCCATATTCCCAGTTCCTGTTTTATTTCGAAAA
-ACAGATAATACAAAAGAAATATCTGAAAATTAAGAATAACATGTTTTTAT
-TAAATACTTCTTTGTCTATATTCCATATAAAAAGAACCCCATGCGAATGA
-AACACTCACTATACATTCAAAATGAATTTCGCCATCTACCTTCTCGCTTT
-CATCGCCTGTCTCGCTAACTTTGGATTTTCACAGGGTAATCCAGGACTCT
-CATTTGATCCAGAAGAAGATTCAGTAAATATTGTAAGTTTTCGGATTAAT
-GGTTACAACATCTATAAGATTGTTTAGAATGGCAAAGTGCCAGTGGGAGC
-AGTGAAGACGTTGGTTAATGATCTTGTGAGCCCTACTATTGCAATTGTGG
-AGAAAACATTATCCTCATTGTCAGTTTAAGGAGCTACGGGAGGGCTCCAT
-CCATCTCAAATGTTTCAAATAACTCATATTGTTCTTTTATCTGGGAGTAA
-ATAAATTACATATTGGGAATCCTTTTCTTTTTGTTGTTAACCAAGTTGCC
-GGTTGCCAAATTTTTTTGGGTTCGGCAACTTCGGCAACTGCCGGTATCAA
-TGTCAAACATTTTGAAGCTTAGAAAAAAGCATTCAGAGAGCCTGAAAAAT
-TCTATAATTTCACTTTAAACGAAAAAAATACCATACTTTTTTACCAAAAC
-GCTCAAAAATATAATTTCAACAAAAAAACATTGAAACCTGGTTGCCGAAT
-TTTTTTGGGTTCGGCAATTGCCGGTTGCCGTTAACCTCGGTTGCCGCACA
-GCCCTGATGTGGAACTCTGCAGGCCTAGCGGCATCCATGTGAAGGAAGCG
-TATTGTATTTATTTTTAAACATAAATTAAAAAATCGATAAAACCTTCATA
-TATATAAATTGTTTAGACCGGTGAATAAAATGAGACGATGCCACGCGAGT
-TGGCGAACGCTTTTCTCCGAAGATCCAAGTCAGGACGTCGTCGATGGGCG
-GGACCCGGTGGGCGGAGCTTAGTCGGATAGCGCAGCAGACAAAATACGGG
-CGGTGCGTCGAGATCAAGTGCGTACTCCTCGACGGAAAGGGAGCTTGACG
-CGTGGATTGCGTTCTCGTCGGATGAGGAAAGATCTTCTGAGGAGGCGACC
-GGAGCCAGTGGTGGGAGCTCTTGTAAAAGGCGTTCTCTGAAACAAATAGT
-GGTGTTAAGGGGAAATGCGATGGGAAATCCGAGTAGTTGATGTCCGCGGA
-ATTAATTTTCTCGGGGTTTCATGGAAATTTAATTCCGCGGATTTCAACTT
-GCCGAGTTTTTATTCGATTTTATGAAAAAAATTACACGAGAAATTGTTTT
-TTTTAATTAAAGTATCCGAAATCCCCGGAAACAGATTTCCATAGAGAGAG
-GTCACTAGAGGTTTCATGGAAATATGTATTCAAGGTCTTAAACTACCCAA
-TTTTTTTACCTCGATTTTAACAAATTTCAAGTAAATTTGAATAATTCTAA
-CCAGTTTTGTTGTTTTACACAAAAATTCGGGTTCTTTAATCCGCGGAAGT
-AGCTTTCCAGAGGTTTCATGGAAATATGTTTCCGGAGATTTCAACTACCC
-GAGTTTTTTATCTCGATTTCACACATAATCGGCATAAGAAACTACAATTA
-TTTGTTTTCGGGGAAACTTTAAAAAACCCCAGAAAGTTGAATTTCTAGAA
-ATTAGCTTTCCCGAGGTTTCATGGAAATTTGTTTTCGCGGATTTCAACTA
-CCCGAGTGTTTTACATCAATTTCATCATAATTGACATAAGAAACTACAAT
-TATTTGTTTTGGGCGAAAGCTAAAAAATCCCCGGAAATCTGGATTTCTAG
-AAACTAGCTTTCCCGAGGTTCATGGAAATTTGTTTCCGCGGATTTCAACT
-ACCCGAAATTTTAATTCAATCTTTAAAAAACATCCAGTTTTTGTGACATG
-TTCTTCAGTTAAAAAAAATCAGAGTGTTGGAATCCTAAATTTCTAAATTT
-TCATAGTTTCCGCGGATCGAATTTCTAGAAATTACCTTTCCCGAGGTTTC
-ATGGAAATTAGTTTCCGCGGATTTCAACTTCCTGAAGTCTTCATTGGATT
-TCAATATAATTCGCACAATAAAAAAAGCCAAAACGCGAGGATCCCTGGTA
-GTTGAAATCCGCAAGAATAGTTTTCTCTAGTTTGAAAAATTTACTGAAAC
-CCTTACTTTTGCTTTCCCAAGAATTCGAGTTGTTCCTCGAACAATTGCTT
-TGCAGTCCCAATATTCGGCGAAAATTTCGATGGTTCACTATTCCGACGGT
-GCTCTTCAATTTTTCGCAAGTTTGCTGATACCTGAAAAATCGATATTTCA
-GACTATCTGTGCCAAAAACTAATTTATTAATTTACCTTCTGACTAGCATC
-CTCCAGCTCAACAATGTTATGAATGGTGGCTTTATACTGTTTCAGCTTCT
-CCTCAATTAAAGTCTGAACACAACCCGTTTGCCGTGCCACGTCATTCAAC
-TGCTCCTGAGCATGAGCACTATCTTGTCGGCGGAGCACACATGGCCCGAA
-GATCAGAGCCAAGTTGTTGCAGCCCATTTTGTTGACGGCTTCCTGGTCGG
-CGACACGTGCCAAATGATACATTAGGCGATCGAGCACGGCGCGGTTCGGT
-TTTGGGAGAAGCTCGATCATTACGGAAAGACAACGGACACGTTCACCCAT
-ATCCTCCACTTCTGTAATTTTTTTTTTTGGACGAAAAAAAACAACAAAAA
-ATATCATTTTGACAAAATGTTAACTTTCAGAAAATTTGAAAATTGATTTA
-TTTTTTTTGTTTCAATTTTTAGGTTTATGAATGAATCCGATTTTTTTTTG
-TCGAAATTTTTAATAAGAGCCCTAGTAGGCATGTGGTGTGTGTGTGTCTC
-ACTTCGGCTTGATCTACGTAGATCTACAAAAAAATGCGGGAGAAGAGACT
-CAGAGTTCTTAATGGATTTCGCATGGTTAACAATATGCTGACGTCACTTT
-TCTGGGGAAACAATTTCCGCAATTTTTTGTAGATCAAACCGTATTGAGAC
-AGCATCTCTGCCTGGCTGCGGACGCCTCGTTTTTCCCTTGGAATTTTTTT
-GGCGCGAAATTCAACTTTTCAAGTAAGTGCGAATATTTTCAAGTGAGACT
-GTTCAAAATTATTTTGCTGCCAAATTTGAGTTTGCAAATAAATTATTGAG
-CAAAATTCAAATGTTCAAATATTTTCTTTCGAAACGTAATGAAAAAACTC
-AAAGTTACAAATAATTTGGCGCGAAATTTGAGTTTTCAAATATTTCTAGT
-GCAAAATTTGAATTTTTCGAATAATTCTGGTCCAGAATTCAAAAATTAAA
-AAAAAATTAGTTTGAAGCGATGCTCAGGTTTTCATAGAGCTTCCATGTAG
-GCGTTAAAACGCCTGCCTGCCTGCCTTATGCCGCGCCTAATGCTTGAATA
-TACGTAAACTTTTTTTCATTTCTTAATTTGATTTTCAACAAGTTGATAGA
-ATTGAGAAAATTATAAATTTGTAAATTTACTTAAAAATGCAAAAAAATAG
-GCAGGGTTCAGGCAGGTGCCAGGCCCTGAAACAGCGCCTGCCTACCATGA
-AAGCCTATCGTAAAAAATCCAAATTTAATTTTTAATTTTACTAAAATTTC
-GATGGCTCGTTTTTTTTCAAACATCACAAACCTGAAACATTCAAAAAATT
-TTCATAGAGATCAAAAATGATAATTGGTTCGGCGAGTTCTCGGAAGAACG
-CCTTGACAAGTGTAGTTAGCACATGAACTCCAATATCCTCAAGATTCACA
-GAATCCGCATCTGAAACTCCGAATTTGATTTTTTTTTTTTCAATTTTTCT
-GCAGTTCAACAATTACCTGCAGTCGATTCAATCACTTTTCTGATACTTCG
-AACTTGGGGTAGAGATCCACTTTTTCTGAAATTACGGGCGCAAAAATTTC
-AATTTCAAAGACCTTCAGGTATTTCCGTACCTATAAACTCCTTCCACAAA
-CAGGGCACGTGTCTCAATTGCAAAAAAGAGTCGGTCCAAGAGTGTTGGCA
-CAGTATGATCATCATCGACAATTGATACTAAAGAGGCGCCAAAGAATCTT
-CCACCATTTGTCTGAAATTCAATATTTATAATAGCATTATAATAGCATAT
-TTGGCTGTAGTTTGTAGCAGGGGTCAGGCAAATTGCCGATGTTGCAAATT
-TCCGGCAAATCGGTAAACCGGCAAACTGCCGGTTTGCCGAATTTGCCTAA
-AAATTTTTGGCAACTTTTTTTTGGAATTTTCAGAATTTCCATTTTAATCG
-GCAAAATTTTACGCATCGTATGAATTTTCTTACATTTATTTTGAAAAGTA
-AGCAAATTCTATGAAAACATCTGAAGTAAACGAGAAAAAAAAATTCAAAA
-AGGCACAGTTTTAAGTGTTTCCGTCTTATAAAAAATCCCTCTAAACATTT
-CCGGCAAATCTGATATCCGGCAAATTGCCGGAATTGAAAATTTCCGGCAA
-ATTTTGATTCTGAATTTTTCAAAAAAACTGTTGGCAAAATACAAATTTTA
-TTTTATTTTCAAATATGTTTTTTTTTTCAGAAAAGTAAATTTTTTGCCGG
-GAATCAAATAATTCTTGAAAATGTTTCAAGATTTTTTTGCCACGAAATCA
-GACGTTTTCAGAACAGTTTTAGCGGAAAGTTAAAAAAAAATTTCAAAATT
-TTTGGCAGGAAGTAAATATTTTTCAGAACATTTATCCGAACAGTTTTGGC
-TGTAAATTCAAATGTTTAGTTTTCAACAACTCTTAGCGGAGAATCCAATA
-TTTTTCAGAATTTTGGAAATTAAAAATTTATCGAAAATTAATTGCAATTT
-CTAAGAAAGCAGTTGTAATTTTTTTTTTCAAAAAGCTACCGAAAAAATCT
-GGCAAATTTGGCAAATTTGCCGAGCTGAGCAAACCCGGAAAAACGCAATC
-ATTTTCTATACTTTTTGGATCATCAAAATTACTGAATTCCTACAATTAGT
-ACACGTCAGATTTTTCTATAAGCTCCGTTTGGTCTACTTGTATAAAGCTC
-GAAATATCTCAATGTTATGTTATTTTACTAGATTTTTTTGGAACAAAATC
-AATAATTTCGGTTAAATTATATTGTTCATTTTGTGGTGTGTGCGTGAAAT
-TTCAAAATTTGCCGAGCTCGGCAAATTCGGCAAATTGCCGCACACCCCTG
-TATTACTCACCTTCGGATCAATCGCCTTTCCAGTCATCTGACACGGATGT
-GTGACCTTCGGCTGACACTTTTTATGACACGATATCCGGCACGCAACACA
-AGTGTACAGCTTCTCATGGTGCCATATTAACTGATTACACACTTCACAAT
-AAGTCGGCACATGGACTGCTTCGGCACGGAATCGGTGACCAGCATGTACC
-TGGAATATTGGAATTGCGTGGGCAGGGGAAACTAGTTTCATTGAAAATTT
-TTTTTTAACTGCTGAAATTAGTCCAAAATGACATGTTATATGTACTTTTC
-TCAAAATGTGTGAAAATTGCACACTGAATTAATAAATAATATTATTTTTG
-TAAAAACATAAAAAGGGGAAAAGTCAGCGGTAAAAAAGTAAAAACACTCA
-GAGTTAGATCTTTTGACCTCCAAAATCCATGAAAATTTGCTTCATTTTTT
-TCATAGCTGTGACGTCGTGGGCGGCAATTTCCGTTCGGTAAATTTATTTT
-CGGCAAATACGGCAAATTGCCGATTTGCAGTTTGCCGGATATCAATTTGC
-CGGAAGTTTTAAAAGGGATTTTTTAAAAATTCCAAAACACTTAAAACTAT
-ACTTTTTTGAAATGTATTTTTACTATTTTCTCTAGATATTTTCATAGAAT
-TTACTTACTGTTCAAGCCCACAGCTTGCCGAAAATTTCCGGCAAACTGTC
-GGTTTGCCAAAATTGCCGAAAATTTAAGAAACGGCAATTTGTCGGTTTTG
-CCGTTTTCTAAAAAAATTTAAATTTCGGCAATTACTGTATTTGCCGTTTG
-CCGAAAAACTAAATTTGCCGCCCATCGTCACACAATACAAAAAAATTGCG
-CGGCTTCTGGAGATCAAATCTGACAGCTTACTGTATTTATAACTACAAAT
-TCACGCTGTGTTTTTCTCTAATTCACGTGGTGTCAGGGTGTCTCACTTCG
-GCTTGATCTACGTATATCTACAAAAAATGCGGGTGAAGAGACGCAAGAAT
-GTGCTAACGTCACTTTTTTTTTGAAAAAAAAAAAATTCCCGCATTTTTTG
-TAGATCAAACCGAACCGTAATGGGACATCCTGGCGCCACGTGCTAATAGT
-AAGTCACTACATTCTTACCGCCGCTACATCTGATTTTACACGCTTCTTTC
-CAACTTTCTGAATACCAATATTTTACACAATTTTCTCGGATTTTGATATA
-TAATACTTTCGCGGGCTTCTGGCTTCCCTCATATTTTCAAATGTAAGAGT
-TTACCGAATTAGGTCATTTGGGCTAGGCTACGGCGCGTTGCGGCTCGGTT
-TTCATTGCAAAACTAAATGTATCTGTCCGATTGTCATTGGAGCGCGAAAG
-GAAAGCTAGAAGCCCATGTATTAAAAAATCGACTTACCTTTATCATTGAT
-GACTTCTCCTTCCCGCGCTTCTTTTTCGATTGCACATGAACGTATTCGTT
-CAGGAAACCTCTGGAATTGAAAAAAATTGTTTTGTTACAAACGCGCCCTA
-ATAACAATTGATCGTGTATTCCACGTTGGAAATTATACAAAATACAATGG
-AGCACTTTTGCTCGAAGCCTAACATTTTCTAAATGTTTTCTCACCTAAAA
-GCGTTAACGCCAAGTGTTGTCGGAAAGGACACACTCTCCTCGAGACAGAC
-TTTCGTTAAAAGTCCCTCGAACATTGTGATGACGTCACGGTATTTAAGCA
-CGGATTGCTCGACCTGAAATGATATGTTGCTAATTACACTTGCGTGGCCG
-TGAACCCCAAAAACTAGGCCACCTTTTGCGCCCAATTACCGATAAAACCG
-CCTCATATCCCAACAGCTCCATATGGAAAGCTCTTAGCGACTTTTTGAAG
-ACCGCATCCACTACAGTATCCCTTTTGGCATTACTCTCGTTTAGATGACG
-TGTCTTGTTGAAAATAAAAATACTGAATTGTCGGAGATCGTCGGTGGATT
-CTACAAGCATGTTTCCAGGGTCGATCTGTAAGTATTGTTTAAGTACAAAG
-TACTACTGCTTCAGTAAGCATTGTAGTTTATAGTTTGTGGTTTGTGTTTT
-GTAGTTTGTGGAGTTTTTAGTATGTAGTGTGAAGCTTGATATTCATTTTG
-CAGTACATTGACTTGGATTGGGGTGTGCTAAGATATAATATCAAAGTACA
-AACAACGAGTGACAAATTAAACATCTCAATCCGAAAACTACAAACTAAAC
-CCTACAGACTACAAACTACAAACTATATCCTACAGACTACAAACTACAAA
-CTACAAATCACAAACTACAACCACGCAAAAGAACGTTACCTACCTGTTGC
-TTGGTTTTTGTTAAACTGAACGTGCCGGTCGATGGAATTGGTGAGGAGGA
-TTGCCGCTGCTTGTGGGGCCTGGAGTTTCAATTTTTTTTTGTTTCAATTA
-AGATTTTCCTCAAATGTTCCTTACATCAAATCCCATGGCCGTTTCGGTGA
-ATGCAGCCGAGTTGGTGATCGAACTGGTGACGTGGGATTGCACGGGATGG
-AGGAGGCGAAGACGAAGCATTCCTTGTGCAGGCACATTTTGCATCCTGGA
-AGAGTTCAAATTACGGCTTCTAGGTCATGGTGGCCGTGGCCGAGGCTTGA
-AGGGATGCTAGGTCAAGTCTGACGTCACATGTGGTTTTTCTAGGACACGT
-TACAAAGATTTCGAAGCGCCCAATTTTCGGAGAGGTTTCTAGGCCATGAA
-AATGTTCTAAATTTCAGGTTTCTAGGCCAGTAGAGAATTTTGAGGTTTCT
-AGGCCAGTAGAGAATTTTAGGCCATATCTGACGTCACACTTTTTGGGACG
-CGCCTAATAACGATGGTGGACCTCTATTCTAGGAGGAGCAACACATTTTT
-TACGAATTTCTAGAAGATGCAACTTCTGCTACTAGGCCACTCATGTGGTG
-CGAGGCTGTCCCATTACGGTTTGATCTACAAAAATGCGGGAACTTTTTGC
-CCAAAAAAATGTGACGCCGGCACGTTCTTAAACTTGCAAAATCAGTTGAA
-AACTCTGCGTCTCTTCTCCCGCATTTTTTGTAGATACGTAGATCAAACCA
-AAATGGGACCACACACACACACAAAACCCACTCTGACACTTGTGCGCCTG
-TGAGATGAAGTTCGTCAGGTGCCGATTGCAAAGAGCACATATCTCCTGCC
-GATGAAGTCGTGACATCTTGAATTGATGGTCTTTTGCGACGAACACGTCC
-GGCGTCAGTTCACTGGCAAAACTTGGTCCCGGAGACGGTTCATCCTCGTC
-CTCGTTCCTGCCAAAAAGTGCCTTCAAATTCTTTTTTGCCTTCTGGAATC
-CCAACTTTCCAGCGCCTCCTTTCTTTTTGGAATGTGTTGGGCTTAGCTGA
-AAATTCAAAAGTTTTTAATATTATAAGTAGAACCCTTACCGTGAACGAGT
-CATCACATCTTGACATTGAGAAATTGTTGGATTCGGTACTATTAGCCCTC
-CGTAACATTTTTAATTTGGTGGTTGAAGCCGTAGGGGCCAGAGATTGCCG
-TCTATGATGGGATAGATCAGCTCCTTCAATGAGCTTCAACTTTGTGTCTT
-CCAGGATAAATGTGGCGTCCACGTCGACGGCGTCATCGCTGAAAAAAGGT
-TTGCGTGTTACGGTAAGCGAGAATTATGGCAGAGGTGGGCGGAAATTGCC
-GTTCGGGAAATTTTTTGTCGAAAAATTGCCGGTTTGCCGAAAATTTGAAT
-TCCGACACTTTGTCGGTTTGCCAGAAATTTTCAATTCCGGCAATCTGCCG
-ATTTGCCGGAAAATTTCAATTTCAGCAAGTTGTCGATTTACCGGAAATTT
-AAATTCCGACAATTTGCCAATTTGCCGGAAATTTCAATTCAGGCCATTTG
-CCGATTTGTCGGAAATTTCAATTCCGGCAATTTGCCGATTTTCCGGAAAT
-TTCATATCCGGCAATTTGCCGATTTGCTTGGAAAATATCAATTCCGGCAA
-TTTGCGAATTTTCCAGAAAATTTCAATTCCGGCAATTTGCAGATTTGCCT
-GGAAATTTTCAATTCCGGCAATTTGCCGATTTACCGAAAATTTCAATTCG
-GCAATTTGTGAATTTTCCAGAAAATTTCAATTCCGGCAATTTGCCGATTT
-GCCTGGAAAATTTCAATTCCGGCAATTTACCGATTTACCGAAAATTTCAA
-TTCGGCAATTTGCGAATTTTCCAGAAAATTTCAATTCCGGCAATTTGCAG
-ATTTGCCTGGAAATTTTCAATTCCGGCAATTTGCCGATTTACCGAAAATT
-TCAATTCGGCAATTTGTGAATTTTCCAGAAAATTTCAATTCCGGCAATTT
-GCCGATTTGCCTGGAAAATTTCAATTCCGGCAATTTGCCGATTTACCGGA
-AATCTCAATCCGGCAATTTGCGAATTTTCCAGAAAATTTCAATTCCGGCA
-ATTTGCCGATTTACAGGAAATTTCAATTAAGGCAATTTGCCGCTTTACCG
-GAAATTTCAATCCGGCAATTTGTGAATTTTCCAGAAAATTTCAATTCCGG
-CAATTTGCCGATTTGCCTGGAAAATTTCAATTCCGGCAATTTGCCGATTT
-GCCTGGAAAATTTAAATTCCGGCAATTTGCCGATTTGCCGAAAAATTGCA
-ATTCTGGTACATTGCCGATTTCCCAGAAAATTTCAATTCCGGCAATTTGC
-CGCTTTACCGGAAATTTAAATTCCAACAATTCTGGCACATTGCCGATTTG
-CCAGAAAATTTCAATTCTGGCAATTTGCCGCTTTACCGGAAATTTAAATT
-CCGGCCATTTGCCGATTTGCCAGAAAATTTCAATTCTGGCAATTTGCCGC
-TTTACCGGAAATTTAAATTTCGGCAATTTGCCGATTTGCCGAAAATTTAA
-ATTCCTAAGAAACAGTGGCCGAGATCAGTTTTGACGTCACTTCTCTTCCA
-GAAAATGCACTAAAGTGATGTGACGTCATGACTGAGTTTCTAGGCCACGT
-TTCGTTTGATAAAATTGGCGGAGGACCTAATTTCCAATGGAAAATAAATT
-CAATTTTTTTAAATTTCATAATTTTCTGAAAAACTCACTCCTGAAAAGCA
-TCACTCTCTTCCGAAATATCATCATCAAGCCCATCCTGCGTAGACTTATC
-ACTATCCGAATCATCATCCGAAAGAGCAAAAGCCGCCAGAGAGCTCGGAT
-CACTCAAGTCGAACTTTGTAAGATTCACAGCATGAACCTTCCGAACTCTA
-AACGGTGACTTCTTAACGTTCAAGGCTCCATTGCCCTTTGGAATCTCGCC
-GACTCGCTTGCGAACCGATGCTCCGCGATACGCAGACTGCAGAGCTATCA
-CCGATTCTCTTATCGATAAATATTTCTGTCGTTGCTTGTACTTCTTCCAA
-TTACACTGTATCGTTTGAGCTGCTAAGGCTTTTTTCCGAACTTCGGCTCT
-TGCAAATGATCCTCGAATCAATGCTTGGATCTTGATAATACCCTCTTTCA
-TTCTCAAATATCGCTTTCTAGCCAACATTGTCCTGAACCATCGTTGAAGT
-GTATCGATTGATTGCATAATTGTCCGATGCAAATGATCATCGAGTATCAA
-CTTTTCAGCGTCTCTCATAAAAATCTTATTGGTTCCATATTGAATATTAT
-CATTATCAATCGATGCATGGGAATGTATGTACTCTTTCACATCGTCCACA
-GTACTATCCCTTCCGTTTCGCAAAAGAATTCGGTATTGCTGGACAAAGCT
-TGGATACTCAATTCTCACAGAGTACCCGGCTCTCCGAATTCGAACGGTCT
-CGAGCATTCCGGTGTAGCGGAGCTGGCGGAGGATTATGTTGTCGTCGAAG
-TGGTTGGCGATCTATAAAATTTTAGGTGAGTGGTTTTTGTCAATAATTTC
-TACTTATATTCAGTCATATAAATAAAAACACATATAAGAAAAGTACCAAA
-AATTTCGATCACCTAATTTTTTTAATTTTTTCTATACTCTTACTAGTATG
-AAAGAGCAGGATACAAAAATAACTCCACAAGTGATAAACCACCTTTAATT
-GGATTAGTGTGTATCACTTTGAGTAAGCTAATATTGAAGGTTTAAATGTG
-GACTACCTAGCCTAGCAAGAGAGGTCCTGTAAGTAGACTTCAAAAATATA
-GATTATCTTATGAACATATGAACTTATAAACAAACGTTGGTCAAAAAGTA
-GGTGTTCAAAGATTCCACCAAAGTTTACAAACTCACCTTATCATTATTAC
-TCTTAATACACCTTATAAAATACGGCGTCGCGTTGGCCAGTGTGCTCATC
-AACCTCGTCAACGAGTACTCGAACTGCTTTGAAACCGACGATGGCTTCTT
-GGCAAGCCTCCGTCCTCCGATAGCCTCCTTCAGAATTTGCAGCGATTTCA
-GCAAGCTCATTTTGTCGTCAGACTTTCCCGCCGGGGTACGCCGTGCTTGA
-TTTCTAATCGTGTTGAACATGCTGGTATCACAAAAGTCTGGAACTTCACA
-GCGAAGTTCGCCACGTAGAAATGCGGAGAGAGCAGAGTCCGAGCCACGAC
-GGGGAGACGTTACGATGGAGTCCATTACTCGGAGATGGCCGGCGGATTCT
-GGAAATGTTGAATAATTATATTAAGGGCAGGATAGCTCAGTCGGTAGTGG
-TGGCCGCTAGCAATCTGGAGGTCACGAGTTCAAGTCCGCCTTCAACCCCT
-AGGTTCACCAAGCCTCTATTGGAAAATGGAGCAATCCACGACTGGATTAT
-AAGCCACAGCCTTCGGCTAGGACGTGGCTTAAATTGTAGCCCAGTGGGAG
-CACCACCAGGTAGTGTACCTGACTCCCAGATCCGCAGATACACTCAAAAT
-AAAAAAACTGCGTGGCGTGTACTGCAGAAAACCTAATATTTAGGCCCCGC
-CTTTTTCTCGTCCACTCACGGAGAAAAGGCAACAATTTTGAACCCAACCA
-ATATCAGGCCGCCGACATCTCACGGGTTCCGCGCGCCGCTGCGTTTAACT
-CGCTGTGGGCGTGGCGAGCTGTCTCCGCTTGCTGCGAGTTAAACATTGCG
-GCGCGCGGAACCCGTGAGATGTCGGCGGCCTGATATTGGTTGTGGTCAAA
-ATTTTTTGCCTTTTTTCCGTGAGTGGACGAGAAAAAGGCGGTGCCTAAAT
-ATTAGGTTTTCTGCAGTACACGCCACGCAGTTTTATTATTTTGAGTGTAC
-TTGAAGAACGGATCGTCCTTTAATCCTTTAATTATACATTGCATTTTTTT
-TCCACTTCTACGACTTCGAAGGGGCGCATTTACGCGCGATGGTCCCGCCA
-CCCACCCCAAAAATCAATGGGTGGCGCGTGCCGAGACCATCGCTCGTAAA
-TGCGCCCTCCTTTAAAGTCGTAGAAGTGGAAAAAATGCACTGTAGAAATG
-AAGAATACCATACTTTTTGTGTTAATTTTTTCTATAATATCGTAGTTGTC
-CATTTATTTAAATCTTCCCACTTATTTAACTAAGGACTTCTAACGCTTAT
-TCCAGTTATTGGTTCCGATTAAATCTACGAAAACTTGCCACTTTTCTGCA
-GTTTCCTTGTCGATTGCTTGAACGCGTTCATCGCCCGAAACACACTTCTC
-AGCACATTCCACCTGTGCACCGCCACCGGATCGATTCCCAGCAGGGTCTT
-CATCACTGAGCTCGTACTGGACTTCAGAGCGTTCAACACATCCTGTCTCA
-TTAGGTCCTTATTCTTTTCTCGGAAACCCTGAAATTTAGTTTTGACGTGA
-TGATGGAAGACGTTTTTTTTGGAAGTTGTGTGTTTACCGTAATTTGATAC
-TTGACTTTTCCAGCATAATGAGCCACGATGAATGCCGGCTCCTTCTTCTG
-TGGGGTCTCATAGTATTCGTTGTTCTGGAAATTTAATCATGGAACTAGTC
-ATGTAAAAACATTTGAAGGAGTTAAGGTATGTCCCGGAGGAGTGAACATC
-TTAAGCCTGACCTAGAAGTTGATCCAAGTGGCAAGCCGACTGGCCTGAAT
-CCTATTAACAGGCCTACATGTGAATATTAAAGGTGGATTAGCGCCAGTGG
-GAATTTTGTCTAAATACACTTATAACGATGCCAAACGATCGAATATCATA
-ATAAAACACTCCAAAAACTTTTAGATTTTTCATAATTTCCGGTCAAAGTT
-TTGGAACATTGACAAAATTTTGACAAATTTGAGCTTTTGAGGACATCAAA
-ATCAATGTAACATTTTTTTGGACCCCTACAATGTCTTTTTACGAAAAATT
-AAAACAAAATTATAGTATAACAAATAGAGAAAAAAATTTTTTTTAGTCGA
-ATTTGTGTCACTTTTTGACTGTAAATAAAAAAATTTTGAAAAATTTTTGA
-AAAGTTTTATCATGAGATTTGGTCATTTTGGGAGCATAGGAGTGGTTTTT
-AACAATTTCCACCACCGGCGCTACTCCACCTTTAATCGATAATCGATTGC
-AATTTTTTCATACCTTCAAAAACTGATTTAACTTCGCCAGCATTGAGTCA
-TCTGTTCCATTATTGATATTACTCTCCTCATCGACTAGCCTGAGAATTCC
-ATATGGTTTACTCTGAAAATTCATCGGAATTTATATATATGGATATATAT
-ATATATATATATATATATATATATATATATGTATATATATACATGTATAT
-ATATATATATATACAGTGTGGGAAAGTTCTATAGGACCCCCCCTAATTTG
-AAGGTTTGAGGAACTTCCGAAAATTTTTTTGAAAAACTGCTAATGCCATT
-CGTTTTTAAATTGAAAAAAACCTATATACATTTTTTTCCAGAAGTTTATC
-TCAAAAACTGAGGTCGCGCTGGAAAAAACGTCAAAATCCAGTGTGAAACT
-TCTATAGGACCCCCCGTTTTTTTTCACGATTTTTACTAAAATCAACAGAT
-TTTGGAATTTTTGACAAAGCTCAAATCAAGTTTGAGTTAGAAATGAGTTC
-AGATAAGCAGTTTTGACTTTAAAAAATTAATACGAAATGTTCTCGTGGGA
-TCTCCAGACTGGTTCTGATTCTTCCGAACTTTGATGTTCAAGTCTGTTTC
-AAGCTTCCTGGTGCTCTCGGTAATGCCAAAACTTGATAAACTCTCTTTAA
-CAAGTTCCTACTAAAATTCCTAGCACACACACCATAAAAATTTTTACGCC
-ATCCCCAAGAAACCAGTCAGAAACAGCGTATTAACAAGTTGCAGTTATTT
-TTGATCAACAACAGAACATTCATATACTAAAATCAAGAAAGGATCAATAG
-TTAATCGGGTTTCCTTGTGTGCGGATGATCTCAAACAGTCTGTCCTCCAT
-TGATCTGACCAAACTTTTCAGCTGGTTGTCCGGAATAGACTTCCAAGCGT
-CGAGAATTCCTTGCTTCAACGATGCAACTGTTGGGTAAGTCTTGTTCTGA
-GCATACACGATACGGACAAGAATCCCCCACAAATTTTCGATTGGATTGAG
-ATCAGGACTTCGAGCTGGCCAATCAAGAAGGTTGATCTTCTTGAGCTTGA
-AATAGTCGCGGGTTGAGTTGCTCACATGGATTGTCGCATTATCCTGCTGA
-AATCTAAAGTCTTTTCTGGAGTAGTGACGAAGATATTTGGAGAGCTCCAG
-TTCCAAGACGTTCTGATAGTCAGTGCTGTTCATCTTGCTACTGACGAACT
-GTATCTCAAGCTTCTTCTTCTCCGTGAACGCTCCCCAAACCATCACCGTT
-CCTCCTCCAAAATTACGTCTCGAAAAAACCATTGGTTCCTTGCGCAAATC
-GCGCCAATAGTAGCGGCAACCGTCAGGCCCATCGAGATTGAATTTCTTTT
-CATCGGAGAAGACAACCTAAAACAATGATCCTAATTATTCACTCTTGCTT
-TTTTAAATTCTCACTTTACTCCAATTCGTTCCCATATTGTTCTTAGCAAA
-TTCCAATCGCTTGAGTTTATGGTCTGCAGAGAGTAACGGAGCAGGGCGAA
-GTTTCTGACGAACGATTACACCAGATCGTTTGATGACATTGAGGATGGTC
-CTTTTTGAAGCAGACAATTGAAGCTCATTGCGAATATCTCTTGCCGTCTT
-ACAGGAGTTGGAGGCAGCACGAATCACATTTCGTTCGTCACGCACGGAGA
-GAGCTTTGCGACGAGGAGCTCTTTTAGATGTACCGTAGCTCACCGGATCC
-TTCAGATACTCGCGAATACAGTGTCGAGAACGGGAAATTTTCCTACTCAT
-TTCATGCAGGGACACATTGAGCAATTTCATAACATCCAGCTGAGCGCGTT
-CAGTGTCCGAAAGGGCAGATCCTCGAGGCATTGCAAGTTAGACTGCTTTC
-GAAGTAAGCTTTCCAGCCTCTATATGTGTGCCACAACACATGCCACAATT
-CCACATTTAATAATTCACGCAAAAAATAGTAAATAACATCTGTGAGGGAC
-AATTTAACTTGAAATATTGGTCCCATGGAACCTTGTAATCAAAGAAAAAC
-GATTTGATTCCTGATAAGCCTTCCATTGTTTCCTGCTGCATATTTTGCCA
-AATCAGCTTGACTACACAGTCGAAACATCTAAAGTGCGTGCTAGGAATTT
-TAGTAGGAACTTGTTAAAGAGAGTTTATCAAGTTTTGGCATTACCGAGAG
-CACCAGGAAGCTTGAAACAGACTTGAACATCAAAGATCGGAAGAATCAGA
-ACCAGTCTGGAGATCCCACGAGAACATTTCGTATTAATTTTTTAAAGTCA
-AAACTGCTTATCTGAACTCATTTCTAACTCAAACTTGATTTGAGCTTTGT
-CAAAAATTCCAAAATCTGTTGATTTTAGTAAAAATCGTGAAAAAAAACGG
-GGGGTCCTATAGAAGTTTCACACTGGATTTTGACGTTTTTTCCAGCGCGA
-CCTCAGTTTTTGAGATAAACTTCTGGAAAAAAATGTATATAGGTTTTTTT
-CAATTTAAAAACGAATGGCATTAGCAGTTTTTCAAAAAAATTTTCGGAAG
-TTCCTCAAACCTTCAAATTAGGGGGGGTCCTATAGAACTTTCCCACACTG
-TATATATATATATATATATATATATATATATATATATACATTTGAAACCC
-AAAAAGGACTTATTGGACTTACCTGAAACAGCTGCACACACTCCGTATTA
-TCAGTATACTCGATATTGGTCCAAGAAATGCCCTCCTTCAAGTACTCCTC
-TTGTTCAAATTGGAAAATATGTTGATTGAAATAGGACTGAAGTTTCTCAT
-TGGCATAGTTGATACATAACTGTTCAAAGCTGTTGCATTGAGACCCAACG
-TCTTCAAATCCGAATATATCCAAGATACCTGAAAATTACTTCAATTTTTA
-ACAATTGATAATTAATCTAACCTATATAATATCCCTTCCCAGCTGAGAAG
-TCCTTCTTCAGCAATGCCTGATTAATCCTGAGGACTATATAGTGAAACAA
-AGAGTTGTATATGCACTTTGCCATGGCATCTCGGGTGTTGGTGGCCTGAA
-ATTAATTTTTTTATCTTAAATTCTTAATTTCACTTCTGTATATATATATA
-TATTACCTCAGAGACACTATATCGCAAAACTACAGTTTCTGTCTTCATAA
-CATGTCGTTTCATAGTGAGAGCCTGCATGAGAGTGTCGGTTTTGATGTGA
-AGCAGATTTGCGACTAAATCCACGACTTCTTCATTTTCAATATACCCACT
-TTCATCGCTATGGTAGCCATGTCTCTGGAAAATTATAGGAAAAATAAAAA
-AAATTTGATGATGTTATTATATTAGGAATCCTCTAAACAAGGGTTTTCAG
-GTTTTTTGGTTTTACGATTATTCAAATTTTTATGGAAATTATTATAATTC
-AAATAATTTTCGTCACTATTATAGCCATGTTGTTGAAATAATATGCTATT
-TTTAAAGGTGGAGCACCGAAATCTGGAAACTATTTTTAAATGAGTCCAAA
-TTTTCCCCTGATTCCGAATATCTATGCGAAAAAATTTTAAAAAATTCATT
-TATCAAATTTTTCAAATTTTTCAAACGCCGAATTTTCGCGCCAGAAACGC
-CGTGTGCACGTGGTATCAGAGTGTCTCATTTTGGCTTGATCTACGCAGAT
-CTACAAAAAATGCGGGAGAAGAGACGCAGAGTTCTCAACTGAGTTCGCAT
-GGTTAAAAATGTGCTGACATCACATTTTTTTGGCATTTTTTGTAGATCAA
-ACCGTATTGGGAGAGCCTGGCACCACGTGAGTAGGCAGGCATTTTTTGCC
-TGACTGCTTGCGGGTGCCTCGTTTTTTCCTCAGAATTTTTTGGCGCGAAA
-TTCAAATTTTCAAATAATTTTGAATATTTTCGAGTGAAGCTTTAAAAAAT
-TGTTTGTGCCAAATTTGAGTTTGCAAATAAATTATCAAAAAATGTGCTGA
-CGTCACGTTTTTGAGCAAAAAAATCCCGCATTGTTTGTAGATCAAACCGT
-AATAGGACAGCCTGGCACCACGTGCGTGTGTCGATTTACGAGATTTGTGT
-ATATTTACGAAATTTTTTATCTTTATCAGACTCTGATTTCCGTTTCTCAA
-CGAGTTTTCTTCATTTTTGTATGTGATTTTTTTAAGGTCCATTAAATATT
-TTATCATCAAAACCCTAGCAAAATTTTTGGTTTTCAGTCGGTAAAATCAT
-ATAGGTAATTGGATTTTCCGTCAAGTTGTGACCTAATAGTAAGCATTGGA
-AATTTTGCCAGTTTTAAATAATTAATTGACCCTAAAACACACATTTCAAA
-AAAAAACCGATAAAAATTAAAAATTCCGTAAATATACACAAATCTCGTAA
-ATCGACACATGGCTCTAGCGCGAAAATTCAAAAACTCTTGGGTGTACAAA
-TAGCGATTTCAAGCTCAAATATAAAATCGTGGAAATTTTTTAAAAATTTT
-TTTCACATAGGTATTCGGAGTCAGGGGAAATTTGGAGTCAATTAAAAATA
-TTTTCCGGATTTCGGTGCTCCGTAGAACTCTCTGAATAAAATTTTAAAAC
-TATGGCAATAGGCAATTATTCGGTAGTTAACTTCTGAGTTGTATTTCTTT
-TTGAATCTAAACCGTCCCAATCATTTACCTTGATATATGTGATATTGCCA
-AGAAGCAACACTGCCGAAATAATCCCGAAGATGGTCTGCTGGGTCTTTGC
-ACAAAATCCGACGGAGCTCATTGCATGCCTCAACCTATCAAACTCATTCC
-GCTCGTTCACACCTTCCAGTGCAAATGGCTCGTTCTGGAAATTTTTAATT
-TTTTTTTAATTTTTTAAAAAATCGCTTTGAGGTCAGCGAATGTATCCCAT
-ATTCGCTCCAAACTTTTCCCAGCTCACCTGATTCAAATACTTATAATCAT
-GTGGCTTCAACAAGAAATATTTCTTCCTTTCTTCCTCGTCTGCACCCTCC
-AGAAGGTAGTAGAATACGTGGTAGTTTCTGAAAAAAATATTAAAGTCCAA
-GTGAGACACCAAGGGAGTTTATGTACCGTTCTCCTTTAGTTTGAAATATG
-ATGCGTGATTTTTCCAGCAGGTAGATCTCCACGTTTGCTCTGAAAAGTAC
-AAGTATAAGGCATTTTTTGTGGTATAGACATCAGGAGAAGGCTTCAAATT
-TTACGTTCAGGTCAATTTAGGTCATAGTGCCTAGTAAGTATGGTACCTAT
-AAGCTTGATTACTGCCAAAGTAAAAATTTTCCAATTCCGGCAATTTGCCG
-ATTTGCCAGGCATTCCAATTCCGGCAATTTGCCGATTTGCCAGGCATTCC
-AATTCCGGCAATTTGCCGGTTTGCCGGATTGCCGGAAATTTAAATTCCGG
-CAATTTGCCAAATTTTTTTTCATTTTCGGCAATATACTGGATTGCCAAAA
-TGTTACGGCAACTTGCCAATTTGCAGGAACTTTTCATTTTCGGCAAATTG
-CCGGTTTGCCGATATCCCAGAAATTTTCAGGTCCGGCAAGTTGTTGATTT
-GCCGATTTTCCCCGGAAATTTCAGTTCCGGCAACTTGCCGATTTGCCGGA
-AATTTTCAAATCCGGCAATCGCGGGAAATTTCAATTCCGTCAAATTACCA
-ACATGCCGGATATTCCAATTCCGGCAATTTGCCAATTTGCCGAGCATTTA
-AATTCCGGCAATTTGCCGAATTGCTGAAAATATCAATTCTGTCAAATTGG
-CAATTCGCCGGACATTCCATATCCGACAATTTGCCGATTTGCCGATTTCC
-CAGAAGTTTTCAATTCCGTCAAATTTCTAATTTGCCGGAAATTTCAATTT
-TACTAAGTCGCCTGCTAGCCTCCTAATCTCACCCGGAAACCATTCCATTC
-TCCCGATAGTTGATTTTGATGAATTTTCCAAATCTGCTACTATTATTGTT
-CGTTAATGTGACAGCATTTCCAAAAGCCTCTAGAACAGGACCAGCTGACA
-GAAGTGTCTGCTCAGTACTGCAGCCTGTTGAACCTTTCTGTGATAGCGAT
-ATCAAATGGGACATCAGATGATTCGTGGATTCCGTTTTTCCCGAACCACT
-TTCCCCGGAGATTACCACGCATTGATTTTCCTTGATACGGAGCATGCTGA
-AAAAATTGTTTTTTTAAAAATTAGTAGTGACATTTAGTTAATCCAGCATC
-AGAATGTATATCTCTGAAATTTTTTTTTTTTGAAATCAAAAGTGCTTTGA
-GGGTCTTGAAACGAACACATAACTGCAAAAAAATTGGTGGCCGAGTTTAT
-AATCGGCCACTTGGCAAATATACAAGCCAATACACAAAGTGAGCACCTAC
-GTGGCCGAGTGAAGAGAAAACTCGGCCACCGATTTTTTTTGGTCACTTGA
-AATTTCAAAAAATAGTAACTGGGTTCCGGTAAGAACTTAGAACTCACTTG
-TGGTAACAGACATCGGCGATTGCAAAAATGTGCGGTGGTAGTGAGCCGAG
-CCGCTTACTTTGAAAGTATAGCCTAGCATATTTTGGGTTGTAGATCGGAA
-AAAAGCAAAACGGGTTCACGGCTACTAGAATTGGACCGATGTACGTGTAA
-ATGTGCCCATTCGCGAATCTTTCCCGCAAATTGTCCAAGAGGGTTTGCTC
-CGTGAGCTCTGGCAAGTTACAGAGATCGGCGTACTCGCGGTCCTGAAAAA
-TTTTAAGGTTTAAAATTTTTTTAAATATAAAAATATTTAAAGGTGGAGTA
-CAGGAAATCTTTTTTAATTACTCCAAATTTTCCACTGATTCCGAATATCT
-AAGTAAAAAATTTTGAAAAAATTTCCCTGATTTTGTATTTAAGCTTGAAA
-TTACGATTTTCATTTGTGCCCGCACCACTTTTTTCAAATACGCCCAAAGA
-AATTCGCATTGGAGCGCGTTTGCATCGTTTGATTTTCGTCGTTTATTTTA
-TTTATTTTCCACGGGGTTCTGGCCTTCTTCATTGAATTTTCGCGCTTCAT
-TGACAATCGCCTGCCGGACAACACATGGAAAAGTGTCGTGTACTCCACAC
-GGACAAATACATCAGTTTTACAACTAAAGACAAGCCGCGACGCGACACGC
-AATGCGCCGTAAGTCTACACAAAATCTCTCCGACCCAAAATGGCCTAGTT
-CGGCAAACTCTGCCATTTCGATTTATGAGGGAAGCCAGAATTTCGTGATT
-TTCGCCGAATTCAATTTTCTTGAACCAGTTTCAATCATTTTTGTCGAGTT
-TTTGCTAGTTTTTTTTTTGACAAAAAGGAATGAAACTGGTTAAAAAAACT
-GAATTTGGCAAAAAATAAATAAAATCTTTAAATGAAGGAAATCAAAGCGC
-GCTCCAATGCGAATTTATTTGGGTGCGCATTTGACAAAAACACGTGGTGT
-CAGGCAAGGGTGTCAATGTCCCGTAAAAATTTCGAAAACGGGACAACGGG
-AATTCCCGTTCCCGTGAAAATTTTAAAAACGGGAAAACGGGAATTCCCGT
-TCCCGTGAAAACTTCAAAAACGGGACAACGGGAATTCCCGTTTTTTTGAA
-AACACTCAAAAAACGGGACAAACTGGGCGGTTTAAAAAAAAGAGTGCATA
-GTTGGCGTAAATTTTAGTGTATTCGAGGCAAATTATAAAAAAAAACTGCA
-TTATAAACATTTTTATCGATTTTTTCAATATTAAACAGATATTTAAAAAG
-CCAAAAAATGAGGGAAAATGTCCCGTTCCCGTGAAAATTTTAAAAACGGG
-ACAACGGGAATTCCCGTTCCCGTGAAAACACCCCAAAAACGGGACAACGG
-GAAAAACGGGAAACGGGAATTGACACCCTTGGTGTCAGGCTGTCTTATTT
-CATTTTTATCTACAAAAACAGCGGGAATAGTTTTCCAGAAAAATTCTAAC
-GTCTCTTAACCAGGCGAAATAAAATGAGAAGTCTGCGTCTCTTCACCCGC
-ATTTTTTGAAAATCAAAAAAAGAGACCGGGCACAAATTAAAATCAGGGAA
-AATTTTTTTAATTTTTTCACATCTAAATTCGTAATCGGGGGGCAAATTTG
-GAGTGATTTAAAAATATTTCCCAGATTTCGGTACCCCACCTCAAAAAAAA
-ATAATTAAAGAATTGCCTTACCTGTGGCTGAACCAAGAATTTCGTAAGAA
-AAGCGTCAATCGATGAGGCGACCTCTGCACTTCCAAACCGAGTGCCGCCG
-GTTGCCGCCCGATAACCGCGGTGTCGAAAAACAAATCGATTTTTTGGAGT
-GGCACTGTCCACCACTACAGGCAGTCTTGACCAGATGGCCTGTACCGCGA
-CTGGGTATTCCCCGGGGTCTAGGCGGCGTTCTTTATAGGTTTGACCGTCG
-GGGGTGCCCATCATTTCGAAGAGGTCAAAGTCTTGTACCGACTGGCCTTC
-TAGTTCTGGAAATTTTGACTTTAGAAAAGAAATCATTTTTTTCCTTTTTT
-TTTTAAATTAGCCCGTGGCTTTTTTCAAAATTAAAAGAAAATTTGAAAAA
-ACATTGCATTAGAGCGCGTTTGCATTCACTCCATGCAGTCCAATTTTGCT
-GGGAGCTTGAGTGTCTCATTCGACTTGATCTACACAGATCTACTAAAAAT
-GCGGGAGAATAAAATCCACTGATATTGTATGTTTAAGAATGTGCTGACGT
-CACATATTTTTGTGCAAAAAATTCCCGCATTTTTTGTAGATCAAACCATG
-ATGGGACAGCCTGGCACCACGTGAGATTGTGTCGACAAATTTTTGTTGAA
-GATGTATGGCCAAAAACGGCACATTTAAGTAATTTATCAGTAGAGCGCGT
-TTGAAATTTTTTTAAAAATTCTTTTTAAAAAGAGTTCCCACTACCCCAAG
-TCCTCCGATTTTTCTAAAAACTAAGAGAAGGGAATCTACGACCCTGAGCC
-TTTAAAACCTTACCAGCTCTCCCGGCGAGCACTTTTTCGATGAGCTCCTC
-CGTCGTGCACCGCTTATGAACCTCCAAGTGTACCGTATCATTTTCACAGT
-CGGGATTGAAGCTGTGCATATAGACGGCTACCGTATGTGTGTGTGCATCG
-TCTGTCGCGTTGATTGTGTGAGCACGTCGGGGAAAACATCCCGTCGCTCC
-AGCTGATATTGAGTCAAATGACATTTAGTTAATCCAGCATCGGGATGTAT
-ACGTCTGTAAAAAAAAATTTTTTTTGAAAGTAAAAGTGCCTGGAGGATCA
-TGCAACGAACACAAAAATTTCACAAGACCGCGAAAAAAATTGGTGGCCGA
-GTTTTCTCTTTCGCGGTCACTTAGGAAATACTAAAATCGCACGGATTTCT
-GGCTTCTCTCATAAATTGAAATGGAAGAGTTTGCCGAACTAGGCCAGTAT
-AGCTCGGCCATATCTGGGGTATGTTTACGACTTTCCCACGCGTTGGGCGA
-TTGTCAATGGAGCGCGAAAAACTCAATGAGAAAGGCCTGAACCCCGTGAG
-ATCGAAATGAAAATTTGCTAAATGGCCGAAAATTGAAAACTCGGCCGCCA
-ATTTTTCCACACGGCCACAGGAAAAATCGTAACAAAAATTGAGAGAAATT
-TATTAGAAAAAATCTGAAAGTAATTTTTATTGCACCGTGGCCGCAAAATG
-TAAAAACACGGCCACCGATTTTTTTAATGTGGGGAAAAAGTTGGTGGCCG
-AGTTTTATATTTTGCGGCCACTTAGAAAATATTTAGATCGAAGGGAAATT
-TTGTTGAAAATACGTTTAACGAAAACCAGTCAATTTTTGTTACATGACCG
-AAAATTGAAAACTCGACCACGGATTTGTTATGCTTTATAAATTTTTGAAA
-CTATTATTTTTTGATTCAGAAATTTTTGGAATTGAAAAAAACTCGGCCAC
-ATTTTTTTTCTCACGGTCACAATTTTCTTTGTGATCGTAAAAATGGAAGC
-TCGGCCATGGTGGCCGAGTTTTTTTCGCTGCCACTGGTAACACGTGGTTG
-GGTGAAGAGAAAACTCGACCACCGGTTTTTTTTGGCCACTGAAATTTTTA
-AATTTCAAAATATTTTAAATTTTGCTGCAATCTTTCACCACAACCGCGAA
-AAAATGAAAACTCGGCCACCAATTTATTTATTTTCACTGGGAGAAAAAAT
-ATTGTTAGCCAAGTTTTCTTTTAGGCAACAGAAAATCAAAAAATGAGCGA
-TTTTTGTTACGTGGCCGTGAAAAGAGAAAACTCGGCCACCAATTATTTTT
-AATTTGAGGCACTGTTGTAAAATCTTATAAAAAAACAGGTTTAGTACATT
-GAACTCAAAAATAAGGAAGATTTTTGGAAAAACAAAAATTGCTGGCCGAC
-AGCTGGAAAAAACTCGGCCACCAACTTTTTCCGGTCACACAGCAAAATCT
-CTCGATTTTCGATGTTTGAATATTGAAATCTGGGTTGGATTTTTTAGTAT
-CATTTCATTTCCGGTGGAGAAACGAGGGAGAGAAAAAGAGAAAAAAGATT
-TGTAGTGTCCCGGGAAGCTCTCTTTCTCATGTGGGAAGAAAGTGGAAGAA
-GCTTCTGCAGCAGCAGCAGCAGTGGTTCACGAAAGAGAGAGAGAGACATG
-TTGGACATGAAAATGATGAAAAATAAGAAGATGAAGAAGAGAATTACACA
-CTACCACCACAACACAGATTATTTTTATCACGTTTTGAGGGGGCGCTTCA
-CACAATTTTCATGGCCTAGAAATTTAAATTTGGTGGCCTAGAAAATACTA
-TATTAATTATATTAATTATTCTACGAAATTTCAATAATTTAAACGGGAAA
-ATTTATTTTAAAAAAGCCTAGAAGAGGTTTTGAAATTGGTGGACTAGGAA
-ATGAAAAATTGTGTTTTTGGAATTTTCTAGGCCATTTGAACTTCCTGACG
-TCCACAATTTTCATGACTTCGAAATTTGAATTTGGTGGCCTAGAAAATCA
-TAAAAACTAAGAAATCGAGAAAAAAGCATGGATGAAATTTTGAATTTTAT
-AGGTCATTTGAAATTTGTGGCCTAAAAAATGAAAAATGATTTTTTTTTTT
-TTGAATTTTCTAGGCCACTTGAATTTCCTGACGTCCACAATTTTCATAGC
-CTAGAAATTTAAATGTGGTGGCCTAGAAAATAATTAAAACTAAGAAATCG
-AGAAGAAAAGCGTGGAAGAAGTTTTGTATTTTCTAGGCCATTTGAATTTG
-GTGGCCTAGGAAATGAAAAAAAGATTTTTTAGGAAATTTCTAGGCCACTT
-GAAGTTGGTGGCCTAGGAAATTAAAATTTGTGTTTTTGGCATTTTCTAGG
-CCATTTGGATTAGGTGGCCTAGGAATTGAAAAGTAGTTGTTTTGGAATTT
-TCTAGGCCATTTGAATTTGGTGGCCTAGGAAATGAAAAAATATTTTTTAA
-AGGAAATTTCTAGGCCATTGAAGTAGATGGCTTAGGAAATAAAAAAAGGT
-TTTTTAAAGGAAATTTCTAGGCCATTGAATTAGGTGGCCTAGGAAATGAA
-AAATGATTTTCTTAAAATTTTTTAAGCCACTTGAATTTGACGGCCTAGGA
-AATGAAAAATGGTTTTTTGGTAATTTCTAGGCCACTTGAATTTGGTGACC
-TGGGAAATGAAAAATGATTTTCTTGGAATTTTTTAGGCCACTTGAATTTG
-ACGGCCTAGGAAATGAAAAATAGTTTTTTGGTAATTTCTAGGCCACTTGA
-ATTTGGTGGCCTGGGAAATGAAAAATGATTTTCTTGGAATTTTTTAGGCC
-ACTTGAATTTGACGGCCTAGGAAATGAAAAACAGTTGTTTTGGAATTTTT
-TAGGCCACTTGAATTTGACGGCCTAGGAAATGAAAAATAGTTTTTTGGTA
-ATTTCGAGGCCACTTGAATTTGGTGGCCTGGGAAATGAAAAATGATTTTC
-TTGGAATTTCTAGGCCATTGAATTAGGTGGCCTAGGAAATGAAAAATGAT
-TTTCTTAAAATTTTTTAAGCCACTTGAATTTGACGGCCTAGGAAATGAAA
-AATGGTTTTTTGGTAATTTCTAGGCCACTTGAATTTGGTGACCTGGGAAA
-TGAAAAATGATTTTCTTGGAATTTTTTAAGCCACTTGAATTTGACGGCCT
-AGGAAATGAAAAATAGTTTTTTGGTAATTTCGAGGCCACTTGAATTTGGT
-GGCCTGGGAAATGAAAAATGATTTTCTTGGAATTTTTTAGGCCACTTGAA
-TTTGACGGCCTAGGAAATGAAAAACAGTTGTTTTGGAATTTTTTAGGCCA
-CTTGAATTTGACGGCCTAGGAAATGAAAAATAGTTTTTTGGTAATTTCGA
-GGCCACTTGAATTTGGTGGCCTGGGAAATGAAAAATGATTTTCTTGGAAT
-TTTTTAGGCCACTTGAATTTGACGGCCTAGGAAATGAAAAATAGTTTTTT
-GGTAATTTCGAGGCCACTTGAATTTGGTGGCCTGGGAAATGAAAAATGAT
-TTTCTTGGAATTTTTTAGGCCACTTGAATTTGACGGCCTAGGAAATGAAA
-AATAGTTTTTTGGTAATTTCGAGGCCACTTGAATTTGGTGGCCTGGGAAA
-TGAAAAATGATTTTCTTGGAATTTTTTAGACCACTTGAATTTGACGGCCT
-AGGAAATGAAAAATAGTTTTTTGGTAATTTCTAGACCACTTGAATTTGAC
-GGCCTAGGAAATGAAAAATAGTTTTTTGGTAATTTCTAGGCCACTTGAAT
-TTGACGGCCTAGGAAATGAAAAATAGTTTTTTGGTAATTTCTAGGCCACT
-TGAATTTGGTGGCCTGGGAAATGAAAAATGATTTTCTTGGAATTTTTTAG
-GCCACTTGAATTTGACGGCCTAGGAAATGAAAAATAGTTGTTTTGGAATT
-TTTTAGGCCACTTGAATTTGGTGGCCTAGGAAATGAAAAATGATTTTCTT
-GGAATTTTCTAGGCCACTTCAATTTGGTGGTCTGGGAAATGAAAAATGAT
-TTTCTTGGAATTTTTTAGGCCGCTTGATTTAAGTGGCCTAAGAAGTTAAA
-AATAGTTGTTACGGAATTTTCTAGGACATTTGAACTTGGTGGCCAAGGAA
-ATGAAAAACTTTTTTTTTTGGAATTTTCTAGGTTTCTGTAATATTAATTT
-ATTCATTTAAAAAATTAAAAAACATTAAATTTTTTTTAAATTTCGTGTTT
-CAAAAAAAAAATCAAATTTGCCCAAAACTTCAAAAATAAGCTAAAAAATT
-GTAAAACGATACAGAACGGCTAATAAAACTTGAAAATAATAAGCGTGATG
-AGTCGGAAAGAGCCGCCGGCTGGGACCTTCTTTTTCTCTTTTTTTCTCCT
-CTCCCATCCCGAGCAGGAGCAACACAACGAGAGAGCACAACAAGAAGAAA
-AAGCAGATAGATATATAGATATATGTTGTCTTCTCTTCATATTCTTTCTT
-TTATCTTTTCATTCGAAACAACACTTGGTTCATTTCTCCCGTTGGACGGG
-GGGGGGGGGGGGGTGACGCGGGAGACGAAAAAAAAAAGAAAAATTGGGAT
-GGGAGTTGGAGAATGTTTGGAAAAAGATTGATTGATCAATCAATTTGCCA
-GCCGAGTCTCGGCTATTTTCGGAAATCGGGGCTATGCAAATGCGCCCTAC
-TGATAAAATGGGACGTGTCATTTAAACTCCTTGGTTTTTTAAAAAGAAAC
-GCAAAATCGGCAAATTTCCAGTTTGCCGATTTGCCAGAAATTTTCAGGTA
-CAGCAATTTTCCGATTTGCCGATTTGGCGGAAATTTCAATTTCGACAAAT
-TGCCGGCTTGCCGAAATGCCAAAAATGTCCAGGTCCGGCAATTTGCCAAT
-GTTGATTTTTGGCAAGTTGCTGGTTTGCCGGAAGTTTTCATTTTCGGCAA
-ATTACCGATTTGCCAAAACGCCAGAAATGCTCAGGTTCTCTAAACCGCTG
-GTTTTCCGGAAATTTTTCATTTTCGGCAAATTGCCGGCTTGCCAAAATGC
-CGGAATTTTTCAGGTCCGGCAATTTGCTGATTTGCCGGAATTTTTCATTT
-TCGACAAATAGCCGGTTTGCCGAAACGCAAGAAATGCTCAGGACCGGCAA
-TTTGCCGATTTGCCGGATATTTTCATTTTCGGCAAATTGCCGGTTTGCCG
-ATATGCCAGAAATGTTCAGGACCGGCAATTTGCCGAATCGCCGGAATTTT
-TTATTTTTGGCAAATTGCCGATTTGCCGAAAGGCCAGAAATGTTGCGGTC
-CGGCAATTTGCCGAAATGCCATAAATGTTCAATTTCGGCAATTTGCTGAT
-ATGCCGGAGTTATAAATTTCGGCAAATTGCCGGCTGGTCGATATGCCGGA
-AATTTTCAGGTCCTGCAATTTGATGATTTGCCGAAAAATTTATTTAAAAA
-AAAAATTAATTTTCGCCAGACAGGAAGTCTCTAAAATCTCATTTAATAAG
-AAGAAACAAAAGAAACAAATAATGGCCTAACAAGTTTCGAGTTACAGAAA
-CCTAGGCCACTTTGAACACCGGCGTGGCCTAGAAACCCAGTTCCACAAAA
-ATAAGAAAAAATTAAAACTCGGCCACATAATCTAGGCCAGGAGCATACAA
-ACACTCCACGAATATTAAAGACTCTTTCTAGGTTAGTGGCCGTTAACGAT
-GGAAAACTCGGCCATCTGCCAATTTTGTTGCTTAAAATTGGAAAAATAAA
-GTTTTTTTAACTTCAAAAAAAAAAGATCAAAAAGTGAAAAGCGGGGATTT
-TTCTCACACAATTTAATAAATCTGTAGCCGAGTAGCGGAGAGCTCTCGGA
-GCTCAACGTGAATTTCTATTTGGACGGTAAACATACTCAGCCACCCCACC
-CCAGCCCACCGTTACTGTCTTTTTTTTTCTTTTTTATTATCAACCAGCAC
-TTATCACCTTTATCTTTGTGTGATCCCGCGCCGCGCAAGAACGAGAGAGA
-GAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGA
-GAGAGAGAGAGAGAGAGAGAGAGAGAGGGATATTGGTGAGACGCAGACAA
-TTAGAGTCACTCGTGGGCTCTTTCACACATGTGATATTGAACGAGAAATT
-GCGCACCTAGGCCACAAAAAAAACAGTGTATTCGATTTCATGATAGGGGA
-GAAGCTGGCACGGTGCCAAGTTTCAGAAAAAATATGGAATTTTTGCTTGA
-AGCATGGTGAATCAGACGTGCTTACGTCACAATTTTTCGGGATAAATATT
-CCCGCATTTTTTGTAGATCAAACCGCAATGAGACATCCTGATACCACGTG
-AGGTTAATTAAAAGTATTGATCGGGATTTTGAGCGTCAAATATGGTGTAT
-TTACCGGCAACCCTGATGCGCCAGATTTGACGCGCAAATCCTTCATTTTA
-ATAAAGTTGGGCGTCAAATGTGATGCCTGAATTTTCAATTTTTTGAAATG
-TTTTGATTTCGTGAAAAATAACGGCGAATTTCAGAAAATTTATAGAAAAT
-TTTCATTTGTTGCGACCAAAAAATCTTAAAAACGACCAAAATTCTCAGGA
-AATTCACATTTTTCGCCGAAAAAACCATTTTGCGCGTAAATTCTGATGTA
-TTTTGCCGTAGGCTATGTGTGAAAACACTGCCGGTAATACGTCATATTTG
-ACGCGCAAACCACAAAAATCCTCGAAATTATTCCGGGTGCACAAAATTCT
-GAGAATGCGTACAGCGCAACATATCTGACGCGCAAAATATCTCGAAGTGA
-AAAATACAGTAATCCTTTTCAAATGACTACTGTAGCGCTTGTGTCGATTT
-ACGGGATCTCGACTTTCGAAATGGATTAAAATATATTATTTATCAATAGA
-ATATTACAAAAAGAAGTTAATTTCGTAAATCGAGCCCGTAAATCGACACA
-AGTGCTATAGTAGTAATTTTAAGAATTACTGTAGTTTTCGCTACGAGATA
-TTTTGCGCGTCAAATATGTTGTGCAGTACGCATTCCCAGAATTTTTCGTT
-CCCTTTCACAAAAATCTTCAAACTTGCGCGTAAAATTTGGTGCATTGGTG
-CCTGTGAGGGGTTCACCTATACAAGTGGTGCCAGGGGCTGTCCCATTACG
-GGTTGATCTACAAAAAATGCGGGATTTTTTTGCCCAAACCATGCGAAATC
-AGTTGAGAACTCTGCGTCTCTTCTCCCGCATATTTTGTAGATCAACGTAG
-ATCAAACACTCTGACACCACGTGGGCCGATGATGTAAGTGCACCAGATTA
-CACGCGCAAAAACTGAAAATCTGAAAAAAAAAAAAGCGAAAACTGTCAAA
-TTTGAGCGAGTTTTTTATTCCACGAATCACAAGAAAAATCAATAAAAAAT
-CGATAATTAAAAAGTGAGTATCATATTATTCGACAACAGAATTTCCAGTT
-TCATCAGTGAGCATTGTAAGTATACGATGAGCCATCGACGGTCCAACACG
-TCTCCCGTTCTCTGCCACAAGTTCGCCAATCTCTTGAATAGCGAGCGAGT
-AGTCCATTTTCGAGTATTTATCGATTGCGGCAATCGGATCAGGGATTAGT
-TCGAGAATTGCACGTCGCTGAGCATCCGACAGCCGATCGATTGTTGTGAG
-CATTTTCGACCACCAATCCGTGACGATTTCCGAGCGACTTCCGATCACAA
-TTCCCTGGAAAAAAATCATCGGGGTTTCATGCTTTTGATCTATTTGATCT
-ACAAAAAATGCGGGAATTTTTTGCCCAAAAATATGTGACATCGTCAGCAC
-GTTTTTAACCATGTGAAATCAGTTGAGAACTCTGCGTCTCTTCTCCCGCA
-TTTTTTGTAGATCTACGTAGATCAAGCCGAAATGAGACATTCTGAGTCTT
-GACACGACAAATTCCCGTTAATTACATACGGATGTGAGCCTTTGTTGGAT
-GTGAGAGAGTTTCCAGGTTTTTCTCGAAAGCTTTTCTTAAAATTTCATTT
-AAAAAATAATTTTTTAACGAAAAACTACAAAAAATCATCCGAAAAACCTG
-GAAAATCGATGAAAAACTCTGTGACAAATACAGTACTGTTTAAAGGCGCA
-CGCCAGTTTGTGTTCTGAGAATGCGTATTGCACAACATATTTGACGCGCA
-AAATATCTAAACTACAGTAATTCTTCAAATGACTACTGTAGCGCGCTAGT
-GTCGATTTACGGGTTCGGCTTTCGACAAATTTCGAAAATCGAGCTCGTAA
-ATCGACACAACCGCTACAGTAGTAATTTAAAGAATTACTGTAGTTTAGAT
-ATTTTGCGCGTCAAATTTGTTGTGCAGTACGCATTCTCAGAACTTTGCGT
-TTTCGTGATTTTTTTTTTCAAATTTTAACTGCAGTAAAAAAATAAAACAA
-CATAAATTTCATTTAAAAAAAACGATTTTAGCGCTCTTTAAAGGCGCACA
-CCCGTTTGTGTTTTAAAAAAAAAAAATGTCGCGTCGAGACCAGATTTCTG
-CAGATTTCGCGCCAAGACCCAACCTTATCCCCCTGATACTGTAATTTGTG
-GCCTCCTGCCCCTCCTGCACCACCACCACCGCCCCCATCACTTCCAGCGT
-CGAGCTTCTTCTTCTCCTGTCTCGCCAAACTTCTCAAGTACTGAGCAGTG
-AATAGTGCCAGCTCGGCGATCGTTTCGATTTGCACAATTTGTGCACGATG
-TTGCTCGTAGATTTGCAGCGATAAATTGTGCAATTTCTTCTTTTTCGCAA
-TTTCTGCCCTGCCGAATGAGACGATGAGCATTGTGCAGCGGCCACCGTTT
-TGAAATCCGGATTTTTGCTGGAAAAATAAAATTTAAATGAGATTTTTTTT
-AGGTCTCGCAGCGATTTCTCTGGCTGTTTCAATTACGGTTTGATCTACAA
-AAAATGCGGGAATTATAAAAAATGTTTGCCCGGTAAAATGTGACGTCAGC
-AAAGTTTCTTAACGCTGCGAAATCAGTTGAGAACTCTGCGTCTTTTCTCC
-CGCATTTTTTGTAGATCTACGTAGATCAAGCTGAAATGAGACACACTGTG
-TGTGCAAACACTATCCACAATACATCATATTTGACGCGCAAACTCTAATT
-TTTTTTTCGCTGCGAGACCTAAAAAATCTCAAACTTTCCAGTGAAAATCC
-GGATTTTCTTCATTTTAAAAAAGTTGCGCGTCAAATGTGATGTGCCTGAA
-TTTTCGCTTTTTTGAAATTTTTTATTTCGTTAAAAATGACGACGAATTTC
-TGAACATTTATAGAAATTTTAAAAATTTTCATTTTTTGGGTTAAAAAAAT
-CTTAAAAACAACCATAATTCTCAGGAAACTCAAATTTTTCGCCGAAAAAC
-CCATTTTGCGCGTGAAATCTGGTGTATTTTACCGTGCCTAGGCTGTGTGA
-GAACACTGCCGGTCATACATTATATTTGACGCGCAAACTGCAAAAATCGT
-CGGAATTATTTCGGGAACACAAAATTCTGAAAATGCGTATCGCGCAACAT
-ATTTGACGCGCAAAATATCTCGTAGCGAAAACTACAGTAATTATGTAAAT
-GACTACTGTAGCGCTTGTGTGTCGATTTAAGGGCTCAATTTTCAAAAAAT
-CGAGATCCCGTAAATCGACATAAGTGCTATAGTTGTTATTTAAAGAATTA
-CTGTAGTTTTCGCTACGAGATATTTTGCGCGTCAAATATGTTGTGCAATG
-CGCATTTTCAGAATTTTGTGTTCCCGGAATAATTCCGACGATTTTTGCAG
-TTTGCGCGTCAAATATGATGTATGACCGGCAGTGTTTGCCCACATCGCCT
-AAGCACGGTAAAATACACCAGATTTTTCGCGCAAAATGGGATTTTCGGCG
-AAAAATTCGAATTTCCTGAGAATTTTGGTCGTTTTTACTATTTTTTAATC
-CAAAAAAAAATGAAAATTTTTAAATTTTCTATAAATTTTCTGAAATTCAC
-CGTCGTTTTTCACGAAATAAAAAAATTTCAAAAAATTGAAAATTCCGCCA
-CATCACATTTGACGCGCAACTTTTTTAAAATGAAGAAAATCCGGATTTTT
-CTGGGAAATTTGAGATTTATTTAGGTCTCGCAGTGAAAAAAAAATTAGAG
-TTTGCGCGTCAAATATGATGTATGACCGGCAGTGTTTGCCCACATCGCCT
-AAGCACGGTAAAATACACCAGATTTTTCGCGCAAAATGGGATTTTCGGCG
-AAAAATTCGAATTTCCTGAGAATTTTGGTCGTTTTTACTATTTTTTAATC
-CAAAAAAAAATGAAAATTTTTAAATTTTCTATAAATTTTCTGAAATTCAC
-CGTCGTTTTTCACGAAATAAAAAAATTGATAAAATACACGATAAAATACA
-TCAGATTTTACGCGCAAACTGGCAAAAAAATTGATTTTTTGGCTTTTTCG
-GACTAAACATTAGAAAAAAGACTATACTCCAACAATTTTTTTCAGTTTTT
-TTTTTGAAATTTTTTTTTTTTCAGTTTAAAATGTTTTCATCGCTTTGTTC
-GTTTATTTTTGTCTGTTTATTGTGATTTTGTGCGAAATTAATGTAAAAAT
-TTCCATATCCAACACTGTTGTGTGATTAATTCGGATAGATAAAAAATGTT
-CAGCATGTTGAGTTTAGTTTTCGTCGTCCAATTTAGCTTTTTTTTGATTT
-TCAGTCAAGATTTTCTTTCGCCTTCCGCTTTTTGACTTTTCTATGCAGTA
-ATGACCAGTCTTGATTTCTAGCTTTTAGTGTTTGGTTTACCATTCTGCTA
-TTACATGAGTCACACCTTATCACTAATATAAATGCAGCATAATTTCAGAG
-TGAGCAAGCCGCGAGTATTAAACCAGCGCTGTTTTAAACTGATAATGATT
-GCAGTTTCCTTCATTCTCACCGAATATCAATTTTTATTCATTCCAGAGTC
-TCTCGAACTATGGAAAAACAACTAAAAGCTATGTCCGTCTCGGACAAACC
-TGCTGCCCCAGCTGCCCAAAAGCTTGGTACCGCTCCGCTCGCTGCAAAAA
-AGACGAGAAATGAGGAGTGGGGAACCAAGGTCAATATCGATACCAACATT
-CGCAAATTGAGTAAGTTTTTATTTTACAATTACCAGTCGTTCGAGCTTAT
-ATATCAATATTTTTTAGCGATCAAACCGAATCAGCCAATTTACAAGTACG
-CTGTGCAAGTGAACTACGTCTTCCGGAAACCTGATGGAACTGAGGCGACA
-ATCGAAATGTCCAAATCAGCCAAAAAGGGAACGGAGCACGACAACGACAA
-AACACGCTGCCAGAACGTTTACAATGAGGCGATCAAGCGTTACGATGAGC
-TGAAAACCGGAGGACCGTTTTTCTACGATCGTCAAGCCTCTTTGTACACT
-CTGACCAAATTGAAGAATGAGGTGAATTCGATTTTTTGCTTAAAGTTTAA
-TATTTTGCGTTTCAGAGCATCTCTTTCGTTGTTACTGACAAGATTTGCAA
-GCGACAAAACTTCAAAGAGGCACAGTTTGTTCTCAAAAAGGTGGATCAAT
-CGTTCCAGTCAACATCGAATGACGTCATCAAGACAACCAACTCGTGCCCA
-GCCAATGCCGACAAAACTTTGCTTGAGGCAATGAACATCATTGTCTCGGG
-ACCAGCGTTCGAAAAGTATGCCGCTTTCAGAGATAATCAAGCTATTTCAT
-CTCGTTTTCAGCAAAAATGTTATCACCGTTGGAGCATGCGTTCATTACCT
-CATCGACCCAACTGGAGTCGAGTAAGAAACTTTAAGAAATTATCATATTA
-GTATTTAATTGTTTTTTCCAGCGTCGCGTACAAGGAATACCCTGAAGGAC
-AACTCTACTCAGGAGTTGGTGTTTCAAAGTCGGTGAAGACATTGGAAGGA
-ACGGACAAGAAAGTTCCATCACTCTTCATGACAACTGAAAGTTAGTTTTT
-CAGAAAATCTAGATTTTTTTCAAAATGTTATAAAATTGTTAATTTTCAGT
-GAAGACAACATTGTTCCATCCGGATTATGCCCCACTTGTGGAACTTTTGC
-AAACGTTCAGAGGTTTCAGCACAACTCTCAAAGCGAATTCTCCAGCCGCG
-CAGAGAATTGAGAAAGCCTTTGTTGGACTGGATGTTGTCTTGAATTACGG
-TGTGCACAAGGGTCTCGGAGAGGATGGTGTCGTTATGAAGATCCGTCGAT
-TCCACACGTCAGCTAAGGAGACATGTTTTGAAGTTGAGAAGTCAACTCGT
-GAATTCACGAACGTCTTTGACTACTTCAAAAAGAAGTATGGAATCACTTT
-GAAGTATCCCGATTTATTCACCATTGAAGCGAAAGGGAAACAAGGAAAAA
-TTCATTTCCCTGCGGAAGTTCTCCTTCTCTGTCCGAACCAGACGGTCACG
-AATGATCAAATGATCAACAATGAGCAGGCGGACATGATTAAGGTAATTTT
-ATATTTTAAAATCTGAATAATATCCCGAATCCTTTTTCAGATGTCAGCCG
-CACAACCACATATCAGAAAGACGACAACTGATACTATCGTGAGAAACGTC
-GGATTGGCTTCCAACAATATCTATGGCTTCATCAAAGTTGAAGACCCAGT
-CAACCTTGAAGGAATGGTTCTTCCAAAACCTAAGATTGCGTTTGCCGGTA
-ACCGACTCGCTGATTTGGCAAATCCGAAGTCTAGATTCCCCACCGACTTC
-AATCGTGCTGGACAATATTACGATGCCAAGGAATTGACGAAATGGGAACT
-GGTCTTTGTTCAAAACGAAGAAGTCCAGTAAGTTTCAGTTTGTAATTTTT
-CATTTTATTGACTCAATTTCAGAGGACTTGCTAAGCAGCTCGCCGATGAA
-ATGGTGAATAATGGTATGAAATGCAGCAACCCAACGATGAGTTTCATCAT
-TAGAGGTGATTTGGAACCAATCTTCAAGAAAGCGAAGGCTGCTGGAACGC
-AACTTCTCTTCTTCGTTGTCAAATCTCGTTACAACTATCATCAGCAAATC
-AAGGCGTTGGAGCAAAAGTATGACGTGCTCACTCAGGAGATTCGCGCTGA
-AACCGCCGAGAAAGTCTTCCGTCAACCACAAACTCGTCTTAACATTATCA
-ATAAGACGAACATGAAACTCGGAGGACTGAACTATGCTATTGGGAGTGAA
-GCGTTCAACAAGCCAAATAGATTGATCGTTGGATTTGTTACTTCTCAACG
-AGTTGGTGGAAATCCAGATGTGAGTCATGTGTTACAGCTGCATAATCATA
-TTTCATTTTTTCCAGTATCCAATATCAGTTGGATTTGCTGCAAATATGCT
-CAAGCATCATCAAAAGTTTGCTGGTGGATACGTGTATGTTCATCGCGATA
-GGGATGTTTTCGGATCCATCATCAAGGATACTCTCTTGACAATCTTCAAA
-ACATGCACTGAGCAGCGCGGAAGACCAGATGATATCCTTTTGTATTTCAA
-TGGAGTTTCCGAAGGTCAATTCTCAATGATCAACGAGGAATTCAGTGCCC
-GAGTGAAGGAGGCGTGCATGGCATTCCAAAAGGAGGGAACCCCGCCATTC
-AGACCACACATCACCATCATCGCCTCATCAAAGGCTCACAACGAGCGTCT
-GTACAAATCCGACAAGGGACGTATTGTTAATTTGGAGCCGGGTACGGTCG
-TGGACCATACCATTGTGAGCAATGTCTACACTGAGTGGTATCATGCCTCA
-GCTGTTGCTCGCCAAGGAACTGCAAAGGCTACCAAGTTCACTCTCATCTT
-CACCACTAAAGCAGGCCCACAAGCTGAGCCATTGTGGCATCTCGAGCAAT
-TGACCAATGATCTTTGCTACGATCATCAGATTGTCTTCCATCCGGTCGGA
-CTTCCCGTCCCACTGTACATTGCTGATCGTTACAGTCAACGTGGAGCAAT
-GGTTCTTGCCGCCAATCAAGGGTAAGTGACAGTAAAATGTATACGACATC
-TCATTTATTATTTTCAGTCCAATCTACAATGAAGGACAAATCGATCTCGC
-GGCTACCAACAGTGCATATGGCTACGGAGAGAAGAAGCTCTTCACCACTC
-GTTTCAATGCATAATTATCTGTACTCCTCCGTTTCTTTTACTTGGCTGTA
-TAATGTTTTATTTCCGTCAACCCAGAATACTTTCGCTATGATTGTATATT
-TTTTAGCATTTGGTCATTGTAATTTGTAATTATTGTCGGAATGGATAAAA
-TGATTTAAGAATCAAATGCATCGCTTCTTGGACAATTCCTGTTGATAATC
-TCATTCTGATATTTTCAAAAGTTGTGGTATTGATTTTAAAAATTAAAATA
-TTTGCAGCTGCCGCTGTGACTGGAGAAGTTGATGTTTTATTTCTTCCAAT
-TCAGCTGTTTGTACCTGTTTTGTAATGTTATTACTTTCTTTCGAACAAAA
-TGTCATTCTTTTTCTGGCAGAAAATTCCGCTTTTTAAAAATTATTTTTAC
-AACATTACAGATGGATCCTTCTGTTGTGTCTCGATTGGAGAATGTTGCGA
-ATCGAATGGAGAATATATTGCTGAAATATGACTCGAACAAAAAAGGCAAT
-TAAATAATTGTTCTCGAAATTATAAATTTCAAAAAAATCGCTTTTTAGAA
-ACTCCGGTCGGCGCGACGCCTCAAATCATTAATCTTTATGACGATGCGAT
-CTGTGAGAATCTCGTCTCGTTTTATGATTTATCTGCAAAAATTGGAGGAG
-ATTTGAATCGCCTTGGATGCATGGTAAGGAAATATATAATATTTAATTCA
-AATTTTATCGAAAATTATGTTTCAGACTAAGAATCTATTTTTCACGCTTT
-TTTCGATGTTTTTTGTGGATTGCGTGTGGGCGCAAAAAAGCGGACAACGA
-CGAGTTCGCGACTCTTGTGAACGATTTGACGACGGAAATTGTTGCATTTT
-CCGATTTCAAGGAGAAAAATCGAAAATCCGAATTCTATAATCATATTTGT
-GGACTTGAAGCTGCGGTTGGAGGTGAAAATTTGCCCCTGATTCCGAATAT
-CTATGTGAAAAACTCTTCATTATTTTATATATTTCAGCTTGAAATCGCTT
-GTTCATCCATTACTTTTTTCAAGCACACGCCATATTCTCATTGGAGCGCG
-CCGTGTTGTGTCGATTTACGAAATTTTCCAATTTTTTCAATTTCAGTTTT
-TAAACGAGTTTTTATTTTTGTGGGCTTTATTTTTGTGGGTTTTGCTTTTT
-GGGTTAAAAAAAATCTTAAAAACAATCATAATTCTCAGGAAACTCAAATT
-TTTCGCCGAAAAACCTATTTTGCGCGTGAAATCTGGTGTATTTTACCGTG
-CCTAGACTATGTGTGAGAACACTGCCGGTCATACATCATATTTGACGCGC
-AAACTGCAAAAATCGTCGGAATTATTTCGGGAACACAAAATTCTGAAAAT
-GCGTATCGCGCAACATATTTGACGCGCAAAATATCTCGTAGCGAAAACTA
-CAGTAATTATGTAAATGACTACTGTAGCGCTTGTGTGTCGATTTAAGGGC
-TCAATTTTCAAAAAATCGAGATCCCGTAAATCGACACAAGTGCTATAGTT
-GTTATTTGAAGAATTACTGTAGTTTTCGCTACGAGATATTTTGCGCGTCA
-AATATGTTGTGCAATGCGCATTTTCAGAATTTTGTGTAAAAATTTTTGTG
-TTTAGTGATTTTTGCAGTTTGCGCGTCAAATATGATGTATGACCGGCAGT
-GTTTGCCCACATCGCCTAAGCACGGTAAAATACACCAGATTTTTCGCGCA
-AAATGGGATTTTCGGCGAAAAATTCGAATTTCCTGAGAATTTTGGTCGTT
-TTTACTATTTTTTAATGCAAAAAATGAAAATTTTTAAATTTTCTGAAATT
-CACCGTCGTTTTTCACGAAATAAAAAAATTTCAAAAAATTGAAAATTCCG
-CCACATCACATTTGACGCTCAACTTTTTTTAAATGAACAAAATCCGGATT
-TTTCTGGGAAATTTGAGATTTATTTAGGTCTCGCAGCGAAAAAAAAATTA
-GAGTTTGCGCGTCAAATATGATGTATGACCGGCAGTGTTTGCACACACAT
-AGCCTAGACACGATAAAATACATCAGATTTTACGCGCAAACTGGCAAAAA
-AATTGATTTTTTGGCTTTTTCGGACTAAACATTAGAAAAAAAGACTATAC
-TCCAACAATTTTTTTCAGTTTTTTTTTGAAAAATTCCATATTTTCTGAAG
-TTCAAATAAATATATATTTTTTTAAAGTTCAAAAAATTCAAATTAGCGCG
-TTAAAAACGACGTATTCAGGCATCACATTTGACGCGCAATTTTTTTTTTA
-AAGAAGGATTTGCGCGTCAAATCTGGCGAATTAGGTTTGTCGGCGGAATA
-CACCGAATTTCACGCGCAAAATTTCAAACCTCAATGATAAAATCGGAGAG
-CGTATTCGAGGAAATTACGTCTTTCAACGTCTCCGCCGGAACCACGACAG
-CGAACAAGTTTTGTGTTGACTGAAAAAAAAATTAAATTTTTCGACAAAAA
-AAATTAAATTTTTCAACGAAAAAAAATTAAATTTTTCAACGAAAAAAATT
-AAATTTTTCAACAAAAAAAAATTAAATTTTTCAACAAAAAAAAATTAAAT
-TTTTCAACAAAAAAAAATTTAATTTTTCAACAAAAAAAAATTAAATTTTT
-CAACGAAAAAAAATTAAATTTTTCAACGAAAAAAATTAAATTTTTCAACA
-AAAAAAAATTAAATTTTTCAACAAAAAAAAATTAAATTTTTCAACAAAAA
-AAAATTTAATTTTTCAACAAAAAAAAATTAAATTTTCCAACAAAAAAAAA
-TTAAATTTTTCAACAAAAAAAAATTAAATTTTTCAACAAAAAAAAATTAA
-ATTTTTCAACAAAAAAAATTAAATTTTTCAACAAAAAAAAATTAAAATTT
-TCAACGAAAAAAAAATAAATTTTTCATCAAAAAAAAATTCAAATTTCCGC
-GGAAAGTGCAAAAAATTTACAGAATATTCAAATCGTTCACTTCTCCCGCT
-ATCATCTTCACGCAATTCGACACATTTTCGTCGCCATTCGATGCGGGTTC
-CCAGTGATGTATCGATTTTCAGTTGATTATCGATTTTTCGCTCCACGTAC
-AGTACACTGAGTTCCGCTTCGAGGCCATCTGAAATTTTTTTTTTAATTTT
-TTTAACGATTTTTTTTTCAGAAAATCAATAAATCTATTCAGCTGTTTTTT
-TTTAACTTTTACACAATTTTCCGTTTGAAAATGTCAAAAAAATGTGTTTT
-TGAGCCACATTTTATTCAAAAAATTTTGAAAAATTCCCTGCATTTTCGCT
-GTGGGACCCAAGAAGTGCGTGTGCCTTTAAGAATATTTCAATTTTTTTAA
-AACTTAAAACAAAGATTTAAAAAATTCTGCTTTCTAAAAATAAATAATTA
-TTTATTTTTTTGTGTATTTGTTTGGAAAAAATCAATATTTATCGATTTTT
-GTGAATTTTTTTGAAAAAAATCAATATTTATCGATTTTTGTGAAATTTTT
-TGGGAAAAATCAATTATTATCGATTTGTGTGAATTTTTAAGAAAAAAATC
-AATAATTATCGATTTTTTGTGATTTTTTCGCAAAAAAATCAATAATAATC
-GATTTTTGTAAATTTTTTAATCGAAATTCGGCTTTTTCCGGTAAAAACAT
-CAAAATTTCGCAAAATTAATCTGATTTTTTCTGCGAAAAATTTAAATTTC
-TCATAAAACTTTCGAAAAATCGAATATTTTAAAAATCAATAATTTCGATT
-TTTGGTTAATTTTTTTGGAAAAAATCAATAATTATCGACTTTTTGCGATT
-TTTTTTTTGAAAAAAATCAATAATTATCGTTTTTTTTTAATTTATTGGAA
-AAAATCAATAATTATCGAATTTCAGTGAAATTTTTGGAAAAATCAATAAT
-AATCGTTTTTGTGTGATTTTTTTCGGAAAAAATTAAAAATTATCGTTTTT
-TGTGAATTTTTTGAAAAAATTAATAATTATCGACTTTTTTTGAATTTTTT
-TTTGGAAAAAATCAATAATCATCGATTTTTTTGTGAATTTCTTGGAAAAA
-AATCAATAATTATCGATTTTTCCGATTTTTTCCAAAAAAATCGATAAATC
-AATAAATTTTCCTTACGCCACGTGTCAATTACAGTCTTCCCCACGTGGCA
-AAACGTGTAGAGCTCGCATTTCGAATTGGTTGCCGCCGAAATTTCGCGTT
-CGATTTTTCGAGTTTCCTTGTCTTTCTGAAATTTTTTTTTTCTAAATTTT
-CTGAAAAATGTTCTTCTGTAAAACCTCTTTTTCCTCTCTTCTCCGCGCCA
-TTTCGCTCTTTTTTTTATCCTTTTCCAGCGTTTTTCTCTCTTTTTCAGCT
-TCCCGAGCTCGTTTCGCATTTTCTCGGAGTTCCTGAATAAGTTTTAAATT
-TTTAAGGGGAAATTTGCTATTTGGAGAGTAAATATTTTCGCTGTGAGACC
-CGTGGACCTGAAAATTTTGATTTTCCGCTTAAAATCAACTGAATTTCGCT
-TAATTGTGATGTTTTAAGCTGAAAAAGCTGAATTTTGATTTTAAAAAATT
-GAAAAAAATTAATATTTTTAAAGGCGCATTTATTGATTTTTTTTCCAAAA
-AAAATTTACAAAAAAATTGATAATTATTGATTTTTTCCAAAAAAATTAAC
-AAAAATCGATAATTTTTTTTCCAAAAAATTCACTGAAAAATCGATGATTA
-TTGATTTTTCCAAAAAAAATTCACTGAAAAATCGATAATTATTGATTTTT
-CCAAAAAAAAAAATCACAAAAGTCGATAATTACTGATTTTTTCCAAGAAA
-ATTTTAAAAAAAAACGACAATTATTGATTTTTTCCGAAAAAATTACAAAA
-AAATCGACAAGTACTGATTTTTTCTGAAAAAATTACAAAAAATCGATAAT
-TATTGATATTTTACAAAAAATCGATAATTATTGATTTTTTACAAAAAATT
-CACAAAAAAATCGATAATTTTTAATTTTTTTCAAAAAAAAAATCACAAAA
-AATCGATAATTATTGATTTTTACCAAAAAAAATCACAAAAATCGATAAAT
-ATTGATTTTTTCCAAAAAAATTAACAAAAATCGATAATTATTGATTTTCC
-CAGAAAAAATTCACTGAAAAATCGATAATTATTGATTTTTTCCGAAAAAA
-TTCACAAAAAAATTGATAATTTTTTAATTTAAAAAAAAATCACAAAAAAT
-CGATAATTATTGATATTTTACAAAAAAAAATTACAAAAAATCGATAATTA
-TTGATTTTTTACAAAAAATTCACAAAAAATCGATAATTTTTAATTTTTTT
-CAAAAAAAAAATCACAAAAATCGATAATTATTGATTTTTTCCAAAAAAAA
-TCACAAAAATCGATAATTATTGATTTTTAGGCGGAAAAGCCGAATTTTTA
-TCAATTTTTCAAAAAAACAATCGATAGTTTTAAAGGCGCATGCGCTCTCC
-TGGGTCTCACAGCGAAAAGTGGATTTTTCAAATTTTTTGGATAAAATTTC
-GCTGAAAAACGTATTTTTTTGACAGTTTTAAAGGGAAAATTGTCTAAAAT
-CAAAAAAAAATTGTTTTTTCAACAATTTTTTCAGTTTTCGTAAAAATTTC
-AGTTTTTTTTTCGCGAGAAAAAAACCAATTCTCGATTGAAAAATCAGAAA
-AAATATTTTGGTATAAAAATATTTTTGGTATTACGATATTTTGGGTCCCA
-CCTCGAAAATTTAGAGGATTTTTCAAATTTTTAAGATTTTCTTCAACTTT
-TAACAATTTTTTTCGGAATAAAAATCGATTTTCGCTGCGAGACCCAAAAA
-AAATAGATTTTCTCGAATTTTGCGATGGAACTTTTGATTTTTCGGTGAAA
-TTTTCCAAAAAAATCGCAAAATGTATCAAAAAATCAATACTTTCTGCGTC
-TCCTTCTCATCGTCGGTTAGTTTCCGTTTTTCGGGTCTCGCCACGACATT
-TATGTCAGTATTCTCTTGTGAGCTTGAGCACAACGAGTATGAGCTCGTCT
-GATTCTGACGGATCATTTCGTCAAGATTGAGCATTCCCTCATCCAGCCAT
-GTTTTTGCCGCAGCTGGAATTGCATCCTTATTCACTGCGTCGACGATGGA
-AAAGCTCGCGGAGTACCTGGAAATTATCGATTTTTTATTGATTTTTTATC
-GGTTTTTATCGATTTTTTTGATGGGGAAAAATCGGAAAAATCGATAAATT
-TCGATTGGAAAATTCAAAAAACTTCGGGTCTCACAACGAAAATTGATTTT
-TTTTCTTGGATTTTCAAATTTTTAAACTTTTGTTGTAACAACAGTGGAAA
-TTTTTCGAAAAAAAATCAATAATTATCGATTTTTTGAAAAAAGGCAATAA
-TTTTCGATTTTTTGAAAAAAAAAATCAATAATTATCGATTTTTTGTGAAT
-TTTTGAAAAAAATCAATAATTTTCGATTTTTTGTGATTTTTTTTCGAAAA
-AATCAAAAATTATCGATTTTTTGTGGATTTTTTGAAAAAAATCAATAATT
-ATCGATTTTTTGTGGATTTTTTGTAAAAAATCAATAGTTTTCGATTTTTT
-TTGGAAAAAATCAATAATTATCGATTTTTTGTGGATTTTTTGAAAAAAAT
-CAATAATTATCGATTTTTTTTTGAATTTTTTGAAAAAAATCAATAATTTT
-CGATTTTTTGTGATTTTTTTTCGGAAAAATCAAAAATTATCGATTTTTTG
-TGAATTTTTTTTTGGAAAAATCAATAATTATCGATTTTTGTGATTTTTTG
-TAAAATATCAATAATTATCGATTTTTTGTGATTTTTTTCGGAAAAATCAA
-AAATTATCAATTTTTTGTGATTTTTTTTTTGGAAAAATCAATAATTATCG
-ATTTTTGTGATTTTTTTTGGAAAAAATCAATAATTATCGATTTTTGTGAA
-TTTTTTGTAAAATATCAATAATTATCGATTTTTTTGTAATTTTTTCGGAA
-AAAATCAATAATTTTCGATTTTTTGTGAATTGATTTTTTTTGGATTTTCA
-AAATTTTAAACTTTTAAAATAAATTTTTCCATAGTTTTTTGTTGAAAAAT
-TCCTGAAATTTTGAAATTCAATTAATTTTTTCTTTAAAAAAATCGTTGAA
-AAATTAGTTTTTTGGAAAAAAAATCAGCGAAAATAGATTTCGCTGTGAGA
-CCCAATTGGGCTCCTCAAAGTCCCTGCGCCTTTAAAATATCGTTTTTTTT
-TTGTTAAATTTTCCCGCGAAATTAATCAGATTTTTTCTGCGAAAAAGTGA
-AATTTCTCAAAGAAACTTTTGAAAAATCAATTTTTTTAAAAAGAAAACCC
-CTAATTTTTCCGTTTTTCCCGCTAAAAAAACATCTAAAAAATTTGAAAAA
-TCCACAGAATTATCGCTGTGGGACCCAAAGTGCATGCGCCTTTAAGATTA
-TCGATTTTTTTCAAATTTTTCAATCGAAATCAGGTTTTTTTTTTCAGCAA
-AAATCATAATTTTGCGAAATTAATCTGATTTTTTGTGCAAAAAATTCAAA
-TTTCTCTTTTTTTACGTTTTTTCGCCAAAAAAACCATCTAAAAAATTCGA
-AAAATCCAGAGCATTTTCGCTGTGAGACCCAAGTCCGTGTGGCTTTAAAA
-ATATCGATTTTTTGTTAAATTTTCCAATCGAAATTTGGCTTTTTTTCCGG
-TAAAAAATCATAATTTTGCGAAATTAGTCTGATTTTTTGTGCGAAAAAGC
-GAAATTTCTCATAAAACTTTTGAAAAATTGATTTTTTTTTTCTGGAAAAA
-CCTATTTTTGTCGTTTTTTCGCTAAAAAACATCTAAAAAATTCGAAAAAT
-CCCCAAAATTTTCGCTGTGAGACCCAAGGCTCCTGAAAGTCCCTGCGCCT
-TTAAAAATATCGATTTTTTGTTAAATTTTTAATCGAAATTCGGCTTTTTC
-CGGTAAAAACATCAAAATTTCGCAAAATTAATCTGATTTTTTCTGCGAAA
-AATTCAAATTTCTCATAAAACTTTCGAAAAATCGATTATTTTCCGCTAAA
-AAATCATCTAAAAACTCGAAAAATCCAGACAACTTTCGCTGCGAGACCCA
-AGTCCATGCGCCTTTAAAAATATCGATTTTCTGTGAAATTTCTCACAATT
-TCTCCAAATTTCCCGCCGTCACATTCGTCGTTTCCTCAATCATAATACAG
-TCCTCATCATCATCATCATCCGAGAGGACTACAATCGCCTCGTCCATCTG
-AATAGTGGGAAAATATCGATTTTTTGTAGAAAATCATATATTTAAATTGA
-TTTTTTTACAATAAAAAAAATTTTGGGGATTTTTTTGGAAATTTCGGGTA
-AATCGTGTAAATCGTGTAATTTAAATTCATTTTTGTTTCAAAAAGTCAGG
-GGGGGGGGGGGAAAGAAAAAATTTTTGACAAAGCGTGGAGCGAAAAAAGG
-AGTAAATATACAGTCGCGAAAGAACGATCGCTCCGCCAATTTTGCATGCG
-GCAAAGGGGCGTGGTTTATTGGGGGCGGGATTCCGGCGCAACCCTGCGGC
-ACGCTTTTTTCTCGCTTTTTTCGTGCGGTAATTTTCAGTTATTTTTATTC
-GTTTTCTGTTCGAAATTTCACGATTTCGCTCGATTTTGTTCGTTTTTTCG
-GATAAAAAAGTGTCCAACTATTTTTTAAATGAAAAATAACCAAGTTTTCA
-CAGATTTTACCCGAAAAATGCTTTGTTGGTCTCTCTTTCTGTAAATTACG
-ATTGTTAAGAGAGAAAATGGGGGAAAAAAAGGAAAATGTGAAGAGAAAGC
-GTTTTTTTAACGTTTTGCTTCGTATATTACAGAAAAAGAGACAAACGAAG
-CATTTTTTCAAGTAAAAACTGATAAAACTTGGTTATTTTTCATTTAAAAA
-TAGACACTTTTTTATCCGAAAAAACGAACAAAATCGAGCGAAATCGTGAA
-ATTTCGAACAGAAAACGAATAAAAATAACTGAAAATTACCGCATGAAAAA
-AGCGAGAAAAAAGCGTGCCGCAGGGTTGCGCCGGAATCCCGCCCCCAATA
-AACCACGCCCCTTTGCCGCATGCAAAATTGGCGGAGCGATCGTTCTGTCG
-CGACAGTATGTAACATGTAAGGTAACAAGGTGGGTTGGTTTTCATGAGAA
-AAGGGGGATTTTTTTCCGATTTTTCAGGTGCAGAGCCCACGCTCTCCTCA
-AAGCCGAATAATTATTAGAGCGCGCTTGCAGCGACTCGCGTTTCTGCATC
-CGCGGTATTTTGACTTTCCACTGAAGAAAGCAGATATTTCAGATTTATCG
-AATTTTTAGGTTTAAAATTTTTTTTTTCTGTATTTTTCGAACAAACCTTT
-TGTCAAACAGTAAAAATCGAAATTAAAATGACTAAAATGAACTTTTTTTG
-TCCACTGGTTGTGAAATGGTTTGAATTTGAAGAAATCAACGGGGTTTTTC
-GTATTTTCTGAATATTGTTCTATTAAAAATTGGTTTTAATACATTTTTGA
-CTTAACATTAGGGTCAAAAAATGGTTTAAAACCGATTTTTAATAGAAAAA
-TATTCAGAAAATACGAAAAATCCCGCTGATTTCTTCAAATTCGAACCATT
-TCGCAACCAGTGGACGAAAAAAGTTCATTTTAGTCATTTTAATTTCGATT
-TTTACTGTTTAACAAAAGGTTTGTTCGAAAAAAACAGAAAAAAAAATTTA
-AAAGCTAAAAATTCGATAAATCTAAAAAAGCTGCTCATTTCAGTGGAAAG
-GCAAAATACCGCGGATGCAGAAACGCGAGACGCTGCAAGCGCGCTCTAAT
-AATTATTCGGCTTTGAGGAGAGCGTGGTGCAGAGCCCCAATTTTAAACAA
-AAAATAGCGGAAAAAAATATTTAAAAAAACGAGGATTAAATAAAAATTAA
-ATAATGTCAGCAATGTTCATTGGCATCTCGTCGATTTGTGTCGAGTAGTA
-CTGCTCAATGTCGCGGAGAATTCGTACGTCGTCCTGTTTGACGAAATTGA
-TGGCGACTCCCTTGCGGCCGAAACGTCCCGAACGGCCGATACGATGGATG
-TAGAGCTCACGGTTGTTCGGCAAATCGTAGTTGATTACCTGGAAAATTTT
-TTGATGAAAAGCTGATTTTTGCGATTTTCGCCATTTTTTGACCTAAAAAA
-TTGGCGAAATTCGGAATTTTTAAACAAATTTTGACGTAAAGTAGGTTAAA
-ATTCCAAAATTTTACGGTAAATAGCCTGAAATGCTTTAAATTGATCCTTT
-TTTGCACAATTTTAACAATGAAAACCTGTATTTTTCGCTACTTTTAGTTG
-AAAAAAGCTTCCAAAACGAGTAAAATTGGCAAATTTTATCGATTTTCGCA
-AATTTTTCACCTAAAAATTGAAGAAATCGGTATTTTTAAACAAATTTTGG
-CATAAAGTAGGTTAAAATACCAAAATTTTACGGTTTTTAGCAATTTTTGA
-GTCAATTTTCAAAATGTTCCAGTATTTTTGCAACTATTTGGTTTTTATTC
-ATCTATGTTCTTTGAAAATTCTTTTTTTTAAGGTGAATTAGGTTAGAAAG
-GGGTCGATTTTGCAGAATTTTGACAGATTTCGCATGAAAATTTGAATTTT
-CAGGCGAAAATCATCAAAAATATGATTTTTTGCTACTTTTAGTTGAAAAA
-AGTGTACAAAACGAGTAAAATTGACAAATTTTTATCGATTTTCGCCATTT
-TTTCACCTAAAATTTAATTTTTTTTTTCTAGTGAAATAAGTTAAATTCAG
-TGTTAAAATGTATCTATTTTCGCTCAAAATTTGAAAATTTTCAATTTTTC
-ACTGAAATCCATGAGAAACCAGTGAAAAAATTTTTTCAATTTGAAAATTT
-GCAGTGAATTTTATTTTTTCTGCTAATTTTTCGGTGAAAAATGCACTTTT
-TCACGAGAATTAGCGGGATTTTTGTATTTTCAAAGTTTTTAGGTCAATTT
-TCAAAATGTTTCTCGCTGAAAATTGATTTTTTGTCAATTTTTCACATATT
-TTCTATGAAAAATTCCACCTTTTTGCAGAATTTTGACTAAGAAATACGAT
-TGTCGCCTAAAAGTTTGAATTTTTCAATTTTTTTTTGCTGAAAATCATCA
-AAAATACGATTTTCAACAGAAAATGATGAAATTTTCGCTATTTTTCGCGG
-AAAATCATTGATAACCTGATTTTTTCGCTACTTTTAGTTGAAAATAGTTT
-ACAAAACGAGTGAAATTGGCAAATTTTATCGATTTTCGCAAGTTTTTAAC
-CTAAAATTTAGTTTTTTTCTAGTAAAGTAGGGAAATTCAGTGAGATTTTT
-TAATTTTTCACTGAAATCCATGAGAAATTAGTGAAAAAAAAATGTTTTTG
-GCCAACTTTTCACATATTTGATATGAAAAATGCCGTTCTGAACAAAAAAA
-GCTGTGGAAATTCAACTTATTGTCAATTTTCCGCTGAAAAATTCATTTTT
-TTTTCTCAAGAATTCGCATTAAAACTGCGGAATTTCTTGTATTTTCAGCA
-GAAAATGATGAAATTTTCGCTATTCTTCGCGGAAAATCATTGAAAACCTG
-ATTTTTTCGCTACTTATAGTTTAAAATAGTTTACAAAACGAGTGAAATTG
-GCAAATTTTATCGATTTTCGCAAGTTTTTAACCTAAAATTTAGTTTTTTT
-TTCTAGTAAAGTAGGGAAATTCAGTGTCAAAATTTACTTATTGGGTAAAT
-GGAAATTGTGAATTTCCATTGTAAAAATTTCTGCTGGGAAATTCATTTTT
-CCCAAATTTTTCATATAATTAGGCTGAAAAATGCAATTTTTCACAAGAAT
-TCGCATTAAAACAGCGGGATTTTTTTTGTATTTTCAACGGAAAATGCTAT
-TTTTTGCGGAAAATCACTGCAACTTTTTCCTCACGAGGGCCAAGGAAAAG
-TGGTTTCTAGGCCATGGCCGAGGGGCCGACAAGTTTCAGCGGCCATTTAT
-CTTGCTTTGTTTTTCGCCTGTTTTCTTTCGTTTTTCACAGCTTTTTCCCG
-TTTTTTCTTATTAAAACTGATAAATAAATATTTTTTGCAGATGCTAAAAC
-AATTTCCAAGTAAAAAAAATTATGTATTCAGTCGGCAAGCAGCGGTGAAA
-GTGGGCAATGTAAAATGATGGATTACGGGAATACAAAACCTGAAATTTTT
-CTGAAACATGATACATATGCTGCTTAGATGCTGATACTACCTGATTTTCA
-TAACGAGACCGCTGAAAAGTTTTGAGGTTTCCACAATTCAACTTTTTTGG
-TGAAAAAATCGAGATTTTCGCACAAAAAGTTGAATTTTGAAAACCTCAAA
-ACTTTTTCAGCGGTCTTGATATGAAAATCAGGTAATTTCAGCATCGAAGC
-ATCATATGTATCATGTTTCAGAAAAAGTTTAGGTTTTGTATTCCCGTAAT
-CCATCATATTGCATTGACCACTTTCACCGCTGCTTGCCGACTGAATACAT
-AATTTTTTTACTTGGAAATTGTTTTAGCATCTGCAAAAAATATTTATTTA
-TCAGTTTTAATGAGAAAAAACGGGAAAAAGCTGTGAAAAACGAAAGAAAA
-CAGGCGGAAAACAAAGCAAGATAAATGGCCGCTGAAACTTGTCGGCCCCT
-CGGCCATGGCCTAGAAACCACTTTTCCTCGTCCCTTGTGAGGAAAAAGTT
-GCAGTGGGAAAATGCTATTTTTCGCGGAAAATCGAAAATGTACCAAGGAC
-ACTTGCGGAACATCAAGTCCTCTCGCCCAAACATCAGTAGAAATGAGGAC
-ACGAGTGGTTCCAGCTCTAAACTCCTTCATAACCTCATCACGATCCTTCT
-GCTCCATATCTCCATGCATCGATGAGACGGTAAAGTTGGCCTCCTTCATC
-TTATCAGTCAACCAGTCCACCTTTCTACGTGTATTACAGAACAACACCGC
-CTGAGTGATGGTTAAGGTGTCGTAGAGATCGATAAGCGTGTCGAACTTCC
-ACTCCTCCCGATCAACTGCGACGAAGAACTGCTTGATGCCTTCCAGTGTC
-AACTCGTCACGCTTCACAAGGATCCGAATCGGATCCGTCATGAATTTACT
-CGTCATCTCCAGAATCTCATGAGGAAGCGTCGCGGAGAGCAGCACCACCT
-GGGCTCCGGGCGGTAGATAGCGATAGATATCGTAAAGCTGCTCCTTGAAC
-CCCTTGTTGAGCATCTCGTCGGCTTCATCGAGCACGAGAAGCTTGATGGC
-GCGGGTGCGCAGGTTTCGACGGCGAATCATGTCGAAAACGCGTCCCGGAG
-TACCGGAAACCACGTGCTGGCCGTAGTCGAGCTTTCGGATGTCCTCGCCG
-AGATTGGTGCCTCCGATACAGGCGTGGCACTGGACATTCATATAGTCGCC
-GAGCGCCAGCACGACTTTTTGAATTTGAACTGCCAGCTCTCGTGTCGGCG
-AGAGAATCAGAGCTTGGGTCTCGCGGACCTGGGTGTCTAGCGATTGGAGT
-ACGGAGATCGAGAATGTCGCCGTTTTTCCTGTTCCGGATTGAGCTTGAGC
-GATGACGTCACGAGCCTTGAGAATTGCGGGGATGGCGCGTTGCTGGATGG
-CAGATGGCTTTTCGAAGCCGTACGCGTAGATTCCACGAAGCAAGTCTTCT
-CTGGAAATCGAAAAAAATTTTGAATTTAGTTTTATATTTAAAGGTGGTGT
-AGTCGAATTATTTATTTCTTTATTAGACTCAAAATTGTCTGAAAAAAAAG
-TGTACAAAACGAGTAAAATTGGCGACTTTTATCAATTTTCGCCATTTTTC
-ATCTAAAAAAATCGACGAAATTCGGAATTTTAAACAAATTTTGACGTAAA
-GTAGGTTAAAATTCCAAAATTTTACGGTTTTTAACAATTTTTCCACCTTA
-AAGTTGGTGTAGTCGAATTATTTTTTTCTTTATTAGACTCAAAATTGTCT
-GAAAACACCGAATTTCATAATGAAACTTCTTGAAAACTGAAAACTTTTCA
-AAAAAAAGTTAAGGCCTCTTGAAAAAAGGCCTAAAATTAGTGAAAATTTG
-AAATTTGACCAACTTGTCTGTCAAGCGGCTGGAAACAATTTTCTTTGAAA
-TTGTCGTCTAATTTTGGGTATACAGGTCGATTACCTTGCGTTTTCAGCTT
-TATTTAGGTATTTAAAAGTCGATGGACGAAGAGATTTGTCAAATTTTTTT
-CACCAACTATCTTCGTCCATCGACTTTTAATACCTTAATAAAGCTGAAAA
-CGCAAGATACGACCTGTATACCCAAAATTAGACGACAATTTCAAAAAAAA
-TTGTTTCCAGCCGCTTGACAGACAAGTTGGTCAAATTTCAAATTTTCACT
-AATTATAGGCCATTTTTCGAGCCGCCATAACTTTTTTTTGAAAATTTTTC
-AAGAAGTTTCATTATGAAATTCGGTGTTTTCAGACAATTTTGAGTCTAAA
-AAAGCAATAAAAAAAATTCGACTACACCAACTTTAAGGTGGAAAATTTTT
-TAAAAACCGTAAAATTCTGGAATTTTAACCTACTTTACGTCAAAATTTGT
-TTAAAATTCCGAATTTCGTCAATATTTTAGATGAAAAAATGGCGAAAATC
-GATAAAATTTGCCAATTTTACTCGTTTTGTACACTTTTTTCAACTAAAAG
-TAGCGAAAAATCATGTTTTTGATGATTTTCAGCTGAAAATTCAAATTTCA
-GGCAAAATTCTGCAAAAAAAGGGTAATTTTTCAGAGAAAATATGGGAAGA
-ATTGAAAAAAAAAACTGTTTTCAGCAAGAAAAATGTTTGAAAATTTACCT
-TTAAATTTTTAAAAACCGTAAAATTTTGGAATTTTAACCTACTTTACGTC
-AAAATTTGTTTAAAATTCCGAATTCCGTCGATTTTTTTAGATGGAAAAAT
-GGCGAAAATCGATAAAAGTCGCCAATTTTACTCGTTTTGTACACTTTTTT
-CAACTAAAAGTAGCAAAAAAATAATGTTTTGAGGCGAAAATTTGTTTTCA
-GCGACAAAATTCTGCAGAAAAAGTTCAATTTGAAGCTTTTCTGGTTATTT
-ATAGAGAATTTTCCGTTAAAATCGATAATTCAATACCTCAAGCCCATTTT
-GTCAAAAGTTGGGATAATTGAGACCTCCTCAGACGACTCGAACTCCACAG
-TCGCCATATCGTCGTTTTTCTTTTTATTTTCCGCCATTTTTGAAGGAAGA
-ACTCTGTAAAATCGATAAAAATGAATATTTTCGAGCATTTTTGCAGAGAA
-ATTCAGCATTTTTAGGTGGAAATTATCAAAATCAATGAATTTACATCGAA
-AAAATCAAGAAAAACGTGTAAAAACGATAAAATTGATTATTTTCGGGCAT
-TTTGCAGAGAAATTCAAGATTTTTAGGAGGAAATTAACAAAATAAGTGAA
-TTTACATCGAAAAAATTAAGAAAAACCTGTAAAATCGATAAAAAACTAGT
-AAAAGAGCAAGATTTCGAATGTTTTCGAAAATACCCTGTTTTTCGAGCAT
-TTTTGCAGAGAAATTCAGCATTTTCAGGTGGAAATTTACAAAATAAACGA
-ATTTACATCGAAAAAATCAAGAAAAATGGTGATTTATCGGCTATTTTCGC
-TCATAATTCGTAGGATTCGATTCGAAACTAAAATTCGAAATTCGAAAAAC
-ATGGCCGTGGCCTAGCGTTCCCCTCCTAGTCCACGGCCGCGCACGATTTA
-CGGAGAGCACGATTATTGATCGATGACACATGGTTTCCGACTGTTTTTCC
-TGTTAAATTTACCCTTAAATCACAATTTTCCATAGAAAATGGGTGGAATT
-TTCTCGAAAAAAGAGAAATCACCAAAATCGGCGCCGGTTTCCGATCAGGA
-TAATGCGATTTTGGTTTGTTTAATGAGGTTTTTCACATGGAAATTATTAT
-TTTTTTGGTAATTCCAGGCGCTCAAAACACAACGGGACAAAATGAAGCAA
-ATGATCAAGCGAAAAGAGAATTGTTTGGAGAAGGAACGACAATTGGCAAA
-GCAGCTTATAAAGGATGGCCGGAAAGAGTAAGAAATTTCAGAAAATTCAG
-TTTTTTTTATTAAAAAAAAAAAATATATATATAAATTTTTAACTAATTTC
-AGCCGTGCTTTACTGCTTCTGAAGAAGAAACGCTACCAAGAGAAGATTAT
-CGATCAAACCTTGAACCATCTTAGCAAAATCGAGCAAATGGTATTGAAAA
-ATCAGAAAAAAATAAAAATTTTCCAGCAAAAAAATCAATAAATTTCCAGG
-TAAATGACCTAGAATTCGCAGAAGTTCAACAGCGAGTAACCGATGGCCTT
-CGACAGGGAAATGAAGCGCTGAAAAAGATGAATCAACTATTCGATATCGA
-TGAAATCGACAGGATTATGGAAGAAACCAAAGAGGCGGCGGAATATCAGG
-AAGAAATCTCGAATATGCTGTCCGGCCAGCTTTCCAACACGGATGTCTCG
-GACGTTGAGAAGGAATTGGAGGATCTGTTGGCGGCGGAATGGGGCACAGT
-TCAACTTCCAGAGGCTCCGAGCCATGAGCTGCCTGAAGCAGAGCGGGAAC
-GGCAAAAAGGTTGAGATTTGCCGAGAAAATTCCTAAATTTTCCCTAAATA
-AATAATTTTTTTTCAGAAAAAGAGAAGCCACGTCGCGAGAAGATTGCTCT
-GGAAGCCTAAATATTGCTTGTTACTGTGAATAAAATAAATTCATTATATT
-ATTATATTTTTTATACAATTTTGTCTTACTGGCGTTGTTCTGAACGAAAA
-ATTCGTTTAAATAACGCTGTAACAAAAAATCTCATTTTGCGCGTAAAATA
-AAATGCCAGTGACGCAATCACCACGACGAAAAATCGCACAGTTTTGGAAA
-ATTGCGGTTTTTCAAACTTTTTTTCGCTTTTTTCGGATGCTATTCAAGCG
-GCTATAGACTGTTCAAATAGAGATAGAACGGTCAGAAAATGAGAGACATA
-GACAAATAAAGAGACAATTTATTGACTTTTTAGGCTATTCTTTGTTGGAA
-ACCAACAAATTTTGTGTTCCCAGGCTTTTCTTTGCAAATTCTGAAGGGTT
-CTTCTTTGCAGATGCGTCGACGTGTAGCTCTGGACAATGACGAGCATGAT
-GGTAAGTTAAAAAATTGGAAAAAAAAACTTTGGTTTCTATTAAATTTTAT
-TATACTTATTCCCTTTTTATAATTAAAGGCGTCTAGCTCATTCAAGCTCA
-TTCACGACGTTAGTTGACGCATTCCTCCTTGCACGCATGGCCTAGTGGGT
-TAAGGCGCTGAACATCACTCAGAAGTCCACAAGTTCAAACCCAACGAGGC
-TCCCCCGCTTTTCTAACCCTAGCTTGAGCAATCAAATCGGAACGCGTCGG
-AGCTGTCTCGGAGCCAGAAGCCTCATCAAATATTTTGATTGCTTCCAAAC
-AATCTATCGCACGTTTGTGCTCCTCATTTCCGTAATGACGTGTGCATGCG
-TAAGCTTGATCTTTCCAGTTTTCTAGGTGACTCATTAGAGCAATCGAGTG
-AGCAACTCGTTCATTCGGTATTTCATGAGCCAATTGCTATGCGGGACGCG
-GGGCTTCTGGAAAAAAATTAAACAAATATTTTTCGTTTTTTTTTCCACAT
-GTGTGGATCTCAATTTATTTCTTCTTTTTTTGTTTACCTCATTTTATAAA
-ATTCTCCTTTTTTTCTCATTAATTTTTCTGTGGCTTTTTCAAAGATCTTT
-TTCAGATTTTCATCTATTTGTTTTAATGTGGAGCAAAATTGAAATTTGTC
-TGGTAGATACGGTAGCTTTAAAGGCGCATACTAAATTTAAAGTGACAAAA
-TAAATATTTAGTTCCATATGGAATTTCAATTTTTGCTGCCAGGCTGTCCC
-ATTACGGTTTGATCTACAAAAAATGCGGGATTTTTTTTGGCCCAAATAAT
-GTGACGTCAGTGCGTTCTTAACCATGCGAAATCAGATGAGAACTCTGCGT
-CTCAACTCCCGCATTTTTTGTAGATCTACGTAGATCAAACCAAAATGGGA
-CATTCTGACACCAGGTATTCGCCGCGGAACCAGTTTTATACCGTATTTCG
-TATGCGCCTTTAATTCTACCGTACCCGCTTCTGGAAGTTTGGAAGTTTGA
-AAAACTATTAAATAGAATTTATTAATTTTTGCATATTACTTTGTGCAGAA
-TACCTCTAAAAATATTAAAATCCAGATAAACATGGTTTTTAAAATGTTTT
-GCACAAAAAGCGATGATTTCGCTTCGAAGCCACTTTTATAAAACGCCTTG
-TGCGCCTTTAATTCCACCGTACTCGCCAAAATTAAACTGAATGAGCGAGT
-TTTGAACTAATTTTTACGAAAAAATCACGTTCTGATCGGTTCTGGTCTTC
-CTCTAAAATCGGTTCTGGTCTTCCTCTTTGAATTTTCGCGCTCCATTGAC
-AATCGCCTGCCGGACTGGGAAAGCCGTGTACTCCACACGGACAAGTACAT
-TTAGTTTTACAACTAAAATCGAGCCGCGACGCGACACGCAACGCGCCGTA
-AATCTACACCAGATATGACCGAGCCAAAATGGCCTAGTTCGGCAAATTCT
-TCCATTTCAATTTATGAGGGAAGCCAGAAATTCGTGTATTTTTACAAAGA
-AATGTGAAAAAGAAGCTAAAATTTCAATGAAATAGAGATTTTTCCCGGAA
-TCTCACAGTTTCGCAAAATACTATGGATTAAAAAACGCTGAAACCCAAAT
-TTGCGCGTAAAATTCAATGTATAGCGAACATTCACGGATTTCTGGCTTTT
-CTCATATATTGAGATGGAAGAGTTTGCCGAACTAGGCCATATCTGGGGTA
-GATTTACGGCGCGTTGCGTGTCGCGTCACGGCTCGATTTTAGTTGTGAAA
-CTAAATGCATTTGTCCGTGTGGAGTACACGCGTTGTCCGGCGGGCGATTG
-TCAATGGAGCGCGAAAAATTCAATATGGAAGGCCAGCACCCCGTGTTAAC
-ATTTAAAAATTACAAGATTTGCCCCCTCAAACATCCCTGGAAAAACTAGA
-AAAACCTCGTGTGCTTGCCTGACAACAGCTGTTCACCGACAAAAAGATGA
-CGGGGAGGGCTTCAACAGAGCTTGTGTTTCCTCGTCAACTCTTTCGAGAA
-CTGACAGCACTTTTCATATAACTCATCACTAACTTTCGCTGCTCGTGGCG
-GTTTTTTTTAGTTCCCCAGTAATGAGTCAATTTTGTCTGTTGCTCAGAAC
-TCTCAATTACCGATGCTATTAGCGGAAGGACTTTTGGAGCGCCGGAGCCA
-GAGCAAAATTCATTTTTATTTGAAAAATGAGTGATGAGTTTTTCTCTCTG
-TTTTTCCATGTTTTTCTCGTTATTAGGCTGTAACTTTCCACATACACTTG
-GTGTCAGAGAGTCCCATCACGGTTTGATCTACAATAAAAGTGTGACGTCA
-GCACGTTCTTAACCTTGTGACAATAGTTGAAAAATCTGCGTCTCGTTTCC
-CGCATTTTTGTAGATCACACCGTGATGGGACTCTCTAACACCACGTACAC
-ATGAAAATTTCGCTGAGAACAAATTTTTGCGCGTCAAATCTGATGTATCC
-GGACTGTACCGATATCAATACATCGAATTTGACGCGCAAACTCCGTTTTC
-ATGGGGAATTGTTGAAAAAATTGTTTAACTTCCGGAAAATTAACATTTTT
-CAGAGAAAATCAAAATTTTTCTGTTTTTCCTTAAATTTCTAGGAAAATTG
-TAGCAGATTTTGTTGAAAAAATTCAAATTTCCACTGAAAAAAGTGAAAAA
-AGAAGACGATGTGTAAGCCTAAGCCTAAGCCTAAGACTAGGTCTAAGCCT
-AAGCCTGAGCCTATGCCTCAGCCTGAGAATAAGCGTGAGCCTAAGCGTGA
-GCCTAAGTCTAAACCTAAGCCTAAGCCTAAGCCTGATCCCAAGCCCACAT
-GGTGCCAGGCTGACCCATAACGGTTTGATCTACAAAAAATGCGCGAAATT
-TTTTGCCCAAAAAATTTGACGTCAGCGCTTTCTTAACCATGCGAAATCAG
-TTGAGAACTCTGCGTCTCTTCTCCCGCATTTTTTGTAGGTCTACGTAGAT
-CAAGCCTAAATGGGACACTCTGACACCACGTGAAGCCTAATCCTGAGTCT
-AAGCCTTATCCAATTTCCGAAAAATCAATAAAAATGCAAATAACATAGAT
-ATTCCCGCCTAAAGTTCAATAAATTATTTTTTTTTTGAAACTTTTTTCAA
-AACTTGCGAATGCATAGTACCAAAAAACGCCATATTTGACACGCAATTTT
-TGGATTGACTTTTTTTTGAATTGATATGTCATGAGCATCACTCAAGTGGT
-TCCAAAAAGGCGTCAAGTACTTGAGCCCTCCCTGAGCCACCACCGTCTCC
-AGAGAGCAGCCGAAACCAAAAACAAATAGGGGGAAAATGAACAGTTCTCT
-CTGTTTCAAAATCTATATATTCCTGTTCTTTGTATTATCTTCCGTGCGGC
-TTCAGCCCTCTACTGCTGCTCCAATTCTTTTCCATGTTATTTACCGTACC
-GATTAGACGAATGAACAGGACCCCCTTTTACCGTTCAACCGATGAGCCAA
-TGTGCTCTTTGTTGGCTAATTTGGGTGTTTTGCTCATTTGGAGGAACACT
-AACTTCCCTCTCTAACTACACACTACGTGGAAGAGTTTTTTCAGATTTCT
-AGGCCTCGCAACTTTCCTTGGTGGCCCAGAAAAACGCTTAAAACTTCAAG
-GTCAAAACGTTCATTTTTGTTGAAAAAAATCGGTTTTTACTTGAATTTTT
-GTAAGTGGAAGAGTTTCCTAAATTTCTAGGCCATGTGCTTTTTCCTGCTT
-ATCTGAAAATTTTGTTCAAATTTTCTTTTTTCACTTAAATATTCCCCGAA
-AATCTTGTCCACAAAAAGAAATTTTTGAACATTCAGATCATTTTTTTAGA
-ATGGAAGAGTTTTCCAGATTTCTAGGCCACATGGCTTTTCCTGGTGGCCT
-AGAAAATTTTCTGTTGGAAGAATCAGGTTTTTACTTGAATTTTCGTAAGT
-GGAAGAGTTTTTTACATTTCTAGGCCACGTGATTTTTTCCTGATGGTCTA
-GGAAACTTGTTTTCTCTAATTTTCCCCGATTTTGGATAATATTTGTTTAG
-TGGAAGAGTTTTCAGAAATTCTAGGCCACGTGGTTTTTTTTGGAAAAGAA
-ATATTTAGATCACATTAACATGTACTTTTATCAGATTTTTTGCCAAAATA
-CCAATTTTACAAGCTATTTTTTTGTTATATGTAAATTTTGTGGAAGAGTT
-TTTAAAATTTCTAGGCCACCTCTAGATGCACGTGGTGTCAGAGTGTCTCA
-TTTCGGTTTGATCTACGTGGATCTACAAAAAATGCGGGAGACGAGACGCA
-GAGTTCTCACCTGATTTTACATGGTTAAAAACGTGATGACGTCACATTTT
-TTGGGCAAAAAATGCCCGCATTTTTTGTAGATCAAACCGTAATGGGACAG
-CCTGACACTACGTGTACGTGCAGATGGCCTAGAAATGCTAAAATCTGTTT
-TTTAAATGTAACTTTGAAAGTGAAAGAAACAATTAGAAACAAGTTGGCTG
-TCGCCCCCAAAAAGTCTGTTCTGGCTATGTGGTCGCGAAAAGAGAAAACT
-CGGCCACCAATTTTTTTCCACGGCCAGATCTATGACGCTATGACGTCACA
-TTATCAGCTTGTTTCCGATTTACACACACATACACGTACACTTTCTCCGT
-ATCACTTTCACTGATAGCTTGAAACGAGATTAATCATCATTCCAGCTATT
-CTTTTTTATTTATTAGGTTAATGCCACTACTACTATTATTTTTTCATATT
-AAAAATACAATGAACTATGTAGACATAAATTCAAATGAGATGCCAAAAAG
-TGAGTTCGAACTTGTGGAAAATGTGTGTTTTTTAATAAATTTTTCAAAAA
-TATAGTAAATTTCTGAGAAATTTTGATTTGAATTCCCGCCAAGCATTTTT
-TTGAAAATTTTGAATTTCCGCCAACCATTTTTCCTTTTTTTTCAGAAAAT
-GTGAAAAAATTTTCTAAGCAAATTTGAATTCCCGCCAAGATTTTTTTTGA
-AAAAATTTCGAACTCGCGCTAAAGTATTTTCTAATAGCAGGATTATTGGA
-ATCCCCGCCAAAACATATTCTCAGAAAATTTGAATTTCCGCCAAAACTTT
-TTCTGATAAAATTTAAATTCCCGCCAACCATTTTTTCCTGAGAAAATTGG
-AAGAACATATTTTCAGTGAGAAAATTTGAAAATATTTTTTTCAGAAAGTT
-TGAATTCCTGCCAAAACATTTTCTAAGAAAATTTGAATTCCCGGCAAAAC
-TTTTTCTGATAATTTTTTGAAATTCCCCGCAAAAATTATAGTAAATGAAG
-ATGATTTGAGCAAAGTTATGACGTGGCCGCGGAAAAAATTGATGGCCTAG
-TTTTCTCTTTTCGCGGCCACGTAGCCAGAACAGACTTTTGGGACCGTACA
-ACCAACAAATATTTCTTCCCCTTTCAAAAATACATAAAAACCAGATTTTG
-ACATTTCTAGGCCATCTAGAGGTGCCTCGTGGCCTAGAAATTTGAAAAAC
-TCTTCCAGAAAATTTGTTCTGTATTTCTTGAAAGTGCTCCAACAAATCTG
-TGCAAATTTTAAAAACGTTTCAAAATATTTATTGAATAAATTCTTTTGTT
-GCACAAAGAGGTATCAAATCAGACCACCAGATTCGACCGTTGATCATTGT
-TTCAGTTGATAGGTAGGCAGGCGTGGTTGCCTGAAACCTGCCGGCCTCAC
-GCTGGGCAAGAGGCAGGCCGCCTTAATGTCAGGCAGGCAATGCCTACATG
-CAAGCCCTACTTCTACGATTATCTCGAAATTTAGCGAGTTTTTATTTGTC
-CAAAAAAAATCGCAACTGAACAACATGAAAAAGCCGCCAAAAACTTTCAT
-AAAATTCTGTCCGTAGTTTGCCGTTTCTTGCGTCTCATGCTTAATCCCTA
-CTGTAATTATGCTGAGATTTTCGATCTTTTTCACTTTTTGAAAATTTTTG
-GCAATTCTTTTTAAGTTTGTTGAGATTGTAACTTATGACAAACAGTAACT
-AAAAAGCGTGGCCGCCAAATTTTCTAGGCCATCAATATCAGTTGCGTCAT
-TTCTTCACCATACTGGACCGAGAAATATTCTAGGACATGTGTTTGCGTCA
-TTCCTCTTCCATTCCTAGTCCCAAAAATTCCAAGACCACTGGTAAGTTTG
-GCCGAGAAATATTCTAGGCCATCGATGTTAATGACGCCATTTCATACCCG
-AATTGGCCACTAAAATTCTTAGGTCATCAGTGACGTCACACCTCTTCCAA
-GCCTTGGAATGAGCATTTCTAGGCCCTCTAATCTAGGCTTGGCCGTCAAA
-TTTCCTAGGCCAGGTGACGCCATCCCTCTTCCATGCTCGACCACTAGGTC
-AAATGACGTCACTTCTCTTCCACCTACCGCACTTTGATTTCCTAGGCCAC
-CATGTGACGTCACTTCTCTTCCATCTAGGTTTCCCATGCCCTTCTCCTCT
-CACGTGGTATCAGAGTGTCTCATTTTGGCTTGAATACGTTGATCTACAAA
-AAATGCGGGAGAAGAGACGCAGAGTTCTCAACTGATTTCGCTTGGTTACG
-CACGTGCTGCCGTCACATGTTTTTGGGCAAAAAATTCCCGCATATTTTGT
-AGATCATACCGTAATGGGGTGTCCTCTTGTTAAATATCGAAATTTCACTC
-AAAAATTTTGAACGTTGAGCTTTTTGTCTCTGGTCAATTGGTCAGCCGCG
-CAGTGTTCCGGTGTTTGTGCTCATGTTTTCGTGTGCACATTTGTGCTGCT
-GCTAAGGCGTATTTTGTTCCGGGCGGGGACAGGGGGGAGAAGCAAAAATG
-TGTCAAATTTTGTTTGTTTTGCCATTGATATTGTCCTTCTGCTCAGAGGA
-TTTCCTCATTTTACGCCGTATGTGCAAAAGCATAATCACCACAATAATTT
-TGAATATAAGTTTGCAAACGCGCCCTATTGATAATCCTCGCCCGTGTAGT
-CTGCGTGCACGTGGTGTCAAAGTGTCCCATTTTGGTTTGATCTCCGAGAA
-ATGCGGGAGAAGAGGTGCAGACTTTTCAACTGATTTTGCATGGTTAAGAG
-TGTGCTGGCGTCACGTTTTTCTGGGGGCAAAAATTCCCGCATTTTTTGTA
-GATCAAATTGCAAAGCGCCCTATTGATAATCTTAGCCCGTGTAGTCTCTT
-GTTTAATTTTCAATTTTTCTGGTTCGGCACCTAAACTGTAACTACGACAC
-TCGGCAAAGTTAGACTGTTAAACTCCGCCCACTTAATGGCACCTTTTTTG
-CAGAAATGTACCCAACCGACAAAGAGCAGACACGGACCACATTTGAGACG
-AGAAGTCGGCGGAAACGGCTGGCGCAGGTCGCCGCCACAATTGCTAGCGT
-GATATTACTCTTGTTGGCAGGTAAGTAAAAAACTACGACACTCCGAGACC
-AAGAAAAAAATCGATAATCGAAATATTGAAAATTGCAAAATTTATTTCGC
-CGGATCATTTTCCATATCGATTTTCTGAATGGTATGGTGATAGCAATCCT
-CATCGTAGGCACATCCCTGGTGAACCACGTACTCTTGACCTGAAAAATAG
-GTTTCGTTCGGTGGAGCACATTTGCATACACTGACCTTTAATCGGGTGGC
-GACACGCTTTACACTTGAAACATGCCATATGCCAGTGGACATTGAACGCC
-GACACGCATCTCTCAAAAGTCGGCAATTTGCACGCGTGGCATTTTGGTGA
-CTTGGCCGCCCGGTGACAGTCCGCGCAACGGAGCGCGTTACCGTACGGCG
-CGGGCATTGGATAACACGGAGTCATGCCAATGACTGTCTGGAATTTTGGA
-GAAATTTATTGATTTTTTGACGGAATTTAATGAAATAAGGAAAAATCAAT
-AATCGACATATTTATTTCGCAAAAAAAAAAAAACATTATTGATTTTCACG
-GATTTCTGTCTTCCTCATAAATTGAAATGGAAGAGTTTGCCAAACTAGGC
-CATTTTGGCTCGGCCATATCTGGGGTAGATTTACGGTGCGTTGCGTGTCG
-CGTCGCGGCTCGGTTTTTGTAGTAAAACTAAATGTATTTGTCCGTGCATG
-GAATTCTGGCTTCCCTCATAAATCGAAATGGCAGAGTTTGCCGAACTAGG
-CCATTTTGGGTCGGAGAGATTTTGTGTAGATTTACGGCGCGTTGCGTGTC
-GCGTCGCGGCTCGTTTTCAATTGTAAAACTGCTGTATTTGTCCGTGTGGC
-GTACACAACACTTTTCCACGCGCTGTCCGGCAGGCAATTGTCAGTGGAGC
-GCAAAAATTTAATTAGGAAGGCCAGAACCCCGTGTCCGTGTGGAGTGCAC
-GACTTTCCCGCGCGTTGTCCGGCGGGCGATTGTCAATGGAGCGCGAAAAA
-TTCAATGAGGAATGCTTTTTGCAAAAACAAATTACATAGGCTTCTGGCCT
-TCCTTATTGCATTTTTCGCGCTCCATTGACAATCGCCTTAAAGCAGGGGA
-GTGTGTGTGTGTGTACTCCACACGGACAACTTAAAATGAAAACCGAGCCG
-CGACGCGACACGCAACGCGCCGTAAATCTACTCCGGCCGTGGCCGAGTCA
-AAATGGCTTAATTCGGCAAATTCTTACATTTCAAAATATGAGGGAAGCCA
-GAAACGTGTGTCACATGTTATAAAATTAATTTTGAAAAAAAATTATTAAA
-TTTCGCAAAAATAAATTATCGCTTTTTGTAAGAATTTATCGAATGAATTG
-ATTAAAAATTTATCGAATTTTAGCGAATCAGAAAATATCGATTTTCACTA
-AGAATTTATCGAATTTTTCGATTTTCGCTAAAATTATCGATTATTGCAAT
-GTTTTACCTGACAAACCGAGCATTTCAGGCATGAAATATGATACATCTCG
-TCTTGAATTTTGATCACTTTTCCCTGCAAAAATCGATATTTTCAATTGAA
-TATATTTCCAAAAATGTGCTCACAGTTTGAGCTTCTTGACGAGTCAGCGT
-TGTTGTGCAGCCTTTGCAATGGATATTATATGGAAGAACAATCTTTTGGA
-GACGTTTATTGTTCGACGAGAACAACATTTTTCGAATTTTTGAAATGATT
-AATTTAAAAATTTAAAAAGGAGAAAATTGAAGAGAAACGTGGGAAAACGT
-ATTGATTTTTCAAAATTTTATTGATTTTATAATCACGGGGTTCTGGTCTT
-CCTCATTGAACTTTTCGCGCTCCATTGACAATCGCCTTCCGGACAACACG
-TGGGAAAGTCGTGCACTCCACACGGATAAATACATTTAGTTTTACAACTA
-AAATCGAGCCGCGACGCGACACGCAACGCGCCGTAAATTTACCCCAGATA
-TGGCCGAGCCAAAATGGCCTAGTTCGGCAAACTCTTCCATATGAGGGAAG
-CCATAAATCCGTGTATAATCAAACGCGCAATTTAAAAAAATCGGTAGTTG
-AAATTTATCGATTTTCCCTCGATCTTATCGATTTTTTAAAAGACTTATCG
-ATTTTTATCCAAATTTATTATTTGAAAAATCAACGTTTATTGATTTTTGT
-CATGATTTATCGATTTTCTCAAGAGATTATCGATTTTTGCTGTCGATGCA
-CCATGTGCAAACTTCGCCACGTTTTTTCGCGGCGAGACCCAAATTTTTTG
-AATTTTCAGTTCTCGGTCTGGTATACGGTAGCTTCTACCTCTACCGTCGA
-TATGTGACAGATGCAAATGATAAACGGGATAATGATGAATATTTGCGAAA
-ACTCGTTCGTCAAGTCAATGACTCGCCGGAGACCACGTGGAAAGCCAAAT
-TCAATAAGTTTGGTGTCAAAAATCGATCTTACGGATTCAAATATACGAGA
-AATCAGACGGCGGTCGAGGAATACGTGGAACAAATTCGAAAATTTTTCGA
-GTCTGATGCGATGAAGCGGCATTTGGAGTGAGTTAACTCAAATTTGAGCG
-GGAAACAACGATGCTCCGCGCTCTCGCCGCATGTAGTTTAGCGCGTAAGC
-TGTGATGCATACGATAGTCCTGCAATGCATCATATTTTACACGCAAATGC
-AGAAATTACCAAATTTCGAGAAAAATCTATATTTTCCTTTTAAAAATTAT
-CGATTTTTTAAACAAAACTTCTGAATAATTGGATTTTTCCAGAAGTTTTA
-AAAAGTTTTGGGTACAATTTTAAAAAGACAGCAAAATGTTCGTAAAACAC
-CAGGAAAGAATTTTGCGCTTAATATCTGATGCTTCGTAAACTCCACGGGC
-TTCCGGCCTTAAAGCCGAGCTACGCGCCGTAAATCTACCCCGGCCGCAAC
-GCGCCGTAAATCTACCCCGGCCGTGGCCGAGCTCAAGTGGCCTAGTTCGG
-CAAAATCTTCCATTTCAAAATATGAGTGAAGCCAGAGGCGCGTGAATGAT
-GACTTCCACACGGTTCGGTAGAGCGCATTTACACTTATGTACCCTTTGCC
-GGGCTGCGTTCAAAACCTAAAAATTTGAAATTTTGCGCGTAAGATCTGGT
-GCATTGGGTTCTGAATTATTTCGACAAAACATGGTGCATCATCCCAAAAA
-TTGCAATTTTGCAGTGAACTTGAGAACTTTAACAGCTCCGATGTTCCGAA
-AAACTTCGACGCTCGTCAGAAATGGCCGAATTGCCCGTCAATCTCGAATG
-TTCCAAATCAGGGAGGATGCGGGAGTTGCTTCGCGGTCGCCGCCGCCGGT
-GTCGCCTCCGACCGTGCCTGTATTCACTCGAATGGAACTTTTAAGTCACT
-TTTGTCCGAGGAGGATATTATTGGATGCTGCTCGGTGTGCGGAAATTGTT
-ACGGCGGAGATCCACTGAAGGCCTTGACCTATTGGGTTAATCAGGGACTT
-GTTACAGGTAAGCGGTGACGTCATAGGTGGCCTAGGAACCTTTGATCTAC
-AATGTGATTGAATTTTATATCACGCAATTTGTAATAATTTCTAAAAAAAA
-TTATCGATTTTTCTGAAAATTAACTTGTTCCAAATTTTGAACGAATTTTC
-TAGAAGATTTTTGCAATTTATCGATTTTTGCAAGCTATCGATTTTTCCCG
-CAAACTATCGATTTTTCTAGAAAATTATCGATTTTTCTAGAAAATTATTG
-ATTTTTCTAGAAAATTAACGATTTTTCTAGAAAATTTTCGATTTTTCTAA
-AAAAAATTATCGACTTTTTTCTCAAAAGTATCGATTTTTGCAATTTATCG
-ATTTTTTGAAATTTATCGATTTTCCCTGCAAATTATCGACTTTTTTGAAA
-ATAAGCTTTCCCCAAAAATTTGAACGAATTTTCTAGAAATTATCAACTTT
-TGCAATTTATCGATTTTTTTTTTGCAATTTATCGATTTTTTGCAAATTAT
-CGATTTTTTGCAAATTATCGATTTTTCCAAACAATAACGATTCTTCTAAG
-CCCGTGGAAGAGTTTTTCGAAAACCTAGGCCATCTCTATTTCCAGGTGGC
-CGTGACGGTTGCCGTCCCTACTCGTTTGACCTGTCGTGTGGAGTCCCGTG
-CTCGCCGGCCACGTTCTTTGAGGCCGAGGAGAAGCGAACATGTATGAAGA
-GGTGTCAGAATATCTATTACCAGCAGAAATATGAGGAGGATAAACATTTT
-GGTTAGAGATATTTTTTTTTAGAAAAATAGAGAAAAATTTCTGGGATCTA
-TTCAAAAATGGCAAACTTTTTGGAAATTATCGATTTTTTCCGGTAAATAA
-TTATCAATTTTTTTCTCGGAAAATATCGATTTTTTCGGAAATTGACAATT
-TTTTCGAAAATTATCGATTTTTTCCGTTAATGATCGATTTATTCGGAAAT
-TATTGATTTTTCCGATAATTATCGATTTTTCGGATAATTATCGATTTTTT
-CCGATAATTATCGATTTTCCGGTAATTATCGATTTTTTCCGATAATTATC
-GATTTTTCGGATAATTATCGATTTTTTCCGATAATTATCGATTTTCCCGA
-TAATTATCGATTTTTCCGGTAATTATCGATTTTTTCCGATAATTATCGAT
-TTTTCCGATAATAATCGACTTTTCCGATAGTTATCGATTTTTCCGATAAT
-TATCGATTTTTTTTCGATAATTATCGACTTTTCGGGTAATTATCGATTTT
-CCCGATAATTATCGATTTTTCCGGTAATTATCGATTTTTTCCGATAATTA
-TCGATTTTTCCGATAATAATCGACTTTTCCGATAGTTATCGATTTTTCCG
-ATAATTATCGATTTTTTTCGATAATTATCGACTTTTCGGGTAATTATCGA
-TTTTTTTCCGGAAATCATGAATTTTTCCAATAATTATCAATTTTTTCCGA
-TAATTATCAATTTTTCCGATAATTATCGATTTTTCGGATAATTATCGATT
-TTTTCCGATAATTATCGATTTTCCCGATAATTATCGATTTTTCCGGTAAT
-TATCGATTTTTTCCGATAATTATCGATTTTTCCGATAATAATCGACTTTT
-CCGATAGTTATCGATTTTTCCGATAATTATCGATTTTTTTTCGATAATTA
-TCGACTTTTCGGGTAATTATCGATTTTCCCGATAATTATCGATTTTTCCG
-GTAATTATCGATTTTTTCCGATAATTATCGATTTTTCCGATAATAATCGA
-CTTTTCCGATAGTTATCGATTTTTCCGATAATTATCGATTTTTTTCGATA
-ATTATCGACTTTTCGGGTAATTATCGATTTTTTCCGATAATTATCGATTT
-TTCCGATAATAATCGACTTTTCCGATAGTTATCGATTTTTCCGATAATTA
-TCGATTTTTTTTCGATAATTATCGACTTTTCGGGTAATTATCGATTTTCC
-CGATAATTATCGATTTTTCCGGTAATTATCGATTTTTTCCGATAATTATC
-GATTTTTCCGATAATAATCGACTTTTCCGATAGTTATCGATTTTTCCGAT
-AATTATCGATTTTTTTCGATAATTATCGACTTTTCGGGTAATTATCGATT
-TTTTTCCGGAAATCATGAATTTTTCCAATAATTATCAATTTTTTCCGATA
-ATTATCAATTTTTCCGATAATTATCGATTTTTCGGATAATTATCGATTTT
-TTCCGATAATTATCGATTTTCCCGATAATTATCGATTTTTCCGGTAATTA
-TCGATTTTTTCCGATAATTATCGATTTTTCCGATAATAATCGACTTTTCC
-GATAGTTATCGATTTTTCCGATAATTATCGATTTTTTTTCGATAATTATC
-GACTTTTCGGGTAATTATCGATTTTCCCGATAATTATCGATTTTTCCGGT
-AATTATCGATTTTTTCCGATAATTATCGATTTTTCCGATAATAATCGACT
-TTTCCGATAGTTATCGATTTTTCCGATAATTATCGATTTTTTTCGATAAT
-TATCGACTTTTCGGGTAATTATCGATTTTTTTCCGGAAATCATGAATTTT
-TCCAATAATTATCAATTTTTTCCGATAATTATCAATTTTTCCGATAATTA
-TCGTTTTTCCCGATAATTATCGATTTTTCCGATAATTATCGATTTTTCGG
-ATAATTATCGATTTTTCCGATAATTATCGATTTTTCCGATAATTATCGAT
-TTTTCCGATATTTTTTTTCGGAAATGGCTGCCCCATCGCGGTTTGATCTA
-CAAAAAATGCGGGAATTTTTAGCCCAAAAACATGTGACGTCAGCACGTTC
-TTAACCATACGAAATCAGTTGAGAACTCTGCCGCATTTTTTGTAGATCTA
-CGTAGATCAAGCCGCAATGAGACACTCTGGCACCAAGTGTCTGTAATTGA
-CTTCACGGAAGAAAATATATTTTTATTTAATGCGCAAAACTAAAATTCAA
-AATTTCGTTTCGACCAATACACCATATTTTAAGCGCAAATTTCAATTCAA
-ATTTTTGCAGCAACCTTTGCCTATTCAATGTATCCCCGCTCAATGACAGT
-ATCCCCCGATGGAAAGGAACGAGTAAAGGTGCCAACAATCATCGGTCACT
-TCAACGATAAGAAAACCGAGAAGCTGAACGTGACCGAGTACCGTGACATC
-ATCAAAAAAGAAATTCTACTTTATGGTCCCACCACGATGGCGTTCCCAGT
-TCCCGAAGAATTCCTTCATTATTCGAGCGGAGTGTTCCGCCCGTATCCAA
-CTGATGGTTTCGACGATCGAATTGTGTATTGGCACGTGGTTCGATTGATC
-GGATGGGGAGAATCAGATGATGGAACACATTATTGGTTGGCTGTTAATAG
-TTTTGGTAACCATTGGGGTGATAATGGTGAGTTTTCGTGCAAATTGCGCA
-CGGCCCGGCAAATGGTACATCCATACAAATGCGCTCCACTGATAATTTGA
-GTTTAGCCAGGTTTGGGCGCGTTTTAAGGAAAACGCCTTGGTCCAAAAAA
-TTTAGAATTTGATTTCGGACATTTTTTATATGCATCACAAAAATGTTGGA
-CGAGCCGTTTTTGAGAAAAAGCCCAGGTATACGGTAAACAAATTGCGTAC
-AGGTGCCACTTCCCGGGCCGTGATGCGCGTTAAATATAGTGCTTTTTAAG
-AATGCGTGTTGCGCAACATATTTGACGCGCAAAATATCTCGTAGCGAAAA
-CTACAGTAATTTTTCAAATGACTACTGCAGCGTTTATGTCGATTTACGGG
-CTCGAAAAAAAAGTTACAGCGATATTCCATTTTTTCTCATTTTTTGCTTA
-TTTTTATTTAGTATTCTCACGGTGTGTCATTCTGTCCCATAACGGTTTGA
-TCTACAAAAAATGCGGGAATTTTTCGCCCAGAAAAATGTGACGTCAGCAC
-GCCCCTAACCATACGAAATTTGTTGAGAAATCTGCGTATAAATTCCCGCA
-TTTTTTGTAGATCACGCCGAAGTGAGACACTTTGACACCACGTGTATTCT
-ATCTAAAAATAAATTATTTCAAAAATAGAGCCCGAAAAAAAAAATCGACA
-AAAGCGCTACAGTAGTCATTTAAAGAATTACTGTAGTTTTCGCTACGAGA
-TATATTGATATTTTGCGCGTCAAATATGTTGCGCAGTACGCATTCTTAGA
-ATTTTGTGTTGCCGTAAATAAATTTGGACGTCAAATACAGTGCATATTGC
-GGTCGATCGGCTACAATATATTTTGCGAGCAAATTTGGAAGTTTTGCGCG
-TCAAATATGATGTAGCCGATCGGTCATGTTACAAAACACCATATTTGACG
-CGCAAAACTTTAATTTTGGACAAAAAGTCAGAGAATTAGTATTGCGTAAA
-AAACTGGCAATTTTTTTCAGAACATTTCTGAAATTTTCAATATATTTTCA
-AACTTTTCGCGTCAAATATGGTGCATCAAGTCGCGAACCAAATACACTCT
-AACACGTAGTGCCAGGCTGTCCCATTATAGTTTGACCTACAAAAACGCGG
-GAATTTTTCGCCCAAAAAAATGTGACGTCAGCACGTTCTTAACCATGCAA
-AATCAGTTGAGAACTCTGCGTCTCCTCTTCTCCCGCATTTTTTGTAGATC
-AACGTGATTCAGGCCGAAATGTGACACTCTGACACCACGTGGCCCTAATT
-AACTCGTAAAAATCACCGTTTTTTTTCCAGGACTCTTCAAAATCAACACA
-GATGACATGGAAAAATATGGTCTAGAGTATGAAACAGCAGTCGTCTAATT
-ATAATTCGGCAAAAATTTTTTGTAAATAGTTAAATATTGTCCACCTATTT
-CATCCCCACCCGATTGCATCTCAACTTGTCCCATTTCCGAGAAAAATCAA
-TTATTTATTTTTATTCGGCCATCATTTATTAGCTCCCTCATTCCATAGTT
-TTTTTTTAATTAGATTTTTTTTGGATGCTAAAATTTGCCATTCTCATAGA
-CATTTTCAATATTTGTGTAAAATAAATCATTTTTCTGGTCTTCAATTGAT
-GGAAAAAAACAAAAAAACAATGCGCGTCAGGTTTGGTGTATTGTGTGCAA
-ACACCGAGCGCATATTTTGAAATTTATTTTTTTTTCGAATTTATTAAAGT
-TGCTGATTTTCTTTAATTTCAGGCTTAAAAATGTCGGATTTTGTGCCAGA
-AACCGAGGAAAATGAAGAAGAATCTCAAAAAATCGATGAAATCCATGAAA
-TCCCAGCTCAAGCAATTATCATCGACCAAAGTGAGGAAAATGCTGACTTT
-ATCAATTTTCAATTACTTTTTGCATTTTTTCTAGGTTTTTCTCGACGATT
-TCTCAACAATAAATGGTACGGAAAGTACGGCGAAGATGGGGATCTTCTGG
-AGCACATCGACGAGGACTGGGAGCCCGTAGGCCTCGACGAAGTGGAATTT
-CTGAGCCAACTGTGGTTTGAGCAGGAGGATCAGGAGAAAAAAGCTCATAG
-GCACTATGATTGGGATGAAGAAAAGAAGGAATGGGTGCCGAAGGCCAAGC
-AGGAGGAGGTCAATGAGGATTTTATCGCAGAATATCAAGCGAATTACGGG
-GTTCAGTATGATGATATTTATAAAAAAATGGACGAAGAATTGCAAGAAAA
-AGCGGCAAAAGCTCAAAAAGAAGATGAAGAGAAGAAGGAGAAGAAGCGGA
-AGAAAAAAGTTGGCTTGGGAGCCGGGGAAGACGCTAAAGAGGGCTGGCTT
-GACCTAGGAGATAAGGTTCATGCGGTTTATGTGTCAAATCTTCCGGAAGA
-TATTACAGACGAGGAATTCCAGAAATTTATGTCAAAATGTGGAGTTATTC
-AGCCGGATATTCGAACGAATAAGCCGAAATGCAAGCTTTACCGGGAGGAA
-AACGGCAAACTCAAAGGCGACGGAAGATGTTGTTATATTAAGAAGGAATC
-TGTCGAGCTTGCCTGTAACATTCTCGATGGAGCGAACTTAAACGGGCGGG
-AAGTGAAGGTTGAGGAAGCTCGATTTGAGATGAAGGGCGATTTTGATCCG
-GCGAGGAAGCGGCGGAAATTGACTGCGGCGCAGAAAAAACGATATATGGA
-GCAGCAGAATAAGTAATAAAAAATATTTGGTGAAATTTGAAATAGCTCGT
-AAATCGACATTAAGCTGAAAAAATGAAAAAAAACCAAAAAAAATCGTATT
-ACGGGAACACAAAATCCTGAGAATGCGTACTGCACAACATTTTTTTTTTT
-TTTGACGCGCAAAATATCTCGTAGCGAAAACTAAGACTACTGTAGCACTT
-GTGTCGATTTACGGGCTGCTCGATTTTCGAAATGAATTAAAAGAATTTAT
-TTATGTGATATTGAAATTGGGCAAAAAATAGGAAAATAATACAAAAAAAT
-CTAAAAAATTTATTTCAATAATCGAGCCCCCGTAAATCGACACAAGCGCT
-ACAGTAGTCATTTAAAGAGTAGTTTTCGCTACGAGATATTTTGCGCGTCA
-AATATGTTGTGCAATACGCATTCTCAGAATATTGTGTTCCCATAATATAT
-CGACGAAAAAATTGGCCCAAATCGTGGATTTTTGTCCGAATTTGATGACA
-AATGGCTTTGAAAATCACAAAATTTCAGAGAAAAATTTCGATTTTTGGTT
-TAAAAAAACAAAAATTGAAACCCAACAAAATTGTTAACTTGAAAACCTGC
-TGAAAATCTTAGAATTTTCAGATTTCACCCAAAAAATACCAGATTTAACT
-CGAAAATTGCGAATTTTAGGCCAAATTCCTTGCATTTTTCATAGAAAAGA
-TAAACTAACGACACAAAATCAAATGAAATTGACTAAAAAACTATTGAATT
-TTGTAGAAAAATCCCGATTTTTGCCTAAATTTGCAAAAAAAATATTTTAT
-TTTAGCATTTATTTTTCTTAATTTTCACACTAAAAATTACGAAAAAAGAC
-AAAAAAAATTTTTTTCATTCAACAATTTTTTGGGCTAAAATGTGTAATTT
-TTGCGGGAAGAATTCGAAAAATTATTAAAAATCGTAGAGACTAACTGAAA
-ATCAATTTTTTAGGGACCAAAAAGCCAACTTTTGCCGATTTTACTCAAAT
-TTTTCCGTGAAAAATCCGGAATTTTTAAATATTATTTAATTGCGAAATTT
-TACAATTTTTACACCTAAAATAAGGGTAATATGGTAGCTGGTCTCGACAC
-GACAATTTTTTTGTTAAATTCTAAAAAAGGTGTGCGCCTTTAAAGAGTAC
-TGTAATTTCAAACTTTATGGAATTTTTTTTTGATTTTTCAAATAAACTAC
-GAAAAATCGAAGAAAATTCCACAAAGTTTGAAATTACAGTACTATTTAAA
-GGCGCATACCTTCTAGAATTTTACAAAAAATTTGTCGTGTCGTGACCGGC
-GACCGTATTACCCTAATTTTTGGTGTAAAAATCGTAAACTGTCCGGATTT
-TTCACTACGAAATTCAAATTCGAGGAAAATCGAAAAAAATTGGTTGTTTT
-GGTTCCTAAAAAATATATTTTCAGTTATTTTCTACCATTTTTTAATAATT
-TCTCGAATTTTTCCCTCAAAAATTACAAATTTCAACCAAAAATTCTGATT
-TTTCCTTTCCAGAATCTTCGAATGGACGCCCGATAAGCCACGTAACTACC
-GTCCAAAGTCGGACTGTACGGTTATTGTCAAAAATCTGTTCACTCAGGAA
-ATGATGAACAAGAATGCGGCGTTGATGTTGGATTTGAAAGAGGAAATGAC
-ACAAAGTTGTCAGAAATATGGAATTGTTAAGAAAGTCGTCGTTTATGCGG
-TTGGTATTGAGGAAATTTGTGGAAATTTCGATTTTTGTAAAAAAAATTTA
-TTCTAAAAAAATAAATTAAAAAAAAAAGATTTAAAAAATTTAAAGCTAAT
-TTTCGAAAAATTGAAGCTAATTTTGGAAAAAAAACCGAAAATTTTTTTTT
-TTAGAAATGTCGATATTCATAAAAAAATATTCTAAAAACGGGATCAAAAA
-TTTTTGAAGCTATTTGTCGGAAAAATTTTTAAAAATGTAAAGCTAATTTT
-CGAAAAAAAACCCAAAATTATTGGATTTAACAAATTTTCAAAAAAATTGT
-TCTAAAAAAGATAACCTTTAACATTAAAAAAATTATGGCTATTTTTCGAA
-AAATTAAAAAAAAACAATTTTTAGCTAATTTTCGAAAAAAAACCGAAAAT
-TTGTGGAAATTTCGATTTTCAAAAAAAATTTATTCTAAAAAAAAATAAAT
-TTTTAACATTAAAAAATGGCTATTTTTCGAAAAAACCGAAAATTTTTGGA
-AATTTCGATTTTCGAAAAAAAAGTATTTTAAAAAAACAATGAGAAATGGT
-TATAAATTGTTCTTTCAAAAATTTTTTACAGCTTTTTTTTTCGAGAAATT
-TAAAAAAAAAACAATTTTTAGCTAATTTTAAAAAAAGTAAAGCTAATTTT
-CAAAAAGAACCCCAAAATTGATGCATTTATCGATTTTTAAAATAAATTGT
-TCAAAAAAAGATAAATTTAAAAAAAAAGTTATTGGATTTTTTAAAGTTAT
-TGGATTTTTCAATTTTCAAAAAAAAATCATCAAAATGTATAAATAAATAA
-AAACTATGGATTTCGAAAAATTAAAAAAAACAATTTTTAGCTAATTTACG
-GAATTAAAACAACAAAAAATTTCGGAAAATCGAAAATTGTTGGTTTTTTT
-TTTCGATTAAAAAAATTCAAAATCTTCTGAAAGACATTTTTAAAATTTCC
-AAAAAAAAATTATGAGTATTTTTCAAAAAACAAATCGAATTTTGATTAAC
-TTCCGATTTTTTTGACATTTTTTGAAATTTGAAAATCATTAATTCAAAAA
-TTTTTATTGAAATAATTCAAAAATTTTTATTGAAAAAAAACGAAAATTTT
-TGATTTTCGCTTGAATATTTCGGAAAAAACAATCGATTAAAAAAAAAATA
-GGCTTCTAGTTATTTTTCAAGAATGCTTTTTTTTTGACAAACTGCTGATT
-TTTTGTCAGTTTCGTCGATTTTCGTTGTAAAAAATCAAAAATTCAAAATT
-TCTTCTATTACGAGTGCACAAAATGCTGAGAATGCGTATTGCACAACATA
-TTTGACGCGCAAAATATCTCGTAGTGAAAACTACAGTAATTCTTTAAGTG
-TCTACTGTAGCGTTTTCGGAAAAATTCCACTTTTTTTATTTAAAAAAAAA
-AACGAAATATTTTGATTTTTTTTTATTAAAAAAAACGAAAAATTTTGATT
-TTTTATTAAAAAAAACGAAATATTTTGATTTTTTATTTAAAAATGAAAAA
-TTTTGATTTTCCAAAAAAAAAGGCTCCTAATTAAAAAAAAAAAATTTTTT
-TGAAAAAGTGCAGATTTTTGTCTTAAAATTTAAATCAAAAATTTTTAAAT
-AGACTTTTTCCATCAAATTTCCCCAATTTTCAGAACCACCCGGACGGCGT
-CGTATCGGTAACCTTTCCAACGACAGAAGAATCGGATATGGCTGTAAAAT
-ATCTTCACGGACGAGTAGTTGACGGTCGGAAATTGACAGCCGAGCTCTGG
-GATGGCCGGACAAAGTTTAAGGTCGAGGAGACGGAAGAGGATGAGGAGAA
-GCGTCGGAAAGAGTACGAGAAGTATATTGAGGGTGGAAGTAGTGAGACGA
-AGGAGGAGAGCGACGACGATGATGACGATGAAGCTGAAGATAATTGATTG
-ATCTAAATTTTTTCTGAAAAATTATTTTTAGTTTATACATTTTTCCGAGA
-GGAGCAACCGATCAATTTTTACCAAAACTATGTTCAAAATCGCCCAAAAA
-TATCAAATTTAGTGAATTTTCGTTTTCATGGATTTTTCGAAAATTAGCTT
-TAAAAATGTTTGCCAAATTTTTCGACGATATCGCGATATTTTAAAAATTT
-CGAACAAAAATTGCCTAATTTCAATTAAAATCCCTTTTTTCGAAATTTTC
-TAATTTTCTGGGCCAATTGGGTCGTTTAAAAAGAAAAATGGCCAAAATTT
-GAGAGTTTTAAAAAAATTCTAAAATTTCAATCCTACGATTTTCCGGGAAA
-AAAATTTTCTTGGAAAATTGCTTTTTTTTTGAAAAATTATTTTTAGTTTA
-TACATTTTTTTTCCGAAAATAGGAACAACCTATCAATTGAAATTTTCAAA
-AAAAAATTAATTAAATTTGGAAGCATTTTCCGAAAAATTGCATGTTTTCG
-GTTTTCTAGAAAAAAAAAACTAAAAGAACGAAAAATTTCACCAAAAATCA
-AATATGAAAATACTTTCCTAAAAATCTGAAAAAACCAGAAATTTTCAATT
-TTCCCTATTCAAAAAAATTCAAAAAAAAAACCAAATTTCAGTTAAAATCC
-CTTTTTTCGAAAATTTTAAAATTTTCTGCGCCATTGTGTCGTTGATTTGA
-AATTTTTTTCTAAAAATCCGTGAATTTTTGAAATTAAACAAAAAATTTGA
-AAAATCAAAAATTATCGATTTTTCAACGAAAAAAATTCAAAAATTTCAAT
-CTTACGATTTTCCTAACTAAAAAAAAATTTGAAGTAACGAAAATGTTCAA
-TTTTTTCGAAAATTTTCGAGGTCATTTAGAGTTTTTTCTGTGAAAATTGC
-ATTTTATATACTCATTTAAATTAATTTTTATATATTCCTTTCCCGAAAAC
-TTCAAAAAAAAAACCCAGTGATACAATTAAAATCGAGATAATCACAGACA
-AAGTAGGCAGTAGGCAGGCAAAAAACAGGCACATATTAAGGTAATACAAA
-ATTCTGATAATGCGTACATCGCAACACATTTGACGCGCAAAATATCTCGT
-AGCGAAAACTACAGTAATTCGTTAAATGGATACTGTAGCGCGCTAGTGTC
-GATTTACGGGAATCTTAAAGAACCTAAAGAATTGTAGGAAAAATGGAGAT
-CCCGTAAATCGACACTAGCACGCTACAGTATCCATTTAAAGAATTACTGT
-AGTTTTCGCTACGAGATATTTTGCGCGTCAAATATGTTGTTCAATACGCA
-ATTTTAAAATTTCGTGGTCTCATAATAATACACAATTAACTAGTAAATCT
-ACAAAATCTACAAAATTCTCTTCATCAACTCTTCCACAGCTCGATCGACC
-TGTGCATGAGTCTCCTCGTACGCCCACAGAGAGCACAACGCCACGTTGCT
-ATTGTCGAGACGTTCCTTATTCGAAATCTGTGACGACATGCGATCCTTGG
-CCTGATCTTCAGTCAGGTTATCCCTCGCAACGACTCGACGGACGGCTTCA
-TCTGCTGGCACGAAGACGGTCCACGTTTCGGCGAGCGTTTTGTGCCATCC
-GGCTTCGATTAGTGCGGCCGCTTCGATGACTGAATGAATTTTTTTTTCAA
-CTTTTGCAGAAAAAATTATGATTTTGCAAAATTAACGGGGAAAATTGGCT
-GTTTAAAAAATATTTATTATTTTCGCGTTTTTTTAAAATAAAAATCGATG
-AAAATTCTGCAAAGTTTGAAGCTTCAGTACCCTTCAAAGGTGCACACGTT
-TTAGAATTTAGCAAAAAATTGGCGTGTTCACGATTTTTTGGTTAAATTCA
-AGAAAGTGTGCGCCTTTAAGGAGTACTGTAATTTCAAACTTGCTGAATTT
-TCATCGATTTTTCACTTTTTTTCCACGATTAGTAAAATTTGTGTTATTGT
-AGATTTTTTAAATTTAATACCAAATTTTCCAAAAAATCGAAAAAAAAAAG
-AAAAAATGTAATTTCGTTATTTTCAAAAAAATAAATTGAAAAATTGAAAA
-AAAATCCAAATATTCGATTATATTTTTTCAGAAAATAAAAATGAAAATTG
-GAAAAAAACATATTTTTGGGTTTTTCGATTTTCCAAAAAATTTAAACATT
-TAAAAAATCTAAATTTTCGATTTTTTTCAAAAAAAAAAAATTAAAAATCG
-CACAAAAACCAAAAAAAAACATTTTTGGCCGATTTTCCAAAAAAAAAAAG
-AAAAATAAACAAAAAACAAATATTTCAAAAAAAAAAACAATTTTTTCCGA
-TTTTCCAGAAAAACAACTGAAAATCGGAACAATAATTTGTTTTTTCTATT
-TTTCAAAAAATATTGAAAAATAAAAGAAAAAACGGAAATTTTCGATTTTT
-TTCCGATTTTCCAAAAAAAAAAAATTCAAAATCTCACAAAAACCAAAAAA
-AAAATGAAAAATCAAAGAAAAACGAAAATTTCGTTATTTTCAAAAAAATA
-TCGAAAAAACTTTTTTTTCTTCCGATTTTTCTGAAAAACACTGAAAATTG
-TGGAACAATAATTTTTTTCTATTTTTTTGGTCTCCACGATTTTTCGCGAA
-AAATTTCAAAAATTAAAATTTTTTTTTAAATCCAAATTTTCACTTCCCCC
-CCCCCCCCCCCCTCACCAACAACTTTCGCCGTCGACTTCTTCACAATCTC
-CATAGCTTTCTCTTTCACCTCCGGCCAAACAAGCTCACTCAGCTCGCGGA
-GCTTCACCTTATCCGAAAACACAATCGTTCCAAGCTTCCGGCGGTCTACA
-ACTCCATCGACAACGACATCCCCTCCAAAATGTTCGCCGATTTTTCGATT
-CAACGAGCTTCCCCGTTCATAGCACGTGTGTGCGAGCTTATCACAATCGA
-TAACATCGAAATTATGCGTTTCACGGAGATATTTCCCGATATGACTTTTT
-CCCGACGCAATTCCTCCGGCGAGCCCAATGATGTACGGGGCGCCCGTTTC
-TCTTGGAACCGCCCGAGCTGGACGGAGCAAGTGACCCAGATCCTCTCGTC
-GTCTGGAGCTTGAGCTGATCTTTGTCTCTTTCAGGATCTCATCGGATCCT
-TCCACCAGCTCGACAATTATCACATCCAGCTGCGACATTCCTTGCTCATT
-TCTCTTTTTGTTCACCGCATCGGCACCTTTAATGGTCTCCCGGGACACTA
-CTATCGCTTCGAGGTCTTTTATTCGTGTTGAAGGACCGAATGGGTCGATT
-ATTGGCTCCGCGAGACATTTTGCCTGGAAAATTATGGGGGTTCTATTGAG
-CAAAAATGACCATTTTTGGAAAATTAGAAAATCGGAAAAAAAAATTTCCC
-GAAATTTTTTATTTAGAAAAGTTTTTAAAAAACAGAAATTATATATTTTT
-TGAGTTTTCCAAAACAAAAAATCGAAAAAAAATATTTCGATTTTTCGGAT
-TTTCCAAAAGAAAAAATTTAAAATATCGAAGTTTTTAGATTTGCAATAGA
-AAAATTGAAAAAAAAAACGGAAATTGTATTACGGGAACAGAAAATTCTGA
-GAATGCGTATTGTACAGCATATTTGACGCGCAAAATATCTCGTAGCGAAA
-ACTACAGTAATTCTTTAAATGACTACTGTATCGATCAAGCCCGTAAAGCG
-CTACAGTAGTAATTTAAAGAATAACTGTAGTTTTCGCTACGAGATATTTT
-GCGCGTCAAATATGTTGTGCAATACGCATTCTCAGAATTTTGTGTTGCCT
-TAATGCAATTTCCGTTTTTTTTTCAATTTTTTCTTTTGAAAATCTGAAAA
-TTTCGATTTTTTCCAATATTTTCTTTTGGAAAATCCGAAAAATCGAAACA
-AAAATTTTTTTCTATTTTTTAAATTTTTTTTTTTGGAAAATCGGAAAAAA
-ACCAAAATTTTAGTTTTTTAAAATATTTTATGGACCAAAAATATCGATTT
-TTCCTAAAGTTTTATAGAAAACTGAAAAATTTAAATATTTATTGTTTTTA
-ATTTTTAAATTTTTATGGAAAAATTTCGATTTTTTTTTTTGAAAAAAAAG
-CTTTTTTTAAATTTTTCTTTATTTTTGGAAAATCGAACATTTGCTATTTT
-TTTCGATTTATTAATTTTTTTGTTGGAATTTCTAAAAATCGATGTTTTTT
-TTTCAAAAATCAGCGGTTTTTCCGAAAAATGGCAAAAATTTTTTTAAAAA
-ACATTTATTTCTTTTCCTATTTTTCGAAAAATAAATAATTTTTTCTGGCA
-ATTTTTAATGAATTTTTGATCGGTAAACTCTTACAGTCCCGGAAATATCC
-TCTACAAAATCGACAACTTTCTTAATCCGAAACTCCACAGGCTCAATCAT
-CTCGAATAATGATTTTTCTGGAAAAAAACCAATTTGTTAAAAGTTTTATT
-TCCAAGCTATAATCTAACTAATAATCATATCCTTATCGGTGACCCCCACG
-ACAATAACATCAGAAGCGAGCTCGGCAGCCTTGTTGAGCAACACTTTGTG
-CCCATTGTGAAGCCGATCGAATGTGCCGCCCAACACGACTTTTTTGTACT
-TTTTCGCCGCCGCCAATTTTTCCGCGTTCTCCAGCAGCTTTTCCTCGCCG
-ATTAGCACATAATTCTCGGGATTTCCGCGGATTTCCGACACAACTAGACG
-GACGTCGAGCTTCGGGCATGAGCTCGCCGATGTTAGGTAGATTTTCGAGA
-CTAGCTCGTCGGTTCGCGGCTCGTCCGGGTTTAATCTGCAAGGAATCCTT
-GTTAACCTTGATTTTCGAGCCGGGAAAAAGCCCAAAGCACTTTACCTCAC
-ATAAAGCTTCGAGCTTAACGCGGCGGCCGCAGACGTGAGCAATTGCTTCA
-GTTTTTGCACATTTTTGCTATTTAACACGAGAAGTCCGTATTTCGAGCTC
-ATTGAGAATGATGAGAAATATCAGGGAATATTCCTCAAATTTTAAATAGA
-AAAATTCGCTGCCACGTTCGCTGCTCTTATCGGCTGCGCGTCTCTATTTC
-ACACACTGTCTCATCTCTCGTCTCGCGTCTCTCGTCTCTAACGCGTGACG
-GTGGAGCGCACTTCCCTCCTTTTTGCTGTAAAATCTTTCAGACATGCCGG
-AAACAAGAAAAACAAGAAATTATTGAACTGAAAATAATGTAAACGTACTC
-ATCGTATTTTTAGCTTCAAAATAAGATATCTTAGAGCATATAATATTGCT
-TCTAAACGAAAACCAAAACATCGCTGAAAATGTTGTGAATTTTATGAAAA
-TCTAGGATCATTTTTCCCATTTTTATGAAAAACAACAATAAAATGAGAAA
-AATTACATGGGAAAACCGAAGAAACTTAAATTTCGCGGTCAAAATTCGAA
-TAGAATTACTGTATTTTTCGCTCAGAGATATTTTGCGCGTCAAATATGCT
-GCGCGTGCGCATTTTCAGCGTTTTTTATTTAATAAAACAGTAATAAAATG
-ATTAAATGCATTTTGTGTGATTTTCAGCCCAAAATGTTTGAAATAAATTG
-TTGTTGTTCAAGCCAGCATTTTTAAAAACTTAAATATATGGGAAAACCAT
-AAAAATAACACAAAAGTTTGGCAAAATTTTGGAACTACAGTACTCTTTAA
-AGGCGCAAGCCCTTTAAGACAAATTTGTCGTGTCGAGACCGGACAAATAT
-TCTAAATTTCTTTTATACATACGCAGATTTAAAGTACAGAAGAGCGCATT
-TGCACATTGCGCAATTTCTAAATTTTTTCTAACAATAAAAATTAAAACCA
-AAATACTTTATTCAATACCACAAATACCACAAGTTCATTTATCTTATTCA
-ACCTCTTCCGCCGACGTCGTCTTGTTGTTGCTCTTCCCCTTCTTCTTAGA
-CTTCTGAAATTTTCTCATATATGCAAACGCGCTCCGATCTAACAAAAAAC
-CTTCTTCTTCTTTTTCTTCTTGTCTACATCTTCCTTCTTTGGCTGCTCTC
-CAGATTCTCCCCCGGCTCCCGGATCGCTCTTCCCAAAGTCCATCTCCGGC
-TTCAGCCCAACCTCAGGCGGCGCGATCATCAGTACCTGCTGGTATCCAGG
-ACCCTTGTAATCCGTCATACAATCCCAATCTGGTGGCTCCTGGGTATTTG
-ACTTAGACTTCTCAAACAGCTTCTGGATCCCATCAGCGATACGATCGTAC
-TCCACAAACTCAGCGACATCCTTGGGCTCACGGATGATGGTCAGAAGATC
-AAAGAACCCAGCAGTGGTCTCCGGAGTGGTTCTCCAAACCGACGCGACCA
-TCGGTGCAGTGATGCGACGTTTCAAGTGGAGCACGTCCTGTTCGCTTTCC
-TTGTTGAGCAGTGCCCATGGGAGAGCTCCGAGGAAGAACTCGAGCACCAT
-GTACCACCAGGACTCCATGTCGTCCTTGTAGCCGAGATTTTTCTGGGAAG
-AAAAAAGTTGTTTTAAAGAAATTGTGAACGGTAAGGTTACCCCCTGGTGA
-GCATGAACGCTCGCGTACTTGACGACTCCTCTGTAGTGAATCGCATTCTT
-TCTCATCTGCTCCTCAGCTTCGTCGTTCTTCTTGACGAATCTTAATTTTA
-AAAAAAGTTTTCGGGGTAGATTTACGACGCGTTGCGTGTCGCGTCGCGGT
-TCGATTTTAGTTGTAAAACTAAATGTATTTGTCCGTGTGGAGTACGCGAC
-TTTCCCACTCAAAATAGGATGGAATTGAATTCGGAGGTGTCACTGTTGCA
-AATTCGGATTGTCTGAATAAATATAAAGTGAGATTTTGAATTTTGCTCCA
-TTGATAATGGTGTTTTTTTTTGAAATTCTGCAAACATTAATTTCTAGAAA
-ATTTGAGTTTCCTCCAAAATTTTTCACAGAAAATTTGAATTCCCGCCAAA
-ATTTTTTCTCTGAAAATTTGAATTCCCGCCAAAATTTTTTCTCTGAAAAT
-TTGAATTCCCGCCAAAATTTTTTTCAGAAAATTTTGAACCCCGCTTAAAT
-TTTTCTGAACTAGGCTATTTTGTCTCGGCCATATCTGGGGTTGTGGTTTA
-CGGCGCGTTGCGTGTCGCGTCGCGGTTCGATTTTAGTTGTAAAACTAAAT
-GTATTTGTCCGTGTGGAGTACGCGACTTTCCCACGCGTTGTTCGTCAGGC
-AATTGTCAATGGAGCGCAAAAACTGCCGACCGCTCCAAATAACTACTTTT
-TGCACTTCATTGCATACACACAGCAGCTCGCGGCGTCGGCATGAGGCCCG
-CATTTCGCGCCTCACTGGAAGCCCCAGATGCCAAAAAATCTACCTCGGTC
-TCTTGCACAACCCGAAATCCAACAGGTAAACCTGATGGTGCTGTCCGTCA
-ATCTCTCTTCCAATACAGAAATGCGATGGCTTGATGTCGCGATGAATGAA
-TCCATTCCGGTGGAGGTCACGAATCGCGGCCAGCGTCTGCTCGGCCAAGT
-GAAGACCCGTCGCCATGCTGAACTTGCGATCCTTGTTCGTGTTCATCATC
-AGCTCGTATAGGTTCTCGCCATACTGAAATATGGAATTTGGCTGAAGTTA
-GGCAACGAAAAATGGTACCAATGGCATCACAATGAAGAGGAAGCGATTTG
-GAACCGTGCCACGTTCCTCGATATTCGTGAAGAATGGAGATGGGTGGTGG
-ATCGACGCGAGGACAACTGACATTTGACGAAGAAGCTGGAATTTTTTTTG
-CTCTCTAGAAACGGTTTTCACGGCGGCCGACAATTTCCGAGTTTGGAAAC
-TCACTGCACTTAGTCATGTAATTTTATAATGAGTGGCTAAACTCGGAAAT
-TGTCGGCCGCCGTTAAACCACAAGACAGTTGGTTCCTTCGCCGCGACCGA
-CACTTTCCGGGTTCCGCGCCGCACTATACAGAAGGCTGGCTGCGCGAGGC
-AGGCTAGACCGCGGCAGGTGTTTTGGCGCCTACATGGACTTGCTAGCTTG
-TCAACAAGGCAGCCTAAGCGTGCCTGCAAAAGGTAGGCAGGCACGCTTCT
-AAAACCGTGCCAACACACCATAAATAACTCACCGAGCTCTTCATGTTCAA
-CGCCTCGCATTTGACCGCAAAAAACTTCCCATCACTCTCGCGTTTTACCT
-TGTAAATCGAGCCGAACGTGCCCGTCGCCAGCGGTTTCGTGACTTCATAG
-GTGCCGTTTTGTGCTCGAATGAGCTCCTTTTGCGGTTGTCCAGGTCCGAC
-TGACGTCATTGATTTAACACCGAAATGTCACGATTATTCGGAAGTGAATC
-GATAATCGAAAATCGGAGACTCGAAACTTTTCGAAATAGATTTTATTATC
-TTTGTAGGGTTTTTGGAGTTTATGATGATAATGAGGAGGGGGGATTTTAT
-GTGGATTAAGAGGCTACGAGGAAAATATTTATTTTTTAAATATTTTATTG
-TCATTCTTTTCTTTTCTAGATTTTCACGTTTCTTATTATTAAAAAAAAGT
-TTTTCAGAATTTATTTCAAAATCCCGAACATAATCTGAAATTCAGAAATA
-CTACAAAAGAAAAACGAAAAAAAAACTGAGAAAAATGGTCCAGATTCTCC
-AGTATTGTTAGGCGTACCCCCCCCCCCCCCCTACCTACCTACCTTCCTTC
-CTCGCCTACATGCATACCTGCCTACCTACACGCCTGAGTGCCTGCCTACC
-TTCCTGCCTACGTTTATGTCTACATTTTTTGCCAGCCTTTTGCCAGTATA
-CTTTACGTGTGTTCTTAATTACGTGCCTATCTACTTACCTTTCTTCCTCG
-CCTACATGTATACCTGCCTACCTACACGCCTGCGTGCCCGCCTCCTGCCT
-ACCGACTCACCTACCTGTTTGCATACATGCCTGCCTACCTTCTTGACCAT
-GCCGAGGCGCCTATCTTACTACTTGCCTACCTACACGCCTGTCTATTGCC
-TACCTGTTTGGTTACATGTGCCTGTGCCGTACCTGTGCCTCAAAAACATC
-TTTATTTTGTAATAAATAATTTTAATAAAACTTTATAAAACAAAAAAAAT
-ACAAAATTGAAAATAACCTAACAAAAAGTCTTTTCAAACCCCTTCGAACT
-GCTCAACTGATAAAAATTCGTGTTATACTTCAACAATTTGAACTGCAAAT
-CCGATTTGACACAGCTAAACTTGTATTTTGTCGCTTTATTCCTGCACAAA
-TGTGCTCCTGGGCAATTGAGACTATTCGAATCGGTGTAGTAGGTGGTGAA
-GCTCTTTGAGCATCTTATTGTAGAGTGATCTTCTCGAAGACGGCCCAGAA
-TTGCGGTGATTGAGGGATTTGTGATGGTTCTGGGGATTTGATGTAATAAA
-TTTAAATTGTGTGGTTTAGATGCAGAAAAAAAAACTAAGAATTCAGACTA
-AGACTTGAAAAAGAGCCAAGAAAAGGGCGGAGCCTATTATCGATTTTTCC
-ACTTGCCGTTTATGAAGTTTATCTACACTTATATAGTCTATTATCAATAC
-TAAGTTAAACAGTATATGGTATAATAAATACTATGACTGCAAGAAAAATC
-AATAATAGGCTCCGCCTCTATATTTGTTTTTTCTCGTTTTAAATCCAAAC
-TTATTCTACGCCGAACCTATATTCTTTTATATTTTTTGAAATTATATATC
-CTTCTATTTATAAGATTTTTCCAGCCAAATTTTTTTTTCTCAGAAAAATT
-GAGTTTCCCGCCAAAATGGGTTTCTCAAAAAATTTGAATTTCCCGCCAAA
-ATTTTTTTTCTCAGAAATTTAAAATTTTCCGCAAAATTTTTCTCAGAAAA
-TTTGTATTCCCCGCCAAAAATGTTTTCTCATAAAACATGAATTTCCGTCA
-AAACTTTCTCATAAAATTTGAATTTCCCGCCAAAATTTTACGAGAAAATT
-TGAATTTCCAGCCAATCTTTTAATGAGAAAGTTTGAATTCCCACCAAAAT
-GTTTTTTTTTCTCAGAAAATTTGAATATTCCGCAAAAATGTTCTGAGGAA
-AATTGAATCTCTAGCCAATTTTTTCTCATAAAATTTGAATTTCCGGTCAG
-CTTTTTTCTGAAAAAGTTTGAATTTCGCGCAAATTTTTTTTCTCAGAAAT
-TTTAAACCTCTGGCTTTATTTTTCTCAAAAAAATTAAAATGTCCTGCCAT
-TTTTTTAAAAAAAAAATTCACAGAAAATTTGAATTTTTAATTTTAAAATT
-CACAGAAACTGACTTCCTTATCGACATGCCAATTGTCACACGATCCGCTG
-ATTTCAGAGCTTCACCGCCCGTAAAATTGCCACGTATCATTGAATCCACG
-TCAGCAGAGTCGGGAATTTCAAAAATTTTACTATCATCCATTTGTTTGCT
-GGAAGCGTTAATTATCGATTTTTATTTTTTTATTCGTTATATTAATTTTA
-TTCATATTTTTTGAAAAATAAAATCAATTTCACTCTCGGATTTCTGGCTT
-CCCTCATAAAATGAAATGAAAGAGTTTGCCGAACTAGGCCATTTTGGCTC
-GGACATATCTGGGGCAGATTTACGGCGCGTTGCGTCGCGGCTCGTTAAAA
-ATAGATTTATTTGTCCGTGTGGAGTACACGACCTTCTCACGCGTTGTCCG
-GCAGGCAATTGTCAATGGAGCGCGAAAAATTCAATGAGGAAGGCCAGAAT
-CCCGTGTTCACTGATTTTTTGAATTTACAATTTTTAAAGTATCGAATAAA
-AATTTTAATTGAAAAAATCGATTTTCAAAAAGTTTTAAAATTTTTTTAAA
-ATTTGAATTTAAAAATCGATTTTAAAAATTATTGATTTTCGAGCAAACCT
-TTTCAATTTGTACGGATGTTCCACGGGCTCATTGAGCCAAACACTATCGA
-TTAAAGATGGGCGTGTCACCACTTTTGCCACGCCCCTTTCATTCCGATAT
-TCCAATAACCCGACGAATATCTCTGATTCGTAATAGTTGGCGAACTCGGA
-AAAATAGGAATCGAACGATTTCGGCACGAGAAGATCAGACCACTCGAGAA
-ATGTGATGAAGCTCCCCGAGCTCTGAAAGTTTGGATAAATAGAGTTGTGA
-GCCTAGTGCAAGTTGAAAAAATCGATAAATTATCGATTTTCTGATTGTAC
-GAATTTAGGCGGGAATTCAAATTTTCTGAGAAAAATTTAGGCGAGAATTC
-AAATTTTCTGAGAAAAATTTAGGCGAGAATTCAAATTTTCAGAGAAAAAA
-TTTTGGCGGGAATTCAAATATTCTGAAAAAAAATTTGCCGGGAATTCAAA
-ATTTCTGAAAATAAATTTAGGCGAGAATTCAAATTTTCAGAGAAAAATTT
-TGGCGGGAATTCAAATTTTCTGAAAAAAATTTAGGCGAGAATTCAAATTT
-TCTGAGAAAAATTTAGGCGAGAATTCAAATTTTCAGAGAAAAAATTTTGG
-CGGGAATTCAAATTTTCTAAGAAAAATTTTGGCGGGAATTCACATTTTCT
-GAGTAAAACTTTGGCGGGAATTCAAATTTTCTGAGAAAAATTTAGGCGAG
-AATTCAAATTTTCAGAGAAAAAATTTTGGCGGGAATTCAAATATTCTGAA
-AAAAAATTTGCCGGGAATTCAAAATTTCTGAAAATAAATTTAGGCGAGAA
-TTCAAATTTTCAGAGAAAAATTTTGGCGGGAATTCAAATTTTCTAAGAAA
-AATTTTGGCGGGAATTCAAATTTTCTGAGTAAAACTCTCTGGCGGGAATT
-CAAATTTTCTGAGAAAAATTTAGGCGAGAATTCAAATTTTCAGAGAAAAA
-TTTTGGCGGGAATTCAAATTTTCAGAGAAAAAATTTTGGCGGGAATTCAA
-ATTTTCTGAAAAAAAATTTCGGCGGGAATTCAAATTTTCAGAAAAAAAAT
-TTTGGCGGGAATCCAAATTTTCTGAAAAAAAATTGGCCGGGAATTCAAAA
-TTTTTGAAAAACATTTTCGGCGAGACTTCAGGGGTTCTCATAAGAATTCA
-AATTTTCTGCAAAAAATTTTGGCGGGAATTCAAAATTTCTGAAAAAAAAT
-TTGCCGGGAATTCAAAATTTCTGAAAATAAATTTTGGCGGGAATTCAAAT
-TTTCTGCAAAAAATTTTGGCGGGAATTCAAATTTTCTGCAAAAAATTTTG
-GCGGGAATTCAAATTTTCTGAGAAAAATTTTGGCGGGAATTCAAATTTTC
-TGAGAAAAATTTTGGCGGGAATTCAAATTTTCTGAGAAAAATTTAGGCGA
-GAATTCAAATTTTCAGAGAAAAAATTTTGGCGGGAATTCAAATATTCTGA
-AAAAAAATTTAGGCGAGAATTCAAATTTTCTGAGAAAAATTTAGGCGAGA
-ATTCAAATTTTCAGAGAAAAATTTTTGGCGGGAATTCAAATATTCTGAAA
-AAAAATTTTGGCGAGAATTCAAATTTTCAGAGAAAAATTCTGGCGGGAAT
-TCAAATTTTCTAAGAAAAATTTTGGCGGGAATTCAAATTTTCTGAGTAAA
-ACTTTGGCGGGAATTCAAATTTTCTGAGAAAAATTTAGGCGAGAATTCAA
-ATTTTCAGAGAAAAAATTTTGGCGGGAATTCAAATATTCTGAAAAAAAAT
-TTGCCGGGAATTCAAAATTTCTGAAAATAAATTTAGGCGAGAATTCAAAT
-TTTCAGAGAAAAATTTTGGCGGGAATTCAAATTTTCTAAGAAAAATTTTG
-GCGGGAATTCACATTTTCTGAGAAAAATTTTGGCGGGAATTCAAATTTTC
-TGAGAAAAATTTAGGCGAGAATTCAAATTTTCTGAGAAAAATTTTGGCGG
-GAATTCAAAATTTCTGAAAATAAATTTTGGCGGGAATTCAAATTTTCTGC
-AAAAAATTTTGGCGGGAATTCAAAATTTCTGAAAAAAAATTTGCCGGGAA
-TTCAAAATTTCTGAAAATAAATTTTGGCGGGAATTCAAATTTTCTGCAAA
-AAATTTTGGCGGGAATTCAAATTTTCTGCAAAAAATTTTGGCGGGAATTC
-AAATTTTCTGAGAAAAATTTTGGCGGGAATTCAAATTTTCTGAGAAAAAT
-TTTGGCGGGAATTCTAATTTTCTGAGAACATTTTTGGCGGAAATTCAAAT
-TTTCTGAGAACATTTTTGGCGGGAATTCAAATTTTCTGAGAAAAATTGTG
-GCGGGAATTCAAATTTTCTGAGAAAAATTTAGGCGAGAATTCAAATTTTC
-AGAGAAAAAATTTTGGCGGGAATTCAAATTTTCTAGAAATCAATTTTTTC
-AGAATTTCAGAAAACACCACCCCGGCTATCAATGGAGCGCATTTTCAAAG
-TCTCACTTTATATTTATTCAGGCAATCCGAATTTGCAACAGTGACACCTC
-CGAATTCAATTCCATCCAATTTTGATTTCCCATAAAAATCTGGAAACGAG
-TCAACTGATATTCCTTTGAGACGCTTCAACTCTTCTAGAAATTCGAAAAA
-CGGGCGACTTGTAGTTGCCACGTATGTTTGGAGATGGCCGCCGAAACTGG
-AAAAAAAATTTAAAATAAACTGACAAGTCTATATATTTTTTCTTTAAATT
-TTTTTAATCGAAAAGCACCCCTATTATATAAATTCTTTTTTAACCTACCA
-TTTTTAATAATTGATGGCCGAGTTTTCTTTTTTAGGCCATGTTCAAAAAG
-CCGGTCGGTACCGGTTTTTGGTGACCGAATTTTCAAATTTTCTAGGCCAC
-GTAGAAAAACCAGGTCTTCTTTTCACACATTGATTGTTTAATTTTCTCAA
-AGAACCCCCTCTCCTATAAAATCACGGTTAATAATGGGCGATAAGTCGAT
-GGCCGAGTTTTTTTTATATATTTCTAGGCCATGTAGCAAAAACTGACCCT
-TTTTAACCCCAGAATGTTCTCAAAAATCGTATTTTTTAATTGTGGAAAAG
-CCCAGAAAATTATGTATGCTGCAAAATCACAAGTCGGCGGCCGAGTTTTC
-TCTCTTCCTAGGCCACGCTGCAAAAACTAACCTTCCGTTTACATATTGAC
-TTTTTCAAATAATTTCAAATAAAAATTATTCACTTATAAAATCATTTACT
-TCATGATTGAAAGCTTTTGCAATTGGTTAAAACCGGAAATAAGTCGATGG
-CCGAGTTTTCTCTTTTCTAGGCCACGTACCAAAAGTGTCCCTTTTTTACC
-CCAGAATGTTGTCAAAAATCGTACTTTTTATTTGTGGAAAAGCTCGGAAA
-ATTATGTTGTAAAAAATGAGTCAAGTCGGTGGCCGAGTTTTCTCGTTTTC
-TAGGCCACGCTGCTTAAACTGACCTTCCATTTACATTTTGGCTTTTAAAT
-TCAAATAAAAATTATTCCCTCATAAAATCGTTTACTGTCATTGTGAGAGC
-GGTTAAAAACAGGAAAAAAAATGGTGGCCGAGTTTTTTTTTCTAGGCCAC
-ATAGCAAAAAACTCACCTAGTATACACATGAGCAGCTAACAACACATTCT
-GCCATCTAACATTATTATAAATAGGCGGAGTACATACAACCAAATCCTTC
-GGCTTATTATCCGCCGGCAAATATCGAATTTTCGCGGTATGCCCATTCAC
-AAGAAGCTCCAGCTCCGTGAGCTCTTCCTCAAGCACTATAGTACCCACAA
-GTGTCACGTATTTGCATAAATTATGCGGAGTTGCTCTGTGAATTTGAAGT
-GGTTCGAGTACGGTTTTTGTGTCGTCACTTCGGATTGCGATAATCTTACG
-ACGTTCCCAATGTGCATCCCGAGGCGCGATAAAGGTTAGTGTTACTTGGT
-TTTTGTAGAGACTGAAAAATTTCAAAAAACTTAAAAACTAACGTAGTTTA
-AAACATTATTCTTCTTTTTTTATTCTGAGATATTTTGATTTTGAAAAAAA
-AAAATTTTTTTTACGAAAAAAAAATTGGCAAAATACCTCAAAAACTGTGA
-GTTTGTTGAAATTTAGTTTTTACAACCACGGGAATTAATTTTTTAAATTA
-AAAATATTTTACGTGTAGTCCTCTCGAATAATTTTGAAAAATATATGAAG
-TGTTGAATTCTGCCGAGTTTTTTTGTCCGAGTGGACTACAAAAGTGCAAA
-GAATTTGGAATTTTTCAAACTTTATATTTAACAGCAATCATCAACAACTT
-AAAAAAATTTAGATTAAAAAATTTTTTTTGGAAGTTTTCGAAAAAAATTT
-TGGAAAAATTTTTAATTTTCAGAAAAAAAAACCAGTTTGATTTTTTTCTT
-AAATTCTTTTTTGAAAATTTGTTGAAACTTTTTTTTAAATGCTAGACTTT
-TTTTTTGAATTTTCACGCGGTTCTGGTTTCCCTCATATTTTGAGATAGAA
-GAGTTTGCCGAACTAGGCCATTTTGGCTCGGCCATATCTGGGGTAGATTT
-ACGGCGCGTTGCTTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAA
-TGTATTTGTCCGTGTGGAGTACACGACTTTCCCACGCGTTAGGCGATTAT
-CAATGGAGCGCGAAAAATGCAATGAGGAAGGCCAGAACCCCGTGAAAAAT
-ACATTTTAAAAAATACTTGAAAAATGTTTAAATTTTCTTTTTAATTTTAA
-ATTTGAAATTTTGTAACTTTACAAAAAAATAATTTTTCGAAATTTTTTTC
-AAATATTTTTTTTCGAATTCTTTTTGTTGAAATTTCAATTCTCTGTTCTA
-AAAATCAATATTCCTTACCTGTATCCCACTCCATAATAGTACGCAGAAAC
-AAAAAATAGGTCTTTCTCGTCGTTATCCAATTCTTTAATCTTATTAGTGT
-ATGAATTTCGAACACGTCTTAATGCAGGCAAGGGATGTATTGAAATATGT
-ACAAATGCTAATAATATTACAAATAGATATAGGGTCCTGCAACGAATTAT
-CAACTGCTCGTAGAGTACGGAATAGGGTTTGAATTGAAAATTGTTCAGTT
-TCGTGTCGGAATTCATTTTTATTATGGGGAGGAAAACAATCTAGTGTGGT
-GGTAGTGGTAATGACAATCGCTATTTGAAATCATGTTGAATAGCTGCGAT
-AAGTATCGGGCGCCAGCGTGGCCTAGGATTTGGGAAAACTCTTCCACCAG
-AAGCTAGTCGTGGCCCAGGCTTTGAAATTTGATTATTTGATCAAGAAATT
-TACAACTAAATTTAAAATCAACAGTTAAGACATTTTTCATAGACTTTTCG
-AAAAATTTCTGATTTTTCCATATCAAATAACCTCGGTACGCATCTAACCG
-TCAGTTGCCTCGTGGCCTAGAACTTTTGAAAACTCTTCCACGAGAAGATC
-ACCGTAGCCTAGAAAGTTTTGAAACTTGTGTAGTTCGCTTGGAATTTTTT
-TTTGGTTTTTTTGTCAACTAACTAGGTTCAATAGCTATTAAAAAGTTGCA
-AAATTGGGCAATTTTTGTAAAAATTCACAATTTTGAAACTTCTCTAAAAT
-TATTAATTTTGTAGTAAGAGGACTCAAAATTGATCTTCAAACACTAAAAA
-ATAGCCCCTTTTTAGAATATAGTGGTTTCGAATATTTTTTGAAAAATTAT
-TTTTTTTTACCCAAAAAAAAGGACAGTCATGGCTGAAAAAAAATTTGGAA
-AAAATAAAAAAATTGTCTAAATTTGTTGAAAACGGGTAATTCATGCATTC
-TGAATTCAGAAAATCTAGGTTTAACCCATCAAAAACCATTAAAAGCGGCA
-AAAATGGGTATTTCATTGTAAAAATAATGCATATACAATAAACAATGTAG
-AGGAATGTTCAAAATCTGTAGTTTTTTTGAAATTTTTTTTTTATTTTTTG
-GTTATTTTTTTTGCAAATTTTCTCGTATATTTAATTAGTTAGTTTGCATG
-TTACATGCTAATGAAAAGGTTTTTTTTGCATCCTGATACATATAAAAACC
-GAGAAATTCACAATTTCACAATCAGTAAGGTATTTAATTTTTGTTAACTT
-TAGTCTTCTGCTCCTCTAAAGCTTCTGGAAGAGGACACTTTCTAAATTTT
-CAAAATATTTTTTGCGCCACTTTCCTGTCAAATTTCTGGCATTATTACAT
-CCAAAACCCAATAAAAATCGGAATTCCATAGCTACGACAACGTCAGCAAA
-AGCGGAAAGAAATTTTGTTTGCCTGTCTAACGAGTCACAAAGCATACACT
-GACGTTTCTATCAGAAAAGACAGGATTTCGTATCAAAACAAAAATTGGGT
-GCGATTGCTCGATGCACCATGTGATATTTTGCTTTTTTTAAAAATTATTT
-TGCTCGTAATGTATGGTGCACTTATTCCGTGGCTGCAGAATTTGCACGCG
-GTGTCATAATGCCCATTTCGACTTGATCTACGTAGATCTACAAAAAAATG
-CGGGAGTTGAGACGCAGAGGTAGGGCTCAACTGATTTCGTTTGGTTAAGA
-GCGTGCTGACGTCACATTTTTATGGGCAAAAAATTCCCGCATTTTTTATA
-GATCAAACCGTAATGGGACAGCCTGACACCATGTGAATGCAAACTTTACG
-CGAAAATTTTTAGATTTTTAATAATCTTAGAATTAGCTATGGTTTTATAG
-AATAATATCAAAATTATCCAAAAAAAAAAACACATTTTTTCAAAATTTTA
-GATTTCCAGTTTCTATTTGAACTTTAAAAGACTAATCCAAATTTTGTTTT
-GTTTCAACGATTTTTCATTGATCTCTCCAAAGAATTCATTGAAACACATC
-ATTCACAAAACTAAAAACTCCCCGACTTGGCTTTCATTCCGAGATGACAA
-ACTTTTTGGTGGCAAAGGTTCTTTGGGGGCATAGTATCCAAGGAGACAAA
-GTATCCAGTAGACAAACTGGGGTGTATCTTGGGGGGCATATCTTTGGTGA
-CAACCTTTTTTTCGACTAGATTTTTATATGTATTTTTCAACTAATTTTTG
-TTCACATTTTTCTGGAATAAGTTTTTTAATGCAATTTTCAATCGATTATC
-GGTTATAATTCCCTCACAATTGAATGTATGAACGATGGTCTTTTGGGAAA
-AGCTGTAAAACGTCCAACTAACTTGGAATATCGTGAGGCTCTTCCTGATG
-GTCTGATCCTTCAGCTCCGAAGGATCACATGGGTACCTTCTGATGTTCTG
-ATCCTTCAGATAAGAAGGATCGTAAGGGTACCTCCTGATGGTCTGATCCT
-TCAGATCCAAAGGATCACGAGGCTCTTCCTGATGTTCTGATCCTTCAGCT
-CCGAAGGATCACATGGGCACCTTCTGATGATCTGATCCTTCAGATAAGAA
-GGATCGTAAGGGTACCACTTGATGGTCTGATCCTTCAGCTCCAAAGGATC
-ACGAGGCTCTTCCTGATGTTCTGATCCTTCAGCTTCGACAGATCATATGG
-ATTTTTGACAAAATTTGAAAAAAAAAATTTTGAAAAAAAACTCGAAATTT
-TTTTTTGTTATTCTTCATTCTTTAAAGAATAGTTCAAATTTATCATGATA
-GGACCGAAAACTTTCAAGAAACAGTATAACTATACATGATAATCAGCTTC
-TACCAAATAATGATAAATTCTCCGCGATGACAAACTTTTCGGTGACAAAG
-TATCTTGGTGGACAAACAAAAATTACCGAAAACTGATGTAAGGAATAGTG
-AAATAGAGTCCTATGGACTATTAAACATGTTCAGTAGGTGTATTCAGGAC
-TGTCCGTCAAAATAAAAAAAAGTTTGTCAGACGAAGTTCGAACCTGGGAC
-CTGTAGGATGCAAAGTGCGCTCACTACCACTACACCAGCTATGCGAAAGT
-CGGCGAGCCTCATCGAAGGCTATTATAAAACTTAGTTCGCACGAGTATGA
-TCGACATTCAACAAACAGTAATATCTCTCAACAAGAATTTCTTCATGGAA
-TTGAGGTCATTTGACTATTTTTATCGGTTTTTCAAGTTGAGCATAGGGTC
-TTTTAATTTTTTGAGCATAGAAAATCATGAAAGCTGCCTGTTCCTTGTAT
-CCTGGATCGAAATAGACGTATCTGGCCTAAAATATTTCCTGAACAGTGAT
-CATTTCATGTCCATTGTGTGTTTCTCTGTATTTTGAACCAGAAAGTTGAA
-CAAAAATGATAATATTATATCGAAAAATGGAACAAATACAAATAATTTTT
-AGGCCTAATCAAATTTCCTCCGGATATTGTTTTTTTTGTCATGATTATAT
-GTGTCTAAATTTTTTATAATGTGTTTTATAACAAAATTCGTCATTATTTC
-CTTCATTTCAAGCAAAATTTAACAGTTCGAGCTTAAAAATAGATGTTGCA
-AAAAATTTAATTCGTTTCGATGAATACGGTATACGGTCGGTGTTTGCGTA
-CTTTGGCGTTTGCGTATGAAGCATCCTATTTGACGCACGAAACTTTCAAT
-GAAATTTAATGCAAATTCTGCATCGAAAAGGACATTACGATGGAAATAAT
-GACGAATTTAATTATAAAACACATTATAAAAAATTTAAAAACATATAATC
-ATGACAAAAAAAACAATGTCCGGAAAAAATTTGATTAGGCCTAAAATTTA
-TTTTTTATTTTTTTCCATTTATCGATTCAATATCAACATTTTTGTTCGAC
-TTTCTAGCTCAAAATTCATAGAAACTCACGATGGACATGAAATGATCACT
-TTTCAGGAAATATTTTAGGCCAGATACGTCTATTTCGATCCAGGATACAA
-GGAACAGGCAGCTTTCATGATTTTCTATGATCAAAAAATTAAAAGACCCT
-ATGCTCAACTTGAAAAACCGATAAAAATAGTCAAATGACCTCAATTCCAT
-GAAGAAATTCTTGTTGAGAGATATTACTGTTTGTTGAATGTCGATCATAC
-TCGTGCGAACTAAGTTTTATAATAGCCTTCGATGAGGCTCGCCGACTTTC
-GCATAGCTGGTGTAGTGGTAGTGAGCACACTTTGCATCCTACAGGTCCCA
-GGTTCGAACTTCGTCTGACAAACTTTTTTTTATTTTGACGGACAGTCCTG
-AATACACCTACTGAACATGTTTAATAGTCCATAGGACTCTATTTCACTAT
-TCCTTACATCAGTTTTCGGTAATTTTTGTTTGTCCACCAAGATACTTTGT
-CACCGAAAAGTTTGTCATCGCGGAGAATTTATCATTATTTGGTAGAAGCT
-GATTATCATGTATAGTTATACTGTTTCTTGAAAGTTTTCGGTCCTATCAT
-GATAAATTTGAACTATTCTTTAAAGAATGAAGAATAACAAAAAAAAATTT
-CGAGTTTTTTTTCAAAATTTTTTTTTTCAAATTTTGTCAAAAATCCATAT
-GATCCGTCGAAGCTGAAGGATCAGAACATCAGGAGGTACCCATGTGATCA
-TTCGGCTCTGAAAGATCAGATCATCAGGCAGAGCCTCATGTTCTTTTGGA
-GCTGAAGGATCAGAACATCAGGAAGAGCCTCATGATCCTTTGGATCTGAA
-GGATCAGACCATCAGGAGGTACCCTTACGATCCTTCTTATCTGAAAGATC
-AGATCATCAGAAGGTACCATGTGATCCTTCGGATCGGAAGGATCAGATCA
-TCAGGCAGAGCCTCATGTTCTTTTGGAGCTGAAGGATCAGAACATCAGGA
-AGAGCCTCGTGATCCTTTGGAGCTAAAGGATCAGACCATCAGGAGGTACC
-CTTACGATCCTTCTTATCTGAAGGATCAGAACATCAGAAGGTACCCATGT
-GATCCTTCGGAGCTGAAGGATCAGACCATCAGGAAGAGCCTCACGATATT
-CCAAGTTAGTTGGACGTTTTACAGCTTTTCCCAAAAGACCATCGTTCATA
-CATTCAATTGTGAGGGAATTATAACCGAAAATCGATTGAAAATTGCATTA
-AAAAACTTATTCCAGAAAAATGTGAACAAAAATTAGTTGAAAAATACATA
-TAAAAATCTAGTTGAAAAAAAGGTTGTCACCAAAGATATGCCCCCCAAGA
-TACACCCCAGTTTGTCTACTGGATACTTTGTCTCCTTGGATACTATGCCC
-CCAAAGAACCTTTGCCACCAAAAAGTTTGTCATCTCGGAAAGAAGGCCCC
-CCGACTTTGCGCGTAAGATATGGTGAGACCCTAATACATCATATTTGACG
-CGCAAAATATCTCGTAGCGAAAACTACAGTAATTTTTTAACCGTCTACTG
-TAGCGCTTTTGTAGATTTACGGGATCTCGATTTTTTTAATGATTAAAATT
-AAACAAAAAATGAGAAAAGAACACGAAGAAACGAAGAAAAATGAAATATC
-GATGTCACTTTTCGGAAAAAAAATTAATTTCAAAAATTGAGCCCGTAAAT
-TTACACATGCGCTACGGTAGGCATTTAAAGAATTACTGTAGTTTTCGCTA
-CGAGAAATTTTGCGCGTCAAATATATCGCACAATACGCATTCTCAGAATT
-TTGTGTTCCCGGAATAATTTATTTATTGGTTTTTTTGGTTGTATTGGTCC
-CAAAAATCAACAAAAAAAAATTTTTATGAAAAATTTCTGTTTTCTTCCGT
-TTAAAATCAAAAGTTGGTTTTTTTTGTTGCTTTTTTTGATAAATTTTTGC
-AACCACCCTGATTTATATTCCCATAAATATTTAATGTCCCGCTTATGATA
-TCTACTGCTTCTTTGCAAAATTCCTACCTGCGGACCAAATACACCATACT
-TGACGCGCACTTTTTTTTTGATTTTCAGCTGGACAAACACATTTTCAGCA
-TGATTCTGACTTATTTATTTAACTCTTATCACTCTTATCGTTAAAAAACG
-CCCTTATAATCATCAACCTATTTTCATTGTCATTCAAAAAAAAAAACTAT
-TTCGTACTCGTCGATCGTACTAATTTGTCATCGTTCCGTTCCGTCGAGCA
-AAAATCAATGTAGTTTTACGTTTTCCGTTGAAAAAAAATCCAAAAAAAAA
-TCCAAAAAAAATCCAAAAAAAAATTCCTTGTTAATTAAAACCGTGAATAA
-AAAATTCAAATAAAAAGTTCAAACGTTTCGTTATAAAAATGTACACCGGT
-AAGCTCAAAAATATACATTTCAGATTCTAACAATGTGCGACGATACGCTC
-GCATTTTGTAGTCCAGCTCCATTCAGTGATGATGTAGAGGTTATTAAACA
-ACGTGAGGCGATCGATTATTCCACACAAATCACTCTGGAAGATGCGATTT
-CTGGGAACGGTAAGTGCGCTCCGTTGTACTCATAGTTCGCTGAATGAAGG
-CATGTATAAGTTCTCAAATTTTCAAATGAAAATTGCCAAAAAAGGTTTTT
-AGTTAAAATTTAAAAAATTATCGATTTTTAAATTTATGAAAATTTTTTCG
-AAAAATTTGTGTTTTTTGTTTTTGTTTTATTGATTTATTGATTTTTTGGC
-GAAAATGTGAAAAATCGAAAAATTATGGATTTTTTCTTGGAATTAAAAAA
-AAAAAACTTTATCGGCTAAGCGAAACTTGCTTTTTCGGTTTATTGATTTA
-TTGATTTACTTGAAAAAGTACTTGAAAAAATCAATACTTTTATCACGGGG
-ATCTGGTCTTCCACATTAAACTTTTCGCGCTCCATTGAGAATCGCCCGCC
-GGACAACGCATGGGAAAGCCGTGTACTCCACACGGACAAATACAATTAGT
-TTTACAACTAAAATCGAGCCGCGACGCGACACGCAACGCGCCGTAAATCT
-ACCCCAGATATGGTCTGGTCTAGTTCGGCAAAAACTCTTCCATTTCAATT
-TATGAGGGAAGCCAGAAATCTTTGTTTTTATTTTATTTTGAAATCTCTAA
-ATTATCGATTTTTTGGAAAAAAAGTTGTTTGAAAATTCGATAATTTTTTA
-ATGATTTTTTGGAAAAATTAAAATTTTCGCTTTTCAAAAAAATCAAAAAT
-TATTGATTTTTGAAAAAAAAAACACGGCATGCAATTCCTAGACCACCAAT
-CAAAAACCTCTTCCAGTGACTCGTCCGGTCCGTGTCTACGCTGACGGTGT
-CTACGATATGTTCCACTACGGCCACGCGAATCAATTCCTGCAGATCAAAC
-AAACTCTTCCGAATGTCTACCTTATTGTTGGCGGTGAGTTCGGCCCGCGA
-AATTCAAAATTTTTAATTTAAAAAAAAAACGATTTTTTCCAGTATGTTCC
-GACGAAGAGACTATGAAGAATAAGGGGAGAACTGTGCAGGGCGAAGAAGA
-GCGGTACGAGGCGATTCGGCATTGCCGGTACGTCGACGAGGTGTATAAGG
-CGTCGCCGTGGACATGTCCGATACCGTTTTTGAAGGAGTTGAAGGTAAAT
-TGCGCGTGAGATTCGGTGTTTGCACAGTTTTATCTCCAAAAACGAAGGAA
-ATTTTATACCTAAATTTCGGAAAAAAATCAATAAATTATTGCCTTTTTTA
-AACGTCACAAAATCGATAATAATTTGAAAATCACAATTTTTTTTTTATTT
-TCAAAATTTCGTTGTTCTATCACGGGAACGCAAATTTCTGAGAATGCGTA
-CTACACAACACATTTGACGCGCAAAATATCTCGTAGCGAAAACTACAGTA
-ATTTGTTAAATGACTACTGTAGCGCGCTAGTGTCGATTTACGGGCTCTAT
-TTTAAGCTCAATTTTAATTTCTATCGATAAATATATGATACAAAATATTG
-ATCCCGTAAACCGACACTAGCGCGCTACAGTAGTCATTTAATGAGTCACT
-GTAGTTTTCGCTACAAGATATTTTGCGCGTCAGATATGTTGCGCAATACG
-CATTCTCAGAATTTTGTGTACCCCGTAATAAAAATTCGAGTTTTTCTAAA
-CAAAAAGTTTAATTTAAAAAACCTCTAATATTCGAGATATTCGATTGGCG
-ATTTATTGATCTATTGATTTTTCGATAAATATTGATTTTTCAATTTTTAC
-AATATTCGAAACAATTATCGAAATTTCAAAAAACTAACAAAAAATATTTG
-CGGAGGAAAATCGATAACTTTTCAATGTATATTTTCTGAAATTCCATAAA
-ATTGATTTTTCTAAATTTAATTTGTTCGATTTTCGGGTTCTCGGTTTTCC
-TAATTTCTGTAATTTTGAGTCGATAATTTTTTGTTTTTTTTTTTCAATTG
-AAACTTTTATTGATCAAGGATTTCTGGCTTCCCTCATAAATTGAAATAAG
-AAGAGTTTGCCGAACTAGGCCATTCTGGCTCGGCCATATCTGGGGTAGAA
-TTACGGCGCGTTTCGTGTCGCGTCGCGCCTCGATTTTAGTTGTAAAACTA
-AATGTATTTGTCCGTGTGGAGTACACGACTTTCCCACGCGTTGTCCGGCA
-GGTGATTGTCAATGGAGCGCGAAAAATGCAATGAGGAAAGCCAGAACCCC
-GTGATTGATTATTGAGTTTTGGAAAACTATTTTAAAAAACCTGATTTGAA
-AGAAAATATCGGTAATTTTTCGGATTTTTAACAAGAAAAAGGTTTTTATT
-TCCGGAAACTTTCATTTAATAATTATTTATTTATTGATTTCTCGGAAAAA
-TTTGCCGAAATCTATCGAACTATAGTCGAACAATTGGACGAAAAGTCGAA
-AAAAAAATTCTAGGCCACGAATTTCCTCTTCCAGGTTGACTTTATGTCAC
-ACGACGCTCTGCCATACCAAGGTCCCGCCGGAGAAGACATCTACGAGAAG
-CACCGCACTGCTGGCATGTTCCTGGAGACGCAGAGAACCGAAGGAATATC
-GACGAGCGATTCGATTTGTCGAATTATCCGCGACTACGACACGTATGTCA
-GAAGAAATTTGCAGAGAGGATATTCGGCCACCGATTTGAACGTTGGCTTT
-TTTACAGTGAGCCTGGCCTAGAAAGGGGTGGCCTAGAAAGAGGTGGCCTA
-GAAAAACAAAACTCTTCCATTTTTTTCAGACCAGCAAATATCGTCTGCAA
-GACACCGTAGTGGGAATAAAAGAAATGGGCCGTGGCCTGCTGCAAACGTG
-GAAAACGAATGCGGATTACTTGATTGAAGGATTCTTGACGACATTTGCCA
-TCAGTGATCCGAAACCGTTGCCGAACAACAAAAGTGCCGATGAAAATGTG
-GAAAATAGGGAGAATATTGAGAATTTTTAGAAAAAATTCGTGTAAATTAT
-GGGAATAAAAATTTGAATACTCGTGAATGTTTACTGAATTTATGCAATTT
-ATTTTTTGAAATTTTCAATTTTTTTGGAAAATTTTTTTTTCTTAGGCTTA
-GGCTTAGTCTTTGGCTTTGTTTTAGGATTAGGCTCAGGCTTAGGCTTAGG
-CTTAGACAAAAACTTAAGCTTAGGCTTAGGCTTTTGATTAGGCTTAGGAT
-TAGTCTGTCTTTCACTTAGGTTTGGCGTCATTGGCGAGCGTTAGCTCGCT
-ATTTAGGCTTGGGTTAATTAGGCTTAGGCTTAGGCCTAGCTTTAAACTTA
-GGCTTAGGCTTAGGCTTAGAATCAGGCGGGCTAGGGAAAAAAAGAGAAAT
-TCCAAAAATTCCAGAAAAAAGGAAAAAAGGTACATCCCGAAGTCGGGTCA
-AAAAATAAAGTGAAGAAATGAAATTTTCACGAAAATGAATGAATATTTTT
-GAGTCTCGCGGATTTATTTTCATAATCATATTCTGAACGTATTATTGACT
-CGTCGTGTGGGACATTTCAATGGATTTTCCGTAAAAATCTCTGTAGAATT
-CCGCATCGGTCAACGATTCTTCACAAGAGCCAAACTCGGCGAGTCGGTCA
-AACAAATGTTTGAGCTCCTGAAGAGTAGTTCAAAATTATATATGAATTGA
-TTTATCTTGCAAACCTTTCTCCGTTTGTCGGTAAAAAGTCCTTCGGGGCA
-GATTTCCGTATCAATCAGACGATTTGCAATGTATACAATCCACATGAGAT
-TTGTTCGCCTTGAGAATTTCTCCCAGTTGCCCCTGGAACGTTAATTTTTC
-TGAATTTCTAGAAAGGATATAGAAATAGCAACAAAAAAAAAAATTTATCC
-AAATAATGAGCTATTTAATGTAGTTTATATTACTACAAATACTTTTCTCA
-TAAGAACGTCTTGTTCTTGATAAATGTGTGCTTTAAGAAAAAAAAAAGTC
-AAAAATAGAGTCCTGAGATGTCGGGCGTTGTACCTATTAGGGGTGTCAAT
-AAGTTCCGGGTCAAAATTCATAACTTTTTTCGTAGCAAATCGATTTTCTT
-GAAAATGTGGGAATTTATGTTATCAAACATGGTCTTTCATTTGACGGCAC
-TTTCAAAAAGTTTTGACCACTCCATGTACCCTAGCTCGGATCCACTTTTT
-TCAGGCGTATGCCCGATCTCGCTTCTTTGTAACTTTCAATTGAGACTTAT
-GTGCGGATTTTGATTTATTAAGTATACAATGTAAGAATACAATAAAAATT
-TGAGAAAAAATTCGTTCAAAAAAACAATTTTTTTGATCGGCAAAAAACCC
-TCGAAAAAAATTTTGTCGAAAACTCTTGATTTTTTGTACAGGAATGATGC
-AACCAATTCTGAACAATTTTTTAACACATAAAAGTTTTGAATTTAAGGCG
-TCACACACAAGCGGCAATGGAAAAAATGATTTTTTAGTGAATTTTTTGAA
-ATTTTTGAGAAATTCTCGAAATCTAAATATTAAATTCAAATGTTTTGTGT
-GTTGAAAAATTGTTCAGAATTGGTTGCATCACTCCTGTACAAAAAATCCA
-GAATTTCCGACAAAAATTTTTCCGAGGATTTTTTTGACGAACCAAAAAAA
-TTTGTTTTTTTGAAGGAATTTTTTCTCAAATTTTTATTGTATTCTTACAT
-TGTATACTTAATAATTCAAAATCCGCACATAAGTATCAATTTAAAGTTTC
-AAAGAAGCAAGATCGGGCATACGCCTGAAAAAAGTAGATCCGAGCTAGGG
-TACATGGAGTGGTCAAAACTTTTTGAAAGTGCCGTCAAATGAAAGACCAT
-GTTTGATAACATAAATTCCCACACTTTTAGAAAAATCGATCAGCCACGAA
-AAAAGTTATGAATTTTGACCGGTAACTTATTGTGCTACATGCTTGTTGCG
-AAATATACCTATTTACCTATACCTATACCTATACCTGCAATTTTCTCTCA
-TCTCTCGATATACTTCAAATTGTGGAGCATCTGGTCCTTCAAAAATCGTC
-GTATCCTCTTCCAAATCCCAGTAGATAGTTGTCGAATCTAAAATTATATA
-TTTTTAATTATAAATTGTATATTTTTTTAATTTAAAAAATAACAAACCTT
-TCGAAATGCGGCTAAGTGTGAAATCAATAATATTGACCTTAATTCCATGG
-GTCCTCAGTGGAATTTTCTGCCCATGCACAGTGTAGGAGAGCTCTTCCAC
-TCCGTTCCGATCGATCAGCACATTACTAAGATTTAAGTCCCTGTGCTCGA
-ATTCAAGAGCTGCTTCAGCTGCAACCATTGAGAGAACGAGCTGGTGAATG
-ATGGAAAATAGTTCATCTTCACTTTCAAGGACAAAATCTGCCAGCGAGAT
-TCCACCATTTGCCGAGACGAAAAGGATAAAGTTTTGATGTTCTGAAGAAT
-AAACATCTGGCCTCAAATGTTCGGATTCATTGAGCTTATCGTAGGCATCC
-CAAGCTCTCAGTAATCCCTTAGGATATTCCCCCATGACTATTTGGGCTGA
-AATCATTTCGATAAAATTCGGCGTAGAATTCCAAGAATTTGGGTCTCTCA
-ACGCCGACAGTTCCTTCATCACAATCACCTCTGACAAAACGGCGTGGGTT
-GTTGGAATTTCCACGGATTGATTTCCATAGAAACATCCGTTGTTTTCGAA
-TGGCAAAACTTTGATAGCAACCGGTCTACCATTCCAGACAGTTGAGAAGA
-CTTCACCGTACGCTCCTTCGCCGAGCTTCTTCACTTTTCGAGCATCTAGC
-GCCGACGTTGGTAGGCTACCCCATGGTTTTGCTTCTTTTTGGCCAACAAC
-ACGGAGAAGTTGTGCCATGGACGGATCTTTATTGTGAAATGTGATACTGC
-CAATGGGGATATTTCTAGAATCAGGATGAGCTGACCGAGCACTTGGAGCT
-CTTTTGTTCAGTTCAGCAAGCATGCACAGTTCGAAAGCATGCACAGTGCG
-AAAATGACTTTTCTGAAATTGTCATCAAAAGTTCATTTTGAAAATTCGTT
-TCGGCAAAAAATGCAAATGCATTTCTGAAACTCACCAGTTGTCTCTGAAA
-TCGTCGTTCGTTGGTCATGTCGAGTGCAAGAACGGTGGTGGTGACCACTG
-CCGTCTTCGTGAACCGCATCCAAGACATGTTTCGGGAGATAACTATAGAA
-ATGAAGTTTTGAAAAAAAAACTCAAGACCACAATTATTGAAACACGTTAT
-TAGGCCAATAACTTCACACGTGAATTAATACATTATTCATGTATTTTTCT
-TTGACTGTTATCACGGGTTTCTGGCTCACGGTAGTTCAGCCACGGTAGCA
-CAGAAAATAGATGACCACGTTCATGATAATCAGTCTGAAACCTATATTGG
-CTGCTATCTCGAAAACTCTCTAAAAACGCGTTTTGAGAAATTATTGATTT
-TTTGGAGAAAATCAGAAATTATTGATTTTTTGGAGAAAATGGGAAATTTT
-TCATTTTTATTGGGGAAAATCAGAAATTATTGATTTTTGGAGAAAATCAA
-AAATTATTGGTAATTTGAAGCAGGGGTGGGCAGCAATTGCCGTTCGGCAA
-ATACGCAAATTACCGGTGTGCCGATTTTCCGGGAATTTTCATTTTCGGCA
-GTTTGCCGGTTTGCCGATTTGCCCGACATTTTTCAATTTCGGCAATTTGC
-CGGTTTGGCGATTTGCCCGAAATTTTTCAATTTCGGCAATTTGCCGGTTT
-GCCGATTTGCCCGACATTTTTCATTTTCGGCAATTTGCCGGTTTGCCGAT
-TTGCCCGAAATTTTTCAATTTCGGCAATTTGCCGGTGTGCCGATTTGCCA
-AAAATTTTCATTTTCGGCAATTTGCCGGTTTGCCGATTTGCCGGAAATTT
-TCATTTTCGGCAATTCGCCGGTTTGCCGATTTGCCCGAAATTTTTCAATT
-TCGGCAATTTGCCGGTTTGCCGATTTGCCGGAATATTTCATTTTCGGCAA
-TTTGCCGGTTTGCCGATTTGCCCGAAGTTTTTCAATTTCGGCAATTTGCC
-GGTTTGCCGATTTGTCGAAATTTTTCATTTTCGGCAGTTTGCCGGTTTGC
-CGATTTGCCCGAAATTTTTCAATTTCGGCAGTTTGCCGGTTTGCCGATTA
-GCCCGAAATTTTTAAATTTCGGCAATTTGCCGGTTTGCTGATTTGCCAGA
-AATTTTTCAATTTCAGCAATTTGTCGATTTGCCATTTGCCGGAAGTGTTC
-AGAAGGATTTTTTTATAATAAGGAACCACTTAAAACTGTGCCGTTTTGAA
-ACTTTTCCCCGTTTTTTTAAGATGATTTCATAGAATTTGCTTACTTGGTT
-TGCCGAATTGCCAGAAGTTTTTCAATTCCTACAAGTTGCCAATTTGCCGG
-AAACTTTTTAATTATGGCAATTTGCCGGTTTGCCGATTTGCCAGAAATTT
-TTCAAATTCGGCAATTTGCCGGTTTTCCGATTTGCCGGAAATTTTTCAAT
-TTCGGCAATTTGTCGATTTGCCGGAAAATTTTTATTTATGGCAATTTGCC
-GATTTGCCGGAAAAAAAATCGTTTCCCGCCCACCCATCAGTTGATGAGTT
-CATCTTTTTTTTGTGTCTCTCCCATCAATCTTAAACTCGACCCGGACTGG
-CAAACGCATATCTACAGTTTTCTCTTCTTAAAATGGTGGTCTTAAGTTTC
-GAAGACTATGCGTAATTTCTAGCGAAGTGGCGAATTTATGATGATTTTGC
-AATTTATCAATGAAAAAAACAAAAAAAGCATTTCCGCGTGGCAAATTATC
-ACTGTTGTGCCGCGAATAGTACTGATATAATTTTTTTTTAAATTGAATCA
-GTTTGGAATTTCGAATTTTTGAAACAACCGCCGGCAAAATGAATAATATA
-CTGTGAGTTTTCAAAGATTGTTCCCCGGTTTTCTTGTAGATTTTTGTGCA
-ATTTCAAAATTTCGACTTTCAGCGGAAACAAAAATACAAAAAGGTCGAAG
-AAGAAGGACGGAAAGTTTACGAGCAACACTGCTACTGATCTTGTTGAGGC
-CCCAAAACCAGGTGGAGCAAAAGGATCCAAAAAACCAAAACCATCGAAAG
-GAAATGACGACAGGGGACGCGGCGAACCGGAAATGACTGCACAATCCAAA
-AAAACCAAGAAAGCAAAAAAAGTGAGACAGAAGAGAGATACAAAGGCACC
-GGTGAGTTCAATTTTATAGTTTTATAGATATAATTGTATCAGGGGTGGGC
-GGCAATTGCCGTTCGGCAAATTGATTTGCCGCCAAATTCGGCAAATCGGC
-AAATTGCCGGTTTGTCGATTTGCCGGAAATTTTCAATTCCGGCAATTTGC
-CGGTTTGCCGATTTGCCGGAAATTTTCATTTTCGGCAAATCAGTTTTGCC
-GGAAATTATAAGACGGAAACACTGTCTTTTTGAATTGTTCCCGTTTTTTC
-TACATATTTTCATAGAAATTCATAGAGACAATTTGCCGAAATTTTTCGGC
-AAATTGCCGTTTTTCCGGCAATTTACCGATTTGCCGGAAATTTCCATTCC
-GACAATTTGCCGATATGCCAATTTGCCGGAAAAAATCGTTTGCCGCCCAC
-CCCTGAATTGTATCCCTTTTTAGTCTCCTGCAATGTCACCTCGATCACGT
-GAAATGCTGTCAGACAACAAAAAGACGACCGTTGAGGATGATCCAGCAGT
-TCCAATAACAACAAGTGTCGCTGGAGCAGTCACTTCTACGATTCCTGCTC
-TCATGTCCACTGAAAACGCGTTTCAGCCACCCAAAGACCTTATCTCGGGA
-AGAAAGCCAAAAGGTGCTCCGAACTTGTCTGGCAGCGTTCCACTTTCACA
-CAAGAGCTCACTGACTGGAGGTGCAGATAAGTGGGTTGGAGAAGCCGTGG
-CAAAGAATTGGATGGATTCGATCGGTTAGCATCCTTTTTTTTTTGATTGG
-AGGCCCCGGCGGCGTAAAAATCGTGCCAGAGTTGCAAGAGTGGGCGTTTT
-TTTTTGTTTTTCTGTTGTTGGTGGGGCCTTATTATTATTTGGTCGATGGT
-GATTTTACTTTACTGGTGGAAATCCGCTAATAAAACTAAAAACATCGGGA
-TATAAATAAAAACCCAACTTTAAAAAGCGAACCAATCAGCAGTTTGCTCC
-GCCCACTATTCAACCAATCCAATGATTGGTTCGAAATTGGGTACTCATTT
-TAGAGGGAATTCAAACGGAAGATTAGCAAGTTCGGTTATTGTTTCATTAG
-AATATCATTGCTTATATATATATTTAAAAAATAGTGTACGTCATCAATGG
-GCGGAGCCTCTCCCATCGTGGTGAGACCCATCGTGGTGAGACACATCGTG
-GTGAGACCCATCGTGGTGAGACCCTTCGTGGTGAGACCCTTCGTGGTGAG
-ACCCATAGTGGTGAGACCCATCGAGGTGAGACCCTTCGTGGTGAGACCCA
-TCGTGGTGAGACCCATCGAGGTGAGACCCTTCGTGGTGAGACCCATCGTG
-GTGAGACCCCCATTAATTTTGGCGTGAAATTCAAATTTTCTAAGAACAAT
-TTTTTGGCTTTTTTTTTAAAGAAAAATCTGGAAAATTCTAGCATTTTTTT
-AGAATAATCTGGAAATTTCTTGAACTTTCTAGCTAAATCTGGAAACTTCT
-AGAATTTCCTAAAATAATCTGGAGACTTCTAAAAAAGATCAGGAAATTTC
-TAGAACTTTTTTAGAATCTTCTGAAAACATCTTTCTAGAGTATACTAAAA
-ACTTCTAGAATTTTCATAAAATTCCGCGAAGCTCGAGGAAGAGATTTGTT
-CAAACAATTTAATGTGGAGCCAGTCGGAGCACGCGCTTTGCGCGTGCGAA
-CGGCTGGTTTTAGATATTTTGTAGTATTTTTCAAATCTTAAATTTTCAGA
-CACAGCAGAGGTGAAAAAGGAATACGATAAACTGCAATCACAGAAAATCG
-ATGTGGAGAAGGACTGTAAAACCTGGAAATCCAACCCAAAATTTAACCAA
-TCGGAAGACTTTCCTGCCTTGGACTCCAATCTCGTGAAACTTGGCAAAGA
-CTATGTGAACATCAGTCTTGTAGATGTTCCATTGGGAAGAAATGTTCATC
-TCGGTCAAGCTCCGGTCACGAATACGGAAGAAACATTCTGGAAAGCTGTG
-TTCGACAAGCGAATCACTCACATTGATCTACTCGTCGGCGATGAAACCAT
-CGAATTCTTCCCTAAAAAGGCAGAAGATTATACAAATTATGGTCAGATGT
-GGATCAATAACCGCCGTGTCGAGTATGTCAATGACGATGTGTACCGATTT
-GCAATTGAAGTAGTGCCCCACGGATGCTCCAACTCGATCATCTGCAATGT
-GACTGTTATCAGCAATTGGAAAGTGGACACTGTGCCTTTGAAACAAGCAA
-TCGCCATCAAAGAGGCACTTGGTCTAAACTACTTCTTGCTGAAAGCACCC
-GCTGACGAGCATGCGATGATCGTCTCACCACGTGGAGCTGGACGAGCTGG
-CTACTTTTTGGCACTTGCGGTTGCAGTCAACACAATTGATACAAAGCTTG
-CCGAACCATGTATTGCGGATATTGTCAAATCGATTCGCTCCCAGAGACCA
-AGAGCCGTGGATTCATTTTGTCAGTACTGCTCCCTGTACATTTCGTTGCT
-CTACTTCATCAAGGTATTGGTTTTTGAATTCTTGTAAAATGAGAGAATAA
-TTCTCAAATTTACAGAAGAAAGTGACAAAACCAGCAGAAGGGGATAAAAA
-GCCAACACTGAGCAACAAATACATCTACAAGAAGTCGGTTGAGTTGACCA
-AGCAATTCACCGTTCTCCTTCTCGAAGCGAGTCAGCAAAGTGTGATGGGA
-CCTGGATAGTTCTTCTCCATTTTGAATATGGAAAAGCATTTGAAGTGATC
-TGGGTTTGAAAATGAAGAATTTTATAAACCCTGGATTATTTCCGAAATCT
-TGCTTCCTGCCTGCTGTCTCATTGCGGCTTGATCTGCAAAAAAAGCGGTA
-ATATCTCCCCCAGGAAAATGTGACGTCAGCACACTCTTAACCATGCGAAC
-TTAGTTGAAACGTCTGCGTCTCTTCTCCCGCATTTTTCGAAGATCACACC
-AAAATGGGATACTTTGACAACACGTGCCTGCCATCGCTTCCTGACCGGGG
-ATTTTGTTAGAAAATTCGTGGAAAATAGGAAGAAACATTTCGAGAAAATG
-GAATTATTGATTTTCTGATTTTCTCAAACAAAAAAAAATTAAAATCGATT
-GATTTCTGGCTTACCTTACCTAAATTGAAATGGAAGAGTTTGCCGAACTA
-GGCCATTTTGGCTCGGCTATATCTGGGGTATATTTACGGCGCGTTGCGTG
-TCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAATGTGATTTGTCCGTG
-TGGAGTACACGACTTTCACATGCGTTGTGCGGCGGGCGATTGTCAATGGA
-GCGCGAAAAATACAATGAGGAAGGCCAAAACCCCGTGTATTGATTTTTCG
-AAAATTTCGGAAAAATCTCTTTGTTTTATTCATTATATTTCTCCTAATTT
-CTTTGAAATGTTCAAAAAATCTGATTTTCTTTTTTTTCCCGAATTTTTGA
-AAAATCGATATTTGCTATCCATATTTCTCGAAAAGAAAATCGATTTATTA
-ATTTTTTTCCGGTTTCCTGGAAGCTAATCAATTCAGAAAAAAGAATTAAG
-CTATGAATATATACTTATAAAAGTCGTAAAAGGTATGGAAATATAAATTA
-TTTTAAAACAGCGATTTCTGACTGAAGCATCTCAACTACCAGGGCCTCAA
-GTTCTTCTTATCCGACAAATGAGACGAGTCGGAGCTATAATTGTGCCGAT
-ATTTTCCGGGCGCCGTCTCTTCGAACTCGGATACGGTAGCCTGCCCGACG
-TATTTGAAATCGCCCATTAGCACTTCGTGGCAAGCGCCGATTGATGCTCC
-GTGGCCGACGAGTAGGAGGTTTCCTGAAAGAAAATCGATAATTTGCGGCG
-TGTTTTTATTGATTTTTATGTGAAAATTGGCAAATTATTGATTTTTCGGC
-TGAAATCATAAATTACTGATTTTCTGTTAAAATCAGTAATTTATTGATTT
-CTTCGGCTAAAATCAGAAATTATCGATTTTTCTGTGAAAATCTGAAATTA
-TTGATTTTTCTGCGAAAATCAGAAATTTACGTAGTTTCGCAAAAATTACC
-TTCATATTTCTCGAAAATCGCCCGCAGGGTCTTTCCGACACGTGGCACAC
-ACGCGTCATCTCCACATCCTTCGCGGGGTAGTGTGTACTGAAAAAAAAGT
-TCGGTAATTTTTCTAGGTCTCGCAGCGATTGCCGCCACCGGTATATTTTC
-ATTTTTCCAACTATAGCGCCAGCACCGGCGCCGGCATCTTTTTATTTTTC
-CACGTAGCACGTCGGCGCCGGCAGCCGCGCAAACTATTTTCGCCGCCGCC
-GGCATCTTTTTATTTTCCACATAGCGTGCCAGCGGCGCCGCCGGCATATT
-TTTATTTTTCCACGTAGCACGTCGGCGCCGGCAGCCGCGCAAACTATTTT
-CGCCGCCGCCGGCATTTTTTACTTTTCCACGTAGCGCGCCAGCGGCGCCG
-CCGGCATGTTTTTATTTTTCCACGTAGCGCGCTAGCGCCGCCCCCGGCAT
-CTTTTCATTTTTCCACGTAGCGCGCCAGCGCCGGCAGCCGCGCAAACTAT
-TTTTCGCCGCCGCCGGCATCTTTTTATTTTCCACATAGCGTGCCAGCGGC
-GCCGCCGGCATATTTTTATTTTTCCACGTAGCGCGCTAGCGCCGCCGCCG
-GAATTCATTCATTTTTCCACATAGCGTGCCAGCGGCGCCGCCGGCATCTT
-TTTATTTTTCCACGTAGGGCTCTAGCGCCGGCGGCATTTTTCATCTTTTC
-ATGCAGTGCGCCAGCGCCGCCGCCGGCATCTTCTCATTTTCCACGTAGCG
-CGCTAGCGCCGGCGGCAGCGCAAACCATTTTTCGCCGCCGCCGGCGCCTT
-TTCATTTTTTAATTAGTGCGCCAGCGCCGCCGCCGGCATCTTTTGATTTT
-TCCACGCAGTGCGCCAGCGCCGGCAACGGCGCAATTCTAATCTCGGTCTT
-TTTTGAGCGATACCTTCGAGAAAACAGGAATATAGTCCAAATCAACAAGC
-GGAAATTTCTCAGCTAGTTTGTCGGTTTCCCAGAATCCAGGAGGCTTATC
-ACAAAGATAAAGTGCCTCACAAAGGCCACCGTCCGCCTTCACTTTCATTC
-CTTTATCCTCAATAATCGTCGAAGCTGTCTCAATTGTCCGATCGAACGGC
-GAGGCAAACGTATGCGAGATTTGTGCATTTTCGAACCGATTTTTGCACTC
-TTTCGCCTGTTGCCGACCGCGCACGCTGAGCATCGAATTGTCCGACGTGA
-GACCGTCGGCTCCGTCGAGTTTACGCCAATTTCGATTGATATTGTCCTCG
-CTGCAATGCAAAAAATCAATAATTTCTGATTTTCACCGTAAAATCAATAA
-TTTCTGATTTTTGTTGAAAAATCATTACTACCGATTTTAACTGAAAAATC
-AATAAATTCAGATTTTCATTTTTTTTTTCGAAAAGTCGATAATTTCCAGA
-TTTTCATCGAAAAATCAATAATTTGTGATTTTCACAAAAAATCAATAATT
-TCAGATTTTTACCGAAAAATTGATAATTTCAGATTTTCACCGAAAAATCA
-GAAATTATTGACTTTGGATAAAAATCAATAATTTACTGATTTTCATCGAA
-AAATCAATAATTTCAACCTTTCGCAGAAAAATCGATAATTTTTAATTTTC
-ACCGTAAAATCAATAATTTCTGATTTTCACCAAAAATTAATAATTTTAAT
-TTTTTTTTCGAAAAATCAATATTTTCTAATTTTTATCGGAAAATCAATAA
-TTTCCGATTTTCACCAAAAAATCAATAATTTCAGATTTTTATCGAAAAGT
-CAATAATTTACGAATTTGACAAGAAAAAATCAATAATTTGCTGATTTTAA
-CAGAAAATCAATAATTTTTGTTTTTCATTGTTTTTTTTTTCGAAAAATCA
-GTACTTTTTTAATTTCCCCAAAAAATCAATAATTTTTGATTTTATTTTTC
-GAAAAATCAATAATTTCAGATTTTAACCGAAAAAATCAATAAATTCAAAA
-AATTTCATTTTTTTTTTGAATTCTTAAAAGTACCGTTCCGCGTGTCGAAC
-AATCCAAATTTTCCGTGGATAAGTGATCGGCATCCTATCGAGATCGGTTT
-TAGCTGAAAAAAAACCTTAAAAAATTGGAAAATTGTGTACTCCTCTCGGA
-CACGTGGTGTCAGGCTCTCCCATTACGGCTTGATCTACAAAAAATGCGGG
-ATTTTTCGTTCTTAACCATACGAAATAAGTTGAGAACTCTGCGTCTCTTT
-TCCCGCATTTTTTGTAGATCAACGTAGATCAGACCAAAATGAGGCACACT
-GAATGAAGACACCAGGATTTTTCGAAAAACTCTAAAGAAATTCTGCAAAA
-AGTGACGTCATGAGGTATATAGGTATGAAATCGAATACTTGGTATCAAAT
-GACGGAAAAATAAACGAAAGTTGCAAAATTTTTTGATGGAATTTATTAGA
-CTTTGGCGGGAAAACAGATCAAATTTACATTAAAAAATACGGGAAAAATA
-CGGGGAAAAAAACCAAATTATTGCCTAAAAAATTCAGGATTAAATTGCGA
-GTTGTACTTTTTCTTCTTTCCACGCTTCTCCTCCGAATCCTCGGCGGCTT
-TTCGTTTCTGCAGCAGCTCAATTTCCTCGGGATGTAGCAAAGCATGGGCT
-CTCGCTTTCTCGACTCGTTCCCGTTTCAGACGCTCGTCTCGCATGCTCGC
-CAGCTTCTGCCGTCGTTCTCGATCGTATTCCTCTTCGAGTTGACGTTCTT
-CAGAGCTATCACGGTGGCGGTGCTTTTCTGGAAGAAAAATTGGGGGGTTT
-TTTTGTAGTTTGTAGTGGTGAGCACCCTATATTGGAGGCGCGAAAAAAGA
-GATTTTTCGAATTTTTTTGTAGATCAACGTATGGTTAAGAACGTACTGAC
-GTCATATAATTTTGGGCGAAAAATTCCCGCATTTTTGGTAGATCAAACCG
-TAGTTGGACAAAAAGCAGATTTTTCGAAAAAAAATTACGAATTTCTGGCT
-TTCCTCATAAATTGAAATGGAAGAGTTTTTGCCGAACTAGGCCATTTTGG
-CTCGGCCATATCTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGG
-CTCGATTTTAGTTGTAAAACTAAATGTGATTTGTCCGTGTGGAGTACACG
-ACTTTCCCACGCGTTGTCCGGCAGGCGATTGTCAATGGAGCGCGAAAAAT
-TCAATGAGGAAGGCCAGAACCCCGTGGTGGTTCGATGCACAAAACTGATT
-TTTTTTTTGAATTTTTGGGATTGCGCAAGAAATTTCGCCGAAAAAGTCGA
-TAACTCAAAAAATTCTAAAAAATTTGGATAATCTGGAGAAAAAACCCAAA
-ATTTGCTGAAAATTTCGAAAAATTTAGCTTTAAATTTTTGCGCATGGCCG
-CCGGAAAAGAAAAAAACTCGGCCACCAATTTTTTGGCGGCCATGATGCAA
-GACACCATATTTGACGCGCAAAAAAAGGTGTTTTTGGATGTTTTTTTCTT
-TTTCCGCCAGAATTTTTAATAAATTTCCAGGGACAAAAAATCATAACCTG
-TTGCAAAAATGTTTTTTTTTTCGAAAAATTCAATTTTGCGCGTCAAATGT
-GATGCTTTAAGCTCTGTGGCCGCCGAAAAAGAGAAAACTCGGCCACCAAT
-TTTTCACTCTCCATTGACAATAGCCTGCTGGACAACGCGTGGAAAAGTGT
-CGTGTACTCCACACGGACAAATACATTTAGTTTTACAACTAAAATCGAGC
-CGCGACGCGACACGCAACGCGCCGTAAATCTACCCCAGATATGGCCTGGC
-CTAGTTCGGCAGAAACTCTTCCATTTCAATTTATGAGGGAAGCCAGAAAT
-CCGTGGCCGAAAAAGAGAAAACTCGTCCACCGATTTTTTTTTCTGACGGC
-CATGACAAGTTTGCGCGTCTATAATACATCATATTTGACGGGCAAAAAAT
-TTTTTAAAGTTTTTTCGAATTTTTGTGATTTTCGAGCAGAAAAAAAAATT
-GTCTGAAAATTTATGTGGCCGCGGTAAACTTCGGCCACCGATTTTCGACG
-ATTTTGCCCGTGTTTTTGACGGAAAAAGCACCATATTTGACGCGCAAATT
-TTCAAAAAAAAAAAAGCCCAAAAATCGCACTTTTCTTCTTCTTCTTGTCT
-TTTTTATGCCGTTTCTTCGCCTTTTCTTCACTATCACTATCCTCTCGTTT
-CCGCTTCCTCTCCTCTTCCAGCTCTTTCCGCTTCAAACACGGCAGAGCAT
-CGCGCGCTTTTCGTCGATCAAGTGGCTCGGCGGCTCTTCGCAGCGGCAGC
-TCCTCGTACCACTCTTTTTTCTTGTTTAAATCGTTCGTATTATCCGCGAA
-ATACACCTGAATTCCCATTTTCGACTCCCATTCCTTCTTCTCGGCAGCTT
-TTTCCGCTTCGTAGTCGCGGTTTCCGGATCCATAGTTTTTTCGTTCTTCA
-CGTTCGAGATCCTGCAAAATATCGATTTTTTTTGGAGAAAAATATAGTTT
-TTTTTTGGAGAAAATTATCGATTTTTTGGAAAAAATTATCGATTTTTCGG
-GGAAAATTAACGATTATTTTAATAGAAAATTATCGATTTTATTTGGGAAA
-AAAATCACTGATTTTTTGGAAAAAATTATCGATTTTTTTCGGAGAAAAAA
-TATTAAATTTTTTGCAGAAAATTATCGTTTTTTTTTTTGAAAAAAATTAC
-CGATTTTTCAGAGAAAAATATCGATTTTTTAGAATAAAATTATGGATTTT
-TAAATATAAAATTATCGATTTTTAGGGAGAAAATTATCGATTTTTTTTGG
-AGAAAAATATTGTTTTTTTTTGGAGAAAAATATAGATTTTTTTGAAGACA
-TTTATCGATTTTTTGTTGATAAAATTATCGATTCTTCGGGGAAAAATATA
-GCTTTTTTTGGATGAAATTATCGATTTTTTGGGAGAAAAAATACCGATTT
-TTTTGGATAAAATTATCGATTTTTTTGAAGAAAAAGTATCAAATTTTTTG
-AAGAAAATTGTCAATTTTTTTGGAAATAAATATAGTTGTTTTGGATAAAA
-TTATCGATTTTTCAGCTAAAAATATAGATTTTTTTAGATAAAATTATTGA
-ATTTTAAAAAGAAAATTATCGATTTTATGGGTAAAAAATAACGATTTTTT
-TGGAGAAAATTATTGATTTCTTCGGGGATAAATATTGATTTTTTCGGGGA
-AAATTATCGATTTTTGGATAAAATTATCGATTTTTTGGAAAAAATTATGG
-ATTTTTTTTGAAGAAAAATATTGATTTTATTGGAGAATAATATCGAATTT
-TTTCGGGAAAATATCGATTTTTTGGAGAAAATTATCGATTTTTTTTGAGA
-AAATTATCGATCTTTTGGGTAAAATTATCGATTTTTTGAAGCAATTCTGA
-GCCAAATTTTGAATTTTCGAGCGGCAATTTTTGCACAAAGCATCATATTT
-GACGCACAAAATTCGAATTTTTCAGAATTAGTTTCACAAAAAATCCATCT
-ATCACCTGAAACAAGTTCACATGTCCCGTTTCATCTGAAATGCTGACATC
-TTTTGCTGCTCCAGCTGAGCTCGAACCAGCTCCTCCACTAAACATCGTCT
-CCATTCGTTGATCGGCTCGGGCTCTCAACTGCATCAGGCGCCGCTCGTTT
-TCCGCCTGAATTTGCCTGTCGAGCACACGCTGCTCATCTTCGGCGGCTTT
-TCGCTCGTCTCGGCGAACCCGTTCCATGTTGGATTTTGTCCGAACGTGCC
-ATGATTTGTGATGGAGAATGTTCATCTGGAAGCGGAAATTATAGAGAAAA
-AATTGATAATTGTGCTCGAAATTTGGCTCTGGAAGAAGCGCAAAAAATCA
-ATAATTTCGTCCAAAAATCTATTTTTTTCAGAAAAACCAAAAAGCGTTTT
-TTTTTCCAAAAATAAAGATAATTTTCGTCCAAAAATCGATAATTTACTTC
-TAAAAGTCTCAATTTTTCCAACAAAAAAAACAATTTTCGTCGAAAAACCG
-ATGTTTTCAGAAAAATCAAAAATCAAAAAAAAAATTAAAAAATTAAAAAA
-AAATCAATAATTTTTTCTAAAATCTTGCAATTTTTTTCTAAAAATCGTTT
-AATTTTCTTCTAAAATCGATATTTTTCCGGATTTTTTCGTGAAAAAAATC
-GTCAATTTTATTGAAAATTTTGCTAAATTTCGAAAAAAAATCTTGAAATT
-TCGATGCACCATGATTTTGAAAATTCTGCTCCGGATCAATTTTTCGAGAA
-AAATTATCGATTTTTGGAAACTATCATACAAAAATCGATAATTGTGCTCG
-AAATTTGGCTCTGGAAGGAGGAAAAATCAATAATTTTCTTCTAAAAATCG
-ATTTTTTTTCCAAAAAATCAATAATTTCGTCGAAAAACCGATGTTTTCAG
-AATAATCAAAAAAAAAATTAAAAAATTAAAAAAAAATCAATAATTTTTTC
-TAAAATTTTGCAATTTTTTTCTAAAAATCGTTTAATTTTCTTCTAAAATC
-GATATTTTTCCGGATTTTTTCGTGAAAAAAATCGTCAATTTTATTGAAAA
-TTTTGCTAAATTTCGAAAAAAAATCTTGAAATTTCGATGCACCATGATTT
-TGAAAATTCTGCTCCGGATCAATTTTTCGAGAAAAATTATCGATTTTTGG
-AAACTATCATACAAAAATCGATAATTGTGCTCGAAATTTGGCTCTGGAAG
-GAGGAAAAATCAATAATTTTTTTCTAAAAATCGATTTTTTTTCCAAAAAA
-TCAATAATTTCGTCGAAAAACCGATGTTTTCAGAATAATCAAAACAAATT
-TCAAAAATAATAAAAAAATCAATAATTTTTTCTAAAATTTTGCAATTTTT
-TTCTAAAAATCGTTTAATTTTCTTCTAAAATCGATATTTTTCCGGATTTT
-TTCGTGAAAAAAATCGTCAATTTTATTGAAAATTTTGCTAAATTTCGAAA
-AAAAATCTTGAAATTTCGATGCACCATGATTTTGAAAATTCTGCTCCGGA
-TCAATTTTTCGAGAAAAATTATCGATTTTTGGAAACTATCATACAAAAAT
-CGATAATTGTGCTCGAAATTTGGCTCTGGAAGGAGGAAAAATCAATAATT
-TTTTTCTAAAAATCGATTTTTTTTCCAAAAAATCAATAATTTCGTCGAAA
-AACCGATGTTTTCAGAATAATCAAAACAAATTTCAAAAATAATAAAAAAA
-TCAATAATTTTTTCTAAAATTTTGCAATTCTTTTTTCTAAAAATCGATAT
-TTTTCCGGATTTTTTTCGTGAAAAAAATCATCAATTTTATTGAAAATTTT
-GCTAAATTTCGATAAAAAAACGATTATTTTGAAATTTCGATGCACCATGA
-TTTCGAAAATTCTGCTCCGGATCAATTTTTCTAAGAAAATTATCGATTTT
-TGGAAATCATCACACAAAAACCGATAATTTTGTGAAAAAATTCGATTTCG
-ACGCACCATGATTTCGAAAATTCTCAGAATTTTAGAAAATTTATCGATTT
-TGTGTAGAAAAAATTCGAATTCCAGTGGAAAAATTTTCTTTTCTCAAAAA
-ATGTTTGATTTAAAAAAAATCGATTTTTTCAGAAATTCAGGCATTTTTTT
-GCAAAGTAAATTGGCAAAAATCGATGATTTCACTGTGAGAATGGGAATTT
-TTGTCAAGAAAAATATAAAAAATTGCCTTAAACAATTAAAGTGGTTGTCA
-AAAAATTGAAATTTTGGAAAAAAAAATATATTTACAGATGAATTTATTAG
-AAAAATTCCACAAAAAAAGAGGTTCCATCTAATATTATTATGTCGCATTG
-GGGGTTATATCACATAATTTTTTTTTGTTTCGGTTGCCGTGGAGAAGGGG
-GAAAATATCACATTTTTCAGAGGAAAATCACAATAAATATAAGGAAAATT
-TACAAAAAAAGGCGCGGGGGGAAATTTCTTCACAAAATTATCGATTTTTG
-GGTGATAATTTCCAAAAATCGATAATTTTTATAGCAAAATTGATCCGGAG
-CAGACTTGGGATAAAGCAATTTTTGGAGGGGGAAAATGAACAAATTAATA
-AAATATAATATATTCGGGGCAAAAAATGGGAAATAATTAAATTGTCGGAA
-CATATAAATGATTAATTGATTGAGCCAATGGCATTGGTTTCATGTGAGCC
-AACGCTTCATTACAGAACACTTCCTCCCGATGACGTAGCGGACGAGAATG
-CTCGACACGAGCAAGACGGTAGGCTCTAGAGGCGTTTATCTGGAAATTTT
-TAGTGAAAAAATGAAGAAAAAAAGCTTTTTTCGCTGAAAATTCCAAGATT
-TTCGGTTTTTTTTTTGCTAATTTTTTTTAAATTTGCCTTGAAATAAATTT
-CCAGATGTTCAGTAGTTTTTTTTTCCTTCAAAAATCGATTTTTCAATTAA
-TCAAACATTTTTCAGAGTATTAATAATTATTTTTCCACCAGAATTTGAAT
-ATTTTATCCAAATTCTGAGAACCGGCTCACAGAGCGGCTTTTACTACGTG
-GCCTAGAAAAATCAAAAACTCGGCCAATGATTTATCTGGGATTTTTGACG
-TGGGATGTTTCTGAAACTTGACGAGAATGTTCTCGAATGGGGGTTCTATA
-GTTCCACCGTGGCGATTTTTGAGAAAATGTTCCGTATCCATGTTATGAAG
-GTGGCCGAGTTTTCTTATTTTACGGCCACGTAATAAAAACCGCTCTGTGG
-GCTCCTGAGCAGAATTTTCGAAATCATGGTGCATCGAAATTTCAAAATTA
-TCGATTTTTTTTTTGAAATTTAGCAAAATTTTCAATAAAATAAGAAATCA
-TGGTGCATCGACAAACCAATTTTTTCCATTTTTTCGGAATTTAAAATAAA
-ATTTAAAAAAAAGTAAAATTCTGGAATTTTACTTTTTAAAAATATTTTTT
-TCAAATTCTGGCAGTTTTAAAATAATAAAAAAACGTTTTTTTTCCATTTT
-TTTCAAAAATTTTTTTCTGAAATTTAGTACTACAAATGTAAAATTTACAG
-GGTTTTCACAGGAATTTTCAATTTTTTTGATTCGCTTTTCTTCAAAAATT
-CTAAATTTTCAGGTTTTTTTTTCCAATAATTTTTAATTTTTGTGAAAAAA
-AAATGTTTTTAATTTTTTCAGACTTAAAAAATTGTGACAACTTTTTTCAA
-TTTTTTCCGCAAAAATAAATTTTCGGAAATTTCAAATTTCCTACAAAAAA
-CCCCTTACCACAGTAAGCCTAACCAACTGTGAGAGCTCGCTCATCGTGAC
-TAGGGCTCCGTCGAAAAGCGGCCCAAACTCCAGAGCCGACGCCGTATCGA
-CGCGCACTCGAACCATCTGAAAAACCAAATAATGGAAGAGTTTTTTTTCG
-GCCAAGCCAGGCTGCCCCATTTGATCTACGTAGATCTACAAAAATTGCGG
-GAGAAGAAAAAAGAGACGCAGAGTTCTCAACTGATTTCGCATGATTAGGA
-GTGTGTTGACGTCACATTCGCAAAAAATTCCCGCATTTTTTGTAGATCAA
-ACTGTAATGGGACAGCCTGGGACCACGTGCAGTGTTAGGCTGTACCATTA
-CGGTTTGATCTACAAAAAATGCGGGAATTTTTTGCAAATGTGACGTCAAC
-ACACTCCTAATCATGCGAAATCAGTTGAGAACTCTGCGTCTCTTTTTCTT
-CTCCTGCATTTTTGTAGATCAACGTAGATCAAGCCTCTCTCTCTCTCTCA
-CCTTATCACCGACTTGCTCCAACACAATCAGAACATCACAAAACTTGGTG
-GCAATCGTTTCGCGGGTGTACACTTTCCGTGTGTTCTCAGTCCACACCAC
-ATGCACCTCATCGTTTCCGATATGCTTCCACTTCTGCTGCACATCGCCGT
-TGAGCATCGTGCTCACATGGAATATCACCTCAGCCTCGGCGTCTGCAAAG
-TACGGAGCCCGTGTCTCTACGGGCAGGCCACCGGTGTAACCATCGTGTCC
-TCGACCCACTTTGACCTCCCATCCGAGCTCCGACGTGAAGCTGTCAAATT
-GCGCGGAGGCGGAGGCGGTGGTGTTGGACAGGATCGATGCTCGATCTTCC
-TGCGATTCTCCTACATAGATCACAGCGACTTTGTGGACTTCACGAGAAGA
-AGTCTGATCTAAATGCTTCAAGTCACGCGGGAAATTCGCGTGAACCTGAG
-ACACAAGTGGGACGAATCCCAGGGAAGCCGACAGCGATCTCCATTCGAGA
-AGCTTCGCGTTCGGAGTGAACGCTGGCAAATGATCGTGAGCCGCCGACGA
-TGTGCCAAGTGGCTGTGGCTGCCGTCTAGACGTCTCAATCATCGATGTAA
-ACTGTGCGGCACCATCGACAGGCGACGGGCTCCCACGTGACGGGGGGTAG
-TCCGGTAGATCATCGAACGGATCATCCATCGCTCCGAGGATCCCCTGGCT
-TTCCCGACCGGGACGTTTTCCCTTGAGAGCCTCTTTGCGTAGCCAATTGG
-TCACGTTGGTGGCAGGCTTGCGGACATCCTCATGGGTATCTAGATCCCAG
-ATATGCCGGCCAACTACCGTTCGGGAAGTGATTTCGCAGGGGGATTTGGC
-GTGGAAATCCTTTCGGGACACCGAGATAATCGCCGATTGCCGATTAATAT
-ACACGGTTTTATCCTCTCCTTGTAGTGGCGGTGCTCCTGCAGAGCTCCAT
-CTCTGAACCTCAAAACCTCGCACCGGATACTGACCACCGAGCGTGACAAG
-CTCTCCATGGAGCACCATATGCCTATCGGCCAAGATACCGCGAATGACGA
-GTGGCATTTGAGGTTGTGGCCATTGCATACAAAGCTTCACCATCTGCCAC
-TCGATCTCGGTTCTCGTACGCTCATCGCGTAGGAGCGAGGCGGCACGGAG
-CAGCGCCTGGAGCAGTGTGGTGCTCGAGAACTGGGCGAGCGAGGCGATCG
-ACGAGCAGAAGAGCGGAATGAGCCGCATCGCGAACTGATGGGTTTCGATG
-GTTTTCAACGCGGTGAGCACCAAGTCGATTTGGGCTTTTTGCACGATGAG
-GATGGCTAGCGAGTTCACGATTACTACGGCGTTCTCCGATACGTCTGTAT
-TGACAAGCTGATCGAGAAGGATTTGCTCGGCTCCAGGATACGATGAAGCT
-AGCATTGAGAACAACTTCAACGAGTTCGAGGACACCTTCGTGTCCTTCGA
-GCTCTTCGCCGCCTGCAACATTTTCGGCAAATGCTCCAGAGCTCGCGGAG
-CAACAATTGATAGTTCGTGTGCAGAGAGCCCACAAATCGCCGGAACCACT
-AGTTGCTCCTTGGATTGCATAAGACGGATGAAGCAGAGAAGAATGTTGGC
-CGAGAGCAGTGGCGGTGGCCGACGGATCGTTGATTCGTTGAGAATTGCAC
-TTAGAGCCGGAACACAGCGGGGCAGCAGGATTGGGGGTACGGTAACGAGG
-CGGCACGCGAGCCAGTGGGCCAGTGGGTGCAGGTTTACCTGGAAAGCAAA
-ATTTTTTTTGGCTTTTTTTCAACTCGAATTTTTTTTCTAAATTTTTTTGT
-AAATTTTCTAAAAAATAATTGTTCGATTTCAGAGTGCCTCATTTCGTGCG
-TGATCTACGTTGATCAACAAAAAATGCGGGACTGATTCTGCATGGTTAAG
-AACGTGCCGACGTCCTATTTTTTGGGCAAAAAATTCCCGCATTTTTTGTA
-GATCAAACCGTAATGAGACAGCCTCACGTCGTGCCAGAAAGTCCCATTTC
-GTGCTTGATCTACGCTGATCTACAAAAAATGAGGGGCTGATTGTGCATGA
-TTAAGAACGTGCTGACGTCACATTTCGTTTGGCAAAAATTCCCCCATTTT
-TTGTAGATCAAACCGTAATGGGACAGCCTGACACCACGTGATCTTCAAAT
-TCCCGCCAGCCTGAAACCCACCAAAAGCAAGTTCTCAATCGTCAATGACA
-TGCAATCGATTGCCACGTGGGCACTCGAGTTGGTATACGGATCCACGAGT
-GAGATGACACGACGCCACGTTTGAAGCCACGCCAATTTGTCGCCAGACCA
-AGACTGAAAAAGGGAAAAAGTGTGATATGCGCCTTTAAGAAAGGGTTACT
-ATAGTTGTCAACAACAGAAAAAAATGCTGAAAAGGCATTTTTCAGGGTCT
-ATTTTCACAATGAGTTTGGGTATAAATTGGAGAGTTTTCCATAGATAATG
-CGTACTGCGCAACTAATTTGACGCGCAAAATATCTCGTAGCGAAAACTAC
-AGTAATTTTTTAAATTACTACTGTAGCGCGCTGGTGTCGATTTACGGAAA
-TTAATTAAAATAATTGATAAACAAAACAGAAACTATGTTCAAAAATCGAG
-ATCCCGTAAATCGACACAATCGCTACAGTAGTAATTTAAAAATTACTGTA
-GTTTTCGCTACGAGATATTTTGCGCGTCAAGTATGCTAAAAAATATGTAG
-TTGTGGGAGCCTTGTGAATTTTTAGAAGGTTTTTTGAAAAATAACTCGCC
-ACTATTAAAAAAAATATATATTTTGAGGCATTTTCAAAGGGTTAAAGTAA
-TTTTTTACTTTTAAAATCGTTTTTTTTTATAAAATAAATTTTAAGCGTTT
-TTAGTACAATTTTCGTAAGTTTTTCGTTTTTTTTTTGGTCATATTTTGTA
-GTTTTTTACACTATTTTCCAGAAATCGTCAGAAAAAGCACTTAGAAACGG
-GCTAGAAAAACGGGGTTTCGGCTTGCTGCGAAACTTTTTTTTTTGAAATT
-ACCGCGCAAAAATAAATTGTCATTCAAGTAATGTTGCAAAATGTATTAAA
-ATATAGGTTTTTAAAAATGTATTTTAATACAGTTGTGACGTAATTTTTCT
-ATTTCAATTTTTGCAAAATAAGAAAAAAAATGAATGTAAAAAAGTTAGAA
-AGTTTTTAAAACACATTTTATACAGGTCATTACGCTCTATTTTCTGCCAT
-TTAAAGCGAGAATGTTTTTTGACACTACATATATAATATTAGGTCTCCAA
-ATAAGATCCGGGTCAAAAATCATAACTTTGTTCGCTGTGTATCGATTTTT
-ATGAAATTGTGGGAATTTGTGTTATCAACCATGATCTTTCATTTGACAAT
-AGTCACAAAATTTTTTGGCCGTCCGAAGTGCCCGTACTCGGAGCCAATTT
-TTTCAGACATTTTTCAGATCTCGCTTCTTTTCAGGTTTCAACTGAGGTTT
-GTGTGCGGATATTGCTTAGTTTAGTACACAATGTAAGAAAACAAAAAAGT
-TTGGAAAAAAATCCGTCCAAAAAAAATTTTTTTGTCGCTCGTCAAAAAAT
-CTACAAAAAAAATTTTGTCGAAAATTCTTGAATTTTTATACAAAAATGAT
-GTAACCGTGTGCAAACTAATTTTAAACATACAAAACATTTGAGTATGAAA
-TTTGGATCTCGAGAAATACTCCAAAAACTCGAAAATAGTTCGAAAAAGCT
-GTGTTTTTTGTTATTTTTTTTAGTGTGACGCACCAAATTGAAATTTTTTG
-TATGTGTAAAAATAGTTTGCACATGGTTACATCATTTTTGTATAAAAAAT
-CGAGAATTTTCGAAAAAAAATTTTTTTGAAGATTTTTTGACAACCGACAA
-AAAAAATTTTGTTTGGACGGATTTTTTTCCAAACTTTTTTGTTTTCTTAC
-ATTGTGTACTAAACTAAGCACAATCCGCACACAAAGCTCAATTGAAAACT
-GAAAAGAAGCGAGATCTGAAAAATGACTGAAAAAACTGGCTCCGAGTTAG
-GGCACTTCGGACGGCCAAAAAATTTTGTGACTATTGTCAAATGAAAGATC
-ATGGTTGATAACATAAATTCCCAAAGTTTCATAAAAATCGATACACAGCG
-AACAAAGTTATGATTTTTGACCCGGATCCTATTTGGAGACCTAATATATA
-TATATATATAAAGATACCTACCGTAACCGCATTTGTAATATCATCAGTGT
-CATGAAAAACGTTATCCTCTGCAATTGTGTTCGACGATGACATACTATCT
-CCAGTCTCTGACGAATCATTTCTCGGGTCTTCCATCATTGCCGATTCGAT
-TGCCTGTCGTCGACTGTTCTGTGAGACTTCTGTCGCTTTTCGGAGAGCTT
-CTTCACGGGAGAATATGTCGATATGGGCGAGATGGAGGATTAATGCTCGC
-GTTACACTGTTCACAATCTGAAGATTTCGTTTTATTTTTTTGATTTTGGC
-TGGAATTTCATAAAGCTATGCTTTTGTTGAAATTTTAGTTTAAAAAAATA
-AGGTTTTTGAACTGAAAATTGGGATAAGAATTAGAAAAAAATTTGTTTTT
-TCTCTAAAACTGCTGCATTTTATTCAATTTTGTAAGATTTTCTGTACAAA
-ACATAATAATTTTTGAATTTTTTTTCCAAATTTTTTGAAATTTCAGCAAG
-AACTGGACAAAAAGCACTACTTTTACTAAAATTGGCAGCATTTAGGAATT
-TCTGAAAAAAACAATTAATTTTCATTATTATTGTCATATTACAGGAACAC
-ACTATTCTGAGAATGCGTATTACACAACATATTTGACGCGCAAAATATCT
-CGTAGCGAAAATTACAGTAATTCTTTAAAAATGACTACTGTAGCGATTGT
-GTCGATTTGCGGGCACGATTTTTTGAAATGAATTTTAATCATATTTTGAG
-CAAAAAATGGGTCAAAAATCAAGCCCGTAAATCGACACAATCGCTACAGT
-AGTAATTTAAAGAATTACTGTAGTTTTCGCTACGAGATATTTTGCGCGTC
-AAATATGTTGTGTAATACGCATTCTCAGAATTTTGTGACTTTTCAAAAAA
-AAAAATCGTGATCAAAAAAAATTTTTAATTGTTTTTTAAGATGAAATTAC
-GATTTTTTTCGTTCTCTATAAATTTTGATCAAATTTATTTCAAAAAAAAA
-AAAAATTCTTTCTATATTTTTTTTTTCGAGTTTTTTTTTCTATCTTCTGT
-ACAAAACACAGCAATTTAAAAAAAAGGCAAAATTTTAAGATTTTTCTAAA
-TCTAGATTTCTAATTTTCCTCGGGGTTCTGGCCATCATCCTCATAAACAG
-AAATGGAAGAGTTTTTGCCGAACTAGGCCATTTTGAAACTCTTCCATTTC
-AATTTATGAGGAAGGCCAGAGCCTCGTGGAAAATTAGAAATTAGATTTCG
-AAAAATCTTAAAAGTTTGCCAATTTCTTATTAGATTGATGTGTTTTGTAC
-AGGAAATTGAGAAAAAAATCGGCAATTTTATACAATTTAATTTTAAAAAA
-TATAGTTAAAAATAGAAAAATTCAATGAAACTGGAAAAAAATGTTTACTT
-TGAAAAGTTAAAAAAAATGAAAAAAAAACTCAAAAATTGAATAAAATGCG
-GCAATTTTTGAAAAAAAAGCTTTTTTCCATAGTTTCTGTCAATTTTCGGC
-TAAGATTAATTTTTTTTCATCAAAATTTCGATTTTCATACTCTCTTACCG
-AAGCCCATTGCTCAGCCATCGGTATCCAAACACCCTTCTTCATGACGTCA
-TGCACCTCATCCCACACCTCATCGTCAATTTCGATGCGTCTGACAGCCTT
-AATCACGACGACATTCGAGATGAGTGTCGACGTAAAAGCAGCCGACACAT
-TCTGGGAAAACGCGTCCGATTGGCGACAGATTTTCGAGGCGCATGTGCAG
-AGTCCCGCCATTAATTCTGACCAGAATTTTTGGGGAAGCGGTTTTGGGAG
-TTGAATTCGATGGGAAACCAGCTGCTTGCACGATGTTAGAATCGCAAATG
-CTATGGAGATTGCCGAGGAGTGACTGGAAAAATATTTTTTTTTAATTTTT
-AAAGGGATTTTGGGAAATCGAAAAATTTAAAAACTCGGATTTATGAAGTT
-TTTGGCAAACCGGCAACTTCTGGTTTTTGGAATTTCGCCACTTTTTAACA
-ACCGGCAATTTGGCGATTTGCAAATTTTTGGAAAACCGGCAATTTATGGT
-TTTTTTTTCGGAATTTTGCTAATATTTTTAAAACCGGCAATTTGCCGATT
-TGCAAATTTTTGGAAAACCGGCAATTTGTGGTTTTTGGAACTTGGCCACT
-TTTTATAAACCTACAATTTGCCGATTTGCAAATTTTTGGAAAACCGGCAA
-TTTCTGGTTTTTTTTTGGAATTTTTCTAAAATTTTAATAAACCGGCAATT
-TGCCGATTTGCAAATTTTTGGCAAACCGGCAATTTGTGGTTTTTTTGGAA
-TTTTTCTAAAATTTTAATAAACCGGCAATTTGGCGATTTGCAAATTTTTG
-GAAAACCGGCAATTTTTGATTTTTGGAATTTTGCTAAAATTTTTAAAAAC
-CGGCAATTTGCAAATTTTTGGAAAACCGGCAATTTGTGGTTTTTGGAATT
-TTGCCACTTTTTATAAACCGACAATTTGCCGATTTTCAAATTTTTCGGCA
-AATTGCAGGTTAATAAAAAGTGGCAAAATTCCAAAAAAAAACCAGAAATT
-GCCGGTTTTCCAAAAATTTGAATATCGGCAAATTGTAGGTTTATAAAAAG
-TGGCAAAATTCCAAAAAACCACAAAATGCCGGTTTTCCAACTCTTTCAAC
-GAGAGTATCCAATTTTTTAAATAGAAAAATTGCCGTATTCCCTACCGTTC
-TCCACACATTTGCCGATTTTCAAATTTTTGGAAAACCGGCAATTTTTGAT
-TTTTGGAAGTTTGTAAAAATTTTTTAAAGCGGCAATTAGTGGTTTTTGGA
-TTTCTGTCACTTTTTATAAACTTACAACTTGCCGATTTCAAATTTTTGGA
-AAACCGGCAATTTGTGGTTTTCAAGTTTTCTGCTAATTGGCAAACTGGCA
-AAATGCCTTATTTTGGAAGTTTAGGTAAATTCTCAGAACACCGGAATTTT
-GACATTTTTCAAAATTCCAAAAACCACAAATTGCCGGTTCGCCAAAAATT
-TGCAAATCGGCAAATTGCCGGTTTTTAAAAATTTTTGCAAAATTCCAAAA
-AACCACAAATTGGCGGTTTGCCAAATTTGCGAAATTCCTAAAACTGGAAA
-TTGACGGTTTTCAAAAAAAAAAAAAGAAGGGAAATCGGCAAATTACAGAC
-TTACAAAAAGTGGCAAAGTTGCAAAAGCCAGAAATTGCCGGTGTGCCAAA
-TTTGCGAACATTTGAAAATACCACAAATCAAATTGCCGGTTTGCCGAAAA
-TGTGCAAATCGGCAAATTGCCGGTTTTTGAAAATTTTTGCAAAACTCCCA
-AATTTACAGAAAAAATTCCAAAAATCAAAAATCCGAATTATTCCAGAATT
-TTTTCTTCGGAAAAATTAAAAATTGTTCAATTTTCCAACATTTTCAACAA
-GCGTATTATCGAAAAAATACAATCGCACAAATTTCTCGTAATTTATTTTT
-GATCTACCTTGTTGACTAGGCTCCGCCCCTAATCTTGTTGCTGTTGTTAT
-TGTTGTTGTGGCTGTCTAGTTGAAGGAAGGGGCGGAGCCTATTCAACGAG
-GTAGATCAAAAATAAATTATGAGAAATTTGTGCGATTGTATTTTTTTTCG
-ATAAAATCCAATTTTTTAATGGAAAATTGCCAATTCCCTACCGTTCTCCA
-CATTGAGCCAAATACGGACTGTGAAAGAAGCCCAACAAGATATTCGAGAG
-CAACAGCGAGCATCGTTCAATCGATACTTCTCCAGACGCTACGAATGGTG
-GAATTTCGTACTGCAAAAGCCATGCGGAGAGCACATTTACCACTTTATGA
-GTGACATTTGAGCATGCCAATGGGAGTTTCATTGCTTCACGCATTAGTGT
-TAATGCTACGTTTGTTGCCTGGAAAAGGACAAAAAAAACTATTTTTTTAA
-ATGTAAGTAATTAATTTATTTTTTGAAATCTCTTTAAATGTGGTGTAGTC
-GAATATTTTTTCAATTGCTTAATTACCCTCAAAATTGTCTGAAAACACCG
-AATTTCATAATGAACTTCTTGAAAACTTCTCAGAAAAAAGTTATGACGCC
-TCAAAAAATGGCCTAAAATTGGTTAAAATTTGAAATTTGACCTACTTGCC
-AAGCGGCTGGAAACTAGCTTTTTTTTGAAATCACTGTCAAATTTTGAGTA
-TTCAATTTAATTATCTTGCGTTTTCAACTCGATTCAGGTATTTTAAAATC
-GATAAACGAAGAGATTTTTAAAAATTATTTACCAAATCTCTTCTTCCATC
-GATTTAAAAATACATAAATTTAGTTGAAAACGCAAAATAATTAAATTGAA
-TACCCAAAACTTGACTGTGATTTCAAAAAAAAGTTAGTTTCCAGCCGCTT
-GACAAGTCGGTCAAATTTCAAATTTTAACTAATTTTAGGCCATTTTTTAA
-GCCGTCATAACTTTTTTTTTTTGAGAAGTTTTTCAGGAAGTTTCATTATG
-AAATTCGGGTGTTTTCAGATAATTTTTAGTATAATAAAGCAATAAAAAAA
-ATTCGACTACACCAACTTCAAAAATGTAAGCAATTTTATTTTGAAGGCGG
-TTTTCTTTTACTTTTCTAAAAAAAAAATTTATTCAATTTTACGATTTTTT
-GCGTAAAAAAACACGGTCAAATTTTTGTTAAATTCGAAAAGGCGTGTCCA
-TTACGGTTTGATCTACAAAGAATGCGTGAATTTTTAGCCCAAAAAGTGTG
-ACGTCAGCACGAAAATTCTGCGTCTCTTCTCCCGCATTTTTTGTAGACCT
-ACGTAGATCAAGCCGAAATGGGAGAGCCTGACACCACGCGCGTGTGCGCC
-TTTAAAGTGAGTACTGTAATTTCAAAAATTCCACAACATCGAGAGTTTGA
-AACTACAGTACTACTATTTAAAGGCGCACACACTTTTTCGAATTTAACAA
-TAAATTGTCGTGTTGAGACCGTATTTAGGGCTCAAAAAAAAAATAATTAT
-CTCGTTAGAATATTCGGGAAAGTTGCAGTTTCACTGAAAATTTGAATTTC
-CCGCCAAAACGAATTTTCTCCGAAAAATTTGAATTTCCGCCAAAAAATTT
-TTTTAAATCAGAAATTTGAATTTCCCGCCAAAATCGTATTTCTCAGAAAA
-TTTGAATTTTCGCCAAAAATAAAAAAAAAAATTTTGGCGCGAAATTCAAA
-TTTTCTGAAAAAAAAATATTTCGGCGGGAAATTCAAATTTTCTGAGAAAA
-TATTTTTTGGCGCAATTTTTCATAGAAATTTAGTTCTTTTGATGTGTAAA
-TTTCCAAAAATTTCAACAAAAAATCGCATTTTTCTTATTTTTTCCCCAAA
-ATTTTCAAATTTTCTCCTCCAAAACCACGGAACTTTATGCGACGAAAAAA
-GCGCATTTCGATACAAAATCAACGATGCATGTGTAGTTTGTAGTGTTGGT
-TGTCCTCCAGCCGTTGTGTGAGTTGTTGCCGATGCAATATTATTAATCCA
-TCGAATTAGCCAATATCTTGCAATTACCACCGGATCAGCTGTATCCAATG
-GTTCACCATTCTCATCGGCTCCTTCCCAGCCACCGAATACATCGACTCCG
-TTCGTTTCCAGATCGGTGAAGCATTCGCCCATGTATAGCTTTATTACTCT
-GAAAATTGAAGAGTTTTGTACTCCTCTCGGACAATTGGAGGTGATTTTTT
-TTTTCGAATTCTTTAAAACAAAAATTTCCCGAAATTGAGCTTTTAAAATT
-TTAAAATTTCAAAATTTCAAAATCAAAAAAAAAAAAAAAAACTTTTGTAC
-AAAATTTAAAGTGGAGAATTTTTGTATTTTAGACAAATTTTTTAAACATT
-TCTAGCAGAGTTGAAAATTTCAGGCAAATCGGCAATTCGCCGAAATTGAA
-AATTTCTCATAAATCGGAAATTGCCGAAAATGAAAAATTCCGGCAAGTCG
-GCATATTGCCGGAATTGAAAATTCCTTACAAATCGGCAATTTGCCGGAAT
-TGAAAATATCCGGCAAATCGGCAATTTGCCGGAGTTGAAAATTTCCGCCA
-AATCGGGAATTTGCCGAAATTGAAAATTTCGTATAAATCGCCGATTTGCC
-GGAGTTGAAAAATTCTGGCAAATTTGAAAATCGGCAATTTGCCAAAGTTG
-AAAAATTCCCGGCAAATCGCCAATTTGCAGATTTTTCGACCGAAATTTGC
-CTACCGGCAATTCCTGCCGACCCCTTTTTTCCGAGAAGAATTAACTTTCC
-ATTTCTAAAAAATCTGTAATTTGCCGGAGTTGAAAATTTCCGGCAAATGG
-GCATTATGCCGAAAATGAAACATTCCGGTAAATCGGCAAATTGCCGAAAA
-TGAAAAATTCCGGCAAATCGGCAATTTGCCGAAGTTGATAATTTCCGCCA
-AATCGGGAATTTGCCGAAATTGAAAATTTCGTATAAATCGCCGATTTGCC
-GGAGTTGAAAAATTCTGGCAAATTTGCAAATCGGCAATTTGCCAAAGTTG
-AAAAATTCCCGGCAAATCGCCAATTTTTTGCCTGTTGTGCATATTATTTT
-CACGACTAAAAATCGTAATAAATTAAATTAAATTAAATTTGCCGATTTTT
-CGACCGAAATTTGCCTACCGGCAATTCCTGCCGACTCCTTTTTGCCGAGA
-AGAATTAAAATTTCCATTTCTAAAAAATCTGTAATTTGCCGGAGTTGAAA
-ATTTCTGGCAAATTTGCAAATCGGTACTTTGCCGGAGTTGAAAAATTCTG
-GAAACCGGCAACCCGGCAAACCGCCAATTTGCCGATTTTTCGACCGAAAT
-TTTTTTTTCCTGTCGACCCCTTTTTCCGAGAACAGTTAAATTTCCAAAAT
-TCTCTAAAAACCACAAACTTCTCAATAATAAAATTCGCACACTCCTGTCG
-CTTCCCCTCATCATTCCACTCAATCCGCACAGTTTCTCGAGTACAGTACT
-CCAAAAACTTGTCCAAATAAACTTGGAGCATTTGAGCCCGTTCTTTCGAA
-GTCTGCGACGCCGACGCTGTCGACTTAATCGGCCCATTCCTCAGTCGTTC
-ACACCAATCACCGGCTCCCGACGATTGACAGTACTCGTTGAGCACATCTT
-CCGCATTTTCACCACTGGTAAGCGGGAAGAATGGTAGAAGACACTGAAAG
-ACACGATCCAGGTCTGGTGTCGCTTTTCCGTACACTCCGAGACATTGATA
-GAACACTAGGAACAAGCGAATCGCAATTTTTCGCACTGCCATCAAATTTT
-TCGGGTAGACTGCTTTTTTGAGAAGCGATTCGATTGCATGACGTTGCCAG
-CCTGAGAGAAATTGGGAAAATTTTTAATTTTTATTTAAAGGTGGGGTAGC
-GCTAGTGGGGAAATTGCTTTAAAACATGCCTATGGTACCACAATGACCGA
-ATATCATGATATAACAATTCAAAAAAATTTTCTAAATTTTATATGATTTT
-TTGAAAATTGAAAAAATCTCAGTTTTTGTCTAATTCCAATTTGAATTACC
-GCCAATTGAATTTGTTCTATGGAGCGCGCTTGCACGTTTTTAAATTTATC
-TATTTTATTTTTTGTTATTTTTTGTTATTTTTCCACCAATTTTTAATGTT
-TTCGGTGTATTTTTGCTCGAATTTTAGAGAAAAAGTCAAAATAAATGCAA
-ATTTTCGATTAAAAAGCACGCTTACAGTCGTAAATCAGTGAAATTAATTA
-ATTCAGGTTTGAAATCGTTTAAAATCGTTACTTTGTCATTTTTACGCCTG
-TAAGCGTGCTTTTTAATTGAAAATTTGCATTTATCTTGACTTTTTCTCTA
-AAATTCGAGCAAAAATACACCGAAAACATTAAAACTCGGTGGAAAAAACA
-ACAAAAAATAAAATAAAATAAATTAAAAAACGTGCAAGCGCGCTCCATCG
-AACAAATTCAGTTGGCGGTAATTCCAATAGAAATTAGGGGGGAAAACTGA
-GATTTTTTCAATTTTCAAAAAATCATATAAAATCAGGAAAATTTTTTTGG
-ATTTTTTATCATGATATTGGGTCATTGTGGTACCATAGGCGTGTTTTAAA
-GCAATTTCCCCACTGGCGCTACTCCACCTTTAATTTCTGACGGTTTTTTT
-TCGGTTTTCCTTGAAAAATCCTCTAAAAATCGATAATTTGTAAAAATTGC
-GTTGTTTTTCCGGGATTTTTTTCGGTTTTCCCACGGGGTTCTGGCCTTCC
-TCACTGAATTTTTCGCGCTCCATTGACAATCGCCCGTGTACTCCACACGG
-ACAAATCACATTTAGTTTTACAACTAAAATCGAGCCGAGACGCGGCAGCC
-AACGCGCCGTAAATCTACCCCAGATATGGCCTGGCCTAGTTCGGCGAAAA
-CTCTTCCATTTCAATGTATGAGGGAAGCCAGAAATCCGTGTTTTCCTCAA
-AAAAATCCTCTAAAAATCGATAGTTTGTAAAAATTGCGTTGTTTCTTCGG
-TTTTTTTTGCAATTTGAGGGTTTTTTGTCGATTTAACACGGATTTTTGGC
-TTCCCTCATATATTGAAATGGAAGAGTTTCTGCCGAACTAGGCCAGGCCA
-TAACTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTCGATTT
-TAGTTGTAAAACTAAATGGACTTTGTCCGTGTGGAGTACACGGGCGATTG
-TCAATGGAGCGCGAAAAATGCAATGAGGAAGGCCAGAAGCCCGTGCGGAA
-AGACGGGGAATCTCCGAAAAACGGGGAAAATCTACAAAAAAATGAGTTTA
-AAAAAGACTTCCTCAAAAAAATTCAAAAATTGTGGTTTTTTTTTTAATTT
-TTTGTATTTTGATAAATTTTTTGCGACATCAAAAAATGGAAGAACTTTTT
-TTTTTCGATTTTTGAATTTTTTGTTGGTGAAAAAGAAGAAAATTTCGAAA
-ATTCGTTAGGGAATGGATAAATTTTAATCAAAAATCGATTTTTTAAAATT
-ATTTTTTGCAGTTTTGCATAAAAAATCCAGATTTTTTCGCATTTCGCGCG
-TAATTTTCATTTTTGTCGTTTTTTTTTTCTGAATTTTCCGAAATTTCTGG
-AAATTTTTTCTTTTCTTGTTCTGAAGCTTATGCCTAAGCCTAAGCCTAAG
-CCTGAGCCTAAACTCCAAAAACGCACCACTTCCAACAAGCTCCGGAGCCA
-AACAGAGCACCTGCTCCAGTGTCCAAAGCCCGGATTCAGCCTCAATTGCA
-CTATCGATTTGACTGCTGACATCGTTGACGAGCAGAAGCTCGTCAACGAG
-ATGAAACGTCTCGAAACTGTGCTCATCGAGCAGTTGACGCTTTTCCTGAA
-GAAATGTTGTGGTCGAATTAATGCGAAATATGGGAAAATTCGGGTTAAAA
-TCGATGAAAAATCGTGGAAAAACGAACATTTGTGGTTAATGTGTCGAGCA
-GAATCTTCAAATGTTTCACACGGCTCACACAATCCCTGTTCAAGTCGGTG
-AATCTTGAAATGCTCGCCTGCACATCTGACGATTTGCCCTTTCGGGCAAA
-CATTTTCCTGTGATTTTAGGCGATTTTCTGCAAATTTTCGCTGTTCAAAC
-GTTTAAAATCGACGGAAAATGCGTATATTTTACTAAATATGCGAGAAATA
-GTGATTTAATTCGAAAAAATCAATATAAAAATGGAAAAAAACTACAGTAG
-TAATTTAAAGGCGCATACCTCGAAAGTTAAAATCGTGCCAGGACCCGCCG
-CAATTTAGAATCGATTTTTAGATGAAAACTTTTTTTTTCTTACTAAAAAT
-TAAAATTTTTCACTGAAAATTTCGGTTAAACTCTGACTTTTAACACGAAT
-CTTATCAAAACTATGACAATTTCTAGTGAAAATCGCCAATTTTGTGTGTA
-AAATCAATTTTTTCAGTGAAAAATGTTTTTTTTTGAGTTAAAACTAAATT
-TCGAGCTTGAAACTAGAAAATGTCAAGTAAAAAATTCATTTTTAAGCGAA
-AAATTAACGTTTTTTTCCAAATTTTCGCCTATAATTCACACAAAAAATAC
-TGAGTCAGCAAACAATGTGGGAGCATCCCGAAAATGGTGCAGAATGGTAG
-AGCAAAAACGAAAAATCGATGAATTATTGTGGAGAGAGAGGAAATTTTAT
-TCAATTTTTGAGGAATGGAGGTTAAAAAAAAGAGTAGAAACATTGAAAAG
-TGGCAAAGAAATCCAGCTTGAAACCGGAAAAACTCCCAGAAAACGAAGCA
-AATAAGAAAATCCCACAAAAAATCCGAATTTAATTGCAGTTTTCGACCGA
-AATTCAGCCAACCAGTGAGTGGTTCAATTATTAAAAAGCACATATATACA
-TATAACTTTATTCAAAGGACATAATCCATATAAAGTCTGTCAAAACGGAA
-AAGGTTCTTTCCAAACACACAATTGGCCCCCTCTGTCCAAAAGAGAGAGC
-ATGGGAATCGGAGAGGGCGGTGAGAGAGACGCAGACATCGAGATGACACT
-TTTTGACAGCAACACTGTGTGTGTGTGTGTGTGTGTGTGAGTCTCTGTGA
-TTGAGTGAAAGCACTTTTGGGAATATATACTGGTAGAAATTTAATTTAAA
-ATGATAAAAAATTTCTTGGGATTTTTTTTTTTGAGTACTGTAGCCACAAA
-AGTACGTAATTTTCTTGAAAATGCGCCCATGGGGTCCCAATGACGTAATA
-TCATGATAAAAAATTTTTGAAAATTGGAAAAATCTCAGTTTCCCCTCCCC
-CCCCCCCCTAATTCCAATTTGAATTTCCGCCAATTGAATTCGTTCGGCGG
-AGCGCGCTTGCATTATTTTTATTAATTTATTTAATTTTCTCTGTTGTTAT
-TTCACTGATTTTCTTCATTTTTTGGGGATTTTTAATTGGGAAAAGAGAGA
-AAAATGCAAGATAAATGCAAATTGTTCATTAAAAAATCACTGAAAATGGG
-TAAAACTGTGAAATATGCTAATTTCAGGCTTGGTGTCGTCGGAACTCATA
-ATTTCGCAGTTTTACCCATTGTCTATGATTTTTTAATGAACATTCTGCAT
-TTATCTTTTTTTTTTAAATTCAATTTCTATTAAAAATCCCCAAAAAATGA
-AGAAAATCAGTGAAATAATTAGAAAAAATAAAATAAATTTATAAAAATAA
-TGCAAGTGCGCTCCACCGAACGAATCCAATTGGCGGGAGTTCAAATAGGA
-ATTAGAGGGAAAACTGAGATTTTTTTCAATTTTCAAAACAAAAAATCATA
-AAAAATAAGCATTTTAGCTTAAAAACTCGAAAAATCATACAAAAATTAAT
-TTCAAGTTGTCCACGAGTAGTACGCGACGCCTGGTTGCAAAAATGGCGTA
-GATTTCGATTATTAAAAGCTTAAAAATCATTTTTTTTTACCAATTTCCAA
-TTAAATATCCTAATTTTAATCTCAATTTTCTTGAAAGACGTGCAAATATA
-GATACATCTAACATAAAAATTCTTCGCTGCGAGACCCAGGACCCCATAAA
-TCGCCTGCGCCTTTAAATTTATATTTATTTTCTCTCTCAAACAGCGATGA
-AAATCACGTTTTTGAACCAAATTTTCCAAAAAATAAGACAAATTTCTATT
-TTAAAAACCACTTTATTCGGTCATTGGTCGCTAAATAGCAAATTTTGAGG
-CAAAAAAAAAACGAACAGACAACGGAAAATCGAGTGAAAACAAGTGAGAA
-CACAGCAAAACTAGTCCTAATTAATTAAAGGCGCATCACGTGGAAAAGAA
-AACTGTTGTGGAAGAATAAAAAATGGAACATGAGGGGAAATATTACAAAA
-ATAGTAAAAGATGCATCAAGATTAAGATTATTTTTCGAAAATCGAGTCCT
-CCGCCCAGGAATTCATCATAATTTTCGACTTTTTTTCGGAGATTGCTGCA
-CATTGTCGGCTGCTCCGGTGGTTTTTGGAAGGTTTTGAGAGCTGAAAGAT
-TTGAATTTTTTGGAATTTCGAGAAATTTCTTTTTTTTTACCCGAAGCGCT
-TTGAATCTGGCGAGCTGCATTTCCAGCTTGCATTGTGCGTTCAGTGACTT
-TGATTCCTTGAAGTTTTCTGAAAAAAAAACACGAGTTTTGACTTGAATTT
-TCTGAATTTTTAACACGGATTTCTGGTTTCCCTCAAAGAATTGAAATGGA
-AGAGTTTTTGCCGAACTAGGCCAGGCCATATCTGGGGTAGATTTACGGCG
-CGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAATGTGAT
-TTGTCCGTGTGGAGTACACGACTTTCCCACGCGTTGTCCGGCAGGCGATT
-GTCAATGGAGCGCGAAAAATTCAATGAGGAAGGCCAGAACTCCGTGATTT
-TTCTTTTACTCGGCGTAGATTTCGCAGTTTCAGACTGTTTTTCAGGTCTA
-ATCAGCGGAATTTTCGTTGATCCCGCCAATCTCGGTGATTTTCTGAGCCT
-TTTTCGCTCAGGTTCTGGGATTTCAGCTTTTAGAGCAATCTTTGAAATTT
-CGACAAGTTTCTTGAAGTCCAACGCAATTTTTTCAGTAGAATTCGCAGTT
-TCCGGCAATTTTTCTGAGCAAATCTTCGAAATTTCGACAAGTTTTCTGAT
-TTTCGGCGTAGATTTCGCAAATTCTGACGGTTTTTCTGCAAATCCCGGTG
-ATTTTCGGCTCGGGGAGCTCCCAGCTGCTCTATTGTTCAGCATTGTCTGC
-TCAGTAGCGGGGGCGTCTTGATTTTCAGTAGAATTCGCAGTTTTCGGCAA
-TTTTTCTGAGCAAATCTTCGAAATTTTGACAAGTTTTCTGATTTTCGGCG
-TAGATTTCGCAATTTCTGACGGTTTTTCTGCAAATCTCGGTGATTTTGGG
-CTCGGGGAGCTTCCAGCTGCTCTATTGTTCAGAATTGTCTGCTCAGTAGC
-GGGGGCGTCTTGATTTTCAGTAGAATTCGCAGTTTCCGGCAATTTTTCTG
-AGCTAATCTTTGGAATTTCGACAGGTTTTCTGACTTTTGGCGTAGATTTT
-GCAGTTTCTGGTGATTTTCGGCACGATGAGCTCCCAGCTTCTTCATTATT
-CAGCCTTTTCAGCTGGGCTTCTTGAGAGCCTGTAATCACGTCGCCGTCGT
-CATCCTCTGAATCATCATCCGACCAAATTTCGATTATTTCCTGAAAAAAT
-CGATTTTTTTTGCTTTTTTTTGCTCTTTTCTCATTGTCAGCTTTTCCCAC
-TTTCCAGCAATTTCTCCACGGCGTCGGAACGTATCCTGGTCGCCGATCGA
-ACTGGATAACTGGCCGGCTGGCGATAAATCGGCGAAGATCTGCTACTATC
-TCGTCTGAAAACGTTTTTCTGCTAAAACCTGCTAAAAATCTGGCTAAAAT
-CACCTGATAACATTACAATATCATCATTTCCGGGCATTTTTGACGAAAAA
-AAAGCGGAAAATATTTAGAATTTCGAAAATGAAGAGAAGCGTTACGGTAC
-TAAAGGCACATGGCGTAAAATATTCCGCAGGACTCGCCGCGATTTATGAT
-TTTCACTATTTTTTTTGGGCAAAAGTTGACATTTTTCAGAATAAAATTCA
-AAATTGTGTTGATAAATTGTTTATTTGATTTTTTTTTCAAATTTAAATAA
-ACTGTAAATTTTAAATTTTCCCCCAAATATTCGCAAATTCCCTTCAAACC
-AAGTTTTAATAGCACAGTAATCCCCGAGCAATCGCGCTCCACCGGACTAA
-CCTACACACCGCGAATTTTGAATTACATCCCTCATAATTAATTGTTTTTG
-CCATTTTTTCGCTATTTCCAGTGGATTTTAATGAGTAAAAGCCTACAAAC
-CGACGAAAATGGCGGTGTCAGTGAAAGTCCATCAAATTGCACATATTGCT
-ACACGCTGGAATGCTCTCTACGCATCGAATCCACCTCATCAATCAAGAAA
-AAGACTCCAATCTCCTCGAAAAGCGCTATAATGACTGTCGGCAGAAATGC
-GCAGAGGTTTTAGTCGAATAAATGCCTGTTTTAAGAGCAAGAAATTCCAG
-AAAAATTCACCTTCAAATCGAGCTAAAGACCACCGCTACCGGACAGCCCG
-CTGTAGTGTGCTATGACGTCACAGATGCAGTTGTACACTTGCAAAGCGTT
-GCAAATGGGAAGTGTACTGTAGAAATTCCTTCGCTGTAAGACCTAAAAGA
-CCAGAAAAATGGAAAATATCTGAAAACCCCAATTTCAGCTCGTTAATGTT
-CCAAATGTTCAATTGCGCGCCGCGAAAGCTCAACGTCTTCATGAAATCTC
-TCCAAGCAAAGTTGGATATTATGAAAATGGAGAAAAGCCCAATTTCAGCA
-GTGTAAAATCGATAAATTATCGAAAAATCAATAAAAATCCCTTCAGACCC
-CGGCAATTCTCACGTCCGCCGGCAGTTTTCAGCGTTCTGAGCCCGCTGAC
-GATCAGCGAAATGCGAAAAGTGAAGAAGCTACGCGAACCGTCGGCGCTGG
-CGAGACCTTCGAAAGAGGCGACCACACCGAAGCGGCGGTAATTTGAAATT
-TTCACATTAAAAAAAAATCGCGAATTTCAGCACTTCCTCAATGAATTTGC
-TCGCCGGCGGCTTGGAAAATCGAATTATGAATCGATCGATTGGGCTGAAA
-AGGACGACCAGTTTTGCTAGAGATGATCGTGAAAAAGCCGAGGTTCTGCA
-GCTAAAAATCCGTCAAAAATCGATAAAATTTCGTTTTTTTTCCGTGAAAT
-TCCAGGTTTTTTAGTCCAAAAGCACGGATTTCTGGCTTCCCTCATAAATT
-GTAATGGAAGAGTTTTTGCCGAACTAGGCCAGGCCATATCTGGGGTAGAT
-TTACCGCGCGTTGCGGCTCGATTTTAGTTGTAAAACTAAATGTATTTGTC
-CGTGTGAAGTACACCACTTTCCCATTGCCCGGCGGGTGATTGTCAATGGA
-GCGCGAAAAATGCAATTAGGAAGCCCAGAAACCCGTGAAAAAGTGTCACG
-CGGTTTTCAAAGTAGAGGTGCAAGCGCGCTCCACCGCTCCACGGTGCTTG
-GCGGCAAAACCAGAATTTTCGCTGATTTCAAGCATTTTCCGTCGTTTTTC
-ATGATTTTTCATGTCGAAATAGTGTTTAAAAATGTCTTTAATGCTGAAAA
-GTGAATATTTCAAAAATTTTGACATGAAAAACTGAAAAAATTATCGGAAA
-AGTGTATTTTTTGAGTTTTTACTTATTTTTCGGTTTTTAAAAAAATTATT
-TCTACATAAAAATTGATGAAAACAGCATATGAAGTGCAAAAAATAAAGAA
-GACTTACATAAATTTTGACAAAAAATCACGAAAAACAATAAAAAAAGTCG
-AAAAATGATTGGAAACGGAGAAATTTTCCCTTTTTATGTAGAAATTTTGA
-ATTTTTTCAAAATTTTCTCAATTTTGAAACACAAAACATGAAAAATGATT
-GAAAATATTTGAATTTTTAGTTTTCGCGCCAATACCTAACGAGACCCATC
-GGTGTGACCATGGAGCGCGCTTGCATCTCGATTTTAAAATTCGTATGAAT
-TTTTCGCGCTCCATTGACAATCGCCTGCCGGACAACGCGTGGGAAAGTGT
-CGTGTACTCCACCCGGACAAATCACATTTAGTTTTACAACTAAAATCGAG
-CCGCGACGCGACACGCAACGCGCCGTAAGTCTACTGAGCCAAAATGGCCT
-AGTTCGGCAAAAACTCTTCCATTTCAATTCATGAGGGAAGCCAGAAATCC
-GTGTTTTAACCTAGAAAATCAAGAATTTTTTTGGGAAAAAATGCCAAAAA
-TCCCAGATTTTCCCTAATTTTCAGCTAATTTTTCCCCGAAACAGACAATT
-TTCAGACCCTTGTCTCCCTGAAATCATTCAAAGATGCTCCTGCAATTTCC
-GAACGGATTCAGCTGTCAGATGAGCAAAAATCGGTTGTCCGATGTGTGAT
-AAATGTAATTTTTCGTTCGAAAAAAAAAATTATCGAAAATTTGCAGTCTC
-GAACGAGTGTCTTCTTCACGGGATCCGCTGGAACCGGAAAATCTGTGATT
-CTTCGGAGAATCATTGAAATGTTGCCCGCCGGGAACACCTATATCACCGC
-AGCGACAGGTAGAGGATCACTTTGAAATATTTGCAAAAAATCGTGTCAAG
-ACCTCCCCCAAAAAATTTTCATGTACCTTTAAAAAATAGAACCGACTTTT
-TTTAATTAAAAAATCATTAAAAATTAGAGGAAAATTTGGGAAAAAAAATC
-ATTAAAAATTCTTTAAATAATAATTGTTTATTTGTCACAAGAAATAGCTA
-CACCGGAAGATAAAGAAAAAAAGTAAATAAAAAAGATGTGTGGACAAATA
-AGTAAAATGACCAATTGGACCAGCTATAGCCCGGGAGGTTAAGTTGGGGG
-GAAGAGGGTGTCAAATGGGATAGAGTCTAGGCGCGACGCAAATGCATTTG
-GAGTTAACAGTTTAGGGAAACGTTTTGCTATTCGATTCCACAACGACAAG
-TTAACATGTAGAAAACATTTAGACGGAACACCACAGACAACAAGTAGATA
-GGGGTGACGAGTAGAGCGTGAAGCTCGAACGAACGATGATAAGGACGGGA
-AGTGATACTCGCTTGAAATAATTTTATGGAAGGTTCGGAGGATTTGAAGA
-ACCCGTCTATGGTGGGTAGACAATAAATTAAATTGGGAAAGCCTACTACT
-GTATGACGAGTAAGATAAATTGCACCTTTGAAAGACACACTTTGAGAAAA
-ACCGGAGGGGAGATTCTAGTTTTTTGGCAAGTTCGGTGGAGTTGGGCGGG
-AAGAGCTCGCAGCCATATTCGAGTACGGGGCGGATGTAAACATTGAACAG
-TTTAAAATAGAATTCGGGACTTTTAGAGCGGAATGAACGAAGGATTTGGC
-GACACTTAAGGAGGGCACTATTAGAAGTCTGATTAATATGATTAACAAAT
-GATAATTTGGTATCGACAATGATTCCAAGATCTCTGATAGAATCACGCGG
-TTTAATTTCAACACTATTTACAAAGTATTTATGACGGGGGTTCTTTTTTC
-CAAAATGTAATACGGCAGTTTTGTGCTCAGCAAGATTTAGACGCCATTTT
-TTACACCAATCAGCGACAATATTGATGCTTGTTTGGATAGAGGTGGGGTC
-CGATCCGAGTAATTTTAGATCGTCGGCAAAGGCTGTAACATGGACATCAG
-GGGGGAACAAATCTAATAAGCCATTAATATACAAAAGAAAGAGGAATGGT
-AAAATTGTGGAAAAAACCGTAAAAAATCAACAAATTTCGAAAAAAAATCG
-TAAAAAATTGAGACATTTGAAAAAAAAAATCTAGCAAAATTTGAAAAAAA
-AATCGTTTAAAATTCAGCAAATTTATTTTAAAAAATCATTAAAAATTCAG
-CAAATTTGGAAAAAAAAACAAATAAATCTGTAAAATTAAAAAAAAAACCA
-GTAGAATTTGAAAAAAAATTGTTTAAAAAATTCAGCAAATTTCTAAAAAA
-AAATCATAATTAATTGATAAAAATTTTTTAAAAACGTAAAAAAATATTTA
-AAATTCTGCAAAATTTGAAAAAAATCGTTTAAAATTCAGCCAAATTTCGA
-AAAAAAAAGCATTAAAAAAGAGAAAAATTGGAAAAATTCTGCACAATTTT
-TTAAAAATTATTATTCTGAAAAAATTTAAAAATTCATGGAAAAATCTGCA
-AAATTATTTTTTAAAAATCGTTAAAAATTCAGCAAAAATTGGAAAAAAAT
-CGTTTAAAAATCAGCAAATTTCGAAAAAATAAAACATTAAAAATTCAACA
-AAATTAAAATTAGAAAATCATTAAAAAATACAGCCAAACCGTAAAAAATC
-AGCAAATTTCGAAAAAAATTCGTTAAAACTTCAGCAAACTTCTAAAAAAA
-ATCATTTAAAAATGCAGGAAATACGAAAAAGAAACATCAAAAATTGAGAC
-AATTGGAAAAAAAATTCGTTAAAAATTAACCCAAATAAATTTGCTGAATT
-TTTTAGATTTTTTTTTTTATAAATTTGCTGAATTTTTGAAAAAAATTCAG
-CAAATTTATTTTAAAAAAATCTAAAAAATTCAGCAAATTTCTTTTTTAAA
-AATCGTTAAAAATTCGGGAAAACTTGGAAAAATTGTGCAAAATTCAGAAC
-AAAAAAATTTCAAAATTTTCCCAATTTTTAAGTTTTTATTTAGTTTTCAG
-AATTGTTTAATAGTGAAAAAATCATAAAAAATTCAACAAAATTTAAAATT
-CAAAATTTTCCAGAATTTTCATGGGTCCCGCCACGATCCACTCCAACCTT
-CAAAAAATCATGTAATTTCCAGGCGTTGCGGCTTCCCAAATCGGCGGAAT
-CACACTTCACGCGTTTTGCGGTTTTCGCTACGAAAATTCGACGCCTGAAC
-AGTGCCTAAAACAGGTTTTACGCCAAAATCACATGGTCCGACAGTGGAAA
-CAATGCTCACACTTGATAATTGACGAGATTTCCATGATTGATCGCGACTT
-TTTTGAAGCTCTCGAATATGTGAGCTCATTGCGTTTTGATCTACAAAAAA
-TGCGGGAGTTTTCCCAGCATTGCTCATTTGATCTACAAAAAATGCGGGAA
-TTTTCCCAGCATTGCTCATTTGATCTACAAAAAATGCGGGAATTTTCCCA
-GCATTGCTCATTTGATCTACAAAAAATGCGGGAATTCTCCCAGCATTGCT
-CATTTGATCTACAAAAAATGCGGGAATTTTTCAAGTGTGACGTCAGCACA
-CTCATGCGAAATCTGCTGAAAAGTCTGCGTCTCTTCTCCCGCATTTTTCG
-GAGATCAAACCAAAATGGGACCCGAAAATTCCAAAAAAAAATCGATAATT
-TCCCGTCCCAGGTCGCCCGTACCGTCCGTAATAACGATAAGCCGTTCGGT
-GGAATTCAGCTCATTATCACTGGAGATTTCTTTCAATTACCGCCCGTCTC
-GAAGGATGAACCAGTTTTTTGTTTTGAGGTGTGCGGAATTTCGGAGCATC
-GTTTGGACCGTCTAACTCTTAAAAAAATTTTTTTGCAGAGCGAAGCCTGG
-AGCCGATGTATCCAAAAAACGATTGTCCTGAAAAATGTGAAACGACAAAA
-TGACAATGTTTTTGTGAAAATTTTGAATAACGTTAGAGTTGGAAAGTACG
-TAAACTACTGGAAAAATTTAAAAATTTCGAATTTTTCAGGGTTTTTTACT
-AGAAATTTTGATTTTTTTCAGTGAAATTCCAATAAAAGCTGGAAATTTTC
-AGAAAAAAGGAAAAAATATGAAAATTTGTAATTAATTTCGAAAAATGCTG
-AAAATCTCCAAAACCTTCCAGAAAAGCTGGAAATTTCATAAAAATTTGGG
-AAAATCTGAAATTTTCAGAAAATTCAAAAAAAGCAAAAAATCTCGAAAAC
-CTTCCAGAGAAGCTGGAAAATTTCAGAAATTTCCAAAAAAATAAATTCTG
-AAAATTTCATAAAAATCACTGATTTCTGTCTTCCCTCATAAGTTGAAATG
-GAAGAGTTTTTGCCGAACTAGGCCATTTTGGTTCGGCCAGATCTTGGGTA
-GATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAA
-TTAAATGTATTAGTCCGTGTGGAGTACACGACACTTTCCCACGTGTTGTC
-CGGCAGGTGATTGTCAATGGAGCGCGAAAAATTCAACGAGGAAGGCCAGA
-ACCCCGTGATAGACCGGCCAACACGGGGTTCTGGCCTTCCTCATTTCATT
-TTTCGCGCTCCATTGACAATCACCTGCCGGACAACACGTGGGAAAGTGTC
-GTGTACTCCACACGGACAAATACATTTAGTTTTACAACTACTAATTGAGC
-CGCGACGCGACACGCAACGCGCCGTAAATCTACCCCAGAAATGGCCGAGC
-CAAAATGGCCTAGTTCGGCAAAAACTCTTCCATTTCAATTTATGAGGGAA
-GCCAGAAATCCGTGTGAAATTTCCAAAAAGAAGCTCCAAAAAAAAATTCC
-AAAAAAATCTCGATAGCCTTCCAGAAACGCTGGAAATTTCAGAAAATCTC
-CTGAAATTGATAAAAATTCGAAAAAAATCTCAAAATTGTTAGAAAATCAG
-TGAAAATTTGGAAAATTCAGAAATTAAAAAAAAAATTTTTTTTTGGAATT
-TAGAATTTAGAATTCTTCAAATTGTCGAAAAATGCTCCAGAAAACTTGTA
-AAAATTTAATTTTTTTTTTTTTGAAATTTCCAAAAAATTTATTTATTTTT
-CAGATGCGACTTCAAATCAGCGGATATTCTAAAGGAATCCTCGAAAAATC
-AATTCCCATCCAGCGTAATTCCAACCAAACTGTGCACACATTCAGATGAC
-GCCGATCGAATTAACAGCTCAAGCATCGAGACAACACAAGGCGACGCGAA
-AACCTTCCACGCCTACGATGACGAGAGTTTTGACACGCACGCCAAGGCCC
-GAACGTTGGCACAGAAGAAGCTTGTGCTGAAAGTTGGAGCTCAGGTGATG
-CTCATCAAGAATATCGATGTGATCAAGGGACTTTGTAATGGGTCACGTGG
-ATTTGTGGAGAAATTCTCTGAAAACGGGAATCCTATGATTCGATTTGTAT
-CGCAAGCCGATGCTTCCATTGAGGCACGTTTTACAGAAATGACCATTTTA
-TGGGCGTGGCTTTTTTTTTGGAAAATTTTTTTTTTCCAAAATTTCTGGAT
-TTTTCTCTAAAATGGAAAAAACCCACGAAAATTGTAAAAAATTTGAAATT
-TTTTAAATCGGAAAAAAATAAAATTTTCTTTCTTAAAATTAGGCTTAGGC
-TTAAGCTTAGGCCTGGGCTTAGTCTTAGGTTTATGCTTAAATTTGAAAAA
-AAAAATTTCTAATTTTTTCCAGATTTTTCCGTTTTTTTTTTCAGAGAAAA
-TCTAAAATTTTCGATTTCTACCTGTTTTTCAAAAAAAGTTAAAAAAAACA
-TTTTCGCAAATTTTGTAGAAATTTTTCTTTTTTTTTTCTTAAAATTAGGC
-TTAGGCTTAGGCTTATGCTTAGGCTTAGGCTTAGGCTTATTCGTAGGACT
-ATGCTTTGGCTTAGACTTAGACTTAAGCCTAAGCCTAAGCCTAACCCTCT
-TAAAAAGTTACAAGAAGGTTTTTCCTTGCGCTTGGAGCGCAAAAGAAAAG
-AAAAAGAGCTATTCAGACTTAGGGTGCCCAACTGGAATAAAACATTGGAA
-ATCCTTATGACACACTTAAGCCTAAAGGCCCGAAAAACATACTAGGATGC
-CCAACTGGAATAAAATATTGGAAATCCTTATGACACACCGGCGGTATGGC
-GCGGCTTAAGCCTAAATAGCCACTTTTATCAAAATACATTTGAGCTCGTC
-TTGCGTTTTACTTTGACTTCTCAGGCAACTCAAAAGTAATCTGTGGATAT
-TTTTCAGTAATCTAAATGAAGACTATAGATTACTAAGAAACTTGGAGATT
-TCATAATATTTGGGGGGATGCGAGCATCCATTGGAGATTTGCCATTTGAT
-AGAACTTTTAGCGGCAAAAGTCCAAAACAAAGCTCACAGTGGGCTCTCAA
-AGATCATAAAATAGCACTGTAACGAAGAACTTTAACGATCTAACGAAGCA
-ATTTTACAAATTCACTTTGGTAGCTCATATCTCCGTGGATAAAATTTTTA
-CAGAAAAGTCATCAACTGATAAGTTGTTGATATTGTTGTAAAGAACAAGT
-TTGTAGTTGAAAGTTTTTTTTACCAAAAAATTTTTGTTTGAGAGAAAAGC
-ATTAGAAACGGAATAGCATCATAAAAATAACAACAGCAGTTGCCGCACTT
-CACGCGGTTCTATCTCAAACAAAAGCGGAGATATGAGCTACCAAAGTGAA
-ATTGGAAAATTGGCCCTCCAATGCTTCGTTAAAGTGCTATTTTCAGGATC
-TTTGAGAGCCCGCCGTGAGCTTGGTTCTGGAGTTATATTGATCAAATTGA
-CCCTCCAGTAAAGGAGGACCTTTGATGAATATAATCACTCTGATGGTATT
-TAATTCCGATGAGTAATCCATTTTTCTTTTTCTCACATTTGTGAACCAAA
-AATAAGTTTTAAATTAAGGCGGGATATTCTAAGGTGTGATAACATATGTT
-ATTTATTTTTAAATTTAAATAAAGTTTTTTTTTAATTTTTGCTAAAAAAC
-GAATAGTTTACAACCGCCTCGCTCAAATGTATTTTGATAAAAGTGGCTAT
-TTAGGCTTAAGCCGCGCCATACCGCCGGTGTGTCATAAGGATTTCCAATA
-TTTTATTCCAGTTGGGCATCCTAGTATGTTTTTCGGGCCTTTAGGCTTAA
-GTGTGTCATAAGGATTTCCAATATTTTATTCCAGTTGGGCATCCTAGTTT
-TTTTTTTTCGGGCCCTTAGGCTTAAGTGTGTCATAAGGATTTCCAATGTT
-TTATTCCAGTTGGGCACCCTAAGTCTAAATAGCTCTTTTTCTTTTCTTTT
-GCGCTCCAAGCGCAAGGAAAAACCTTCATGTAACTTTTTAAGAGGGTTTC
-ATATATTTTATTAAAATCGGGGCGAAGCCCTGATTTTAAATCCATATTGT
-TTTTGTTTTTGTCTTCCACTATCCCTGCAAATAGGAAAGAGAATGTGTTC
-TTTCTGATGAAGTAAAAATCATCATAAAATCTTGAAAACTGAGAGCAGGA
-GGTAATATTTGAATATATTGGGTTGTAAATGTGTGTCTCCCTGTGGGTGG
-GGTGGCGATGTGTTGGCAGCCAATCCTTCAACGAACTGTATCTCCCGCCT
-GTATCTCCCTTCAAAGTGAGAATTGGGTTACAAAAATTTGAGGGAATATG
-AAAAAAGGTGTGAGGATTTCAAAAATATTATTGTTGAAACACCAGACCAA
-ACCACTTTTTCTGGGCAAGAGACAGAAAATTAATTTTTTGAAAAATTTCA
-AACTGGCACAAAATTTTTTCAAAAACAAATTTTCACAAATTGTTAAAAGA
-TGCCATTTTTAATCAATATTGTTCATTGAACACAGAAAAGAAAACGAAGA
-TTCATCAAAAAATGAGTGAAAAATCGCAAAAATTCGAAAAAATCCGTGCT
-GAAAAACTCGAGTTTTTGGCGGTGCTGAAAAAAATTTTCACTAAAATTTT
-TTTGAAACTTAGTTTTTCGGATTTAGCGTCAAATTTTGAATCTATATAAA
-AAAAAAAATTAAAATTGATCTCAGATTGAGTGAATAATAAACGCTCAAAG
-TTGAAAAATGAACAACGCAAAAACGGCAGTAACTTGCTTCAAGGTCGGTT
-GTCTCAGTGAGTTTTCACTCAATTTTCGAAATTTTTTTGCTCTATCGCTT
-TAGAAATATTTGTAATTTCATTTTTTTTCCTCAAAATCAAAATATCTCAA
-ACGACCGCCATCCTACGAGAAGGGAAAAAAAAAGTTTTTGGAAAAAAAAT
-CAAAAATTTTTTTTCTGCCTCGATTTTCAAAATGAAAAAATCACTTTTTC
-GGAATAAACTTTTTCACAAATGTATTTTGATAAAAGTGGCTATTTAGGCT
-TAAGCCGCGCCATACCGCCGGTGTGTCATAAGGATTTCCAATATTTTATT
-CCAGTTGGGCATCCTAGTATGTTTTTCGGGCCTTTAGGCTTAAGTGTGTC
-ATAAGGATTTCCAATATTTTATTCCAGTTGGGCATCCTAGTTTTTTTTTC
-GGGCCCTTAGGCTTAAGTGTGTCATAAGGATTTCCAATGTTTTATTCCAG
-TTGGGCACCCTAAGTCTGAATAGCTCTTTTTCTTTTCTTTTGCGCTCCAA
-GCGCAAGGAAAAACCTTCTTGTAACTTTTTAAGAGGGTTAGGCTTATGCT
-TAAGCTTAGGGTTAGGGTTAGGGTTAGGCGTAGGCGTAGGCTTAGGTTTA
-GGCTTCGGCTTCAGGAATATTTAAAAAAAAAATCGAAAAATAGATTTTGC
-GAAAAAAAATCGTGATAAAGCCTGCTAAAATTTTCAAAAAAATTAAATTT
-TTCAAATTTTTCAAATTCCCAAGATTTTGGTCTCGCAGCGAAAACATCCA
-ACTACAGTAACCCTCGCCCTCTCCAATTTTCAGATCCGCCGCTCCAAGTT
-CTCAGTCCGCATTCCCGGGAGTGATGCTCCGTTGATTCGCCGTCAACTCC
-CACTCCAACTCGCCTGGGCCATCTCCATTCACAAATCGCAGGGAATGACG
-CTCGACTGTGCGGAAATTTCGTTGGAGCGCGTTTTCGCCGACGGACAGGC
-GTATGTGGCGTTGTCGCGCGCACGATCACTGGCGGCAATTCGAATTATCG
-GCTTCGACGCGTCGTGTGTCCGAGCGAATTCAAAGGTGAACAGGGGATTT
-TCGAGATGGAAATCTATGAAAAATGGATGGATGGTGTTAGATATCTCCTT
-TTCGTGGGTTCTCTCACGTGGTGTCAGAGTGCCTCATTTCGGCTTGATCT
-ACTGTGTAGATCTACAAAAAATGCGGGAGATGAGGAGACTCAGACTTCTC
-AACTGGTTTCGCATGGTTTAGAACGTGCTGACGTCACTTTTCTCTGGGCA
-TAAAATTCCCGCATTTTTTGTAGATCAACCGGTAAGGGATCTCTCAGCTA
-CGTGGAAAATTATCGATTTTTTATCGAATTTTTTGCAGGTTATCGATTTT
-TACAAATCCATCGAGGCAGAATGCGACGACGAACAGGACTGGGAAGCCCC
-TGCTGCTGGACCAAGGCTCAAGCGAGTTCGATCGATTTAATTTTTTTTTT
-TAAATTTTTTTGTGATCTCCAAATGTTCTGTCTTTCTGTCTTCCCCCCCC
-CCCCGCCAAAATTCATTAACTGTTTTATTTCACAACACTCTGTATCATCA
-TAATTTTCACATAAAATTGGCTATTTCAATGTTGACGTCGAATTTTTAGT
-CCTATCAGCGTCATCGGATCTGAAAAAATGGAAAACTTGAACAAAAAAGC
-AGGGGGTGGCCTAGAAAGCACAAAAAAAACTCGGACACAGTTCAACGGAG
-GCAGTTTTTGGAAAAAAAAAAACGTCATTTTCGTATAGCCACACTGAAAT
-TGAAAGAATTCTGGCCGAGTTTTCCAAATTCTAGGCCACCATGCAAACCG
-ACATTTTGGGCGGAAAAGTGCCGGTGGCCGTGGAAGAAGGAAAAACTCGG
-CCACTCTTCTATGTACTCCTCTCGGAGAATTGTGTTTTCCATGGCCGAGT
-TTTTGTGTTTTCTAGGTCATGTCGGCATTTTTCTTAGTCAGTTTCAAAGG
-AAATACGATACCTGGTCTCGACGCGAAAATTTTTTAATTAAATCCAAAAA
-GACGTGCGCCTTTAAAAAGTACTGTAATTCCAAACTTTCGTTGTTGGGAA
-ATTTTTATCGATTTTTCGTAGTTTTCAAAAAAAATAATCAAATGTACACA
-GGGTTCTGTTCTTCCTTATTGATTTTTTCGCGCTCCATTGACAATCGCCC
-GCAGGATAACGCGTGGGAAAGTCGTGTACTCCACACGGACATCGAGACGC
-GACGCGACACGCAACGCGCCGTGAATCTACCCCAAATATGGCCGAGCCAA
-AATGGCCTAGTTCGGCAAACTCTTCCATTTCGATTTATGAGGGAAACCAG
-AAATCCGTGAGTAGTGAGAAAAACAACGAAAAAATCGATAAAATTTCCCA
-ACAACGAAAGTTTGAGATTACAGTAGTCTTTAAAGGCGCACACTTTTTCG
-CATTTAACATAAATTTGTCGTGGAGAGAGTATTTTTGGCGCAAAACTTCG
-CATTCGGGTAATGATAATAGAAGAATTGAAACTCACAAATTCTCCGCCGT
-CTCCTCAAGCAGCAGCGGCACAATAAACATGAAATACACGGCCAACACGA
-AATGAATCGGCACCATCGACACAATGAACAACGACATTCGGAGCATGTGC
-TCCAAAACTGTCGGCCGCAACTTTTTCGACGGATTCTCAAAGACGAGATA
-CACTTGCATCGGGCTGTGCACATCTTGAACCGACTTCTTCTTCATTACAG
-CGCTCCCTTCTCTGGGCAGCAGGTAGCGTGTCCACGTGGTGTAGGGTGAC
-TCAGTGGTTGTGTGATTTATCGGCGTGAGCTGGAGCATTTTTGCAGAGTC
-GCAGGCCAAGGTAGCGGAGGTGTTGGCTCTGAAAGTAGATTTCATACAGG
-ATGGTAATTTCGGGGAGTACTGTAGTGGTGTTATAGTGGTACTGTAGGAG
-TACACTGTAGGGGAACTGTAGGGGTGCTGTAGCAGTACTGAGGGGGGTAC
-TGTAGGAGTACTGTAAGGGTGCTGTGGGGGTACTGTAGGAGTAATGTGGG
-GGTACTGTAGGAGTACTGTAGGAGCACTGTAGGGGAACTGTAAGGATACT
-GTAGGAGTAATGTAGATGTACTGTAAGGGTACTGTAGGGGTGCGCTAGTG
-ATACTGTAGGGATCATGTAGGAGTACTGTAGAAGTCCTGTAAGGGTACTG
-TAAGGGTACTGTAGAGGTGCGCTAGTTGTACTGTAAGGGTACTGTAGGGG
-TACTGTAGGTGTACTGTAGGAGTAAAGTAGATTAACTGTAAGGGTACTAT
-AGGGGTACGCTAGTGGTACTGTAGGAGCACTGTAGGCGTACTGTAAGGGT
-ACTGTAGATGTACTGAAGTAGTTCTGTAAAAGGTACTGTAGGGGTACTGT
-AAGAGCACTCTAGGGGCATTGTAGGGGTACTGTAGGTGTACTGTAAGGCT
-ACTGTAGATGTACTGTAAGGGTACTGTAGTTGTTCTGTAAAGGGTACTGT
-TGGGGTACTGTAGGTTTACTGTAAGGGTACTGCAGGGGTGCTGTAGGGAT
-ACTGTAGGAGTACTGTAGTGGTTCTATAGGAAGACAAACTTTTTTTTGAA
-TTTACTCATCGGAGAATCTAATATTTTTCACCAAATCGATACACCATAAA
-AATTTTAGGACCCAAAGCTAAAAAAAAAAACCAACTTCTCCAATATCATC
-TCCATCAATTCCAGTTGTTCTGTGCAGTTCGCCATCCCTTCCTTCTTCAA
-TTCCTTCGCCCGATTCTCCAAATCGTCCACCATCTTCACACCCCGCCGAC
-ACGCCGTCTCCACATACCGTTCCGTACCAGCTTCCGCAATTTTCATAAGC
-TTCTCGACAGACTCGTTAAACTTGCGTGTTGGCTTGAACAAATGGGAACC
-TCGAATCGCCTCGGGAACCGGATTTCCACCTCCTTCCACCAGGAGGCTGA
-ACAGTGTCGTTTTCTGCCTGACGGCCTTAGCCAGGACGTGCCCATAGTTG
-ATCATGTAGATTTGCCCGTTTTCAGATATGTTGAATGTTTCAGCAGATGA
-GAACATTTGAAAATTATTTGATTGTGCGTGTTCATGCACCACAGTAATGA
-ATGCGAGGCGGCAAATTAAAACTCTGAAAGTTTAGATAATTGTACTTTAG
-TTGAAATCTACTTTGGTTGACAGGTGCATCGACTAGACTAAAAAAAAAAG
-CAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTA
-GGTAGGTAGGTAAGTAGGTAAAGCGAGACACGGTGCATCGATCTGACTTT
-AAAAATCTCAATCTCGTATCTTAAGCGTCTTTGGTTCTGTCAGGGAAGCA
-GGTAGGGGGGAGGTAGGTGTGATCAGGCAGAGCACCGGAGTTAATATCTG
-GTGGATTGTGGGCTGCTAATAGGTAGGTAGGCAGGTAAGCAAGCAAGCAA
-GCAGGCAGGTAGGTAGGTAGGTAGGTAGGCAGGCAGGTATCAGTTGACAA
-CTTTTTGATGAAACTAAACGGAGCCGAGTTATAAGGTGCCAAAGTTGCAC
-TAGACATGGTGCATCGACCTAACTTGAACAACTCGTATCTCAAGTGTCTT
-TGGTTCTATTTGGGAGGCAGGTAGGTAGGCAGGTAGGTAGGTATATCTTA
-GGTTGTTTCAAAACTATTATACATTAAAAATCAATAAAAATATTTTGCAC
-GAATTTTATCAGTTGACAACTTTTTGATAAAACTAAAAAGAGCCGAGATA
-TTGTAAGTTGCAAAAGTTGAACGAGACATGGTGCATGGAAGGTAGGTAGG
-TAGGTAGGTATTTAAGTAGGTAGGTAGGTAGGTAAGCATTCCGTATTTCT
-CTCTACTTTGACAGCTTATATCCTGGTTGTTTTGTGTTGTATCAAAAAAT
-GTTTAACAAAGATAACATAGAAAAATATTTAGCACGTAGCAAATTTAAAA
-AACTAGGTTGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGAAAG
-GCAGGCATGTAAGTAGTAGGTAGGTAAAAGTACTCACGTGGAGAACATCA
-AGCAGAAGATCGCTGAGCAAATTGAAAGTGGTACTGGAAGTTGAGCAAGT
-ATTTTGGAGTATTTTTCTGGAAAAAAATAAGTATTCAAAGTAACTAAAAT
-AAAATACCAACTCCGAAACTCAAACTTCATAATAAACAAAATCGTCAGAA
-TCCCACTGGAGAGGACTGCAAAAGTCACTGTCGTGTTGGCAGACGTCTGA
-TAAAAATCGAGGGTGTGTCCGGATGGTAGGAGAAGCACATTATCGTGATA
-CTTTGACACAAATTCCTCAATAGACGCCAACGCTTTTCCGAAAACTGGAA
-TCGAAATGTTCAAAGCATTGAGAATTATTTTCTGGTACTCTTCCACCAGG
-ATGTTGTACTCCGAGTTTAGATCCGCTGAAAAATTTAAATTTGTATTAAA
-TTGGGCAATACTCGTACTTGCCTACCTGCCTACTGGTAGGTAAGCAGCCT
-ACTTATTTTCAACTTACAAAACTCCATATACTTTGTAACGTTTTCCAATT
-TCGCAAAAATCGATTTCTCGAAATATTTGCACTTCCCCTCGACAAATGAT
-TTCTTGGCGGGAATCTTCAGGAACAGCTGAAAATTTTTTTTTCCGGTGGC
-CGAGTTTTTTCACGGCCACGACGTACCTTATTAAACATGGTGAAGTTGGC
-GTAGTCATGCAAGAACCAATTTATTCGGCGGCGTTCGTTTTCGGTGACGG
-CGAAGTCTCGTTTGAACAAGCACGGTATGTAGGACAGCTTACGGTGGAGA
-CGCTCTTTGATGGCTGGAAGTTATGACGTCATGAATAATAAGGGATGAGA
-TTTCTAGGCCACGTGTGACGTCACAGCAATCCCCGAAACCTTTTTGGATG
-GCCGAGTTTTACCGATTTCTAGGTCATCGAGCGAAACTTTTGTGATACTT
-TGGCAATGGTCATCAGGTAGACAAACAACGTGATAATTTCTAGGCCACGC
-TTGACGTCACGTGGCCGAGATTTCGCGCCAGGACCTAGAACTAGACATGG
-TGCATCGACCTAACTTAAACAACTCGTATCTCAGGTGCCAGGTAGGTAGG
-TAGGCAGTCAAGCAGATAGGTAGGTAGGCAGGTATTTTAATTTCATTTCT
-GCGGCTACAACACAATTTCTCTTCCAATCAAGGACGTAAATTTCTAGGCC
-ACACATGCAGAGTGCGGACTAATAATTAAAGTGTTTTACGACATGGCCGA
-GAAAAGAGAAACCTAGGCCATGGTAGTTAGGTGTGACGTAACGCCACTAT
-AAAACTATAAAACTCACGCATAAAACTGTGATCATTGGCGGTTTCGAGCA
-TCGTCCTTCCATAGACCGCATCCTGAGTACACTCTCGTAAATTGGCGGCC
-AAAATTGTTAGACCAAGGATACAAAATATGGGGATAATGGTGAATCCGGA
-GCGATTATCATCCAACCAATACACGATTACTTCGATAACCTCGAAGAGCA
-GCAATTTCCAGACGACGAGGAATATCAGCAGAGCTGTGATCAGGCAGAGC
-ACCGAGATTATTATCTGGCGGATTGTGGGCTGAAAATAGGTAGGTAGGTA
-GGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAGGTAAG
-TAGGTGGTAGGTAGGGAGGCAGGTATCAGCTGCCAACTTTTCGATAAATA
-TTAAACGGAGCCGAAATATAAGTTGCCAAAGTTGTACTAGACATGGTGCA
-TCGACCTTACTTAAACAACTAGGTAGGTAGGTAGGTAGGCAGGCAGCTAG
-GCAAGTAGGTAAACTCACCAAATGCCTGAAAACAATTGCAAGAACATCGG
-AATAACCCGAGCTCCTCCCGTTCAACGTCGCGACCACAAGCGCGTGCACA
-CTTTTCCGCAGCTTCTCATCATCGCGATCAGCGCAAAAATCCTCGATTAT
-CTCGAATCGATGGCTCTTTTTTGTGTGCGCCGGGTCTAATTTATAGCTGA
-TCGGCTCGGGAAACCAATCGTCACACTGCAGCTTCGCATCCTCCAAGCTG
-AAGCCGTGAGAAAACTGTGCACTGCATAGGAATAGAAGTAATTTCAGTTT
-CATTTTGTTCTGGAAGAAGGCATTTTTATGGATGGAGTTTGAAAATAATA
-ATTAAAAAAAAAACTTACAGCTGGAACTTTGTGAAATCGATAATGAAACA
-ATAAATCTAAAAAAAGCTCAAAAAATTTTTGACAAAATTTAAAACTGTAA
-CGTGTATGAAGGTCACGTGAAAACTGAAAACTCACCAAAAATGTCGAAAA
-ATAGCAAGAAACTAGGCACACGTAGACTTATGGTAGGCAGGAAGGCGTAG
-GCGTTGATCCAGGCAGGGTCACGTCTTGAAGGCAGACTGTTAGGTATAGG
-TAGGCATAGGTAGCCATGTAGGCGTAAAGGCAGGAAGGCATCTCTAGATC
-CTTTTTGTGGCAGATTGGCCGCTTTGCAGGCAGGCAGGTGTGGGTGGCCT
-AGTAGACCGAAAAACAAGCAGGTAAAGTTCCTATAGTAGTAGGTAGGCGA
-GCCAAACCTTTTTTGTAGATGATGAAGTAGGTGTAGGCCGTCTTTTGAAG
-GCAGTGAGGCAGACAAGGTTAGGTCGTCGCAAAGGTTGGCTGGAAGGTAG
-GCACGTGGGTCAGCAGATAAGCGTAGGCAGGCATAGGCAGGAAGGCATAG
-GCAGGTAGACGTAGGCAAGTAGACGTAGACAGGATAAGATTCAAATATGA
-AAATCGTGAAAAGGGGAAAATTTCTTATTCTTCGAGTGCGCGACAGTATG
-CGTAGGCAGGTAGGCGTTGGCAGGTAGGCGTAGATAGGTAGGCGTATGCA
-GGTAGGCGTAGGCAGGTAGGCGTAGTCAGGTAGATAAGCAGGTAGTCGTA
-GACCGGGTAGGCGTAGGCAGGTAGGCGCATGCAGATAGTCCTAGGCAGGT
-AGGCGTAGGTACGTATGCGTTGGCAGGTAGGTGTTGGCAGGTAGGCGCAG
-GCAGGTAGACGTAAGCAGGTAGGCGTAGGCAGGTAGGCGTAGGTAGCTAG
-GCGAAGGCACGTAGGCGTAGGTAGGCAGGCATAGGCAGGTAGGAGTAGGC
-GTAGACATGCGCACATGAAAACCTTATAAATGTTTCAACCCCATCATCAT
-CATCCCATTTTTCTCTCGATCAAAACGAAAAAATGTGCGCAAACACAAAT
-TGCATCCATTTCTCTCTCTTTTTTACTCACTTATATATCTCTCATCACTT
-TATCCCCCGTTTTTCAATCCCTTCCAAACACTTCCAAAACTCTCCAGAAC
-TCCTAGAGAGTAACACGAGAGAAAATATTTGAACTTTTGTCTCGACCAAG
-TTTTTTTTTTTGGGATTTTTTCTTTGGATTTCTACAAATTTGATGTATTT
-TTTCCATTTTTCGTGCAAAATATGGTAATGGACTAGGTTTTTGCTACGTG
-GCCTAGAAAAATCTCGGCCACCGATTCTGAGCTGTTGCAGCGGCCGCGGC
-CGAGGGTTTTTCTCTTCAATCGATACCAATCCCTCTTTTACGCAAGGAAT
-CACGTGGAGTCAGAGTGTCTCATTTCGTCTTGATCTACGTAGATCTACAA
-AAAATGCGGGAACTGATTTCGTATCGTTAAGAACATGCTGACGTCACATT
-TTTTTATCATAAAATTCCCGCATTTTTTGTAGATCAAACCGTAATGGGAC
-AGCCTGGCACCACGTGCTCTTCCAACCTTTATATTTTTTTTGACAAAATC
-TTGAGAATTTCTAGAATTTCAACGAAAATCCAATTTTATACCTAAACTTA
-AAAAAAAATTGCTAAATTGTGTTCGACTAGCAAAAAATGCACCCAGTTTT
-ACAAAAAATCTTTTTTTCTGAAAAAAAATTCAGTGGAAAATGTCTATAAT
-TTTCAGTAATTCATACTAAAAAAAATCCAATTTTTACAACAAGTTTTTGT
-GGCCGCGGCCGAGGTTTTTCCTCTTCCACGTGGTGTCAGAGTGTCTCATT
-TCGGCTTGATCTACTTAGATCTACAAAAAACGCGGAAACTGATTTCTCAT
-GGTTAAGAACGCGCTGACGTCACATTTTTTTGATCGTAAAATTCCCGCAT
-TTTTTGTAGATCAAACCGTGATGGGACAGCCTGGCATTACGTGAAAACAA
-ACAATGCAAGCGCGCTCTAATGCGAATTTATTTGCTCTACCACCAGATAA
-ATTCCACTTCTTCACAATAAACCTAAATATTTTTTGTGTCAAAATCTTGA
-GAATTCTTAGAATTCCAGAATTTCAGCGAAAACCTAATTTCCGATTTTGT
-TATTGTTCAGGGGAACAAGTGAGCCACACAGCTTCCGCTTCTGCTCCGAA
-TTCGATTCCCCTGAGGCATTTTTGTTCGAAAAAAGCCTCATTTGTCATAC
-TTGTCGGCAACTTTCTTCGAAGTTTTTGTTCTTGTTTCAAATAATTTTTC
-TTCAATACTTGTTCCTTCCGTCCCAGCAGATGTTCTTTTGCGGGGGGGGG
-GGGGGAGGGGAGAAAAAAAATAAGAGAAGAAGCAGAAACTCGACACTTTT
-GTGTCCGCATTTCTCGTAAAGTTTTCAGATTTTTGAGCTTTTCAAGCTAT
-AGCTGAACCACCTAGCAAATTTCGCCGCAGAGTTGATTTCTCCGGGAGTG
-GGCTTTCTACTGGAGACCTCACTTTTTTTGCCTTTTACTAGAGCTTTTTA
-ATTTTTTAATAATTTATTGCAGCTCTATGGATTTTCCAAAAAAAACCACC
-GAAAAGCCCGAAAAATCAAAATTTTCGTTTTTAAAACCCTAAATTCCATA
-CTCCGTCCAAAGAACACTCACATAAAAATGAAGAGATTTCGCAAAAAAAG
-TGAAATCCAATTCAATTTATTTCAATTTTGAAGAGTGCGTTCGTCAGCTT
-TTTTTTCGACAAAAAAAAAAGAAAATGTGTAGTGTAGTTTTCAACAGATT
-TATTGTTTTATTAATATAATAGAAATCAAACCTTCTTTCTGCCTACCTAC
-ATGGCTACCTACATGCCTACTTGCAAGTAGACCTGTCTATCTAGGTACTT
-ATCTCACACCTCTTTACCTACATACCTACCTTCCTACTCACCTGCCTACT
-CATGTAGACATAAGTGATCGTCAAAAAAGAAGCTGATGGATCAAAAGTTT
-TTGGAAATTTATTTCGATTTTCAGGTTTTAAAAATTGCGGAAGATGTTTA
-ATTTTTGACGATTAGTTTAGAATTTTTTTTAATTAAGAAAAAAAAATTAT
-TATTTTATTTTTAAATTACTCCAAATTTTCTTCTGATTCCGAATATCTAT
-GTGAAACTTTTTTTAATTCCTTGGTTTTATATCTAAGCTTAAAATCGCTA
-ATTTCATTTGTGCACCCAAGAGATTTCGAATTTTCACGGGGTTCTGGCCT
-TCCTCCTTGAATTTTTCGCGCTCCATATAATATTGACAACCGGGCAACGC
-GTGGGAAAGTCGTGTACTCCACACGGACAAATACATTTAGTTTTACAACT
-AAAATCGAGCCGCAACGCGACACGCAACGCGCCGTAAATCTACCCCAGAT
-ATGGCCGAGCCAAAATGGCCTAGTTCGGCCAAAACTCTTCCATTTCAATT
-TATGAGGGAAGCCAGAAATCCCGTGTAATTTTCGCGCCAGAGACGCCATG
-TGTCGATTTACGAGATTGGTGTATATTTACAAAATGCGTAATATTTATAG
-AATGCTGATTTCCGTTTTTTTTTTTTGAAAAATGTCATGTGTGCACAAAT
-TAAATTCGGCGATTTTAAGCTTAAATATAAAATCAGGGAAATTTTTTAAA
-TTTTTTTCACGTAGATATCCGGAATCAGGGGAAAATTTGGAGGCAATTAA
-AAATGTCTCCCTGATCATTTAAATTCTTTAAAAGTACTCTTCAGAATCCT
-TTTTTCCTAACCAAATAAAATAATTTCTGACGCCTTTTTTTTCTCTTTTC
-AATAAGAAGCAAAAAACAGACGAACCTATTCCAATTTCCCACCACACCAA
-TTCGTTCTTTCCGCATTCTTTTTCTTCCATTATTTATCTCCCTTTTCCTC
-CATTCTCTGTGCTCTTATATATATCCATCATCCCATTTTCTTTCTTGTTG
-TGTGGTATGCTCTTTTTCATCCATTATTCGAAAATTCTCATTTTCCAAAG
-TTTTTTGTCAAATACATTTTAAAAATTTTTTAAACCAAATCTCGCCGTCC
-ATCGATTTTAAAATACCTTTTTTGAGAAGTTTTCAAGAAATTTCATTATG
-AAATTCGGTGTTTTCAGACAATTTTGAGTCTAATAAAACAATTTAAAATT
-TTGACTACATCACCTTTAACTTGTAGAATGCCGTTTAAACACACTTATCA
-CTTTTTCAGAATCCCATATGCAATGGTATCACTTGCTCCTGCTAATTCTC
-ATGATCCTGGTCCTAATCCCATGTTTCTGGCAAGCTTGGCTACGATTTTC
-CCGTCGATTCTCCGATTCCTATGATCTATCAAGAAATGCGCAAAAGCGTG
-ATGAGATTTCAAAGGAGTTTTATGTATAGCTTACTGACAGGATTTCAAAA
-AACAGTTACGGTAAGATTTTTCGAAAAATTTCACGGATTTCTGGCTTCTT
-GCCGAACTAGGCCATTTTGGCTCGGCCATATCTGGGGTAGATTTACGGCG
-CGTCGCGTGTCGCGTCGCGGCTCGATTTTATTTGTAAAACTAAAGGTATT
-TGTCCGTGTGGAGTACACGACTTTCCCACGCGTTGTCCGGCAGGCGATTG
-TCAATGGAGCGCGAAAAATTCAATGAGGAAGGCCAGAACCCCGTGCCTGT
-ATAGGATATTTTGAATCTCAAAAGAATTTGAAGATTTGAGTTTTTTGAGT
-TTGAGGTGGAAAAAATCGTAAAAAATTCCTTTCCGATAAATTTTCGGATG
-CAAAAATGTGATCCATGCTGTAAAAAATCCAAGAAAGCCAAGAAATGTGC
-GGAGCCTATTTTCCGATTTTATATTACTTTTTATTTCAAAACTTGATTCA
-AAAATATCAAATTCGGAAAAAAAACCGCAACTTGGTAAAATTTCCTCGAA
-AAATATTCTCCGCTTAGGCTCCGCCCCTCTCTTGGCATTTCGAATTTTTT
-CGTTAAATTTTTGGAAACTGAAATTAAGTCCAAAAAGAACCAAGAAACGG
-GCGGAGCCTATTATGGGATTGAAAAGACATGGTGCATCGATATGGAAACG
-GCTTTTAATTTGGTTTTTTTTAAATAAGAAACTAGTAAAATTCAAGTGGC
-CTAGCTTTCAACTCTTCCATAATTCCAGGGTACATTCCAACTGGTCATTG
-CTCATTGCTCTCTCTTTATGCTTCTCATCACCAACGAATCCACTCAATTT
-TCACTCAAGCTGTCATCTCCAGCAGTGTCTCTCAATTTAATTATGCTTGA
-AATTGTTTTATAAAATGAAACAACACATACTCTGTAAAAGCAATTTATTA
-TTAAAAAGTATATATATACACGTATTCCTGGGTGGGTATTGAGACTAACG
-GAAGCGACATGGAGGAGAATTTGAATTTCATTAAAAAAAAAAAACAAAGA
-GGTAGGTTACTGTAGCATCCAATCTGGAGGCTGCACAAAGAAGACTCCAC
-CGTCAGTGGCGCAATATGTTGGACACACCTGGAACGTTGAAACATTATTT
-ATTTCTTTAAAATTTTCTTTGTCTAAGCCTGAGCCTAAGCCTGAGCCTAA
-GCCTAAGTCTAAGCCTAAGCCTAAGACTAAGCCTAAGCCTGAACCTAACC
-CTAGGCCTAAGCCTAAGAAAAAGCCTAAGCTTGAGCCTAAGCCTAAGCCT
-AAGCTAAAGCCAAAACCTAAGCCTAAGCCTAAGCCTAAACCTAAACCTAA
-ACCTAAGCCCGAGCTTAAACCTGAGCCGATACCTAAGCCTAAGCCTAAGC
-CTATTCCTAAGCTTAAATATAAACCTAAACCTAAGCCTAAGCCTAAGCCA
-AGCGCTGAGCGTAACTTAGAGCCTAAGCTGAGCCTGAGCCTAAAACTAAG
-CCTAAGCCTAAGCTTGATCTTAAGCTTAAACCTAAGCCCTGAAAATTTTT
-TTTTGAACTCCACAACAAAATTTGTAGAATGTTTTTAAAAATTGGGATTC
-TGAAATTCCCCGCCAAAAAGTTTAAAAACTTCACATTTTAATTTATCTGT
-AAAATTTATATAAATCCCTCTTAGATTTTGAATTTCGCGGCAAAACTTGT
-AGAACATTTCAAAAATTTACTTTCGCGCCAAAGATTGTCGCGCGAAATTT
-ACAATTTTTCTATAAAAAATGTATTTCATAGAATTTCAAAAAATCGAAAA
-TCGCGCCAAAAATTTTTAAAAATTTTTTTCAGTATTGTGACGTCATAGAC
-TACAAACTAACCCCTCTATTGCCTTCCTCCCCGTGCTCTCCAATGAGTCC
-TTCGGCTCCAGCGGCTCCATCATTCCCTGGGAACCCGGGCTTTCCTTTTT
-TTCCTCGTGGGCCTTGTGCACCAATCGGGCCGTCGATACCAGGCATACCA
-GACGGTCCTGGCGGCCCGAATTCTCCTTCCTCTCCGATCGGACCTGCTGG
-TCCCGGGATGAACGGTTTCGGGGTGGCGTCCGCACCCGGGTCGCCCATTT
-CTCCATCCAGTCCTGGGATTCCCTGAGGGCCTTGTAGGCCTTTTGGTCCC
-ATTTTTCCATTTTCCGCGCGAAGTCCATTCTTTCCGGGTAGTCCTGGCTT
-ACCAGTGTCTCCTTTCACTCCCTGAAAATTTAGTTTAGTGGTATAGGCCT
-ATCAAATAGGCTTACCGTAATCCCAGTGGTTCCTTGTACTCCTCTCGGAC
-ACGGATCCGCACACAAAGACTTATAATTCACAGGAGGCTCACATGGTAGG
-CGCGCTGGAAGTCCAGGCGCACCTTCCGATCCTTTCGTTCCAGGAAGACC
-GTCTCTTCCAGGGATCCCCGGGGGTCCTTGTGGATGACGGCACTCACATA
-CTCGGGATCTTGCGGTTTGGCCGGTTTCGTGTAGGAAATCGTCGATTTCA
-TCTCTTTTCTGGCGGGTTATGTTTTGGAAATCGTTGGCGACATCGGATAG
-CATGCTTTTCATCTCGAGGGCGCTTTCCTGGAAATTTAAATTTGCTTGAA
-ATTTTCAAACTTGTTATATTATAATTTACAAAATACTGACTGCCTTTGTA
-AGTTTTTTATTACAGGAACACAAAATTCTAAGAATGCGTACTGCACACTA
-TATTTGACGTGCAAGATATCTCGTAGCAAAATCTACAGTAACTCTTAAAA
-TGACTACTGTAGCGCTTGTGTCGATTTACGGGCTCGATTTTCGCAACTTT
-TTTTCTTTCGGATTTCCTTCGTTTCCTCGTATTGTTTTCTAACTTTTTAT
-TTCAAAATTTCAATATTCTATCGATAAATAAATCATTTTAATTTATTTCG
-AAAATCGAGCCCGTAAATCGACACAAGCGCTACACGAGTCATTTAAAGGA
-TTACTGTAGTTTTCGCTACGAGATATTTTGCGCGTCAAACATGTTGTGCA
-ATACGCATTCTCAGAATTTTGTGTTTCTCTAATACTGTGTTTTTAGGATT
-TTGAATGAAAGGAAAAGCCCGAAACTTTTAAACAAATTTTTCGGTGCATT
-CTGTATCAAAAAAGCTGAATAAAATTGTACAAAAAAATGCCACATTTTAT
-TGAAAAATTGATAATAAAATAATTTGTTTTCAAATAATTTTTGAATTTCT
-CAATTTTTTGGAATTTTTGGATTTTTTCGGGCCAGAAAGTAGGCATTCTC
-ATGAACTGATGTTTTCTTCATAATAATATATTCAAAAAAACGGTCTCCCA
-CAAAAAAAGGTCCGAGAGGCGAACAAGGTTGTAAAACGTTGCTATTGTTT
-ATTTACAACCGCCATTATACCCCTATAGGGGTTGTAACACCACATAACAA
-TTTGATAAGATGCACACAGTAGGGAGAGGGACCTAATTTAAAAATATAAG
-AATTTTCTCATTAAATACAATTTTTCTCTATTTCTTTCAGGAATATCGAG
-AGGAAAATCAGCGAAATTTTTGGAAATTTTTGGTTTTTTTCTAACGAAAC
-AAAAAAAATTTGAAAAATTTCAAGAAATTCTGTGTATTTATCGATAAAAT
-TTCAGAAATCAAGGGGGTCGTATAGAAGTTAGACGGTCGGTTTTTCGACT
-TTCAGCTAACTTTATGAAATTTCATTTGTTCAGGTTTTCTGACATTTAAA
-ATCAAATGGCATTAGCAGTTTTTCATGAAAAGTTTCAGAAAGTCTCAAAA
-CTCCAAATTTTAGGAGGGTCGTATAGAAGTTGGACGCACTAAAAAAAAAG
-GAAAAATGTGGTTCTAATTATTACGGAAACACTAAATTCTGAGAATGCGT
-ATTGCACAAAATATTTGATGCGCAAAACATCTCGTAGCGAAGACTACAGT
-AATTCTTTAAATGTCTACTATTGTAGCGATTGTGTCGACACGTGGTGCCA
-GATTGTCTCATTTCGGCTTGATCTACGTAGATCTACAAAAAATGCGGGAG
-AAGAGACGCAGACTTCTCAACTGATTTCTCATGGTTAGGAACGTGCTGAC
-GTCACATGTTTTCGGGCCGAAATTTCCCGCATTTTTTGTAGATCAAACCG
-TGATGGGACAGCCTGGCACTATGTGTGTCGATTTACGGGTTTGATTTTTG
-AAATTGATTAAAATAATTTAGTTATCGATATTATATTGGAATTAAACAAA
-AAGTGAGAAAATAAATCGAGCCCGTAAATCGACACTACAATAGTCATTTA
-AAGAATTACTGTAGTTTTCGCCACGAAATATGTTTGCGCGTCAAATATAT
-TGCGCAGTACGCATTCTCAGAATCCGTAATCCTCAAACTTCTCACCTGAC
-AGTACTCGGCATCGTTGACAGTATTCTGAATAGCCGGTCGAAGTATTGAG
-GCAAGGGGTCCTACAGAAACAATAAACGACGACATCGTGGATAGCGAGAT
-AAATAGTGAAACTATGATTAACGTGGCGTATGCCGTTTCTCGAGCATTCT
-CGTTCATTTTCCAGGAGAAGCCTCCAAGAGAAGCCTATGGAGGATCCAAC
-GAAAAGTGAGTAAAGAAATGATGCGCTGGCGCGGAAAAACGAGAGCGATT
-ATGTATGGGAGTGACCCAAAAACACGGAAAAGTAACGGATAACAAGAAGA
-AGAAGGGGGCAACTTTCTCTTTCTTATCATCATCACCATCATCATTATCT
-CCTTTCTCGGGATTCCGTCATGAGAATGAATCCATTTACTCGTTTTTTTT
-GTGTCCATTTAAGTTTGTCTATAAATATGGCTAATTTCAACTTTAAAATC
-AAATAATGAAACTAGTAATTCTACTCATCTCTCACGCAATTCCTTTCTTT
-TATGTGATATATAACTTTTATTCCATATTTAAAGAAATTTCAAGTTTAGA
-GTCTAACTTGAAAATTGCCAGTGATGAATATAAAATTAGAATGAAGAATA
-TTTCCAGAGAAGTTGGAAGTGTAGTCTTGGAGGAGAAGAGAGGAAAGAGG
-TGAGGAAAAATTACGTTTTTTTGAAGTTTTTTCTTTAATTTTCGAAGGAT
-TAGGCTTAGGCTTGGGCTTAAGTTTAGGCTTAGGCTTAGGTATAGGCTTA
-GGCTTAGGTTCAGGCTTAGGCTTAGGCTTAGGCTTAGGCTCAGGCTTTTG
-TTCAGGCTTAGGTTTAGGCTTAGGCTTAGGCTTAAGCTTATGCTTAGGTC
-AAAGTATAGGCTAAGAGGCCTAGGCTTAGACTTAGGCATAGGCTTAGGCT
-TAGGCTTAGGCTTAATCTTAGGCTTAGGATTAGGCTTAGGCTTAGGCTCA
-GGCTGAGGCGTAGGCTTAGACCAAGGCGTAGGCTTAGGCTTAATCTAAGG
-CTTAGGTGTCGGCTTAGGCTTTAGCTTAGGCTTAGTCTTAGGCTTAGGTT
-AATCTTAGGCTTAGGATTAGGCTCAGGCTTAGGCTGCGGCCTGGGTTTCG
-GCTTAGGTATAGGCTTAGACTGAAGCTTAGACTTAGGTTTGGGCCTAGAA
-TTAGGCTTAGGCTTAGGCTTAGGCTTGGGCGGGGCTGGGCGGATGAGAAA
-AAGAGAAAAATTCCAGGAAAATCCAAATAAAATCCAGAAAAAATAATAAA
-AAAAAGGAAAAAACGGGAAAAATGGGGCATTCCGCGTCTGCCGCGTCAAA
-AACTTTTCCTTAAAAAACGGACAGAGAAGGACCAAAAAAGACAAAAGTTT
-AACAAAAAATAGTTAAACATTTTTTTTGACGGGGTTGAGCTCACCCAGCT
-GAGCTCACTCCATAATTGCACACAAAATTCTCAAAAAATTAATTTTAGAG
-ACTACACAGAGGCTAGCAAATGCACATGCTCTTCAACGATTTCTCAGAAA
-TGCCCGCCAGGCTCCAAAGGTGCTCCAGGAGCCGATGGTCTGGACGGGAT
-CCCCGGCTCCAGAGGTCTGAATGGTATGGATGGAGAGGCTGGGCACAGTA
-ATATGGATGTTTGTGAGTTGCCCAAGATCTTTTATTTTTTGTAAATTCAT
-ATTCCAGTCATGTCACCAACAGGATGCATCCGTTGCCCAGCGGGTCCTCC
-AGGTTCTCCTGGTGATCATGGTTCTCCTGGTGAACCAGGGTACCCGGGAC
-CTTCAGGACCTCCAGGGGAACCCGGTTACGCAACAATTGGGCTTATCGGG
-CCACCTGGACTCGCAGGCCAAGATGGTCTAGATGGAGCTCCTGGCGAGCC
-GGGAGTAGGTGGAATGGATGCAGTGAAGATTGTTTCAGTTGATGGAAAAA
-TTGGAAGAAGAGGAGAAGCGGGGAACAAAGGAAGCAAAGGATCTCGAGGA
-GGAGTTGGAAAAGCTGGAGGGCCTGGGGTGGCTGGAGAAATGGGAGAAAA
-AGGAGCAAGAGGTGAAGATGGAAAGCCTGGAGAGTCTGGAAAGGTGAATT
-CTCAGAAGTTGATCGATGCACCAGGGCGACAAATTAAGCGAATCGGCAAA
-TTGCCGATTTGCCGATTTGCCGGAAACTTTCAATTCCGGCAATTTGCCGG
-TTTGCCGATTTGTCGGATATCAAATTTGCCGGAAATGTTTAGAGGGATTT
-TTTAAAAGACGAAAACACTTAAAACTGTGTCTTTTTGAATTTTTTCCCGT
-TTTCCTAACTAGGGAATATTGTTAATAGGGGAATTGCTAGGAAGAAAAAA
-CAAACTTTAAATGACAGATGAGGTCTTTGGCTACAAAAATCATTTTTTTC
-ATTATTTTCATTTTCATAGAATTTGCTCACTTTTCAAAATAGACGTAGGA
-ACATTCATAGGATGCGTTTAATTTTGCCATTTGAAATTTAAATTCTGAAA
-TTTCCAAAAAAAATCGGCAATTTGCCGGTTTGCAGATTTGCCGGAAATTT
-TCCATTCTGGCAATTTGCCGATTTGCCGATTTGCCGATTTGCCGGAAACT
-TTCAATTCCTGCAATTTGCCGGTTTGCCGATTTTCCGGAAATTTTAATTC
-CGGCAATTTGCGGATTGGCCGATTTGCCGGAAATTTCAATTCTGGCAATT
-TGCCGGTTTGCCGATTTGCCGGAAATTTCAATTCCGGCAATTTGCCGGTT
-TGCCGATTTGCCAAAAATTTTAATTCCGGCAATTTGCCGGTTTGCCGATT
-TGCCAAAAATTTTAATTCCGGCAATTTGTCGATTTGCCGATTTGCCGGAA
-ATTTCAATTCCGGAAATTTGCCGATTTGCCGGAAATTTAAAATCCGGCAA
-TTTTCCAAAACTGTATAATTTTTCAGCCCGGCGCACCTGGAATCCCTGGA
-AAAGATGGTACATACTGCCGATGTCCCGATCGAAATCGTTACGATATTTA
-TCCATATAAATCGAAAATCTGATAATAGTAATAAAGATAATAATACAATA
-AATACAGACAGGAAACGAAAAGCGAGCACTGACGATTGTATGATACCCGA
-AACATTAAGGAGGAGCACAAAAAACACAATGAAAAGACACAGAAAAATTG
-AAATTTGAAAAACTGGTAACGAGACTAGAATCGTCATGATGATCTTGTTG
-AAAAAATTGGAAAAAAATTAAGAATCTAGAAATTGATTAGGCGCAGACTT
-GACACGATCTTGGGCACCGAATCCGCATTTCAGGCCAATTTTCGCATGCT
-CCGCCTTGAGCCCATGACGGGCAGAGGGAGTCATGATCGATGCATCTGAA
-ATGGGGAATATTATTTTTTATTTTAAGCTTCAGGTTTAGGCCTATCGACT
-TTGGATCTCAGGCTCAGGTCCTTAAATTGTGTATCTCAAGCTTAGGCTCT
-CTCGCTCAAGCCTTTAGATTTCAAATCTTAGCCTTAAGCTCTCCGACTGA
-TTTAGGATATCAGACTAAGGGCCTAGGACTTTGGGCCTGAGGCTTAGGCT
-AGTATTCAATCTCAAGCTTAGGATCTCACGCTTAAGCTCTCTGACTCAGG
-CCCTTAGATTGCAAAAACCTTTGCCTTAGGCTCCCCGACTGATTTAGGAT
-ATCAGACTTAGGGCCTAGGACTTCGGGCCTGAAGCTTAGGCTCTCAGATT
-CAGGCCCTCAGACTTTGAGTCTAAGGCCGTTAGACTACGATTTTCAAGCT
-TACAATTAGGCTTTTAGGCTTAAAATCAAAATCCAATTTAGTTTTTTAAA
-AATAATCAAACATTTCTAAACCGCAATTTTTTAAAAATTACCCTAAATAT
-TTCAAATTTTAGGCTTAGACTGTCAGACTTAAACCTTTAAACTTTTGGTC
-TCAAATTTAGCCTACAAGTCTGTGGACCTAAGACTTTGGACCTCGAACTG
-CGGCCCTTAGATCTCATGCTTGGGCTCTAATATCCTGGCCCTCTAGTCCT
-AAATCTTTTGATCGTAGTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCT
-TTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTT
-CAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCA
-GGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGG
-CTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAAGCTTTCAGGGT
-TTCAGGGTTTCAGGCTTTTAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTT
-CAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCA
-GGCTTTCAGGCTTTCAAACTTTCAGGCTTTCAGGCTTTCAGACTTTCAGG
-CTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGGCT
-TTCAGGCTTTCAGGCTTTCAAGCTTTCAGGCTTTCAGGCTTTCAGGCTTT
-CAGGCTTTCAGGCTTTCAGGCTTTCAAACTTTCAGGCTTTCAAACTTTCA
-GGCTTTCAGGCTTTCAGACTTTCAGGCTTTCAGGCTTTCAGGCTTTCAGG
-CTTTCAGACCACAACTAGACCGGCAACACACGTGTTGTCTAATTACTCAC
-CTCTTTGCCGGCGCTCTATGCATATTTGATGGTAACTCGATTGTCTTTGA
-AGCTATCACTTTCACAGCTTCCCAAGTTTCCCGAGCTGTTGGAATGATCT
-GAAACATCAAAAATCATCATCAAAAATCGTGGTGAGACCCAAAATTACCT
-GATTCTCAGCCAGCAAGAATCCATCCCAAACTTGCTCTTCGGGTCTCAAC
-TCGAACAGGAATGAGTACTTGACGTGGGCTTTTCCCTTTGCCCAATCTTC
-TGAGCCACCGGATGCGGGGTCTGGAAATATTTTGAAATTTTATACATAGG
-AGCCTTAAGAAATAAGAGCTTACAAAGTGTATCTGCACCGGTTCCAACTT
-TGTACTGCGTGTTGTAGACACTATTCAAAGCCTGAGCTGCTGAGAGGGCA
-GTGGATCTCTGAAATGTTTAGAAAATATGACCATGACTTGGGCAAACAAT
-TCCCGCATTTTTGTAGATCACACCGTAATGGGATAGCAAAACACGTGGTG
-CCAGAGTGTCGCATTTCGTTTTGATCTACGTAGATCTACAAAAAATGCGG
-GAACTGATTTCTCATGGTTAAGAACGTGCTGACGACAAATTTTTTTGAGC
-GAAAAATTCCCGCATTTTTTTGTAGATCAAACCGTAATGGGACAGCCAGG
-TACCAAGTAAAAAATTTACTCACCAAATCATTCAAATCATTTGAATAAGT
-TCTGACTTGATGGCCGAACGGATACATCAAAATTTGAGAGTACGAGTGGA
-AGGTGAGGAATGTCGAAATACGGTGTCGCTGCACGAAATCTCTAACCGCC
-GCAGTCTCGGGCTCCGAGAAGGCGTAGGCTCCCTGATAGATTTCCGAGCA
-AGGATCAGTTGATGAGCCGACTTGTCCGAAGAACCAGTCAAAGTTTCGAT
-TGAGGTCGACACCTTGACAGCAGGTTGTTGTGGGAGGTTGGAAGAGTCCT
-GAAAGGTTTTTATTTTTGAGATTTTTAACTTTCACGGAGAATTGCCAAAA
-TCTTAGTTTTCATAGCCTGTGTGACATTATTTGGGCGTAACTAAAGTCCA
-GAAAGCTTATGCCTTGTGCTGATGAATTTTTGCAAAAATTGTGCCCAGTT
-TTGCCACTTTTTAGTGGTTTTTGATGGGTTAAACCTAAATTTTCTGAATT
-CAAGTTTTTATTTTTTCCAAATGTTTTTTCAGCCATCGAATGGCTGTCCT
-TTTTTTCGGGCAAAAAAATAATTTTTCTGAAACTATTTGAAACAATTATA
-TTCTAAAAAAAAGGCAATTTTTTAAATTTTTTCTAGTAAATTTTGAGTCC
-TCTAGCTACAAAATAAACCATTTTAGATGAGTTTCAAAAATGTGCATTTC
-TACAAAAATTGCCCAATTTTTGCCACTTTTTGGTGGTTTTTGATGGGTTA
-AACCTAGATTTTCTGAATTCTGCGTATATAAATTACACGTTTTCAACAAA
-TTTAGACATTTTTTTTATTTTTGCCCAATTTTTTTCCAGCCATCTAATGA
-ATATCCTTGTTTTTAAGCAAAAAAAAATTTCTGAAACACAATTATTATGA
-TCCAAAACAGGGGTGTGCGGCAAATCTCAAAATTTGCCGAGCACGGCGAA
-TTTGGCAAACGGCAAATTTGGCAAATTCAGCAAATTTGCTGAGCTTTACA
-AACTCCGCAAAAATTTGATACTTTTTGAAGCACCTAAACTACTAATTTCT
-GAACAAAAGTTCAAAATAACTTGATTTTGTGCCATTTTTCTAAATTTTTG
-GAAATCAATAATTTTGTCAATAATTTTGGTTAAAATTGTATTGTCAAATT
-TTTGACGCGGGCGGCAAATTTCAAAAATTTCTGAGCTCGGCAAACGGCAA
-ATTCGGCAAATTTGTCAAATTTGCCGCACATTTTTTTTTGGTTCAAAACA
-TAATAAAACACTCCAAAACATTTTAGATTTTTCATAATTTCCGGTCGAAG
-TTTTTGCAAATTGCTAAAATTTTGAAAAATATGAGTATTTGAGGAAATCC
-AAAGCAATGCCGCATGTTCCGACCCCTACAATGTTTTAATACAAATGATT
-AAAACAAAATTACAGTAGACAAAATGTAGAAAAAAAATTATTTTTGGTCG
-ACTTCCAAAATTATGAGTGGCAAAAACTTTGTAATTGTCACTTTTTGACA
-GTAAATAAAAAATTTTAAGAATTTTTTTGAAAAGTTTTATTATGATATTC
-GGTCATTTTGGGACCAAATGAGTGGTTTTTAACAATTCCGGCACTGGCGC
-TAGTCCAGCAATTGCCGTAATCTTAGTTTTCATAGCCGACATTATGCGGG
-CCTAACTGAAGCCCAGAAAGCTTGTTTACAAAAATGAGCAAGCAGAAAAA
-GATCAATCTCCCCAACAAACCTGTTGCCTGTTGAATACACTTTGGTGGTG
-ATCGATTCTTTCTCCACAGTCTGATCTCCGGATCATTGCTACTTCTACTG
-TACTCATAACCATCCGGATTCAGCAGTGGAACAATATACCATTCGAGTTG
-ATCTACGAATTGCTTGATTTGAACATCTTTGTCGTACTGGGTGACCAGTT
-GGTGAATGAAATAGAGTACTGTCGATGGTGACACCCATTCACGAGCATGG
-ATTCCTCCGTCCACCCAGATGCCACGTTTCGTACCTCCGTTACGCTTGTT
-GGTGATCTGGAATTGAGGAAAATTGGGGTGAGATGGGATCACTAAATTCT
-GAATCTAGTTTCTGTGCTACTGTGTGTTACGTTTTTTGCGCTCCATTGGC
-AATCGCCTGCCCATCAAAAACCGTCAAAAAGTGGCAAAACTGGGCAATTT
-TTGTAAAAATTCACAATTTTGAAACTCCTCTAAAATGGTTTAGTTCGTAG
-CTAGAGGACTTAAAACTGATTTTTGAACCCTAAAAATTGTCTAAATTTGT
-TGAAAACGGGTAATTCTTGTATGCTGAATTCAGAAAATCTAGGTTTAACC
-CATCAAAAACCATCAAAAAGTGGCAAAAGTGGGCAATTTTTGTAAAAATT
-CACAATTTTGAAACTCCTCTAAAATGGGCAATTTTGTAGCTAGAGGACTC
-AAAATTAACTTCCAAACTCTAAAGAATTGTCCTTTTTCAGAATATAGTGG
-TTTCAATAATTTTCGAACAGAATTTTTTTTGCCCAAAAAAGGATGGCTGA
-AAAAAATTTTGGCCGAAAAAAAAACAGTTTTACACTGAAAGCCAAACCGC
-GACGCGACACGCAAAGCTCGGTAAATCGACCCCAGCCGTGGCCGAGTTCA
-AATAGCCAAATTCGGCAAACTCTCACATTTCAAGCTATGTATTTCAAGCC
-AGAAGCGCGTGCGATTTCTCAAAAACCGGCAGCTCAGTTGCAGGAGGACT
-TTACGAAAATTTTGAAAATTCCAAGGTATAATTGGTAGGTTTTTCGGCAT
-GTTGCATGGTACTTAAAATGTTTTTTTAACTTTCAAAAGTGGCTTTTATT
-TTGGTTCTTATTGCAAGCCTAATAATAAAAATACTATCCACGTTTTAAAT
-GCTTCCATGGTAGGCAGGCGCGGTTTCAGGGCCGACATGGAAGCCCTACA
-TGTCACGGATTTCTGGCTTTCCTCAGAAATTGAAATGGACTAGTTTTTGC
-CGAACTAGGCCAGGCCATATCTGGGGTAGATTTACGGCGCGTTGCATGTC
-GCGTCGCGGCTCGATTTTAGTTGAACAACTAAATGCATTTGTCCGAGTGG
-AGTACACGACTTTCCCACGCGGGCGATTGCCAATGGAGCGCGAAAAATTC
-AATGAGGAGGGCCAGAATCCCGTGATCGTCCGAAGCAAAGTTAAAACAAC
-AAACCTTAATCAACGGGATCTGCCGTCCTTCGTGAGTCGTTCCGATTGGC
-TGCACAGACACAAGCTCCGGATAAGTGATGGCTAATGAGTTCAGGTAGTT
-GATAACATCAGCAAACGAGTGATATTGTGCAAGGTTAAATTGAACCTGCA
-ATAAGTTATCATTGAACTATGTATCATTGAACGTGGTGTCAGAGTGCCTC
-ATTTTGGATTGATCTACGCTGATCTACAAAAAATGCGGGAGAAGAGACTG
-ATTTCGAATGGTTAAAAACGTGCTGACGTCACATTCTTTTGGGCTAAAAA
-TTCCCGCATTTTTTGTAGATCAAACCCTAATGTGACAGCCTGACACCACA
-TGTATTCACTCACTTTCTGCTCCCTCCAATCATGCAGTCGAACTTGTTTC
-CGAAGCTTATCCCGCTTCTCCTTCTGCTCGACAATCACTCTGAAATCGAT
-GAAAAGATTGTAAGTTGGGCTTAATAGTGTCCCCCCACGACACCCATCAC
-GCGTAACGAGCCGTGACGCGTTTGAATAAAGAGGGTATTTGGACTTGTGA
-TCCCCGCGAAAACCTGTATCGCACGTGATGCCAGGGTGTCTCATCACGGG
-TTGATCTACAAAAAATGCGGGAATTTTTTGCCCAAAAATGTGACGTCAGC
-ACGTTCTTAACCATGCCGAATCAGTTCCCGCATTTTTTGTAGATCTACGT
-AGATCAAGCCGAAATGACACACTCTAACACCACGTGGTATCGCCGAAAAA
-CTCACTTCTGAACGTCATCAATCATAACGGAATGCTTAATCGAATGATCA
-TCGAGCTCTTTCATAAACTGCTGAGTTTTCTCATCGGATATCATCACATG
-AACCTCCTTGCCAGCTTCCGACGGGGATTTCCAAAAATCTAGCTGAAAAT
-TTTAGTGTGTCTGAAGCACCCTTATCAGTTCATATTATATTTCAAAATTT
-TTCTCTAACCCCTCAAAACCGTACTCTACATCGCCGTTCTGGCCGAGTGG
-TCTAAGGCGCTGCGTTCAGGTCGCAGTCCTCTCCGGAGGGCGCAGGTTCG
-AATCCTGCGGACGGCAGATTTCTTTTTTGAATACTACTCTTCAAACAATG
-CATGATGAAGAAGAAGAAGAAAAAGAGAAGAACGTATTGGCTTTTCCTTT
-TACACTTTTGAAATCCCTAGGAACAGGTTATAAACAGCGATGTAACATGA
-AAAGCAGCAGTGAGAGTGATCGAAAACGAGCTGATTATGATTTGTTCAAT
-TATATGACACCGCTATTGTAATGGTTGGTTTGTTGCGTGGAACATCATAC
-CTTTACATCGTTTAAATACAAATTATGAAGAATGTCTACTTGATCTTGGG
-TCGTCGGCTGCACCCTCCATACTGTGAATTTTCTGAAAAATCGAGAGTTT
-ACCGGCTTTTGGGGGAGATTTTACCATTGACTTTTGACTTTTTGGAGAGA
-TCTAAATCTAGTAGATCATGCGGCGGTTAGGTCTATTTGAAATAAAAAAT
-AATTGATCTAGATATGAAACATGGAGATCTAAGGGTTTTGGTAAAGTTGA
-GTAGAATTTTTAATTATTTTTTTGAAAATTTGTTTGCAACATTTTACAAA
-AAAAGACGAATAAATATTGACCAAAAAAATTTTTTTCAATAAAAAATGTT
-TAAAAATTAACCACCTTTTAGCTTTTAAAGGTGGAGTAGCGCCAGTGTGG
-ATTTTGTCTAAATACACTTATTATGAACCAAAATGGTCAAATATCATAAT
-AAAACACTTCAAAAAATTTCTTTATTTCAGATTTTTCATAATTTCTGGCC
-AAACTTTTTGCAAATTTCCAAAATTTTGAATGTCGCAGTTTCCGACCCCT
-ACAATGTTTTAATACAAATAATTGAAACAAAATTACAGAATAAAAAATGT
-AGAAAAAAAATTTTTTTTTTGGTCGACTTCCAAAATTATGAGTGGCAAAA
-ACTTTGTAATTGTCACTTTTTGACAGTAAATAAAAAATTTTAAGAATTTT
-TTTGAAAAGTTTTATTATGATATTCGGTCATTTTGGGACCAAATGAGTGG
-TTTTTAACAATTTTCCCACTGGCGCTACTCCCCGTTTAAAGTTCTATGCT
-TTTTAAAACTCACGTTTTTTTTTATGAAGTCTATTTTAAAAAATCTGGAC
-TCTCAGTGGACAGTTCAGCATTTTTCGAAATTTCAGAAATTTAAAACATA
-AGTCGGAAGTGGTCCTAAAACTTCAAAAAAATTCTCACAATATGTTTTTT
-TGATGAAAACAAACTTATATAGTGCCAAAATGACCAAAATTTTTTTAAAA
-ATAATATTGAAAAATCTTTAAAAAATCTCTTCTGGTTTTTATTTATTTTT
-AAAAAATTCATATTGAAATATTATAGTGCTTTAGATTGCTCGGAAAAAAT
-TCCACAAATTTTTTAATTTTTCATAAGTTTTATAATGATATTTGGTCATT
-TTAGCTCTCTCGGGTAATATTGCAAACCCACGTGGTGCCAGGATTTCCCA
-TTAAGGTTTGATCTACAAAAAATGCGGGACTTTTGCTTAAAAAGATGTGA
-CGTCAGCTCATTTTTAACCATGCGAAATCAGTTGAAAACTCTGCCGCATT
-TTTTGTAGATCTACGTAGATCAAACCGAAATGAGACATTCTGACACCGTG
-TCCACCTTCAAAGTTAGTAATTGCATGAACAAAAAATTCTGAGAATGCGT
-ATTGCACAACATATTTGACGCGCAAAATATCTCGTTGCGAAAACTACAGT
-AATTCTTTAAATTACTACTGTAGGTCGATTTGCAGGCTGGATTTTTTGAA
-AAAAAAATGAATTAAAATTTAATGGAATATTTCTATCTCTATGTATTAGA
-AAATAAGGCCCGTAATGAGACGAGCGGGCCTGCCTACCTGCCTGACTATA
-GAAGGCCGCCTTAAAATCAGGCAGGTAGGTTTTAACGCCTAGCCTACAAT
-AAACATAAAGAGAAATGCCTAAAATAACAATAACTTTCCATTATCCTTTC
-TTATCGTCCTCCCCGGCGATCGCCTAAGATCATAGATAACAACTAGCCGC
-TTTCGGTCATGCAATTATTATATTATAATTGATGGATGGATGGGGGATAA
-TCCAGAGAAAGGGGAAAAAGAAACTTAGAATCCTAGAAAACAGGTTCCCC
-TGACTCAAACAAAAAAACCTACTTTTGATGTGCCAACACGGATGGCACGA
-CGAGACCGATGAGGACGATGATGTTCATCATCATCATCTTCATCGTAGTA
-AAACTTGGGGGGTGATGAGGGGCAAAAGGATGCCCTCCGCGCGTCAAGTG
-TTCGTTGAACAATCCGACGCAGACGGTTAAACAAAGCAACACAGTGGTGT
-CTCCGCCCAACTTCCGCGCGTCCGCCGCCGCCCTGTGTACTGTCTTGTCC
-TATCCTATCTCTCTTTTCTCCACCCCGGCTTGTGTGTGAGATTCTTCTCA
-TTACTAGAAGAAGGTCTCTAGTAGAAGAAGAAGAAGAAGAAGAAGACGAC
-GATGGAGAAGAAGCTGAAGGCACGACGCACTGTTTGCGCAACGATGTTTG
-TTTTTGCGCGCGCGAGCGCCGCATTTAAAACGTGTAAATCGGTTTCAAAA
-GCGCGCGCGCGCGGTCTTCTTTCTCCGCTTGCGCGCACGCATTGACAAAA
-AACCGAAAGGTGCAAAAGTGAAGAGGCCAACTACTTTCGTCCTCTTTGAG
-CACCTAATTGTGGAAAGCTTTTGCTCTGATGTGAAATGAAGTTGGGTAAG
-CTATTCCTGTCTGGGTGATGTTTTCAACTTCCGGGGGCATTGTTGGGAAA
-GTGAGGACCAAAATAGGCCATAAAAAATGAAGATATACATGCTTAGGCTT
-AGGCTTAGGCTAGGCTTAGGCTCAGATTCAGGCTTAGGCTTAGGCTTAGG
-CTTAGGCTTGGAATTAGGCTTGGCGTCAGTGGCGAGCGTGAGCTCGCCAC
-TGACGCTATTTAAGCTTGGGTTTATAGCGTTTTTTTAATTTTTCAAAGGG
-TTCCCGTCTGCCGATCAAAGCGAAATTTAACAGAGAGTCGTATAGGCCGC
-CAAGAAGCTGAAGTTTCAAATTGATTTCATTAAAACTCGCTTAGGCTTAG
-GCTTAGGCTTAGGCTTAGGCTTACGTTTTAGCCATATGCTAGCTGATCCG
-GAACATATTTTTAAAAATTGCAATATTTGACCAAAAGCTGTATTTTTCAA
-AAATTCAAAAGTACGGTGAAATCATATGAAGTGCTTCTTTTTCTTTCATT
-AAACTGTTCAGAATTGTCATTTTTACTAGAAAATACCAAAAAAATATGCT
-AGCTTGACCGGAACATATTTTAAAAAATTAGAATTTTTGACCAAAAGCTG
-TTTTTTCAAAAATTGAAAAGTACTGGAAAATCATATGAAGTGCTTCTTTT
-TTCTTTCGTAAAACTGTTCAGAATTGTCATTTATACCAGAATATATTAAA
-CAAAGTATGCTACCTAATCCGGAACATTTGTTTCCAAAATATTTTAAAAA
-AAAGATTTAGCGGCTCTGACTAAATTGTTTGTTCGTTTTTTCTGGACCCT
-TTTTTCCCCTTTTTTTGGGTGAAAAATTTTGTAAAAAATTTGACCGAGGT
-GTAGAGTTGAATTCATCAATTTTTGACATTTTTTGAGTACGGGCACATGA
-AAACGAAATTTCCAAAAACGCTTATTTCTCGGGATATAGTTCAATTCTAC
-CAAATTTTTCTTTGCAAATCTGCTAATTCTACAAATCTACTAACCGAGGT
-GTAGAGTTGAACTCATTTCCAAAAAGAAGTAGCAGTCCTGAAAATGTTTT
-AGTGAGTCTTCTCATTACTCTAGAGCCCGAGCCAGTAAAATTGCTCCAGA
-AGTAGTAATTTATAAATTTTTGATGATTTTATGCTGTCCAATGATAGAGA
-AATTGTTAAAATTTTCAGATCAAATTGGAATTTTCACAGCCAAATATTTT
-GGAAAATTTTCCACAAAAAATTGGGCGGAAAATTGGAATATTAATTCGAT
-TTAATTCGATTTGGAGCAGTGTATAAATTCAAAGTTTCCTCCCTTAACAG
-CCATTCAAATGCACTTTTTTCTTCGTTTAGTTTTTCTTATATATGGCCTC
-CAGGCTCTCACCAAGTTCCGTTTTACCGGAGAGTTTAAGTGCAAACATAA
-ATTCCTGAGATCCCATGTTGTAGTTTATGAAGACGATGAGGTGTTGTGAG
-TAGAAATGAAAAATGAGAAATGTTGTATTTAATATTATAAATTGTTTCAG
-CGACAACGTTATCAGTAAACACCATTACGTGTTCCATACAAATGCACCAC
-ATATGTATCTCGTTGAGGCTGAAGATACCAATGACGGATTGCCAAAGTTT
-TTGGATGTATTACTTTTTAATTTCCCGCTTTTTCTCTAGTATTTCTCAGA
-AAATTTGAATTTCCCGCCAAAATTTTTTATCAGAAAATTTGAATTTCCCA
-CCAAAATTTTTTATCAGAAGATTTGAATTTCCCACCAAAATTTTTTCTCA
-GAAAATTTGAATTTCCCACCAAAATTTTTTCTCAGAAAACTTGAAATTCC
-CGCCAAAAACTTTTTCTCAGAATTTTGAAATTCCCGCTAAAAAATGTTTC
-TCAGAAAATTTGAAATTCCCGCTAAAAAATTTTTCTCAGAAAATTAAAAA
-TCCCCGCCAAAACTTTTTCTCAGAGAATTTGAATTTGCCGCCAAAAAATT
-GTTTTCTCATAAAATCTGAATTTCCCACCAAAATTTTTTCTCAGAAAATT
-TGAAATTCCCGCTAAAAAATTTTTCTCAGAAAATTTGAATTTCCCGCCAA
-AAAATTGTTTTCTCATAAAATCTGAATTTCCCACCAAAATTTTTTCTCAG
-AAAATTTGAAATTCCCGCCAAAAAGTGAACATTCTAGGAGTTTGGCAGTT
-TACCAAAACCTTGACTGACCATTTTGGAAAATCGAATAACCTCTTAAATA
-AAAACTCTAACTTGTAAAAATTTAAAAATTTAAATATATAGCTTTGCAGT
-CCTATTTCGAGTTATACATGATCATCGTCCACGATTGCACGGATAATGGG
-AAATACAAGTTGTTGACAGTTGACTTGGGATCTTATTATATCAAGGATGG
-GTAGGTACTTTCTACAGGGCAGGCTAGGGCTTCCATGGGAAGCAGGAGCG
-GTTTGCCGGCTTCTCGCCTGATTCCTGCACTTTGGCAAAAAGTCAAAGCC
-TCGATGCTCACACATAGGGCTGGCATATTGGACGTCCGGTTTTTTGAAAT
-TTTAAATTTTTCCGAGAGGTAGTTTTTTTTGTACGGCGGCCGACAATTTC
-CGAGTTTGGCCACTCATGATAAAATTATATGATTAAGTATAGTGAGTGGC
-CAAACTCGGAAGTTGTCGGCCGCCGTAAAAAAAACTACCTCTCGGAAAAT
-TTTAACATTTCAAAAAACCGGACGACCGGACGCCCAATATGTCAGCCCTA
-CTCACACCAAATAGTACTATAAGCGGTTTTTTTTGCCGCAGCCGACACTT
-TACGGTTTCCACGCCGCACTGTACAGAAGGCGCGGCCCGAGGCAGTTGTC
-AGGCGTTTTGGCGCCTATATGCAAGCTCTAGGGCAGGCATTTCTGTTTTC
-AAAAAAATGAATATTTTCAGGCAGTACGATGAAACACGCAACATTGATCT
-GAACAATGCCGGTGAATGGACAAACGAAGTAATCGGAACAAAGGCGATGG
-TGATGTCCAAGATATTTATTTTCAATGTTTGATAAAATTGTTCATCAATA
-TTCGAGCCTACCTGCCTACCTGCCTACAAGGTAGCCTACATATATTATTT
-TTCCTAATTAACAAAAATATAATTAAAACATGATTAAGATTTTCTGAAAA
-TGAGCAAAAAGTGTTTTTAACTTCCACTTTTTGCCCAACAGGTTTAAGAT
-AGGCATGTGACAAAGCCTACATTCAAGGCAACCTACGCCTGCCTCGGTAC
-ATGGTGCATCGACCAATATTTACCTCTTAGCTTCGAGAGCTTATATCTCG
-GTTACATTTTGCTCTATCAAAAAATGGCCAACTGAAAAACTGTTCTCCAA
-TGCTTTTTCTACAATTTTGTGGTTAAAATTTTTTTAATATCTTGAAAACT
-AGCGAAAATATAAGCCACCAAGTCGCGCGCCGCCCCCCGAGAAAGCAATT
-CCAACCCAAGTTTATTGCAATAAAAACCAGTAGAAACGAAAGAAATGAGG
-TTGATTTTGGAGACTTTTCAGGTGACACGGGGAGCTTTTACATTGTTGGC
-ATTATTCAGATTCGATTGAGAAGGAGAAGTCGTGGGGAGGCTGAAAAATG
-TTCTAAAGTTGTTGAAAAAAAAAACAAATCTGCATTTTTTAAAAACCTGA
-TTCTTAGACTTCCATCCATTGCCATAAGTGCACAGAACAGTCTGTTGCTC
-TTGCTCTTTGTGCTCCGTGTCCTCGGAGCCATCATCAACCTTGTCTGGAA
-CTGTCGGTGTTGGCTCAGTTGACGGAGCAAATGAGGAGGATGGTGTCGCA
-GATTCTTCAGTTGGTTTGGGAGATGATGGCGGAGCTGGCTGAGGTGGAAT
-TGGAGATGCTCTTTTTTTTGGGGTTACTGCAGACTGTTTGCTCTTCAAAC
-TCTTGCTCCGCGATTTTGTGCTCTTTTTTGTTTTCTTCTTTGGCTGCTTT
-TGTTGCTTCTTGCTTTTTATCTGAAAATTAGAGTTTCTAGGCAATCAAGC
-GATTTTCTAGGCCACCAGACATATATTTAGCCATGTCGGAATTTTCTAGG
-CCATCACAGACAGTTCTAGGCCATATAGAAATTTTCCTAGGCCACCTAAA
-ACTTTTCTAGGCCACCAACAGTTTTCTATGACCGCGATTTTTGCTAGGCC
-ACCAACAAAAGCAAATAACACATTTTCTAGGCCACCAACAGAATTTCAAA
-TTTTTCTAGGCCTTTAACTCACATATTTCACAATGGAAGCGGCGGCGAAC
-ACGATGAAGGCTACAATGAGAATGCCAATAATTATGAATATCACTACTTT
-GGTCCATGGCGTCGATGATGCTGCAAAAATGGAGGTACAAATATGCAAAC
-GCGCTCTACCGCACTACCAGTGCGGTAGAGCGCGTTTCAAACTAACAGCC
-AGAAGTTGGCGCCGGTGGTCGCTGAGTGGAGGTGGACATTATCAGGAAAT
-GAATGAGAAAATGGAGAAATTTGGGAAAATTGATTAGAGACGTGGGATTT
-TTTTTTAATTTTTATAATATTTTTGAGTAGGGGGAAGGGGTGAGGGTCAC
-GGAAAATACCAAAAATTTGTGATTTTTCCATTAAATTGGAGCAAAATTGA
-CACCATACCTCGTGGCCTAGAAAACTGCAGAATTTCTAGGCCACACACGT
-TACGTCATAATTTACCTGTTAAACCAGGTAACCAACAATCAAATCAAGAG
-TAATTAATCATCTCCTATCTTCTTTTATTTCTCCGTTCCTACTCCCAATG
-TTTTTTTTTTGTAATTTGTGATCACAAATTGTTGCATTTTGTAGTACGCC
-ATGTACGTCTGTGTACTACTTTTTTCTGAAAAGAATACAAAAATGTTCGC
-TTTCAGGAAAAAATAGTGAGAGGTAGAAGAAAATTACGGGGACTAGAAAT
-ATGTAAAAGTTCGACAACGTAGGCAGGTAGGCAGGTAGGCAAGTAGGCAG
-TTAGGCAGGTAGGCAGGTAGGTAGGCAGGATAGTAGGCTGCCAGGCATAA
-TAAAGATGCAGGCACGTAGGCGGATGTTGCAGGCATGAGAAGTCACGGGG
-GTAGGCAGGCATGTGGGTATGTAAGCAGATGTAGGTATGTTGCAGTCATG
-ATGAAGGCACGTGGGTAGGTAGGTAACTAGTTAGGCTGGTAGGGAGGTAG
-ACAGGTAGGCAGGCAGGCAGACGCGTAGGAAGAGTTAGCCAGGATGCAGG
-CACGTAGGCAGATGTAGGTATGTTGCAGGCATGCTGAAGTCACGTGGGTA
-GGCAGATTGGTAGATGTGTACGCAGAGTAGGTATGTTGCGGGTATTATGA
-AGGCACGTGAGTAGGTAAGCAGGCAGGTAGGTAGGCAGGCAGGTAGGTAG
-ACATGTAAATATGCAGGCATATACGTAGGGAGAACAAGCCATAATTCAGG
-CACGTAGGCAGATTTAGGTATGTTGTAGGCATGATGACGTAACGTGGGTA
-GGCAGATAGGCAGGTAGGCAGGCTCGTAAGCTGGCAGGCATAATAAAGAC
-ACATAAGCAGGCATGTAAATCTGCAGGCAGATACGTAGGAAGAGCAAGCC
-AGGATGCAGGCACGTAGGCAGATGTAGGTATGTTACAGGCATGATGAAGG
-CACGTGGGTAGGCAGGTAGGTAGGCAGCCAGGCAGGATCGGAGGTTGGTA
-AGCATAAAAAAGACAGGTAGGCGGGTAGGCAAGCATGTAAATGTGCAGGC
-AGATACGTAGAAAGAGCAAGCCAGGATGCAGGCACGTAGGCAGATGTAGG
-CATGTTGCAGGCATGATGAAGGCACGTGAGTAGGTATGCAGGGAGGTAGG
-TAGGCAGGCATGCAGGCACATAGGCAGATGTAGGTATGATTCAGGTAGGC
-AGGCAGGTAGGAAGACTGAATGCAGGCGTGTTGCTAGGCAATAGCGCCCT
-TTCCTTGTTATGACAATCTCGATAATCTAATAATAAGCTATTCAATCATA
-TCACTGCGCCGATACACAAACTACCTGTTTTTTTGAGTATGCGTCTCGTC
-CCGTCTGCCCAAAAGCTTCTACAGAGTGATTAGACGGTATAAGGGGGAGA
-GATAGGATAGATTTCAATCATTCTCACTTTTTTCGTCCCTTTCTCTGTCT
-TCCTTCTCCCTTTTTTTACAGGGCGCTTTTCCCTTTTTCGTGTGTGTGAA
-GAGAGAGAGTGCATACAGGTGTAGAGGACGCCCAGACATCGAGACGGAAC
-AGGATTCTTCATCGTCTTCAGCTATTTGGAAGAAGGAGTAGAAGGTGACG
-GTGTGTGTTTGGAGACGTGTAATCATCATGTCTTATAACACTTCCTTGCT
-CATTTTTCTCTGCTTCTCTGCCGTCTCTCTATCCACACAGTCTTTCGCCG
-TTTATCGATTATTACCCAAATCACAGACGGATTTTCAAGCTATACAGAGG
-TTATACAAAAATGCGACGGATCATGATGTGAGTTTTGTTTTCGCATTTTT
-GAGCAGATACAATTTCTAGGCCACGAAAAATTTTTCTAGGCCGTTGAAAA
-AATCACTAAGTTTTCTAGGTCACAATTTTGAGCAAGTTCTAGGTTATTAG
-ATTATTACGCCATGGTGCATTTTTCTAGGCCATCAGGAAATTTTGCAGGC
-CACCATGAGTTTTTGATGCAGTTGAACTAAGTTAGTGGCCTAGAAAAACC
-TTTGTTAGCCTAGAAATATTTTCGCCGGCCTAAACACATTTTTGGTGGCC
-TAGAAACACTAACTTTTGGTAGCCTAAAAATTTTCTGTGACCTGGAAACA
-TTGTTGGTGGCCTGAAAACATTTTTGGAGGCTTAGAAATATTCTTGGCAA
-TTTGAAAACATTTTTGGTGGCCTAGAAATATTTCTGATGGCCTAGAATGT
-TTTTGTGGTCTATAAATAATTTTGGCGGCCTAAAAAAATTTGGAATGGCT
-TAGCAAAATTTTTTTGGTGGTCTACAGCCATTTTTAACGACCAAGAAACA
-TTTTTGGTGGCCTGAAAACATTTTTGGTGGCCTAGAAACATTCTTGGTGG
-CCTGAAAAAACATTTTCGGTGGCCTAGAACCATTTTTGGAGACCTGGAAA
-TGTTTTGGTGGCCTAGAATATTTTTGGTGGCCTAGAATATTTTTGTTGGT
-CTAGAAATATTTCTGATGGTCTAGAATGTTTTTGTGGTCTATAAATAATT
-TTGGTGGCCTAGAAATATTCTTGGAGACCTGATAACATTTTTGGTGACCT
-ATAAATATTTTTGACAGCCTAAAAATTTTCGGTGGCCTAGAAATATTTCT
-GATGGCCTATAATGTTTTTGTGGTCTATAAATATTTTTAATGACCTAGAA
-ACATTTTTGGTGGCCTTGAAACATTCTTGGTGGCCTAGAAATGTTTTTGG
-TTTCCTAGAAACATTCTTGGAGACCTGAAAACATTTTTGGTGGCCTAGAG
-ACATTTTTAATGGCCTAGACACATTTTTGGTGGCCTAGAAATGTTGCTGA
-TGGCCTATAATGTTTTTGTGGTCTATAAGTATTTTCGGTGGCCTAAAATA
-TTTTTGGTGACCTAAAACATTTTTGGAGACCTGGAAATGTTTTGATGGCC
-TAGAAATATTTGTGCTGTGCTGAAACATTGTCGGTGGCCTAGAAATATTC
-TTGGAGACCTGAAAACATTTTTGGTGGCCTAGAAAAATTTTTAGTGACCT
-AAAAACTTTGGGAATTACCTGGAACCAATTTTGGCGACCTAGAAAAATTT
-TCCGTGGCCTAAAAATTCCCAATAATTAACAAATTTTTAGTTAAACTTCT
-GGAAAACGGGCAAGGACAAGCACGGGTTTTGGGATGTGATGGTGGATATG
-AAGAATTCGAAATATTTTTTGGACTTTCTACAAGTAAATGATATTTCTTA
-CATAAAGACGATTGATGACGTGGAGGGGTGAGCTTTTTCTGAAATTTTGA
-AAATTACATAAAGAATATGTGCTCTATTGATAAACTGTTAGGATCACCGT
-AAATCGACAAGAATCTCCGTAAATCCACAACGGCCCCATCTCAAAAATTC
-CTAGGCCACACGTGTGACGTCATTTTTCTTCCAGATTAATAACAAAGCAC
-GAGAACAACAAGACCCTCTCGAACATGTTCCCCCGTCTGTGGGATGACTC
-CTCGTCTGCTCACTATGACTTCCACACCTATGGATCCTATCAGCGAATGA
-CTGATTGGATGAAGCAGCTGGTGGTGAAGTATCCAAAGATGGTTCAGTAT
-ATATCGATTGGAAAAACTACGGAGGGCAGGAATATCGATGGAGTTGAGGT
-AGGTCTAGAAGGCTGCCTTAGGTCTAGGTCTAAGTCTAGGTTTAGGTCTA
-GGTCTAAGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGG
-TCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTC
-TAGGTCTAGGTCTAGGTCTAGGTTTAGGTCTAGGTCTAGGTCTAGGTCTA
-GGTCTAGGTCTAGGTCTAGGTCTAGGTCTATGTCTAGGTCTAGGTCTAGG
-TCTAGGTCTAGGTCTAGGTCTAGGTCTAGATCTAGGTCTAGGTCTAGGTC
-TAGGTCTAGGTCTAGGTCTATGTCTAGGTCTAGGTCTAGGTCTAGGTCTA
-GGTCTAGGCCGATTTCGATTTCTATGTGTATGGCCTATAGTGATTTTCAG
-ATCGGCGGAGACTCCCGCACCAAAAAGATTTTCTGGATCGATGGAGGTAT
-TCATGCTCGAGAATGGGCGGCCCCGCACACGGCTCTCTTTTTCATCCATC
-AGGTATGTGATCCCGCCCCGTCAGAAAAAAGTGTGTTCCGATTAGTTCCG
-CTTGGATTACACAAATGTTGGCAGAGACAGAAAAAGGGAAAACTTGATAA
-CAAATGGGTTGGAAAAAACGTAATCGGATGATGCAATCGCGCTCTATTGC
-ACTACCTCAACAAAACATTTTTTTGCAGCTTACCTCCCGCGCAAACGAGC
-CCGGAATCAAGAAATTGCTGAACGAGATCACATTTGTAGTGGTTCCCTGC
-TTGAATCCAGATGGCTATGAGTTCACGAGATCCTCCACAAATCCACATGT
-AGGTTGGGGTAAGGTTACTGTACCCCCCCCCCCCCCCCTCCCCAACTCAA
-AGGCGCAAGCACTCCCAAATTTTTTGCAGGTTCGTCTGTGGCGTAAGAAT
-CGCTCGAAAATGCAATGCCGTAAGGACATTTGGGGACGCAATCGCTGCTG
-TCGCGGTGTCGATTTGAATCGTAATTTCGATTTCCACTTCAGAGGTGAGA
-GAGAGAGGGTGAAGTGGTTTTTCTCAAAGTGGACTTGAAAATTAAGGGTC
-AAAGTTTTAAAAGAAAACTTTGAAAAAAACTTGGGAATTTGTTCACGAAT
-ATACGAAGTTGCTGAAAATTTGTAAAACGTTTTGGAACATTCTAAAACTA
-TTTGAATTTAAATAATTTTTTAAACATACCAAAAAATCATGGATGTTCTC
-AAAATTCACGAAAGTTTCGAAAATTCCCTACAGTACTCCTGAACTAGCCC
-TACAGTATCCTTAAAGTACCCTACAGTACCTATACAGAACTCCTGTAGTA
-CCCTTACAGTATCCCTAAAGTATCCCTACAGTACCCCTACAGTTTCCCTA
-TAGTACCCCTACAGTACTCTCGCAGTATCCATACAGTAGCCCTACAGTAT
-CCCTACAGTACCCCTACAGTATTCCTACAGTACCCCTACAGTAGCCCTAC
-AGTACCCCAGTAGCACCCTTACAGCATCCCTAAATTATCCCTAAATTATC
-CCTACAGTACCCCTACAGTACCCCTACAGTACCCCTACAGCATCTCCATA
-GTACCCCTATAGTAGCCCTACAGTATCCCTACAGTTCCCACACAGCCCTT
-ATAGTGCCTATACAGAACCCCTATAATACCCCATACAATACACCTACAGT
-ACCCCTACAGTATCCGTAAATTACCCCTATAGTACCCCTACAGTACCCTG
-ACGGTACTCCTACAGCACCCCTACAGGACCCCTATAACATCCCTACAGTA
-CCCCTGCAGTACCCATACGGTTTCCTTACAGTATCCCGTGAGTATCCCAA
-CAATACTCTCACAGTACTGCTACAGTACCCCAAAAGTACCCCTACAAAAC
-CCCTACAGTACCCCTACAGAACCCTCACGGTACCCTACCGTATCCCTACA
-GTACCTGAAGCTCCAAAAATTTCCCCCACTTCCAGAAAGCGGTACAAGCG
-ACGACCCGTGCTCCGAGATCTACCAGGGACCCTCTCCATTCAGTGAGCCC
-GAGGCAAAAGCCGTACGGGACGCGTTGTTGTCGCAGAGATATAAGGGAAG
-AACCGACGCCTATATCACACTACACACTTATTCACAGGTACTGTTAAGCA
-GTTGAAAACTTTTTCTCGGCCACCGATATTTTCTCGGCCATCGATATTTT
-CTCGGCCATCGTTATTTTCTCGGCCACCGAAATTTTTCGCGGTCATCGAT
-ATACTCTCGTTCACGGATATTTTTCCCAGCAACAGATTTTTTTCTCGGTC
-ACCGATATTCTCTCGGCCACCAAAATTTTGTTTTTCGTGGCCATCTATAT
-TTTCATCGGCCATCTATATTTTCTAGGCCACCAATTTTTTCTCGGTCTCC
-GATACTTTCTCGGCTACCAACTTTTTCTCGGCCACCAACTTTTTCTCGGC
-CACAGATTTTTTTCTCGGCCATTAATTTTTGACGGCCACCGAAATTTTTT
-CGGTCACCGATATTTTTCACGGCCATCGATATTTTTTGAAAATTTGATTT
-GAGCAAAATATTTTCAGATTTGGATTCATCCATATGGTCACAAGAAGGAT
-GCATATCCAGGAGATATTAAGGATTTGGTGAGTGATGACGTCATTCTTCT
-TGAAACGTTGAAACTCAAATTTCCAGTACGAAGTTGGCAAAAAAGCTGCT
-CAGGCTCTGAAACGGGTTTACGGCACAAAATACGTAGTCGGAAGCGGTGC
-GGACACGCTCTACCCGGCGTCTGGAGGATCTGAAGATTGGGCAAAGCACG
-AGGCGAAGGTCAAATTTGTGTACCTTCTAGAATTGAGGCCCGACGAGAAA
-AGTAAAAAAAAAACGTTCAAAGTTGCTGAAAAAAGTTGGGCGATAATTTC
-AGACTGGGATGGGTTCATACTGGACGAGAAGGAGCTGATCCCGACGGCTC
-GGGAAACTTGGGAAGGTGTCCGAGTTGTGGCGGAAGCTGTGCTCGATCGG
-ATAGTTGCCGGCAAGTCGACGGCTCCAAGAGGTAGGCAAACTTTGATGTG
-CCTGCCTGCCTTGTGCCTACAGTTTTATTACGAGTAGGCACGGAGGTAGG
-CAAGTAGGCAGGCAGAAATGTGGACCGATAGGCGTAAGGTTAAGGGCTTG
-CGAAGCTTTTGCGTAGGATTGCGAAGAAAAAGAAAAATTTTTAAATTACA
-GTGCGCACGGCCTAAAGGAGATGGCTTCTGAGGTAGTCACTACGATGCTC
-CGCTTGCTCTGACCACGCCCCTTTCCTGGTTTCTCGATTTTTGTTTTAGA
-AATTACACTTGTTTATTTTATGATTGTTGATAAATGTTTTTTTAAACATA
-ATTTTTCTTGAAAAAACAACTTACAATTAGAGAAAATAGCAGCGAGCGGT
-CGTGGCCGCGAAATGAAAAACTCGGCCACCAGCTATAAAATTAAAACGTA
-TAATAATTTGGTGGTTCAGTTTTGCAGAAAAAAAATGGCTGGCCGAGTTT
-TCACGTTTCTAGGCCATCTAGCAAAGTTGCTCTGAAGCGCTTTCGCGAAT
-TCGTTTCCGAAAAAACTGTAGGTGAAAACTCGACCACGCTTTCTTAAAGC
-CACGAAATTTTGAAATAATTTCTCGGTCACCAATTTTTTCTCGGCCACCG
-ATATTTTCTCGGCCACCGATATTTTCTCGGCCATCAAAATTTTTCTAGGC
-CACCAACTTTTTCTCGGCCATCTATATTTTCCCGGCCTCCGACATTTTTT
-CTCGGCCACCGATATTTTTCGCAGCCGTCTATATTTTCTTGGCTACCAAT
-TTTTTCTCGGTCTCCGATACTTTCTCGGCTACCAACTTTTTCTCGGTCAT
-AGATATTTTTCGCAGTCATCTATATTTTCTCGGTCAGCGATATTTTCTTG
-ACAACCCATGTTTTTCTCGGCCACCGATATTTTTCTCGACCATCTATATT
-TTCTCGGCCACCAAAATTCATTCTCGGCCACTTATATTTTTCTCGGCCAC
-CAATATTTTTCTCGGCCACCTATATTTTCTCGGCCACAGATTTTTTTCTC
-GGCCATTAATTTTTGACGGCCACCGACATTTTTTTCGGTCACCGATTTTT
-TCTCCGCCATCTATATTATCTCGGTCACCAATTTTTTTCGGTCATTGATA
-TTTTCTCGGCCACCAATATTCTTCTCAGCCATCAATATTTTATCGTCCAC
-CGATATTTTATCGGCCACCGAAATTTTTCGCGGTCATCGATATACTCTCG
-TTCACGGATATTTTTCCCAGCAACAGATTTTTTTCTCGGTCACCGATATT
-CTCTCGGCCACCAAAATTTTTCTCGGCCACCGATTTTTTTTCCTGGCCAC
-AGATATTTTTCTCGGCCTCCGATATTTTTCTCGGCCACCGATATTTTTTC
-TCGGCCACCAATTTTTTTCTCGGCCTCCGAAGTTTTTCGTGGCCATCTAT
-ATTTTCATCGGCCATCTATATTTTCTAGGCCACCAATTTTTTCTCGGTCT
-CCGATACTTTCTCGGCTACCAACTTTTTCTCGGCCACCAACTTTTTCTCG
-GCCACAGATTTTTTTCTCGGCCATTAATTTTTGACGGCCACCGAAATTTT
-TTCGGTCACCGATATTTTTCACGGCCATTGATATTTTTTTCGGTCACCGA
-TACTTTCTCGGCCACAAATATTTTCTCGGCCACCGAAATTTTTCGCGGTC
-ATCTATATTTTCTCGGCCTCAGCCATCGATATTTTTCTGGACCGTCTAGT
-TTTTTTTTGGCGGCCGTGACCTCCAAATAGAATTACAAAAATAAACGATA
-CATCTCATATTTCTGTGCAAATCCTCAAGTACCCCCCCCCCCCCCCCTAT
-ATTTATTGTTCCAGAAGCCCCAAAAGCTCGCGGATTCCGATTCGGCGACG
-GCACCGAAGGATCATGTTTCGATGTCCGACACGCGTGCAAACGATGGGTT
-CAGGAACGGGAGGAGCTGTGCAGGACGGTGCCAATTTTCATGCGCGAGAA
-CTGTGCCTACTCTTGCAATTTCTGTTGATTTTTTTGGTGTGCCACTTCTT
-TTTTTCTGTACATATATCCATTTTGTCTTCTACATACATATATATATGTA
-TATGAAATGTTTAAAAACCTAAAACCTAAAAAAAAACCAACCTAATACAG
-TGTTCACGAGCGCCCCCCGCCGCCGGCGGCTCCTTATTTGCCTTGTGCTC
-ACCGTGAGGTGGCTCCGCGCGGGAGCCCCAGTGATGAGCATCTCTTTTGT
-CCACACGAATAATACAATAACACGGGCTCCTCTTCAAATATGACAAAATG
-TCAAATTTTGGCGTCTCTCCTGACTTGGAGCTTCTGGGTCTTCAGACACG
-TTCTTGTGTGTGAGGCGAGATGCGATTACCCTCTATATTATTGATTTTTG
-GAGCATTTTTTGGTTTTCTAGGGGCTATTCATAATACAGATGATAATGCC
-GGCTATCATAAGTAAGTCCCCAAAATACCCATATGGCCTAGAAATTCGGA
-AAACTCTTCCATTTCACTTTTGGTAGGGACATTTGGTTTCTGTGCTAGCT
-TTTATGCTGAACATGGTAATTTAAATTTCCTAGGCCAGTGTATATGTTTT
-TCTAGGCTACGACATACAATTTTTTAGGCCACAAAATATTTTTTTTTAAT
-TGCGGCTTATAAAAATGTTCCATAAATTATCTATTTTTGAATTACAGTCT
-GAAAATTTCCATTTTTCAAGGGCACCTTTCTAGGTCACAAAAACGGATTT
-TTTCAACATAGGCATTTTTCAACTTTTTCTAGGCCACGACAGATGGAAGA
-GCTTTTCGTAAAAAAAGCTCGGCCACCACCCCACCTAACCAAAAAACTTC
-CAGCTTCAAACTAATCCGAATCAATCCGGAAACTGAAGGAAGTGTGAAAT
-ATCTTCGAAGTCTGTACGAGGATCCCTCTCCGTACGAGCTGGATTTCTGG
-CAGCCTCCTACGAATATCGGTTAGTGTGACTTACCCACGTGATGTTAGCG
-TGCTCCATTTTAGTTTGATCTACGTAGATCTACCAAAAATGCGGGAGAAG
-AGACGCAAAGTTCTCAACTGATTCTGCATGGTTAAGAACGCACTGACGTC
-ACATTTTTTGGGAAAAAAATTTCCGCATTTTTTGTAGATCAAACCGTGAT
-GGGACAGTTTGCCACCACGTGCTTACCCAGGAAAATCTGAAATTTTTCGA
-ATTTTCAGGAGCTATCGTAGACTTGACAGTTGCTCCGGCGGATGCTCCAA
-GATTTGTGAAGGATTTGGAATCGAAGAAGATCAGCTACATCGTGGCGGTT
-AATGATTTGTCAAAGTTCGTTTTTTTTTCTAGGCCACGGCCATCTGTGAC
-GTCACTAAACTAGTTTCCAGAGCAATCGAAAACGAGCGCGGAAGCGACAA
-ATTCTACAACCCGGTCGCTGGTTTTGCATACGACAAGTACAACAGTTTGG
-AGGAGATTCAAACAGAAATGAAGCGGCTTAAGAAGGAATACCCGACCATG
-ATCACGCTTATCGATATCGGACAAAGTCACGAGAATCGTACGCTTTTGGT
-GATGAAGGTAAGAGCGAACGCGCTCTATTGAGTGGGCGTGGTCACGTCCA
-CGTTTTGCAAAGTGGGCGCACGGTTCCTTTACAGCGGTCCCAGCTTTTGA
-AGTTTTGAGTAATTTTTATATGGGAATTGCTAAAATTCATTTAAAAAAAA
-CCCAAAAATACTTTTAAAGTCGTAACGAAAAAAAACAACCGTGCGCACGT
-CTTGCAAAAAGTGGGCGTCCCAAAATTTAAAAACGACGGAATTTCATTAT
-TTCAAACGCTCCAAACTCATTTTCACTACAAAGACATCACGCGCCTCCTG
-GGAAAGCCCTTACTCATTTGCTGGATATATGACGTCACTAAATTAGTAGA
-TGTGTGAAACCGCGCTCCATTGTACTACGCAACACCGATCCCACGTGGTG
-TCAAAGTGTCCCATTTCGGTGTGATCTACCATAAATGCGGAAATATTGAC
-GCGGATTTCTAAACAGATTTCGCATGGTTAAGAGCGTGCTGACGTCACAA
-ACTTTTCTCTGCAAGAAATTCCCACATTTTTTGTAGATCACACTAAAATG
-GGACCGTTTGACGCCACCTGCGCTCTCACTTTCAACACTCCCATTAAGCA
-TTTCATGTACGCGCCAAAACGCACGGATTTCTGGCTCCCCTCATAAATTG
-AAATGGAGTTTGAAAAAGAGTTTGCCGAACTAGGTCATTTTGGCTCGGCC
-ATATTTGGGGTAGATTTTCGCCGCGTTGCGTGTCGCGTCGCGGCTCAATT
-TAAGTTGTAAATCTAAATGTGTTTGTCCGTGTGGAGTACCCGACTTTTCC
-ACGCGTTGCCCGGAATGCTATTGTCGATGGAGCGCGAAAAATTCAATAAG
-GAAGGCCAGAACCCCGTGAAAACGCCTGCCGCGCCCCCGCCTGCCTTGCA
-GCGCGGAACCCAAAAAGTGTCGGCCGCGGCGAAAGGCCCTCGCACTATGT
-GGTGTTAATACCTAGCTATTGACTTATCGCCATAGTGTAAAAAAACCCAA
-ACTCCCAAATTTTCAGATAACCGGAAAACGAAACCCCCTCGGCTCGAAAA
-TCTCCATGTGGATTGACGCTGGAATTCATGCTCGAGAATGGATTGCTCCG
-GCGACCGCAATGTACATTGCTCATGAGCTTCTCCTCGGGTATGAAAACGA
-CGCGACGGTGGCTAAGCTGATGGACCATATCGATTTTTATATTCTACCTG
-TGATGAATCCAGATGGATATGAGTATTCCAGAGAAAAGGTTGGTTTTTGA
-ACCTTAAAAAAGCCTTAAAACTAGTGCTCTATTTCAGAACCGCATGTGGA
-GGAAAAACCGGAGCCCCGCAAAATGCGCCCGGCAAACTTTCAGTACGGTC
-TGCTGCTCTGGAGTCGACCTCAACAGGAACTTCGATTGGTTCTGGGCCTG
-TAAGTCACGTGGTGTGAGAAAGTCTCATTGAAGTTTGATCTACAAAAAAT
-GCGGGAATTTTTTGTAGATCAAAGCGAACTGGGACTTTCTGACTCTACGT
-AGTTAGCTCAATATTAGACCTTAAAAAATAACTTAATCTTAAAAATTTCC
-AGCCACCGGTTCGTCTTCGGATCCGTGCCACGACACGTATCACGGCTCGG
-CGGCCTTCTCGGAGCCTGAATCACAAGCTGTCAGGGATTTCCTGGAGCAA
-AACACACCCGAGGCGTTCATCTCGCTGCATTCCTACTCCCAAATGTGGTT
-GATACCATATGGACACAGAAAACAGAGTTATCCACAGGACTACCATACTG
-GACTGCGGCCATTGGCTCTGCGAGCAACTAAGGCGTTGTATGAGTTGTAT
-GGGACGAAATATCAAGTCGGGACCGGCGCTGATTTGATGTGTAAGTTAAT
-ATCCTTTTTTTCGAATTTTTAAATTTCTAAGGATTTCAAGAAATTTTAAA
-ATTTTGAAAATTAAAAAAACAATTTTTTTCGGAATGTTTAAAAATTAAAA
-AAAAAATTTTTTTAATAGATTTTTTAAAGCTTTTTTTTGGAAAATTTTGG
-ATTTCTGAATAATTTTTTTTTCAGAACTGGAATTTTTGAGTTTATTAAAG
-ATTTTTTTAGGACTTTTTAATTTAGACATTTCCTGAAAAATTTTTAAATT
-ATTAAAATTTCGAACTTTTTCGATATTTTCGGATTTTTTTGCAACCTGAA
-TTTTATTTTTTTTTTGGATTTATTGGAATCAGGGGTGGGCAGCAAGATTT
-TTTCCGGCAAATCGGCAAATCGGCAATTTGCCGGAATTGAAAATTTCCGC
-CAAATCGACAATTGCCGGAATTGAAAATTTCTGGCAAAACGGCAAATCGG
-CAAACTGCCGGAATTGAAAATTTCTGGCAAACCGGCAAACAGGCTAATTG
-CCGATTTGCCGAATTTATCGATAAATCAGTTTGCCAAACGGCAATTTCCC
-CCACCCCTGATTGGGATCTTTGAAATAAAACAGGAAGAAATTTTAAATTG
-TTGGAAATTTTGTAATTTTCCGGAATTTTAATAAAAAAATGCTGAAAATT
-CTAAAAGTTTTGGAACTATGTAAAATTATTTGTGATTTAAAAAAAAACAT
-TTTTTGGACTTTTCTGAAATTTCACGGATTTCTGGCTTCTCTCATAAATT
-GAAATGGAAGAGTTTTTGCCGAACTTGGCCATTTTGGCTCTGCCATATCT
-GGGATGGATTTACGGCGCGCTTCATGTCGCGTCGCGGCTCGTAAAACTAA
-ATGCACTTGTCCGTGTGGAGTGAGGAGAAAATTCAATGAGGAAGGCCAGA
-ACCCCGGATTTTTGAAATTTTGAAGTTCTGAGAAACCTGTGACTTCTACA
-CTAACCCTGAAGAATTTCAGACGAAGCTTCTGGAGGATCACATGATTGGG
-CTAAGGGGCAGCTTAAGGTCCCCTATGCCTACCTGATTGAGCTCCGACCA
-AAGAACACCATGATGGGGTAAGCAGGACGATGGATCCTATCAAAATTAAA
-ATTTCATTCCAGCCACGGCTTCCTTCTCCCCGAACGAGAAATTGTGCCCA
-CTGGACTGGAAACCTTCGAATCCATCAAAGTGGTTGCCGACGAGCTTGTG
-GCGCAATTTGTGGAACCTGTGATTCGAGCCAAGCTGACCACAACCACAAA
-GCCCGCAATCCCACCGTATCGGCGTGGGTACTCTATAATCGACACCACAA
-CTATGGAGCCGGTCGATGAGATTACACAGAAGCCTACAGAAGCTCCAACC
-ACAGAGGAGCCCACCACCACTACTACGGAGGAACCTACAACTACCACAAC
-GACCGAGGAGCCTACCGAAGCCCCAACAGAACCCAGTCCGACTACTGTCG
-AGGCCACCGAGGCTTCTACAACACCAGAAGCTTCCACATCCTCTGAGACA
-AGTACCACAGAGAATTCTGAACCCAACCAGAAGACATCCACACCAGTGGC
-ACCTGAAGCAAGCACCGTTGAGGAGGTTGGTTTTTGGCTTAGTCTCAGGC
-TTAGGCCTAGGCTTAGGCTTAAACTTAGCCTTAGTCTTAGACTGAGGTTT
-AGGCTTAAGCTTAGGCTTCAGCTTAGGCTTAAACTTAGTTTTATCTTAGG
-CTGTGGCTTAGTCTTAGACTTAGTTTTAGGCTTAAGCTTAGGCTCAGACT
-TCGGCTTAGGCTTAGGCTTAGAATTAGGCTTAGTTTTAGGCTTAGACTTA
-GTCTTGGGCTTAAGCTTCGGCTTAGGCTTAGTCTTAAGCTTAGGCTTAGG
-CTTGCACTTGGGCTTGGCGTCAGTGGCGAGCGTGAGCTATTTAGGGTTTT
-ATGCTTAGCTTTAGACTTAGGCTGAGGTTTAGGCTTAGGCTTCGGCTTAA
-GCTTAGGCTTATGCTTAAGCTTAGGCTTGGACTTAGGCTCATACTTAGGC
-TTAGGCTTAGGCTTGCACTTGGGCTTAGGCTTAGGCTTATGCTTAGTTTT
-AGGCTTAGATTTAGGTTCAGGCTTAGGCTTATACCTAAGCAAATACATTT
-TTGGAACTATTTGGATATTTGCCAGCGACCTATTTTATCAACTTCGAATT
-TCCCAAACCATTCCAGGAAACAATCACACCGATCAAATGCGTCGACTACG
-GTGACTACTGTCGTCTTTGGGGAGTCTTACAGCTCTGCTATCGGGATCAG
-GTCTCCAAGTTGTGCCCCAAGACTTGCGACTCGAGGTGCTCTTTTTCGGT
-GTGAGGCGCACGCTGGAAACTATCGTATGACAAATTGTCAGCTTATGTAT
-GTATAAATGATTTCAAACTTTTGTAATTGTGGACTAAAAACTACATTTTT
-CATGCCTGACTGACTGCCTGGCAGCGTGTCAGCGCCCGACATTTTCTGAG
-TTCCACGACGGGATCCTGGCAGGCGTAGGCGTGCAATTTTTAACTCATCA
-AATTGCTTGGAATAATTAAGCACTGCTACAAATGATGTCACTAGCTACAA
-ACTACAAACTAGGAATTTCACACTACAAACTACAAACTACAATCTTAGCT
-CTTCAAGCTATGAAATACAAACTAAGAAATTTTTATTTTTCAATATTTTT
-TAAACGAGGTGTAATTATGGGCGTATATAGTAAAAACTGGAACGACAAAA
-TGCAAATCACAAACTACAAACTAGAAACTAAAAACTAGAAACTGCAAACC
-ACAAACTACAAACCACAAACTACAAACTACAAACTACAAACTACAAATTA
-CAAACTACAAGCTACAAACTACTGAACTCTGAATAAATTTGAACGTGTAA
-ATTTTGCGTTTTTGTGCAATGATTGGACGTATGAATTGCGAAACCATAAG
-TGTTTAATCACATACTACAAACTACAAACTACAAACTACAAACTACAACC
-TAGAAACTACAAACTACAAACTACAAAATATAAATTACAACCTTCAAGAA
-ATTTGTATTTTTCAATATTTGTCGAACAAGTTTTAATTATTCGACGAATA
-AAGTCAAAGCTGAAATCATAAAATGCTAACCACAAACTACAAACTACAAA
-CTACAAACGGCAAACTACAAGCTACAAATTACTGAACTCTAATAAAATTT
-GAAAGTGTACTCATGGTTTTGTGCAATTACTGGACGTATGAATTACGAAA
-CCATAAGTTTTTAGTCACACACTACAAACTATAAATTACAAACTACAAAC
-TACAAATGAAAACTACAAACTACAAACTGGAAACTACAACAGCAAACTAC
-AAACTACAAACTACAAGCTACAAACGCTTATATAATTCGATTTTAGTTAT
-TTTCTGTTTTTTATTTTTCCAAATTCTCAAACCTGAAATAAAATTACCTA
-CACACAAATGTTTCTCATTATGCATCGAATGACTAATATTTTCCAATAAA
-CGTTTTGAAAAAGTATGGAAGAAACAAAAAATGGAAAACAAAGGCGGAAA
-TATGCATTTTTCTTCTCATTTTCTTGAAATTCGTGTGATTGTACTTATTG
-ATTTTTTGTTGTTGTTAAAAACGTGGTAGGCAGGCATTCATGCCTACGTG
-CCTGCCTACCAGTCGAATTCGAACCCGCAAGATGTCGGCCGCTCCCTTCG
-ATTTTGGAAGTTTTTACTTATTTTCCTCTTCTGCTAACACATTAGACAAT
-TATTATTCAACCCGTGTACACAATAGGGCGGCTAATAATTAGGTTGGCAG
-GTAGAGGTGTACAGGAAACGTTTATAAGCTCTTTATTTACTACTGAGCTA
-CCACTTATTTGGAGCCAATGCATTTTGTTTCTCAACAAGTTGGAGATTCC
-AGAACAACCAAGATTTGGGCGGGGCTTATTTTGAGGCAATTTTTCAACTG
-TACAGTAGATTCATATAATTTAAGTTTTGAAAACATTTAGGCGGGAATTC
-AAACATTTATTTTTAAAACCATCTTGGCGGGAATTCAAATTCTAGTTTTT
-CGAAAACACTTTGGCGGGAATTCAAAATGTTATTTCTTAACAACTTCCTG
-AAATGCTCTAGAACCTTCTGGAATATTTGAGAAAACTCTAGAATGTTCTA
-GAACCTTCTGAAAAATTCGAAAAAAGTCTAGAATGTTCTAGAGCCTTTTG
-GAAAATTCGAAAAAAATCTGGAATATTCTAGAACCTTTTGGAAATTTTGA
-GAAAATTCTGGAATGTTTTGGAACCTTCTGGAAAATTCGAGAAAATTCTG
-GAATGTTCTAGAACCTTCTGAAAAATTTGAGAAAATTCTGGAATGTTCTA
-GACCCTTCTGGAAATCCGAGAAAATTCTGGAATGTTCTGGAACCTTCTGG
-GAAATTTTTAGAAAAATCCTGGAATTCTCTAGGACCTTCTGGAAAATTTG
-AGAAAATTCTTGTCGCCAAAGTTTTGTGAAAAAATTTAGCTGGAAACTAA
-ATAATTTTGTGAGAATTCAAACTTTAATTTTTCCAATTTTTTCGGATTTT
-TTTTTTAGCTTTTAAGCTTTTTACATTTTCTATAAATTTTAGATTTCAAA
-AAAAAATTGGCGAAAAATTTTGACCAAATTTTTTGGCTTTATAGCATAAT
-TTCAAAAAGTTTAAAAAGTCCAAACTTTGCTCCAGTCCCCAAAAAAAAAT
-TTGGTGGAAAATTCAAATCATGTTTTTTTTTCAAAAAATTTCATGGCCTA
-GAAATTTCAGCAAAGCAGTAAGGCCGCCTACCTCCCTTCAATCCGAAAAA
-TACCTAAAAATCAATCCCAAGCAATTAGTCTCATCAAGAAAGAAAAGAGC
-TCTGCTTGTGCCCACTCCTCATCTCTTCTCATGTATTTGCTTTCAATTAA
-ACATCTTACTCAGACAGCATAACGAAGGAAACAAAAAACGAAAGAATAAC
-GAAATGAGCATATTTCCTTTATTTATTCCTTATTTATGTATTCAGGTAGA
-ACAAAAAACCGGCTCGGCGGGTTTATTTGTCTGTAAATCTTATGCCTACA
-CGCCTACCTACAGCGGCCCTGACTGCCTATTTGCCTAGTGTTTTTTGTCC
-TTTTCGGTTGGTTTTTTTGAAAATTTTTCCTGATTTTTTTTGTCGTTTTT
-TTTCCATTTTTCTGAATTTTTAGGAATTTATGGAAGTTTCTCTTTTTTCT
-CCCCCCCTCGAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC
-TAAGCCTAAGCCTAAGCCTAAGCTTAAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCTAGGCCTAAGCCTAAGTCTAAGCCTAAGCCTGAGCTTAAGCTTAAG
-CCAAAGCCTAAGCCTAAGCCTACTCCTATGCCTGAGCCTAAGCCTAAGCT
-TAAGCCTAGGCCTAGGCTAAAATAAGCTCGGCCCCTTTCTGGGCCAAAAT
-TTCATGTACCTCCTAAAATTGTTTCATCCTAAATAGCCAAAAAACTTGGA
-AAAATCTATTTTTCAAATTTTGTAAAAATGTCAAAGAAAAATTCTCAGAA
-GTGCGGGAAAGTTTGACCCAGAAAGGGGCGGAGCCTATTTTTGGATAGGC
-TCCACCTCTTTCTAGGTTTTTTAAAATCAAATTTAGGTGTTTCCTGGTAA
-GTTTTAGTGGTTTCATTTTTTGTATTCATCACATTTCTTTTTCATTTTTT
-ACATTTTTCTCATAATTAATTTTTGATCTACCTGTTGAACTTGACCCCGC
-CCCCCAATCTTGGTGCCTCAAAGGAATCGGAGGAGTCTAGTCAACAAGGT
-AGATCAAAAATAGAATATGAGAAAAATTTGCCATCGTGTTTTTCGATAAT
-ACTACAGTTTCATACAATAATCCCACAACTTAAAATTCAGCAAATAACCA
-GGAAATGGGCGTGGCTTAGATTTTCAAGGTTTCGTTGTTTTTTCCAGGTT
-GTACTTCTGATCTGAACGGGCTCCGACAAAAAATGCACAAAATTCGTAGT
-AGTGATGTGTGACGTCTGTTCTGATGACTCGAATTCATATTATAAAAGTC
-GAAAAATTCCTTCCGAACGAACCCCCCATCATCCTAACATCATCCAGATT
-TCTGCACCCGCCCGCTCATATAATCTGCTTTTCTTCACCCATAATCTTTT
-TGCTTATTTCTCAATCTCCGTCTTTCTTGCGTTTTTAATTAATTCAAGAA
-ATCAAGCAGTTGTGGTTAATGGCGTTCTACGAATTGCTTTTTTCTTGTAT
-TATGATATTTTAATTAATTTTATTTATTTAGTATCTAGGCATGTACATGT
-GCAAGTTGAGTTGAATAACCTGAAAATTTTGTGCCAAGTTATGGGCGGGG
-TCTTTCATACATTTTTTAAATTGTTTTTTGGCTAAATTTGTATGTATTTG
-CTTTGAAAGTTGTGTTTTTTTTCAATTTTCTTTAAAAAAAAACCAAAAAA
-AAAAATTGGTATGTAGTAACGTAGGTAGGCAAGAAGTAGGTGTGTAGGTA
-GGGACTTGAAAATAGCAGCTATGAATAGGTGCGGTATTTGAAGTTTAGGC
-AGGTTCGTAGGCAGATAGGTGAGTAGAAAAATCATTCAGAAGACATTCAG
-GTAGGCTCACTGGTAAACAGGCATAATGTAGGTACGTAGGTTAACACTTA
-CGTACGAGGCAGTAGGCATCAGGGCTTTGTGGCAACCGGCAACCGGCAAC
-CAAAAACCAGGTTGCCGGTTACCGAAAAATTGCCGAAATTTCAGCAACCA
-AAAGTCGCCAGAATTTTCTCGAATTTTCCAAAAGGTTCTAGAACATTCCA
-GAATTTTCTCGAATTTTCCAAAAAGTTCTAGAACATTCCAAACTTTTCTC
-AAAGTTTCCAAAAGACTCTAGAACATTCCAGAATATTCTCGAATTTTTCA
-GAAGGTTCTAGAACATTCCTGAATTTTCTCGAATTTTCCAAAAGGTTCTA
-GAACATTTCAGAATTTTCTCAAATTTTCCAAAAGGTTCTAGAACATTCCA
-GAATTTTCTCGAATTTCCCAAAAGATTCTAGAACATTCCAGAATATTCTC
-GAATTTTTCAGAAGGCTCTAGAACATTCCAGAATTTTCTCGAATTTTCCA
-AAAAGTTCTAGAACAAGTTGCAGAAATTTTCAGCGTACGGCAACTTCAGC
-AATTGCGGGTTGGCATGTAGGCAGGCAGGCATGTTAGTAGGCAGTTTTGA
-CAGTTTTGAAGTTAACAATCCTACCTGATGCACAAGAAAATGCGCGGCAA
-TTGCGGACCGGCAATTCTACAAAATGAGACGGTTGGGCATGTTCTTCCGA
-TATTTTTTATAAAAATTTAATGATAAAGTATAGAAAAATATTTGTTTTAT
-TTGAAAATAAGTTTTATTTGGCTAGGAACAACCGAAAAAGTGCTCAAAAA
-TTGTCGGAATCTTGAAAATTGCCGTGAAAATTTCCAACATTTCGACTATT
-TCTGGAGATTTTTACAATTTTGTCTATTAAAAAAAAACAGTTACTTTCAA
-ATAAAGCAAATATTTTTCTATATTGTGTCATAAAATTTTAATGAAAAATA
-TCGGGGGAACATGCCCAACCGTCTCATTTTGTAGAATTGCCGCGCACCTT
-GTTAGTTTATCCCCGTAAACCTCCAATCAATAATTGGCAGGAGTCCTTCC
-GTCCGTCCAAAACGTCATAAAAACTGGAGATGGCAAAATTGGAGATGTGC
-CAAGTTTGCTGGAGAGGTGGGGGGAAGGAGACAATCATGTTGTCTGCGTA
-TCTCCAGACTCGTCTGCTATCTCTCTTACCCGGCAAATGGGACCTCCCCA
-GAACGGTGATTTTGTCCTTTCAACACCTTTTTTGTGTTTTTGTTTGTTTG
-ACACCTTTTTTTCACTACTTTGCGGGAATTTAGACTGATTTCTCATGGTT
-AGAAACGTGCTGACGTCACATTTTTCGCGGGAAAAAAAACCCGCATTTTT
-TGTAGATCAAACCGTAATGGGATAGCCATTCTAACAATTCACTGTTTTTT
-TTCTGAACAAGTCTGAAGTTTTGAGTTCAGCACCCGCAATTCTGTCTCTG
-ATAAGTTTGAAAGTTTCAAATTGAAACCTCTCAATTGTCGGACCAGCGCG
-CTACTTCATCATACCCCGCAAATTGAACTGCTCGCGGCAAAATTTAAAAA
-TTGATGCTTCTCCAGAAACATCCCACCAGAAACTACCTAAGACTGAACTT
-CATTAACTTCTTTTAAACTTAAACAACGATCATAATACCTTAAAAAAAAC
-GTTTGTACGTGGTGTCAGAGTGTCTCATTTCATTTTGATCTACATAGATC
-TACAAAAAATGCGGGAGAAGAGACGCAGAGTTTTCAACTAATTTCGCATG
-GTTAAGAACGTGCTGACGTCACATTTTTTAAGACAAAAAATTCCCGCATT
-TTTTGTAGATCAAACCAGCCTGGCACCACGTGCGTTTGTAATCGTTCAGT
-AGGTAGGTAGACACAGGTCAGTAGGCATAGGCAGGCGGTAGGTCTGAGGT
-AGGTGTTGTTGACCACCACGTAGCAAAACATGCTTGACGACTAGCCTCAA
-ACGGATAATCACAAAGTTCTACGTAGTTATGATTTCAAGCCGCCCAATGA
-GCACATTACGCTGACTAAGCCACAGCTATAAGACCCTCCTCCGAGTATAT
-TCATCACCAAACATCCAGTTTCCAGTTTTGCAGTCTTTTTTTCTGTTGGA
-AAATAAAGAGAGTACATCTCATTAGACATTAATGAACAATTTCAAGTTCA
-AAACTATAAATATAAATAAAGCTAGTAATTGAGCCAGTCCAACCAAATTT
-CCCACAAGTTCATTATAAACCTTCCAATTTCCCAATCCCATGTACTCCTA
-CTAATCAGTTTCTTTCCTTCCGCCCTACTTTCCAAATTCATTTATCCGCT
-TTGCATACTTTTCGGTAATCTTGACGATTTTCAGAGGTTTCTAGAATTTT
-TTATTTTTTCAAATTATGCAAAAATAAATTTTTTTTTGTATTCTCAAAAA
-ATTGCTAAAATTGTCCAACTTCCCATTTCTCGGAAATTGACGTAATTGCA
-GTTTTTTGAATTTTTTTGAAATTACTGATTATCAAATTTTGTTGGAAAGT
-TTCCTTTCACCTACACACCTACCATATGCCTATCTGCCTAGGTGCTTACC
-TACACGCCTGCTTCGTGCCTACCCGCCTACCTGCCTGGTTTATTTTCAAA
-AAGTGCAAAGAGCCAAAAGTTTCGAATTGTCAAAATTGCTCGGAAATTTT
-TTGAAATTTTGGAAAATGCCAAAGTTATCAAATTCCGCATAATTCCAAAA
-TTGGCAGCCCGACATCATGCCTGCCTACATTCCTGTCTGCATATAGGCCT
-GACAAAATGTCCATCAATGTATGTACCTATTTCATACCTATCTACCTGTA
-TAAACATAGTTCATCTCTACCTCAAACAGCATGTTACAGGCTTTCTTCTT
-ACCTACCTACTTCATTAACTGCTGTTTATTGACCTGTCTACGTGCCTACC
-TCATGCCTGGCATGCCTACATACCTACCTCATTTATCAGATCCTCATGAA
-GCCTATTTACAAGCCTACTTCCAGCCTACCTATTGTGTTGATTACGATCA
-CCGTCTCTAGGTTGCCTAACCTGCCTAATTGTGTCTACCTACTTAGCTAT
-CTCATGCCTGCCTACTAACCTGCTCAAGTACCTACTTCATGCCTACCGGC
-CTACGTTCCTACCAACGTGCCTACCTGCCTGCTCACTAGCCTAAGTGTCT
-GCCTACATAAATTGTCCGTTAGCACATCAAACTTTTCATATATACAAAAA
-ATTGCATAAAAAGAAGATAATCATTAATAACAAGTGGGTAACTCAAAAAG
-GAAATTGGTTTATCTCCCGGCTCCGAGAGCACCAGCACTTTGCTTTTCCG
-TCACTACAACCTCTAATTTTGTTTTGTTCGAAGGACTTTTTCCGATACAT
-ACTAATTTTTTCGGATCCGGTTGGCTCTGGATTTCAAGTTTTATAATAAC
-TTGGGCTCCCAGTGACGTCACCAAAGGTGCAATTAGCCTTTAGTAACTAA
-ACAGCTTGCTCCTAGTTTACTGCTCCGTCTTCTCAAATGAAACAGAGAGA
-GAGAGACCCCTCATCGAAAATTCAATTAAACGCTAAAACGTAGGTAGGAA
-AGAGAGAGAGAGGGAGACTCCTCCCAAAAAAAAAAGACAGGGGGGCTCTC
-TCTCTCTCTCTCTCTCTTCGAGCGGCAAATCGGCTTCCGAATTCATTCAA
-AAACAAATTATGTGCTCAACCACCACCACTACCACCGGCTCCAGGCGGGT
-AATTACACTTGAAAACCAAGTACTAGGTTTCGTGGCCGGGCAAACTTTTT
-CTTATTAGACCCCGGTGGAATTTTGTAGGTCTATTTAAAATTGCAATTGC
-GCTATTTTGTACTGTTTTTTTTTTGACAAACTTTGAAGCTTGATGTCAAG
-CTGGAAAAGCGCTCTAATGACAATTTTGACTGCAAACTCGCTCTGTTGAT
-AAATGGTCCGTGTACTCCACGGGGGCAATTAAACTGGATTTTTTTCGATT
-AAATAATATCTTGATTTTTTGCAGTTTTGGCTTAGGCTTAGGCGTAGGCT
-TAGGTTTAGTCTCGGGCTTAGGCTTATGGTCAGGGTCAGGCTTAGGCATA
-GGCTTGGGCTTAGGCTTCGGCTTAGACTTAGGCTTAGGCTTAGGCTTATG
-CTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCT
-TAGCCTAAGGCTTAGGTTTAGGTTTAGACTTGGGTTTAAACAGGCTCAGG
-CTTAGGCTTAGGCTTAGGCTCATGCTCAGGCTTAGGCTCAGACTTAGGCT
-TAGACTTAGGCTTAGGTTTTGGCTTAGTCTTAGGTTTGGACTTAGTCTTA
-GGCTTAGTCTCGGACTTAGGCTTAGGCTTAGGCTTAAGTTCAGGCTTAGG
-TTTAGGCTTAGTCTGAATATTTGGCTTAGCCTTGGGCTTAGGTTTAGGGC
-TTAGGCTTAGGATTAGGCTTTGGCTTGCCGGCCACCTGGGATATTGTGGT
-TTGACAGGGGTAGGCTATCCAAATTTTAAAAAAATCGGCTACAAAATTAA
-TATTTAGATGGGCCTATAAACCATTTCTCTAGGCCATCCTGCAAAATTTC
-CAAGACAAAAAATTTCAGCCGTGAATAAAGTTTCCGTTTTCCTAGGCCAC
-CTCCAAATTTTCCACGTCATATGTAAGGTATCGGAGGGTACTGTAGAAAA
-TTATCAAAAATCAGCAAAGAATAATAAGCATTAAGAAAGTTTTTTGTGTG
-TGTGTGTTTTTTGTGGGAGAAAACATTTCCCCTCTCCTTTTTTCCTGCCT
-GCTCATTTGGATACCACCGCTAACCCAACTTGACTTTGATTACCCATTTC
-CGTCCCCCTTCTTCGTCTTCTTCTACTCCGGGATAGAGAGAGAGCTCTAT
-ATAATTACTTTCGTCTTCTTGATCCGTTACCGCCCATTGGCAATTGGTTT
-GAGCTGCCGCCGGAGAATATATACATGCATGTCTAATTTTTTACTGGAAA
-ATCTAGGAATTTTTACGTTGAAAATTTGGTTAAAAGCGTACAGATCGGCC
-CATGCTGGTGATTGTACGAAATTTTAATTTCAAAGTATCTGCAGAGGAAG
-CTAGGCCACAAGCCCCTACGTGGCCGTCAAAATTGAAAACTAGGCCACCG
-ATTTTTTCTCGGACTTTTTATCTACTTTTGCTATTAGGCCCTGTCTTCTT
-TTTTGCAACGTTTTTCTACTAGGTCACCAAATTTTTCCTAGGCCAAGCTG
-CCTAAAACTCGGCCACCGATTTTTATTTGCGTCGGTCTGTAACATTCAGG
-CTCCGACCAGCTCGACTTTTGCTACGTGGTCGCCAATTTTTCCTAAGCCA
-CATCGAAAATGACTCGCTGTGACATTTGTACTTTTTTTCACACGGCCTAG
-AAATTTTGAAAAAAACTCGGCCACTGATTTTATCGGCCTTGGAATCCTAT
-GTAACTTTGTGGCATGATTTTTTATTTATTGTCCATCCAGTTTTTCGTCT
-GAAAATTACAAAATGTTTTAGTGACCGTTGGAGAAAACTCGGCCACCAAT
-TTTTTTCTCGGCCAAGTTACCAAATTACGGGATACCGTGTTCTCTATCAT
-ATTTCTGGCTCAAAACATACTCTACTTCCGTGCTGCCTACGTGGCCGCTC
-AATTAGAAAACTCGGCCATCATTTATTTTCTAGGCCATGTCGAAAATAGG
-TAATGTAAATAGGCAAAGAAATGCGGTGGTTCAAGTAATTTTGGGAAATG
-GATTTTAAAAAGTTGAAAAAATAAATCAAATGAATAAGTCTGAAACACGC
-AAACCTTAAAGCTAGGCCATCAATTTTTTTCTCGGCCAGGTTGCCAATCT
-ACGGGAAACCGTCATGTTTCTTGCTCAAAATTACACCCTATTCTCGAAAA
-ATTTTTTTTACGTTGAGTATGCTCTCCTGCCTAGGTGGCCGCCCAATTAG
-AAAACTCGGCCACCCATTTTTTCTAGGTCATGTCGAAAATAGGCGATGTA
-ATGGGGTAGTTCAAGGAATTTTGCGTAATGAATAACCCCAAAAATGTTTT
-CAATATATGGCCGCCAAAAAAGAGAAAACTCGGCCACCAATTTTTTCTCG
-GCCAGGTAGGCTACCAATCTACGGGATACCGTGCGCTCCATCCTATCTCA
-GGCTCAAAATTACGCCTTTTTTCTCGAAAAATTTTTGCATACTCTCCTCC
-CGTGCGGTTCTTAATTAATGAAAGACGTTTTTTTTTCTCCTTGTCTAACG
-AGTGTATATGCAGAATTCAGGATATGCGTCTTCTTTTCCGAGTTCTTGTC
-TTCAAAGCGAAAAAAAAAGTGTGTGTGTGTGTGGACATAGGAAGACTCGT
-CTTCGAAGAAGACGCTCATTAGCTCATTTCATCCACTCGCTAATTTCATT
-AATTTTGTGCTTCTTCGCCTGCCTTCCGACGTGTTTACCCACACCACCAC
-CACCACCACTCAGTACCTCCTCACTCACCGTGGAGAAAGATGTTCTGGAT
-TTTTTTAAGCTTTTGAGTTTTGTGTCCTACCTCACTTTTTAGGCTCCACC
-CACTTCTTGGCCTGTTATTTCGGTTTATTAGAATTTGTGTGGTGTACTAC
-AAATTTCGATCCGAAAAATGGCAAAAAAAATTCAGCTGACTGAATTTTTT
-TGAACTTTCAAAGGTTCAGTTTTTGCAACCTAAACCTCTCTTAACTTTAA
-CTTTTCAAACCCCGCCCATATCTTGGCTTTTCCAGAAATCCGAGTAATTT
-TTTGGGAAATTTATGGTACAACTAGCTATCAGAACAATTTTTACGGAAGT
-TTTTTTAATTTTATTTTAATTTAAGTCTACTGAAATTGACCTAAAATATA
-TTTTGAAAAATGCTTTGATCCCGAAATTGGCCAAAAAACGTTGATCGAAT
-TTTTTTGAACTTTCAAAGGTTCCGTTTTTGCAACCTTTAAGCCCCGCCCA
-TTTCTTGGCTGTATTGTATTCAAAGTTAAAAGTTGTTCATGTTGTACTAA
-AATATGCAAGTATCATAAAAAATTAACTTTTTAAGCTCCACCCATTTCTT
-GGTTTTTCTGGAAATCCGAGTAATTTTCTGGGACTGTTATGGTACAATTA
-GGTATCAGAAAAAAAATCAAGGAAATTTTTTACTTGGATTTATGTCCACT
-GAAATTGACCTGAAAATGTTTTGAGATTTTAAAAAACTTAAATATTTTGA
-TAAAGGTAGAATTTGAATTCCCCGCCCATTTCTTGGCTGCAGTTCCCAAC
-TGTCCAACTTTTTGAATATTTTCTCAAACTTCATGGCCTAAAATTCCAAT
-TCTAGGCGATCTACCTTGATAAGAACTTACTCCTGAGTTATGTTTGAAAA
-ACATAGTCCATCCGTGGCCTAGAAATCCAAAACTAGGCCATCAGATTTTA
-GGTTCCTAGGCCCAATCACAAAGCCAGCAGTTTTAAGTTGTCAAATTTCA
-GTGGCATAACCTCATAATTTAGACCTATTCTATTAGGTCAGCCTATTACA
-GTTTCTGGCCTAGAAATTTTCCTTGAGTTTGAGCCCACTACCCCCACACC
-CACATGGCCTAGAAACCCAAGCCTAGGCCATGTGTCCCCGCATTCTCACT
-CACTTTTAATTTCTTAATCCACTTACACAATTCTCTCCCCCTTTTCCAAT
-TTCACATCGAACCCGGGAAAGCTCATTAGCTCATTTGTTGTGTGTGTGTG
-AGTTGAAGAAGCGGGGGGAAGGGGAGCCCCCCTTTTGAGTGGACGGGGAG
-CTAGAATGGAAAAAGAGAGAAGGAGGAGAGCCATTTTGAATGGGTATGCA
-ATTAGCAATCGATGCAAATTAATTAAACAAACAACGAAATGAAAGGGGGG
-GGGAGGGCAATCGCCTGCCTTCACTCACATGTCCCCTGCTGGAAATGTGG
-AAATGTAAATTAAAATTAGAAAACTAGCAAAAAAGTGCGTTTTTTATTCC
-TACTTGTTAATTAGTTTAAATTTCTATATATGTATGGCTTTGACATGCCA
-ATTTTGGCGTCTAAGGGTAGGTATAGGTGGGCGATGCACCATGTTAAATG
-GTCGATGCATCATGCCAAATAGTAAATGCACCATTACACATTGAAAATTT
-AGCATTATACACTCCATATAACTGAAATTCGGGGCCCAATCAATATCATG
-CCGCCGACATCTCACGGACTCCGCGCGCCGCTATGTTTAACTCGCAGCGG
-GCGGAGACAGCTGGCCGCGCCCACAACGAGTTAAACACAGCGGCGCGCGG
-AACTCGTCAGATGTCGGCGGCCTGATATTGGTTGGGTCCCGAATTTCAGT
-TTTATTATTTGGAGTGTATAATGCTAAATTTTCAGTGCACCGTGTTAAAT
-GGTCGATGCACCATGATAATGCTAAATAGTCCATGCACCTTGTCTAGAAA
-ACTCGTTGAGTACTGTACTTATGAAACAGTTTAGCAAAAAAAAATGTCAG
-CCTGTTTGGCTCCGCCCCGAAAGTGGGCGGAGTCTAATTTCTTGAATTTT
-TTTTTTTCAAAAATTGTTTTAAAAATAGCTCTGTGAATTCCACCTCAAGC
-AACTATTTTTAGTGGAAAGCAAATTTTTTCAAAATTTTGCGCAAATGGTT
-CTGAGGCTCCGCCTTGAAATTGGATGCTCTTAATTAAGAAAGAAGTGTTA
-GTCCCGCCCCTTTATTGGAGGAACTCAAAACTGGGAGGAGCTTAAGAAGG
-TTATAAAATTTTGCTAATTAAAACACCCAGCTCCGCCCACTTATATATTA
-GTTGACTCCGCCCCACCCATTAAAAGTGGGCGGAGCTTAAAAATATTGAC
-CACGCCCCTTTCTTGGGTAGTTTTAGCGTTTTTCATAGAGTCAATTTTCA
-CGGCGGACCCCGGATCGATGCACCATGATTTGACGCGCAACCCAGGTAGT
-ATGACGTCACTCGTGGCCGAACTCGCGGGGGAAATTTGTACTTACAGCAA
-TAAATTTCGGTGTCTCACGGAGCACCTGCACACGTACCGATCATGAGTGA
-TGCTTCCCACCACAAGACATACACATACACACACAAACCTACTAATTAAG
-ACAAATTATAGAACAAGTGGGGGGAGAAGGGTAGAAATAAAAGTGAGCAG
-TGCGAGAGAACGCGTTAGACGGAGAAGCTGCTCTGGGAGACGTGTGAGAG
-GCATATAAGTTGGATTAGTTTACTGCTCTTTTCATGGGAAAATCAAGTGA
-GCTCCAAATATTTAATCTGACTTTGATTTGGTTTGATTCTGAAATTTTTT
-TGGGATTTGCAGAAAAAATACGTTTTTTTTTTGTATTTTGGAATCGCACC
-AATACGCTGCGTTGCCCTCCTACAGTGCAACTGAGCCACATTTCTCTTCC
-ATAACTTTTTTCTTAATCTCAAAGATTAAAACTCTGCAAAAGCTCAATAT
-TTTATAAATGATAAGGATTAGCAAAGTGTGGGTGATCTTCCAGAGGGGGG
-ATTACCATAATTCATTACTCATTTTTCAAGTTTCATCTGTGTTTTGTTTG
-ATAACCTAGGTGACCTACTAGTTTACCTACAGGGCTGGGACCAAAAAAAA
-AATTTGGACCAAAAAACAAAAAAACAAAAAATTGAAGTTTTTGAAAAACC
-AAAAAAACCAAAAAAAAACAAAAAAAAACAAAAAAAACCAAAAAATTTCT
-TATGCTTAAGTTGATTTTTAATGGGGTTATTCAAGTAATGTTGCAAAATG
-TATTAAAATACATTATGACGTCACAACTGTGTTAAAATACATGTTTTAAT
-GTATTTTAATACATAATAGTCTCGAGTCGAGACTAGACATGGTAAACACT
-TTTTTGGATTTTTTTGGATTTTTTGGTCCCAAAAAACCAAAAAAAACCAA
-AAAATCGATTTTTCGTCAAAATACCAAAAAAAACCAAAAAACAAAAAAAC
-CAAAAAATTCTCAGCCCTGGTTACCTGTCAGCAAATAATTTTCCCCTATA
-TACCACCACTTCAGGAGTAATCAACACCCCAAAACGGCAATTATTTATTA
-TTCTCCTCACCTTCTCAACACTCCATAGCGCCAGCCAGCCTAATTTGATT
-GTTTAATTCGATTCAGGGCACCCCACCACACACAAATTTATTAATTTTTG
-TCTTTCTCGCCATTTTCCAATAATTTTCCCGGCTTGTGTTAGCTTTATTA
-TAGAACTTTTTAAAGCGATTTCTTAGGAATTTATGTGTGACGTCATATGT
-GGCCTAGAAATTTGACGATCTCGGCCGTCGGGGTCGATGAACCATGTTGT
-GATGTATAGGTGGCCTAGAAAATTTTAGGCCACCATGATAGTCGTGGCCT
-AGAAATTTGGGCGCCTTCAGGTGGCCTAGAATGTGAAAAGTGACGTGTGA
-CCTAGTTCTTTTGACGGTCAGGCCAATTTTCCAATTCGATGCTTTTTTTT
-TAATTAAGGTCCATATTCTGCAATTTTAGGCTCCGCCCATATCTTGGTTA
-AACATTTTTTTTTTGCTTTTTTCTGCAATATTCATTCAATCCATCATTGT
-TCTCAAAATTTGATGCACCATGATATGGCAGTGGCCTAGAAAGTGCGACG
-TCACTTATGGCCTAGAAAATTCGAGGATCTTGAAATGGGAGAAAGTAAAA
-AAGTAATCAATGCCCCCTGACGGTCGTGGCCTAGAAAGTTAGAAGATCTA
-GAGGAGGGGAGTAGGAGATCGATGCACCATGTACAGCTACAGTGACGACT
-CACGTGGCCTAGCTTTTTCGCAGGCCACGGCCATAAAAAAATGTATGAGA
-TCGATGCACCATGTTTGTCGCGGACTAGAAATCGAGAATGTGGCGCACGT
-CACGCATGGCCTAGTGACTTTTACGGTCAGGCCGAAACACAGGACGTGGC
-CTAGAAGTCATTCTGTTAGTCTAAGACTCTGCAAAAACTCTCAAAAAAGG
-TGAGCCTATGTGCCTGCCTACTTGCCTACATTCTTGCCTACCTGTTACTG
-CTTTCTAATCTGTACCATGTTGCACCTACAGTACCCCCTTCCGCCCCCGT
-AAAGACTTTTTCAAGCTCAAAAGTGCAGAAAACACAAAAAAACCAAGCCC
-AATCTACAAAAGCTCATCTATTCGTGCTTGGATTAAAATGCCATTAAAAT
-GATTAATTAAGAGATCGAGACTGGTTGAAAACTGATCGGATTAAAAAGCG
-ACTGAGGTCCGCGAATGAGCTTTTCATGCAACTGATGAGCACATTTCCTG
-TGTATGTACACTGATGATAAATCTCCTTATCTTTTCCGAGACATAACAAT
-CTCAATGTTCTTCATTAGTTTCTTCATTTCCTTCTGAAATTTGTTGCTTT
-GATTTATTAAAATCTGTCATTATGTAAGATCCATAATTCGTGATTCGAAA
-TTTTTTACAGTTTTTTTTAAATATAGAAATTTGAATAACTTTCCTACCAG
-GCTGCCCCAATACAGTTTGATCTACAAAAAATGCAGGAATTTTTTGCCCA
-AAAATATGTGACGTCGGCACGTTCTTAACCATACAAAATCAGTTGAGAAC
-TCTGCGTCTCTTCTCCCGCATTTTTTGTAGATCACCGTAATACAATGCAA
-AAATGAGAGAAAAAAATTTGAAAAAAAACCTATCCAAAAATTTGGCATTT
-TCAGATTTTTTTTTTCGAGCAGACCTAAAAATGTTTCGATAAATTCTAGA
-TTTTTTGAAAAACTGTCTGAATTTTTTTTTTTGAGAACAATGATTATATT
-TTAAAGATCAGTGTTGACTTGAATCATGTAGCGTAAAAAAGGTTAAAAAA
-AAACCAAGATATGGGCGGAGCCTAAAATTACAGAAATTGGACCGTAAATT
-TTTCAAAAAATTTTTTTTTTTTCAAAAACCGAAATTTTATTTTAATTTCA
-AAATTTCCGCTTCGGGGTTTCTTGATTTTTTCAATTTCAATTTCAATTTT
-TTAGATTTTTTCCCGTAAAAAACCCAAAATAAATTTACTGAAGCTTCACT
-ATTGGATTAAAAATTTATAAGGTTCTTTGCGGGAAAATTAGTAAAAAATC
-GAAAATATATTTTAAAAGAAAAATCAAAATTAATACAAAAAATTAAGGCT
-TCCATGTAGGTTCGCGTGGTGCCAGGCTATCCCATTATTTTTTCTTTTTT
-TTTTTTTTTCCCCAGGAAAGTGTGACGTCAGCACGTTCTTAACCATGCTA
-AATCAGTTGAAAAGTCTGCCTCTCTTCTCCCGCATTTTTCGAAGATCATA
-CCAAAATGGGGCACTTTGACGCCACGTGTAGACTGTAGGCCATAAACCGC
-CTGCCTGCCTGATTTTCAGGCTACCTACGCCTGCCTGTCGCCCCAATCCA
-CGCCTTATGCTAAAACACATTCATTTCTTAATTTGATTTTCACCAAAGTG
-ATAAAAAAGATAAATTAAAAATTAGTACATTCTCGTCAAAATGCAAAAAG
-AGTCGTAAGGCAGGCAGGTTTCAGGCAGGCCCTGGCTCACGCCTGCCTAC
-GATGCCGGTTACTAAATTTCCAAAATACCTTATTTACTCTACAAATCCTC
-TACCCCGACATTACATCTCAAAACTCATCCTATTAATTTCTGCCTTAGGC
-GATAGCACTACTAATTGATAGGAAAAGACGACTTGTGTGTGTGTGTGTTG
-AATTATTATACTAATTTGATTTTAGGCAGCCTCTTTCGTCAAAAAAAAAT
-AACTTGTGTCACCACACCACACCTCCCACGTTTTCGGTGAGTGAAGCTTC
-TGCTCGCTGTTAAGCAGATATTCATAGGGAAATCATCCGTAAATCCATTC
-AAGTCCTCTTTATTTTCTTCTTCTTCGACCAAATTAGTATACAGATGTCA
-TCAACTTTTTTGTTTCTTTTTGAGGGCCCAGGCTGTTCATTACAGTTTGA
-TCTACAAAAAATGCGGGAAATTTTTTTTTGCTTTTTGCCCAAAAGAATGT
-GATGTCAGCACGTTCTTAACCATGCAAAATCAGTTGAGAACTCTGCGTCT
-CTTCTCCCGCGTTTTTTGTAGATCTACGTAGATCAAAACGAAGTGGGAAA
-CTCTGACACCACGTGCTTTGAGAAAAAATTTGAAAAAAACCTTTTTAAAA
-ATTTGGCATTTTCAGTTTTTTTTCTTTACAAAATTTTTTTGAACGAATCT
-AAAAATGTTTCGATAAATTCTAGATTTTTTGAAAAACTGTCTGAAATTTT
-TTTTGAGAACAATGATGACTTGAATATTGTAGAAAATCGTAAAAATAAGT
-TTTAAAAAACCAAAAAAAAATGGGCGAAGCCTAAAATTACAGAAATTGGA
-CCATAAAAGTTTCCAATTTTTTCTTCACAACTTTTTTCAAAATTGCTGAA
-ATAAAAAAAAACTATTATTTAAATTTAAATTTCAGAAATCCTAATTTTGA
-CGCCGATTTTTAAAATTATAAGGATTTGTTTTTCCTGCAAATTCTTTTTT
-AGAAACTTACAGTTTGTCGGTTTGTCGATAGAGCGTGCTTATTCACCAGG
-CTGTCCATTACAGTTTGATCTACAACAGTGCGGGAACTTTTTTTTTGCTT
-TTTGTCCAAAAGACTGTGATATCAGCACGTTCTTAACCATGCAAAATCAG
-TTCCGCATTTTTTGTAGATCAACGTAGATCAAACCGAAATGGGGCACTCA
-GACACCATTTGGGGGGCCTAGAAACCGGTCCCTTTCTCATTCAAAGTGCT
-CTCTGTTATCAAGTCTCCCACGCTTTATGCATTCAACTTTGTACAGTTCA
-CACGAGCACCCACGACTTGATTATTCAACATTATACAGAACTAACTATTC
-GAATCTCAACATGTCTTCTTGCCGAATTTAATCAACTTTGACTTCTTCTT
-CTTCTTCGACTTCTTTATACAACTACTCATCTTCTAGTTGCCCCTCTAGT
-TGCCTCACACAAGCAAAATTTCTTTTGAAATGAAATTTAAACGAATTGAC
-TAGTCAAAATTTCATCAATTTTCTACTAGAGAGAAGCGACGAGATTGACT
-TTTGGCAAATATAGAAGAGAGAGGCACCGAAAATGAATTAGATTTAACAC
-AACAACGAGTAGATGAGTTGTGTGTGTCAACGATGATGATGATGATGAAA
-AGAGCAGAGGAGCAAGCATGAGTGATTTCTGCGGCGGAGGTCGCGGCGGA
-TGAGGAGCATGAAGAAGGCTAACGAGCTGTATGGCGATGCGGCTAAAAAT
-TGATGATTACTGTAGATTTGGAGCTTTACACCGTTTAACTGGCTACGATT
-ACATACAGACTTGTTTTAGAATATTCTGTATTTGAACCTAATAATACAAA
-TTGCCGGTGTGCCGATTTGTCGGAAATTTTCAATTCCGGCAACTTGCCGG
-TTTGCCGATTTGCCGTAAATTTTCAATTCCGGCAACTTACCCGTTTGCCG
-ATTTGTCGGAAATTTTCAATTTTGGCAAACTGCCGGTTTGCCGATTTGCC
-GGAAATTTTCAGTTCCGGCATTGTGCCGGTTTTCCGATTTGCCGGAAATT
-TTCAATTCCGGCAATTTTCCGGTTTGCCGGTTTTCCGTTTGCCGGATAAC
-AAAGTGTTTAGAGGGATTTTTTTATAAGAAGGAAACTCTTAAAACTGTGA
-CTTTTTGAAATTGTTTCCCGTTTTCTTTCGATATTTTCATAGATTTTGCA
-AGAATGCGTGCAGTTTTGCCAGTTTAGACGTAATTGAATTTCTGAAATTT
-CAAAAAAAAAAGAGCAAAATCATAAATTTTTGACATTTGTCATTTTTTCC
-GGTAATTTGGCGATTTGCCGGAAAAAAATCATTTACCGCCAACTCATGGT
-ACGTCTAACCGCAAAAATTTTTTGGGAGCCTTTTCTGGCTTTCTTTCAAG
-CTATCGTAATGTGACCACACACCTTTCTATAATTTTCAGTATTTACGCCA
-ACCGAGAAGATCACAGTAGTTTAAGGTTATGGTGCAGTTTCTGGTCAATG
-GATCAGGTCTCTTACCGCGAAAATTTTAATACCGTGAATGTGAAGCTTTG
-AAAATTTTCTGCCGTAAATTGTCAATTTTCTGCCGCACTTTGTCAATTAT
-CTCATAAAGGTCACTTAAGTTAGCCAAACCGTGAGCCAAAACTGCCCCTT
-ATTCCTCATGCCGTCTTGGAGGAAATCTAGAGCAAACCCTGGTCCATATT
-CGGACAAGGTCCCCTTTCTTCCCCCAAGCGTCTATCTAACTTTTCCTAAC
-TACATATAACGGAATTAATAATCCTATCCCCAATTTAACGTGTCCTTAGT
-TCTCTCCCTCCTCACCGTCTTCTAGTTTCATCCATGTCTCGCCTCATTTC
-ACCCGATTGACGATCATCTCGGCTCCACACTTTGACACCATAGCGCGAAT
-GAAAAAAAAGAGTGAGAAAAGGGGAAAAAAGTTGCTGCCCTATTATTAGG
-AGTCAAATAGACACACACACACACACACTCAATTTTAATGGATTACGCAC
-GATTTGACACCATCGACACCAATTTGGAAATGGGGGCACATAGATACATA
-CACAAAAGGAGTTGTACTACTAGTTTTGGAACTAACATCATTCTAACATC
-TTTTCATTTATGATTTGATTTATGCAAATGTCCTTGATTCGTGACTTCTT
-GTATAGTAGTTGGGATAAGTATAATCATGGTAGTTGCTCAAGACTAAGCT
-CTTTAGCAGTTTTAAGGTATGCCCCAGTTCGGGATTCCGGCTTGCTTTAA
-GATTGTGTCAGGTCCGGCCCAGGTTGTCTAAAAAATACAGGTCTGCTCCA
-GGACGGTATACCATCACTATATATAAAGCACGTGTCGTTCCGTCACTTTG
-TAGTTTGATCTTTGATCTTTGGTCTTTGAACTCTGTAGTTTGTAGTCTCA
-TCACACAAGAGAGGTCACATAGGCCCGGCCCCTTTTGTGACGTCATCACA
-AATTGGCGGGAAATTCAAATTTTCTGAGAAAATATTTTGGCGGGAATTTA
-AAATTTAATTTTTTGAAAACATTTTGGCGGGAATTCAAAATTTAATTTTT
-CAAAAACATTTTGGCGGGAATTCAAAATTTAATTAGACTGTTCTCGGTTC
-GGCCCAGATATATCCAAAGTCTTTCTCAAGACCACTCTAGATCTGTTCTA
-CTGTTACCCAAGACTGCCGCTCCACACCCTGTATAAGTTGGCCCTAAGGC
-TCCACTGAGTTTGATCTAAATCTTGCCAAGCCTGTATCATACCTACCTAG
-GCCCACCACAGGTGCATCTCTCACAGATCTTCCACAGGTGTTTCTAAGTC
-TGCATCAGATCTGCACCAGGTCTGTTTTTAGTTTTGCCTGGGTGCAGCCC
-AGTAGTCTACCTCACTATCAAGCAGGTCCTGACACCAGTTCCTAGGTCTC
-ACATTCAGGCTTCTAGGCGGATAGTCTACCTAGCTAAAGCTTCAACCTCC
-ACTGTTTTAAAGGCTTCCCCTTTCTCAAACTTCAACTAACATTAATACAT
-ACATATGTTATTAATTCGCGACTCGGCGACTAATAACAATAATTCAAAAC
-CTCTTTCCTGGCAATGCTTCCGGTACTCAACACGGAGAGAGAGGTGGCAG
-GTATCCGGTAATTTATTAACTCGAGCCGCGCACCCTGGCTCCCAGAGCAC
-ACAGCCCCGATGATCGCTCATGCACGAGTACTCACGAGGTGGTGGTGAGA
-GGTAGGTTGGAGAAAGCGGTTCTACCTTCACAAATTTCAATTTCAATTTC
-CTCTCTCTCCGTTTTACTCGGGCCCCCCCCCCCCCCTTCTTTCAATTTTT
-CGCCCCAAATTTGTGCTCCTTTAATGGAAAGTTTTTGAGTGTGTGAAAAA
-GAGAGAGAGAGAGACACCTTCGTGTCACGCCAATTGCACTAATATGTGCT
-CTCCCCACCTAGAGCTACCAAAATGTTCAATTCACAATTTCCGAACTAAT
-TCGTGTCAAGTTTTTAGTTGGTCCTAACTCTTTGGCCTAGAAATTTAGAT
-TTCTAGGTCATCCATCTAGATGCGGTGGCCTAGAATCCTAAGCTTTAGAT
-GCCCAGGCCATCAGGCCTAGATTCTGAAATGTTGTGATTTTTCTAGGCCA
-TCAACTTTGACCCAAAAGCCCTCTAATTTTTAGGCCATGAATCTAGGAAC
-CTATCTAGAGGCCTGATCCTTTGCTTTCTTGCCAAAAACTAGAGATCAAT
-GCCCTAGAAGCTCACAAAACTTTGGCCTAATAATTTCTAGGCCACCAATT
-TTTTAAAGATAGCCTAAGTCATCAACCTAAAATTCACGGCTTAGAAATCA
-TGAAATTCGCTTTTAAGGCCTCTGACTTCATAGCAGTGGCCTAGAACTCC
-AACTGTCAGTAGTCTGTAAAAATGAGCTTTTTGGGCCTCGAACATAACAT
-GGGACATGGAAGCCTAACATTTTTAGGCCACTGACTTTAAAGCAATGGCC
-TAGAACCCCGTTTTTCTGTAGCCTAGACTATCATCTAGAAATCAATGGCC
-TAGAATCCTAAAAATAATATTTTTCGGCCACCAAAATTTTAGGAATGGCC
-TAGAAATCTATTTTGTTGTATTCTAGGCCACCATCGACAAAGGAATGGCC
-TAGAATCCCTAAGAATGTGATTTTTAAGCTACCATCTATGTACCCTAGAC
-CAATATTTAAAATTCAATGGCCTAGAAACTAGAATATTTGATTTCTAGGC
-TACTAACTGTTGTGTGCTGTATCCTAGACTATCATCTAGACCCCAATGGC
-CTAGATTCCTGAAAATGTGTTTTTTCGGCCTGAAATAGGCCTAACATTTT
-CCAGTCCACCAACTCTTTTAAGATGACCTATAAGTTTAATCCTAGCTTGC
-CAACTATAAATAATTGGCCTAGAAGCTCCTAGGCCACCATCTAAAAATCG
-ATGGCCTAGAAACCTCCCATTTTTTGTATCCTAGGTCACCAACAACCACT
-GATGCCCAAGACCCCGGCTTCTTATTTCATAATGAGCAGCAAAATGAGCT
-ACCGTACCCCTTCTACACACTTCCTCCCTCTCCACACCCATTTCCCCTCA
-TTTTCGTCTATTTTAGCGGCGGCGGCGCGGGATAAATTTGTGAGAGGTGA
-GCTGCTCACAATAATGGGCTTGTTGTAATAGGCGGCAGTGGTAGTGGTGT
-ATGGATAATTGTGAGTTCCCAAACACACAAAACTTTTTCGCCGCAATTGT
-TATGCAACCAACATAATAATAATAATAATAATAAGTGAATGTGCATAAAT
-GTGCTCTTTTTCGCGTCTCCACACCCGTCCTGATGGGGACGACGCTTCGT
-TGAATAGTTGGAATAATAATAATAAATTGGAAAAATTTGGGCGCCCCCCT
-CCTAACACCCTAACACACACGAAATTTCATTTCGCGCGCGCTTCGAAAAC
-AAATTGAAGACAAGTTTTTCGCGAGACAAGTTATGATAATTTGTGGGATG
-TGGTCCCCGCCGGCAGCTTCCATCAATTTGGAGCAAATTTGTGCTCTCGC
-AAACCTTCTTAAAGAAGGGTTACACTAACAAAGTTTGTCGGAATCGATAT
-TTTTGTAAGTGGGCCTGAACCCCCGGTCTTTAAATTGATAGGCATTCTAG
-GGCTTCCATGGGAGACAGGCGCGGTTTTAGGGCCTGACGTCTGCCTCTCG
-CCTCATTTCTGCACTATGGCGAGAAGCCAAAGACTTGGTGTTCACACTTT
-GTGCCAGAGTGTCTCATTTCGGCTTGATCTACGTAGATCTACAAAAAATG
-CGGGAGAAGAGAAGCAGAGTTCTCAACTGATTTTACATGGTAACCAGAGC
-GTGCTGACGTCAAATTTTTTTTGGACGAAAAACTCCCGCATTTTTTGTAG
-ATCAAAAACCGTAATGGGACAGCAGGGCTTTCCACCAGAATAATTCCACT
-TCTTCACAATAAACCTATATATTTTTTGTCAAAATCTTGAGAATTTCCAG
-AATTTCAACGAAAACCACTGCTAAAAGTGGTTCTTTCGCCGCGGCCGACA
-CTTCTCGGGTTCCGCGCCGCACTATAAAGGAGGCGCGGCGCGGCAGGCGG
-CGCGAGGCAGGCGTTTTGGCGCCTGCACGGATGCCCTACACCAAACTGCA
-AACATTTCTAGTTCCGTTTTTCGGACTCTACGCCTTATTTCGGTCTTTTT
-GTCACAACTTCGCTACACTGTGTTTTTCTCCACTTCTACGACTTTAAAGG
-AGGGCGCATTTATGCGACTCACGTGATGTCAGGCAGTCTCATTGCGGTTT
-GATCTACAAAAAATGCGGGAAACTTTCCACCAGGAAATTGTGACGTCAGC
-ACACTCTTGCGAGATCAGTTGAAAAGTCTGCGTCTCTTCCCCCGCATTTT
-TCGAAGATCAAACCAAAATGGGACATTCTGACACCACGTGGTGACTTAGG
-ATCAATGTAGATCGTTTTATAGGCCATCCATTGATTTTTAGAGCTCGTGG
-CGGGACCATTTTAAATGAATTTCCAAAATTTCCAAAAACCTAATTTTTTT
-GTCAATTCACAAGTCCCCCGGACCCCCTCCATTGTCCCCCCGTTCACAAC
-TTCCTCCCTCGTTAACCACCCATTTAGCGGGACAAAATTAGCGAATCATT
-GACTCATAATCAAGTAAATCGGTGAATGCTCGACGAGCAAGAGGGGGGGG
-GGGGGGTCTAATCGAATTACGGGGGAAGGGACCCCTCCGCGCGACACCTC
-GCTGCCAATTAACAAGTCAACTACTTGGGGGGGGGGGGGGGCCTCCTCAC
-AACAATGTTTGTATTATATTTCTTGTTATTATGATTATTATTATTATTAT
-TATTAGAAATTAGTTAGTATGAATATATAATATCAACTAAAAACAAAATG
-ACAGTTAATAATAATTGAAGTCATCCAATAGGTGCCAATTAGTCAAAGAG
-AGGGGTCTGTGAAAACAGAAATAGAAGAGAGAAGGCGGGGGAGAGGGGCG
-CTCTCAAATAATTAATCTGGGCTCCGTGGGCTCGTAAAATTCCGATAAAA
-TGGCTTGTTTGTAATTAGCTAATTCACGGAATCTTTTTTTTTTGTTGGGG
-TTTTACTATGTTTTTGAACAACTTCCTGTTATAACATGTTTCAAAAAAAC
-TATTGACCTCAATGGGGACTTGAACCCTGGTGTTGAGATTGGTAGTCTGT
-TAACCAGTACACCAAAAATTGCAATTTTTGATTTTTGTTTTGTCTATTTT
-TTTGAATACAACGATAAGTAAGGATCATTTAGATTTAGAAAAAAAAAATC
-AAATTTTGTAAAAATTTTCTAAAAAGTTATGAACATTCCACTTTCACAGA
-TTTCTGGCTTCCCTCATAAATTGAAATGGAAGAGTTTTTGGCGAACAAGG
-CCAGATGCGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAATGCATT
-TGTCCGTGTGGAGTCCACGACTTCCCCCGTTGTCCGCCAGACGATTGTAA
-ATGGAGCGCGAAAAATTCAATGAGAAAGGCCAGAACCCCGTGCACTTTTT
-TGTTTCTAAAACTGAAAATTTTGAATTTTGAAATTTTCCTTGGTTTTACA
-GTATACAAAATCTTAGTTAGAGTTCGCAAAAATTATTGACACTGGTGGGG
-GCTCGAACCCCTGAGGTGGCATCCCTGTTAGCCACTGCGCCAAAATTGCT
-AAAACTTCAAAAAAAAAATTTTAGACCGTTTTTAAGGTTTTTAGACTTCC
-GACTCTTCAAAAATTCCTATACAAAGTCTTCGTAAAACTAATGACTGGGG
-GGCTCGAACCCCGGTCATCATATCAGTAGTCATCCCTGTTAGCCACTACA
-CCACTTGCCCAGACGTGTTTCTGGTCTGTTTTACGGTGCAGCGTGGCCTA
-AAAAAAACTAGTCAGCCACCAATTCGAAAAGTCCATAGACCAAGTTAATA
-TAGAAATTCTTCAAATTCGAGCCAACCAACTAATATATTCACTAACCTAT
-TTTCGCCGTGTTCTTCCTGTGTGTGTGTGTGCCCCTAGTTAGGCCTAGCC
-CCCCCCCTTATTTTACTTGCTTCACAATTCAATTGGCCCCCACACAGTTA
-CAGTAGTCATAATCATTTTGTGTCGGGTTTTCGACACATCGTTTAAACGT
-GTTACCTCTCTCGGGGCCCCCTCTTCTCCTACTTCTTATTTGCTCAAAAT
-TTGCGCGTCGAAATTTCTTCGTCGTGCGCTGCCCCTTCCGAATAATCAGA
-TTCACCAATGTATAAAATAGGCCACGCCTCACTTTTTCCACACCCATCAT
-CTTCCCTCAACTTTCCTCTTCTCAAATGCCTAATCAGCCAGTTATAACGA
-GGGTGCTCTTCGTGTGGCGCCCCGCCCATTTTATTGCTCCTCTCACGCTT
-CATTCTCACTTTTTCTGGGGATCCTTTTTTTTGCAGACCTAAAAATTTGA
-GCTCAGCCATATTTTTTTTGTAAATATAATCAAAAAAAAATAGACATTAG
-TCAAAAAAGTTGTTTTAAGCCTAAAAAAATTTTTCAGATAAAAAACGTTT
-TTCTTTAACTTTTTTGAACAGTTTTTCAGTGAAATATTTTTAAATTTTTA
-TTTTAAAAAAATGTTTGTTTATCTAAGCCTAAGCCTGAGCCTAAGCCTAA
-TAACCCTAAATAGCGTCAGTGTGGGAGCTCACGCTCCCCCACTGACGCCA
-AGCCTAAGCCTACGCCTAAGCCAAAGCCTAGGCCTAAGCCTGGGCCGAAG
-CTGAGACCTAAGCTTAAGCCTAAGCCTAAGACTAAGACTGAGTTCAAGCC
-TAAGCCTAAGACTAAGCCTGAGTCTCAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCATTTTTAAAAAGCTTAAAAATTTTTGCAATTACTATTTTTTCTGAA
-AATCTGTAAAAATATCGAATTTTTAGAGTTGCTATAAAATTTAAAATAAT
-ATTCAAAAAATAATCCGAAAAAATTAAATTTTTTTTCTCAAAACGTAGAT
-CATACAGAATCAGCTTTAAAAAATTCAAACCATTTTTCGTTTCAAAAATG
-TTCAGAAAATTTGTAAAACTTGAGTTTTGAAGAAAGTTTTCATAAACTAG
-CTCTTGAATAGGGTTTTTAAGTAGGCGTTAAAACGCTTGCCTGCCTGACC
-TTCAGGCGACTTTCGCCTGCCTGCTTGACTTTCAGACGTTCTCTGCCTGC
-CTGCCTGACTTTAAGGCGACCTCCGCCTGCCTCTCGCCTCAATCCGAGCC
-TTATCTCTTAAAATGTTTTTCATCAAATTGATAAAAATACGGAAATTACA
-AAATTTTGTAAGTTCATGCCAAAATGCAGGCATCAGGCCCTGAGGCCACG
-CCTGCCTAGGCCTCCGACTTTCGTTCTACAATTGTCGTTGCCGTTTCCTT
-TATCCCATTTTCATACCCCAAAGTTATGATTTTTCTTACACCCCTTGCGC
-TGCTGCTGCTTCCGCTCCCGTGATCTTATGAATCAGTAGTCAGAACTGCA
-GGTGTGAATCTCCACAATGATCACCCAATAAACGCGAAACACCATTAGAA
-ACAAAGTGTCCCCCGTTTTTTTTTTCTGAGAGTGTCGGCACCCCCCTAAC
-ATATGCGGGGAACATTGTCTCAAGTTTTGTGTGCTCCTCCAGCTCCTCCA
-TATGGTTACCGTAGTCCCCTGTCAGTGTTGTGTAATTGTTGTTGTAACTA
-TCCCCCGAATACCTCTCCTCACATTCATTCACAACACAGGTGTCAACTCA
-ACTCTCAGTGCTCATTTGAAGTTTATGAAGTTTAGCTTCCGGGGATGGCT
-CTCCTGGGCTCCCCGCTCCCTCGAAAATTTAATTAATTGCAAGCACATGT
-GGTGGTGGTGGGGCGAGCTCCGCGCTTCCCCCCCCGCCCCGATTCTCTCT
-CTCTCATTTGCGACTCATTAGATTTTAAATCACTCTCAAACTTTCCACTT
-TTCCAACTTTCGCGTTTTTTAAATTTTTTTTTCACTTTTTCCTCACAAAT
-TCATCCAAAAAAATTTCCAGAGTTGCCCCGCCCATATATTGGCTAAATGG
-TAGAATGGACGTGGCACTTTTGACAATGGATGACAACAACAAACCGCCGA
-CAAGTTCAGAGTCTACGGAGAGTAGGGGTGAGTTTGGCCGGGGGACCGAT
-AATTTTTAGGCCAAGACTTCTTTTTTTTTAAATCATTTTCAAAGGTACGT
-TACCTTCACGTGGTGCCAGGTTGTCCCATTGCTTTTTGATCTACAGAAAA
-TGCGGGATTTTTTCCCCAAAAAATGTGACATAAGCAAGTTTTTAAATCTT
-TTCTCCCGCATTTTTTTGTAGATCTACGTAGATCATACTCTGACACCACG
-TGTACCTTGAACCTCCTGGCTTTCTGAAACTAGAGTTCGTCGCTAGAGCG
-CATTTGCATTGTCGTGGTATTTAATTTACAGTACCGCCAGAATCATGTCG
-CGCCGCTTGTAGTCTAGTGGTTAACACGCTTCAGCTCTAAACAATAGGTC
-CGGGGTTCGATTCCTTGCAAGATGAAATTTCTTTCTCAAGATGGAGGTAC
-ATATGTGCTTTAAATGTGCACTAGAGATAGCGAAACTGATACCATGGTCC
-GACATGTACAGGGTTCCGCGCGCGCCTAGGGCCTCCAAAACGCCTGCTGC
-TCCAGTTTTGCGGCGACCTCCGCCTAACTCGCGGCGCGCCTTCTGTATAG
-TCACGGCCTTCTGTCTTCCCTCATAAATTGAAATGGAAGAGTTTTTGCCG
-AACTAGGCCATCTTGGCTCGGTCACATCTGGGCTCGATTTTAGTTGTAAA
-ACTAAATGTATTTGTCCGTGTGGAGTGCACGACTTGCCCACGCGTTGACC
-GGCGGGCGATTGCCAATGGAGCGCGAAAAATTCAATAAGGAAGGCCAGAA
-CCCCGTGTATAGTGCCGCGCGTGGAGCCCGAAAAGTGTCAGCCGCGGCGG
-AAGAACCACATTCCATAGGACTAAAAAACTAAAGTTCTCTCTTTCAGAAA
-CATCACCACCAATGATGCCAGATTCTGCGGAGATAATGCGACTTCTTACG
-GATCCTTCGACGGCTCAGATGTTTGGTAGGTCATAGATCAAATTTTTTCC
-GCAATTTCCCGAAAAATTTCAGCCAACGAAAACACAAAATGTCAGCTGGG
-ACGGATTCTCGCCGCGTCAGGCTTCGACGAGGCGAGCCTCTCCTCCTCGT
-TTCCGTTCGATCCGACGCTCGGCGCGTTCGCCGACATTTCCCAATTCTCA
-TCACTCCGAAATTCGTCGAAAACGCTGAAATGTCCAAAGTGTAATTGGCA
-CTACAAGTACCAGGAGACCCTTGAAATTCATATGAAGGAGAAGCACAACG
-ATGTGGATGTCAAGTGCATGTTTTGTGCCGAGAACCGTCCCCACCCGAAG
-CTGGCTCGCGGTGAGACGTACTCGTGCGGTTATAAGCCATATCGATGCGA
-TTTGTGTCGGTACAGTACGACGACAAAGGGCAATTTGAGTATTCATATGC
-AAAGTGATAAGCATCTTCATGCAGTGCAAGAGCTCCCGAATAGTATAGGT
-AGGTGGGGGGGGGAGGCGAAGGGTACTGTAGTTTTCGTGGTGGGACCCAA
-GAATTTGAATTTCACAAGAATTTAACTGTTGAACTCGAACTTTTCGATTC
-TAGGGTCTCGCCACGCAAAAACACTTACGCCAACTTTTTTGAACCCTAAA
-AAATGATACTCAAATTAGAGTTCTCAGTGAGCTAAATTCGATTTTACAGT
-ATTTTTTTAATTTGACGTTCTGTGGGTCTTACACTCAAAGGGTACTGTAG
-TTTTCGTGGTGGGACCCACTTGTCCAAAAATGGACGTGATTATATTTGGA
-TTAAAGCCCCTAACTTTTCTGATTTTTTTAATAAATTGGTTTTATTTTGA
-AAAGACTGAGAAAATTGAGTTTAGATCGAAATCAATAAAAATCGCGTCGA
-GACCCAAATTTCCCGGGTCTCGGCACGAAAATGGGGGAGAGGGTACTGTA
-GTTTTCTGGCTTCTCTCATAAATTGAAATGGAAGAGTTTTTGCCGAACTA
-GGCCGGCCATATCTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGGCTCA
-ATTTTTGTTTTAAAACATGAGGAAGACCAGAATCCCGTGTTTTCGTGGTG
-GGACCCAAATGGGTCATGATTATACTTATTTGAAAGGCCTTAAGCTGAAT
-TCAGATTTAAGATTTTTATTATTTTAATTCAAAAATATCCTGAATTTTCC
-AGAATTCGCAGCCAACTTCGCGTGTGGTGCTCCAGTTAGCCGAAGTAGTC
-CAATCGAAGAGTCCGACGGATCCCTGGTCTGCTTGATCTGCGGTATCTTC
-GCCACCGAATCTATCGCCGAAATGATGGAACACGTGGAACAAGACCGTTC
-CAGGACGTTCCAAGGAGACGTTACCGTCCTAAACGGGAGCTTCCGGTGCC
-ACTTGTGCCCGTATAATACCACATTGAAAGCCAATTTTCAACTACACACA
-AGGACGGATAAGCATCTGCAAAAGGTTCAAATTGTGAGTTTTGTATTCCC
-CTCTCATCATCTTCTTATTTTTATTGTGTCGCCCTTTTCCCATTTTTGTG
-TGTCTGTGTGTGTATGCGCACCGATTTGCATATACACATAAATTCATGAT
-TTAATAGCGTAATGAGTAATATTTGCTTTGCCAAGGCTAACAGTTTTCGT
-ATTTTAAAGCCTTTTTTCTACAATTTTTGAAAAAAAAATTCAAAAATTTG
-AACATTTCAATATATCCCTAGAAAGCTCAAAATTGTAGTGAAAATTTTGA
-ATTCAGTACGCTGAGACCTTTAAAATAAGTATAATCATTACTAGGTTTTG
-GTTCTGACGCGAAAGTGTTCGTGGCGGAGCCCAAGCAAGGCGTAATTGAT
-TATAGGGTCTTTGCACGCAAAAAATTTAAGGTCCGGTAGGCGTGGCGGGG
-AGTTTTTCTTGAATTATTTTAGTTTTTCATAAATTTTCAATTTTTTGGAA
-TTTATTTTTCTCTCCCTTCCCCCGCGTAGTCTGAGCCTAAACCTAAGCCT
-GAGTCTAGGCCTAAGCCGAAGCCTAGGCCTAAGCCTGAACTTAAGTTTAA
-GCCAAAGCCTGAGCCTAAGCCTAAGCCTAACCCTAAGCCTCAGCCTCAGC
-CTAAGCCTAAGCCTAAGCATAAGGCTAAGCCTAAGCCTAAGCCTGAGCCT
-AAGCTTTAGTCTAAGCGTAAGCCTAGGCCTAACCCTAACCCTAAGCTTAA
-GCCTAAGCCTAACCCTAAGCCTAACCCTAAGCCTGAGCCTAAGCCTAAGC
-CTAAGCCTAAAGTCTTCGTGTCGAGACCCAATTATACTCAATTGAAAGCT
-CACAATGAGCTGAATTCAAATTTCTCAATGAAAATGTGAAATACTTTGAT
-TTTACGGTCGGTGGCTTTACTCCCCCCGAACTTTGGAAAAAACTCTGAAA
-TTTTTTTTTCATTGAATTCCAACCGGTTTCTACTCTCTCCGGCTATTAGT
-GTATGTGTCTTTCACTTCTTTGTTCTCGTCGGGTTGTTCCCAATTTCCAA
-CCCTCGTTTTACTCATTCCCCCTCTCATTTTCCCAATCCAATTAGTTATA
-CCTATGGGGGGAGGTGACGGTGATGATTCTCGCCATTAAGACCCCCCCCC
-TCTCCTGGGCCGATTGAGATGGAAACAAAACAAAACTGTCAATTTGAATA
-AATTCGCAATTTGACGCGGGCGGCGCAGCGGGTTGCCGAGAAGGATATAA
-ACTGGGGAACTCTACTTAGCCCGTAAGGTGTCGGCTGCTACTATTTTATC
-ACATCTCAATTTTTACGGAATCCCGTAAGGCGTCGGCTGCTTCTCTGTTT
-TTGCATGTTTTTACAATTTCGGCCCGTCCGATGTCGGCTCCTTCCAATTG
-TTTTGCAAAACAATTTAAAATTTGAGCCAGCAAGGTGTCTGCTGCTCCGG
-CTAGATTTCCAATATTTAAATTTTGCACAATCCTGTAAGATGTCGGGTGC
-TTCTCAGTTTTTACAAAGTTTTTTCTCAAATACGGCCCGCGCAGTGTCGG
-CTGCCACCTCGTATGTTTCATCAAACTTGAACGATTCGAGCCCGTTAGCT
-GCCCGCTGCGTCTTTTTTTTTCTCAAAATTCCAGCCCGTAACTTTTCGGT
-TGCTGAAATAAACAAAATTTTTACGAAATTTTAACCCTTGAAGTGTCGGC
-TGCAAATTAAGATACCTACTCATTCAGATTCCCGTCTCTCCCTCTCCCTC
-TCTCTTCATTGGGGAGTCCTTCTCCCGAGAGAAAATGAATAAAACTGTCA
-ATTTGAATAAATGCACACAGCGGGAGATGTTTTTCTGTGAAGACTCCACC
-GTCTTCTTCGTCTTCTGCCTATTAAGCGATGATCCTTTCACTTAACTGTC
-GTTCCCTCCCCCTCTCCACATACCAATAAACCTTGCCAAAAGGTCGAGTA
-TGCTTTGCCCGCCATCGTGCCGGAGGTCTTTTTTCTAGACTATGATGTTT
-TTTTTTGGAAAAACATTTTTCTATGGATCGATGCACCATGATGCCGAGTT
-GCCGAGTTTTCAATTTAATCAATTTTGAGATTTCAATTTTAGTCCCTTGT
-ACATATTAATTTTTTTGGAATTAACATTAAAATTTGATAAACTGTAGCTA
-CAACTATTTATTTTTGTGCCAAATTATACTATCCAATTTGACTTGTCTCT
-TGATGCACCATGACTAACTTTCTAAGATCTCATATTTTGGCCTAAAATTA
-TTCTCAAATATTTAAATTTAAACTTTAATCCTATTTTTTTTAATTCCTCG
-GAAAAAACCCCGTTAACAGAATTCCCAATTTGGCCTCCAGGAGCTTTTGT
-CGATGCACCATGTTCAACATTTTTTCAAAATTTTGCTCATTTTGACCTGA
-AATTTTGTCATTTTTTTATGTTGCAGGGTTTTTTATTTTGTGATTTTTGC
-GATGAAAACCACATTATGTGGATGAAAAAAGTTTGGAATCTAGTTTTCCC
-GTTAGGCTGCCATATTGCTATGTAGTTGATGCACCATGTCCAGCTTTCTG
-AAATTTTACTTTTTACATTTTTTGCTCAGTTTGACTTTAAAATTTTGTTA
-GTTTGACCTTAAAATTTTGTCAGTTTGACATTAAAAATTTGTCAGTTTGA
-CCTTAAAATTTTGTCAGACATATAATTTTTTTGTGTTTTTTGGTTAAAAA
-ATTGAAGGTTTTTCGCGATATTTAACACATTACATGGAAAAATTCTTTTG
-ATCGAGTTTTCTAATTTGTTCGTGTAGCAAGTCGATGCACCATGTCCAAT
-TTTTTAAAATTTTACTTTTTTTAAATTATTTGCCCAGTTTGACCTTAAAA
-TTTTGTCAATTTTACCTTAAAATTTTGTCAGTTTTACCTTAAAATTTTGT
-CAGTTTGACCTTAAAATTTTGTCGGTTTTACCTTAAAATTTAATCAGACA
-TATAAACTTTTCTGTTTTTTGGGTTTAAAAATTGATTTTTTTTGCGTTAT
-TTAACACATTAAATGGCAAAAAATCATGCACCATGTCTAACTTTTTCCAA
-AAACACTTGATTTTTCCCTAAAAGTTTGTCAGAATTATACATTCCTTAAG
-TTCAAAACCGTACGGAAAAATTAGAACCCATGTCGATGCACCATAAGCTT
-TGGCTCGCTGAGCTTCGTTGCTGCTCCTGCATATCTCTTACCCCCTCTCG
-CCGCTCTCAGAACATTGACCAATTACTTGGGCGGAGCGCCGTTTTGAAGT
-CGATTGGCTGATGAGTGTCCCGCCCCGCCCCCCGTCCCGCAAATTTTCGG
-AGGAACTTTGCACTGCACACACACACACACAAATACACAAATACACGCCA
-ATTATTGTCGATTTTTCTTGAAAATTTCTTCATTATTGTATATTGACTTT
-TTTTGTCGTCCTCTAGTCTTCCGCCATCCTCGGCGTCTTCATTCGTTTCA
-TTATTTCATACACCTGTTACCACTTAATTCGCCTATTATCCTCCTCATTA
-CCTTCATTTTTCGGTCGGCGTTGACGTCGACATTGGCGCCCGAAATGAGA
-GGAATAGGGGGGGGGGGGGGGGGGTATAGACGACGGCGACTACGACAACC
-ATGATGACGATCATTTTCGTTCTATTCATCTAATCCTGCTAACCGTCGAT
-TTGTCCCCCTCCGTTTTTCAACTTACCAAAACTTTTCGGTTACCTTGGGA
-ATTGGTCCCCTTTTATAGGCGCGTAAATTGACAACATATTTTGCTCACTT
-TTTCGAAGTTTCACAATTTTTAGTTAGTCCGTTTTTTCAATCTGGCCGAG
-TTTTCAATTTTCCCCGGCCAGGGAATTCTAGTAGTATTCACATAATTTTT
-CTTATTTTTGGTTTTCTAGGCTACGATAAAACTCCCTATGCCCGGCAAAA
-CTTCTAGGTCCCCCATTTTACACCTGACTTCCTACCTATCTGAAATGCCT
-ACTTGCCTTTCCACCTGACTAAGATGCCTACCTACCTAAAACCTACCTAC
-CGAACTATAAGATGACTCCTTACCTACATAAGACTTGCCGATCTGAAATA
-CCTACCTACTAAGACATGCTACCTAGCCTACCTATCTAAGATACCTACTT
-ACATATAATGTACCGACACAAGACTTGCCTACCTACGCAAGGCATGATTT
-TTTAGACCTACCTACCTGTACTTAAGATTTAAGACCTAGATCTTATTACA
-TAAGAATTTTCATCTTAGATACCTACTCAAGATCCTACCAAAGATGCATG
-CCTACCTATGACCTACTTACTTAAGATACCTGCCTACCCAAACCATACTA
-CCTAGCGCTAGCGCCCACCTACCTAAGATACCTACTTACCTATAATTTAC
-CTACACAAGACTTGCCTACCTACGCAAGGCATGATTTCTTATTGTTAGAC
-CTACCTACCTAACTATAAGTACTTAAGATTTAAGACCTAGACGTTATTGC
-ATAAGACTTTTTGTCTTAGATACCTACTCAAGATCCTCTTACCCAAGATA
-TACCTAGATGAACTTCCGACCTAAGATGCCTACCTACCTAAGCCCTGTCT
-ACCTAAGACCTACCTATAAGAACTTCCTACCTAAAAACACCTACCTAAAA
-TAAGCCTTCAAGCTCAAAAATTTTTAGAGCATCTGCATGAGATAAGGCTG
-AAAAATATTAACGAATAAGTGGAGAGCGATTAAGTTCCTGCCCTCTTAAA
-GTTCGGAAGTAGGCGCCGCAAAACCCCATTACTATTGCTCATCGAGCCAT
-TTCCGGTACTCAGTACTTTTTCATCCCCCACTCACTTTTTTCTCTCTTCT
-CGATTTGATTTGCATTCTTTTTCCCCTCGAATTTCGAGCTGAGCCCGGTT
-GATTTCCCGCACTTTCTCAATTCTTTCCTTAAGCCACCCCACTTGACCAG
-GAGCAGTTCATTCAAACTCGCACTTAATCATATTATGACCCCCCCCCCCC
-ACCCCTCTTAATTTCCTAATCCCCCTCCCCCTCCTCCTCATAATGACCAA
-AAGACAATTGCAGGCGAACCATCTTCGTGAGGGAACCCGTCCGCACACGG
-CAATCTACCGTCTGTCGAGCACAAAGACGAGCGTTCAAGTGTTGTGTCGA
-CAGTGTCAGGAGGTGATTTCCAGTGGCGAATCGCTCCGCGAGCATCGACA
-CTTTCACGCCCTGCTTGCCGCCAAGCAACGCTTGTGGCGATGCAAGTTGT
-GTAGGCTGGAGTTCGACTCGGTTCTTCTTGCAGCTGGTGAGTCTTGATAG
-TTTTTTTTAGGAAGAAATTATATCTGTAAGTCCCCCAAATATAAGGCCCC
-CATGTCCATCTTAATGAAGCTTCTGACTTAATTTTTACTATAGATTTTGA
-ATTTTGTCTATCGGAAGAAAAATTAGGTTCACCATGATTTTTCGATTTTT
-TCGATGCACCATGATTTGTTGCTAGAATAGAAAACAATTCGTGGCCAAGT
-TTTTTAATTATTTCTTTTTGTCGGCCAAGTTGCAAAAGTCACCTTTTGTG
-TATGGATGCACCATGACCCTTTTCAGTGGATTTTGGCCCAAAAATCGTCA
-AAATTTTGAATTTTTAAAAATCAAACTCTAAATTACCTTTTTTTTTCAAA
-TTTTCTTAACAAATTGGAGCATTTTAGAAAGTTCCGATGCACCATGATTT
-TTGCTAGAATTGAAAAAAAAATTGTCGGGCAAGTTGCAAAACTCACATTT
-TATGTATCGATGCACCATGACCATTTTCGAAATTTTGCGGTATCTATTCA
-AATAGTGCACATAGCCGTAAAACATTGGTGGTGGCCTCGTTTTCTCATGC
-TTCGGCCACGAAAAAAAAAATTCTACAGTTTTTTGGATCGATGCACCATG
-ATTATTTTTCAGTGAAAGCCTGTTTTTGCTTAGCTCAAAGGCCGGCTTAA
-TGTTCCCACAAAACGTAATCCAAAAATTTAAATTTTACCGTCAAACTTTT
-AGCCTGGCGTACACTAAAAATTGTAAAGTTTCAATATATCAAAAATATTT
-CTGGCCTATAAAATTAAACCTGAAAGCTTAGAAATCCAAGATATTTTTTA
-AAAATTGATGTCCAATACATGGGTGTGCAGCAAATCTTAAAGTTTGCCGT
-GCTTAACAAACTCCGAAAAAGTGTGATATTTTTTTATGCTTTTTGGAGCA
-CCAAAACTACTGAATTCGAGCTTAGCAAACGGCAAATTCGGCATATTTGC
-CGCACACCCCTGGTCCACTAGTTAAGCAAAACCCACCGCTGAAAACTAAT
-CAATTGGTGTTTGAAACGGTGTGTGCTACTACTAGAATTTCGCTGTTCAA
-AATCTCTTTATTAAACACTTCTTTGTGTCTATTCTGCCCTTTCCTCCTCC
-CCGCGCAAAATCCACTTGTACCTCTAATTACGGTCAACAAGTTTGCGGGT
-TTAGTTTAGTGAATGAATTGTGAAATGAATGAATGAATGAATGGATAGGT
-AGGTGTGTATGTATGTGGAAAAGTGCGACACACACAACCAGCCGTCCACC
-ACCGCCACTACCACCAGCAGTAGCAACAGCCATCAAATATAATCCTTGCA
-TTTCATTATTTCATAGTGTCATAGATAGTAGCAGGCCCGAGGTCCGAAAG
-GCCTTGACAGCGGTTTATATTCATTTCATTTGACACCCCCCCCCCCCCCC
-CCCCCTCCTACTATTCTTCTTCTCTACCACATACATTCACATAGTCAGGC
-CATTCATGTTTTTCACACAATTTTGTTAATAAAGCCGCTCTGGCGCCACC
-TCTCAGTAGTCCTTCTTCTTCATCATCATCACTCCCTCTCCCTTACCAAT
-AACCAAAAACAGTCATTGATGCGTATCGGAATTATAATCGCGCATTTATT
-GTAGGACACATGACTTGCCACGAGCCGTCCACTTGGCCCAACGAATCACT
-TGGTGAGTCTCTTTACAGTGAATCTTGAAATTTGTGTTGTTTTGTTGTGA
-AATATTGTTAATCGTTTTTTTATTAGTATCTCCAATTAGGCCAAAACTAT
-AATCGTGAAAGAATAGTTTCTGCACATGGTGCATCGACCTGATATATCTC
-ACTTTTTTTGGGCTTCATCAAAAACTTGTTAGCTAATTATAGTTAAGCAT
-CACATCTATTGATATGTTCAATTTGAACAGAATATGGTGCATTGCATTGT
-ATTGCAACTGAAACAATTTTATTGGCGCATAACATTCAACTATGTAGTTT
-ATGTACATCGATCTTAATTACCGTATTTCCTCTATTAGTATTGCACCCGA
-CTAATTAACTTTGAAACGTTATATCTCGGTTCATATTGAAGATATCAATA
-TATAATTAACTATGAAATAATAGCAAAAGAACTAACAAATATTTTGTTAG
-TTGACCATTTTTGAATAGGACAAACGATTACGGAGATATAAGCTGTCAAA
-AGTGGACAATGGGGTGCAATACTAATTGTGTAAATACCTTATATCTCGGT
-TAGCTTTGGTTTTAACAAAAATTTTAAACTGACAAAATATAAGTCATCTA
-AATGTCTATAGTTTTGTAGTTAACAATTTTTTGATATCTTTAAAATGAAC
-TAGCGATTTTCGACATGGTGCATCAACCTCAGTTACCTAGTCTAACTTTG
-CTGGCTTATTTCTTAGTTTTAGTATTAACCGTTCATTTTAATATACTTTT
-ATAGATAGTTAACAATTTTTTGATACCTTCAAACTGAACCGGAGCGATTT
-TAGACATGGAGCTTTGATCCTATCTTGCCTTAATTTTCAAGCTTATCTTT
-TTGTTGTAAAAAAAATTTAGACATGGTGCATTGACCTGAACTACCTGATA
-TATCCTACTTGATATATCTTCAATTTTAGCAAGTTTTGGAAAAAAAAAAT
-TTTAATGAAATCGATTTTTTTTTTCAATTTTCAACCTTCCGGCCAAAATT
-TTCAATTGAGTTTTGACCTTTTTTTTTAACCCGGCAAAAATCTAAAAACT
-CCCAAGAACAATCTCCCACAAAAAACTAAAAACTTGTGAATCTAGATTAG
-TCAAAAATTTGCACCTTCTTCCCATGGGATGGCTCAATCGAACCCAGTTG
-ATGAATCGGCCTGTGGGCCGCGAGCAGTCGCCGCTCTAATTTGGAGCATT
-TGTATATATATAGCGAAGAATTTCACGTGACCAATGAAACCAATAGAAAT
-CCAATCATATTTTTGTTTTGTCTCTAAATCATCTCTTCCCTCTCTCTCTC
-TTGCCCCTCCTTAACCAATCAGAGACGCACACACCGCACCGCCCGTCCGT
-CATCGTCATCGAGTTCCGCAATTAGTCGTCTATTCTCTCCGTTTTTGATT
-GGAGATGGAGCGAAAATGAAAGAGAAAGAACGAGAGAGAGAGAGAGAGAT
-TAGCTCTTAGATTCATTCAACTAATCTTGAAATAACACACACACACACAT
-ACACAAATGAATTATCTTCATTTCAAATCATGGAAATCAGCAAATTCGCT
-AGAAATTTCATGGAAGGGGAAGCTTGAATTAGGAGCACTACTTGATACCG
-AGTTGGAATTGTAGTCTTTTAATATTTGAAGAAATATCACAATTTTTCAT
-TTTAAACTTCTAAAAATATGCAAGTTACTTGATGCATCATGCCTCTTTAG
-ATAACGTTTTTTTTAGGCTTAGGCTTAGGTTTAGGCTTAGACTTAAGCTT
-AGGCTTAGGCTTAGGCTTAGGCTTAGGCTTAGACTTAGGCTTAAGCTTAT
-TCTTGAGCTTAGGCTTAAGCTTAGGCTTAAGCTTAGGCTTCGGCTTGGGC
-TTAGGCTTAGGCTTAGGCTTAGGCTTAAGCTTAGGATTAGGCTTAGGCTT
-AGGCTTAGACTTCTAGATACTTTCTCAAACCACCAAATTACTGTATATTC
-TCTATCATAGATACTACTTCCATTTGGCAGCTTATAACTCAAGTCTTTTG
-TTAGAGATATCACTAGCTTTAATTACAACATTATAGGTTAATAAATACAC
-CATATTTTGTTAGTTTAAATTTTTTGATTAACCTAACGAGAACCGAAATA
-TGAGTAGTCAAAGATTATCGATGCACCATGGTACTACACTTTACTTTGCC
-GGCTCATAACTCGGTTTATTTTCAGGATATCAAAAAGGTTTTTACTACAA
-ACCTATAGAGAAACATATAATAAAAATATTACTATTTTGCAAAATTTTGG
-TAAAACTAATAAGAATTGAGATATAGGCCGTTGAAGTTGCATGATGCAGT
-TCAAAGCCTACGGTTTTAGACTTATAGCTTTAAAAGGAGGTACCGTATTT
-CCTCTATTAGTATTGCACCCATTGTTCAACTGTGACATCTTATATCTCAG
-TTACTGTTTGTTCTAATCAGAAATTGTCAACTAACAAAATATTTCTTAGT
-TCTTTTTCTATCATTTCTTAGTTGACCATATATTGATACCTTTAAAATAA
-ACCGAGATAAAACGTTTCAAAGTTAAGTAGTCGGGTACAATACTGATGGA
-CGAAATACGGTATTGAATATTTTGATCTACGTAACTATTTGATCTAAAAT
-CTCGATATCATTTTAATTTCTGATCCATAGCTTTGCGTTCAATTATCCTG
-CCTAAAAAATCTCTAAAAATAACGTCTACGAGAGCGGGTGAAACAATAGG
-TGGTTAGATGTAAGTTGATACCCCTGAAGGGCATCCGGGATCCCCGCGCA
-AAAACAGTACAAACATGAGATGTACAATCCCCCATTTTTTTGTGGTCGCT
-CTAAGTTGAAATCGATGCAAAGACATTGTCAATATAGCCGTGACGCGACG
-GGCGGGTGGGCTGGCGCGCTCGATGAATCAAGATCGTTTTGGGAAGAGAG
-GGACTGAAAATATTAAAACAACATTTGCATTTTGTAATTGTTTGAATCAT
-CATCATCATCATCATCATCAATCATATCATAGAGGTGGCGAAACTTTTCC
-TGCTGGGAATGTGTCTCCTTTTTAGTACAGTCAATAAATGTGTCACTTTT
-GAACGGGGGAAAAGCTTTTCTGCTTTTCTTCGCTCTCCACCTCCTTCCCT
-CCTCGCTCATAAATTTCCATTTTTCTCTTTACAAACATTGATTGATTTCC
-TTATTCTATTGACTTTCTGATATTAAATTGATCATCTACTAAAAGGTATA
-TATATATATAAGGTATATCAACTCTTGGAGCCCATATCTTTAATGCTCAT
-CAAACTCCCAGTTAGGACTGGGAGTGAAGTACTGGGTGGTGGGATAAGAA
-AGTTAGGATGTGACGGGTTTCATGCTCATCTCGAGCTGCCAATCTTGCAC
-ATTAAGCAATTGGCTCATTGGCATGCTCTTGTCCTCTGGGCCTGCCGCGG
-AGCCATCTCCCGTTTGATATCTGCTCCCGGGGGACGTTCCCAACTTGGCC
-GGAGAGAGGCGCCGCGAGCAGCACAAGCTCAACCAAAACTTTTCTAATGT
-AATGGGCCGGAATTAGGGGAAGAACAAACGAAGGAGAGGGTGGGGTGGAT
-GAGGAAGAGAAAAGAGCACCACCACCAACTGATTTGATGGTTGGAGAGGA
-GCTCGTTTTGTTTTCTTGTCGTCGTAAGAAGAAGAAGAGAAGCGCGCTAG
-TTAGTGGTTAAACGAATCAAGACCCGAATGTGATAGATGTGCCGCCAATT
-TAGCCAGTAGGATTTTTGCTGATTTTGCACACATTCATTTTTCGCTTGCC
-TAGACATTACATCCCATCTTATTCCGCTTCATTCATTGTCGTGATTTTAA
-GATTTGGGGGACCTAGGAGCCTCTACAGTATTATTTAAATTTCACTTTTG
-TTTGGATTTTGAAAAGAGATGCGTCATACATATTCATTTTAAGGCACCTA
-TGTATACAGTTCAAAATTTTGGAACATTCCTGGAATAGCGATCTTAAAGC
-GGGAAATATAATGACATTATCTGACAATTTTTTCGAACACCTAAAAAACT
-TGAATAAAGCCAATTGAATCGTATCCCTAATGGTTTGCAAAGTTGGGCCA
-TGCTCTGAATAGCTTAGAGTTCCATCCTGACCTGGAGCTCGCCAGAAGCT
-GAACGCACTGAACTTCCAGTCAAGCCTCTTTTGAATAAGTCTAGTTGCAG
-ACTAGAAGCCTTAACTACCTGATGAGATTTTCACCCTTCTCTCATTAGTC
-TATTTCATTAAGCATGAACTTACACGAGAATTCCAATTACATTACCATGT
-AACATTACTTAAGATCCCATTTCCACTTAATTTGTGAAAATCGATACGGT
-TTTATAAGAAGTGTTTTGTCCTTTTGCCTATAGCCTAGAGCAAAAATACC
-CAAATTATTTGGCAGATCATGTCTCCGACAATATTCTGATCGATTAAGAA
-ACTTTTGCAAATCTGCTCGGTTTTTTAGTCTACATTCGCCCCCAGATAAC
-TGTTCTCGGCAAGTTGCCGATTTGCCGATTTGCCGGAAATTTTTCTTTTC
-GCCAACTTACTGATTTGCCGGAAATGTTTAAGGGATTTTTTTGAAGACGG
-AAAATTTTTTCATTAGATATGTTCATAGAATTAGCTTGCATTACAAAATA
-GGTGTATGAACATATTCAAAGGATGCGTACAATTTTGCCGATTGAAATTG
-AAATTCTGAAATTTCCAAAAATAAATGTGCAAAACCACAATTTGCCGTTT
-TCCGGCCAATTCGGCAAATCGGCAATTTTCTGGGTTGCAAATTTGCCGGA
-AATTTTCAATTCCCTTTATTTGCCGGGTTGCAAATTTGCCAGAAATTTTC
-AATTCCGCAAATTTGCCGTTTTTCCGGCCAATTCGGAAAATCGGCAATTT
-TCCGGGTTGCAAATTTGCCGGAAATTTTCAATTCCCTTTATTTGCCGGGT
-TGCAAATTTGCCAGAAATTTTCAATTCCGGCAATTTGTCAGTTTGCCATA
-AATTTTCAATTCCGGCAATTTGTCGATTTACCGGAAAAAATCGTTTGCAC
-CCACCCTTGATGTGAACGCTAGCACTACCTCCTAGTATTAAGGCTCCAGC
-TAATTTCTATATCATGGCTCCCAACTATACGTTCCTCCCTCCTCCCCCTT
-CCCAATTTCGAATGGGCGCCAATTATTGCTCAATTCCCATCAGATTGGGG
-GGGGGGGGGGGGGGGGCATTCGTACAGTGTCAACACGAATAATAATTATG
-AGCCCTCTTCTATGCCCAAAGCGCGGCGTCTTCTTCTTCACCCCTCTAGG
-AAGTTCTCATAATTAGCATTTTGTAAGACTCGGTGTCCCCCTTTCAAGTA
-TCTCTGGATGATTCCCCCCTCTCGCACACACTCTTCCCATTTTTTTTTCA
-CAATAATCATAATCATCAAGTTGGACACCAAAAAAGCCATAAATTCGATT
-CCGGTCGAATCGAGAGAATTGGAAGAGAGAGAGAGAGAGAGAGAGAAAGA
-GGAAATGAGACAGAGGGGTGAGAGATGGAAAACGAACAAGTGTGATGGTC
-GTCCCCCCCCCCCCCCCCCACGGGGCCGCTCCTCATTCCTATATTTATTT
-ACAGCTCTCTCTCTCTTTTTCTCTTCAATTTCCATCTCTCTCTCCTCATC
-TACAGTAATCGGGGAGGGGCTAGTGATAAGCCTCTCCCCGCCCCCCCCCC
-CCCGGCGGTTAGGTGTCAGAAATTAATCATAGAGGCCACGCCTCTAATGT
-TTTCGGAGCATCATCCTTAATTCTTTAATTCATTAACCTTAATTCATTAG
-TCTTACACTGAATTTCATAACTAAACTTGTTGAAAAAACTTCTCAAAAAA
-AAAAGTTTTGGCGGCTTAAGAAATGGCCTAAAATTAGTTCGACTTTTCAA
-GCGGCTGGAAACTAACTTTTTTTGAAATCCCCCCTAATTATGGGTCTACA
-ACGTAAATAAAAAAATTTGGTGACCAAATTTATTTAGGCCAAATCTGGTG
-TTCAAATTTTTTAGGCCAAATCTGGTGACTAAATTTTTTAGGGCCCAATA
-TGGTGAAAAAATTTTTTAAGGCCAAATCTGGTAACCACAATTTTTTAAGG
-CCAAACTTTTTAAAGACCAAATTTTTAGAGCCAAATCTGGTGACCAAATG
-TTTTTAGGGCCGAATCTAATGACCAAATTTTTTTAAGGCCAGACCTTTTA
-AAGCCCTAATTTTTTAGGGCCAAATCTGGTGACCAAATTTTTTAGGCCAA
-GTCTTGTGATCAATTTTTTAGGCCAAATCTGATGACCAAATTTTTTAGGC
-CAAATCTAATGACCAAATTTATTTAGGGGCCAAATCTGGTGACCAAATGT
-TTTTAGGGCCAAATCTGGTGACCAAAATTTTTTAAGGCCAAATCTAGTTA
-CCAAATTTTTTAAGGCCAAATCTGGACACCGAATTTTTTAGGCCAAGTCT
-TGTGATCAAATTTTTTTAAAAATTTTTTTCAAATCTGGTGACCAATGTTT
-TTTTAGGGCCAAATTTGGTGGCAAAATTTTTAAGGCCAAACTTTTAGGAC
-AAATCTGGTGACCAAATTTTTAAGGCCAGAATCCACAACTTTTTTTTGAG
-AAATTTTGAAGAAGTTTCTAATTCACCTAATTCATTACTCTTTTTGAATT
-TAATCTTCGATATTCCAGATTTCAAAACGATGGAGGATGCGGCGTACGCG
-TGTGCTGGCTGCGAATTCACCACAAGTGAGTTTTTTTTGTTGTTTCCTTA
-TCAGCATCAGCTCTATGCCTTCTCCCCACCCCACCCCGCTCCTCCTGTAA
-CCTTCAATTGCCATTCATTTCACACAGTAATAGTACCACACAACACCCTT
-CCATGCCTTCAATTTGACTCATTAATAGCCCTTTTCACCATGTCTTTTTT
-CCCCCTCTTTCTCTCTAATACTCAACCTTTACCTACCTACCCGCAATTTA
-ATTGGCAACTAATTCGGATACATTCGGACGGCTCAAACGATGCGCGTCCG
-TCGTCGGGTGCCCGAGACTGGGACCGGTTTTCAGAATGTCAGTGTATGTG
-TGTGTGTGTCTACCGGCTGGCAGGCAGCCACACCACTGCGATTCGTTAAT
-TTATTGTGAGATGATGACTGTACATTATTTTGAGTGCTGCTGGTGCTGGT
-GGTGTGCATCATATAATTATAGCCTAGTTGATAGAGATATATCGACACAC
-ACACACATACACATTTACTTTCAATTGCTTCTACCCAATCTTTTTTCTTC
-CATTCTCCAATTCCTCTCCTTGCTCCCATTTCGCCCTTTGATATTCACCG
-CGTTTCGCGTTTCGCACTAATTTCGCGCCCGGACCGGTGTGCTCGGCGCG
-GCACGTCTTTCATCTTTTTGCCTCAATTTCATTATGATAATAATAATCAT
-AATAATTATGCGAGACACGGCAAAGACGCGCTCAAGAAACTGATAAGTGT
-GTATAGGTCGGGTCCTTTTGAGAGAGAGAGAGAGCGAGGTGTGATAAGCG
-CGTCTAATGAGCATGGGCAATCATAACATTCCTATCAGCATATCAGCATT
-AAAACATTTTTTTCAGAAGACGTGTCGGACTTTGAAGAGCACGCAAAAGG
-ACACGAAGAGGAGGCGGGAGCCTCTTCACAGAAGGCGTGTGCGCTGTGCC
-TTGAGCCCACCGACGACCTCGAAAAGCACCTTGTCGAGCAGCATCGCATC
-GCCGAGAGCGCCATCGAAAAGTTCCTGCTTACTGAGAGAACAGCCAAGTG
-AGTGTTTTTTTTTGTCTTCAACTCAAATATCTAGTAGTAAGTCTTATACT
-TGGCTTATATTTCAGCGGTTTCAAAATATTTTTGATAGCTTTAAAAACCA
-TAGAATAACAATTAATTTGACAACAATTTTGTCGTTTGAATTTTTTGACA
-AAAATTTTGTCGTTTGAATTTTTAAAATATGATCAAAGACAACCGAGATA
-TAAACGGTCAAAGTCCAGTGAGAGGGGCCATACTAATAGGGATTATACGG
-TAGGTAACGAAATTTTGATAAGACTTATAAGGACAAAGATAATGGAGCTA
-GAAAGTTTAAACTAGTCCAATTTGAACAATAAAAATATATATAACGTACT
-TTTTAGTATAAATATTTTAAAAGTAGAGTAATCTGAGATACAGTAAATTT
-TTAACAATTTCTAGTCGATGCACCATGTGCAAAAACTAGTCCAGTCCTAA
-AATTAAATAGCACGTACTTTTTAGTATAGATATTTCAAAAGTTAAGCCAT
-CTGATATACAGTGAATTTTACCAATTCCTAGTCGATGCACCATGTGCCCA
-CTTAACTTTCACGGCTCACTTCCCGGCTAATTTCAAACATTTCAAAATAT
-TTTCAACTATTCAACTATAGAGGGGTTTTTAATAAACATTTTCTCAGTTG
-ACGACTTTTTTATAGAATCAAAGACTACCTAGATATAGCTAGTTAAAGTC
-GAGATGCAAGATTTTTCGGAAAAATCACGTGGTGTTTTCGGTTTGATCTA
-CGTAGATCAACGAAAAATGCGGGAGAAGAGACGCAGAGTTATCAACTGAT
-TTCGTATGGTTAAGAACGTGCTGACGATGTCACATATTTTTGAACAAAAA
-ATTCCCGCATTTTTTGTAGATCAAACCGTAATGGGGCAGCCTCGCACCAC
-GTGAAAAATTAGTTTTTGAGGCTTTTCTAGTCTAGAACTAAAGTTTTTTT
-TTTGATTGGCCTTGTTTTTTCTAGTCTTAAACACCAGGTAGATCAAAACA
-AATTTTTTTTCAGAGTTTCGATTTTTATGAATTTAAAACTTTCAAATTGT
-CGCACTTCCTGTCCCTTTCAACCCCAAAAACGTTACGATTTTGTGCTATC
-ATAATCATTAAACCATGCTTGCTTGTGTCAAGTTGCACAGGGTGCGCCGG
-GGGGGGAATTGGCATTACTGTAAATTTCCTGCGTCTCCATCCTTGCCCCC
-AGTGTCCCCATCGGCAATTAGAGAGTACGATCCGATTTTGCATATTTTAT
-TCACGTCGCCTCTTGTTTACTCGCTCTAAATTTCAATCCGTCGCCAACCC
-CCCCCCCCTGCCTGCCTCTTCCATTCATCATGAGTATTAGTGTATTGATT
-AATTTTCGAATTCACGAATGAATTCATTGCTGGCGCCCTGCTACTAGTAA
-TCAGTGAGGTCATAGCGTTGTCCTTTCGATAGGGCTAATTAAATGTTTCT
-CTAGGAGCGGGAGGATAGATTTGAAATCAGGTGGGCGTCGGTTTGATCTA
-CGTAGATCTACGAAAATCGCGGGAATTTAGACGCAGACTTCTCAACTGAT
-TTTGCATGGTTAAAAACGTGCTGACGTCATATTTTTAGGGGAAAATATCC
-CGCACTTTTTGTAGATCAAACCGTAATGGGACAGCCTGACACCATGTGCT
-CAGTTACAATTGGAGGGTTTTGTCGGAAAAAAATCAATTTTTTAAACTGA
-CAACACATTTTGCTCATTCTCCAAAACTGAGCCAAATGTGTTGTCAAACT
-TTTCTTGAAATTTTTTTGAATCGAAATTATGTTGAGGTGAATTTTCAAAT
-TTCAAAAAATGCCCCATTTCTATCAATTTGTCTTCACCTATGTTTTCGAA
-TAAGGGCGAGGCGAGAGGCAGGCGGAGGTCGCCTTAAGATCATAAGATAG
-CCTTATGTGATGACGAAAAATGCCAAAAAATGTATTTTTATATAGTTTCC
-CCGTGTGTAGAAAAATGTAAAAAGAGCATGCATTTTGTGCATTTTTTGAC
-ATTTTTCTGCATTTTTTTTTGACATTTTTTTTTCATTTTTCCACACAGAT
-GAATAGCGGAAAAACGGAAAAAAATACATTTTTGCATTTTTCATGATCAC
-ATGATCAACCCCATAAGGTTTTTTAAGGCATAATATTGATATTTTTTATT
-AGTCTACTTTGCATAATGCCTACTATTGAAGGCAAATCAAATCGACATCA
-CTTTTTGCTCATTTTCAAAACTGAGAGGCACGGCTTCTATGTTGACTACT
-AAACCAGTAATAACACTTATAAAATGTTTGGAAAACACTCATACACATTG
-CCACGTCATTTGGATGGAAGGGACCCCATTTGTTGAATCATAATTGATTG
-TTAAACTATCATCACTCTCCCCCCGCCCTCCTCATTGGACCCCACGGCTC
-CAAACTGTCTCCAATTTGCTCCCCGTCCTCTTCTTATCACCTTGACGCGT
-AATTGAATTTTTGCGGATTTCTTCCTCCCCACCGCTTCCTTTGCTCCTTG
-GGGGAAAAGTATGGAGAGTGTTTATGTGTGTGATTGAATTGAAGAAGGTG
-GCTGACTCATTCTTTCATTTTCCTCGCTTTCTTTGAAAGAACAACTTGAC
-AGTTTCCCCCCCCCCCCCCCATCTTATAATAATAATTACTTGCAGAGAAG
-CGTCGTGTTCATCGTCGTCGGAGCCGAGCTCAGAATTCGCGCATCGCTGC
-TCGAGGTGCTCGATGGCGTTCCGAAGCGAGTCGCAGCTGCAGACGCATTC
-CCTTCAGCACGTGTTCAACACGTTCCACAAGTGCCCCACGTGTGGCGATT
-CGTTTGATGAGAATACTATTGTGGTGAGTGAATTCACAACACTTTTGGCT
-CACAGTCACGCTTGATCTACGTGTTTTTAGACAATTTTGAGTCTACACGT
-GGTGTCAAAGTGTCTCATTTCGGCTTGATCTGCGTTGATCTACAGAAAAA
-TGCGGGAGAAGAGTTTTGGGCAAAAAATTCCCGCATTTTTTGTAGATCAA
-ACCGTAATGGGACAGCCTGGCACCACGTGCTCAGTTAAAGTAAGAGGGTT
-TTGTCACTAGATTTATTTTTTGTAAACTGACAACACATTTTGCTCATTCT
-CCAAAACTGAGCTAAAAGGGTTGTCAAACTTTTTTTGAAATTTTTTTAAA
-CGAAATTAGTTTTGCTAGTTTTCCTAAAAGGAGCAAAAAGTGTTGTCCAA
-TTTTTATAAGAAGGTTTTTGTCGCCTAATCGATTTTTGTAAACTGACAAC
-CCTTTTCGCTCTTTTTTCAAAATTAATTTTTTTCTTTTGGCATTAATCCC
-ATTTTTTGTAAATTAACAAAAAAATTTCAAAAAATCTTCAAGTATTTCTA
-CAGGGTGGCCTAGATTCTCTATAGGGTGGCCTACATTTTTACACTGGTTG
-TCTAGATTCTTAAACAGGGTGGCCTCGATTCTGTACAGGGTGGCCTAGAT
-TTTCTACACGGTGGTCTAGATTTTCACTGGTGGCCTAGATTCTCACACTA
-GGTGGCCTAGATTTTTCCACTAATAGCCTAGATTCTTTACAGGGTGTCCT
-AGATTTTCACACTGGTGTCCTAGATTCTACACAGGGTGACCTAGATTTTT
-TACACTGGTGGCCTAGATTCTCTACAGGGTGGCCTAAATTCCTTATAGGA
-TGACCTAGATTCTTAAACAGGATGACCTAGATCTTGACACTAGTGGCCTT
-GATTTTTTACAGGGTGGCCTAGATTTTCTACAATGGTCTAGATTTTTTGC
-AGGGTGGCTTGGATTCTTAAACAAGGTGGCCTAGATTTTTCACAGGGTGG
-CCTAGATTTTATACAGGGTGGTCTAGATTTTTACACTGGTGGCCTAGATT
-CTTTACAGGTTGGCCTAGATTTTCTATAGGATGGCCTAGATTCTTAAACA
-GGGTGGCCTAGATTCTTTACAGGGTAGCCTAGATTCTTCACAGGGTAGCC
-TAGATTTTTACACTGGTGGCCTAGATTTTCTAAAGGGTGGTCTAGATTTT
-TGCACTGGTGGCCTAGATTCTTAAACAGGCTGGCCTAAATTCCTTAGGGG
-ATGCCCTAAATTCTTAAACAGGATGACCTAGATTTTATACAGGATGGCCT
-AGAACTACTTTTTGTAAATCGACAGCACTTTTTGCTCGTTTTCCAAATCG
-TTTTTTTTTCAGACCCATATGTTGGAGCACACCAAAGAAGAATGCGAAAT
-GTGCTCTGAAACATTTGCCACAAAAGAGGCATTCCTCTCCCACCTGAACT
-CAGCCCGACACCTACAACAGGCAAAGAAGCAGCTGGAAAACTCACTGGTC
-GACTTAAACTCTCAGGTGAGCCGCCGCCGTGCCTCCTGCCGCCTGGCTAC
-CGTAATCACCGTACCCATTATTTAATTGATTTGCTTTTAGCCACGCCGCT
-GCTGCTCGGAGCGCAGAGGTGACAGAAAAAGCCGACAAAAAACAACATTA
-AAATTATTACACTTTTTTATGATTGAATGCGAGAGAGATGTATGTGTGTG
-GAGAGATGGAGAGGCGCATGAAATGGTGTTCGGGTTCCATAGCAAGCTCA
-TTGAGCACAATGATTTTTTTTTAAATATATTTTATTGGAAATGACAGAAG
-CTGAAGCTTGAAAGGAACGTCCAGTTTTAAATTAAAGTATTGATTTAGCA
-CGTAGTTTCAGCATGTCCCATCACGGTTTGATCTACAAAAAATGCGGGAA
-TTTTCTTCCCAAAAAATTTGACGTCAGAACGTTCTTAACCATGCGAAATA
-AATTGAGAACTCTGCGTCTCAACTCCCGCATTTTTTGTAGATCTACGTAG
-ATCAAACCGAAATGGGACACTTTGACACCATGTGATATTTAAAGGGTCTA
-GAAAGAACTTAAAATAGCCTAGCCAAGAAATGGGCGGAGCTTTGGTAGGA
-ATTTTCATAAGTCGAGGACTCCGCCCATTTCTTGGCCAATTTGGGTTTTT
-GGCCTTCAATTTTTAGTGTTCACTAATTTCCAATAAGTTTAGGATTGAAA
-AAGTTTTTGAGGTGAAAATTGATCCTAGCATAGGCTCCGCCCATTTCTTG
-GTTTTTTTTTTGTTTTTTTTTCTTTTAAACTAAAATTCCACTGAACTTGT
-CTAATTTCAGTTTCCAAAAATTTAACGAAAAAATTCGAAATGCCAAGAAA
-GGGGCGGAGCCTAAGCGAAGCCTATTTTTCGATGAAATTTGGCCAAGTTG
-CGATGTTTTTGAATTTCATATTTTTGAATCAAGTTTTGAAATAAAAAGTA
-ATATAAAATTGGAAAATAGGCTCCGCCCATTTATTGGCTTTGTTGGATTT
-TTTACTGCATAGATCACATTTTTGCATCCGAAAATTTATCGGAAAGGAAT
-TTTTTTTCCCAATTTTTTTCCGTAAACTGTATCATCAAATTCTTTTGAGA
-TTCAAAATATCCAACATAAGCACGGGGTTCTGGCCTTCCTCATTGAATTT
-TTCGCGCTCCATTGACAATCGCCTGCCGGACAACGCGTGGGAAAGTCGTG
-TACTCCACGCGGACAAATACATTCAGTTTTACGCGCCGTAAATCTACCCC
-AGATATGGCCGAGCCAAAATGGCCTAGTTCGGCAAACTCTTTCATTTCAA
-TTTATGAGGGAAGCCAGAACTCCGTACATAGGCGCAATAAAAGGTGAAAT
-AGGCTCCGCCCATATCTTGGATCGGTTCCAATAATGTATCCAAATTGACA
-TGTGTTAGTTACACTTGTTCCTAATCCAAAATTCTATCCGAATTTCAATT
-TCCCAAAGTCAAAAAGTCAACAAGTTCTGTTCTTATATGTGTAAGGCGCG
-CGCGAGCGCGATCGTTTGTCTCTAGTATTTGCTCATCTCTCTCTCTCTCA
-ATTACCGTACCCATTATCATTCCGCCCATGGATGATGATGATGATGAAAA
-TGAGCGGTGGGCCCCCTCTTCCCCTGCCTCTTTTCGCGCATTCATCATGT
-TTGTACAAAAGGCGGCGGTTTGAGAAAAGAAGACAGTGAGAGGGAGGGAG
-AGAGAGAGGTGATGAAGGTAGTAAACGTGTGTCGACAAACACATATAGAG
-AACGATTCGTGTGAAATAGATGAGGGCAAATAGGACGAATTTATTTAAGA
-GAAGAATAAGATGCTTTGGCCCAGATGAGGGGGGGGGGGGGGTATCATGA
-AGGTGTGATGACGAACCATATTCCTTCAATGTTTGTTGCTCGCTTAACCG
-CCGTCGCCGCAATTTAAATTGTTTCGACTGGGTGATCAGACAAATAAGAA
-GACGTAGACGGTTTTTCTTGGGGGGGACGTTCAGCTTTGATTCCTTTCAA
-ATAATCGATGCGGCCTAGCTTTCTGATCTCCAGAAACCGCGGGCCTTCTT
-TGCTAAATTTTAAGCGATTTTACTTCCTCCCCCCCCCACTTTGATCTACT
-TTAACAGCTTATATCTCGGTTGTCTTTAGCTTCATCAAAAAGTTATCAAC
-TAACAAAGTGCGTGCCAAATATACTTCTACAATTCGGTAGTTAGTATTTT
-TTGGATAAAAGTTAAGACAACCGAGATATAAGCTGTTGAAGTAAATTTCT
-AGTTTGACTTACTCCCCCAATTTTGATCTACTTTTACAGCTTATATCTCG
-GTTGTTTTTGGTAACAGCAAAAAGTTGCCAACTAACATATTACGTGCCAA
-ATATTTTTCTAAAATTTGGTAGTTGAAAATTTTTGAATAAAAGTTAAGAC
-AACCGAGATATAAGCTGTTGAAGTAGATTTCTAGTTTGACTTACTCCCCA
-AATTTCGATCTACTTTGACAGCTTATATCTCGGTTATTTTTGGCAATATT
-AAAAATTTGTCAACTAACAAATTACGACCCAAATATTTATCTACAATTTG
-GTAGTTGAACATTTATGTTAAAAGTTAATACAGCCGAGATATAAGCTGTT
-GAAGTAAAGCAGTGGTGGTGCTTAGCTCGACCTATATTTTTGAATTGCAT
-AACAGTTATAACTAACTTATTTTATGTGAAACCCTATTCTAGCTAGTTGA
-CTTACAAAATCTCCAGAAACTTTTGCCTGCCTACCACCTTTAGCAGCATA
-AGCGCCTATAGGCACACCTACTGCCTACACCTATGCCACCTACTGTACAC
-CTACTGCCCATACGCCTACTGCCTTTTGCCTACTTTCTACATAACTTTGA
-ACTGCCCGTTTCTAACCAATAATCTTTTACAGGACGTCGAAAAGCAGCGT
-ATTTATGTGTGCAACGTCTGCAAACAATCCTATCCACAAGCGGCTAATCT
-CGACGTGCACATGAGGTCAATGACACATCAGAGCCGGATGAGCCGGCTGT
-CCGAACTTGTGGCAACCGGGGAGCTTAATGGGGAGAAGGCCGTGTTTGAG
-CAACCAGGAATACCGGCACCGACGATAAACAGCTTCATTGAGACGGTAGG
-TGAGGGGTTTGAGCAGGCATAATCCTGAAAATCATCTGTTTGGTTTCTGT
-GAAAAACTTTTGTGCGGAAAATAGTTTATTTATAGTTCAATTTGAAAAAA
-ACTGGTTTCCGATTTTCAATTTTCAATTTTCAATGTTCGATTCTCGATTA
-ATAAAATTTCCAATTTCCAATTTCCAGACAACCAACCAATCCTCACTGAA
-CGACCTGATGTCACTGCTCACACGAAGCGAGTCGGATGAGATTCGAGAAG
-AAGTAAACGGCCTTCAAGTCATGACACAGATCAAAGTCTACGGTGAATCC
-AAGATCACTAGCCTAGTCCCAGAGTTGGCCGGGAAAATCGATAACATCGC
-GCTCTTCGATGACTCCCGTGCGGCAGAGGTGTCGAAGATCGATTGCTCGG
-CTTGTGGGCAGCAGATCTCAGGGATCCTTGCTTTGAACCTCCATTATGAA
-GAGTCCCACTCATCGAAGATCCCGAGTGACGTGTTAAGAAAGTTCGGAGA
-GCGGTTACTTGCCGCATTAGAGGACGGGTTGAGCAGAGAGAATTCCGTGA
-AGAACGGATCGCAAAGCCCTCTGAGCAATGACGATGAGCCCATGGAGAAG
-AAGATGCGGCTGGAGAATATGCTTCCTGAAATGGACAAGAACGCGGCAGC
-GTCGCAATTCGCAATGTTCCAACAAATGATGAACTGCTTCCCGTTCATGG
-CACCACCAGGCACGTCTAGTGGCAACTTTGGCTTCTCGCCAGAAATGATC
-AATCAGCTCATGAATCCTGCGGCGGCGGCGGCGGCGGCGACTGCAGCAGC
-AGCAGCCCACGCTGCCAACAACTCGCCGGCGAAGAGAGCAAGAACACGGA
-TCACTGATGATCAGCTCAAAGTTTTACGGTAAGTCGTCTTGTGTGTGATT
-ACTGTAAGCTACGGCGAACAGGAGAGACCCGAGGGGGGCGGTGGAAAATG
-AATTGCAAACAATAGGTGGGAAATGGTCGGCGCCGTGATCAAAATGAATG
-AGAAATGAGAATGAAGAACAAACATTGTGTGTGAGTGTGTGTGTGTGAGA
-CGAGACGAAAATCAATCAATTTCTGGAAAAAACAACACATATATTTTCCC
-GGCGAACTTTCTGTTTGAGGGACCGTACGGAACAGGACCCCCCTGAAAAA
-AAAAATCCGGAAAATCCTAAGCCTAAATAGCGAACGCTCGCCACTGACGC
-CAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCCAGCCCAAGCCTAA
-ACAGGAACCCCCTGAAAAATCAAAAAATCCGGAAAATCCTAAGCCTAAAT
-AGCGAACGCTCGCCACTGACGCCAAGCCTAAGTCTAAGCCTAAGCCTAAG
-CCTAAGCCCAGCCCAAGCCTAAACAGGAACCCCCTGAAAAATCAAAAAAT
-CCGGAAAATCCTAAGCCTAAATAGCGAACGCTCGCCACTGACGCCAAGCC
-TAAGCCTAAGCCTAAGCCTTGGCCTAAGCCCAGCCCAAACCTAAGCCCAA
-GCCTAAGCCTTTCACCTTCCTAATTTTCAGGCAGGCCCTAAAAACCGCGC
-CTGCCTACCATGGAAGCCCTAATCTGTGCGCTTTAGATTCTGAACCCTTA
-AATATGTTGCACGGCCGGGCAAAGGGCACATCAGTGTAAACGCGCTCTAC
-TGATAATTCGAGTTTAGCCAGGTTTGGGCGCGTTTCAAGGAAAAAAACTT
-TGGCTCAAAAAATTGTGAATTTATTTTCGAACATTTTTATATGCATCACA
-AAAATGTTAGACCACCCGTTTTTGAGAAAAACGCGCCCAAACGTCCAGGT
-ATACGGTAGACAAATTGCGTACAGGTACCACTGGGGGGTCGTGTTTGGGC
-TTTAGTTTAGCTAAGGGAATCTGTAGCGGCCCAACGGCCTAACTGCAAGC
-CTCAGCTTATTCGCCATAGGCTTGTCTGCCGTATTTCAAGCCGATTCCAA
-CAAAAAACTTCCAGCCAATACTTCAACATCAACAACTCGCCGTCAGAAGC
-GCAAATCAAGGAGATGTCACAAAAAGCGAGCCTTCCGGAGAAAGTCATCA
-AACACTGGTTCCGCAACACACTTTTCAAGGTTTGTTTATTTATTTTACAA
-AACTATTCATATTGTTATTAGGCTCGGAAATGAGCGAGGTGAGAACATGA
-GTGTGGTAATTAGTCATCGGATGAATACCCACACAAGAGGGAGAGCAAAC
-AAGAGAGCAATTGAGACGAGGGAGGGAGAGAGGGAGAAAATAAGAAAATG
-TTAATGTCAGTTGGGTGCCAGGCGCTCGGCCAGGACCACAGGCCGGGAAC
-CATTTAGTTTTGATTACGATTTCCGTCGTGACTCATGATGGGAATTGATA
-TTTGTGCCTGTGGTGATAGAATAGTTAGAGCAACTATCAGGAAGGGGACA
-AGTCGCAGTGCGAGACTATTAGAACCTGCAAGGTTTATTCTGATAGATTT
-GGGACTAATAAGGACTAATTTGGTAGAGACTAATTGGCTCTCTTGATATA
-TACCAGCTTAATAATTTCTACAAAAAAAACTGTAAGAACGCTTCGAGATT
-CGAGCTTCGGGAAAGCTTAAAGGATGGGTACCGAAAAATTTTTTTTCCCT
-GATTCCGAATATCGATGTGGAAAAATTCAAAAAAAATTCCCTGATTTTAT
-ATTTGAGCTTGAAATCACGATTTTCATTTGTGCCCACCTGGTGTCAGAAT
-GTCTCATTTTGGATTGATCTACGTTGATCTACAAAAAATGCGGGAGAAGA
-GACGCAGAGTTCTCAACTGATTTTGCATGGTTAAGAACGTGCTGACGTCA
-CACTTTTTTGGGCAAAAGCAAAAAATTCCCGCATTTTTTGTAGATCAGAC
-TGTAATGAGACAGCCAGGCACCATGTGTGTGCCCCGGTTCAATTTTCAAT
-TTTTTAAACCAGTTTCTTTTTTTTTAGTCGATAGGTTTTTTTCTGAAAAA
-TATTTTTTTTGCCAAAAATGAATGTAACTGGCTAAAATAAACTAAAAATA
-AAACGATGCAAGCGCGCTCAAATGCGAATTTATTTGGGCGCGAATTTGAA
-AAAAGTGATGCGGGCACAAATGAAAATCGGCGATTTTAAGCCTAAATATA
-AAATCAGGGAAATTTTTTTGAATTTTTTCACATTGATATTCGTAATCAGG
-GGAGAATTTAAAGCCAATTAAAAATATTTTCCAGATTTCGGTGCCCCACC
-CTTAATGAGATAAAAGAGCAAAAAAGGTGTTTTGTAACTTTTTAAGTTTT
-TTCTTTTTCAGGAACGCCAACGCGACAAGGATTCCCCGTACAACTTCAGC
-ATCCCTCCCCAAATGGGAATCGACTTGGACATCTACGAAAAGACCGGCGA
-GACAAAAGTACTGTCGCTTAGCAATGAAGCACCAAAGTCTGAGTTGAGCT
-CTGCGCGCGCCACACCGACAATTCCGACTCCGATACCGCTCATCGTTGAA
-GAGAAGAAACCGGAGCCAAAGAGCCAGACACCATCGTCTTCTTCCTCTCA
-GCTCAACCTGCAGGCTATGTTATCTCAGATGCAGGGAAGTTTTTTCGACG
-CGTCAAACTTCATGTCAGCATCAGTGAATCCGATGACACCGAGCACTCCT
-TCCTGCAACACGTCGTCCAGTGGACGACGAGCCAATCGCACGAGATTCAC
-AGATTTCCAGCTGAGAACTCTACAGCAATTTTTCGACAAGCAAGCCTACC
-CGAAGGATGATGATCTTGAAGCGCTGAGCAAGAAGCTTCAGCTGAGTCCA
-CGTGTGATTGTCGTCTGGTTCCAGAATGCACGGCAGAAGGCCAGAAAGAT
-CTATGAGAATCAGCCGAATCACGAGAGTTCCGATCGATTTGTGAGAACGC
-CGGGATCGAACTTTCAGTGCAAAAGGTTGGTTTTAGTGTTGGAAATTAAC
-ATTTAAATTTAAATTTTCCTAAATTCCAGGTGCAGCCAAGTATTCCAACG
-CTACTATGAACTCATCCAACATCAACAGAAAAAGTGCTACAAAGACGATG
-TAGCAGCCCTGGCAAGTGACAACAAGAGTGTCGAAGAATCACTGACGGAA
-GAAGAGAAATCCCAGCTTCTGGCTCAACAACAGGTCGCCCAACTAGCCAG
-CACTCTGGAGCTCCCAAAGTTCCAGCCGGCAGAGCTTTTGAAAATGATCG
-GAGCTAATTCGGTGACTCCATCCTCGTCGGCTGCAAGTCAGAAGTCTAGC
-AACGACGTTCTGCTGAAGATGTGTGAATCGATTGTTGGTGGGAGCACACC
-TAGTACATCATCGTTCCACAAACTTTGTATATTCTGCGCTCAAGACTTCA
-AGGATCGGAGTGCGATGAGTGAGCACATGGCTCAGAAGCATCCCCAGCAT
-ATGCTTCTTCCAAACTTCGATCTCGACATGATGCCAGACGCTGGTGGTGC
-AGAGCTTCTCATGGATCTTAAGGACTCTGCGTTGGATCTTTCGGGCTCTT
-CAGTCGACTACCGGGATTCTATCTCAACATCTCCATCTCGATCCGAAGAT
-GATGTTCTCACAGAGGCTCTGGATGATTCTGCATTTGCCGCGTTCGGACT
-ACAGCTTGCAAATTCCACAAGCGGCTCGGAATGCAGATCTCCGGCGAGCA
-ACAAGAGATTCCGAACTCATCTCACACCGATGCAAGTGCAAATGATGAAG
-AGCGTGTTCAACGAGTACAAGACCCCATCCATGGCAGAATGTGAGCTTCT
-CGGCAAGGAAGTCGGCCTTCACAAGCGTGTCGTTCAAGTCTGGTTTCAAA
-ATGCGCGAGCCAAAGAGCGAAAGACGCGCGGTGCAGTTGACGAGGACTCT
-CGATCCGGAGAACTTCACTGTGAAATTTGTGATAAGACGTTCGCGACGAG
-GCTTTCGCTGCAAGACCATCTGTTTGCCGAGCAGCACATTGAATTTTTAA
-GGAATAATCTGAAACGGGAAGGGGTCTCCGAGTTGACGACCGCTTCGGTG
-ACCGAGTGCTCTCCAGAGAAAAAGTAAGAAATTTAATTTTTAATTTAATT
-TTACATATATCATTACCCTATATAACCTTAAAAATTTTCCAGAGCAAAGC
-TTCCGAACCCGCTGGATCTTGCCAGTTTCCCGTTCCTCAACACGTTCGAC
-ATTCAAATTTACGGAACACCCATCGCCTTTCTGCAGGTGCCTGATGAGAT
-CAAAAAGCAGATCACTGATGATATCACGGCTGGAAAATCGCGAACCACGT
-TCTCCCAGGACGGTTTTCCGCTCGACAAGTTGAAAGAGTCGCTGCCCGAG
-GATGAGAAATCAAATTTGACAGTAACCCAGAAAGATGTGAGCTTTTTTTT
-TTTGGGAAAAATTTTGAACAATTTGGCAATTTCAGGTCGGATGGGCGTGC
-CCGGCATGTACATTTGTCTTCCAAGAAGAAAAGAAGCTCCGTGAGCATCA
-AAAAGCCATGTGCCAAAGTGATAAGGTGGGCAAGAAATTAGGAAACGGGC
-TTGAAGTTTAGCTTATAGTTAGGCAAGTGGTGTCAGACTGTCTTTGATCT
-ACAAAACATGCGGGAATTGGAATTTTTCCCAGAAAAATTGTGAAGTCAGC
-ACGTTTTTAACCATGCAAAATCAGTTGAGATGTCTGCGTCATTTCTCCCG
-CATTTTTTGTAGATCTACGTAGATCAAACCGAAATGAGGCACTTTCTGAA
-TCCACGAGCTAGGCTTAAGCTTAGGCTTAAGCTTAGGCCTTTTCTCAGGC
-TTAGGCTTAGGCTTATGCTCAGGCTTAGGCCTTTTCTTAGGCTTATGCTT
-GGGCTTAGGCTTAGGCGTAGGCTTAGGCTTAGGCTTAGGCTTATGCTTAG
-ACTTAGTCTCACTATCAGTCTTAGGCTTAGGCTTAGACTTAGGCTTAAGC
-TTAGGCTTAAGCTTAGACTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCTT
-AGGTTTGGGCTTAGGCTTAGGCTTAACCTCAGGCTTAGGCTTAGGTTTAG
-GCTCAGGCTTAAACTTAGGCTTAGGCCCAGGCTTAGGCTTAGGCTCACAC
-GTTCTCACGTTCTTAACCATACAAAATCAGCTAAGAACTCTGCGTCTTTT
-CTCCCGCATTTTTTGTAGATCTACGTAGATCAAACCGAAATGAGGCACTT
-TCTGAATCCACGAGCTAGGCTTAAGCTTAGGCTTAAGCTTAGGCCTTTTC
-TCAGGCTTAGGCTTAGGCTTATGCCCAGGCTTAGGCCTTTTCTTAGGCTT
-ATGCTTGGGCTTAGGCTTAGGCGTAGGCTTAGGCTTAGGCTTAGGCTTAT
-GCTTAGACTTAGTCTCACTATCAGTCTTAGGCTTAGGCTTAGACTTAGGC
-TTAAGCTTAGGCTTAAGCTTAGACTTAGGCTTAGGCTTAGGCTTAGGCTT
-AGGCTTAGGTTTGGGCTTAGGCTTAGGCTTAACCTCAGGCTTAGGCTTAG
-GTTTAGGCTCAGGCTTAAACTTAGGCTTAGGCCCAGGCTTAGGCTTAGGC
-TCACACGTTCTCACGTTCTTAACCATACAAAATCAGCTAAGAACTCTGCG
-TCTTTTCTCTCGCATTTTTTGTAGATCAACGAAGATCGAGCCGAAATGAG
-GCACTCTGACATCACGTGGGCTAAGACTTAGGCTTAGGCTTAGGCTTAGG
-CTTAGGCTTAGGCTTAGACGTAGGCTTAGGCTAGTTATTTGTAACTTTTT
-TAAATCTCCCCCGAGTCAAAAAAAAAAACAATTCAATTCCAGACGCTAAC
-CCTGGTGCAAACCCACTACTCGTGCAAAAGCTGTCAAAGTGATTTCTGTC
-TTCAATCCGAGTATCAATTCCATCTCTCAATGCCTCCTCATACTACTACT
-ACTACCACGACGACGCCATAACAAAACCCCCCAAATAGTCACCTCATGTC
-ATTTCATTTGCCGTCTTCACTCAAGGACCTATTTCCGTCTCTCTCTCTCT
-CTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTCTCCTCTCG
-CCTTAAAAAAACCACAACTCCTTATCCCGATCTGAGCTCACTTCCTATCC
-CCCAAAGTAATTTCTTTGTAATATCTATATCCACTTTTTTTTCGACACAC
-TACACCACATCCCGCCGCCTATCCCCTCCCCCCCCACCGCTTTATGACAC
-AAAAACTGGTTTCGCTTTTGTCTTCAATTTCACCCCAACCGCCTGCAGCT
-TCTCATAATAATTAATAATTTTTCTTACCATGCACAATGATTTTGATAAA
-TATATATATATATAGTCATCAGGATTGCCCCCTTTCTAGGATATGTTTTT
-TTTTGTCTTCACACAATTTTCCCATTTTCTATGATAAGAATTATTTCTTT
-GTCCGGTTGACACATGTAGATGTTCCCCTTCCAATTTTTAATAGATTTCT
-ATTCTAGTTTTTTGCAGGCCTCACTATTCTATTGCAATAATCACTTGGAT
-TTCATGTATGGAACGCAATAATAATTCAATAAAATATTGGTACTTCTTTT
-TTGAAACACACTAATTCAAACTCACGCGGTTCCAGGCTGTCCCATTACGG
-TTTGATCTACTAAAAATGCGGGAATGTTTACTCCCAACAAAATGTGACAT
-CATCAGCACGTTTTTAACCATGCGATATCGGTTGAGTACTCTGCGTCTCT
-TCTCCCGCATTTTTTGTAGATCAAGCCAAAATGAGACACTATGACACCAC
-GTGTAGACTTAAAATTGACTGAAACCACCGAATTTCATATTGAAACTTCT
-TGAAATCTATTCAAAAAAAAAGTTATGAAGGCTCAAAAAATGGCCTAAAA
-TTTGTTAATTTAAACAAAAGACACTTAAAACGGTGTCTTTTTGAATTTTT
-CCGTTTTTTTAAACATATTTTCATAAAATTTACTTATTTTTCAAAATAGA
-TGTTGGAACATTTATAGGATGCGTTCAATTTTGCCATTTGAAATTGAAAT
-TCGGAAATTTCAAAAAAAAAAAAAAAAAGTGCGAAACCAAAATTTTCCGA
-AAATTTTCGGCAATTTGCCGGTTTGCCGGAAATTTCAATTCCAGCGATTT
-GCCAATTTGCCGAATGGCCGGAAATTTCAATTCCAGCAATTTGGCGATTT
-GCCGATTTGCCGGAACCTGCTAACCTACCTACTAACTTGCTAATCTTCAA
-GGTTTTTAATGAGTTTTCAATAGAAAATTCGGTGTTTTCAGGCAATTTCG
-AGAAAGCAATACAAACGTTTAACAAAAAAAAGACGCTTTTTCCTCTTATC
-CGATTCTCAATTCTCAATTTTGCCTTATCAATTTATCCTCTCCTCACAAG
-GTGACACACACACACACACACACACACACACTCGTTTCTCGACAAAAAGC
-TATGAGCTAACAAGCGCCTTCTCGCGTAAGAATACATCCACTGATAAGAC
-ATCTGATAAGAGTGGAACCCGTCCGCCATTGTCTCGAGAAATACACGCCT
-CCGCCCGGGAGGACAGGTTATCCCACCTCGTCGCTTCACTTCATTGTTTC
-AAACGATTCCATCGGCTTGCGCTTGGATTTTCTCTTATGCAACTTGCCAT
-TCTTCTTTTATTGCTTAACATCATGGTTATTTATTAGGGAAATTGTTCTA
-CCCTGACTTGAAATGACTGAAGACGGCCTATTTTACTTTAATTTGAAGAC
-TCAGAAGACTACTATAAGCGGTCATTCTTGTTGCGAAAATTTCTGCATTT
-AAAGGTGGAGTAGCGCCAGTGGGAAAATTGCTTTAAAACACGCCTATGAT
-ACCACAATGACCGAATATCATGATAAAAAAATTCAAAAAAATTTTCTAAA
-TTTTATATGATTTTTTGAAAATTGAAAAAATCTAAGGTTTTCACTTAATT
-CATATTTGAATTACCGCCAATTGGATTTGCTCGATGGAGCGCACTTGCAC
-GTTTTTAAATTTATTTATTTTATTTTTTGTTATTTTCCACCGATTTTTAA
-TGTTTTCGGTGTATTTTTGCTTGAATTTTAGAGAAAAAGTCAAAATAAAT
-GCAAATTTTCGATTAAAAAGCAAGCGTACAGGTAAATCAGTGAAATTAAT
-CAATTCAGGTTCATTTTTACGCCTGTAAGCGTGCTTTTTAATCGAAAATT
-TGCATAAAAAACATTTAAAATGGGTGGAAAATAACAAAACATAAAATAAA
-TAAACTTAAAAACGTGCAAGCGCGCTCCATCGAACAAATCCAATTGGCGG
-TAATTCAAATAGGAATTAGGCAAAAACTGAGATTCTTTCAATTTTCAAAA
-AATCATATAAAATTTAGAAAATTTTTTTGAATTTTTTATGGTGCGTCCAT
-AGAAAAACCGGAGTTCCTCGCTTTTTTTTCCTCGAAATTCAAAAAAGTAG
-GCGTGGCCAACCAATCAGCTGTTGTTTCTTGTTTTCTCATTGCTCAGCTT
-AAAATTTTACAGCCTCTAATTGGTTGAACACGCCCACTATTTTGAAATTG
-ACCAATAACAAAGCGAGAAACTTCTTGTTTTTTCCGCAGACTATGGACGC
-TTCCGCACGCGGGAAATTCCCGTTTTCCGCAGACTATGGACGCACCATTA
-TCATGATATTGGGTCATTGTGGTACCATAGGCATGTTTTAAAGCAATTTC
-CCCACTGGCGCTACTCCACCTTTAATGCATTCTGCGTCTATTTTATACAG
-TTCTGACCATAAAAGCACACAAATTTTTGTCTCAAAGTTTAGGAATATAT
-AGATTTAAGGAAGAAAGTTTTAGTAAGAAAAAATATAGTCTTCTTCATGT
-TTTCTTTTTTTTTACAATATCCATTTGCCATCCGTTTTTTTTTCTGCAAC
-CTTCGATAAATGTTTGCTTGGATAACTATGTAAGGTGCTTTGAACACTCG
-GCATTTGGGCTTCTTGCCCAAGTTTAGCCCAAAAATATTAACTTGGATCA
-GAAGTTGGGCAATACTTTGGCAAAACTTGGATTCAGGCAATATCAAAGTT
-TAACCCAAGTTTCACCCAACAAACTTTGGCCTAAACTTTTTTTGTTTCGA
-ACTTGCGTAGAAGTTTTTGCCCAATTTTCGCCCAACTTTTGCCCAACTTT
-TGCCCAAGTTTAGCCAACTTCTGTTCCAAGTTAATATTTTTGGGCCAAAC
-TTGGGCATGAAGCTAGAGCCGAATGCCGAGCTAATTTTATTTGACTCTAT
-CCGAATTCTGCTAATTCTCAAAAATCCCCCAATTGCCAACCATTTCAGAA
-TGCATTGGAGTAGTTGGGCGATAGCGCTCAACGTGCTCGTGCTGGCTTTG
-GCCGACAGTGCTCCTGAAAGATTCCCAGAGGATCATGTGGACCTGGTACT
-TCCTATGAAAAGTATCCACCATTTCACCTAAACGTTTCCTAATCATCTTG
-ATTACAGTGAAATACGACAGTCATCTTCGACAAGCTGATCTTCCACCGCA
-CTTCATTGGTGCCAATGAGACGAACTTGGTTCCGCTCACCTTGAGATTGG
-AGACTAGGAGGAAGAGATGCTCGTGTGGATGTTCGGGATGTGATCTTTTC
-CCGAATAGATCTTGTTGTTCGAGCTGTAAGTTTGCGATTCTATAAGACTT
-GTCAACGTGGTGTCAGGCTGACCCATTACGGTTTGATCTATAAAAAATGC
-GGGAAGTTTATGACCAGAAAAAAATGACGTCATCACATTCTTAACCATAC
-GAAATCAGTTGAGAAATCTGCGTCTCCCATTTCTTCTCCCGCATTTTTTG
-TAGATCTACGTAGATCAAGCCGAAATGAGACAATTGAAATTCCAGCTTGC
-TGCTCCTCTCAAAAACCAATCCCACTTGCCTGCTGTCCGCCACCTCCCCC
-ACCAAAACCGTGTTGCCAGCCAGCCTTCGGCCCTTGCTGCCCGGCAACCC
-CAAACTGTTGCCCGAAACCCTGCTGCCGAGGTCGTCGCCCCGAATACGAA
-GAGTACGAGGACGAGGAAGGCAACCCTGGAGGCGTCCCAGCACCACCAAA
-CCCACCAAGAACTTGCTGTCCTCCACCAACACCTGCTGCTCCACCACCGC
-CACCACCTCCACCACCACCGGCTCCGGAAGCTCCAACGCAATGCTGTGGA
-TCACAGCCTTATGGAAGAACACCGTGCAGGTCCGGATGTCCGAATGGAGA
-TTGTGGATGCGGAAGACCTTGCTGTTACTATCAGAACCCCACATGTTGTA
-ATCAAGGGCAAAAGGCTTGCTGCCCACCTGAACAGCCTTGCTGTCCTGAG
-TTGAAGCTGGATAACTGCCTCGCTTCGGTCCCACCTTGCCTTCGCGCCTG
-TCCATCGTGCCCTTGCAGAAAACGTCTGATGCTTGGGAAGAGAACTAAGA
-GAGACGCACCGGGGCTTCATTGCCAGCCAAGTAAGCTATAAGTTTAGATT
-TTCACGTAGTGTCAGGCTGTCTCATAGTGGTTTGATCTACAAAAAATGCG
-GGAATTTCTCGCCCAGGAAAATGTAACGTCAGCATCAGGGCTGGGACCAA
-AAAAAAAATTTTTGGACCAAAGAAGTTTTTGAAAAACCAAAAAAACCAAA
-AAAAAAACAAAAAAAAAACCAAAAAATTTTTGATATGCTTAAGTTGATTT
-TTAATGGGGTTATTCAAGTAATGTTGCAAAATGTATTAAAATACATTTAT
-GACGTCACAACTGTGTTAAAATACATGTTTTAATGTATTTTAATACAGAA
-TAGTCTCGAGTCGACACTAGACACGGTAAACTTTTTTTTTAGATTTTTCG
-TCAAAATACCAAAAAAACCAAAAAATTCCCAACAGCATGTTCTTAACCAT
-GCGAAATCAGTTGAAAAGTCTGCGTCTTTTCTCCCGCATTTTTCGAAGAT
-CAAACCAAAATGAGACACTTTGACACCACGTGGATTTTCAAAACGCTGAA
-AATAAGTAAAATAAATAAAAAATTTTCAGTCGGACTCCTTGGTCAACAAT
-CCCCACCGACTCTGATTTCAAAGCCGGTAAAGACCATAATAAAATCAAAA
-TCCCGCGTTGCTGGAACCAAGACATCTCAAGTGTCCGTCACCAAAAAGCT
-CATCGAACAATCCTCTGACCACGTGGAATCGCCTCCAACAGCCGGAAGAC
-TCTACGACTTCCGAAGAGCCCACGTTCGAGTCAAGAGAAACATGAACTTT
-GGAAATGGAGCATGCCAGCTGTGTCTGAACGGAACTCCGCTCAAGAGAAC
-CAAGCGGTCTCTCGATTGTGTTCCGTGTACCTACCTACAACCACAATACT
-CTGATTGGAACCCGTTCCTCGGAGATCAAACGCCACGCGGATCGCAGTCG
-CCAGTTGGAACTCCACTCGCCGGGCACAGAACTAAGAGAGCTGGCGTGAG
-TTTGACTCATAGAAATTAACGAAGCTAAATTTATTTTTGCAGTGCCTTCC
-TCATCCACAATGTACCCTGCATGTCCGTCGCTATAAGAGAAACCTGATCG
-GATCCCAATATTGTGAGCCATGCAATGGACACTACGGTAGAAAGAAGCGG
-GAAGCCGAGAGAGATCAGTGCTTGAAAAGAGAGAAAAGATATGCAGATGA
-ACAGTGTGATAACGATGAGTTCAGTATCAATGAGCGAAGCAAACGACAAG
-CCTACAATCCAAAAGGAATTTTGGATATCGTGAAGCTCCTATCCAAGGCC
-TCCTCAGGTGGCAACAATCCAGGAGGATGCATGAAGTTCCCAGCCTGTGT
-TCTGGCTCAGAAGAAGAGAAGAAAGAGAAATGCAGATCGGCTCGACACGT
-ACTACAAAGCTGTGGAGGAGCACAAGAAGCTGGTGGAAGAGTACGAGATG
-GCGATGGAGGAGCACAAGAGAGTCAAGCGGCAGTTCTTCGCTCCGGATAA
-TGCTGCATCCTGTGTTCCGTGTCCGGCATGGGTGACACTTGCCTTGGCTA
-GCAGAAAGAAGAGAGAAGTCGAGAAGGTGGAGAAGCATATGACGATGAGC
-GAAGCTATCGCGGATATCAGAGCAAAGAAGGGGTATAAGGAAGGATTTGA
-TGATGATGATGAGGTGAGGACTAGACCTGAAATTTTAGATCCTGTAAGAA
-CTTTTTGAAAATTCCAAAAAAAAAACCCCCTAATTGAATCACGCGCGCAC
-GCGCCACTGAGAAGGATACTGTATTCGCGGCGAGACCACCTGCACATCTA
-ACTCCCAAAAGTGACGAATTTGGCCTAAAATGGACTTTCTTCATGGGATT
-TCCACAGTTTTCACCATTTTTTTGACACAGTTCATGACTTTTTACACTCA
-AAAAATTATTGGCGTGGTCATTTCACAATGATTTCAACAATTTACTGGAT
-TTTACGCGTGTACTTCATCGTGGCACACCAAAAATTGATCTGGTTCATGT
-GGTGTCAGAGTGTCCCATTTTGGTTTGATCTACGTAGATCTACAAAAAAT
-GCGGGAGTTGAGAGACGCAGAGATCTCAACTGGCGTCACATCAATGCGGA
-TTTTAAAATTTTCATTTCAGGACGACGAATCCTCTGAGGAAACCATCGAG
-ACCCGCAGAAAGCAACGCCGCTCCTGCCAACAAAGTGACGATTGCCTGAA
-CAACGTCGAGTACGCAGTCTTCCAAAAAGTCTATGCAGACAAGAGAACCA
-AACGAGAAGCCGTGTTCCGTCGTAAGAAGTGCTCGAGGTGTGGAGTCTCT
-GGGCTCACGCCACATCGTGTCAAGAGAAACTTCGGGCAGCCGAATATCAA
-CGTCTCGGAGCAGAATTGCATGGCATTCCCACAGTGTCGGCATAGAGTGA
-AGAGAAACTTTTTGGGAGAAGACTGTAACATCTGTACACAGGATACTGGT
-CTGAAGCGGAGGAAGAGAGACTTCGGAACAGCGGTAGGTGTTGGTTTAAT
-GAGCTTCCTTATCTTAAAGTTTTCAGCAATGCTACCCATGCCCAGGAACA
-CGTTCATAACTTGAAGCGACTCCCTCCGATTCTCACATATCACATAAATA
-CCACCTCGTAATAATAATTCAACATGACTAATAAAACAAATAAGTACATA
-CATACATTTATATTAGCTTTTAGCACCCGTAGCAATTTGGAGCAAGAAAA
-TATGTGTAAAGAAATTGGAGATGTAGTAGATTTGGTCGTTATAGTGATCG
-CAGATCTTTCAGCTCTTTGAGCCGGAATATTGACTGGCTTGGAGCCAGGA
-GATGAACCTCGCGGGGGAATGAGGCAAAGTAGGGGTGAAGCATTGCACTG
-GCTGCGGAGACACGGCTTTCCGGGCGGAGCTGTAATTTTGAGGGTTACAA
-GATAGGTGTAGCTCGATGTCGATTCATTTAGACTAGCATTGCAGCCAGGG
-CTTAAGCTTTCGGCTTGAGCTTGCACTCAAAGATTGCTGCTCAATATAGC
-TCGCGAAGACTGATTTGTCAAAGATTAGACTAGTAGGCCTGGACTGACTT
-AAAGGTGGAGTAGCGCCAGTGAAAATTTTGTCAAAATACATACATAATGA
-TCCGAAAAAAAAACCAAATTTCATAATAAAACAATCCAAAAAATTAGATT
-TTTCACAATTTCAGGTCAAATTTTTGGCAAACTGCTAAAATTTTGAAAAA
-TGAGCAATTGAGGAAATCTAGAGCAATGTCGCATGTTCCGACCCCTACAA
-TATTTTAATACAAATAATTAAAACACAATTACAGTATAAAAATGTAGGAA
-AAAAAATTTTTTTTTTGTTGGTCGACTTCCAAAATTATGAGTGGTAAAAT
-TACAGTAAATAAAAAATTTTCAAAATTTTTTTGAAACGTTTTATTATGAT
-ATTCGGTCTTTTCGGGACTAAAGGAGTGGTTTTTACAAGTCTACTTACCT
-GAAGAAGCATCCCCAGAAGTTCCTGACCAGTCTTCAGAATCTTCGTGAAC
-ATCGGGTTCACCGCGATGAACGACAACTCCCGATACCTGGGGAACAGTTC
-AGGGGTGTAGCCTGGTAATGTCTTTACCTGAAACAAACATCTTTATCTCT
-AGATTTTAGATTCCCTCACCTCCGGCCACTTTTTCTCGTCTGGAGTACCC
-CGAATGCTGAAGATCATATCCAACTGGTCCTTGGTGCCGGGGTAGTGAGA
-GTCCTTGGATCCCGGGAACAAAGCGGCGCCCGTGCAAATTTCAGCGAATA
-TGCAACCGACTCCCCTGCAAAGTTAGTAGATATAGTTGGTACCTTTTATA
-AAATAATATCCTCCTACCACATATCCAGGGAAGTTGAATAGTCGGTACTT
-CCCATGAGAACATCAGGCGGGCGGTACCATAAAGTGACCACCTCGTGAGA
-ATATGTCCTACTCGGCACAGATTTCGCCCTGGCTAGACCAAAGTCTGCGA
-GTTTTAAAACACCGTCTTCGTCGAGAAGCAAGTTTTGTGGTTTTAAATCT
-CTGAAAATCAGTTTTTATCAAGAGTTATGGCCGCAACGGCGCCTCCGCCG
-ACCCCAGCGGTCGCCGCGCCGGCCTCCGCGGAACCCCGAAAATGTCCGCC
-GCTCCAAACAACCACTTTTTTGCACTACGTTGCGCACACACCAGGCTACT
-CATTTCACGCCAAGCTGCGGAACACCGAACGTGTCCGCCGCTCCAAATAA
-CTCCCTTTCGCAATACGTTGAGCACACACCAAGCTGCGGAACTCCCAACG
-TGTCGGCCGCTCCGAACAACCACTTCTACGCACTTCATTGCGCACACACC
-AGGTTACTCATTTCACGCCAAGCTGCGGAACCCTGAACGTGTCCGCCGCT
-CCAAACAACTCCCTTTCGCAATACGTTGAGCACACACCAAGCTGCGGAAC
-CCCCAACGTGTCGGCCGCTCCGAACAACCACTTCTACGCACTTCATTGCG
-CACACACCAGGCTACTCATTTCACGCCAAGCTGCGGAACCCCGAACGTGT
-CGGCCGCTCCAAATGACCACCTTTCGCGCTTCAACGGCGTCGGCGTGAGG
-CCCGAATTTCGCGCCTCACTCTGCTGGGAGCCCTATCAACACTAGGGAGC
-AGTTTGAAAACTAACCTATGAAGAATCTTCTTCCTATGACAAAAATCGAG
-TCCGCGGAGAAGTTGAAAGAGGAGAAGCTTGATGTCAATGCTATCCAACC
-CATAGACGTTCTGCTCCAGGTACTTGCTCAAATCCATTTTCATGTACTCG
-AACACAAAAGTTAGCTGGTGGTGTTGATAGAAGATGTCGTGCAAAGAGAC
-GATATTCGCATGACGGAGGTTTCTGAGAAGCGAGGCTTCACGGATAGCGG
-TGAATGGGAGACCTTCTTGAAATTGAAGTTTGATCTCTTTCAAGGCGACT
-ATGGATCCGTCAAGTCTGAAAATATAATTTAGTTTGGTAATATCAGCTGT
-TAAAATATCTAACTTCGATTCGCACTTATACACCGTTGCATAAGATCCTT
-CCCCCAGCTTGTCAATTCGTTTGTACAGATCATTCACATCCTGCGGTGTC
-ACTTCCTCCTTCGCAGGAAGCGTTATCGTATTTGGATCGTAGTGTGCTGA
-TCGTGGTCGACGTCTTCGAAGATGTGTGAAGTCGGCCACAGTGTTGCTAG
-ATGGTGGTGGTGGCATTGATGGAGAGTTCTTGTTTAGGGGCACGGTTGAC
-ATGGTTTCAGATGGATTGTTGGAGCGGGAACGTGATTGGCGGCTGAAATG
-GTATTACTAGGGTTTGATTCGGAAAATTTTCTTAGAAAAACAGTTTGGCG
-GGAAGTTTAAATTTTCTGATTAAAAATGTTGGCGTAAGTGGTGTCGAAGT
-GCCCCATTTTGGTTTGATCTACAAAAAATGCGGGAGTTGAGACAAAGACT
-TTTCAACTGATTTTGCAGGATTAAGCTGACGTCACATTTTCCTGGGGGAA
-AAATCCCCGCATTTTTTGTAGATCAAGCCGCAATGAGACAGCCTGACACC
-ACGTGTTGACGGGATATTTAAATTTTCTGAGAAAAACATTTTGGCGGGAA
-GTTCAAATTTTCTGAGAAAAACATTTTGGCGGGAAATTGAAATTTTCTGA
-CAAAAAAATTTTGGCGGGAAATTGAAATTTTCTGACAAAAAAATTTTGGC
-GGGAAATTGAAATTTTCTGACCAAAAAATTTTGGCGGGAATTCAAATTTT
-CTGGGAATTAACTTTGGGGAGAAGTTCAAATTTTCTGTAAAAATTTTGGC
-GGGAAATTGAAATTTTCTGACAAAAATATTTTGGCGGGAAAATCAAATTT
-TCTGAGAAAAAAAAATTTTGGCGGGAAATTGAAATTATCTGACAAAAATA
-TTTTGGCGGGAAAATCAAATTTTCTGAGAAAAAAAAATTTTGGCGGGAAA
-TTCAAATTTTTTTTTTTTGAAAAGAAAATTCTACGGACCGGAAACGGCCC
-AACTACGGCTCAAGAGCCGTCTCGGTCGGTAAATGTGTTTTTTGCTCTAA
-ATAATGCATTTAACGACGTAAAAATGCTTAAATTAGCCAACTGGTATCAT
-AGGTATTAAAAAAATTCGTTTTCTTAAAATCCATTTTTTCCTCTTAATGG
-CCATTTTTTTACATTCCCCGTAGTTTGCCCGTAATTGGTCCGTCCCGCTT
-TTCATATCCGTAGTTCACCCGTTAATGGTCCGTTCCCGGTCCAAGATCCG
-TAAACGGACCGTACCGGCTTTGCCTGTGGTCAGATATAACTAGTAAGTCA
-AGTGGTGTCAGGCTGCCCCATTATGGTTTGATCTACTAAAAATGCGGGAA
-TTTTTCCCCCAGAAAAACGTGACGTCAGCACACTCTTAACCATGCGATAC
-CAGTTGAAAAGTCTGCGTCTCTTCTCCCGCATTTCTCGGAGATCAAACCA
-AAATGAGGCACTTTGACACCACGTGGTAAGTTATAACAAACATAACAAGG
-TGTCGAAACTACTGTAATTATAGTCTTACTTCAATATACAACCTAATAAG
-AATCTCCACCACTTACCTCAAAAAGCTGAAAATATTCTTATTATGATGTT
-CTGGTGTGCTTCCACTTCCGGACCCCGATGATGCCCCATTCACATGATTG
-GAGTGCCATGATTGTGTCATTTCATTTGTTCCGTTTTTCGAGATCGGAGA
-TTTGGTGGAGCCTCCTGAAAAAACAGAAATAAATGTGGAATTATATGGGG
-GCTCATATGTTTTCGGAACTAACCTTTTTGGGAGAAGACTCTGGAGAGCA
-TTTTTGTGTAAACTGACTAACTTGTGCCACCCCCCGCACCCCATAGAATA
-AATTGGCTAAAATTTCGAAAAAAAAAACTCGCCACCGCCGTTATTCTTGT
-ATTTCTTCTCCTTATTCCGACTCCGACGCAAAGTGAAAATTGACGAGGAC
-GGCTGGAATAATGTTTTGTGTTTGTGTCTTGTGGAAGAGATGCAGAATCG
-CCGGAAGTTTAGAGGGGGTGGCGTGACTTACTGACCTTCCGGGTGCTCGG
-CGAGCCGTCCACGTCCTGAATTCGTTGCGGCGACATTGTGGTGATCTGGA
-ATATGTGGAGCGTAATCGAAATATTTAGGCTTAGGCTTAGGCTTAGACTT
-AGGCTTAGGCTTAGTCTTCGGCTTAGGCTTAGGCTTAGGCTTAGGCTTAG
-GCTTAGGCTTAGGTTTAGGCTTAGGCTTAGGCTTAGGCTTGGGACTGGGC
-TTAGGCTTGAGCTTTGGCCTAAGCTTAGGCTTAGGCTTACGCTCAGGCGT
-AGGATTAGGCTCTGGCTTTGGCTTTGGCTTAGGCTTAGACTTAGGCCTAG
-GTTCACGCTTAGGCCTAGGCTTACAAGAAATATCCTCATTTACCGACCGA
-CTGTGGCCTAGGATTTCAAAAAATGACCCTTTTTGAAAAATCGAAAAATC
-GAAATATCGACGAATTTTCGTTTTTGAGGCGTTTTTTTAATTTCAATTTT
-TATAATTTTTTTCGGTTTTTCGATTTTTCTTGAAAATACCAAACTCACCC
-TATGCAAGTTCTCCGACGACTTCGAACTCCTAACAGCGGTGAGCTGTGGA
-TGATGTATCATAGACAGTGAGCACGATGCTCTCATAGGCCTCTCGGCCTC
-CTCCAGCCCAAACCATACTCCAATATGCGAGGTTATTTTTCCCCACATTT
-GATTGAAAGATGGTATCTGCAAGTGAAATTTTTGGGTGGGGAAAAAGAAC
-GTGAACGAATAATTTGGAGCAGCGGGGGGGGGGGTGGAAAAATGAAGAGC
-TGCTCGGAGGAGGGAGCCGTACTACGAAATGAGAAGAGGAGAAGCCGGTG
-TGACGGCGGGGCGTTAATGGGTTACTAAAGCCTCCACATTCCCATTTTCA
-GCCGTTTCGAAACAAAGAAAATAGAAGAAAAAAAAGACAGATGAAAAATG
-ACTTGGGTGGGTTCGGTGAAAAACAGGAAGCAGGAAGAGTGAGGAAATTG
-GATGGTGGAAGAGTTTTGGCATTTCTAGGTTACCGGGAATCTTTAGAGAC
-ACCTGGGCTGTCCCATTACAGTTTGATCTACAAAAAATGCGGGAATTTTT
-CGCCCAAAAAATTTTCAACAAATTTAGATATTTTTTACATTTTTTCCCCA
-ATTTTTTCAGCCATATTTCAGCCATGACTGTCCTTTTTTTCGGGCAAAAA
-AAAATTTTCTCTGAAAATGTTCGAAACTACTAAATTATGCAAGAAGACAA
-TTTTTAAGGTTCGGAGATCAATTTTGAGTCCTCTAGCTTCAAAATTATCC
-ATTTTAGAAGAGTTTTAAAATTGTAATTTTTTACAAAAATTGCTCAATTT
-TGCCACTTTTTAATAGTTTTCTAAACCTAGATTTTCTGAATTCTGCATAT
-ATGAATTACCCGTTTTCAACAAATTTAGACAATTTTTTTCATTGTTTCCA
-AAATTTTTTTCAGCCATTTTTCAGCCATTACTGTCCTTTTTTTGGGCAAA
-AAAAATAATTTTTTGAAATTACATTACACACCTTCCATGTTTTCTTCGTA
-GATTTAAGGTCCATGTCCACTGCTTGGTGGAAGAGTTTTCCGAGTTTTTA
-GGTCACCGGAGAATTTGAGTTGGAAGAGTTTTCGCATTACTCCCCAACTG
-TGATAGAACTTCAAAAATGAATATGCAGGGACATCACTCAAATTTGACAT
-GTCAGTTTAAAGGAACACGCTGATTTTCCGAGTGGGTCTCGCCACGATCC
-AGGTGCTAAATTTTCACAGTTTTTAGTATGTACCTAGTGGCTTATTTCTA
-AACAACACGCGCATAACATCGGAGTGTCGTTGCATAGGCCACTCTAAAAC
-ATAAACAAATGTGTGAAGAAAAATTAAACACAACTAGCACGGATTTCTGA
-CGTCCCTCAGAAGTTGAAATGGAAGAGTTTTTGCCGAACTAGGCCAGGCC
-ATATTCGGGGTAGATTTACGGCGCGTCGCGGCTCGATTTTAGTTGTAAAA
-CTAAATGTATTTGTCCGTGTGGAGTACACGACTTTCCCAAGCGTTGTCCG
-GCAGGCGATTGTCAATGGAGCGCGAAAATTCAATGAGGAAGGCCAGAACC
-CCGTGGGATTTTGAAATTTTTTTCAGATATGACAAAAAATGACAATGCCA
-AATTTAAAATGCATTAATAGCGGACAGAGGAGAGAATAAGTAGGGAAAAA
-AGAAGAAAAAAAAAGACGGGCGGCGCTTCTCTCATAAAATAGTAATTGGT
-CATTCTAAGTGTGCCTATTGTTCCTTATTTTTCGCTTTTTCTTGGCTCAT
-TTTAGCTCAAAAACCAAATGTCGAAGAGTTTCTAGAGAACTAGGCCACGA
-GAGGGAAAAACTAGGTCACTGGAATTTCTACGCTAAAAATTTGGCCCAGC
-ATATTTACCTACGTGGCCGTAAAAGAGAAAGTTCGGCCACTAACTTTTTC
-GGGCTATCAAAAAAGGTTTACCAAAACTTTATAAAAAAGAAACCACTTGT
-GGAAAATGGCCGTGCATACTAAAGTTCGGCCACAAACTTTTTTAAAACTT
-TTTTGCTCAAATTGAAGTACAGGACCACTTCGATGGGCGGTTTTCACTAC
-TTGGCCGTGTAAGAGAAAATTCGGCCACCAACTTTTATTCAAGGCCACAC
-CTCCAAATCCTTCAAAGCTTCAAAAATTTTCTACGTGGCCGTGTACGAAA
-AAATTCGGCCATCATCTTTTTTTTGGGTCACGTCGCTAAATTCTTCAGAG
-CTTCAGAGATTTTCTACGTGGCCGCGGGAGAGAAAATTCGGCCACCAAAT
-TATTTTTTAAGGCCAAACCTCCAAATCCTTCAGAGCTCATATTTTCTACG
-TGGCCGTGTACGAGAAAACTCGGCCACCAAATTAATTTTGAAGGCCCCAC
-CTCCAATTTCTTCAGAGATCATATTTTCTACGTGGCGTGGCCGTGTACGA
-GAAAATTCGGCCACCAAATTCTTTTTTAAGGCCAAACCTCCAAATCCTTC
-AGAGCTCCTATTCCCTTCGTGGCCGTAGGAGAGAAAGTTCGGCCACCAAA
-TTAATTTTTTAAGGCCACGTCGCCAAATCCGTCATATTATGAGGAAAAAA
-GTAAAAAATAATACTAATAACAATTGAAGAAAAATTGAAAAATATAAAAA
-TATAAGAGACTAGTAAATGAAGAGGAATGAAGAGCGAATAGGAGGCCAGA
-GAGAGAGAGGGGAGGAAATTGTGCTGTTGAAGACCTTGAAGAGAGAGGCA
-CAGCAATAGATAAATTGAATTACAATGGGGTGAGGAGCCGGGTCTGTCCC
-CCCCCCCCCCCCCCCCCAAAAAGTGCGAACAAATGTGATGAAGCGCAGAG
-AAAATCGGGAGGGGGGGGGGGGGGGGGGGCTGTGCTCCAGGTTGATTGAG
-CCAAGTGTTTCGACTTTTTGCCGAACACGTTGAGCTCTCCGATGAGCCGG
-GCTCACCGGAGAGCCCATGGAGCCCCATGAAGCAGAGGGTCACAAGGTTT
-GAGACTTCCGGGAGATAGACTGCACAACGTACAAAGACTAAAACTTTTTT
-TTTTTGCAGGTGAGGCATGAAATTTAGAGCTTTTTTGCAACAAAATCCAA
-CATTTTTTTTGTAAAATAAGGTCAAATGACGAGTTTTTTCTATAATCTGG
-CCGAGAAAACCTGAAAATTGATCTACCTTGATAAACAGGGCGCGCGGGTG
-TAAAGCGGAGCGTCGTTGTGAAGCTGAAATATTGTTGAACGAATTCTGGA
-ATTCTGGCTTCCCTCATAAATTGAAATGGAAGAGTTTTTGCCAAACTAGG
-CCAGGCCATATCTGGGGTAGATTTACGGCGCGCTTTTTTTTGGGCATAAA
-ATTCCCGCATTTTTGTAGATCAAACCGTACAGCCTGACATCACGTGTTTT
-TGGCCCCGCTAAACAGGGCGCGGGTGTAAACATTCAAATATTATGTGAAA
-AAAACGCATGAATTTGAACAATTTTGCGTAGAATTTTTGAACAAAAAAAT
-ATATGAATAACTAATGCAAAACGAACAGAACTAAATTTTCTGAAATTGAA
-GAGAGGGGAAAAAAATTGGGAAATTTTGGACATTTTTCCCAACGACGCAT
-TGAGCCACCGGACCCAGATGAGCAAATAAACCGGGGGAGCAGGAGGAAAA
-TGGAAATGACAAAAAAGGCGGAGGAGGAGAAGCTCACGTATTTAGTATCC
-CATAGAAAGAGTCAATTTTCATAAACTGCGACAATTGACTACCAGGGAGC
-AGTTGCGCTCTACCGACAAAATCAAGCAAGGTCCACGTAGTGCCAGTCTG
-TCCCATTACGGTTTGGTCTACAAAAAAATGCGGGAAAATTTGGCTCAAAA
-AAATGTGACGTCAGCACACTCTTAACCATGCGAAATCAGTTCCCGCATTT
-TTTGTAGATCTACGTAGATCAAGCCGAAATGAGACACTGTGGCACCACGT
-AAAGGTCCTTCTTACAGAGTGCGCTAGAGCGCGATTGCCAGTTTTCTAAA
-AAAAAAATCTAACATGAAAAAATGTGCGTAAAAGCGGAGTTTCGTTGCGA
-TGTAAAATTTGGAGAAAAATTGAAAACTGAGGAGGAAGAAAAAGTTAAAT
-GCCTCTTCGCAAGACCGGGATTAAATAGTATTTTACTTCTTTTTTTTCCT
-TCAACTTTTTGAAATTTTTGGCGGAATGGGGAAAAGGAAAAAAAAACGAA
-ATCATCGATAAAAACAACACTAGGCCACCCAGAAGTAAACCTAGGCCACC
-TTATAGAAATTCTAGGCCACCCTGTAAGAATTTTAGGTCATCGCGTAGAA
-AAGCTAGGCCACCCTGTTGAACTGCTAGGCCACGCTGTTGTACACTTAGG
-CCACTCTGAAAAAAATCTAGACCTCCCTGTAAAAAATCTAGGCCACCTTG
-AAAGAATTTTAGGTCATCGTGTAGAAATTCTAGGCTACGTTTTCGAAATT
-CTAAACCACTCTGTAGAAAACTTGGGTCATCTACCGAAATTCTAGGCCAC
-CCTGCAGAAAACTTAGGCCATCTACCAAAATCCTAGGCCACCCTGTAGAA
-AACTTAGGTAATCTACCAAAATTCTATGCCACTCTGTAGAAAACTTAGGC
-TACCTCGTTAAAGTTCTAGGCCACCGTGTAGAAATCTTAGGCTACCTCGT
-TAAAATTCTAGGCCACCCTGTAGAAAAATTAGGTGATCTACCAAAATTCT
-ATGCCACCCAGAAGTAAACCTAGGCCACCTTGTATAAATTCTAGACCACC
-CTGTAGAAAACTTGGGCCATCTACCAAAACTCTAGGCCACCCTGTAGTAA
-ACTTAGGTCATCTACCAGAAAACCTAGGCTGTTCCGTTACGCCGCATGCT
-AAAAAATCCAGACCGCCCTGTAGAAAATCTAGGTCACTCCCTACAAAACC
-TAGGCCACCCTGTGAAAATTCTAGGCCACCTTGTGAAAATTCTAGGTCCT
-TCCCTAGAAAAACTAGGCCACCCTGTTAAACTCTTAGGCCACTCTCTAGA
-AAAACTAGACCACCCTGTAAAAAAACCTCGATGGCCTAGAAAAAAGCTTG
-GGAAATTTTGTGGAAAAAGTTAAAAAGGAAAATCTAGGCCACCCACAAAA
-AAGCTAGGCCACGTGGCAAGAAACTTCAAAAGTGACGAATGATGAGACGA
-GAGGCGTATGTTTGAGGTCAAAAAGGGTGAAAAAGAAGAAAAAAAGACGA
-GGCGGAATGTTTCTTTTTTCTTTTCAAACTGAGCATCTCCCCGTCTCTCG
-GCCACCAATACTACTACTACTACAACTATTCATGTTTTTAGAGAGCCCCC
-CCCCCCCCCCCCCCCGGCCACTTGTCAGCTTTTTTGACGGAAGATGCCAA
-CACACAATCGAAGGGGAAACCATAAAAACCCGCCAACGACACTCCGTTTT
-AAGGCCCGGATGCCCAGATGTATGAAAAAATGGAGAAACTGAAGGCTTCT
-CCCCTCCCCCCCCCCTCCCTTAAAAAATGATGAATTACTAATGGTGCCGC
-CCATGTTGTGTTTGTTGCTTTCCCCCCGTGCTCCATCATTGGGGGAACAT
-GACAGCCACCTTGAGTTACATGTATACAAAGTGACAGGAGGGAAAGATAG
-GGGTAAAAGTGCAAAAAGGGAGTCGCGGGTTCGAACCAGTGAGGGTTTGC
-AAAATTTGGGCTGTGCGCGGCGCCTTAGACTACTGCGCCACGCGTGCGAA
-CTGTAAATAGAACTGTCAGGCTAAATACGAACGTTCGGTTTTTAAACTCG
-ATTGGCAAAAATGAAATGAATGAATAGACAGGAATGACTCATATTTTTTG
-CATAAAGGGGCCTGGGTCTGGGAACTAGGAACTAAACTAAATGAAGGAAA
-ATTGAGGCATCTCCCGCCAATTGAGTAGAAAAGTGATGAGAGCGGCAAAA
-AGAGATAGGGGGGGGGGGGGGGACCCATTCATTTTACACTGGACACCACA
-CTCCCCACTCTCTCTTTGATGACGAAGGACATGAGTACGAACTCGCGAGC
-ACAGAAATACGACACGTTTTCTTCTCATTTTTTTTTTGCAAAAGGTGATG
-ATGATAATCGCTTCTAAACGAGGGGAAGTGTACTAAATAATAAAATTGCG
-AGTGGATATTGGATTTTTTCGTTATTTTCCGCTCTGAAAAACCTGAAAAT
-CAGTCGGAAATTCGAGTTTTGGCTAACTTTTTGTAAATTTTGTTTAAAAA
-ATCACTTTTCGCTGCGAAACCACCTGAAAGGATATAGTGGGCATGCGCCT
-TTGAGCGCTACAGTGGAGGGAATGCAGTATCTCTTGGAAGTCAGATTTGC
-CGATTGTTTTAACGCAAAACCTGAAGTATAGAAAAGAAAACATGAAAATT
-TATTGAAAATATAATAAATAAATTAAGCAAATTACATATCAACTGAGAAA
-ATCACCTGCTGGAGAGAAAAATTGAAAAAAAACCAGAAAATCGGCAGGAA
-AGCAATAATCGAGCAAGATCCTTGGAATTTTTAGGTGCAGATATCGGTTC
-AAAAGGAAAACACTATTTTAGCTTTTTTTTGTCTTAAGTTCAATGTTATA
-ACACAAGAAACGATATTTCTATGGCATAATTTTTGGGTCCTAGAAAGCAG
-ATTTTCACGTAGATTGGTCTGAAAATAATATTGGAGTAATTTTTATTATT
-TTTCCTTGCATTATAAAATTATTTCTCTTTTATTTCTCAATTCTAAAACT
-ATTTTCCCGTTCTTTTTCCCTATATCTCGCGCTTCTCCGGGATGTTGCAT
-CCCATTCGACGTGAGGAGTCTCGGAGTCTCTCCGCTGCAAACGCGCTCCA
-CTGGACACAGAAAATAAAAAAAATAAATTGTTCGAATTCATGCAATTTTC
-TTCTAATTTTCTCCGTTTTTCGTCAATTTTTCTGCAAAAAAGACAAAATT
-TACAGGTAGCAATGTATGGGGGATATCAAGGAGCATATGGGTAAGGCTAA
-AAACTAGGAAAAACTAGGAAAAACCCATGGAAAACTAAAAAACTCTGAAA
-TTTCAAATTTCAGAGCCTACGGGAACCAGCAGGCGGCTTCACAACCATAT
-CAACAGCAAGGACAACAGAATTATTACCCGTAACTCGAAAAAAATTCAAA
-AAATTCGAAAAAAATCAATTAAAAAGATCAAAATTTTCAATTTTTTCAGC
-GGAGTGAACCCGTACGCGGCGAATTATGGGTACGCGGCAGCACAGCTTCC
-ACCACCACCTCCACCACCGCCAGTATGCCTTAAAATTGAAGAAAATTTGA
-TTAAAAAATTGAAAAAATGCAAATTTTCAGGTAGCCGATCCATACGCCGG
-CCAATTTCAGACATTTCCCTCTCAAGCCACCAAAATAGCGCCGAATCCCT
-ACTTTAAAAAGCCACAAAATCAGCAGCAACAGGGTATTTTCGCCGTGTTT
-TCTGGCTGCAAAAAAATTAAATTATCGATTTTTTTAAGGCTACGACGCGG
-CGGTCTACAATTACGCTCAGCAGAATACTCCGAAAAATTGGAAACACGGC
-GGCGGCGGCCGGCAGGGGAGACAGGGATCTGGCGATAATAAACAGTACTA
-TTGTGAGGTAAAAAACGTGGAAAAAATCGAGTAAAACACAGTTTTTTATT
-CAAAAATCTGAGAATTTCCGTAAAAAATCCTGTTTTTTGACGTTTTTAAG
-CAAAAAAATCGGGTTTACAGCACTTTTAGAGATAAAAAAGTGGAAAAAAT
-CGAATTTTGGACCTGATTTTGGGCTTGAAAGCATGATTTTTATCAGAAAA
-CACAGTTTTTTTTGTCAAAAATCTGAGAATTTCTATGAAAAGTCTTGTTT
-TTGGATGTTTTTAAGCAAAAAAATCGGGTTTACTTCATTTTTAAGGGTAC
-AAAAGTGGCGAAAAGTTAATTTCTTGTAAATTTTCACATGCAAAATATTG
-AATTTATTAGGTTTTTTCCAGAAAAAGTAGTTTTTTTGCTACATTTACAG
-GCTTTTAAAACTGAAAACATGTTAAATTTCGAGGAAAATCGACAAAAAAA
-CCCATCTTTTGGCCAAATTTAAATTTTTGAGCAAAAAAATCGGGTTTGCA
-GCACTTTTAAAGATAAAGAACTGAAAAAATTCAATTTCTTGGAGAAAAAA
-GCAATTTCAACACCAAAAATAGCAAAAAATTCGGGAAAATTGTCAATTTT
-TTTGAAAAAAAACTTGAAAAACCGGATTTCCAGTTGTTTTTTCATGATTT
-TTTCTCAAAAATCTCATAAAAATTGGAAAAAATTCCGAATTTTTTACTGA
-AAATTCGAGAAAAATTGAAATTTTTTCAATTCCGATTTAAAAAACATTTT
-TCGCTAAAAAATTGAATATTTTTAGGCTTTAAAGTTCGGAAAAGATGCTG
-AAAATTCGGAATTTTCTGTTTAAAGAAATTTTTTTTGTGCTGAAAAATTG
-ATTATTTTTATGCTCCAAAAACTGGAATTTTTGAAAAATTCGGACAAAAA
-AATTTTTTTATTAGTTTTTAAATTTTTTTAATTTTTCAACCCGCTTTTTG
-CCCAAATTTAGATTTTTTATTTAAAAAATCGGGTTTACAGAACTTTTAAA
-GGTAGAAAAACTGCAAAAAGTTAATTTCTTGGATATTTTCAGGCTTTAAA
-GTCCAAATAAACATGTTGAAAATTGAAATGTCTTCAATTTCGATTAAAAA
-CATTTTTTTCGCTAAAAAATTGAATATTTTTAGGCTTTAAAGTCCAAAAA
-ACAAGCTGAAACTTGAATTTTTTTCATTTTCAATTTAAAAAAATTTTGCT
-CAATAGATTTTCAGGCTCCAAAACACTGGAATTTTGGACTTAATCGAAAA
-TTCGGACAAAAAAATATTTTTATTAGTTTTTAATTTTTTTAATTAAAAAA
-AATCCCAATTTCCAGGTGTGCAAAATCTCATGCATTTTTAGGGTTAAAAT
-TGGAAAAAATTATCAAAAATTTTCGAATAAAAATGGAATAAATCTGATTT
-TTATAAATTTTTCGAAAAAAAAATGATTTGTTGGCAAAAATTAAATATTT
-CAGGCTTTGGAAGTCCAAAAACCATGTAGAAAATTCGGAAAAAATCGAAA
-AATTGGAAGAAAAAAATTTTTAATTTCAAAAAATTTCAAAAAAATATTTA
-AAGCTGGTGTAGTCGACTTTATTTATTGCTTAAGTAGACTCTAAATTGCC
-TGGAAACACCGAATTTCATAATGAAACTTCTTGAAAACTTCTCAAAAAAA
-AAAGTTATGACGGCTCAAAAAATGGACTAAAATTAGTTAAAATTTGAAAT
-TTGACCGACTTTTCAAGCGGCTGGAAACATTTTTTCTTTGAAATCACCGT
-CAAATTTTGAGTATACTGTGCAATTATGTTGCGTTTTCAACTTCATTTAG
-GTATTTTAAAGTCAAAGGGCGGCGAGATTTTTAATTTTTTGAACCAAATC
-TCGCCGACCATCGACTTTAAAATATCTAAATCGAGTTCAAAACTCAAGAT
-AATTACATTATATAATCAAAATTTGACGGTGATTTCAAAAAAAAGGTAGT
-TTCTAGCCGCTTGAAAAGTCGGTCAAATTTCAAATTTTAACCAATTTCAG
-GCCATTTTTTTAGTCGTCATAACTTTTTTTCGAGAAGTTTTCAAGAAGTT
-TCATTATGAAATTCGTTGTTTTCAGACAATTTTGAGTCTGATAAAGCAAT
-AAATAAATTCGACTACACCGCCTTTAAATATTTTTTTGAATTTTTTTAAA
-ATTAAAATTTTTTTTTCCAATTTTTCGATTTTTTCCGAATTCTCCACGTG
-GTTTTTGAACTTCCAAAGCCTGAAATATTCAATTTTTGCCAACAAACTAT
-TTTTTTTTCGAAAAATTTATAAAAATCAGATTTATTCCATTTTTATTCGA
-AAATTTTTGATAATTTTTTCCAATTTTAACCCTAAAAATGCATGAGATTT
-TACACACCTGGAAATTTGGAATTTATTTGTAGAATTTTTGGATTTTTTAA
-TTAAAAAAAAGTTTTTTCCGATTTTTTTTCCGAATTTTCAACATGGTTTT
-TGAACTTCCAAAGCCTGAAAATGATTTTTTGAATAACTTTTTGATTTTTT
-CGGTTATTTTTGGTTTTTTTTTTTAATTTAAAAAAATTAAAAAATTAATA
-AAAATATTTTTTGTCTGATTTTTCGATTAAAGTCCTGAAAAAAAAATCTA
-TTTTATAGCAAAAAATCCTAATTTTCAGCCTGTTTTTTTGCCTTGATATT
-CAATTTTTACAAAAAAATTTTTTTTGGAGTTTTTTGCCTAAAAAATCGAA
-AAAAAAAATCATCTTTTCTCGAATTTTTGGAAGAAAAATTAAAAATTTCA
-AAAATAATTCAATTTTTTGGTGTTTTTCGGGTTTTTTACATAATTATTTT
-TTAATTTAAAAAGTTTGTAAATAACCATAAAAATTTATAATTTTTTAAAT
-TAAAAAATAATTATTAAAAAAAACTCGAAAAACACCAAAAAATTGAATTA
-TTTTTGAAATTTTTAATTTTTCTTCCGAAAATTCGAGAAAAGATGATTTT
-TTTTCGATTTTTTAGGCAAAAAACTCCAAAAAAAAATTGTTTTGTAAAAA
-TTTAATATCAAGGCAAAAAACAGGCTGAAAATTCGGATTTAAAAAAATAA
-TTTCTTGCTATAAAATAGATTTTTTTCAGGACTTTAATCGAAAAATCAGA
-CAAAAAATATTTTTATTAGTTTTTTAATTTTTTTAAATTAAAAAAAAAAT
-CAAAAATATCCGAAAAAATCGAAAAATTATTCAAAAAATCATTTTCAGGC
-TTTGGAAGTTCAAAAACCATGTTGAAAATTCGGATAAATAAAAATATTTT
-TTTGTCCGAATTTTCGATCAAAGTCCAAAAACTTCCAGTTTTTGGAGCCT
-AAAAATAATCAACTATTGAGCAAAATTTTTTTAAATTGAAAATGAAAAAA
-ATTCAAGTTTCAGCTTGTTTTTTGGACTTTAAAGCCTAAAAATATTCAAT
-TTTTTAGCGAAAAAAATGTTTTTAATCGAAATTGAAGACATTTCAATTTT
-CAACATGTTTATTTGGACTTTAAAGCCTGAAAATATCCAAGAAATTAACT
-TTTTGCAGTTTTTCTACCTTTAAAAGTTCTGTAAACCCGATTTTTTAAAT
-AAAAAATCTAAATTTGGGCAAAAAGCGGGTTGAAAAATTAAAAAAATTTA
-AAAACTAATAAAAAAATTTTTTTGTCCGAATTTTTCAAAAATTCCAGTTT
-TTGGAGCATAAAAATAATCAATTTTTCAGCACAAAAAAAAAATTTTTAAA
-CAGAAAATTCCGAATTTTCAGCATCTTTTCCGAACTTTAAAGCCTAAAAA
-TATTCAATTTTTTAGCGAAAAATGTTTTTTAAATCGGAATTGAAAAAATT
-TCAATTTTTCTCGAATTTTCAGTAAAAAATTCGGAATTTTTTTCCAATTT
-TTATGAGATTTTTGAGAAAAAATCATGAAAAACCAACTGGAAATCCGGTT
-TTTCGAGTTTTTTTTCAAAAAAATTGACAATTTTCCCGAATTTTTCGCTA
-TTTTTGGTGTTGAAATTGCTTTTTTCTCCAAGAAATTGAATTTTTTCAGT
-TCTTTATCTTTAAAAGTGCTGCAAAAAACTACTTTTTCTGGAAAAAACCT
-AATAAATTCAATATTTTGCTTTTTTTTTTCCTTTTTTTGTGAAAATTTAC
-AAGAAATTAACTTTTCGCCACTTTTGTACCCTTAAAAGTGCAGTAAACCC
-GATTTTTTTGCTTAAAAACTTCCAAAAACAGGAATTTTCGGGTTGAAAAA
-TTAAAAAATTTTAAAAACTAATAAAAATATTTTTTTGTCCGAATTTTTCC
-AAAATTTCAGTTTTTGGAGCCTAAAAATATTCAATTCTTTAGCGAAAATT
-GTTTTTTTTTCAAAAACTTCCTACGACTACACCACCTTTAAAAAACCAAA
-TTAAATTAGAGAAATTCTTCAAAAAATCCCCAAATTTCCAGGTTTGCAAA
-ATCTCGTGCGCCGGCGGAATCACATACAAAGAGCATCTGGAAGGTCAACG
-GCACAAGAAAAAAGAAGCTATGGCAAAACAGGGCATACCGAGCACTTCCC
-TCGCTAAAAATAAGCTTTCCTATCGTTGTGACCTATGTGACGTCACTTGC
-ACCGGTCAGGACACGTATTCGGCTCACGTTCGTGGCGGAAAACACTTGAA
-AACTGCACAATTGCACAAAAAATTGGGAAAACCGGTGCCTGAAGACGTTC
-CGACGATTATTGCTCCGGGAGCCGATGGGCCGACGGAGACGAAAGCCAAA
-CCGAAATGGCATCAACAAGCTCTGCCTGGCGGGAAAATGTGCGGAATTTG
-AAAAAAAAATTTTGGAAAAAAACGAGAAATTGCACATTTTTAGGCTCAAA
-AATCTGAAAATTTAGCAAAAAAATTTAGAAAAATTTGGATTTTTAGAAAA
-AAATTAGCGTTTTCTCGCCAAAAATGCTCAATTTTCGATAAAAATGTACA
-TTTTTTTTTTTGGATTTTTAAAAAAATATTTTAGGGCTCAAAAATCTGTA
-AATTCTGCAAAAAAAATTCTAAAAAATTTTGAAATTTTGAGATTAAATCT
-TTCGCCAAAAAAACGAAAAATTTGAATTTTACAACTTAAAATGCTCAATT
-TTCGAGGAAAATGTAAAATTTTTTTTCAATCTGAAATCTGTAATTTCTTT
-TAAAAAATCGATTTTTTAAAAAATTTCTACTGTAAAATTTTGAAAAAGTT
-GAACGACGTCAAAAAGAAGGTAAAAATCCGAAAAAAAGCAACAAAGAACT
-AGGAATTTTAAAATTTCCAAAAATGGTCTGAAATTTTGAGAAATCAAAAA
-AAACAAGTTTCTTTCAGTTTTTTTTAGAAAAAAAAATCGTATTTCAGAAT
-TTAAATTTAAAGCATATTTTAAACTTTTAAACGCAAAAACATTATATTTT
-TCTTTAAAAAAAAAACAATTTAAACGCATTTATTGCTTTATTAGACTCAA
-AATTGTCTGAAAACACCGAATTTCATAATGAAACTTCTTGAAAAAAAAAA
-GTTCTCAAAAAAACAAGTTATGATTGCTCAAAAAATGGCCTCAAATTAGC
-GGAAATTTGAAATTTGACCGACTTGTCAAGCGGCTGGAAACTAGCTTTCT
-TTTTTGAAATCACCGTCAAATTTTGAGTATAAAATGTAATTATCTTGCGT
-TATCAACTTGATTTAGGTATTTTAAAGTCGATGGACGGCGAGACTTTTAA
-AGGTGGAATACCGAAATTTAAGACTTTGCTTTTTTAGACCGAAATTTTGG
-CAACTTATCGGTGCGACACTGCAAAATTGCCAAAGTTTGAGATTTTAGCT
-AAAAATAGGCCGTTTTTTCCAAAAACTTTGATCGGCCATAACTTTTTTTT
-GGAAAATTTTCAGAACGTCTCATTACGAAATTCGGCAGTTTTGGGCCATT
-TTGGGTCTAAAAAAGCAAAGTCTTAAATTTCGGTACTCCACCTTTAAAAA
-TCTCTCCGTCCATCGACTTTAAAATACCTAAATCAAGTTGATAACGCAAG
-ATAATTACATTTTATACTCAAAATTTGACGGTGATTTCAAAAAAAAAAAG
-TTTCCAGCCGCTTGGCAAGTCGTTGAAATTTCAAATTTCCGCTAATTTGA
-GGCCATTTTTTGAGCAATCATAACTTGTTTTTTTGAGAACTTTTTTTTTC
-AAGAAGTTTCATTATGAAATTCGGTGTTTTCAGACAATTTTAAGCCTAAT
-AAAGCAATAAAAAATTAGAATATACCACTTGAGAAAAATTAAAGATTTTT
-TTAAGTTTAAAATAAAAAAATATGTTTCTTTCCGATTTTTTGATAGTGAG
-ATAAAAGTTTTGGCGGGAAATTCAAATTTTCTAGAAAAAAAATTGAAAAA
-ACTCATAGTGTATAACTGCACAGAACGGCTGGTTATGAGTATAGGTGTCA
-AAGTGTCTCATTTCGGTTTGATCTACAAAAAAAGCGGGAATTTTTCCCAA
-AAAAAGTTACGTCAAGATGCTCTTTTTTATTAAATTTAATTAAAAAAGAG
-AGCATGCTGACGTAACTTTTGAGGAAAAATTCCCGCTTTTTTTTGTAGAT
-CAAGCCGAAATGAGACACTTTGACACCACCACGTTCAGACAAAATCCCCC
-ACTAAATATTTGGTAAAACTAGTTCAAAACCCGACTGTAGTACATTTTTG
-GCAGAAATTTGAAAATTTCAACTTAAAACCGCTCAATTTTTCCAAAATTT
-CACAGTATGCATTTCAAAAATTATGGTTTTGTTTTTTTTTAATCGAAAAA
-TATATTTTTAACAAAAATGGACCATTTTTAGTTGTAAAATTCAATTTTTT
-GGCGCTTTCAAATTTTTAGGCAAAAAATGTGCAATTTTCTCCAAAAATTT
-TCAGATTTTTTAACCCTAAAATTAAAAAAAAATCTAAAATATTAGAATTT
-CCCGCTTTTTTTTTCAAATATTTCAATTTTTCCAATTAAAACACAAAAAT
-TGAGCATTTCTAGTTGGCACATTCAAATTTTTAGGCGAAAAATTTGATTT
-CAAAATTTCAAAATTTTTCAGAATTTTTTTTTGCTAAATGTTCAGATTTT
-TGTGCGCAAAAATATTTGAAAAATCCAAAAAAAAAACTCGAAAATTGAGC
-ATTTTCAGTTGTAAAATTCAACTTTTTAGGCGGAAAAATGTGCAATTTTT
-CCCCAAAAAATTCAAATTTTCCAACTTTTCTCTCAAATAGCACAGAAACA
-GAAAATTTGTTATACCTAATGTGGAAAAACTGAATTAAAACAGATTTTTT
-GAAAAAATGCACTTTTTTTTTTGCCAAAAAATAGTTCAAACCCCGACTTT
-TTGTTCCAGAGTTTCCAGGTCATCGGTATCATCGCATAAATAAATTTTGC
-GGGAAAAATTCCCGCTTTTTTTGTAGATCAAACCGAAATGAGACACTTTG
-ACACCCCACGTTCAGACAAAACCCCGACTTTTTTCCAGAGTCATCGGCAT
-CAACACGGTAAACTTCGTCGGCGGTACGAAGCTCAACTCCACCGGACAAC
-TCGAGGAGAAGAAGCGCGAAGTTGCTGCCGCCGTGAGCTCAGTCGGCCGG
-AAAACCGGTGGTGCTGCTGCAACGACGACGATTGAGGTGGAAGACGAGAA
-GCTCCGAGCAATGATCGCCGCCGAGGAGGTACAACCTGTCGGCGAGGAAC
-ATGTCACTGAAGAACGTGATGCTACCGGAAAACTGGTGCAATTCCATTGT
-AAACTGTGCGATTGCAAGTTCTCCGATCCGAATGCCAAGGAGATTCATAT
-CAAAGGTCGTCGACATCGTGTCAGCTATCGGCAGAAGATTGATCCGACGT
-TGGTGGTGGATGTGAAGCCATCGAACAAAAGATCACAGGAGAAGCGGAAG
-AATCAGCTTCCAGCAGTTCATGGTGTGTGGATTTTTTAACAAAAAATCAA
-CAACAACACAAAAAACATGTTCCAATAAAATTGGAAAAAAAAATTTAAAA
-AATCCCAAATTTCCAGGTGTCTAAAAATCTCATGCATTTTTAGGGTTAAA
-ATTGGAAAAAATTATCAATTTTTCGAATAAAAATGGAACAAATCTGATTT
-TTATAGAAAAAATAATAATTTGTTGGCAAAAATTGAATATTTCAGGCTTT
-GGAAGTTCAAAAACTATGTAGAAAATTCAGAAAAAATCGAAAAATTGGAA
-GAAAAAAATTTTTAATTTGAAAAAATTCAAAAAAATTTAAATTTTTTTAA
-AAATTGAATTTTTGAGTAAATAATTTTTTGCTATAAAATTCAATATTTTC
-AGGCTTTCAAGTCCAAAAACCGTGTTGAAAATTCCGAAAAAATCGAAAAA
-TTGGAAAAAAAATTTTAATTTAAAGGTGGACTACGCTCAGTGGGGGGAAA
-TTGCTTTAAAACATGCCTATGGTACCACAATGCCCGAATAGCATAATAAA
-AAAATTTTAAAAAATATTCTAGATTTTATATGATTTTTTGAAAATTGGAA
-AAATCACAGTTTTTGCCTAATTCCTATTTGAATTACCGCCAATTGGATTT
-GTTCGGTGGAGCGCGCTTGCATGTTTTTAAATTTATTTATTTTATTTATT
-GTTATTTTCCACCGATTTTTAATGTTTTCGATGTATTTTTGTTTGAATTT
-TAGAGAAAAAGTCAAAATAAATACTAATTATCGATTAAAAAGCACGCTTA
-CAGGCGTAAATCAGTGAAATTAATTAACTCAGGTTCGAAATCGTTTAAAA
-TCGTTACTTTTTCATTTTTACGCCTGTAAGCGTGCTTTTTAGTCGAAAAT
-TTGCATTTATTTTCACTTTTTCTTTAAAATTCAAGCAAAAATACACCGAA
-AACATGAAAAATCGGTGGAAAATAACAAAAAATAAAATAAATAAATTTAA
-AAACGTGCAAGCGCGCTCCATCGAACAAATCCAATTGGCGGAAATTTAAA
-TGGGAATTAGGCAAAAACTGAGATTTTTCCAATTTTCAAAAAATCATATA
-AAATCAGAAAAATTTTTGTTTTTTTTTTAATTTTTTTAAACATGACATTC
-GGTCATTGTGACCCCATAGGCATGTTTTAAAGGTGGTGTAGTCGAATTTT
-TTTTATTTCTTTATTAGACTCAAAATTGTCTGAAACCCCGAATTTCATAA
-TGAAACTTCTTGAAAAATTTTCAAAAAAAAGTTATGGCGGCTCGAAAAAT
-GGCCTAAAATTAGTGAAAATTTGAAATTTGACCAACTTATCATTGTCGCA
-TCGGCTGGAAACAATTTTTTTTTTGAAATTGTCGTTCAATTTTGGGTGTA
-CAGGTCGATTATCTTGCGTTTTCAGCTTTATTAAGGTATTTAAAAGTCGA
-TGGACAAATGGATCTGTCAAATTTTTTACCAAATCTTTTCGTCCATCGAC
-TTTTAAATACCTAAATAAAGCTGAAAACGCAAGATAATCGACCTGTATAC
-CCAAAATTGAACGACAATTTCAAAAAAAAATTGTTTCCAGCCGCCGCAAC
-AATGATAAGTTGGTCAAATTTCAAATTTTCACTAATTTTAGGCCATTTTT
-CGAGCCGCCATAACTTTTTTTTTTGGAAAAGTTTTCAAGAAGTTTCATTA
-TGAAATTCGGTGTTTTCAGACAATTTTGAGTCTAATTAAGCAATAAAAAA
-AATTCGACTACACCACCTTTAAAGCAATTTCCCCACTGGGCGCTACTCGA
-CCTTTAAAGGGGGAGTAGAGTTTGTGGGTATTTTGCTTAAATAGACTAAA
-ATTGGTCCAAAACCACCGAATTTCATAATGAGACTTCACAAAAAATCTCC
-AAAAATTTTTTATGGCCGGTCAAAATTTCGAAAAAAAAAGATGCAACTTT
-TGCTAAAATCTGAAATTTCGCACACTTTTCTTTGTCTAGCAGCCGCTGGA
-TTTTAGTTTTTCTAAAATTATCACCCTCTAATCCTTCTTTTTGGTAATTT
-ATCTCGCGAAAATCCGTTGATTGAGACAACTTTTAGGCCGATAGGCATCC
-AAAAATGATCAATCTAGGGATGCCTATCGGCCTAAAAGTTGTCTCAATCA
-ACGAATTTTCGCGAGATAAATTATTAAAATAAGGATTAAAGGGTGATAAT
-TTCAGAAAAACTAAAATCCAGCTGCTGTGACAAAGAAAACTGTGCGAAAT
-TTCAGATTTTAGCAAAAGTTGCATCTTTTTTTTCGAAATTTTTTATTTTG
-ACCGGCCATAAAAAATTTTTGGAGATTTTTTGTGAAGTCTCATTATCAAA
-AATTCGGTGGTTTTGAACCAGTTTTAGTCTATTTAAGCAAAATACCCACA
-AACTCTACTCCCCCTTTAAAGGAATGAAAATAATTATTGGAACGTTTGTT
-TTTTAAAATGATTTTTTGTTAAAAAATCCACACCGACGAAAAATCCACAG
-TTTCAGAGCCTCCGAGCTTCATGAAAACGCCGTGGTTCGCCCCACCGGCT
-CCAGAAGGCCGGGAATTCAATATAGTAGATGATAGAACTATTAACGAAAA
-GTACGCCGGGCTTAATCCGGGCGTCGAGTTCATTTCCAATGTGGATCGCC
-TTATTTCGGATATCAATGAATCGCTGAAGTATGTGTCGGATAAGATCGAG
-CGAGACGTTCGGAAGATCCCTGAAGACGTGGTGGAGCTTCCCACCACCAC
-CACCACAACGGAGCAGCCGCCGCGGACAGTGTTGGGATGCTCGAGAGTTG
-GAATTATTGCGAAGGGAACGTTCATCAAAGGGGATCGGTGTGCGGAGGTG
-GTTCTGACGTGTACGCCGGTGCCGACTTCGGGGCTTGTTGAGCAGATTAG
-GCGGTTGTTTGGAGAGTCGACGGTACGGGCCGGCCTTTTTTTTTTGCCGG
-AAATTTGGGGATTTACCGGTTTGCCGGAATGTTTTTTTTTCCGGCAAATT
-GCCGGTTTTCGCCGGAAATTTGAAAAACGGCAAACTGGCAATTTGCCGGA
-AATTTTCAGTTTCGGCAAACTGCCGCGATTTGCCGGATAACAATCGTTTA
-TTCCGGCAAATTCGGTAAGTTGCCGGTTTGCCGATTTGCCGGTTTGTTGA
-ATTTAGCGGAAATACGGCAAACGGCAAGTTGCCGGTTTCCCGACTTACCG
-GAAATTTGAAAAACGGCAATTCGCCGGTTTGCCGGAAATGTGAAAAACGG
-CAAATTTCAGAATTCGGCAAGTTGCCGGTTTTTGCCGGAAATTTTCATCT
-TAGGAAAATTGCCGGTTTTTGCCTGAAATTTTCATTTCAGGAAAATTGCC
-GGTTTGCCGGTTTGTCGAATTTTCCGGAAATGTGGAAAACGGCAAGTTGC
-CGGTTTGCTGATTTGCCGGAATTTTTAATTTTCGGCAATTTACCGATTAG
-CCGGAAATTTTTTAACGGGATTTTTGATAAGACGGATTTTTTTCCGGCAA
-ATTCGGCAAGTTGCCGGTTTGCCGGAATTTTTCATTTTTGACAAATTGCC
-GATTCGCCGAATAATAATTATGCCAGAAATTTGAAAAACGACAAGTCGCC
-GGTTTGCCGATTTGCCGGAAATTTCAAAAAACCGGCAATTTGCAGAATTT
-TGCCGGAAATTTTCATATTCGGCAAAGCTACCGATTTGTCGGATTTTTTA
-AACCGGTTTTTTCATAAGATAGATTTTTTTTCCGGCAAATTTCCGGCAAG
-TTTCCGGTTTGCCGGAAATTTCAAAACCGGCAATTTTCCGAATTCTGCCG
-ATTTCTTGTTTGACAATCTCAATAATTACACAGACATCTCTAACAATTGA
-GCCGGATCCCGAGTCCCCATCAAGCCTTATCGTCACAGCTAACTACTTTC
-CCAATATGAAATGTCGTATTCTAATCACTTCAGCTGTAGTTAGAAAAGAC
-GATGATAGTATTGTAACTGGATGTGCTGCTGATAAGGATTTGTGCATTTA
-TGCGCTCGCTTCTATTCGGAATACAAAGTGGTATGATGTGAGTTTTTTTT
-AAATTTTACACATATTTTAAATTACTTTATCATTGGAAAATCTAATAAAT
-TAGAGCCCAGTTTACAAAAAAATCTATATTTTTCCAAAAAAAAAATTGAA
-AAAAATCGATAATTTCTCAAAAAATGTTTACAAAATCGAACTTTTTCCAA
-AAAACTTTGAAAAAATCGATAATTTTAAATAACTGCTGACAATTAAAAAA
-AATCGAAAATTTCTCAAAAATTGAAAAAATTAATATTTTTCCAGAAAAAA
-TTGAAAAAAATCGATAATTTCAAATAATAGCTGAAGATTTTTTAAAAAAA
-TCGAAAATTCGAACCTTTCTCAAAAAATTTGAAAAAAATCGATTTTTTTT
-CCAAACTTTTTTTCATCAAAAATTTCTCAAAAATTTGGAAAAAATTAGAA
-AAAATCAATATTTTTCCGAAAAAATTTGAAAAAAAAATCGATAATTTCAA
-ATAATAGTTGCAATTTTTAATTTAAAAGCGAATTTTTCAAAGATTTTTCA
-AATTTTTCACGTTTTTTTCTCTGGTTTTTTTAAATTAAAAAGCGTAATTT
-TTACCGAATTTATCATTAAATTACATGAATTTTTCTGAAAGAGCGAGAAA
-ATTAAAATAATTCGGAAAAAAAACAATTTTTTTCCAAATTTTCCAAAAAA
-TCCCACAGAAACCACCAAACTTTACTTTTTTTTTTTAACAAAAAAAAGTT
-TTAAAAAATATCAATTTCCGGCTTTTTTTCTGCCAAAAACTTTGGAAAAT
-GTGGGTAATTTTGGCTTTAAAAGTTTAAAAATTGAAAAAATCAGGAAAAC
-TTTTTGAATTTTCAGAGTCACTGCCAATACTTGAACTCGTGCCAATCAGT
-TATTCGACTGCTCCGAGATTTGCGAAATAAATATCCTGAAGTTGCGTGTC
-TTGATGATTATGTAAGTTTGAGAGTTTGGAAAAATATTCGAAATTTTTTG
-TGAAAAATTTGGTAAAAGTTCAAAATAATGTATAATTCTTTAATTTTTTT
-GCGAAAAAATTAATTTTTTGAAAAAAATTCTCTATATTTTTTGCTAAAAA
-GTTTAAAAATCTAAATAGTATGAAAAAATATTTTAGCAGAATCAACAAAA
-ATTGTATAAATTCATAATTTTTTGAAAAAAATGAAATAAATTTTTTTTTG
-CGAAAAAAATATGCGAAATAGGTTTTTTTAATGCAGGAAATAGTTTTATA
-GCTGAAAAAATGAGAAAAAACGGAGAAAATTGAAAAATTACGTACATTTT
-GCAGATTTTTTGCTCACAATTTTGTAAAAATTTCGGCAAAAATATCACCT
-TATTCAAAAAAAAATTGCTAAAAAAAATTTTTATAATACAAAAAAAATAT
-GAAATCTATCTATTTTTTTCAAAAAATCTACCTAAAAATCTATTAATAAT
-TTTCAATTTTTTTGTGAAAAATTTTGAAAAAATTCAAAATAATGTATAAT
-TCTATAATATTTGGCGAAAAAAATTAATTTTTGAACTATAATTTTTTTTT
-TGAAAACTAGTTTCAAAAATCGATATTTCACCTAAAAAAAACCCTAAAAA
-TAGGCGGCAAACTATTTTTCCGGCAAATCGGTGGTAATTGCCGAAATTTT
-TGGCAAATTGTGGCTTTGCAATTTTTTTTTTGTTGGAAATTTCAGATTTT
-CAAATTTAATCGGCAAGAAAACTGAAAAATCCCGTTTAAAAAATTCCGGC
-AAATCGGCAAACCGGCAAATTGCCGAATATAATATTAGGTCTCCTAATAA
-GTTCCGGGTCAAAAATCATAACCTTGTTCGCTGTGTATCGATTTTTATGA
-AACTTTGGGAGTTTATGTTATCAACCATGATCTTTCAATTGACAATAGTC
-ACAAAATTTTTTGACCACCCCAAGTGCCCGTACTCGGAGCCAATTTTTTC
-AGGCATTTTTCTGATCTCGCTTCTTTTTATCTTTGAATTGAGGTTTGTGT
-GCGGATTTTGCTTTGTTTAGAATACATCATTAGAAAACGAGAAAAGTTTG
-GAAAAAAATCTGTCCAAAAAATTTTTTTTGGTTGATCGTCAAAAAAGCTT
-CAAAAAGATTTTTGTCGAAAATTCTAGATTTTTCATACAAAAATGATGTA
-ACCAAGTGTAAATTATTTTTATACATACAAAACATATCAATTTAGTTCGA
-TACACTAAAATGATAATAAAAAATATAATTTTTTCGGATAATTTTTGAGT
-TTTTTGAATATTTCTTAAGTTTCAAATTTCAAACTAAAAGGATTTGTGTG
-TGTAAAAATAATTTACACTTGGTTACATCATTTTTGTATCAAAAATCTAG
-AATTTTCGACAAAAATCTTTTTGAAGCTTTTTTGACGATCAACCAAAAAA
-AATTTTTTGGACGGATTTTTTTCCAAACTTTTCTCGTTTTCTAATGATGT
-ATTCTAAACAAAGCAAAATCCGCACACAAACCTCAATTCAAAGATAAAAA
-GAAGCGAGATCAGAAAAATGCCTGAAAAAATTGGCTCCGAGTACGGGCAC
-TTGGGGTGGTCAAAACATTTTGTGACTATTGTCAAATGAAAGATCATGGT
-TGATAACATAGATTCCCAAAGTTTCATAAAAATCGATTTGCAGCGAACAA
-AGTTATGATTTTTGACCCGGAACTTATTTGGAGACCTTATACAATTTTTC
-AACATTTTCCAGAAAATGGAGCTAATCGTCTCGAACATTATCGATTCATC
-TCCAATGTCACTTGGACTATCCGATGCGTTTAAGCGAATTGTCGAAGCAC
-TTGCATCTGGATATTTGTATTCTGGTAGGGGGGTTAACATTTAATTTTTT
-TAAAATATTGAAAAATGAGCATATAAAAAGTTTTAAAATAATTCAAATTT
-TTACAAAAAAAAAATTTTTTTTTTCAATTATTTTGCGTTTTTGTATGAAA
-ATTGTGTTTTGAGAACGGAAACTCTTTTTTTTTAATTAAAATTTTGAAAA
-AAAATCCTGGAAAAATGCTGAATTTTTCGGGATTTTTCGGAGCACATTTC
-CAAGCTCTAAAAATTGCTGAAAATTGAATTTTTCAGAATTTTTTTGAATT
-TTGCACAAAAATGACTATTTTAGGAACAAAAAAAACATTTTTCAATCACC
-GAAAAAATGTATTAATTTTATATTTTAATGTTAAAAATACGGTATTTAAA
-TTTTTTTTAAACGTTTTTTTTACACAAAAAGTTGAAATTAGGTTGAACCC
-GGATAAAATTTAGAAAAATTAAAATTTCAATTTTTTTTGCGTTAAAATAT
-GTTTTTTAAGGTTGAAAAAAATATGTTTATTCAAATAAACACATTTCTTG
-AAAAGTTCTTTTGATTTTTAATATTAAAAAATTTATTTTTCAAAAAAAAA
-TTTATTTATTTAATTTTAAAATTTTAAAAACTTTAAATGTGGTGTAGTCG
-ATTTTTTAAATTGTTCTATTAGACTCAAAATTGACTGAAAACACCGAATT
-TCATAATGAAACTTCTTGAAAACTTCTCAAAAAAAAGATATGACTGCTCA
-AAAATGGCCTAAAGTTAGTTAAAATTTGAAATTTGATCTACTTGTCAAGC
-GGCTGGAAACTATTCTTTTTTTTGAAATCACCGTCAAATTTTGAGTATAA
-AATGTAATTATCTTGCGTTATCAACTTGATTTAGGTATTTTAAAGTCGAT
-GGACGGAGAGATTTTTAAAGGTGGAGTACCGAAATTTAAGACTTTGCTTT
-TTTAGACCCAAAATGGCCCAAAACTACCGAATTTCGTAATGAGACGTTCT
-GAAAATTTTCCAAAAAAAAGTTATGGCCGATCAAAGTGTTTGGAAAAAAC
-GGCCTATTTTTAGCTAAAATCTCAAACTTTGGCAATTTTGCAGTGTCGCA
-CCGATAAGTTGCCAAAATTTCGGTCTAAAAAAGCAAAGTCTTAAATTTCG
-GTATTCCACCTTTAAAAGTCTCGCCGTCCATCGACTTTAAAATACCTAAA
-TCAAGTTGATAACGCAAGATAATTACATTTTATACTCAAAATTTGACGGT
-GATTTCAAAAAAGAAAGCTAGTTTCCAGCCGCTTGACAAGTCGGTCAAAT
-TTCAAATTTCCGCTAATATGAGGCCATTTTTTGAGCAATCATAACTTGTT
-TTTTTGAGAACTTTTTTTTTTCAAGAAGTTTCATTATGAAATTCGGTGTT
-TTCAGACAATTTTGAGTCTAATAAAGCAATCAAAAAAATATTCGACTACA
-CCACTTTTTGGCCTATTTTTTTGGCCTAAAATTGAAATTTTTCCAGCAAT
-CCTAAGCGATCCGTGTGAGACGTCTCGTCCGAACGTTCTCGATGCTTTAA
-CCGACGAGCAGAAGCATTCGTTGACCGCCCTGGCACAGAATTTTGTTCGG
-CAAATTGCATTCAATCAGATACATGAGGTATGCGGGGATTTTTCCTGTGC
-AGAAAAAATGTTTAGTAAATTAGGGAAAAAAACCTTGAGTTTTTAAAAAA
-ATCTGTGGAAAATTTGAAAATTTTCGCAAAAAAAAAATTATAATAAAATT
-AATTTCAAATTTGCAAAAATTTCAATTTTTCAAATAAATTTTGAATTTGC
-ATTCCAAAGTCACTAAAATGGAAAAAATTGCTAAAAATTGAATTAAAAAT
-ATTTCTTTCCTGAAAATTTTTTATTTTCCGAGAATTCTGAAATTTCTTTT
-AAAAAAAATTAAATTCGCGAAAATTTGAAATTTTTTGGAATATTGCAAAA
-AATTGCTAAAAATTGAATTTTCCTATATTTCGATTTTTTAGATTTTTTAA
-AAAAGTTTTTTTTCAGCCATTTCTGGCCGAAAATTGAGAAAAAATAGTCA
-GAAAATTCAAAAAATTGCTTTTTTTTTTCAATTTTCCGAAATTTTGAATA
-TTGATCGTCCGAAAATTTAAAAAATAATCGCTAAAAAGTTGAAAAAAAAA
-TTATTGAAAACAATTTTTTTAAAATAATTTCTAGCAGATTCCATGAAAAA
-AGGCTGAAATTTACGAAACAATTTTTTTTTCAAATTCAATTCAGAAAAAA
-TTGAATTTTCTCTGATTTTGGGCCGATATTTATAAGATTTTTCAGAATTT
-TCCAAAAATTCTTGAGAAAAATTGAAATTTTTCTGCCGTATTCCTATGAA
-AACAGCGGAAAATTGAATTTTCCAAGTTATTTTTATAGGGAAAATTATAG
-TGACTCTATAGAATTCATGAAAAATTCTGACAAAAAACCAAACATTTTGG
-CCCAAAATCAGAGAAATTTCACAAAAAAAAATGCTGAAAAATTTAATTTT
-CAGCAATTTTTTTTTCAAATTTTTTTAAAAAATAAATTTTCGTAAATTTC
-ATAATTTTCAGTTTTTTTCCATTTTTTTAAAGAAAAATTATTTTTCCAAA
-AATGTGCAGAAATTTCAGAATTTTCGGAAATTAAAAAAATTTTTAGCAAA
-AAAAAAAATTTTTTAATCCAATTTTTATGATTTTTTCACTTTTTCGGTGG
-TATTAGGACTGCAAATTCAAAGTTTCTTGGAAAAACATAAATTTTCAGAA
-AATTTAAAATTAATCTGATTATAATTCGGAGCATAAAATGTGCTTTTATC
-AACAACATTTTTTTTTTCGAAAAGTCAAATTTTTCCACATTTTTAAAAAT
-TCCTTTTTTTTGTATATATTCGGATTTAAATTTTTTTTTTAACGGGTTTA
-AGCTATTTTCTGAGCAAAAAAATTGAATTTTTCTAAAATCACCATTTTTC
-TTCCAGATTCTCGGAATCGATCGTCTTCAAGACACTATTGATCTACCAGA
-GGATGCTCCGATGCTCAAAAGACCACTGGAGAGCAATGAAAATGCTGAAA
-ACGCAGAAAATCTCGACGATTCGCCAGTTTCCAAAAAGGAGAAGCTCGAC
-GAGGAGCCCGCCGATATTTGAGCATTTTTATTTTAAATTTGGTTTAAATT
-ATTTAATTTTCCTCTAATTTTCCTCATCTCTGTGTTTTTTTCTAATGTTT
-TTGGGTCCCGTAGCGAAAAAACGAATGGCTCTCTTCGCGGTGAGACCTTG
-AAATTTTTATTTTTCTACTATTACCTCCCCCTGCAAACGCGCTCTATTGA
-CGACAATTCGCAATGGAGCGCGATTGCATATTTTGTTACTACATTTTCCA
-CACTCATGTTCGATCTTCCACTAGGGGAGGGTCTCGCAGAAGGATTTTTT
-GAAAAATTTAGATTTTTTTTTGAAAAATATTCGAAACAATTTTACGTTTT
-TCGAAAAAAGTCCTAATTTAGCCTAAAAAATCAAAAATTGATAGGATTTT
-TGAAAAAAATTCAAAAAATCAAAAAAAATTGCAAAAATTTTTATTTTTTT
-TTTTGAAGAAAATTTTTTGTAAAAATTTGATTTTTTTGAAAAAGTTTGAA
-TTTTGAATTTTTTGAAAAATTCTAAAAATTTTGAATTTTTTGAAAAAAAC
-TCAAAATTTTTGGAAAAATTTTGAATTTTTTTGAATAAATTCAGAACTTT
-TTGAAAAAATTCGAATTTTTCTGAAAAAAACTCAAAATTTTTGGAAATAA
-TTGAATTTTTTCGAAAAAATTCGAGAAAATTCCTAATTTAGTCGGAAAAA
-AATATTAAAAATTGATACGATTTTTGAAAAATTTTCCCAAAAATTCTATA
-GAACTGTCCTGAATTTCTAAAAAAAATTCAAAAAAAAAACAAAGTTTTTT
-AGAAATTTGCAAATTTCTTTAAAATTTTGGAAAAAAATCTATTTTTTGTT
-GAAAAGTCTGCAATTTCTAAAATTTTCCTATTTTTTCTGCTAAAACCTGC
-AAAAAAGGACCCTCCCCCTAACTATCTTGTTCCTCCAAAAACCGACAATT
-CTTCTGTTTTTGTGTTATAATCGTCCTTTTTCTTGTTCAACAAAACAAAA
-ATTAAAATAAATTAGAAGAAACGGTAAATTTAGATACGTTTTTGCCACGT
-GGCCGAGGTTTTTCACGGCCACGTGGCAAAGGCCGGCAAGAAATGCGCTG
-TGGTGGGAGAGGAAATTGATAGGGAAGAAGGAAGAAGAAAAAAAAAAGAA
-AAAATCAATATTTTAAAGCCAAAAAAAATTTTTCTGAAAAGACTAGCAAA
-ACAGGAATGGTTATGGGTAAAGCCGAGGTTTTGAAGGAGAATTTTTGGGA
-AAAAAATTGCAAAAAAAAACGAATCGGTAGGGACGGACCGGCAAGATTGA
-TTGAAAAATTGACGAAATTATCGATTTTTTGGCGGCGCACGGGGTTCTGG
-CCTTCCCTCATAAATGGAAGAGTTTTTGCCGAACTAGGCCACCAGGTCAT
-AACTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTCAATTTT
-AGTTGTAAAACTAAATGTATTTGTCCGTGTGAAGTACACGACTTTCCCGG
-CGCGCGATTGTCAATGGAGCGCGAAAAATTAAGGGCCAGAAGTCCTCAGA
-ACCCCGTGCAAAAATCGATAATCCCGTTTAGAATCGGTGAGGGCGTGGAA
-AGAAAGAGATGATGAAACGGGAATGAGCAAAATTGCAAAAAAAAACAACA
-AGAAATTCCAGAAAATTCCATAGAAAACGGGGTCTAAAGCACCAGATTAG
-TGTTGTGCGTGGGCGTCCACTGTGACGTCATCACCTTCCACTTTTCGTAG
-TTCGACTCGAGCTGATCGGAGAGCTCGCCGAGCTTGGCGAACTCGGTGAA
-TGTGGCGAATGCTTCGCGGGCGAACATGTCTGTAAAATCAGAAATCAGGA
-GAAAATTCAATTTTGCGCGTCAACTTTGATGTTTTTTTGTGTTGGTGAAC
-TTCAGAAAATTGAATTCGCCAAATTTTACGAGCAAAATTGGGTTCTTTTG
-GTATTTTTCGTGGAAATTTAACCAAAAATCGAGTTTTCTACGGAAATTTA
-ACGTATTTTATCGATTTTTCATCAGAAATCAGTAGAAAATTCCGTTTTGC
-GCGTCAATTTTGATGTATTCGGGTCGGTGAACTGCACCAAACTGGATTCG
-CCAAATTTTACGAGCAAAATGGGGGTTTTTGCAAATTTTTCTTGGAAACT
-CAGTCAAATATTGAATTTTTCGTGGAAATTTAACCAAAAATCGGGCTTGC
-TACGGGAATTTAACAAATTTTATCGAATTTTATTTTGCGCGTCAAATTTG
-ATGTTTTTTGTGTCGGTGAACTTCAGAAAACTGTATTCGCCAAATCTTAC
-GAGCAAAATTGGATTTTTTGGGTATTTTTCGTCCGAAATTGATTTGTCCA
-GTGAAATTAAACGCGATTTATCGATTTTTTATCGGAAATCAGTAGAAAAT
-TCAATTTTGCGCGTCAAATTTGATGTTTTTTGTGTTGGTGAACCTCAAAA
-AACCGTATTCGCCAAATCTTACGAGCAAAATTGTATTTTTTGCGTCTTTT
-TCGTGGAAATTTTTACAAAAATCGTTCTTTTAAAAAAAAAATTCCACACA
-AAAGTACAATTTTCACACAAAAACTGCAATTTGCGCGTAAAATATGGCGC
-AATCGGTTGAGTGCGGCACGCCGACTCAAAAACACCATATTTTACGCGCA
-AATATTAATTGAAGCGCCTTCACGTGGTGTCAGGTTGTGTCATCACGGTT
-TGATCTACAAAAAAATGGGGGAATTTTTTGCCCAATAATATGTGACGTCA
-GCATGTTCTTAGCCATGCAGAATCCGTCTAAAATCCCGCATTTTTTGTAG
-ATCAACGTAGATCAAGCCGAAATGAGACACTCTGGGCTTCAAAACACTCA
-CCAATAAAACCGCATTGTGTGATCGGAACGTTACACGTGTTCCGATCGAA
-TACCTCCATCGTCACAGGCAGCCCTTTCTCTTTTTCTTCTCGAGTCTGGA
-AAATATTGATTTTTATTTTATTCTTGGAATTTTAAATTTCAAACAGTAAA
-AAACCAAAAATTATCAGTTTTAACTTATCCAAGTTAAAGAACTACAGTGA
-AGAGAACTACAGAAATATTAAAAAATATATCGATGCACCAAGAGCCCAAG
-AAATCTCTGAGAGCCCATATCTCGGCTCATTTCGAAGTTACAAATAAACT
-GCAAACTATAAAAATATAGAAAATTAAATTTCAATTATTTTGTTAGTTAA
-CAAAATTTGGCTAGAATTGAAATGAACTGGGATATGGGCTGGCAAAGTTC
-ACTGAATTTTTTCTTTTTTTTTCTTTTGTTTATTTTGATCTCTACACCAG
-GGGTGAGCAGCAAACGATTTTTTCCGGCAAATCGGCAAATCGTTAGCTTG
-CCGGAATAGAAAACTTCCGGCAAATCGGCAAACCGGCAAATTACCGATGT
-GCCGAGTTTGCCGGCAACCGTATGTTCCCTATGAGTATGGCCACCCATCA
-ATCGACTTTGTCGGCTTATATTTCAGCGGTTTCAGAAGTTTTTTGATATT
-TTCAAAAACCAGAGGATAACGATAGATTTGAAAAATATTTTGTCGTTTGA
-ATTTTTAAAATATGATAAAAGACAACCGAGATATAAACGGTCAAAGTCAA
-GGGGGGCCATACAAAAATTTTTTTTTGGAAATTTAGAAAAAAATGTGTTT
-CCGTCTTATTAAAAAAATCTCTCTAAGCATTTCCGGCAAACCGGCAATTG
-CCGCCCTCCCCCGACCTACGCACCTGTTCAAAGTACTCCTCAACAATCCG
-ATGCGCCCATCGCTGACACAATCCCCACTCTCTCGCCGGATTGGAGATGT
-CGGCGCACTTGACAAGCATATCACATATCGTAAGTGAATTCGTGTCACGT
-TGCTCCTCCGGCACATCTGTCACATGCATCTTGTTGAACTTGGCGAGGTA
-CTCAAAGTGTCGACTGATGTCCGTAGCCAACACCATCTCCACCATCGCAT
-GTCGCATTTGGATGAACTCCTCGCGCGACAGACTCGAGAAGATGTTCACG
-TTGGCGTTGTGCTGAAGGGTTAGCTGAAAGGCTAGTGCGATGTGATGATT
-CTCCAGGATCGAGTTATCATTGTAAAGTATTGCAAGCGACTGTCGCGTAT
-TGATCAGGTACGCGTTTCCTCTTCCAGGATGGTCTAGATCATGCACCGCC
-GCTGCGAGAAGAGCCGCCACCGCATGACTTTCATTCACGTGCACGGCGAC
-CGACGGGGAGTCCAGGAAGAATGAGGTGGCCTGTAGGACGTCGGCTGCGT
-GAGTTGCGTTGTGATACGTGTTTCCCGCATGGTAATGAGCCTCGATGGAT
-AGAATCCAACGGTGGAGGAGATCGTCGGAGCAGCCGAGCACATCGCAAAC
-CTTCCACCTCTCGAAGACTTTCATTCCGACTTGGGAAAGAGCGTGGTGAT
-CCGACACCTTTTCCAGATGAAGGATGTCGAATTTCCAGCAATTGTCGTTT
-TCCAGCGCGTTCTTCACGTCAGCAGATACCCGCCGACGTTCTCCATGGGA
-TCCTCGCTTCTCTCGATGCGCGTCGACGACGCTTCGCTTTCGCTGCCTAG
-CTGGATGATGGAGGCGAATGAGACCATCGTAATATTGAGTTGCTATCCGA
-TCGGCGTCGCGGAATCGATTGATCGACGGCGCGTACAGCTCGTGCGACGA
-CAGCACCTTCATCGCGTCCTTTATCGTTTGTGCCGGTTCTCCGTCGACCC
-GTGCCGACACGTCTCGGAGCATTGTGAGCACCTCGGAGATGGGCGCCTCG
-ATGCCGCCCGTCTGCGATTTCAGGCTTTTCAGGGAGACGTCGCGGAAGAT
-TGCGGCGGTGTCACCGGTGGTGTTTGAGCGTTTCATATACACGAATTGAC
-TACTGCAAAATTCATAGAATTTTTTGATTAATTGGTGGCCGAGTTTTTTA
-AAATGGTGGCCGAGATCTTTAAGTTGATGGCAGAGTTTTATAGGTTGATG
-GCCTAGTTTTTTAAAATGGTGACCGAGTTTCTATGCAATTTTGTGGCCGT
-GTTTTTGTATAAGTTGGTGGCCGAATTTTATAAATTGACGGCCGAGTTTT
-ATAGGTTGGTGGTCGAGTTTTATGAATTGGTGGACGAGTTTCTATACAAT
-TTTGTGGCCGAGTTTTTGTATAAGATGGTGGCCGAGTTTTTTCAAAATGA
-TGGCCGCGATCTTTAAGTTGATGGTCGAGTTTTATAAGTTGGTGGCCGAG
-TTTTATAGGTTGATGGCCGAGTTTTTATGTAATTTGGTGGCCGAGTTTTA
-CAAGTTGATGGTCGAGTTTTATGAATTGGTGGCCGAGTTGCTATACAATT
-TTGTGGCCGTGTTTTTATATAATTTGGTGGACGAGTTTTATAAATTGGTG
-GCCGAGTTCTAACGGATTAAGCAAAGGAAACTAGAACAGAATTTTATTGA
-AGAGAAAACTAGGCCATCAGCTTTTCAAGAAAAACTCGGCCACCAAATTT
-TCCAGCAAAAAACTAGGTCGCCAGTTTTTCCAGCAAAAAAACTCGGCCAC
-CAAATTTTCCAGCAAAAAAAACTGGGCCACCAAATTTTCCAGCAAAAAAA
-AAATCGGCCACCAATTTTTCCACGGAAAACTAGGTCATTTCATTGTTCGT
-TTGAGAGAAAGCTAGGTCACGTACATTTTCAATAAGAAAACTCGGCCACC
-AATTTCTTGAGCATAAAAAATTCGGTCATCAATTTTTATAGAGAAAGTTC
-GGCCATCAAGGTTGAAAAATAAGCTAGGCCACCGATTTTTTTTGTTGAAA
-AAAACTCGAACACCTAACCTATTTTCCTTTTTTTTTCAAGCCTAGAAAGC
-TCGGTTATCGAGTTTTTAGGCCACCGATGCATTTTTTTAATCGAAAATCG
-AAAAAAAAAATCGGTGGCCGACTTTTTCATTTACGGCCACCAATTAAAAA
-AAACTCACTTGTTAGCAAACGGGACCCGTATAAATTTCCAGTCGCAACTC
-CGCCGCCGCTCCTCTTCGCCACGTGCCCTCGGCAGGGACTTTCGTCGCAT
-TTCCGATTCGGGTTGTCCGATCACCTCGGATCGTATGCATCCCGTCACGT
-TCTCGTAGGCGCGGTTAACGTACTGCACTACTCGTTGCTCATCACATATT
-TCCACTGCTTGATCCGTCTGAAAATACGCAAAATTTGAAGGTTTGTAGGC
-ACACGTGGCGCCAGTCTATCCCATTACGGTTTGATCTACAAAAAATGCGG
-GAATTTTTCACCCAAAAATATATGACGTCAGCTAGTTCTTAACGATTCTC
-AACTCCCGCATTTTTTGTAGATCTACGTAGATCAAGCCGAAATAAGAGAC
-ACTCTGACACCGCGTGTAGGCAGGTAGGCGTTCAGCCAGGCGATTAGGCA
-GGCAATTAGGCAGGCGATTAGGCAGACTAGTAGGAGGTAGGCAAGTAGGC
-ATGGAGGCCAAAAGCTCACCTCATCCAAGACGGCGAAAAGGGCGGGCAGC
-GCGCGGATCCGATTCGCGAGCCGCCCGACGTAGTCGAAGAGCACCACGTC
-ACGCGTATTCCACGTCACATGCTGAAAAGAAACGAATGAATGGGAATCAG
-TGTGAATGAAATATTAATTAGAATTGAAAATGAGAAAGTGAGAAAACGGA
-TGACTTACATGAATGATGTTGGACTGCGCAAGAGCTCTCCGTCGCTTTTC
-GCTGATGTGTCTGGAATATGTGATTGTTAGATTGACAATTCTGGCAGAGT
-GGTCTAGAAAATTGGGGAAAACTCGGCCACCGATATGTTTTCTTTGGTTG
-TGGTTGGAAAATTTTGGCGACCGAGTTTTTCAACGTATCCAAATTTATGT
-GGCCGTGGCCGACTAAGGCCACATAGAAAAGAAAAATACCGAAACAATTG
-GTGGCCGAGTTTTATCAACGTAGCCTAAATTAGGTGTACTTGGCCGAACT
-TTTCTTCTGACGGCCACGCAGCAAGGAAAAAATAATGAAAAAAAAGTTGG
-TGGCCGAATTTTAAGCCTACACAAAAAGTTGGTGGCCAAATTTTAAGCCA
-ACAAAAATTGGGGGCCGAGTTTTTGTTTTTTGAAAAAATTCGTGGCCGAG
-AAAATGGGAAAACGCGGCCACCGATATTTTTTCTTTGGTTTCTGGCTGAA
-TAATTTTGGTGGCCGAGTTTTTGTTTTGGATAGGTTGGTGGCCGATTTTT
-ATCATTTTAACCTAATTTACGTGTTCTTGGCCGAACTTTTTTCTGACGGC
-CACATAGCAAGGAAAAAATAACGAAAAAAAAGTTGGTGGCCGAATTTTAA
-ATTCACAAGAAAAGTTGGTGGCCGAATTTTAAGCCTACAAAAAGTGGCGG
-CGCTTTTTCTACAAAAAATTGCTGTCATTATTTTAATTGGAAAAACTTGT
-GGCAGTGATTTTGTTTTGAAAAAAATCGTGGCCGAGTTTATCTGTAAAAT
-TGGTGGCCGAGTTTTATTCACGTAACCTAATTTACGTGGCCGTGGCCGAC
-TAAGGCCACATGGCAAAGAAAAATACCGAAACAATTGGTGGCCGAATTTT
-TAGTCTAAAAAAATGGCGGCCGAGTTTTTGTTTAAAAAACCGTATTTAGT
-ATATCTGGGACGAAAAATGGTGGCCGAGGTTTTTCAATGTATCCAAACTT
-ATGTGGCCTTGGCCTATAGCCTAGCTTTCCTAAACCATTTGTTTAAAAAG
-TTGGTGGCCTAGTTTTCCAGCATAATCCAACTCACTTCTCGGCGATCGAC
-ACAATCAACACCTCCTCTGTGCTCACCGATGAGACGTCTCTGAAAAAACG
-TTTCGTTAGTAGATCATGGCTGACGATCAACGCTGCTCCCTTACTTGGCG
-ATTTGCGATGGATGAGGTACTCGAAGATCTATGAATACAGCTAAAGGGCA
-TATTGATTCAACGTCGGATGTTGCCTGCAAGAAAGTGTACATATTCAAAA
-ATTTCCAAAATTCAATTTCCTTTTTCCCGCCCGTGTCCGAATTTCCGGAA
-CTGACCACGTTTCAGTCATGGTCTTCGTAATTCCCAATTTCCTTTCTCCC
-TTATCTTTTTACGTCAATCATGATAGCGGTGATACGTGTTTCGAGGGTAT
-ACATGCTCACACAACAATGCACTTAATCAGCTAATCTCTCCCACACCTCC
-ACAGAGAGAGTGTATGAGCAAGAGAAAGAGCACCTGCTTCTTCCAGATTA
-GTGAGCGAGCCTGTTGTCATCTGACTTCTGCTGACGGAGGGAGCTTGAAA
-AGCGGAGCAGGAAGAGGAGAAGAAAAAGAGCATTCAGAGATAATTACGCG
-CGAGTCGTAGTAGTATGTATACACTGACTTCTTCTTCTTCTTCTTCCTCT
-TTTTCCCCGTCTTCTGCTCGTTGATGTCTGCCATTATATTGATCATTAAC
-GAGGGCCTAAGAATCCTGGAAGAGTTGTGAGGTCACACTGATGGCCTAGG
-AATCTCAAAGGCAGGCCATATCATATTGCAGGCCATATCAGGCCCCATAG
-CCTGGCCATAGTAGGTCACCACAAGCTATGGACTGCCCTCAAGATTTTGG
-CTCAATTTGGATAAGCTTCTTCGGAGCCCCTGGGCTTAACAGACTGACGT
-CATAGGTGGTATATCTCGGCTAGGCGGAAACTCGGAAATGTGAATTTTTT
-GACGCAAACCAAAGATCTTATAGATCCTTGAAATCTTCCACAGGACTTAG
-CAGACCGGAGGCCTGGGAACTATGCAGTTAGAGGTAATCGCCAAGTCCAG
-GGCTCCGAAGAGAGAGGGCCCAGGGCTCCGAAAAAAGCTTAAATTTTGGG
-CCAAAATTTCCCAAATTGGGCCAAAATTTCAAAAGTATGTAGTAGGTTTC
-AACCCTCATATTTCCCGGGATCATGATTTTGTGGACTATTATTTTCAGGC
-TGTGGTGGCCTGCTATACCCAGACTATGTACTGGGCCAAGCTCTGGCCAG
-GTTATGGCCTTTAATAGCCTTGAATTTTGGAGTCAAAGTTCTTGCAGAGC
-CTAGGAGACGCTTACCACTTCGGATCAAAGGCCTGATCTAAAACTCAATG
-GATCATGACCCTAGAACCTCAATTTTCATAAGCCTAATACGCAGCTACTG
-GTCTAAGCTCTGACCAGGCTATATGGCCTGATATGGCCTGAACACTTCGG
-TGGCCTAGTCTAGGTTTTTCCAAGCCCCAGCGGGCCTCAATTTTCATAAG
-CCTAAAGACGCAGCTACTGGGCCAAGCTCTGGCCTTGAATTTTGGAGTCA
-AAGTTATTGCAGAGCCATCATGCCTAGGAGGCCTAATCTAGATTTTTTCA
-AGCATTGAGGCCCCCACGGGCCTCAATTTTCATAAGCCTAAAAACTCAGC
-TGCAGCCTTACCTGTGTTGGAAATGATACTGTACAAATCCATCCGGATGC
-CCGTAACGAGTCGAGGAGCACACTCTCGCCGGTGCCTTCCGTCACGATCA
-CAGCCTGCAAAAAACGCATTATTTATAAGATCTTACAGGGGATTTTCAGG
-ATTTTCAGGAGGATTTTGTCGTGTGCCAGACCTCAAAGCTCGTCGGGATA
-AAATGCTGATATTGATTGACATGCATATATATAGATATATATGAAGTTGG
-AAGAGCGGAAGCAGCAGCAGTGGCAGCAGAACTTGTGTGTGACGGGGATT
-TGTGGGAACAAGGCGCCAAAGAAGACGAAGCAGAAGAAGAAGAAGAAGCC
-GGGGGCAAGCAATGAATGCAATGTATGTAGGAGTATGTAGGAGTATGTGT
-GTGTGTGTGTGTGTGTGCGAAAGTCTCTCTATGTGTGTGTGTGTGTGTCA
-CAGGTTATATATTGCGTGTGCACAAAAAATGTATGAGGTCTCCTGATGTG
-TGTGTGAGTCTGTGAGTCTGTGAGTGCAGTGTACAACACCTTTTGCGGAG
-TCTTATCACATACTGATACGAAAGTGTTTGTATTTTTATATTTCTTTGCC
-ACGTCACACTTTATTCAATTTTTCGCGTGTGCCTCTCGCCCCGTCATTGG
-CACGCAGTAGAAAAAGAAGTAGAAGAAGATGCGTCTTCTTGTTGCCATAT
-CCCATCCAACTTTGTTACTTACGGAATTCGCGCGCGCGCGCGGGGAGGAG
-AAGCAGAAGACGACGACGACGAGCTCGAAAGAAGACGAGTCCGCCTGCGT
-CTCTGCAGTGATCTCGTGTCCCTCGGCAGCGGCTGCGGCGCGCGCTTCAA
-TGAAGACGAGAGCTCCCCCCCCCGGCGGCGCCGAATACGCGATTTGTCAT
-CGAGATGAGCGCTTTGCTGACAGAATAGAATGGGCAAAAACAGGAATACG
-GAATACAGTAGTCATGTTTTGTTGCAATGTTATGGGAAAGCTGGCTTGGC
-GTGGTCGTCGAATTTTTCGCGCTTCATTGACAAAGAACAAGGGAAAGTCG
-TGTTCTCCACACGGACAATCACACTAAGTTTTAGGACTAAAATCGAGCCG
-AGCCAAAATGGCCTAGTTCGGCAGAAACTCTTCCATTTCAATTTGTGAGG
-AAAGCCAGAGTTCTGTGAACCTCGGACCTGCGATCGCCGACCTGCGATCT
-CCTAGACAAATGCTCACCCCAGCGCGGGACTCGGGAAAGTTAGCGCCAGG
-AGAATAATTTTTGAATTTGAAGAAAAAAAAAGAGGAACTTACAGTTTTCA
-GCATCTTCACTTGCATCGGCCCAAACGTGTCATGTGCCGTGGAGCTGCTC
-GTTGCGGCGACAGTTAGCAGAGGTGTTGGTGGAGCACCACGCGATCCACC
-TCCACCACCACCATTCTCAGAATACGACCCACCGCAGCACCATCTCATTG
-CAAACACTGGCCTGGATGCTGCTGCTGCTGTTGCTGCTGGTGCTCTCTGT
-GCGCCTCTTCTAGCTGCGGGCGTGTGCTGCTGCCTCCTGCCAGCTTGACT
-GTGTGCGCTAGCCCCGAGCACACTCTTTTCACCCTCTTCTCCCCCCACCC
-CGCTTCTATCGCCCATTCTCTCAATTCTTCTCTGCCTCCTCCTCCTCCTC
-CTCCTCCTCCCAATTCTCATGTCATCGGGGGGCCCGTCGTGTCGTCGAGC
-GCCCTCTCGCGTCTGCAATGTCTCGGCGCCGCCGCCGTCGTCGTCGTCGT
-CGTCGTCGTCTTCGGGGGGTTGTCATCTGCTGTGTTCACACTGATGCCGC
-CGCCTTCACCGCCCATCTCATCGTCTCCTCCTCTGTGTGGACCCGCCGAC
-CGGCCGGCGCGCCTTCTCCCATCAGTTCTATCTCTCTCTCTCACTCACTT
-ACTCTCAAACCGCGTCAATTGATCTCTCTGGCACGCTCTTCGCTCGGCGA
-GCTGTATTCGGTGTCGGTTTTCAGTCTGCGTCTCCGCGCCCCGGTGCAAT
-GCATATGTTCCATCACGTTCTGCTCCTCTTGTTGCTCCGTGTGCTGCCGT
-GTTTTACGCAATTTCAGGTAAAATTGATACAATTGATACAATTGATAATT
-ATCGAAGTGTCCTCTATGTGTACTCACGCTGTTAATTTAATGGCCTAACC
-ACAGAATTATGCTTCTTTAATTTTTGAACTCGTAGCTCCGTATGTTAAAT
-CCACTATGAGATTCCTTGCCATGTTTTTGCAATATTTTTTTGTTTGTTAT
-GAGAAAGTGTATGTGTTCTTTGTTTGGTCACATGGGAACCGCTGGCCTGA
-GAATGGAAGGTTTTCTGGGACAGAGCTTTTGAATCCGATAGCCTACAATA
-GGGCCCCAGTGCAATAACGGTAGGCAGGCCCGAGGCCTAATTTAGTCCAA
-ATAGTCCTTATTCAGTCTAGATGATTCAAAGCTAAAATCAAAGGGCTGTT
-CCATTACGTTGTGATCTACAAAAAATGCGGGAATTTTTCGCCCTAAAAAT
-GTGACGTCATCACGTTCCATGCGTTATTATTTATGAAGTCTGCGTCTCAT
-TCTCCCGCATTTTTTGAAGATCTACGTAGATCAACCAAGCGCCTTACCCC
-TAGCCTCTAAGCTCCTAGGGCCCTCTAGGACCATTTAGGCTTTTTGGACT
-GTCTAAGACCAATTGGGCTTTTAGGCTCCTAGGTCCCTCAAGGACCGTTA
-GGCCTCTTGGACTATCTGAAACCATCTGGGCGTCTAGGCTCCTAGGGCCC
-TATAGGACTATTTAGGCCTCTTGGACTATCTAAGACCATCTAGACTTCTA
-GGCCTCTAGGGCTCTCTAGGACCATTTTGACTTGTTCTATAGGACCTTGT
-TCGACTAGCTAAGACCATCTGGGCTTCTAGGCTTCTAGGGCTCTCTAGGA
-CCATTTAGGCCTCTTGGACTATCTAAGACTAATTGGGCTTCGAAGCTCCT
-AGAGCCCTCTAGGACCATTTAGGCCTCTTGGACGATCTAAGATCATCTGG
-GCTTCTAGGCTTCTAGGCCCCTCTAGGACCTTCTAAGACCCCAGTCTTTA
-TTCCCTAGCCTCTAGGCTCATAGGCCTCGATTCCGCAATTCTAATGGCTT
-TGGGAGCCCAGTTCTAAGGCCCATGGACTTCCACAGTAGCTTTTCAGTCA
-ACCATTTCCAAGTTAACCAAGGACCATTTAAGCCTTTTGGGCTATCTAAG
-ACCATCTGGGCGTTTACTTTCTAGGCCTTTTCCTGCCTATTGGGCCCTCT
-TGGACCTTCTAAGACCCTGGCCTTTAATCCCTAGCCTCTAATCCTCTAGG
-CCTCGATTCCGCAAATACAATCCCAGTTCTAGACTCTCAGGGCCCTTGGG
-CTTGTAGGCTTTCAGTTAACCATTTCAAACAGGTGCCGTTCCGCTCCATC
-TCTTCTTGCTCTCTCGTGCTCCTCTCCTACACCATCTTCTCTCATTGTTC
-TGACGGATGGATGAGCTGTCATCATCATCATCAAAGCTCCAAAGACAATT
-GCCATCAATTTGTGCCGCCGCTGTGCTAAGTGGTCTTATTCCGCCGGGAC
-AAAAAAAAAGGGAAAATTCTCTGGGAATTTGGACTAACACCACCTACTAT
-TACTGTAAAAAAACATTTGGAGAAGGGGGAAACGAACTAAAAAAAAACAA
-ATTAAAATCGGCGTATCAAATTGAAATCATATGATTCGTTGCCGTCGTCT
-TCTCTGCAATGATCGTTTGTTCCGTCGTGTCAAACTAACCTACTCAATGT
-CATAAAGAACAAAGAATGAATTCAATAAAACAAGACGAAAAAATAAATAC
-ATTCAGGTACTGTACAGAGAGAATCAGGATCACATCTGGAATAGCTCGCA
-GCCTGTTCGATTCTGGGAGCTTGTTGAGTATAGGCCGACCACTACGCCGC
-CGCCGACCACTACGACAGAGTATATACCGCCACCGACGACTACGTATGTT
-CCCTGAACTTTAAAGTTGCATTTTTTTTTAAAGGATTAGGGGTTTTAATT
-GAAATTTCAGAATTTTTGGTAAATTTTTTAAAATTAGTTTTATTTTTTTA
-CGGGCTTTTGCGATTATTACTGGTAGAATGAAAGTATGTACATTTCTTGT
-AGATCAGAAAATTTAATTTTTGATATCCGATAAATGTTAAAAACTCGATC
-GAAAAAAAAATAAATTTTTCCAAAAACTAAAAAGTTGCAAAATTTATTTT
-TTTTACAATTCAAAGTTTGTAATTTTTGACAAAATACATTCAGAAATTTT
-TTTGGAATAGGGGTTTTAATTAGGCTTGGGCCTAGGTTTGGGCTTGGGCT
-TGGGCTCAGGCTTAGGCTTATGGTTAGGCTTAGGCTTAGGATTGGGCTTA
-GGCTTAGGCTTGTGCTGAAGCTTGGGCTTGGGCTTAGGCTTCAGCTTAGG
-CTCAGGCTTAGGCTTGTGCTGAGGCTTGGGCTTAGGCTTAGGCTCTCAGG
-CTTAGGCTTGGGCTTGGGCTTGGGTATGGACTTAAAATTTTTTTTCAAAA
-ATTTTATTTTTCGAAAACTTATGGTTTTACCGGTATAAAGTGCCTTTTTT
-TGTACATAAAAAATAATTTTTAAATTTTTTAACGTTCCTAAAAACTAAAC
-AAACTGTAAAGAAAATTTTGTTTAAAAAAAAAATCAATAAAACATATTTT
-CAGTAATTTCCAAAATTTGATTTCCCGGTAAAAATCAACAATTTTTTATC
-GGGGCCACAAAAAAAATTCGCTGAAAAAAATTCAATTGGATGTATTTTCT
-GCAAATTCGAGTCAATTTTCTGAAAATAGTTGTTTATTTTCCCTGATTTT
-TTGGCGTTTTTTCCTTTTTTAAAGGAATTTTAGGACTTTCTGGGATTTAG
-AAGGGTTTAGCCTAGGGAGTGATTAAGCCTAGGCTTAAGCCTGAACCTGA
-GCCTAAGCCTAAACCTAAGCCTAAGCCTAAGCCTAAGCCTAACATCAAAA
-AAACCGGAAAATCCTAAGCCTAAATAGCGTCAGTAGCAAGCTGACGCTCG
-CCACTGACACCAAGCCTAAGCCTCAGCCTTTAACGAAAAACAATTTTGGC
-ACAAAAATTGCAAAATTTCCGCTTCTCCGCTTCTCTTAAGACATTGAATT
-TCCAAATTTAAAAATTTTTAGAAAAAAAAAAACCTCGGTCCAAAATGATC
-TGAAAATTCTTATTTAGGCTTTAAAAAATTTCACTTTTTTCTGCGACACT
-TTCCATAACACCACAAATTCGGCGAATCGACCTGTTGATGATCTTGTCTC
-GACCCGCTCTCTCTCTAAGTGATTATAACAGAGATACACCCACACACCCA
-CACACGTCATCTATTATGTTCTAGAACTTTATACTTTATGATCAAAACCG
-AATGCTACAAACTAAAAAAACATCACCACTTTTTCCAAATTTTCGTCACA
-TTTTTGCAGTCCGACCACAACTACAACCACCAAAGATCCATGTGAATCAT
-CGCATCCGTTGGATCTGACGCGTCGGCTACGGGACACTGCCGGCTACAAT
-CGTATCTATATGGCCAGCGACTTTTCGTCGGCTCGCAATGAGTTTCCTGA
-TCTCAGGGGTTTGGCTCACAAAGCTTCAACGGACTATCATTGCGGGAAGA
-GGTGCCAACGGTGAGCTCTCAATGCCTACCTGCCTACTTGTTTGCAGTAT
-CAAACATATAATGCCTACAAGCCTACGCGCCTACCTTGGTCTACGAGCCT
-GAACTTGCACATTTTCTGTGCCTAACATGCACGCTATACTTTTGTCTGCC
-GTTACGCGCCCCCCCCCCCCGCCTATCTGCCTACAAGTCTCCCTTTTGTC
-TTTATGCCTACGCGCCTATCACATGCCTACCTGCCTATTTGCTTGCGGTC
-GAGTCGATACATATCATGCCTACGAGCCTACGCGCCTACCTTGGGCTACT
-AGCCTGAATTCGCATTTTTCCAGTGCCTAGCTTGCGCGCTATACCTATGC
-CTGCATTTACGCGCCTTCTCCCCGCCTAGCTGCCTACAATCGCACTTTCT
-GCCTACCTGCATGCTTTCCTACCTATTCGCATACTTAGGCGTACCTACCA
-CAAGCTTAGCTACCTACAAAACTGCCTTCTGCCAACCTGCATGACTGCGT
-ACCTTTTCGCCTGCTTAGGTGCCTACCACAAGCCTCCCTTTTGTCGATAT
-TCCTACGCGCCTATGGCATACCTACATGCCTACTTGTTTGAGTCGATACA
-TATCATGCCTACGCGCCTACCTTGGCCTACCTTGGCCTACAATCCTGAAA
-TTGCACTTTTCCTGTGCCTAGCTTGTACACTATACTTATGCCTGCCTTTA
-CGCGCCTTCTCCGCGCTTATCTGCCTACAAGCATACCTTCTGCCTCCTTG
-CATGCCTACATACCTATTAGCCTGCTTACGCGAACCTACCACAAGCCTAG
-CTGCCTACAAACCTCCCTTCTGCCTATATGCCTACGCACCTAACTCCTGC
-CTGCCTATACGTCTACCTCATGCTGAAAACAGACCTGCCTTGTACCTACC
-TATGCGCCTACCTAAGATTTGCCTCCTACGTGCCTGGCTGCCTATTTTGC
-CTATAGGCATTACTGTCAGTGCGTCTACCCAGAGCCTACCTTTAGGTAGA
-CGTTTGCCTACCTAAAGCAACCGCCTACAAGTCTATTCGCCTGCCTCCTT
-GCCTACCTACACACCTCCCTTATCCCGGCTTTTCCACCTGCCTATGCGCC
-TATCTCATGCCTACCCAAGACCTGCAAACGTGCCTAGCCGTATGCCTACC
-TAACTTCGCGCCTACATATGCCTCCCTTTCAGATCGAGTCAACTAATTCG
-AAAAATCATAAAAACCGGCCAACCGGCAGAAGCCGAACGTGCTTGGTGGG
-ACGAGGAAGAGTGGGAGGAGGGCGAGAGACGCAGGAAACGAGCCATCGAA
-TGGAAGGATACAGATGATCGTCTGCTAATGCGAAATACCGGAACATCACG
-TCATATTTTGGGTAGGTAGGTGGGTGAACACAGCAAGTGCGCTCCATCGC
-GCGGGACACTTTTCCCGCGCTTTTTAGGAGGTCAAACACGGAATTTTTCC
-AGGAATGACTGTGGCGGTGGAATGCGATGATGAGACTGGAGAATTTAATA
-GTGGTGGATACTCGTTGTGTACTACGTGCCGTGCTGTTCGACACTTGCCA
-TCCACGTATTTTCCACGTGTCATTAATGAGCTGATTTGCTCGCAGAAAGC
-GTGTTTGCGAGGAGAAGGAAAATGCATACAACGGGTTATGCCGATGAAGG
-TATGTAATTTTTTTGTTTTTGCAATGGAGCGCGTTTGTACTCACTCCACG
-AGAATCACGTGGTGTCAGAGTGTCTCATTTCGGATTGATCTACAAAAAAT
-GCGGGAGAAGAGACACAGAGTTCTCAACTGATTTTGGATGATTAAGAACG
-TGCTGACGACACATTTTTATGGGCAAAAAATTCCCGCATTTTTTGTAGAT
-CAAATCACTTGGAGAATATTATTTTTATTTGAATATGATCCTTTAAAGAA
-AAAATAAAATTTGACTGAATTTCCCGCCAAAAAATTTTCGCAGAAAATTT
-AAATTTCCCGGCAAAATATTCACGGATATCTGGCTTCCCTCATAAATTGA
-AATGGAAGAGTTTTTGCCGAACTAGGCCAGGCCATATCTGGGGTAGATTT
-ACGGCGCGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAA
-TATATTTGTCCGTGTGGAGTACACGACTTTCCCACGCGTTGGTGATTGTC
-AATAGAGTGCGAAAAATTCAATGAGGAAGGCCAGAACCCCGTGAATATTT
-TCTCAAACATTTTTTTTGGAATTAATGTGCAATCGCGCTCTAACGCAGTA
-TCCAAAACTTGGGTCTTTTGGCGGGAAACCCGAAAATTCAAAGTTTTTTG
-CTTTAAAATATCGTGAAACAGACGAAACTAGTCGCAAAATTTCAAATTTA
-CGGTCTTGCCGCGCCAGTGCGGTGGATCACGATTGCACTTAAGAAAAATG
-GCGAAAATCAAAAATTTGGTTTATTTTTGGCAACTATTTTTCATTCTCTA
-TCAAATTCATACTGTACACGTGGAAAATCATTGATTTTCCCGAAAATTTG
-AATAAATGGGATGCAAGATGCGAGCGCGCCCTATTGTGATTCGTTAAAAT
-TCGTTAGAAGCGTCACTGAAATCGAAATTTTTTCTCGAAAAATTGCAGTG
-TGCCACGTTGTAAAATATCGATTTTTTGGAAAATTTAATATTTAGAAGTG
-CGGATGCATCCTATTGTGCTCCAATAAAATTACACGGGCTTCTGGCATTC
-CGCATTGAATTTTTCGCGCTCCATTGACAATCGCCCGTGTACTCCACACG
-GACAAGTGCATTTAGTTTTAAAACTAAAATCGAGCCGCGACGCGACACGC
-AACGCGCCGTAAATCTACCCCAGATATGGCCTGGCCTAGTTCGGCAAAAA
-CTCTTCCATTTCAAAATATGAGGAAGGCCAGAACCTCGTGGAAAATATCG
-ATTTTTCCATTTCCACGTGGCCAAAGGAATTGCAAGCGCGCTCCAGTGAA
-CTCGCCCAATTTCCATTTTTTTTCAGGTTCTCCGAAACGTGGGCACCCGC
-GAGTGTGCTCGCTGGCAAATGAGCCAAATCGACGTGCGAACGTGTTGTGA
-TTGTATGCTCAATCCGTCATCACCACTGGTCACCTATTTATGAGCGAAAA
-AACCGGGGAAAAAAACACACAAAACAACTCAAAACTCAACAAAAAAAAAT
-AATTTTACAAGATTCAACGAAACAACAAAAAAAAGAAACAATGGAAATTA
-AATACGGATGCTGCTGCCAAATATGCTGCCAAATTCAAATTCTCGCCTTG
-TACACACGATCTTTATTGAAAACGGTGATCAACGGGCACCCTCCACTCTG
-ACCTTTTATCTGAAAATAATTGTTTTAAAGATTTATTTGATTAAAAACCT
-CGGCCACGGCCGCGACGCAGCCGCTCCGCACGCAGCTGCGTCGCGGTCGG
-GTGGATCCTAACCTGAACTTCTCCCTCCAGCTCGTTATCGTCGTCGACCA
-CCTCGAACAGTTTGCTAGCCTCGAATAGAAATCTGAAAAAAATAAATTGG
-TTTTTTTTGAAAATATATAATGTTTTATGTTTGGGCTTCTGGCCTTCCTC
-ATTGCATTTTTCGCGCGCTCCATTGACAATCGCCCCCCTGTGTACTCCAC
-ACGGACAAATCACATTTAGTTTCACAACGAACGACACGCAACGCGCCTGG
-CCTAGTTCGGCAGAAAAACTCTTCCATTTCAATTTATGAGGGAAGCCAGA
-AATCCGCGTGTGTTTTATTGATTTTATTGATTTTTTTACTTTCGAAAATC
-GCGTTCCGGCTGGTAGAAGCACAAGGTTTTGCGCGTGTCGGCGATTCGAT
-CCCTCGACCATTCTCTGCAAAAAAAATATTTTTTTTTGTGTAAAATTCCC
-AATCTGCGAGAACGGGATCTACGAAAAATTTTTTTTTTAATATTTTAATG
-ATTTTTTCAGAGATCACATTCTTGCAGATCATCTTTTCGTGGGGCCTCCT
-AATTTTTCAGTGCTGCACATTTATTTAACATTCAAAAGTGCTTTTTTCAT
-AAAAATTTGAATTTTTTGCCCAAAAATCGAGAAAAACGCCGCTCCGCCTC
-TTTTTCCGTGCGGCACTGTGCCTTTTGCAAGCTGGGCACAGTTTTGTAGG
-CGTGAGCATGGTCTTACTTGAGCGCTTGAGTGATCTACGAAAAAAAAAAA
-GCTTTTTTTAAAATTTATGTCGGAGATCACATTCTTGCAGATCATCTTTT
-CGTGGGGCCTGCTTATTTTTCAGTGCCGCTCGGAAAAAGAGGCGGAGCGT
-CGTGAGGCACGGTTTTTTGTCACGATTTTACAGTTTTTTGACTAAAATTC
-TTGATTTTGGATCATTTTCGTTGATTTTTTTCGGAAAAAGCTGATTTTGG
-CAAAAAAAAAATTTTCGCTTTTTTTTGGACAAAGAAGAGCCAAAAAAAAA
-AATGAAAAAATCATAAATTTTTTAGTTTTTACATTTTTTTTTTTGAATTG
-AAAAATGTTTTTTTGTGTTTTTGGTGAAAAAAACTACTTTTTTTTGCGAA
-AAAAAAATAGCAAAAATGACCAAAAATCGGAAAAAAAAAACGCCGCTCCG
-CCTCTTTTTCCGTGCGGCACTTCGCCATTTGCAAGCTGGGCACGGTTTTG
-TAGGCGTTGTCATGTTGTCATTACTTGAGCGCTTTGAGGCAAAGACTTAT
-GGGAGAACGGTGAAATCCAAAATTGGTGGCGTTCGGGAAGAGACGGGGGT
-GCTTCTGAAAAAAATTGTTGAAAAATGCAAAAAATCTGAAATTTTAGAGC
-ATTTTTCTGAAAAAAATGCAAAAAATCCGAAATTTTTGAGCATTTTTCTG
-AAAAAAACGCTAAAAATCTGAAATTTTAGAGCATTTTTCTGAAAAAAACG
-CTAAAAATCTTAAATTTCTGAGCATTTTTCCCGGAAAAAAAAAGATTTTT
-ATGCACCTCTGCGAAAACTTCATCCATCATGGTAATTGAAAAATCACAAC
-TGTCCAAAAGCACCGAATTCACAGTGTCGAGCTCGAAAACGCCGACATCT
-TCGACCTAAAATGCTCAATTTTAATGGGGAAAAGCTCTAAAATCATGGGC
-TTCTCGCATTCCTCGTTGAATTGTTCGCGCTCCATTGACAATCGCCCCCG
-TGTACTCCACACGGACAAGTGCATTTAGTTTTAAAACTAAAATCGAGCCG
-CGACGCGACACGCAACGCGCCGTAAATCTACGAAAAAAAAAAGGAATTTT
-TGCTGAAAAATCGATAAAACACGTTAAATTTAACCAGAAAAATCAATTTT
-CGCACAAAAATTCGCAAAAAAAAAAAATCAAATTTTGCTCATAAAATTTG
-GCGATTTCAGTTTTCTGAGGTTCACCGACCCAAAAAACGTCAAATTTGAC
-GCGCAAAACTTGAATTTTCTATTGATTTTTGATGAAAAATCGATAAAATA
-CGGTCAATTTAACCAGAAAAATCAATTTTTAACGAGAAAAGCCAGAAATC
-CGTTGAAAAAGCTCTAAAAATCAAAATACAAACATTCGAGAGAGTCAGAT
-GACGGAGACAGACGCATTTTTTCAGAATTTTCTGCAAATTTAGGTCCAAA
-CTGACGAAATAGAAGACACGGAGCACACTGGAAATGAAAAAAAATTAATT
-AAATGCTAGATTTTTAGCATTTTTTCAGAAAAAATGCACTAAAATTTCAG
-ATTTTTAGCATTTTTTTCCGGAAAAATACACTGAAATTTCAGATTTTTAT
-TTATTTTTTTTTGAAAAAATGCTACAGACCGAATAGTTTGCCAGGCATTT
-CTGCCGCGGAGGAAATCGGCGATGAACTCTGCCACGTAGCGGCATTCGAT
-GGGCGGTGGCTGAAAATTTGCAATTTTTTGGCCTAAAATTTGGTTTTTTC
-TGGAAAATTCTCTTACCAACGGGAAGGTTTTCGTCTTCGGAATGCCTAAA
-TTAACAATACAAGCCCTCGGAGCAATTCTCGCAAGAATTGGAGCCAGCTC
-CTTGGCATAAGTGAGATCATAGATGAAGAAGACGAGCCGCTTCACCATTA
-CGATGCTCTTGCAGCGTTCACGGCGTTCTGCGTATTTTTCCAGGATACTC
-TGAAAAAAAATCCGTTAATTTTAGCCAAAAAATCCGTTAAATTTAGCCAA
-AAAATCCGTTAATTTTAGCCAAAAAATCCGTTAATTTTAGCCAAAAAATC
-CGTTAATTTTAGCCAAAAAATCCGTTAACTTTAGCCAAAAAATCCGTTAA
-TTTTAGCCAAAAAATCCGTTAATTTTAGCCAAAAAATCCGTTATTTTAAG
-TCAAAAAATCCGTTATTTTAGCCAAAAAATTCGTTAATTTTAGCCAAAAA
-TTCGCTAGTTTCAGCCAAAAAAATCCGTTAATTTTAGCCAAAAAAGAACC
-GTTATTTTTAGCCAAAAAATCCTTTAATTTTAGCCAAAAATTCGATATTT
-TTAGCAAAAAAAATCCGTTAATTTTAGGCAAAGAACCGTTAATTTTAGCC
-AAAAAATCCGTTAATTTAAGTCAAAAAATCCGTTAATTTTAGCCAAAAAA
-ATCCGTTAATTTAAGTCAAAAAATCCGTTATTTTAGCCAAAAAATTCGTT
-AATTTTAGCCAAAAATTCGCTAGTTTCAGCCAAAAAAATCCGTTAATTTT
-AGCCAAAAAAGAACCGTTATTTTTAGCCAAAAAATCCGTTAATTTTAGCC
-AAAAATTCGATATTTTTAGCAAAAAGAATCCGTTAATTTTAGCCAAAAAT
-CCGTTAATTTTAGCCAAAAATCCGTTAATTTTAGCCAAAAATTCGATATT
-TTTAGCAAAAAAAATCCGTTAATTTTAGGCAAAGAACCGTTAATTTTAGC
-CAAAAAATCCGTTAATTTTAGCCAAAAAAATCCGTTAATTTAAGTCAAAA
-AATCCGTTAATTTTAGCCAAAAAAATCCGTTAATTTAAGTCAAAAAATCC
-GTTAATTTTAGCCAAAAAAGAACCGTTATTTTTAGCCAAAAAATCCGTTA
-ATTTTAGCCAAAAATTCGATATTTTTAGCCAAAAATCCGTTAATTTTAGC
-CAAAAATCCGTTAATTTTAGCCAAAAATTCGATATTTTTAGCAAAAAAAA
-TCCGTTAATTTTAGGCAAAGAACCGTTAATTTTAGCCAAAAAATCCGTTA
-ATTTTAGCCAAAAAAATCCGTTAATTTAAGTCAAAAAATCCGTTAATTTT
-AGCCAAAAAAATCCGTTAATTTAAGTCAAAAAATCCGTTAATTTAAGTCA
-AAAAATCCGTTAATTTTAGCCAAAAAAGAACCGTTATTTTTAGCCAAAAA
-ATCCGTTAATTTTAGCCAAAAATTCGATATTTTTAGCAAAAAGAATCCGT
-TAATTTTAGCCAAAAATCCGTTAATTTTAGCCAAAAATCCGTTAATTTTA
-GCCAAAAATTCGATATTTTTAGCAAAAAAAATCCGTTAATTTTAGGCAAA
-GAACCGTTAATTTTAGCCAAAAATTCGATATTTTTAGCCAAAAAATCCAT
-TAATTTTAGCCAAAAATTGCTAATTTTAGCAAAAAAATTCGCTATTTTTA
-GCCAAAAAATCCGTTAATTTTAGCCAAAAAATTCGCTATTTTTAGCCAAA
-AAACTGTTAATTTTAGCCAAAAATCCGTTGATTTTAGCCAAACAATTAGT
-TATTTTTAGCCAAAAAATCCGTAAATTTTAGCCAAAAAATCTGTTATTTT
-TAGTCAAAAAATTCGTGAATTTTAACCGGAAAATCCGTTATTTTTACTAC
-AAAAATAGCGAATTTTCGCCAATTTTAACCAAAATCTCTCGATTTTTTGT
-CAAAAATGCACCAAATGTGCGCTTTTTTTCGTTTTTTTTTGGCATTTTCC
-CTACTTCAATAGCGAGTTTGCAGGTCGTCGTGCAAATTTTGACTTCGATT
-TCAACAGAATCCAGCAGAATTCGATCATCAGTCATACATTCCAAACAATT
-TTCAGCATCCTTTATGGGCACTTCGATGAAATCTGAGAGAGCAAACACTT
-TAGAATTGCCAGGGTTTACAGCTCTTTTAATCACCATCCAACTGGCACGC
-GACGTCCATTTTTGGCTGCCCATTCACCCGCTCGCCGCCACCCTTGCAAA
-TGTTGTGAAATTTGATGACAAACGGTTCAGAGTACTCGAAATTCTCCAGA
-TCGCCGTGCTCGACGAGCTCGTTGTTCGATGGTGCTCTTTCCGGCGTTCT
-TTTCCATCTGAAACTGCTGTTTTTCCTTTTTTTTTTTGTCGCAAAATCTT
-TTTTTTCACCGAATTTTTCCACCAACCTGAACAGCGAATCTTCGAAAAGA
-GACGAAGAATTCGATTTTGGGCTTTCCAAATTTGAAAAATTCAAAGAAGT
-TGTCACAGAACTAGCCATTTCGAAGTTGAAATGATTAAAAATCAAAAACA
-AAAAATTTCGATAAAAATCAATGTCCGAGAGGAGTACACGCTTGGGAACC
-ATGCGCGGGTCTCGCACGGAAGAGACGAATTGAAGTACGGTAGCTCGTAA
-ATCCTGTTCCACGATTGATTTTTTTTTAATTTTTGATCAATTTTTTCGAT
-TTTATCCCAGAAGTTCTTGAAAATTATCCGTTTTTTTGCAATTTTTTCGG
-AAAAATGCTCTAAAATTTAAGATTTTTAGCATTTTTTTCCGAAAAAAATG
-TTTTAAAATTGCAGATTTTTAGCATTTTTTCACAAAAAATGCACTAAAAT
-TAAGATTCTTAGCATTTTTGCGGAAAAAATGCTAAAAATCTTGCAAAGAC
-TGAAAAAATTCGAATTTGTTGTAATATTGCATGTTTTCCGAGGTTTTACA
-TCAAATATGTGTAGTTTTCCTTGAAATTTGACGTTTTTCACTGAAAAATT
-CTACAAAAATAAGCATTTCTGAGCTCTTTTGTCGCAAAAGTTGATGAAAA
-TCGCCAATTTTTCAATAAATATTGCACAGAAACCGTCAGATTTTTAGCAT
-TTTTTCGGAAAAATGCACTAAAATTTTAGATTATTAGCAATTTTTCAGAA
-AAATGCTCTAAAATTTAAGATTTTTAGCCCTTTTTTTCAGAAAAATTCAC
-TAAAATGCAAGATTTTAATCATTTTTTTGCAAGAAAAATGCTCTAAAATC
-TAAGTTTTTTAGCATTTTTTTCGGAAAAATGTTTGAAAATCCCTTCTTTA
-ACGCCTTTTTCGCACTAAAAGATGCTCAAACTAGTTTAAACTTTCAGAGT
-TTTCCCATGCTTTTGCCCCCTCCACTTCACAAGAAACAAGAAACAAATAC
-GGCGGGAAAAAAGCGAAAATTCGCGGAAAACATCATTTTCAATGCATTTT
-TCATCGCGAAAATTGCCGAATTTCATTAAAAATGGCCAATTTTTGTGCCA
-GTTTTCCCAATTAATCATGTATTTTCGATTAACTCGAAGCCCCTGCGCAG
-AGAAAAACACAAAAATGTTGCAATTGTTTGTGTAAAGCACTTCTCTGCGC
-GTCTGCGGCATCCGATATGACGAGCAATATATATCTTTTTTCTGGGAGCC
-TTTTATTTTAAATTTATCATTTTTCATTTAGTTTTTGAGAAAAAAATTCC
-CCCAAAATTAACCTAAAAGCCTTGAAAATGTGAATTTTGAGTGAAATTTG
-ACGTTTTTCAGCGAAAAATTCTCAATTTTTAGTGCATTTTTGCCGGAAAA
-ATGCTAATAATCTTGAATTTTAGTGCTTAGCGGAAAAAAAATTCAAAATG
-AAAATGTCGAATTTGAAATAAAATGCTTTAAAATTTAAGATTTTTAGCAT
-TTTTCCCGAGAAAAGCTAAAAATCTTAATTTTTATAGCTTTTTTGTTGAA
-AAAATGCTAAAAATCTTAAATTTTAGATCATTTTATTTCAAATTCGACAT
-TTTCATTTTGTATTTAAGAAAAAATAACCTCAAAGTCTGAAAAATATCGA
-ATTTTGAGTGAAATTTGACATTTTTCAGCGAAAAATTCTCATTTTTCCGG
-AAAAAATGCTAAAAATCTTGAATTTTAGTGCATTTTTCCAGAAAAAATGC
-TAAAAATCTCAATTTTTAGTGCATTTTCCCGGAAAAATGCTAAAAATCTT
-AAATTTTAGAGCATTTTCCAGAAAAAATGCTTAAAATCTTGAATTTCAGA
-GCATTCTTAATGAAAAATGCTAAAAATCTTAAATTTTAGAGCATTTTTCT
-CGAAAAAATGCTTAAAATCTTGAATTTCAGAGCATTTTTTTCGGAAAAAT
-GCTAAAAATCTCAATTTTTAGTGCATTTTTCTGAAAAAATACTAAAAATC
-TTGAATTTTTAGAGCATTTTCGCTGAAAAATAATAAAAATTTTAAATTTT
-AGAGCATTTTTCCGAAAAAAAAAACGCTAAAAATCTTGTAATAACTGACA
-AATTTCGAATTTTGAGTAAAATGGCATGTTTTTTGAGGTTTTTCCTTGAA
-ATTTGACGTTTTTCACCTAAAAATTCGACAAAAATGAGCATTTCTGAGCT
-CTTATATTGCAAAAATTGACAAAAATCGTCAATTTTTCAATAAAAATTGC
-CCAAAAACCTTAAAATATTCTGAAAAAAGCCGAAAAAACCCCATTTTTTA
-GCCATTTTCTACAGAATTTTACATTTTTCTCAACTTTCTTCACCTAAAAT
-CGCCGATATTATTCACATAAAATTCCCTTTTTTTTCAGCGCAATGGGGTG
-TATTATGAGCCAGGAGGATGAAGCAGCGAAACGAAGATCCAAGAAGATTG
-ATCGATTGGTAAAAATTGGGGATTTTTCGTTGAAAAAACTCGATTTTTTG
-TGAAAAAATATAGAAAAATCATCAAAACTGCTTCAAAAACCGAAAAATTT
-CACTAAAAACTAGAATTTTTGCTCGAAAACCTCAAAAAATCGCAAAATTT
-GCAGTGAAAACTAGATTTTTATTTTTAAAAAATTCAAAAAGTTCATAAAA
-ATCAATAAAAAAATCGGATTTTTTTTCTTAAAAAATCTGGAAAACTGTCT
-AAAAATCTACTCAAAATCAGTTTTTTTTGTAGAAAATCTGAAAAATAGTC
-TAAAAAATTAATAAAAATCGATTTTTTGGGAGAAAATTTGAAAAATTACG
-AAAAAAATCAATAAAAAATCGGTTTTTTGGGAAAAACCCTGAAAAATTGT
-CTAAAAATCTATAAAAAATTGGATTTTTTAAATAGAAAATCTGAAAAACT
-GCCAAAAAATCAACAAAAAATCGATTTTTGTGTGAGAAAACCTGAAAAAT
-TATCAAAAAATTGGTTTTTATCTAGAAAATCTGAAAAATTACCTAAAAAG
-CAATAAAAAATCGGTTTTTTTTCTGGAAAAACTGTAAAATAGCCTAAAAA
-TCAATTTAAAAAAAGTTTTTTTTTTTGTAGAAAACCTGAAAAATTATCAA
-TAAAAACCACGAAAAACAGTTTTTCGCTTATAAAAAGTCCAAAAATCCCA
-AAATTTGCATTAAAAACTAGATTTTTATTTCAAAAAAATTCAAAAATTGC
-CTGAAAATCAATAAAATTGTTGTTTTTTTTTGGAAAAAAAAACCCTGAAA
-AATTGGCTAAAAATCCCAAATTTTTTTGCAGCTCAAAGAAGACGGCGAGA
-ACTCAATGCGAACCATCAAGCTTCTGCTCCTGGGAGCCGGCGAGTCTGGA
-AAATCGACGATTTTAAAGCAGATGCGTATCATTCACGACGTCGGATATAC
-GACTGAAGAGAGAAAAGTGTTCAGAGGCGTCGTTTATGGAAATATTATTT
-TGGTCAGTGCTCCGATGCACTGAAAAATGACAGGAAATTGGCAATTTTGA
-CCAAAATTCGTGGATTTTAACCAAAAAATCCGTTAATTTTAATCAAAAAT
-CGGCTAATTTTAGCCAAAAAATTCGCTATTTTAACCAAAAAATCCGTTGA
-TTTTAGTCAAAAAATTCGCTATTTTTAGCCAAAAAATCGCTATTTTTAGC
-CAAAAAATCCGTTAATTTTAGCCAAAAATTTCGCTATTTTTAGCCAAAAA
-ATCCGTTAATTTTAGGCAAAAAATCCGTTAATTTTAGTCAAAAAATCCGC
-TATTTTAACCAAAAAATCCGCTATTTTAACCAAAAAATCCGTTAATTTTA
-GCCAAAAAATTCGCTATTTTTAGCCAAAAAATCCGTTAATTTTAGCCAAA
-AAATTCGCTATTTTTAGCCAAAAAATCCGTTAATTTTAGCCAAAAAATTC
-GCTATTTTTAGCCAAAAAATCCGTTAATTTTAGCCAAAAAATTCGCTATT
-TTTAGCCAAAAAATTCGCTATTTTTAGCCAAAAAATCCGTTAATTTTAGC
-CAAAAAATTCGCTATTTTTAGCCAAAAAATTCACCAATTTTCGTTTAAGA
-TTCTCCAATTTTTGACAAAAAAATTCACCGAATTTGCTCAAAATTCTCCC
-TTTTTTGGCTAAAAAATGCATAAATTACACAATTAAACCAAAAATTACCC
-AATTTCGCCCAAAAACTCTAATTTTTACCAAAAATTCTCCTATTTTTTGT
-TGAAAATTCACCAATTTTTTTGCCAAATTTTAACAGAAAAATCTATAAAA
-TATCAGGCGAAAATAACCTAATTTTGGTCAAAAATTCACCGATTTTTGTT
-CAAAATTCTTCAATTTTACCCAATATCCACCAAATTTTAACCAAAAAAGT
-CTAAAAAATTATTCAAAAAATCCCTAATTTTGGCCCAAAATTCTCCATTT
-TTACTCAAAAATTCTCTCTTTTTAACCAAAAAATCTAGAATATTAGGTGA
-AAAATGCCTAATTTTGGCTAAAAATTCACCGATTTTTGACAAAAAAAACC
-TCCAATTTCAGCTTAAAACTCTCTGATTTTTACCAAAAAAATCTAAAATA
-TTAGGCGAAAAATCACTAATTTCGGCTAAAAAATCACCAATTTTTGACAA
-AAGAAACTCCAATTCCAACAAAAAATTCACAAAATTTACTCAAAAATTGT
-CTGTTTTTCACAAAAAAAAAACCTACAATATTAGGAGAAAATTCACAAAT
-TTTGGCCAAAAAATCCCTAATTTTGGCCGAAAAATTTGCCAATTTTGTTC
-AAAATTCTCCAATTTTCGACTAAAAAAACCTGCCATATTCAGCAAAAAGT
-TCACCAAATTTACTCAAAAATTCAAAAAAAATCTAGAATATTAGGCGAAA
-AATCCCTAATTTTGTCCAAAAATTCACCGATTTTTGACAAAAAAAACTCT
-AATTTCAGCAGAAACTTCACCAAATCATAGCCAAAAATTCACTGTTTTTT
-ACCAAAAAAATAGAATATTAAGAGAAAATCCCTAAATTTGTCCAAAAAAT
-TAAACAAATTATAGCCAAAAATGCTCTGTTTTTTACCAAAAATTCTAGAA
-TATTAGGTAAAAAATCCCTAATTTTTCCCAAAAAATTCACCGAATTTACT
-CCAAAATGCTCTGTTTTTGACAAAAAAAAACTCTAATTCCAGCACAAAAT
-TTACCAAATTATAGCCAAAAATGCTCTTTTTTTTCCAAAAAAAATCTAAA
-ATATTAGGCGAAAAATCCCTAATTTTGTCCAAAAATTCACCGATTTTTGA
-CAAAAAAAACTCTAATTTCAGCAGAAACTTCACCAAATCATAGCCAAAAA
-TTCACTGTTTTTTACCAAAAAAATAGAATATTAAGAGAAAATCCCTAAAT
-TTGTCCAAAAAATTAAACAAATTATAGCCAAAAATGCTCTGTTTTTTACC
-AAAAATTCTAGAATATTAGGTAAAAAATCCCTAATTTTTCCCAAAAAATT
-CACCGAATTTACTCCAAAATGCTCTGTTTTTGACAAAAAAAAACTCTAAT
-TCCAGCACAAAATTTACCAAATTATAGCCAAAAATGCTCTTTTTTTTCCA
-AAAAAAATCTAAAATATTAGGCGAAAAATCCCTAATTTTGGCCAAAAAAA
-TTACACCAATTTTCCCCAATTTCAGCTTAAAATGTTCAATTTCTAACCAA
-AAAACCCCCAAATTTTAACCCAAAAATTCCCTCGAATTTCACCCCAAAAC
-CGTCCAATTTTCCAGTCTCTCAACGCCATCATCCACGCTATGGAGCAGTT
-AAAAATCAGCTTCACCACACTCGATCACGAATCAGATGCCCGAAAGCTTC
-TAATGTTCAGCACAACAGGCGAAGAGGATGAGCTGCCCGAAGAGCTCGTC
-GTGCTCATGAAGAGTGTTTGGTCCGATTCGGGAATTCAGAAAGCGCTCGA
-AAGGTGGCGAAATTTCGCTGAAAATTGAGAAAATTCGAGGGATTTTCGCT
-GAAAATCGAGAAATTTCGGTGGAAATTAGCTTATTTCCATGAAAAAATCG
-TTAAAATCCCAGAAAATTGCGATTTTGGACTATTTTTGAGCATTTTTCGC
-GTTTTTTCCATGAAAAATTCAATGAAATCGATTTTTTAGGTCATATTCGC
-TGAAAATTACCGCTTTTTTCGATGAAAAATTCGTTGATATTCGTTGAAAA
-TTATCTATTAGAGCTAATTAAAATTTAAAATTCCAAAAAAAAAAATATTT
-TAAAATAATCAATCGAATTATTTTTTGCTCACACTTTCAAAAACCGCTAA
-AAATTCTAAAAAAAAAATTTTGGAGCCCCTTTTCCGCTAGAAAATAGCTT
-TTTTTCCCTCAAAATCCGGGAAAATTCAGAAATATTTAATTTTTTGGCTA
-TTTCTGACTCTTATTCCCACACAAAAATAGTTTTACCAAAAAAAAACAAT
-TTTTGTCAAAAATTCGAAAAAAAAATTTCTGGGAAATATTTTTAAATGAC
-TCTAAATTTTCCCCTGTACCCGAATATCGATGTGAAAAAATTCAGAAAAA
-TTTTCCGCGATTTTATATGATTTTTTGAAAATTGGACAAATTTCAGTTTT
-CCCCCCTAATTCCTATTTGAGTTACCGCCAATTTGATTTGTTCGATGGAC
-TTGCACATTTTTGAATTAATCTATTTTATTTTTTGTTGTTTTTTCCACCG
-ATTTTTAATGTTTTCGGTGTATTTTTGCTTGAATTTTAGGGGAAAAGTCA
-AAATAAATGCAATTTTCGATTAAAAAGCACGCTGACCGGCGTAAAAATGA
-AAAAGTAACGATTTTAAACGATTTCAAACCTGAATTAATTAATTTCACTG
-ATTTACGCCTGTACGCGTGCGTAGATCAGTGAAATTAATTAATTTAGGTT
-CGAAATCGTTTAAAAGCGTTACTTTTTCATTTTTACGCCTGTAAGCGTGC
-TTTTTAATCAGAAATTTGCAATTATTTTGACTTTTTCTCTAAAATTCAAG
-CAAAAATACACCGAAAACATCAAAAATCGGTGGAAAATAACAAAAAATAA
-AATAAATAAATTTAAAATTGTGCAAGCGCGCTCCATCGAACAAATCCAAT
-TGGCGGTAATTCAAATAGGAATTAGGCAAAAACTGAGATTTTTGAGGCAC
-CACGTTTTGAAGATCTGTTCAAAAAGAAGATCTACGTTTTCAGGATCTGG
-CACCGTGCCAACTGCGGTTTTCTCGATGAAAAACGTAACAACGATGCTCC
-GATGTTACGCGTCGCGTGTTGTTTTGCGTTCAGAAAGATATTTTTTGAAA
-TTTTCTTCTTGAAGAAACGCTTAACGACACGCAACGCGTAACATCGGAGC
-ATCGTTGTTACGTTTTTCATCGAGAAAACCGCAGTTGGCACGGTGTCAGA
-TCCTGAAAACGTAGATCTTCTTTTCGTAGATTTTCAGAATGTAGATCTTC
-TTTTGGTAAATCTTCTTTTCGTAGATCTTCTTTTCGTCGATCTTCAAAAT
-GTAGATCTTCTTTTGGTAGATCTTCTTTTCGTAGATCTTCTTTTCGTAGA
-TCTTCTTTTTCGTAGATCTTCTTTTTGAACAGATCTTCAAAACGTGGTGC
-CTCTGATTTTTCCAAATTTCAAAAAATCATATAAAATTTAGAAAATTTTT
-TTGAATTTGTTTATCAGCATATTTGGTCATTTTGGTACCATATTTTCCCC
-TGATTCCGAATATCAATGTGAAAAAATTCAAAAAAAAAATCCCTGATTTT
-ATATTTAAGCTTGAAATCGCCGAATGAGATTTTTCAAATACGCGCGCACA
-AATAAATTCTCCTTGGAGCGCGTTTGCCTCATTTGATTTTCTCCATATTT
-ATTTTTACTTTTTTTTCAGTTTTTCACAGCTATTTTCATTCATTTTTATT
-GTATTTTATAGGTTTTTTTTTTTGAAAAATAAATTTTTCCGTGTGAATTG
-AACATTTTATTTGCATAAAAATGAATGAAAATAGCTGAAAAACTGAATAA
-AGTAAAAATAAATATGGAGAAAATTAAATGAGGCAAACGTGCACCAAGGA
-TAATTTATTTGGGCGCGTATTTGAAAAATCTCATGTAGGAGGCAAATGAA
-ATTTAGGCGATTTCTAGCTTAAATATAATATCAGGGAAATTTTTTTTTTG
-ATTTTTTCACATCGATATTCGAATCAGGGGAAAATTTGGAGCCACCTGTA
-ACAAAATTTTATGAAAAAAAAAACTGTATAATTTCTAACAACTTTTTTTT
-TGTAGATCACGCGAATATCAGCTCAACGATTCGGCCGGCTACTATCTGAG
-CCAACTCGACAGAATTTGTGCTCCTAATTACATTCCCACACAGGTATTTT
-TCACTGGAAAATTCACAAATTTTTCCACTACTAAAAATTCAAATTTCCTT
-TGCAGGATGACATTCTCCGCACAAGAATCAAGACAACAGGAATCGTGGAG
-ACGCAGTTTGTCTACAAAGATCGCCTATTTTTGTAGGGGGAAAATTAATT
-TTAAAAAATTGAAAAAATCGTCGCCGAAATTCAGGGTTTTCGACGTTGGC
-GGACAGCGATCCGAACGAAAAAAGTGGATTCATTGCTTCGAAGACGTGAC
-GGCACTCATTTTCTGCGTTGCACTGTCAGAATATGATATGGTTCTTGTCG
-AAGATTGTCAGACGGTGCGATTTTCGAGTTTTTTGCTTTTTTTTCGTTTT
-TTTCCCAAGTTTAGGGTTTTTCGGTGAAAATCTCGGTTTTCTTGGTTAAA
-ATGGTTTTTTTTTTGGCAAAAAACGGCAAAAATTGAGGATTTTAGCGTAT
-TTTGGCGAAAAATTGAGTTAATTACATGGAAAATTTCAGAATTTGAGTTA
-AAATTGTAGTTTAAGGATTTTTTAGTGATTTTCTCGATTTTTGAACCGAA
-AAACGTTCGAATTTCATTTATTACGCGCGACCACAAAATGCTGAGAACGC
-GTATTGCACAACATATTTGACGCGCAAAATATCTCGTAGCGAAAACTAAA
-GTAATTCTATAAATGACTACTGTAGCGCTCTTGTGTCGATTTACGGAAAT
-CGTGTATTAATCGATAAAGTATTTTTTTTAGAAACACAAAAATGACAAAA
-AAAATACGAAAGAAAATTGAATTGTTTCGAAAATCGAGTCCTCCCGTAAA
-TCGACACAGTTGCCATTAAATTAAATAAAATTAATGTTAACTGTGTCGAT
-TTACGGGAGGACTCTCGATTTTCGAAACAATTCAATTTTCTTTCGTTTTT
-TTTTGTCATTTTTGTGTTTCTAAAAAAAATACTTTATCGATTAATACACG
-ATTTCCGTAAATCGACCCACAAGAGCTACAGTAGTCATTTTCAGAACTAC
-TGTAGTTTTCGCTACGAGATATAATTGCGCATCAAATATGTTGTGCATGA
-CGGATTCTCAGCATTTTGTGGTCGCGCGTAATGAAAAGCGAAAAAATCGA
-TATTTTCTGATTTTTGCGCCGAATTTTGTTAATTTTTCTTTTTTTTTTTT
-CTGCGAAAACCACATTTTCCTGACTAAATTCAGGTTCAGCCATTTTTTTT
-CGCAAAAATCGACGAAAATTGAGAATTTTAGCGTACTTTTAATTTTTTTA
-AATTTTTTTCGCTCTGAAAATTATGAAAAAATCAAAATTTTCTCGATTTT
-TGAACCGAAAAACGTTCAAATTTCATTTAAAAATCGAAAAAATCGGGAAA
-AAATTTTCCGATTTTTGCACCGATGATTTTCGCTAATTTTTCACCACATT
-TTTTGCGTTTCAGAATCGAATGCGAGAATCGCTAAAACTGTTCGACTCGA
-TTTGCAACAATAAATGGTTTGTCGAGACGTCGATTATTCTATTTCTCAAC
-AAAAAAGACTTATTCGAAGAGAAAATCGTTCGATCTCCACTCACACACTG
-CTTTCCGGAATATACGGGCGCCAATAATTACGAAGAAGCTTCTGCGTACA
-TTCAACAACAGTTTGAGGATATGAATAAGAGGACTACTGGAGAGAAAGTT
-GGTGGTTTTTTTGAATTCACTGCAACTTTTTCCTCACGAGGGACGAGGAA
-AAGTGGTTTCTAGGTCATGGCCGAGGGGCCGACAAGTTTCAGCGGCCATT
-TATCTTGCTTTGTTTTCCGCCTGTTTTCTTTCGTTTTTCATCGATTTTTT
-TCGTTTTTTCGTAATAAAACTGATAAATAAATATTTTTTGCAGATGCTAA
-AACAATTTCCAAGTAAAAAAATCATGTATTCAGTCGGCAAGCAGCGATGA
-AAGTGGGCATTGTAATATGATGGATTACGGGAATACAAAACCTAAACTTT
-TTCTGAAACATGAAACATATGATGCTTAGATGCTGAAATTACCTGATTTT
-CATAACGAGACCGCTGAAAAGTTTTGAGGTTTCCACAATTCAACTTTTTG
-TGCGAAAATCTCGACTTTTTCACCAAAAAAGTTGAATTTTGGAAACCTCA
-AAACTTTTCAGCGGTCTCGTTATGAAAATCAGGTAGTTTCAGCATTTAAG
-CAGCATATGTATCATGTTTCAGAAAAAGTTTAGGTTTTGTATTCCCGTAA
-TCCATCATATTGCATTGCCCTTGTTTCACCGCTGCTTGCCCACTGAATGC
-ATAATTTTTTTACTTGGAAATTGATTTAGCATCTGCAAAAAATATTTATT
-CATCAGTTTTATTAAGAAAAACGAAAAAAATCGATGAAAAACGAAAGAAA
-ACAGGCGGAAAACAAAGCAAGATAAATGGCCGCTGAAACTTGTCGGCCCC
-TCGGCCATGGCCTAGAAACCACTTTTCCTCGTCCCTCGTGAGGAAAAAGT
-TGCAGTGAGAAAACTCAATTTTTGAATTTTTTTTTCATGAAAATCGGAAA
-ATCTTCAATTTTTCCTAATCAATTCCATCTCTACAGAATCAAGAAATCTA
-CACCCAATTCACATGTGCCACCGACACTAACAACATTCGATTCGTTTTCG
-ATGCCGTCACCGACATTATCATTCGAGATAACCTCCGCACGTGCGGGCTC
-TACTAAATTTTTCCGCTAAATTTTAAATTCCGTTTTTTCCCCCCAAAATC
-CCCTCCCAGACATTTTCCGGTATTTATGTATTGACCACACACAACTCTTC
-TCTCCCGTCTCCGCTGTTCAATGCTACGGTTATTCTCTTTTTTTTTCTTT
-TTTTTTCCTGAAATTCCAAGGGTGTCGTTGAAAATCGAAAAATTCGAAAA
-ATTTGGGTTTTTTAGAGGAAAAGCCAAAAATTCAATTTTTTTTTCGATTT
-TTATTCCGGAAAATTCGAAAAATTTCGATATTTTTTAAATTTTTTACAAA
-AAATTCGAAAAATTTGGATTTTTTCAGGAAAAAGCCAAAAAATTACAATT
-TGTGTTTAAAAAAACGAAAAAAAAAACCAATTTTTCTGATTTTAATTCCG
-GAAAAATCAAAAAATCTCGATTATTTTCAGAAAAATTCGAAAAATTTGGG
-GCTTTTTCCAAAAAAGAAATCGTAAAATTTCGATTTTGTCCAGGAAAAAT
-CGAAAATTTAATGTTTTCTTTTTTGGCTTCTTCCGGAAAATCCAAAAATT
-TTGAATTTTTTGGATTTGTTTTCAGAAAAATTGGAAAAATTTGGATTTTT
-CAGGAAAAAGCCTAACAATTTCAAATTTTGCTTTAAAAAAACTTTAAAAA
-ATTGATTTTTGAGGAAAAAACGAAAAATTTCGACATTTTTTGATTTTTTT
-TTTACCGAAAAAAAAATTGATTTTTTCCAGGAAAAAGCCAAAAATTTTCA
-ATTTTTAAGGAAAAATTCGAACAATTTTGATTTATTGATTTTTTATTACG
-GAAAAATCGAAAAATTTGGGTTTTTTAGAGTGAAAAGCCAAAAGTTCAAT
-TTATTTTTCTGGAGAAATCCAATTATTTCAATTTTTGAATTTTTTCAAGA
-AAAATAAAAAAATGTCGATTTTTTCCAGAAAAATCGAAATTTTTCGTTTT
-TGAATGAAAAAAAATTTTTCCTTCAATTTTTCCTTTAAAAAAAATAAATA
-AAAATGTTCGAATTTCCATGAAAAAAAGTCAAAAAAATTCAAAATTTTCC
-ATTTTCCCTGACAAAAAAATCAAAATTTTCCGATTTTCCTAAACCAAAAT
-CCCAAAATTTTCTGATTTTCCAATTTTCTCTGAAAAATCGAATTTTTTGC
-CGCACACCCCTGGTTTCACGTGGTGGTCAGGTTGTCTCATTGCGGTTTGT
-GATCTACAAAAAATGAGGGAATCTTTCCTCCCCCGGGAAAATCTGACGTC
-AGCGCACTCGTGTAACCATGCGAAATCCTCTGCTGAAAAGTCTGCGTCTC
-TTCTCCCGCATTTTTTGTAGATCAACGTGTAGATCAATCCAAAATGACAC
-CTTGACACCACGTGCCTAAGCCCAAGCCTAAACCAATCCATTTTACCGGT
-ATATCTCTACAACCTTTCACTGTCTGAAATATCGCGTCATTTTATATTAT
-TATTATTATTGTATTCGCTTAAACGACAACAATTCCCCCATTTGATTCAA
-AAAGTAAACATTTCCGAACTTTTTAAAAATTTGAAAAATATTTTTAAAAA
-ATTTTAGCGTGAAAAACTTGTCCCCCCACCCTGCCTCTCCAAAAAAAATT
-AATTTCGGAAGAATTCAGTCCTTGTTTTTGTAAATTGAGAACGTAATGCG
-CTTTTTGGTGGTTTTTGCATATTTATCGACACTTGCGTACGCGAGGTATC
-GATTCAGATTCCGTGAGTTTTTTACAACAAAATATCGCTAAGCAATCGCG
-CTCCAGCGCGAAACTTCAAAAAAAGGCCAAAATTTTGCGTCGCTTTCTAT
-GATTTTAAGACGAAAAGCGAGGAAAAATCAATAAAAACAGCGAAAACTTT
-GAAATTTACGGGTTTGCCGCTTTTTTTGCGCTAGAGCGCGATTGCTCACT
-GAGTTCAAGCGCCCTTCTTATTTTGAAATGGAAGAGTTTGCCGAATTAGG
-CTATTTTGGTGCGGCCACGGCTGGGGTCAATTTACGGCGCGTTGCGTGCC
-GCGTCGCGGTTAGGTGGACCACGCCTTTCCCACGCGTAGACGATTGTCAA
-TAGAGCGCCGAAAATGCAAGGCCAGAAGCCCGTATGAGTGAAGTTTTTGT
-TCATTTTCACTTTTTTTTCGTCGTTTTTAACGGTTTTTATGTGAAAATCA
-ATAAAAACGGCGAAAATAATTAAAAATTTTCGATATTCCGGGTTTGGCGC
-TTGCTTTGCGCTAGAGCGCGATTGGTCACCGAGTTCAAACGGCGCACTCT
-GGCTTCCCTCTTAATTTGAAATGGAAGAGTTTGCCGAATTAGGCCATTTT
-GGGTCGGCGGGTAGATTTACGGCGCGTCGCGTGTCGCCTCGCGGCTCGAT
-TTTGATTGTAAAACTAAATGTATTTGTCCGTGTGGAGTACACGCGACTTT
-CCCACGCGTTGTCCAGCAGGTTATTGCCAATGGAGCGCCGAAAATGCAAG
-GCCAGAAGCCCGCCGTATAAGTAGCCCATATGAGTGAAGTTTTTGTACAT
-TTTCACTTTTTGTTTCGTCGTTTTTATGGTTTTTATGTGAAAATCCACAG
-TCTCCTCGTCATCGAAAGCGCACAAAAAACTGCTTACTGGCGCGTTTCGC
-GTTTTTGCTAGCGCATTTTGTGGATTTCTCCGAAATTCAGAAATTACGCG
-GAAAATAGGCTAGAATTCCAAAATTACAGCCCCGCCTCTTTTGATAATTA
-TCTTCAGGATGAAGAAGATGATCGCGAAGGTGGGTGACTTGAAATATACA
-AGAAAAATATGATTTCTTCAGAGAAACACCATTTTTACCGTTGATTTTTT
-AATATCCCTACTCCTCCTTCAGTTTTTGACCAAATTTTCTCTTTTAATGG
-TCTTTCATTTCATTTTGTGCTAATAAACAAATGTTAAGTTCGAAATCTGC
-GAAAAAATTCGTTTCAACGCTAAAAAACGACGAAGTTTATTTTTCAACAC
-TAAAAAGATTCACTCCCTCCCCCGGCTGTGCCAATGTGCAAGTGCGCCCC
-AGCCCAATTCGACGCCGAGGAGACTGTGAAATCATTAAAAACAGTGAAAA
-TAACGGAAAATTTCTGAAATTCCGGGTTTGCCGTTTTTTTTTGCGCTGGA
-GCGCGATTGCTCACCGATTTCAAATAGCGCACGCGCTTCTGGTTTCCCCC
-ATAAATTGAAATGGAAGAGTTTTCGCCGAACTAGGTCATTTTGGCGCGGC
-CACGACCGGGGTAGATTTACGGCGCGCTACGTGTCGCGTCGCGGATCGAT
-TTTAGTTGTAAAACTAAATGTAGTTGTCCGTGTGGAGTACACGACTCTCC
-CGTCCGGCAGGCGATTGCCAATGGAGCGCGAAAATGCGAGGCCAGAAGCC
-CGTGCATTTTTTTGCGGGTCCCGCCACGACATTTACCCTTTCAGACACGT
-GTATCAAAGAGGACCAGGCGATTTTGGAGAAGGAAAATGTGAACTCGCCA
-CGCCAATTTCTTTTTATCGATGACGGACAATCGCCAAAGTGGAGGGAAAA
-TGATCTCGAAGGAAAAGGAATTCTTATGAGCTTCGGAAATCGATTGAAGA
-ATCTGACAAACGGATATGAGACTGTGAGACTTTTTTTACGGGTCTCGACG
-CGATTTCCCACGGATTTCGGGCTTCCCTCATAAATTGAAATGGAAGAGTT
-TTTGCCGAACTAGGCCCCGGCCATATCTGGGGTAGATTTACGGCGCGTTG
-CGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTGAATGTATTTGTCC
-GTGTGGAGTACACGGGCGATTGCCAATGGAGCGCGAAAAATTCAATTTGT
-GTCTCGTAACGATTTTATCGATTCTTTTTCAGGGTGCCGAACAAGCTCTG
-CGTGTCCTTGAATTCAACAATACGGAACACTTTCTTGTGATCAATTTTTG
-GATGAGAAGCTACTATTTCATGAAAAACGGTGATAAATATCAGCTGTCAT
-ACACCGGAACCACCATCAAACCCGATTTGAATCACTTTATTCGGTTAGCA
-GGCTTGGAGATGCAATATCGCTCCATCGCAACCATTTTTTCAGCGTATAC
-TTCATCTGCGCTCCAGCGAACAGTCAGAGTGCGTTGATCGTGTTTGGGGA
-TCAGTCGAAACCGCGAGTTTTAAAGTCGAAAAAATCGAAGAGGGAAGCAG
-CGCTGATTGATGAGAATTCGGGGAAGAAGCTGAAAAAGTGCCAGAAAATT
-CGGACGAAAAGAGCGGCGGCGGTGAATAACTCGACGGAGTGGACACAGAC
-GCTGAAGGATACTCGGAGACTTAAACAACGTAGCGAGTGAGTTTGTGCCA
-AACGATACTCCGATGTTCCGCTTCCGCTGAGGACACCGCGTCGTTTGATC
-TCTGAAAATTGCGAGAGTCAGCCTCGTGTAAGTTTACCGCAAATTTGGAG
-GTCAAGCAGCGAGGTCCTCATATTTTGAAATGGAAGAGCTTGCCGAATTC
-GGAGTCGATTTACGGCGCGTTGCGTTGCGTGTCGCGTCGCGGCTCGTGAT
-TTTCGCATATTTATCGACACTTGCGTACGCCAGGTATCGATTCAGATTCC
-GTGAGTTTTTGCAACAAAAAAATCGCTGAGCAATCGCGCTCCACTGGAAA
-ACACCCGAAAAGTTTTGAAATTCCGGGGTTGCCGCTTGTTTTGCGCGCTA
-GAGCGCGATTGCTCGCCGAGTTCAAACGGCGCTCTCTGGTTTCCCTCTTG
-TACGAGACGAGCGTCGCGGTTCGGTCCAGCAGGCGATTGTCAATGGAGCG
-CGAAAAACACGTGGTGTCAAAGTCTCCAATTATGGTTTGATCTTTGATAA
-ATGCGGGAGACGAGAGACACCGACTTCTCAACTGATTTCGCATGGTTAAA
-AGTGTTCTGACGTCACATTTTTCTGGAAGAAAAACTCCCGCATTTTTTGT
-AAATCAAACCGGATTAGGACAGCCGGACACCACGTGGAAAAACAAGATGA
-GGGAAGCCACAGAAGCCCGTGCAGAGTCTCGGTTTTATCAGTTTTCGAGT
-AGTTTCGCACCACAAAAAGCGTGTGACGTCACATTTTTCCGGCCGCAAAA
-TTCCCGCGTTTTTTGAAGATCAAACCGAAATGCATTGTTTCAGAATCTAC
-TCTTGGGCACGTCTCTCGTTCATTCACCTCGGTTTCGGTATGGTAGTGAT
-CGTCAACGCCATCGTTTTTTTGTTCTTTTTCAAGTATTTCAAGAAGTTCA
-ACTCGACGGTGAAGAATGGAGATCAGAAGCAGGAATCGGATGAGACTGAT
-GAGAAGACTGAGAAGACTGAGAAGCAGGCGAAATAGAACTTTTTAGTCTA
-TCTGTGTTGAAATAAAGGAATTGAAAAAAAAAAAAAAAAAAATTTTTTTG
-CATATATGCATGTGGTGTCAGAGTGGATTATTTCGGTTTGATCTACGTTG
-ATCTACAAAAAATGCGGGAACTGATTTTGCATGGTTAAGAACGTGCTGAC
-GTCACATATTTTTTGGGCGAAAATTCCGGCATTTTTTGTAGATCAAACCG
-TGATGGGACGTCTGGCATCACGTGTACATGTAGAAATGAGATACAACATG
-TTATGTACCGTTATCCTACAGTACTATAGGTGAACCCCTCAATTTTTGAC
-CTCCAAAAATTGCGGGAATCTTATAGGTCAACTTGCAGGGGGTCGTGGAC
-ATGAATAAGCCAAATTCAAATTATTCAAGCCAAAAAGATGATAGCGCAGA
-CACGTGCCCCCAATTTCGGTTTGATCTACTGTGTAGATCTACAAAAAATG
-CGGGATTTAGGACGCTGAGTTCTCCACTGATTTTGCAACAAATTCCCGCT
-TTTTTGAAGATCAAACCGGACAACCTGACACCACGTGAAGGAATAAACCA
-CGCTCTTTTGCCAAAATCTTAAGAGTTTCTACAATTTCAGTGAAAATCCA
-GTATTAGATTTGATATTTGAAAAAAAAAAGTTAAATAATGGACGCGGCCT
-AGTCTTTCCTCTTCTACTAGCAAAACGCCCTGTTTTACAAAAAAAATCTA
-TAGTTTCTGAAAAAAAAATCAGTGGCAAATGTCTACAATTTTCAATATTT
-CATACTAAAAAAATCACAAAAAATTATTTTATGGCCGCGGTCGAGTTTTT
-TACTCTTCCACGTGGTTTCAGAGTGTCCAATTTCGGTTTGATCTACCGTG
-TAGATCTACAAAAAATTCGGGAGTCGAGAACTGATTTTGCATGATTGCTG
-ACGTCACATTGTTTTGGGTAAAAAATTCCCGCATTTTTTGTAGATCAAAC
-CGGACAGCCTGGCACCGCGTGCGCAGAGAAGAAAAAGCTAATGAGCACGC
-GGTGTCAGGCACGGCTTGATCTACAAAAATTGCGGGAATTTTCAACCCAA
-AAATATGTGACGTCAGCGCGTGCTTAACCATGCAGAATCAGTTCTCAACT
-CCCGCATTTTTTGTAGATCTACGTAGATCAAACCGAAATGGGACACTCTG
-ACACCACGTGAATGAGCCAATTGAGCAAAAATCGTACTGAAAGAGATCGT
-TTTATTCGCGCAGAGGTTAGTTACACGAATTGAATAGAAAAAATAATGTT
-TTGCAAAAAAAAAGTAATGTACATACTCATGGAAATAAATTTATTATGGG
-GGAGCTTGATTATTACAAGTCGACGAAGAGCAGCACTCCTTCTTCTCCTC
-CTTTTCCTTCTCTTTTTCCTTTGGAAGCTGCGGAGAATTCGACTCGGATT
-TCGACATTAGACGGGAGCTGGAGCATCTGAAAAAAAAACGCGAAAAATGG
-TAGATCACACGTTTTCCAACCTATTACCTTCTCAAACTAAGACTGGAGAA
-GAGCGGTGTACACTTGAGCATGTCCTTCAACTGTATCGACTCGTAGTTTT
-CGATCGATTCCTGGAACTTTTCGATCCACAGCTCCTTGTCCGCCTTGTCG
-GCGGCTTGTAGGGTGTAGATGCCGACGACTTGGTAGTAGCGGGTTAGGTG
-AATTATGACGAACGCGAATTTTAGGGACACTGGAAGAGGAACACACTTAT
-AGTGACACTACAGTAGTCCTAGAAGGTATTGGTAAGGTACTGGTAAGGTA
-CTGACTGCGCTAATTTTTGTACGTTACACATTTTCCTGGAGTTTTGCAGA
-CCTTCAAGAAAATTCTAGCACTTTCCAGATTTTCTCCGAAAAATTCCTGC
-ACTTTCCAGATTTTTCCAGAGAATTCCTGCACTTTACAGATTTTTCTAGA
-AAATTTTGTTTTTCTCAGAGTTTTTCCTATAACTACAGTAATCCTACAGT
-ACCCCGACCATATCGCCCCTACCAACATACAACCCAATATTCCATCAAAA
-GACAAAAACTCAAATTTTCCCGAACTACAGTAACCCTACAGTAACTCTAC
-CGTATACCTACCGGGCCCCTACAGTACTGCTGCAGTACCTTGACATTATC
-CCCTACCAACATACAACCCAATACCTCTTCGAAAGCTGGGAACTCAAATT
-TTCTATAACTACAGTAATCCTACAGTACTTCTACAGTACCTCTACAGTAC
-TACTACAGTACACCGACCATATCCCCCACTAACCCTAAACCAATATTCCT
-TCAAAAGACAAAAACTCAAATTTTCCCAAACTACAGTAAGCCTACAGTAC
-TCCTACAGTCCCCCGACCATATCCCCCTACCAACATACAGCCCAATATTC
-CATCAAAAAACAGAAAAAACTCAAATTTTCCAAAACTACAGTAACCCTAC
-AGTACTCCTACAGTACTCCTACAGTACCTCTACAGTACTCCTACAGTACC
-TGGACATCATCCCTCACCAACTTCCAATCTAATACCTCTTCAAAAGCTGA
-AAATTCAAATTTCCTATAACTACAGTAGTTCTACAGTACTCCTACACTAC
-CTCTACAGTACCACTACAGTACCCCTACAGTACCCCGACCATATCCCCCC
-ATTGACTCTAAACCAATATCCCTTCATAAGCACACTACAAAGACTACGTG
-GACTACAAACTATGTATGGTCAGACGGATAGTTTTTTTTAATATAAGAAA
-TGATGATGAACTATATATACTACTATATATACTGACACTGATTCACCAAA
-ATTAGCGACTCTGGCAATTCACCAAAGATAGGGTACGGTACTGGTATGGT
-ACTGGTACGATACTAGACCCCAGTTCTTTAATACGATTCCCTAAAATTGC
-TCACTCGGCGTTGCCTGGTCGTTGGAGTCCGCATCACAGAACACGCAAGA
-ATCCAACGGTACCGGCTGTCGTTGGACGATGTAGTGCTCGGATTTCCCGA
-TTGGGACTCCTTTCTGCAACTCTTTCAGTAATAAAACAAGTAATAAAACT
-TCGCGGGACTCCTCACCACTTTCAGCTTCGAAGCGCACTTTTTAGTTTTA
-GTCAGCACAAACATGTCGTTGAATAGAAACGCGTACATATCAACGGTCCG
-CCCGTTTTCCACAAGCTCGAGGGGGCCTTCGTGGATAAGCTTTCGACGCG
-GATGAGCCAGAAGGTTCTCGCAGAATTGACGGGATAAGGCGACGCGGAGG
-AACTGGAATTGTAAAAAATCAAGGGAAAATGTTGCAGAGAAAACAAATGT
-TTCAACTTACATCAGGGACATAAGACTTGGGCTCCAAGTCGCTTATATTC
-GGCCAGACAACCTGTGTCTGCAACTGCTGAAGCCTCTCAAAATTATGAAG
-CCACTGCACACTATCATCAATCGATCGGAGTGATTCCGTCATTGTGTCGA
-TCACCTTCTCCACCTTTCCCTTACTCTCCTCTTCCTCCGATCTTTTGTGA
-ATCTCGCGGAGAAGGATCGGAAGCCGAGTGATTCGTTGAAGCGGTGCGAT
-CAAAAGATCCTCGAGCTGTAGACGGAAGCATCGTTCATCGGCCAGACATA
-TCCGCTCGAATTCCGTGAATCGTTCCTCTTTCTGTCGAATTGAGCCGAGA
-TATTCCATGGTTGCCTTGTAGTTGATGCAGTAGGCTTGGTAGGCCGAAAT
-TGTGGAGGGGCCTTTGGAGAACTGGAAGTTTAGAGTTATAACAAGGCATA
-GTCTCAAGCTATTTTCCAGCCTATCCAAGCTGTGGTCCTGGTGCTTAACA
-GTCTTGATTTTTTAGAGCTGGAAAACCGGACTAATCCGGACTACGGAAGC
-CTGGTTTTTGTCTAAACGACAACATTGTGCAACAAGGTACGCTTTTTCAT
-ACTACTTTTTTTTAAACTTTTGTTTTTTTTTGTTCTTTTTCGGCCAGCTT
-TTAGGAACTTTTTTGACCCAACTTCGAAATGTCCCTTTTTTTTGCAATTT
-TAGGAATTTCTAGAAATTTCCCATTTTCTCTTTTTCCAGCCCCTTCTAAA
-CCTAGGCCTAGGCCTACGCATAAACCTAAGCCTACGCCTAAACCTAAGCC
-TAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCTTAAGCCTGAGCCCAAG
-CCTAAGCCTAGGCCTAAGACTAAGCCTATGCCTAAGTCCCAGCCTTAACC
-CAAGCCTAGGGCTAGTTGAAAGCCTAAGCCTAACCCAAACCCTAAGCCTA
-AGCCTAAGCCTAAGTCCAAACTTAGGCCTAAGCATATGTCTAAGCCTAAG
-CCGAAAATGTCCCTTTTTTTTGCAATTTTAGGAATTTCTAGAAATTTCCC
-ATTTTCTCTTTTTCCAGCCCCTTCTAAACCTAGGCCTAGGCCTACGCATA
-AACCTAAGCCTACGCCTAAACCTAAGCCTAAGCCTAAGCCTAAGCCTAAG
-CCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCT
-TAAGCCTGAGCCCAAGCCTAAGCCTAGGCCTAAGACTAAGCCTATGCCTA
-AGTCCCAGCCTTAACCCAAGCCTAGGGCTAGTTGAAAGCCTAAGCCTAAC
-CCAAACCCTAAGCCTAAGCCTAAGCCTAAGTCTAAACTTAGGCCTAAGCA
-TATGTCTAAGCCTAAGTCTAAACCGTAGCCTAAGCCGAATCCCAAGCCTA
-AGCCTAAGCCTAAGCCGACGGAGCACGAGGAGAAAGTCCAAAACTTCACA
-AAAAAACAAACATTTCTCTCAATCTCGGTCAGTTTTCAAAAATATTTCGA
-GTAATTTTTCAGCACAAATAACAAAAACCCACCCTTTCAAACAAGTCCAC
-AACTAGCTGTGTGCAGTCCCAATTCTCCTTGTCTACCGTACTGAGCAACG
-AGAGGAACGATTGACAGAAGGTTCGAGATATTCTGACAAAATAAAAATGT
-GTGTGTGTGTGTGAAATGGCACGTCAGATTAAAGGCAAATAGAAAAAAAA
-AACCAATTAAAAACTGAACGAACCTGCAGAGTTGATCCAAATTTCCGAAA
-AGGAGGTCCGGCTCGACAAGCAGTAGACATCCCTCGACTTGACATCTCTT
-CAGCGGCTCCTTGTAAACATCGCGGAGCACGAAGAGCTGACGATAGAGGA
-AGACGAGCTCCGTGTGGAACAGCTCCCATACCGCTTGAAGGTATTTGTGT
-TTGGATGAGGGAATTGTCGTGGTCTCGTCTCCCATGAACATTTCCTCAAA
-GGATACTGGCTGAAAGTTGGATTTTTTTTTGGTATTGGAGCTCGTCTCTG
-GGCTCGTTTTGCAGTTTGTACCCTTAAAAAGACATTAAAAAGACATCAGC
-AACAAACTCCAAAATCCCAAGTAGTAAACAGATTTTTTCTAAAACGGCAA
-AATTGAGTGAGGAATTTTTATTCGATGCACCATGTTTCTCACTCAAATTT
-GACTACTCATAACTTAGTTAAACCTAATCCAATACTTCCTTAAAAGCTAA
-AAATTCACATATTCCCAAACTACAGTAAACTACAGTACCCTACCGTACCC
-CTACAGTACCCCGACAGTACCCCTACAGTACTTTGACAATATCCCCCATC
-AACTCCCTACAAAATCATCAAAAACAAAAAATTCACAATTTTCAAATCTA
-CAGTAACCCTAGAGTGATCCTACAGTATTCCTACAGTACCACTACATTAC
-CTTGACATATCCCCCACCAATTTCCAACCAAATACCTCTTCAAAAACTAA
-AATTCACATTTTCCAAAACTACAGTAACCCTACCGTATACCTGCAGTACC
-ACTACAGTACCATTAAAGTACCTTGACATTATCCCCCACCAACTTCCAAT
-TAAATACCCCTTCAAAAGCTAAAAATTCAAATTTTCCCGAACTACAGTAA
-CCCTACCGTATATCTACAGTACCCCTACAGTGCCACTACAGTACCTTGAC
-ATTATCCCCCACCAACTTCCAACCCAATACTCAATCAAAAGCTAAAAATT
-AACATTTTCCCAAACTACAGTAACCCTACCGTATTCCTACAGTACCCCTA
-TAGTTTCACCTACCAACAACTTTTCCAGCTCATCATCCTCAATCTCATGA
-TCCTTAGAAGTCTCCAACGCGGCCTGCACATGCTTAATAATCTCCCTCCG
-TTTTGCTCTGCCCGACCACTCGTAAAGTCTCTTCAGAATCCAGGGCGATC
-GATTTTTCTGCGGCTCGGAAGCTTCTGCATAGAAGGCTTGAGAGGCTATT
-GTGGCACGTTGAAGATCTGAAAATGAAGAATCGGTGGGGATCAGTGGTGA
-CAGCGAGGGAGAAGATCTATTTGGTGGGGTGGCACATATAGAAGTGGGTA
-GTAGCGGTTTTTTGTGTGATCTTTGTGTAAATAGACATGATATTAGGGCT
-TCCGTGGTAGGCAGGTGCGGTTTTAGGGCCTGGCGCTTGCCTGACGCCTG
-CCCGTCTCACGCCTGCCTGGCGCCTTTTATTCTGCATTTTGAAGTGAGTT
-TTCAAATTTCAAATTTTCTCATTTTTATCATTTTGTTGAAAATCAAATTA
-AGAAATGAAAAAAAGTTTAAGTAGGTTTCAGCATCAGGCGTGTATTTAGG
-CGAGAGGCAGGCGGGGGTCGCCTCAAAGTCAGGCAGGCAGGCCTTCTTAT
-GCCTACACGGAAGGTGTTCAAAAATCGGTTGCGTGTGTCCAGTAATGACA
-AGAATCATACAAAGCATTCGACTTTTACACAAAACTAGTCTGTATTCCAC
-CTGTACAAAAACCTACCGATCGATGTGATTTTATTTGAATCTGAAAAAAA
-AATTTCTCAGAAAATTTGAATTCCCGCCAAAATGTTTCTTTGAAAGTTTG
-AATTCCCGCCAAAAACATTCTCAGAAAATTCAAGTTCCCGCCAAAAATGT
-TTCTTTGAAAATTTGAATTCCCGCCAAAATTTTTCTTTGAAAATTTGAAC
-TCTCGCCAAAATGTTTTTTTTTTGAAAATTTGAATTCCGATAAAAAACTT
-TTTACAGAGAATTTGAATTTCCCCCTACAATTTTCACAGATCTACTTATA
-TATATATATATATATATATATATAAGTTGAACTTTAGTTTTCAAAAAAAA
-ACCGGTCATTTATTAAAGCACGTGGTGTCAAAAAATATTTTTTCGGCTTG
-ATCTACGCCGATCTACAAAAAATGCGGGAGAAAAGACGCAGAGTTCTCAG
-TTGATTTCTCATGGTTAAGAAAATTCCCGCATTTTTTTGTAGATCAAACC
-GTAATGGGACAGCCTGGCACCACGTGCTAAAGTTATAGTTAATTTACAAG
-TCCTGGTTGGACCTGCAGGATGTCAGGCGCTGAAACGTGTTTCAGGATAA
-AGTTGGTAAACTTTTATAACCAAGAGGAAAGTGTTATCGATATTTTGCTA
-GTTGAACATTTTTTTTTGCTAAAAAGTAAGAGTATTTGAGCCAGGCGTGC
-GCGGCGATCGGTAATTTCCGAAAATCGGCAATTTCGGCAATTGCCGGTTT
-TGTGAATTTTTGGCAATCGGCAATTTTGGCAATTGCCGAAATTGCCAAAA
-ATTCGATTCCGCACACTCCTGCTTTGAACTGTGCATTTCCAAAATCCAAT
-AGAAATTCTGCCGACACTGTAAAATCCCTACCTGCCAACAATCCTCCGCC
-GGAGCTGATTGCCCTATTGAACAGGTGACTCTCGTTAGGGGATATTTGAA
-CATGTGGGACAATGATCACATTGTCCGACGAGCAGCACCCTTGGGATGAG
-GTCTCCTGATTCTCACTTGGCTGATCAGGAATGATTGCATGGCGACGGGA
-AAGTTGCTCCTTGTTAGGGTGAATTGTTTGGGGCTCTCCTTCTTCTGGCT
-GGAAAAATACAATTTTTTGAAGTTTTTGAAAGAAAGCTTGTCATTTTTTT
-GTTGCTATTTTTTACCCTAAAAATGTGGTTTCAAAATTTTTTTACCTCTG
-AATATCTAATCAACGGGGTGAACAACTGCAGATCGACCATACTCGAGCTT
-CTAAAAGTTTGAAGGAAGCTTCTCGTGAAGCACGAAAAAAAAAGAAACAC
-GAAATAGTTACCCTTACAATTATCAGAATAGGATGGGATGTACAGAGAAG
-TAAATAGGAAGAGAAATGAGAAGAGTTGCACTAGAGAAGTATGTACAATT
-AATAATTTATGAGCATCTGAGAAAATGAGAGCGACTTGAAAATCTGAAGA
-GCAAGGAAGATAAAACTCGGTCTCTTATCAGAAAATTTGAATTCCCGCCA
-AAATGTTTATTGTTTAATTTGAACTCCCGCCAAAACTTTTCACAACGAAT
-TTGAATTTTTCGCCAAAATTTTTCTCAGAGATTTTGAATTTTCCCGCCAA
-AAGTTTTACCAGAAAATTAAAATTCCCGCCAAAACTTTTCACATCGAATT
-TGAATAACCCGGCAATTTTTTTATCAGAAAGTTTGAAATCCCGCCAAAAT
-TTTTCACATGAAATTTGAATCTTTCGCCAAAGATTAAAATCGTTGGATAA
-TTTTAATTCGCGGCTGAACGTTTCCAATTCGAATTAAGACCGGCCAAAGT
-TTTTCGGGGTTTTTTTTAAAACTTACTACAAAAAAGCATACATTTATTTT
-CCTAACTAGACGCCTTACTAGGTAAAACCCGCTTTTCACATCAAAAACTT
-CAACAATGCGTCACCGCCAAAAGAGATTCTTGCACTTCACCACGAATAAT
-AGATCAGAAGGAAAAGCGTGTAGTGAGTTGAGAATTATAACTAATTCATA
-TCCCCCGAAAAAAAAAACGCTGATGTCTATATTCTATACATGGTGAGAGC
-TCACCGAAGAATAGACGGGTAATGAGATATATATGTGATACATAAATGTG
-TGCGCCCGGGTATCCGAGAGCCGAAAACAGAAGCATGGAATGGAGCAACT
-AGGGAAAATTGTGTTATCACGAGGCACGGCGGGAGACACAATAATATGAT
-TTTTTTTCGAAAATTTTCCATTTTCACGTGGTTGTCCCATTACGATTTGA
-TCTACCAAAAACGCGGGAATTTTTCGCCTAAAAAAATGTAACGTCAGCAC
-GTTGTTTACCATGAGAAATCAGTTGAGAAATTAGCGTCTCTTCTCCCGCA
-TTTTTTGTAGATCTAACTTGATCAAGCCGAAATGAGACGCTCTGACACCA
-CGTGACGAAAAAAAGTAGATCAAAATTTGGCAAGCCCTTATAAAAGTCCC
-TTTTTCAGTTCTAGGCGGAGCTCAGTTTGACTGATGACGTAAACGCAAAT
-CTTGAAATTTCGAATTCTCTATGGAAATTAGAACTTCCCGCCGCCGCCAG
-ACTTTGTAAAGTTCAACAAAAAGATGAAATATAGAAAAAGTTCAGACTAT
-GATAAGGAACTTATGACTAACGTCTCTTGAGGTGAATGAGTATGATGTGA
-TTAGTGATGCAAGACGACTAGACCGAGAGAGAGAGAGAGAGAGGCTCAGA
-GAGGGGGGAGGGAAGGTAGGTTTGTAGGTAGGCAAGCAGGTAGGCAAATA
-GGGGGTCGTAAGTAGAAATTATGAAGGAACCTAGGTCGGCAGCCATAAGG
-TAGGCATAAAGTAGGTCAGCATCCAAGTAAGTTAGACAGGTACGCATAAG
-ATAGGAAGGTAAGTAGGCGCGGTGGCAAGGAGACTCAAGGCAAAGTAGGA
-CAGGAAGTAGGCAGTAGGTAGGCACGATGAAGGTAGGTGGGTAAGCTTGT
-AAGAAGGCAGCCATAAAGTATGAACGTCGACAGTAGGCATGCATTTAGTA
-GGTAGGTATGAAATAAGAATTAAGGTATGCATAAGGAAGTAAAGTATGAA
-TGATGAAGCCATGTAGATACAGAAATATCAGGCAAGTAGACAGGCAGGCA
-TAATATAGGAAAGTTAGCAGTAGGTAAGCATGTAGTAGGTACGTGGGTAG
-GCATGTAGGTAGGCACGTGGTAGGCTTATGGTAAGCAGAACACAAGCACA
-GAAATATGCATATTGGCAAGTATGTAGGCATGCATAAGATACAAAAGTCG
-ACCAGGCATGTAAGTAGGCACATAGGTAGGCAGGCTTGAGGCAGCAATGT
-AGGTGATCTCGTAAGTAGGTATGAGTAAGGAACCTAGGTAAGTCACAGGT
-ATTTGGCACAACCTGTGTTCTTCTCAATGGTAATCAGGCGAACGTGCCTG
-CCTGCCTACCTAGAAATTCGGTAAAAATTGTGGAAAAAAAACTAGGGGAA
-CCTCTTCCCAATGGAATGCGTAATGTGAGTGGGAGGCGGCAAAAAAAGAG
-CGGACGTAAACACTTTTTCCTAATTCTCTTTTTCTCTCGCTCGTGGAAAA
-TGAATGAATATTTGATACAATTTTGTGGGTACAGCCAGCAGGAGAAGAAG
-AAGCTGATGTCCCGACGCGCGCGCGCGAAAAAAACTTTCAATTCCCTCCC
-CTAATTATCCGCCTAACGCCTAATGTGTGTCAAATTTACCATGTATTTTT
-TTCTCCTCTCGGCTATGTTTTTTTTTCTTTTTCAGCAAAAAAAAGTACGG
-GCACATGAGGTCGGGATGGATAATTAGGGATGTGTGCCAATTTGTTGGAT
-AATAGACAAAAAAAGTACGTGAGATTTTTAGAAAATGCTGAGAAAAATAT
-CACGAGGCGTTGGGGACGTGGCCGCGAATGAGAAAACTAGGCCACCTTCA
-CAGGGCCCTGGCCTTCCTCATTGAACTTTTCGCGCTCTACTGACAAACGC
-CCGTGTACTCCACACGGACAAATGCATTTAGTTTTGCAGCTAGAATCGAT
-CAGCGACGCGACACGCAACGCGCCGTAAATCTACCCCAGATATGGCCGAG
-CCAAAATGGCCTTGTTCGGCAAACTCTTCCATTTCAAATTTTTTATTCAG
-TTTAATTTTCTAGGATACGCCTACGAGTGATCTAGGCCAGGCAGTAGGTA
-GGCAGCCAGTGTAGGTAGCCCCCTTTTGGTGTCAGGCTGTCCCATCGCGG
-TTTGATCTATCAAAAATATGGGAACTTTTCTCCCAGTAAAATGTGACGTC
-AGCACGTTCTTAATCAGGCGAAATCAGTTGAAAAGTCTGCGTCTCCTCTC
-CCGCATTTTTTGTAGATCAACGTAGATAAATACGAAATCAGACACTCACG
-TGGTGCCAGGCTGTCCCATCGCGGTTTGATCTACAAAAAATGCGGGAACT
-TGTGCCCAAAATTATGAGACGTCAGCACGTTCTTAATCAGGCGAAATCAG
-TTGAAAAGTCTGCGTCTCTTCTCCCGCATTTTTTGTAGATCAAAGTAGAT
-CAATCCACATTAAGACCTTCTGACACCATGCCCGAGAAGAGTTCAAAATA
-AATTTCGTAGAACATAAATTTTTCCACGTGGATTTTACAGCACAATTGCT
-TATAGAGCGCGGTTGCACCCCAAATTTTACAGGAAAAATAGGAAAATTTT
-ACCAGATTTCCCGCGCAAGACACGAAACAAGGTCTTAAAAAGTGGGAGAG
-CATGAAAAATCCTAAGAAAGTAAGAAACTTCTGGTTTACCACATAACTCA
-AATTGGAGATAGTTCGACCTTAAAAATTTTGCACCAAAAAGGGCGGAGCC
-AAAAACACCAAAACTTACGTGCAAATTTGTACATGAAAAAACTAAAAAGG
-ACACCTAAAACCGGCGAAATATGAAGAAAAACGCTGAAAATGAGCAATGT
-GTATCAATTTTTCCCCCGTTGCTTAATTTAATACATGTCTTCCTCTCCCC
-CTTCCTTCCTGCTTCACACTCTTTCGGGCGGCGCCTCCTTTTGATTTGAG
-ACTTGAGACTTTTTTTTTTGTGATGTGCGTTGAGTAGTGTGGGATGCATA
-TATTATGAATCAAAAATCTGACATCAAAAATATCGCTGAAAAAATAGTTA
-AAATTTGCTTTAAAACTGCCGTTTTTGATCTACAGGGTGCTTTGGCGCGT
-TGCGGTCGCGTCGCGGCTTGGAGTTCTAGGCCACGGCCATTCAATTTGAC
-ACTACTACAATCAGAAATATTTTGTAATTCTTAGGCCATCAAAAAATTTT
-TAAGCCAGAAAACAAATCCGGAAATTTCTAGGCCATCAAGAATTTCTAGG
-CCACATCAGACTACTTTGAAAATTTCTAGGCCACAATGGGAACTAATTTC
-TGAACCTAATTTCTGAAATTTCTTGGCCACGATCTGAAATTTCGAAGCCA
-TAATTTGAAATTTCTAGGCCACGATCTGAAATTTCTAGACCATCAACAAT
-TTCTAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAATTTGTAGGT
-CAAGGTTTGAAATTTCTAAGCCACGATTTGAAATTTCTAGGCCACGATCT
-GAAATTTTTAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAATTTT
-TAGGCCACGATCTGAAGTTTTTAGGTCATCAAAAATTTCTAGGCCACGAT
-TTGAAATTTCTAGGCCACGATCTGAAATTTCTAGGCCACGATTTGAAATT
-TCTAGGCCACGATTTGAAATTTTTAGGCCACGATCTGAAATTTCTAGGCC
-ATCAAAAATTTATAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAA
-TTTCTGGGCCACGATCTGAAATTTCTAGGTCATCAAAAATTTCTAGGCCA
-CGATTTGAAATTTCTAGGCCACGATTTGAAATTTCTAGGCCGCGATCTGA
-AATTTCTAAGCCATCAAAAATTTCTAGGCCACGATTTGAAATTTCTAGGC
-CGCGATCTGAAATTTCTAAGCCATCAAAAATTTCTAGGCCACGTTTTAAA
-ATTTTTAAAATGTTTAAAATTATAGGTTTTCAAAAAAATTCTAGGCCATC
-AAAAATTTCTAGGCCACGATTTGAAATTTCTAGGCCACGATCTGAAATTT
-CTAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAATTTTTAGACCA
-CGATCTGAAATTTCTAGGCCATCAAAAATTTATAGGCCACGATTTGAAAT
-TTCTAGGCCACGATTTGAAATTTCTGGGCCACGATCTGAAATTTCTAGGT
-CATCAAAAATTTCTAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAA
-ATTTCTAGGCCGCGATCTGAAATTTCTAAGCCATCAAAAATTTCTAGGCC
-ACGTTTTAAAATTTTTAAAATGTTTAAAATTATAGGTTTTCAAAAAAATT
-CTAGGCCATCAAAAATTTCTAGGCCACGATTTGAAATTTCTAGGCCACGA
-TCTGAACTTTCTAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAAT
-TTTTAGGCCACGATCTGAAATTTCTAGGCCATCAAAAATTTATAGGCCAC
-GATTTGAAATTTCTAGGCCACGATTTGAAATTTTTAGGCCACGATCTGAA
-ATTTCTAGGTCATCAAAAATTTATAGGCCACGATTTGAAATTTCTAGGCC
-ACGATTTGAAATTTCTAGGCCACGATTTGAAATTTCTGGGCCACGATCTG
-AAATTTCTAGGTCATCAAAAATTTCTAGGCCACGATTTGAAATTTCTAGG
-CCGCGATTTGAAATTTCTAGGCCGCGATCTGAAATTTCTAAGCCATCAAA
-AATTTCTAGGCCACGTTTTAAAATTTTTAAAATGTTCAAAATTATAGGTT
-TTCAAAAAAATTCTAGGCCATCAAAAATTTCTAGGCCACGATTTGAAATT
-TCTAGGCCACGATTTGAAATTTTTAGGCCACGATCTGAAATTTCTAGGCC
-ATCAAAAATTTATAGGCCACGATTTGAAATTTCTAGGCCACGATTTGAAA
-TTTCTGGGCCACGATCTGAAATTTATAGGTCATCAAAAATTTCTAGGCCA
-CGATTTGAAATTTCTAGGCCACGATTTGAAATTTCTAGGCCGCGATCTGA
-AATTTCTAAGCCATCAAAAATTTCTAGGCCACGATTTGAAATTTCTAGGC
-CACGATTTGAAATTTCTAGGTCACGATTTGAAATTTCTAGGCCACGATTT
-GAAATTTATAGGCCGTGATCTGAAAGTTCTAGGTCATCAAAAATTTCTAG
-GCCACGATTTAAAATTTCTAGTCCATCAATAATTTCTAGGCCACCAGAAA
-ATTTGTGTTCACTTTTTTTTTTGGTTTTTGGTATGTATTTTTCAGAAATT
-ATTCAAAATTTGTGGGAGCAACAATATGCTTTTTTAGTTTCTAGGCCACA
-AAATTCTTTGGCCATTTTCACATTTTTTCCCGCCGCCAATGGTTCCACTG
-GATAATTGAATGTATAGAAAAAAGGGAAGAGTTCAGCTGGCGCAAAAGAG
-GGTAATTCGTTGGAAGGGAAAAAAATAAATGCAAATCTTCGCCAAAAACC
-AATTTTCGGTCGGAGCTCGGCGCGGGCCGACACACACAAAAATGGAGCAG
-AAGAAGACGTCAGAATCTTCTTTTTCAGAAGGCTTTCTCACTTTGAAAAT
-GGGGTGTCCAATTTCTTGTTGCTAATTGTTGGATGGGGAAAGAATGATAT
-TTTGTTTCAGGTTTCACACAACATCAGCCTAGACATTTTTTTTTTGTTTT
-CTCCAAGAGGAGTACACACACTATAAATTGTTGTAAAAATCGAAAAACAC
-GTGGAGCCAGAATTTCTTATTTCGATTTGATCTACAAAAAATGCGGGAGT
-TAAAACGCAGACATCTCACCTGATTTCGCAAGAGCGTGCTGACGTCACAA
-TTTTTTTGGAAAAATATTTCCGCATTTTTTGTAGATCAAACTGCAATAAG
-ACAGCCTGGCACCACGTGAAAAATAGTATTCCTCTTGAAAAAGATTTCCC
-GAATCAAGTTCCTTGAAAGGAGTACGCAAAATTTTGCAAAAAAAATCGGT
-GGCCGAGTTTACTCTTCTGGCGGCCACGTAACAAAATTAACAAGGAAGGA
-TAAAAAGGAAAAAAAAATTTTACTCGTAAAAAGGTACCAGGAAGCAATTT
-GAGGAAGGAAGGAAATGTGAGTGTCTACTCTAATGATCTACCAGTTTTGG
-TGGCCGCGGAACAGAGAAAGCTCGGCCCCCAAGTATTTTTTCAAATATCA
-CGGATTTCTGGTTTCCCTTATAAGTTGAAATGGAAGAGTTTTTAAAGAAC
-GAACTAGGCCATTTTAGCTCGGCTGGGGCAGATTCACGGCGCGTTGCGTG
-TCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAATATATTTGTCCGTGT
-GGAGTACACGACTTTCCCACGAGTTTTCCGACAGGCGATTGTCAATGGAG
-CGCGAAAAATTCAATGAGGAAGGCCAGAAACCCGTGAGATATTTAAAAAA
-TATTCCAAAACTATTTTTATATTCAAAATTGGAAATTATACATACTATAA
-GTATTTTCAACTACATACATGGCCGCGAAAAAAAAAAACTCGGCCACCAA
-TTTTCGCGGTCACTTACCGCAGATCTCCATCGATCCTGAAGTCTTGCCGT
-ATACAATAAGGGCATTTTTCGGATCATAGTGAATGAATTATTTCAGGAAT
-ATTATTTCAAAGAACACACACCACACAAGAAATGTGAAGGGAAGGAAACG
-GGGAAAAAGAGACAGGTGGAAAAATACATTTTCTCTATTATTTCGCTCTG
-TTTCTGACTAGGAAATGAATCAGAATCAGTGATTAAGAAACTGGGAATTT
-ACGAGGTGTTTAGGGAGATGGTGACCGCGAGGATGAGGAAAAACTCGGCC
-ACCGCAAGACTTACCGGCTTAATCAATTGATTTCCTCGTATGTGATGGAA
-CAATGTGAGAGCCGGAGCTTCACTCGTCATAGCTTTGTGTCTAGGTGGCT
-CTCAAGTACTGCTGGACCTGAAAAACTGCAAATTTAATTTGAAATTTGGG
-ATGCAAAAAAGTAGCAGCCGACACCTGCCGGGTTCCCGCAAGATGTCGGA
-TGCTTCAATTGACCTAGTAGAATCGTTAGTGATCTACCGAGCAAAAACAA
-GTATGCTTGCAAGAAAAAAAGGCGTGTGGCTCAAGTTGACAAATTCGACA
-CTTTGGACACACGAAATTGGATGAGCCACACCACACCGGCTAGCTCAGAA
-GAGCCCCTCCGACGTCAAGGACCCCATGTGCGCGCGCGAGCCGAGATTCT
-GGCAACATGAGAAGCGGAGAAGGCGAAGAGAAGAGTGCTAATTTGAACTT
-GTTGCTGCAGGAAAAATATCTAGGCTTAGGCTTAAGCTTGGGCTTAGGCT
-TAGACTTATGCTCAGGCTTAGGCTTAGGATCAGGCTTAGGCTCAGGCTTA
-GGCTCAGGCTTAGGCTCAGGCTTAGGCTCAGGCTTAGGCTCAGGCTTAGA
-ATTGGGCTTCGGCTTCGGCTTTGGCTTGGCTTAAGCTTAGGCTTAGGCTC
-AGGCTTAGAATTGGGCTTAGGCTCAGGCTTAGAATTGGGCTTAGGCTCAG
-GCTTAGAATTGGGCTTAGGCTTTGGCGTAGGCTCAGGCTTAAGCTCAGCC
-TTAGGCTTTGGCGTAGGCTTAGGCGTAGGCTTAGATTTAGGTTTAGGCTT
-AGGCCTTGGCCTAGGCACAGGCCAAGGTTTCAGGTCACTATCACTTGCTC
-CTAGGTGTGGCTGGGGAAATGAAATTCTAGGCCAGTGACGTCAAGATTCT
-GGAAGAGTTCCGTTGACGCCACCAAAAGCAACAAAAACTTCAAATCTGAG
-AAGATCAGAACAAAATGTACTGAAAGTACAAAAAGCCCGCACTTTTTTCT
-CTATTAATACTACTCATTTGAAGAGTGGGGAAAAGAAAAATGTGTTGCAA
-GAAATAATTCCGTGCGAAAAAAGTTTGAGAGGAATGAATGGAGCGGAACT
-TTTTTTTTTGTTGGAAAATCGTAGGTGTGACGTCACTTCTCTTCCAACCC
-CCAGGTTTCTAGGCCACTTAAGAATTTTGCAAAAAAATCACAGAGCAAAA
-CTACAAAAAGGAAAGAAGAAATGTGCTCTTGGAAAATAATAAATATTGGT
-TACGAAATAAAAGAGAAAAGAGAACGAAAAAAATAAAAAAGAAAATGGTA
-ACCAAGGAGGAATGTGGAGAAGAGGCTCTTGTGAGCCCAGATATACCCAG
-CAATTAGGGAGCGAGTACTACTGCCGGGAGATGACGTTTCGAGGATATTT
-CTCACTGGAATGGAGGGTGGTGGAAGAGTTTTGTAAAGTTCTAGGCCACG
-GGTTTTTTTGGCCAATGAGCATGGTGCATCGATGAAAAGCTATTGGGTTT
-CTCGGCCACAATAAATTACAAAAACCTAGTACGATGGAGCACACTTGCAA
-TAGAATTGCAAAAATTTATTTGAAAATTGAGAAGAAAGAAAATCAGGGGG
-GCATAAATGCTCAACAGTGCAATCAAATTGTAGAAGAGCTTTCGCCCAAA
-AAGCTAGGCCACGGAGGAGACCGCTGGAGAAAGTGACGTGTATATGGTGG
-AAGAGTTTTCTTGTTTTTCTAGGCAATCTTGGGCGATTGCAAAAATTGAA
-TTTATGAAAAGATGGCTTGGAAGAGCTTTCGCATAGAAAATCTAGGCCAC
-GGCTAGCAATTTAATAGGGGATAGAAAACCGCGTCGGAAGATTATTTAAC
-TTTTCCATAAAAATTAGCAAATTTAAGAGAGTTCAGATACTGATCTGGAA
-GAGTTTTTGAGCAAAAAACCTTGGTCACGGCCAGCAACTAAAGTAGTAGG
-GGAGATAGGGTACCCCGCTAATTTTTTATTTATTTTTCAAAGAAAGTTTT
-AAGGTTTCGGGAAAAATTTTGATGAAATGGCTTGGAAGAGCTTTTGCCGA
-AAAAACTTAGGCCACGGCCAGCAATCTAATGAGAGGGGGAGGGTTCCCCG
-CTAAATTTTTTTTTTGATTTTTAAACAAAGTTTCATGGGTTCGGGGGAAA
-ATTTGATTAATTGACTTGGAAGAGTTTTTAAGCAAAAAAAAACCTAGGCC
-ACGGCCAGCACCCTAATGAGAGGGGGGAACATAAGGTACCCCGCTATTTT
-TTTTTGATTTTTCAAAGAAAGTTTTAAGGTTTTGGAGGAAATTTGATTAC
-ATGACTTGGAAGAGCTTTTGCAGAAAAAAACTTAGGCCACGGCCAGCAAC
-CTAAAGTAGTATGGGAGATAGGGTACCCCGCGGAAAATTTTTAAATTTTG
-GTAAACAACAATGGAAGAATTTTCCGGTTTTCTAAGCCATTGCATTTTTT
-CAGCGTCACGGATTTCTGGCTTCCCTCATAAATTGAAATGGAAGAATTTG
-CCGAACTAGGCCATATCTGGGGTAGATTTACGGTGCGTTGCGTGTCGCGT
-CGCGGCTCGATTTTAGTTGCAAAACTAAATGTATTTGTCCGTGTGGAGTA
-CACGACTTTCCCAGGAAGGTGATTGTCAATGAAGCGCAAAAAATTCTCAA
-AAAAAATCCAGATTCCCGTGCAGCGTCGCAGGAGATCATTTTCAAGAAAT
-CTGGCTCAAGAAGGATTCAGTAAAACAAGAAAAGAAATAAAAAAGGAATG
-AAAGGTAAGGGTGGACAAGTCGGCGGGACAACTTGTCACTTGCCATCATC
-ATCATTTTTCTTCTCCTCCTCATCAGCTTCTGCTGCTCCGCGAGCTCGCG
-ATGACTCTTCTGAAATTCTAAACTTGGCCAACACAACGTCGGCAACGAGT
-TTCGAATTTACACACACACACACATACGAAAAAAGCTCATTAATTGGAGC
-AGGAGACGGAAGAGAGGGAGGAGAGGCTGCTCAATGAGTTAGAGAAGAGA
-GAGAGAGAGAGAGACTGAAAGATGAAGTATAAGCAGAAGTCGTCGGGATG
-ACAGAAGAAGGAGGAGAAGAAAACGTGAGAAGGGGGGATGTGGAGACAGA
-AGGATATGTAAATATATTAGATTCAAGGATTACAGCAATTTTAAGGAGGC
-AAAAAAAAACAACGATGCTCCGATATTTTTGGGGTTACTGTAGTTTTTGT
-AGATACTTCCAGAAGTTATAAACAAATCCGAGTTTTTTAAAATTTGCCAG
-AAGCACGGGTTCATTGAATTTTTCACGCTCCATTGACAATCGCCTGCCGG
-ACAACGCGTGGGAAAGTCGTGTACTCCGCACGGACAAATACATTTAGTTT
-TACAACTAAAATCGAGCCGCGACGCGACACGCAACGCGTCGTAAATCTAC
-ATATATGGCCGAGCCAAAATGGCCTAGTTCGGCAAAAACTCTTCCATTTC
-AATTTATGATGGAAGCCAGAAATCCGTGCAGAAGTTTCTCGGAAAAAAAA
-CAGAAAGTTTGCGAAATGGCAACCTCTAATTCATTAACATAAATACATCA
-AATATGACGCGCAAAAATGAATTAATTTACTAGTGAAACATGGTGCATTG
-AAGTCGGTGTTTGCACAATTTGTACAGATCTGAGGTTCACTAACACCAAT
-GCACGGCCCGAGAAGTGGTACCTGTACGCAATTTGTCTACCGTATACCTG
-GACGTTTGGGCGCGTGTATCTCAAAAACGGTTGGTCCAGTTTTTTTGTGA
-TGCATATAAAAAATGTCCGAAATTAAATTCTAAATTTTTTGGACCAAAGC
-TTTTTTCGTTATCACGCGCCCAAACCTGGTCTACACTCAAATTATCAGTA
-GAGCGCATTTGCATGGATGTACCACTTGCCGGGCCGTGTTCAAAGGGGTG
-CAACGATTGCGCGTCAAATCGAATGCAACTACAGTAATCCCTAGTAGTTG
-CGCTTCAAATTTGATGCATTGCACGGCCCGGCAAGTGGTACATCCATGCA
-AATGCGCTCTACTGATAATTTGAGTGTAGACCAGGTTTGGGCGCGTGATA
-ACGAAAAAAGCTTTGGTCCAAAAAATTTAGAATTTAATTTCGGACATTTT
-TTATATGCATCACAAAAAAACTGGACCAACCGTTTTTGAGATACACGCGC
-CCAAACGTCCAGGTATACGGTAGACAAATTGCGTACAGGTACCACTTCTC
-GGGCCGTGTTGAATGTTTGAGAAATGTTAAAATTTTGAGTTATATGTGCT
-GGAAAATTGACATGAACATGGTTTTTTTCATTATTTGCGCGTGAATTATG
-GTGCATTGAAGTCGGTGTTTGCACAATTTTTTTCAGATCTGAGGTCAACT
-GACACCAAAGCAACAGAGTTGACGCGCAAATTTTAAAATGCGCTTAACAT
-TTGGCACGCTTTGCAGTCGGTGTTTGCACATTTTCGATTGTTGTGTGAGG
-TTCACCGACACACCAGATTTGACGCGCAAAATTGTACGAAAACAGTTAGT
-TAGAAAACTAATAAAAACTATTAATAAAAGTATAGTGCATCCTGAAAAAT
-TATTTCTGCAAATGTATCTATAGAATTTAAAACAAAATATACAAAAAAAA
-ATTATGAAAACCACGACGAAAAACCCGGAAATGTTTTTTGGGTAGCTTGT
-CGATTCCGGAGGGTATTGAATTTCGCGCTCGAATAATATTGTTTCCTATT
-CATTTTCCCCAGAATACCTACAGAATTTGGGGGAAAAATATGAACTGGTA
-CCTAACATTAACCTACACGTTTTTTAAATAAGTTTAGGCCACGCCCAGAA
-AGTAGCTGGGCGGGGTTGCAGATTTTTCTAGCTTTCCGAAATATAAAAAG
-TCGGAAAAAAAGTTGTAGTCTGTAGTTTGTAGTTTGTAGTTTGTATCAGG
-TTGTCCCATAAGTTTTTGTACTTTTTTTCAAATATTTTTCCAAAACTTCT
-AGAAAGTTTTAAAATTTTTTCATCGTAGGTCGTGTCAAGGTCGGGTCGTC
-CCCTTTCAGAAAAGATTCATTTCATCCATTTCTACTTTGCCACGATGACA
-ATCATCAAACTTGAACGTCGAGACGTTAGATTGCTTCTTCTTTATGAATT
-TCGTCTTGGTCATTCAGCAATGGAAGCGGAACGAAACATATGCGGTGCGA
-TGGGTGAGGGAGCACTCTCTTATAATACAGCAAAGAGTTGGTTTCAAAAG
-TTCAAGAACGGCGACTTCAGTCTCGAAGAAATAGAACGTTCTGGGCGACC
-GGTAGAGTTAAATGAAGAAGACCTAGTGAAGCTGGTGGAGGAAGAGCCTC
-GTCTTAGTCTTCGTGAAATGGAAGAGAAGCTTGAGTGTTGTCATAGCACA
-ATTGCACGTCACTTGGGTCGCCTTGGTTTTACTTCAAAACTTGGAACTTG
-GGTGCCTCATGAACTTTCGGCATCACAGAAGCTCACTCGGGTCAACGTTT
-GTACTCAACTTCTAACTTTTCGTCGAAAGTTCGATTGGCTGAACAATCTG
-GTTACTGGAGATGAGAAGTGGGTGCTCTATGTTAACCATTCCAGAAAACG
-TCAATGGCTTCCGATCGGTGAGAAAGGAATACCGACGCCAAAGCCTGATC
-TTCACCCAAAAAAGATTATGATCTGTGTCTGGTGGGGTGTTCAAGGACCC
-GTGCACTGGGAATTGTTGCCAACTAATAAAACTATCACTGCTGATTACTA
-TTGTGCCCAATTGGACCGAGTTGCAGAAAAGACCAACGGAAAATATGAAA
-AACTATATTTTCTTCACGATAATGCTAGGCCTCATGTCGCCAAGAAGACT
-TTCCAAAAGCTGCAAGATCTTGGTTGGACTGTTTTACCGCATCCACCATA
-TTCTCCAGATCTTGCACCAACCGACTACCATTTGTTCTTGTCTCTCAGTG
-ACTACATGCGCGACAAGCAATTCGACGACGAAGAGCATCTCAAAACTGAA
-CTCTCCACTTTCTTCTCATCGCGTTCGCCGGATTTCTTCTCCCGTGGCAT
-CATGATGTTACCTAGTAAATGGCAACAAGTGGTGGACACTAATGGTGAAT
-ACTTGTGTGAATAGTACTACTTGTCGCTTGAGAGAAATAAATTTTTTTCA
-AAAAAAAAATAGTACAAAAACTTATGGGACAACCTGATAGTTTTAGTTCG
-TTATTTGCAAATTGTTAACGTTAGTATTAGGAGAGCCGAAATAAATAAAT
-TTTAGAAAAGAAAACGAAATTATATACATAGTTCATTAAAATGTGGTAGT
-TTGTAGTTTGTAGTCTATGTATTATGTCTATTCAAATTGTATTCAACATC
-AAAAATTAAACAGGAAACTTATATTTAAAAAAAAAACGAATACTGAAAAA
-AGGCGGCTGCATAGGAAAAAACAATGATTCTCCTCCAAAAAATAGAATTC
-CGCATTTTTTCAGCGGCTATTTTCACGATGATGAGAGGAGACAACAAAAA
-CATTTGAGATGAGAAATGAGGGGAATATTGCACAAAAATTGGGAAATGAT
-TTTTTTTACTTTATACACAGTTAAAATGCGATGCGCGCATAGTGTTTTTG
-GCGTGGATCGCGAGTGGGAGAAAAAGGAACCGGAAATGATGCGCATTGTG
-CGTCCATCGCGAATTTGAGATGCATTGTGCGAGCATCGCGAACATAAATA
-ATGGGCACATTGTGGATTCTCCTTTCTGATAATATTTTACTCTCTATGGC
-TTCACCAATTATCTTTCTCTCTGTGGCTTCCCACTATATTTTACTCTCTG
-TGGCTTCACCAATTATTTTACTCTCTGTGGCTTCCCACTATATTTTACTC
-TCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCACCAATTATTTT
-ACTCTCTGTGGCTTCCCACTATATTTTACTCTCTATGGCTTCCCACTATA
-TTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCAC
-TATATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTC
-ACCAACTATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGG
-CTTCCCACTATATTTTACTCTCTGTGGCTTCACCAACTATTTTACTCTCT
-GTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTATATTTTACT
-CTCTGTGGCTTCACCAACTATTTTACTCTCTGTGGCTTCCCACTATATTT
-TACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTAT
-ATTTTACTCTCTGTGGCTTCACCAACTATTTTACTCTCTGTGGCTTCCCA
-CTATATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTT
-CACCAACTATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTG
-GCTTCACCAACTATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTC
-TGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCACCAACTATTTTAC
-TCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTATATT
-TTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCACCAAC
-TATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCC
-ACTATATTTTACTCTCTGTGGCTTCACCAACTATTTTACTCTCTGTGGCT
-TCCCACTATATTTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGT
-GGCTTCCCACTATATTTTACTCTCTGTGGCTTCACCAACTATTTTACTCT
-CTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACTATATTTTA
-CTCTCTGTGGCTTCACCAACTATTTTACTCTCTGTGGCTTCCCACTATAT
-TTTACTCTCTGTGGCTTCCCACTATATTTTACTCTCTGTGGCTTCCCACT
-ATATTTTGCTCTCTGTGGCTTCCCTCTATATTTTACTCTCTGGCTTCACA
-GTATATTTTATTCTCTGGCATCACAATATATTTTACTCTTTGGCTTCGCA
-GAATATTTTACACTCTGGCTTCACAGAATATTTTACTCTCTGGCTTCGCA
-GAATATTTTACTCTCTGGCTTCGCAGAATATTTTACTTTTTGGCTTCACA
-GAATATTTTACTATCTATTAATCTATTTCTTCGTATAACAATCTATTTTT
-TCGTATAACAATCTATTTTTTGTATAACCAACTTCAAACTCAACTTTTCC
-AAAACTACAGTAACCCTACAGTAATTCTACAGTACTCCTAAAACTCCCCG
-CAACCTGCAGTTCAATGACACCTCGTTTTCTCACGCGTGACTCATGACTC
-ATTAGCTTACATTTCCTTCATCCATCGGTGGTGGGGCGCTGTGTAATATA
-CAAGAAGAGACACCACCACACGCTGCTATTTCTGCTGCTGGTCTGTCTTC
-GTTTACAGCCACTTATGACTCAGCACTGCCATCAATGACTACTTCCTTCT
-TTTTTATCTTTTCGGCTTCATCTCGAGTAGCAAATTTAACAAAATTCAAT
-AGGTGTGACGTCATCAAATGCCTTCGTGGCCTAGAAATCCAAGATTTCTC
-TCGAAAGGATCAATGTGATGTCATGGCCTAGAAAACTCCAGTGTGAAACC
-TAGGCTATGTTAAATAGTCTTGAAAACTCTAAACTGAAGCACATAAGGCT
-ATGATGTCATCGCCTAGAAATCCCAATTCTATGACGTCATGAAAGACCTG
-AACTGCACCGAACCTAGGAATACCCTCAAAAGGGGTGCTGTGAAGTCATG
-TCCTAGAAAACATGAGTGCGAAAACTAGGCCGTAATCTACCATGTGGTAG
-ATCATGCGGCCCTATTGATGGCCTAGAAAACTTACAGCTTGAAGCTATGA
-CGTCACGACCTAGAAACTCAATAGTTGTGACGTCATCAATGACCTAGGTG
-TATCTCGAATGACGCAGTGTCTTCTAGAATTTTCTGAATATCACACAAAA
-GTATAACATCTTCTTGAAACCAAATAATTTTGTTGTAACACCCACACAGT
-ATTGTAACAAATGATATAATAGCGATCGGAACATTCGAGAAAACTGGAAA
-TTTGAGGTCTGACCTTGTTCGGGAAACTTACCAGTGATTATGAGGTGTGT
-CGAAAAATGTGGCCTAGAAAATGGGAAAACTCTTCCTTTTTTTTTTTAAG
-TCCAGAATTACGTTTTTGAGAACGAGAAGTGCATTTCATTTTTGTTAGGT
-TGGAAATTTAAAATTTAAATATTCGTCTCCTAGTTACAGCCGTGGAAGAC
-TTTTTCAGAAACTTTAGCCACGTGTCGAAGTCTGGCGGTGCCCACGATAT
-TAGAGAATGTTGATATTTCCTATTTACTTATCTCCTCGAAATTTTAAGAT
-TAAAGTTACTACCGTTAAGTTACACTGGTGGAAGAGTTTTTAAGATTTCT
-AGGCCACGGCAAAGTTTGGGTGTGCCAGTGACCCTAACACTAAATTTTTA
-AATTTTTTTCAGCCAAATCATCATATGGTGGCCTAGAAAATTTAACACCT
-GAAAACTCTTCCATATTTTTTTAATTTCTGAAATCCAACAAAATAATTTT
-CAAACTCCTCTTCCTTTTTTCCAGAAAAATAAATTAATGTAAATCAAGTT
-CATCTCCGATGAGTTGTAACGGTGGAAGAGTTTTTCAGATTCCTAGGCCA
-CGTCAAAGTTTGAGGGCTTCCCGTGACCCTAACACTAAATTTTCCAATTT
-TTTCAGCCAACCCAAATCAGAAGCTTTCTCTTTGTGTAATAACATGACAA
-TGGGCTATTATCATATGAAATTTTTTAGGTTAAATTTCTGAGGTCATTTG
-CAAAGGTGTCATGACTAGTTTGGAGGCTTTTTTGTGACGGTAGGGGTATG
-AAACAGGTTGTTACTTCTCGAAAAGGTATTATGTGGGGGAGAGGAGAAGG
-AAAGAAGGAAGGCAGATTAGCCAACAGAGATACAGCAAATTTTGTGTGAG
-TGGTGGCAGTTTTGAGAAGAAGCCATGCGCCAAGGTCGGTTTGCCTTCTG
-TTTTCTCATTTTTCGGTTTTTTTGTGAATTTTTGTAAATTAAAAATATTT
-TTTTATAGAAATAAAAATTCAGAAAAAAATACTGGAAGTTTCGTTTGCCT
-TCAAACATTTTTTAAAAATTCACAGTTTTTCAAATAGATGTACTTACACG
-TGGTGTCAGAGTATCTCATTTCGGCTTGATCTACAAAAAATGCGGGAATC
-TTTTGCCCAAAAAAATGTGACGTCAGCACGCTCTTAACCATGCGAAATCA
-GTTGAGAACTCTGCGTCTCTCCTCCCGCATTTTCTGTAGATCAGCGTAGA
-TCAAGCCGAAACGAGACACTCTGGCACCATTTTATTTTTTTGGGCAAAAA
-ATTCCCGCATTTTTTGTAGATCAAGCCGTAATGGGGCAGCCTAGCCCCAC
-GTGCACTTATTCCTTATGCCGAACGACACTCCGATATCCCGTTTTTACAG
-TATGACTGTGGGTTACTGTACCATTTTTGGTGCTTTTGTAATATTGTTTT
-CTTTTTCAAAAACCTAGGAAAAATTTGAACAATTGTTTTTTTTTAATATT
-TGAATTTTTTAGGCTCCCACACATTTTTGCGGGATATCGGAGTATCGATG
-TAAACGTTTTTTTTTTGGTTTTTTGTATTAAAAAGGGTTTAAGTGTTGTA
-ATAAGACATTTTGAATAAAAAATAGCTAGCGCCGCCACGACTTACTGGCT
-TCCCTCCTAAATAAAAATGGAAGAGTTTTTGCCGAACTAGGCCATTTTGG
-CTCGGCCGTATCTGGGGTAGATTTACGGCGCGTTGCGTGCCGCGTCGCGG
-CTCGATTTTAGTTGTAAAACCTAATGTATTTGTTGTCCGTGTGGAGTACA
-CGACTTTTCCACGCGTTGTCCGGCAGGCGATTGTCAATGGAGCGCGAAAA
-ATTCAATGAGGAAGGCCAGGACACCGATTCAAAGATATAACGGCCCACAT
-TTCAACAGCGGTATATCGGAGTGTCGTTATTTTAAGCTTGCACACGGGCT
-TCTGGCCTTTTTCATTGCTTTTTCGCGCTCCATTGACAATCGCCTGCCGG
-GCAACGCGTGGGAAAGTCGTGTACTACACACGGACAATTTTTTTTAAGTT
-TTATAATGAAAACCGCGACGCGACACGCAACGCGCCGTAAGTCTACCCGG
-GCCGAGCCGACACGTGGTGTCAGAGTGTCACATTTCGGCTTGATCTACGT
-AGATCTACAAAGAATTTTGCATGATTAAGAACGTGCTGACGTCACACTTT
-TTTGGGCAAAAAATTCCCGCATTTTTTGTAGATCAAACCGTAATGGGACA
-GTCAAAATGGCCTAATTCGGCAAACTCTTACATTTCAAAATATGAGGGTA
-GGCAAAAGCATGGGGAATTTGTGATTAAATTTTTGAAAAAGGAAACAATT
-TTTTCCAAATTTCTTCTGAAATTTTTTCAAAAATAAATGTTTTTTTTCCC
-TAAAATCTTCAAATTTCTAGTTTCAATCTCTCACTACCGTGACCAAAAAT
-TCCTATGATTTTTGACCTCCCGCCACACAGTTTTACCACCAACTTCTTCC
-CCCCCCACCCACCCACTTACTTCTCGTATCTGAAACTCCGCCCCATTTTT
-CGTGTACTTTACTACTACTTGAATGATGATGAGGTAGAACAAATCTGTGT
-TTATTGGCAGAAGCAGTGGTAGCAACAGGAGAAGAAGAAGAAGCATCACT
-GTGTGGAACCAGCCAGCTGTGTTGTTGTGGTTTTAGTCGTGGAGAGAGAG
-AGGACGACGTCGTGTGTCTTCAATAAAATGAGGATCTCATCGCTCTTATT
-CCTGACTTTCTTGGCTGGAATTGTTCAGGTAAGCTGGGTTTTAAGTATTG
-ATATTGGTGCTATTTGAAAATTATTTCAAAAATTTTTGGAAAATTTTTTT
-TTTTTGGCCCAAAAATTTTTTTTCTAGAACTTTATCATTCCTAGGCATAC
-TCTAAATATGTCTGCAAATATTATTTTTTCTGGAAAATTTTGAAAATGTA
-TATATGGATATATGCAAGTTTGGAAGTTTTTGTAGTATTATTTTGAAAAA
-TTATAAATTTTTTTAAAAAAAATTTTTTATAAATCTAGCAAGAAACGTTT
-TTAAAAACAATTTTAGTCAATTTTCTTTTTTTTTTTTTGGAAATTTCACC
-AAATATCGGCCCAAAATCTATGCAATACTATTTTTTCACAAAGAAATTTT
-CAAAATTTGACATTATACAGATCTAGGGCTTCCATGGTAGGCAGGCGCGG
-TTTCAGGGACCTGCCTGAAACCTACCTGGTTGCCGCCGGCCTTAATTTTT
-ACGGGAATTTAGAAAAATTTCTAATTTTCTCATTTCTATCAATTTGATGA
-AAACCAAAATAAATTGGCGAGAGGCAGGCAAAGGTTGCCTTAAGGTCAGG
-CAGGTAGGCGTTTTAACACCTACCAGCTTTACAAAAGCACTATACAAGTC
-TGTTTTTGAAATCTCTAGCTTTAAAAATCTTTAAAACAAGACATGGTGCA
-AGACAAGACAAAGACATCGACAAATTTTCGACAAAATTAATTTTTTTCGA
-AAAACTTTTAGTTTCTTCCAAATTCGCCAAAGTGAAAAAAAAGTTCCTAA
-ACGTGAGATTTTGTATGTCTTCTACACATACTAGCCAATATCAATTACAA
-TATCTGCCAAGAAAATCTCGAACCAAACACCAAAACGGCGTTTGGTAACC
-GGTTTTTTTTCCAAAAAAACTATACATAGTTTCTAGTAAACAAATACGAA
-TGGAAAATTCAAGGTGACAGAGAAGAAAAAAAGATTAGAAAAAAAATCGT
-TGGTGGTGGCCTAAGAATTGCATGTAACGTCACACCTCGGCCAGGGGTCA
-TGGTACATGCTACATGATTACCCATGGCAAAAGAGTGACGTCACTCTCGG
-CCATGATTTTTAGGTTTAGGCTTAGGTTTAGGCTAAGGCTTCGGCTTAGG
-CTTAGGCTTAGGCTTAGGCTTAGGCTTAGGCTCAAGCTTAAGCTTAGGCT
-TAGGCTTACCTTATGAGCCTATAAGCTTTCTGAAAAAGACAAATATTAAA
-AAAAAACCAAAAAAAAAAAAAAAAAAAGACAAACAAACAAATAAAAACAA
-ACAAACAAATAAAAACAAACAAAATATTTGAATTTTTCTAAGAAGACAAA
-TACGTCACTCTCGGTCACGATTTTTGGGCTTTAGGTTTAGGTATATGTTT
-AGGCTTAGGCTTAGGCTTAGCCTTAAGCTTAAGCTTAGGCTTAGGCTTAG
-GCTCAAGCTTAAGCTTAGGCTTAGGCTTACCTTATGAGCCTATAAGCTTT
-CTGAAAAAGACAAATATTTAAAAAAAACCAAAACAAAAAAAAAAAAAAGA
-CAAACAAACAAATAATTTTTCAGGCCCAAGACTTCCTTGCAATGTTCAAG
-CCGTTCCTCGGAGGTGGCGGTGGTGGCGGTAATCCGTTTGCAAATCCACA
-GGCGATCGGCGTAAGTTTTCCGACAGGCAAACAGACAAACAGACAGACAA
-TCGAAAGTGGTCCAGGCGCTGAATGTGTTACGCAATTGGTTTTGGGCGCC
-ACGCGCGCATATTATTTGCATATATACATACATCATTCAGATAAATGGCA
-TTGAAAACGAACAAAAAGTGAAGATTTAGTGGGTTGGCAAATGCATTTTA
-TGTTTCTTTTCCAGGGTCTCTTCCAACAATTCGCCGGTGGAAATGGTGGA
-GGATTCGGGCAGCTTCTTGCTGGAGCAATGGCACCGGTATGTGTTGCGAC
-GTTTAAAACGGAGTGTCGTTGTGAAATTTTCCGCTTTGGAAAACATTGAG
-AATATTCGAAAATTTTTGTAAAATTTTGAGATTTTCTTTTTCCAAGCTTT
-GGGCTTAGGCTTAGGCTTAGGCTTAGGCTTATGCTTAGGCCTATGCTTAG
-GCATAGGCTTAGGCTTAGGCTAAAGCTCATGACTAGACTTATTCTTAGAT
-TTAGGCTTAAGCTTAGGCATGGCCTTAGGCTTAGGCTTTTGCTTAGGCTT
-TTGCTTAGGCTTTGGCTAAGGCTTAGGCATAAAAAAAGAGAAATTCCCAA
-AGTAAAAAAAAAGACAACTTTTGACAAATTTGAAAGTGAAATGTTATATT
-TTAAGCCTATTTTTTCCCTAAAAAGAAAAAAATTACTTTTATAGTTTGAA
-AACGATTTTTTGGCAGTGTTTCAGCAGTCAAAAATATGGCTGAAAAAAAA
-AGTTGATTTCAAAATATTTTTCATCTCAATTAATTCTTTTAAATTTGCTC
-TACCAAATTTGAAAAAAATATTGAAAATTATTTTAAAAAATTTAAATTAT
-TAAATTTCAAGTAAATTCGAAAATTTTGTTTATTTATTTTATGTTCATTC
-TTACAATATAAATTATAATCCTCAAACATTCCAGAAACCAGCACCAGCCG
-CAGCTGGACCCCGCTCAGCTCCAGCTCCAACCAACGAGGACTACAACACC
-GACATCGACGTTCCAGCTCCAAAGGCAAAAGCCCGTGCAGCTCCAACTCC
-ACGAAGAGCACAAGGTGATGATGATGATAATATTGATATGTCTCTGACAC
-GTCTTGGCTAACTTGGCTTGGAAAAGCACAATTCCTTTAATACAAAAAAC
-TTTTCTCAAAGATTCTCAAAATTTTGCACTTTAATTTTTAAGTTTAATTT
-TTAAAAAGTTGTCTCACGTTTTTTAACCAATTTATATGCAAATATGATCC
-TTATTACTAACAATATTTAGTAATCTAAACATAAATTGGAATATTTGGTC
-TTTTTCCCGCCGAAAATGATCAAACATTCCGAAGTTAGCAACAGAAAATT
-GCAGTGAATTGTGTTGGTTTAATTTTACCGTCGTTTTTCATATTTTTTGC
-CCGATAGCTTTGCTGTGTTTTGTGCCATCCTTTTCTCTGTGATATACTGT
-TACTTACTTCAATAAATGATTCTTTTAAAAGTTTTCGCACAAAAAATTTA
-GAGTTGCTGGCAAAAATACACGCCGACACGTGGTGCCAGAATGTCTCATT
-TCAGCTTGATCTACGTTGATCTACAAAAAATGCGGGAGAATGGAGACGCA
-GAGTTTTCTATTGATTTTGCATGGTTAAAAACGTGCTGACGTCACATTTT
-TTTAGGCAACAAATTCCCGCACTTTTTGTAGATCAAGCCGTGGTGGGACA
-TCCTATCCCCACTTGCGCTGGGGGGACAAAACCGACATAACTTTTGAAAC
-ATATTACACATATACATTTAATATATGTTTTCTGAGAGAAAACGTTTTAG
-AAATTTTAGAGAATTTCAGCAAAAAAATTCTGATAGCTTTTTGGAAATTT
-ATATTATAAAATTTTTTTTTTTTTTTAATTCTGATTTTTTCAAAAAAGAA
-ATTTTGCAAACCGCTTCCAGAATATTTGCCTGTCTCAAAATACCCTAAAA
-AACATTAAAATGTTTCAAAAATTATCTTTTGGAACAATTTTACGGGTCAC
-GCGAAATACTTTCTTTGTAAGTTTTTTTTCTTTGAAATTTAGATTTATTC
-CCAATATACGTAAATTTTTCACTGAAAGTTAGAAAATTATACTTGTTTTT
-TTCCAGAAATTGAAATGTACATGATACAAGGCTGCTACATTCCAGCAAAA
-TCTGATAAAATTTTAGAAACAATTTTTTGTCAGAGTCTTGAATATTTGAG
-CTATAAGTTTTTTTTTTTCAAAAAATTAATCCAGTTTGGCCTAAAAACTT
-AAGGCTAAGATTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTCAGCCTAA
-GCTTAAGCCTAAGCCTAAGCCTCAGCCTAAGCCTAAGCCTAAGCCTAAGC
-CTAAACTTAAGTCTAATCCTAAGTCTATTCACTAAAATTTTGACGTAAAA
-CTTGGGACTAAAAATTTTGGACACAAATTTTTTACCTAATTTTTTGGTCT
-AAGCCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAA
-GTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGT
-CTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCT
-AAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAA
-GTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGT
-CTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCTAAGTCT
-AAGTCTAAGCCTAATAAGCCTAAATAGGGTCTAACGCTTGCCACTGACGC
-CGCTAACGCTCGCCACTGAAGCCACGCCTAAGCCTAAGCATAAATCAATT
-TGAAACTTCAGACTTAAATTTCTTGGTGGCCTATACGACTCTCTGTTAAA
-TTTCGCTTTGATCAGCAAACGGGAACCCTTTGAAAAATTAAAAAACTAAC
-GCTCGCCACTGACGCCAAGTCTAAACCTAAGGGTAATACTAAGCCTAAGC
-CTAAGCCTAAGCCTAAGCGTAAGCTTAAGCGTAAGCGTAAGCGTAAGCGT
-AAGCCTAAGCCTAAGCCTAAGTGTAAGCGTAAGCGTAAGCCTAAGCTTAA
-GCCTAAATCTTTCGACAAAAATTTTGACCTAAAACTTTGACCTAAAATTC
-GAGACTAAATATTTTGGACTCAAATTTCGGCCTGAATTTTTGGACTAATT
-CTGGGAACTATTCCAGAGTAATTTTAACAAATTGAAAACTTTTTATAGTA
-TTCGTAAAACAAAAAATAAATGCAATGTTTTCAGTAATAAATTTGAAATT
-TTTGAAAAATTAAATATTTCTTCGAAACTTCGAAACTTCCTTTTCTCTGG
-CATAACCCCAAATTCCAGCCGATGCCCCGCCAGTATACCGCCAGCCTCGC
-ACAAAAGCCGAAAAAATCGAAAGATTCCGGAATATCGCTCGGACATTCTC
-GCCGTTCGTGTACGAGGTGAACACCACACCAGCTCCTCACTTTGACAACT
-TCATCTGGCAACAAAATGCACCAGCTGTCACACCGGAGCCATTCACATTT
-GCTCCATTCTCCTTCCCAACTCTTGCCACCGTCGCACCACCAGCTCCAGG
-ACCCGGCGGCCCGACTCTTGAGCCATTTTTACCGACGACAGCTAGTCCGA
-AGCTGTTAGCTCATAACACTGCTAGGGTATCAAAAAATTTGAATACTGAA
-TACCTCCCTATAACTTTTTCAAATTCCAGATGATCCGAGAAATCGCTTCA
-TTTTCCGACGGAGGACGCTCCAGGGATCAGGATTTTGGCGCAGTTCAAAC
-GCTCATGCAAGCCTTCTTCGAGGCAGTCTCCAGTGGAAATAATGGTGGAG
-CAGGAGCTGCCGCCGGAGCCGGAACAGCTTTAGGAGTAGGTTAAGCTCAC
-TAAAGAGGTCGTGAAGTTTTACTATTTTTTAGGATGCTCCAATGCTTCAA
-GCCCATCGAGATGGTACCGAGTTGGGAGCCAATCGCGCGCTGACCAACAA
-GCTTTTCGAGTCGGATATGGTGTTGACGGTCAAGCAGATGAAGGCGTGAG
-TGTGGGGTACTGTGCAATAAGATTATTGTAGGGGTACTGTAAGATCTCTG
-TAGGGATACTGTAACCCTACCGTGATATTACTAAAGGGGTGCTGTAAGAT
-TACTGTAGGGGTACTATAGGATTACTGTAGGGGTACTGTAAGATTACTAA
-AAATATACTGTGAGATTACTGTAGGGGATGCTGTAAAATTTCTCTAGGGA
-TATTGTAGAATTACTCTAGGGATACTGTAGAATTACTGTAGGGAACTGTA
-AGAGTACTGTAGGATTACTAAAGAAGTACTGAAGGATTACTGTAGGGGTA
-CTGTAAAATTACTATAGAGTACTGTAAGATTTCTGTAGGGGTACTGTAGG
-ATTACTGTAGTATTACTAAACAAGTACTGAAAGATTATTGTAGGGGTACT
-GTAAAACTACTATAGAGTACTTTAAGAGTACTGTAGGATTACTAAAGAAG
-TACTGAAAGATTACTGTAGGGGTACTGTAGGATTACTGTAGTATTACTAA
-ACAAGTACTGAAAGATTACTGTAGGGGTACTGTAAAATTACTATAGAGTA
-CTGTAAGATTGCTGTAGGGATACTAGAAGATTATCGTAGAGATACTGTAA
-GATTATTGTAGGGGTTCTGTAAGATTTCTGTAGGGTTACTGTAGAATTAC
-TGTAGGGTACTGTAAAATTACTGTAGGGGCACTCTAAGATTACTGTAGGG
-ATACTGTAGAATTACTGTAGGGTTACTATAAGTTTACTATAATATTTCTG
-TAGGGTACTGTAAGATCACTGTAGAGGCTACTTTAAGATTCCTGTGGGGG
-CACTGTAACACTACTGTAAGATAACTAAAACGGTACTGCAGGGTACTATA
-AAGCGACCACCCTAGATTCATGGTTATTTCAGAATTGTGCTCGCCGCCCA
-AGAGGCCCGTAACCCTCACGGACGTAAAAAGCGAAAGGTGATTACGGGAT
-CCGTGTACCGATGGAAGAGTGTGATTCCGTTCCGATTCAAAGGTGGCGAC
-GCGAAATGGAAGAAGCTGATCCGTGAAGGCCTAGGCCTATGGGAGAAGGA
-GACGTGTGTGCGATGGAGCGAGAATGGCCCCGGCAAGGATTATGTGATCT
-TCTTCAGAGGATCTGGGTGAGTTGACATGCCCATGGTTTTCGGATAGTTT
-GGGTTTTTTTTCAGATGCTACTCATCAGTCGGAAGAACCGGAGGATCTCA
-ACTTATTTCGATTGGGTATGGCTGTGAAGATGTAAGTTTTAGTATTTCTA
-CTATACTATTTATTTTAAATTCAAATTTTCTAGAAAGGAATCGTTGCTCA
-CGAAGTCGGTCACTCCCTAGGCTTTTGGCACGAGCAGTCCCGTCCGGATC
-GGGATGACTACATCCATTTAAGAAAAGACTGGATTATTAAGGGAACCGAT
-GGAAACTTCGAGAAACGAAGTTGGGAAGAAATCGAGGATATGGGCGTTCC
-GTATGATGTCGGAAGTGTCATGCATTATGGGTCGAATGTAATTTTAAATT
-TTGAGTCGGTAGTTTTTAGATACTGAAAATGATTTTCAGGCTTTTACAAA
-GGACTGGGACCAAATTACTATTGAGACCAAAGATAGTAGATATCAGGGAA
-CGATTGGTCAACGCCAGAAGCTTTCGTTTATCGATGTTAAGCAGGTTAAC
-AGGCTTTATTGCAATTGTGAGTTGTTATGCAAAAATGAAAAAAATTTGAC
-CACTGAGCGGATCGAACGCCCAACCTTTCGATCTGGAGTCGAACGCGCTA
-CCATTGCGCCAAGCAGTCACATTTTGTTGCAGGAAACGGTGTATAGAGGA
-GAAAAGAAAAAAATAGACAACCCTACGTTTTATCAGTGGAGCGCGGTTGC
-AATTTAACATTCCAATTTTCAGCTGTTTGCCCGGTTGCCTTACCCTGCAT
-GCATGGAGGATACCCCGACCCCAATAACTGTGCGGTTTGTAAATGTCCAG
-ACGGGCTCGGAGGAAAGTTGTGTGGACGTGCCGCAAAGGGCACAGATCAT
-GGTAAAACTCCACTGGAATTTATGGGAAAAAACCGCCCTAAAATTTTCAG
-ACAAATGCGGCGGTGAGCTAACAGCGACCGCCGAATGGCAGGAGATGGTC
-TACAAGGGGAAGCGGACGTGCAATTGGAAGGTGAAGTCGCCGAGCGGTGG
-GCGGGTTCGGTTGGTGCTCACCGAGCTCAGGTACCAGTGTGCACCGGCGT
-GTAAGGCCTACATCGAGATCAAGCATAATACCGACTTCCAGCAGACCGGA
-TTCAGAGTTTGGTGAGAACCCTAGATTCCCAAAAAATTCTACACTTTTTT
-CAAAAAAAAATCGAAATTCGACCCATTTTGGCGGGAATTAAAATTCTTTT
-AAAAATGACAAAAAAAATATTTTTCTGCAGAAAATTTTTCGACTTTTTAG
-AAAGCAAGCTTTCACGCGGTTTTGGCTTCCCTCATATATTGAAATGGAAG
-AGTTTTTGCCGAACTAGGCCATTTTGGCTCGGCCATATCTGGGGTAGATT
-TACGGCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAATTTAATTGTCC
-GTGTGGAGTACACGACTTTCCCACGCGTTGTCCGGCAGGCGATTGTCAAT
-GGAGCGCGAAAAATTCAATGAGAATCGAGCCGCGAAGCGACACGCTACGC
-GCCGTAAATCTACCCCAGATATCGCCGAGCCAAAATGGCCTAGTTCGGCA
-AGCTCTTCCATTTCAATTTATGAGGGAAGCCAGAAATCCGTGTAAATTTT
-TAATTTTTTGTTGCTTAAAAAAAAAAACTAAACAACTATTTTCCAATTCA
-AATTTCTAGCTGCTTCAACAAAACATATGACGTCATCTCCGACCAATCTG
-AAGCCCTGATCCTCTCCAACGCGAACATCGTGGACTACGAGGTCTCCTAC
-AAGCTGCAATGGATTCAAGGTACCCCACCCCCCCCCCCTTTTCTATCCAT
-AGAGCGCACTTTCTTCCAGACAACGGAAAAGCTCTTCCACCACCGAAACC
-CACGTCGACCTGGGTGCCCGGAAAAGAGAATCGACCATTCCGCGGAGTGG
-AGAACTCGGGCGGCACCATCGAAAAGTTCATCCTGCAAGCGATCCCAAAG
-ATCCGAGACTCGCATCGGCCACTGGAGAGTATTACTAGTATTGTTGCGGA
-ATATGGTCTCGCAACGCTACTTGGTATATCGCATAATGGAAAGTAGTCCG
-TTTGGAACGATTTTTGCAATCGTCAGAGGAATATATATATATATTTGTAA
-ATTTTGTACCATCCCAAAAATCCAATTTTTCTTTCACAATTTTCAAAATT
-TGCTCATCTTTCACAATTACTCGGGTTAACACATTTAATGCCTTTCAATA
-AATAACAGTTCATATTTAAAGTGATTATTATATTACAGGAACACATATAT
-CTGAGAATGCGTATCGCACAACATATTTGACGCGCAAATATCTCGTAGCG
-AAAACTACTTTAAAAGACTACTGTAGCGCTTGTGTCGATTTACGGGCTCC
-TTTTTTGAAATTTACACGGTTTTCTGGCTTCCCCTCAAAAATTGATATGG
-AAGAGTTTGCCGCGAACTAGGCTATTTTGGCTCGGCCATATCGTTCAAAA
-ACTACAGTAATTCTTTAAATGACTACTGTAGCGCTTGTGTCGATTTACGG
-GCTCCATTTTTGAGATTAATTTTCTTTCGAGTTCCCTTCGTTTTTTTTGT
-AATTTTTTGCTTAATTTGAATTTTTTTTTGATAAATTAAAAAAAATGATT
-TTACACGGTCTCCTGGAGTGTTCATAATTATTGGAGCGCACTTGCTGATC
-CTTGCCGCGCTTATTTACTTTTTCACCGTTAGAAAATGAGTAAAATCAAC
-GATTTTGGTCAAGAAATTTAAAATAAAATTATTAATTGATTTCAAAACCG
-AGTCCACGTGGTGCCAGACTGCCCCATCACGGTTTGATCTACAAAAAATG
-CGGGAATTTTTAGCCCAAAAATGTGTGACGTCAGCACGTTCTTAACCATA
-CGTTGAGAGTTGAGAATTCTGCGTCTCTTCTCCCGCATTTTTTGTAGATC
-TACGTAGATCAAGCCGAAATGAGACACTTTGACACCACGTGCGAGTCCGT
-AAATTGACACCAGTGCTACAGTAGTCATTTAAAAAATTACTGCATGTCAA
-AATTAAAATTTCCTGTTCCCGTAATATCGGATTCAGCACGCCACCCTATG
-AAAATACCAAAATTGGAAAAAAATCAATAAAAATTTATTTTCACGGAAAA
-AAAATTGAGACCACCTTTTTGTTTTCTATCTATATAAACCCGTTGTTTTT
-CACAAAAAATTATTGAAAATCCTTCAAATCATATTATTAGTTCGAAACGT
-CGACGCGTAGGTGTTCGATCGTACACTGCCGGGAATTGCCGGTTGCGGGA
-GTTTCGGCACCGCCGGTTGATATCCTTCTTTGCTAACTTTTGATCTGAAA
-ACATTGACTTTTGCTACGTGGCCGTGGAAGAGAAAACTCGGCCACTATGT
-TTGTTTTTGCGACAAGGGTATATGCGCAAACCTACAAAATGATCTTCAAA
-AAATGCGCGAATTTTTTGCCCAACAAAATGTGACGTCAGCACGTTCTGAA
-CCGTGCGAAATCAGTCCCGCATTTTTGTAGATCTGCGTAGATCAAGCCGG
-ACCACAAAAATATCAAAGTTTTGAATTTTTCAAAAAAAAAGCACTTACGA
-GGATCTAGTCAGCTTGAACAGCAAGTAAATAAGACAAAACGCGCACATGA
-TGAAGCTCAAAAGTAGATCAAACGAGAACTTGGTCGCCGAGACCGCATTG
-AAACTTCTGTCAAGTGAGAGAAACGGTTGGGTGGCATCGTTCACAAATGA
-AAGCATGTAGAATAGTCCAGCAATCGGATAGACTGCCGCAATGACTCCGG
-CAAACCCATTGACATCCTGCTCATCAGAGCCCAGAAGCCGGCAGCAAGCA
-GACGAAAGAGCAATGGAGCTGATGAGGAATAGAATGAGCTCCCGGCAGAA
-GTTGAAGATCCAGTCGGTGCCCGGGCTTGCTGCTCCGATGAAGCAGAGTC
-CGGTGAGGGGATTGGCGGCGACGGCTTTTGCGAGTAGCGCGAGCATTAGT
-GGAGCCAGCGGGATTCCCAGGATGAGCATGATCACGCGGGTTCTGGAGTC
-GTCCTGGAAGATCATTTTTTAAAATTTAATTTTTGAAAATTTATCATGTC
-TGGAAAAGGTACAGGCTGACTAGACCTATTTCACGTGGTGTCAGAGTGTC
-TCATTTCGTCTTGATCTACCATGATCTACAAAAAATGCGGGAGAAGAGAC
-GCAGACTTCTCAACTCTCAACGTATGGTTAAGAACGTGCTGACGTCACAT
-TTTTAATGTACAAAAAATTCCCGCATTTTTTGTAGATCAAACTGTAATGG
-GACAGCACAAAATTCAAAGCCCTCACCAATATATGCGATGTCCTTGTCGC
-CTTATTCCACGACACACAGATCAAGAGCCACCAGAGACGTGAGCAAGTTG
-CCGTGTAGTAAATCAGTGAGGCCACTGAAGAACATGGAACATGGGAAAGC
-CCTCCGACGACGAAGAGCAGGTGATGGGTGTAGTCGGTGCACGAGATTTG
-GAACTTCAAAATTCTTTTTGAATGGCTCAAAAATATTGATTTTGAGCCAA
-GTTATGACCATTTGAAGTTGGTGGCCTAGGATTTTCCTAGGAGTATTCTA
-GGCCGCCAACTTTGGACAGCCATAACTTGGCTGAAAATCAAAATTTTTGA
-AATCTAATTTCACAGTTGAATTTAGCAGACCATGAGCTTCAATTTGACAT
-ATTTTTGTGCCTTGCCACGAAAACTCGCAGACCTACAGTAATCCGGCCAA
-AATTAATGTTAACTGAAAGCTCAGAGTCTGCTAAATTTAAATACAAAGTT
-CGATTTCCAAAATATCGATTTTCAGAAAAATTATGAAGACTCTAAGTTGA
-TGGCCTAGCATTTTCCTAAGAGTATTCTAGGCCGCCAACTTCAAACGCTC
-ATAACTTGGCTCAGAATTAATATTTTCGAGCAAAATAAAAAGAATTTAAC
-ATAAAATCTTGTGATCTACCGGAAACTAGATGAGCGCAATTTTAAATATC
-TAGGCCACCAAGTGAAAACCGTGACTCGGCTCAAAACCATTATTTCTGCT
-TCAACCAAAAACCAATTCATTTATTTTAATTGAAAGCCCGGTGTCGGCTC
-AATTCAAATACCAAGTTTATTTTCAAAATACCAATTTTCAAAAAAGCTAT
-GAGCGTTCTAAGTTGGTGGCCTAGGATTTTCATAGATTTTCTAAGCCACC
-AACTTCAAACGCTCATAACGTGGCTTAAAATCAATATTTTCGAGCAAAAT
-AAAAAGGATTTAATATAAAATCTTGTGATCTATCGGAGAATGCATTTTAA
-ACTTTCTAGGTCACTAAGTAAAATATTCGGCCACCAAGCCTCGGCCGAAA
-ATTATTATTTCTGCTGAACCAACAACCAAATTCTCCAAAAACTGCTTACC
-TGATCTTTAAACGAAATGCTCACAATATAAATAACCGATGTCGCACAAAA
-CGAGATGCACGAGAAGAACATGGCAGTTTCCGTAAGTGAGTGGAGCATCT
-CGAGACGTCTAAAGTAGATCCTGATTTGTTTTTGGAAAATTAGGCCACAC
-ATCACACAATCCAAAACTTACGATAAGCCGACTATGAAGACTGATAGAAT
-TGTTAGTATTACAGAGCTCAGCGAGAGAAACAACAAGAGTCGGGTGGCGG
-ATTCACGGTCAGTCTGGAAATGTACTCATTTGTTACTGAACTAGGTCTAC
-TTAAGCCTAAGCCTAAAGTAAGCCTACCTGCCCAACCTTCTGTGGGTTCG
-AGCACAAAGGCACACACTTTGAGGATCGATTCAGGAACACCTCATCCTGT
-GGGCATTTTCCGTTGAGGCGGTCGACCTCCCGTTGAATATCTTCTACTCG
-ATCATTACCGTCGTCCTCCTGGAAAAGAAAGATGATTGATTTGAAGCTGT
-GTATCTAATTACCCCCGTTTGATGATATAGGACCGGAGAGATTACAATCA
-GATGTTCTCTGTTTTTCTCTGTTTTTTGGTAGCTAGTATAGAAAACTATA
-GAGTACTGTAATTCCTATTTGGGAGCTTGGTATTGTGCTATTATCAAAAA
-AATACAATTGCACAAATTTCTCATTGATCTACCTGTTGAACTTGACTCCG
-CCCCCAATCTTGTTACTGTTATTATTAAGGTAGATCAAAAACACAAGGAA
-GATCAAAAATAAATTACGAGAAAATTGTGCGATTGTATTTTTTTCTATAA
-TATCAAACATTTATTGATTTTAGGACATTCTGTGATTAACTTTTATAGTT
-TCACGGATTTCTGGCTTCCCTCAAAAAATTGAAATGGAAGAGTTTTCGCT
-GAACTAGGCCATGTTGGCTCGGCCATGCGTGGCGCGTCGCGGCTCGATTT
-TAGTTGTAAAACTAAATATTTCCCACGCGTTGTCCGACAGGCGACTGTCA
-ATGGAGCGCAAAAAATTCATTGAGGGAGGTTTCTATTTGGCAATGCGCTT
-TTGGTTTTTCAGTGATCTTTCAAAAAATTTTTCATAATTTTCAAATGATC
-ATAACTCTGAAACTAAAATTTTTGGCAAAAAAAGTCGTAATATTGTAAAA
-TGTTGCTCATAATTTCTTCTATACGATAAAATTTTTTCAAAATTTTACAT
-TAAACAGGCCAATAGGTACAGCGCCCGACAACTCGCGGGTCCAAAAATTT
-TTCAAAAATCGTCAAAATTCGACTCGCGAGATGTCGAGCGCTAAATCTAT
-TGACTTTATTTTTTTGAATTTTTGAAAAATTTGTTATCCAATAGAAAAAT
-TTATGAGCAACATCTTATTAGTTAAGCGTTTCTTGCCAAACATTTTATAT
-TCAGAGCTATACTCATTTGAAATTTTTGAAAAATCACTGGAAAACCAAAA
-ACGCGGCAAACGATTTTTTCCGGCAAATCGGCAAATTGGCAAACTGCCGG
-AATTAAAAATTTCCGGCAAATCGGCAAACCGGCAAATTGTCGAATTTGCC
-GAAAATTTCGGCAAATTGTGGTTTTGCACTTTTTTTGGAAATTTCAGAAT
-TCCAATTTCAAATTGCAAAATTAAACTCATCCTATGAATGTTTCTACATC
-TATTTTGAAAAGTAAGTAAATTCTATGAAAATATATAAGGAAAACGAGAA
-AAAATTCAAAAAGACATAGTTTTAAGTGTTTCCGTCTTATTAAAAAATCC
-CTCTAAACTTTTCCGGCAAATTGATATTCGGCAAACGGGAAATTGGCGAT
-TTGCCGGAATTGAAAAACCCGATACTTACACTTTCTTTCGCTGCAAACTT
-TGCCCTCTCATCTTGAATTGCTCCTTGCTCATTTGGCCCTTTCATGCACA
-TTTTCTCTCGATTGTTCTCCAACGGGAACTTATCACAACGAATCACATCG
-GGCCACTTGAAACCGAAACTTTCCAGCACTGGAAGACACTTTTCCTGGAC
-GGAAAGACACAATGGACGGCATGGACCAATTGGGTTGGCTAGCTGAAATT
-TTTTTGAACGATGAAATGATAAAAATGTGCGATTCTTCTCTGATTGAACT
-CACTTTCTCGTTGCACATCGGGAAGTAGACGGAGCACAGGAAGAATTTGA
-GCTGCTCGGAGCAGACAACGGAGAGCAGGGGCTTGTAGGTGAGGATGGAT
-TCGGAGGCGTCTTTCCATGATTCCTCGTCGACGAGATTTGGGAAGCTGGA
-ATAAGGGCTTGTAAAGTTTGAGAAACTTGAGATTTACAGGGTCAAAAATT
-GCTCACGAGCTCTCCCGGTTGCCGAAAAGTTGCCGAAATTTGAGCAACCA
-AAAGTTGCCGATTGCCAAAAATTGTAGGGTACGGCAACTTCGGCAATCGC
-CGGTTACCGAAGATTTTAGAGTTCGGCAACTTCGGCAATTGGCGGTTGCC
-ATTGCTCTCACGAAATTTCCCGCTATTTTTGGAGATTAAACAGCAAGTGC
-ACGTGTGGGTGTCTCAAACAGGAAAGAAATCCTGGCAGGAGCCGACTTGC
-CGGAAATTTTCAATTCCGGCAAATTGTCGGTGTGCCGATTTGCCGTTTGC
-CGGTTCTCAGATTTGCCGGAAGTGTGTAGAGGGATTTTTATAAGACGGGA
-ACACTGAAAACTGTGCCTTTTTGAATTTTTTCCCGTTTTCTTTGGATATT
-TTCATAGAATTTGCTTACTTGTCAAAATAAATGTAGGAACATTCATAGGA
-TGCGTTTAATTTTGCTATTTGAAATTGAAATTCTGAAATTTCCAAAAAAA
-TGAGTACAAAACCACAATTTGCCGGAATTTTTCAATTCCAGCAATTTGCC
-GATTTGTCGTTCTGCTGGTTTGCCGGAAATTTTCAATTCCGGCATCTTGC
-CGATTTGCCGATTTGCCGGATTGCCGAAAATTTTCAATTCGTTAGCCGTC
-CACCCTGGATCCTGCCATCCAAAAAAAAACGGAAATTTTTGGCAAATTGC
-CGTTTTTCCGCCGGCAAATTCGGCAAATCGACAATGTGCTGTTTTGCCGT
-TTTGCCGGTTTGCCGGAAATTTTCAATTCCGGCAATTTGCCGATTTGCCG
-ATTTGCCGGTTTGCCGGAAATTTTCAATTCCGGCAATTTGCCGATTTGCC
-GATTTGTCGGATTGCCGAAAATTTTCAATTCCGGCAATTTGCCGATTTGC
-CGATTTGCCGGTTTGCCGGAAATTTTCAATTTCGGCAATTTGCCAATTTG
-CCGTTTTGCCAAAAATTTTAGGGTTCGGCAAATTCGGCATTTGCCGTTTT
-GCCAAAAATTTTAGGGTTCGGCAACTTCGGCAGTTGCCGGTTTCCGCACA
-TCCCTGTCCCACACGCCCCAGGTGGAAGATGGTGGAAGAGTTTCTAGCGG
-GTCCATCAAGGATGGGAATCATCAGTCAACACAATCCTTAGCCGACCTTC
-CCAAATTCATCATTCCTTCCTTCCAAAACGGTTTCCGGTCCTTCCAACCG
-ATTAATACCAGCCACCACCACACCACCAAACCCTCTCCTTCGAAATAGAG
-AACAAAGTTGCATACCCCCCTCATTTCTTTGTTTTGGAGAAAGGGGCGTT
-TTGTGGTGCTCGGAGAGCCTGAGGACGTGACAAGTGATATATAGACGGGC
-TTATACTATCTGCTCGTCCATATTTCACGCGCCTAGGCAGAGTGCACGGC
-GGGAGGTGGAGACGCAGGTTCCCGTCCAACTGCCGCAGAGCATCCCCTAT
-CTGCTCCTATCAATTGTTCGGAGAGACTTTTTTGTGAATTTTGCTTTTTG
-CAAGAGGTCTGAGATTTGGGATTTGGGCTTTAGGCTTTAGGCTTTGGGCC
-TTGCTTTGCGCCAGAGAATGGAAATTTGTCCGTATTTTCCCGGCTTATAT
-CAAAAAATGATCAACTATAAAAATATAGAAAAAGATTTTTCAAGTTTTTT
-GTCAGTTAGTATTTTTTGATAAAACAAAAGAGAGCCGAGATATAAGCTGT
-CAAAGTAGAGCAAGGGTGGTTTGATCTACAAAAAATGTGGGGATTTTTTT
-TCAAACTTGCTCTACTGATAAATTAATAAATTACTCCCACAAAATCCAAT
-AAGCCTCAAACTTAAGATCCTCCAATCTCATCCCCCTCATAAAACAATAA
-TACTAAATCACTAGATCTCCGGTAGTATATATCAGAAGAACAGTTGCTCT
-CCCTCTCGAACCGACTTACACTTGAGAAAAATAAATTGTGGAAGAGAAGT
-GACGTCATCGTAACCTACCACTTCACAAGTTTATATATATATATATATAT
-AAGTACTAGTTAGGACTAGCTAAGACCTAATTAGAACATAGGTATGGCCT
-GTAAGTTAGGACCTAATTAGAACTCACTAGGACTATATATATATATATAT
-ATATATATATATATGTAAACAAGAACCCGGGCGGGTAACCCCTTACGGTC
-AGAGGGGTGTCCTACACCAAGGGTATGTAAACTGTGTCCCCCAGATGGCG
-AAGTTGAGAGGGAAAAAGTGAAAAAGCGCGCCACATGGCCTCGCGACCGT
-ATGTTGCAATTTCAAGCAACGTTTTTGATTTATTGGAGGAGAAATTTTGA
-AAAAGTGAAAAAAAAGTGTGACCCCATATGAGATGCGTAATAAAATTCCC
-TACAAGACCTTAAGAAAACGTGGCTGGCTGGCAAAAAACAGGTGGCAATA
-ATAACGGAATGTGTATGTGTGTGTGTGTGTGTGTGTGTGCTCGAAGAGCA
-TAGGCTCGTAAATCGTTATAATTGATGCTGGAGGAGAAGGAGACGATGGG
-CCTCCAAAGTGTTACACCTGGTATTTGTTGGGAAAAATTTGGGGGAAATA
-GGCATTAAACTACCTAACCTAATTGAGTTTTTTCAAAGCTTATATTATTA
-TAACTAAGAGGTGTGATAATAAATAATTAAAGAACTTTAAAATTATCAAA
-AACGCTTTCAAATCTGTAAAGCTGATATTTTAAGGATTTAGTACTAGTTA
-AAATCTAGTTGGGACCTAGGTAAGACTATCTAGAAAGTTCGGACGTAACT
-ATTTAGGAACAGTTAAGTCTTAAGGCCTGCTTGGGTACAGGTAAAAATGT
-TTAGAAAGTTAGGAACTAAATAGGTGAAGTAAGTACTAGTTAGGACTAGT
-TAAGACCTAATTAGAACCTAGGTAAGGCCTGTAAGTCAGGACCTAAATAG
-GACTTACTAGGACTTAGGTAAGACTAGTTAATGTCTTGTTAGGACTAGTT
-AGGACTAGCTAAGACCTAATTAGAACCTAGGTACGGCCTGTTAGGGAAGA
-TCTGATTAGGACTTACTAGGATTTAGGTAGGACTAGTTAAGATATAGTTA
-GGACTAGTTAGGACTAGTTAAAATTTAATTAGAATCTAGGTATAGCCTGT
-AAGTTAGGACCTAATTAAGACATACTAGGGCTTAAGTAGGACTAGTTAAT
-ACTAGTTAAGAACTAATTAGAACATAGGCACGGTCTGTTAGTTAAGGCCT
-AATTAGGACTCACTAGGACTTAGGCAGGGCTAGTTTAGTTATTGTTAGGA
-CTAGTTAGGACTAGTTATGTACCTAATTTGGACTCACTAGGACTTAGGAG
-GACTAGTTATAATCTTGTTAGTAATATTTAGGACTAGTTAAAATCTAATT
-AGAACCTAGATATATCCTGTAAGTTAGGACCTAATTAAGACTTGATTTGC
-TAGGATTTAGACAGGACTAGTTAAGATATTGTTTGGACTAGTTGACTAGT
-TAAGACCTAATTAGATCTTAGGTACGGCCTGTAAGTTAGGGCCTAATTAG
-GACTGAATAGGACTAAATTTCTTGTTACGAATAGTTAGGACTAGTTAGGA
-CTAGTTAAAACTTAATTAGCACCTAGGTACGGTCTGTTAGGGAATACCTA
-CTTACCAGGCCTTAGGTAGGACTAGTCATGACCTAATTAGAACCTAATTA
-GAACCTGGGCACGGCCTGTTAGGGAAGACCTAATAAGGACTTACTAGGAC
-TTTGGTAGGACTAGTTAGGACAAGTTAAGACCTAATTAGAACCTTGGTAT
-GGCCTGTAACTTAGGACCTATTTAGGACTTACTAGGACTTAGGTAGGACT
-AGTTAGGACTAGTTGGAAGTTGGGACCTAACTAGTTAGACCCTTAATTTT
-GTACACATGCTTATTAATATCAATAAAAATTTTAAAAAAAAACGACTTTT
-TTAAGTTTAACTATATAAAACTATAATTTGGAAAATTTGCTACTTTGCTT
-AAAAATCGAGAAAAAACCTAGCGTTTCTATAAAAAACCATCTTGAAGTAA
-ATTTTGAAAAAACCCCGTCATCCAACAAAAAAAAATTCACTCACCTCGTT
-AAGTTATACGGCAAATCGTTGCACATCTCATGATCCACCTTTTGACACCT
-CTGCCCGTCCACACCAATCACAAAGAGCAACAGGAGCCAGGTTACTCCGA
-GGTAACCACGAAATGGTCCCATTAATGATAATGGAATTGGGGGCTCACAG
-CCTGGGTGGGGGAAAATATTGAGAGTAAAAGAAACAATGAGAAGAAAGAC
-GGAGGATAGGCGGGGGGGGGGGGGGGGGCACACCAGTGGCAGCACCACCA
-CGGCCTGTCCGTTGACAAATGACCCAAACGGACGGGGGGCGGGAAGAGTG
-TCTGTTGTGTGTGTTGGGAGATGGCTGGCGGTTATCAGATATTTGTATGA
-ATGGTATAGAGAAACAGAGACCAAGAGAGCTGAAAGATGGAGAGGCGAAA
-GAGGAAGAGAGGGGGGGGGGTGGAAGTTTTTACGAGCCCTGTAATAAATA
-TATCGAAGCAGCAAATCATTTGATGATAACGGAGGAGCGCGGGGACGGAG
-ACGGCAATCATCATCATTATTAGGACCAGGGGTGTGCGGCGAATTTTTGC
-CGAATTTGCTGTTTGCCGAGCTCGGCAATTTACCGAATTTGCCAAGCTCG
-GCATATTTCAAAAAAGTAGATTTGCCAAATTTGCCGAACTTGGCATATTT
-CAAAAAAGTAGATTTGCCGAATTTGCCGAGCTCGGCATATTTCAAAAAAG
-TAGATTTGCTGAATTTGCCGAATTTGCCGAGTTTGCCGAGTTCGGCAAAT
-TTGCCTATTTAGCCGAGCACGGCATATTTCAAAACAGTAGATTTGCCGAA
-TTTGCCGAATTTCCCGAGCTTGGCATATTTCAAAAAAGTAGATTTGCTGA
-ACTTGCCGAGCTCGGCAAATTTGCCTATTTAGCCGAGCACGGCATAGTTC
-ACAAAAGTAGATTTGCCGAATTTCCCGAGCTTGGCATATTTCAAAAAAGT
-AGATTTGCTGAACTTGCCGAGCTCGGCATTTTTCAAAAAAGTAGATTTGC
-TGAATTTGCCGAGCTCGGAATATTTCAAAAAAGTAGATTTGCTGAACTTG
-CCGAGCTCGGCATTTTTCAAAAAAGTAGATTTGCTGAATTTGCCGAGCTC
-GGAATATTTCAAAAAAAGTAGATTTGCCGAATTTGCCAATTTTGCCGTTT
-GCCGAATTTGCCGAGTTTGCCGAGCACGGCATATTTCAAAAAAGGAGATT
-TGCCGAATTTGCCGAATTTGCCGAATGTGCCGATGCCGAGCTCCTGTTGA
-TTTTTTTCCAAAAATTCAGTAAAACGACACAAATTTGTTTTAAGAATTCA
-TTAGTTTCGGTGCTCCAAACAACATCAAAAAATATCAAATTTTTCCGAAT
-TTGTTAAGCACGGCAAATTTGCCAAATTTGCCGAATTAGCCGAGCACGGC
-TAATTTTGAGATTTGTCGCACACCCCTGATTAGGACCGAGAAAAGGGCCT
-AACATGATTTCACAATTTGAAAAATGAAATTCAATTTTTCTTGGGAAAAA
-AGTATGAATCTCTTCCTCCGCCCGTTTCCGGCAGAAACAATTGAACCAAA
-CGAGCCAAAAGTGCACATTGTGTAACTTTGTTGGGGAGTGTAGATAACCA
-GAAGAAACAAGATGGAACTTTCTTGCGATGAACAAATTTTGGAACACTGG
-AGGGAAATGATTGGTGTTTTTTAAGCTTTTTAGTCAATTTTTAAAACTGT
-TCTACAATAGGCCCAAATAGGCCTAATAGGCAAATAGGCCAAGTAGATTA
-AATATGCCAAATAGGCAGTATAGGTTGAATAGGTAAACAGGCCAAATAGG
-TCAAATAAGCTAAATAGGCGAGACTGGTGCTCAAATACTTTTTGAACTGG
-TAATGTTTTTTCTTCTACACAAAAACAAAAAAGTCCCTGCTTAGTTCCGC
-AAAATTGTGATTTTTTTCAAAAGTTACCCATTTTTGCCACTTTTCAATAG
-TTTTTGATAGGTTAAATCTAGATTTTCTGAATTCAGCATATATGAATTAC
-CCGTTTTCAACAAATTTAGGCAAATTTTTATTTTTGCCCAATTTTTTTAG
-CCATCTAATGACTGATTTTGGGCAAAAAAAATTTTCCTGAAATTGTACAA
-AACCATTAGAAATTGAAAGGCTCCTCAGTTTAAAGGCACATGAGGTTTTT
-CGGAGTGGGTGGCAATTGTCGTTCGGCAAATTTTTTGGTCGACAAATTCG
-ACAAATTGCTGGTTTGCCGATTTGCCGGAAAGTATTTTCTTACTTTTCAA
-AATATATGTACGAACATTCAGAGGATGCTTACAATTTTGCCGGATAAAAT
-TTAAATTCTGAAATTTCCAAAAAAAATGTGCAAAACCATAAATTGCCAGA
-AATTTTTAATTCCGGCAATTTGCCGATTTGCCGATTTGCCGTAAATATCA
-ATTCTGGCAAATTGAAGATTTGCCTTATTTGCCGACTTGCCGCATTCCCT
-GATGTAGGCATCAAAACGACTGAACACCAAGTTTTTTTGAAATTTTTTAA
-GTTTACCTTTATAATTTTTAGTGCTCAAAAAGTTCCAAAATTAAATAAAT
-TTTGAAATTTGCCGAGCTCGGCAAACGGCAAATTTGCCGCACACTCCTGT
-TTCAAATGTTCACCGCATATTTAATTATTCCGGAAATCCCCTCAAACATC
-CATCAAAAGTGTTTTCCCTGATTTGTTGACTCTGACACCGACGGTGGTTG
-TTCCCCCCCCCCCCCACTCTCTCAATTGGCATGTAAATGAGCCCGTATGA
-ATGAAGTGCCTTTTGGCGGCAAAATGCATATCTCCAAGTACCATTGAATT
-AATCTTCCATCCCCCATTGTCTCCTTCTATATAGGGGGGAGGATGCGTGA
-TTCTTGAAATATGCTCCAAGTGACAAATTGAGCGTGTGTGATGTATCGTG
-GCAGATGGCTGGCTGACAACGGATCAGTTCCAAAAACTGTATCAAACGGG
-GGGAAGAGAGGGGAGATGAAGGATGGGGGCAGATGGAGTCATCGATGCAC
-CATGTTTTTTGGAGCTGTTCACTCAGATATTAGGGTATTTTAATCCCCTT
-TTTAAGGTCTATTTCTGATCGTAAAACTTGGTATTTTCAACTCATTTTTA
-ACTCAAAAATTTCAAAAGTTTGAAAAATTACACAAAAACCTAAATTTTGA
-TCTGGTTTCAGGCATTTTAGTCCCTGTTAAGCGTCTTCGATGCACCATGT
-TGTTGTTCAACTTGTTTAAACTTTTTAGTTCCGCATCGAGGAAAATGGAA
-AATAAAAAATTATTTATGTATTCAAAAACCATACTTTGATTCTCCGTAAC
-AACGCTTTCATGGGAGGCAGGCCCGGTTTCAGGGCCTGACGCCTGCCTCA
-AACCTGCCGGCCTCACGCCGGCCTCACGCTTCATTTCTGCATTTTGGCGA
-AAAATCAAATACTTGGACATAGTGAAAAGGTGATTTTTTCGACGCGGCCG
-ACACTTTTCGGGTTCCGCGCCGCACTATACAGGAGGCGAGGCTCGCGGCG
-CGAGGCAGGCGGAGGTCGCCGCAAGGCAGGCGCGGCAAGCATTTTTGTGC
-TTACATGGATACCCTAGTCTACACAAAGCACGAATTTCTGGCTTCCCTCA
-TAAATTGAAATGGAAGAGTTTTTGCCGAACTAGGCCATTTTGGCTCGGCC
-ATATCTGGGGTAGATTTGCCGTCGCGTTGCGTGTCGCGTCGCGGCTCGAT
-TTTAGTTGTAAAACTAAATTTATTTGTCCGTGTGGAGTACACGACTTTCC
-CATGCGTTGTCCGGCGGGCGATTGTCAATGGAGCGCAAAAAATTCAATGA
-GAAAGGCCAGAACCCAGTGAAAAAGATAATTTGACAATTACAAATAATGT
-TTTAAAATTTTTTTTTTGTTTTTGATTTTTGGTTCTCCTTGTGTTTTAAG
-AACATGATGCATCACCGCTGGAAATTGCTGGATATGTAAAAAAATTATTT
-ATGTACATATTTAAAAATCAAATCTTGATTCTCCGGGATAGAAGCATAAA
-TCAAATTTATTACTGTAAATTTTCACTTTCAGTACATTTAATTGAAATTT
-TTAAGCTTTGAAGTTCAGGGTATCATAGTTTTGCCTCCAAAATCCACTTG
-CCCAAAAAACAAGCCTGGGAATTCCCGGCGGGGGACGATGGTTCGATAGC
-ATCAATCATATCTGTGTGTGTGTGTGTGTGTGCAAGGCGGGGGATGAGCC
-GGCGCGCGAAACGAATAAATCAAGAAACGTCTCTCTTTCTGCGAGCACGG
-ATTTTGTTGTGAGCCCGCGCGCGCGCGGTCTATAGGAGGAGAGGGGTATC
-ATGCACTTCTAATACAGGGCATACTTCTTTCATTTCCATGTTTTTGTACA
-TGTAATAAAATTGTTAATTAGCCAAAAGTGGTTCACATGTTCACGTCGTA
-AACGTCGGTTTTCAGGGTGTACTGATAATGAATGTGCTCTGTGTGGAGAC
-AAAGAGGCAGCAGAGAGCAAGAATCAGTTAGGTTAGGCAGGTGACTTTTT
-TCAATTGTGACTAGGAAAAAGTATTTTGGGAATTTTTTTTTATTTTTTGG
-CTTCTGCCCAGATTTTCAGGATTTTTCAAATATTTACAGAAATTTTCGTG
-ATTCTACAATAATATTTTTGTAATTTTCTCAATTTTCAAAAAATTGCCAA
-TTAATTTTGAAGTTTCGAATGAAGCAATTGCCGAAGTTGCCGACTCCCGG
-AAATTTCGAAAACCGGCAATTGCCGAAATTGCCCTTTGCCGGAAATTTCG
-AAAACCGGCAATTGCCGAAATTGCCCATTGCCGGAAATTTCGAAAACCGG
-CAATTGCCGAAGTTGCCGACTCCCGGAAATTTTGAAAACCGGCAATTGCC
-GAAATTGCCGACTCCCGGAAATTTTGAAAACCGGCAATTGCCGAAGTTGC
-CGACTCCCGGAAATTTTGAAAACCGGCAATTGCCGAAATTGCCGATTGCC
-GGAAATTTCGAAAACCGGCAATTGCCGAAATTGCCGCTTGCCGGAAATTT
-CGAAAACCGGCAATTGCCGAAATTGCCGATTGCCGGAAATTTTGAAAACC
-GGCAATTGCCGAAATTGCCCATTGCCGGAAATTTCGAAAACCGGCAATTG
-CCGAAATTGCCGCTTGCCGGAAATTTTGAAAACCGGCAATTGCCGAAACT
-GCCCTTTGCCGGAAATTTCGAAAACCGGCAATTGCCGAAGTTGCCGACTC
-CCGGAAATTTCGAAAACCGGCAATTGCCAAAATTGCCGATTGCCGGAAAT
-TTTGAAAACCGGCCACTGCCGAAATTGCCGACTCCCGGAAATTTCGAAAA
-CCGGCCACTGCCGAAATTGCCGACTCCCGGAAATTTCGAAAACCGGCAAT
-TGCCGAAATTGTCGATTGCCGGAAATTTCCGATCCCTGAGTTTAGCCTTT
-TTCAGCAAATCAAACAGTTTATGATTATTTTTTCAAAAATTGTTCTGCAG
-TGCTCTTGCATCACTATTGTGGCCCTCCTTTAAATACAGTACTTTCTACA
-GTACCACTACATCAATGATCCTTCCAGTAATGCCAACACATTGTACCACT
-ACAGTAATCCTACAGTACCCTATACAGTACCGTCGCAATACAATTACCGT
-AACACTATGGAAATCTTACAATAGACTACAGTATACAAAAACTACAGTAA
-CCCCCTTGAAGTTAGTGTAAAACTTGCAAATGTTCAACTCTTTTTTCTGA
-TTTTTTTTTGTTAAGTTCAGAAATTGTAGAGTGTTTTTGGCTTCTGCTCA
-GATTTTCAGAAATTTTCGTGATTCTATAGTAGTCTTTTTGTAATTTTCTC
-AATTTTCAGAAGTCTGCAAATTCAATTTGAAATTTCGAATAGCTTTAAAA
-AACTCAAACAGTTGGCACAAATTTTCGTAGATTCATGTAGAATTTCAGCC
-TTTTTCAGCAAATCAAACAGTTTTTTATTTTTTTTTGTATTTTTTCAGAA
-ATTGTTCTCACCCTCCAAAGTACTATCACGTCCTAACAGTAATATTAGCC
-TACCGTATCACTACAGTAATCCTCCAGTACTTCTGTGCATGCTACAGTAC
-CCTTGCATCACCATAGTGGTGATCCTTTAAACCTACAGTACTTCTACAGT
-AGCACTACAGTACCACTTCAACAGAATCTTTCCAGTAATATCAGCGTATC
-GTACCACTACCGTAATCCTACAGTACCGCCACAATACTATTACCGTAACA
-CTATGAAAATCTTACAATACACTACAGTATACAGAAACTACAGTAACCCC
-CTTGAAGTTGGTGTAAAACTTGCAAATGTCTACCGTAATCCTACAGTACC
-CCAATACAGTACCGCCGCAATACAGTTGGCATAACACTATGAAATCTTAC
-AGTACACTACAGTATGCAAAAACTACAGTAACCCCCTTGAAGTTGGTGTA
-AAACTTGCAAATGTTCAACTTTCTACAAATTTGCCATTAACTTGTAAGTT
-GGGGGAGCGCATCGAAGTGTATACATATATGTACATGCCAACCAATTATT
-TTCTCAAACAATTTATTAATAGTCGAAGACACCTGAAGCAACGATTAGGA
-GGAAGAAGAGGAAGGAGAGATTGGCAGAAGAAGAAGAAGAAGACGAATTA
-GTTGAAGAATCTGTTGAAACGGAAGACGTTGTTTGTGATGTCTCTAGCCG
-TGCGACAGCTTCCCGTTTCAGACGGAACGATGTTCGCACGGCGATCGGTG
-GCGAGATGTCGGACACGTCGATTGTCGACGAGAAGGGATCAGAGACGGTT
-GAAGAATGCTGAGGAGGAGGATTATGTCGACGTTCCCGTCCACGACACGC
-GGCCTGGGTACACGTGACACAGACGTGAAGGTTACAGAAGATGTTCACCT
-CGTTGCTGGAATAATAGTCGTTGAGAGGTGGGTGGTGAACATGAACAAAG
-AACTTAAGAGGCTTACCTCGTTGGGAATGCCCAGGCCTTTATGTGGTTGT
-AGAAGATGGTCTTACCATTGCGTCGAGTCACTTCAAAGTCTCCCCACACC
-TGGAACAATTTTCTATGGAAGTCTCAAATAATATGCAGTTGGTCGATGCA
-CCATGATGAATTTTGTGCCAAACATGGTGCATCGACGCTAAATAATTTTC
-TTTTGAAATTTAAAGATGTTTTGCTAGACTTTCCCTAAACATCTTTTTAG
-TTTTCCAATGTTCTCTAATATCATCATGGTGCATCGAGAAAAAATGTTAT
-AGGAGGAGTAAAGAAATTTGAGACTTTACTTTTTTAGACCAAAAATGACC
-CAAAACTACCGAATTGTTTAGTAAGACGTTTTGAAAATTTTTCAAAACAA
-AGTTATGGCGGTTCAAAGTTCTGGAAAATAGCATATTTTCAGCTAAAATC
-TAATGTTTTGGGGGCTGGGGGAGGAATAAAAATGTAATTTTTTTTGTGCC
-CCACTGCCCGAAAATGCACTTTAATCGACGAATAAACGGCTTATAAAGGG
-CCACAATATTTATAAAAGAGTGATATTATAGTTATAAATAAAAATTGAGT
-TCCCGACCGAGAAAAAAATTGGCGAAAATTTTGATTTTAGCTGAAAATGG
-GACTTTTTTTCCAAAACTTTGAGCGGCCATAACTCTTTTTTGAGAATTTT
-TCAAAACGTCTCATTTAGAAATTCGGTAGTTTTGGGTCATTTTTGATCTA
-AAAAAGTAAAGTCTCAGATTTTGATACTTTCTCGATGCACCATGATGAAG
-AGAAAAAAAGAGAAAATTTAGAAAAAAAAAAAAAGAACCCTTCCGATGTT
-TTGGGAAAGTTTAGCAAAACAATAGATTTGTAAAAAATTCAATTTCATTA
-GGTTCCTATTAAATTCTCAATTTTTATCAATGCACCATACATTTTCAGCG
-TGAAATTTTGTAAAATGCACAGGAATGAAAATTGATCAGGTGTGTATAAA
-ATAAGAAATTGAAGCATTTTGTTTTTTTTTTTGTCGATACACCATGATGA
-ATTTCACGTCAAACATGGTGCATCCTGGAAAGGAGAGAGTTTTAAAAATG
-TATCATTTTTTTCTCGATGCACCATGAAGATTTATATTAGTAGAACTTAA
-ACCGCACTTAGCATAAGTGGCATAAAAATAAAGGTGGAGTAGCGCCAGTG
-GGGATTTTGTCTAAATACACTTATTATGATCCAAAACGATCGAATATCTT
-AATGAAACACTCCAAAATATTTAAGATTTTTCAAAATTTCCGGTCAAAGT
-TTTGGCAAATTGCCAAAATATTGAAAAAAAATATGAGCTTTTGAGGAAAT
-CCAAAGCAATGTCGCGTGTTTCGACCCACACAATGTTTTTATACAATGTA
-GAAAAAAATTTTTTTTTGGTCGACTTTTAAAATTATGAGTGGCAAAAACT
-GAGTAATTGCCAATTTGACAGTAAATAAAAAATTTTCAAAAACATTTTGA
-AAAGTTTTATTATGATATTCGATTATTCTGGCACCATTTGAGTGGTTTGT
-AGTAATTTCCCCACTGGCGCTACTCCACCTTTAAAATTAAAAAAAAAATC
-ATAATGGGTATTTAATATCAATGAAAATTATCGATTTTTCCAAATGTATC
-AAAATGAGTGTTCAGCGCGAAATTTTGTGCAGGACTTTTTCTTTCAATAA
-TATATCCCGAATGATGCATTAGTTATGGGCTACACGATTTTTAGAAAAGC
-ACCTGGCCATGCTTAAAGGTGGAGAACCGAAATTTGATACTCTGTCTTTT
-TAGATCCAAAACGGTCCAAGACTACCAATATTCGTATTAACCTGTTCTGA
-AAAATTTTCAAAAAAAAAAGTTATGGCCGTTCAAAGTTTTGGAAAAATGG
-TCGATTTTTAGCTAAAATCTCAAATTTTGGCAACTTTTCAATGTCACAGC
-TGGAGCTTAATTTTAGAAACAACACGTGATAAATTGCAAAAACATGCATA
-AAAATATGTTCCAACCGCTCCGACACTAAAAAGGTGCCAAAATTTGAGAT
-TTTAGCTAAAAATCGACCATTTTTCCAAAACTTTGAGAGGTCATAATAAC
-TTTTTTTTTTGAAAAATTTTCAGAACGTCTTAATACGAAATTTGGTAGTT
-TTTGGACCATTTTGGGTCTAAAAAGGCAAAGTATCAAATTTTGGTACTCC
-ACTCACTATCGAAGCAGAGCCCCAAAAGTTTGACCGACCCAATTTTGTAA
-GTTTCTTCGATGCACCATGATGATTTTGAGCAAAATGTTAGTTTTTTTTT
-TTGAAAAACTGGTGGCAGGACCCAGTTTTCGGCAGTTTTAAATGTCGATG
-CACTATGTTTTTTTTAATGAAACCGTACCTCCCCAGAAGTCTGCAAAGAG
-CATCCGTGTGAGTCCGACAGTGGTAGCTCGGATATCCCGTCATTCGCCCA
-ACACCTTCCGATTCGTCCATTCTGATCATCGCTCATTTCAACTGTGTACG
-TCTACAATTTACAAATAGTTTCTTTTGATTTATGGAGTTCCTGACTTACA
-ACTCTATCACCAACTGCTAACGGACGTTGTAGCTGCTTTGAATCCAAACT
-GTCGCCGTCTAGAACACGAACTCGGTAGTCGACTGTCTGAAACATTATAT
-GGGTCTCGCAGCGATAATTTTGAAGCCTTACCTTATTATCCGATAGGCTG
-CTTGCTGTGGTGGCATCCGAGTTGATAGTGATTCCACCAAATGATACGGT
-CACCTGAGATTCTTTAGGAACAGGGGCAGCAGGTATACAGGTCAGAAGGA
-ATCGTTTGTCGGTTTCTGCATTGAATCTTAAAAAAAAACGATGAGGAAGT
-TATTTTTTATTTTTGTCTATTTTTGTTCGTATATGGTTTTTTAGGTACCA
-TGGAATAAAAAAAATGCTCCTAAAAAAATTAGTTTCAATAACAAATATTA
-CTGGTACAGAGAGTGTAGATAGTTAGAGAGTGACTGACATCCGGGACCCA
-ATGGGGCGGGGCGCGCGGAAGAGACGATTCGTGTCGATTTACGAAATGAT
-GACAACGAGGAAAATTTCGTAAATCGACACAAATCGTCTCTTCCGCGCGC
-CCCGCCCCATTGGGTCCCGGATGTCTGTCACTCTCTAACTATCTACACTC
-TCTGTACCGGTAATACCATAATATGATCATCATTCTACATTAGAAAAAAA
-TCGATCTGAAATCACAGATTTTTGGCCTCCCTCATAAATTGAAATGGAAG
-AGGTTGCCAAACTAGGCCATTTTGGCTCGGCCATATCTGGGGTAGATTTA
-CGGCGCGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAAAT
-GTAGTTGGCCGTGTGGAGTACACGACTTTCCCACGCGTTGCCCGACGGGC
-GATTGCCAATGGAGCGCGAGAATCTCAATGAGGAAGGCCATGGCGCGCCA
-GAACCCCATGATTTTTAGGGTATTTCGAGGTTGGCAAATATTCTGGAATC
-TTTTTGCAAAATGTTTTTTTTTTTTTGAAAAAAAAATTCCAAAAAATATC
-CTGATCGATGAAAATTGTTGGGTGAAAAAAGTTGCAGATTTTAGGAGAAA
-TTTGAGAAATTAGAAAAATTAGAAATTAGGAGAAATCAGAAAATTTCCAA
-ACTGCTTTCAGAATACTTGTATATATTGAAATAGCCTAAAAATCATGAAA
-TTTTTCAAAAATCTCTAAACTAGCCTCCAAATTTGGTAGTAAAAATTCAC
-TGGCAGCAACTTCAGAGCGAGATTTTTCTAGTTTAAAGTGCTCGTATGTC
-GCTGAATTTTTTGTAGGTACCTATTTGAAAGCTCTTTTTTCAAAATTCAA
-AAATTTAATTTTCAAGTTTAAATTTTGAGTAGCGCCAGTGGGGGATTTTG
-TCTAAATACACTTATTATGATCCAAAACTACCTGAGTAATTGCCACTTTT
-TGACAGTAAATAAAACATTTACAAAAAAAAAAAGTTTTATTATGATATTC
-GGTCACTTTGGGACCAAATGAATGGTTTTTCATAATTTCCCCACTGGCGC
-TACTCCACCTTTAAAACTGAGCGGAAATACTTTCCTTGTGAGCATAGCGG
-CAAAAAACCTAGTACCACATGGCAAAAAAAAACCCACTCATTGTTAGCCA
-TGACAACTTCGATCTCATTCTCCAAATTGCCTTCTCCGTTCTCCTTGGTC
-GAGCAGCCAGTCAGCGGAATCTAAGCAAATAATGCCCAAAAATTCAATAC
-ATTCAATAGGCAAACCTTCAACTGATATTTGGTGTCCGATTGAAGCGTGC
-CATTTGCATAGATACACTTTGGATGGCCCGCGCGACTTTGTATCGTGCCA
-CGGAAGTTTTCGTCAAACTTGATTTTCAATAGGAAATCTGTCTGCAATAT
-TGAAGACGTTTTTTTCCTTTTGGGTGGTGACCTTCAAGGTTTTGGCCTGG
-GTTTTTAATCTTCCATTAAATGCCCTTCAAATTCGCTTTTTCGAGAGTTT
-AAGAGAGTTTCTAGGCCGAGGAACTTCTTGCAGCCAAATTTCTAAACTAT
-TGTGTTTTTGCCAAAAACAATGAAACATTTTAGGTCATTTGTGACGTCAT
-ATTTTTTCCATGCAACTTTTTATTGGCTCCACACATCTTCCAAAAAGCCT
-AAGCCTGAGCCTAATCCAATGTCTAAGCTTAAGCCTAAGGTTCAGCCTAA
-GCGTACGCCTAAGCCCAAACCAAAGCCTAAGCCTAAGCCTAAGCTCAAGC
-CTAAGCCTAAGCCTAAAAAAAACCGGAAAATCCTAAGCCTAAATAGCGTC
-AGTAGCAAGCTAACGCTCGCCACTGACGCCAAACCTAAGTCTCGGCTTAA
-GCCAAAGCCTAAGCCTAAGCCTAAACCCATGATTAAGCCCAATCCTAAGC
-CTACGCCTAAGCTTGAACCTAAGCCTAAGCCTAAGCCTAAGCCTAAACCC
-AAGCCTAAAATTTCTAGGCCACCACTAATATTTTCAAAACTCGATTCTCA
-AATACTTCATTTTTTCAGGATATGAAAGTAGGACAGAAATGGGCAGGGTA
-TATGGTATGGAGCAAATATCACAAGATGGCAGAAACATAGATACGGGGTG
-GGAGTGTTGGACTAGGTGACTTTTCTAGGCCATCCCTACCTTATCACACG
-CAATAGAAGTGTCCACAATGGCCACCGATCGAATCAGCGGTGGCAGCACC
-ACAACCACCGACCAAATGATCCAGTGCAGAATCATAAATTTGTGGAGGGA
-AAAATCGATAACAGTAGTGAGGGTAATAGTAGTAATAATACAAATATATA
-TGGAAAAATGAATACAAAAAGATGTGTGCGCTGGTTGGGGTGGTGGCGTA
-AGAATACAGGTGGGTGGGGGGTATAATTGGAGCGTGGCCGAGGAGGAGAA
-TCGCAAAAAAAAGAAGGAAAGAAAGAGGATAGTAATGACATGTTACGGTA
-GAAGGACAACTACCTAATTATATGAAAGAGGGGGGGGGGGCGACGAGAAG
-AGGAAAAAGTCTTACGCAATTTGCTACTCGACTTTCAATTTCTGCTAGAA
-ATCGAAAAAAAAATAGGAAACAAATTCCGACTCTATTCGATATCATCACT
-TCCGGGGCACGGCACAGGTCGGATCAGATTCAACGACGTCTCGCGATCCC
-GACCCTCTGATCTTACGGCCATCCCATTGTTCACATGATAGTCGATGAGC
-TCGGAGATGTTGCTGAACGTGCGATCGCGGGTTCGGACTCTCTGGAATTT
-TGAGAGGTTTGAAGGTTTGGCGGGGGGGGGGGGGGAGGGTCTTACGTTGT
-GATTGTCCAGTAGGATGAGATGTTTGTGCTCGTTTTCAGCGGTTCGGCCA
-CTCAGCACGTACTTGCCGGGCGTGTGGTCGCTTTGTCTGCAAGGAACTGG
-ACAAGTTTGAGCGGCCGACAGCTTGCGGGTCTTTTTTTAGAGAAGGGGGA
-CTGTGAGGTGTCCGCTGCTTCAGACAATCTTAGCATCATGCAAACCTTGC
-ATCTTTTGTATTTCAGGAAAAAAAACGCAGAATTTTTTTTGAACAAAAAT
-TTCAGCCTAAAACAAAAATCTAAAAAAATTTTGGGAGGATGAACTTATTA
-TACCAAATTTTTCCCTGGTCTTTCAAGAATTATTTAAAGTCCCGTGGCTT
-CTGAACATATTATCAAACAAATTACAGATATGAAATGTGACTGAAGCTTT
-AAGTCAGAAATATATAAAAAAAGGATTTTTCATACTATTTTTTCAGTCAA
-ATTTGATTTTTTTAGACTTTCAGATTTTTCTACGAAGTCTGTTAAAATAG
-GCTTATATTAAAAAGCTATCCGATTTACTATTAGTAAAAAATTATAGCGA
-CCGACATCTCGCAGGTTGTTAAAGAAAGGTGCATTGACCGGCTCACGCAA
-CTTTGGCAGTTTATATCTCGGCTGGTTTTGGTTTTATTTAAAAAATTTCA
-ATTGACGAAATATTTATCACTTTTTCTACTAAAAGTTTGCAGTTGAACAC
-TTTTTGCTAGCAGCGATATTAACCGAGATATTAGCGGAAAAAGTTACATG
-AGAAACATGGTGCATCGACAAGAAATATCTCACAAAACTTTGGCAGGTTA
-TATCTCGGCTGGTTGTGGTTTTATTAAAAAATTGTTAATTAACAAAATGT
-TTATCCTTTTTTCTACTACAACTTTGCAGTTCAACACTTTTTGCTAGCAG
-CGATATAAACTGAGATATGATTGGAAAAAGTTACATGAGAAACATGGTGC
-ATCGACAAGAAATATCTCACAAAACTTTGGCAGGTTATATCTCGGCTGGT
-TGTGGTTTTATTGAAAAATTGTTAATTGACAAAATATTTATCCTTTTTTC
-TTCTACAACTTTGCAGATGAACACTTTTTGCTAGCAGCGATATAAACCGA
-GATATGATTGGAAAAAGTTACATGGAAGACATGATGCATTGATCAGCTAT
-CATAGCTCATATTTTACTTATCTCAGGTTTTACCAAAAAATTGCCAATTA
-TTAAAACATTAGCCTTTTTCTTCGAAAATCAAATTTTGCCCGAATTGCCG
-AAAATATAGATTTGATATTTTTTTGTAGATTTAGGAGCCTAAACATTTTT
-TAATTTTTTAAGTATTGACCGTTTGCTTTTAAAAATGACTAATCGAATAC
-TGAAAACACAGTTAACTTTTTTTTCAATTTTCGAATTATAATTAGGTTTG
-AAAATTGCCGAAAATGTCGGCATTCAGTTGGAATTTTGGCAATTGCCGAA
-AATTTCCGATTCCCACGCGCCCCTGGTGTGAACCTAGTGAGCATGAAGCC
-AAACGTTTTAGAAATTCAGCAAAATTCTAGCTTTTTTCTATAAAAAATCT
-AAAAAACCTTACCGAACCAAAAAATCGCCTTCCGTCTTCAACAAAGCCTG
-TGCATCCTCTCTGGATAAATTTCCATGATACCAAACTTTCCCCACAACAT
-CCTCAGTTACAGTAGGTGCTCGGCAATTCGACACAAATGACTGTCGATGC
-AGGGAACTTCGATGTCTCATCGGCGGCGCCGGCACCGTAAATCCATCGTT
-AGAAGTTGAAGCATTCGCCTGTGCATCAAAAGTGTTCACATTGATCGCAG
-TGGTAAGGACGTCGATGAGCTTGTGCACATCCTCGATGAACACCACGTGG
-CATCGACGATCCGTTCCATCCTTGTTTTTTGCAATGTAGCCGAACATTAG
-CTCCGTGTCCGTACCCTTTTGGCCTTGGGCTCCGAATGAGAAGAATGAGA
-AGGGATGACGTTGAATTAGACGACTTTGTTTTATGATTTTGATCATTTTC
-GAGGAAATGTTGATGTCTACGGGGAAGTTTTCTTTTTTCACTTCACCGAT
-TACCTGAAAATAAGGATGGTTTACCTGGGCTTTTTCATCGACCCGTGAAG
-TGTCGGCTGCAATAATTTTAGTCGAAATTAGTGATAATAACTTTTCTATG
-AATAGCGGCTGACATCATTTAGCGCGATTTTTGATCGACCTGTAAGATGT
-CGGTTGCTTTAGTACATTCTATAGTGGCAGGCTTTTGGCTGAATTTTACT
-GGATATATAAGCTATCAAAATTTGAGCATGTCGATGCACCATGTAATTAT
-CTCAGTTTATTTCGCTGCTATCAAAAAGTGTTAAAATGCAAAGTTGTAGT
-AGAAAAAACGATAAATATTTTGTCAATTGACACTTTTTCAAAAAAAAACC
-AAAACCAGCAGAGATATAAGTAGTCAAAGTTGAGTCAGATATTTCCAGTC
-GATGCACCATGTAACCTTTCTCTAATAACCTGTGAGATGTCGGTTGCTAT
-AATTTTTTAGTCATTAATTTGGACAGCTTGTTAATTTGAAATAATTCTTG
-ATGATATCGTAGCGCGGCCGACATTTCACGGGTCCTTTTTTTTAAACATT
-TTGCAAAGCTGGTCATGCATTTTTGGTAACACTTAATATCAAATTAATGA
-GAAAATGTTTTGTAAATTTTTACCATTAGCCATGCCCAGAAAATGGCAAG
-TTTTTTATTTTATTTTCTTTTGTTTTTTTAATTCACAAAAAAAAACTCAC
-CCTACTAACAACTGGATTGATTTCTCGAGCCGCAGTCACGCCAACAGTAG
-CTGCAACGTGTTGTATACATTCTCTGAAAATTGAACAGTTACTTTATTAC
-GTAGATTTTTTATATATTTGAGCTTGCAGATGTTACCTGCCTTCATGCCT
-GCCTACCGCCTGATTTCTAAATTTTTGAATAAGATTTTTTTTTGATTTTA
-AGCCATAAGAAAAACTAACGAAACAACTTGAACTCTCATCTCGGAAACCA
-TCACGTTAATTGACTCGACTACTGGAACACTTCCGAGGTACTGAAAGACA
-ATTTTATATTTTCGGGGAAAAAACTAATAAAAAACTCACAGTAGCCGACA
-GAGAAACCCCGCTGCTCCGCAGCTCCTCTGCAAATGAGGGCTCCACGTTG
-AGCATCGCCGCAAGTTGATTTTTCGACGGAATTTTTGATTATTTTTAGAA
-AAAATCTAACTCGAAATTCGTTACAACCGAAATTTTGCAAGATTGAGTGA
-ATGAGGAATGACCGGGAGAGAAACGGAGACGCAGGCGGTGAGCGGAGTGG
-GAGAGAGAGCGCGCGAGACGGAGAGGCGCAGGCAGTGGTAGGGAGGAGAC
-AGGGAAAGATTAGATTGGTGTTGACTGGGTGAGTCAGCATTCTAATAAGT
-TAAGTTGACTCATAACTTTGTTTTTTGATCAGAGGGGGGGGGGGGGGGCC
-GTGGCCTAGAAATATCATTGCCTACTTATTACGTCACTAATGGTCTAGGA
-AACCTTGATAGCTTTTTTGGAGAAGATATGACGTCATTGGTGGACTAGAA
-ATCTTATTTTAGTTCTGGAAGAGAAATATTTTGACCGTGGAAGACAAATT
-AATGATGTGACCGGTGGCCTAGAAGTTTCAAATTATACCTGGGGAAATAA
-ATGACGCCACTGGTGGCCTAGAAAACTTAAACTATGCCTGAAGACGTCAC
-CGGTGACCTAGAAATTTAATTCTGGCGACGTCATAGAAATTTGAATTTTG
-ATGAGAAATATAATTTTATTGGTTTTCTGAAAATTGAATTTTATTGATTT
-TTTGGCAACCGGGAAATTGGAAAATTTAATAAATTGAACAAATGCAATAA
-AATAAGCAGTTTTTCAACAGTCATTACTTTTTTCCGTGAACCGTTTTGAT
-TTTAATTTGTAAATCTAGGTCGGAAAAGTCACACACACCGAGGAGCTAGG
-CTTCCCTCATCCTCCCTGGATCAGTCGGTAACTGCTTCGACTGGGGAGTG
-GGAGTGGGAGGGGTGGGATGAGTTCAATTCTTCTGGAATTCCATAATTTT
-TATTTTTGTTTTTTTGCGCCTACATATACCTGTGAAAATTGGAACTCGAC
-ACAAAAACCTCTCTAGCGCGGCTTAAATTTACTTCAATTCTTCCGGAATT
-CCATAATTTTTATTTTTGTTTTTTTGCGCCTACATATACCTGTGAAAATT
-GGAACTCGACACAAAAACCTCTCTAGCGCGGCTTAAATTTACTTCAATTC
-TTCCGGAATTCCATAATTTTTATTTTTGTTTTTTTGCGCCTACATATACC
-TGTGAAAATTGGAACTCGACACAAAAACCTCTCTAGCGCGGCTTAAATTT
-ACTTTCCTGTCCCAAAAACTCATCTATAATATTTTTAAAAAATCTAGAAT
-CCAAATCTATCAGATTTTTTTGAATTTTTGATTTTTTTCACATCGAGATT
-CGGAATCAGCGGAAAATTTGGAGTCAATTAAAAATATTTTCCAGATTTCG
-ATACTCCACATTTAAAGGAGATCACCTGAAACGCCAGAATATGATACTTC
-ATACTCTCCATCTTCTCGCTTTTGAAAATAATCAAAAAAAATAGTCGCCG
-TATTTATTGATATAGAAAAAATACCAACAAAATTGTAACTATTGATTAGC
-CATACAGGGTCTTTAAAGTCAACATTCATAGTGGGAGCTGGAAATAAAAA
-TATATAATAACTTGTTAAAAGAATTTATTGTGGAGTTATAACACCTATAG
-ACAATTAAAATCACCTGCTGCCTAAAGAGTATTTACCAGAAGCAAAGGTT
-TTCTGAATTTAGTGGAGTTTGTCCATTTACTTTTTTGCATGTTATTGAAT
-TGAAATGATACATAGTGAAACTAGAGGTAAAATTATTTACTAGGTTTAGG
-CTTAGGCTCAGGATTAGGCTTAAGCTTAGGCTTAGTTTTAGGTTTAAGCT
-TAGGCTTAGAATTACCGATAACTGATAACTTTTGCAAATTTAGTTTCTGT
-AATATCGGCAATAGCCAAAATTGCCGGAAATTTCTGCGATTCGAATAAAT
-AAATTGAAATAAAAATTAGTTCCTAAGATACATGTTATCTTTTTGCAGGA
-AAGTAGTAAACTCATGAAATGAGAAATTGCGATGAGGAAGGAAACATTCC
-TATGGTTCCTTAGACAATTTCTCACCTTACATTAGTATATAATATATAAA
-TGATGAATTTGACTTTTTGAAATTCTCTTCAATAAATACATTTAGTTGTT
-TTTTTTTTAATGAGTAAAGTTGCAGAGTGTGGAATTTGCTATGAGGAATA
-TGGTGAATATTGTTGGAAATTTTTCTGAAAGTTTTCATTTTTTTTGGAAA
-TTTAGAGAGTTGGGTGTAATTACTGAAAATTATGTTTTAAAAAAATTATT
-TTAATGATTTTTCAAATTTTACAAAAAACTCATTTTTAAATCATTAGAGG
-TGAAGTAGCGCCAGTGGGAAGATTGTTAAGATCCACTCCTTTAATCCGAA
-AAGTACCGAATATCATAATAAAACTTTTCAAAAGTTTTTAGAAACTTTTT
-TATTTACTGTCAAAAAGTGACAACCACTCAGTTTTTGCCACTCATAATTT
-TGGAAGTCGACCAAAAAAAAAATTTGTTTTCCTACATTTTTTATACTTCA
-ATTTTGTTTTAATTATTTGTATTGAAAAATTGTAGGGGTCGAAACATGCG
-ACAATCCTGTCAGTTTTCAAAAATCTCTACTTACAAAATATAGGACACGC
-TCCAAAAATGGATGTTTTTACAGACAACGCCATCCGAATCCCTTGCATCG
-GCACATGCGGTCATACGTTATGTGACAGTTGTCGTGAGAAAATTAGAGAT
-AAAAAATGTCCTCAGTGTAATCAGAAAGGCGCATTTGTTGTGAAAAATGT
-GAATAAACAATTTTGGGATTTAATTGTTTTTTCGCAATTTTTAAAACCCC
-AGGAAGTGGAAGTTGAGGAGACTGAAGAGGTTGGTTAGAACTTTTTTTTT
-GGATTTTTCGGTATTTCCGGGAGGTTATCCTTTGGGCCTAAAACTAGGCC
-TAAGAGTAGGCCTAAGCCTAAGCCTAAAACTAAGCCTTAGCCTAAAACTA
-AGCATGAGCCTGAGCCTAAGCCTAAGTCAAGCCTAAGCCTAAGTCTGCTG
-CTATCAAAAAGTGTTAAAATGCAAAGTTGTAGTAGAAAAAACGATAAATA
-TTTTGTCAATTGACACTTTTTCAAAAAAAAACCAAAACCAGCAGAGATAT
-AAGTAGTCAAAGTTGAGTCAGATATTTCCGGTCGATGCACCATGTAACCT
-TTCTCTAACAACCTGTGAGATGTCGGTTGCTATAATTTTTTAGTCATTAA
-TTTGGACAGCTTGTTAATTTGAAATAATTCTTGAAGATATCGTAGCGCGG
-CCGACATTTCACGGGTCCTTTTTTTTTAACATTTTGCAAAGCTGGTCATG
-CATTTTTGGTAACACTTAATATCAAATTAATGAGAAAATGTTTTGTAAAT
-TTTTACCATTAGCCATGCCCAGAAAATGGCAAGTTTTTTATTTTATTTTC
-TTTTGTTTTTTTAATTCACAAAAAAAAACTCACCCTACTAACAACTGGAT
-TGATTTCTCGAGCCGCAGTCACGCCAACAGTAGCTGCAACGTGTTGTATA
-CATTCTCTGAAAATTGAACAGTTACTTTATTACGTAGATTTTTTATATAT
-TTGAGCTTGCGATTGTGTAATCAAAAATAAACATTTGAAGCATGATACGA
-AATATTTGAACGATTTTTTTTCGGAAAATCAATAAATGAAAATGGAGTTT
-TTTTTTTGGATTTTAGCAAACTTCCCAAATGACGGAAAGATCATATGAAG
-CGATTATTTTTTCTTTTATAAACCTGTTCAGGATTTGCATTATTATGAGA
-AAATCCTAGGCCAATTAGGCTAGCATGTACGGAAGTATTTTTTAAAAATT
-TATAAAAGTAATGAAAAGCTGATATTTTCAAAATTCCAGAATGACGGAAA
-AATCATATGAAATGCTTTTTTTTTCTTTTTTAAACCTATTTAGAATTGTC
-AAAACTACCAGAAAATACTAAACAAAATAGCTTAGCTTGACCGGAAATAT
-TTTTAAAAAATTGATAAAAATAATGAAAAGCTGATATTTTCAAAATTCCA
-GAATGACGGAAAAATCATATGAAGCGATTCTTTTTTCTTTTATAAACCTC
-TTTAGAATTGTCAAAACTACCAGAAAATACTAAACAAAGTAGGTTAGCTT
-AACCGGAAGTAATTTTTACAAATTGATAAAAATAATAAAAAGATGATTTT
-TTCAAAATTCCAAAATGACTGAAAAATCATATGAAGCGATTCGTTTTTCT
-TTCATAAAATAGTTTAGAATTGGAATAATGATCAGAAAATACTAAACAAA
-GTAGGTTAGCTTGACCGGAAGTATTTTTAAAAAATTGATTAAAAAAACTG
-ATTTTTAAAAAATTCCAGAATGACGGAAAAATCATATGAAGCGATTCTTT
-TTTCTTTTATAAAGTAGTTCAGAATTAGCATTATTATGAGAAAATCCTAG
-GCGAATAAGGCTAGCATGTACGAAAGTATTATTTAAAAATTTATAAAAGT
-AATGAAAAGCTGATTTTTTAAAAATTCCAGAATGACGGAAAAATCATATG
-AAGCGATTCTTTTTTCTTTTATAAACCTGTTCAGAATTGTCAAAACTATT
-AGAAAATACTGAACAAAATAGGTTAGTCCTAGGAAAGACTAGTTAGGAAA
-GAATTCTTAAAATAGGAAGTTGAACAGAAAATCTGGAAGATCTGAAATCT
-GGAAAAAGGAACTCTCAAAAATTCAAATTTTGATTTTAGGAATATATGGC
-TGTGTAGTCTTCATAGACAATCAAAATAAATTATTTTAATTTTCAACCAT
-CTTTATGCACGGGCTTCTGTCCTTCCTCATTGAATTTTTCGCGCTCCATT
-GACAATCGCCTGCCGGACAACGCGTGGGAAAGTCGTGTACTGCACACGGA
-CAAATACATTTAGTTTTACAACTGAAATCGAGCCGCGACGCGACACGCAA
-CGCGCCGTAAATCTACCCCAGATAAAGCCGAGCGAAATGACCTAGTTCGG
-CAAACTCTTCCATTTCAATTTATGAGGAAAGCCAGAAACCCGTTTTTATG
-TAAAAGTTCATACTGTGCAGTTAATTTAAACAAATCAAAATTTGGAAAAT
-GATTTTTGGCTTTGTGCAAACTGTAGCGTTTTAGGCGTTAAAAATCTGCC
-AATGAATAAAAAATTTCTTATAAAATTTTTAAAAAAACAGTTATTTGCCC
-ATTCCGTTTTTCAACATTTATCAATTACGGTTCCAGTGATCAAATGCTTA
-CACGGAAGTCACTGATGACGTTGACTCCATGTTTGGTTGCGATGTGAAAA
-AGGTCGTTTTTTGCCCAAATCGAGAAAGGTCACACACACACATAGACATA
-CACAAAACCTTATATAATTTGTAAGATATTTTGTTTGATTCGAGAAAAAA
-AAGAGAACAGGTATTCCTGCGGCGTCGTTTTTCTAAACGGCAGGAAAAAT
-TGAGAGAAAGAAAGAGAAAGAAAAAAGATGGAAAAAAACAGTTTAAATAT
-AATTATTAGGTTTAATTATTAGGGGTGCACCATATTGTCGTAGGGGCCCT
-TCTCCAAAGTTTTAAGTTTATCGATAGAGCGTGAATACATAAAGAGAGAA
-ATTTGACCTGCAAAAAAAATATATGGTTGGTTCCCATGCCATAAAAAATC
-CATGCAACAAATGAAAACAACACCTGCCAAGTGTCCTCCGCCAGTCTAAC
-CAAGTTTTTCCCTCCAAATGTTCCGTGACATTGTTGTTTAAGGCTTTGTA
-CTTTCCGCAGCCGTCTTATTCTTCCCGAAGTGTTCTCCCTAGATAATCGG
-GTTTTTTTGTTGAATCGGCTGGGGGTAATGATCGGAGAAGATATATATGA
-AATAAATGAATAAAAAAGGAACACCTTTTGGAGAGGCAATGAAAAAGCAA
-GCTATGCAAAGTATTGATCCGTTGTTATGAATGGGCTTGCTTAGGCTTAG
-GTTTTTTTTAGGTTTAGGCTTAGGCTTAGGCTTAGGCTTAAGCTTAGGCT
-TAGGCTTAGGCTTAGGCTTAGGCTCAGGTTTAGGCTTAGGCTTAGGCTTA
-GGCTAAATCTAGGCTTTGGCTTAGGCTCAGGCTTGTGCTTAGGCTTAGAC
-TTAGGCTTAAGCGTAGGCTTAGGCTTAGGTTAGGCTTAAGCTTAGACTTA
-GACTTAGACTTAGGCTTAGGCTTAGGCTTAGGCTTAGGTTTAGGCTTAAG
-CATATACCTAGGCTTAGCCTTAGGCTTAGTCTTAGGCTTAGGCATATGTT
-TAGGCTTATGCTTTGGCTTAGGCTTAGACCGTGTGTATATCCGAATGTGT
-GTTTTATTATGTTCCTGATTCTGAAATCATTTGTTAGTTTAATATCTACA
-AACATTCCAAACAGTCTGTATGTGCTGCCAGGTGGCATTTCCTTAATCAT
-CTCAAATATATTTGGTTTCATTTCCCCCCATCGCAAAATCCCTTTCTTTA
-CCTGTCATTTCGCCTTTACGTTCAACTTATTTGATTTTGTTGTTTTCAAG
-TGATAATCACGATTAAACAACGAATGAAAAAAATAGGTATGGAATTACTA
-CGGTATTCTTTTTTGCCTATCCTTCTTTCTCTCATTTTCCTTTTGTCTTC
-TAACAAGTTCTGCACTTTTGAGGTACATTTCTTCTCCGATTTGATCAGTC
-AAAGCTATTCGGTTTAAACCATCTTCTATTCAATTCTGATGATTACTGTT
-AGGAACGAGTGGTCACTTAATTCAAAAGGTCGAACTGTTGTACTAATTGA
-ATTGGAAAATTTGTAGGTTATTTGACGTTTATCAGAAATTGAAGATTTGA
-TATAAAATTTGGTAAAAATGAAAAATAAAGTTTCATTTAGAGTAGTATTC
-TGGCTTCCCTTATAAATTGAAATGGAAGAGTTGGCCATATTGGTTCGGCC
-ATATCTGGGGTAGATTTACGGTGCGTTGCGTGTCGCGTCGCGGCTCGATT
-TTAGTTGTAAAACTAAATGTATTTGTCCGTGCGGAGTACACGACTTTCCC
-ACGCGTGGTCCGGAAGGCGATTGTCAATGGAGCGCGAAAAATTCAATGAA
-GAAGGCCAGAACTTCGTGTAGTATTAGCAGACCAGGTTTTCACATAAATT
-TGAGCGGTGAAACTAAAATTATGACATTTTTACGCAACTTTATGGGCCAG
-AAAATTTTTTTTGGAATTTTTTTTTGAAAAAAATTCAAAAATTTTGATAA
-AAATAATTGCCAAAAAGACAAATTTTGAGTAATTTTACTGCCTCTAAGAG
-TAATGAACAAATGTTTCCAACTTTTTGCAAATTACTTTCTTAGTTCCCTT
-GCAAATCTATATAGATTGAATTTGGCCTAAAACCTAACAATTTAGCTGCA
-ATATTGTTACAAAAATTTGGGTACAATAGTGTGTTTATTGAAACATGTGT
-TCTTGAAGTTGGGTAAGAACAATTGATGAAGGTTGTACCAAATGAACAAA
-AAATGTTTTTAGAGAAAGTCTGAAACATTACCTTATTTCTGATGGTCGTT
-AATCAAATTTTACTGTAACTGTTATGAAACCTTGGGCATCGTATTTTCTC
-TATTAGTGCAGCCGACCACTTTACTTTGAGACGTTATATCTTGTTTATTT
-TAAAGATCTCAATATTTTAATAACTACAAAATCATAGAAAAAGAACCAAC
-AAAAATTTTGTTAGTTGACAATTTTTAAATAGGACAAACGATAACTGAGC
-TATGAGCTGTCAAAGTTGAACAATGGTGGTGCAATAGAAGGAACTAATAG
-AAAAAATACGGTAACCTAAATTTTTATGTTAAAATAAGAAGTAGCGGGTT
-GATTCCAGAAGTTTTTTTTATAAGGTAACCATCCGCTGACCGCGCCTCCG
-GTATCCCTTCAAAAGGCAAAAAGTAAACTTTTCTAAAACTACAGTAATCC
-TACAGTAGTCCTACAGTACACCTACAGTACCTCTACAGTATCTTGACGTG
-ATCCTCTACCTACTCCCAACCCAGTACCTCTTCAAAGGCTAAAAAGTCAA
-AATTTCACAAACTACAGTAATCTTACCGTACTCCTACAGTAACCCTACTG
-AACCATTACAGTAATTTGACATTATTCGCCACCAACTCCAAACCCAATAC
-CTCTTCAAAAGCTAAAAAGTCAAAAGTTCACAAACTACAGTAATCCTACC
-GTACTCCTACAGTACTCATACAGTACTACTACAGCACCCCGAACATATCC
-CTCCACTAACCCCAAGTCAATATCACTTTAAATGACGAAAAGTCAATTTT
-TCCAAAACTACAGTAATCCTACAGAACTCCTACAGTACCCCTACAGTACT
-ACTACAGTACCCTGACTATGTCTTCCACTAACTCCAAACCAATATCCCTT
-CAAAAGACGAAAAGTTAATTTTTTCAAAACTACAGTTATCCTACAGTACT
-CCTACAGTACCCCTACAGTACTACTACAGTACCCTGACTATGTCCTCCAC
-TAACTTCAAACCAATATCCCTTCAAAAGACGAAAAGTCAATTTTTCTTTT
-TTTTAATTGAAATTGTCCGTTATTCCCTATTATGTAATTTTCCAAAAATG
-CTGCCAACCTCAAAAACTGTTATGTTTTTGTTCATACACATTTAGCCACC
-ACCTGCATATGACCCATAAAAAACCATACTTGACACCTGACATACTTGGT
-TTCGATACAAAAATCGAGAACATTTGGCAAACCTGAGTTGTCATTCTATT
-GGCTATTCACCATGTGCTCTAATAAAGTAGAACTTGGGAATATGTGTCAA
-GGCTGTAAATGGGGGAGTAGTATTGTTAACATATGTACTGTGCAATATTC
-CAGATGCCAAGTATACAGATTATCTAATGACAATAGGTAATTTGATTTTT
-CAGGTGCTATAGTGCTATATTGTTCCAAATACATGATTTTTTTTTAGAAA
-ATTGAGGTGTGGTGTCGAATGTCCCATAATTTTGGATAATCAATGGTCTT
-TAGCGAAATCCTAATTTGAAGCCGTTTAAAGCTCGAAAGTGCAATACATT
-TACAACTGCATTAGCGTTTTATTTTGCTCTGAAAATGACAAATACACAAA
-ATTTTGGATTAAACCGCCTGGTTTTAAAACCGAGCTTAAACAATTTTAAT
-TTTACAAATTAAAAAGTAAAAATTTTCTAAATTCCCTACACTAAAATTTA
-GCGTCCACATCACTTTCTACCCCTTAATTAATTTTTTACTACATTTAACA
-AAAATATTTTGAACCGGCAATTGTCAAAATTGCCTATTCCCAAAAATTTC
-CAAAACCGGCAATTGCCAAAAATTTTCAAAGCCGGCAATTGTCAAAATGG
-CAGCAAACTTCCAAAACCGGCAATTGCAGAAATTGCCTATTGCCAAAAAT
-TTCCAAAACCGGCAGTTGCCGAAATTGCCGAAACTGCCGCAAACTCCCAA
-GACCGGCAATTGCCGAAATTGCCGGTTGCCGAAAATTTTCGAAACCGGCA
-GTTGCCAAAATTGCCGCAAACTTCCAAAACCGGCAATAGCCTAAATTGCC
-GATTGCCAAAAACTTCCAAAACCGGCAATTGCCGAAATTGCCGATTGCCA
-AAAATTTTCAAAAAAATTTCAGAAATTGATACATTTTTTAATTGTTGTGG
-GAATTTTTTTTAATAAATTTGAAACATATCACATCCTCCTGTTTTCAAGA
-AAATTAATTCCTTCAGTTTCTGACGACTCAAATCCTCCTCAAATGCCAAA
-TTTATTTTGGGAAACTATACCAATTCTCAACAGAATTTTAAAGGTGGAGT
-ATTGCCATTTTGTCTAAGTACACTTATAATAATCCAAAACAACCGAATAT
-CATAGAAAAACACTCGAAAAAAAATTTTTTTGGTCGACTTCCAAAATTAT
-GAGTGGCAAAAACTGTGTAATTGCCACTTTTTGACAGTAAATTAAAAAAT
-TTCAAAAAAATTTTGGAACGTTTTATTATGATATTCGGTTATTTTGGGAC
-CAAGTAAGTGGTTTACTCCACCTTTAAAAATTTAGCCGTTATACAAACTC
-CAAATATATCCATTATTCTTTCCCCTATACCCTACCCATAACAAAACAGA
-AAAATTTCAAATTCGCATCGTCGCAACACCACAGCATGTCCATTTGGAGT
-GATGTTCCGAGAGAAAGGTCAAATCGTCTACCTCCTTATTCTAACCATCT
-CTATGCCTATATATGAGGCTTTAATGAACGAGCGCCGCCGCCGCGCGCCT
-AGCGCCTCCGAGTGTCGCAAAGTGCAACTTGTTTGCCACTTAACCTGAAT
-TCTACTGTGTTGTATTATGTGAAGAATCGGATAGATGTAATGTGTAACAA
-TAAAAAACCACGACGACGACTGAATATGGAATCGGCTAGGTGGTGCAAAA
-GTTTCGGAAAGTTTTGGTACCATGGTACCTGTGTAAGCTCTGTGAATTTT
-TGAGCCACGATGGGTCTTGCAACGATATTTCGTCGAAACTTTATTCTCGA
-AAGTTTGTTCAATTTAAATTTTCCGCAAAAAACATTTTTTGAAAATATTT
-TTAAAAATTTGAATTTCTCAGCATTTTTTTTTTAATATGAAGTTTCCAAT
-CCCTCAAAAAAAAATTTCAGAGAACATTTGAATTTCCCGGAAACCCCAAT
-TTCTGAGAATTTTTCAATTTCCCTTTAAAATAAAATTTCGGAGAAAATTT
-GAAATTCCCGCCAAAAATTTATTTTGAAATATTTGAATTTCCCGGCAAAT
-ATTTTTTTTTTTGAAAACTTTGATTTAACGGAAAACCCATTTTCTGAGAA
-TTTTTGAATTTCCAGTTTAAAGAAATTTCCACGGGTTTCTGGCTTCCCTC
-ATAATTTGAAATGGAAGAGTTTGCCAAACTAGGAAATTTTGGTTCGGCCA
-TATCTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTCGTTTT
-TAGTTTTAAAACTAAATGTATTTGTCCGTGTGGAGTACACGACTTTCCCA
-CGCGTTGTCCGGCAGGCGATTATCAATGGAGCGCGAAAAATTCAATGAGA
-GGAGGCCAGAACCCCGTGAATTCCAGCAAAAAACTTTTTGAAACTATTTG
-AAATTCCCACAAAAAAACAGTTTTGCTGAGAATGTTTGAATTTCCCCCAA
-AAATTTGACGGAATACTTGAAATTCAAAAAATGTTGTGAGAATATTTGAA
-TTTCACGGAAAACCTGTTTTCTGAGAGTTTTTGAAAATCCCTCAAAAAAA
-ATTTCGGAGAAAATTTGAATTTCCCTCAAAAAATTTCGAGAAATATTTTA
-AATTACCGGCATATTTGACATTTTGAACTCCCCACAAAAAAATTTTTAAA
-AATATTCGAAATCCCGGAATAATTTTTTTCACTATAGTCAGAAAAGATCA
-ACTGACTAACTTTTCACAAACTACAGTACCCCGAGCATAACCCCCATTAG
-TTTCCGATAGCTACAGTAATCCTACAGTACTCCTACAGTCCCCCTTCATA
-ACGTTACCCTGATTACTAAAAAATGCCCTTTTAATGCGTATTATCACATC
-TCACATGATTAAGACCAAAAGGGGTGTCCTTCAGATAAATACCCGTTCAA
-TTTTTTTTACTGCAAACCAGTAGACTTATCTTTTAGGTTATGAAGAGAAG
-ACTAAGTGTAAACAAGGTCGTTGGAAGTGATATGTTAAGAAGTTAACGGC
-AAAATCGATGCCAAAACTTTCTGAGCTTTGACTTCTACTGCTCAGCTCAT
-TCCATAACCATGAGCTCATCAACTTGCCCTCCCCCCCCCCCCACTATCTT
-CCACCACACTTTCATTCCTCATTGTCGCAACAAACCCATCTCCGGATTCG
-TCCTTTATATGTGTCACAACACAGGAGTACTCCTTAGCGCGCCAACTTGT
-AATACCCCCAGCGACTTGGCCCAGAAACTTTCCTCTAATCGCATCCACAA
-TATGGTCTGCAAGTACAAGATTAGCACCCCCCATTGTATGTCAATTTGTC
-TAGTTTTTTATTCCATTGAACTATTCCACAATGTAGAAAATTGGGGTTAT
-GGTACATCGAAACATGGTGCATCACATAATGGTGCGCCCAAATCATGGTG
-CATCGTCAAAAATAAGAATCCGAGTCCTCCCAGACATCCATGTAGGTATG
-CACTTTCCCGCCTGTTCCGCATCTAACCAACGATTAACTGAATCTTTACG
-ACCCTCTCTCCTCCGAATGATGTTGAAAAATGTCGCGCCAGCACCTTTGG
-AGGGGGGGGGGGGGGGGTTAAAAAGATTCCAATCTACCACCTATCTTCTC
-CATTTATCTTCAATTTTGCCCCCCGCGCTCTTAGATTAAATGAACTTTTT
-TGGCTAAATCACAGCACTTTTTATTAAATCTAGGAACTGCATCTAAACAA
-TGCATGTGGTTACAGTTACCGAAAAATGTTGAAAATTTGGGAAAAGTGCC
-AAAATGTTGAATCAAGTCAGAGAGATTCGAAGACGCTTCTAGCAATTTTT
-TGACAGTTCCTGTCCCCTTTCGGTAGATTTGCGGCAATTCTCGGCAGATT
-TACACCCGCTTTTGGCGGTTTTTCGGCAACTTTTAGCAATTTTGGCAATA
-CTTGAAAACTTCTATTTAGCAACTTTTAGTCAATTTTCTGTAATTTCTGA
-GAACTTCCGATTTTCTTTTACATTTTTTTCCGATGCACCATGTCCCGAAC
-GCTCGCGCCACGACTTTTTTATTCATTATAGCAGGTCCTGTTTTGATGCA
-CCATTTCCCAAAGAGCCCTGCAATGCTGGCTCATGTCACGATGTACCATG
-TCCTGAAATGTCCCACCACGTTCCGCAACGAGGTTTTACTGCCAAATTTT
-ATGCAATTCCAAAATATTTTTCGACAATTTTGTTAGCTTTTCCCTTTCAA
-AAAAGTTCAAAATTCTGTTCCAAAACCACACCAAAAAGTCGAAGATCCGC
-AAAATCTGCACTTGAAACACTATTTGACAACCCCCGTCTCAGGCTATCAA
-AAATGCATGCAGTCATATATATGTGCAGCTTGTGAAACAAAAAACGAGAG
-GGATCAGGGGCTCAGTGCTCAAGGTAGATGTGCAACTCTATGAAATTGAT
-CGGTTATGCATGGCAAGTAAGAGTGACAGGGAGCGAAGTATGATGATGAT
-GATGATGATGGTGTGGAGAGAGCGCAACGTATGAGTTATTGAATTTTCGA
-GAAAGGTTATCTTTGATGGGGGGGGGGGGGGGGGGGGGCAGTTCATGGTG
-CATCGAAATATAAAAACTTTCGTGGAGATACGCTTTTTGAAGAATTTTGT
-GACACCTTCTTGGTGCATCGAGACAGTTTTCGTGGCAAGACCTGATTTGG
-TTGAAACTCTGAAGCCAAATCGCGCTCTACGATTTTGTGACCAGGCCAAG
-GTTTTGGTGGCATGGTGCATCATAGTAAAAATTCAAATCCTGGGAAAAAA
-AGCTCTATATATAATATCCAGCCATGGACCGTACCTCCGGCGTGGCCCCC
-TTCTGGAGCTAAAAACTAATTTTTCTAAAACTACCGTAACCCTACAGTAT
-TCCTACCGTACCACTATTGTACCACTACAGTACCCCGACTATATCCGTAC
-ACTAACCCCAACTCACTATTTATCCAGAAGCCAAAATTTCACAGACTACA
-AAGACTACATAGACTACAAACTATGAACACACTGAATAAGCGCTTCATAT
-ATATAGTGAATGATGGTGAGATCCATGTGACATGGTGCATTGTGACAGGC
-ATTTTGGGAAGGGGGCTTTGAGCACAAAACAAAATCTTTAGTTATTTTTC
-CGACAATTTCCAATAAAGTGAAGTTTAACAAGGTCGTGGCGTACTTGTTT
-CCAGTTTCCTCACGAGTGTTGCATATTATACCGCCAGTAATCATTGCGTT
-ATCACATAGTTGACAACGGTTTGATAATGTCACAAAGTGTGGGGGTTTTG
-GAAGTGGCATCAAACCAGCATACGATTATTAGGACGTGATGAACTTATTT
-TACCTGAACATATTATTAGGTGGTGGAGCTGGGAGCTTAGTATTTGGGTT
-TTGAAACAATGCACCATGTCCTAAAAGATGCTTTATTGCTAGGTAGGGTG
-CCGCGACTTTTGTATTCATTATAACAGGTTCAGTTCCGATGCATCTGCAT
-TTTTTTAATACTGTTCTTATTCTTAGCTCAATAATTCAGGCTGAGGGCCG
-CAGGCCCGAACACTTTTGGAAACTGTGGGCCAGCTTTAATCCTATTCCAA
-GCAAATTGTTATTCGCTCAAGCCAACTAACCAGATTTCCTCAAACTTTAA
-TCGCTCATATCTCAGCTCAAAACCATAGCAGAGACTTCGTTTTTTAATCA
-ATCGATCCCAAATTTTAAGGAAATCTCGAATATCCCTATCTCAGGTTTGA
-GGCGAAGCCGAGAACCTGCGCAAGCTACCTTTTTGGGCATCCCCATTCCC
-GAAAGGCTGGCGCGGCCCTGCCGCGCTAGTCATTTGCCAAAACGTCAAAT
-TGGGTCATGTCACGATCCATAATGCCTTGAAGGGTTCTTCTGCAACAGTC
-CTAAAAGAAACTTAGCACTCTGGTTGAGGTATAGATGCACCATGTCCCAA
-AGGGTCCTGCCATGTTGGGACATGTCACGATGCACCATGTCCTGAAAGAT
-CCACGCTCGAAAACTACATTGTTCCGAGTGTTTACCTCTATTTCAATACG
-AAATTTCAGCAAATTTTCATCCAAAATCATGTCATTCTAACAAGAGCCTA
-TCATGTTGACTATAGGGTCGTGACGACCTGCTCGAGTTCGCCTCGCTCTC
-CTGTTATCAGAATAGCTATGCGTTAAGTACGCGATGTATTGACAGTCACG
-ATTTAACGCTTCAGTTTTGTAGTTTTGCTGGAAATTTTTGAGTTTTTCGT
-TTTTTCTTGGCTCAAATCGAGTTTTGCTTTTTTGACGATTAAATAATTTA
-TTCAAACTTAGCGCATTTTTTGACTGATTGTGAGACATGATGCATCGTGA
-CAGGGCTTAATCGTGGCGAGACCCTCTAGTACAAAATTCTTTTAAATATC
-AGTAAAAGCATTATAATCCATGATTCTATACTTATTTTATGGAATTTTCA
-GCCTTAAAAAAATCTGAAATTTACGATGCTAAAATCTACTCAAATTATAG
-TTTCAATCCAAAATTTCTCAGAAAAACTAAAATTAGCATAAAAATGTTTT
-GTCTGAAATAGCCCTAGATTCAAATATCCCTAACACCCCAAAAAACACCA
-ATGTACATCTCCTCTCCGTAAATATGTAGTTTTACAACCGCCTCTCTGTT
-GACTGGGAGCCATAAATGTAGATATATTATCTTTCCAGATCGCCTGCCGG
-CCCCTCCCACCTGATTGTAAAACTGCTCTTTGCTGTGGCGTTTTATCGAC
-TTGTTTTTCTTATATATTCCATTCTACATACCTTAACACATTTTCTTGTA
-TATTTTCTATACACTTTTTTAACTATAAAAAAATGCAACTCCTTTTTCTT
-CGATTTCTTTTTATGCAAATTTTTTGGCTTAAAGGTGGAGTAGCACCAGT
-GGGGAAATTGTTAAAAACCACTCCTTTGGTCCGAAAAGTACCGAATATCA
-TAATAAAACTTTTCAATATTTTTTTGAAATTTTTTTATTCACAGTCAAAA
-AGTGACAATTACTCAGTTTTTGCCACTCATAATTTTGGAAGTCGACCAAA
-ATGTTTTTTCTAGATTTTTTATAATGTAATTTTGTTTTAATTATTTGTAT
-TAAAACATTGTAGGACAAGACAGGGCCGCAACATAAGATATTGCTTTGAA
-TTTCCTCAAAAGCTCATATTTTTCAGAATTTTGGCAATTTGCCAAAACTT
-GGTATTTAAAAATTGTTAGAGATAACTGTATTTAGACAAAACATAGAACA
-TTTGTATTTCAAAATAGTTCAAAATTCTAGTTTTTGAAATTTTGCGGCCA
-GACTGACCCCCACGATGCACCATGACAAATTGCAATTTTTTTTTCAAAAA
-TTGTTTTCCAAAGGGGCGTGTTCCAAACATCTGACCCAAGTTTTCCCGTA
-GTTCTTCTCTCCCCCAGCGGGGTAAACACTGCACTTTACGACTCCGCCCA
-GTGCTTTTTTTTTCGCAGAAACTGAGAGAGAAAGAAACATCTGCGTCTCT
-CTCCCCCAGTACGCTCGTTCCCGCCCCCCACCTCGATCTGCCAGACCACA
-CCGACCTGATTCGAGATTCCTTTTCTTATATGTATATGTTTTTGGAGAGG
-TGATCTTGTTTTTTTTGTTTCTCCTTTGGTTTTGTTCTCTATGCTCTGAA
-CTTTGGTCTCCTACTTTTCTACAGTTTTTTTTTAAATATCCAAATTTTTG
-AAATAGAGGGTTGATCTACATGACCCCCATGCTTAGTCTACTATAATGCT
-ATATCTGATGTTCCTCCGAATGGCCTGGTAGGTGAAGGCTTTTAGCCCAG
-TGAGCCGGCTTACCAAGTCTAGGACCATGGTTCTTACAACTTAAGGCCCA
-AAAAAAGCAGGCATCTGGCCTAACTTCCCCCTCACTAAATCTGTAGTAAT
-ATATAATTTCTATCATACTCCATCTTTTTTTTCTACCTCTTATCATGTTG
-TTATTGAGCAGCAACGCCCTTATATTGTTTGGTATATATATTTGATATAA
-AACCTCGTAGTAAATTTTATTTTACACAACAACATTTATTATTTACTTTT
-TTCATACTATTTTTTTTTTGCAGAACGAAAAAAAAATGCTATTCACAATT
-GAGCAACTGGAGCTCATCAAAAAGCTGCAGCACACCGGGATGTCATCCGA
-TCAGTTGCTCAAGGCTTTCGGCGAGCTGGAAGTTCCAGAGCAGCTTCAGA
-ATAACAACACAATTGCCGCAGCCCTGTACAGCCCACTCCTGGTCCAACAT
-CTCACAACACCCAAATCAGAGACTCCAGTCAAACTCACCGTGCAGACAGT
-GCCGACACCTGTGAAGTCAGAGCCACAATCTTCAAATTGCTCATCACCAT
-TTGAGCATCCGATATGCTCGAATGCTCCGCGGCCGATTAGGAGTCAGCGA
-ACGCCGATGAAGGAGATTACCACACTGGACGATCCGAATGAGCTGGAGGA
-GTTTATGAAGCAGGGCGAGGAGGCGTGCATTTTGGATATGAAGACGTTCA
-TCACACAGTACTCGTTGCGGCAGACTACGGTAGCAATGATGACAGGTTAG
-TTCCCAAAAAAGTGTAGTGGAAGAGTTTTTTTTCTAAAATCTAGGCCGTG
-ACCAGAAATAAATCAGAATACATCCCCGGCGCCTAGATTCCTAATCTCTG
-CTGTTAGCCACAGTGCAATTGAGTATTACTGTAGTTGATTCCTTCTATGA
-CGTCATATGAAATAAAGTTGGCTAAAGGGAAAAGGGGACTCTGGATCTTA
-GGCGAGCAATTCTCTGCAGCCGGCACCAGAATCGATCCCCCGGTGCCTGG
-ATATCTATCCTTCGCTGTTAGCCACTGCGATATGCCCCACCCGCGCTGAG
-ATCGAACCGAGGCGTCTGAATTCCTAGGCGAAGTTGCTACCCACTGCGCC
-ATGTCAATCTTCTAAATTTCCAGGAGTAAGCCAGCCGTACATTTCAAAAT
-TGCTCAACGGCAACCACCGTGAACTATCGCTCCGTTGCCGTAAGAACATC
-TACTGTTGGTACCTGAACTGCCGACGTCATCCCAACAAACTCGCTGCCTT
-CCTCGCCGATCCGACAACTCGCCTCGAGACGAATGGAGATGGCGAGCTGA
-TCCCACAACGTCGAGAACGCTACGTGTTTCGTCCAATTCTGATCCGAATG
-CTCGAATCGTTCTTCACACAAACGCCATTCCCAGATCTTCCACGGCGAGT
-CGAAATAGCGAATGCTTGCAATCACGTTCTGAAGATGGATAAGAAAGGTG
-TTGGGTTGATGCCAAAGGAGGTGGTCAGCCCTCAAGTCGTTTCGAATTGG
-TTTGCAAATAAGCGGAAGGAGTTGAGAAGAAGATCCGCTGAAGCTTCGGC
-CGCCTCCACCTCGTCCGCTTCGTCTTCTGCGTCATCGACTGCTAATCATG
-ATTCTGTCAGTGTGTCCAGCATGAGCCCTCGCGATGAAGAGGTGAGAGTT
-TTAATTTCTCGGCCACGCTGTACTCTGGGTGGAAGAATTTTTTCTAGGTC
-TTATAAGGAATCGCCCTCCGGTTTTCCCACAAGTTAAGTCATAAACATGT
-ACCATCTAGAGGTTAAATTTCTGGAGTTTTATTTATTTGAGAGTGATGGT
-AAACCTGTCAGTCCTTGGCAAACATGTGTCTGTTTGGTCTCAAGGTCTAG
-GTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTAGGTCTTGGT
-CTAGGTCTAGGTCTAGGTCTAGGTCTTGGTCTAGGTCTAGTTCTAGGTCT
-AGGTCTAGGTTTAGATCTAGGTCTAAGTCTAGACACAAATTTCTAGGCCA
-CGAAAATTTCTGCCGTGGCCTAGGATTTTTTAGGCCATATTCTAGGCCAT
-GATCCAAAAAAAACTTTCCCTGTCTCCTCTAACCCATTTTTTTTGCAGAC
-AAGCTCCCGTAACACAACCCCGGAGACAGCAATCTCCCCGTCACCAGCAG
-TGTCCACTTTTGAAGTGTCCCGCCCGTCTGCCATCATCTCTGCCACGTCA
-TCAACAACCTCGCCAATCTCAATTCCAGCAACAATCATTCCATCAGTATC
-GCCGTCAGCTCTCGAACTTTTCGCCATGGCCCAACAGCTTGGAGTTCAGC
-TTCCGGTTCCATTTCCAACATTGCCAACACACTTTTTCCCGTTTCAAATG
-GCTCCGTTCTACGGGAACCCGGCTTCTATTTTGAAGTCTGAGTGAAGCAT
-TTCTAATTTTCTTTTCTTCTTTTCTACACCAATATCTTTTTTCCATTTAT
-TCAACTTATTCTTCATCCCATGACACGAAAACCTCAATTCTTTCATATTA
-CAAACGATGCTCCGTTTCTTACGCCCTGCCCCACACACGCCCCGTCGTCC
-AAAAATCAATCAATAATCGATTTTTCATAATATTTAATTTGTTTTTTTTG
-TGTTTCACTGCTGTTTTAATATTTGAAAAGTACGAGTTTCTTCAAAAACA
-TTTTTTGAATAATATTTGCTTCACACTCCACGCGTTTCGTAATGTATCGC
-TTGCCCTGAAATTTTGTTGGAAATTCCATTTTTTGTGCAATTTTTGTTAT
-TTTTCAAGCGAGAATAAATATTTTCTAGTTCTAGAATTCAATGAAATACT
-TTGCAAACGCGCCCCATTGCACTTGACCGAGGGGTGAAACAAGTTCAGTG
-TTTTCAAGATATTTTTTTTTAAAAACTTGAATTTGGAACAATACAAAAAT
-CTGTAAAATGCAACAGTTTTCCAAATCTTGTCCACGTGGAGTACACAATA
-ATTTTTCATCTATACGGAAAGATTTCAAAATTGGAATGTTAAATTATTTT
-GTGGTTTCTAGGCCATGGGAAAACTAGGCCATCAAAAAAATTCCAGAGTG
-ACCTGGAAGTTCTAAAACTTTGTTGAAACTTGTCCACGCGGAGTACACTG
-GTAGTTTATCAATAGAGCGCAAGTAATAATCCCTTGGAATTTTCCTTTCA
-CCACCCCCTCTCCATTTTATATGAGAGTTTTTTCCCTCGCAATTTCCCAC
-GCTCAAGAGGGTGGCCGCCATTTTTTTTTTGAGGGGGGTCGTATCTAGAT
-TTGAAACACGTCATTTATGCTCAAAATGTGCCAATTTTTATTGTTTTTGA
-GTTTCTAGGCCATTTTGGTAAGTTAGGCCGCATACTGACTTTGCGACTTC
-CAAGGATATGGCCTAGCTTTTTTTTCTAGGCCATATAATTTTTTGAGTTG
-CAACTGTGGCCAATGTTTTTTTTGGGTTTCTATGCCACTTGTGAAAAGTT
-AGGTCATAGAATAACCTTACGGTAAACGGGTCCTCACAATCAGGAATTGT
-GGCCTAGTTATTTTCCTAGACCACGTTTGATTTTTGTCTTTCTAAGCCAG
-GTTTGGGTCTAGCTCTAGACCTAGGTCTAGTTATAGGTTTAGGTCTATGT
-CTAGGTCTAGATCTAGTTCTCTCACGTGAGAAAATTAGGCCACCTTTCCC
-CCTAAACTCTATGATCTCAAAACTAAAACTACTTTCTAGAAAACTCTTCG
-AAAATCATAAAACCAATTTTTTATCACTATTTTCATGCTAAAATCCAATC
-AGAAATTGATCAGAAACACGCATATAAATATTACGACTATAAATTCATTT
-CTTTTTTTCATTTTTCCCTCCAGAAGGCTCTTGGCGAGAAAAATCTGCAT
-ATTTTTTCTACTTATATGTGTCGAGACATGTGATATTCCGGCCGGCGGTG
-GCTCTGAATGAATATTCAATTGAACGAGAAATATATATTCTCTCCAGAAG
-GCGTTTATATTATGTGTTGCTCCTGTTTCTGCTGTATTCGGCGTGGATTT
-GGTATGCTTCTCAGTGGAGTGCAGTTGCAGCATTTTTTTTCTTCAAATTT
-TGCAATACTCTCGAACTTTTTGCACTTTCAAGCCTTTTTTTGGGTTGCCT
-AGAACACTAGAATTTCTGGACTATTTTGAGATTTCTAGGCCATTCTTGAG
-ATTTCTAGGTCATATTGTGATTTCTAGTGCATTTTTGGGTTTCAAGGCCG
-AATTGGAAGTTTTAGGCCATTTTTCGGTCACATTTTTAGGCCACTTTGAG
-GATCTTGTGCCAAACTGGGATTTCTAGGCCATCATGGGATTTTTAGGCCA
-ATTTCGAGTTTTCCAATCATAATATAATTTCTAGGCTATCTTGAAATTCC
-TAAGCCAGTTTGGAATAATTAGGCCATCTTGGGATTTCTACGCCATTCTC
-GGATTTCTAGGTTAAACTGGAAATTTTAGAATTTTGGGGTTTTAGGTCAT
-ACTGCGAATTTTAGTCCACGGTTGGATTTATAGGCTATCGTGGGATATCT
-AGGCCGATTATGGAATCCTAGGCCAACTTAAAATTTCTAGGCCATTTCGG
-GATTTCTAGGCCATCACGCCTCCTAAAAGGCACAGACAAAGTTCAAAACC
-CACCAGAAAAAAGTGTGGTGAATTAGTCAGCAACACCCCATTTTTCTTTT
-CCAAAAACTAAAAAAAAAGATACCCCTGACAGATATGGGCAGAGATGGGG
-GTGCGAATCCTGAAATTTCCGAATTCCAGTGGGAGCTTTTTGTGCCAGAA
-AAAGTAGTGGGGGCAAGTGAGAATGTGTGTCGCCTTCCACTTTTCAAACA
-CCATTTTGTCCGTTTCGCCGGCCCGAAAATAGGCTTGAAAAGCTGTGGCC
-TAGAATTTTTTCTCAAAATTTTTGACGTGGAAGAATTTTAAGATTTTCGA
-GGCCAAGAGGTGGCCTAGAATTCAACATTTATTGGCAATTCTTATCTAGA
-TCCCGAACCCCGACCAGTCAGTTTTTAATTTCCGGTGTCTGAATTTTTAA
-TTAAAAATTATTTTTGGGAGGAGCTCCTGTTTTTTTTTCGTCAAAAAATG
-AAGGTGGCCTAGCTTTCTCATTTTAAGGCCACGAATTCTAGTTAATTTTT
-TGTTGGCTCATTTTTTGTTTCAAAAAACGAAAGTTAGTCAAAAACTTTTC
-TGCATATCAAATGCTCTTTTTGAGGTTTTTTCCTGCAAAATTTTTCTAAG
-AAAATTTGAATTCCCGCCAAAATTTTTCTCAGAAAATTTGAATCGCCGCC
-AAAATTTTTCTCTGAAAATTTGAATCGCCGCCAAAATTTTTCTCAGAAAA
-TTTGAATTCCTGCCAAAGTTTTCACAATGGGTCTCACCACGAATGGTGAC
-AGACCCCGCCCACAATTCTCAGAGACATTGGGTGTGTTTTAGACCAAAAA
-AATAGTTTTTTTGACAAAAACAATTTTCCAGCAAATACTTGATCAGTTGT
-CATTTGTCTGTTGAAAGTGGAAAAAATAAAACATCTTTCCTTTTTTCTGC
-TTCTCCCCCTCCTCGTCCTTTTTGTGCTCAAAACTCAAATGGCTCATCTC
-AATTGCATGACAAATTAGCAAAAGATGAGAGCAATTTTTCCCTGTTTCTC
-TTTTTTTTCCTCCGTTTGGCTCCTCCTCATGTCTTTTTTAGTAGTTTTCA
-GAGTTTTACTATTGAATGTTCAAACTGGCTAAAAAATTTTGATTTTTTTT
-TCTTTTTAAACTCTTACGAAAATTTTGATATAGGTTAGAAGCCTAAAATC
-GACGGCCGACAGCGTTTACATTTGTGGCCTAGACTTCCAAGCCTTGGCCA
-TGGCAAAAACTTGTTTAGCCTACCTTTTCAAATAGTGGCCTAAAAACCCT
-ATACTATTTCTGAACTAACTGTTTACTCAAAAGAGAAAGTTAGTGGCCTA
-ACTTTCTGAATGGTGGCCTAGAAAACTCAATTTTGGCACTTTCATGACCG
-GTCATCAACCTGACATTGATGGCCTAAGTTTTAATGAGTGGCCTAGAAAA
-CCAAAATATGGCCATGCGCTCAGCATGATCTAACTTTCCAACTCTGCTAT
-AAATTCCTTGGGGGAAACCTCGGCCATCACGGGTGGCCTAGAAAACTGAA
-ATTCGGCCAAGACCCCGTAATTCATGGCCTAACCTTTTAAAAGGACAGCG
-TTTGGCTTTGGTGGCCTAGTTTTTTGTGGCCTAAGTTTACAGAAAAAATC
-CTCAGCCACAACCTTTACCCTATACATGAAATCACATAAAAATGTCCAAA
-TATTTTCCAATTAAATTTCCAATTCTCCACCCTTAATTCTTCATTTTCTT
-TTCTTCTTTTATTCCTTTTTCACTCTCTCATTCTGAAACTAATCTTTTCA
-ATTCTCAGCTTCTCTTTTCTGGTGTGGCTCATTTTCACTTTGCTCCCGCC
-ATTTTCAATAGGATTATCCGTGCACACACACACATGGCTCAGTGAGCAAC
-ACCAACAAAAAAGAGCATATATAGATATACAACGATATCTAACTAGTTAC
-ACAGGAGCTTCTGTTGTTCTTCTGTGCCCCTCCGAGCCGAGACAAACTTT
-TGGAAAAGAGCAACGCTTCTGGAGCCGACATATTCGAGAAATCCCGGAGA
-CAATTGAGACCACTATGAGGAAATGATGGTCGAGGAGGAAATGAGAGATG
-GCGTTGCTCAAAGTGCGCGACGAATGCACCAAGTTGGTCGGTTATCAGTG
-AGTTTTTGTTTTTTGTTGGCCGAAGTAGAGATAACTAGGCCACCTAGGTA
-GGCTGACGATCTTCAGTTTGCAAATCCTCTTCCACCGCACTTTTTTGAGC
-GATCTAGGTTTGCAAAAGGTAGGCCGCCTGGTCCACCGTACCTGTCATGA
-TGGCAGAGGTCTGGGAAAGCTAGGCCACCTGTCTGAGCTGATGGTCTAAG
-GTCTAAAGTTTACCAAAAACTCTTCCACCGAAACTTCTAGGGCGACCAAG
-GCTTGCAGAAGCTAGGCCACCAGACTTGGCTGGTGGCCTAGAATTTTCAA
-GAACTCTTCCATCGTAAATTATTAGAAAGCCGCGATAGGAAAAAGCTAGG
-CCATCAAATTACCTTAGTGGCCCAGAATCTATAAAAACTCTCCCATCGTA
-CTTGCAAGGACGGCTGAGCTTGGAGGAAGCTAGGCCACCAGAATAGGCCA
-GTGGCCTAGAATCAACAAAAACTCTTCCACCGTACCTCCTACAATGGCCG
-AGGTAGGGAAAGATGGGCGCCAGGCTAATCTAACTTTCCTAGACTGACCT
-AAATGGGAGAAAACTAGGCCACCGGGTTTACGGAGTGGCCGAAAATTTAC
-AGAGACATTGCCCTGACTATCTGACTGTTTTTTTAGCGAAAGAACTTTCA
-TATTTTCTAGGCCAGGGGCCCCCTACGCCCCAACACAATCCAATTTTTTT
-TTGCAGATTTCTAAACTCGCACATTTGTCTCTGCATATCACTCATCCAAC
-TTCTCGTCTGCTGCTGGGCCGTTGCTCAGCACGTCAACTCCTACATGACG
-CACAGTAAGGTGAGCCAGAGTTCATTGGAGCGAATTTGTAACCAGAGAAA
-ATTCAAAACTTAAAATTCAGATCTTAAAATGTGATTTTCTGGAGGGGAGC
-CTCCCGCTGGAGGCCGTGGACGCTGTAATTTTCGATATCCGACTTTTCCA
-TTACCTATGGGGCATTCGAGGATGTGTGGCAGAGTATTTGGATGGTGGTG
-GGTACTTTTAAGTTTCCCACGAATCTTTACATTTTTCAGGCTTCGGGCGA
-CTTTTGTGGTGCGTTTCCCACTGCTTAACCCTGGTTTTCTCCATTCCGGT
-CACCTTCATCTCCCATCCGAAACCCTGTCTCTTTTGGCCGCTGCTTTTTC
-AGGTGAGTTGGCTGAAAAAATTTGGAAAAAAACTTTTTTTAAATTTTTTC
-CGAAAGGCGCAGTGGGATTTTCCACGACTACCACTCACAACAGCATGGTT
-CGAGTCCGCGTGGGTGTGAATTTTTTTTCTAGTTTTTTTTTGAAGTACGG
-AAATTGTATTTAGCCTTGAAAAATTCTAAAATAAGCAAACAAAAAAATCT
-CCGATCAAAAACCAAGTAATCCGTCTCCAAAAAGCGCAGCAACGTCAAAT
-GGTCCCACGGGGGGCCTGAAACGACAAATTTCCTGACATTTGACGGGTTA
-TCCATCCGCCACCCTCTCTTTTGAAGGAACATTGACTTTTTCCGTTGAAA
-TGGATAAAAAAATTGAAAAGAATTAGATAGATTCGGGAGAATGAATATGG
-TGGCCTAACGTGGTGCTTGACCCATGGCCTAGAAAACCAAAACTCGGTCA
-TCACCCTGATTGAGTGCCCCTTAAGAGATTAGGCCACGTACGACGCAATC
-CTAGGCCACCAATAGTTTTCTCGGCCACAGCCACCCCAAACAAAAATCTG
-AACTTTCTGATCCTTTACATCTGTACCCACTGAACCGTTTGTTTATCTTT
-TTACTCGCTCCACGGGAGCAGAACTTTTTTTTTGAAATTCCACAAAAGAA
-TGGGACAGACACTAGTGTATTTTGTTTTTTATTCAGACATGAGCCAGACC
-AGAAATAGGATTGAATCTCGGATTTCAGAGCCTGGAAAAAATCGGAAAAA
-ATCGGAAAACTGTGGGAGAACTGAGTTGGGTGGTAAATTTGGCAAATTGC
-CAAAATTTGGGGAAATTAACTTTTTCGGTAATCTGTAACTACAGTTTTCC
-TAAAAATGTATGAACCTTTTAGTGATTCTGCATAGTTTTTCAGGTCTTTA
-AAATTGAACCTACAGTACCCCGTACAGTTCAGAAGATTGCAAAATTCCAA
-GTTGACCACTTTTAAAGCGTGTATCTCGGCTGATTGGGAAAGTATCGGAA
-TATTTTAAAATACAAATTTATTGTTGGAAAATTTTTTTTTTACTTAAAAT
-TAATTAAAATTCAGCTTTCAAAAATGAGCAATGTATTTATAGATCCCATG
-CAACTTTGAAATTTTGTATATCCGTTCAGTGTAATGCTATCAAAAAATTT
-TCAACTACAAAATTATAGTAAAATTTAAAACAAAGAAATTGTTAGTTGAC
-AACTTTTTAATGAAATAAAGTACAACCGAGATATGAGTTCTCAAAGTTGA
-GCTACTTTATCGGCAACCACAATATAAGTCGCCCCCGTACAATGCACCAT
-GTGGTAGAAAATTTCGGTTTGATCTACTTAGATCTACAAAAAATGCGGGA
-GAAGAGACGCAGAGTTTTCTTTGCATAGCTAAGAACGTGCTGACGTCACA
-TTTTGTTGGGCAAAAAATTCCCGCACTTTTTTGTAGATCAAACCGTCGTG
-GGACAAACTGGTACCTCTTCGTTTTGTTGGTATGAAAATTTTGAAACTCA
-CTTCGTTTTGTTGGTATGAAAATTTTAAACTAGAAAAGCCAAAGTTGAGC
-TAGGCGCTCAAATTTGGTAGCATTTACTTTTTTCAACAAAAAAATAGCTG
-GCCGAGCTTTCCATTTTTACGGCCACGTTGCAATAAAAATCCAGGAGGTC
-CATGTCATCAACAAAAGTGCAAGGATGTAAAACAATTACACCGAAACGTT
-TGTCGGGAACTGCTTTTTCAAAAAAAAAAGGATCTCTCCGAACACATGTC
-ACCCCCAGGGTTCTAGCGTCTCCCTGACCTCGCGAGCTATTTCCTTGAGA
-CATATCTCTCCGAAACCTTTTGTAATGGTTGTTTCATGTTCTTCTTCATC
-TTCTTCTTATTCTTCTTGCTGGGATAAGCAGTTGAAGAAAACGAAAAGAA
-CACATAAAACACAGGCACACACACACACACATACACACCGTAATATCATA
-TAAAAGTGCGTCTGCGTCTCCCAGAGCGCCCTGGGGGTAAGGAACGCGGG
-CGCCCGCAAGGAAAAAGTGCAAAGAAATTAGAGAAAAAAGACCGGTCTCT
-CACTCACTTCTCGATCCCTTTTCTTCTCTAACTATAAAAAATGTGTGGCC
-TAACGAACGAAAGCGAAAAAAATCATCGAGAGAAGTAGTGAGAGAGAGAG
-AGAAGAAAGAGTTTTTTTGGACGCCGCCGCAGCTGCCAAGCATCAATAAT
-GACATGCTGGAGAAAAAAATTCCAAAGTTTAAATGTATTGGGGATCAGAA
-GCCTAGACCATAAGCCCCTTGTAGAGTTTTCTCGGCCATAGCCTTTTTGG
-TACGGTACATATACATAGAGACTTCAGATTGGGAATTGCGAATCTGTTAG
-AGTAAGAATAGGCCTAAAACATTATTGGGCCTAACGGTGACGGAGACTAG
-GCCTTGTTGGGAGCTTAAACTATGACATTGCCTAGAACGTTGTTCTATCT
-TGGTTATGTGGTGTCGGGCTTTCATGATCAGCTCCTCTACTTTTGTCCAG
-AGAAGTTTTGGACTTTTTCTATGGGTGCTTTGGGCTCTATTGCACAAATA
-GGTGATCTTGCGCACAACACAACGTAGATCAAATTCTTGTCTAGGCTCTG
-CAGGCTCCTGAGAGGTGTTTTGTACAAGCCCAAAGCAAAAGGATCTCAAA
-ATGTTTACAGGACTTCAAGCAGAGGATTTTTCGATGATTGCCAAAAATTT
-TGGAACTTTTATAGGCTTAAGCTTATGGTTATGTTTAGGCGTAGGCTTAG
-GCTTAGGCGTAGGTTTAGGCTTTGGCTTAGGCCTATGCTAGGCCTAGTAC
-CATAATACTATTCTTACCGCCGCGCCTGATCAAACCAAAGAGTAGGTCAA
-CAACCAATATTGACTTGCACTTTTTGCACGGTTAACTATATTACGCATAT
-GGCCAATTTTGTTAGGGAGCATTGATTCATGGAAAAAATTTCGGAATTTA
-TGAATGTTCAATTAAACTGGACTACGACAATTATTGGGTTCAAACATTTG
-AAAATTTTTTGGCCGACGTCGGAACGTCTCACTTTTTCCTGATTTTTGTA
-GTTTTTCCTTTTTACCGAATTTTTAGGAATATCTGGGAATTTCTCGTTTT
-CTGATTTTTTTTCAATTGTTTTTAGATCCCCCAAGCCTAAGCCTAAGCCT
-AAGTTTGAGCATAAGCATAAGCCTAAGCCTATGCCTAAGCCTACGCCTCA
-GCCTAAGCCAAATGCGGAGCCTAAGCCTAAGCCTAAGTCTAAGTCTAAGT
-CTAAGTCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTGCCGGAGCCTAA
-GTATAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTATGCCTAAGC
-CTAAGCCGATGCCTAAGCCTAAGCAAGTTCCGACATTTTCGACAATTATC
-TAAAAATCCTCTGCTTGAAGTCCTGAAAATCTTTAGGGATCCTCAAGTTT
-CGAGTTTGTACGGAACGGCCCAAACGCCTCTTGGGAGCCTGCAGAGCCTA
-GACAAGAATTTGATCTATGTTGTGTTGTGTACAAGGTCACCGGTTTGTTG
-TGCATCAGAGCCCAGAGCACCCACAGAAAAAAGTCCAAGAGTGTATAGCC
-TACGGTAGTCCTTGTTTAGGAGACATAGACAGTCTCTTTCTCTAACGGTT
-TTTGTTTATTCTTTTTTTTTCTCCCCCTACTTTCCGACAGACATTTTCAT
-CTTCATCTCCTTCTGCTGCGCGAATTGAATGGTCTATAAGTGTCTGCGTC
-TCGCCGATTCGTACAGTCTATCGCTTTGAAATCGTCACCCCCAGGCAAAC
-AGGACACCCGAACACACACACAACTATCCTCATTCTCAAAAAAATGGCTT
-CACTGCATAAAAGTGCAGAAATTAGAGAGTATGCGGAGATTCGGAGAATC
-CAGAGAGAACACACAAACACACTCGGAAACTCATATAGTTAGACCAGAAT
-GATGGCTTTTTTGGAAATTTGAATTGGAAAGGGGTTTTTGAAAATTGGTT
-GGAAGCATTTCAGATAGATTTACATTGAAAAAAATTAGCAGGAGCACCTT
-TTCCATTTTAAAAAAATTTGTTGGCTTTAACTTTTTTCACGGATTTCCGG
-CTTCCCTCATAAATTGAAATGGAAGAGTTTTTGCCGAACTAGGCCATTTT
-GGCTCAGCCATATCTGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGC
-GGCTCGTTTTTAGTTGTAAAACTAAATTTATTTGTCCGTGTGGAGTACAC
-AACTTTCCCACGCGTTGTCCATCTGAAGATTGTCAATGGAGCGCGAAAAA
-TTCAGTGAGGAAGGCAAGAACTCCGTTTTTTTTCAATACTGAAAAGTCTA
-ATATTGAATTAATAAATTATTCAAACATTTAAAAACAATCATTTTTAGTG
-TTTTGAATTTTTTTTTAATTTCAAATTTTTCTTTAAAACATTAAAATTTT
-AAAAACATTTCCAAATTGTTCCAAATAACATTATTGAACTCGTAAAACAA
-ATTTAAAGGTGAATTTTCATTTATTTCGTTAAAAAATTACCTTTTAAAAT
-TTATTTTTTCAAAAAAATCTGGATTTTTTTTCTGCGATAATATTCGAGCA
-GTTTTTTTCGATTTTTTTTCTGAAATTCTGTGAAATTATTAACATTATTT
-GAATTAATTATTCAAACAATTTCAAACAGAAATACAACGAGTTTTTCCAT
-TTTTTATCATTTTCCAAAGTTTCAGAAAAAAATTTCGCAAAAAAAATTTA
-GATTTTTCCAAAAAAATTAAATTTTTGAAAAATTCTCAAACGCACGGATT
-TCTGGCTTCCTTCATAAATTGAAATGGAAGAGTTTGCCGAACTAGGCCAC
-TTTGGCTCTGCCATATCTGGGGTAGATTTACGGTGCGTTGCGTGTCGCGT
-CGCGGCTCGATTTTAGTTGTAAAACTGAATGTATTTGTCCGTGTGGAGTA
-TACGACTTCCCCTCCGACAGGCGATTATCAATGAAGCGCGAAAAATTCAG
-TGAAGAAGGCCAGAACCCAAAGTTTCACCGAAAAATTCGAAATAAAAAAT
-CCTGAAAAATTTTTTAATTTTTCCATAAAAATTAAAAATTTTTAAAAAAT
-TCCCAAATTGTTCCCAAGACACATTTCAGAGCAGGTTTCAAAAAATCATA
-TAAATTATTTATAAGGGTAACAACACAAAATTTGGGTAACAAGAGCAACA
-ATTTTTAATTAAATGTTTCATTTTTCATCAAAATTACTCAATTTTCCTGT
-TTCAGCAATCGGCCTATGGTATTTGCCTCCTGGTTCTTCTTCTAGCAGCT
-CTTCCAAGAATTGTTGTAGTACTTGCGTCTCCACAAGCGGCTCCGTTGAT
-TCCTATTCTGTTTTATCTTGTTGGCACCGCGCTCAATTTTTTTCATGTGA
-GTACTTGCTCACTTTTTTATGGTCTAAAAATTGGCGGGAAATTCAAAAAG
-TTAAGAGTTTCAAAAAGATCGGCATAAAATTTAAATTGAACATTTTTGGG
-GATTTTTTTGGAAAAAAAAACAAATTCGAAATTCGACCCATTTTGGCGGG
-AATTCAAATTCTTTTAAAAATTTCGAAAAACATTTTTCTGCAAAAAAAAA
-TTTTCATTTAAAAAAAAAACATTTTAAAAAGCAAGCTTTGCCGGGAAGAA
-TTCAAAAAATGTGGCTGGGATTTTGGCGCGAAATTCAAATTATTTTAAAA
-AATTTTTGAGAATTTCTTGAAAAAAAAACTGAAAATAATTTTGCGGAAAT
-TTGAATTCTTTAAAAAATGCCAAAAAAAAAAGATGTTTGTGCAGAAAAAA
-TTTTAATTTTTAAAAAGCAATTTTTCACGGATTTCTGGCTTCCCTCATAA
-ATTGAAATGGAAGAGTCTGCCGAACTAGGCCATTTTGGCTCTGCCATATC
-TGGGGTAGATTTACGGCGCGTTGCGTGTCGCGTCGCGGCTAGATTTCAGT
-TGTAAAACTAAATATATTTGTCCGTGTGGAGTACACGACTTTCCCTCCGA
-CAGGCGATTATCAATGAAGCGCGAAAAATGCGAAGAGGAATCTGTTCTAA
-AATTAGGCGGGAAATTCAAAAAGTTCAGGGTTTCAAAAAGATCGGCGAGT
-TTCAAAAATGTCAAAAATATTTTTCTGCAGAAAAATTGTCGACTTTTTAA
-TAAACTTTGCCGGAAAGAACACGTGGTGTCAGAGTGTCCGGTTTGATCTA
-CGTAGATCTACAAAAAATGCGGGAGTTGAGAAGCAGAGTTTTCAACTGAT
-TTCGAATGGTTAAGAACGTGCTGACGTCACATTTTTTGGGCGAAAAATTC
-CCGCATTTTTCGTAGATCAAACTGTAATAGGACAGCCTGACACCAAGTGG
-AAGAATTCAAAAAATGTCGCTGGAATTTTGGCGCCAAATTCAAATTACCA
-AACGGTATTTAATACATAGAGCTTCTCACTCAACATCTGAGCTACCGGAA
-ATTAACAACCTTCACATTTTTTGGTCATTACTCACACACATGTGGTTTCT
-AAGCAAGTTTCAGATACTTTTTTTTTTGTTTTTTTTTGAATTAATACTAT
-TTTTTGCAAAAGTCGCTTCGGGACCCAAAAAAAAAATTCAAATTCTTTTC
-AGTTATACGTGTACTGGCACTGGTATTGGCACGTGAGTGCCATGTGGAAT
-TCGGTGGTCCGTGTAAAGTTCGGACAGCGGCTCGAAAACGCGAATAAGCG
-AAGTCGACGGGATAAGCCGATTGTGCCGAAGGAGGAGATCGATGATGCCG
-TTTTGCATTACGTGCCAGCGAATAAGCCAACTGAACAGCAGAATCATGTT
-CAGCACAATCATATCAGTCAAAACGGGATTCAGCAACCAAAGGTAGGTCT
-ACCTACCTGCCTATTTTCCTGCCTACTCGCCTAAGTTTGTCTAAAATCCA
-ACTGCTTGTCTGTTCTGCATACCAATATGCCTAGACATACCCACATTTCT
-GCTCATCTTCTAACATGCCTGCTCGCCTAACTTAATGCTGTATGCCTATG
-TACTAGGTTACTGCCAGCCTGCCTACTTGCCTACCTACACAAATGCCTAT
-CTGACTACATCTATATCTATGCTTCTCTATGCATAAATGCCTGCCAAAAT
-GGCTAACTGCGTGTCAAAGTTCATGCATGCCTGCCTACCTGCCTACGTGC
-GTACATGCCTATTTGCTTACCTAAATGATTACCTGCTTACCTACCTGTCT
-ACCTGCTTAAGAGCCCTACTTATTTGCCTACCCACCTGACTGCGTGTCTC
-CTCTCTTTCTGCCAATCTAGGCCTACATGTCTATCTAGGCCTATATAAAT
-TCCTACCTGCCTACCTGCCTAAATACCTACTTGCCTGGCTATGTCTTCTT
-ACCAACCGTTTTTTTATGCCTACGTACCTGCGCGCATGCCTACCTACGTG
-CCTACCAACACCTACAAATACCTGTCCGCCTTCATCACATTTTTCACTTT
-CAGGTAATCCTTCCACCACCGAACCCCTACAACACCGCGCCCACACATTA
-TCGACGCCGATCCTCCACAGAAGCCCACCGCTACCACCCACCTCGGCAAC
-CGAGAAGCTCGGCGCCAACCCACCACCGAGTACCGGCCGACTATCCGAGT
-GACGAGGAAGACGACTATGATGATACGGAAGGAGACGACGCGGATATTGA
-TGATCTACCCACACCGCCACCGCCGATTTACGCCGTCCGCCTGACCTCCG
-ATTCGTGGGAGAATCAGATGAGCCGCCCGTCGGGTAGACGGCGGTTACCG
-GCGACTCCGAATTTGCCGAAACATGGAGAATTGCCGCAGATATTTAATAT
-TCCTCATGCTAATGTTTAATCAAATTTTTGGGGTTTTATGGGTTTTGGAT
-TTTCGGAGCGGAGCTTCATTTATCGCTTTAATATTGAATCAGGGGTGGTT
-TTCAATTCTGGCAATTTGCCGGTTTGCCGATTTGCCGGAAAATTTAATTT
-TCGGCAAATTGCCGATTTGCTGTTTGCGGGATATCAGATTTTCCGAAAAT
-GTTTAGAGGGATTTTTTATAAGACGAAAACACTAAAAACTGTGTCTTTTT
-GAATTTTTTCCACTTTTTCTACATATTTTCATAGAATTTGCTTACTTTTC
-AAATTGCCGATTTGCCGGAAATTTTTAATTCCGCCAATTTGCCGATTTGC
-CGTAAAAAATCGTTTGCCGCCCACCCCTGTATTGAATTATCCGGAACACA
-GCAACACTCTGAAATTCGAGCATTAGTTAAATGTGATATTTGAAAAGTTT
-TGCAAACAAAATAATTTTCCCCAGCTTTCATCATTTTTTCTTTCAACAAA
-AAAAAACCGAGTGATATTATGATTTCCAATTTGTGCTATTTTGAGTTTTA
-TTTTATTTTATTTTGTTGTTTTCAATAAATAAACGAATATTTTTTGGTCA
-TTTTTTGGCGCTATGAAACTAAAAAATTTCAGGTAACTTAGCGGGAAGTT
-CGTTTTTTTTTCATTTTGGCAGGAAATTTCATTTTATAAAATGGCAAAAA
-CTTTTCGTTAAAAGTTTTTAAATTTTGAGAAAATTGACGAGAAATTAAAA
-ATTTCAAATTTTTTGGCTCTAAATTAGGATTATAATTTTCCGAAAAAAAA
-TTTCCGAATTAAAATTTGGCGTCTCAGTGTGTTATTCAATTAGAAAAACC
-TTCAAAATATTAAGACATTTCGGAGGCACGTGGTGTCAGAGTGTCTATGC
-TCCTTTAAATGATGCATTCAAAGGCGCTTACACACCTGCACGTAATCTCT
-TTTTTGTCTCAAAACAAAAGGAGCTTCAGACTCTCATATCTCTGCAACTC
-TGTGTGAATAACAATTGGAGCCCCAGAGCTCCCGGCTCCACACTGCCCGT
-TTCCATGGAGACACTCCGATTATTATGGGAGCCACCACTGCTCGCCGAGC
-AGCAGCAGCAGCAGCCCATTGTTAACCCGATGACCAATATCTATATTTGG
-GTCCGGACCGCCCGTTCCCTTCAGTTTTTTTATCCGACTATCGATGTGGA
-GGCCGATGGGTTCGGTTGCTTCTATGAGATTTGTTTGGAAATTGTTGGCT
-TGTTGGAGGAGTGCGATAGGATAAGGTAAGCGTGCTCTATTGATAACACG
-AATTTTTGTGATTTTCGGCAACATGGGATCGTGGTTGCCCAAAGGGAAGG
-AAACGCGCCCCATTGATAAAATCATTTCGCAATAGAGCGCATTTTCATCA
-TTTTTTTGCAGTTTTGACGAATTCGAGACCCTCTGCGAGAATAGAATATC
-GGAAGTTTATGTGGAAGCAATTTTTCAAAATGCTGTGGAACAAGGAAATG
-TGAGTTTTTTTGTGATTCTGATGCTAATTTAGCAAGTGCGCTCTATCGAC
-AATTATGACTTTGTGCACGTTCAAGTATTTTCTCAAAGTTTAACACAGGG
-TTCTGGCCTTCCTCATTGAATTTTTCGCGCTCCGTTGACAACGGACAACG
-CGTGGGAAAGTCGTGTACTCCACACGGACAAATCACATTTAGTTTTACAA
-CTAAAATCGAGCCGCGACGCGACACGCAAGGCACCGTAAATCTACCCCAG
-ATATGGCCTGGCCTAGTTCGGCAAAAACTCTTCCATTTCAATTTATGAGG
-GAAGCCAGAAATCCGTGAAGTTTAACAAATTGTGAGGTGTAGCAAACACG
-CTCAAGTGACAATTTTTACTTTATGCGTCATAAATTTTTTTCTGAAACTT
-AGAAAACGCGCTCTATTGCTACTTTGAACGGAAAACGCGCTCTAATGTCA
-ATTTTATTTCCAGATAAACGCCCGCCTAAAGCTTCTCACCTTCTCACTTC
-TCTTCGCAGGTCTCCAACAAAAAACTAAAGATCTCACAAATTCCATCAGG
-TCGGACGTGGTCTTGACACGAATTTCAAAGTATTTTGGTAAATTTGAAGA
-ATAATATTTGTTATTTTTTTGTTTTCCGAACTTTACAGGCCAAATATTCA
-AACTTTTGTTCCAATTAGACGTGGGCCGCCGGTTACAGGACAGAGAAATT
-GTGCACGCCATTGGAAATGGGCAGGTGAGAAGTTCGGCTACAAAAACGTG
-ACGCGTGGCCTAGAAAGATTTGTTTTTCCACAGCTTTTTCCACAGCTTCC
-ACAGCTAACGGGATGGCCTAAAAAACTCCACGGTCGTTTAGCGATAGAGC
-GCACTTGCACATTTTGGGAATCTTCTGGAAGAAAGTAAACGTCACAAAAG
-GCCTAGAAATCTTTATCGTGTGTGGTTTAAGAAACAATTCTCGGCTTTGA
-AATTATGGTTGCTCGGGGAAAAATGATTGTTAGAAGCCGCACGCTTGCAC
-GCTTGCACAGCTTGGGAATTTTCTGGAAAAGAAGTGACGTCACTGGTGGC
-CTGTAAATTTTCGCCATGTGTGAATTAACAAAACAATTATGGGCTTTGAA
-ATTATCGATTTTCACGGATTTTTGGCTTCCCTCATAAATTGAAATGGAAG
-AGTTTTTGCCGAACTGGGCCATTTTGGCTCGGCCATATCTGGGGTAGATT
-TACGGCGCGTTGCGTGTCGCGTCGCGGCTCGATTTTAGTTGTAAAACTAA
-ATTTATTTGTCCGTGTGGAGTACACAACTTTCCCACGCGTTGTCCGGCGG
-GCGATTGTCAATGGAGCGCAGAAAATGCAATGAGGAAGGCCAGACCACGT
-GAAAATCAATAAGTTTTTCAGCAAAAAATGAAAAATGAGGAAATTTCGTT
-AATTTTAGTTTTGTTAGCAGTAGTGCGCGCTCACATAGTTCAAGAATTTT
-TTTTTGAAGAAAAGTGACGTCACAGATGGCCTAGGAATCTCATCTATGAC
-GTCACTTCTCTTCCACTTTATCCTATTTTCAGGGCTATGAATTCCTGGAC
-ACCCTATTTGAGGGAACAGTAAAGCACAGACATGGAAACTCGAACCATCA
-CGGCGTGCGCCCCCTTTCCCATATAATCCCCCAAATTCTCGAAAAAGCGA
-GCAGTATATCCCTACCATTTTTGTGCAATGAAATCCGCCGACACCTTATC
-AAAGACCCGTATCATATTGATGAGTTCTCAACTGACAAACCTGCTCAAAT
-ATTTTCGACGGCTCGCCGAACGACACTGGCACATAATAGTCGACGGGTGG
-TACACTTGCATTATATCAATCGAATTGAAGTGCTGCGGAAGGATGAATTT
-GCGAATGTTCACCTGAGAATTTGTAATGATAAGATTAAGGCGTCGTTCGT
-TTTTGTTCCGTTGAGGTGAGATTTTTTGGCCGAACTTTTTTTTGTTGCTT
-TTTTTGAAAAATTTTTAAGAGATTTCATTTTTTTTTACAATAATAGAAAA
-ATCAGAAAAAATATTCACGAAACCAATAAGTGGGCGGAGCATCAAACTGG
-CACGCTCATTTTCCGTAGATCGTTTCTGCCAAAATCGAAAATTTCTTGAG
-CTTTCTTGAAAAATAACGCTAAATTTAATTGTGAATTTATTATTATCTCG
-AAAAAAATTATCAAACAGTCGAAAAGGGGCGGGCTTACATTTTTTAGCCC
-CGCCCACTTTTAGATTTGTTTTGTTGAAAAATGTCCAAAACTGAGTTTTT
-CTCGGAAAATTTGAATTCCCGCCAAATTTTTTTCCAGAAAATTTGAATTC
-CCGCCAAATTTTTTCCAGAAAATTTGAATTCCCTCCAAATGTTTTTATTT
-TCAGAAAATTTGAATTTCCCGTCAAAATTTTTTTCCCAGAAAATTTGAAT
-TTCCCGCCAAAATTTTCCCAGAAAATTTGAATTCCCGCCAAAATGTTTTC
-CAGAAAATTTGAATTCCCGCCAAAAAAAATTTTCTCAGAAAATTTGAGTT
-TCCCGCCAAAAAATTTTTTTTAAAAGAAAATTTAAATTCCCGCCAAAATG
-TTTTCCAGAAAATTTGAATTCCCGCCAAAATTTTTTCCAGAAAATTTGAG
-TTCCCGCCAAAAATTGTTTTACTGAGAAAATTTGAATCCCCCCCCCCCCC
-CCCCCCCCAAAAAATTGTTTTACTCAGAAAATTTGAATTCCCGCCAAAAA
-TGTTTTTTCTAAGAAAATTTTAATTCCCGCCAAATTTTTTTTTAGAGAAA
-ATTTGAATTCCAGCCAAAATGTTTTCCAGAGAATTTGAATTTCCCTCCAA
-ATTTTTTTTTCTCAGAAAATTTGAATTCCCGAATTTTATTTTTGAAAATT
-TGTGTGAAATTAAATTTTTGGGAATATTCATTGTGGCCTAAGTTGCTCCA
-AATGGAAGAGTTTTTTAAAAATTAATTTCTCGTCCACGCGTCAATTGTAT
-GCAAGAAATTCGAATATTTTCCAGATGTGAAACCGTATTCCTCGACAGAC
-TTATGTACACAAAATGGATAGTTCTTGGCGCAGTACGCGGCATTGTAATT
-GTTAAAAATTGTCAATCGACCCGAATTTCGGTGAGCTGCGACCAGCTGAT
-TGTGCTCGATTCGAAAAATATCGAAATCTACGCCATGTCGCCGAAGAAAC
-CAATAATTTTCAACAGCTCTGCGGTAACTTTTGCCCCATTTAACACGATT
-TACGAGGTGAGTTCGGTGGGGCGCGTTTGCATTTATGAATTCGAAAATTT
->CHROMOSOME_II
-CCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC
-TAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAG
-CCTAAGCCTAAGCCTAAGCCTAAAATAGTGACTCTGGCAGTTCTCTAAAA
-TAAGTGACTCTGGCAGTTCACCAAAAATTGTGACTCTGACCGTTCACCAA
-AAATAGTGACTCTGACCGTTCACCAAAAATAGTGACTCTGACCGTTCACA
-AAAAATAGTGACTCTGACCGTTCACCAAATATAGTGACTCTGACCGTTCA
-CCAAAAATTGTGACAATGACCGTTCACCAAAAATTGTGACTCTGACCGTC
-ACTATTTTTATTGAACTGCCAGAGTCACTATTTTTAGTGAACTTCCAGAG
-TCACAATTTTTAGTGAACTGCCAGAGTCACTATTTTTAGTGAACTGCCAG
-AGTCACTTATTTTGGTGCACTGGGGTGGGTCACGCCCCCAGTTCTCAGTT
-ATGGGTACTCTGATCCACTCGGGACCCACTTTATCGTGTTCCCCGTGCCT
-CATTTACCCTAGAGCTTCCTCCTTTACCTCTCCTCTCGCTATCTCTAACA
-TTCCAATGGAAACTCCTATTTGAATTACCGCCACCGATGTGCCCGACGCG
-ACTTACTGTTAGCCCTTGTTTTGCACAAATCTGTTGGCTTCCATATTTAA
-AAGTTAATTAATGACCCAATGTTCTTTTTTTCTCTAAATCTCCACAAGAT
-GTTCTGTTTTCCCTACTGGACACTATCGTTCACTGCGTCTCACCAATTCA
-CATTGTCTCTACTTTACCTTTTTTGTCATAGTACACGTTCGCCAACGGTG
-TCGACGGCCAAATGCTTTGGGCAGCGTTTGCTTTTTTTATAATTAGTTTT
-ATTTTATTAAAACAATAGCTCTAAAGTTTACAAGTCATTTGTTATAGGCT
-AAATGAGTTATGTCTAATAAGTAATTTGAACTAGATACTTCCGTGTAAGT
-GACAATGTATCGGAAAAGTCCTCAAAGTGCGATGTAGAAGTTCACATGTA
-CTTTGTTTGGCATGTTAGTAAAAGAGCCAGTATGCTGATTCATTTTATAT
-TCTATATACTCATGTAATATGCCCATGTAAGGTTTAATTCCAAAAATATG
-AGCGTGTTCTATTTTATAATATTTTACTAAAATACCTTTCAGTTAATTGC
-ACTCAAATTTGTTGTTCTTCATTCTCTCGTTATGATTTAATCTTATTGCG
-TCAAGGTCATTATTTTAGGTCCATTAGTTATCGATCTGAAACATGTTGTT
-GTATTTTTCTATTCTTGTGAGCTCAGGACACCTCATACAACTCCAGAGAA
-AATGTGTCTCATTATTCTTGTCTTTTTTCAAGATCTAATCAATTTTCTAC
-ATTAACGACGTTTTTGTCGTTCTGCTTCTTTTTTTCGTTCGTTTGTCTCG
-TCCATCAGCTGTCCACTCATTTCTCTCCCACTCACTAGGCAGTGCTTTGT
-TTGGTTCCGATTGGCAGCTGGCTGCAGGGCCTGCATCTCTTCTATGTCTC
-TCATTTACTTGCATTCTTTTCTTCGTTAATTTTTGTTATGATATTTAAAC
-GGGAAGAAGAGTTTGTGGTTCTTCTTTTTATAATCACTAAAACTTTTGGA
-TAAGTAACAATTTTCTGATAAAAATATTTTCACGGCGAAGAAAAAAGAAA
-AAGAAGAGTAGTTTTTGCACGTTTTCATATAATTATTTTCGTTGATCAAA
-TGTTCTTCTGGAGTTTTCTAATAAATTTCTTATCGACTTTTTTTCAGAAA
-TTTTTCTCAACTTGTCATGTCAATGGTAAGAAATGTATCAAATCAGAGCG
-AAAAATTGGAAGTAAGTTCTTTATAATTTCATTTATATACTATAAGTTTT
-CTCGATCACAGGAGAAACAAAAACAACAGACAACACAAAAAACAATAAAA
-CAATATTGCTCTAGTAATCAATAGTGTTGTAAAGAGGGAAGAAAATTGTT
-ATCTGTGTAGCAGTCAACGTTGATTGAGATGTTGTGTTTGACTATAGAGT
-TGAAAATAATAACTTCAAACTTGCAAGTCATGACTTATCAAACACTGCCG
-GAACTTATTCTGGATCAAAGGAAAGTTGTCCAACTGTAGAGTCATGTTTT
-TCAAAAGAAAACACAATTTTTAAGTATAAATATTTTGAAAAAGTATGTTT
-TAGAAGTATGTCAAATTAAAAAAAAAATCCTTGGTTAAAAAATGATTTTT
-TTGGATATATGTGTATTTTTAACTAAAAATATATACTTTACATATATATT
-TTGGCGCAGTTATTTGATCTATAAATCAAACTTTTTGATAGACATTTTTT
-TATATTTACAACAACTAGGGTTGTTATGAAAACGCCTATTATTCTACAAA
-CTAAATTATTTTAATCATACATTCCCCACTATCTAAAAACTAATGCAATT
-TTCAGATTTTGTCATGTAAATGGGTAGGATGTCTCAAATCAACAGAAGTG
-TTCAAAACGGTTGAAAAGTTATTAGATCATGTTACGGCTGATCATATTCC
-AGAAGTTATTGTAAACGATGACGGGTCGGAGGAAGTCGTTTGTCAGTGGG
-ATTGCTGCGAAATGGGTGCCAGTCGTGGAAATCTTCAAAAAAAGGTATTT
-TTAATTTAATGTGCATTTTATAATATAAATTCTTCAGAAAGAGTGGATGG
-AGAATCACTTCAAAACACGTCATGTTCGCAAAGCAAAAATATTCAAATGC
-TTAATTGAGGATTGCCCTGTGGTAAAGTCAAGTAGTCAGGAAATTGAAAC
-CCATCTCAGAATAAGTCATCCAATAAATCCGAAAAAAGGTATTCACAATT
-TGCATGATATTGTTATAATCTAATTTTCAGAGAGACTGAAAGAGTTTAAA
-AGTTCTACCGACCACATCGAACCTACTCAAGCTAATAGAGTATGGACAAT
-TGTGAACGGAGAGGTTCAATGGAAGACTCCACCGCGGTAAGTGTGTTTCT
-TTAAAAATTACTTCCTTTTTTCAATTGTTTGAAATTAACAAGAAACCTGT
-TGGAGCGTATTTCTGAACTTTTAAATCGAAAATATCATTTGCAAAAAAAC
-TTGAAAATTGAGAAACTTTTTTAAAAGTGGAGTAGCGTCTGCGGGTTTTT
-TTGCCCTAAATGACAGAATACATACCCAATATACCGAATATAACCGTAAT
-AAAATTATGCGATTTTTATTTTTATTTTTCATGAATGTTAGGGGCAAAAA
-ACCCACATGCGCTACTCCGCCTTAAGAAGAATCAGCTGTGAGCACTATCC
-ACTATACATTGGAAATTTACAAATAAAATAGAGATTAAGTAATATAATTT
-TTAAGGGTTAAAAAAAAGACTGTGATATACTATGATGATGGGCCGAGGTA
-TGTATTTCCAACGGGATGTGCGAGATGCAACTATGATAGTGACGAATCAG
-AACTGGAATCAGATGAGTTTTGGTCAGCCACAGAGATGTCAGATAATGAA
-GAGTACGTTGTTTTGCAAATTGATTAAAAGTGGAGTAGCGTCAGTTAAAA
-ACTCTAACATGTCTTAGGTTTTTCAAAAGTTTGGTCAAAGTTTTGGCAAA
-CTGCCAACTTCTTGAAAACTTCGTTAAAAAAATTCTTGAAATGATTTGAA
-AATTTGTATTATGTTATTCTCTTATTTCTGCACTATTCTATATGGCGCTA
-CTATACTTTTAATTGATTTCTTGAAAGCAGTTCAATAATAATTAATTTTA
-GAGTATATGTGAACTTCCGTGGAATGAACTGTATCTCAACAGGAAAGTCG
-GCCAGTATGGTCCCGAGCAAACGAAGAAATTGGCCAAAAAGAGTGAAGAA
-AAGGCTATCGACACAAAGAAACAATCAGAAAACTATTCGACCACCAGAGC
-TGAATAAAAATAATATAGAGATAAAAGATATGAAGTAAGTCGAAATTGAC
-AAACAGTGGTTTTTGTTTAAGTTTATTGCGAAATATTCAAAATTAGACAT
-GTTAAAATTTTGCGAGATAATCTAAAGATTAGGTATACAGATTTTTTCAT
-GTAAAGTTACATTCATCAAAATTTTTGTGTTCACCAAATTAGACAAAAAA
-TGTTAGTTACACAGTATATTTATTTTTTATATCAATAAAACCTTTTTCAG
-CTCAAATAACCTTGAAGAACGCAACAGAGAAGAATGCATTCAGCCTGTTT
-CTGTTGAAAAGAACATCCTGCATTTTGAAAAATTCAAATCAAATCAAATT
-TGCATTGTTCGGGAAAACAATAAATTTAGAGAAGGAACGAGAAGACGCAG
-AAAGAATTCTGGTGAATCGGAAGACTTGAAAATTCATGAAAACTTTACTG
-AAAAACGAAGACCCATTCGATCATGCAAACAAAATATAAGTTTCTATGAA
-ATGGACGGGGATATAGAAGAATTTGAAGTGTTTTTCGATACTCCCACAAA
-AAGCAAAAAAGTACTTCTGGATATCTACAGTGCGAAGAAAATGCCAAAAA
-TTGAGGTTGAAGATTCATTAGTTAATAAGTTTCATTCAAAACGTCCATCA
-AGAGCATGTCGAGTTCTTGGAAGTATGGAAGAAGTACCATTTGATGTGGA
-AATAGGATATTGATTTTATAACGTGTAATTGAGTTTTGGCCAAAAAGGTA
-TGGAAAGGTGGCTGTTTAGTTATATATTTTTCTATTATTTATTTGAAACA
-TGCAAAATTGAAGTGAACAATAAGTGATGTTCATGGAAATTTAAACTGTT
-TTATGATACTTTTTTGAGAAATTGAAAAATCTGTTCATTTTAGAAACAAT
-GTCCACATGGTTCTAAGAGCTAAAATTTTTATTTTCATCCATTTAGAGTA
-CTTTCTCTTTTAGAGTACGGCCCCAGAGCGATGTTAGAAACCTGAGATCG
-GTCAACACAGACCGTTAATTTTGGGAAGTTGAGAAATTCGCTAGTTTCTG
->CHROMOSOME_III
-CCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC
-TAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAAAGCGCGAAATCCTATGAA
-ATTTCAAGGATTTATAACTTTTTGAGTCCGAAAAGAGTCGGAAATCAGAT
-AAAAATAAAATCGGGCTTTTCGACCAAAATTAGGCCTCGAAAAGTCTGAG
-AAAGCACGGAATCTATGGATTCACGGCTTTTTGATTCCGAAAAGGTTCGG
-AAAGAGAAGAAAATCGATAAGAATCGATAAATTTGCAGAAGTATTGCAAA
-TAAATTCCGATTTTCACTAGAATTGCGTCATTTGGGCGCAGAAAATCGGG
-CTTTTCGACCAAAATTAGGCCTAGAAAAGCATGAAAGGGGTCCAAATTCT
-GAGATTTCGCAACAGTTTTTGGACAAGGTTATCCCGGAAATTAGCGGGAA
-GCACTGAAGATCGAAAAACTGAAGATCTTGTCGTTGAGAATCGTTCAACA
-GCGTCAGTTACTACTGAAAAACTGATTTTTGAGCAGAAAATCTGCCGAAA
-TGTCCGAAATCGGACGAAAATCAGTGGTTTTTTCGCCAGGAACTCGTAAA
-CGAGCGGGAAAAAACACTAAAATAAAATACATAATCGACGACGGCGTCGA
-AAAATGGACTTTGGAGGCGATTTTGAGATAAAAATCGCCTCTCTGAGACC
-GCGTCACCGCAACTCGTGCCTCCATCTGACTCAGGATCCGAATCCGGCTA
-ACGAGTATACTCGAGCCGGTTCGGTCGATGCACCAATGTTGACACCCATG
-TTCTTCGGGGAGTCAGACCCGATAGGTAACAAACGTGCGGCTTACTTAAT
-GACGCGCGGAGGATACGGAGCTAGTACGAGCGGTGCGACTGATGATGCAT
-AGGGAATAACAGTACACAAGCTTGAATTAATCCAAGTTTATTATCGAATA
-AAAGGATTAATCAAAGAAAAAAGGAGGAAAGGGCGAGCTGCATTGGGAGA
-CGACCTTCCTCGACGAGAGTTGTTGAAGAATTGAATGGATCGTAGGCCAG
-AGGCCTATAATAATTATTGTGTGGATTTACGGGCAACGACACTCCGGAGT
-AACGCTAGTTAGCGAAGGAGCGCGGTTGCATCTGAATAGCGCATATTGGC
-ACGTAATTCAAATTAGAAAAATTACTAAAATGATTTAATTAATATTTTTA
-ATAGAACGAATGGAATATAATCAGCAAATGGTACAAGCGGACGTCACAAC
-ACATTGCTTAATAATAAATTTCCAACTGAAACCAATAGATTCAGCCTTGA
-CACAACTGATCAGAAACTTGTTATACATGTTAAAATACTCGAATTCATAT
-TCATCGCCACCAGAATAATTGGGTTTGAACACTCTTGCAACTTCAACTGA
-GATGGTACCGTAGATCCAGAAGATGCATTGTTGGAATGTACTTCTTCCCA
-AAAGGTTCTGAGATTTAATTGATTTTTAACCTGGGCCTAAAAGTCTCACT
-TACGTACATTTCTAATATTTAAGGCATTTAGTGCTGAGAAGTATTCGACA
-GTGGCCTCGATGTTTTCAAAGTGGAATAAATAGTGAATTGGAATAATGTT
-GAAATAATGACCAAAAACTTTACATTCTTTTGATTTTTTCCACTGATCCA
-TCCGAGTAAGCTGCTCAAAGTCATCGATTGTTTCAAGGCACCACAATTCA
-ATACTTTTCAACTCTTGAGAATCGAAATAGGGCAGCGTAGATATAATATC
-ATTGGGTGACACAAAAATAATCGATAATTCCTTCACATGAATGCATTGCT
-TAGATCTGAGGATGTTCAGAAAATATGTGGTAACGTTAAGGTCTTGTTGA
-GTTTGTACAACAAATTCGAATTTCCTGACACGTCCCAGTAATATTCTCAA
-ATCGTTGAAAGCTAGTTGCATGAAGTTATCTCTTCTGATTACTCTCTTTC
-TTCTGTGAGCCACAATCGAATTCCCGGCATTGGTGTAAATGATTTTCATT
-TTATCAATCCGCATTTCAACTCGACCATTGCATACCCAAAACGAGATAGA
-ATCAAAATTAATTCCATTTTGAACAACGGCAGCTCTCAGACTTTTACAAA
-TTTTGAGGTGAGTGAGTCTGAAGAATAATAGCTTGGTTATGATTTTTCAA
-AGTTAGGGTACCGAAATCTTGGAAATATTTTTAATTGACTCCAAATTTTC
-CCCTGATTCCGAAAATCGATGTGAAAAAAATCAAAAAAAAAATTCCTGAT
-TTTATATTTAAGCTTGAAATCACGCATTTCATTTGCGCCCCGGTCTCTTT
-TTCAAATTCGCGCCCTAATAAATTTGCATTGGAGCGCACTTGCATCGTGT
-CATTTTCTTCGTTTTTTTCATTTATTTTAGCAGAATTCAATGTTTTAAAC
-CAGTTTTATTCATTTGTGGAGAGTTTTTATCGGTTTTTTTTTGACTAAAA
-TGAAAAAAGGGTCCAAATGAAAATCGAGATGAGCTAAGTCAAGCTTAAAT
-ATAAACCAGGGAAATTTTTTGATTTTTTTTTTCACTTTGATATTCGGAAT
-CATGGGAAAGTTGGGAGTCAATTAAAAATATTTCCCAGATTTTGGTACCC
-CACCTTTAAATCAAAATAAAATCAACTAACTGATCCACTGGCTTTAGCTT
-TTCCAATACTTGACCAAGGATCTCTGTGGGCATATCGGAAAGAGTAGGGG
-AAATGTGATCCTGGCTGTAACAATCAAATTGCCATTAACCCAGTATTTCA
-ACAAAAAAAAACTCACAAATTCATATATCGCACAAAATTAATTGCCCACC
-ATTTGTCAAGTTCAGCTCCACGTTCTTCAGTCAGAGCACGTCGGGCTTCT
-CGGCTGATTGTTACCATTTTCAAAAGATATAATTTCTTTAACACAGAAGT
-TAAATAAAATATGTCCGATAGCAAAAAGTAGATGTGAATGAATTGAAGAA
-GAACTGAGAAATAGCTAAATATCTATGTCTTAATTTTCATAGAGTTTCAT
-TGTCAGATACTACAATGTTACTATTGAGAAAAATGTCAAACTGATAAGAA
-TAGCAGCCAGCTTAAAATGAAAATTTGATAAGAAATTGCTGTCTTAATAT
-TAATTATATTGTCGTCAACAAACAGAATTTTCACTTGCTAGTTGTTAGTT
-TAAATTATATTTTGATACCGAAAAGTGTTTGAAAATGGGGGGAAACTAGA
-AAATAAAGTTTTCTACATATTCCATATTTTCAGAATTGATTTCAAGATAT
-GTCGGAAACAAGCCAAGAAGCTCGACGTGCACTGACGGAAGAACGGGGAA
-AGGTGCTTGACAAATGGTGGGCAATTAATAATTTGAGATTCATGAAATTG
-TGAGTTTTTTGGAAATACTGGCTTATTGGCAATTTGATCGTTACAGTCAG
-GATCCCATCTCCCCCACGCTTTCCGATATGCCCTCAGAGATTCTTGTTCA
-AGTTTTTGAAAAATTTGATTCTATAGAACATTAAGTTGCTTTGACTTTTA
-CAACAAAAATATTCGGTATAAAAATGTTCTGACTTATTTGTCGAAAAGTT
-TGTCGAAGTCTGAAGCCCGCCGTGGAAAAAATTGAAATTCATTTTGATTC
-TATTTCGTTTGAAGTATTTAATAAAAATGTTATTATGAAATTGGATGGAT
-TAAAAATTCTCTACAATGATGTCGCAAATGGTGCTTCTATAGTGGCTTAC
-AATAACAAGGAAGCAATGATCAAAGGAGAAAACTTCCTGAAACTAGCTTT
-CAATGATTTGGGAATACTACTGGAACGTGTGAGGAAATTCAAATTTAAAA
-TCTATGGAGACGATGTACATGCCATTGCCACATTTCTTTTAAATGCTCTC
-AAAGCTGATCAGTGTGTTCACGTAAAGAAAGTAGTGCTTTTTTACGTGCC
-ACTCATTGATATTTGCTCAATTCTCTCGTATTTTGATTCTGAAATGTTGG
-AAAGAATTGACTTGCGTTGTAATGATACAAACGCTCATTTTGAACAACTT
-GCTCAAAAAAAATTCCAACGAACAAAATGTGTAGAACTTTACAAACTTTT
-TAATAAAGATTTCCAAATTTTTATACAGATTCACTAAATTTCCAGAGTTT
-TCCCACAAACCGACACACAGACCGACCTGGTAGTGGAGAGGACAACATCT
-TTATTCAATCCAGTCAGTGAAGTGGAATTAAACTGGGCTTCAAGGAAGAA
-ATGGCACAACGGAAAAGGTCGGGAGAAAAACCAAAAGTCGGAAAAATATT
-TTTTATTGAGATATAATTTTTTTTGGTAGAAACATTTTTCTTCGAATTTA
-AATTATATTTCGCGCCAAAAATAAGATTAAAAACCAAAAAAAAATCCGAG
-TGTGGAGAAGTATTTTCGAAAATATTCCTCTAATAATACCCTTTAACAAG
-GGCTATAATAATGGAATTTCGGGTGCTTGAAAATGAGTTTTTTGAGATTA
-GAAGTATGAATTTTTGTGTCTGGTGTTAAGTTATTTAAGTTATATTGAAT
-GGAAATTTTAAAAAAATTCTGAAAAAATATTTATAATTGTTATTTGAAGC
-TACTATTTCACCTGGAAACTTCTAGAATTTCCAATTTTTTTAAAAATTTT
-TTAAAAATTTTTTTATTTTCAATATTTTTCACATATGATACAATTTATTA
-TGAGATTTTCGGAATTTTTTAAGTGAAGTTTTTCCCTAAAGTTTTCAAAA
-TTGACTCGAATTTTCTGGAATTTTTTTTTTCAAAAGAAACACAGCTTTTG
-TTTAATTTCCAGTTAATTTTTAGCTTTAACATTAAAAAAAATTTCTTTCA
-TTTTTAACAAAAATTCCCCTTCTTATTTTAGAATTCAAAGCCAAAAACCT
-TCAAATTCAATTTTATCTAAAACCTCCTCAAATTCGAAAAAGTGTGAGAG
-AGATACGCGAGCTACGAAAAAGAGCAAAAATCTGAGTTTTTGAGCACTTC
->CHROMOSOME_IV
-CCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCC
-TAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTA
-AGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAG
-AAGAGACCAAACCGAAAAATCAATTTTTTAAACGAAAAATCAATGTTTTA
-AACGAAAAATCTATTTTTTAAACGAAAAATCAATTTTTTAAACGAAAAAT
-CCATAAAAAATTGTTATAAAAATTCTGGAAAAAAAACTAAAAACTTAATT
-TTTGCTTTGAACATTCATCTTTCGCGAAAAAAATTTCAGCAAATAAAACC
-GAAAAATACAATTTTGCAAATAAAAAATCTAAATCAACAGTAAAAAACAA
-AAAAGTCAAATTTCAATAGAAAAAAAAATCAAAAATCAATTTTTACTCCA
-AAAATTCAACTTTTGCCAAAAACTAACCCAGAAAAATCAATTCACAAAAA
-AAAACAAATAAAACTGCAACGATGTTTGTGAAAAAAATTTTCTTGATATT
-TTTAACGAATTTTTGTTTAAAAAAAATGCATTTTTGGCCATAAAATTTTT
-TTTTTGATTTTTTCAAACGAATTTCCCCTCAATTTTCTTGCAGATCGACG
-TGGATATTGACGACCTAGATGACGATTTTCTCTCCACAAACGGAATGGAA
-CGACACGGTTCAGAATTACAAGGAGAAGTGGTTTTCACTACGACGAGTAC
-TGCGAATAACAATGTGAAACGAGCCGTCGAATATTTCGAAGATGATAATC
-AAGATGATGCACTAACATCCACTTCATCCGGCAACAGTACACAGAAGGAA
-TCGTCTCCGTTCACAGATTTTGATGATGTTCCGCCGCCACCAGTGGCTCC
-AGAAACTCCGGCTCCAGCCCAAAACCGCCGAGAATCTGCGTCCCCCGAAC
-GTCAATTCCTTGATGAGAGTCACCTCGGCGGAATTGGATCTCCGTTATCA
-CAGAGTACAAGGCTCGATGAGACGTTTATTGAGGAATACTCTATTGAGTT
-GGACACCTCTGGGAAGTATGTGTTGGGAAAAAAAATCCGAAAATTGATTG
-AAAAATTCGAAAAAAAATCCAAAAAACCTTTTTTTAATGAGATTTTTTCT
-GTGCAAAAATTTAAATTTAGAGCTGAAGAATGTGCACTTCTAGAAAAACT
-TATTTTAAAAAATTCACATCCTTTTATCAAATTTATTAGCATATTTATAC
-AAATTGATGGATAAAAATTCCAAAAAAGTTCCAGAAACAACATTTCCTCC
-GCAGCTTCACCTGGTCCCAAGTCTCCATTTGACGATGATTTTACTGATAC
-AGCTGCCCCGGTAGCCCCGCCACCAGCACCTACAAAAGCTGCCGAGGAAT
-ATCGCCGGCAACCACATCAGAATCCGTTTGATGAGGAAGAGGAAGAAGAA
-TCACAGTTTGGAGGGGGAACTCTGTCCGGTAGAGACCCATTTGATGAAGA
-TGTACGTTTTTCGTAAAGTTCGGAATTTTTAGGGTATAAATTGAAAAACA
-AATGGAGAAAATATGAATACCTAGATTTTTTTTTTCAAAAAATCCCAACC
-CTAATATCCACAATTTTTTTTCAGTCTGGAAACTCTAACGAAAACCAGCT
-CCGCGAGAAGAAGCTCCACAAAAAAGAGCAACTAGCTCACCGGCTCTCCT
-CCTCTTCCGAAGAAATTGTGGAAGCCTCAATTCACGAGGATGAGCCAATT
-GTGATGGCTCAAATTCCAGAGGAGAAGCCCAAACCGAAGGCTATCCCGGC
-TTTTGATAACGCCTATGACGCCGACTTTGACAATTCCCCACCACTTCATC
-ATTACTCGGCGGTTCATTTGGAAACTGGGCTCTCACCGCTTGAGGAGGCT
-CAGAGAGCTCTCCGAGCCAACCGAGCAAGGCATAAGCCGTCGAATGTATC
-GTTGGCAGAGGAGGCGAAGCTTGCTGCCAGACAGAGATACTCGAATGCAT
-CGGATATTAGAAGAGAAGAGGAGGAAGAAGTGGTGGAAGAAGATCCAGCA
-GTGGTAGTTCCAGTTCTACGGAAGGATCTGGAAGTTGAGGAGGCTCCGAA
-ATCGGTACGACCGCCTAGATATCGGAAGTCAAGGGAAATTGAGGAACCGG
-TGGTTGTTGATCGGTTTGTTGAGGAAGAAGTTGATGAGAAGGAGGATATT
-GATGCGATTTTTGAGAAATATCGAAAGGTTCGTAAAGATATTTTCGAGAA
-AAACGGCGTTGAAAATTTGAAAAATTTGAACTTTTTTCGAGTTAAAAAAT
-TTAAACATATAGAAAAGATATGAATCTGACAAAATTTAGAGAAAATAAAA
-TGTTATTCACCAAATCGCCAATTTTTCTGCATTTTTTTGTCCGTTTTACT
-TTGGTAATTCTGGTAATACAAAACTAGTTTTTTTTCAAAAAAGAATTGCA
-GGAAAAATATTTTAAATGTTTTTTGAGCACTTGAGCGCATGAGATAGAAA
-AACGTTATTATTATGCATTCCCTCATATAAAAGTTTGTTCAATTTTTTTA
-ATTAAACCCCGCTCTTTGAGAAAACTCTGGACTCTACATGGAGACTACCT
-TAATACAAATTAACTCATAAATATCGGTGATTTTCAACTAGTTATTCATA
-TGATGCAATTACTGATTTAATAACTTATAATTATGTGTCAATTTCAGACG
-TCTGTATCCGCCGATCCAAAATCTCACACGCCGATTTTGATGGCCGACGA
-GTACAAAGAACCACAGAAGCAAGGTGAGTTTAGTTCGAAAAAAAATCATA
-ACACACACCAGTAGGTTTAAAAACATTGTTAGAAAATTTGAAAAAAAAAC
-CAAAAACCGTCGTAAAACTACACTTTTTCTATTGAAAATAGAACAAACAA
-ATCAAATATCCTACATGTAAAATTTAAATCGAGTGGAATTAAATTCTTCA
-AACAAAAAGAAATCTGCATTTAATATCGATTTCTCATTCAATTGTTATGA
-ATCATAAAACATGATTTTTTACGACCTCCTCTGAATTATCTACATTGTTC
-TCTTTTTCATACTTTCCATATTCTAGTATCGATAGGACTAACACAATTTT
-AATAGTGAGTTCGTTTTTCAAACAATTGGGATTAATTTTCAACTGAACTA
-GACTGTTTCTGAACGCTCAAAACCTTCAAAATCAATGCTTCTTCAAAACG
-AAAAAATTGCACACTATAAACCTCTCACTTGAAGTGGCAGCGCTCGTTTT
-ATATTGAGAAAATATATATTCAAAAAAATGCTGCTGCTTCTTCAGCTTCT
-CGCCGGGCGCCGCCGCCAATAGTGAGTTCGTTTTTCAAACAATTGGGATT
-AATTACAAAAAAACTTAACTGCGCAATTTTTAATTGGGAAACTTTCAAAT
-TTTAACCATAACTATCAATACAGCGGTATACGAAATTTTTCTTCAAAATC
-GCACCGATACTGCATTTTTCCGGAAAAGGACAAAGTCGGCTAATTGCCGT
-TTTTTATAATTTTTGCTCATTAAGCTTATTCCATTAAAAATACAATTCTT
-GTTTAAAATTGCTGAACGGCGAATTTTGTCTACCCGTGGTGGAAATTGCC
-GGTTTGTTGATTTGCCGGAAAATTTCATTTTCGGCGTGCCGATTTGCCGT
-TTGCCGGATATCAATTTGCCTGAAACGTTTAGAGGAATACAACGGAAACA
-TTTGAAACTGTGCCTTTTTGAAATTTTTTCCCTTTTTTTTACAATATTTT
-CATAGAATTAGCTTACTTTTCAAAATAGATGTAGGAAAATTCATATGCGT
-ACAATTTTGCCAATTAAAATTTGAATTCTGAAATTTACAAAAAAATGTGC
-AAAACTACTATTCGCCGAAAATTTTTGGCAAGTTGCCGATTTGCCCGAAA
-TTTTTATTTTCGGCAAATTGGCGCTTTGCAGTTTGCCGGAAAAAATTACA
-TACACCTGTTTTCAGCCTAACTTAAAATATGATTTACTTTGAAAAATAGG
-GAATTAAATTTAAATAAAATTTTCAACTGAACTAGACTGTTTCTGAACGC
-TCAAAACCTTCAAAATCAATGCTTCTTCAAAACGAAAAAATTGCACACTA
-TAAACCTCTCACTTGAAGTGGCAGCGCTCGTTTTATATTGAGAAAATATA
-TATTCAAAAAAATGCTGCTGCTTCTTCAGCTTCTCGCCGGGCGCCGCCGC
-CACATTTACCGGCCAACCCGTTCTCTGAGGTTGTCTTGTAAGGGCGTTTT
-CATGTATATTCAGATTATTATGCATGAATTTCATTAATAACGGTATCCAC
-CCACGTATATTTCTCTTCTTCTCTCTTTCTGTTGCGACGGGGGATGTCGA
-TTGATTACGCCACGGGCGCTAGCCTATTCCGAATGCATTGAGAAATTTGA
-GACCAGATTCTGGAGTTTTTGGAAGACGAATCGTCGGCAGCGGAGCTCGA
-TTTTAATTTAATTTCGAGAGCACCCGCGTGCTCTCGCCTCGACACCCTCA
-AACTTCTTCTTCTTCTTCTTTTCGTCGTCTTTCACTTTTTTCCTTTTTCC
-TGTCCTAACCACGGCGTCTTCCTCCAATTTTCAGTTACCACGACGTCATT
-AGCTATTTTTAGTCCGAGTGTGGAGCTTGAGAATTTGAGCAATTCTGATG
-TGACATTCCTGTCGTTTTTAGCGCTAATTTTCCTAAAACCTTCAAAAATT
-TAGAAATTCTCTATCGTCTTTCAAGAGCCTAAGTTTTTTTTTTCGAAATG
-AGTTTTTTAAAATTGATCGAAATGTTTTTAAATACTGAATATTTGGGATT
-CTAGATTTTTACTACAATATTTCCTTTTCAATTTTTAATTGGACAAAATT
-TCAAAATGTTAAAAAAATTCTCCGAATTGAATGCTATTTTTCTAAAAAAT
-TTTTTTAGTGCCTGCACCAGTTGTCGTTGCTCAGGAGTCGCCGATCTTAA
-AACGAAGAAACTCTCTAGTACCATCAAGGATCAGTGGAAGGCAGTCGACG
->CHROMOSOME_V
-GAATTCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCATAAGC
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCATAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCATAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCATAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAACA
-TAAGCCTAAGCCTAAGCCTAAGCCTAAAACATTTGGAAATTATTTTTGAT
-CGTTTATATTCAAGTAGCAAGAAAGTGTCCTAGCGTTAAAAATAGGAAAT
-TTTTCGCTCTTTCAGAACAGTATACTCATGTCTCTGTACCGACGATATTC
-ATTTCAAAAATCGCAAAAAAAGTTTTTTTCAAAATACCACTACCATTAAA
-ACATTTGGAAATTATTTTTGATTGTTTATATTCAAGTAGCAAGAAAGTCT
-CCTAGCCTTAAAAATAGGAAATTTTTTGCTCTTTCAGACCAGTATACTCA
-TGTCTCTGTACCGACGATATTCATTTCAAAAATCGCAAAAAAAGTTTTTT
-TCAAAATACCACTACCATTAAAACATTTGGAAATTATTTTTGATTGTTTA
-TATTCAAGTAGCAAGAAAGTCTCCTAGCCTAAAAATAGGAAATTTTTTGC
-TCTTTCAGATCAGTATACTAAACATTCACGTGTGGATTAAAATTAAAAAG
-GTAGTGTTAAATAATTAAAAATCATTTAGGGGGGAACGAAACCCATAAGT
-ACTGTCATTTTTATCTTTTACCTTTTTTTTTACGTACGACGTTTTTCGCT
-GTTTTCCCTGATACAAAATGCGTTGTTCTTGTTTATTTATGTTTTTCTTG
-AAAATGTTATCAACACTGATAATCTGAAAAATTATAATTTAAAACTTAAA
-CGAAGCTAAAATGTGGCTGTTATAATACAGCGACTCAATGAAAAACTCAA
-AAAAAAGTTGACTTTGCACGCTATGGTTAAAAATGAATGAATTCTTGGTA
-CATGGTTTTTTTTGTGATTTTTCGTTGAAAAATCCACACCGTGTCAGAGA
-GAGCTGAAAATGTTCATTGAAAGCGCTAAAAAACATTTGAAAAAATGCCA
-ATTTTTCCGTAAGATAATTCGATTTGAAAGTTTGAAAACTGAATAGTAAT
-TGTGTACTTGCAAAGAACCTTGTTTGCTTTTTAGTTTATTTGATCTACCA
-AAGATTGGGTTCACTGTCTGACCATTTGGGTCACTAATCTCATAAACCGT
-CAAAACAATCCAACGTGGTACAAAGTACATCAAGTTTTTCACAAGTCCTA
-TAGTTAGCTGCGCATCCCTAATAGGTATCCCCATTAATTTTTTTTTCAAG
-AAGAATGGCAACACAAACACCCCTCTCTGATGACTCGTGTGTCAAAAACG
-AGCTCACGGAACTCTCCTCTAGTGAAACGGTCTCGAGGATTGACGAGGCC
-CCGAAATTTCATGTCAAAGCTGTCGTCGGGCGTGTTGTGATAAAACATTT
-TGGTGGCCGGGATTGTGTTTGTGTTCAGTCAGAAAGACGCTATTAGGACC
-TCCTCCCATCTTATTAGCTGTTTATCCTTCATCACAAGACATCTCAATAT
-TGGTTCCATAGGTGTAGCTTCTTCTGCTTCTTCTTCTTCTTTTGTACCTA
-CGTCATCATACATTGGTTACTGTCCTACCGAGGTTTGTTTCAAATTTGCA
-CATTTAAAATGGTATACACCTTTAAAATAAACTTAGAAGTAAGGCCTTTG
-GTCCCACTACAAAAAATTTACAGTAGTTTGGTTCAGACTTTTCTAAATTT
-AATTAAGGTTATTTTTTATTGACAAAAAATATTTTAGTTCAAGAAATATG
-TTATGTTCAGTGGGTTTCCTGTCATATACTTCTACTTACCGTATTTCCTC
-TATTAGTCTTGCATGCAAGACTAATTTTCAATTGACCCGTAGGGGTGCAA
-GACAAATAGGGGTGCAAGACTAATAGAGGCTGCAAGACTAATAGAGGAAA
-TACGGTAGTTATACTGGCAAAAGCGATAGCATTTCGAGAGAAAAATATTC
-TTAAATGTGCTCAATATGGCTGATACAGATAGGTTTTTCATTACAGACAG
-GTTTTTCATTTCAATTTTAAAAAAATACCTGACAGTTTATCAAGAAAATC
-CAGCACATTCCAGAGTTATTAGAGTATTTAGAAGTTTGCAAGTTCCCAAT
-TTTGTCAAGGGATTTTTCAAAGTTTCTCAAACTTTCCAAAAAATGCAAAA
-AAAAACATTCCAAAAGTACCAATTTTTCCAAAAAATTCCATAAATATATT
-CAGTCCACCGAACGTTTTTAGATCTAACTGAGAGTTCTCCTGAAGTTTTT
-CAGAGTTTGAAGGAATTTATAGAAGTTTCTGATGTTTTACAGGATTTTAC
-TAAAGTTTCTCAAATTATCTATAAATGCCAAATCTTTTCAGAAAGTTTTC
-AGAAAATTTCCGGAAAACCTTCAATTTTTCAAGTTTTCCAGAAGATTCTC
-GATTTTTCCAAAATCGTTTCAGAATTTTCCTAATTATTCCCATATTTCCA
-TCGACTTCTTATAGTTAATTTGATTTTCATCAAATTGATACAAATGAGAA
-AATTTGAAATTTGATAACTCACGTTTCGATGCAAAAAGAGACGAAAGGCG
-GCGTGATGCGGGCAGGATTTAGGCAGGCGGTAGGCCCTGAAACCGCGCCT
-GCCTACCATTGAACCTCTAAGCTATTCAGTTGTATTTTTTGATATTCCAG
-ATGCGTACCGACGTGGGTTCTATTCCATTAATGTGTATTCTGTCTACACT
-AACGACTGGTGTGTTCGGATATCTTCCGACAGAAGATCTCACAAATTCGA
-TAATTTCTGGAAACGGTGGTTATCCAGTTCCTCCGGACACTATTATACCG
-GCCGATGGAGATGAGGAAGGTAAGTGGATCAGAAATTAATAATTATAAAT
-TTTTTAGAGTAGGGTTTTCTTCTGAAATCTGATATTTTGTGAATTTTGCA
-AAAAATTGGAAAAATCGACAACGAAATGCAAATTGTTTCGTTAAATGCAA
-AATGGATGCGCACCTTTAAAGAGTAAAGTCTATGAAAATGCTTTTATTTG
-GTATTACAGTTCTTTTCAAAGGCACACATATTTTTCCCATTTAACAAAAA
-ATCGTCGTGACCTTATATCGTATTTTCGGCGCAAAAATCGGAACATTTCG
-CGTCTGTATAATACCCCATTTAAAGGTTTACGACGCAATAATACAACACC
-GGGTCTCGACGTGGCAAACGATTGTTTATTGATTTTCACGGGATTCTCGC
-CTTTCTCATTGAATTTTCGCGCTCCATTGGCAATCGCCTGCCGGACAACG
-CGTGGAAAAGTGTAGTGTACTCCACACGGACAAATCCATCGGTTTTACAA
-CTAAAAACGAGCCGCGACGCGACACGCAACGCGCCGTAAACCTACACAAA
-ATCTCGCAGACTCAAAATGGCCTAGTTCGGCAAACTCTGCCATTTCGATT
-TATGAGGGAGGCCAGAATTCCGTGATTTTCCCATTTCTCACGGCCTCTCT
-AAATTTCACGTTTTTCAAAATTCATCTTTTTCTCTCTGCTCTCTCACTCT
-CTCACGTGAAATATTACTTTCTGAATAATAATTTGTGTTTAATTAAATCA
-AATTTTATTGAAATAGAATTCATGATACACGATCTTGAGAAGAGCTCTGT
-CCTCCAGGCTGCGAACTGGAGCGTAGAAAGTTTTCATATTGTTAAAAACT
-GCAAAGAAATGTTCGATTCCTTGTTCTGACGTGTGATGCTTTCTCAAATA
-TGGAATTAAATGACAGACAAGGAGATGAAGTTTCGGAGTGACTCATTATT
-TCATCAGTTTCATTAGGAAAAACACTCTTTATTTATTCAAGGAACTGTTA
-AAGCAAAACTTCAATTTTGTCAATCTCTTGGTCTAAATACGTTCTATCGT
-TAGATAAATCTAACTATCTAACTGAAACGAGTACAACTATATTGTAACGC
-AAAAAAGCTAAGCGCCATAAAACACAAGTAAAACAGGCTCCAGTAAGCCT
-AAACTGTTTTTACTATAAAAAACCATTGTCATTCACCTACCTACCAAATG
-CCAATATAATTGGTTGAAAAAAATTAGTTTAATCTCCTCGCAAGATTTTT
-TTCTCCGAAATTTAAGATTGGGCGCTTAGTGATATCATAACTCTGCAGCC
-ATCAGAAAAACTGAAATGTATTTAAACTGTAAGTTTTAATCGTTTTATGA
-GGATTATTTCTTTAGTTGACAGTTTTTTGATAGCTTCTTTAGTTATTGAG
-CTACGGGCTTCCAAACAAAACCAATCAAAAACCACTATAAACCACAATGT
-CCTAAAAGTGAAATTACTCAGTCAATTTTTAACCAAATCACGGCATTAAT
-GTCTTGATATCTTCATTGAACAATTTGTAAAAATCGTAAGGCGGTAGTTT
-TTTGATAAATGTCATCGTTTTTTAGTAAAATTGCGTTAACCATTCAAAAA
-TGGCCCATTTTTGGTGTTTTCAGGCCTAATTCTTGTTTTTGAAATTCCGG
-AGCCAGTTTTTATCGAAAATTTTTGTGCAATGTCAAAAAATGACCGGAAA
-AAAATTCTCTACAATCGTAAGGCGGTACTTTTTAAAATTTCGTTTCCATT
-CTTCCCCAGGGATCCCGTAAAAAACCAATTTTTCGACTAGGTCTCACATT
-TTGCCCTACAAGAGCATAGTTAATGTTATAAATTTGGATTTTTTGGTCGA
-ATTTGATGAGGTAATATTCAGTTGTTTGTTTATTGTTGGAAAATCTGAAG
-ATTTATCAGCGAATCGCCCGATTTCGCCAATTATGACCAAAAAACCCCTA
-GTTTAGGATTTTCACGAATGGATGAGTTCATTGATACGCTTCCACGCTGT
->CHROMOSOME_X
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGC
-CTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCT
-AAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAAGCCTAA
-GCCTAAGCCTAATCTGTGCTCCAAAGCCTTCGAACTGACGGACTTGTGTC
-CCGAAGTCGAACTCTTGAAGTTGTCACCGAGTTGGCTAATAAGAAAGACG
-CTACGTTGTCTTTTTAGTAAGTTTTCGTCGAAATTCTGGAAAAAAAATCT
-GAAAAAAATGAGAAAAATTGAAGTTTCTTGTGAAAACGTGCAGCAGCCGA
-CAACTAACGGGACTGGGAAAATTGAAATTTTTAACACAGTTAAAATGCGA
-TGTGCGCATAGTGGGTGAAAGGCCATAATGCGCGCACCGCGTGTGGCGAC
-CACCTATTATGCACCTATCGCGAACGGTTCGCGATGGGTCCATAATGTAT
-CCATGATGCTTCCACTCACGAAACAAACAATTCGAAATATATATTGTTTT
-TCCGCCTATTTTTTTAACATTTTATTGCAATTTTTATTGAATTTTTGATT
-TTCACTGGTTTTTTTTCTTGAAATTTTGTTTCGTATGTGGTATTTTGTAA
-TAATCATAATATTTTTTTCTAAATTGTGTGTCTTTTAGAGAAAACACTGC
-TCTAACCAGTTGAGGCATTTAAAAACATCATTTAAACAACATGGCAAGCA
-TTATTTCGTTCCTAATAAATGGAAGCATAGTCAGGATTACTGTAGTTTCA
-CATGTATTTAGCCATTAAAATTGTAATCTGAGTTTTCATCGGTATTTGCG
-CATACTCAGAAAATTTTGTTAAATATCTTGTCTGTTCCTGTATTTTCAAG
-AGCGAAATATCGTCAAAATCAGATTATTTCGTTGAATCTGGAAATGCCCA
-CTGTTCTTCATGCCTACTCGTGTCTATTTCTCATCAGCGTTATAACTCAC
-CTTTTAAATAATATTGTAGAAACAAATTTTTTGCAGCTTCTCTTCGAGCA
-GCAGACTTCACAAAAACTTCATCAACAAGAAAAAACGTGAAAATCTTCAA
-CATCGGAATGTCTAGGTGAAGGATGTCGGAACGGGCAAGGTTTGGAGCAC
-GGCTCAGCTTTTTTAGATTTTAGATTTTAATTTAGAAACACACCACCGAA
-GAGGAGGAGATAAAGATGGCTCGGCTCCAGAATGCATTGAAAGTTGTTGG
-ATGGTCGAATGGATTGAAAGCAATTGTAAAGAAGGAGTTACCCGGAAGCC
-CTGCCAAAAAGCAAAAACCGGCATCGGTTGCGCCGAAAATTTTGGACTCC
-TCGATCGGAAGAGTGAGTTTGCTGATTTTCAAAAAATAGGATGAAAGGCT
-GAATAATTTGAGCTCTCAATTGCTAAAAATATACGGATGGACAAAACTAC
-GATCATCATTGGTCACAAAGTTGCAGCTCCGAAAAGAGAATTCGTCTGGA
-ATTCTGGAAGTTCACAAGAATGGTGAGTACTTACCTTTCAAGTGAAAATT
-GAGGAAAAATTGAGAAAGAAATGTGTTGAAAGATGCAAAAAAATGACAAA
-AATTCAGCTTATCCTGCTAAAATTACGCGTGAAAAAGCATATTTTGTGCT
-TGAAAATCGCAAAAAAAATGCATTAGAAAAACCGATTTTATTTAGTCCTC
-CTAACAAATCGATTTTTGTAGACCTGGAGTCATCCTAGCAAACGAGGCAA
-CACTGGAAGAGGACGAAAAACGTTAAGATTCCGTATGAAGATGTCAGAAA
-ACCGAGTTAGGAGGAACTTGGAATTAAATTTTTGAGTTTTCTTTTTTCTA
-TAATTTTTTAAGCTCACTTTTTATTCTTTTTGTTGTTCTCCCACTTAGGC
-CATGTTAATAAATGTGTTTTTGTTAAGAAAACTGTCTTAAATGCTCAGGA
-TCAGGTTTTATTATTAAAAAAACAAACCCACAAAGCGCACATAATTTATG
-TTCGCGATGCTCGCAAAATGCATCTCAAGTTCGCGATGGACGCACAATGC
-GCGCGCAATGGGCATCATTTCCGGTTCCTTTTTAACACACGCGCGATCCA
-CTCCGAAAGCACTATGCGCACATCGCATTTTAACTGTGAATGAAAATTTG
-AAAAAAAAAACTAAATTTGAGAATTTTTGAGTTAAAAAATTCCAAATTGC
-AGAGAAATAAAAAATAAAATTTTTAGAGAATATATCGAAAGAAATTCAAA
-TTTTTAAGAAAAAATCCCAAAAATAAATCATTTTTCTAGAAAAAAAAAGC
-AAAAAGTTCCCATTTTGCGATAAAAATCGAAAAAATCCCGATTTTTTTAC
-AATTTTCTAAAAAAAAACTGAAAAAAATCCACATTTTTCAGAAAAAAACG
-CTAAAATTTTAATTTTTTCTAGAAAAAAACAAAATTTTCAATAAAAAATC
-CAAAAATAAAACCAAAATTAAAAAATTATAATAATTACGGGTAAAATCGT
-ATGAAATCCCGTTTTTTTTTTAATCGTAATTATTTTCAATTTTTTGGTTT
-TCTCCTCAAAAAAAATTGTTTTTTTTCCCATTTTTCTTTAAAAATTGAAA
-GTTTTCCAATTTTTCTCGAAATATTGACTCAAAATTAGCTTTTTCTTCGA
-ATTTTTAATAAAAATTTTCACTTTCGCGACCCGTTAGTTGTCGGCTGCAC
-GGTTTTCTGAAAATTGAGAAATAAAATTAGAAAAGTTGCAAAATTGAAAA
-AAAAAACCGCAAAAAACTGAAATTTTCTAGGCAAAAAAAAATAAAAGAAA
-TCCACAAATTTTTCGATAAAAATTGAAAAAATCCAAATTTTCCTGAAAAA
-AATCCCAAAAATCCAATTTTTCTACAAAAAAAACCCAAAAATCCACTCCT
-TTTCGATAAAAATTTGAAAAAATTTCGATTTTTCAAGAGAAAATTCCGAT
-TTTCTAGAAAAAAAACCCCAAAAAACTATAATTTTCCTTTAAAAAAAACC
-CCAAAAATCCAAATTTTTGTACAAAAAATACCAAAAAATCCACATTTTTC
-AATAAAAATTAGAAAAAAAAAACAATTTTTGCTGAAAAAAAACTCAAAAA
-TCCAATTTTTCTACAAAAAATACAAAAAAAATCACGATTTTCCTGAAAAA
-AACCCAAGAAACTATAATTTTCCTGAAAAAAAAATCCAAAAAAAAACCGG
-GAAAAAAACAAAAGAAATCCAAATTTTTCGATAAAAAAATTGAAAAAATT
-CCGATTTTTCAGGAATAAATTCGGGAAAAAATTCAATTTTTCTAGTAAAA
-AACCCAAAAAAAACCCAATTTTTTTGCAGTTTCCGTCACTTCTTCTACCA
-CCGTTTCCACAGTAATCTCATCGAAGGCTCAGGTCGCCTACTCGACAAAA
-TTAATGATACTACTGCTGCCCAACAACAACTACAAACTACAAACGAACTC
-GACGGCGATGGCCCAGAAATTGCAATCGCCGCGGCCAAAGCATTCCATCC
-GACTGAAAAATTCGATTTGGAAATGAATGTGGACGACGATGAAATTCTGA
-AAGTATTTGATATACAAGAACAAGAGCAAATTGTGATGAAAAAAATCCGA
-CATTTGGAGAATTCTGACTTACATTTCGAGCGAATTCATGTGAATTTGGC
-GAAAAAAGAGCGATTTTTTGACGACGTTCAGAGCTCGGAAAATGACTCAA
-GCGACGAAAAACTCGCCGAAATTTGCGATTTTTTGAGCCAAAATTGCCGG
-GAAATCTCGAATGCTGCGAAGCCTCCTCGAGCAACACTTGACGAATGGAT
-TCAGACTGGAAAATTCGAAATACAACGTCGTCGAGAGATCCGGGCGGTTT
-GCCACGTCATCAAGGCCATCGGTCAGATGGGAATTACACTTGGCGAGCTG
-TGTGGAAAATTGAAAATTGCCATAGAGCAAATTGCCGGAATTTTGGCCGA
-TTTGAGCGGAGACAAGAAATGGTGTCCGAGACCTTGGATTGCGCCGGAAG
-GTTTTCTTTTTTTTTTAAGGGATTTTTGGGGCGAAAAATTTGGATTTGGC
-TCACCACGCGCGAGCTTTGATTTAAAGGTGTTTTCGCGGTGAGACCCGGA
-AATTTTATTTTTCCTAAATCTCTCTGAACCCGGTCATGATTATACTTAAA
-TGAAAGCTCACGGCGAGCTGAATTCGAATACTAAGTGTATGGTTGTTTAG
-CTACAGTAACCTGACACTGAATTTCGCGGCGAGACCCGAAAATCCCCAAA
-AACTCTCAAAAACCGTCTTAGAATCGATCAAAATATGTCAAGATTATACT
-TAAAGGAGGACTAACGGTTCGGACGATTTTGAACGTATAGACCAAAAATA
-AGCTCAAATGAACGAAATTCGTAATGAAACTGCTCAAAAATTTTTCAAAA
-ATTTTTTATGGCGGTTCAAAATTTTGAAAAAAATTACACTGATTTTGGCT
-AAAATCACGATTTTTTCTCATTTTTCCGTGTCACATTTGTCCGAAGTTGG
-TTTTTTTAGAATTATCGTCCTTTATTACATATTTTGGTAATAAATCTCAT
-TTAATTTCGTCGATTAAAGTGCATTTAAAGCCGATAAATAACCAGTTTCG
-ATGATTTTTGGTTACCTATCGGCTTTAAATGTACCTTAATCGATGAAATT
-AAATGAGATAATCTACCAATATATGTAATAAAGGACGATACTTCCAAAAA
-AGCCAACTTCGGTCAGATGTGACACGGAAAAATGGGAAAAATTCGTGATT
-TTAGCCAAAATCAGTGTAATTTTTTTCAAAATTTTGAACCGCCATAAAAG
-ATTTTTGAAAAATTTTTGAGCAGTTTCATTACGAAATTCATTTAAGTATA
-ATCATGAGCGGGTTCAGAGAGATTTAGGAAAAATAAAATTTCCGGGTCTC
->CHROMOSOME_MtDNA
-CAGTAAATAGTTTAATAAAAATATAGCATTTGGGTTGCTAAGATATTATT
-ACTGATAGAATTTTTAGTTTAATTTAGAATGTATCACTTACAATGATGGG
-GTTTAAAATTCTATAGTAAAAGTGTTTTTTGTTTTAGCTGTTTTAAGTAG
-GATTATTAGATATATTAATATTGACCCTATAAAAAGAAGTTTTTTTCTTA
-TCTTTTCACTACTTTTTAGTATACCAGTTATTTCAATGAGAATACATATT
-TGGTTTTCTTACTTTATTTGTTTATTATTTTTAAGTGGTATTTTTGTTAT
-TTTGGTATATTTTTCTAGTTTATCTAAAATTAATGTAGTGAAAAGTTATA
-TAGCTGTGTTTTTACTTTTGTTAAGAATGTTATATTTTTCTCCCACAGTA
-TTAACTTATAGAAGATATTTAGGTTTAAGAGGTTTTTATTATAGTATTTA
-CTGGTTTATTTTTTGTTTTATTTTAGTATGTTTATTATTTTTTATAAATT
-TTAGTAGTTATTTTTTAAATTTTTCAGGTGCTTTACGTAAAGTTTAAAAT
-TATGTTTTTATTTGTTAGATTATTTATATTTATTTTTAAATGACAACGTT
-TAATTTTTATTCTAATTTCTTTAGAATTTATAATGTTGAGATTATTTTTA
-AAATTTTCTTATGTTTTAGGGGAAATAATGTTTTTTTATTTTATGTGTTT
-TTCTGTTATTTCAAGAATCCTGGGTATGGTAGTTATAGTAGGTAATATAA
-AATTTTTTGGTAGTGATAATTGTATTTTTTAGTAACAGATATAAGTTAAG
-TTTAAACTATTGATCTTCAAAATCAAAAATTTATTTCTGTAGAGATAATA
-GTATAAATAAGTATGTTTCTTTTTCGCAGAAATGGTTTTTTATCTTATAA
-AGTTTTCTTTCAGGGAATTAAAATTTGATCATGGTTTAAGATGATTTAAA
-ATGGTATTATCTAAATTTGATTTACAGAGTAGGCAATAAAAATTTACCTC
-GGCAATTTATCGCTTGTAAAATACTTGTTCCAGAATAATCGGCTAGACTT
-GTTAAAGCTTGTACTTTAATTGATGTTAATTATGAAATTATTATATTTTC
-TTTTAGATCTATGGTAGAATTTGGATTTATATTAGTGAATTTTCATAATT
-TTAAGATTTGTTGAACAAAGCAGATTAGTACCTGGTTAGACAAAAATTAA
-AAGAGCAGGAGTAAAGTTGTATTTAAACTGAAAAGATATTGGCAGACATT
-CTAAATTATCTTTGGAGGCTGAGTAGTAACTGAGAACCCTCATTAACTAC
-TTAATTTTTTGACTCGTGTATGATCGTTTATTTTATTCTTAAGGATTATA
-ATAAAAAATTTTTAATTTATTAAAATAGATATATACCCGGTTTATGATTT
-AAGAAACATTTGGCCTACAATATTTTATATTATGGATTTTAGTTTTAGTT
-AACTAAATGAAATTGTAAAAGACAGTAAAAAATTCTTAATGTATTTTTGA
-AGATTATCTAGAAGTGGTACAAATCATCCATCAATTGCCCAAAGGGGAGT
-AAGTTGTAGTAAAGTAGATTTAGGGGAACCTGAATCTAGTAATAAAACTA
-TTTTTAAATATGTTTTGAAAACATGTTTTGAGGTAACTCGTAGTTTTTAA
-GAGTTAGTTTAATATAGAATTGTTGACTGTTAATCAAAAGGTGTACCTCT
-TAATATAAGAGTTTAGTTTAAGTTAAAACGTTAGATTGTAAATCTAAAGA
-TTATTGCTCTTGATAATTTTAGTTTTACTTATAGTTATTTTAATGATGAT
-TTTTATTGTTCAAAGAATCGCTTTTATTACTCTATATGAGCGTCATTTAT
-TGGGAAGAAGACAAAATCGTCTAGGGCCCACCAAGGTTACATTTATGGGA
-TTAGCACAAGCTTTATTGGATGGGGTTAAACTTTTAAAAAAAGAACAAAT
-AACACCCTTAAATTCCTCTGAAGTATCATTTTTACTTGTACCAGGAATTT
-CTTTTGTTGTAATATATTTAGAATGATTTACGTTACCATATTTTTTTGAT
-TTTATTAGTTTTGAGTATTCAGTTTTATTTTTTTTATGTTTAATTGGATT
-TTCTGTTTATACAACTTTAATTAGCGGTATCGTAAGAAAATCAAAATATG
-GTATAATTGGGGCCATCCGTGCTAGAAGACAAAGAATTTCTTATGAAATT
-GCTTTTTCTTTATATGTTTTGTGTATTATTATTCATAATAATGTTTTTAA
-TTTTGTTTCAAAATTTAATTTGAGACTTTTAATTATTTACATCCCATTTT
-TAATTATAGTAATTGCTGAACTTAACCGGGCGCCATTTGATTTTTCTGAA
-GGTGAAAGGGAGTTAGTTAGAGGATTTAATGTGGAGTTTGCCAGAGTAGC
-TTTTGTTTTATTATTTTTAAGGGAATATGGAAGATTAATTTTTTTTAGGG
-TACTTTCTTCTGCTATATTTTTTAAATTTTCAATTTTTATAGCATTTAGT
-ATTTTTTCATTATTAATTTTTATTCGTAGTTCATACCCTCGTTATCGTTA
-TGATTTAATAATAAGTTTATTTTGATTTAAACTTTTACCAATCTCTTTAA
-TTATATTGTGTTTTTACGCAGTTATTTTTTATTATTAATCAAGTTTATTT
-TTTAGACATTTTTATATTTGTTTTTGTTTTACAATTTTTGTTTTATTTTA
-AAGAAAGTATATTAAATACTTTAGTGAAAAAATTTCTTAATAGGTTAGTA
-GGAGTATTTAGATATACAAATACTTTACCATTAAGGTCAGTAATTTCTAT
-TTTTACTTTTATTGTTCTTTTAACTTGTTGTTTTGGAGGTTATTTTACTT
-ACTCTTTTTGTCCTTGTGGAATGGTTGAATTTACTTTTGTTTATGCTGCT
-GTAGCGTGATTAAGTACTTTGTTAACTTTTATTTCAAGAGAAAAATTTTC
-AGTTTATATAAGAAAACCAGGAGACACATATTTGAAAACTCTTAGAATGC
-TATTAATTGAAATCGTTAGAGAATTTTCTCGTCCACTTGCTTTAACAGTG
-CGTTTAACAGTTAATATTACTGTTGGTCATTTAGTTAGAATAATGCTTTA
-TCAAGGATTAGAATTAAGAATAGGTGATCAGTATATTTGATTATCAATTT
-TAGCCATTATAATAGAATGTTTTGTTTTCTTCATTCAAAGTTATATTTTC
-TCTCGTTTAATTTTTTTATATCTTAATGAGTAATAAAAAAAAAAAGATGT
-TAACTTAAGTTTTAAAGTGCCAAACTTTTAATTTGGAAATGGTGGACCAC
-ATCTTAGTTGATATAGCATAAGAAGTGCATTTGTTTTAAGCGCAAAAGAT
-ATCCGTCAACTAACGAGTTCATAAAGCAAGTCTTCTAAATTTGTTCTAGG
-TTAAATCCTGCTCGTTTTTGATTGTTTTTATTTCTTTATTTACCTTGTTT
-TTAACATTATTAAGAATTTTGACTAATAACGTTATTGTTTGATGAAGAAT
-TTTTTTATTGATAACTGTAGTTTTTATTCTATTAAATAAAAGCAGCAAGA
-GATATACCAGAATTTTTAATTATTTTGTTATTCAAGAGTCTTTAGGTTTA
-TTATTTCTTCTTTGTAGAGGAGGTCTATTACAATTTTTTATTATTTTATT
-GAAAATTGGTGTAGCACCGCTCCACTTTTGAATTTTTAATGTAACAAATA
-ACATTTTTAATTATGGGCTAATGTGGTTTTTAACATTTCAAAAATTACCA
-TTTTTAACTATTTTATTACAAATTTTTTGGTTAAGATCCGTGTATATTTT
-GTTATTTGGTTTATTGATTTGTTATGTTCAAATTTTTGTCATAAAAAGTT
-ATAAAAATTTGTTAATTATTTCATCCACAGAGTCTTTTAATTGGATTGTT
-TTGGGAGTATTTTTTTCAATGTTTAATACATTTTATTTATTTATTTATTA
-CTTTGTATTAATAGTTTTATTAATTTCTAAGTTTTCTAAAACTAGGGGTT
-ATAATTTTATTAATTGAGAAACAACATTAGTATTTTTAAATATTCCATTT
-AGAGTTTCATTTTTTGTAAAAATTTTCTCATTGAGGGAAATTTTTAAATA
-TGATAGATTCTTTACTCTATTTTTGCTTTTTACAATATTTTTATCTGTAT
-TGGCATTTAGATTTTGATTAATTAACTTGAGAATGAAAAATAATGAAGAA
-ACTTCAAATAATAATAAAATAAATTATTTTATTATTTTTCCGTTAATAGT
-TATTTCTATTATTTAATTACTTTTCTAGTAAAATATATTATATTATCTTG
-ATAAGGTAAAGTTCCAGTTGGGAGAAGTAAGATGTAAAATAGATATTACT
-ATGTTTGGTTACGGTCCAAAAAGATGCACATCTTTGCGATCTAGTTTAGA
-AAAAATATTTGTTTTTGGTGCAAAAGAGTTTGATTGCATTTAGTTTACTC
-TTTTAGTTTATAATTAAAATATGGCCCTGAAGAGGCTAAGAATATTAGGA
-GTATTGAAAATTAATAATAGATTATTAAATTTTGTTAATGGGATGTTGGT
-GACATTGCCATCTAGAAAAACTTTAACATTAAGATGAAATTTTGGTAGTA
-TATTGGGTATAGTTTTAATCTTTCAGATTTTAACAGGTACATTTTTAGCA
-TTTTATTATACGCCCGATAGGTTAATAGCATTTTCAACAGTGCAGTATAT
-TATGTATGAGGTAAATTTTGGATGAGTATTTCGAATTTTTCATTTTAATG
-GGGCCAGGTTATTTTTTATTTTTTTGTATTTACATATTTTTAAAGGGTTA
-TTTTTTATAAGATATCGTTTAAAAAAAGTATGAATGTCTGGTTTAACAAT
-TTATTTATTAGTAATAATAGAAGCTTTTATAGGTTATGTTTTAGTTTGAG
-CTCAAATAAGATTTTGAGCAGCAGTAGTTATTACTAGACTTTTAAGAGTT
-ATTCCAATTTGAGGGCCAACTATTGTTACTTGAATTTGAAGAGGTTTTGG
diff --git a/src/test/resources/htsjdk/samtools/cram/ce.fa.fai b/src/test/resources/htsjdk/samtools/cram/ce.fa.fai
deleted file mode 100644
index 2ad2e7f..0000000
--- a/src/test/resources/htsjdk/samtools/cram/ce.fa.fai
+++ /dev/null
@@ -1,7 +0,0 @@
-CHROMOSOME_I	1009800	14	50	51
-CHROMOSOME_II	5000	1030025	50	51
-CHROMOSOME_III	5000	1035141	50	51
-CHROMOSOME_IV	5000	1040256	50	51
-CHROMOSOME_V	5000	1045370	50	51
-CHROMOSOME_X	5000	1050484	50	51
-CHROMOSOME_MtDNA	5000	1055602	50	51
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram b/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram
deleted file mode 100644
index 240df31..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram.bai b/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram.bai
deleted file mode 100644
index c168662..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryTest.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram b/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram
deleted file mode 100644
index 312f642..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram.bai b/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram.bai
deleted file mode 100644
index bfe6239..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryTestEmpty.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram b/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram
deleted file mode 100644
index 77a5ef2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram.bai b/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram.bai
deleted file mode 100644
index c44b7e9..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryWithBAI.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram b/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram
deleted file mode 100644
index 285c0a0..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram.crai b/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram.crai
deleted file mode 100644
index 2b6f632..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/cramQueryWithCRAI.cram.crai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/fieldarith.sam b/src/test/resources/htsjdk/samtools/cram/fieldarith.sam
deleted file mode 100644
index 180d1e8..0000000
--- a/src/test/resources/htsjdk/samtools/cram/fieldarith.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at SQ	SN:one	LN:1000
- at SQ	SN:two	LN:500
- at CO	For each SAM record that has each listed aux field, performs these tests:
- at CO	XQ is the expected result for bam_cigar2qlen()
- at CO	XR is the expected result for bam_cigar2rlen()
- at CO	XE is the expected result for bam_endpos()
- at CO	(Note that these are all zero-based, while POS is one-based in SAM)
-r1	0	one	50	20	8M	*	0	0	ATGCATGC	qqqqqqqq	XQ:i:8	XR:i:8	XE:i:57
-r2	0	one	100	20	50M	*	0	0	ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT	qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq	XQ:i:50	XR:i:50	XE:i:149
-unmapped	5	two	200	0	*	two	200	0	ATGCATGC	qqqqqqqq	XQ:i:0	XR:i:0	XE:i:200
-hascigar	5	two	200	0	6M2S	two	200	0	ATGCATGC	qqqqqqqq	XQ:i:8	XR:i:6	XE:i:200
-s1	0	one	300	20	2M	*	0	0	AT	qq	XQ:i:2	XR:i:2	XE:i:301
-su1	4	*	0	0	*	*	0	0	AT	qq	XQ:i:0	XR:i:0	XE:i:0
-su2	5	two	400	0	*	two	400	0	AT	qq	XQ:i:0	XR:i:0	XE:i:400
-su3	4	one	500	0	2M	*	0	0	AT	qq	XQ:i:2	XR:i:2	XE:i:500
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.dict b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.dict
deleted file mode 100644
index ca3f427..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:20	LN:200	M5:8ccb6b8284befc25d90a23637cad0bdd	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/cram/human_g1k_v37.20.21.0-100.fasta
- at SQ	SN:21	LN:200	M5:8ccb6b8284befc25d90a23637cad0bdd	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/cram/human_g1k_v37.20.21.0-100.fasta
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta
deleted file mode 100644
index 53a8bbd..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta
+++ /dev/null
@@ -1,11 +0,0 @@
->20 dna:chromosome chromosome:GRCh37:20:1:63025520:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNN
->21 dna:chromosome chromosome:GRCh37:21:1:48129895:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNN
-
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta.fai b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta.fai
deleted file mode 100644
index 0214054..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.1-100.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-20	200	53	60	61
-21	200	310	60	61
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.dict b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.dict
deleted file mode 100644
index 10aff59..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:20	LN:200000	M5:fcb26df26fe47f4b364854e8371e465e	UR:file:///home/chris/projects/htsjdk/testdata/htsjdk/samtools/human_g1k_v37.20.21.10M-10M200.fasta
- at SQ	SN:21	LN:200000	M5:f02fab23cf86525e5ce048774c66a23d	UR:file:///home/chris/projects/htsjdk/testdata/htsjdk/samtools/human_g1k_v37.20.21.10M-10M200.fasta
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta
deleted file mode 100644
index f77d885..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta
+++ /dev/null
@@ -1,5002 +0,0 @@
->20
-TTGTTTACTACAGCTTTGTAGTAAATTTTGAACTCTAAAGTGTTAGTTCTCTAACTTTGTTTGTTTTTCAAGAGTGTTTT
-GACTCTTCTTACTGCATCCCTTGCATTTCCATATGGACTTTATAATCAGCCATGTCAACTTCTGCAAGAAAGACAGCTAG
-GATTTTGATAAGGATTGTGTTGAATCTGTAGTCCAATTTTGGGAATACTACCATGTTAACATCGTCTTCCCATCCATGCA
-CGTGCAATAGCTTACCATTTATTTGGTCTTCCTCAATTTCTGTCAACAATGATTTGTAGTTTTCAGTTGCAAGTCTTGCA
-CTTCTTTTGTTAAACTTTTTCCAAATATTTATTCTTCTTAATTACATAATTCTCATAATTAATAAAATTCTGAAATTTTC
-TTAATTTCATTTTTGTGGCCATGCACTTTAAAACTTGCCTTTTAACAAGACTTCCAGATGATTCTTGTGAACATTAAGTT
-TGTGAAGTGCTTCTCTATTGACAAACTGAACTCACGTGACATTCCACACAGCACTGGCAAATTCTGTCCCGTAACTCCGC
-TAGCTCTCCAACAAGAAGTGACTTGACGCAGCCCAAGGTTACTACTTAACACAATGAATTAAATGTTTTTAAATAAGAGG
-AAGCAATAAGATTCTAAAGGCTTTTCTGTTTTAATTTTCATGCAATGGAAAACTGGTATTAAATATCTATTTAATTAGGA
-GGAAACTACAATGCTGACTTTTGTCTGAATTATGTAGATAAGTGATTCATTTGAAACAATTATTTTGATAATTGTCAATT
-ATCCATTTCATTTTAATGCATTTTTTATTCTTTTTTCAAAAATAGCAACAATTACAACAGTTAAACCTTATAATGAATAT
-GTTTCCTAAACCCTGTTCTACTTTCTGGTTCCAGATCTGACACCAATTACCTTTCTGATTTTGGACAAACCACTTAATAT
-TTGTAACTTACAATTACTTCAACTGAATAATAAAAGAATTGGACTAGATTTCTCCAACATCTCTCTCTTTTGGCTTTATG
-TTAGATAATGCTAAATTTTCATCATATCCAAACATGCTATATAATTTTATGAACTGTTACAGAGTCAGACATAAGCAATA
-TAAAGTATGATTCTGAATAAAGGCTGTGAAGTCTCGTTTTTCATACATAATTACAGGAACCGATCAAATTCAATAAAGCA
-TTTATAGTCATGACAATATATTCTCTTAACTTGCAATGTGGTTTTAGGAAACAATGAAACAAATTAAACAAATGCATGAT
-TCCTTAAATTTTGTTGACTCGGGATTTAGTTACATATAAGACTCTTTTCCCCCAGCCAGATTAACCCTGCTCTGTATATG
-TAATACGCATCTTCCCCCCAAATTTCACAATAATAATTTTATGAAAATCAGTATGTAAGTTGCTGCATTGGCATGAAAGG
-CTACTAATGTGATATCTTTCAAAGATAAAGTGAACGTTTTTGTAAAAAGCCACCACACTGGAGGCATTTAACAATATTCA
-TCTTCCTATGGCATTACTACCCTAGATGTACTTTGCAATATTAATCAAGCCTTGTCTTACTTCAGGCTTCCTAGAAATAG
-AGCACAAGGCAGGGATTCTTTCTTGCTCGGTGATTTATTGAGGAAGTGCTCTCAGAAGAAATTGGTAAGATGCTAAGGAG
-AACAGCAAAGGACAGGAGAAGGGGGCTGAGCAGAGATGGGGATCTAACTGGAATCTGGCCTTTGCTGATTACCAGAGCAG
-CTCTGGGTGCGAATGGTGAAGTGCTGTTCTATTGACAAACTCCACTCAAGTGACATTCCATGCAGCACTGCCAAATTCTG
-TCCCATAACTCTGCTAGCTCTTCAACAAGAAGTAACTTGAGGCAGCACAGTTACAGAAAACAGCACAAGAACCAAGGATA
-CTAAACAGTGACTTAAATGTTTTTAGATAAGAGGAAGCAATGAGATACTATAGGGTTTTAATTTCTGTGCAATGGAAAAC
-TAGTATTAAATATTTATTAATTAGGAGGAAACGACAATGCTGACTTCTGTCTGCATTATAGACAAAATTGAGTTCTCCAA
-CCATGAGGCAAGGTGCTGGCTTTTTGTACCCCTGCACTATTCATTTGATGGGTGAGTGCACTGTAACTTCCAGACGTCTC
-TTGGTAGGTGGGCCCCACTGGCCAAGGGCATTTCCCGGGAGAGTGAACGGCTGTGAGCTACTAGCAGTAGCAGTCACAGC
-AGCTGGGAGGAAACACACTGGTCAGGTAAAGGGCCAGCATCTACCAAGGTCCAGTTCCACAATTAGTGGAGAAATATTTA
-ATAACATTATTTTTGAAAATAATTAGGCCATATGACTTTGACACTTTTTCTCTAGCAAAGTGACTAAAGAGAAGCAGGTT
-TTTAACTGGGTTTTTATTTCTGTTGTGTCTCTAGCCAAAGCCATGCTGATGTTTGATAGTTTTTTTTTTTCTTTTTTTAA
-GAGATGGGGTTTCACCATGTTGGCCATGCTGGTCGTGAACTCCTGACCTCAATGGCCTCCCAAACTGTTGGGATTACAGA
-CGTGAGCCACCACGCCCAGCCAGAATTTTTTTTCCTAAAGAATAGAACAACATTATAAAATTTTAGGCATTAAGGACAAA
-TTTTATTTTATGATTTTCATTTCGGTGAGTCACAAGATATTCAACACAAAATGAAACTTCACAAAATTTCACAAAATGAA
-AAATTCATTTCAGATTCAATATCCACCTCCATCATCCATATTCATTCTTCCAATGTCTCAGGCCAGAAATTTGGAGTATG
-TGGCTTCTCCACCTCACACAATTTGCCCTAACTTTAATATATACTCAGAAATTACTGGCTTTTCACTGTTTCTATGATTC
-CCATGTGTAATATACAATACTCACCATGCATACAATAATACAATAATTCTGTGTCACAACCACACCTAAATTGGTAAGTT
-TATAAGGTTATAAGCTGAGAGGTTTTGCTGATCTTGGCTGAGCTCAGCTGGGCAGGTCTTCCGGTCTTGGCTGGGGTTCA
-CTGACACACAAGCAGCTGACAGTTGGCTGATCTAGGATGGCCTCAGCTGGGATGACAGGCTGTTTCCTCACCTTCCAGCA
-GGCAAGCCAGTCCCAAGAAAGAGAAGGGTGAAACATGGAGGCCATTAATTGAGCCCATCGCATGAAACGCATCTGTGACA
-CCATCACCGTCTGATATCAACTCTCACCTGGATGTTTGCAATCGCCTAACTTTTCTCCTTTCATTCACTATGCTGCCTTA
-CAAACCTATTCTCCACAAATCAGCTAGAGCAAACCTTTTAAATCCTAAGTAGAATGCTACCATTCCTCTGCTCAAACTAC
-TGGAGAGGAGATGCCACAGTCTTTACTATGGTCTTCAAGACCCTATGGGAGGTAGCCCTGTCTTACAACCATAGCCTCCT
-ACCACTGCCCCAACATGCACACTGAGTTCCGGCCACAGCATCTGCTTCCTCTTTATTGATCTGCCAAGGACATGAATGAC
-TCAGAATCTCAAACTTATTCTTCCCTCAGAATCCACTGAGCCTACTCCCTCTTTTTCTCAAATGGCAACTTCTCAGAGAT
-GCCTTCTCTGGCTAACGTATATGTACTAAAACCTCCATCCAGCACTCTATGTCATCCTTACTATGGTTTATTTTTCTTCA
-TAGCACCTATCAATTGGTGAAGTATTAAATATGCATTTTTGTTTGTATGCATCTCTCTCCCCGCACCAGTATGTGAACTC
-CACCAGACTGGAGAGCGTGTTTATTTTGTTCACTGCTGTAACTCCAGTGTCTAGAACAGTGCCTGGCACACAGTAGGTGT
-TTAATAATGATTTGTTAAGCTAAGCCAATGAATAAATATTCTTTTGCCCATGAGATGATGTTAAAAATTTTTCAATTATT
-CATAACTGCCTGTAAGGAATGAATGTTAGTGAATTACTGTGATACCAATGAAAGTTAAATGATGCAATGAAGATTGGGTG
-GATCACAAGGTCAGGAGTTTGAGACCATCCTGGCCAATATGGTGAAACCCCGTCTCTACTAAAAATACCAAAATTAGCTG
-GGCATCGTGGCAGGACCCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATCGCTTGAACCCAGGAGGCGGAGGT
-TGCAGTGAGCCGAGATCACGCCACTGCACTCCAGCCTGGCCGACAGAGTGAGATTCTGTCTCCAAAAAAAAAAAAAAAAA
-AGATGTAAATATTATTATTGTTTGCCATCACCCTTATGTGCTGTCTTGGCTTTATGTCGTGCTTAGATCTTTTCCAGGTG
-CAATTTGAATTGATGCAACTAATGGAAACTACAACAGAAGTTCATATTGCCCTATTGTATTACACTATTTGACTCATCTT
-TCAGTATCACCAGGTGCATAAGGAAAATTTCAAAAGTAAATCAAGAGAAAGAAATATGATCGCAGCTTAACACAATGTAA
-ATTTATTATTTGTACTTTTTGTCTAAATGGTTTGCCTAAAAGACTGAAAGACATTTTATATTAGTTAGAATACTTGAGGA
-TAATAACATAAAAACTTTCCTTTCCAACTTGTTTATAAAAGGAAATCTTCACTGTTTTGAACATCAGTTATTTTAAACTT
-TTAAGTTGTTAGCACAGCAAAAGCAACAAAATTCTAAGTGCAGTAATCACTTTACTGCGTGGTCATATGAAATCAAGGCA
-ATGTTATGAGTATTACTGGAAAGCTGGACAGAGTAACGGGAAAAGTGACTAAAACTATGCAAAACTATGCAAAACTAAGC
-AGATTGTGTCTCTAGAGTATTTCCCATCTCAAGTTTAGTTATTTACTAATTTGGCAACATCTGACCTATCTTTAATTGTG
-AGAAAATAAACAAACACATAAGCCAACTCTCAGAATATGGTTATACATAGGTGTAGCCTATGACTTTGAATGTATTTGTT
-TGAATAGCGTAAAACAAAATAAAAATAAAATCTTGTTACAGTGCAAGAAACGGCAGTCATCAAACTAAGATGAGGCAAGT
-GTCATGAAGTATGAAAATATGGTACCTGAATTCTATTTATTAGAAAGTCTTCACTGAGCTGAGCATGTTTTTTTTAACAA
-ATTCAATTACTGATTTGAATATTTATTATACTTAATTATTGCAGCCATGAAAAGAGGTGCTGGCTGAGGCTGCATTTAAT
-AAAAACATTTAATCAGCTTGAGGTTAGTAAACCATTTAATTTGTTTTTTCATGAAGATTTAACTTCTAGAATAATTTCAT
-TTATGTATTTTTAGGTATAGCCCTAGATTCTGGTCTACATAGTATACAAATCATTTTAGAATGACACTAGGTTATTTCAA
-CTGCTTTTCTACAGAAGTGTTAAATAAGGGAGTAAAGTGTTGGCTTTTTCCATAATTGAAATAAATGCACAATGAGCAGT
-AACATCCTGATTTCACTGCTATTTTGTTTAATCAACATAATGATGTAGATTTACTCTGTATATATATGGAAGAGTGAAAG
-AAGGTTGGGAAGGAATAACTATCAATTAATATAGGTGATATAGTAGTTATTTTTGCAAATCAACTATAATTTCTGAATGG
-ATATTCAGACCATATTTACATTACATAGAAGAGGCACACACCAAAAGATTTAACAAATGTGCCAAATATTGGTGAATATT
-TAGTTAGGTACCAAAAGGATGTTGTATAAATTAGGATGCTTTCAACCATAAGAGACTCATCTCAAAAATGGCTTGAAAAT
-GTGGGGAATTTTTATCTCAGTGTGAAGTTAAAGGTAGGGCAAGTCCAAATCAATTCAAGTTAATTAAAGCCCCAAGTTCT
-TGGAATTTGCTCTGCTAGTCTTAGCTGGTTAGCCTTTGTCCTGAAGTTTGTAACTTCATGACCAGAAGATGATCGCAATA
-TTTTCTAAGTATAAAGCCTGAAGGTGTAAACCAGGTAGTCTCAGCAAAACCAATGATGCATGGTCACCTTTCCCTTAGTT
-GACAAATACTTGCCTTCCAGATACTTTGAATCAGAATGGGCATTTTAACTAAGATCCAGTGCAACTAAAGGAATAATCAA
-ACAAATGATAAAATAATTATTCTGAGCTGAAAACACAAGTCTGAATATTGGAAGAGGTTCCTGATTTCCAGGCAGAATAG
-ATAAGCAAAGATATCAACCTAAACACATCCTGGTTATAGTCTAAAATTTAGAGAATAAATGGGAAAAGATTATGAACTTT
-AAGGAAGAAATAACAACTTACACATAAAACAAAAAGGAAAAACTATCTGTTGACAGATTTATCACCTGCTAGATAAGAGC
-AGAATAACCATTCACTAGGAGAAAATGGGAGAAGCTAGAAGATACTGGAGTAATATTTATAGAGTACTGAAGAAAAAACA
-AAAAACAGAAATTCAATACACAGCTAAGATATCATTTACCTGTAAATGATACATGGTAAAATAAAGGGTAAAATAAGGAT
-ATTTGCAGATTCACAAGGAGAAGTTAGCCTTCACATACTCAGCTGAGGAAAATCCTAGAGACAAAACTCTAACAAAAACA
-AACTAGCCGGGTGCAGTGGTGCAGGCCTGTAGTTCCAGCTACTCAAGAGGCTGAAGTAAGAGGATCACTGGAGCCCAGGG
-GTTCTGGGCTGTACTGTGCTATGCTGATCAGGTGTCCACACTTAGCTCGCCATCAATATGATGACCTCCCAGGTGGGAAA
-TGGAGCAGGTGAAAACTCCCATGCTGATCAGTAGTGGGATCATGTCTGTGAATAATCACTGCACTCCAACTGGGAAACAT
-AGCAAGACCCCATCTCTAAAAAACAAACAAACAAACAAACAAACAAACAAAAATGTTTCAGACAAATGTCAAGATAGAGT
-AAAAGAAGAAAGTACTGAAGGCCCTTCAACATAAATTGGATCAGATAATAAAAATAATAGCAAAGTTCTTTTCATGCTGT
-ATCCTTAATTCTTCACCATAATCTTAGGAAGTGAATGTATTAATTATCTTTTGCTATATAACAAATTACTCCCAAAACTT
-GGCGGCTTAAAACAACAAATATTATTTCACAATTTCTGTGGGTCAAGAATTTGGAAGTAGTGACTCTGGCTCAGGGTCTC
-ATTTAAGGTGGTAGTTCAGGATGCCAGTCAGGGCTGCAGGCACTGAGGCTGCTTCCTCAATGGCCCACTCACATGGCTGT
-TGGCTGGAGGCCTCTCTTTCTCACCACACGGGCCTCTTCATAGGACTGCCCGAGTGTCCTTACAGCGTGGCAGCTGGCTT
-CCCCCAGAGTGAACATTCTGAGAGAGAGAGAAAGAGAGAGTTAGAAGGCATGCTGTCACTTCCACTGTATCCCATTCACC
-AGAAGTGAGAGACTAAATTCACCAAACAGAAAAGTGAAGGAGAATGAGGCTCCAGTTTTTTGGGTGAGAGTTGAAGAATG
-TATGGATATTTTGAACAACCACAATATAATTCTTCTTTTCACAGAAGCACAAAAAAATTTATTTAACTTGTCCAAGTTTA
-CACAGTTAGCAAGCAACACCTTTGAGAAAAAAATCCATGTAGTCTGATACAAGCACCCAAACTCATAACCACAATGTGAA
-TCTAACTGCTTTTCAATTAAAAAAGAAAGAAAGATTCCCTTCAAATCTGGCATATGCATTCACATGGAGCATTCATACTG
-CCAGTGACAGTACCATAGTTATATGGAATTAGAAGTTCTAACTTATCTTGGCCAAACTAAAGACTTAGGGCTGGGTAGAA
-GGTTGGAGGGATGTAAGGTCATTCTCAAGATCTCATCTAGGAGAAGAAAACAAAATGGGGAAGTAGAAGACAAAATGCTT
-TTTTAGGTTGGGAAAGGACTGGGAGAATCAAGCATCTAGAAATGGGCACAAAGAGTTACCTTATTTTATTTAAAAGAAAA
-TAAATGTTTGACTATTAATGCCTGAGAACGGAAGGTGATTATTAATGAGATGAAAAAGTTAATCAGATTCTCCAAGTTAG
-GAGGGACTTGAAGACCAAATTGATAAAAATAAAAAAAAAGATGTCATAGTAGAATAATCTAGATAATAAGCAATCAATGA
-GACTGAAAAAATAAAATCAAGTATATCATTTGTTACACTAAATATTAATATACCAGATTCTCTCATTAAAAAAACAGAGA
-AAGTCAAATTGGATTAAATAAGAACAAAAAGTTAGCTATATAGTATTTATCAGAAACATTCTTATAAACAAATTGATAAT
-GAAAGATTAAAAATAAGAGATTTGAGGCAAGGCAAGCAAAAAGAAATAAATGTTAAACAAGGAGAAATTAAAGGCTACGG
-ACATTACCTAAGGAAAAGGATGACATAGAGTTACAGTGGCAAAAGTTAGGAAGCAGATGACATAAATCTATATGCACAAA
-CAGTATGGCCACAAAATACATTAATTAAAAATTACTAGAAATATAAGATGACTTTGATTAAAATACACTGATTACAAGGG
-ATTTAACATATAAAAATTAGGCTGATGTGGTAAATTTAAATATAATCAAATATTTAGGAAAATAGAACAACACAACAAAG
-TTGATTACATATATTCATTTTCCAGATAGTATACTTTATGCCTATGAAATAGTTCTTAAAATCAATTATATATGGCCGGG
-TGCAGTGGCCCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCAGGTGGATCACGAGGTCAGGAGATCGAGACCATC
-CTGGCTAACACAGTGAAACCCCGTCTCTACTAAAAATACAAAAAAAAAAAAAATTAGCTGGGCGTGGTGGCTGGAACCTG
-TAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGCGTGAACCCAGGAGGCGGAGCTTGCAGTGAGCAGAGATTGCA
-CCACTGTACTCCAGCCTGGGCGACAGAGTGAGACACCGTCTCAAAAAAAAAAAAATCAATTATATATTTAAACACACACA
-CACACACACACACACACACACACACACACACACACACCTTTTCTAAAAAATCGGGATTTAATAGACATATTATCTGATCA
-TAGGCTGTTGAAGATAAATGATTTAAAGGTGGCCTAAAGTTTAAGTACTTGCAAATTAAGAAACATCCTCTCCACATCAA
-AGAGAAAATCACAACTAATGTTACTAATTTTCTAGGAAGCAATTTAAAGAACACTAAATCCAAAACCTATGAGACACAGA
-TGAAACTGTGTTCAGGGGAGAATGTATAGCCTTAAATGCTTACATTAATAAAGTAAATGAAAGAAAAAAATAGTTTTTAT
-CCTAGGAAATTAGGAAAAAAGCAAATGAAGTGAAATATACTACTAAGAAATAAAGGCAAAATTACTGAATTTCATGAAAT
-AGAAAACAATAAAATATATTAGAAAGGATAAAAAGGATTTTAAAAATCTGCTCTTTTAAAGAATCTGTAAAACAGAAAGC
-CTTATGGTTCAGATTAAAGAAAAAAAGTTTGTGTACGTGTGTGTGTATGTATTAAGAAAGGAGATATAACTTCACAATCA
-AAGAAGTTTCAAAGAATTGCAGTTACATGGCAATAAATTTGAAAACTGAGAGGACACAGAAGATTGTGTAACAAATTACA
-AATAATGAAAATTGACCTTATTCTGAAGTAGAAAACAGGAATAGATCAAGTTTCATGCAAGAGTTTGGAAAGATGATTAA
-AAATGTACCCTCTAAAGAGCAAGCTGGGCATGGTGGCTCATGCCTGTAGCCCTAGCTACATGGGTGGCTGAGGCAGAAAG
-ATCACTTGAGCCCAGAAGTCCAGAAGTTCAAGGCTACAGTGAGCTATGATTGTGCCAGTGCCCTCCAGAAGAGAGAAAGA
-AAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAAGAAGGAAGGAAGGAAGGAAGGGCAGAAAGCAGA
-CCAGACCAGATTTCATAGCTGTATTCTGTCTATCCTTAAAGAATAAATAGTTCCACTTATATTTTAAATATTCTAGACGA
-CAGAAGAAGGAGGAAAGTTCTTAGGAACCGATAAGAGAATTCAGAAGAACCAAGATTCAGTAGCCTACAAAGAATGAAAA
-TATGCTCATAGCAAGACAGCTTTTGAGATATTTATTTCAAATTCACAAAAACTCCCCCATGCAATCTTAAAGAGGCTTTA
-CTTTATTTAAGCCAAAGAAAAGTGCAGATCCTGATATGAATATATTTATCTACAAAAGGCTCATATTCTGAAGTAATACT
-ATTCAACTCTCATTCATTCAAGAGCTGTTCTGTAATTGTTCCAATATAAAGGAGTCAAAACAATTTCTTAATGGAAGTAT
-TAAGTAGTGCTCTATGTTGTCAACTAATTTATTTCCCATTTCAAACATTAGTTGACATGTTTTCATTTCTCTTTTGGAAG
-GAAACAACTAAATATGTTATCAATCCATCATTTACTTGTACAATAAATAAAGTTCTAAATCACTGCACAGTGTAAAATGG
-CAAATAGACTTCCCCATAACACAAAGCCATCCTGAAAAGTTTTGTTCATTTTAGAAGAAAAAATTTTAAAACCTGAGCAC
-CATAGGATATGAATTTTGTAAATAATTATGAAAAGAAAACAACAATAATAAAACTCTACTAATCTTAGCTCGATCTTATA
-AAAAGTTCCATAATGAGTAATCAAATTTTATTTCCAATTAAATATGTTATCACCCAGTAGTATGCCATACCAGTTTCTAA
-TTCATACTTCAATTATCTTCTAATTTAAATTAATGACTATAATTGCTGTTATAAAACAACAGCTCTATAGCCTGCTATTC
-AGACCAGTAAATAAGAGTTTAAGGGCTTGTGATAGCAAATGAAGTTTCTTATTGGATTTTAAGAAAAATTTTTATAAAAA
-TATGTGAGGTTATTCAATAGAATCACATTTAATTTGCCAAGCATTTTGCAGAATGCCTAGGACTATGTAAGAAGTATTAA
-ATTTGCAAGCCCTTTGAATAGTTGTAATTTAAAGATAAAAATTGGTTTAATACCAGACAAAGATAGAAGCACAAGTTAGG
-TTATTAGAGAATTTAGCCAGTGTATCAGTTTGTATCGTAAGTCATTGGCAAGAACAACGTGTACTTTTCTGTCACCTCCC
-AACTAGCTATGTTTTGAGCAGTAGGAATATTTAATACCCCTTCCTCCCATTTTTCCTTTGTGTTGTCCAAATTCTGACAA
-CTCTACTGCCAGATAGCTCAGGGCAAAAATGATAAAGTTCAAGTTAAGAAGGCTCTGCAGTGTTCTCAGTTCTCCTCTGG
-TGAAAGAGGAGAAAGGTTGTGTTTAATTATGAATCTGGGATTTCCAAAACTTTACCCATGCCCTGCCTGTCCCCTCATTA
-GCATGAAGCTGTTATTTAAATAGTTCAGCAATAACGACTTTAGTAGCCTCCCTAGGTTAAAAAGATTGAAATTAAATGTG
-TTTATCTATTGTTCTACTATTCAGTTACCTGATTATAAAATCAAAGATTATTTCATGAAACTCAGTACCCCTTCAGGGAA
-AAAAAAAAAAAATTCCCTAAAACAAAGTTAGGAGAGTGAATCGGACCACATGCTTATCTCCAAGGTCTCAATCAAACAGC
-AAATGCTTACCCAACTTCTATTCAAAATATTTGCGCCAGTAGTTCTGATATGACCCAAGCAGAGTTCACACATTATTAAT
-CTACTCCTTTCAGTCTTCTAGATGTGTTTCCTCCAAAATCTACCAGATTCTCAAATAATTTCAGGAACTTTCTCCAGAAC
-AGAAACAAGGTTGTTACTGATACCAACTTTGTCTCCAAACATGGGGAAGATTATCATTGGAAAGATCTATTGATGACCTA
-TAATACATAGTTGGAACTGTTTATCCACAGAAGTATTCCCCAAGAATCAACCACAGAGCCAAGATGGAGCTTATGTCATT
-GTTATGCATACTTCTTTTACGGCTTGTGAGGGCAGTTCATACTATTCTGATTTTACAACTGAGACCCAAGGAACCTGAGT
-GACTTCTAGGCTCCATTATGTCAAAAAAAACTCAAATGTGAGGCTTTGCCTACACTGAGAAACAGTAGTTCAAGAAACGG
-TGCCCTGGTTCTGTTAAAATAATCTGAGAGTTATGTGGTAAGTAGTTGAGAGTGAATAGGGTAGCTTTGAGAGGTGACAG
-CGTGCTGGCAGTCCTCACAGCCCTCGCTGGCTCCAGGCGCCTCCTCTGCCTGGGCTCCCACTTTGGCGGCACTTGAGGAG
-CCCTTCAGCCCACCACTGCACTGTGGGAGCCCCTTTCTGGGCTGGCCAAGGCCGGAGCCGGCTCCCTCAGCTTGCAGGGA
-GGTGTGGAGGGAGAGGCGCGAGCGGCAACCGGGGCTGCGCACGGCGTTTGCGGGCCAGCTGGAGTTCTGGGTGGGCGTGG
-GCTTGGCGGGCCCCGCACTCGGAGCAGCCGGCCAGCCCTTCCAGCCCCAGGCAATGAGAGGCTTAGCACCCGGGCCAGCA
-GCTGCGGAGGGTGTACTCCGTCCCCCAGCAGTGCCAGCTCACAGGCGCTGCGCTCAATTTCTCACCGGGCCTTAGCTGCC
-TTCGCGCGGGGGGTGCTCGGGACCTGCAGCCCGCCATGCCTGAGCTCCCACCCCCTCCATGGGCTCCCGTGCGCCCGAGC
-CTCCCCGATGAGCACCACCCCCTGCTCCACGGCGCCCAGTCCCATCGACCACCCAAGAGCTGAGGAGTGCGGGCGCACGG
-CGCGGGACTGGCAGGCAGCTCCACCTGCAGCTCTCGTGCGGGATTCACTGGGGGAAGCCAGCTGGGCTCCTGAGTCTGGT
-GGGGACGTGGAGAACCTTTATGTCTAGCTCAGGGATTGTAAATACACCAATCGGCACTCCGTATCTAGCTCAAGGTTTGT
-AAACACACCAATCAGCACCCTGTGTCTAGCTTAGTGTTTGTGAACGCACCAAGCCACACTCTGTATCTAGCTACTCTGGT
-GGGGCTTTGGAGAACCTTTGTGTCCACACTCTGTAGCCAGCTAATCTGGTGGGGACATGGAGAACCTTTGGGTGTAGCTC
-AGGGATTGTAAACGCACCAATCAGCGCCCTGTCAAAACAGAGGACTCGGCTCTACCAATCAGCAGGATGTGGGTGGGGCC
-AGATAAGAGCATAAAAGCAGGCTGCCTGAGCCAGCAGTGGCAACCCGCTTGGGTTCCCTTCCACACTGTGGAAGGTTTGT
-TCTTTCACTGTTTGCAATAAATCTTGCTGCTGCTCACTCTTGGGGTCCACACTGCTTTTATGAGCTGTAACACTCACTGC
-GAAGGTCTGCAGCTTCACTCCTGAAGCCAGCGAGACCACGAGCCCACCAGGAGGAACCAACAACTCCAGAAGCGCCGCCT
-TAAGAGCTGTAACACTCACCGTGAAGGTCTGCAGCTTCACTCCTGAGCCAGCGAGACCACGAACCCACCAGAAGGAAGAA
-ACTCCGAACACATCCGAACATCAGAAGGAACAAACTCCAGATGCGCCACATTAAGAGCTGTAACACTCACCGCGAGGGTC
-CCTGGCTTCATTCTTGAAGTCAGTGAGACCAAGAACCCACCAATTTTGGACACAGTTTGACAATAAATTTACACTCAAAT
-ATCTCTAAGGAATCAAACTTACAGATTAATAATTAGTAATCAGGTCACGTAAAGTAAATTATAAAAGAGCATTGATACCA
-AGATTGGCAGAAAGTTTTTTGTGTGACAAAACCAAGTTTTGGCTAAGATACACACTGCTGATGGGAGTCTAAATTGCTGT
-ATATGTCGGGAAAACAAGTTGTCTTTATCTTGATGTTATAAATAACCTATGACCCAGAAATTTAACTCCTAGACATATAC
-TCTAGTGAAACTCTTGAACGTGTGCGTCCAAAGACATTTATAAACATGATCTTAGTAGTATTGCTTTTAGTAGCAAATTC
-TGGAAACATCCCAAATGTCTATCAATAGTGGAATTGATTTGAAAGGGGTGTGGAATGGTAATATAATGGAATAGCCTACA
-GCTGTTTAGATAAAGGAACTCCAATTAAACATACCAACAAAGATACATTTCAAAAACAAGACGTTGAAAGGAAAAAAGTC
-ATCAAAACAATACACAACATTCTACCACATTTTTATAAATTCTCAAAATATGCAATATTAAACATGCATTATTTAGGGAG
-GCATTCAATGTAGCAATGCATTTTTAAGAGGCTGGGATGATAAATGTAAAATTCAGAACAGGTATTATCTCTGGGAACAG
-GAAGAGGAGGATGCAGTGTTGGGAAGAAATACATATAAGTACAGCAGTAGAGGCAGACTTTTTTTTCCTTTTCCTTTTTC
-CTTTATTTTTCCTAGCTTTCTTTTTCTTTAGCTATGGTATTTCTTTAGCTATGGTATGGTATGGTATGTACTTTCCATAT
-ATCATACAGTATATTTTGGTGTGCATGAAATAGTCCTTAATAACATTTTTATTATTTTTTATTTGACGTTTAAGTTCAGG
-GGTACATGTGCAGATTTGTTATATAGGTAAACTTGTGTCATGTGGTTTTGTTGCACAAATTATTTTCTCACCCAGGTATT
-AAGATTAGTACCCATTAGTTATTTCTCTTGATCCTCTCCCTCCTCCCACTCTCCACCTTCTACCCTCCAATAGGCCCCAG
-TGTGTGCTGTTCCCCTCTATGTGTCCATGTGTTCTCATCACTTAGCTCTCACTCATAAGTGAGAACATGCAGTATTGGGT
-TTTCTGTTTCTGCGTTAGCTTGCCAAGGATAATTGCCTCCAGCTCCATATTCCTGCAAAAGACATAATTTTGTTCCTTTA
-TATGGTTGCATAGTATTCCATGGTGTATATGTACCGCATTATCTTTAGCCAGTCTATCATTGATGAGCACTTAGGTTGAT
-TCCATGTCTTCGCTCTTAACATTTTTAAACAGTCTCTGAGTAGAATAGGGTAGGCTGGTGTAAGGAATTACTGTTTTTAA
-TTGGAAGCAATTACATACTGCATTAAAAAGCATATATATATAGACACACATATATATGTTTTACATTCACATAATCAAAC
-CAAAGCTTTCAGAATTTTCCGCCAAAAAGCATGTGTGGAGGGAGAGAGAGGGGTGTTATGGTGCATTTGTAGGCCCTGAA
-ATAAAGTGATCTCCATATTTGCTTCCATTTGTGTATAAATATTTTTTAAGCATATATGCATCCTAGAGTATGGAAAGAAA
-ATTTCTGGGAAGATTTGCAAGAATCTGTGGCAGTTGAGAGTAGGTTCACTTTCGCTTTATTGTGTAATTTATTGTATTTT
-TCATTTAATTGTACTTTGTAAACTAAATATTTATTGTATATTTTACTTCATTTTTTAATTGCCATATGCAGCTTTAATTT
-TATAACTAAATTACGTTCTGACCCAGGGCAGGAGGTGGGAGAAGAGAATGAGAGAAGGGCGGAATCCTCAAGACAGCAGC
-ATTCTGCGCTCCGCCCTGGAACACCCAGCGCAGCTACCCCATCCCGCCCAGGCCGGCCACCTGGCGTCGAAGCCAGGCGC
-GAGGGGCGGAGGCGGAGGCGGGGGCGGGGGCGGAGGCGGAGGCGGAGGCGGAGGCGGAGGCGGAGGCGGAGGCGGAGGCG
-GAGGCGAGCACCGCCCCACCGCGCACGCTGCGGTTGCCCCGGCAGCCGCGCCCTGCGTGGCGGAAGCTCACAATCAGCCC
-GGTCCCTCCGGCTTCCACCCCGCCCCCTGCGCTCACCTGCCCGCGCGCTCGCCTTCCGGGGACCCGGGGCCCATGGACAC
-ATACACCCAGCCCTGCTGTCCCGCGCGCCAGCTCACCAGCCCTACCCAAGGGACATCATTCACGCCTGGGCGCCTCCGCC
-GGGCTCCGGGAGCCCAAGGTCGCGGCTGGGCCAGCGCTGAGCGTCAGAGGACGAGAGCAGGGGCCTCCCCGGTCGCCCCA
-GCAGGCCCAGGCACATAGGTGCCCAGAGATCCCTGGCTTCTGATCGCCCGGAAGACTAAGAGGTGAGCATGACACATGGC
-TTTTCCTTTGACGTTACATCTCTACCCCCTCCACTCCTCTCTTCTCCAGATTTTTCTGGAGACTAAAAAGTGGAAAGCAC
-AGTAGAGAACCCCCAACATGTAAACTATCGCTTACACTTGTGGGTGAGCTGAAACCCGCAAAAGTTTGGTGTATTCATAA
-GGAGCCTATATTGAAGGACTTTGCTAAATGTTTTACAAGGATCATATCTCATTTCCTTTTCACACAGTCCCATGAAGTGG
-GCACCATTGCTATTGCCAGTTCACAGATGCAGAAACTGAGGTAAAAACTAGGTAGGTAGCATATCCATATTTATATCCAA
-CTAGTTTGTGTAAATAATGATACAGGGAAGGGAGGATCACAACGGATTTCCCCACCTCAAACCCTACATTCCACTGTACC
-AAGCTTGTCTTCCTCCATTCCTCTTTCTAATGATCCTTCCTTGTCGCACAGCCCCCCTTTGAGAGTTAAATGACCTGAAC
-ACACACAGATTCCCACAGATTTTCATGTAATTTCCGAGTATTCAGACCCCGAACATGGACCTCAAGTCAAGACATTCTGC
-TCTATTCCACTACCTTGGTAGATGGTTAGATGTGACTAAGGTGGCCCAGGGTCATGCTGGGGAAAAGTACAGGTGTGCTT
-GTATGTGGAGGATCCTATATGCTGCTCAATTTACAAGGAACCCAGGACCCAAGGGCTACACTTGTGTGATTTCCTGCAGT
-GGGGTGAGCTCTTGGTCAGTCTTAGCAGTTGATTGTGAAGGACACTATACAGGGTGCTGCCCTCTCCCCAGCACTTCAGG
-GCTTTAGCTGGGAGGGAGGCAGTCCACAGGAAACCGACCCATGGACCTACTGAATTCATCACTGTAGCTGCTAATTAATT
-CTCCGTTAGAGATGGGTGCTAACAGAGGCAACATTGAAGTCCCTGATTGGGAAATCCTTATTTTCACAAATCAAGTGGCA
-TTGATTCAGTCTAATCATTACCTATGTAGGAGCATCTTGCCCTATTCCATAGATGACACATATACATATGCAGTATGATG
-ACACCGCACCTAATCGGAATATGGCCGATAATAATAAAACAAGCCATAAATAGCAGCTAAGGTGAGTGTCACCAAGCCGT
-GCAGCAAAGTCCAAGTGGATGACTCTGAGGCAGCCTCAGTTGGTTCCCTAGTCCACCGCATGTTATAAACAGATTAAAAG
-GCAAAGGAGGCCTGGCCCGGTGGCTCACGCCTGTAGTCCCAACACTTTGGGAGGCTGAGGCGGGTGGATCACCTGAGGTC
-AAGAGTTCAAGATCAGCCTGGCCAACATGGTGAAACCCTGTCTTTACTAAAAATACAAAAATTAGCCAGGTGTGGTGGTG
-GGCACCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCAGGAGGTGGAGGTTGCAGTGAGCCG
-AGATTGTGCCACTACACTCCAGCCTGGGTGACAGAGTGAGAGTTGGGCTGAGGGTCGAGGGTCATGGGATAGGGCGAGAC
-ACCAGGGGAGTGTGTGAGGACAGAAAAGAGTCTTGAGGACCTAGCCCTGGGCACCCAACATAGGCTTCTTGAAATGGGGA
-GTCAGCAAAGGAGCCTGAGCAGGAGGGGGCATTGGTGTTGGATGGAAGCAGGCGATGGAGATGTTGTGGTGCCTAGAGAG
-ACACATTTAAAGGAGAGAGAGCTCACTGCCGTAGAGAATGTAGGTGAGGGAGCAGGCTTGCGATGGAGAAAAATGGTGCA
-TAGTTTCAACTTTTGTAGTAAGATGGAATCTTTTCATTGCAAATGTTGGAAACTTAGCTAACTAGCTTATACCAAAATAA
-GGTGACGGGGGAGAAGATGTATTTACCCACAAAGTGGTAGATGGCTTCTGGCACCATGGAATCCATGTTGCAACTAATGC
-CATCAATCTCAGTCTCTCTCCATCCTCCAAGCATGGACTCTCTCTGTGGCACCCAAGAGAGCTACCTGCGCCCCAGCCCC
-ACACCATACTGCTTAACAACTTCAGCAGAATAGTCTTCCCTCATAGTTCTGGATGATGGGCTGCTGATTGGTTGATGTCT
-TTTATGCACATATGCTTGAGCTTCAGTGTACCTGGAAAGGGATGGTTCCCTCAAATGGGCCAAGCCTAGGCCACAGACGC
-TTTCCTCTGGCAGGGGACAGAAGGGACAGCCCCATCCAAACGACCCGGATAGGATTCCCTATGTGATAATGGAGTTCTTT
-TCTCATAAGAAATGAAGAAACAACTGGTCATACCTAGCATGGCCTGCTACTCAATCCAAAAGATTTTCCGTACAAGGAGG
-TAAAATTACATACTAGAATGCCCATCACAATTTAACAGGGAGATTGTTTATGAAGATTTGCAGTTTCCTTGCAGCCATTT
-AACTACATCTTTTCCACTTAAGATGACATAGGAATCACTCATCACATCTCTGATATGTTACAGAGCCCAGTAGATTTGTT
-TATAATGAACACCTCAAAATTATATGTTTTTATAACACCTTAAAACTATTAAAACCTGCATGATCTCTCTATTTTGCTGG
-TGTGAAACCATGTAGATAGATGGTGGGAACTCAAACCCTTACCATGGCAATTTAGTTAACCTCAGCTTCTTCATGGTAAA
-ATGGTAAAGTGTGATGAGGAGGGAAGGTTAAATGGATAATAAGAAAACCACCTGGCAAACTATTTTTAATTATGATGGAA
-GATTTGTTTGAACTGTTTTAACTTTATGCCCACTCAATATTTTTGATATTTATGTATAAATCCTACTTTCTGAACATTTC
-TTAAAAAACAATCTCTGTTCTTAAGGAAGTTCCAAAATATTGTTATTTAATCAAAATGAAGATGATAAAATTAACTTTGA
-GTTATTTTTCTTTTTTGTTGCTTCAGCTTTAGTTTTGGTCCAGAAAGCATTTTCAAGGAGCTGGTCAAGCATGGCTTTAG
-CAGATAAGAGACTTGAGAACTTACAGATCTACAAAGTTCTTCAATGTGTGCGGAACAAAGACAAGAAGCAGATAGAGAAG
-CTGACCAAGCTTGGATACCCTGAACTAATCAATTATACAGAACCCATTAATGGACTTAGTGCTTTGCACTTAGCCTCAGT
-TTCCAATGATATTGATATGGTCAGCTTTCTCCTTGACCTTGGTGCTCACCCTGATGTGCAAGACCGAATGGGCTGTACTC
-CCACAATGAGGGCTGCAGAACTGGGCCATGAATTGTCAATGGAAATATTAGCAAAGGCAAAGGCTGATATGACTATAGTT
-GATAATGAAGGAAAAGGTAAAAATCCCGACATCCTCTCCAGCAGATTGCAATTCATTTTGTAGCCAGAAAGCAATAACAT
-GGACTCTTTTTGTTTTCCAACTTTAGAAGTGAATTACTTATGGTTTTAAGGGAAAGGCTAAATTCTCACTCCTATACCTA
-AACCTACTGTCTCCTCATACTTTGAAAATGAGATAGCTATATCTTAGGGAAATCATTTATGAGAGCTTGCTCATATACTT
-AGATTAATTTGTGTTTGGTGGTTTCTTTTAAATGAGGAGAATTTTGAACATTATACACACTGATTATTCATTATAAATTA
-TAAACTCTTCTTTAAAACAAAGATGAAGTAGAGCATTTCTTATTCTTTTTTACATTTTAGAATTTCAGGCAGTACTACAC
-CTAGGACTCCAAAAGGATTTTGACCCCCTCAATAGCAGTCTGATGTAGGAAGGACTTGCACTTGGAAACTTGAAAGGACT
-AAAGTCAATTCTGGCATAAACTCCAACTTTCTAGGATCATTTAAAAATGTATTTGGAAATACAACTTCAAACTTTAGACA
-TGACCTTTCAACAATGATTCAGATCAAACAACTGCACTTCCACACCGTTAATCCCATCATCTCAAGACCATGGTCTGAGG
-ACTTCTTGCCCAAATAACTTAAGGTTCAGGCAAGAATTGACACAGCCTCATAAAAATAACTGAGATAATTACCAATAAGC
-TTAATGTAAACTGATAGGTTTGAGCAGTTGTCCTGAGTTTCTGCAGATACAAGGCCATTAACATCAGCTCTGCAATCGAG
-AAATGAATCTCATTTGATAATGTGAATATTTACTGACAAGAGCAAAATCTACTTTTCTAACTCTCTCCAGACTTGGTGTT
-TGATATGATTACTTGCTTAGAACAAAAGAGGACAAAGAAAAGGGATAATTACATATTTAATTGTACCACGTAAGAAAATA
-AACTTCAGATGCATTCAGGGGCCAGATGTACTTTGAAATGCTAAATCCTGAAAAAACGGTATCCTCTCAAAGCTCTATAG
-TATACCATTTCCCAAAGTGTGTTCCATGGACCACTGAATTGCCAGGATGTTGAGAAGTACTACAGGCAAAATTGGTTCCA
-CGGTCGCATTCATTAGAGACACATTTTAGGCATTTATCTTTCACATTGTTGGCTCAAAAATGGTGACATTTTCCATATTT
-ATTTGACCACAAAATAATTTTTTTTAATGACATCTTATATGCCTGGAGTTTTGTGGACTAACCTTTGGGAAACACTATAA
-TAGAGAAACGTTTAACTTACTGAGTTTGAAACAGATACAAATCACAAAGAAAAAAGAAATTCTATAGTGTAACAATGTAA
-AAGTGTAAATTTTTTTTAAAAAATCAAGGTAAAATTGGAAACAAGGTCAAGTAAATACTTGCAGCAAATGCAACAGGCAT
-ATGGCTAAAGGAAACAAATCTCATGGGCAGAACTGAAACTATAAAAGGAAACAAATGTAAAATCTTGTTTCACACATAAG
-CTTGTTAGGATGGCTGCCTGCAGCCCTCACTCTGCATAACCCAAGGTAGTGCCCATTGTACAGAGTACATTGTCTCTTCC
-CACATCAACAAGGCTCACTCAGCTTGCACATCCCTCAGTTTGGCTGCCAGTGGCCAAAGTGCTTTGCTTATTCCACAGTA
-CCCTCTCTGTCATTGACATCCTATTTTCTGGTGACTCATGTTTGACTCACTGTACATCGTTCCTAAAGGATAAGCAAACA
-TTTAAATGGCTAAGTGGGTCTTTAGGATGTGAGACATGCCCTAGGCCTAAGCGGCACTTTCTCTTGGAACAGTTTTACAG
-AATATGGAGAAGGTAAAGCTCTAAGCCAATACATTCTTTCTTGTATGTTGTCCTAGGGAATTAATTACAATGTGGAATCA
-TTCTCCTTAAAAGTTAAGCTATAATAGTTCCTTATAGCACCCATTCCCATTCCATTGGTTTTTGCATTTACAGGCATGTG
-TACTCAGTCCTCAATGCCGTATGCCAGTTCTATGATAAGGTACAATATTTTTCAAACTGTTTTCCCTTCAATTTAGGAAT
-GCTGATTCGTGTTCTTTGTGGCTTAAGGAGTCAGCCCAGATACACTTTAACTGTGTGTTGCACATGCCATCATTATGAAA
-TATTCATTTCATAAGTGGCTCTGGGCCTTTTGTAATGAATTCAGCCTCCTCGGGTATTATGCTTAGGTTGTTTTGCTGTT
-GCTGTTGTTGTTTTGCTCTGTTCCTGCCTTCTATGTCTTGCTCTTTCTTTGACTTTCTCTTTTCAATAATAACCTTGACA
-ATCTTTTCTTTTTTTTTTTAACTGTTCTGAGTAACCCTACTTTAGGTACATCAGTTTATATAAAATATATTTAGGTTTTG
-ATTTTCATATACATTTTATTTTTTATTTTAATGGTGGAATTTATCCAATTTATAGTTATCTAGATTTCCCATAGGGTTGG
-TTTCAGAAACATCATTTATTTTATATTGTGAAGGCAAAATATATCTAATATATAAAATACATGTGAAAGTATTGTCATAT
-ATGGTCCATAGATTTGTTTTACTTTGCTGTATATGTGTGTTTTTCTTTATATGCTTGTAAGTGTATTTTCTAAAATTGAT
-GGGCTTTTTAGTTATTTTAGTTTTTTTATTTTTTTTTAGTTATTTTAATGGTTAACTTGATACTTCATATGCCCTTAAAC
-CTGTTTATTGAGTTAGCATCTTAAACAGTATTCATTGATTCTTTACTCTGTTTAGTAAGATTAGTACAATAGTATAAATT
-AGATAAGATTAGTACAATAACCCTTCCTCTTACCTCTGCTACTTCCCTTCTACCACTCAATTTTATACTCAATTATAATT
-ACTTAGTTCTTTCAATGATTCCCTTTTAAATAATAAGTACCTTGTACTTTATTTCCTTACCTGCTTTACATAATATCTCA
-GTCTTAGCCCTAAAAGATGAGAAGATCAAATACTTATACTATTTCTCCTTCCTTCCCTCAAATTTTTGATAAATTATATT
-ATTTTTACATTATTACAAATTGCAATATATTTTTCTCTATCTAAAATTGCTAAGGTGACTTAGCTTTGGTTCTGTGGCTA
-AAGAGATTCAGTATTTATGACTGTTCTTTTAGTCACATATTCTCTATTGATCTCTTGGAAAACTCACTTTTGCCATCAAG
-TAGTTTAAGTCACTTCTTTGGGCTTGTATCCCTGATTACTTATATCCTTAAGACTATACATGTCTGTTGTTTTTACATGA
-ACAAAGTCTTGATTGGGTATAAAAGTTTCCTGTTTTTTTTCCCCAAGTTATAGTGTAGAGATCCTTTGATTATACTGTAG
-CATTGAATGTTGTTGTGATAAATTTTTGAGGGCAGCTGGACTTTTCCCCTTCATGGATTAGTTGAATTTTTGCCTGGATT
-CTTATGAGACACTTTCTTTGCCTAGCTTTACCTAGGCATGCCTTGTTGACTGTTCTTAATCAACTTTTCCTAAGACCCAA
-CGTACCCTTTTAATCTTAAGATTCAGGTCTATCTTTGCACTTTCATTTTAGAACAAGTTATATTTAGTTTCTTTGCTATC
-ATGGAAATGAATTAGCCAGTAATTTTCACTGGTATATCTTTTCTAGTATGTATCCTTTTTGCGTGGCTTTCAGTATCAGT
-TTCCTTTTTCCTTGCAGTATTTTTTTTTAATAGGTTGCATAGTGGTTTCTTTTTTGGTTATTCTTTGAATGGAGTCCCTT
-TTTTGGAATGAACTCGTTACAAAGTCAGTTTGGAGTCTGATTGTTATTTACCTAGGACTTTCTTAGTAACACTCTGCCCT
-GGGTTTATAACAGTAACCCTGATGTGTAGTATGCTTTTGACATGGATTATATTGAAGGCCTGTATGTTACAGGTCCTGGG
-TGTAGGGATTTAGCATGTTCCTTTCTCCAACGGAACAAAATGATTTGCTAAAATGGCAGAGGCACTTGCCATCTAATTAG
-CCACTTGGCATCTAATTCACCTCTTTACTGCTATACCGACAGCCTGCTTCTTACAAACATGGTCAGTCTACACATTTCAT
-CACCCAGTACCATCTCTTTTGCCATTCTGCAGTTTTAGAGGGGACCGGGGGACTTACCAGTAGCCCTTTGGCACACATAG
-CTGTAGCCCTTCACATTCCAAGAAGGGACACTCAGGGTACGTATTGCAAGATGCCAAATACTCAGGGTCAACAGGGTTCA
-CCTATCAGCGCTCCAATTCTTCCATAAGCCAGGTCCTATCATATGTGGTTGTGACTGTTTTCTAACGATGTCAGGAATTA
-AGATTTTTTGTTTTTTGTTTTCTGTCTTGGTGTTTTAGTTGGTTTCAGAGAGGAAACTGAGGCAGATATGCCTTTAACTA
-GCTAAATATGGATTTTTAATAATTTTACTTTCCTTCCTGTCAAATATGTATAGATGTTAAATACTCTCTGGGGATTTTAT
-TTCTCTGCAGGTGTTTTGTTTTACTGCATTTTACCGACTAAGCGGCATTATCGCTGTGCTCTGATCGCCCTTGAACATGG
-TGCAGATGTCAACAATTCTACCTATGAAGGAAAGCCAATATTCCTTAGAGCTTGTGAAGATGCACATGATGTTAAAGATG
-TGTGCCTGACATTTTTGGAAAAAGGAGCCAATCCTAATGCAATCAACTCAGTATGGCTATTCTTGTGATTACAAATATTT
-CTTGTTTCAATTACAGCATAGTATAATCTTTTCATTTAAATATGATGACATTATCCTGTTAGCTGATAGACTGTTCATTT
-TGATTCAAAATGCTTGAAGATGGTATACGTTTATTATCTTCATATTGCTGTGATTCTACAGTCTGTTTCCTAATTATGTT
-TGGAAACTTGGTATTTATTATGCATAATGTCAAGGTACCATTATAGGAAATAGTAAAAAAAGGCATTGCTGATGCCTAAT
-AGGATTTATCTTCTTAGAAAGAAAATATATAGTTCTGCTGTTTCTTTTCTTTTTCTTTTCCTTTTTTTTTTTTTTTTTTT
-TTTTGGAGACAGCGTCTCACTCTGTTGCCCAGGTTGGAGTGCAGTGGTCCAATCTTGGCTCACTGCAACCTCTGCCTCTC
-AGGTTCAAGCAATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGTGCATGCCACCATGCCCCGCTAATTATTT
-TTTGTATTTTTAGTAGAGACAGGGTTTTACCATGTTGGCCAGGCTGATTTCGAATTCTTGGCCTCAAGTGATCTGCCCAC
-CTCTGCCTTCCAAAGCGCTGGGATTACAGGCATGCCCAGCCTAGTTCTGTTGTTATATCAATTTCGTTCACTCTCCTTAT
-TTTGAGTTTTCTTGTAATTGCCCTTTCTTGACACTAAACATTGATTTTCTTCTCATTATAAAACACCTATGACCTAATTT
-TATATTAGGTGTTGATATTTTATCTCTCTTTCTCCCTTTTTATTCTGCTCTATTTGCAAGAAATACATTTTTTAGCATGA
-TATTCTCACAGGGGCATGCAGTGTGACCTTGACTCTGATTTTAGAATTCTACGTTTTGGATACTGACCCATTGTACTTGC
-TTAATTTTTCCTCTTTGTTACATGAAGCTAAGAAAAATGTAGAGAACTAAACTTGTAAGTGTAAAGCTAAGGTCAAATGG
-ATTCAGACTGTATTTGTACTGATTCTGCTACTTAATATGATGGGTATAAACAGCATCTCATATTGGACTATTTCATGTCC
-AGTCCACAGGCCGCACAGCTTTAATGGAAGCGTCAAGAGAAGGGGTAGTGGAAATAGTTCGAGGCATATTGGAAAGAGGA
-GGTGAAGTGAATGCATTTGACAACGACAGGCATCACGCTGCTCATTTTGCTGCTAAAGGAGGCTTTTTCGATGTAATAAT
-CTATTCTTTGCTTTAAAATTTGTTGCTAAAACTTTTCTGTCCTTTTTCTCAAATTTTTTTATATGTCATATAGAGTACGC
-TAAGGCAGACATTTTTCTGAGTTACCTATGTTGTTTTCATCTTGATTTCCCCAAATAATTCTAAAATTATATTTTTAAAA
-ACTTCATCTCTTTATTTAGTTTTATGTGTTTGCTAATTTACTTATTTAATATTATTCATAGTATTTTTCTGTACACTCGA
-TGATAACAATTTAAAACTTCTGCCACCTGGGACTACTGTATTTTATGACTTCATTACATACTAGAGTCTTCAAAATATAA
-TATGATCTAATTATGGGAGAACAATGCCCTCATACTCTTATCTCCATGGTGTTTGTGTGTATTAGATAATGATATACCTG
-AATTTTAAACTCAAGTATTCTGATTATCTAAACATACAGCAAAGAATATCTCACTGATACAGTAACATTGCAGAAACAAA
-ATAAAAACACTATTTTTTTAAATTCTGAATTTCATCTGAAATTTCTTTACTCAATTTCTTTGAGTTTTAACATAGTTATC
-TTCATTTATATCACTATTTTCCGTGCAATAAAAGTATACACAAAGATAGAAACCACGTTTGGTAAAGAATTTTCCCCTTG
-GATGCTGTTTTCCATGCTCTGATGCTTTCTTAAATTACCTACACTAACAAAAATGGTAGTGCCCCCTCTAAGTATAGAGT
-TTTCTATACTCTAGATCGATGCTATTTAATAGAACTTTTGGTGATGATGGGCATATTCTATGTTTGTGCTATACAACACA
-GTACAACACAATGGCCATGTGGCTTTTGAGTACTTTAAATGTGGCTAGTGAAACAAACAAATGAAACTTAAATATTTTCA
-GTTTAGTTCATTTCAATTTGAATTTTCAATAGTCATACGTGGCTAATTGATATTGTACTGGATAGTGCCGGTCTAGCTGT
-CAGTCTTTATATAGTAAATGTACATTCCTATTCCTCCACAATATCCACTATTTATTTTACAGATATTGAAGCTTCTTTTT
-GCCTACAATGGAGACGTGGGGCTGATTTCGATAAATGGGAACACACCACTTCATTATGCTGCCATGGGTGGTTTTGCAGA
-CTGCTGTAAATATATAGCTCAGCGAGGTAAAATTGTCTAGCAATTTTGTGCTTCAAGTACTTATGATTTACCCATGTCAT
-AGATAAGCAGAGAATTTGGGCCTATCACTTGTCAGTGGCTTATTTTTTTCTATAGCAAAACCTCACTCATATGTAGAAAG
-AAAATTGAAAATTATTTCTTATACTACCCTCTGTTAAATCATGAATCTGCGCTTAAAAGTGATGAAAACCCATTTGTCCA
-AAAATTTTAGGTTATTGTTAAAAACCTAAAGGGGATTGTTCCTGAGCCAACTAATTATTCAAATACTTATGGTTGAGGGC
-GGGGTGTGGTGGCTCATGCCTGTAATCCCAGCACTTTGGGAGGCTGAAGCAGGTGGATCACTTGAGGTCAGGAGGTCAAC
-ACCAGCCTGGCCAACAAGGCAAAACCGCGCCTCTACTAACAATGCAAAAAAAAATTAGCCAGGGGTGGTGACGGCGCCTG
-TAATCCCAGTTACTTGGGAGGCTAAGGCACAAGAATCACTTGAACCTGGGAGGCAAAGGTTGCAGTGATCCAAGATCTGT
-GTCTCAAAAAACAAACAAACAACAACAAAAAACTTACAGTTGATTAAGTTCCTTATTTTAAAAATGCCAACATCAATCTA
-AAAAAGGACACACACTGGAAACCATTTGCTTTCATTTGAATTTTTAGTTTATTTTAAAAAATGTTCCATTGTGTCAAATG
-CAAAGATAACTTTTCTGGATAATTTGCAGTTATGGGGAAAATAATTTGGGGGAAAACATGAAATGAAAATTTTCATGGAA
-AATTTGAAATGTAAGCAGAATTTTTAATTTTAGATTTTCCTGTAGCTTTTAAGTATTAATTTAGAAATATGAACTATATC
-ATATATAGCTTAATGAGTTTCTTAAAATGAAAATATTAATTATATTTAAGGATATGTATTTTTTGTTAATTACATGCTAA
-TTAAATGCACATTAAAAGCTTTTTAACTCTGTTAGAGATAGAACTGCATTTTGCAGAACTGTATATATTTTTTCTAGTTT
-ATGAGAAATAGGCAAAAACTTAAAGTTCACCAACTCTATAATAGAGCAAAGAAAGTGTTTTATTTTTCTGTCTTTCACAC
-AGACACAAAATTTTAGAAGTCACTAAAATTATAAATAAAACTAACATGCCCGCATAACTATAATAGCATAATAACATCCA
-TTTTTACTTGTATGAATGTATACTTTCCCTATGTCCCCAGTGTGATAAACCCTTTTAGCAAATGAGAAAAAAATATATCA
-AATGCAATTCTGGTTCTCTCAAACTGTCTTAATTGGTTTTGTTTTCAAATCTGTCTCTATTAGCAGTTTATTCTGACATT
-TCAGATTTAACATTATGTATTTCTAAAAACTAAAGATCCACTCAAGTTGAGACGAATTTCTTTAACTTTAATATGTTGAC
-TTATTTCTTATTGGGACAAATATCACACATACGCTATCATTTATGTATTCCTGGAATAAAGTCACAGAAAGCACATTGAG
-AAGCCAAGGACCAGAGCCTGGGTCATGCAAAAAGGCCTAACTCAGTGATGCAGAAAAGATCCATTTTCCTAGAAGAATCA
-ATCATGAGACTATTTTAAAGCAAATGTTTGAAAATGTTCTGAGTTCTGTGCATGTTCGGAAATATAAACACGTCACCAGA
-TCCTATGTGGGTGACCCAGTTTCACAGCAGAAGTGTTGTCAGTTACATTTCTACCTTTAGAATCTTACATCTAAGGCAAT
-CAGAGCAGGAAGAAACCCTTAGTGATCAAATGCTTGTTTCTGAATAAGCTCCCTGGGCTTAGTCTCTTCTGTACTTAATT
-GTAAAGCATTTGTGCTGGCTGGATTCATTTCTCACATTTCCTCATGATGGTCCTCTTTCGCCCCCTCGTCCCCCTGCTGG
-AGCAATTGGCAACTCCCTGTAAGCATGTGAGAGCCACATCCAAGGGCAGAGGAGAGGAGCTCGTGGAGTCCTCCTCCTCC
-TCTTCCTGGGCCCTCAACTCCCTGAGTTCTGCAGCACCAGCCAGCTGGAAGTTGAACAACTTTACCACAGAGGAGCATAA
-GTCTCACAAGGAATGAATAGATCTTTATTTACTAATCATAAAGGAGGAGACAGAAAGCTCCAAGTCAAAACGACAGGAAA
-ACTGCCTTTAGCTCTTTAAAGTGGGATGTTGGAGTCTTTTATACACATGGAAGTTTCTAACTAGGATTAAGCTGGAAGCT
-GCAGAGGGTAAGCTAAAACAGGATGAAAATCCTTTGGTCCTTAGTGCTGGGTGAACATAGAAGAAGAGGCTTGAGAGGTG
-GGATCAAAACCCCCCAGACACCCTGAGTAAGCAAAATAAATAGCTAAGTAAAAACAGCATATCAGAATTAGTATGGAATT
-GCACTATGGAATTACTACGCTATGGAATTACACTATAGAGTCACTGTTCTTAAAACTATCCAATATAGAAATTTTATAAC
-CTTTATTGTCCCCATAGTCTTTTTTAGTTTTTCTACTACTAGTAAAATTATCAGCCTTAGTATAAAAATGTGTGTGTGTG
-TGTGTGTGTTTGTGTAGTAAAATAGATTTATTTTTCTTTTTTTACTTTTTATTTTTTTGATAGTAAGTATATATATTTGT
-GGAGTATGTTAAATGTTTTGATATAGGAATACCATGCTTAATAATCACATCCTCTAGAATGGGGTATCCATCCCCTCAAG
-CATTTATTCTTTGTGTTACAAATAATCCAATTACGCTCTTTTAGCTATTTAAAAACATACAATTGTTATTGATTGTAGTC
-ACCCTGTTGTGCTATCAAATAGTAGGTGTTATTCATTCTTTCTATTTTTTTACCCATCGTATACAATTTTAATTTTTGGC
-AATACTAAGGAAAGTATTAATCTTGAAAAACATGGTCTGACTGCTTCTTCAAAGTCTTACTTATACATATACTTATTATA
-GACAACACAGCCTTTTTGGTAGCACTAAATGGATTCCCTAACATGTTCAAAAAAGTTTATTTCTTTGGTGAATATTTATA
-AATGATGTTGGAATCATCATTTTGTTAAATAAGGGACCAAAAAGGAAAATGAATTTTAATGTCTAACTTGCACATAAATA
-TAATGCTGAACTCCTCAGATTTAATTACAATTACTTTTTCCTCTGTGAAGGTTGTTCATATGGCCATACCACAAAACAGC
-AGATTAGTATAAATTACATTATTTAATGAAGAATACGGAAAAAATATACTTAAAATTATACACAGATTTACAGTTTAAAT
-CATTCAAAAGGAAGTGGGTATTCTGCATCTTTTCAGGTTCAGATCTGAGTTCATAAGGTCCTAGGTAAGCTGTTTGAATC
-CAGCTTCTTTCCAAATTTAAATGTATCCTTGCTCTTTTCCTGTTGGCCTGAAGTCCCCTGAGCAAGTGTACCAATATGGT
-GTGTGTTTCAAATATCTCTAGGGATAAATGTTCTAATCCTATTGTAAATTGTAAACGTATCTTCTTCAGAATTCACCAAA
-GTGATGCTCACAGAAAAAAAAAATCACAGCTCAATTTTGTAATTATAACAGCAAAATGTGCACATCTCTATATACATATA
-ATTTGGGGACACATTTTTTACTAATCACGAGAAATTAAGAAAACAGTTGGATGAGTGTCACTTATAGCCATGCAAATGCC
-TTGGCACCATTCATAATTAATGATGCTTTATGTTTTAGGATGTGACCTGAAATGGAAGAATTTAGATCATAAAACGCCCA
-GGGCTGTGGCTAAGGAAGGCGGCTTCAAAGCAGCAAGCAAAGAAATACGCCGAGCAGAGAGAATCGCTAATAAACTAGCC
-AGGCCAGGAGCCAAAAATCCAAATCCACTGTGGGCCCTTAGACTGCACGATTGGTCCGTAGAACGTGAGGCTTTCCTCCG
-GGAAGCCTTTGCGGTTTTAGACAGGGGTGATGGAAGCATCAGCAAGAACGACTTCGTGATGGTGTTGGAGGAAAGGCAGG
-ATTATGCAAGCTCAGAACAGCTGGCTGCCATCGCTCACCTTCATGAGAAAACCCGGGGAGGAGGGGTCAATATTAATGAA
-TTCTTTAAAGGAACCAGATATTTAAACAAGTCTTTTGTCTTAGGATCGTATGGACCTAAGAAAAAGGAAAAAGGGATGGG
-CAAAAAAGGAAAGAAAGGGAAATTTGTCTTACCCCTTCCAATCTGTGTCATTCCTGAGTACGCGTTTCCACGCCGGCAGG
-ATGGTGGGCCACCGTATTACATGATTGAGACCTACAAGAATGTCACTGATAGCAGCCGGTTTAATAGAGATCATCCCCCA
-GAACATCCCATTCAGGATGACTCTGTTTGGTACATTGATGATTCAGAGAAGGTATTTTCAAACATTAATATTATCACCAA
-AGCAGGGGATCTGGCTTCTCTGAAAAAGGCCTTTGAATCAGGAATACCTGTGGATATGAAGGATAATTATTACAAAACTC
-CGCTAATGACGGCGTGTGCAAGTGGAAACATAGATGTGGTCAAGTTTCTTCTTGAAAAAGGGTACGCGTCTCCGTCGGGT
-GTGGCCTAAATTTTCACGAGTCTTCACATTTCAAGGAAGTGAAAAGATGACCGAATTTTAGTAATATAGAAAAGTGCTAC
-TTTATTAAAGTCTATAATAAGGCTTTAATATATAAAAGCCTTTTATTAACAATTAACTTATAGGCTTCATTAAAGAATGT
-TATTAAAGAATGCTTTATTAAAAATGCTGATTTATTACAGGCTTTATTAAAGTCTAACAAATGCCCTATAAAAGTATGTG
-TTCATATTACTGATGGCTAGGGTTAGAAAAGGAGAATTTATGTTAGATTTATGTTATGTTAGATTCCTAGCCCCTTTATT
-AAAGCCTATAATAAATTAATTAAGCCTATAGATCTTATATGGGAAACCAGGATAATGGGAGCATAGGATTGTGTGTGCAC
-AAATATATTTTGCCAATAGCAATTATGCATGAAGTGAAGGCCAGTAAGTGTTTACTCAGGGTGAATAGAGTCTTCTGATT
-ATTACTGGCCTTCTATCAGTGGCAGCACGGCTCAGTCCTGTCTCAGAGCTTCACCTAGATGGTGTGGAGTCACTTTTTAA
-TCTGCCTCTATTTGAGGATCTCAACAACTTCAAACAAGTGGAATGGTGGCTATAATAACATGCTTTGGTCCCAAAACCTG
-CTGCCCTCCTCCAGTGTGGGGCATCCTTTTCCTTGGTCATGTAAATATTTTTAAAATATCAAATCATGAGAGTTTTATAA
-TACTTAACTTTTTAGACTACAACAATCACTCAGGTTTAATTCCTTCTTCTACCATAGTTGTATAACCTGGGTGAGTTTCT
-TAATATTTTTGTGCCTCAGTTCTGTCATGTATGTAATGAGACTGTAGTGGGACTCATGCCACAAGATTAGTTGAAGATTA
-GATGAGTTAAAATATGTAAAGCTCTTGTTAACACAGTAGTTACATACTTGAGAAATAAAGTACTAATCTTATTAGTACTT
-TAATGTTAAAGAAAGACTCAAATTTGTATATTATCAAGAGAGCAACTAATGAGAATATGAACTTCTGGACAGTGAATTTC
-TAAAAAGGACTAAAATGTTAAATAATACATGGTAATATTTATAATTTATTAATGAAGTTTCATTTAAAAATGTATTACAT
-GCAGAGAAAGTCACAAAATGAAATATGTCCTGTCAGCTTTTATCTTCATTGGATCTGATTTTATAATTTTCCTTGATTTT
-AACCTTTGCAAATCGTAATCCCTAGAATCTAAAGTGCCTTTTAATGTAGATATACACAAAGAAAGTTAAGACTGTCAAAT
-AATGCAGAACAAAGAGGTTTGAAGAAAAATTATGGCACAAAGTTTACAATTTAGCAACTTGATAGAACTCTATGAAATCT
-TACTTTGCATTTTTAGTGTCCAGTCATTGGAAAACCGTATTTTTAGTTTGTTCATCTATCTTATTTTACAGAGCTAACGT
-TAATGCAACAGATAACTTTCTGTGGACTCCACTTCATTTTGCATGCCATGCAGGCCAACAAGACATTGTTGAGCTTCTTG
-TTGAATCTGGAGCTTTAATAGATGCAGCTTCAATCAACAACTCAACTCCTTTAAATAGAGCCATTGAAAGCTGCAGACTG
-GATACAGTAAAATACCTACTTGATATTGGTGCTAAATTCCAGCTGGAAAATAGAAAAGGTATGCGTTCATATTATTGATG
-ATTAGGGTTAGAAAAGGAGAACTTATGTTAGATTCTAAGCCCCTTCTGATTCTATTCTCGTAGGCTTGCATTGTCCACTG
-GGTTCCTGGTACAAACACAAGCCTGAGTTAAATGTTATGGAAGTTTATCTTATACCAAGTGCTTCTCCACTCATTGGTGT
-TGGAGGGCCAATTCTTTATGTTTATAATCTTTCATGGACTGAAATACTTTTGTAAAATATAATAAAATTATTTATTAGAA
-AAATAAAATGAAAAAAATACAAGGCCAAAACTTTGTTTTTAATCTTTAAATTTTAATGACAGAAAATTATATTAAGTTGC
-TAAAAACATTTATAAATACTTAGTTTCTGTAGTTACTTCATTATGGATCAGTAACTATTAGTCTGTGGACTTGCACCAGT
-TTGCAGATGACACTGAGTTATTACACTGTTATGACTGTTAATTACTAATAATTGCATACCCTATAGACTTTGGGTTTCTC
-TTAAAGCTGGACAAAGCAATTCCTGAATTGAGGCTTCCCTGACTCTAGGAAGTAAACACACAACCTACCTTGTATCATAA
-ATACCATACAGGAAAAATTAAAAAATCATTTGAATATATTTGAGCTCCTTGTTTGGAAGTACCATTTTCCTACATTGGAA
-GCCATTGCTTCCTTTGACTGAGGAGCATCATACCTCTGGTTGGTTCAGGCTGCCTCTGAGTCACAGATACTACTGCACCT
-GTCCTGCCTGATGATATTATAGGTAACATATTGCCCAGCCATCTGCCTGGAGCACCTGTGGCCACTAGCTTCCCCAGACC
-TTTTGGAATTTACCTCCTTACATCAAGGAAAGGGGAAGATAATGTAAAATTATCTATCACATAGAAGGAAATTTGCACAA
-TGTGGGGAGAGAATAATCAATTTGATATTTAAGATGTAATATAATATTTCCTATCACTCTTTTAAGAAACATAGTAAAAA
-AAAAACTAAGGAAAAGTAATTTTCTGTATTTAGATGGCACTATAAATCATGGGATCTTAAAGCTGGGACCGCCATAGAGA
-AAATCTGATCTAGCTCTGTGAACTTCTGTATATATACCCCTTGCTTTAGGAATCACCCTTATTAGGGCAGGCTTAGAGCT
-GATGTGCTGAGATATTTTTCTACATGGTTTATCATTAATATGTTTATAGTCACTCTGAATTTATGTTTATGTTTCAACAG
-GGCATAGTGCCATGGACGTTGCAAAGGCATATGCTGATTATAGAATAATTGATCTGATTAAAGAAAAGCTAGATAACTTG
-CCGAAACCAGCAGAAAATCAAAAACTAAAAGGCAAGACACCTCCTATACTGAAGACTGAAGGCCCTGAAATTAAGAAAGA
-AGAGGTAAGAAAAATGGTTGACTACCCATTAGTAACTGGAACTCTTTAAAAATCTGTTTGGGGGAAGGCAGAAGCACTAT
-TTACATATTGTTATACAACATGGGTAAGATAATATGCAGTGCATACTTTCAATAGCATTATTATATAGTACTTTTAAAGA
-AATATCTAATAAAATTCTTATCACTGAAGAGCCTAAAAAGTACTCACTGCAAAGAGAATCCATACAAAAACCAAATGGGT
-TCAGCCAAATACAATTAGAATGTTGAAAAAGAAAACCAAAACTGGTGTTGGATTTGTATATATTTGGTCCTGAATTATAC
-AGATTTGATGAGATGGTCCAAATAGGGAAGGAGATTAACCCTTATGAGGAGTGAAGTAAAGCATGATTTTTCTTCATTTT
-GGTCTCATTACCACCATATCCCCTTTCATTGCCCACCACTTCCCCTTCCTCCCACCTGCCGCCTCCACCAAGGAATTTTA
-ATGAATACCACTGAATTCTGGGATACGGAGCCATTGTCTCTAGAATATCCTGCAAAATGGTTGTAGGTTTTCAACGTTTC
-TGGTAATCCGGAGTGATTTGGAACTTCTAAACTGCAGTGGAAGGTTGAAGTTGTTGCCCATGGGAGTTACTGAGACATCA
-AGACTTTATCATTAGCAGGAAACCCCTAAGTGTGTCTCTAGATTGGAAGCTTTTCTTAAGGGAGCAGAATATCTACTGGA
-GACTCTTGGCTGACACAGGACAAGAGATGAAAGTCAAGAAGGAAAAGTTTTAGTGTCATCAAATTGGAAAGCATTGGGGA
-AATGTAGGTGGTAGGGAGTAGATAGGATGAAGGGATTGTAGACAGACAGCAGACTTATAAACATGGAGGATGTTAGAATG
-GCAAAAGGTGAAGGAGGATCAGTCAACTAAAGTTCTTCCATTGTCATTTTAGTAGGCCACAGATCAAGGATGGGTATCTC
-AAAGACTTACGTGATCTTCTACCAATACTTCTAATTAAAGTTAAACAAGGCAAACTATCTCTCCCCATCCCCAAAGTTAT
-AATAATATACTATTTTATCTCAAATTATAACTTGTACAGTAGCATTTTTAGGTTTCTTTCTGGCTTCAGAGTAAGATGTG
-AAACAGCAAATAATATTAGAAAATCAGTATAGATTTTTACAATTTATAATTTTTTTGTTCTTGTTTCCAGGAACTGCTGT
-CATCAATTTATGGTGTACCAACCACATCAGAGGGAAAGAAAGTACAGAAGGGTAATGTGGTTCATCTGAATTCATTGATT
-ACCAGTGGTTATACTAAGAAAGTGGATATCACATTTATTCCACGGAGGGTAAGTGCTTCGAAAAGATCTTCATAGCATGG
-TAGAAGCTCATAATGTCATTTTTTCAAAAGCTTTTTATGTAGAATATCCAAACAAATCTGCACAGTTTGTCTTTCATAGT
-TACTACTTGTGAATGTTCTTTTGCCAGGTTCTGGTACTTTCAACTCAGTATGCCCAAGTGATAGCTCCCGGCATCTAGTT
-CTCTTTCTATTACTATTTCTGTATTGAGATTTACATTTTCCTAGAAAGGTTGAAGTCTTTCTGAATCAATGGCATGATCT
-GCAGCTGTTTAATCACTAACTCCTAAGGATACTTTTTTTTGGTACTTCTCAGACCCAACCCTTCTTTGTACTTAACTACT
-ACCAGCTCATGCAGGAGTTTCATATAAATCAAGACTGGATTTATTCAGTAGCTTCCGAAAACCTCCACAACTAAAGAGGT
-GGAGACATCTTTTGGAGAAAAGAGTTGTCTTTCCATTGGCCATCCAACCAGGCTGAACAAGCAGCTCCCCTCGCCTTCTA
-TTATAAAAATAATTTTGACTTCTACATAAGACATATAGGTAGTAAACCTAGATGATCTTCTAATTCCTTTGCTTCCCTGT
-TTTGGCATCCTAAAAAACGCACAGCAGCTGGTCTGAGCATAACTGGCCAGAGAAGTAACTGAATAATATTTCCGACATTA
-TTTGTCTAGACAGTCATCATCAAAAACAGTGATGCTCGTGCAACCACTAGTGTCATATGAGAGGGGGGGAAGAAGTTAAA
-ACACATCTAAAAGTAAATTTAATAGTTTTAAGTTAAAACTATAAACAAATTTTTAAGTTAAAACTGTGTATTGAAAATTG
-TCTGGATATTAGCATATTTACTGGCTGTCATACTCATACCTGCTGGGGTATGGCTATTTTTCTTTTTAAGATTTGGAGTC
-CTGAAGCCACAACAGCAGAGCTGATCAGGAAGAGGGAACTACGGCGAGAGAGGTTTACACATGAGGTGGACTTCGACGAT
-TTTATGATGCCTTTTCAGAAGAACATCACAGAGAAAGCTCGAGCACTGGAAGCTGCCTTGAAGACCTAAGTCATAGCAGT
-TATTTCTTGGGGTAAATGCTTTGAGGCCCAGGGACCAATCTTTGGAGAAAGTAGATATTTCCATCAAAGCCAAAGCAATC
-CATACACCAAGAACTTGTTACCAAGAATTTCTTTTTGCTTTAACAACTATAAATATTCTTAGCTGTCTAGAGAAAAGATG
-TATGTTATTTTGAAATGAATGGTATGTCATTCTGGATAAATCCCCAAGCCCCTTTATGAATGTAGTGAAATACATGGCAT
-GTGGGTTATAAACGTTGCTGTCAAAAGATTTACCAGGTCTACACCATTATGCTTATTATTTTTTTAATTATCCTTTTTAT
-TTATTAAATAGAGACAGAGTCTCACTATATTGCCCCAGCTGGTCTCGAACTCTTGAGCTCAGGCAGTCCTCCCAACTTGG
-CCGTCGAAAGTGCTGGGATTATAGGCATGAGCTACTGTGCCCAGCCTGCTTATTGAAGATACATTTCTAGTGGAAATTGA
-TGAAACAATTTAGGTTTTGGAAAAAGAAGTAATATTTAATCTTTTAAGGAAGGAGTTTATTTCTCACATGCCATTATAAA
-CTATGTGTATTAGATACCTTGGGTTGAATACACTTTTAACAGCCCTAGATCGATAGCCCTAGCCCTAGATAGATAGCCCT
-AGCCCTAGATAGATAGCTATTAGGTTGGTGCAAAAGTAATTGTGGTTTTTGCCATAACCTTTAATTGCAGCAAAAACCGC
-AATTACTTTTGCTCCAACCTGACAGCTAGGTATCTAGCTAGCTAGAAAGGCAGATAGACAGATATATAGATGATAGATAG
-ATAGATGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGATAGATAGAGATTTATTGCAAA
-TAATTGGTTTACATAATTTTGGGCCCCAGATGGTTAAGTGCTAAATTTGTAGGGTAGGCTATCAGGAAGTGCAGGCTGGA
-AACATGCAGGAGCTGTCCCTGAAGTCCACAAGTGGAATTTCTTCTTCATCATGGAAACCTCAGTTTTGTTCATACACCTA
-AATACTTCAGTATGTCTTTCCTAAAATAAAAGGCATCCATTTACCTAACCAGATTACGATTGTGAAAATTTCAACTGTTG
-TTAAAGCGACTGATGGGATCAGTTTCACCTAGATTATCTAAAGCAGTCTCCTTTACATAAAGTCAATGAATTGTAAATAT
-TGGTTGCATGTACACAATTCCTTCACCACAACACCTAAGATTAGTATTTGATTGAGTTACTGGGTGCTACAACCTAGCCA
-AGTTGAGTCATAAAACTGACCATCTCTGGAGGTGTACTCTGCAGTAAAAAGCTAGCTGAGGCATTATTCACACCAAGAAA
-TGCAGTGGGTACCGAACAGGAGCTCCAAAAATATCCAACGTCTCATTGACAGAAAGAAGCCACTTTAGAATCTGCCTTAC
-CAGAAGGCACCAATTGCAGATTACAGCTCTGTCAGTCACGTATGGATTAAACCCCTTTCCTCTAACCTCCTCCCTCTCTT
-TCCAACCTTGGAGGGACCTTCCACAGGAGCCAGTTAGGGAGGAGAAGGGAAGAGAGAGAATGAAGCAGGTAACCAGGCCC
-ACCCCTCTGGAGGAGACAGACCTGAACAGGGGTTGCTTACAAGCATTGCATTTGGATCCCAAGATTTGCTATTACAACTA
-AATTTTGTCTGTTTTGTAAGGTTTTGGTTGGTTTTTTTGTTCTCTCTTTTCTTTTTGTTTTGACATAATTTCATATTTAT
-GGAAAAGTTGCAATAATTTGACAAAGAATTCTTATATGCCCTTTACCCAGATTACCTAAATGTTAACCACTTACCACATT
-TGCTCTATCTCTTTCTCCCTCTACATATATGCATATGTATGTTTAATTTTTGTCCCCGAACTATCTGTGTGTCCGTTGAA
-GACATGATGAAGACATGATGTTCTTCACATGATGTTTTCATATTTGTGTGTCAGTTGAAGACATGATGTTTTAAATATTT
-CATTGTGTATTTCCTAAAATCACGATGTTCTTTTGCATAACAATATTACCATTGGCAAACTAAGGAAATTAACACTTAAG
-TGAACTATTTAATCTATAGACCTTATTCAGATTTTGCTATTTATCCCAATAATTTCCTTTGTACTCCCAGGTCATGAAAT
-ACATTCGCTTGCCCCATCTCTTTAGTCTCTTTTAGTTTAGAACAACCTGTATTTCTTGTTTGTTTGTTTGTTTGTTTGTT
-TATGACAGTATATAAGAAGAACACAAGCCACTTTTATCTTGTAAAATGTCTCTCAACTTTGGTTTGTCTTAAATGTCTTC
-AAGAATAGATTCAGGTGATGCTTTTGGGGCAGCAGTGCTACAGATGTCATTGCACCCTTCTCAGTACATCATATCAGGAG
-GCACATGATGTTGATACCTGATATAAACTTTAACTGCATTTGCAGTTGAGAGAAATGTAAATAAAAGTAAAGCTGCAGTA
-ATAAATCATAACTGCATAAAATTAACTGTAGTACATACTGTACAACTGTAATAATTTCATAGCCACCTCCTGTTGCTATT
-GTGTTGAGTTCAATTGTTGTCTTTTCTCAAGCTTACTTTATTGCACAAATACAGTATTTATAACATACAAAATACGTGTT
-AATTGATTATGCTATGGGTAAGGCTTTTGGTCAACAGTAAGTTATTAGTATCTAAGTTTTTTGGGAGGCAAAACTTATAC
-ATGGATTTTTTTATTGTAAGGAGAGTTGGTGCCGGTAACTCTCTAGTAGTTTTCCTTGTACTTAATGAATATCTGATAGA
-TAGATACTTTGAAACTATGGAAATTTCCTTCTACTTTCATACTTTCACCTACTAATTTTAGCATCCATGGATGATTCTCG
-CCTAAAATAATTATTACAGTGACAGTTGCCATAAAATAATTTCTACATTTTATCATTCTTTCCATTTCTTACTTGGCCTT
-CTGCTGTTGGGCAGAGCTTTCTTTTCTTCCTTATTAATTTATGTACTCAAATCAGTACAGACTCATGCATTCCCTTTTTA
-TTTAATGCGAATTATATATGTGTGGGGACCAACTCAGAACTCCAGAGTTGGTATAAAGATTATTTTAAGCCAAAGACATT
-TGAGATTTAACATACCATATGCAGGGGAAAAAAAAGTCTTCTCAGACCTTTGCTTATCTGACTACAAGCAGTAACTTCTA
-GGAAATAAGGCTGCCATAAATTCCTCTTCAGGTTTGATCTACTTCTAGAACACAAGTAATCCTACCCCAAATCCCTTCTC
-CAGAAGTGTTGTATGGCCCCGAAGGAAATTTAAGGACCATTTATACCTGTATAGATAAACATTATCACGTACTTTTTTAT
-CTCCTGTTTGTTCACCTGAAAACTCATGTATCTTTGTAAAAAGTCATTGTGTTTACATAAATGTCTTCTCCCCCTCCCCT
-TTGCTTATCAAGATGATTATAAGCCACCGATTTTAACTATCCCTTTCAGTTACTCATCACTGAGTTCTCCCAAGTGTATA
-TGCCTTGCATGCATAAACTTGTTTTCTCCTGTTAAAATGCCTTTTGTCAGTTTAATTCACAGGCTCCAGGCATTGAACCT
-AAGAGGGTAGAGGAAAAGTTAATCCTCCCCTATGTGATCCTTTACTCTCATTATTAATTTTGATGCTCAAATTGTCCCTG
-ATTTAACTAGGGGAAAACCCTTCAAGTTGGCTCCTGATAAAAAGACATTTTGTTTTCTAAAACAATCAGAGGACTCTTTA
-TTTCTTGAATGTGAGGGAAAATGCCTACCTTTGGCTTCGTTCAGGAACAAGGAAAATGAATCTGCAACAGCAGATTTTCA
-GAGGTGATCACTTTCTGTTTTCACTCTAGTGAGTACATTTTTTAAATGTCAGTTTGATAGATAGTGGTGTCCTGGGATCA
-CCTTCAGCCACTTGCAAATATAAACTGAGAGTAAGCATTAATGTTAGGTCCTATTAACTCTCTTTCCCCACATACGGAGT
-GTTTGTATTCATTTTAATGGCTCAACATGTTTAAAGGGGAATTGTGTGAGGGGAACAGTCACACAATTGACTGAGTTTAT
-TTGGAGTTTAATGCTAAACCCAAACATAGCATAGCCACAGTTCTAACAATGGCCCATAAGAACATCAGTGCTATTCAAAG
-AGTGATCCACAGGCCAGCAGCATCACAGGGAGCTTGCTCCCACTACCTGCCGCCCAAAATTATGGTACTGAAGTCTATAT
-GAGCGTAACGAAAATTTTGTAGAGGAAATCTTACTGGCATAAAAAGACTGTCAATGTTGCATGTAAAGTACCTACATTAT
-AAGTAGTATAATATCAGACTTGCAAATGCACAACATGTACATAAATAGTAATTTTTCTGGGTCTTTATGAGTTATCTGAC
-CTTTATTGTTTTATTTTGGCTTACCTGTATTTTCTGTTTTTCTTTTTCTTTTCTTTTTTTTACAATGTACACGTATTACT
-TTGGAATTAACAATTTTTTTTTAAAAAAGAAAAAACACAAGTTAACACCAAAGTCCATAATACCAAAGTGAGTTTATTAG
-TATTTGCCTCTTTTATGCCTTTTTGTGCATTGCATTAAGATTCTCTCAGAAGAACGGAGCCAAGAGTTCAGGAGCAAATG
-ATGTGTGAAGGAAGTGCTCCCAGGGGAGAGCAGTATGGGGTGAGGGGTATGAAACAGGACACGGAAATGAAAGGAGCCAA
-ACAAGGGTGCGCTTTCAGATGAAACCACAGCTTCTGAGTAGCCCGTGGGGAGCTGTAGCGCACAGGCAAGGAGCTGGGCT
-TCTGGGTTCCTGTATCAGTGAGCAGCTGCAGGATTGAGGGTGTACTGGCGAGGCTGTTCCAGTGCTCGAGGGCAAGTCTG
-CAAAGGTCATGGTGGGAACTATTGGCTAGAAAGCATGCAGAAGCTGTAACTGCGTGCATAGCACAGGAAAGGGAACACAT
-GCACTTATCTTTAAATTTACACTTCGGTGAACTGGGTAAGACTGTGGGTTTTATATTAGCAGACCTGGATTTGAATCTGC
-ATATTGTTAGTCATCTGCATTTACTGCCTGCTTGCCTATGGATCAAGTTATGAAGGGTCATGACTCCGAATTTCATCATT
-TATAAAGTAGGGATAATAATACGTCCCTCAATGAACTCTTATGAGACTCTAGTGGAATAATGTCTTTAAGGATGCTCAGT
-CTGTGCCCATGCCTGGTTGGTGGTCAACATATGGTTTGTTTTTAACCATCTTATAGTCTCTATCTGAAAAGTGAACCAAA
-AGAAGGCACAGGAAGGAATAAGGACCCAGACCTGAACAGTCAGAACAGAAAAGGCTTCCTGGAGCAGATTCACTTTCAGA
-CCATCGAAGTCATTTAAACATATGTGTGTGTGTGTGTGTGTGTGTGTGCATGTGTGTGTGCGTGTATATATATATATTTT
-TTTTTGAGACAGGGTCTCATGGAGCGCAGTAGCATGATCTCAGTTCATTGCAACCTCCACCTCCTGGGTTCAAGAGATTC
-TCCTGCCTCAGCCTACCGATTTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCC
-TGACCTCAAGTGATCCTCCTGTTTCTGCCTCCCAAAATACTGGGATTACAGGTGTGAGCCATCGCACCTGGCCCTAAACA
-TGTAGATATTTTATCTACATATTTATCTACTTTATCCAGTTTCTGATAATCAGAGAAAAATGAAAAATCCCTATTTGCCA
-TGAGATATACTTACTAATTTCAGTATAGTTCCTGTGGATAGTGGCCCAAAGGTTATCTAGGTAATTACTAGTTAGGTAGT
-TAAAATAATGTCTTAGATCAAGCTTCCTAGAAATAGAAGCTGAGATGGGGACTCTAGTGCAAGTGACTTATTAAGAAGGA
-ACATGTCAGGGAATGAGAGAAGCAGAATAAAGCAGGGAAAGATCTGAGGGAAGGTTGTGATCTCAGGAGGGCATTAGCAC
-CAGCCTAATTTCCTGGAGAGCTTTGGAGGATGAATGGAACCACAGAGGTTTGTCCTGCCCAGAGGGAAGAAGCCTGCCTG
-TTACATCCTGCATCAATCAGTCATTAACCAGCCCCTTGTCAGGAGAGAAACCTTTCAAGTGTCACCTGGCTGATTCGCAA
-GGTGGCTCTGATCAGCCAAAGGCAATCCCCAGAGAAGTGGGTAGCACTTAGCCTCCAACCACAGCAGCTGAGCACTGGGT
-GGGCCAGCTGGTTAAGGGGATCTGGGCAGCGTACCAACAGCATCTGCTACAAATGGCATGCTCTTGTGTGCAAAGTTCAG
-GTGCAAAATTTCAGATGGTGACTCCTTGAGATCACTTTGCATGACACACTTTGTTTTTAAAAAGAATATTAACTTCAACA
-AACTTCTGAACTTGCCTCATTGTTAAGAATAAAGATGAATGAGCAAGAACAGCATTGATAACTGATTTGGCAGCTAGTTG
-AAAGGGGAATCACAACTTGAGTGTTACCAACTTTAGTGTTATCAATGGTTAAAAATGATAAACATGAGAGACAGAAAGAT
-GTACTCAGCCTTATGCTCAGGATAAGGTAATGTCTAATTGGTACAAATCAATCATCCCCAGTGAAGTTAGTTTAGCAACT
-TTTATTAAAGTCACAATGTAGCCGTGAAAAGTGCCCAAAAGAACTACTGAGCCTGTACTTTTTTTCAAAACGGGTGGTGT
-AAAAAGAGAGAAATGGGAAAATTCAAATGCCTTCTCCACACTGGCATAAATTTGAAGTAAACAGTCATCTGAACTATGGT
-ATTATTAACTATTTACACAGTATGTATATTTCATTATATGGATTTGTATTTCTGTAACAATGCATCCTAGGGGAAGTTTA
-CAAATGAAGGTAGATGGGGTGTTTGTGTATATCAAATAACCATGTGCTAATATTCATAGATCCTTAGGTAATTATTACTA
-CATCATGAATTTTATCTGAGTAATAAGGAAGAACTGAATATTCTGTTGAGATTCTGGAACTTACTGGAGATTTCTTTTAT
-CCTAGATAAATAATTGAGTATTGTGTGATGTATGATGTGATACGTGTGTGTAGGTATGTGTTTATTCAGGATTAATGATG
-GTATTTTCCTTTTATCTTCAGTAAATAAGACTTTGAAGAGGAATTAATATGCAAAAAAAGATTTATTTTTCATAGGCTTA
-ATGACTTTTTGTAAGATGGTTTGAAATAGCCATATATTTTTCTAAATGTGGGAGATTGTTATGTTGTTCATTATTGAGAC
-TCGCAGGCTGCAGTTCGATGCTTTCCTCTGAAAAGCATTAGAAGTGAGAAAAATAAGTGAGAGAAATAAGTATTCCCTCA
-TAAAAATTAAATAATGAAATTAACACATAAAGAATTAAATGAGCAATGAGTATTATTGATGTCTGAATATATCTCACACT
-AAAGCAACACTTCCCAACACTTCCCAAAGCTAACAAGTCAGCCAGAAGGAGAATTGATCAGCAATAGAAAATCATGGAAT
-GAGAGTACCTAGGCAGACCTTGTGTGTTCAGACTCTGCAGACCTCTGGTCCATATAACACATGCGTCTCAGTTAGAGATT
-GAGACTTTTCATGATGTCCAAGGTTGCTACTGCCAGAATGCTGAATCTATCAGCAGCCCTTGTTCTACATACAATTTGGT
-TTTATTCATTCAGCATATATTTATTGAGCACCGATAATGAAAATCCTAGGTCTGTTCCTTGCTCTCTTCATGGTGCATGA
-CAGGAGAGCAATTCATCCAGTTTGCATGTCCCAGGTTTCTGCATTATTTGGCTTCCAGTAGGATCCAGACAACAGGAGAC
-AACAAAAGATGAGAGAGGGAGGAGAGGAAAAGCCAGGTAGTTCCCCCTTTCCATCTTTGCCTTTGTCGGCATCCCCGTCA
-ACAGCTGTGTCTGTCTCCCCCATGACTCCACTCCCCACTGTGTGGGGAGCTGTGTATCCTGCTGTGGTCCTAGCCTCCCT
-CATGTGACCCTGGCCCCTAGGCTCTGGTAGTACTACCCACTCCCTCTGTCCCTTAAGCCTCCAAGGGTGGTACCAGCTTC
-TTTTGTTGTTAGTCTCAGGGCTGCCTCACTGTGCTCTGGTTGTTTCCTCAGCCTCTTCTATTGCTTGTGCAACCAAATCC
-TCCCATTAACTTCCATTCTGTAGGAACTCAGAGTTGTTTCTGCTTTCCCATGTGGATCCTGATTAATCACGTATCAAGCA
-CAATGGCATGTCTGGATAAAATGGAATGCAAAACCAGGAATAGCCCCTGCCCTCATGGAGTTTATAGTTTCGTAGGAAAA
-GCATATTTTCATAGAATAATCCTAAAATACTTATGAGATGATTGCACAAGATTGAATAATTGAAGATTATCAAAAGACTC
-ACAAGATTTCACAGTGTGTATTTGAGTAAGGTTTTAATACAGGTGAAGGATACATTAGGACACAGAGCACAGATGATCAC
-AGAGGGGTCTAGGGCTTCCAGGCACAGCCCCCCAGGGTCCATTTTAATCACTCGGTACAGGACACATTTTATCTTCAGAT
-TATATACGATCACCGTAAGTGTGAGTCCAGGTATATAATTTATTGAGGGGTCTTTCATACCCACCAGCCATGTAGCTAAA
-CCCAGGCTGTATACCCTGTTAGACCAGGTACAAACTATCAGTCTATACAGTCCTAAACAATGTAGACAAGCTAATACAGG
-CTGCCTCCAGGGGAATTTCGAGCTTTAAATAGCACATTGCACATTATAAAGTCCTCAGTAGCACATTTCATTCTTACCTT
-GACCAGACTTCAAGCATCCCAGGAGACAAACAGAGGGCTACCCCAGGATAGCTGCAAGGTAACGCTACCTTATACAACAT
-ATGAACTTATAGTGGTGCTACAGAATAGGGGAAATTTTCACTAATGAAATGGTATTTTAGCTGAACTCTAAAGAATGAGT
-GAGGAATTAAGTTGACCCAGAGGGAAGAGAGGAATTGAGTAGAAGCAGCAGCATTTTGCAGTGCAGACCCATTCCAGCAA
-GTGAAATAAAAGCAATGTGACAAGAAATAAATAAAAAATGGTCAGGGAAAAGAGGCCAAAGCCACATCCTGGAGAGATTT
-GTAAGACAACCATATGGATTTGGAAAGTGATGGATTTCCATTTGATTCTGCTGATTCGTCCCTTGTCCTAGAAATTTTCT
-TGACTTTAGCAACACCACAGTTTCCTGGTGCTTCTCAATATCCTTTGTAGCCATGCTTTTTGCATCAGGACTCTCAACAC
-CAGCAGACAATAACAAGAGAATTATTAAGACTTAGAAAAAGAGAATTCTTAATACAGAATTTCAAGGGGTGGATTGAGCA
-AGACTGGAGGCAAAACATCTTCCCTGAAAACCATTTCTCTCTTCCTTGCTTGCTGACATTCTCACTGTCTGGCTCCCTTG
-CTCTCTCTACTTGGCTTTAGTCTGTGTGAGCTCCAACCTTAGCTAGAATGTAGCAAAGATGTCCACCAGAAGCTCCAGGG
-TTACATCCTAGAACTCCAAGTGAAATGAGGTACTCTTTCCCAGCTGGTCCTGTGAAAACCCTGATCGCACTCTCAATGGT
-CAGGCTTGAGTCAAGGGTCTTTCTCCACACCAGTCATTATACAACAGGACACAAGATTCTGATTGGCCAGATCATTTTGT
-CAGCCCATGACTCAGGGAATGAGTCACTCTACCCAAAACACCAGACTGCTACTTGTATAGGTGTGGGCTCCCAAGAAAAA
-GTAGGGATTATTCTTCCCCAAAAAAAGAGTTAGGGATGCTGGAAAGGCAGAAAGAAAAGGGAAGGGAAGAGGAAGGGGAA
-AAGGAAAGAAAAAAAAGAAAGAAAGAAAGAGAAAGAAAGAGAAAGAGAAAGAAAGAGGAAAGAGAGAAAGAGAAAGAGAA
-GGAAAGAGAAAGAAAGAGAAGGAAAGAGAGAAAGAGAAAGAGAAAGAGAGAGAAAGAAAGGAAGGAAGGAAGAAAAATGA
-AGGGAGGAAGGAAAAAGGAGACAGGAAGGAAGAAAGAAAAAGAAGAAAAAAGAGAGGGGAAGAAAAGAAAGGAATAAAGA
-AAGAAGAGAAAGATGGAGAAGAAAACAAACCAAAAAAGTGGCTACTACAACCTCCGCCTGACCATTAAATGTCGGAATTT
-CTCAAGACTCAGTTTCAAACCTTCATCTCACACTACGAGCTCTCCCTAGGCAAGCTCATTTGCACTCTCTCCTTGGAATG
-ACTCCCACATTTGTGTCTTAAGCGTAGTTATTTCATCTAAGCCTACAGAAACATATCTAATTATACTTGACATCAGTTCT
-TGAATTTACAAACGCTCCTGAAACTCAACAATTCCCAAATCAAACTTTAGACCTCTACTGCCCATCCTTAAGTCTAGTTT
-ACTTCGAGTGTTTTCTAGTTCAGTAATGGAACCACCAACATTCTGCTATGAAAGCCAAACTCCCAGATATCATCATGACT
-TGCTTCCCCAAGCACCCACCCACCCCAATTCAACTCCATTTAATCTCATAAATTCTTGTGACTCTTCCTCCTACTATCTC
-CACCCTTACCGCCGTAGTCTACCTTATCATCTTACCCAGAAAACTGTAAGAAATATTCTGATCTGTTCTTTTATCTCCTT
-CTGTCCTGCAGTCTATCTATACATTGATGCCAGACAAGTCTTTTCAAGGATGAAAAGTGATTACTTCAGTACTCTACCTA
-CCATCTAATTAAAATACTTTCAAAATTACTGATTTTCTTAATAATATAAGAAAATGTATGTGAACATGGCCTATGATCAC
-CTGAGCGGTCTGAGCATACTTACTCCTCCCCCAGATCAGGCCTTTAAACACTCTGCTGTAGACAGTCTGTTATTTTATTT
-TATGTACATGCTCCCACCTTCCATTAAGTTTTTGCATAAACTGTATCCTCCTTGTCCAGGAATTCATTCTCCCTCCTCTT
-CCCCAATACCTCATCTGCTTAATTTTCCATTCCTTTTTCATCTCAGAGAAATCATCTCTTTGTTAGGGCAGACTTCCTCA
-CCTTCCTCACGAAGTTAAATTCTCTTCCTATATACATTCATAGATCACAATGCACCTTCCTTCACGGCACTTACCGCAGT
-TGCAACTATATCTTCACCTGTGCAATTATTTGAATAATATTTAATTATTTGACACCATAACTGTCATGACTGAACATTCC
-AAAATATACCACATATTTTCTGGCCACATTGATGGGATTATAACATAATATAAACTTGAATTATTTTAAAATTTGTGCAC
-AACTGAAAATCACGTATGTACTTTCTCAGTGCCTCTTTATGTGGAGAGTTTATCTTATACTAATTCATCCCTGACTATTG
-TACTCCTGAGTTCCTGCCTCTGTTCTTTAGAATGGTTTCTATTTTTTTTCTGCTGGACTGTATTAGCCTTTCCTTTTGCC
-ACTGGGAACATAGCTGTTTGTAGCTATCCCAGGTGTATAAGTAACCTAAATGGCTGCTTATAATTTCTGCCCACTAGGAG
-AGGGACTCCTTTACTCCATTAGTCTCCTGTTTGAATCTTAACTCTGCCCCAGGCTTCAGGATACATAAACACTGCCAATC
-ATTCTTAAGAAGTGAAGGGATTGCAAATAAGCAAAGAAAAAGTAATTTTAAACATTCTTTCCAAATGACCTTGCAAGAGT
-TTTTTCCATTTTTAGAGGGAATAGTGGGAGTCAGAATTGGCAGAATAAAAGCAGCGTATTCCTAGACCATATATCAGCAG
-ATAAATGTGTTCTGCAGCATTAAAATTACCCTTGTGGTGCTCATTCCTGGATGTACCATGTGTTCTGTGATGTAAATCAG
-TACATAGCCTTATATTTTCCTCTGTGTCATGGACCCACAGAATTGCAGTAGCATGAACTGGTTGGCAACAAAATTCTTTC
-CAGTGCTTCATAAAGCCTTTGGCTTTTCTTCATTTGATATGTGTGAGTAGGAATGCACAAAAAACAAGAACAGATGATAT
-TATTTAAACCGTTTGGTAAGAAATGTCTGACAGGAAAAAAGAAAACATATGTATCGATTCAAGTGCAGTAATTCGCTTGG
-CGGTTTTCTATATTATCCTTTCTACTTGTAAAAATCATCTCCAATGCAGCAAAATGTTCTTAAATCCTTTATACTTCATT
-CTAAAAATCAATAGTCCAAAGATGTTAACTCTTTTTGGGCTTTTGGAAAACAAAACAAAAACCAGAAAAGAGAGGATAAA
-TGTTTTCATTTTTATCTAAATTTTTCTGGTTGTTTCTGGTTTTTCCGTCTCCACTTCATTATTACTAACATGGAATTATT
-GATAAAGCTTAAAAGAAGAGAAACACAAATTCAGACTTTAGGAACTCACTTGAAATCCTTACTTAAAGACTAAAAGTCAT
-TCATTTATTCATTTCATTCAATAAATACTAAGGATCTACTATTTTCCAGTTGGCCTCTTTGGCACTGGTGTATAATGCTA
-CACGCAGCACTCACTGCTCCCTTGGTTCCTGCCACCATAATAGGGAGATAGCAATTAAATAAACACAGCTATATTATTAT
-AAATTGGGATGCATGTTACCATGGAAAAGTACTGGGTGGAGTTTTAGTTTGAGAGTCAGGGAGTGCCTCTCTGAAGAAAT
-GTCTACTATGAGACCTAAAAAATGAGTAGAAGTTGTCAGATTAAGGGGAGGAAAGGTGTTTTAGCCTGTTTTCTGCTACT
-ATAACAGAATACCACAAACTGTGTAATTTATAAACAATAGACATTTATTTGGTTCATAGTTCTGGAGACTGGGAAGTCCA
-AGGTCAAGGGGCTGCATCTGGTGAGAGCCTTCTTGTTGCACCATAACATGGTGGAAGGGCAAACAAGCAAGTGAGACAGA
-GAGAAAAAGTAGGCCAAACTCCCAAGATAACTAGCCTACTGCCAAGATAACAGCATTAACCCATTCATAAGGACAGAGCC
-CTCATGACTAACCTCTTAAAAGCCCCACTGCCTGATAGAACTATATTGACAGTTAAATTTCAATATGAACTATGGAGAAC
-AGTTTGGAGGTTCCTCAAGAAACTAAAAAAATAGCTACCATATGATCTAGCAAGCCCACTGCTGGGTATATACCCAAAGT
-AAAGGAAATCAATATATTGAAGGGATATCTGCACTTCCATGTTTGTTGCAGCTCTGTTCACAATAGCCAAGATTCAGAAG
-CAACCTAAGTGTCCATCAAGAGATGAATGGATAAAGAAAATGTGGTACTTATACACAATGGAGTACTATTCAGCCATAAA
-AAAGAATGAGACCCTGTCATTTGCAGCAACATGGGTGGAACTGGAGGTCATTATATTAAGAGAAATAAGCCAGGCAAGAA
-AAGACAAACATTGCATGTTGTCACCTATTTGTACGATCTAAAAATCAAAACAATGGAACCCAAGGAGATAGAGAGTAGAA
-GGATGGTTACCAGAGGCTGGGAAGGGTAGTGGGGAAATGGGAGACAGGGTAGAAAAGGTTAATGAGTACGAACAATAATT
-AGAATGAATGAATAAGGCCTGGTATTTGATAGCACAATAGGGTGACTGTAGTCAATAGTAATTTAATTGTAAATTTAAAA
-ATAACTGTAATTGGATTGTTTATACCAGAAAAGACAGACGCTTGGGGTGATGGATAGCCCATTTTCCATGATGTGATTAC
-ACATTGCATACCTGTATCTAAACATCTCATGTACCCCATGATGCAACTACCATATATCCACAAAAATTAAATATAAAACA
-TTATATAAAAATTTCCACATAATTTTCAAAAGGGATACTCTATAGTGGCGTGGGGAGGCAATCTACACATGAGGGGGAAA
-TACCTGCCACAACTCTGAGGCCAGAAAGAGCCTGGCTTGGTGAAGAGCAGGAAGAAAACCAGAAAAGCTTGCACAAAGAT
-GGTGGTAGCAAGGGGAAGCCAGCTTAGGACAAGGTTGACGAAGAGGACGGGGCCAGATATCGAGGAACTCGCAGGGAAGA
-GTAAGGAGTGTGGATTTCTTTCCAAGTTCAATTGGTTTTCACATTGCTGATAGCATCTCCCAAGTGATTACAAGTCACAT
-TGCTCTGTATCATCCATAAATTATCCTCAAGAACTCCTAGGGCCATAACAATTTTATGAAGGACTCAGCTCTGATAATAG
-AAAGTCAATATTTTTAGTCTCTAGCTTTTCAAGTAGGCAGCTGGAAGTATAGCCAAAGGATTTCAGATTTCACAAATGTG
-AGATCAAGAGACATCTGCTAGTCTCTGTTCAATCTCTAATTTTCCTGTGTCTTTCTAAGTGACACAGAATTAGTAGGCTT
-AGAATTTGCTGTAAAAACTTGTTAAATCCATGCTTTGTTCTTTAACAGCATCTTAGCTCTTCTGCTTACTAGCTTTGTGA
-CTTGGCAAGTTGTTTGACCTCTCAGATTCTGTTTTCTCATGTATAAAATAGGGACACACTACAGTAGTGATTAGCACTAT
-TCACCAAATATTTCCTGCTCTCTCCACTTTGGACACACGGTAGGATTATACTCTCTGCCCCATTCCCTTGTAGTTAGGTG
-GTGTCAGGTGACTAGTTCTGACGAATGAGCTATGCATGGAAGTGAGGTTTGCCATTTCCAGGCTGGAGCTTTTGATTGCA
-AGTGTGAGGCTCTCTGAGCAATCCTCCCCTCTGCTGCCGGCCGCTCTGTCAGCCTAGGAAATATGGAGTAGGATGCAGAG
-TTGCCCATCAATGGACATGGTGGGTTATAAGCAACTGGGACTTTAGGTTATTGACCAGCCTCACTAACAGACTTACTTCA
-TAGGTTTGTGATTAGAACTTGTATTCATCCATTCTTACACTGCTATTAAAAATACCTGAGACTGGGTAATTTATAAACAA
-AAGAGGTTTAATTGGCTCACAGTTCTGCAGGCTATACAGGAAGCATAGCAACTTCTGGCTCAGGGGAGACTTCAGAAAGC
-TTCCAATTATGGCAGAAGGCAAAGGGGCAGCGAGGCACTTCACGGCCAGAGTAGGAAGAAGAGAGAGGGTGGGGAGGTGC
-CACACACTTTTAAACAACCAGCTCTCATGAGAATTCACTCACTATACAGTATCAAGCAGCGGACGATGCTAAACCATTCA
-CGATAACTTTGTCCCCATGATCCACTCACCTCCCACCAGGCCCCTTCTCCAACACTGGGGACATGGTGATTTGGGTGGGG
-ACATGCATGATTTGACATGAGATTTGGGTGGGGACACAGATCCATACCATATCAGAACTTAATGGGATAATAGACACTAG
-GCAATTGTTATACTATCTGGCACACTATGAAGTACTAAATATAGGTTTCTATATTTCAAGTAAGCATTACCGGATTTCTC
-TGCCCAAGCATTTGCGTAGCTTTCAGGATTTAATTTTCAAGCCCAGAATTGAATGATTCAAGTTACCGTTAGAAATATTT
-ACCCTGACATTTAATTATACATGCAAATTATTGGCCATCGTTTGTAAATCATATTTTTGGTTTATGATAATAGGTGATCT
-GCAAGAACCTCCAAGAACTGAACATTACTGTGCTCACAAAAGTAAACTCATAATGGCTGAAAACATATCTAATCTCCTTT
-TCAATAAATAATGATATGCAACTGATAGCTCTTGCCAAATGTAATTGAGATAAATCTTAACTGTTTGAAAATATTAAAGA
-AGTATTTACTTTTAATTCATTACAGATGCAAAATGTTTGGGTTTAAAGGAGAAAAATCAAAAGAAAACATTCTAAAATAA
-TATCAATTTCTTTCTCTCCTTGCCATTTTTACAAACATACTCTACCTATAAACATGCACCTGTATAAATTATGACTAAAT
-CTATTTTTACTGCTTCACAGTAAATCTTCTGCTGAATATATGGGGCCTTAATCTCCGGTGTATTATGTACTAAAGGCTAA
-TAGATTTGGCAGCAAAAATAGACAGTTATATTCCATTAAAAACCAACTCCATAATTCATGACTGGACTCGGGGTCTGCTT
-CCAGCCCAATGGCACACCTGGCTCCCAAAGCTCTAAAACAAAATTTCCAGTTTTATAATTGCCAGAGTCATAGTTTTCTC
-CATTTAAAAAAACACATCAATATTTATGTTGTTTTCCATGTGCTCTCAAAATGACAGCTTAAATGATTTGACAATAAGTA
-AGGTTTGATTAAATTCAGTAGTCCCTTGACAGGGGTGGTTTATTTGATTATTCAAATTATTAATCATCATGCCATCTATT
-TAATTTTTTAATACTTAAATGAATTTTTTCTTGTAAAAGAAAATCTTGTAAACAAAATCATATCAGAGAAAGCCCTGCAA
-ATTACAAGGAAGAAATAATCACTCATAATTCCAACCCTAGAAAAATATCACTGTTGACCACTTGAGGACTTTACCCTAGT
-CCTTTTATTCTGCAAACATTTGCCATAGAGGTGCAATAGAACACAAAATAATATATGCTGCTTTTAAATATTTGTGTATA
-ATTATAAATGCAATCTATATAGTTCCTTATAAGGAAATATGAAAATTATTAAGTCAAAAACATAACCCAGGGAAAAAACC
-ATCAGAGATAGTCATTATTCATATTTTAGTGCTTCCCCTAAAAGCAGCCATTACTTAGCTACTTTAGCATTCACTCAAAA
-GGTGTATTCTGCAGAATGGTCCTTAGCAGTGCAATTGTATTTTCCAGAGTGCCAAACATTTATTCACTTTTGAGTTCGAG
-CACCCACACACGTCATGCATTTGCAATATGAAGCAACAACAACGTGTTACACCCTGGTATTATCAATGAAATTAAACCTA
-GCCTGTCCTCTCCAAGAGCTCCAGGTCTGAGGAGGATGTAGACTAGGAAACAATTATAATACAGAGTGATTAATGCTAGG
-ATTTGAGATATGCTCAGGATGCCATGGCACTGCGATGGAACACAAACCTCGTCTGATGGAGGAGAAGGTTTCAGGAAAAC
-CAAAAGCTTCCTGGGGGCTTTGCAGTAAGGCTAGTTCTCAATGGATGCAGCCAAAGACAGAGGAATAGAGTCACAAGTGA
-GCATATGCAATCTAGGATCAAAGGCAATTCCATATGGTTGGAGGATAGAAAGATAGTGACAGGAGATGAGGTGGGAGAAG
-TTGGCCTGCAGGATTTGTATTCCATAATAAGAAGCCTGAATTTTATGCAAAATACAACAAAGCAGTTAAGCAGCAGAGTG
-ACATATTCAGGTATGCATTTAAGAAAGAGCACTCTGGCTGCAGGAGGGGACAGATAAGACATGTGGCAAGGCTGAAGCTA
-AAGAGAACAGTAAACAATGGTCATCATCCAGATTAGAAATGGAGAGAGCCTAAATGAAGGCAGCAGTAATATAATGAATA
-TTAAGAAAGTCAAGGAGGCTTAGACTATTCCTATCTACATGCAGCTTGGGGATTAACCTCAGATGTTGATCATGCTTGCC
-AAATTATTAATAAGACAATATCTCAAGACCTGCCTTGATAATCTCCTTTCAGTCTTATGATATGAGGTTAAAAACAAGGC
-AAATAATATATCTTGGATTCTATCCTAAAGGGATCAATGTAAGAAACCTGGCTAAAATTCTGACACCATAATTGAAATCC
-AGGAACAGAGGCCTATGCTACATCACATACGGAGAGCAGATGGCTCAGAGTGATCATCTCAAGAACTTCTCGTTGGGCAA
-CGTGACTTTTGCAAAAGAACTAGGAAAGTGTTCCTTTGGGCCATGATGATTTATCAAGGCTAGAAGTTGAAATAATAAAT
-CTATTCTGAACAATATACTTACTAAATCGTAGTCATTTATAGCCCTCTAATGAGACAGGTACTCAAATGGGTACACATTT
-GCTAGGTAAACAAATGTATTGCATGGGGAATTAGGGATTTACAGCTAGCAGGGGACATTGAGGCTCAATATTGATGGTTT
-GCTTTTTCCATTTCGGTTGCTAATGTGATTTATTTGCAGTTTTCTTAATCAAGGTGACTGACACAGAAACTATCTAAATT
-TTTTAGCACAGCAGTTAAAACAGTCCACAATACATAATTTGGCTCCTAAATAATTTCTCCCCCAACAATTAGAACTTTCC
-GAAACTGCTTTAAATCGCCTTATGAGGGTATCATGAGTTTGTGGTCATTGGAAGTATTAAAAGAAAAAAGCCTGGAATAT
-CAGTAATGAAATGCATCAAGCAGGAATCATACATACATTAAAATACTGGTTTATAGTTTTGAGGGCGTTTTCTTTTTTTT
-CTGTTGCAGCTATGCGAAGATATGCTTATGTATTAATTGTTTTTCTTGCTAACACTGTATAAGCAAATTCAACTAAATTG
-ATATAAGATTTTGCATACAAGATTAGAAAACCTGATACCTAGAATTATTTTAACACACATTTTTCAAGTTTGCTTATGAC
-TTCACTAGGTTAGAACTTCTTAAAAAGCAATGCTTTAAACATTTTATTCATTCAACCTTTATTGAAAGCCAACATTGTGT
-TGCTGGATATGCAAAAATAAATCATGTATAGTGAGCTATTAAAAATTTTTATCAACTTACAAACTGAGTACAGGTACCTA
-CTCTCACTGTAAAGCCTTAGCAAAAAAAACTGATTAAAATAATGCATAATAGTACATAAAAAATTAAAATCTTCCATTAG
-AGGAACAAAAATTATGAAGAATTTCTAGGAGATAGAAAATAATTATGTACAGAGAAGATAATTCAAAATACATGTTGGAG
-AAAATTACTCTTTCAAAAGTCAGACATGTCCAGAGAAACTGGAAGGGAGGAAGATAGAACTGATGGGAAACATGGCAGAG
-GGGGACACCCCCATCATGTGATGGCAAGAAATGCTGTTTCCACCTGAATGAATTCCCAAAATCTAAAAAACAGGAAAGTG
-AGATCTGAGCTGTATTCATAATTCTTTAACGTTTTCAGTATTCTCTCCAGCACTGCTTACTGAACTTGTTCAGGAGTGAA
-GCCACGTGTCCCCTGGGAGTGTGCTGCACTGGCAAGAAGAAATGGATGACTCACAATTTTGACAGTGACTCTATAGAAAG
-AAAAAAAATCTGTGACTCAGGGCCTTGGGGAGAAGTCATCTCTTCAAAAACTCATCTGATTTTTTTTCATGCCATGTAAT
-TACTCAGAGAACATTAAGAGTCTAAAAAATTTCAACACTGGTGTCTAAGAGATATGGAATTACCTTTTGCCTGAGATGCT
-GGAAGCAGTGGGGGCAAGTTTGTAACTAGAAAGATTTGAGCAAGTCCAGGCTCAGGTATCCAAATTGCCCTCTTTGCTGT
-TGGCATAGGGGATTGAGATTTTCTGGGTCTTAAATAAGGTTTTATTTTTATCTAAGGAACTATAGTTTCTATGCAAATCC
-GAGGGGGCTTAGAGAAACCTAGCGTGGAAAAAAGAAACTGTCAAAGCAGTGTTTGGGGAAATGAGATGGGGAAATTTCAC
-GAATAGTGGGCATAGAGAAACTGACTAGACAAGAGAACGTGAACATTATAATGATATCAAATGGAAAATTTGAAAGTTTA
-TTTTGAAGGAGATGGCTAAAAACAATTTTATTCTGAATGAGAATGTGATTGCCAAGAATCAGTCTTCAAGCAATCCAGGA
-TTTAAATTTCCTTGTTCTAGGCTCAGAATTTAAATAGGCAAAATGCAGGAGTTCGAGGCTGTATGAGCTATGATCATGCC
-TCTGCACTCCAGCATGGGTACAACAGCGAGACTGTATCTAAAAGAATAAAAATAAATAAAATAAAAAATAAATGGGCAAC
-AGGAAAGACTTTAAGACCACTCTCCCCTCGCTGTTCACATGGCTGGGTTCTTCCCATTATCCAGGTTTCAATTTTAAGAT
-CACATCCTTACGTATAGTTTTCACTGAATACTTAGCAATTTGATCAGCAATTTGATCTTATATAACACATTGAAATGCAA
-CACGTGTGTTTCAAAGTCAAGTGATTAGAAGACTGTGGGCCCTAACTGCTGTTTATGGAAGTATGCATCCAAAGCAGATG
-CTGTCAGAGGTCCCATGTACACCCAATTCCATTAACAGTCTCTTCTGATTCTTTTTCTCACTGACAGCCTCTCAGCAAGT
-ACTGGTGCTCTCCCTGAGGATTTTCTCTGGCTGCAGGAGCGTGTTTCAGCGTGCAGGGCAGACTGGAAGAATCTGTGAGT
-TGATGCCTCAGGAAGCAGCCCTCAACAGACATCAGACAGGAAATGCTGGATAAATATCCCAACTTCTCACCTCTTGGGTA
-GGACAACATTGAGGAATGTCCTGCAAAGTCTCCCTAGAGTCCCAAAGGGCCTGAGCCCCAGTTACCCACAGCAGCAATTC
-TGCACATTAGCACACTCCTTTAGTAATTTTCCTCCTTTCCTGTCTTATTTCCTCACTCCTGTCCATTGTTTCCTGGGATC
-ACTCCCGAAGCAAATCACTTGCACTCACATCCACATCTCTACTTCTGGGGAGTCCCAAACTCACAAGACATTTTTCTACA
-AAGGAAAATCAAATATAAAAGAAAGTAGAGTAAGAAGAGTTGGGACCAACAATGACTGATGATTAAGCAGCAAGAATAGC
-GGCAATTAAAAACTGTAGATAACACTATGGATGCACTGATGACACAGTGTCTTGGCCAAGCCCTGTGGGAATTCATACTG
-TTTGCCTGTGTGCAGCAGCGGTGCAAGTTTTGCAGTGTTGTGAAATATTTAGTGGACGCTGACTTTCACAGAATCCTGAA
-TTACTGTTCTCAATAAGCTCCAGTATTGTGCTATTTCAAATGTAGAAATACCAAAGTTTACTAATTGTGAGCTCTTAATA
-TAGTAACTTACTAGCAGGTTATATAATGAAATGATATCATATGGCATATCATTTCCCATAATAAAGAAAAAGCTCTCAGT
-GTTCTACCAGTTTGGGCCCTTAAGACTCCTGATAGGCAGGTAGATGCTGGACCACACTCTCTTCCTGCACTAAATAGAGG
-TTGCAGACACTGGGTAAAACCCCAAGAACCACAAGCAGATGCCCACTGCTTTCCTGGCAGCCTGACCCTTGCACCAAAAA
-TACTTTAAACAATAAGTTCCCAGTTCTTAAAAGAGCAAACATACCTTTAAAGGAAAAAGAAAAAATACACAAAAGTCTTA
-CCGACCTTGGGTTTAATATTTACTCTTCTCTTTCTTAGGTCAAAGCTACGGAGTATAAACTGGGCTCCTGCCAGGTTCTT
-ACCATATTCCTTCAATAGTTGTTTTTCAGGAAGCTCTGTTTTCTGGAAGAGATAAGAAAATAGTACCTGGGAGGAAATGA
-GCCATGCTTGTGTTGCTGAGTGATTCTAACATGTTTGGTGGGGGAGAGGCACATAGATGTTAAATCATTCACCCTTTGCA
-GAGAACATCCTTTGGGTAGAGTGTTTCTTATCCTCCTCCACCCAGAAGCCTTGTTTCTAGTTTCCTGTGCTTGCAAGCTT
-GTCTCTCCCAACTAGGCTGTAAATGAATTGAGGGTAAGGATCTTGTCTAATTTACCTCTACATCCCCAGGACAATAAGCA
-AGGGTGTAAATGCCTAGTTCCCTTGCCCAGGTAAAGAGAAAAGCGCACCTGAGGCAAGATTCCACTGCAGCGCCCCCTGC
-AGGCTCCACAGACGTGGTCTGAATTCACCGCCAGCTTCACTTCCTTCCATTCCCTGTCCTACTTCCCCCATTCCTTTACT
-GTCTCTGTGGAGCCTTCCTTAGTAAACCACTTGCACACAATTCTCAAGGTTTGCTTATGAAGATCAACAGCTATGACATC
-AACCCATAGGACAAAAAAACAGAGCAATAGAAAAATTAGTAGGCAATAGAAAAATTAATGACTGCCATGTCATCTTAGAG
-AAGGATCCTCGATTTCCACTCAAATTAGCTTGAGTGGAAAGTTTACAGAGGACTCTACATTGCTAGAAGTACTGGACGGG
-CTTGGGGGGATTCGCAAGTCACCTTTACTTGCTAGGGCCACATGGTGTCTCTCCTCTGTTTCTCTTAGCACTTGTACTCG
-TCTTTTTTTGCTGTAGTCCCATATTGCCTATGATGTTTTACTCTAATGTAATGTGTTTGCACATGACTGTGGCTTCCTAA
-GGCAAAGAAGCTCTTGCCCTGGCTCTATAGAGAACCAGCTTATCCAGTCCCTTAATTCTGTAGGTCCAAATGCCAGACAA
-AAACAAAATAAAATAAAAAAACAGACTCTGATGAGCCCATCCAAGGTCAAGTCCCTGCCCCATCCAAATCAGATTCAACA
-GTGGAAACAGAGTCATCTGCCATGACACAACCACTTCTTTGACGGTACTGTGGGCATGAGTGGACTTTTTCAGGAGGAAT
-TATGCACTCAGGGTAATGACTGACATCTGTAGGGCAATAACAAGCCAACACTGCTTGTTAGATTCCCAGTCCTCTTGAAC
-ATGTTCCATCAACTCCATTCTCATGGGCTTGCTCACTGTCTACCAACATACTGGGCTAAATTTGCCTCCAGGCTTCCTCT
-CATTGTCCCTCAAATTATATAGGCGTTGGCTCTTTTCTGAAAACAATATCCTTCATTTCCTACTTTCCCCATGAAGCCTT
-TCCCAGAATTCCAATTGTCCCCTAATGCCTAAATCAACATTTTATTTTGTCCATTTACCCACTGGTGCATGGTAGCACCA
-GGGTTGTCTTCCTTACTTAGAGAATAAGTTCCTCCAAATCAGGGAGGGACCATGCCTCCTATTTCTTCTGTTTCACTTAT
-ATCATTTGGCACGATTCTGAGCACGTAGCCAGCAAAACATAGCTGCTTCTCCCTAATGTACTGAATGAAGTAGATAAAGC
-TTTTCTACAGCACCTATTTCAGTGCCTTAATCATAGGCTGGATAAGAAACTTTTTGTACTACTGCCCCTTGGGCCTCACC
-ACTACAGCATGAGCTTATTCCACTTCCAACTGCCAGGATCTGTATCTCTTTGCCAGAGGGCTTTTTCCCAAGCAGCAGGA
-AGCCTTTCTGGCCTTGGGCATAGTAGACTGGATAGTCTGGAATATTAATTGCTGGCAGCACTCAATTCAGGAGCTGGTGG
-AAGTAACCCAGCTCCCTCACCCCTCCATGGGTGTCAAGACTTGGTTCCTTCCAGTGGGTTCATGGTCTCGCTGACTTCAA
-GAATGGAGCTGCGGACCTTCGCAGTGAGTGTTACAGCTCTTAAAGATGACACGGACCCAAAGAGTGAGCAGTAGCAAGGT
-TTATTGTGAAGAGCGAAAGGACAAAGCTTCCACACAGCGTGGAAGGGGACCCAAGCAGGTTGCCACTGCTGGGTGGGGTG
-GCCAGCTTTTATTCCCTTATTTGCCCCTCCTGTGTTCCATTTCTGTCCTATCAGAGTGCCCTTTCTTCAATCCTCCCCAT
-GATTGGCTACTTTTAGAATCCTGCTGATTGGTGCATTTTTACAGAGTGCAGATTGGTGCATTTTATAATCCCTTTGCTAG
-CTACAGAGCACTGACTGGTGCATTTTACAATCCTAGCTACAGAGTGCTGATTGGTGCATTTTACAATCCTCTTGTAAGAC
-AGAAAAGTTCTCCAAGTTCCCACTTGACCCGGGAAGTCCAGCTGGCTTCACTTCTCAGTAGGTTAACTCTGAGTGTTCTA
-CACTGTTTCCCAGAGTTCCCCAGTGGGCTTGAGCCCCAGCTGCCCACAGTGGTGACTTACTTGATAATGGCCTCCTGTGT
-CTGCCTTTCCTTCCTGTCTCACTTCTACACTTCCCTGTTAGTGTTTCCTGGGATCACCTCCCAAGTAAACCACTTACACT
-TGAATTCTTGTCTCCGAGTCTGCTTTTAAGGAAACCTAAACTAAGACAATGTTCAATAAATGCCAATGGAAAGGTTGAAA
-AGGTAATTTTCACCTTCCCCCTCACAGGTAGAGAAGCTAGGCCATTGACAGGGTTGGATTTCTCAAGACTGGCAGGATAG
-AGGACTCCACTCCTATGGAAGCACCTTTCAAGAAGAGACGGTATGGGAATCAGTTTAAAACACAAAGCACTGCATCCTTG
-GGGGCATCTGTTAAGTTCATTGCACCCAACCAGACCTCCTAGAGAGGGCAGGTGCTGACAACATAACTGCCAACAATTTA
-CTGGTCCAATTTGTGATAGGCAATATATAACTCGGCAGCCCAGAAGCCACATCCCCATTTGTCTTGGTTTTCATTAATTC
-AAAAAAGAGGAAGAAACCAATAATGATAATAATAATAACAATAACAACAACTATTAGACTTTCTGCTAACCTGGGTGAGC
-AGCATTTGACTTGAGCTATGAAATCAGAAAAATGTCCCTTTCTTGCATCTTAATTTTGCAACAAATTCAACCTGTTAATA
-TAGTCCTTCAGGAATTAAACAGACAAAACCATACAAATGCTTGGAGGATGATGGGAAAAACCAGTTACTTCTGACTAACT
-GGAAGGGCAGCTTGATCATTTCTGATGGTTGATTGCATAATTTCAGTCCTTGAACATTTAGTGTGCCATCCCCTTGGTTG
-CTGGAGGAATGCAATTGCTCTATGAAATGTGAAGAGACTTGACAAGAACTATTTTCATGGTTATGTGCCAAGTTCTTGCT
-TTAACTTGCTTGCTTAATCAAATGTCTACTCATGATATCTTTGGGAGTTTCTAAGTTTCATTAGCTCTTTCCTTAAAGAG
-AAATTAATCTACTTGGCAAGGAAGGTTTATTCATCATAGGTGAGCAAACATTAGCACTTTCTAATAATTAGTTCCAAGAT
-CCAGTTTCTAGATACCTACCAAGTTCAGCCCTGGTTCACAAGAAATTGACCTATTTTCAGTGGAAGCACTGTAACCAGTG
-CAATAAACTCTATCTCATAGAACAGTGTTAATCTGTCATCACAGCCAAAATGATTTGTTATAGCAAAGCAACAATCAGAG
-TAAATGATGCCTGTCCCTTCATTAAGGAAATCTAGAAGAATGCTCTGTCATGAGTTTAATCTGAGATTTGCCTGGCTATC
-CTGATGAAAACCATCTAATGAATATGTAAATTTATCATTGTCTTCTATTGTAAAAATGCACAGCAAATTTTCTGCTTGGC
-TATGCATAATCAGAAGAGAAATCCTCACTGCTGTGAATTTGAACTTGAATAAAAATTGTCTTCTCAGGAAAAGAGCATGC
-TAGATGGAGGAGGGGTTAACAAGAGCCTTCAGTTTACAGATGTAGGATGTCTTCCTGCTGTTAATTATTGTGGTAGGCAG
-TGTAATGGCCTTCTCCCCAAAGACATCCACATTCTAATCCTTGGAAACTGAATATGTTATCTCACACAGCATGGGGCCCA
-CTGGCACTGGACCCCTCCAGTTGGCAGGTCCACTGAGGCTTGGGTACATGGGTAGACATTCACCCTCATTTACCATTCTG
-CTGAAACTGTATCTCTAGGTTTCTGAATGGGAAGAAGGAGCCTACTGGAAGGAAGAGTCATGGCTCCTGGAAAGTGGGGG
-AAATGAAGCAAAATGGAGTTCTTTCCAGAGTTGCCAGATTATTTCAATAAAAATATCAGACATGTGTGAGTAAAAAACAT
-GGACAAAATAGCAACAAAAATGCAATATAGAAAGATTTCTGGAAACAATCCATAACGTCTTATATTTTGCACTGAATACA
-ATGACATTTTTTCATTTCTTTATTTTTCAGAAACTCAGGTTTTGTACACTTGAACTAGAAAAGCATCACATAGGTCAAGA
-CAAGAAAAAAAAATTTTCAAACATCAGTTAATGACATGAAAAATAATAAAAACTATTTAGTTAGATTGTTTAGACTTTTA
-TAAGGAAGACTAATATAAATTTACTGACACATTTCTTCAATGTGTTTCCAGAATAAAAGCTCAAACTCTCAATGCTTTCA
-GAATAAAAGACCACACATGATCTTCGGTGTGGTAAACACCCTCCAGAGTACTTCAAATCATGGGTTAGACAGAAACTACA
-GACCAGCAATATCCAATGGAAATATAGCATGAACCATGTTCAAAGAAGTTGAAGGAAACATATGAAATTATTTGTAAGAA
-TCTATCTTATTTAACTTGATATAGCAAAAACATCATTTCAATGTGTAAACAATATAAAAATTAACTAAATATTTTGCTTT
-TTCAAATCTATTCTTGAAATCCGATGTGTAATGTACTTAAACCATATCTCAATTTAGATAGTAAAATTTATCAGAAATAA
-TTAATCTGTAGTTACATTTCATAAAATTTATCATTGGCAAGTAAGATTCACATACTCAAGTTGTTCTAAGCATACATTAA
-AAAGTTTTCAATAACTGAATCAGTTTTTTATTTTAATTTTTAATTACAATTAAATAAAATTAGAAATTCAGTTCTTTAAT
-CACAGTAGGCAGCCGGGCACGGTGGCTCACACCTGTGATCCCAGCACTTTGGGAGGTCGAGATGGGTGGATCACGAGGTC
-AGGAGGTTGAGACCATCCTGGCCAACATGGTGAAACCTTGTCGCTGGTAAAATACACACACAAAAAAATTAGTCTGGCGT
-GGTGGAGCGCAACAGTCGTCCCATCTAGTCAGGAGGCTGAGACAGGGGAATCGCTTGAACCCAGGAGGTAGAGGTTGCAG
-TGAGCCAAGATCGTGCCACTGCACTCCAGCCTAGTGACAGAGTGAGACTCTGTCTCAAAAAAAAAAAAAAAAAAAATCGC
-AGTAGCCACCTTTTATATGCCTAGTTGACACCTGTAGCTTATGGCTACCATATTGAACATCACAACACTAGCTCATACAC
-AATGATTATAAGAATGTGTGAGATTTGTTTCACTTTCATAAATTTTTTGTGCTAATTTTCTATGTGACCCATTTTTTTCT
-CCATGTTTAATCTGAAGCCTTTAAATGAGAGGCCCTTGTGTTCTTGTCAGTGGTGTCAATAAGGAAGTGAAGAAGGTAAG
-AAGGAAAGGGGAGAAGTTTCTATGAAAGAATGGAGGATGTTGGCAGAAGCTTCAGAGAAAGGAAATCAGCCTAACTCTCC
-AAGATCTGTTGGGCAGAAAGAACAGAGGTTCCCAGGGCAGTAGGATGGGCCTGGAAATTGTTCTAGCACACTTTCAGACT
-GGGCTCTTGTTTACAAATGACAGAAACTTGATTCAAACTGGCTTTGACAATGAAAGTACTCTATCAATTCAAATAAATAA
-AACATCTACATGTTCTGTAGTGAGAAGCTCAGGCATGGCTAAATCCAGAGGATCAAATAATGTCATCACAAATTTATTTT
-TCTTAATCTCTCAGCATCAATGTCCCTGTGTTGCTTTAAATCCAATCAGGGTTTCACCATAGTAAAAAGATGGCCACCAG
-CTACCCCAACCTATGTCCTATTCTTAACAACTCTACCAAAAAGAGTACTTCTTTCTGAGAAGCCCCAGCCAATGTCCTGG
-GCTGATACTCCCTGGTCTGGGCATAGATCTTATGCTCATTCCTCAACTAATTCCCAGGCCTGGTGAATTTCCCAGCTTTG
-GAGATGGAGGGTTGGATCTGACCACTCAACCCCCATGAATTAGAAAAGGGAGAGTGATTTGTTCTTCCAAGGGAAAATCA
-GGCTGCTATAGCTAGGAGAAGAGGGAATGGATGCTGGGCAGGAAAAATTTCTTGTGTGTTAAATCAAGACTTTTGACAAT
-GAGGAGGCTAGTCAGTTCCCCCAAAATAATTTATTCAGACTTTAGGTGTTTCATGAAGAAAATTGTATCATCTGCCAAGC
-ACCTAATCTCCTTTCCCCATTAGTCAGTCACATGGGAATTCATACCTTTTTAAAGCTACCTAACCTTGAAAAAGTTGTTT
-AATCTCACCATGATTCAGATTTTCCATCTATAAAATGGAAATGATAATAGGGCCTACCTCATACATTTATAATAAAGATT
-ACATTTAATCTTATATAATAAGATAATATAATAAAGATTATATTTAATCTTTTATAAATGTATGAGGTAGGTCCTATTAT
-CATTCCTATTTTATTTGTTCTTATTTGTGAAGTGCTTGCAATAAAGTCTGGCAGATGACAAGGGTTTAAAAAAACCCCAC
-TAAATAAATACACAAAAGTGTGATATTATACATTTTTCTCAGAAAAGAAGATTCATTGACTTCTCAAATGAATTCATCTA
-GGCTTCTTCCCATCAAGGTGGCCTCCAGAGAGATGAGAAACTACTGGAAATGTTTACTAAATAAATGAGTCTCATTTTCA
-AAGGAAAGGTCATAGACACTTTTTAAGACACACAGATGTCCTTTAATGCAGCTCATCTGTATTGTAATTTCTGTGAGCTT
-GCATTAGAATGTAATTAAATTAACACCAATGCAGTCCTCCTGTCAAGGAAGCTCTGCCTAATGTAATGGCGTCAAGGAAC
-AATCTGAGCATTACACATATCATGAGGAATTGTTTCCATCCCCATTCTATTCTTATTGTCACAATATTTGGTTTAATTAA
-GTTATATAGGATAGTAATTATAGCAAATGTAGTTTGGCTGGGAAAATACTCCTTGTGATATGAAGGTCGCATCTCCAGAC
-ACCACTGCTGGGGAAGGCAGAATTCAGTCCCTACTTAGGACATAAAAACTCTCAGACACATAAGAAGACTGAGAATAGGA
-ATTGCCTGCTCCTGAAAATGCCAAATTGATATATGGTGAGAAGCCGAGTCTTAGAGTCCCTTTATTGTTGGATACATTCA
-ATAAATAAAAGGAAAGAGCCACCTATAAAAGGTAATTCAAGGGACCATATGCTCTACCTTTCCAAAAAGATAAGTCTAAA
-ATTACAGCCCTAGGGTCAGTTCTCTGATTTGGCATTGCCTCAAGTAGGCCCTTGCCTGTTACAGGGACATTTGCTACCTG
-GAGGGAAACACATTAACATTCTAGCACCACCACCACTGTCATGTAGGTAATGTACTAGATTACTCAGCCGGGTGTGGGAA
-TGTTCCCATTCCTCACTCTTCCCCATACCCATGTCCTTGCCCAAGAACTCTCCAGTTCCTTCCTCTAGAAAGTGTGCTTT
-GTCCCATGTGGCTTGCTTTGGCCAGTGACGTATGGGAAAGAGTGAGGATGTACTGTTCTGACCCTACACCCAAAGAAGTG
-CTATCCCTTTCTGCTCACTCCTCTTGGTTTCTGCCACACCATTCTTCTATTCTAGAAGAATGTGAGACATATGGAACAGA
-GGCACCCTGGCCAATCAGCAACTCTGTGAGTGTGATCATCAATGCTTATCATTAAACGCCACTGAGATTTGGGGTGGTTT
-GTTGCGCAGTATGGCTGAGGTAACAGTTGACTAATACACTGGTTATTCAGCTAAGACAGAGAGACGCTCTGAGTGTCTTA
-ACCATAGCAAGTAAAGTTTCCTGTAAGACAAGGCAGAATTTGTAGCCTTCATTGTAGCCATTCCCTGGCCCTTTTTCCTT
-GCTTTGTATAATTATAGAATCTAAGGAGTGAAATACTCAAGTTCCAGAATTTTTTACAGCTAGGGTGGCCATATGATGCA
-TTTGTAGCCAGTGATACATGTTTTTTTTTTTTTTTTTTTTTTTGCAGGGGACTCCTGGAAATACTTTTGCCGTCATGAAA
-AAAGCAGACTTTTGTTACTGCTCTTCTCCCTTCTTCCTGCCTTGAAGGCAGTCATGATTCCTGAAACTAATGCAGCCAAG
-GTGCAGCCAGGAGGGGAGCAGTGTGAGGTTGAAAAATCAACAGCTTAAGGAGGGCAGAGTAGGAAGATGGAAAAGGCATG
-AGTCTTTGATGATGTTGCTGAGTTAGCTAAACCCCAGTAACAAATGCCTCAGTCTTCTTTTTCTTAGAGCTAAAATTAGT
-GTCCATTTTGTTTAAGCCCCTATTAGATGGGTGATATCTAATGTGATATCTAAAATTAAATGAATTTCTAACTGATATGC
-CTAATTTACAGTTTGGCTTGGAACTGGCTTAGTCTGTTTGCATCAGAAAGATGGCATAGTTTCCCCCATTGGGTATTAGA
-GAAACTAAAATAGAAAGAAACTGAAAGTTTTATGGCCTACTGAGGTCAGAAGGAGGGGAGAGCAGGGAAGCAGCAGTCTC
-AACCTTTAACAGCAAATCGAAGTCCCCTAGGAATTGAGATGGGGAAGACTTGGAACACCTCTCTTCTCTGTGTCTTGTCC
-TGTTTACCTATTAAAACCCAACCCATCCATTCCTAGCCTCTTCCATGAAGCTTTCTCAAAATCCAGCCAGAGTGAACCAC
-AGCTTTCTCTGAATATCTAGAGTTGTTTATTGGTTTTGATCTATGTGTGCCCCTCAATTGACACATCACACTTGTCCCTG
-CATGAGTCCAGCTGTGTAATGTGTCTTATCTTCCCTACAAAGATAACATCTTAATCTCTGCAGAATCTCCTGCAGAACCT
-AGTAAATACGCAGCATACATCAAGTCTTTAGTAACCAGTAATAACAATTAATTACATAAAATGAATATAAACTTGCTTTA
-TAACAAGCCTATCATCACACCTCTGCTTATGGGTGTATCTGGAAACTTAATTAGGAGTTGGTAGCAAAAACAGTCAGCTA
-TTTCTCTTCTATTGCAGAGGAAATAGATTAGGAGAGAAATGAGAGAGGACAACAGAGAGGAGAAACAAAGAACAGTTCAA
-AGTCACCTCCAAAGAGACCAGAGTCTCTGTATAATTTATTCCCTCTTGGGAGCATTCCTATCAGTAGTTCTGATGAAAAG
-AGAGTTAGCAATCTGGCACCGTTTTGCATATTTACACTGTTCCTTAAAATATATGTTGAATCATTTAGACTTTTTAGCTT
-CCACTTTAGTAAAAAAAAAAAAAAAAAAAAAAAAAGAGGGAAAGTCTAAGCTGGAGAGTGCTAGAACTCATAATTAAGAA
-GGAGGGGAGTCTTACACTGGTCCCCCAGAAGCAGACACTGAAACAAGGGTTTGAGTCCAGATGGTTTATTTGTGAGGTGA
-CCCCAGGAACCATTGTAGGAAAATGTGGAAATGAGACAGTGAAGGAAAGGAAGCTAACACAGGTGCATTAATGAGTGGGT
-AATTGGAAATCAGTCCCCACGGAAAGCTCTATGTAGAACACAGCTCCAAATTGTTCCCCATGTGTGATGAGGAGCTGGGA
-TATTTATCTACTAACTCCCATTTGCACTTGGGCCCATTGGGCACTCCTAGACTGCCCCACGCATAACTGATCATGCTCCT
-GCAGCCAAAGAAAGTCCTTAAGCAGAGAATCCAAGGTGCTTGCAGTAAGAAACCATTGGCATGTGCAGGAATACTGAGTA
-TTGATGATATGTAAATAGGGCATCAATCGTGTCTGCTATATGGGGAAAAGTAAAGGGTAGCAGAGTAGGGGCTGGGGGAT
-GAGAAAGCAAGGAATGAGGAGCACTCACTTGGGGAGGACTGCCAACTGTGTAGCCAGGTCTCAATGAACAAAAGTAGGCA
-TTCTGTTGAAACTGCTGGGGAAGTCTATAATATAATACCTCTACCATTTATCTTAATTGTCTTTAGATATAGAATGCCTT
-CAAAATCATAAGGGCCAAAACTTATATTTATCAACCTTCCTGTCCCGTATTGAGGGAATAATAGAGTACATCCATATAGC
-AGAATATTCTGAATCTGTTTAAAATTATGATGCATAGTTTCAATAAAAAGAAAAGGCATTTATAATTTAAAGTTAAGTGG
-TTTTTTTAAAAGGCAAGATCTAAAATTGTATATCTGGTAGGATTTCCACACTGTAAAAAACATGTACTGAACCAATATTG
-GAAGAAAATGTTAACTTTTTAAAAGTTTTTGAGTGGTGGGATTGTAGTTACTTTCCTCTGCTTCCTTATAATTTTCTAAA
-GTTTACCTGCTTTCCACAAGGACATGTATTACTTATAACTATAAAGATTTTTTATGAAATCTCTAAATATAAATAAATGT
-GTATATATATATGTATATATATATATATATATATATATATATATAGCCACTCATTGCCACCAATGGTCCTGCAATAACTT
-GGCCCATCTGAGCCTTTGTTGTTAGATTCTGTTTAGGACTGTGCTCAAGGGCACTGGCTCCCAGGAGATTAACATCTTCA
-GCTTTGCTCTCATTTCCCAAGAAGTCGGTGTCACATTTCAGTTCAGCCAACGAACAGGTATTCACTAATTTAATAAATAT
-TGATAGATTACCCAGTGTATGCCAGGCACTAAATAAAACCAAATATAGTTTCCAGCCCTCATGGAGGGAACTGAGTAATA
-AAAGCAAATGAATAAAACTGTCCATCTTTGAGTAGTCCTATGCAGGAGAGATGCCTGGTTGTATTAGAATCTGCAGTAGG
-AGATTTGGATCTAATGGGTTGGGCTGCCCTCAGGAAGTGAGGGTCAACTTAAGATCCCAAGGATGCATGGAAGTTAACCA
-GGCAAATGTTAATTGGGCTTCTAATGTGTGCAAGGGGTCACCATGCTGGAGTCTTGGGACACAAACTTCTGTCCTCAAGG
-ATCTAGCCATCTGATTGCCAAGCCACAATCAGGATTCCTAAAATAAAAGAAAAATCCCCACCGGTATTAGATTAAGGCCC
-CGGATGTCTATAAGAAGTTCAAAGGAGGAGCAATCAATAAGGGCTAAAGTAGTCCAGAAAGACTCCAGAGAAAAAGTAGC
-TTAGGTGCACTTTTTTGTCAGCCAGAAGGACAGGCTTGCCTAGCAAGGGGAACTGCATGAGCAAAAGTCCAGAAGGGTCA
-ATGCCAATAATCTTTATATAAGAGAGTAAGATGAGAGGTTGCAACTGAAACTGTTACTGGAAAGGCATCCCGATCCTGAC
-CCCAAGAGAGGGTTCTTGCATCTCACACAAGAAAAACTTCTAGGCCAATCCATAAAGTGAAAGCAAGTTTACTTAAAAAG
-TAAGGGAATAAAGAATGGCTACTCCATAGGCAGAGCAGCCCTGAGGGCTGCTGGTTGCCCATTTTTATGGTTTTTTCTTG
-ATTATATGCTAAACAAAGGGTGGATTAATAATGAGCTTTCCAGGAAAGGACTGGGCAATTCCTGTAACTAACGGTTCCTC
-AGGCTTTTAGACCATATAGGGTAAATTCCTGACGTTGCCATGCACCTGTACATTGTCATGGTGCTGGTGGGAGTGTCTCT
-TAGCATGCTAAAGCATTATAATTGACCTATAATGAGCAATGAGGATGACCAGAGGTCACTCTCATTGCTCTCTTGGTTTT
-GGTGGGTTTTGGCCATCTTCTTTACTGTAATCTGTTTTATCAGCAAGGTCTTTATGGCCTATATCTTGTACTGACCTCCC
-ATCTCATGCTGTGACTTAGAATGCCTAACCATCTGGGAATGAGGACAAGAGGACAGCTTCAACTTTTCATGACTTCATCT
-CCAACCCAACCAATCAGCACTTTCCACTTCCTGCACCCCCTACCCATCAATTTATCCTTAAAATCCCCAGTCTCCAAATT
-TTTGGTAAGATTGACTTGAGTAGTAATAAAACTCTGGCCTCGCATTCTGCCGGCTCTGCGAGAATTAAACTCTTTATGGC
-AATTTCTCTGTCTTGATAAATCGATTCTATCTGGACAGCTGGCAAAATGAACCTGTTGAGCAGTTACAAGAGTAAAGGAT
-GAGTACTGAGTGGAAAGGATGGCCTGTCCTTGGGAGTCGGGTAAGGACACTTGAACTCATGATAGAAGCTAGGGAGCAAA
-GAGTGATCAGACAAAAGTTGTATCTATAGGAGGATGGGTGTGGATTACTGAGGCCAGTCCCTATGACCTCTCTCTTTCCA
-GGGCCAGGAACTATTACTGTTTTTTGTGACTTTGGTAAGTAAGTGAACCCAGGGCATGGTTTGCAACTGGCTGCGTTGGT
-CATTTTTATGAATCGATTTGTGCAAACCCATGGCAAGCTTTCCTAATATAAACAGGTGGAAAGAGAGAAGTCAGAGGGGC
-TGGCCTCAGTAATCCAGACAGCAAATCTTACAGGGAAGACCCTCCTTATATCCTGGGGAAATTGGTATATGAGAAGTTAA
-CTGGGTTTTTACCCTCTGAAAAGGAAATTTCTATAAGAAAGGGAAGCATCACTGCATTGCTTGATAACATCTGTTTTATC
-TTGCTTGTTTTATCTGACTTTCTCCCATGGCCAAGGAAACATGATGAAAGAACCAATTTCTTTCCTCTTTTAGAAGCTCT
-GATCATGGAGGAGACCATATCTGCAAGTCATCTAGGACTCAGCTCTTTTAGAGCTATCCATGGACTGGGAGACCCTTCTC
-CCACTTCAAGGAGCCCCTCTTTTGTACCCCCCAAACTTCCTGGCTTACAAAATTTGCTGCCAGATGTGGTGGTGTGGGAG
-TGAGGGTGGGTGGCATAGGTCATGTTGGTAAAAGGCCTCCCATAGGCGGGAAAACTGCAGAGCCAGGGGGCCTAGGGGAA
-GGCATCTCTTGCCTAGCAGATGCTGACAGAGGAAATGGCACATTCTGCCCATGCATCTGTCCTCATGATTCACATGCCAG
-CAATTCCTCAGGCTAGAACATACCTTGTAGGTCATTTTCTAGCACATGCCGTAACTAGATAGCCCCTAGGTCTCTCTAGG
-AAAGGTGACTTTCTAAACTTTTTTTGTATTCTGTCTGTAAAGTACTGCATACTTTAAGGACTTTTTAAACAATAATAGAG
-AAATCAGCTTCATCCCTGCTTCAAGACACATCACAAAGCTCCAATCACAAAAACTCTAGAGTTTCTGTAGAGGGATTAAA
-GTGTGGCAGTCTAGTGACCTAAAGGGATTTGACTTGAAGCTGTATTTGCTTAGCACACACGCTGTTTTTATCTTGATTTT
-AAGTTTATTGGTGCAGCACATGGAAATAATGGGCATCAAAGCCCACACCTCCCAAGCTGGTCCTTGATGCCATCACTGAG
-CCCTAAGTGAGAGGCCTGCTTATAATAGTCCTGCATTCTCAGCTTCCCTTAACCCCAAGAATAGAACGGTGTCTTGCATG
-CAGAAATAGGTTATTGGTGAATAAATTGCTTAATGAATTATCTAGTTTCCCTAACAGAGCTGGTTACTTCTTTCTCATGT
-GAAGGTGAGCACCTGGTGAGGTTTTCAGGAATCAGGTTCACCTTGAACACCATACTCAGGCCTTGGCGGCTCTCTGGGCC
-TGCCTGGCTCCTACAAACACCATGCAGTGTTTCTGGATCTCCTAGGCCCTCTAGTGGCTATTCTTAGGCTGAAATCCCTC
-AGAACTCAGCCTCTCAGCTCCTGCTAAAATTTCAACCAGTCCCTGAATTTAGAAATATGTATATATACTTATTTTGCTTC
-TCGTAAACTGCAAAGAAATAAATTTAATTATGTCTAGTTTCTGATCAAGATTTATCTGGTCTCATAGCCTTCCCCTGGTT
-TGTGTTTTAATGAGCTTTTTATTTTTCAGTTGAAAGATTATACCAGATGTCAAGACTTAACAGGAATCAAGACAGCATGG
-ATTGATATAAGGGTAGACATAATTATCAATGGACAGAGTACAGACTCCAGACACAGACCTACACCTATATAAGCAACTGA
-TTTTCAAAAGTATCCTGCTTGCCTGCTTGTACCCCCAAATGGGCTCTCCCTCACCCCAAATGCATCTTTAGGTTTGTTTC
-AGAGAATTTCTGATGGTCTTTCTCGCACAGAAACACACAAGGGGTCTAAATGGGTTCTTTATGCAGAAGAGCGAAGATTT
-CCAGGTCCAGTGGGCCAAAGTGCCTTCCCCTGCAAAGCCTTTGAGTGATTCCAGGCACCAGGGGCATCAAAGCCTTGGTG
-GGACCAGAAACTATTGCTGTTTTTTATGACTTTGGTAAGCACGTGAACTCAGGGCATGGTTTGAAACTGGCTGTGTTGGT
-CATTTTTATGAACTGATTTGTACAAACCCATGGGAAGCTTTCCTAAATAGAAACAGTCTGCATTATGGTGGTATCACCTT
-CATCTGACCCCTGGGAGCTCTAAAGAAAAGCCCATGATACTCACCTGGCCTTCAGCCTGACCAGGGGATTAGGCCACTGG
-CCAGGATGAGACTGAAGGAGGAAAGGAACCTATACAACTACTCTTCCCTTGGTTGAAAGGAAAGTCCAGAGAGAATAGCT
-ATTTGCAAATATCTGGGCTTCTACTGGGTGCTTACTGTTGAGTATCTTATATTGGGACACAGGTATGTTCATCTCCATTT
-TACAGATGAGGAAATCGAGGCTCAGAGTTAAATATATTTCCCAAGGTCAACTAAGTAAGTGGCAGGATTAGGATCCAAAC
-CCAATTCTAACACTCTCTAAAACCCACTCTTTAGCTAGCCCCTGCCTCTTAGCTTTGGGGTTCAGGTTCTTGACTCAGTC
-TATGCAAATGTTGCCTTCTGGAATTTGGCAGTGCACAACCTGCACATCTGTACAGTGTAGCTGAAACCAACTTCTGGGTT
-GAAACCCTTCCATATTCAAGATTCTAAGCCTGGGCTAAAATCTAGAGCCTTGTTACTCAAAGTGGTCCCTGAACCTGCAA
-CATCAGCCGTGTTTGGGAGCTTTTTAGAAATGTAAATTTCTGCTCTCCTGCTGCCACTCCCCCCAACCCCTTTCTATTGG
-ATTACACTCTCCAAGAATGGAGGCTGCACCCAGGATTTCTCAGCTGTTATGTGCATTCAAATCACTGGGAATCTTGTTAA
-ATGGAGATTCTGGCACAGGAGTTCTAAAGAGGTAGTGCTAAGCTTTTGCTTCTTCGGGCAGCTCCCAGATGATGCCGATG
-ATGTGAGCCACACTTGGAATAACACAGCTTTAGATCAGTAAGTCTCAAACTTGAACCTGTATTCAAATCACCTGAAGAGC
-TCGTTAATACACAAATTGCTGGGCCCTACTCTCACACTCTCTTACAATAGCTGTGCACCTTCACCTTTACTTTCACCCCA
-AGAATAAAACAGTTTCTTGCACACAGAAATAGGTTATCCATGAATAAGTTGGTTAATTAATTATCTACCTTTGCTAATAG
-AGCTGGTTACCTCTTTCTCATGTGAACATGAGTACCTGCTGAGAGAGTGCTTCAGAGGGTCTGGAGTGGAGCCTGAAAAT
-TTGCATTTCTAACAAGTTCTGGGCCCAGCATGGTGGCTCATGCCTGTAATCCCAGTGCTTTGGTAAGCCGAGGCAGGAGT
-ATCACTCGAGGCCAGGAGTTTGAGACCAGCCTGGGCAATATAGTGAGACCCCATCTCTACAAAAACTTTTTAAAAATTAG
-CCAGGCATTGTGGTGTGAGCCTGTTGTCCCATCTACATGGGAGGAAGATCCCTTCAGCTGAGAAGTTCGAGGCTGCAGTG
-AGCTGTGATCTAACAAGTTCCTAGGTGATGTTGCGATGCTGCAGGTTTAGGGACCCCACTTTGAGAACCAGTGTTCTAGC
-CTATCAGAACTTCCTCTAATTAGACAACTAACTCCATGCTTTCTGGCATTTCATTTTTATAAAGCCCTATTCGGTCCTTG
-AATTCTAGCATTTTAGAGCTGAAAGGGACTTCAGAGGCTACCTTGTCTCAATTAAAGAAATGCAGGTCAAGGGTCCCACT
-CAAGGCCATACAATTAGCCAAGAGGCAAAGTCAGGATTAAGCATCCTGACTCACTCTATTTCTATGCTGTTTACTCTGCA
-TCCTGCTGGCTCCAAAGCTCAATAAATTCCCTGGCATCCAGCAACTGCAGTATTTTTGGTGAGCTCTCCATCCCAGGCCA
-GCTTTGAGGTGCTAGAATCCCTGTCAGACACATATGTCATCCGCACAATCATGGAAACGCAGTGGCCTCCTACCTAACAG
-CTCTGTGAAAGAGGGCTTTGGAAAAAAACAGCAGCTGTGCTGGCCACTGTAGCAGAGAGAAAATGCAGCAGCTAGCAAGC
-AAACCCAGACAAGGTGAGTCAGCATAGAGGCCCTGGGGCTAAGGAATATACCAGGATACTGCCAACAACTGGCACCCAGA
-TTCTCCTGAGCAAATCTGAGAAGGTCAATCAACTTCTCTGTGCCTGAAAAGATGCTTTTCTTTAGAGAAAACAATACTCT
-TATTCAAGGGAATGAACACACAAGAGGATATCAAAAATGTGCTTGGGGTGGGAGTTGTATCAGTCCTGCTGCATGACAAA
-TCACCCAAAACTTAGTTGCTTTAAACGACAACCATATTCTTGCTCACAAGTCTCTGAGAAAAAGGAGAAATGCTTAAGAT
-CCCTTGAAGCCTAGACTTGGAACTGGCATATCATCACTTCCTCCATACTCTACTGGCCAAAGCAAGACCCAAGGTGAGCC
-CACTTCTTAATGAAAGGAACTGTAACTTTACAGTATAAGGATGTAGAGAGGCGGAAGGTTTGTGGCCATTTTTGCAATCT
-ACGACAGAGAGGTCTTCTTAGTTTAGGAAAGTCTGAGACAAAGATTCCAAAGCAAATGGTTTACTTGGAAAGGAAAGGAA
-ATACCGGTAGGGGAGAGAAAAATGGAGACACAGAGAAGCAGCAGCCAGTAAAGGGTGCAAAGCCAAGTCGGCTGGCGCTC
-TGGGCAGCTGGAGTATAATTCCACTGGAGAACTCTGGAAGCTGGTGCAGGACACAGGCCTCATCATCATCCTACCTAAAG
-GAGGACGCCAGGATGTTTATACATCAATCCATGATATGGTTTGGATCTGGGTCCCTGCCCAAAACTCACATTGAATTGCA
-ATCCCCGATGATGGAGATGGATCCTGGATCCTGGTGGGATGTGATGGGATCACAGTGGTGGATTCCTCATGAATGGCTTA
-GCATCCCCGTGGTGCTGCTCCCATGATAATGAGTGAGTTCTAATGAGATCTAGTTGTTTAAAAGTATATAGCACCTCCCT
-CACTCCAACTTTCTCTTGCTCCTACTCCTGCCGTGTGAGACATCTTATACCTCCTTCCTCTTCCACCGTGATTGGAAACT
-TCCTGAGGTGTCCTCAGAAGCAGAAGCCATTATGCTTGCTGTACAGCCCGCAGAACTGTGAATCCATTAAACCTCTTTTC
-TTTACAAATTACCCAGTCTCAGATATTTCTCAATGCACGAACACACTAATACAATCCGTATCAGTCATTTACTGAGGCTG
-CTCTCAGAGCACAGAAATTCCCTGTAATTTCAGCCCTCCACTCTGGGCAATGTGGCTTAAGAGGTCAGAGCAAGACCTTG
-ACAAAAAAATAAAAAAAGAAAAGCAGATGCAGCTAGCTTAGCTGGACCGTTGTGCCCTGCAGCGGTTAGACAAAGAGGAT
-AAAAGGGAAGGAGGATATGAGTAGGGCACCACCTACAACATATCCTTCACTGTGATGGTGATTAAAAAGAAAAAAAAAAA
-CTCAAGTTTCAGATTTATGTTATTTTAGTCAAAACATCTTTTTTTCTTTTTTTAAGACTGTTTACTGTATTTTGGATGAT
-GCCTCAGTTCTCTTGCTGGCAGAGGTTGGAACACTAGATGGCATTGTATTAAGTTGTCCTATAGCTCAGGAAAAAAAAAA
-ATGCAAAGGGATGTTCCTAGTTGTCTTTGGAATTTAACAATTATCAGCATGAGTTGAGAGCAAACAACTGTCCCAGCCAA
-AGTGATGATGGGTCGCTTCAGCTCTACCAAGGCCACCACTCCATCTTGATCTCACACCTTGGCAGCAACATCACAAACCA
-TGGGGGCCAAAGCACAAAGGGAGCAGGCTAAGATAGGAGGCATTTTCTAAAAACTAGGATTCGCAAAACCCATGGGAGGA
-GAAGCAGTAAGGAGAACGAAGCCTTCTGCCTCAAGAAAGGTCTTTGAGAGGCACAGAAAAATGGACTGCAAGAAAAAAGC
-AGCAAACTTATAGTAAAGATTTATTCTTACTTTAGTAATAGTAAAGATTTATTCTTTGCTGTAAGTTAGGTGTCTTGGTG
-TTGCCTGAAAAGAGATACTGCCTTTCTCCCTTGAATGTAAATGAGAGAGAACTCTTGATGTCTTTTACCAACTTAGAGAA
-AGCCCATACCCAGCCTTCACAAAATGCCATGAGAAAAAGAGGGGTCAGGTGTGGTGGCTCACGCCTGTAATCGCAGCACT
-TTGGGAGGCCAAAGCGGGCAGATCACCTGAGGAGATCAGGAGTTCAAGACCAGGCTGGCCAACATGGTGAAACCCCGTCT
-CTGCTAAAAGTATGAAAATAAAAAAAATGAAGAATTTACTCTTGGGGGCAGGAATGGAAATGAGAGTGGCAATAGGATGG
-GGTTGAAAGTGAGGGTCAAAGGCATTTAACATTTTCTTTAAAATATTTTAAACAAGTGAGATAAAATGTCAACAATGATC
-AATTCCTCATAATGGATATTAGGTGGATGTCATCTTATTATCTTTATCTTAAATTTCAAAAAAGAAGAGAAAAGAATATG
-ATGTTCTCTTGTAATTAGCAAGGGCTGATAGGGTTCAAGAGGTGACACTGATATGGATCTTGAGTAACTGTTGACAAATA
-CTTCCCTTTACTGAGCTTCCATTTTCTTGTTTATAAACTGAGGATAATGATAGTAGTGATGTCAGGGAATTGTCATAAAC
-CTCGACTAAAATAATGTACTCGGAACAGTGCCTAAAGCAAGGTGGGAACAGTGCCCAAAGCAAGGGGGTCCCTCAAAAAA
-TGCTTGCTTGCCCAGGACCCTCACCAGCCACCACCACCAATGTGAGTACAAGGATTAGTTAGGCTCATCTTTCTCACTGA
-GTCAAACCATACGATTGGCTGGTTGTCTGGATGTGATTAGAAACAGAAAAATCTTAAATAAAGCCTCATCCTGAATCCTC
-TCAATCCAGAGACAGAGTTGACCTAAGACCAAAAAAAAAAAAAAAAAATAGAAAATAGTTTTTGGAAATATGGGTGAAGA
-GACATCTCCTCTTATGGAAAAAGGGATTCTAGAATTTAACAATAAATATTCCCAACTTTCCCCAAGGCTTTAAAATCTAC
-CTTGAAGGAGCAGCTGATGTATTTCTAGAACAGACTTAGGTGTCTTGGTGTGGCCTGTAAAGAGATACTGTCTTTCTCTT
-TTGAGTGTAAGAGAGAAAGGACAGTCTACTCAATAAAGAGTGCTGGGAAAACTGAATATCCACACACAGAATAATAAAAC
-TAGATCCTATCTCTCACCATATACAAAGATCAACTCAAAACAAATTAAAGACCTAAATGTAAGACAAGAAATTATAAAAC
-TACTAGAAAAAAACACAAGGGAAATGCTTCAGGACATTGGCCTGGGCAAAGATTTTATAAATAAGACCTCAATAGCACAA
-ACCACAAAAGTAAAAATAGGCAAATAGGATTATATCAAACTAAAAAGCTTCTGCACAGCAAAGAAAACAATCAACAGAGT
-AAAGAGACAACCTGAAGAATGAGAGAAAATATTTGCAAAGTATTCATCTGACAAGGGACTAACAACCAAAATATACAAGT
-AACTCAACAGCAAACCATCGTCGTCATCATCATCATCATCATCCAATTTTTATAATGGACAAATGGTCTGAATAGACATT
-TCTCAAAAGGAGACACACAAATGGCCAACAAGTATAAGAAAGAATGCTCAACACCACTGATCATCAGGAAAATGCAAATC
-AAAACCACAGTGAGATATCATGTCATCCCAGTTACGATAGCTAATTATTTTTTTCTTTTTTCTTTTTTATTATTTCAATA
-GTTTGGGGGGAGCAGGTGGTATTTGGTTACATGAATAAGTTCTTTTGTGGTGATTTCTGATATTTTGGTGTACCCATCAC
-CTGAGCAGTGTACACTGTACTCAATGTGTAGTACCACCCCTGAGTCCCCAGAGTTCATTATATCATTCTTACACCTTTGC
-ATCCTCATAGCTTAGCTCCCATTTATAAGTGAGAACATATAAGGTTTAGTTTTCCATTCCTGAGTTACTTCACTTAGAAA
-AATGGGCTCCAACTTCATCCAGGTTGCTGTGAATGCCATTATTTCATTCCTTTTTATGGCTGAGTAGTATTCCATGGTAT
-ATATATACCACATTTTCTTTATCCACTCATTGGTCAATGGTCCTTTAGGCTGGTTCCATATTTTGCAATTGCAAATTGTG
-CTTCTATAAATATGTGTGTGCTGCTATAAAAACATGTATACTTTTCATACAATGATTTCTTTTCATCTGAGTAGATCTAG
-TAGTGGGATTGCTGGATCAAATGGCAGTTCTACTTTTAGTTCTTTAAGGAGTCTCCATACAGTTTTCCACAGTGGTTGGA
-CTAGTTTACATTCCCACCAGCAGAAGTAAGGTGGTATCACATTTTGGTTTTAATTTGCATTTCCCTGATAATTAGTGATG
-TTGAGCATTTTCTCATATGTTTATTGGCCATTTGTGTATCTTCTTTTGAGAATTGTCTATTCATGTCTTTAGCCCACTTT
-TTGATGGGATTATTTGTTTGTTCTTGCTGATTTGTTTGAGTTCCTTGTAGATTATGGATATTAGTCCTTTGTTGGATGCA
-TAGTTTGTGAATATTTTCTCCCACTTTGTGGGTTGTCTGTTAACTCTGTGGATTATTTCTTTTGCTGTGCAAGAGCTTTT
-TAGTTTAATTAAGTCCCATCTGTTTATCTTTGTTTTTGTTGCATTTGCTTTTGGGTTCTTGGTCATGAACTCTTTGCCTA
-AGCCAATGCCTAGAAGAGTTTTGGGGATGTTACCCTCTAAAATTTTTATAGTTTCAAGGCTTAGATTTAAGTCTTTGATC
-CATAAGATGGCTAATTATAAAAAAAAGATAAAAAATAGCAAATGTTGGCAAAGATGTAGAGAAAAGGGGAACTCTTGTAC
-ACTGTTGGTGGGAATATAAATTAGTACAGACATTATGAGAAACAGTAGGGAGTTTTCTCAAAAAACTAAAAATAGAACTA
-TCATATGATACAGCAATTCCACTACTGAATATATATTTCAAGGAAAGGATATCAGTATGTCAAAGAGATATGTGCACTTC
-TATGTTCATTATTTATAAATAAATAAATAAATTATTTATTTATAAATGAACTCCAATGTTCATTTATTCACAATGGCCAA
-GATACAGATCAACCTAAGTATTCATCAACAGATGAATGGAAATGAATGTTTGGTAACAAAAAAAAAAGATGAATGGATAA
-AGAAAATGTGATATATATGTATGCAATGGGATACTATTCAGCCATATAAAAAATAAAATCCTGCCATTTGTGGCAACATG
-GATGAGCCTGGAGGACATTATGTTAAGTGAAATACCACATGTTCTCACTTATGTGTGGAAGCTAAAAAAGGTGAGGTATG
-GAAGTAGAGAGTAAAACAGTGGTTACTAGAGGCTGGTAAGGGAAGGGGGAAGGAGGAAATAGGGAGAGGTTGGTTAACAG
-ATACAAAATTACAGCTAGGTAAGGTAAATAAGTTCTAGTGTTTTTCAGCACTCTAAGGTTACTATAGTTAGCAATATTTT
-ATATTTCAAAATAACTAGAAGTAAGAATTTTAAACATTCCTAACACAAAGAAATGATAAATGTTTGAGAAAATAGGTATG
-TTAATTACCTTGATTTGATCATTACACATTGTATATAGGTGTCAAAATATCATACTATACTGCATAAATATGTATAATTA
-TTGTGTCAATTAAAACATGTGTAGGACACAGCTAAAGTAGTACTGAGAGTAAAACGTATATCACTAAGTGCATACATTGC
-AAAAGGAGAAAATCCTCAAATAAAAATTCTAACCTCCCACCTCAAAGAGAAGGGAGGGCATGACAAAAATAAGAGCAAAA
-AAATCAACAAAATTGAAAACTTAAAATCAATAAAGAGCTGGTTCCTTGAAAACATCAATGATATTTACAAACATCAAAGC
-AGATAAAAAGAATAAAGGTCGGTATCAGGAATGAAACAGGGAATATCACTACAGATGTTTTCAACAAAAGGTGATGGCAC
-AATTAAACATCCATAAACTATAAAATGAACTCTAAGTTTCACATCTTATACAAAAATTAACTAAAATTTATTATCCACTT
-GTGATATGGTTTGGCTGTGTCACCACCCAAATCTCACCTTGAATTGTAGCTTCCATAATTGCCAGGTGTTGTGGGAGGGA
-CCCAGTGGGAGGTAATTGAATTATGGGGGTGGGTTTTTCCATGCTGTTCTCATGATAGTGAATAAGTCTCACAAGATCTG
-ATGGTTTTATAAAGGGCAGCTCCCCTGCACATGGTCTTTTGCCTGCCACCATGTAAGACATGCCTTTGCTCCTCCTTCGT
-CTTCCACTATGATTGTGAGGCCTCCCTAGCCATGCGGAACTGATGAGTCTATTAAACCTCTTTTTTCTTTATAAATCACC
-CAGTCTTGGGTATTTTTTCATAGCAGTATGAAAATGGGCTACTACAACTTGTAAACCTATAAAACCTTTAGAAAAAAAAA
-AACACAAGAAAAACTCTTTGGTATATAAAACTAGGCAAAGGGTTCTTAGACACCAAAAATGTGATTCATAAAAAGAAAAA
-TTGAAAAAGTGAACTCCACCAAAGTTAGAAAATTTTGCTCTGTGAAAGAACCTATTAAGGAGATAAAAAGACAAGGTACA
-AACTAGAAGAAAATATTTGCAAACCACATACATGTCAAAGGACTAGTACCTAGGATATATAAAAAGCTCTTAAATGAAAC
-AGTAAACAAACAATTCAATTAGAAAATAGGCAAAAGAAAGAGATATTTCACTGAAGATGTTATATTGATGGAAATTAAAC
-ACATAAAAAGAAGTTCAACAACATTAGCCACTTGGAAAAAGCAAATTAAAACCACATTGAGATATCATTACACATCTATC
-AGAATAGCTAAAATTAAAAAAGAATTAACAAAACCAAATATTGGAAAGGATGCAGAGATATCATATCACTCAAATATTGC
-TGCTGGGAATATAAAGTGGTGTGGCTATTCTGGAAACAGTCCCACAGTTTCTTAAAAAAGGAATAAACATGCACCTGTGA
-GGCTGGGTTCTCATGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCAGATCACAAGGTCAGGAGTTCAAGACCAG
-CCTGGCCAACATGGTGAAACCCCATCTCTACTAAAAATGCAATAAATTAACTGGACGTGGTGGTGGGTGCCTGTAATCCC
-AGCTACTCAGGAGGCTGAGGCAGGAGAATCGCTTGAACGTGGGAGGTGGAGGTTGCAGTGAGCCAAGATCATGCCACTGC
-AGTCCAGCCTGGGCAACACTGTGAGACTTGTTCTCAAAAAAAGAAAAAAAAATGCACTTGCTATATGGCCCAGCAATTGC
-TCTCCTGAGCATTTATCTCAGATAAATAAAAATTTATGTTCCCACAAAAACCTGTACATGAATACTTATAGCAGATTTAT
-TCATAATAGCACAAAACTACAAGGCACCCAGATGTTCTTCAGATGATGCATAGTTAAACAAACCATTCCATACAATGAAA
-TATTACTCAGCAAGACAATGGAAGGAGTTATTGATACATGTAATAATCTGAATGAATCTCCAGGGAATTATACTGAGTGA
-AAAGAAAAGCCAATCCCCGAAGATTTCACACGATAAGCCTTTCTTTATATAGCATTCTTAAAATGACAAACTTAAAGAAA
-TGAAAAACAGATTGCTAGTTGCCAGGGGTTAAGGACCAGGCAAGGGTGGAAGGGAAGTTGGTTTGACTATAAAAGTATAG
-CATGAATGATCCTTGTGGTGATGGAAATGTTCTGTATCCTGGCTGCATCAATATCAATATCCTTGTTGTGATATTACACT
-ACAGTGTTGTAAGATGTCACCACTGGAGGACACTGGGTAATTGGTATACAAGATTCCTTTGTATCATTTTTTATAAATTC
-ATGTGAATCTACAATTATCTCAAAAAGTTTATTTTAAAAAAATGTTAAGGCTAAAGTGAATTTCATATATGAAAGAGGTC
-AAGTGGAGAAATAATTGGAAAGAGCACTGGACGTTGGGTCAGGAGTTTTAGATTCAGGTTTTGATTCAATCAACTTAAGT
-AAATAACTCCTCTTGTCTAAAATTATTTGTATAATGCAATTGACAAGACCTGCTACAGTTATCTCCCAGAGTTGATAATA
-GGTAAAAATTATATTAATTAAGAGAAAAACTTTAAAAACATAAGAACCAAGGCTCTATATAAATATTTGGTATTTAAAAG
-CTTGCATTATATAAATGATGCCTCAAAGCCTATTTCTCCTGGTAGTTTAGAAATATAATTACCTGGATAAGACCACCAAC
-TAATTTCACTTTCACCGTCATTCAGTAAATCTCAGAAATATAAGCAAAGAACAATCTTGGACAAGAGAAAAGAAGAACCT
-GATCTCTTTTCCAGCCCTATGACTCACTGAAGAAACCAGGAATATGCCACGTGTTCTCTTTCTGCTGCAAGGGTTGCTGT
-GAAATAACCTCATTTAAGCTGTGTTGTACAGAATGGACCACCTTAATGCTGAGATTCCAACATTTTCTATTTCAGGACTG
-GTTTGGGGAGATTGCACAGAGTTCATCCTATGATCCTTCATGTGAGAAGGAAGCCATTCGGCCATTTATAGCCTAAAGAA
-GACAGAGCTAGAAGGGATAAAGCCAATCTTGGCTATTGCTGCTATGGGAACAGAGGGTAGAGATCATTTGCTCCATTGTA
-GAAATTTGGAACTACAGTTGACCCTCGAACAACATGGATTTGAACTGTTTGGGTCACATACATGTGGACTTTTTTCAATA
-AAAGCACCTGTCCCTCTTGCCTCCCTTTCCACCTCCTCCACCTCTTCTACCTCTGCCACCCCTGAGACAGCAAGACCACC
-CCCTCCTCTTCCTCCTCATCCTACTCAAAGTGAGAAGAGGATGAAGGCCTTTATGATGATTCACTTCTTAATGAATAGTA
-ATGATTTTCTTAATAACATTTCCTTTTCTCTAGGTTACTTTAGAATACAGTTACTTTAGAATACAGTGTATAATATATAT
-ATAATATATAAAATATGTGATAATTAGCTGTTTATGTTATCAGGAAGGCTTCTGGTCCAGAGTTGGCTGCTACTAGTTAG
-GTTTTGGAGGAGTCAAAAGTTAGACGTGGATTTTTGGCTGCACAGGATGTCTACACTCCTAACCCCAACCTTGTTCAAGG
-GTCAACTCTAATGGGAAGCTTTTGCAGCCATTAACTTTCAGTGATTTCAGTACACGCTAAACTGGCTTTTTAAAATGAGG
-GAATATATAAGCTCATTTAACAGGAAATTTAATAAAAGCTGGTTGATCCAGTACCCCAGTGTTATTACCTAGGACTTAGG
-TTCTCTACATTTCCTGTCTTTGCTATACACATGGTTGACTTCATTTTTAAGGCTGGTTCCCACCAGAGGACAATTGTGGA
-TTCATCCACTTTCATTCAAATCTGGGGAGAGAGCGGGAGAATAGCTTGTTCTTTAGAGCAAGGCAGAACTTTCCAAGAAG
-TCTTCCACGAACCTCCCTTCACATATCATTGGCCAGAACTGAGTCACAGGACTTTTTATAAACGAATCACAGACAAGGGG
-GTATGAGCTAACCCTTAACCCAATCAGAGTTACTCCTGAAGCTGAGGGTATTCCTTGGAGTCACATGGACTACATGAAGA
-CAGGGCACTTGAACAAAATTGAGGTTCTATTAGGAAGAAAAACTGAGGTTGTAAGTGCTATGTAAGTAGTTGGTGCTCAG
-TAATGCTGCCATCCTGTCTTAACTTAGCTAACAGGACTAAGTGACATATTTCTGAGGACTCTGATACTAAATGGTGTAAA
-TATAGGGTAGAGTTTGATTTTTTTAGTTTTGACTCTTTCTTTAAACTGACTGTGAAACTTCAGGAAGTCAAGTTATTGAG
-CCCTTGTTTTCTTACTTCTGAAAGGAAATAAAACTGTATAACTTCGGGCAAGTTACTTACCTTTACAATGTGTCAGCTTT
-CTCTTTTGTGGATTCCTTATCTAAAGTTTAATAGTACTTTACTCATAAAGTTGTATTAGTTTTCTAGGTTTTCCATAACA
-AAGTACCACAGACTTTGTGGCTTAAACAACAGAAATTTGTTTTCTCATATTTGGAAAGCTAGAAGGCCAAAATCAAGGTG
-TCGACAGGGTTGATTTATTCTGAGGACCTTTCTCCTTGGCTCGTAGATGACCATCTTTTCTCTATATCTTCGCCTGATCT
-TGCTTCTGTGTGTGTCTGTGTCCTATCTCCTCTTCTTATAAGGACACCAGTCATATTGGATTAAGGACTACTTTAATGGC
-TTCATTTCACATCTTTAAAGACCATATCTCCAAACAGGTCACATTGTGAATACTAAAGGTGAGGACTTCAACATATGAAT
-CTTGGGGTGATACAATTCCATGCTTTTGATGTAAGAATTACGTGATTTAATACATGTTAAGGATGTAAATCTATATAGTA
-GATGCATACTCAACATTAGTTATAAAATTATCTTATTTTCAGTAGTAGCAACAGATATAAAAACAATAGTATTTGAAGTA
-GTAATAGCATCACTAGCAGGGATAATAGCAGAACTGTCTGAGAGAAAAGGAGAAAGAATCCCTATGCAAGGAAGGGGGAA
-GATATACTTTATAGAGAAATGAGACACAAGAGAATAGTATTTGTTTCACACTCTTCCAGCTACTATGGCTGTGTAACATA
-GTATGTCAAAACTTACTGGCTTAAGTCAACAACACTTATTTTCTTCATGAAATCTGCAGTTTTGACAGGCCCAACAGGGA
-TAGCTCGCTCAAACTGTACTTGTCATCAGCTGGAACGTTCAGAGTCTCACTCACATGTCAATGCCAGCTGTCAGCTGGGA
-CCTCAGTTGGACACGTATGTGGGGCCTCTCCACATGGCCTGGGTTTCTGCACACATTGTTGCTGGTCTCCAAGGGTGAGC
-ATCCTGAAAGAGAAAAAGTGGAATTGTAGTGCTTTTTATGACCTAACTTCAAAAGTCACTAAAAATTCCTTTGGTTGCAT
-TCTACTCATTTGAGGCATTTATAAAGACTGTCAAAGTTCAAGAGATGGGGAAATAGACTCTTCCTTTTGATGGAGAGTGT
-CAAGGTCTGGAAGAGAATATGGGACTGCATTTACTGCTGTAGTCATGTTTGGAGAGTATAATCCTCCATTCATACCTAAC
-TTCCCACACGAAGCTTCTCTTTCTGGAGCTTACTTTCAAACACTTGGGTTTGTGATTTTGTTCCAGATCAGAATTGGATC
-CTTATGCTATGCTACCCAACTTCCAGAGATTTGAGGATAAAATGGCACATTTGGCAGAAAACTTTTGAGAAGATCTTTAT
-CAAAGAGGGAACTCTCTAAATAAAGGTTCAGTGTGCCTCATAGTTCTCTTTCAAACAGGAACATACAGAAAGGGGGTTGA
-CATTTTGATTTCCCAGATAATCTTTTGTTTTTATGATTTTGGATATAAACATGTCTCAGACCTGAACAAGGAACTCAGAT
-TTTTATCCTTAAAATTAAATCTGAAGAATAAGGAGAACCACATGCCCTTATCAGCTTTAATATTCTAAGAAAATGAGAAA
-AAAAATGATTTAAGAACATTTAAAAGTTGTGCACTGGGTTCATCAAAGATTCTCCCATTGAAGAGAAAATCTGAGCTGTT
-TCTTGCTTTATATTTGAATGCTGTGCATGGTTTTCATGATGGCAATAATAATTTACTGCAAAATGCTTTTATTGAGTTGC
-CTTTACTGAAGAGGCCCTGCATGCCTTTTCACCAGCTTGCTACAATTAAAAGCAGCAGTAAACAGAGCCTTTCTATTTAG
-ACTGAAAAGCAATGATTAAGCTTACCCAGCTATAAATAGGAGGCAGCTTCACATCTATGGCCCCAACTGCACACATTAAA
-GACTCCAGCTCCAAATGCCCCCAATTTATTTCTACAGGACAAACCAATAAATTGTCAAACTCTGACCTTAAAAGTGACAA
-TTTCTTAAAAAATGAAAGTAGGTAAATTATGCATAATTATAGATAATTACTGAGATGTCTATGAGGCCAGGAAATCAGTA
-CACATGCTGGAAATCTAAATTTGCACGCTGATAGCTTCTCCTTTTACCATTATCAAACCATGGTTTGCCTTGAGCAGCTG
-TCAGAGATGGCTTTTCTTTGCTTGGGGGCACAGAAGAAAATAAGGGACTTAAGAGAGAAGATGGAAAATACAAAGTTATT
-TTTTAAGATTCCCGTTAGTTCAAGTGATTCAGCAAGGAAACCAGAATATAGGCAGTTACTGTTAAACGTTTTTGAATAAA
-AATGTTTAAATGCAAGCCATTTATCCCACCTATAAGCTGTAGCTATCTGAGTGTTTAGAGATTTGAAGGCATTTGATTCA
-ACCTCCTCACTTTCTGCAGCAGGAAACTGGAGGCTAAGAAAGCCCTGTGAATTGTCCAAGGTCACATGGCTTGACAGCAG
-CCGTGCTGGAACTCAGTAGCTTTTCTGACTGTCACTGCAGCATCCACTGAATGGAAAAATTTGTTCCCTTTTTATTATTT
-TTAGTATAAAACCCTAGATTAATGAGATCTAAGTCATAAAAGTCCATAGGGTGCTGTATTTCTTTGAGTGCAAGACAAGC
-TTGCAAAGGTGACAGGATTTTCCCACTTGAAGAAACGTGGTCCCCTCTGCCTCAGCATCCTCCATCTGAGCCAAGAGTTG
-CCAATTTCCAAAAGCCCAAGAAAGTAAGTTTCCAAAATATGTCTTGGGTGATCGTATCTTTTTTAAACTTGTGAGTCCTC
-TTCATTTCGTGTTTGCATGTGGCCTTTGTCTCCCAGTGATTTTCCAACTGCCCATGACTCCCCTTGGGTCATGCGCTGGA
-TATTCTCTGTTGCCTTCTGTCACCTTCTCAACTCTGTGCCCAGGAGACTGGCATTTATGTATGTATCAATGTCACCCTAG
-TCCTTTGGCTATAATCAGGCTGAGCTATCAAGGATACTAACAGAAGACCGGATAGCAGGGAGATAAAGAAGCCACAGTTT
-CTATTCCCCCAGTTCACTTCCTGCAGAATAAAGCACAGTTGCCCAGCTGAGCCCAGCCCACATTACCAAACCCCAGAAAA
-ATTAGTGAGAATTAACAACTGCTGTACTAAACTACTCCATTTTTAGGAGTTTTTTTAAAATTCAGCATTATCTGACTGAT
-ACAAAATATGACACCTGCAAAGAATTTAAGACAACATAACTAACTTGAAATAGAGATCAATAGTTCTGAGACCCAGAAAT
-GGAAGTGAACTCAGACTGGGATTGAGTTTGCAGATTCACTTGACTCCACGTCCAGAAGCAAATGGAGACATCTGGGGCCC
-TGTGGGGTAGCAAAACTAAAAGTATCCCATGGGAAGTAAGAGATTCACTCTTCAAACTCATTGCTTGGAACTAGTAACAA
-GTTTGAGGTTCTCTCATGCATTAAAGGGGGCTGAAATAAGCTCTTAAAACCACCGTCTGAACTATAAAACTGGATAGCAG
-GGAAGCCGTAGAAAATAAAGTCTTTTATCCTGAACTTAGGCTTAACTGCTGACTTGGTAGCTGAATGTGCGAAAACCTCA
-ATTTCAGTGCATTTTGGGAGCCTTGAGCTACCAATATAAGACCTGGTTTTTGACTAAATGTTATTGAGAAATGGTGGAAG
-AAGAAATTAAATATAAATCTGCAAGACTGTGAGACATAAAATGGCGGAGAGAGAAAGAGACAGAGAGAGAGAGAGAGAGA
-GAAAGAGAGAGAGAGAGACCTCCATTCAATAATAAAATTCCAAAACACATAAGGAAGTAATGCTAAGAAAGACAGCAACA
-AAATAAACTAATAGAACTGAGTTCACTCCAGATGAAATGGAAATAATAAAATAGACTATTACCCACTAGTCTTCACTAAA
-ATAACTGCTGAAGAATGTATTTCAGGCAGAAGAAAACACCCTAAGAGATATAGAAGAATGGAGCGGAATGCAGAAACAAC
-AGTACAGAATTTCGTAAAATATGATGATAAATTTAATTAACTATTGACTCTTAAAAAGAATGGTATTTTTCACATCATGA
-GATAAAATTCAAATAACACCAAGAAAGACATAGATGGGAAAGATATTATGTGTGTAATAAAAGCATACTTAGTTATTGGG
-TTATTTGGGAGAACAGCAGAGATACTAAATCACTTAAATTCTGTTCAGAATTTTTTTTACTTAAAAATGTTAAAATGTTA
-AAACTATCAATCAAACAGGAAGAAAGAAAAGAGGTAAAATAAGCAAAAAAAAAGAGGATGGTAAACATAAAATATATAAT
-AACTAAGTCCAAATACAGCAGTAATCAAAATAAATGTAAAGGAACCAACTTACTTATAAGAGCAAGATTATCAGGCTAGG
-TATTTAAAAATCCAACCATATGTAGTTTATAATAAACACACTTAAAACATAATGGTCCACAAAGGTTGAAAATAAAGAAA
-TGGAAAAAAACAAGTAATTCAATCACTAACCAAAAGAAAGCTGATATGGCAATATGAATGTCAGATGGCACTGGATCTAG
-GCCAAAAAGCATAAAAAGAGACATTATGTAGTGATAAAAAGAACAGTCCTGGCCAGGCGCGGTGGCTCACGCCTGTAATC
-CTAGCACTTTGGGAGGACGAGAAGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACATGGTGAAACCCCG
-TCTCTACTAAAAATACAAAAAAGTAGCCTGGCGTAGTGGCGGGCACCTGTAATCCCAGCTACTCGGGAGGCTGAGACAGG
-AGAATGGCGTGAACCCGGGAGGCGGAGCCTGCAGTGAGCCGAGATAGCGCCCCTGCACTCCAGCCTGGATGACTGAACGA
-GACCGTCTCAAAAAAAAAAATAAAATAAAAACCAGTCCTGTATTTGAATGGCTAAGATTATGGCTTGAAATATAAAAGAA
-AAATGCTGACAAAATTACAAAACAAAATTGAAAAATCTACTATCTTGTCTGAGATTTTAAAACACATATCAAAAGCCAGC
-GGAGTCAGCAGAAAACACCAACTTGTATTAAAAAGCTGGAAAATAATAAACCCACTTTATAGATGTAGAAACTGGGGCCT
-AGGCAAGTTGAGTGATTCATGCAAGATCACAAAGTTTGTATGAATTCAAGCCAGGACTAAAACTCACACTTTCTAAATAG
-TAATCCTATGCCCTCTCCATTTTATAACATTAACACATGTAGAATAAACTGCGTATCTGCAGAAATGATTAGCCTTTTCT
-ATGTCCTTAAGAGAATCCTTAGTGTGGTAGCATATCTGTCAATGTTCCACTCGGTTTACCTTGAATTTCTTTTACTTTTT
-CAGTGTGCCTTTTCTTACCTCCTACATATTATGTTTCTAATTATCCATCTCTGTGATTCTCTATGGAGAACCACCCTTAG
-GCCACCGGGGTGTCTACTGTGAAACAGAAGTTCCTGGGATGTTATGCCCTCAATCACGGCCCTTATTCAATGACTGACCG
-GTGTGGGAAAATGGAAGCCCAGCTCCTTTGCCTTAGAGTTTGAACAAATCTAAGGTATAATTTTCACTCCGAAGCTCCCC
-CGTGGGATCAGGCTGAGGCTGAATCTCTGCTTGGCTTCTTCCCTTATCTTTCCTGCTTTTTACACCCAGTTCTACCTCGA
-AAATTTTCCTCAATAAATTGAGTTGCATGTGATTTCTCATCTCAAGGTCTGCTTCTGGGAACCCTTTCCTAAAATGAGGA
-CCATACAGCTCTGTACTAGGAGTAAAAAGAGAGTAGAAAGTGGTTCTACAGAAAACCAAATACAGCATGTTCTCATAAGT
-GGGAGCTAAATGATGAGAACACAGGGACACAAAGAGGGAAATAACAGACACTGGGGCCTATTGGAAGGTGGAGGGTGGGA
-GGAGGGAGAGGATCAGGAAAAATAACTAATGGGTACTAGGTTTAATACCTGGGTGATGAAGTAATCTATACAACAAACTT
-CTGTGACACAAGTTTACCTATATAACAAACCTACACAAGTAGCCCTGAACTTAAAAACAAACAAACAAACAGGATTATTC
-CATAAAAGTATGTTCTCTATTTAAAAAAATTTGAAGTAAATGAAAGTCACCCATAATCCCACTATTTGTAAGGCTATTTT
-GGTCATTTACCTAAGTATATATACTGTACAAGTAAAAGTGTGATAATGCCAAAAAAAAAAAAAAAAGTAGTTCTAGGGAA
-AGAATATTTGAGTGGTTAAGGTTTCCTGCTGCTTTTATCTTTGGGAAATTCCAGTTTGATTTGGGCACTAGGAACCTGGC
-ATAGTGAATGTAGTGTCTGCCAAGCTAGAAGAACACTGCTGCAACTTCAGACTTCAGGTCAATTACTATTGACTGGCCAA
-CTTTCTGTCCCGAGCATACCCTCTTGGGTCCAATTCCAGATTAATAATGGCCCAATTCCAAATCTGGAGGATTCCTGGCC
-TCTCTCTCTCTCTCTCTTTCAATGCAGTTGCTTACTTCCCTTAAGACTGGCTCTGAATATACAAGAAGGCAACTCCGGGA
-TTCTGGCCTTTAAGATGCAAGACCATGGGTAACCATACAAGCAACATCATGGGCTTTCCAGTTGGTTGAGCCATTATTTC
-AGCCTCTACTTTGTATCTCATAGCTTCACATTTCTTTGCTTTCCAAGTCTGGATTTAGAGGTGGGCCTTGTCTAGAAAGC
-CAGGTCTACCTTTTTTCAGGCAAAAAGTTTCATTAACCACTGTGGCTTAGAATAATATTTATGTAATAAAATATTTACTA
-GGTATTGAATGCATGCTATATGCCACTATACAGATGAAGAAATGGAAGTTTAGATCTGAAGATTAACTTGCCCAGATTTA
-TGTGGCCAGCTCTTGCCACAAACCAACCAAGGATTTAGTGAGTCAGACATGAGCCTGACTCTGCACGTATCCTACAAGTC
-ATAGCATTCCCTACCCTGGTTTTGCTGACCCCAGGCTCTAGCACTGGATTTATCCTTGGTTCTCTTACTGAGTGCTCTAG
-TACTTTCCTAGTTGAGCCCCTGACACCCATCCTCTGTCAACTCATTTTCCCCAGGAGCTGACACCTGCTCCTCAAAGTAT
-GTCTTCAACTTCTACCTGCCATTTTTCACAGAGACACATGGAGAATTTGCCCCAAATACACATCTCTAGGGACTTTCTGC
-TTCAATGCCCTGCCCTCCTCCTGCCAGACTGAACCATGGCAATGGGGCCTAAAATTCTCAATGCTATCTTAGGTTGGGTT
-CCCCAGAAGCAGAACCCAAGAAAGGGAAAATCAGGCACACATTGCTTCAGTCCTCTTGAGGAAAGACTCTCAAAAGAAGC
-ATCTAAAAGAAGAAAAGCAGACAGGACAACTAGGGTAAGAAGCCAAGCAAAGATGCGTGCTCAGGAAAAATCTAAACCTG
-GCCTGATATGAGAGAGGATCTGGAGCATAAATTACAACACTGACATGATGGTCCTCATCATTAAGACAAGGTGGTTCGCC
-TTTTGTACTCCTGTATCAGCCAGTCATTGCCATAGACTTCTCCTGATAAAACCATTTAGGGAGTGTAACTTTCTGGGCAT
-TAACTTAGGGTGATACTTGGGGAAGAGGACCTCTGTTAGCTTTTAGCAGTCAATACAGCAGCTGGAGGCTAGAGCCCCTG
-CTCATCCACCAGCATCTACTACAAGTGCCTGGGCCTTGGGCAATGAACGTGGGACTTCAGCAATCAGATCCCTTTTCTCA
-TCCCACCTTCCTGCTCCTGGCCTCCTCCTACTCCCCATCATCCTGTGTGGCTGGGGCCCCCCCATGCCATGTGCCTATCC
-ACAGGCTCCTGGATTTTAGTACCTGCTCAGAGTCCACTGCATTGGCGCCTGACACTTTATTAGTGTTCTAAAGCTTTGTT
-TACAGTTACCAGGACTCTCTAGATAGCAGCAAAAAGTCAACAAGGAAATAAAACTCCACCAGCTGGTGTATTTGTTGGGG
-ATAAACTCACCACACAGGAAACAGCTGGGTACATGCTCACAAACGTCAGTACCTTGCTGGTCCCAAAGGCTCATCTGAAG
-TTGCAAGTTTGAATCCCCCTTTCCAAGCTGGTCTGTTTATACGCACTCCTCCACACCTTCAGTTCCTTTACACCATGTGA
-GCCTCAGGAAGCTGAGGCAGTAATGAGCTTTGAAGCTGTTCTACTGCCTGTGACAGCCCACAGGCCAGTCATTTGATCCA
-ATTGCTTGATGCTACCTCCAGCAGCCTCTTGGCAAAATCTCTGCCATTATATACCATTGTTTCCTTACTCTAAAGCTCAC
-ATCTTCTCATGCTGAAGTCTATATGCTTCCTAGTGTATGAAAGTAACACTTTAATGTAGCCCTGAAGAAAACTGTCCAGC
-CCATCTGGACATCTGCCAGTCACTAGGAAGAGAATAGATTTTTCAGGCACAAATGTTAGCATACTAAGGAGTAGAAGGCT
-GAAGGCCATCTTCACTGACTTTATAGTCAGTGCGTTCTTTGTTCAGCAAAACTTAGCTCCTAGTCCTGAGCCAATTCCAA
-AATGCTGAATTTCATCCTTCCACTACTTTGAAAGCATTTAAGGTCTAATGAAAGGGATTAGGCCTGGAATTGGTGCCAGA
-AATTAAAATGAAGGCATAATTTGCATGTTTTGACAATACCTTCACACTTACACCCATGCCATGCTTTCTTAAACACTCTT
-GAAAATATGTGAGAATCAAGATTTCATAATCCACTTCTTCTGGAATGCCATGTAGAAACATTCTCATTTTGCTTTCTCCC
-TGCCTTCTGATTTTACTCACAGGCTTAATAATCACTGTAAGGATGGGGTAGCCATAAACAGCAGAGCATTGAGCTTTAGT
-GCACTCAGATGTTTGTGTATTTCCCCATTTACCTTGTATATAAAGCCATGCTAAGATTCGCAGTTAATGCTGGAGCTCAC
-CTTGAAAATAGCACCATCTTTCTCCTGAAGATGCTCAAACTCCAGGTAGTAACCTCAGGTTGTATCATAGCTCCTTCAGG
-GTACCTCACTGTTTTTAATAAGCACATGATAAAGATAATGTCTTCCTCGATTCTAGTGGTATTTCTTAACAAAAGCCTAA
-GCTGCACCAGGATGAGGTGTTGTAATATTTTCACAAGTGTTAAAAAGGATTACTGCTCTTCCTAATATTGGTCAATGTGC
-CCAGATGGAGACTATTGCTTTTGCGCATAACGTCTAAGCTTCTTTGCCAGCGCACAATTGTTTAAGAAACCACTTTTCTT
-GCTATGCCCTGATAATCTTGCCTCTTGAATAACTCATTTCCATCAAGAGCAGGACAGAATCAGAACAGCATGGACAAGGA
-TAATCTCTAAAATGTGGTTTCAAATGGAGAAGTATGATATGGTTTGTCAGAGGCCTGGAAGGTGCACATTGTTTAGTAGG
-TTGACCCAAAGCCATCCTCAAGAGGTAGGATGGGTTTTTTTGTGTGTGGTTTTTTTTTTTTTGGTTTGTTTGTTTTGTTT
-TGTTTTGTTTTGTCTTTTGAGACAGAGTCTCACTCTGTCACCAGGCTGGAGTGCAGTGGAGCAATCTCAGCTCACTGCAA
-CCTCCGCCTCCCGGGTTCAAGTGATTCTCCTGCCTTAGCCTCCCGAGTAGCTTGGACTACAGGCTCACGCCACCACATCC
-AGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTGGCCAGGATGGTCTTGATCTCTTGACCTCATGATCC
-ACTCGCCTCGGCCTCCTAAAGTGCTGGGATTACAGGCATGAGCCATTGCACACGGCCTAGAAGTAGGATGGTTTTAAGAG
-CACTGCACTTTCTTTGACACTTCTACCCCTGAGAGTAGGGTCTATGTTCCCACCCCTTGAACCTGGGTGGGCTTTGTTAC
-TGCCTTGATCAATAACAAAGTGCAGCAGAAGTGACACTATAATTTCCAAGGCTGGGTCTGAAGAAAGTCATGTAGCTTTT
-TCCTTGTTCTCCTGGAACACATACTCTTTGTATCTTCAGCCTCCATGTAAGAAATTTTACTGTCCCGAGGCTGCCCTGCT
-GGACATACTAGGTGGAGAGACCACTAAGAGAGAGAGAGATGATCAACAAGCCTTAGCTATTCAGGCATCATACATGGGAG
-CGACAAAAGCTTCAAGATGGCACTAGCCCTAGCTACTGCTCAACTGTAATCACAGAGAACCCAAGGCCAGAAATGCCCAG
-AGGAGCCTAGTGGACCCCAGAACTGTGAGAGATACTAATAAATTGTTATTGATTTAAGCTACTGTGTTTTGAAGATGTTG
-GTTCCACTGCAATACATAATGGGAACAGGAGGTGCATTACACATAATATAATGTACAATTCAACCCAAAGGACTCTCCTA
-CCCACCACTGGATACATGTCTATGAGAGTTGGCACTGCTGTGGGTGCACAGAGCCAAGGCCATGCCTCACAAGACAGTAG
-AGTGGGTGGATGTCTGCATGCTATGATTTGAGAATGACTCAAAGTAATCTCCCTCAGGGGGCTGCTCAGGTCCCTGACCT
-CTTCCACAGTAATTGCCTTGAGAGGATATGCAATCTTGGAAACTTGCCAAATGTTAGAAATCCCCTTGTTCAGTGGGTTT
-CAAACTAAGAACACTCAGGTTTTGAGAAGGGATTCCAAGGAAGTACAGTGAAAGCAAGCCTTCTACAGACACAGTATTCT
-CTCTCTCTGGCCTCAGAGGGAGGATTTCTTCCCAGCCTCAGGGGTGGAACTGACCCAAGGTGCCCATCAGTGCAACACAT
-TCTTCTTGCCATTGTGATTGGTATAGGGCTGGACACGTAGTCCACATCAGGCCAATCAAAGTGAGTATCAGGACAGTCCC
-AGGGAGTTCTGGGAAAACAATGTTCTCCCTTTTTCACTAGATTGGAATTTAGAAGTATAGTACTTTGAGAGCTGCTAGCA
-ACCATAGGAAAAGTGGCAGAGAATCCTAGGAATGGAGTGGAAAGAGAGGAAGTAGATCTCAGAAGAGACAGAAAAAAAAA
-GTTGATCCTAACGGCTTTCAACCTGATATTCAGCTGTTCTTGAAGCAGATCTCCCCTGGACTATTTTGTTATGTGAGCTC
-ACAAATTTATTTTGTTTAGTGATTTAAGCAACTAGAATTTTAAAAATCAATGTGTACATATATGCTTAGCTTCTCTTGGA
-GTTTGTGTTTTAGCAGTAGAAGAAAATGATTTCTGCTGCTAAAAACATGTTTGGAAATAGCTGATCTTATCCTAGTGATC
-TAGTCCTTTTTGTTGTGCAAAAGGAAGTGCTAAAATCAGAATGAGAACCATGGTCACCTGACATAGACACAAGTGATGAT
-GATGATGATGATGATGATGATGATGATGATGATGATGATATCCATGTTCAAGTACTAATTCTGGGCAAGACACTGTTCTA
-AGTGCTATGAATATATTACCTCATTTAATCATCTCCAAAACATTATGAGATATTCTGTTACTATCACCATTTACAAATGA
-TGGGATTGAAGTACAGAGAGGATAAATAGCATCCTAAGATCACACAGCTAGTAAGTTGTGATGCTAGGATTGAACACAGC
-TGTTCTCTTAGCCATACCCTACACCCCTCTGACAAGGTAGAGTGCCTTCTCATTGGCCCCTAGGTTCTGGGCTCTCTTTC
-CACGATGCCTCTATTCTTAAAGCATGCAACCCAGAAGGTTCCTGTTAAATGTAAGTGAGAGAATTTCTATCACTGTGGAC
-CTGCTTCCATCATCTGGTTTGTGGTTTTATTCTAACCACAAAGTATATGACTTACTCATGTCTGCTTGGTTTTGACTCTT
-TACTAAGAGTAAGGGAATGCAGTGATCAAAGGGAAGGAAGATTTTTAACTTAAGTTGTCAGCTTGCTTCTGCTTCCAAAA
-AAGTTTCATGCTTAAAAATATGGCACCATGCTTTATTCTTCAAAAGAAGAAAAGTCAAATTGTAGCTGACTCCAACTCCT
-TGTTTTACTTAGGTGGAGGAAGATTCCATCTCAGTGAGTATGATTTGTTCCTGCCCACCCCTCAGCTCCCAAAATGGCCC
-AGGAAGTTGTATGCAGCATAGAATTTGATGTCACTGTTATTTGGTCAACTTGTATGATCATTGTTCAGATTTGTGTAGTC
-CCTGGAAAGAAGGTGCCTCTGACAGTTCTCTGTCATTTTGGGGTACAGGGCACCTTGTTATATGGCTGCTTCCCCGGGGC
-CTAGTGTCAAGCTTCTCTTCGTGGGTGTTATATATATATCCTATTCTAAGAAGATGCTAAGGTGTCAGATTGGAAGCCAC
-CATCCCTCTCTTTGTCTCCATTAATCTCCACCTCTCTGCCTTTGCTATTTCCGCCCATCCCTTCCTTTCAGTGAAGAACA
-CAGATCCCCTCACTGCTCTGCTCCATTCTTTATAGCTCTTTGCATATTGCATGGGTTTTGCCTAAATTAGAATGGACCTT
-AATAGAACTGTGGGGCTTTTAAACATTCAAGCATCACTTATTTTAATATCCCCCTAAATACCTTTTGAAAAATCTCTTAG
-AAGTCCAACCGATTTAAGGGTTAGTGTGCATTTTAATTGACCATTCAATTTCAAATAAATGTGGAGGAAATTACAACCCT
-CTTAACAGAGAAACGACAATTTAAGGAGAATGAGACCTTGATTGAAACAATTAGGAACTTAGAAACCAGACTCTGATGTG
-GTCAAAGAAAACAGCCCAGGAATTTATAAAGCCTGCCTTATTTTGCTTTGAAGAAAAACTTGAAAACCATAAAACAAGGT
-GAGATGTTATCCAAAATTTGGAAGCTAATTTAATAAACAGATTAATGCAGTTAGTTTTGTTTGGCATTGAGAAACATTGG
-TTAACCAAAATTTTATTACAAAAATAAAATAAAATAGTTAGTTCTCACCCAGCCTATGGACTTGAGGCTTAGAAGAAAGA
-CATTTTAATCTCCTGTCATCTATTAACATATTTTTTATCAAATCACATAATCAGATAAATTCTTTTTTTTTTCTTTTTGA
-GATGGAATTTCGCTCTGTCGCTAGGCTGGAGTGCAGTGGCATGATCTCAACTCACTGCAACCTCCCCCTCCTGGGTTCAA
-GTGATTCCCCTGCCTCAGCCTCCCAAATAGCTGGGATTACAGGCACACACTACTACGCCCAGCTAATTTTTGTATTTTAG
-TAGAGACGGGGTCTCACCATGTTGGCCAAGATGGTCTCGATCTCCTGACCTCATGACCTACCTGCCTTGGCCTCCCAAAG
-TGCTTGGATTACAGGCATGAGCCACCGCACCTGGCCTCAGACAAATTCTTGATCAGATGGGCTCCCTAAGAACACTCTTT
-TCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTCTTTTTTCACATTTTTTTCCCGTAGGTTATT
-GGGGTACAGGTGGTATTTGGTTACATGAGTAAGTTCTTTAGTGGTTATTTGTGAGCTCCTGGTGCACCCATCACCTGAGC
-AGTATACACTGAACCCTGTTTGTAGCCTTTTATCCCTCATCCCCCTCCCACCCTTCTGCTAAAGTCTCCAAAGTCCATTG
-TATCATTCTTTACTTCGATTTTTTGTTTGCTTGCTTTGAGACAGAGTCTCACTCTGTCGTCCACGCTGGAGTGCAGTGGT
-GCAATCTCAGCTCACTGCAACCTCTGCCTTCCAGGTTCAAATGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTAC
-AGGCATGTGCCACCACTCCGGGCTAATTTTTGTGTTTTCAGTAGATACAGGGTTTTTACCACGTTGGCCAGGCTGGTCTT
-GAACTCCTGACCTCAGCTGATCCACCTGCCTCAGCCTCCCAAAATGCTGGGATTACAGGCATGAGCCACTGTACCTGGCC
-CATTGTATCATTCTTATGCTTTTGCATCCTCATAGTTTAGCTCCCACATCTCAGTGAGAACATAGCAATGTTTGGTTTTC
-TATTCCTGAGTTACTTCACTTAGAATAATAGTCTCCAGTCTCATCCAGGTTGCTGCAAATGCCATTAATTCATTCCTTTT
-TATGGCTGAGTGGTATTCCATTATATATATATATAAAAAACTGGGTATTTGTGTGTGTGTATATATATTATATATATAAT
-ATATATAATATATATGTAATATATATAATATATATATTAAATATATATAATATGTATAATTTATATGTAATATATATAAT
-ATATATATTAAATATATATAATATATATAATTTATATGTAATATATATAATATATAATATATATAATATATTATATATAA
-TGTGTATATATATATAATATATATAATATTATATATATTATATATAATGTTTTATATATATATAATATATATAATATATA
-TATAATATATATAATATATAATGTGTGTATATATAATATAATATATAATATATAATGTGTATATATAATATATATTATAT
-ATATAATGTGTATATATAATATATATATTATATATAATGTGTATATATAATATATATTATATATAATGTGTATATATAAT
-ATATATTATATATAATGTGTGTATATATAATATATATTATATATAATGTGTATATATATAATATATATATTATATATATA
-ATGTGTATATATATATATATTATATATATAATGTGTATATATATATATATAATATATATATATATACACTGAGATTTTTT
-GTTTTGTTTTGTTTTTTGAGATGAAGTTTCACTCTTGTTCCCCAGGCTGGAGTGCAATGGTGTGATCTCGGCTCACTGCA
-ACCTCCCCCACCGGGTTCAAGTGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGTGTCTGCCACCACACCC
-GGCTAATTTTTGTATTTTTAGTAAAGACGAGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGATCTTCCGGTGA
-TCTGACTGCCTCGGCTTCCCAAAGTGCTGAGATTACAGGCGTGAGCCACCACACCCAGCCTGGTTTTTTTGTTTTGTTTG
-TTTGTTTGTTTTTTGTTTTTGGGGGATGAAATTTCACTCTTGTTGCCCAGGATGGAGTGCAATGGTGAGAGCTCAGCTCA
-CTGCAACCTCCGCCTCCTGGATTCAAGCAATTCTTCTTTCTCAGTCTCCCGAGTAGCTGGGATTACAGGCACCTGCCACG
-ACACCTGGCTAATTTTTTATATTTTAAGTAGAGATGGGGTTTCATCATTTTGGCCAGGCTGATCTTGAACTCCTAACCTT
-CAGGTGATCCACCCACCTCGGCCTCCCAAAGTGCTGGGATTACAGGCATGAACCATGGCACCCAGCCTATACCAGCTTTT
-TATCCGCTCGTTGATTGATGGGCATTTGGGTTGAGAACACCCTTTTCTATCCGTCCATTTCATTTATTTCCCATTTCAAA
-AATTACTCCATAAACGTGATCATCCCCATAAACACAGGATAAACACTTGACAAAATTCAGTGCCTTTTCATGATAACAAA
-TAGTAAAGAAGGAAATTTTCTTAACTAATAAAAGTCAATACACAAAATTCACAGGTAACATCATACTACACAAAATTGAA
-AAGATTCCCCACTAAACCACGAACAAGACAAGGAGGGCCACTCTTACCATTTCTATTAAACATTATACTGGAGCTCCTAG
-CTGGGGAATTAAGCAAAAAGAAGTAAGAAAAAATGGAAATAAGTAAATGACATCCAGATTGGGAAGGAAGAAATAAAATC
-ATGTCTATTTGCAGATGGCATGATCTTCTATGTAGAAAATCCTAAAAAATCCATGCATACACACAAAAAGCTATTATAAC
-TAATAAATGAATTCAGCAAGACTACAGGATAAAACATCAAAAATCAAAAATCAATTCTCCTTTTGTACACTAGCAATGAA
-CAACCCAAAAATGGAATTAAGAAAGACATTTACTTTATAATAACACCAAAAAGAATAAAATACTTAGGAAAAAATGTAAG
-CAAAGAAGTGTGTGGTCATTTATTTTTTATGTCCTCTGGACTAGGCCTTGGGCTACCCAGACATTTGTTCAAGCATTATT
-CTAGGCATGTCTAGGCATGTTTGTGAGAGTGTCTCTGGAGGAAATCAACATTTGAACCAGTAGGCAGAGTAAAGCAGATT
-GCTCTCCCTAACGTGTGTTGGTTTCAACGCATCAACTGAAGACCTCAACAGAACAAAAAAGCTGAGTAAAAGGAAATTCC
-TGCCTGACTACTTGAGCTCGTCTTTTCTGGCTTTTGGACTCAAACTGAAACATCAGCTCTCCTGGGTTCTCCAGCTTGCT
-GACTGAAAATCTTGGAACTTCTCAGCCTCCATAATTCCATGAGCGAATTCCTTATAATCGATTATTCTTTCTTACATAGG
-TACATATGGGGTGTGTATATATATAAATATATGTATATATATACACACATATATGTATACTTCTAGTTCTCTTTCTCTGG
-AGAACTCTAATGCAAGATTATAAAAAAAATTACTGAAAGAATTCTTAAAATACATACATAAATTGAAAGTCATTTTATGT
-TCATGGATTGGAAGACAATATTGTTAAGCTAGCAACACTCCCTACATTAATTTACAGATTAAACCCAAGTCTTATCAAAA
-TCTCAACTGCCTTGCTTACAGAATTTGACAAACCTATCCTCAAATTCACATGGAAATGTAGTAAACTCAGAATAGCCAAA
-ATAGTCCTGAAAAAGAGGAATAAAGTTGGAAGACTTACACTCCCTGATTTCAAAACTTACTACGTAGCTACAGGAATCAT
-CCTGAATACTTTGTACTGGCATAAGGATAGTTATATAGATCTATAGAACAAAATTGAGAGTCTAGAAATAAACCCTTACA
-TTTATAATCAATTGATTTTGGACAAAGATGTCAACAAAATTCAGTGAGGAAAGAATAGTCTGGTGCTGGGGTGACTGGAT
-ATCCTCATGCAAAAGAATAAAGTTGGACCCTACCTCATATCATATACAAAAATTAACTCAAAATGTAGGAGAGATCTGAA
-TGTAAGAACTAAAATATAAAAATCTTAGCAGAAAACCTAGGTATAAATATTCGTGATCTCATATTAAGTGATACTTTCAT
-ATGTATGACACCAAAAGCACAAATCAAAAACTTTTGTGTGTCAGAGAACATCATGAAATAAGTGAAAATAAAAAAACCAC
-AGAATGGGAGAAAATACTTGCAAGCCATATATCTGATAAAACACTTGCCGTATAAAGAACTCTTCAAAGTCAACAAGAAA
-ATGACAAACAACTCAATTAACAAATGGGGAAATGATCTGAATGAACATTTTTCCAAAGAAGATATTCAGATGGCTAATAA
-GCACATGTAAATATCTTCAACATCATTAGCCACTATGCAATTATAAATTAAAATTACAATGATATATCACTTTGTATCCC
-TTAGGATGATTAAAATAAAAGACAGACAGTAACAAACATTGGCAAGGGTAGAGAATTGGAACCCTCATATATTGCTGATG
-GTATTGTAAAATGGTGTAGCCATTTCTGAGTAACAGTCTGGCAGTTCTTTAAAAGTTAAAAATAGAGTTACTGTTTGTGT
-GTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTATTTGAGACAGGGTCTCACTCTGTTGCCCAGGCTGGAGTGCAGT
-GGCGCGATCTCAGCCCACTGCAATCTCCACCTCCCAGGTTCAAGCAATTCTCCCACCTCAGCCTTAGAATTACTGTTTGA
-CTCAGCAATTCCACATCTAGGTAATAATCACCAAAAAAGTAGAAACAACCCCAATGTCCATCAACTGATTAACAGATACA
-CAAAATGTGGTATACTCCATACGGATTATCATTTGGCCATAAAAAGGAATGAAGTACTGGCTTATACATTCTAAACATGA
-ATGAACCTTGAAAACATTTTGCTAAGTGAAAGAAGCCCATCACAAAAGACCTTATATTTTATGATTCATTTATATGCAAT
-ATCCAGAATAGGCAACATCATAGAGACAGCAAGTAGATTAGTGGTTGCCAGGCAATCGGAGGGGAGAGAAGGGAGATAGC
-AAATGACTGTTAGTGGGTACGGAGTTTCTTTTGGGGGTAATGAAAATGTTCGGGAATTAGTGGTGATGGTTGCACAACTC
-TGTGACTGTACTAAACAGTATTGAATTACACACCTTAATATATTTTATAATATATGAAGTACATCTTGATAAAGCTGTTC
-CAAACACTTTATATAATATATGCTAAATATATATTATATAACAATATAATCAATATAATATATATCTCATATTTATTATT
-GTGTATTATATATTGTATAAATGTATATATAACTATATAGTATAAAATTATAACAATTGGACATGTTATAATTGTTATGA
-GCCCTATATATATCTCCTGTTGCAGCTTAAAAGCTGGAAGTCCCTGAATTCATTTGAAACCTAAAATAATTTCCTTCTTA
-CTTAAATATGCTGCCTTAACATCCTTTAAAGGTCTGAGAATTAAAACAAAACAATACCTATCAAAAACTTCCTTGTGACT
-AGTTTATCCCTAAGTCAAGTTGTTTTCTATTTATTTGTTTTCTTTTGGTTTGGATCAGATTGGTTTGTACATTATGTGGT
-TAAGAGCGTCTGCTGGGCTTCTAGTACTGGCCATCACCACTAGTAGCTATGATACAGGGAAAGTTATGTCCCTCTCTTTG
-CCCAGGTTACCCATCTGTAAAATGGGAAAATTTTTGAGGCCATCACTAAATATCAGTAGACTAAAGGACTAAATGACCTC
-TTAAAAATTCAGGGTTCAAGACAACCTATAGAATGGGAGAAAAATTTTGCAATCTATCCACCTGACAAACACCTAATATC
-CAGAATCTACAAGGAATTTAAACAAATTTACAAGAAAAACACAAATAACTGCATTAAAAAGTGGGCAAAGGACATTAACA
-GACACTTCTTTGAAGAAGGCATTTATGTGGCCAACAAACATGAAAAAACGTTCAACATCACTTATCGTTAGAGAAATACA
-AATCAAAACCACAATGAGATACCATCTCATGCCAGTCAGAATGGCGATTATTAAAAAGTCAAGAAACAACAGATGCTGGC
-AAAGTTGCTGAGAAAAAGAAATGCTTTTACACTGTTGGTGGGAATGTAAATTAGTTCAACCATTGTAGAAGACAGTATGG
-TGATTCCTCAAAGACCTAGTACCAGAAATACCATTTGACCGAGCAATCCCATTGCTGGGTATACATCCAAAGGAATATGA
-ATCATTCTATTATAAAGATACATGCCCACGTATGTTTACTGCAGCACCATTCACAATAGCAAAGACAGGGAATCAACCCA
-AATGCCCATCAATGACAGATGGGATAAAGAAAATGTGGTACATATACACCATGGAATACTATGCAGCCACAAAAAGAAAT
-GAGATCATGTCCTTTGCAGGGACATGGATGCATTTGGAAGCCATTATCCTCAGCAAACTAACACAGGAACAGAAAACCAA
-ATATCGCATGTTCTCACTTATAAGTGGGAGCTGAACAATGAGAGCACATGAATACAGGGAGGGGAACAACACACACTGGG
-GCCTGTCAGGGGGCCGGGAGAAGGGAGATTATCAGGATAAATAGCTAATGCATGCAGGGCTTAATACAGAGGTAATAGGT
-TGATAAGCACAGCAAACCACCATGGCACACATTTACACATGTAACTGTATTAGTCTGTTTTCATGCTGTTGATAAAGACA
-TACCCAAGATGGGGCAATTTATAAAAGAAAGAGGTTTATTGGAATTATAGTTCCACATGGCTGGGGAGGTCCCACAATCA
-TAGTCGAAGGCAAGGAGGAGCAAGTCACACCTTACGTGGATGGCAACAGGGAAAAAGAGAGCTTGTGCAGGGAAACTCCT
-GTTTTTAAAACCATCAGACCTCATGAGACCCATTCACTATCACAAGAAAAGCATGGGAAAGACCCGCCCCCATAATTCAA
-TCATCTCCCACTGGGTCCCTCCCACAACATGTGGGAATTATGGGAGCTACAAGATAAGATTTGGGTTGGGACACAGAGCC
-AAACCATATCATTCTGCCCCTGGCCCCTCCCAAATCTCATGTTCTCACATTTCAAAACCAGTCATGCCTTCCCAACAGTC
-CCCCAAAGTCTTAACTCATTTCAGCATTAACTCAAAAGTTCACAGTCCAAAGTCTCATCCGAGACAAGGTAAGTCCCTTC
-TGCCTATGAGCCTGTAAAACCAAAAGCAAGCTAGTTACTTCCTAGATACAATGGGGGTACAGGCATTGGGTAAATACAGC
-CATTTCCAATGGAAGAAATTGGTCAAAACAAAGGAGCCACAGTCCCCATGCAAGTTCAAAATCCAGCAGAGCAGTCAATG
-TTAAAGCTCCAAATGATCTCCTTTGACTCCATGTCTCACATCCAGGTCATGCTGATGCAAGAAGTGGGCTTCCATGGTCT
-TGGGCAGCTCCACTCCTTTAGCTTCGCAGGATAGAGGCTCCCTCCCAGCTGCCTTCACAGGCTGGCATTGAGTGTCTGCA
-GCTTTTCCAGGTGCACAGTGCAAGCTGTCGGTGGATCTACCATTCCAGGGTCTGTAGGATGGTGGCCCTTTTCTCACAGC
-TCCACTAGGCAGAGCCCCCATAAGGACTCTATGTTGGGGATCTGACCCCACATTTCCCTTCTGCATTTCCCTAGCAGAGG
-TTCTCCATGAGGGCACTGCCCCTGCAGCAAACTTCTGCCTGGGCATCCAGGCATTTCCATACATCCTCTGAAATCCAGGC
-AGAGGTTCCCAAACCCCAATTCTTGACTTCTGTGCACTTGCAGGCTCAATACCACATGGAAGCTCCCAAGGCTTGGGGCT
-TGCACCCTCTGAAACCACAGCCCAACCTCTACATTGGCTCCTTTCAGCCATGGCTGGAGCAAACGGAATGCAGGGCACCA
-AGTCCCTAGGCTGGACACAGCATGGGGACCCTGGGCCGGGCCCACAAAACCACTTATTCCTCCTAGGCCTCTGGGCTTGT
-GATGGGAGGGGCTGCCATGAAGCCCTCTGACATGCCCTGTAGACATTTTCCCCATTGTCTTGGGGATTAACATTAGGCTC
-CTCATTACTTATGCAAATTTCTGCAGCAGGATTGAATTTCTTCTCAGAAAATGGGATTTTCTTTTCTAATGCATTGTCAG
-GCTGCAATTTTTCCAAACTTTTATGGTCTGTTTCCCTTTTAAAACTGAATTCCTTTCACAGCACCCAAGTCACCTCTCAA
-ATACTTTGCTGCTTAGAAATTTCTTCTACCAGATACCCTAAATCATCTCTCTCAACCTCAAATTTCCACAAATCTCTAGG
-GCAGGGGCAAAATGACACCAGTCTCTTTGCTAAAACATAACCAGACTCACCTTTGCTCCAGTTTCCAACAAATTCCTCAT
-TTCCATCTGAGACCACTTCAGCCTGGACTTTATTGTCCATATTGCTATTAGCATTTTGGGCAAAGCCATTCAACAAGTCT
-CTAGGAAATTCCGAACTTTCCCAGATTTTCCTGTCTTCTTCTGAGCTCTCCAAACTGTTCCAACCTCTGCCTATTACCCA
-GTTCCAAAGTTGCTTCCACATTTTCAGGTATCTTTTCAGTAGCACCCCACTCCTGGTACCAATTTATTGTATTAGTCCAT
-TTTCATGTCGCTGATAAAGATATACCTGAGACTGGGTAATTTATAAAGGAAAGAGGTTTATTGGACTTACATTTCCACAT
-GGTGGGGAGGCCTCGCAATCATGATGGAAGGCAAGTAGGAGCAAGTTACATCTTACATGGATGGCAGCAGGCAAAAAAGA
-GAGCTTGTGCAGGGAAACTCCTGTTTTTAAAACCATGAGATCTTGTAAGACCCATTCACAATTGTGAGAACAGCACAAGA
-AAGACCCACCCCCATGATTTGATCATCTCCTGTCGGGTCCCTCACACAACACATGGAAATTATGGGAGCTACAAGATGAG
-ATTTGGATTGGGACACAGAGCCAAACCATATTAGCAACAAAGCTGCATGCCCTGCACATGTATCCTGGAACTTAAAATAA
-AATATAATACAATTTTTAAAATGAAAAATGAAAAAAATTTTTTAATTCAAGATTCAGTCATTAAAACAGGGACATATGCC
-CAATAAATGTATCATCATTATTTTAATACTTAGCACTCTGTTCTGTGGATTCTTAAAAGTAGCTTATATTTTAAACCACT
-TAGGCCTTATAACTGGGGGAAGATTCCGTCTTATCCCAAATTGGGAGAATGCAGGAAGCATGAAGGACAAAGGGTCAATG
-GAGTTACAACCTGTAGACAGCCTGAAAAACCAAATTTGGGGCATCCCTTTGTGCTGCTCTACAAATAGCCTTCATTTGCT
-TTTCCTATCTGGCTTCAAGATTAATTGCTAAACTTGGAAGGAGGACCTTGAAGTTTGCTCGTAAATTTTCTGTGTTTAAA
-AAGAAGAGTTTTATCATTAATATTCTGGAGTGAGCATGAGTCAGGGAGAGTGACTCAGGCCATGTTCTCAGAGGTGGCTG
-GCTATAAATCCACTTTTGCAGAATATTAATCTCCCCTGGCTCCTTTGAAAAGTTAGCAATTATTAGTAGATGGTGTGAAA
-GAGAGTCTTTAAAAGAGGAATGGTAAGACAATGTCACCTTGAGTTTCTTCCAAACTCATTGCTATTAGAGAAGAGAAAAG
-CTGTTCCCTCAAACAAACTTTGGAGAGGAGTTGTCCTGGCAGGCACAGGCAGCAAAAGCAAGTCACAACTCCACTAGACG
-GAGCCCCCACAGGGACTCTGTGGTGGGGGTCTGACCCCACATTTTCCTTCTGCACTGCCCTAGCAGAGGTTCTCCATGAG
-GGCGCTGCCCCTGCAACAAACTTCTGCCTGGGCATTTAGATGCCTAAAACTTACCGCATATGTGTACTGGGTCCCAAAAA
-AAACCCTAGTACCTTCAAGGAAAGATAAGGTTTCATGAAGCAATTTGACTCAATAATTAATTGTTCCTACCCGGTGATGG
-AATACCTAGGTTGCCTTGAAAATATTAAGCCAATCATTTGGAGAGTTTGAATCTCTTGAATGTAATAGTTAAAGGTAGAT
-AATATTTATGTCTTTGGGCAAGTGTAAACAGGGTCACAGAATTAGGGGATTCAAGAAATGGACATTGAAGTATCACCACC
-CATTCAAAGCCCTTGCCTGAGGAAGGGATACATTGAAACCACAACATACTGGTTTTTTTTTTTTCCTTTCCTGTATATTT
-ATATTAGTTGGCTCTTAAAATGTGGTGCCCAGAAGGCAGCATGGGCATCACCAGGGAACTTGTTAAAAATGCAAATTATC
-AGGCCCCTCCCCAGACTTACTGAATCAGAATCTCTGAGGTTGGGACTCAGAAACCTGTATTTTAACAACCCATCCAGATG
-ATTCTGCTGCTTGCAGAATTACTGCTCTAACTACAGCCAGTAACAGAGCTACTTTTAAAAAGCAAGTGATTATAACAGTT
-GGGACTATTGTAGGCCGAAAAAAGAAAAAGAAAGAAAGAAACTGGACTACAGTGGTCTAACTAAATAAGGGTTTATTTTT
-TTGTCACAAGAAGAATGGAGTTCAGCTACCCTGGGCTGATTCTGCAAAACCAGAATGTCATCGTTGTCCCAGGCTCCTTC
-TACCTTGGTAAGTGGCCTTTTCCCTCAGGTTCAACACTTCAAGGCCATAAGACAGCTGCTTCACCTCTGCCATGTTCAAG
-GCAGGAAGAAGAATGAGAAGTGCAAAAGGTAAAAGGTACATGCCAGCTGGGTCTCTCCACTTCTAAAAGGCTGCCTGGAA
-GCTTCAGCAAGTGACCACCACTCATGTGGCATAACATACAAAAACATTAATCAAATATTTCATCATCAGGGCTGGAAGGG
-ACAATAGGAAAGTACAAAGAGTTTAAAAAGAGTGGTTAAGGCCAGGCATGGTGGCTCATGCCTGTAATCCCAGCTCTTTG
-GGAGGCCGAGGCAGGCAGATCACTTGAGCTCAGGAGTTCGAGACCAGCCTGGGCAATGTGACGAGACCCCATCTCTACAA
-AATACACAAAAAGTTAGCTGGGCATGGTGGTACATGCCTGTATTCCCAGCTACTCAGTGGGGCTGAGGTAGGAGGATCAC
-TTGAGCATGGGAGGTGGAGGTTGAAGTGAGCTGAGATCACGCCACTGCACTCCAGCCTAGGCAACAGAGTAAGACCCTGT
-CTCCTAAAAGTAAAAAATAAAAGTAAAAAGAGTGGTTAGCAATTGTATTGCATAAGGTCTAATTTTGGTAAAGTGTGCTT
-GATTTTATTTTGGAAATTATTCTTCTTAAGATTGAAAATGCAACATTTGCCATTGTATTTACACCTTTCTTTATTATTTC
-TTCATCACTGGATGATTTTTACTCTTGATAAAAGTTTGGAAGTTGAATTGCTAGCACCAACTGTAATATCGGTGTGTAAT
-GCTGGGCCACTGTAGTTGAGGAAGATGGCTCATGTTGTCTTTTCTTGACTGACTTCATTCCACTTAATTATGGAATTTTG
-TTCATATCTTAGTGTTACTTCCTGGCCAGAAATTTTTATTTTGCAAACAAGTCCAAACAGTAAAATCTTTATTACAGAGA
-AATACTCTTAAGTCCATTTACTTTGATATATACATCTTTCATCAGCTACGTTTTTCTTCTTGGCAGCTAAGGTTTACATT
-TAATCAAGAAAATGTCCTTCTTGCACTTAGAGTAGGCACCCTCCTACCCAGCTCTGCCTCTAGTCCCAAAAAAGCCATCT
-GATGCTCACTACTGCCTGTCAAACATCCTAATGGATTATTGCTCCTCTCCATCAACCCCCATCTGAGGACCTAGCCAGCA
-GAATGCTAAAACACCCAATCCACACAGGCAAAATAAAATGATGGGGGGAGCAAAATCTGGAAACTTGGTACTCAGAGTAG
-GGTCTTCCCTCCAGGAGCATCAGCATTTCCTGGACCCTTGTTGGCAATGCAGACTCCCAGTCATCCTAAATCTGCTAAAT
-CAGAACCCACATTTTAAAAAGACCTCCAGTGGTGGTTGTGCATCTTAGTTTGAAAAGCACTGGCCTAAAGCAGTGGTTCT
-TGAAATATTGCTCTAGACATGCAGCATAATCATCTTCTGGGAAACTGTGAGAAATGCAAAATCTCAGTCCCATCCCAGCC
-CTGTTGAATTTGACACTTTAGGGGTGGAGCCCAGTAATCTGTGTTTTATCAAGCCTTCCAGGTGATTCTGACATAAGCCA
-AAATCTGAGAACTTCCCCTATAACAATGGTAGTCAACCTTACTTATACAAAGAAATCACCTAGGGTATTTAAACATTACA
-GCTGTCTCCTATCTTAAATATTTCTGCTCACAGGAGGAGTGTTTTAGGTCAAATTTCCCAGAAGAGCACCAGGAAAGACC
-ACATCTATGTCTAGCCCCACTCTTCTTCCTCCTCTGTCACATAACACTTAACAAGAATCCACATTTCAGACTGTTCCTTA
-TGAGCTCTCCCACACTGCCACACATTTGTTTCACCAGGCAAGATGAAAACAGCCTGCTGAGCCCCAAAGGAATAAAGCAT
-GGAAGACGACTGGAGAACACATTTGACCGCTTTGTAGGGTCAGTATCAGGGGCTGCAGCCTAGGAGGCCTGGATAAATGC
-TGCTTTCTACATAGACAGGTTGTGGAGGGGAAAAGACCTGATTCTCAACACCATTGTCTTGGCGCCCCTGCCACAGGTAG
-TAGATTAATTACAGAAAAATAAATAGTCCTGATTTCCCATTCCTCCTTGTATGCACACTCTTTGCAATGTGATTTTGTGA
-TTCTTCCAATCCAGAAATAGACTCTGTTTCCCTACCAGTTGAATCTGCTCTATGACTTGAATTCGCCATAGAATGTGGTG
-GAAAGGATGGTTTGCCAGTTCCAAGCCTGGCCTCCGCAGGCTTGAACACTCTCCTCTTCCTCTCCGACCCTTAGCCAGCA
-CCAAGTGATGATACCCAGACAAACTAGCGTGAGAGACTTGTGCCCCAGTCATGCCATCCCCCCCAAAACAGCCAGCTGAC
-CACCATACATGTGGGCAAGACCATCCTGGAGCAGCACTCCTCTAGTTGACCAATGACTCCCATATGAGCCCAGCTGAGAA
-CAACAGAGAAGGGCCCAGGGCAAAAGGGTCACACACTGACCTGTAACCTTGAGAACTAATAATGGCTGCTATTTGAAGAC
-ACTGACTTTTGGGGTGCCTTGTTAGGCAGAATTATTGTGACAACAGTTCAATAATACCTCACAACTTTCAGACCTTTCCT
-GGAGAGACCCAAATATGGGACAGAAACATTAAACTACAAACTACAGACAGCTCTGCACACCTGACTCTGGGTGTGAGGAA
-ATGGACCACGGAGAAGGCAGAGGCATTGGTGGTCAGGGAACACAGCACTCGAGACAGAGCAGGCTTAGAGCTCAGAGGGG
-CTCGTGAGCTGCGAACAGCACAGCCTGCAGCCTTCTGTGAAGTCACACGGGGAGGAAGTGATGAGAAGGCAGGTTCTATT
-TCTGTTATGTGATCTAGAAAAAGTACCTGGGAAGCCAGCAGGGAGCCAATCAGGGAAGTTGACTGATGGGGCCAACATGG
-GCTTCCGTTTTTATGAAAGATGTGGAAGAGAAAGAGAGAAGGGCCCAGAAGTGTGAGATTTGGGGGTAAAATTAGAACTA
-GGTTTTTTTTGTAGCTTTAAATTTTTTCTTTATTGAGGTATAACAAAAATACAGTAAATTGGCTGGGTGCAGTGGCTCAC
-GCCTGTAATCCCAACACTTTGGAAGGCCAAGGTGAGAGGATCACTTGAGCCCAGGAGTTCAAGGCGAACCTGGGCAATGT
-AGGGAGACCCTGTCTCTACAAAAAATTTTAAAATTAGCTGGACATGCATACGCCTGTGGACCCAGCTACTCAGGAGGCTG
-AGGTGGGAGGATCCCTTGAGCCCAGGAGTTCGAGGCTGCAGTGAGCTGTGATCATGCCACTGCACTCTAACCTGGACAAC
-AGAGTGAGACCCTGTCTCAAAAAAGCAAAACTAAAAAAAGCAAAACAAATGCAAACGCAGAACAGTACATTGCACAGATC
-TTAAGAGTCAAGCCTGGTGAATTGGTGGTGTAAGCTCCCAGATCAACACGAAAGGCTTTGTAGCACCCGGAAGTCTCCCT
-TGTGCCCGTTCTTGGTCAACTCTTCTTCTTCAGAGGCAACCCCTCTTCTAACTTCTACCACTGCAAACTAGTTTTGCCTG
-TTTTTGAACTTCATATAAATGAAATCATGCAGTATGTGCCCTCAACTCTGTTTTTTTTTTCTGCTCATCATTTTGCCTAT
-AGAATTCTTACATGGAGGTGCATGTTATAGTAAGATGTTCTTTTTTATCATTCTGTAATATTCCATTTTATGAATATACT
-ACAATTTATTCTGGTCTACTGTTATTAGACATTTTGACTTTATGAATAGGGCTGTTATGAACATTCTTGTACATGTCTTT
-TGGTGCACACATGTTCTCTTTCTCTTGCTAAACCTGTGGCTTTTAATCAATCCCTCCTTTGTTCATCAACTGGTTTGAGT
-AATGACCCGACACCCTTGGTCCCCCTTTCCCAGGCTCAGTAAGAATCTGCCCCTGAATTCAAAGCCCACTCTAGGAGGGA
-GGGCAAGAGGAGGAAAAGGGAGAGAAAGAAGAAGGTAGCTCCAGTGACTACAGAAATGATATCAGTTCTTCCTAACTTCA
-CGTTTTGTCTCTAGTGGCTATCTGAAGTGCCTAAAATGACATTCATTGGAAGTAAAGACGTGAAGATTCCTTTAGAGATA
-CAAATATGCCTTTTAGAAGGGTAAATACATAAAAGAATTTAAATGTTACCTTTGCTGGTCCTTCACAATGTTCAGATTAT
-CCTTTATTTATTAGCTCCCCCACTACCCAGAGTGGCCTCCCCACTACTTGCATCCATTACCTAGGAGTTTGTAAGAAATG
-CAGAATCTCGGGCCCCACCCCAGACCTGGAATCAGGATCTGCATTTTTAAAAGATCCCCAAGTAATTCCCGGGCATGTTA
-AAGTTTGTGAAGCCGTGTATTATCCCACTGATACTTTATACAAAACTCTATAAACAGAGAGAGGAGGAATAATTGTTCTC
-ATTTTACAGATAGGGAAATATGACGCGGAAAGGTGAATTTGATGTGCCAAGGGCACCTTGCTGGTTCTCTGCCAGGGGAA
-GGTCTCTAGGTGGAGGCTCTGTTGATTTTCTGAACACAGATATTTCCATTATTTCACACTGATACCCACTGGCACTCCTA
-ACGCTTTATCAGGCCAACCAGCCTGCCTCTCTCTAGAGAGCAGTGTCCTAAGGGCATGCACTGTGTAACTTTGTTTGAAA
-GTTGGCATGAGGAGCCACCAAGGACATAAATGTTGCAGTGTGGTAAGTGGGAGTAAAAGGGGCAGGGTAGAGGAAGGGAA
-AAGGAATGAGGAACCCCAGCCACCACGTGAAATGGCCCAGAGGGGCTTGGGAAAGAGGAATGAAGGGGCTCCAGAGACGC
-ATTTCAAGTTCCTGGCCTTGCTGTCTGCTCCTCCCTTGCCTGCAGACAGGAGGTCTGTGCTGTGACGCAGTCTGTTAGAG
-CCTGTTGGCAGCCAGCCTGGAGTTGGCCTGCACCCCCACTGCAGAGCTCTCAGCTACGCAGGGAGAGTGGAGGCTGCCCA
-GTGCACCTTTGCTGGGTACTGCAGAGCATCCATGCCACCTGCACCAGAGGGAACACAGCTCTGCAGTAATGCCAGTTAGA
-CTGCAGTAACCCGAGATGGGTGTAGCTCATACTGCAGTAACCCGAGATGGGTGTAGCTCCATGCCCTTGCACACCTGCAG
-GGTCCGAGGACCCTGGGTTTTTACCATCTGTTTCTGCACCCCCCTCCAGGAAGCAGCTCCAGGTTGCAGAGTTGCTCTGC
-CTACCCTGAAGATGTCTGGAGGCTCCCCATTGACCCTGAGCCCCACGACGGTCCCACAGCCAGGAAGACGGGCTCAGCAC
-GGCTCATGGTTCAGATCAGTGAAACTAGATTCCATGGCCTCCTTTCAAATCCAGCTGGAGGAGGCTGAAAAATACCCCCA
-GGGCTCTGCCTGCCTGTGTACCGGTATGGGAAGACTCCAAGAAAATGTACAGCCTCCCCCACACCACCCCCACAGGCGCC
-AGACATCAAAGGTATAGTTAGCAGTGGCCTTCCAAAGCCAGTGTCTGATTTGTTTCCTAACCTAAAAGGATGGCTCTAAT
-GGCAGAGGTTTTGGGACAGGCAAAGGGAAGGGAGTACCACTGGCTGGTGAGGGAGCTGTTCGGGGCAGGTAAAGAAGCTT
-GTGGGGAGGTAAAGCTACAATGTGTAGTGAGCTGTCCCCATGGAGTGTGAGCCCGATCAACCCCCTCAGTCTAAAGAATA
-GGACACCTGCCTCTGCCTTGTGCAGCCTCCCCGGTGCTCCCAGCTGCCCAGTTTGCCTCCATAAATGTTACTTTTCTGCC
-GTCCATATTAAATGTTACCCTTCCCCAGTGTTCATAGAGAGAGGAGACAGATGCCTTTCTCTATGAACCGCTGCAGACTG
-TATTCAGTCAGGGCCTAGTTGTGTGGCAAGGGCACTGAATCCAACCTCCCAGCAGACAAAGCCATGCAAGAAGGAGGGTC
-AAGTTTCCAGGCCCAGGTTAAAAATCGTTGTGAGTGTCAGGTGTATGTTGGCAGGTGATCAGAGGCGGGGAAAGGAGGTG
-GAGGTCCCTGAAAAGCATCAGCCAAAACCACTGCTTAGGGATTAACAGCTTTTCAAGCAGCCTGGGATGTCCTTCTCATA
-AGGTTTGCCAGAATGGATGCTACTCACCTTCTTCCCTACTCCCTGCTGTGTATACCTGTACACAACATCCAAAGCAGGAC
-ACATCAGGGAATTCAATCCAAACCCTATCACGACAGTGGAAATTTTAAAAAATCTTCATGACAGAAAAGGTTCAGTGTTG
-GATGTCACATGGCAAGGGTATAAAAGAGTTAATTCAGATACCATCCTATCTGAAATTCCATCGTTATTTTTCCCACCTGT
-TTAACTGAAGCAGACAGGGCTTAACAATCTCGCTCAGATTTCAGTCTTCTCTCACTAGTCACCTAGATACTGACAGTTCA
-CTCATTTATTCGATTAATAATTATTGAGTACCTGTCATGCTTGAGTCACTGTGCTAGTGAGAAATCAGTACACTGTCTAC
-CATATAGGCATTCACTTATTCTACAAATATTTATTGAGCACCACCTGCTTACATAGCACTGTCCAAGGTGCTAGGGAGGG
-TACAAAGGAAGACAGCAGACAAGCCCTCAAGAAGCTTCAGATACATGTGGAGAAACGTGCAAGCCCACAACGCAGCCCAT
-TTCTACTGTCAAAGAAATGGACCCTTGCTACAGAACTGTGGATCTCCTGAGAGCTTGTTAGAGATAGAGTCTCACACCCC
-ACCTGAGACCTGCTAAATCCGAACCTGCCTTTTAAGAAAATTCCCCAGGAGGTTCCACGCACATTAAAGTTTGAAATCTA
-CTGATCTAGACAAAAGAAGCTCTAAAAATTCAGGGGAGAGAGAGATTATTGTGCACATCAGTGGTCAAAAAAAAAAAATC
-CATGAAGGAGTTTGCCTTTAAAGGATGTCTGGGCTTTGGCCAAGTATAGAGAGCTCAAGGAATAGTAATTTCCCACCTCC
-AATGAGTTAAAAAAAAATATGTCTGCAAACTGCGGAAGGCAGTGACATTTTTCAGACACATTTTCCACAACAGCAAAAGC
-TTTGACTCAGGTAAGATGAGTCTGCAAATTCTTGTTGCTGATGCTATCAGGATCCCCAAATTGCAACTCGCCCAGTTTGG
-ACAGCTTCAAGGTCAGATTACCTGCTGTCCTGAAATGGACAGGCCCAGGAAAGATTCCTGGCCTTGTCCAACCCACCTGT
-CAGTCAAGTAGATCAGCCAGTGAGAAACTGGCTCATTATTTTCCAGCAGTTACTCAGCCAATTGGCAGTCCCCAGCAAAT
-TGAATTCTGGAGTGGCATCGTGTGAACATCGGTGTGGTGGCTGCTTTATCAAGCCAGTCCAACAGAGCAGATAAATCACT
-GAGAAGTTTTGATTAGAGGCTGTTGGCACCAAGACTATTGTTTCATAGTAGATCAGACTGAGCAGGTGTCTCAGTTTTTC
-TTACACTCATCCTTCCTGCATTCCATTTAAGAATTAAGATTTTTGCTTTCAATACAAAAATTGAAATAAATGAATAAACA
-GATCTAAACATGACTCTACTGTTATCTCTTGTTTCTAACTACCACCCACAATGTCTGTTTGTCCAACAATTGAATCCAAA
-AAAGATTGTACAGAACTTCACAATTGCATAGTTATATAGAAATTCTCATTCACCATTGAATGAACTGCTTACAATTCAGG
-CCTGTAGTCTATGGTGATAAAATCTGCCCATTGCTTCAGAAGTCATGCCAGGGAGGATTTGTCAGGTAAGCTCTAAAGAC
-AACACAGCCCAACTCATTTACCATTGGGCCATTATTTTCCAGAAGCAGGGATGGGTTTGTGATGAGCCATCTATACTCTC
-TAACCTCCGTGGCCATGGCTTATGTTTATAAGGCAGCTGGCAGGGATAGGGAGGTTGGGTTGAAGCTGAGTAGCAGGACC
-TGGCTGGCTCACATGAAGTGGATCCTAGGACTTTGACTCATCAGCTCTGTCTTAGTCCTGTTAATTTGATGCTTAATTAA
-TAACAGGGCATTAACATCTGCTGTGAACATACTGCTACTCATCACCCTCCCAACCCTCCCTGCCTTCTCCTCTCATACCT
-GTCTCCAGGAAGCTGGACCCACTTATCAGCCAACTTAGTCTCTCAATTATTACCAAAAATGTGTTTTCAACTTGGTGCAC
-ACTGGGGGTGTGCCTGAGCAGGATGGCGAGAAGGGGCAGGCACACACTGAGAAGCGTAGACATACTCCCCTTTATCTAAG
-GGCTCTGCTATTTAGGAAAGGGCTTTTGTGTGAGGAGGTTCGAGCCTCAAAGGCTCATCTTGTCATTTTTCCTGTGCCTT
-TCAGAGATGGAGCATATTGTGCTGTGTTTTTGAAATGATGAAATGAAAGTGTGAGGAATCTGAAAGCCATATAGATAAGG
-AGTGGTTGAAGGAACTGATGGAGCTGAGATGAAACGTTATTTCAAACGTTGGAGGCGTCGTCGTGGGAAGAGGCAGCAGG
-TGTGTTCTTTGTGGTTCCCGCAGGTGGGATATAGGTTCGGTAGAAGGAGGCACTTTCTCACAAAGAAAAACCACCCAACA
-ATGGGAGGCCAGGCCCTGCTTCCTGAAGAAGGAGCCCCCCCATGATGACAGGTACTTAAGCTGAAGCTCCACGACTATGT
-ATAGGAGTCACCTGCATTATAAGCAAAAGTTGGAATAGAACTCAGCATTCTTTTAACTCTGAAAGCCTACAACACATGCA
-AAGCTAACCTTCACAGAGTAGCTCCTATGGTCTCACTTTACAGGTATTATCCCACTTAACGCCCACAGCAGTCCAATAAG
-CTAGGTACAGTTATTATGTTTTGTTTTGTCTCTTTTTGTCCTCACTTCGGCTTGGAATGCTCTTGCCTCAAATATCTCCC
-TCCTTTCCCATTATTCTGATCTTCTCAGGGTACTATTTCCTCCCCAGTCCTTCCCAGTCTTCCCAAAGAGGGGATAATAT
-AACCACCCCTCCCCCATCTCTCCATCCCTTACACTGTTTGATTTGTCTTTATGGCATTTAGCACTGCCTAAAATAATGCT
-GCAATTGTATCTGTTTATGACCTGTCTCCTCTGGGAGAACAGAAGGACTTGGTTGGCTTTGCTCAGTGCTCCATTTCAGC
-ACAGAGAATCAAGGCCTGGCATAGCGTAGGTGCTCAGGACGTATGCATGGAAGGAATAAATCAGTCAGTTTTACAGATGA
-GGAAACCTAGGCATTAAAGAGGTAAAGCAACATCCAAAGGCCAGACAGTAAGTAAAGAGAAGGACCAGGTTGAGAGCAAT
-TTGACTCCAGAGTTCACATATGTACAGACAACCCCCTACTTGTGATGGTCCAACTTCACGGTTTTCAACTTATGATGGTG
-AAAAAATAATAAGCATTCAGAAGAAACGATACTTCAAGTACCCACACAACCATTCTGTTTTTCACTTTTAGTACAGTATT
-CAATAAATTACATGAGATATGCAACACTTTATATAAATAGGCTTTGTGTTAGATGATTTTGCCCAAATATAGGCTGATGT
-ACGTGTTCTGAGCATATGTAAGGTAGGCTAGGCTATGCTATGATGTTTGGTAGGTTAGGTGTGTTAAATGTGTTTTATAA
-TATTTTCAACTTATGAAGGGTTTCTCGGGACATAGCCCCTTTGTAAGTTGAGGAGCATCTGTACCCCATTTGACCCTTTG
-AAAAAAACATGTATTCTCAAAGAAAAGCTGAGACATCCTTGTTAATTCAGTGGCTGGTGCTGGCTCTTGTTTTATGACTT
-CAAATGACTTGTGCCTATAAGCAGGTGGTCACTGGTTGCCACCAACATGGTGTCTTAAAAAGCCCATTGAGAGAGGTAGA
-GGGCAAAAGGCAGAGGGCACAAAGTTACCTTTTGCCTCAAAGGTCTGACTGCACAGTGATTTGCTGAATAGAGCAGGTGA
-GTCAGAAAGGTACAGAGAACAGCTTGGCAGTCACCTGGTCCTAATCTATCCCTGGGCAGATACATTGAATCTGACACAGC
-TCCCGTGCCTGGAGTCCTCAGAATCAAATTTGCAAACTCAGAGCAGATTTCTTGCGTCTCCAGGCGATTTGAAACCATAT
-GCAATGTCACCCTTTCACCAAAGGAGCTGAATTTATGTTCCTTGTTTTCTCCCTCCCGGTAAGGCTTGGATTTTTCCATG
-ACAAAAATCTTGTTCATTTGAATATAAACAAGTTATAAAATGAAATCCACATTGACTTTTGCAGTTAATTAAAAAGAATA
-TGGACTTGAAAATCAGACTAACTTGAGTTAGAATTCAGGTTACCACTTTGAATCTCCATTTTCCTACCTGAAAAATAGAA
-ACTAACCCTTCTCGCATGGTTTTTGTAAGGATTAGATAAAAAAAATTGAAGGGGGCATCTGCCATTGATTTTCTCTTCTA
-TTGTCAGAGCATTGTTTTCCGGCTAGACGCCTTCTAGTCTTTCTGTAGCTGGGTACAGGAAGAAGCATTGTCTGAAGGAG
-TTATCGGTGTGGAATCCAAAACAGCTAAATTGAATTAGCAGAAAGACAAGGGCATTCCAGTACACTGTGGCCAGGGAAGT
-GCTGTATTCACTCATTGTTTGCACTCCTGAGGTCAGGCTTTCAGGTCAGACCTTGAACCCTCTGCCTGCTTCACATCCTG
-GCTCCTTGGGAAGCCACTCCTGTGGCTTCAAAGGGGCAAAACTAAGAGAATGGTGGAGCTGGAACTTTCATGACCAGAGC
-CTGCCCTGGCCACATCCTCCCTTGGAACCTACAGTGGAAAGTGGGGACAATTTTGCTAGGTCACACCTTTTTGAGGACCT
-TGCTGGGCTTGTGGATCTGCCAGAAAATTCTTTCTTTTTTGAGGGACAAAAGCCTGCTGCTCAGCAGTTTTAGATTAAGC
-CTAATGAGTTCTCTCTTGAGATCACCATTGTTCTAAGCTTAATATCATCCTCATTGACCTAGTGGTATCAAATTCTGTTG
-GCATACCTCTTACTAACAAAACACATCAAATATGTTTTTATAAAACATGATACTAAATTATAGAATATACCAAGAAATAT
-GCTTGTACAGTGAATCTGTGTGCTTCTATTGCTACCATTAAACGTTTGCACCTACTTCTAGCTATCACCAGAATGGGTTC
-CACTAGCTTCTAATATAAAGTCCTACACAGCTGTATCTCGTAATTTATAAGGTAAGGTGGGAAAATGCATCTCAGGTCTC
-AGCTATCTCCAGTGGGAGGCAGGTTCTACCACTTTCAAGGCTCATAACACAGGAAGGGGTGTTCAAAGGTGCAGGGTAAA
-CAGAAAGATGGTGTTCACTGCTAGGCGTCTCAAAATGAATGTGAATGTTCATGCACTCTTATATACAGCATTTGAAACAA
-AACAAAACAAACATAAAATTAAACCTGACATCTTGGGAATGAGAAATTCTAAGGGTGCCCAACATATAGTAAGTGCTCCC
-TAAATAAGCTGAATGGATGAAAGAGTAAATAACTAGGTAGATCATGGAGCCTCTGATATCTGAGTAATACGGAAGTGTTC
-ATAAAAAAGGGAAGCCTCAGTGAGACATATAAATCCAATGAAATATGTTAAGTCTCAAAAAGGGAGCAGATAATTACTTT
-TGCTTTATGTTTTTCAATGGAGTAATAAATAATAGAAGAATTCTGGTCTCTTCTCTGGAAGCTGTCGTTTACTTGGTGAA
-GTTTTCCTGTTTTTTCCTAATAAATGATATCAGTTTTAATGCCGTGCTGCCCAAAGATAACATCTGATATGCCCTTAGAG
-TCAGTTATACAAAGAAATATAGGTTTAGCTCTGGGCTTCTCATCCTTGAAACTGTAGACATTTGGGACTGGATAATTCTT
-TACTGTGAGGAGTCGTGCATTGTAAGATGTTTAGCAGCATTCCCTGGCCTCTAACAACTAGATGCCAGCGGCATCCCTAC
-CCTATGTGATAACAATTAAAAATGTATCCAGACATCACCAAATATCCCTAGGAGGCAAAATTGCCTCTGGTTGAGAATCA
-CAGACTTAGGCCTCAAAAATGGGCAACTCTTAGACAAATTTGATTTCTAGGCTTTTTCAAGTTGTAAACTAACTTTTCTC
-TAAGCACAGCTCTGCCATGGTATTTGCCTTGTATTCAGTTAGGGCCTGAACAAGATAGTGATAGAGACCAGAGATCTCAA
-AATGTGTCTATAAGATAAGCTGTTACACCGAATGATATTATTTCAGTTAACTATTTACATAGTCCTATTGTTAACAAACC
-ACTCTGGAATTCAGTGATTTAAAACAATAATTATTCTTATGTTTCTGGGTTTACTGATTGGCTGGAGCCACTCAGGGTCT
-GTAGGTTGACTGGGGCAATTTTGTTCCATGAATATTATTTTTACACCCAGGTAGAAGCTACTAGGGAGAAGCTCTTCTCA
-GGATGGAGGAAGAAGCTTCCGGAAGCACTAGCAGAAAAATGCACTGTCTCCTGAGGTCAAAGAAGGCACTCGGCACACAC
-TGTCATGTCCGTCCACTACTGCTAGCCTAAGCAAGACACAAGGTCAAGGCCAACATCAGCTGGGCAGGAAAGTACACACT
-TCCCTTGAAGACTGGGGCAAAGGAATTCATGAACGCCAAAGATGACATTTTCAATACAACCAATGAGATGGTGTCATGGG
-TCTTCGGTTCTCACTGGCTCCATTTCTTTAAGAGACAAAGATGGGGAGGTATCACTGGCGTTTGAGTCACGTTTGCAAAA
-CATATTAAGATCCCAGTGGGAAAACGCACAACACAGAGAACAAAATTTCCATAGCTACATTTAAGAAATCTGACTATTGA
-ATCAGTAGGCTGGTGGTTTTATTTGTTTTATTATGTTTTCCGGACCCTTGGTAAATATTGTCTTAATTTGGGTTAATTAC
-TTTTAAAGGGAACCTCAAGAATCAAGGCAAATTATTTGATATTTATTTCGTATTCTCCTTCCTTGTGACTAGAATACTAA
-ATAAATCACTAGCAGCTTGACAACAGCAGCAGCCTACAACAGAGGTATAGAATCGGTACTTTTGTTCTGCCTTCTTATGT
-ACTCTGCATTAGTCATGGCCATGGTAGAGAATTCTGTGGACTGTTTAAGCTTCTGTGTTTTTCTGAAGGTATATAGAGGA
-ATGGAATGGGTCCAACAGCAAAATTATTATTAGAAGGGAATAGAAATTGCCCACTAGTTGAATCTTCAATAAATATCTAC
-CGTTGATTTCATTAACTGATACATGTGAAAGCTAAAAGATAGTTCAAATATTCCTGATACATCTTCCCAGGGACCTGACT
-GAGGTCAACCCCAAAATTTTAAGGATGAGAAACACTGAATTTAAAAAAAAAATCCATACATTGTTCAAGTTTTCCTTTTA
-GCCATAACAGATCCTAAGCTAGATCAGCCCAGGCTTTTTAGCTCCTAATTCCAGAACCTTCCAGCATACCATGCTTGCTT
-AATACAATAAAGGAACTGCAGGTATTTGGCCTAAGGGAGATAATAGTCATTTGGGATTTTAAGTAAATAAGAATCTCTTC
-CATCTGGATGCAGAACGCCGGGGTCTCAAATTGGGCAGGCAAAAGGCTTATTTTGAGGACAATGGAACACTCCCCTGTGG
-TCCCATTCATGGAGATGTGGGATGAGAATGAAAGTGAGGATCTTCAGCCTTCCTGACAGAATGTCCATCCTGTCACCTGA
-ACCTCTGTCTGCCAAGTACAGTGGGGACTTTTCATTCCTGTGCTGATTTATAGCTTTCTGACATCTGACACTGTTGGCTT
-CCTCTTCTTAGAAAAATTCCCTGGGAATTTTTCTGATCCCACTTCTCTGATGGCTGCTTGTTCATTATTTTTGCAGTTTC
-TTTTCTTCTGGACTTGTCCTAATTAATGGTGTTCCCTTTGGTCCTCCCCTTTCCTCACTCCACGTGCTGCCCTTAGGGTC
-TAGAATTGTGGCTCTCAAATCTTCATCCCCAGCCCAAGTTGTCTTTTAAGCCCCAGAGCCACATTCTCAACCTTCTGGTG
-CACATCTCTTGGCTCATGGGAACCTGACTCCACATTCATGTCTCCCTGTGCCTGCCCTTCAAACACCATCTCCTTCTCTG
-GCATCTCCCCACTCAGGGAGCAGCAGCATCTACTCAGATACCTAATCCAGAAACTAGGGACTTAATGGAGATTCCACTGT
-TCCCACCTTGCCTCACATCTAAGCAGCCACAAGCTCTGTAATTCTACAGCCTCAGTATTTCCTAATTATCCCCTTCCCTT
-CATTCGCAGACATTGTCTGAGTTCATTCACATCTTGTCATTTCTTACCTGGAACTGTGCACTGACTTCCTAACCATTCCC
-TAAACCCAACCTCAGCCCTTCGGCCCTCCATCCCTAAACCATTCTCCATGTGCCCACAAGCCATCTTGCAGTATAGAGCA
-CACATTTTTTTCTCCTTTTTTGTTTTTTAAGGGATAGGTTCTTACTATGTTGTCTAGGCTAGTCTCAAACTCCTGGCCTC
-AAGCCATCTTCCCGCCTCATCCTCCTGAGTAGCTGGAACTGCAGGTACATGCCACCATGCCCGGCCCACAAATTCTTCAG
-AGAGTTTCTCTAATAATGAATAAATTCAAGTTTTAGACAGTAATCTGATTTATATCAGCATTTGTACTCTGAGCATGGGA
-CATTTGTTTATTTATTCCACATTATTTATTAAGTGCCTATTCTGAGCCTGACCTTGGCAATAGAATAGCAGTGAATATTT
-TCTTTAAACTCATTCTCATGGAGCTTAAAACTTAGTAGGGGGAGGCACACAATACAAAATTAAATAGATATCTATAATGA
-ATAATATATTAGTTTGGTGCAAAAGTAATGGCAGTTTTTTGCCATTGAAAGTAATGGCAGAACCTACAATTACTTTTGCA
-CCAATCTAATAAATCAATACAATATATATTACGTGAGAAAGTGAAAAGTGCTTTTGAGAAAAGCAAATCAGAAAAGGGGA
-GTTGGGAGCGTTGTGGGGGAGGGTTGAAATGCTAGGCAGGGTCTGAAGAAGACGACATTTAAAGACCACAAGTGGGAAAG
-GAGTGAGCTATGCGGATAACCTGGAGGAGGGGGATTCTGGGTGGGGAACAGCAAGTACAAAGGCCCTGAGTCAGGAGTGC
-ACTTGTCAAGTAGAGGAAGTAGCAAAAGAGACCGATGTGGCTGTAAAGTGAGAAAAGTGACAGTAGCCAGCTTGCATAGC
-ATCCCATTGCCAATGGTTGCAGCAGTACCTAGAAAGAAGGCCAGCACTGAAATCTAGTGTTTTTGGCTTTCTCTGGTATC
-TCTGAGAAAGTGTCAGTCTGGCATACCCATTGTCAGAACAATCCACTTAAATAATATGTGTCCTAGTCAGTTTTTGCTGC
-GCAGCAAACAACTTTAAGTCTCAGTTACTTACAACTACAAGCATTTGCTTTTCTCACTTATGGATCTGTGGGTTGGGTGA
-TCTTGGCTGGGCTCAAGATCTTGGGTGATCTTGGCTTGACTGCAGGCTGTAGGTTGGGCTCATGTCTGCCCACCTTGCCT
-CTGAGTTTTTCCTGAACCGAAAGACACATTCTATGGTGATCACAGAAGAAGAGGCCCAGCCAAACGATGAAGCACTTTAA
-AACCCCTGCTCATTCACATGTCATTGGTCAAAGCAAGTCACATGACCAAGACCAACATCAAATAGATGGAGAATTATATT
-CTACATGCCCTAGGGGGAGGCACTGCAAACCCACAGCAAAGGATGTGGAAGTATAATTCTGCAATAGTAAATGAGTGAAG
-AAACAAGACCAATCATCCAGTATTTCATTATACTGTAGTCCTGCCTTGAATCTCTACACACTTTTGCAGGTTAGAATGCA
-CTTACACACGCCTTTCTGTGATACCTATTTAAAAGCCTTGTAGATAGTAGGCACTCATAAAACTGCTTCCTTAATAATGA
-AATCTATGGATAAATGCCTTATTTCATATGACCCATGCAACAATTAGTGAATTAAATACAAATATCTTCATTTTACAGAT
-GAGAAAGAATCTAAATGACTTTTCATTCAGGGTTGGCAGACTCAAGGCTCAAGCCCAATTCTTTGCTCTCTAAAGCAAAA
-GACAAAAATTCCAACATTACCTCAAAATTAAGTTTACAGCAACATGAGGCCTATATTTGATTACAGTTGTCTGGAGTTCG
-AAGCACATTTTGTTGTAAATAGTTTTGGTTAATCTGACATTTTGTGAAACACAGTAAGGGCCACAGTGAGTTTCTGCTGG
-GTTTAGGCTTCTTTCTGAGATTGGCCTGGCTGAGCTAGGCAGGCTGACTGCTCATTCACCCATTTATTTTTCATTCAATC
-AACATGAACTGAGTGTTTATAAGAAGCAGTGTTTTTAAAGCTAGGGCTTCCACTGTAAAGAAAACAGACAATCATGGAGC
-TCTTTGAAAGGCAGACGGTAGTATATACGAAGTTGGAAGTGGTAACTACTCTGAAAACAAATAAAACAGAGTTGGGGATA
-GGAGGTTAAGGGGCATGATGACCAAGGTGAAGTAAACGAAAGAGGAGAAAGCTATAGTCCCCATGGCAGAGAAGGATTTG
-TATAGCTGGTAACAAGAAGGATCAACTCAAAGCACCAGGAAAGGAATTGGATTAAATAGACAACTCTTGTCCAGGGTTGG
-TGGCTTAACCTGCACGAGTGTCCCCAGGAATGCAGCCCCCACCCCAAAGGCAACAAAGACCCTGCTTTTAAACTGACTGT
-TGGGGTTTCTTCACTTCCTGAAACTATTTGAAAGAGTCATCATTCTTGATTTTCTTTCTTAGTTAAAATTTGAAATTCAG
-GTTGAATTTTTAAAAACTGAGTTCTGTCCTAGAACTTCAGACAGAGGAGGTCAAAGTATCTATAAGATGCTTACATGCTA
-ATAAAAGATTTCACACCAGTAAAGTGCATTGAAGGGCACTGTTGGTGGGAGTGAGGTTCTGAGTGGTCTTCTCATCTCCC
-CACCAGGAAAATAAAAGAATCTTGAATATGATTTGCATAGAATTCTGCCATAATTCAAGATATGACCTGTAATTTTATTG
-CAAATATTGTTGTTTGGCTCCCACCAAGTGGATAGATGGGAGTAGCACAGAGGAAGGGTGCAGAAAGGAGAGAACCCTCA
-GTAACAAGGAGAGGTTAGGAGAAGAGCCTTTTTATAATCACTCTGTTCTCTCTGGAAGGAAGAACATCTTTGGGAAACTT
-GAGGCAAACAATTTCCTTGCATTTACTTTGACAAGTACCATCTGTTAATGGCAAATGATCCTGGATTTTCATTTACAGTA
-TAAATACAAAGTTTCCTTTTAAAATAACTTTAATTTGTAAAGTTAGTACAGGTGGTATATTCTTGGATTAGTTTTTTCAA
-CCTCCCCTTTTCTTTCCAAGAGGTTGGATGTCTTAGAATTATACTTTCCAGACATCCTTGTGGTTAAGGCTCTGGATGAA
-TTCTGTTGTGCCAATTAAATGCAGTTGCATGAGTTTTGTAAGGCAGAAAGAAAGTGAAGCGAGCCTTGCTGCAGTAATGG
-CAGCTGATTAGTAAGCTTTGTGAGATTTGAGCACATGCAGGAGTCAGACTCATGCTTCTACTCTAGTCGACGGAGGCAGT
-TATTATGGCAGCAAGAGTGGAAAACGTGAAAACTGTGGTTTCTTCCTGTTGACATGGATAGCAAGTTCCACTGGTGCCTC
-TGACTTCCATACTCTTCTCACCATTTTATAAGCATCTATTTCCCTGTATTAAATCACCTTCTACTTGAAATACCTAGAGT
-GGTTTCTCATTATTTTATTAATTTAACACATGTGGCAAAATTGTGATGTGGTAAGCACTGGTCTCATGGTGACATGACTA
-GAAACACACATTCTCAGAATTTATACAAAGGATACCTGAATGGATTTCGAAATATTACAATTTGGAGGCAAAGCAAAGCT
-GGAAATGCCAAGGGAAACTCATTAATTGATGTCCTATTGCCTTAAAAAATCTATTCAATTCCTTTTATGAAATGTGTTTT
-CAATTAATCTAATTGTCTTGGAGTCCTTCAGCTGACTGATTTTTCAACTGGTTTGGAGGAGGTTTTTTGGACATTTTGGT
-GGAATATAAGGAAACAGAGTTTGTCTCTTTGACTACCTTCATCACAGAGTAAAAGCTACATACTTACCTGAAGCCACAAC
-TCCACGTGACTTACTATTTCAGTTGACCTAGCCCTTGAGCTTCTGAGGAAAGCAGATGTTGGGCTCAGTGGGTGGCTCCT
-TCAATAAACATGAAGAATGGCTTCAAAAAAAGCTACGGATAAACTATGAGTGGTTGGGGCTCTATACCAATGGCTGGGGA
-GGGTGTGAGGAGAAGAGAAACATAGCAGTGACTGCTAGCCCTGTGAGATCTTTTGCACCCAAGAAGTCCACTTAATTTAT
-CAGGGAGGTCTTAGGAAAATTTAGCTGCCTCAGAAAGCCTGAAAGAAGACAGGTAGAGCACTTGAAAAAAAAAAAAAAAA
-AAAACAAGAAAATGTCTAGAAGTATCTGCATCATCAGTAATGTGAGCAAAGGAACATTTTGAATACTGAGTTAGCAAGTC
-TTGCTCTAGCGCTGAGGAGCCTTAGGTTTTAGGGGATTGCATAAGCAGAAATTGCCTCTTAAACTACAAGATTCTCTTTT
-CCTTTTTTTGCTTTGGTAGAAGATCTTTGTTGTTTTGCTTGCCACTGTCCACTCTACCAACTTTTGTTAATCATACTCCA
-CTCTTCCTTTAGGAAATACTCCCTTTCCAGCTCTCAGCCCATGTGAAGATGGGCTGACTGGCCTGGCGTGGGCTGACTGA
-GTACATGACCCAGGCCTGGCAAACTAGATCATTCCATCATCTAGACCACTCTGATTGGTTCAGACATGGTCACATGATGT
-AAACCTAGACAACCCCAGACAATGAGCATGAGTCTGAAGACTTTTGATGGCACCATTTGAGAAAAGGATGCTCTTTTTGT
-TGGTGTAAATAAACTGGTGGATGTAGCCTTATAACTGTAGGGAGACCTCCCTGTGAGAAAAGCTTTACCTGAGAATGAAG
-CTAACATGAAGGAAAGATGAACAAATAAATGAAAAAAGAGAGATGAAAACAGAGACAGAGATAGTCCTTTAAATGCCATA
-TGAGCCCTGGATCCAGCCATACCTGAAGTCAGAACTACTCCCTGGACTTAGTTACATGAACCAATGGATGTTCATTAAGG
-CTTAGATCAGTTTGAACTGACTTTCTGTCACTCACAATCCAAGGCACCATGACGAATGCTTTAATTGTTCTTTTTCCACA
-TTAACACAGTGCTAATTAGAGAGCATAGATCTTTATTTTCTTCCTTTTTCTACAACCCCCACCTCCACCACCCAGAAGTC
-TTCTGATGCCTGGTTTTATCCTGTATTCATTCAGCAGACATTTATAGAGCACGCACCATATGCCAAGCATTGTCCACAAC
-AACAGTTTTAGAAAACTAATATGGCATAGACCTTGCCATTAAAAAATTCAGTCAATACTGCTTTCCTAAAATGCATAAAA
-GATCACAAGTTGGTCATTTTGTTTTCTCCAAATTTTCAGCTTTCAAAAAAAAATTTAACTCTCAATTTCAAAATGTTTGT
-AACTGTTACCCATAAATTTACTTTATTGCATATGAATAGTTTAATTTTATAATAGCATCAATTTTCACCAAATTTCTTCA
-TGTTTTTAATGTTGTTATCACATCTTCACCTTAGGAAACTTATTTAAGCTCTCTGAGCCTTGGTTTTCTCATCTGTAAAA
-TAAACGGGTAGAGGGTACTGATATGCCTGGTATCTTCTCAACCTGAAATTCTGACAGTTTGCTCACCTATGTTGACTCCT
-TTCTTCCTTTGAAACAATTTTTTCCTCTGCCCTATAGCAACTTCTATAACACATATCCCCCCCGCCCCCCAAACCCCAGG
-GAATTAAATGCATTTCTCAGAATTCAGGAAGACTGCCCTGCTTTCATTCCTAATGCCTGTAACCTGTTCTCTATGAAGCA
-GCCAAACCGATCATTCCCAACTATATATGAAACCAAACTCCACATTTTCCACTCCTATTTAACATCCAGTGGCATCCTAT
-CACCCTTGCAATAAAATCCAAACTCCTTATCTGATCCCTGTTGATATAGTTTGAATGTGTGTCCCTGCCCAAATCTCATT
-TTGAAATGTCATCCCCAGTGCTGGAGGTGGGGCCTGGTGGGAGGTGATGGGCTCAAGGGGGAGGATTTCTCATGAATAGT
-TTGACACCATCCCCTTGGTGCTGTCCTTGCAGTAGTGAGTGAGTTCCCATGAGATCTGTTCATTTACAAGTGTGTGGCAC
-CTTTCCCCTCTCTCTCTTGCTCTTGCTTTTGCCATGTGACATGCAAGCGCCTGCTTGGCCTTCTGTCATGATTGCAAGTT
-TCCAGAGGCCTCCCCAGAAGCAGATGCCAGTGTTATGCTTCCGCAAGCCAATGAAGCCTCTTTTTTAATAAATTACCCAG
-TCTCGGGTATTTCTTTATAGCAACACAAGAACAGACTAATACACCTGCCTTTCTCTTCCTCTCTCATCTTACTTCCTCTT
-CTCCCTCTTGCTCAATATATTCCAGCCACTCTGCCTTGAATTTGCCAATCTTGTTTCCCTTTCAGAGACTTTGGTCTTGC
-TGCTCCCTCTTTCCAGAATACTTTCTTCCCAGATCTTGACAAGGTTTTCTTCCACACTTCACTCAGGTTGCCCATTCAAA
-GATATTTCCTGACTCTACCCGCCATCTAAAATAACATCTTACTCCCACTCTTTTCCATACTTTGTTTTATTTTCTTCTCA
-GCTCTTATCACTTATTGAAATTATAATGTATCATGTTATAATGATTCTATCTTATATAATTAACATTTAATTTAATATAA
-TTTAATGTAAATTACATTAGCATAGAGAGTAGCAAATAGTAGAGGCTCAGCTGGCTTTGTGGAATGAATAATTTTACTCT
-AATTCTAATAATAGCCATCTGTTTAGCTTTGAGGTATTTATGACAAAAACCCACCTTAATCACAAGCCCTGCTTTTAACA
-TCTTTTGTTCGAATATATGGACAGTTTTTTTATCCAAGTGGATTTTAAGAAACTTGAAGATCCTACAAACAGACATCCCT
-TCTTTTGTGAGTTCTCACAGACTGCCATTAGCTAGTAGAATTGTAATTATATTTTCAGAAGGAACTGTATACTCTACAGA
-TTGAGAAAGGTTTTTCTTGCATTCTTAAAAGATTCAGTTAGGAAATGGCAGAATTGGTTTCTAAGACAACCTGTAATGGG
-TAGCATCTAAAACTTGGTTCACCAGGTGGAATCACAGGCAAGTGCTCAGAAATCGTGACATTAGACCCAGAGTTTAAACC
-AGAATGATGTGTTCTACTGATGAGGTCTTTCTGCTTTTTATCAAACTCATCCTATTTGGCCATTTGATTCTAGAAATATG
-GTCCAGGCAAAGGTCACAGTAAGCCGTACAAAGTGTTCCCAGTTCATTCAGAAAGAAGCTCATGGAAACTATCTCAGAGT
-CTTTAAGTGCCTATGCCCCAGGTTAGGAGATCAAGGACAAGAAATCTGGGTGTAACTCCTGGTGAACAGAATAAGGCTCA
-GAAGAGGAAAGGTCAAGAATCTCCCTCATATACATGTTTACTCAATGGTAACAAGAATGCACCAGATTTTTCACAACAGT
-ACTATTTGTAATAGCCAAAAATGGTGAGAATCCCCATGTTCATCAACAGTAGAATGGATAAATTATGTTGGAATTCATGC
-ATAGATTAGTGTACAAAAAATGAGAATGGATGGTTTACAACTGCATTGAATGATACAGATACATATTGTTGAGAGAAAGA
-AGACAGTCAACCAAACACAAAAGAGTACATACTAAATAATTCAGTCTAATGTTCAAAAAAACAAACAGACTTAATTCATG
-GTGTGAAAAATCAGGATTGTGGTTACCCTTAGGGAGTTAGTGACTAGAAAAGAACATGAAAGAGGCATCTGGGGTACTGG
-TAATGATCTAGTTCTATATTCGGGTCCTGGTTACACAGATGTGTTAACTACCAAAATTCATTCAGTTGTGCACTTATAAT
-ATGTGCATTTTTCTGTATTTATTTCATATTTCAATAAAAAGTTTACTAAAAAAATTTCCTCATGTGTTTTAGAAATTTTA
-AGCCAAGAAAATTAAGAGAGCCCTCTTTTGCAAGCACTCACAGATTGATATACCAACTTTCAAACTCATAAGAAGCATGT
-GTTGAAAAGTCGTTGACTCTTTAGCTGAACCTCACAAAAAGAACTCATTTGATTCTGAAGATGTCACACACCCTGAGTTT
-GTGAAAAGAGAAGGTTTGGCTTTCAGGATCCCAGAGCATATATTTTCCAAAATCTCACACTTTCCCTCTTGGTCATGATC
-ATTCACCAAAACACACACACACACACACACACACACACACGCACACACACACGTGTGTGTGTATGTATGTGTGTGTGTGC
-ATAACATACATATACATACATATATGTATATATATATAATTATACAATATATAATTTAAGCAATTACTGTCTTGTGTGCT
-GTATTCCAAGCTTTTCCTACATTATTAATAAAAAATTGTCCTCCATCTTCTAGAAATTTTCAGTCTACCTGAATGTTTAT
-CATATGTATAATTGAACATTTCCCTAAAGCATAAAGACTCAATCAATGGGCTTCTACTGCTCACTGAGATAATCACCTTT
-AAAAAGACAAATGTTTTTTCTGCTAGATCTCTTTATCTTCACTGTGGGTTCCTCTTATTTTATTTCTACATCAATGTTCA
-TATTTAACTTATTATTTTATCTTATTTTTAAATTTCTTTTATGTTGAGCCTTGATGAAAGCCATAGGTTCTCTCATATAA
-TTGTATGTGTATGTATGTATATGTACATAATATATACATATATGTATATGTATGTGTATGTACATAATATATACGTATAT
-GTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTACATAA
-TATATACGTATATGTATGTGTATGTACATAATATATACGTATATGTATGTGTATGTGTATTACATAATATATACATATAT
-GTATATATTATGTATATGTACATAATATATACATATATGTATATGCATGTATATGTATGTTATACACACACTAATTCCCC
-TACATCTCACCTGTATAAGCCATTTTTTTAGTTGCTATAAAGGAATATCTGAGGATGGATAATTTACTTTTTTAAAAAAA
-GAGGTTTAATTGGCTCACAGTTCTGCAGGCTCTGCAGGAGGCATGGTGCTGGCACCTGTTTGGCTTCTGGCGGCAGTTTC
-AGGAAGCTTAAAATCATGGTGGTGGGAAAAAAGTCCTGGTGGAAGGTGAAGGGGGGCTGATGTATCCTGTGGTGAGAATG
-GGTACAAGAGAGTAGGAGAAGGGAGAGATCCCGGACTTCTAAGGAAACACATCTTGTGTGAACTGAGCAAGAACTCACTT
-ATCACCAAGGGGATGGTGCTATACCATGAGGGATCCGCCCCCACGATCCAATCACCTCCCGCCAGTCCCCACTTCCAACA
-TTGAGTATTACATTTCAACGTGAGATTTGGAGGGGACAAACATCCAAACTATATCATGACCCTTCCATCTACCACCTTTT
-CTACCATCACCACCACCAGAACCCTGAACCCACATGCTATAACTCTGAATTTTTTCCCCACCACCACTATACTTTTTGGC
-AATTTTAATTTGATTTGATTGATAGGAAAAGATTCAGAGATGACAAACTCGGAAGGAAATGGCTATAGGCTTCATTCTAC
-CTACAGATAAATTTTGTTTGGTCTTCACAAGGTATTTGTTAAATTTCTGAATGTGAATGTCTTTAGACTGGGCAAATGGT
-CTCCAGTTAACTGTGGTTCCCCAGCACTTTTTGCTATTTAACTCCCAACATACTACACTTAGGTTTCCCAAAATCTCATA
-CCTTCCCTTTCTTATATTTTCTGCCAAGAATATAAGACATTTTGAGTTTTCCATCTTTGTTGTTGTTGTTTTTACTTTTT
-TATTTCAATAGGTTTTTGGGAAACAGGTGGTGTTTGGTTACATGAATAAGTTCTTCAGTGTTGATTTCTGAGATTTTGGT
-GCACCCATTACCCAAGCAGTGTATGCTGCAACCGATGTGTAGTCTTTTATCCCTCACCCCCCGCTCAACCTTCCCCCTCC
-CCAAGTCCCCAAAGTCTATTGTATCATTCTTATGCCTTCACATCCTCATAGCTTAGTTCTCACTTATGAGTGAGAACATA
-CAATGTTTGGTTTTCCATTCCTAAATTAGTTCCCTTGAAGTAATGGTTTGCAATTCCATTCAGGTTGCTACAAATGTCAT
-TATTTCTTTCCTTTTTATGGCTGAGTAGTAGTAGTCCATGGTATATATACATACATACATAGACACACACACACACACAC
-ACACACACAAACACACACATATATATACACATTTTCTTTATCCACTCGATGATTGATGAGCATGTGGGCTGGTTCTATAT
-TTTTGCAATTGTGAATTGTGCTGCCATAAACATGCATGTGCAAGTATCTTTCTTGTATAATGGCTTCTTTTCCTCTGGGT
-AGATACCCAGGAGTTTTCCACCTTTGAATTAATCCTTAGGAATCAAAAAACATTGCCCTTCCCCACTTGCCTACTGAAGG
-TCAAACAAGCCTCTTCTGGGGAGCAAAAGTCAAATGGAGAATATACATGTTTGTGTGACTGTTGTCCCCATGGTTTAGTG
-CTTCCAAGGTACCAGAGTTGATTGGTTCATTGAGGGGTATGTATGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGT
-GACAGAGAGAGAGAGAGAGAGAGAGAGAGAGAAAGCTAGATCTCAACCCTACTAGGGAAAGGATCAGATATGCTTACAAT
-GCTCCACCCCTGTAACTAAAATTGTCTTTGCATAAAAAGTCACAATTTAGAACTCCAAACTACTCATACCACAACATACA
-GAAGATTTACTCACCAAAAATCTCATGATACTTAAGAAAATATTATCTCTAAACATGAGCCAAGTTGGTGATGAAAAAGA
-AAAAAAAAACACAAAAAAACACAAAAAAACAAAAAACTCCCTGCTAAAAATCCAAACACTTTTGAGATTAGCAAGCGCCT
-TTAGAGTAGACCACCAGCATTGCCTTTATGGAAAACTCCTGGAAATGAAAACAACAGTCCCTTCATGAGATAATTAGGTC
-CTCCTTCCTCAACTCAATCTGAAAATATTCATTTAGAGACCAGACAGCCTGGTATCAGAAATTAAACCCCTGATTTCTGT
-GGCGTCTGATGGTTCAGAGTTCATGATTCTTGGTTAGCTGCATCAGTAACTGCTGTATGGACCTGTATAAAACCACTTGC
-CTACTCTAAGCCTTGGTCTTTTCATCTGTAAAAGGTTTGCAAACCAACTGATTCTATTTCTAAAAGTTACTTTTGGTTCT
-AAAATCCCATATTACAAAATGTGATATTCTATTTCTTAACCTGGGTAGTGATTGCACAAGTATTTGCTTTATAATTATTC
-TTTAAACATATATGTTTTATACAGCCTTCTAAATAAGTAATGTTTGACAATGTGTTGAAAGGGAAAAGCATTCTATCAGA
-AGAAGCCAGTCTAGTACCATTCTTGAATTCATAAAAGTAGGTGTGAAAATTAAATGTCAGAGGCAAAAAGCCAAGAGCAG
-ATTGAAGCTTGTAAAACTCCTGAGGCTTCAAACCATTTCAGTGATAAGCTAGAACCAAAGAAAGTAGAATGAATGGGAAC
-TTGCAGGGCAAGAAGGACTATTATAGGCTCATACAAATCCCCACAATGGTCCTAGGAGGAAATTGAAATCTAAAGGCTGT
-TACTTAATGGCCAAATTCTTAGCGAAATGTGACCATGGACATAGGAGACACTTTCTTCTGGTTTACAATAAGGAGCATCT
-TAACATTCTCAAAATGACTTGATTGTAAAACTTTTTCCTTCATTGCATTTATTTCTTTTGCCAAGCACCGTGCTAGGCCA
-CAGCAATATAGAGAAAACTAAAGTATGACTGCTTTCAAGGAACTTGCAGACTTAGAAGCCTCTATGTCATTTAGAAAAAA
-TTTCAAGCTTATTGCTTCTCCTGAGACCTCTGATCTCTTCTAAAAACATCCTACTCCCCCACTGCTGGACTGGCTCTCTG
-ATGTGCTTCAGAAAGCTCCCGCCTCAGGCCAGGCATGGTGGCTAACACCTGTAATCCCAGCACTTTGGGAGGCCAAGGGG
-GGCAGATCACGAAGTCAGGAGACTGAGACCATCCTGGCCAACACGGTGAAACCCCATGTCTACCAAAAATACAAAAAATT
-AGCTGAGCATGGTGGCATGTGCCTGTAATCCCATACTCAGGAGGCTGAGGCAGGAGAATTGCTTGAACCAGGGAGTTGGA
-GGTTGCAGCCGAGATCACGCCACTGCACTCCAGCCTGGCAACTGAACAAGACTCTATTTCAAAAAGAAAGAAAGAAGGAA
-AGAAAGGAAGAAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGAAAGA
-AAGCTCCCACCTTAGGGCCCTTGTACTTGCTATATCCTCTGCCACACAGTCTCTTCTCCCACCTTTACTTCTTTACTTGG
-CCCACTCCTTCTCACCATTCAGACCTCAACTTAAATGTCAGAGATGATTTTCTTGACTTCCCAGTTAAAAAAAATTTCCT
-CCTCCCCCACCTCAGTCATTCTCTACTTCATTTCTCAAAGTAATATTCTTCCAAATACTCCATATTTGAAAGTATCTTTT
-GCCGTAGATGTTTTTTAAAATGTATTTCTAGTCTTTTTTCTCTCAATATGAAGAACTTCTAGAAGACCAAAGGCAATGCT
-TTGTCCACTGCTACATCCCAGGGCTCATATCAGTGCCTGGCTCATAGTAGTTGCACACTAAATATTTTTAAATTTTATTA
-TTATTTATAAGTGAGTGAATAATATGAGGCAAACTCAAAAAAAGTTTTCCAAATGACTTTTAAGGTTCTAGTTAGTCTTC
-AGATTTATGTGGTCCTAAGTAGTGTCAAAAGATAAAAGTTTCAGGGAGCTGGGAGGTAAGAAAGAAGAGATGAATCCTGA
-TAGCATTCGTGCCTTCTTTGATGGTTGGGATCATAGAGGGATTCACAGAAGGTGTCATTAGTGGGAGTAGGAAAGATGCA
-TATAGTTATTCAATATACAGAAAGAGAGGAAGGCATTCCAGGTCAAGTGAACAACATAAGCAAAGGCACAAAGAGATAAG
-AATGCACAAAAAGTTGGTAGAACAGAAGACAAATGGAAGGGTAGCGTAATTTATGCAATGGTCATGAAAAGCTTTGGACT
-TTATTCTAAAGAAGACAAAGATTCGAAAAGTAAACCAGCCTCACTCATCTCATAGAACAATTAGACTGACAGCAGTGTGA
-GGAATGGGTGTGTCCATGAACACTTTGAAATTTTGGCCAAAATTGTACATGTATTTGTGAGCGTGTGATATTTGGGCATT
-TTACTGGGGAGAGAGAACCTATGGCTTTCATCAATGCTCAACATAAAAGAAATTTAAAAATAAGATAAAATAATAAGTTA
-AATATGAACATTGATGTAGAAATAAAATAAGAGGAACCCACAGTGAAGATAAAGAGATCTAGCAGAAAAACATTTGTCTT
-TTTAAAGGTGATTATCTCAGTGAGCAGTAGAAGCCCATTGATTGAGTCTTTATGCTTTAGGGAAATGTTCAATTATACAT
-ATGATAAACATTCAGGTAGACTGAAAATTTCTAGAAGATGGACAATTTTTTATTAATAATGTGGGAAAAGCTTGGAATAC
-AGCACACAAGACAGTAATTGCTTAAAGACAGGAAAGATAGGCAAATTCAGGTCCTAATGAGCTAAGAACGGATAGAAAAA
-GAGAAAAGTAGAAACCATACTTAGGTATGTTCTATGTGATTCCCACCTCTGCCTCAATAATCCATTCTTTCGTGGTGGGT
-TTCTCTTTCCTGCTAAGCAGTTCCTCCCACACCCCTATAGATGAACAGTCAATTCTTTGGTCATACTTGAGCCAGATCTC
-TGGTGATATAATTGCCAAAATGGCTTGACATTTAAAATATCAGAGATGACCCAGCTGCCCTAAGTGATAATAATGCTATT
-ATAGTGGGGGTAGAAACAGCCCCAAAGGAGAGAAGAGTGGGATACTAATGATAAAGTTCAGAAAAATAAGAATTAAGATG
-AGATAATGAACAACAGGGAGACTCGATCCAAGTCAAGTCAATGGTCATCTCACCATGGGGACCGATTGGAGAAAAACTGA
-AGTTAAATAAGGACGCTGGCAAGAGAAGACAACAGGCAGTGGAGTCAGATGGCCTCATCCTTGTAGAAGCTATGCACACC
-CATTTGAAGAGGAGGTAGTTGGATTAAAGGAATTGGCTCTAATTCAGTAGGAAAAAGTTGCAGGAGCCAGGAGGCTGAAA
-GACGCCTGCCATCTGGAGAAACTGGGGAAGGAGAATTGGAAGTCAGGCAGATCAGGGGTGGGGAAACGGTAAGGAAGAAA
-GGCTATTTGGCAGGAATACTTTGGGCGGGGTCAGCTTCTCCCACGATGCTCTTAATTCAGGGATGTAACTTGCACACTCT
-TCAGTAGAAGCATCAGCAATAAAAGAAAATAATTTTATTTCCAAATCCTAATAAATCTATATTTTGAACTGATATTTAGG
-AAAACTGTCTTTTAATATGTAAATGTGTTTCACATGCAATCCGTTTGGAAAAACACCAAATCTCCAAAATCTTTAACAGC
-AATTCTACAAAGTATAATATATTTATAATTTTTTGGTTGGGGTAAAATAAATTATACCAGATTTTTCAAGATATAGAATT
-TCTTATAGGAGAAGCAGAATGCACTAGAAGTCATTGAAACACTGGCAGGACTAAGTAGAAAAAGTTAAGGTTAGTAATGG
-TTACAGGTACAAGCTCTTAAATGAGAACACCCAAGATCACATCCTGGCTCCACTAGTTTACTAATTGTGTGATCTCTGGC
-AAGTTCATAAACTCTATAAACTTCAATTTCCTCCACCATACAATGGGATTAGTGCCCATGCAAGGAGTTATTTTTTTTTT
-AACTTTTATTTTAGATTCAGGGAGAACATGGGCAGGTTTGTTACAAAGGTATATTGCGTGACATTGAGGTTTGGAGTAAA
-ATTGAACCAGTCACCCAGGTAGTGAGCATAGTAACTGATAGGTAGTTTTTCAACCCCTGCCCCCTCCCTACATTTCCCCT
-CTTATATTCTCCAGTGTCTGTTGTTCCCATCTTTATACCCACGTGTACCCAAAGTTTAGCTCACACTTACAAGTGAGAAC
-ATGTGGGATTTGGTTTTCCATTTCTGCATTAATTCACTTAGGGCAATGGTCTCCAGCTGCGTCCATGTCACCTCAAAGGC
-CATGATTTTATTCTTTTTTGTGGCAGCATAGTATTCCATCATATATATGTACCACAGTTTCTTTATCCAATCTATCATTG
-ATGGACACCTAGATTGATTCTGTCTTTGCTACTGTGAATAGTGCTGCAATAAACATACAGGTGCACGTTTTTGGTAGAAT
-GATTTATTTTCTTTGGGGCATATACCCAGTAATGGGATTGCTTGGTTAAGTGGTAGTTAAACTGTTAGTTCTTTGAGAGC
-TCTCAAAGAGTTATTATAAGGATTAAAATTAAAAATAATAATGCTTGTAAATTATTTAACACAGTGCCTCATATATTTTG
-GGAGCTAAATAATTATTATCTGTCATTTCCATCATCATTATTATCAGTTAATTTGAGAGCCTTCCAGAATTATTTGCGGA
-CAGTACTGATCAAGATTGTGGTTTTTCATCTGCTCCTGACTTGCTATATAAACTTCACCAAATGATTCAGCTACAAAAGA
-GGAACAGGGTCTATGTCCATGTTGAATCTCAAGAATTTAGATCATAGACATTATTGTTATTATTAACACTCTACTTGCAA
-ATAGGAGCGTTGGTCTCTTGTGTCAACTCTACAACAAACTCACCACAGGGCTAGACAAGCCACACATCTGTTCTAGGTCT
-CTGTTTCTTCATCAGCCAAGATGGATAAATTACACAATCTTCAACGTTCATCTGAGTTCTAACATTCTATGATTCTGCAA
-CTGCTGTTTCAAATGTGGCACTTGTGAGTTATAAACAACATAACTTCCCTTCACCTGCATTGGACTACACCTATGGGGAC
-TGAAAGTGCAGTATGTGGTGGGTATGTGACCTTCCACAGGTAAGAGATGAGTTGCCCTTCTCTGCCTGCATCCTCACAAG
-AGCCATTTTGTTCTGCTCCTGTCTGACTGGCTCTCCAGTAATTTTCTGCAGCAAGCTCTATCCTTATCCCAGCCAGTGAG
-AGGAAAATGAATTCACCCAGCAGTCCTATGCATCCCTTCAGATGTTGCAGGGAGAAAGCACGCCAGGCATTTCACTGTTA
-ATTATCAGCAGCCTGGCTGCTATGGCACCTTGCTGTGCCAATTTGAGAGATGAGATTCTTTACACTGCTTATTAGGCTCA
-GCTAAATAAATATTACCCAGCATTAATGTTGTCAGAGATACAGTCTGAATTCAGCTCCCTTGAGTGGCTGTTGGTACCCA
-AGCTTTTCACCATCAATTTTTCTTCCTGTACCTCCTTCCCTTACCAATCCACCACTAATCTCTTTCTCTCCTCCCTGGAT
-GTTCAGCTGGATTCTGACATCAGAGGACTGAAATAATATCACCGATTTAGCTCCTTTGCTTAAGGTTATCAAATACTTGT
-GCTGCTACTAGATTTAAGGGCCCCATTATTAGTTACTTTGTAGTCTTGTCGTAACAGATTTCAAATTTCTGAAGCATGTA
-TTTTGAGTTAGAGCCCGCCCTCTCCCCCAGCAAAGTGAGTTTTGAAAGACTGAAGCCCTCTGGCTACAGCAATTGGTTTA
-AAGGTGAACCCTAATAAGGCCAATCATGCCCCCAAAAGAATGAATTTCAGGATTTATTTTAGCTATTTAAAAAACAGAAG
-TTTTCTTCTTGGCTGGATGTTGAATCTAGAAAATATAGCCCCAAGGAACCACTGTTAGCTATTTTGCAACCATGAAGGTA
-AATGCTACCCATAATGGAGACGACATATAGTAAGTGGTGGAAAGAATTAGAGAAAAGAAACCCACACCTGTTAAGAGCCT
-AGATCAAGCTTTACCTAAAGCCAAATCAATCTTTGGACATTTCAGTTTGAATCCTTATGGCTCTCATATTATTTAATTCT
-GAGTTGGAAATTCTAATACTTTCAGCTACATAGATGTGTTTGTTACAAGGTCTCCTGGATGTGTCTATTTGGAGCAAGTG
-TAGGTGAAGCCCTGCCCACATCACTTCAGATCTTACCACTATAATGCTCTCCTACCTGAATTCCCACTCCCGAGGGCTAA
-CTGTAGTGATTTTGCTTCAGCACAAGATAGTACAGAAGTGGTGGGTAATAAAACACCACACCGAGGCAGCCCTTAATAAA
-TGATTGGCAGCAGTTGGTGAGTAAATATGCCAGCTTCTTTGCTCATTTTGTGTAATGCTGAGACACATGTTCTATACAAG
-CTCTCAGAGTTCCTCAGGGGGATTGACCCTAGTTTGTTTGATAACAACCCTTCATTGGCTGCCTTCTTTTCTCTGTCCCA
-TTTCTCTATTGGTTTGTTGGTATCACCTTCTGAGTCACTTGTACTTGGGTCCACAATGAATTTATACAAAGTAACATCTG
-CTTATACCTTTTAAAATGCACCCTACAGGGAGTCACTTCCAAGATGGTTGAATAGGAAGAGCTCCAGTCTGCAGCTCCCA
-GCGAGATCGACACAGAAGATGGGTGATTTCTGCATTTCCAACTGAGGTACTTGGTTCATCTCAATGGGACTGGTTGGACA
-GTGGATGCAGCCCACAGAGGGTGCGCTGAGCAGGGTGGGGCATCGCCTCACCTGGGAAGCACAAGGGCCAGGAGATTTTC
-CCTTTCCTAGCTAAGGGAAGCCATGACAGGCTGTAGTTGGAGAAATGGTACACTCCTGACCAAATACTGTGCTTTTTCCA
-CAGTCTTAGCAACTGGCAGACCAGGAGATACCCTCCCGTGCCTGGCTCGGCAGGTCCCATGCCAACAGAGCCTTGCTCAC
-TGCTCATGCCGAAGTCCAAGATTGACCTGCAATGCTGCAGCTTGATGGGGGGAGTGGCATCTGCCATTGCAGAGGCTTGA
-GTAGCTCACAGTGTAAACAAAGAGCCCAGGAAGCATGAACTGAGCAGAGCCCACCAAAGCTCAGCAAGGCCTACTGCCTC
-TACAGATTCCATCTCTGGGGGCAGGACATAGTAGAACAAAAAGCAGCAGACAGCTTCTGCAGACTTAAACATCCCTGTCT
-GACAGCTCTGAAGAGAAGAGTGGTTCTCTCAACATGGCGTTCGAGCTCCAAGAACAGACAGACTGCCTCCTCAAGTGTGT
-CCCTGACCCCCGTGTAGCCTGACTGGGAACACCTCCCAGTAGGGGCCAACAGACACCTCAAAAAGGCAGGTACCCCTCTG
-AGATGAAGCTTTCAGACGAAGGATCAGGCAGTACTATTTGCTGTTCTGCAGCCTCCGCTGGTGATACTCAGGCAAACAGG
-GTCTGGAGTGGACCTCCAGCAAACTCCAACAGACCTGCAGCTGAGGGGTCTGACTGTCAGAAGGAAAACTAACAAACAGA
-AAGGAATAGCATCAACATCAACAAAAAGGACATCCACACCAAAACTCCATCTGTAGGTCACCAACATCAAAGACCAAAGG
-TAGATAAAATCACAAAGATGGGGAGACACCAGAACAGAAAAGCTGAAAATTCCAAAACACAGAGTGCCTCTTCTCCAAAG
-GATCGCAGCTCCTCGCCATCAAGGGAACAAAACTGGATGGAGAATGAGTTTGACATGTTGATGGAAGCAGGCTTCAGAAG
-GTCGGTAATAACAAACTTCTCCAAGCTAAAGGAGCATGTTCTAACCCACCACAAAGAAGCTAAAAACTTTGAAAAAAGTT
-AGACAAATGGCTAACTGAAATAAACAGTGTAGAGAAGACCTTAAATGACCTGATGGAGCTGAAAACCATGGCACAAGAAC
-TTTGTAATGCATGCACAAGCTTCAATAGCCAATTCAATCAAATAGAAGAAAGGATATCATAATTGAAGATCAAATTAATG
-AAATAAAGCAAGTAGACAACATTAGAGAAAAAAGAGTGAAAAGAAACAAAAAAAGCCTCCAAGAAATATGGGACTATGTG
-AAAAGACCAAATATACGTTTGACTGGTGTACCGGAAAGTGATGGGGAGAATGAAACCAAGCTAGAAAACCCTCTTCAGGA
-TATTATCCAGGAGAACTTCCCCCTAACCTAGCAAGGCAGGCCAACATTCACATTCAGGAAATACAGAGAACACCACAAAG
-ATACTCCTAGAGAAGAGCAACCTCAAGACACATAATTGTCAGATTCTCCAAGGTTGAAATAAAGGAAAAAATGTTAAGGG
-TGGCCAGAGAGAAAGGTCAGGTTACCCACAAAGGGAAGCCCATCAGACTAACAGCGGATCTCTCGGCAGAAACCCTACAA
-GCCAGAATAGAGTACGGGCCAATATTCAACATTCTTAAAGAAAATAATTTTCAACCCAGAATCCCATATCCAGCCAAACT
-AAGCTTCATAAGTGAAAGAGAAATAAAATCCTTCACAGGCAAGCAAATGTTGAGAGATTTTGTCACACCAGGCCTGCCTT
-AAAAGAGCTCCTAAAGGAAGCACTAAACATGGAATGGAACAACAGGTACCAGCCACTGCAAAAACACGCCAAATGGTAAA
-GACCATTGATGCTAGGAAGAAACTGCATCAATTAACTAGCAAAATAACCAGCTAATGTAACATTATAATGACAGGATCAA
-ATTCAAACATAACAATATTAACCTTAAATGTAAATGGGCTAAATGCCCCATTTAAAAGACACAGACTGGTAAACTGGATA
-AAGAGTCAAGACATCAGTGTGCTGTATTCAGGAGACCCATCTCACGTGCAAAGACACATATAGTCTCAAAATAAAGGGAT
-GGAGGAAGATCTACCAAGCAAAAGCAAAGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGTAGGGGTTGCTCTGATACA
-ACAGACTTTAAACCAACAAAGATCAAAAGAGACAAAGAAGGCCACTACATAATGGTAAAGGAATCAATTCACAAAGAAGA
-GTTAACTATCCTAAATATATATGCACCCAATACAGGAGCACCCAGATTCATAAAGCAAGTCCTTAGAGACCTACAAAGAG
-ACTTAGACTCCCACACAATAATAATGGGAGACTTTAACACCCCACTGTCAATATTAGACAGATCAATGAGACAGAAGGTT
-AATAAGGATATCCAGGACTTGAACTCAGCTCTGGACCAAGCAGACCTAATAGACATCTACAGAACTCTCCACCCCAAATC
-AACAGAATATACATTCTTCTCAGCACCACATCGCACTCATTCTAAAACTGACCACATAGTTGGCAGTAAAACACTCCTCA
-GCAAATGTAAAAGAACAGAAATCACAACAAACTGTCTCTCAGACCACAGTGCAATCAAATTAGAACTCAGGATTAATAAA
-CTCACTCAAAACCACACAACTACACGGAAACTGAACAACCTACTCCTGAATGACTACTGGGTAAATAACGAAATGAAGGC
-AGAAATAAAGATGTTCTTTGAAACCAATGAGAACAAAGACGCAACATAGCAGAATCTCTGGGACACGTTTAAATCAGTGT
-GTACGGGGAAATTTATATCACTAAATGCCCATAAGAGGAAGCAGGGAAGATCTAAAATTGACACCCTAACATCACAATTA
-AAAGAACTAGAGAAGCAAGAGCAAACAAATTCAAAAGCTAGCAGAAGGCAAGAAATGACTAAGATCAGAGCAGAACTGAA
-GGAGATAGAGACACAAAAAACCCTTCAAAAAAATCAATGAATCCAGGAGCTGGTTTTTTGAAAACAAAATAGATAGAGCA
-CTGGCCAGACTAATAAAGAAGAAAAGAGAGAAGAATCAAATAGACACAATAAAAAATGATAAAGGGGATATCATCACCGA
-TCCCACAGAAATACAAACTACCATCAGAGAATGCTATAAACACCTCTATGCAAATAAACTAGAAAATCTAGAAGAAATGG
-ATAAATTCCTGGACACATACACCCGCCCAAGACTGAACCAGGAAGAAGTTGAATCTCTGAAAAGACCAATAGCAGGTTCT
-GAAATTGAGGCAATAATTAATAGCCTACCAACCAAAAAAAGGCCAGGACCAGACGGATTCACAGCCGAATTCTACCAGAG
-GTACAAAGAGGAGCTGGTACCATTCCTTCTGAAACTATTTCAATCAGTAGAAAAAGAGAGAATCCTCCCTAACTCATTTT
-ATGAGGTTAGCATCATCCTGATACCAAAGCCTGGTAGAGACACCACAAAAAAAGAGAATTTTAGGCCAATATCCCTGATG
-AACATTGATGCAAAAATCCTCAATACAATACTGGCAAACAGAATCCAGCACATCAAAAAGTTTATCCACCATGATCAAAT
-CAGCTTCATCCCTGAGATGCAAGGCTGGTTCAACATACACAAATCAATAAACGTAACCCATCACATAAACAGAACCAACA
-ACAAAAACCACATGATTATCTCAATAGATGCAGAAAAGGCCCTTGACAAAATTCAACAGCGCTTCATGGTAAAAACTCTC
-AATAAACTAGATATTGATGGAATATATCTCAAAATAATAAGAGCTATTTATGACAAACCCACAGCCAATATCATACTGAA
-TGGGCAAAAACTGGAAGCATTCCCTTTGAAAACCAGCACAAGACAAGGATGCCCTCTCTCACTACTCCTATTCAACATAG
-TATTGGAAGTTCTCACTAGGGCAATCAGGCAAGAGAAAGAAATAAAGGGTATTCAATTAGGAAAACAGGAAGTCAAATTG
-TTTCTGTTTGCAGATGACATGATTGTATATTTAGAAAACCCTGGCTGGGCACGGTGGCTCATGCCTGTAATCCCAGAACT
-TTGGGAGGCCAAGGCAGGTGGATCACGAGGTCAGGAGATTGAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACT
-AAAAATACAAAAAAAATTAGCCAGGCATGGTGGCAGGTGCCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATG
-GCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCGGAGATCGCACCACTGCATTCCAGCCTGGGTGACAGAGCGAGACTCC
-TTCTCAAAAAAAAAAAAAAAAAAAAAAGGGAAAAGAAAAGAAAACAAAACTCCATCGTCTCAGCCCAAAATCTCCTTAAG
-CTGATAAGCAACTTCAGTAAAGTCTCAGGATACAAAATCAATGTGCAAAAATCACAAGCATTCCTATACACCAATAACAG
-ACAAACAGAGAGCCAAATCATGAGTGAACTCCCGTTCACAATTACTACAAAGAGAATAAAATACCTAGGAATCCAACTTA
-CAAGGGATGTGAAGGACTTCTTCAAGAAGAACTACAAACCACTGCTCAACGAAATAAAAGAGGACACAAGCAAATGGAAG
-AACACTCCATGCTCATGGATGGGAAGAATCAGTATCGTGAAAATGGCCATACTGCCCAAGGTAATTTATAGATTCAATGC
-TATCCTCATCAAGCTACCACTGACTTTCTCCACAGAAATGGAAAAAAACTACTTTAAGGTTCATATGGAGCCAAAAAAGA
-GCCCACATAGCCAAGACAATCCTAAGCAAAAAGAACAAAGCTGGAGGCATCATGCTACCTGACTTCAAACAATACTACAA
-GGCTACAGTAACCAAAACAGCGTGGTACTGGTACCAAAACAAATATATAGACCAATGGAATAGAACAGAGGCCTCAGAAA
-TAACACCACACATCTAAAACCATCTGATCTTTGACAAATCTGACAAAAACAAGCAATGGGGAAATGATTCCCTATTTAGT
-AAATGGTGCTGGGAAAGCTGGCTAGCCGTACATAGAAAGCTGAAACTGGATCCCTTCCTTACACCATATACAAAAATTAA
-CTCAAGATGGAGTAAAGACTTAAATGTAAGACCTAACACCATAAAAACCCTAGAAGAAAACCTAGGTAATACCATTTAGG
-ACATAGGCATGGGCAAAGACTTCATGACTAAAACACCAAAAGCAATGGCAACAAAAGTCAAAATAGACAAATGGGATCTA
-ATTAAACTAAATAACTTCTGCACAGCAAAAGAAACTATCATCAGGGTGAACAGGCAACCTACAGAATGGGAGAAAATCTT
-TGCAATCTACCCATCTGACAAAGGGCTAATATCCACAATCTACAAAGAACTTAAACAAATTTACCAGAAAAAAATAAACA
-ACCTCATCAAAAAGTGGGCAAAGGATATGAACAGACACTTCTCAAAAGAAGACATCTATGCAGCCAACAGACAGGAAAAA
-ATGCTCATCATCACTGGTCATCAGAGAAATGCAAATCAAAACCATAATGAGATACATCTCATGCCAGTTAGAATGGCGAT
-CATTAAAAAGTCAGGAAACAACAGATGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGAGTGTA
-AATTAGTTCTACCATTGTGGAAGACAGTGTGGCGATTCCTCAAGGATCTAGAACTAGAAATGCCATTTGACCCAGCCATC
-CCATTACTGGGTATATACCCAAAAGATTATAAATCATGCTACTATAAAGACATATGCACACCTATGTTTATTGAGGCACT
-ATTCTCAATAGCAAAGACTTGGAACCAACCCAAATGTCCATCAATGATAGATTGGATTAAGAAAATGTGGCACATATCCA
-CCATGGCATACTATGGAACCATAAAAATGGATGAGTTCGTGTCCTTTGGAGGGACATGGATGAAGATGGAAACCATCATT
-CTCAGCAAACTATCACAAGGACAGAAAACCAAACACCGCATGTTCTCACTCATAGGTGGGAGTTGAACAACGAGAACACA
-TAGACACAGGGCGGGGAACATCACAAACTGGAGCCTGTCGGGGGGTGGGGGGCTGGGGGAGAGATAGCATTAGGAGAAAT
-ACCTAATGTAAATGACGAGTTGATGGGTGCAGCAAACCAACATGGCACATGTATACCTATGTAACAAACGTGCATGTTGT
-GCACATGTACCCTAGAACTTAAAGTATAATAAAAAATAAATTAATTTTAAAAAATGCACCCTACAAGTTGTGGCTTACAT
-GATTTCCACCGTTCCACCCCCAAATAGACTGATGCATACCCAAACCATTTGACATAAACTCAGCCTAGAAAAAAGCTATG
-AATTCAAATCCAAGTAAGCCAAAGTGTTCTTTCCTGTCAGTGCCAGCCAAGCAGAGGGTTATGGACTAGACGGAAGATTT
-TAGGAGAGAAAGGGAAGCAAAAGCATGAACAAGCCAAGGTATGGAGGATGCTCATTCATCCTCAGGCTCCAGAAGTGGCA
-GCGAGCTGTCTGGATACTCCACTGAAAGTCACAGTCAATGAGGTTATTAATCTGGTGGTCCTAAAAGATGAGCAGCACAG
-ACACCTTGAATCTCTGGATACACTTCCCCCTCTGCATAGCCTCTCTCTCAGTTCCTAAACCCTCCATGCTAAGAAAAACA
-TCACCAGGCATGGGGCTTTGCCAGAAACGTTCACTCGAAACAGTACCTGGCAAATGAAAAATGCACTTTTAAATTATGTA
-CTTTCCGACTAGTCTTCCTAATGGTATGTTGACTATTATTTACATGAAAAATGTCAAAATGTGGATTCCTTTGTTTTATT
-TTTATTTGGGGCATTTTAAACAAAACATTCACTTTAATACTCATGGAGAAAGGTCTACTTCTCTTTCATCTTCCTCTCTG
-TCTTCCAACCAAAACTCCTTGCCAAAGAACACGGATGGCCAACAGGACTTGCACTGACCACATCGCACTCCTACTAGAAA
-ATTACGGATGGAGGAACCAGCAATTTCTAGATGAAATGGCCCTATTTCCTCATTTTACCACTAAGGATAAAGAAGGATCA
-TGCCTGTAATCCCAGCACTTTGGGAGGCTGAGGCAGGCGGATCACCTGAGGTTGGGTGTTTGAGACCAGCCTGACCAACA
-TGGAGAAAGCCTGTCTCTACTAAAAATACAAAAAATTAGCCAGGCATGATGGCACATGCCTGTAATCCTAGCTGAGGCTG
-AGGTAGGAGAAGCACTCGATCCCGGGAGGTGGAGATTGCAGTGAGCCATGATCACACCATTGCACTCCAGCATGAACAAC
-AAGAGCGAAACTCCGTCTCAAAAAAAAAAAGAGGGCAAAAAGTCTTCGATGACAAGCCTGGACAGGACTTTAACAGTATA
-TGCTCCAATTTATCCCTGTCACAGATGAGGAAACTGAGGCACAAATCAGTGAAATGCTTTGTTCAAGACTTTACAGCTAG
-TTAGTGACAAAGTCGGGGCCAGAACTAAGGAATCTTGATTCCATGCCCTCTTCATACTATCCTCGTCAATTCTGGTTTAA
-GTTTTTCACTTGATTTGTATGTTTGCTTTATCTTAAGCTCATATTTCAACCCTATAACCTATCTTGCATATGATGTGGGT
-TGTTTATTCTTAGAAAAATCTAAGATTATTCCACTGTATTAGTGGCCTTGCCTAAATAGATGCATTGGGGAGAAATCCTC
-CCACATAATGAATTTTGTCACTGAGACATTGCAAGAAGTAGCCCATAGCCTTTTCTTATCCTTTTAGAAACAGCCTGAAA
-AGTTCGATTATCCTCCAGATTCAACCTTAGTCCATTTGGTTTCATGCTCATTCCTAATCCCAGACCAATTCCTGGCCCTG
-AGCCCAGGTACTGGTATGGCCTGGAAAATGCCAGAAGCCATATGGACTCCCCAGGCTACCTCCTGGATGAGGATGGATGG
-CACACACCGAGGAACCAACTCTTTCCAAGAGATAGAACAGATGGCATTCCAGATATGAATATGTATAATGTAGACTGCTA
-AGTTGTTAAATAAGTATGTATTTTTAGGTGGATTCATGAAAATCAAGAATTTTATAACTAAAATGAAAGCCAAGCAAATG
-AAACCACAAACACCATTGAAAGCTGTGCATTACTCCATGTTTGTTGGTATTGGCCTCCATAGCATGCTCCAACCTCTAGA
-GAAACCACTCGAGAAGAACCAGGAAGAAATAATTCAAAACTGCGGCAAAGGATGTTAACTTCAAGCTTCCATGCTCTAAG
-ACCCTAGGACGTCCATGGATGGCAGAATTAGTATTCAGAAGAGCAAGGAGTGGGCTGGATTTTTCCTTGGCTTTACCACC
-TTTCTCTATGTCCCTTTATTGAAAATTCCACTCTATCACACCCCCAACTCAAATTCCTTATGCTTTAATTTGGCTGCCCC
-AAGAACAAGCCTAAGAGGCATAAGAATAATGCAAGTCATTGAATCAGTAGAATCAGTCAAGAAGATCAGCTTCCACAAGC
-TTCCAGTACAAATAGTACCCTTCAGAAGACTTTAAGCTCTTTGCTCCGTAATAATACTACATTACAGGTATACTTATTTC
-CAGTTTACAGAAAATTTTAACAATCCCATGTGAAAAAATAGAACATGAATTGTTACCCCCATTTTTACAGAGAAGAAAAT
-GAAGTCTTGGAGAGGTTAAACAACCACTCAAGAATGCACCAATGGTAAATGTGCCACTGGGACTTGAAGCTAAGACTCTG
-ATTCTGTCCAGTAATGCATCTGATTTGGCATTCACCAATGAACCTACAGCCAAACGGGCCATCACTGGAGAAGTCCAACT
-GCTACTTGAAAAGCCTAATCCATGGATTAACAGATTCCAATGAGTTAGAACATCAAAGGGTAGAATAGGATATATTTCCA
-CAATCTGGGAACATTCCAAATAGAGAAACTGGATTCTTATTTATCCATTATTGATGCAAGTCCTTAACTCCTTCCTGTAT
-CCATGGGACCTTTTGCAATCCTTCACACTAGAGACAGAATACACTCTCCTGCTCCATTAATGATAGGCAATGGAAAGGTG
-ATCTGCTTCATCCAATGAAATGTTAGCAAGTGTGATGCAAGCAAAGACTAGAAATTGACTTACTTGGTTGTGCTTGTCCT
-CTTGTGCTCCTATTATCTGCCCACAGTAGCTCACTGAACCAAGGGAAATGAGAAACATGTGCATAGATCTAAACTTAACT
-CACTGCTTTGAGACAAGCACATCTGAGCCGAGCCTAGATCATCCAGCATGCAGCCAACTGCTGACACATGAGCAAGAAAG
-AACATATATTGTTATTTGAAGCTATTGAGTTTGGGGCTGACTTGTTTTACAGCAATAGCTGACTAATACACTTGCTATAT
-TTCTTTCATCTTCCTACTTCCACTTCAATGCAAATGGACTCTGCCCCTTGTTATTATTACTGTCTGTTTCTTTCCAGGCA
-GCAAATCACCACCTCTTTTGATGTCCTAAATTATCAGCAGTCTCAATATCAAGATCTACATAGTCATTAATTTACAAAAA
-GCTATTATTAGGAAGTGAGATGGTAGTAAAAATAAGGTAGGTGAAGTTATACCCACAAAATAGAATATCGGGGTGCCAGA
-TCAATATTTAATAAATGGTTGAAAACTTCAAACATTTAAAGATTATTTTGTGGTTAACAAGTTAGAGAAAACACATTGCC
-ATTAGACGACATTTCTTATGTGCTTCTTTACATAGTGACCTGGTGCTTGATGTGCTGTGAAGACAGGATGCTCATCGCCT
-TATAGTTTATCGATAAACACAGGCAATACAGAGGCAGGCAGCTAGTAGAAAATATAGATAGGTGTTGGATAAATTGATAA
-TAAAAGGGTAAGATTAAGTGTTTTGTTTGGTCTTATTTTACCATTTCAGATTTGCTTGATTATTAATTTCCAAAGCCCCA
-GAAAACCCAATTCTCCTGCATTCCTAGAAATCGTGGCAGGTTTCCATCTATAGAAAATTACATGCTTTTCTAGGTGTTTC
-AGAGGTTTAAGTTGCTTAGTTCTTTAAGAAACTGCTCCAAGCTGGGGTGAGGGGAGAAGAGTGTACCAGTATCAACCCAC
-TTACACAAAGAAGGACTTGACTATTCATCAGGTATCTAGGGACAATTTCCTGAAGATGATGGAAAGAAGACAGTGCCTAA
-CACTTGGATGGTAAGCACTTCAACAGTATTTACTAAATTAAAGAAGGGAGGAAAATAGGAACTAGTCCTGCCTTACCCAT
-CTTTCCATTCCTTCCGCTTTGTGTTTTCATCTCAGTTTTGTCAGATCCATTTCTCTGGCCTCTCCAACTCTCAAAGTTCC
-AGCCCTGTGATTCAGCCATCGCAACTCTCCCAAAGTGTTCATTGATCACATTTCCTCCCTAGTCATTGGCACAGTGCTTC
-TTTCATATTTGATTCTTGACACCTGCAGGTTTTCCATTTTGGCTCTCAACTTTTTTTATTATACCCCAGTGGGCTTTGTT
-TTGTACATATCCCCCACCCTGAGTGTAGCCTCAGAAAGGTGGACTTTGGTTCTCAATTATAAGAATATATATATTCTTTC
-TAATAGCATCATGCTGGGCACTGTAGTATCCAATCCTATAGTGCTTACAAGGCACTTTATTCCACACTAACTCATCTGAC
-CCTCACAATGGTGTTCTCAGTTGGATAGGATGACCCTAACTGTTCAAATGGGGACTCAGAGTACAAAGGAGGTCACAGAG
-TTGGTATATAGAGAAACCAAGACACAAACCCAGTTTTCCTGTCTCTAACTCTGGGAATTATTTCTTTGCATCATGCTATT
-TTAAAAAGTACTAGCACTGCTGAAATTCTTGGACTTTCTTTATAATACACAACCTTAGAAGAGAAAGTAAATCATTGCTA
-AGGAAAGGAACTTTTCTTAGCTCAAAAAACAGCCTCAAGAGGACTGAACCTCTTAGAATGCTCGTCTTTGCCCAGATGAT
-CACCAGCCACACTCCAACATATTGATACAGATTTTATGATTTTATAATTTTGGGTTCAGTTGGCAGGACTCACTCTTCCA
-AAAATAGCTTTGGCCTTAATGGGTAGGATGAGCTGCATTACAAAGGCCCTCAACTCCATAAAATTTGGCATCCAGCCAAG
-CCTTCAAAGGTGACTAAAGAAGAAATATCAAGAAAGACCAGAGGTTGGTACTGCCTTGTGAACCTCTCAACATCTATTGG
-AACTTATCAATTTTATAGATATTCACATTCCAAAGCAAGGAGCATTTGAGCTTTTAGAGAGATTAGAAGACCCTAAAAAG
-TGCATCTCGCTCAAAAGGTGTCCAGCTTGTCCAGTGGTCATTGTCCAATCTGATTCCATTTCAAAATCATTTCCATATAA
-CCAGCTTGATGGTGAGATTCTTGAAAAGTTCTAGACCAGGAGGAGGAAATGAGGGTTTGGTTCCTGGCTGTGCCACTAAC
-CGACTGCATGAAGTTAAGCAAATTATGGGGCCTATTCCAACCTCGTTCTTTTTACAGGTCTGACACCTACAACGTGTCAG
-ACACTGGGAATAGAACAGTCCACAAGACAAAGTCCTTGCTCTAAGGGAACTTACCTTCTAGGGAAGATATATGATAAACC
-AATACATAAATATATAATAAGGACATGAAAGCAATAGAGAACAAAAGTGCTGTGAAAAAGATGCTGTTTTGGATAGGATG
-GTCTTTTGAGCAGTGAAATAAAATAAATATCTGAGGGAATAGAGTTCCAGGTGGAGGGGACAGCAGGAAGGCCATGAAGT
-TGGGGTGCACCTGGCATCTTCAAGGAACAGGGAGAAGGCCAGTACTTCTGGAGCAGAGGGAACAGCCGGGAGAATGGAAG
-GCAAGGAGGTGAGCGATAACAGGGGCCCAATCCTGGAGGGTCTTTTAGCTTTGGTAATGACTTTGGATGGGAAGGCAGTG
-GGGGAATCTGAGCAGATGAGGGTATGAACTGACTTAGGTTCCCTGAATGTGACCTTGGCTGCTGTATGAAGGACGGGCAG
-CCATTTCCTCATCTGATAGCAAACTGGTATGGACCAGAGAAACGAGAAGCTTCCCACTGCCACTCTAAGAGCTGAGATTC
-CGAGTCATATGTTTTACTGAACAAATTACTGCCCATCTTGGTTGAAGCCCATCGGGGCCTGAGCTAAGTCTTTGATCCCA
-GAGGCCAAGGCAGCACCATTCCTCGCCATTAGCCCATGGCTAGTGACCCGGGAGGTACAAAGTCAATCCTAGCTACAGCA
-GGAACTCCTGCAGAACCTGTGACCCTCATAGCCAGGGGGTCTCAAACCAGCGGGATACATCTCAGAGTGGCTTTGCTGCG
-ACGTACCTTTGGGTAGTTTGAGACTGAAATGACTCTAGTCACTACTTTTCATTTCCATCCTTTCTTCCCTAAAGGTCAAC
-TGGAAAGGCAGCCGGCTGAGAGAACTCGATCTCTGTCCAGCAGAGATTATTTTGTGGACGCTCAAGGTTCTGAGAGCTTA
-CTTCCTTTTTCTGGGTCACCTGCTTGGTGTGAATTCATCCAAAATCATCCGTTTATTTTTAGAGCTATAAATTATATCTG
-CATTTCTACTCTCCTGCAGAAATTCAAGCTCAGAGCTTGGGCAGGGGCCCTGTGTTTGAGGCACAGAGACTGGCAAAGCG
-TCTTGCCTCCCACCTCTTCTGAAGTGAGGCCTCTGCGCTACTGTGTCCCAGCCCTTCAAAAATCCTGAGTCATTTCACTG
-TTTCTGTTTCTCCCCTTTCCCCAGCAAGCTTCCTGATGCAAAGGAACACCGGAGCGGGGCGATTGCCTCCCTAGAGCTGG
-GCCGGCCACCCCCACCCCTCGGGCTGCTAAAGCAGCGGGCCGGGCGGAAGGTCGGGGAGCCAGAGCCCAGGGAAGAGCAG
-AAGGCGCGGGGGGGCGGGGGGGGCACCCAGGAGGGAGGACGGGGCAGCGGTGAGGGTGTAGACGGGAGGGAATCTGTCCG
-GTGCCGCAGTGAGTTGGGTGGCGGTGATTTGTTCGCGGGCGCAGGCTGGGAGGCGGGGTTCCTGACTCACTGCGGCACTG
-GCAGGGCTGGTGACAGCACCACCCCCGCGCCGCCTGCAATCTGCCACCGCTGCCACCGAGCCGAGGGGCGCCAGCAAGGC
-ATCCCCTGGGTCAAGGGGCCTCCCGTGGGCTTTCCAAACAGCCTGTGCTCATTTCCGCGGGAGCCCTCGGGGCGCTGTGC
-TGTGGCTGCATTGTCACTGTTTGTTTATTTCTACATCTGCTCTGTTAGAAGATAGGCTCGCTTAGGACAGAGCCTTCTAA
-TCCACCCCCTGATGAATTCGGGCCCTCGCCTTTGGCACAATGCCTGGCGTCATCACAACGCGGGTGATCAGTAAACGGCA
-GCGAAGGAAGCGGGGTCAGGACTGGAGAGGAGAGGGGGAGGAAGACAGACGACCGGAGAGGAACAAAAATGGAAGGTAAC
-TTGAGCTTTCATAACTGCAGAAGTGCAAAACAGCTCCCTGTGTGATATAGGAAGTAAAACCGTAGAGATGGGACTTGGCT
-GGCCTGCCCTTCACACACTTTAGACATTAACCCAAAGTTCATGCTCCTGCCATGACAGTGATGGTGGACAGGAGGGAAGA
-AAATGACAAGGAGGAAAGGAGGTGTCTTTTGCTCTTAAAAATGAGAAGGGTCATAAACAATCCATCGGCTGCAAACCACG
-AGTTGCCCCCAAAGCAAAGCAGGTTAGTGGCTGCTGCCGCCTCATCATAGCTTCAGAACCCACAGAGCCTGGAGGACTGT
-CAAACATTATCTAATATCCCATTCTACAGAAGAGAAAACTGAGGTTGAGGCAGGAACGCAGACAGGAATCAAGGTTTTGG
-GGTTGGGATTTGCAATCCATTACTTTGCCTCCTGCATCCACTGCTTTTCCCTGGGCATTCTCTTCTTCCGGTTTCTTGGA
-AGTTAAAATTGCGAGAGAAGCAACACAGAGTGGTTTTCCCAGGGCCTCGACCTCGGTAAGGGAAGACGTGGAATTCCGAG
-TGTGGAGACCCAGACAGCCTCCGAAACCCCCACGCAACCCTGGGCGTTCAGCAGCTGCCAATGCCCGCCTGACAAGTTTC
-TGGGGCATCTCTGCACACGGAGAGGTGTGTCTCCTGCAGCTCCAAAAACAGATTTTGCCATCTCATCCCCATATTTGCAG
-TCTCCAGTTGGCTTCTTGTGATTGGCCAGAACTTTTCCTCACTGGAGAGATGAGGAGAATCCAGTCCTCCAACCAGCTGA
-GAGAAAACACTGCAGTAGCAGAGATAGCAATGGCTGTTCCACCCCACACTGATACGATGTCAGGGAGCCAGGGGTGGGCT
-CAACAGGCTGAATGATGCCAGGGACTCCCAAGGGTCTATACATTTAACCCTGGAGGAAGTGGCCTCTGACCAGGTACCTA
-ACCTTCTGTACTTCTCGTTCTGTAATTGGGGGCATCAGAGTGTATTCTTTGGCTTTCTGGAAAAAAAGATTTCTCAAATT
-TTAATTTCGGAAGTTTCCATCAGGACTGGCAGCTGTGTACACAGAAGGAGGTTGCTAATGTATTTCAGATTGGGGGCAAT
-TACAGCTTCCCACCTACCCACCCCAATCTATTCCCAGATCACTGCACCACACTGACTCTTGGCCTCCTCTAGAGTTGGAA
-ACTCTACCTGAGAGATGCACTCCTTTAAACTAACATAAAACCTAAACTAACAAAACCATAGCACTTCAAGGTATCCTTAG
-GGTAAGGTTTAATGACCTATTAATATCTCTAACACAGCAATTCTCTTGCTTGGCTATTCACTAGAAGCACTTGGAGAATT
-TAAAATAACACTGATGCCCAGGCCATACCTCAGACCATACCTCTAGAGGTGTTTTCTAAAAGCTCCCCCAGGTGACTATA
-ACAACAGTAAGACTGAAAACCTCTGCTCTCGTGGGAGCTGCTAGTTTGCTGGTCAGCATCTGTTCTCCCTTCCACTAATA
-GCACCTGATGTTCCTTTGGAAACCCCACTCTTTCTTGGTCCACTTGATTGAGTTACACTAACCCCATCATCACCTCCCAT
-TTACTTTTTTCAGGGAATAGCAGGCTACCAGTTTGGCCCCTTTGCATTTTTCCATTCCCCTGAAAGAAGTAATTGGTTCA
-GGCAGAAGATGTGATACAAGGGGGTCCAATGAAAATCAGTCTCAAGACTGGCTGAAACTATTGGGAAGGGAAAGATCTGT
-TTCTGCTGCAGTTATTTAGGAGAAAACATGGGAGCCTTGAGCTTCCAGCAGGCATTTTGCCACCACATGGAGAAAATCTG
-CTTGTAAATTAAGGCAACATAGAGGAAAAGAGATTATTCATAGAGTGAAAAAGACTGAAATCTAATTAATACCACTTCTG
-AAGCCAGATACTTCCAGTAACAGATATTAAATCCCCCTTTTCACCCAAGAAAACTTTGAACTGAGTTTTCTATGATATGC
-CGCATCATAGCAGAGTTAATCTGTTGCTTTAAAATGCAGAGAATAGAGTTCTAATCTAATATGACAGCAAACAAGCAAGC
-TTCAACATTCCTGGTCAAAGATTCCAGATAGCTAAAGACAAGTGGGTGCTGTCCATCTTCAAGGATAATGGCTTTCAGTG
-GAGAAGGGTGAGGAAACTGAAGACAGCAATGTTCTACTACATGTTTTTTTCAGTTAGTATCAAGAGTTATTGGTAGCTTA
-GCCTTTGCTAAATATGAAAGAGCTTAAGAAGTAAAGAGGTTCCAACCATAGGAACCTCTTTTAACCGTAACTATAAGAGC
-TTTTATAATAGCTCTTATAGGTTTTTATAGTAGCTCTTATAGGTTTTAACCATAACTGTAAGAGCTTTTATAATAGCTAA
-TATAGCAGTGATGTATAGGAAGTACACAGAAGCACACAACAGACCATCAAGACAATGCATTGGATGTTTCAGATTCCCTT
-CTTGGTCACGGGAGATTCCCTGGAAAATGTGCCCTCTGTCTGAAAGTGCAAGTGAAGCCAAAGTAATTGATTGGCTGCAT
-TTTAGATTTGAAAGTTTTTCCATGAACAATTGCCATGTAACAAGCTACCCCTAAATTTGGTAACTTAAAAAATGATGTGT
-TTGACTTGTCTTTGTATAGACTTGGATAGCTTTTCTGGGCTTACCTGGGATCTGCAATTGGCTTCTGGTCAGCTAAGTGG
-CTCTGTGTCTGAACTTGGCTGGCTCTTGGCTGGGGCAATGGGAGTGATGAGCTAATGTATCTGTCAACCCTTCAGAGCCT
-AGCCTGGGCTTATTCACATGGGGGAGGCAGGGTTCCAAGAGTGAGAGCAAAATTGCACAAGGTCTCTTGAGATTCGGACT
-CAGAACTTGCTCACTGTCATCCTGCCACATTCTATTTGTCAAAGTGTGTCACAACCCCATTTTTTTTTTTTTTTTTTGAG
-ACAGAGTCTTGCTCTGTCACCCAGGCTGGAGTGCAGTGGCTCAATGTCAGCTCACTGCAACCTCCACCTCCAAGGTTCAA
-GCGATTCTGCTGCCTCAGCCTCCTCGGTAGCTGGAACCACAGGTGTGTGCCACCACACCCGGCTAATTTTTGTATTTTTA
-GTAGTGGTGGGGTTTCACCTTGTTGGCCAGGCTGGTCTCAAACTGCTGACCTCAGGTAATCCACCCGCCTCGGCCTCCCA
-AAGTGCTGGGATTAGAGGCATGAGCCACAACGCCCGGCCACAACCCCGCTTCTTGATGGAAGGAGCTGCAAAGTCACATT
-GCAGAGCACCAGTAAGAGCTCAGAGATCATTTAGCCCAATCCTCCCCATTTAACAGATGAGAAACTACAGACACCGAGCT
-TACCCAAGTCCCCATTTGATTAAATAAATTATATAGGATTATGCTGCCTTCCACACTGATACTCTGTCCACACTGATGTT
-TTGTCCACTATATCTCCTTTTTCCAAGTTATTTCCCATACGATGTAGCTCATGTCCATTATCATAAGATCTCTGCGAAGT
-GGTTAGGCAGAAATTGCCTAAATGTGCTACCTAACAATGGAAGAAACTGATACTCTTCTTCTCAAATTCGCCCATCAAAT
-ATATAGGAATTCTTTTCCAGGAATGGGCACTGGAGTCACAACAGAAAGCAGGGCAGACATAGATCTTATCTGTACAGAAC
-ATAGAGTTTACCATTTAAGTGGTGTCACTGGGACTTCAACCAAGACTGTATGATTCCTCCTCTGGATGTACTTTTCACCC
-ACAGTGGTTGTTATGGTTCCCTGAAGGCTAGTTCGTCTATCAAAGCCAGTTGTTTGTATTTGTGACGGGGCAATCCATAT
-TAATTTACAGGGTTCTCAGCCTCCCCTCATCCCCTTCTCTTCTCCTTGTGAATGAGAATGCTCTGTTTGATCACTCAACT
-TTGTGTATTCCCCACTGTCTTTACTGGGTAAGGTCCCAGGATTTGTGGTGGTTGACTCTGAATAATGGGAAGATAAAGTT
-TAGAAGAATCAGGAAGAAAAAAGTAAGAGAATGAGACAGGAGAACCACATAAGATTGGGCAGCAAAAAAAGCTGGGGTGC
-AGAATAGAAAGGAAGGGATTTGTAGAATGAATAAAACTACAGGCCACATGAAAACTAGAGAGAAGAAAGAATGTTTTAAA
-ATACTGTACTGAGTTATGAACTGAATCTCTTATTTTTCTTCCAGATACAGAAGTGAAGTTTGATCTATTTTTTATTTTTA
-TTACTATCGGCCACTAACTTAGTTGGTTTTTAATGTAACACTTTGGCAGGCCTAAACCACATGCAAACTGGGTAGTTATC
-TGGAGCAAATTTAATTAAGAATCATTATGTCCCCTGAAAGGACAACCAGAGTTTGTGCCTTCTCTAAATACTTGGTCCAA
-ATCAAAACATCAATTGTCCTTTTCTTAATGAAAAAAAAAAAACCTCAACTCCATACTTTATTCTGGTTTCATTGATTTTT
-CCCGAATAACATTTTTTCTGTTTCAACATCCTAATTGGGATACCACATTGTATTGGTTTGTCATGTCTTCCTAACTCCTC
-TGGACTGTGGCAGTTTTTCAAACTCTCCTTTTTTGGGGTAACCACAAAAGTTTTGAGGAGAGCTAGTCAGGTGAAATGCC
-TTTCAATTGGATTTTTCTAAATTTTTCTTTTCATAGTTACACTTGAGTTATTGTCTTCCCACAGAGAAAAGACCACAGAG
-GCAAAATGGCATTTTAAACACATGATATCAAGTGTGCATATCATCAACGTGACTTATGACCAATGACGTTAACCTCGACC
-ATCTGGCTAATGTGCTGTTTGCCAACTTCTCCACTGTAAAGTTGCTTCTTTCTCCCTTTCCATCCTGTATTCTTTGGAAT
-CAAGATGCTAATTGTAGCCCACACTTAAGGAGTGGGGAGTTCTGTCTTTAACCATAGTGAAGAATTTTATTTACTGGAAT
-TTCATTTAAAGTTGGAGTGGGAAGGAGGATGATTCTCAGAAGAACAATAGTGTAAAGAACAGAAGAACAATACTGTAAAG
-CATAAGGGGTGAGGGAGTTCCCATATTATAAGCATGATGGGCAGAAATATTGCAGAGTAGGGAATGAAGAAATGGGAAGC
-CACATGCTGGTGAAAGGAAGGTTTGGAAAAAGAGAGAAAATTTAGCAGTTGTTCTCACTGAAAAATTTTGTGAAGAGATA
-CCTAGAGAGAATGTTGTGAATGTTTTCTGAGCAACTCACTGTGAGAAGCCCCTATACTACATCTTTGAGAAAACTTACAG
-TAAAGATTTACATTCATCTTCTAGGTACCAGAAACTACACTGTTATCTTGTCCAGGCAAAAACTGGTCCACAAGAGAGTC
-CTATCATATTTGGGTTGTACCAGCAAACAATAAGTTGGGCTGGGTCTAGATCTGAAATGAAAGATCTGTAATCCAAAGAC
-CAGATCAAGCATATTGTTTAATTTCTTCAACCTCAAGGAACTTATAAAATTGCTTATAGTAGCAGATTTTTGCAATGGCA
-TCCATTAGTTCCACAGCAGTTTCCCATTATTTATCTAAACATGCAAGGGGTAGAGTGGCTAATAGTGGGATCTTTGGACT
-GTCTTGAAGATTGGACTCTTTTGTTAATTTTGTATTCCTCGATTATTGCTTATACATATATTGTACTCCATTGTGACTCA
-TATTTTTTGGTCATTACTTTTTACTTACATATAACCCATAACGTTTTTTATGTATGTTTCTACTGCAGAGAGAAAGATTA
-TTCCCCCACTCAATACCTATTAACTGATTGGCTGCTTTATGGTTGCTATTTCCATTCTGCACACTTGTGTTGAAAGATAA
-AGCTTCGATAACTTACAAGGAGCAGTTTAGCAAGTTGAAAGAAACTAGATGTAGGATCCATGTGTTTCCACAAAGGATAT
-GCAGGCTTCAACTAGAAAGATGATTTAAGTGTTTAGGGAAGAAATAAGCATGTTCTAACAAGAGTTTTGCAGTCAGCAAA
-ACAAGGTATGTGGTAAATAGGTCCTATCTTGGGAATTGCCAGAGCCCAGAGCTTGTGCTGTTGGCCCATCCAAGGAAACC
-AGTTAAATTAACTGTCTGGAAGGCATCCACAGAGATCCTTGGCTGGGAGGCAGAAGCAGGACATGGAACAGGTGCCCCTT
-TCCACTATTCCTGGGCACAAAGTCTCATTTCCAGCACACGCTGTGGCAGCAGGAGATGCAGTAAATCAACCAAGCTTCAT
-TTCATCTCAGAAGTCCTCTGTGTACTAATAATGCAGGGAAACTTAGCTCATGAAGGAAAGAAAAAATAAATAAATGCTGA
-CGGTTGTTAGAGCTAGTCCCAGTGATAAGCCTGGAACAGGCAAATATTCTTAGTGATTCAGACAATTACTATTAAACAGA
-GGCCAGTTTCCAAGTGACGTTGTGGTGCCAAACACAGCTTTTATCATTTTTGATGAGATTTTTATGATGCTTGTTATCTG
-CCAATATTATTAATGTTGTTAATGACATAAAAAAATTAGCATTTGCCACCTGTGTGCCAGAAGGCAGGCCTTCTTCCTTC
-TTTGGTCTTTGTTCTCACTAGTTTCATAGGCCATCTTTGCTTTGAGAAGGAGCAAAGTTGTCAGCCTAGACCTTGTTTGA
-GTTCTTGTCTGAAATATACTGGTCACCTAAGTGCATAATTCAAAGAAGCCTCCAGCTTGGTAGCTCCTGGGCCTCAGTCC
-TTCAATTTGCCTTTTAAGACTGCTGGGAAATAATAGCATTCAGTTAGCTGTTACTCTCACATTAGAAAAGTAAAATGAAG
-TATTCCACAGAAAAAAAATAAAATATTTTGTTTCAACATCAAAATCTTAAGTGGGATTGGATATGAACCCTAGAAGAAGA
-CCATCTCTGGGAAATCCCTATTGCAAGGACAGAAGCAATAAGATTCTTAGCCAGAAAGAAGCGATCCTTGGGCCAAATGC
-AGTGCTGCCCCCAGTGGTCTGGATAGCAATGCTCTGTGAGACCAGCAGCTTTCAGTCTTGGGAAGAACTCAAATCTCCAT
-CAGATAAAAATGTCTAAACTGGCCCATACCCGTATTATCATGGGGTGGACTTGGGTGCCGTGTGGACTGTGCAGGCCACA
-TTTGGGTTGGTTAAGTGTCTTAATCTGCCCTGTACCCATAGCTAATGTATCCTTAAGTGGGAAAGGAGAGACAGATGATA
-GATAACTAAATACAACTACAGTCTGCATCATTCACTAAAGCAAGTCAAGTGACCAACCCCAGATCCAAGGAGTGTGGAAA
-TAGACTCTGCTCTAGACGCTACCTCATAGAAAGAGGAATTATGAGATCACCTGAAAAAGGATACATGAATACAGGGTTGG
-GCAAAGAATTAGGACAAATGGTGCAATCCATCACTACCAGTTTAACATCATCTCTTTCAGATTAACTCAGTCTCATTTGG
-GCAAATAATTAATCACTTTTTATTCAAATGCTCTAGAAGGATTGTTATCTCTTCCTTCTCAGTGGATCTCACAACCTGAT
-CTTTCCTTCTAATACAGTGTTTGGGAACAGGTAGAAGTTTATGTTCTTACCTACATATTGTTCTCTGCTGGCTCCCAGTG
-ACCTCAAGTTCAGATATACCCTACCAGGGAAAACTCTAATTTTGCTGCATCTATTGCTGATGGGTCTTGTGTAATTTATA
-GTCTGTCCTTGCTGAATTGTCTTTCTTTGGGGGTCTTGGTGTTGAAATTCCTCCTCTGGGACATGGCAATGATTCCCATT
-CAACCTAGAGCCTGAGTGACCCACCCTACAGGCCTCTTCTACAAAATCACCACATTCTTTACTGAGAGTCCTTTGGTGGA
-GTCATAAGTCAGTTTCCTGGGGCATGCAGGAAAGTGAATTCTCTGTAAAGCATTCTCAGGCTAAGGCAGGCGAAATAAGC
-TTTCTTGGTATTTAACACTATCATGTGTTCATTTCTTTTCTTTTTTGACATCTCCCTGTTGGCATAGGACTCATCTTAAG
-GTCTTTAAATGTTCTAGGATCTGCTGGTAAAAGTGAGGAATAATTTTCCCTGTTCTGGCATTCCTCCAAAACTGTCTGGT
-TATTTCTCCCACTGTATCATCTTGGATGCTTTTGGCTCTAAATAACAGAAACCCTGACTCAAACTGGATTAAACAAGAAA
-GAACGTCATTATAGCACAAAATGAAAAGTCTAGCATTAGGTTTGGTTAATTCAGGGGCTCAGCAATGTCAGCTGGGACAT
-GGGTTATTTCCATCTCTTCACTATGAAATCCACACTGTTGACTTCATTCCAAAGCTGACTTTTCTGCATAGCCAGAAGTT
-GGCTGTAAATAGTACAGTAATACCCCCCTATCCAAAAGGGAATTGTTCCAAGACCTCTAGTGGATGCCTAAAACTGCTGA
-TAGTACCAAATGCTATATATACTATCTTTGTTCCTATCCATATATACTATGATAAAGTTTAATTTATAAATTAGGTACCA
-TAAAGATTAACAACCGTAAGTAAAATATGGGTTAGTTGAACACAAGCACTATAATACTACAACAGTCAATCTGGTAGCCG
-AGAGGACTAAATGACTAATGTGTGGTAGCATGTACAATATGGATATGGTGCACAATTTAAAACTTGTGAATTGTTTATTT
-CTCAAAATTTCCATGGAATAGTTTCAGACTGTGGTTGACCATAGGTAACCGAGATGCAGAAATCAAAATAAAATCATGGA
-GACGGGGGGAATGACTACTGTATGGAGAGCCTGCTTCCTCCATCACCAATGGGAAAGAAAAATAGAAAACTTCTCTGTAA
-CCTTGTATTTAAAAACTTTTCCTCCATCTTCATTGGGTCATCTCAGAACAAGTAAGAATGGACAGAGGAATACCATGTGC
-TGACTGACGAACGCCTGGGTTTCTGAACCAATTGCCATCAAGGGGATTGGGATTACCATAATTTTTGCTGAGACTAAGCC
-CCACCCCAGTAACCAAAGGTGAGTTCAGTTTCTCTGGTCACTATGGACTGTGTGAGGTAAGATGGGCAGCTATCAAAATA
-GTCAGTCTATCAATAAAGAGCAGGCAAATACGAAGCTAATTGCTCAAAAATAATCATCTTAAGTGATCATCTAAAACTAT
-CTTTCTAAAGGTTTTGTCTATCTGCTAGAAGGAACCAGTTCACTCATATCTGACCTCCTGCCCCTCAGTTTCTCTTTCTC
-CCTCTCTCTTTCAGTGGTGGGAAACTTTCTACTCCTTTCTGTCTCATTGAAACTTTCCTTTTAATGTAAGCTAAGTTTTT
-CTACTCTGCTTTACAGCGAAACTCTGTGTTCAGTCTCCACACATTGCTCTTAATATGTAAAGAAAGGCTTAACTATTTTT
-AATTTTTTCTTTGCTGACAAAAGTTAGCTTTCTAAACTTTTGTTTCATTCAACTTTTAAGTTGTGATTCAGTGACACCTC
-TTATTGTCTAGGGGCCCCTGCCATCCCATGAAAATACATATGCCAGTGACTTAATAAGTAGAGAATGGCAAGGCAGTAAG
-AAAAACAGGTCAACAGGAAATTCAGAATACATGAAAAAAAAATGGGCTGGGCTAGATGGCTCATGTCTGTAATCCCAGCA
-CTTTTGGAGTCTGAGGTGGGAGGATCACTTGAGTCCAGGAGTTCAAGACCACCCTGGGCAACATAATGAGACCCTGTCAC
-TACTGAGAAACAACAACAACAACAAAAATTAGCTGGGCATGGTGGCAAGACCCTATCTCTACTAAAAAAAAAAAAAAAAT
-AGGCACGATGGTGTGTGCCTATAGTCGTAGCTACTTGGGAGGCTGGGATGGGAGGATCACTTGAGCTTAGGACTTCAAGG
-AAGGTTGCAGTGAGCCATGATTCTGCCACTGCACTCCAGCCTAGCCAATAGAGCAAGACTCCGCTTCAAAAAAAAAAAAA
-ATCTATCCCTATCACACCCCTTCCTGGTTTTTCCTCCAGGTACAGAGAATTAGAGCCTTCAAACGCAGACATTATCAATT
-TGGTCCATGTTGCTTAAGATCCAATTGGCTTCCTTCCTAGCAATTATTATAATTTGTAATTATTTGCAATTATGTCATTT
-TTTGTCTGCTATTTTATTGCCTATTTCCTGCACTAGAATGTAAGCTCTATGAGACTTCAACTATATTGTTCATTCACATC
-CCTAACATCTAGTAGAGAACCTGGCATGGAACAGGCTTCCTATAGTTATTAGTTAGATGAATGAATGAGTAAATTTTCTC
-CTCCTAAATTGAATGGTCTTACACAGTTTAGCACTTTCAGGCCCATTATGGTAGCTGACTCTCAGAATGAGGTTACTCTG
-TCTACCAGATAATAATAATAATAGTAATTATTCAACATCAGAGATGTTAAGTGATTTGCTTAAAGACACCCAGTAAGTGT
-GAAATATGAATCTTAAACTCAGGTCTTTCTTTCAAGTCCTATATTCTCTCCATTTTTACTTGTCTTAAAGTTCTCCAAGT
-TTAAGAACCATTTTAGCATTGAGAGATGGTAGAAAGCCTTCTCAAGTCAAAGTGAATAGGGTGAGCCAAATTAGGGAAGG
-CAACAGGGAGCATTCTGGGAGAAATCCAGTGGTGCATTCTGGGAGCCCTTTCATGTACTTAGCCTCATCCAATGCCCAGG
-GAGATGTGAGACTTCCCGCAGCCCACAGGGCAAGCTTTTCCCTGCCTGTGTTTGCCTGCAAAAACAACTACTACTGCCTC
-TAGCAACGTCTGGAACCATGTTCCCTGCATAATAAGAAAGTATAAATGGAGGACACAGTATTGAAGTATTGAAATCACAA
-GATAAGGAAGATTAAATTAGGCTCTGCCTTCCTGAAATGCTCCCAGAGCTAGAGCTACATGGGAGCAAGGCCAGCTACCA
-GATCTTGGGGCTTCTCCTTTAGCAAAGGGGAAAATCCCCGGCCCTGCAGGCATTTCAAGCTCAGGGATTGGTGGAGGCAG
-ATCTGTCAGGAGCCCCGGTAACACTACAAACCAGGAGGGAAGCTGACAGGAGGACAAGCAATGCTGGCATTTTCCTCCCT
-TGGAAATCCCAGGGACTCTAACACCAGAGATCTGAGGCTGATCTGATGCTCCAGCAACTATATAACCTCCACCCTGCCTG
-AACAGCCTCCTACAAATAGGAAACTATAAGATTTGCATTATCTCAGAATAACCATTTGTAGGACTAGAGTCCGTCCATCA
-GCAGTAACTGTTCTTACTCAACCTTGATAAAAGCTTTGCCAGATGAGTTGGGCTCTGTTTAAGTTTACTAGGCCTGCCAT
-AACAAGGTAATACAAATTGGGTGGCTTAAATGTAGTATCACAGTTCTGGAGACTAGTAGTCTGAGATCAAGGTGTTCACA
-GGACCATGTTTTCTGAAACTCTGGGTAGAATCCATCCTTGCCTGTTCCTCGTTCCTAATGGTGGCCATCAATTTTTGGCA
-TTCACAAGCTTGTAGCTGTGCTATGCCAATCTCTGCATCAGTCATCGCATAGCATTCTCCCTGTGGGTCTTTATCTTCAT
-GTGATGTTTTCTTCTTCTTATAACAACACCAGTCACATTAGATGAGAGCACATACTAATGACCTCATCTTAACTTGATTG
-CACCTGCAAAGGTACTATTCCCAAATAAGGTCACATTCATAACTACCAGGGGTTAGAACATCTGCATATCTTTTGGGGAA
-CATAATAACCCACAACAGGCTAATATTACTATATCCACTTTTTGGAGGTAGAAACTGAGGCTCAGAGAAACCAAGAGATT
-TATGTAACATCACTGTGGTGAATCAATGCCATAATGGCCCCAATATTTTTCCTGCCTCTCTGAATCTATCTGTTGGTAGT
-ACATTTCCCTGCTGATGCTGGGCTTGGCCATGTGACTTGCTTCAGCCAATAGGACAGAGCAAGTGTGATGCCAGCAGAGG
-CCTGGAAAGTGCTTATGCACTAGGATTTCTTCTCTTGCATACTCTGGAACACCGTGACCATTGAGTGAATAAACCTAGGC
-TAGCGTGTTAAGTGATGCGTGACCATGTGGAGAGAGACTCCAATCATTCTCATGTCACTATATGAAATCAATCAGCACCA
-GCCAAACCTCCAGCTGACCACAGATGCATGACCAAACCCCACCAAGATCAGGCAAGCTCAACCTGAATCAGCAGAACCCT
-TAGTTGATCCATAGATTCATGAACAATTATGAGTGAATGGTTGTTTTGAGCCACAAAATTTGGGAGAGGTTTGTTACACA
-GAGAAAACTGATACAGTCACATAGGTGTTAAATGGCAGAGCTGGAACGTGTAATCACTATGTGACCTGTTCATACCACAC
-AGTTCTGAATCAATGGGATGGTGATTCATAATTTTCCTGTTGGCCACAACATGAGTTTCCCATGTGTCCACCAGCATCGA
-GCCAATATACAGAGCCTGTAACTATATTAACTTAAATATTTTGCTTTCCTTCTTTTTATTCCTCCTTCTCTAAATTATGA
-ATAGAAAGTTATGAGTTTGCCCTTTAATTATGTGCTTTCTGGCTATGAAGAGATTGACTAAAATCTATGGTGTTAGTGGT
-GAAGTAAGCAAGAAAAGGAAGAGAATGAAGGCTCTGTAGGTGAAAGAACAGTCATCTTAAAAACCAGTCAGTTGGCCCAG
-TGTAATGTAGCATTTGCCTGCCTCAGTTGCGTCCCAGGGCAGACGGAGAGTTTAATCCTTGCCCCTCTCATATGAAATAG
-GCCACCACTAGGATCCTCAATATATTTCTTTTTTTAATCTCTCTCTCTCTTCTGCAGGCTTATGGGTGGAATGCAAGCTA
-TTGGAAGTATTTGAAGATGTGACCAAGGAAGCTATGAGAATTGGAAATGAGGCAGTTGTTTAGAAACGGGCTGATGTGCT
-TGTGGTAAGGTGGAAGGAGGAAGGCAGATGAGGAAAGGAATGTGCAACTGAAGCAATTAGCTGTTACTATGTAACGAACC
-ATCCCAAAACGTAGTGACATAAAACAACAACCATTTGTTATTTCTCATGCGCTTACATTTCTACTAGGAAGTTCTGCAAA
-TCTGGATTGGTCTTGGCTGATCTTGGCAGGGCTTGTTCTGGCATCCACTCTCAGCTGCTGAATTAGCTCTCAGTTCCTGG
-TTCAGGGTGGCCTTGGCTTGGATGACTTGGCTCTGCTCCATGTATCTTTCACATCCTTCCAGCAGGCCAGCTCAAGCCTG
-TTCTCTAGATTGTGGCAAGGATCCAAGGGAAAGAGAGAAAGCCAAAATGTTCATGCCCTTTTTTGAGCCACTTTTTTCAA
-TGAGTTGGCTACTGTCTCCCTAGCTAAACACATCTCAGCCAAGCCCAGAACCAGTATGGAAGGTCACTAACCAAAGCTGT
-GGGTAAATGGAGGCATGGAAATCTGTGACCTTTAATGCAATCATCTACAATAACAAGCCAATGACCATGAAGCTGGACAG
-AGAAATAGATTCCTGGGAGGAAGAATAGCAAAATGTCTGGAGTAAGAGGAAGTAGGGTATTTCAGGGAACTCAGCAAACA
-GTGTGATGACAAAATGAAAGCACAGTCATGCAATCAGCACCTGGGTAAATATTTAGGTTGGAGTCTGTGTTGACCCAGTC
-TGCAGGTAACCCTCAGCCTGGCCCAGCATTTCACTGCCCTCCTACTACTTACCCAGAAACAACTCTCCTGTATTGATTAA
-GCAGGAAAGAGGAAACTCTCCTGGAAGACACAAGGGCAGATCCAAGCAGGAGCTAAGGTTTTCCAGAATGTGGTCTTAGG
-TCTGTGAATGGCTTTTGGACAGAGGCACAGCTGAACATTCCCATGGTTTCTGTGACTTTAGAATCACTACCACCTCTTGA
-CTATGCACCTCTTGACTAATTTCTATTTCTCAAATTATAGAATAAAAAATGCTGATTCTAAGGATAAAAACACAACAAAT
-AATCCAAAAGTATATAAGATGAAAAATAATAGTGTGAGTTCTATTCCATTCTCCAGAGAGTAACAACTGCTCTCAATTTG
-GGCACTTCCTTTCTGTCTTCTTCCTGCACATGTACTTTTTGCATATGTCCTTTGCACGTTCTTAACCATACTTGGGTAAT
-GATGCCAACATCACAAGCATAACTTTCTGACAGCCCAGAAAGCCAACCTTGTCTTCTTCCTTGTTCAACCCTTGTGCCAT
-TTTGCCCTAACCAGAAAAATACTCCACTTGGTAATGATTCTCTCTCTGTGTCTGTGAAAAATAACATTGGAAAGTCTAAT
-GTGGAAATGTTGAACCAGGCTGGGCATGATGGTTCATTCCTGTAATCCCAGGACTTTGAAAGACCAAGGTGGAAGGATGG
-CTTGAGCCCAGGAGTTCAATACCAGCCTGGGTAACATAGTAAGACTCCCATCTCTACAAAAAATTAAAATTAACCAGGCA
-TGGTGGCATATGCCTGTAGTCCTAGCTACTCAGGAGGCTGAGGTGGGAGGATGGCTTGAACCAGGAGGTCGAGGCAGCAA
-TGAGCCATGATTGTGCCACTGCATTCCAGCCTGGGTGACAGAGTGACAGCCTGTCTCAAAAAAGAAAAGAAAAGATACAA
-AAGAAATATTGAATCAAAAAATATAGGTAAAAGTGAAACAAAAGGAAATTTAAAAATAAATATGTATCAATAGATAAAAA
-ATGGTAAAATGAACAAGATGTGGAAAATGTTGTAGTCTCTACATCTGGCCTAATATTTAATCTAAGAATCTAATGCAAAT
-TTCTTACATCATGAATAAATATGGATGATGGGCCTACAGATCAGATACATTTTAATAATGAGCAGACTAAGTGAGGCCTC
-ATACCTCTCATCTCCATGTGTAACCTAATTAATCGGGCCATTTCAGTTGCAGAACACTCACTTCCATAACTGTCTTCTAC
-TTCAGAAGTGTGTGTTTCAGTTAGAATTTGATTTGGGTGCAGATGCCTATGATAGACAATGCAAACAGTGACTTAAAGAA
-ATAAAAGTTTATATTCCTCTCACATAAAAAAAATTTAAATTTAAATAGTGCAGGGCAGATTTAGCACTCCACGGTGCCAA
-GAATATGAGCTTCTTTTATTTTGTTGCTCTTGGCCTTCACTTTATGGCTCAAAATGGCTGCTGAAACTCCAGACATCAAA
-CCTGCATTCCAGCCTGCACAGTAGAGGAAGGAAGTAAAGAAGGGTAAAGGCTCATTTTCTAAGGAAATTGCTCATCAGCC
-TCACACAACACTTCCTCATACACTGCATTAGCCCAATTTAGTCATATGACCACACCTATCTGCAAGGAAAGCTGAGAAAT
-GTTGTTCTTGTTCTCAGGGGAGATGTATGTGCCCAGCTAAAAATAAGGTGTTCTGCCACCAAAGAAGAAGAGAAAGGGGA
-TATTGAAGTTCAAGTGGTAATCTTAGACATATAAAGCCATCAAAATTATTTCCCCCCCAAACCCTTTTGAGAAACTGAGT
-GCGTAAAGATAGATTATGACTGGGCACGTCAAACTTGTTTTAAATATACAATTGGCCAGGCACAGTGGCTCACACCTGTA
-ATCCCAGCACTTTGGGAGGCCAAGGCGGGTGGATCACCTGAGGTCAGGAGTTTGAGACCAGTCCGGCCAACATGGCGAAA
-CCCTCTCTCTACTAAAAATACAAAAATTAGCCGGGCATGGTGGCATGCCTGTAATTCCCAGCTACTCAGGTGGGAGGCTG
-AGGCAGGAGAATCTTTTGAAACTGGGAGGCAAAGGTTACAGTGAGTTGAGATCACACCACTGCACTCCAGCCTGGGTAAC
-AGGGTGAGACTCTGTCTCAAAAAAAATAAAATTAAAAAATGAAATAAAAATACAAATAAATATACTATTTTTTTCAAAGG
-ATAGAAGGAGCATTGTCTACGTTAAATAATGCAGAAGATTTTAACTGATTGCAGCCCAATTTGTTTCCATATCCCCAGAG
-GCCATCCCAACCCAGAGGCTTTCCCATAGAACCGTGGGGAAAGATCTCAATTGTCTACACTCTGGCTCTGAGATAAGGCA
-GCGCTCTCTCAGCCCTTTAAAGGGGGAGAAGGATGTTAGTTCTATTCCTTAGGCAAGAGGGCCTCACCTGTGGCCATTCA
-ACCCCAGGTTCTGCAAGAGTGAGAAGCAGAAAGCCTACTTTGCGTTGCCTCTACCTGAGGAGAAGAAGCCAGGTGTGCTC
-TCAGATGGTCGGGGTAGTGCTTGGGAAGATGTCGGGAGGACCGCGTAGAAAGCTGAGAGTGAGCTTCCCTTTGCTCACTG
-GCTTCTCAGCCAAAAACCGCTGGAGTGGAAGAGGGACATTATGGGCCTGCAGCAAACTCTCTCTCAACCTTCAGTTTCCC
-AATGTATAAAATGAGTATGATGAAACTTGCCTCATAGATTCATTACAAGGGTTGTTTAAAAAACATTTACCAAAGTGCCC
-GCTGTATACCTCCATTTAATGCATGCAAGTTCCTTTCTCTTCTTCCTTTTGGAATAACATAACCTGATTGTAAGAACATG
-TTTCCACAAGACAACATGATGAGAAATGTTTGGCAAGATCTAGAATTGCAGTATGGTAGCCACTGACCACATGTGGCCAT
-TAAGCACTCCAAATGTGTCTATTGTAACTAGGAACTGAACTTTTAATTTTATTTCATCTTAATTCATTTAAACTTAAATT
-TAAAACCTGCTGCTTGATTAGAGTATTGAAAAATATTTAAACGTATTTGGAACAATTTGGGTATGTGAATTTCCTCTTTC
-AACTATAAATCTTACAAAATCTAAACACAGATCGAGTATTCCGAATTAAAATTTAACATTCAAATTAAAATGTGCTACAT
-GTAACAAATACATACAAGATTTCAAAAAATATACTATAAAAAAGAGAATGTAAATAAAGTCATTGATAATTTTTATGTTA
-ATAACTTTCATGTTGAAATATGTTGATATATTGGGTAAAGTAGAATACAATATAAAACTAATTTGTCCTGTTTCTTTTGA
-CTTTTCTGATGTGATGATTAGAACATTTAAAGTTACATAAGTGGTTTGCATTATATTTCCAGTGGACAGTGCTAAGCAGA
-GGATAGCAAATAATCATTTGGATTGAGTCTTCTCACCAGACTGGCTAGTGATTTTGGCCTTGCACAGACATTTCATTAAT
-TAACCGAGCACCTATCCTGAGCTAGGGATAAAGTAGCAGTTGAATCAGAAATAAGCACATAAGCAAACATTGTAAATAAG
-ACAATTTCTGATAATTATCATAAGCAGAAGGAAGGAAATAAAGTAATAAAAGAGAGAATAATTACCCAGAAATGGAGCTG
-GTTTCTTTACATGGGAGGGCAGGCAGAGAAGGCCTCTCAGAGGAAGGACATTTGAGTTGAGATTTGAAGGGTAAAGATGA
-GCTAGAAGTGCAAAAGTTTAGATGAGGGGAACATTTTACAGAAATATTAAATGGTTGTGCTCAAGGTCAGATAGCAAGCT
-GCTAAGTCAGACTAGCATTATATACCCAGACTGATCTGTGCCTAAGTCTGTGATCATATCCATTTGTGAGAGATGCTAAT
-TTCCACTCTGACAAAATTGTTGACACTAATGAACTGCCCTCCCCCTTCCCCATTATACTTCAGCAGGGTATTGGTGGGGC
-ATTTCCCAGTTATATTCCTAAGAGCAGAAATCGAAAACAACAGTTCTATACAGGTAGGCATATGTCATATCTTGGAGAAA
-AGCATCCTTTCTACTCTTTTCAGCCTCTTGACTTCCTATGACAAGAACCAATTACAAATACTGCAGAGCAAGAATCAATG
-AAATAAAGAAATAATGGGAATGATTTCTGAGGACAGGAATTAAATAAGTGTGTCTTTCCAAAGCTATGACTTAATGGGGT
-CAGGATAACAAGCTCCAGGAATAGAAATGTCCTAATGGGAAAATAACGGCAATTCTGAAAGAGGAATAGTGGGGATTTTG
-GTGTAAGGGACTAACCATCATTACAGTCCCATGGGAAGTTATTAGATCTGGAAAGGTAGGCATCCCTTCATGCTTCTATA
-GACCGAAAAAAAAAATGGATGTAATCAGCCATGTCGAGTTACAGAATTTCATAGGCAAACTAATGATGGAGCACCAATTT
-TTTCTCAGACTTAGGACCTCCAATATTTTTCTTTAACTCTGGGGGCTGCTGTGAAGTTACAAATATATGGTATGGAGCCA
-TTTAAGCTCCAGATCTTGACCTTTTTTTTTTCTGATGCTGCTGCTAAGAGTCCAGAAATCTGGTCAGCCTTTGCTTTACT
-TCATAAGAAGAGAAGAGGGCTGAAAAAAATATTCATAGACACCAAAGTGAAGATGGAGAAAGATGACACTGGTGTTACAG
-GAATAAGCCTGGAGCTGAAGTGATTGGGAAGCCCAAAAGGACATCAAAAGTTACAGGATTTAAGACCACAGCCAACGTAG
-CTGTGTCAAAAGAATAATTCAAGTTTTAAAAACTGATTTTTGTTTAATAAGAAAAATTATATGTCTACCTCAGAACTCTT
-TCTTTGGCCCTAGGTTTGTAAATCCAATTTCCCACTTGACTTCCAACCCCAAATAGAAATTAGGATATTTTATTGTCACC
-CCAAATGGAACATGGCTAAAATAGAACTTTGGGGTTCTATGCCTAGCTTTTCCTATCTGGGGAAATTGACACTACTTAGT
-TGCTCAAGGCATACCATCCCACATCCATTTTATCACCAAGTCCCGTTCATTCTGCCTCCAAAATATATTTAGAAACTTTG
-TCTTCACTTAACCTCCAGAAAAGAGGTTAGGGTTAGGGTTTGGGTTAGGGTTAGGGTTCAAGTTGTCATCATCCTATGTG
-GCAGCAACAGTCTCTTAACTGGTGCCCTGGCTTCTCTCCTTGACCTCCAACCCCCAATCCATTATTCAGATAGCAGTCAC
-AAGCCTACCCAGATCCAGGGGAGGAGATATAGACCCCCAAGCTCTCAATGAAAGGAGTATCTGAGAATCTGTGGCCATTT
-TATTCTAAACTGCTGCATTCACTCTTACAGAAATCAGTCTCCATCCTACCTGTTGTAGAGCACTTCTGGCACTCTCACTG
-CTGCTGTCACTGGCCTTGACCAATATGGAAAAAAAAAATCCACACCAACTTCATCCTTTACAACGTCAATATTTTGCATG
-GTTTACCCACAGAAACAGGGCAGGCCTCTGTTGAAACCTTAAGGTTTTAATTCAGTCCAGTTCTGTATGTCTTTATTGTT
-AGCTCTAGTGTTTCAACCATTTATTAGTCAGATGGCCTTTGGCTAATTATTTAGTCTCCCTGGGCCTCAGTTTTTTCATC
-TGAATTAAATGTCCTTGTATCTCATCATTTCTAAGTGCTTTGCAAGTCAGCCAGCTCTATGAGAGTTCAGCCATTGGCTA
-TGCTCACAGGCCATTGACACACAGTTAATAATAATTTTTTAGTTGCATTAGTTTTAAGAGGGCTTGCTTCTATTTCAACT
-TTTCACAGAACATGATGCAAACCTCCTGAGGATCTGAGCTGTCTTGCCTCCCTCCTCCCCAGCATCTTAAATTATTCTTA
-CCAACTTTTGATGCTTTGATTGTTTCCATAGCCAATTTTCTAAAAGCTGCTTTCCTTTTTGACCCAGCCAATTTGTCCCT
-ATGCCAGTTTTCCAAGCAAACCCCTATCTGATTTGGCCTTCTAAAAAATTTCTGCAAGGTCTTCTTTTCTTTCTAACTGT
-TCCAATTTTGTTCTTGAGTCTTCTTATTCAAAAGAGGCTTCTATACCTTTTATTAGCGTACATTTCTAACAAAAAGCAGT
-TTCTCTTGTTTGAATTTTATTTTGCTCTGTGTTAAATGGACAATGCATGCTAAGGCAGAAAACTAAATTCCTTTTACATA
-TTGGAGATTCATTTAAGCTGGGATAGAAGACAAAGATAATAAATATTTTTCAAAACTATTAAAAATTTTAAAAATCAATC
-ATGATTAAATTGCTTACAAAGAGAAGGAATTTGTTTTGTTTATTTTGAAGCCTCTTTTTCTAAATTTTGGCTCTGAAATA
-TATATGACTATATCACACATATATGCAAATGAAAATAATAAAAGTAAGTTCTAATGAAAAGACATTTAGCACATTTAATC
-AAACTAAACCACTTTGAGGCATCAACAATCCAGAGGAGTAAGGCTATGTGTGTGTGTTTTAAAATTTTTATTGCAGTATA
-ACAATGACATAGAAGAACACACAAGTAATAACTATGTGATCTGATGAATTTTCACAAACTTAAAACACTCATGTAACCAG
-CAAAAGGGTTATCTTATTTAAAAAGTCTCACTGATGGGCTCTTGAGAAACACCTGTATAGTTGTCCTACCTTGTTATTAA
-CTTTATGTAAGCATGAGGCTGTCTCTCCAACTCAATGATATATTCTACATGGCCGGATAGTAGGACTGTAGTTTATACCA
-CACATTTTTTCTAACATAGTGGTAGCTAAGTGCCCTGGAATGAGGACACCCTGAGTAAATGAATATGAACTATATCAGAC
-TCAGTTTATTAAACATTAATACACACAAATCTCTGCTCCACATGCTTTCGATTCCTATTTTATCTTCTATATCACTGGCC
-TTTGCTTCTAAGTCTTTTTGCTGTCACCAACCTCACTGACAAATTATTTAATCAATTATTGACAAAATGCTTAAGTTTCC
-TAGAACTCAACTATTCTTCATCTAAACCTCTCTCTGGCCGAGTTCAGTTGGTCCCATGGCTTTAAATAACACCTATAAGC
-TAAAGACTCTTGAGTTATAACCCGTACTACAGCCAATTAATTGCATTTACGGCCCCAATTAATGGCCTTTCTATATCCCT
-CTCATATCTTGACGTGAGCTGTTGCAAAGTCACATCGCAACAACTCACATCAAGAGGTGGAATCTATTTCATTACCCAGT
-GAATCTGAACTGGCTCTATAACTTTCTTTGGCCAATAGAAGGTTGGGGAATACCAACTGCATTACCAACTTTAAGCCTGT
-GCTTACTCTTGGAGCCCTCCGTCTACCATATGATCAAACCCAAGGCAGCCCACTAAAGAATGAAAAACCACATGGAACAT
-TACACTCACTGACAATCAACCAACCCCTGGAAGCAAAGCCATCTAACCAACTTGCAGCTGACTACTGATGCATGAGGTAA
-CTCAAGCAAGACTAAATGAGTCCCCCCAGCTTAACCCAGCTAAATAAACAACCTGCAACCTCATAGGGTAACAAAATAGT
-TATTGTTTTAAACTGCTGACTTTTGGTGTGGTTTGTTACACAGCAATAGCTAACTGATATACCAGCTTAGACATATGTGT
-AGACACGTATTCAACACCAATCTACACTTCCATGTAGACATCTCATAGCCATTAAAAAAATCTATACCAAATTTGATGTT
-TACCCCATCTAAAAACCTCTTCAATGTTTTCCTTTTGAAAAGTGGCCCCCTTATCTGTCCAGTTCTTCAAGCCAAAACTC
-TGGACGATACCATTTAATTCTTCCTTTCCTTCACTTTCCACATTCAATCCATCAGAAAGTCCTGCTGATTCTAATTTCTG
-AATTTTTCTTAATCCATTTAGTTCTGTCCACTCCACTCACATCATTTCTGCCAGTCTAAGCTGCTAGTGTCTTATGCCAA
-CAGCACTACAGTAGCCTCCTGTCTGATCCCTTCTGAACCTCTCCAAACCTTTTTTACACAAAAGCTATTTTTGGTTTAAA
-AATCCTAGAAGATCATGTCGGTTCCCTGCTTAAACCATTCAGAAACTTCTCATCATGCTTAGAATCAAATCCAAGCTGAG
-TATCATGGCCCATGAGACCCTCCATGACCTATTTCCTTTCCTTCTCTCCAGTCTTTCTTCCCGCCACTCTCACTCTTTGA
-CTTACTACATTCCAGCCACATTTGCCCAATTTTTTTTTTTTTTTTTTCTGAGACAGTGTCTTACCTTGTCACCCAGGTTG
-GAGTGCAGTGGTGCAATCCCAGTTCACTGCAACCTCTGCCTCACAGATTCAAGCAATTCTCCTGCCTCAGCCTCCCTCCT
-GAGTAGCTGGGACACCAGGAGCATGCCTCCATGCACAGCTAATTTTTATAATTACATGTAGAGAGGGGGTTTCACCATTT
-TGACCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCACCCACCTCAGCCTCCTAAAGTGCTAAGATTTCAGGTATGA
-GCCACCATGCCCAGCCCATGTTTGCCCTCTTGCTTCTCCTGAAATAGCCAAGCTCTTCCTCATCTGAAGGCTTCTGCTCT
-TGCTCTTTAATCTGCTACAAAAATCTCTTTCCTTGCTTCTTGCTCTTTGCCTGGTGTCTTCCTTTACCTCTTTCTTATCC
-CAGATTAAGTCTCGCCACCTTTTGAAGGCCTTTTCTGGCCACCCTGTCTAAAGTGGTCTTCCTGTCCCACCATTTTTCTC
-CATTGTCCCATCCTATTCAGTTCATTGAAAATATTACGATTGCTGATTCTTGGTGTATTTACTTAACAATATGTGTTTTC
-TTGCCTGTCTTTTCTACTAGATTTGAAATCCCATGGGGGCAGGATACCATGTCTACTTTGTTCACTTAGCATCATAAGTG
-CTTTCCACAATTTTTGGCCCATGGTAGGCACTCAGTAAACATTAGTTTAATAAACTAATCTAAGTCTTCCAATAACACTA
-TCAAGTAGATTTTTATTATCCTAGTTTTACAAATAAGAAATTTGAGGGCAGGCATTATTTGTATTACTCATACTCAGAGT
-AGAGAGACAGTACGGTAACCAGGCCAATATGTCAGAGAAGTGGAGTGGGGACATGAACCCTATAGTTCCTATACAAAGCC
-CAATCTTTAATTGCTCAATTCCCATGACTTGAAAAACAAGCAATTGTGCTCTTGAGGGATGGAGTGTTGTAAAGGGATGT
-GAAGAACAGAATGCTCCAACCCAGACAGGTGTTTCCCCCTCCTTGAACTGATGCTGCCACTCCAAGAGTCATATCCTCAC
-CCAATTAAATCCAGATGCAGGAAGGTAGGGATAGACAATAATGGCTCTTCTTCATACTTTCCACTCAGAAAAGAGGAAAA
-TAGTTTCCTGAAGCCTTCAGTGGATATCTAGTTACATTTCATTAGCCAGAATTTGGTTCCACTCCCACTACTATCATTTG
-CAAGGGAGACCAAGATTGCCACTCCTGATTTACGTTCATCACCATTCATCATCACCTGGGCTAGGCTGGTTCCACCCAAA
-TGTATCAAGATTCTGATATCTATGATGGAAGGGAAGAATGGCTATTGATCATACCAGCAACAGCATTTGCCATAGAAATT
-GAATTACTCTAGGTTCTTTTGTCCCACTTTATTCTAGAAAATATGGATGTTATGGATTAAGTCCATGGACTAAGAAACTT
-AGAGCTCAATCTGATGATACTGAGTCTTGAAAAAGTTAGTCTACTCTTCTCAGTAATTGATGAACCCATATGTTGTATCC
-AAATAGTTCCAACCTCCCAGCAAAGCATAAATTTATATACCTGGCATAGAATAACAAAACCACACAACATAACAAGGCAT
-TGTCCTAATGATAAACCTAAAATTGTCCTGATAGATAAATCCAGCCATGTTTTAAATTCAGCACTTTATAAGCAACCTAA
-ATATGCTAATATCAAAATAAATCCCTTTTGGTAAACCTCAGTGTTACCTTGTTCTCTTCCCCATAAAGACAACTTTTATT
-TTCCATAAAATTCAATCTACATATTTCTGTTTTACCAGCAGTCATACAAGAGTTGTTGAAAATTATTTATAGATGAATAG
-AGGCAAGTTTGGCGTTGCAGAGCTGAGCTTTGGCTGCAAATTGGGAGACTGGGTTCTGGTCCTAGAACTTCCAAAAACTA
-GCTGTATGAATTTAGGCAAGTTACTTCATTTCTTCTTTGGTAAAATATGGAGATTAAAAGGATTATATCTGATAACCCAA
-TTGAAACCACTTGAACAATATATTAGTAACGGTAATTGATTCTAGCTGTTACAACAAATGGCCCCCAGATTATAGTAGTT
-TAACATAATTAAAGTTTATTTCTCACCTAACAGTCCAGTTGGATTCATGAGGCATTTTTGCTGTCTTTCCTCCAGGCAGT
-GTTTCAAGAACCCAGCTCCATTCATCCTATGATGCCACCATCCTCAGCATTTGACTTCCATGGCTCCTGTAAGAGAAGAG
-AACATGAAGAACAAAACAGGAGGTTTTTATGGGAGGCATGTCAATTTGACCAGATACTTTGCCCAGAACCTTGTCACATG
-GCCTCTGCCTAAATGACAATGAGGCTAGTGGCTGGGTGTGGTGGCTCATGCTTGTAATCTCAGCACTTTGGGAGGCTGAG
-CCAGGAGGGTCTCTTGAGCCTAGGAATTCAAGATCAGCCTGGGCAACATAGGGAGACTTCGTCGCTACAAAAAAAAATAA
-ATTAAAAATTAGCTGGGCATAGTGGCACATGCCTGTAGTCTCAGCTAGTTGGGAGGCTGAAGTGGGAAGATCACTTGAGC
-TGGGAGGTTGAGGCTGCAGTGAGCCGAGATCACGCCACTGCACTCTAGCCTGAATGACAAAGTGAGACCCTATCTCAAAG
-AAAAAACAAAAAATGAGTCTGGGTAACGTAGCCTGTGAGACCAGAAAGAAGCATCAGGATTGGCGAGTATTAATACCATC
-TCTACCATAAACATTTTTGGAAATATTTCTTTTTTTTTTTTAGAGAAAGGGTCTTGCTGTGTTGCCCAGGCTGGTCTCAA
-ACTCCTAGCCTCAAGCAATCTTCCCAACATAGCCTCCAAAAGTGCTGGGATTACAGGCATGAGCCAACAAGCCTGGCCCT
-AGAAATATTTCTTTCTCTAAATTCAAAGTAACTAGGGGGAATATTAATCTCATTCTAAATATTTTATTTTGTCACTCCCT
-ATCCTTTGTTTTCAAACACCTCACACTACTATTATGTGTTATCACGAGTCAACTGTTTACATGTCTATCTCCAGCTGTTG
-GTTGGGAGCTCACTGAAAAAGGAAACCTTTGTAATTCATTTTTGTATCCTGAGGGCTTAGCACAGAGGCTGGCACCTGTT
-AGACCTAAGAAGGATTGGCAACTCTGGACAAATCAGAGAAGGAGCGTTGTCAACCCTTTTCTCCTGGTGATGATGATGGT
-GATGGTCAATGTCCACTCCCAAATATCTATATTGGGAAGAGGTGGTTTGTAGGGTGAGCATTTGTCTTTTGAGTGTATAC
-TTGAGGGAGGGATGAAATTATGTTTGTTTTATACTCTAGAAAAATTGGCTAAAACAGCAAATGTAATTTTACAGAATGAT
-GGAGAGGGCATACTGAGGTGGGAGGCAAATAATAGAAGGAGATGTAAAACTGTCAACCTTGATCCCCACAGTGATGGGGG
-ATGATGACAGCAGGAGTAAGTTATGGGATGATTGTATGTTTGTGAACCTCAGTTCTTCTGCAGCATGAGCTGGCAGGATC
-CTCTCCTTGACCACCTCAGGTGACCTGCTGGAGCCCACTGGTCTCACCAGGAGAGGTCATCGGGCCACCAGACCAACTGA
-AGTAATAGTTCTTCTTGAGGACAGTCTCTAGCTCCCCCTCTATCCCATCCCACAGTCCAAAAATGCTACCCAGCATGGCC
-TAACCCAGAGTCTACCCCCAAATAAGTGATTCTGCAAGTTGCTAGAATTCAAAGATGCTCACACCCCAGAATTAGAAAAC
-ATCACTGTGGCAGTTTCAGGTTCTCAGCAAGCAGACCAAGAATGCACATGTGAGCTTCCTTTATTTCAAGTTAAGGATGC
-ATTTTCGGTTTTTAAAGTTCAACAATAATAAAATCAGTTGAAAGCCCAACTTCTAGAGCAGTGCTATTCAATATACTAGC
-ACTGGCCTGTGTGGCTATACAAATTTAAACTAATCAAAACTCAACAAAATTTAAAATGCAGTTCCTCAGTGGCAGTAGCC
-ACATGTTAAGAACTAAATGGCCACATGTGGCTAGTAGTCACCTTATTGGACAAGGCAGCTGTAGTACATTTCTGTCATCA
-CAGAAAGTTATGTTGGATAGCATTCCTCTAGAAGCTGCTTCCGTGAAGCTGTGTGCCAGCTTTCTAAGTCAAGTTCTGTC
-GATCCTATTTGGTAGAAAATATGATAAATGTTTTAGAAAATCACAAGAGGACTTTTATTTGGCTGAAATTTAAACATATG
-CATGCAATTTCTTAAAATATATTTTACATATTTGAAGGTTCAGTTCACCTTGGAAAGCCAAATTTCACATCTACAATATG
-AACAAAATTTCAACTTCCTGGAGCTCAGTGATAATTATGGATTATAGGTTAAAAATAAAGTTAATAACTCCTAACAAGAG
-CATGAGCAATGTAAGACTTTTTCCAGGTAACATTAGAAGCAAGAAATAACTAAAAAAGGACATTGCTTATTTTTAAGGGT
-ATTATCTCCAAGTACATATCATTTTAAAGAATAAAATTTTGTGTTATCTTTTTCAAAGCACAGATATTTCTTGTACATGT
-TAACCTTCTAAGCTGCACAATAAGATATGACATCGTTTCTTTCCAAGAAAAGAAGTTAGTTCACCTAAGAGAAAAATGAA
-TCAGCCTGGATCCTATTTTATTATTGGTCCAGGAGAAGCAAGGACCCTACCTGACTTCAGGGAGACCATCTGGGCTAGTT
-ATTAGAGCTGTTTATAAAACCCTGGCTCTCCTTCTCTAGGGGTGTGGGAGGGCTCACTTCCCCACTCCCTAAAGTAAAAA
-AAGGCCACATGACTTGGCTTAAACATGAGTAAGAGTAATGAATGTCTCTTCCAGAAGAAGCATTTAAGTAACTGTGCTTG
-ATTCATTCCCCCTTTCTCTCTACATTGACAGTCATGGAATCCCAAGTTGGAATCTCCATCAGCAGATAACCACTAGTGAG
-GACGATTAAGAAAGGCTCTTTTAATCTACATTGGACACATAGCAAGAGGAAAAATAAACTTTTCTTATATTAAGCCATTA
-TGAGCATGAGGATGTTTGTTACTGCAGTATAACATGGCCTTTGCTGACCAATACCTCATCCAAATCTAGGTCACATGGCA
-CCAAATGGCAACACGGTTCTGAGTCTTTTGTTTCTATGAATACAAAGTGAAAAAGCTATATGTGTACAAATCAAGAATCA
-GATAAAGGTGAAGAATCAAACTTGACGAAAGCAATCCTAGGGGCTGGGCATGCTGTCTCACGCCTGTAATCCCAGCACTT
-TGGGAGGCCAAGGTGGGTGGATCACATGAGGTCAGGAGTTCAACACCAGCCTGGCCAACATGGTGAAACCCAATCTCTAC
-TAAAAATACAAAAATTAGCCAGCCATGGTGGTGGGTGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGAAGAATCGC
-TTGAACCTGGGAAGCGGAGGTTGCAGTGAGCCAAGATCGCACCACTGCACTCCAACCTGGGTGATAGAGCAAGACTCCCT
-CTCAAAGAAAAAAAAAAAAAAAAGCAATCCTAGGTCTGATTTCCTACAGACACTAAACATAGAAAGAAGAAATGGCTCAT
-TCATGTGAGCACAAACAGTAAAGAGGTTTATTTAAACTCTGCTGTGAGCTTGGGCCTCCTTTCCTGCCTGGTTGAATTTA
-AAAATACCATATAGACTGTGTGTACCTAAGATGCTTTTCCTACAAGAGCCTTAAAATTTTCATTTCTCTCTTTCTAGATA
-TGCTGCCAAGAGAATTTTTTTCTTTAAGAACAAATAAACTAAAGAAATTAACATCCAGCTTGCTGAGTCACTTGCTTTCC
-ACTTGAATTTTAACTACAAGGATCTGAAGACAGCCTGTGTTAGGCAGAGAAAGAAAGAGACAGAGAAAGAGTCAGGGAGA
-AGAGAGGAAGAGAGATGTAGCTGGAGAGTCAGGGAGAAATTCAAAGAGATGGAGAGAGAGACTGGTTCTGGAAAGAAAAG
-ATAAGTTAAATAGAAAAAGGAAAGTAATCTTTGAAAGGTTTGTTTAAGACATGTATTTTCTTACTCTGTAGTGGGAGCGC
-TGAATAAAAATATTTAAATAAAAGCTGTAATGTGATTAAGGTTTGAGTTGGGGTTTAATCGTGGAAAGAGCAAGGTATTT
-AGAGTGAAAGATCTAACTTTTGTATTTATTTTTCATTTTTTAGTGTTTTCGCTTTTTTAATCCCAGGTCCTCTACCATTG
-ACTATCTGATGTTAACAAAATCAGTTCGCTTTTGTGTCTTGGTTTCCTCATCTATGAAAAGGGAATAGAAAAACTTACCA
-CATAAGTTGGTAGGGAAGACACAATTCTATAAAATATATTGGATGATCTGTGAAACCACCTGACACCAAAAGGGAATAAT
-AAATTCCCTTCTCTCTTCTTTTTCTACACCATCTCTTTTTAATTCTACCAGAAAGTTCCTTTCTCTATGAGGCTTCTTGA
-AGACTGGCTGTATACAGGAAAACTGTATTTCTAATTCTGCTATTTATTGGAATACTAGGTCAAGTTTTTCCTCCTTCTTA
-TTCTATTTAATCTTCACAATAACCCTACATGAGTTTATCTTCATTTTACAGAGAAAACAGAGGCTTACAGAGGTTAAAAA
-AAAATTCCCAAATCCACACAGATAGTCTTTTAGTAATCTATTGCCATAATAATACAGTATTGAAATTTCCCCCAAATTCG
-GCAGCTCACAACAACCATTTTGTGTGACTCATCAACCTGTGGGTCAACTTGGCCGTTCTGCTGGTTGAAGCTGGCCTCAG
-CAGGACACACTCCTGCAACTATAGTCATCTGGGCTTTGGCAAATCCCTTTAGTCTATAGCCAAAGAGCAATAAGTGAGCA
-GCAAGAAACTGAATTATCTCTGACCCTTTTATTAAATAAAATGCTGATCTTGGGCCAGCTAACTAACCTTCCAGAACCCC
-ATGCCAAGGCTTTCCTTTGGTCCAGTGCCTTAAACCCATGCAGTCCTGGGGTAGAGAAATGAGGAAGCCCATAATTCTGG
-CAGAAAGGCTGCCTCTCATTCCCAAATACCCCTGAGAGAGATGAATGATAGCAGGATGGAGCCTGCCAAGGGCACACAGA
-CAGGGCATACAGAATCGTCCAACCTCTCACCAATTCAAGGGCAGGGCAATTAAGAGGCCAGAACTCACCACAGCTAGAAA
-TTATTTACGTTAATGCTTTAGCACAATGTGGTCCACTAACCAGCAACATCAGCATCACATGGGAGTTTGTTAGCAATGTT
-GACTTTTGAACTCCATTCCAGACCCACTAAATCAGAATCTGAGAAGCACAGGTTCAGCAAGAATCGCACCAGGAGTATAC
-CACTGGAAAAGCATGTGTAGCCAGATTTACTGTATTAGATGAATTAACGCTTCAAGGCCCAGCACCTTACTGAGTTTCTG
-ACCTCCCACCCAAGCACTCAATACTTTCCCCTGTCAATTGGCCCTGCTCTCTGGGATGAGTGCCTGGTATTTTTGCTTGC
-TCCGTATGCATTTCCTTCTTGTTTGCCTCATTCTGATTTTTCCTTGAAAGGAGTTTCCTTCCCCACTCCTAGTCGATGTG
-TGTCAGGTTGACTTATCATGGCTTCTGGGAATGAATATATGACCCAGGTCTGACCAATTAAAAAAAGTAGGGATTTTGCT
-GGAACGATTGGAAAAGTGGCATGTTCTTTTCTGCTGTTGATGATAATTGGCTGAGTCTATCTGAGAATGAAATCAACACA
-GAGATGATGAGAGATAAGTTCCTGATGACATTGTTTGAGCACCTAAATCCAGCCTTGCTTGAAACTATAGATCTGATTCC
-AGATTTTTTAACTGCATACGCCAATACATTTCCTTTTATGCCTAAGTTATTGTGGTCTGGTTTCTATAATTTGCAAGCAA
-AATGGTCCTGGTCTGCAAAGCCACCCTATGTTGTAAGCTTGATGCCCCCCTCACAAGTTTTTGCCTCAACTTCCTGTCTC
-TCTTCTGTTTCCAATCACCTGTGACAGTCATTTTCCAATTTCCAAATTACGAAATTTTTACATATTATATTTGCTGTCAT
-AACACAAGTGGGAATTGACCCCAGAGACTTGGGATAGACACAATTCTTCAATAACATAGAATAGGCCTGAAGTGCTCAGT
-TCTGTCTAGAAGCTCACTACTCAAATATATACTGTGGGGGAAAGTAACCGCCTGATGGTTAAAAGGCTGGCCCCGTATTT
-CCTCCTCTTCCTCAGTTTCCTCATTCATGAAATCAGCAGACATTTTGGAGATTTACTTCAGCCCAGACTTTCTAAGACAC
-TCATAGTTAGGGGTTCCTGGTTTAAATAGATTGCGACAACTTAACATGCAGCTTAACATGAAACACAGATGGCAGAAAAA
-TAAAAAGGTGCCTCTATCAGTTACAAAGAAATTGGTTGGGCGCAGTGGCCCACGCCTGTAATCCCAGCACTTTGGGAGGC
-CGAGGCGGGTGGATCACCTGAGGTCAGGAGTTGGAGACGAGCCTGGCCAACATGGTGAAACCCCATCTCTACTAAAAGTA
-CAAAAATTTGCCCGGTGTGGTGGTGGGCGCCTGTAATTCCAGCTACTCAGGAGGCTGAGGCAGGAGAATCACTTGAATCC
-AGGAAGTGGAGGTTGCAGTGAGCCAAGATCATAGCACTGGACTCCAGCATGGGCGACAAGTGGGAGACTCCATCTCAAAA
-AAAAAAAAAAAGAAAGAAAGAAAAAGATTGGCTAGACCCTGTGTGTGGCATGACATCCTATTCCAACTAAACACAATGTT
-CTATTTTACAAATAAGAAAACAAGCTAAGAGAAGTTAATTGGTTTTCAAAAAGTCACACAGTACAGACATAGCAGAGGAA
-GAATGAGAACCTACAGCAGAGTTGAGAAGGTTCAACAGAATAACGGGTCATGTTTGGGCACTTGTATTCTGGAGCTGGCA
-CCTGGGTCCTGGCACTTATTAGCTGAATGTCCTTGGGTAAGATATTTAACTGCCCTGTGTCTCAGTTTACTCATTTGTTC
-AATGGGCATTATAATAGTATAAACATCAGAAAGTTGTAGGGGGTTAAATCTCTAAAGTGTTTAGAATGCTTGCAACTTAT
-AACATTTTATATGTGTGTTTATTAAATAAATAAAAATAAATCTGACTTCATGTCCAAAGTATATTTTTCATACCCTGCAG
-CTGTCCTGTACCAGAAATATCTCTTCCCACAAGATCTCTTTAACGACCTGGCAATGTGTGTAAAACCTCACCTTACTCAA
-TTCTTAAAATTACTCTGATTTTCTAGCTTGGTGAGAAGTCTCTAAATGCTTACTATGAATTAGTTACCTGATAATCTATC
-CTTAGTAGAAGCTATCTGCCGCAGCAGATTAGGTCACTAGGGCTTCTTGAAGGGAGAAAGGAATTAGAAAAAAAGCATCG
-AGTGGATGGAAAGAACCAGAAAGAAACAAACAAGGCAACACCTATTAGTTTATTCATGGTTGACCCAAGGAATAGATTGA
-AATACCAGATGCACCTGAAAAATAATTTTTTCTCACTCTGGCACCCAAGCTGGAGTGCAGTGGGCTGGGTGGAGGGGGGA
-GGTCATGGTTCACTCCAGCGTCAACCTCCCCAGCTCAAGCGGTCCTCCCACTCAGCTTCCCAGGTAGCAGGGACCACAGG
-CATGTGCCACCACACTTGGCTACTTTTTTAAAAAAATTTTTGGTAGAGACAGGATCTGACTGTGTTCCCTAGGCTAGTTT
-CAAACTCCTAGACTCAAGCAATCCTCCCGTTCGGCCTTCCAAATTGTTGGAATTACAGGTGTTAATCACTGCACCTGGCC
-TGATTTTTTAATTATCAAATCATGTTCAGAACTCACTTCAATCCAATTAACTGAGGATTTCTGGAAAGGTTACCCAGGCA
-TCAGTATTTTTTCACTGTGATAAAATACATATAAAATGTACTATAATAATTTACTTTAATAATTGTCTTGACAATTTTTA
-AGTGTAGAGTTCTATGGAATTGAGTACATTCACATGGCTGTGCAACCATCACCACCATCCATCTCTAGAACTCTTTTCAT
-CTTGCAAAACTTAAATGCTGTGCCCGTTGAACAATAACTTTCTCTTTTCTCCATCTTCACCCTGACAACCACTATTTTAC
-TTTCTGTCCCTATGAATTTCACTACTCTAGGTACTTCACGTAAGTGAAATCAAACAATATTTGTACTTATGTGACTTGCT
-TATTTCACTTAGCATAGTATCCTCAAGGTTCATCCACGTTGTAGTATGTGTCCAAGTTTTCTTCCTTTTTAAGGTGGAAA
-ATATTGCATTTTATGTATATGAATTTTACATATCCATGCCTCCATCGATGGACACTTGGGTTGTTTCCCTCTTTGGCTAT
-TGTGAATAATACTGCTATGAACACGGTGGGCAACTCCCTCTTCTAAACCTTGCTTTCAATTCTTTTGGATATATACCCAG
-AAGTGGAACTGCTGGATTATATGGCAAATTATTTTTAATTTTTCAAGGATACATCTTACTGTTTTCTATAGTAACTACCA
-TTTTACACTGCCACCAGCAATGCACAGGAGTTCCAATATCACTACATTTCTTTCAATACTTGTTATTTTCAGGTTTTTTT
-CTTAGTATCTATTCTAAGGGGTGTGAGGTGGCTTCTCATTGTGGTTTTGATTTGCATTTCTCCAATGATTAGTGATATTG
-GACATCTTTTCATGTGCATATTGGCCATTTGTATATCTTTTAGGAAAAATATCAGTTCCAATACTTTGCCCATTTTTGAG
-ATGGGTTGTGTGGTTGTTGTTGAATTATAGCTTTTTATGAATTCTGTATATTAATTCTTTATCAGATATGCTATTTGCAA
-ATATTTTCTTCCATTTTGTGGGTTGTCTTTTCACTCTATTAATTATTTCCTTTGATGCCTAGAGATTTTTATTTTTGATG
-TAGTCCAACTTACTTTTTTTTCTTTTGTTGCCTGTGCCTTTGGTATTTCCACTTTTTTTGGCTATTGGACATAATGCTGC
-TATGAACATTTATGTACAGGATTTTTTTGATGGATATGTGTTTTCAGTTCTCTTGGGTTTATGCCTAGAAGTAGAACTGC
-TGCATCATATGGTAGCTCTGTGTTTAAGTTTCTGAGGAACTGCAAAAATGTTTCCAAAGTGGCTACACCATCTTATACCT
-TACCAACAATAGATAAGTGTTATATATTCTCCACATCTTTACCAACACTTGCTATTTTTCATCTTTTAGATTAGAGATAT
-CTTGGGGATGTGAAGCAGTATCTCCTTGTGGTTTTGATTTGCATTTCCCTAATGACTGATCATGTCAAGCATTTTTCATG
-TGTTTATTAGCCATTTGTAATCTGCTTTAGAAAAATAATTCTTAAATTTTTTTCTCATTTTTAAGTTGTGTTGTCTTTTT
-ATTGAGTTGTAAAGGTCCTTTAAATACTCTGCATAGAAGTCCTTTATCAGATATATGATCTGCAAATATTATTTTCCTTT
-TTGCTTTTTGCCTTTTCATTTGTAAAATTGTATCTTTAGAAACACATTTAACTTTTTTTTATTTTGAGGAAGTCAAATTT
-ATAATTTGCTGTCATTTGTATTTTGGTGTTCAATGCCTGATCCAGGGTCATAAAAATGTGCACATATGTTTTATGCTAAG
-ATTTTTATAGTTTTAGCTCTTAAGGTTTTGATCAATTTTGAGTTAATTTTTTTCTATGATATGAGGAACTGGGCCAACCT
-CATTCTTTTGCAAATGAACCTCATTCTTTTGCATATTTTGCAGTTTTCTGAGCATCATTTGTTGAAAATACTGCCCTTTC
-CCCATTGGTCTTGGAGCCTTTGTCAAAAATGATTTGACCATACTATATGCAAGCATTTATTTCTGGACCCTCTATTCTAT
-TCCATTGGTCTGACTTTATGCCAATACTACACTGCCTTGATTATGAAGCTTCATTGTAAGTTTTGAAATCAGGAAATCTG
-AAACTGCAACTTTATTCTTCTTTTTCAATATCATTTTGGTTATTTAGAATCCCTTGAGATTCTATATGAATTTTAGAGGG
-ATTTTTCTATTTCTGAAAAAAAATGTCAATGAGATTTTGATAGGAATTGCATTGAACCTATAGATCACTTCGGGTAAGTT
-AGTTTTTCTATATGGTGTGAGAAACAGATACGCCATTTTTTTGCATGTGGATATCCAATTCTTGCAGCACCATTTGTTAA
-AAATACTATTTTTTTCCACATTGAATTCTGTTGTCACCCTTGTCAAAAAATAAATTAATCATAAATGAAAGGGTTACTTC
-TGGACATTTAATCTGATCCCAGTTATTTGTTTTTATGTTGGTGTCGTAAAGTCTTTATTACTATACCTTTGTATTAAGTA
-TGGAAATGCGGAAGTGTGACTCTTCCAACTTTGTTCTTCTTTTTCAAGATTTTTTGGCTATTCTGGGTTACTTGCATTGC
-TATATAAATTTTAGAACCATACTGTTTATTTTCCCAAAAACATTTCTGGGTTTTTCAGTAAAGTTTTTGTTTTGTTTTGT
-TTTGTTTGTTTGTTTGGAGATGATGTCTCGCTATGTTGCCCAGGCTGGGCTTGAACTCCGGGACTCAAGGGATCCTCCCA
-CCTCAGCCTCTTGAGTAGCTGAGATTACAAAGGTGAGCCACTGTGCATAGCTGGGAAGTACAATTAATGTGATAAGTTTT
-TAAAATCTAGTTCAAATTAATACAAACTTGATTTTGATAGTACACCAAAACTTTGCTCTGACATAGCTCTATTCCCTCCT
-CCCTCCTTGGTGCTTTTATTTTCATACAAATTACATCTGTATACATTATAAACTCATCAACATAGTTTTACAATTATTGC
-TTTATGTAATTTCGATCAGATAGGAGAAGAAAAAAATACAAACCAAAATAACACAATAAAGCTGGCTTTTATATTTCTCT
-TTGTACCTACCTTTACCAGTACTCTTTATTGTTTTATGTGGATTTGAGTCACTGTCCAGTCTCTCCATTTCAGCTGAGGC
-ACTTCCTTTAGTACTTACAGGGAAGGTCCGTTAGCAACAAATTATTTTAGTTATTGTTGCTGTTTTCCTTCCTTTTGAAG
-GATAATTTTGTTGAATATAGACTTCTTGGTTGAATGTCTTTTTCTTTCAGTACTTTAAATATGAGCATGTCATCCCACTG
-TCTCTGTGGTTTCTAATGAGAATCTTAATCTTATTAAGGATCCCTTGGACATAATGAGCCATTTTTCTCTTTCTGCCTTC
-AGTATTTTCCCTCCATGACTTTTAGTTTTGATTGTAATGCACACAGATGTTGATCTCCTTAAGTTATCCTACTGGAGTTT
-GTTGAGCTTCTTGGGTGTTTAGATTAATGTTATTCCTCAAAATTTTGTTAGTTTTGGCCATTACATCTTCACATGTTCTA
-TTTACCCATTTCTCTCATCTCCTTTTGGTTTTCCTTTATGCTGACTTGGTATGCTTGATGATGTCTCACTGATCTCTGAG
-GCTTCATTAGCTTTTGTTCATTCTTTTTCCATTTTGCTCAGACTGAATCATCTCAATTGATTTATCTTTGAAATTGCTTG
-TTCTTTATTCTGCCACCTCCAATATGTTACGGTGCTTCTCTAATGAATTTTTTTATTTCAGTTATGATATTTTTCAACTT
-CGAAATTTTTATTTGATTATTTACAATACCTATTTATTTATTGATATGCTCTATTTTGTGAGACATCTTTCCCATATTTC
-CCTTTAGTTCATTGGACATGGGCTAGTTCATTAGTTCTTTAACACATTTATAAGAGCTGATTTTAAGTCCTTGTCCAGAA
-ATTCTAATGCCTAGGTATCCTCAGGGACAGGTTCTCTTGACTGTTTTTCTCCTGCATATGGGCCACATTTGTTTGTATGT
-CTTAATATTTAGTTAAGAACTACACATTTTAAATAATATAATGCGGCAATTCTGGAAATCAGATTTCTACCTTCATCCCA
-CAGCATTTGTTACTGTTGCTATTTGTTACTACTGTTGTTACTGTCCCTAGTAACAATTTTTGTCTTAAATTCTATTTTGC
-CTGATATCCACTTTATCCAATTCTCTTTGATTATTTGCATTGTATATATATTTCATCTTTTTTTTTTTCAATCTATTTGG
-GGGAGTTTTGTTTGATTGTTGAGTGATTTTGCTGAACTACTTTGGTAAGTCTTCTTTATTGTGTATGGCCCTGAAGTCTC
-TACTCAGCTAATTTAATGTTCAGCTCATGTTTGGACAGAGATTTCCCTAAATACCTTGCACCAATAAGGCTCACAGTCTT
-TGCTGAGAAGTTCTGTGTATGTATTTTTTGGAGTACTCTTTCAATGCTCCACCAGGCAGGTTACAAAGCTGCCTTAGTCT
-TTGCTTCCTGATGATGCAGTCTCAGGTTATGGAGAGGTGAGAGAAGAGGGCCTTCTCAGATTTGGGGCATGCACCCAGCT
-TTCTGCATGTGCATGGCTTTCTAGATTCCCAGAAATACGTGAGAACTTTTGAAAACACCCTATGAACATCTCAGTTTCCA
-GCATTTCCTGTTATGATTTTTGGTCAACTTCTTATTTGTCCCAGCTGTTACCACTGCCTCAGGCAGCTGCTATGTGAAAC
-ATTTGATGCTGATTGTTTTTGACTAATGCTTTGGGGAGATAATGTTTATACTATGTGAGTTCTAAGTTACCTCAAATAAA
-GATAAGCTTCAAGAGTGGTAGTTTTTAGGGAACTTTTTATTTTTTATTTTTACTTTTTTTCTTTCCAACTTCTATTTAAG
-ATTCAGGGGGTACCTGTGTAGGTTTGTTGCATGAGTAAATTGCATGTCATGGGGGTTTGAGGTATGGATTATTTTGTCAC
-CAAGGTAATGAGCATTGTACCCAATAGGTAGTTTTTTGATCCTCACCTTCAGGAAATTTTCAGACAAGTTAAATAGTGAC
-AATTCTCTCTGGATGGGATTCTGGGGAGCTCCAAATCAATTCTGTTACCCTCCAAATGGCATGTAGGTCCCTGGTTTTCA
-AGGTTGCTATAAAGCTGCAGAAAGGGGAATGGCAATAGGGCAAGTTAAATGCCACAAAGTTTCTTGTTCTTACCCAAAAT
-GTAGACATTTTTCTTGAATAAATGCTCCTCAGATTGTTGCAAGCCTTTGGTTAATTTCCAGATTTCTAAACAAAAAAATT
-ATTTTAACAATTTTTGCTAGTGTTCTTGTTGCTTTTATGAAGGAATAGATTTTCAGAGGTCCTTATTCAACCATCCCCAA
-AGTGGCTCTTTCATAATCATAATTTTATTATTAAAATGTTGGCTCCAACAGACCTCCTGACCAGATGTCAGCTCTCATGT
-CTCATATTTCCATTTTAATCTCAGTATCTTTCCTTAACATTGCCTAGAAAAACACAGGGGTTAAAAATACATTTCAAGGA
-ATCTTTCTTTTCTCCACTTTAAAAATCAATACCGTTTTGTTATACTGAATAAGAAAGGTTATGGAGTTTCCAAAGCATTA
-TAGGAGAGGACATTGAAGACAGAATTTTGCAGCCCACCCAAACCAGGAGAGCTTGCATAAAAGCTTTTTGAAATAATTTT
-GTTACTGCCATTCTTTTAAAGAAGAGTAACACATTCACAGGAAAACAATAATGAAGATTGTTTAAATAAAATAAAATCTT
-TTTGCATCTTACTCATTATCCTTCCCAAAAGTAACCATCTTTAAATACTTCCTCTTCAAGTTATCTTTGGTGTTTCCAAC
-CTTAATTTTAAATAATATCTTTTTATTTCTTGATTTACCAATTTTAAATAATATATAAACATCCTTTATGAAAAAACTGA
-GAACGTTATCTTGTTGGCTCTGTCTCCCTTATTACAACCACTGAACTTTGGTACTTCTATTACTTTTTGGGTTTCTGTTG
-GCTAACTTTAAAATAATACATATAACTTTATATATGATTATACCATCAGTAAACTTTATTTTTCCTTTTATGAACTTTAT
-ACTGATTATTTTAATCCTTTACCATATAAAATGAGTAAATTGCGGTGTCTGCATTATAAAGTCTCTTTACATTGCCCCTC
-CTAAGCCCTCTCCTTTACTTCCCACATCTGACAGCTCTCTCACTACTTCTATATGTTAGGTCCCATAATATTCAGATTCT
-GTTTGGTAAATATTAAGTCATTTATTCTTGGTCTACAGTTTAATTTAAACTTCAAAGATCAAAAAAGAGCATTTACAGCT
-TATGATTATATAGATAGTATTTATTGCAGAACCAGGTAGGGTGGTAAAACTTTAAAGAAAAAATGTCTCTGTGGCACTAA
-ATTTTCACACCAAAAAAGAAAAAAAAATTGAAGATAAAGGACAAATAAAAAATATTTCCTTAAACGCCATCAAAAAATGC
-TCAAAATTGTGTCGTATAATTGACTTCAGATTTGAACCAAAAATATATGATATAGCTTTTGTTTTTCCTGTCATTATAGG
-GGCATTTTCTTGTTATTACTGATAGGAGATATTTATGCCATTGTCTGGTTAATACTATAATTAGCTTTTAAACTATACTA
-TTTGTCAAACTAATTTTACTCTGATTTATTACCGTATCTGTTTCCTAGCTTTGGTCCTAGGAAAAAAATGCTACCTTAGT
-TCTAATATTTCCTAAGTTCCTGGTCTTCCTCCTTTGCATAGATTCCTTTGTGAGTTGTATTGTTAAGGTAAAATCCTTAG
-AAAATATTTTTATTTGCAAAAAATGTTCATGGGAGGTAATTGTCCTGAGTCTGTCCACATCACATCTAGAAATGTTTTCA
-TTTTGCCCTTCGCTCTTTATTAATATTCTGGCTTAATATAGACTTATAGATGGAGATTTATTTTTCTTGCTGTATTTGAA
-GACCTGTTCCATTGACTCCTACCACCTGAATTTGTTTTGAGAAGTCCAATTTTGCTGTAATTCTTCCTCCTTTGTAGGCG
-ACCACCTCTTTCTTCTCTATGAAGCTTGTAAGAGCTTCTTTAGGGAAAGTGGGAAAATATGCAAAAAAAAAGAAGCATAC
-TCATTATGTGGTACTACTTACAGTGAACAATATTTACCTAGATATATTCATGGCAGAGTGACTATTTAACACACAGTTGT
-GTTATTGACAGGATGGGGAGAAGAAACAAGGGTGATGTAAGAGAGCCTCATTATTAGGAAGTCAACTGATGTCTATTTTA
-TAAATCAAGAATTAGCAATGTCTGCATATTATTTGGAAACAAAAAAGAAATTAACCAAAGCAAATGCAAATGCCATTGAA
-AACCATTGCCTCTGGGAAATATAATATAGATGTAGCTATAAACACATATATAATGTCAACAGGAGAAAAGTGCTATGAAG
-AAAAATAGTGCAGGGTAAAATAATTTTAAAAAATAGAGGTTAGCAACTTTAGCGAGTTTAGATTGTCAGAGAAGGCTCCT
-TTGTAAATGTGGCATTTGAGGAGATGAGACATGAGACGATCTGGGGGAGGCTATTTCAGGTAGAAACACTAACTAGTGCA
-AAGGTCTTGAGATAGGAGTGTGCTTGGTTGTTCAACGGACAGCAAGAAGGCCAACGTGATTGGAATGGAGAGGTGCTGGG
-AAATGAGTTCGGAAAGGTGGCCAGGAGCATGATCTTGTAGAGTAAAGGAAGAACTTCTAAGTGTGATGGGTGACATTGAA
-AGTTTTAGAGAAAGGAAATATGATCAGATTTGTCTTTTAAAAGTATCACTGCAGCAGCTATGTAGAGGAGATACAGGTGC
-TAGAAGACAAATTAAGAGGCTACTGTAATATCCCAAGAGAGAAATGATGGCGACTTAAACTAAGGTGGTATCCGCGGAGG
-TGCTGAGGAGTAGTTGGATTTGAAAAGTATTTTGACAATAGAGCAACAAGTGTTATTTATTATGTGTGAATATAAAAAAT
-ATCCTTGAAATAATATAAGATTTTCATCCTCAGGGACTAGGAATGTCAATGCCGTTCGCTAATATGGAGAACTAAGATGA
-AGGGAGCCTCTTGAAGTTAAAAAATCTGAAATCTGCTTTGGATATGCTAAGTTAGATGTCCATATTTGCCTTATGCTTAA
-GTACAGATATTGAGTAGAAACTTGTGCATACATGATGCAGTCCAGGAGCAAAATTAGGGCTGAATATGTAACATAAAAGC
-ATCAACACATAGACACTACCCAAGGCCTTGGAAATGGATACACTTACCAGGGAATGATTATGTAGAGAGGAGAGAAGTTC
-CAAGTCTTGAACGCTCGGAGTTGAGAAAATGAAAGCAAAGCCAGCAAAGGAGAGTGAAAATAAGATGCTTGTGAGTATAC
-TAGTTTGGAAGATGGGACATCATGAGAAAATGTTAATTAAGAATGTAAGAGGCGAAGTAGATTCTTGCAGAGTATGGAAC
-CAACTTATGCATATATATGTTCAGTTTGAGGTGCCTTTGATTCAGCCAGATAAGAGTGTTCATTAAGAAGCTAGGAATAT
-GACTTTGAAGCTCACAAGAGTGAGTGAGACTGGCAATAGGAAATTAAAAGTCAAATATATAAAAAGATGGTTAAACTCAA
-GGGTATGAAATCAGATTTTTTGAAGACAACATATGAAGGAAGATATAGAACACTGAGTCTCTTGAGGTACCATGGTCAGT
-AGAGAAGGCTGAAAGACCAATCAGAATTCTGCATTTTCTGATGTAGAATTTAGAGTAGGAAGTTTTCAGTACCTATTCTA
-ACTCCATTACCAACTGGCTGCATGGTATAAGATAATCATGTATTAATTGGGAATTAAAATAATAATTACTATTATACATA
-CCTCAGAGAGTTGTTGCAAGAATAAAATGAGATCATGTGTGTGACAGTTCTTTGCAACTTTCGTATTTCTTTAGCACAGA
-GCTATATAAAAGAGAGCTATTTAATTTTTTTCTCTTTGGCTTAGAGCACAGAAGCTTTCAGGGTGGAGAGTCAGGACAGG
-TTCTATGGACATATGGAGCTCCCAGGGGGGCTTGTGCAGGACTCAAGGAAATGTCCAGCTTAACCTGCTGGGCACAACAA
-TTTTGCTGCTTCAACCCATCTGCTATGGAAAATGAGGAGCCAACAAAAAAGGGAGAAACAGAGGTGAAGGCACCTGATAA
-TGAAAGCTTTAAGAAAGGGAAGGGGTAAGTACATGCCGTCAGGTGAACCCAGAAGTCAATAAAGATGAAAAGTCCTTTGG
-ACCATGACCAAGAGATTATTGATGCAATCTGCTGATGTCTTAGAATGTGCCTTGCCTAGGCTGGTGCCTGTGAGCTGGCA
-GAAGTGTGATGCCCTTCTCCGCTAGTATCAATAAAATCGCACGAGATATTCTTGCCCCATTCCCAGGTATATCCTGAGTC
-ATTCATTTCAACCCAGCTTAACCCCATCCTCACCCTCAGAGTTCTTCACCCTTGGAATCAATTCGTGTTGAAGACCTCAT
-ATCATCTGCCTCAAAACCACTGATCCACATTGCCATTCTGTTCTGACCTCTGGCTGACTTGCTTAGGTATATTTTGAGAG
-CATTTTCTGCCCTGATTCTTATTTAAGCTGTTTATTGGATATTGATCTCTGAATTCCCTCCTTGATTGTAATTTGAACTC
-TCTTCCTTTGAATATGTTGTTTCTGTTCACCTCAGGTTAACAGCCTAGACTTCTTTCTTGAAATTCGCCACAGCGAAACC
-TTGTGATTCAGCCAACCAAACCAGTAATTCATACTCATCCCTCTAGCAAACGAAACCCTGAAGTTGCTAATGAGAAAAGG
-CATATGCAAGCCACAGTGTGTTGAGGCAGAGAAGGTAGCTGCAGAGGGCAGAAAGGAGTCTGATGGAGCTGGAGGAGGCT
-GTACTAAAACATAGTGATTATGAGCTTGGGCCCTGGGGTTCAAACCCCAGCTATCCCATTTCTTAGCTGTGTCCTTGGCC
-TGGTTATTTAACCGCTCTAACCCTCAACTCTCTACTCAATTTTTCCTAGACCCCAGTGCTAAGCATATGGCAGGTGTTCG
-ATATTGAGTAAATGAATAAGTTCATATAGATGAAAAAAACAAGGCCCAGTATGATTGATACATATCTAATTAATAGCTAA
-TGAAAAAAATGGCAATCCTCCATATTAAAGCCAAGCTACATGTCATTTCTTAGAGAAATAAAGTTAAAGTCTCATCAAAA
-TGATAGATTTTATTTAGCCAATACTTCATAGTGCTAGACATGACACTCAGTGCTTCATAATTTCCTTGTGTATTTGCTAT
-AATTATTGTCTCCATTTTACCTATGAGATAATTGAGATACAAAGAGGTTACAGAACTAATATGATTCCTAAAAGATTTAC
-TCAAGGAATACTGTGATCCCTAACAAATAGCCTTTTTGAAGTGTACTAATTTGGACTACCATTTTCTCTGCCTCTCTGTT
-CCTAATTGTCACAGGTTCTTCCTCCCTACTGGACCACAGGCGTGTCTCAGCATTGGGAAGGGTCCTAGGATGCATTGTAA
-AAGAAAGTCTGTAATTTTGGTGCATCAAGGAACAAAAGTGTGGAAACATCCAGCCTGTGGCTGCTGGACACTCCCCTTCT
-TCCTTCTCACCATACTGTCTGTAATAAAGAATAAAGTGTTATTTAATATTCTGAGTGTACAGTCCTATTTTTTCTTAACC
-TGGCAAACCAGAAACAGCAACTAATATTCCTGGTTCTCTTTTTACCTTTCACAAGATCTATATCTACCTTAGAGGCTTCA
-GGGAACAAGAACAGCCTGGATAGTTTAAACCTAGAGTTAAACTACTCGAGGCATTTTAAGGTACCGCTACTTCACTATAT
-ATAAATGGGGTGGGGGGCTGGATTAAGGGCTAGAAGAATATATGAAGAGAAAGTGGCAAGCAAACCACTTGGAAAGCAAA
-CCAAGGAATCAAAACAGTTGCTCTATCAAACTGAATATTCTTGCGCAGAACTGAATATTCTTTGCCCTCACAGTGTTTTG
-AAACATTGTCATAGGGTGCCAGGCATGTCCCAAAGGAGGACCCTGGAGAGAGGGCTTCTGAGCTGGGCTATCTCTAAACT
-GCTTCCAAGTTGACTTTGGAAAGATCACATGGGATTTTAGAAAAGTTATTATTATTATGACTTATAAAATTGTAGTTATT
-GAGTCAACTATGAATCTTGCACCTTACCTTGGAGATACAAGCTAAATACCTTGGACCTAGAGCTACTGCAAACCAGAATA
-CTTTGGGGCATAATGTACCAAAAAAGCTTTCAGAGGCTTGAATTATCACAGTGTAAATATCCATCTAGCAGAGCAGGTAA
-TTTTCTCGTTACTCATCCTAAGCATTAGATACTCTGTGTGTTAGTTCTTTGCAGAAATAACCCATAGCAGCTGAACCATT
-TTGGAACAAATTTTCCATCACCTTCCTTCCCTGTGTGGTTCAGGCCTTTGCAAACCCTGAGTATCATGAATCTGCTGGTT
-CTCTACTGGCAAAGATGATGACGTTTTCTTGTTTGTTTTTGTTTTGCTTTAATCATGCCGTGAGAAAATCCTAAGGGAAA
-AAAATCTCATTATCCTATTCAAAATACATTTAGGGTTATCTGGTCATCCCTAGCAGATTTTTATGTACCCAATGTTTATG
-TATCTCAAATTACACTCTGTTACCTTTCCCAGAGCAAGATGAAGAACCTCTAAGAACCTCTCAAACAGCATCATTTTCAC
-AACAAGCACTAGCAATGGAAAACATTGTCACCACCACCAGCTAATCTTGTAGGGTCCATGGTATTTTCTGTAATGCCTTG
-AAACAGTCTGCCTCTCTCTTCTTGTCTGTCATTTTTATAGATGTCAGTGTGGGGCATCAGCAGTTGAAAACTCAGAATAC
-CAAGCCAGTCCTTCCCTGTGACTGCTACATAGCTTTTGCCTGCAGGATAAGCCTCCATCACTGACGTAGTTGCTTTTTAA
-CTTCTTTTTTTTTTTTAACTTGGAAAATCCCCCACCTCCTCCATTCCTTCACAAAACTTTCTGCCTGAATGATTTCTAGT
-CTGAGGGCCATACACACATTTTTTTTTCTCCCTCTGCAGGTTTTTTTTTCTCTTCAAACTTCCGCATGCTGCCTTTTTTT
-AAAGTGTCACACTTTGGAAAAAATTCTGACTACAAAGGATTTTGCAGTACATTGCATTCAAACCCCTTTCCCCCTATTCC
-AACTTGCTTTATAATGAAAGTAAGAGCCATACTCAAGAGACTTTTATTGGCAATTAAGTATCTAAGGACTTTGCAGATTT
-TCTTCTTTATTGTATGGCAATCTTAAATGTTTAATGAATATTTAAGTAAACAAATTTCAGCAACATGCCTTTTTTAGGAA
-TTTGGCTTTAATTAACATCCAAACACTGTTAATTATTATGGCAAAAACATCAATACGTCAAAAAAAAGCCTTCAGGCCAG
-GGAATCTTTAAGAAACAATTATGTCTACTAATTTCGATTAAAGGTATCCTTTATTAAATTCTTAACAACCCGTCTCTTTC
-TAAACGCAGCGCCTTCACAACTCTTCTTCCCTTCCCCCTACCCCGCTTCCCTCCCTCCGCAATGGAGCGCAATCAAAGGC
-CGTATTATTGCCTAAGCTTGGCTCTCAGGCCAGCTAGGGATGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTG
-GTGGGGCGGGGGTGGGGGGCGAGGGTGCAAGGGGAGAGGTTGTACGCCGCTTTTCCGAACCCAGCTCTAAATGGTTTCTC
-CTAAGCGAGACAAGGATTTTCCATAGCCTAAAAGAGGCCATCAAGTTTTAACATTGCGAGGCACGACTTCTAATCGCATC
-CTTCCCGGAAAAGTACAAACAGTTCCTCAGACGAGGTCCCCCACCTCCCACGCGCTCCCCAGCCCTCCCTCCCTGCGGAG
-AGCCCCGCGACAGCCTCCCCAACACCTGTGAATCATCCGGGAGGCTGCCACCGCCGAGCGATCCGCGCACCACCCCCTTC
-CCGGGCCCGGGCACGGCCAGGGAGGACAGTTAGGGTTGTTGCTTTATAATTATCACTTTTAATCTCTAATACGACCAGCA
-CAAGTAGCCTTTGTCTCCCCGCCCTGATTTGAGCATCCGAGGGCCCCCCGAGGCAGCCTGCACGGGTACCCCGGGGTTTG
-CGCACTGAGTGAACCCCCAGATTCGGCCGTGTCCCAGCCGTCCTTGCTCTGAATCCCCCACCTCCTCCCGGCCGTTTGGA
-CGGTTCCCTCGGGGCGTCTGTGCCTCCGTGGGGTACCCCTAAGACACCCAGCATGAAACCCCAGCACCGACTGCAAATTC
-CACCGAAAGCAGAGTCATCCGTTTTTGCCCTCGGCAAACAACTCAACTTCAAGCCTCGAGTCCTTGCAAACCCACGCTGG
-CTGGGCTAACTCCGCTTCCCTTCTCCTTCCCCCGACTCCTGCAACAGCTCAGAGAGCCTGGCTCTGACGTAGTTCAAAAT
-AACGTGCGCCAGCCTCGCTGCCCGGCTGACCACAGCAACGAGAGCCACAAGCCCTCGACGCTGCTTCGATAACATGAAGC
-AATCACTCATAAAAATAGCAACCCACGTAGCCTGGCCATATATGGAGCTGGCGAGGGTGGACGGGGATGCCCCTACGGAC
-CCTCTTCGGAGAAAACAAATCGCCGCTGAAATTTCCCCCACCCCTCCCATCACTACCTTTTACCCCTCCTCTGCCTTCCC
-CTCTCCTTAGATGACTCAACCACAGATTCCACTGAAAGGGGGTGGGGGTGGGGGTGGGGGGGAATATATACACATACACA
-CAAATTATACATATATTATACATGTATTATAAAATATACACACACATACATATATACATACACACACATATACACATATG
-TACACACACACGCACACACACCAAAGAACATCAGGAATGCAGTTGCGGGATGAACGCGTTTGCCCAAGACCGAGTGTTAA
-AATGGAGTCATAAGAGTCGCCCCGTGCGGGTGTTTATAGAAGGTGAAAACACGCAGGTTTGCAGGCCAGCGCACTGGGAA
-CCGAGTCAAGCGCGCCGCAGCCCGGGCCCCGCCCCCGCCCCCGCCGTGCCCCGCCCCCACTTCCTCCCGCCCCTCGCTGG
-GCGGCTATTAAAAGCTGCTGACGTCAAAACGGACGGCCATCTTTGATGAGGGCAGAGCTCACGTTGCATTGAAGACGAAA
-CCTCGGGGAGGTCAGGCGCTGTCTTTCCTTCCCTCCCTGCTCGGCGGCTCCACCACAGTTGCAACCTGCAGAGGCCCGGA
-GAACACAACCCTCCCGAGAAGCCCAGGTAAGAACCCCCCTCCCCAGGTCGTGGCTCTGGCTCGGGATGGCTGCATACCCA
-GAAGGGACAGCAGCTGGGCAGTCCGAGTGGGCTTGGGTAAATACAAGTATTGGTGCACTTAGGGTGCGGTATTCCGTGTG
-TGCACGTCTGGTGGGGGCTTTATAAAGTGTTTTCGAGGTGAGCTGCTGGGGAAAAGGGAAACGGGAGCCCTGCAAATGGA
-GCGACGGGGAGGAAGAGCGAGGGTACGTACCGAATAATAACTTACTCTTTTGAAACAGTAGTGGGACCCCCTCTTTCTTC
-CATTTTGCGATGCAGTTTTCAGAGATATTTAGGCTGTTGAGTTTTCCTCCCCTGTCGTTCTAACCCTATTATTATGACTG
->21
-GGAATGTAGGAGGGTAGGGAGTGGATATTTTCTAACCTGGAAAAAACTCATTTTACCCTATATAATTTTTTTTAGCAAAT
-TCCTTCTTTGCACTTACTCCACAATCTTTCCAAATTCTCCCAAATGCTCAAGCTTTTAAAAAACAAAAGACAGAAAGATA
-GCAGGTTATTAGGTTTTCCACCAAACCTTTTCTTTCTATTCCTTTACATCAGTGAGCTTAGAATAACTCTGCTCCTGGAA
-CTGGGAAAGGGACTTGGGAAAAGAAAGAAAAAAAAAGCTCCCAAAGTTTAGCATCACAAAACATTATAGTCACTGCTATT
-TTATTATTTATTTATTTATTTATTTACTTTTGAGATGGAGTCTTGTTCTGCCACCAGGCTGGAGTGCAGTGGTGCGATCT
-CTGCTCACTGCAACCTCCGCGTCCTGGGTTCAAGTGATTCTCCTGCCTCAGCCTACTGAGTAGCTGGGACTACAGGCGTG
-TGCCACCACACCCAGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCACCGTGTTAGCCAGGATGATCTCGATCTCCT
-GAATCTGTGATCCGCCCGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCATGAGCCACCGTGAGTGACCCTGCTTTGTA
-AGTTTTACATCATATATCCCCTGTGTTAGACCAAGAGCTTGTAAAAGCCAGAAGACATACACCATTTATCGTTCAATTAG
-AGATGTTCACTGATAAAACTGATTCTTCCATCTGAGGGTGGTAATTGTAGTTACAGTAATGTAGATGACAATCTAAGTTA
-TGTTCTATAAACTGTGTCACTGACATCTCAATCTACAGCTAACTTTGATTTTTTAAAAGCAGAGGAGTGGGTTGTATAGG
-TTTAGAAATACATCCATCAAGCTAGTTAAGTGAGATGGATTCAAGCCTTCAACTCACTGGAATATTTACCAAATTGACTA
-TTCATTAGCTAAAGGAGCCATATAAACAAGGTACTTTTTAAAATTCAAAATTATGTAAGGTTTTATTTCCTTTTTATGTT
-GTTATGAATTGGATTGTAGAGGTTATAAGGTAAAATAAGATTACTTTTACAGTAAAACATACAACACATTGTCGCAAGAG
-GGCAGCCTTTGAACACGAATTGCTTCTCAGGCATTCCTTGAAATTTTGAGACAGTTACTTTAATTAACACAACAAAATAA
-TAAAACACTACAGAGGATCTAAGAAGATACTTTGACTTATGCATATTGTTACTTTTTTATTACTGCTAGTGGAAGATGTA
-ATCGACAAGGAAGGTAAGGGCTGAATTTGTTTTATGTAAAAAGACAAATTTCTTTGGGTTTTAGCTTTCAAACATCAAGA
-TAGTAGGTCAATGTCTAAATGAGTGTATCAAAGTTCTCACAATGGCACATGTAAATTCACCTCTTGTCTACCCAAAACTC
-TAACCAAGCAAAGGCAAGTTGGAAGAATCAGACAAATGTAAGTCCCTAGGATACATAAATGCCACGGGATTTTATGTTTT
-TAACTTTCAACCTCCTAAGTTTCACTAAGAGACATGTTATTTGGAGAGGTTGCTAAAGTGTATTTGTATGATGTCTCTGT
-TTACGGTTGGTCTGGACCTCTTTCTGTCCAGTGGTTGCCCTCAACTGATGAGAGTCACCTCTCTAAAGATCATGCTTACG
-TCCCTGGAGCAGTCCGCAGCACTATCAATGTCTGACGTCCACCTTTTTCCAATTAATATTTCTGTACTTACTGAATTGGA
-AAACATACAGGTGTTTTTTGCCTGGTCACTTGTGGTTTTACAACACTCCCCCCGCTTCCCCACCACTGCCCCAGGTGATT
-TTGATGCCAGCCAAAGTGTGAGAACTACTGGCAGCTGCTGGCCGACAGCAGCAAAGGCCCAAATCCTCTGTGTGACTTCA
-AGACCCGTATCTGGTTTTCAGCCATATTTCCTTCTCCTTCTCACAGCTGAGTCCACTCCTCCTCCCTCACCACCTGTAGG
-CTATGCTTTCCAGCCTGTGTCCAGGATTAGTCCTGATGTAAGGCACGTGGGGTTTAAGGAGCTCTCTCTTCAGTCTTATT
-TCCACACCATCTCTGACAGATATATTCCAGTTGTAATCATGGGGCTACCTCCTCTTGTTTCCAGTCCCAATCTCGTTTTC
-TCTATCACATTCTACCTTGTAATAACCTAAATCTTCTGGTGGGCAAGCTTCTTCCTCAATCAAATTTGTGTTTATGATTG
-TGTTGGGGATTGGCATAGTAATCCAGGTACTGCTACTGCCTTGAAAGCGGAGACTGCATCCTTCTGTCTGGATATCTTGA
-GTTTCTGGATTGTAAACCTTATTAGGGCCCATTTTTCCTAGAATTGGAGCCTCTACTTTGTTCTTGCTACTTTAGTTCAC
-CCAGAAAGCACGATCTCTGCCTGAATTTCAAAGTGTTGGCTAGTTTAAATATCCTTTTGTGAGACTTTTGTCTTCCTGCG
-GGGTGATTTTTTCATCTTACATATCATTGCTAATCTTTTTACCTTGAATATAATTGAAATAGTTTTAATCTGTGTTACCA
-GCAACAAGAACCCCTTTTATGAGATGAAGAGGCCAGGTCAGTCTCATAACTTGTGTACCCCTCCGTGTGTTGAATTTATG
-TCAGAGCCAGGTTCTTTCCTATTTGATGTCTCTCACCAAATTCCAGTGTTTATGTCCTAGGAGGTGCCCAATAAATTCTA
-GAGTTGATACAAGCTGTAATTTTAGAGAAATTAAATTAGCAAGTAGAATTAGATTATATACAACCTAATCAACTTTTTTT
-TTTTTCCCTGAGGATGACCAAGATTTGGGCTTCAGTGACAATAGTTATCCCCTAAATATTTATACTCAATCTAGGATCAC
-CAGTAAAATGTTGAATAGAGGTGATGAACACACACATCCTTTTCTTGTCCTAATCTATGTGGTTTAAACATTTACGCTTT
-CACAATTAAATATAATATTGTTTATATGTTTTGTTGTGGATGCTTTCCACCACTTCTAAAAAATTTCTTTTTCTAGCTTG
-CTGAGAGTTTTTTTTTTTAATCAGCAATAGATATTTCTCCAAAGAAAATATCCAAATTACCAACAGGTACATGAAAAAAA
-TGCTCAGCATCACTAATCATCAGGGAAATGCAAATCAAAACCACAAAGAGATATTGCCTCAAGCCTGTTAGAATGGTCTG
-ATTAAAAGAAAAAGATAACGAGTGTTAACAATGGGGAGAAATTGGAACACTTGTACAGTGTTTCTGGGAAAGTAAAACTG
-TGCAGCCTCTATGGAAAACAGTACAGTTGTTCCTCAAAAAAATTAAGAAAGTAGAACTACCATATGATCTAGCAATCTCA
-CTTCAGGTTATTTATCTGAAAGAATTGAGATTGGGATGATTCTCAGGCTCATTGCAGCATTATTTACACTAATCAAAATG
-TGGAAATAAGGTTAATGTTTATTGGCAGATGAATAGATAAAGAAAATGTGGTATATTCATACAACGGAATATTATTCAGC
-TTTAAAACAAGAAAATCCGGCAATATGCAACATGGATGAACCTAGAGGACATTAATGCTACGTAAAGTAAATCAGTCACA
-GAAGGACAAACTGTATGATTCCACTTGTATAAAGTATCTAAGATAGCCAAATTAATTAGAATCACAGATTAGAATGGTGA
-TAGCCCTTTAAGTTGAAATCAATTTTACATTCCTGGGTTTTGTAGTTTTGCTATCAGGATTCTGACTCATAAAACAAGTT
-TGGAATTCCCCCCTTCTTCTGAAATAATTTAAAAATTTTATTTTTTTAAAACGTTTGAAAGAATTCACCAGCAAAACTCT
-TTGGATGTGGAGTTTGCTTATTTTTTTATTTCTTTAGTTTTATGTTTTTATGTGCAGGTATTTGACAATTTAATTACTTT
-AATAAATGTCAATTACTTCATATATTCCATTTAATCTTGTGAAATTTTTTATAAGTTTCTTTTCAAGGAATTCACCCTTT
-CATCCAAGTAATGAAAATTAGTATAAAATGTTTCACAATATTCTATTATCTTGTTAATGTCTCTTGTGTCTACAACTGTA
-CAATCTCATTAATCCCTGATATTTATAATTTGCGTTTTCTTTCTTTCTCACAGAACTAACTTTTGGCCATGTTAATTTTC
-TCCTGTGTCTGTTTTCTGTCTCATTGATTTCTAATTTCTGTTTTATTTTCTTTCTTCTACTTGTTTTGGACTTAATTTGT
-TCTCTTGTTTTAGATTTTCTTTTTAAGGTAGAAAATTAGTGCACTTGTTTTGAACTTCTCTTTTTTAGAATAAGCATTTA
-TACAAAAAATTTACTCTGGGTCTGCTTAACTTATCCCACATATTTTGATATAGTATATTTTTATTTGTATTCAGTTCAAT
-GTATTTTAAGGTGTTTCTTATGATTTCTTCCTTGAGCTAAAGGGCATTTTAAGGTGTATTTAAATCTTCCAATAGTGTAG
-ACTTTCCTGGGTAGCTTGTTTTCACCCATTTCAACTCATTTTCATTATGGTCAGAAAGTATACTTTCTATGATTACAGTG
-TTTTGAAACTTCTTGACAGATATTTTGTGGTCTATAGCCTATTGATAAATGTTTCATGTGTAGCATAATAGAACATATAT
-TCTATTTTCTTGGTCAATATCGATTAGGTCAGGGTGTTGTCAAAATTATTTTACCTTAACTTTCTTTAGTTATTCTATCA
-GCAATACAGCATTATGTCTTCATAATTACTTGACATTTTATCATTATGAAATAGCTTTCTGTTGTAATATTGCTTGTTTG
-GAGGTCTACTTTTTCTTATATTAATATAGCCACATAAGATTTCTTGTGCTTGTTGTTTCCTTGGTATACTTGGAAATTAT
-TTAACTCTCAACTTATCTATACCATAATATTTGGCATGCATCTCTTATAGGTACTTTTATTATATAGTTGGACAATCTGT
-GTTTTATTTGGAGTATTTAAATTACATTTGAAATAATTATTGATAAGGTTGGAGTTAAGCCTACTATTTTTGCTTTTTTT
-TTTTTTTTTTGAGACGGAGTCTGTCCCTGTCGCCCAGGCTGGAGTGCAGTGGCGGGATCTCGCCTCACTGCAAGCTCTGC
-CTCCCGGATTCATGCCATTTTCCTGCCTCAGCATCCGGAGTAGCTGGGACTACAAGTGCCCGCCACCATGCCCGGCTAAT
-TTTTGCATTTTTAGTAGAGATGGGGTTTCACCGTGTTAGCCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACTCGCC
-TCGGCCTCCCAAAGTGCTGGGATTACAGGCTGAGCCACCGCGCCCAGCCTATTTTGCTCTTATCTTCTATTTGTTCCATC
-ATTTTTTGCTCCTCTGTTCTTTCTTTCATGCCTTTTTATATTAACTGAACAATATTCAGCGTTCCATTTTAATTCCTTTA
-TTGGCATTTTAGAAGAATATCTTCATATAATGTGGTGGTTCTCTAGGGATTGTAATAAACATCCTGGGCTTATCGCAGTC
-CACTTACTGTTAATAGTCAACGTTTTCATGGAACATAAAGAAAAGTTGTGGCAAAATTGTTGCGTTTAGTCTCCTGTCAG
-AGCTATTAATTTAGAATATTTTACTCTACATACGTTATCAATAGTACTCTTAATTTTTTATTTAAACCATCAGTTGTTTG
-TTATAAAACTAAAAGAAAAAAGCCTTAGTTTTTCCTGTTTATGCACATGCCATTCCTAGAGCTTCTCCTTACTTCCTGTA
-GGTCAGAATTTCCATCTGTTGTTATCTTTCTTTAGTCTAAAAAATTTCCGTTTGCATTTCTTGTATCTAGGTCTGCTAAT
-GACAATTGTTCGAAGCTTTCTTTTATCTGAATAAATCTTTATTTTCTCAAGAATTACTTTTTCTAGTTATAGAATTTGGA
-GCTGACAGTTTTTTTTTTATTTTGAAGATGTAGTTTCATTGCTTTTTAAAGTGTCATTTCTGATGACAGGTAGATGACCT
-ATTTGTTTCCACGTATGTAAATTATTTTCTCCCTCCCTTTAGCTACTTTCAAGATTTACTCTTTTTTTGCCCAGTGTTTT
-GACTATGGTATGTCTACATTTGGTTCTGTATATTTTTATTCTGTTCTTTGAGTTTCTTAAACCTGTAAGTTGATATATGC
-TGACAATTAGGAAAACTTTTGGTCTTTACTTTTTCAAATAGCTTTTTCTGTCTCATTTTCTTCTCTACTCTTTCTAGGAG
-TCCAATTATATTAGTGCTAGACTGGTCATATTTTTATTATTTTTCTCCTTTGTATTAGCTGTATTGGGAAATTGTTCTTG
-ATCTGTTTTTAAGTGCACTGATAGTTTTTTCTGCCATCTTTAATTTACTGGTATGTGCATAAAATGACACTTTTATATAA
-GATATTCTGTCTCTCAGTTCTAAAATTTGTCCTATTATCCCTTTATCATTTTTACTTCTCTGTTGAGATTCTCCATATAT
-TCTCTCTTATGACCATCTATTCCTTAAATCCTTGAATATGCTTATAATAGCTTATTTTAAATTTCTCATCTTCTAATTCC
-AGCATGTGGGCCATTTCAATGTCTTAATCCATTGTTTACTTTTTTTGTTATGTGTCATATTTTCCTGGTTCTATGTCTAG
-GCAGGTTAAATTATATGTTAGATTATGTGTATGATATTTTGTAGAGATAGGCTCTTTTATTTTCCTTTGAAGAGTGACTC
-TTTTCTAACATTAGTCTTCTTTCTGTAGTCAAACACCAAACTTTCACTCCTGAGCTATATGCAATGGTTGAAATCTCTGC
-TCTGTACTAGCAATTTAGCTGTTGTTTTCTGCTGGATTCTATGGAGTCTCTTTTTATGAATGTGAAATGTAGCAGCCATC
-ATATATCTGAATGAAGTTTAAGTGCTGATTTTAGATTTTTACTCTGTGACATTCTCCTCTGTGACTTTCAGTTGTGTGAG
-ATTTCCTCCCATGTCATTCAAATTTCCCAATTCTTCTTTTCTGTCAGCCTGGAACTCTGTACTCTTATTCCTCAAGCTAG
-TAAAACTCACCGCTTTACTCTTAGACATCTAATTTTGCACAGACTTGGAAGTGTCATCAGGTGTGAAGTTACATTGATGC
-AAATTTAAATCATTGCAATTTTCTTTATTCAATGGTCAAATACTTCATCAGTGGTTGAATATTCTACTATTTCTGCCTGT
-TTTCTGTTTCTCATTACCATCAAATGTGTATTTAATTTTTTTTAGAGTTAATAGTTTTTTTCCCTGCATTTGAGTTAGAC
-CTGAGCTACTACCACATTTTGTAATTCAAACTTTTTGTCTAACAATGTTTTAAAAAACTCTTTATTTGGAGGGAATTCTC
-AAATTTCTAAATACTCTACAAACATTAGGATCAGGGCTCACATTCCCAGTTTCCCTTGTAGCCAGATGTGCATATCGAAC
-ATGGCCTCAGCTAATGAAGCATACCCACATATTTGAAAGTAAGAAAAGTGTTAAGAGGAACTGTAGATATCATTTTAGTT
-GATGTAAGGATGGAAAATAAATAACCAACTTTCACTGGTGAACTTTGTCTTCAATCATTGTTTTCCCGTGGGTAAGCAGC
-TAATTTTCTGGCCTAGAGGTGAAATTGGTGTGTTGGTAAGAATTGATTTAATGATAACCTGCTTTTGTCTTTTTAAAAAT
-TGTGAATCCACCATTGTTTCTGGTCCTGTTTTATACTTATGCAGTGTATAATCTCTCATGCAAAATTTAGTTCTTTGTTT
-CTCAGCTTAAACTGGATTTTGATGAGCAGTTTTCACCTTCAAATGAAAGAAATGGCTTTGGTTGATGTTAGACAAAAATA
-ACAAGAAGGAATTAAAGAAATTTGTTTGTCATCTTGTAACATTAAATAAATGAAACTGAAAATTCAACAATTCTGTTTCA
-TAAAAAAGTAGAAAGTTTCTACTGTTTTTCATTATTTTCAAAGCTATATCATTAAATGAAATTTCTGCCTCATGGAAGGT
-TTTTAGAACTATGTAATAATACCATACAGACCATTAGGAGAGAAATGAATAAAGACTGAAAGAAGTAAGCACTGTGTGGT
-AACATAGATGGTGCACAGTTGTGTGTGTGGAGCCCTAATACATTTGACCATGGAATTTATACAATAAATGTCAGTTTCCT
-GTGAACCTGCTAATTAATATGACTTTCGCAGACCTTTCCTTAACCTAAACTGTTTAGGTTTCCTGTCGACAGACTGCATG
-TATTCTCACCTTTAACCTTTCCATAATCTTCCCTAATTACAGATGTCATTGGTTCTTAATAGCAAAAGAACAGCAGTAGC
-TTATAAAGTTATATTATTTGTTTTTTACTAATATGTGAAGTGATTTTGTCTTTCATTTCACCTCTAGAGCTAATTATGTC
-TTCTAGGTTAACAAAAATTCCAGATCATACCATCATTAGTTTAAACTTTACAATGAAATCATTATTTCCATTTATTACTA
-GCCTGCATTATAGCAATGTTTAGCTAATGAATTCTCAAAATATTTCTTGAAAGGTGAAAGAGTACCTCAAGTAAATGATG
-TAATTAATTTATTTATCAGAATTTTAAATTAAGTGTTCTGTTTAATCTCAAAGGGGTACCAATGAAGTCAGGGCATAAGG
-ACTCTGGTTAATAAAACGGTAAGAATTAAAAAAGATTATTACATTTTTCCTCATACTATGATGGCTATAATTTTTAAAAC
-AGTAGAAATGTTTAATTTTTAAAGGCTACTAGTGTCTATTTCATTCAAAGATGTGAGCTCTTCAGTTCAACTTGTTGTTT
-GAAATTTGAACAGCTTTTTCTTGCTTTTGTTCAATACAGTTATTTAACAGTCCAGGCAGGCCTCCGGAGTTACATATATG
-TATGTGGCTATGTGTGTATATATACATAGAAGTACAAATAGCATATAAACAATTTACATAAGACTTTTGCTTTTGATGAA
-AATTCTTCTAAAAGTGAATATAAATTAATAGCATATGGAGCCTACAAAAATTGTCCAATAGGGAACTAGGAAAAGATAAT
-TTGTGAAGAAAAAGTTTGCTAAAACAGACTTTTTATTTTTACATGTAATAACTTTATATTGAAGGGTTTCCAGAAATATA
-AAATGTTATAGGGCACTTATCCTGAGACACATGAAGGAGACAAGGGATAGAGCTAGGATGGAAGTGAAAATAAAGGACAA
-ATAGAGATAGATACTTAAGTGGAAATGAAACACTGCATGTTCTCACTCATAGGTGGGAATTGAACAATGAGAACACATAC
-ACACAGGAAGGGGAACATCACACACCAGGGCCTGTTGTGGGGTGGGGAGAGGGGGTAGGGATAGTATTAGGAGATATACC
-TAATGCTAAATGATAAGTTAATGGGTGCAGCACACCAACATGGCACATGTATACATATGTAATTAAATTGCACGTTGTGC
-ACATGTGCCCTAAAACTTAAAGTATAAAAAAAAAATCATCAAACAGGAGGTAATTTCAAAACATGGCTTTTCCAGGCAGC
-AAATTTTCTGAATGTATCGCAAAAGAAGATAAATTGCATGTCTATGTAGATCATGTCAATGAAATAAACAATAAAGTTAC
-TTATTGGAATATTGAAAGTGGTTGATAATAAATAAATTATTTATATTTATGGTAAAAGCAATAAACTTGATTTTTAGGGG
-GTTCAATGACTTCCTGAAAATATCCTCTCACAGATTTTCTCAGAGTGTCTAGTTGGCAAAAGCACAGCTCCAAATAGCTA
-TTTCTGTCAACGTCTACAGAACATTTACAGTTTGATTTCTAAAAGTTTCCATTTCTACTGACCTTACAAATTTGTAAAGT
-GAATGCCCACCAGGACAAAATATTAAGTGATAAAATTAATTGGATCCTACAAGTGCAAATCTAGGCAAGGAAAATCTTCT
-TCCTTCTTAATGAATGATTTTTATGTCTCTTCATTCTTGTCCTTCTAGGTAGAGCAACACTCTGGAGACCTTCTTTTGAG
-GCATTTCACCACCAGAGTAAGTGTGATGTGTGAGTAATTAGTCCACCCACAGGGAGCTGGTGAAATTAAATTGGAAGTTA
-TTTCCTAACTGGCATATCTTGGAGTAAAATTAATCTAATAACAGCTTTCATAAGAGAGCATAAGCTTAAAAGACAACATT
-TTTCATTCAACTTTACCAAACAAAGTGCAAATTTAGGTGTCCAGTTGTGAAGTTTTGTTGTGTGTGGATTGTACAGTGAA
-GGTACCAGTGGACAACAGTTGCTCATCAAGCAAGTTTATACAAAAGCTTTCGGACAAGTCCAACTCTAGATAAAATTCTA
-AAGTATTTCATGCTTGTGTTCAGAGTTTCTTTTTCTCTCTCCAAGGTAACCCACATATCAAAAGACATATGGGTTGTGGG
-TAGAACTTCCTAAAATTGCTGGTGAGAAGTGTGCCATGCATAAGCATACTTCACTAGCTTGAATTTTCTGTTAGTCTCAC
-AGGCAACAATTACAATCCTGTATGATTTTCTATCTCCACACACTCCTGAATATAGAAAGACCAAGTAACATCCCTGGTTA
-AGATGTGTACAGGTTCCAAGACATGTCTAAATATATTCACCAAGAGGTTTATTATTTTCACAGTGGCATTCACTAAATCA
-GTTGTCAGTGTAGCATTACTCAAGGAATAAGCAGGGTCTTTAATTTATCAAAGTTTGGAGTGCACCCCAAGTTGGATCAC
-TGAAGCACATAACTATAGATAAGATCACTCAAAAGCACAAATCCAGGTAATAAATATTCACTAGTAGTTTATATGCATTT
-AGCAATTTGAATGCTGGGAAGTGTAGCCCAGAAAATCAATCGACATGGAGCTATTAAAGAGGCATTCATGGCACCTGCAC
-TTTGAATCTCTTCAGACTCAGGTTAAACAGGAGACATGTTAGCTCATGTATAGTGCAAAAACCCGTCCTCTTTCCCTTTT
-TATCTATGAACCTGCCCTTTTCAATGTTATCTAGATGCCTGAAGGTATGAATACCCTTGATCTTGGTAAAAAATGGTACC
-ACCCGTCAGCAAAATCTCACTGATCAGTGTCTATGTTACCTCACTGAGTTAGCCTTTTGTGTTGTTGTGGCCCAGAATGA
-CAATGTTGACACAATCCAAACCAGTAGTTGGGAAGTTAATGTTGGATGCGTCTTTGACAATTGATGGAATGACCTGAAAT
-CAAATGTGAGGCAGTGGAGACACAAGAATGCTATTCAGGAAGTTAGTGATCTGTGGAGATACTAAATGAAATATCTGGAA
-GGAAATGTAATCTTGCAACTATGCTTTTATGTGTTTTTTGACATAAACAGTTTCTATTTATGGTGGAGCTAGAGTGTCCA
-TTTCCCATGAAGTTCCCATAGTGTTAACTAATACAGTCATGTGTCACTTAATGACAGGGGTGTGTCTGAGAAATGCATTG
-CTGGACGATATTATTATTGTGTGAACATCACAGAGTTTACTTACACAAACCTAGATGCTATAGCTGATTACATATCTAGG
-TTAGGTGGTATAGCCTATTCCTCCTAGGCTACAAACCTGTGCAGCATGTTATTGTACTGAATACTGTAGGCAATTGTAAC
-ACAACAGTTAAGTATATCTATACTTACTTATATCTATACAGTAAGTGTATCTATACATGTCTAAACATACAAGAGGTACA
-GTAAAAGTACAGCGTTATGATTTTATTGCACCACTGTCATACATGTGCACTATCCTTGACCAAAATGTTGTTATGTGATG
-CATGATTGTAACAAAAGAATTAATTAAATATAATATTGAAGTGCCTATTGAGATTTCAATGAAGAGAGGAATATTTGTAA
-ATTCTGATTACCTTAAGTGGGAATTGACTTTCTTCCTGTTTCCATGGCTGTTCTTGTGAAAGAGCATAGCTTTCCAAAGA
-CCTGAAATCTCTGACAAATCTTGCAATTCTCTATTGCCTGCATTATGAAAGTCACCTGGTATCAAATGAGGCAAAATTGT
-AGATTATAAAGACCTGTACTTGTCAGTTCCTAAACATAGCAAGCCTTGGTCTATCTTGAACATTTCTGCAGTTATAAATG
-AGCCTTGGGTCATGATTTTCTGCCTTTTTATCATAGACAAGATTTAATTTAGGAGATGTCCTTTTAATGTGTAATGTGAA
-TAGTAAGTGACACTTATGAAGCCTATTTTCTTCCAGCCATTTTAATTGTCAAATCTGTCCAGTCAAGATGCATTGTTAGA
-GGCTTCACTGACAACACCGTCTGTGTGTGTGGCTGTGTGTGTGTGTATACATACACATGGTTGAGCAGGATTTATTGTAA
-GTCAAAACAGTCTCAAATTTCTTTGGACAATACAGCTTCCTTGGCCATTCCCTTGGAGCTCTGAGTTGAGGAGCTGGTGA
-TGTGTATTTCTCTTGCATGTTCTCCACATTATCCCTATGCAGGTCTTCCATGGGCTTGGTTTTGGAACCAGTGATGAGGA
-AGATCACTAGAATTGTTGTTGTCAAAAAGATGCCTCCATTCTTCTGTATAAGCAATGGCAATTTTCCCTGACCAATATTT
-CTTCTTTTGAAATGGTAAATTTTGAATATTAACTGATTAATATAATCCCATAAAATAACAAAGTTTGAGCCCTATGATCT
-GTATTTTAGGCTAAAGTTGTGTTTTATGCTAAATCATCATTTACTCCATGTATGATCTTTTTTTTTTTTTTTTTTTGAGA
-CAGAGTCTCACACTGTCACTCAGGCTGGAGTGCAGTGGCACAATTTTGGCTTACTGCAAGCTCCGCCTCCCAGGTGCACA
-CCATCCTCCTGCTTCAGCCTCCTGAGTAGCTGGGACTACAGGTGCCCACCACCACACCCAGCTAATTGTTTTTTAAGATT
-AAGGGCGAAATAAAAGCTGCTCTCCTATATTACATTCATAAATCAGAATTATTAAAGCAAGCTATTTATTTATTACAAAC
-ACATACTCCAAATTTAGCATCTAAGACATGACAGTCTTTCAAGAGACATCAATTTACTTTTTAGGGTCTATAGCTATATT
-TGTATTCATGTTATTGGTGTCCATAATATTTCATTAGATGTTCTGGGTAAATTGATAAATGAAAATAACGTATGTGATAA
-GGAGAACAACCTAGGTCTCCTGGAGGGCCCCTTACAACTCAGCTGGTGTTAGCAGAAATGCCTGGGTGTAACAGTGAGAA
-ACAACCTTTCAAAAGTATTGAGCAATTTTTCAGGCAGAGGAATATGTATGCCAATCCAGGCAGCCAGATAAGTGGAGGTC
-AGTTAAAAGATCAGTGTGTGATTACATTTTTTTTTTAAGGTTTCTACTGAGAGGAAATATAACTCTCAGTTATTATTTTC
-TCTGCATATCTCTGGTTATTTTGTCACAACTTTTTATGTAAGCTACTACCAAACACTGGGTTATCCAAGATCTATGGGTC
-GTATTCAATATTTGCTTTTCCCTCAACTACTAACACGTTTGATTCCCTTTGTAACTTTCTCCCCTATTTCTCCTTTGAAC
-CTGTTTTCCCCAACCACACTGAGTTAATAAGCCTCCTATATACTCTCATACCCTGTTTTATCTAAAGAGATTTCCTTTTT
-CTACTATTATACCCATCTCATTCCTTAATTTTTTCTTCTTATTTCTCTCTCTATTTTTTACTCTTTTAGGCACAGCTCAT
-GTCTCATGACTTTCAAAAAGTTTTTCTTCTGATATTCCCAGCTCGAATTAGGTATATCCCAATCAGTTTCCTTAGAATTA
-CAAGTCTGCATATTATTGGCTTGCAATCTGTCTTAGGCTGGGAATTGGCTCCTTGTAGGCAGGGACTAGAATTTATTTCC
-TCTTATGTCCATAATGCCTGACACAGGAACTATTCTCACATACAAATTGTAGGGCCATAATTCCTGAGAACATATGTATA
-TTTTAGTGACTCATAAAGGCTTGAAATACATTTTTAAAATGATTAATTGGGAAGTCCATGAACTTGACATCTTGATGTAG
-AAGAAAAGCAAGGGCAGATGAAGAAGTTATACACGATACTTGAAATACCAGAAGAATATAATCAGAGAGCAATAAATTAA
-TCCTAGATTTTTAGATGTGAAGAAGTTCTGAGAAATATTTGAAGACTTGGCTCTAGGGATGAGTACATAACAGAGACCAG
-TAGCCAGACTCAGAGCTTTAAAGAGTGAAGAAATGGCATTGCAGGGGGAAGGACTGTTGTATACTAAATAGAAATTGTCA
-TTAAATGGAAGACTAAGCAAGAGGCTGATGATCTGTGGATGAGAGACCAAAATGGTGTGGAGATAGAGGTAAATGCCATA
-ATCTACAAAGAAGATATTTTTGTGCCAGAACGAAATGATAGGTCTAGAATGTAATAAAAGATAAATAGTTAACTACATTG
-TAATGTGGTCTGAGAACTCACTGAAGGCATAGCCATTGATATTAACTTCCACTTTGCTTCCAGACAAAAGATTTTAAATA
-TCTTAAAAATTACATTTGATATTGTATGATTCATCAAGACAAAGTAAAGCTGTAGTTGCCCTGGGGGGGTGGGGAATGGG
-GAGTCACTTTTAATGGGTACAGGATTTCAATTTTAAAAGACAAAAAGAATTATGGAGATGGGTGGTGGTGATGCTTGCAC
-AACATTGTGAATACATTTAATGACACCGAATTGTATAATTAACAGTGGTTAAGATGCAAATTGTTGAGTGTGTTTTGCCA
-CAATTAAAAAACAGAAAACAATAGTATTTGAAGATATAGCCCATTTCATCTGGTAGCTAGCTGTATGTGTCTGCTCAGCT
-GTGGATAGATATTTATGCTGTTTCTGAACTGGAGGTTACTGGTATTCTCTAAGGTATAGGAAAATTGATCTTATGTGGCT
-AACTGAGGTGGATATAGTTGTATCAGTCAGACAGTAATGATATAATCATGAGAGTTTACATTTAACACAACTTACATGTG
-TTATACTTTAGAAAGCACTTCATAGATATTATTACTTCATACCATTTTCCCCTTACCATATTTGTCTCTCCTTTCTCTGC
-TGACTTCACAAAATGTCTGTTCCACACTACTCAGTTCATCTCCTTATTTTGTCAAAATTTTAAGTATCAGAGTCTCCAAA
-AAAAAAATTCCAGACAAGTCTCATCAGCTTTCGGTCATTGATTAATCGATGCTCTTAGGGGGTTTCCCTTCCCCTTCTCA
-ATTTAACATAGCTTCCCAATTCACTTGCCAGTAAAACAACGTTGTTTATATGGTTTTGTATTTCTTCCTGCTGAATTATG
-AACATTTTTTCATATTGACATTGATTTCCATCTGGCCATGAAATACTCAAGGTGAAGAAAATGAAACAAAATTGTTAATA
-TTTATCAAGAGCCAGGTACTGTTTTCAGTGTCCTAGAAGCATAAACTAGTGTAATGCTCACCAGCTCATATGAGAGGCAA
-AAATGGATGAAACTATAAAACCAAGACACAGAGAGTTAAGGGAAATTTCCCAAGATCACACAGCCACTGAGGCTATGAAC
-TAGATTTTGACTTCAGGCTGTTTACCCCAGAACCTGTGCTTTCAACCGTCATTTGTACTGCTTCCCTAAATTACACTTGA
-GTACACTGTGACATCAAATTTCACCTATGACACTGATTATCTGGGGAACTTTGCAACTTATTCTGAATATGACTCAGTTT
-TATTTTCTGTACAGAGGTAAAGTCAGTATATACTCCATAGATTTGTTATAAGGATTATATGAAATGACACAAGAGAAGGC
-TTTAAAAGGACTTGGAAAGCAATAAGCTTTTTTGTTTTCAATCATTTTTCAATAGGTTATCAGTGTTGTGAATGGTTCAT
-GAAAAATGACTTTGGGCTCAGTGAGTAACTGAAATGTTGTTGTTTAATAGTGTGTTTAATATTAATATAATAGTAACAAA
-TGTTGTTATTGTTGAGTAATAGTTATTTGGCTTTTCGCTGCTTTTCTTTTCTAGTGTTTTAGTCAGAGACTTCTTAAGTC
-TCCTCAAGTGTGTACACATTTCTTAAATTTGTTGGAAAGTACCAAATTTAAGATATCTTGCATTTTTTTTCTTCCTTAGT
-AAACACTAAATTCCATCACACAGCAGAAAAAGGGCTCTGTTATTGTCGGTACAATGGTTTAATATTCACTTTTATTCCCT
-ATATCATAGTTCTGATTTAATTACTATTTAGAATAAAACTTGTTCCTTATTATATGCATTCATAATTATAAAATTTGTGT
-TTTAATGCCTTCTACAAATATACTGTGCTTTTCTTTATTTCCTTATATCTTTTACTGTTGCATGATCCTGGTATTTGAAA
-TCTCATTAAGTGTTGTTTGGGGATTTGCTGGGAATGTCATCTACATAGTAATGTCTCAAGTTTGTAGCATCTTTAAAACA
-TAATAGGAGACGGAATTCACAGCAGAGTAATAAGCCTCCCACTTTAGGCAATATATTTGTGATTGACATGACTTTGTTCC
-CAGAGGGCAGTTAGCAACACAATATTATGGCTATGTGTACAAGGAAAACAAATTTTAAAAATCTCCTTTAAAAAAAACAG
-TTCCCAATCCTAACCAGTATCATGCACAGAATCCGTTTCCACCTCTTCATATGGAAGCAGCTCTGGGTGGACATCTAGAA
-AGTTGGATAACTATTTATCACATATGATCTGCAAAGGGAGAGATTTACAAGAAAGTATTAAATTTGATCCATAGGAAAGC
-AAAATCAAAAATCAATGAATTTTCCATTTGTAGTTTTCCCTAGGGGCTCTACTCTCAAGATGGCTTAAATGCATTAGAAT
-TCAATGACTAGGCACAATTGTTTGTTAGTGACATAAAAGCAAGGTAAGCATTTCTGCTTTATGAGTCCAAGCACAGGGAC
-ACTTGGTTTTATTTGGAAGGATATCATAAAGGCAATGTTTATGAGTAATCCCTCATTGTCTTTTCTTCTGTAACATTCAA
-TGCTATGTACTAAAATTTAGAAATGAAAACTACTTAAAGACCACCTGCTAAGTTTCATGTATTTCAAATTCTCAGATCCT
-GAGTGTTTAAATATGTCTGTATTTCTTCATGAAAAAAACATAATCTTTGCCAAGTTAGAAAAAGAAAAACTCATATTCCC
-ATTTTTAACTAAAGGTAATCAGAAATTTGGACAGTTTTTAGCCTTCAATACATTATGTAATTTGGGTAACAGGCTGAATA
-AAAGTAAGGAACTTCAGTTAAATTCAGAGAGAAGCTAGTAATTATTTCTAAGACTCAAATGTATAGAACAGATCTCTGAT
-ATTAAGGATAAGACCCTCAAAGGTGACACAAAATGGGTAATTGTGGGATTATTTTAGGAGGAATCATCATATATTCTTAC
-TGCTATAAATACAGTCAAATGTCAGATAAATATACTCCACTGAAATGTTTTCTAGGAATGATGTTGGAACCAATGTTGAT
-AATTTTGAAAGTCATGGAGAGGATTTCAGATGATAGAAGTCGGGCAAATATCCCAGGTTTAATAAATAAGCAAATGGTGA
-GTTCCAAAGCTGCTGTATCAGTGAGCCTCATATTGATCCTGAGCACAATTTCAGAAAGGTCCATTAAATGGGTCTTTGGA
-GAGCACTTAGGATAAGAGGCTGGCAGCAAAGATTCACTAAGAACAATGGTGCCAAGCTTGCCTCTTTGACATTGTTATCT
-GACTGATAAAGGTAGGCTATAGCGGTACACAATACAGATATTTCCAGGGTAAAGCTGTTGAGCTGCTGTAATTTTCCTTG
-CCTCTTCACTATCTTCTCCTATAGTTGACTCCCAAGGAAAAGATAGTTGACTTTTAATCTAGAAATGTATGTTAATTGGC
-AAAAACAAAAAAATGAAACCATAAAATATCCTTTAGGCTTCTCTCTGCTCAGTTATTAGATCATATGAATGTGCCCTTAG
-GAAACACAGAAGGCCCACACTATTATAGAGACAAATTTCTTACATTTTCTGCTGTTTAATGCTCTTCAAAAGACTTACCA
-TACTTCACTAATTTGATTACCAACTACTTGAACACAGGGACCAATGTGTTTATTAAAAATTTTGCATATTATGAGGGCAT
-TAACTTTTAATTATTCAATTGTTAAGACAATGCATATTATTATAAACCATAGAAGGCACACTTATTACCTCCTTAAGAAC
-CAGTCTCTATTTCTCTGGTTCATAGATCTCCAAGTTTATAGAGGGATTGGACATTTGTGTCTTCAATTGGCCCTCTTCAG
-CCCTAGGATAAATAGTGATTAATCTAAGCCAATAGTTTTCGGCTCTGTCTGACCCAATGCCTCTACTTCATAAGAAATTC
-TTCAAAGACCCCTTCGCTATTCTAAATTATTAGTGAGAACACAATGTATGCATTCAAGTTGTTGAAAATATTAATGTTAT
-GCTGAAGCTAACAAAGGAGAAATAATTTACTGTCAATATATAATCCAAAATGTATATAATTGTGCCAGAACATTTACATA
-TCAAATACAATAGAACATAATGAAATTTTCATATCTTCGCCCATACCTTGAAACATTGTAAATAAAAAGTTACAAATATA
-GTTTCATTGAATAACCAAATGCCAAAACTGCCATTTCTATTGTTGACATGATTGAACTGCATTGGTAAATGTAATAGATA
-CTTTCTGTTTGGCCCTTGTCCCCTGTTATACTCCCCTGTTTACTGGCTTTTGTCCAAGTGGAATGGTCCATATTGAATAT
-CTCCATCGGTTCCCTTGTTCATTGCCTTCTATGCATGTTCATGAGATTAAAGGGAAGGAGGAAATGGGATTGGGGGTTAT
-TGCCTAAACTCCCTCTCTGCTAGGTCTCCTGGACCAATCTTTTTCATAAGAAAATTAGTGGGCCGGGCGCGGTGGCTCAC
-GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGTGGATCATGAGGTCAGGAGATCGAGACCATCCTGGCTAACAAGG
-TGAAACCCCGTCTCTACTAAAAATACAAAAAAAATTAGCCGGGCGCGGTGGCGGGCGCCTGTAGTCCCAGCTACTCAGGA
-GGCTGAGGCAGGAGAATGGCGTGAACCCGGGAAGCGGAGCTTGCAGTGAGCCGAGATTGCGCCACTGCAGTCCGCAGTCC
-CGCCTGGGCGACAGAACGAGACTCCGTCTCAAAAAAAAAAAAAAAAAAAAAAAAGAAAATTAGTGTTTCCTTCTGTGATC
-AGGGCAGTTTACTCCCCAGAACTCTGCCTGCCACTGCTAAACCAGAGTTATTGTGGGGTGTGATTTCTGTGATTCCTTCA
-CCCTTCTCCCCTGACATTTTCGTAAGTAGTCTCTTTGGAAATAAACCCAAGTTAAATTATCTTAGTTGGTGTGTTTTCTA
-TTTTTCCTATTGAGACTCTGAAATGAGTATCTAAATGAAAAAATCTACCATCTTTTCTCATATACATAGTAGTTTCATTC
-TTGCAAAATTCATGGCATATTAAAACCATGCAAAAGTACTTGGCACTTAGGCAGTTACATTTGGGATTGTATAATTAAAC
-AAAGCAGGTTATTCACCTTCATTACATTAGAAAGTCATTCAGGACATACAGCAATCCTTAATTAGGAGCGGCTATCCCAT
-GTTACTGGACATATGGTATCCCTGTTTTCCAATCCTTAAAGTTTTTCCTTAAAGTTCCAAAATGCCGTCACTTATTATTT
-CCTGCCATTGAATTTTGTCACATGAAGTTGTAAGGCTGGGAATGCCATAGCCATCTTGAAAACATAGGTAGAAAGATAAG
-ATAATCACAAAGAAGTGGATCATGTTGAATTAACTAAGCATTGATACCATCTATTTGTTGTGCGATTTGGTCAAAGTTGC
-TCCTTGTTTTTTTCTTCAATTAGTTGACTATTCTGTTACTTGAAGCTAAAAACATTTTTTTCTTTTCTTTCTTTCTTTTT
-TATTTTTGACAGAACCTTACTCTGTTGCCCAGGCTGGAGTGCAATGGCATGATCTTGGCTCACTGCAACCTCTGCTTGCC
-TAGTTCAAGCAATTCTCACACCTCAGCCTCCCTAGTAGCTGGGATTACAGGCACATGCCACCACACTCAGATAATTTTTG
-TATTTTTAGTAGAGATGGGGTTTCACCCTGTTTGCCAGGCTGGTCTCAAACTCCTGACCTCAAGTGATCTGCCCACCTCA
-GCCTACCAAAGTGCTGGGATTACAGGTGTAAGCCACTGACCCTGCCCAAAAACATTTTAACCAATAGCAAAGCACATTAT
-TTCATTATATTTTTTCAAAAGTTGCCAGTAATTTCAATTAAAAATATTATATAACATGTTTAATGCAATACAAATGCTTT
-TCAATGTACAATGGGGTTAAGTCTTGATAAGCTGATTATAAATTGAAAATACAGTAAGTTAAAAATGTATTTAATATCTA
-ACTTACTGAATATCACAGCTTAGCCTGGCATACCTTTAATGTGCTCAGAACACTTACATCAGCTGACAATTGGGCAAAAT
-CGTTGAATACAAAACCTGCTTTATAATAAAGTATTGGATATTTTATGTAATTTGTTGAATATTGTACTGAAAGTGAAAAG
-CAGAATGGTTATATTCTATTCAAAGCTATCACTTTTGCTTCATCATAAAGTAAAAAAAATCATAAATTGAACCATTATCA
-GTTGTTGACCATCTGTGTATATGTATGTGTGTGTGTACCTATATAAACATGTATGTTTATATATATATTTGTGTGTGTAT
-ATAACCTCGGTGTGTGTGTATGTGTGTTTGAGAGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTATGAAATTGTAGGGA
-AGTAAAATTTCTTATCTTATAGATATAGCATGTTAACATGTTGGTACCTATCCTCCTGAGATGTAAAATTTTACATGGAT
-AGATATGTACATTTACAGTTGTACACAAAGAGAAACATATTCTGTAGCCTCTTTGTTTTTCTGCAGTTTCATTCAACACT
-ATCTGGTTTATATGGGTGATTACATATATAATGCTAGGATTAAGGTTCTTCTCTATAACTTTGAAACTTCCTTGATTATC
-AACCCTTGGTATATTCTTAGAATAGGATTTTATTTTAGAATTAAGATCCTTGTTTCAGGACTCTAGACTGTTAACACACA
-GAGCCAATAATTATTCAGAATGGTTGGGTTAGTTCACATTCCCACAGAGGAGACATCAAATGTCCAGGCTGCACAGCCTC
-ATTAACACTAGATTTTCTGGACATTTTATATAGTATTTCATCTGATATAAAAAGTAGAATTCTAATTTGATTATGGTTGT
-TAATTTATTTTTACATTTTTAGTCATTATGAAAATGTTTTACTATATGAAAAGCCAGGAAAGGGTTTTTTTTTTAAGGTA
-GTACTTCAGAAATATTTATGATACTTAATTTTTAAAAATTAACTCTAAAAGAATCTTGAAATGTCTGTTTAATAAAATAG
-GACATAAATACTGGTCACATTAGTGAAAAATATTTGTTTAAAATTAAAATATCTGCAGCAATCCTGTAGATATTAATAAG
-TTTTTAAAGAATGACATCTTCAAAATATAACTGTTCTAAACTAATATGTCTCCATTAATACATATAGATACATATATCTA
-AATAAATTTGAAGACTTCAAATTCCAGGTACAATATAATTTTTTTCTATCCTTTGATTTGTCATTCAGGATTTTGTAATT
-TGAACAGAAATATTTTGCCCTAACCACATGTCTGTCTTTTCTCTTACTAAAAATATTATTTTATGTAAAATTGTTTTAAA
-GGTCAGTTAGCACGTTTGAAAAGCATCTTGTACAATGTTACATAATATATTGCATATTTGGTTACATTGTTTTAACTGTG
-TAAATATGGTTTAAATCTGTGATGCTCTTTAGTGCTGATCATGATGCAAATCAAATTTATCTGTATAAAAGGCTCCTGTT
-AATTTTTTTTATTATACTTTAAGTTTTAGGGTACATGTGCACAACGTGCAGGTTTGCTACATATGTACACATGTGCCATG
-TTGGTGTGCTGCACCCATTAACTCCTCATTTAACATTAGGTATATCTCCTAATGCTATCCCTACCCCCTCCACCCACCCC
-ACAACAGTCCCCGGTGTGTGATGTTCCCCTTCCTGTATCCATGTTTCCTCATTGTTCAATTCCCACCTATGAGTGAGAAC
-ATGTGGTGTTTGATTTTTTGTCCTTGTGATAGTTTGCTGAGAATGATGGTTTCCAGCTTCATCCATGTCCCTACAAAGGA
-CATGAACTCATCATTTTTTATGGCTGCATGGTATTCCATGGTGTATATGTGTCACATTTTCTTAATCCAGTCTATCATTG
-TTGGACATTTGGGTTGGTTCCAAGTCTTTGCTATTGTGAATACTGCCACAATAAACATACGTGTGCATGTGTCTTTAGAG
-CAGCATGATTTATAATCCTTTGGGTATATACCCAGTAATGGGATGGCTGGGTCAAATGGTATTTCTAGTTCTAGATCCCT
-GAGGAATCACCACACTGACTTCCACAATGGTTGAACTAGTTTACAGTCCCATCAACAGTATAAAATGTTCCTATTTCTCC
-ACATCCTCTCCAGCACCTGTTGTTTCCTGACTTTTTTATGATCGCCATTCTAACTGGTGTGAGATGGTATCTCATTGTGG
-TTTTGATTTGCATTTCTCTGATGGCCAGTGATGATGAGCATTTTTTCATGTGTCTTTTGGCTGCATAAATGTCTTCTTTT
-GAGAAGTGTCTGTTCATTTCCTTTGCCCACATTTTGATGGGGTTGTTTGTTTTCTTCTTGTGAATTTGTTTGAGTTCATT
-GTAGATTCTGGATATTAGCCATTTGTCAGATGAGTAGGTTGCAAAACTTTTCTCCCATACTGTAGGATGTCTATTCACTC
-TGATGGTAGTTTCTTTTGCTGTGCAGAAGCTCCTTAGTTTAATTAGATCCCATTTGTCAATTTTGTCTTTTGTTGCCATT
-GCTTTTGGTGTTTTAGACATGGAGTCCTTGCCCATGCCTATGTCCTGAATGGTATTGCCTAGGTTTTCTTCTAGGGTTTT
-TATGGTTTTAGGTCTAACATGTAAGTCTTTAATCCATCTTGAATTAATTTTTGTATAAGGTGTAAGGAAGGGATCCAGTT
-TCAACTTTCTACATATGGCTAGCCAGTTTTCCCAGTACCATTTATTAAATAGGGAATCCTTTCCCTATTTCTTGTTTTTG
-TCAGGTTTGTCAAAGATCAGATAGTTGTAGATATGCGGCATTATTTCTGAGGGCTCTGTCCTGTTCCATTGGTCTATATC
-TCTGTTTTGGTACTAATACCATGCTGTTTTGGTTACTGTAGCCTTGTAGTATAGTTTGAAGTCAGGTAGCATGATGCCTC
-CAGCTTTGTTCTTTTGCCTTAGGATTGACTTGGCAATGCAGGCTCTTTTTTGGTTCCATATGAACTTTAAAGTAATTTTT
-TTCCAATTCTGTTAAGAAAGTCTTTGGTAGTTTGATGGAGATGGCATTGAATCTTTAAATTACCTTGGGCAGTATGGCCA
-TTTTCACGATATTGATTCTTCCTACCCATGAGCATGGAATGTTCTTCCATTTGTTTGTATCCTTTTTTATTTCATTGAGC
-AGTGATTTGCAGTTCTCCTTGAAGAGGTCCTTCACATCCCTTGTAAGTGGTATTCCTAGGTATTTTATTCTCTTTGAAGC
-AATTGTTAATGGGAGTTCACTCATGATTTGGCTCTCTGTTTGTCTGTTATTGGGGTATAAGAATGCTTGTGATTTTTGCA
-CATTGATTTTGTATCCTGAGACTTTGCTGAAGTTGCTTATCAGCTTAACGAGATTTTGGGCTGAGACGATGGGGTTTTCC
-ACATTCACAATCATGTCATCTGAAAACAGGGACAATTTGACTTCCTCTTTTCCTAATTGAATGCCCTTTATTTCCTTCTC
-CTTCCTGATTGCCCTGGCCAGAACTTCCAACACTATGTTGAATAGGAGTGGTGAGAGAGGGCATCCCTGTTTTGTGCCAG
-TTTTCAAAGGGAATGCTTCCAGTTTTTGCCATTCAGTATGATATTGGCTGTGGGTTTGTCATAGATAGCTCTTATTATTT
-TGAGATACGTCCTATCAATCCCTAATTTATTGACAGTTTTTAGCATGAAGATTTGCTGAATTTTGTCAAAGGCCTTTTGT
-GCATCTATTGAGATAATCATGTGGTTTTTGTCTTTGGTCCTGTTTATATGCTGGATTACGTTTACTGATTTTCATATGTT
-GAACCAGCCTTTCATCCCAGGGATGAAACCCGCTTGATCATGGTGGATAAGCTTTTTGATGTGTTGTAGGATTCTGTTTG
-CCAGTATTTTATTGAGGATTTTTGCATCACTGTTCATCAAGGATATTGGTCTAAAATTCTCTTTTTTTTTTTGTCTCTGC
-CAGGCTTTGGTATCAGGATGATACTGGCCTCATAAAATGAGTTAGGGAGGATTCCCTCTTTTTCTATTGATTGGAAAAGT
-TTCAGAAGGAATGGTACCAGCTCCTCCTTGTGCCACTGGTAGAATTTGGCTGTGAATCCATCTGGTCCTGGACTTTTTTT
-GGTTGGTAAGCTATTAATTATTGCCTCAATTTCAGAGCCTGTTATTGGTCTATTCAGAGATTCTACTTCCTGGTTTAGTC
-TTGGGAGGATGTATGTGTCGAGGAATTTATCCATTTCTTCTAGATTTTCTAGTTTATTTGTGTAGAGGTGTTTATAGTAT
-TCTCTGATGGTAGTGTGTATTTCTGTGGGATTGGTGGTGATATCCCCTTTGTCAATTTTTATTGCATCTATTTGATTCTT
-CTCTCTTTTCTTCTTTATTAGTCTTGCTAGTGGTCTATCAATTTTGTTGATCTTTTCAAAAAACCAGCTCCTGGATTCAT
-TGATTTTTTGAAGGGTTTTTTGTGTCTCTATTTCCTTCAGTTCTGCTCTGATCTAAGTTACTTCTTGCCTTCTGTTATCT
-TTTGAATGTGTTTGTTCTTGCTTCTCTAGTTCTTTTAATTGTGATGTTAGGATGTCAATTTTAGTTCTTTCATGCTTTCT
-CTTGTGGGCATTTAGTGCTATAAATTTCCCTCCACACACTGCTTTGAATGTGTCCCAGAGATACTGGTATGTTGTGTCTT
-TGTTCTTGTTGGTTTCAAATAACATCTTTATTTCTGCCTTCATTTCCTTATGTACCCAGTAGTCATTCAGGAGCAGGTTG
-TTCAGTTTCCATGTAGTTGAGTGGTCTTGAGTGAGTTTTTAAATCCTGAGTTGTAGTTTGATTGCACTGTGTTCCGAGAG
-ACAGTTTGTTATACTTTCTGTTCTTTTACATTTGCTAAGGAGTGCTTTACTTCCAACTATGTGCTCAATTTTGGAATAGG
-TGTGGTGTGGTGCTGAAAAGAATACATATTCTGTTGATTTGGGGTACAGAGTTCTGTAGATGTCTATTAGGTCTGCTTAG
-TGCAGAGCTGAGTTCAATTCCTGTATATCCTTGTTAACTTTCTGTCTCGTTGATCTGTCTAATGTTGACAGTGGGGTGTT
-AAAGTCTCCCATTATTATTGTGTGGGAGTCTAAATCACTTTGTAGGTCACTAAGGACTTGCTTTATGAATCTGGGTGCTT
-CTGTATTGTGTGCATATATATTTAGGATAGTTAGTTCTTGTTGAATTGATCCCTTTACCATTATGTAATGGCCTTCTTTG
-TCTCTTTTGATCTTTGTTGGTTTAAAGTCTGTTTTATCCGAGACTAGGATTGCAACCCCTGCCTTTTTTTGTTTTCCATT
-TGCTTGGTAGATCTTCCTCCATCCCTTTATTTTGAGCCTATGTGTGTCTCTGCACGTGAGATGGGTTTCCTGGATACAGC
-ACACTGATGGGTCTTGACTCTTTATCCAATTTGCCAGTCTGCACCTTTTAATTGGAGCATTTAACCCATTTACATTTAAG
-GTTAGTATTGTTATGTGTGAACTTGATCCTGTCATTATGACGTTAGCTGGTTATTTTCCTCGTTAGTTTATGCAGTTTCT
-TCCTAGCCTTGATGGTCTTTACAATTTGGCATGGTTTTACAGTGGCTGGTACCAGTTGTTCCTTTCCATGTTTAGTGCTT
-CCTTCAGGAGATCTTTTAGGGCAGGCCTGGTGGTGACAAAATCTCTCAGCATTTGCTTGTCTGTGGAGCATATTATTTCT
-CCCTCACTTATGAAGGTTAGTTTGGCTGGATATGAAATTCTGGGTTGAAAATTCTTTCCTTTAAGAATGTTGAATATTGG
-CCCCTACTCTCTTCTGGCTTGTAGAGTTTCTGCAGAGAGATCAGCAGTTAGTCTGATGGGCTTCCTTTTGTGGGTAACCC
-GACCTTTCTCTCTGGCTGCCTTTAAAATCTTTTCTTTCATTTCAACTTTGGTGAATCTGACAATTATGTGTCTTGGAATT
-GCTCTTCTCGAGGAGTATCTTTGTGGCATTCTCTGTATTTCCTGAATGTGAATGTTGGCCTGCCTTGCTAGATTGGGGAA
-GTTCTCCTGGATAATATCCTGCAGAGTGTTTTCCAACTTGGTTCCATTCTCCCCGTCACATTCAGGTAAACCAAATAGAC
-GTAGATTTGTTCTATTGACATAGTCCCATATTTCTTGGAGGCTTTGTTCATTTCTTTTTATTCTTTTTTCTCTAAACTTC
-TCTTCATGCTTCATTTCATTCATTTCATCTTCCATCGCTGATACCCTTTCTTCCCGTTGATCACATCGGTTACTGAGGCT
-TATGCATTTGTCGTGTAGTTCTCGTGCCATGGTTTTCAGCTCCATCAGGTCCTTTAAGGACTTCTCCACATTGGTTATTC
-TAGTTATCCATTCGTCTAATTTTTTTTTCAAAGTTTTTAACTTCTTTGCCATTGGTTCGAACTTCCTCCTTTAGCTCGGA
-GTACTTTGATCTTCTGAAGTCTTCCTCTCTCAACTCGTCAAAGTCATTCTCCGTCCAGCTTTGTTCCATTGCTGATGAGG
-AGTTGCATTCCTTTGGAGGAGGATAGGCACTCTGATTTTTAGAGTTTCCAGTTTTTCTGCTCTTTTTTTCCCCATCTTTG
-TGGTTTTATCTACCTTTGGTCCTTGATGATGGTGACATACAGATGGGGTTTTGGTGTGGATGTCCTTTCTGTTTGTTAGT
-TTTCCTTCTAACAGTCAGGATCCTCAGCTGCAGGTCTGTTGGAGTTTACTGGAGGTCTCCTCCAGACACTATTTGCCTGG
-GGGGTATCAGCAGTGGTGGCTGCAGAACAGTGGATATTGGTGAACTGCAAATGCTGCTGCCTGATCGTTCCTCTGGAGGT
-TTTGTCTCAGAGGGGTACCCGGCCATGTGAGGTGTCAGTCTGTGCCTACTGGGGGGTGCCTCCCTGTTAGGCTACTCGGG
-GTTCAGGGACCCACTAGGTGGGGGTTGTCTGCCCGTTCTCAGATCTCAAGCTGCGTGCTGGGAGAACCACTATTCTCTTC
-AAAGCTGTCAGACAGGGACATTTAAGTCTGCAGAGGTTATTGCTGTCTTTTGTTGGTCTGTGCCCTGCCCCCCGAGGTGG
-AGCCTACAGAGGCAGGCTGTCCTCCTTGAGCTGTGGTGGGCTCCACCCAGTTCGAACTTCCTGGCTGCTTTGTTTACTTA
-CTCAAGCCCGAGCAATGGCGGGCGCCCCTCCCCCAGCCCAACTGTTACCTTGCAGTTTGATCTCAGACTGCTGTGCTAGC
-AAACAGCAAGGCTCCGGGGGTGTAGGACCCTCCAAGCCAGGTGCTGGATATAATCTCCTGGTGTGCCATTTGATAAGCCT
-GTTGGAAAAGCGCAATATTAGGGTGGGAGTGACCTGATTTTCCAGGTGCCATCTGTCACCCCTTTCTTTGACTAGGAAAG
-GGAATTCCCTGACCCATTGTGCTTCCCAGGTGAGGTGATGCCTTGCCCTGCTATGGCTCATGCATGGTGCGCTGCACCCA
-CTGTCCAGCACTCCCCAGTGAGATGAACCTGGTACCTCAGTTGGAAATGCAGAAATCACCCGTCTTCTGCATCACTCACG
-CTGGGAGCTGTAGACTGGGGCTGTTCCTATTCGGCCATCTTGGCTCCACCCTCTAATTTTTAACTTTCAAAAGATTAGAT
-ACATTTACCCTCTTCTGAATTTTAATTCCTGATGGAAAGATTGTTAAATCTCAAGAGGATAATGAATCAGCTTCTGATTA
-TATTCTGGAATTGAGATTTGATCACACATCCAAGAATGCGTATTCACTTTCCTTTACATTACACACATGCATAATACCAT
-GCTGAGTGATGCTGGAAAAAGTGAGTCTTCAGTAATGCCCTCATGAAATTACAGTCTCACTACACTGAGGTATTTTCTTT
-TTAACCCTTTCTTTCTTTTCTGTTGTGAATATGTGCCTTCTAAGAGGTGAACAACGGGAAAAACTGAAAAAGAACCTTCA
-TCTAATTCAGTAACTAGCTTTTGTATCTTCTAAGAATTTTTATCTCCAGAAAGCTCTAATTTTCATTCCTTTACAAGCTT
-TATTTCTCTCTCCTTTCCAACACCAGACTTTGCTCTGTTTGTTTTCTATATCTTTTTTAGAGATGCCTACAATAGAAAAA
-AACTATGACATATTCAATACATCTGAAAAGTTTGCATTACCATAGATAAGAATGAATTATCTGTTTATAAAGAAAAAATA
-ATAAAAATATGAACCAAGAAAGCACAGAAGGTAGTAACCACATTTAGATGTTTATCATGGAATCATCTTTATAATCCATC
-TGTTACAATTCCACACAGCAAATTACAAGTAATTGTGAAGTTTCCCCTCATTTTATAGGTTTGGTCTTATAAGGCATACA
-ACACAAATTTTAATTACTTTTCATTTTGGTATTTGGATCTTAATTTGGTCAAGTGGCCACTGGGTAGATGATGGAGACTC
-TTGAGACATGCAGTCTTCTTCTAGCTTTGTTGATGTGAATATTACTGTGTATTTTTCATTCACTTATTATTTTACAAGGC
-ATGCTTCATTAAAAATATATCAGCATCTCATTGACAAATCACAAAATTTAAAAGGCACCAGAAAAAAACAATTTATTTAA
-AACATTCCTGTGTAAAAGTAGTCACCACTCTTACTATTCTTCAAATATTTTTGTTATATTTAAACGCAAGCCTAATTTTA
-TCTCGAGTGTCTGACCTTGATGATATTGTACACTTTAAACTTAGAAAAATTGAACTCTATTGGAAATTTCCTACAGATCA
-GCTTTTCTAGATGCCAAGCGCCTTGTTTCAGCCATGGTGATGACAGCAAATTGGGTTCTCAGGGATTCTGGCCTCTGGCA
-TCATCTCAGTTGTTTATAATTGAAGTTGGGTCTGATGAGAATGCAGCTTAGATGCATGGTGGGACTGCTGGGCTTAAGGC
-TGGCCTGCCAGGAGGTTGCATTGAGGTGTAACTAGGCAAAGAAAGAAAGAGTTTATTGAGGCACTACTGACAATAGCAAA
-GACTTGGAACCAACACAAATATCCAACAATGATAGACTGGATTAAGAAAATGTGGCACATAAACACCATGGAATACTATG
-CAGCCATAAAAATGATGAGTTCATGTCCTTTGTAGGGACATGGATGAAGCTGGAAACCATCATTCTCAGCAAACTATCAC
-AAGGACAAAAAAACACCGCATGTTCTCACTCATAGGTGGGAATTAAACAATGAGAACACATGGACACAGGAAGAGGAACA
-GCACACACTGGGGCCTGTTGTGGGGTGAGGGGCTAGGGGAGGGAAAGCATTAGGATATATACCTAATGTAAATGACGAGT
-TAATGGGTGCAGCACACCAACATGTCACATGTATACATCTGAAACAAACCTGCACGTTGTGCACATGTACCCTAGAACTT
-AAAGTATAACAAAAAAAAGAAGGGGTTGGGCAAAATTACCAACAATCTTCAACTATGAATTTGTATGAGTAGGGGCTTCC
-CACACCATCAGGCACTCCAAGTTGGAGAAACAAGGGATGTTGAATTGAAAGTTTAATTTTTTAGGCTTGATAGTCAGATT
-AGGGAAGTTTTGGGTACACCTTTCCCACTCTAGAGCCCTCTCCCTAACTCAGGGCCAATTTGGGGCATGGGCTCAGTGGA
-AAAGAGTGCCAAGATCAATTAGAAATATCCATCATGAACATAGGAGGCAGGCATTCTGGCCAAGGGGGTGCGTCTTCCCA
-CTTTGTAATCCAGAGTGCGATTTCTTCTTGCTATCTGTCCCTCCATAAATAAGCGTTGGGTGAAGGACAAGCTAGTTACC
-ATTGAGGATGGAATGAAATTCTACCAGAATTGCAAAATGAACTGAGAGCCACGAAAGTGTTCCTCTGTGAACCAGCAGAG
-AGATCTGTGGAAGGCAAAGGAAGAGGAGCCAAGAGGCCAGATAACATTCCTGCTTCCCCTACATTGTGAGAATGAAATTG
-TCAGCAACCTATATCAGTAATTAACCAGAGGCTTTTTAGAGAGTAAGACTTCTGATAGATACCTCAATAGCTGAAGTTGC
-TCTTCAGTACTGCATATAACCTGTGGACAGATTTTCATCATTATTAATTCATTTATTCAACACATAGATATTAAATTCAA
-GGCATAGTTCTAAACTATGCAGTCAATTCCAAAAAAATAATAATGAAGGACATTAGCTCTGCCTCATAGGACGTTAAAAC
-TCTAGCTGCTAAATGAGACAAATAGGGTTCCCACATCAAGTGCCTGGGCTCCTGTTATAAACTGGACTCTGCTTCCATTG
-GCTTCTCTTGTTTCTGTTTTGATAAACCCATCATTTGGCTTAGTCCCTACCCTTGCCATGCTCACCCACCAGTAGGTGGA
-CCTCCTTGACCATAACTACAGACATAGATCTTTGATTGTTTCTTTTCAAATGTTTGCTTACTTTAGAGGTGCAGTCAAAT
-GTTGTTTGGACCATAAGACTCTGAGGCTGTGTGTGGTTGAAACTGTCTTGAGACTCAAAGAGCTATTGAGGAAGGGATTT
-GATAGCTGAACTCTTTTGAAGATTTTCTCTGTCTCTCACACATCTGGGGCTGAATAGCTTAACGTTTAATTTCTACATCG
-ACGATAGTTTAATAGCCATTCATGCAAATCAGTTCTGCTGTGAGTTATTATCCTACTCCAATACCAACTAACGCATTCCT
-TAAATTTAGTGTACGTATAAATTCTACATGGTAAGTGAAGCTGTCTTTATGAATGGCTGCTATAGAATATACTAGATTGT
-GTAGGTTTTAGTACAATCCAGGTAATTATCAAGCCTTTGTAATATTTTCAGGAAAGTGATCCTTTCACTTCAGTTTATGG
-AACTTGAAAATTTTTTAGTTGCCACCGACTAGTTAGATCATAAACTTAATTCTATGTATCTGAATTTATTTTTCTATTTA
-TAAATTTATCTGGGTGCTTTCTCAAAGGTTTCCCAGATTAAAAACCTATGGCTTTGTAAAATTAAAACAGAAGTAATAGG
-AATTGAGTTAAAAAACAGAATCAGGCCAAGCCTGGTGGCTTATGCCTCTAATGCCAACACTTAGGGATGCCAAGGGGGGA
-GGATCATTTGAGGTCAGGAGTTCAAGACCAGCCTGGACAACATGGCAAAACCCCACATGTATTAAAAAAATACACAAATT
-AGCTGGGCGTGGTGGTGAATGCCTTTAGTCCTAGCTACTCAGGAGGCTAAGGCAGGAGAATAGCTTGAACTTGGGAGGCT
-GAGGTTGCAGTGAGCCAAGATAGAGCCACTGAATTCCAGCCTGGGTGACAGAGTGAGATCCTGTCTTAAAAAAAAGGAAA
-AAAGAAAAAGAAAAAACAGAATCATACAATGAGAGAGATTGTATAGCCCTTTTAATTGTCCATAATGGATACATTTCTTT
-TTCTGTGTAATAGTTTATCAGCATGAAAAAAAAGAGTCACTGAACACTGATAATTTTCTTTCTCTCTCTCTCTCTCTTTT
-TTTCCTTTTTTTGGAGATGAAGTCTCGCTCTGTTGCCCAGGCTGGAGTGCAATGGCAACATCTCTGTTCACTGCAACCTT
-CACATCCTAGGTTCAGGAGATTTTCCTGCCTCAGCCTCCCAAGTAGCTGGGATTCCAGGTGCACCCCGTCATGCCTGGAT
-AAATTTTTGTATTTTCAGTAGAGACGGGGTTTCATCATGTTGGCCAGGCTGGTCTCAAACTCCTGACCTCAAATGATCTG
-CCCGCCTTAGCCTCCCAAATTACTGGTGATGATTTTCATTTAATGGTGTTCTACAAAGTGAGTTTAGGCAGTGAAAGGGC
-ACAAGTCACCTATAGTTTACCAGAAAGTAGTACCAGTCACCAGCGTTGAAGCATACTCCTAACCCTGGAAAATTTCTTCA
-GCAGCCAGAATTAATCTCAGATTTTGAGACTGGAGCAAAGACTAATTTGGTATGTGTTCATTTAGATTAGTAAATCTCTA
-TGGTGTTCGAACTGTATAATATCAAATCTAAAATAAGTCAAGAGAGTTAGACAATATCTCATCTCTGAGAAAATAAATGC
-ATTATTTTCAAGAGATTTAAGACTGAATTTAAAATCCAACTGCCTGTTCCAGTGTATGTTTCTCTAGAATATGGCCAAGC
-CCTACAAATTCTGGATAGTGTCCTCCAAGTTGTGTTTAAGTGATAATTGATAAATCTATGGTTTAGATACATATGGAATT
-CCACATAACTCTAGCTCCAGCCTTTGCGAGTAAAAATTGGCAGTGATCATGGCCTTAATGGAGGCATGTGGTTAATTGGA
-ATTTTCAGTACCAAAAGTCTTCTTCTTACTAGTTTATCAGGGTACCCTATAATAGTATCCATAACTCATTGCCCACTTGT
-CTGTTTTGATTTCTTTTTTAAAAATACAATTTTAAACTTAGAGGTTTTGTACCTCAAGTCACATATGTGGCACATTTATA
-AAATAATCATGCCTTTGCATATTTTTCCTTTGATATCTTAGCTGTATATACAAGCCACTTATGTTTTTTAATTGCCACAA
-ATATTGCACTGAAATAGAGCACTAGTTGCAAAAATGCCTGGTATAACATTTCTTCTTGTTCTTGAAAGTAATTTTAATAC
-CCCATGTTTAAGATATTCCTAGACAACTATAAGTAACTATAATTATTTCTGCTAGGTAGAAGCATCTTTGTGGTCAACAT
-TTGTGAAGTGCCTTGTAAATAAAAATATGCTTGAGTAGAAATAGTATTTTGCAAATATAGCCCTAAATAGAGCTACTGAT
-TTTACCAAGAATTAAAGACTCCAAACTCTGTCTTTGTCTTTCAAATTTGGTTTATAGGAACATCTCATTACAATGAGCAA
-AAAGCCTATCTGATCATTAAAGAGATAATTTTGACACTTTCAAATGACACAGCTAATTTGTAGTAGGTTTTTGAAGTGCA
-AATTACATGTTTCTGTTTAAATAATGACAGTAAAATATGGACAGTATCTATTCACACTCTATATACACAACTACAACTTG
-TCCCTAGAAGAAAAGTTTAATTTTTCAGGTCTCATCCACAAAACGAAGTGTTAATAAGCTGTATCTTTATTCTCACTTTT
-AAGTAATTTCTTCTTAACCATTGTATAACACTACCACAGTTTGTATGGAGATAAAATAACTCATGGTGAGAAATCCAGTT
-CTTTAAAAAATCATTTTACCTTCAATCACTTTTAGGATGTCTATGGTTTTAGAGTAAGGACGAAAATTTATAAACATTTG
-TTAAATTATGCAACTGTGTTTGAAGATGTTTCAAAATTACATTTTCCTTATTTTACAACTAGTTTTCATGTATTCACAAA
-CGAGACACATGAGAATTATTAATGCAAAAGCACAGCATATCAACAAAGTTTATAATGTAAATAGTTTAGTTAGGAAAGAA
-TGTAATGAGTGAATTATCAAAGCTATTTTATTGGTTCCTAGATTTACCATAGAAGAAAATAAAGCAGCCTTTTAAAAATT
-TCTCAGCACTGAGTCCATTTAAGGTCTGTATTGTATGCCGTAAGTTCTAAAAAATGTTATTGCCGGTAAAAATAGGATGC
-CTATCTAAAATTGTCTTTTTAAAGGTTCTCTCTTATTCTTCTTCCCTTCCTATGTGTGCACAGAATACTGTCATCGTCTT
-GATTGGAACACTATCTCTCTTTCTCAGAGGGTGTACATTTGTAGAAGGGAGAAAATATTTGTTAATTTTGCTTCCTGTAA
-GATAAGGCCTCAATGGTTAAAGGTTAGTTAACAAACTTTTTTTTTGTCTTCATACTATTATCTTGGAATTACCAACTGGC
-TTCTACTTGGATTTTGAATAATGAAAGAAAAGAACTAGCATTTGTTAGAACTTACTGTGTTCCAGAAACTTTATTGATGC
-CATTTCTTCTCATTATCACATTCATTCTTTCAATTAGTATAATTTTTTTCCATCTTAATGAGGTGGGACCAGAGGTTTTG
-TAATATCCACTAACCCACTGTGGATTTCATGGATTGCAAGAGGAAGAAAGCATGGTGGAACTCAGGTTTCTCTGATTCCA
-AATTCACATCCTTTCATGTCTCCATGAAAAATAGAAAAGATAAATTGGGCTCTATTCTAACAAGAGAAACACAATTTTCC
-GTCAGTTAAATGAATAATTCTTTTTTATTTTATTTTATTTTATTTTTATTATTATACTTTAAGTTTTAGGGTACATGTGC
-ACATTGTGCAGATTAGTTACATATGTACACATGTGCCATGCTGGTGCGCTGCACCCAGATACCTAAATGAATAATTCTTA
-AACCTCAAAAATAAAAAGTAGCAAAACCTCAATTCAAGAGTAGACATAAAGGTTGTGACATGGGTGGCAGGGACATATGT
-CTAGTGACAGATTTCCTATGCATATCTGACCAAAAATCCCCCTCATGATTTTCAAATCAGATGCTTAACTACATTTAATG
-AGTTTCCCGAATCATTAATATCAGGCTCTGAAAACAGGATCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGATCCTGTCGAAAGAAACGAATGGAATGGAATGGAGTGG
-AGTGTAGAGGTGTGGAGTGATGTGGAGTGGAATGGAGTGGAATGGAATGGGATGGATTTGAATGGAAGGAGTGTAGTGGA
-GTGGATTGGAGTGGAGTGGAGTGGAATGGAATGGAATGGAGTGGAATGGAATGGAATTGAATGGAATGGAATGGAATGGA
-ATGTTGTGGAGTGTATTGGAATGGAGTGAAATAGAGTGTAATGTAATGTAGTGGAATGGAGTGGAGTGGAGTGCAGTGGA
-GAAGGGTGTAGGGGAATGGAATGGAATAGTGAAATGAAATGTGAGCTGAGATACTCCCACTGCACTCCAGACTGTGTGAC
-AGAATGAGATCCTGTCGAATGGAATTGAATAGAGTGGAATGAAATGGAGTGCAGTGGAGTGGAGCAGAGTGGAGTGGAGT
-GGAGTGGAATGGAATGGAATGGGATGGAATCAAATGGTATGAAGTGGAGGGGAATGGAGTTGAGTGGAGGGACGAGGAGT
-GGAATGGAATGGAATTGGATGGAATGGGATGGAGTGGAGTGGAGTGGGGTGGAGAGTAGTGGAGTAGAGTGGAATGGAAT
-GGAGTGGAGTGGAGTAGAGTGGATTGGAGTGTAATGGAATAGAATGGAATGGATAGGAATGGAATGGTATAGAATGGAAT
-GATGAAATGAAATATGAGCTGAGATTGTGCCACTGCACTCCAGCCTGGGTGACAGAGTGAGATCCTGTCAAAGGAAAGGA
-ATGGAATGGAAAGGAGTGGAATGGAATGGAATGGAATGGAATGGATTGATTGGAGTGCAGTGGAGTAGAGGTGAGTGGAG
-TTCACAGTAGTGCAATGGAATGGAATGGAGTGGAGTCGAGTGCAGTGGAGTGGGTTGGAATGGAATGGAGTGGAATGGAA
-TGGGATGGAATGGAATGGAGTGGAGTGGAGTGGAGTTCACAGGAGTGCAATGAAATGGGATGGAATGGAATTGAATGGAA
-TGGAATGGAATACAATGGAGTGGAATGCAATGGAATGCAATCGAATGGAATTGTGAAATTAAATGTGAGCTGAGATAGTG
-CCACTGCACTCCAGCCTGTGTGACAGAGTGAGATCCTGTTGAAAGAAATTAGTGGAATGTAAGAGAATAAATTATACTGG
-AATGGAATGGATTGGAGTGGAGTGGAGAGGAATGGAGCTTAATGGAGTGGAAGGGAATGGGAAGGAGTGGAATGGAATGG
-AGTGGAGTGGAGTGGAGTGGAGAGAAATGAGGTAAAATGCAATGGGATGGACTGGAATGGAGTGGAGTGGAGTGGAGTGA
-ATTGGAATGGAGTGGATTTGACTGGATTGCAGTGGAATGAAGTGGAGTGGAATGGAATGGAATGGAATGGAATGGAATGG
-AGGGGAGTGGAGTGGAGTTGAGGGGAATGGAGTGGAGTGGAATGGAGTGGAATGGAATGGAATGGAATGGTGAAATAAAA
-TGTGAGCTGAGATTGTGCCACTGTGTTCCAGCCTTTTTTTGACACAGTGAGAGCCCGTCAAAGGAAAGGAATGGAATGGA
-ATATGGTGGAATGGAATGGAGTGGAGTGGATTGGAGTGGAGTGGAGTGGAGTCAAGTGGAACAGAGTGGAATGGAATAGG
-ATGGAATCGAATGGCATGTAGTGGAGTGGGATGGAGTGAATTTCAGTGGATTAGGGTGGAATGGAGTGGAATGGAATGGG
-ATGGAAGGGAATGGCATGGAGTGTAGTGGAGTGGACTGGAGTGGGTTAGAATGGAATTGAATGGAATGGTATGGAATGGA
-ATGGAATGGAATGGAATGGAATGGAATGGTGAAATTGAATGTGAGCTGAGATAGTGCCACTCCACTCCAGCCTGGGTGAC
-AGATTGAGATCCTGTCAAAAGAAAGGAATGGAATTGAATGGAGGGGAATGGAATGGGATGGAGTGGGGTGGAGTGGAGTG
-GAGTGGAGGGGACTGGATTTGAGTGGAGTCTAGTGGAACAGAGTGGAATGGAATGGGGTGGAGTGGAACGGAATGGAATG
-GAGAGGAGTGGTGTGGAGTGGAGTGGATTGGAATTCAATGGGATGGAATGGTATGGAGTGGAGTGGAATGGAGTGGAGTG
-GAATGGAATGGAATGGAATGGAATTGGAATGGAATGGAATGGAATGGAATGGAGAGGAGAGGAATGGAGTGGAATGTAGT
-GTAATTGGAAAGGATGGAATGGAATGGAATGCCATGGAATAGAATTAGGAATAGAATGGAATGATGTGGAATGGAATGGA
-GTAGAATTCAGTGGAGTGGAGTGGAGTGGAGTGGAATGTAATGTAATGGAATGGGATGGGATGGAGTGGAATGGAATGGA
-GTGGAGTGGAGTGGAGTGGAGTGGAATGGAGTGGAATGCAATGGGATGTGATGGAATGGAGTGGAGTGGAGTTGAGTGGA
-TTGAAATAGAATGGAATGGAGTGGAGAGGAGTGTAGTGGAATGGAATGGAATGGAATGGAATAGAAGGGAATAGAATGGT
-GAAATGAAATGTGAGCTGAGATTGTGCCACTGCACTCCATCCTGGGTGACAAGTGAGATTCTATCGAAAGAAAGGAATGG
-AACGGATTAGAGTGGAATGGAATGGAGTGGGGTAGAGTGGAGTGGAGTGTAGTGGAGTAGAGTGGAATAAAGAGGAATGG
-AATGGGATGTAATGGAAAGGAATGCAGTGGAGTGGAGTAAAGTGGAGTGGAGCGGAGTGGAGTGGTGTGGAGTGGAGTGG
-AGTGGAGTGGAGTGGAGTGGAGTGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGCACGGTGAAATGAAA
-TGTGGGCTGAGATTGTGCCACTTCACTACAGCCTGGGTGACGGAGTGAGTTCCTGAAGAAATAAAATAATGTAATAGAAT
-GGATTGGAATGAAATGGAATGGAGTGTAGTGGACTGGAGTAGAGTGGAATGGAGTGGAGTAGAGTGGAAGGGAATGGAAT
-GAAATGAGATGGAATGGAATGGAATGGAATAGAATGGAGTGGAGTGGAGTGCAAAAATCCTCAATAAAATACTAGCAAGC
-CGAATCCAGCAGCAAATCAAAAAGCTTATCCACCATGATCAAATGGGTTTCATCCCTGGGATGCAAGGCTGGTACAACAT
-ACGCAAATCAGTAAACGTAATCCATCATATAAACAGAACCAACGTCAAAAACCACGATTATCTCAATAGATGCAGAAAAG
-CCCTTTGACAAAATTCAACAACCTTCATGCTAAAAACTCTCAATAAATTAGATATTGATGGGACGTATCTCAAAATATTA
-AGAGCTATTTATGACAAACCCGCAGCCAATATCATACTGAATGGGCAAAACCTGAAAGCATTCCCTTTGAAAATCTCAGT
-TACCTTTCTTTTGGATATGAGTGTGAGGAAAGAGTACCTACAAACTACCCTTTTAGTTAAATGCCATATACAATAAATAT
-TAATACCTACAGTCCTCATGTTGTACATTAGAGCCCTCAATTTGTTAATTCTACATATCTGCAACTTTGCATCCTTCGAA
-TTCTCTCTCTCCATTTTCTCTTCTCACCCCCAGCCCCTGGTAACCACTGTTTTATACTCTATCTCTGCATATTTACCTTT
-TTGCTGTTTTTGTCCTGAGAAGTTTATTGGGACTTTCAGCTAGGAGATAATATGTTCTGAGTCTTGATTATCTCAAATTA
-TATCAGGTAAGAAGTTTTACTTGTCTGGAGAGCAGAGAGCAAGTGCATAATTTTATGCAGAAGAGGGAATAAAGAGAATT
-CTCTAATTAAAATTTGAATCAGAAATATGGTTCATATTTTTATGTACAACAATCTCTAAGGCTTCTTGGAAAGGAACTAG
-CTGCCTGATTTTTTTTCATTTGAATCCTCTAATACATGAAGAGGATGATTCTACCATACCAATCACAAGAATGATATCTG
-TAGAATCAAAAGTTGAAATCCTATTATCCTAGAAGTTTTTTCAGAAAACTTGAACATGTATTGAAATGTCATGCTGGTCA
-TATATGTTACAGCAATGAGGAATTTACTTATTATATACTTTAGCTTTTTAGCCCTTTCCCTGCCCACCAGAAATGTTTCT
-TTTGAATCCAATTTGGTCCTCAGAGTTTTAGAATGTTAAGGAATGTATAGGGGTATCTTTTTTCTTCTTTTTTTTTTTTG
-TCAAGCTATTGTATATTTTTACTTTACCTGTTTGGGTATGTAGTTACTATTTGTTTGGACTGTCATACTAGAAAAAAATT
-ATAGTGAATTTTACATGTATGGAGTCTTCATTAATCTGTATAAACTGACAAGTTTAGAATATCAAAGTCATCACTGTAAA
-AAATAAAGTGATATTTTATCTGGTCTATCTCCTTGCAAATAAAAGAACAATAAATTCTGTACTATTATGAAATATAAGAG
-CTTGAAAATTTTTCAAGCGTCTTGTATAGAATGGCCTTCGAATTCAAGGTATAAACTACAACAAAACACTTTCGAGATCT
-AGTTTGATTGAAGAGTGCATTCTTACTTATTTATATATTCTCTGCAATTTCTGATTCAAGATAGTCCACAATTCTAAAGG
-AAAACCAAAATAGAATAATAATTATAAAACAAAATAAAAAGTAATTGAGGAAGATAATTGAGCAACTTATTCTTGACAAC
-TAGCTTTTTAACAAACAGAAAAGTGCACTAAAAATACTGCCTAGTTGTTTAAAGTAGGCTGAGATCTGACTGTATCCCCT
-GAGTGACATAAAGAAAAAACTACCTTTGAGGAAGCACAGTGATTAAATTTAAAAGATTTATTGTTTAACCTCAGGAAGAC
-TTTCAATAACTTTTTATAAATTGTATACAGTTAATGGAAGACATGCTAGGCTTCTTGTAAGAATTTATTCCAGATCACTG
-TGTATAATTAATGGCTTGTCTACATATTTTTTCAATAAAACTGTTCATGAAGAATTTTAAGTATGCACTTTCAGTAACAG
-AATGGATATATCTTTGTGAAGATACCATTTATGTACCATAACATCCAAAGCATAATGAGGAGATTTTGATACACTGCAGA
-TTTAGAACTGAGTTGGAAAACAAAACTTCAACATACTGTCTTGTCAGCACAAAGCAAATAAATTCATCACTGTCAGTTGA
-GATTTAAATTCACAAACTTATAAGCAATAAAATCAAAGTAATTTTGTTATAAGTTTTTTGACACCAGATTATATGGGGTA
-AATAATTTACTTTCTAATCAAGCAATTGATACATATAAACCTGAAATAGAGAGTTTTGCCTTTTAATTAGATACATTGTT
-ACGCAAAGAGTGGTTGAAGCTGCAGTGGAGAATTATCTTTTTCTCTTTTTGCTGTTCTTACAAGGACAGTTTCTAGAATT
-CTTTTCAAAACAATAGAACAGAAAATTTCACTTACTTAATTTAACTTTTGTTAAAGTACTTTGCCAAAATTAGCAAACTA
-TGAAAGGAAAGTTTGCCTTTTCAATATATATGTAAGTGGCAAGTAAAAGTTGTTCTTAAATCACGTGATCTCATAGAAAT
-AACATGGGATAAAAAGAGTTCTGAAGGTGTTCAGGAAATGCCAGTCCTAAATGTATTGCTTTGGTGTACTGATTATATTG
-AACTGAAAATATTTGAAAAATAACAACTGTGGGACATGCTTTCTCTGCACTCCCTTTACGTTCCTCAAGAGAGATCCTCC
-AAAAGGAATTTTCAATACCAGAATGAATGTATCTTTGTAAAGATACCATTTATCTACCATAACATCCAAAGCATGATGAG
-GAGATTTTTATACACTGCAGATTTAGAACTGAATTGGAAAACAAAGCTTCAAGATACTGTCTTGTCAGCACAAAGACATT
-CATCTCCTTCCTAGGAGTTTCATCAGCCAGGGAAAATTGACTCCTCATATCACAGGAGACAAGACTAAGAGTCCATTCCA
-CACCAAGGCAGACTGCCACAAACTATCATCTATGCTCCTAGGGGTCTGGTCATCTTTCCCAAAAGTCATTTGCTCTCCCT
-TAAGTTTCCTACATTCTTCCTCCTGCCTTCCCTACAAGCTCCTAAATCTCCCTGGGTTTTTTTCTTGGTGGTGTTTTGTT
-TGTTTTGTTTTGTTTTGTTTTTGATTCCACGTTTCTTTCCTGTGATTCCCCCATGCGTGTAATAAATGTGTACACATTTT
-CTTCTTTTGACATGCCTGTTATCCATTTATTCAATAGACTCAGTTATCATACCTTCAGAGGGTAGAGGGAAAGGTCTCCA
-AGTCCTACAGTTCCAAAAGAAAATAGCTAGTAATGCAAATGCAAAAGTCATATAAACTTTGAGACAAAGTTAGCGTCTTA
-TATGGTACGTTCAGAAAGAAGAGGTGTGTTGCACACCAAGGGACATTTTCCTGGTCTTAGCTACTAAGTTTCTCTGAGAA
-GAAGCAGTTACTACTACAGCAGTTAAACACCTGACTCCCAAATTATAAAAGCCTAAGTGTTCAGATTAAATCATGAGTTG
-TCACCTGTGAATCATAAAGTCTGAACTCTTTAAATTGCAAACACACATAGAAAAACGATTCTTACACAGGGATCCATGAG
-TGGAACTGCAAAGTTTTGTCAAAATCTATATATATGTTTTCTTTTTAAGGGTCATAGATTTCAATATATGTTAAAAGATA
-TCTGGGGCTAGTAAAGATTAATAACCATTTTCAGTTTTGTGCTGAAATTGGCAAATCATGGCTTTTCTCCCTCCAACACA
-CCCCCTCCCGCCTCAGCACACCACTGGTTAATCTTTATTTTCAGGAGAGAAAAAGATGTTTCATATTAATAAAGGTAAAT
-TATACACTTGTTTGTTTTATACTTTTCCACCTCTTAAGCTTAATCGTGTTTTAATAATGTATAATTGAATACATTAACAT
-TTAGATGTTAGTAAATGAATAACAAATGTTCATTGTTTCTCTTGAGTAGAGGAATAAAAATTTTGCACCTGTTGTATAGA
-ATGATTTTTAAAATCTCATTCAATCCTTCAGAAGTTTAAGATTTTTTTTCAAGAATTTTTATATAAAATTTTTACTCAGA
-AGCAGATAGCTCACAAAAAGTATGGGGGTTTTTTGGATTATAAATAAACTATTCCACTCACCAAGATGCTGAGACATCCT
-ACTTTGTGGTATTTTGAAATAAAAACAAAACACAAGAATGTGACGATGAAGCAAGTGAAAATTAAAAGGGTACAGACTTT
-AGAAGTATCATAAGCTAAAAATAAAATGAAACAAACCTGTAAAGGAACCAAAAGCCCAGGTAGATATAATACAGTAAATT
-ATGAGAAGCTAAAAAAAATGAGGAGGTGATAAACAATAAAGTGAAAATCTCTGATAAAGCCAAAACTACTTGAATGGCAG
-TCAACAAAACAGAAGAAAAAAATGACACTCATAACAAGGCAGAACTATGGAAATGCATCCCTGGGGGTAAGATAATAGAG
-TTGCGAATTAGTGGAGGTGGATCACAAATACTGGCCAAATAAAGCCCGCTAACATAATTCAAAGGACAGAGAAATTCTGT
-AGCTGAAGATAAAAAGTCTGAAATACATTATGGTATAGTCAAATGAGTGTCATTTCTAATAGACACACTTATTTTTCAAG
-AGTTGATAATATGAAGTAAAAATTTAGTATGCAAAGTTCAAATTTTCCATTTGTTGAGTAATTCATTTTTATTAAATATT
-TTCCAACAATTAAACTAAAGTGGTACCAGAACAGAGTAGACATTCTGAGTTTTCACTTTACAAAAGCTACACATAAATCT
-ACGTACTTCTTAAGGGTATAAACAAAGTCAGAGCCTGTGTGATATTTCAATAAACAATTGGAGAAAATTTTTTTAAGAAT
-AGATTATATACATATTGACCTCTTTGAGAACCTTATTTTTTTCTTTTTTTTGTGTGTGTGTTTGTTTTTTTTTGTGTGTG
-TGTGTTTTCATTTCTTTTTTAAATTATTATTATTATACTTTAAGTTTTAGGTTACATGTGCACAACGTGCAGGTTCGTTA
-CATATGTATACATGTGCCATGTTGGTGTGCTGCACCCATTAACTCGTCATTTACATTAGGTGTATCTCCTAATGCTATCC
-CTCCCCCCTCCCCCCACCCCACAACAGTTCCCAGTGTGTGATGTTCCCCTTCCTGTGTCCATGTGTTCTCATTGTTCAAT
-TCCCACCTATGAGTGAGAACATGCGGTGTTTGGCTTTTCATGCTTGCGATAGTTTACTGAGAATGATGGTTTCCAGCTTC
-ATCCATGTCCCTACAAAGGACATAAACTCATCATTTTTATGGCTTCATAGTATTGCATGGTGTATATGTGCCACATTTTC
-TTAATCCAGTCTATCATCGTTGGACATTTGGGTTGGTTCCAAGTCTTTGCTATTGTGAATAGTGCCACAATAAACATACG
-TGTGCATGTGTCTTTAGAGCAGCATGACTTATAATCCTTTGGGTACATACCCAGTAATGGGATGGCTGGGTCAAATGGTA
-TTTCTAGTTCTAGATCCCTGAGGAATCACCACACCGACTTCCACAATGGTTGAAATAGTTCACAGTCCCATCAACAGTGT
-AAAAGTTTTCCTATTTCTCCACATCCTCTCCAGCACCTGTTGTTTCCTGACTTTTTAATGATTGCCATTCTAACTGGTGT
-GAGATGGTATCTCATTGTGGTTTTGATTTGCTTTTCTCTGATGGGCAGTGATAGCATTTTTTCATGTGTTTTTTGGCTGC
-ATAAATGTCTTCTTTTTAGAAGTGTCTGTTCATATCCTTCACCCACTTTTTGATGGGGTTGTTTTTTTCTTGTAAATTTG
-TTTGAGTTCATTGTAGATTCTGGATATTAGCCCTTTGTCAGATGAGTAGGTTGTGAAACTTTTCTCCCATTCTGTATGTT
-GCCTGTTCACTCTGATGGTGGTTTCTTTTGCTGTGCAGAAGCTCTTTAGTTTAATTAGATCCCATTTGTCAATTTTGGCT
-TTTGTTGCCATTGCTTTTGGTGTTTTAGACATGAAGTCCTTGCCCATGCCTATGCCCTGAATGGTATTGCCTAGTTTTTT
-TCTATGGTTTTTATGATTTTAGGTCTAACATGTAAGTCTTTAATCCATCTTGAATTAATTTTTGTATAAGGTGTAAGGAA
-GGGATCCAGTTTCAGCTTTCTACATATGGCTTGCCAGTTTTCCCAGAACCATTTATTAAATAGGGAATCCTTTCCCTAGT
-TCTTGTTTTTGTCAGGTTTCTCAAAGATCAGATAGTTGTAGATATGCGGCATTATTTCTGAGGGCTCTGTTCCATTCCAT
-TGGCCTCTATCTCTCTTTTGGTACAAGTACCATGCTCTTTTTGTCACTGTAGCCTTGTAGTATAGTTTGAAGTCAGGTAG
-CGTCGTACCTCCAGCTTTGTTCTTTTGGCTTAGGATTGACTTGGCAATGCAGGCTCTTTTTTGGTTCCATATGAACTTTA
-AAGTAGTTTTTTCCAATTCTGTGAAGAAAGTCATTGGTAGCTTGATGGGGATGGCATTCAATCTATAAATTACCTTGGTC
-AGTATGGCCATTTTTACAATATTGATTCTTCCATGAGCATGGAAGGTTCTTACATTTGTTTGTATCTTCTTTTATTTCAT
-TGAGCAGTGGTTTGTAGTTCTCCTTGAAGAGGTCCTTCACATCCCTTGTAAGTTGGATTTCTAGGTATTTTATTTTCTTT
-GAGACAATTGAGATCCTTATTGTGAGATTCAATTCAGAATCTGGGATTTTGTTTTGTTTTGAGATGTAGTCTCTCTCTGT
-CACCAGGCTGGAGTACAGTGGCACAGTCTCTGCTCACTGCAATCTCTGCCTCCCAGGTCCAAGCGATTCTCCTGCCTCAG
-CCTCCCAAGTAGCTGGAACTACAGGCACGTGCCACCATACCCAGCTAATTTTTGTATGTTTTTTTAGTAGAGATGGGGTT
-TCACCATGTTGGCCAGGATGGTCCGGATCTGTTGACCTTGTGATTTGCCTGCCTCAGCCTCCCAAAGTGCTGGGATCACA
-GACGTGAGCCACTGCGCCCAGCCCAGAATCTGGGTCTTAACCAGATTTGCCATTATAAAATGAAATGAAACCAAAACCAC
-CAGTCAATATCTGTAGCAGTGTTATTGTTGGGGAGCATGCACGTTTGTTTGAGCTTACTTATATATACAGAGCTGTTTAG
-CTTAATCTTTAAATTGAAAATTTTTAGTATTTTTAGAATGTTTTAGATACTTTGATGAATAAATTTTGTGTTAACAAACT
-ACTATTAATAAAACTTATAAATTAAATATTTCTGAACACATTGGCAGAGGTAAATGATAAAGTTATATTCACACAATTAG
-TTTTTCTTGCACAGAATTGACATTTTGTCAAAAAGTTAAAATCTTTGAAATGTGTTTTCTGTCCTCATCTTTCCCCTTTT
-GAGCATTTTTCCCCCTGGGTTGGTTATAAAATATTCCCTAACTTCAGGCATCTGGTTAAGTTTTGGGTTTTCTCCCTTCC
-TACCAACTCATATGGATTGGTAATGATCTGATAGAAGACAATTGCCAAAAATCAATCAAATATGTTTTAAATGAAACTTC
-TCCAATATAATATTCATATTAATCCTTCTTTAATTGCTGAATGAGTAATAATTGTTCACTGACCCTTAAAATCCTAAAAC
-TTAATCAGCTCACTGGAGTGGATGAATGGATGTTTGTCTAGATGAGAATGCTTAAGGTCTACTTCAAGGAGTTCATAATA
-GTAAAAATGTCCTTTTCTTCCATCAGAAACTTCATCCTGGATCTTTTCATCCTTGTTTTTCTACTAGCTCTCCTTCTCCA
-AATACACTGACTTGGAACCCCAGTTTCAGTGGTGGACTGCGTGGATTTGATTCTAAGCTATGCTATAATGAGAAAGTAGC
-TCTAACCCTATTCTCATTTTCTTCACCTGTAATATAGAAATCATCATCAGACAATATACAGATAGGGGCCAGTTATTTCA
-CAGATAATAATAGGTGAAAATGGAGAGTATGTGGGTGTAGGCATGGAAAAGTGAGTTTAAATGGTTTCAGGAGTCTGTGG
-AAATTGTCTTTGGGTGATTCAATGTTCTCAGGGAAGCACACCCAAAAAGACATTGAGGATTTCTGGGGAAGTGTTAGGGA
-TTAGAGACAGGATAAGATACAAAACTAGGAAAATTAGAGAGTGAATAGATTGGAACATATGTAGTATGATTGATTGATAG
-GCGGCACTCAGATTCTCAGTTTCAAGTGGGATATTTTTCAATTTGATCCATATAGCTAGTTGCTCAAATATATGTGGGGA
-TTTGGTGGAAATTTGGATCTAACCAGGGTTATTTTCCTGGTTAGATTCAGCAAAGTGAAAGAGAAACAAGGAAGTTGAAG
-TTTCCTGGGAATGGTTGGCCACGGAATTTAGGCAGGAGAACAGGAAATAGAGTACATCAGTAGGTAAGGGTCATTATAAA
-TATGATAAAATAATAGTTTGGAGGTCTCAGAGAGATTGAAAAATTTTATGTCAGCGTATGAAAGGGAATGATTAAAGGAG
-GAGTTCAGAGAATGGGATGAATGAAATTGTGACTACAGAGGAGTTGCTATTATAAGTAACGACGATGCTTCACTCAGTTC
-CTCTGGAAGTGTGGTCCCTGTGCTAGCAGCAACAGCATCACCTGGGAACTTACTAGAACTGCATATTCTCAGGTTACACC
-CCCAGATCTTCCAAATATGAAATTCCAATAGCAGGTCTCAGCAATCTCTTATTGTAACACAACTGTAGGCAATTTTGAGG
-CACACAGTAGTTAGCACAACTGGTCTAGTGTATGTCTTATTTGGTCTTCCTCCCCGGTTCACAGTACAGAGCTCCTAAAA
-CTTGAAATTTCCTGATAGAGATGAGAGGACCATCCTTTACTAGTCATAAGTCCCTCTTAGCCATACCTGAGTTTATGCTA
-TTGACATGACATGAGTGGTGGTTGGAGACCCGTATGGCTTCAGGGTGGGTGCTTGACACCAGAAACATGAAGGCATAACT
-AGATGGTTAAAACTGTCAGCCCTCTCCTCCATCACCTCTGAGGTGCTGGGAGGGTGATACAATGATATACTTAGAGGTCA
-TATGGCAGCTTTGTGCCCCTTTTCACCATACCTGGCCCTATGTGTCTCTTCTATTTGACAGTTCCTGATTTGTATCAGAC
-AGTAACTGTAAGCAAAGTGCTTTCTTGGGTTCTGTGAGCCATCTTAGCAAATTATAGAACCTGGGGAAGGAATCCATGGA
-AGTGCTAATTTATAGCCAGTTGGTCAGGAGTATGGCAGGCCCACAACTCCTCTCTAATGGTGGGGGGGTGGCAGTCTTGT
-GGTCCTGAACCCTGAACTTGTGGGATCTGATGCTATCTCCAGATAGATAGTCTCAGGATTGAATTGAATTGTAGGACACC
-ATTTGGTGTCCTGAGAGTTGAAAAATTGATTGGGGTGAGACTAAACCAACAAATTTCATCTCAGAAGTTTGAGTAGAAAT
-AATTCTGTTGGAAAACATTATCGTTAGATCAAAGGTGTTAATAGAACTGAGAGATCAAAATGGCAAAGAGTCATCTATGA
-TTACACATTGTTGACATAAACTAGAATTAAGACAAGAGTATGTCAAAGAGAGTTACATTGAGCCAGGGATAAAAATAGTC
-AATTGATTGATTAGAATTTAGTAAATGCTATTTTTTGAAAAATTAATATTTAGTTAATTAATGGAGATACTTAATTATCT
-CCATTTTGACTTTAAATTTAAAACTAAAAAATTGATATTTTATCTATTTTCCATAAATGGAAATTGAAAAGCAATAGCAA
-AATGCTTCGACAGAAAATCTGCCCTTCTTATTCCCAAGAGGAAGAATGGCCAACTACCTTAAGAATAAGTTAGAAAAACT
-TTCATAATTTTTTAAGTTGCCATATTTTATAGCTTTGAACAAGTTGAATTATTAACTAGACTGCCCAGGGAATGGAGCCA
-TCTAATATAATTTCCTTACTATTTAGATAAAATCTTTGTTGTTGAAAATCTTAATCATTTTTAATGATCCTGTTTTCAGA
-GCCTGATATTAATGATTCGTGAAACTCATTAAATGCAGTTATGCATCTGATTTGAAAATCATGAGGGAGATTTTTGGTCA
-GATATGCATAGCAAATCTATGTCACTAGACATAAGTCCCTTCTACCCATGCCACAACCTTTATGTCTACTCTTGAATTGA
-GGTTTTGCTACGTTTTATTTTTGAGGTTTAAGAATTATTCATTTAACTGTCGGAAAATTGTGTTTCTCTTGTTAGAATAG
-AGCCCAATTTATCCTTTCTATTTTTCATGGAGACATGAAAGTATGTGAATTTGCAATCAGAGAAACCTGAGTTCCACCAT
-GCTTTCTTCCTCTTGCAAGCCATGAAATCCACAGTGGGTTAGTGGATATTACAAACCTCTGGTCCCACCTTATTAAGATG
-GAAAAAAATAAGACTAATTGAAAGAACAAATGTGGTAATGAGAAGAAATGGTATCAATAAAATTCCTGGAACACAGTAAG
-TTCTAACAAATGCTAGTTCTTTTCTTTCATAATTCAAAATCTAAATAGAAGCCAGTTGGTAATTCCAAGATAATAGTATG
-AAGACAAAAAAAATGTTTGTTAACTGACCTTCAACCATTGAGACCTTATCTTATAGGAAGCAAAATTAACAAATATTTTC
-TCCCTTCTACAAATGTATACCCTCTGAGAAAGAGAGACAGTGTTCCAATCAAGACGATGACAGTATTCTGTGCACACATA
-GGAAAGGAAGAAGAATCAGAGAGAACCTTTAAAAAGACAATTTTAGATAGGCATCCTATTTTTACCGGCAATAACATTTT
-TTAGAACTTACGGCATACAAAATAGACCTTAAATGGACTCAGTGTTGAGAAATTTTTATAAGGCTGCTTTATTTTCTTCT
-ATGGTAAATCTAGGAACCAATAAAATAGCTTTGATAATTCACTCATTACATTCTTTCCTAACTAAACTATTTACATTATA
-AACTTTGTTGATATGCTGTGCTTTTGCATTAATAATTCTCATGTGTCTCATTTGTGAATACATGAAAACTAGTTGTAAAA
-TAAGGAAAATGTAATTTTGAAACATCTTCAAAAACAGTTGCATAATTTAACAAATGTTTATAAATTTTCGTCCTTACTCT
-AAAACCATAGATATCCTAAAATTGACTGAAGGTAAAATGATTTTTAAAGAACTGGATTTCTCACCATGAGTTATTTTATC
-TCCATACAAACTGTGGTAGTGTTATACAATGGTTAAGAAGAAATTACTTAAAAATGAGAATAAAGATACAGCTTATTAAC
-ACTTCATTTTGTGGATGAGACCTGAAAAATTAAACTTTTCTTCTAGAGACAAGTTGTAGTTGTGTATATAGAGTGTGAAT
-AGATAGTGTCCATATTTTACTGTCATTATTTAAACAGAAACATGCAATTTGCACTTCAAAAACCTACTACAAATTAACTG
-TGTCATTTGGAAGTGTCAAAATTATCTCATTAATGATCAGATAGGCTTTTGGCTCATTGTAATGAGATGTTCCTATAAAC
-CTAATTTGAAAGACAAAGACAGAGTTTGGAGTCTTTAATTCTTGGTAAAAATCAGTAGCTCTATTTAGGGCTATATTTGC
-AAAATACTATTTCAACTCAAGCATATTTTTATTTACAAGGCACTTCACAAATGTTGACCACAAAGATGTTTCTACCTAGC
-AGAAATAATTATAGTTACATATAGTTGTCTAGGAATATCTTAAACATGGGGTATTAAAATAACTTTCAAGAACAAGAAGA
-AATGTTACACCAGGCATTTTTGCAACTAGTGCTCTATTTCAGTGCAATATTTGTGGCAATTAAAAAACATAAATGGCTTG
-GATATATAGCTAAGTTATCAAAGGAAAAATATGCAAAGGCATGATTATTTTATAAATGTGCCACATATGTGACTTGAGGT
-ACAAATCCTCTAAGTTTAAAATTGTCTTTTTAAAAAAGAAATCAAAACAGACAAGTGGGCAATGAGTTATGGATACTATT
-ATAGGGTACCCTGATAAACTAGTAAGAAGACGACTTTTGGTACTGAAAATTCCAATTAACCACATGCCCCCATTAAGGCC
-ATGATCACTGCCAATTTTTACTCACAAAGGCTGGAGCTAGAGTTATATGGAATTCCATATGTATCTAAACCATAGATTTA
-TCAATTATCACTTAAATACAACTTGGAAGACACTATCCAAAATTTGTAGGGCTTGGCCTTATTCTAGAGAAACATACACT
-GGAATAGGCAGTTGGATTTTAAATTCAGTCTTAAATCTGTTGAAAATAATGCATTTTTTTCTCAGAGATGAGATATTGTT
-CAACTCTTTTGACTTATTTTAGATTTGATAATATACAGTTCAAACACCATGGAGATTTACTAATCTGAATGAACACATAC
-CAAATTTGTCTTTGCTCCAGTCTCGAAATTTGAGATTAATTCTAGCTGCTGAAGAAATTTTCCAGTGTTAGGAGTATGCT
-TCAATGCTAGTGACCGGTACTACTTTCTGGTAAACTATAGATGACATGTGTGCTTTCATTGCCTAAACTCACTTTGTAGA
-ACACCATTAAATGAAAATCATCACCAGCAATTTGGGAGGCTAAGGCGGGCAGATCATTTGAGGTCAGGAGTTTGAGACGA
-GCCTGGCCAACATGATGAAACCCCGTCTCTACTGAAAATACAAAAACTTATCCAGGCATGGCGGGATGCACCTGGAATCC
-CAGCTACTTGGGAGGCTGAGGCAGGAAAATCGCCTGAACCCAGGATGTGAAGGTTGCAGTGAACAGAGATGTTGCCATTG
-CACTCCAGCCTGGGCAACAGAGTGAGACTTCATCTCCAAAAAAAGGAAAAAATGAGAGAGAGAGAGAAAAAAAATTATCA
-GTGTTCAGTGACTCTTTGTTTTTCATGCTGATAAACTATTACGCAGAAAAAGAAAATTTTCATGCTGATAAACTATTACA
-CAGAAAAAGAAATGTATCCATTATGGACAATTAAAAGGGCTATACAATCTCTCTCATTGTATGATTCTAGTTTTCTTTAT
-TTTTCTTTTCTTTTGTTCTTTTTTTTTTTTAATACAGGATCTCACTCTCTCACCCAGGCTGGAATGCAGTGGCTCTATCT
-TGACTCACTGAAACCTCAGCCTCCTGGGTTCAAGCTATTCTCCTGCCTTAGCCTCCTGAGTAGCTAGGAATAAAGGCATT
-CACCACCACGCCAGCTAATTTGTGTATTTTTTTAATACAGGTGGCGTTTTGCCATGTTGCCCAGGCTGGTCTTGAACTCC
-TGACCTCAAATGATCCTCCCACCTCGGCCTCCCTAAGTGTTGGCATTACAGGCATAAGCCACCATGCTTGGCCTGATTCT
-GTTTTTTAACACAATTCTTATTACTTCTGTTTCAATTTTACAAAGCCATAGGTTTTTAATCTGGGAAACCTTTGAGAAAA
-CATCCAGATAAATTTATAAATAGAAAAATAAATTCAGACACATATAATTAAGTTTATGATCTAACAAGTGGGTGACAACC
-GAAAACTTTCCAAGTTCCATAAACTGAAGTGAAAGGATCACTTTCCTGAAAATATTACAAAGGCTTGATAATTACCTGGA
-TTGTACTAAAACCTACACAATCTAGTATATTCTATAGCAGCAATTCATAAAGACAGCTTCACTTACCATGTAGAATTTAT
-ACATACATTAAATTTAAGGAATGCATTACTTGCTATTGGAGTAGGATAATAAACTCCCAGCAGAACTGATTTTCATGAAT
-GCCTATTAAACTATCATTGATGTAGAAATTAAACAATATATTAAGCTATTCAGACCCAGATTGTGAGAGACAGAGAAAAA
-CTTCAAAAAAGTTCAGCTACCAAATCCCTTCCTCAATAGCTCTTTGAGTCTCAAGACAGTTTCAACCACACACATCCTCA
-GAGTCTTATGGTCCAAACAACATTTGACTGCAGCTCTAAAGTAAGCAAACATTTGAAAAGAAACTCAAAGATCTATACCT
-GTAGTTATGGTCAAGGAAGTCCACCTACTGGTGGGTGAGCATGGCAAGGATAGGGACTAAGCCAAATGATGGGTTTACCA
-AAACAGAAACAAGAGAAGTCATTGGAAGCACAGTCCAGGTTATAACAGGAGCCCAGGCACTTGATGTGGGAACCCTATTT
-GTCTCATTCAGCACCTAGAGTTTTAACGTCCTATGAGGCACAGCTAATGCCCTTCATTATTTTTTTGTAATTGACTGCAT
-AGTTTAGAACTATGCCTTGAATTTAATATCTATCTGTTGAATAAATGAATTAATAATGATGAAAATCTGTCCACAGGTTA
-TGTGCAGTACTGAAGAGCAACTTCAGCTATTGAGGTATGTATCAGAAGTCTTACTCTCCAAAAAGCCTCTGGTTAGTTAC
-TGATATACGTTGCTGATAATTTCACTCTCACAATGTAGGGGAAGCAGGAATGTTATCTGGCCTCTTGGCTCCACTTCCTT
-TGCCTTCCACAGATCTCTCTGCTGGTTCACAGAGGAACACTTTCGTGGCTCTCAGTTCATTTTGCAATTCTGCTAGAATC
-TCATTCCATCCTCAGTTGTAACTACCTTGTCCTTCACCCAACGCTTATTTACGGAGGGACAGATAGCAAGAAGAAATCGC
-ACTCTGGATTACAAAGTGGGAAGACACACCCCTTGGCCAGAATGCCTGCCTCCTATGTTCATGAAGGATATTTCTAATTG
-ATCTCGGCACTCTTTTCCATTGAGCCCATGTCCCAAATTGGCCGTGAGTTAGGGAGAGGACTCTAGAGTGGGAAAGCTGT
-ACCCAAAACTTCCCTAATCTGACTATCAAGCCTAAAAAATTAAACTTTCAATTCAACATCCCTTGTTTCTCCAACTTGGA
-GTGCCTGATGGTGTGGGAAGCCCCTACTCATAAAAATTCATAGTTGAAGATTGTTGGTAATTTTGCCCAACCTCCTTCTT
-TTCTTTTTATTCTACTTTAAGTTCTAGGGTACATGTGCACAACGTGCAGGTTCATTACATATGTATACATGTGACATGTT
-GGTGTGTTGCACCCATTAACTCGTCATTTACATTAGGTATATCCCCTAATGCTTTTCCTCCCCTAGCCCGTCACCCCACA
-ACAGGCCCCGGTGTGTGATGTTCCCCTTCCTGTGTCCGTGTGTACTCATTGTTTAATTCCCACCTATGAGTGAGAACATG
-TGGTGTTTGTTTTTTTGTCCTTGTGATAGTTTGCTGAGAATGATGGTTTCCAGCTTCATCCTTGTCCCTACAAAGGACAT
-GAACTCATCATTTTTATGGCTGCATAGTATTCCATGGTGTATATGTGCCACATTTTCTTAATCCAGTCTATCATTGTTGG
-ACATTTGGGTTGGTTCCAAGTCTTTGCTATTGTCAGTAGTTCCTCAATAAACTCCTTCTTTCTTTGCCTAGTTACACCTC
-AATGCAACCTGCTGGCAGGCCAGCCTTAAGCCCAGCAGTCCAACCATGCATCTAAGCTGAGTTCTCATCAGAGCCAACTT
-CAATTATAAACAACTGAGATGATGCCAGAGGCCAGAATCCCTGAGAACCCAATTTGCTGTCATCACCACAGCTGAAACAA
-GGCGCTTGGCATCTAGAAAAGCTGATCTGTAGGAAATTTCCAATAGAGTTCAAGTTTTTCTAAGTTTAAAGTGTACAATA
-TCATCAAGGTGAGACACTCAAGATAAAACTAGGCTTGTGTTTAAATATAATAAAAATATTTGAAGAATAGTAAGAGTGGT
-GACTACTTTTACACAGGAATGTTTCAAATAAATTGTTTTTTTCTTGTGCCTTTTAAATTTTGTGATTTGTCAATGAGATG
-CTGACATGTTTTTAATGAAGCATGCCTTGTAAAATAATAAGTGAATGAAAACTACACAGTAATATTTACATCAACAAAGC
-TAGAAGAAGACTGTATGTCTCAAGAGGCTCCATCATCTACCCAGTGGCCACTTCACCAAATTAAGATCCAAATACCAAAA
-AGAAAAGTAATTAAAATTTGTGTTGTATGCCTTATAAGACCAAACCTATAAAATGAGGGGAAACTTCACAATTACTTGTA
-ATTTGCTCTGTGGAATTGTAACAGATGGATTATAAAGATGATTCCATGATAAACATGTAAATGTGGTTACTACCTTCTGT
-GCTTTCTTGGTTCATATTTTTATTGTTTTTTTCTTTATAAACAGATAATTCATTCTTATCTATGGCAATGCAAACTTTTC
-AGATGTATTGAATATGTCATAGTGTTTTTCTATTGTAGGCATCTCTAAAAAAGTTATAGAAAACAAACAGAGAAAAGTCT
-GGTGTTGGAAAGGAGAGAGAAATAAAGCTTGTAAAGGAATGAAGATTAGAGCTTTCTGGAGATAAAAATTCTTAGAAGAT
-ACAAAAGCTAGTTACTGAATTAGATGAAGGTTCTTTTTCAGTTTTTCCCAGTTGTTCACCTCTTAGAAGGCACATATTCA
-CAGCAGAAAAGAAAAATGTGTTAAAAAGAAAATACCTCGGTGTAGTGAGACTGTAATTTCATGAGGGCATTACTGAAGAC
-TCACTTTTTCCAGCATCACTCAGCATGGTATTATGCATGTGTGTAATGTAAAGGAAAGTGAATACGCATTCTTGGATGGG
-TGATCAAATCGTAATTCCAGAATATAATCAGAAGCTGATTCATTATCCTCTTGAGATTTCACAATCTTTTCATCAGGAAT
-TAAAATTCAGAAGAGGGTAAATGTATCTAATCAGTTGAAAGTTAAAAATTAGAGGATGGAGGCAACATGGCCGAATAGGA
-ACAGCTCCAGTCTACAGCTGCCAGCGTGAGTGATGCAGAAGACAGGTGATATCTGCATTTCCAACTGAGGTACCAGGTTC
-ATCTCACTGGGGAGTGCTGGACAGTGGGTGCAGCGCACCATGCATGAGCCAAAGCAGGGAAAGGCATCACCTCACCTGGG
-AAGCAGAATGGGTCAGAGAATTCCCTTTCCTAGTCAAAGAAAGGGGTGACAGATGGCACCTGGAAAATCAGGTCACTCCC
-ACCCTAATACTGCGCTTTTCCAACAGGCTTATCAAATGGCACACCAGGAGATTGTATCCAGCACCTGGCTTGGAGGATCC
-TACACCCACGGAGCCTCACTGTTTGCTAGCACAGCAGTCTGAGATCAAACTGCAAGGTTACAGTGGGGCTGGGGGAGGGG
-CTCCCGCCATTGCTCAGGCTTGAGTAAGTAAACAAAGCAGCCAGGAAGTTCGAACTGGGTGGAGCCTAACACAGCTCAAG
-GAGGCCAGCCTGCCTCTGTAGGCTCCACCTCTGGGGGCAGGACACAGACAAACAAAAGACAGCAATACCCTCTGCAGACT
-TAAATATCCCTGTCTGACAGCTTTGAAGAGAGTAGTGGTTCTCCCAGCATGCAGCTTGAGATCTGAGAATGGGCAGACAG
-CCTCCTCATGTGGGTTCCTGACCCCTGAGTAGCCTAACTGGGAGGCACCCCCCAGTAGAGGCAGACTGACATCTCACATG
-GCCGGGTACCCCTCTGAGTCAAAACTTCCAGAGGAACGATCAGGCAGCAGCATTTGCAGTTCACCAATATCCACTGTTCT
-GCAGCCACCGCTGCTGATACCCAGGCAAATAGTGTCTGGAGTAGACCTCCAGTAAACTCCAACAGACCTGCAGCTGAGGG
-CCCTGACTGTTAGAAGGAAAACTAACAAACAGAAAGGACATCCACACCAAAACCCCATCTGTATGTCACCATCATCAAGG
-ACCAAAGGAAGATAAAACCACAAAGATGGGAAAAAACAGAGTAGAAAACCTGGAAACTCTAAAAATCAGAGTGCCTCTCC
-TCCTGCAAAGGAATGCAGCTCCTCACCAGCAATGGAACAAAGCTGGACGGAGTATGACTTTGACGAGTTGAGAGAGAAAG
-GCTTCAGAAGATCAAAGTACTCCGAGCTAAAGGAGGAAGTTCGAACCAGTGGCAAAGAAGTTAAAAACTTTGAAAAAAAA
-TTAGACGAATGGATAACTAGAATAACAAATGCAGAGAAGTCCTTAAAGGACCTGATGGAGCTGAAAACCATGGCACAAGA
-ACTACATGACAAATGCATAAGCCTCAGTAACCGATGTGATCAACTGGAAGAAAGAGTATCAGCGATGGAAAACGAAATGA
-ATGAAATAAAGCATGAAGAGAAGTTTAGAGGAAAAGGAATAGAAGAAATGAACAAAGCCTCCAAGAAATATGGGACTATG
-TGAAAAGACCAAATGTATGTCTAATTGGTGTACCTGAAAGTGACGGGGAGAATGGAACCAAGTTGGAAAACACTCTGCAG
-GATATTATCCAGGAGAACTTCCCCAATCTAGTAAGGCAGGCCAACATACAAATTCAGGAAATACAGAGAATGCCACAAAG
-ATACTCCTCGAGAAGAACAACTCCAAGACACATAATTGTCAGATTCACCAAAGTTGAAATGAATGAAAAAATTTTAAAGG
-CTGCCAAGAGAAAGGTCAGGTTACCCACAAAAGGAAGCCCATCAGACAATCTGCTGATCTCTCCTCAGAAACTCTACAAG
-CCAGAAGAGAGTGGGGGCCAATATTCAACATTCTTAAAGAAAATAATTTTCAACCCAGAATTTCATATTCAGCTAAACTA
-GGCTTCATAAGTGAAGGAGAAATAATATACTCCACAGACAAGCAAATGCTGAGAGATTTTGTCACCACCAGGCCTGCCCT
-AAAAGAGCTCCTGAAGGAAGCACTAAACATGGAAAGGAACAACTGGTACCAGCCACTGCAAAAACATGTCAAATTGTAAA
-GACCATCAAGGCTAGGAAGAAACTGCATCAACTAACGAGGAAAATAACCAGCTAACATCATAATGACAGGATCAAATTCA
-CACATAACAATACTAAGCTTAAATGTAAATGGGTTAAATGCTCCAATTAAAAGGCACAGACTGGCAAATTGGATAAAGAG
-TCAAGACCCATCAGTGTGCTGTATTCAGGAAACCCTTCTCACCTGCAGAGACACACATAGGCTCAAAATAAAGGGATGGA
-GGAAGATCTACCAAGCAAATGGAAAACAAAAAAAGGCAGGGGTTGCAATCCTAGTCTCTGATAAAACAGACTTTAAACCA
-CCAAAGATCAAAAGAGACAAAGAAGGCCATTACATAATGGTAAAGGGATCAATTCAACAAGAACTAACTATCCTAAATAT
-ATATGCACACAATACAGAAGCACCCAGATTCATAAAGCAAGTCCTTAGTGATCTACAAAGTGACTTAGACGCCCACAAAA
-TAATAATGGGAGACTTTAACACCCCACTGTCAACATTAGACAGATCAACGAGACAGAAAATTAACAAGGATATACAGGAA
-TTGAACTCAGCTCTGCACCAAGCAGACCTAATAGACATCTACAGAACTCTCTATCCCAAATCAATGGAATATGTATTCTT
-TTCAGCACCACACCACACCTATTCCAAAATTGACCACATAGTTGGAAGTAAAGCACTCCTCAGAAAATGTAAAAGAACAG
-AAAGTATAACAAACTGTCTCTCAGACCACAGTGCAATCAAACTACAACTCAGGATTAAGAAACTCACTCGAAACCACTCA
-ACTACATGGAAACTGAACAACCTGCTCCTGAATGACTACTGGGTACATAAGGAAATGAAGGCAGAAATAAAGATGTTCTT
-TGAAACCAACAAGAACAAAGACACAACATACCGGAACCTCTGGGACACATTCAAAGCAGTGTGAAGAGGGAAATTTACAG
-CACTAAATGCCCACAAGAGAAAGCAGGAAAGAAATAAAATTGACATCTTAACATCACAATAAAAAGAACTAGAGAAGCAA
-GAGCAAACACATTCAAAAGCTAGCAGAAGGCAAGAAGTAACTAAGATCAGAGCAGAACTGAAGGAAATAGAGACACAAAA
-AACCCTTCAAAAAATCAATGAATACAGAAGCTGTTTTTTGAAAAGATCAACAAAATTGACAGACCACTAGCAAAACCAAT
-AAAGAAGAAAAGAGAGAAGAATCAAATAGATGCAATAAAAATTGACAAAGGGGATATCACCACCAACTCCACAGAAATAC
-AAACTACAATCAGAGAATACTATTAACACCTCTACACAAATAAACTAGAAAATCTAGAAGAAATGGATAAATTCCTTGAC
-ACATATACTCTCCCAAGACTAAACCAGGAAGAAGTTGAACCTCTGAATAGACAAATAACACTCTCTGAAATTGAGGCAAT
-AATTAATAGCTTACCAACCAAAAAAAGTCCAGGACCAGATGGATTCAAAGCCGAATTCTACCAGTGGTACAAGGAGGAAC
-TGGTACAATTCCTTCTGAAACTATTCCAATCAATAGAAAAAGAAGGAATCCTCCCTAACTCATTTTATGAGGCCAGCATC
-ATCCTGATACCAAAGCCTGGCAGAAACAAAACAAAAAAAGGAGAATTTTAAACCAATATCCTTGATGAACATTGATGCAA
-AAATCCTCAATAAAATACTGGCAAACCAAATCCAGCAGCACATCAAAAAGCTTATCCACCATGATCAAGCGGGTTTCATC
-CCTGGGATGCAAGGCTGGTTCAACATATGAAAATCGGTCAATGTAATCCAGCGTATAAACAGGACCAAAGACAAAAAACA
-CATGATTATCTCAATAGATGCAGAAAAGGCCTTTGACAAAATTCAGCAAACCTTCATGCTAAAAACTCTCAATAAATTAG
-GGATTGATAGGATGTATCTCAAAATAATAAGAGCTATCTATGACAAACCCACAGCCAATATCATACTGAATGGGCAAAAA
-CTGGAAGCATTCCCTTTGAAAACTGGCACAAGACAGGGATGCCCTCTCTCACCACTCCTATTCAACATAGTGTTGGAAGT
-TCTGGCCAGGGCAATCAGGAAGGAGAAGGAAATAAAGGGCATTCAATTAGGAAAAGAGGAAGTCAAATTGTCCCTGTTTG
-CAGATGACATGACTGTGTATGTGGAAAACCCCATCGTCTCAGCCCAAAATCTCCTTAAGCTAATAAGCAACTTCAGCAAT
-GTCTCAGGATACAAAATCAATGTGCAAAAATCACAAGCATTCTTATACACCAATAACAGACAAACAGGGAGCCAAATCAT
-GAGTGAACTCCCATTCACAATTGCTTCAAAGAAAATAAAATACCTAGGAATACCACTTACAAGGGAAGTGAAGGATCTCT
-TCAAGGAGAACTACAAACAACTGCTTAATGAAATAAAAAAGGATACAAACAAATGGAAGAACATGCCATGTTCATGGGTA
-GGAAGAATCAATATCGTGAAAATGGCCATACTGCCCAAGGTAATTTATAGATTCAATTCCATCTCCATCAAGCTACCAAT
-GACTTTCTTCACAGAATTGGAAAAAAACTACTTTAAAGTTCATATGGAACCAAAAAGAGCCCACATTGCCAAGTCAATCC
-TAAGCCAAAAGAACAAAGGTGGAGGCATCATGCTACCTGACTTCAAACTATACTACAAGGCTACAGTAACCAAAACAGCA
-TAGTACTAGTACCAAAACAGAGATATAGACCAATGGAACAGGACAGAGCCCTCAGAAATAATGCCACATATCTACAACTA
-TCTGATCTTTGACAAACCTGACAAAAACAAGAACTAGGGAAAGGATACCCTATTTAATAAATGGTGCTGGGAAAACTGGC
-TAGCCATATGTAGAAAGCTGAAACTGGATCCCTTCCTTACACCTTATACAAAAATTAATTCACGATGGATTAAAGACTTA
-CATGTTAGACCTAAAACCATAAAAACCCTAGAAGAAAAACCAGGCAATACCATTCAGGACATAGGCATTGGCAGAGACTT
-CATGTCTAAAACACCAAAAGCAATGGCAACAAAAGCCAAAATTGACAAATGGGATCTAATTAAACTAAGGAGGTTCTGCA
-CAGCAAAAGAAACCACCATCAGAGTGAACAGGCCACCTACAGTATGGGAGAAAAGTTTTGCGACCTCCTTATCTGACAAA
-GGGCTTATATCCAGAATCTACAATGAACTCAAACAAATTCACAAGAAAAAAACAAACAACCCCATCAAAATGTGGGCAAA
-GGAAATGAACAGACACTTCTCAAAAGAAGACATTTTGCAGCCAAAAGACACATGAAAAAATGCTCATCATCACTGGCCAT
-CAGAGAAATGCATATCAAAACCACAATGAGATACCATCTCACACCAGTTAGAATGGCCATCATTAAAAAGTCAGGAAACA
-ACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAACCATTGTGG
-AACTCGGTGTGGTGATTCCTCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTGCTGGGTATATACCC
-AAAGGATTAAAATCATGCTGCTATAAAGACACAAGCACATGTATGTTTATTGTGGCACTATTCACAATAGCAAAGACTTG
-GAGCCAACACAAATGTCCAACAATGATACATTGGATTAAGAAAACGTGGCACATATAAAACATGGAATACCATGCAGCCA
-TAAAAAATGTTGAGTTCATGTCCCTTGTAGGGACATGGATGAAGCTAGAAACCATCATTCTCAGCAAACTATTGCAAGGA
-AAAAAACCAAACACCACATGTTCTCACTCATAGGTGGGAATTGAACAATGAGAAAACATGGATGCAGGAAGGGGAACATC
-ACACACTGGGGACAGTTGTGGGGTGGGGGGAGGGGGGAAGGATAGCATTAGGAGATATACCTAATGTTAAATGACGAGTT
-AATGGGTACAGCACACCAACATGGCCCATGTATACATATCTAACAAACCTGCACGTTGTGCACATGTACCCTAAAACTTA
-AAATATAATAATAAAAAAAATTAACAGGAGACTTTTATACAGATAAATTTGCTTTGCATCATGATCAGCACTAAAGAGCA
-TCATAGATTTAAACCATATTTTCACAGTTAAAACAATGTAACCAAATATGCAATATATTATGTAACATTCTACAAGATGT
-TTTCAAACATGCAAACTGACCTTTAAAACAATTTTGCATAAAATAACATTTCTAGGTAAGAGAAAATACAGACATGTGGT
-TAGGGCAAAATATTTCTGTTCAAATTACAAAATACTGAATGACAAATCACAGGATAGAAAAGAATTATATTGTACCTGGA
-ATTTGAAGTCTTCAAATTTATTTAGATATACGTATCTATATGTATTAATAGAGACATATTTAACTGATTATAAGTTTAGA
-ACATTTATATTTTAAAGATGTCATTCTTTAAAAATTATTAATATCTACAGGATTGATACAGATATTTTAATTTTAAACAA
-ATATTTTTCACTAATGTGACCAGTATTTATGTCCTATTTCATTAAACAGACATTTCAAGATTTTTTAGAGTTAATTTTTA
-AAAATTAAGTATCACAAATATTTCTGAAGTACTACCTTAAAAAATAAAACTCTTTCCTAGCTTTTCATATAGTTAAACAT
-TTTCATAATGACTAAAAAGATAAAAATAAATTAGCAACCATAATTAAATTAGAATTCTACTTTTTATATCAGATGAAATA
-CTACATAAAATGTCCAGAAAATCTAGTGTTAATGAGGCTGTGCAGCCTGGACATTTGATGTCTCATCTGTGGGAATGTGA
-ACTAACCCAACCATTCTGAATAATTATTGACTCTGTGTGTTAACAGTCTAGAGTCCTGAAACAAGGATCTTAATTCTAAA
-ATAAAATCCTATTCTAAGAATATACCAAGGGTTGATAATCAAGGAAGTTTCAAAGTTATAGAGAAGAACCTTCATCCTAG
-CATTATATATGTAATCATCCATATAAACCACATAGTGTTGAATGAAATTACAGAAAAACAAAGAGCCTACAGAATATGTT
-TCTCTTTGTGTACAACAGTAAATGTACACATCTATCCATGTAAAATTTTACATCTCAGGAAGATAGGTACCAACATGTTA
-ACATGCTATATCTATAAGATAAGAAATTTTACTTTCCTACAATTTCATACACACACACACTCTCAAACATACATACCCAC
-ACACCGAGGATATATACACACACAAATATATATATAAACATACATGTTTATATAGGTACACACACACATACATATACACA
-GATGGTCAACAAATTATAATGGTTCAATTTATGATTTTTTTTACTTTATGATGAAGCAAAAGTGATAGCTTTGAATAGAA
-TATAACCATTCTGCTTTTCACTTTCAGTACAATATTCAACAAATTACATAAAATATCCAAAACTTTATTATAAAGTGGGT
-TTTGTATTCAATGATTTTGCCCAATTGTCAGCTGATGTAAGTGTTCTGAGCACATTAAAGGTATGCCAGGCTAAGCTGTG
-ATATTCAGTAAGTTAGGTATTAAATACATTTTTAACTTACTGTATTTTCAATTTATAATCAGCTTATCAAGACTTAACCC
-CATTGTACATTGAAAAGCATTTGTATTGCATTAAACATGTTATATATATTTTTAATTGAAATTACTGGCAACTTTTGAAA
-AAATGTAATGAAATAATGTGCTTTGCTATTGGTTAAAGTGTTTTTGGGCAGGGTCAGTGGCTTACACCTGTAATCCCAGC
-ACTTTGGTAGGCTGAGGTGGGCAGATCGCTTGAGGTCAGGAGTTTGAGACCAGCCTGGCAAACAGGGTGAAACCCCATCT
-CTACTAAAAATACAAAAATCATCTGAGTGTGGTGGCATGTGCCTGTATTCCCAGCTACTAGGGAGGCTGAGGTGTGAGAA
-TTGCTTGAACTAGGCAAGCAGAGGTTGCAGTGAGCCAAGATCAAGCCACTGCACTCCAGCCTGGGCAACTGAGTAAGATT
-CTGTCAAAAAAAAAAAAAAGAAGGAAAGAAAAGAAAAAAAGTTTTCAGCTTCAAGTAACAGAATAGTCAACTAATTAAAG
-AAAAAAACAAGGAGCAACTTTTACCAAATCGCACAACAAATAGATGGTATCAATGCTTACTTAATTCAACATGATCCACT
-TTGTGATTCTCTTATCTTTCTACCTATGTTTTCAAGATGGCTATGGCATTCCCAGCCTTACAACTTCATGTGACAAAATC
-CAATGGCAGGAAATAATAAGTGACGGCATTTTGGAACTTTAAGGAAAAACTTTAAGGATTGGAAAACAGGGATGCCATAT
-GTCCAGTAACATGGGATAGCCGTTCCTAATTAAGGATTGCTGTATGTCCTGAATGACTTTCTAATGTAATGAAGGTGAAT
-AACCTGCTTTGTTTAATTATACAATCCCAAATGTAACTGCCTAAGTGCCAAGTACTTTTGCATGGTTTTAATATGCCATG
-AATTTTGCAAGAATGAAACTACTATGTATATGAGAAAAGATGGTAGATTTTTTCATTTAGATACTCATTTCAGAGTCTCA
-ATAGGAAAAACAGAACACACTCAAACTAAGATAATTTAACATGGGTTTATTTCCAAAGAGACTACTTACGAAAATGTCAG
-GGGAGAAGGGTGAAGGAATCACAGAAATCACACCCCACAATAACTCTGGGTTAGTAGCAGCAGGCAGAGTTCTGGGGAGT
-AAACTTCCCTGATCACGCAAGGAAACACTAATTTTCTTATGAAAAAGATTGGTCAAGGAGACCTAGCAGAGAGGGAGTTT
-AGGCAATAACCCCCAATCCCATTTCCTCCTTCCCTTTAATCTCATGAACATGCATAGAAGGCAATGAGCAAGGGAACAGA
-TTGAGATATTCAATATGGACCATTCCACTTGGACAAAAGCCAGTAAATAGGGGAGTATAACAGGGGACAAGGGCCAAACA
-GAAAGTATCTATTACATTTACCAATGCAGATCAATCATGTCAAAAACAGCAATGGCAGTTTTGGCATTTGGTTATTCAAT
-GAAACTATATTTGTAGTTTTTTATTTACAATGTTTCAAGGTATGGGCGAAGATATGAAAATATCATTATGTTCTATTTTA
-TTTGATATGTAAATGTTCTGGCACAATTATATACATTTTGGATCATATATTGACAGTAAATTATTTCTCCTTTGTTAGCT
-TCAGCATAACATTAATATTTTCAACAACTTGAATGCATACATTGTGTTCTCACTAATAGTTTAGAATAGTGAAGGGGTCT
-TTGAAGAATTTCTTATGAAGTAGAGGCATTGGGTCAGACAGAGACGAAAACCATTGGCTTAGATTAATCACTATTTATCC
-TAGGGCTGAAGAGGGCCAATTGAAGACACAAATGTCCAATCCCTTTATGACCTTGGAGTTCTATGAACCAGAGAAATAGA
-GACTGGTTCTTAAGGAGGTAATAAGTGTGCCTTCTATGGTTTATAATAATATGCATTGTCTTAACAATCGAATACTTAAA
-AGTTAATGCCCTCATAATATGCAAAATTTTTAATAAGCACATTGGTCCCTGTGTTCAAGTAGTTGGTAATCAAATTAGCG
-AAGTATGGTAAGTCTTTTGAAGAGCATTAAACAGCAGAGAATGTAAGAAATTTGTCTCTATAATAGTGTGGGCCTTCTGT
-GTTTCCTAAGGGCACATTCATATGATCTAATAACTGAGCAGAGAGAAGCCTAAAGGATAGTTTTTGGTTTCATTTGTTTG
-TTTTTCCAATTAACATACATTTCTAGATTAAAGGTCAACTATCTTTTCCTTGGGAGTCAACTATAGGAGAAGATAGTGAA
-GAGGCAAGGAAAATTACAGCAGCTCAACAGCTTTACCCTGGAAATATCTGTATTGTGTACCGCTATAGCCTACCTTTATC
-AGTCAGATAACAATGTCAAAGAGGCAAGCTTGGCACCATTGCTCTTAGTGAATCCCTGCTGCCAGCCTTTTATCCTAAGT
-GCTCTCCAAAGACCCATTTAATGGACCTTCCTGAAATTGTGCTCAGGATCAATATGAGGCTCATTGATACAGCATTTTTG
-GAACTCACCATTTGCTTATTTATTAAACCTGGGATAGTTGCCCGACTTCTATCATCTGAAATCCTCTCCATGACTTTCAA
-AGTTACCAACATTGGTTCCAACATCATTCCTAGAAAACATTTCAGTGGAGTATATTTATCTGACATTTGACTGTATTTAT
-AGCAGTAAGAATCTATGATGATTCCTCCCAAAATAATCCCACAATTACACATTTTGGGTCACCTTGAGGGTCTTATCCTT
-AATATCAGAGATCTGTTCTATACATTTGAGTCTTAGAAATAATTACTAGCTTCTCTCTGAATTTAACTGAGGTTCCTTAC
-TTTTATTCAGCCTGTTACCTAAATTACATAATGTATTGAAGGCTATAAACTGTCCAAATTTCTGATTACATTGAGTTAAA
-AATGGGAATATGACTTTCTTTTTCTAACTTGGCAAAGATTATGTTTTTTTTCATGAAGAAATATAGGCATATTTAAACAC
-TCAGGATCTGAGAATTTGAAATACATGAAACTTAGCAAGTGGTCTTTAAGTAGTTTTCATTTCTAAATTATAGTACATAC
-CATTGAATGCTACAGAAGGAAAGACAATGAGGGATTACTCATAAACATTGCCTTTATGATATCCTTCCAAAGAAAACCAA
-GTGTCCCTGTGCTTGGACTCATAAAGCAGAAATGCTTACCTTGCTTTTATGTCACTAACAAACAATTGTGCCTAGTCATT
-TAATTCTAACGCATTTAAGCCATCTAGAGAGTGGAGCCCCTAGGGAAAACTACAAATGGAAAATTCATTGATTTTTGATT
-TTGCTTTCCTATGGATTAAATTTAACACTTTCTTGTAAATCTCTCCCTTTACAGATCATATGTGATAAATAGTTATCCAA
-CTTTCTAGATGTCCACCCAGAGCTGCTTCCATATGAAGAGGTGGAAACGGATTCTGTGCATGATACTGGTTAGGATCGGG
-AACTGTTTTTTTTTAAAGGAGATTTTTAAAATTTGTTTTCCTTGTACACATAGCCTTAATATTGTGTTGCTAACTGCCCT
-CTGGGAACAAAGTCATACCAATCACAAATACATTGCCTAAAGTGGGATGGTTATTACTCTGCTGTGAATTGCACCTCCTA
-TTATGTTTTAAAGATGCTACAAACTTGAGACATTACTATGTAGATGACATTCCCAGCAAATCCCCAAACAACACTTAATG
-AGATTTCAAATACCAGGATCATGAAACAGTAAGAGATATAAGGAAATAAAGAAAAACACAGTATATGTGTAGAAGGCATT
-AAAACACAAATTTTATAATTACGAATGCATATAATAAGGAACAAGTTTTATTCTAAATAGCAATTATATCAGAACTACGA
-TACAGGGAATAAAAGTGAATATTAAGCCATTGTACCAACAATAACAGAGCCCCTTTTCTGCTGCGTGATGGAATTTAGTG
-TTTACTAAGGAAGAAAAAAATGCAAGATATCTTAAATTTGGTACTTTCCAACAAATTTAAGAAATGTGTACACACTTGAG
-GAGACTTAAGAAGTCTCTGACTAAAACACTAGAAAAGAAAAGCAGTGAAAAACCAAATAAGTATTACTCAACAATAACAA
-CATTTGTTACTATTATATTAATATTAAACACACTATTAAGCAACAACATTTCAGTTACTCACTGAGCCCAAAGTCATTTT
-TCATGAACCATTCACAACACTGATAACCTATTGAAAAATGATTGAAAACAAAAAAGCTTATTTCTTTCCAAGTCCTTTTA
-AAGCCTTCTCTTGTGTCATTTCATATAATCCTTATAACAAATCTATGGAGTATATACTGACTTTATCTCTGTACAGAAAA
-GAAAACTGAATCACATTCAGAATAAGTTGCAAAGATCCCCAGATAATCAGTGTCATAGGTGAAATATGATGTCACAGTGT
-ACTCAAGAGTAATTTAGGGAAGCAGTACAAATGATGGTTGAAAGCACAGGTTCTGGGATAAATAGCCTGAAGTCAAAATC
-TAGTTCATATCCTCAGTGGCTGTGTGATCTTGGGAAATTTCCCTTAACTCTCTGTGTCTTGATTTTATAGTTTCATCCAT
-TTTTGCCTCTCATATGATCTGGTGAGCGTTACACTAGTTTATGCTTCTAGGACACTGAAAACAGTGCCTGGCTCTTGATA
-AATATTAACAATTTTGTTTCATTTTCTTCACCTTGAGTATTTCATGGCCAGATGGAAATCAATGTCAATATGAAAAAATG
-TTCATAATTCAGCAGGAAGAAATACAAAACCATATAAACAACTTTGTTTTATTGGCAAGTGTATTTGGAAGCTATGTTAA
-ATTGAGAAGGGGAAGGGAAAGCCTCTAAGGATATCGATTAATCAATGACTGAAAGCTGATGAGACTTGTCTGGAATTTTT
-TTTTGGAGACTCTGAGACTTAAAATTTTGACAAAATAAGGAGATGAATTGAGTAGTGTGGAAGAGACATTTTCTGAAGTC
-AGCAGAGAAAGGAGAGACAAATATGGTAAGGGGAAAATGGTATGAAGTAATAATATGAATGAAGTGCTTTCTAAAGTATA
-ACACATGTAAGTTGTGTTAAATGTAAACTATCATGATTATATCATTACTGTCTGACTGATACAACTATATCCACCTCAGT
-TAGCCACATAAGATCAATTTTCCTATATCTTAGAGAATACCAGTAACCTCCAGTTCAGAAACAGCATAAATATCTATCCA
-CAGCTGAGCAGACACATACAGCTAGCTACCAGATGAAATGGGCTATATCTTCAAATACTATTGTTTTCCATTTTTTAACT
-GTGGCAAAACACACTCAACAATTTGCATCTTAACCACTGTTAAGTATACAATTCAGTGTCATTAAATGTATTCACAATGT
-TGTGCAAGCATCACCACCACCCATCTCCATAATTCTTTTTGTCTTGTAAAATTGAAATCCTGTATCCATTAAAAAGTGAC
-TCCCCATTCCCCGCCCTCCCAGGGCAACTACAGCTTTACTTTCTGTCTTGATGAATCATACAATATCAAATGGAATTTTT
-AAGATATTTAAAATCTTTTGTCTGGAAGCGAAGTGGAAGTTAATATCAATGGCTATGCCTTCAGTGAGTTCTCAGACCAC
-ATTGCAATGTAGTTAACTATTTATCTTTTATTACGTTCTAGACCTATTATTTCTTTCTGGCACAAAAATATCTTCTTTGT
-AGATTATGGCATTTACCTCTATCTCCACACCTTTCTGCGTCTGTCATCCACAGATCATCAGCCTCTTGCTTAGTCTCCAT
-TTAATGACAATTTCTATTTAGTATACAAGAGTCCTTCCCCCCGCAATGCAATTTCTTCACTCTGAAAAGCTCTGACTCTG
-GCTACTGGTCTCTGTTATGTACTCATCCCTAGAGCCATGTCTTCAAATATTTCTCAGAACTTCTTCACATCTAAAAATCT
-AGGATTAATGTATTGCTCTCTGATTATATTCTTCTGGTATTTCAAGTATCCTGTATAACTTCTTAATCTGCCCTTGCTTT
-TCTTCTACATCAAGATGTCAAGTTCATGGACTTCCCAATTAATCATTTTAAAAATTTATTTCAAGCCTTTATGAGTCACT
-ACAATGTACATATGTTCTCAGGAATTATGACCCTACAATTTGTATATGAGAATAGTTCCTGTGTCAGGCATTATGGACAT
-AAGAGTAAATAAATTCTAGCCCCTGCCTACAAGGAGCTAATTCCCAGCCTAAGACAGATTGTAAGCCAATAATATGCAGA
-GTTGTAAGTCTAAGGAAACTGATTGGGATGTACCTAATTCGAGCTGGGAATATCAGAAGAAAAACTTTTTGAAAGTCATG
-AGACATGAGCTGTGCCTAAAAGAATAAAAATAGAGTGAGAAATAAGAATAAATAAATTAGGGAATGAGATGGGTATAATA
-GTAGAAAAAGGAAATCTCTTTAGATAAAACAGGGTATGAGAGTATATAGGAGGCTTATTAACTCAGTGTGGTTGGAGAAA
-ACAGGTTGAAAGGAGAAATAGGGGAGAAAGTTACAAACGGAATCAAATGTGTTAGTAGTTGAGGGAAAAGCAAATATTGA
-ATACGACCCATAGATCTTGGATAAACCAGTGTTTGGTAGTAGCTTACATAAAAGGTTGTGACAAAATAACCAGAGATATG
-TGGAGAAAATAATAACTGAGTGTTATATTTCCTCTCAGTAGAAACCTAAAAAAAAAAATGTAATCACATACTGATCTTTT
-AACTGACCTCCACTTATCTTGCTGCCTGGATTGGTATATATAGTCCTCTGCCTGAAAAATTGCTCAACACTTTTGAAAGG
-TTGTTTCTCACTGTTACTCCCAGGCATTTCTGCTAACACCAGCTGAGTTGTAAGGGGCCCTCCAGGAGGCCTAGGTTGTT
-CTCCTTATCACATATATTATTTTCATTTATCAATTTACCCAGAACATCTAATGAAATATTATGGACACCAATAACATGAA
-TACAAATACAGCTATAGTCCCTAAAAAGTAAATTGATGTCTCTTGAAAGACTGTCATGTCTTAGATGCTAAATTTGGAGT
-ATGTGTTTCTAATAAATAAATAGCTTGCTTTAATAATTCTGATTTATGAATGTAATATAGGGGAGCAGCTTTTATTTCAT
-CCTTAATCTTAAAAAACAATTAGCCGGGTGTGGTGGCGGGCACCTGTAGTCCCAGCTACTCAGGAGGCTGAAGCAGAAGG
-ATGGTGTGCACCTGGGAGGCGGAGCTTGCTGTAAGCCAAAATTGTGCCACTGCACTCCAGCCTGAGTGACAGTGTGAGAC
-TCTGTCTCAAAAAAAAAAAAAGATCATACAAGGAGTAAATGATGATTTAGCATAAAACACAACTTGAGCCTAAAACACAG
-ATCATAGGGCTCAAACTTTGTTATTTTATGGGATTATACTAACCAGTTAATATTCAAAATTTACCATTTCAAAAGAAGAA
-ATATTGGTCTGGGAAAATTGCCATTGCTTATACAGAAGAATGGAGGAATCTTTTTGAGAACAACAATTCTAATGATCTTC
-TTCATCACTGGTTCCAAAACCAAGCCCATGGAAGGCCTGCATAGGGATAATGTGGAGAACATGCAAAAGAAATACACATC
-ACCAGCTCCTCAACTCAGAGCTCCAAGGGAATGGCCAAGGAAGCTGTATTGTCCTAAGAAATTTGAGACTGTTTTGACTT
-ACAATAAATCCTGCTCAATCATATGTATGTATACACACACACACACACACACACACACACACACACACACACACACACAG
-AGAGAGACGGTGTTGTCAGTGAAGCCTCTAACATTGCATCTTGACTGGACAGATTTGACAATTAAAATGGCTGGAAGAAA
-ATAGGTTTCATAAGTGTCACTTACTATTCACATTACACATTAAAAGGACATCTCCTAAATTAAATCTTGTCTATGATAAA
-AAGGCAGAAAATCATGACCCAAGGCTCATTTATAACTGCAGAAATGTTCAAGATAGACCAATGCTTGCTATGTTTAGGAA
-GTGACAAGAAAGTACAGGTCTTTATAATCTACCATTTTGCCCCTTTTGATACCAGGTGACCTTCATAATGCAGGCTATAG
-AGAATTACAAGATTTGTCAGAGATTTCAGGTCTTTGGAAAGCTATGCTCTTTCACAAGAACAGCCATGGAAACAGGAAGA
-AAGTCAATTCCCACTTAAGGTAATCAGAATTTACAAATATTCCTTTCTTCATTGAAATCTCAATAGGCACTTCGATATTA
-TATTTAATTAATTCTTTTGTTACAATCATGCATCACATAACAACATTTTGGTCAAGGATAGTGCACTTGTATGACAGTGG
-TGCAATAAAATCATAACACTGTATTTGTACTGTACCTCTTGTATGTTTAGACATGTATAGATACACTTACTGTATAGATA
-TAAGTAAGTATAGATATACTTGACTGTTGTGTTACAATTGCCTACAGTATTCAGTACAGTAATATGCTGCACAGGTTTGT
-AGCCTAGGAGGAATAGGCTATACCACCTAACCTAGGTATGTAATCAGCTATAGCATCTAGGTTTGTGTAAGTAAACTCTG
-TGATGTTCATACAATAATAAAATTGTCCAGCAATGCATTTCTCAGACACACCCCTGTCATTAAGTGACACATGACTGTAT
-TAGTTAACACTATGGGAACTTCATGGGAAATGGAAACTCTAGCTCCACCATAAATAGAAACTGTTTATGTCAAAAAACAC
-ATAAAAGCATAGTTGCAAGATTACAATTCCTTCCAGATATTTCATTTAGTACCTCCACAGATCATTAACTTCCTGAATAG
-CATTCTTGTGTTTCCACTGCCTCACATTTGATTTCAGGTCATTCCATCAATTGTCAAAGATGCATCCAACATTAACTTTC
-CAACTACTGGTTTGGATTGTGTCAACATTGTCATTCTGGGCCACAACAACACAAAAGGCTAACTCAGTGAGGTAACATAG
-ACACTGATCAGTGAGATTTTGCTGATGGGTGGTACCATTTTTTACCAAGATCAAGGGTATTCATACCTTCAGGCATCTAG
-ATAACATTGAAAAGGGCAGGTTCATAGATAAAAAGGGAAAGAGGAAGGGTTTTTGCAGTATATATGAGCTACCATGTCTC
-CTGTTTAACCTGAGTCTGAAGAGATTCAAAGTGCAGGTGCCATGAATGCCTCTTTAATAGCTCCATGTCGATTGATTTTC
-TGGGCTACACTTCACAGCATTCAAATTGCTAAATGCATATAAACTAGTAGTGGATATTTATTACCTGGATTTGTGCTTCT
-GAGTGACCTTATCTATAGTTATGTGCTTCAGTGATCCAACTTGGGGTGCACTCCAAACTTTGATAAATTAAAGACCCTGC
-ATATTCCTTGAGTAATGCTACACTGACAACTGATTTAGTGAATGCCACTGTGAAAATAATAAACCTCTTGGTGAATATAT
-TTAGACATGTCTTGGAACCTGTACACATCTTAACCAGGGATGTTACTTGGTCTTTTTATGTTCAGGAGTGTCTGGAGATA
-GAAAAACATACAGGATTGTAATTGTTGCCTGTGAGACTAACAGAAAATTCAAGCTAGTGAAGTATGTTTATGCATGGCAC
-ACTTCTCACCAGCAATTTTAGGAAGTTCTACCCAAAACCCATATGTCTTTTGATATGTGGGTTACCTTGGAGAGAGAAAA
-AGAAACTCTGAACACAAGCATGAAATACTTTCGAATTTTATCTAGAGTTGGACTTGTCCAAAAGCTTTTGTATAAACTTG
-CTTGATGAGGAACTGTTGTCCACTGGTACCTTCACCGTACAATCCACACACAACCAAACTTCACAACTGGACACCTAAAT
-TTGCACTTTGTTTGGTAAAGTTGAATGAAAAATGTTGTCTTTTAAGCTTATGTTCTCTTATGAAAGCTGTTATTAGATTA
-ATTTTACTCCAAGATATGCCAGTTAGGAAATAACTTCCCATTTAATTTCACCAGCTCCCTGTGGGTGGACTAATTACTCA
-TACATCACACTTACTCTGGTGGTGAAATGCCTCAAAAGAAGGTCTCCAGAGTGTTGCTTTACCTAGAAGGACAAGAATGA
-AGAGACATAAAAATCATTCATTAAGAAGGAAGAAGATTTTCCTTGCCTAGATTTTCACTTGTAGGATCCAATTAATTTTA
-TCACTTAATATTTTGTCCTGGTGGGCATTCACTTTACAAATTTGTAAGGTCAGTAGAAATGGAAACTTTTGGAAATCAAA
-CTGTAAATGTTCTGTAGACGTTGACAGAAATAGCTATTTGGAGCTGCGCTTTTACCAACTAGACACTCTGAGAAAATCTG
-TGAGAGGATATTTTCAGGAAGTCATTGAACCCCCTAAAAATCAAGTTTATTGCTTTTACCATAAATATAAATAATTTATT
-TATTATCAACCACTTTCAATATTCGAATAAGTAACTTTATTGTTTATTTCATTGACATGATCTACATAGACATGCAATTT
-ATCTTCTTTTGCGATACATTCAGAAAATTTGCTGCCTGAAAAAGCCATGTTTTGAAATTACCACCTGTTTGATGATTGTT
-TTTTTATACTTTAAGTTTTAGGGCACATGTGCACAACGTGCAGTTTAGTTACATATGTATACATGTGCCATGTTGGTGTG
-CTGCACCCATTAACTCGTCATTTAGCATTAGGTATATCTCCTAATGCTATCCCTACCCCCTCCCCCCACCCCGCAACAGG
-CCCTGGTGTGTGATGTTCCCCTTCCTGTGTGCATGTGTTCTCATTGTTCAATTCCCACCTATGAGTGAGAACATGCAGTG
-TTTCATTTCCACTTAAGTATCTATCTCTATTTGTCCTTTATTTTCACTTCCATCCTAGCTCTATCCCTTGTCTCCTTCGT
-GTGTCTCAGGATAAGTGCCCTATAACATTTTATACTTCTGGAAACCCTTCAATATAATGTTATTACATGTAAAAATAAAA
-AGTCTGTTTTAGCGAACTCTTTCTTCACAAATTATCTTTTCCTAGTTCCCTATTAGACAATTTTTGTAGGCTCCATATGC
-TATTAATTTATATTCACTTTTAGAAGAATTTTCATCAAAAGCAAAAGTCTTATGTAAATTGTTTATATGCTATTTGTACT
-TCTGTGTATATATACACGCATAGCCACATACATATATGTAACTCCAGAGGCCTGCCTGGACTGTTAAATAACTGTATTGA
-ACAAGAGCAAGAAAAAGCTGTTCAAATTTCAAACAACAAGTTGAACTGAAGAGCTCACATCTTTGAATGAAATAGACACT
-AGTAGCCTTTAAAAATTAAACATTTCTACTGTTTTAAAAAATTATAGGCATCATAGTATGAGGAAAAAATGTAATAATCC
-TTTTTAATTCTTGCCATTTTATTAACCACGGACTCCTTATGCCCTGACTTCATTGGTACCCCTTTGAGATTAAACAGAAC
-AATTAATTTAAAATTCTGATAAATAAATAAATTGCACCATTTACTTGAGGTACTCTTTCACCTTTCAAGAAATATTTTGA
-GAATTCATTAGCTAAATATTGCTATAATGCAGGCTAGTAATAAATAGAAATAATGATTTCATTGTAAAGTTTAAACTAAT
-GATGGTATGATCTGGAATTTTTGTTAACCTAGAAGACATAATTAGCTCTACAGGTGAAATGAAAGACAAAATCACTTCAC
-ATATTAGTAAAAAACAAATAATATAACTTTATAAGCTACTGCTGTTCTTTTGCTGTTAAGAACCAATGACATCTGTAATT
-AGGGAAGATTATGGAAAGGTTAAAGGTGAGAATACATGCAGTCTATATACAGGAAACCCAAACTGTTTAGGTTAAGGAAA
-TGTCTGCAAAAGTCATATTAATTAGCAGGTTCACAGGAAACTAACATTTATTGTATAAATTCCATGGTCAAATGTATTAG
-GGCTCCACGCACACAACTGTGCGCCATCTATGTTACCACACAGTGCTTACTTCTTTCAGTCTTTATTCATTTCTCTCCTA
-ATGGTCTGTATGGTATTATTACATAGTTGTAAAAACCTTCCATGAGGCAGAAATTTCATTTAATGATACAGCTTCAAAAA
-TAATGAAAACCAGTAGAAACTTTCTATTTTTTTATGAAGCAGAATTATTGAATTTTCAGTTTCATTTATTTAATGTTACA
-AGAGGACAAACATATTTCTTTAATTTCTTCTTGTTATTTTTGTCTAACATCAACCAAAGCCATTTCTTTCATTTGAAGGT
-GAAAACTGCCCATCAAAATCCAGTTTAAGCTGAGAAACAAAGAACTAAATTTTTCATGAGACATTATACACTGCATAAAT
-ATAAAACAGGACCAGAAACAATGGTAGATTAGCAATTTTTAAAAAGACAAAAGCAGGTTATCATCAAATCAATTGTTACC
-AACACCCCAATTCCACCTCTAGGCCAGAAAATTAGCCACTTACCCACGGGAAAACAATGATTGAAGACAAAGTTCACCAG
-TGAAAGTTGGTTATTTTTTTCCATCCTTGCATCAACTAAAATGATATCTACAGTTCCTCTTAACACTTTTCTTACTTTCA
-AATATGTGGGTATGCTTCATTAGCTGAGGCCATGTTCCATATGTACATCTGGCTACAAGGGAAACTGGGAATGTGAGCCC
-TGATCCTAATGTTTGTAGAGTATTTAGAAGTTTGAGAATTCCCTCCAAATAAAGAGTTTTCTAAAACATTGTTAGACAAA
-AAGTTTGAATTACAAAATATGGTAGTAGCTCAGGTCTAAACCAAATGCAGGGAAAAAACTATTAACTCTAAAAAAATTAA
-ATACACATTTGATGGTAATGAGAAACAGAAAACAGGCAGAAATAGTAGAATACTCCACTAATGATGAAGTATTTGACCAT
-TGAATAAAGAAAATTGCAATGATTTAAATTTGCATCAAGGCAACTTCACACCTGATGACGCTTCCCAGTCTGTGCAAAAT
-TAGATGTCTACGAGTAAAGCGGTGAGTTTTACTAGCTTGAGGAATAAGAGCACAGAGTTCCAGGCTGACAGAAAAGAGGA
-ACTGGGAAATTTGAATGACATGGGAGGACATCTCACACAACTGAAAGTCACAGAGGAGAATATCACAGAGTAAAAATCTA
-AAATCAGCACTTCAACTTCATTCAAATATATGATGGCTGCTACATTTCACATTCATAAAAGGAGACTCCATAGAATCCAG
-CAGAAAACAACAGCTAAATTGCTAGTACAGAGCAGAGATTTCAACCATTGCATATAGCTCAGGAGTGAAAGTTTGGTGTT
-TGACTACGGAAAGAAGACTAATGTTAGAAAAGAGTCATTCTTCAAAGGAAAATAAACGAACCTATCTCTACAAAATATCA
-TACACATAATCTAACATATAATTTAATCTGCCTAGACATAGAACCAGGAAAATATGACACACAACAAAAAAAGTAAACAA
-TGGATTAAGACATTGAAATGGCCCACACGCTGGAATTAGAATATAAGAAATTTAAAATAAGCTATTATAAGCATATTCAA
-GGATTTAAGGAATAGATGGTCATAAGAGGGAATATATGGAGAATCTCAACAGAGAAGTAAAAATGATAAAGAGATAATAG
-GACAAATTTTAGAACTGAGAGACAGAGTATCTTATATAAAAATGTCATTTTATGTACATACCAGTAAATTAAAGATGGCA
-CAAAAAATTATCAGTGCACTTAAAAACAGATCAAGAACAATTTCCCAATACAGTTAATACAAACGAAGAAAAATAATAAA
-AATAGGGCCAGTCTAGCACTAATATAATTGGAGTCCTAGAAAGAGTAGAGAAGTAAATGAGACAGAAAAAGCTATTTGAA
-AAAGTAAAGACCAAAAGTTTTCCTAATTGTCAGCATATATCAACTTACAGGTTTAAGAAACTCAAAGAACAGAATAAAAA
-TAAAGAGAACCAAATGTAGACATACCATAGTCAAACCACTGGGCAAAAAAAAGAGTAAATCTTGAAAGTAGCTAAAGGGA
-GGGAGAAAATAATTTACATCCGTGGAAACAAATAGACAGATGACCTGTCATCAGAAATGACACTTTAAAAAGCAATGAAA
-CTACATCTTCAAAAGAAAACTGTCAACTCCAAATTCTATAACTAGATAAAGTAATTCTTGAGAAAAGAAAGATTTATTCA
-GATAAAAGAAAGCTTCAAACAATTGTCATTAGCAGACCAAGATACAAGAAATGCAAACGGAAATTTTTTAGGCTAAAGAA
-AGATAACAACAGACGGAAATTCTGACCTACAGGAAGCAAGGAGAAGCTCTAGGAATGGCATGTGCATAAACGTGAAAAAC
-TAAGGCTTATTTTTTTAGTTTTATAACAAACAACTGATGCTTTGAATAAAAAATTAAGTGTACTATTGATAATGTGTGTA
-AAATATTCTAAATTAATAGCTCTGACAGGAGACTAAACGCAACAATTTTGCCGCAACTTTTCCTTATGTTACATGAAAAC
-GCTGACTATTAACACTAAGTGGACTGCGATAAGCCCAGGATGTTTATTATAATCCCTAGAGAACCACCACATTATATGAA
-GATATTCTTCTAAAATGCCAATAAAGGAATTAAAATGGAACGCTGAATATTGTTCAGTTAATATAAAAAGGCATGAAAGA
-AAGAGGAGCAAAAAATGATGGAGCAAATAGAACATAAGAGCAAAATAGGCTGGGCGCAGTGGCTCAGCCTGTAATCCCAG
-CACTTTGGGAGGCCGAGGCGGGTGGATCACGAGGTCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACGCCGTCTC
-TACTAAAAATACAAAAATTAGCCGGGCATGGCGGCGGGCACCTGTAGTACCAGCTACTCCGGATGCTGAGGCAGGAAAAT
-GGCGTGAACCCAGGAGGCAGAGCTTGCAGTGAGCCGAGATCCCGCCACTGCACTCCAGCCTGGGTGACAGGGCCAGACTC
-CGTCTCAAAAAAAAAAAAAAAAAAAAAAATAGTAGGCTTAAATCCAACCTTTTCAGTAATTATTTCAAATGTAATTTAAA
-TACTCCAAATAAAACACAGATTGTCAAACTGGATAATAAAAGTACCTATAAGAGATGCATGCCAAATATTATGGTATAGA
-TAAGTTGAGAGTAAAATAATTTCCAAGTATACCAAGGAAACAACAAGGACAAGAAATCTTATGTGGCTATATTAATATAA
-GAAAAAGTAGACCTCCAAACGAGCAATATTACAACAGACAGCTATTTCATAATGACAAAATGTCAAGTAATTATGAAGAC
-ATAATGCTGTATTGCTGACAGAATAACTAAAGAAAATTAAGATAAAATAATTTTGACAACAGCTTGACCTAATCGATATT
-GACCAAAACAATAGAATATATGTTCTATTATGCTACACATGAAACATTTATCATTAGGCTATAGACCACAAAATATCTCT
-CAAGAAGTTTCAAAACACTGTAATCATGGAAAGTATGCTTTCTGACCATAATGAAAATGAGTTGAAATGGGTAAAAACAA
-GCTACCCAGGAAAGTCTACACTATTGGAAGATTTAAATACACCTTAAAATGCCCTTTAGCTCAATGAAGAAATCATAAGA
-AACACCTTTAAATACATTGAACTGAATACAAATAAAAATATACTATATCAAAATCTATGGGATAAAGTTAAGCAGACCCA
-GAGTAAATTTTTTGTATAAATGCTTATTCTAGAAAAGAGAAGTTCAAAACAAGTGAACTAATTTCTACCTTAAAAAGAAA
-ATCTAAAACAAGAGAGCAAATTAAGTCCAAAACAAGTAGAGGAAAGGAAATAAAACAGAAATTAGAAATCAATGAGACAG
-AAAACAGAAACAGGAGAAAATCAACATGGCCAAAAGTTAGTTCTGTGAGAAAGAAAGAAAATGCAAATTATACATATCAG
-GGATTAATGAGATTGTACAGTTGTAGACACAAGAGACATTAACAAGATAATGGAATATTGTGAAACATTATATACAAATT
-TTCATTACTTGGATGAAAGGGTGACTTCCTTGAAAAAAACTTATAAAAAATTTCACAAGATTTAATGGAACATAGGAAGT
-AATTGACATTTATTAAAGTAATTAAATTAATTGTAAAATACCTGCACATAAAAACATAAAATTAAATAAATAAAAAAATA
-AGCAAACCCCAGATCTAAAGAATTTCACTGGTGAATTCTTTCAAACGTTTAAAAAAAATAAAATTTTTAAATTATTTCAG
-AAATAAAGAAGGGGGAAATTCCAAACTTGTTTTATGAGTCAGAATCCTGATACCAAAATTACAAAACCTAGGAATGCAAA
-ATTGACTTCAACTTAAAGAGCTATCACCATTCTAATCTGTGATTCTAATGAATTTGGCTATCTTAGATACTTTATACAAG
-TGGAATCATACAGTTTGTCCTTCTGTGACTGATTTACTTTACTTAGCATTAATGTCCTCTAGGTTCATCCATGTTGCATA
-TTGACGGGCTTTCTTGTTTTAAAGCTGAATAATATTCCGTTGTATGAATATACCACATTTTCTTTATCTTTTCATCTGCC
-AATAGACATTAACCTTATTCCCACATTTTAATTAGTGTAAATAATGCTGCAATGAGCCTGAGAATCATCCCAATCTCCAT
-TCTTTAAGATAAATAACCTGAAGTGAGACTACTAGATCATATGCTAGTTCTACTTTCTTAATTTATTTGAGGAACCACCG
-TACTGTTTTCCATAGAGGATGCACAGTTTTACTTTCCCAGAAACACTGTAGAAGTGTTCCAATTTCTCCCCATTGTTAAC
-ACTCGTTATCTTTTTCTTTTAATAAGACCATTCTAAAGGGCTTGAGGCAATATCTCTTTGTGGTTTTGATTTGCATTTCC
-CTGATTAGTGATGCTGAGCATTTTTTTCATGTATCTGTTGGTCATGTGGATATTTTCTTTGGAGAAATATCTATTGCTGA
-TTTAAAAAAAAAAAAACTCTCAGCAAGCTAGATAAAGAAATTTTCTCGAAGTGATGGAAAGCATCCACAACAAAACATAT
-AAACAATACTATATTTAATGGTGAAAGCGTAAATGTTTAAACCACATAGATTAGGACAAGAAAGGGATGTGTGTGTTCAT
-CACCTCTATTCAACATTGTACTGGTGATCCTAGATTTTGAGTATAAATATTTAGGGGACAACTATTGTCACTGAAGCCCA
-AATCTTGGTCATCCTCAGAAAAAAAAAAAAGTTGATTAGGTTGTATATAATCTAATTTTACTTGCTAATTTAATTTCTCT
-AAAATTGCAGCTTGTATCAACTCTAGAATTTATTGGGCACCTCCTAGGACATAAACACTGGAATTTGGTGAGAGACGTCA
-AATAGGAAAGAACCTGGCTCTGACATAAATTCAACACACGGAGGGGGACACATATTATGAGACTGACCTGGCCTCTTCAT
-CTCATAAAAGGGGTTCTTGTTGCTTGTAACACAGATTAAAACTATTTCAATTACATTCAAGATAAAAAGATTAACAATGG
-TATGTAAGATGAAAAAATCACCCCGCAGGAAGACGAAAGTCTCACAAAAGGATATTTAAGCTAGCCAACACTTTGAAATT
-CAGGCAGAGATCGTGATTTCTGGGTGAACTAAAGTAGCAAGAACAAAGTAGAGGCTCCAATTCTAGGAAAAATGGGTCCT
-AATAAGGTTTACAATCCAGAAACTCAAGATATCCAGACAGAAGGATGCAGTCTCAGCTTTCAAGGCAGCAGCAGTACCTG
-GATTACTAAGCCAATCCCCAACACAATCATAAACACAAATTTGATTGAGGAAGAAGCTTGCCCACCAGAAGATTTAGGTT
-ATTACAAGGTAGAATGTGATAGAGAAAATGAGCATGGGACTGGAAAGAAAAGGAGGTAGCCCCATGATTACAACTGGAAT
-ATATGTGTCAGCGATGGTGCGGAAATAAGACTGAAGAGAGAGATCCTTAAACCCCACGTGCCTTACATCAGGACTAATCC
-TGGACACAGGCTGGAAAGCATAGCCTACAGGTGGTGAGGCAGGAGGAGTGGGCTCAGCTGTGAGAAGGAGAAGGAAATAT
-GGCTGAAAACTAGATAGGGGTCTTGAAATCACACCGAGGATTTGGGCCTTTGCTGCTGTCTGCCAGCAGCTGCCAGTAGT
-TCTCACACTTTGGCTGGCAACAAAATCACCTGGGGCAGTGGTGCGGAAGCGGGGGGAGTGTTGTAAAACCACAAGTGACC
-AGGCAAAAAACACCTGTATGTTTTCCAATTCAGTAAGTACAGAAATATTAATTGGAAAAAGGTGGAGGTCAGACATTGAT
-AGTGCTGTGGACTGCTCCAGGGACGTAAGCATGATCTTTAGAGAGGTGACTCTAATCAATTGAGGGCAACCACTGGACAG
-AAAGAGGTCCAGACCAACCATACACAGAGACATCATACAACTACACTTTAGCAACCTCTCCAAATAACATGTCTCTTAGT
-GAAACTTGGGAGGTTGAAAGTTAAAAACATAAAATCCAGTGGCATTTATGTATCCTAGGCACTTACATTTGTCTGATTCT
-TCCAACTTGCCTTTGCTTGGTTAGAGTTTTGGGTAGATAAGAGGTGGATTTACATGTGCTAGTGTGAGAACTTTGATACA
-CTCATTTAGACATTGACCTACTATCTTGTTTGAAAGCTAAAACCCAAAGAAATTTGTCTTTTTACATAAAACAAATTCAG
-CCCTTGCCTTCCTTGTAGATTACATCTTCCACTAGCAGTAATAAAAAAGTAACAATATGCATAAGTCAAAGTATCTTCTT
-AGATCCTCTGTAGTGTTTTATTATTTAGTTGTGTTAATTAAAGTAACTGTCTCAAAATTTCAAGGAATGCCTGAGAAGAA
-ATTCATGTTCAAAGGCTGCCCTCTTGTGACAATGTGTTGTATGCTTTACTGTAAAAGTAACCTTATTTTACCTTATAACC
-TCTACAATCCAATTCATAACAGCATAAAAAGGAAACAAAACCTTACATAATTTTGAATTTTAAAAAGTACCTTGTTTATA
-TGGCTCCTTTAGCTAATGAATAGTCAATTTGGTAAATATTCCAGTGAGTTGAAGGTTTGAATCTATCTCACTTAACTAGC
-TTGATGAATGTATTTCTAAACCTATACAACCCACTCCTCTGCTTTTAAAAAATTAAAGTTAGCTGTAGATTGAGATGTCA
-GTGACACAGTTTATAGAACATAACTTAGATTGTCATCTACATTACTGTAACTACAAATACCACCCTCAGATGGAAGAATA
-AGTTTTATCAGTGAACATCTCTAATTGAACTATAAATGGTGTATGTCTTCTGGTTTTTACAAGCTCTTGGTCTAACACAG
-GGGATATATGATGTAAAAATTACAAAGCAAGGTCACTCACGGTGGCTCATGCCTGTAATCCCAGCACTTTGGGAGACCAA
-GGCGGGCGGATCACAAGGTCAGGAGATCGAGATCATCCTGGCTAATATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
-ATTAGCTGGGTGTGGTGACACACGCCTGTAGTCCCAGCTACTCAGTAGGCTGAAGCAGGAGAATCGCTTGAACCCAGGAC
-GCGGAGGTTGCAGTGAGCCGAGATCGCACCACTGCACTCCAGCCTGGTGGGAGAACGACTCCATCTAAAAATAAATAAAT
-AAATAAATAAATAAATAAATAAATAATAAAATAGCAGTGACTATAATGTTTTGTGATGTTAAACTTTGAGAGCTTTTTTT
-TTTCTTTCTTTTCCCAAGTGCCTTTCCCAGTTCCAGGAGCAGAGTTATTCTAAGCCCACTGATGTAAAGGAATAGAAAGA
-AAAGGTTTGTTGGAAAACCTAATAACCTGCTTTCTGTCTTTTGTTTTTTAAAAGCTTGAGCATTTGGGAGAATTTGGAAA
-GATTGTGGAGTAAGTGCAAAGAAGGAATTTGCTAACAAAAATCATATAAGGTAAAATGAGTTTTTTCCAGGTTAGAAAAT
-ATCCACTCCCTACCCTCCTACATTCCTTTCCCATGGTTAAGAAGAGGAAAAAACAAAGGCCTCTTGGTGAGCAGTGGTGA
-CTTAGGCAGTTTCTTAGAAATATTCTAGAAGGCATAGTCATCTTTTAAAAAAAAAATAGCTACAAGGATATGTCTAAGCA
-GAAGGGTCCATGGGCCAAATTACGTGTAGATTTTTGCATTCCAAATATGGTAAAGAAGAAGCAGGAAGCTGGGGCTCCTT
-AACAGGTCACACAGAAATGGACAAGGAAGAGGCCAGCAGCAGCTTGTGGGGACAAGATGTCAAGCCCCAAATGTTAAACC
-CACCAACCATCCTCCAAATTCTGGCTCTGTTTAACAAGGCTGTGGTCTGACACTACATGCCGCCTCAGTGACTAAAGCAT
-AATTTCCCGTCTCCTGGGAGTGTTGACAGCTGACTCCTGGCAACAATACTCACAGCACAGTAAAGTTCCTTCATCCAAGT
-TCATGTCCCTTCTCAAGGCATCCCACATCCGAGAACTGCTTGGTACAGAAATATAATGGCCTGGTTTTCTTGCTCCAATT
-CGAGGTCTTTAGGTAAACTCACCAAGATCTTGTAGAGTGGACTGCGGCCATGATAGTGATTGCATTCCAGCCGACTTCCT
-GCTCCACCCAATCCTATTGCTTTCACTCTTCCACAGGTGTTGGGAATATCATTTCAACCTCCTTGCATGCAAATCTCCAA
-CTCGGAGTCGGCTTCCTAGGACACCTGACTGGTGATATCTCTATCACTATCACAGTACTTAGAGGGGAGCATCTTAAAAT
-GATTGAAGGCTAACTGCCCTAACAGCACAGACAGATGATGGCTTAAAATAGAATTTAAGTGGATTTAAAAAAACATGAAA
-AAAGTTGACATTGCACGCTCATATGAGCTTATGGATCAAACCATGTGTATGATTTCTAAGATCCCTCGTGCAGTATATAT
-TTGCACTGTTTATAAATGACATCCCCTTGAATTGAATTCAGTGCAATTCAAAACAGTAATTTGTGGGAAAAATTAGATAT
-GCAGATAGCCTGGACTCTAGAGAAGCACACATCATTTGGAGAATAATAGTGAACCGGCTAGTCTATGAGGGAAGAAAACA
-GAGTGAATATAGACTATTAGTGAACAAGGATATTTTCCCATGTATATTCAAATTAAGGTGAACTTCTTTAGAGAATTGTG
-CCTTAGAAAGAAAAAGTATTTCCCTGTATTTGAGTCCTCACAAGTTTTCCTACGATGAGTGCTTTTGTGATTATTTTGAA
-TAACAAAGTAATATTTAAAGAAACTCTCTTGCCCTGAATGTACTTTAATTTATGTCAATTGATGTTGCATATAGAGATCA
-TCAGAGTCAAGCTACAAGAAAAAGAGGAACATAACTTAGCAAAGACTTAGAGGATTAGTCCTAATAGTGTGAAATCAAAA
-TTTCAAGTGAGGGAATAAATGCAGCTTTTAATGATTACTTAAATGAAGTTTAACTCTAGCAGGATCTACAAGAAATTGGC
-AACCTTTGGCTTCAGTAACAGAAACTCAGGATATATGCCCTTCAGTGAGTTTGCATTCTGCATCATACTGAGAGACACTC
-CTTTAAACAGCAATAAGAAACTTCCTGTGACAACATAATAAATTCAAAAAGTTCTGTAACTCAGACAGTTTAGATAGAAG
-TGATAACTTTGGCCTATAAAGCCCTGTTCACCCTAAAGATGGATTAAACAATGAAAAAGATATTGATATCAAAAGTTCAA
-TCAGTAATTTGATTAAAGCATTTCATTAAATGTGATAATTTCTTAGTATATTATCTTACATATGCAATATTCATGTGTAA
-CAAATTATATACAAGTAAACATTTGACCATATTATCTGCAGCATAATTTACATATCAATTTACATATTCAGTTTTGCTCA
-CATGAAAACTTGGATCTTCTCAATAAGAAAATTTGTGAAATCTTTAATTCCTCATCCCCAGGAATGTAAATAAATAAATA
-TAAATACTGTAAGTCAGTGATTTTTTCCTAGGAAGACAGTAAAAATACTTTACACGCCTTCTCATTGTAAACCTAAATAA
-CAAACAGAGAAAGGCTCTCTAAAGGAAAAAGACACATCTTAGGGAGGAGGGCACTGCAATGGGAATATGCATGACAAAGC
-AAACTATATAGATTCAAATGGTAAAGGAAGACAAGGACTTTAAAAGAAAAATGATCAACCTGGAAGTATGGGGGAGTAGA
-AAAAAATAAATAAGGGAAAATGAAGAGGCTTCTATAATTGTTTTGATATAGTTACCTTTGACTATAAAGATCAACAACAA
-GGTCAATATCAGTTGAAGTTTGGGCAGGCGGTTGCTGGATAGATGTCCTCACAGAAGTGTATTTTGTGTAAGGTTGCTAT
-GGCCTTTGTGCAAGGTTGTGGTTTTTGTGGTATTTTGTAATAGTTTTTATCAGGCCTAGAAGCATGAGAACCCTCTCTTC
-AAGGCCTTCTCTGAATCTATTTGTTCAGGTTTCTTCTTCTCTTTTTAAACATTAGTGACAGTTTTGATTCTGATAACTTT
-CATATCATGATCCCTAATTTCAAAAAAAATTAAACGTGTAACTTATTTATGATGTATTTGATAGGCTTGGATTTGTGAAT
-CACCTCTACTATCTATAGTGGTAGATATATCTGAGCCTGCTTACACAGGACTTCCATCAGATTCTCTCTTCAGTGGAATT
-GGAAGAGGGGGTTTTGGAGAAGGGAATGAAGGAATTGTGCTGCATCAGAGGTCCCCACCTAACAGCACAGGGTCTTTTTC
-TGTGCTCTTGCCAGGCCGTTGTATTGGCTGATGCAAAAGTAATTTTGGTTTTGTCATTGAAAGTAATGAGACCATCTGAC
-TTACAATGTCTGTGCCATAACCAGCTCCTAATAGCCTCCGAGGACAGCTTTGCCCTGACATATACTGTCCTGGGACCACG
-TCTGCTTTGTAACTCCTGAGGTAGCTGCCACCATGACCAATGCCTTCTCATCTTTACTCTACATGCAGGTAACAGTTATA
-ATTATATCTCTGTGTATTCACAGAACATTTAGTACATCTGGGACTTCTACAAAATTTCCCTAGCTGATTTTGGTGTTCTG
-GGGTACTGGCAGCTCTAGCCATGAAGGGATGATGCTTTATCAGCATTTCTGTTGAGTTTTTTGCTTTTTCTCAAAAACTG
-ATTCCACTTTTCCCACATACGTTTGACAATTCATTTGAACTCATTTATTCTAAACCCATTATTTCTGGTCTATTATTTAA
-TAGGAAGGGAGGCGAGGGATAAAAGATTACAAATAGGGTGCAGTGTACACTGCTCGGGTGATGGGTGCACCCAAATCTCA
-CAAATCTCCAGTAAAGAACTTACCCATGGAACCAAATACCACCGTACCCCAATAACCTATGGAAAAAAATAAAAAATAAA
-GTAAAAAAGAGTCAGAAAGAAAGAAAATAATCACTGTACTTCCCAAGACACTTAGAAATGGTGACTAGCATTATTTGTAA
-GTGTCACCTAATAATATTATTATTTTTTCTTTATGCTACAAACTAGCTCTGATATTACAATCACTACTATTTGAAGTGTT
-ACTAAATTAAATTAAATGTATTGTATCCTTCTGGACTCAGAAATGGGGGTAAATGCTAAGACAATTTCAGAATATGATCA
-CATATTAAAAGCATATTATATGGGGAAAATTTGATTTTTAAAAAATAGAAATTGGTAGAGAAACAATTTTTGGGTCTTTA
-ATGTACGCACATTTTGCAAGTATGGACGCTGAATTTATTGTTCCAAATGATTGTTTTCAAGCATGTTTGTATAGAAAACA
-GCCTTGGAATAGAAAACCAGTACCTCCTTCTGGAACAAAGGAAAAGTTTATTTACTGTCTAGTATAATGCAGATAATTTC
-TCCCTCTTGGGAAGCATACAGCCAAGTGAACTTCCAATAACACAAGTTGGGGTTTCTTGAGCTTGGGTTTTTCTTCCACA
-GTGTAATGTGCAGGTGCCACTTGGCTCTCTTTGTGTTATCCTGCGAAAGCTGATGGCTATAGGTGCATGTGTTTATTTTG
-GGTTTCTCTATTATGTTTCATTGGTCTTTGTGTCTGTTTTCATATCAGTACCATGTTATTTTGTCTACTGTGGCCTTAGG
-GTATAGTATGAAGTCAAGTAATGTGATGTCTCCAGCTTTGTTCTTCTTGCTTAGATTTCCTTTGGTTGTCTGGGCTCTTT
-AAAAATCCATATGAAATTTAGAATATTTTTTTTTTCTGATTCTGTGAAAAACGACATTGGTTGTTTCATAGGAATAGTGT
-TGAATGTGTAGATTGCTTTTGGCAGTATAGCCATTTTAACAATATTGATCTTTCTAATCCATGAGCATGGAATGGTTTTC
-CATTTGTTTCGAGATCTATGATTTCTTTCTGCAGTGTTTTGTAGTTCTCCTTTTAGATATCCTTTACCTCCTTGGTTAGA
-CATATTCTTCCTTTATTTTATTTTATTTTGGGGGTTGCTGTTGTAAACAGGATTGCACTCTTGATTTACCTTTCAGTTTA
-AACATTTTTGGTGAACAGAAATGCTACTTCTTTTTATATGTTGTTTTTTTTTTATCCTGAAAGTTTGCTGAAGTTTTTTT
-TATCAGTTCTAGGAGCCTTTTGGCACAGTCTTTAGGGATTTCTAGGTGTAGAATCATATCATCAGTGAAGAGAGATAATT
-TGACTTCATTTCCTATTTGGATGCTTTTTATCGCTTTCTCTTGCCTGCTTGCTCTGACTAGGACTTGTTAAACAGGAGTG
-GGGAGAACAGGCATCCCTATTTTATTCCTGTTCATAAGGGGAATGTGTTGGGAGAAAAGCTGAGTGTTGGAAGACAAGCT
-GAGGCAGGGCCATATGTTTCTCATTCACTTGATACACCATTTCCTTTCAACCCCCACATCCTCACCACCTGTTTCTTTGT
-TTGAGCACCAACAAATAGCGTGGGCTCCCAGAGCTTGGGGACTTTGCAGACTCCATACTCGTGATGGTCTCCTGGTCCCA
-CTTTCTCTCTCAAACTGTCTTTTTCTCATTCCTTTGACTCTGCCGGACTTCATCACCCCCATGACCAAGTGTTGGGTCTG
-ATCACCCCAACATTCCTGGCGCCCAACATAGGGTGACAAAGACCCGGTGAAGGAAGGCTAGAGCATATGAAAGCAGAGGA
-CACATCATCAAAAGACACCCGAGGACATACAAAGATGGGGAGTGAAAGTTAGTACTTAGAATTTGTTATTACTCTTTAGT
-ACAGTAAAGCAGTTTTGCCCATGGTTTCCAGAACAAAGGACTATGCAGTTGGATGAATGGGAGAGAATTGGAAGAGATTT
-TTAATAGGCATATAAAGATGGAGCAGAAATTCCAGTTTATATATGGTCAGTGTGGGCACTAATAAAGGCAGCCCTTGAGC
-CATTTCAAACAGATGATGAGGCAGATTCAGATGAGGAAGAGGAGGATGAGTGTAAAAAACTAACTTCAAATTCTGAGTGT
-GAGGAGCAGCTACCGGAGGAGATTAAAGAAAAGAAAGAAAAACTTTAAAAAGTATGTTTTACTAGCCCGTTGGCTCCACC
-TGCTGAATTAAGTGAATGGCCACCTCCTCTCTCTCCCCTAAATGGGTGAGAAAATAAATTAGCTGAAAAACTTACTGCTC
-CTGTAGTTACAACATTAAAACCTGGAGCAGTTGGTGGTGCTAGACAAAATTCTATTCAAAAAGCTAAAGCCAAGGGAGAC
-CTTGAAGCATGGTAATTTCCCGTTACTATAATCCAGCAAGTAGGACAGAATATAGCTAATTAGCCTGCTTTTTCTTCTAA
-GTTACTAAAGAATTTAAGCAAGCCATTAGTCAATATGGACTGAACTGTCTTTTTGTGCAATCTTTATTAAAAAATATGGC
-TCTTGATAATACATTACTACCATATAATTAGGATACTTTGACAAAACCTGTTCTCACTCCCATCTCAGTACTTGCAGTTT
-AAAACTTGGTAGGCTGATGAACTCAAACTCAGGCAAAAGAAAACACACACGTGCAGCCACCTGTGCCTGTTTTCTTTGAT
-CAGTTAATATGAGTTGGTCCTAACTGGGGTTGATTAGAGAATCAAGCAGTAATGGAAGATGTTGCCATTATTCAGCTGTG
-CTTCATGTGCTTACATGCATAGAAAAGGATAAATGTTACAGGGGAAAAGTATCCTTATTTAAGTTCTGTCTGACAAGGAC
-CTAAAGAACCATATATTAATTCTATTGCTCAGCTCCAAGAGGCTGTGTATAAAGCCGTAAATGATCAAAACAGCTCAGGA
-TGTTGTAATACAGCTTCTTGCATACAATAATGCTAATGCAGAGTGTCAAACTGCTATTAGATATCTGAGAGAGAAGGCTC
-ATTTAACTAAATATATTAAGTCTTGCGATGGCATTGGAGGTAACTTACATAAGGCTATTCTTTTAGCTCAGGCTATGGCT
-AGATTAAGAGTAAGAAAAAATATGCTTCATTTCTCAGGCTCTTGCCTTAATTGTGGGCAAATTGGACACAAGAAAGGAAT
-GTAGAAAGGAATTCAAAAGACGAAAACTACTACCATGAATCAACAGAAAAGACCCAGTGTATGTCCCTGGTGTAAGAAAG
-GCAATCACTAGGCAAGTCCGTGTCATTCTAAATTTAGCAAAGATAGACAACCTCTTTGAGGAAATAGGAAGAGGGACCCG
-CCTCAAGCCCCTCAACAAACTGAGGCATACCCAGCACAGCCACTGCCCTTACAAATGTACAGCAATTGTCCCCCGCCTCA
-GCAAGCAGTGCTGCTGTAGACCTCTACAGCACAATTCCCATCTCCTTACTTCCTGGGGAGCCACGAAAGAAGGTCCCCAC
-AGGAGTTAGGGCACCCTTACCCTGAGGAACTGTTGGGAACAAGCCCCCACAAATCCGGCCATAAACTGGCCCCAAAACTG
-GCCATAAACAAAATCTCTGCAGCACTGTGACATGTTCTTGATGGCCATAACACCCACGCTGGAAGGTTGTGGGTTTACCA
-GAATGAGGACAAGGAATACCTGGCCCGTCCAGGGTGGAAAACCACTTAAAGGCATTCTTAAGCCACAAACAATAGCATGA
-GTGATCTGTGCCTTAAGAATAAGGGATACTTTTAGTTAATCTAATATCTATAGAAACAATGCTAATGACTGGCTTGCTGT
-TAATAAATACGTGGGTAAATCTCTGTTCAGGGCTCTCAGCTCTGAAGGCTGTGAGACCCCTGATTTCCCACTTCACACCT
-CTATATTTCAGTGTGTGTGTCTTTAATTCCTCTAGTGCTGCTGGGTTAGGGTCTCCCCAACCGACCTGGTCTCAGCAAGT
-GGTGCCCATTCATGGGGGCTCGAATACAGGTCAAAGGATCGCTGGAGCAACGATTGGAGAATGTGGAACTAGCTGGAGGA
-CATCCGAGTACTCTTAAAGCAATCCCCGTGGTGAGTCAGAAGGGGAGCTCGGAAGCATCAGGGTAACAATGGGACAAGTG
-TGGGCTGTGGTTCGTTCTACCTTGGAACTTTTTCACACTGATAATGAGGAGGAAGGAGAGTATATCAAAGTAACAGTAGA
-GGCTACAGACCAGGTTTATTTGCCACCTAAAGCTAAAGCAGAAAAGGAGGGAGAGGTTCATCCCTACCCTTCTGCACCCC
-CTCATTATTATTTTGAAGAAAACGACCCTCCAGATATTTCTTTTCTGGAGGACACTGGGTGAAAAGTAGTTGCCCTGGTG
-ACTGTTCGAGCACCGCCTTGAGCGACTGCTTAGTTCTATTCAGGCAGGAATTCAGCAAGCTAGACAAAAGTGGGATTTAG
-AGGCTTGGCAGTTCCCTGTTTGAATACACCCCCCAGATCAACAGGGAAATATTATAGCTACATTTGAATCTTTTCCTTTT
-AAATTACTCAAAAAAATTAAACAAGCTATAAATCAGTATGGACCAGGTTCTCCTTTTGAAATGGGACTGTTAAAGAATGT
-TGCTGTTTCCAGTCGGATGATTCCTACTGACTGGGACACTCTTACTCTAGCTTGTCTAACTCCTGCTCAGTTCTTACAAT
-TTAAAACTTAGTGGGCAGATGAAGCTTCCATTCAGGCTGCTCGCAATGCCTGGGCCCAACCTCAAATTAATATAACTGCA
-GACCAACTTTTGGGGGTTGGTGGCTGGGCTGGTTTACATGCACAAGTAGTCAAGCAGGATGATGCCATAGAACAGCTTAG
-AGGAGTGTGCATTAGAGCTTGGAAAAAATCACTTCATATGGAGAACAATACCCTTCATTTAGTGCTATAAAACAGGGACC
-AAGAGAACCATATGTGCATTTTATAGCTTGGTTACAGGAGTCTCTTAAAAAGATGATTGCAGATTTGGCTGCTTAGGATA
-TAGTGTTGCAGTTATTAGTTTTGACAATGCTAATCCCTATTGCCAGGCTGCTCTGCGACCTATCAGAGGGAAAGCACATT
-TAGTTGATTATAACAAGGCCTGTGATGATATCAGAGATAATCTACATAAAGCTACTTTGTTGGCACAGGCGATGGCAGGA
-CTGAGAGTGGATAAAGGAAATACTCTATTTCCTGGAGCTTGTTTTAACTGTGGGAAGCATGGTCATACTAAAAAGAATGT
-AAAAAAAAAATCAGCAAGTCAGGCCACCAGATAGGTGAAAAAAGAAAACTGCTGATCCTGAAATATGTCTAAAATGTAAA
-AAAGGAAAACTTTGGGCTAATCAGTGTCACTCTAAGTTTGATAAAGAAGGGAACCCGATTTTGGGAAACTCCCTGGGGGG
-CCCATTCCAGGCCCTGTTCTAAACCAGGGCATTTCTAGCTCAGGCCATTCCCTCACACCCGTACATTATCTGTCCCCCAC
-CATAGCCCATAGTGTCGCAGTAGACTTATGCTGCACAAAAGCTGTGAGCCTTCTGCCTGGGGAACCCCCGCAAAAGGTCC
-CAACAGGAGTCTGTGGACCGTTGCCAGGAGGGACAATGGGATTACTTTTAGGAAGGTCTAGTTTAAGTTTAAAAGGGGTA
-CAAATACACACTGGAGTCATTGATTCAGATTACAATGAGGAAATTCAAATTGTGATATCTACTTCTGTTCCCTGGAAAGC
-ACAGCCAGGAGTGGGCATAGCACAGCTCCTGAGTGTGAAGTATGTGGGAATGGGAAAAAGTGAAATTAAATGAACTGGAG
-GATTTGGAAGCACAAATAAAAAAGGCAAGGCAGCTTATTGGGTAAATCAAATTACTGATAAACATCCTATCTGTGAAATA
-ACTATCCAGGGAAAGAACTTTAAAGGTTTGGTAGATACAATTTTTTTTTTTTTTTGGTAGGAGTGGACATTTCAATCATT
-TCTCTACAGCACTGGCCGTCCATGTGGCCAATTCAGCCCACTCAATTTAACACAGTGGAAACTGCTAAAGCCCCAGAAGT
-GTATCAAAGTAGCTATATTTTGCATTGTGAAGGGACCGATGGACAACCTGGGACTGTTCAACCAATTGCAACTTCTGTAC
-CTATAAATTTATGGGGGAGAGATTTATTATGACAATGGGGAGCACAAGTTCTAATTCCATAGCAATTATACAGCCCTCAA
-AGTCAACATATGATGCACGAAATGGGGCATGTCCCTGGTATAGGAGTAGAAAAAAATTGCAAGGTTTGAAAGAACTGCTT
-CAAACGGAAAGACAAAGTTCCTGCCAAAGATTAGGATACCATTTTTGATGGTGGCCACTGTTAAGCCTCCAGAACCTATA
-CCTTTAAAATGGTTAACAGATAAGCCAATTTGGATAGAATAATGGCTGCTAAGCAAAGAGAAACTGGATGCTTTAGAGAA
-ATTAGTTACTGAACAATTAGAAAATGGGCACATAGCTCCAACATTTTCCCCTTGGAATTCTCCAGTGTTCATAATTAAGA
-AAAAATCAGGTAAATGGAGAATGTTAACTGACTTAAGAGCCATCAATTCAGTTATACAACCTATGGAAACATAACAGCCA
-GGATTGCCTTCTCCTACTATAATTCCAAAAAATTGGCCTTTAATAGTCACAGATTTAAAAGACTGTTACTTTACTACCCT
-TTTAGCTGAGCAAGACTGTGAACGGTTTGCATTTACAATTCCTGCAGTAAACAACCTGCAGCCTGCTAAGCGTTTTCGTT
-GTTTCACAGATGGGTCTAGTAATGGTAAAGCTTCTTATTCTGGATCAAAAGGTAAAGTTTTCCAGACACCCTATACTTCA
-GCTCAAAAAGCGGAGCTTGTAGCTGTAATTGAGGTATTGACTGCTTTTGATATGCCTGTTAATGTGATTTCTGATTCTTC
-ATACATGGTTCATTCCACACAGTTAATTGAAAATGCTCAGTTACGATTTCATACAGATGAACAACTGATAATAAAAACAA
-AAAAAGGGGGAGAAACAGGGATTACGGGTAGCCCATACACAATTGAATCTATCATTATTAACTTTCAAATTTTTGAGCCT
-GCCCAAAGGCCAGATGTTACCAGCAGCTGAACAGCATCTACAGAAACTAGCTGCAAAGAGAGAAGCAGAACAACTGGTTT
-GGTGGAGAGATCCAATAACAAAAAGTTGGGAAATAGGTAAAATTATAACTTGGCATAGAGATTATGCTTGTGTTTCTCCA
-GGACCGAATCAACAACTGATTTAGATACCATCAAGACACCTGAAATTTTATCATGAGTCAGATGCTGAGGAAGAGATAAA
-AAGCACAATCATCATTGAAATTAGAGCTTCTGGCTGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTCTGGGAGGCCG
-AGGTGGGCAGATCACAAGGTCAGGAGATCGAGACCATCCTGGCTAACACAGTGAAACCCCGTCTCTACTAAAAATACAAA
-AAATTAGCTGGGTGAGGTGGCGGGCGCCTATAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATGGCATGAACCCGGG
-AGGCAAAACTTCAGGTTTTGCCAAGAATGACACTGTAAATGTAACAAAGCTTCTGTGCTTGTTAGTGAACACCAAATCAG
-CTACTCTCCTGTATTCGGAGATCAGGATGAAATGAAAAGAACAAGCAGGCCGGGCGCGGTGGCTCATGCCTGTAATGTCA
-ACACTTTGGGAGGCTTCGGTGTGCGGATCACCCGAGGTTGGGAGTTTGAGACCAGCCTGACCAACATGGAGAAACCCCGT
-CTCTACTAAAAATGCAAAATGTGCTGGGCATGGCGGCACAAGCCTGTAATCTCAGCTTTGGAGGCTGAGGCAGGATAAGT
-GCTTAAACCTGAGAGGGGGAGGTTGCTGTGAGGCAATATTGCACCATTGCACTCCAGCCTGGGCAACAAGAGTGAAACTC
-CATCTCAAAAAAATAAAAAATAAAAAAAGACCCCCAACCTTGTCTAGACTGTGGGGTTTCAGTTTCACCCCAGGGGGGTC
-CTGGTTGGGTTAGAATCCTGAATCTCGTTTGAGTTCGAACCCTAAAGAATAAAGGGAATAAAGGCTGTAGCTACTGAGCT
-ACTCAATCTGGTCTGGTTCTGGCTTTTGTGTGTCTATCTGTATTTTTGGTCTAAATATTTGGCCCAACAGAGGTTAAAGG
-CTTTGATGTTCTCAGCAAAAGCCTTGTGAGATTTCTAGTTTATCTGTGTGCTCAATTGGAACAAAGAGACTCAATAAACT
-AGAAAAACCTAAAGAAAATGGCACACGTGAAAAATTGAGAGCCAACTCCTGTTTGTTGTTCTGTCCACCTCCCTCTCTCA
-CTCCTCCTTCTGCCTTTGCTGTGGTCCCATGGTGTTTCTGTCTTTCCGGGGACCTGAGATTCAGTGTAGGAGTGAAGTCC
-ATGATTTTAAAGCCTTCATGTCTCTGCTTTTTAACTCTGCCTGCTTTGCTGAGCTCTTATAATGAGAAATAAACTATTCA
-GAACAGGTACAACAGGGCATCAGAAAACCAACTTCAGGCAGCGCTCCGGCAAGTACCTCCCTAGAGGGGAAGGGCTTACT
-AAAGGAGATTTAATCTTGAAAAGGCCAAAATGAGAAGCTCTAACCTTTAGCTTGCTAGGTTTTCTGGGACTCGAGCTGGC
-TATATATTATGGACCATTCTAGCCACACACACACACACACACACACACACACACACACACACTTTTTTGAGACAGAGTCT
-TGCTCTGTTGCCCACGCTGGAGTGCAGTGGTGCGCTCTTGGCTCACTGCAACCTCCACTTCCCAGGTTCGAGCAATTCTC
-CTGTCTCAGCCTCCTGAGTAGCTGCGATTACAGGTGTACGCCAACATACCCGGCTAATTTTTGTGGTTTTAGTAGAGATG
-AGGTTTCACTATGTTGACCAGGCTGGTCTCAAACTCCTGATCTCAAGTGATCCACCCACCTTGGCCTCCCAAACTGCTGG
-GATTACAGGCATGAGCCACTGTGCCCAGCCTATATATATATATATATATATATATTTATATTTATATTTATATATTTATA
-TTTATATTTTTTTTCTTTTTCTTTTTGACACACAGTCTTGCTCTGTTGCCCAGGATGGAGTATGGTGGTACAATCGCGGC
-TCACTGCAACCTCCACCTCCCAGGTTTGAGCGATTATCCTGCCTCAGCCTCCTGAATAGCTAGGACTACAGGTGCACACC
-ACCACACCCAGTTAATTTTTGTATTTTCAGTAGAGATGGGGTTTTGTCACGTTGGCCAGGCTGGTCTCAAACTCCTGGCC
-TCAAGTGATCCACCTGCCTCAGCCTCCCATAGTGTTGGGATTACATGAATGAGCCACTGCACCTGGTCTCTAGTGCACAC
-TTTAAACCTGACGGCCAAATTACATGAAAGAAAATTCAGAACTCAAATAGTTACTATTTTTAAAAACCCTAAAATGAAAA
-AGTCTCAGTTCTTTTGCCTATCTTTTTTTTTTTCCCTGCCTACTTTGAATCTGCTGATTTGTCTACTGGTGTTGAGATAA
-GACTTACTGTCTGTGGTGTTACCAATTCAAGGTTACTTGGCTGAAGAAAAACAAAAGAATGAAACAATTTTTTATTTTTT
-TCTCTTTTTGAGACAAGGTCTTACTCTAAGGTCTTACTCTGTTCCCCAGACTGGAGTGCAGTAGTGGGATCATAGATCAC
-TGTTATCTCAACCTCCCAGGCTCAAGCAATCCTCCTGCCTCATCCTCTCTAGTAGCTGGGACAATAGGCATGCACCACCA
-TGCCTGGCAATTTTTTATCTTATTCTTAGTAGAGATTGGATCTCACTCTGTTGCCCAGGCTGGTCTCAAACTCCTGAGCT
-CAAGTGATCCTCTTGCCTCAGCCTCTCAAAGTGCTGGGATACAGGCATGAACCACTGTGCCCAGACAAAAGAGTTCTTTT
-ATAAATGCAAATAATTTAAAAAGTACTGATAAAATAAAAATAGAAATGTCTTCAGAATTGTCAGCATACATTTTTGACTG
-TGTTTTATATTTACATTTGCTAGATATTTTAAGGTGCTAGGGTTTGGCATGAAGGTTATAAAGCTATAAACACAGGAAAA
-AAAGAATATTTGTTTATGTGATTTTTTAAATACATAAGACCAATTTAATACGGTTTGTTGAACAAAAATAATGGAATTTT
-CTGAGTTATTGGTAAAATACCCTTGTATTTAACTTTGAAATCCTCACTTATGTGAACACCTGATATTCACAGGCTATAAC
-ATGGTTAACAAGAAAATAACCTAGAAATGACTAGCTTTGTCTAATACCTCAGTTCTCACAAATACTCTAGATAAACTGTC
-AAAAATAAGTAAATGTAAATGGATAAATGTCTATACAAGACATTTTAATGTATTTTTGAAATTTTTTTGAGCCAATGTCT
-CTGCCTGTCACCCAGGCTGAAGTGCAGTGGCATGATCACAGCTCATTGCAACCTTGACCTCCTGCACTCAAGGGATCCTC
-CCACCTCAACCTCCCAAGAAGTTGTTAATTACAGGCATGCAACACCATGGTCAGCTAACTTTTATTTTTTTTGTAGAGTC
-AGCATCTCGCTATTTGCTCAGGCTGGTCTCACGATACTCCTGCCTTGGCCTCCTAAAGTGTTGGGATTACAGGTGTGAGC
-CACCATGCCCAGCCTATTTTTGAAATTTTAGTTATGTTAAATTAAATAATAGATACTCATTAAATATCTGGGTTATTTCC
-AATTTAAAACTTATGTTTTAGCCCAGGCACTATGGCTCATGCCTGTAATCCCAACACTTTGGAAGGCCAAGGCGGGTGGC
-TCACCCGAGGTCAGGAGCTCAAGACCAGCCTGATCAACATGGTGAAACCCCATCTCTACTAAAAAATACAAAAAATTAGC
-CAGGTGTGGTGGTGGGTTCCTGTAATCCCAGCTACTCGAGAGGCTGAGGCAGGAGAATTGCTTGAACCTGGGGGACGGAG
-GTTGCAGTGAGCTGAGATCACACCATTGCACTCCAGCCTGGGCAACAAGAGCGAAAATCCACCTTAAAAAATATGTTTTA
-GGAACACATAATTCTAAATTATGAAATCATTCTCATATGTAAGATACTGCTATATGACAATTCAAGATTTCTTTCTTCCT
-AAGTTTTTTATTAAAATAAGGGTTACTAAGTGTTAATATCTTGGTAGATATATGTGATTAAGACTACTAGATACAAGAGA
-AACAATTCTGTATGCAAAATCTATACGGGTTTTTGTTTCAGAGAAAGTAAATTCGCTTAGAGATTTTTAAGGATTATTTT
-AAATTGAAGGAATAAAAAAGATAGATAAAACTAAATGTGTATAAAAAGTTGGGAAAGATGGAAAAAATTATACAAGCTTA
-TTAAAAGTTTATGTAAATCTTACCTCGAGGTCAAAACTGATTGAGATCAGATAGATTGTTTATAAGGTTTATTTAAATTA
-GCTGTAATATTAAAAACATAGTGATAAAAAACAAAAAAATTTGGTTAAAACAACAAGGTTTTCTTAATGCATTTATTTGC
-TCATAATAAGAGGTAATAAATATTGACTTTTAATCCTGATATCTGTTACTATAAAATCTTTTCAGATTTGTATATCAGAA
-GTTCAACGTTTCCTGTACTTTCATGTTACACATGACTCACAGATCACATCATTGTCTTCTGTTTCTTCTTGAGAAGGAAT
-AAAAGGCTTGGGTTTCCTGCTTGGCTGGGATGATAACTCCTTCAGCTTTTTCATCAGGTCTAATTTTGTACTCTTGGCTT
-TTAAATATGTCTTAATTACTTCATGTAACCAGGATACAGCAGGAAACTTCCATGCTATCATTGTGAGCTATGGATCCCCA
-CTGCTCTATGCTCTGGTTTTCCTGTTTACATTCCTCTGTAATATTATGCTCACTCATGACCCTGGACACACTCTTTCTAT
-GTCTAATTAAATTCAAGTCTCCGTGTCATCGGTTTGACTTCCAAGTGATTTAAATTAGCTTCCCATAAGAAGACACAGTT
-ATGCCACAGGAGCTTTTACCCTTTAAATGACTGGCCTGTAATAAAGATTTTAGGTTTTATCAAGATAATCCATGTGTTGC
-CTTTATTGTTTTTTTAATTACTTGGGAAAACTGAGGGTTTTCAGTTTTCACATCCATGTAACCTTCTATGTTGCTTTTGA
-TGTCTTTTGGTTGTCATGTTAATTAAATGAATGTTATTTAAAAATGACATGTGGCTGTGTGCAGCGGCTCTTGTCTGTAA
-TTCCAGCCCTTTGGGAGGCCAAGGTGGGTGGATCACTTGAGCCCAGGAGTTCAAGTCCAGCCTGGGCAAAATGGCAAAAC
-CCCATATCTACTAAAAATACAAAAGCTAGCTAGGTGTGGTAGCAAGTGCTCATAGTCCTGGCTACTTGGGAGACTAAGGT
-GGAGGATCACCTGAGCCTGGGAGGTTGAGGCTGCAGTGAGCCATGATTTCACCACTGCACTCCAGCCTGGGCAACAGGGT
-GAGACCCTGTCTCAAAAAAATAATAAAATAAAAAACAATAAACTACCATTCCGTTTTGGTCAAATGTTTTCAATTTTTTG
-ACATCTTTGCTAAAACTTAGTTGATAACATTGTATGGGAAGCATTGCCAAAAGATAAGTAACACTAAATCTTCTTTTTTT
-TTTTCTCTGAGACAGAATCTTGCTTTGTCACCCAGGCTGGAGTGTTGTAGCATGATCTAGTTTCACTGCAAATTCTGCCC
-CAAGGTTCAAGCAATTCTTCTGCCTCAACCTCCCAAGTAGCTGGGACTACAGACAAGTGCCACCATACCCGGCTAATTTT
-GTATTTTTAGTAGAGACAAGATTTCTCCATGTTGGCCAGGCAGGTGTCGAACTCCTGACCTCTGATGATCTGTCCAACTT
-GGCCTCCCAAAGTGTTGGGATTACAGGCATGAGCCACTGTGCCCAGCTTAAATCTTCTTTTGGTTACATTTATAGGTATG
-TTATTAATATAAATATTTTAAAAGTTATATAAATTATAAAAATCTAATAGGGTTTCAGTCATAATTTTGATGATGTTAAA
-TATTTTCTAAAGTTGTATGTGTATAGATATATTATTAATATAAATATTCTAAAGATTATATAAAATTTCTGGAAGTCTGA
-TGGATCTGATGTGTTGCCATCAGTCATGATTCTGGCTGTTATCTTAAAATGCTACATATAATACAAATAACTAAATTTTC
-TCGAGATTTGAGAACTTCCACTGGATTTTAACCAACGGCTATTCTAAGTTTTTGTCATCCACGGTGATTGATTAAAGTTC
-TTCTCTAAAACCCTTTACAGGCCGGGCACGGTGCTGGAGGCCATGCAGGGCACGGTGCTGGGCATGGTGCAGGGCATGGA
-GGCTCATGCGTGTAAATATCCCAGCACTTTGCAAGGCTGAGGTGGGTGAATTGCTTAAACTAAGAAGTTTGAAAGCAGCC
-TAGGCAATATGGTAAAATCCCATCTCTACAAAAATACAAAAATTAGCCAGGCATGATGGTGCATGCCTATGGTCCCAGCT
-ACTTCGGAGGGTGAGGTAGGAGGATGGCTTGAGTTTGGGAGGGAGAGATTGCAGTGAACCAAGATCATGCCACTGCACTC
-CATCCTGAGTGATAGAGCCAGACCGTGTCTCAAAAAAAAAGCCTTTACAATCAGCTATCATCTAAATTACTTTTAATGGA
-AAGGATTCTGACAAGTTCTCTTAAATATGGTTTCAGATAACTTTGGGGATCAAACCATTGGACTAGGAAAATCTTCCAGG
-ACTCTAAAAAGCTGAATGAGAATTTCTAATTGAAATCAAGCAAAACACAAAAAACTGAATGAGAATTGCTATTTGAAATC
-AAGCAGAACAAGATTTAGTTACATGGGAGTGAACTTATAAAAGAAGGAAAAGATTTTATCCATGGCCCTCCCATTAGAAA
-CATTGTTGATCCTCTTTATGTTTTGTTTTCCAAAGTCAATAATTTTTTTTCTTTTCAGCTATTTTTAATTTACAATACAT
-TGGATAAACTACATTGTGAACAAAAATTTGAGCCATTTATCTGTCTCTCTAGCTGATTTCTCCAGAATTCAGAAGCCATT
-CGTGAGCATTCTTAAATTATGGCAATATAATTATTTGCATAATTTCAATAAGAATCTGTTTTTGGTAACAAGATTCAATT
-GGAGACACTGTTTGTTTTATCAAGGCTTTAACTCGAATGGCAGATACAACCAGACCACTTTAAGGAATTGAGGTTGACTT
-TATAGCACCAATACAAAGCCCCTTAGAATGACTGGCTTGATGTCCTGTATACAAAGGTCCTTTACAAAGTTGCTATTCTT
-GTGGTAAGAAATAAAGAATGTCACTTTCTGATGGGCCAGGAACCTCAAGATATTTGGGGACCTTGAGAAGAGAAGACTAC
-ACCCATTCATTAAAGTATTACAGGAGAGCTGGCAAGATGTCTGAATAGGAACAGCTCCGGCCTGCAGCACCCAGTGAGAT
-CAACACAGAAGTCAGGTGGTTCATGCATTTCCAACTGAGCCTCCACTGGTGATACCCAGGAAAACAGGGTCTGGAGTGGA
-CCTCCAGCAAACTCGAGCAAACCTGCAGCAGAGGGACCTGACTGTTAGAAGGAAAACTAACAAACAGAAAGGAATAGTAT
-CGACATCACCAACATCAAAGACCAAAGGTAAATAAATCCACAAAGATGGGGAGAAACCAGTGCAAAAATGCTGAAAACTC
-CAAAAGTCAGAATGCCTCTTCTCCTCCAGAAGATCACAACTCCCCGCCAGCAAGGGAACAAAACTGGACAGACAGTGAGT
-TTGATGAATTGACAGAAGTAGGCTTCAGAAGGCGGGTAATAACAAACTCCTCCGAGCTAAAGGAGCATGTTCTAACCCAA
-TGCAAGGAAGCTAAGAGCCTGAAAAATAAAGGTTAGATGAATTGTTAACTAGAATAACCAGTTTAGAGAAGAATATAAAT
-GACCTGATGGAGCTGAAAAACCCAGCACAAGAACTTCATGAAGCATACACAAGTATCAATAGCTGAATCAATCAATCAGG
-AGAAAGGATATCAGAGATTGAAGATCAACTCAATGAAATAAAGCCAGAAGACAAGATTAGAGAAAAAAGAGTGAAAAGAA
-ATGAACAAAGCCTCCAAGAAATAGAGGACTATGTTAAAAGTCTGAATCTACGTTTGATTGGTGTACCTGAAAGTGACAGA
-AAGAATGGAACCAAGTTGGAAAAAACTCTTAAGGATATTATTCAGGAGAACTTCCCTAACCTAGCAAGACAGGCCAACAT
-TCAAATTCAGGAAATACAGAGAACACCACTAAGATACTCCTCAAGAAGAGCAACCCCAAGACACAAAATCATCAGATTCA
-CCAAGGTTGAAATGAAGGAAAAAATATTAAGGGCAGCCAGAGAGAAAGGTTGAGTTACCAACAAAGGGAAGCCCATCAGA
-CTAACAGTGGATCTCTTGGCAGATAGCCTACAAGCCAGAAGAGAGTGGGGGCCAATATACGACATTCCTAAAGAAAAGAA
-TTTTCAAACCAGAATTTCATATCCAGCCAAACTAAGCTTCATAATTGAAGGAGAAATAAAATCCTTTACAAGCAAATGCT
-GAGAGATATTGTCACCACCAGGACTGCCTTACAAGAGTTCCTGAAGGAAGCACTAAACACGGAAAGGAACAACTGGTAAC
-AGCCACTGCAAAAACATACCAAATTATAAAGACCATTGACACAATGAAAAAACTGCATCAACTAATGAGCAAAATAACCA
-GCTAGTATCATAATGACAGGATCAAATTCACACATAACAATATTAACCTTAAATGTAAATGAGCTAAATGTCCCCAGTTG
-AAAGACACAGTCTGGCAAATTGGATAAAGAATCAAGACCCATCAATGTGTTGTATTCAGGAGACCCATCTCATACACATA
-GGCTCAAAATAAAGGGATGAAGAAACATTTACCAAGCAAGTGGAAAGCAACAAAAGGCAGGGGTTGCAATCCTAGTTTCT
-GATAAAACAGATCTTAAGCCAACAAAGATAAAAAGAGACAAAGAAGGGCATTACATAATGGTAAAGGGATCAATGCAACA
-AGAAGAGCTAACTATCCTAGACATATATGCACCCAATACAGGAGCACTCAGATTCATAAAGCAAGTTCTTAAAGACCTAC
-AAAGAGACTTAGGCTCCCACACAATAATAGTGGGAGACTTTAACACTCCACTGTCAATATTAGATAGATGAGACAGAAAA
-TTAACAAGAATATCCAGGACTTGAACTCAGCTCTGGACCAAGTGGACCTAAAAGATATCTACAGAACTCTCCACCCCAAA
-TCAACAGAATGTACCTTCTTCTCAGCACCGCATTGTACTTATTCTAAAATTGACCACATAATTGGAAGTAAAACACTCCT
-CAGGAAATGCAAAAGAATGGAAATCATAACAAACAGTCTCTCAGACCACAATGCATTCAAATTAGTATGCAGGATTAAGA
-AACTCACTCAAAACCTCACAACTACATGGAAACTGGGCAACCTGCTCCTGAATGACTACTGGGTAAATAACGAAATGAAG
-GCAGAAATAAAGATGTTCTTCAAAACCAATGAGAACAAAGACACAACGTACCAGAATCTCTGGGACACATTTAAAGCAGT
-GTGTAGAGGGAAATTTATAGCACTAAATGCCCACAAGAGAAAGCAGGAAAGATCTAAAATTGACACCTTAACATCAAAAT
-TAAAAGAACTAGAGAAGAAAGAACAAACAAATTCAAAAGCTAGGAGATGACAAGACATAAATAAGATCAGAGCAGAATTG
-AATGAGATAGAGACATGAAAAACCCTTCAAAACATCAATGAATCCAGGAGCTGGTTTTTTGAAAAGATCAACAAAACAGA
-CCACTAGCCAGACTAATAAAGAAGAAAAGACAGAAGAATCAAATAGATGCAATAAAAAATGATTAAGGGGATATCACCAC
-TGATCCCACAGAAATACAAATTATCATCAGAGAATACTACAAAGACTAAACCAGGAAGAAGTCAAATTCCTGAATAGACC
-AATAACAAGTTCTGAAATTGAGGCATTAATCAATAGCCTACCAACCAAAAAAAGTCCAGGACCAGACGGATTCACAGCCA
-AATTCTACCAGAGGTACAAAGAGGAGCTGGTACCATTCCTTCTGAAACTATTCCAAACAATAGAAAAAGAGAATCCTCCC
-TAACTCATTTTATGAGGCCAACACAACAAAAAAAGGAAATTTTAGGCCAATATGCCTGATGAACATCAATGCAGAAATCC
-TGAATAAAATACTGGAAAACTGAATCCAGCAGCACATCAAAAAGCTTGTCCACCATGACCAAGTTGGCTTCATCCCTGGG
-ATGCAAGGCTAGTTCAACATGCAAATCAATAAATGTAATCCCTCACATAAACGGAATCAATGACAAAAACTACATGATTA
-TCTCAATAGATGCTGAAAAGGCCTTTGACAAAATTCAACAGCCCTTCATGCTAAAAATTCTCAATAAACTGGTATTGATG
-GAACATATCTCAAAATATTAAGTGCTATTTATGGCAAACCCACAGCCAATAACATACTGAATGTGCAAAAACTGGAAGCA
-TTCCCTTTGAAAATCAGCACAAGACAAGGATGCCCTCTCTCACTACTCCTATTCCACATAGTGTTGGAAGTTCTGGCCAG
-GGTAATCAGGCAAGAGAAAGAAATACAGGGTGTTCAATTAGGAAAAGAAGAAGTCAAATTGTCTCTGTTTGCAGATGACA
-TGATTATATATTTAGAAAACCCCATCGTCTCAGCCCAAAATCTCCTTAAGCTGATAAGCAACTTCAGCAAAGTTTCAGGA
-TACAAAATTAATGTGCAAAAATCACAAGCTTTCTTATACACCAATAACAGACAAACAGAGAGCCAAACTATGAGTGAACT
-CCCATTCTCCATTGTTACAACAAGAATGAAATACCTAGGAATACAACTTACAAGGATGTGAAGGACCTCTTCAAGGAGAA
-CTATAAACCACTCCTCAAGGAAACAAGAGAGGACACAAACAAATGGAAAAACATTCCATGCTCATCAATAGGAAGAATCA
-ATATCGTGAAAATGGCCATACTACCCAAAGTAATTTATAGATTCACTGCTATCCCCATTAAACTCTATTGACTTTCTCCA
-CAGAATTGGAAAAATATATTTTAAATTCCATATGGAATCAAAAAAGAGCCCGAATAGCCAAGACAATCCTAAGCAAAAAG
-AACAAAGCTTCAAGCATCATGCTACCTGACTTCAAACTATACTACAAGGCTATGATAAACAAAAGAGCATGGTACTGGTA
-CCAAAACAGATATATAGATCAAAGGAACAGAACCGAACCCTCAGAAATAACACCACATATCTACAACCATCTGATCTTTG
-ACAAACCTGAGAAAAACAAGCACTGAGGAAAGGATTCCCTATTTAATAAATGATGTTGGGAAAACTGGCTAGCCTTAGGC
-AGAAAGCTGAAACTGGATCCCTTCCTTACACCTTATATAAAAATTAACTCAAGATGAATTAAAGACTTAAACCTAATACC
-TAAAGCCGTAAAAACCCTAGAGGAAAACCTAGGCAATACCATTCAGGACATAGGCATGGGCAAAGACTTCATGACTAAAA
-CACCAAAAACAATGGCAACAAAAACCAAAATTGACAAATGGGACCTAATTAAACTAAAGAGTTTCTGGACAGCAAAAGAA
-ACTATGAGAGTGAAAGGGCAACCTACGAAATGGGAGAAAATTTTTGCAATCTATCCATCTGACAAAGACCTAATATCCAG
-AATCTACAAAGAACTTAAACAAATTTACAAGAAAGAACAATCCCATCAAAAAGTGGGCAAAGGATGTGAACAGACACTTC
-TTAAAAGAGGACAATTATGCAACCAAGAAACATATGAAAAAAAGCTCATCATCACTAGTCATTAGAGAAATGCAAATCAA
-AACCACAATGAGATGCCATCTCATGCCAGTTAGAATGGCAATCATTAAAAAGTCAGGAAACAAAAGATACTGGAGAGGAT
-GTGGAGAAATAGGATTGCTTTTACACTGTTGGTGGGAGTGTAAATTAGTTCAACCATTGTGGAAGACAGTGTGGCTATTC
-CTCAAGGATCTAGAACTAGAAATGCCATTTGGCCCAGCAATCCCATTACTGGGTATATACCCAAAGGATTATAAATCATT
-CTACCATAAAGACACATGCACACGTATGTTTATTGCAGGACTGTTCACAATAACAAAGACTTAGAACCAACCCAAATGCC
-CATCAATTATAGACTGGATAAAGAAAATGTGGCACATATACACCATGGAATACTATGCAGCCATAAAAAAGGATGAGTTC
-ATGTCCTTTGTAGGGACATGGATGAAGCTGGAAATCTTCATTCTCAGCAAACTAACACAAGAATAGAAAACAAAACACCA
-CATGTTCTCACTCATAAGTGGGAGTTGAACAACGAGAACACAAGCACACAGGGAGGGGAACATCACACACTGGGGCATGT
-TGGGGGTTGGGGGCGGGGGGAGGGATAGCATTAGGACAAATACCTAATATAGGTGATGGGTTGATGGGTGCAGCAAACCA
-CCACAGCACATGTATACCTATGTAACAAACCTCAGCATTCTGCACGTGTACCCCACAACTTAAAGTATAATAAAAACGTA
-GGTTAAAAAAAAGTATTACAGACACAGTATGATGCAAATCTTTGACTTGGCTAGCCTCAAGGCTTTTAAAAGTCTAAGAT
-TCCTTAGTAGAAAGTTCCAACAAAGCCAATTTTAAGAAGCCTATATGGTCAATAAATATTCTTGCTGCACTTTATGCAAA
-TAATCAGACCAGGTATGATAAGACTAAAACTTATTTTGCACAGAAATTTGTCCTACTATGGTTTGTCTTTGATAAAATGA
-TGGACTAGAGAGAGAAAATTCATGTTTCAAATGAAAACTGTGACATATGCTATTAGATTCCAGCCCTGATCATTCTTTTC
-CGAGTTTTTATTATTTGCCTATAATTTGGGCTGAATCCTGAATTATTTCCTGGCTCCAAGTGTTCCCTAGTGAACCCAGA
-TAAAATATATTTTTAAAAAACTTGTTTTATCCTGTCAGTAATGAGATGTATTTTTATAGGACTACTTAAACTAGCAATTA
-CAATTCGATTATTATGATTATAGAATCTCGGGATTTATCTTCCTTCTTGTCAAGGTCTTTACCTGATGTTTGTCTCATTA
-AAAAAAAAAAGAAATCAGACTGATTGCACTCTACTCAAGACTGAAGACATGTACTTTAACCTGTCTCTGTTACCAGTAAA
-CCAAAGCCTTAAATTTCAGAATCCGTCAGGGACCCTGTGTGGTCCCTGGATCAAGCACACATGGGCTTATGAATGTGTTG
-ACCGCTGGCATATGAGAGGTAATTGTCTATTAGGTTATGTGGCTCTTCCTCTTCCTATTTATAACTCCAATGTTTCTGAA
-CGCTGAAGTAGTTCATCGAAATTATTTTCCAGGATTAGACAAACCGTACCTGCAAACCAAGGAGATGAATTTTGGCCTAT
-GTTTGGCAGAAATCTCTTGCAATGGTGGGGAGTAACCTCTCATGAACGTATAATTAGAAATCTGTCAACCACTCTAGGTA
-ACTTAGCAAATGAACTAGCTGAAGCCATAGCTACCAAATAAAGATCTTCAGACTCTTTATTCAGGATAGTCATGGATGAC
-GGAATAACTTTAGGCTACATAGTGGTGAAACAGGGAGAAACTCATATGGCAGCTAGCTAACACTTCATGTTGTGTTTAGA
-TCCATACATCTTCTGAAGTTGAAACACGTGTAAAAAAATAAGACGATATGGGAATTAATTATGACAAATCCTAGGGAAGA
-GGCTGAAAGAGCTGTAACACAAACAGGGCTGAGACATGCCCCTTGCTCGCCACATTGTGGGCAAAGAGAAGGAAAGAAGA
-GCTATGGCCCTTTGGGGAGCCCAGACCTGGGAGCTCCCTGAGCCAGAGCTGTGATTCCTTCTTTGGGGCCTTTGGTTCCT
-GATATCTCCAAGCTTCTGGGTGCCACTGTGTTCCCAGTGTGCCAGCTGTGGAAGCTTCTTGAGGTGCCCGTGGTCCAGCC
-ACAGCCTTGTGGAGAGCTGGCGCCCGTGTTGGCACCTGGAGCTACCTGCTCCACTTCAGCAGCCAGCAAATCTGACTGCA
-CAGTGACCAGACCCCATGCTCACTCACACACCCCTTGCCACTCCATGCAGTCTCCCTTGGCAGGCATGGGATCCAACGTG
-GTAGCATGAGCAGAGCACAGCCTGCCAGGCTGAGTGTGCGGGGCCCAGCAAAACTCAGGCAAAGGTGCCACCAGTCATAG
-AGGTTTCTGTCCAGAAAAGTAACACCCCAAAGATCCCATAACACCGCTACTCTTCCCAGCCTCTGGAAACTCTCAGTCTA
-CTCTCTATCTTGATGAGTTCAATTGTTTTAATTTTTAGCTCCCACAAATGAGTGAGAACATGCGAAGTCTGTCTTTCTGT
-GCCTGGCTCATTGTACTTAACATAATTGTCCTCTAGTTCCATCCATGTTGTTGCAAATGACAGAATCTTATTCTTTTTCA
-TGGCCGAAGAGTACTCCATTGTGTATATGTACTACATTTTCTTTATCCCTTCATCTGTTGATGCACACTTAGGTTGCTTC
-CAAATCTTGGCTATTATGAATAGTGCTGAAATAAATATGGGAATGCAGATATCTCTTTGATATACTAATTTTCCCTCTCT
-TGGGTATATACCCAGCAGTGGGATTGCTGGATCATATGATAGTTCTATTTTTAATTTTTTGAGGGACCTCCATATTGTTC
-TCCATAGTGAATATATTAATTTACATTCCCACCAACAGAGTAAGAGTGTTCCCTTTTCCCCAAATTCTTGAAAGCATTTG
-TTATTGCCTGTCTTTTGCATAAAAGCCATTTTAATGGGGTAAGATGATATATTTTTGTTGTTTTGATTTCAATTTCTGTC
-ATGATAAATGATATTGAGCATCTTTTCATATACCTATTTGACATTTATATATGTTCTTTTTTGTTTTTGCTCATTTTTTG
-AGACAGGGTCTCACTCTGTCACCCAGGCTGGAGTGCAGTGGTATGATCATGGCTTAATGTAGTGTTGACTGCCAGGGTTC
-AAGCAATCCTCCCACCTCAGCCTCCTGAGTAGCTGGGACCACAGTCATGCATCACCATGCCCAGGTAGTTTTTAAAATTA
-TTTGCTATGTTGTTCAGGTTGGTCTTGAACTCCTGGGCTCAAGTGGCCCACCCGTCTTGGCTCCCCAAAGTTCTGGAATT
-ACATGTGTCAGCCACTGCGCCTGACCTGTGTGCCTTCTTTTGTGAACTGTCTGTTCAGATCTTTTGCCTATTTAAATAAT
-TGGATTGTTAGTTTTTTTCTTGTAGAGTTGTTTGAGCTCCTTATATATTCTGGTTATTAATCCCTTGTCAGTTATATAGT
-TTGCAAATATTTTCTTCCATTCTGTGGATTGTCTTTTCACTTTGTCCATTGTTTTCTTTACTGTGCAGAAACTTTTGAAC
-TTGATGTGATACCACTTGTTCATTTTTGCTTTGGTTGCCTGAGCTTTTGGAGTATTACTCAAGAAATCTGTGCCAAGACC
-AATTTCCTGGAGAGTTTCCCTAATGTTTTCTTTCAGTAGTTTCGTGTCTTTGATTTAAGTCTTTAACCCATTTGGATTTG
-ATTTTTGTATATAGTGCAAGAGAGGGTTCTAGTTTAACTATTCTGCCAATGACTTTGGGAGGCCAAGGTGGGCGGATCAT
-GGGGGCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACTCCGTCACTACTAAAAGTACAAAAAAAAAATTAGCCAG
-GCGTGGTGGTGGGCACCTGTACTCCCAGCTACTTGGGAGGCTGAGGAGGAGAATGGTGTGAACCCGGGAGGTGGAGCTTG
-CAGTGAGCCCAGATCGCGCCACTGCACTCCAGCCTGAGCAACAGAGCTAGACTCCATCTCAAAAAAAAAAAAAAATCTGC
-CAATGAATATCTAGTTTTCCCAGCACAATTTGTTGAAGAGACTGTCCTCTCCCCCATGTATATTCTTGGCACCTTCATTG
-AAAATGAGTTAATTGTAAATGTATGGATTTATTTCTGGGTTCTCTATTCTGTTCCATTGGTCTATGTGTCTGTTTTATGC
-CAGTACCATGGTGTTTTGTTTATAATTGCTCTGTACTATAATTTAAAGTCAGGTGATGTGATTCTTCCAGTTTTGTTCTT
-TTTGCTCAGGATGGCTTTTGGTATTCTGGGTCTTTTATGGTTTCATGTAAATTTTAGGATTTTTTTTCTATTTCTGTGAA
-GAAAGTTATTAGTATTTCAATAGGGATTGCATTGAATCTGTAGATTGCTTTGTGAAGTATGGGTATTTTAACAATATTTA
-CTCTTCCAATAAATGAACATGGACTATCTTTCCATTTTTTTTTTGGTGTCCTCTTTAATTTTTTTGCATCTATGTTTTAT
-AGTTTTCATTGTAGAGATCTTTCACTTCTTCTGTTATGTTTATTCCCAGTTATTTTATTTTATTTGTAGCTATTGTAAAT
-GGGATTACATTCTTGATTTTCTTCTTTAGATTGTTCATTTTTGTCATTTAGAAATGCTACTGACTTTTGTAGTTTGATTT
-TGTATGCTGTGACTCTGAATTTGTTGATCAGTTCTAATAGTTTTTTGGTGGAGTCCTTAGGTTTTTCCAAATATAAGAGC
-TAATCATCTGCAAACAAGAAACAGTAATAATTTTACTTCTTTCCAATTTGGATCCCTTTTATTGTTTTTCTCTTGTCTGA
-ATTGCTCTAGCTAGGACTTCCAGTACTATGTTGAGTAACAGTGTTGGAAGTGGACATTCTTGTCTTGTTCCAGATCTTAG
-AAGAAAGGCTTTCAGCTTTTCCCTGTCCAGGATGATACTGGCTGTGGGTCTGTTGCATATGGTTTTCATTGTGTTGTGGT
-ATGTTCCTTCTATATCTAGTTTTTTTTGAGGGTTTCTTTTTATCACAGGGATGTTGAATTTTATTAAATGCTTTTCAGCA
-TCAATTGAAATTATCATATGGTTTTTGTCCTTCATTCTGTTGATATGATGTGTCACATTGATTGATTTGCATACATTGAA
-CCATGTTGGCATCCTTGGGATAAATCCCACTTAGACATGATGAATGGTCTTTTTCATAGGATGAGTTTGGAAATACTACA
-GCCTTCTCTGTTTTTTTTGAATAGTTTGAGTAGGATTGATAGTAATTCTGCCTTCAATGTTTGGTAAAATTAATCAGTGA
-AGCCAGTGAAGCCATTGAATCCAGGCTTTTCTTTGCTAGGACATGTTTTATTAAGGCTTCAATTTCATTTATCCATTTCT
-TCTAGGTTTTTTTTTTTTTTGAGATGGAATCTTGCTCTCTCACCCAGACTGCAGCGTGGTACAATCTCAGCTCACTGCAA
-CCTCTGCCTCCCAGGTTCAAGTGATTTTCCTGCCTCAGCCTCTAGAGTAGCTGGAAGTACAGGTGCATGCCACCATGCCT
-GGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTGACCAGGCTGGTCTTGAACTACTGACCTCAGGTGAT
-CACCTGCCTTGGCTTCCCAAAGTGTTGGGATTACAGGCATGAGCCACGGTGCCCAGCCATTTCTTCCAGGTTTTTCAATT
-TATTGGAATATAGTTGGTCATAATAGTTTCTAATGATTCTTTGAATTTCCACAGTATCAGTTATAGTGTCTCCTTTTTAA
-TCTCTGGTTTTATGTATTTGAATCTTCTCTCTTTTTTCTTAGTCTGGTTAAGTGTTTGTTGATTTTGTTGGTCTTTTAAA
-AATATTAACTTTTCATTTCATTGATATTTTATATTTTTAAATTTCAATTTCATTTATTTCTGCTCCGATCTTTGCTATGT
-TTCCTTCTACTAATTTTGGTTTTGGCTTGCTCTTGCTTTTCTAATTATTTAAGATGCATTATTAGGTTGTTTATTTGAAG
-CTTTTCTACTTTTTTTGATGTAGGTGCTTTTATCTATAAACTTACCTCTTAGTACTGTAGTACTGTTTTTACTGTATCCC
-ATAGGTTTTTTTTTTTTTTTTTTTTTTTTTTTTGTTTTTTTTTTTTTTTTGAGATGGAGTCTCGTTCTGTTGCCCAGGCT
-GGAGTGCAGTGACGCGATCTCGGCTGACTGCAAGCTCCGCCTCCCAGGTTCACACCATTCTCCCGCCTCAGCCTCCCGAG
-TAGCTGGGACTACAGGCGCCTGCCTTCACGCCCGGCTAATTTTTGTTTTTTGTATTTTTAGTAGAGACGGGGTTTCACCG
-AGTGCGCCCGGCCTGTACCCTAGGTTTTGGTTTGACTTTAAACTTTTTCTTTTCTCGAAAACTCAGTGTCATGGTACCGG
-CTTCTTGTGCTTTGGGCAGTGAGACCCTTTTACTTGATAACAGTGGTAGCTGGGACAAGTTGGCAATGTAAATAAATAAA
-CAACATCTAGATTGGAAAGGAAGAAGTACAGTTATCTTTATGTACAGATGACATGATCTTGCATTTAGAAAATCGTAAGA
-AATTTACTAAAAAGTATTAGGACTCATGAACAAACTTAAGAATGTAACACTATATAAGATTGGTATACAAAAATAACTGT
-ATTTCTTTACCAATAAATCAAGAATCCAAAAATGGAATTAAAAAAATAAATCTTGTTACAATAGAATTAAAGCTGGGGAA
-GCTTAAACTTGAACACTAAAAACTACAATACATGGTTAGCGTTGGAAACACCCAGATACCATCCCTGAGCCTTCTCTCCT
-TGGCTCTGAGGGCTTTACCTTCACGGGGTGAGGAAAGGGGTTGCATTCTTGGCTTTTACATTATATTAGGTGGGTTCGGG
-TTGAGGTATCTGCAATTCAAATGAGTATTACAATCTCTACTTTTATGGATAAGAGACTGAGGCCCACCAAGAGAGGGAAT
-GACAGTCCATATCCTGGAAGGCGAATTGTCAGGCACTGATTTCCGCTATTTAACCCCTGCCAATCATCATGTATTTAAAG
-GATCCCCAGATACCATACCAATAGGTGTTCAAGAGAGAGGCCTGTAATCTAGGCGTCTGAGAAAACAAGGCTAGAGATTC
-CAATATTGGAGACAACAGGGCTCTGGGAAGATTAAGGTTGAGTTTTCTGGATCTGCAGAATAGAGTCACTGAGGACCAAT
-TGCAAGATCAGAGGAGATGAAAGAACAAGTCAGGGCATGCTTAGGAAAAGAGAATACCAGGGATAGGTTTTAGGCAAGAG
-TCACACTGAGGAAGGGCAGGTTCTTGGCGTCGTTTAGGAAGAAATCCAAAAGCAAGCCTGTGGTGGAAGAAAGCAGCTCT
-ACGGAGGCATTGGCGGTGTTACAGCACTGCGTCCACTCCGGCAGGGCAGGGAGCCCTCCGTGGGTTGTGCTCCCAGAGCA
-GCAGCCTAGGGGTGGCTTGTAGTCATTTTTATAATTCACTTTTAATGGCATGCTAATTAAGGGGCGGGTTATTCAGAAAT
-AGCTAGAAATGGGCAGTAACTTCCATCTGTTTCCATGGCAAGGGGTGGGGACTTCTCGTGATGACATGGCATTGGCAAAC
-TGTCATGGCACTGGTGGGAGCGTCTTCTGGTGATCTGAGGCGTGAGGTGCTTTCGCTGCCTCTCCCAGGTTCCTGCGTGC
-CTCTTACCTGAAAGCCCATCACACCCCCATCTGCCCACCTACAAACGTCACTGCCCTTTCACCCCATCCCCGTTTCACAC
-GCACTCCCACATCAACCCTGAGCATTCAAGCCTGCGTTTCCCTGTTAGGAACCTCGGTGGTAGCCGGAGCTCTGAGAAAC
-CCCTAGGCAGAACTCCTTGCCTAGTTTGTGGCAGACATCAGGGAAGGAAAGGCAAATTTCAGGTCTTTCTCACAATAAAT
-AAATAAAGATAGGTAGATTTGATTGATGGATGGATGGATGAAACCTGGGAGTCTACGGGCAAATATTTATCAGACACTGG
-AAGTGTAAGTTGTCACAAAGATTATGGAGTGCACCTGTCTTATGACCCTGTTATTTTATCCTAGTATGTGCACTAGAGCA
-TATTTTCTAACAGTGTAAATTGAAGGCTCACAAATTAGTTTAGTGAGAGAAAAGATAACGGATTGGAAGAGAATTACCAT
-ATTCATTAGTTGTGTTTTAAAATTTTTAAAGTAAAATAGAGACATTATTTTTTTCATGCTTTCGAATGCATCTATAAAAA
-ATAGACTTGAGGGCTGGGCGCAGTGGCTCACGCTTGTAATCCCAGCACCTTGGGAGGCCGAGGAGGGCGGATAACGAGGT
-CAGGAGTTGGAGACCAGCCTGACTAACATGGTGAAAACCCGTCTCTACTAAAAATACAAAAATTAGGCGAGTGTGGTGGC
-ACGCGCCTGTAATCCCAGGTACTTAGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAAGCGGAGGTTGCAGTGAGCC
-GAGATCGCACCATTGCACTCCAGCCTGGGCGACAGAGTGAGACTCCTTCTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAACTTATTCATAGCATAGACCAATTGGCCTCTATTGAAATTTCTCCATTATTTTCACAATGTCCCAGGCTG
-TGAAACCAGGATTTAATAAAGAACCAGAATGCCACATCTGTGTCACCTGGGTAGGGACCAGTCCTGATACATTAACTCCG
-GGTCTCTGGGTAACTGGACTCAACTGCTGGGCAAAACAGAATGTCCGGCTTGGGTTCCTAACGGGGTACCGCAAAGCCTC
-ATGGGAATTGTAGTGTCACCTTCCAATGATGTTACCATCAAGGACCTTGGGAACCAGCTTTTCTCTCTGCGCTTGCGCCG
-CCCGGCCCACTCCGCCATTTTCCTCCGGAAGTGCGGCACCCAGAGGCCGTCCTGTAGCCGGGCCGGCTTGGGGCTTGGTT
-CTATGTCCCTGCGGGTCGGTGCAAGGGCGAAGAGGAACCCGTGGGCCTCAGGGGATCCCGGGGGGCCGGACCAGTGTTCC
-CTAGTTGTGGGAGCAGACGCGTGGGCACATTGCGGGCGGGCAGGGCCTGAAGTGCAGGTGCGGGCAGTGGACCCTGGCGG
-GGGCTGGGAGGACAGGCGTGGGGTCCCGGCAGTGAAACGGGTTCTAGAGGCGCAGGAGCAGGTAGGAGAGGCCGGTGGCC
-CTGGGCCCGGAGTCTGCAGGCCGCGCTCCTGTCCTGCCGCTGAGGGACCCGGTTACCAACCTGCATGACGCTCAGTTTGC
-CCATCTGTCCCAGTGGTAACACACAGTTCTCGGGAGACGTTCCCCATTCCCAGAGGAGTAGTGTGAAACGCGTGCGCCTC
-TAGTCTTAAACTTGGCGTTTGTATTAGTTGGGTTTCCTGGTGTCTCTTTAGCAAGTGAAGTTTCTGGTTCCCTCCTTCAC
-TGTGTGACCTGCCTAGTCCTCCTGGGTCGCATTTACAGAAGTTTATACGAGACCTAGTTTCCAGGGAAGAACTCACTGAT
-TCCGCGAGGGAGATGGCTTAATGGATGATGGTCGTCAGCCTTAAGGATACTTCAGTCTTAACTGTGTGTTACAAAGTTTG
-AAAGGGAGGGTTCCCTATGAATAAGAAGCACACTTGAAAGAACAGCCATCTGGTCTAACCTCTCACTGGTGCTTCAGAGG
-AGGAAAAAAGGTCACAGGTGAAGATCCCAGTTTTCCTTGCTCAGGAAATATTAATTCTACTCCCTAGAATGCACAAGATT
-TGCAAAGACTAGGTGATAGTAGAAGGTTTGGACGAACTTTCAGAAGGTTGAGGTGAATTCAGCTAAGAAGAACAGGCAAG
-GACTTAGGAAATATTCCTTATTTGAAGGGGCCTGAAAGTGTGGTCTGGGGTACAGCAGTGACCTGTCATACTTGAGAGGA
-TTAAAATACTCTCCAAACACAGTCCCATTCCTTCAACCTTAGCTCGTTTTTTCCAGCGTCTGAGATACATTAAACCTAGT
-CCATCCCCAAATTTAACATTAGATTGCGAAGTTCTATTGATTGTATTTGATTTGTAATTTAACATTTTCTCCCCCTACGT
-AATTTTGTTAAAAACACAGAAGTGAATTCTGTTCACTTAGGTGTAACAGTTAATACTTGCTGTTTAAGGAACTAATTAAA
-CCTTACTGGCTTATAAAAAACAACCACCATTTTATTTGTTCGAAGTTCTGTGGATCTGCACTTTGGTGTGGTGGGTTCAG
-CTGGGTAGTTAATATATTTGTGTTGCCTGGATCACAAAAAGGCCTCAGTCACCTGGTGCCTTGACTGAGCCTGGTTGGTT
-TAAGATAGTTTACTTCACAATCTGGTGGTTTGTGGTGACTCTTGGCTAGGCCCTGTGTCTCCAACAGGGTAGCTCCAGAC
-TTCTTCACAATTTCCCCCAAAAAGGAAAGAACCAATGGATATTTGCATCACATTTTCCATTTTCCATTCACTGGACAAGT
-CAGATGGAAAAGCCCAATTTATTGTCAGAGCATAATATGAGGGCTTGGATAGAAGGAAAGGTGTTATTGGGAAACATGAG
-TAGAATGGTGTACTGCAGGAAATACATATTATGTACATTTTAAAAAACGTAATTGTAGGCCAAAATTGCTGGTTTGCAAG
-ATGCACTTTCCATGATGTTCAGGTATAGAAAAGCAAGATGTACTGTCATAGGAACACTCATATGAAGTTATTTGTGGAAT
-CTACATATTAATAGGAAAATAGTTAATACAGCCCAGTATATTTCTATAACATTTATTTTAGTGAACTTATAATGTTTCTT
-TGTATTAAATTATTAGATTATATCTTTAGATAATATTGTTACTAAATTAGTAGGTAATATATATTTTTATTCAAAAATAA
-ATTGTGCATCTAATGTCTACCAATTAATGTACTTGTAGATGTATCTTATCTTAACTTGAGTCTTTGCTGCCCCTAATGAG
-GTGTGAAGGACTCTTCTCCCCTGGGGAAGTTTTTCTTTTTCAGGAGGGAGGAGGGCTTTCCCAGGTAATGTGTCTAGAGT
-GTTGGGCAGAAGAATCTGGGACCACACCACACCAGTTCTCTCCTTAATCCACGTCATTTGCCTTCTATCCCAGCTATGTT
-TCCAGTGTCCTCTGGGTGTTTCCAAGAGCAACAAGAAATGAATAAATCTCTGGTGAGTTGTTTATTTGTTCTTCACTTTG
-TTTTACACTGTATTTTCTGAGTTTATGGGTGTCTGTGAATTAAAAAGGAAAAGTAGAAATAAGTAAAACTCAGGTTGAAG
-GAAATATACATAAATAAGATAAAGCTGACCTGTAGATATAGGCAGGTTATAAGAGCTTAGAGTTGTCTAAGTTGAGTGCA
-AATTTTCCTCTGATCTTTCTGATGCCGAGACAAAAAAGGCAGTCATGTTTGTTATGTGATTGGAATGGAACCCGAGAAGA
-GAGCATGCTGTGTTCTTGTGGGACAGGAAAGCTTGCGTGCACCAAGTCTGAACCACCACCTTCATTGGTGACATAGATTA
-TGTGCTGGAACATATTTCACACCGGCCTGGCAGTAAACACTTGTAGTGTTGTGCAGTGGAAACGGTCATCTTCCGCTAAA
-GCACGGCGTGTTGTGCAGCGGAAATGGTCATCTGCTGCTAAAGCACAGCTTCCATCGTAATGTATGCTCCTTGCTCAAAG
-AGTGTGGTCCCAAACAGCCTTTGGGAGGTCCTCCTTGATTCATGGATGAAACCTGGAACATCTTGAGGACTGAGTTAACC
-ATAGGTCCTTAAATAACTCTCCACACGTTTTTCTTAGTTTATCTCTACATGCAGGGTGTGCAGCAGCCTGTTCAAAGTCA
-TATTTTCTGGGAAATATTTCCAGTGTTTATTTGCACTTTAGCCCACTCTGTGTAGCCTTATTTCTTCTAAACTCACCATT
-AACCTGAATAATAGTCAAATTTAGGGGGACTGTATTTGCCTTACTTGAGTCTTCTACCATAGTTGAAACTGTCGTACCCG
-AGTGAGTTAGAGAGAAATGCCACGCATTGAGACGAATTCAGGAGTCCTTTACTAGCCAGCGACTGAGACATGGCTAACGC
-ACGAAATTCTCTCGGCCCTGAAGAAGGGACTAGATTTTCTTTTATACTTTGGTTTAGAGAGGGGAGGGGGGATTCTAGCT
-GCAACAACTTTACAGAAGAAAAAAACAGACAAAAAACTTAGAAAAACAGATGGTTACAGGAAAACAAACTGTTCCTGGTG
-TAGGGTCTTTAAATTCACCACAAAGTGATAGGTGAGGGGGCTCTGGGCATTATCTGCCGGACAAATGTGGGGGCTTTATG
-ATACTATCTCTGAGTAAATTGCTGGGAACTGGGGACATCTCTTGTCTCAGCACTTTATCAGTTATTTGCACGCTTTGATA
-TGTTGAAAATCAGCTTGCACAAGTTAAAGTCCTTGAGGAAAGGGGGTGGGTAAGGAGTCCTTGATGTCTTGTTAATGAAG
-GAGCCAAATGGAGTTTGTCTGGTTTTCTCAGCTAAGGGAGAGTCTATTCATATTAAAAACAAGGTTAGCTGTCTAAGGAA
-GAGTCTATTCATGTTAATACAACGTTGGGTATTACAAAACGTCTGTTCATGATCTGGAAATTCTTCTGTGTTAGTTCTGT
-TAAAAGAAAAACTTTAAAGGAGTTTAATTTAGCAATAAACGATTCATGAATCGGACAGTCCCCAGAATCACAGCAGATTC
-ACAGAGACTCCAGTGCAGTCATGTGGTGGAAGAAGATTTATAGACAAAAGGGAAGTGGCATACCGAAATCGGAAGTGAGG
-TACAGAAACAACTCAGCGTTTGCCTTGTTTGAACACATTTTGAACATTTGGCAGTGCCTGAGTGGTTGAAGTTTGGCCAT
-TGGGATTGGCCAAGATGTAGCTGTTGTTCCAGGTGCATACTCTTAAGTTAGTTTTTCATTCTTGTATACCTATTAAGGTA
-GGTTGCAGTTCACCCACAAGGACTCATATATAGAATTATGGAGTCCTTCTCAGGCCATACTTAGTTCACTTTAACAATGC
-CTTCCCTTTGGTTATTTTCTCAATTTTGAGAGATTGGCCGAAACTTCAGTCACTGGTGTCACTATTACCATTGCAAATGT
-ACTTACTTGGTTTAGAAACCCACTGGGAAATAGACCAGTGAGATTTGAAAAGGTGGAACAAGGACTTGAGTAGAAGGTAT
-CTTCTTATGCTGGAACATCCTGTTTACAGGAGAAAAACAAAACCTGGTTTGTTCTAGGATTTATGTGTTTCCCTAAAGTC
-TTAGTTTGATTATGTTACATTTAGCATGAGTGACTCCATTTTGGTTTGGTTTGGTTTGGTCTGTTGGGACCTATTGCATG
-AGCTTAGTTCAAAACAATGGCCTCCCATAATTTTGCTTTAAAAATTCCTCCTTTTTGCTGGGTGTGGTGGCTCACACCTG
-TAATCCCAGCACTTTGGGAGCCTGAGGTGGGCAGATCACGAGGTCAGGAGATTGAGACCATCCTTGCTAATATGGTGAAA
-CCCCATCTCTACTAAAAATACAAAAAATTAGCCAAGTGTGGTGGCGGGTGCCTGTATTCCCAGCTACTCAGGAGGCTGAG
-GCAGGAGAATGGCCTGAACCCGGGAGGCAGAGCTTGCAGTGAGCCAAGATCATGCCACTGCACTCCACTCTGGGGGACAG
-ACCAAAACTCTGTCTTAGAAAAAAAAAATCCTCCTTTTCAGTCAAGTTCTCACTTAGTTGAGAGTGTGACCAAAATGTAG
-GGCCTTAGCATCACTCTTAGTTACCATTGTTTTGGGTTCCAGTTTTAGCATGTCATTCCCATTGTTTTGGGTTTCTGGTT
-TAGCACATCACTCCCATTGTTTTGGGTTCCGGTTTTAGCACGTCATTCCCATTGTTTTGGGTTTCTGGTTTAGCACGTCA
-CTCTCATTGTTTTGGGTTCCTGTTTTAGCACGTCACTCCCATTGTTTTGGGTTCTGGTTTAGCACGTCACTCACATTGTT
-TTGGGTTCTGGTTTTAGCACCTCACTCCCATTGTTTTGGGTTTCCAGGTTTTAGCACGTCACTCCCATTGTTTTGGGTTT
-CTGGTTTAGCACGTCACTCCCATTGTTTTGGGTGTCTGGTTTTATCACGTCACTCCCATCGTTTTGGGTTTCTGGTGTAG
-CAGGACACTCCCATTGTTTTGGGTTTCTGGTTTTAGCACTTCACTCCCATTGTTTTGGGTTTCTGGTTTAGCAGGACCCT
-CCCATTGTTTTGGGTTTCTGGTTTTAGCATGTCACTCCCATTGTTTTGGGTTCCGGTTTTAGCACGTCACTCCCATTGTT
-TTGGGTTCCGGTTTAGCACGTCATTCCCATTGTTTTGGGTTCAGGTTTTAGCACATCACTCCCATTGTTTTGGGTATCTG
-GTTTTAGCATGTCACTCCCATTGTTTTGTGTATCTGGTTTTAGCACCTCACTCCCATTGTTTTGGGTTTCCAGGTTTTAG
-CACGTCACTCCCATTGTTTTGGGTTTCTGGTTTATCATGTCACTCTCATTGTTTTGGGTTTCTGGTTTAGCAGGACGCTC
-CCATTGTTTTGGGTTTCTGGTTTTACACGTCACTCCCATTGTTTTGGGTTTCTGGTTTAGCAGGACACTCCCATTGTTTT
-GGGTTTCTGCTTTAGCGGGTCACTACCATTGTTTTGGGTTCCGGTTTAAGCACATCACTCCCATTGTTTTGGGTTCCGGT
-TTTAGCACATCACTCCCATTGTTTTGGATTTCTGGTTTAGCAGGTCACTCCCATTGTTTTTGGTTCTGGTTTAAGCACAT
-CACTCCCGTTGTTTAGGGTTCTGGTTTTAGCACCTCACTCCCATTGTTTGGGTTTCTGGTTTTGCAGGTCACTCCCATTG
-TTTTGGGTTCCAGTTTAAGCACATCACTCCCATTGTTTTCGTTTCCGGTTTTAGCACGTCACTCCCATTGTTTTGGGTTC
-CAGTTTTAGCAAGTCACTCCCATTGTTTTGGGTTTCTGGTTTAGCATGTCACTCCCATTGTTTTGGGTTTCCAGTTTAGC
-ATGTCACTCATAGGTTATGGTGGCCTTATGGTTGCACATTTTTTTTAATCTCTTGTCATTCCAGTTGAAGAGATACCATT
-TGACATTTTAGAGATGGCTGCATGCAAACTCTTGAAACATTTGAGTAAGTACAGTACACCAGGGAGACTCTTATGACTAT
-TGGGATAACACCAAGATGTGGTATATGCTCCTTACTCAGGGTCCCCATAAATCAAACCACCAAAAATCAAATAGATTAAA
-GAATGAATTAGATAAAGGGTTTACTTGCTTAACTAAGTGGTTTTTTTTTGTTAATTCCCTACAACCAAATCTTTATAATA
-CCCCATGTTTTCTCCACATGCTGTAAGTGTTAGCAGCTGCACAGATACTTAAGATAAGAGTCTCATGATAGTAGAGAAGT
-CTTGATCTGTGATCTTGGGAAAAGCTGTTCACATTAAGGATGCCATCTTCTTCTGGGGGGAACTGTCCGTGTTAGCTTTA
-CCTTAAGGGTTCCAATAGGCATATGGTTCTGAGTGTGGAGGGACCCTTCTGAGTTGTGAGACTATGAACCCAAAGTTTAA
-GGTTTTAAAGTTTTGTTGTCATGTGGATGGCGAGGGCAGTCCTTCTCTGATGTTCTCAGAAGATCCAGTCATCAGATTCT
-AGATTTTGAAGGGTTTGACTGTCCTCAGTGAACCATAAAAGGCTTTCTTTACCTGGTGAAAATACACTTCAGGGTAATAA
-TCTACTGTTTTAACATCAACTCTCTCGCATGGAAGAGCTTTTATACAATCAGAAAACATGCACTGAAAATGACAACTGAA
-TGAAATCCCTTTATAAAATGTTTAAATGGCCCATCAGATAACCAAATGTACCTAAAGTTTTGATTGTTTTCCTAGGAATA
-TAGGTTTCACAAACCAAACATTGGTTATAAACTATTTTAGCAGTTTAGAAATCACCACACCAATATATTTAATTTGGATC
-GTTTTCTCTTTCTGTGATGAGTTATGGAATGCAGAACTTTTAATAACAAAAGTTTTTAGGACTTAAGAAGGATAAGGTGG
-CCATCCTGGTTCTTTATAGGTCTGTGCTTAATTAACATCAGACTTACATCCTCTTGAATACCAGCTGTTTCTCCAAATTA
-GGTGCATGGCACTGGTAACTGATGAGTAGTTATAGGTAATTTGATTTAGACCATGGAGTTTATTTAAATTATATATCTAA
-ACAATTTCAATATTGGTGATTTAGCATGAAAATGTGGCATAATATTTCCTTGGTATACAATTTTTGTTTTACTTGGGTTA
-GCAGTTTTACAAACCAGTTGGTCTTTTTATTAAATTTTTGATATTTTTTTTTTTGAGACAGAGTCTCACTCTGTTACCTA
-GGTTGGAGTGCAGTGGCACAATCTTGGCTCACTGCAACCTCTGCCTCCTGGGCTCAAGCAATTCTCTTGCCACAGCCTCC
-CGAGTAGCTGGGATTACAGGCACATACCACCACACCCAGCTAATTTTTGTATTTTTAGTAGAGGTGGGGTTTCACCTTTG
-GCCAGGCTGGTCTCAAACTCCTGACCTCAAGTGATCCACCGGCCTTGGCCTCCTAAAGTGCTGGGATTGCCGACATGAGC
-CGCTGCACCCAGCCTAACTGTTGAGAATTCTTAGCCAGTCCAATTCTTGGGGTATCGGGGAACTTATGGGGAATTTTTAC
-CCATGATATTAAAGTTATTAGAAATCTGTGTTCACGAGTGTTTTTCAGGGTCATTTTCATTCTTTCATGAATCTTCTAAG
-AGACACCATACTCTAGAATTTTGCATGCTTGTGAAGTTTTTAGAAACTGCATCACTATTAAGCAATTAACTGTGAAATGA
-CTTTAGTTATAGTTAAAGACAATTGACAAGGAAATTTGGTTATTTCTGTGGTCTACAATAACTTAATAACCATAATTAGG
-GTGGATGTGGTGGCTCATGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGTGGAAGGATCATGAGGTCAGGAGATCGTGA
-CCATCCTGGCTAACACGGTGAAATCCATCTTTACTAAAAATACAAAAATTAGCCTGGCATGGTGGTGGGTGCCTGTAGTC
-CCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGCATGAACCCGGGAGGCGGAAGTTGCAGTGAGCCGAGATTGCGCCACT
-GTACTCCAGCCTGGGTGACAGAGCAAGACTCCATCTCAGAAAAAAAAAAAATACAAGAATTTTAGAAATCCTACACAATT
-TTAGAATGGATTGATGACACACACTAAATATAACCTGAGGAAGGTTCCACATTATTTTTTATTTTGACAGTGCTACCCAT
-GTGACTTAACATGTTAAATAGTCCTGTTTACCTCTCTTTTGGGTGCTTCAGGGGTCTCTGTAGTATCCCAAAATTAGAGG
-TCAGAAAAGACAATTTTGAAGTTGAAATTTGATTTTGGGAAGCCTATTAAATATATTAAAGGTTTAAACACTTGATGTTA
-TGAAATAGAATTCCACGTCACCGTAAGTCATTCATTTACCAAAAATCATGACAAAAAATTTTTATTATTTTTTTATTTTT
-ATTTTTTATTATACTTTTAGTTTTAGGGTACATGTGCACATTGTGCAGGTTAGTTACATATGTATACATCTGCCATGCTG
-GTGTGCTGCACCCACTAACTCGTCATCTAGCATTAGGTATATCTCCCAATGCTATCCCTCCCCCCTCCCCCCACACCACA
-ACAGTCCCCAGAGTGTGATATTCCCCTTCCTGTGTCCATGTGATCTCATTGTTCAATTCCCACCTATGAGTGAGAATATG
-CAGTGTTTGGCTTTACGTTCTTGCAATAGTTTACTGAGAATGATGATTTCCAATTTCATCCATGTCCCTACAAAGGACAT
-GAACTCATCATTTTTTATGGCTGCATAGTATTCCATGGTGTATATGTGCCACATTTTCTTAATCCAGTCTATCATTGTTG
-GACATTTGGGTTGGTTCCAAGTCTTTGCTATTGTGAATAATGCCGCAATAAACCTACGTGTGCATGTGTCTTTATAGCAG
-CATGATTTATAGTCCATTGGGTATATACCCAGTAATGGGATGGCTGGGTCAAATGGCATTTCCAGTTCTAGATCCCTGAG
-GAATCGCCACACTGACTTCCACAATGATTGAACTAGTTTACAGTCCCACCAACAGTGTAAAAGTGTTCCTATTTCTCCAC
-GTCCTCTCCAGCACCTGTTGTTTTCTGACTTTTTAATGATTGCCATTCTAACTGGTGTGAGATGGTATCTCATTGTGGTT
-TTCATTTGCATTTCTCTGATGGCCAGTGATGATGAGCATTTTTTCATGTGTTTTTTGGCTGCATAAATGTCTTCTTTTGA
-GAAGTGTCTGTTCATGTCCTTCGCCCACTTTTTGATGGGATTGTTTGTTTTTTTCTTGTAAATTTGTTTGAGTTCATTGT
-AGATTCTGGATATTAGCCCTTTGTCAGATGAGTAGGTTGCGAAAATTTTCTGCCGTTTTGTAGGTTGCCTGTTCACTCTG
-ATGGTGGTTTCTTTTGCTGTGCAGAAGTTCTTTAGTTTAATAAGATCCCATTTGTCAATTTTGGCATTTGTTGCCATTGC
-TTTTGGTGTTTTAGACATGAAGTCCTTGCCCATGCCTATGTCCTGAATGGTAATGCCTAGGTTTTCTTCTAGGGTTTTTA
-TGGTTTTAGGTCTAACGTTTAAGTCTTTAATCCATCTTGAATTGATTTTTGTATAAGGTGTAAGGAAGGGATCCAGTTTC
-AGCTTTTTACATATGGCTAGCCAGTTTTCCCAGCACCATTTATTAAATAGGGAATCCTTTCCCCATTTCTTGTTTTTCTC
-AGGTTTGTCAAAGATCAGATAGTTGTAGATATGTGGCATTATTTCTGAGGGCTCTGTTCTGTTCCATTGATCTATATCTC
-TGTTTTGGTACCAGTACCATGCTGTTTTGGTTACTGTAGCCTTGTAGTATAATTTGAAATCAGGTAGTGTGATGCCTCCA
-GCTTTGTTCTTTTGGCTTAGGATTGACTTGGCGATGTGGGCTCTTTTTTGGTTCCATATGAACTTTAAAGTAGTTTTTTC
-CAATTCTGTGAAGAAAGTCATTGGTAGCTTGATGGGGATGGCATTGAATCTGTAAATTACCTTGGGCAGTATGGCCATTT
-TCAAGATATTGATTCTTCCTACCCATGGGCATGGAATGTTCTTCCATTTGTTTTTATCCTTTTTTATTTCCTTGAGCAGT
-GGTTTGTAGTTCTCCTTGAAGAGGTCCTTCACATCCCTTGTAAGTTGGATTCCTAGGTATTTTATTCTCTTTGAAGCAAT
-TGTGAATGGGAGTTCACTCATGATTTGGCTCTCTGTTTGTCTGTTGTTGGTGTATAAGAATGCTTGTGATTTTTGTACAT
-TGATTTTGTATCCTGAGACTTTGCTGAAGTTGCTTATCAGCTTAAGGAGATTTTGGGCTGAGACAATGAGGTTTTCTAGA
-TATACAATCATGTCGTCTGCAAACAGGGACAATTTGACTTCCTCTTTTCCTAATTGAATACCCTTTATTTCCTTCTCCTG
-CCTAATTGCCCTGGCCAGAACTTCCAACACTATGTTGAATAGGAGTGGTGAGAGAGGCCATCCCTGTCTTGTGCCAGTTT
-TCAAAGGGAATGCTTCCAGTTTTTGTCCATTCAGAATGATATTGGCTGTGGGTTTGTCATAGATAGCTCTTATTATTTTG
-AAATGCGTCCCATCAATACCTAATTTATTGAGAGTTTTTAGCATGAAGCATTGTTGAATTTTGTCAAAGGCCTTTTCTGA
-ATCTATTGAGATAATCATGTGGTTTTTGTTTTTGGCTCTGTTTATATGCTGGATTACATTTATTGATTTGTGTATATTGA
-ACCAGCCTTACATCCCAGGGATGAAGCCCACTTGATCAAGTTGCATAAGCTTTTTGATGTGTTAATGGATTCGGTTTGCC
-AGTATTTTATTGAGGATTTTTGCATCAATGTTCATCAAGGATATTGGTCTAAAATTCTCTTTTTTGGTTGTGTCTCTGCC
-TGGCTTTGGTGTCAGAATGATGCTGGCCTCATTAAATGAGTTAGGGAGGATTCCCTCTTTTTCTGTTGATTGGAATAGTT
-TCAGAAGGAATGGTACCAGTTCCTCCTTGTACCTCTGGTAGAATTCGGCTGTGAATCCATCTGGTCCTGGACTCTTTTTG
-GTTGGTAAGCTATTGATTATTGCCACAATTTTGGCTCCTGTTATTGGTCTATTCAGAGATTCAACTTCCTGGTTTAGTCT
-TCGGAGAGTGTATGTGTCGAGGAATTTATCCATTTCTTCTAGATTTTCTAGTTTATTTGCGTAGAGGTGTTTGTATTATT
-CTCTGATGGTAGTTAGTATTTTGCTGGGATTGGTGGTGATATCCGCATTATCATTTTTTATTGCGTCTATTTGATTCTTC
-TCTCTTTTTTTCTTTATTAGTCTTGCTAGAGGTCTATCAATTTTGCTGATCCTTTCAAAAAACCAGCTCCTGGATTCATT
-AATTTTTTGAAGGGATTTTGTGTCTCTATTTCCTTCAGTTCTGCTCTGATTTTAGTTATTTCTTGCCTTCTGCTAGCTTT
-TGAATGTGTTTGCTCTTGCTTTTCTAGTTCTTTCAATTGTGATGTTAGGGTGTCAATTTTGGATCTTTCCTGTTTTCCCT
-TGTGGGCATTTAGTGCTATAAATTTCCCTCTACACAGTGCTTTGAATGCGTCCCAGAGATTCTGGTATGTTGTGTCTTTG
-TTCTCATTGGTTTCAAAGAATATCTTTATTTCTGCCTTCATTTCCTTATGTACCCAGTAGTCATTCAGGAGCAGGTTGTT
-CAGTTTCCATGTAGTTGAGCAGTTTTGAGTGAGATTCTTAATCTTGAGTTCTAGTTTGATTGCACTGTCATCTGAGAGAT
-AGTTTCTTATAATTTCTGTTCTTTTACATTTGCTGAGGAGAACTTTACTTCCAAGTATGTGGTCAATTTTGGAATAGGTG
-TGGTGTGGTGCTGAAAACATGTATATTCTGTTGATTTGGGGTGGAAAGTTCTGGAGATGTCTGTTAGGTCCGCTTGGTGT
-AGAGCTGAGTTCAATTCCTGGGTATGCTTTTTGACTTCCTGTCTTGTTGATCTGTCTAATGTTGACAGTGGGGTGTTAAA
-GTCTCCCATTATTAATGTGTGGGAGTCTAAGTCTCTTTGTAGGTCACTCAGGACTTGCTTTATGAATCTGCATGCTCCTG
-TATTGGGTGCATATATATTTAGGATAGTTAGCTCTTCTTGTTGAATTGATCCCTTTACCATTATGTAATGGCCTTCTTTG
-TCTCTTTTGATCTTTCTTGGTTTAAAGTCTGTTTTATCAGAGACTAGGATTACAACCCCTGCCTTTTTTTGTTTTCCATT
-TGCTTGGTAGATCTTCCTCCATCCTTTTATTTTGAACCTATGTGTGTCTCTGCACGTGAGATGAGTTTCCTGAATACAGC
-ACACTGATGGTTCTTGACTCTTTATCCAATTTGCCAGTCTGTGTCTTTTAATTGGAGCATTTAGTCCATTTACATTTAAA
-GTTAATATTGTTATGTGTGAATTTGATCCTGTCATTATGATGTTAGCTGGTTATTTTGCTCGTTAGTTAATGCAGTTTCT
-TCCTAGTCTCGACGGTGTTTACATTTTGGCATGATTTTGCAGCGGCTGGTACCAGTTGATCCTTTCCATGTTTAGTGCTT
-CCTTCAGGAGCTCTTGTAAGGCAGGCCTGGTCGTGACAAAATCTCTCAGCATTTGCTTGTCTGTAAAGTATTTTATTTCT
-CCTTTGCTTATGAAGCTTAGCTTGGCTGGATATGAAATTCTGGGTTGAAAATTCTTTTCTTTAAGAATGTTGAATATTGG
-CCCCCACTCTCTTCTGGCTTGTAGGGTTTCTGCTGAGAGATCCGCTGTTAGTCTGATGGGCTTCCCTTTGAGGGTAGCCC
-GACCTTTCTCTCTGGCTGCCCTTAACATTTTTTCCTTCATTTCAACTTTGGTGAATCTGACAATTATGTGTCTTGGAGTT
-GCTCTTCTCGAGGAGTATCTTTGTGGCGTTCTCTGTATTTTCTGAATCTGAATGTTGGCCTGCCTTGCTAGATTGGGGAA
-GTTCTCCTGGATAATGTCCTGCAGTGTTTTCCAACTTGGTTCCATTCTCCCTATCACTTTCAGGTACACCAATCAGATGT
-AGATTTGGTCTTTTCACATAGTCCCATATTTCTTGGAGGCTTTGCTCATTTCTTTTTATTCTTTTTTCTCTAAACTTCCC
-TTCTCATTTCATTTCATTCATTTCATCTTCCATCGCTGATACCCTTTCTTCCAGTTGATCGCATCGGCTCCTGAGGCTTC
-TGCATTCTTCACGTAGTTCTCGAGCCTTCGTTTTCAGCTCCATCAGCTCCTTTAAGAAATTCTCTCTATTGGTTATTCTA
-GTTATACATTCTTCTAAATTTTTTTCAAAGTTTTCAACTTTGCCTTTGGTTTGAATGTCCTGCCATAGCTCAGAGTAATT
-TGATCATCTGAAGCCTTCTCTCAGCTCGTCAAAATCATTCTCCATCCAGCTTTGTTCCGTTGCTGGTGAGGAACTGCATT
-CCTTTGGAGGAGGAGAGGCGCTCTGCTTTTTAGAGTTTCCAGTTTTTCTGTTCTGTTTTTTCCCCATCTTTGTGGTTTTA
-TCTACTTTTGGTCTTTGATGATGGTGATGTACACATGGGTTCTTGGTGTGGATGTCCTTTCTGTTTTTTAGTTTTCCTTC
-TAACAGACAGTACCCTCAGTTTCAGGTCTGTTGGAGTTTTCTAGAGGCCCATTCCCGACCCTGTTTGCCTGGGTATCAGC
-AGTGGTGTCTGCAAAACCGTGGATTTTCATGATCCGTGAATGCTGCTGTCTGATCGTTCCTCTGGAAGTTTTGTCTCAGA
-GGAGTACCTGGTCGTGTGAGGTGTCAGTCTGCCCCTGCTAGGGGGCGCCTCCCAGTTAGGCTGCTCGGGGGTCAGGGGTC
-AGGGACCCACTTGAGGAGGCAGTCTGCCCATTCTCAGATCTCCAGCTGTGTGCTGGGAGAACCACTGCTCTCCTCAAAGC
-TGTCAGACAGGGACATTTAAGTCTGCAGAGGTTACTGCTGTCTTTTTGTTTGTCTGTGTCCTGCCCCCAGAGGTGGAGCC
-TGCAGAGGCAGGCAGGCCTCCTTGAGCTGTGGTGGGCTCCACCCAGTTCGAGCTTCCAGGCTGCTTTGTTTACCTAAGAG
-AGCCTGGGCAATGGCCGGTGCCCCTCCCCCAGCCTCGCTGCTGCCTTGCAGTTTGATCTCAGACTGCTGTGTTAGCAATC
-ATCGAGACTCCATGGGCATAGGACCTTCTGAGCCAGGTGCGGGATATAATCTCGTGGTGTGCCATTTCCTAAGCCCATCA
-GAAAAGCTCAGTATTAGGGTGGCAGTGGCCCGATTTTCCAGGTGCCATCTGTCACCCCTTTCCTTGACCAGGAAAGGGAA
-CTAACTTCCTGACCCCTTGCACTTCCCGAGTGAGGCAATGCCTTGCCCTGCTTTGGCTAGTGCACAGTGCACTTCACCCA
-CTGTCCTGCACCCACTGTCTGGCACTCCCTAGTGAGATGAACCCAGTACCTCAAATGGAAATGCAGAAATCACCCATCTT
-CTGCATCGCTCATGCTGGGAGCTGTAGACCGGAGCTGTTCCTATTCGGCCATCTTGGCTCCTCCTCCCATTATTTTTTAA
-TATTTTCTGAAAATCTTCTTTAAAGAGAGAAAGCCAAATGTCACCCACTTTTTCATAAAACCTTACAGGCAAATCTATTA
-TTCTTTTCTTTTTTGAGATGGATTTTCCCTCTTGTTGCCCAAGCTGGAGTGCAATGGTGCGATCTCGGTTTACTGCAACC
-CCCTGCCTCCCAGGTTCAAGTGATTCTCCGGCCCCAGCCTCCTGAGTAGCTGGGATTAGAGGCATGCCCCACCATGCCCA
-GCTAATTTTGTGTTTTTAGTAGAGACGGGGTTTTTCCTTGTTGGTCAGGCTGGCCTTGAACTCCTGACCTCATGTGATCC
-ACCTGCCTCGGCCTCCCCAAGTGTTGAGATTACAGCTGTGAGCCACTGCCCCGGGCCATTTTTTTTTAAAGATAGCGTCT
-TGCTCTGTCACCCTCCTCACCACATTATAGCTCTGGGGGCCAAGCTGCATCACAATGGAAATCATGGAGCCACAGGAAGA
-ATCCACTTAGCTTTGCAAGATGCTGCCCAAGGGGTTGCTTGGAGTAACCAAATTAACATTTTTCATTCTGCTCAGAGCAA
-AATATATGTGACAAAACATAGCCACGAGCCACTTTGCTTAGCACCCAGTGTCAAACTGGTAAGACTCAAACTTCCTCCCA
-GATAGGCCATGCCATCTCTAAATCTTTTTAGAAGCTTCTGCATGTTAATAGGCATCCCTAGATGAGACTAATTTGGGAGC
-CATCATTTTTAAATGCACTTCAGGGCATTATTCATTTGGAATGTTACACTATAAGTTATCTTTAGTAAGATTTTGCCATT
-TCTGTAAGACTTTGCTGCTTCCCAGGCCTAATGAATTAGCCAGAAAGAACTTAGTTTTCCAGAAATTAAGGATCCTATTT
-TTACCTAATATATTGGCTTTACTCTCAGGTTCCCTTGATTGACTTAGCCAATGATTTTTTTTCCTACCTAAGCGTGTGAG
-GAAAATGAAACAAAGGGGCAGAACACAAAAATCCCCGTGAATTTCCAAAAGCCAAATTTTACAACCCTCCAATATTATCA
-TTTACTACCACTTTCCTTCTGACCCATTCAGATGTAGGAGGCCTCTAACTGGAACTGGATTCAAGCCAGTTAATTACTGG
-ATCAAATCTGATCCTGGACCCGGTCCCGTTTCTGTCATAACTTCTAAAACATCCAGCCAGTCATGGCTGGATAGCAGTTT
-GGAACAGAAATTTGCTCAGAGAAACTCAGCTCAAAACACAAATTCATGGAGCTCTGAAATCCGAGAGAGAATTTACCACG
-ATCCCCAGATGCTCTGAGAGGTCAAAGGGCACAAGTGTTACAGAATCCTGAGGCGTCACTTTTCTGCCTGAAACCTCTGG
-CTGGTGGCGCCTTTACCTGTGTTTTGCTCGGGCCCACTGGGTTCGTTCTGTCCACTTGGCTCATGCTAGTGGTCTGGATC
-CCACACCTGCCAAGGGTGAGCTGGGTACAGAGCAGTGAAGGGTGTGTGAGCAAGCGAGCATGGGATCTGGCCACTGCACA
-CAGCCAAGCATGCCAGCTGCAGTGGGGTGGGCAGCTCCAGGCACCGCCACAGGTGCCAGCTCCCTGTGAGGCTGCAGCTG
-GACCAGGCTGACTGCAAACAGCTTCCACTGTGGGTATCAGGGAATGCAGCGGTGCCTGGAAGCTTCGAGATGCAGGAACT
-GCAGAGCCCCAAATAAGGTGTCACAGCCCTGGCTTGGGGAGCTCCTAGGTCTGGGCTCCCTGAAGGGCCACAGCTCTTCT
-CTCCTTCTCTCTTCTCTTCTTCTTGCCTGCAATTTGGCAAGCAAGGGGTGCGTTTCAGCCCTGTTTATGTTACACCTCTT
-TCAGCCCTGCTAGTTGGCAGGTCCCGAGTTCTTGTCCTGAGTCCAGGAAGAATGAGGTATGTGGGCAAGTAGAAGGTGAG
-CAAGGTGAAGAGGTGCTTTATTGAGCAACAGTACAGCTCAGAGGAGACGTGCAGTGGGTAGCTCCTTTCGGCAGGCAGGT
-CATCCCAATGTCTGTTCAGCTCTCAGCAGCTGAGAGAGATGCATGGTGGTTAGCTATGCCCACAGTGCCCAGGCTTTTCG
-AGCTGAGGAGTGCCTTCAAGCCAGTGCTGAGCCACTCTTAGCCCCACCTCAACGTCCCTCCTGTGCTCATCAGTTCCCAA
-AGTGTGGAGGGGGCCGAGGTGGCAGGGGGCTGGCATGTCAGCACTGCCCTGAGCTTGCACAAACTGGGCTGGGTTGCGAC
-TGTGCCTGGGTTCAACCTCAATTTGGATCCGAAGTTGGAGTGGGCTCTGGGAGCGGAGACATGCCAGGTGGTGGGAGCAG
-GTATGACTGGGCCTACGGGGGCAGGGGGGCTTGCTGGGCCTCTGAGAGTGCAAAGATGCCCGGGTTTGCTGTCATGGGTG
-GATGGCTGCAGCTGTGCCTGGGAGGGTGGGGCTCCTGCCTGCCAATTTAGAAGGGGTGGGTCTCTCACCTGTTCCTGGCT
-CCCACTAACTTTGAGGAGTTCACAGCCCCAGCCACTCCTCCCCACTGCAGCCAGTGTCTCCGTAGCAACTGCTCCACATG
-GGCCACTGCTGCCATCATAGAGCGGTCCTTGCAGGTGCCTTTCTTGTACCTCAGCACTCCTGGGGGTCATTAGAAGCCCT
-AGCAACACTGCTCACCACACTATAGCTCCAGAGGCCCTAGCAGTCCTGCTCCCACAGATCCCACTTCTGACACCATCTAT
-TAAAAGAAAATCTTCAGCTGAATTAAATTTAAAGGAACTTAATTGAGCAATGAATGATTCACGAATCAGGCAGCCCCCAG
-AATCACAGCAGATTCAGTGAGACTCCAGCACAGCTACATGGTGGAAGATTTATAGACAATAAAGGGAACGTGATGTACAG
-AAATCTGAAGTGAGGAGTGAGGTCCAGAAGCAACTGGGTCCGTTACAGTTCTCAGCAGTGAGGTCCAGAAACAACTGGAC
-TGGTTACAGTGCTCAGCATTTGCCTTATTTGAACACAGCTGAACACTCAGTAGTGTGTGAGTGGCAGAAGTTTGGCTGTT
-GGGATTGGCCAGGACTCAGCTATAGTTACAGGTGCATACTCCAAAGTTAGGTTATCAGTCTTTCTACCTATTAAGTTAGG
-TTGCAGTTTGTCCACAGGGACTCAAATCTAGAAGTACAGAGTCCTTCCCAGGCCATATTTAGTTCACTGTAACAGTTCCT
-ATTATGACCTCACTGACAGTTCTTTTTCTCTGAATTTTCCTTTCTTCTCAACAGCTTGTCCAAATGTTCCATTGGTCCCT
-GTTCATCCCGCCCTGCAGCTCTCCTTGACTGATTCTGCCCTTTGTGGTTTGCAGTCCTGTTTCTCTACAGCTTGGACCCC
-TTCAATCTTTCCATCATAGGTTTAACTCTCTGTTGAATTCTTATTTGTAGCTACGCAAATGTTACCTTAAGCTAAAAAAA
-TTCAAAGTGAAAGCCACATCCTCCTCTCTTCCCTTATGTGTATGGTATTACTACCATGCAGCCAGTGACCCAAAATGGGA
-TTTTTTCTGGGCTTTTCTTGCTTAGATTCAGGCTCATCTGGTGTCAAGCCTTGTTACTTTTGTTTCCTTGTTCTTTTATT
-TTTAATTTTTTTTCTTTTGAGACAGAGTTTCACTCTTGTTGCCCAGGCTAGAGTGCAGTGGTGTGATCCCGGCTCACTGC
-AGCCTCCACCTCCCGGGTTCAAGCAATTCTCCTGCCTCAGCTCCTGAGTAGCTGGTATTACAGGCATTTGCCACCACGCC
-TGGCTAATTTTGTATTTTTAGTAGAGATGGGGTTTCTCTGTTTTGATCAGGGTGGTCTCGAGCTCCCGACCTCAGGTGAT
-CTGCCCACCTCGGCCTCCCAAAGTGCTGGGATTACAGGCCTGAGCCACCGTGCCTGGCCTGCTTGTTGTTTTCATCTCAT
-CCTGATTTCTGAATACAGGAGAGGAGCTGAGTTGGTGTTCACTAACAAGCACAGAAGCTTTGTTACATTTACAGTGTCAT
-TCTTGGCAAAACCTGAATGGTATGTTTGTGGGGTGATGAGGTTCAGTCCCCTGTGACCTGTGCATCTGGCCAACACTGTG
-GTGACATCCTTAGGAATCCATGGGGAGAGACAAAGCATTCAGGAGTTAGTGGGTCACGTTTGACAAGGGCCAATAAAGAA
-ATATGCAAAGACAAAAAACAAGAAGAACATTATCATATTTTATACCTTTTGTTTATATAAATTTATGTCAATGATTCTAG
-CTTATGTTAATATACAATGTATACAATATGCTAACATATACAATATATGTTTATAGTTTAAACATTTCTGTCATGTTTTC
-AGATTCTTTAAAGATTACATTACACTTCCTATTTCAGATAGCTGTTTAAAATGAGTAAGGAAAAACGGATGTGTGCATCA
-GTTCTAACTGTTTATGGACTAAAACTAGTTGATTTCTTGGTTAAGAACAAAAAGTGACAACCTAATTAACTGAAAATTTT
-AAGTAGGCAATTATGGTTTTAGCTTTAATGTAAAATATTAACTATGCTCCATTCTTGCATTTTTAACCTAATACTCAATA
-TAAATCGCCACATGCCATGTTTCAGATCAAGGTTCTACTTGTGATCTCTCATGAGTTTTTCAAGGTTTTAATTATCTGAG
-ATGTAACAATGTACCCATAACCTTACTGGCTTAAACCAGGAATTTATTCTTTTTACATGTCACAATTTTCTGGGTCAAGA
-CACTGGACAGAGCGGTGTGGGTTGGTTGCTTCATGATGTCCCTGGTCTCATCTGGAAGGACTCTAGTGGCTGGAGATGTG
-AAGCAGGCACCCAGAAGGACTCTAGTGGCTGGGGACATGGAGCAGGCACCCAGCCCTCTCTTTGTGGCCAGCACGGACTT
-CCTTCCAGTCTGGTAGCATCAGGTAGTCAGGTTTGTCTGGCTTCTCCCAGGGTGTGTGTCCAAGAGGCCCAGGCAGAAGC
-TGTAAGGTCTCTCATGATCATCCCTCAGAAGTCCCAGAGCATCTCTCCTGCCACACTGTCCAGTTGTACTCATCACTGAG
-ACCAGCCATGATTCAAGGGGGAAAGGTGATTAGATTCCACCTCTTGATGAGAAGCATAGTAGGAACCTGCAGCAGTCTTT
-AATAAACCACAGCTTGTCCTCTGGCCACAAACTATTAACGTTTCTCCCACATGCAAATTATGCTTTGCCCCTCTCAAGAG
-CCCCAGAATGGTTTTCCTTATGGCACTGGCTAGTAGCCCAACTGAATCCTGAATCAGGTTGTGGTGGCTTGTCATCTGCA
-CCCACACACACTCAGCTGCAGTGAGGACTGAATCAGGTTGTGGTGGCCTGTCATCTGACCCCCCACACACAGCCACAGTG
-GGGACTGAATCAGGTTGTTGTGAGCTATCATCTGAGCCCACAAACTTAGCCGCAGTGAGGGGACTGCTGTGAAAACAGTC
-GACATTTCCCTTTAGAAGCTTTGGTGGGAGGCAAGAGGGAAGTGCTGCCCTGCAGGCCCCGTCTAACAGTTGGTCATTCC
-CATGGGGCGCCTGTTACAGTTCTGTGATTAGTGCCCAGTCCTGGTCCCTGAAAACGGCGCCCAGTCCTGGTCCCTGAGAA
-TGGTGTTTGTGTCCTTTTACTCCTCCCTCTGGGCTTTTGTCATTCTCCATGTTCTTTTTCCTTCAGTGCCTGGGTTGCCG
-TTGACCAGCTTTCCCTGCCTTTTTCTTATGGTCAATAGGGTATTCAATGGCTTCTTTTTCATTTTTTTTCCTTTTCTTTT
-CTTTTCTTTTTTTTTACTTTGGCCTTTTGAGACAAGAAATTATTTCTTTATATTTTCTCTAAATTCTGTTTGAAAACTGA
-ACCTTCTTCTTTAGATCATGTCCCTCTCCTGTCATATTTATTCAGTGACAGTTAGGGGAGGCTGGTAGCACTTTCCATGT
-TCTTCCCAGATGTCTCCTTAGGCAGATCCCTGAGATGGTGCAGTGCCCTTTCAGTTTCCATGTTGTGGCCATAGTTTTCC
-CACAGTCCCTCAGCAAGTAACTCTCAGACCTTTTCTCCAGTTTCCAATGACATTTTCTCACCGTCCTTCAGGCCCTGACC
-AAGAGTCTTGATGCCCTTCCAGGTTGCATGAATGGTCTCCTTGAGGCCCAGTTACAGGTCAGCCTCACAGTCGTGTCACA
-TATTGTAGCTTCTGATTACCACAGCAGCTCATTTCCAGCTGCCATATTCTGTTCCAGTTATCTATTCTGAAGTAAAACAA
-CTCATTATTACTTGTTTTTTGGCTTAGAGAGTCTTGGTGGCCAGCTCATCTCACACACAGTTGCAGCCAAGCTGGATTGT
-GTGAAAGCACAGTGGGGTGGTGTGCAGGGTGGCTCACTAGTGGTTGGGAGTGGATGTTGCTGGAGGCTCACTAGTTGTTG
-GGAGTCGGTGTTGCTGGAGGCTCAGTGGGGGATGTCAATGCGTGTAGCTAGTCATGGACTGGCCTTGTGGTTTCCATCAT
-GAGGTCTCAGGGGAGTGGGATTTCCTGCCTGGTGACTGGCTTTCTCCTGGGTAAGTGTTCTGTTTTCTCAGCCTGGCTTC
-TGAAGTCCCCAAATACCAGCTTTGTCACCTTCTGTTGGCCAAATAAGTCAGTAGTCTGGTCAAGGTTTAAGGGGAATTGG
-TTCTCACAGAGAGAGGAGCAGGAAAGAATTTGTCACCTTTAGTCTACCAGAAATGAGATTTTTATAACAAGTTTATTCCA
-AATACATTCCAGTTCCCCTTGTGAATACTTTTTTGACTCACAGGGTATTTCAAAGTTTATTACTTGGTTTTCAGACATTT
-GAGGCTTTTCTGGATATCAATTTGTTGTTGGTTTCTAATTTAATTTCAAGTGTTCAGACAACATCCTTTGTATACTATTT
-CAGGCTTGAACCTTTTCTCAATCCATCGACATACAGTCTATCTTGGCACTGCCAAGTACCATTTGGGTCAGGATTTTGTC
-ATTTAGATCCGTATTTTTCCTATATTTTTATCTGGTTGTTCCGTCAGTTACTGAGAGAGCAGTATTAATTCACCAGCTAT
-AATTTTGGATTGTCAATTTCCTGCTTTTGTTCTGTTGTTTTTGATTCACATACTTTGAGGTTCTGTGTGTGTGTGTGTAG
-TTTGTGTGCACTTTGAGGCACAATTTATAATTGTAACATCATCCTCTCTGATTCTTTTATTTTTATTAAATTACCCTGTT
-TATTTCTGGTGATATATTTTGTTCTGAAGCCTCTTTCATCTAGTGTTAACATCTCTGTTGAAGCTTTTTATGATTAGTGT
-CTGGATAGCATATTTTTATGTTTAGCATCTGCATAGCATATTTTTTCTCATACTTTGTGTCTTTGTGTTTAAATTGTGTC
-TCTGTGGATGCCATATTGTTGGGTCTTGCCTTCCTCTCAGGTCTGGCAGTCTCTGTCTTAAGTAGAGTATTTGTCCACTT
-ACATTGTAACTAATCATTGCTAAGGTTGGATTTAGGTCTGCCATTTTTCTACTTATTTTCTATTTGTTTGTTTATTTTTT
-TTAAGACAGGGTCTTGTTCTGTCACCCAGTCTGTAGTGCAATGGTGCAATCTTGGCTCACTGCAACCTCTGCCTCCCAGG
-CCCAACCAATCCTCACTTGAGCCCCCTGAGTAGCTGGGACTACAAGTGCATGGCACCACACCTGGCTAATTTTTATATTT
-TTGTAGAGATAGGGTTTTGCCATGTTGCACAGGCTGGTCTTGAACTACTGAGCTCAAGCAATCTACCCACCTTGGCCTCC
-CAAAGTGTTCAGATTACAGGCATGAGCCACCATGCCTGGCCTTCGTCTGTCTTTTGATCTTCTATATATTCTTTCCTAAC
-TTCTTTTGGGTTAAATATTTCTAAATATTCCAGTTTGATTAATCTTTTGGCTTTTGGAAATAATTTTTTATAGGCTGGGC
-ATGTTGGCTTATGCTCATAATCTCAGCTCTGTGTGAGTCCAAGGGAGGTGGATTGCTTGAACCCAGGAGTTTGAGACCAG
-CCTGGGCAACATGGCAAAACCCTCTCTACAAAAAACCAAACCAAAATTTAGCCTGACATCTTGGTGTGCACCTGTAGTCC
-TAACTATTTGGGAGGCTGAGGTGGGAGGGTTGCTTGAGCCTGGGAGGTTGAGGCTGCAATGAGCTGTGATCATGCCATTC
-CACTCCTGCCAGGGCAACAGAGTAAGACCGTGTGTCAAAAAAGATCATTTTTTATAAATAATTTATAATTTCGAATTTTG
-GTAACAAACACATACCTTAAAATTTACCATCATAACCAGTTGTAAGTATACAGTTTTGTAGAGTTAAGAATATTTACATT
-GTTGTGTAGCAGATTTCTAGATTTTTTTTTATCTTAGAAAACTCTATACCCATTCAACAACTATTAATTTCCCCTTCCTT
-CCACCTCCTGGCAAGTACTATTCTACTTTGTGTTTCTAAAAATTTGGCTTATATACCTAGGGTTATATAATATTTGTTTT
-TTAAGTAGGTTCCATGTTATGTGCAGATGTGTCAGGATTTTCTTCCTTTCTATGGCTGAATAATATTTCTTCATATATAT
-ATATTTTCTCTATATATATATATATGTATATTCTTTTGTTTATCCATCTATTCCTGGATGGACGTTTTGGTTTCTTCCAC
-CTCGTGGCTATGTAATGCTCCTGTGAACACAGGTGTACACATATCTGTTTGAGGTCCTGCTACTAGTTATTCTGTCTCTG
-TAGAAGTTGGATGGCTGGATCATATGGTCATTTTATTTTATTTTTTTGAGGAGCCAGTTAATATTTCCACCAACAGTGTT
-CAAGTGTTTCAGTTTCACCTGCACTTGTTACTTTCTGTTGGGTTTGAAGTGATGTCCCATTGTGGTTTCTATTTGCATTT
-CTCTAATGATTAGTGATGTTACACATCTTCTCATATATCTCATGTATCTGTTGGCTATTTGTATATCATCTTTGCATCTT
-TGGATGAATGTTCTTTGTCCATTTTTTAATCACTTTATTTTGTTGTGTTGTAGCTGGGTTTTTTGGTCATGAGCATTCAT
-TTATCTCACAGTTCATTCTTGTTACTTGGGCCAGGGTCATGATCATTCATTATCTCTCAGTTCATCCTCATTACGTTGGG
-CAAACAGTCATGCTGCAGGGTATAGATTATGTTATTCTGTTACTTTCAGGTAGAATTCGGGTCTAGGTTCTAATTGTTTC
-TAAGTTTAGATTCTGAATGAGAATCAGCAGAGGTAGACCACTGCTGCTGAGGCCTGGGGATTGCTGGGAAAAAGGCAGGA
-AACAGATATTGACCTGACCATGGAGGGTTTATGTTTCACGGCTCCCATCTGGGTACCCAAGGAACCTACATGTAGCTCGT
-GTGTGGAGAGCCTACATTGCCCACTCAAAGCAATTGAGGATGGAACAGTCTTGGGGCTGGAGCTCATTATTTGGAATGAT
-AACCACATCTGCACAGAGAGGACCTGATAAGATGTTGTCCTTCCATGTATATCTGGGAATCCTGTGTAGGGTCTCTCTGT
-AAGGACAGGGGCAGTGTTGGCTCCTTGGCCTCTAGTTAGCTTCACAAGTAGTCTAGTAAAGGCTTTGCCAACTTGTCACC
-ATCTGTGGATATTCTGGTCAGCTCTTGTTTTCACCCTACTGACTTCTTCAGACACTAGGCTTTTGCTTTAGACCATTCAT
-GGTTTTCTTCCTCTTCAAATCAGTAATCAATAAATCGCCTTCAAGTCAATAAATTTCCACTCCTTTAGGAAACCCTGATC
-TTCTGGTCACACCAAGGTTTAATTAACTGGTTTGATTGTTTTTCTGTTTTCTTGGATTTTTTTTCCTTCTTCCTGGGGGT
-TTCTAGTAATTCTAGTTTGATGTCTCACTTTCTCCATTTTTTATTTCTTAGTTTTCTTCTGTGATTATTTTCACTGCAGC
-TGCAGGGCCTAATCCTGGGTTGGCAGAGAACTAGCACTTACTCTGCCCTAATTGGAATCCAGGAGAGATAGCAGGTTCCC
-TAGTGTGAAAATGTGTTTGCTCCTCTCTGCTTCTGGTAGTCTCTCTGTAGGAGTTCTTTACGCATTCTGAATGTTCACTT
-CTTATGAGATACATGATGTGCAACTATAGGTTGAATGTCTCTGATCCAAAAATCTGAAATCCCAAATGCTCCAAAGTCTG
-AAACTTTTTGAGTGCCAACATGACACTCAAAGGAAATGCTTATTGGAGCATCTCAGACTCAGGTGTTTGAATTTGAGATC
-CTCAACCAGTAAGAATAGTGCAAATATTACAAAATCTGAAACACATCCCAAGCATTTCAAATAAGGGACACTCAACTGGT
-ATTTTTTTTAATTTTACAGTTTGCCTTTTACCCTGTTGGTTGTGACCTTTGAGGTACAGAAGTTTTTAGGTTTGATATAT
-TTTTGCTTTTACTGCCTGAGCTTTTAATGTCATATCCTAAAAATTATTGACAAATTCATCGTCATAAAGCATTTTCCAAA
-TTTGTTTTCCCTAGGAGTTTGATAGTTCTAGTTTTACATTTAGGTTTATAATTCACTTTGAATTGATTTTAACGTGGTGT
-AAGGTAAGAGTCCAACTTCATTGTTTTGCATGTAGTTATACAATTTTCCCATCATCACTTGTTGAAGAAACTGTGCTTTT
-CCATTGAGTGGTCTTGGCATCCTTCTGGAAGATCATCGGACCATATATGCCAGGGTTGGTTTCTGAGGTCTCTGTTGTGT
-TGGTCCATAAGTGTGTCAAGAGTGTCTTTATGCCATGACCACATTTTTTCTTTTTGGCTTATTGCAGTTTTGTAATTGCT
-TTGAGACGTTTAATTTTGTTCTGTTTCAAGATTGATTTGCCTATTCATGGGCCCTGGAGATTCCATATGAGTTTTAGGAT
-AGGTTTTTCTGTTTATCAAAAATGTCATTGGAATCTTTATAAGGATTGTATTGAATCTAGGTCACTTCGAGTAGTGTTGA
-CATCATTCCAAGATGAAATCATCTAATTTGCAAACCCAGCTTTTCTTTTCATTTATTTGTGTTTAATTTCTTTTAACAGT
-GTTTTGTAGTTTTCTGTGTTCAAATCTTTTGCCCTCTTGGTTAAGCTTATTTCTAATTTTTATAATGCTGTTGTAAATAT
-AATTTTTTTTTTTTGAGATGGAGTCTTGCTCTGTCTCCCAGGCTGGAGTGCAGTGGCACTATCTCAGGTCACTGCAACCT
-GCACCTTCCTTATTCAAGCGATTCTCCAACCTCAGCCTCTCAAGTACCTGGGATCACAGGTGCGCGCCACCATGCCCAGC
-TAACTTTTTGGTATTTTTAGTAGAGACAGTGTTTCTCCATGTTGACCAGGCTATTCTTGAACTTGTGACCTCAGGTGATC
-TGCCCACCTCGGCCTCCCAAACTGCTGGGATTGCAGGCATGAACCACTGCACCCAGCCAAATGTCATTCTTTTTAAAAAT
-TTCTTTTCTTTTGTTTTCTCTTTCTTTTCTTTTCTTTCTCTCTCTTTCTTTCCTTTCTTTCTTTTTTTTTGAGACGGTGT
-CTCACTCTGTTTCCTAAGCTGGAGCACAGTGGCACAGTCTCAGCTGACTGCAACCTCCACCTTCCAAGTTCAAGCAATTC
-TCCTGCCTCAGCCTCCCAAGTAGCTGGGACTACAGGTGTCTGCCACTATGCCCAGCTAATTTTTGTATTTTTAATAGCGA
-TAGAGTTTTACTATTTATATTAGAGATGGGGTTGACCCAGCTGGTCACGAACTCCTGACCTCAGGTGGTCCACCCGCCTT
-GGCCTTCCAAAGTGCTGGGATTACAACTGTGAGCCACTGCACCTGGCCTCTTTTTAAAATTTTATTTGCAGATTGTTCAT
-TGTTAGTTTATAGAAATGGAACTGACTTGTGTGTGTTACTGTATCCTGAAACTTTGTTGAATTTCATTATTCTACCAGTA
-TTTTGTGGAATTTCAGGATTTTTACACATTACATCATGTTGTCTGTGAACAAAATTTTGTACTTTTTCCTTTCCAATTTG
-CATGCTTTTTATTACTTTCTCTTGCCTAATTATTCTGAGTAGAAATTCCAGTACTGTGGTGAATAGAAGTGGCAGGAAGA
-GATGTTGCTATCTTATTCCTGATCCTAGAGGAAAAGATTTTAGTTTTTCACCATTCAGTATGATGTTAGCTGTGAGCTTT
-TCATGTATAATCTTTATTTACTGAGGAGTTTCCATATATTACTAATTCTTTGAGTGTTTTTATTACAAAAGGTGTTCATC
-TGGCTCTGGAACCAGATAAATGTTGACCTGATAGAGTGGATTGGAATGTCCCCTTCTGGTTTTTGAACATTTTTGGAATA
-TTTTACAAAGGGCTGGCATTAATTCTTCTTGAAATGTTTGGTAAAATTTTCCAGTGAAGTTATCTGGACCTGGAATTTTC
-TTTTTTGGGGGGTTTTTGATTACTGGTTGAATCTTCTTACTAGTTACAGGTCTCTTTGGATTTTTTATTTCTCCATGATG
-CAGTATGGTGGTTTGTGTTTCTAGGAATTTATAAATTTATTCTAGGTTGCCCAGTTCTGTGGCATATGGTTGCTCACATT
-AGTCTCTTGTAATCTTTTTCATTTCTGTGGAATCTGTTGTACTGTCACCTCTTTTATTTATGATTTTAGTATTTGAGATT
-TCTCTTTTTTTCTTAATATAGCTGTGAGTTTTAAAATTTTTATTGATCTTTAAAAAAACAAACTCAGTGGTTTTTTTTTT
-CCTTTTTTTCTGGTCTTATTCTGCTTATCTCTGTTCTAATCTGTTATTTTCTTCCTTTTGCTTGGTTTGTCATTAGTTTT
-TTTTTTTTTCCCTTTAGGTGTAATGTTAGGTTATTGATTTGAGATCTTTCTTCTTTTTAATTTGATCACCTGCAGCTATA
-AGCTTCCCTTTAGCATGGCTTTGAGATCTTTCTTCTTTTTAATTTAAGCATCTGTGGCTGTAAGCTTCCCTTTAGCACTG
-CCTTTGTTGCCTCCTCCTGAGTTTGGGTATGTCATGGTTTTGTTTTCATTTGCTTAAACATTTTTTTTTGTCCTATTGTA
-ATATAATTGTGTTGTTTTTAATAGAGGTAATTAATGAAACACATAATGAATTGTGCTTCTGTTTTTATAATATTTTAAGC
-ATTCTTAACTCAGAAATGTAAATTTTAGAAAAAAATTCCAGGCCAGGCACAGTGGCTCACACCTGTAGTCCCAGCACTTG
-AGGAGGCCGAGGTGGGAGGATCATCTGAGGTCAGGAGTTGGAGACCAGCCTGGCCAACATGGTGAAACCCTGTCTTTACT
-AAAAATAGAAAAAAAATATATAAAAGCTAGCTGAGTGTCATGGCGGGTGCCTGTAATCCCAGCTACTCTGGAGGCTGAGG
-CAGGAGAATCACTTGAATCTGGGAGGCGGAGGTTGCAGTGAGCTGAGATTGCACCACTGCACTCCAGCCTGGGTGACAGA
-ATGAGTCCATCTCAAAAAAAAAAGAAAAAAGAAAAAATTTGAGACATATTTATTTGTATTTCAATTTAGAAACTATGATC
-TCCTAAGTGTATTGACACAGCAACCTGACATAAAGATAAAGAATAATAAGTATATAACAAAACGGAAACTTGCAAATACC
-TTTTTTAATTAATTTTTAATTATATATATTTAAAAATTGCCGGGTGCAGTGGCTTACACCTGTAATCCCAGCACTTTGGG
-AGGCTGAGGTGGGCAGATCACATGAGGTCAGGAGTTTGAGACCAGCCTGGCCAACATGGTGAAACCTCATCTCTATTAAA
-AATCAAAAAATTAGCCAGGCGTGATAGCATGCATCTGTAGTCCCAGCTACTCAGGAGACTGAGGCAGCAGAATTGCTTGA
-ACATGGGAGGCAGAGGTTGCAGTGAGCCAAGATAGTGCCACTGCACTCCAGCCTTGGTGACAGAGTGAGACTCTGACTCA
-AAAAAAAATTGTCTGGGCACGGTGGCTCACACCTGTAATCGCAGCATTTTGGGAAGCTGAGGCAGGCAGATCACGTTAGG
-AGATCGAGACCATCCGGGCTAACACGGTGAAATGCCATCTCTACTAAAAATACAAAAAATTAGCCGGACGTGGTGGCGGG
-TGCCTGTAGTTCCAGATACTCCGGAAGTTGAGGCAGGAGAATGGTGTGAACCTGGGAGGTGGAGCTTGCAGTGAGCTGAG
-ATTGCACCACTGGACTCCAGCCTGGGTGACAGAGCGAGACTCTGTCTCAAATAAAATAAAATAAAATAAAACTAAGGTGT
-GGTTGACATACAAAAATTACACATATTTAATATATACCTTTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTTAC
-GGAGGTTTTACTCTTGTTGCCCAGGCTGGAGTGCAGTGACACGATCTCAGCTAGCTGCAACCTCCACCTCCCGGGTTCAA
-GCAATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATCGCAGGCGTGCGCCCCGACACCCGGCTAATTTTTGTATTTTTT
-TAGTACAGACAGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGATGATCCACCTGCCTTTGTCTCC
-CAAAGTGCTGGGATTACAGGCGTGTGACACCGAATATATACATCTTAATGAGTTTAGAGATAAGTATTCGCCCCAGGACT
-CATCACAACAAATAATGCCGTAAACTTGACCATCACTCCCCATATATTTCTCATTCTGACCCTTTTTAAAAAATGAGACC
-GGGAGTGGTGGCTCACGCCTGTAATCCCAGCATTTTGCGAGGCCGAGGCGGGTGGATCACGAGGTCAGGAGATCAAGACC
-ATCCTGGCTAACACAGTGAAACCCCGTTTCTACTAAAAATACAGAAAATTAGCTGGGCGTGATGGCGGGCACCTGTAGTC
-CCAGCTACTTGGGAGACTGAGGCAGGATAGTGGTATGAACTCGGGAGGCAGAGCTTGCAGTGAGCTGAGATCGTGCCACT
-GCACTCCAGCCTGGGCAACAGAGTGAGACTCCGTCTCAAAAAAAAAAATGAGATGACCATTTCACCTAAAATATACCCTC
-TTAAGTTTTATTTTAAGTGTACAATACAGGACGGCCATGCATCAGAGATATATGTGGGTTTGGTTCCAGACCACTGCAAT
-AAAGTGAGTTATACAATTTCTTTTGGTTTTCCAGTGCATGTAAAAGTATGTTTATACTGTGCTGTATAAAGTGTGCAATA
-GCATATGTCTACAAAGTGTTCACACTTTAATTTACAAATACTTTATTGTTAACAAGTGCTAACAGTCATCTGAGCCTTCA
-GAAAGCTGCAATCTTTTTTTGTGTGTGTGACAGGGTTTTACTCTGTGGCTCAGGCTAGAGTAATTGCAGTCTCAACCTCA
-TGCTCAATCAAACCCCCACCTCAGACTCCTGACTAGCTGGAACTACAGATACATGCCACCATGACCAGCTAATTTTTGTA
-TTTTTTTTTTTTTGTAGAGATGGGGTTTTGCCATGTTGCCTTGACTTCCTGGGCTCAAGCAATCTACCCACCTTGGCCTC
-CCAAGGTGTTGGGATGACAGGTGTGAGCCACTGCACCTGGCCAAGTTTCAGTCTTCTTGCTGATGGAGGGTCTTGCCTTA
-ATGTAAGGTGGTGGTTGCTGAGCGTTGGGGTGGCTGTGGCAATTTCTTAAAATAAGACACCATTGAAGTTTGCTGTGTCA
-ATTGACTCTCCCTTTCACAAAAGAATTATCTGTAGCATACGATGTTGTTTGATAGCTTTTTACCCACAGTAGAACTTTCA
-AATTGGATTCAATCCTGTCAAACCTTCGTACAGCTGTACCAACTAAGTTTATGTATTATTGTAAATCATTGTGTCAATCC
-TGTCAAGCCCTCCTTCTGCTGTACCAACTAAGTTTATTCTAAATCTGTTGTCATCTCAACATTGTTTACACTGTCTTCAC
-CACGAGTAGATTTCATCTCAAGAAACCACTTTCTTTGCTCATCCTTGGAAGCAACTCATCCACTCACGTTTTCTCCGGAG
-GCTGCTGCAGTCTCGCCAGATCTTCAGGCTCTGTCTCTGATTCTAGTGCTCTTGTTATTTCCACCATATCTGCAGTTACC
-TCCTCCACAGAAGTCGTGAACCCCTGTGTCATCTGTGAGGGTTGGAATAATCTTCCCAACTTCTCTCTCTCTCTCTCTCT
-CTTTTTTTTTTTTTGAGATGAAGTCTTGCCTGGGCTGGAGTGCAGTGATGCGATCCCAGCTCACTGCAACCTCCACCTCC
-CAGGTTCAAGCAATTCTGCCTCAGCCTCCCAAGTGTTTGGGATTACAGTCACCCCCGACCAGGCCCAGCTAATTTTTTGT
-GTGTTTTTAGTACAGACAGGATTTCACTATGTTGGCCAGGCTGGTCTCAAATTCCTGACCTCGTGACCCACGTGCCTTGG
-CCTGCCAACATGCTGGGATTACAAGTGTGAGCCACCACGCCCGGCCCCAACTTCTCCTAATGTTGCTATTTTGATCTTAT
-TTTTTAAATCATGAATGTTCTCAATGACATCTAGAATGGTGAATCCTTTCCAGTAGGTTTTCAATTATTTTGCCCAGATC
-CATCAAAGGAATCACTTTCTAGAGAAGTTATAGCTTTATGAAATATATTTTTAAGTGATAAGACTTGAAAGTTGAAATTA
-TTCTTTGATCCAAGGGCACCAGAATGAATGTTGGGTTAGTAGGCATGAAAACAATATTCAGCTCTTTGTACATCTCTGTA
-AAAGCCCTTGAGTACCAGGGGCATTGTCAGTGAGCGGTAATACTTTGAAAGGAATCTTATTTCTTGAGCAGTAGGTGTCA
-ACAGTGGGCTTCAGATATTCAGTAAACCATATTTGTAAGCCGATAGTCTGTCATCCAGGCTTTGTTCCCATTTGTAGAGT
-ACAGACAGAGCTGTGTTTTATCATAATTCTTCAGGGCCCTTGGATTTTCAGAATAGTAAATCATCATTGGTTTCAAGTTA
-ACATCACCAACTGCATTAGCCCTTAACAAAAGAGTCAGCATGTCCTTTGAAGCCTTAAAGCCAGGCATCAACTCCTCTCT
-AGCTGGGAACATCCTAGATGGCATCTCCTTCTAGTAGAAGGCTGTTTTGTCTCCATTGCAAATCTATTTAGTGTTGCCAT
-CTTAATCAGTTATCTTCTAGATAGCTTTCTGCAGCTTTTCCATCAGTACTTGCTGCTTTATCTTGCGCTTTTATGTTATG
-GAGATGACTTTTTTCCTTAAACCTCAAGAAACAAGCTCTTCTAGCTTCAGACTTTCCTTCTGCAGCTGCCTCACCACTCT
-AAGTCTTCATAGAATTGAAGAGAGGCCGGGTGCGGTGGCTGTCACACCTGTAATCCTAGCACTTTGGGAGGCCGAGGCGG
-GCAGATCACCTGAGGTCGGGAGTTCGACACCAGTCTGACCAATGTGGAGAAACCCCGTCTCTACTAAAAATACAAAAAAA
-TAGCCAGGTGTGGTGGTGCTTGCCTGTAATCCCAGCTACTTGGGATGCTGAGGCAGGAGAATGGCTTGAACTTGGGAGGC
-AGAGGTTGCGATGAGCCAAGATCACGCCATTGCACTCCAGCTTGGGCAAGAAGAATGAAACTCTGTCTCAAAAAAAAAGA
-AAAAAAAGTAAAAAGAGAGTTAGGCTTAGGCTTAATGGAATGTTTTTTGTTTTTTTTTCATCTTCTATCTAGACCAATTA
-AACTTTCTTCATAACAGCAGCAAGATTGTTTAGCTTTTTATCATTCATGTGTTCACTGGAGCAGTACTTTAAATTTCTTT
-CCAGAACACTTCGTTTGCATTCACAACTTGGCTAAGTGTTTGTTGCATGAGGTCTAGCTACTGGCCTGTCTTGCTTACAG
-CATGCCTTCCTCACTAAGCTTAATTATTTCTTCCTTTTGGTTTAAAGTGACAGACATGCAACTCTTCTTTCATGAACATA
-TAGAGGCTATTGTAGGGTTATTAATTGGCCACATTTTAATATTAATAAAAAGAAGCCTGAGAAAAAGAGAAAGAGAAATG
-GCCCGTTGGTTGGGCAGTCAGAACAAACGCATTTGTCAATTGTTTGCTGTCTTATCCTGGTGTGATTTGTGGTTCCCAAA
-ACAATGACAACAGTAGCATTAAAGATTACTGATTACAGATCACCACAACAGATTCAATAATAAAAATCTTAAAATACTGT
-GAGAATGACCGAAATGTGACACAGAGACGTGAAGTGAGCACGTGCTGTAGGAACAATGGTGCCAGTGAGACCTGCTTATT
-GCAGGGTGGCCACAAACCTTCAATACGTAAAACACATGGTCACAAAACACAATAAAGCAAAGTGCAGTGAAACAAGATGT
-GTCTGTCTTTTGATAGACTCTGACAATCTCTACCTTTGAATTGGTACATTCATACCATTAACATTCAAAGTGATTATTGA
-TATCATTGGATTAATATCTACTATATTTGTTACTGTTTTCTATTCATTCTCCTCAGTCTTCATTCTTTTGTCTACCACTC
-TTTTTCTGCCTTTTGCAGTTTTCATTGATGATTTTAGATGACTCCATTTTCCCTGTCTTTCTTAGTACATACTTCTCTTT
-TTAAAACTTTTTTTTAACTAGTTGCCACAGAATTTGCAATATACATTTACAACCAATTCAAGTCCACTTTCAAATAACAC
-TATCCAACTATCCCACAAATAAGACTACCTGCTTAACAAACAAAACACCTAATTCCTCAGTAACATTTACAACCAATTCA
-AGTCCACTTTCAAATAACACTATCCCACTATCCCACAAATAAGACTACCTGCTTAACAAAGAACACACCTAATTCCTCAA
-TATACATTTACAACCAATTCAAGTCCACTTTCAGATAACACTATCCCACTTCACGGGTGACTACCTGCTTAACAAAGAAA
-ACACCTGATTCCTCCCTCCCATCCTTCCATTCCATTCCTTGTATTATTGTTCCTTATTTCACTTGTGTATAAGCATGCAT
-AATCTATCTGTGTGTATTTATTATTATCTACAAACTTATTGGTCAGATCAATTATGAATAAATACATGTTTTTATTGTAC
-CACAATGCCTCCCTACCATCCTTCCATTCCATTCCTTGTATTAGTGTTACTCATTTCAATTGTATATAAGCATACATAAT
-ATATCTGTATTTGTTATTGTCTATGATCTTCTTGGTCAGATCAATTAAGAATAAATACATAGGTTTTTATTGTACCACAA
-TTCTTTCTTTAATGCTCTTTTTAAAAAAATGTTGATCCAGGTTTCAGTTATATATCTTTTGTTTCCCTAAAGAATTTCAT
-TTAACATTTCTTGCAAGACAGGTCTCCTGGCAACAAGTTTCTTGAATTTTTATTTTTCTGAGGAAGGCCTTAATTCTCCT
-TCACTTTTGAAGGGTGGTTTCAGTGGGTACAGAAACTTAGGTTGGTGGGTTTTTTCTGTCAACATTTTGAATTTTTCATT
-TCACTGTCTTCTTACTTTCACAGTTTCTGAAATGTTGAATGCAGTTCTTATCTTTGTGTCTCTGTAGGTAAGGTGTTTTC
-TGCCCCACCTCTGGTTTCTTTCAGAGTTTTCCTTTATCTTTTATTTCATATAGTTTGAAAATTATATGTCCAAGTGTAGG
-TTGTTGGTATTTATTCTGCCTGGTGTTCTCAGAGCTTCCTGGATCTTTGGTTTGGTGTCTGACATTAATACTGGAAGTTC
-TCAGACATGGTTGTTGCAGAACTTTCTTCTATTTCTTCTCCTCTTGGTATTCTCATTACTGTTTCACCTTTTGTAGTTGT
-CCCACAGTCTTGAATATCATCTTCTGTTCTTTTCAGTGTTTCTTTTCTTTAGTTTTCGAAGTTTCTGATGATAAATCCTC
-AAGCTCAGAGATTTTTACTCAGCTGAGTCCAGTCTACTAATAAGCCATCAGAGGTATTCTTCAGTTATTTACCACGTTTT
-TCATCACTACATTATGTTGAAAGTTCTTACGATGTCTGTCTTTCTCATTACATTACCCATCTACACTTGAATACTGTCTA
-CTTCATTCATTAGGCCCTTAGCATATTCTCCAGAGGTTTAAAAAAAAATTCCAAGATCATATCTTTGTCTGCTTCTGAAG
-CTTGCTCTGTTGACACAAATTGTATTTTTTTCTTTTTTTGGATTTTAGTAAGCCTTGCAATTTTTTCCCTTTATTCTGAT
-GCATGAAGTACCCACTAAAAGTGACTGTTGTTAGTATAGCTTCAGTAATGCGGTGATGAGGTGACAGGGCAGGTGATGCT
-CTCTTAGTCTCTTTAGGCTACTATAACAAAATACTTCAGACTGAGTAATTCATAAACAACAGAGATTATTGTTCACAGAT
-CTGGAGGCTGGAAAGTACAAGACTAAAGGGCCAGGATATTTGGTGTTTGGTGAAGGTCAAACATTCAGACACTCTCAACG
-ACTATAGCGACAGCAGCAGTCTTCAGGAATCCTATGTGAGGGACAAACACTCAGAAGCCAGCTGGAGTGTTCTAGAATCC
-TATGTGAGGGCCAAACATTCAGACCCCAGCAGTAGTGTTGTGGAATCCTATGTGAGGGACAAACATTCAGACCACGGGAG
-CAGTGTTCTGGAATTCTATGTGAAGGACAAACATTAAGACTCTCATAGCAGTGTCCTGGAATCATATGTGAGGGACAACC
-ATTCAGACACCAGCAGAAGTGTTCTGGAATCCTAGGTGTGGGAAAAACATTCAGAACCTAGTAGCAGTGTTCTGGAATCC
-TATGTGAGGGACATACATTCAGACCACGGCAGCAGTGTTCTGGAATGGTATGTGAAGGACAAACATTCAGACCCTTGTAG
-CAGTGTTCCAGAATTTTATGTGAGGGACAAACATTCAGACCACAGCAGCAGTGTTCTGGAATCCTATATGACGGACCAAC
-GTGCAGACCCTTGCAACAGTGTTCTGGAATACTAGGTGAGGGAAAAATATTCACACCCTTGTAGCAGTGTTCTGGAATTC
-TATGTGACTGACAAACATTCAGACTCCAGCAGCAGTGTTCTGTAATCCTATGTGAGGGACAAACATGCAGACCCCAAGAG
-CAGTGTTCTGAAATCCTATGTTAAGGGAAACATTGAGACCCCAGCATGAATGTTCTGGAATCCTATGTGAGTGACAAACA
-TTCAGACCACGGCAGGAGTGTTCTGGAATCCTATGTGAGGAACAAACATTCAGACCACAGCAGGAGTGTTCTGGAATCCT
-ATATGAGGTATAAGCATTCAGACCCTCATAGCAGTGTTCTGGAATCCTATGTGAGGGAGAAGCATTCAGAGCACAGCAGG
diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta.fai b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta.fai
deleted file mode 100644
index c5e2e02..0000000
--- a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.21.10M-10M200k.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-20	200000	4	80	81
-21	200000	202508	80	81
diff --git a/src/test/resources/htsjdk/samtools/cram/io/bzip2-test.bz2 b/src/test/resources/htsjdk/samtools/cram/io/bzip2-test.bz2
deleted file mode 100644
index a16c0e0..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/io/bzip2-test.bz2 and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/test.cram b/src/test/resources/htsjdk/samtools/cram/test.cram
deleted file mode 100644
index 59f11d2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/test.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/test.cram.bai b/src/test/resources/htsjdk/samtools/cram/test.cram.bai
deleted file mode 100644
index fcb31fc..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/test.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/test.dict b/src/test/resources/htsjdk/samtools/cram/test.dict
deleted file mode 100644
index dfb98d6..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test.dict
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD	VN:1.4	SO:unsorted
- at SQ	SN:Sheila	LN:20	M5:7ddd8a4b4f2c1dec43476a738b1a9b72	UR:file:/Users/edwardk/Documents/htsjdk/testdata/htsjdk/samtools/cram/auxf.fa
diff --git a/src/test/resources/htsjdk/samtools/cram/test.fa b/src/test/resources/htsjdk/samtools/cram/test.fa
deleted file mode 100644
index 11d25dd..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->Sheila
-GCTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/test.fa.fai b/src/test/resources/htsjdk/samtools/cram/test.fa.fai
deleted file mode 100644
index f3cdedb..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-Sheila	20	8	20	21
diff --git a/src/test/resources/htsjdk/samtools/cram/test2.cram b/src/test/resources/htsjdk/samtools/cram/test2.cram
deleted file mode 100644
index 59f11d2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/test2.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/test2.dict b/src/test/resources/htsjdk/samtools/cram/test2.dict
deleted file mode 100644
index dfb98d6..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test2.dict
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD	VN:1.4	SO:unsorted
- at SQ	SN:Sheila	LN:20	M5:7ddd8a4b4f2c1dec43476a738b1a9b72	UR:file:/Users/edwardk/Documents/htsjdk/testdata/htsjdk/samtools/cram/auxf.fa
diff --git a/src/test/resources/htsjdk/samtools/cram/test2.fa b/src/test/resources/htsjdk/samtools/cram/test2.fa
deleted file mode 100644
index 11d25dd..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test2.fa
+++ /dev/null
@@ -1,2 +0,0 @@
->Sheila
-GCTAGCTCAGAAAAAAAAAA
diff --git a/src/test/resources/htsjdk/samtools/cram/test2.fa.fai b/src/test/resources/htsjdk/samtools/cram/test2.fa.fai
deleted file mode 100644
index f3cdedb..0000000
--- a/src/test/resources/htsjdk/samtools/cram/test2.fa.fai
+++ /dev/null
@@ -1 +0,0 @@
-Sheila	20	8	20	21
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#blank.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#blank.2.1.cram
deleted file mode 100644
index ec69511..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#blank.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#blank.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#blank.3.0.cram
deleted file mode 100644
index 0600333..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#blank.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#large_aux.2.1.cram
deleted file mode 100644
index 29992ea..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#large_aux.3.0.cram
deleted file mode 100644
index 2b01737..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.sam b/src/test/resources/htsjdk/samtools/cram/xx#large_aux.sam
deleted file mode 100644
index 93fb8cf..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#large_aux.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at SQ	SN:xx	LN:20
-a1	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	*	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1	ah:i:1	ai:i:1	aj:i:1	ak:i:1	al:i:1	am:i:1	an:i:1	ao:i:1	ap:i:1	aq:i:1	ar:i:1	as:i:1	at:i:1	au:i:1	av:i:1	aw:i:1	ax:i:1	ay:i:1	az:i:1	ba:i:1	bb:i:1	bc:i:1	bd:i:1	be:i:1	bf:i:1	bg:i:1	bh:i:1	bi:i:1	bj:i:1	bk:i:1	bl:i:1	bm:i:1	bn:i:1	bo:i:1	bp:i:1	bq:i:1	br:i:1	bs:i:1	bt:i:1	bu:i:1	bv:i:1	bw:i:1	bx:i:1	by:i:1	bz:i:1	ca:i:1	cb:i:1	cc:i:1	cd:i:1	ce:i:1	cf:i:1	cg:i:1	ch:i:1	ci:i:1	cj:i:1	ck:i:1	cl:i:1	cm:i:1	c [...]
-a2	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	*	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1	ah:i:1	ai:i:1	aj:i:1	ak:i:1	al:i:1	am:i:1	an:i:1	ao:i:1	ap:i:1	aq:i:1	ar:i:1	as:i:1	at:i:1	au:i:1	av:i:1	aw:i:1	ax:i:1	ay:i:1	az:i:1	ba:i:1	bb:i:1	bc:i:1	bd:i:1	be:i:1	bf:i:1	bg:i:1	bh:i:1	bi:i:1	bj:i:1	bk:i:1	bl:i:1	bm:i:1	bn:i:1	bo:i:1	bp:i:1	bq:i:1	br:i:1	bs:i:1	bt:i:1	bu:i:1	bv:i:1	bw:i:1	bx:i:1	by:i:1	bz:i:1	ca:i:1	cb:i:1	cc:i:1	cd:i:1	ce:i:1	cf:i:1	cg:i:1	ch:i:1	ci:i:1	cj:i:1	ck:i:1	cl:i:1	cm:i:1	c [...]
-b1	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	*	ZZ:Z:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""####################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [...]
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.2.1.cram
deleted file mode 100644
index 3d1a6ee..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.3.0.cram
deleted file mode 100644
index 73b1570..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.sam b/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.sam
deleted file mode 100644
index 9e338ed..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#large_aux2.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at SQ	SN:xx	LN:20
-a1	0	xx	1	1	1M	*	0	0	A	#	aa:i:1
-a2	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1
-a3	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1
-a4	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1
-a5	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1
-a6	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1
-a7	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1
-a8	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1	ah:i:1
-a9	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1	ah:i:1	ai:i:1
-aA	0	xx	1	1	1M	*	0	0	A	#	aa:i:1	ab:i:1	ac:i:1	ad:i:1	ae:i:1	af:i:1	ag:i:1	ah:i:1	ai:i:1	aj:i:1
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#minimal.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#minimal.2.1.cram
deleted file mode 100644
index e25b0f2..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#minimal.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#minimal.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#minimal.3.0.cram
deleted file mode 100644
index fda0032..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#minimal.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#minimal.sam b/src/test/resources/htsjdk/samtools/cram/xx#minimal.sam
deleted file mode 100644
index eb72140..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#minimal.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ	SN:xx	LN:20
- at SQ	SN:yy	LN:20
-a0	16	xx	4	1	10H	*	0	0	*	*
-a1	16	xx	4	1	5H0M5H	*	0	0	*	*
-a2	16	xx	4	1	5H0I10M0D5H	*	0	0	*	*
-A0	16	yy	4	1	0H	*	0	0	*	*
-A1	16	yy	4	1	0I	*	0	0	*	*
-A2	16	yy	4	1	0D	*	0	0	*	*
-A3	16	yy	4	1	0M	*	0	0	*	*
-A4	16	yy	4	1	0P	*	0	0	*	*
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#pair.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#pair.2.1.cram
deleted file mode 100644
index 246ebd8..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#pair.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#pair.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#pair.3.0.cram
deleted file mode 100644
index 89c1c2f..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#pair.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#pair.sam b/src/test/resources/htsjdk/samtools/cram/xx#pair.sam
deleted file mode 100644
index aa8c77b..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#pair.sam
+++ /dev/null
@@ -1,7 +0,0 @@
- at SQ	SN:xx	LN:20
-a1	99	xx	1	1	10M	=	11	20	AAAAAAAAAA	**********
-b1	99	xx	1	1	10M	=	11	20	AAAAAAAAAA	**********
-c1	99	xx	1	1	10M	=	11	20	AAAAAAAAAA	**********
-a1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
-b1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
-c1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#rg.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#rg.2.1.cram
deleted file mode 100644
index 618a43d..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#rg.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#rg.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#rg.3.0.cram
deleted file mode 100644
index 8b0148b..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#rg.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#rg.sam b/src/test/resources/htsjdk/samtools/cram/xx#rg.sam
deleted file mode 100644
index 2d7efbc..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#rg.sam
+++ /dev/null
@@ -1,13 +0,0 @@
- at HD	VN:1.4	SO:coordinate
- at SQ	SN:xx	LN:20	AS:?	SP:?	UR:?	M5:bbf4de6d8497a119dda6e074521643dc
- at RG	ID:x1	SM:x1
- at RG	ID:x2	SM:x2	LB:x	PG:foo:bar	PI:1111
- at PG	ID:emacs	PN:emacs	VN:23.1.1
- at CO	also test
- at CO	other	headers
-a1	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	**********	RG:Z:x1
-b1	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	**********	RG:Z:x2
-c1	16	xx	1	1	10M	*	0	0	AAAAAAAAAA	**********
-a2	16	xx	11	1	10M	*	0	0	TTTTTTTTTT	**********	RG:Z:x1
-b2	16	xx	11	1	10M	*	0	0	TTTTTTTTTT	**********	RG:Z:x2
-c2	16	xx	11	1	10M	*	0	0	TTTTTTTTTT	**********
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#tlen.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#tlen.2.1.cram
deleted file mode 100644
index ecf3396..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#tlen.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#tlen.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#tlen.3.0.cram
deleted file mode 100644
index ec1b380..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#tlen.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#tlen2.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#tlen2.2.1.cram
deleted file mode 100644
index 558e4dd..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#tlen2.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#tlen2.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#tlen2.3.0.cram
deleted file mode 100644
index add9c38..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#tlen2.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#triplet.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#triplet.2.1.cram
deleted file mode 100644
index 8a1d9cf..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#triplet.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#triplet.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#triplet.3.0.cram
deleted file mode 100644
index 515827e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#triplet.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#triplet.sam b/src/test/resources/htsjdk/samtools/cram/xx#triplet.sam
deleted file mode 100644
index 1255725..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#triplet.sam
+++ /dev/null
@@ -1,7 +0,0 @@
- at SQ	SN:xx	LN:20
- at SQ	SN:yy	LN:20
-a1	67	xx	1	1	10M	=	6	20	AAAAAAAAAA	**********
-a1	35	xx	6	1	10M	=	11	-20	AAAAATTTTT	**********
-a1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
-a1	67	yy	1	1	10M	=	6	15	AAAAAAAAAA	**********
-a1	3	yy	6	1	10M	=	1	-15	AAAAATTTTT	**********
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.2.1.cram b/src/test/resources/htsjdk/samtools/cram/xx#unsorted.2.1.cram
deleted file mode 100644
index 9c55dcf..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.2.1.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.3.0.cram b/src/test/resources/htsjdk/samtools/cram/xx#unsorted.3.0.cram
deleted file mode 100644
index e161bca..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.3.0.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.sam b/src/test/resources/htsjdk/samtools/cram/xx#unsorted.sam
deleted file mode 100644
index 05887a3..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx#unsorted.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at SQ	SN:xx	LN:20
- at SQ	SN:yy	LN:20
-b1	147	yy	11	1	10M	=	1	-20	TTTTTTTTTT	**********
-a1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
-a1	99	xx	1	1	10M	=	11	20	AAAAAAAAAA	**********
-b1	99	yy	1	1	10M	=	11	20	AAAAAAAAAA	**********
-c1	99	xx	1	1	10M	=	11	20	AAAAAAAAAA	**********
-c1	147	xx	11	1	10M	=	1	-20	TTTTTTTTTT	**********
diff --git a/src/test/resources/htsjdk/samtools/cram/xx.fa b/src/test/resources/htsjdk/samtools/cram/xx.fa
deleted file mode 100644
index a233f7d..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx.fa
+++ /dev/null
@@ -1,5 +0,0 @@
->xx
-AAAAAAAAAATTTTTTTTTT
->yy
-AAAAAAAAAATTTTTTTTTT
-
diff --git a/src/test/resources/htsjdk/samtools/cram/xx.fa.fai b/src/test/resources/htsjdk/samtools/cram/xx.fa.fai
deleted file mode 100644
index 97b1a3b..0000000
--- a/src/test/resources/htsjdk/samtools/cram/xx.fa.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-xx	20	4	20	21
-yy	20	29	20	21
diff --git a/src/test/resources/htsjdk/samtools/cram_query_sorted.cram b/src/test/resources/htsjdk/samtools/cram_query_sorted.cram
deleted file mode 100644
index 2397cd6..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram_query_sorted.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta b/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta
deleted file mode 100644
index 9561151..0000000
--- a/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta
+++ /dev/null
@@ -1,40 +0,0 @@
->chr1
-TTCATGCTGAAGCCCTCTTACGATCGTACAGATGCAAATATTAACAAACC
-TTTAAGGGCAAAAAAAAAACAATACAATAATAGAGTACGTTAACACTCCA
-A
->chr2
-CATCTCTACAAGCGCGTCCTACCAGACGCGCTTCCGATCTGAGAGCATAC
-TTTTCATTGGATTCCAGCACAACTCCATTTTTGATCCACTTGACACCTTT
-T
->chr3
-CGTATGCGCTTTTTATGTCGCCCACAGTGCCTAGTATAGCCCCTGCTAAT
-AAAAAGAGATGAATACGTTTACTTAAAAAACTGAAACTAGGAATGTGCAA
-A
->chr4
-CGTGATACCAACTCATGTTCACAGCCAAAGCCTGAAGCTGTCTATTATAT
-TTCTCAACCATAAACTTTTGCCTCAGGCATCCGCAGAATGGTTTGCAGCC
-C
->chr5
-NTCTCATTTAAAAATGGTTATAAAAACATTTATGCTGAAAAGGTGAAGTT
-CATTAATGAACAGGCTGACTGTCTCACTATCGCGTTCGCAAGACGTTATC
-T
->chr6
-NAATTGTTCTTAGTTTCTCGGTTTATGTGCTCTTCCAGGTGGGTAACACA
-ATAATGGCCTTCCAGATCGTAAGAGCGACGTGTGTTGCACCAGTGTCGAT
-C
->chr7
-CAACAGAAGGGGGGATCTGTGTTTGTGTTTCGGATTTCCTGCTGAAAAGG
-TTTTCGGGTCCCCCCCCCATCCCGATTTCCTTCCGCAGCTTACCTCCCGA
-AACGCGGCATCCCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCA
-GCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCCAGAGCATA
-CACAACAGAAGGGGGGATCTGTGTTTGTGTTTCGGATTTCCTGCTGAAAA
-GGTTTTCGGGTCCCCCCCCCATCCCGATTTCCTTCCGCAGCTTACCTCCC
-GAAACGCGGCATCCCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGG
-CAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCCAGAGCA
-TACA
->chr8
-CACATCGTGAATCTTACAATCTGCGGTTTCAGATGTGGAGCGATGTGTGA
-GAGATTGAGCAACTGATCTGAAAAGCAGACACAGCTATTCCTAAGATGAC
-CCCAGGTTCAAATGTGCAGCCCCTTTTGAGAGATTTTTTTTTTGGGCTGG
-AAAAAAGACACAGCTATTCCTAAGATGACAAGATCAGAAAAAAAGTCAAG
-CA
diff --git a/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta.fai b/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta.fai
deleted file mode 100644
index d5e1a06..0000000
--- a/src/test/resources/htsjdk/samtools/cram_query_sorted.fasta.fai
+++ /dev/null
@@ -1,8 +0,0 @@
-chr1	101	6	50	51
-chr2	101	116	50	51
-chr3	101	226	50	51
-chr4	101	336	50	51
-chr5	101	446	50	51
-chr6	101	556	50	51
-chr7	404	666	50	51
-chr8	202	1085	50	51
diff --git a/src/test/resources/htsjdk/samtools/cram_tlen.fasta b/src/test/resources/htsjdk/samtools/cram_tlen.fasta
deleted file mode 100644
index 01b8f8a..0000000
--- a/src/test/resources/htsjdk/samtools/cram_tlen.fasta
+++ /dev/null
@@ -1,41 +0,0 @@
->chr1
-TTCATGCTGAAGCCCTCTTACGATCGTACAGATGCAAATATTAACAAACC
-TTTAAGGGCAAAAAAAAAACAATACAATAATAGAGTACGTTAACACTCCA
-A
->chr2
-CATCTCTACAAGCGCGTCCTACCAGACGCGCTTCCGATCTGAGAGCATAC
-TTTTCATTGGATTCCAGCACAACTCCATTTTTGATCCACTTGACACCTTT
-T
->chr3
-CGTATGCGCTTTTTATGTCGCCCACAGTGCCTAGTATAGCCCCTGCTAAT
-AAAAAGAGATGAATACGTTTACTTAAAAAACTGAAACTAGGAATGTGCAA
-A
->chr4
-CGTGATACCAACTCATGTTCACAGCCAAAGCCTGAAGCTGTCTATTATAT
-TTCTCAACCATAAACTTTTGCCTCAGGCATCCGCAGAATGGTTTGCAGCC
-C
->chr5
-NTCTCATTTAAAAATGGTTATAAAAACATTTATGCTGAAAAGGTGAAGTT
-CATTAATGAACAGGCTGACTGTCTCACTATCGCGTTCGCAAGACGTTATC
-T
->chr6
-NAATTGTTCTTAGTTTCTCGGTTTATGTGCTCTTCCAGGTGGGTAACACA
-ATAATGGCCTTCCAGATCGTAAGAGCGACGTGTGTTGCACCAGTGTCGAT
-C
->chr7
-CAACAGAAGGGGGGATCTGTGTTTGTGTTTCGGATTTCCTGCTGAAAAGG
-TTTTCGGGTCCCCCCCCCATCCCGATTTCCTTCCGCAGCTTACCTCCCGA
-AACGCGGCATCCCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCA
-GCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCCAGAGCATA
-CACAACAGAAGGGGGGATCTGTGTTTGTGTTTCGGATTTCCTGCTGAAAA
-GGTTTTCGGGTCCCCCCCCCATCCCGATTTCCTTCCGCAGCTTACCTCCC
-GAAACGCGGCATCCCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGG
-CAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCCAGAGCA
-CAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCCAGAGCA
-TACA
->chr8
-CACATCGTGAATCTTACAATCTGCGGTTTCAGATGTGGAGCGATGTGTGA
-GAGATTGAGCAACTGATCTGAAAAGCAGACACAGCTATTCCTAAGATGAC
-CCCAGGTTCAAATGTGCAGCCCCTTTTGAGAGATTTTTTTTTTGGGCTGG
-AAAAAAGACACAGCTATTCCTAAGATGACAAGATCAGAAAAAAAGTCAAG
-CA
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/cram_tlen.fasta.fai b/src/test/resources/htsjdk/samtools/cram_tlen.fasta.fai
deleted file mode 100644
index 4f7bd29..0000000
--- a/src/test/resources/htsjdk/samtools/cram_tlen.fasta.fai
+++ /dev/null
@@ -1,8 +0,0 @@
-chr1	101	6	50	51
-chr2	101	116	50	51
-chr3	101	226	50	51
-chr4	101	336	50	51
-chr5	101	446	50	51
-chr6	101	556	50	51
-chr7	454	666	50	51
-chr8	202	1136	50	51
diff --git a/src/test/resources/htsjdk/samtools/cram_tlen_reads.sorted.sam b/src/test/resources/htsjdk/samtools/cram_tlen_reads.sorted.sam
deleted file mode 100644
index 0d1947e..0000000
--- a/src/test/resources/htsjdk/samtools/cram_tlen_reads.sorted.sam
+++ /dev/null
@@ -1,19 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at SQ	SN:chr4	LN:101
- at SQ	SN:chr5	LN:101
- at SQ	SN:chr6	LN:101
- at SQ	SN:chr7	LN:454
- at SQ	SN:chr8	LN:202
- at RG	ID:0	SM:Hi,Mom!	PL:ILLUMINA
- at PG	ID:1	VN:2.0	PN:Hey!
-both_reads_align_clip_marked	83	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_present_only_first_aligns	89	chr7	1	255	101M	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-read_2_too_many_gaps	83	chr7	1	255	101M	=	302	201	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_align_clip_adapter	147	chr7	16	255	101M	=	21	-96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_align_clip_adapter	99	chr7	21	255	101M	=	16	96	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_align_clip_marked	163	chr7	302	255	101M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-read_2_too_many_gaps	163	chr7	302	255	10M1D10M5I76M	=	1	-201	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-both_reads_present_only_first_aligns	165	*	0	0	*	chr7	1	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram b/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram
deleted file mode 100644
index 5609d5e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram.bai b/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram.bai
deleted file mode 100644
index db53e08..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram_with_bai_index.cram.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram b/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram
deleted file mode 100644
index 5609d5e..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram.crai b/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram.crai
deleted file mode 100644
index 309f06f..0000000
Binary files a/src/test/resources/htsjdk/samtools/cram_with_crai_index.cram.crai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/empty.bai b/src/test/resources/htsjdk/samtools/empty.bai
deleted file mode 100755
index 237f2e5..0000000
Binary files a/src/test/resources/htsjdk/samtools/empty.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/empty.bam b/src/test/resources/htsjdk/samtools/empty.bam
deleted file mode 100644
index c8de04f..0000000
Binary files a/src/test/resources/htsjdk/samtools/empty.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bai b/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bai
deleted file mode 100755
index 237f2e5..0000000
Binary files a/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bam b/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bam
deleted file mode 100644
index eeb875c..0000000
Binary files a/src/test/resources/htsjdk/samtools/empty_no_empty_gzip_block.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/hg19mini.dict b/src/test/resources/htsjdk/samtools/hg19mini.dict
deleted file mode 100644
index 8c844a8..0000000
--- a/src/test/resources/htsjdk/samtools/hg19mini.dict
+++ /dev/null
@@ -1,5 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:1	LN:16000	M5:8c0c38e352d8f3309eabe4845456f274	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/hg19mini.fasta
- at SQ	SN:2	LN:16000	M5:5f8388fe3fb34aa38375ae6cf5e45b89	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/hg19mini.fasta
- at SQ	SN:3	LN:16000	M5:94de808a3a2203dbb02434a47bd8184f	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/hg19mini.fasta
- at SQ	SN:4	LN:16000	M5:7d397ee919e379328d8f52c57a54c778	UR:file:///Users/cmn/projects/htsjdk/testdata/htsjdk/samtools/hg19mini.fasta
diff --git a/src/test/resources/htsjdk/samtools/hg19mini.fasta b/src/test/resources/htsjdk/samtools/hg19mini.fasta
deleted file mode 100644
index 038dd84..0000000
--- a/src/test/resources/htsjdk/samtools/hg19mini.fasta
+++ /dev/null
@@ -1,804 +0,0 @@
->1 dna:chromosome chromosome:GRCh37:1:1:16000:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTA
-ACCCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAAC
-CCTAACCCTAACCCTAACCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCC
-TAACCCTAAACCCTAAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCAACCCCAACCCCAACCCCAACCCCAACCC
-CAACCCTAACCCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCC
-TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAACCCTAACCCTCGCGGTACCCTC
-AGCCGGCCCGCCCGCCCGGGTCTGACCTGAGGAGAACTGTGCTCCGCCTTCAGAGTACCACCGAAATCTGTGCAGAGGAC
-AACGCAGCTCCGCCCTCGCGGTGCTCTCCGGGTCTGTGCTGAGGAGAACGCAACTCCGCCGTTGCAAAGGCGCGCCGCGC
-CGGCGCAGGCGCAGAGAGGCGCGCCGCGCCGGCGCAGGCGCAGAGAGGCGCGCCGCGCCGGCGCAGGCGCAGAGAGGCGC
-GCCGCGCCGGCGCAGGCGCAGAGAGGCGCGCCGCGCCGGCGCAGGCGCAGAGAGGCGCGCCGCGCCGGCGCAGGCGCAGA
-CACATGCTAGCGCGTCGGGGTGGAGGCGTGGCGCAGGCGCAGAGAGGCGCGCCGCGCCGGCGCAGGCGCAGAGACACATG
-CTACCGCGTCCAGGGGTGGAGGCGTGGCGCAGGCGCAGAGAGGCGCACCGCGCCGGCGCAGGCGCAGAGACACATGCTAG
-CGCGTCCAGGGGTGGAGGCGTGGCGCAGGCGCAGAGACGCAAGCCTACGGGCGGGGGTTGGGGGGGCGTGTGTTGCAGGA
-GCAAAGTCGCACGGCGCCGGGCTGGGGCGGGGGGAGGGTGGCGCCGTGCACGCGCAGAAACTCACGTCACGGTGGCGCGG
-CGCAGAGACGGGTAGAACCTCAGTAATCCGAAAAGCCGGGATCGACCGCCCCTTGCTTGCAGCCGGGCACTACAGGACCC
-GCTTGCTCACGGTGCTGTGCCAGGGCGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGCTCTCTTGCTTAGAGTGGTGGC
-CAGCGCCCCCTGCTGGCGCCGGGGCACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGGCACGCCGCCTGCTGGCAGCT
-AGGGACATTGCAGGGTCCTCTTGCTCAAGGTGTAGTGGCAGCACGCCCACCTGCTGGCAGCTGGGGACACTGCCGGGCCC
-TCTTGCTCCAACAGTACTGGCGGATTATAGGGAAACACCCGGAGCATATGCTGTTTGGTCTCAGTAGACTCCTAAATATG
-GGATTCCTGGGTTTAAAAGTAAAAAATAAATATGTTTAATTTGTGAACTGATTACCATCAGAATTGTACTGTTCTGTATC
-CCACCAGCAATGTCTAGGAATGCCTGTTTCTCCACAAAGTGTTTACTTTTGGATTTTTGCCAGTCTAACAGGTGAAGCCC
-TGGAGATTCTTATTAGTGATTTGGGCTGGGGCCTGGCCATGTGTATTTTTTTAAATTTCCACTGATGATTTTGCTGCATG
-GCCGGTGTTGAGAATGACTGCGCAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCA
-CCGGGTATCATTCACCATTTTTCTTTTCGTTAACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTAT
-TTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTT
-CATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTG
-GAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCATGTAACTTAATACCACAA
-CCAGGCATAGGGGAAAGATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTT
-GTGCTCATCTCCTTGGCTGTGATACGTGGCCGGCCCTCGCTCCAGCAGCTGGACCCCTACCTGCCGTCTGCTGCCATCGG
-AGCCCAAAGCCGGGCTGTGACTGCTCAGACCAGCCGGCTGGAGGGAGGGGCTCAGCAGGTCTGGCTTTGGCCCTGGGAGA
-GCAGGTGGAAGATCAGGCAGGCCATCGCTGCCACAGAACCCAGTGGATTGGCCTAGGTGGGATCTCTGAGCTCAACAAGC
-CCTCTCTGGGTGGTAGGTGCAGAGACGGGAGGGGCAGAGCCGCAGGCACAGCCAAGAGGGCTGAAGAAATGGTAGAACGG
-AGCAGCTGGTGATGTGTGGGCCCACCGGCCCCAGGCTCCTGTCTCCCCCCAGGTGTGTGGTGATGCCAGGCATGCCCTTC
-CCCAGCATCAGGTCTCCAGAGCTGCAGAAGACGACGGCCGACTTGGATCACACTCTTGTGAGTGTCCCCAGTGTTGCAGA
-GGTGAGAGGAGAGTAGACAGTGAGTGGGAGTGGCGTCGCCCCTAGGGCTCTACGGGGCCGGCGTCTCCTGTCTCCTGGAG
-AGGCTTCGATGCCCCTCCACACCCTCTTGATCTTCCCTGTGATGTCATCTGGAGCCCTGCTGCTTGCGGTGGCCTATAAA
-GCCTCCTAGTCTGGCTCCAAGGCCTGGCAGAGTCTTTCCCAGGGAAAGCTACAAGCAGCAAACAGTCTGCATGGGTCATC
-CCCTTCACTCCCAGCTCAGAGCCCAGGCCAGGGGCCCCCAAGAAAGGCTCTGGTGGAGAACCTGTGCATGAAGGCTGTCA
-ACCAGTCCATAGGCAAGCCTGGCTGCCTCCAGCTGGGTCGACAGACAGGGGCTGGAGAAGGGGAGAAGAGGAAAGTGAGG
-TTGCCTGCCCTGTCTCCTACCTGAGGCTGAGGAAGGAGAAGGGGATGCACTGTTGGGGAGGCAGCTGTAACTCAAAGCCT
-TAGCCTCTGTTCCCACGAAGGCAGGGCCATCAGGCACCAAAGGGATTCTGCCAGCATAGTGCTCCTGGACCAGTGATACA
-CCCGGCACCCTGTCCTGGACACGCTGTTGGCCTGGATCTGAGCCCTGGTGGAGGTCAAAGCCACCTTTGGTTCTGCCATT
-GCTGCTGTGTGGAAGTTCACTCCTGCCTTTTCCTTTCCCTAGAGCCTCCACCACCCCGAGATCACATTTCTCACTGCCTT
-TTGTCTGCCCAGTTTCACCAGAAGTAGGCCTCTTCCTGACAGGCAGCTGCACCACTGCCTGGCGCTGTGCCCTTCCTTTG
-CTCTGCCCGCTGGAGACGGTGTTTGTCATGGGCCTGGTCTGCAGGGATCCTGCTACAAAGGTGAAACCCAGGAGAGTGTG
-GAGTCCAGAGTGTTGCCAGGACCCAGGCACAGGCATTAGTGCCCGTTGGAGAAAACAGGGGAATCCCGAAGAAATGGTGG
-GTCCTGGCCATCCGTGAGATCTTCCCAGGGCAGCTCCCCTCTGTGGAATCCAATCTGTCTTCCATCCTGCGTGGCCGAGG
-GCCAGGCTTCTCACTGGGCCTCTGCAGGAGGCTGCCATTTGTCCTGCCCACCTTCTTAGAAGCGAGACGGAGCAGACCCA
-TCTGCTACTGCCCTTTCTATAATAACTAAAGTTAGCTGCCCTGGACTATTCACCCCCTAGTCTCAATTTAAGAAGATCCC
-CATGGCCACAGGGCCCCTGCCTGGGGGCTTGTCACCTCCCCCACCTTCTTCCTGAGTCATTCCTGCAGCCTTGCTCCCTA
-ACCTGCCCCACAGCCTTGCCTGGATTTCTATCTCCCTGGCTTGGTGCCAGTTCCTCCAAGTCGATGGCACCTCCCTCCCT
-CTCAACCACTTGAGCAAACTCCAAGACATCTTCTACCCCAACACCAGCAATTGTGCCAAGGGCCATTAGGCTCTCAGCAT
-GACTATTTTTAGAGACCCCGTGTCTGTCACTGAAACCTTTTTTGTGGGAGACTATTCCTCCCATCTGCAACAGCTGCCCC
-TGCTGACTGCCCTTCTCTCCTCCCTCTCATCCCAGAGAAACAGGTCAGCTGGGAGCTTCTGCCCCCACTGCCTAGGGACC
-AACAGGGGCAGGAGGCAGTCACTGACCCCGAGACGTTTGCATCCTGCACAGCTAGAGATCCTTTATTAAAAGCACACTGT
-TGGTTTCTGCTCAGTTCTTTATTGATTGGTGTGCCGTTTTCTCTGGAAGCCTCTTAAGAACACAGTGGCGCAGGCTGGGT
-GGAGCCGTCCCCCCATGGAGCACAGGCAGACAGAAGTCCCCGCCCCAGCTGTGTGGCCTCAAGCCAGCCTTCCGCTCCTT
-GAAGCTGGTCTCCACACAGTGCTGGTTCCGTCACCCCCTCCCAAGGAAGTAGGTCTGAGCAGCTTGTCCTGGCTGTGTCC
-ATGTCAGAGCAACGGCCCAAGTCTGGGTCTGGGGGGGAAGGTGTCATGGAGCCCCCTACGATTCCCAGTCGTCCTCGTCC
-TCCTCTGCCTGTGGCTGCTGCGGTGGCGGCAGAGGAGGGATGGAGTCTGACACGCGGGCAAAGGCTCCTCCGGGCCCCTC
-ACCAGCCCCAGGTCCTTTCCCAGAGATGCCTGGAGGGAAAAGGCTGAGTGAGGGTGGTTGGTGGGAAACCCTGGTTCCCC
-CAGCCCCCGGAGACTTAAATACAGGAAGAAAAAGGCAGGACAGAATTACAAGGTGCTGGCCCAGGGCGGGCAGCGGCCCT
-GCCTCCTACCCTTGCGCCTCATGACCAGCTTGTTGAAGAGATCCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACT
-GCAACGGGAAAGCCACAGACTGGGGTGAAGAGTTCAGTCACATGCGACCGGTGACTCCCTGTCCCCACCCCCATGACACT
-CCCCAGCCCTCCAAGGCCACTGTGTTTCCCAGTTAGCTCAGAGCCTCAGTCGATCCCTGACCCAGCACCGGGCACTGATG
-AGACAGCGGCTGTTTGAGGAGCCACCTCCCAGCCACCTCGGGGCCAGGGCCAGGGTGTGCAGCACCACTGTACAATGGGG
-AAACTGGCCCAGAGAGGTGAGGCAGCTTGCCTGGGGTCACAGAGCAAGGCAAAAGCAGCGCTGGGTACAAGCTCAAAACC
-ATAGTGCCCAGGGCACTGCCGCTGCAGGCGCAGGCATCGCATCACACCAGTGTCTGCGTTCACAGCAGGCATCATCAGTA
-GCCTCCAGAGGCCTCAGGTCCAGTCTCTAAAAATATCTCAGGAGGCTGCAGTGGCTGACCATTGCCTTGGACCGCTCTTG
-GCAGTCGAAGAAGATTCTCCTGTCAGTTTGAGCTGGGTGAGCTTAGAGAGGAAAGCTCCACTATGGCTCCCAAACCAGGA
-AGGAGCCATAGCCCAGGCAGGAGGGCTGAGGACCTCTGGTGGCGGCCCAGGGCTTCCAGCATGTGCCCTAGGGGAAGCAG
-GGGCCAGCTGGCAAGAGCAGGGGGTGGGCAGAAAGCACCCGGTGGACTCAGGGCTGGAGGGGAGGAGGCGATCTTGCCCA
-AGGCCCTCCGACTGCAAGCTCCAGGGCCCGCTCACCTTGCTCCTGCTCCTTCTGCTGCTGCTTCTCCAGCTTTCGCTCCT
-TCATGCTGCGCAGCTTGGCCTTGCCGATGCCCCCAGCTTGGCGGATGGACTCTAGCAGAGTGGCCAGCCACCGGAGGGGT
-CAACCACTTCCCTGGGAGCTCCCTGGACTGGAGCCGGGAGGTGGGGAACAGGGCAAGGAGGAAAGGCTGCTCAGGCAGGG
->2 dna:chromosome chromosome:GRCh37:2:1:16000:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-CGTATCCCACACACCACACCCACACACCACACCCACACACACCCACACCCACACCCACACACACCACACCCACACACCAC
-ACCCACACCCACACACCACACCCACACCACACCCACACACCACACACCACACCCACACCCACACACACCACACCCACACA
-CCACACCCACACACACCCTAACCCTAACCCCTAACCCCTAACCCTAACCCTACCCGAACCCTAACCCTAACCCTAACCCC
-TAACCCTAACCCCTAACCCTAACCCTAACCGTAACCCTAACCCTTTACCCTAACCCGAACCCCTAACCCCTAACCCCTAA
-CCCTTAACCCTAACCCTTAACCCTGACCCTGACCCTGACCGTGACCCTGACCCTAACCCGAACCCGAACCCGAACCCCGA
-ACCCCGAACCCCGAACCCCAACCCCAACCCCAACCCCAACCCTAACCCCTCACCCTCACCCTCGACCCCCGACCCCCGAC
-CCCCGACCCCCACCCCGAACCCGACCCCGACCCCGACCCAAACCCTAACCCTAAAACCCTAACCCTAGCCCTAGCCCTAG
-CCCTAGCCCTAACCCCTAACCCCTAACCCTAAGCCGAAGCCTAACTCGTGTCTGACTTTGAGTATTCAGTGCTGCAAACA
-GGAAGTATTTTATTCACCGTCGATGCGGCCCCGAGGGGTCCCAAAGCGAGGCAGTGCCCCCAAACTCTGTCCTGAGGAGA
-ATGCTGCTTCGCCTTTACGGTGTCCACCGGGTGTGTGCTCAGCAAAACGCAGCTCCGCCTTCGCGGTGCCCGTGGCCCAC
-CCGCCCGGGTCTGTGGTGAAGAGAACGCAGCTCCTAGTCGCAAAGGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCG
-CGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGCAGAGAGG
-CGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGC
-AGAGAGGCGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGCAGAGAGGCGCACCGCGCCCGCG
-CAGGCGCAGAGAGGCGCACCGCGCCCGCGCAGGCGCACACAGGCGCACCGCGCCCGCGCAGGCGCACACAGGCGCACCGC
-GCCCGCGCAGGCGCACACAGGCGCACCGCGCCCGCGCAGGCGCACACAGGCGCACCGCGCCCGCGCAGGCGCACACAGGC
-GCACCGCGCCCGCGCAGGCGCACAGAGGGTCGCTGGGCAGGGGTTGGGGGTCGTACTGCAGGTGCACAGCTGCATAAGCG
-CACAGTCGCAAGCCGCCAGGCGCGGAGCGTGGGGGTGGCGGGGTGCAGGCGCAGAGACGGACGTCCCCGGGGGCGCGGCA
-CAGAGACAGGTGGAACCTCAATAATCCGAAAAGCCGGGCTCGGGAACCCCCTGCTTGCAACCGGGCACTACAGGATCCGC
-TTGCCCACGGTGCTCTGCCAGTGCGCCCCTTGCTGGCCACTAGGGCAACTGCAGGGCTATCTTGCTTACAGTGGTGTCCA
-GCGCCCTCTGCTGGCGTCGGAGCATTGCAGGGCTCTCTTGCTCGCAGTGTAGTGGCGGCACGCCGCCTGCTGGCAGCTAG
-GGACATTGCAGAGCCCTCTTGCTCACAGTGTAGTGGCAGCACGCCCGCCTCCTGGCAGCTAGGGACAGTGCCAGGCCCTC
-TTGCTCCAAGTGTAGTGGCAGCTGGCTCCCCCGCTGGCAGCTGGGGACACTGACGGGCCCTCTTGCTTGCAGTATAGTCG
-TCGCACGCCTTCTGGCCGCTGGCGGCAGTACAGGATCCTCTTGCTCACAGTGTAGGGCCCTCTTGCTCCCGGTGTGACGG
-CTGGCGTCCCCTACTGGCCGCCTCCTGCACCAATTAAAGTCGGAGCACCGGTTACGCCCCATCACTTCTGTAAATTCAAA
-CTGAAACGGAGCTATTAGTGGGGAGAGCTGATGTCCCAGTTCTTGTTTAACTTGGAAGAAAGATTTTCACCAAGAGGCAG
-TACAAAGATGACAGATAACTTCATTGAAAAGAAATACAGTGTAAACACCTTACTGTAGAAAAATAGGGAGGACAGGGCTG
-ATCGTGCATGAAAACAGCCTAAGAGTCTTGTGCAGGGAAGTTACTCTAACTGTAACTTACAACAACTTAGTAGATTATAC
-TTTTGTAAACAGAAGTGAAGCATTTATCTTTTTTCTTGCTTGATTATTTACATAATCAAGCAAAATCTAACAAAACAATA
-ATATTTTAACAATAATATTTTTAAAACAATAATAGTCTTACTTTGATTATGATCAAAAATGATGGTTACTACAGAGAGAA
-TTTTTATGTTTCAATGGAAAAGTATAACATGGCCAGGCATGGTTGCACATGCCTATAATTACAGCACTTTGGGAGGCCAG
-GAGTTCAACATCAGCCTGGGCAACATGGTGAAACCACGTCTCTACCAAAAATACAAAAATTAGATGGGCATGGTGGCATG
-TGCCTGTAGTCCCAGGTAATCAGGAGGCTGAGGAGGGAGGATCGTTTGCACCCGGGAAGTAGAGGTTGCAGTGAGCTGAG
-ATTGCACCTTTGCACTCCAGCCTAGGCGACAGAGCCAGATCCTGTCTCAAAAAAAATTTTTTTAAAGGAAAACTACAGCC
-ATTGTGGGTTATCAGATTCTAGTCTTGTTTCTTGTTTCTGGGCTATTTTTACCTCTTTGTAAACTGCATCCTGCCATCTG
-ATGAATTTTGTCCCACAATGATACTTGGGGAACAAGAAGCCAATTATTGTCTCTCCTACTAATGTATCTATTGTCAGTTA
-ATTTGAAGGTCTCCAACCCTGGAACAAAGTTAGAAGAGGAAGGTTCTGCTCCCCAAAATGCATAACCAAATTGTGGTACA
-TTCATGTAATGGAACACTATTTAGCCATAGAAACGAACAAGCTATCAACTCACACAAAGACATGAGTGAATCTTGCATGC
-ACATTGCTAAGTGGAAGAAGACAGTCTGAGGAGGATACACACAGTGTGACCTCATTTAATGAGACACTGGAGAAGGCAAA
-CTACACAGATGGGAAGCCATTGGCTCCATGGGGTGGGGGTTTGAAGCATTCCATATGATACTTTAATAGTGGGATATCTG
-CCACAATGCATTTGTCAAAATATGCAGAATTTTACAGCCATATGGTTAGAGCAAACTCTATTCAAATTAAATAAAATTAC
-TCAGGATGTGGAGTATCCCAGGACAGAATACATCATGTGAAAAAGCATTTATGCTACAAATTACTATGGTAATTATGCTA
-CAAATTTATGGTACCATAAATTACCATAGTAATTTGTAGCATAAATTTGTACTATGGTACAAATTACATGGGAGAGTGAA
-GGTGGGTTAAAACATTCATATTAAAGAACTTCCACTCAGATTGCAAGAAAAGAGAGAGGAATGGAGATGGTAGCACAAGT
-CCCTACAATAAAAGTAGATGTTTTGAGATCAGTTCTATTTGTTCTGACAAAAATTAAAGACAGAAACCAAAGTTTAGCCT
-GAGGCAACAATTAGTTGGGGAATAAGCCAGAGGCATATATGGCATAGACACATTTAAACATTTCTCTCATATTAATACAA
-ATACTAAAATGACATATCAATTGATTCCAAATAAAACAAATATTTAAAACATTTAATGAATAAACACTGGGGTCTACAGT
-AGTAGTTAAAGGAGATCTCACAAACAGGTTTGGTTTTTGAAGGTTAGAAATGATGGTCTAGAGAATTCATTTCATTCCAG
-AGACAGAAAGAGGAATATCTTGGGTTCCTTCAGGAATACATCTGGCTTTGCCTCATCTTTGTGTGTTTGAACTATGCATA
-CGGCAGAAGAAAACATGGGGGTTTCAGAGTTTTTTTTTTTTTTGAGACAGAGTCTTGCTCTGTTGCCCAGGCTGGAGTGC
-CGTGGTGTTATCTCGCCTCACTGCAACCTCTGCCTTCTGGGTTCACACCATTCTCCTGCCTCAGCCTCCGGAGTAGCTGG
-GACTACAGGTGCACCACACCTGGCTACTTTTTCTGTATTTTTTAGTAGAGATGGGGTTTCACCATGTTAGCCAGAATGGT
-CTAGTTCTCCTGACCTTATGATCCAACCGCCTCAGCCGCCAAGAATGATGGGATTACAGGGGTGAACCACCACGCCCGGC
-TAAGGATTTCACAGATTTAAGGTGCTAAAATCACTGGGTTCTCTAAGAAGCCTGGGATTCTTCTGCTGGAAAAATAAGTT
-TGTTGAGAAAAATGAGTTGGAGGAGGTTGTTATTGAAGTGAAGCAGAATTGTTTTTACTAATCTGCTTATTACCCACTCT
-GAAGTGTGGAAACAAATTTTTCATGCACAAGGTCATCTTACTGTTACTGGAATGCAGTGGAAAGAGAACAGATTAGTTTT
-TCTCTCTCAGAACACAACCACTAGAAACGTCCTATGTCAGATGAGATATTGCCCAGTTATTTTCAAAAGACTGAAAAATC
-CTGGATGTAAATGTTTGCTGCAAAATAAATACATGCTAGAAACAGAAGCATCTGGGTCACAGCTATATTAGAGCTACCTG
-TGTTCCCCTGTTACTGAGATTAAAACAAAAATGTCCAATAAAAATCATTCACAGTGTGGGAGAGGGGAAGTTGAAGGATG
-GAAAGGCCAGGCATAAAAAGATTTCAGAATTTCAGTCCATAAGGAAGTTGCTTTGTGCATTGTCTGTTGCTGTGTGCAAG
-GTGAAGGCTGGGGCAAGAAAACGTGCAGTAACAAGGGCTCCTTTGTCCATCTCACCTCTCTAGATACCAAGTTTCAGACA
-TGTTGCATTTTAATTGAAAAGTTGATATAACTTTTTTTAAAAGAATACTTGCAGTGCTTGAAGTGTAAAAAGCTGCTGTG
-ACAAAAAAAAAAGCAGGGAAAGGGATTTTTTTTAAAAAAGCAAACAGCAACAATAAAAAACCCACAAACAACAAATAACA
-AACAAAAAAACAGAGGAAGAAGTCGAAACACCCTGGGCTGAGACTATTTCCAGGAAGGGGCTACGAAAGGCAGTTGGAAA
-TTCCATTTTCTTTGCAACTGTGGGTTTTCTGGCCTGCTTCCTTTCTAAAGTATATTACTTTCTTTTTGGTTCATGAAGTT
-ATCCCTTTGTGTCTTCTGGAACAGCTATGTATTTTCTTTATCTATCATCTAGCTACCTGCCTATCATCTATCTGTCTTTT
-CTGCCTTTTGCTATCAAAAGCTTGGGTCAAGCAGGATAGAATTCCAGTGTATGTTCACTCTACCATTTAAAACAAGAGCT
-CTTGTAGGCATTCTTCATCACATCACAAACCTGAGCTTTCTAAAACAGGGTGTGGCAAACTACCATGCATGGGCCATGTC
-TGACACAGTCTGCATTTGTAAGTAAAGTTGTATTGGGACAAAGCCACATAGATGTGTTATATAACATCTCTGGCTACTTT
-CATAGTACAATGGAAGAGCTGAGTCATTGAGACAGAGACCACATGGCTTGGAAAACTTAAAATATTTAACATTTTGCCCT
-TTGCAGAAAATACTTGCTAACTCTTGTTTTAAAAGATCTTTGTTTAGAATGCTACCTGTTGCCTTCTGGGTAGAATCACA
-ACTATATACCACAATAGACACAACTTGAACCCTGCTTCTATATCCAGCCTCATCTATTATTTCCTCTCCTTCTTATTTTC
-CTTCTGGCCGTGCTGATGGATTGTCAGCTTCCCAGATGTGCGAGAATCTCTCCTCCCTTCCCCACATTCTCATGCTCTCC
-CTCTGCCTCTGGAGAACTACCTGCCCCATCTCTCATGATAAATCCTTTCTTCATTCTTTATGTTGCAGCCCCTTTGCTCC
-TTCCTTAAGGATGTCTATCTGGCTCTATTTTGGGTGACATGCTCCTTCTGCATCTCCCAGAGCCAGCCTGTGTGTGTCAG
->3 dna:chromosome chromosome:GRCh37:3:1:16000:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
->4 dna:chromosome chromosome:GRCh37:4:1:16000:1
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-ACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTTAACCCTTAACCCTAACCCTAACCCTAA
-CCCTAACCCTAACCCTAACCCTAACCCTAACCCTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCC
-TAACGCTAACCCTAACCCTAACCCTAACCCTAACCCTCATTATTCTCGGCTGCAAAGAGGAAGGATCTTTACCGTGGATG
-TGGCCCCCAGTTGTCCCAAAATGAAGCAGTGCCCCCAACGTCTGTGGAGAGGCATGCGCTGCTCCACCTTCGGGATGTCC
-CCCGCGTCTGTGCTGAGCAGAATGCAGCTCCGTTATCGCGTTCCCCCCGAAGTCTCTGCAGAGGAAAACGGAGCTCCTCC
-TTCGCGATGCTCTCCAGGTCTGCGCTGAGGAGAACGCAGCTCCGCCCTCGCAAAGGCATAGCGCCATCGCAGGCGCAGAA
-AAAAACGTCGGTGCAGCGCAGGCGCAGAGAAAAACGACGGCGCGTCCCTGGGGGGCGCGGCGCAGGCCCAGAGAGGCATG
-CCACCGTTGCGCCGGGGCGTGGGCGCGGCGCAGACGCAGAGACGCACGCCGGCGCAGCGCCGGGATGGGAGCGCGGCCCA
-GGCGCAGACACGGACGGCAGCGTGGCGCCTGGCCGGAGGCGCGACGCAGGCCCAGACACACACGGCGGCGCGGCGCCATG
-ATGGGACCCCGCGCAGGCGCACAGACGGATGGTGGCGCGGCGCAGGCGCAGTAGAAAAACGCCAGCGCGGTGCGGGGGGC
-GCGGCGCAGGCACAGGCGCAGAGACGGACGCCGACGGGGCGCAGGCGCAGAGACGGACGCCGCCGGGGCGCAGGCGCAGA
-GACGGACGCCGCCGCGGCGCAGGCGCAGAGACGGACGCCGCCGCGGCGCAGGCGCAGAGACGGACGCCGCCGCGGCGCAG
-GCGCAGAGACGGACGCCGCCGCGGCGCAGGCGCAGAGACGGACGCCGCCGCGGCGCCGTGGCGGTGGCAAGAGTCACGCG
-GAGAGATGCACGGCTGCGTGGCGCAGGCGCAGAGAAAAACGCCGGCGCGTCCCCTATGGGCGCGGCGGAGGCCCAGAGAC
-GCACGCCGGCGCGGCGCCGGGGCGGGGGTCGGGGCGCAGGCGCAGAGAAAAACGCCGGCGCGGCGCCGGGGCGGGGGTCG
-CGGCGCAGGCGCAGAGACCCACGCCGGGGCGGGGGCGCGGCGCAGGCGCAGACACGCACGCCGGGGCAGGGGCGCGGCGC
-AGGCCCAGAGACGCACGCCGGCGCGGCGCCGGGGCGGGAGCTCCGCGCAGGGGCAGAAAAGGACGCTGGCGCGGCGCAGG
-CGCAGAAAAAAAATGGCGGCGCAGCGCAGGCGCCGAGAAAAGCGCCAGCGCCGGGGGTCGCGGCGCAGGCGCAGAGAAAA
-ACGCCAGCGCGGCGCCGGCGCAAAGACGGGCGCAGGCGCAGAGTCGGGCGCTGGCGCGTCGCCGAGGTGGGGGCGCGATG
-CACGCGCAGAGACGCACGGCTGCGTGGCGCAGACGCAGAGAAGAACGCGAGCGCGGCGCCGAGGACAAGGCGCAGGCGCG
-GAGACGCACGCCAGCGCGGGGGCGAGGCGCAGGCGCGGAGATGCACTCCGCCAGGCGCGGGGAGGGGGGCGCGGCGCAGG
-CGCAGTGACGCACGCCGCCTGGGGCGCAGCGCAGAGACAGGCGGAACCTCAGTAATCTGAAAAGCCAGGTTGCCCCCTCC
-TTGCGGCCGGGCACTAAAGGGCCCACTTGCTGAAGGCGCTGTGCCAGCGTGCCCCCTGCTGGTGACTGGGGCAACTGCAG
-GGTTCTCTTGCTTCCATTAGTGGCCAGCGGCCCCTGCTGGCGGCGGGGCACCGCAGGGTCCTCTTGCACACAGTATAGTG
-GCGGCATGCCGCCTGCTGGCAGCTGGAGACATTGCAGGGCTCTCTTGCTCATAGTATAGTGACAGGACGCCCGCCTGCTG
-GCAGCTGGGGACACTGCCGGCCACTCTTGCTCCAAGTGTAGTGGCTGTTGGCTCCCCTGCTGGCAGCTGGGGACACTGCC
-GGGCCCTCTTGCTTGCAGTTTACTGGGGGCACGCCCCCTTCTGGCCGCTTGGGGCACTACAGGATGCTCTTGCTCACAGT
-GTAGTGGCAGCTCGCCGCCTGCTGGCAACCAGGGTACTGCAGGGTTCTCTTGCTCATGGTGTGGTGCCCGTCCACCACCT
-GCTGGCAGCTAAGGACACTGCAGGGCCCTCTTGCTCAGAGTGTAGTCGTCGTACACCCCCTGCTGGCAGCTGGGGACGCT
-GCCGGGACTTTTCCTGGCACTGTCGTGGCAGCACACTACCTGCAGGCAGATGGGGACTATGCAGGGACCTCTTGTTCAGG
-GTGTGAGGGCTGGCACGCCCTACTGGCCGCCTCCTGCACCACTTAAAGTCGGAGCGCCAGTTAAGCACCATCAGTTCTGG
-AAATTGAAACTGAAATGGAGCTATTACTGAGGAGAGTTGATGTCCCAGTTCTTGTCTAACTTGGAAGAAAGATTTTTCAC
-CAAGAGGCAGTAAAAACATGGCAGATAACTTCATTGAAAACAAATACAGTGTAAAGAGCTTATTGTAGAATAATAGGGAG
-GAGTGGGCTGATTGTGCAGGAAAACAGCCTGAGAGTCCTGTGCAGGGAATTTTATTTTGGACTTCTTCACATTTCTGCCT
-CTGTCTCAAGTCTCCACCTGTTTTCTTTGTCTGGTTTTCCTGCTACTGCCTTAGGTCCCTGAGTTGCCCCACTTAGGCTT
-ATGGGACCTCCTCACTGTTGGTTGAGGCACATGTGTGCTGATCAATCCGAATCCACTCTGGTACCAGGCTCCTTCCCCCC
-ATCCCAGGCAGGCTGACAGCGGTCATGTTTCTGCCTACAGCGCCTGCCTATCTCTTTTGAATGTCCTTCTCTACACTACT
-CTGTACTTATGGTGCCAGGTTTCTCTTAAGAATGTCCCCTTTGTCCTTCTTATCAGCATGTAGCCAGCAATATTGTGACA
-TTTTTACTGCAGAGTGAATGATGACTGGGGCATCTTAAATGGAGTTCTGGGGTGTTTCTTTCTGCATAGGTACCTCTGCA
-GTAGTAGTTTCCAAAATACTTTTGGTAATTTTTAACCTTAAAGTTAACCTTAAAGTTAAGCTAAGTAAAAGATTTGCATT
-AAATATCTAGACCATTTATAAATAAGATACAATACTAAAACATTACTGAAGATAAATAATTCTAGTTTACATACTTTTGG
-CTACTTATTTTTACAGAGAAACTAAAGATATTTTAGCCCATTAATAAACATGTTTTTGTCTACCACACTGAGAAATTGTA
-CTATGAGGAAACACATCCCTCTAGATGTTGGGAGATGGTATACTCATACATTTTCTAACCTACTATAGAATGCTAACATA
-TGACAGTTTATAACTGTCTACTTCCTAGTTTTCTCTGGAAAATAAAAGATTACTAAGTATTAAAATTATAATCAATATGT
-GTAAATAAAACTACTGGAAATAATAGAATAACTAGAAACAACTCTATGCAAAGCATGCAAGAAAAGTAGTGCATGTTTTG
-CAAGTAAAGTAGGACGTATTTTTTATAAGGAAAACCATACAAAAGATACAAATAAAAAGAGATACCTAGCCTTCCCTGTG
-TTATATTTGTATGGGTAAAATGTCATGTTTTCAGAAATTATATAAAATTCCTGGAAATTTGTCAATGTTCTCCTTATCCA
-TGCTATGTGCCAGTATAGAGTTATGAGTCATAATTCCAATTATTATTTTAAATGTTGTGCTGGGTGCAGTGGCTCACGTC
-TGTAATCCCACCACTTTGGGAGGCCTAGGCAGGTGGATCACAAGGTCAGGAGATCGAGAACATCCTGGCTGACATGGTGA
-AACCCCATCTCTACTAAAAATACAAAAAATTAGCCAGGCGTGGTGGTGGGCACCTGTACTCCCAGCTACTCAGGAGGCTG
-AGGCAGGAGAATGGCATGAACCAGGGAGGCAGAGCTTGCAGTGAGCCAAGATAGCGCCACTGCACTCCAGCATGGGCAAC
-AGAGCGAGACTCTGTCTCTAAATAAATAAATAAATAAATAAATAAATGTTTTATCCCACAGAAAAAATCGAATATCCTTG
-TCAGTTGTGGTATAATGAACTCTCATCAGATCTTTCATCACAGCCATTTCATATTCTTTATCATTTAGATATTATTTCCC
-CCTGATGCTTTCCTGAAAGCTCCTGCAATCAGCTACAGGTCAGAATGTTCATCTCCATCACGGGACTCCCTCTGAGACAC
-ACAGAAAAGAGTATGCAAGATAGTCTGGTTATAGGCTTCTGATGATATTGCTTAAATAACTTTAAGACCATACACTTCGC
-TCAGTGAAGATCTCCAGAAGTCTGCTTCAGAAATTGATGGGTTCATGACACTGCTAACCCAAGATGCAACAAGACTGGAA
-TTGATTACATGGTACTGAATGAACTGATGAAAATTGATTATAATTTTATAGCTTTTTGGAGCATTGCTGGTTCTTTAATG
-TTCTAGTTTCTGGACTTAAGAAATCTCTTTCTCTTAACCTAACTGTAACATACAATTTAGTAGATTATACTTTTGAAAAC
-AGAAGTGAAGCATTTATCTTTTTTCCCCTGCCTGATTTTTCCAGAATTTTGAAATCCTTACTGAACACTCTTATTTTCAC
-GATGATATAGTTGTTAGCAAAAGTCCAATAAGAATCTGTTCACCTTGAACAGAGACCTCAGAAATAATGCCGCATATCTA
-CAACCATCTGATCTTTGACAAACCTGACAAAAACAAGCAATGGGGAAAGGATTCCCTATTTAATAAATGGTGCTGGGAAA
-ACTGGCTAGCCATATGTAGAAAGCTGAAACTGGATCCCTTCCTTACACATTATACAAAAATTAATTCAAGATGGATTAAA
-GACTTACATGTTAGACCTAAAACCATAAAAACCCTAGAAGAAAACCTAGGCAATACCATTCAGGACATAGGCATGGGCAG
-GGACTTCATGTTTAAAACACCAAAAACAATGGCAACAAAAGCCAAAATGGACAAATGGGATCTAATTAAACTAAAGAGCT
-TCTGCACAGCAAAAAAAAACCTACTGTCAGAGTGAACAGGCAACCTACAAAATGGGAGAAAATTTTCACAACCTACTCAT
-CTGACAAAGGGCTAATATCCAGAATCTACAATGAACACAAAGAAATTTACAAGAAAAAAACAAACAACCCCATCAAAAAG
-TGGGCGAAGGATGTGAACAGACACTTCTCAAAAGAAGACATTTATGCAGCCAAAAGACATGTGAAGGAATGCTCATCATC
-ATTGGCCATCAGAGAAATGCAAATCAAAATCACAATGAGACACCATCTCACACCAGTTAGAATGGCGATCATTAAAAAGT
-CAGGAAACAACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAA
-CCATTGTAGAAGATGGTGTGGCGATTCCTCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTACTTGG
-TATATACCCAAAGGAGTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTATTGCGGCACTATTCACAATAG
-CAAAGACTTGGAACCAACCCAAATATCCAACAATGATAGACTGGATTAAGAAAATGTGGCACATATACACCATGGAATAC
-TATGCAGCCATAAAAAATGAAGAGTTCATGTCCTTTGTAGGGACATGGATGAAACTGGAAACCATCATTCTCAGCAAACT
-ATCACAAGGACAAAAAAACCAAACACTGCATGTTCTCACTCATAGGTGGGAATTGAACAATGAGAATACATGGACATGGG
-AAGGGGAACATCACACTCCAGGGACTGTTGTGGGGTGGGGGGGAGGGGGGAGGGATAGCATTAGGAGATATACCTAATGC
diff --git a/src/test/resources/htsjdk/samtools/hg19mini.fasta.fai b/src/test/resources/htsjdk/samtools/hg19mini.fasta.fai
deleted file mode 100644
index 2a20cf3..0000000
--- a/src/test/resources/htsjdk/samtools/hg19mini.fasta.fai
+++ /dev/null
@@ -1,4 +0,0 @@
-1	16000	48	80	81
-2	16000	16296	80	81
-3	16000	32544	80	81
-4	16000	48792	80	81
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTest.vcf b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTest.vcf
deleted file mode 100644
index 39bed22..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTest.vcf
+++ /dev/null
@@ -1,53 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
-##CombineVariants="analysis_type=CombineVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
-##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
-##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
-##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
-##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
-##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##PhaseByTransmission="analysis_type=PhaseByTransmission input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	NA12891	NA12892
-1	8216712	rs11121115	A	G	1540.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:23,28:51:99:681,0,668:127	0/1:16,18:34:99:338,0,244:127	0/1:24,22:46:99:560,0,323:127
-1	17032814	rs2773183	T	C	2828.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-1	17032818	rs2773183	T	C	2828.26	FILTER	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-2	1143476	rs4998209	C	T	1483.26	PASS	AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0|0:66,0:66:99:0,178,2264:127	0|1:33,38:71:99:844,0,1024:127	0|1:26,26:52:99:678,0,719:127
-2	9240279	rs56249990	A	G	3978.01	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS	GT:AD:DP:GQ:PL:TP	0|1:33,42:75:99:1400,0,1031:127	0|0:67,0:67:99:0,178,2277:127	1|1:0,71:71:99:2578,199,0:127
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list
deleted file mode 100644
index aad2820..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list
+++ /dev/null
@@ -1,7 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	8216712	8216712	+	rs11121115
-1	17032814	17032814	+	rs2773183
-2	1143476	1143476	+	rs4998209
-2	9240279	9240279	+	rs56249990
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverse.interval_list b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverse.interval_list
deleted file mode 100644
index 9bcca99..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverse.interval_list
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	1	8216711	+	interval-1
-1	8216713	17032813	+	interval-2
-1	17032815	249250621	+	interval-3
-2	1	1143475	+	interval-4
-2	1143477	9240278	+	interval-5
-2	9240280	243199373	+	interval-6
-3	1	198022430	+	interval-7
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list
deleted file mode 100644
index de85ca5..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	1	8216711	+	interval-1
-1	8216715	17032813	+	interval-2
-1	17032815	249250620	+	interval-3
-2	3	1143475	+	interval-4
-2	1143477	9240278	+	interval-5
-2	9240280	243199373	+	interval-6
-3	1	198022430	+	interval-7
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManual.vcf b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManual.vcf
deleted file mode 100644
index f9ec538..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManual.vcf
+++ /dev/null
@@ -1,57 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
-##CombineVariants="analysis_type=CombineVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
-##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
-##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
-##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
-##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
-##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##PhaseByTransmission="analysis_type=PhaseByTransmission input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	NA12891	NA12892
-1	8216712	rs11121115	A	G	1540.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:23,28:51:99:681,0,668:127	0/1:16,18:34:99:338,0,244:127	0/1:24,22:46:99:560,0,323:127
-1	8216713	yossi-1	A	G	1540.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:23,28:51:99:681,0,668:127	0/1:16,18:34:99:338,0,244:127	0/1:24,22:46:99:560,0,323:127
-1	8216714	yossi-2	A	G	1540.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:23,28:51:99:681,0,668:127	0/1:16,18:34:99:338,0,244:127	0/1:24,22:46:99:560,0,323:127
-1	17032814	rs2773183	T	C	2828.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-1	249250621	yossi-4	T	C	2828.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-2	1	yossi-5	C	T	1483.26	PASS	AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0|0:66,0:66:99:0,178,2264:127	0|1:33,38:71:99:844,0,1024:127	0|1:26,26:52:99:678,0,719:127
-2	2	.	C	T	1483.26	PASS	AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0|0:66,0:66:99:0,178,2264:127	0|1:33,38:71:99:844,0,1024:127	0|1:26,26:52:99:678,0,719:127
-2	1143476	rs4998209	C	T	1483.26	PASS	AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0|0:66,0:66:99:0,178,2264:127	0|1:33,38:71:99:844,0,1024:127	0|1:26,26:52:99:678,0,719:127
-2	9240279	rs56249990	A	G	3978.01	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS	GT:AD:DP:GQ:PL:TP	0|1:33,42:75:99:1400,0,1031:127	0|0:67,0:67:99:0,178,2277:127	1|1:0,71:71:99:2578,199,0:127
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManualComp.interval_list b/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManualComp.interval_list
deleted file mode 100644
index 6c6b5e0..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestManualComp.interval_list
+++ /dev/null
@@ -1,12 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	8216712	8216712	+	rs11121115
-1	8216713	8216713	+	yossi-1
-1	8216714	8216714	+	yossi-2
-1	17032814	17032814	+	rs2773183
-1	249250621	249250621	+	yossi-4
-2	1	1	+	yossi-5
-2	2	2	+	interval-1
-2	1143476	1143476	+	rs4998209
-2	9240279	9240279	+	rs56249990
diff --git a/src/test/resources/htsjdk/samtools/intervallist/IntervalListchr123_empty.interval_list b/src/test/resources/htsjdk/samtools/intervallist/IntervalListchr123_empty.interval_list
deleted file mode 100644
index f8fd99b..0000000
--- a/src/test/resources/htsjdk/samtools/intervallist/IntervalListchr123_empty.interval_list
+++ /dev/null
@@ -1,4 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	1	1	+	test
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/inttest.bam b/src/test/resources/htsjdk/samtools/inttest.bam
deleted file mode 100644
index 5c646f5..0000000
Binary files a/src/test/resources/htsjdk/samtools/inttest.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/inttest.sam b/src/test/resources/htsjdk/samtools/inttest.sam
deleted file mode 100644
index 805e153..0000000
--- a/src/test/resources/htsjdk/samtools/inttest.sam
+++ /dev/null
@@ -1,26 +0,0 @@
- at HD	VN:1.5	SO:unsorted
- at SQ	SN:Sheila	LN:20
- at RG	ID:ID	SM:foo
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P0:i:0
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P1:i:127
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P2:i:128
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P3:i:255
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P4:i:256
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P5:i:32767
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P6:i:32768
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P7:i:65535
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P8:i:65536
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P9:i:2147483647
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	PA:i:2147483648
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	PB:i:4294967295
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P0:i:-0
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P1:i:-127
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P2:i:-128
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P3:i:-255
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P4:i:-256
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P5:i:-32767
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P6:i:-32768
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P7:i:-65535
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P8:i:-65536
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	P9:i:-2147483647
-Fred	16	Sheila	1	86	10M	*	0	0	GCTAGCTCAG	**********	PA:i:-2147483648
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/io/5newline5.txt b/src/test/resources/htsjdk/samtools/io/5newline5.txt
deleted file mode 100644
index 53ff652..0000000
--- a/src/test/resources/htsjdk/samtools/io/5newline5.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-     
-     
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/io/slurptest.txt b/src/test/resources/htsjdk/samtools/io/slurptest.txt
deleted file mode 100644
index 44718c3..0000000
--- a/src/test/resources/htsjdk/samtools/io/slurptest.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-bacon   and rice   
-for breakfast  
-wont you join me
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/issue76.bam b/src/test/resources/htsjdk/samtools/issue76.bam
deleted file mode 100644
index 32c05b7..0000000
Binary files a/src/test/resources/htsjdk/samtools/issue76.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/issue76.bam.bai b/src/test/resources/htsjdk/samtools/issue76.bam.bai
deleted file mode 100644
index 2366517..0000000
Binary files a/src/test/resources/htsjdk/samtools/issue76.bam.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/liftover/hg18ToHg19.over.chain b/src/test/resources/htsjdk/samtools/liftover/hg18ToHg19.over.chain
deleted file mode 100644
index 9f7a0cf..0000000
--- a/src/test/resources/htsjdk/samtools/liftover/hg18ToHg19.over.chain
+++ /dev/null
@@ -1,30850 +0,0 @@
-chain 21270159960 chr1 247249719 + 0 247199719 chr1 249250621 + 10000 249233096 2
-616	0	137
-166664	50000	50000
-40302	50000	50000
-153649	50000	50000
-1098446	269	272
-773	1	1
-43	1	1
-864369	2	2
-51	0	3
-104	13694	13694
-104	3	0
-51	2	2
-134936	50000	50000
-1161048	60000	150000
-1440092	50000	27273
-7590365	50000	50000
-116914	50088	100088
-237162	50000	50000
-3518496	50000	50000
-12702424	50000	150000
-16145012	1	0
-7772	0	1
-4705841	1	0
-52977198	50000	50000
-157344	50000	21065
-16604841	50000	50000
-189539	50000	150000
-398739	20290000	21050000
-195588	50000	50000
-186739	50000	150000
-175055	50000	50000
-201709	50000	100000
-126477	50000	130183
-381	3	0
-315	2	0
-62	1	1
-73	1	1
-1158	0	1
-314	1	0
-11	1	1
-2849	0	3
-5615	1	1
-37	1	1
-3172	4	6
-190	1	1
-34	1	1
-380	1	0
-2099	0	3
-1135	4	0
-970	5	5
-209	0	1
-460	1	0
-1242	28	28
-574	1	1
-21	1	1
-2268	0	3
-239	1	0
-970	11	11
-2365	1	1
-21	1	1
-384	8	8
-996	0	2
-10383	0	2
-713	1	0
-5188	1	1
-30	1	1
-1233	0	1
-132	1	1
-44	1	1
-2955	0	1
-512	1	1
-39	1	1
-1096	16	0
-743	0	1
-9028	1	0
-2506	6	0
-8446	0	2
-5505	3	0
-7541	0	1
-109864	50000	50000
-78698	50000	50000
-127263	50000	50000
-170669	50000	50000
-38311	100000	100000
-1022394	50000	50000
-281532	50000	294733
-1687	1	1
-39	0	1
-1018	1	1
-26	1	1
-1722	0	2
-158	0	4
-1602	6	0
-1384	0	1
-2066	1	1
-32	3	1
-1556908	50000	150000
-185320	50000	150000
-172789	50000	50000
-220313	50000	50000
-455185	50000	50000
-22047237	0	1
-34365824	50000	150000
-259514	50000	150000
-17265625	50000	50000
-11394365	50000	50000
-13665999	50000	150000
-174886
-
-chain 989083 chr1 247249719 + 2475290 2488984 chr1 249250621 - 246751494 246765188 1383
-13694
-
-chain 5421 chr1 247249719 + 1609759 1609849 chr1 249250621 + 1672838 1672928 2227793
-90
-
-chain 3303 chr1 247249719 + 13192499 13192587 chr1 249250621 - 236203315 236203403 109
-88
-
-chain 467 chr1 247249719 + 142633259 142633287 chr1 249250621 - 128420441 128420469 123
-28
-
-chain 12431961244 chr10 135374737 + 50000 135374737 chr10 135534747 + 60000 135524747 10
-5577107	50006	0
-12337568	50000	50000
-20794160	50000	50000
-286100	2480000	3200000
-191752	50000	50000
-3830277	150000	50000
-952205	150000	100000
-263307	150000	100000
-163231	150000	50000
-989829	150000	100000
-1941874	50000	50000
-211435	50000	50000
-30112515	319974	0
-13249156	10	0
-31058956	50000	50000
-2696597	50000	150000
-4615335	10000	50000
-246123	50000	50000
-1327328	1	1
-47	1	1
-1312	1	0
-56	1	1
-190	1	1
-31	1	1
-20182	0	1
-448068
-
-chain 8134587 chr10 135374737 + 81444609 81551340 chr10 135534747 + 88976631 89083503 218
-369	41	41
-149	6	6
-83	71	71
-548	9	9
-391	9	9
-334	42	42
-81	1	2
-954	1	0
-441	0	4
-922	37	37
-343	253	253
-278	59	58
-404	13	13
-90	39	37
-70	132	123
-145	4	4
-392	9	9
-58	29	29
-166	51	50
-78	14	14
-455	61	65
-243	41	41
-1183	17	17
-163	57	57
-169	51	51
-912	5	5
-667	12	12
-250	20	20
-506	8	8
-292	8	8
-266	17	17
-69	27	27
-131	22	22
-668	46	47
-270	13	13
-128	7	7
-300	48	48
-818	32	32
-667	67	67
-402	24	36
-293	18	18
-423	68	68
-113	9	9
-630	42	42
-269	51	51
-165	0	1
-645	52	52
-76	91	90
-505	13	13
-143	31	31
-319	68	70
-245	126	126
-145	35	37
-90	57	57
-378	41	38
-193	13	13
-333	51	30
-51	6	6
-821	56	56
-547	18	18
-343	9	9
-270	47	47
-706	1	0
-120	21	22
-371	35	35
-530	13	13
-51	36	36
-611	48	48
-587	18	18
-499	9	9
-183	26	26
-847	7	7
-134	5	4
-64	34	34
-120	66	66
-173	147	147
-126	19	16
-53	44	49
-69	1	0
-153	89	90
-81	16	16
-52	32	36
-72	28	28
-86	68	68
-56	51	51
-120	17	17
-181	5	5
-86	17	18
-68	36	36
-356	101	101
-90	3	11
-226	26	28
-70	19	19
-95	9	9
-88	16	16
-272	33	33
-216	71	71
-394	83	83
-853	14	15
-90	23	23
-130	0	3
-52	11	11
-192	49	49
-407	13	13
-122	71	34
-179	28	28
-102	10	10
-299	36	36
-268	4	4
-123	36	36
-112	41	41
-233	77	75
-73	88	92
-519	43	43
-118	101	101
-78	33	43
-117	31	31
-83	37	37
-86	3	0
-468	0	2
-791	55	55
-268	97	97
-111	55	59
-164	38	38
-176	0	3
-116	67	74
-269	0	3
-92	66	67
-205	50	55
-1339	33	34
-86	9	9
-310	34	34
-217	42	42
-194	18	17
-191	4	4
-250	0	3
-148	79	79
-77	3	0
-199	57	57
-200	53	53
-331	52	53
-136	32	42
-69	60	60
-169	0	1
-594	88	88
-174	70	70
-135	48	48
-53	9	9
-862	25	25
-1106	33	33
-974	76	76
-368	17	17
-369	43	43
-263	49	49
-143	8	8
-228	57	57
-74	3	0
-914	2	0
-137	77	74
-243	32	32
-166	53	53
-646	87	87
-71	0	1
-661	45	45
-142	76	76
-851	17	17
-56	60	60
-52	59	58
-80	60	60
-602	13	13
-617	76	78
-51	152	152
-77	38	38
-150	0	4
-386	45	45
-585	40	33
-108	12	12
-219	99	99
-1376	58	58
-517	27	27
-124	20	20
-566	58	58
-235	47	47
-72	26	26
-157	43	43
-208	31	31
-578	122	84
-259	15	15
-1141	119	119
-141	13	13
-817	14	14
-188	0	5
-323	62	75
-447	0	5
-64	161	161
-945	23	23
-66	35	35
-104	125	125
-613	186	184
-102	205	203
-767	27	27
-111	13	13
-107	80	83
-272	0	1
-438	4	4
-127	68	68
-564	44	44
-141	14	14
-137	13	17
-167	18	0
-241	25	25
-586	30	30
-178	44	44
-310	90	87
-1277	35	35
-646	32	32
-704	56	56
-367	93	101
-241	15	14
-340	64	64
-1000	23	26
-163	81	81
-895	12	12
-345	2	0
-117	48	49
-491	32	32
-206	17	17
-439	109	109
-202	6	7
-756	24	24
-380	63	62
-144	48	48
-608	80	80
-154	71	71
-232	16	16
-1809	40	40
-346	53	52
-117	10	0
-383	10	10
-1973	19	19
-879	42	42
-91	50	50
-1147	2	1
-210	68	88
-189	7	7
-595	50	49
-248	104	126
-265	106	106
-167	0	7
-141	93	62
-825	1	0
-348	47	46
-211	3	0
-114	52	56
-66	7	7
-759	48	48
-269	0	1
-106	109	114
-114	38	39
-282	20	20
-504	0	1
-174	14	7
-123	45	46
-82	58	58
-203	12	13
-153	44	44
-121	74	74
-805	43	43
-120	67	68
-171	6	6
-329	20	20
-151	33	33
-71	46	46
-195	25	21
-65	23	42
-96	78	78
-58	0	4
-389	0	3
-214	137	138
-111	2	3
-116	10	10
-128	0	3
-52	8	8
-62	43	43
-142	6	6
-214	0	112
-179	0	1
-234	4	0
-75	116	117
-119	63	67
-286	72	42
-73	150	150
-206	214	220
-73	2	0
-82	48	48
-135	40	67
-115	109	114
-185	49	49
-99	63	63
-52	204	205
-121
-
-chain 2724232 chr10 135374737 + 81309951 81339951 chr10 135534747 + 81320000 81350000 983
-22137	957	957
-46	77	77
-38	83	83
-51	54	54
-984	53	53
-5520
-
-chain 1898345 chr10 135374737 + 81349952 81369946 chr10 135534747 + 81360000 81380000 1327
-15902	21	27
-4071
-
-chain 946327 chr10 135374737 + 81339951 81349952 chr10 135534747 + 81350000 81360000 2894
-6692	1	0
-3308
-
-chain 939763 chr10 135374737 + 81430217 81440202 chr10 135534747 + 81440000 81450000 3159
-163	3	0
-518	0	16
-972	42	43
-5149	0	1
-3138
-
-chain 928169 chr10 135374737 + 81379935 81389948 chr10 135534747 + 81390000 81400000 3587
-1970	7	8
-141	10	0
-413	39	39
-622	4	0
-574	42	42
-2153	0	2
-1520	5	3
-2513
-
-chain 922636 chr10 135374737 + 81300280 81309951 chr10 135534747 + 81310330 81320000 2721
-2989	1	0
-6681
-
-chain 885793 chr10 135374737 + 81369946 81379851 chr10 135534747 + 81380000 81389916 4570
-507	30	32
-880	91	91
-1155	82	82
-784	10	10
-907	16	28
-1265	50	50
-859	0	3
-1375	1	2
-165	27	27
-124	29	29
-275	8	8
-308	6	0
-79	1	0
-871
-
-chain 839370 chr10 135374737 + 81389948 81399836 chr10 135534747 + 81400000 81409799 4960
-446	1	0
-639	0	1
-112	140	59
-198	24	22
-98	162	137
-63	10	10
-97	180	192
-71	31	33
-322	38	38
-431	0	1
-741	45	46
-229	1	3
-186	1	4
-3019	14	14
-131	1	0
-722	16	16
-1530	92	92
-32	2	1
-63
-
-chain 788625 chr10 135374737 + 81241464 81249852 chr10 135534747 + 81251575 81259959 6147
-783	1	0
-883	23	33
-3247	1	0
-143	31	31
-957	15	3
-2304
-
-chain 781678 chr10 135374737 + 81280054 81289770 chr10 135534747 + 81290109 81299824 3334
-65	841	841
-84	228	228
-27	240	240
-1767	0	10
-186	66	54
-976	0	3
-1495	0	7
-899	0	1
-376	7	7
-2156	10	0
-196	50	50
-47
-
-chain 778944 chr10 135374737 + 81250813 81551219 chr10 135534747 - 53516479 54101824 544
-53	63	72
-96	209	213
-193	44	44
-202	331	335
-149	28	28
-100	125	123
-56	238	272
-60	91	93
-123	9	11
-66	147	144
-82	210	211
-77	17	17
-196	31	31
-379	27	27
-954	71	71
-69	4431	3721
-746	66	66
-502	12	12
-282	28	28
-224	59	59
-52	35	35
-448	12	0
-474	42	42
-260	11	11
-83	38	44
-160	152	149
-284	76	76
-110	73	73
-284	9	9
-478	110	110
-95	5	5
-583	122	122
-116	1	1
-67	1	1
-118	1	1
-38	1	1
-566	1	1
-35	1	1
-287	1	0
-481	1	1
-42	1	1
-198	1	1
-22	1	1
-54	1	1
-25	1	1
-50	1	1
-50	1	1
-294	4	0
-158	1	1
-31	1	1
-255	8	8
-291	12	12
-171	2	2
-21	1	1
-685	77	77
-817	20	20
-312	39	39
-181	1	0
-249	50	47
-75	7	7
-86	4	4
-54	8	8
-518	134	134
-376	24	26
-189	17	27
-143	13	13
-93	16	16
-192	24	24
-992	140	132
-828	1	1
-40	1	1
-410	1	1
-25	0	2
-13	1	1
-83	8	8
-143	1	1
-20	1	1
-421	1	1
-49	1	1
-107	1	1
-28	1	1
-77	1	1
-32	0	2
-44	2	2
-348	1	1
-53	0	4
-58	1	1
-97	1	1
-125	56	53
-526	1	1
-46	1	1
-209	9	9
-76	1	1
-37	1	1
-53	1	1
-24	1	1
-141	1	1
-26	1	1
-304	1	1
-60	1	1
-199	1	1
-47	1	1
-92	6	0
-138	64	64
-299	65	65
-186	24	24
-631	84	84
-100	20	20
-108	27	27
-240	8134	8243
-50	47	45
-107	11	11
-750	5	5
-230	25	25
-221	62	62
-106	32	32
-106	52	52
-270	56	56
-166	31	31
-89	77	77
-127	666	662
-56	22	22
-55	95	83
-51	30	30
-77	35	35
-189	16	16
-130	53	53
-131	5	5
-158	140	131
-170	21	21
-55	79	79
-207	200	199
-152	11	11
-105	50	50
-104	34	34
-56	402	402
-69	0	1
-61	150	150
-181	10	10
-130	22	22
-180	5	0
-73	161	161
-77	151	151
-68	128	128
-330	138	126
-116	1211	328
-252	4	4
-102	8	8
-72	23	23
-51	51	51
-608	31808	287592
-56	14	14
-161	9	9
-717	46	50
-77	38	30
-83	51	51
-54	984	987
-53	65700	95386
-47	559	556
-99	119	119
-193	38	38
-164	12	7
-59	38	38
-58	9	5
-57	34	34
-68	30	30
-59	28	28
-51	82	87
-142	7	7
-67	162	152
-248	1	2
-114	34	34
-140	22	22
-58	119	118
-143	50	50
-255	69	65
-53	18	18
-127	11	13
-446	39	39
-134	24	24
-143	42	42
-123	65	65
-57	0	3
-199	73	73
-271	17	17
-113	24	24
-203	40	40
-51	38	38
-119	50	50
-81	60	60
-239	85	70
-79	219	219
-64	149	150
-29	211	211
-91	319	310
-76	40	40
-59	596	591
-34	579	579
-51	90	90
-169	336	329
-146	226	226
-50	480	479
-23	66	66
-95	447	447
-49	298	298
-29	180	180
-45	1186	1169
-53	2222	2217
-11	116	116
-33	313	313
-63	75	75
-14	257	258
-31	122	122
-73	311	316
-238	46	46
-130	81	78
-103	262	266
-56	168	163
-29	861	857
-61	655	666
-18	40	40
-436	1	1
-8	4	0
-35	1	1
-417	21	18
-51	2	0
-54	1	1
-126	10	9
-72	5	5
-377	1	1
-18	2	0
-35	2	2
-78	1	2
-18	2	2
-82	1	0
-99	1	1
-82	0	4
-99	1	1
-50	0	4
-50	7	7
-225	11	11
-135	2	0
-326	26	989
-2646	0	1
-560	10	0
-347	114	114
-284	118541	118621
-43	120	120
-65	1	0
-1	677	677
-33	71	71
-46	404	404
-78	661	663
-137	489	492
-43	854	846
-116	119	119
-63	286	286
-72	73	73
-150	206	206
-17	1	1
-85	1	1
-110	157	157
-48	135	135
-36	0	4
-4	115	115
-73	2	0
-19	1	1
-14	185	185
-49	99	99
-22	1	1
-40	79	80
-177
-
-chain 662550 chr10 135374737 + 81399647 81430169 chr10 135534747 - 46431029 46458544 512
-92	103	101
-125	0	2222
-53	53	50
-58	48	48
-298	191	189
-69	6167	5
-118	101	101
-128	111	111
-207	48	43
-55	175	169
-212	93	89
-159	23	23
-109	34	34
-150	21	20
-258	30	30
-120	51	54
-90	171	171
-268	224	219
-202	62	62
-480	237	237
-394	49	49
-100	28	28
-93	25	25
-52	29	29
-180	45	45
-141	47	47
-56	49	49
-169	39	42
-60	102	113
-53	1	13
-151	105	105
-58	33	30
-88	246	246
-334	116	116
-63	83	84
-268	115	113
-70	43	43
-252	2	1
-62	97	97
-88	6	0
-61	23	23
-84	75	75
-75	2	3
-83	8	8
-53	160	162
-312	153	152
-192	96	98
-122	95	100
-94	793	791
-61	1	5
-154	140	135
-130	32	33
-121	21	21
-82	6	6
-171	34	34
-110	52	49
-129	193	194
-64	26	29
-72	18	18
-286	75	58
-114	6596	7638
-114	284	172
-558	8	9
-111	5	5
-55	2	2
-80	0	1
-27	1	1
-72	1	1
-45	1	1
-516	1	1
-66	1	1
-106	23	42
-64	4	0
-21	1	1
-312	2	2
-30	1	1
-151	20	20
-193	1	1
-38	1	1
-96	6	6
-171	0	3
-27	0	2
-34	2	2
-120	3	3
-39	1	1
-752
-
-chain 650336 chr10 135374737 + 81249915 81259740 chr10 135534747 + 81260018 81269841 3195
-898	53	53
-63	96	96
-209	193	193
-44	202	202
-331	149	149
-28	100	100
-125	56	56
-238	60	60
-91	198	198
-147	82	82
-210	290	290
-31	1360	1360
-71	69	69
-196	1	0
-454	16	15
-3764
-
-chain 462746 chr10 135374737 + 81440202 81450008 chr10 135534747 + 81450000 81459803 2861
-1116	4	4
-801	3	0
-2483	369	369
-41	238	238
-71	1291	1291
-42	2400	2400
-37	343	343
-253	278	278
-36
-
-chain 389885 chr10 135374737 + 81290873 81299672 chr10 135534747 + 81300927 81309722 2802
-25	221	221
-62	106	106
-32	106	106
-52	270	270
-56	166	166
-31	89	89
-77	127	127
-666	133	133
-95	51	51
-30	77	77
-35	335	335
-53	294	294
-103	4	0
-33	246	246
-79	207	207
-200	268	268
-50	104	104
-34	56	56
-402	130	130
-150	601	601
-161	77	77
-151	68	68
-128	330	330
-138	116	116
-1211	512	512
-51
-
-chain 178315 chr10 135374737 + 81400041 81409702 chr10 135534747 + 81410003 81419664 4252
-32	404	404
-191	168	168
-119	193	193
-38	235	235
-38	124	124
-34	68	68
-30	59	59
-28	51	51
-82	216	216
-162	363	363
-34	220	220
-21	9	9
-89	143	143
-50	255	255
-69	995	995
-42	123	123
-65	256	256
-73	628	628
-40	208	208
-50	94	94
-47	239	239
-85	79	79
-219	64	64
-31	147	147
-72	625	625
-40	271	271
-93	754	754
-30	700	700
-66
-
-chain 157388 chr10 135374737 + 81410627 81419292 chr10 135534747 + 81420589 81429247 5183
-66	95	95
-53	1136	1136
-46	81	81
-25	268	268
-38	269	263
-105	58	58
-6	0	1
-27	88	88
-34	53	53
-81	32	32
-46	334	334
-116	63	63
-83	268	266
-115	429	428
-97	262	262
-75	757	757
-75	230	232
-41	343	343
-69	47	47
-78	238	238
-46	130	131
-17	36	34
-28	319	319
-46	56	56
-38	707	707
-52	129	129
-132	125	125
-26	376	376
-75
-
-chain 142913 chr10 135374737 + 81466547 81535718 chr10 135534747 - 46275769 46344990 569
-44	2128	2133
-24	2535	2533
-31	2379	2381
-34	143	143
-43	270	270
-50	1045	1058
-51	494	498
-36	2085	2105
-60	1979	1981
-71	1197	1197
-41	1594	1601
-37	2856	2871
-66	205	205
-50	1339	1339
-33	656	663
-42	805	805
-79	280	275
-56	200	200
-22	18	18
-13	1443	1450
-44	2526	2526
-33	974	974
-75	1489	1489
-47	1658	1653
-53	1652	1653
-41	1071	1071
-59	10705	10669
-57	6434	6441
-25	586	586
-30	178	178
-44	310	310
-74	7	1
-9	1277	1277
-35	5735	5751
-32	2139	2139
-63	3162	3162
-40	346	345
-53	3391	3390
-41	92	92
-50
-
-chain 97392 chr10 135374737 + 81500632 81510012 chr10 135534747 + 81510451 81519840 3573
-60	191	191
-60	1232	1232
-76	51	51
-152	77	77
-38	536	540
-45	585	586
-39	340	340
-99	1376	1373
-58	517	517
-27	710	710
-58	235	235
-47	72	72
-26	157	157
-43	208	208
-31	630	637
-70	1415	1415
-119
-
-chain 87386 chr10 135374737 + 81512081 81517268 chr10 135534747 + 81521923 81527111 3288
-161	1034	1034
-35	104	104
-125	613	613
-186	102	102
-205	767	767
-27	231	232
-80	841	841
-68	564	564
-44
-
-chain 81916 chr10 135374737 + 81260486 81269831 chr10 135534747 + 81270587 81279924 3410
-66	796	796
-28	224	224
-59	52	52
-35	934	925
-42	354	354
-1	0	2
-37	160	160
-121	19	18
-12	284	284
-76	110	110
-73	771	771
-110	683	683
-8	36	35
-78	4099	4100
-77
-
-chain 75208 chr10 135374737 + 81450008 81464865 chr10 135534747 + 81597933 81612795 1746
-23	1356	1354
-29	166	166
-51	547	547
-30	274	278
-40	1364	1363
-57	169	169
-51	3032	3032
-27	1585	1586
-48	818	818
-32	667	667
-67	1160	1160
-68	752	752
-42	269	269
-51	810	813
-52	76	76
-91	661	661
-31	319	319
-42
-
-chain 71596 chr10 135374737 + 81480667 81490183 chr10 135534747 + 81490477 81500000 3725
-36	395	395
-36	536	535
-88	519	519
-43	139	139
-80	78	78
-33	117	134
-31	1468	1468
-55	268	268
-97	111	111
-30	6	0
-19	164	164
-38	292	292
-67	2459	2459
-34	2063	2060
-52	136	136
-26
-
-chain 65913 chr10 135374737 + 81470614 81479436 chr10 135534747 + 81480422 81489246 3085
-36	1955	1955
-26	1450	1450
-97	248	248
-44	223	223
-89	149	149
-32	72	72
-28	86	86
-68	993	993
-49	0	1
-52	319	320
-26	569	569
-33	216	216
-71	1842	1842
-49
-
-chain 63808 chr10 135374737 + 81521220 81529648 chr10 135534747 + 81531068 81539504 3362
-32	704	704
-56	367	367
-93	596	601
-64	1186	1189
-81	1371	1371
-48	1185	1185
-109	1575	1575
-48	608	608
-80	154	154
-71
-
-chain 58084 chr10 135374737 + 81490258 81499708 chr10 135534747 + 81500075 81509527 2957
-60	807	808
-44	174	174
-70	135	135
-48	924	924
-25	2943	2943
-43	263	263
-49	1566	1566
-77	243	243
-32	865	865
-87	732	733
-45	183	183
-35
-
-chain 41373 chr10 135374737 + 81540284 81544136 chr10 135534747 + 81550136 81553982 6087
-47	328	324
-52	832	831
-48	375	375
-79	0	1
-30	114	114
-38	1117	1115
-45	82	82
-58	368	368
-44	121	121
-74
-
-chain 34777 chr10 135374737 + 81464865 81470020 chr10 135534747 + 81474671 81479828 3724
-26	245	245
-34	44	44
-48	145	145
-12	0	2
-23	90	90
-57	378	378
-41	1468	1468
-56	2453	2453
-35
-
-chain 34249 chr10 135374737 + 81270980 81279755 chr10 135534747 + 81281073 81289810 4510
-39	431	431
-50	752	752
-134	2175	2167
-44	3025	2995
-35	14	9
-7	2005	2010
-64
-
-chain 29298 chr10 135374737 + 81537077 81539110 chr10 135534747 + 81546931 81548963 3702
-68	791	797
-50	617	605
-33	0	2
-73	308	311
-93
-
-chain 18939 chr10 135374737 + 81450538 81452241 chr10 135534747 + 81460333 81462036 3255
-39	70	70
-132	1431	1431
-31
-
-chain 6030 chr10 135374737 + 81422413 81430217 chr10 135534747 + 81432363 81440000 5582
-26	7730	7563
-48
-
-chain 5154 chr10 135374737 + 81371363 81371422 chr10 135534747 - 72572913 72572972 4033525
-2	1	1
-56
-
-chain 1569 chr10 135374737 + 81371422 81371454 chrX 155270560 + 63278348 63278380 8657459
-32
-
-chain 1063 chr10 135374737 + 81231366 81231464 chr10 135534747 - 54101945 54102043 901
-98
-
-chain 4275918 chr10_random 113275 + 18676 65432 chr5 180915260 + 138864813 138909803 707
-204	2	0
-4653	4	0
-2427	0	1
-5957	0	1
-1558	1	0
-780	1794	33
-29376
-
-chain 870863 chr10_random 113275 + 9144 18556 chr10 135534747 - 46779061 46789268 4835
-301	2	0
-564	3	0
-802	1	0
-2624	0	112
-142	0	2
-128	100	787
-4745
-
-chain 637317 chr10_random 113275 + 102183 113228 chr10 135534747 + 88758795 88768050 8258
-1205	22	22
-793	0	1
-914	1	1
-9	0	1
-45	0	1
-9	2477	1631
-132	1562	615
-2006	1	1
-36	1	1
-557	24	23
-885	0	2
-194	1	0
-171
-
-chain 383436 chr10_random 113275 + 97894 101991 chr10 135534747 + 88848068 88852165 132306
-2932	0	1
-697	4	3
-464
-
-chain 312568 chr10_random 113275 + 0 3305 chr10 135534747 + 88861095 88864401 225266
-2905	0	1
-400
-
-chain 263395 chr10_random 113275 + 91858 94672 chr10 135534747 + 88776474 88779288 339622
-1683	3	3
-130	11	11
-987
-
-chain 254817 chr10_random 113275 + 83066 85798 chr10 135534747 - 46749813 46752549 368581
-201	0	6
-798	0	1
-403	4	0
-841	14	15
-471
-
-chain 244215 chr10_random 113275 + 5995 97779 chr10 135534747 + 88818267 88897264 4711
-966	0	1
-2072	66256	15486
-2428	10567	42513
-197	0	1
-820	6	6
-18	1	0
-21	0	1
-20	2	1
-1685	0	2
-703	3020	9053
-1156	0	1
-1846
-
-chain 216530 chr10_random 113275 + 72868 75170 chr10 135534747 - 93082016 93084318 524441
-2302
-
-chain 211663 chr10_random 113275 + 85898 88144 chr10 135534747 + 88832831 88835078 546276
-536	0	1
-1710
-
-chain 171789 chr10_random 113275 + 70706 72761 chr10 135534747 - 93140436 93143121 737133
-50	1	1
-68	85	4
-15	15	34
-17	7	53
-13	1	647
-81	1	1
-50	21	21
-1630
-
-chain 129924 chr10_random 113275 + 67807 109229 chr10 135534747 - 46627912 46728083 8515
-467	0	1
-256	0	1
-42	1	1
-1352	0	2
-308	10219	43352
-227	1	1
-22	1	1
-2232	22395	48006
-1581	0	2
-518	1	1
-30	1	0
-197	132	132
-1439
-
-chain 125160 chr10_random 113275 + 4561 5895 chr10 135534747 - 46655374 46656707 1028939
-94	1	0
-1239
-
-chain 104003 chr10_random 113275 + 65554 66651 chr10 135534747 - 93176760 93177857 1232247
-1097
-
-chain 92361 chr10_random 113275 + 66732 67707 chr10 135534747 - 93158718 93159693 1382147
-975
-
-chain 89191 chr10_random 113275 + 3509 4486 chr10 135534747 - 129898314 129899289 1428933
-69	1	1
-35	1	0
-336	1	0
-401	1	1
-44	1	1
-87
-
-chain 29685 chr10_random 113275 + 34270 80352 chr10 135534747 - 46758431 46763489 186939
-210	0	6
-1251	4	4
-73	42015	985
-1249	1	1
-46	1	1
-1232
-
-chain 4572 chr10_random 113275 + 70436 70610 chr10 135534747 - 93144449 93144623 2904410
-51	50	50
-73
-
-chain 3114 chr10_random 113275 + 70610 70643 chr10 135534747 - 93147281 93147314 29780913
-33
-
-chain 12415599352 chr11 134452384 + 50000 134451920 chr11 135006516 + 60000 134946516 11
-1102759	16576	50000
-49571094	207000	307000
-503352	3000000	3100000
-14395596	2605	50000
-488471	34	102
-26	0	176
-30213	141	350
-27914	1	0
-20009	1	0
-19	1	0
-39	1	0
-17	3	1
-10	1	0
-1008	1	0
-95	1	0
-5127	15	0
-302	1	0
-975	0	4
-1548	0	1
-190	20	0
-41	1	0
-29	1	1
-44	0	1
-101	1	0
-25	0	1
-6178	0	1
-1875	21437	52561
-468	1	1
-81	1	1
-2620	1	0
-1640	4	0
-3305	0	1
-3342	1	0
-17899663	12000	50000
-8549206	15562	150000
-38507165	2	0
-1327	174	0
-392	18	0
-48
-
-chain 188276 chr11 134452384 + 69433462 69437111 chr11_gl000202_random 40103 + 7212 10860 1247
-1868	1	0
-1780
-
-chain 38178 chr11 134452384 + 134451288 134452384 chr5 180915260 - 180902450 180903869 1901368
-174	458	926
-1	8	0
-63	136	1
-64	2	0
-190
-
-chain 6040 chr11 134452384 + 134451996 134452128 chr1 249250621 - 249240179 249240388 3449013
-89	36	113
-7
-
-chain 2221 chr11 134452384 + 134452085 134452111 chrY 59373566 + 59362903 59362929 5436109
-26
-
-chain 4284950 chr11_random 215294 + 0 215294 chr11 135006516 - 65191297 65289033 706
-40524	167558	50000
-7212
-
-chain 3340892 chr11_random 215294 + 90524 125679 chr11 135006516 + 69689619 69724695 863
-1003	62	0
-3019	1	0
-695	1	1
-26	1	1
-1133	0	1
-1374	2	2
-20	1	1
-729	11	11
-269	0	1
-1091	14	14
-969	21	21
-532	5	5
-2677	18	0
-21481
-
-chain 3051979 chr11_random 215294 + 175679 208082 chr11_gl000202_random 40103 - 0 32891 790
-17546	11	51
-27	523	35
-32	6	6
-6712	100	1036
-7446
-
-chain 10612 chr11_random 215294 + 193466 193615 chr11_gl000202_random 40103 - 18116 18265 21504297
-59	27	27
-63
-
-chain 5102 chr11_random 215294 + 91527 91580 chr11 135006516 + 69690684 69690737 20979070
-53
-
-chain 12330181372 chr12 132349534 + 16000 132289534 chr12 133851895 + 145739 133779461 12
-7035083	0	4
-544	0	1
-3777	0	1
-3889	73000	52114
-6014	1	0
-6524	168	34
-20974	0	2
-3965	3	0
-444	0	11
-464	1	0
-27577110	1395000	3000000
-38631945	0	1
-14541	0	4
-1703	1	0
-789	250000	12128
-1783	1	0
-1075	0	2
-1042	1	0
-1526	1	1
-27	1	1
-2320	0	1
-166	1	0
-564	0	1
-2856	0	2
-900	0	1
-1387	1	1
-33	1	1
-2139	1	1
-48	1	1
-1305	0	2
-1533	1	2
-879	0	1
-744	26	26
-855	0	4
-1092	6	0
-1114	12	0
-817	1	1
-18	1	0
-217	1	1
-36	1	1
-2002	1	0
-1025	0	1
-450	1	1
-43	1	1
-919	1	0
-18	1	1
-3207	42	42
-1440	0	8
-148	4	0
-3655	2	0
-3403	1	1
-47	1	1
-1524	1	1
-28	1	1
-5561	0	2
-44	0	1
-676	8	8
-810	16	16
-536	2	0
-236	4	0
-167	0	4
-1419	49	53
-4688	1	1
-38	1	1
-18577	5	0
-5284	0	2
-1577	34	34
-4875	1	1
-25	1	1
-4340	0	14
-2663	5	0
-1170	1	0
-4268	0	4
-1036	0	1
-2117	0	8
-5917	1	0
-3239	0	4
-2619	1	1
-21	1	1
-937	1	1
-38	1	1
-2412	0	2
-38	17	0
-2732	0	2
-9314	2	0
-1986	2	2
-16	1	1
-229	1	1
-93	1	1
-895	12	0
-415	1	5
-27	1	1
-78	14	14
-185	8	9
-458	0	2
-89	1	1
-42	1	1
-2034	0	1
-1545	0	2
-280	0	4
-97	14	14
-231	0	2
-2816	5	0
-537	50	50
-1090	1	1
-27	1	1
-25758689	0	1
-6536665	0	1
-377270	57000	96749
-668	1	1
-20	1	0
-3348	1	1
-33	1	1
-648	1	1
-29	1	1
-3732	4	0
-977	46	46
-785	4	0
-34	1	0
-1688	0	10
-4248	1	0
-1167	1	0
-985	9	9
-2897	1	0
-1630	9	0
-1096	0	1
-1356	0	8
-13065723	150011	68363
-799	2	0
-343	0	1
-1771	0	1
-2702	7	6
-1900	1	0
-705	6	0
-303	1	0
-727	1	1
-43	1	0
-3	2	0
-490	1	1
-59	1	1
-226	1	1
-52	3	0
-465	0	8
-194	1	1
-25	1	0
-139	1	1
-15	1	1
-1833	1	0
-81	1	1
-39	1	1
-453	1	0
-719	1	1
-47	1	1
-558	1	0
-838	8	1
-288	10	9
-741	5	2
-465	1	1
-48	1	1
-268	1	1
-26	1	0
-1337	30	48
-84	2	85
-917	1	0
-110	31	31
-1580	1	1
-40	1	1
-683	1	1
-24	1	1
-247	1	1
-36	1	1
-1574	0	1
-10091386	0	3
-296	0	5
-220	45000	100872
-972469
-
-chain 2523 chr12 132349534 + 107924339 107924385 chr20 63025520 - 54448952 54448998 196257
-46
-
-chain 9007877316 chr13 114142980 + 17918000 114127980 chr13 115169878 + 19020000 115109878 14
-26987167	1	0
-40753157	50000	150000
-25443670	400000	150000
-1821999	384108	414007
-369878
-
-chain 17589560 chr13 114142980 + 113473994 113658050 chr13 115169878 - 529930 713796 162
-174857	2	0
-1328	144	0
-1156	1	1
-27	1	1
-2159	2	0
-49	1	1
-175	2	0
-20	4	0
-590	30	0
-163	8	4
-2905	2	0
-430
-
-chain 8677 chr13 114142980 + 113650223 113650314 chr13 115169878 - 706193 706284 25436870
-91
-
-chain 17750502 chr13_random 186858 + 0 186858 chrUn_gl000212 186858 + 0 186858 156
-186858
-
-chain 8359013040 chr14 106368585 + 18070000 106360585 chr14 107349540 + 19000000 107289540 15
-1081285	1	1
-43	1	1
-76	2	0
-437	1	1
-19	1	1
-440	12	13
-59	15	15
-63	12	12
-70	0	1
-734	1	1
-165	1	4
-96	1	1
-46	1	0
-83	1	1
-149	4	4
-164	1	1
-18	1	1
-63	15	16
-359	1	1
-39	1	1
-103	1	1
-76	1	1
-139	1	1
-38	1	1
-344	1	1
-65	0	1
-166	5	5
-88	1	1
-66	0	287
-50	1	1
-317	0	1
-52	1	1
-92	4	0
-651	4	4
-82	1	1
-93	1	1
-64	1	1
-24	1	1
-856	1	1
-35	1	1
-258	1	1
-17	1	1
-478	1	0
-1048	70	70
-1279	1	1
-37	1	1
-1115	3	4
-72	1	1
-126	1	1
-102	1	1
-413	10	10
-132	6	6
-89	0	2
-209	15	4
-77	5	5
-427	1	1
-41	1	1
-949	1	1
-16	1	1
-732	1	1
-44	2	0
-128	0	1
-91	1	1
-180	6	6
-388	6	6
-50	13	12
-275	1	1
-33	1	1
-142	1	1
-61	1	1
-560	1	1
-20	1	1
-1327	6	13
-729	37	37
-284	1	1
-44	1	1
-205	0	4
-40	1	1
-352	10	10
-261	1	1
-39	1	1
-940	12	0
-1677	36	0
-159	1	1
-32	8	1
-818	0	6
-580	1	0
-931	1	0
-276	2	0
-3298	45	45
-169	14	0
-46	1	1
-882	2	0
-94	1	1
-49	1	1
-859	4	0
-45	1	1
-807	16	15
-416	0	3
-3345	15	15
-92	30	29
-80	1	1
-48	1	1
-2459	0	1
-646	1	1
-31	1	1
-392	1	1
-29	54	0
-1875	3	0
-141696	1	1
-32	1	1
-8201115	1	0
-107	1	0
-2137	1	1
-39	1	1
-8848	0	1
-4806	1	0
-2075	1	0
-16619	41	40
-2338	3	0
-11507	8	0
-1352	0	1
-4596	0	1
-2073	2	1
-28	1	1
-2311	1	1
-44	1	1
-10440	0	4
-894	0	1
-1641	0	96
-38	9	0
-20	1	1
-2706	6	0
-351	1	1
-25	1	1
-742	0	1
-1048	2	18
-12085977	0	1
-14871228	3	0
-29067652	1	1
-47	1	1
-20174307	1292	0
-2548043
-
-chain 14855 chr14 106368585 + 19159713 19190443 chr14 107349540 - 87865807 87904514 64
-20	0	6
-50	9933	9915
-37	16916	24930
-30	3690	3692
-25	27	0
-2
-
-chain 6432 chr14 106368585 + 19179765 19190441 chr22 51304566 + 16377620 16388301 97
-45	10604	10609
-27
-
-chain 7700812247 chr15 100338915 + 18260008 100338915 chr15 102531392 + 20000000 102521392 16
-8448	6	2
-4086	1	0
-9569	1	1
-40	0	5
-56	7	1
-872419	40441	40448
-553	4	4
-876	0	1
-38	1	1
-139	1	1
-23	1	1
-1881	1	1
-17	1	0
-499	8	8
-310	2	2
-25	11	5
-46	1	1
-78	1	1
-22	0	3
-181	5	6
-569	11	11
-539	1	1
-23	0	4
-261	1	1
-19	0	2
-776	13	15
-62	13	13
-860	1	0
-719	26	0
-1346	1	1
-134	0	1
-30	1	1
-1070	1	1
-21	1	1
-398	0	1
-177	5	21
-534	4	0
-770	0	6
-17	1	1
-606	1	1
-31	1	1
-1861	1	1
-53	1	1
-2169	3	0
-558	1	0
-18	1	1
-227	2	0
-13	1	1
-329	5	5
-430	1	1
-17	2	0
-620	0	1
-1112	2	0
-641	0	4
-476	1	1
-45	1	1
-1285	0	1
-1139	1	1
-47	1	1
-183	4	0
-1435	20	0
-176	0	1
-219	0	1
-607	1	1
-42	1	1
-371	2	8
-507	2	0
-66	1	0
-41	1	1
-999	4	4
-318	15	15
-1092	1	1
-72	1	1
-808	5	5
-54	2	2
-52	1	1
-40	1	1
-109	3	3
-47	1	1
-1535	14	0
-14012	4	0
-7954	4	1
-1350	1	0
-318	1	1
-25	1	1
-600	0	4
-442	0	1
-1396	1	1
-36	1	1
-1107	0	3
-1441	0	5
-360	1	1
-47	1	1
-228	10	0
-37	1	1
-497	1	1
-37	1	1
-2129	4	0
-1242	2	0
-478	4	0
-708	1	1
-90	1	1
-154	10	10
-1583	1	1
-31	1	1
-1302	0	37
-101	14	14
-1138	1	1
-83	10	0
-11	7	0
-111	1	1
-29	1	1
-2917	1	1
-32	1	1
-1762	1	1
-46	1	1
-449	1	0
-2458	9	1
-869	1	0
-534	1	1
-47	1	1
-309	1	0
-6358	22	0
-564	0	1
-1845	1	0
-660	1	1
-25	1	1
-68	1	0
-182	0	9
-54	3	18
-1519	1	1
-32	1	1
-559	1	1
-30	1	1
-3851	1	0
-265	8	7
-240	4474	0
-428	1	0
-1651	11	10
-297	1	0
-665	21	0
-48	1	1
-1763	2	0
-245	1	1
-39	1	1
-519	1	1
-31	1	1
-2398	0	6
-749	49	1
-2074	4	0
-701	5	5
-337	1	0
-470	1	1
-43	1	1
-1163	3	0
-1342	1	1
-43	1	1
-140	0	1
-83	1	1
-24	1	2
-37	1	1
-723	1	1
-36	1	1
-99	3	0
-27	1	1
-92	1	0
-80	43	43
-1095	0	13
-384	0	2
-292	1	1
-39	1	1
-101	12	12
-576	0	2
-1907	1	1
-19	1	1
-318	1	0
-1973	1	1
-32	1	1
-689	1	1
-49	1	1
-357	8	8
-2081	13	13
-260	15	15
-2295	1	1
-24	1	1
-2558	1	1
-26	1	1
-571	16	23
-323	0	1
-36	0	1
-5353	111	0
-1711	38	70
-272	13	13
-1284	0	1
-1128	4	4
-2189	1	0
-474	2	0
-1284	61	67
-643	1	1
-37	1	1
-381	0	2
-56	1	0
-2591	1	1
-55	1	1
-160	4	4
-116	1	1
-89	2	0
-316	0	1
-785	20	0
-152	1	1
-21	1	1
-600	0	6
-568	1	0
-278	1	1
-29	1	1
-89	0	4
-1737	1	1
-58	1	1
-368	24	24
-2113	20	24
-218	0	2
-18	1	1
-684	4	4
-3200	1	1
-31	1	1
-58	18	18
-164	1	1
-37	1	1
-296	6	6
-431	1	1
-35	1	1
-431	1	1
-45	1	1
-93	1	1
-24	1	1
-216	1	1
-46	1	1
-2773	0	17
-751	2	1
-104	1	1
-59	1	1
-445	1	1
-26	1	1
-356	1	0
-1484	1	2
-436	25	25
-306	1	1
-55	1	1
-230	4	4
-892	1	0
-364	7	7
-796	1	1
-26	1	1
-663	0	2
-80	0	15
-4391	1	0
-133	1	1
-25	0	4
-41	0	2
-164	1	1
-61	4	4
-925	3	0
-1882	13	13
-4513	1	0
-111	1	1
-76	1	1
-202	6	0
-680	0	1
-200	3	0
-429	0	2
-736	1	1
-18	1	1
-1573	0	1
-119	1	1
-245	0	9
-11	1	1
-1656	54	22
-616	2	1
-158	0	1
-587	1	1
-39	4	1
-1053	6	6
-1116	1	1
-34	1	1
-152	10	7
-448	0	1
-269024	100000	863295
-334079	100000	50000
-180553	0	74
-66	73	3
-40	1	0
-28	156	73
-202	1	1
-17	0	1
-156	1	1
-55	1	1
-111	0	1
-144	1	1
-57	0	1
-687074	50000	50000
-120647	0	348
-45586	0	1
-6994	1	0
-3398063	44008	12354
-7672	0	2
-1809	1	0
-428524	101014	10165
-43170	4	4
-1064959	128966	5086
-1021	0	1
-1710	1	0
-931	0	2
-4505	0	1
-686	525	2
-432	33	0
-58	20	20
-12369	1014	0
-6233	0	1
-359485	100000	111749
-33855821	0	239
-2852113	1	0
-7040367	0	1
-2815738	3	1
-7055922	60000	50000
-363827	32	32
-104991	0	1
-203136	0	6050
-2271	47	47
-1424473	60000	50000
-13510190	22012	5553
-9194	0	3
-109	0	4
-40	0	1
-43	0	7
-2352	0	13
-5027	0	2
-534	1	0
-794	0	2
-4233	0	2
-5769	1	0
-381	1	0
-2524	0	2
-547	0	5
-1967	0	1
-1207	105	0
-1027	0	6
-3935380
-
-chain 4143271 chr15 100338915 + 19154641 19368514 chr15 102531392 + 21901264 22115049 110
-40441	8593	8593
-26	89965	89965
-4257	1	1
-30	1	1
-185	16464	16391
-43	29947	29883
-25	1	1
-34	23835	23884
-25
-
-chain 390135 chr15 100338915 + 26478746 26483022 chr15 102531392 + 28681030 28685306 6048
-1039	22	22
-3215
-
-chain 187810 chr15 100338915 + 26483022 26517556 chr15 102531392 - 73809068 73843318 79
-41	12	0
-36	1	1
-490	5	5
-285	1	1
-71	1	1
-215	1	1
-53	0	12
-8114	1	0
-10796	15	15
-2483	0	1
-20	1	1
-2048	8856	8847
-163	792	517
-33
-
-chain 51529 chr15 100338915 + 26530390 26530949 chr15 102531392 + 28731348 28731907 2473877
-450	8	8
-101
-
-chain 17522 chr15 100338915 + 26516748 26516957 chr15 102531392 + 22658399 22658608 1968
-209
-
-chain 14035 chr15 100338915 + 20378176 20378474 chr15 102531392 + 22829101 22829399 772378
-73	69	69
-156
-
-chain 12347 chr15 100338915 + 26530060 26530390 chr15 102531392 + 22671289 22671619 3189077
-244	4	4
-82
-
-chain 5537 chr15 100338915 + 96402403 96402461 chr15 102531392 + 98585049 98585107 22350382
-58
-
-chain 4486 chr15 100338915 + 96402461 96402508 chr15 102531392 + 98585002 98585049 16761199
-47
-
-chain 2874 chr15 100338915 + 26517060 26517091 chr15 102531392 + 28719096 28719127 6634083
-31
-
-chain 2874 chr15 100338915 + 26517029 26517060 chr15 102531392 + 28719096 28719127 6634084
-31
-
-chain 2874 chr15 100338915 + 26516998 26517029 chr15 102531392 + 28719096 28719127 6634085
-31
-
-chain 2874 chr15 100338915 + 26516967 26516998 chr15 102531392 + 28719096 28719127 6634086
-31
-
-chain 2314 chr15 100338915 + 26530003 26530033 chr15 102531392 + 22671232 22671262 5236
-30
-
-chain 12940492 chr15_random 784346 + 189260 358080 chr15 102531392 + 28561246 28726591 233
-2522	0	1
-3762	1	1
-40	1	1
-2427	6472	2
-1744	0	1
-263	0	7
-2963	4	4
-1889	1	0
-2501	0	1
-3377	6	6
-5238	0	1
-1277	5	5
-38	1	1
-8232	12	8
-5507	0	18
-155	1	0
-379	14	14
-363	7	13
-336	1	1
-46	1	1
-218	8	8
-1074	0	4
-101	12	13
-178	1	1
-93	1	1
-156	10	11
-398	0	20
-45	1	1
-255	9	10
-2661	0	1
-17	1	1
-82	1	1
-14	1	1
-227	64	64
-1154	1	0
-493	1	1
-39	1	1
-369	1	0
-21	1	1
-322	2	7
-222	0	2
-171	15	0
-81	1	1
-47	1	1
-159	9	9
-154	1	0
-272	4	4
-26	1	1
-121	8	7
-659	1	0
-440	1	1
-35	1	0
-1419	15	0
-181	0	2
-292	0	15
-1767	1	1
-44	1	1
-59	0	1
-910	0	1
-290	1	0
-288	1	0
-567	2	0
-1088	0	1
-1758	1	0
-72	1	1
-21	1	1
-5748	17	17
-800	0	1
-2037	13	13
-113	5	5
-2832	1	1
-44	1	1
-3581	2	0
-33	1	1
-812	5	5
-33	0	1
-257	17	17
-1932	0	14
-168	0	1
-424	5	0
-24	1	1
-67	14	14
-90	1	5
-124	1	1
-34	1	1
-48	0	9
-460	0	8
-294	7	0
-813	1	3
-240	1	0
-511	0	9
-190	1	0
-267	1	1
-38	1	1
-1082	7	57
-21	15	0
-28	0	1
-5	1	1
-123	0	5
-781	1	1
-21	1	1
-390	1	1
-36	1	1
-287	1	1
-90	0	3
-6	2	2
-189	9	9
-263	2	1
-724	13	14
-308	2	0
-1752	1	1
-114	1	1
-236	4	0
-46	1	1
-72	5	0
-1039	1	1
-25	1	1
-403	1	1
-22	1	1
-231	6	6
-834	15	15
-617	1	1
-53	1	1
-243	1	1
-154	3	5
-571	11	16
-231	1	1
-47	1	1
-910	1	1
-45	1	1
-1510	1	1
-79	1	1
-2053	1	1
-48	1	1
-768	8	8
-546	1	1
-19	1	5702
-784	6	0
-275	20	13
-131	114	114
-363	1	1
-46	1	1
-396	1	1
-39	1	1
-75	15	15
-1875	1	0
-332	1	1
-49	1	1
-265	3	2
-55	1	1
-96	1	1
-136	1	0
-305	8	8
-297	0	2
-255	2	2
-23	1	1
-181	19	6
-151	0	1
-707	667	9324
-284	5	3
-73	1	1
-208	26	25
-34	0	773
-80	20	0
-2003	400	125
-163	2	0
-2630	9	1
-19	1	1
-100	12	0
-2421	0	2
-47	21227	0
-853	1	0
-1238	0	12
-3571	1	1
-20	0	1
-2483	15	15
-8803	287	9594
-5992
-
-chain 8627768 chr15_random 784346 + 422939 629603 chr15 102531392 - 19338638 19927596 385
-168	56	59
-73	4	4
-378	23	23
-868	29	29
-85	1	0
-528	119	5106
-152	31	31
-184	8	7
-322	0	1
-62	46	45
-77	37	46
-80	22	22
-201	45	47
-175	31	33
-1923	82	77
-546	7051	32690
-7810	209	153340
-1308	1	0
-9826	1	0
-1486	1	1
-148	1	0
-76	6	6
-53	36	34
-178	5447	565
-14	14505	121
-72	13	16
-57	1	1
-157	0	2
-11	1	1
-74	1	1
-24	3	3
-220	1	1
-54	1	1
-142	1	1
-82	2	0
-60	4	0
-99	1	1
-106	1	1
-98	1	1
-402	1	1
-79	4	7
-78	1	9
-5	0	1
-31	7	7
-65	1	1
-105	0	1
-22	6	8
-76	10	8
-47	0	1
-39	3	0
-5	1	3
-108	2	2
-61	16307	40121
-676	26	26
-7087	25	25
-20818	7	7
-2750	60358	90388
-69	54	53
-165	166	516
-42	0	42
-81	4	151
-18	0	42
-148	111	112
-73	4	4
-378	23	23
-868	29	29
-85	1	0
-528	8	8
-280	32	34
-426	78	79
-81	648	334
-181	8	7
-485	0	2
-1404	24	24
-101	36	38
-240	8	8
-77	53	54
-347	18	18
-72	9	9
-94	82	82
-384	8	8
-250	108	151474
-1152	0	1
-633	226	12498
-3255	4	0
-58	32	32
-6209	1	1
-30	1	0
-1060	2	0
-3747	4	4
-173	5	5
-2548	0	22
-2275	0	20
-606	41	41
-4653	12	12
-6138	0	1
-148	5	0
-244
-
-chain 3986761 chr15_random 784346 + 0 334816 chr15 102531392 - 78891064 79878228 248
-30328	8040	15984
-3015	1	0
-70	44499	160931
-52	0	5
-1038	1	1
-29	1	1
-1001	0	18
-680	0	329
-181	1	1
-32	1	1
-839	2	0
-440	0	3
-547	1	0
-278	1	0
-410	1	1
-26	3	0
-101	1	1
-24	1	1
-149	0	9
-179	2	1
-29	1	1
-226	3	0
-21	1	1
-473	10	0
-717	2	0
-1044	1	1
-23	1	1
-625	1	1
-41	1	0
-150	1	1
-62	1	1
-145	59	59
-242	12	12
-179	1	1
-64	1	1
-1405	1	1
-35	0	2
-469	5	0
-401	0	1
-25	0	10
-17	1	1
-55	1	1
-165	1	1
-1966	15	23
-839	0	18
-969	1	1
-44	1	1
-1905	1	1
-47	1	1
-1037	128	128
-486	5	0
-1086	2	1
-199	4	4
-59	2	0
-243	84	0
-410	1	1
-39	1	1
-70	0	324
-77	1	187
-42	4	151
-897	135051	676116
-64	54092	52483
-25	1	1
-88	9286	18277
-201	26614	5202
-33	1	0
-1
-
-chain 2185345 chr15_random 784346 + 423107 689458 chr15 102531392 + 82637661 83186296 482
-30	0	5
-26	1346	1346
-29	885	5865
-31	576	577
-46	77	77
-5	0	1
-32	303	304
-45	175	176
-31	1923	1923
-66	1943	144683
-715	0	1
-548	13	13
-1907	1	1
-16	1	1
-66	3	0
-1219	5	1
-1066	34012	198199
-7204	2446	2446
-2762	100	7680
-5162	1	0
-2782	1	1
-26	7	4
-49	1	1
-3627	3	0
-1686	133598	65296
-3109	1	1
-21	1	1
-1430	63	63
-335	3	3
-14	4	0
-203	1	1
-23	5	5
-1262	4	4
-323	1	1
-47	1	1
-417	0	1
-537	19	1
-1913	2	0
-1685	6	0
-1740	1	1
-49	1	1
-120	1	1
-30	0	3
-920	4	0
-479	30	30
-1207	1	1
-182	4	0
-72	3	1
-78	1	1
-150	1	1
-46	1	1
-222	1	1
-24	1	1
-74	1	1
-44	1	1
-391	1	1
-33	1	1
-149	9	8
-56	1	1
-30	1	0
-52	1	1
-298	6	0
-22	1	0
-29	1	1
-393	35	0
-145	36	36
-226	15	15
-185	7	7
-692	1	1
-34	1	1
-1291	0	2
-1824	5	5
-1119	1	1
-49	1	2
-1025	25013	44930
-835	88	11347
-692	0	2
-2551	3	0
-1144	82	77
-1939	26	28
-164	1	1
-44	0	2
-201	1	1
-133	5	14
-77	1	1
-44	1	0
-92	1	0
-293	8	7
-184	31	31
-381	8	8
-384	1	1
-80	1	1
-94	9	9
-57
-
-chain 1845967 chr15_random 784346 + 61569 84889 chr15 102531392 - 73695594 73766494 782
-153	33	33
-49	1	0
-197	15	15
-67	62	62
-241	12	9
-185	41	44
-64	23	23
-559	50	50
-333	46	46
-397	6	6
-141	4	0
-660	50	50
-315	38	38
-282	309	47864
-57	7	7
-85	39	39
-340	62	62
-43	0	1
-77	0	1
-768	0	12
-71	70	69
-102	17	17
-58	45	50
-676	2	0
-430	21	22
-112	0	1
-401	4	0
-617	95	95
-168	50	50
-442	4	0
-91	114	114
-463	0	1
-94	28	28
-1577	16	16
-572	0	1
-1451	55	55
-2327	51	51
-394	1	0
-109	21	24
-660	50	54
-703	1	0
-93	22	22
-94	48	48
-219	46	46
-352	22	22
-150	155	161
-173	19	19
-162	6	12
-1201	48	49
-119	17	17
-435	4	4
-146	38	38
-946	10	10
-98	37	37
-60	47	47
-579
-
-chain 1297748 chr15_random 784346 + 203918 328028 chr15 102531392 - 73698913 73856126 264
-567	109104	118059
-369	106	23997
-700	2	0
-40	0	248
-320	0	33
-130	1	1
-18	1	1
-138	20	20
-1341	8	0
-863	1	1
-48	1	1
-240	1	1
-34	20	0
-3218	1	1
-20	1	1
-2062	46	46
-285	14	14
-937	1	1
-25	3	3
-305	1	1
-42	1	1
-706	2	0
-232	1	1
-67	1	1
-88	4	5
-844	1	1
-82	1	1
-430	0	7
-78	1	1
-458	27	27
-52
-
-chain 898399 chr15_random 784346 + 457589 504019 chr15 102531392 - 19636589 19905366 626
-5344	14	14
-7167	26767	249114
-26	7087	7087
-25
-
-chain 844102 chr15_random 784346 + 95554 784338 chr15 102531392 + 22730405 27183335 411
-59	9906	9932
-128	2128	2090
-42	1792	637909
-89	10	10
-71	198	198
-122	137	141
-341	29	29
-104	103	103
-395	11	14
-667	6	7
-74	7	0
-178	1	5
-203	9	4
-172	55	55
-791	25	25
-714	19	22
-597	133	133
-142	2	0
-252	0	4
-260	67	67
-41	6	0
-860	29	30
-258	93	95
-1793	11	11
-358	71	70
-242	1	1
-20	1	1
-1308	0	3
-468	0	2
-755	1	1
-81	2	2
-72	3	0
-597	4	4
-492	25	7
-1459	10	9
-674	16	16
-711	1	1
-49	1	1
-1525	1	1
-45	1	1
-2919	1	1
-36	1	1
-493	1	1
-21	1	1
-830	16	0
-3	7	0
-644	17	17
-479	0	1
-2343	0	315
-307	8	311
-87	0	3
-330	42	0
-520	7	6
-72	2	1
-745	6	6
-324	6	0
-398	22	22
-118	27	27
-68	600887	3728395
-44872
-
-chain 555121 chr15_random 784346 + 634265 679702 chr15 102531392 + 82723475 82991213 602
-20	1	1
-41	24204	246463
-2085	6	6
-667	14	14
-596	0	24
-1743	415	422
-870	1	0
-3572	1	1
-1152	8	0
-498	0	1
-3239	1	1
-34	1	1
-1283	1	1
-41	1	0
-676	0	2
-2078	0	1
-1283	0	18
-681	1	0
-223
-
-chain 530253 chr15_random 784346 + 409131 430676 chr15 102531392 - 19567939 19581201 1716
-786	8	0
-171	8918	159
-2113	8268	8752
-1281
-
-chain 417534 chr15_random 784346 + 35735 80744 chr15 102531392 + 23413134 23608954 1095
-840	0	54
-916	0	2
-777	3337	13583
-637	50	57
-858	0	4
-779	0	14
-171	1	2
-927	4	0
-1753	2	0
-814	35	35
-1073	14	14
-81	99	101
-66	42	42
-1291	66	66
-240	45	48
-68	36	36
-98	38	38
-1141	5	5
-70	14	15
-150	46	46
-650	13461	153954
-62	1206	1201
-45	3148	3138
-46	6617	6616
-50	2415	2415
-46	615	621
-64
-
-chain 169648 chr15_random 784346 + 417136 418914 chr5 180915260 + 131590649 131592427 748288
-1778
-
-chain 152639 chr15_random 784346 + 200201 201828 chr15 102531392 + 28662778 28664407 841936
-970	0	1
-468	5	6
-184
-
-chain 151945 chr15_random 784346 + 110737 203590 chr15 102531392 - 73700255 73867708 1083
-74	87238	121334
-88	426	14673
-942	2	0
-567	1880	28137
-86	1	1
-62	1	1
-716	14	14
-212	0	1
-468	0	1
-76
-
-chain 142059 chr15_random 784346 + 583198 664057 chr15 102531392 - 16763491 17663089 651
-176	7	7
-242	7	7
-1002	1	1
-61	1	1
-286	10	10
-1697	57790	716388
-17	1	1
-12	3589	70884
-35	145	145
-36	6576	99374
-431	11	1
-19	0	4
-96	2	0
-98	1	1
-62	1	1
-1047	10	15
-223	1	0
-575	2	0
-465	1	0
-8	1	1
-140	1	4
-65	1	1
-381	5111	5164
-145	1	1
-29	1	6
-32	8	2
-199
-
-chain 140486 chr15_random 784346 + 414032 415531 chr5 180915260 + 131627050 131628561 916856
-486	0	13
-290	2	1
-721
-
-chain 136843 chr15_random 784346 + 411466 412886 chr5 180915260 - 49283520 49284940 941594
-1420
-
-chain 113176 chr15_random 784346 + 577887 601700 chr15 102531392 + 85729223 85793813 754
-51	12	12
-630	1	1
-27	5	5
-51	41	41
-249	505	29710
-148	24	24
-110	0	2
-145	12	11
-646	54	53
-291	404	700
-590	7	0
-154	1	1
-36	5	3
-106	1	1
-42	1	1
-517	181	27
-164	18572	30011
-30
-
-chain 110898 chr15_random 784346 + 410214 411366 chr5 180915260 - 49350156 49351308 1158024
-1152
-
-chain 90718 chr15_random 784346 + 415631 422839 chr5 180915260 - 49281425 49321173 523505
-1405	4191	36723
-57	0	4
-785	0	4
-770
-
-chain 87628 chr15_random 784346 + 412986 413908 chr15 102531392 + 82958289 82959211 1453275
-922
-
-chain 78489 chr15_random 784346 + 408080 408895 chr5 180915260 + 131628738 131629553 1616335
-815
-
-chain 75848 chr15_random 784346 + 328894 334289 chr15 102531392 + 28663807 28669202 22165
-415	0	1
-219	14	14
-716	1	1
-62	1	1
-1820	1	0
-432	1	1
-21	1	1
-549	1	1
-42	1	1
-1098
-
-chain 55946 chr15_random 784346 + 579203 582900 chr15 102531392 - 19568187 19572180 874
-256	1085	1091
-54	291	291
-49	100	396
-255	1464	1453
-62	1	6
-80
-
-chain 50039 chr15_random 784346 + 328288 328894 chr15 102531392 - 73792653 73793260 1678654
-449	99	100
-58
-
-chain 41737 chr15_random 784346 + 53223 55079 chr15 102531392 - 79138743 79140590 1899
-987	5	0
-378	4	0
-30	1	1
-324	1	1
-36	1	1
-89
-
-chain 40184 chr15_random 784346 + 35650 52319 chr15 102531392 + 23578289 23604839 1865
-85	6507	16388
-50	5309	5309
-35	1168	1168
-99	66	66
-42	1291	1291
-66	240	240
-45	68	68
-36	98	98
-38	1380	1380
-46
-
-chain 36402 chr15_random 784346 + 63654 139260 chr15 102531392 + 20712328 20743651 996
-46	46877	2371
-29	5894	5886
-28	261	261
-55	0	3
-35	2163	2163
-70	17110	17298
-32	0	42
-10	2220	2218
-27	68	68
-335	31	31
-315
-
-chain 33407 chr15_random 784346 + 63271 84310 chr15 102531392 + 28567817 28636450 784
-50	2730	50298
-39	1361	1355
-70	2485	2497
-95	168	168
-50	618	618
-33	8782	8789
-48	4472	4485
-38
-
-chain 26884 chr15_random 784346 + 71527 84203 chr15 102531392 + 23434933 23447596 1313
-28	3628	3632
-43	3563	3545
-38	1762	1762
-91	1625	1625
-17	1	1
-30	721	722
-38	1054	1054
-37
-
-chain 17994 chr15_random 784346 + 577754 595591 chr15 102531392 + 82746005 82941680 2345
-133	777	777
-41	8083	152910
-1120	114	33023
-47	1	1
-5	265	681
-66	293	293
-111	2277	2277
-32	585	587
-5	0	1
-25	0	1
-6	1	0
-11	3164	2847
-53	540	540
-82
-
-chain 17584 chr15_random 784346 + 334305 334490 chr15 102531392 - 73868107 73868292 12488910
-185
-
-chain 16638 chr15_random 784346 + 334590 334767 chr15 102531392 + 28693782 28693959 13398527
-177
-
-chain 15574 chr15_random 784346 + 203754 203918 chr15 102531392 + 20713399 20713563 2884965
-164
-
-chain 11941 chr15_random 784346 + 112567 138945 chr15 102531392 + 28572611 28599524 1070
-24	791	791
-25	2119	2124
-57	23331	23861
-31
-
-chain 10106 chr15_random 784346 + 307857 307966 chr15 102531392 - 73812018 73812127 6634519
-109
-
-chain 9879 chr15_random 784346 + 198177 198415 chr15 102531392 + 28709863 28710101 596395
-238
-
-chain 5493 chr15_random 784346 + 34234 34291 chrY 59373566 + 27644447 27644504 32044688
-57
-
-chain 4133 chr15_random 784346 + 323293 323339 chr15 102531392 + 22666870 22666916 2166
-46
-
-chain 4016 chr15_random 784346 + 328237 328288 chr15 102531392 + 28668851 28668902 1790991
-51
-
-chain 3958 chr15_random 784346 + 107733 107775 chr15 102531392 - 78958306 78958348 1193
-42
-
-chain 3427 chr15_random 784346 + 198013 198049 chr15 102531392 + 20714128 20714164 4212128
-36
-
-chain 3014 chr15_random 784346 + 591545 685196 chr15 102531392 - 19431434 19585695 819
-47	89045	149655
-87	4422	4422
-50
-
-chain 2874 chr15_random 784346 + 307826 307857 chr15 102531392 - 73812018 73812049 6634520
-31
-
-chain 2855 chr15_random 784346 + 198147 198177 chr15 102531392 + 28831982 28832012 6776371
-30
-
-chain 2097 chr15_random 784346 + 200178 200201 chr15 102531392 - 79852957 79852980 911500
-23
-
-chain 1855 chr15_random 784346 + 307785 307816 chr15 102531392 + 28688468 28688499 5960032
-31
-
-chain 1291 chr15_random 784346 + 110710 110736 chr15 102531392 - 73822377 73822403 1552683
-26
-
-chain 1093 chr15_random 784346 + 687136 688443 chr15 102531392 - 19508634 19509938 742
-25	1251	1248
-31
-
-chain 7474990131 chr16 88827254 + 0 88822254 chr16 90354753 + 60000 90294753 17
-172342	0	1
-112	1	0
-5627	2	1
-8398838	17500	50000
-25336229	100000	150000
-1112651	9800000	11100000
-42003582	20000	50000
-1855370
-
-chain 9963354 chr16_random 105485 + 0 105485 chr16 90354753 + 29712462 29819360 326
-5589	7	8
-6783	0	218
-41	1	3
-38	1	1
-234	9	9
-219	46	0
-15	0	50
-3818	0	1
-1090	1	1
-45	1	1
-308	1	0
-524	0	4
-984	1	1
-24	1	0
-970	0	2
-106	1	1
-25	2	1
-436	0	5
-296	1	1
-23	2	0
-813	0	1
-1173	1	0
-5500	1	0
-1193	16	16
-1329	0	1
-2727	0	1
-3622	0	13
-3844	3	0
-5076	0	1
-4157	2	0
-178	0	2
-126	1	1
-344	5	6
-497	1	0
-620	7	7
-378	0	1
-669	24	25
-211	1	5
-453	0	11
-176	0	1
-486	0	8
-326	1	0
-2143	40	9
-2337	0	1
-866	1	0
-10	2	2
-1366	1	1
-44	1	1
-831	1	1
-45	1	1
-1612	6	5
-3801	0	1
-910	0	2
-486	0	1
-2775	1	0
-1083	1	0
-1793	1	1
-50	0	1
-1339	0	2
-145	17	17
-651	10	10
-1140	0	1
-724	1	1
-39	1	1
-3261	1	0
-1513	0	9
-606	22	0
-2027	27	19
-3470	11	0
-4100	3	0
-2045	0	4
-1047	0	1
-6647	78	1279
-748
-
-chain 7369813928 chr17 78774742 + 0 78653129 chr17 81195210 + 0 81060000 18
-252627	1	1
-24	1	1
-33	0	29
-566	87	0
-116	58	0
-92	29	0
-79	8	37
-485	1	59
-28	1	1
-76	233	1
-27	29	0
-2764	17	20
-2220	18	18
-837	1	1
-39	1	1
-564	1	1
-14	1	1
-2523	39	9
-1824	0	56
-76	29	0
-1681	0	1
-414	0	3
-256	0	68
-119	10	10
-290	0	4
-3193	1	0
-2562	0	4
-1809	3	0
-84	1	1
-62	1	1
-3703	0	27
-2041	16	0
-911	0	2
-696	4	4
-1428	15	15
-290	1	0
-1779	0	1
-60	1	1
-216	0	1
-375	1	1
-41	0	1
-9221	46522	100000
-3080543	0	1
-1208216	0	2
-1370	2	0
-1279	0	4
-322	0	5
-5661	210	0
-307	21	22
-973	8	0
-2901	1	0
-8479	0	1
-4122	7	0
-3187	4	0
-571	0	1
-167	0	1
-10174	7	7
-856	2	1
-1630	1	0
-4258	3	1
-1688	1	0
-264	0	304
-796	1	0
-8494	0	10
-2273	1	0
-8297	1	0
-1500	1	4
-733	2	2
-40	1	0
-4	0	1
-15	19	1
-64	1	253
-22	0	34
-18	1	205
-2070	2	0
-2981	14	13
-1309	0	1
-3991	3	0
-1939	0	3
-887	0	2
-463	18	0
-64	0	3
-2104	0	20
-556	0	4
-121	0	1
-3670	2	0
-4345	0	5394
-5334	0	1
-2505	4	10
-6776	14	11
-9573	0	1
-1136	0	2
-3754	1	0
-4588	1	0
-637	17	17
-1285	8	0
-369	0	1
-2084	1	0
-492	2	0
-517	0	4
-954	0	2
-1517	1	0
-958	9	0
-807	14	14
-357	0	10
-3611	0	2
-3191	0	39
-742	1	0
-646	2	0
-2211	1	0
-14829	1	0
-3465	11	0
-31	0	33
-833	16	16
-1345	0	1
-6443	5	4
-2627353	1	0
-11581979	0	43
-25	0	89
-238783	0	1
-1830653	1	0
-419873	100008	116477
-5587	6	0
-11056	0	2
-3240	1	0
-1237	0	2
-373	1	1
-43	1	1
-558379	100000	3000000
-1823446	0	1
-2728383	0	1
-29	0	1
-138	1	0
-144	6	8
-38	0	2
-7	0	1
-18	1	1
-70935	10	13
-52	28	31
-189	0	1
-41	2	2
-750363	44	44
-4038953	100000	50000
-1524006	1	1
-47	1	1
-231	2	0
-1175	1	0
-555	1	1
-49	1	1
-568	7	0
-605	2	0
-4954	1	1
-18	6	7
-567	0	1
-421	2	0
-943	75	67
-777	0	3
-925	3	0
-5	4	0
-318	1	0
-230	20	13
-244	1	1
-13	0	1
-42	1	1
-220	1	1
-56	1	1
-101	225	0
-1113	1	0
-17	1	1
-2614	4	0
-3186	50	50
-3872	0	2
-617	14	0
-5674	0	2
-1852	1	1
-63	1	1
-56	1	1
-25	1	1
-332	0	6
-423	5	5
-61	4	0
-108	1	1
-46	1	1
-160	2	2
-72	1	1
-162	1	1
-20	1	1
-53	1	1
-63	1	1
-112	1	1
-59	1	1
-5885	2	0
-255	36	36
-6246	1	1
-114	1	1
-255	1	1
-49	1	1
-210	1	1
-138	157793	28603
-927	5	0
-212	7	7
-641	17	17
-1296	46	46
-2513	71	69
-76	1	2
-61	50226	0
-1959	18	18
-2727	22	22
-6616	1	0
-5109	68	86
-2450	7	7
-50	10	0
-3439	0	4
-4179	0	4
-2749	0	1
-1124	8	0
-56	1	1
-1840	14	14
-624	8	0
-1743	4	0
-3689	0	4
-2051	0	1
-751	0	1
-2111	10	11
-3110	1	0
-682	1	0
-2795	5	2
-241	0	1
-165	1	3
-1258	0	1
-1602	5	0
-3715	0	1
-1308	0	1
-2058	1	0
-1624	0	1
-478	4	0
-9	6	0
-35	3	1
-47	0	1
-2425	1	0
-1178	0	4
-33	1	1
-415	5	5
-887	1	3
-946	29	29
-630	15	0
-259	2	0
-78	0	1
-4570	0	1
-322	1	0
-1801	2	0
-836	3	0
-1509	0	1
-1732	0	1
-935	0	6
-1372	1	0
-625	2	12
-5009	1	1
-75	0	1
-20	1	0
-153	20	21
-489	4	326
-1375	1	0
-774	1	1
-16	1	1
-3642	5	0
-497	4	0
-174	9	0
-1317	0	3
-508	0	1
-1126	1	0
-1952	0	2
-565	2	0
-871	0	1
-1460	6	0
-55	0	1
-420	6	0
-57	1	1
-119	1	1
-427	1	0
-459	14	11
-448	0	1
-1275	7	7
-360	1	0
-73	1	1
-48	1	1
-4920	3	0
-713	41	34
-691	1	1
-44	1	1
-1642	9	10
-566	0	1
-173	0	4
-798	0	10
-810	1	0
-78	18	17
-1531	0	2
-1274	1	1
-39	1	1
-53	3	1
-202	0	1
-707	17	17
-1733	0	1
-14053	3	0
-286	3	1
-5600	4	0
-6458	0	1
-4866371	102000	0
-1870113	257	0
-590050	6	18
-2095	12	12
-24846	1	0
-5154	22	22
-1561	0	4
-5946	1	0
-2317	0	4
-1643	1	1
-27	1	1
-1237	1	0
-2698	1	1
-140	1	1
-1689	0	2
-836	29	30
-5333	1	0
-509	1	0
-5216	6	0
-10782	47	47
-1095	13	3
-1039	0	1
-11605	1	0
-22064	0	1
-16612	8	0
-902	1	0
-757	1	0
-619	0	1
-10979	1	1
-18	1	1
-1517	1	0
-4576	1	0
-12559	4	0
-2725	0	1
-5291	2	0
-8706	0	1
-83	1	0
-424	0	7
-72	38	0
-5528	1	0
-23971	1	0
-7855	54	22
-4095	0	1
-803	5	5
-6382	6	0
-3545	0	28
-4265	0	2
-13194	6	6
-6463	1	0
-26075	1	1
-59	1	1
-10791	17	7
-707	0	1
-210	1	0
-1655	0	2
-5301	1	0
-1930	1	0
-14632	2	0
-1043	1	0
-3607	3	0
-312	0	1
-5953	2	0
-170	0	17
-489	0	1
-5260	0	28
-888	10	0
-2461	10	10
-237	2	0
-1716	3	1
-10691	0	4
-3757	1	0
-6173	0	1
-8017	1	2
-3594	0	4
-5439	0	1
-4138	28	57
-6418	0	1
-1267	1	0
-720	0	6
-1083	2	0
-3878	0	1
-3310	23	23
-4349	1	1
-44	1	1
-3135	0	1
-174853	1	2
-2008	7	7
-5657	0	1
-6496	0	3
-89	0	5
-665	0	1
-954	46	46
-375	7	8
-1248	28	28
-2041	0	2
-2753	1	0
-1863	0	3
-3228	1	0
-3575	0	4
-40	1	1
-6488	0	2
-8612	11	11
-3795	0	16
-2105	0	1
-268	1	1
-22	3	0
-7889	4	0
-701	4	0
-2411	28	34
-2943	2	3
-8420	1	0
-926	0	324
-6732	1	0
-543	4	3
-4028	2	0
-51	52	40
-3000	1	0
-530	1	0
-2083	0	2
-1173	0	17
-119	16	16
-2727	1	0
-543	0	1
-783	1	0
-1372	0	4
-8624	20	0
-278	44	44
-4364	51	50
-2856	0	1
-5399	0	1
-1506	1	0
-919	0	6
-7229	10	0
-3225	1	0
-435	1	0
-2814	47	47
-1577	0	132
-9785	0	1
-2035	6	0
-7655	1	0
-198207	0	132
-11704	0	5
-7648	1	0
-9062	4	0
-8778	0	2
-7014	1	0
-1613	0	2
-790	7	5
-7433	1	0
-6482	12	12
-6798	0	1
-1422	1	0
-3454	1	1
-43	1	1
-3097	0	2
-334	0	18
-1444	1	0
-2400	3	0
-3272	0	1
-9106	1	0
-1573	0	1
-4742	1	0
-3366	1	0
-5484	0	1
-2444	0	5
-5448	8	8
-2539	0	1
-1471	0	1
-238	1	1
-16	1	1
-288	5	5
-2995	0	2
-951	1	1
-35	1	1
-279	16	15
-3534	6	0
-3513	0	1
-163	0	1
-6173	0	1
-1074	1	0
-2818	1	0
-2868	0	1
-3796	1	0
-1118	1	167
-1278267	25	25
-10747172	0	217
-3504877	0	1053
-10844	13	11
-18805	1	0
-1960834	126729	50000
-3065	1	0
-3601036	90008	8833
-34292	1	0
-1834	0	44
-3083	1	1
-43	1	1
-789	1	0
-11432680	153000	50000
-1902015	0	4098
-99	0	21
-3183	6	6
-877	1	1
-49	1	1
-296	0	1
-1375	1	1
-21	1	1
-607	5	5
-98	0	22
-6811	1	1
-17	0	11
-3804	1	0
-1356	1	1
-29	1	1
-297	1	0
-9543	0	2
-3130	0	4
-861	0	1
-27346	1	0
-7547	8	6
-2834	0	2
-394	4	0
-6524	1	0
-405	11	8
-1128	7	0
-271	1	1
-21	0	28
-507	6	0
-1211	44	31
-384	0	3
-521	18	18
-395	11	0
-799	1	1
-25	3	2
-51	1	49
-49	1	1
-558	0	1
-351	1	0
-2779	13	13
-114398	65008	82124
-7795	0	1
-18	1	1
-4140	1	0
-28048	1	1
-32	1	1
-4630	1	0
-4573	3	0
-357	2	0
-4812	1	0
-14372	0	3
-203	0	1
-26257	1	0
-2734	0	2
-19262	5	5
-5022	0	1
-25471	0	1
-1114538	0	53
-82	126	0
-1416	16	16
-629	57	0
-463	1	0
-148	1	1
-24	1	1
-2322	1	1
-23	1	0
-725	0	16
-24	16	0
-95	9	9
-1277	0	1
-2498	0	1
-354	49	0
-41	0	50
-17	0	49
-37	0	49
-65	8	152
-906	0	47
-234
-
-chain 3352932 chr17 78774742 + 33364384 33585329 chr17 81195210 - 44852585 44945131 363
-36	7017	7017
-2072	1	1
-16	1	1
-2167	2	0
-2513	1	1
-44	1	1
-1296	17	17
-860	5	0
-1482	0	11
-3433	1	1
-18	1	1
-393	0	3
-198	19	18
-1850	4	5
-267	1	0
-1125	6	7
-1255	1	0
-1502	0	1
-37	0	1
-26	0	1
-302	0	1
-1164	4	2
-1145	8	8
-1170	0	1
-298	1	2
-330	1	0
-2433	13	13
-79	0	2
-5343	1	1
-26	1	1
-994	1	3
-943	0	3
-2485	1	1
-22	1	1
-1574	129212	0
-265	54	54
-5225	26	26
-995	36	36
-240	1	0
-5900	61	61
-112	65	65
-53	14	14
-150	95	95
-160	48	48
-108	70	66
-401	0	6
-354	27	27
-56	65	65
-716	5	3
-1097	4	0
-518	27	27
-944	11	11
-579	37	37
-614	1	0
-2967	12	0
-601	1	10
-1307	35	35
-1719	0	889
-1973	0	3
-709	2	0
-496	5	1
-185	11	11
-98	1	0
-724	3	0
-2103	0	5
-1038	0	1
-257	7	0
-231	1	0
-312	0	2
-423	6	6
-520	10	13
-294	1	0
-17	1	1
-413	4	0
-1698	1	1
-46	1	1
-597	1	1
-21	1	1
-1182	0	2
-50	1	1
-44	0	2
-34	66	3
-3318	3	0
-624	7	0
-507	0	1
-60	1	1
-49	1	1
-332	1	1
-38	1	1
-77	1	1
-19	1	1
-65	1	0
-1174	5	0
-76
-
-chain 1309281 chr17 78774742 + 33410392 33424757 chr17 81195210 + 36336024 36350387 1779
-203	116	116
-6522	2	0
-5195	584	584
-1743
-
-chain 421642 chr17 78774742 + 33424760 33429230 chr17 81195210 - 44789041 44793512 103557
-258	1	0
-320	0	1
-3477	0	1
-414
-
-chain 288364 chr17 78774742 + 33534894 33553104 chr17 81195210 + 60335980 60353933 1564
-39	403	82
-124	31	31
-264	17	18
-283	79	89
-146	36	36
-392	27	27
-75	32	32
-295	106	106
-170	1	0
-69	35	35
-148	57	57
-152	23	23
-96	16	16
-594	57	58
-172	87	87
-108	39	39
-156	68	68
-148	63	63
-54	9	9
-39	289	289
-30	13136	13189
-45
-
-chain 141893 chr17 78774742 + 38701721 38703214 chr17 81195210 + 41346194 41347687 907641
-1493
-
-chain 138910 chr17 78774742 + 59795041 59797994 chr3 198022430 + 46191235 46194190 927459
-65	140	139
-77	32	32
-50	53	53
-51	108	111
-72	86	86
-65	76	76
-109	74	74
-120	2	0
-121	111	111
-69	23	23
-101	39	39
-56	40	40
-294	20	20
-65	100	100
-105	124	124
-147	116	116
-64	108	110
-70
-
-chain 73899 chr17 78774742 + 33536708 33552896 chr17 81195210 + 36333128 36349315 1571
-27	75	75
-32	306	306
-95	240	240
-35	148	148
-57	881	881
-57	172	172
-87	108	108
-39	156	156
-68	148	148
-63	6667	6667
-36	6153	6152
-49	112	112
-64	239	239
-74
-
-chain 29385 chr17 78774742 + 33422514 33422962 chr17 81195210 + 60352539 60352987 2653
-73	72	72
-133	53	53
-117
-
-chain 28843 chr17 78774742 + 33535172 33536316 chr17 81195210 + 34740000 34741144 3516
-164	124	124
-31	564	564
-79	146	146
-36
-
-chain 23419 chr17 78774742 + 40573363 40573608 chr17 81195210 - 37977034 37977279 7093437
-245
-
-chain 22267 chr17 78774742 + 59795106 59797450 chr15 102531392 + 100960318 100962666 927477
-74	509	513
-86	250	250
-74	1061	1061
-100	108	108
-82
-
-chain 19110 chr17 78774742 + 33422430 33422845 chr17 81195210 + 34807497 34807912 5737
-84	73	73
-72	133	133
-53
-
-chain 15302 chr17 78774742 + 59872221 59872543 chrX 155270560 + 133327972 133328295 14745200
-91	145	146
-86
-
-chain 15089 chr17 78774742 + 33553212 33554185 chr17 81195210 + 34758015 34758988 3454
-70	755	755
-27	56	56
-65
-
-chain 12559 chr17 78774742 + 41846587 41875489 chr17 81195210 + 44708735 44737620 783
-44	4372	4365
-43	24396	24386
-47
-
-chain 12028 chr17 78774742 + 253252 253513 chr17 81195210 + 253455 253745 1186280
-87	116	116
-26	30	59
-2
-
-chain 9840 chr17 78774742 + 59850421 59850563 chr12 133851895 - 30785452 30785594 23191844
-56	27	27
-59
-
-chain 8117 chr17 78774742 + 33410595 33410681 chr17 81195210 + 34744635 34744721 10477
-86
-
-chain 7470 chr17 78774742 + 59872141 59872220 chr8 146364022 - 25940938 25941017 21166303
-79
-
-chain 6548 chr17 78774742 + 59823421 59823489 chr9 141213431 + 108396482 108396550 29214974
-68
-
-chain 6212 chr17 78774742 + 33601781 33601849 chr17 81195210 + 34807429 34807497 5781
-68
-
-chain 6147 chr17 78774742 + 33578902 33578968 chr17 81195210 + 34784578 34784649 3380
-29	0	5
-37
-
-chain 5883 chr17 78774742 + 33556525 33558123 chr17 81195210 + 34761324 34762919 3874
-27	1534	1531
-37
-
-chain 5739 chr17 78774742 + 59862459 59862519 chr13 115169878 + 43436593 43436653 31343618
-60
-
-chain 5729 chr17 78774742 + 59852430 59852489 chr7 159138663 - 42785228 42785287 31366016
-59
-
-chain 5493 chr17 78774742 + 254397 254454 chr17 81195210 + 254136 254193 32044913
-57
-
-chain 5493 chr17 78774742 + 254339 254396 chr17 81195210 + 254136 254193 32044914
-57
-
-chain 4633 chr17 78774742 + 59795405 59797489 chr7 159138663 + 22571262 22573349 985966
-53	1992	1995
-39
-
-chain 3684 chr17 78774742 + 59871978 59872017 chr5 180915260 + 67132991 67133030 32368210
-39
-
-chain 3604 chr17 78774742 + 59872312 59872350 chr6 171115067 + 73766967 73767005 18649321
-38
-
-chain 3578 chr17 78774742 + 59797823 59797921 chr9 141213431 - 46000791 46000889 1219359
-98
-
-chain 3496 chr17 78774742 + 59872079 59872141 chrX 155270560 - 52661918 52661980 17303862
-62
-
-chain 3063 chr17 78774742 + 59796390 59796453 chr18 78077248 + 3738092 3738155 1007405
-63
-
-chain 2832 chr17 78774742 + 78651772 78651801 chr17 81195210 + 81058451 81058480 35013371
-29
-
-chain 2507 chr17 78774742 + 254312 254338 chr17 81195210 + 254167 254193 28153285
-26
-
-chain 2327 chr17 78774742 + 253481 253511 chr17 81195210 + 253858 253888 2965414
-30
-
-chain 2229 chr17 78774742 + 59795509 59795562 chr9 141213431 + 99971007 99971060 1163412
-53
-
-chain 2158 chr17 78774742 + 59871912 59871978 chr10 135534747 - 7120285 7120351 17475521
-66
-
-chain 2116 chr17 78774742 + 41755737 41755765 chr17 81195210 - 18330211 18330239 723
-28
-
-chain 2038 chr17 78774742 + 59872018 59872072 chr12 133851895 - 60047857 60047911 21673207
-54
-
-chain 1971 chr17 78774742 + 33410681 33410711 chr17 81195210 + 58084086 58084116 2335
-30
-
-chain 1910 chr17 78774742 + 59797697 59797752 chr7 159138663 - 95523915 95523970 1276958
-55
-
-chain 1797 chr17 78774742 + 59795569 59795617 chr8 146364022 - 39560190 39560238 1234503
-48
-
-chain 1764 chr17 78774742 + 59795840 59795881 chr17 81195210 - 78142303 78142344 1077161
-41
-
-chain 1713 chr17 78774742 + 59797636 59797671 chr10 135534747 - 112842234 112842269 1000659
-35
-
-chain 1680 chr17 78774742 + 59795180 59795214 chr3 198022430 + 108471362 108471396 1315432
-34
-
-chain 1591 chr17 78774742 + 59795881 59795916 chrX 155270560 - 139019545 139019580 1025236
-35
-
-chain 1456 chr17 78774742 + 59796656 59796685 chr6 171115067 + 121488440 121488469 989186
-29
-
-chain 1332 chr17 78774742 + 33532356 33535172 chr17 81195210 + 34572150 34574966 5130
-25	2722	2722
-69
-
-chain 1250 chr17 78774742 + 59795215 59795246 chr11 135006516 - 104930893 104930924 1222490
-31
-
-chain 1089 chr17 78774742 + 59795324 59795355 chrX 155270560 - 141145732 141145763 1311664
-31
-
-chain 1006 chr17 78774742 + 59797671 59797695 chrX 155270560 + 72606434 72606458 1154867
-24
-
-chain 622 chr17 78774742 + 33334125 33344374 chr17 81195210 - 46414201 46424210 397
-69	10130	9890
-50
-
-chain 20335446 chr17_random 2617613 + 224588 1377183 chr17 81195210 - 41910550 46712950 133
-1433	3	0
-976	0	1
-281	0	1
-1231	0	14
-2584	0	15
-2816	1	0
-3815	1	0
-122	1	1
-25	1	1
-335	0	1
-4687	29	0
-68	0	1
-1769	32	0
-616	3	0
-1017	1	1
-35	1	1
-864	17	17
-321	4	4
-47	1	1
-6467	8	10
-746	1	0
-188	30	0
-179	14	14
-120	1	1
-19	1	1
-477	1	1
-25	1	1
-300	5	5
-33	4	4
-968	6	6
-1546	1	1
-39	1	1
-66	1	1
-92	1	1
-349	12	12
-839	3	3
-36	1	1
-654	1	1
-88	1	1
-647	3	0
-993	10	8
-296	0	12
-183	4	4
-385	1	1
-25	1	1
-405	1	1
-29	1	1
-108	1	1
-36	1	1
-57	1	1
-88	2	1
-78	4	4
-39	1	1
-133	1	1
-133	1	1
-162	1	8
-398	14	14
-52	16	16
-122	1	1
-56	1	1
-98	1	1
-25	1	1
-332	1	1
-48	1	1
-83	0	1
-25	1	1
-71	1	1
-71	1	1
-79	4	0
-87	1	1
-207	1	1
-70	1	1
-263	16	16
-143	1	1
-72	1	1
-198	0	1
-1062	104	0
-6	61	0
-278	8	8
-454	49	49
-297	0	1
-1271	1	1
-48	1	1
-85	1	1
-66	1	1
-89	1	0
-327	1	1
-61	1	1
-51	1	1
-25	2	2
-72	1	1
-80	1	1
-132	1	1
-136	4	4
-63	1	1
-47	1	1
-134	1	1
-28	1	1
-1004	1	1
-45	1	1
-2017	1	1
-22	1	1
-778	8	0
-3805	0	4
-3884	1	0
-1082	1	1
-39	1	1
-926	1	0
-12182	105	0
-19079	4	0
-108	0	6
-81968	13	12
-5894	126	0
-5069	696334	2698100
-65	1	1
-31	0	1
-165	15	0
-2504	0	2
-1155	0	10
-463	1	0
-2422	0	1
-90	10	0
-75	0	1
-397	0	1
-64	31	32
-1531	4	0
-2064	0	1
-1305	1	0
-1045	0	1
-1972	0	1
-3554	0	2
-428	1	0
-1541	10	12
-1808	1	0
-1758	0	1
-500	1	0
-737	1	0
-218	0	1
-2132	0	1
-744	0	1
-7456	2	0
-45	0	2
-2311	23	23
-727	0	2
-916	1	0
-360	5	5
-2956	0	1
-3263	3	0
-1460	1	1
-34	1	1
-117	1	0
-1852	10	0
-50	7	7
-3949	42	42
-528	40	40
-736	100	17954
-680	119199	29667
-516	22	22
-2397	100	1694896
-1291	0	4
-232	1	1
-32	1	1
-1529	0	4
-20	2	0
-42	0	2
-94	0	10
-402	1	1
-16	1	1
-1099	1	1
-49	1	1
-2223	32	32
-1530	36	36
-1563	57608	84063
-160	94	94
-164	108	108
-123	61	61
-136	449	449
-3509	28	28
-1092	1	0
-611	1	1
-28	1	1
-2932	1	1
-52	49	45
-64	1	1
-27	1	1
-1320	1074	0
-6819	0	1
-4716
-
-chain 16836081 chr17_random 2617613 + 2022361 2536424 chr17 81195210 + 77630507 81150656 169
-143	0	4
-116	4	4
-74	12	10
-298	1	0
-533	1	0
-340	27	27
-130	16	16
-184	15	14
-699	1	0
-68	1	0
-153	1	0
-1835	1	0
-5	2	0
-95	1	0
-105	6	4
-14	1	0
-10	1	0
-88	1	0
-63	1	0
-27	1	0
-37	1	0
-18	1	0
-75	1	0
-49	2	0
-366	1	0
-206	1	0
-114	1	0
-237	1	0
-265	16	12
-223	1	0
-182	1	0
-26	1	0
-34	1	0
-138	1	0
-170	1	0
-26	1	0
-16	1	0
-53	4	2
-85	1	0
-188	1	0
-107	1	0
-31	1	0
-180	1	0
-4	2	1
-4	1	0
-16	1	0
-21	1	0
-324	1	0
-106	2	0
-46	1	0
-74	1	0
-12	1	0
-557	2	0
-194	5	2
-23	1	0
-67	6	3
-7	1	0
-50	1	0
-143	1	0
-190	1	0
-24	1	0
-310	1	0
-204	1	0
-108	1	0
-15	1	0
-212	1	0
-3	1	0
-57	4	2
-44	1	0
-298	1	0
-38	1	0
-54	1	0
-112	1	0
-20	2	0
-79	1	0
-10	6	3
-12	1	0
-59	1	0
-51	1	0
-234	2	0
-43	1	0
-194	1	0
-5	1	0
-96	9	4
-67	2	0
-270	1	0
-13	1	0
-59	1	0
-54	1	0
-57	1	0
-375	1	0
-50	1	0
-87	1	0
-83	4	2
-234	4	2
-44	1	0
-24	7	4
-25	1	0
-44	1	0
-139	1	0
-201	12	9
-215	1	0
-5	1	0
-30	1	0
-43	1	1
-54	16	13
-210	1	0
-109	2	0
-55	1	0
-14	1	0
-126	1	0
-79	1	0
-326	1	0
-18	1	0
-150	1	0
-13	1	0
-85	1	0
-47	1	0
-16	1	0
-41	1	0
-43	5	3
-56	1	0
-62	1	0
-164	1	0
-108	1	0
-20	2	0
-137	1	0
-214	1	0
-14	1	0
-5	2	0
-60	5	3
-24	1	0
-72	2	0
-25	1	0
-23	1	0
-60	1	0
-53	1	0
-15	1	0
-145	1	0
-337	1	0
-112	1	0
-39	1	0
-234	1	0
-7	2	0
-108	1	0
-19	1	0
-150	1	0
-22	5	3
-221	1	0
-30	1	0
-195	1	0
-126	1	0
-116	1	0
-189	1	0
-231	1	0
-87	2	0
-136	2	0
-69	1	0
-350	1	1
-29	1	0
-76	1	0
-42	1	0
-10	3	1
-63	1	0
-168	1	0
-97	1	0
-11	1	0
-291	1	0
-150	1	0
-10	1	0
-141	15	12
-9	1	0
-35	1	1
-57	1	0
-9	2	0
-211	1	0
-193	1	0
-51	1	0
-337	1	0
-94	1	0
-9	1	0
-58	1	0
-152	1	0
-58	1	0
-127	1	0
-6	1	0
-65	1	0
-379	1	0
-93	1	0
-11	1	0
-106	1	0
-545	1	0
-11	1	0
-66	2	0
-28	1	0
-242	4	2
-32	8	5
-373	10	9
-242	1	0
-207	1	0
-51	1	0
-132	1	0
-118	1	0
-19	2	0
-116	1	0
-16	1	0
-23	1	0
-54	1	0
-67	1	0
-62	1	0
-52	10	7
-15	2	0
-33	1	0
-248	1	1
-27	1	0
-122	1	0
-25	1	0
-55	1	0
-141	1	0
-57	1	0
-45	1	0
-21	1	0
-66	4	2
-23	1	1
-234	1	1
-25	2	2
-56	1	0
-34	1	0
-12	1	0
-11	1	0
-5	1	0
-54	1	0
-16	1	0
-64	1	0
-361	1	1
-24	1	0
-111	1	0
-12	1	0
-74	1	0
-56	1	0
-43	1	0
-21	1	0
-8	1	0
-13	2	0
-34	1	0
-59	1	0
-79	1	0
-159	1	0
-69	2	0
-15	2	0
-8	1	0
-142	19	17
-302	1	0
-49	1	0
-114	1	0
-72	1	0
-38	1	0
-16	1	0
-39	1	0
-106	1	0
-16	3	1
-31	1	0
-5	1	0
-43	1	0
-120	1	0
-16	1	0
-82	1	0
-47	4	1
-10	6	3
-59	1	0
-10	1	0
-258	1	0
-97	14	13
-72	1	0
-126	1	0
-14	1	0
-92	1	0
-406	1	0
-194	1	0
-43	1	0
-30	1	0
-50	1	0
-8	1	0
-161	6	4
-39	1	0
-12	1	1
-60	1	0
-61	1	0
-23	1	0
-13	1	0
-41	2	0
-260	1	0
-144	1	0
-38	1	0
-45	1	0
-17	1	0
-73	1	0
-64	20	13
-25	1	0
-84	1	0
-42	11	6
-180	1	0
-32	2	0
-172	0	1
-65	1	0
-53	1	0
-39	3	1
-203	1	0
-16	3	1
-42	3	2
-27	6	4
-13	1	0
-99	1	0
-34	4	2
-511	1	0
-182	1	0
-230	8	3
-42	1	0
-16	1	1
-270	5	4
-13	1	0
-141	1	0
-100	1	0
-144	1	0
-146	1	0
-356	1	0
-99	1	0
-69	2	0
-146	1	0
-55	18	14
-54	7	4
-18	1	0
-170	2	0
-45	1	0
-13	1	0
-628	1	0
-93	1	0
-46	1	0
-131	1	0
-20	1	0
-98	1	0
-20	1	1
-355	0	2
-88	1	0
-121	1	0
-31	1	0
-27	1	0
-132	1	0
-64	1	0
-43	1	0
-30	1	0
-95	1	0
-22	1	0
-44	6	3
-20	1	0
-138	1	0
-198	1	0
-100	1	0
-163	1	0
-6	1	0
-155	1	0
-79	1	0
-34	1	0
-193	1	0
-159	1	0
-50	5	3
-30	1	0
-9	1	0
-115	1	0
-93	1	0
-54	1	0
-91	1	0
-336	1	0
-134	18	13
-126	1	0
-61	1	0
-133	1	0
-613	4	2
-244	1	0
-586	1	0
-5	1	0
-93	19	16
-148	6	3
-12	2	1
-20	1	1
-138	102	11399
-572	8	6
-529	1	0
-659	1	1
-35	1	0
-191	2	0
-56	1	0
-105	1	0
-18	1	0
-226	1	0
-59	15	16
-275	1	0
-87	1	0
-5	1	0
-85	1	0
-21	1	0
-71	1	0
-507	1	0
-21	3	1
-82	1	0
-32	1	0
-39	1	1
-312	1	0
-263	1	0
-196	5	3
-23	5	3
-275	1	0
-46	2	0
-154	0	6
-229	1	0
-27	1	0
-87	1	0
-5	2	0
-502	1	0
-97	105	101
-162	1	0
-114	1	0
-65	1	1
-43	1	0
-217	1	0
-14	1	0
-172	1	0
-326	1	0
-9	1	0
-446	1	0
-73	1	0
-245	2	0
-114	1	0
-237	1	0
-35	22	13
-318	1	0
-320	1	0
-76	1	1
-54	1	0
-44	1	1
-100	1	0
-30	0	1
-462	1	0
-22	1	1
-72	1	1
-121	1	0
-37	1	0
-22	5	0
-23	1	1
-154	1	0
-63	1	1
-87	1	0
-278	1	0
-36	1	1
-230	1	0
-182	3	1
-51	1	0
-7	1	0
-101	1	0
-39	1	0
-17	1	0
-55	1	0
-13	1	0
-114	1	0
-13	1	0
-24	1	1
-69	10	9
-171	1	0
-60	1	1
-77	1	1
-8	2	1
-25	1	0
-51	1	0
-327	1	0
-105	2	0
-133	0	1
-28	1	0
-67	1	0
-119	4	2
-334	1	0
-37	2	1
-47	1	0
-165	1	0
-29	1	0
-35	1	0
-46	1	0
-9	1	0
-657	1	0
-62	1	0
-171	1	0
-17	1	0
-113	1	0
-15	1	1
-123	1	1
-62	1	0
-4	1	1
-288	21	0
-809	0	1
-22	1	0
-61	1	0
-52	1	0
-25	2	0
-263	3	1
-35	1	0
-192	238701	2061422
-87	1	0
-6	1	0
-1080	1	0
-76	1	0
-1007	1	0
-98	1	0
-35	1	0
-134	1	0
-285	1	0
-33	0	1
-225	1	0
-281	1	0
-108	1	0
-55	1	0
-107	1	0
-202	15	12
-111	1	0
-36	2	0
-25	1	0
-202	1	0
-97	1	0
-143	1	1
-21	1	0
-222	1	0
-41	1	0
-492	0	4
-594	1	0
-181	1	0
-410	1	0
-37	1	0
-13	1	0
-34	1	0
-76	38	37
-204	27	27
-204	40	32
-432	1	0
-143	1	0
-271	1	0
-224	96	91
-385	1	0
-337	1	0
-375	1	0
-139	22	17
-297	1	0
-72	1	0
-5	2	0
-193	1	0
-8	1	0
-28	1	0
-17	1	0
-17	1	0
-445	1	0
-169	1	36
-35	3	1
-425	1	0
-41	1	0
-37	1	0
-79	1	0
-100	1	0
-130	1	0
-419	1	0
-17	1	1
-284	3	1
-56	1	0
-9	2	1
-655	1	0
-158	2	0
-8	1	0
-34	1	1
-519	1	0
-39	1	0
-78	1	0
-216	1	0
-3	1	0
-68	1	0
-56	1	0
-70	1	0
-290	0	4
-46	0	2
-108	0	2
-23	0	114
-830	1	0
-136	76	98
-63	65	64
-380	1	0
-106	1	1
-358	1	0
-64	1	1
-17	1	0
-171	5	3
-27	1	1
-130	13	10
-131	1	0
-415	1	0
-5	1	0
-37	1	0
-29	1	0
-27	1	0
-750	1	0
-249	1	0
-221	1	0
-109	1	0
-50	1	0
-323	1	0
-296	1	0
-383	1	0
-67	1	0
-239	2	0
-248	1	0
-9	1	0
-180	1	0
-241	1	0
-40	3	1
-6	1	0
-19	1	0
-27	1	0
-166	1	0
-80	1	0
-163	1	0
-33	1	0
-9	1	0
-172	1	0
-261	1	0
-200	1	0
-14	6	2
-121	1	0
-37	4	2
-74	1	0
-97	5	3
-10	2	1
-51	1	0
-642	1	0
-317	14	11
-163	3	1
-25	2	0
-875	1	0
-128	1	0
-211	8	4
-409	1	0
-233	1	0
-263	1	0
-12	1	0
-73	1	0
-188	1	0
-96	1	0
-183	1	0
-126	1	0
-235	1	1
-68	0	1
-618	1	0
-13	1	0
-73	1	0
-1315	883	57
-78	2	2
-774	1	0
-21	1	0
-13	1	0
-9	2	0
-168	1	0
-214	1	0
-84	3	1
-645	1	0
-150	1	0
-72	1	0
-8	1	0
-108	1	0
-120	1	0
-1469	1	0
-38	1	0
-697	1	0
-44	1	0
-345	1	0
-126	1	0
-46	1	0
-110	1	0
-972	1	0
-104	23	22
-93	2	2
-38	1	0
-34	3	1
-730	1	0
-151	1	0
-124	1	0
-210	1	0
-60	1	0
-227	1	0
-122	1	0
-225	2	0
-26	1	0
-85	1	0
-84	6	3
-408	1	0
-5	3	1
-18	1	0
-69	1	0
-76	1	0
-122	1	0
-288	1	0
-10	1	0
-55	1	0
-22	2	0
-455	1	0
-246	1	0
-37	1	0
-153	1	0
-27	1	0
-101	1	0
-158	1	0
-107	1	0
-437	1	0
-31	1	0
-149	1	0
-121	1	0
-5	1	0
-175	1	0
-76	1	0
-75	1	0
-26	2	0
-98	1	0
-169	1	0
-82	1	0
-20	1	0
-326	1	0
-274	1	0
-78	1	0
-42	1	0
-64	1	0
-11	7	4
-39	1	0
-91	1	0
-140	1	0
-397	14	12
-500	7	4
-879	5	2
-448	1	0
-42	1	0
-522	1	0
-247	1	0
-484	1	0
-689	1	0
-66	1	0
-198	1	0
-441	1	0
-143	1	0
-35	1	0
-84	1	0
-9	1	0
-445	1	0
-110	1	0
-204	1	0
-31	1	0
-77	1	0
-54	1	0
-213	1	0
-601	1	0
-25	1	0
-239	2	2
-42	1	0
-29	2	0
-15	1	0
-175	1	0
-611	1	0
-418	1	0
-191	1	0
-295	1	0
-30	8	5
-609	1	0
-372	1	0
-154	2	0
-117	1	0
-282	1	0
-360	1	0
-750	1	0
-402	1	0
-45	1	0
-678	1	0
-17	1	0
-117	1	0
-148	1	0
-164	3	1
-51	1	0
-65	1	0
-452	1	0
-1443	1	0
-142	1	0
-509	1	0
-92	10	6
-264	1	0
-69	1	0
-78	1	0
-43	1	0
-164	1	0
-349	1	0
-117	1	0
-373	1	0
-235	1	0
-160	1	0
-8	1	0
-263	1	0
-15	1	0
-23	1	0
-151	1	0
-100	1	0
-204	1	0
-250	1	0
-33	3	1
-272	1	0
-262	1	0
-55	1	0
-519	1	0
-251	1	0
-189	1	0
-459	1	0
-183	1	0
-295	1	0
-552	1	0
-94	16	12
-259	1	0
-30	1	0
-396	1	0
-17	1	0
-72	1	0
-56	1	0
-90	1	0
-106	1	0
-19	2	0
-271	1	0
-448	1	0
-628	497	497
-254	26	26
-391	1	0
-32	1	0
-171	1	0
-126	20	17
-94	1	0
-446	1	0
-30	1	0
-96	1	0
-17	1	0
-159	1	0
-390	1	0
-105	1	0
-94	1	0
-5	2	0
-21	1	0
-22	1	0
-380	1	0
-12	1	0
-211	1	0
-377	1	0
-3	1	0
-63	1	0
-37	2	2
-1596	1	0
-638	1	0
-30	1	0
-665	13	10
-32	1	0
-102	1	0
-361	1	0
-609	1	0
-590	1	0
-1189	29	29
-345	1	0
-732	1	0
-544	1	0
-272	1	0
-725	1	0
-198	1	0
-8	1	0
-275	1	0
-95	1	0
-101	1	0
-626	1	0
-154	1	0
-242	1	0
-937	1	0
-142	1	0
-236	1	0
-456	12	9
-77	1	0
-189	1	0
-172	1	0
-201	1	0
-417	1	0
-179	1	0
-141	1	0
-219	1	0
-164	1	0
-138	1	0
-500	2	0
-263	1	0
-48	1	0
-17	1	0
-91	1	0
-169	1	0
-8	1	0
-185	1	0
-48	1	0
-345	1	0
-546	2	2
-229	2	2
-614	1	0
-73	2	2
-129	1	0
-91	1	0
-287	3	1
-504	2	0
-264	22	22
-508	1	0
-1324	1	0
-1313	1	0
-36	1	0
-346	1	0
-285	5	2
-31	1	0
-6	1	0
-133	1	0
-27	1	0
-101	1	0
-249	1	0
-68	5	3
-34	1	0
-31	1	0
-140	1	0
-350	1	0
-312	1	0
-139	1	0
-66	1	0
-24	1	0
-37	1	0
-16	1	0
-32	1	0
-204	1	0
-21	1	0
-11	1	0
-120	2	0
-161	1	0
-13	1	0
-143	1	0
-46	1	0
-136	3	1
-75	1	0
-176	1	0
-23	1	0
-30	1	0
-34	1	0
-307	1	0
-27	1	0
-261	1	0
-39	1	0
-995	1	0
-556	1	0
-211	1	0
-278	1	0
-850	1	0
-285	1	0
-207	1	0
-154	1	0
-51	1	0
-237	1	0
-204	1	0
-11	1	0
-348	2	0
-41	1	0
-75	2	0
-47	1	0
-49	1	0
-253	1	0
-171	10	6
-106	1	0
-83	1	0
-86	1	0
-30	1	0
-166	1	0
-297	1	0
-480	1	0
-285	1	0
-339	1	0
-30	1	0
-74	1	0
-15	1	0
-310	1	0
-88	1	0
-111	1	0
-104	1	0
-644	1	0
-29	1	0
-413	2	0
-33	3	1
-19	1	0
-321	1	0
-318	1	0
-131	1	0
-111	1	0
-89	1	0
-751	120	120
-314	1	0
-613	2	0
-991	3	1
-44	1	0
-42	1	0
-57	1	0
-102	1	0
-318	1	0
-47	2	0
-186	1	0
-550	1	0
-504	1	0
-76	1	0
-336	1	0
-505	1	0
-34	2	0
-61	1	0
-257	1	0
-439	1	0
-94	1	0
-18	1	0
-6	1	0
-86	1	0
-18	1	0
-179	1	0
-52	1	0
-635	1	0
-535	1	0
-90	1	0
-531	2	0
-59	1	0
-132	1	0
-122	1	0
-17	1	0
-96	1	0
-281	1	0
-145	1	0
-342	1	0
-132	1	0
-95	16	12
-417	1	0
-143	1	0
-135	1	0
-11	1	0
-486	1	0
-224	1	0
-277	1	0
-449	1	0
-321	34	30
-96	1	0
-20	1	0
-358	1	0
-146	1	0
-176	1	0
-37	1	0
-92	1	0
-115	1	0
-245	1	0
-72	1	0
-65	1	0
-108	1	0
-41	13	10
-121	65	54
-54	1	0
-359	1	0
-53	1	0
-55	1	0
-10	1	0
-5	1	0
-6	2	1
-43	1	0
-9	1	0
-223	1	0
-90	1	0
-157	1	0
-686	1	0
-250	1	0
-160	1	0
-264	50363	1224780
-4948	0	1
-1850	60	67
-3859	0	1
-456	4	5
-1605	21	21
-1281	7	13
-5090	456	0
-1543	1	1
-37	1	1
-2825	1	1
-64	1	1
-1075	0	1
-721	0	1
-5566	22	5
-1136	1	0
-2390	0	3
-1347	0	2
-4617
-
-chain 16543266 chr17_random 2617613 + 0 174588 chr17_gl000205_random 174588 + 0 174588 172
-174588
-
-chain 10747371 chr17_random 2617613 + 1609852 1757206 chr17 81195210 - 15050606 15196423 297
-3573	1	0
-1031	1	0
-4890	10	7
-318	0	1
-667	1	0
-168	0	2
-974	2	0
-143	2	0
-208	4	0
-2621	10	10
-634	2	0
-1898	0	2
-99	21	21
-6731	1	1
-49	1	1
-345	2	0
-210	1	1
-1621	1	0
-1077	0	2
-371	6	0
-4548	5769	26131
-1148	0	1
-1283	1	1
-24	1	0
-2931	0	6
-38	22	0
-682	0	1
-1267	0	2
-470	9	19
-2335	0	9
-720	8	0
-2859	26315	4346
-4414	0	1
-777	1	4
-894	4	0
-3207	0	3
-3071	0	1
-1338	1	0
-869	1	0
-2072	0	1
-395	1	0
-1060	8	8
-1138	1	1
-6	2	0
-40	1	1
-473	0	1
-748	2	0
-306	8	0
-81	6	0
-748	4	0
-158	0	22
-6454	0	2
-145	1	1
-49	1	1
-619	0	1
-1579	14	14
-455	1	0
-5224	1	1
-31	1	0
-31	0	57
-3855	0	2
-2164	11	21
-1491	0	4
-213	16	4
-4589	6	6
-1564	0	6
-325	0	1
-2241	0	1
-149	0	1
-4150	0	4
-4768	0	12
-411	0	6
-804	2	0
-124	19	19
-937	2	0
-997	27	29
-685	37	37
-5	2	0
-35	37	48
-29	1	1
-237	2	0
-333	0	1
-1296	31	23
-472	4	0
-34	1	1
-683
-
-chain 7797784 chr17_random 2617613 + 2131554 2212864 chr17_gl000204_random 81310 + 0 81310 420
-81310
-
-chain 5191141 chr17_random 2617613 + 986480 1282720 chr17 81195210 + 34482891 34744119 309
-118	29	29
-73	435	3450
-113	9	9
-74	44	43
-109	53	55
-147	361	38
-603	128	128
-69	8	8
-278	22	22
-1262	20	20
-83	37	44
-478	1	1
-32	1	1
-54	1	1
-81	1	1
-57	0	1
-71	4	4
-83	1	1
-103	1	1
-80	1	1
-15	1	1
-312	15	15
-185	1	1
-24	1	1
-720	1	1
-19	1	1
-185	1	1
-35	1	1
-144	7	7
-238	1	1
-62	3	3
-196	10	10
-123	1	1
-99	1	1
-1997	1	1
-27	1	1
-64	49	45
-19	1	1
-547	1	1
-16	1	1
-796	0	2
-213	0	1
-1353	0	5
-59	1	1
-604	1	0
-1099	28	28
-2219	0	1
-1732	6	6
-115	1	1
-80	1	1
-123	1	1
-106	1	1
-164	1	1
-92	1	1
-160	34984	45270
-79	5	5
-348	149	150
-73	23	23
-322	46	46
-284	35	28
-1307	16	16
-515	89	89
-62	9	9
-203	3	0
-65	10	9
-188	33	32
-342	1	0
-100	0	1
-67	48	52
-69	1	0
-2330	39	42
-356	2	0
-767	5	9
-69	4	0
-373	29	30
-138	1	0
-571	0	1
-273	13	13
-140	25	24
-457	39	39
-204	19	19
-137	49	49
-178	59	59
-220	38	38
-66	23	22
-315	1	0
-399	30	30
-345	62	62
-200	36	36
-1097	33	35
-255	5	0
-61	4	0
-371	48	33
-119	30	30
-52	0	2
-236	0	2
-81	13	13
-168	12	12
-174	0	1
-250	81	81
-185	35	35
-343	27	35
-271	232	235
-79	116	119
-288	61	61
-869	9	8
-282	7	0
-6366	1	0
-2033	112	1128
-417	0	1
-64	145492	5631
-587	0	2
-184	392	14227
-792	0	4
-408	2	1
-1608	0	1
-1287	0	2
-676	1	1
-31	1	1
-112	1	1
-91	1	1
-173	1	0
-42	1	14
-784	11	11
-3219	0	13521
-8127	24	23
-7132	0	12
-9450	0	4
-3351	28	28
-5832	3	0
-100	0	1
-67	0	5
-31	6	5
-10	1	1
-69	2	0
-2314	1	0
-11507	0	1
-742	0	63471
-5695	0	1
-731	1	0
-3536
-
-chain 4342758 chr17_random 2617613 + 615163 663282 chr17 81195210 - 81146986 81195210 699
-117	89	88
-430	1	1
-8	7	3
-19	1	1
-521	14	7
-577	1	0
-4	1	0
-284	1	1
-19	12	6
-55	3	0
-193	1	0
-383	16	13
-508	5	0
-404	6	1
-1326	31	25
-723	84	3
-41	75	0
-21	1	0
-303	27	0
-65	81	27
-94	1	1
-40	1	1
-118	746	87
-30	2	1
-37	1	1
-179	2	0
-43	1	1
-46	27	0
-35	32	0
-278	1	0
-353	8	10
-363	13	1
-106	4	0
-188	34	34
-206	1	0
-3	1	0
-1339	1	0
-632	1	1
-21	0	4
-248	1	0
-655	1	0
-258	1	0
-777	1	0
-1440	16	16
-124	1	1
-36	1	0
-33	1	1
-89	1	0
-165	1	0
-86	1	1
-47	1	1
-319	8	4
-506	4	2
-537	16	12
-2310	1	0
-7	2	0
-922	9	0
-294	1	0
-145	1	0
-1890	2	0
-15	1	0
-38	1	0
-2030	12	6
-1208	2	0
-107	1	0
-438	2	0
-492	2	0
-184	1	0
-42	1	1
-646	1	35
-28	4	4
-62	4	36
-43	0	32
-54	1	1
-8	2	0
-23	1	1
-77	0	32
-34	0	32
-52	1	167
-69	70	6
-61	0	36
-99	0	64
-605	22	22
-133	1	0
-296	1	1
-42	1	0
-361	10	6
-225	14	14
-387	1	97
-405	0	480
-101	1	0
-24	2	2
-339	0	336
-1176	1	0
-192	1	0
-553	1	0
-114	4	1
-544	18	12
-575	3	0
-85	1	0
-934	1	0
-667	13	7
-28	18	12
-770	10	6
-149	1	0
-884	22	20
-214	0	1
-607	1	0
-129	1	0
-14	6	4
-27	6	3
-10	1	0
-4	2	0
-155	39	28
-214	2	0
-43	1	1
-1236	44	27
-1759	2	0
-472	6	2
-342	8	5
-970	6	0
-227	1	0
-691	1	0
-359	2	0
-141	1	0
-5	1	0
-2008	1	0
-302
-
-chain 3923033 chr17_random 2617613 + 864624 922266 chr17 81195210 + 81075742 81117538 762
-924	1	0
-428	1	0
-763	1	0
-19745	32	32
-637	15873	36
-186	1	0
-2389	1	0
-616	1	0
-1932	12	12
-10081	18	18
-2216	1	0
-92	1	0
-271	4	4
-67	5	5
-698	83	82
-473	27	27
-62
-
-chain 3905383 chr17_random 2617613 + 460666 565054 chr17 81195210 + 41343520 41406910 763
-9362	3	1
-1313	0	1
-344	1	0
-2289	0	2
-14919	0	1
-1393	6	4
-1047	1	0
-21	0	1
-31	5511	0
-28	783	8
-978	3	4
-213	0	2
-2198	0	702
-75	4479	3549
-723	0	13
-165	1	1
-19	3	3
-113	0	4
-88	1	1
-41	1	0
-38	7	7
-98	17	17
-152	50743	16221
-115	169	185
-169	0	4
-278	1	1
-48	1	1
-6399
-
-chain 3524656 chr17_random 2617613 + 1876393 1913891 chr17_gl000203_random 37498 + 0 37498 830
-37498
-
-chain 3296870 chr17_random 2617613 + 1963891 2002673 chr17_gl000204_random 81310 + 42877 81310 872
-560	1	0
-101	2	0
-296	42	39
-438	2	0
-256	1	0
-136	1	0
-109	1	0
-101	2	0
-234	64	62
-405	37	35
-61	1	0
-366	5	3
-501	39	37
-142	1	0
-191	27	24
-59	6	4
-53	67	62
-91	1	0
-159	1	0
-74	40	38
-164	1	0
-57	28	26
-75	1	0
-46	1	0
-61	45	43
-117	1	0
-360	45	43
-204	1	0
-180	61	58
-589	1	0
-212	1	0
-88	1	0
-53	1	0
-492	1	0
-75	26	24
-273	1	0
-701	1	0
-444	1	0
-75	1	0
-393	11	9
-105	59	56
-72	42	40
-79	1	0
-79	1	0
-95	153	144
-127	1	0
-85	4	2
-175	3	0
-222	1	0
-121	1	0
-48	1	0
-50	1	0
-61	1	0
-213	1	0
-73	1	0
-180	2	0
-83	1	0
-58	1	0
-192	11	5
-57	140	125
-101	1	0
-91	38	34
-190	1	0
-73	1	0
-116	6	4
-275	16	14
-200	1	0
-201	3	1
-632	1	0
-60	1	0
-198	9	1
-254	2	0
-89	1	0
-60	38	36
-326	32	28
-306	1	0
-55	1	0
-100	18	16
-127	36	32
-67	1	0
-78	1	0
-90	1	0
-63	35	31
-120	150	141
-103	9	7
-406	88	85
-54	15	13
-142	9	7
-112	32	30
-237	1	0
-114	27	18
-157	40	38
-145	1	0
-380	20	18
-73	109	104
-57	1	0
-83	68	65
-567	1	0
-378	0	4
-282	29	27
-725	1	0
-204	1	0
-246	1	0
-295	17	15
-243	1	0
-187	46	44
-56	1	0
-244	1	0
-303	1	0
-121	16	15
-253	1	0
-273	44	44
-427	10	0
-403	2	0
-219	1	0
-151	1	0
-115	14	13
-193	1	0
-63	1	0
-63	38	36
-609	1	0
-81	42	40
-297	1	0
-455	17	14
-278	3	1
-691	1	0
-417	104	101
-57	1	0
-93	5	3
-309	48	47
-303	1	0
-324	1	0
-126	41	37
-138	2	0
-233	1	0
-100	50	47
-86	9	7
-256	1	0
-208	1	0
-486	3	1
-118	1	0
-70	69	64
-455	8	6
-149	1	0
-175	5	2
-115	1	0
-159	1	0
-109	12	9
-135	33	31
-53	1	0
-256	5	3
-82	41	38
-268	70	67
-600	1	0
-128	18	16
-114	1	0
-149	62	58
-99	57	54
-158	42	38
-88	1	0
-75	46	43
-300	50	47
-71	13	11
-118	1	0
-177	1	0
-120	1	0
-275	1	0
-74	13	11
-230	1	0
-117	6	4
-113	39	37
-71	1	0
-597	9	8
-82	10	6
-195	10	8
-361	1	0
-53	1	0
-291	0	1
-149	1	0
-164
-
-chain 2935078 chr17_random 2617613 + 1427191 1457644 chr17 81195210 + 81045288 81075743 955
-1667	2	0
-1156	0	2
-25	0	2
-27603
-
-chain 2199778 chr17_random 2617613 + 671651 748529 chr11 135006516 - 134809692 134880676 533
-53	3	0
-176	68	0
-22	38	1
-38	43	16
-122	41	249
-34	4	16
-5	1	0
-6	1	0
-68	0	37
-1042	1	1
-35	1	1
-27	326	0
-359	1	0
-3	2	0
-176	16	5
-44	5	1
-224	1	0
-432	1	1
-35	1	1
-266	21	16
-109	14	10
-806	0	34
-465	56	0
-57	4	0
-787	1	0
-283	1	1
-27	1	1
-1090	1	1
-81	1	0
-1354	1	0
-40	1	1
-305	1	0
-89	1	1
-63	1	1
-48	1	1
-167	11	11
-83	8	4
-45	5	3
-343	1	1
-47	49	0
-56	0	294
-17	49	0
-79	5	103
-162	49	0
-442	10	10
-438	3	0
-50	1	1
-676	1	1
-39	1	1
-66	1	1
-7	1	0
-35	1	1
-547	7	2
-549	2393	0
-3	2913	0
-65	1	0
-60	1	1
-69	1	1
-42	0	1
-175	5	4
-100	1	0
-402	1	0
-39	1	0
-10	1	0
-10	1	0
-14	1	1
-95	4	2
-120	0	5
-126	1	1
-32	2	1
-72	1	1
-335	1	1
-45	1	0
-403	4	1
-54	1	0
-108	1	0
-289	1	1
-40	1	0
-164	12	12
-169	1	1
-76	1	1
-71	3	3
-34	1	1
-65	72	72
-84	64	1
-55	190	1
-52	1	1
-42	5	5
-138	1	1
-39	1	1
-311	6	7
-300	1	0
-597	17	17
-187	1	1
-32	100	2817
-24	203	202
-36	1	1
-115	4	0
-139	25	24
-1050	1	0
-56	1	0
-90	1	0
-33	1	0
-35	3	0
-114	1	1
-19	1	1
-215	1	0
-431	1	1
-23	1	0
-421	14	11
-292	1	1
-22	1	1
-49	2741	2490
-33	4095	4075
-9	0	3
-18	1474	1474
-3	6	1
-11	3	0
-38	14404	14348
-27	15613	15513
-5	5	5
-21	1	2
-13	19	20
-34	104	104
-44	214	216
-8	3	0
-27	2800	929
-60	1	1
-29	4270	3383
-30	49	0
-26	1	1
-40	2712	2960
-33	1	1
-7
-
-chain 2173268 chr17_random 2617613 + 699498 748919 chr1 249250621 - 248538148 248591008 468
-685	3	3
-36	4	4
-73	9	5
-59	70	63
-42	285	48
-44	1	1
-96	74	80
-321	1	1
-49	1	1
-107	1	1
-47	11	2
-85	3	0
-67	1	0
-179	19	16
-220	9	0
-138	33	33
-136	1	1
-26	1	1
-545	1	0
-8	14	10
-42	1	1
-64	1	1
-28	1	1
-119	1	1
-49	1	1
-54	1	1
-32	1	1
-960	1	1
-41	1	1
-731	16	16
-57	1	1
-19	1	1
-118	1	0
-196	1	1
-50	1	1
-263	1	1
-52	1	1
-171	1	1
-26	1	1
-181	25	16
-51	27	0
-56	1	1
-139	0	4
-33	1	1
-236	1	1
-17	1	1
-192	15	13
-186	1	1
-30	7	7
-280	1	1
-80	1	0
-196	62	54
-290	1	1
-38	1	1
-772	10	10
-123	1	1
-28	1	0
-20	34	22
-81	0	4
-45	1	1
-806	1	1
-31	1	0
-35	1	1
-101	17	15
-89	1	1
-34	1	0
-8	1	1
-290	13	9
-284	1	0
-53	7	0
-26	6	0
-605	4	0
-531	35	35
-704	1	1
-66	1	1
-168	1	1
-34	1	1
-527	1	1
-30	1	1
-249	16	7
-414	1	1
-27	1	1
-344	1	1
-43	1	1
-117	1	1
-30	1	1
-862	0	1
-229	1	1
-48	1	1
-197	14	14
-972	19	31
-924	1	1
-42	1	1
-123	1	1
-56	1	1
-77	1	1
-23	1	1
-119	1	1
-53	18	11
-382	1	1
-17	1	1
-116	5	2
-37	1	1
-38	2	0
-223	1	1
-21	6	1
-583	1	0
-400	0	4
-1574	27	27
-54	4	1
-158	10	7
-336	6	7
-492	1	0
-14	1	1
-843	1	2
-247	1	1
-41	1	1
-50	6	6
-513	17	13
-615	12	12
-585	32	23
-161	6	6
-515	9	5
-43	5	3
-460	5	5
-158	11	11
-252	1	1
-22	3	0
-135	12	12
-556	0	1
-542	3	0
-298	4	1
-24	4	0
-117	9	5
-151	0	1
-291	0	1
-360	15	15
-962	20	17
-231	1	0
-293	1	0
-33	32	0
-40	15	10
-213	23	23
-458	1	1
-51	1	1
-437	1	0
-394	1	1
-25	2	0
-117	10	4
-50	1	1
-40	1	1
-626	8	5
-492	1	0
-383	1	0
-672	1	1
-136	1	1
-203	2	2
-88	1	1
-261	1	1
-45	1	1
-189	15	15
-78	1	1
-49	1	1
-93	1	0
-35	13	10
-21	1	1
-527	99	94
-103	44	44
-79	24	26
-111	39	36
-235	24	27
-117	7	7
-127	222	1777
-58	167	165
-59	75	75
-203	12	12
-55	56	44
-269	34	32
-87	24	24
-250	35	29
-682	91	91
-312	4	3
-583	124	2653
-132	399	398
-134	1	1
-33	1	1
-179	1	1
-27	1	1
-245	4	4
-93	1	1
-940	1	1
-20	1	1
-271	1	1
-16	0	1
-353	24	17
-369	146	0
-83	1	1
-34	1	1
-1103	1	1
-26	1	1
-112	1	0
-3	1	0
-370	32	27
-410	170	174
-51	1	1
-310	42	41
-66	5	2
-319
-
-chain 2047886 chr17_random 2617613 + 532224 554093 chr17 81195210 - 39794017 39815907 1262
-682	50	50
-270	0	4
-316	0	1
-691	1	0
-678	1	2
-601	1	0
-383	1	0
-20	1	1
-1048	2	0
-1884	0	6
-690	0	5
-1205	1	1
-43	0	2
-891	19	19
-1916	7	6
-2354	0	3
-2253	10	0
-2406	0	13
-1972	6	6
-595	0	4
-148	100	100
-356	20	20
-109	4	4
-73	2	0
-59
-
-chain 1863993 chr17_random 2617613 + 1011919 1106715 chr17 81195210 + 34578530 36287451 432
-1027	148	148
-295	18	18
-204	37	37
-144	7	7
-238	38	38
-357	101	101
-125	64	64
-712	21	22
-181	126	1729
-702	0	2
-184	29	30
-236	37	37
-1080	60	65
-606	1	0
-328	63	63
-556	20	20
-94	37	37
-172	0	1
-1430	0	1
-151	53	53
-605	36	36
-292	1	0
-84	17921	60667
-87	11034	74480
-38	804	804
-30	345	345
-62	200	200
-36	1097	1097
-33	696	696
-48	119	119
-30	986	986
-81	185	185
-35	641	641
-232	79	79
-116	288	288
-61	11306	1517682
-155	7	0
-427	5	5
-742	2	0
-85	1	1
-401	1	1
-97	1	1
-566	1	0
-607	1	0
-1318	0	24
-1995	71	3
-34	0	2
-44	1	1
-39	0	1
-3518	0	4
-469	1	0
-294	10	13
-520	6	6
-403	0	3
-331	1	0
-231	7	0
-255	0	1
-3122	0	1
-729	0	1
-117	11	11
-186	4	0
-84	1	0
-412	2	0
-19	1	1
-1642	6	0
-628	1	1
-21	1	1
-377	50	50
-151	0	9
-2370	1	1
-35	1	1
-1328	1	10
-586	14	0
-789	12	13
-1397	0	1
-1521	0	2
-382	0	1
-866	1	1
-20	1	1
-710	2	0
-1259	161	161
-387	28	28
-53	24	24
-3626	1	0
-1718
-
-chain 1732426 chr17_random 2617613 + 2586433 2605017 chr17 81195210 - 39776940 39795500 1439
-1157	1	1
-31	0	5
-2053	8	8
-691	1	1
-30	1	1
-1212	3	0
-3864	1	0
-3	1	0
-56	15	0
-860	1	1
-30	1	1
-6532	4	4
-147	13	13
-1042	17	17
-319	7	0
-181	10	10
-68	42	42
-51	16	14
-115
-
-chain 1719393 chr17_random 2617613 + 1323861 1343929 chr17 81195210 + 45650033 45670000 1446
-76	1	1
-94	1	1
-84	9	9
-70	1	1
-43	1	0
-40	0	2
-126	1	1
-38	1	1
-391	1	1
-43	1	1
-100	0	1
-66	12	12
-65	1	1
-39	2	0
-9	4	0
-25	1	1
-99	1	1
-27	0	4
-362	22	4
-659	2	0
-433	0	20
-16	1	1
-117	1	1
-248	1	1
-200	1	1
-23	1	1
-248	6	0
-120	1	1
-930	1	1
-14	1	1
-76	1	1
-11	1	0
-23	2	0
-23	1	1
-236	1	1
-48	1	1
-108	1	1
-141	7	5
-50	1	1
-27	1	1
-306	0	3
-290	1	1
-20	0	1
-31	1	1
-618	5	6
-350	14	6
-55	0	2
-112	4	0
-50	1	1
-263	1	0
-51	1	1
-527	1	1
-47	1	1
-247	1	1
-34	3	3
-169	0	2
-33	3	0
-165	12	0
-163	1	1
-77	1	0
-56	26	26
-54	6	6
-338	2	0
-185	73	73
-336	0	3
-89	1	1
-19	1	1
-65	18	18
-89	0	1
-178	1	1
-45	1	1
-67	8	0
-347	0	1
-22	1	1
-192	1	1
-73	1	4
-38	0	1
-61	1	1
-164	1	1
-74	3	3
-260	5	0
-89	9	9
-142	1	1
-49	1	1
-71	0	1
-62	1	1
-391	1	1
-78	1	1
-100	1	1
-32	1	1
-155	11	12
-304	8	0
-79	1	1
-115	1	1
-29	1	1
-97	19	0
-168	1	1
-19	4	4
-359	2	0
-18	1	1
-358	1	1
-38	1	1
-83	1	1
-31	1	1
-389	1	1
-32	1	1
-128	1	1
-39	1	1
-54	1	1
-11	2	0
-165	4	0
-34	1	1
-58	1	1
-68	3	0
-230	1	1
-44	1	1
-276	16	16
-170	6	6
-104	1	1
-61	1	1
-107	6	6
-177	1	1
-66	5	0
-60	1	1
-14	1	1
-50	4	4
-15	1	1
-62	1	1
-194	1	1
-72	22	1
-39	1	1
-70	1	1
-42	1	1
-58	1	1
-36	1	1
-329	1	0
-136	1	1
-192	9	10
-682	24	21
-81	0	1
-367	12	12
-81
-
-chain 1570588 chr17_random 2617613 + 1644335 1687876 chr17 81195210 + 66068832 66112387 1087
-1168	16352	16361
-2197	2	0
-1554	1	0
-6339	0	4
-1936	0	7
-2357	2	0
-7231	1	0
-4401
-
-chain 1476469 chr17_random 2617613 + 2303443 2319476 chr17 81195210 + 79885696 79901628 1655
-880	1	0
-298	1	0
-60	43	40
-227	40	38
-326	1	0
-77	1	0
-148	1	0
-199	21	19
-60	1	0
-224	1	0
-173	1	0
-317	88	84
-84	1	0
-96	48	45
-432	1	0
-107	1	0
-505	1	0
-88	1	0
-551	1	0
-107	1	0
-176	1	0
-79	2	0
-127	1	0
-56	1	0
-239	1	0
-218	1	0
-11	1	0
-27	1	0
-256	1	0
-130	1	0
-60	1	0
-586	1	0
-96	1	0
-58	1	0
-80	1	0
-135	1	0
-55	1	0
-219	5	2
-11	4	2
-30	4	1
-368	1	0
-106	1	0
-119	18	13
-146	1	0
-636	1	0
-156	1	0
-541	1	0
-107	1	0
-97	1	0
-61	1	0
-66	1	0
-7	1	0
-238	1	0
-105	1	0
-13	1	0
-667	1	0
-85	1	0
-70	1	0
-642	1	0
-635	1	0
-57	1	0
-249	1	0
-237	1	0
-162	1	0
-166	1	0
-380	1	0
-271	1	0
-215	2	0
-260	1	0
-160	1	0
-62	1	0
-6	1	0
-185	1	0
-48	1	0
-265	5	2
-87	1	0
-186	1	0
-62	1	0
-20	1	0
-135
-
-chain 1260177 chr17_random 2617613 + 853052 928106 chr17 81195210 - 43628 125104 962
-949	1	0
-3976	1	0
-155	1	0
-1382	1	0
-174	1	0
-249	1	0
-3481	16	14
-138	196	313
-72	88	86
-491	22816	3210
-803	32	32
-116	1	0
-346	10	9
-779	1	0
-620	1	0
-336	1	0
-2035	1	0
-1010	1	0
-1029	22	20
-97	39	114
-77	79	0
-5135	26	26
-535	1	0
-2026	21	19
-206	2	0
-254	19578	45525
-174	1	1
-34	1	1
-97	25	25
-137	6	5
-2443	14	9
-445	1	0
-116	1	0
-2150
-
-chain 1227372 chr17_random 2617613 + 986700 1051441 chr17 81195210 + 34570816 36317431 617
-294	0	3023
-141	196	196
-44	109	109
-53	147	147
-19	33	32
-101	42	42
-166	603	602
-128	1742	1742
-37	15134	15157
-88	7169	151654
-89	3878	5468
-37	1080	1080
-60	1668	1668
-37	1753	1753
-53	605	605
-36	506	39138
-695	47	47
-375	59	59
-312	20	20
-185	37	37
-144	7	7
-238	38	38
-357	101	101
-125	64	64
-712	185	184
-2677	120	1494235
-1055	15	15
-700	4	4
-1174	24	24
-888	9	3
-1590	0	3
-913	18	20
-1011	1	1
-26	1	1
-2545	1	1
-35	1	1
-1283	87	87
-45	432	432
-149	418	418
-46	284	284
-2	3	3
-30	1838	1839
-89	540	540
-32	511	512
-48	2400	2403
-39	3223	3228
-39	360	360
-49	178	178
-59
-
-chain 1028733 chr17_random 2617613 + 2262901 2274699 chr17 81195210 - 1281214 1293541 2373
-276	161	161
-1171	1	0
-181	1	0
-943	1	0
-423	1	0
-384	47	47
-111	466	1042
-106	31	31
-75	4	4
-63	20	16
-142	1	0
-59	1	0
-607	1	0
-135	1	0
-31	1	0
-82	1	0
-266	1	0
-76	1	0
-5	4	2
-41	1	0
-52	1	0
-985	1	0
-87	1	0
-4	1	0
-114	1	0
-175	1	0
-30	1	0
-140	2	0
-22	1	0
-130	1	0
-239	1	0
-766	1	0
-203	1	0
-68	2	0
-252	1	0
-300	4	2
-377	1	0
-735	1	0
-279	5	2
-91	1	0
-66	1	0
-159	1	0
-7	1	0
-562
-
-chain 931587 chr17_random 2617613 + 978106 1010959 chr17 81195210 + 36277154 36406169 991
-1048	10	12
-382	0	1
-199	22	22
-381	8	8
-56	66	66
-80	176	176
-73	27	27
-90	32	32
-166	31	209
-634	0	4
-1199	65	65
-56	27	27
-255	27	27
-50	1	7
-422	5	5
-61	4	0
-80	311	311
-40	144	144
-53	3450	47979
-41	18030	69497
-201	21	0
-219	1	0
-310	0	1
-3136	0	1
-510	50	52
-321	3	0
-279
-
-chain 813092 chr17_random 2617613 + 1807252 1826317 chr17 81195210 + 22246129 22262163 2589
-338	20	20
-223	15	15
-164	162	162
-54	59	60
-73	230	230
-52	48	48
-50	66	66
-54	49	49
-257	14	14
-103	22	22
-96	5	5
-357	121	121
-100	88	88
-108	94	94
-490	34	34
-81	27	27
-54	82	82
-80	138	138
-128	12	12
-262	24	21
-199	35	35
-263	80	80
-84	52	52
-185	16	16
-75	113	113
-160	99	99
-70	27	27
-84	49	49
-59	25	25
-133	30	30
-64	45	45
-304	25	25
-986	74	74
-160	13	13
-209	22	22
-54	43	43
-61	156	156
-54	6	6
-77	5	5
-86	85	85
-117	48	165
-381	74	74
-262	32	32
-165	71	71
-57	95	95
-89	31	31
-114	140	140
-117	216	216
-77	5	5
-52	442	441
-185	60	60
-363	22	22
-179	11	11
-259	197	197
-118	35	35
-108	60	60
-61	61	61
-137	50	50
-53	56	56
-269	161	161
-106	103	105
-56	8	8
-368	41	41
-47	3145	0
-401	42	42
-90	23	23
-151	73	73
-81	148	146
-351
-
-chain 788653 chr17_random 2617613 + 1298766 1307227 chr17 81195210 - 44798207 44806654 6145
-463	1	0
-2422	0	1
-90	14	0
-75	0	1
-397	0	1
-64	1	1
-30	0	1
-202	1	0
-1329	2	0
-1396	1	0
-668	0	1
-280	45	45
-980
-
-chain 597412 chr17_random 2617613 + 807879 2303216 chr17 81195210 - 0 1281216 430
-180	1676	138
-25553	1	0
-149	14	14
-1938	1	0
-350	32	32
-1230	1	0
-3	1	0
-6237	1	0
-45	2	2
-6514	1	0
-228	662945	0
-7897	0	1
-2396	1	0
-1101	17	0
-41	1	1
-355	0	52
-50	18	1
-41	0	68
-84	34	0
-4918	0	1
-717	0	1
-313	1	1
-42	1	1
-73	29	31
-205	58	0
-414	1	1
-64	1	1
-959	1	1
-17	1	1
-2276	1	0
-739	0	1
-418	11	49
-1541	0	1
-3494	7	13
-1281	21	21
-1738	1	191
-26	0	38
-40	0	77
-67	5	5
-11	1	75
-55	2266	0
-112	47	9
-78	38	0
-24	1	1
-80	5	5
-551	0	5
-87	1	1
-35	1	1
-54	119	195
-74	1	1
-957	15	15
-64	1277	306
-91	1	1
-35	1	1
-820	48	67
-330	0	1
-2794	1	0
-1127	1	1
-19	0	5
-1483	715858	1169096
-78	1	0
-529	1	0
-25	1	0
-200	1	0
-643	2	0
-450	2	0
-211	1	0
-380	2	2
-180	2	1
-32	1	0
-246	1	0
-61	1	0
-5	1	0
-351	1	0
-37	1	0
-304	1	0
-18	1	0
-109	1	0
-16	1	0
-200	1	0
-105	1	0
-37	1	0
-376	1	0
-108	1	0
-91	1	0
-394	1	0
-20	1	0
-1014	32	30
-21	2	1
-34	1	0
-230	26	26
-941	1	0
-188	1	0
-610	1	0
-555	1	0
-303	1	0
-509	157	157
-169	22	22
-101	1	0
-501	1	0
-140	1	0
-78	2	1
-22	1	0
-39	6	5
-62	94	94
-593	114	111
-260	120	120
-362	1	0
-697	0	1
-123	28	28
-402	36	36
-904	1	0
-50	1	0
-379	1	0
-256	25	25
-23	17	17
-53	27	27
-556	1	0
-409	1	0
-106	1	0
-276	24	24
-35	2	0
-252	32	32
-213	4	4
-70	2	0
-27	4	2
-82	1	0
-17	1	0
-639	1	0
-172	11	7
-10	1	0
-76	1	0
-1582	1	0
-275	1	0
-21	1	0
-17	4	2
-66	1	0
-1653	1	0
-19	3	3
-139	179	179
-76	2	2
-60	1	0
-226	1	0
-538	1	0
-346	4	4
-42	25	25
-1319	1	0
-261	1	0
-512	1	0
-69	1	0
-480	2	0
-388	8	7
-305	5	5
-64	2	2
-846
-
-chain 590397 chr17_random 2617613 + 1317586 1323861 chr17 81195210 - 44817018 44823295 6400
-2259	1	0
-955	0	1
-2132	0	1
-744	0	1
-184
-
-chain 365975 chr17_random 2617613 + 1296053 1313819 chr17 81195210 + 45621804 45639993 6832
-81	12	44
-148	0	6
-401	61	62
-589	32	30
-259	39	57
-53	103	103
-231	127	131
-59	7954	7632
-45	980	978
-16	142	143
-82	46	46
-363	247	934
-159	50	48
-341	33	34
-57	16	16
-304	65	65
-69	9	9
-136	66	66
-138	57	57
-70	10	10
-70	123	120
-143	52	52
-152	15	19
-320	53	52
-121	0	1
-161	98	108
-97	59	59
-205	127	125
-55	11	11
-56	30	30
-88	43	43
-512	45	43
-125	143	136
-165	48	48
-56	24	24
-161	114	115
-364	40	40
-240
-
-chain 323854 chr17_random 2617613 + 753664 757726 chr11 135006516 + 51394886 51398944 206195
-84	571	570
-807	3	1
-2082	1	0
-514
-
-chain 193433 chr17_random 2617613 + 495545 497612 chr17 81195210 + 41377728 41379794 617459
-55	1	0
-1306	28	28
-677
-
-chain 170984 chr17_random 2617613 + 1315777 1317585 chr17 81195210 - 44815210 44817018 741311
-1808
-
-chain 158566 chr17_random 2617613 + 1808012 1818883 chr17 81195210 + 22251644 22262630 5258
-162	209	210
-87	88	88
-32	270	270
-48	855	855
-36	185	185
-88	888	888
-37	888	888
-35	263	263
-80	85	85
-51	276	276
-47	20	20
-46	329	329
-27	350	350
-4	5	5
-21	413	412
-25	986	986
-74	458	458
-43	137	137
-80	228	228
-85	546	663
-9	10	10
-55	262	262
-32	293	293
-68	116	116
-25	120	120
-109	148	148
-60	1	1
-67	6	4
-74	1	1
-7	134	134
-220	1	1
-65	1	1
-91	1	1
-62	186	186
-60
-
-chain 150869 chr17_random 2617613 + 749022 751008 chr11 135006516 + 51475668 51477652 852441
-306	379	377
-1301
-
-chain 148651 chr17_random 2617613 + 808184 809735 chr17 81195210 + 81137722 81139272 865111
-940	1	0
-610
-
-chain 145464 chr17_random 2617613 + 1314230 1315767 chr17 81195210 - 44813661 44815198 885049
-1537
-
-chain 120518 chr17_random 2617613 + 1343929 1345208 chr17 81195210 - 44843364 44844643 723183
-1279
-
-chain 116919 chr17_random 2617613 + 1353036 1364922 chr17 81195210 - 44845210 44857111 1380
-449	299	299
-31	164	164
-55	373	373
-449	9718	9733
-348
-
-chain 115845 chr17_random 2617613 + 508518 509981 chr17 81195210 - 39794017 39795500 1110103
-682	50	50
-270	0	4
-177	169	185
-115
-
-chain 114042 chr17_random 2617613 + 516500 517961 chr17 81195210 - 39794017 39795500 1127130
-682	50	50
-210	5	6
-54	0	6
-175	170	185
-115
-
-chain 113591 chr17_random 2617613 + 521388 522849 chr17 81195210 - 39794017 39795500 1131524
-58	0	1
-623	50	50
-210	5	6
-54	0	6
-175	171	185
-115
-
-chain 112548 chr17_random 2617613 + 503499 505329 chr17 81195210 - 39794017 39795500 1141710
-27	370	0
-655	50	50
-210	5	6
-54	0	7
-174	170	185
-115
-
-chain 92910 chr17_random 2617613 + 1642194 1643169 chr17 81195210 - 1314977 1315952 1374174
-975
-
-chain 86438 chr17_random 2617613 + 1345275 1346182 chr17 81195210 - 44844700 44845607 1472746
-907
-
-chain 80313 chr17_random 2617613 + 2609695 2610598 chr17 81195210 - 39794017 39794920 1580802
-682	50	50
-171
-
-chain 78741 chr17_random 2617613 + 1643269 1644095 chr17 81195210 + 79874782 79875608 1611354
-826
-
-chain 75472 chr17_random 2617613 + 1310578 1313579 chr17 81195210 - 44810007 44813007 188419
-53	282	282
-98	97	97
-59	205	205
-127	122	122
-30	88	88
-43	512	512
-45	125	125
-72	1	0
-70	165	165
-48	241	241
-114	364	364
-40
-
-chain 74354 chr17_random 2617613 + 1547620 1548395 chr8 146364022 - 2302524 2303299 1703290
-775
-
-chain 61189 chr17_random 2617613 + 1546707 1547351 chr8 146364022 + 144057273 144057917 2067192
-644
-
-chain 59362 chr17_random 2617613 + 751149 753548 chr1 249250621 - 248579195 248581575 182656
-35	2	1
-152	1	0
-15	1	0
-107	3	2
-74	1	0
-10	1	0
-19	1	0
-57	1	1
-48	3	1
-6	1	0
-107	12	330
-61	1	1
-51	357	35
-388	110	110
-84	38	38
-62	227	223
-116	106	105
-141
-
-chain 56858 chr17_random 2617613 + 1298104 1298766 chr17 81195210 - 44797535 44798197 1968612
-85	59	59
-518
-
-chain 56536 chr17_random 2617613 + 501286 502149 chr17 81195210 - 39794614 39795500 2243684
-85	50	50
-210	5	6
-54	0	7
-174	170	185
-115
-
-chain 55411 chr17_random 2617613 + 688273 689806 chr7 159138663 - 159114165 159114723 7844
-88	175	0
-148	458	0
-103	231	3
-111	117	3
-102
-
-chain 52941 chr17_random 2617613 + 1822234 1824166 chr17 81195210 - 58941545 58943477 1155
-887	1	1
-77	1	1
-300	1	1
-20	9	9
-133	1	1
-23	1	1
-59	1	1
-158	1	1
-91	1	1
-54	1	1
-112
-
-chain 52559 chr17_random 2617613 + 983839 1162005 chr17 81195210 - 44845659 46605886 726
-299	65	65
-117	68	68
-1986	9723	54270
-49	72036	1500609
-1027	6412	6412
-71	13528	13528
-50	11447	11447
-132	60546	169487
-42	528	528
-40
-
-chain 51097 chr17_random 2617613 + 1023443 1026449 chr17 81195210 + 34744258 34747264 8774
-47	375	375
-59	517	517
-37	389	389
-38	357	357
-101	125	125
-64	712	712
-185
-
-chain 49537 chr17_random 2617613 + 686221 687340 chr7 159138663 - 159114165 159114714 2581538
-393	570	0
-156
-
-chain 49422 chr17_random 2617613 + 2502237 2515076 chr17_gl000206_random 41001 + 6806 19645 760
-60	12323	12323
-456
-
-chain 46461 chr17_random 2617613 + 530697 531391 chr17 81195210 + 41399710 41400427 2769983
-115	170	185
-151	0	7
-77	5	6
-176
-
-chain 44819 chr17_random 2617613 + 1346282 1352646 chr17 81195210 + 36399842 36406169 117269
-158	113	113
-546	19	0
-337	0	1
-343	21	0
-219	1	0
-310	0	1
-3136	0	1
-510	1	1
-49	0	2
-321	1	0
-279
-
-chain 42351 chr17_random 2617613 + 1308282 1310091 chr17 81195210 - 44807710 44809519 659295
-50	341	341
-33	377	377
-65	214	214
-66	138	138
-57	150	150
-123	143	143
-52
-
-chain 41114 chr17_random 2617613 + 1307243 1308123 chr17 81195210 - 44806671 44807550 1295496
-142	82	82
-46	363	362
-247
-
-chain 38415 chr17_random 2617613 + 980212 983216 chr17 81195210 - 46382593 46436652 7347
-66	80	80
-176	73	73
-27	90	90
-32	166	166
-31	1833	52888
-65	56	56
-27	255	255
-27
-
-chain 37708 chr17_random 2617613 + 1313819 1314225 chr17 81195210 - 44813251 44813657 3332998
-406
-
-chain 34385 chr17_random 2617613 + 689365 745709 chr16 90354753 + 90179685 90235100 655
-111	4456	3661
-64	55	55
-25	28	28
-47	0	945
-90	45591	45393
-56	269	269
-34	5469	4540
-13	2	2
-32	0	48
-2
-
-chain 29758 chr17_random 2617613 + 1820296 1826385 chr17 81195210 + 22249775 22252718 80336
-37	643	643
-77	136	133
-51	3143	0
-44	74	74
-224	80	80
-64	79	79
-9	741	741
-39	82	82
-59	25	25
-56	358	358
-68
-
-chain 29219 chr17_random 2617613 + 1551349 1551651 chr17 81195210 + 81144397 81144699 5017519
-302
-
-chain 28762 chr17_random 2617613 + 686677 687796 chr7 159138663 - 159114165 159114714 2625478
-282	456	0
-111	3	3
-57	114	0
-96
-
-chain 26027 chr17_random 2617613 + 1296695 1298103 chr17 81195210 - 44796117 44797535 630440
-61	589	589
-32	259	269
-39	53	53
-103	231	231
-41
-
-chain 25589 chr17_random 2617613 + 1810180 1822057 chr17 81195210 + 22246679 22258671 5893
-31	6949	7063
-28	2666	2666
-60	580	580
-49	73	73
-37	1172	1173
-232
-
-chain 22463 chr17_random 2617613 + 503557 503790 chr17 81195210 - 39794076 39794309 8690008
-233
-
-chain 21299 chr17_random 2617613 + 1013035 1014722 chr17 81195210 + 34795732 34797419 1064
-59	517	517
-37	389	389
-38	357	357
-101	125	125
-64
-
-chain 20434 chr17_random 2617613 + 685587 686087 chr7 159138663 - 159114215 159114487 2822651
-209	248	20
-43
-
-chain 19692 chr17_random 2617613 + 2611651 2612116 chr17 81195210 - 39813091 39813524 10717347
-67	163	137
-78	68	62
-89
-
-chain 19589 chr17_random 2617613 + 2616810 2617276 chr17 81195210 + 41381686 41382119 10803726
-89	68	62
-77	165	138
-67
-
-chain 17762 chr17_random 2617613 + 852036 852257 chr5 180915260 - 51646 51969 938
-13	1	1
-60	1	1
-29	1	1
-13	0	102
-103
-
-chain 17600 chr17_random 2617613 + 1364922 1365125 chr17 81195210 - 46397651 46397854 1833
-172	1	1
-30
-
-chain 17149 chr17_random 2617613 + 1514626 1514877 chr1 249250621 + 547399 547650 3354419
-131	1	3
-101	2	0
-16
-
-chain 16567 chr17_random 2617613 + 2610699 2610873 chr17 81195210 - 39795026 39795200 13468304
-174
-
-chain 16365 chr17_random 2617613 + 1812948 1813633 chr17 81195210 + 22258959 22259644 44227
-99	181	181
-49	59	59
-25	227	227
-45
-
-chain 16348 chr17_random 2617613 + 525487 525673 chr11 135006516 + 62609095 62609281 13688187
-75	4	4
-107
-
-chain 14733 chr17_random 2617613 + 2605728 2605963 chr17 81195210 - 39813295 39813524 15353144
-78	68	62
-89
-
-chain 14711 chr17_random 2617613 + 556093 556262 chr11 135006516 - 72397235 72397404 15378622
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 527846 528015 chr11 135006516 - 72397235 72397404 15378623
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 512402 512571 chr11 135006516 - 72397235 72397404 15378624
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 510910 511079 chr11 135006516 - 72397235 72397404 15378625
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 494247 494416 chr11 135006516 - 72397235 72397404 15378626
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 492878 493047 chr11 135006516 - 72397235 72397404 15378627
-107	4	4
-58
-
-chain 14711 chr17_random 2617613 + 519356 519525 chr11 135006516 + 62609112 62609281 15378630
-58	4	4
-107
-
-chain 14711 chr17_random 2617613 + 514467 514636 chr11 135006516 + 62609112 62609281 15378631
-58	4	4
-107
-
-chain 14711 chr17_random 2617613 + 492408 492577 chr11 135006516 + 62609112 62609281 15378632
-58	4	4
-107
-
-chain 13395 chr17_random 2617613 + 685879 686024 chr7 159138663 - 159114165 159114310 16961745
-145
-
-chain 12350 chr17_random 2617613 + 554102 554230 chr17 81195210 + 41401065 41401193 18472361
-128
-
-chain 11140 chr17_random 2617613 + 2611055 2611170 chr17 81195210 - 39795385 39795500 20498301
-115
-
-chain 11115 chr17_random 2617613 + 1365516 1365648 chr17 81195210 - 46613257 46613389 1914
-132
-
-chain 10814 chr17_random 2617613 + 689806 689963 chr7 159138663 - 159114495 159114652 3160720
-43	20	20
-94
-
-chain 10716 chr17_random 2617613 + 690046 690160 chr11 135006516 - 134823089 134823203 21297817
-114
-
-chain 10594 chr17_random 2617613 + 686107 686221 chr11 135006516 - 134823089 134823203 21541329
-114
-
-chain 10432 chr17_random 2617613 + 752965 753084 chr3 198022430 + 197944313 197944432 1419040
-26	27	27
-66
-
-chain 10233 chr17_random 2617613 + 751962 752152 chr1 249250621 - 25108929 25109119 2449036
-190
-
-chain 10215 chr17_random 2617613 + 298300 298405 chr17 81195210 - 41991981 41992086 2272776
-105
-
-chain 10088 chr17_random 2617613 + 2614941 2615048 chr11 135006516 - 72397235 72397342 22628945
-107
-
-chain 9967 chr17_random 2617613 + 687027 687133 chr7 159138663 - 159114173 159114279 19905170
-106
-
-chain 9953 chr17_random 2617613 + 1352829 1353036 chr17 81195210 - 44845003 44845210 3604154
-38	53	53
-37	50	50
-29
-
-chain 9937 chr17_random 2617613 + 2607755 2608553 chr17 81195210 + 41464708 41466209 22969163
-59	661	1364
-78
-
-chain 9782 chr17_random 2617613 + 685310 686656 chr7 159138663 - 159114165 159114714 2594423
-225	1079	282
-42
-
-chain 9490 chr17_random 2617613 + 268561 268666 chr17 81195210 + 39296306 39296411 8067183
-50	6	6
-49
-
-chain 9384 chr17_random 2617613 + 1808529 1810797 chr17 81195210 + 22256920 22261566 263516
-29	104	104
-28	50	50
-48	1976	4354
-33
-
-chain 9278 chr17_random 2617613 + 1333217 1333901 chr17 81195210 - 44832655 44833339 2515
-26	585	585
-73
-
-chain 9162 chr17_random 2617613 + 1819790 1824781 chr17 81195210 + 22261160 22263006 131478
-64	322	322
-59	818	816
-30	3642	499
-56
-
-chain 8930 chr17_random 2617613 + 507298 507390 chr17 81195210 + 41466131 41466223 25058540
-92
-
-chain 8739 chr17_random 2617613 + 1294354 1363161 chr17 81195210 - 46388680 46446941 1280
-36	59095	48559
-76	160	160
-63	250	250
-52	124	124
-61	4094	4092
-28	4719	4711
-49
-
-chain 7495 chr17_random 2617613 + 1514877 1514981 chr17 81195210 - 42613 42717 4053350
-104
-
-chain 7310 chr17_random 2617613 + 1352662 1353007 chr17 81195210 - 20840434 20840778 292042
-167	38	37
-53	37	37
-50
-
-chain 6706 chr17_random 2617613 + 687825 687939 chr7 159138663 - 159114173 159114287 10506562
-114
-
-chain 6456 chr17_random 2617613 + 673480 673547 chr11 135006516 - 134811854 134811921 22781013
-67
-
-chain 5049 chr17_random 2617613 + 752664 753185 chr1 249250621 - 248584104 248584621 921258
-110	84	84
-38	62	62
-7	119	119
-72	7	3
-22
-
-chain 5012 chr17_random 2617613 + 557502 557555 chr17 81195210 + 41382227 41382280 33565948
-53
-
-chain 4802 chr17_random 2617613 + 1345218 1345268 chr17 81195210 - 44844643 44844693 34312672
-50
-
-chain 4547 chr17_random 2617613 + 688053 688156 chr7 159138663 - 159114401 159114504 10358404
-103
-
-chain 4503 chr17_random 2617613 + 690214 690262 chr7 159138663 - 159114675 159114723 34814023
-48
-
-chain 4408 chr17_random 2617613 + 1808470 1808528 chr17 81195210 + 22261618 22261676 11976838
-58
-
-chain 4236 chr17_random 2617613 + 269418 269467 chr17 81195210 - 41933979 41934028 1349427
-49
-
-chain 3906 chr17_random 2617613 + 1365126 1365187 chr17 81195210 - 23109543 23109604 10221956
-61
-
-chain 3852 chr17_random 2617613 + 685196 685310 chr7 159138663 - 159114165 159114279 3139829
-114
-
-chain 3804 chr17_random 2617613 + 676798 676843 chr11 135006516 - 134814627 134814666 26257176
-33	6	0
-6
-
-chain 3734 chr17_random 2617613 + 1819749 1824493 chr17 81195210 + 22251604 22253205 550639
-41	1133	1133
-53	3451	308
-4	6	6
-56
-
-chain 3666 chr17_random 2617613 + 689649 689704 chr3 198022430 + 197891166 197891221 670
-55
-
-chain 3459 chr17_random 2617613 + 687133 687184 chr7 159138663 - 159114165 159114216 4526522
-51
-
-chain 3336 chr17_random 2617613 + 1365188 1365250 chr17 81195210 - 20853025 20853087 9938797
-62
-
-chain 3079 chr17_random 2617613 + 681792 681827 chr11 135006516 - 134820249 134820284 24010224
-35
-
-chain 2916 chr17_random 2617613 + 690160 690191 chr7 159138663 - 159114621 159114652 25187800
-31
-
-chain 2901 chr17_random 2617613 + 1010962 1011819 chr17 81195210 - 44844823 44845680 205824
-857
-
-chain 2668 chr17_random 2617613 + 837741 837773 chr8 146364022 + 31195 31227 1221
-32
-
-chain 2659 chr17_random 2617613 + 747955 747987 chr5 180915260 + 180755757 180755789 880
-32
-
-chain 2649 chr17_random 2617613 + 622962 622989 chr17 81195210 - 81153206 81153233 29165068
-27
-
-chain 2631 chr17_random 2617613 + 1252044 1252072 chr17 81195210 + 34548405 34548433 469
-28
-
-chain 2530 chr17_random 2617613 + 1100849 1100878 chr17 81195210 - 46384734 46384763 4689
-29
-
-chain 2422 chr17_random 2617613 + 621448 621568 chr17 81195210 - 81152835 81152952 7235512
-27	65	62
-28
-
-chain 2158 chr17_random 2617613 + 688361 688384 chr16 90354753 + 90179770 90179793 21906636
-23
-
-chain 2073 chr17_random 2617613 + 690420 690442 chr7 159138663 - 159114653 159114675 31315602
-22
-
-chain 1877 chr17_random 2617613 + 1533316 1533338 chr17_gl000206_random 41001 - 16469 16491 815
-22
-
-chain 1804 chr17_random 2617613 + 687361 687825 chr7 159138663 - 159114165 159114515 2659234
-54	381	267
-29
-
-chain 1771 chr17_random 2617613 + 742259 742283 chr1 249250621 - 248585388 248585412 123201
-24
-
-chain 1698 chr17_random 2617613 + 268509 268561 chr17 81195210 - 41933055 41933107 4387515
-52
-
-chain 1694 chr17_random 2617613 + 747513 747535 chr1 249250621 - 249115973 249115995 773
-22
-
-chain 1343 chr17_random 2617613 + 555358 555450 chr17 81195210 - 39728987 39729079 19263806
-92
-
-chain 1343 chr17_random 2617613 + 511667 511759 chr17 81195210 - 39728987 39729079 19263807
-92
-
-chain 1343 chr17_random 2617613 + 526316 526408 chr17 81195210 + 41466131 41466223 19263808
-92
-
-chain 1343 chr17_random 2617613 + 520168 520260 chr17 81195210 + 41466131 41466223 19263809
-92
-
-chain 1129 chr17_random 2617613 + 1019025 1019068 chr17 81195210 + 60348267 60348310 2834
-43
-
-chain 1082 chr17_random 2617613 + 686959 687027 chr7 159138663 - 159114561 159114629 2979122
-68
-
-chain 594 chr17_random 2617613 + 1548943 1548990 chr17_gl000206_random 41001 - 30268 30353 3713456
-4	9	47
-34
-
-chain 7055976638 chr18 76117153 + 0 76117153 chr18 78077248 + 10000 78016181 19
-15400898	1363998	3100000
-28218587	15	15
-5329636	47000	150000
-3667309	0	18
-16406890	28008	50000
-3388467	22000	50000
-2103304	3	0
-136125	7	9
-647	0	1
-1543	0	1
-25	0	1
-6	2	7
-19	0	2
-10	4	7
-9	2	4
-656	0	1
-358	0	1
-1625
-
-chain 404699 chr18_random 4262 + 0 4262 chr18_gl000207_random 4262 + 0 4262 116011
-4262
-
-chain 5307789368 chr19 63811651 + 11000 63806651 chr19 59128983 + 60000 59114839 21
-7286004	5000	50000
-1291194	5000	50000
-11767057	0	69160
-4058367	8000000	3100000
-20129228	0	2
-701	3	0
-347	1	1
-31	1	1
-1833	3	0
-1984	1	1
-47	1	1
-190	1	1
-34	1	1
-889	0	2
-1413	0	7
-2680	0	4
-375	0	1
-328	0	4
-15	0	1
-69	1	0
-3881	1	1
-36	0	12
-296	0	14
-1480	0	1
-233	1	1
-45	1	1
-1049	0	1
-1766	44	7
-220	3	0
-536	0	7
-352	8	8
-3603	1	1
-17	3	0
-697	1	0
-269	3	0
-974	6	5
-96	0	10
-1096	10	10
-1177	14	12
-110	3	3
-1028	12	9
-1090	1	0
-173	0	16
-1066	4	0
-4779	1	1
-42	1	1
-722	1	0
-548	2	2
-44	1	1
-424	54	54
-61	1	1
-59	1	1
-2086	0	15
-1500	1	0
-1754	2	0
-11209362
-
-chain 15150451 chr19_random 301858 + 142689 301858 chr19_gl000209_random 159169 + 0 159169 196
-159169
-
-chain 8748871 chr19_random 301858 + 0 92689 chr19_gl000208_random 92689 + 0 92689 377
-92689
-
-chain 14432273 chr1_random 1663265 + 444114 915337 chr1 249250621 - 104328377 105379619 206
-1802	63331	510
-7296	6958	14784
-7961	0	2
-631	19782	48350
-2466	1	1
-72	1	1
-281	2	2
-18	1	1
-2234	1	1
-23	2	1
-1869	0	2
-890	0	1
-2816	0	3
-59	12	12
-1298	1	1
-11	1	1
-294	214294	820733
-136815
-
-chain 10693564 chr1_random 1663265 + 965337 1079393 chr1 249250621 + 199645090 199759149 300
-3537	0	2
-1755	1	1
-38	1	1
-15918	1	0
-2372	0	1
-1251	34	34
-7007	1	6
-3552	1	1
-44	1	1
-799	1	1
-42	1	1
-3907	2	0
-1780	1	1
-49	1	1
-1586	2	0
-197	1	1
-37	1	1
-292	1	1
-47	1	1
-927	0	2
-549	1	1
-27	1	1
-595	1	1
-18	1	1
-291	0	2
-6685	1	0
-2369	1	0
-6503	13	13
-639	1	1
-70	1	1
-477	1	0
-1001	0	2
-1967	2	0
-3454	1	1
-26	1	1
-3144	0	4
-89	1	0
-6546	14	15
-6194	1	0
-5390	13	13
-196	1	0
-7401	1	9
-1242	1	0
-1702	1	0
-477	1	1
-61	0	1
-1487	1	0
-1276	1	0
-1950	9	0
-4681	0	2
-1332	1	0
-956
-
-chain 10110185 chr1_random 1663265 + 1464329 1570762 chr1_gl000191_random 106433 + 0 106433 317
-106433
-
-chain 6680210 chr1_random 1663265 + 198768 359123 chr1 249250621 + 1257620 1436018 467
-467	0	1
-41	0	1
-10	4	4
-930	2	3
-122	3	4
-138	66071	6986
-47	0	1
-945	0	1
-279	1	2
-508	0	1
-482	0	1
-1285	1	1
-40	1	1
-199	0	1
-207	1	1
-29	1	1
-1021	0	1
-1168	0	2
-388	0	1
-69	15	17
-195	4	4
-52	1	1
-9	1	3
-23	0	1
-284	0	1
-1485	15	16
-138	9	9
-27	44	5
-35	46	46
-97	0	1
-5	0	1
-734	0	3
-257	1	1
-18	1	1
-442	0	2
-51	4	0
-424	0	1
-134	1	1
-39	0	1
-22	1	1
-564	15	17
-469	0	3
-39	0	1
-22	2	2
-1076	0	1
-210	14	14
-166	0	1
-3264	1	0
-111	0	1
-309	19898	50666
-91	0	1
-116	0	1
-56	0	1
-152	0	1
-46	0	1
-51	0	1
-63	0	2
-420	4	5
-697	0	1
-2269	7	0
-48	1	1
-4086	0	2
-317	0	1
-49	0	1
-1795	0	1
-1147	1	1
-39	1	1
-1378	0	17
-477	2	0
-4457	1	1
-105	0	1
-1003	0	1
-232	1	2
-147	277	46717
-169	0	1
-37	1	1
-227	0	2
-651	1	0
-1805	1	1
-45	1	1
-498	1	0
-233	1	1
-29	1	1
-231	12	20
-2015	0	1
-20	1	1
-653	0	1
-12	0	1
-17	1	1
-139	0	1
-10	0	1
-22	0	1
-37	16	19
-38	0	5
-54	0	1
-437	0	1
-539	2	0
-1067	0	1
-1042	1	0
-2434	10	0
-256	133	0
-839	0	1
-267	0	1
-640	1	1
-35	1	1
-1351	15	15
-1316	1	1
-31	0	1
-1986	5	5
-1179	0	1
-3153	1	0
-1165	0	1
-22	0	1
-56	1	1
-27	1	1
-77	0	1
-81	15	17
-111	1	1
-44	0	1
-2254	1	0
-320	1	0
-2368	0	1
-26	0	1
-407	5	6
-2982	0	4
-852	0	5
-703	1	0
-191	2	3
-73	5	5
-72
-
-chain 4901563 chr1_random 1663265 + 676697 728522 chr1 249250621 - 205721991 205773795 637
-1664	1	0
-299	1	0
-1113	4	0
-100	1	0
-1522	1	1
-46	1	1
-83	1	1
-30	1	1
-62	1	1
-46	1	1
-1990	1	1
-41	1	1
-1403	0	4
-1148	0	5
-10134	1	1
-21	1	1
-1479	1	0
-1499	9	9
-3057	0	2
-137	6	0
-1251	2	0
-21	1	1
-897	5	4
-2851	1	0
-399	0	2
-624	6	5
-440	1	0
-5	1	0
-2953	1	0
-480	9	0
-2793	36	35
-6791	1	0
-4870	1	0
-1478
-
-chain 4504833 chr1_random 1663265 + 1205412 1353281 chr1 249250621 - 133273039 133340206 679
-3980	0	1
-79	1	1
-34	1	1
-916	4	6
-1818	34	28
-51	21	16
-5	1	0
-5	1	0
-4	1	0
-11	1	0
-28	1	0
-8	1	0
-8	1	0
-1366	1	1
-38	0	1
-7507	0	1
-3084	2	0
-2569	1	0
-20	1	0
-8	1	0
-10	21	16
-51	10	10
-3979	6	5
-2086	1	0
-5466	0	1
-27	1	1
-1117	1	0
-66	1	0
-23	1	0
-2070	0	1
-67	1	0
-2611	1	0
-9	1	0
-23	23	18
-577	97925	17254
-5929	0	1
-1948	1	0
-72	0	1
-1365	60	62
-706
-
-chain 3984524 chr1_random 1663265 + 1620762 1663230 chrX 155270560 - 27920664 27963158 751
-107	0	1
-696	27	12
-658	0	12
-1440	0	2
-671	0	2
-506	0	3
-806	0	1
-4759	0	12
-131	1	0
-848	1	0
-213	0	8
-2046	1	0
-4979	0	1
-2482	1	0
-1502	1	0
-3474	0	4
-782	0	1
-12366	1	0
-3969
-
-chain 2698055 chr1_random 1663265 + 6164 122978 chr1 249250621 - 139553697 139584554 1020
-486	1	1
-19	9	9
-297	1	1
-73	1	1
-341	1	0
-105	1	0
-286	47997	0
-689	1	1
-48	1	1
-53	0	2
-1870	1	1
-39	1	1
-1682	0	39
-470	8	9
-691	1	0
-370	1	1
-24	1	1
-356	0	1
-1496	9599	84
-28	0	1
-7	4	0
-131	0	1
-66	932	181
-88	9	11
-10	7	0
-10	8	5
-5	0	3
-76	27759	26
-44	3	0
-26	0	2
-6	1	1
-59	3	1
-121	2	4
-4990	1	0
-672	0	1
-1487	1	1
-39	1	1
-1691	0	1
-36	10	10
-3503	1	1
-46	1	1
-4128	0	1
-1818	0	5
-1107	16	16
-841
-
-chain 2474973 chr1_random 1663265 + 1129393 1155387 chr1 249250621 + 229232478 229258468 1104
-3505	1	1
-44	1	1
-5232	4	0
-17207
-
-chain 2468882 chr1_random 1663265 + 1280682 1387454 chr1 249250621 - 133163307 133238928 735
-149	0	1
-7073	122	124
-1799	1	1
-43	1	1
-5594	24	23
-60	12182	28596
-3279	1	0
-571	21	21
-1080	1	0
-10	0	2
-1138	1	0
-3484	1	0
-1689	0	8
-810	42350	1
-1088	1	1
-21	1	0
-78	30	29
-746	0	2
-2729	1	0
-2088	0	3
-1949	966	174
-31	9	0
-12	16	16
-29	0	4
-13	100	98
-53	1884	0
-16	1	0
-5	0	1
-18	3916	1388
-1729	0	1
-1373	1	0
-102	1	0
-21	1	0
-4	1	0
-7	1	0
-38	2	0
-48	1	0
-525	5	4
-645	5	5
-1189	1	0
-1911	4	0
-69	8	8
-24	5	4
-284	1	0
-1481
-
-chain 2064841 chr1_random 1663265 + 247141 392880 chr1 249250621 - 247850669 247948213 608
-351	1	0
-965	0	1
-35	0	1
-248	0	1
-122	0	1
-1194	11	11
-580	3	5
-969	0	1
-425	5	5
-25	1	1
-586	1	1
-77	1	1
-1895	1	1
-37	1	2
-253	0	1
-560	1	1
-62	1	1
-74	1	1
-27	1	1
-90	31631	11346
-887	0	40
-759	32	0
-2596	0	1
-308	1	0
-37	0	1
-40	0	1
-346	17	19
-89	2	2
-34	1	2
-44	0	2
-35	0	1
-20	0	1
-260	0	1
-3009	1	1
-30	0	1
-5	10	12
-104	1	1
-48	0	1
-67	13	15
-1226	0	1
-111	7	7
-31	0	1
-47	1	3
-13	3	5
-38	7	10
-7	0	2
-48	0	1
-110	1	0
-623	0	2
-241	1	1
-47	1	1
-1601	0	1
-582	13	21
-1128	2	0
-348	4	4
-28	22	23
-481	0	2
-30	1	1
-628	0	1
-96	0	1
-30	0	1
-78	17	173
-64	55865	28961
-69	13	14
-498	0	1
-1593	0	4
-183	26	27
-337	1	0
-1433	0	1
-6191	0	2
-2435	0	1
-3451	540	0
-83	695	0
-1318	5	5
-21	1	1
-526	0	1
-833	0	1
-144	0	1
-427	8	8
-235	1	2
-297	1	1
-34	0	1
-250	0	3
-1007	0	1
-1403	1	1
-37	1	1
-355	1	1
-6	0	2
-94	1	1
-278	2	2
-5	0	1
-20	1	1
-667	24	24
-1858	10	12
-146	8	7
-2002	0	1
-284	0	1
-1233	0	1
-840	11	0
-914	2	0
-122	1	1
-26	0	2
-118
-
-chain 1850028 chr1_random 1663265 + 76914 101906 chr1 249250621 - 139621990 139717568 1363
-3916	0	1
-77	20	20
-26	0	856
-764	17	16
-12	1	0
-295	1	0
-2648	2870	23264
-250	997	50331
-2203	0	5
-797	1	0
-2197	1	1
-117	7	8
-429	1	0
-7345
-
-chain 1707631 chr1_random 1663265 + 501749 626697 chr1 249250621 + 144188000 145316961 852
-223	42	42
-236	22	22
-242	91	103
-199	8	8
-102	112	112
-50	126	126
-290	32	32
-213	45	45
-125	1	1
-56	1	1
-82	1	1
-27	13	13
-71	5	5
-493	3	3
-15	1	1
-248	1	1
-44	1	1
-65	1	1
-52	1	1
-169	1	1
-82	1	1
-292	1	1
-83	0	1580
-458	1	1
-16	1	1
-478	5	5
-568	23	17
-634	1	1
-46	1	1
-50	14	14
-864	31	61
-55	23320	364967
-85	1	1
-107	1	1
-376	1	1
-20	0	1
-195	10	10
-150	1	1
-35	1	1
-274	5	5
-143	1	0
-862	7	0
-20	1	0
-504	1	1
-25	1	1
-238	1	1
-36	1	1
-139	0	1
-25	1	1
-157	8	8
-60	16	16
-59	17	17
-285	0	1
-120	1	1
-69	1	1
-509	1	1
-59	1	1
-162	0	322
-70	5	5
-2169	1	1
-31	1	1
-224	1	1
-36	1	1
-76	1	0
-5	5	0
-109	6	6
-139	5	3
-65	0	20
-360	47	48
-86	18	17
-149	44	44
-76	54	55
-196	38	38
-139	139	6280
-107	1	1
-95	0	1
-46	1	1
-91	1	1
-18	1	1
-62	11	11
-511	0	1
-106	1	0
-505	0	2
-443	9	9
-519	112	112
-396	1	1
-26	1	1
-225	1	1
-57	1	1
-502	1	0
-485	1	1
-105	0	2
-146	1	1
-41	1	1
-203	1	1
-45	1	1
-62	5	5
-850	1	1
-55	2	2
-215	1	1
-45	1	1
-474	0	3
-19	1	1
-2337	1	1
-34	1	1
-148	1	0
-159	1	1
-32	1	1
-64	0	4
-849	1	1
-34	1	1
-126	38816	272842
-32	0	140
-3176	18	17
-6689	1	0
-274	0	1
-1449	0	1
-1312	1	0
-1861	8888	417910
-92	172	6531
-148	0	2
-213	1	1
-30	1	1
-227	1	1
-62	6	0
-276	1	1
-35	1	1
-94	14	14
-325	5	5
-118	1	1
-81	1	1
-234	4	0
-15	1	1
-243	1	1
-39	1	1
-117	1	1
-35	1	1
-83	1	1
-64	5	5
-55	13	13
-61	11	11
-175	1	1
-27	1	1
-134	1	1
-60	1	1
-64	1	1
-87	1	1
-615	1	1
-22	1	1
-201	5	5
-48	1	1
-117	1	1
-23	3	3
-319	6	6
-156	0	1
-25	1	1
-215	13	13
-97	14	14
-113	0	3
-35	1	1
-65	15	15
-480	0	1
-636	1	1
-107	1	1
-753	1	1
-43	1	1
-861	17	16
-470	1	1
-38	1	1
-579	1	1
-25	1	1
-224	1	1
-71	1	1
-266	36	36
-167	88	88
-400	53	53
-131	6	5
-220	22	19
-317	23	23
-109	95	101
-73	0	4726
-208	28	28
-293
-
-chain 1680348 chr1_random 1663265 + 1245440 1263421 chr1 249250621 + 116101959 116120000 1475
-441	0	14
-728	0	2
-1146	2	0
-1829	6	6
-93	3	2
-2916	0	6
-2013	0	47
-369	1	1
-27	9	0
-37	1	1
-200	1	0
-2285	0	2
-3527	1	1
-24	0	1
-1001	0	1
-1195	1	1
-39	1	1
-85
-
-chain 1335863 chr1_random 1663265 + 231796 246037 chr4 191154276 - 30408128 30422371 1784
-3391	6	6
-562	7	7
-5976	2	3
-4144	10	11
-143
-
-chain 1170727 chr1_random 1663265 + 577933 590476 chr1 249250621 + 144898104 144910646 2036
-1896	48	48
-2779	1	0
-7128	45	45
-646
-
-chain 1143882 chr1_random 1663265 + 1330802 1343100 chr1 249250621 - 133251270 133263558 2093
-1050	1	1
-51	1	1
-237	1	1
-35	1	1
-514	16	12
-76	9	1
-1642	12	12
-53	0	1
-3766	0	1
-40	1	1
-1513	0	1
-195	11	11
-135	26	26
-2627	1	0
-284
-
-chain 988809 chr1_random 1663265 + 564355 574807 chr1 249250621 - 104390169 104400621 2516
-59	1	2
-5994	1	1
-45	1	1
-3985	3	3
-42	1	0
-320
-
-chain 957971 chr1_random 1663265 + 256162 266426 chr1 249250621 + 1291904 1302191 2686
-83	0	1
-585	0	1
-1018	0	1
-18	1	1
-59	16	16
-1569	0	1
-69	1	0
-35	0	1
-36	1	1
-176	0	1
-48	0	1
-56	2	3
-41	0	1
-160	17	1
-461	13	21
-174	0	4
-517	7	7
-141	4	4
-89	0	1
-1155	1	0
-370	7	7
-143	1	0
-1019	22	22
-1177	0	1
-607	0	16
-86	0	3
-279
-
-chain 895962 chr1_random 1663265 + 196343 223209 chr1 249250621 - 247894293 247990621 2587
-108	25	24
-131	0	1
-299	0	1
-137	44	45
-51	0	1
-572	0	1
-406	36	37
-508	2162	63455
-80	5	8
-86	0	1
-61	0	1
-31	1	0
-165	14	15
-78	75	78
-234	0	1
-152	13	15
-849	0	1
-1798	12505	20653
-3495	0	1
-43	0	1
-1944	1	1
-26	1	1
-169	0	1
-365	0	1
-196
-
-chain 884318 chr1_random 1663265 + 4444 145186 chr1 249250621 + 109546538 109651856 1047
-123	47	1183
-818	1	1
-75	1	0
-22	1	1
-455	18927	20784
-855	1	0
-74	12001	11300
-2581	2	2
-31	0	1
-81	1	0
-24	1	1
-123	1	0
-147	0	1
-45	0	1
-26	0	1
-9	1	0
-12	2330	786
-22	41	53
-127	1706	714
-3729	74524	39329
-68	5	7
-3088	2	2
-15	5	6
-14	0	2
-657	1	1
-37	1	1
-2140	1	0
-3034	1	0
-42	1	1
-446	0	1
-55	2	2
-30	1	1
-391	1	1
-35	1	1
-982	3	0
-123	1	1
-28	0	4
-1503	1	0
-1159	0	3
-1464	0	1
-838	1	1
-47	1	3
-162	1	0
-139	1	1
-10	0	1
-2424	6	6
-448	1	0
-846	5	0
-1509
-
-chain 739113 chr1_random 1663265 + 68329 76740 chr1 249250621 + 109654512 109662863 6250
-254	1	0
-27	1	1
-746	1	0
-315	19	19
-163	42	2
-51	3	1
-44	1	1
-592	0	1
-216	1	1
-34	1	1
-2323	10	0
-10	236	236
-125	1	0
-806	213	213
-828	6	0
-82	6	6
-1253
-
-chain 688441 chr1_random 1663265 + 605533 614556 chr1 249250621 + 144612760 144812114 1498
-76	1	1
-70	1	1
-73	4	2
-40	0	2
-159	1	1
-56	2	0
-911	1	1
-63	1	1
-84	9	1
-149	1	1
-21	1	0
-606	1	1
-21	3	3
-132	12	10
-368	1	1
-26	1	1
-50	1	1
-65	1	1
-57	1	1
-44	1	1
-279	0	1
-34	0	4
-7	1	1
-308	0	32
-331	1	1
-84	1	1
-286	1	1
-35	1	1
-59	8	8
-146	1	1
-237	1	1
-52	1	1
-35	2	0
-40	1	1
-53	3	3
-103	1	1
-397	1	1
-59	1	0
-33	1	1
-587	11	11
-219	10	10
-71	5	5
-62	1	1
-38	1	1
-240	1	1
-70	1	1
-85	12	12
-86	413	190724
-207	1	0
-825	186	186
-172
-
-chain 590572 chr1_random 1663265 + 516651 523401 chr1 249250621 - 104651805 104658532 8996
-157	1	1
-17	1	1
-395	1	1
-65	1	1
-187	0	9
-21	1	1
-62	16	16
-110	2	0
-205	1	0
-43	1	1
-248	1	1
-59	4	2
-725	1	1
-49	1	1
-455	1	1
-106	1	1
-450	1	1
-133	0	2
-383	1	1
-37	1	1
-178	4	4
-70	1	1
-85	2	2
-43	1	1
-56	1	1
-22	24	0
-30	1	1
-64	1	1
-21	1	1
-198	1	1
-67	1	1
-58	1	0
-79	7	6
-74	1	1
-79	1	0
-26	1	1
-202	15	15
-352	2	2
-16	1	1
-51	22	19
-574	0	1
-87	1	1
-46	1	1
-88	1	1
-27	1	1
-120
-
-chain 526301 chr1_random 1663265 + 1264935 1361969 chr1 249250621 + 116056429 116101915 1232
-69	0	1
-30	1	1
-2663	2	0
-4185	1	0
-229	1	0
-25	1	1
-1104	1	0
-604	4	0
-1264	1	0
-2613	1	1
-21	1	0
-12	1	13
-2785	72844	21309
-397	19	2
-2203	1	1
-31	1	1
-658	1	1
-27	1	1
-923	9	9
-168	1	1
-46	0	2
-2502	43	43
-879	17	17
-644
-
-chain 506365 chr1_random 1663265 + 1399143 1404500 chr1 249250621 - 133194419 133199775 28136
-3175	1	0
-1447	0	1
-512	1	0
-221
-
-chain 482769 chr1_random 1663265 + 211415 216543 chr1 249250621 - 247889067 247894197 45886
-70	2	3
-905	2	3
-1091	1	1
-23	1	1
-302	15	14
-393	1	1
-24	1	1
-1961	0	1
-336
-
-chain 474976 chr1_random 1663265 + 1295676 1399043 chr1 249250621 + 115999419 116093083 1267
-571	10	10
-627	7	6
-46	1	1
-3095	0	1
-960	0	1
-608	11	10
-426	39	35
-2035	1	1
-23	1	1
-1866	17	18
-79	1	1
-1530	63368	32589
-866	110	110
-100	53	53
-1884	40	40
-3775	15606	36683
-2322	14	14
-145	49	49
-296	96	96
-297	0	2
-465	58	58
-262	22	22
-182	0	1
-638	1	0
-764
-
-chain 456897 chr1_random 1663265 + 1317 37745 chr1 249250621 + 109592282 109609521 6704
-1178	0	1
-16	1	0
-10	0	1
-4	1	1
-245	7763	188
-27	1	1
-1155	1	1
-91	4156	3450
-1810	51	51
-50	9	10
-567	3839	4491
-37	6346	0
-128	0	2
-29	50	48
-45	1519	155
-6	2	0
-9	10	6
-246	1806	0
-18	1	0
-5	2068	31
-2018	2	2
-20	3	3
-833	1	0
-101	1	0
-149
-
-chain 426748 chr1_random 1663265 + 63710 68210 chr1 249250621 - 139547929 139552428 99412
-1542	1	0
-2957
-
-chain 353264 chr1_random 1663265 + 462791 467071 chr1 249250621 + 144608404 144612698 156569
-71	50	50
-33	29	29
-226	10	10
-526	66	67
-55	50	50
-414	5	5
-57	46	58
-57	12	12
-254	1	1
-25	1	1
-52	13	13
-638	16	16
-579	1	1
-60	1	1
-178	1	1
-79	1	0
-35	0	3
-111	1	1
-43	1	1
-264	1	0
-119	1	1
-15	0	1
-76	1	0
-5
-
-chain 327229 chr1_random 1663265 + 1409275 1412904 chr1 249250621 + 115977641 115981270 200837
-2640	156	155
-473	0	1
-360
-
-chain 312923 chr1_random 1663265 + 1319916 1393318 chr1 249250621 + 115926067 115986980 1722
-1418	1	0
-1389	1	0
-1620	0	1
-374	1	0
-1361	0	1
-1994	1	0
-827	0	6
-1784	56909	44431
-253	1	0
-12	2	0
-8	24	14
-5344	2	0
-76
-
-chain 244562 chr1_random 1663265 + 478502 503782 chr1 249250621 - 100680024 100953393 1328
-106	13	13
-478	55	55
-310	1	1
-23	1	1
-376	1	1
-61	1	1
-1100	10	10
-810	5	0
-53	1	1
-119	1	1
-44	1	0
-94	100	32051
-60	5	5
-744	1	1
-87	1	1
-44	2	0
-53	11	5
-584	2	2
-30	0	17
-73	1	1
-49	1	1
-456	8	8
-796	19	19
-166	1	1
-42	1	1
-105	1	1
-38	1	1
-55	1	1
-80	1	1
-293	2	2
-19	1	1
-550	5637	9366
-68	24	22
-103	1	1
-35	0	1
-102	1	1
-39	6	0
-388	9	9
-21	1	1
-338	27	27
-500	4	0
-117	5	5
-271	1	1
-38	1	1
-273	3	3
-16	3	3
-80	1	1
-63	1	1
-130	1	1
-18	1	1
-204	1	1
-45	1	1
-141	1	1
-112	1	1
-75	1	0
-75	4	4
-83	2	0
-854	5	5
-104	0	4
-12	1	1
-351	1	1
-40	1	1
-102	4779	217183
-40	502	502
-31	0	12
-58	311	311
-110	52	52
-78	1	1
-46	535	535
-45
-
-chain 239113 chr1_random 1663265 + 455713 471283 chr1 249250621 + 144877306 144889304 5703
-73	1	0
-944	0	1
-2741	1	1
-77	1770	1206
-12	1449	338
-10	71	1301
-14	10	145
-26	4281	1018
-2672	0	1
-1418
-
-chain 228041 chr1_random 1663265 + 450807 453388 chr1_gl000192_random 547496 + 525635 528523 474030
-521	25	26
-256	4	316
-195	1	0
-183	4	0
-249	48	48
-915	19	18
-161
-
-chain 219405 chr1_random 1663265 + 8071 23476 chr1 249250621 + 109602419 109665881 23204
-1669	2217	48069
-1950	5	1
-213	6609	8813
-681	1	0
-580	0	1
-296	37	38
-248	0	4
-301	31	31
-143	38	38
-386
-
-chain 219231 chr1_random 1663265 + 32127 34517 chr1 249250621 - 139682423 139684814 491274
-85	27	27
-14	0	1
-204	5	5
-63	24	24
-1968
-
-chain 210320 chr1_random 1663265 + 459650 474308 chr1_gl000192_random 547496 + 522489 531711 22108
-267	0	10
-1175	5	1
-48	0	2
-16	3	3
-119	0	12
-37	12	12
-1340	8711	3256
-34	0	2
-58	1	0
-38	1	0
-351	5	5
-486	17	15
-158	81	81
-76	1	1
-36	1	1
-69	12	13
-1500
-
-chain 207966 chr1_random 1663265 + 29704 55292 chr1 249250621 + 109529352 109557857 7568
-742	273	273
-560	0	1
-232	17541	20458
-729	2	2
-97	3	3
-89	1	1
-68	0	1
-28	1	1
-2575	2	0
-59	1	1
-2585
-
-chain 202325 chr1_random 1663265 + 27243 45056 chr1 249250621 - 139669260 139678536 8944
-1432	157	157
-50	45	45
-677	2608	49
-27	8791	867
-266	9	9
-169	1	1
-62	1	1
-67	7	5
-28	1	1
-1619	22	22
-41	127	127
-21	1	1
-40	2	1
-32	1	1
-362	0	1949
-1147
-
-chain 199687 chr1_random 1663265 + 18553 20627 chr1 249250621 + 109595202 109597276 600797
-2074
-
-chain 171508 chr1_random 1663265 + 447628 491985 chr1 249250621 + 148535207 148566609 6481
-121	14	14
-517	0	4
-507	1	0
-74	1	1
-41	0	1
-61	4541	11291
-1073	1	0
-718	70	44
-66	31371	11607
-690	1	1
-115	1	1
-61	1	1
-70	1	1
-57	0	4
-54	1	1
-41	2	6
-28	5	77
-73	1	1
-34	5	5
-887	1	0
-427	1	1
-7	0	5
-40	1	1
-59	1	1
-47	1	1
-121	9	9
-57	2	0
-362	1	1
-48	4	4
-429	1	1
-28	1	1
-160	1	1
-92	5	0
-15	0	5
-15	1	1
-139	5	5
-37	1	1
-87	1	1
-40	1	1
-253	1	1
-35	1	1
-197	1	1
-69	1	1
-114	1	1
-79	1	1
-51
-
-chain 170629 chr1_random 1663265 + 474420 479154 chr1 249250621 - 104365477 104643040 2652
-3982	697	273526
-55
-
-chain 143194 chr1_random 1663265 + 449166 450695 chr1 249250621 - 104373413 104374943 899312
-167	0	1
-362	11	11
-989
-
-chain 141808 chr1_random 1663265 + 195186 230464 chr1 249250621 + 1361949 1390000 8100
-66	0	1
-865	27548	20313
-75	1	1
-163	2	2
-2267	0	2
-1549	0	2
-37	1	1
-597	1	1
-28	1	1
-269	14	19
-59	1	1
-20	1	1
-734	2	0
-977
-
-chain 137395 chr1_random 1663265 + 446016 447466 chr1 249250621 + 144922370 144923820 937713
-1450
-
-chain 120082 chr1_random 1663265 + 1413004 1414278 chr1 249250621 + 115908963 115910237 1071399
-1274
-
-chain 110577 chr1_random 1663265 + 0 1193 chr5 180915260 + 33390295 33391489 1161255
-153	0	1
-942	4	4
-94
-
-chain 101176 chr1_random 1663265 + 442945 444014 chr1 249250621 - 104338746 104339815 1265508
-1069
-
-chain 61431 chr1_random 1663265 + 9891 10535 chr1 249250621 + 109697165 109697809 2020878
-644
-
-chain 48091 chr1_random 1663265 + 497444 501649 chr1 249250621 + 144842054 144846259 8551
-4205
-
-chain 31572 chr1_random 1663265 + 576223 577747 chr4 191154276 + 100714665 100716180 4375428
-114	20	20
-105	460	462
-56	375	378
-65	263	249
-66
-
-chain 28915 chr1_random 1663265 + 230464 231387 chr1 249250621 + 1420670 1421247 4712368
-191	574	228
-67	38	38
-53
-
-chain 27385 chr1_random 1663265 + 205390 205833 chr1 249250621 - 247799065 247799507 5896168
-141	86	86
-106	47	46
-63
-
-chain 25670 chr1_random 1663265 + 87811 88395 chr7 159138663 - 51241913 51242744 3648322
-121	405	652
-58
-
-chain 21035 chr1_random 1663265 + 376636 377171 chr1 249250621 - 247932544 247932844 3872256
-107	118	0
-61	93	15
-49	39	0
-68
-
-chain 18694 chr1_random 1663265 + 540390 626404 chr1 249250621 + 148529505 148589817 1111
-44	254	254
-43	76	73
-54	196	196
-37	240	6477
-31	4	4
-4	2528	2531
-8	1	1
-42	1	1
-60	70185	38258
-94	10137	10136
-31	1	1
-3	167	167
-88	400	400
-52	829	828
-33	10	0
-52	281	281
-28
-
-chain 18305 chr1_random 1663265 + 612752 613165 chr1 249250621 + 146400208 146400621 434456
-18	31	31
-215	97	97
-52
-
-chain 18205 chr1_random 1663265 + 210123 210768 chr1 249250621 + 1400633 1401273 11939617
-55	410	403
-82	10	12
-88
-
-chain 16211 chr1_random 1663265 + 84691 84862 chr5 180915260 + 68593902 68594073 10696361
-171
-
-chain 14543 chr1_random 1663265 + 375983 376437 chr1 249250621 - 247932585 247932921 12601411
-13	231	153
-56	101	61
-53
-
-chain 11766 chr1_random 1663265 + 209234 209374 chr6 171115067 + 48765751 48765891 19406706
-84	4	4
-52
-
-chain 10899 chr1_random 1663265 + 1264583 1264729 chr4 191154276 - 96228610 96228756 20935897
-69	19	19
-58
-
-chain 9779 chr1_random 1663265 + 575439 575892 chr5 180915260 - 127861600 127862049 19918678
-60	389	385
-4
-
-chain 9449 chr1_random 1663265 + 206282 206576 chr1 249250621 - 247814999 247815293 24134146
-64	179	179
-51
-
-chain 9080 chr1_random 1663265 + 376922 377270 chr1 249250621 - 247932789 247932982 12922008
-42	39	0
-12	156	79
-8	39	0
-52
-
-chain 7488 chr1_random 1663265 + 375996 376227 chr1 249250621 - 247932827 247932944 24096271
-39	178	64
-14
-
-chain 7272 chr1_random 1663265 + 492183 493450 chr1_gl000192_random 547496 + 517200 518462 5534
-104	1136	1131
-27
-
-chain 7258 chr1_random 1663265 + 576783 577499 chr14 107349540 - 76512188 76512903 4928952
-56	262	262
-101	216	215
-81
-
-chain 7167 chr1_random 1663265 + 376446 376521 chr1 249250621 - 247932507 247932582 27908410
-75
-
-chain 6857 chr1_random 1663265 + 87342 87413 chr4 191154276 - 48731804 48731875 28524152
-71
-
-chain 6426 chr1_random 1663265 + 508964 509092 chr1 249250621 + 144828390 144828518 146082
-13	51	51
-64
-
-chain 6204 chr1_random 1663265 + 211009 211075 chr1 249250621 + 1467491 1467557 30075428
-66
-
-chain 6008 chr1_random 1663265 + 376783 376999 chr1 249250621 - 247932727 247932982 14593768
-49	132	171
-35
-
-chain 5855 chr1_random 1663265 + 576112 576191 chr20 63025520 + 560198 560277 14627950
-79
-
-chain 5539 chr1_random 1663265 + 247082 247140 chr16 90354753 - 36623787 36623845 31913042
-58
-
-chain 5517 chr1_random 1663265 + 575499 575571 chr1 249250621 - 135388947 135389019 22575370
-19	14	14
-39
-
-chain 5153 chr1_random 1663265 + 463736 463802 chr1 249250621 - 100897669 100897735 496173
-66
-
-chain 4331 chr1_random 1663265 + 576997 577043 chr4 191154276 + 125192159 125192205 31588172
-46
-
-chain 4269 chr1_random 1663265 + 508977 509028 chr1 249250621 - 101245694 101245744 11082093
-11	1	0
-24	1	1
-14
-
-chain 3392 chr1_random 1663265 + 1264741 1264777 chr1 249250621 + 103601716 103601752 22855599
-36
-
-chain 2584 chr1_random 1663265 + 472532 472613 chr1 249250621 - 104701386 104701467 60543
-81
-
-chain 2530 chr1_random 1663265 + 576576 576677 chr2 243199373 + 18874674 18874775 4960893
-101
-
-chain 2443 chr1_random 1663265 + 508878 508906 chr1 249250621 + 145358788 145358816 8460
-28
-
-chain 2298 chr1_random 1663265 + 376035 376059 chr1 249250621 - 247932520 247932544 25650669
-24
-
-chain 2200 chr1_random 1663265 + 377179 377218 chr1 249250621 - 247932814 247932853 18046603
-39
-
-chain 2078 chr1_random 1663265 + 576191 576213 chr2 243199373 - 87184513 87184535 19810119
-22
-
-chain 1902 chr1_random 1663265 + 462945 462974 chr1 249250621 + 146388727 146388756 1440299
-29
-
-chain 1597 chr1_random 1663265 + 87932 87955 chr1 249250621 + 203810737 203810760 8954286
-23
-
-chain 1582 chr1_random 1663265 + 576728 576783 chr12 133851895 + 80469819 80469874 8882774
-55
-
-chain 1575 chr1_random 1663265 + 377270 377295 chr1 249250621 - 247932789 247932814 25950613
-25
-
-chain 1557 chr1_random 1663265 + 376743 376767 chr1 249250621 - 247932958 247932982 25686497
-24
-
-chain 1423 chr1_random 1663265 + 577528 577578 chr3 198022430 + 24122600 24122650 5633229
-50
-
-chain 1401 chr1_random 1663265 + 208964 209027 chr19 59128983 + 53692979 53693042 24768107
-63
-
-chain 1269 chr1_random 1663265 + 577058 577101 chrX 155270560 - 54470903 54470946 5438939
-43
-
-chain 1137 chr1_random 1663265 + 88481 88531 chrX 155270560 - 107394638 107394688 10193603
-50
-
-chain 1096 chr1_random 1663265 + 88429 88481 chr1 249250621 - 213837318 213837370 14790649
-52
-
-chain 963 chr1_random 1663265 + 575892 575970 chr1 249250621 - 198864223 198864301 11419759
-78
-
-chain 917 chr1_random 1663265 + 455298 455327 chr1_gl000192_random 547496 - 58673 58702 411262
-29
-
-chain 870 chr1_random 1663265 + 577218 577269 chr6 171115067 - 89553434 89553485 24911812
-51
-
-chain 794 chr1_random 1663265 + 88312 88337 chr4 191154276 + 171087862 171087887 6635553
-25
-
-chain 649 chr1_random 1663265 + 576545 576576 chr15 102531392 - 5321440 5321471 7251364
-31
-
-chain 622 chr1_random 1663265 + 576462 576495 chr11 135006516 + 114505284 114505317 6564387
-33
-
-chain 546 chr1_random 1663265 + 88531 88556 chr6 171115067 + 144792007 144792032 10415340
-25
-
-chain 398 chr1_random 1663265 + 575763 575814 chr14 107349540 + 34662629 34662680 24063646
-51
-
-chain 22466167312 chr2 242951149 + 0 242751149 chr2 243199373 + 10000 243102476 1
-1201236	1	0
-2057	1	1
-26	1	1
-4043	0	22
-82	101	7
-33	0	74
-36	13	1
-67	0	48
-152	0	418
-50	2	0
-6	6	0
-76	74	0
-20	6	0
-22	118	0
-374	0	2446
-836	0	2310
-21	0	2444
-21507	1	1
-50	0	4
-2041	4	0
-9052	0	2
-81	8	0
-10	42	0
-1078	1	0
-4122	0	1
-1608	1	28
-4029	9	0
-967	1000	4547
-414	0	27
-2237132	1	0
-2458	17	17
-3915	47	47
-633	0	4
-3531	14	14
-3954	50000	51129
-1426129	100025	160449
-11087286	3	0
-773	50000	103977
-1576	1	0
-240	1	0
-318	0	2
-258	16	0
-2848	10	10
-1404	1	1
-27	1	1
-703	0	13
-375	1	0
-4783388	25000	35000
-848	2	0
-1225	2	0
-391	0	1
-3445	24	24
-184	1	1
-28	1	1
-49	4	0
-4514	9	0
-9628	9	1
-1483	7	7
-1990	1	0
-1949	0	1
-2716230	0	1
-46732767	9	5
-9477928	3	0
-7520813	0	72396
-1900436	150000	294073
-17672	0	1
-5792	0	1
-9019	266	0
-2942	1	0
-9388	0	2
-37826	0	4
-23440	4	0
-290929	1000000	1273578
-731068	3000000	3000000
-2558421	1	0
-1196	0	10
-686	1	0
-26	3	0
-15	1	1
-2309	1	0
-1332	23	22
-344	1	0
-1645	4	4
-6564	0	1
-6329	0	1
-769	1	0
-873	0	7
-1299	1	0
-8250	15	15
-4291	12548	10626
-1054	0	103
-84	218	0
-5897	1	1
-33	1	1
-9905	37	51
-1645	113	113
-1597	4	4
-61	1	1
-866	0	13
-2830	0	3
-2819	2	0
-156	436	88
-100	54	0
-4753	8	0
-4903	6	6
-3847	2	0
-108126	145	0
-3542	0	1
-10276	1	0
-402	1	1
-47	1	1
-63	0	2
-583	1	1
-34	1	1
-8975	46	0
-378	1	1
-70	1	1
-2476	102	0
-1754	1	0
-8426	1	0
-11986570	142000	151150
-14207	1	1
-49	1	1
-1784	12	0
-406	0	1
-1874	1	1
-33	1	1
-4795	0	2
-3686	1	1
-15	1	1
-164	0	2
-7287	5	5
-702023	150000	72796
-69	0	1
-1598	1	0
-1340	1	0
-1030	4	0
-1166	10	10
-629	27	27
-5750	1	1
-34	1	1
-3283	4	2
-496	21	1
-25	1	9
-41	1	1
-329	4	4
-9955	41	41
-10953	1	2
-1417	44	0
-911	0	17
-18270	0	1
-178429	281526	0
-34455	406	0
-58863	2	1
-1843	2	0
-14994	1	0
-12992	0	2
-2571146	0	1
-35688061	100000	108224
-29671719	0	1
-39665349	0	1
-14876089	20000	64197
-401	3	0
-1831	1	1
-61	1	1
-654	1	11
-138	28	0
-105	1	1
-25	4	0
-73	9	9
-3247	0	2
-1355	0	1
-816	21	25
-526	1	1
-60	1	1
-773	0	1
-1494	0	1
-448	44	44
-1191	0	1
-21	1	1
-596	0	1
-1582	0	1
-425	3	0
-1141	8	0
-136	744	80
-18	1	0
-4	1	0
-8	4	2
-32	1	0
-71	0	1
-385747	1	1
-110	1	1
-51	7	7
-54	15205	15205
-54	7	7
-51	1	1
-110	1	1
-5198249	1	0
-108	0	40
-65	0	80
-100	2	82
-442	1	1
-35	1	1
-119	129	9
-33	40	0
-42	1	1
-86	40	0
-1330	1	0
-1194	2	0
-11	1	1
-1773	5	0
-1623	1	1
-25	1	1
-2422	1	1
-20	1	0
-2315	1	0
-31	1	1
-1508	3	0
-50	4	0
-970	6	6
-7234	0	4
-1228	0	1
-1233	1	8
-744	16	16
-3447	1	1
-41	1	1
-3297	2	0
-1714	0	2
-2299	0	2
-2143	1	1
-18	1	1
-917	0	1
-1082	1	1
-49	1	1
-9098	4	0
-5529	1	0
-3266	8	0
-894	0	6
-3536	0	2
-4179	13	18
-1785	1	0
-1675	6	0
-1216	33000	32348
-287	109	573
-12548	30000	30000
-952154	25000	41011
-1914	0	1
-225	1	1
-57	1	1
-2910	1	0
-471	0	1
-1956	1	1
-43	1	1
-1000	92	0
-2854	0	3
-1837	0	306
-1007	0	30
-206	35	32
-217	17	17
-1525	0	8
-413	1	1
-32	2	2
-1573	12	12
-2258676
-
-chain 1437141 chr2 242951149 + 234136066 234151271 chr2 243199373 - 8712841 8728046 1459
-15205
-
-chain 1229376 chr2 242951149 + 110524471 111016063 chr2 243199373 - 132402743 134718956 53
-41	12371	12350
-33	0	23
-11	197610	197512
-5295	5	5
-190	69	19
-2195	1	0
-285	34	34
-1682	1	0
-182	11	6
-291	0	1
-1506	15	16
-146	5	5
-2050	51	51
-186	8	7
-68	7	6
-41	1	0
-306	0	1
-1545	1	0
-1334	25	24
-543	0	2
-224	17	21
-615	1	0
-208	2	0
-158	27	21
-3320	0	1
-576	0	2
-4562	0	6
-1023	0	1
-977	0	1
-3904	1	0
-827	415	28
-1508	14	13
-9571	36	36
-1393	1	1
-42	1	1
-2205	0	2
-5258	36	0
-42	2	0
-4437	2	0
-3357	1	0
-6289	0	9
-1996	1	0
-3228	0	1
-202	0	1
-2743	7	0
-24	0	5
-549	3	1
-942	0	6
-1815	8	0
-874	0	3
-4737	0	2
-852	14	18
-518	14	14
-4377	1	1
-49	1	1
-3270	1	0
-753	0	4
-240	1	0
-2391	0	1
-4745	4	0
-5752	0	2
-880	0	1
-397	1	0
-1407	0	3
-120	1	1
-89	1	1
-7011	3	0
-188	8	8
-834	5	0
-94	18	18
-3711	150112	1975291
-345	52	52
-100	8	8
-52	6	6
-650	6	6
-273	91	95
-88	90	90
-331	116	116
-66	35	35
-145	13	15
-95	6	6
-301	43	47
-444	12	12
-645	116	119
-215	31	31
-748	58	57
-212	71	71
-420	38	38
-190	4	4
-51	32	32
-65	32	32
-182	69	69
-161	17	17
-74	36	36
-170	25	25
-124	19	15
-230
-
-chain 33206 chr2 242951149 + 111008548 111015495 chr2 243199373 + 113147044 113153995 310
-112	345	345
-52	1095	1095
-15	0	4
-76	88	88
-90	331	331
-116	66	66
-35	560	560
-43	1101	1101
-116	215	215
-31	748	748
-58	212	212
-71	420	420
-38	245	245
-32	65	65
-32	182	182
-69	252	252
-36
-
-chain 15095 chr2 242951149 + 97284299 97473552 chr2 243199373 - 145080546 145267103 122
-48	13638	11732
-218	15837	15837
-37	1645	1645
-113	8336	8336
-436	100	100
-54	121645	121635
-3	25	0
-101	26915	26159
-9	0	1
-93
-
-chain 10366 chr2 242951149 + 110742577 110753868 chr2 243199373 + 113162562 113173850 1257
-34	5889	5884
-51	5290	5292
-27
-
-chain 3994 chr2 242951149 + 111050518 111050561 chr2 243199373 - 132647167 132647210 483
-43
-
-chain 3626 chr2 242951149 + 1208025 1208063 chr2 243199373 + 1217618 1217656 30090800
-38
-
-chain 3098 chr2 242951149 + 110780566 110780602 chr2 243199373 + 100698198 100698234 394442
-36
-
-chain 2548 chr2 242951149 + 89594034 89594300 chr2 243199373 - 153635204 153635700 103
-90	9	107
-22	9	0
-32	3	0
-5	0	125
-21	15	30
-5	1	0
-25	0	5
-29
-
-chain 2507 chr2 242951149 + 1207989 1208025 chr2 243199373 + 1217656 1217692 7254147
-36
-
-chain 2306 chr2 242951149 + 97446409 97446434 chr2 243199373 + 98080299 98080324 1844703
-25
-
-chain 5644665978 chr20 62435964 + 8000 62435964 chr20 63025520 + 60000 62965520 20
-26259569	1765661	3100000
-234339	1000000	150000
-4004088	0	1
-6459	0	244
-37810	0	2
-1044573	20000	50000
-9411883	2	8
-362	0	1
-11607353	0	1
-1301304	1	0
-31033	0	9
-1154	0	2
-1088	1	1
-29	1	1
-2509	0	2
-407	1	0
-40	1	1
-3787164	27050	50000
-71932	110000	50000
-694117	0	1
-1008033
-
-chain 3228730713 chr21 46944323 + 9719767 46944323 chr21 48129895 + 10697896 48119895 23
-490233	3050000	3150000
-19828060	0	1
-8789369	1199	50000
-243783	1500	1500
-1381822	1359	50000
-3437231
-
-chain 42537850 chr21_random 1679693 + 281005 1255172 chr21 48129895 + 9411193 10647896 88
-184355	50000	489372
-131056	458754	281918
-150002
-
-chain 21600281 chr21_random 1679693 + 876305 1679693 chr21 48129895 - 37585054 38304458 99
-178865	280890	346005
-315	2	2
-38	1	1
-261	1	1
-24	1	1
-157	0	325
-16	1	1
-85	1	1
-66	1	1
-330	11	11
-235	1	1
-51	1	1
-405	1	1
-26	1	1
-130	5	5
-80	1	1
-91	1	1
-20	1	1
-244	0	1
-478	1	1
-5	1	0
-13	0	1
-49	1	1
-197	10	10
-158	1	1
-57	0	1
-829	1	1
-60	1	1
-51	0	1
-584	1	0
-21	2	0
-151	20	20
-316	1	1
-16	1	1
-100	7	7
-102	1	1
-49	1	1
-125	1	0
-102	13	13
-153	20	20
-199	1	0
-35	1	1
-367	1	1
-51	1	1
-344	1	1
-101	1	1
-243	1	1
-27	1	1
-338	0	4
-166	15	15
-73	1	1
-44	1	1
-282	4	4
-67	1	1
-54	1	1
-216	1	1
-48	1	1
-76	1	1
-70	1	1
-392	1	1
-44	1	1
-65	8	9
-362	0	4
-34	1	1
-68	1	1
-57	1	0
-120	1	1
-374	1	1
-21	1	1
-121	1	1
-34	1	1
-80	1	0
-64	2	0
-162	8	8
-184	1	1
-34	1	1
-658	2	2
-52	0	4
-297	1	0
-136	1	1
-20	1	1
-905	0	1
-250	7	8
-138	0	3
-104	1	0
-42	1	1
-539	0	1
-43	4	0
-633	0	20
-353	17	17
-969	4	0
-39	3	3
-210	3	1
-188	7	7
-459	2	2
-25	1	1
-207	1	1
-55	1	1
-375	1	1
-66	1	1
-599	0	2
-395	1	1
-33	1	1
-73	1	1
-35	2	0
-275	9999	10000
-353	1	1
-26	1	1
-423	1	1
-32	1	1
-86	7	7
-197	1	1
-44	1	1
-96	1	1
-77	7	0
-247	0	2
-77	1	1
-425	13	1
-32	1	1
-65	1	1
-217	3	2
-115	1	1
-33	1	1
-268	1	0
-959	1	1
-63	1	1
-93	5	5
-185	1	1
-31	1	1
-944	12	12
-413	1	1
-92	1	1
-276	1	1
-35	1	1
-500	1	1
-31	149436	9
-158069
-
-chain 14432948 chr21_random 1679693 + 78709 231005 chr21 48129895 + 9882623 10034920 205
-77296	0	1
-75000
-
-chain 7807601 chr21_random 1679693 + 1362161 1471624 chr1 249250621 - 105758025 105867745 293
-77	11427	11419
-174	5	5
-857	64	64
-2170	0	2
-621	1	1
-26	1	1
-4365	0	1
-155	0	1
-452	0	4
-941	0	4
-403	1	1
-45	1	1
-534	86	86
-2198	0	1
-303	2	0
-5470	6	6
-845	1	1
-45	1	1
-221	6	0
-321	1	1
-44	1	1
-354	1	0
-374	131	130
-577	6	5
-263	17	16
-207	0	2
-1746	14	14
-3223	1	1
-46	4	4
-1479	1	1
-46	1	1
-383	0	3
-44	1	1
-2724	67	67
-47	145	145
-350	116	116
-138	0	1
-1	65	65
-796	17	17
-645	1	0
-24	1	1
-1318	1	0
-687	1	1
-41	1	1
-2292	1	1
-37	1	1
-589	1	1
-37	1	0
-670	13	13
-357	4	0
-2667	3	0
-1941	1	1
-31	1	1
-1538	54	54
-64	166	166
-120	226	226
-46	14	0
-14	155	155
-92	54	54
-26	55	55
-98	131	131
-36	1	1
-76	391	391
-44	294	294
-37	813	813
-35	219	219
-898	1	1
-19	1	1
-213	12	12
-1926	1	1
-21	1	1
-4561	1	1
-28	1	1
-8361	1	1
-43	1	1
-429	211	492
-3095	0	1
-3873	1	1
-43	5	5
-3785	171	171
-65	122	122
-70	116	116
-29	459	459
-36	352	352
-39	93	93
-39	190	190
-41	1783	1784
-35	509	509
-27	394	394
-57	834	834
-58	10	10
-17	758	760
-41	0	4
-82	194	194
-60	543	543
-31	58	58
-46	607	607
-34	98	98
-31	1	1
-38	563	562
-135	1980	1976
-48	370	370
-42	515	515
-49	456	456
-3137	0	1
-2483	1	0
-357	1	1
-49	1	1
-1181	1	0
-885	1	0
-86
-
-chain 3630496 chr21_random 1679693 + 696416 1463441 chr21 48129895 + 9645548 10215976 235
-129889	481231	310631
-225	46	51
-383	6	6
-73	18	18
-200	18	39
-236	63	68
-123	340	365
-57	300	259
-51	138	138
-71	55	55
-60	152	152
-51	100	103
-61	358	357
-85	1906	236
-88	157	153
-56	39	39
-73	20146	20047
-67	1	0
-57	154	154
-59	940	953
-61	205	205
-60	46	46
-122	149	149
-53	64	56
-210	16	16
-209	1	0
-214	29	29
-71	69616	76139
-67	47	47
-145	350	354
-116	139	135
-65	13718	10425
-54	64	64
-166	120	120
-225	75	75
-74	14	13
-67	92	92
-54	26	26
-55	98	98
-127	117	117
-173	16	15
-202	44	44
-198	21	17
-75	37	37
-442	18	18
-353	35	35
-219	27532	0
-105	0	3
-66	65	65
-122	70	70
-116	29	29
-459	36	36
-278	17	17
-57	39	40
-93	39	39
-190	41	41
-285	16	20
-859	22	37
-176	4	4
-183	32	32
-206	35	36
-509	27	27
-394	57	56
-116	5	5
-596	1	0
-116	85	85
-54	0	1
-119	0	2
-585	124	127
-74	10	11
-109	60	60
-82	22	22
-439	31	31
-58	46	46
-106	21	22
-186	15	14
-279	34	34
-98	70	67
-166	1	0
-396	135	135
-1551	12	12
-90	0	3
-69	4	4
-48	3	0
-203	48	48
-370	42	42
-139	14	53
-362	49	49
-456
-
-chain 2630212 chr21_random 1679693 + 936 28709 chr21 48129895 + 44682664 44710462 1048
-3985	6	7
-8941	0	30
-3327	1	1
-74	1	1
-859	22	22
-89	70	70
-489	14	3
-11	2	1
-10	10	0
-10	0	1
-31	1	27
-556	3	0
-128	0	1
-358	1	1
-45	1	1
-1712	8	0
-6545	32	31
-431
-
-chain 517534 chr21_random 1679693 + 1332563 1373665 chr4_gl000194_random 191469 - 21469 62943 261
-130	2	2
-53	1	1
-139	1	1
-60	1	1
-321	125	125
-72	1	1
-81	59	59
-248	22	23
-250	13	13
-407	61	61
-205	60	60
-46	122	122
-149	53	53
-14	0	8
-50	650	650
-29	19697	20073
-100	1	4
-106	2	2
-158	1	1
-89	1	1
-10	1	1
-65	1	1
-48	1	1
-156	1	1
-61	1	1
-156	1	1
-81	1	1
-522	16	16
-377	22	22
-358	1	1
-17	1	1
-141	1	0
-29	0	1
-16	1	1
-105	1	1
-49	2	1
-63	1	1
-32	1	0
-7	1	1
-349	1	2
-102	1	1
-146	1	0
-93	3	0
-149	1	1
-86	1	1
-220	1	1
-111	1	1
-195	19	19
-108	1	1
-79	6	1
-98	0	1
-29	2	2
-98	1	1
-125	1	1
-196	1	1
-52	1	1
-767	1	1
-68	3	3
-70	1	1
-66	1	1
-331	1	1
-22	1	1
-60	77	77
-437	1	1
-61	1	1
-134	1	1
-48	4	2
-26	0	2
-79	1	1
-16	1	1
-77	1	1
-24	1	1
-176	1	1
-33	1	1
-61	0	4
-141	1	1
-17	1	1
-232	1	1
-42	1	1
-439	2	1
-31	1	1
-55	1	0
-181	1	1
-77	4	4
-145	4	5
-22	1	1
-159	1	6
-53	1	1
-63	1	1
-67	6	6
-71	1	1
-25	1	1
-103	6	6
-303	6513	6492
-211	1	1
-87	1	1
-170	2	2
-36	0	6
-361	1	1
-58	1	1
-292	10	10
-201	1	1
-35
-
-chain 353583 chr21_random 1679693 + 1323386 1332563 chrUn_gl000218 161147 - 0 9198 304
-693	1	1
-28	4	0
-425	51	51
-874	2	4
-421	1	1
-23	1	1
-299	2	1
-20	3	3
-88	1	1
-35	1	1
-283	4	4
-42	4	4
-719	14	14
-181	1	1
-41	1	1
-1010	1	1
-59	1	1
-478	1	1
-45	1	0
-78	1	1
-315	1	1
-22	1	1
-342	1	1
-27	1	1
-716	0	25
-83	1	1
-44	1	1
-218	6	6
-142	1	1
-178	1	1
-220	1	1
-35	1	1
-55	1	1
-44	1	1
-143	1	1
-80	1	1
-85	1	1
-46	1	1
-169	1	1
-56	1	1
-94	1	1
-51	1	1
-48
-
-chain 153763 chr21_random 1679693 + 1307498 1317523 chr1 249250621 + 142541121 142549427 248494
-38	225	225
-46	934	934
-63	240	230
-50	653	627
-57	559	562
-4	186	183
-51	101	101
-16	235	235
-70	1848	174
-58	193	194
-3	255	257
-97	40	40
-164	35	35
-167	27	27
-82	213	218
-106	172	171
-55	274	274
-125	214	209
-158	123	124
-94	169	169
-69	430	425
-66	871	864
-95	213	213
-81
-
-chain 88175 chr21_random 1679693 + 0 28278 chr21_gl000210_random 27682 - 0 27251 1050
-107	675	0
-154	27310	26958
-32
-
-chain 46308 chr21_random 1679693 + 1305249 1307368 chr21 48129895 - 38147885 38150014 728191
-46	171	171
-69	165	166
-32	292	292
-34	184	184
-26	73	73
-23	117	117
-57	54	54
-7	16	25
-68	78	78
-23	242	242
-53	230	230
-59
-
-chain 40072 chr21_random 1679693 + 1311066 1311528 chr3 198022430 + 38430454 38430916 3283349
-95	1	1
-47	1	1
-177	1	1
-41	1	1
-98
-
-chain 25551 chr21_random 1679693 + 1316263 1317134 chr21 48129895 + 10022171 10023044 3443865
-97	94	94
-87	148	147
-94	340	343
-11
-
-chain 20886 chr21_random 1679693 + 1305172 1307309 chrY 59373566 - 45989384 45991522 2022
-77	46	46
-64	50	50
-57	69	70
-165	32	32
-86	11	11
-195	34	34
-184	122	122
-117	57	57
-54	91	91
-50	51	51
-242	61	61
-68	9	9
-145
-
-chain 10360 chr21_random 1679693 + 1384481 1394861 chr21 48129895 - 38158677 38169079 831
-56	10224	10246
-100
-
-chain 9106 chr21_random 1679693 + 1316541 1317639 chr2 243199373 + 56015784 56016880 4408555
-45	37	37
-66	97	95
-66	672	672
-115
-
-chain 7814 chr21_random 1679693 + 1312477 1312593 chr8 146364022 + 34952530 34952621 21041862
-26	37	12
-53
-
-chain 6987 chr21_random 1679693 + 1305359 1306761 chr1 249250621 - 105769657 105771059 738748
-38	5	5
-7	1324	1324
-28
-
-chain 3478 chr21_random 1679693 + 1309705 1309742 chrX 155270560 - 92499801 92499838 30075241
-37
-
-chain 2939 chr21_random 1679693 + 1312274 1312311 chr1 249250621 - 217601682 217601719 16037052
-37
-
-chain 2906 chr21_random 1679693 + 1394861 1394892 chrUn_gl000247 36422 - 2105 2136 848
-31
-
-chain 2805 chr21_random 1679693 + 1309675 1309705 chr4 191154276 - 16268024 16268054 28769751
-30
-
-chain 2788 chr21_random 1679693 + 1374701 1374765 chr4_gl000194_random 191469 - 63980 64044 1175
-9	36	36
-19
-
-chain 2571 chr21_random 1679693 + 1317411 1317442 chr20 63025520 - 39738360 39738391 24462467
-31
-
-chain 2324 chr21_random 1679693 + 1311588 1311646 chr2 243199373 + 3637936 3637994 8156424
-58
-
-chain 1980 chr21_random 1679693 + 1440240 1440313 chr1 249250621 + 142677559 142677632 922
-73
-
-chain 1679 chr21_random 1679693 + 1316387 1316422 chr13 115169878 + 41439086 41439121 11997585
-35
-
-chain 1437 chr21_random 1679693 + 1316422 1316454 chr3 198022430 + 119282439 119282471 8460363
-32
-
-chain 1151 chr21_random 1679693 + 1312216 1312274 chr13 115169878 + 46060123 46060181 10002138
-58
-
-chain 1007 chr21_random 1679693 + 1312144 1312195 chr17 81195210 + 33522637 33522688 8813060
-51
-
-chain 810 chr21_random 1679693 + 1306268 1306301 chr4 191154276 - 63157613 63157646 21715000
-33
-
-chain 762 chr21_random 1679693 + 1312422 1312477 chr7 159138663 + 153013126 153013181 10840208
-55
-
-chain 732 chr21_random 1679693 + 1312000 1312066 chr7 159138663 - 102920653 102920719 25474729
-66
-
-chain 561 chr21_random 1679693 + 18264 18311 chr21 48129895 + 44700101 44700148 25859698
-47
-
-chain 3320960322 chr22 49691432 + 14430000 49591432 chr22 51304566 + 16050000 51244566 22
-647850	150000	150000
-3661581	50000	100000
-15278435	0	18
-293	0	36
-1410	1	1
-46	1	1
-6626947	2	4
-1759	1	1
-43	1	1
-1367363	12000	10615
-7856	4	0
-809336	0	20
-6307	20	0
-6702	50000	2669
-4247727	10618	0
-1558	0	2719
-35231	0	131
-12647	4	0
-45594	85	9
-19562	0	506
-165501	5	7
-1103946	16700	60575
-644	0	2
-319796	1600	1155
-17927	19763	15469
-464566
-
-chain 6025887 chr22_h2_hap1 63661 + 0 63661 chr22 51304566 + 42594964 42658568 527
-748	1	0
-260	4	0
-675	1	0
-4844	0	2
-10592	8	0
-3276	29	0
-2384	10	0
-2795	0	2
-464	1	0
-3865	1	0
-1777	1	0
-1286	0	2
-875	1	0
-2336	1	0
-4337	1	0
-2724	0	3
-1087	6	0
-7154	0	1
-1045	2	0
-11070
-
-chain 15737781 chr22_random 257318 + 90752 257318 chrUn_gl000211 166566 + 0 166566 187
-166566
-
-chain 3641362 chr22_random 257318 + 7 38789 chr11 135006516 - 18284691 18323344 804
-2900	3	1
-66	1	1
-55	1	1
-3449	0	1
-1785	1	1
-37	1	1
-178	1	0
-852	0	1
-2329	2	0
-4939	1	0
-1557	1	1
-30	1	1
-1005	1	0
-622	16	0
-39	0	1
-42	0	22
-755	1	1
-30	1	1
-952	1	1
-26	1	1
-141	18	17
-1110	2	0
-1529	1	1
-22	1	1
-399	1	1
-33	1	1
-1369	20	30
-3959	0	4
-1144	1	0
-1032	27	25
-8	23	0
-56	24	0
-51	0	9
-11	1	57
-34	4	4
-7	134	0
-296	26	0
-25	1	1
-2452	0	5
-19	1	1
-231	1	0
-327	1	0
-962	1	1
-22	1	1
-1571
-
-chain 109494 chr22_random 257318 + 39517 40750 chr22 51304566 - 30977735 30979001 1172425
-166	5	5
-133	3	3
-48	1	1
-297	0	33
-234	1	1
-58	4	4
-283
-
-chain 19094 chr22_random 257318 + 39007 39213 chr22 51304566 - 29625864 29626070 11204980
-206
-
-chain 8587 chr22_random 257318 + 39415 39517 chr22 51304566 - 29782769 29782871 2027258
-50	48	48
-4
-
-chain 3763 chr22_random 257318 + 39465 39513 chr22 51304566 - 30978529 30978577 2726523
-48
-
-chain 17719073 chr2_random 185571 + 0 185498 chr2 243199373 + 242522204 242710000 158
-43034	21	22
-16724	1	0
-52199	0	669
-3059	0	4
-14500	1	0
-409	1	1
-22	1	1
-2039	1	0
-809	0	1
-2041	0	4
-2258	6	6
-4179	12	13
-1973	1	1
-21	1	1
-1855	1	1
-37	2	2
-4315	0	1
-1584	14	0
-281	0	2
-78	1	1
-1497	9	0
-237	2	1
-826	4	0
-21273	4	0
-6716	0	1650
-3449
-
-chain 18404389309 chr3 199501827 + 35000 199446827 chr3 198022430 + 60000 197962430 3
-13552792	1	0
-585083	1	0
-2092	74	72
-31067262	1	0
-90	0	1
-5628461	15	0
-788	0	1
-3676	2	0
-35	1	1
-4682	0	1
-1295	5	0
-437	42	53
-326	2	0
-3309	1	1
-40	1	1
-998	3	0
-3584	0	5
-930	7	5
-845	1	1
-28	1	2
-303	1	0
-509	5	0
-2291	6	6
-2789	0	1
-2541	9692	9690
-949	4	4
-35	1	1
-2874	1	0
-6717	1	0
-2823	0	1
-704	4	0
-5142	0	1
-2490	10	10
-162	7	7
-6308	15	0
-15177535	260003	152352
-2532	0	1
-24209179	4400000	3000000
-60453438	4	0
-40076811	20000	20999
-8195	1	1
-44	1	1
-1408	1	1
-33	1	1
-172	4	3
-25	1	1
-538	13	13
-173	1	1
-27	1	1
-636	1	1
-28	1	1
-470	3	3
-112	1	1
-375	1	1
-26	0	26
-106	0	78
-72	9	6
-12	3	29
-79	5	262
-56	1	1
-20	1	1
-815	43	43
-457	1	1
-49	0	18
-509	3	4
-23	1	1
-391	1	1
-44	1	1
-1270	4	0
-40	1	1
-264	27	31
-2416	2	0
-4377	13	13
-736	1	1
-47	1	1
-1416	1	1
-20	1	1
-1020	1	1
-25	1	1
-482	0	5
-716	0	1
-1697	1	1
-29	1	1
-1270261	27000	23108
-40930	0	1
-17455	1	1
-28	4	4
-45	491	0
-1669	58	0
-18	3	61
-54863	16	53
-7653	6	0
-3	99	0
-170	30	0
-25	0	30
-210	0	45
-359	0	915
-5980	256	640
-1363	1	1
-37	1	1
-7958	1	0
-372	1	0
-2442058
-
-chain 572461 chr3 199501827 + 50900356 50910048 chr3 198022430 - 147087402 147097092 2111
-52	1	6
-5886	1	0
-2586	6	0
-1160
-
-chain 14997 chr3 199501827 + 196923229 196923617 chr3 198022430 + 195437554 195437811 3659243
-77	131	0
-180
-
-chain 6146 chr3 199501827 + 196987930 196988205 chr3 198022430 + 195502296 195502751 2529960
-74	171	141
-23	2	212
-5
-
-chain 4201 chr3 199501827 + 196923126 196923228 chr3 198022430 + 195438036 195438138 6236935
-102
-
-chain 2082 chr3 199501827 + 196994845 196994975 chr3 198022430 + 195509346 195509572 2249717
-55	18	114
-57
-
-chain 20970321 chr3_random 749256 + 196010 556188 chr3 198022430 - 121623404 130096441 129
-131258	0	1
-41217	50000	8162858
-137703
-
-chain 13779918 chr3_random 749256 + 0 146010 chr3 198022430 - 77602115 77748060 219
-64144	1	0
-1191	0	1
-633	0	1
-4651	29	21
-5147	0	1
-947	14	0
-64	56	0
-55	0	2
-2421	0	15
-741	9	0
-371	6	4
-554	1	0
-5424	0	1
-4074	1	1
-44	1	1
-3065	0	1
-2772	1	1
-36	1	1
-15950	1	0
-2351	0	2
-5999	1	0
-17825	0	13
-74	1	1
-367	1	1
-47	1	1
-2084	2	0
-288	0	3
-744	1	0
-131	0	1
-465	1	1
-29	1	1
-659	10	0
-830	0	3
-262	3	0
-1428
-
-chain 13528802 chr3_random 749256 + 606188 749256 chr3 198022430 + 46352896 46495976 221
-8517	0	10
-20860	0	6
-16120	0	1
-4148	7	6
-745	7	6
-517	6	0
-907	5	5
-1382	4	0
-2730	0	1
-1143	36	36
-457	13	17
-1748	1	1
-48	1	1
-954	0	2
-767	1	4
-7353	0	8
-4950	0	12
-13338	0	1
-4685	1	1
-21	1	1
-1414	3	0
-4158	23	23
-5081	0	1
-14097	1	1
-49	1	1
-770	16	16
-424	1	1
-17	1	1
-244	1	1
-23	1	1
-1462	12	0
-2048	14	0
-4573	1	0
-3856	2	0
-754	0	8
-7304	1	0
-5243
-
-chain 17653370240 chr4 191273063 + 0 191263063 chr4 191154276 + 10000 191029082 4
-1413146	51000	71672
-5369	5	6
-65	1	1
-67	1	1
-425	1	1
-32	1	1
-175	1	1
-34	1	1
-5092	1	1
-46	1	1
-1396	15	15
-1446	0	1
-5135	1	0
-586	1	1
-38	1	1
-10	0	21
-1587	0	6
-205	0	3
-97	6	0
-177	0	9
-4059	1	1
-71	1	1
-1413	83	1
-51	7	7
-105	7	7
-67	41	0
-67	42	1
-55	41	0
-25	41	0
-3244	558	0
-64	93	0
-93	558	0
-907	0	2
-1101	55	0
-3473	15	15
-1167	3	0
-25	0	29
-135	29	0
-5074	1	1
-42	1	1
-1825	14	14
-1992	0	3
-23	1	1
-4171	6	6
-796	0	165
-196	0	99
-87	0	33
-190	6	8
-107	2	2
-21	0	2
-62	1	68
-32	14	15
-81	18	18
-55	0	100
-17	1	1
-222	2	169
-51	0	35
-3289	18	18
-298	0	1
-373	0	1
-2965	1	1
-28	0	23
-1704	0	38
-114	0	38
-53	7	44
-119	77	0
-269	1	1
-70	1	1
-2000	23	33
-2400	1	1
-94	1	1
-6002	18	18
-776	1	0
-369	16	16
-418	51	0
-53	1	27
-2181	1	4
-57	1	1
-1973	10	0
-4184	11	11
-1594	0	18
-2038	0	109
-4332	0	7
-49	0	4
-1465	3	1
-4156	2	0
-5455	3	2
-129	4	4
-9082	0	1
-786	20	20
-1506	0	1
-252	8	7
-17512	50	1
-56	1	0
-2474	69	52
-69	0	30
-60	16	0
-19	15	0
-40	1	1
-138	16	0
-74	5	51
-3386	0	1
-968	0	4
-1624	11	11
-1065	0	3
-2935	8	0
-2312	0	181
-2300	1	0
-1641	6	1
-1955	0	1
-68	1	1
-347	1	1
-40	1	1
-1553	6	0
-678	16	16
-92	0	33
-390	4	0
-1147	0	1
-1948	4	4
-4296	18	18
-955	1	1
-47	1	1
-1555	1	0
-2251535	81122	0
-145	1	1
-48	1	1
-718	1	0
-2789	1	1
-27	1	1
-1601	4	0
-1048	39	39
-820	0	2
-20	6	0
-28	2	0
-76	12	18
-28	1	0
-11	9	3
-1772	0	6
-22	1	1
-946	1	1
-24	1	1
-1245	1	0
-3231	1	1
-41	1	1
-1652	20	20
-11270	3	0
-2704	1	1
-41	1	1
-1812	5	6
-1477	0	11
-3790	4	0
-2187	1	1
-48	1	1
-1704	1	1
-73	1	1
-2265	1	1
-10	1	1
-553	1	1
-49	1	1
-67	1	1
-33	1	1
-3932	5	0
-18	1	0
-780	0	1
-1260	0	1
-4203	0	25
-863	14	14
-7114	1	1
-70	1	1
-169	0	1
-43	1	1
-145	1	1
-39	0	3
-8	1	1
-753	0	1
-2255	1	1
-21	1	1
-1605	1	1
-19	2	1
-392	1	1
-29	1	0
-3673	1	0
-145	14	14
-39	0	1
-1246	0	1
-2302	1	0
-1554	9	9
-4537	0	1
-1064	2	0
-2051	1	0
-1130	0	2
-164	1	0
-1972	0	1
-18	3	3
-2597	1	1
-46	3	3
-196	1	1
-17	1	1
-60	4	4
-187	4	4
-46	1	1
-692	1	0
-3920	3	3
-15	1	1
-486	14	14
-1709	8	0
-169	1	0
-597	1	1
-18	0	7
-3423937	0	1
-1295496	1	1
-26	1	1
-760	150000	591802
-22468468	1	1
-27	1	1
-2592	0	2
-33	1	1
-2065	3	0
-1050	11	11
-1046	3	9
-52	11	11
-3200	1	0
-906	1	0
-1644	6	0
-1180	0	1
-475	0	5
-2556	26	22
-351	0	1
-1716	71000	36200
-976586	59000	26528
-7701	0	4
-9296	0	1
-1862	1	0
-3316	7	3
-1131	0	1
-1795	1	0
-569	1	0
-2895	44	44
-458	3	0
-5371	1	0
-6774	0	2
-2504	0	2
-1247	1	1
-45	1	1
-2415	17	17
-8215	1	1
-18	1	1
-272	10	10
-420	1	1
-34	1	1
-7961	4	0
-1973	1	1
-45	1	0
-529	1	0
-603	0	1
-18	1	1
-621	4	12
-67	2	0
-18	34	0
-516	0	1
-1400	38	41
-3786	0	1
-228	3	0
-1026	1	1
-49	1	1
-3336	0	3
-951	1	1
-77	2	1
-441	1	2
-1833	9	9
-301	5	5
-2787	17	17
-1747	1	0
-3040	2	9
-81	10	10
-86	2	0
-7354949	20000	1606
-1681	16	30
-13957	0	8
-1947	0	3
-1255	1	1
-38	0	1
-1788	12	17
-1045	6	0
-1327	0	1
-5775	1	1
-18	1	1
-1933	1	0
-1716	13	13
-255	1	0
-124	0	3
-792	0	5
-1521	1	1
-64	1	1
-9005617	150000	150000
-171176	3000000	3000000
-7074452	53320	65431
-1937	0	1
-2845	2	0
-1387	0	1
-114	1	0
-2382	0	4
-68	6	6
-60	4	0
-20	0	1
-93	0	51
-9781584	351994	0
-1909446	184275	0
-3919546	13	13
-435	23	23
-838	0	1
-807	6	6
-74	1	1
-43	1	1
-652	30000	29839
-13847966	0	1
-14069801	2	0
-8504	0	1
-32266	8	0
-12729	0	2
-35327	12	14
-1503	1	0
-1334	1	0
-759	0	1
-7479	34	34
-2523	7	1
-9912	18	17
-2523	1	0
-1321	0	1
-3684	18	18
-5282	2	0
-5505	20	20
-9694	6	6
-22003	9	0
-578	0	1
-5166	2	0
-92208	2	5
-8	1	0
-5	0	2
-113	4	0
-845	6	7
-2247	3	1
-3770	0	1
-5719	0	2
-2511	0	1
-1557	0	1
-5812	0	1
-3607	0	1
-7405	1	0
-11075	0	1
-2794	1	0
-2340	1	0
-429	0	1
-522	2	0
-2397	5	0
-371	11	0
-1376	1	0
-2416	8	0
-210	1	1
-20	1	1
-5104	1	1
-20	1	1
-525	2	0
-836	0	1
-2094	1	0
-2213	3	0
-327	9	6
-2593	1	1
-57	1	1
-1618	0	1
-1400	4	0
-254	0	2
-93	10	0
-754	0	6
-193	0	1
-2378	0	1
-1753	3	0
-1903	0	4
-29	1	1
-1136	14	14
-2452	4	0
-3622	31	3
-456	14	14
-1076	7	8
-68	1	1
-20	1	1
-145	1	1
-68	1	0
-12	0	1
-10	0	1
-11	1	0
-35	1	0
-5	0	1
-11	1	2
-32	6	7
-35	1	0
-8722	1	0
-888	0	4
-456	3	0
-45	0	1
-151	13	13
-756	0	1
-203	8	7
-140	1	1
-20	1	1
-308	5	0
-1020	0	1
-1258	0	1
-160	0	2
-1411	1	1
-22	1	1
-1180	12	12
-4521	0	2
-1155	27	0
-4954	3	0
-1392	1	1
-47	1	1
-3854	2	1
-130	1	0
-2633	2	0
-3053	12	13
-2308	0	1
-1747	0	45
-732	2	0
-1336	9	11
-3898	0	6
-437	1	0
-981	0	1
-1326	0	1
-382	4	0
-1081	10	0
-81	1	1
-142	0	2
-5452	29	29
-495	1	1
-26	1	1
-485	0	1
-525	0	4
-36	0	6
-3945	347	0
-1034	1	1
-27	1	1
-60	2	0
-2581	3	0
-3880	0	4
-1792	0	1
-20	1	1
-356	1	0
-4244	5	5
-36	1	1
-2232	2	2
-42	1	1
-4462	0	2
-1611	1	0
-1290	0	2
-110	1	0
-1466	0	1
-357	3	0
-850	12	0
-13547766	0	1
-3724943	2	0
-46473408	0	1
-1696	1	1
-28	1	1
-1629	0	4
-666	4	0
-13464	30000	12874
-8520008	2	0
-1107	1	1
-15	1	1
-1892	0	4
-6798	0	2
-1793	1	1
-25	0	3
-422	389	0
-786	2	0
-545	0	2
-54	1	0
-143	1	1
-39	1	1
-89	1	1
-29	1	0
-171	1	1
-46	1	0
-192	1	1
-33	1	1
-2580	0	1
-107	1	1
-29	1	1
-218	1	0
-175	6	5
-1407	1	1
-52	1	1
-8851	1	0
-14427	4	0
-1737	22	0
-5806	1	0
-1115	1	1
-29	0	2
-3395	0	1
-3164	0	2
-522	1	0
-24	1	1
-658	4	0
-5724	9	9
-1209	0	1
-5380	1	0
-97	1	0
-854	4	0
-78	5	11
-2728	6	7
-3754	17	13
-1363	1	0
-1025	1	0
-1811	0	1
-7507	0	4
-1184	3	0
-763	1	0
-797	3	0
-293	2	0
-2488	0	1
-335	0	1
-9959	1	0
-3255	1	0
-1322	0	1
-8118	2	0
-2908	49	49
-369	2	0
-632	1	0
-63	0	5
-3008	0	1
-9582	0	1
-14742673	0	3013
-39686
-
-chain 945825 chr4 191273063 + 69381892 69391896 chr4 191154276 + 69230000 69240000 2911
-2225	1	0
-4917	1	0
-2807	2	0
-51
-
-chain 941684 chr4 191273063 + 69471941 69481941 chr4 191154276 + 69320000 69330000 3076
-3521	0	1
-4784	1	0
-1694
-
-chain 941274 chr4 191273063 + 69614595 69624595 chr4 191154276 + 69580000 69590000 3093
-10000
-
-chain 940419 chr4 191273063 + 69564606 69574607 chr4 191154276 + 69530000 69540000 3129
-3216	5	5
-134	0	1
-5676	2	0
-968
-
-chain 939146 chr4 191273063 + 69534617 69544617 chr4 191154276 + 69500000 69510000 3182
-387	6	6
-9607
-
-chain 939091 chr4 191273063 + 69481941 69491934 chr4 191154276 + 69330000 69340000 3184
-8138	0	4
-1546	0	3
-309
-
-chain 938726 chr4 191273063 + 69461942 69471941 chr4 191154276 + 69310000 69320000 3193
-130	0	1
-9869
-
-chain 936769 chr4 191273063 + 69604595 69614595 chr4 191154276 + 69570000 69580000 3285
-2900	25	25
-7075
-
-chain 936653 chr4 191273063 + 69421914 69431904 chr4 191154276 + 69270000 69280000 3293
-6388	14	14
-338	29	29
-266	0	1
-2309	1	3
-55	1	0
-83	0	8
-506
-
-chain 936357 chr4 191273063 + 69391896 69401898 chr4 191154276 + 69240000 69250000 3304
-2367	1	0
-2329	0	1
-795	23	23
-2819	2	0
-1666
-
-chain 935200 chr4 191273063 + 69441943 69451948 chr4 191154276 + 69290000 69300000 3343
-1203	4	0
-488	57	57
-7133	2	1
-310	1	0
-551	0	1
-256
-
-chain 934799 chr4 191273063 + 69544617 69554606 chr4 191154276 + 69510000 69520000 3366
-1296	39	39
-1112	1	0
-204	1	0
-2340	0	12
-1710	0	1
-3286
-
-chain 933839 chr4 191273063 + 69584607 69594595 chr4 191154276 + 69550000 69560000 3402
-417	3	0
-966	1	0
-2053	0	1
-1784	5	8
-284	0	12
-4475
-
-chain 932655 chr4 191273063 + 69594595 69604545 chr4 191154276 + 69560000 69569950 3440
-8695	26	26
-1229
-
-chain 930772 chr4 191273063 + 69451948 69461942 chr4 191154276 + 69300000 69310000 3507
-1068	0	1
-1437	25	27
-806	0	4
-5337	50	50
-300	1	0
-970
-
-chain 928519 chr4 191273063 + 69411919 69421914 chr4 191154276 + 69260000 69270000 3571
-62	32	32
-801	11	11
-3595	38	38
-941	54	59
-4461
-
-chain 928371 chr4 191273063 + 69511937 69521941 chr4 191154276 + 69360000 69370000 3579
-6433	60	60
-335	10	6
-239	10	10
-2917
-
-chain 925594 chr4 191273063 + 69554606 69564602 chr4 191154276 + 69520000 69529997 3671
-2109	0	1
-4421	81	81
-1599	22	22
-1764
-
-chain 922960 chr4 191273063 + 69501928 69511937 chr4 191154276 + 69350000 69360000 3756
-714	8	8
-423	18	18
-882	33	33
-952	22	22
-607	1	0
-196	64	64
-495	3	0
-2055	2	0
-548	3	0
-2983
-
-chain 915200 chr4 191273063 + 69491934 69501928 chr4 191154276 + 69340000 69350000 3933
-1036	10	10
-2821	5	0
-53	40	40
-209	3	0
-3718	11	0
-421	0	23
-332	11	11
-292	0	2
-432	23	23
-159	20	20
-115	20	20
-263
-
-chain 911203 chr4 191273063 + 69431904 69441943 chr4 191154276 + 69280000 69290000 4026
-364	6	5
-212	4	0
-2445	40	15
-377	30	30
-1126	60	60
-262	8	6
-3222	145	138
-1738
-
-chain 903419 chr4 191273063 + 69401898 69411919 chr4 191154276 + 69250000 69260000 4208
-1051	52	52
-1007	0	1
-319	27	26
-154	98	97
-145	40	40
-512	23	0
-355	5	5
-126	19	19
-128	49	49
-67	0	1
-3337	0	2
-1729	5	5
-773
-
-chain 895926 chr4 191273063 + 69574644 69584607 chr4 191154276 + 69540037 69550000 4357
-3368	220	220
-1524	84	84
-1558	19	19
-889	41	41
-1592	43	43
-625
-
-chain 866339 chr4 191273063 + 69524748 69534617 chr4 191154276 + 69490119 69500000 4930
-190	50	50
-59	111	111
-51	7	7
-78	59	59
-58	121	121
-57	39	39
-70	0	1
-1558	108	108
-737	24	24
-3582	0	1
-84	0	10
-2826
-
-chain 659008 chr4 191273063 + 71711854 71718864 chr4 191154276 + 71492990 71500000 7936
-7010
-
-chain 608986 chr4 191273063 + 69375441 69381892 chr4 191154276 + 69223549 69230000 8701
-135	1	0
-2166	0	1
-4149
-
-chain 248590 chr4 191273063 + 69521941 69527313 chr4 191154276 + 69370000 69375377 111030
-2807	190	190
-50	59	59
-111	136	136
-59	58	58
-121	57	57
-39	1628	1633
-57
-
-chain 214386 chr4 191273063 + 71534589 71536854 chr4 191154276 + 71500000 71502265 534073
-2265
-
-chain 96900 chr4 191273063 + 3963456 3964475 chr4 191154276 + 3912520 3913539 1319679
-1019
-
-chain 52181 chr4 191273063 + 69624595 69625143 chr4 191154276 + 69590000 69590548 2441389
-548
-
-chain 20814 chr4 191273063 + 1495708 1495926 chr4 191154276 + 1526075 1526293 9826122
-218
-
-chain 8858 chr4 191273063 + 1496845 1496937 chr4 191154276 + 1526189 1526281 25171661
-92
-
-chain 8858 chr4 191273063 + 1496752 1496844 chr4 191154276 + 1526189 1526281 25171662
-92
-
-chain 8858 chr4 191273063 + 1496566 1496658 chr4 191154276 + 1526189 1526281 25171663
-92
-
-chain 7802 chr4 191273063 + 1492030 1492276 chr4 191154276 + 1522531 1522736 2805154
-25	83	42
-23	15	15
-4	55	55
-41
-
-chain 7606 chr4 191273063 + 69578098 69578232 chr12 133851895 + 88986938 88987072 9526361
-134
-
-chain 7510 chr4 191273063 + 1496208 1496286 chr4 191154276 + 1526203 1526281 25171660
-78
-
-chain 7439 chr4 191273063 + 1527942 1528019 chr4 191154276 + 1557568 1557645 18158883
-77
-
-chain 7376 chr4 191273063 + 1496452 1496529 chr4 191154276 + 1526075 1526152 27495831
-77
-
-chain 6986 chr4 191273063 + 59479326 59479400 chr7 159138663 + 119297971 119298045 28268313
-74
-
-chain 6131 chr4 191273063 + 1496080 1496144 chr4 191154276 + 1526075 1526139 27495827
-64
-
-chain 5599 chr4 191273063 + 1495650 1495708 chr4 191154276 + 1526203 1526261 27226300
-58
-
-chain 5460 chr4 191273063 + 1496658 1496715 chr4 191154276 + 1526095 1526152 27495830
-57
-
-chain 4356 chr4 191273063 + 1498960 1499009 chr4 191154276 + 1528103 1528152 18458745
-49
-
-chain 4121 chr4 191273063 + 69578012 69578069 chr3 198022430 - 95182224 95182281 17792812
-57
-
-chain 3000 chr4 191273063 + 1495929 1496022 chr4 191154276 + 1526110 1526203 11256589
-93
-
-chain 2961 chr4 191273063 + 69443663 69443695 chr4 191154276 - 68628109 68628141 14494983
-32
-
-chain 2485 chr4 191273063 + 1503833 1503862 chr4 191154276 + 1532970 1532999 23156792
-29
-
-chain 2401 chr4 191273063 + 1492301 1492331 chr4 191154276 + 1522679 1522709 5335388
-30
-
-chain 2012 chr4 191273063 + 1496731 1496752 chr4 191154276 + 1526075 1526096 27495829
-21
-
-chain 1744 chr4 191273063 + 1597414 1597448 chr4 191154276 + 1627062 1627096 3575887
-34
-
-chain 1461 chr4 191273063 + 69579763 69579840 chr5 180915260 + 121968423 121968500 3935628
-77
-
-chain 1332 chr4 191273063 + 69545913 69545943 chr11 135006516 - 130984886 130984916 21069914
-30
-
-chain 909 chr4 191273063 + 69582306 69582346 chr3 198022430 - 10790236 10790276 7796945
-40
-
-chain 18169122 chr4_random 842648 + 440032 631501 chr4_gl000194_random 191469 + 0 191469 150
-191469
-
-chain 18001815 chr4_random 842648 + 0 189789 chr4_gl000193_random 189789 + 0 189789 151
-189789
-
-chain 15268007 chr4_random 842648 + 681501 842648 chrUn_gl000218 161147 + 0 161147 194
-161147
-
-chain 9245037 chr4_random 842648 + 239789 336038 chr4 191154276 + 8829368 8925617 353
-96249
-
-chain 137712 chr4_random 842648 + 388580 390032 chr4 191154276 + 9620000 9621452 935614
-1452
-
-chain 10386 chr4_random 842648 + 388312 388420 chr11 135006516 - 91778086 91778194 21974850
-108
-
-chain 3377 chr4_random 842648 + 388277 388312 chr11 135006516 - 84847900 84847935 23649965
-35
-
-chain 2456 chr4_random 842648 + 388184 388235 chrX 155270560 - 93144339 93144390 24160146
-51
-
-chain 16791974256 chr5 180857866 + 63000 180837866 chr5 180915260 + 10000 180905260 5
-17520657	24032	50000
-1688	3435	1
-37	1399	0
-27	2	1
-8	1	1
-3983	3434	0
-103	1	1
-32	1	1
-67	1	1
-35	1	1
-752	1669	0
-43	1	1
-1207	0	1
-46	0	1
-5	0	1
-19	1	1
-70	3434	0
-962	16	16
-1905	44	44
-85	41	41
-332	49	49
-1675	23	23
-1185	11	11
-124	35	35
-713	105	105
-408	4	4
-113	16	16
-1835	1	2
-26	7	8
-18	2730	25
-3103	1	0
-7858	718	10488
-307	1	636
-7461	0	1
-23772	51	0
-4031	0	1
-20571	0	1
-9135	0	2
-6885	2	3
-110	3	0
-816	2	3
-2295	0	34
-3936	28	28
-3536	0	2
-2917	0	1
-652	1	1
-37	1	1
-657	1	1
-22	1	1
-419	3	4
-3580	1	1
-29	1	1
-274	11	35
-835	3036	0
-1907	1	0
-10504	30	28
-784	0	6
-127	10	0
-668	1	1
-28	1	1
-2467	4	0
-179	0	2
-1650	1	1
-39	1	1
-2433	1	0
-720	1	1
-40	1	1
-772	1	1
-32	1	1
-353	1	1
-17	1	1
-1776	0	1
-6082	3	0
-2669	12	10
-2857	1	1
-35	1	1
-722	60	60
-200	1	1
-240	1	1
-4048	1	1
-49	1	1
-702	1	1
-33	1	1
-2927	1	2
-1487	17	0
-276	16	16
-1039	1	1
-35	1	1
-2068	1	1
-40	1	1
-828	1	1
-36	2	0
-317	8	0
-893	1	1
-33	1	0
-8143	0	4
-28632199	3000000	3000000
-12470071	0	1
-29760415	40000	50000
-5878002	23000	20845
-4521	1	0
-676	6	6
-5928	0	1
-372	1	1
-47	1	1
-6801	3	2
-639	0	1
-871	3	4
-11530	0	4
-22966	0	1
-15447	0	1
-53856	0	2
-15988	0	2
-906887	10	11
-40152817	5000	52715
-3521239	0	1
-1604	10	0
-12778810	4100	51715
-15152692	27	0
-1852096	1	0
-8710030
-
-chain 924655 chr5 180857866 + 17585088 17611949 chr5 180915260 - 163333152 163394435 1227
-14	409	52001
-494	3435	1
-24	1	1
-1487	10	10
-682	13	13
-132	3449	15
-306	1	1
-74	1	1
-967	3434	0
-1285	3434	0
-68	4569	1135
-2087	50	50
-435
-
-chain 315813 chr5 180857866 + 17584685 17618655 chr5 180915260 + 17581691 17599590 1580
-403	14	14
-237	1475	75
-628	25	25
-51	89	89
-304	24	24
-70	33	33
-37	698	698
-667	3506	72
-1354	96	96
-75	4	4
-752	1710	41
-450	382	382
-51	14129	7264
-237	12	12
-614	37	37
-134	16	16
-422	31	31
-796	4345	1642
-62
-
-chain 312488 chr5 180857866 + 17597387 17639380 chr5 180915260 + 17580657 17599710 1454
-373	70	70
-1245	2263	863
-1184	3434	0
-1733	3775	2106
-50	9111	2246
-1078	993	993
-1363	8015	1147
-44	85	85
-41	332	332
-49	6299	3596
-341	45	44
-70
-
-chain 265075 chr5 180857866 + 17745718 17748537 chr5 180915260 + 17713035 17715853 333767
-1906	1	0
-912
-
-chain 207388 chr5 180857866 + 17584033 17596937 chr5 180915260 + 17583073 17597745 2201
-51	557	557
-14	17	17
-13	654	654
-172	494	494
-219	23	23
-567	4975	6743
-176	6	6
-865	14	14
-96	1354	1354
-26	2261	2261
-350
-
-chain 193008 chr5 180857866 + 17583668 17629078 chr5 180915260 + 17580674 17599710 1465
-356	84	84
-533	3434	0
-698	5562	728
-51	4689	1255
-946	4787	1353
-543	8	8
-167	12743	7643
-324	5466	2032
-306	3553	850
-1045	45	44
-70
-
-chain 130263 chr5 180857866 + 17639380 17641654 chr5 180915260 + 17592112 17594386 19200
-936	23	23
-116	16	16
-1183
-
-chain 123401 chr5 180857866 + 17602522 17620625 chr5 180915260 + 17589594 17593961 2306
-159	16	16
-1763	19	19
-54	14448	712
-1644
-
-chain 53192 chr5 180857866 + 17626966 17629142 chr5 180915260 + 17590000 17592176 2614
-952	1045	1045
-45	70	70
-64
-
-chain 42492 chr5 180857866 + 17625757 17626966 chr5 180915260 - 163394507 163395716 9006
-1209
-
-chain 23743 chr5 180857866 + 17605548 17605956 chr5 180915260 + 17596054 17596462 38000
-290	9	9
-109
-
-chain 20601 chr5 180857866 + 17748538 17748754 chr5 180915260 + 17712817 17713033 9842237
-216
-
-chain 11635 chr5 180857866 + 17618762 17618981 chr5 180915260 + 17595532 17595751 149283
-219
-
-chain 9108 chr5 180857866 + 17618655 17618762 chr5 180915260 + 17583355 17583462 1340460
-107
-
-chain 7916 chr5 180857866 + 17587442 17604673 chr5 180915260 - 163387098 163397461 2244
-25	61	61
-79	398	398
-33	16608	9740
-27
-
-chain 7204 chr5 180857866 + 17604533 17604646 chr5 180915260 + 17599204 17599317 3499
-113
-
-chain 4292 chr5 180857866 + 17639265 17639310 chr5 180915260 + 17595431 17595476 67944
-45
-
-chain 2558 chr5 180857866 + 17604673 17604706 chr5 180915260 + 17591745 17591778 3790746
-33
-
-chain 2511 chr5 180857866 + 170275712 170275739 chr5 180915260 + 170343161 170343188 11152528
-27
-
-chain 2447 chr5 180857866 + 17635643 17636496 chr5 180915260 - 163394091 163394944 8841
-35	713	713
-105
-
-chain 2252 chr5 180857866 + 17601306 17601338 chr5 180915260 + 17595246 17595278 11344
-32
-
-chain 2027 chr5 180857866 + 17785693 17785748 chr18 78077248 - 45596607 45596662 524022
-55
-
-chain 1518 chr5 180857866 + 17629142 17629191 chr5 180915260 - 163394458 163394507 205933
-49
-
-chain 1109 chr5 180857866 + 17613421 17613452 chr5 180915260 - 163395907 163395938 8647
-31
-
-chain 143977943 chr5_h2_hap1 1794870 + 0 1794870 chr5 180915260 + 68505249 71134051 52
-5440	1	0
-1785	0	1
-12373	0	2
-7216	0	1
-714	2	0
-4360	0	1
-11179	1	0
-2027	1	0
-6969	0	2
-3779	1	0
-634	4	3
-1384	0	9
-378	0	2
-1153	3	0
-1246	0	6
-1427	0	2
-608	1	1
-23	1	1
-1981	44	44
-3998	1	1
-33	5	0
-148	1	1
-18	1	0
-331	2	0
-162	1	0
-333	0	1
-644	1	0
-2053	1	0
-1896	0	1
-2096	1	1
-32	1	1
-265	0	14
-1061	0	1
-7303	6	6
-1313	1	0
-3225	0	2
-65	1	1
-220	1	1
-1422	0	1
-248	1	1
-21	2	0
-641	0	1
-163	3	0
-522	1	0
-1685	0	1
-299	1	1
-16	1	0
-3259	1	0
-6492	9	9
-700	0	2
-379	1	0
-186	0	16
-21	0	27
-242	21	19
-156	0	3
-2040	1	0
-7852	0	2
-1267	0	4
-8016	0	1
-2057	85	0
-449	0	1
-2797	0	1
-3858	0	1
-2129	1	0
-234	1	1
-28	1	1
-2923	0	3
-4346	1	0
-2467	1	0
-11093	1	0
-3932	0	3
-2223	1	1
-22	0	1
-25	0	6
-1909	2	0
-1136	1	0
-658	2	0
-32	8	0
-9	2	0
-14	15	11
-22	14	0
-20	51	1
-34	2	0
-43	0	2
-38	127	19
-15	14	0
-41	0	5
-9200	1	0
-2655	1	0
-38	1	1
-237	1	1
-28	1	1
-1065	1	0
-2979	3	0
-13	1	1
-653	4	0
-1950	1	0
-2320	2	0
-817	3	0
-524	8	0
-417	1	0
-873	1	0
-352	1	0
-152	2	0
-651	1	0
-285	1	0
-1830	0	1
-1271	0	1
-957	0	1
-1506	2	0
-2454	4	0
-6	4	0
-300	1	1
-68	1	1
-1648	0	1
-10725	10	10
-1308	2	1
-48	1	1
-1242	15	0
-1869	1	0
-26	0	452
-1178	0	3
-43	0	4
-3567	0	1
-2289	0	1
-695	0	6
-721	13	14
-192	0	2
-1190	1	1
-36	1	1
-451	0	1
-4137	1	0
-809	23	0
-1624	0	4
-453	4	0
-983	0	1
-188	0	5
-489	0	1
-299	11	11
-1923	1	0
-168	0	1
-891	1	1
-54	0	1
-908	0	28
-1224	2	0
-175	0	1
-459	2	0
-119	133	153
-50	13	13
-4001	0	1
-4764	3	0
-90	1	1
-117	92	0
-325	0	27
-19	1	1
-92	1	67
-21	1	28
-15	1	28
-9013	0	1
-1376	0	1
-674	10	0
-87	0	1
-1317	43	35
-260	1	0
-1518	11	12
-232	0	1
-1093	0	1
-737	0	2
-176	10	10
-664	1	1
-33	1	1
-2816	3	0
-4679	0	2
-3212	0	2
-2383	14	16
-3049	0	1
-146	1	0
-721	1	1
-35	1	1
-2260	2	0
-1228	0	1
-682	1	0
-8927	1	0
-795	2	0
-5278	0	2
-5578	13	0
-3665	20	0
-1852	9	0
-4564	1	1
-20	4	0
-111	1	1
-1065	37	37
-2979	1	0
-820	0	1
-9147	0	1
-411	0	1
-745	2	0
-144	3	3
-27	2	0
-734	1	1
-38	1	1
-105	0	4
-554	1	0
-35	1	1
-226	2	0
-254	1	1
-39	1	1
-3302	0	2
-16	1	1
-1276	1	1
-57	1	1
-122	5	0
-178	0	1
-29	1	1
-89	1	1
-32	1	1
-1743	1	0
-294	1	1
-27	1	1
-1925	1	1
-48	1	1
-116	1	1
-20	1	1
-163	4	4
-821	4	3
-46	1	1
-247	1	1
-27	2	2
-613	1	1
-44	1	1
-181	9	7
-1220	1	1
-53	0	3
-596	1	0
-1052	12	12
-130	1	0
-1524	0	1
-1878	1	4
-76	0	1
-6	0	5
-895	0	1
-290	9	5
-783	1	1
-45	1	1
-1910	1	1
-48	1	1
-409	1	1
-30	1	1
-158	2	0
-69	6	0
-428	1	1
-136	1	1
-418	44	44
-767	35	27
-711	1	1
-28	1	1
-1137	1	0
-585	1	0
-433	13	0
-3034	1	0
-961	0	3
-950	1	1
-15	1	1
-948	0	5
-153	21	20
-181	38	38
-765	8	10
-207	13	15
-3092	4	0
-202	5	5
-1406	0	5
-205	1	1
-44	1	1
-2719	1	1
-36	1	1
-1050	0	9
-108	0	2
-1177	4	0
-115	1	1
-2051	15	0
-520	8	8
-1072	0	1
-595	2	0
-4576	73	73
-6176	1	0
-1299	1	1
-29	1	0
-496	0	4
-379	2024	0
-7	3663	0
-82	4	0
-79	6	1
-556	11	0
-598	9	9
-138	77	73
-1651	3	9
-3302	0	8
-429	1	0
-163	0	3
-60	3	0
-132	1	1
-23	1	0
-1660	1	16
-2124	0	1
-1601	9	0
-35	525	6
-38	1	1
-235	1	30
-497	1	1
-37	1	0
-79	0	1
-1239	1	1
-31	1	1
-135	1	0
-5	2	0
-669	0	1
-1158	1595	0
-21	3	0
-5	126998	500121
-730	31	27
-278	0	2
-352	0	12
-363	13	21
-366	1	0
-378	3	0
-61	1	0
-105	17	68
-1480	32	32
-640	1	1
-52	1	1
-482	1	0
-638	1	1
-20	1	0
-21	1	1
-326	1	1
-37	1	1
-995	0	7
-1685	0	1
-1607	9	8
-633	1	1
-37	1	1
-697	6	6
-1363	8	8
-234	1	1
-44	1	1
-3022	5	6
-96	12	11
-674	4	0
-768	0	1
-169	3	0
-2083	0	1
-1098	20	20
-5586	1	0
-174	28	13
-366	2	0
-202	1	1
-69	1	1
-682	5	5
-3457	1	0
-232	1	0
-305	10	0
-1770	40	40
-349	38	38
-401	0	1
-441	7	3
-547	11	10
-210	4	0
-779	4	0
-193	4	0
-576	0	4
-514	48	48
-789	23	16
-2496	25	25
-874	25	11
-2776	19	19
-2824	4	0
-440	0	2
-876	14	14
-1198	39	39
-521	6	0
-126	40	40
-315	29	29
-616	94	99
-285	35	35
-175	12	12
-320	17	1
-3339	0	1
-260	49	49
-109	11	11
-586	0	1
-133	19	13
-8202	0	1
-307	0	1
-1366	1	0
-1073	9	12
-1385	0	1
-321	106	108
-1101	28	28
-483	42	42
-1752	58	58
-166	37	36
-748	16	16
-52	1	0
-1679	0	2
-455	9	17
-484	1	10
-74	33	33
-155	0	1
-62	0	8
-424	23	23
-491	8	9
-450	0	2
-63	1	0
-410	5	0
-1131	165	170
-254	39	39
-1162	0	272664
-1919	1	1
-82	1	1
-740	4	4
-261	1	1
-83	1	1
-52	1	1
-49	1	1
-231	6	6
-244	1	1
-21	1	1
-52	44	44
-114	20	20
-87	32	32
-149	0	6
-202	50	50
-115	44	44
-114	65	65
-50	111	111
-61	52	52
-101	42	45
-250	15	15
-208	1	0
-2259	3	0
-239	64	66
-168	10	10
-2393	1	1
-38	1	1
-674	1	1
-29	1	1
-469	22	25
-827	1	0
-1679	0	1
-463	9	13
-232	1	0
-248	1	5
-325	0	7
-1389	0	4
-63	1	0
-410	6	0
-685	3	0
-35	1	1
-407	166	168
-253	39	39
-71	0	4
-1288	35	35
-1697	32	32
-243	22	22
-395	51	51
-259	49	49
-108	6	6
-54	168	168
-464	45	45
-81	20	20
-84	21	21
-240	25	25
-584	0	810
-126	4	4
-42	6	6
-101	0	3
-41	1	1
-473	1	0
-373	1	1
-41	1	1
-614	1	1
-41	1	18042
-857	50	50
-279	2	0
-246	67	69
-160	10	10
-199	0	1
-154	1	0
-276	28	28
-124	29	28
-105	7	7
-355	1	1
-45	1	1
-299	1	1
-25	1	1
-283	30	35
-594	2	0
-1401	1	1
-46	1	1
-123	4	0
-830	1	0
-100	1	1
-61	1	1
-737	2	7
-285	1	1
-58	1	1
-143	18	0
-19	1	1
-575	1	1
-91	1	1
-318	2	0
-4090	4	0
-702	0	1
-2007	0	2
-901	0	1
-79	9	9
-31	3	3
-1203	1	0
-16	1	1
-574	1	1
-28	1	1
-346	6	0
-25	1	3
-22	2	0
-34	4	0
-7	1	0
-20	18	22
-511	0	5
-5088	0	1
-1065	0	4
-51	2	0
-2714	25	25
-81	8	8
-56	788	18
-22	1	1
-4702	0	1
-536	6	6
-3900	1	0
-1063	0	8
-4095	1	0
-1841	1	3
-1015	0	1
-2808	1	1
-17	1	1
-340	1	1
-39	1	1
-1548	1	1
-73	1	1
-291	1	0
-236	72	43
-104	0	1
-1843	4	0
-80	15	15
-1140	29	1
-45	1	1
-1245	3	0
-194	1	0
-816	11	1
-25	1	11
-47	1	1
-508	0	1
-255	1	1
-24	1	0
-319	13	13
-1846	397	398
-803	0	37
-509	0	12
-130	0	4
-609	0	3
-6495	1251	1253
-1091	11	11
-384	2	0
-1657	31	30
-109	31	31
-2815	63	63
-85	0	13
-589	48	48
-194	25	25
-1068	16	16
-209	2	0
-215	47	47
-1775	127	77
-533	188	0
-1164	1	0
-1863	1	1
-29	1	1
-1993	1	1
-19	1	1
-782	2	0
-3224	2	0
-22	1	11
-473	332	0
-604	1	1
-28	1	1
-223	1	1
-28	1	1
-2870	0	1
-38	1	1
-313	1	0
-768	0	1
-1039	9	9
-886	0	4
-243	0	1
-172	17	17
-2721	1	1
-71	0	1
-607	105	117
-54	46	44
-2057	1	1
-32	1	1
-452	1	1
-49	1	1
-169	322	6
-26	1	0
-567	3	0
-2324	1	0
-825	4	0
-1251	4	4
-2651	0	4
-703	14	19
-10731	13	0
-741	2	0
-1659	0	12
-7683	0	6
-838	1	0
-2905	12	326
-1714	1	0
-1172	90	100
-619	2	0
-263	0	59
-730	1	0
-56	4	0
-1746	17	17
-377	1	1
-27	4	0
-836	1	1
-67	1	1
-1022	0	1
-1096	1	1
-40	0	1
-8	1	1
-1864	1	0
-56	5	1
-6	0	10
-114	1	1
-34	1	1
-631	19	19
-139	13	13
-1330	1	11
-22	2	0
-2846	1	0
-358	0	2
-798	11	11
-3004	1	1
-30	1	1
-2032	1	16
-752	16	0
-40	0	6
-3211	0	1
-965	0	14
-2978	1	1
-29	1	1
-138	0	2
-1646	2	0
-375	1	1
-31	1	1
-6235	0	2
-2598	0	3
-592	0	4
-135	0	12
-3892	1	0
-840	0	12
-5528	9	5
-5400	0	1
-181	0	1
-836	0	3
-3087	1	1
-46	1	1
-2796	11	9
-6282	1	1
-25	1	1
-2009	1	1
-56	0	2
-209	15	15
-2433	1	1
-50	1	1
-366	1	0
-3233	0	1
-5144	0	2
-811	53	22
-23	1	0
-6	1	3
-43	0	2
-13	2	0
-5	0	14
-634	8	8
-1663	10	12
-433	1	1
-43	1	1
-397	2	0
-638	1	1
-42	1	1
-285	1	1
-28	1	1
-516	1288	2
-424	4	0
-660	1	1
-49	1	1
-816	0	12
-1015	1	1
-47	1	1
-988	0	3
-1000	14	32
-330	1	1
-38	1	1
-124	7	2
-43	1	1
-693	1	1
-61	1	1
-94	0	1
-963	1	1
-46	1	1
-1393	0	2
-139	2	0
-113	1	1
-20	1	1
-323	6	0
-34	0	1
-978	1	1
-38	1	1
-105	1	1
-18	1	2
-43	1	1
-381	0	1
-811	15	8
-2537	0	2436
-2642	1	1
-42	4	0
-92	10	10
-1363	1	1
-37	1	1
-252	5	0
-165	1	1
-329	1	1
-77	1	1
-705	0	6
-258	6	6
-155	0	1
-57	2	0
-1380	5	0
-348	2	0
-489	9	5
-448	1	0
-1681	0	1
-835	29	25
-1359	36	36
-223	0	1
-399	15	15
-466	4	4
-75	10559	200741
-1150	1	0
-682	12	15
-802	53	53
-535	1	0
-65	62	63
-497	30	1
-1458	1	0
-683	0	1
-1449	1	0
-977	15	0
-1636	0	4
-216	3	0
-587	0	10
-4302	1	1
-28	1	1
-733	0	4
-138	9	9
-595	0	11
-249	1	1
-65	1	1
-242	1	6
-74	0	4
-87	6	5694
-363	4	0
-513	0	1
-29	1	1
-1297	0	1
-415	1	3
-1947	0	2
-978	0	1
-3121	1	1
-17	1	1
-872	1	1
-31	1	1
-602	8	8
-238	1	1
-36	1	1
-930	1	1
-36	1	1
-1073	22	0
-494	0	1
-66	1	5
-60	1	1
-15	1	1
-452	1	0
-1587	0	7
-1465	1	1
-27	1	1
-76	1	1
-44	1	1
-143	16	14
-323	23	23
-685	1	1
-15	1	1
-136	6	0
-400	0	2
-109	3	0
-50	1	1
-18	1	1
-985	1	1
-38	1	1
-1034	12	12
-247	1	1
-91	2	1
-1383	1	1
-44	1	1
-164	15	16
-292	1	1
-47	1	1
-73	1	1
-43	1	1
-203	1	0
-420	1	1
-37	1	1
-449	0	2
-25	0	4
-415	4	6
-155	1	1
-26	1	1
-199	1	1
-41	0	32
-20	1	1
-68	1	1
-28	1	1
-2097	13	15
-207	8	10
-984	21	20
-134	5	0
-967	10	10
-956	3	0
-4424	5	6
-595	0	1
-1140	1	1
-28	1	1
-733	7	16
-1218	149	149
-429	0	4
-59	0	2
-2568	1	1
-45	1	1
-784	5	8
-289	1	0
-877	5	0
-34	1	0
-68	4	1
-735	1	1
-35	1	1
-1094	4	4
-1519	5	6
-138	12	12
-1044	0	1
-91	80	80
-369	1	1
-53	2	0
-63	1	1
-1220	7	9
-181	1	1
-44	1	1
-134	0	3
-476	2	2
-27	1	1
-205	1	1
-88	2	2
-822	4	4
-163	22	22
-116	1	1
-48	1	1
-3849	1	1
-21	1	1
-120	1	1
-32	1	1
-89	1	1
-29	1	0
-178	3	6
-1452	19	17
-5455	1	0
-10333	1	0
-784	0	1
-55	8	0
-468	0	1
-539	12	0
-98	1	1
-24	1	1
-77	1	1
-81	1	1
-4604	17	19
-7803	7	7
-807	0	1
-2260	7	5
-980	0	1
-2105	0	1
-4083	0	1
-836	0	2
-5612	1	0
-519	0	1
-1334	0	1
-2401	0	9
-1823	1	0
-159	0	2
-484	2	0
-14815	1	1
-36	1	1
-2512	4	0
-58	3	0
-3277	1	0
-559	0	1
-4024	1	0
-4383	22	13
-4131	1	1
-35	1	1
-290	1	1
-29	3	0
-533	1	0
-305	0	1
-2608	0	1
-443	3	1
-2322	0	20
-514	1	1
-46	1	1
-791	19	30
-3206	3	0
-6272	0	2
-1789	8	0
-291	39	39
-521	6	0
-126	40	40
-315	29	29
-616	94	99
-206	114	109
-506	0	14
-2370	0	2
-4709	1	1
-36	1	1
-5588	0	11
-299	1	0
-1366	1	0
-1644	1	1
-28	1	0
-4859	16	21
-1992	0	10
-505	0	1
-448	8	12
-721	40973	60417
-3484	1	1
-40	1	1
-2152	0	2
-5298	39	40
-141	25	25
-427	0	11
-1543	1	0
-3707	0	1
-1056	292	8656
-1768	2	0
-717	1	0
-14041	0	1
-4167	0	2
-7403	5	0
-7673	0	1
-3630	67	67
-74	129	129
-226	1	0
-1720	138	136
-1185	1	0
-878	46874	0
-862	1	1
-31	1	1
-9409	1	1
-37	1	1
-2231	0	2
-1682	0	1
-13767	0	1
-9473	0	1
-7168	2	0
-12384	1	0
-1188	0	4
-2044	1	0
-3076	1	0
-796	0	1
-5477	0	2
-5780	1	0
-6338	1	0
-2680	0	4
-2033	0	1
-9452	0	12
-402983
-
-chain 13752336 chr5_h2_hap1 1794870 + 324513 1282806 chr5 180915260 - 110525721 111977366 61
-37	39926	39909
-44	767	767
-34	9178	9179
-38	20004	20004
-27	1	1
-44	8383	8384
-1071	3	3
-511	0	1
-439	7	7
-3663	1483	1482
-77	11199	11214
-525	4132	4132
-704	1	0
-729	3	0
-158	29	29
-653	0	3
-154	0	2
-7041	8	0
-2068	0	7
-166	1	0
-812	6	7
-25	1	1
-1423	0	8
-438	0	1
-4783	0	1
-31	1	1
-1269	1	0
-926	3	0
-2542	2	0
-112	1	1
-2183	1	1
-59	1	1
-1605	2	2
-4515	0	1
-4368	1	0
-382	0	34
-60	1	1
-86	0	1
-552	6	6
-892	1	1
-33	1	1
-6705	0	1
-934	0	2
-8985	2	1
-445	6	0
-6283	0	1
-456	0	1
-1101	0	5
-696	0	1
-2973	6	0
-158	0	3
-449	0	3
-657	12	12
-151	0	1
-406	1	1
-55	1	1
-163	1	1
-72	1	1
-1955	1	0
-713	0	1
-3050	1	1
-35	1	1
-3127	1	0
-233	1	0
-1343	17	7
-1250	3	0
-322	1	0
-2081	0	1
-2413	5	0
-818	0	1
-18	1	1
-268	0	1
-271	1	1
-35	1	0
-586	2	0
-1192	0	1
-494	2	0
-4657	1	1
-30	5	0
-2172	0	334
-1981	5	0
-33	321	0
-2633	2	0
-142	1	0
-1597	7	0
-248	1	0
-317	1	1
-21	1	1
-441	0	1
-600	6	4
-35	1	1
-1593	2	6
-9303	1	0
-2781	0	2
-6052	0	4
-771	1	0
-1500	14	0
-1544	730	730
-31	3419	3419
-30	30394	30395
-40	349	349
-38	3691	3690
-48	3308	3306
-25	874	880
-25	8151	8151
-39	653	653
-40	315	315
-29	616	616
-94	285	285
-35	4123	4120
-49	13570	13573
-58	30899	10440
-165	1652	1655
-35	1697	1697
-32	660	660
-51	259	259
-49	168	168
-168	464	464
-45	446	446
-25	3886	3879
-67	800	800
-28	124	124
-29	1123	1123
-30	24987	23723
-2	1	1
-21	146	146
-2	1	1
-785	22543	22552
-67	3192	3170
-28	5357	5348
-397	8546	8565
-1251	3145	3145
-31	110	110
-29	2816	2816
-63	674	688
-48	195	195
-23	1511	1509
-47	1810	1786
-37	14	0
-41	533	533
-182	1	16
-5	20555	20281
-49	1	21
-55	54	52
-46	2763	2762
-37	5	2
-280	124045	123118
-495	0	1
-703	3	0
-87	27183	48462
-36	1182	1182
-389	16	16
-257	1	0
-118	3	3
-547	1	1
-25	1	1
-126	0	2
-3598	810	0
-148	0	6
-483	1	1
-34	1	1
-266	6	6
-350	2	2
-30	1	1
-297	4	4
-666	1	1
-89	1	1
-52	15	15
-2220	2647	2651
-53	53651	53634
-149	9850	9843
-39	1	1
-39	116984	481498
-39	653	653
-40	315	315
-29	616	616
-94	206	206
-114	65101	68610
-358	27	27
-588	11156	11155
-25	56460	137674
-105	1	0
-2251	13	13
-319	25	26
-826	25	25
-370	7	7
-439	0	1
-192	7	1
-250	0	13
-1302	1	8
-866	91	94
-91	14	14
-501	1	0
-1238	1	0
-113	475	60006
-212	8	10
-907	0	4
-350	1	0
-486	9	17
-448	0	2
-515	0	10
-788	13213	230
-199	16	16
-645	0	2
-112	37	25
-634
-
-chain 283844 chr5_h2_hap1 1794870 + 1261701 1280951 chr5 180915260 + 69698102 69815360 1487
-91	6326	96869
-318	0	10
-505	0	1
-204	64	64
-440	1	0
-235	0	1
-1269	0	1
-945	1	0
-670	242	551
-75	3	0
-1233	50	50
-199	4900	12045
-409	59	59
-310	37	40
-664
-
-chain 206667 chr5_h2_hap1 1794870 + 1287039 1295912 chr17 81195210 + 76583705 76597262 568754
-558	4	0
-365	2	2
-40	0	1
-253	1	1
-31	1	1
-522	6316	11003
-780
-
-chain 184822 chr5_h2_hap1 1794870 + 1284679 1286632 chr17 81195210 - 4506444 4508397 671275
-1953
-
-chain 128717 chr5_h2_hap1 1794870 + 1283006 1284382 chr5 180915260 + 70517839 70519212 1000883
-791	20	17
-565
-
-chain 128621 chr5_h2_hap1 1794870 + 1291852 1293214 chr17 81195210 + 76573863 76575225 1001637
-1362
-
-chain 122147 chr5_h2_hap1 1794870 + 627399 939358 chr5 180915260 - 110828619 111993762 93
-42	1752	1753
-58	6978	6974
-165	255	254
-37	4915	4915
-44	4384	4378
-64	19819	875253
-39	1	1
-9	264030	261784
-58	0	6
-56	6	6
-105	3	3
-98	1	1
-483	7968	7968
-62	497	497
-30
-
-chain 118081 chr5_h2_hap1 1794870 + 1290357 1291631 chr4 191154276 - 20442500 20443774 1089300
-230	18	18
-1026
-
-chain 112391 chr5_h2_hap1 1794870 + 1288972 1290160 chr17 81195210 - 4580707 4581894 1143267
-1134	1	0
-53
-
-chain 92982 chr5_h2_hap1 1794870 + 1293593 1294614 chr4 191154276 + 170627590 170628611 1373141
-72	1	1
-129	1	1
-818
-
-chain 75482 chr5_h2_hap1 1794870 + 1274745 1276419 chr5 180915260 - 111410923 111412615 820
-271	0	10
-350	0	6
-499	9	9
-444	0	2
-101
-
-chain 68300 chr5_h2_hap1 1794870 + 1276804 1279228 chr5 180915260 - 110416917 110419341 216
-2424
-
-chain 29652 chr5_h2_hap1 1794870 + 524804 525112 chr3 198022430 + 8519605 8519913 4781887
-308
-
-chain 29428 chr5_h2_hap1 1794870 + 756919 757240 chr2 243199373 + 16251117 16251431 4913030
-177	7	0
-137
-
-chain 27649 chr5_h2_hap1 1794870 + 641866 1186473 chr5 180915260 + 68929706 69564604 89
-32	351	351
-50	115	115
-44	114	114
-65	50	50
-111	61	61
-52	101	101
-42	14056	14883
-33	529303	618767
-27
-
-chain 20581 chr5_h2_hap1 1794870 + 1249367 1254462 chr5 180915260 - 111122604 111127700 1762
-2153	24	24
-85	8	8
-1086	0	1
-1739
-
-chain 5516 chr5_h2_hap1 1794870 + 253548 253608 chr5 180915260 + 68759177 68759237 7759123
-60
-
-chain 5218 chr5_h2_hap1 1794870 + 1244675 1244945 chr5 180915260 - 159621198 159621468 493
-30	1	1
-36	122	122
-81
-
-chain 4702 chr5_h2_hap1 1794870 + 1279881 1280287 chr5 180915260 + 70518261 70518663 9283
-59	311	307
-36
-
-chain 4436 chr5_h2_hap1 1794870 + 1274323 1274373 chr5 180915260 + 70526833 70526883 9273
-50
-
-chain 4277 chr5_h2_hap1 1794870 + 625682 625728 chr5 180915260 - 111701952 111701998 814
-46
-
-chain 3978 chr5_h2_hap1 1794870 + 1276419 1276466 chr5 180915260 + 70082181 70082228 137301
-47
-
-chain 3805 chr5_h2_hap1 1794870 + 1244816 1244863 chr5 180915260 + 69926901 69926948 475
-47
-
-chain 2924 chr5_h2_hap1 1794870 + 253608 253640 chr5 180915260 + 68759034 68759066 4803455
-32
-
-chain 943 chr5_h2_hap1 1794870 + 1282135 1282172 chr5 180915260 - 111121871 111121900 54522
-21	8	0
-8
-
-chain 692 chr5_h2_hap1 1794870 + 1276691 1276804 chr5 180915260 + 21496928 21497041 821
-113
-
-chain 13519395 chr5_random 143687 + 0 143687 chr5 180915260 + 180261930 180405660 222
-5859	0	4
-460	1	1
-23	0	2
-42	1	3
-42	1	1
-1633	55	55
-2271	0	10
-1279	2	0
-761	2	0
-25	1	1
-150	13	13
-4989	0	1
-1174	1	1
-23	1	1
-495	16	16
-2709	1	4
-349	0	4
-466	0	1
-292	2	0
-184	0	5
-621	13	13
-1788	2	0
-21	1	1
-731	12	12
-149	0	3
-5100	1	0
-1059	0	3
-1724	2	0
-4111	1	0
-890	4	4
-47	1	1
-1137	0	1
-147	17	19
-72	1	1
-22	1	1
-365	1	1
-19	2	2
-1360	0	1
-1476	1	1
-43	1	1
-1141	1	0
-2615	18	18
-4308	0	4
-135	0	2
-1484	8	6
-7384	0	11
-284	1	1
-69	1	1
-232	6	0
-1064	0	2
-4530	0	1
-4542	6	6
-10543	1	0
-4051	2	0
-11340	5	6
-4936	1	0
-12029	3	3
-43	1	1
-2955	27	27
-775	0	10
-822	1	0
-2057	1	0
-733	0	1
-4016	0	1
-4514	1	1
-49	1	1
-4484	1	0
-784	1	1
-25	1	1
-5707	2	0
-1274	1	0
-289	1	1
-34	1	0
-80
-
-chain 15799018021 chr6 170899992 + 5000 170896992 chr6 171115067 + 60000 171055067 6
-1297281	0	1
-7806978	162987	0
-4013144	0	9
-261	15	13
-18786172	17	17
-439	16	16
-59	4	5
-32202	17	17
-439	16	16
-59	5	4
-15403	0	1
-13914166	0	4
-115	1	1
-17	1	1
-415	0	12
-105	3	6
-12160281	50000	50000
-642507	3050000	3100000
-248423	50000	50000
-2918791	0	1238
-9427508	4	4
-162	12	12
-2193	22	22
-293	1	1
-30	1	1
-845	0	1
-45	1	1
-9769	0	2
-6058	1	1
-24	1	1
-2223	1	1
-24	1	1
-182	12	12
-284	1	1
-20	1	1
-970	1	1
-64	36	7
-575	43	43
-389	1	1
-27	1	1
-3279	1	1
-44	1	0
-3012	0	1
-545	17	17
-2562	1	0
-251	1	0
-943	0	8
-29	1	1
-566	0	6
-1483	0	2
-1960	0	1
-4564	1	1
-25	1	1
-832	1	0
-801	8	8
-1131	1	1
-58	1	5
-6177	1	0
-3712	0	1
-2185	1	1
-35	1	1
-710	2	2
-78	1	1
-2201	1	1
-30	1	1
-283	1	1
-30	1	1
-448	0	1
-75012	0	8
-2508457	0	1
-4641788	5	5
-37	1	1
-8503609	2	0
-5363169	200000	150000
-6040303	1	1
-36	0	1
-2020	1	1
-46	1	1
-1559	1	1
-72	1	1
-1098	1	1
-29	1	1
-264	7	7
-580	1	0
-30	1	1
-536	1	1
-41	1	1
-5663	0	1
-423	0	2
-372	1	1
-18	1	1
-9612	0	1
-1414	0	1
-176	2	0
-2742	0	1
-1968	1	0
-754	0	1
-4237	1	0
-2388	1	1
-31	0	1
-3385	1	0
-2004	0	8
-3395	3	0
-32	1	1
-4109	1	0
-1055	0	20
-1611	0	1
-17198424	26	17
-7835	1	0
-11119	1	1
-5197	0	11
-4791	1486	66479
-6787989	1	0
-149	0	4
-947	0	4
-244	1	0
-28418215	1	1
-21	0	1
-3116903	50000	171704
-1939305	1	1
-19	2	0
-8192274	4	4
-122	2	0
-1127	0	1
-1104	1	102
-18	0	29
-40	0	3
-22	1	4
-50	0	26
-56	18125	195105
-950946	1	157
-51	1	1
-104	0	255
-610	0	408
-104	0	105
-1285158	150028	50028
-725067
-
-chain 8374990 chr6 170899992 + 9109557 9199728 chr6 171115067 + 9164559 9254607 394
-3887	2	0
-1509	45	45
-888	7	8
-372	0	1
-4746	3	0
-1114	31	31
-140	35	35
-2111	13	13
-445	248	137
-1437	38	38
-55	25	25
-739	19	19
-2479	70	58
-1297	0	4
-7065	24	24
-542	31	31
-531	22	22
-824	0	1
-2286	40	39
-1209	48	48
-1435	6	0
-4096	4	0
-495	41	42
-6884	0	1
-3177	0	1
-2843	0	1
-904	5	5
-830	18	18
-1997	0	1
-942	4	0
-122	33	33
-1012	0	10
-3751	0	1
-5959	49	49
-4503	0	20
-7514	8	8
-4012	15	15
-673	16	0
-83	4	0
-424	3	0
-3932
-
-chain 892181 chr6 170899992 + 9258019 9267980 chr6 171115067 + 9150000 9160000 4430
-970	53	55
-802	16	17
-389	27	27
-73	5	4
-118	9	5
-615	0	2
-69	17	15
-578	0	1
-114	22	22
-888	130	130
-252	3	9
-564	0	1
-211	5	0
-90	4	0
-1846	21	21
-1832	0	42
-238
-
-chain 763150 chr6 170899992 + 9249728 9258019 chr6 171115067 + 9141295 9150000 6494
-566	0	1
-140	8	0
-205	47	47
-145	18	12
-46	1	0
-3841	0	56
-172	0	372
-444	18	18
-2447	20	20
-173
-
-chain 369937 chr6 170899992 + 9267980 9272102 chr6 171115067 + 9160000 9164126 144773
-1134	49	45
-1420	38	38
-203	0	4
-144	0	3
-115	54	55
-965
-
-chain 4624 chr6 170899992 + 9129966 9130015 chr6 171115067 + 165872977 165873026 28640892
-49
-
-chain 1407 chr6 170899992 + 74606704 74606747 chrX 155270560 + 149588561 149588604 701656
-6	11	11
-26
-
-chain 414456960 chr6_cox_hap1 4731698 + 0 4731698 chr6 171115067 + 28541283 33351542 27
-3409	1	0
-3526	0	1
-2940	0	4
-981	0	1
-4053	0	2
-1433	0	1
-3153	2	0
-369	0	1
-1090	0	1
-884	1	4
-363	1	0
-1969	0	1
-994	5	0
-58	1	1
-131	1	0
-4080	1	0
-680	0	1
-978	0	1
-1062	1	0
-2669	19	19
-7247	1	2
-1704	0	4
-1513	0	2
-49	2	0
-2160	0	5
-672	1	1
-38	1	1
-1384	1	0
-1685	1	1
-30	1	1
-2421	1	1
-42	1	1
-830	1	1
-41	1	1
-1630	0	1
-7458	1	0
-691	0	1
-525	0	1
-79	1	1
-29	1	1
-2055	1	1
-16	0	24
-1867	5	7
-786	0	2
-280	0	1
-227	2	0
-6678	1	0
-4401	1	0
-210	1	0
-3193	2	0
-3619	0	1
-2414	0	2
-5387	0	3
-2927	0	1
-3304	0	1
-440	0	5
-415	0	9
-3597	1	1
-48	1	1
-3412	1	1
-46	1	1
-3604	4	4
-1063	1	1
-36	1	1
-3511	6	6
-2797	32	41
-393	0	1
-477	1	1
-37	1	1
-2459	2	0
-517	0	12
-318	0	1
-1010	7	6
-2103	0	1
-5171	0	8
-1483	1	0
-3813	888	0
-4675	0	2
-5620	1	0
-2017	1	0
-3363	0	5
-1197	0	3
-3208	1	0
-1928	1	0
-174	6	0
-780	1	3
-443	14	0
-3079	0	5
-1993	0	3
-1089	1	1
-58	1	1
-80	0	8
-256	2	0
-2473	37	43
-752	0	2
-33	0	2
-825	0	1
-787	1	1
-37	1	1
-1168	16	0
-377	5	1
-27	1	1
-2161	2	0
-636	25	25
-1663	1	0
-1757	6	6
-205	4	0
-203	7	7
-107	1	1
-28	1	1
-100	4	4
-258	5	0
-659	1	0
-3805	5	8
-1486	4	4
-213	39	43
-4429	0	2
-1199	13	13
-5803	12	0
-2987	0	1
-813	0	17
-920	2	0
-3820	1	3
-130	21	9
-1913	0	14
-1800	0	1
-1255	2	0
-1466	4	0
-747	0	1
-124	2	0
-2108	1	0
-169	0	26
-593	1	0
-632	5	0
-2711	0	4
-1042	0	1
-34	1	1
-1025	2	0
-27	4	18
-81	1	33
-33	0	1
-6	0	76
-3950	1	0
-86	1	1
-12	1	1
-2947	0	1
-1160	1	0
-2046	3	0
-720	1	0
-1341	1	0
-10205	0	5
-1265	1	0
-10	1	1
-1278	5	6
-399	0	32
-96	16	18
-605	4	0
-1072	12	12
-950	11	7
-5128	9	10
-2711	1	0
-676	0	1
-2904	1	1
-30	1	1
-851	0	1
-1410	0	1
-394	1	1
-57	1	1
-1561	0	2
-11062	1	1
-58	1	1
-3238	1	1
-42	1	1
-269	1	0
-284	3	3
-24	1	0
-2796	0	5
-2451	28	0
-2251	1	1
-32	1	0
-10	0	4
-24	1	1
-694	0	2
-3475	0	1
-2008	1	1
-49	1	1
-475	1	1
-28	1	1
-259	160	0
-1858	1	0
-1621	3	0
-1791	1	0
-316	0	2
-1169	0	1
-2549	1	0
-2941	1	1
-34	1	1
-243	9	0
-5157	0	2
-1748	0	8
-472	4	0
-2470	0	4
-402	1	0
-643	2	0
-748	0	2
-859	1	0
-409	2	0
-267	0	2
-322	0	4
-155	1	0
-9957	0	4
-1440	4	4
-127	1	0
-1085	1	0
-131	1	0
-767	1	0
-1160	21	21
-1294	1	0
-712	1	0
-1819	2	1
-464	1	0
-6944	0	4261
-55	0	7
-1235	0	3
-702	0	24
-2847	0	1
-2428	3	0
-7517	0	1
-3204	1	0
-611	1	0
-7104	1	0
-4959	14	14
-2827	1	0
-9421	82	25
-4428	8	0
-5987	41	41
-2108	0	2
-344	1	0
-4216	1	0
-810	0	5
-4443	1	0
-10291	10	0
-7265	5	0
-7041	1	0
-6007	1	0
-8185	4	0
-4961	0	3
-13564	0	1
-1475	0	2
-105	0	10
-10104	2	0
-3073	1	0
-3715	8	0
-2246	24	24
-11461	0	2
-837	61	1
-7660	39	39
-1705	0	1
-6068	7	0
-916	0	4
-569	1	1
-72	1	1
-2260	0	2
-7036	4	0
-3591	0	3
-713	4	0
-7058	11	11
-3319	0	2
-8475	0	1
-1324	0	2
-5438	5	0
-156	1	1
-44	0	1
-21501	7	7
-3359	16	16
-2138	0	5
-4406	11	11
-1525	1	1
-28	1	1
-2159	16	0
-48	4	0
-3030	0	1
-5717	10	0
-6594	2	0
-648	31	31
-1275	1	0
-4	1	0
-3599	1	0
-7515	4	0
-979	0	2
-1990	0	10
-123	1	1
-27	1	1
-1255	0	2
-2769	5	5
-727	1	1
-26	3	3
-785	0	1
-8871	29	29
-15459	1	0
-5978	5	5
-66	1	1
-46	1	1
-18539	1	0
-7732	2	0
-652	0	1
-861	0	1
-10658	17	17
-1313	0	1
-3515	3	0
-19	18	0
-539	0	1
-655	2	0
-10586	2	0
-2385	0	1
-7589	1	0
-29834	1	1
-27	1	1
-1216	1	0
-1323	1	0
-673	0	3
-20031	0	3
-2841	13	0
-1841	4	0
-6446	1	0
-11727	0	1
-8427	17	17
-2864	0	143
-4107	0	8
-748	0	2
-3417	1	1
-32	1	1
-18799	0	2
-21810	1	1
-34	1	1
-2784	2	0
-7864	2	0
-4498	0	1
-49089	1	1
-32	1	1
-509	1	1
-37	1	1
-5371	22	16
-389	1	1
-21	1	1
-806	1	0
-1638	6	6
-228	1	1
-45	1	1
-2068	6	3
-441	1	0
-2338	1	0
-1948	1	1
-26	1	1
-214	0	1
-6118	1	1
-31	1	1
-2382	5	5
-4335	1	1
-39	1	1
-4561	1	1
-38	1	1
-2199	1	1
-49	1	1
-243	19	6
-2779	1	1
-37	2	0
-24	1	1
-1966	3	0
-233	1	1
-29	1	1
-13756	0	4
-3956	4	1
-33765	46	46
-12758	1	0
-18985	0	8
-1384	3	1
-85	1	0
-3539	1	1
-32	1	1
-145	1	0
-1245	2	0
-1736	80	80
-1607	1	5
-712	10	11
-502	0	1
-3670	1	0
-740	0	1
-1693	0	1
-6497	0	2
-2898	1	3
-141	0	1
-1108	0	2
-1448	1	0
-1340	0	1
-7616	74	66
-2882	1	2
-30	8	0
-896	21	3
-395	1	1
-37	3	0
-23	1	2
-1210	18	0
-65	1	1
-20	1	1
-791	0	4
-389	1	0
-809	1	1
-55	0	7
-428	1	1
-17	1	1
-239	1	1
-20	1	1
-69	1	1
-37	1	1
-955	1	0
-839	0	1
-165	1	0
-3867	0	5
-70	1	1
-27	1	1
-899	1	2
-107	1	0
-1457	1	0
-763	12	5
-35	1	1
-1417	10	10
-121	1	1
-38	0	3
-377	1	0
-325	2	2
-178	1	0
-11	4	0
-297	0	24
-337	11	0
-134	1	1
-694	3	0
-72	1	1
-144	1	1
-96	1	1
-199	2	0
-1011	1	0
-107	1	1
-1280	1	1
-73	1	1
-84	25	25
-287	1	1
-26	1	1
-139	1	1
-41	1	1
-440	4	0
-130	12	12
-435	21	0
-85	1	1
-28	1	1
-73	1	1
-61	1	1
-53	5	1
-70	1	2
-52	2	0
-157	30	30
-554	2	2
-128	1	5
-68	1	1
-44	1	1
-125	0	1
-57	1	1
-308	0	7
-15	1	1
-725	9	0
-60	1	1
-180	1	1
-55	1	1
-61	1	1
-23	1	0
-5	1	2
-88	1	1
-56	1	1
-433	2	0
-84	68	68
-182	12	12
-216	1	1
-94	1	1
-561	1	1
-16	1	1
-113	1	1
-86	1	1
-148	2	0
-75	2	0
-77	1	21
-209	3	8
-374	1	0
-173	4	3
-201	1	1
-42	1	1
-56	1	1
-115	1	0
-327	1	1
-54	5	5
-929	1	1
-21	1	1
-97	1	1
-28	0	3
-830	0	2
-68	1	1
-525	0	1
-2081	1	1
-41	1	1
-165	3	3
-46	1	0
-378	1	1
-49	1	1
-352	0	1
-142	1	1
-30	1	1
-95	1	1
-45	1	1
-227	1	1
-53	1	1
-130	1	1
-18	1	1
-138	1	1
-90	1	1
-129	41	41
-50	1	1
-79	1	1
-117	1	1
-31	1	1
-240	5	5
-57	1	1
-152	1	1
-30	1	1
-177	5	5
-321	1	1
-63	1	1
-504	18	18
-662	1	1
-74	1	1
-248	1	1
-34	1	1
-1507	0	10
-1051	0	2611
-560	3	3
-23	1	1
-1631	0	15
-78	4	0
-160	0	21
-3764	0	4
-1358	0	1
-1773	1	1
-43	1	1
-1263	1	1
-39	1	1
-183	0	16
-4097	10	0
-1261	1	1
-20	1	1
-137	1	0
-2351	1	1
-43	1	1
-1010	0	4
-536	1	1
-38	1	1
-381	0	1
-888	19	19
-1521	1	1
-27	1	1
-161	1	1
-46	1	1
-2659	2	0
-533	10	0
-441	1	12
-1684	1	1
-26	3	4
-879	16	16
-514	0	2
-58	1	1
-117	1	1
-24	1	1
-207	1	0
-38	1	1
-730	1	1
-39	1	1
-429	10	10
-134	0	4
-37	1	1
-144	8	8
-1036	2	0
-262	2	2
-38	0	1
-70	18	18
-84	11	13
-317	0	3
-1256	0	2
-332	1	1
-21	1	1
-193	8	28
-30	1	1
-79	1	1
-29	1	1
-536	1	0
-611	1	1
-25	1	1
-399	4	4
-118	0	32
-23	1	1
-116	1	1
-30	1	1
-503	1	1
-22	0	3
-136	1	1
-48	1	1
-330	9	9
-1108	1	1
-98	1	1
-582	0	4
-711	7	7
-89	1	0
-293	7	6
-159	1	1
-24	1	1
-167	6	6
-171	17	17
-681	1	1
-43	1	1
-538	1	1
-44	1	1
-537	16	16
-180	6	6
-778	2	2
-44	1	1
-168	0	7
-211	1	1
-42	1	1
-1253	1	1
-29	1	1
-320	1	1
-36	2	2
-55	1	2
-460	1	1
-35	1	1
-553	8	8
-386	1	1
-26	1	1
-540	1	1
-31	1	1
-65	0	1
-625	12	12
-313	0	1
-52	1	1
-22	1	1
-583	1	1
-49	1	1
-678	37	37
-784	3	0
-770	1	1
-87	11	0
-1129	1	1
-36	1	1
-553	8	8
-997	16	15
-157	1	1
-31	2	2
-204	18	19
-487	1	1
-29	1	1
-374	1	1
-67	1	1
-720	13	13
-266	10	10
-330	16	14
-413	1	1
-44	1	1
-78	6	6
-181	2	2
-36	1	1
-397	1	1
-20	1	1
-311	1	1
-48	2	2
-1298	11	11
-437	4	4
-35	1	1
-194	10	10
-310	1	1
-51	1	1
-136	1	1
-49	1	1
-521	1	1
-23	1	1
-220	1	1
-71	1	1
-1046	15	15
-216	1	1
-21	1	1
-51	1	1
-49	1	1
-527	17	17
-340	12	11
-1025	1	0
-2572	1	1
-29	1	1
-397	2	5
-668	13	13
-541	1	1
-59	0	2
-6	1	1
-122	14	14
-51	1	1
-46	1	1
-72	5	5
-352	0	21
-136	1	1
-12	1	1
-66	16	16
-456	37	34
-371	7	7
-48	1	1
-194	10	10
-108	1	1
-60	1	1
-122	0	1
-48	1	1
-238	1	1
-32	0	1
-100	1	0
-72	1	0
-390	1	1
-38	1	1
-144	1	1
-27	0	4
-184	21	228
-49	1	1
-608	0	1
-152	1	1
-31	1	1
-281	8	8
-337	1	1
-45	1	1
-222	1	1
-20	1	1
-380	1	0
-44	1	1
-368	1	1
-72	1	1
-502	36	18
-63	1	1
-43	0	4
-136	1	1
-42	1	1
-80	4	4
-35	1	0
-89	1	1
-24	0	5
-829	13	13
-102	14	0
-233	1	1
-42	0	3
-85	0	1
-400	1	1
-40	1	1
-538	25	25
-174	1	1
-20	1	1
-705	1	1
-26	2	2
-614	1	1
-44	1	1
-509	1	1
-32	1	1
-224	1	1
-42	1	1
-747	5	5
-804	1	1
-29	1	1
-166	1	1
-43	1	1
-233	1	1
-44	1	1
-620	8	8
-133	1	1
-31	1	1
-165	1	1
-29	1	1
-1249	1	1
-26	4	0
-56	1	1
-67	1	1
-716	1	1
-46	0	1
-16	1	1
-174	1	1
-96	1	1
-141	1	1
-39	0	4
-263	1	1
-18	1	1
-259	4	4
-38	1	1
-104	1	1
-40	1	0
-248	1	1
-18	1	1
-238	1	1
-32	1	1
-70	0	2
-16	1	1
-818	1	1
-22	4	4
-1641	1	1
-46	1	1
-53	1	0
-38	1	1
-373	1	1
-60	1	1
-1149	0	2
-19	1	1
-1653	4	4
-42	1	1
-218	12	12
-363	1	1
-24	1	1
-457	10	10
-414	13	13
-825	1	1
-41	1	1
-492	0	8
-1370	1	1
-18	1	1
-808	2	2
-335	6	4
-880	1	1
-35	1	1
-236	1	1
-67	1	1
-298	0	1
-147	4	4
-322	11	11
-613	1	1
-62	1	1
-340	1	1
-22	1	1
-1057	1	1
-57	1	1
-358	1	1
-128	1	1
-146	10	10
-490	1	1
-20	1	1
-62	1	1
-88	1	1
-293	1	1
-28	1	0
-20	1	1
-83	0	1
-90	1	1
-312	1	1
-44	1	1
-1213	1	1
-51	1	1
-467	1	1
-39	1	1
-122	14	0
-35	1	1
-485	14	14
-110	13	0
-127	1	1
-7150	9	13
-3278	0	2
-28	1	1
-2211	1	0
-1325	18	18
-1304	3727	0
-299	0	248
-2603	2	0
-160	1	1
-34	1	1
-631	1	1
-40	1	3
-38	1	1
-332	17	17
-231	14	14
-202	1	1
-199	1	1
-71	1	1
-42	1	0
-53	11	10
-82	34	34
-135	1	1
-50	3	0
-32	1	1
-194	1	1
-45	1	1
-143	1	1
-78	1	1
-193	6	0
-40	1	1
-432	1	1
-17	1	1
-429	3	6
-58	1	1
-85	1	1
-62	1	1
-85	1	1
-57	1	1
-51	2	2
-278	1	1
-49	1	1
-77	11	11
-120	0	4
-139	1	1
-30	2	2
-205	4	4
-131	1	1
-22	1	1
-251	1	1
-34	1	1
-175	1	1
-36	1	1
-239	1	1
-32	5	5
-63	1	1
-27	1	1
-78	1	1
-19	1	1
-209	1	1
-143	1	13
-176	0	1
-7	0	8
-375	0	1
-62	1	1
-129	2	2
-135	1	1
-88	8	0
-90	6	8
-796	2	0
-1219	1	1
-34	1	1
-833	1	1
-46	1	1
-74	1	1
-45	1	1
-95	1	1
-29	1	1
-298	0	3
-47	1	1
-311	1	1
-58	1	1
-349	15	15
-208	1	1
-37	3	0
-413	11	11
-54	1	1
-97	1	1
-137	0	2
-95	1	1
-257	3	0
-35	1	1
-66	1	1
-47	1	1
-104	7	7
-220	17	17
-228	4	4
-432	1	1
-34	3	3
-175	4	4
-26	1	2
-116	7	7
-60	13	13
-137	1	1
-44	1	1
-744	1	1
-29	1	1
-148	0	5
-30	1	1
-387	1	1
-22	1	1
-309	1	1
-82	1	1
-52	1	1
-32	1	1
-121	1	1
-37	1	1
-396	3	2
-324	1	1
-92	1	1
-51	9	9
-71	7	7
-24	1	1
-115	1	1
-101	1	1
-799	12	12
-197	1	1
-146	1	1
-103	1	1
-134	1	1
-16	1	1
-378	1	1
-85	1	1
-134	1	1
-25	1	1
-54	3	3
-55	1	1
-67	1	1
-22	1	1
-54	13	13
-55	11	11
-120	1	1
-23	1	1
-51	1	1
-22	1	1
-369	1	1
-273	1	1
-119	6	6
-229	34511	40178
-78	1	1
-22	1	1
-180	1	1
-33	1	2
-26	6	6
-474	1	1
-36	1	1
-151	1	1
-29	1	1
-120	1	1
-23	1	1
-865	1	1
-39	1	1
-330	1	1
-24	1	1
-197	1	1
-69	1	1
-116	3	0
-161	1	1
-38	1	1
-753	1	1
-57	3	3
-145	1	1
-121	1	1
-300	1	1
-147	1	1
-379	1	1
-55	2	2
-65	1	1
-32	1	1
-1008	1	1
-24	1	1
-159	18	18
-659	1	1
-76	0	2
-77	1	3
-65	1	1
-84	1	0
-119	1	1
-15	1	1
-247	4	0
-372	1	0
-1633	1	1
-16	1	1
-221	9772	11561
-315	1	1
-53	1	1
-67	1	1
-91	1	0
-23	1	0
-27	2	2
-66	2	2
-80	0	41
-12	1	1
-158	1	0
-92	2	0
-254	1	1
-43	1	1
-846	6	149
-84	1	1
-29	3	3
-315	17	17
-482	1	1
-29	3	3
-278	1	1
-73	1	1
-2767	1	1
-34	1	1
-192	1	1
-33	1	0
-168	6	0
-276	10	10
-344	1	1
-49	1	1
-109	1	1
-35	3	3
-561	24	27
-923	1	1
-102	1	1
-75	14	14
-266	1	1
-80	2	2
-185	1	0
-1035	1	1
-23	1	1
-417	10	10
-97	1	1
-94	1	1
-492	1	1
-37	5	5
-1429	1	1
-19	1	1
-839	1	1
-96	1	1
-1279	4	0
-683	1	1
-49	1	1
-514	1	1
-28	4	4
-2302	1	1
-42	1	1
-537	2	21
-1555	1	1
-42	0	1
-14	4	4
-86	1	1
-62	1	1
-515	5	1
-330	0	1
-159	0	22
-3841	1	0
-5065	12	12
-97	0	3
-772	1	1
-21	2	1
-1058	0	2
-349	2	0
-1080	6	0
-11	1	3
-53	0	2
-14	1	1
-1035	1	1
-85	1	1
-69	1	1
-27	1	1
-547	7	7
-195	1	1
-41	1	1
-395	1	1
-35	1	1
-73	0	1
-71	1	1
-557	3	3
-30	1	1
-66	49	49
-1310	0	2
-26	2	0
-10	1	15
-36	1	1
-196	1	1
-40	1	1
-141	1	1
-76	1	1
-1480	1	3
-347	1	1
-26	1	1
-231	1	1
-82	3	3
-69	3	0
-441	16	16
-147	1	1
-21	1	1
-3565	0	3
-877	2	0
-1036	1	1
-47	2	1
-3761	12	0
-5345	1	0
-11541	1	0
-1843	0	4
-1157	16	16
-7354	19	0
-736	0	1
-8058	1	0
-4449	21	21
-649	1	0
-2913	0	1
-381	331	0
-6066	0	1
-1968	7	0
-3198	1	0
-667	1	0
-3870	0	1
-36	13	0
-1894	1	1
-40	0	4
-1137	6	0
-211	2	0
-345	1	0
-592	4	4
-1043	4	0
-686	14	0
-1032	0	1
-9035	0	4
-167	0	2
-19472	35	35
-4457	0	3
-1470	0	1
-289	3	0
-3780	41	41
-522	1	0
-2026	8	0
-430	0	1
-631	1	1
-21	1	1
-479	0	1
-697	4	0
-1779	1	1
-27	1	1
-196	4	0
-58	8	0
-2881	1	1
-39	1	1
-120	44	45
-538	1	0
-393	6	6
-3090	1	1
-43	1	1
-1246	1	0
-294	1	1
-27	1	1
-374	3	3
-144	1	1
-190	1	6
-750	1	0
-695	2	0
-1003	11	0
-1185	8	8
-763	0	4
-2737	11	11
-453	1	0
-536	1	1
-43	1	1
-57	1	0
-21	7	0
-3892	0	1
-3177	0	1
-8990	0	2
-2303	1	0
-2850	4	0
-1273	0	2
-5863	1	0
-9593	1	1
-81	1	1
-2777	0	2
-4564	34	34
-674	0	8
-11548	2	0
-6086	0	1
-109	1	1
-2286	0	1
-997	0	18
-3344	1	1
-40	1	1
-842	28	24
-1584	1	0
-1582	0	1
-1670	3	25
-17	0	4
-16	2	0
-6	12	0
-49	1	1
-538	1	1
-26	1	1
-5879	2	4
-2513	0	1
-346	8	8
-222	16	16
-103	1	0
-198	1	3
-539	1	1
-47	1	1
-1154	0	1
-3737	1	2
-370	2	0
-1178	1	1
-78	1	1
-47	0	1
-518	6	0
-646	13	13
-469	1	0
-1072	1	4
-858	1	0
-3674	1	0
-282	1	0
-597	0	6
-505	4	4
-183	1	1
-43	1	1
-1294	1	1
-40	1	1
-572	0	4
-464	0	4
-757	40	40
-1089	2	0
-548	1	0
-1300	0	3
-1839	2	0
-189	1	1
-49	1	1
-1253	1	1
-43	1	0
-498	1	1
-45	4	0
-3538	0	1
-1989	14	14
-1332	2	0
-3586	1	0
-989	1	2
-447	0	4
-40	1	1
-2445	16	17
-291	1	3
-7	1	0
-11	0	1
-41	1	1
-94	1	1
-49	1	1
-1515	6	0
-603	13	13
-163	1	1
-45	1	1
-2050	11	11
-1126	1	1
-16	1	1
-391	1	1
-19	0	1
-932	1	0
-42	1	1
-751	1	0
-287	1	1
-42	1	1
-464	0	4
-4069	5	5
-153	1	0
-514	2	0
-1093	1	1
-41	1	1
-1746	4	4
-1351	1	1
-38	1	1
-682	12	12
-519	0	72
-168	18	18
-146	7	7
-293	1	1
-61	0	1
-43	1	1
-236	1	0
-35	1	1
-152	14	14
-776	0	4
-809	4	0
-155	1	1
-44	1	1
-1068	1	1
-93	1	1
-209	15	15
-1331	0	3
-3912	0	1
-6624	0	4
-375	0	1
-7255	5	0
-419	2	0
-293	1	0
-10397	5	24
-11095	0	1
-1770	4	0
-374	0	4
-7714	1	0
-1229	7	6
-3055	1	0
-5818	1	0
-2415	11	9
-2056	0	1
-955	4	0
-3907	0	2
-16936	0	1
-1044	1	0
-2392	0	1
-158	2	1
-199	0	1
-75	6	6
-2094	8	0
-649	2	0
-373	75	75
-2253	1	0
-15	1	0
-1995	0	2
-818	4	0
-676	0	1
-3171	8	0
-170	0	3
-459	1	1
-37	1	1
-336	1	0
-206	1	1
-26	1	1
-224	15	15
-308	2	1
-82	1	1
-23	1	1
-562	1	1
-80	1	1
-241	0	8
-1530	1	1
-20	1	1
-1372	1	1
-44	1	1
-427	1	1
-20	1	1
-651	105	81
-221	1	1
-45	1	1
-1747	1	1
-27	1	1
-179	1	1
-70	1	1
-173	1	1
-84	0	36
-1864	1	1
-41	1	1
-44	9	0
-1028	1	0
-85	1	1
-21	1	1
-475	0	2
-256	1	1
-31	1	1
-653	1	1
-18	1	1
-62	1	1
-19	1	1
-997	1	1
-22	1	1
-326	1	0
-505	5	4
-386	0	7
-466	13	13
-870	11	12
-134	15	15
-248	0	2
-2281	1	1
-79	1	1
-56	9	6
-498	100	100
-802	1	0
-290	1	1
-38	1	1
-185	1	1
-61	1	1
-944	1	1
-22	1	1
-835	1	1
-66	1	1
-890	0	1
-3503	6	6
-231	0	1
-2136	1	0
-999	1	0
-5220	3	4
-830	1	1
-24	1	1
-1209	1	1
-38	1	1
-7077	1	0
-2939	1	0
-3959	0	2
-3746	0	2
-1011	1	1
-34	1	1
-7443	0	1
-688	2	0
-574	1	1
-29	1	1
-1785	2	0
-16	20	0
-4073	2	0
-136	1	1
-77	1	1
-528	27	0
-253	0	1
-204	1	0
-129	2	0
-811	1	1
-38	1	1
-2347	52	0
-4634	1	0
-856	14	14
-1052	1	1
-28	1	1
-1255	1	1
-36	1	1
-97	0	1
-58	1	1
-1708	1	1
-48	1	1
-958	13	0
-3371	1	1
-37	1	1
-4267	0	15
-1059	0	1
-272	0	20
-168	2	0
-26	4	32
-4090	0	2
-3269	1	1
-17	1	2
-1378	1	0
-1443	0	1
-6206	1	0
-2318	0	1
-7695	2	0
-396	22	12
-918	0	1
-1818	0	1
-28	1	1
-492	1	1
-33	1	1
-326	1	1
-80	1	1
-288	8	17
-2671	0	1
-1099	0	1
-144	1	1
-29	0	1
-2098	0	2
-24	4	0
-1207	4	4
-45	1	1
-757	0	5
-1926	1	1
-40	1	1
-2657	0	1
-414	1	0
-61	0	1
-235	0	2
-2087	0	1
-713	0	4
-58	1	0
-1041	3	0
-36	1	1
-377	1	1
-17	1	1
-948	1	1
-41	1	1
-458	1	1
-21	1	1
-1055	0	1
-8189	4	5
-36	1	1
-102	2	0
-14	1	1
-682	0	6
-147	0	1
-750	0	3
-40	1	1
-2428	0	1
-750	2	0
-473	0	2
-2032	1	0
-3841	1	0
-560	1	0
-1108	1	0
-8087	1	0
-11881	1	1
-30	1	1
-4383	2	0
-6883	49	49
-3146	0	1
-906	2	0
-887	1	1
-80	1	1
-2210	1	0
-905	0	1
-1037	1	0
-5866	0	2
-18	1	1
-582	0	5
-2828	1	0
-847	1	0
-1996	4	0
-3170	1	0
-1751	0	1
-910	2	0
-691	0	1
-32873	0	1
-1722	0	1
-17559	16	24
-1369	29	0
-494	2	0
-4432	0	1
-23680	26	26
-10911	0	1
-920	0	1
-4586	0	2
-2232	1	0
-5718	0	1
-12415	1	1
-51	0	1
-7997	0	2
-1700	1	0
-2697	1	0
-2561	2	0
-1544	0	6
-1613	3	7
-37	9	1
-2113	1	0
-7174	0	34
-7914	1	1
-35	1	1
-5308	1	0
-2303	2	1
-423	7	7
-590	1	0
-24	1	1
-165	6	0
-2848	13	13
-64	0	1
-28	1	1
-723	0	4
-2868	0	1
-731	1	1
-60	1	1
-1012	3	0
-490	29	29
-1225	1	1
-78	1	1
-61	1	0
-2362	11	11
-399	1	0
-1494	16	16
-128	24	24
-530	1	1
-35	1	1
-5276	1	0
-415	0	1
-580	1	2
-1450	22	23
-816	1	0
-1953	1	0
-881	10	1
-885	8	14
-183	14	14
-1139	25	25
-155	1	1
-94	1	1
-419	3	3
-26	1	1
-56	1	0
-69	1	0
-117	1	1
-120	1	1
-42	1	1
-825	0	2
-108	1	1
-24	1	1
-956	3	0
-664	1	1
-41	1	1
-716	4	0
-1731	8	8
-4228	0	1
-5694	3	0
-4493	0	1
-2656	1	0
-3029	4	0
-5688	1	0
-170	2	0
-5972	0	2
-840	0	2
-55	1	1
-28	1	1
-2954	0	1
-4343	6	0
-1663	4	0
-150	1	0
-3128	1	0
-1449	3	0
-1534	1	0
-489	1	0
-431	0	4
-299	2	0
-5082	9	0
-413	0	1
-989	0	2
-4941	0	1
-6655	1	0
-349	8	7
-762	1	1
-29	0	3
-1434	0	1
-1267	0	1
-587	1	1
-22	0	1
-894	28	0
-1343	2	0
-2256	0	1
-4332	0	4
-22	1	1
-12415	12	10
-10485	0	1
-1429	0	12
-625	1	7
-1224	0	10
-1680	4	0
-5169	14	14
-3878	0	8
-2544	0	140
-9238	0	1
-1575	0	3
-1775	1	1
-31	1	1
-1200	1	0
-32	0	3
-797	0	8
-35	0	2
-599	1	1
-22	1	1
-5338	2	0
-1998	0	5
-146	0	4
-12031	0	1
-1993	0	1
-706	2	0
-2735	0	1
-3859	0	4
-4845	0	2
-268	2	0
-827	4	4
-1063	6	6
-7834	2	0
-3195	0	1
-4012	10	0
-6429	0	2
-308	0	1
-808	1	0
-17	8	0
-5472	19	2
-2436	0	14
-820	9	9
-2643	1	1
-32	1	1
-1189	1	0
-5710	0	3
-308	1	0
-4930	0	1
-4308	1	0
-946	82	0
-1790	0	2
-1218	25	0
-52	0	1
-1271	1	1
-33	1	1
-4760	1	0
-4924	0	1
-4817	4	4
-39	1	0
-1116	3715	901
-205	1	0
-1591	5	2
-138	2	2
-16	1	1
-802	0	89
-1600	0	6
-2175	0	5
-606	14	14
-519	1	0
-540	1	1
-40	1	1
-568	2	0
-458	1	1
-41	1	1
-1106	24	62
-818	1	1
-42	1	1
-2266	1	0
-14059	0	4
-5030	1	0
-12630	0	3
-84	9	9
-129	13	18
-564	10	15
-154	1	0
-438	10	10
-38	0	5
-98	11	9
-2034	1	1
-25	1	1
-73	10	10
-70	5	5
-132	1	1
-52	1	1
-599	1	1
-46	1	1
-279	1	1
-18	1	1
-239	3	0
-383	6	0
-224	0	1
-321	15	0
-1783	1	1
-18	3	0
-108	1	1
-60	1	1
-405	16	16
-60	1	1
-16	1	1
-970	1	1
-24	1	1
-424	3	0
-41	1	1
-57	8	8
-285	2	0
-672	1	1
-44	1	4
-103	0	1
-148	1	1
-49	3	0
-146	5	11
-91	1	1
-79	1	1
-94	1	1
-101	1	1
-88	16	16
-117	1	1
-15	1	1
-58	1	1
-93	1	1
-466	1	1
-44	1	1
-160	1	1
-23	1	1
-481	14	14
-181	4	4
-72	1	1
-25	1	1
-82	7	12
-4	0	1
-11	1	4
-20	0	5
-92	1	1
-56	10	0
-80	1	1
-141	2	0
-60	1	1
-372	0	2
-784	1	1
-85	1	1
-109	1	1
-16	1	1
-57	1	1
-92	3	1
-23	1	0
-26	1	1
-74	1	1
-33	1	1
-176	1	1
-25	2	2
-193	1	1
-35	0	1
-383	0	5
-249	1	1
-69	1	1
-98	1	1
-70	1	1
-55	1	1
-143	1	1
-438	1	1
-64	1	1
-53	4	0
-127	3	0
-75	5	5
-45	1	1
-197	1	1
-27	1	1
-116	13	13
-218	15	20
-1107	16	19
-73	1	1
-101	1	1
-123	1	1
-60	1	1
-994	1	1
-43	0	1
-18	1	1
-1215	18	18
-340	1	1
-34	1	1
-1350	16	16
-1417	1	1
-29	1	1
-475	1	1
-48	1	1
-198	10	10
-87	1	1
-18	1	1
-171	7	7
-427	1	1
-21	1	1
-2011	0	3
-17	1	1
-1412	1	1
-24	1	1
-214	8	4
-228	1	1
-34	1	1
-410	16	16
-185	1	1
-24	1	0
-164	0	1
-222	1	1
-25	1	1
-297	10	10
-1171	1	0
-569	19	19
-2755	1	0
-11	1	1
-2502	1	1
-23	1	1
-44	12	0
-2856	0	1
-148	1	1
-36	1	1
-993	2	0
-1251	2	0
-6619	14	14
-1014	4	0
-134	2	9
-818	1	0
-61	1	7
-563	46	0
-78	5	5
-1677	1	1
-49	1	1
-399	1	1
-32	1	1
-790	27	27
-104	1	1
-75	1	1
-1638	1	1
-16	1	1
-92	1	1
-44	1	1
-276	0	13
-1020	1	1
-35	1	1
-389	14	14
-256	1	0
-38	1	3
-631	1	1
-40	1	1
-2356	85	83
-1300	0	5
-511	0	2
-605	1	1
-17	1	1
-880	12	0
-1689	4	0
-2492	1	1
-39	1	1
-641	16	16
-682	0	5
-669	1	1
-25	1	1
-1926	1	1
-39	4	3
-1037	1	1
-40	2	0
-890	6	0
-41	2	0
-498	3	0
-321	0	1
-281	3	0
-450	1	1
-34	1	1
-498	1	1
-28	2	1
-280	0	2
-648	1	1
-47	1	1
-1002	4	0
-120	1	1
-1538	0	1
-75	1	1
-37	1	1
-510	91	91
-60	18	18
-2075	1	1
-19	1	1
-2429	1	1
-21	1	1
-107	1	0
-2786	0	2
-31	5	5
-1973	12	0
-3118	1	0
-246	0	1
-33	1	1
-6752	1	0
-822	2	9
-606	1	1
-18	1	1
-3920	1	1
-37	0	2
-4497	10	13
-301	20	20
-2130	1	1
-16	3	0
-1843	0	4
-3780	3	0
-850	0	1
-2774	0	3
-2065	0	1
-20	1	1
-1400	1	0
-3243	0	15
-1336	5	0
-448	49	49
-121	7	7
-1507	8	7
-422	1	0
-2184	0	1
-304	0	2
-19	0	1
-101	1	1
-417	3	3
-22	1	1
-672	4	4
-31	1	1
-150	1	1
-38	1	1
-161	5	0
-17	1	1
-72	1	0
-106	1	1
-463	1	1
-94	1	1
-138	3	4
-185	1	1
-29	1	1
-220	15	15
-167	1	1
-32	1	1
-93	1	3
-217	1	1
-23	1	1
-137	9	9
-62	0	3
-353	1	1
-27	1	1
-117	9	9
-421	1	1
-47	1	1
-124	0	1
-997	6	0
-54	5	5
-764	1	1
-45	1	1
-1431	7	7
-387	6	6
-1103	0	36
-767	1	1
-31	1	3
-208	5	5
-1610	1	1
-23	1	1
-779	0	8
-324	0	2
-45	1	1
-264	0	3
-45	1	1
-250	1	1
-18	1	1
-517	33	0
-117	1	1
-42	1	1
-550	1	1
-20	1	1
-671	1	1
-68	1	1
-89	1	1
-104	1	1
-172	0	1
-124	0	1
-522	0	1500
-466	5	5
-32	1	0
-171	1	1
-19	1	1
-67	1	1
-22	1	1
-654	1	1
-25	1	1
-68	1	1
-21	4	0
-1588	1	1
-66	1	1
-401	0	1
-186	1	1
-21	1	1
-168	0	1
-686	3	0
-19	1	1
-127	1	1
-29	1	1
-234	1	1
-30	1	1
-141	0	2
-33	1	1
-673	1	1
-89	1	1
-161	16	16
-504	20149	20139
-1269	1	1
-40	1	1
-327	1	1
-24	1	1
-172	2	2
-27	11	15
-381	10	11
-376	1	1
-45	1	1
-121	1	1
-62	1	1
-289	1	1
-26	1	1
-191	1	1
-20	11	11
-425	1	1
-37	1	1
-296	1	1
-149	1	1
-284	1	1
-37	1	1
-705	1	12
-106	12	12
-306	1	1
-24	1	1
-1299	1	1
-47	1	1
-2026	1	1
-20	1	1
-133	1	0
-9803	0	4
-15871	3	0
-2464	1	1
-24	1	1
-879	1	1
-73	1	1
-89	1	1
-42	1	1
-108	1	1
-43	0	1
-26	1	1
-511	5	6
-605	19531	20105
-55	1	1
-37	0	2
-89	1	1
-51	1	1
-85	1	1
-78	1	1
-173	1	1
-51	1	1
-90	3	3
-95	1	1
-32	1	1
-53	1	1
-231	1	0
-82	2	0
-27	0	1
-44	1	0
-96	10	7
-132	1	1
-233	1	1
-257	1	1
-56	5	5
-237	1	1
-141	1	1
-92	1	1
-154	7	7
-3208	1	1
-33	1	1
-671	1	1
-21	1	1
-955	0	3
-130	1	1
-26	1	1
-288	8	8
-218	0	3
-1076	8	0
-609	10041	10021
-240	2	2
-66	1	1
-228	1	1
-23	1	1
-1612	1	1
-21	1	1
-261	1	1
-99	1	1
-128	1	1
-15	1	1
-77	9	9
-618	8	8
-84	4	6
-438	1	1
-140	1	1
-158	4	3
-277	12	12
-165	4	4
-36	1	1
-253	1	1
-59	1	1
-910	0	1
-915	4	5
-276	15	15
-682	1	1
-28	1	1
-1483	13	13
-203	1	0
-52	1	1
-48	1	1
-229	12	12
-68	15	15
-83	1	1
-39	1	1
-194	1	1
-24	1	1
-251	8	8
-619	0	4
-15	1	1
-690	1	1
-28	1	1
-54	0	1
-463	1	1
-30	1	1
-449	1	1
-54	1	1
-58	5	5
-979	1	0
-318	1	1
-28	1	1
-898	10	10
-100	1	1
-22	1	1
-446	1	1
-74	1	1
-273	1	1
-19	1	1
-333	1	1
-44	1	1
-220	1	1
-56	2	0
-209	1	1
-70	1	1
-223	0	20
-220	1	1
-31	1	1
-56	1	1
-111	1	1
-220	1	1
-89	1	1
-119	1	1
-113	2	0
-195	1	1
-46	1	1
-184	1	1
-60	0	4
-76	0	4
-53	3	1
-43	1	1
-153	1	1
-53	1	1
-195	6	0
-60	1	1
-278	1	0
-42	1	1
-124	10014	10005
-302	1	1
-24	1	1
-135	20	19
-55	1	1
-40	1	1
-175	1	1
-46	1	1
-52	1	1
-19	1	1
-277	1	1
-88	1	1
-172	1	1
-26	1	1
-129	1	1
-35	1	1
-55	9	9
-318	3	3
-46	1	1
-101	8	8
-4653	1	1
-38	1	1
-817	2	0
-256	1	1
-27	1	1
-339	1	1
-48	1	1
-54	10	10
-1393	3	0
-1491	2	0
-1983	16	0
-167	0	4
-3886	7	8
-535	1	1
-16	1	1
-1555	3	0
-3131	1	1
-17	1	1
-4196	1	0
-14974	0	1
-3514	0	4
-29	1	1
-123	0	2
-51	33	0
-121	0	133
-80	1	10
-26	60	4
-52	13	0
-20	0	2
-19	2	0
-22	4	156
-57	156	3
-61	0	2
-29	20	0
-42	11	0
-21	2	0
-50	4	6
-31	1	3
-23	1	53
-25	0	32
-66	1	55
-11	0	2
-13	0	41
-68	1	42
-23	1	3
-12	2	0
-17	1	29
-51	17	13
-18	2	0
-28	2	0
-26	2	0
-158	1	25
-102	0	82
-99	280	0
-53	21	0
-5064	0	2
-7569	2	0
-2189	0	1
-85	1	1
-31	0	4
-399	14	14
-408	0	1
-681	0	5
-184	1	1
-20	1	1
-64	1	1
-29	1	0
-9	2	0
-442	4	0
-342	1	1
-24	1	1
-131	1	1
-198	1	1
-370	0	1
-34	1	1
-447	21	20
-259	1	1
-23	0	1
-121	2	0
-2257	1	1
-22	1	1
-811	1	1
-27	1	1
-95	18	18
-631	0	5
-843	0	2889
-55	0	88
-1189	0	2
-2274	1	0
-752	4	0
-164	1	1
-55	1	1
-1033	10	10
-683	1	1
-57	1	1
-3578	1	1
-34	1	1
-1446	1	0
-460	1	1
-31	0	1
-6	1	1
-163	1	1
-22	1	1
-81	1	1
-27	1	1
-548	1	1
-61	1	1
-1169	1	1
-41	1	1
-1568	14	14
-4889	1	1
-62	1	1
-530	17	17
-394	1	1
-40	7	0
-57	12	12
-69	2	2
-39	1	1
-70	1	1
-22	0	3
-2307	1	1
-30	1	1
-411	1	1
-104	1	1
-375	26	27
-1218	1	1
-35	1	1
-85	1	1
-20	6	0
-687	1	1
-34	1	1
-268	13	13
-74	1	1
-47	2	0
-69	1	1
-49	1	1
-73	1	1
-48	1	1
-218	1	1
-42	1	1
-197	1	1
-41	1	1
-313	1	1
-40	1	1
-476	1	1
-29	1	1
-185	1	1
-35	1	1
-594	1	1
-24	1	1
-220	26	0
-245	0	1
-261	13	13
-89	1	1
-90	1	1
-224	1	1
-201	1	1
-306	1	1
-29	5	5
-121	1	1
-31	1	1
-109	1	1
-25	1	1
-168	1	1
-19	1	1
-93	12	11
-132	1	0
-113	1	1
-30	1	1
-56	9	9
-300	1	1
-50	2	2
-96	1	1
-43	1	1
-76	1	1
-44	1	1
-197	1	1
-91	7	1
-119	0	9
-392	5	5
-89	1	1
-428	11	11
-260	1	1
-23	1	0
-10	1	1
-70	1	1
-65	2	0
-16	0	19
-28	1	1
-208	1	1
-70	1	1
-149	0	3
-51	29	29
-163	1	1
-55	1	1
-63	17	17
-1208	1	1
-98	1	1
-162	1	1
-45	1	1
-148	14	14
-51	5	5
-209	4	4
-1242	1	1
-42	5	0
-87	1	1
-522	0	3
-305	0	1
-1379	0	2
-390	0	15
-72	1	1
-16	1	1
-270	1	0
-280	7	7
-2763	20	20
-674	10	10
-1375	14	0
-327	2	0
-107	1	1
-629	16	16
-54	4	4
-680	16	16
-395	1	1
-42	1	1
-1763	1	1
-46	1	1
-282	1	1
-39	1	1
-860	1	1
-26	1	1
-745	0	2
-2081	2	0
-817	4	4
-202	1	1
-48	1	1
-168	1	1
-53	1	1
-379	10	10
-1178	14	14
-132	5	0
-555	1	1
-65	1	1
-550	1	1
-21	1	1
-462	1	1
-43	1	1
-121	1	1
-48	0	3
-15	1	5
-1404	0	1
-450	4	0
-626	1	0
-304	1	1
-39	1	1
-564	1	1
-45	1	1
-303	2	0
-409	1	1
-18	1	0
-858	2	0
-2168	0	1
-54	1	1
-20	1	1
-524	0	1
-410	10	10
-106	1	14
-2419	18	14
-64	1	1
-31	1	1
-185	0	5
-1646	1	1
-20	1	1
-227	1	1
-37	1	1
-500	1	0
-136	3	4
-8239	1	1
-23	1	1
-1114	0	2
-688	0	1
-901	18	18
-4781	0	4
-815	0	1
-5069	0	5
-415	0	2
-352	0	1
-1085	11	11
-1099	0	1
-991	0	1
-845	1	1
-32	0	2
-5751	0	3
-1553	1	1
-60	1	1
-278	0	1
-30	1	1
-1855	0	2
-958	0	1
-66	0	16
-2109	0	2
-1265	0	1
-17312	0	4
-1875	0	1
-2157	1	0
-915	0	6
-4940	1	0
-2649	0	1
-3331	2	0
-2276	14	0
-3128	0	4
-3496	1	0
-966	0	1
-3597	1	0
-1647	0	3
-1182	1	0
-654	0	3
-2049	1	0
-6838	1	1
-39	1	1
-186	1	0
-2718	1	1
-30	1	1
-160	11	11
-4954	0	1
-420	1	1
-123	1	1
-156	0	4
-219	4	0
-195	1	0
-4402	2	0
-4295	1	0
-4207	20	20
-468	0	1
-30	1	1
-6025	1	0
-4179	1	0
-19834	0	1
-11605	0	1
-4121	2	0
-2863	0	2
-4890	1	0
-5576	0	6
-4104	4	0
-19858	4	0
-1616	0	3
-1647	4	1
-36	0	12
-2213	0	14
-414	0	1
-458	20	20
-2860	0	3
-678	3	4
-292	2	0
-1922	0	1
-913	0	1
-2720	1	0
-1111	3	0
-2589	0	8
-9425	1	0
-1403	0	2
-1964	0	12
-4433	0	1
-1569	0	1
-7209	1	1
-41	1	1
-2257	1	0
-3001	0	1
-1845	1	0
-1593	0	1
-497	0	2
-6109	0	1
-2019	2	0
-921	0	1
-241	1	0
-5473	1	0
-2213	2	0
-1974	8	0
-4952	0	1
-6146	2	0
-953	1	0
-4141	0	1
-4244	5	0
-152	0	2
-209	0	1
-2400	0	10
-785	2	0
-1733	0	1
-554	1	0
-128	0	2
-3051	0	1
-8577	0	1
-1503	0	1
-1705	0	3
-2052	17	17
-998	177	0
-2804	1	0
-1925	1	0
-9215	0	1
-971	8	0
-36021	1	0
-8016	29	27
-3890	0	1
-67913	1	1
-18	1	6368
-73	1	32739
-14676	1	1
-19	1	1
-22867	1	1
-20	1	1
-5638	5	0
-47	12	0
-11313	0	1
-1769	0	1
-8355	0	3
-4114	0	2
-1403	1	0
-5140	0	1
-490	0	1
-219	1	0
-3483	1	0
-8939	1	1
-44	1	1
-10813	0	2
-7480	2	0
-617	1	0
-1464	0	1
-500	0	2
-1466	1	0
-527	5	0
-3593	0	1
-374	0	1
-2946	22	22
-698	0	1
-2149	1	0
-311	2	0
-6570	1	0
-962	1	0
-23	1	1
-2647	4	0
-588	1	1
-21	1	1
-3256	28	20
-870	0	1
-644	1	0
-602	2	1
-3730	1	1
-45	1	1
-12848	7	7
-7306	0	3
-6647	45	45
-1365	1	1
-63	1	1
-4166	1	0
-1887	10	0
-2949	1	1
-31	0	1
-669	1	0
-2190	2	0
-2081	0	2
-373	0	6
-421	4	4
-1460	0	1
-1699	0	8
-2882	2	0
-147	0	1
-1656	1	1
-27	1	1
-1828	0	2
-4066	35	38
-361	17	17
-1254	6	0
-1643	0	2
-2542	0	1
-848	2	1
-2117	0	2
-119	1	1
-44	1	1
-1104	0	1
-415	0	12
-634	18	1
-377	6	7
-227	6	0
-449	13	13
-895	0	17
-457	18	18
-663	0	3
-382	1	1
-26	1	1
-135	0	1
-105	1	1
-25	1	1
-620	2	0
-290	5	5
-375	1	1
-30	0	4
-98	1	0
-20	17	4
-3824	28	0
-39	4	0
-28	4	0
-44	4	0
-1898	9	9
-221	0	2
-10522	30	0
-783	1	1
-59	1	1
-94	1	1
-21	1	1
-491	1	1
-49	1	1
-289	2	0
-120	0	1
-37	1	1
-112	1	1
-21	1	1
-183	16	16
-73	2	0
-1007	1	1
-38	0	1
-79	1	1
-48	1	1
-561	1	1
-29	1	1
-145	5	5
-576	12	12
-834	1	0
-846	5	7
-34	1	1
-417	10	11
-55	1	1
-40	1	1
-110	1	1
-47	1	1
-351	1	1
-69	1	1
-53	1	1
-91	1	1
-260	1	1
-36	0	1
-604	1	0
-169	0	1
-2118	1	1
-34	1	1
-147	1	1
-213	1	1
-67	1	1
-31	1	1
-566	1	0
-17	1	1
-763	1	1
-34	1	1
-671	5	0
-41	2	2
-98	0	1
-449	0	2
-61	1	1
-38	1	1
-202	1	1
-44	1	1
-190	1	0
-46	4	4
-51	0	4
-476	1	1
-17	1	1
-212	1	1
-26	1	1
-485	1	1
-25	1	1
-263	1	1
-26	1	1
-1327	4	0
-44	1	0
-2397	1	1
-44	1	1
-4146	14	14
-901	0	1
-1769	14	14
-1721	1	0
-1125	1	0
-254	1	0
-427	0	1
-30	1	1
-111	0	2
-52	0	8
-528	44	0
-969	1	1
-10	1	0
-28	1	1
-140	1	1
-43	1	1
-1989	2	1
-598	1	1
-87	0	4
-124	1	0
-4840	1	1
-28	7	4
-505	0	2
-24	1	1
-5134	4	0
-543	1	0
-18	1	1
-97	1	1
-29	1	3
-101	6	0
-148	13	7
-1346	0	1
-128	7	0
-49	0	1
-876	2	0
-286	5	5
-184	0	1
-84	5	5
-365	9	9
-981	1	1
-11	1	1
-734	4	0
-563	4	0
-244	9	9
-379	1	1
-17	1	1
-49	2	0
-95	1	1
-30	1	1
-147	1	1
-37	0	6
-340	1	2
-58	1	1
-332	0	2
-233	6	9
-156	0	1
-26	1	1
-439	4	0
-34	0	2
-508	5	0
-96	1	1
-34	1	1
-1267	63	63
-590	1	1
-24	4	5
-1055	13	13
-135	0	1
-194	1	1
-61	1	1
-384	6	6
-2756	1	1
-19	1	1
-99	15	15
-1754	2	3
-2238	1	1
-31	1	1
-3002	4	0
-2156	15	15
-855	14	13
-442	5	5
-2022	6	6
-506	0	2
-1110	0	1
-2578	0	2
-4864	1	1
-36	1	0
-3187	1	1
-16	1	1
-184	1	1
-18	1	1
-1636	0	7
-23	1	1
-527	1	1
-39	1	1
-653	3	0
-227	1	1
-18	1	1
-102	7	7
-109	0	323
-91	1	0
-124	0	15
-621	0	4
-553	12	12
-463	1	1
-40	1	1
-372	1	1
-25	1	1
-188	12	12
-357	0	1
-250	0	5
-4193	0	4
-967	1	1
-76	1	1
-3236	4	4
-529	7	7
-246	4	0
-160	1	1
-34	0	3
-1469	0	2
-499	1	0
-937	1	1
-45	1	1
-356	71	65
-2127	0	1
-491	1	0
-80	1	1
-72	2	0
-255	6	6
-728	14	11
-702	3	0
-290	0	2
-210	19	1
-473	1	1
-42	4	0
-219	0	1
-348	1	1
-83	1	1
-851	0	16
-72	13	0
-246	1	1
-47	4	0
-410	1	0
-93	0	12
-225	0	16
-428	1	0
-4	6	0
-324	0	1
-3060	0	16
-1305	1	1
-29	1	1
-3094	0	7
-600	0	2
-5495	1	1
-47	1	1
-1247	49	55
-4351	1	1
-15	1	1
-2011	6	14
-8378	2	0
-295	0	17
-4583	1	0
-4132	0	4
-924	4	3
-1751	0	2
-1060	12	12
-380	0	2
-425	8	0
-84	0	1
-244	1	1
-28	1	1
-221	4	0
-348	1	1
-37	11	11
-50	1	1
-180	1	1
-348	1	1
-20	1	1
-1714	1	1
-79	1	1
-729	1	1
-44	1	0
-78	1	1
-112	1	1
-23	1	1
-55	9	9
-1044	1	1
-27	1	1
-494	1	1
-32	1	1
-237	1	1
-27	1	1
-1422	4	4
-413	7	1
-710	8	0
-185	0	2
-966	1	0
-13	15	1
-251	1	1
-47	1	1
-285	1	1
-103	1	1
-977	1	1
-41	1	0
-97	1	1
-131	1	0
-307	1	1
-47	1	1
-1070	1	1
-69	1	1
-382	0	1
-167	1	1
-35	1	1
-161	1	1
-30	1	1
-1068	18	0
-1173	1	1
-32	1	1
-59	1	1
-12	1	0
-18	1	1
-55	0	22
-72	1	1
-2806	1	1
-15	1	1
-1395	1	0
-157	13	0
-536	8	8
-101	1	1
-21	1	1
-147	8	8
-638	1	1
-18	1	1
-183	15	15
-990	0	12
-21	1	1
-145	0	1
-332	1	1
-31	1	1
-231	22	5
-39	1	1
-414	9	9
-93	1	1
-63	1	1
-739	0	2
-632	1	1
-74	1	1
-138	5	5
-128	0	1
-294	1	1
-45	1	1
-679	6	6
-1756	0	34
-560	27	27
-1608	5	0
-219	1	1
-134	0	3
-81	1	1
-82	0	1
-357	1	1
-28	1	1
-670	7	9
-270	0	1
-891	13	33
-257	4	0
-80	0	4
-130	2	0
-2504	42	42
-1226	1	1
-44	1	1
-2256	0	1
-80	12	0
-5544	1	0
-428	13	13
-77	4	4
-63	1	1
-64	13	19
-178	10023	10000
-157	3	3
-109	1	1
-180	1	1
-56	1	1
-169	1	0
-93	1	1
-33	2	2
-72	1	1
-30	1	1
-267	25	25
-65	1	1
-19	2	0
-108	27	27
-218	1	1
-37	1	1
-477	11	11
-93	1	1
-30	7	5
-242	0	1
-171	1	1
-29	1	1
-218	0	9
-241	1	1
-55	4	4
-88	1	1
-99	1	1
-57	0	1
-523	12	16
-399	1	1
-50	1	1
-389	1	1
-71	4	4
-173	12	12
-92	1	1
-20	1	1
-132	0	5
-15	1	1
-75	1	1
-26	5	5
-119	11	11
-542	1	1
-23	2	2
-254	1	1
-34	1	1
-172	1	1
-45	1	1
-95	11	11
-127	23	23
-64	1	1
-95	1	1
-390	1	1
-52	1	1
-170	1	1
-16	5	0
-30	1	1
-599	1	1
-119	1	1
-85	1	1
-75	1	1
-286	4	4
-61	1	1
-286	9	9
-429	1	1
-21	1	1
-53	1	1
-44	1	1
-77	165084	190027
-5156	0	1
-1680	1	1
-88	1	1
-4502	0	1
-46	1	1
-800	4	4
-23	1	1
-1305	2	0
-136	0	1
-4941	0	1
-547	0	1
-70	8	8
-293	1	1
-35	1	1
-1165	4	0
-6662	1	1
-121	1	1
-92	0	8
-214	1	1
-35	1	1
-108	1	0
-1063	0	1
-1017	1	1
-20	0	6
-1725	0	1
-150	5	5
-33	1	0
-12	1	1
-349	1	1
-24	0	1
-1562	1	1
-31	1	1
-2513	0	1
-73	36	36
-305	1	1
-27	1	1
-543	1	1
-47	4	28
-4874	0	3
-599	10	10
-137	1	0
-7	0	4
-54	1	1
-2497	1	1
-166	1	1
-637	3	3
-46	1	1
-74	4	4
-414	1	1
-48	1	1
-75	4	4
-153	0	26
-93	1	1
-39	1	0
-58	1	1
-51	1	1
-145	9	9
-29	1	1
-55	1	1
-427	1	0
-141	1	1
-87	1	1
-20	1	1
-89	3	3
-141	18	5
-48	1	1
-87	14	14
-173	1	1
-68	1	1
-54	1	1
-51	4	0
-22	1	0
-52	1	1
-171	1	1
-109	3	1
-6	0	2
-205	1	1
-54	10064	10083
-76	3	1
-197	15	15
-77	1	1
-70	1	1
-178	1	1
-60	1	1
-210	1	1
-28	1	1
-62	1	1
-33	1	1
-70	0	1
-202	1	1
-60	1	1
-106	2	0
-176	1	1
-79	0	1
-50	1	1
-50	3	3
-207	1	1
-272	5	5
-243	1	1
-84	1	1
-98	1	1
-50	5	5
-77	1	1
-74	1	1
-20	0	1
-143	1	1
-45	0	1
-4	1	1
-1088	1	1
-35	1	1
-320	1	1
-22	1	1
-275	1	1
-47	1	1
-370	19	19
-119	1	6
-51	1	1
-21	1	1
-244	0	1
-345	1	1
-24	1	1
-181	1	1
-61	3	3
-542	1	1
-16	1	1
-312	1	0
-353	4	3
-279	323	0
-86	1	1
-49	1	1
-342	1	1
-44	0	2
-222	1	1
-37	1	1
-588	8	8
-593	47	47
-359	1	1
-25	1	1
-2054	1	0
-2510	1	0
-5040	11	12
-1489	9	9
-3292	1	0
-1449	1	1
-21	1	1
-6768	1	0
-706	2	0
-7107	1	1
-38	1	1
-1163	1	1
-35	1	1
-435	1	1
-60	1	1
-325	0	1
-254	1	1
-43	1	1
-210	1	1
-7	1	0
-47	1	1
-130	4	4
-34	1	1
-208	1	1
-39	2	2
-526	1	1
-36	1	1
-99	9	7
-20	1	1
-73	1	1
-62	1	1
-425	1	1
-43	1	1
-811	1	1
-38	1	1
-362	1	1
-49	1	1
-109	1	1
-19	1	1
-79	1	1
-29	0	1
-26	1	1
-252	1	1
-75	1	1
-441	1	1
-66	1	1
-389	13	13
-67	7	7
-1185	0	311
-64	6	6
-389	31	31
-247	1	1
-38	1	1
-79	1	0
-553	1	1
-30	1	1
-433	1	1
-16	3	0
-1133	12	12
-262	5	5
-276	1	0
-960	14	14
-272	1	1
-41	1	1
-196	1	0
-1424	18	19
-314	1	1
-22	1	1
-345	1	1
-23	3	0
-245	1	1
-78	1	1
-77	1	1
-779	1	1
-32	1	1
-247	1	1
-48	1	1
-778	2	0
-226	1	1
-61	1	1
-867	0	1
-53	1	1
-397	1	1
-12	4	0
-46	1	1
-602	1	1
-35	1	1
-422	1	1
-49	1	1
-789	1	1
-37	1	1
-268	0	2
-589	8	8
-366	12	20
-1651	2	7
-19	1	1
-417	1	1
-37	1	1
-812	1	1
-33	3	0
-1351	18	18
-2186	1	1
-86	1	1
-1433	1	1
-39	1	1
-83	0	1
-238	0	1
-171	1	1
-7	2	1
-67	1	1
-596	1	1
-29	1	1
-144	4	6
-417	1	0
-88	1	1
-24	1	1
-390	18	18
-496	14	21
-145	1	1
-46	1	1
-310	1	1
-35	1	1
-214	1	1
-38	1	1
-206	1	1
-37	1	0
-240	1	1
-32	1	1
-469	1	1
-32	1	1
-208	1	1
-21	1	1
-343	1	1
-17	1	1
-88	1	1
-58	6	0
-169	1	1
-22	1	1
-162	0	1
-196	0	2
-500	6	5
-108	1	1
-40	2	0
-50	1	1
-111	1	0
-21	0	1066
-175	5	5
-155	1	1
-44	1	1
-11005	0	1
-6280	1	1
-48	1	1
-1173	1	1
-19	1	1
-2664	0	1
-351	1	0
-1059	14	14
-593	0	1
-869	16	16
-23065	2	0
-2197	0	1
-949	0	1
-15048	0	1
-606	1	0
-7820	0	4
-14669	1	0
-14708	0	1
-16326	0	1
-304	18	18
-388	2	0
-194	1	1
-49	1	1
-262	0	1
-92	1	1
-10677	2	0
-4856	3	0
-7447	6	6
-421	1	0
-884	6	0
-17	1	0
-3075	1	0
-1610	12	12
-13049	3	1
-3762	2	0
-601	2	0
-2461	0	2
-5154	1	0
-1604	0	16
-3338	26	26
-225	0	1
-1488	1	0
-1196	0	2
-683	0	1
-1218	1	0
-221	1	1
-22	1	1
-296	4	4
-1456	23	41
-880	1	12
-2490	1	0
-151	1	1
-33	1	1
-2809	4	4
-3645	1	1
-17	1	1
-3496	2	0
-154	1	1
-29	1	1
-158	0	1
-5981	1	1
-32	1	1
-1041	0	2
-174	9	0
-1383	0	1
-389	1	2
-1570	2	0
-3993	4	0
-4576	87	87
-142	8	8
-2203	20	24
-2009	1	1
-39	1	1
-489	1	1
-17	1	1
-628	1	1
-124	1	1
-1607	1	1
-23	1	1
-1021	0	8
-1249	0	20
-46	0	32
-46	6	0
-24	0	10
-7679	1	1
-44	1	1
-580	1	1
-28	1	1
-264	1	1
-65	0	1
-15	1	1
-1513	28	28
-830	19	19
-57	1	1
-21	1	1
-231	1	1
-94	1	1
-105	1	1
-208	5	5
-124	1	1
-112	3	3
-207	1	1
-38	1	1
-244	1	1
-60	1	1
-98	1	1
-50	1	1
-256	29	29
-157	1	1
-33	1	1
-143	1	1
-59	1	1
-51	1	1
-45	1	0
-73	1	1
-81	1	1
-270	1	1
-272	1	1
-232	1	1
-94	1	1
-3189	0	176
-834	0	35
-303	0	51
-321	1	0
-17170	0	1
-321	1	1
-25	1	1
-679	1	1
-33	1	1
-990	11	11
-131	8	8
-79	9	9
-1284	9945	10022
-2039	8	23
-491	1	1
-32	1	1
-85	1	1
-41	1	1
-480	1	1
-74	2	2
-1108	59	0
-70	10	10
-325	11	11
-879	1	1
-34	1	1
-524	1	1
-25	1	1
-202	17	17
-1154	1	1
-26	1	1
-89	17	17
-87	1	1
-39	1	1
-950	1	1
-15	2	2
-51	1	1
-81	1	1
-180	1	0
-187	1	1
-37	1	1
-467	1	1
-19	1	1
-755	0	2
-81	3	1
-16	1	1
-67	6	6
-84	1	1
-37	2	0
-31	0	28
-15	0	37
-266	14	14
-372	1	1
-68	1	1
-462	1	1
-46	1	1
-563	19	0
-217	9	9
-363	1	1
-22	1	1
-884	1	1
-40	1	1
-179	1	1
-42	1	1
-94	6	6
-922	1	1
-30	1	1
-481	0	3
-7925	15	11
-333	5	0
-1235	6	6
-355	1	1
-27	1	1
-515	1	0
-1077	11	0
-1521	1	0
-38	1	1
-119	1	1
-58	1	1
-63	4	3
-385	1	1
-49	1	1
-77	44	46
-87	11	11
-190	2	2
-45	1	1
-373	1	1
-47	1	1
-77	10	10
-186	1	1
-24	1	1
-1140	1	0
-214	1	1
-34	1	1
-89	1	1
-36	1	1
-288	0	1
-544	0	331
-320	1	0
-199	1	1
-16	1	1
-112	1	1
-29	1	1
-783	0	3
-311	1	1
-38	1	1
-59	1	1
-68	1	1
-52	1	1
-98	1	1
-166	7	7
-698	1	1
-68	1	1
-165	0	1
-114	1	1
-92	0	1
-14	1	1
-215	1	1
-81	1	1
-792	1	1
-31	1	1
-54	1	1
-44	1	1
-179	1	1
-26	1	1
-200	1	1
-30	1	1
-639	7	7
-505	40	42
-549	12	0
-19	1	1
-2184	1	0
-840	1	1
-69	1	1
-966	21	21
-33	12	0
-56	1	1
-94	1	1
-237	11	9
-189	1	1
-47	1	1
-318	3	0
-80	1	1
-94	5	1
-32	1	1
-126	16	16
-83	1	1
-47	1	1
-104	6	5
-56	1	1
-68	1	1
-417	12	13
-636	0	2
-30	1	1
-694	0	4
-95	1	1
-28	1	1
-1358	1	1
-19	1	1
-68	1	1
-97	1	1
-155	15	15
-323	1	7
-158	2	0
-42	6	0
-59	1	1
-314	14	14
-94	1	1
-64	1	1
-637	1	1
-21	1	1
-144	2	1
-229	11	5
-410	1	1
-96	1	1
-272	1	1
-22	1	1
-118	1	1
-44	1	1
-96	1	1
-48	1	1
-414	22	22
-373	13	13
-554	1	1
-87	10	0
-313	1	1
-37	1	1
-122	17	18
-179	1	1
-40	1	1
-591	8	8
-129	1	0
-70	1	1
-71	1	0
-73	10	6
-12	1	1
-203	0	6
-24	2	0
-45	4	0
-46	1	1
-186	9	9
-87	1	1
-28	1	1
-3625	0	1
-71	1	1
-126	1	1
-34	1	1
-532	0	2
-696	2	0
-555	1	7
-287	1	1
-30	0	3
-946	0	1
-88	1	1
-60	12	0
-12546	1	1
-37	1	0
-2071	0	1
-1253	9	9
-2003	0	1
-24677	0	2
-6212	1	1
-26	1	1
-816	0	4
-13602	18	15
-2375	2	0
-1957	2	0
-2394	6	0
-1561	0	1
-2805	4	0
-12333	8	0
-835	0	1
-426	0	27
-12156	0	18
-6903	2	0
-21807	3	0
-1588	1	0
-2605	1	1
-23	1	1
-11252	8	0
-298	6	7
-946	2	0
-232	0	1
-501	1	0
-4748	0	4
-770	0	7
-914	0	1
-295	1	0
-214	3	0
-121	0	1
-784	0	1
-2512	0	1
-4476	3	0
-926	0	1
-189	2	0
-3543	2	0
-893	1	1
-46	1	1
-1296	0	1
-153	0	1
-336	5	0
-228	1	1
-45	1	1
-207	3	0
-322	0	1
-658	1	0
-1516	3	0
-1025	0	13
-1518	0	1
-591	10	10
-3384	0	2
-182	12	0
-328	1	0
-301	0	1
-994	1	1
-18	0	6
-1743	0	1
-2350	22	23
-1548	0	7
-1976	1	0
-199	0	1
-5922	12	12
-873	0	3
-3080	12	8
-322	1	0
-490	1	0
-3602	1	0
-482	1	0
-3178	1	0
-5157	0	10
-753	0	1
-885	20	0
-1746	10	0
-4045	6	1
-3520	5	13
-2048	0	1
-3529
-
-chain 323865 chr6_cox_hap1 4731698 + 1267152 1270823 chr12 133851895 - 763369 785145 206180
-2772	0	815
-201	0	17291
-643	1	0
-54
-
-chain 65284 chr6_cox_hap1 4731698 + 2460102 2460796 chr6 171115067 - 140105134 140105832 1936071
-178	0	4
-516
-
-chain 59092 chr6_cox_hap1 4731698 + 4004481 4005101 chr4 191154276 + 48364786 48365406 2142970
-620
-
-chain 52987 chr6_cox_hap1 4731698 + 2674042 2675969 chr3 198022430 - 151830192 151832103 2402006
-102	557	556
-77	395	393
-169	221	221
-81	15	15
-81	35	35
-55	44	31
-95
-
-chain 40067 chr6_cox_hap1 4731698 + 3843208 3843655 chr1 249250621 - 189436883 189437330 3283815
-379	3	3
-65
-
-chain 34258 chr6_cox_hap1 4731698 + 2746095 2746514 chrX 155270560 - 17905933 17906346 3956727
-73	15	15
-155	1	1
-20	6	0
-17	1	1
-131
-
-chain 30865 chr6_cox_hap1 4731698 + 3996373 3996892 chr6 171115067 + 32713281 32713770 4500603
-73	89	59
-184	77	77
-96
-
-chain 30808 chr6_cox_hap1 4731698 + 1446736 1447059 chr11 135006516 - 73898390 73898713 4511271
-323
-
-chain 29563 chr6_cox_hap1 4731698 + 4089902 4090211 chr1 249250621 - 75305559 75305868 4853755
-309
-
-chain 29490 chr6_cox_hap1 4731698 + 3888227 3888535 chr20 63025520 - 21266962 21267270 4884719
-308
-
-chain 23990 chr6_cox_hap1 4731698 + 1313393 1314169 chr7 159138663 - 51241795 51242737 7706852
-178	101	101
-72	385	551
-40
-
-chain 19279 chr6_cox_hap1 4731698 + 2759716 2759948 chr5 180915260 + 25289600 25289832 11061062
-91	17	17
-124
-
-chain 18106 chr6_cox_hap1 4731698 + 3844292 3845362 chr7 159138663 + 50640514 50641583 3599691
-33	446	444
-74	250	251
-5	55	55
-48	69	69
-90
-
-chain 17763 chr6_cox_hap1 4731698 + 3840247 3840451 chr6 171115067 - 2083149 2083361 12325354
-52	0	8
-26	2	2
-124
-
-chain 17263 chr6_cox_hap1 4731698 + 3890221 3890428 chr4 191154276 + 3927369 3927573 12785973
-50	3	0
-26	4	4
-124
-
-chain 16283 chr6_cox_hap1 4731698 + 3267732 3267909 chr2 243199373 + 128545205 128545381 580296
-28	2	1
-147
-
-chain 16000 chr6_cox_hap1 4731698 + 3842640 3845155 chr5 180915260 - 144997615 145000132 3598025
-127	1430	1431
-95	205	207
-98	29	29
-57	419	418
-55
-
-chain 15874 chr6_cox_hap1 4731698 + 2744265 2744697 chr6 171115067 + 31304784 31305225 14156555
-58	158	158
-72	76	85
-68
-
-chain 15671 chr6_cox_hap1 4731698 + 1306242 1307477 chr6 171115067 - 139875690 139876935 14366990
-56	408	416
-54	620	622
-97
-
-chain 15351 chr6_cox_hap1 4731698 + 2791400 2791601 chr11 135006516 + 74748600 74748801 14697621
-99	26	26
-76
-
-chain 14920 chr6_cox_hap1 4731698 + 2791114 2791352 chr12 133851895 + 56894984 56895263 15150280
-65	69	110
-104
-
-chain 14203 chr6_cox_hap1 4731698 + 4000567 4000717 chr6 171115067 - 148948255 148948405 15963295
-150
-
-chain 14065 chr6_cox_hap1 4731698 + 3901987 3902139 chr6 171115067 - 138602057 138602209 16122340
-152
-
-chain 13939 chr6_cox_hap1 4731698 + 2790912 2791061 chr15 102531392 - 60147333 60147482 16276423
-149
-
-chain 13590 chr6_cox_hap1 4731698 + 4000399 4000543 chr2 243199373 + 178345068 178345212 16711221
-144
-
-chain 13240 chr6_cox_hap1 4731698 + 3909742 3911000 chr6 171115067 + 32548108 32549235 17164167
-52	422	421
-78	652	522
-54
-
-chain 12556 chr6_cox_hap1 4731698 + 1348680 1348819 chr2 243199373 - 184149574 184149713 18162971
-139
-
-chain 12225 chr6_cox_hap1 4731698 + 3890501 3890631 chr13 115169878 - 44980182 44980312 18662730
-130
-
-chain 12178 chr6_cox_hap1 4731698 + 3972449 3972615 chr14 107349540 - 58393926 58394091 18734378
-55	26	25
-85
-
-chain 12008 chr6_cox_hap1 4731698 + 3896810 3896939 chr8 146364022 + 49154427 49154556 18990652
-129
-
-chain 11746 chr6_cox_hap1 4731698 + 1299553 1299701 chr7 159138663 - 7702899 7703047 19437477
-54	14	14
-80
-
-chain 11718 chr6_cox_hap1 4731698 + 299537 299697 chr13 115169878 + 54026210 54026329 7331663
-62	41	0
-40	13	13
-4
-
-chain 11503 chr6_cox_hap1 4731698 + 3894886 3895312 chr11 135006516 - 111045874 111046295 19852909
-57	287	282
-82
-
-chain 11377 chr6_cox_hap1 4731698 + 3840583 3840825 chr11 135006516 + 57049649 57049891 20071170
-62	107	107
-73
-
-chain 10960 chr6_cox_hap1 4731698 + 3841022 3841165 chr12 133851895 - 49356794 49356937 20822626
-50	15	15
-78
-
-chain 10867 chr6_cox_hap1 4731698 + 2681465 2681622 chr6 171115067 - 132617434 132617597 20998653
-55	29	35
-73
-
-chain 10738 chr6_cox_hap1 4731698 + 3896518 3896639 chr10 135534747 + 59600699 59600817 21255898
-61	3	0
-57
-
-chain 10496 chr6_cox_hap1 4731698 + 3892569 3892679 chr1 249250621 - 174039531 174039641 21744607
-110
-
-chain 10328 chr6_cox_hap1 4731698 + 3840451 3840892 chr4 191154276 - 114078209 114078650 18698120
-15	372	372
-54
-
-chain 9881 chr6_cox_hap1 4731698 + 2734004 2734554 chr6 171115067 + 31205448 31206008 23100546
-72	423	433
-55
-
-chain 9755 chr6_cox_hap1 4731698 + 4021493 4021793 chr6 171115067 + 162490109 162490409 23390927
-65	181	181
-54
-
-chain 9560 chr6_cox_hap1 4731698 + 1301303 1301404 chr6 171115067 - 141323187 141323288 23857061
-101
-
-chain 9455 chr6_cox_hap1 4731698 + 3891953 3892158 chr6 171115067 + 32468923 32469135 24116909
-54	91	98
-60
-
-chain 9090 chr6_cox_hap1 4731698 + 2680711 2680821 chr3 198022430 - 94212956 94213066 24807216
-53	4	4
-53
-
-chain 7297 chr6_cox_hap1 4731698 + 3844000 3844124 chr8 146364022 + 96809146 96809270 3974525
-124
-
-chain 7162 chr6_cox_hap1 4731698 + 2675969 2676329 chr17 81195210 - 22005566 22005927 2836104
-7	302	303
-51
-
-chain 7031 chr6_cox_hap1 4731698 + 2673410 2673921 chr5 180915260 + 106108094 106108601 3265511
-58	376	372
-77
-
-chain 6840 chr6_cox_hap1 4731698 + 3971466 3971538 chr11 135006516 + 40011829 40011901 28544257
-72
-
-chain 6473 chr6_cox_hap1 4731698 + 3890669 3890742 chr1 249250621 - 102907635 102907704 21815173
-11	4	0
-58
-
-chain 6422 chr6_cox_hap1 4731698 + 4013834 4013902 chr6 171115067 + 32728707 32728775 29535230
-68
-
-chain 5921 chr6_cox_hap1 4731698 + 2681183 2681245 chr4 191154276 - 94306644 94306706 30842389
-62
-
-chain 5676 chr6_cox_hap1 4731698 + 2671999 2672059 chr3 198022430 + 95260601 95260661 31509897
-60
-
-chain 5595 chr6_cox_hap1 4731698 + 3972615 3972674 chr14 107349540 - 80191032 80191091 27115653
-59
-
-chain 5576 chr6_cox_hap1 4731698 + 1302171 1302230 chr18 78077248 - 3698437 3698496 31796878
-59
-
-chain 5517 chr6_cox_hap1 4731698 + 3842389 3842453 chr20 63025520 - 5368566 5368630 20848663
-64
-
-chain 5458 chr6_cox_hap1 4731698 + 3985007 3985065 chr2 243199373 + 112827415 112827473 32167738
-58
-
-chain 5421 chr6_cox_hap1 4731698 + 2677334 2677391 chr19 59128983 - 38462903 38462960 32247802
-57
-
-chain 5403 chr6_cox_hap1 4731698 + 3897499 3897556 chr12 133851895 + 59864980 59865037 32286341
-57
-
-chain 5339 chr6_cox_hap1 4731698 + 4081817 4081873 chr17 81195210 + 16805661 16805717 32499905
-56
-
-chain 5266 chr6_cox_hap1 4731698 + 4021149 4021204 chr3 198022430 + 6923000 6923055 32744278
-55
-
-chain 5103 chr6_cox_hap1 4731698 + 2743431 2743485 chr3 198022430 + 27241143 27241197 33231446
-54
-
-chain 5094 chr6_cox_hap1 4731698 + 3984745 3984799 chr6 171115067 + 67966752 67966806 33279729
-54
-
-chain 5089 chr6_cox_hap1 4731698 + 2674314 2675775 chr1 249250621 + 7474130 7475590 2473669
-98	975	974
-58	295	295
-35
-
-chain 5076 chr6_cox_hap1 4731698 + 1300901 1300955 chr11 135006516 + 101518151 101518205 33343005
-54
-
-chain 5067 chr6_cox_hap1 4731698 + 2741303 2741357 chr19 59128983 - 37393851 37393905 33368570
-54
-
-chain 5058 chr6_cox_hap1 4731698 + 3967166 3967220 chr1 249250621 - 172942963 172943017 33379585
-54
-
-chain 5020 chr6_cox_hap1 4731698 + 1345886 1345938 chr6 171115067 + 29692684 29692736 33527644
-52
-
-chain 4959 chr6_cox_hap1 4731698 + 3892516 3892569 chr18 78077248 + 5090594 5090647 22176918
-53
-
-chain 4957 chr6_cox_hap1 4731698 + 2678048 2678100 chr9 141213431 - 31846047 31846099 33735026
-52
-
-chain 4957 chr6_cox_hap1 4731698 + 3946024 3946076 chr6 171115067 + 32439356 32439408 33735182
-52
-
-chain 4930 chr6_cox_hap1 4731698 + 3894496 3894548 chrX 155270560 - 4541772 4541824 33815607
-52
-
-chain 4914 chr6_cox_hap1 4731698 + 2673741 2673793 chrX 155270560 + 7935883 7935935 17711968
-52
-
-chain 4885 chr6_cox_hap1 4731698 + 2740950 2741002 chr5 180915260 - 163072859 163072911 33995114
-52
-
-chain 4884 chr6_cox_hap1 4731698 + 2760326 2760379 chr7 159138663 + 8699184 8699237 23141527
-53
-
-chain 4821 chr6_cox_hap1 4731698 + 3935381 3935432 chr6 171115067 - 11031703 11031754 34213824
-51
-
-chain 4685 chr6_cox_hap1 4731698 + 3915703 3915753 chr12 133851895 + 112261417 112261467 34690968
-50
-
-chain 4613 chr6_cox_hap1 4731698 + 2844682 2846505 chr13 115169878 - 41386504 41386960 3856143
-33	479	279
-7	46	0
-24	11	0
-33	1097	0
-24	13	0
-56
-
-chain 4221 chr6_cox_hap1 4731698 + 2437589 2437671 chr14 107349540 + 75461679 75461839 4623812
-28	0	78
-54
-
-chain 4202 chr6_cox_hap1 4731698 + 2673968 2674023 chr3 198022430 + 156309398 156309453 19139889
-55
-
-chain 4186 chr6_cox_hap1 4731698 + 3955813 3955860 chr5 180915260 - 113986983 113987030 34971958
-47
-
-chain 4136 chr6_cox_hap1 4731698 + 2672610 2672662 chr13 115169878 + 42049101 42049153 23521137
-52
-
-chain 3978 chr6_cox_hap1 4731698 + 2673481 2673609 chrX 155270560 - 130914483 130914611 4485241
-128
-
-chain 3891 chr6_cox_hap1 4731698 + 2760039 2760115 chr16 90354753 - 58442153 58442229 17002345
-76
-
-chain 3877 chr6_cox_hap1 4731698 + 2672485 2672526 chr15 102531392 + 40275232 40275273 21164310
-41
-
-chain 3776 chr6_cox_hap1 4731698 + 2759549 2759589 chr1 249250621 - 143888892 143888932 33598889
-40
-
-chain 3639 chr6_cox_hap1 4731698 + 3890631 3890669 chr3 198022430 + 101411146 101411184 20382394
-38
-
-chain 3574 chr6_cox_hap1 4731698 + 2673146 2673184 chr3 198022430 - 173409162 173409200 29596627
-38
-
-chain 3573 chr6_cox_hap1 4731698 + 2790788 2791088 chr16 90354753 + 31183111 31183406 18086604
-58	215	210
-27
-
-chain 3489 chr6_cox_hap1 4731698 + 3842885 3842952 chrX 155270560 - 48144545 48144612 19043441
-67
-
-chain 3394 chr6_cox_hap1 4731698 + 3896482 3896518 chrX 155270560 - 4545757 4545793 28280414
-36
-
-chain 3393 chr6_cox_hap1 4731698 + 3840688 3840752 chr8 146364022 + 7016797 7016861 21522443
-64
-
-chain 3345 chr6_cox_hap1 4731698 + 1313572 1313633 chrX 155270560 - 101738888 101738949 11083842
-61
-
-chain 3209 chr6_cox_hap1 4731698 + 3842526 3842560 chr4 191154276 + 80147803 80147837 32673071
-34
-
-chain 3189 chr6_cox_hap1 4731698 + 2790872 2790912 chr11 135006516 - 131957088 131957128 22905486
-40
-
-chain 3053 chr6_cox_hap1 4731698 + 4021558 4021590 chr2 243199373 + 38182694 38182726 24706669
-32
-
-chain 3045 chr6_cox_hap1 4731698 + 2677533 2677565 chr11 135006516 - 20509488 20509520 33762261
-32
-
-chain 3033 chr6_cox_hap1 4731698 + 3842991 3843062 chr1 249250621 - 90164672 90164743 11203780
-71
-
-chain 2997 chr6_cox_hap1 4731698 + 2759644 2759694 chr16 90354753 + 47212776 47212826 11278440
-50
-
-chain 2984 chr6_cox_hap1 4731698 + 3842575 3842625 chrX 155270560 + 76422698 76422748 20248077
-50
-
-chain 2960 chr6_cox_hap1 4731698 + 3896779 3896810 chr21 48129895 + 18677639 18677670 32477029
-31
-
-chain 2845 chr6_cox_hap1 4731698 + 2673184 2673214 chr3 198022430 - 156603737 156603767 26791325
-30
-
-chain 2761 chr6_cox_hap1 4731698 + 3844406 3844465 chr6 171115067 + 18547856 18547915 4276868
-59
-
-chain 2745 chr6_cox_hap1 4731698 + 3842326 3844197 chr11 135006516 - 48638733 48640605 3968835
-61	675	676
-53	1015	1015
-67
-
-chain 2739 chr6_cox_hap1 4731698 + 2673924 2673968 chr8 146364022 + 90457478 90457522 20607564
-44
-
-chain 2729 chr6_cox_hap1 4731698 + 1302230 1302259 chr14 107349540 + 79349511 79349540 33029767
-29
-
-chain 2723 chr6_cox_hap1 4731698 + 2673793 2673825 chr5 180915260 - 70673106 70673138 18877917
-32
-
-chain 2561 chr6_cox_hap1 4731698 + 299599 299640 chr6 171115067 + 20244702 20244743 12574490
-41
-
-chain 2518 chr6_cox_hap1 4731698 + 4021649 4021704 chr16 90354753 - 20685134 20685189 24272036
-55
-
-chain 2470 chr6_cox_hap1 4731698 + 2745980 2746030 chr1 249250621 + 111776293 111776343 7607561
-50
-
-chain 2373 chr6_cox_hap1 4731698 + 2760156 2760181 chr17 81195210 - 66761411 66761436 17362234
-25
-
-chain 2319 chr6_cox_hap1 4731698 + 2900811 2900837 chr6 171115067 + 31357660 31357686 3303778
-26
-
-chain 2312 chr6_cox_hap1 4731698 + 2759490 2759549 chr4 191154276 + 98204882 98204941 18366184
-59
-
-chain 2209 chr6_cox_hap1 4731698 + 3843799 3843896 chr12 133851895 + 60159606 60159703 5400255
-97
-
-chain 2146 chr6_cox_hap1 4731698 + 1299766 1299827 chr12 133851895 + 105697047 105697108 23835468
-61
-
-chain 2140 chr6_cox_hap1 4731698 + 3840491 3840558 chr6 171115067 - 96829007 96829074 20827044
-67
-
-chain 2000 chr6_cox_hap1 4731698 + 1313744 1313777 chr4 191154276 + 153686345 153686378 8134925
-33
-
-chain 1995 chr6_cox_hap1 4731698 + 3842817 3842864 chr4 191154276 - 47817470 47817517 17212566
-47
-
-chain 1991 chr6_cox_hap1 4731698 + 2845315 2845345 chr4 191154276 - 30046978 30047008 15284842
-30
-
-chain 1990 chr6_cox_hap1 4731698 + 4008195 4011710 chr6 171115067 + 32722816 32726965 28700009
-61	2506	2690
-85	515	965
-52	103	103
-193
-
-chain 1943 chr6_cox_hap1 4731698 + 3844851 3845272 chr11 135006516 + 83226111 83226530 3906185
-58	323	321
-40
-
-chain 1927 chr6_cox_hap1 4731698 + 2759609 2759644 chr7 159138663 - 110094552 110094587 24531071
-35
-
-chain 1727 chr6_cox_hap1 4731698 + 2674522 2674583 chr20 63025520 - 53185733 53185794 4777998
-61
-
-chain 1671 chr6_cox_hap1 4731698 + 3843897 3843947 chr9 141213431 + 78317603 78317653 4355881
-50
-
-chain 1637 chr6_cox_hap1 4731698 + 2760272 2760326 chr2 243199373 + 119859185 119859239 11695157
-54
-
-chain 1632 chr6_cox_hap1 4731698 + 2673214 2673313 chr4 191154276 - 69486891 69486990 2834158
-99
-
-chain 1628 chr6_cox_hap1 4731698 + 3842952 3842991 chr2 243199373 - 116273698 116273737 14990340
-39
-
-chain 1584 chr6_cox_hap1 4731698 + 1313851 1313915 chr1 249250621 - 24961912 24961976 17607390
-64
-
-chain 1548 chr6_cox_hap1 4731698 + 2672923 2673038 chr2 243199373 - 193655574 193655689 3516324
-115
-
-chain 1509 chr6_cox_hap1 4731698 + 2674838 2674895 chr5 180915260 + 165569524 165569581 2491813
-57
-
-chain 1508 chr6_cox_hap1 4731698 + 2675985 2676708 chr6 171115067 - 141365359 141366083 3289535
-50	615	616
-58
-
-chain 1507 chr6_cox_hap1 4731698 + 2673661 2673741 chr4 191154276 + 138835824 138835904 16168846
-80
-
-chain 1489 chr6_cox_hap1 4731698 + 2845209 2846585 chrX 155270560 - 102215688 102216455 6549884
-27	1297	452
-2	0	236
-50
-
-chain 1467 chr6_cox_hap1 4731698 + 2760221 2760272 chr7 159138663 + 122232756 122232807 13147168
-51
-
-chain 1456 chr6_cox_hap1 4731698 + 3844931 3844983 chr14 107349540 + 48881293 48881345 9320615
-52
-
-chain 1452 chr6_cox_hap1 4731698 + 2673321 2674838 chrX 155270560 - 1098426 1099942 3000529
-51	1428	1427
-38
-
-chain 1354 chr6_cox_hap1 4731698 + 1313967 1314021 chr4 191154276 + 544307 544361 14282164
-54
-
-chain 1310 chr6_cox_hap1 4731698 + 3843714 3843782 chrX 155270560 + 17249549 17249617 3972308
-68
-
-chain 1307 chr6_cox_hap1 4731698 + 1498573 1498607 chr5 180915260 - 156542608 156542642 2089959
-34
-
-chain 1294 chr6_cox_hap1 4731698 + 2760418 2760473 chr4 191154276 + 147516497 147516552 12285122
-55
-
-chain 1278 chr6_cox_hap1 4731698 + 3845015 3845082 chr15 102531392 + 92125438 92125505 4023305
-67
-
-chain 1247 chr6_cox_hap1 4731698 + 3844702 3844748 chr2 243199373 - 7511493 7511539 13743690
-46
-
-chain 1194 chr6_cox_hap1 4731698 + 2676043 2676103 chr1 249250621 + 94380187 94380247 20995710
-60
-
-chain 1160 chr6_cox_hap1 4731698 + 2676209 2676237 chrX 155270560 + 56836392 56836420 21177535
-28
-
-chain 1125 chr6_cox_hap1 4731698 + 3890818 3890886 chr8 146364022 - 86779351 86779419 20749389
-68
-
-chain 1106 chr6_cox_hap1 4731698 + 2760181 2760221 chr9 141213431 + 74027839 74027879 13331514
-40
-
-chain 1039 chr6_cox_hap1 4731698 + 2674441 2674507 chr3 198022430 - 71498815 71498881 4421669
-66
-
-chain 1033 chr6_cox_hap1 4731698 + 2676372 2676431 chr5 180915260 - 20894072 20894131 3124143
-59
-
-chain 1014 chr6_cox_hap1 4731698 + 2759961 2759990 chr10 135534747 + 69125589 69125618 23828230
-29
-
-chain 1005 chr6_cox_hap1 4731698 + 2760005 2760039 chr10 135534747 + 5299750 5299784 23898321
-34
-
-chain 982 chr6_cox_hap1 4731698 + 2759426 2759479 chr13 115169878 + 111326976 111327029 14386536
-53
-
-chain 977 chr6_cox_hap1 4731698 + 3845410 3845467 chrX 155270560 - 144584413 144584470 4043690
-57
-
-chain 963 chr6_cox_hap1 4731698 + 2674253 2676589 chr9 141213431 - 119032541 119034846 4479982
-47	2231	2200
-58
-
-chain 919 chr6_cox_hap1 4731698 + 2677255 2677315 chr4 191154276 + 45112377 45112437 22402156
-60
-
-chain 883 chr6_cox_hap1 4731698 + 3843656 3843714 chr18 78077248 + 28929278 28929336 6530663
-58
-
-chain 881 chr6_cox_hap1 4731698 + 2675038 2675098 chr5 180915260 - 79225133 79225193 14536118
-60
-
-chain 858 chr6_cox_hap1 4731698 + 2676338 2676372 chr7 159138663 - 148564023 148564057 6699557
-34
-
-chain 857 chr6_cox_hap1 4731698 + 2676103 2677646 chr4 191154276 + 171430336 171431860 18546235
-50	1412	1393
-81
-
-chain 838 chr6_cox_hap1 4731698 + 3843947 3843980 chr18 78077248 - 28720814 28720847 7914761
-33
-
-chain 819 chr6_cox_hap1 4731698 + 2673062 2673118 chr2 243199373 + 149156283 149156339 14209631
-56
-
-chain 796 chr6_cox_hap1 4731698 + 1314021 1314060 chrX 155270560 - 10752795 10752834 16687246
-39
-
-chain 747 chr6_cox_hap1 4731698 + 1314275 1314339 chr12 133851895 + 57178267 57178331 20664563
-64
-
-chain 731 chr6_cox_hap1 4731698 + 1638596 1638636 chr15 102531392 + 55738847 55738887 18753864
-40
-
-chain 704 chr6_cox_hap1 4731698 + 3842767 3842817 chr9 141213431 + 32212289 32212339 4117535
-50
-
-chain 701 chr6_cox_hap1 4731698 + 2674653 2674701 chr16 90354753 - 23821388 23821436 3556080
-48
-
-chain 679 chr6_cox_hap1 4731698 + 1313640 1313672 chr21 48129895 - 2887431 2887463 13569070
-32
-
-chain 672 chr6_cox_hap1 4731698 + 3844325 3844357 chr10 135534747 - 103351577 103351609 5595826
-32
-
-chain 661 chr6_cox_hap1 4731698 + 2676159 2676209 chr9 141213431 + 85388422 85388472 5334226
-50
-
-chain 661 chr6_cox_hap1 4731698 + 3844987 3845015 chr2 243199373 + 98215178 98215206 5611311
-28
-
-chain 650 chr6_cox_hap1 4731698 + 2672375 2672435 chr7 159138663 - 140047518 140047578 22707410
-60
-
-chain 643 chr6_cox_hap1 4731698 + 2677085 2677144 chr6 171115067 + 74793831 74793890 5895430
-59
-
-chain 604 chr6_cox_hap1 4731698 + 1314169 1314195 chrX 155270560 - 101522169 101522195 11588450
-26
-
-chain 595 chr6_cox_hap1 4731698 + 2675343 2675387 chr12 133851895 - 110550302 110550346 3606052
-44
-
-chain 571 chr6_cox_hap1 4731698 + 2672827 2672901 chr3 198022430 + 50956018 50956092 15278850
-74
-
-chain 525 chr6_cox_hap1 4731698 + 3902955 3903021 chr6 171115067 + 32474022 32474088 26162225
-66
-
-chain 485 chr6_cox_hap1 4731698 + 2671938 2671998 chr1 249250621 - 193322919 193322979 8312425
-60
-
-chain 412 chr6_cox_hap1 4731698 + 2672740 2672827 chr8 146364022 - 113140827 113140914 13566503
-87
-
-chain 395 chr6_cox_hap1 4731698 + 2846505 2846533 chrX 155270560 - 102216470 102216498 6380381
-28
-
-chain 395 chr6_cox_hap1 4731698 + 2675098 2675125 chr12 133851895 + 9999203 9999230 23891782
-27
-
-chain 347 chr6_cox_hap1 4731698 + 2671704 2671754 chr15 102531392 - 65978487 65978537 12839282
-50
-
-chain 251 chr6_cox_hap1 4731698 + 2671761 2671812 chr9 141213431 + 17677697 17677748 27279073
-51
-
-chain 184 chr6_cox_hap1 4731698 + 2672526 2672587 chrX 155270560 - 91681431 91681492 16167874
-61
-
-chain 369716150 chr6_qbl_hap2 4565931 + 0 4565931 chr6 171115067 + 28742641 33379750 32
-2350	0	1
-1750	0	2
-3815	1	0
-9743	0	2
-3960	0	4
-2109	0	2
-33	2	0
-9000	0	2
-16647	0	2
-38786	1	0
-80529	0	1
-14475	0	1
-6819	1	0
-6845	1	3
-6188	0	1
-6397	0	1
-345	1	0
-68374	2	0
-39133	39	39
-7774	7	0
-1489	1	1
-72	1	1
-2260	0	2
-10629	0	1
-1249	1	1
-195	1	1
-18132	0	1
-1324	0	2
-5438	5	0
-2061	1	0
-3982	6	6
-1725	0	1
-3153	1	0
-18	1	0
-18	1	0
-2026	1	0
-4175	10	10
-4235	18	18
-493	9	9
-4767	7	7
-1225	1	0
-8	1	1
-151	1	2
-5079	1	1
-28	1	1
-281	11	11
-1178	0	4
-685	8	0
-48	4	0
-1701	1	1
-43	5	5
-862	18	18
-58	1	1
-66	1	1
-420	1	1
-44	1	1
-680	4	4
-1675	1	1
-83	1	1
-3082	4	0
-5467	1	1
-27	0	1
-1099	16	0
-627	51	51
-1278	6	1
-129	1	1
-25	1	1
-1397	15	15
-810	1	1
-27	1	1
-1192	2	0
-7515	4	0
-979	0	3
-3406	0	2
-2340	1	1
-20	1	1
-1139	1	1
-26	1	1
-787	0	1
-1416	3	1
-22815	4	4
-126	1	0
-38	1	1
-140	1	0
-999	0	17
-56	0	15
-11759	161391	161513
-11155	0	2
-5376	0	1
-19253	1	0
-4212	1	1
-3671	1	0
-21	0	6
-4451	1	0
-27910	1	0
-9946	0	1
-11233	1	1
-32	1	1
-2238	1	1
-20	1	1
-3659	22	16
-1218	1	0
-1638	6	6
-228	1	1
-45	1	1
-2048	0	3
-461	1	0
-20759	1	0
-3778	2	1
-1268	1	0
-1511	1	1
-42	2	0
-24	1	1
-4119	22	0
-1757	1	0
-1527	1	1
-29	1	1
-1886	1	0
-10628	12	0
-46568	1	0
-18985	0	10
-1825	3	4
-5288	0	9
-1071	50	50
-1607	1	5
-722	0	1
-502	0	1
-1025	0	1
-134	14	0
-4944	0	1
-319	1	0
-6178	0	1
-2898	0	2
-143	0	1
-1775	1	0
-2123	0	1
-2715	1	0
-4901	70	66
-2884	1	0
-1362	1	0
-1233	0	8
-2134	0	1
-1042	0	1
-163	1	1
-45	1	1
-50	2	0
-64	1	1
-48	1	1
-380	0	1
-30	1	0
-30	1	1
-61	1	1
-22	1	1
-368	4	4
-319	5	7
-310	1	1
-37	3	1
-162	1	1
-194	2	0
-36	1	1
-242	9	9
-1932	1	1
-16	1	1
-528	1	1
-20	1	1
-509	0	5
-76	1	1
-21	1	1
-439	15	15
-2779	1	0
-1597	24	28
-59	12	12
-307	1	0
-516	1	0
-286	11	33
-339	5	0
-570	1	1
-37	1	1
-220	1	0
-72	1	1
-144	1	1
-48	1	1
-247	2	0
-174	9	10
-816	1	0
-940	1	1
-45	1	1
-91	3	3
-71	1	1
-291	14	14
-100	1	1
-23	1	1
-452	3	3
-85	1	1
-65	1	1
-77	1	1
-252	0	1
-129	15	15
-432	10	0
-85	1	1
-28	1	1
-189	2	1
-71	1	1
-52	8	0
-810	2	2
-63	1	1
-378	1	1
-26	1	1
-187	31	36
-966	1	1
-25	1	1
-91	12	12
-125	1	1
-38	1	1
-433	2	0
-596	1	1
-48	1	1
-465	4	4
-64	1	1
-20	1	1
-525	5	5
-237	3	8
-183	11	0
-364	4	3
-201	1	1
-42	1	1
-56	1	1
-115	1	0
-67	16	16
-244	1	1
-54	5	5
-929	1	1
-21	1	1
-126	0	3
-830	1	11
-59	1	1
-537	0	2
-24	1	1
-745	15	15
-810	1	0
-425	1	1
-89	1	1
-592	1	1
-49	1	1
-352	0	1
-142	1	1
-30	1	1
-95	1	1
-45	1	1
-227	1	1
-53	1	1
-130	1	1
-18	1	1
-138	1	1
-90	1	1
-129	41	41
-50	1	1
-79	1	1
-117	1	1
-31	1	1
-155	155	0
-34	1	1
-50	5	5
-57	1	1
-152	1	1
-30	1	1
-177	5	5
-345	1	1
-39	1	1
-504	18	18
-596	12	12
-54	1	1
-158	1	1
-164	1	1
-34	1	1
-626	15	15
-866	0	10
-1051	0	2611
-680	0	1
-1537	0	18
-75	1	0
-147	52	1
-119	0	12
-23	1	1
-1927	13	13
-1702	2	0
-3694	1	1
-18	1	1
-958	43	47
-246	2	0
-146	1	1
-49	1	1
-410	1	0
-667	1	1
-38	1	1
-362	7	1
-159	2	0
-515	2	0
-1026	1	1
-29	1	1
-249	0	6
-129	1	1
-33	4	0
-10	1	5
-1236	1	1
-20	1	1
-138	10	9
-448	0	3
-660	1	1
-28	1	1
-83	1	1
-51	1	1
-2659	1	1
-38	1	1
-424	0	1
-70	1	1
-820	1	1
-26	1	1
-1472	1	1
-21	1	1
-491	5	5
-2372	2	0
-533	6	0
-441	1	7
-1689	1	1
-26	3	4
-879	16	16
-514	0	2
-58	1	1
-350	1	0
-769	1	1
-39	1	1
-429	10	10
-134	0	4
-37	1	1
-144	8	8
-668	1	1
-22	1	1
-344	2	0
-262	2	2
-38	0	1
-70	18	18
-84	11	13
-198	0	1
-32	1	1
-74	11	15
-1255	0	2
-332	1	1
-21	1	1
-193	8	24
-34	1	1
-79	1	1
-29	1	1
-536	1	0
-308	0	1
-850	0	32
-23	1	1
-651	1	1
-22	0	3
-136	1	1
-48	1	1
-330	9	9
-1108	1	1
-98	1	1
-582	0	2
-713	7	7
-89	1	0
-293	9	8
-125	1	1
-31	1	1
-192	6	6
-171	17	17
-681	1	1
-43	1	1
-514	1	1
-68	1	1
-537	1	1
-35	1	1
-159	6	6
-778	2	2
-44	1	1
-168	0	7
-211	1	1
-42	1	1
-1253	1	1
-29	1	1
-320	1	1
-36	2	2
-55	1	2
-108	1	1
-33	1	1
-317	1	1
-35	1	1
-553	8	8
-386	1	1
-26	1	1
-540	1	1
-31	1	1
-65	0	1
-625	12	12
-313	0	1
-52	1	1
-22	1	1
-583	1	1
-49	1	1
-678	37	37
-784	3	0
-838	1	1
-19	12	0
-1129	1	1
-36	1	1
-553	8	8
-109	1	1
-45	1	1
-841	16	15
-157	1	1
-31	2	2
-204	18	19
-487	1	1
-29	1	1
-374	1	1
-67	1	1
-720	13	13
-266	10	10
-330	16	14
-413	1	1
-44	1	1
-78	6	6
-181	2	2
-36	1	1
-397	1	1
-20	1	1
-311	1	1
-48	2	2
-1298	11	11
-186	1	1
-33	1	1
-216	4	4
-35	1	1
-194	10	10
-310	1	1
-51	1	1
-136	1	1
-49	1	1
-521	1	1
-23	1	1
-242	1	1
-49	1	1
-600	1	1
-31	1	1
-413	15	15
-290	1	1
-49	1	1
-527	17	17
-340	12	11
-1025	1	0
-2572	1	1
-29	1	1
-397	2	5
-668	13	13
-541	1	1
-59	0	2
-6	1	1
-122	14	14
-51	1	1
-46	1	1
-72	5	5
-110	1	1
-76	1	1
-164	0	21
-136	1	1
-12	1	1
-66	16	16
-456	37	34
-371	7	7
-48	1	1
-194	10	10
-108	1	1
-60	1	1
-122	0	1
-48	1	1
-238	1	1
-32	0	1
-100	1	0
-72	1	0
-390	1	1
-38	1	1
-144	1	1
-27	0	4
-184	21	228
-49	1	1
-608	0	1
-152	1	1
-31	1	1
-281	8	8
-337	1	1
-45	1	1
-222	1	1
-54	1	1
-346	1	0
-44	1	1
-368	1	1
-72	1	1
-502	36	18
-63	1	1
-43	0	4
-136	1	1
-42	1	1
-80	4	4
-35	1	0
-89	1	1
-24	0	5
-829	13	13
-73	1	1
-28	14	0
-233	1	1
-42	0	3
-85	0	1
-400	1	1
-40	1	1
-538	25	25
-174	1	1
-20	1	1
-705	1	1
-26	2	2
-614	1	1
-44	1	1
-793	1	1
-16	1	1
-747	5	5
-804	1	1
-29	1	1
-166	1	1
-43	1	1
-233	1	1
-44	1	1
-507	0	3
-110	8	8
-133	1	1
-31	1	1
-165	1	1
-29	1	1
-1249	1	1
-26	4	0
-56	1	1
-67	1	1
-716	1	1
-46	0	1
-16	1	1
-174	1	1
-96	1	1
-141	1	1
-39	0	4
-263	1	1
-18	1	1
-259	4	4
-38	1	1
-104	1	1
-40	1	0
-248	1	1
-18	1	1
-238	1	1
-32	1	1
-70	0	2
-16	1	1
-818	1	1
-22	4	4
-492	4	4
-1145	1	1
-46	1	1
-53	1	0
-38	1	1
-373	1	1
-60	1	1
-1149	0	1
-20	1	1
-1294	1	1
-41	1	1
-316	4	4
-42	1	1
-218	12	12
-363	1	1
-24	1	1
-457	10	10
-414	13	13
-825	1	1
-41	1	1
-492	0	4
-1374	1	1
-18	1	1
-808	2	2
-335	6	4
-880	1	1
-35	1	1
-236	1	1
-67	1	1
-298	0	1
-147	4	4
-322	11	11
-613	1	1
-62	1	1
-340	1	1
-22	1	1
-1057	1	1
-57	1	1
-358	1	1
-128	1	1
-146	10	10
-490	1	1
-20	1	1
-62	1	1
-88	1	1
-293	1	1
-28	1	0
-20	1	1
-83	0	1
-90	1	1
-312	1	1
-44	1	1
-1213	1	1
-51	1	1
-467	1	1
-39	1	1
-122	14	0
-35	1	1
-485	14	14
-110	12	0
-127	1	1
-5450	0	5
-1699	9	9
-3278	0	2
-28	1	1
-2211	2	0
-521	1	1
-18	1	1
-784	18	18
-1603	0	248
-4769	47	47
-4486	4	4
-103	0	2
-88	1	1
-95	1	1
-2174	1	1
-22	0	1
-1244	7	7
-922	2	0
-1507	1	1
-44	1	1
-208	6	1
-1946	2	2
-85	0	1
-133	1	1
-666	1	0
-52	1	1
-29	1	1
-148	0	5
-30	1	1
-790	14	14
-52	1	1
-32	1	1
-121	1	1
-37	1	1
-396	3	2
-324	1	1
-152	1	1
-71	4	4
-27	1	1
-115	1	1
-101	1	1
-423	10	10
-294	1	1
-101	1	0
-4	0	1
-174	1	1
-146	1	1
-103	1	1
-134	1	1
-16	1	1
-378	1	1
-85	1	1
-134	1	1
-25	1	1
-54	3	3
-55	1	1
-67	1	1
-22	1	1
-54	13	13
-55	11	11
-120	1	1
-23	1	1
-51	1	1
-22	1	1
-364	1	1
-278	1	1
-354	34448	40149
-311	1	1
-33	1	2
-26	6	6
-474	1	1
-36	1	1
-151	1	1
-29	1	1
-120	1	1
-23	1	1
-865	1	1
-39	1	1
-553	1	1
-69	1	1
-116	1	0
-1618	9	9
-820	11	11
-173	0	8
-405	9	9
-196	1	1
-26	1	1
-173	1	1
-27	5	1
-42	1	1
-676	17	19
-77	1	3
-65	16	16
-69	1	0
-277	1	1
-44	1	1
-72	0	3
-70	1	1
-54	1	1
-240	1	0
-31	1	1
-1192	18	19
-454	28	28
-373	1	1
-46	1	1
-1565	1	1
-53	2	2
-543	1	1
-38	1	1
-985	1	1
-27	0	1
-8	1	1
-158	0	38
-656	1	1
-104	1	1
-771	1	1
-21	1	1
-398	1	1
-16	1	2
-163	4	3
-94	1	1
-44	1	1
-172	1	0
-122	5	5
-193	16	16
-535	2	2
-17	1	0
-93	1	1
-580	1	1
-91	1	1
-141	1	1
-79	1	1
-80	13	13
-165	1	1
-129	1	1
-114	1	1
-30	1	1
-83	1	1
-35	1	1
-126	16	16
-270	0	1
-111	9	9
-151	1	1
-118	1	1
-253	1	1
-45	18468	20220
-102	1	1
-20	1	1
-111	1	1
-97	1	0
-86	1	1
-70	0	4
-69	1	1
-52	0	1
-219	3	3
-76	1	5
-209	4	4
-22	1	1
-61	1	1
-91	1	1
-194	0	21
-15	0	1
-229	1	1
-185	0	1
-113	5	5
-45	1	1
-53	1	1
-37	1	1
-157	1	1
-279	1	1
-233	1	1
-19	0	8
-67	2	0
-41	1	1
-102	12	12
-275	14	14
-70	1	1
-82	2	2
-224	5	1
-490	0	22
-3841	1	0
-3216	1	1
-42	1	1
-1914	0	3
-616	11	12
-144	1	1
-21	2	1
-775	1	1
-50	1	1
-50	2	2
-96	2	2
-1522	4	0
-58	0	2
-1099	1	1
-42	1	1
-3502	0	6
-255	1	1
-40	1	1
-150	0	4
-18	1	1
-589	1	1
-37	1	1
-539	5	5
-354	1	3
-128	1	1
-58	1	1
-159	1	1
-5	2	0
-21	1	1
-231	1	1
-82	3	3
-69	3	0
-549	1	1
-69	1	1
-74	9	9
-126	1	1
-47	1	1
-614	9	9
-138	1	1
-29	1	1
-681	1	1
-49	1	1
-67	1	1
-19	4	9
-234	1	1
-93	1	1
-60	4	4
-96	4	4
-76	1	1
-169	1	1
-418	1	1
-130	1	1
-44	1	1
-69	1	1
-80	1	1
-76	1	1
-41	1	1
-129	6	11
-363	1	1
-42	1	1
-295	1	1
-43	1	1
-83	6	0
-52	0	2
-1228	1	1
-34	1	1
-3527	20	0
-1768	2	1
-2467	0	2
-101	10	0
-129	1	1
-37	1	1
-121	1	1
-25	1	1
-161	1	0
-97	1	1
-124	1	0
-178	1	1
-34	1	1
-54	1	1
-38	1	2
-634	83	83
-874	1	1
-40	1	1
-59	0	1
-59	4	4
-316	1	1
-178	1	1
-103	1	1
-61	1	1
-220	1	1
-61	1	1
-296	1	1
-33	1	1
-185	12	12
-269	1	1
-84	1	1
-864	15	15
-241	1	0
-79	3	3
-161	1	1
-48	1	1
-539	1	1
-44	1	1
-357	1	1
-37	1	1
-436	1	1
-59	1	1
-71	1	1
-261	1	1
-289	1	1
-47	1	1
-95	12	12
-97	4	4
-27	1	1
-100	1	1
-16	1	1
-101	1	1
-33	1	2
-481	1	1
-42	1	1
-206	7	7
-56	12	12
-179	10	10
-80	1	1
-41	1	1
-251	1	1
-306	1	1
-80	2	0
-4	94	0
-433	1	1
-23	1	1
-107	1	0
-265	1	1
-49	1	1
-282	72	72
-838	7	7
-60	1	0
-108	1	1
-24	1	1
-134	1	1
-32	1	0
-158	0	2
-1040	1	1
-42	1	1
-737	1	0
-790	1	1
-9	2	1
-11	1	1
-129	1	1
-23	1	1
-894	1	1
-43	3	3
-854	1	1
-23	0	1
-23	2	0
-26	1	1
-395	0	15
-403	5	5
-14	1	1
-2454	1	1
-76	1	1
-170	1	1
-18	1	1
-574	4	0
-291	1	1
-47	1	1
-786	19	0
-88	10	11
-48	1	1
-58	1	1
-28	1	1
-500	0	2
-1280	1	1
-28	1	1
-975	1	0
-3231	1	0
-865	1	1
-39	1	1
-1561	109	100
-1037	0	1
-510	1	1
-49	1	1
-1253	1	1
-19	1	1
-1078	3	0
-221	1	1
-21	1	0
-899	0	4
-466	1	1
-38	1	1
-297	0	3
-730	19	6
-1043	1	1
-49	1	1
-273	0	1
-708	1	0
-364	14	13
-58	1	1
-74	1	1
-614	60	60
-1889	4	0
-531	1	1
-19	1	1
-1944	5	0
-163	6	7
-1206	0	2
-718	1	1
-41	7	0
-1795	13	13
-1390	1	0
-2933	0	16
-540	1	1
-14	1	1
-167	1	0
-897	17	4
-1208	1	0
-1307	1	1
-20	1	1
-540	0	10
-203	2	0
-44	1	1
-298	1	0
-87	11	10
-491	14	8
-991	1	1
-74	6	0
-179	1	1
-34	1	1
-448	10	0
-1688	1	1
-38	21	0
-173	1	1
-49	2	1
-2161	30	30
-203	1	0
-89	1	0
-492	1	1
-30	1	1
-1212	3	0
-990	1	1
-38	1	1
-780	1	0
-191	1	1
-47	6	6
-393	1	1
-41	1	1
-259	1	0
-941	1	1
-20	1	1
-185	0	6
-165	0	16
-420	3	1
-130	1	1
-31	1	1
-253	18	18
-720	16	18
-1257	3	0
-986	0	4
-3311	1	1
-26	1	1
-556	0	4
-120	0	1
-1273	1	1
-20	1	1
-338	8	8
-3965	0	3
-15	1	1
-2531	17	17
-3334	5	5
-121	13	13
-161	1	1
-45	1	1
-94	14	14
-63	9	10
-2108	1	1
-34	1	1
-1436	1	1
-47	1	1
-273	7	0
-153	0	5
-283	12	12
-619	1	1
-36	0	4
-225	1	1
-23	1	1
-553	5	0
-2334	1	1
-49	1	1
-350	1	1
-31	1	1
-1012	2	2
-422	1	1
-46	1	1
-91	4	19
-468	0	1
-46	1	1
-1491	0	4
-426	0	1
-1144	1	2
-1131	1	1
-20	1	1
-1533	16	0
-3103	44	45
-4016	12	12
-346	0	1
-943	1	0
-524	1	1
-20	1	1
-151	3	3
-144	1	1
-189	1	7
-750	1	0
-695	1	0
-1003	0	2
-7819	1	1
-78	1	1
-1811	0	1
-3177	0	1
-8990	0	1
-2268	1	1
-35	0	10
-8205	1	0
-3193	1	1
-76	1	1
-10955	0	1
-22875	0	20
-2417	1	0
-998	0	13
-4236	8	0
-4845	0	2
-64	40	34
-10941	1	1
-40	1	1
-4759	0	6
-12084	0	3
-3052	0	4
-2989	1	0
-13523	1	3
-16170	1	0
-11761	0	3
-3912	3	0
-6620	0	7
-7633	3	0
-419	2	0
-10690	5	24
-10798	0	1
-296	0	1
-1770	4	0
-374	0	4
-230	16	16
-7468	1	0
-1229	1	0
-3061	1	0
-5818	1	0
-2415	12	9
-2056	0	1
-955	4	0
-20022	0	1
-4418	2	1
-2375	0	4
-2086	1	1
-32	1	1
-1225	1	0
-857	2	0
-1154	0	1
-4667	1	0
-170	0	3
-2376	0	1
-2799	10	10
-1512	4	0
-68	9	1
-2170	1	1
-47	1	1
-318	2	0
-19	0	6
-14527	1	1
-33	1	1
-3080	1	1
-23	1	1
-1645	6	6
-231	0	1
-2136	2	0
-6222	0	1
-830	1	1
-24	1	1
-8326	1	0
-2939	1	0
-3959	0	2
-3746	0	2
-1011	1	1
-34	1	1
-7443	0	1
-688	2	0
-574	1	1
-29	1	1
-1799	13	1
-4074	2	0
-136	1	1
-77	1	1
-528	19	0
-253	0	1
-204	1	0
-129	2	0
-811	1	1
-38	1	1
-2347	52	0
-4634	1	0
-856	14	14
-193	0	4
-855	1	1
-28	1	1
-1255	1	1
-36	1	1
-97	0	1
-58	1	1
-1708	1	1
-48	1	1
-958	15	0
-3371	1	1
-37	1	1
-4267	0	13
-1061	0	1
-272	0	26
-8	1	15
-25	0	2
-112	2	0
-26	4	32
-4090	0	1
-3270	1	1
-17	1	1
-2822	0	1
-6206	1	0
-2318	0	2
-1504	0	1
-6189	3	0
-396	22	12
-918	0	1
-2340	1	1
-33	1	1
-326	1	1
-80	1	1
-205	3	2
-81	8	17
-2671	0	1
-1099	0	1
-144	1	1
-29	0	1
-2097	0	3
-24	3	0
-1207	4	4
-45	1	1
-757	0	5
-1926	1	1
-40	1	1
-2657	0	1
-414	1	0
-61	0	1
-235	0	2
-2087	0	1
-713	0	4
-58	3	0
-1027	3	0
-428	1	1
-17	1	1
-948	1	1
-41	1	1
-458	1	1
-21	1	1
-1055	0	1
-6611	0	3
-1575	4	5
-36	1	1
-99	2	0
-700	0	2
-151	0	1
-467	11	11
-272	0	3
-40	1	1
-2428	0	1
-750	2	0
-473	0	2
-421	1	1
-34	1	1
-1575	1	0
-3841	1	0
-560	1	0
-1108	1	0
-8087	1	0
-11881	1	1
-30	1	1
-4383	2	0
-6883	49	49
-3146	0	1
-906	3	0
-887	1	1
-80	1	1
-3115	0	1
-1037	1	0
-5866	0	2
-18	1	1
-582	0	5
-2828	1	0
-847	1	0
-1996	3	0
-3170	1	0
-1751	0	1
-910	3	0
-691	0	1
-5793	0	1
-26407	1	0
-672	0	1
-19269	29	35
-1371	29	0
-494	2	0
-20417	1	0
-18633	0	1
-601	1	0
-319	0	1
-6820	1	0
-5718	0	2
-17894	1	0
-4272	1	0
-4967	3	1
-290	1	0
-2447	1	0
-740	1	9
-9299	0	18
-7427	1	0
-8151	2	1
-673	1	0
-3453	0	1
-149	0	1
-611	0	4
-4662	0	4
-1752	1	1
-78	1	1
-1581	0	1
-1092	2	0
-159	1	0
-4480	0	2
-4019	0	1
-1451	22	23
-816	1	0
-8701	1	1
-23	1	1
-1796	2	0
-5015	6	1
-1383	8	0
-2368	1	1
-31	1	0
-1883	3	0
-335	0	1
-4157	0	1
-561	4	0
-1538	1	1
-61	0	1
-159	0	2
-3362	4	0
-3333	1	1
-46	1	1
-2307	1	0
-170	1	0
-5972	0	2
-840	0	2
-55	1	1
-28	1	1
-1154	0	2
-650	0	4
-30	0	4
-1100	10	11
-4343	6	0
-1663	4	0
-150	1	0
-3128	1	0
-1449	1	0
-2023	0	1
-428	3	6
-299	2	0
-427	7	7
-1914	14	14
-1273	7	7
-1444	72	0
-423	0	4
-954	1	0
-2467	1	0
-190	8	8
-2034	3	1
-6396	1	1
-34	1	1
-485	1	0
-348	7	0
-770	1	1
-29	0	13
-65	1	1
-1358	0	1
-302	0	1
-659	12	12
-293	0	1
-610	0	1
-906	12	0
-1331	0	6
-1786	0	1
-463	0	1
-4305	0	4
-1041	1	0
-11424	3	1
-13797	0	8
-166	0	1
-1510	5	0
-9069	0	8
-25	1	1
-332	5	3
-76	0	1
-1306	1	1
-46	1	1
-134	19	23
-1467	1	1
-32	1	1
-449	17	0
-367	9	9
-3525	12	10
-91	3	0
-1430	1	1
-24	1	1
-1156	9	13
-843	1	1
-28	1	1
-515	0	17
-1559	0	4
-1045	9	9
-1953	1	0
-31	1	1
-843	0	1
-2174	1	0
-3788	1	0
-2001	0	1
-2400	0	1
-1614	1	0
-8167	0	1
-2700	2	0
-2735	0	1
-8508	1	1
-57	1	1
-141	0	3
-448	1	1
-22	1	1
-2215	1	1
-32	1	1
-1714	32	32
-667	14	14
-142	1	0
-789	1	1
-45	1	1
-84	1	1
-95	1	1
-465	1	1
-45	6	4
-541	1	1
-42	1	1
-1339	5	6
-391	1	1
-20	0	1
-251	1	1
-22	1	1
-561	0	2
-78	3	0
-1718	1	1
-12	1	1
-1042	1	1
-38	1	1
-301	14	0
-222	10	10
-436	10	10
-556	55	55
-953	1	1
-17	1	1
-1752	20	0
-1561	135	0
-58	0	45
-245	101	11
-46	90	0
-150	0	270
-54	180	0
-2130	12	12
-1630	1	1
-26	1	1
-189	0	14
-296	2	0
-809	2	0
-17	20	0
-665	0	40
-236	1	1
-44	1	1
-352	1	1
-25	1	1
-554	6	6
-850	1	1
-33	1	1
-809	3	13
-1832	7	9
-468	1	1
-21	1	1
-951	1	1
-22	1	1
-219	17	18
-733	0	14
-215	2	2
-36	1	1
-301	1	1
-22	1	1
-241	1	1
-52	0	1
-47	1	1
-72	1	1
-109	1	1
-129	1	1
-28	1	1
-174	8	8
-683	3	0
-1190	285	0
-48	1	1
-1330	12	0
-557	17	17
-932	3	1
-27	1	1
-166	1	1
-19	1	1
-406	1	1
-48	3	3
-137	1	0
-161	6	6
-884	2	0
-58	1	1
-107	1	1
-150	14	14
-522	1	1
-28	1	1
-945	4	4
-34	1	1
-472	0	2
-203	0	1
-281	1	1
-46	1	1
-1130	1	0
-232	17	17
-510	1	1
-33	1	1
-62	10	10
-1501	1	1
-20	1	1
-573	1	1
-29	1	1
-928	0	3
-304	1	1
-41	1	1
-160	1	1
-58	1	1
-656	1	1
-40	4	0
-108	6	6
-321	1	1
-14	0	16
-91	1	1
-184	1	1
-43	8	3
-180	1	1
-68	1	1
-144	1	1
-27	1	0
-17	1	1
-212	0	1
-212	1	1
-34	1	1
-115	1	1
-41	1	1
-407	10	10
-200	1	1
-44	2	0
-187	2	0
-146	1	1
-17	1	1
-122	4	4
-73	1	0
-56	1	1
-155	1	17
-80	15	15
-458	1	1
-16	3	3
-343	1	1
-111	1	1
-160	55	55
-157	12	12
-346	0	2
-382	4	0
-35	1	1
-937	0	1
-246	25	0
-52	0	1
-419	0	1
-165	1	0
-75	24	3
-297	1	1
-38	1	1
-5066	1	0
-4922	7	9
-2488	14	14
-2241	1	1
-67	4	4
-39	1	0
-547	1	1
-43	1	1
-524	3715	901
-1796	4	2
-138	2	2
-16	1	1
-415	1	1
-18	1	1
-367	0	89
-1600	0	6
-2175	0	5
-606	14	14
-519	1	0
-540	1	1
-40	1	1
-568	2	0
-165	1	2
-31	1	1
-259	1	1
-41	1	1
-452	31	31
-623	40	62
-818	1	1
-42	1	1
-565	1	1
-44	1	1
-571	10	8
-61	1	1
-28	1	1
-233	2	0
-33	28	0
-53	1	1
-37	1	1
-75	0	396
-156	1	0
-473	0	4
-421	1	1
-35	1	1
-2132	1	1
-80	0	2
-544	9	9
-152	2	1
-33	1	1
-2932	1	1
-44	0	1
-164	22	0
-149	1	0
-534	1	1
-36	1	1
-113	1	1
-15	1	1
-661	1	1
-48	1	1
-1987	1	0
-34	1	1
-444	1	1
-45	1	1
-65	1	1
-67	1	1
-210	1	1
-68	1	1
-55	1	1
-47	1	1
-169	1	1
-64	1	1
-109	0	6
-77	2	32
-6	0	5
-67	0	1
-7	16	0
-51	12	0
-36	0	12
-700	1	1
-33	1	0
-49	0	2
-450	0	1
-98	4	0
-489	32	0
-63	5	1
-78	7	7
-538	17	17
-1269	1	0
-841	1	1
-43	1	1
-2004	1	1
-41	1	1
-86	0	4
-5	1	0
-36	1	1
-573	2	1
-297	1	0
-85	1	1
-30	1	1
-1041	1	0
-12	1	1
-392	33	12
-515	5	6
-583	1	1
-33	1	1
-616	16	16
-1052	0	11
-39	1	1
-184	1	1
-67	1	1
-102	7	7
-58	0	1
-307	1	1
-56	0	3
-930	21	19
-1264	0	1
-832	1	1
-28	1	1
-272	1	1
-82	1	1
-56	1	0
-976	6	6
-2015	0	3
-84	9	9
-130	13	17
-564	10	15
-154	1	0
-438	10	10
-38	0	5
-2141	1	1
-25	1	1
-73	10	10
-70	5	5
-132	1	1
-52	1	1
-599	1	1
-46	1	1
-279	1	1
-18	1	1
-239	2	0
-383	6	0
-224	0	1
-321	3	0
-8	16	0
-1775	1	1
-18	2	0
-575	16	16
-60	1	1
-16	1	1
-1247	2	0
-173	3	0
-41	1	1
-57	8	8
-285	2	0
-672	1	1
-44	1	1
-106	0	1
-148	1	1
-49	3	0
-146	5	11
-91	1	1
-79	1	1
-94	1	1
-101	1	1
-88	16	16
-117	1	1
-15	1	1
-58	1	1
-93	1	1
-140	1	0
-326	1	1
-44	1	1
-160	1	1
-23	1	1
-481	14	14
-181	4	4
-72	1	1
-25	1	1
-88	1	3
-36	0	12
-92	1	1
-56	10	0
-13	0	1
-66	1	1
-141	2	0
-65	1	1
-367	0	2
-610	1	1
-22	1	1
-150	1	1
-85	1	1
-109	1	1
-167	3	1
-23	1	0
-26	1	1
-74	1	1
-33	1	1
-176	1	1
-25	2	2
-193	1	1
-35	0	1
-383	0	5
-249	1	1
-69	1	1
-98	1	1
-62	1	1
-62	1	2
-74	0	1
-68	1	1
-438	1	1
-64	1	1
-47	0	8
-125	3	0
-75	5	5
-45	1	1
-197	1	1
-27	1	1
-116	13	13
-218	15	20
-1107	16	19
-73	1	1
-25	1	1
-199	1	1
-60	1	1
-994	1	1
-43	0	1
-18	1	1
-1215	18	18
-340	1	1
-34	1	1
-1350	16	16
-1726	4	4
-193	1	1
-48	1	1
-295	1	1
-18	1	1
-411	19	19
-175	1	1
-49	1	1
-146	1	1
-61	1	1
-116	1	1
-41	1	1
-137	1	1
-30	1	1
-158	9	9
-136	10	13
-349	8	8
-468	1	1
-44	1	1
-862	17	17
-813	1	1
-24	1	1
-214	10	4
-228	1	1
-34	1	1
-101	12	12
-242	1	1
-69	1	1
-185	1	1
-24	1	0
-164	0	1
-222	1	1
-25	1	1
-297	10	10
-1171	1	0
-182	1	1
-35	1	1
-350	19	19
-1966	1	1
-24	1	1
-548	7	7
-208	13	12
-298	1	1
-65	1	1
-193	2	2
-28	1	1
-125	4	4
-95	7	7
-566	1	1
-40	1	1
-118	0	1
-318	1	0
-374	1	1
-58	1	1
-143	1	1
-74	1	1
-53	21	0
-81	1	1
-45	1	1
-138	15	16
-180	1	1
-62	1	1
-661	1	1
-48	1	1
-1463	1	0
-156	0	1
-148	1	1
-19	1	0
-17	1	1
-1927	4	0
-1469	14	14
-466	0	1
-3098	0	1
-1141	2	3
-743	14	14
-79	1	1
-22	1	1
-362	0	1
-682	16	9
-275	0	4
-539	1	0
-61	0	7
-331	0	4
-130	1	1
-31	0	3
-1554	1	1
-43	1	1
-224	1	1
-49	1	1
-159	3	0
-1064	27	27
-104	1	1
-21	1	1
-222	2	2
-49	1	1
-1397	1	1
-37	1	1
-414	0	2
-695	1	1
-31	1	1
-742	1	1
-21	1	1
-230	3	2
-42	1	1
-68	1	1
-37	1	1
-703	0	3
-2216	84	83
-1430	1	1
-23	1	1
-1867	13	0
-35	1	1
-137	16	16
-1500	4	0
-4546	1	1
-25	1	1
-358	19	19
-1549	1	1
-39	4	3
-1037	1	1
-40	2	0
-890	6	0
-41	2	0
-498	3	0
-321	0	1
-281	3	0
-414	1	1
-70	1	1
-284	1	0
-214	1	1
-28	1	1
-280	1	0
-650	1	1
-47	1	1
-1030	1	1
-91	1	1
-6520	5	5
-462	1	0
-2864	0	3
-1930	0	4
-2915	1	1
-20	1	1
-413	1	0
-1844	11	11
-133	0	6
-569	10	10
-110	12	12
-184	0	3
-228	1	1
-43	2	2
-51	14	13
-1499	1	0
-12	1	1
-378	1	1
-49	1	1
-424	1	0
-1069	1	1
-142	0	1
-821	2	9
-311	1	6
-247	1	1
-86	1	1
-1850	1	1
-26	1	1
-498	1	1
-34	1	1
-688	5	9
-44	1	1
-369	1	1
-69	1	1
-156	2	0
-83	1	1
-128	1	1
-50	9	9
-249	1	1
-70	0	1
-624	2	0
-74	2	1
-300	1	1
-26	1	1
-240	4	0
-1705	1	1
-52	1	1
-231	29	24
-378	2	0
-236	1	1
-76	1	1
-116	9	12
-301	20	20
-59	0	6
-43	1	1
-384	15	15
-1414	5	0
-225	0	2
-1234	1	0
-29	1	1
-235	10	10
-227	1	1
-77	4	0
-43	5	9
-485	7	7
-380	10	0
-46	1	0
-90	1	1
-161	1	1
-401	1	1
-58	1	1
-2127	3	0
-186	20	20
-323	5	5
-47	1	1
-236	1	1
-31	0	2
-1568	1	1
-136	0	1
-202	0	3
-77	1	1
-44	1	1
-411	12	11
-317	0	2
-599	1	1
-37	1	1
-391	1	0
-273	1	0
-744	0	4
-703	1	1
-20	1	1
-198	3	0
-158	19	15
-27	12	0
-282	1	1
-32	4	0
-740	1	0
-327	1	1
-105	1	1
-146	16	16
-101	1	0
-21	1	1
-232	1	1
-33	2	0
-12	1	1
-189	1	1
-30	2	2
-544	1	1
-153	1	1
-586	5	0
-1351	21	0
-446	49	49
-121	7	7
-1147	12	12
-777	1	0
-701	1	1
-29	2	2
-154	12	12
-191	1	1
-55	1	1
-113	0	1142
-87	0	2
-15	0	1
-525	1	1
-22	1	1
-355	10	10
-50	0	8
-252	1	1
-31	1	1
-354	6	5
-148	15	15
-407	1	1
-42	1	1
-275	0	1
-737	5	9
-1432	1	1
-39	1	1
-84	0	2
-77	7	7
-514	20	20
-385	7	1
-815	1	1
-45	1	1
-487	1	1
-66	1	1
-2379	0	24
-779	1	1
-18	1	0
-2653	4	0
-34	1	1
-191	1	1
-35	1	1
-1174	12	0
-2497	1	1
-24	0	1500
-447	8	0
-3268	1	0
-946	1	0
-2223	20044	20060
-119	1	1
-71	0	3
-53	0	5
-40	1	1
-309	1	1
-57	1	1
-101	1	1
-47	2	2
-67	1	1
-47	1	1
-74	0	1
-28	1	1
-167	1	1
-33	1	1
-543	1	1
-27	11	34
-33	1	1
-149	7	7
-61	1	1
-120	1	1
-366	1	1
-55	1	1
-121	1	1
-62	1	1
-78	1	1
-48	1	1
-161	1	1
-26	1	1
-191	1	1
-20	11	11
-550	1	1
-76	1	0
-20	1	1
-112	1	1
-149	1	1
-284	1	1
-37	1	1
-705	1	12
-106	12	12
-83	1	1
-46	1	1
-1500	1	1
-81	1	1
-210	1	1
-26	1	1
-713	1	1
-48	1	1
-723	0	3
-196	6	6
-62	2	2
-32	1	1
-606	1	2
-357	1	1
-38	292	0
-589	1	1
-30	1	1
-714	8	8
-639	1	1
-20	1	1
-1068	0	1
-571	1	1
-49	1	1
-436	0	1
-609	0	2
-30	1	1
-66	0	1
-349	11	11
-65	1	1
-40	1	1
-717	0	3
-299	1	1
-29	1	1
-724	1	0
-275	1	1
-33	1	1
-318	0	3
-279	1	1
-28	1	1
-389	1	0
-548	0	8
-330	1	1
-47	1	1
-170	1	1
-47	1	1
-519	14	14
-841	24	24
-732	1	1
-29	3	3
-688	2	2
-23	0	1
-94	14	14
-726	13	13
-508	0	12
-21	6	0
-69	1	1
-37	1	1
-590	1	1
-59	1	1
-89	11	11
-164	1	1
-58	1	1
-1709	18	18
-520	1	1
-27	1	1
-683	10	10
-814	1	1
-26	1	1
-350	1	1
-39	1	1
-132	6	6
-439	10092	10075
-78	15	15
-3352	1	1
-23	1	1
-873	4	4
-887	1	0
-1827	1	0
-216	6	6
-805	2	0
-874	0	8
-2266	1	1
-47	1	1
-761	0	4
-86	1	1
-19	1	1
-1794	9	9
-271	0	1
-2266	1	1
-34	1	1
-916	0	1
-21	1	1
-108	21	21
-141	1	1
-27	1	1
-406	3	0
-3950	1	1
-38	1	1
-128	2	2
-56	1	1
-72	0	1
-96	1	1
-22	1	1
-169	7	7
-511	1	1
-38	1	1
-1070	1	1
-90	1	1
-50	1	1
-41	1	0
-30	1	1
-659	12	12
-701	1	1
-33	1	1
-569	15	15
-70	1	1
-38	1	1
-955	0	3
-130	1	1
-63	1	1
-251	8	8
-191	1	1
-26	0	3
-187	1	0
-916	5	1
-70	13	13
-498	20061	20021
-160	1	1
-76	1	1
-95	1	1
-76	1	1
-275	1	0
-101	1	1
-79	1	1
-100	7	7
-159	1	1
-75	0	8
-87	1	1
-76	1	1
-44	1	1
-71	32	32
-89	11	12
-196	1	1
-55	0	2
-61	1	1
-83	0	1
-944	1	1
-126	1	1
-81	6	6
-41	3	0
-641	1	1
-92	1	0
-113	1	1
-39	1	1
-671	1	1
-28	1	1
-123	1	1
-59	1	1
-210	1	1
-17	1	1
-168	15	14
-494	1	0
-22	1	1
-484	18	18
-376	1	1
-114	2	0
-67	1	1
-10	1	1
-109	1	1
-165	1	1
-149	6	6
-234	1	1
-19	5	5
-64	1	1
-111	1	1
-220	1	1
-89	1	1
-119	1	1
-113	2	0
-168	1	1
-73	1	1
-194	1	1
-50	0	4
-37	1	1
-95	3	1
-43	1	1
-153	1	1
-83	1	1
-55	1	1
-39	1	1
-70	7	0
-59	7	7
-75	1	1
-84	2	2
-110	1	0
-42	1	1
-129	9978	10000
-438	1	1
-43	1	0
-55	1	1
-40	1	1
-175	1	1
-46	1	1
-52	1	1
-19	1	1
-277	1	1
-60	1	1
-98	1	1
-24	1	1
-333	4	4
-1047	2	0
-4080	1	1
-38	1	1
-837	0	64
-172	1	1
-55	1	1
-1818	2	0
-1143	13	13
-335	1	0
-1944	5	0
-39	6	0
-4057	3	8
-9465	5	4
-301	19	1
-191	84	0
-427	1	1
-29	0	4
-157	4	5
-296	21	18
-158	2	2
-36	1	1
-539	13	13
-399	1	1
-46	1	1
-348	1	1
-49	1	1
-268	1	0
-66	0	4
-178	2	2
-107	1	1
-133	5	5
-355	1	1
-30	1	1
-346	1	1
-29	1	1
-161	1	1
-38	1	1
-121	4	4
-55	8	8
-67	7	7
-318	17	17
-259	1	1
-94	1	1
-80	1	1
-35	1	1
-260	1	1
-81	1	1
-106	1	1
-58	1	2
-301	3	0
-2052	1	1
-40	1	1
-174	20	22
-574	0	2
-414	1	0
-234	0	1
-425	51224	51060
-1568	14	14
-11956	0	1
-2667	0	2
-884	1	1
-19	1	1
-676	1	1
-63	1	1
-3138	0	3
-3038	5	2
-132	10	6
-136	18	13
-363	1	1
-89	1	1
-382	1	1
-29	1	1
-58	8	7
-297	4	0
-66	1	1
-93	2	0
-145	1	1
-31	5	5
-576	1	1
-89	1	1
-1256	0	12
-67	1	1
-193	2	2
-23	1	1
-51	1	0
-727	1	0
-1148	12	12
-837	1	1
-77	1	1
-941	10	10
-776	19	19
-300	1	1
-24	1	1
-256	1	7
-93	1	1
-224	2	0
-138	1	1
-563	1	1
-104	4	4
-2898	1	1
-46	1	1
-282	1	1
-39	1	1
-204	2	2
-22	1	1
-469	1	1
-20	1	1
-140	1	1
-26	1	1
-745	0	2
-539	0	6
-1536	1	0
-817	4	4
-202	1	1
-48	1	1
-168	1	1
-53	1	1
-379	10	10
-1178	14	14
-132	5	0
-555	1	1
-42	1	1
-573	1	1
-21	1	1
-462	1	1
-43	1	1
-121	1	1
-48	0	3
-15	1	5
-1404	0	1
-934	1	1
-49	1	1
-1350	1	0
-384	1	1
-24	1	1
-4169	0	15
-244	10	10
-2167	18	14
-64	1	1
-31	1	1
-185	0	4
-1647	1	1
-20	1	1
-227	1	1
-37	1	1
-636	3	4
-5590	1	1
-39	1	1
-461	0	2
-2145	1	1
-23	1	1
-1114	0	2
-688	0	1
-901	18	18
-4781	0	4
-815	0	1
-5027	42	47
-415	0	1
-2743	1	1
-78	1	1
-390	1	0
-328	0	1
-878	0	1
-5752	0	2
-1554	1	1
-60	1	1
-278	0	1
-19	1	1
-1164	11	11
-691	0	2
-960	1	0
-62	0	20
-2108	0	2
-1265	0	1
-1642	2	0
-3584	2	0
-12086	2	0
-3766	0	2
-1209	1	7
-3466	1	0
-1448	1	0
-1943	0	1
-698	0	8
-1166	135	135
-2030	2	0
-540	1	0
-1736	14	0
-3128	0	2
-4464	0	1
-3597	1	0
-378	1	0
-1269	0	3
-1182	1	0
-654	0	3
-2049	1	0
-6838	1	1
-69	0	3
-154	1	0
-2718	1	1
-30	1	1
-160	11	11
-4954	0	1
-420	1	1
-123	1	1
-156	0	4
-219	4	0
-195	1	0
-4402	3	0
-3045	0	1
-1249	1	0
-3522	0	10
-675	20	20
-117	8	0
-346	0	1
-8538	5	0
-455	1	0
-119	0	1
-355	48	48
-724	1	0
-9254	22	22
-1672	1	0
-833	0	1
-4251	1	0
-8	1	1
-2079	0	1
-1735	8	12
-1612	0	1
-1373	5	0
-8585	7	0
-64	1	1
-3799	1	0
-258	2	0
-899	1	0
-1362	8	9
-593	0	2
-3351	2	0
-618	0	4
-905	2	15
-2797	1	0
-2776	2	0
-4110	0	6
-4466	18	18
-1783	9	9
-475	0	4
-134	1	0
-12963	8	0
-1616	0	2
-1685	2	0
-2225	2	0
-428	0	1
-458	20	20
-2860	0	3
-677	4	6
-325	11	1
-1887	0	1
-913	0	1
-997	5	5
-2814	17	15
-1389	1	0
-1200	0	4
-2495	1	0
-3921	26431	26426
-2419	0	1
-6110	0	1
-1370	0	1
-3085	1	0
-3568	1	1
-24	0	9
-597	1	0
-2642	1	0
-1545	10	0
-4952	0	1
-6146	2	0
-1452	1	0
-2967	1	0
-4920	5	0
-147	4	5
-850	1	0
-1875	1	0
-695	3	1
-1719	0	1
-259	0	1
-294	1	0
-128	0	2
-3051	0	1
-908	0	4
-3399	0	1
-4673	1	0
-3179	1	0
-411	1	1
-44	1	1
-174	1	0
-1047	17	17
-998	178	0
-671	0	40
-2093	1	0
-313	0	1
-7581	1	0
-3245	1	0
-972	0	4
-4085	2	0
-346	1	1
-45	1	1
-368	1	0
-26	1	1
-8444	0	1
-17044	1	0
-2795	2	0
-2860	1	0
-622	0	1
-167	0	5
-1968	0	2
-259	2	0
-4992	29	27
-170	1	0
-3528	0	1
-191	1	2
-117	2	0
-2275	1	0
-12676	1	1
-20	1	1
-9972	1	0
-13955	0	5
-19867	1	0
-9612	1	0
-14233	0	32737
-6316	1	1
-19	1	1
-970	8	8
-2685	16	16
-18093	0	1
-6799	0	16
-3350	0	1
-7574	0	12
-2132	0	1
-7228	52793	52800
-1955	22	22
-698	0	1
-2149	1	0
-6880	0	2
-960	0	1
-23	1	1
-2646	2	0
-3867	5	0
-26077	0	3
-3174	1	0
-8183	0	1
-2817	10	0
-5841	1	0
-2081	0	1
-374	0	2
-3589	0	4
-10625	28	28
-3275	3	0
-773	7	7
-175	1	1
-79	1	1
-400	12	12
-1096	0	4
-717	7	7
-52	1	1
-68	5	1
-2117	0	3
-130	14	14
-1124	0	3
-413	0	4
-643	3	0
-58	1	1
-127	1	1
-196	0	2
-226	3	0
-136	3	4
-293	1	1
-25	0	3
-63	1	1
-417	0	2
-412	0	16
-737	4	0
-402	2	0
-654	1	1
-42	1	1
-75	1	1
-64	1	1
-2980	4	0
-576	0	1
-29	2	2
-715	1	1
-36	1	1
-511	38	38
-218	4	40
-44	1	5
-43	49	5
-709	21	21
-1147	9	9
-22	1	1
-195	7	4
-659	3	0
-27	1	1
-637	1	1
-42	1	1
-531	1	1
-67	1	1
-39	1	0
-717	11	11
-53	1	1
-61	1	1
-1535	1	1
-89	0	1
-49	1	0
-102	1	1
-67	1	1
-76	1	1
-129	1	1
-85	1	1
-607	10	0
-12	137	1
-41	1	1
-1043	1	1
-22	1	1
-203	3	0
-480	14	21
-91	23	23
-1345	2	1
-435	15	17
-1188	30	0
-1778	1	0
-120	0	3
-3797	1	0
-3211	0	1
-2456	4	0
-954	0	4
-1847	0	1
-5929	20	20
-984	14	0
-2112	1	0
-2013	1	0
-1770	14	14
-3100	1	0
-1160	16	0
-733	7	7
-238	3	2
-2203	2	1
-5654	1	1
-28	5	10
-482	0	1
-2970	0	4
-2892	0	1
-251	1	7
-1346	1	0
-877	0	4
-3583	0	1
-1178	0	1
-1293	0	2
-491	2	0
-6803	1	1
-22	1	1
-2218	1	1
-44	1	1
-4780	4	0
-3026	14	13
-442	5	5
-2022	6	6
-506	2	0
-8557	1	1
-36	1	0
-1575	1	0
-1329	1	1
-35	1	0
-247	1	1
-16	1	1
-184	1	1
-18	1	1
-1636	0	7
-23	1	1
-527	1	1
-39	1	1
-653	3	0
-227	1	1
-18	1	1
-218	0	323
-91	1	0
-124	0	15
-621	0	2
-555	8	8
-467	1	1
-40	1	1
-372	1	1
-25	1	1
-188	12	12
-357	0	2
-2389	1	1
-22	1	1
-2579	0	5
-461	1	1
-36	1	1
-1584	1	1
-26	1	0
-429	1	0
-33	1	1
-1071	0	4
-1068	9	0
-1472	0	2
-1839	94	92
-337	1	1
-46	1	1
-416	1	1
-42	1	1
-1255	0	2
-628	17	15
-587	15	15
-398	3	0
-623	1	1
-78	0	3
-287	10	0
-191	0	2
-493	1	1
-42	4	0
-219	0	1
-408	1	1
-23	1	1
-283	1	1
-21	1	1
-633	2	0
-241	6	6
-457	1	0
-330	0	16
-428	1	0
-4	6	0
-324	0	1
-3060	0	2
-9953	0	1
-1899	0	6
-6431	0	1
-8674	0	4
-4595	11	0
-5064	2	0
-2813	12	12
-1391	5	0
-3690	1	1
-64	1	1
-2635	1	1
-49	1	1
-69	1	1
-15	1	1
-605	4	4
-400	8	0
-735	0	20
-3074	2	0
-1879	0	1
-572	0	8
-576	1	1
-42	1	1
-265	24	0
-209	11	11
-953	1	1
-42	0	5
-58	1	0
-95	1	0
-1121	1	1
-17	1	1
-751	0	1
-24	1	1
-351	1	1
-43	3	3
-565	1	1
-15	1	1
-271	1	0
-323	1	1
-23	1	1
-221	7	7
-705	9	0
-631	2	0
-64	1	1
-1577	1	1
-21	0	1
-371	7	21
-160	0	1
-283	1	1
-48	1	1
-227	1	1
-40	0	1
-1359	0	2
-836	13	13
-722	7	7
-1153	1	1
-93	1	1
-797	14	14
-433	8	0
-108	11	11
-140	1	1
-40	1	1
-470	1	1
-42	1	1
-1106	0	1
-85	4	4
-129	1	1
-123	1	0
-95	1	1
-104	6	1
-641	1	1
-77	1	1
-57	1	1
-62	1	1
-473	2	0
-262	6	0
-45	1	1
-63	2	0
-39	1	1
-267	0	1
-197	2	104
-189	107	3
-112	0	4
-108	5	0
-563	14	14
-324	1	0
-205	1	1
-17	1	1
-495	0	1
-201	4	0
-14	1	1
-667	42	42
-178	1	1
-58	1	1
-133	1	1
-24	1	1
-91	24	24
-342	1	1
-32	1	1
-121	1	1
-62	1	1
-2371	2	0
-164	8	1
-655	1	1
-30	1	1
-271	1	1
-47	1	1
-609	1	0
-1780	2	0
-742	1	1
-40	1	1
-2014	1	0
-1741	3	0
-3833	0	1
-14622	161198	190000
-5156	0	1
-1680	1	1
-88	1	1
-4502	0	1
-46	1	1
-800	4	4
-23	1	1
-1305	2	0
-136	0	1
-4941	0	1
-547	0	1
-70	8	8
-293	1	1
-35	1	1
-1165	4	0
-6662	1	1
-46	1	1
-167	0	8
-214	1	1
-35	1	1
-108	1	0
-1063	0	1
-1017	1	1
-20	0	6
-1725	0	1
-150	5	5
-33	1	0
-12	1	1
-349	1	1
-24	0	1
-1562	1	1
-31	1	1
-2513	0	1
-73	36	36
-305	1	1
-27	1	1
-543	1	1
-47	4	28
-5476	10	10
-531	1	1
-37	1	1
-776	1	1
-44	2	2
-115	22	20
-181	1	1
-125	3	3
-466	1	1
-76	1	1
-144	5	5
-32	1	1
-225	1	1
-41	1	1
-707	24	24
-66	4	4
-414	1	1
-42	1	1
-81	1	1
-63	1	1
-76	28	46
-187	1	1
-97	1	1
-99	9	9
-85	14	14
-81	6	6
-62	1	1
-109	4	5
-150	1	0
-44	4	4
-93	11	11
-188	3	3
-73	1	1
-52	1	1
-19	13	0
-48	1	1
-62	0	7
-205	1	1
-68	9	9
-99	4	0
-21	1	0
-52	1	1
-171	1	1
-109	3	1
-6	0	2
-190	1	1
-69	10078	10069
-90	3	1
-197	1	1
-157	0	6
-137	1	1
-101	2	2
-233	6	6
-62	1	1
-104	0	1
-143	1	1
-119	1	1
-106	2	0
-176	1	1
-79	0	1
-50	1	1
-50	3	3
-179	1	1
-159	1	1
-36	1	1
-107	1	1
-176	1	1
-154	0	5
-91	1	1
-54	1	1
-77	1	1
-238	2	2
-50	1	1
-1421	1	1
-23	1	1
-216	1	1
-122	1	1
-86	1	1
-41	3	1
-336	7	7
-41	9	0
-107	1	1
-90	1	3
-6	1	0
-84	1	1
-213	1	1
-26	1	1
-138	1	1
-25	1	1
-206	1	1
-36	3	3
-37	7	0
-500	1	1
-52	1	1
-52	1	1
-48	1	1
-395	1	1
-66	6	6
-72	1	0
-69	1	1
-100	10	10
-160	1	0
-64	7	7
-89	1	1
-123	1	1
-128	1	1
-36	1	1
-231	1	1
-61	1	1
-564	8	8
-593	47	47
-163	1	0
-196	8	8
-174	5	5
-37	1	1
-67	0	1
-192	1	1
-60	3	0
-19	1	1
-1149	1	1
-18	1	1
-77	1	1
-32	2	0
-32	1	1
-136	1	1
-78	2	0
-162	4	0
-41	1	1
-351	13	13
-1634	2	0
-229	8	8
-57	13	2
-410	1	1
-76	1	1
-180	1	1
-92	1	1
-270	1	1
-40	1	1
-92	1	1
-53	1	1
-227	1	1
-42	1	1
-357	4	4
-23	1	1
-94	1	0
-200	6	0
-201	7	7
-70	5	13
-57	4	0
-35	1	1
-206	1	1
-76	2	2
-651	1	1
-68	4	0
-73	1	1
-49	4	0
-37	1	1
-145	2	2
-78	2	2
-108	12	12
-52	1	1
-35	1	1
-242	1	3
-76	2	2
-50	12	12
-70	1	1
-33	0	2
-57	1	1
-64	15	15
-168	1	1
-22	1	1
-63	36	37
-73	0	2
-64	1	1
-177	2	0
-19	4	0
-55	1	0
-33	1	1
-51	1	1
-122	1	1
-296	1	1
-85	1	1
-109	1	1
-64	1	1
-155	1	1
-58	0	2
-72	1	1
-25	1	1
-128	1	1
-45	2	0
-444	1	1
-25	1	1
-64	1	1
-21	1	1
-368	15	15
-734	2	0
-701	15	15
-71	1	1
-41	1	1
-77	1	1
-56	1	1
-478	2	0
-714	8	7
-95	2	2
-50	4	3
-1129	1	1
-34	1	1
-1715	1	1
-87	1	1
-692	1	1
-47	0	1
-75	1	1
-541	12	12
-1602	10	10
-1265	1	1
-46	1	1
-298	1	1
-22	1	1
-186	1	1
-34	1	1
-202	1	1
-61	1	0
-185	1	1
-24	1	0
-98	0	2
-258	8	14
-967	1	1
-15	1	1
-625	1	0
-1362	0	4
-23365	4	0
-246	26975	26986
-3307	0	1
-13671	3	3
-52	1	1
-1308	2	0
-942	0	1
-17790	1	0
-4586	0	1
-949	0	2
-15047	0	1
-606	2	0
-7820	0	4
-22313	16	0
-10539	8	0
-4836	0	1
-8320	18	18
-388	2	0
-194	1	1
-49	1	1
-320	1	1
-34	1	1
-6813	0	1
-8719	3	0
-7037	1	0
-721	0	1
-999	6	0
-17	1	0
-3075	5	0
-593	13	11
-1006	12	12
-3487	1	0
-9535	0	4
-23	0	2
-23	2	0
-513	0	3
-377	1	0
-2627	0	2
-16	0	1
-211	18	18
-571	2	0
-7617	0	1
-1607	1	0
-69	1	1
-66	1	1
-275	1	1
-67	7	0
-25	1	1
-1206	1	0
-136	8	7
-612	1	1
-61	1	1
-740	0	2
-78	26	26
-129	15	15
-69	12	16
-1483	13	28
-1062	1	0
-108	4	0
-685	0	2
-1566	1	0
-192	4	4
-1452	9	45
-1514	1	1
-46	1	1
-1969	0	1
-35	1	1
-1094	1	0
-618	1	1
-43	1	1
-6580	1	0
-1636	5	0
-6325	1	1
-32	1	1
-1041	0	2
-174	9	0
-11983	18	18
-142	8	8
-2203	10	8
-2025	1	1
-39	1	1
-907	4	4
-225	1	1
-124	1	1
-3928	0	22
-38	2	0
-44	18	0
-46	0	6
-61	0	1
-3653	6	0
-34	1	1
-4559	1	1
-28	1	1
-283	5	5
-1572	28	28
-351	1	1
-34	1	1
-443	19	19
-57	1	1
-21	1	1
-231	1	1
-94	1	1
-105	1	1
-208	5	5
-124	1	1
-112	3	3
-207	1	1
-38	1	1
-244	1	1
-60	1	1
-98	1	1
-50	1	1
-256	5	5
-23	1	1
-157	1	1
-33	1	1
-143	1	1
-59	1	1
-51	1	1
-45	1	0
-73	1	1
-81	1	1
-339	1	1
-56	0	5
-142	1	1
-232	1	1
-43	1	1
-332	1	1
-47	1	1
-479	1	0
-137	0	3
-1456	10	13
-63	1	1
-37	1	1
-261	0	2
-109	1	1
-50	1	1
-56	129	1
-88	1	0
-44	1	1
-54	1	1
-56	1	50
-58	50	1
-54	277	1
-44	1	1
-297	0	39
-142	1	1
-85	1	1
-124	16	16
-58	3	15
-677	1	0
-1333	2	0
-13591	6	0
-989	1	1
-107	1	1
-678	1	1
-31	1	1
-2571	5	5
-56	2	2
-39	1	1
-3986	0	4
-18351	32	30
-10811	1	1
-25	0	1
-417	1	1
-40	1	1
-159	4	4
-37	4	4
-179	1	1
-51	1	1
-103	2	0
-108	1	1
-79	1	1
-25	1	1
-58	1	1
-12	1	1
-275	14	0
-80	1	1
-83	1	1
-24	1	1
-59	1	0
-91	1	1
-65	1	1
-67	1	1
-136	4	0
-68	8	0
-331	5	0
-40	1	1
-110	10	6
-64	1	1
-368	1	1
-22	1	1
-509	1	1
-89	1	1
-926	1	0
-959	1	1
-44	1	1
-72	11	0
-47	1	1
-361	1	1
-37	1	1
-2204	2	2
-45	1	1
-1117	18	18
-141	1	1
-47	1	1
-148	1	1
-75	1	1
-104	1	0
-205	3	2
-249	1	1
-146	1	1
-94	1	1
-34	1	1
-700	0	331
-21	1	1
-73	1	1
-49	1	1
-356	1	1
-16	1	1
-112	1	1
-36	9	0
-515	1	1
-27	2	2
-192	1	1
-53	0	14
-82	1	1
-302	1	1
-68	1	1
-52	12	12
-52	1	1
-34	1	1
-166	7	7
-384	1	1
-31	1	1
-281	1	1
-57	1	1
-176	0	1
-1625	1	1
-26	1	1
-369	1	1
-21	1	1
-86	1	1
-134	1	1
-215	1	1
-214	15	1
-50	2	2
-26	1	1
-78	0	19
-64	1	1
-118	53	53
-433	1	1
-76	0	1
-6	12	0
-52	1	1
-108	1	1
-87	1	1
-62	1	1
-26	1	1
-291	2	1
-143	1	1
-29	1	1
-56	12	12
-230	1	1
-153	4	4
-87	32	32
-584	12	12
-227	1	0
-1931	4	0
-836	1	1
-68	1	1
-205	24	19
-816	1	2
-1932	0	7
-1732	13	0
-257	4	0
-1423	1	0
-129	6	0
-1505	1	1
-42	0	1
-373	13	13
-565	1	1
-76	1	0
-1881	0	4
-68	4	0
-43	0	4
-2201	8	8
-3726	3	0
-339	15	11
-249	1	1
-35	1	1
-250	1	1
-38	1	1
-359	11	12
-109	1	1
-43	18	0
-822	1	1
-53	1	1
-325	15	15
-123	1	1
-42	6	6
-240	1	1
-44	1	1
-438	7	7
-142	2	0
-1004	0	1
-9275	1	1
-37	1	0
-2071	0	1
-1253	9	9
-9137	0	1
-12513	2	1
-11243	1	1
-26	1	1
-816	4	0
-15996	2	0
-1594	1	0
-363	5	0
-6757	47	41
-2700	1	0
-841	0	1
-1807	0	2
-2565	11	0
-2089	0	2
-477	1	0
-657	0	1
-776	0	20
-365	82	49
-779	0	1
-401	25	63
-441	0	2
-1152	0	2
-1315	1	0
-5352	6	8
-902	0	1
-2154	1	1
-36	1	1
-109	0	1
-668	6	0
-1923	0	1
-91	3	2
-3560	1	0
-1235	1	0
-139	26	0
-7381	1	0
-155	0	14
-2393	1	1
-33	1	1
-507	4	0
-1337	0	1
-9954	3	0
-1588	1	0
-2605	1	1
-23	1	1
-3000	0	3
-8249	8	0
-912	0	1
-338	2	0
-734	1	0
-4332	1	0
-416	0	4
-1691	0	1
-295	1	0
-214	2	0
-121	0	1
-784	0	1
-2512	0	1
-4465	12	11
-926	1	0
-190	1	0
-5780	0	1
-490	5	0
-228	1	1
-45	1	1
-207	3	0
-322	0	1
-633	1	1
-24	1	0
-1516	5	0
-1025	0	13
-1518	0	1
-591	10	10
-1061	1	0
-1371	1	1
-22	1	1
-928	0	2
-182	8	0
-328	1	0
-301	0	1
-994	1	1
-18	0	6
-1743	0	1
-2350	22	23
-1548	0	2
-1498	8	6
-7484	0	3
-2988	7	7
-93	2	0
-322	1	0
-280	1	1
-49	1	1
-2114	16	17
-617	0	1
-1012	0	1
-495	1	0
-29	1	1
-3134	1	0
-1837	0	4
-4079	0	1
-905	8	0
-5764	0	1
-3493	0	20
-1174	0	1
-900	0	1
-1006	1	0
-1699	0	1
-1682	1	0
-688	1	1
-21	1	1
-3349	0	1
-384	3	1
-3616	3	0
-748	0	1
-3001	0	10
-541	1	0
-286	1	1
-22	0	1
-250	1	1
-27	1	1
-898	1	0
-1161	0	2
-2067	0	1
-8000	0	12
-857	29	0
-1399
-
-chain 72788 chr6_qbl_hap2 4565931 + 3808375 3809175 chr11 135006516 + 118201008 118201901 1739030
-615	13	107
-119	2	1
-51
-
-chain 65509 chr6_qbl_hap2 4565931 + 2258974 2259668 chr6 171115067 - 140105134 140105832 1929446
-178	0	4
-516
-
-chain 50097 chr6_qbl_hap2 4565931 + 2471491 2473781 chr6 171115067 + 44553942 44556234 2550079
-125	147	147
-81	297	298
-77	380	378
-160	345	343
-82	181	182
-60	299	303
-56
-
-chain 30865 chr6_qbl_hap2 4565931 + 3800272 3800791 chr6 171115067 + 32713281 32713770 4500604
-73	89	59
-184	77	77
-96
-
-chain 26769 chr6_qbl_hap2 4565931 + 2218659 2218944 chr1 249250621 - 83463584 83463869 6084938
-285
-
-chain 25453 chr6_qbl_hap2 4565931 + 1111775 1112573 chr8 146364022 + 94982474 94983353 6804147
-181	108	108
-72	385	466
-52
-
-chain 18586 chr6_qbl_hap2 4565931 + 2472758 2473366 chr3 198022430 - 151831455 151832050 2830221
-34	221	221
-81	91	91
-5	35	35
-55	44	31
-42
-
-chain 18520 chr6_qbl_hap2 4565931 + 2558133 2558568 chr13 115169878 - 5075411 5075846 11677159
-71	220	220
-144
-
-chain 17263 chr6_qbl_hap2 4565931 + 3694162 3694369 chr4 191154276 + 3927369 3927573 12785974
-50	3	0
-26	4	4
-124
-
-chain 16745 chr6_qbl_hap2 4565931 + 2589692 2589893 chr11 135006516 + 74748600 74748801 13289219
-113	12	12
-76
-
-chain 15761 chr6_qbl_hap2 4565931 + 3069257 3069435 chr19 59128983 - 18504215 18504393 607285
-59	1	1
-45	1	1
-72
-
-chain 15688 chr6_qbl_hap2 4565931 + 3804298 3804527 chr11 135006516 - 109492289 109492518 14350697
-129	50	50
-50
-
-chain 14458 chr6_qbl_hap2 4565931 + 3751685 3752808 chr6 171115067 + 32441118 32442245 15662572
-59	270	268
-88	656	662
-50
-
-chain 14065 chr6_qbl_hap2 4565931 + 3705931 3706083 chr6 171115067 - 138602057 138602209 16122341
-152
-
-chain 13955 chr6_qbl_hap2 4565931 + 2589304 2589471 chr9 141213431 - 10269188 10269355 16251226
-93	11	11
-63
-
-chain 13115 chr6_qbl_hap2 4565931 + 937718 937855 chr7 159138663 + 102343613 102343750 17340123
-137
-
-chain 12452 chr6_qbl_hap2 4565931 + 4213437 4214179 chr12 133851895 + 124586233 124586652 1913233
-57	408	105
-14	32	63
-45	0	78
-44	129	0
-13
-
-chain 12361 chr6_qbl_hap2 4565931 + 1150685 1150815 chr1 249250621 + 48985442 48985572 18455294
-130
-
-chain 12272 chr6_qbl_hap2 4565931 + 2479004 2479160 chrX 155270560 + 155194421 155194569 18587559
-71	1	1
-25	8	0
-51
-
-chain 12201 chr6_qbl_hap2 4565931 + 1105096 1105867 chr6 171115067 - 139876162 139876935 18699321
-54	620	622
-97
-
-chain 12178 chr6_qbl_hap2 4565931 + 3776349 3776515 chr14 107349540 - 58393926 58394091 18734379
-55	26	25
-85
-
-chain 12008 chr6_qbl_hap2 4565931 + 3700751 3700880 chr8 146364022 + 49154427 49154556 18990653
-129
-
-chain 11752 chr6_qbl_hap2 4565931 + 3745259 3747655 chr6 171115067 + 32491461 32493852 19428924
-56	676	682
-61	1516	1505
-87
-
-chain 11746 chr6_qbl_hap2 4565931 + 1097944 1098092 chr7 159138663 - 7702899 7703047 19437479
-54	14	14
-80
-
-chain 11503 chr6_qbl_hap2 4565931 + 3698827 3699253 chr11 135006516 - 111045874 111046295 19852910
-57	287	282
-82
-
-chain 10738 chr6_qbl_hap2 4565931 + 3700459 3700580 chr10 135534747 + 59600699 59600817 21255899
-61	3	0
-57
-
-chain 10686 chr6_qbl_hap2 4565931 + 2478152 2478673 chr18 78077248 + 11342173 11342695 21355061
-80	388	389
-53
-
-chain 10496 chr6_qbl_hap2 4565931 + 3696510 3696620 chr1 249250621 - 174039531 174039641 21744609
-110
-
-chain 10342 chr6_qbl_hap2 4565931 + 3714159 3714889 chr6 171115067 + 32548581 32549235 22073729
-78	598	522
-54
-
-chain 9560 chr6_qbl_hap2 4565931 + 1152614 1152715 chr6 171115067 - 141323187 141323288 23857063
-101
-
-chain 9560 chr6_qbl_hap2 4565931 + 1099695 1099796 chr6 171115067 - 141323187 141323288 23857064
-101
-
-chain 9385 chr6_qbl_hap2 4565931 + 3825573 3825778 chr16 90354753 - 20685009 20685189 24272037
-58	92	67
-55
-
-chain 9214 chr6_qbl_hap2 4565931 + 1102327 1102424 chr6 171115067 + 29758158 29758255 24607529
-97
-
-chain 9048 chr6_qbl_hap2 4565931 + 3694493 3695083 chr16 90354753 - 14504923 14505798 16016601
-79	460	745
-51
-
-chain 8993 chr6_qbl_hap2 4565931 + 2558568 2558745 chr2 243199373 + 116390976 116391155 17783325
-1	102	104
-74
-
-chain 8702 chr6_qbl_hap2 4565931 + 3686082 3686238 chr6 171115067 + 32439449 32439606 25393693
-54	51	52
-51
-
-chain 8427 chr6_qbl_hap2 4565931 + 3804527 3804616 chr6 171115067 - 148948316 148948405 15963296
-89
-
-chain 7704 chr6_qbl_hap2 4565931 + 3688237 3688318 chr6 171115067 + 32557831 32557912 26927503
-81
-
-chain 6794 chr6_qbl_hap2 4565931 + 3775350 3775421 chr3 198022430 - 94748615 94748686 28659148
-71
-
-chain 6473 chr6_qbl_hap2 4565931 + 3694610 3694683 chr1 249250621 - 102907635 102907704 21815174
-11	4	0
-58
-
-chain 6457 chr6_qbl_hap2 4565931 + 1158502 1158569 chr6 171115067 + 30228837 30228904 29438118
-67
-
-chain 6422 chr6_qbl_hap2 4565931 + 3817908 3817976 chr6 171115067 + 32728707 32728775 29535243
-68
-
-chain 6368 chr6_qbl_hap2 4565931 + 2478912 2479004 chr6 171115067 - 132617434 132617532 20998654
-55	29	35
-8
-
-chain 5830 chr6_qbl_hap2 4565931 + 1098157 1098218 chr7 159138663 - 104622057 104622118 31091038
-61
-
-chain 5757 chr6_qbl_hap2 4565931 + 3825218 3825278 chr14 107349540 - 70017731 70017791 31292281
-60
-
-chain 5558 chr6_qbl_hap2 4565931 + 2472407 2472466 chr15 102531392 + 37673660 37673719 31870719
-59
-
-chain 5479 chr6_qbl_hap2 4565931 + 1111956 1112025 chr9 141213431 - 103321949 103322018 11235972
-69
-
-chain 5339 chr6_qbl_hap2 4565931 + 3885926 3885982 chrX 155270560 + 55718242 55718298 32499987
-56
-
-chain 5185 chr6_qbl_hap2 4565931 + 3788909 3788964 chr14 107349540 + 22827226 22827281 32987373
-55
-
-chain 5179 chr6_qbl_hap2 4565931 + 1150896 1150960 chr19 59128983 - 37357346 37357410 20742827
-53	10	10
-1
-
-chain 5176 chr6_qbl_hap2 4565931 + 1100596 1100651 chr14 107349540 + 79349485 79349540 33029769
-55
-
-chain 5058 chr6_qbl_hap2 4565931 + 3771065 3771119 chr1 249250621 - 172942963 172943017 33379587
-54
-
-chain 5039 chr6_qbl_hap2 4565931 + 2475495 2475548 chr7 159138663 - 94193358 94193411 33438564
-53
-
-chain 5038 chr6_qbl_hap2 4565931 + 1148806 1148858 chr6 171115067 + 29856463 29856515 33456716
-52
-
-chain 4959 chr6_qbl_hap2 4565931 + 3696457 3696510 chr18 78077248 + 5090594 5090647 22176919
-53
-
-chain 4949 chr6_qbl_hap2 4565931 + 3825516 3825569 chrX 155270560 - 91231208 91231261 33742123
-53
-
-chain 4829 chr6_qbl_hap2 4565931 + 1159026 1159076 chr6 171115067 + 30459319 30459369 34177698
-50
-
-chain 4685 chr6_qbl_hap2 4565931 + 3719592 3719642 chr12 133851895 + 112261417 112261467 34690970
-50
-
-chain 4391 chr6_qbl_hap2 4565931 + 4214058 4214103 chrX 155270560 - 99494613 99494658 30227326
-45
-
-chain 4348 chr6_qbl_hap2 4565931 + 3739277 3739323 chr7 159138663 - 76863668 76863714 34891433
-46
-
-chain 4338 chr6_qbl_hap2 4565931 + 2201356 2201401 chr6 171115067 + 30954494 30954539 34909104
-45
-
-chain 4061 chr6_qbl_hap2 4565931 + 2201872 2201914 chr6 171115067 + 30955145 30955187 31149648
-42
-
-chain 4003 chr6_qbl_hap2 4565931 + 2470663 2474155 chr12 133851895 + 104783555 104787047 2981748
-99	961	960
-40	481	480
-76	473	472
-44	1256	1259
-62
-
-chain 3775 chr6_qbl_hap2 4565931 + 2471376 2471416 chr10 135534747 - 90944157 90944197 25967017
-40
-
-chain 3639 chr6_qbl_hap2 4565931 + 3694572 3694610 chr3 198022430 + 101411146 101411184 20382400
-38
-
-chain 3574 chr6_qbl_hap2 4565931 + 2470595 2470633 chr3 198022430 - 173409162 173409200 29596632
-38
-
-chain 3494 chr6_qbl_hap2 4565931 + 3700422 3700459 chrX 155270560 + 104134375 104134412 29536090
-37
-
-chain 3491 chr6_qbl_hap2 4565931 + 2471293 2472133 chr8 146364022 - 12751685 12752521 3617865
-79	701	697
-60
-
-chain 3436 chr6_qbl_hap2 4565931 + 2471844 2473225 chr1 249250621 + 7474211 7475590 2872741
-34	959	957
-58	295	295
-35
-
-chain 3220 chr6_qbl_hap2 4565931 + 3776529 3776563 chr12 133851895 + 85826623 85826657 35349035
-34
-
-chain 3148 chr6_qbl_hap2 4565931 + 3825631 3825664 chr2 243199373 + 38182693 38182726 24706670
-33
-
-chain 2975 chr6_qbl_hap2 4565931 + 2478232 2478268 chr3 198022430 - 94213030 94213066 24807218
-36
-
-chain 2972 chr6_qbl_hap2 4565931 + 1105868 1105908 chr6 171115067 + 30459045 30459085 20759384
-40
-
-chain 2845 chr6_qbl_hap2 4565931 + 2470633 2470663 chr3 198022430 - 156603737 156603767 26791326
-30
-
-chain 2838 chr6_qbl_hap2 4565931 + 2474990 2475020 chr4 191154276 + 92075174 92075204 21730347
-30
-
-chain 2761 chr6_qbl_hap2 4565931 + 3804625 3804685 chr4 191154276 + 37278694 37278754 22658556
-60
-
-chain 2671 chr6_qbl_hap2 4565931 + 2478852 2478911 chr9 141213431 - 60456470 60456529 21094091
-59
-
-chain 2604 chr6_qbl_hap2 4565931 + 1151032 1151059 chr17 81195210 + 6784720 6784747 30920849
-27
-
-chain 2579 chr6_qbl_hap2 4565931 + 3700720 3700751 chr21 48129895 + 18677639 18677670 26190064
-31
-
-chain 2574 chr6_qbl_hap2 4565931 + 1150960 1151032 chrX 155270560 + 72544773 72544845 18935818
-72
-
-chain 2481 chr6_qbl_hap2 4565931 + 3804442 3804477 chr3 198022430 - 58737971 58738006 17138123
-35
-
-chain 2394 chr6_qbl_hap2 4565931 + 2478673 2478698 chr11 135006516 - 67345781 67345806 29321362
-25
-
-chain 2363 chr6_qbl_hap2 4565931 + 2473435 2473485 chr3 198022430 - 59783725 59783775 3613581
-50
-
-chain 2322 chr6_qbl_hap2 4565931 + 2470859 2470989 chr15 102531392 - 72822940 72823070 3150079
-130
-
-chain 2266 chr6_qbl_hap2 4565931 + 2470989 2471957 chr9 141213431 - 114376815 114377769 4168715
-45	845	831
-78
-
-chain 2263 chr6_qbl_hap2 4565931 + 2471123 2471268 chr12 133851895 + 84401354 84401499 4041581
-145
-
-chain 2209 chr6_qbl_hap2 4565931 + 2470765 2470818 chr3 198022430 + 182918728 182918781 9563966
-53
-
-chain 2087 chr6_qbl_hap2 4565931 + 2558317 2558369 chrX 155270560 - 89201309 89201361 22578016
-52
-
-chain 2078 chr6_qbl_hap2 4565931 + 1112026 1112064 chr3 198022430 + 120909358 120909396 13027265
-38
-
-chain 2035 chr6_qbl_hap2 4565931 + 2557888 2557938 chr16 90354753 + 47212776 47212826 17692575
-50
-
-chain 1978 chr6_qbl_hap2 4565931 + 4213820 4213948 chr15 102531392 - 61555806 61555934 2051418
-28	68	68
-32
-
-chain 1899 chr6_qbl_hap2 4565931 + 2558399 2558424 chrX 155270560 + 94068150 94068175 17734181
-25
-
-chain 1860 chr6_qbl_hap2 4565931 + 1112180 1112230 chr8 146364022 + 68079613 68079663 13479327
-50
-
-chain 1860 chr6_qbl_hap2 4565931 + 3812269 3815784 chr6 171115067 + 32722816 32726965 29521084
-61	2506	2690
-85	515	965
-52	103	103
-193
-
-chain 1828 chr6_qbl_hap2 4565931 + 2473656 2473684 chr14 107349540 - 54723100 54723128 20222699
-28
-
-chain 1658 chr6_qbl_hap2 4565931 + 1112136 1112169 chr4 191154276 + 153686345 153686378 11053932
-33
-
-chain 1514 chr6_qbl_hap2 4565931 + 1112233 1112291 chr13 115169878 - 5205835 5205893 10260311
-58
-
-chain 1396 chr6_qbl_hap2 4565931 + 2473606 2473656 chr1 249250621 + 83820278 83820328 4577579
-50
-
-chain 1388 chr6_qbl_hap2 4565931 + 4214123 4214166 chr19 59128983 - 43654778 43654821 2801865
-43
-
-chain 1329 chr6_qbl_hap2 4565931 + 2557727 2557778 chr7 159138663 - 55106997 55107048 20610784
-51
-
-chain 1304 chr6_qbl_hap2 4565931 + 4213365 4213389 chr1 249250621 + 182710286 182710310 2078906
-24
-
-chain 1296 chr6_qbl_hap2 4565931 + 4213389 4213424 chr8 146364022 + 99694 99728 9829550
-12	1	0
-22
-
-chain 1233 chr6_qbl_hap2 4565931 + 2558102 2558133 chr5 180915260 + 67992831 67992862 12309329
-31
-
-chain 1171 chr6_qbl_hap2 4565931 + 2473569 2473606 chrX 155270560 - 90928252 90928289 23413190
-37
-
-chain 1170 chr6_qbl_hap2 4565931 + 2471983 2472043 chr9 141213431 + 232427 232487 4190853
-60
-
-chain 1144 chr6_qbl_hap2 4565931 + 2469449 2469508 chr2 243199373 + 81796678 81796737 21594602
-59
-
-chain 1125 chr6_qbl_hap2 4565931 + 3694759 3694827 chr8 146364022 - 86779351 86779419 20749390
-68
-
-chain 1106 chr6_qbl_hap2 4565931 + 1112362 1112413 chr1 249250621 - 17660691 17660742 13643228
-51
-
-chain 1071 chr6_qbl_hap2 4565931 + 2470508 2470575 chr12 133851895 + 78891507 78891574 9444392
-67
-
-chain 1040 chr6_qbl_hap2 4565931 + 2470400 2470457 chr5 180915260 - 146134722 146134779 6672758
-57
-
-chain 1023 chr6_qbl_hap2 4565931 + 2471416 2471471 chr2 243199373 + 162554783 162554838 24613681
-55
-
-chain 935 chr6_qbl_hap2 4565931 + 2558067 2558102 chr4 191154276 + 31205 31240 16972854
-35
-
-chain 919 chr6_qbl_hap2 4565931 + 2474702 2474762 chr4 191154276 + 45112377 45112437 22402157
-60
-
-chain 902 chr6_qbl_hap2 4565931 + 2474552 2474612 chr5 180915260 - 23766246 23766306 4704228
-60
-
-chain 884 chr6_qbl_hap2 4565931 + 2473696 2473725 chr1 249250621 - 199045131 199045160 12500824
-29
-
-chain 825 chr6_qbl_hap2 4565931 + 1112413 1112452 chr1 249250621 - 184583816 184583855 16072417
-39
-
-chain 801 chr6_qbl_hap2 4565931 + 2470111 2470156 chr1 249250621 - 71436588 71436633 19248116
-45
-
-chain 789 chr6_qbl_hap2 4565931 + 3698600 3699777 chr19 59128983 + 8446620 8447803 26630175
-58	1059	1065
-60
-
-chain 788 chr6_qbl_hap2 4565931 + 2470239 2470322 chr6 171115067 + 137168270 137168353 4512040
-83
-
-chain 740 chr6_qbl_hap2 4565931 + 1112667 1112731 chr12 133851895 + 57178267 57178331 20850792
-64
-
-chain 718 chr6_qbl_hap2 4565931 + 2474782 2474837 chr9 141213431 - 49469911 49469966 23568604
-55
-
-chain 694 chr6_qbl_hap2 4565931 + 2469923 2469992 chrX 155270560 - 140437581 140437650 5405913
-69
-
-chain 584 chr6_qbl_hap2 4565931 + 2474349 2474405 chr15 102531392 + 67105223 67105279 15249534
-56
-
-chain 562 chr6_qbl_hap2 4565931 + 2557778 2557819 chrX 155270560 + 91975692 91975733 21019876
-41
-
-chain 562 chr6_qbl_hap2 4565931 + 2469824 2469884 chr2 243199373 - 169790362 169790422 25410177
-60
-
-chain 552 chr6_qbl_hap2 4565931 + 2237356 2237383 chr17 81195210 - 14890828 14890855 11066346
-27
-
-chain 523 chr6_qbl_hap2 4565931 + 2470057 2470111 chr13 115169878 + 42049099 42049153 16964924
-54
-
-chain 489 chr6_qbl_hap2 4565931 + 2469992 2470048 chr14 107349540 + 79003493 79003549 5260265
-56
-
-chain 481 chr6_qbl_hap2 4565931 + 2470189 2470239 chr8 146364022 + 50441810 50441860 5267091
-50
-
-chain 481 chr6_qbl_hap2 4565931 + 2469386 2469447 chr1 249250621 - 193322918 193322979 8728434
-61
-
-chain 455 chr6_qbl_hap2 4565931 + 2472488 2472547 chr6 171115067 - 85200236 85200295 17778688
-59
-
-chain 445 chr6_qbl_hap2 4565931 + 2469210 2469265 chrX 155270560 - 127487766 127487821 16318369
-55
-
-chain 358 chr6_qbl_hap2 4565931 + 2475020 2475084 chr4 191154276 + 74158363 74158427 16300933
-64
-
-chain 347 chr6_qbl_hap2 4565931 + 2469153 2469203 chr15 102531392 - 65978487 65978537 12839283
-50
-
-chain 246 chr6_qbl_hap2 4565931 + 3697415 3697467 chr12 133851895 - 104314075 104314127 28162397
-52
-
-chain 47340388 chr6_random 1875562 + 1357431 1875562 chr6 171115067 + 157393490 158069469 78
-906	2	2
-193	1	0
-29	1	0
-8	10	8
-11	2	1
-842	41	40
-754	2304	72101
-91082	5628	50000
-31833	338	50000
-42477	272	0
-39	168	66
-53	1	1
-15	1	103
-64	2	172
-23	1	103
-14474	4	0
-30198	0	8
-1391	2	0
-1319	4	0
-142	0	3
-3412	9	7
-372	1	1
-22	1	1
-5871	0	1
-237	26	25
-3020	1	1
-83	1	1
-141	7	7
-201	2	1
-403	1	0
-3638	1	0
-20	1	0
-552	32	32
-1386	0	1
-4174	1	1
-37	1	1
-3912	5	5
-4160	2	0
-6561	0	1
-3879	0	1
-8665	0	1
-2170	0	3
-895	1	0
-1812	0	1
-36	0	4
-133	1	0
-165	0	9
-427	0	1
-917	1	0
-3166	0	1
-16647	1	0
-6161	10	10
-833	4	0
-1934	1	1
-56	1	1
-2622	9	9
-749	1	0
-482	0	2
-344	1	1
-32	1	1
-868	2	0
-444	0	3
-1096	12	0
-709	0	1
-113	1	1
-35	1	1
-2349	20	0
-175	0	1
-1675	0	2
-1206	0	3
-345	0	5
-4695	1	0
-6715	1	1
-35	1	1
-2131	0	1
-4220	8	0
-2065	1	0
-1986	0	1
-484	0	1
-1543	4	4
-52	22	0
-5090	0	1
-2768	9	2
-12577	0	5
-13727	9	9
-51	4	4
-26	2	3
-11	0	1
-735	1	1
-35	0	1
-12	1	1
-2616	1	0
-327	1	1
-35	1	1
-345	0	20
-50	98	187
-975	1	0
-7329	0	1
-3241	0	35
-583	5	5
-278	1	1
-40	1	1
-123	12	12
-1208	17	0
-477	0	1
-163	1	1
-28	1	1
-3307	1	0
-66	1	1
-25	4	0
-2459	0	1
-1326	1	0
-700	1	0
-2316	6067	13
-725	3	0
-42	1	1
-8162	0	2
-2147	0	2
-79	1	1
-25	1	1
-313	1	0
-2194	1	0
-709	1	1
-33	1	1
-934	4	4
-543	1	1
-37	1	1
-2581	1	0
-606	1	0
-666	1	1
-34	2	2
-250	9	8
-652	1	0
-2306	22	0
-38	0	24
-946	1	0
-3766	1	1
-57	1	1
-3591	2	0
-128	1	1
-1414	7	1
-435	1	1
-29	1	0
-529	0	1
-3649	1	1
-32	0	1
-9760	0	18
-6470	1	1
-49	1	1
-488	0	1
-304	2	0
-1780	0	5
-2759	1	0
-48	1	1
-380	1	1
-33	1	1
-5102	1	1
-33	1	1
-192	0	1
-1103	1	1
-29	1	1
-12912	0	1
-9445	2	0
-2949	1	1
-28	1	1
-826	1	1
-19	1	1
-404	1	1
-49	1	1
-1408	8	0
-1625	10	0
-2962	0	1
-1824
-
-chain 37689909 chr6_random 1875562 + 884671 1286589 chr5 180915260 - 167715260 168127349 92
-6889	0	1
-34829	1	0
-4156	0	2
-4477	0	8
-7827	0	415
-37	9	9
-207	0	1
-272	7	7
-7925	1	0
-75982	0	1
-11336	0	1
-4233	14	14
-362	10	10
-4607	4	0
-1310	0	3
-1741	4	0
-499	1	1
-69	1	1
-509	15	15
-166	12	8
-145	0	2
-66	1	1
-16	1	1
-325	1	1
-31	1	1
-804	1	1
-109	1	1
-1071	0	106
-73	38	121
-1998	1	1
-37	1	1
-500	0	5
-625	3	0
-2354	1	1
-42	1	1
-1652	0	1
-92	1	1
-68	1	1
-1023	1	1
-16	1	1
-849	2	1
-28	1	1
-1793	4	2
-850	26	26
-251	0	2
-794	1	1
-26	1	1
-798	1	1
-80	1	1
-211	20	12
-153	1	3
-373	6	6
-231	0	4
-302	1	1
-26	1	1
-305	0	4
-3735	1	0
-342	0	2
-2211	0	1
-1969	2	0
-2834	0	10
-1054	0	14
-2176	0	2
-10517	0	2
-3071	6	0
-5697	21	21
-2458	0	5
-1335	3	0
-411	1	5
-2718	10	11
-3652	1	0
-785	1	0
-777	1	0
-2088	0	1
-24	1	1
-1005	16	16
-5426	18	0
-378	1	0
-19	1	1
-5303	0	14
-19	18	0
-2125	1	0
-936	0	5
-29	1	1
-893	19	19
-312	0	2
-32151	1	0
-14548	1	0
-109	0	1
-1481	1	0
-6537	0	2
-3390	1	0
-7479	6	0
-29963	4	0
-3972	9	5
-1637	0	9
-7977	1	0
-1973	0	3
-1212	0	5
-372	29	19
-1216	0	50
-628	0	4
-8388	0	1
-1429	1	0
-3029	2	4
-785	1	0
-291	10	9516
-1642	0	1
-5042	1	0
-1117	1	0
-1558	8	7
-1475	4	0
-1859	0	1
-9528	0	1
-877
-
-chain 31999718 chr6_random 1875562 + 165017 507468 chr6 171115067 - 55532370 55875067 101
-42954	0	1
-24905	1	0
-579	0	6
-612	0	1
-1128	0	2
-5541	1	1
-30	1	1
-2064	1	0
-505	0	1
-1974	0	1
-5299	1	1
-16	1	1
-368	1	1
-28	1	1
-7024	1	0
-19574	8	9
-6646	4	0
-6060	0	1
-2290	0	1
-22638	6	58
-1402	0	1
-502	0	1
-218	0	1
-5768	0	1
-178	0	3
-659	1	1
-33	0	8
-92	4	0
-693	0	2
-1190	0	3
-375	5	0
-422	3	0
-2215	1	0
-7271	1	1
-33	1	1
-817	1	1
-67	1	1
-2442	1	1
-62	16	0
-165	1	0
-1535	1	1
-32	1	1
-596	4	4
-627	1	1
-22	1	2
-201	5	5
-35	1	1
-232	5	0
-651	4	4
-26	1	1
-105	1	1
-45	1	1
-325	1	1
-34	1	1
-265	1	1
-91	2	0
-1383	1	1
-35	1	1
-1469	19	19
-295	0	1
-644	0	1
-3324	1	1
-44	1	1
-1797	1	5
-21	2	0
-10	11	1
-58	2	0
-61	1	9
-715	0	1
-388	1	1
-47	1	1
-774	1	0
-571	0	3
-2308	0	1
-103	15	15
-1339	1	1
-19	1	1
-348	0	1
-372	1	1
-31	0	1
-4	4	0
-14	1	5
-14	1	25
-4634	1	1
-16	2	2
-305	27	24
-2252	10	217
-1695	0	2
-2541	0	7
-741	2	0
-1401	0	2
-202	2	13
-3853	1	0
-3037	36	0
-18	2	0
-25	94	0
-14	0	4
-487	0	1
-5889	0	1
-572	1	1
-17	1	1
-806	1	1
-24	1	1
-723	0	2
-1640	1	0
-2023	1	1
-21	1	1
-192	15	1
-994	0	106
-1362	2	0
-324	1	1
-19	1	1
-683	1	1
-39	1	0
-771	1	0
-1211	13	0
-1728	1	1
-23	1	1
-911	0	2
-1042	6	6
-206	5	0
-17	1	1
-3351	14	19
-783	1	1
-48	1	1
-673	0	4
-137	1	1
-23	1	0
-1357	4	0
-254	0	1
-1408	0	7
-564	1	1
-49	1	1
-319	13	13
-721	12	12
-821	2	0
-912	4	4
-47	1	1
-148	1	1
-61	1	1
-267	1	1
-46	1	1
-421	1	1
-36	1	1
-577	1	1
-35	1	1
-122	1	1
-95	1	1
-241	1	1
-40	1	1
-585	10	1
-1286	0	1
-97	2	0
-22	1	1
-969	0	1
-1448	14	20
-2000	1	0
-1448	0	1
-2390	1	1
-18	5	5
-1421	1	0
-412	0	1
-1867	2	1
-179	3	0
-852	1	0
-1426	20	18
-151	1	1
-26	1	1
-581	1	1
-86	2	1
-2659	1	0
-12163	2	0
-1149	13	13
-818	16	16
-113	1	1
-51	1	1
-343	1	1
-91	0	4
-7	2	0
-8	0	2
-914	1	1
-28	1	1
-670	1	0
-151	7	7
-1887	18	18
-119	0	5
-2395	2	0
-4395	0	6
-380	6	1
-423	17	17
-531	1	0
-23	0	6
-592	1	1
-23	1	0
-844	4	0
-1497	6	0
-407	17	17
-341	19	17
-1020	0	6
-178	1	0
-1233	0	1
-1861	0	1
-2007	2	0
-6480	1	1
-36	1	1
-6817	17	20
-3356	7	5
-1788	1	1
-83	0	1
-7678	18	18
-2095	1	1
-19	1	1
-4934
-
-chain 25195472 chr6_random 1875562 + 615192 884135 chr6 171115067 + 167833423 168297434 120
-2006	1	0
-2654	1	1
-28	1	1
-3139	1	1
-85	1	1
-690	0	1
-639	0	2
-1589	4	4
-122	2	0
-1127	0	1
-1104	1	102
-18	0	29
-40	0	3
-22	1	4
-50	0	26
-56	124	195105
-10440	18	25
-3042	0	24
-72	0	8
-206	4	0
-146	4	0
-2483	0	4
-702	0	1
-1035	0	8
-85	3	1
-2710	1	1
-84	1	1
-3774	1	1
-58	1	1
-20613	15	53
-14	32	0
-52	0	4
-1883	4	0
-52	3	0
-44036	171	0
-2224	2	2
-57	1	1
-7263	0	64
-5311	0	2
-24677	8	8
-1972	1	0
-3543	2	2
-46	1	0
-11768	1	0
-494	47	19
-36447	1	1
-67	1	1
-11347	8	0
-4230	1	3
-591	5	5
-1020	0	8
-680	1	1
-60	1	1
-4536	0	1
-1417	0	2
-2471	1	1
-22	1	1
-6781	0	5
-4943	5	0
-1067	2	0
-2588	2	0
-523	34	35
-9266	0	2
-3897	0	2
-1404	0	1
-3120	0	1
-2566	1	0
-1825	0	8
-5342
-
-chain 9830417 chr6_random 1875562 + 510011 615192 chr5 180915260 - 108917398 109022458 335
-331	57	57
-1247	1	0
-4094	15	15
-6775	12	0
-6148	1	0
-30	1	1
-251	0	1
-26	26	1
-238	1	1
-29	1	1
-148	1	1
-41	1	1
-5831	6	7
-2439	1	0
-4247	12	42
-2333	1	9
-3039	5	0
-476	2	2
-4359	0	1
-1237	11	11
-1223	12	0
-2800	2	0
-2660	0	1
-4531	1	1
-24	1	1
-7407	0	1
-395	2	0
-1841	391	0
-410	50	26
-321	1	1
-27	1	1
-226	9	9
-157	6	6
-80	1	1
-70	1	1
-5158	10	10
-1385	4	0
-991	0	2
-48	1	1
-1083	0	2
-751	0	1
-4266	1	1
-48	1	1
-1557	0	304
-1552	1	1
-21	1	1
-2652	1	0
-598	0	8
-115	15	16
-1277	1	1
-38	1	1
-898	1	1
-27	1	1
-699	0	1
-34	1	1
-279	4	0
-12	1	1
-2863	1	1
-25	1	1
-2484	12	15
-1447	1	0
-8689
-
-chain 8736931 chr6_random 1875562 + 25094 155092 chr6 171115067 - 3172994 3267843 378
-3079	5	5
-1125	2	0
-1270	7	14
-1955	1	1
-47	1	1
-4538	38	38
-1300	25	26
-67	7	8
-176	3	0
-1132	3	0
-906	103	48
-5311	0	16
-133	1	0
-94	153	987
-142	13	13
-2453	2	0
-238	2	0
-960	13	13
-4697	1	1
-26	1	1
-3575	36650	734
-4434	0	1
-5190	138	107
-33	1	1
-5998	4	0
-1660	1	0
-4740	1	1
-29	1	1
-7196	0	12
-17519	30	29
-12768
-
-chain 553807 chr6_random 1875562 + 1768811 1774813 chr4 191154276 - 111879139 111885141 10762
-1294	2	2
-109	1	1
-242	1	1
-106	1	1
-2122	1	1
-17	1	1
-200	1	1
-40	1	1
-1071	1	1
-24	1	1
-284	1	1
-77	1	1
-403
-
-chain 255982 chr6_random 1875562 + 1456339 1459136 chr6 171115067 + 157377507 157380303 364419
-1101	4	4
-21	1	0
-70	43	44
-1490	1	0
-66
-
-chain 238316 chr6_random 1875562 + 1453720 1456237 chr6 171115067 - 13762873 13765390 431401
-2517
-
-chain 190390 chr6_random 1875562 + 1355230 1357270 chr6 171115067 - 13765611 13767650 644275
-875	0	1
-30	1	0
-7	0	1
-32	2	0
-1093
-
-chain 147846 chr6_random 1875562 + 163259 164828 chr10 135534747 - 86648034 86649603 870502
-1569
-
-chain 66179 chr6_random 1875562 + 509035 509994 chr6 171115067 - 55868072 55869030 1909901
-52	241	240
-666
-
-chain 39557 chr6_random 1875562 + 507468 508471 chr14 107349540 - 76514262 76515265 2447482
-67	13	13
-252	48	48
-70	43	43
-73	340	340
-97
-
-chain 15445 chr6_random 1875562 + 574580 574743 chr6 171115067 + 168277787 168277950 14597733
-163
-
-chain 11899 chr6_random 1875562 + 508034 508258 chr7 159138663 - 61729371 61729595 2527246
-50	119	119
-55
-
-chain 6795 chr6_random 1875562 + 508264 508336 chr5 180915260 + 74550099 74550171 28643390
-72
-
-chain 5830 chr6_random 1875562 + 884328 884389 chr6 171115067 - 37135398 37135459 31091070
-61
-
-chain 5767 chr6_random 1875562 + 508601 508846 chr8 146364022 + 54253304 54253548 3655159
-50	103	102
-92
-
-chain 4821 chr6_random 1875562 + 16131 16182 chr10 135534747 - 59552661 59552712 34213212
-51
-
-chain 3598 chr6_random 1875562 + 720272 720329 chr6 171115067 + 168133749 168133806 2857460
-57
-
-chain 3185 chr6_random 1875562 + 1768774 1768810 chr2 243199373 + 130168617 130168653 16948
-36
-
-chain 2982 chr6_random 1875562 + 508896 508970 chr12 133851895 - 4327021 4327095 12758815
-74
-
-chain 2685 chr6_random 1875562 + 509240 510388 chr3 198022430 - 97729559 97730704 3388749
-33	1069	1066
-46
-
-chain 2530 chr6_random 1875562 + 720329 720365 chr6 171115067 + 168133920 168133956 3810246
-36
-
-chain 2208 chr6_random 1875562 + 720386 720422 chr6 171115067 + 168133692 168133728 3917950
-36
-
-chain 1957 chr6_random 1875562 + 507800 507848 chr1 249250621 - 36684504 36684552 2679811
-48
-
-chain 1423 chr6_random 1875562 + 508846 508894 chr2 243199373 - 143356177 143356225 7803118
-48
-
-chain 1172 chr6_random 1875562 + 508537 508601 chrX 155270560 + 123719418 123719482 4007841
-64
-
-chain 1047 chr6_random 1875562 + 509273 509328 chr20 63025520 + 3479096 3479151 2808508
-55
-
-chain 560 chr6_random 1875562 + 508669 508719 chr5 180915260 - 128392227 128392277 20287927
-50
-
-chain 14618906734 chr7 158821424 + 102995 158821424 chr7 159138663 + 10238 159128663 7
-973	5	0
-3912	0	2
-1234	4	0
-51	0	6
-70	1	1
-24	1	0
-143	8	0
-16	170	1
-47	1	1
-243	0	6
-913	3	0
-2538	980	0
-63	1610	0
-1362	0	1
-2104	0	456
-1158	0	1
-791	1	1
-49	0	1
-4175	8	0
-17	1	1
-4845	12	0
-2509	0	1
-1697	6	6
-192827	150000	278557
-5682472	0	1
-42007910	40000	35970
-4371	7	16
-17699	0	4
-5249	4	0
-2088410	1	1
-47	1	1
-4565	0	1
-7116	0	1
-2706	40000	43050
-6577293	50000	13552
-1052855	3000000	3000000
-256182	50000	416507
-190137	50000	50000
-5722629	24	25
-239	1	1
-59	2	2
-138	1	1
-34	1	1
-206	1	3
-18	1	0
-410	1	1
-72	1	1
-199	1	1
-62	5	5
-120	1	0
-468	1	1
-32	1	1
-264	1	1
-23	1	1
-1459	4	4
-107	1	1
-42	1	0
-14	1	1
-201	1	1
-46	1	1
-268	20	20
-303	2	1
-866	0	4
-76	3	3
-63	1	1
-74	1	0
-25	1	1
-66	1	1
-34	0	2
-180	35	36
-93	1	1
-41	1	1
-70	1	1
-49	1	1
-63	1	1
-57	1	1
-383	1	1
-133	1	1
-87	1	1
-38	4	4
-50	0	1
-46	5	6
-136	11	11
-200	1	1
-63	4	0
-6	9	0
-263	1	1
-32	3	3
-152	16	16
-567	1	0
-322	3	0
-1258	0	1
-505	4	0
-1141	11	10
-537	12	12
-1418	1	1
-47	0	1
-164	7	7
-90	5	0
-156	1	1
-20	1	1
-380	3	3
-41	3	0
-5	2	2
-921	1	1
-34	1	1
-1607	2	2
-73	66	0
-46	14	0
-168	1	1
-53	1	1
-3195	1	1
-23	1	1
-2115	0	14
-9872	1	0
-1204	13	13
-416	1	0
-2311	319	0
-6906	0	10
-184	24	0
-2933	4	0
-1392	0	12
-1856	5	0
-3439	0	1
-469	3	0
-771	15	12
-497	1	1
-65	1	1
-1210	0	2
-4131	10	10
-1198	1	0
-718	1	1
-21	1	1
-3668	1	0
-874	1	1
-25	1	1
-2444	0	1
-1867	1	1
-29	1	1
-1660	0	1
-1232	0	6
-784	1	0
-705	0	3
-3577	1	0
-365	1	0
-3389	8	4
-2652	0	3
-664	0	1
-169	1	0
-8	1	1
-138	0	1
-8037	0	56
-112	196	0
-495	0	35
-3028	1	1
-40	1	1
-1068	4	0
-631	0	33
-29	2	0
-86	9	1
-3081	2	0
-806	0	1
-21	1	1
-3901	26	27
-843	0	1
-6916420	250000	50000
-25789103	0	51216
-1399994	1	0
-3623	0	212
-38	1	1
-210	1	0
-5	1	0
-6	1	0
-18	1	0
-1321	16	0
-2187	1	0
-145	0	1
-1388	7	7
-2240	14	14
-771	1	1
-34	1	1
-92	1	1
-39	1	1
-505	1	0
-66	1	1
-49	1	1
-159	1	0
-78	3	0
-15	2	0
-7	1	0
-28	1	0
-27	468	5
-2022	1	0
-1796	7	7
-61	1	1
-20	1	1
-4560	3	0
-157730	1	0
-194	14	14
-650	0	12
-717	26	26
-819	0	5
-278	60	32
-69	0	5
-1345	8	0
-652	84	0
-118	0	4
-498	0	1
-3187	1	1
-43	1	1
-1476	0	3
-2101	5	0
-788	6	6
-872	0	6
-893	3	0
-155	33	33
-4610	5	7
-521	10	0
-2773	40	40
-627	43	43
-1424	0	1
-2554	8	8
-44	0	7
-615	1	1
-32	3	0
-2693	0	1
-1029	0	2
-151	0	1
-1753	0	21
-370	2	3
-969	0	1
-452	1	0
-3035	1	1
-40	1	1
-704	0	2
-2472	0	6
-238	1	0
-1442	1	1
-37	5	5
-126	0	1
-795	0	1
-1191	1	0
-171	17	16
-724	6	5
-2988	40	42
-359	2	0
-199	19	19
-1969	1	0
-251	0	1
-729	0	1
-992	27	27
-205	4	0
-3209	0	2
-1006	8	10
-1571	10	10
-756	0	1
-36	1	1
-433	0	1
-672	0	3
-4430	157	0
-5606	5	1
-17	1	1
-942	10	9
-3433	2	1
-24	1	1
-4262	13	0
-661	2	0
-167	8	0
-3474	6	11
-217	0	2
-778	34	34
-158	0	1
-1167	0	1
-684	0	1
-878	39	39
-2012	0	1
-345	52	52
-640	0	2
-27874045	0	136705
-2519	0	2
-1000	8	0
-14695	1	0
-4456	1	0
-2977	1	0
-9065130	25000	29055
-2369	1	0
-12174	18	20
-877	0	4
-5247	0	12
-3483	2	0
-6766	0	1
-2469878	0	1
-734	2	2
-99	0	1
-2471	1	1
-11	1	1
-758	8	0
-2234	13	14
-8394	1	0
-47	1	1
-903	0	1
-5537	0	1
-269	1	0
-7114	1	1
-30	1	1
-2412	0	1
-2442	21	21
-91	1	1
-37	1	1
-96	1	1
-22	1	1
-246	1	1
-23	1	1
-254	12	12
-569	1	1
-27	1	1
-1624	1	0
-112	3	3
-45	1	1
-384	13	13
-70	1	0
-658	1	1
-20	1	1
-176	1	0
-307	19	19
-428	1	1
-19	1	1
-87	1	1
-30	1	1
-140	1	0
-292	2	0
-1492	1	0
-302	0	2
-364	1	1
-35	1	1
-1956	0	1
-728	12	12
-6522	2	2
-1531	1	0
-488	1	0
-2056	18	8
-1286	1	1
-27	1	1
-731	1	0
-1423	0	7
-2010	1	1
-19	1	1
-6423	0	4
-57	1	1
-4505	13	0
-933	0	12
-1250	0	1
-1313	1	0
-2610	0	1
-2398	0	1
-453	1	0
-346	1	1
-12	1	1
-83	25	25
-83	12	12
-277	0	1
-45	1	0
-811	2	0
-164	0	1
-104	0	1
-32	1	1
-1386	0	14
-306	1	1
-43	1	1
-2765	0	1
-1819	0	1
-1480	1	1
-24	1	1
-276	0	1
-21	0	1
-119	2	0
-12	26	0
-541	1	1
-63	1	1
-180	0	1
-2456	1	0
-1055	1	0
-1166	2	0
-784	0	4
-170	1	0
-939	6	0
-5597	15	15
-1253	0	1
-3336	0	18
-1851	9	0
-45	1	1
-657	38	38
-4099	0	1
-1387	2	0
-1460	1	0
-204	0	5
-1506	0	1
-2621	1	0
-6620	0	1
-34	1	1
-249	1	0
-1440	0	10
-245	0	1
-368	1	9
-257	4	0
-1589	6	0
-1543	0	1
-4189	120	0
-354	312446	278046
-3734	24	25
-3097	1	0
-8	1	1
-4861	0	4
-5649	1	0
-2011	0	1
-4344	24	24
-10546	42	1467
-20955	0	1
-2075	2	1
-5546	1	0
-2168	4	0
-1266	1	0
-4124	1	1
-46	1	1
-54	1	1
-43	15	0
-780	1	1
-25	1	1
-497	0	1
-46	1	1
-810	0	1
-5701	0	1
-6998	0	1
-2002	0	3
-7160	1	1
-24	1	1
-479	2	0
-1872	0	1
-1192	1	0
-371	2	0
-31	1	1
-572	16	16
-1725	16	16
-588	1	1
-90	1	1
-2483	3	19
-187	0	1
-20	1	1
-3673	1	1
-27	4	0
-3021	1	0
-1323	19	6
-498	13	13
-1618	2	0
-5282	0	1
-719	0	8
-2994	1	0
-2822	0	2
-1396	1	1
-48	1	1
-8723	5	0
-291	1	1
-25	1	1
-116	0	1
-2809	1	1
-27	1	1
-224	1	1
-48	1	1
-292	0	2
-400	0	1
-754	1	1
-19	1	1
-4225	1	1
-28	1	1
-801	1	0
-671	1	1
-17	1	1
-390	1	1
-28	1	1
-84	7	7
-568	1	1
-56	1	1
-499	7	8
-266	1	1
-31	1	1
-518	18	18
-164	1	1
-50	1	1
-162	1	1
-60	1	1
-702	1	1
-28	1	1
-146	18	17
-517	1	1
-24	1	1
-686	12	12
-101	1	1
-22	5	5
-107	5	5
-277	9	9
-272	1	1
-48	1	1
-77	1	1
-67	1	1
-1548	1	1
-40	1	1
-763	1	1
-42	1	1
-541	8	8
-88	1	1
-77	1	1
-233	11	11
-311	1	1
-22	1	1
-147	1	8
-504	1	1
-26	1	1
-987	20433	0
-3090	1	0
-405	5	5
-1811	1	0
-1174	0	1
-70	1	1
-1100	10143	18
-2722	0	1
-2957	1	1
-32	1	1
-9585	0	1
-1350	0	1
-473	0	1
-675	0	1
-1435	0	1
-805423	0	79189
-10872737	100000	100000
-721570	1	1
-19	1	1
-816	1	1
-44	1	1
-572	8	6
-2021	0	4
-1001	2	0
-3757	1	0
-5942	2	2
-70	1	1
-100	7	7
-395	80000	17188
-1010	1	1
-45	1	1
-1486	18	18
-173	1	17
-15	1	17
-158	0	192
-33	0	368
-50	50	2
-40	1	1
-95	4	52
-60	39	8
-15	16	0
-92	16	0
-1589	0	1
-897	13	13
-28	3	3
-2454	1	1
-44	1	1
-301	0	468
-2030	1	1
-45	1	1
-1277	8	0
-1716	1	0
-1579	11	15
-2439	36	0
-39	37	1
-349	21	92
-2096	13	11
-192	1	1
-48	1	1
-130	1	1
-22	1	1
-970	1	1
-23	4	0
-64	0	14
-129	17	11
-154	13	14
-53	15	5
-48	1	1
-47	0	2
-114	18	16
-363	1	1
-43	1	1
-559	1	1
-32	1	1
-3980007
-
-chain 16701236 chr7 158821424 + 141723881 141902219 chr7 159138663 - 16862466 17040468 171
-1662	1	1
-69	1	1
-887	1	1
-16	1	1
-115	339	1
-1512	0	1
-3597	0	1
-309	2	0
-34	1	1
-623	0	2
-1746	2	0
-816	4	0
-7868	1	0
-22	0	4
-593	0	1
-2757	0	1
-1147	7	7
-134	1	1
-42	1	1
-669	1	1
-25	1	1
-539	1	1
-49	1	1
-1387	1	1
-53	0	1
-19	1	1
-878	1	1
-27	1	1
-9739	1	1
-15	1	1
-2064	0	1
-1069	1	1
-31	1	1
-612	0	1
-21	1	1
-821	2	0
-1002	2	0
-3478	4	0
-1394	1	1
-25	1	0
-60	1	0
-4	1	0
-10	1	0
-23	0	1
-12	0	1
-2396	1	1
-25	1	1
-401	0	2
-1918	0	2
-43	1	1
-806	1	1
-36	1	1
-126	1	1
-53	1	1
-411	5	5
-524	13	13
-2896	1	1
-62	1	1
-4194	2	0
-8269	2	0
-368	11	10
-546	1	0
-1040	2	0
-45	1	1
-234	1	1
-29	1	1
-1218	16	16
-206	11	11
-584	13	13
-334	4	4
-167	3	3
-31	1	1
-973	9	9
-142	81	81
-58	1	0
-74	1	0
-1707	19	19
-2413	1	1
-57	1	1
-160	1	1
-23	1	1
-2380	0	1
-5561	0	4
-2790	14	14
-76	3	0
-1823	1	1
-11	0	9
-6	2	0
-5	3	0
-9	5	0
-28	1	1
-727	1	1
-37	1	1
-2678	0	3
-1497	1	0
-3414	1	0
-1171	6	6
-4018	7	7
-269	1	1
-36	1	1
-366	1	1
-22	1	1
-916	0	9
-2431	1	1
-68	1	1
-855	4	4
-1052	2	2
-81	0	2
-45	7	7
-648	1	1
-27	1	1
-402	1	0
-791	1	1
-41	1	1
-1041	20	20
-1094	1	1
-29	4	0
-364	1	1
-40	0	1
-22	0	1
-124	0	1
-205	0	1
-720	0	1
-59	1	1
-1063	2	0
-112	2	0
-3106	15	15
-2542	1	1
-64	1	1
-3052	1	1
-73	1	1
-3722	1	1
-31	1	1
-3476	1	0
-229	1	1
-40	1	1
-1321	0	5
-1845	1	0
-558	5	5
-3811	19	19
-125	1	1
-25	1	1
-3387	1	0
-1781	4	4
-2191	0	1
-1201	0	1
-260	1	1
-17	7	7
-137	0	1
-38	1	1
-732	0	1
-1626	1	0
-1987	2	0
-45	1	1
-763	0	1
-1978	0	1
-135	1	0
-6209	1	0
-24	1	1
-4867	0	1
-171	0	1
-6299
-
-chain 6490016 chr7 158821424 + 34000 116005 chr16 90354753 - 90001 171511 354
-591	11	11
-383	0	4
-1364	1	0
-430	12	13
-1431	1	1
-21	1	1
-490	12	12
-509	1	1
-97	1	1
-604	2	0
-1188	1	3
-665	1	1
-22	6	0
-499	1	1
-19	1	1
-402	1	1
-51	1	1
-1193	0	4
-245	1	0
-688	0	1
-975	2	0
-463	0	23
-73	24	0
-32	7	0
-165	1	0
-1593	1	1
-20	1	1
-1203	1	1
-31	1	1
-740	2	0
-47	1	1
-485	1	1
-63	1	1
-381	5	0
-28	1	1
-254	1	1
-22	1	1
-306	0	1
-34	1	1
-283	0	2
-627	10	10
-74	1	1
-50	1	1
-1053	0	1
-54	1	1
-77	1	1
-210	1	1
-70	0	3
-1957	0	4
-2154	1	1
-69	1	1
-147	67	67
-69	1	1
-74	1	1
-242	1	1
-41	1	1
-63	5	5
-155	3	1
-101	1	1
-53	1	1
-877	1	1
-21	1	1
-60	1	1
-49	1	1
-167	1	1
-21	1	1
-623	15	15
-202	0	97
-86	0	49
-9	2	2
-84	5	248
-56	1	98
-40	0	1
-48	1	0
-87	1	1
-55	99	1
-50	50	0
-23	1	1
-81	0	194
-78	1	1
-55	3	3
-53	6	344
-15	1	1
-262	1	1
-80	1	1
-455	1	1
-108	3	3
-431	1	1
-101	1	1
-158	1	0
-9	1	1
-323	3	0
-85	1	1
-19	1	1
-345	32	0
-24	1	1
-342	1	1
-65	1	1
-90	8	8
-545	1	1
-130	2	2
-87	4	3
-62	3	3
-34	2	2
-77	1	1
-47	1	1
-61	1	1
-27	1	1
-224	7	7
-117	2	0
-17	1	1
-242	1	1
-34	1	1
-107	1	1
-36	1	1
-100	15	15
-154	0	8
-13	1	0
-34	5	5
-100	27	27
-263	11	11
-116	1	1
-41	1	1
-117	1	1
-49	1	1
-116	2	0
-70	1	1
-174	1	1
-125	1	1
-70	1	1
-30	1	1
-74	1	1
-32	1	1
-337	1	1
-49	1	1
-2127	1	1
-35	1	1
-538	1	1
-32	1	1
-744	10	10
-471	53	17
-2001	7	7
-453	1	0
-2656	0	1
-1785	1	0
-1454	1	1
-33	1	1
-419	1	1
-49	1	1
-4610	1	1
-36	1	1
-905	1	1
-13	0	2
-5128	17	17
-519	0	3
-613	7	0
-660	0	4
-2632	1	2
-278	21	21
-969	1	0
-2852	14	14
-149	1	1
-21	1	1
-198	1	1
-29	1	1
-801	6442	6416
-125	6	0
-39	3745	3755
-814	162	1
-4	63	63
-74	63	0
-47	1056	13
-370
-
-chain 227647 chr7 158821424 + 141707499 141716076 chr7 159138663 + 142043811 142047809 475649
-53	484	465
-55	51	51
-78	242	220
-60	274	271
-51	13	13
-51	37	37
-229	4	4
-228	16	16
-108	47	47
-50	4583	49
-498	131	130
-945	36	36
-253
-
-chain 87685 chr7 158821424 + 58756 115635 chr3 198022430 - 71488 126874 406
-67	3328	3375
-28	1	1
-29	2	2
-39	50	50
-7	2	2
-41	2708	1663
-32	2831	2828
-27	46647	46820
-96	378	0
-152	47	12
-72	252	0
-43
-
-chain 48969 chr7 158821424 + 142175391 142175904 chr7 159138663 + 142475439 142475952 2613549
-513
-
-chain 47803 chr7 158821424 + 141911444 141913842 chr7 159138663 - 17029555 17031946 2683091
-78	139	139
-57	226	225
-124	92	92
-56	135	135
-72	193	193
-53	23	23
-133	958	952
-59
-
-chain 43189 chr7 158821424 + 142199519 142199970 chr7 159138663 + 142498738 142499189 3009311
-451
-
-chain 30396 chr7 158821424 + 67364377 67364696 chr15 102531392 - 56463077 56463396 4465114
-319
-
-chain 30094 chr7 158821424 + 141700053 141707301 chr7 159138663 + 142042846 142043613 4669748
-89	15	15
-68	6585	104
-66	129	129
-62	35	35
-199
-
-chain 30060 chr7 158821424 + 141963578 141964737 chr11 135006516 + 33264685 33266127 4680203
-91	398	397
-87	228	512
-77	163	163
-115
-
-chain 28591 chr7 158821424 + 141910578 141910878 chr7 159138663 - 17028690 17028990 5361712
-300
-
-chain 21822 chr7 158821424 + 141716123 141716468 chr7 159138663 + 142047850 142048195 9124304
-170	99	99
-76
-
-chain 20144 chr7 158821424 + 142166403 142167075 chr9 141213431 + 33792981 33793662 10344618
-82	380	389
-66	18	18
-51	19	19
-56
-
-chain 16654 chr7 158821424 + 101805867 101806156 chr7 159138663 - 92369277 92369565 11127744
-33	12	11
-63	91	91
-90
-
-chain 14923 chr7 158821424 + 102039289 102039446 chr7 159138663 + 102153090 102153247 2823
-157
-
-chain 10542 chr7 158821424 + 115456 115592 chr16 90354753 - 170836 170972 2672410
-136
-
-chain 10012 chr7 158821424 + 114469 115025 chr9 141213431 - 90660 90901 550
-63	395	80
-98
-
-chain 9195 chr7 158821424 + 141943788 141943884 chr7 159138663 - 16914722 16914818 24637833
-96
-
-chain 8667 chr7 158821424 + 142177809 142178136 chr7 159138663 + 142477851 142478180 25450135
-54	219	221
-54
-
-chain 7349 chr7 158821424 + 142180607 142180684 chr7 159138663 + 142480664 142480741 27551182
-77
-
-chain 7340 chr7 158821424 + 142180197 142180274 chr7 159138663 + 142480253 142480330 27565643
-77
-
-chain 6886 chr7 158821424 + 141960844 141960917 chr8 146364022 - 77913390 77913463 28463282
-73
-
-chain 6730 chr7 158821424 + 102059075 102062034 chr7 159138663 + 102172727 102175692 3338
-34	2887	2893
-38
-
-chain 6431 chr7 158821424 + 142166514 142166582 chr7 159138663 + 142454997 142455065 29498865
-68
-
-chain 6414 chr7 158821424 + 114166 115456 chr9 141213431 - 90644 91234 1816570
-68	791	378
-44	328	41
-59
-
-chain 6276 chr7 158821424 + 142176939 142177005 chr7 159138663 + 142476982 142477048 29891950
-66
-
-chain 6166 chr7 158821424 + 142179945 142180009 chr7 159138663 + 142480002 142480066 30171758
-64
-
-chain 5761 chr7 158821424 + 141963726 141963989 chr14 107349540 - 25420241 25420503 6848073
-68	130	129
-65
-
-chain 5666 chr7 158821424 + 142179798 142179857 chr7 159138663 + 142479855 142479914 31548103
-59
-
-chain 5608 chr7 158821424 + 101977370 101977454 chr7 159138663 + 44036096 44036185 7960
-10	0	5
-74
-
-chain 5430 chr7 158821424 + 142178562 142178619 chr7 159138663 + 142478613 142478670 32231795
-57
-
-chain 5139 chr7 158821424 + 142176520 142176574 chr7 159138663 + 142476565 142476619 33117712
-54
-
-chain 5020 chr7 158821424 + 141966623 141966675 chr12 133851895 + 53762512 53762564 33527602
-52
-
-chain 4939 chr7 158821424 + 142176195 142176247 chr7 159138663 + 142476241 142476293 33775264
-52
-
-chain 4778 chr7 158821424 + 73598 73651 chr5 180915260 - 172444 172497 587
-53
-
-chain 4039 chr7 158821424 + 101996220 101996263 chr7 159138663 + 102308194 102308237 1871
-43
-
-chain 3908 chr7 158821424 + 142167123 142167183 chr7 159138663 + 142455620 142455680 17639294
-60
-
-chain 3217 chr7 158821424 + 141963833 141963883 chr6 171115067 - 41704900 41704950 22743877
-50
-
-chain 2759 chr7 158821424 + 67423135 67423165 chr7 159138663 + 67785172 67785202 11329361
-30
-
-chain 2575 chr7 158821424 + 67423107 67423135 chr7 159138663 + 67785172 67785200 11329362
-28
-
-chain 2575 chr7 158821424 + 67423079 67423107 chr7 159138663 + 67785172 67785200 11329363
-28
-
-chain 2575 chr7 158821424 + 67423051 67423079 chr7 159138663 + 67785172 67785200 11329364
-28
-
-chain 2575 chr7 158821424 + 67423023 67423051 chr7 159138663 + 67785172 67785200 11329365
-28
-
-chain 2575 chr7 158821424 + 67422995 67423023 chr7 159138663 + 67785172 67785200 11329366
-28
-
-chain 2457 chr7 158821424 + 114257 114311 chr16 90354753 - 170806 170860 17475755
-54
-
-chain 2391 chr7 158821424 + 67422969 67422995 chr7 159138663 + 67785202 67785228 13667102
-26
-
-chain 2359 chr7 158821424 + 101974113 101974139 chr7 159138663 + 102286210 102286236 158723
-26
-
-chain 1502 chr7 158821424 + 141709533 141709580 chr7 159138663 + 142013474 142013521 12917072
-47
-
-chain 721 chr7 158821424 + 141963699 141963726 chr17 81195210 + 19853796 19853823 7983736
-27
-
-chain 615 chr7 158821424 + 141964154 141964190 chr19 59128983 - 28688778 28688814 21921932
-36
-
-chain 362 chr7 158821424 + 101987601 101987634 chr7 159138663 - 57149003 57149036 1101
-33
-
-chain 17312866 chr7_random 549659 + 162804 345700 chr7_gl000195_random 182896 + 0 182896 164
-182896
-
-chain 10142542 chr7_random 549659 + 0 112804 chr7 159138663 + 158928464 159038297 315
-4073	0	1
-5056	1	0
-1766	1	1
-63	5	5
-2422	1	0
-1297	1	0
-1967	196	0
-230	28	0
-2331	5	0
-47	1	1
-345	1	0
-41	1	1
-807	1	1
-31	1	1
-238	3	0
-100	1	0
-281	1	1
-43	1	1
-359	27	26
-59	1	1
-43	1	1
-1385	1	0
-161	1	0
-45	1	1
-1693	1	0
-93	1	0
-5	1	0
-805	0	3
-649	0	49
-1400	1	1
-4	1	0
-28	0	1
-7	0	1
-157	1	1
-117	0	31
-166	13	12
-138	1	0
-556	1	1
-46	1	1
-204	1	1
-21	1	1
-511	2	0
-390	1	1
-29	1	1
-60	1	1
-68	0	3
-27	1	1
-71	0	1
-37	5	0
-18	0	6
-56	3	3
-89	2	0
-103	6	15
-43	5	0
-7	0	11
-55	0	4
-456	46	45
-1286	1	1
-46	1	0
-36	2	0
-57	1	0
-396	1	1
-38	1	1
-298	1	1
-16	1	1
-602	224	0
-82	1	56
-1115	1	74
-17	3	3
-88	1	74
-98	158	12
-90	3	3
-70	3	3
-117	1	1
-43	1	1
-53	1	1
-21	1	1
-53	229	10
-120	81	8
-59	8	10
-411	1	0
-47	1	1
-723	0	9
-8142	6	6
-1297	1	1
-22	0	1
-7799	12	11
-1878	1	0
-70	5	5
-592	1	1
-28	1	1
-2251	1	0
-1474	1	0
-1975	0	1
-2577	0	1
-612	15	15
-93	1	0
-3	1	0
-149	1	0
-61	3	3
-34	1	0
-11	2101	0
-63	73	3
-67	106	1
-57	83	13
-60	70	0
-79	561	1
-321	70	0
-262	0	35
-83	183	8
-2406	0	549
-85	32	0
-27	0	26
-72	0	35
-22	3	0
-24	0	93
-74	2	0
-17	28	0
-63	1	0
-6	1	0
-1451	44	4
-23	1	1
-38	0	40
-80	1	121
-34	1	1
-58	0	82
-839	1	0
-31	1	1
-2861	0	4
-1376	1	1
-20	0	1
-78	2	0
-24	2	2
-2760	3	1
-585	8	0
-761	1	0
-6449	4	1
-259	1	1
-22	1	1
-717	0	1
-887	7	8
-2174	3	0
-970	1	0
-1768	12	0
-4378	0	1
-5	0	1
-13	1	0
-1637	5	10
-312	0	1
-2167	11	0
-164	10	10
-1517	1	1
-42	0	3
-698	0	4
-90	1	1
-20	1	1
-167	1	1
-16	1	1
-860	0	1
-1719
-
-chain 9633059 chr7_random 549659 + 402818 549659 chr7 159138663 + 514489 666751 345
-3766	22099	5004
-26	4	4
-11014	7	5
-17	1	0
-8	21	0
-3389	1	1
-54	1	1
-55	1	1
-66	1	1
-165	1	1
-38	1	1
-52	22350	21842
-816	4	4
-10432	15	15
-20532	1	1
-29	9	9
-13871	157	23205
-37837
-
-chain 2073422 chr7_random 549659 + 444161 465736 chr7 159138663 - 158510053 158531628 1246
-21575
-
-chain 1225579 chr7_random 549659 + 415456 428202 chr7 159138663 + 537499 550245 1943
-12746
-
-chain 745495 chr7_random 549659 + 406711 414469 chr7 159138663 - 158580384 158588142 6708
-215	11	11
-2423	4	4
-5105
-
-chain 224185 chr7_random 549659 + 399770 402202 chr7 159138663 + 518876 521308 490490
-367	50	50
-1609	1	1
-53	3	3
-304	1	1
-44
-
-chain 25943 chr7_random 549659 + 67571 70764 chr7 159138663 + 158995434 158996421 1881723
-67	73	3
-55	13	153
-17	71	0
-159	183	8
-119	21	21
-154	1960	0
-64	35	0
-105	35	0
-62
-
-chain 21070 chr7_random 549659 + 68795 70055 chr7 159138663 + 158995572 158996097 2684005
-86	98	63
-43	35	0
-76	455	0
-18	248	38
-61	57	57
-83
-
-chain 19298 chr7_random 549659 + 67796 68209 chr7 159138663 + 158995799 158996246 2040899
-35	195	229
-183
-
-chain 8295 chr7_random 549659 + 70341 70449 chr7 159138663 + 158996348 158996421 13908836
-11	35	0
-62
-
-chain 8007 chr7_random 549659 + 70264 70825 chr7 159138663 + 158995746 158996237 2373081
-77	186	46
-35	218	288
-45
-
-chain 7010 chr7_random 549659 + 69669 69742 chr7 159138663 + 158996026 158996099 13809421
-73
-
-chain 6757 chr7_random 549659 + 71674 71744 chr7 159138663 + 158996246 158996316 26425870
-70
-
-chain 6582 chr7_random 549659 + 16740 16849 chr7 159138663 + 158945342 158945395 9902405
-48	56	0
-5
-
-chain 5793 chr7_random 549659 + 36845 36905 chr7 159138663 + 158964922 158964982 31172491
-60
-
-chain 5504 chr7_random 549659 + 68645 69446 chr7 159138663 + 158995947 158996153 2767372
-68	176	1
-63	420	0
-74
-
-chain 5075 chr7_random 549659 + 34499 34552 chr7 159138663 + 158962931 158962984 33354772
-53
-
-chain 4386 chr7_random 549659 + 36139 36193 chr7 159138663 + 158964435 158964489 9901820
-54
-
-chain 4359 chr7_random 549659 + 69809 69854 chr7 159138663 + 158996061 158996106 24027999
-45
-
-chain 3345 chr7_random 549659 + 71561 71653 chr7 159138663 + 158995923 158996015 5823696
-92
-
-chain 3242 chr7_random 549659 + 36212 36249 chr7 159138663 + 158964435 158964472 7647561
-37
-
-chain 3169 chr7_random 549659 + 68713 69336 chr7 159138663 + 158995385 158995658 13517397
-46	500	150
-77
-
-chain 2856 chr7_random 549659 + 36091 36138 chr7 159138663 + 158964168 158964215 3415068
-47
-
-chain 2508 chr7_random 549659 + 74235 74267 chr7 159138663 + 158999705 158999737 11181217
-32
-
-chain 2422 chr7_random 549659 + 16701 16740 chr7 159138663 + 158944995 158945034 20425801
-39
-
-chain 2296 chr7_random 549659 + 76078 76102 chr7 159138663 + 159001472 159001496 26237556
-24
-
-chain 1888 chr7_random 549659 + 68772 68795 chr7 159138663 + 158995829 158995852 23967691
-23
-
-chain 1646 chr7_random 549659 + 16653 16684 chr7 159138663 + 158945171 158945202 6593972
-31
-
-chain 1510 chr7_random 549659 + 34573 34664 chr7 159138663 + 158962893 158962984 9181320
-91
-
-chain 1319 chr7_random 549659 + 70142 70185 chr7 159138663 + 158996289 158996332 23051286
-43
-
-chain 1065 chr7_random 549659 + 69520 69582 chr7 159138663 + 158996297 158996359 18766264
-62
-
-chain 13483752813 chr8 146274826 + 0 146274826 chr8 146364022 + 10000 146304022 9
-930417	1	1243
-52	10	10
-44	0	972
-100	0	54
-162	0	324
-409	0	1
-2323216	1	0
-3352649	2	0
-854996	100000	50000
-3399023	1	1
-46	1	1
-13965	1	1
-30	1	1
-121189	1	1
-35	1	1
-283700	0	1
-719291	100016	93054
-1155	0	2
-755	26	26
-980	21	21
-1479	54	54
-3597	1	0
-1937	19	19
-322	1	0
-1758	2	0
-1141	0	1
-956	48	48
-739	21	21
-1005	0	1
-543	1734	1734
-5338	15	15
-1029	1	1
-28	1	1
-305	57	57
-164	27	27
-5130707	0	1
-1288	0	1
-446	1	1
-80	1	1
-2123	4	4
-2514	3	0
-545	9	0
-527	1	1
-18	1	1
-256	9	9
-79	1	1
-40	1	1
-148	0	2
-2231	0	27
-958	1	1
-20	1	1
-2487	1	1
-113	1	1
-73	13	13
-365	10	10
-151	1	1
-32	3	0
-26	1	1
-1480	1	1
-29	1	1
-621	1	1
-28	1	1
-701	9	9
-362	1	1
-19	1	1
-691	1	1
-44	6	0
-47	1	1
-513	12	11
-382	1	1
-22	1	1
-111	1	1
-36	1	1
-337	1	1
-42	1	1
-602	2	0
-36	1	1
-475	1	1
-23	0	1
-32	4	3
-65	1	1
-59	1	1
-688	1	1
-22	1	1
-1473	1	1
-36	1	1
-372	1	1
-16	6	6
-1605	1	1
-38	1	1
-816	1	1
-17	1	0
-374	1	1
-17	1	1
-48	1	0
-82	1	1
-45	1	1
-263	1	1
-23	1	1
-204	1	1
-39	1	1
-2341	0	1
-2989	9	11
-811	8	8
-741	0	2
-337	1	1
-25	4	4
-763	1	1
-19	1	1
-343	1	1
-31	1	1
-1953	1	1
-74	1	1
-67	1	1
-18	4	4
-73	1	1
-31	1	1
-114	11	1
-87	1	1
-65	1	1
-125	9	9
-378	49	48
-90	1	1
-99	1	0
-173	13	7
-696	0	1
-6184	13	13
-830	13	13
-128	1	1
-37	1	1
-136	1	0
-66	5	6
-870	1	0
-4877	0	1
-585	3	7
-1728	1	0
-33	1	1
-465	1	1
-68	1	1
-581	6	0
-2088	1	0
-304	0	1
-2674	1	1
-28	1	0
-54	8	8
-846	0	1
-1409	16	16
-559	0	1
-407	0	5
-11	5	1
-29	1	1
-4051	1	1
-10	0	1
-43	1	1
-385	1	1
-35	1	1
-101	11	11
-602	1	0
-491	14	16
-1366	19	19
-321	1	1
-49	1	1
-546	1	1
-25	1	1
-2568	1	1
-51	4	0
-119	1	1
-39	0	1
-1040	0	1
-1682	0	4
-39	8	0
-862	1	1
-17	1	1
-587	1	1
-21	1	1
-904	0	1
-261	0	1
-1151	0	2
-2325	5	5
-5415	0	3
-1545	1	0
-428	4	4
-1950	2	0
-1073	0	1
-3653	0	86
-1283	1	1
-79	1	1
-6656	12	12
-1550	0	18
-5832	1	0
-4835	10	10
-1719	1	1
-84	1	1
-848	0	2
-236	1	1
-42	1	1
-1272	12	0
-49	1	1
-820	1	1
-22	1	0
-58	0	22
-510	8	8
-983	6	0
-539	14	14
-863	0	2
-27	1	1
-204	14	14
-163	4	4
-290	1	1
-59	1	1
-842	0	2
-2044	1	1
-90	0	1
-3434	0	3
-356	0	1
-873	0	1
-864	25	1
-630	12	7
-62	10	10
-156	11	11
-1364	19	19
-156	4	4
-244	4	18
-505	1	0
-109	1	1
-230	1	1
-107	4	3
-150	1	1
-83	5	5
-70	1	1
-33	1	0
-142	1	1
-626	5	6
-274	10	10
-128	1	1
-35	1	1
-216	1	1
-44	1	1
-312	1	1
-16	1	1
-1496	8	7
-451	0	1
-855	1	1
-20	1	1
-350	1	1
-62	1	1
-617	10	10
-845	1	1
-58	1	1
-2189	1	1
-147	1	1
-475	1	1
-27	1	1
-278	1	1
-17	1	1
-994	1	1
-40	1	1
-219	5	5
-26	1	1
-900	1	1
-29	1	0
-26	1	1
-484	15	16
-61	9	9
-114	21	26
-801	1	1
-33	1	1
-560	1	1
-37	1	1
-80	14	14
-211	1	1
-43	1	1
-156	1	1
-20	1	1
-685	1	1
-18	1	1
-48	4	0
-711	1	1
-38	1	1
-402	7	7
-1045	1	1
-37	1	1
-4035	9	9
-247	4	0
-4146274	17400	5734
-330366	0	1
-2346742	0	55
-413177	3	0
-450	1	0
-9436	3	1
-7044	4	0
-2886	1	0
-635	1	0
-16567	1	0
-6926	29	28
-9249	1	0
-14916	8	0
-12872	2	0
-3330	2	0
-2673376	2	0
-2603	1	1
-78	1	1
-2170491	7	7
-29817	66108	2485
-6473782	5	5
-39	1	1
-9574	0	2
-5879	1	1
-29	1	1
-6139	1	0
-2354	1	1
-28	1	1
-91	88	87
-142	16	15
-54	1	1
-22	3	3
-1479	4	4
-221	4	4
-132	1	0
-574	11	11
-23	1	0
-604	1	1
-44	1	1
-899	1	0
-70	1	0
-10	1	0
-13561	1	1
-44	1	1
-4476	4	4
-799	26	25
-1466	18	18
-17897	4	0
-1667	1	0
-4250	1	1
-44	1	3
-14	1	1
-4956	1	1
-18	1	0
-39	3	2
-4990	1	1
-47	13	13
-69	4	0
-9729	1	0
-355	0	1
-2186	1	1
-37	1	1
-6111	3	3
-100	4	4
-68	1	1
-43	1	1
-1126	5	7
-5520	8	8
-2316	1	1
-181	6	6
-50	1	1
-29	1	0
-83	1	1
-1073	245	639
-150	1	1
-25272	0	1
-2132	0	4
-2522	1	1
-48	1	1
-1498528	0	1
-6044582	3000008	3000000
-1291113	60074	16691
-3837	3	0
-811	1	0
-2567	1	0
-7375465	11	11
-42062	1	0
-19604621	1	0
-10692667	1	0
-110	0	1
-3577	0	3
-907	1	1
-18	1	1
-897	1	1
-64	535	251
-21	0	1
-140	0	1
-70	1	0
-77	9	10
-149	4	0
-5	1	5
-68	1	0
-142	5	5
-57	14	14
-43	1	1
-31034	124100	99683
-2301	0	2
-44	2	0
-568015	87325	183549
-330	5	5
-114	0	3088
-1776	0	3085
-949	0	4
-514	37	37
-963	15	14
-1351	71	71
-56	15	15
-405	713	713
-651	1	1
-41	1	1
-837	1	0
-658	0	1
-794	0	1
-73	1	1
-30	1	1
-817	51	51
-566	72	72
-195	0	12193
-1599	0	3085
-217	43	43
-247	29	29
-4148	1	0
-158	266	266
-696	20	20
-58	69	69
-100	13	13
-326	137	137
-151	35	35
-1804	151	151
-1341	289	289
-154	23	23
-1932	17	17
-111	47	47
-128	16	16
-78	30	30
-1022	6	10
-78	1	0
-342	31	31
-86	23	23
-1601	41	41
-144	49	49
-170	10	10
-398	23	23
-419	20	20
-955	55	55
-1139	11	11
-1925	0	276
-223	58	58
-702	25	25
-1030	23	23
-363	164	164
-653	16	16
-78	13	13
-1035	0	4
-514	37	37
-1069	10	10
-321	15	15
-603	68	68
-789	20	20
-56	25	25
-1007	5	5
-1198	24	24
-689	3	0
-743	32	32
-817	43	43
-574	11	11
-123	19	19
-618	28	28
-1270	15	15
-289	29	29
-106	11	11
-1395	46	46
-850	4	4
-777	62	62
-86	36	36
-374	97	97
-2072	31	31
-195	56	56
-379	80	80
-64	11	11
-191	18	18
-1051	13	13
-52	163	169
-1297	1	1
-25	1	1
-3451	0	188
-3097	0	9
-2715	1	0
-11829	0	3
-6001	28	0
-10728	0	1
-3770769	1	0
-62	1	0
-22	1	0
-827	1	0
-1485	1	0
-242	0	1
-7142	1	0
-4029	3	3
-69	1	1
-15865	1	0
-83463	4	0
-5976	9	0
-2661	1	0
-1483	1	0
-15868	4	0
-17798	1	0
-2649	1	0
-3627	1	0
-4789	1	0
-9541	1	0
-6844	1	0
-3187	2	0
-411	14	0
-3056	4	0
-19776	3	0
-29085	0	1
-745	2	0
-11453	2	0
-16739	1	0
-14697	1	0
-8539	1	0
-25514443	1	0
-17680	0	1
-55359	0	1
-58	57	59
-1515	1	0
-1111	1	0
-5736	6	6
-66213	1	0
-68	1	1
-24	6	7
-43	1	1
-33414	7	7
-22	1	1
-19312	0	1
-8588	1	1
-31	1	1
-15969	1	1
-32	1	1
-27034	1	1
-42	1	1
-3352	0	1
-15009	1	0
-20433	18	18
-32141	9	8
-116	41	41
-4920	1	0
-33364	1	0
-11160	15	17
-28423	1	0
-43835	1	1
-24	4	2
-269244	4	4
-37	1	1
-17193	4	3
-53	12	11
-23	2	1
-7	1	1
-37978	9	9
-37743	1	1
-35	3	3
-26636	1	1
-17	1	1
-8728292	1	0
-16734742	0	71275
-27	1	1
-657033	0	2
-2911	0	2
-1941	1	1
-35	1	1
-835	1	1
-116	1	1
-399	1	1
-101	1	0
-194	1	2
-450	1	0
-825	1	1
-73	1	1
-156	1	1
-58	1	1
-50	5	5
-153	11	11
-189	5	5
-233	1	1
-83	1	1
-642	0	1
-1380	1	1
-17	1	1
-315	1	1
-26	1	1
-786	0	901
-76	1	1
-45	1	1
-535	1	1
-34	1	1
-2007	7	7
-159	1	1
-26	1	1
-6362	13	13
-504325	100008	25635
-420771	0	232
-287680	0	104
-73	0	364
-181	0	55
-95	1	1
-46	1	1
-4002	1	1
-24	1	1
-183	49	0
-72	1	2
-8	1	0
-39	688	1
-306	0	50
-1939	0	1
-615	684	0
-254	0	1
-572035	7362	108542
-480202	1	0
-11866	6	6
-26917	0	1
-6097	15	15
-3074	0	1
-12292	0	1
-2209	0	1
-7358	0	1
-321393
-
-chain 161719 chr8 146274826 + 12213564 12217654 chr8 146364022 + 11922619 11926713 3890
-48	2333	2337
-1544	26	26
-139
-
-chain 94297 chr8 146274826 + 86864948 86909782 chr8 146364022 + 86767902 86816113 712
-43	4583	4586
-51	23	23
-69	22	22
-81	3466	3466
-114	1460	1461
-170	2237	2237
-47	3442	3445
-24	161	161
-49	1995	1995
-32	5554	5830
-116	4	4
-12	2309	5394
-37	2018	2018
-68	865	865
-25	3669	3669
-32	817	817
-42	1346	1346
-28	1574	1574
-29	1512	1515
-46	1652	1652
-41	2665	2665
-30	2224	2230
-50
-
-chain 49697 chr8 146274826 + 86036864 86037399 chr8 146364022 + 85964814 85965349 932809
-535
-
-chain 26725 chr8 146274826 + 86857851 86907733 chr8 146364022 + 86754632 86786590 1026
-491	49362	31438
-29
-
-chain 24621 chr8 146274826 + 145396034 145396288 chr8 146364022 + 145493131 145493385 2960834
-254
-
-chain 18039 chr8 146274826 + 144819613 144819801 chr8 146364022 + 144748845 144749033 12082915
-188
-
-chain 14890 chr8 146274826 + 86857082 86862299 chr8 146364022 - 59611598 59616815 1124
-71	476	476
-222	4397	4397
-51
-
-chain 13243 chr8 146274826 + 144819801 144819938 chr8 146364022 + 144748593 144748730 12136518
-137
-
-chain 9530 chr8 146274826 + 144823061 144823289 chr8 146364022 + 144751680 144751756 18947814
-3	152	0
-73
-
-chain 9463 chr8 146274826 + 144819938 144820036 chr8 146364022 + 144748632 144748730 13619337
-98
-
-chain 8087 chr8 146274826 + 86874741 86874834 chr8 146364022 + 86817360 86817453 1088
-93
-
-chain 7965 chr8 146274826 + 86865238 86879045 chr8 146364022 + 86780387 86797281 766
-29	7982	7984
-37	5729	8814
-30
-
-chain 7439 chr8 146274826 + 12201270 12203830 chr8 146364022 + 11910337 11912897 3584
-26	2480	2480
-54
-
-chain 6315 chr8 146274826 + 86909619 86909690 chr8 146364022 + 86556151 86556222 765064
-71
-
-chain 6303 chr8 146274826 + 144823559 144823625 chr8 146364022 + 144751722 144751788 29838951
-66
-
-chain 5756 chr8 146274826 + 86854716 86862896 chr8 146364022 + 86782059 86817706 1940
-37	8112	35579
-31
-
-chain 5521 chr8 146274826 + 144823643 144823701 chr8 146364022 + 144751730 144751788 31959915
-58
-
-chain 5339 chr8 146274826 + 144823077 144823133 chr8 146364022 + 144751620 144751676 32492605
-56
-
-chain 4702 chr8 146274826 + 144819343 144819392 chr8 146364022 + 144748967 144749016 12082914
-49
-
-chain 4684 chr8 146274826 + 144823154 144823323 chr8 146364022 + 144751621 144751752 19314390
-33	102	64
-34
-
-chain 4385 chr8 146274826 + 144820066 144820134 chr8 146364022 + 144748613 144748681 20813384
-68
-
-chain 3959 chr8 146274826 + 144820160 144820201 chr8 146364022 + 144748560 144748601 13619336
-41
-
-chain 3959 chr8 146274826 + 144819572 144819613 chr8 146364022 + 144748560 144748601 13619338
-41
-
-chain 3270 chr8 146274826 + 86905368 86905406 chr8 146364022 - 59611399 59611437 120315
-38
-
-chain 3190 chr8 146274826 + 144819513 144819546 chr8 146364022 + 144748697 144748730 12136519
-33
-
-chain 2525 chr8 146274826 + 144823339 144823377 chr8 146364022 + 144751692 144751730 23202086
-38
-
-chain 2511 chr8 146274826 + 144819546 144819572 chr8 146364022 + 144748632 144748658 13619339
-26
-
-chain 2509 chr8 146274826 + 144820134 144820160 chr8 146364022 + 144748632 144748658 22535050
-26
-
-chain 2395 chr8 146274826 + 144820036 144820061 chr8 146364022 + 144748974 144748999 15328526
-25
-
-chain 2146 chr8 146274826 + 86862896 86862937 chr8 146364022 - 59626667 59626708 2042
-38	1	1
-2
-
-chain 2013 chr8 146274826 + 12224371 12224395 chr8 146364022 + 11933433 11933457 5802
-24
-
-chain 928 chr8 146274826 + 86871422 86871445 chr8 146364022 + 86566156 86566179 4371
-23
-
-chain 19961283 chr8_random 943810 + 732172 943810 chr5 180915260 + 69954173 70165811 138
-211638
-
-chain 4772201 chr8_random 943810 + 62854 113804 chr8 146364022 + 16274686 16325603 650
-4146	9	9
-1642	5	9
-541	4	0
-1197	1	1
-27	1	1
-2498	0	1
-20171	4	0
-2761	3	0
-1978	0	1
-628	10	0
-5533	3	0
-2428	24	0
-47	5	9
-197	11	11
-687	0	2
-642	1	1
-17	1	1
-2228	0	4
-1978	1	0
-1521
-
-chain 4401722 chr8_random 943810 + 396973 443039 chr8 146364022 - 801667 847519 685
-2079	1	0
-22818	62	9
-50	57	0
-25	0	8
-40	91	0
-5953	32	0
-1937	0	2
-803	13	14
-786	0	5
-3908	2	0
-783	0	1
-854	1	0
-142	1	0
-1521	1	0
-114	0	1
-498	4	4
-591	2	0
-2750	0	9
-147
-
-chain 3680035 chr8_random 943810 + 643258 682172 chr8_gl000196_random 38914 + 0 38914 797
-38914
-
-chain 3554032 chr8_random 943810 + 493047 530222 chr8_gl000197_random 37175 + 0 37175 825
-37175
-
-chain 1222443 chr8_random 943810 + 0 12854 chr8 146364022 - 108556772 108569616 1946
-5765	0	1
-2843	2	0
-279	0	1
-299	1	0
-1113	9	0
-2543
-
-chain 995258 chr8_random 943810 + 250482 297042 chr8 146364022 + 46838897 46856230 2491
-52	5	5
-72	1882	0
-246	1888	0
-158	79	78
-59	82	81
-53	46	46
-76	18	18
-100	1942	59
-231	1	0
-84	1	0
-49	23	22
-65	25	25
-312	49	47
-118	1	0
-169	645	640
-71	18	18
-202	15	15
-74	114	112
-65	1444	30
-86	2249	34
-216	9	8
-173	33	30
-63	81	79
-265	87	84
-103	11	10
-122	1	1
-47	1	1
-165	858	0
-14	1027	0
-88	1879	0
-148	7	6
-166	1	0
-288	1888	1
-62	1	1
-90	1	0
-35	1890	1
-280	3	3
-23	1	0
-109	1	1
-283	4	4
-88	1	1
-67	1	1
-23	1	1
-109	680	0
-89	1876	0
-41	1	0
-45	1898	0
-107	18	18
-18	1	0
-28	1	1
-50	1	0
-35	1	1
-50	7	4
-54	1	0
-37	1	1
-298	11	10
-94	1	0
-17	1	0
-36	1	0
-55	1	0
-12	1	1
-148	1	1
-79	11	9
-78	1	1
-140	5	4
-54	3	0
-97	1	0
-138	6	4
-73	1	0
-59	19	19
-207	1	1
-45	1	1
-76	1	0
-8	3	1
-60	2	2
-56	1	1
-70	1	0
-45	1	1
-136	131	128
-86	17	16
-75	7	7
-53	483	144
-75	26	26
-230	135	132
-110	15	15
-61	25	23
-76	43	42
-120	1	0
-78	1735	1728
-192	42	41
-61	82	82
-190	37	37
-90	1911	30
-168	56	56
-56	10	10
-83	26	26
-230	1927	49
-224	1937	52
-244	41	41
-125	36	36
-96	26	26
-83	81	78
-272	2019	139
-59	236	231
-103	71	70
-183	31	31
-58	119	117
-131	1	0
-167	25	25
-72	97	96
-91	6	6
-75	10	9
-219
-
-chain 895028 chr8_random 943810 + 298039 346176 chr8 146364022 - 99507152 99525054 4376
-63	126	463
-229	1883	1
-104	25	25
-58	6	6
-155	36	35
-84	10	10
-88	23	23
-53	1	0
-164	5	5
-68	56	55
-231	24	24
-149	409	408
-53	1	0
-69	1	0
-134	6	6
-201	318	315
-27	1885	0
-105	1	0
-82	82	82
-144	27	27
-56	238	235
-130	24	23
-109	1	0
-77	2	1
-100	31	30
-102	14	14
-63	11	10
-108	91	91
-72	94	93
-169	149	148
-198	238	234
-86	2	0
-169	3	1
-72	11	11
-66	1	0
-247	18	17
-392	540	533
-186	7	7
-121	1	0
-254	1977	89
-53	7	7
-193	483	475
-93	50	47
-198	28	28
-76	1883	8
-61	130	129
-123	29	29
-112	201	199
-138	12	11
-21	1873	0
-107	33	33
-53	1880	1
-118	40	38
-141	1943	53
-168	137	134
-81	16	16
-115	2216	0
-103	32	29
-71	128	127
-104	54	53
-121	128	127
-66	99	96
-80	75	74
-128	1924	40
-53	2	1
-288	1910	24
-53	1907	23
-56	40	40
-72	111	111
-62	127	127
-122	65	65
-80	210	206
-115	0	1
-146	5663	0
-183	40	40
-53	34	33
-229	28	28
-92	83	83
-234	1983	101
-57	1885	0
-44	11	11
-62	1	0
-69	28	28
-126	1	0
-148	147	144
-58	14	12
-53	1	0
-66	1	0
-105	34	33
-71	39	38
-69	17	17
-56	6	5
-79	48	46
-53	6	6
-57	38	35
-77	78	75
-111	649	644
-110	45	43
-235
-
-chain 604051 chr8_random 943810 + 178170 281976 chr8 146364022 + 46838954 46856867 5476
-212	1875	0
-272	566	562
-114	1	0
-143	1	0
-55	74	74
-65	25	25
-63	62	62
-61	31	31
-102	23	23
-215	1	0
-63	67	68
-68	373	34
-158	64	63
-53	46	46
-105	67	67
-55	2294	38
-202	15	15
-63	51	51
-246	23	23
-71	1	0
-271	103	102
-427	6	5
-51	25	22
-54	1878	0
-36	10	10
-122	26	26
-134	1886	0
-121	93	92
-51	1	2
-246	54742	0
-134	1884	0
-129	33	31
-147	39	38
-116	65	61
-66	43	41
-62	1982	95
-213	196	193
-339	260	254
-187	89	88
-10	2292	403
-57	5123	1343
-293	24	22
-61	1	0
-73	7	7
-53	1877	144
-91	4270	499
-59	2463	581
-37	339	671
-59	342	0
-110	266	261
-150	6	6
-92	244	241
-51	62	62
-51	3119	1229
-91	761	80
-60	48	47
-137	1876	0
-136	12	10
-131	12	11
-290	1	0
-45	4005	2083
-59	88	424
-59
-
-chain 496223 chr8_random 943810 + 580222 593236 chr8 146364022 - 59615387 59795086 34662
-2144	4634	17818
-237	1	1
-31	1	1
-194	35	40
-1575	162	153603
-534	0	55
-995	64	64
-1343	58	58
-112	1	1
-38	1	1
-70	1	1
-41	1	1
-81	1	1
-34	1	1
-624
-
-chain 279595 chr8_random 943810 + 199376 329223 chr8 146364022 - 99506514 99525054 6095
-67	50	47
-55	631	967
-63	1082	0
-177	61	58
-147	6	6
-143	1	0
-42	1882	0
-74	31	30
-83	23	23
-13	1879	0
-204	5	5
-58	69	69
-227	1933	51
-152	123	122
-83	1	0
-118	72	72
-159	17	17
-119	34	34
-230	36	36
-134	1929	32
-189	3017	0
-24	83	83
-121	1	0
-49	5680	1
-325	136	129
-277	30	30
-335	1436	53
-51	63	62
-99	867	859
-154	860	855
-269	32	31
-112	1	0
-50	1877	0
-99	58	58
-108	1	0
-96	2221	0
-37	1546	0
-136	2648	89
-52	7	8
-278	1	0
-202	139	136
-145	65	63
-51	44	42
-62	143	139
-61	156	155
-243	214	215
-20	1872	0
-194	74	75
-337	25	25
-145	15	15
-71	65	65
-84	1878	0
-60	1	0
-244	227	225
-226	53	53
-62	42	41
-66	63	61
-120	35	34
-64	56110	1
-98	41	40
-53	2795	914
-65	10	10
-57	8290	755
-67	63	61
-66	17	16
-53	1	0
-58	36	36
-92	3924	162
-40	61	61
-58	4119	368
-133	2082	185
-58	42	42
-167	2235	21
-50	4401	627
-71	40	39
-147	360	353
-60	174	173
-446
-
-chain 208078 chr8_random 943810 + 170910 242131 chr8 146364022 - 99506628 99524507 6380
-55	632	967
-69	73	73
-115	28	28
-146	4836	20
-75	1	0
-54	58	58
-87	10	10
-294	22105	209
-184	59	59
-53	209	208
-64	1388	305
-56	340	338
-60	50	50
-134	32	32
-108	2	0
-106	83	82
-108	1884	0
-62	68	68
-216	1	0
-55	20	20
-107	3862	104
-61	311	311
-29	2182	2154
-53	1	0
-93	1388	251
-108	3	2
-129	159	158
-109	1	0
-31	114	113
-51	60	60
-78	14	14
-99	14	13
-152	64	62
-60	13	12
-120	98	98
-138	115	114
-56	6	4
-26	438	436
-213	183	182
-53	1	0
-81	2318	428
-71	25	25
-145	15	15
-71	65	65
-109	1956	43
-69	112	108
-33	397	392
-58	1466	80
-62	46	46
-401	64	64
-45	51	51
-56	1	0
-6	99	99
-54	146	144
-187	67	67
-166	52	49
-51	9	8
-63	11	10
-61	186	186
-68	38	38
-168	105	102
-125	3	2
-113	17	17
-186	2	0
-3	6394	747
-113	762	83
-102	4015	254
-238	102	101
-91	6	6
-85	1999	129
-12	9	9
-44	2322	442
-90	319	318
-42
-
-chain 110041 chr8_random 943810 + 584910 586860 chr8 146364022 - 59525621 59532924 58275
-151	1	1
-64	1	1
-158	1	1
-137	0	5353
-14	3	3
-73	8	8
-52	11	11
-57	9	9
-54	15	15
-289	15	15
-837
-
-chain 81230 chr8_random 943810 + 228410 243660 chr8 146364022 - 99515272 99524158 121868
-53	818	813
-113	55	55
-76	1036	1025
-78	1	0
-115	1280	591
-98	36	34
-79	25	25
-73	189	188
-120	2622	738
-79	145	145
-8	21	19
-36	157	155
-27	18	14
-98	82	81
-130	280	280
-78	83	83
-21	20	20
-27	51	51
-134	238	238
-10	39	39
-53	216	215
-252	5175	1418
-73	6	6
-146	231	228
-111	1	0
-201	35	35
-101
-
-chain 78595 chr8_random 943810 + 271315 287023 chr8 146364022 + 46844767 46855610 13381
-177	7	6
-61	49	46
-54	86	84
-62	24	23
-151	92	91
-73	109	107
-108	1	0
-51	8	6
-97	2409	1723
-29	1995	118
-92	64	63
-24	701	695
-42	7	7
-53	90	89
-54	403	392
-25	6360	4099
-70	192	192
-26	77	76
-63	336	336
-129	125	126
-143	878	869
-27	23	23
-61
-
-chain 70241 chr8_random 943810 + 583972 584708 chr8 146364022 - 2327498 2328234 1800744
-736
-
-chain 67060 chr8_random 943810 + 583131 583834 chr8 146364022 + 144032710 144033413 1885205
-703
-
-chain 60161 chr8_random 943810 + 163863 193392 chr8 146364022 + 46840361 46854926 51951
-69	30	30
-79	155	153
-22	224	224
-36	635	633
-54	78	77
-53	1660	61
-55	408	405
-36	32	32
-40	163	161
-29	96	89
-5	85	85
-4	108	106
-193	10362	0
-211	23	23
-164	214	212
-108	41	40
-217	35	35
-85	25	25
-266	2366	490
-48	600	260
-32	3507	4987
-74	590	587
-105	2319	2307
-66	2880	990
-102	1	0
-89	507	168
-143
-
-chain 59106 chr8_random 943810 + 169718 174718 chr8 146364022 - 99507650 99524666 884317
-69	73	73
-53	107	105
-145	323	5927
-57	45	43
-58	51	49
-65	130	129
-16	74	74
-175	49	49
-53	423	422
-53	2360	8782
-34	55	55
-95	1	0
-28	1	0
-2	113	113
-292
-
-chain 53138 chr8_random 943810 + 171392 346403 chr8 146364022 - 102525263 102570806 8603
-57	57	57
-79	626	627
-64	1139	91
-72	32	32
-61	1	0
-192	55	53
-253	233	231
-113	1894	10
-151	18218	118
-161	39	39
-89	168	167
-68	174	168
-68	7236	473
-76	2229	347
-40	124	120
-50	21	21
-55	1906	29
-98	2	0
-51	3928	158
-113	3230	214
-58	5760	82
-62	113	112
-39	7442	4152
-122	13	12
-149	90	90
-56	48	47
-71	400	397
-133	1910	21
-97	23	23
-92	2561	0
-54	15	13
-67	70	69
-90	95	94
-59	72	72
-139	45	45
-101	71659	2394
-62	72	72
-84	1	0
-9	2000	117
-95	39	39
-65	70	68
-87	2031	150
-103	1949	61
-106	17	17
-136	75	74
-53	5662	38
-58	1936	41
-42	168	168
-108	95	95
-66	243	241
-50	5018	908
-53	4282	513
-74	1906	30
-83	2078	26035
-107	1947	59
-57	500	483
-160	1936	53
-185	1897	12
-119	3972	202
-29	14	14
-79	61	61
-44
-
-chain 52733 chr8_random 943810 + 164218 295513 chr8 146364022 + 43821028 43838759 7574
-63	20	20
-141	36	36
-153	32	31
-103	40	40
-53	86	85
-99	1658	59
-83	265	263
-110	21	21
-51	29	27
-160	108	108
-51	1	0
-49	1	0
-61	130	123
-85	12281	44
-69	272	272
-118	62	62
-75	7995	1645
-102	45	45
-59	32	32
-14	328	328
-126	2372	483
-86	58668	153
-40	4323	551
-31	1938	56
-58	2392	511
-58	234	222
-51	1403	0
-51	91	91
-50	218	218
-83	67	66
-75	77	77
-110	391	53
-2	2678	792
-147	104	101
-59	1917	33
-92	1958	75
-54	5899	1442
-11	105	104
-132	1	0
-50	2212	332
-66	5506	1369
-60	189	189
-173	223	221
-222	1874	0
-87	23	23
-54	108	108
-109	29	28
-94	64	63
-70	91	86
-97	164	161
-112	123	123
-78	1942	66
-145	118	118
-69	1917	31
-51	10	10
-113	235	231
-193	327	327
-41	392	391
-51	363	361
-123	1977	94
-57
-
-chain 48120 chr8_random 943810 + 172087 205615 chr8 146364022 - 99508140 99525054 275640
-50	1136	89
-81	56	55
-4	1876	5603
-199	577	570
-71	144	141
-39	17920	1690
-56	276	276
-117	289	289
-64	172	170
-10	18	18
-76	284	279
-308	237	229
-64	1904	0
-33	2094	204
-40	43	43
-63	3	2
-59	12	12
-306	15	15
-33	1146	61
-49	757	4487
-37	62	62
-83	46	46
-112	178	174
-95	1	0
-29	1956	73
-248
-
-chain 37837 chr8_random 943810 + 253130 272078 chr8 146364022 + 46839659 46847391 87472
-42	44	44
-61	2771	880
-109	37	36
-171	1	0
-120	209	204
-98	56	55
-61	10	9
-23	187	186
-75	18	18
-17	5316	1682
-9	145	143
-53	1	0
-29	137	137
-73	132	128
-65	14	14
-79	6214	2430
-95	70	70
-83	2232	342
-91
-
-chain 33662 chr8_random 943810 + 209837 215530 chr8 146364022 - 99514311 99520696 710844
-71	67	65
-87	1	0
-118	10	8
-19	543	533
-53	11	11
-89	4	2
-68	143	138
-148	1307	167
-110	627	624
-30	2103	3960
-84
-
-chain 32940 chr8_random 943810 + 226035 229035 chr8 146364022 - 102534454 102537445 203694
-68	23	23
-49	847	842
-50	91	91
-134	57	57
-61	1290	1287
-37	113	113
-86	41	40
-53
-
-chain 31024 chr8_random 943810 + 206449 211988 chr8 146364022 - 99514678 99520173 701886
-8	43	43
-64	6	5
-58	14	12
-82	340	0
-49	416	749
-81	59	59
-117	75	75
-207	1422	3285
-36	2428	531
-34
-
-chain 29825 chr8_random 943810 + 245532 246838 chr8 146364022 + 46839602 46840894 3893579
-57	560	553
-119	226	222
-5	184	184
-21	75	72
-59
-
-chain 28513 chr8_random 943810 + 169082 170209 chr8 146364022 - 99514495 99515614 2995290
-72	337	330
-70	17	17
-84	143	144
-53	81	80
-64	162	161
-44
-
-chain 28403 chr8_random 943810 + 244271 247583 chr8 146364022 + 46840215 46841632 1514192
-150	21	21
-65	247	246
-61	60	60
-144	37	36
-68	1	0
-56	146	144
-158	1945	55
-153
-
-chain 27366 chr8_random 943810 + 305024 329400 chr8 146364022 - 99508828 99514021 185326
-30	144	144
-27	1950	69
-57	1	0
-69	4733	954
-80	7	7
-60	2015	139
-144	51	51
-17	50	48
-20	2199	324
-179	83	83
-149	1	0
-45	50	50
-29	198	197
-38	56	56
-36	163	162
-27	2035	153
-71	157	157
-56	6099	109
-62	47	47
-93	104	100
-75	1	0
-39	342	0
-49	1641	94
-81	539	539
-177
-
-chain 25161 chr8_random 943810 + 165410 166073 chr8 146364022 + 46840031 46840686 5084847
-51	107	104
-69	107	106
-77	51	48
-53	79	78
-69
-
-chain 23498 chr8_random 943810 + 275598 276538 chr8 146364022 + 46848347 46849285 1106774
-150	39	39
-58	1	0
-156	159	160
-43	237	235
-97
-
-chain 22556 chr8_random 943810 + 221873 233787 chr8 146364022 - 102535430 102541485 264178
-56	92	91
-134	1524	140
-26	9348	4879
-77	298	294
-159	126	126
-55	8	7
-11
-
-chain 21554 chr8_random 943810 + 211856 229563 chr8 146364022 - 102534119 102541711 230838
-98	1283	144
-76	1760	1749
-25	1	0
-80	1889	12
-87	80	79
-50	14	14
-51	55	50
-59	207	201
-52	31	30
-212	2303	390
-120	3503	2102
-43	5590	1830
-38
-
-chain 21378 chr8_random 943810 + 315539 346866 chr8 146364022 - 99515536 99522005 182294
-65	7	7
-59	1872	0
-52	1	0
-110	59	59
-145	1929	47
-157	4107	0
-50	19	19
-76	11	11
-9	218	215
-20	69	68
-27	104	104
-38	3941	169
-93	9868	446
-40	53	53
-33	350	349
-83	1915	34
-228	2	1
-71	4993	3080
-80	103	101
-58	162	162
-50
-
-chain 20133 chr8_random 943810 + 187153 190961 chr8 146364022 + 46839718 46841635 711123
-27	2490	610
-70	193	186
-75	6	6
-22	81	81
-48	1	0
-41	200	200
-10	13	12
-78	103	101
-193	10	10
-147
-
-chain 19851 chr8_random 943810 + 184692 274845 chr8 146364022 + 46839508 46849467 34309
-59	20	20
-103	2903	645
-204	29	27
-122	5	4
-251	1	1
-19	1	1
-370	102	102
-45	59	59
-32	2407	520
-35	53082	226
-207	6009	346
-163	6	4
-101	79	79
-50	419	416
-33	1900	15
-227	6	6
-48	1	0
-53	22	21
-65	58	57
-59	43	42
-133	81	80
-20	44	42
-50	14	12
-53	37	36
-104	2375	490
-62	1340	1334
-14	1	0
-183	3854	228
-49	6055	405
-35	6036	1578
-80	25	25
-89	8	7
-13
-
-chain 19146 chr8_random 943810 + 175023 175290 chr8 146364022 - 99508150 99508416 4025470
-88	58	57
-65	25	25
-31
-
-chain 17870 chr8_random 943810 + 167013 193249 chr8 146364022 + 46840039 46851047 112211
-37	407	404
-31	233	231
-41	10382	13
-26	802	800
-40	282	279
-41	6132	1660
-77	3954	2070
-28	510	4239
-81	90	89
-50	30	30
-120	2083	201
-60	192	191
-51	338	0
-118
-
-chain 17758 chr8_random 943810 + 265412 266607 chr8 146364022 + 43830436 43831619 676151
-58	100	98
-16	14	14
-59	946	936
-2
-
-chain 17102 chr8_random 943810 + 196211 212812 chr8 146364022 - 102534634 102539542 315778
-4	176	169
-110	677	661
-101	229	222
-63	12	11
-71	2311	416
-66	5	5
-3	2545	1456
-25	7	5
-52	21	20
-3	9994	1320
-61	8	7
-57
-
-chain 16958 chr8_random 943810 + 303736 319647 chr8 146364022 - 99509421 99514022 288375
-62	1	0
-115	55	55
-12	6716	1059
-173	60	58
-5	238	238
-27	142	138
-80	1	0
-32	1181	1170
-56	95	93
-15	6818	1186
-27
-
-chain 16519 chr8_random 943810 + 191041 191237 chr8 146364022 + 46841712 46841907 5194781
-138	7	6
-51
-
-chain 16395 chr8_random 943810 + 250196 250458 chr8 146364022 + 46842349 46842610 5706058
-109	63	63
-38	1	0
-51
-
-chain 16284 chr8_random 943810 + 248826 295566 chr8 146364022 + 43821313 43835075 8983
-38	3114	1217
-58	3878	108
-134	2320	436
-35	2074	180
-90	6230	729
-53	51	51
-165	2138	257
-18	1	0
-14	9087	4604
-68	26	23
-70	26	25
-165	4726	2469
-31	113	113
-45	6358	726
-53	323	321
-29	3160	1272
-53	1943	60
-1	1	0
-51
-
-chain 16072 chr8_random 943810 + 313809 340982 chr8 146364022 - 102527896 102533983 267291
-28	5309	1547
-73	15383	1858
-110	23	22
-51	120	119
-75	171	167
-144	2405	509
-56	2087	199
-104	240	238
-93	367	364
-59	113	109
-162
-
-chain 15849 chr8_random 943810 + 261982 295288 chr8 146364022 + 43821759 43829198 76114
-110	412	75
-52	237	234
-137	1904	21
-61	17	17
-88	8048	505
-97	1212	533
-118	1	0
-62	80	80
-12	643	644
-105	9123	1231
-153	113	112
-50	1019	1018
-55	3899	142
-89	478	475
-43	4836	1068
-52
-
-chain 15670 chr8_random 943810 + 194296 345941 chr8 146364022 - 102525263 102540770 8834
-113	3789	1
-79	5134	279
-81	25039	3655
-36	72	71
-66	2073	189
-82	66	62
-87	280	277
-20	23	23
-59	87	84
-72	49	48
-51	7	7
-82	1014	334
-62	79983	3178
-76	18	17
-68	2382	504
-43	42	41
-108	10477	733
-134	2033	147
-59	5650	11
-88	3846	65
-64	297	293
-50	3779	12
-69	123	122
-120	121	120
-68	15	15
-57	136	135
-139	239	237
-72	1	0
-63	4	3
-53	59	59
-8	490	488
-28	84	81
-35	298	293
-34	805	799
-67	1	0
-53	69	67
-100	14	14
-81	134	132
-53	38	38
-39	110	109
-45
-
-chain 14986 chr8_random 943810 + 225882 226349 chr8 146364022 - 99518359 99518822 2174986
-18	53	51
-56	166	164
-73	33	33
-68
-
-chain 14834 chr8_random 943810 + 243014 243551 chr8 146364022 - 99519780 99520313 2299338
-16	162	159
-19	313	312
-27
-
-chain 14491 chr8_random 943810 + 298927 299279 chr8 146364022 - 102541139 102541484 3650546
-95	253	246
-4
-
-chain 13927 chr8_random 943810 + 330425 330634 chr8 146364022 - 99513165 99513373 16289681
-108	47	46
-54
-
-chain 13708 chr8_random 943810 + 204114 204446 chr8 146364022 - 99514221 99514551 7956244
-38	2	1
-51	137	136
-104
-
-chain 13201 chr8_random 943810 + 267894 296641 chr8 146364022 + 46841376 46846486 149880
-47	8325	118
-153	12619	975
-124	10	10
-59	1933	45
-415	178	178
-62	103	99
-67	193	193
-45	34	34
-4	542	542
-26	2853	963
-60	194	194
-31	632	628
-38
-
-chain 12234 chr8_random 943810 + 261803 269960 chr8 146364022 + 46841266 46843423 172872
-35	2890	667
-1	24	24
-60	15	15
-6	166	166
-32	2034	149
-193	134	132
-81	69	68
-116	2096	211
-21	87	83
-97
-
-chain 10617 chr8_random 943810 + 337138 337293 chr8 146364022 - 99523571 99523724 21494273
-69	29	27
-57
-
-chain 10554 chr8_random 943810 + 261774 276161 chr8 146364022 + 46850579 46856384 287750
-26	3379	1156
-30	20	20
-51	4844	1067
-12	16	15
-65	51	50
-53	361	357
-85	102	101
-13	51	51
-26	87	87
-46	4988	2413
-81
-
-chain 10039 chr8_random 943810 + 325665 325968 chr8 146364022 - 99512180 99512483 3203386
-32	146	146
-51	12	12
-62
-
-chain 9889 chr8_random 943810 + 299929 343052 chr8 146364022 - 99507161 99512618 194143
-54	125	463
-172	6011	368
-29	4240	471
-68	8003	490
-69	47	47
-10	133	133
-55	45	44
-46	4488	379
-66	1908	22
-82	7833	307
-63	2043	161
-90	115	115
-101	1	0
-97	2144	241
-32	4543	773
-83	294	293
-33
-
-chain 9887 chr8_random 943810 + 315022 315154 chr8 146364022 - 99513153 99513284 7544872
-79	1	0
-52
-
-chain 9860 chr8_random 943810 + 311200 311307 chr8 146364022 - 99513093 99513199 8991129
-52	1	0
-54
-
-chain 9817 chr8_random 943810 + 331048 331155 chr8 146364022 - 99513786 99513892 13428201
-64	1	0
-42
-
-chain 9446 chr8_random 943810 + 266857 296082 chr8 146364022 + 43794817 43828117 103381
-44	9743	27369
-146	121	120
-47	983	976
-79	10221	2331
-165	112	112
-51	81	80
-39	1877	0
-66	2043	157
-36	3318	1429
-53
-
-chain 9082 chr8_random 943810 + 283227 283503 chr8 146364022 + 46855567 46855841 3572014
-72	39	38
-7	101	100
-57
-
-chain 9078 chr8_random 943810 + 266179 266275 chr8 146364022 + 46841541 46841637 24832874
-96
-
-chain 9056 chr8_random 943810 + 234327 343102 chr8 146364022 - 102532678 102541696 177988
-49	2060	180
-83	4311	566
-60	72559	3258
-278	110	111
-124	380	378
-51	246	244
-21	14	13
-37	2147	273
-83	195	193
-50	29	28
-5	2000	121
-73	4435	328
-132	3864	97
-47	5706	63
-45	54	54
-151	1883	5
-99	3796	15
-99	63	61
-64	1	0
-58	1881	0
-137	76	74
-53	53	48
-27	312	310
-85	17	16
-19	140	140
-52	244	244
-62	105	104
-50
-
-chain 8907 chr8_random 943810 + 174718 174972 chr8 146364022 - 99514987 99515577 3222521
-12	195	531
-47
-
-chain 8843 chr8_random 943810 + 329461 329557 chr8 146364022 - 99512211 99512306 12312646
-78	1	0
-17
-
-chain 8728 chr8_random 943810 + 244822 248433 chr8 146364022 + 46838897 46840609 1548241
-52	2949	1051
-100	1	0
-231	55	55
-65	34	34
-124
-
-chain 8619 chr8_random 943810 + 294534 295111 chr8 146364022 + 46855606 46856180 1696895
-31	25	25
-71	52	51
-46	97	97
-58	132	130
-65
-
-chain 8428 chr8_random 943810 + 281982 282213 chr8 146364022 + 46854328 46854560 448042
-60	97	98
-56	17	17
-1
-
-chain 8419 chr8_random 943810 + 261190 261281 chr8 146364022 + 43820969 43821060 10860311
-91
-
-chain 8395 chr8_random 943810 + 294914 295046 chr8 146364022 + 46848509 46848640 12873675
-58	69	68
-5
-
-chain 8358 chr8_random 943810 + 183391 183662 chr8 146364022 + 46851295 46851565 1204104
-177	39	38
-55
-
-chain 8235 chr8_random 943810 + 303417 303563 chr8 146364022 - 99516580 99516725 5721277
-92	1	0
-53
-
-chain 8187 chr8_random 943810 + 330253 330340 chr8 146364022 - 99512994 99513081 26147162
-87
-
-chain 7754 chr8_random 943810 + 175981 176066 chr8 146364022 - 99524049 99524133 15930227
-61	1	0
-23
-
-chain 7677 chr8_random 943810 + 237294 312035 chr8 146364022 - 99517817 99525125 210590
-33	254	254
-156	1	0
-142	25	25
-70	127	127
-226	1925	53
-62	55	55
-112	29	28
-91	36	36
-139	46	43
-7	796	791
-54	65384	1748
-45	3060	1165
-46	839	833
-119	535	529
-77	214	206
-36
-
-chain 7632 chr8_random 943810 + 192816 192897 chr8 146364022 + 46850614 46850695 27043702
-81
-
-chain 7605 chr8_random 943810 + 285785 290878 chr8 146364022 + 46850643 46851974 486318
-50	2571	689
-13	4	4
-73	73	73
-25	2038	160
-132	56	54
-58
-
-chain 7406 chr8_random 943810 + 221929 222203 chr8 146364022 - 99519540 99519813 598559
-62	1	0
-29	134	134
-48
-
-chain 7383 chr8_random 943810 + 294257 294361 chr8 146364022 + 43837510 43837614 4128881
-70	9	9
-25
-
-chain 7298 chr8_random 943810 + 168270 168367 chr8 146364022 + 46839414 46839508 6543284
-4	56	53
-37
-
-chain 7295 chr8_random 943810 + 336620 336697 chr8 146364022 - 99513722 99513799 27625946
-77
-
-chain 7211 chr8_random 943810 + 261472 261549 chr8 146364022 + 46839068 46839145 24666501
-77
-
-chain 7186 chr8_random 943810 + 330047 330123 chr8 146364022 - 99512791 99512867 27853996
-76
-
-chain 7178 chr8_random 943810 + 316571 316677 chr8 146364022 - 102541857 102541963 5712191
-106
-
-chain 7102 chr8_random 943810 + 318170 320971 chr8 146364022 - 99520028 99520932 765669
-72	19	19
-135	121	121
-72	13	12
-29	2280	384
-60
-
-chain 7077 chr8_random 943810 + 192950 193025 chr8 146364022 + 46850748 46850823 28082919
-75
-
-chain 7057 chr8_random 943810 + 203108 206189 chr8 146364022 - 99515093 99516287 1156085
-30	91	89
-53	2333	448
-35	503	503
-36
-
-chain 6980 chr8_random 943810 + 332337 335152 chr8 146364022 - 99522544 99523471 1124480
-50	412	409
-6	79	79
-50	126	126
-65	1978	93
-49
-
-chain 6922 chr8_random 943810 + 183305 183378 chr8 146364022 + 46840000 46840073 28376594
-73
-
-chain 6904 chr8_random 943810 + 266355 266429 chr8 146364022 + 46841714 46841788 28413782
-74
-
-chain 6731 chr8_random 943810 + 303313 303384 chr8 146364022 - 99509001 99509072 28774708
-71
-
-chain 6664 chr8_random 943810 + 303981 314057 chr8 146364022 - 99517140 99519668 641395
-51	3	2
-55	1	0
-72	170	168
-30	7422	1761
-7	12	11
-54	1882	0
-68	153	153
-96
-
-chain 6603 chr8_random 943810 + 322619 327380 chr8 146364022 - 99513231 99513884 1344743
-127	337	0
-120	9	8
-78	1963	78
-31	1885	0
-211
-
-chain 6584 chr8_random 943810 + 197737 202982 chr8 146364022 - 102536127 102540259 775939
-91	1155	1137
-22	12	11
-57	3876	2782
-32
-
-chain 6449 chr8_random 943810 + 218412 233428 chr8 146364022 - 99516080 99519573 697985
-27	8506	1438
-73	54	54
-91	295	295
-235	28	28
-6	100	100
-56	5516	1061
-29
-
-chain 6331 chr8_random 943810 + 327023 327090 chr8 146364022 - 99511661 99511728 29751334
-67
-
-chain 6250 chr8_random 943810 + 208146 208242 chr8 146364022 - 99508890 99508983 12204367
-15	70	67
-11
-
-chain 6212 chr8_random 943810 + 207786 207861 chr8 146364022 - 99514136 99514211 3829743
-75
-
-chain 6150 chr8_random 943810 + 203513 205795 chr8 146364022 - 102537045 102537445 1909663
-16	3	2
-125	118	117
-8	1955	75
-57
-
-chain 6094 chr8_random 943810 + 299279 299402 chr8 146364022 - 99508718 99508841 2977078
-68	21	21
-34
-
-chain 6085 chr8_random 943810 + 250101 250166 chr8 146364022 + 46842254 46842319 30387783
-65
-
-chain 6067 chr8_random 943810 + 293889 294038 chr8 146364022 + 46845620 46845767 4301892
-66	21	19
-62
-
-chain 6049 chr8_random 943810 + 230044 230135 chr8 146364022 - 102569888 102569979 10345810
-91
-
-chain 5962 chr8_random 943810 + 207380 207446 chr8 146364022 - 99509995 99510061 8394857
-66
-
-chain 5949 chr8_random 943810 + 272784 272847 chr8 146364022 + 46853694 46853757 30762472
-63
-
-chain 5823 chr8_random 943810 + 299452 300023 chr8 146364022 - 99514497 99515068 1422380
-470	61	61
-40
-
-chain 5814 chr8_random 943810 + 289476 289952 chr8 146364022 + 46839369 46839842 2257769
-77	110	110
-124	92	90
-42	1	0
-30
-
-chain 5753 chr8_random 943810 + 192024 192086 chr8 146364022 + 46838954 46839016 21955899
-62
-
-chain 5749 chr8_random 943810 + 233271 233333 chr8 146364022 - 102570546 102570608 31315232
-62
-
-chain 5681 chr8_random 943810 + 341821 341883 chr8 146364022 - 99511396 99511458 7040566
-62
-
-chain 5649 chr8_random 943810 + 174777 174837 chr8 146364022 - 99507908 99507968 31588023
-60
-
-chain 5623 chr8_random 943810 + 175706 175950 chr8 146364022 - 102534119 102534360 3287579
-59	23	22
-63	22	20
-77
-
-chain 5394 chr8_random 943810 + 322313 322370 chr8 146364022 - 99511057 99511114 32316179
-57
-
-chain 5303 chr8_random 943810 + 187437 187493 chr8 146364022 + 46840000 46840056 32583273
-56
-
-chain 5285 chr8_random 943810 + 290446 290502 chr8 146364022 + 43794807 43794863 32673339
-56
-
-chain 5276 chr8_random 943810 + 336755 336811 chr8 146364022 - 99513853 99513909 32693850
-56
-
-chain 5265 chr8_random 943810 + 208344 208568 chr8 146364022 - 99514691 99514915 3842595
-38	152	152
-34
-
-chain 5263 chr8_random 943810 + 587464 592229 chr8 146364022 + 86573610 86746488 37343
-35	3283	168311
-47	1343	1343
-20	1	3086
-36
-
-chain 5194 chr8_random 943810 + 184072 184128 chr8 146364022 + 46838897 46838953 32965865
-56
-
-chain 5184 chr8_random 943810 + 329855 329911 chr8 146364022 - 99512600 99512656 19420929
-56
-
-chain 5176 chr8_random 943810 + 177599 177656 chr8 146364022 - 99506628 99506685 33029925
-57
-
-chain 5155 chr8_random 943810 + 281730 289038 chr8 146364022 + 46843205 46844537 960143
-32	6927	953
-200	103	101
-46
-
-chain 5093 chr8_random 943810 + 184617 184671 chr8 146364022 + 43793908 43793962 23494272
-54
-
-chain 5050 chr8_random 943810 + 326962 327016 chr8 146364022 - 102542496 102542550 23236949
-54
-
-chain 5030 chr8_random 943810 + 212164 212217 chr8 146364022 - 99524079 99524132 33461083
-53
-
-chain 5021 chr8_random 943810 + 265903 265956 chr8 146364022 + 46841267 46841320 33516233
-53
-
-chain 5010 chr8_random 943810 + 325697 333370 chr8 146364022 - 99519686 99521704 323579
-146	5416	1638
-176	1905	28
-30
-
-chain 4963 chr8_random 943810 + 195042 195095 chr8 146364022 - 99525006 99525059 2910708
-53
-
-chain 4923 chr8_random 943810 + 294759 294811 chr8 146364022 + 46846486 46846538 24481170
-52
-
-chain 4775 chr8_random 943810 + 300049 300108 chr8 146364022 - 99511357 99511416 2287019
-59
-
-chain 4729 chr8_random 943810 + 323590 341586 chr8 146364022 - 99508256 99511164 508733
-81	188	186
-45	5653	0
-76	6291	651
-50	2125	222
-31	36	36
-21	50	50
-1	57	52
-62	3121	1237
-18	5	4
-85
-
-chain 4516 chr8_random 943810 + 291820 291870 chr8 146364022 + 46839826 46839876 19135311
-50
-
-chain 4460 chr8_random 943810 + 340307 340812 chr8 146364022 - 99522970 99523472 2799007
-59	396	393
-50
-
-chain 4363 chr8_random 943810 + 169662 169718 chr8 146364022 - 99524410 99524466 15024078
-25	20	20
-11
-
-chain 4245 chr8_random 943810 + 323934 340633 chr8 146364022 - 102539490 102542980 824111
-57	5415	1637
-55	4265	507
-46	6509	840
-13	129	125
-132	10	10
-68
-
-chain 4191 chr8_random 943810 + 346770 346816 chr8 146364022 - 99523777 99523823 32415009
-46
-
-chain 4157 chr8_random 943810 + 182640 182685 chr8 146364022 + 46841541 46841586 34989719
-45
-
-chain 4075 chr8_random 943810 + 287206 294116 chr8 146364022 + 46853923 46857394 507901
-58	44	43
-3	6754	3316
-51
-
-chain 4035 chr8_random 943810 + 210210 231774 chr8 146364022 - 99509073 99511132 504053
-68	1	0
-87	1	0
-47	151	148
-33	3084	58
-60	3981	215
-31	2075	179
-62	11852	1040
-31
-
-chain 3902 chr8_random 943810 + 322746 322788 chr8 146364022 - 99511490 99511532 25070576
-42
-
-chain 3842 chr8_random 943810 + 326212 339029 chr8 146364022 - 99518333 99519833 259270
-47	312	308
-17	60	57
-117	12236	926
-28
-
-chain 3793 chr8_random 943810 + 191943 191984 chr8 146364022 + 43793349 43793390 19585042
-41
-
-chain 3728 chr8_random 943810 + 267941 270995 chr8 146364022 + 46845159 46846318 991534
-57	2323	433
-41	406	402
-51	140	139
-36
-
-chain 3715 chr8_random 943810 + 252408 255104 chr8 146364022 + 46840810 46841615 879027
-44	1	0
-30	2575	685
-46
-
-chain 3689 chr8_random 943810 + 281829 281916 chr8 146364022 + 46850779 46850864 2001274
-26	3	1
-58
-
-chain 3667 chr8_random 943810 + 254324 254368 chr8 146364022 + 46840842 46840884 6647423
-30	11	9
-3
-
-chain 3646 chr8_random 943810 + 267998 268037 chr8 146364022 + 46850823 46850862 21797624
-39
-
-chain 3562 chr8_random 943810 + 168212 168270 chr8 146364022 + 43793831 43793889 3070871
-58
-
-chain 3504 chr8_random 943810 + 293480 293517 chr8 146364022 + 46839611 46839648 25642059
-37
-
-chain 3471 chr8_random 943810 + 337522 337596 chr8 146364022 - 99523948 99524022 18137430
-74
-
-chain 3448 chr8_random 943810 + 276204 276644 chr8 146364022 + 46854559 46854996 1897606
-49	365	362
-26
-
-chain 3411 chr8_random 943810 + 253189 255402 chr8 146364022 + 46850929 46853124 621337
-27	1269	1253
-37	776	774
-2	49	49
-53
-
-chain 3373 chr8_random 943810 + 338130 338166 chr8 146364022 - 99513335 99513371 20995505
-36
-
-chain 3359 chr8_random 943810 + 165298 184945 chr8 146364022 + 43823972 43836890 282023
-56	2595	8459
-64	12771	2404
-3	8	8
-69	4024	1798
-57
-
-chain 3297 chr8_random 943810 + 194502 225687 chr8 146364022 - 102525468 102530377 366001
-70	4347	545
-64	92	91
-87	8182	1452
-36	9798	1128
-56	8421	1348
-32
-
-chain 3286 chr8_random 943810 + 278118 290566 chr8 146364022 + 43833036 43837583 504233
-53	11	9
-65	12260	4361
-59
-
-chain 3257 chr8_random 943810 + 218922 219219 chr8 146364022 - 99516581 99516875 4722847
-56	32	30
-58	32	31
-119
-
-chain 3241 chr8_random 943810 + 233589 233706 chr8 146364022 - 102539417 102539534 832166
-52	16	16
-49
-
-chain 3212 chr8_random 943810 + 266430 268559 chr8 146364022 + 46841788 46842035 1348744
-53	1890	10
-128	11	9
-47
-
-chain 3157 chr8_random 943810 + 327996 328036 chr8 146364022 - 99512626 99512665 16621225
-16	15	14
-9
-
-chain 3082 chr8_random 943810 + 310645 310683 chr8 146364022 - 99512541 99512579 16551162
-38
-
-chain 3062 chr8_random 943810 + 163933 165245 chr8 146364022 + 46851641 46852949 942341
-29	1223	1219
-60
-
-chain 3030 chr8_random 943810 + 262108 262298 chr8 146364022 + 43831228 43834818 1405601
-67	13	3413
-110
-
-chain 2982 chr8_random 943810 + 183568 183600 chr8 146364022 + 46840262 46840294 9991965
-32
-
-chain 2745 chr8_random 943810 + 335974 336003 chr8 146364022 - 99513082 99513111 33185960
-29
-
-chain 2672 chr8_random 943810 + 298503 298547 chr8 146364022 - 99522900 99522944 24221385
-44
-
-chain 2671 chr8_random 943810 + 332183 346560 chr8 146364022 - 102528996 102533910 187401
-51	6123	457
-105	6796	3008
-38	249	246
-57	891	885
-67
-
-chain 2639 chr8_random 943810 + 219413 219441 chr8 146364022 - 99507721 99507749 35294427
-28
-
-chain 2612 chr8_random 943810 + 200816 200846 chr8 146364022 - 99525102 99525132 4075609
-30
-
-chain 2604 chr8_random 943810 + 240329 240369 chr8 146364022 - 99522715 99522755 8959532
-40
-
-chain 2556 chr8_random 943810 + 216929 216957 chr8 146364022 - 99514612 99514640 10325210
-28
-
-chain 2552 chr8_random 943810 + 191384 191411 chr8 146364022 + 46840185 46840212 15340406
-27
-
-chain 2552 chr8_random 943810 + 304972 304999 chr8 146364022 - 99516251 99516278 22571486
-27
-
-chain 2523 chr8_random 943810 + 327142 327169 chr8 146364022 - 99524856 99524883 11689776
-27
-
-chain 2451 chr8_random 943810 + 317909 318170 chr8 146364022 - 99521638 99521896 1452880
-31	226	223
-4
-
-chain 2447 chr8_random 943810 + 313295 313321 chr8 146364022 - 99513300 99513326 34910154
-26
-
-chain 2433 chr8_random 943810 + 230135 233158 chr8 146364022 - 99507638 99508095 1270471
-81	73	73
-21	37	37
-40	18	18
-82	2643	77
-28
-
-chain 2394 chr8_random 943810 + 309803 310102 chr8 146364022 - 102570308 102570605 11245020
-97	185	183
-17
-
-chain 2370 chr8_random 943810 + 237880 237905 chr8 146364022 - 99520270 99520295 11943708
-25
-
-chain 2370 chr8_random 943810 + 302899 302924 chr8 146364022 - 99512327 99512352 35222469
-25
-
-chain 2330 chr8_random 943810 + 274710 274735 chr8 146364022 + 46843727 46843752 26272760
-25
-
-chain 2188 chr8_random 943810 + 303139 303300 chr8 146364022 - 99512566 99512727 1325340
-161
-
-chain 2164 chr8_random 943810 + 254246 254269 chr8 146364022 + 46840765 46840788 24904248
-23
-
-chain 2146 chr8_random 943810 + 166073 166100 chr8 146364022 + 43793293 43793320 16498497
-27
-
-chain 2129 chr8_random 943810 + 171463 171506 chr8 146364022 - 99524332 99524375 3948851
-43
-
-chain 2094 chr8_random 943810 + 256486 256530 chr8 146364022 + 46856070 46856114 4878843
-44
-
-chain 2067 chr8_random 943810 + 182380 182437 chr8 146364022 + 46850625 46850682 3805032
-57
-
-chain 2054 chr8_random 943810 + 318711 318733 chr8 146364022 - 99511225 99511247 10715405
-22
-
-chain 1964 chr8_random 943810 + 202805 202867 chr8 146364022 - 99509184 99509246 3143072
-62
-
-chain 1962 chr8_random 943810 + 187357 187601 chr8 146364022 + 46841788 46842031 9057308
-62	87	86
-95
-
-chain 1941 chr8_random 943810 + 278085 278118 chr8 146364022 + 46854559 46854592 1239137
-33
-
-chain 1922 chr8_random 943810 + 294361 294534 chr8 146364022 + 46849827 46850000 1057760
-173
-
-chain 1907 chr8_random 943810 + 166115 166177 chr8 146364022 + 46850070 46850132 2756260
-62
-
-chain 1904 chr8_random 943810 + 294565 294590 chr8 146364022 + 46846293 46846318 7797359
-25
-
-chain 1899 chr8_random 943810 + 239038 239062 chr8 146364022 - 99519559 99519583 3632092
-24
-
-chain 1874 chr8_random 943810 + 311858 316542 chr8 146364022 - 99523087 99524010 1127459
-40	4555	794
-89
-
-chain 1842 chr8_random 943810 + 208242 208344 chr8 146364022 - 99510852 99510954 1122309
-102
-
-chain 1826 chr8_random 943810 + 333370 333404 chr8 146364022 - 102528310 102528344 12860155
-34
-
-chain 1699 chr8_random 943810 + 189740 189801 chr8 146364022 + 43830083 43830143 11700756
-13	1	0
-47
-
-chain 1671 chr8_random 943810 + 586860 586891 chr8 146364022 - 59596972 59597003 79385
-31
-
-chain 1671 chr8_random 943810 + 582366 582405 chr8 146364022 + 86778164 86778203 135745
-39
-
-chain 1614 chr8_random 943810 + 174855 174917 chr8 146364022 - 102535142 102535204 7562660
-62
-
-chain 1604 chr8_random 943810 + 210485 210541 chr8 146364022 - 99516819 99516875 24689779
-56
-
-chain 1577 chr8_random 943810 + 165529 165568 chr8 146364022 + 43833540 43833579 5487018
-39
-
-chain 1529 chr8_random 943810 + 199844 199893 chr8 146364022 - 99524132 99524181 16599934
-49
-
-chain 1430 chr8_random 943810 + 204007 204051 chr8 146364022 - 102535667 102535711 2444362
-44
-
-chain 1384 chr8_random 943810 + 331973 334317 chr8 146364022 - 99510969 99511436 2459541
-88	2124	247
-132
-
-chain 1361 chr8_random 943810 + 178432 178456 chr8 146364022 + 43821398 43821422 13532386
-24
-
-chain 1349 chr8_random 943810 + 282101 282136 chr8 146364022 + 43834762 43834797 3301014
-35
-
-chain 1325 chr8_random 943810 + 330748 334904 chr8 146364022 - 99513486 99513886 3761248
-39	3999	243
-118
-
-chain 1299 chr8_random 943810 + 216700 216875 chr8 146364022 - 99512515 99512690 2121346
-175
-
-chain 1278 chr8_random 943810 + 275077 288204 chr8 146364022 + 46842223 46845574 199410
-48	13052	3276
-27
-
-chain 1258 chr8_random 943810 + 272883 272996 chr8 146364022 + 43835974 43836087 2232086
-113
-
-chain 1256 chr8_random 943810 + 324880 325008 chr8 146364022 - 99513272 99513400 5381670
-128
-
-chain 1237 chr8_random 943810 + 196535 196612 chr8 146364022 - 99507792 99507869 15310375
-77
-
-chain 1235 chr8_random 943810 + 284286 284429 chr8 146364022 + 46839806 46839949 2930992
-143
-
-chain 1191 chr8_random 943810 + 293574 293786 chr8 146364022 + 46839704 46839915 1788603
-62	1	0
-149
-
-chain 1161 chr8_random 943810 + 294116 294212 chr8 146364022 + 43829899 43829995 1318655
-4	39	39
-53
-
-chain 1160 chr8_random 943810 + 183897 184027 chr8 146364022 + 43793197 43793327 2884372
-130
-
-chain 1130 chr8_random 943810 + 241032 308421 chr8 146364022 - 102539359 102541234 585349
-125	60736	871
-57	75	74
-53	2150	266
-105	4036	272
-52
-
-chain 1119 chr8_random 943810 + 229190 229281 chr8 146364022 - 99508572 99508663 1537143
-73	17	17
-1
-
-chain 1018 chr8_random 943810 + 315759 315867 chr8 146364022 - 102570622 102570730 1907772
-108
-
-chain 1013 chr8_random 943810 + 274298 274330 chr8 146364022 + 46839580 46839612 3252033
-32
-
-chain 968 chr8_random 943810 + 209695 209807 chr8 146364022 - 102537590 102537702 976902
-112
-
-chain 955 chr8_random 943810 + 319692 319755 chr8 146364022 - 102541225 102541288 3356813
-63
-
-chain 920 chr8_random 943810 + 258623 258775 chr8 146364022 + 46839508 46839659 980562
-59	25	24
-68
-
-chain 912 chr8_random 943810 + 192332 192490 chr8 146364022 + 46839260 46839417 3759652
-73	1	0
-84
-
-chain 891 chr8_random 943810 + 282553 282623 chr8 146364022 + 46843688 46843758 5243973
-70
-
-chain 873 chr8_random 943810 + 329911 329999 chr8 146364022 - 99523866 99523954 8492095
-88
-
-chain 847 chr8_random 943810 + 202393 202429 chr8 146364022 - 99516251 99516287 1768031
-36
-
-chain 808 chr8_random 943810 + 208103 208146 chr8 146364022 - 99506642 99506685 12166401
-43
-
-chain 772 chr8_random 943810 + 215530 215581 chr8 146364022 - 102536642 102536693 4621463
-51
-
-chain 770 chr8_random 943810 + 298794 298927 chr8 146364022 - 102529795 102529928 1833110
-38	53	53
-42
-
-chain 762 chr8_random 943810 + 250305 250368 chr8 146364022 + 43793197 43793260 2202736
-63
-
-chain 756 chr8_random 943810 + 175550 175595 chr8 146364022 - 102569149 102569194 15473865
-45
-
-chain 725 chr8_random 943810 + 227416 227458 chr8 146364022 - 102569147 102569189 2128584
-42
-
-chain 715 chr8_random 943810 + 237975 238010 chr8 146364022 - 99524101 99524136 9984625
-35
-
-chain 713 chr8_random 943810 + 336818 336983 chr8 146364022 - 102542943 102543107 12287033
-51	32	31
-82
-
-chain 659 chr8_random 943810 + 178382 178432 chr8 146364022 + 43825088 43825138 1126561
-50
-
-chain 630 chr8_random 943810 + 343296 343350 chr8 146364022 - 102532544 102532598 1087222
-54
-
-chain 622 chr8_random 943810 + 284683 284767 chr8 146364022 + 46845804 46845888 4299331
-84
-
-chain 618 chr8_random 943810 + 240201 240253 chr8 146364022 - 99520719 99520771 5790991
-52
-
-chain 609 chr8_random 943810 + 323290 333340 chr8 146364022 - 99511696 99512332 2037608
-32	1962	77
-33	7985	456
-38
-
-chain 511 chr8_random 943810 + 216312 216456 chr8 146364022 - 99508390 99508534 2116227
-83	23	23
-38
-
-chain 484 chr8_random 943810 + 208068 208103 chr8 146364022 - 102535970 102536005 2214348
-35
-
-chain 473 chr8_random 943810 + 323389 323449 chr8 146364022 - 102540821 102540881 1734527
-60
-
-chain 468 chr8_random 943810 + 200282 202177 chr8 146364022 - 99515228 99517906 493558
-37	1827	2610
-31
-
-chain 468 chr8_random 943810 + 309496 309560 chr8 146364022 - 99509535 99509598 902510
-13	1	0
-50
-
-chain 464 chr8_random 943810 + 238361 238411 chr8 146364022 - 102570011 102570061 2549299
-50
-
-chain 406 chr8_random 943810 + 336390 336452 chr8 146364022 - 99513496 99513558 3227798
-62
-
-chain 400 chr8_random 943810 + 198171 198198 chr8 146364022 - 99524348 99524375 19170252
-27
-
-chain 389 chr8_random 943810 + 239467 298039 chr8 146364022 - 99516251 99516834 914933
-36	19	19
-76	58363	374
-78
-
-chain 383 chr8_random 943810 + 268230 268298 chr8 146364022 + 43829500 43829568 7647204
-68
-
-chain 371 chr8_random 943810 + 289553 289594 chr8 146364022 + 43829105 43829146 1419836
-41
-
-chain 325 chr8_random 943810 + 171359 194889 chr8 146364022 - 102534570 102537063 1177879
-33	23458	2421
-39
-
-chain 321 chr8_random 943810 + 245198 245253 chr8 146364022 + 46850481 46850536 16403329
-55
-
-chain 316 chr8_random 943810 + 336558 336619 chr8 146364022 - 99513661 99513722 9588463
-61
-
-chain 316 chr8_random 943810 + 215939 215982 chr8 146364022 - 102570362 102570405 11794790
-43
-
-chain 307 chr8_random 943810 + 268331 268373 chr8 146364022 + 46843677 46843719 14936951
-42
-
-chain 302 chr8_random 943810 + 246654 246683 chr8 146364022 + 46846317 46846346 2597963
-29
-
-chain 277 chr8_random 943810 + 330681 336249 chr8 146364022 - 99513081 99513355 13257215
-37	5476	182
-55
-
-chain 224 chr8_random 943810 + 233016 233053 chr8 146364022 - 102535110 102535147 5909193
-37
-
-chain 219 chr8_random 943810 + 216875 216929 chr8 146364022 - 99508952 99509006 1250703
-54
-
-chain 217 chr8_random 943810 + 192086 192136 chr8 146364022 + 43793491 43793541 12267504
-50
-
-chain 176 chr8_random 943810 + 230251 230289 chr8 146364022 - 99522702 99522740 26486914
-38
-
-chain 171 chr8_random 943810 + 301863 301893 chr8 146364022 - 99524375 99524405 2607431
-30
-
-chain 128 chr8_random 943810 + 303580 303689 chr8 146364022 - 102542031 102542140 1606173
-109
-
-chain 117 chr8_random 943810 + 213542 213590 chr8 146364022 - 102569848 102569896 24793283
-48
-
-chain 107 chr8_random 943810 + 265719 265758 chr8 146364022 + 43793691 43793730 32387625
-39
-
-chain 103 chr8_random 943810 + 302985 303114 chr8 146364022 - 99516149 99516278 2070053
-129
-
-chain 102 chr8_random 943810 + 266041 266087 chr8 146364022 + 43794012 43794058 15664471
-46
-
-chain 87 chr8_random 943810 + 266314 266347 chr8 146364022 + 46839806 46839839 33038660
-33
-
-chain 11336435868 chr9 140273252 + 0 140273252 chr9 141213431 + 10000 141153431 13
-189075	1	1
-14	2	2
-39464594	50000	50000
-261110	50000	50000
-208233	50000	50000
-142805	50000	50000
-464507	50000	50000
-152873	50000	50000
-172579	50000	50000
-799200	0	4
-398958	50000	50000
-549743	50000	100000
-632871	50000	50000
-680077	50000	50000
-181647	50000	50000
-291910	50000	100000
-465318	50000	50000
-350909	50000	50000
-194609	50000	100000
-370335	0	176
-128583	50000	100000
-157546	18100000	18150000
-450681	50000	50000
-223855	50000	50000
-162441	50000	50000
-159539	50000	50000
-199148	50000	50000
-194491	50000	100000
-158462	50000	150000
-471702	50000	150000
-376183	50000	150000
-174765	50000	150000
-289439	50000	50000
-682157	50000	50000
-158187	50000	100000
-187806	50000	50000
-178933	50000	100000
-21507948	50000	100000
-85380	50000	150000
-834971	1	0
-39559293	100000	150000
-3818133	200000	50000
-2075804	30000	50000
-1936434
-
-chain 19053295 chr9_random 1146434 + 140076 853151 chr9 141213431 + 43822338 44639038 145
-1110	1	1
-47	1	0
-215	1	0
-468	9	9
-1934	0	1
-953	14319	26012
-970	11	11
-117	1	1
-57	1	1
-127	0	1
-1035	1	1
-123	1	1
-1418	29455	36221
-965	1	1
-33	5	5
-816	1	1
-38	1	1
-87	8	8
-588	6	6
-286	13	13
-967	6	6
-911	125	14857
-67	1	1
-18	1	1
-472	11	11
-269	7	0
-869	1	1
-23	1	1
-240	1	0
-456	1	1
-96	1	1
-247	22	22
-225	1	1
-13	0	4
-40	1	1
-211	13	29
-582	1	1
-22	4	0
-453	1	1
-37	1	1
-251	11	11
-87	1	1
-49	1	1
-95	11	11
-149	1	1
-31	1	1
-205	5	0
-1090	5	5
-89	1	1
-74	14	14
-83	1	1
-51	1	1
-594	1	3
-462	85	85
-635	50621	3293
-88	0	1
-148	18	18
-428	2	0
-5	2	0
-19	0	1
-43	1	1
-529	1	6
-77	1	1
-31	1	1
-39	0	5
-124	15	15
-51	1	1
-80	1	1
-103	1	1
-77	1	1
-147	1	1
-72	1	1
-95	10	10
-657	1	1
-57	1	1
-69	1	1
-32	1	1
-587	4	4
-298	14	14
-1505	10	8
-560	0	4
-171	1	1
-44	1	1
-211	1	1
-22	1	1
-649	1	1
-42	0	2
-96	8	8
-45	1	0
-195	402195	519766
-38949	0	176
-45847	1	0
-46124	1	0
-3889	0	1
-52224
-
-chain 10363290 chr9_random 1146434 + 903151 1075657 chr9_gl000199_random 169874 + 0 130000 308
-35955	882	0
-20	1020	0
-32	3062	0
-106	14	15
-100	9	7
-334	16	18
-121	1	0
-84	3469	73
-179	1193	0
-255	3064	0
-235	844	167
-325	2720	0
-211	25	25
-216	3639	67
-100	681	1
-58	5271	0
-71	36	36
-155	11817	855
-1017	1	0
-10599	1	1
-42	0	1
-8519	112	112
-9882	0	680
-263	8	8
-56	30	30
-206	865	183
-1131	1	0
-12309	16295	0
-37	2637	0
-463	15	15
-739	1	1
-64	1	1
-2323	1	0
-743	202	202
-245	2	0
-10307	33	32
-8496	15	15
-1065	3	3
-49	1	1
-67	1	1
-24	1	1
-150	15	15
-81	1112	7412
-104	5	5
-160	48	48
-156	31	31
-109	29	29
-32	0	337
-118	36	36
-108	21	21
-69	163	165
-105	29	29
-255	32	32
-176	46	46
-97	54	54
-158	110	5213
-54	5	5
-61	1	0
-12	66	578
-49	0	1
-256	0	1
-5	1	0
-110	0	507
-39	59	227
-44	1	0
-5	1	2
-13	268	611
-32	340	0
-2169	5	5
-109
-
-chain 8496666 chr9_random 1146434 + 526031 616031 chr9_gl000198_random 90085 + 0 90000 391
-90000
-
-chain 3482851 chr9_random 1146434 + 0 36148 chr9_gl000201_random 36148 + 0 36148 837
-36148
-
-chain 3114479 chr9_random 1146434 + 350153 383343 chr7 159138663 + 58020084 58054331 923
-5741	0	1
-5176	1	1
-36	1	1
-8401	0	3
-180	1	0
-1283	1	371
-2015	11	695
-10343
-
-chain 2652717 chr9_random 1146434 + 939453 971857 chr9_gl000199_random 169874 + 50544 169869 966
-78	104	103
-57	43	43
-41	0	1193
-212	20	20
-112	51	51
-93	1	0
-763	32	32
-929	0	85729
-2133	785	785
-1551	1	1
-38	0	1
-29	1	1
-1849	179	179
-1081	14	14
-98	255	255
-3064	235	235
-844	325	325
-2000	1	1
-55	1	1
-663	211	211
-25	216	216
-3639	100	100
-681	58	58
-5271	71	71
-36	155	155
-4203
-
-chain 864673 chr9_random 1146434 + 1126594 1146123 chr9 141213431 - 1097613 1113419 4959
-1953	6	5
-978	2409	6373
-1991	1	1
-30	1	1
-1102	7741	55
-57	1	1
-3259
-
-chain 850211 chr9_random 1146434 + 1025598 1042157 chr9_gl000199_random 169874 + 85137 125159 1202
-223	15	15
-69	106	782
-56	4	4
-103	0	1190
-57	51	51
-154	11	11
-103	0	1190
-303	94	5704
-122	20	700
-283	11	11
-564	0	6798
-68	31	31
-85	0	1
-80	48	48
-422	49	50
-604	27	3091
-147	0	4594
-563	468	470
-104	1	1
-65	1	1
-786	1	1
-26	4	4
-3436	346	0
-2356	158	158
-2985	37	37
-170	167	170
-910	11	11
-54
-
-chain 769263 chr9_random 1146434 + 86461 232520 chr9 141213431 + 40031497 40507253 306
-1287	1	1
-39	9090	8469
-1482	3	0
-72	22972	39210
-845	1	5
-1628	100	33581
-19	1	1
-708	1	1
-40	1	1
-1672	2596	163229
-3012	1	1
-27	1	0
-759	0	1
-98	72164	49914
-85	17764	159979
-3474	1	1
-50	1	1
-6064
-
-chain 759449 chr9_random 1146434 + 205961 214049 chr9 141213431 + 40301888 40309971 6546
-2149	0	1
-2715	38	32
-3186
-
-chain 584316 chr9_random 1146434 + 1135427 1141773 chr9 141213431 + 140095418 140108346 9081
-578	0	1
-958	0	1
-3002	120	6700
-1688
-
-chain 406492 chr9_random 1146434 + 174973 187473 chr9 141213431 - 97329171 97382324 1352
-1045	1	0
-610	3	3
-25	1	1
-707	0	1
-949	1	0
-476	1	1
-37	0	2
-115	22	0
-99	2	0
-19	0	1
-85	84	84
-391	0	2
-2020	102	40820
-178	0	5
-70	1	1
-108	1	0
-1683	56	22
-203	4	0
-53	0	3
-1920	1	0
-25	15	0
-171	0	4
-991	1	0
-102	1	1
-39	1	0
-81
-
-chain 392431 chr9_random 1146434 + 102229 150933 chr9 141213431 - 100800050 101111299 1649
-1200	31	31
-61	100	87
-1550	13066	115954
-174	1	7
-2845	28138	189099
-40	1462	165
-36
-
-chain 384690 chr9_random 1146434 + 98535 256322 chr9 141213431 - 100787713 101169878 613
-1160	1	0
-743	100	2055
-1590	33793	2374
-3943	1	0
-110	10986	2654
-28	3892	11
-65	38	37
-101	8010	603
-1627	0	1
-4154	127	18597
-1903	17	17
-1098	1	0
-907	16	6
-635	1	0
-110	11	10
-1170	39276	55950
-254	1	1
-16	1	1
-222	1	1
-23	0	3
-11	1	1
-963	0	1
-1311	1	1
-22	1	1
-1083	0	2
-4770	9790	219711
-142	1	1
-35	1	1
-191	1	1
-48	1	1
-4295	1	0
-1323	1	1
-26	1	0
-2991	1	0
-1653	100	28511
-184	1	1
-25	1	1
-2332	2	0
-2424	1	1
-18	1	1
-1612	0	2
-1973	2	0
-4314
-
-chain 222862 chr9_random 1146434 + 974475 976909 chr9_gl000199_random 169874 - 29206 35723 496317
-103	0	512
-103	0	2379
-1951	0	1192
-277
-
-chain 216950 chr9_random 1146434 + 179171 191499 chr9 141213431 - 75591738 75613431 4354
-84	8327	17685
-315	1	1
-43	1	1
-565	1	1
-45	1	1
-144	1	1
-47	3	3
-216	4	8
-856	15	15
-173	1	1
-23	0	1
-306	1	1
-34	1	2
-855	1	1
-41	1	1
-59	0	1
-60	1	1
-46	1	1
-55
-
-chain 213582 chr9_random 1146434 + 1129631 1131840 chr9 141213431 - 1091833 1094042 537694
-2209
-
-chain 165378 chr9_random 1146434 + 971957 973731 chrX 155270560 + 21244335 21246110 770883
-1088	0	1
-111	1	1
-46	3	3
-525
-
-chain 132596 chr9_random 1146434 + 92033 271291 chr9 141213431 - 75460140 75627580 890
-687	15	5
-714	42447	12782
-26	11947	6649
-27	11	12
-38	1490	2
-104	2	0
-98	117515	142147
-548	14	14
-760	1	1
-15	5	5
-244	0	8
-225	1	1
-25	1	1
-184	1	1
-24	1	1
-112	1	1
-49	1	1
-657	0	4
-26	1	1
-142	1	1
-117	1	1
-521	1	1
-30	1	1
-427
-
-chain 126182 chr9_random 1146434 + 264182 265594 chr9 141213431 + 41417376 41418784 8289
-408	11	11
-453	3	0
-470	1	0
-66
-
-chain 121265 chr9_random 1146434 + 153981 183865 chr9 141213431 + 40369543 40485128 5651
-820	1	0
-80	65	65
-38	101	101
-1814	1	1
-19	1	1
-2113	24775	110477
-56
-
-chain 112452 chr9_random 1146434 + 977951 979143 chr9 141213431 + 41554070 41555262 1142654
-1192
-
-chain 111666 chr9_random 1146434 + 115028 116206 chr9 141213431 + 38976673 38977851 1144814
-1178
-
-chain 91839 chr9_random 1146434 + 95026 96000 chr9 141213431 - 97340505 97341479 1389514
-974
-
-chain 86695 chr9_random 1146434 + 89274 94894 chr9 141213431 + 40421854 40482922 755289
-656	0	1
-294	1	0
-357	1	1
-58	1	1
-181	2726	58174
-1345
-
-chain 85848 chr9_random 1146434 + 116324 118085 chr9 141213431 + 40126032 40127795 187229
-1300	0	2
-247	1	1
-31	1	1
-181
-
-chain 83527 chr9_random 1146434 + 105271 111078 chr9 141213431 + 43838264 43842306 8535
-1025	1	1
-44	1	1
-374	2077	318
-609	3	0
-643	18	19
-121	15	16
-135	5	0
-736
-
-chain 82351 chr9_random 1146434 + 265594 267154 chr9 141213431 - 97363431 97364991 1727
-341	2	2
-20	1	1
-738	1	1
-34	1	1
-206	1	1
-40	1	1
-174
-
-chain 74906 chr9_random 1146434 + 107880 108681 chr9 141213431 + 40288016 40288817 1344818
-46	1	0
-553	0	1
-201
-
-chain 73427 chr9_random 1146434 + 106816 115028 chr9 141213431 - 93902441 93905998 1707
-229	0	1
-500	19	19
-145	5760	1098
-49	0	1
-9	0	1
-188	1	1
-43	1	1
-243	1	1
-41	1	1
-206	1	1
-25	1	1
-443	0	1
-171	0	3
-135
-
-chain 72594 chr9_random 1146434 + 977068 977842 chr9 141213431 - 99740263 99741035 1743552
-651	1	0
-45	1	0
-76
-
-chain 68316 chr9_random 1146434 + 87923 91873 chr9 141213431 - 101134923 101183249 1049825
-372	0	1
-115	1	1
-37	1	1
-725	1749	46124
-950
-
-chain 61838 chr9_random 1146434 + 1042331 1042988 chr9_gl000199_random 169874 - 40496 41153 2045151
-657
-
-chain 55013 chr9_random 1146434 + 1075993 1076574 chr2 243199373 - 242829160 242829741 2308873
-581
-
-chain 54512 chr9_random 1146434 + 144930 149178 chr9 141213431 - 75605255 75609502 8620
-250	1	1
-26	1	1
-262	14	19
-1397	10	9
-876	1	0
-98	79	75
-65	1	1
-772	1	1
-31	1	1
-235	1	1
-74	1	1
-51
-
-chain 52053 chr9_random 1146434 + 149316 153855 chr9 141213431 + 40375457 40380000 99648
-79	244	244
-76	2437	2440
-75	10	10
-247	0	1
-19	1304	1304
-48
-
-chain 51431 chr9_random 1146434 + 126523 128919 chr9 141213431 - 101152632 101155028 6098
-2396
-
-chain 48062 chr9_random 1146434 + 390785 391322 chr5 180915260 - 163073999 163074536 2667488
-241	1	1
-201	3	3
-91
-
-chain 43629 chr9_random 1146434 + 1073062 1075987 chr9_gl000199_random 169874 + 35053 37976 298767
-312	2456	2456
-1	2	0
-78	21	21
-55
-
-chain 37453 chr9_random 1146434 + 1024767 1030521 chr9_gl000199_random 169874 + 88172 123905 8301
-52	0	3738
-40	1994	12406
-94	1068	11110
-31	165	2038
-48	1933	5847
-329
-
-chain 33524 chr9_random 1146434 + 133017 135796 chr9 141213431 + 39163384 39166153 115831
-53	1	1
-307	5	4
-44	1	1
-406	1	1
-21	5	0
-43	1	1
-177	1	1
-25	1	0
-31	1	1
-137	5	5
-20	1	1
-52	1	1
-27	1	1
-233	1	1
-20	1	1
-394	3	0
-363	1	1
-24	1	1
-370
-
-chain 29196 chr9_random 1146434 + 343146 344485 chr3 198022430 + 156000638 156001989 5034584
-50	1	0
-56	1	1
-104	128	140
-64	838	839
-97
-
-chain 28265 chr9_random 1146434 + 96095 96747 chr9 141213431 - 93903474 93904131 1828707
-74	0	10
-511	4	0
-47	1	0
-15
-
-chain 26156 chr9_random 1146434 + 111189 113362 chr9 141213431 - 102220148 102222323 47568
-1400	0	1
-94	5	6
-674
-
-chain 25868 chr9_random 1146434 + 149715 153807 chr9 141213431 - 93950637 93954729 91748
-181	1	1
-57	1	1
-353	15	15
-330	1	0
-22	1	1
-220	93	93
-114	0	17
-104	9	9
-290	2	0
-293	1	1
-20	1	1
-328	351	343
-127	1	1
-76	1	1
-331	4	0
-52	1	1
-17	1	1
-106	5	0
-146	1	1
-38	0	3
-7	1	0
-116	3	3
-16	1	1
-168	0	1
-85
-
-chain 25003 chr9_random 1146434 + 1069304 1075830 chr9_gl000199_random 169874 + 56286 59580 21268
-305	7	7
-77	487	487
-25	288	288
-36	198	198
-163	105	105
-29	463	463
-46	1256	67
-82	36	36
-95	32	32
-28	2595	552
-103	9	9
-61
-
-chain 23281 chr9_random 1146434 + 1028681 1035309 chr9_gl000199_random 169874 + 97567 114227 7110
-30	1360	6799
-121	342	0
-5	4424	9363
-103	237	233
-6
-
-chain 21805 chr9_random 1146434 + 1135081 1135321 chr9 141213431 + 140101239 140101479 9135145
-197	1	1
-42
-
-chain 21533 chr9_random 1146434 + 1010735 1043373 chr9_gl000199_random 169874 + 61213 69988 6310
-337	14018	4703
-439	42	42
-27	307	307
-106	220	220
-51	16938	2390
-153
-
-chain 19014 chr9_random 1146434 + 335566 335883 chr16 90354753 - 56512811 56513131 11268597
-170	97	100
-50
-
-chain 18803 chr9_random 1146434 + 86148 86348 chr9 141213431 - 100705477 100705677 11441237
-200
-
-chain 13349 chr9_random 1146434 + 1068589 1070018 chr9_gl000199_random 169874 + 79052 79803 7749
-23	14	14
-253	37	37
-60	717	39
-8	269	269
-48
-
-chain 13149 chr9_random 1146434 + 410938 411078 chr8 146364022 + 38639711 38639851 17290853
-140
-
-chain 12972 chr9_random 1146434 + 332343 332481 chr7 159138663 + 61759398 61759536 17535033
-138
-
-chain 12821 chr9_random 1146434 + 388858 389014 chr15 102531392 + 80798356 80798512 17757829
-81	12	12
-63
-
-chain 11442 chr9_random 1146434 + 388166 388417 chr12 133851895 + 34836761 34837526 19956621
-81	109	623
-61
-
-chain 11149 chr9_random 1146434 + 343358 343713 chr3 198022430 - 62479553 62479920 5356830
-1	103	115
-24	134	134
-93
-
-chain 11085 chr9_random 1146434 + 468603 468722 chr9 141213431 + 42720405 42720524 20596057
-119
-
-chain 9550 chr9_random 1146434 + 389696 390760 chrX 155270560 + 61752907 61753125 23891795
-65	939	93
-60
-
-chain 9178 chr9_random 1146434 + 345818 345932 chr16 90354753 + 32819577 32819691 24666411
-52	7	7
-55
-
-chain 9128 chr9_random 1146434 + 321692 322933 chr7 159138663 + 61799163 61799701 24755828
-61	1115	412
-65
-
-chain 9086 chr9_random 1146434 + 338884 339289 chr16 90354753 + 32789437 32789842 24819157
-53	289	289
-63
-
-chain 9023 chr9_random 1146434 + 387021 388166 chr7 159138663 + 61404533 61405164 23790101
-52	1085	571
-8
-
-chain 7872 chr9_random 1146434 + 1069035 1072121 chr9_gl000199_random 169874 + 119465 157584 536281
-72	46	46
-97	2835	37868
-36
-
-chain 7579 chr9_random 1146434 + 402601 403961 chr3 198022430 - 107545066 107546932 27123369
-31	1026	0
-52	201	1733
-50
-
-chain 7458 chr9_random 1146434 + 343360 343449 chr6 171115067 + 69499143 69499232 6836024
-89
-
-chain 6713 chr9_random 1146434 + 425056 425127 chr16 90354753 + 46455806 46455877 28826250
-71
-
-chain 6541 chr9_random 1146434 + 468921 468991 chr7 159138663 + 61361207 61361277 29216706
-70
-
-chain 6486 chr9_random 1146434 + 330636 330705 chr10 135534747 + 42383267 42383336 29375264
-69
-
-chain 6456 chr9_random 1146434 + 411427 412083 chr11 135006516 + 48877623 48879132 29439180
-48	554	1407
-54
-
-chain 6295 chr9_random 1146434 + 404771 404838 chr8 146364022 + 43770407 43770474 29850106
-67
-
-chain 6049 chr9_random 1146434 + 414120 414184 chr7 159138663 - 101095351 101095415 30492982
-64
-
-chain 6040 chr9_random 1146434 + 465963 466027 chr6 171115067 + 83274875 83274939 30512451
-64
-
-chain 5969 chr9_random 1146434 + 389015 389089 chrY 59373566 - 43064540 43064609 20514560
-61	5	0
-8
-
-chain 5636 chr9_random 1146434 + 406636 407740 chr8 146364022 + 43770397 43770476 31630565
-28	1025	0
-51
-
-chain 5631 chr9_random 1146434 + 426803 426863 chr10 135534747 + 42387748 42387808 31636152
-60
-
-chain 5540 chr9_random 1146434 + 419067 419126 chr7 159138663 + 61079182 61079241 31906304
-59
-
-chain 5476 chr9_random 1146434 + 398987 399045 chr12 133851895 + 34839855 34839913 32105830
-58
-
-chain 5376 chr9_random 1146434 + 415322 415379 chr11 135006516 - 86268315 86268372 32415872
-57
-
-chain 5358 chr9_random 1146434 + 413960 414017 chrY 59373566 - 49305277 49305334 32458256
-57
-
-chain 5349 chr9_random 1146434 + 411179 411236 chr7 159138663 + 91218545 91218602 32466470
-57
-
-chain 5349 chr9_random 1146434 + 417041 417098 chr11 135006516 - 84295010 84295067 32466776
-57
-
-chain 5305 chr9_random 1146434 + 979284 979471 chr9_gl000199_random 169874 + 100510 100697 1541
-187
-
-chain 5294 chr9_random 1146434 + 393589 393645 chr19_gl000208_random 92689 - 78786 78842 32648958
-56
-
-chain 5285 chr9_random 1146434 + 407829 407885 chr16 90354753 + 34022252 34022308 32672407
-56
-
-chain 5248 chr9_random 1146434 + 345095 345150 chr3 198022430 + 72765342 72765397 32777800
-55
-
-chain 5194 chr9_random 1146434 + 325928 325983 chr16 90354753 + 46454212 46454267 32965981
-55
-
-chain 5076 chr9_random 1146434 + 385523 385577 chr9 141213431 - 74211269 74211323 33342253
-54
-
-chain 5012 chr9_random 1146434 + 398477 398530 chr3 198022430 - 107545544 107545597 33565319
-53
-
-chain 4985 chr9_random 1146434 + 417987 418040 chr8 146364022 + 43776134 43776187 33649135
-53
-
-chain 4821 chr9_random 1146434 + 397137 397188 chrX 155270560 + 61817502 61817553 34214385
-51
-
-chain 4794 chr9_random 1146434 + 414576 414627 chr11 135006516 + 50778923 50778974 34325073
-51
-
-chain 4794 chr9_random 1146434 + 397714 397765 chr19_gl000208_random 92689 - 71810 71861 34325191
-51
-
-chain 4730 chr9_random 1146434 + 411917 411967 chr21 48129895 - 33764186 33764236 34527656
-50
-
-chain 4709 chr9_random 1146434 + 107713 107880 chr9 141213431 + 40326898 40327067 460940
-64	0	2
-103
-
-chain 4703 chr9_random 1146434 + 396620 396670 chr11 135006516 + 50701175 50701225 34648839
-50
-
-chain 4594 chr9_random 1146434 + 460317 460366 chr1 249250621 + 72586197 72586246 34758860
-49
-
-chain 4154 chr9_random 1146434 + 389765 389825 chrX 155270560 + 61859291 61859351 24051909
-60
-
-chain 4125 chr9_random 1146434 + 1047887 1048034 chr9_gl000199_random 169874 + 145761 145908 266403
-21	18	18
-108
-
-chain 4032 chr9_random 1146434 + 1010207 1010501 chr9_gl000199_random 169874 + 46738 47032 105345
-133	51	51
-110
-
-chain 3744 chr9_random 1146434 + 974418 974475 chr9_gl000199_random 169874 - 111819 111876 792102
-57
-
-chain 3426 chr9_random 1146434 + 939387 939437 chr9_gl000199_random 169874 + 161370 161420 23133078
-50
-
-chain 3397 chr9_random 1146434 + 1069115 1069304 chr9_gl000199_random 169874 + 57287 57476 721888
-38	97	97
-54
-
-chain 3297 chr9_random 1146434 + 1037665 1037723 chr9_gl000199_random 169874 + 108413 108471 1099981
-5	32	32
-21
-
-chain 2900 chr9_random 1146434 + 210827 210859 chr9 141213431 + 43889710 43889742 6957
-32
-
-chain 2688 chr9_random 1146434 + 1042157 1042279 chr9_gl000199_random 169874 + 112227 112349 8300
-65	9	9
-48
-
-chain 2652 chr9_random 1146434 + 999650 1043482 chr9_gl000199_random 169874 + 41812 46278 8409
-112	43376	4009
-54	0	1
-28	153	153
-109
-
-chain 2438 chr9_random 1146434 + 1025529 1025571 chr9_gl000199_random 169874 + 134052 134094 269933
-42
-
-chain 2404 chr9_random 1146434 + 153855 153881 chr9 141213431 + 40071265 40071291 103174
-26
-
-chain 2298 chr9_random 1146434 + 1010672 1010735 chr9_gl000199_random 169874 + 66766 66829 8935
-63
-
-chain 2164 chr9_random 1146434 + 1010368 1010391 chr9 141213431 - 71502272 71502295 32168220
-23
-
-chain 2160 chr9_random 1146434 + 388789 388840 chr7 159138663 - 101569537 101569588 23945255
-51
-
-chain 2026 chr9_random 1146434 + 343746 343819 chr10 135534747 + 18324071 18324144 14357746
-73
-
-chain 1834 chr9_random 1146434 + 1010501 1010672 chr9_gl000199_random 169874 + 60299 60470 7461
-171
-
-chain 1808 chr9_random 1146434 + 391322 391360 chr7 159138663 - 47529927 47529965 6263864
-38
-
-chain 1777 chr9_random 1146434 + 343550 344817 chr22 51304566 + 35077657 35078810 5733588
-48	1167	1053
-52
-
-chain 1529 chr9_random 1146434 + 263922 264091 chr9 141213431 + 65673675 65673833 515
-62	10	0
-17	1	0
-14	2	2
-63
-
-chain 1325 chr9_random 1146434 + 1037723 1037780 chr9_gl000199_random 169874 + 96057 96114 245438
-57
-
-chain 1237 chr9_random 1146434 + 1024624 1024767 chr9_gl000199_random 169874 + 49580 49723 8604
-143
-
-chain 1217 chr9_random 1146434 + 1071842 1072151 chr9_gl000199_random 169874 + 48108 48417 165690
-30	6	6
-74	169	169
-30
-
-chain 897 chr9_random 1146434 + 1035274 1035303 chr9_gl000199_random 169874 + 108574 108603 711169
-29
-
-chain 881 chr9_random 1146434 + 345308 345393 chrX 155270560 - 77826120 77826205 8910963
-85
-
-chain 812 chr9_random 1146434 + 344331 344387 chr9 141213431 + 18649465 18649521 20542621
-56
-
-chain 538 chr9_random 1146434 + 1029334 1029359 chr9_gl000199_random 169874 + 75943 75968 9317
-25
-
-chain 480 chr9_random 1146434 + 344828 344880 chr4 191154276 - 62643619 62643671 15050009
-52
-
-chain 461 chr9_random 1146434 + 96747 96777 chr9 141213431 + 38980922 38980952 1279
-30
-
-chain 364 chr9_random 1146434 + 1025018 1025062 chr9_gl000199_random 169874 + 64308 64352 115390
-44
-
-chain 296 chr9_random 1146434 + 1009971 1010001 chr9_gl000199_random 169874 + 44634 44664 18919
-30
-
-chain 288 chr9_random 1146434 + 974120 974172 chr9_gl000199_random 169874 + 44920 44972 1936043
-52
-
-chain 260 chr9_random 1146434 + 394227 394279 chr11 135006516 + 50701175 50701227 28339537
-52
-
-chain 210 chr9_random 1146434 + 1025062 1025090 chr9_gl000199_random 169874 + 71670 71699 216729
-6	0	1
-22
-
-chain 209 chr9_random 1146434 + 388033 388083 chr11 135006516 - 84294197 84294247 27927923
-50
-
-chain 152 chr9_random 1146434 + 393023 393074 chr20 63025520 + 26259164 26259215 28112557
-51
-
-chain 86 chr9_random 1146434 + 405210 405252 chr3 198022430 - 107550280 107550322 32195393
-42
-
-chain 79 chr9_random 1146434 + 392892 392941 chr11 135006516 + 50661000 50661049 27948217
-49
-
-chain 1574309 chrM 16571 + 0 16571 chrM 16571 + 0 16571 1567
-16571
-
-chain 14267288654 chrX 154913754 + 0 154913754 chrX 155270560 + 60000 155260560 8
-34821	50000	50000
-86563	30000	50000
-766173	50000	50000
-36556	50000	50000
-80121	90000	50000
-754004	100000	50000
-5505644	0	50000
-3064785	0	50079
-26309510	25000	50000
-201175	0	8
-7417	2	0
-53136	0	8
-3076	12	0
-21092	2	0
-60831	0	2
-57728	20	0
-54336	1	0
-31676	4	0
-9986	0	4
-12109	4	0
-11227342	2000	0
-354815	50000	50000
-77401	1	1
-17	1	1
-94	3	0
-266	10	10
-113	1	1
-21	1	1
-5401	5	0
-4970	2	0
-33	6	0
-3221	1	5
-6456	0	1
-1476	5	5
-2100	1	1
-40	1	1
-1316	1	0
-2446	0	1
-1589	17	15
-11171	0	1
-2639	0	1
-5190	4	0
-78	0	8
-5087	1	0
-2663	0	1
-9149	8	7
-1851	1	0
-9081	1	0
-7249	0	25
-199	2	0
-12	2	0
-16	0	209
-37	0	20
-2536	1	0
-1394	6	0
-12550	42	0
-821	0	4
-30579	0	1
-3710	0	4
-3638	0	1
-11945	1	0
-20204	1	0
-4171	0	8
-5680	0	1
-23827	2	0
-54817	1	0
-657	1	0
-342931	180000	50000
-2052068	1	27
-5375	0	2
-46	2	0
-6489	1	0
-7175	0	2
-1239	0	2
-4302	4	0
-27253	1	0
-4244	2	0
-717	2	0
-261	6	0
-26074	0	1
-236464	50000	50000
-6136098	3000000	3100000
-13518993	0	1
-449	0	1
-4533	0	4
-757	0	1
-1102	25	26
-107	0	2
-3470	1	0
-1108	0	1
-4775	0	1
-8628	1	1
-46	1	1
-1072	1	1
-44	1	1
-292	5	4
-9091	4	4
-2218	4	4
-705	1	5
-452	1	0
-88	32	32
-212	1	0
-1801	1	7
-3960	0	1
-2007	0	1
-1979	38	38
-1320	0	1
-2093	0	1
-403	0	310
-6134	1	1
-36	1	1
-1697	0	1
-97	0	13
-7624	1	1
-19	1	1
-6933	0	1
-779	7	7
-721	1	1
-43	1	1
-1626	1	0
-6146	2	0
-150	1	1
-47	1	1
-2172	2	0
-398	1	1
-31	1	1
-1149	2	2
-183	16	16
-1663	1	1
-18	1	1
-2105	10	11
-1409	1	1
-33	1	1
-1753	0	1
-408	1	0
-1916	0	1
-477	37	37
-1415	12	0
-3799	17	17
-2921	1	0
-1811	33	33
-2753	2	0
-486	0	6
-1388	1	1
-44	1	1
-186	1	1
-46	1	1
-3037	1	0
-2301	3	0
-3876	1	1
-22	1	1
-1724	0	1
-3733	0	1
-627	0	1
-250	1	0
-194	1	1
-26	1	1
-20797	10	10
-2445	1	0
-1733	0	2
-1001	12	0
-4394	9	9
-4052	10	9
-670	1	1
-97	6	0
-25	1486	1188
-10	3	2
-28	41	41
-28	2	3
-10	126	1058
-11	1051	417
-25	0	6
-18	1	1
-62	17	17
-77	0	1
-1009	41	41
-3899	10	10
-4690	0	1
-7343	1	0
-1248	1	0
-1259	1	0
-1345	0	4
-1534	1	0
-3797	16	16
-807	1	0
-2427	1	0
-48	0	1
-287	1	0
-611353	0	1
-1041	6	0
-371	0	1
-227	0	1
-2806	1	0
-36	1	1
-234	1	1
-23	1	1
-584	1	0
-22241	1	1
-65	1	1
-4605	0	1
-2326	0	20
-2130	0	1
-6170	9	13
-10665	0	1
-14631	1	0
-5359	4	0
-4004	1	0
-3182	11	0
-3897	14	16
-2551	1	0
-1824	1	0
-5274	1	1
-41	1	1
-4309	0	1
-3827	0	1
-4594	0	1
-65	1	1
-1170	1	1
-42	4	4
-214	0	1
-5228	0	1
-553	1	0
-5528	7	7
-735	14	14
-2861	1	0
-156	0	2
-6183	42	42
-2595	1	1
-41	1	1
-472	1	1
-65	0	1
-8	1	1
-1162	1	0
-565	1	1
-48	1	1
-536	2	1
-766	0	2
-4520	0	1
-1574	1	0
-503	0	1
-2558	0	1
-250061	7	7
-9650	18	18
-3208	1	1
-25	0	1
-744	2	0
-2994	1	1
-33	1	1
-1331	1	0
-2042	6	17
-1292	1	1
-35	1	1
-2485	1	1
-35	1	1
-17284	1	0
-7	7	1
-670	0	4
-429	0	1
-4736	1	0
-3849	0	1
-6745	16	16
-2344	1	1
-41	1	1
-4459	9	9
-3449	0	1
-3876	1	1
-75	1	1
-1429	7	7
-11126	26	26
-781	1	1
-28	1	1
-409	12	13
-1223	12	12
-5354	0	1
-1255	0	6
-851	65	65
-126	1	1
-47	5	5
-5931	4	0
-420	0	1
-2949	0	6
-193	324	324
-6740	1	3
-1074	1	0
-2465	1	1
-40	1	1
-640	2	0
-550	1	1
-32	1	1
-4096	1	1
-29	1	1
-949	6	6
-6258	1	0
-3957	1	0
-19608	1	1
-48	1	1
-234	0	1
-13246	13	13
-4651	321	0
-2617	1	0
-4553	0	3
-491	0	6
-7496	1	1
-9	0	10
-77	0	4
-3314	1	1
-32	1	1
-5217	1	0
-1500	17	17
-2023	1	0
-2425	0	18
-3110	8	8
-3248	1	0
-1946	1	1
-48	1	1
-9620	0	2
-31242	20000	50000
-36075685	3	0
-36004	1	1
-27	1	1
-5196	0	1
-293	0	2
-13307	0	3
-2420	6	0
-1863	0	2
-2911	0	1
-3233	2	0
-66	1	0
-2376	10	0
-4893	1	0
-745	1	0
-3897	0	13
-3835	1	1
-55	1	1
-538	1	1
-48	4	1
-20	0	2
-279	0	2
-33	1	1
-48	1	0
-387	8	8
-692	0	1
-375	3	0
-383	1	1
-18	1	1
-1289	1	1
-29	1	1
-12332	0	331
-856	4	0
-48	0	4
-8716	0	5
-130	2	0
-3001	0	1
-1332	8	5
-23273	0	1
-30174	27	39
-337	0	3
-2838	1	0
-1614	0	9
-313	0	1
-83	4	0
-172	1	1
-25	1	1
-4912	0	39
-1863	0	1
-2931	1	0
-3134	0	3
-390880	0	1
-7199	1	0
-305	2	0
-1811	2	0
-5449	0	3
-7443	0	2
-2171	1	1
-27	1	1
-2668	0	2
-2180	0	1
-1170	0	9
-1450	16	16
-3080	1	0
-920	18	18
-10219	1	0
-678	1	1
-28	1	1
-698	1	0
-112	1	0
-1831	3	0
-14327	2	0
-2087	10	10
-150	0	3
-380	1	1
-28	1	1
-1265	19	21
-7184	3	2
-4225	9	14
-1002	0	1
-3855	4	0
-2534	1	1
-30	1	1
-794	1	0
-25	1	1
-76140	70000	50000
-1432750	4799	0
-8	2973	0
-681864	20000	50000
-4278742	0	56347
-12021233	9	9
-1775	1	0
-1468	1	1
-51	16	14
-6	0	1
-6	0	1
-11	4	5
-7	0	1
-4	0	1
-75	1	2
-26	1	0
-16	0	1
-9	0	1
-19	0	2
-22	1	0
-9	0	1
-5	1	3
-14	6	7
-38	1	0
-26	1	1
-62	0	1
-38	1	1
-1687	0	1
-54	0	1
-8528	0	1
-2722	0	1
-6240	0	1
-33	0	1
-121285	1	0
-6	0	1
-35	1	0
-1381	0	1
-5368	1	0
-3079	0	1
-10863441	0	4
-1799	1	1
-24	1	1
-334	1	0
-4960	17	0
-1160	1	1
-34	1	1
-6153	3	0
-1346	4	0
-103	4	0
-2835	12	12
-304	0	16
-719	0	1
-3286	1	0
-10182	0	9
-804	1	1
-28	1	1
-749	0	1
-3387	1	1
-47	1	1
-482	0	1
-455	15	15
-719	1	1
-18	1	1
-2074	0	1
-1348	0	4
-3928	1	1
-18	1	1
-907	0	1
-2972	2	0
-115	1	1
-37	1	1
-4428	1	0
-1120	1	0
-4055	5	0
-2753	18	18
-158	3	0
-3590	1	1
-47	1	1
-62	1	0
-947	1	1
-45	1	1
-1639	1	1
-32	1	1
-1076	0	1
-3996	4	0
-7965	1	0
-1733	1	0
-1451	0	2
-617	1	0
-4375	0	1
-2194	64	63
-301	1	1
-27	1	1
-6661	1	1
-79	1	1
-1495	1	0
-499	1	1
-37	2	2
-968	1	0
-34	1	1
-6337	1	1
-18	1	1
-8162	1	1
-22	5	0
-9274	1	0
-6017	5	5
-3872	8	0
-5421	1	0
-532	6	7
-5673	0	4
-1542	4	0
-890	3	1
-2561	1	0
-1692	1	0
-1142	1	1
-32	1	1
-503	2	1
-123	1	1
-75	1	1
-2322	1	0
-201	1	0
-40	3	3
-149	3	0
-1441	1	1
-40	1	1
-159	2	0
-1278	1	1
-33	1	1
-221	0	1
-31	1	1
-161	9	10
-1890	0	1
-132	1	1
-37	1	1
-514	17	23
-1373	4	0
-907	1	1
-15	1	1
-714	1	1
-18	0	1
-10	1	1
-55	1	1
-24	1	1
-1038	2	0
-95	1	5
-1094	1	1
-170	1	1
-844	0	3
-369	1	1
-39	1	1
-650	1	1
-41	1	1
-176	12	12
-688	1	0
-7640	4	0
-2650	1	1
-28	0	4
-44	1	1
-728	8	0
-2196	0	1
-13466	0	1
-3510	0	2
-2147	1	1
-44	0	3
-1320	11	11
-210	0	4
-105	1	0
-3239	0	1
-1496	142	153
-2391	1	1
-39	0	2
-438	4	0
-2272	8	0
-6865	0	3
-7183	0	1
-5104	0	3
-182	1	0
-3131	1	1
-31	1	0
-14	1	1
-59	1	0
-373	1	1
-42	1	1
-235	13	13
-1608	0	5
-152	1	1
-106	1	1
-783	34	34
-1633	1	1
-29	3	0
-821	1	1
-24	1	1
-1178	1	1
-33	1	1
-328	1	1
-27	1	1
-5682	16	13
-146398	30000	50000
-59809	0	2
-3389	1	1
-37	1	1
-11606	0	1
-1597	0	1
-618	1	1
-47	1	1
-2698	0	1
-826	5	5
-33	0	2
-2560	0	14
-98	0	3
-1287	0	1
-7600	0	1
-9894	0	8
-7160	0	1
-32	1	1
-1698	0	1
-754	2	0
-6787	0	1
-584	0	2
-1107	1	1
-40	1	1
-365	1	1
-35	1	1
-399	0	8
-11444	0	1
-1973	0	1
-1200	0	1
-716	1	1
-25	1	1
-1570	0	2
-433	2	0
-905	0	2
-94	1	1
-28	1	1
-2490	18	18
-5054	9	1
-2184	0	2
-2955	23	21
-431	49	49
-314	1	0
-1563	1	1
-20	1	1
-1632	11	0
-1671	2	0
-1527	0	1
-676	1	1
-29	1	1
-1245	1	1
-34	0	1
-1203	22	30
-1934	1	0
-3421	0	2
-17	1	1
-774	0	30
-97	6	6
-59	12	26
-840	1	1
-19	1	1
-2036	27	53
-683	30	30
-401	0	1
-25	1	1
-381	16	0
-159	1	1
-17	1	1
-1150	0	4
-700	1	0
-29	0	2
-409	1	1
-49	1	1
-1240	1	1
-37	3	3
-2248	0	1
-1828	0	1
-1997	1	5
-4640	4	4
-4555	2	0
-150	52	0
-618	2	2
-16	1	1
-83	0	22
-56	1	57
-2531	8	0
-4250	17	17
-2203	4	0
-1665	10	0
-415	0	2
-393	0	1
-15728	1	0
-158	0	4
-82	0	14
-543	1	1
-42	1	1
-3261	18	18
-139	1	1
-37	1	1
-410	1	1
-18	1	1
-5405	0	1
-1104	1	1
-53	1	1
-392	1	1
-55	3	3
-3352	0	9
-692	106	52
-27	4	0
-13	1	3
-14	88	0
-61	2	0
-8931	0	1
-6692	2	1
-253	19	19
-869	2	0
-196	0	2
-389	1	1
-30	1	1
-949	1	0
-6057	3	0
-4741	0	1
-7689	0	2
-2046	18	18
-215	1	0
-46885	0	2
-24138	0	2
-4037	0	1
-4047693	0	1
-9545	2	0
-11590	0	4
-1698	3	1
-18923	0	4
-1806	1	1
-44	1	1
-2581	2	0
-10620	1	0
-3804	1	0
-339	2	0
-476	1	0
-5861	5	8
-109	14	0
-901	1	1
-19	1	1
-45	0	2
-1736	0	1
-6625	0	2
-7812	0	4
-7678	0	2
-5086	3	8
-4170	1	0
-1671	0	6
-6333	16	0
-902	1	1
-44	1	1
-384	6	0
-23181	4	4
-214	0	2
-8958	4	0
-220	1	1
-49	1	1
-2783	1	0
-2641	1	0
-136	20	20
-1279	1	0
-3924	6	6
-13054	0	6
-8954	13	0
-4128	0	2
-2269	0	1
-16258	2	0
-30076	1	1
-49	1	1
-102	0	1
-8824	27	27
-1730	1	1
-47	1	1
-3339	1	0
-132	16	0
-81	0	16
-89	0	6
-6369	0	1
-541	0	1
-6288	4	0
-3814	0	2
-7260	1	0
-802	0	68
-1166	1	0
-2230	0	1
-1109	1	0
-1106	0	2
-12396	1	0
-26207	1	1
-21	1	1
-4087	16	0
-1323	7	7
-525	1	0
-4198	1	0
-4682	13	13
-890	2	0
-816	2	0
-1961	4	0
-24586	1	1
-19	1	1
-4403	0	1
-1342	0	1
-57	11	12
-2229	30	31
-1979	35	0
-10541	1	0
-9725	6	0
-2536	1	2
-20	1	1
-1541	12	0
-1130	1	1
-34	1	1
-927	1	0
-4003	1	0
-966	0	1
-149	1	0
-842	0	8
-4326	1	1
-25	1	1
-569	6	7
-664	2	2
-5695	0	1
-3074	1	0
-1539	9	3
-634	1	1
-39	1	1
-8610	1	1
-11	0	1
-345	43	43
-372	0	2
-4311	6	0
-3122	2	0
-369	0	1
-9963	10	10
-2191	1	1
-23	1	1
-1060	1	1
-19	1	1
-240	12	12
-1748	1	1
-45	1	1
-1040	1	1
-31	1	1
-7446	1	1
-25	1	1
-8379	7	7
-7325	0	3
-357	1	0
-1313	1	0
-11624	0	4
-5865	0	1
-9750	0	1
-3540	16	0
-5671	13	13
-2885	4	0
-8179	0	1
-753	1	0
-2289	49	49
-1979	2	0
-1318	0	1
-957	1	0
-825	12	12
-1110	16	0
-3735	17	17
-9997	223	53
-149	22	24
-636	1	1
-22	0	1
-42	1	1
-1634	4	4
-3380	3	0
-979	0	2
-3429	1	0
-7138	14	0
-1727	1	1
-38	1	0
-88	0	1
-630	20	20
-476	0	5
-21	0	1
-94	0	1
-42	1	0
-17	0	1
-27	0	1
-172	1	1
-37	1	1
-191	1	1
-66	1	1
-630	0	1
-261	1	1
-28	1	1
-1282	17	18
-429	0	1
-1588	1	1
-20	1	1
-1416	1	1
-33	1	1
-529	0	1
-25	0	1
-1863	0	4
-1651	1	1
-28	1	1
-11815	0	1
-26	0	1
-19	1	1
-3105	0	1
-700	0	1
-150	0	1
-68	0	1
-1420	0	6
-568	14	16
-2415	0	1
-41	1	1
-415	1	1
-33	1	1
-4521	1	1
-33	1	1
-307	1	0
-176	1	0
-3790	1	1
-86	1	1
-67	1	1
-65	0	1
-7439	1	1
-18	1	1
-16805	0	1
-1764	1	0
-3104	35	35
-3845	0	1
-3384	0	2
-17	0	18
-156	1	1
-30	1	1
-165	0	2
-1087	1	0
-953	1	0
-483	0	1
-632	1	0
-652	1	0
-8563	9	7
-1860	1	0
-398	1	0
-2219	1	1
-53	1	1
-756	1	1
-66	1	1
-69	1	1
-48	1	1
-63	1	1
-28	3	0
-1057	3	0
-63	0	3
-55	1	1
-74	3	2
-159	0	3
-92	1	1
-29	1	1
-58	3	0
-1210	9	9
-54	1	1
-27	1	1
-1374	0	2
-1775	17	2
-764	14	14
-331	16	16
-2291	3	4
-1687	1	1
-26	1	1
-2469	1	0
-3243	0	1
-3636	1	1
-24	1	1
-615	1	0
-2566	0	1
-275	5	0
-695	7	0
-9686	32	32
-3416	0	1
-1452	4	0
-214	13	13
-49	0	124
-1393	9	9
-5812	1	1
-24	1	1
-5703	0	1
-4006	1	0
-1462	3	0
-5199	2	0
-1554	0	2
-715	10	12
-1966	0	2
-2801	0	16
-618	0	1
-413	18	0
-730	1	1
-31	1	1
-4372	5	0
-10789	1	0
-2399	1	0
-6750	0	2
-1363	6	0
-6736	2	0
-4457	0	4
-7867	1	0
-3495	2	1
-7584	0	1
-2652	1	0
-1771	0	1
-14808	41015	41008
-19235	0	1
-9638	0	1
-2994	0	1
-469	3	1
-499	0	1
-12074	13	13
-2807	10	11
-715	0	2
-1627	6	6
-5099	1	0
-488	1	5
-975	0	2
-1761	0	1
-1794	5	0
-8254	3	3
-18	1	1
-3737	9	9
-1442	13	13
-212	0	10
-7712	1	1
-44	1	1
-4480	40	40
-1751	1	0
-1316	1	1
-49	1	1
-9050	4	0
-143	0	2
-2813	13	13
-1286	2857	49999
-75638	40000	50000
-1583473	0	2
-1564099	1	97463
-2933461
-
-chain 1621142 chrX 154913754 + 148570601 148611616 chrX 155270560 - 6466757 6507765 175
-13140	0	1
-20345	6	0
-3704	1	0
-1517	1	0
-2301
-
-chain 259772 chrX 154913754 + 75282398 75286444 chrX 155270560 - 79901776 79905823 6183
-1486	41	41
-41	40	40
-126	11	11
-1051	1209	1210
-41
-
-chain 192506 chrX 154913754 + 114908114 114911060 chrX 155270560 + 114997023 115000000 3054
-63	528	528
-60	0	16
-630	28	44
-689	16	16
-436	1	0
-495
-
-chain 188216 chrX 154913754 + 114908656 114914454 chrX 155270560 + 115000574 115005488 36116
-49	2721	1850
-47	8	8
-197	704	696
-2	16	0
-1155	42	43
-455	2	12
-400
-
-chain 119665 chrX 154913754 + 114906873 114908114 chrX 155270560 + 115003848 115005094 1024208
-1216	0	5
-25
-
-chain 29390 chrX 154913754 + 76491035 76491342 chr1 249250621 - 136684922 136685229 4932608
-307
-
-chain 25643 chrX 154913754 + 114911150 114911426 chrX 155270560 + 115005157 115005433 246321
-276
-
-chain 19821 chrX 154913754 + 114908177 114911739 chrX 155270560 + 114982173 114982762 1997
-479	3022	49
-61
-
-chain 15998 chrX 154913754 + 114911743 114912382 chrX 155270560 + 114967843 114968482 6239
-639
-
-chain 9708 chrX 154913754 + 148714470 148714905 chr5 180915260 - 8837105 8837560 23506322
-56	313	333
-66
-
-chain 9294 chrX 154913754 + 114906712 114906808 chrX 155270560 + 115005518 115005614 24447825
-96
-
-chain 6266 chrX 154913754 + 114906808 114906873 chrX 155270560 + 114962882 114962947 1027613
-65
-
-chain 6215 chrX 154913754 + 76426104 76426191 chrX 155270560 + 29934095 29934182 9535161
-87
-
-chain 5894 chrX 154913754 + 143027611 143027675 chr2 243199373 - 154977524 154977591 249
-15	0	3
-49
-
-chain 3277 chrX 154913754 + 76426069 76426104 chr1 249250621 - 60612464 60612499 19993171
-35
-
-chain 2407 chrX 154913754 + 148714814 148714839 chr2 243199373 + 100113459 100113484 27784968
-25
-
-chain 1984 chrX 154913754 + 76426191 76426234 chr8 146364022 - 27059036 27059079 21505033
-43
-
-chain 1549 chrX 154913754 + 114911087 114911150 chrX 155270560 + 114976136 114976199 336010
-63
-
-chain 1443 chrX 154913754 + 114913555 114913597 chrX 155270560 + 114984570 114984612 98822
-42
-
-chain 1245 chrX 154913754 + 148714288 148714366 chr4 191154276 - 133575330 133575408 22672116
-78
-
-chain 1030 chrX 154913754 + 114911060 114911082 chrX 155270560 + 114988042 114988064 7002
-22
-
-chain 733 chrX 154913754 + 148715982 148716070 chrX 155270560 - 110405878 110405966 21525610
-88
-
-chain 469 chrX 154913754 + 76426248 76426375 chr8 146364022 - 18567958 18568085 6841016
-127
-
-chain 293 chrX 154913754 + 148716634 148716684 chr2 243199373 - 107635751 107635801 26436223
-50
-
-chain 50554324 chrX_random 1719168 + 610279 1452044 chrX 155270560 + 76412035 77367385 75
-7124	5	6
-4742	1	1
-31	1	1
-1606	21	28
-3800	1	1
-23	1	1
-6209	1	1
-4	1	0
-22	1	0
-13	1	0
-1193	1	1
-32	1	1
-2218	0	1
-7608	6	1
-670	0	2
-1396	0	2
-1207	20	20
-5098	1	0
-1294	1	0
-119	0	1
-6626	16	16
-8221	1	0
-3722	4	0
-169	0	4
-1754	11	13
-58	0	1
-239	1	1
-75	1	1
-910	0	1
-518	7	7
-6771	0	1
-4354	26	26
-781	1	1
-28	1	1
-406	16	16
-4353	1	0
-22	100	24
-930	1	0
-33	1	1
-1226	0	1
-1278	660	1078
-3884	2	2
-22	1	1
-2022	4	0
-2593	1	0
-777	0	3
-4596	153	64
-2593	1	10
-1074	1	0
-3147	1	0
-2227	1	0
-9697	1	0
-3957	1	0
-3098	0	186786
-22519	1	0
-204	1	0
-22	1	0
-63	17	18
-9565	0	6
-6660	129	0
-58	1	0
-17671	100	83
-39	1	1
-9798	2	1
-5	0	1
-19	100	237
-1127	0	1
-4928	133	164
-8370	115	394
-3028	259	91
-9555	100	1670
-18018	6	0
-3818	1	0
-72	1	0
-15	1	0
-11	1	0
-4	1	0
-10	100	30
-18171	0	1
-18316	0	28
-22590	0	1
-2592	2	0
-8265	0	2
-4335	4	3
-14218	100	218
-8896	0	2
-5422	18	17
-1347	4	4
-83	166	0
-5120	101	153
-3114	126	148
-4567	1	0
-2511	0	1
-1289	2	0
-3129	124	175
-5332	1	0
-20	1	0
-15993	0	4
-9940	115	1562
-10856	1	1
-18	0	1
-2379	1	1
-32	74	72
-41	1	1
-3148	155	3622
-2876	621	0
-31	1	1
-2212	81729	108028
-557	0	1
-4283	1	0
-148	0	457
-722	1	1
-49	113	176
-33	2	2
-2654	1	0
-25	188	415
-1394	12	0
-5398	0	1
-28	100	19
-5509	151745	28754
-87	102	102
-66	5	5
-53	70	72
-56	201	601
-7819	256	150
-16	0	1
-6	0	1
-8001	4	0
-8135	0	1
-528	12	0
-797	100	193
-2857	496	0
-5822	153	0
-8578	1	0
-10594	1	0
-6352	3	3
-35	6	7
-50	55655	72028
-890	0	1
-72	0	1
-2125	1	1
-64	1	0
-15	1	0
-5	22	19
-12	129	67
-11	1	0
-8	0	1
-4	1	0
-16	2	2
-3637	1	1
-36	1	0
-28	1	0
-942	0	1
-231	1	1
-109	101	336
-18	11	294
-14959	0	2
-22656	3	1
-1280
-
-chain 6857177 chrX_random 1719168 + 1212241 1285856 chrX 155270560 + 76337041 76411192 460
-53	4	4
-3247	0	6
-51	2	0
-2014	2	0
-45	4	0
-20	4	0
-48	1	0
-5158	1	1
-29	1	1
-394	16	13
-1410	1	0
-12	1	0
-14	1	0
-7	1	0
-5	1	0
-13	1	0
-36	106	188
-1195	0	31
-133	0	4
-28	1	1
-1388	1	1
-18	1	1
-2790	0	1
-767	4	4
-49	0	1
-10	110	385
-52	0	1
-56	0	1
-4004	182	11
-23	1	1
-767	1	1
-66	1	1
-3217	2	0
-25	1	1
-4309	1	0
-26	0	1
-820	2	2
-4450	0	1
-1391	1	1
-33	0	1
-31	0	8
-3634	1	0
-1669	111	432
-10524	1	2
-8620	1	0
-2158	1	0
-1513	7	7
-4600	4	4
-2111
-
-chain 5479158 chrX_random 1719168 + 19684 169644 chrX 155270560 + 3753512 3953553 578
-1162	21228	9243
-742	1	0
-2200	7659	14347
-948	1	0
-4152	211	33421
-819	48	49
-92	22	22
-544	44	42
-175	0	1
-63	102	104
-246	37	37
-203	6	5
-279	27	27
-206	54	54
-394	39	40
-260	2	0
-311	16	16
-208	57	57
-349	6	6
-262	134	134
-481	0	6
-56	1	1
-868	0	5
-1387	18095	3193
-790	8	6
-1718	0	2
-3436	13	13
-241	40033	77157
-63	10	10
-425	63	0
-38963
-
-chain 5155611 chrX_random 1719168 + 1349115 1404263 chrX 155270560 - 77841540 77897663 609
-4514	1	1
-4	1	0
-15	0	1
-1714	142	0
-26953	1	1
-31	100	192
-4795	129	41
-2612	4	0
-3389	4	0
-5037	1	1
-22	101	1223
-13	9	8
-34	2	2
-5520
-
-chain 4548442 chrX_random 1719168 + 595876 1601165 chrX 155270560 - 77827311 79038577 141
-3039	114	45
-9150	2	0
-1995	422998	109473
-19795	1	0
-23	1	0
-12	111	343
-20	5	4
-13	1	1
-2240	1980	60
-2381	1	3
-44	1	0
-37	0	1
-24	100	79
-2445	100	136
-5050	0	1
-8804	4	0
-4444	704	262
-34	2	2
-12610	100	395
-4803	1	1
-22	1	1
-4171	128	46
-569	0	1
-2902	29308	112180
-236	1	0
-659	1	0
-711	1	0
-104	0	6764
-3212	4	2485
-1198	1	0
-8224	110	1
-4	0	1
-8	0	1
-21	0	1
-23	4	4
-5939	0	1
-182	101	1162
-2127	1	0
-28	100	77
-5048	2	0
-2345	1	0
-3616	100	211
-11	10	11
-1378	0	44
-1405	0	1
-1238	0	1
-575	0	20
-9423	100	122
-20	1	1
-7723	0	1
-431	0	1
-181	2	0
-5386	16	0
-866	105	61
-1365	0	1
-11613	318206	1966
-13	1	2
-40	1	1
-781	0	2
-5976	121	213
-3371	0	1
-693	1	0
-169	2337	746790
-586	1	0
-2072	1	1
-34	1	1
-58	13	13
-211	1	1
-28	1	1
-332	1	1
-31	1	1
-179	11	0
-2785	0	5
-1418	1	0
-12774	0	1
-3561	1	0
-4305	1	1
-120	1	1
-377	1	1
-68	1	1
-208	9	9
-998	15	15
-2146	0	1
-693	101	90
-36	1	1
-1743	1	1
-18	1	1
-2412	15	15
-1943	29	30
-3136	0	3
-12327	3	4
-2517
-
-chain 4126434 chrX_random 1719168 + 1485975 1530227 chrX 155270560 + 76291305 76335950 725
-1188	0	2
-717	1	1
-34	1	1
-1032	1	1
-42	1	1
-974	1	0
-5479	16	16
-2476	1	1
-35	1	1
-1212	3	0
-152	1	1
-46	1	1
-77	7	6
-912	1	1
-38	1	1
-4230	17	17
-617	146	545
-27	3	3
-374	1	1
-18	1	1
-3639	1	1
-122	1	1
-435	4	4
-1916	16	16
-2739	1	0
-622	16	16
-6383	2	0
-2520	35	35
-5915
-
-chain 3853214 chrX_random 1719168 + 170863 1715347 chrX 155270560 - 151357158 154150181 220
-101	0	61
-11	0	2
-38	0	155
-54	0	1
-34100	0	1
-12001	158233	27287
-105	0	1
-847	4191	3311
-101	25049	633
-4294	18781	8391
-120	26	27
-1173	0	1
-2374	87	87
-206	41	40
-40	7493	0
-1552	0	1
-194	0	1
-6613	4	3
-492	13807	11516
-2651	0	2
-1724	0	2
-2453	0	1
-3866	165	10497
-2912	8	0
-2305	93	94
-6287	1	0
-3225	7	7
-393	1	1
-18	1	1
-298	495	25877
-271	0	138
-31886	6	0
-14613	3	0
-9199	1105799	2318225
-448	0	73
-215	36	2
-248	14	15
-1012	1	0
-110	1	1
-211	15	16
-87	3	0
-268	10	6
-108	12	12
-74	1	1
-27	1	1
-178	1	1
-18	1	1
-1429	0	10
-168	1	1
-36	1	1
-64	1	1
-62	0	1
-129	2	0
-80	13	10
-11	3	0
-19	823	1702
-36	1	0
-605	17	17
-193	1	0
-215	12	13
-271	1	1
-18	1	1
-91	1	0
-178	4	4
-39	1	1
-233	1	1
-31	1	1
-500	1	1
-68	1	1
-325	9	9
-244	0	1
-843	1	1
-46	1	1
-202	0	1
-957	0	1
-150	1	1
-81	1	0
-6	1	1
-303	8540	16182
-59	4	0
-415	4	7
-127	38	38
-333	0	44
-16	0	252
-226	27	26
-64	4	0
-91	0	4
-56	32	32
-977	0	16
-701	1	1
-29	1	1
-1743	1	0
-676	0	2
-2780	0	16
-85	0	11
-22	1	1
-952	3	0
-470	1	0
-840	4	0
-146	0	4
-131	0	34
-39	4	0
-99	1	1
-26	0	4
-80	1	1
-1476	0	13
-977	0	2
-480	0	800
-1133	4	5
-532	1	1
-37	1	1
-207	0	117633
-2070	1	1
-30	2	0
-524	2	0
-484	0	1
-446	1	0
-1642	2	0
-63	1	1
-43	1	1
-148	12	12
-2115	0	1
-116	1	1
-182	10	10
-88	1	1
-65	0	320
-107	0	2
-2083	295	0
-1170	10932	59997
-1792	0	1
-292	6	7
-677	8	11
-1932
-
-chain 2670012 chrX_random 1719168 + 22277 129533 chrX 155270560 - 151420019 151525192 697
-318	0	8
-1212	7792	0
-1334	4590	634
-3132	4549	4298
-403	12	12
-889	7	7
-393	20	20
-2070	17932	14002
-179	0	1
-1042	0	1
-4330	476	475
-66	0	1
-1653	797	0
-2278	8	0
-5943	18846	26826
-69	77	81
-86	822	824
-287	1	0
-7796	1771	9789
-1118	1349	0
-2572	2	0
-4177	1	0
-2904	5	0
-881	1	1
-56	6	0
-590	1	1
-23	1	1
-262	6	6
-349	1	1
-55	1	1
-208	16	16
-311	0	2
-260	1	0
-34	5	5
-394	54	54
-206	27	27
-199
-
-chain 2529127 chrX_random 1719168 + 1458959 1485875 chrX 155270560 + 77160344 77187173 1079
-634	0	1
-9184	1	0
-59	1	0
-14	100	16
-21	1	0
-53	2	2
-11087	2	0
-2487	0	2
-2602	1	0
-667
-
-chain 902700 chrX_random 1719168 + 269161 291745 chrY 59373566 - 58967799 59197152 4215
-4053	3	0
-293	1	1
-26	0	1
-791	0	165863
-51	243	5
-66	134	1
-42	388	5
-141	0	15
-35	2	2
-42	361	0
-256	1	0
-341	3	36
-453	301	1
-147	0	1
-278	4	4
-15	0	3
-29	1	1
-122	2	0
-148	430	0
-222	151	0
-55	0	2
-149	1	0
-687	6309	50121
-61	1	1
-43	1	1
-408	80	0
-147	11	11
-228	1	1
-48	2	2
-1372	1	1
-31	1	1
-75	1	1
-28	97	0
-263	0	1
-495	98	1
-51	1	33
-52	1	1
-51	33	1
-226	1	1
-20	4	0
-211	340	0
-179	1	0
-10	1	1
-236	341	1
-555
-
-chain 569801 chrX_random 1719168 + 1106858 1112877 chrX 155270560 - 78234537 78240560 9279
-4787	0	4
-1232
-
-chain 569444 chrX_random 1719168 + 1452563 1458801 chrX 155270560 - 78136578 78142679 9342
-609	3	13
-1692	0	8
-1539	155	0
-30	3	3
-254	9	9
-1944
-
-chain 534458 chrX_random 1719168 + 90245 170863 chrX 155270560 - 151402385 151465977 943
-12303	69	69
-77	86	86
-822	66146	49119
-57	3	4
-1055
-
-chain 494413 chrX_random 1719168 + 391508 439759 chrX 155270560 - 151446976 151536655 1213
-50	57	60
-3938	36909	78166
-87	206	206
-41	40	40
-6143	240	408
-340	6	6
-194
-
-chain 379298 chrX_random 1719168 + 415243 419212 chrX 155270560 - 151507548 151511517 135808
-663	12	12
-3294
-
-chain 372919 chrX_random 1719168 + 1663885 1667930 chrX 155270560 - 153907181 153911269 141765
-802	0	3
-83	1	1
-47	1	1
-767	17	17
-1585	0	73
-215	36	2
-248	14	15
-229
-
-chain 274258 chrX_random 1719168 + 1667930 1671196 chrX 155270560 - 154066175 154070218 305212
-2034	1	281
-24	1	1
-190	0	200
-632	326	623
-58
-
-chain 267510 chrX_random 1719168 + 422339 428025 chrX 155270560 - 151460048 151465730 1055
-1034	4	3
-2317	3	0
-2328
-
-chain 266050 chrX_random 1719168 + 27992 75212 chrX 155270560 - 151430977 151495459 1091
-2648	315	25719
-644	9056	5097
-1296	30530	26348
-164	1	0
-310	1720	1720
-536
-
-chain 247472 chrX_random 1719168 + 49544 52383 chrX 155270560 + 3800594 3803433 7089
-2766	6	6
-67
-
-chain 247318 chrX_random 1719168 + 58807 462399 chrX 155270560 + 3743706 3828677 987
-48	658	658
-44	238	238
-102	246	246
-37	488	488
-27	206	206
-54	394	394
-39	797	797
-57	617	617
-134	287931	26427
-60	1338	0
-1419	8746	13247
-2214	50	50
-51	31242	578
-263	4	4
-5180	1349	0
-1121	24105	7962
-467	20820	8687
-32	2	2
-3992	2	0
-898	48	49
-92	22	22
-544	44	42
-175	0	1
-63	102	104
-246	37	37
-203	6	5
-279	27	27
-206	54	54
-394	39	40
-260	2	0
-311	16	16
-208	57	57
-349	6	6
-262	25	25
-590	57	63
-881	1017	1022
-1498
-
-chain 203629 chrX_random 1719168 + 419791 421950 chrX 155270560 - 151464996 151467156 582605
-2107	0	1
-52
-
-chain 199106 chrX_random 1719168 + 1699808 1701947 chrX 155270560 - 153935858 153937997 603481
-61	1	1
-57	1	1
-1588	4	4
-59	7	7
-361
-
-chain 199089 chrX_random 1719168 + 378452 380544 chrX 155270560 + 3796616 3798707 602253
-1586	1	0
-505
-
-chain 187776 chrX_random 1719168 + 376353 378301 chrX 155270560 + 3798256 3800203 654951
-729	1	0
-1218
-
-chain 174234 chrX_random 1719168 + 1285969 1288372 chrX 155270560 + 77019422 77021825 343560
-1763	87	87
-102	124	124
-70	56	56
-201
-
-chain 157788 chrX_random 1719168 + 111815 113457 chrX 155270560 + 3753462 3755104 810742
-1642
-
-chain 154415 chrX_random 1719168 + 1055747 1057376 chrX 155270560 + 77369279 77370908 822932
-1629
-
-chain 134293 chrX_random 1719168 + 1708912 1710376 chrX 155270560 + 1185231 1187137 959481
-129	1	1
-82	1	1
-350	2	297
-68	0	147
-831
-
-chain 132265 chrX_random 1719168 + 403961 405553 chrX 155270560 - 151477034 151478628 31377
-436	0	2
-1156
-
-chain 90853 chrX_random 1719168 + 1707707 1708693 chrX 155270560 + 1353464 1354449 1404000
-164	1	0
-46	1	1
-620	1	1
-37	1	1
-115
-
-chain 74037 chrX_random 1719168 + 267762 268693 chrY 59373566 - 59139189 59140054 1710353
-79	97	0
-220	1	0
-317	27	60
-128	1	0
-61
-
-chain 63811 chrX_random 1719168 + 410390 415127 chrX 155270560 + 3822705 3827447 11885
-2487	0	6
-1981	48	47
-221
-
-chain 61116 chrX_random 1719168 + 346359 347004 chrX 155270560 + 3777922 3778567 2069731
-645
-
-chain 55813 chrX_random 1719168 + 2787 3496 chrX 155270560 - 151499719 151505905 2274078
-50	6	6
-412	0	5477
-241
-
-chain 38577 chrX_random 1719168 + 1651263 1651671 chrX 155270560 - 153943757 153944164 3434500
-271	1	0
-136
-
-chain 34659 chrX_random 1719168 + 1707297 1707664 chrX 155270560 + 1118849 1119216 3901406
-367
-
-chain 33830 chrX_random 1719168 + 267400 267758 chrX 155270560 - 154819600 154819959 4017435
-54	0	1
-304
-
-chain 33594 chrX_random 1719168 + 347004 347356 chrX 155270560 - 151523309 151523661 4010211
-352
-
-chain 33500 chrX_random 1719168 + 290273 291150 chrX 155270560 - 155043354 155044230 1935940
-149	427	427
-91	1	0
-137	17	17
-55
-
-chain 33229 chrX_random 1719168 + 1452213 1452563 chrX 155270560 - 78136229 78136579 3954656
-350
-
-chain 31748 chrX_random 1719168 + 1656832 1657169 chrX 155270560 - 154080972 154081310 4345014
-118	0	1
-219
-
-chain 31047 chrX_random 1719168 + 364702 460901 chrX 155270560 + 3752840 3788747 1318
-48	54	53
-80	31133	470
-26	58237	28604
-46	660	660
-40	242	241
-78	0	2
-22	248	248
-33	492	491
-25	208	208
-52	400	400
-34	798	798
-56	1232	1232
-21	1	1
-34	882	887
-1017
-
-chain 26366 chrX_random 1719168 + 1717468 1717765 chrX 155270560 - 154599490 154599787 6355797
-65	8	8
-224
-
-chain 20775 chrX_random 1719168 + 1657225 1657446 chrY 59373566 + 1138227 1138450 9855403
-101	0	2
-120
-
-chain 20767 chrX_random 1719168 + 4453 4700 chrX 155270560 - 151332163 151332410 9860775
-174	10	10
-63
-
-chain 20271 chrX_random 1719168 + 1698243 1698467 chrX 155270560 - 154161726 154161950 2868
-224
-
-chain 20189 chrX_random 1719168 + 22064 22277 chrX 155270560 + 3752676 3752889 10232162
-213
-
-chain 20092 chrX_random 1719168 + 410218 414905 chrX 155270560 + 3784106 3788794 77876
-172	4468	4469
-47
-
-chain 19894 chrX_random 1719168 + 365127 367414 chrX 155270560 + 3744796 3747084 92469
-246	37	37
-203	5	6
-279	27	27
-206	54	54
-394	41	39
-260	0	2
-535
-
-chain 19881 chrX_random 1719168 + 217168 217385 chrX 155270560 + 3913712 3913929 10410664
-217
-
-chain 19372 chrX_random 1719168 + 1704190 1704597 chr2 243199373 + 106598364 106598785 10983407
-91	100	114
-81	74	74
-61
-
-chain 17351 chrX_random 1719168 + 365104 366619 chrX 155270560 + 3783188 3784703 560009
-23	246	246
-37	487	487
-27	206	206
-54	394	394
-41
-
-chain 16176 chrX_random 1719168 + 3557 21469 chrX 155270560 + 3768043 3793719 20345
-896	16406	24170
-326	33	33
-130	29	29
-92
-
-chain 15865 chrX_random 1719168 + 276938 277188 chrY 59373566 - 59140528 59140772 2014767
-82	6	0
-162
-
-chain 15331 chrX_random 1719168 + 367414 367617 chrX 155270560 + 3823924 3824127 647220
-203
-
-chain 13713 chrX_random 1719168 + 489399 489544 chrX 155270560 + 3712149 3712294 16431967
-145
-
-chain 12918 chrX_random 1719168 + 274951 275159 chrY 59373566 - 59139058 59139278 8720139
-52	0	12
-156
-
-chain 12632 chrX_random 1719168 + 1705530 1705970 chrX 155270560 + 145057484 145057926 18056495
-78	288	290
-74
-
-chain 12447 chrX_random 1719168 + 1030429 1030575 chr5 180915260 - 168461964 168462110 18325086
-146
-
-chain 12016 chrX_random 1719168 + 1317064 1317191 chrX 155270560 + 77214259 77214386 18979178
-127
-
-chain 11687 chrX_random 1719168 + 278072 278210 chrX 155270560 - 154988343 154988492 4329206
-112	25	36
-1
-
-chain 11514 chrX_random 1719168 + 278210 278346 chrY 59373566 - 59141204 59141340 4138572
-136
-
-chain 10224 chrX_random 1719168 + 1704620 1704728 chr19 59128983 - 37939031 37939139 22329028
-108
-
-chain 10213 chrX_random 1719168 + 277934 278654 chrY 59373566 - 59141065 59141499 2702219
-138	514	228
-68
-
-chain 9983 chrX_random 1719168 + 290082 290229 chrX 155270560 - 155043503 155043650 2501552
-48	40	40
-59
-
-chain 9686 chrX_random 1719168 + 1671544 1671645 chrX 155270560 + 1359785 1359886 23561825
-101
-
-chain 8627 chrX_random 1719168 + 274506 274913 chrX 155270560 - 154985996 154986278 9490470
-54	20	20
-32	0	8
-10	242	109
-49
-
-chain 7400 chrX_random 1719168 + 1030281 1030397 chr9 141213431 + 129760930 129761046 27439238
-59	26	26
-31
-
-chain 7194 chrX_random 1719168 + 274704 274779 chrY 59373566 - 59139208 59139283 27842833
-75
-
-chain 7041 chrX_random 1719168 + 129047 129334 chrX 155270560 - 151486292 151486579 1717
-54	206	206
-27
-
-chain 6777 chrX_random 1719168 + 275159 275252 chrX 155270560 - 154986140 154986238 15049098
-1	37	42
-55
-
-chain 6125 chrX_random 1719168 + 479075 479168 chrX 155270560 - 151461082 151461175 898
-93
-
-chain 5720 chrX_random 1719168 + 1705205 1705283 chr3 198022430 - 36255828 36255906 21764861
-52	21	21
-5
-
-chain 5699 chrX_random 1719168 + 57777 57859 chrX 155270560 + 3747892 3747974 156364
-82
-
-chain 5684 chrX_random 1719168 + 275730 275789 chrX 155270560 - 154985991 154986050 31480070
-59
-
-chain 5671 chrX_random 1719168 + 278678 278737 chrX 155270560 - 154987944 154988003 7684992
-59
-
-chain 5648 chrX_random 1719168 + 288487 288546 chrY 59373566 - 59194675 59194734 31602153
-59
-
-chain 5292 chrX_random 1719168 + 1698467 1698538 chrX 155270560 - 154160180 154160251 1242775
-71
-
-chain 4986 chrX_random 1719168 + 1705613 1705672 chr7 159138663 + 43857891 43857950 19004666
-59
-
-chain 4456 chrX_random 1719168 + 1030620 1030666 chrX 155270560 + 76367481 76367527 34837220
-46
-
-chain 4200 chrX_random 1719168 + 65786 66804 chrX 155270560 + 3789104 3790122 1705
-1018
-
-chain 4147 chrX_random 1719168 + 1704281 1704341 chr4 191154276 - 52750556 52750615 11058024
-1	2	1
-57
-
-chain 4142 chrX_random 1719168 + 276887 276938 chrY 59373566 - 59140619 59140670 3855343
-51
-
-chain 3859 chrX_random 1719168 + 291150 291190 chrY 59373566 - 59196218 59196258 16097861
-40
-
-chain 3722 chrX_random 1719168 + 1703633 1706063 chr17 81195210 - 47362086 47364493 15646977
-109	441	439
-7	1805	1784
-68
-
-chain 3009 chrX_random 1719168 + 1705804 1705856 chrX 155270560 + 62632912 62632964 24180689
-52
-
-chain 2509 chrX_random 1719168 + 1708877 1708912 chrX 155270560 + 1109247 1109282 2078841
-35
-
-chain 2078 chrX_random 1719168 + 1706063 1706085 chr1 249250621 + 114909259 114909281 21967653
-22
-
-chain 1700 chrX_random 1719168 + 274379 274412 chrY 59373566 - 59139235 59139268 19436247
-33
-
-chain 990 chrX_random 1719168 + 1705283 1705342 chrX 155270560 + 119232530 119232589 19658805
-59
-
-chain 463 chrX_random 1719168 + 1703519 1703583 chrX 155270560 + 65440530 65440594 26501250
-64
-
-chain 2373402471 chrY 57772954 + 0 27228749 chrY 59373566 + 10000 28819361 24
-34821	50000	50000
-86563	30000	50000
-766173	50000	50000
-36556	50000	50000
-80121	90000	50000
-754004	100000	50000
-6846717	50000	50000
-276367	600000	50000
-813231	500000	3000000
-39401	400000	50000
-554624	100000	50000
-535761	1	0
-32919	1	0
-10	1	1
-12811	5	0
-18899	1	1
-121	5	4
-230478	1	0
-750	24	24
-14340	1	1
-43	1	1
-2095	1	0
-14635	9	0
-2781	1	0
-45022	6	5
-7151	1	0
-9343	0	628
-5417477	0	50006
-2175794	0	50000
-1481749	50000	50000
-4867933
-
-chain 46617811 chrY 57772954 + 57228749 57772954 chrY 59373566 + 58819361 59363566 80
-98295	50000	50000
-395910
-
diff --git a/src/test/resources/htsjdk/samtools/metrics/metricsOne.metrics b/src/test/resources/htsjdk/samtools/metrics/metricsOne.metrics
deleted file mode 100644
index 46c724e..0000000
--- a/src/test/resources/htsjdk/samtools/metrics/metricsOne.metrics
+++ /dev/null
@@ -1,13 +0,0 @@
-## htsjdk.samtools.metrics.StringHeader
-# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics    MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPT [...]
-## htsjdk.samtools.metrics.StringHeader
-# Started on: Mon Aug 24 13:31:51 EDT 2015
-
-## METRICS CLASS	htsjdk.samtools.metrics.MetricsFileTest$TestMetric
-STRING_PROP	DATE_PROP	SHORT_PROP	INTEGER_PROP	LONG_PROP	FLOAT_PROP	DOUBLE_PROP	ENUM_PROP	BOOLEAN_PROP	CHARACTER_PROP	SHORT_PRIMITIVE	INT_PRIMITIVE	LONG_PRIMITIVE	FLOAT_PRIMITIVE	DOUBLE_PRIMITIVE	BOOLEAN_PRIMITIVE	CHAR_PRIMITIVE
-Hello World	2008-12-31	123		9223372036854775807	456.789001	0.713487	Two	N	A	123	919834781	9223372034707292160	0.55694	0.229233	Y	B
-
-## HISTOGRAM	java.lang.Integer
-clipped_bases	read_count
-6	1
-7	1
diff --git a/src/test/resources/htsjdk/samtools/metrics/metricsOneCopy.metrics b/src/test/resources/htsjdk/samtools/metrics/metricsOneCopy.metrics
deleted file mode 100644
index 46c724e..0000000
--- a/src/test/resources/htsjdk/samtools/metrics/metricsOneCopy.metrics
+++ /dev/null
@@ -1,13 +0,0 @@
-## htsjdk.samtools.metrics.StringHeader
-# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics    MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPT [...]
-## htsjdk.samtools.metrics.StringHeader
-# Started on: Mon Aug 24 13:31:51 EDT 2015
-
-## METRICS CLASS	htsjdk.samtools.metrics.MetricsFileTest$TestMetric
-STRING_PROP	DATE_PROP	SHORT_PROP	INTEGER_PROP	LONG_PROP	FLOAT_PROP	DOUBLE_PROP	ENUM_PROP	BOOLEAN_PROP	CHARACTER_PROP	SHORT_PRIMITIVE	INT_PRIMITIVE	LONG_PRIMITIVE	FLOAT_PRIMITIVE	DOUBLE_PRIMITIVE	BOOLEAN_PRIMITIVE	CHAR_PRIMITIVE
-Hello World	2008-12-31	123		9223372036854775807	456.789001	0.713487	Two	N	A	123	919834781	9223372034707292160	0.55694	0.229233	Y	B
-
-## HISTOGRAM	java.lang.Integer
-clipped_bases	read_count
-6	1
-7	1
diff --git a/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics b/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics
deleted file mode 100644
index 3e6f088..0000000
--- a/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics
+++ /dev/null
@@ -1,14 +0,0 @@
-## htsjdk.samtools.metrics.StringHeader
-# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics    MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPT [...]
-## htsjdk.samtools.metrics.StringHeader
-# Started on: Mon Aug 24 13:31:51 EDT 2015
-
-## METRICS CLASS	htsjdk.samtools.metrics.MetricsFileTest$TestMetric
-STRING_PROP	DATE_PROP	SHORT_PROP	INTEGER_PROP	LONG_PROP	FLOAT_PROP	DOUBLE_PROP	ENUM_PROP	BOOLEAN_PROP	CHARACTER_PROP	SHORT_PRIMITIVE	INT_PRIMITIVE	LONG_PRIMITIVE	FLOAT_PRIMITIVE	DOUBLE_PRIMITIVE	BOOLEAN_PRIMITIVE	CHAR_PRIMITIVE
-Hello World	2008-12-31	123		9223372036854775807	456.789001	0.713487	Two	N	A	123	919834781	9223372034707292160	0.55694	0.229233	Y	B
-
-## HISTOGRAM	java.lang.Integer
-clipped_bases	read_count
-6	1
-7	1
-8	1
diff --git a/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics b/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics
deleted file mode 100644
index a4d23d8..0000000
--- a/src/test/resources/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics
+++ /dev/null
@@ -1,13 +0,0 @@
-## htsjdk.samtools.metrics.StringHeader
-# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics    MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPT [...]
-## htsjdk.samtools.metrics.StringHeader
-# Started on: Mon Aug 24 13:31:51 EDT 2015
-
-## METRICS CLASS	htsjdk.samtools.metrics.MetricsFileTest$TestMetric
-STRING_PROP	DATE_PROP	SHORT_PROP	INTEGER_PROP	LONG_PROP	FLOAT_PROP	DOUBLE_PROP	ENUM_PROP	BOOLEAN_PROP	CHARACTER_PROP	SHORT_PRIMITIVE	INT_PRIMITIVE	LONG_PRIMITIVE	FLOAT_PRIMITIVE	DOUBLE_PRIMITIVE	BOOLEAN_PRIMITIVE	CHAR_PRIMITIVE
-Hello World	2008-12-31	122		9223372036854775807	456.789001	0.713487	Two	N	A	123	919834781	9223372034707292160	0.55694	0.229233	Y	B
-
-## HISTOGRAM	java.lang.Integer
-clipped_bases	read_count
-6	1
-7	1
diff --git a/src/test/resources/htsjdk/samtools/queryname_sorted.sam b/src/test/resources/htsjdk/samtools/queryname_sorted.sam
deleted file mode 100755
index 068e7bc..0000000
--- a/src/test/resources/htsjdk/samtools/queryname_sorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at RG	ID:0	SM:Hi,Mom!
-A	73	chr2	1	255	10M	*	0	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-A	133	*	0	0	*	chr2	1	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	99	chr1	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	147	chr1	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	99	chr2	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	147	chr2	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	99	chr3	1	255	10M	=	25	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	147	chr3	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	99	chr1	2	255	10M	=	15	30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	147	chr1	15	255	10M	=	2	-30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/readWithBadRname.sam b/src/test/resources/htsjdk/samtools/readWithBadRname.sam
deleted file mode 100644
index 71bafb9..0000000
--- a/src/test/resources/htsjdk/samtools/readWithBadRname.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr21 afterspace	AS:HG18	LN:62435964
- at RG	ID:L1	PU:SC_1_10	LB:SC_1	SM:NA12891	PL:ILLUMINA
- at RG	ID:L2	PU:SC_2_12	LB:SC_2	SM:NA12891	PL:ILLUMINA
-read_28833_29006_6945	99	=	28833	20	10M1D25M	=	28993	195	AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG	<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<	MF:i:130	Nm:i:1	H0:i:0	H1:i:0	RG:Z:L1
-read_28701_28881_323b	147	chr21 afterspace	28834	30	35M	=	28701	-168	ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA	<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<	MF:i:18	Nm:i:0	H0:i:1	H1:i:0	RG:Z:L2
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.fasta.fai b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.fasta.fai
deleted file mode 100644
index aa00476..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.fasta.fai
+++ /dev/null
@@ -1,45 +0,0 @@
-chrM	16571	6	50	51
-chr1	247249719	16915	50	51
-chr2	242951149	252211635	50	51
-chr3	199501827	500021813	50	51
-chr4	191273063	703513683	50	51
-chr5	180857866	898612214	50	51
-chr6	170899992	1083087244	50	51
-chr7	158821424	1257405242	50	51
-chr8	146274826	1419403101	50	51
-chr9	140273252	1568603430	50	51
-chr10	135374737	1711682155	50	51
-chr11	134452384	1849764394	50	51
-chr12	132349534	1986905833	50	51
-chr13	114142980	2121902365	50	51
-chr14	106368585	2238328212	50	51
-chr15	100338915	2346824176	50	51
-chr16	88827254	2449169877	50	51
-chr17	78774742	2539773684	50	51
-chr18	76117153	2620123928	50	51
-chr19	63811651	2697763432	50	51
-chr20	62435964	2762851324	50	51
-chr21	46944323	2826536015	50	51
-chr22	49691432	2874419232	50	51
-chrX	154913754	2925104499	50	51
-chrY	57772954	3083116535	50	51
-chr1_random	1663265	3142044962	50	51
-chr2_random	185571	3143741506	50	51
-chr3_random	749256	3143930802	50	51
-chr4_random	842648	3144695057	50	51
-chr5_random	143687	3145554571	50	51
-chr6_random	1875562	3145701145	50	51
-chr7_random	549659	3147614232	50	51
-chr8_random	943810	3148174898	50	51
-chr9_random	1146434	3149137598	50	51
-chr10_random	113275	3150306975	50	51
-chr11_random	215294	3150422530	50	51
-chr13_random	186858	3150642144	50	51
-chr15_random	784346	3150832754	50	51
-chr16_random	105485	3151632801	50	51
-chr17_random	2617613	3151740410	50	51
-chr18_random	4262	3154410390	50	51
-chr19_random	301858	3154414752	50	51
-chr21_random	1679693	3154722662	50	51
-chr22_random	257318	3156435963	50	51
-chrX_random	1719168	3156698441	50	51
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.dict b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.dict
deleted file mode 100644
index 8dd3e5b..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:chrM	LN:16571	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb
- at SQ	SN:chr20	LN:1000000	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:b4eac854d70893986ac578c53c2324f1
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta.fai b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta.fai
deleted file mode 100644
index 04a438b..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chrM	16571	6	60	61
-chr20	1000000	16861	60	61
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai
deleted file mode 100644
index 04a438b..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chrM	16571	6	60	61
-chr20	1000000	16861	60	61
diff --git a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta b/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/src/test/resources/htsjdk/samtools/reference/Homo_sapiens_assembly18.trimmed.noindex.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.dict b/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.dict
deleted file mode 100644
index 8690a8d..0000000
--- a/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.5	SO:unsorted
- at SQ	SN:chr1	LN:8	M5:cc0af3a4fedb18378b4b57b98068e69f	UR:file:/Users/alecw/Documents/work/Picard/Picard-public/htsjdk/testdata/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta
- at SQ	SN:chr2	LN:8	M5:eaa45adaaf6d104af176897fc5d4b179	UR:file:/Users/alecw/Documents/work/Picard/Picard-public/htsjdk/testdata/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta
diff --git a/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta b/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta
deleted file mode 100644
index b3ab72d..0000000
--- a/src/test/resources/htsjdk/samtools/reference/reference_with_trailing_whitespace.fasta
+++ /dev/null
@@ -1,4 +0,0 @@
->chr1
-ACGTACGT 
->chr2
-TCGATCGA 
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/samtools/reference/testing.fai b/src/test/resources/htsjdk/samtools/reference/testing.fai
deleted file mode 100644
index 65b7c02..0000000
--- a/src/test/resources/htsjdk/samtools/reference/testing.fai
+++ /dev/null
@@ -1,7 +0,0 @@
-chrM	16571	6	50	51
-chr1;boat	247249719	16915	50	51
-chr2:money	242951149	252211635	50	51
-chr3::;	199501827	500021813	50	51
-;;;;;;;;	123	234	456	789
-file:gi|17981852|ref|NC_001807.4|	16571	2911876801	70	71
-
diff --git a/src/test/resources/htsjdk/samtools/roundtrip.sam b/src/test/resources/htsjdk/samtools/roundtrip.sam
deleted file mode 100644
index d65463a..0000000
--- a/src/test/resources/htsjdk/samtools/roundtrip.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD	VN:1.5	SO:unsorted
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at RG	ID:0	SM:Hi,Mom!
- at RG	ID:rg1	PL:ILLUMINA	SM:sm1
-A	73	chr2	1	255	10M	*	0	0	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-A	133	*	0	0	*	chr2	1	0	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-B	99	chr1	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-B	147	chr1	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-C	99	chr2	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-C	147	chr2	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-D	99	chr3	1	255	10M	=	25	35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-D	147	chr3	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-E	99	chr1	2	255	10M	=	15	30	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
-E	147	chr1	15	255	10M	=	2	-30	CAACAGAAGC	)'.*.+2,))	RG:Z:rg1
diff --git a/src/test/resources/htsjdk/samtools/samFilter01.js b/src/test/resources/htsjdk/samtools/samFilter01.js
deleted file mode 100644
index 3fe7e00..0000000
--- a/src/test/resources/htsjdk/samtools/samFilter01.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/** answer to https://www.biostars.org/p/77802/#77966 */
-(record.referenceIndex==record.mateReferenceIndex && record.referenceIndex>=0 && record.readNegativeStrandFlag!=record.mateNegativeStrandFlag &&  ((record.mateNegativeStrandFlag && record.alignmentStart < record.mateAlignmentStart ) || (record.readNegativeStrandFlag && record.mateAlignmentStart < record.alignmentStart ) ))
diff --git a/src/test/resources/htsjdk/samtools/samFilter02.js b/src/test/resources/htsjdk/samtools/samFilter02.js
deleted file mode 100644
index 046e7ec..0000000
--- a/src/test/resources/htsjdk/samtools/samFilter02.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/** accept record if second base of DNA is a A */
-function accept(r)
-	{
-	/* using substring instead of charAt because http://developer.actuate.com/community/forum/index.php?/topic/25434-javascript-stringcharati-wont-return-a-character/ */
-	return r.getReadString().length()>2 &&
-		r.getReadString().substring(1,2)=="A";
-	}
-
-accept(record);
diff --git a/src/test/resources/htsjdk/samtools/seekablestream/megabyteZeros.dat b/src/test/resources/htsjdk/samtools/seekablestream/megabyteZeros.dat
deleted file mode 100755
index 7c2624a..0000000
Binary files a/src/test/resources/htsjdk/samtools/seekablestream/megabyteZeros.dat and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/seekablestream/seekTest.txt b/src/test/resources/htsjdk/samtools/seekablestream/seekTest.txt
deleted file mode 100644
index 194e3be..0000000
--- a/src/test/resources/htsjdk/samtools/seekablestream/seekTest.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-aaaaaaaaa
-bbbbbbbbb
-ccccccccc
-ddddddddd
-eeeeeeeee
diff --git a/src/test/resources/htsjdk/samtools/sequenceWithSpace.bam b/src/test/resources/htsjdk/samtools/sequenceWithSpace.bam
deleted file mode 100755
index 74da758..0000000
Binary files a/src/test/resources/htsjdk/samtools/sequenceWithSpace.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/sequenceWithSpace.sam b/src/test/resources/htsjdk/samtools/sequenceWithSpace.sam
deleted file mode 100755
index 766bc67..0000000
--- a/src/test/resources/htsjdk/samtools/sequenceWithSpace.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD	VN:1.0	SO:coordinate
- at SQ	SN:chr21 afterspace	AS:HG18	LN:62435964
- at RG	ID:L1	PU:SC_1_10	LB:SC_1	SM:NA12891	PL:ILLUMINA
- at RG	ID:L2	PU:SC_2_12	LB:SC_2	SM:NA12891	PL:ILLUMINA
-read_28833_29006_6945	99	chr21 afterspace	28833	20	10M1D25M	=	28993	195	AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG	<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<	MF:i:130	Nm:i:1	H0:i:0	H1:i:0	RG:Z:L1
-read_28701_28881_323b	147	chr21 afterspace	28834	30	35M	=	28701	-168	ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA	<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<	MF:i:18	Nm:i:0	H0:i:1	H1:i:0	RG:Z:L2
diff --git a/src/test/resources/htsjdk/samtools/serialization_test.bam b/src/test/resources/htsjdk/samtools/serialization_test.bam
deleted file mode 100644
index 3198626..0000000
Binary files a/src/test/resources/htsjdk/samtools/serialization_test.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/serialization_test.bam.bai b/src/test/resources/htsjdk/samtools/serialization_test.bam.bai
deleted file mode 100644
index a20e0b8..0000000
Binary files a/src/test/resources/htsjdk/samtools/serialization_test.bam.bai and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/serialization_test.sam b/src/test/resources/htsjdk/samtools/serialization_test.sam
deleted file mode 100644
index 337bb9a..0000000
--- a/src/test/resources/htsjdk/samtools/serialization_test.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD	VN:1.5	SO:coordinate
- at SQ	SN:1	LN:16000
- at SQ	SN:2	LN:16000
- at SQ	SN:3	LN:16000
- at SQ	SN:4	LN:16000
- at RG	ID:0	SM:FOO	PL:ILLUMINA
- at PG	ID:1	VN:2.0	PN:BAR
-a	99	1	200	0	76M	=	255	-130	ACCCTAACCCTAACCCTAACCCTAACCATAACCCTAAGACTAACCCTAAACCTAACCCTCATAATCGAAATACAAC	BBBBC at C?AABCBB<63>=B@>+B9-9+)2B8,+ at 327B5A>90((>-+''3?(/'''A)(''19('7.,**%)3:	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/sra/test_archive.sra b/src/test/resources/htsjdk/samtools/sra/test_archive.sra
deleted file mode 100644
index a9b6e70..0000000
Binary files a/src/test/resources/htsjdk/samtools/sra/test_archive.sra and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/uncompressed.sam b/src/test/resources/htsjdk/samtools/uncompressed.sam
deleted file mode 100644
index e3fe151..0000000
--- a/src/test/resources/htsjdk/samtools/uncompressed.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at RG	ID:0	SM:Hi,Mom!
-A	73	chr2	1	255	10M	*	0	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-A	133	*	0	0	*	chr2	1	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	99	chr1	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	147	chr1	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	99	chr2	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	147	chr2	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	99	chr3	1	255	10M	=	25	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	147	chr3	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	99	chr1	2	255	10M	=	15	30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	147	chr1	15	255	10M	=	2	-30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/unsorted.sam b/src/test/resources/htsjdk/samtools/unsorted.sam
deleted file mode 100755
index e3fe151..0000000
--- a/src/test/resources/htsjdk/samtools/unsorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:chr1	LN:101
- at SQ	SN:chr2	LN:101
- at SQ	SN:chr3	LN:101
- at RG	ID:0	SM:Hi,Mom!
-A	73	chr2	1	255	10M	*	0	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-A	133	*	0	0	*	chr2	1	0	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	99	chr1	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-B	147	chr1	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	99	chr2	1	255	10M	=	26	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-C	147	chr2	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	99	chr3	1	255	10M	=	25	35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-D	147	chr3	26	255	10M	=	1	-35	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	99	chr1	2	255	10M	=	15	30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
-E	147	chr1	15	255	10M	=	2	-30	CAACAGAAGC	)'.*.+2,))	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/5k-30BB2AAXX.3.aligned.sam.fastq b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/5k-30BB2AAXX.3.aligned.sam.fastq
deleted file mode 100644
index 5f17cbb..0000000
--- a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/5k-30BB2AAXX.3.aligned.sam.fastq
+++ /dev/null
@@ -1,19808 +0,0 @@
- at 30BB2AAXX080903:3:3:1535:1429#0
-ATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTTTGGGGNCGACNCN
-+
-677777888888888888838888777765554431221000/.,.,-,,+,+***))*)(((((''$"#""$"#"
- at 30BB2AAXX080903:3:46:1133:292#0
-ATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTTTGGGCTTCATCAC
-+
-67777788/88888888888888877776555443222100//.,---,,+++***)))))(()(('$$"#"##"#
- at 30BB2AAXX080903:3:60:396:738#0
-AGGTCTATCACCCTATTAACCACTCACGGGGGCTCTCCATGCATTTGGTATTTTCGTTTGGGGGGTGTGCANCTNN
-+
-677777888888888888888888777765'5443222100//..---,-+++*****))))()'(&&&$""##""
- at 30BB2AAXX080903:3:56:234:1484#0
-CACTCACGGGAGCTCTCCATGCATTTGGTATTTTCGTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCATGT
-+
-677777888888888888888888777764554432/2100//..,-+,,+++(*()()('(()%(&%"#$%$#$#
- at 30BB2AAXX080903:3:45:1034:790#0
-TCACGGGAGCTCTCCATGCATTTGGTATTTTCGTTTGGGGGGGGGGCACGCGATAAGATCGGAAGAGCGGTGCCTC
-+
-6777778888888888888888887.776551443222100/&.%--,,,-+***))))())(((('$%"""#$"#
- at 30BB2AAXX080903:3:54:503:1305#0
-ACGGGAGCTCTCCATGAATTTGGTATTTTCGTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGATGTGTCTNC
-+
-6777778888882888+88888887777655544322210.//.-.--,,+***)&))))*(((((#"""&&$$""
- at 30BB2AAXX080903:3:59:186:1839#0
-CCGGCTCCAGCGTCTCGCAATGCTATCGAGGGCACACCCCCCAAACGAAAATACAAAATGCATGGAGACCACCNNC
-+
-677777888888888884/888487)77$57534+2,+,0&/.*-,-(+,*)+*%)()))#((((%'&"$"#"""#
- at 30BB2AAXX080903:3:51:735:897#0
-TGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAATACCAAATGCATGGGACACTC
-+
-67777788888888888888888877773555442222100//..--,,,+++++*)*))())((('$$""#"###
- at 30BB2AAXX080903:3:3:724:724#0
-GGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAATACCAAATGCNCTCANTG
-+
-6777778888888888888888887747655540322,100./--+--,)+*)*))))))'''((''$"#"$#""$
- at 30BB2AAXX080903:3:39:1558:516#0
-TCTCCATGCATTTGGTATTTTCGTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCGC
-+
-67777788888888888888888877776555443222100//..-.--,+,++***)*)))(((('"$#$#"#"#
- at 30BB2AAXX080903:3:38:1200:1023#0
-AGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAATACCAAATCCATGGACG
-+
-67777788888888888888888877776555443222100///.--,,,)+++*****)))((((%"$%&$#"#"
- at 30BB2AAXX080903:3:41:523:1441#0
-AGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAATACCAAATGCNCNGACA
-+
-6777578888888888888888887777656554321220//..----,,++*)+*))())('((('$%"#"%##"
- at 30BB2AAXX080903:3:53:366:2032#0
-ATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAAAGATCGGGTGACAGN
-+
-6777778888888888888888887777655544321200./.-,.-,,++++)*(*))(((((''&$"#""###"
- at 30BB2AAXX080903:3:51:505:1972#0
-CCATGCATTTGGTATTTTCGTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCTCACTCGC
-+
-67777788888888888888888877776555443520120//-.---+,,++*****)()(&((''$"$"#"#""
- at 30BB2AAXX080903:3:57:413:1896#0
-GACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCAGACCCCCAGATCGGAAGAGCGGCCGCTGA
-+
-6233-78.308882888+83'.8,7//525)+111)--+(,-.&-+*&&&)(('('##(''#&'#%&%#$#"#"""
- at 30BB2AAXX080903:3:42:1614:548#0
-TGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCACACGAAAAAACCACACG
-+
-677777888888'88888888888777765404432102/1-.--.)++,*(''*)*)&#(((''''"$%&%%$"#
- at 30BB2AAXX080903:3:59:609:710#0
-TGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAAAATCGCNACGT
-+
-67777788888888888888888877773555443212100//..-,-,,++++****(')))((''""%%"###"
- at 30BB2AAXX080903:3:3:1192:86#0
-ACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAAACGAACNCAGCNAN
-+
-67777788888888.88880888857771553483010/0.//.-.*,,-&+))#)((&'('''(#'$"$$"#"""
- at 30BB2AAXX080903:3:37:77:1412#0
-ATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGTGCACACCCCCCAGATCACCCGCACN
-+
-67777788888888888888888877776555443222000/...---+,,++***)())()((&('"$#$"###"
- at 30BB2AAXX080903:3:34:378:888#0
-TTTCGTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGNTCATGCNN
-+
-67777788888888888888888877776555443222000//..-+,-,++**&*))())(&('''""%#""#""
- at 30BB2AAXX080903:3:33:1309:1759#0
-GTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGGACCCTATAGATCGGAAGANGTACTCNN
-+
-6777778888888888888888887777655541221110+/+.,.&+&&)**)'(()'##'(#''#""##$""""
- at 30BB2AAXX080903:3:52:949:1056#0
-GTTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGNTTCTCG
-+
-67777788888888888888888877776555443222100//..---++,+++*+))))())((('"$""##"$#
- at 30BB2AAXX080903:3:4:1176:963#0
-TTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGAGATCGGAANACCANTN
-+
-67777788888888888888888357771515503.11+./%'-,'-,,+)*#)))##(#'#'#('#$"&&%%"""
- at 30BB2AAXX080903:3:56:536:318#0
-TTTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGAGATCGGACTGCAG
-+
-67777788888888888888888877773555443221100/...+.,+,,+****))))()')'&&"%"$###""
- at 30BB2AAXX080903:3:43:1770:1227#0
-ATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCGCGCAAAGCTATCGCGTGCACATCCCGCGGC
-+
-67777788888888888888888837776565423212100//,.',(,++$**%(#*)))%('(%%&%"&"&%#"
- at 30BB2AAXX080903:3:4:466:1151#0
-TGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGGCNCTTGNTN
-+
-6777778888888888888886887777353543103/0-.//*-,+(),,()*'%)(&)''(%'&#&"%#"""""
- at 30BB2AAXX080903:3:59:1044:433#0
-GGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGGCAGCNA
-+
-6777778888888888888888887777655544122210.//..---,,+,+***)))*))(((('&$#$$#$"#
- at 30BB2AAXX080903:3:4:903:1139#0
-GGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTCNCTCTNAN
-+
-67777788888888888,8888883777652(4130,20*0/.-,,,&,,*,+')*#()&((&'#''$"$&%""""
- at 30BB2AAXX080903:3:37:1075:826#0
-AGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGCGTTGCN
-+
-67777788888888888888888877776555443.22100///-.-,,,+++*+*))())((((''$%#"%%##"
- at 30BB2AAXX080903:3:48:267:1183#0
-AGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATCGCGCGTGAGA
-+
-67777788888888888888888877776555443122100///.---,,+++++*)))()((((''$$""""%"$
- at 30BB2AAXX080903:3:1:1520:633#0
-GAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATAGATCGGNACNACAA
-+
-67777788888888888888888577776555443212///./.---+,,*+*'*)*))((((((%'$""#"$$#"
- at 30BB2AAXX080903:3:38:917:1353#0
-GAGGCAGGAATCAAAGACAGATAATGCGACAGAGGGGGCGCCGGCTCCAGCGTCTCGCAATGCTCTCTCCCCACAC
-+
-62777788888888/88838888%7777%/524130221%,+/-,---,(+*#(**'(%(#')##%#"#"#""$#$
- at 30BB2AAXX080903:3:48:1620:1412#0
-TGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTAGCGCGTTCTC
-+
-6777778888888888888888887777655544322-101....--,,,,++***))('(&('''%""$#"##"#
- at 30BB2AAXX080903:3:4:792:911#0
-TGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCTATANATCANAN
-+
-67777788888888888888888877776555443222120//...--,,+*+**))*)()))((''"""#$#"#"
- at 30BB2AAXX080903:3:35:769:1076#0
-GATGAGGCAGGAATCAAAGAAAGATACTGCGAAATAGGGAGCCCCAGCTCCACCGTCTCGCAAAGCCNCAGTGATN
-+
-67777788888388888881+4867*776555%112221./.+&/.-&$,*'#&*&()))(%##('&"""""#"$"
- at 30BB2AAXX080903:3:36:1397:1463#0
-GGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGCACGACACGN
-+
-6777778888888888888888887777655544322210//0..---+,+,+****)*)((((&'#$$"#%#$""
- at 30BB2AAXX080903:3:39:15:1916#0
-GGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAATGACGCAGCTCT
-+
-67777788/888888888888608777&657544220111//'.+-,-,,+++)'*)&)(('('&%#$"%""$##"
- at 30BB2AAXX080903:3:60:1286:1697#0
-GGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCGGCAGCGTCTAGCAATGGTCACATANN
-+
-677777888888888880888188777765554&022*1*,/&(*(-,,(&)%)&*&'##&'('(&#$$%%&""""
- at 30BB2AAXX080903:3:48:1573:1467#0
-CGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCACCGTT
-+
-677777888888888888881888777765554402221000..+*.++,++**&**))&')&''%#$"$""#"##
- at 30BB2AAXX080903:3:50:307:1304#0
-GCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGGCGCAGTATCTGTCTTTGATTCCTGCCCCCTCACAC
-+
-6777778888888888888888887773655532321210&./.---&,+++*)*)**')''('('%"$$#%"$"#
- at 30BB2AAXX080903:3:55:781:193#0
-AATAGGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCCAGCGTCTCGCAACTCTGTGC
-+
-67777788888888888888888877776555443222110//.,---,,,,+*****))()(((('$"##"##"#
- at 30BB2AAXX080903:3:45:1521:794#0
-CGAGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATCTATCGCAC
-+
-6777778888888888888888887777635554-2221000/.---,,,,++**)*)())((((''$&#""$""%
- at 30BB2AAXX080903:3:50:1663:1087#0
-GGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTCACGGCACAC
-+
-67777788888888888888888877776555443221100//.--,-,-++++**))(())()(''$$""#####
- at 30BB2AAXX080903:3:3:760:1493#0
-AGACGCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTANCGCCNTC
-+
-677777888888888888888888777765355430220/00/.-,,-,,+++**&))*)')(((('""$%$#"#%
- at 30BB2AAXX080903:3:44:343:675#0
-CGTAGGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTGCGACATAGGGTGCTCCGGCTAGATCG
-+
-67777788888888888888888877776555443222100//..---,,+++****))))(()((&$'&"%"""%
- at 30BB2AAXX080903:3:44:1708:1325#0
-GCTGGAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCTCCTCCGT
-+
-6777778888888888888888087777+55544352210///+/.-,,,,*+**)()))))(('(''$#%&#"#$
- at 30BB2AAXX080903:3:57:317:1066#0
-ATATTGAACGTAGGTGCGATAAATAATAGGATGAGGCAGGAATAAAAGACAGATACTGCGACATAGGGTNCTCGAC
-+
-6777778888888818888888887777655344321210,/.$,----++++%*)**()(((&((&'""""##"#
- at 30BB2AAXX080903:3:44:1187:1203#0
-CGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCACCTACGTTCAATATT
-+
-67777788888888888888888877776555443222100//..----,+++***)*))))((('&%&&$$&$$$
- at 30BB2AAXX080903:3:2:1371:779#0
-GGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATCCTATTATTTATCGCACCTACGTTNCACACAC
-+
-67777788888888888883888877776555443202100....--,,,,,+***()))'((((''&"%&#$##$
- at 30BB2AAXX080903:3:4:1100:1716#0
-TTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTCNCACCNCN
-+
-67777788888888888888&8824777945344322010,//,.---,,,++****)))))((((#$"%$#$"#"
- at 30BB2AAXX080903:3:55:930:977#0
-TGTTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGATGAGGCAGGAATCAAAGACAGATACTGCGATCA
-+
-67777788888888888888888877776555443222100//-..--,-++**))***)*((((''$&"#"#"#"
- at 30BB2AAXX080903:3:50:302:933#0
-ATTAACACACTTTAGTAAGTATGTTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGATGAGTCGCCGTG
-+
-67777788888888888888888877776555443222100//.----,,+*+*****))))))((($"$"#""""
- at 30BB2AAXX080903:3:57:1469:1852#0
-TTAATTAACACACTTTAGTAAGTATGTTCGCCTGTAATATTGAACGTAGGTGCGATAAATAATAGGAACAGATCAC
-+
-67777788888888888888888877776555443222100/...---,,,++***)*))*(((('('$%####"$
- at 30BB2AAXX080903:3:43:934:69#0
-ATCCTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACTTACTAAAGTGTGTTAATTAATTAATGAG
-+
-67777788888888888888888877776555443222100/./.--,,,+,+***))))()()(''''&#&$%$$
- at 30BB2AAXX080903:3:47:1027:908#0
-TGTCCTACAAGCATTAATTAATTAACACACTTTAGTAAGTATGTTCGCCTGTAATATTGAACGTAGGCGCGTGCAT
-+
-67777788888888888888888877776555443222100//..----,+++***)*)()((((('"###""$##
- at 30BB2AAXX080903:3:55:284:788#0
-TTATCGCACCTACGTTCAATATTACAGGCGAACATACTTACTAAAGTGTGTTAATTAATTAATGCTTAGCTTGACT
-+
-67777788888888888888888877776525443210111/.-,-,-+,+,++****)()(((&''"$#&%$""%
- at 30BB2AAXX080903:3:59:869:664#0
-CCTACGTTCAATATTACAGGCGAACATACTTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATANTCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))(((('&$"%#%##$
- at 30BB2AAXX080903:3:57:144:1832#0
-TACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATAACAATTGAATGTCTGCACAGCCGCTTCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((('('&%&##"###
- at 30BB2AAXX080903:3:59:1087:334#0
-GTTATGATGTCTGTGTGGAAAGCGGCTGGGCAGACATTCAAATGTTATTATTATGTCCTACAAACATTGTAAACNC
-+
-6777778888888888888888887777+5$,4/20'-.&/#..,.+-,,+,)**(%(#''('#'%#'"""""$"#
- at 30BB2AAXX080903:3:56:151:634#0
-ATAATAATAACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACACGACTCGC
-+
-67777788888888888888888878776555443222100/,.--,--,+++**))))))))((('""#&%"#%$
- at 30BB2AAXX080903:3:4:1365:1721#0
-TGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCAAACCCCCCCTCCCCCCCNGTCCNAN
-+
-67777788888888888888888877678355433220110//,---,,++,%**+)*))#)(((('$""#"#"""
- at 30BB2AAXX080903:3:50:1218:1566#0
-TAGGGTTCTTTGTTTTTGGGGTTTGGCGGAGATGTGTATAAGCGCTGTGGCAAGAAGCGGGGGGGGGTGCACGCCA
-+
-677777888888188888888&8877776.5014/2'%1.0/'.,,.++,+$'*')(#))((((&('""%$$####
- at 30BB2AAXX080903:3:53:407:1013#0
-TTAGGCTGGTGTTAGGGTTCTTTGTTTTTGGGGTTTGGCGGAGATGTGTTTAAGTGCTGTGGACAGAAGAGGCACG
-+
-67777/888188+8888888888877776555413222*00./.--(-+,+*++**))))))%(('%$#"$""$"#
- at 30BB2AAXX080903:3:57:704:1888#0
-TGGTTAGGCTGGTGTTAGGGTTCTTTGTTTTTGGGGTTTGGCGGAGATGTGTTTAAGTGCTGTGGCCAGGTTTCCG
-+
-67777788888888888888888877776555443222100//.,-,-,,+++***)*)))()(((%%%#"""##"
- at 30BB2AAXX080903:3:8:1664:1236#0
-AAAAGATAAAATTTGAAATCTGGTTAGGCTGGTGTTAGGGTTCTTTGTTTTTGGGGTTTGGCGGAGANCACATGNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((''"%"#"""""
- at 30BB2AAXX080903:3:43:1314:714#0
-ACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTTGGCGGTATGCACTAGATCG
-+
-67777788888888888888888877776555443222000//.----,,+++****)))))((((&%&#"%"""$
- at 30BB2AAXX080903:3:52:36:1832#0
-GGGGAAAATAATGTGTTAGTTGGGGGGTGACTGTTAAAAGTGCATACCGCCAAAAGATAAAATTTGAACTCAGTAG
-+
-6777778888888888888888887777655544322010./...--,,,+++*+**)*)))(((('$%"%#%"""
- at 30BB2AAXX080903:3:51:882:161#0
-ATGGGAGTGGGAGGGGAAAATAATGTGTTAGTTGGGGGGTGACTGTTAAAAGTGCATACCGCCAAAAGATCACATG
-+
-677777888888888888888888777765554432221/0//..---,,+++***)*))))(((''$#"###%$"
- at 30BB2AAXX080903:3:55:1045:598#0
-TTTGGCGGTATGCACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTACTC
-+
-67777788188888888888888877776555433222100//...--,,-+++**)*))))(('''%&#####"$
- at 30BB2AAXX080903:3:33:507:1544#0
-GATTAGTAGTATGGGAGTGGGAGGGGAAAATAATGTGTTAGTTGGGGGGTGACTGTTAAAAGTGCATNTCGTCCNN
-+
-67777788888888888888888877776555843022100//..---,,++****))))))'((('""##$$$""
- at 30BB2AAXX080903:3:59:961:985#0
-TATGCACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTAATCTCAGTCAA
-+
-67777788888888888888888877776555443222100//-----,,,+****)*))))((((''$&#""###
- at 30BB2AAXX080903:3:50:839:564#0
-GTTGTATTGATGAGATTAGTAGTATGGGAGTGGGAGGGGAAAATAATGTGTTAGTTGGGGGGTGACTGATTACAGT
-+
-67777788888888888888888877776555443222100//.,---+,,++***)))))('('%'%"""##"""
- at 30BB2AAXX080903:3:46:149:683#0
-TTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTAAGATCGGAAGATCGCTGGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((('(&%"%#$#""#
- at 30BB2AAXX080903:3:3:1443:882#0
-GGGGGTTGTATTGATGAGATTAGTAGTATGGGAGTGGGAGGGGAAAATAATGTGTTAGTTGGGGGGTCNCTGTNCA
-+
-67777788888888884888188677176555.4+222000./.-,,-++*+*+))))())(('((%""%##""##
- at 30BB2AAXX080903:3:57:771:103#0
-GGGTGGGGGTTGTATTGATGAGATTAGTAGTATGGGAGTGGGAGGGGAAAATAATGTGTTAGTTAGATCGCGGCAC
-+
-67777788848888888888888877776555443222100/...--++++++****))))((((''""%#""##$
- at 30BB2AAXX080903:3:45:891:253#0
-TGTGTGCTGGGGAGGATGGGGGGGGGTTGTATTGATGAGATTAGTAGTATGGGAGTGGGAGGGGAAACGGCGCACA
-+
-67072788888888888888888877(76.59%42122100//...-+,,+,+%*)*))())((''("""#""$#"
- at 30BB2AAXX080903:3:59:1050:973#0
-GTGTGTGCTGGGTAGGATGGGTGGGGGTTGTATTGATGAGATTAGTAGTATGGGAGTGGGAGGGGAAAATAAGCAC
-+
-6777778888888888888881887771655544312210///..---,,,++***%)))(((((&'&"$###%##
- at 30BB2AAXX080903:3:53:277:2041#0
-ATTATTTTCCCCTCCCGCTCCCATACTACTAATCTCATCAATACAACCCCCACCCATCCAGATCGGAACGGCNCCN
-+
-6777778888888888*888888877776555443222000//..--++,++++**))*))()((('&$"""""""
- at 30BB2AAXX080903:3:46:1516:861#0
-TGTGTGTGTGTGCTGGGTAGGATGGGTGGGGGTTGTATTGATGAGATTAGTAGTATGGGAGTGAGATCGGACGGGC
-+
-67777788888888888888888877776555443222100//..---,,+)+***)))))#()(''$$"##"""#
- at 30BB2AAXX080903:3:48:533:138#0
-CAGCGGTGTGTGTGTGCTGGGTAGGATGGGTGGGGGGTGTATTGATGAGATTAGTAGTATGGGAGGGGGCGCGAGC
-+
-677777888888888888888888777765'54432021*.//.---*,+,+****))))))('(#(""#"#"""#
- at 30BB2AAXX080903:3:1:358:1289#0
-CCTCCCACTCCCATACTACTAATCTCATCAATACAACCCCCACCCATCCTACCCAGCACACACAAGATNACNACAC
-+
-67777788888888888888888877776555443122200//...,--,,++****()))((((('$"#%"$$##
- at 30BB2AAXX080903:3:47:1079:1305#0
-TCCCACTCCCATACTACTAATCTCATCAATACAACCCCCACCCATCCTACCCAGCACACACACACCAGCACGACCA
-+
-67777788888888888888888877776555443222100//..---,,,++*****)))((('('%#"%"###"
- at 30BB2AAXX080903:3:3:851:1747#0
-CTCCCATACTACTAATCTCATCAATACAACCCCCACCCATCCTACCCAGCACACACACACCGCTAGACNCGCANCA
-+
-67777788888888888888888877776555043221121/...--,-,-+**+*))))))(((''""$&&%"##
- at 30BB2AAXX080903:3:60:1051:623#0
-GTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTGCTGGGTAGGATGGGTGGGGGTTGTATTGATGAGATCGTGNN
-+
-67777788488888888888888877776555443222101-/.,.--,++,+**'**))))(((('%"&$%""""
- at 30BB2AAXX080903:3:52:187:114#0
-TTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTGCTGGGTAGGATGGGGGGGCAGAGCGGAAGACCGGCGCG
-+
-67777788888888888888888877770525342212100//+---*-,++)***'#)(#()(#&'$""$$#""#
- at 30BB2AAXX080903:3:2:1270:441#0
-CAATACAACCCCCACCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAACCAACCNGAACACC
-+
-6777778888888888888888887777.3360413000/0.-.,-,,+)***(*&&((((''#'(#&"##"$##"
- at 30BB2AAXX080903:3:50:953:540#0
-TGGGGTTTGGTTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTGCTGGGTAGGATGGGGGGGGGCTGGTGTT
-+
-67777788888888888888888877776555443222100//..---,,+++'**)()))(%('''%$""""""#
- at 30BB2AAXX080903:3:33:1568:449#0
-TTTGGGGTTTGGTTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTGCTGGGTAGGATGGGGGGNCGACCCNN
-+
-67777788888888888888888877776555443222101/+.,---,,+,+**)*))))(((''&"%"####""
- at 30BB2AAXX080903:3:43:1453:1629#0
-CTTTGGGGTTTGGTTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTGCTGGGTAGGATGGGTGGGGGTCTCC
-+
-67777788888888888888888837776555443502000//..-.-,,+)+***%(*)#()((%''%#"#$#$"
- at 30BB2AAXX080903:3:41:1186:644#0
-ACAACCCCCACCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAACCAACCAAACCTCCAANT
-+
-67777788888888888888888877776555443222100//..--,+-+++*++))*)(((((('&%"&&"%""
- at 30BB2AAXX080903:3:50:1591:976#0
-GGGGTGTCTTTGGGGTTTGGTTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGTAGATCGGAAGGCTCTNCAA
-+
-67777788888888888888888877776556443222100//..---+,(+****()))('((&('"%%#""#"#
- at 30BB2AAXX080903:3:39:244:215#0
-ACTGTGGGGGGTGTCTTTGGGGTTTGGGTGGTTCGGGGTATGGGGTTAGCAGCGGTGTGTGTGGGATAGGGACACA
-+
-67774788888088&8888888-8777365554432220/0//..+-,,,,++**()#)()#(%(('$%"#$#$$#
- at 30BB2AAXX080903:3:34:1458:416#0
-CATAAACTGTGGGGGGTGTCTTTGGGGTTTGGTTGGTTCGGGGTATGGGGTTAGCAGCGGGGTGTGGNCTAGACNN
-+
-67777788888888888888888877776555443222100//.----,,+,+***)**)#)#(&(%"%%""#$""
- at 30BB2AAXX080903:3:58:18:1320#0
-ACACCGCTGCTAACCCCATACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTCACTNNT
-+
-677777888888888888888888777795255132210./...-,-,++*+***))(&('(('(''"%""$"""#
- at 30BB2AAXX080903:3:60:1436:1965#0
-TTTGAGGAGGTAAGCTACATAAACTGTGGGGGGTGTCTTTGGGGTTTGGTTGGTTCGGGGTATGGGGACACNAANN
-+
-677777888888888888888888777765554/3('1100//.,---,(,*+**((*))&'((((%$$##"#%""
- at 30BB2AAXX080903:3:48:1341:337#0
-GTATTGCTTTGAGGAGGTAAGCTACATAAACTGTGGGGGGTGTCTTTGGGGTTTGGGTGGTTCGAGATCTGCATGG
-+
-6177778888888888808888887777651343322210)/..,---,,+$+***&*))((((#(%"#"###"""
- at 30BB2AAXX080903:3:36:757:568#0
-AGTGTATTGCTTTGAGGAGGTAAGCTACATAAACTGTGGGGGGTGTCTTTGGGGTTTGGTTGGTTCGCTCTCCTGN
-+
-67777788888888888888888877776555443222100//...,-,,+++***)))()((((('%##&$$#""
- at 30BB2AAXX080903:3:36:758:569#0
-AGTGTATTGCTTTGAGGAGGTAAGCTACCTAAACTGTGGGGTGTGTCTTTGGGTGTTGGTTGGTTCGCTATGACGN
-+
-6777778888888888888*18'877776545243))2100./(.,,-,,+++*#*)*)))(((''#$&#$%###"
- at 30BB2AAXX080903:3:41:976:1436#0
-ACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCAAAGCAATACACTGAAAATGTTTAGACGT
-+
-6777778888888888888888887777655544322210///.---,,-++++***)))))()((&&&%%%#$##
- at 30BB2AAXX080903:3:42:399:173#0
-TGAGCCCGTCTAAACATTTTCAGTGTATTGCTTTGAGGAGGTAAGCTACATAAACTGTGGGGGGGGGCTAGATCGG
-+
-67777788888888888888888877776555443222200//....-,-,*+***)))*))((#'%&&#&$"##"
- at 30BB2AAXX080903:3:41:1791:827#0
-GTGAGCCCGTCTAAACATTTTCAGTGTATTGCTTTGAGGAGGGAAGCTACATAAACTGTGGGGGGTGTCTTTGGCC
-+
-677777888888888888888888777765554432221/0/%..-,-,++,+**))*)))((('&'%%%#$#"#"
- at 30BB2AAXX080903:3:57:550:1680#0
-GGGTGATGTGAGCCCGTCTAAACATTTTCAGTGTATTGCTTTGAGGAGGTAAGCTACATAAACTGTGGTGCGACTC
-+
-677.7788888888888888888877776555443222100//..---,,+,+**+)*))))(((('$&%$"##"#
- at 30BB2AAXX080903:3:42:1112:266#0
-TTTATGGGGTGATGTGAGCCCGTCTAAACATTTTCAGTGTATTGCTTTGAGGAGGTAAGCTACAGATCGGGGNCTA
-+
-67777788888888888888888877776555443222100//..---,,+++**))*)))((('(''$&"%"#""
- at 30BB2AAXX080903:3:51:69:105#0
-GTTTATGTAGCTTACCTCCTCAAAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCACACACCGCTCT
-+
-6770778888888888888888804777555244322+100./.,-,-,+,++***)()(()(('%'%"%""##$"
- at 30BB2AAXX080903:3:40:1472:1490#0
-AGCTTACCTCCTCAACGCAATACACTGCAAATGTTTAGACGTGCTCCCCTCACACACTACACACATAGGCACGTNC
-+
-677077'.8188888+880388(8777&6$/55,02.%2&0//).-*&',*++)*'())))((('(%"&%#$""""
- at 30BB2AAXX080903:3:40:1472:1492#0
-AGCTTACCTCCTCAAAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTCGCANC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*)))((''"&%"$#$""
- at 30BB2AAXX080903:3:47:43:510#0
-CAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGGTCCTAGCCTTATTCATCGC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))()(('"$""#$""#
- at 30BB2AAXX080903:3:38:225:158#0
-ACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGGTCCTAGCCTTTCTACCAGACTNN
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)*))*((((''$$&%"#"""
- at 30BB2AAXX080903:3:2:121:1713#0
-TCACATCACCCCATAAACAAATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATNCAANNTC
-+
-6,7777888888888888888858777765554432.1100//-.---,,+++***)*)))))((('""#&$""""
- at 30BB2AAXX080903:3:60:877:1195#0
-CGGGGATGCTTGCATGTGTAATCTTACTAAGAGCTAATAGAAAGGCTAGGACCAAACCTATTTGTTTACTCCAANN
-+
-67777788888888888888888877776555443222100//..---,,,)+***))()))))((&%$$####""
- at 30BB2AAXX080903:3:55:617:1140#0
-GATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGGGGATGCTTGCATGTGTAATCTTACTAAGAGCAGCTCACG
-+
-677777888888888888888888777765/5443222100//.,--,,,,+)****))))((('('&&$""#""#
- at 30BB2AAXX080903:3:52:1294:1234#0
-ATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGCTCAGAC
-+
-67777788888888888888888877776555443222100//..---,,++****))))(((((('"&#&&$##"
- at 30BB2AAXX080903:3:1:125:1464#0
-TTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTACAGATCGGAANACNCACT
-+
-67777788888888888888888877756555443.21100//...-+,-+,+****)&))()((('&"#""###"
- at 30BB2AAXX080903:3:51:237:543#0
-CTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCCGCTCACGC
-+
-677777888888888888888888777765554112221.0-/.,.,-,,+,++)*)))))()(''&$%%"$$#"#
- at 30BB2AAXX080903:3:48:1771:173#0
-TGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGGGGATGCTTGCATGTGTAATCTCTGACGCA
-+
-67777788888888888888888877776505441220000/..-.--,*+++&)*)()))(&'''%"$"""#"##
- at 30BB2AAXX080903:3:38:1762:688#0
-AGTAAGATTACACATGCAAGCATCCCCGATCCAGTGAGTTCACCCTCAAAAGCACCACGACCAAAAGGACACACNN
-+
-6777778888888888888888887777%45544.2221/0//..--(,-,'()*)()')%%(((''"#""#""""
- at 30BB2AAXX080903:3:59:1285:1050#0
-GTAAGATTACACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGTGCCTCCAA
-+
-67777788888888888888888877734/254832222/0/-+/.-,,,,*+)*))*()(((((''"""#"##$#
- at 30BB2AAXX080903:3:48:1340:68#0
-GATTACACATGCAAGCATCCACGTCCCAGCCAGCCCACCCTCTAAATCACCACGATCAAAAGGGACACTCCGCACC
-+
-67777788888888888888*88&-7716)'54$'.2/1'./.+-."+,,*++&)&(((()(#((&'%"&##$###
- at 30BB2AAXX080903:3:44:827:1049#0
-GCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGGGGATGCTTGCATGTGTAAT
-+
-67777788888888888888888877776555443222101//..---,,++++***))()((((('$$%#&#""#
- at 30BB2AAXX080903:3:47:173:945#0
-TTACACATGCAAGCATCCCCGTTCCAGGGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGGACGAGCCC
-+
-677777888888888888888888777%65521432,2100*/...--,-++*+****)))((((''"#$""$#"#
- at 30BB2AAXX080903:3:55:1179:1581#0
-TACACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCACCCAC
-+
-677777888888888888,88888777765-554122210/./.--,--,+++**))*)))()(''%%&$%#"$#"
- at 30BB2AAXX080903:3:1:372:1628#0
-ACATGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCAGCANCCNCACC
-+
-67777788888888%88-8888807677654544321200./..-,--',+++*)*)*)()((((#''"#""%$$"
- at 30BB2AAXX080903:3:37:246:1497#0
-TGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGGGGATGCTCTGANAN
-+
-677777888888888888888888777765554132201000/..+-,-,,++(+**()())(('''%""$#$"""
- at 30BB2AAXX080903:3:46:366:1610#0
-TGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGAGATCGGCACAGCGG
-+
-67777788888888888888888877776555443022100//..---,-+)++**)*))))((((''$###"$"#
- at 30BB2AAXX080903:3:41:1692:846#0
-TGCAAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCAAGATCGGAGTTGCN
-+
-67777788888888888888888877776555443222100//...-,-,+++***)*))()((('''"""$""""
- at 30BB2AAXX080903:3:38:761:1664#0
-AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACTCAGCCACT
-+
-67777788888888888888888877776555443322/01/..--+-,,+++****())()(('('%$$$$###"
- at 30BB2AAXX080903:3:53:1219:936#0
-AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAACTCACCACGATCAAAAGGGACAAGCATCAAGCAATCTCGGACG
-+
-67777788888888888888888877776555443222100//..--,,,+,++**)))))((((('%%$&&###"
- at 30BB2AAXX080903:3:36:634:304#0
-CATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGNGCATACAN
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))(((((&"###$#"#"
- at 30BB2AAXX080903:3:36:635:305#0
-CATTGCTGCGTGCTTGCTGCTTGTCCCTTTTGATCGTGGTGATTTAGATGGTGAACTCACTGGAACGNTCGCTGTN
-+
-6477778888888888%88888887*77855544322-100./...-,$,+++**+)*())))'('&""$"####"
- at 30BB2AAXX080903:3:55:43:1020#0
-CATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGAACGGGCGCGCCT
-+
-677777888888888888888888777765554432221/0./...-,,,++++*)**)))(((((&"&#"#"##"
- at 30BB2AAXX080903:3:1:1181:617#0
-GCATTGCTGCGTGCGTGATGCTTGTCCCTTTTGATCGCGGTGATTTAGAGGGTGAACTCACTGGAACGNCTNACTC
-+
-6770478888888%)8888883882,7-652.42#.2'10&/.(%,,-+,-+%+*##)'(''()#&%&"$""#$##
- at 30BB2AAXX080903:3:36:817:1175#0
-ATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCACACATCCGCN
-+
-677777888888888888888888777765554432221001/.-----,+,++**)))))))(((%$&%&##"$"
- at 30BB2AAXX080903:3:35:955:880#0
-TGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACNCTACCTCN
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(('(("&%%##"#"
- at 30BB2AAXX080903:3:36:1000:1381#0
-TGAGCTGCATTGCTGCGTGCTTGACGCTTGTCCCTTTTGATCGAGGTGATTTAGAGCGTGAACTTATGAGCGACAN
-+
-677777-888888888888/8888%777/5554(*.+2.0,//#/-,-+,*+**'*')&)))'&#'%""$""#"#"
- at 30BB2AAXX080903:3:51:741:1898#0
-TGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACTGGCACGGT
-+
-67777788888888888888888877776555443222100//..---,,+++***))()()(((('"%"$""$$"
- at 30BB2AAXX080903:3:42:723:1669#0
-TTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCCCTGTGAGG
-+
-6777778888888888888888887777655542312210/-/...--+,+,++**))&)#)#(#'%""$%#%###
- at 30BB2AAXX080903:3:56:239:1775#0
-TTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGTGAACTCACGCGTCGT
-+
-67777788888888888888888877776555423222100./...--+,+,*+**))))'((((('$%$#""#""
- at 30BB2AAXX080903:3:51:671:359#0
-GTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCATCCTCAAT
-+
-67777784888888888888888877776555443222100//..---,,+++***)))))((((''"##$#""#"
- at 30BB2AAXX080903:3:47:183:423#0
-TCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAAGATCGGTAGGTCGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((('($"#$""##"
- at 30BB2AAXX080903:3:55:1023:796#0
-TAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTAGATCGGAAGAGCGTGTCAT
-+
-67777788888888888888888877776555443222100//..---,,,++****)))))((('''$$""###"
- at 30BB2AAXX080903:3:49:602:1841#0
-AGTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTAGATCGNGGTGCAC
-+
-67777788888888888488088877736555441222/00./...-+,,++*****)))((((('%"""""##"#
- at 30BB2AAXX080903:3:43:1468:441#0
-AGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGATTTAGAGGGGGGGT
-+
-677777888888888888888888777765054432321////.-,.*,,,,**)*)))&)&(((&'&$%#"""""
- at 30BB2AAXX080903:3:1:101:1973#0
-CACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTANAANCACA
-+
-67777788888888888888888,7.7765554432220///-.-.,-,-*++*)**())&(()(('%"""""#"#
- at 30BB2AAXX080903:3:41:565:1780#0
-TGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGACTTCGCANG
-+
-677777888888888888888888777765554432201001/.,---,,+++***)*)))))(('&$$%$%#""#
- at 30BB2AAXX080903:3:3:1591:1394#0
-GTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGTGTNTTACNCN
-+
-6777778888888888888888887777655544322200.//...-,-+++*)*)*((%')'((%'""#%#""""
- at 30BB2AAXX080903:3:49:1602:180#0
-GGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTGGGTGCCGCA
-+
-6777778888888888888688887743655544322-1/0./..-,-,,+++**+)()))'('(&(""#"##"#"
- at 30BB2AAXX080903:3:37:580:1209#0
-GGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGCTTTCTCTN
-+
-67774788888888888888888877776555443222100//..--+,,+++***))*)*()((''%$$"$%"#"
- at 30BB2AAXX080903:3:60:1676:228#0
-ATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGACAACACACNN
-+
-67777788888888888888888877776555443222100././---,,+++&**))))'(((((&$%%%%$#""
- at 30BB2AAXX080903:3:56:622:110#0
-TCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCCACAGCCCAAC
-+
-6777778828888888888888887873655154322210,//..---+-++++*()))))(()(''&&#$$%"##
- at 30BB2AAXX080903:3:43:774:1532#0
-GTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTTGATCGTTGCAC
-+
-67777788888888888888888877776555443122120/..--,-,,+++****)(((()(((&'$%#""#"#
- at 30BB2AAXX080903:3:49:1149:1514#0
-GTGGGGGTGTGGCTAGGCTAAGCGGTTTGAGATGCCTTGCTGCGTGCTTGGTGCTTGTAGATTGGGACGTGCGTGC
-+
-6777778(8888888888..88-81777*+5)%4*.$1+1./+.),*+,+%++)**%'&)('#((&&$"##$#"#$
- at 30BB2AAXX080903:3:49:1283:1557#0
-GTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCCGGCTTGATGCTTTTTCCTTTTTTCTTCGGGGC
-+
-6/777788888888838/8$88.86777155"441,212#+0+$%-&#,,%)+)+*&()##''((&#%""#"#""#
- at 30BB2AAXX080903:3:50:591:1879#0
-CGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCGTTTGACCGTGGTC
-+
-671777888888888.8828188877176525443222*////--.-,-,+&****)*%#'('(((%"$#$""""#
- at 30BB2AAXX080903:3:1:1637:1222#0
-ACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTACCCTAGCCACACNCANCGAC
-+
-671077888888888888888&8&7*77655542300000/+...,--+,+**(*)'(((('#((&%&"%"""""#
- at 30BB2AAXX080903:3:50:1746:1971#0
-CCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTTTATGACAGGC
-+
-6777778888888888-888888877776555441222100/...---,,++++**(*)))((((('""#$#""##
- at 30BB2AAXX080903:3:52:1572:139#0
-CACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCAACACCTCCACGAAC
-+
-67777788888888888888888877276555443222100//..---,,*++****))(#((('(%"&&&%##$"
- at 30BB2AAXX080903:3:38:707:1344#0
-TCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCCCTAGGTCGGACA
-+
-67777788888888888888888877776555443022000//-.---+,,++***)***))(('''""%%#""$#
- at 30BB2AAXX080903:3:36:94:1875#0
-GTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGTGCTTGATGCTTGTCTCTGTCTANN
-+
-67777788888888888888888877776555443222100/...---,,+,+***))()&))(('#%#"%$"$""
- at 30BB2AAXX080903:3:42:1586:1352#0
-TGTTTCCCGTGGGGGTGCGGCTAGGCTAAGCGTTTTGAGCTGCGTTGCTGCGTGCTTGCTGCTTGTCCCGTCTGCT
-+
-67777788888888888/888.887377.5.53432.'1&./,)-++&++&+**&(*)%)'#((('#"&%%#%"$%
- at 30BB2AAXX080903:3:52:1010:1566#0
-AAGGGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCCACACCCCCAGATCGGTGGTGCGC
-+
-67777788888888888888888877776/55443222100//..--,,,++)+****)))((((('&"##"%"##
- at 30BB2AAXX080903:3:43:144:721#0
-AGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGAGATCGGGCACG
-+
-67777788888888888888888877776556443222100./.,-,-,,+,+'**(())(('((''&$""#""""
- at 30BB2AAXX080903:3:59:1207:1350#0
-AGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGGATTGAGATTGGANAGGCAA
-+
-67777788888888888888888877776555443222100//.----,,+*+)**)(())((('#''&""""#"#
- at 30BB2AAXX080903:3:42:159:363#0
-AAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGAGATTGGTAGA
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))()('(&&""%%"$"#
- at 30BB2AAXX080903:3:51:858:1755#0
-TAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGCAACTCT
-+
-67777788888888888888888877+765553432211/0/,..--+,+,+++()()*&%)(('''$"#""#$""
- at 30BB2AAXX080903:3:55:536:1198#0
-TAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCTGCGGTGGACG
-+
-67777788888888888888888877776555443222100//.-.-,,-,++***))))())((('"&#"""##"
- at 30BB2AAXX080903:3:51:513:1866#0
-TGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGCAGCTAGCG
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)))(()(('&$"$""##"
- at 30BB2AAXX080903:3:1:953:138#0
-ATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGGGGGGCTAGGCTAAGGGTTTTGAGGTGGGTCNACNTACC
-+
-6777778888888888.808838877720)5+44321'0$0/*.--,+))+)%*))))&%##&(##'""#$""""#
- at 30BB2AAXX080903:3:33:1139:191#0
-TATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCANTGTCACNN
-+
-67777788888888888888888876776555243222.00//...,-,,+++**)**))()(((''"$""$#"""
- at 30BB2AAXX080903:3:40:640:1075#0
-TATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTTGTGTNG
-+
-67777788888888888888888877776555443222100//...--+,,,+*****))()(((''"&$%%$$"#
- at 30BB2AAXX080903:3:54:406:1344#0
-TTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGGGGGGCTAGGCTAAGCGGTTTGAGGTGCATAGATGTG
-+
-677777888888888888888888774765554-32221*0$/.-(,-,++$+))+()*)&#)%'(&$$"%"#""#
- at 30BB2AAXX080903:3:58:781:105#0
-TTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGTTTTGAGCTGCATTGTCNNA
-+
-67777788888888888888888877776555443222100//.--.-,,+++*)*(*)))'(((('$&&$$$"""
- at 30BB2AAXX080903:3:1:67:1567#0
-CAGCAATGCAGCTCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAGCCTTTAGNCANAACA
-+
-6777778888888888888888887777555544322210///...,*,+++++%*)))())(((('$""#"###"
- at 30BB2AAXX080903:3:34:1236:828#0
-TGCAGCTCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGCGATTAGACTTTAGATCGGNACATAGNN
-+
-6777778888888888388888887/77655544322210///...--',+***+()))()((((('""%"#""""
- at 30BB2AAXX080903:3:38:716:1109#0
-GTTAAACTTTCGTTTATTGCTAAAGGCTAAACACCGCTGTTTCCCGTGGGGGTGTGGCAACGCTAAGACTGTACAC
-+
-677777888888888888888888777465.524%2.210....--(-,,,+'*))))'(''%''&%""&&$####
- at 30BB2AAXX080903:3:8:875:1618#0
-GTTAAACTTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGNAGCTCANN
-+
-67777788888888888888888877776555443222100//.--,-,-+,*+***))'))(((''"""$"#$""
- at 30BB2AAXX080903:3:48:1479:858#0
-AGTTAAACTTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTAAGCGGTCNTN
-+
-67777788888888888888888877776555443222100//..---,,+++**)))***)(((''%$##$#"""
- at 30BB2AAXX080903:3:1:1655:483#0
-TTAGTTAAACTTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTGGCTAGGCTANGANACTC
-+
-677777888888888888888888777765554432221/0//.---,,,+++*+)))))')(((&'%""""$$#"
- at 30BB2AAXX080903:3:1:1230:1667#0
-AAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAGCCTTTAGCAATAAACGACAGTTNACNCAAC
-+
-677777888888888888888888777765.54432121///..-.-,,,+*+*)*)')))((%('#'"$%""###
- at 30BB2AAXX080903:3:1:1054:903#0
-TTAGTATAGCTTAGTTAAACTTTCGTTAATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGTGTNCANACTC
-+
-677777888888888888868888787765553430220/0//.----,+,++)***()())(((%'%"$#""##"
- at 30BB2AAXX080903:3:35:1065:1365#0
-GGTTAGTATAGCTTAGTTAAAATTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTTCCCGTGGGGGNTCTCCACN
-+
-671777888888888888888%8807776355443202100//..-(,,,+++***((*()')(((&""#"##"#"
- at 30BB2AAXX080903:3:8:1265:1332#0
-GGTTAGTATAGCTTAGTTAAACTTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTAGATCGGAAGANGCATCANN
-+
-67777788888888888888888877776555443222100///.---,,+++***)*))))()(('""###%#""
- at 30BB2AAXX080903:3:39:1017:1515#0
-CCCCACGGGAAACAGCAGTGATTAGCCTTTAGCAATAAACGAAAGTTTAACTAAGCTATACTAAAGATCGGACACA
-+
-67777788888888888888888877776555443221100//..---,,-+++**))*))))((('&&#%$""#"
- at 30BB2AAXX080903:3:49:516:1299#0
-GAAACAGCAGTGATTAGCCTTTAGCAATAAACGAAAGTTTAACTAAGCTATACTAACCCCAGGAGATGGGCGTGAC
-+
-67777788888888888888888877776555443222100//..--,,,++****))()))((((&"""""""$#
- at 30BB2AAXX080903:3:44:354:1549#0
-GAAATTGACCAACCCTGGGGTTAGTATAGCTTAGTTAAACTTTCGTTTATTGCTAAAGGCTAATCACTGCTGTTTC
-+
-67777788888888888888888877776555443222100//..---,,+++**)))*)))((('''$&%%$$#$
- at 30BB2AAXX080903:3:54:794:50#0
-TGGCACGAAATTGACCAACCCTGGGGTTAGTATAGCTTAGTTAAACTTTCGTTTATTGCTAAAGGCTACTCATTGT
-+
-67777788888888888888888877776555443222100//-.---,,+,+***)))*()()''(%""&%###"
- at 30BB2AAXX080903:3:37:1308:232#0
-GCTGGCACGAAATTGACCAACCCTGGGGTTAGTATAGCTTAGTTAAACTTTCGTTTATTGCTAAAGGCTCACACAN
-+
-67777788888888888888888*7777)-5504222220//,.,.-,,-+++)))*)()((((''%$$#&$#$""
- at 30BB2AAXX080903:3:8:654:682#0
-GTGACCGCGGTGGCTGGCACGAAATTGACCAACCCTGGGGTGAGTGTAGCTTAGTTAAACTAGATCGNCGCCAANN
-+
-67777788888888888288888877774.451(0222101./.-%---++++*'*))*()((((%'"$"#$##""
- at 30BB2AAXX080903:3:2:664:1407#0
-TCGTGTGACCGCGGTGGCTGGCACGAAATTGACCAACCCTGGGGTTAGTATAGCTTAGTTAAACTTTCNCTGTCTC
-+
-67777788888888.88.8883-547336+522-/,,-.0.-/,,,*,+(+)*(')(((((#('(&'$"##""""#
- at 30BB2AAXX080903:3:34:1682:248#0
-TCGTGTGACCGCGGTGGCTGGCACGAAATTGACCAACCCTGGGGTTAGTATAGCTTAGTTAAACTTTNACTACANN
-+
-67777788888888888888888877776555443222100//.%---+,,+++*)*))))((((('""#"#$%""
- at 30BB2AAXX080903:3:60:945:766#0
-AAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACCGCGGTCACACGATCCACACNN
-+
-67777788888888888888888877776555443222100//..---,,,,****)))())((((''#%$%"#""
- at 30BB2AAXX080903:3:55:134:1049#0
-CTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACCGCGGTCACACGATTAACCCAAGAGATCGTGGCGCG
-+
-67777788888888888888888877776555443222100//..+.,+,,+****))()'(((((#"&#%#$#""
- at 30BB2AAXX080903:3:51:370:1606#0
-TAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACCGCGGTCACACGATTAACCCAAGTCAATAGAAGCCGACAGTC
-+
-67777788888888888888888877776555443222100//..---,-++*+**)**)(((((('%"""#"""#
- at 30BB2AAXX080903:3:35:318:584#0
-TTCGTGCCAGCCACCGCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTANGTCTCTTN
-+
-67777788888888888888888877776555443222110//...--,,+++**)*)))'(()(('"""##$"""
- at 30BB2AAXX080903:3:44:475:1277#0
-AGTTTTAGCTTTATTGGGGAGGGGGTGATCTAAAACACTCTTTACGCCGGCTTCTATTGACTTGGGTTAATCGTGT
-+
-67777788888888888888888877776555443222100//..---,,,,+**)))*)()((((%'""#&%#$"
- at 30BB2AAXX080903:3:39:820:1606#0
-CGGCGTAAAGAGTGTTTTAGATCACCCCCTCCCCAATAAAGCTAAAACCCACCTGAGTTGTAAAAAACTCCATCTC
-+
-67777788888888888888888877776555242222100././.-+,+++****)*)))()(((''&%&#""""
- at 30BB2AAXX080903:3:37:297:1052#0
-AGTCTATTTTGTGTCAACTGGAGTTTTTTACAACTCAGGTGAGTTTTAGCTTTATTGGGGAGGGGGTGATCTACGN
-+
-67777788888888888888888877776555443222120//..--,,,+++***))))(()((('""#%$##""
- at 30BB2AAXX080903:3:59:1002:797#0
-CACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAACAACGCCAGTTGACACACAATAGACTACGCTCTA
-+
-677271888888888888888888-11765714/300210,+&...(,,,,)****))))))')(('"$#"#"#"#
- at 30BB2AAXX080903:3:45:626:1898#0
-CAGATATGTTAAAGCCACTTTCGTAGTCTATTTTGTGTCAACTGGAGTTTTTTACAGATCGGAAGAGGGAGTGTTC
-+
-677777888888888888888888777765554432220001/...-,-,+++*)+)**()((((('$"#"""""#
- at 30BB2AAXX080903:3:40:372:2010#0
-GTGTTCAGATATGTTAAAGCCACTTTCGTAGTCTATTTTGTGTCAACGGGAGTTTTTTACAATTCAGCTGAGCTCT
-+
-67777788888888888888,4884777555.%41222100//..-*&,,,+)**))))(((%(&('%%"%"#"#"
- at 30BB2AAXX080903:3:35:928:569#0
-TTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTTCGTAGTCTATTTTGTGTCAACTNGAGCCGTN
-+
-67777788888888888888888877776555443222100//..----,,++***)))*)))(((&""#"%#"#"
- at 30BB2AAXX080903:3:58:1128:1593#0
-AGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGCCTAAC
-+
-67777788888888888888888877476$55443$0210///,..-,,,++*+)&())(('''('('$&##"""#
- at 30BB2AAXX080903:3:2:257:83#0
-GTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAAAAAACAATAGATAAGAAAAAAAATNCAANNAC
-+
-6777738888888883288)86817073+346-1"./-1#/*.)%+",&,+&*&%(((#'###&(&#$"$""""##
- at 30BB2AAXX080903:3:36:716:897#0
-GTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAAACTCACACCN
-+
-6777778888888888888888887777%5154422220.0.'..---,,-,+*)))*((&'('''#$$$#$###"
- at 30BB2AAXX080903:3:40:810:1481#0
-CTAAGCATAGTGGGGTATCTAATCCCAGTTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTAGAC
-+
-67777788888888888828888877/7055544-02200,....---,,,+*+*()*))((((((#&&&$%&$#$
- at 30BB2AAXX080903:3:57:821:784#0
-TGAGGTTTAGGGCTAAGCATAGTGGGGTATCTAATCCCAGTTTGGGTCTTAGCTATTGTGTGTTCAGATGCGCACA
-+
-67777788888888888888888877776555443222200//..---,,+++***)))))(((((''&"#"####
- at 30BB2AAXX080903:3:1:1056:727#0
-CTGTTGAGGTTTAGGGCTAAGCATAGTGGGGTATCTAATCCCAGTTTGGGTCTTAGCTATTGAGATCTNCANACGT
-+
-67777788888888888888888877776553443222100//.----,,,,+++*)))))((((('&"##""#""
- at 30BB2AAXX080903:3:39:925:350#0
-AGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGCCCTAAACCTCAACAGATCGGAAGATCGCTCATC
-+
-67777788888888888888888877776555483222110//-/.--,-,,++**)**())(((('"%%"#""""
- at 30BB2AAXX080903:3:38:1233:1273#0
-CCCAAACTGGGATTAGATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGATCAGACTC
-+
-67777788888888888888888877776555443222100//..-,-,,,++***)*))))(((('$&%$%#$$%
- at 30BB2AAXX080903:3:47:807:461#0
-ACTGGGATTAGATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAAGATCGC
-+
-67777788888888888888888877776555443221100//...--,,+++***)*)*))(((('%"#$$####
- at 30BB2AAXX080903:3:54:1236:264#0
-TAGTGTTCTGGCGAGCAGTTTTGTTGATTTAACTGTTGAGGTTTAGGGCTAAGCAAGATCGGAAGAGCGCGCTCTG
-+
-67777788888888888888888877776555343222100//..---,,++++**))))))(('((%&#%&"#"#
- at 30BB2AAXX080903:3:49:402:2042#0
-TATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGAGCCACAGCTTAAAAAA
-+
-67777788888888888888888877776555443222120//.----,,,++***))))))(((''&"$##"""#
- at 30BB2AAXX080903:3:51:944:61#0
-ATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGAGCCACAGCTGACGACTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''%%$%""""#
- at 30BB2AAXX080903:3:2:149:210#0
-GCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGAGCCACAGCTTAAAACANCAANNCC
-+
-6777778888888888848888887727652+142212100/--.--,-++++()*)*)('(((((&"""%$""#"
- at 30BB2AAXX080903:3:46:1047:873#0
-AGTTAAATCAACAAAACTGCTCGCCAGAACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTCCACACA
-+
-67777788888888888888888877776555443222100/..----,,+*++**))))(((((((&""$"###"
- at 30BB2AAXX080903:3:4:1731:1955#0
-AGGTGGTGAGGTTGATCGGGGTTTATCGATTACAGAACAGGCTCCTCTAGAGGGATATGAATCACCGCNAGTCNCN
-+
-67727788888888888888888877776/5544322001/0..,&-+,,*+++*))())((((((&"""$#$"#"
- at 30BB2AAXX080903:3:51:206:1852#0
-GAGGTGGTGAGGTTGATCGGGGTTTATCGATTACAGAACAGGCTCCTCTAGAGGGATATGAAGCACCAGATCTCGC
-+
-67777788888888888888888877776555443222020/..-.-,,,+++**))))*)()'('%""""$#"##
- at 30BB2AAXX080903:3:56:1580:124#0
-CTGGCGGTGCTTCATATCCCTCTAGAGGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACACACAAAACA
-+
-67777788888888888888888877776555443222100//..---,,+)+***)))))((('''$$%$$"##$
- at 30BB2AAXX080903:3:1:1765:118#0
-GCTGAGCAAGAGGTGGTGAGGTTGATCGGGGTTTATCGATTACAGAACAGGCTCATCTAGAGGGAAGCNCANTCAC
-+
-6777778888888+8808888,8877/.655.3432$2000/).---+,++$)'#'&'(''((('#'$"$"""###
- at 30BB2AAXX080903:3:59:53:1534#0
-TCTAGAGGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATATACCCGTNNC
-+
-6777778888888888888888887777645054322120/...-.,,-,,+++*')))('')'(('&%##""""#
- at 30BB2AAXX080903:3:43:1086:1132#0
-GAGGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATATACCGCCCTCTTCG
-+
-6777778888888888888888887777655544322.100/....--,+++++****)*)))(((&&$"%"%$$#
- at 30BB2AAXX080903:3:37:1469:797#0
-GCTGAAGATGGCGGTATATAGGCTGAGCAAGAGGTGGTGAGGGTGATCAGATCGGAAGAGCGGGTCACGCGCTTAN
-+
-67272288883888+88828888173772.4+42#22#0&/.#.-+"')+*%%()'()((#((####$"$##"##"
- at 30BB2AAXX080903:3:55:892:1594#0
-GTTTGCTGAAGATGGCGGTATATAGGCTGAGCAAGAGGGGGGGGGGGTGATCGGGGGTTATTAGATCGGTGTGACA
-+
-67777788888888888888888877776555843222)00./*.-(-,&+'+***)*)')'((('#'#"%$$%##
- at 30BB2AAXX080903:3:60:1460:650#0
-TGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATATACCGCCATCTTACAACAACNN
-+
-67777788888888888888888877776555443222100//..----,++++**)*))((((((&$$%%&$%""
- at 30BB2AAXX080903:3:48:1373:72#0
-TCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGCAAGAGGTGGGGAGGGTGATCGGGGGTTATCGGTCGTAGC
-+
-67777788888888888888888877776555443220100//(.-+-+-+*+**''))*)(&((&%%""#"""#"
- at 30BB2AAXX080903:3:54:1169:1364#0
-ATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGANGCGCAC
-+
-67777788888888888888888877776555443212100//.,-.,,,,+++****)))((((('$%""""###
- at 30BB2AAXX080903:3:51:1413:994#0
-TGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGGAAGAGGGGGGGGGGGGGGTGCGCGCGCT
-+
-6777778888888888888888887777655544+222100/...,-*+,,++***)(*()((%(%'$"$$$###"
- at 30BB2AAXX080903:3:42:1648:565#0
-TTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGGAAACAGGCTCGGCCAGAGGGGGGGGGGGTGAGGTGGTGAC
-+
-67777788,88088888888888877476575443(1,+#-+/(,$+,'%++)**#**#)(')'#'%%$""#""#"
- at 30BB2AAXX080903:3:40:872:1157#0
-TTACTTTGTAGCCTTCATCAGGGTGTGCTGAAGATGGCGGTATATAGGCTGAGCAAGAGGGGGGGGGGGTGATGTG
-+
-677777888888888888888880-777655544322110&/..,.--**+**)))()))'))((%'%&$&"""""
- at 30BB2AAXX080903:3:8:961:542#0
-CGATCAACCTCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTANCACCACNN
-+
-67777788888888888888888877776555443202100//./---,,,,+***)**))()((('"%$#$"$""
- at 30BB2AAXX080903:3:33:418:778#0
-CTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGGAAGAGGGGGGGGNGCGACANN
-+
-67777788888888888888888877776555443222100....---,(++'*(&))()*'(((&'"#$"##"""
- at 30BB2AAXX080903:3:56:1622:711#0
-GATCAACCTCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACACAAAAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$"%&#&$%$
- at 30BB2AAXX080903:3:58:613:782#0
-AACCTCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAATACCAC
-+
-67777788888888888888888877776551440222000//..--,,,,+++***))(())((('$&"#"%###
- at 30BB2AAXX080903:3:36:875:755#0
-TCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCTGATCACN
-+
-677777888888888888888888777765554432221000/..---,,++++**))))))(((('$$"""$##"
- at 30BB2AAXX080903:3:46:1110:830#0
-TCACCACCTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCAGGCCTCA
-+
-67777788888888888888888877776555443222100//.--,--,+++****)))()('(('""%#"#"##
- at 30BB2AAXX080903:3:59:1560:376#0
-TGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGCACCAAANNA
-+
-677747888888888888888888777765554432-2100//..---,,+++(*)**)))'(('('$$&%%$""$
- at 30BB2AAXX080903:3:35:547:101#0
-CTCTTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGCAAGCGCAAGANACACACNN
-+
-67077788888888888888888877775-5504321-/00/+...&-)++'+***#)))'((&((#"$$&%%"""
- at 30BB2AAXX080903:3:57:1341:765#0
-TACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGAGATCGGAAGAGCGGGTCAGTCACCA
-+
-6777778888288888888838887'7765.543(,3210+//.--,-,,++++%**)))((')(%'%$%"$###"
- at 30BB2AAXX080903:3:36:1465:756#0
-TTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTTNGCACNN
-+
-67777788888888888888888877776555443222100//..----,+++***)*'))()((''%$""$#"""
- at 30BB2AAXX080903:3:59:1045:671#0
-TTGCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGCAGCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))))(((''%&%$$"#$
- at 30BB2AAXX080903:3:46:846:878#0
-GCTCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCAGCGTCCCGA
-+
-6777778888888888885888887677656544322010///..---,,++****)))()%(('('""""$"#""
- at 30BB2AAXX080903:3:59:991:1214#0
-TCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGCAAACGCAA
-+
-677777888888888888888888777765554432221001/..--,,,+++)*)))))))(((('"#%##"###
- at 30BB2AAXX080903:3:42:835:1439#0
-TAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATCGGAAGACTCGNCNA
-+
-67777788888888888888888877776555443222000./.-.--,,+++***)*))*())((&'$"$""$"#
- at 30BB2AAXX080903:3:38:1473:1954#0
-GCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTACACATGTCGC
-+
-67777788888888888888888877744550443222/0/1.,..*,,,,,+***#)(((''(''#%"""""#"%
- at 30BB2AAXX080903:3:49:1290:1989#0
-CCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACACTATA
-+
-6777778888888888888888887776655544322.10.//...--,,+*+****&&()()'(('$%$"""#""
- at 30BB2AAXX080903:3:33:1692:875#0
-CTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGANTAGCGTNN
-+
-677777888888888888888888077765554432121000/....,,-,+***+(*))()('(('""##"#"""
- at 30BB2AAXX080903:3:44:1268:1429#0
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGACACCA
-+
-67777788888888888888888877776555443222100//-.---,,+,++**)))))()(''''$#"%####
- at 30BB2AAXX080903:3:45:421:1459#0
-TACACCTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((('''$"$&"#%#"
- at 30BB2AAXX080903:3:3:796:1149#0
-ATGGGCTACACCTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGCNTCGTNCG
-+
-6477778888888888888888+8777165504432120/,//-%,-*,,++)***)())()(((&'""$"%#"#"
- at 30BB2AAXX080903:3:56:485:755#0
-ATGGGCTACACCTTGACCTAACGTATTTACGTGGGTACTGGCGCTTACTTTGTAGCCTGCATCAGGGAGNTGTACT
-+
-67777788888888888888888'$77765554432221/1//...--,,++***+*)))()(((('&$""##"#"
- at 30BB2AAXX080903:3:59:847:1238#0
-ATGGGCTACACCTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTAGACACAG
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(('''&$&##"##"
- at 30BB2AAXX080903:3:60:1576:1973#0
-ACCTCATGGGCTACACCTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGTAGCGTTCCACAACNCANN
-+
-677777888888808888888)887777655544122210)//..-+-'+++(***))))''((#(&$$%%"$%""
- at 30BB2AAXX080903:3:53:928:1277#0
-ACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATCGCTCGCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))()(('&&"&&%%$#
- at 30BB2AAXX080903:3:50:1548:125#0
-CCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGACGCTAGTC
-+
-677777888883888888888888777765554432221/0//...--,,-++***()))))(((('"$"&$"""#
- at 30BB2AAXX080903:3:51:765:1020#0
-CCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGCGGCAGTAC
-+
-67777788888888888888888877776555443221100//...--,,++++**&))))))(('("###"#"#"
- at 30BB2AAXX080903:3:49:69:1967#0
-CTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAATACTCATC
-+
-67777788888888888888888877776545443222100//.----,,+,+**&)**)'''((''""##"$""#
- at 30BB2AAXX080903:3:53:1046:1880#0
-ATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGATCGGAAGAGTGGCACATC
-+
-67777788888888888888888877776555443222110//..--,,,+++***)*)()()(('("#$#""#""
- at 30BB2AAXX080903:3:1:984:237#0
-TGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGGTGCNCANATAC
-+
-67777788888888888888888877774555343222000//./,,-+,,)+****(())()((''%"$""#"##
- at 30BB2AAXX080903:3:42:1278:1283#0
-GAAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGCAATG
-+
-67777788888888888888888877776555443222100//..,--,,++++*))))))((('('&""&"%""#
- at 30BB2AAXX080903:3:53:1365:115#0
-AAGGCTACAAAGTAAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCCAGAAATAG
-+
-67777788888888888888888877776555443222100//-..--,,+++*****))))(&((#$$"$$&###
- at 30BB2AAXX080903:3:34:414:1153#0
-GTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGACCTAACGTCTTTACGTGGGTACCTGCGCTNTTCCACNN
-+
-6777778888888888888888887777652511-220100+/-.,,,-,+*+****))#'(('(''"%""$"#""
- at 30BB2AAXX080903:3:47:607:801#0
-TGTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGACCTAACGTCTTTACGTGGGTACTTGCGCTTACTTTGT
-+
-67777788888888888888888877776555443222100//..---,,+++****))))))((''"&&&$$$$#
- at 30BB2AAXX080903:3:38:1084:1081#0
-AAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGGAGCCCATGAGGTGGGAAGAAATGGGCTACATTTCATC
-+
-677777888888888888888888777765.0-432%2&00-/.,-,--,)++'(**)*)()((#&'&&&%%%%$$
- at 30BB2AAXX080903:3:59:446:1094#0
-GGTAGAAAATGTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGACCTAACGTCTTTAGATCGGAAGCACCTC
-+
-67777788888888888888888877776555443222100//..----,++****))*)))(((('&$%#"##"%
- at 30BB2AAXX080903:3:4:372:321#0
-CTGGGGTAGAAAATGTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGACCTAACGTCTTTACGANGTGTNTN
-+
-+777778888888888880818885745665.51320210/0/.--+--++,*&*))))('((((&'&""%##"#"
- at 30BB2AAXX080903:3:44:978:1048#0
-ACGTAAAGACGTTAGGTCAAGGTGGAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCCAGACAACTCG
-+
-67717788888888888.8888*8#77565454332/211///.-.",--*)+))*)))(((('(''%""%"#"""
- at 30BB2AAXX080903:3:50:496:1225#0
-ATCGTAGTTTTCTGGGGTAGAAAATGTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGACCTAACGCCTCTC
-+
-67777788,888888888888888779766/54422%.*0////..,,,,,+*())*()((((''%'"$%#%"#"#
- at 30BB2AAXX080903:3:52:566:1534#0
-AGGGCTATCGTAGTTTTCTGGGGTAGAAAATGTAGCCCATTTCTTGCCACCTCATGGGCTACACCTTGNNCTAACG
-+
-67777788888888888888888877776555443222100//..--,,,+++****)**)((((('$"""$#%$$
- at 30BB2AAXX080903:3:4:457:1215#0
-CATAAGGGCTATCGTAGTTTTCTGGGGTAGAAAATGTAGCCCATTTCTTGCCACCTCATGGGCTACAGNTCGCNAN
-+
-(74777888888888888*88738777365203422,01./../-,+'+,+)*'''((%(((&'('&"""#"#"#"
- at 30BB2AAXX080903:3:1:744:243#0
-CTTCGACCCTTAAGTTTCATAAGGGCTATCGTAGTTTTCTGGGGTAGAAAATGTAGCCCATTTCTTGCNACNCTAT
-+
-67777788088888888888888877776'53441222/00//.,.-,-,+,+***))())))'((''"#""%"##
- at 30BB2AAXX080903:3:45:1424:717#0
-TGAGGTGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTTATGAAACTAGATCGGAAGCGC
-+
-67777788888888888888888877776555443222100//..---,,+*+***))))))))(''&&#""$##"
- at 30BB2AAXX080903:3:49:1632:1032#0
-TGAGGTGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCACTTATGAAACTTAAGAGAGGAACA
-+
-67777-88888888888882888877776555443222100./..--,,,+&****))))))(((('$""""""##
- at 30BB2AAXX080903:3:45:1285:807#0
-CCAGAAAACTACGATAGCCCTTATGAAACTTAAGGGCCGAAGGAGGATTTAGCAGTAAACTGAGAGTAGGGGCACC
-+
-67777788888888888882868877716.5+2432#/10&0/#.,,-++*,++*&)*('((&('(%$"""##"##
- at 30BB2AAXX080903:3:33:1664:2001#0
-AACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGNACCACANN
-+
-6777778888888888888888887877651143/22'10.//.--&,,+++*'*)()')#'('(#'""##"#$""
- at 30BB2AAXX080903:3:49:342:276#0
-CCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGTCCACTGA
-+
-67777788888888888888888877776555443222100//..---,,++++****)))))(((('"#%"""""
- at 30BB2AAXX080903:3:50:686:146#0
-TGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCAGTAGCGA
-+
-67777788888888888888/88877776555443222100//-.-.-,,++++**))))))(((''%"""#""""
- at 30BB2AAXX080903:3:34:634:1566#0
-TGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCCACCTTCGNCACACANN
-+
-6777078888888888888888887777655541312100//...,,-,,,+++*)*)'))((((''"$$#$$#""
- at 30BB2AAXX080903:3:50:1234:1643#0
-TGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCCACCTTCGACTCGAC
-+
-67777788888888888888888877776555443222100//..--,,,+++*****))))(((('&"#$"""""
- at 30BB2AAXX080903:3:58:1493:2014#0
-GTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTAATGCTAAATCAACCTCACACCACN
-+
-6770778888888888888888887/77655544*2000.1-/..-.-+-++%**)**)(((%((%%&$#%&$%$"
- at 30BB2AAXX080903:3:45:1080:1101#0
-AGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACCCC
-+
-67777788888.888888888888777765554432221.0//..---,,++++)*)))()(((((''#"$"$"#$
- at 30BB2AAXX080903:3:46:1298:1235#0
-AGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCTCACACGTG
-+
-67777788888888888888888877776555442222100./.----,-+*++**()())(((((&"$"$"#"#"
- at 30BB2AAXX080903:3:54:290:1649#0
-GCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCCACCGTCGCCC
-+
-67777788888888888888888877776555443222100//.-----,+,++*)*)**)((((('%%#&&%##%
- at 30BB2AAXX080903:3:46:1499:1748#0
-GTCGAAGGGGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACATCCCGCC
-+
-6/777788-88888888888888877776555443212100//-.---,,+++)****)))()((''"##%#"$##
- at 30BB2AAXX080903:3:3:345:1498#0
-CGGGCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGATCGGAAGAGCGGTNTCGTNCC
-+
-677777888888888888583)85414325/5313201*/.*.,-,+,+,+*)))%(((&#'%'&''%""""""##
- at 30BB2AAXX080903:3:54:1504:101#0
-GAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGAGATCGGCACAACGCA
-+
-67777288888888888888888877776555423322100//./---,,+,***)**)*()(''('$$%%"#"$#
- at 30BB2AAXX080903:3:46:324:1756#0
-TGACGGGCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCTCCCT
-+
-677777888888888888888888/77760554/3222000./--,--,-+,*+*))())(()(((&%""#"$###
- at 30BB2AAXX080903:3:35:1436:455#0
-GGTGACGGGCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCNAACACCAN
-+
-677777888888888888888888777765654433210000...--,+,,++****))(()('(''"""#"$#""
- at 30BB2AAXX080903:3:1:1412:876#0
-GAGGAGGGTGACGGGCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTNTGNCCAC
-+
-677777888888888888088888771765551431./1/0-.,,.,,,++)+'()(((('(&'(&%&""""####
- at 30BB2AAXX080903:3:34:548:1928#0
-CTTGAGGAGGGTGACGGGCGGTGTGTACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCANCCACATNN
-+
-67777788888888888888888877776543442.0110/-..,-,+,*+**+)*)*))((('('%"$#"$##""
- at 30BB2AAXX080903:3:48:466:1620#0
-AGTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCCGCACATA
-+
-67777788848888888808888877774/(1480/./20.+/-.--++,+++')*%#))(('(&''$&"#$$##"
- at 30BB2AAXX080903:3:55:177:980#0
-GTAAACTGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCGCAGATGAG
-+
-677777888888888888888888777765.54432221.0/-.,-,,,,,,+**))))')(('(%'"$#%""$#"
- at 30BB2AAXX080903:3:50:396:1776#0
-TGAGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCCTCAAGTCTACTTCA
-+
-67777788888888888888888877776555443212001//..-.-,,+++***))))))))(('"""$$"###
- at 30BB2AAXX080903:3:53:837:1500#0
-AGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCCTCAAAGATCGGAAGCGCATCC
-+
-6777778888888888888888887777655444322211//0..----,-,+***)*()))((((%"$$$##"$"
- at 30BB2AAXX080903:3:58:222:99#0
-AGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCCTCCAGAGATCGGAAGANCTCNNC
-+
-67777788888888888888888877776555443222100//.,-,-,,+++**&)*(*')()(&'$&"""#""#
- at 30BB2AAXX080903:3:46:691:1001#0
-CTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCCTCAAGTATAGATCGGAAGCACGTACAN
-+
-6777778888888888888888887773655544322020./...,--,-,+****))*))((((((%"""""#""
- at 30BB2AAXX080903:3:57:1223:1306#0
-TAGGGGTTTTAGTTAAATGTCCTTTGAAGTATACTTGAGGAGGGTGACGGGCGGTGTGTACGCGCTTCAGTGNACA
-+
-67777788888888888888388877776555443222101//.+---,,+*+****)))())(#(''$%$$""##
- at 30BB2AAXX080903:3:46:707:40#0
-AATGCGTAGGGGTTTTAGTTAAATGTCCTTTGAAGTATACTTGAGGAGGGTGACGGGCGGTAGATCGGTACAGCGG
-+
-67777788888888888888888877776555343222100//..---,,++++**))))'((((''&""#""##"
- at 30BB2AAXX080903:3:38:429:109#0
-ATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAAGTCGTAGATCGGACGATGATNN
-+
-67777788888888888888888877776555443222+00/...---,,,+++***))))))('('&'&"$"#""
- at 30BB2AAXX080903:3:51:1222:1936#0
-ACTTTCCAGTACACTTACTATGTTACGACTTGTCTCCTCTATATAAATGCGTAGGGGAGATCGGAAGAGGCGTACA
-+
-67777788888888888888888877776555443112000//.----,,++++**)*))('((#((&"$##""""
- at 30BB2AAXX080903:3:57:680:480#0
-GGACATTTAACTAAAACCCATACGCATTTATATAGAGGAGACAAGTCGTAACATCGTAACAGTACTGGTACTCAGC
-+
-6777778888888888-88$18187777*555443'/..00-/-.'--',,&+*'()')')('((%%$"%""##"$
- at 30BB2AAXX080903:3:47:488:36#0
-CCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATAAATGCGTAGGGGTTCTCACGCGT
-+
-67777788888888888888888877776555443122100//./..-+,++)***)*))(((('''$&%"%"#""
- at 30BB2AAXX080903:3:50:1416:585#0
-ACTAAAACCCCTACGCATTTATATAGAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGAGATCGGGCAC
-+
-677777888888888888888888777765554432221/0//..--,,,+*++**))))))(('('$"#"#""##
- at 30BB2AAXX080903:3:58:1403:824#0
-AAAACCCCTACGCATTTATATAGAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGAAACACA
-+
-67777788888888888888888877776555443222110//..---,,,++****)))'()((('$&&""####
- at 30BB2AAXX080903:3:34:866:397#0
-GGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATAAATGCGTNTGCTCTNN
-+
-67777788888888888888888877776555443222100//...----+,+**)*))((()((('"%%###"""
- at 30BB2AAXX080903:3:46:1210:1439#0
-CTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCAGATCGGAAGAGTCGCCA
-+
-67777788888888888888888877776555443222100//./---,,+,+***)**)))((''(""""$###"
- at 30BB2AAXX080903:3:58:122:359#0
-CACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATAAATGCTTNNC
-+
-67777788888888888888888877776555443222100//..---,,,+++**)*)))()((('%'&#""""$
- at 30BB2AAXX080903:3:46:875:1956#0
-GCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATAGATGCG
-+
-67777788888888888888888877776542443212000/-(..----*++*****()'()'(''"%%""#$#$
- at 30BB2AAXX080903:3:54:644:898#0
-GCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATCTATAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()((('&%"%%$$#"
- at 30BB2AAXX080903:3:43:445:1400#0
-AGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCAGATCGGCAGGGGG
-+
-67777788888888888888888877776555443222100./..---,,+*+*+**))())()(('%&"##""""
- at 30BB2AAXX080903:3:59:628:253#0
-AGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTATATATGCNC
-+
-677777888888888888888888777765554/3.22100/...-,,,,,++***)))(((('(&'&$&%#"#"$
- at 30BB2AAXX080903:3:4:230:1909#0
-AAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTGTCTCCTCTANCTACNCN
-+
-677777888888888888288688-777655544322.100/..---,-++,***+))))())('''""%#&%"""
- at 30BB2AAXX080903:3:60:414:1167#0
-TGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGAGATCGGACGCNACNN
-+
-6777778888888888888888887775655542322210//....-,,,,,+***))*)))((((&%$%#""%""
- at 30BB2AAXX080903:3:37:1104:1803#0
-TAGAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTATCTTAACACACN
-+
-67777788888888888888888877776535443222100/../---,,,++**)*)))'()(&(("%%&%%%#"
- at 30BB2AAXX080903:3:38:1735:1918#0
-CTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTTACCATGTTACGACTTAGATAGCNN
-+
-677777888888888888888888777765554/35211000...,,,,,++*(*))*)))'(((('""%%"""""
- at 30BB2AAXX080903:3:38:1686:73#0
-CAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACACAAACAACCAANN
-+
-67777788888888888888888877773552443221100//..--,--,*+)+*))#()))((''%"$$$##""
- at 30BB2AAXX080903:3:38:495:50#0
-CAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACACAAATGCCCCANN
-+
-6777+78888888888888888887777655044323110/-/..-,,,-+*+**+'))()((((('""""#$"""
- at 30BB2AAXX080903:3:55:1539:172#0
-AACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACACAAAGCACCCAACACACCTGA
-+
-67777788888888888888888877776555443222100//..---,,++++**))*))(('((&$$&"##""#
- at 30BB2AAXX080903:3:49:546:1848#0
-TAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACTCCCCATGT
-+
-67777788888888888888888877776555443222100/....-,,,++++*+)))))))('('%$""$"#"$
- at 30BB2AAXX080903:3:56:1431:57#0
-CTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCAGTACACACACACAC
-+
-67777788888888888888888877776555443222100./..---,,,+++**)*)))((((''&$"&%###"
- at 30BB2AAXX080903:3:8:455:644#0
-AAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCNGCGACGNN
-+
-67777788888888888888888877776555443221100//..---),,++*)***))()('(('""%#"##""
- at 30BB2AAXX080903:3:43:789:1457#0
-GAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACTTTCCACTGTGT
-+
-67777788888888888888888877776555443222000//...--,+++++*))))()((((('$&&$"""""
- at 30BB2AAXX080903:3:55:640:712#0
-GTTGAAATCTCCTAAGGGTAAGTTGGGCGCTTTGTGTTAAGCTACACTCTGGTTCGTCCAAGTGCACNGACCGCTC
-+
-677777888888888888888888377-655944322/1/00*..---,-++++*+)#*()('(''&"$$"&"#"#
- at 30BB2AAXX080903:3:57:20:889#0
-ACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATCTCAACT
-+
-67777788888888888888878877776555443220100/-.----,,++*****&((&)(((''"&#"#"###
- at 30BB2AAXX080903:3:49:1243:1534#0
-TGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATCTCCACTTA
-+
-677777888888888888888888777765550432201/0//..--,,,+,++*+**)))((('('"##"$##"#
- at 30BB2AAXX080903:3:39:1496:1635#0
-GGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTTCGTCCCTCCTC
-+
-67777788888888888888888877776555443222100//..---,,+++****)*))(((((&&&%&&#%$#
- at 30BB2AAXX080903:3:59:160:1954#0
-CGGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTCTGGTAGAGCGTANNC
-+
-67777788888888888888/888777765-54432121(/*...-,-,-+*+)*)()(#''((''''$%%#""""
- at 30BB2AAXX080903:3:2:1154:161#0
-ACTTGGACGAACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACNAGCAACA
-+
-6777778888888888888/88487775655544/2/,/0/-/.-(-+,,-++)**)))%()#('&'$"#$""##"
- at 30BB2AAXX080903:3:38:1623:1208#0
-CAGAGCGGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAAGCTACACTAGCGCGTTGCN
-+
-6777778808888088888888887777655441322-10///.,--,,,+*+***&)(*)')'#''&##%"""#"
- at 30BB2AAXX080903:3:36:14:30#0
-ACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTNCACAGCGN
-+
-6777778-8888888888888888777765/244211100//0..--,,-++)+**))())((''''"$"#""#""
- at 30BB2AAXX080903:3:57:57:1285#0
-CTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTATGCCACCA
-+
-6777778888888888888848817777355544322/101/./.---,++*+***')('()(((('"%%#""###
- at 30BB2AAXX080903:3:36:892:715#0
-TGTAGCTTAACACAAAGCACCCAACTTGCACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAGCTCTCAN
-+
-67777788888888888888888877776555443222100//..---,,+++****))))((('('"#""$"%$"
- at 30BB2AAXX080903:3:46:1232:98#0
-TAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACCATGCCA
-+
-67777788888888888888888877776555443222100//..---,,-++****)))))(((((""%#""###
- at 30BB2AAXX080903:3:42:353:1645#0
-TGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGTGTTAGTC
-+
-677777888888888)8888/8(87771+505,)32220/0/-.-+---,+++(**&)))))(%(''&&%#$""""
- at 30BB2AAXX080903:3:39:656:1874#0
-GGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTAAGTGTAAGTTGGGTGCTTTGCGCT
-+
-67777788888888888888888877776553143221100/..----+,,+****))))())((''&&%%%%%$#
- at 30BB2AAXX080903:3:52:973:575#0
-GGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTAAAGATCAGAATCGGCGGA
-+
-67777788888888888888888877754515443021/0,/+...--,,++'+)**)()))((&('$""""#"#"
- at 30BB2AAXX080903:3:8:869:1218#0
-AGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTAANGAGCCANN
-+
-6777778088888888488888887677155344322210///-,---,-+++****)))))(((''""""###""
- at 30BB2AAXX080903:3:1:120:1492#0
-TAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTCCTACNTCNAACA
-+
-67777788888888888888888877776355443220110///--,,,,,+**+)*)))('(((('""#%""#""
- at 30BB2AAXX080903:3:42:1218:1148#0
-TCTGGTAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTACTAAGTG
-+
-67777788888888888888888877776555443222100//..---,-+++*+***)))((('('&"%%&"%$$
- at 30BB2AAXX080903:3:55:356:374#0
-GGTTGTCTGGTAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGANCTCTACN
-+
-67777788888888888888838877776555443232100//..--,,,+,+***)*)()((((('$"###"#""
- at 30BB2AAXX080903:3:42:1225:276#0
-AAGGTTGTCTGGTAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCAAGTTAAGTTGAAATCTC
-+
-67777788888888888888888878776655443222100./.----,-+,++**)))))'((((#&&""%%%##
- at 30BB2AAXX080903:3:56:1410:831#0
-TAAGGTTGTCTGGTAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTAGATCGGAAGCGCTGTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()('('$"#%#"##"
- at 30BB2AAXX080903:3:47:57:1929#0
-GGTTTGGCTAAGGTTGTCTGGTAGTAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCTCAGAGCGGTCACCTGTAGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))()('('&#"""""#"
- at 30BB2AAXX080903:3:42:482:765#0
-TTAACTTGACCGCTCTGAGCTAAACCTAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGATCGGCATA
-+
-677777888888888888888888.7776555453221100/.....++,,,++**)))())('(''%%&%%"#"#
- at 30BB2AAXX080903:3:35:510:632#0
-ATCGCCTATACTTTATTTGGGTAAATGGTTTGGCTAAGGTTGTCTGGTAGTAAGGGGGGGTGGGGTTNGCGTATCN
-+
-677777888888888888888888777765554432221&0//.---*+,*++**())()'(((%('"$"""###"
- at 30BB2AAXX080903:3:4:1655:1851#0
-AACCATTTACCCAAATAAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAANCTCANCN
-+
-67777788888888888888188877775555,432121./1/-,--,+,++*****)*)'((((''""##%#"#"
- at 30BB2AAXX080903:3:45:481:1555#0
-TCATCTTTCCCTTGCGGTACTATATCTATTGCGCCAGGTTTCAATTTCTATCGCCTATACTTTATTTGGGGTTTTC
-+
-637777888888888888838888777765514/3.22&00.'----*,,+*+))))*)((((((('%&""$"#""
- at 30BB2AAXX080903:3:42:482:517#0
-TTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGATGAAAAATTATAACCAAGCATAATATAGCAGAGAG
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))))(('&'&%&&##"#
- at 30BB2AAXX080903:3:1:408:1140#0
-AACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGATGAAAAATTATAACCAAGCATAATATAGCAANAANTTAT
-+
-677777888888888888888888777765554232221/0/../---,,+,++**))))))))'''%"##"""""
- at 30BB2AAXX080903:3:38:202:192#0
-TCATTATGCAGAAGGTATAGGGGTTAGTCCTTGCTATATTATGCTTGGTTATAATTTTTCATCTTTCTCTTACANN
-+
-67777788888888888888888877776255443222101//..---,,,++***)))))(((('&$&%%"#$""
- at 30BB2AAXX080903:3:50:1068:1354#0
-GCAAGGGAAAGATGAAAAATTATAACCAAGCCTAATATAGCAAGGACTAACCCCTAAGATCGGAAGACTGTCACCT
-+
-6777778888888888888888887777655%443222101//..---,,+++****))))((((('""$"$"$#"
- at 30BB2AAXX080903:3:48:1113:258#0
-AAGGGAAAGATGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAACAACTCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((((''&$""""$"#
- at 30BB2AAXX080903:3:35:1614:462#0
-GTCTGGTTTCGGGGGTCTTAGCTTTGGCTCTCCTTGCAAAGTTATTTCTAGTTAATTCATTATGCAGNCTGACACN
-+
-60777788888888888888888877776555413221/10./..--,-,++++*+))*())))(''"$#$$%$#"
- at 30BB2AAXX080903:3:48:210:598#0
-TATACCTTCTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGATACCAGACG
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))'(('&%%$"&%$""
- at 30BB2AAXX080903:3:33:601:411#0
-CTACATAGACGGGGGTGCTCTTTTAGCTGTTCTTAGGGAGCTTGTCTGGTGTTGGGGGGCTTTTGTANCCGCATNN
-+
-6777778888888281888888887711642$14+22*,0&#%/,)+,,&$)%'***)&&)####&#"$#"%""""
- at 30BB2AAXX080903:3:34:239:138#0
-TTGCTACATAGACGGGTGTGCTCTTTTAGCTGTTCTTAGGTAGCTCGTCTGGTTTCGGGGGTCTTAGNTCACACNN
-+
-67777788888888888888,8887777655544322210,//..--,--+++*+*)))))&'((%'""$$%$#""
- at 30BB2AAXX080903:3:3:610:1261#0
-GCCAAAGCTAAGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGAGATCGNAGCTNCA
-+
-677777888888888888888887777+655.-431122000..-.,,,,++****)*)(()(((#'"""""$"##
- at 30BB2AAXX080903:3:37:1417:1349#0
-CCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTAGATCGGAAGAGCGGTTCAGGCCTACN
-+
-67777788888888888888888877776555443222100//..-.-,,+++***))))))((#'%$%%%$%$#"
- at 30BB2AAXX080903:3:50:378:403#0
-ACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGTGTGCTCTTTTAGCTGTTCTTAGGTAGCTCGCCTGGCC
-+
-67777788888888888888888877776555443222/0///..---,,+++*****)))(()(('&$$#"""##
- at 30BB2AAXX080903:3:39:438:1749#0
-TACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGTGTGCTCTTTTAGCTGTTCTTAGGTAGCTCGTCGAGT
-+
-677777888888888888888888777765554430221.0//&.&--,,)+(*+*)'*)%)((((#"%"""#"""
- at 30BB2AAXX080903:3:59:141:1526#0
-TTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGTGTGCTCTTTTAGCTGTTCTTCACNNT
-+
-67777788888888888888888877776555443222100//.-.--,$+++&**))*)''#((&(%&&%$%"""
- at 30BB2AAXX080903:3:45:1534:1966#0
-CCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGGGTGCTCTTTTG
-+
-6777778888888888888,8888774,65452432.210///-.,--,,,'+****)*)(()(&(''$"$##$$#
- at 30BB2AAXX080903:3:50:611:1662#0
-TCACCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGATACGCTCT
-+
-67777788888888888888888877776555433222100//..----,+++****))))((('('"""#"#"##
- at 30BB2AAXX080903:3:51:673:1231#0
-GGACAACCAGCTATCACCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTCTCTGGC
-+
-67777788888888888888888877776555443222100//...---,+++**))))))(((''(%$#"#"#$#
- at 30BB2AAXX080903:3:1:556:1316#0
-CTTGGACAACCAGCTATCACCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATATNTCNCACC
-+
-67777788888888888888888877776/55413222000//.-,-,,,+++**))))()()('('%"&%"%##"
- at 30BB2AAXX080903:3:57:1609:1690#0
-TAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGAACACACCAAA
-+
-67777788888888888888888877776555443221100/...---,,++*****)))())('%&$$%$$#%##
- at 30BB2AAXX080903:3:53:832:373#0
-AAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCACCAGGCGCGGCAGGGTGGTCGACGCTGCCCAAGATC
-+
-6777778888888888888888/87777655044322110///.--,',,+,+)(()))()')('&'%$%"&$##"
- at 30BB2AAXX080903:3:37:501:1818#0
-ATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCACCTANCTGN
-+
-67777788888888888888888877776555443222100/....--,,++++**))))))((('(&$%&"#%#"
- at 30BB2AAXX080903:3:53:1186:212#0
-TGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCACCAGGCTCGGTAGGATTGTCGTC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('""%%$$""#
- at 30BB2AAXX080903:3:44:894:1343#0
-GACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACAGATCGGAAGAGCGGCGCG
-+
-67777788888888888888888877776555443202100//..---,-+++*++**))('(((('&%#$$##""
- at 30BB2AAXX080903:3:58:858:844#0
-GGATTTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCACCACACGA
-+
-67777788888888888888888877776555443222100//..---,,+,+**+**)())((((''&&#%##"#
- at 30BB2AAXX080903:3:59:158:248#0
-GCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAGTCCAGATCGGAAGAGCGGTTCAGCAGGTCCNNA
-+
-67772788888888888888888877776555443222100//..---,,+++***)*)))'(''('&%%"#%"""
- at 30BB2AAXX080903:3:39:1582:505#0
-TTTAACTGTTAGTCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAACATTTACC
-+
-6777778888888888888888887777655534332210///----,,,,,+***)*))))((((#'$%&##$##
- at 30BB2AAXX080903:3:53:50:1468#0
-AGAGGAACTGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGTGTCTC
-+
-67777788488888888888888877776555423220100//..---,,,++*++)**))((((('""$"#"##"
- at 30BB2AAXX080903:3:46:241:1775#0
-TAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTGGTTACT
-+
-6177778888888888888888/877776555443222100-0..-+-,(++*)*)))*)()()&('"#$#$$"##
- at 30BB2AAXX080903:3:47:837:682#0
-TAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAGATCGGCGCG
-+
-67777788888888888888888877776555443222100//..---,,+,+*+*)))))(((((($$"%"####
- at 30BB2AAXX080903:3:58:1081:970#0
-AGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGTTATGTACCTC
-+
-67777788888888888888888877776555443222100//...-,,,++#++))*)))((&'%(&%$$$"$#%
- at 30BB2AAXX080903:3:33:1614:1576#0
-ACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCAGATCGGAANCAGTCANN
-+
-677777888888888888888888777765552432221000/--.-,,,+,+****()*()((('("%"""$#""
- at 30BB2AAXX080903:3:8:1599:447#0
-CCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACTACCTAAGATNCACACANN
-+
-677777888888888888888888777765554432221/00/...-,,,+++***)*))))))(('"%%$$$$""
- at 30BB2AAXX080903:3:34:1421:377#0
-CATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACAGATCGGAAGANCTCCACNN
-+
-67777788888888888888888877776555443222000//..---,,+++*****))))(((('"'#"##%""
- at 30BB2AAXX080903:3:55:986:1797#0
-AGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCACAGACACAC
-+
-67777788888888888888888877776555443222100//..---,,,++**+))))))()'(#'&"&%%$$%
- at 30BB2AAXX080903:3:57:574:166#0
-ATTGGGTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGAGATCGGAAGGGGTCGAGT
-+
-67777738/83888888888888877776555443222101//.,-,-,,,+****))))((()(('$"%"#""""
- at 30BB2AAXX080903:3:59:436:1062#0
-TTGGTCCAATTGGGTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGACCACNA
-+
-67777788888888888888888877476555443222100//..---,,+,+***)))))())'(''&$"#"#""
- at 30BB2AAXX080903:3:35:1085:1659#0
-ATAGGGTGATAGATTGGTCCAATTGGGTGTGAGGAGTTCAGTTATATGTTTGGGAGATCGGAAGAGGNGGCTCTCN
-+
-67777788888888888888888877776552442222100//..---,,+++***)*(*)((('(&"$#%$#"#"
- at 30BB2AAXX080903:3:50:14:1059#0
-AAAAAATCCCAAACATATAACTGAACCCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGANATCACGTC
-+
-67777788888888888888888877776555443222100//...--,-+++****)))))))(('"""$"$##"
- at 30BB2AAXX080903:3:34:730:1226#0
-ACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTCCAATTGGGTGTGAGGAGTTCAGTTATATGTNTGGGCTNN
-+
-67777788888888888888888897776555443222000//...--,,++*****))))(((''&"%$""$#""
- at 30BB2AAXX080903:3:4:86:545#0
-CCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAATGTCNCTATNAN
-+
-67777788888888888888888877776545443220100//..--,+,+++***)*))))(((''%"##"""$"
- at 30BB2AAXX080903:3:46:1307:321#0
-CTTATACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTCCAATTGGGTGTGAGAGATCGGAAGAGGGGGTTGC
-+
-67777788888888888888888877776555443222100//,/---,,+++****))(()((((&""""""""#
- at 30BB2AAXX080903:3:1:606:1984#0
-GACCAATCTATCACCCTATAGAAGAACTAATGTTAGTATAAGTAACACGAAAACATTCTCCTCCGCATNATNTCTC
-+
-67777788888888888888888877776555443222101/-.----,,+,+*****)))((((('&"%%"$%$"
- at 30BB2AAXX080903:3:60:1531:1324#0
-TGACGCAGGCTTATGCGGAGGAGAATGTTTTTATGTTACTTATTCTAACATTAGTTATTCTATAGACACACACANN
-+
-677777888888888888/8888&777+655)2331,,,10-/(%+++&+*+**')#()'(()'#'&$$#%%$%""
- at 30BB2AAXX080903:3:33:999:577#0
-CTGACGCAGGCTTATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGATCGGAAGAGCGNGCACATNN
-+
-67777788888888888888888877776555443222100//..----,+++**))*)*)(()'(&""#$$##""
- at 30BB2AAXX080903:3:1:930:2008#0
-CCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCAGANTANAACG
-+
-6777778888888888888888887717155541322010././-.-,,,,++*+****)()(%(''&"%#""#$"
- at 30BB2AAXX080903:3:47:1140:412#0
-AGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTAGAACGGAANTTCACAC
-+
-67777788888888888(88888377776555443222.10//..---+,+++*)*)*()))%#&''$"""$####
- at 30BB2AAXX080903:3:39:968:1105#0
-GTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGCACTCC
-+
-677777888888888888888888777765554432221.0///.--,,,+,++*****)))(((('%%%#%%$$#
- at 30BB2AAXX080903:3:8:1690:433#0
-TAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCAGATTAAAACACTGAACTGACAATTANACTACANN
-+
-67777788888888888888888877776555433222100//..----,++++**))*))(((((&""##"$#""
- at 30BB2AAXX080903:3:46:422:236#0
-GTTGGTTGATTGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGTGACTCG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('&&"#"#"#"
- at 30BB2AAXX080903:3:47:1602:1542#0
-CTGCGTCAGATTAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCAACAAGTCATACGTCGGCT
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(((('""#$#""#"
- at 30BB2AAXX080903:3:40:125:1283#0
-TGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTANTCTGACAC
-+
-67777788888888888888888877776555443222100./..---,,++++**)))))()('''""$%$#%#$
- at 30BB2AAXX080903:3:1:884:1288#0
-TCAGATTAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCAACAAGTCATTATTACNCTNAGCC
-+
-677777888888888888888888477765554432-2100/..-.--,,+++())**()))(('''&"%"""#"#
- at 30BB2AAXX080903:3:57:1687:512#0
-GTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGGGCTGTTAATTGTTCACAACCACA
-+
-67777788888888888888888877776555443222100//..--,,-+,+*#*))))))(('#&'&%%%$%$$
- at 30BB2AAXX080903:3:36:372:1387#0
-CACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCAACAAGTCATTATTACCCTCACTGTCACGCTCCAN
-+
-67777788888888888888888877776555443222100//..--,,,+++*+*)))))((('('&$"%""#""
- at 30BB2AAXX080903:3:34:1773:506#0
-TGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGGGCAGATCGGAANTCACACNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))(((((""$$&"$""
- at 30BB2AAXX080903:3:36:444:1993#0
-CATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGAGATCTCTAGCTCNN
-+
-67777788888888888888888877776555443220100//..---,,+++***)*)))()(('%%$"####""
- at 30BB2AAXX080903:3:40:1729:914#0
-GCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGGGCTGTTTATTGTC
-+
-67777788888888888888888877776,55443222100//..-,-,-+++)***))))()(('&'#"&&&$""
- at 30BB2AAXX080903:3:48:1074:194#0
-GCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATAGATCGGAAGGTCCCACC
-+
-67777788808888888888888877776/55441220100/0..---,,+++)****)))((('''%"$$##"##
- at 30BB2AAXX080903:3:46:1097:1157#0
-AGCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTGGGCTGTGACTTGC
-+
-67777788888888888888888877776555443222100//..--$,,++++**))*()((('&''%"#%""$"
- at 30BB2AAXX080903:3:1:1696:800#0
-ATGAGCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATATTCGGNTGNTTCT
-+
-67777788888888888888188877716)55445222100/...-+,,,+,++*))())((((((&%"%%"""#"
- at 30BB2AAXX080903:3:44:1601:1875#0
-TAACAGCCCAATATCTACAATCAACCAACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAG
-+
-677777888888888888888888777765554432221000/..---,,,,++**())))((('''$&&%%"%$#
- at 30BB2AAXX080903:3:43:723:598#0
-CTTATGAGCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATGACTTGTTGGTTGATTGTAGATACTGGGCTGGC
-+
-677777888888888888888888777765/5443212100//./---,,+++***)*))))(((('$&%&%##""
- at 30BB2AAXX080903:3:37:1396:872#0
-CAGCCCAATATCTACAATCAACCAACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATCACTN
-+
-67777788888888888888888877776355443222100//..--,,,,+++*))*)()())'(&%$#%$##""
- at 30BB2AAXX080903:3:4:190:253#0
-TCCTTTTACTTTTTTTAACCTTTCCTTATGAGCATGCCTGTGTTGGGTTGACAGTGAGGGTAATAATANATGANAN
-+
-64777788888888888884888277776555343231100//..---,,++++*****)()(((('""$#"#"#"
- at 30BB2AAXX080903:3:39:860:993#0
-TGCCGAGTTCCTTTTACTTTTTTTAACCTTTCCTTATGAGCATGCCTGTGTTGGGTTGACAGATCGGAAGCTGCTA
-+
-67777788888888888888888877776555443222100//..----,+++**))))))())((&%&%$""#"#
- at 30BB2AAXX080903:3:46:345:1922#0
-ATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAAAAAAAGTAAAAGGAACTCGGACAAGC
-+
-67777788888888888888888877775555343222000/...-,--,+*+***)*))()(((''&%#"$"""#
- at 30BB2AAXX080903:3:57:622:842#0
-AAGATTTGCCGAGTTCCTTTTACTTTTTTTAACCTTTCCTTATGAGCATGCCTGTGTTGGGTTGACAGTGCTACAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+***)))()((('&&%""#""#
- at 30BB2AAXX080903:3:8:442:1762#0
-TGGTGATGCTAGAGGTGATGTTTTTGGTAAACAGGCGGGGGAAGATTTGCCGGGTTCCTTTTAAGATNACGTCCNN
-+
-6777778888888888888888887772655244332210-/.-)-,++++,**)*#'())(%(%%&""#""##""
- at 30BB2AAXX080903:3:41:217:1293#0
-TGGGCAGGCGGTGCCTCTAATACTGGTGATGCTAGAGGGGATGTTTTTGGTAAACAGGCGGGGGGAGCATTTNCGC
-+
-67777788888888888488888877(76555483222&00//-.---,,+*+*)*))'))(()#&'&$%%%"%$"
- at 30BB2AAXX080903:3:1:1280:264#0
-GTGTCACTGGGCAGGCGGTGCCTCTAATACTGGTGATGATAGAGGTGGTGGTTTTGGTAAAGAGGCGGNGCNACGT
-+
-6770*788888888888848/8871373)025413322&0&....)-&+,**+**()''(('''&#'$""$""#""
- at 30BB2AAXX080903:3:51:187:195#0
-TTACCCCGCCTGTTTACCAAAAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCCCAGACAACACTC
-+
-67777788888888888888888877776555443222100/..%--,,,,++*+*))))()(((('"$"#%"#"#
- at 30BB2AAXX080903:3:41:1536:1059#0
-CATGTGTCACTGGGCAGGCGGTGCCTCTAATACTGGTGATGCTAGAGGTGATGTTTTTGGTAAACAGGCGGGGGGC
-+
-677777888888888888888888777765553432,2/00-/-..--+,,+*'**()))((()'('"$#"#"""#
- at 30BB2AAXX080903:3:2:972:1646#0
-AACATGTGTCACTGGGCAGGCGGTGCCTCTAATACTGGTGATGCCAGAGGGGATGTCTTTTGTAAAAANTGACACT
-+
-677777888888)8888888088%767,6/2.31'22-$0&./+'-++,,$+*$+&#*()#(##(&#"""##$##"
- at 30BB2AAXX080903:3:43:108:590#0
-GTTAAACATGTGGCACTGGGCAGGCGGTGCCTCTAATACTGGTGATGCTAGAGGGGATGGTTTTGGTAAACCGGAG
-+
-677777888888,88888888888777-6555443222100//.---,-,+++*%***)&))(((('%%$##$"""
- at 30BB2AAXX080903:3:40:1297:1318#0
-CCTGTTTACCAAAAGCATCACCTCTAGCACCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTNATGCA
-+
-67777788888888888888888877776525443212100/...---,,,+++*))))())()(''&$&"""##"
- at 30BB2AAXX080903:3:44:585:1151#0
-GGCCGTTAAACATGTGTCACTGGGCAGGCGGTGCCTCTAATACTGGTGATGCTAGAGGTGGTGTTTTTGGGGGGAG
-+
-677777888888888888888888.77765504(3222011/-..,)-,,++*(*#*)&)''(%((%$$#"$""""
- at 30BB2AAXX080903:3:49:1341:1445#0
-CGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGGGCTCTTATATTTGTGATGGTAGGAGAACGGGAACGTTGAC
-+
-6777778888888888888888285771655/44(2-%.-,#'-,$+'+(,$')#*&##(('##'''""""""""#
- at 30BB2AAXX080903:3:35:212:1358#0
-AAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGNCGGAGGCN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((&"$"""""$"
- at 30BB2AAXX080903:3:36:500:514#0
-TTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGGCCTCTAATACTGGTCTTGTGTGN
-+
-67777788888888888888888877776555442222100//..---,,+&+(*)*)&)(''((('&$"""""""
- at 30BB2AAXX080903:3:42:19:130#0
-TTGCACGGTTAGGGTAACGCGGCCGTTAAACACGCGGCAGCGTGCAGGCGGGGGCTCTCCTAACTACGCTCTGTAC
-+
-67777788,8888888888888857#/765,9$4'2)+.'#.#-%+),+,+*')*#'(######%##"$"#"""##
- at 30BB2AAXX080903:3:56:1182:668#0
-TTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGGGGGTCGGGAGAGGGGTGCACCCT
-+
-67777788888888888888888877776555443222100//..---,,+*+'*'&#))%((&(%#&%$$"###"
- at 30BB2AAXX080903:3:44:924:1681#0
-CTAGCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCACA
-+
-67777788888888888888888877776555443222100/0..---,,+++***)*)')#(('('%&%"%#"""
- at 30BB2AAXX080903:3:47:235:768#0
-TGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGTGCCTCTACTTCTCTGT
-+
-67777788888888888888888877776555443222100//-.---,,++++***))#)'((((%$""""###"
- at 30BB2AAXX080903:3:46:1456:951#0
-ATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGTGCCTCTAGACTACAN
-+
-67777788888888888888888877776555443222100//..---,+*++****))*#)#'(&%$%"$###""
- at 30BB2AAXX080903:3:3:1343:1688#0
-TATGCTACCTTTGCACGGTTAGGCTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGGCCTCTNGTTCNCA
-+
-677777888888888888.888887777655544320/21,0+.%.,+,,)'*+'()))()%(#&#'""""$%"##
- at 30BB2AAXX080903:3:60:316:139#0
-TGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGAGATCGGAAGAGGTGNTCNN
-+
-677777888888888888188888777735554432121///.,-+,,+,,**)'*)))''((''(#%$""""%""
- at 30BB2AAXX080903:3:1:1478:1991#0
-GTGATTATGCTACCTTTGCACGGGTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGGNGTNCTNC
-+
-62777788888888888888888/177760554422320/...(.-+&-,++++*)(*)'&()(('&$"%#"""""
- at 30BB2AAXX080903:3:56:1111:397#0
-AGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACAAGTGTCACTGGGCAGGCGGGAGCGTCGT
-+
-67.77788888888&8,8888888.77765'54412,0/1/%*,.,+-+,++*(**()))()')(('&"%%#"#""
- at 30BB2AAXX080903:3:57:1137:440#0
-AGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGGCGCTACCG
-+
-67777788888888888888888877776555443222100...--,-,,*++***()*)'')(((''$%%"###"
- at 30BB2AAXX080903:3:57:760:1503#0
-AAGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCGGTCACCTAT
-+
-67777788888888888888888877776555443222100/...--,,,++++*)**)))((('(''&"$$###"
- at 30BB2AAXX080903:3:3:14:452#0
-AGAGGCACCGCCTGCCCAGTGACACAGGTTTAACGGCCGAGGTACCCTAACCGTGCAAAGGTAGCATCNCACNNCA
-+
-67777788388-88..+08,/8)54'274/524-22,+1#,)&.*)+++,%*)$*#')'(%#'(#''&"%""""##
- at 30BB2AAXX080903:3:49:1290:235#0
-GAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGTAGCATACACAGTTGT
-+
-67777788888888888818888877776555443222100-/--.*-,,,+(+*(()))#(('(('$$$"""###
- at 30BB2AAXX080903:3:54:1040:1116#0
-ACAAGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGGCTAGCGACT
-+
-67777788888888888888888877776555443222100/...-+--++,+**))*))'((((''%$#$%#"#"
- at 30BB2AAXX080903:3:57:1582:753#0
-ACAAGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCAGATCCTGCAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&"""""$###
- at 30BB2AAXX080903:3:58:1212:2003#0
-GGAACAAGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCCGGACCTCN
-+
-677777888888888888888888777765554432110/0//.-.-,-,++%*+***)#('((''#"%&#$#"#"
- at 30BB2AAXX080903:3:42:1338:1898#0
-ACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGTAGCATAATCACCTCAATATA
-+
-67777788888888888888888877776555443220//0/.----,,,++++*'*)())()(((&&&%%%%%$%
- at 30BB2AAXX080903:3:45:1767:1741#0
-AAGGAACAAGTGACTATGCTACCTTTGCACGGTTAGGGTACCGCGGCCGTTAAACATGTGTCACTGGGCTCTTGGT
-+
-6777778888888888888888887777655544322210/.//.--,,+,+++****()('('((''""#""#""
- at 30BB2AAXX080903:3:40:1493:1863#0
-TGCCCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGGAGCATAATCACTTGTTCCTTACGNGC
-+
-677777888888888888888888777+65,5112222220-/------$,++*)***))((((((%&'%&%$"##
- at 30BB2AAXX080903:3:4:1314:261#0
-CCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGTTAGGGTACCGCGGAGATCGGAAGAGCGGNACCANCN
-+
-67777788888888888888888878776555443232100//..---+,+++****())(((((&'%"#$$#"#"
- at 30BB2AAXX080903:3:3:820:1431#0
-CCAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGTAGCATAATCAGATCGGAAGAGNCAGCNNC
-+
-677777888888888888888888777/6555440212/0//+-..),,++++**))*)&()(('('%"%""#""#
- at 30BB2AAXX080903:3:1:1671:1146#0
-CATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGTAGCAGAATCACTTGTTCCTTAAATAGGGACNCANCACA
-+
-677777888888+888888883827747605351/2--000.'.-+-++*+,'**)))(#)((((&(&"""""###
- at 30BB2AAXX080903:3:8:1696:1593#0
-CATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGGAGCATAATCACTTGTTCCTTAAATAGGGANCGTCACNN
-+
-677777888888888888'888887777635544322#10..,---,-+,,+++'*)))()((('(&"$""$##""
- at 30BB2AAXX080903:3:33:1730:189#0
-CATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGTTAGGGTACAGATCNACCCTANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)()))((('"##"$##""
- at 30BB2AAXX080903:3:37:1569:1092#0
-CATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGTTAGGGAGATCGGAAGNCACTCN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))))('('$'"""##""
- at 30BB2AAXX080903:3:50:1776:595#0
-GTGGAGCCATTCATACAGGTCCCTATTTAAGGAAAAAGTGAATATGCTACCTTTGCAAGGTTAGGACGCGTCACCA
-+
-62777788888088888888/08/73776555441222+00'&./---,,+'+***)')(')'(((#"$#"#####
- at 30BB2AAXX080903:3:43:1237:453#0
-CGCGGTACCCTAACCGTGCAAAGGTAGCATAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACAGC
-+
-67777788888888888888888847776555443222100//..---,,+++***))*))()(('''&%&$%#$"
- at 30BB2AAXX080903:3:58:1639:1422#0
-CTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGTTAGCACACAAAN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((('(&$$"%&#%$"
- at 30BB2AAXX080903:3:2:1410:1565#0
-CCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGTTAGNGTCTACC
-+
-677777888888888888888885787745553432121-./-/..,+,-+++***)()))()(''''"""""$##
- at 30BB2AAXX080903:3:36:1072:929#0
-CCTAACCGTGCAAAGGTAGCATAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGTATAGCCACN
-+
-67777788,8888888.888888877776555440220000.//.--+,,+++++))*))(('(((%"%""####"
- at 30BB2AAXX080903:3:42:629:1031#0
-GCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCACGGGTAGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))()()(''''&##$"##
- at 30BB2AAXX080903:3:51:650:536#0
-AGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTTTGCCCGGCTCG
-+
-67777788888888888888888877776555443222100//..----,,++***))))))))((&&""#"$#"#
- at 30BB2AAXX080903:3:58:493:353#0
-AAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACAAGTGATTATGCTACCTCACNC
-+
-67777788888888888888888877776555443222100//..--,,,+++***))))))))'(('%&&$##"#
- at 30BB2AAXX080903:3:56:1585:582#0
-GTAGCATAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGAGGGTTCAAGATCGGAACACAAAAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''(''%#$##$#
- at 30BB2AAXX080903:3:4:439:1901#0
-TAGCATAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGAGGGTTCAGCTGTCTCATNTCGCNCN
-+
-677777888888888888888888777765554432221////....-,,+,+*'))))*()(((('""$'&""$"
- at 30BB2AAXX080903:3:49:478:229#0
-ACTGGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACCTGTGTGCC
-+
-67777788888888888888888877776555443222000//.,--,-,++)***))))((()(''"$"#"#"#"
- at 30BB2AAXX080903:3:49:479:228#0
-ACTGGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATTTAAGGAACATGTTGTAC
-+
-677777888888888888888888777765554432220/0./.,.-,,,,++**))*&)(()((''$$$"""""#
- at 30BB2AAXX080903:3:58:1212:747#0
-AATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGAGGGTTCAGCTGTCTCTTACTTTTANCCTCCA
-+
-67777788888888888888888877776555443222100//..---,,+,+*+**))))()(((($""%####$
- at 30BB2AAXX080903:3:44:1353:990#0
-AAATAGGGACCTGTATGAATGGCTCCACGAGGGTTCAGCTGTCTCTTACTTTTAACCAGAGATCGGACGATGTGCT
-+
-67777788888888888888888877776555443222100//.-----,+++++))*)))(('(('""#"#""##
- at 30BB2AAXX080903:3:34:747:2003#0
-CCTGTATGAATGGCTCCACGAGGGTTCAGCTGTCTCTTACTTTTAATCAGTGAAATTGACCTGCCCGNTCGATANN
-+
-6777778888888888888)8888-7016/45353./1(&/-..,+"+++&+%*)&')&##&'''&#""""%"#""
- at 30BB2AAXX080903:3:57:554:752#0
-GCCTCTTCACGGGCAGGTCAATTTCACTGGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCNTACACG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$&"%%$%$#
- at 30BB2AAXX080903:3:46:797:832#0
-CGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATCGACTCAG
-+
-67777788888888888828888877776555443222100//..---,,++++**)))))))((((""#"####"
- at 30BB2AAXX080903:3:52:347:1979#0
-TGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAAAAGTAAGAGACAAGATCGGAAGCGTGGTCT
-+
-67777788888888888888888877776/454432-2000//.,.,,,,-*+**+()(*)(&((''%"#"#"#"#
- at 30BB2AAXX080903:3:33:553:2038#0
-TTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAGATCGGAAGAGGGGGTCANCAGAGCNN
-+
-677777888888888888880888777765554-2202100.+-,,+--*,*%(*#)*&(#)(#&&#"$$"#"#""
- at 30BB2AAXX080903:3:34:158:996#0
-TTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAAAAGTAAGAGACAGCTGANGTCCATNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))(((''&""####"""
- at 30BB2AAXX080903:3:46:1412:58#0
-GTTCAGCTGTCTCTTACTTTTAACCAGTGAAATTGACCTGCCCGTGAAGAGGCGGGCCTGAGATCGGTCTATACCT
-+
-6777778888&888888888888372776555443222000/..-.-,,,,+++**'#'''('#%%'"$"""###"
- at 30BB2AAXX080903:3:59:678:1080#0
-ATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCAAGATCGGAAGAGCACTCC
-+
-6777778888888888888888884347655544331/0/./...,,-,%+****)))(((#''(&''"&$##"##
- at 30BB2AAXX080903:3:41:1084:1398#0
-CCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAAAAGTAACA
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(('(''$"&#$""#
- at 30BB2AAXX080903:3:60:655:1701#0
-CCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTCACTGGTTAACATACCNN
-+
-67777788888888888888888877776555443222100./..---,,++++**)*((())('(%%#"""##""
- at 30BB2AAXX080903:3:4:1044:397#0
-ATTAAAGCTCCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCAGGTCAATTTANGCACNCN
-+
-67777788888888888&888088767+65454/32/01001*/.+*+',+++***)))(%&'&'''$"%""""""
- at 30BB2AAXX080903:3:47:1248:1008#0
-CGGGCATGACACAGCAAGACGAGAAGACCCTATGGAGCTTTAATTTATTAATGCAAACAGTACCTAACAAACGACC
-+
-67777788888888888888888877776555443222100//..---,-++++***)*)))(((('%%"$&#"$$
- at 30BB2AAXX080903:3:47:1249:1009#0
-CGGGCATGACACAGCAAGACGAGAAGACCCTATGGAGCTTGAATTTATTAATGCAAACAGTACCTAACCGAGCAAT
-+
-6777778888888888888888887777655344322.10&//./----,++++**(())()('(%'&"%##$#""
- at 30BB2AAXX080903:3:41:1655:968#0
-CACAGCAAGACGAGAAGACCCTATGGAGCTTTAATTTATTAATGCAAACAGTACCTAACAAACCCAAAAACGTACA
-+
-67777788888888888888888877776555443222100//..--,+,+++++**))))))(('#"&%%%"#""
- at 30BB2AAXX080903:3:50:969:785#0
-TTAGGACCTGTGGGTTTGTTAGGTACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCCTGCGCAC
-+
-67777788883888888888888877776555443222100//..-,---++++**)))*))(((('&###$"##"
- at 30BB2AAXX080903:3:58:1387:309#0
-GTTTAGGACCTGTGGGTTTGTTAGGTACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCGTTANA
-+
-67777788888888888888888877776555443222100//..---,,++++**))))*((((('&%%"""%"$
- at 30BB2AAXX080903:3:45:534:1703#0
-CCCAACCGAAATTTTTAATGCAGGTTTGGTAGTTTAGGACCTGTGGGTTTGTTAGGTACAGATCGGAAGAGGGGCG
-+
-677777888888888888888088/77764551432221..//-.--,,,+++***'*)())('(('&&"#"#"""
- at 30BB2AAXX080903:3:44:357:1864#0
-AGGTCGCCCCAACCGAAATTTTTAATGCAGGTTTGGTAGTTTAGGACCTGTGGGTTTGAGATCGGAAGAGCGGCAG
-+
-67777788888888888888888877776555443221100//...,,,,+++***)*))))(((('$&%$&""""
- at 30BB2AAXX080903:3:38:1536:1714#0
-GGAGGTTGGGTTCTGCTCCGAGGTCGCCCCAACCGAAATTTTTAATGCAGGTTTGGTAGTTTAGGAGCATCGTCAC
-+
-67777788888888888888888877776515363022100//./--,,,+*+***)))())((('#'#"""$$##
- at 30BB2AAXX080903:3:8:825:450#0
-ATGTACTGCTCGGAGGTTGGGTTCTGCTCCGAGGTCGCCCCAACCGAAATTTTTAATGCAGGTTTGGNCCTCCANN
-+
-67777788888888888888888877776550442022//1-/.-.,,+-++****)*((()&((''"$##%##""
- at 30BB2AAXX080903:3:54:1424:851#0
-ACTACCAAACCTGCATTAAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCAGTACACGCACA
-+
-67777788888888888888888877776555443222100//..---,,+*+***))))))()(''%$$"%%"##
- at 30BB2AAXX080903:3:48:1358:244#0
-TTTGACTGGTGAAGTCTTAGCATGTACTGCTCGGAGGTTGGGTTCTGCTCCGAGGTCGAGATCGGAAGCTTGTGCT
-+
-67777788888888888888888877776555440221100//..---,,+++**)*))))((((('%"""$""""
- at 30BB2AAXX080903:3:3:334:1558#0
-TTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCAGTAGATCGGAAGAGCGGTTCAGCCGCNCTCANAC
-+
-677777888888888888888888734725+52,21/2.01-.),.++++,*)*#)&)*%'#'(##(%"#"$#"#$
- at 30BB2AAXX080903:3:35:53:1222#0
-GTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGATCGGAANGCAAAAGN
-+
-67777788888888888888888877776555441222100//....-,,+,+******))((((('""%"#"#""
- at 30BB2AAXX080903:3:4:498:774#0
-TTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCGCNCTACNAN
-+
-6777778888888888888888255777957144331212..0.--,,,,*+*)))())((()(('(&"#""""""
- at 30BB2AAXX080903:3:41:563:568#0
-GAGTATAGTAGTTCGCTTTGACTGGTGAAGTCTTAGCATGTACTGCTCGGAGGGTGGGTTCTGCTCCGCGGTCTGC
-+
-6777778888888888888888887777655544322210///....-,,+++%+**)%('))'(''$"#%#""""
- at 30BB2AAXX080903:3:57:444:1473#0
-TGAGTATAGTAGTTCGCTTTGACTGGTGAAGTCTTAGCATGTACTGCTCGGGGGGTGGGGTTGGGTCCGAGCGCGC
-+
-67777788888888888888884877776555/43221100*/..-.,,++)+*&*))))('#&#'#%&""$"$"#
- at 30BB2AAXX080903:3:45:1409:1547#0
-GACCTCGGAGCAGAACCCAACCTCCGAGGAGTACATGCTAAGACTTCACCAGTCAAAGAGAACTACGATACTCAAT
-+
-67.777888888888,+8888488+747'35-44322*2/0/0.,,-,&+*+***)*)')(('('&%$#"%#$"#$
- at 30BB2AAXX080903:3:48:1412:817#0
-AATTGAGTATAGTAGTTCGCTTTGACTGGTGAAGTCTTAGCATGTACTGCTCGGAGGTTGGAGATCGGGAGACTCT
-+
-67777788888888888888888877776555443322100//..--,,-+++*)**&)))')(&#%&""%##"#"
- at 30BB2AAXX080903:3:43:1722:534#0
-CTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGA
-+
-67777788888888888888888877776555443222100//..---,,++****)*)))))(((''&%%%%$$$
- at 30BB2AAXX080903:3:57:124:1822#0
-CTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCCATTCA
-+
-67777788888888888888888877776555443221100//..---,-+++**))**))((((('&$&"%#"#"
- at 30BB2AAXX080903:3:2:982:825#0
-TCAATTGAGTATAGTAGTTCGCTCTGACTGGAGAAGTCTTAGCATGTACTGCTCGGAGGTGGGGAGATNTCATTCC
-+
-67777788888888+88888888%7777655'44320*(00/../---,,+*++**()))&))((''$"#"$#"##
- at 30BB2AAXX080903:3:48:248:431#0
-GATCAATTGAGTATAGTAGTTCGCTTTGACTGGTGAAGTCTTAGCATGTACTGCTCGGAGGTTGGGTTGTGGTACG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''%$""$""#$"
- at 30BB2AAXX080903:3:50:1470:877#0
-ATTGGATCAATTGAGTATAGTAGTTCGCTTTGACTGGTGAAGGCTTAGCATGTACTGCTCGGGGGGTACACACTTC
-+
-6777778388.88888(8888888787765535,2/2%1/0/*#'-,,),)**+&))))(')&)(''"##$"#""#
- at 30BB2AAXX080903:3:53:19:1643#0
-CCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGCTTTGACTGGTGAAGTCTTAGCATGTACTGCTCTC
-+
-67777788888888888888888877776555443222100//..-.-,,+,+***))))*((('''%$$&#%$"#
- at 30BB2AAXX080903:3:48:888:617#0
-ACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACACAGGT
-+
-677777888888888888888888777765594432+2.00//..---+,+++**)**()(('('''%#$##%"""
- at 30BB2AAXX080903:3:48:1129:467#0
-AGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGCTTTGACTGGTGACGCAGTTGC
-+
-67777788888888888888888877776555443222100//-.---,,-++**&*)))))((((&$$""##"""
- at 30BB2AAXX080903:3:33:1667:1497#0
-TAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGCTTTGACTGGTGNATGCCANN
-+
-67777788888888888888888877776555443222100./-.-----+++****))*(')(('&""#"#%#""
- at 30BB2AAXX080903:3:60:861:238#0
-AAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTCCCGCTNN
-+
-677777888888888888888888777765554432221/0//.---,-,,,++*+**))((()((&&$$%"$"""
- at 30BB2AAXX080903:3:50:1121:1245#0
-CCTAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGCTTTGACTGGTCCGGACGC
-+
-6777778(88888888+88888887777655544322000///..---,,,++****))))(('((&"$#""##"#
- at 30BB2AAXX080903:3:59:1618:1321#0
-CCGAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGGAGTTCGCTTTGACTGGCAACAANCA
-+
-67777788888888888888888877776555443222100//..---,,+++**')))))((&'''$&%%$$"$%
- at 30BB2AAXX080903:3:2:973:254#0
-TGTTATCCCTAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGCTTTNGCTTACT
-+
-677777888888888888888888.7776555423212100/../.-,,,+++***)**)()((('''""$"#"""
- at 30BB2AAXX080903:3:47:450:464#0
-CAGTCAAAGCGAACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACACCG
-+
-64777788888888888888888877776555443222100//.----,,++++***)))()(((''$%"%%#"#"
- at 30BB2AAXX080903:3:41:166:808#0
-TGCGCTGTTATCCCTAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGTAGTTCGTTTTCAC
-+
-67777788888888888888888877776555443222100//..---,,,++***)**))((('(&%&#"#""#"
- at 30BB2AAXX080903:3:53:803:571#0
-TAGGATTGCGCTGTTATCCCTAGGGTAACTTGTTCCGTTGGTCAAGTTATTGGATCAATTGAGTATAGCCGTGTGN
-+
-67777788888888888888888876776555442222100/.-.-,-,,+,+***()*)*((((('%"$%"$"$"
- at 30BB2AAXX080903:3:2:1457:108#0
-TCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATCCTATTCTAANAACACAC
-+
-67777788888888888888888877776545443221./0//...--,*++)*'***(&)()(&((""""#####
- at 30BB2AAXX080903:3:52:1089:1385#0
-TCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATCCTATTCTAGCGTCCTTT
-+
-67777788888888888888888877776555243220./0/...--,,,++)***)*)())(((('&"#$%$#""
- at 30BB2AAXX080903:3:55:1017:583#0
-ATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTAGGGTAACTTGTTCCGTTGGTCAAGGTGTTATG
-+
-6777778888888888888888887777651584322210/..-.--++,&*+***())(*')&'%'%#"$"#"""
- at 30BB2AAXX080903:3:37:512:1228#0
-CTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGCATCAN
-+
-6777778888888888888888887777655544322210//...---,,,*+**)**))))(((('$%%#""$$"
- at 30BB2AAXX080903:3:50:1616:644#0
-GTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTAGGGTAACTTGTCACTGACAC
-+
-67777788888888888888888877776555443222100//...--,,+++**))))(()(((('$"#"""#"$
- at 30BB2AAXX080903:3:53:1024:982#0
-CCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*))(('(&%$$&&%%#%
- at 30BB2AAXX080903:3:37:590:668#0
-CATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTAGGAGCCCGACACN
-+
-6777778882888888888888887777655544322010,/....,-,,+**+)*))'((((('''$""""$"#"
- at 30BB2AAXX080903:3:39:1418:375#0
-CATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTAGGGTATCTTGTGC
-+
-6777778888888888888888887777655544122210/./....,,,,+(**))())('((((#&"%%&%%""
- at 30BB2AAXX080903:3:34:1123:1566#0
-CAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTAGNTCCTGCNN
-+
-67777788888888888888888877776555443202200/...----,++****)**))(()(&'"$##$##""
- at 30BB2AAXX080903:3:57:1667:1221#0
-CCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGCTGTTATCCCTACACAAAAAA
-+
-67777788888888888888888877776555443222100//..---,,+++**+)))))()(('&&$%%%$%$$
- at 30BB2AAXX080903:3:51:744:998#0
-AGTTACCCTAGGGATAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGCTGTTGGT
-+
-67777788888888888888888877776555443222100//..---,,+++***())))(((((($"#$""$$"
- at 30BB2AAXX080903:3:50:464:1067#0
-CTAGGGATAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCAGATCGGACGACATCT
-+
-67777788888888888888888877776453443222110//..---,,+(++*))*))))((#'(""$""#"#"
- at 30BB2AAXX080903:3:43:734:239#0
-TAGGGATAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACA
-+
-67777788888888888888888877776555443222100/...---+-+++***)*))()((((''#&&&&$#"
- at 30BB2AAXX080903:3:56:203:1622#0
-CGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCGGTGCTCT
-+
-67777788888888888888888877776555443222100//.----,,,,+**)))))())('('&&###""#"
- at 30BB2AAXX080903:3:1:461:50#0
-TAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGANCTNCCAT
-+
-677777888888128888,88888-1'763*145.02.21/.../.+,-+*+)****))(((('(''&"&$"###"
- at 30BB2AAXX080903:3:34:282:630#0
-TAACAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGANCAAAACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))))((''"&"#""#""
- at 30BB2AAXX080903:3:38:1093:539#0
-ATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTGCTCTTGT
-+
-67777788888888888888888877776555443222100//..--,,-+++****))()()((('""$"#"###
- at 30BB2AAXX080903:3:1:1484:677#0
-CATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATNACNCACT
-+
-6777778888888888888888887777655544321100///..----,+,++***)))()))((''""$"###"
- at 30BB2AAXX080903:3:47:1758:1554#0
-CATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGATTTCACCTC
-+
-6777778888888888888888887777655544322220///..---,,+++***)*))())((('"$"""#$##
- at 30BB2AAXX080903:3:44:1372:1826#0
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCGGCAGAG
-+
-677777888888888888888878777765554432221.0//..--,+,+,+++*))))')(((''&$""$#$##
- at 30BB2AAXX080903:3:37:1546:275#0
-CCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGACTCGCGCN
-+
-677777888888888888888888777765454330221000.-.,--,,,+++****)))(((((#"#&%"#$$"
- at 30BB2AAXX080903:3:49:22:830#0
-CCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAATAGGACTCACCTG
-+
-677777888888888888888888977+6525443222100//...--,,+++**)))))))((('&"%"$"""#"
- at 30BB2AAXX080903:3:38:780:769#0
-TGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGACTCTAGAAGCGTCACAC
-+
-6777778888888888888888887777655544332010///..+--,,+++***)*)*))()(&'"##"#"$##
- at 30BB2AAXX080903:3:1:416:1622#0
-ATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGNCCNCACA
-+
-27777788888888888888888877776555443222200//.-.--,,+++***)*))))()('''""""$#$"
- at 30BB2AAXX080903:3:38:71:31#0
-CGGCTGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTATTGTTGATATGGAAGATACGTCACNN
-+
-6777778888888888888888887617/5534-3222/00-..-*-,-+,*+)+*#*(((((((('$$"""#$""
- at 30BB2AAXX080903:3:37:712:571#0
-TTTAATAGCGGCTGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAGATCGGAAGAGCGGGTCACCACCTN
-+
-6777778888888888888888887777656534322201-///--),,+++*))**')*()(((%%$"#""###"
- at 30BB2AAXX080903:3:40:1552:1482#0
-CGAACCTTTAATAGCGGCTGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTCTTGTTGATTTAT
-+
-677777888888888888888888777765414415,202/0.---,--,,,#*+*)(*%()(#'((&$%#%$##"
- at 30BB2AAXX080903:3:2:1496:1839#0
-CATATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCAGATCGGAANCACNCAT
-+
-6777778888888888/888785877774452242++000/+..,-,,,,*,*$)%))(&('&'&'#""$"#"$$#
- at 30BB2AAXX080903:3:52:685:1822#0
-TATCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGCTCGCTTG
-+
-67777788888888888888888877776,55443222100//.-,-,-,,)+++*)))))()((''%#$""""""
- at 30BB2AAXX080903:3:41:478:926#0
-AAACGAACCTTTAATAGCGGCTGGACCATCGGGATGTCCTGATCCAACATCGAGAGATCGGAAGAGTGTGTTGTAT
-+
-6/717748-88888888288388&3.1&4+/54)-0/-.//*,+,,,),+&)+)'*'(#(('''#'#%""""""""
- at 30BB2AAXX080903:3:4:424:1499#0
-TCAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGCNTGCANTN
-+
-6777778888888888888888883777655542322000.0/..,,--+++**)))(('(((('&'%""$%""""
- at 30BB2AAXX080903:3:53:310:1120#0
-CAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCTATNGAG
-+
-67777788888888888888888877776555443221100./.-.--+,,++*+**)())'((((%"$#""""""
- at 30BB2AAXX080903:3:53:870:1424#0
-CAACAATAGGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTGTTGA
-+
-6777778888888888888888887777656544322211/1/.----,,+,+****))))')(((%$$"$$##"#
- at 30BB2AAXX080903:3:60:638:1460#0
-TGAACAAACGAACCTTTAATAGCGGCTGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAACCCTCTCNN
-+
-67777788888888888888888877776555443222000//..---,,+++++*)())(()((''$$&"$##""
- at 30BB2AAXX080903:3:45:658:1123#0
-GTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCGGGATGTCCTGATCCAACATCGAGGTCGTAAAGCTCAGT
-+
-6777778888888888888888887777654542-22110,//.)-,-+,*+**'))))(()#((&&%%$#"#"""
- at 30BB2AAXX080903:3:52:1340:132#0
-GGGTTTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTTCACGCAT
-+
-67777788888888888888888877776555243222100///..,-,,++***+**#)'(&(('#$"$&$%""#
- at 30BB2AAXX080903:3:55:81:881#0
-TTACGACCTCGATGTTGGATCAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAAANGATCGGT
-+
-67777788888888888888888877776555343222100//...,-,-+++*'**))))(()(''"""#$"#"#
- at 30BB2AAXX080903:3:1:770:607#0
-TAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCGGGATGTCCTGATCCAACNCANACGC
-+
-6777778888888888888888887777655544322110///&,*,++(,++')*('&(((('#''&"%#"$$"$
- at 30BB2AAXX080903:3:8:1599:2002#0
-CGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTAGAACGGAAGAGCGGGTCAGACGNACCTGCNN
-+
-6777778888888888888888887777655541222010//.,,+,#+,*)+(#(#))#######'""###"$""
- at 30BB2AAXX080903:3:34:679:835#0
-ATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCGGGATGTCCTGNTCTCCGNN
-+
-67777788888888888888888877776555443222100//..-,-,-++()#*(*))()(''''"#%"$##""
- at 30BB2AAXX080903:3:4:896:1595#0
-TCAGATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCCTCGGGATGTCNACACNAN
-+
-67777788888888888188888877776/55443002/0.10.--,,+*+)*$%#(##(''(##&%$"$""#"#"
- at 30BB2AAXX080903:3:43:256:1351#0
-CTGAACTCAGATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCGAGGGACTCC
-+
-(477708.88288888348803887117/5153/.0/,,-0.-+)-,++++*+(*)#()#&#&'##%"$"""$"""
- at 30BB2AAXX080903:3:35:1101:967#0
-TCTGAACTCAGATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCNTCACCCCN
-+
-67777788888888888888888877776552443222100//.----,,+++***)**)((('(''""$"####"
- at 30BB2AAXX080903:3:8:1250:1954#0
-TCTGAACTCAGATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGGCTGCACCATCNAGCACANN
-+
-67777788888888888888888877776555443222100//..--,+,+,+****)()(''((#'"""%#$#""
- at 30BB2AAXX080903:3:58:1110:929#0
-ATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCTACGTGATCTGAGTTCCACCCAT
-+
-67777788888888888888888877776555443222100./..---,,,+++*))*)))(((('''$""%"###
- at 30BB2AAXX080903:3:37:1668:1278#0
-GGTGCAGCCGCTATTAACGGTTCGTTTGTTCAACGATTAAAGTCCTACGTGATCTGAGTTCAGACCGTCTGCACNN
-+
-67777788888888888)88888877776555443222100/./..-,,,+,++***)))))(((''""#"$%#""
- at 30BB2AAXX080903:3:57:287:1324#0
-TGGATTACTCCGGTCTGAACTCAGATCACGTAGGACTTTAATCGTTGAACAAACGAACCTTTAATAGCGNCGCACC
-+
-67777788888888888888888877776555443222100//..---,,+,+*****))))((((''&""##"##
- at 30BB2AAXX080903:3:33:434:184#0
-AGAAACCGACCTGGATTACTCCGGTCTGAACTCAGATCACGTAGGACTTTAATCGTTGAACAAACGANGACCTCNN
-+
-677777888888888888888888777745.5443022100%...-+,-,,++**()*))(((('''"#$$$##""
- at 30BB2AAXX080903:3:55:1029:1392#0
-ATAGAAACCGACCTGGATTACTCCGGTCTGAACTCAGATCACGTAGGACTTTAATCGTTAGATCGGACGCACGGCT
-+
-67777788888888888888888877776555443222100//..---,,+++**))*))))(('('$%%"#""##
- at 30BB2AAXX080903:3:59:1479:1667#0
-TAGATAGAAACCGACCTGGATTACTCCGGTCTGAACTCAGATCACGTAGGACTTTAATCGTTGAACACACACANAC
-+
-677777888888888*8882882,7677655544502210//..+---,,++++**))()))((('''&%%%$"$#
- at 30BB2AAXX080903:3:59:454:492#0
-TGTTCAACGATTAAAGTCCTACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTAAGATCGGTCACAC
-+
-67777788888888888888888877776525443222100/..-----,,++***)))))((('('&$##%$$"#
- at 30BB2AAXX080903:3:53:933:288#0
-GAGGAATTTGAAGTAGATAGAAACCGACCTGGATTACTCCGGTCTGAACTCAGATCACGTAGGACTTTAATCGTTG
-+
-67777788888888888888888877776555443222100//..-,,,,++++**)*)))()((('$&$%&$#$%
- at 30BB2AAXX080903:3:37:163:1920#0
-TGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTCCCTGTACGAAATGTCACAN
-+
-67777788888888888888888877776555443022100//-'---,,,+++**)*)))((('('$$""$"$#"
- at 30BB2AAXX080903:3:58:207:352#0
-ATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTCCCTGTACGAAAGGACAANANA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$$%%&"#"$
- at 30BB2AAXX080903:3:48:1451:1618#0
-GTGAAGTAGGCCTTATTTCTCTTGTCCTTTCGTACAGGGAGGAATTTGAAGTAGATAGAAACCGACCTGAGTAACC
-+
-67777788888888888888888877776555443222100/...---,,+++***))))))()(''""#"#""##
- at 30BB2AAXX080903:3:1:1410:1550#0
-ATTTACGGGGGAAGGCGCTTTGTGAAGTAGGCCTTATTTCTCTTGTCCTTTCGTACAGGGAGGAATTTNTANCTGC
-+
-+777778888888888882381289673635543221110/./,/.,,+++++))**(*((()&('#&""#"""""
- at 30BB2AAXX080903:3:48:1213:1552#0
-TACTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGGTGTAGA
-+
-6777778888888888828)888877776555443222100*/---,-,+,++****))('(((&'%&#""%##"#
- at 30BB2AAXX080903:3:42:1590:464#0
-TTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGACTACTTCACAAAGCGCCTTCCCCCGTAAATGCTCTCATCTC
-+
-67777(8888*88888888818887777655544'0320-0//..,--+,,+(+*))()('#'''&#%"%%"#$$$
- at 30BB2AAXX080903:3:2:94:268#0
-GAGATGATATCATTTACGGGGGAAGGCGCTTTGTGAAGTAGGCCTTATTTCTCTTGTCCTTTCAGATCNGACNNCA
-+
-67777788888888888888888877173545443.22.00/,(.---,-%,'+***(()))''(''$""#"""##
- at 30BB2AAXX080903:3:38:972:1508#0
-TCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATAGATCGTCTCTA
-+
-67777788888888888888888877776555443222100//..---,-+++*****)()((((''"$#"####$
- at 30BB2AAXX080903:3:51:1606:2020#0
-GTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTACAAAAACCA
-+
-67777788888888888888888877776555343222120.,..,,+,,++++*+)))))'((''#"""$"%###
- at 30BB2AAXX080903:3:58:777:1192#0
-CGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCAAGATCGGACCGTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&$%$$#"""
- at 30BB2AAXX080903:3:54:1521:613#0
-GAAAGGACAAGAGAAATGAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTACACATAAC
-+
-67777788888888888388888877776555443221100//..---,,,++***)))))(()((''&%%$#"$"
- at 30BB2AAXX080903:3:8:1033:1341#0
-AGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACNACAATCNN
-+
-67777788888888888888888877776555443222200//./-,,,,,,+***)))())(((('"&%"#"#""
- at 30BB2AAXX080903:3:2:544:457#0
-AAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATAGATCGGAAGACNTGGGCTC
-+
-67777788888888888888.838737765/122322110./.,-,-+,,+,+***)*))')(('(&$"""##%##
- at 30BB2AAXX080903:3:42:149:1754#0
-AGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACCCACACCNACCCAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))()(('('"#$$%%$"#
- at 30BB2AAXX080903:3:37:503:990#0
-GCCTACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACCCACACCCATCCNACGCN
-+
-67777788888888888888888877776555443222100//..---,,-++***)*)))((((('"%&"$""$"
- at 30BB2AAXX080903:3:34:1770:648#0
-TTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACCCACACCCACAGATCNACACAANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)**))(()(('""$"#"#""
- at 30BB2AAXX080903:3:55:204:146#0
-CAAACCCTGTTCTTGGGTGGGTGTGGGTATAATACTAAGTTGAGATGATATCATTTACGGGGGAAGGGACTCGTTC
-+
-67777788888888888888888877776555443210100//.---,--++++**)*)))((''('""%###"%#
- at 30BB2AAXX080903:3:4:1388:1436#0
-AAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTATTATACCTACACCCACCCAAGAGATCCNTCCGNAN
-+
-677777888888888888888818/7776551)822011-.-.--.-,+,+**(*)))&')'((&&#""""$""#"
- at 30BB2AAXX080903:3:50:1395:1007#0
-CCGTAAATGATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGGTTGTTAAGATAGAGAGCCA
-+
-6777778888888888888888887777655544322210///-.,,-,-+*+***'())))(((''%"""""##"
- at 30BB2AAXX080903:3:42:652:559#0
-CGGGCTCTGCCATCTTAACAAACCCTGGTCTTGGGAGGGTGTGGGTATAATACTAAGTGGAGATAAGTCGGGTGCG
-+
-6777778-8888888888%88883477%65/544'2'21&0'//.,,--,*+*+*))$()'((#''''"%%$""#"
- at 30BB2AAXX080903:3:45:404:645#0
-TGATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTGTTAAGATGGCAGAGCCTGGTACG
-+
-677777888888888888888888777765554432221/0//..---,++++***)))**()('(''$"&&""""
- at 30BB2AAXX080903:3:40:964:108#0
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTGTTAAGATGGCAGAGCCCGGNATACT
-+
-67777788888888888888888877776555443222100//..--(,,++++**)**))()('(#&$&""""$"
- at 30BB2AAXX080903:3:35:1281:998#0
-CGATTACCGGGCTCTGCCATCTTAACAAACCCTGTTCTTGGGTGGGTGTGGGTATAATACTAAGTTGNATCACCTN
-+
-6777778888888888/888888877776555443222100/...-,-,,++*+**)))()((('('"$"$####"
- at 30BB2AAXX080903:3:60:703:511#0
-CTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTGTTAAGATGGCAGAGCCCGGTAATCGCATACACCGGNN
-+
-67777788888888888888888877776555443022100//..---,,+,+***))'*)))((('&$%##""""
- at 30BB2AAXX080903:3:50:777:1316#0
-GACTGTAAAGTTTTAAGTTTTATGCGATTACCGGGCTCTGCCATCTTAACAAACCCTGTTCTTGGGTGTCTAACAC
-+
-677777888888888888888888777765554431/2100..,..--,-+***#*()))(()(((%%"#"""$##
- at 30BB2AAXX080903:3:37:1319:1549#0
-TGACTGTAAAGTTTTAAGTTTTATGCGATTACCGGGCTCTGCCATCTTAACAAACCCTGTTCTTGGGGCTNCAGCN
-+
-67777788888888888888888877776555443222100//..---,,+,****)*))))(('(&$#$""#"#"
- at 30BB2AAXX080903:3:4:1538:345#0
-GAAGAGGAATTGAACCTCTGACTGTAAAGTTTTAAGTTTTATGCGATTACCGGGCTCTGCCATCTTAANAAACNGN
-+
-677777888888888%8888888877976'55443222100//,..-+,+**++*))*)#'(('((%""""$%"""
- at 30BB2AAXX080903:3:44:219:1476#0
-GCCATGGGTATGTTGTTAAGAAGAGGAATTGAACCTCTGACTGTAAAGTTTTAAGTTTTATGCGATTACCGTGCTC
-+
-67777788888888888888888877776555443222100//...--,,+++***)))))()(''&%%%%$$##"
- at 30BB2AAXX080903:3:42:984:1688#0
-TAAAACTTTACAGTCAGAGGTTCAATTCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTAC
-+
-67777788888888888888888877776555443222100//..-+---+++***')))))('((''$%%%&$#%
- at 30BB2AAXX080903:3:2:784:1803#0
-ATGGGTACAATGAGGAGTAGGAGGTTGGCCATGGGTATGTTGTTAAGAGGAGGAATTGAACCTCTGACNTATNCGC
-+
-67777788888888888888888827776525443,/1100/.-.--,',,++)*))*))'((((''"""#$"###
- at 30BB2AAXX080903:3:44:506:1880#0
-AGAGGTTCAATTCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCAAGATCGGGAGAC
-+
-67777788888888888888888877776555442221.00--./----,+,++*)**))'&(((('%""&#""$"
- at 30BB2AAXX080903:3:60:1123:1974#0
-AGAGGTTCAATTCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCGTGCNCANN
-+
-6777778888888888888888887777655544322.000./.,---,,++++**))*)((((((&"%#&"#"""
- at 30BB2AAXX080903:3:34:18:679#0
-GAGGTTCAATTCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTNGCTTGANN
-+
-64770788888888888888888877776555423222020/...---+,+++***)**)'()'(('"#$"""#""
- at 30BB2AAXX080903:3:41:568:1286#0
-GTTCAATTCCTCTTCTTAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCACTCGC
-+
-67777788888888888888888877776555443221100//..----,,*+****)*)(()((('&&$$##"""
- at 30BB2AAXX080903:3:33:1348:1046#0
-AATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCATGGGTATGTAGATCGGAANCTTCCCNN
-+
-67777788888888888888888/77766555443'221-0/...-,(+-,++&)))))))('((##"#""###""
- at 30BB2AAXX080903:3:46:1713:876#0
-ATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCATGGGTATGTTGTCAAGATATG
-+
-67777788888888888888888877776+55443222100//..---,,-+++**)))&))((((&%""%"""##
- at 30BB2AAXX080903:3:46:1613:947#0
-CATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCATGGGTATGGTANGCCCACGA
-+
-67777788888888888888888877776555443222100//-.---,++++*****))())(#('""##"#"""
- at 30BB2AAXX080903:3:59:709:1339#0
-TAAGCATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCAGATCGGAAGCAAGTCA
-+
-67777788888888888888888877776555443222100//..--,,,+++***)*)))))((('&$"##""##
- at 30BB2AAXX080903:3:34:1093:1103#0
-GTAAGCATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCATGAGATNTGTATANN
-+
-67777788888888888888888877776555443222100/...--,,,+++***))))((()(('""""#""""
- at 30BB2AAXX080903:3:42:887:1074#0
-TAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGCATTCCTAATGCTTAAG
-+
-6777778888888888888888887777655544222210.0//.-.--,++++*))*))()(((('&&&%$$##"
- at 30BB2AAXX080903:3:37:1088:1996#0
-GGTAAGCATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGGCATGGGGAGTTCTCTN
-+
-677777888888888888888888777765554432.20/0//..-,-+,+++**#)*)##'(((('""""%$#""
- at 30BB2AAXX080903:3:45:1150:636#0
-TTCGGTAAGCATTAGGAATGCCATTGCGATTAGAATGGGTACAATGAGGAGTAGGAGGTTGGCCATGGGGCGGTCA
-+
-67777/8888888888888888887777.5554432221/00/-----,,+*+***))())('('('%%"#"""#$
- at 30BB2AAXX080903:3:57:619:1785#0
-GCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGCATTCCTAATGCTTACCGAACGAAACATATGAT
-+
-67777788888888888888888877776555443222200//.-----,+,+***))))))(((('%"%&"#"""
- at 30BB2AAXX080903:3:46:1485:1914#0
-AACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGCATTCCTAATGCTTACAGATCGGAAGAGCGCGTGTC
-+
-677777888888888888888888777765554432221000/....-,,+)++***)))(((''''&###"""""
- at 30BB2AAXX080903:3:60:448:1673#0
-TAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCCATTGCGATTAGAATGGGGAGATCGGAAGATGCCACNN
-+
-6777778888888888888888*877376355423221000//..,-,,,++++**'))('#()#''"#%$#$$""
- at 30BB2AAXX080903:3:41:165:87#0
-ATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCCATTGCGATTAGAATGGGTGCAATGAGGNGTCTGATG
-+
-677777888888888888-**88&767-63554432221&,$+/'-,*,,++**+**#'''''('('"&##"""""
- at 30BB2AAXX080903:3:49:735:1676#0
-TGCGTAGTTGTATATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCCATTGCGATTAGAATGGCTCGTAC
-+
-67777788888888888888888877776555443222100//..---,,+,****)))))()((('$$#"""""#
- at 30BB2AAXX080903:3:56:113:583#0
-CGTTGGGGCCTTTGCGGAGTTGTATATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCCATTGNGCACTG
-+
-67777788888888888888888877776555443222100//..---,,++++***)))()(((('"%"%"#""$
- at 30BB2AAXX080903:3:38:558:1587#0
-AACGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCACTTGCTTCT
-+
-67777788888888888888888877776553443221100//..--+,,+,+*))*))))'((('#&&"#"""##
- at 30BB2AAXX080903:3:54:370:1536#0
-AACGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGAATTTTTCGTTCGGTAAGCATTAGGAATGCCATCGCGATT
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))*)))(('('&%"&&%##%
- at 30BB2AAXX080903:3:8:1493:1177#0
-AGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGTATATCGCCTAGAATTTTTCGTTCGGTAAGCATNCTCACANN
-+
-67771788888888888888+68877(763524422210#1-.-.-,,-,+++***%()((((('('"$"$#%$""
- at 30BB2AAXX080903:3:39:564:433#0
-TTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAACGTTGTAGTCACCCACN
-+
-67777788888888888888888877776555443222100/..---,,,,+++*+)*)((#()'('"%#&$#%#"
- at 30BB2AAXX080903:3:34:1251:620#0
-TCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAACGACGGAGGNCATACANN
-+
-&477778888888&88888888887777655244322200/+..---,--+*****(*))##)#((&"%#"#$"""
- at 30BB2AAXX080903:3:42:1612:1081#0
-ATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAAGCCCCAACGCTGTAGGCCCCTACGATAGGC
-+
-677777888888888888888888777765554332201/0-...$-,)-,+*))#%'((%(&'&'#%$"#$##""
- at 30BB2AAXX080903:3:33:1128:1434#0
-GAAGGGTTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGTATATAGATCGGANCACACANN
-+
-677777..88888888888888887777655544%02200//0..---,++*+**+*)())))((('"$"&$#"""
- at 30BB2AAXX080903:3:52:578:221#0
-GAAGGGTTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGACTTTTTCGA
-+
-677777.8888888888888888877776555442222100//./---,,+++****)))))(((''%""%&$%$#
- at 30BB2AAXX080903:3:47:549:475#0
-AGCGAAGGGTTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGAAATGCG
-+
-67777788828888888888888877776555443222100//.----,-++****)**))))((''$$""""%#%
- at 30BB2AAXX080903:3:43:693:644#0
-GTCAGCGAAGGGTTGTAGTAGCCCGTAGAGGCCTACACCGTTGGGGCCTTTGCGTAGTTGTATATAGCCTAGAATT
-+
-677777888888/888888888887777$55544521-20,0/-.---,,*,+*))*))))(((('''$$#&$$$$
- at 30BB2AAXX080903:3:38:1419:622#0
-TTTATGGCGTCAGCGAAGGGTTGTAGTAGCCCGTAGGGGACCACAACGTTGGGGACTCTCCGTAGCTCGATACCAC
-+
-677777888888888888888.88770765554$32221%.%.-,.,-*(+*+*#))')&#(##(##%"#%"#"##
- at 30BB2AAXX080903:3:3:1259:245#0
-TTTATGGCGTCAGCGAAGGGTTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGGCCTTTGCGTAGTTGNCTCANTN
-+
-67777788888880888888188877776/4)44322110)//-,.--+*,,++#%))))()''(&'""$%$#"#"
- at 30BB2AAXX080903:3:48:1528:602#0
-ACAACTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCACAGATCCCACC
-+
-6777778888888888888888887777655544322210-//.----,,++****)())#((((#'"""#""###
- at 30BB2AAXX080903:3:2:1366:421#0
-CTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAGATCNTANCATA
-+
-6773778888888888828888887723655524321020/-)..,++,+)*%'*)#&)%(&('''#%"##"##"#
- at 30BB2AAXX080903:3:36:1730:568#0
-CTTTGGTGAAGAGTTTTATGGCGTCAGCGAAGGGGTGTAGTAGCCCGTAGGGGCCTACAACGTTGGGNCCTCAGNN
-+
-6777778888888888888888887777655544*02110.//,.--',,,**+*')))(()&('('""%#$#"""
- at 30BB2AAXX080903:3:52:577:151#0
-ACTCTTCACCAAAGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTCAGCTCTC
-+
-6777778888888888(888888877776555453220+00/.,'-,,,-+,+)*))))))((('('"##&""#"$
- at 30BB2AAXX080903:3:39:1508:1332#0
-TCTTCACCAAAGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTCGCCACCAC
-+
-6777778888888888838888887747655544322/1/00/..--,+,*++**))))(((&((#'$$$$#"$#"
- at 30BB2AAXX080903:3:1:1179:1058#0
-ACCAAAGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTCAGCTCCNCANCACA
-+
-67777788888888888888888877756555023222)00.///-,-,-+++*'***)))#)('''$"%$"$%$$
- at 30BB2AAXX080903:3:35:1613:379#0
-ACCAAAGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCNACTAGANN
-+
-67777788888888888888888877776555443222000/...---,,+,+****())'('((''""%"#"#""
- at 30BB2AAXX080903:3:36:1166:1272#0
-AAAGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCATCGTCNCAN
-+
-67777788888888888888888877776555443222100//..---,-,++*+***)))))(''%$'%&&""#"
- at 30BB2AAXX080903:3:44:1193:105#0
-GCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCCTCGCTCCTCTC
-+
-/7777783888888888888888877776555342222000//.----+,,+')())()%)(('&#'&$"%##$$#
- at 30BB2AAXX080903:3:52:113:1129#0
-TAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGCGGGGGTGTAGAGGGGGGTGGGAGATGGGGGGGGGATCTGGGGG
-+
-67777788888888888888888877776555443*2%+0,*.+.--,,*$,+)%*&#)#()#((('"$$""##""
- at 30BB2AAXX080903:3:49:1358:331#0
-GTAGACGAGCGACGGTGAGAGCTAAGGTCGGGGCGGGGGTGGAGAGGGGGATGGTAGATGTGGCGGGCNCTGCTCG
-+
-677770888888888888888888777765554232-2(.0%..%---,,)&++&)&(%(#)(#(('$"#""""#"
- at 30BB2AAXX080903:3:39:367:758#0
-CCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCAGATCCGCACAGAG
-+
-67777788888888888888888877776555443222100//..--,-,,+****)))))(()(''$""%"""#"
- at 30BB2AAXX080903:3:39:859:1204#0
-CCTAAAACCCGCCACATCTACCATCACCCCCTACATCACCGCCCCGACCTTAGATCGGAAGATCGGTCNTGCAGTC
-+
-677777888888888888888883.7776%4.1131',0.&/../++++++)'()&(()'(##&(&'$"#%#"""#
- at 30BB2AAXX080903:3:58:36:1038#0
-CTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTAGACNNA
-+
-67777788888888888888888877776555443222100//...--,+++**+)*))))'(((''&&"""$""#
- at 30BB2AAXX080903:3:1:465:1262#0
-ATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGCGGGGGGGGTGAGGGGGGGGGGGGGTGGGGGGNCANCGCA
-+
-677777888888888888/888.8576;65'24432+21#/#&('$-#,,,*+)%)*'#('#(#&'%""##"#"##
- at 30BB2AAXX080903:3:37:701:1565#0
-GCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGTACACACN
-+
-6777778888888888888888887777655544320212/1.-..--,,+++**)**))))(((('""#%"#"#"
- at 30BB2AAXX080903:3:48:482:795#0
-CACATCTACCATCACCCTCTACATCACCGCCCCGACCTAAGATCTCACCGTCGCTCAGACCGGAAGGACGGACTGC
-+
-6777778888888888888588887/776/5541-02'%&/$/-,-,*-,)+**'(%'(##'(#'(#""#""$"""
- at 30BB2AAXX080903:3:1:513:1712#0
-ACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGAACNCCNCGCC
-+
-27777788888888888888888877776555443222.00//..,-,-++++++)*))()((((&'&"&""%"$$
- at 30BB2AAXX080903:3:45:1230:805#0
-GGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGCGGGGGTGGAGGGGGGGGTGGGGCACTG
-+
-677777888888888888888888774765454432220/0///.---+,+*+*'*'#)(')((''#%"#"###""
- at 30BB2AAXX080903:3:3:287:126#0
-ATCTACCATCACCCTCTACATCACCGCCCCGACCTTATCTCTCACCGTCGCTCTTCTACTAGATCGGANCTGCNCN
-+
-67777*08808//0.-830)0+/,+2%0)00+/)-,,#.0)-,.,+)')&***('(('%(''#'#&#""%#"$"""
- at 30BB2AAXX080903:3:50:841:182#0
-ATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGAACCGCGTCACCT
-+
-67777788888888888888888877776555443222100//..--,,,+,+++***))(()((('"#$""##$"
- at 30BB2AAXX080903:3:54:122:1321#0
-ACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGAACCCCCCGCGCCCCCN
-+
-67777788888888888888888877776555243222100//..----,++***)(*())((((''"%#&""#""
- at 30BB2AAXX080903:3:53:1326:1351#0
-GGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGCGGGGGGGGTAGCACGCATCG
-+
-677777888888888888888888777765564432221/0//,.-,,,++++**#)*((&&'###'%"$$$""$#
- at 30BB2AAXX080903:3:42:1762:1147#0
-CATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCGCCGCTCTTCTAAGATCGGAAGAGCGGGCTAGCTAT
-+
-67777788888888888888,8887086/.052/311.10/#.-.+,,+)*)#)'%#(##&'&'#%'"""""""""
- at 30BB2AAXX080903:3:45:1026:551#0
-GGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGGCGGGGCGGGGGGGGATACATTTGGG
-+
-677777888888888888888888/7776555443122100/..-.--,,)++*****)%)''('#&$$######"
- at 30BB2AAXX080903:3:46:1614:1715#0
-GGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTGAGGTCGGGAGATCGGGTCACTCCG
-+
-6777778888888883888888887777655544332.100//,..--,,,&++*)(*))')((#''"#%#$"##"
- at 30BB2AAXX080903:3:48:683:2015#0
-TCTACATCACCGCCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGAACCCCCCTCCCCATAAGACCGGCACG
-+
-67777788888888888888888877776552423212200//-,---,+,+**)*()((&((((''$$##"%"#"
- at 30BB2AAXX080903:3:48:1333:1106#0
-CCAGGGGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGCGGTGGATCA
-+
-6777778888888888888888887777655544322010//....--*,,+****)*))('((('&%""""""#"
- at 30BB2AAXX080903:3:33:804:301#0
-ACCAGGGGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGGNTAGTGCNN
-+
-67777788848888888888888877775555443232100//..-,-,++*+*+*)))))%(((('""""""#""
- at 30BB2AAXX080903:3:37:1288:903#0
-GGTTGACCAGGGGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACGGTGAGAGCTAAGGTCGGGCGCGN
-+
-6777778888888888888888887747655543322210///.,----,,,+*)**)))''((((#$%#%#$$""
- at 30BB2AAXX080903:3:39:903:469#0
-TGAGGTTGACCAGGGGGTTGGGTATGGGGAGGGGGGGTCATAGTAGAAGAGCGACGGCGAGAGCTAAAGCGGTGCT
-+
-67777088888888888888880877776755443212110//(--,,-,+++*&**#)#)'(&(&%"$""$""#"
- at 30BB2AAXX080903:3:39:1339:1313#0
-CCCCGACCTTAGCTCTCACCGTCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCTCGC
-+
-67777788888888888888888877776555443222000//..--,,,+*+***)*))(()'&'&&#"%%#$"#
- at 30BB2AAXX080903:3:52:27:2008#0
-CCTAGGTTGAGGTTGACCAGGGGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGACAGATGCGTGCGTTG
-+
-67777788888888888888888877776555443222100//(-',-+,,++*****#*)'()'%#$""#"""""
- at 30BB2AAXX080903:3:46:129:27#0
-ATAGGAGGCCTAGGTTGAGGTTGACCAGGGGGTTGGGTATGGGGAGGGGGGTTCATAGTAGAAGAGCGTTTACATC
-+
-67777788888888888888888877776555143222100//.----,,+'*****))())((('('$#"##""#
- at 30BB2AAXX080903:3:55:535:612#0
-TCACCGTCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCTCAACAGATCTGCCGCCCC
-+
-67777788888888888888888877776555443222100./..---,,++++**))))))(((''"$""""##"
- at 30BB2AAXX080903:3:47:525:1205#0
-TTCTACTATGAACCACCCTCCCCATACCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATGTCTCTCCT
-+
-677777888888282888888888771762/543+3.20*//,.,.--+++++*')())'(((('''""#""###"
- at 30BB2AAXX080903:3:33:148:299#0
-TCCCCATACCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTNCTCGGCNN
-+
-67777788888888888888888877776655443222100//..---,,+++***))*))((((('"%$#"""""
- at 30BB2AAXX080903:3:43:1189:1051#0
-CCCATACCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGCCTCGT
-+
-67777788888888888888888877776555443222100//..---,,,++****))))())((&'"%#"%#$"
- at 30BB2AAXX080903:3:35:206:1137#0
-CCATACCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCNGTCCTCAN
-+
-67777788888888888888888877776555443221100/...---,,+*++**))))))((('&"""#%#$#"
- at 30BB2AAXX080903:3:35:1621:1669#0
-TGAGTAAACGGCTAGGCTAGAGGTGGCTAGAATAAATAGGAGGCCTAGGTTGAGGTTGACCAGGGGGNGCACACGN
-+
-67777788888888888888888%77'76555413212000//,,++--$-+%**#**)#'(((((&""$&%##""
- at 30BB2AAXX080903:3:42:1269:771#0
-TGAGTAAACGGCTAGGCTAGAGGTGGCTAGAATAAATAGGAGGCCTAGGTTGAGGTTGACAGATCGGAGGAGCTCA
-+
-67777788888888888888888877776555443212101//..-,-,+&+*+*&))()(((''('&"&""""#"
- at 30BB2AAXX080903:3:58:1378:328#0
-CCCAACCCCCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGACACCTCTAGCCTAGCCGTTTACCCAACNC
-+
-67777788888888888888888877776555443222100//..-,-,,+++***)))))))(((&'"$&"$%"$
- at 30BB2AAXX080903:3:2:1525:352#0
-CCTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATACNATTATCA
-+
-67777788888888888888888877776555443222200/..-----,++++****))((((('#'""$"#"#"
- at 30BB2AAXX080903:3:33:16:1955#0
-CTGGTCAACCTCAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCNGACTACNN
-+
-67777788888888888888888877776555443022100//..--,,,++++**))))))(''('"""$"##""
- at 30BB2AAXX080903:3:38:1020:1800#0
-TAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCCGCGCT
-+
-67777784888888888888888877776555441220100//..--,,,+++*****))(((((((&'"$"#"#"
- at 30BB2AAXX080903:3:35:989:1544#0
-TGAGTTTGATGCTCACCCTGATCAGAGGATTGAGTAAACGGCTAGGCTAGAGGGGGGTAGGAAAAAANCGCTTCCN
-+
-67777788888888888888887877774.55443222&00-.---"('-*++'**(###%(%'('%"%"$""$#"
- at 30BB2AAXX080903:3:35:1387:1147#0
-GGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGATTGAGTAAACGGCTAGGCTAGAGGTGGCTNGTGTCCTN
-+
-67777788888888888888888877776455443221200//..--+,,+,+**#)(*())#((##""#"#%#""
- at 30BB2AAXX080903:3:46:1466:853#0
-CAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGATTGAGTAAACGGCTAGGCTAGAGGTGGGTCCGACG
-+
-67777788888888888888888877776555443222100//..---,,++++***)))(((((#'""$"""###
- at 30BB2AAXX080903:3:35:1334:961#0
-TCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACNTCTCACAN
-+
-67777788888888888888888877776555443222100//..-,-,,,,+**)***))))((((""%"%$$$"
- at 30BB2AAXX080903:3:35:1246:1254#0
-GATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGATTGAGGAAACGGCTAGGGTAGAGNTCACGACN
-+
-67771788888888888882888877776/55433021100//..---,(+,+*+*())()%''(&("&$"""#""
- at 30BB2AAXX080903:3:40:1269:66#0
-AGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGAC
-+
-67777788888888888888888877776555443222100//,..--,,+++***)*))))((((%'&&&%$##"
- at 30BB2AAXX080903:3:60:1158:624#0
-GCCGATCAGGGCGTAGTTTGAGGTTGATGCTCACCCTGAGCAGAGGATTGAGTAAACGGCTAGGCTACGGACATNN
-+
-677707888888888888888888777765514432221-0//..-+(,,++***)))))('(((%%&$&#$##""
- at 30BB2AAXX080903:3:51:1139:37#0
-GCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTAAAACTACGACCTGACGCGAC
-+
-6777778888888%888888&883677765558/3+22000//.--,,+,+++*&'&**)&(((''%%$$$"#""$
- at 30BB2AAXX080903:3:46:244:1146#0
-CACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGCNCNACGCA
-+
-67777788888888888888888877776555443222111/..-.-,,-++++****)(())((('""$"#""#"
- at 30BB2AAXX080903:3:47:1351:859#0
-CACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCCGTTGC
-+
-6777778888888888888888887777655544322210///..---,,+++**))*)))()('('%"#$#"""#
- at 30BB2AAXX080903:3:55:1138:827#0
-CACCTCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCAGACCGTCAGCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()('''$&#"$""$#
- at 30BB2AAXX080903:3:38:518:1814#0
-GTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGATTGAGTAAACGGCTAGATATCCACC
-+
-67777788888888888888888877776555443111100/..---,,,,,++***)))%))((('$""""$###
- at 30BB2AAXX080903:3:36:807:1447#0
-CGCTAGCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCTCTCATCCN
-+
-27777788888/88%888888888477;555-443222100*/.)---,,,,+*****))'(()(%'$""""$##"
- at 30BB2AAXX080903:3:45:740:1376#0
-CTCGCAGTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGAGTGAGTAAACGTCGCTCCC
-+
-677777888888888888888885774765553432211//..-,.,-,+*)+)*)*'*)()(('(&'"#"#"#""
- at 30BB2AAXX080903:3:58:504:906#0
-GCCTAGCCGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACAGTCTNC
-+
-67777788888888888888888877776555443222100//..---,,+++**+)*)))))(('''&"%#%#"%
- at 30BB2AAXX080903:3:48:1645:1176#0
-CGTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCCGGCAGA
-+
-67777788888888888888888877776.55443222100//..---,,++++)*&))))((((''%$##"$"""
- at 30BB2AAXX080903:3:42:712:768#0
-GTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGAGATCGGAAGAGCGGGTCCCT
-+
-67777788888888888888888897776555443222100//..-.-,-+++***)*)*)(((((''&"""""#"
- at 30BB2AAXX080903:3:54:983:949#0
-GTTTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGCAGCCA
-+
-67777788888888888888888807776555443222100//..--,-,+++*+)))))*)()'('$$##""##"
- at 30BB2AAXX080903:3:35:998:187#0
-TGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGANCACTCGNN
-+
-6777778888888888888888887777655544322210//...-.-,,+++*****))))(((('"$"$%$"""
- at 30BB2AAXX080903:3:51:1409:130#0
-TTACTCAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTACGCCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&$"##"#%$$
- at 30BB2AAXX080903:3:34:1052:353#0
-TTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGATCAGAGGNCACCACNN
-+
-6777778888888888888888887777455544(22-.00//-,---,-,,**)))')(()(((''"$"%#"#""
- at 30BB2AAXX080903:3:50:400:131#0
-ATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGACCAGATCGGTA
-+
-6777778888888888888888887777652544322210,/...-.-,,,+*+**)*))()(((%'&$"##"""#
- at 30BB2AAXX080903:3:58:276:1628#0
-AATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGATCGTGTACNN
-+
-6777778588888888888888887777655541322210///-.---,,++++*)))))')((('&%%%#"##""
- at 30BB2AAXX080903:3:54:851:860#0
-TGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTGAGTTTGATGCTCACCCTGACTCGACT
-+
-67777788888888888888888877776555443222100//..---,,,+++****)))()((''""#"%$##$
- at 30BB2AAXX080903:3:52:74:167#0
-GATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTTCTATGA
-+
-6/777788888888888888888677766555443522100//..---,+++*+***(()(''((%'%"""$%$##
- at 30BB2AAXX080903:3:3:584:1249#0
-GGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATCNCTCTNCA
-+
-67777788888888888888888877776555443222100//.---+,,,++**+()))(((((('%"%#$$""#
- at 30BB2AAXX080903:3:4:1598:1342#0
-GGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATNCACANTN
-+
-67777788888888888888888877776555443222100//-..--),++++*))*)))((((''"""%%#"""
- at 30BB2AAXX080903:3:41:1633:1661#0
-GTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATCNAACACCA
-+
-67777788888888888888888877776565443222100/..,--,,,++++)*))*)')()(&&$"&#%%###
- at 30BB2AAXX080903:3:50:826:732#0
-TGAGCATCAAACTAAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATGCAGTGCCCA
-+
-67777788882088888488788%4,774355443220100//..,)-,++,+*+)*)('(((('''$""""###"
- at 30BB2AAXX080903:3:2:113:1930#0
-AGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTAGATCNGAANNCC
-+
-67777788888888888888888877776555443222100//-...-,,,+++*)))())()((''%"##$"""#
- at 30BB2AAXX080903:3:38:1243:686#0
-AGCATCAAACTCAAACTACGCCCTGATCGGCGCATTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTA
-+
-6777778888888888888888887777655544%2221/0//..--,,-*+)**)))&))()((('$%%#"##"$
- at 30BB2AAXX080903:3:33:931:339#0
-CATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGCNGAAGTANN
-+
-67777788888888888888888877773555443222100/....--,,+,++)))))()(((((#"$""#""""
- at 30BB2AAXX080903:3:8:933:903#0
-GCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGTAGTTTGNTGATCANN
-+
-67777788888888888888848877776551443522100/..,---+,+'*+**)*)))((('(&""""#$$""
- at 30BB2AAXX080903:3:45:774:1556#0
-ATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCCGGGCGGAGGTTGGGGGTG
-+
-67777788881888888888888877776553442-2-.0+/-.,.,),+,)++'&&'())'(%%'%$"###""##
- at 30BB2AAXX080903:3:45:1579:1487#0
-GATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAGGGCGGAGCGTCTCGGC
-+
-67777788888388888888888877776552443202100/.#.+,-',++**+)))())(&(#''"""""$##"
- at 30BB2AAXX080903:3:8:493:653#0
-TGATGGCTAGGGAGACTTCATATGAGATTGTTTGGGTGACGGCTAGCAGTGCGCCGATCAGGGCGTANGTGCACNN
-+
-67/77788/88888.888888828777&65400432#'00#/.-%-,,,++$++*)'))()(('(##"$%"#"#""
- at 30BB2AAXX080903:3:40:1759:1633#0
-TCAAACTACGCCCTGATCGGCGCACTGCGAGCAGAAGCCCAAACAATCTCATATGAAGTCACCCTAGCCCTCATCC
-+
-6777778888888888888888887777655544%22/100./-,,,,+,++******)()(((&''&$#"&#$##
- at 30BB2AAXX080903:3:51:260:64#0
-TCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATAAGATCGGAAGAGCGACTCACAGC
-+
-6777778888888888888888887777605544122210//....--,,,++**)))*)(((''('$$"$"#""#
- at 30BB2AAXX080903:3:44:617:788#0
-AGAATGATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCAAGATCGGCAGAT
-+
-677777888888888888888888777765554430/010///.----,,,+****)*))('(('('"$%"#"""#
- at 30BB2AAXX080903:3:46:1778:1895#0
-AGTAGAATGATGGCTAGGGCGACTTCATATGAGATTGTTTGGGCTACTGCTAGCAGTGCGCCGATCAGGGCGGACG
-+
-6777778888888888888&808877276555403220100//-.-.-,-,%++*+))(*(')(&('&%"""""$#
- at 30BB2AAXX080903:3:46:1138:1080#0
-TACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCATCACGATAGGGC
-+
-67777788888888888888888877776555443222100//..---,,+++***(*)))((('(&$""""$#""
- at 30BB2AAXX080903:3:54:1693:1483#0
-GATAGTAGAATGATGGCTAGGGGGACTTCATATGAGATTGTTTTGGGTAGTGTTTGCAGTGGGCGGCACCACAAAA
-+
-677777888888888888888888+'07$(5144'2021001/..-(-+$++)'()'&)()'(#'&&$""%%#%$$
- at 30BB2AAXX080903:3:57:1304:99#0
-GATAGTAGAATGATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCCGATCGCATACA
-+
-67777788888888888888888877776555443222100//..---,-+++****))())(((('&&%$$#$##
- at 30BB2AAXX080903:3:57:436:1523#0
-GCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCATCAGATCGACAACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(''$""""$"$
- at 30BB2AAXX080903:3:60:1189:842#0
-GCCCTGATCGGCGCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTGCTNN
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))()((('&&&""#"""
- at 30BB2AAXX080903:3:3:197:106#0
-TGTTGATAGTAGAATGATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGTGCGCNCTCTNCN
-+
-67777788888888888888,88877075+55.4322200///,.--,+,$++)*)'*')#((((%'%"$"$$"""
- at 30BB2AAXX080903:3:43:1473:1994#0
-TTAGTAATGTTGATAGTAGAATGATGGCTAGGGTGACTTCATATGAGATTGTTTGGGCTACTGCTCGCAGGCGTAC
-+
-677777888888888888888888777765554-32+2101//.-----,+,+**)*()*()('(&'&"%""""""
- at 30BB2AAXX080903:3:55:1000:594#0
-AAGGAGCCACTTATTAGTAATGTTGATAGTAGAATGATGGCTAGGGGGACTTCATATGAGATTGTTTAGTCTGCCT
-+
-6777778,88888888888888887777655544322210/....-&,++++'***)(*))(((&('$&&%####"
- at 30BB2AAXX080903:3:39:581:875#0
-CAAACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGGAGATCCGAGNNACA
-+
-67777788888888888888888877776555443212100//./---,,++++*****())((('#%%$$"""#$
- at 30BB2AAXX080903:3:60:755:728#0
-TCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGGAGATCGGAAGAGCCGAGCANN
-+
-67777788888888888888888877776555343222100//.----,-+,+**+))))))'(((&%$$#"##""
- at 30BB2AAXX080903:3:46:812:103#0
-AGGGTGGAGAGGTTAAAGGAGCCACTTATTAGTAATGTTGATAGTAGAATGGTGGCTAGGGGGACTTATCATGCAC
-+
-67771788888888888888888877776555433220100/..'.-,,,,&++**)()')#(('''$$#&%##"$
- at 30BB2AAXX080903:3:56:346:816#0
-CATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGGCTCCTTTAACCTCTCNANGCCGAG
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))())'('"$"$#""""
- at 30BB2AAXX080903:3:58:1400:783#0
-TGTTGTGATAAGGGTGGAGAGGTTAAAGGAGCCACTTATTAGTAATGTTGATAGTAGAATGATGGCTATGTGCACA
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))(((''''$%$"#$$$
- at 30BB2AAXX080903:3:51:1292:1678#0
-GGTGTTCTTGTGTTGTGATAAGGGTGGAGAGGTTAAAGGAGCCACTTATTAGAGATCGGAAGAGCGGGCTACACGG
-+
-67777788888888888883888877776555141122100',-/.--,,+++***)))(()'(#(%&$#"$"#""
- at 30BB2AAXX080903:3:37:893:2005#0
-ACATTACTAATAAGTGGCTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTCCGCN
-+
-67777788888888888888888877776555443222100//...,-,,+++****()()()(((%$$#"#""$"
- at 30BB2AAXX080903:3:41:757:1851#0
-GGTCATGATGGCAGGAGTAATCAGAGGTGTTCTTGTGTTGTGATAAGGGTGGAGAGATCGGAAGAGGCGTCGTCTG
-+
-6777778888888888888888887777655644322210///.----,,+++***))'))((('(&"#"#""#""
- at 30BB2AAXX080903:3:36:1663:1725#0
-AGTGGCTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTAGATCGGAAGAGCGACACACCNN
-+
-677777888188888888838888777765/124321/101/,,,.--+,,++++*)(*)()(((&%$%#%$##""
- at 30BB2AAXX080903:3:59:875:111#0
-CCAAGGGTCATGATGGCAGGAGTAATCAGAGGTGTTCTTGTGTTGTGATAAGGGTGGAGATCGGAAGAGNTCGNNC
-+
-67777784888888888888885877706/55141220100/...,-,,,,++*'*))*)('(((&("'"&#"""#
- at 30BB2AAXX080903:3:45:766:806#0
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTCTGACGTC
-+
-677777888888818888888888777765554432211/0//..---,,+++******))((((''$""%"##""
- at 30BB2AAXX080903:3:46:1738:718#0
-TAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAACAGGC
-+
-67777788888888888888888-77776555443222100//...--,-++*+**))&))((((('%"""##"#"
- at 30BB2AAXX080903:3:36:1402:1172#0
-ATCATATTATGGCCAAGGGTCATGATGGCAGGAGTAATCAGAGGTGTTCTTGTGTTGTGATAAGGGACTTCCAANN
-+
-67777788888888888888888877776555443222100//.----,,+++***)*))))(('(#""####"""
- at 30BB2AAXX080903:3:2:1332:266#0
-CAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACANCACTTAC
-+
-6777778888888888888888887777655544322200.0./.,---,+++***)**))((((''&"%&%%#$$
- at 30BB2AAXX080903:3:58:1140:1308#0
-CAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTCAACAC
-+
-67777788888888888888888877776555443222100//..---,,+++**+))))))()('''&&"#"$$$
- at 30BB2AAXX080903:3:57:1582:1227#0
-AACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACAGCACGCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&$"$#$"#$
- at 30BB2AAXX080903:3:40:411:219#0
-TCTCTGCTAGTGTGGAGATAAATCATATTATGGCCAAGGGACATGATGGCAGGAGGAATCAGATCGGCAGCAACTC
-+
-6777778888888888888888887777655544502210,/...,-,,++++**&**)(()((#('""##""$##
- at 30BB2AAXX080903:3:57:176:179#0
-CACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTCGCGCTGCT
-+
-677407888888888888888888/7776/521422220/./..-,,+,,,++))*))((()'(((&"&"#$#""#
- at 30BB2AAXX080903:3:33:1434:1349#0
-ACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTANCACCACNN
-+
-67777788888888888888888877776+5544321-*000..),-,,,,+**+**))((((('''"%"%###""
- at 30BB2AAXX080903:3:49:336:2003#0
-AGAACACCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGTGCGTCAC
-+
-677777888888888888888888777765554232210/0//..----,+++***))))*(()('&%""#""##"
- at 30BB2AAXX080903:3:57:290:487#0
-TTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCAAGGGTCATGATGGCAGGAGTAATCGTACACT
-+
-677777888888888888888.8877476555443222100//..---,,+,+***)))()((('('"$$"#""##
- at 30BB2AAXX080903:3:56:183:1089#0
-CCTCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCTATCCGTAT
-+
-6.777788888888888888888877776555443202100/...,--,,++*+*+*()('((''%'"%$#$#"#"
- at 30BB2AAXX080903:3:43:951:339#0
-TCTGATTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGTACCCC
-+
-67777788888888888888888873776555443222100//..---,,+++++*)*))())(((''&&$&%#$%
- at 30BB2AAXX080903:3:1:550:1202#0
-TGATTACTCCTGCCATCATGACCTTTGGCCATAATATGATTTATCTCCACACTAGCAAGATCGGAAGANTTNCTCA
-+
-67777788888888888888888877776555443222100//..---,,,++++**))()((((''%""""#"##
- at 30BB2AAXX080903:3:54:543:1397#0
-AGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCAAGGGTCATGATGGCAGTATCACACA
-+
-67777788888888888888888877776555443222100//..---,,+,+*****))))((((&""##"""#"
- at 30BB2AAXX080903:3:3:639:1901#0
-TTACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACNCTCNNCG
-+
-67777788888888888888888877716/458431221///...---,,+++++)))())(((('''"%"%""$$
- at 30BB2AAXX080903:3:55:1379:247#0
-TACTCCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCGTCTAGA
-+
-67777788888888888888888877776555443222100//...,*,,+++***)**))())'''$&"%"#$##
- at 30BB2AAXX080903:3:2:580:1613#0
-CCTGCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCATNCGATCAC
-+
-677777888888888888888888777795.5432%1111//.--.,+-+++***)'(((((&#((%$""&""$#"
- at 30BB2AAXX080903:3:52:312:609#0
-GCCATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTTCGACCTTGCC
-+
-67777788888888888888888877776550443222100/0..--,,,,+++**)))))))('('""#%%$$#%
- at 30BB2AAXX080903:3:51:1576:590#0
-ATCATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTTCGACACATCACAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''%"$"#""#"
- at 30BB2AAXX080903:3:33:1090:1081#0
-CTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCAANGACAGCNN
-+
-67777788888888888888888877776555443222101//..---,,,++***)))))((((('""$$""#""
- at 30BB2AAXX080903:3:40:1107:597#0
-CCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCACGTGTGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))(((((($&$$&""#"
- at 30BB2AAXX080903:3:48:355:1061#0
-CCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCAAGGGCGTCG
-+
-67777788888888888888888877776555443222100///.---,,,,****)*)))))((''"$"""""#"
- at 30BB2AAXX080903:3:47:1382:373#0
-CCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAATCATATTATGGCCCTGGTGCG
-+
-6777778888.888%88/88888808776$55420211111-.-.+-,,-,++**)'))(((((('&$"#$&%"##
- at 30BB2AAXX080903:3:47:299:1095#0
-ACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTTCGACAGATCGCAACATACN
-+
-67777788888888888888888877776555443222100//...,-+,,++*****))))(((('$""##"##"
- at 30BB2AAXX080903:3:33:284:815#0
-CTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAGTGTGGAGATAAANTGCTCTNN
-+
-67777788888888888888888877776555443212100//..---,,+++***))))(((((('"%"&"$"""
- at 30BB2AAXX080903:3:52:302:1822#0
-TGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTAAGATCGGAAGCGCGTAC
-+
-67777788888888888888888877776555443122100'/..---,,+++****)*())(((('""$"#"""#
- at 30BB2AAXX080903:3:45:1717:41#0
-CTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGGTGGTCTCTGCTAGTGTGGAGAGAACTCT
-+
-6777778888888888888888887777+555,433/2100/#...-#+,,'*))'))('(#(%((&$""""%"#"
- at 30BB2AAXX080903:3:1:360:790#0
-GTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCTANACNCTCG
-+
-6777778888888888888888807777655544321210.*/,,---,,)++**)**)('('((''%""$"###"
- at 30BB2AAXX080903:3:34:672:452#0
-TCCACACTAGCAGAGACCAACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGNACAGATNN
-+
-67777788888888888888888877776555443222100//-.---,,+++**()*)))'((((&"#&#""#""
- at 30BB2AAXX080903:3:34:569:1444#0
-TTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCNCGCACANN
-+
-67777788888888888888888877776555443222000/...-,-,&+++***%)'))((((%%"$#$###""
- at 30BB2AAXX080903:3:56:1060:539#0
-TTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCGCGTCCACT
-+
-67777788883888888888/88876276362343201110/--..,-,,+,+***')()(((((''$$"#"$##"
- at 30BB2AAXX080903:3:40:961:755#0
-ATTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGTTCGGTTGGTCTCTGCGAG
-+
-67777788888888888888888877776555443222100//.-----,+++***)&))))((((''%&$&$%""
- at 30BB2AAXX080903:3:43:266:2030#0
-ATTCGATGTTGAAGCCTGGGACTAGTTCGGCCTCCCCTTTGGCAAGGTTGAAGGGGGTTGGGGTGTTCTCTCTTCT
-+
-67307/-8./3828)+3&&&%'3$7#$$0$$(.&'%'+%#1$&(%,"&$+($%&#&#&%#'&#%%#%$"#"#""#"
- at 30BB2AAXX080903:3:55:86:651#0
-CAGAGACCAACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATAGGTGACTG
-+
-677777888888888888888888.77+15554(/2121(0*/..(-,+,+**))))*'#('''''#"$""""$""
- at 30BB2AAXX080903:3:49:933:647#0
-GGCGTATTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGGGGGTCGGGTGGTGTCA
-+
-67777788888888888888888877776555443222100/...---,,,+*)*))*)))(#(&('"$""##"#"
- at 30BB2AAXX080903:3:2:590:615#0
-GAGACCAACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTAGATCGGAAGNTCGACAT
-+
-677777888888888388888888178763533432211%.-/,.*,-+,+++*))))))((((('%"""$""#"#
- at 30BB2AAXX080903:3:2:1689:858#0
-ACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCNCAGACAC
-+
-677777888888888888888888.77765454112..101/+,-+,--+)*)(*()())((#(#'#'"$%""$##
- at 30BB2AAXX080903:3:2:769:1501#0
-ACCGAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAGATCGGCNCAGCACC
-+
-677777888888888888888888377765453432,2100/....,--,,++)*)*()))))((''$"$"##$"#
- at 30BB2AAXX080903:3:51:707:913#0
-AGGGGCCTGCGGCGTATTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGAAGGACACGGC
-+
-6777778888888888888888887775655544322210///...-+,,+,+++*)*))))(('''$$"#"""##
- at 30BB2AAXX080903:3:54:1582:1694#0
-GAACCCCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGACACAAACAC
-+
-67777788888888888888888877776555443222100//..-,-,--++**)))*)))((((#""$$""##"
- at 30BB2AAXX080903:3:39:331:714#0
-GAAGGGGCCTGCGGCGTATTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCCTTCGGCAAGGTCGTACGCGGTC
-+
-677777888888888888888888777765518430210/0/..,---,-++*(**)))&''((&('"$%#$"###
- at 30BB2AAXX080903:3:38:249:793#0
-CCCTTCGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCAAATACGCAGATCGGACGANTCCGC
-+
-67777788888888888888888877776555443222100//..---,,++++***))))))((('$"$""$#"#
- at 30BB2AAXX080903:3:54:708:204#0
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGGCAGATCGGAAGACTGG
-+
-67777788888888888888888077776555443222100//..----,+++***))*))))((('%"$$&"#""
- at 30BB2AAXX080903:3:54:214:523#0
-TATGAAGAATAGGGCGAAGGGGCCTGCGGCGTATTCGATGTTGAAGCCTGAGACTAGTTCGGACTCCCACTCTNNA
-+
-6777778888888888888888887777655044322-100//-/--,,,++****)()))((''('&#$#$#"""
- at 30BB2AAXX080903:3:1:1102:327#0
-GTGCGTCATATGTTGTTCCTAGGAAGATTGTAGTGGTGAGGGTGTAGATCGGAAGAGCGGTTCAGGAGNACNCACA
-+
-677777888888888888888882771765704832,2.00/*.---,,(,++**)*$))('#''##"""#"##$#
- at 30BB2AAXX080903:3:56:1357:1782#0
-GTAGAGTTCAGGGGAGAGTGCGTCATATGTTGTTCCTAGGAAGATTGTAGTGGTGAGGGTGTTTTTTATGCATGTG
-+
-67777788888888888888888877776555442(2.10/1/-.--++,+++**&)*)()((('%''$%""""""
- at 30BB2AAXX080903:3:41:1287:1411#0
-TGTTGTGTAGAGTTCAGGGGAGAGTGCGTCATATGTTGTTCCTAGGAAGATTGTAGTGGTGAGATCGACACACAGT
-+
-67777788888888888888788877779555443222,00./..-,+,++*++**))*#)(()(&'"%"""##""
- at 30BB2AAXX080903:3:39:930:806#0
-ATAATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACCCACACT
-+
-67777788888888888888888877776555443222100//..---,-+,+++**))))()((('&%"$$%#$"
- at 30BB2AAXX080903:3:3:1691:216#0
-AATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTAACNTCACNCN
-+
-67777788888888888888888877775555443022/00//..--,,,+*+*))())))(((('#""#&%$"$"
- at 30BB2AAXX080903:3:45:288:117#0
-GGTGACAAAATATGTTGTGTAGAGTTCAGGGGAGAGCGCGTCATATGTTGCTCCTAGGAAGATTGTAGCGGGGACG
-+
-677777888888888888888888377765554422%2100/,.,---,,)++)*)*)(()(((('''"&$"#"#"
- at 30BB2AAXX080903:3:56:434:1429#0
-ATAAGAACAGGGAGGTTAGAAGTAGGGTCTTGGTGACAAAATATGTTGTGTAGAGTTCAGGGGAGAGCGCCGACTC
-+
-6777778888888883888/78(877726555443222/0./*....-,,++++*)*#()))((((&&%#"""$##
- at 30BB2AAXX080903:3:42:941:637#0
-GACGCACTCTCCCCTGACCTCTACACAACAGATTTTGTCACCAAGACCCTACTTCTAAACTCCCCGAGATCGTGTC
-+
-677777888888888888888+88777765)54433221/0//-.,-,,+*++)+*)'&))(((%(%'"&$&#"""
- at 30BB2AAXX080903:3:52:368:1328#0
-AATTCATAAGAACAGGGAGGTTAGAAGTAGGGTCTTGGTGACAAAATATGTTGTGTAGAGTTCAGGGGAGTGTGTG
-+
-67777788888888888888888877776555443222100//.----,,+++***)))))()('(&$""#%#"#"
- at 30BB2AAXX080903:3:4:17:1568#0
-GCACTCTCCCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTNCACTNAN
-+
-677777888888888888881388737/655+442020+&0/.-,-,+,,+++***)))((((#(('"""%%#"#"
- at 30BB2AAXX080903:3:3:1410:1627#0
-CCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAGATCNTGTCNCA
-+
-67777788888888888888888877776555343222100//...,-,,+,+**)*))()))((('%"""$%"##
- at 30BB2AAXX080903:3:51:182:1380#0
-TATGCTGTTCGAATTCATAAGAACAGGGAGGTTAGAAGTAGGGTCTTGGTGAGATCGGAAGAGCGGTCTGGACGGG
-+
-67777788888888888888888877776555443222100//-.---,-+,+***))))))((''&"""#"$$#"
- at 30BB2AAXX080903:3:54:1684:449#0
-AATCGGGGGTATGCTGTTCGAATTCATAAGAACAGGGAGGTTAGAAGTAGGGTCTTGGTGACAAAACACACCCCCC
-+
-67777788888888888888888877776555443222100//..---,,++*+**)))))'(('''$$%%&#%##
- at 30BB2AAXX080903:3:56:514:1143#0
-CACAACATATTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCAGATCGGTCTCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()'('&&#"#"#""
- at 30BB2AAXX080903:3:33:472:1744#0
-AACATATTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCNACTGACNN
-+
-67777488888888888888888877776555443222100//..----++++**+)*)())()'''"$#"""#""
- at 30BB2AAXX080903:3:56:1302:1160#0
-TTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCGTATGAATGCGAACAGCATACCCCCGATTCCGCTCCTATCA
-+
-+7777788888888888888888877776555143-2110///,--+-,,,*++**(())(('(('''&"""#"#"
- at 30BB2AAXX080903:3:38:1192:1538#0
-TGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGCTCCGCCACT
-+
-67777788888888888888888877776555443222100//..-.-,,+++***)**)(())(''"%%&"%#$"
- at 30BB2AAXX080903:3:47:1447:272#0
-GGTGTATGAGTTGGTCGTAGCGGAATCGGGGGTATGCTGTTCGAATTCATAAGAACAGGGAGGTTAGAAGTACAAA
-+
-67777788888888888888888877776555343222100//..---,,+,+***))))(((#(('"$%"%#"""
- at 30BB2AAXX080903:3:59:1028:1126#0
-TCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGCTACGACCAACTCATACACCAGAACAAC
-+
-67777788888888888888888877776555443222100/...---,,,+++***)))))((('''%&#$%#$%
- at 30BB2AAXX080903:3:48:306:121#0
-CCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGCTACGACCAACTCATACACCTCCTATAGATCGGCCTC
-+
-67777788888888888888888877776555443222100//..---,-,,++***))))))((''$"#"###"#
- at 30BB2AAXX080903:3:2:1679:1728#0
-AGTAATGCTAGGGTGAGTGGTAGGAAGTTTTTTCATAGGAGGTGTATGAGTTGGTAGATCGGAAGAGCNGTCACGC
-+
-677777888888888888888888777365554632/21-0/).-.,-,,+,+*)*)()())(((''""&%%$%""
- at 30BB2AAXX080903:3:38:1062:1120#0
-ACATATCATATAAGTAATGCTAGGGTGAGTGGTAGGAAGGTTTTTCATAGGAGGAGGATGAGGTGGGCGCGTACAC
-+
-6777778888888888888888887)776055)432221&0'/..+*-,-,)+*++#()()(&((('%&$&$%%$$
- at 30BB2AAXX080903:3:38:1783:1571#0
-ACTTCCTACCACTCACCCTAGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCGCTGCNN
-+
-67777788888888888888888877776555443222100//..---+,+,+**)*))))((((''"%&%%##""
- at 30BB2AAXX080903:3:38:1542:47#0
-TTGAGGGGGAATGCTGGAGATTGTAATGGGTATGGAGACATATCATATAAGTAATGCTAGGGTGAGCGACTCCTNN
-+
-677777888888888888888880777765.2443222200//--.-+-,,(++)*()())(#(&(%$"####"""
- at 30BB2AAXX080903:3:59:497:1419#0
-TACCACTCACCCTAGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCCCACACCAA
-+
-67777788888888888888888877776555443222100//..---,,-++++)*)))))((('%$%%%&###"
- at 30BB2AAXX080903:3:50:482:707#0
-ACAATCTCCAGCATTCCCCCTCAAACCTAAGAAATATGTGTGATAAAAGAGATACATAAGATCGGACTANGTCNCC
-+
-67777788888188.888888/3877676555/&3.221$-/../+,,,+,'+)+)'((''%('((%$""""#""#
- at 30BB2AAXX080903:3:55:650:1997#0
-CAGGGATGGGTTCGATTCTCATAGTCCTAGAAATAAGGGGGTTTAAGCTCCTATTATAGATCGGAAGAGGCTCACA
-+
-67777788888888888888888877776555443222100//..--,,-,++***)*)))((((('$$##""##"
- at 30BB2AAXX080903:3:44:969:356#0
-TGGGGTGTGATAGGTGGCACGGAGAATTTTGGATTCTCAGGGATGGGTTCGATTCTCATAGTAGATCGCACGGGGG
-+
-67777088888888888888888877776555443222100/...--,,,+*+***)*))))(((''$%%$##""$
- at 30BB2AAXX080903:3:50:808:914#0
-TGGGGTGTGATAGGTGGCACGGAGAATTTTGGATTCTCAGGGATGGGTTAGATCGGAAGAGCGGTTCCGGGCACAC
-+
-67777788888888888888888877776555443222100/...--,,,++++****))))((((#$""#%##""
- at 30BB2AAXX080903:3:52:1386:822#0
-TCTAGGACTATGAGAATCGAACCCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCGCACTAAAA
-+
-6777778888888883818883.7472195224,-2,.0.,./.,-+*,(+()**)))(()(('''%"$"$$#"""
- at 30BB2AAXX080903:3:55:1477:58#0
-TGAGAATCGAACCCATACCTGAAAATCCAAAATTCTCCGTGCCACCTATCACACCACATCCAAAAGTCACCACATC
-+
-6777778888888888888888$/7777655544*20%1*///..---,++++*&'))()(('(('&%$##%#"""
- at 30BB2AAXX080903:3:58:1529:1803#0
-TGAGAATCGAACCCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAAGTACACACACN
-+
-67777788888888888888888877776545442221100//..---,,,++***)))((((((''$$%%&$%$"
- at 30BB2AAXX080903:3:35:1476:870#0
-CGAACCCACCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAAGTAAGGTCANCTATACAN
-+
-67777788.888888888888888777765552432220/0//-.--,,-+++***)))'((('(('"$##"##""
- at 30BB2AAXX080903:3:2:1724:866#0
-GCCCGATAGCTTATTTAGCTGACCTTACTTTAGGATGGGGTGTGATAGGTGGCACGGAGAATTTTGGANTCTCAGT
-+
-67777788888888888888888877776555441222101//..-,,,,+++++*)*)((((((('""##%"##"
- at 30BB2AAXX080903:3:56:221:1234#0
-GGGCCCGATAGCTTATTTAGCTGACCTTACTTTAGGATGGGGTGTGATAGGTGGCACGGAGAAGATCNGATCACAG
-+
-67777788888888888888888877776555443222100/..----,,+(+***)))()'(((&#"&#"#"#""
- at 30BB2AAXX080903:3:46:97:808#0
-TCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAAGTAAGGTCAGCTAGATCGGAAGAGCGGTTCAGCAGG
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))(((('&"$%$"%###
- at 30BB2AAXX080903:3:49:143:968#0
-CCGTGCCACCTATCACACCCCATCCTAAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGATACAGCCT
-+
-67777788888888888888888877776555443222100//..----,+++*****)))))((''&""$$"##"
- at 30BB2AAXX080903:3:37:1630:1699#0
-GGGTATAACCAACATTTTCGGGGTATGGGCCCGATAGCTTATTTAGCTGACCTTACTTTAGGATGGGGTGNGTCTN
-+
-67777788888888888888888877776555443222100//..--,,,,++***)*)))(()'''&"#"""#""
- at 30BB2AAXX080903:3:37:114:382#0
-TACGGGAAGGGTATAACCAACATTTTCGGGGTATGGGCCCGATAGCTTATTTAGCTGACCTTACTTTACGACGACN
-+
-67777788888888888888888877776555443222100//...--,,+++***)))))((((''"$""###""
- at 30BB2AAXX080903:3:37:782:1187#0
-TACGGGAAGGGGATAACCAACATTTTCGGGGTATGGGCCCGATAGCGTATTTAGCTGACCTTACTTTACTGGTCTN
-+
-677777888883888888888888777765564132221/0.-.-+*+,,*+++)))('(((#'('%&$""$#"#"
- at 30BB2AAXX080903:3:44:398:1834#0
-TACGGGAAGGGTATAACCAACATTTTCGGGGTATGGGCCCGATAGCTTATTTAGCTGACCTTAGATCGGAGGGGTG
-+
-67777788888888888888888877776555443220000//-..---,+++****)&())()((''$"$$""""
- at 30BB2AAXX080903:3:49:1304:1225#0
-AGTACGGGAAGGGTATAACCAACATTTTCGGGGTATGGGCCCGATAGCTTATTTAGCTGACCTTACTTNCGTGTTG
-+
-67777788888888888888888877776555443221101./-,--+-,+++*'*#))'&'(('%'""#""""""
- at 30BB2AAXX080903:3:34:1217:760#0
-CCTAAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCNCCACTGNN
-+
-67777788888888888888888877776555443222100//./-,-,,,++***)))*())((('""$$$""""
- at 30BB2AAXX080903:3:2:1190:1755#0
-AAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACNCNTACTC
-+
-67777788888888888888888827776552431221210..+.-.&+,+***)))))('('((%'&"$"$%$"#
- at 30BB2AAXX080903:3:37:127:1197#0
-CCAGGGGATTAATTAGTACGGGAAGGGTATAACCAACATTTTCGGGGTATGGGCCCGATAGCTTATTGCGTCGCGN
-+
-67777788888888888888888877776555413222100//..--,-,++++**)*)))((((''"#"#$"#""
- at 30BB2AAXX080903:3:53:815:1479#0
-GTTGGGCCAGGGGATTAATTAGTACGGGAAGGGTATAACCAACATTTTCGGGGTATGGAGATCGGAAGAGCGGTCT
-+
-67777788888888888888888877776555443222000./..----,++++*+)))))))('('%"##%""#"
- at 30BB2AAXX080903:3:60:1572:1261#0
-ACGGGTTGGGCCAGGGGATTAATTAGTACGGGAAGGGTATAACCAACATTTTCGGGGTATGGGCCCACACACCANN
-+
-67777788888888888888888877776555443)21000//-.-+-,,++)***)*)()((('(&$$%%%$%""
- at 30BB2AAXX080903:3:53:974:411#0
-TCGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTGCTCTCCC
-+
-677777888888888888888808777765554432/2001//.----,-+++****))))((((('&""$$$"##
- at 30BB2AAXX080903:3:41:1700:2012#0
-CGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAAGATCGGACGAGTAT
-+
-6777778888888888888888887677650323330/2.0-/,.--,,,*&)(&))((#''((##%""#%"#"#"
- at 30BB2AAXX080903:3:39:1604:1566#0
-GCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTGTCG
-+
-67777788888888888888888877776559443222100//..---,,++**+**))()))((('&&%$%%"#"
- at 30BB2AAXX080903:3:40:1332:1875#0
-CCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATACATCGGACA
-+
-67777788888888888888888877776555443322100//..-,,-,++++**)))()((((('$#%%%""#"
- at 30BB2AAXX080903:3:59:822:1068#0
-GATGGTAGAGTAGATGACGGGTTGGGCCAGGGGATTAATTAGTACGGGAAGGGTATAACCAACATTTTCGTACACA
-+
-67777788888888888888888877776555443222100//..---,,++++**))*)))((((''%%"####"
- at 30BB2AAXX080903:3:4:1780:1038#0
-TTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCANGCATNCN
-+
-67777788888888888888888877776552423222100//..,-,,,,++*+*))*))()((''%""%#$"$"
- at 30BB2AAXX080903:3:43:1381:1551#0
-GGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACATG
-+
-6777778888888888888888887777655544322210///..---,,+++**)**)))))(((''&#$"#""#
- at 30BB2AAXX080903:3:4:1540:592#0
-TATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACNATCANCN
-+
-677777888888888888888888777765554432202000/..---,,+,+****))))(()(('&"#%&%"#"
- at 30BB2AAXX080903:3:35:520:1418#0
-ATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACNTCCCCTCN
-+
-67777788888888888888888877776555443202100//..---,,,+++**)*))))))(('"##$####"
- at 30BB2AAXX080903:3:41:1560:357#0
-TTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGAGATCGGAAGAGCGGCCAC
-+
-67777788888888888888888877776555463222100//.---,-,++++****)()()('(('$""""###
- at 30BB2AAXX080903:3:50:731:455#0
-GGTAAAAAATCAGTGCGAGCTTAGCGCTGTGATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGTGTTGTAC
-+
-67777788888888888888888877776555443222100//..--,,,+++****))))))((('%"""""#"#
- at 30BB2AAXX080903:3:45:630:1978#0
-ACTCAGGTAAAAAATCAGTGCGAGCTTAGCGCTGTGATGAGTGTGCCTGCAAAGAAGATCGGAAGAGGTGTCTAAC
-+
-67777788888888888888888877776555443212100//..---,,++****)*)()(((((''"""#""""
- at 30BB2AAXX080903:3:40:119:1851#0
-CCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACGTGAGTACG
-+
-67777788888888888888888877776555442222100//..---,-+++***))'))((('''""""$"##"
- at 30BB2AAXX080903:3:59:116:1595#0
-AAAGCTAGCATGTTTATTTCTAGGCCTACTCAGGTAAAAAATCAGTGCGAGCTTAGCGCTGTGATGAGTGCTANNT
-+
-67777788888888888888888877776555443222100//..--,,,+,++***)))))(('''$&%#"#"""
- at 30BB2AAXX080903:3:2:448:1022#0
-GGTTAGAACTGGAATAAAAGCTAGCATGTTTATTTCTAGGCCTACTCAGGTAAAAAATCAGTGCGAGCNTAGAACT
-+
-67777788888888888888888877776555443221100/./.---,,,++***)*)))((('(&&"$&$"#"#
- at 30BB2AAXX080903:3:57:62:1195#0
-TTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCTCGCTCCCA
-+
-67777788888888888888888877776555443222100//..---,,++++*))*()))((''''%&#$"$#"
- at 30BB2AAXX080903:3:42:712:1149#0
-TCTAACCAAAAAAATAAACCCTCGTTCCACAGAAGCTGCCCTCAAGTATTTCCTCACGCAAGCAACCGAACCGACC
-+
-677777888888888888888888777765554432221/)/...-(--,++***)))())(((((''$"&#&$##
- at 30BB2AAXX080903:3:4:1717:538#0
-TAGCTATTAGAAGGATTATGGATGCGGTTGCTTGCGTGAGGAAATACTTGATGGCAGCTTCTGTGGAANACTANCN
-+
-67777788888888888888888877776555443222100//..---,,+,+*)*))))')('('&""#$"#"$"
- at 30BB2AAXX080903:3:50:1593:611#0
-TATTGTTGAAGAGGATAGCTATTAGAAGGATTATGGATGCGGTTGCTTGCGTGAAGATCGGAAGAGGCGTCCATCA
-+
-67777788888888888888888877776555443222100/*..---,,+'+****)())(((((#"""$"%"$%
- at 30BB2AAXX080903:3:3:1209:1475#0
-TATATTGTTGAAGAGGATAGCTATTAGAAGGATTATGGATGCGGTGGCTTGCGCGAGGAAATACTTGTNCACTNGT
-+
-677777888888888888888888677765514-3+2220,//-*%-*'(+$+$*)*)'(('('(%'""%&$#"$$
- at 30BB2AAXX080903:3:59:1436:1457#0
-CCTTCTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACCAAACAACACNAC
-+
-6777778888888888888888882777655544322210//....-,,-+++***)*)()((((&'$$%%%$"$$
- at 30BB2AAXX080903:3:46:1302:1092#0
-GCTATAGCCATTATGATTATTAATGATGAGTATTGATTGGTAGGATTGGGTTTGGTTCATTAGATCGTCATCTGCC
-+
-67777788888888888888888877776555443222100//&----,)+&+**(*#())'('(%'$$""#%##"
- at 30BB2AAXX080903:3:42:392:1911#0
-TATTGCTATAGCCAGTATGATTATTAATGATGAGGATTGATTGGTAGTATTGGGTAGATCGGAAGGGCGTGTCTCG
-+
-+7777788888888%8888886887777643544*2221%0/-,'+--+,,++)+%(*(#)((''%&&$"$"#"#"
- at 30BB2AAXX080903:3:46:1164:371#0
-GTTTTATTGCTATAGCCATTATGATTATTAATGATGAGTATTGATTGGTAGTATTGGTTATGGTTCATCTCCCGGG
-+
-67777788888888888888888877776555443222000//..---,,+,+***)()*)'(((''$"####"##
- at 30BB2AAXX080903:3:55:651:1211#0
-ACAATGAACCATAACCAATACTACCAATCAATACTCATCATTAATAATCATAATGGCTATAGCAATATATCTAATA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))'((('"%#&%""##
- at 30BB2AAXX080903:3:49:31:745#0
-TCCTAGTTTTATTGCTATAGCCATTATGATTATTAATGATGAGTATTGATTGGTAGTATTGGTTTTGTNGCTCATA
-+
-67777788888888888888888877776555443222100///.----,+++*+*()))(((('('"""$"#"##
- at 30BB2AAXX080903:3:42:1213:473#0
-TAACCAATACTACCAATCAATACTCATCATTAATAATCATAATGGCTATAGAAAAAAAAAAGGAAGAACGGGTGAC
-+
-67777788888888888888888877776555443222100//..---),(&%*%*)))(&')'(''""%"""""#
- at 30BB2AAXX080903:3:34:633:880#0
-AACCAATACTACCAATCAATACTCATCATTAATAATCATAATGGCTAGAGCAATAAAAATAGGAATANGCCTCCNN
-+
-677777888888888888880&8877776555443222100//..--)-++++)**))'))'(((#'""##"$#""
- at 30BB2AAXX080903:3:58:712:1953#0
-AATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCCCTTCACCTTTTTGTCCCCATTGGGAGAGCTATCAGN
-+
-677777888888888+8888888876776545443002.0,..)'&$+&,$(*$'(##&###(#&&#%"#$#$"#"
- at 30BB2AAXX080903:3:53:1517:1436#0
-TGTGAGAAGAAGCAGGCCGGATGTCAGAGGGGTGCCTTGGGTAACTTCTGGGTCTCAGAAGTGAAAGACACGTTTG
-+
-677777888888888888888.8877776555442122100/...---,,++'*+**))())(''('$$%&"""#"
- at 30BB2AAXX080903:3:1:1274:542#0
-GTCATGTGAGAAGAAGCAGGCCGGATGTCAGAGGGGTGCCTTGGGTAACTTCTGAGATGGGAGGAGCGNTGNTCAN
-+
-67777788888888888888.788/777925-4/32..,/0/..-),+$*+'++)*))&'('%('(%$"#%"%%$"
- at 30BB2AAXX080903:3:8:1401:555#0
-TGGTATATGATTGAGATGGGGGCTAGTTTTTGTCATGTGAGAAGAAGCAGGCCGGATGTCAGAGGGGNCGACTCNN
-+
-67737788888888888888884877776555412221100/+.,-.+,,+')*+))*(('((((('"$""$"$""
- at 30BB2AAXX080903:3:33:1071:1089#0
-AGGCACCCCTCTGACATCCGGCCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATANAGACATNN
-+
-677777888888888888888888777765554432221000/..---,-,,++****)))((((('""###""""
- at 30BB2AAXX080903:3:37:1069:391#0
-TCTGACATCCGGAATGCTTCTTCTCACATGACAAAAACTAGACCCCATCTCAATCATATACCAAATCGCTCCATCN
-+
-677777888888888888&8%88877772555443222+00*/..---,,+++****)()*)(((''"%"&$""#"
- at 30BB2AAXX080903:3:59:369:1081#0
-TCTGACATCCGGCCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCNACTNNC
-+
-67777788888888888888888877776555443222100//..---,,+,+***))))))(((((''"$"%""#
- at 30BB2AAXX080903:3:42:10:884#0
-TTGAGAGAGTGAGGAGAAGGCTTACGTTTAGTGAGGGAGAGATTTGGTATATGATTGAGATGGGGGCNCGACGTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((((''"$"""""""
- at 30BB2AAXX080903:3:40:1525:958#0
-AAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCAGNTCGCA
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)**)))()('''&%""%###
- at 30BB2AAXX080903:3:42:1688:869#0
-GATGGATAAGATTGAGAGAGTGAGGAGAAGGCTTACGTTTAGTGAGGGAGAGATTTGGTATATGATTGAGATGTGC
-+
-67777788888888888888888877776555443222100//./----,,+*+**))))))(((('&&%#%&"#"
- at 30BB2AAXX080903:3:55:1139:897#0
-CAATCATATACCAAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATATCTCA
-+
-67777788888888888888888877776555443222100//..--,,,,++**)))))))(((('''"$"$"""
- at 30BB2AAXX080903:3:57:1675:1361#0
-CAAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCCACACAACAA
-+
-67777788888888888888888877776555.43222100//.'--,,,++%***)))()((('%'&$%%$$%$$
- at 30BB2AAXX080903:3:4:791:1513#0
-CACCTCAACTGCCTGCTATGATGGATAAGATTGAGAGAGTGAGGAGAAGGCTTACGTTTAGTGAGGGANATGCNCN
-+
-67777788888888888888888877786/554432221/00/,,-,+-+*))**)'()))#)'(''%"%""%"#"
- at 30BB2AAXX080903:3:53:462:1854#0
-GTCCACCTCAACTGCCTGCTATGATGGATAAGATTGAGAGAGTGAGGAGAAGGCTTACGTTTAGTGAGACAGTCTG
-+
-67777788888888888888888877776555443222100//..---,,,+++**)*)))()(('''$#""""##
- at 30BB2AAXX080903:3:4:835:1013#0
-TCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCAGATCGGAAGAGCGGTANAGTANCN
-+
-6/777788888888888888888877776555443220100//.-.-,,,+,+**)*)())()(('%"""""""#"
- at 30BB2AAXX080903:3:51:164:794#0
-TGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATAAGATTGAGAGAGTGAGGAGAAGGCTTACGTATAGTGTGT
-+
-67777788888888888888888877756555443221110//..--,,,+++***))))(((((''"$"""""#"
- at 30BB2AAXX080903:3:43:8:311#0
-GTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATAAGATTGAGAGAGTGAGGAGAAGGCNTNCGTCACGAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((#'#$""%"#"#"
- at 30BB2AAXX080903:3:59:334:419#0
-ACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCTANNC
-+
-67777788888888888888888877776555443222100///.---,,+++***))))(((((('$$&&#"""#
- at 30BB2AAXX080903:3:36:134:359#0
-CTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAANAACCACTN
-+
-67777788888888888888888877776555443222100//..---,,+++)**))))))((((&""""$#$""
- at 30BB2AAXX080903:3:33:569:1209#0
-TAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGATCGGAAAGCNGACACANN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((((''"""&%#"""
- at 30BB2AAXX080903:3:35:762:684#0
-AACGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCNCCTCCTGN
-+
-67777788888888888888888877776555443222100//..---,,+,*+**())*()()(''"$""##"""
- at 30BB2AAXX080903:3:1:254:1043#0
-CGTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGAGATCGGAAGAGCTNTCNACAC
-+
-67777788888888888888888877776555442220100//.--,-+-,*+***)))))(((&'%$"##"$###
- at 30BB2AAXX080903:3:43:1062:1219#0
-TGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATAAGATTGAGAGAGTGAGGAGAAGCTG
-+
-677777888888888888888888777765554432221000/..---+,++++**)*)))((('(&'&%""###"
- at 30BB2AAXX080903:3:56:1069:1119#0
-CTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAACAACA
-+
-67777788888888888888888877776555443222100//.,---,,+++++**))))))(('''&"$"#"#"
- at 30BB2AAXX080903:3:42:1735:1815#0
-CCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCAAACCCAGAGATCGGAGGCTCCC
-+
-2777778888888888888888887777655544322*100/,..--,--+,)***))')*(('&''$&"&$"###
- at 30BB2AAXX080903:3:51:49:745#0
-TCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAACCTCCTAGC
-+
-6770738888888888888888887777655584322210///..),,,,,*+**))(*)(('((''$$""$""#$
- at 30BB2AAXX080903:3:35:978:1303#0
-ATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATAAGATNGTCACAAN
-+
-67777788888888888888888877776555443222100//..---,,+++****))))())'(&""$%#$#""
- at 30BB2AAXX080903:3:44:851:1548#0
-AGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATAAGATTGAGAG
-+
-67777788888888888888888877776555443222100//..---,,+,+*+*)))))((('('$&&&%%%"%
- at 30BB2AAXX080903:3:55:789:2009#0
-TCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATCGACAC
-+
-677777888888888888888888777765555432.2100----.+-+,,+++'*()))))'(((&"%$"""#""
- at 30BB2AAXX080903:3:44:609:1195#0
-TGAGGAGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGGATATGATC
-+
-67777788888888888888888877776555443222100//..---,,,++***))))))((((&$"&%#"#"#
- at 30BB2AAXX080903:3:50:319:1606#0
-ATTGAGGAGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCCTGCTATGATGTTACGTC
-+
-67777788888888888888888877776555443222100/...-.,--+,+*+*))))))(((('%""""#"#"
- at 30BB2AAXX080903:3:60:573:265#0
-TCCATCATAGCAGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCATACACNN
-+
-6777778888888888888888887777655544322210///.,---+,+++**))))()))((('&$"#&$$""
- at 30BB2AAXX080903:3:57:266:634#0
-CCTATGTGGGTAATTGAGGAGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAACTGCTTTCAT
-+
-67777788881888888888888877776555443222/00//..--,,,+*+*****))))()(''$&%"""$"#
- at 30BB2AAXX080903:3:38:769:1843#0
-CAGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACNACGTCCA
-+
-67777788888888888888888877776555443222000//-.---+,+++*)*)*)))))((('%"%#&&###
- at 30BB2AAXX080903:3:1:1659:638#0
-AGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAAGATCGGAAGNCANTTCT
-+
-6777778888888888888888887773655544322210/-./.---,,+,*)**))))))()('(%""#"""#"
- at 30BB2AAXX080903:3:42:1181:40#0
-AGGCAGTTGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGCCACN
-+
-67777788888888888888888877776555443220110//..---,,+++***)))(*)()((&'$$#$##$"
- at 30BB2AAXX080903:3:54:1073:1184#0
-TCATCCTATGTGGGTAATTGAGGAGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCCACCTCAGCGACCT
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))((((''$$"%%#$$$
- at 30BB2AAXX080903:3:56:1233:201#0
-TATTCATCCTATGTGGGGAATTGAGGAGTATGCTAAGATTTTGCGTAGCTGGGTTTGGTTTAGTCAGATCTGCCAG
-+
-67777788888888888,88888877776555443222110//..---,,+++(*+))(*)'((&(''&$#""$#"
- at 30BB2AAXX080903:3:48:1129:2038#0
-TTATTCATCCTATGTGGGTAATTGAGGAGTATGCTAAGAGTTTGCGTAGGTGAGATCGGAAGAGCGGCAGAGTGAC
-+
-67777188888888)888,88&88777263524,10321*,//.%.,,+(+++**(#))(()()#('%$"""""##
- at 30BB2AAXX080903:3:42:1547:933#0
-TGAGGTGGACTAAACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCAGATCGGAAGAGCGGTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))((''$%&""""#"
- at 30BB2AAXX080903:3:49:1715:1152#0
-TACGGTAGAACTGCTATTATTGATTCGATGTGGGTAATTGAGGGGTATGCGAAGATTTTTCGTAGCTCCCCAGCGC
-+
-67777283182888&88(888&)*$)$-655344",1/.-#//(.'+,+&()*+*)(*)'#(''(%%$"#$""#"#
- at 30BB2AAXX080903:3:51:570:903#0
-TACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGCTAAGAGATCGGAAGAGCGTGGAGGTG
-+
-6777778888388888888888887777655544222210///..---,,+++***)**))))((((&""""""##
- at 30BB2AAXX080903:3:45:1631:779#0
-CCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTCTACCGTCACACCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(''$$"$#$#"
- at 30BB2AAXX080903:3:37:567:1358#0
-TAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGCTAAGATTTTGCGTAGCAN
-+
-67777788888888888888888877776555443222100//-----+,+++***)))))((((('""$"#"$$"
- at 30BB2AAXX080903:3:45:558:1968#0
-TAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGGATGCTAAGATTTTGAGACGATG
-+
-67777088888888888888888877776555423222100//-.----,+++%+*)))))(()(('$"#""#"""
- at 30BB2AAXX080903:3:2:632:1771#0
-AGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTCTACCGTACNCACNGTC
-+
-6777778888888888888880.873773353,/1.+1/0,.-,,.,,+++**)*))((((((&'%'%"$#%""#"
- at 30BB2AAXX080903:3:48:1425:1760#0
-TTAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGCTAAGATTTTGGGTACTC
-+
-67777788888888888888888877776555443222100//..---,-++*****)()))()'''&#"""####
- at 30BB2AAXX080903:3:60:913:1278#0
-CTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTCTACCGTACACGCNCAANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))()((&&"&"$#%""
- at 30BB2AAXX080903:3:38:66:623#0
-TGTTAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGCAGATCGCGCAGCGCA
-+
-67777788888888888888888877776555443222100//..--,,,+++*****))()(('(&"$%""$"##
- at 30BB2AAXX080903:3:36:840:1968#0
-AAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTCTACCGTACAACCCTCACCTACANN
-+
-67777788888888888888888877776555443222000//..---,-+++**))*))))(((('&&%#&%"""
- at 30BB2AAXX080903:3:58:1155:1829#0
-AATGGTTATGTTAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGCTACACGN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((('&$&%$%###"
- at 30BB2AAXX080903:3:44:1479:878#0
-AGAATGGTTATGTTAGGGTTGTACGGTAGAACTGCTATTATTCATCCTATGTGGGTAATTGAGGAGTATGGACCAC
-+
-677777888888888888/8888877776555443212100//....-,,+,+***)))))(()('%&"$"%$$$%
- at 30BB2AAXX080903:3:56:393:1225#0
-TAATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATCCTAACTACTACATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))((('%%%&%%##$
- at 30BB2AAXX080903:3:1:1639:1229#0
-AATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATCCTAACTANACNCACC
-+
-6777778888888888888888887777655544322210///..---,,,++***)**))((''('%""%"%#$#
- at 30BB2AAXX080903:3:37:1448:242#0
-ACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATCCTAACTACTACCGCATTCCTACTACTNTCACN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''$$%""%$$"
- at 30BB2AAXX080903:3:3:1094:1070#0
-TTTAAGTTGAGTAGTAGGAATGCGGTAGTAGTTAGGATAATATAAATAGTTAAATTAAGAATGGTTATNGTACNGT
-+
-67777788888888888888888877776555443222100//.----,,++++***))))(((((''"$&&$"""
- at 30BB2AAXX080903:3:49:218:1039#0
-TATTATCCTAACTACTACCGCATTCCTACTACGCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCCCCAC
-+
-67777788888888888888888877776555&43222100//..---,,+++***)**)))(('''&%"#"#"##
- at 30BB2AAXX080903:3:39:1466:1073#0
-CAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGGAGTTTAAGTTGAGTAGTAGGAATGCGGTAAGATCGGGAGCCT
-+
-67777788888888888888888877776555442232100//...--,,+++***))))))()'('&$"""#"#"
- at 30BB2AAXX080903:3:41:1237:1487#0
-ATCCTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCGCACCTGAC
-+
-67777788888888888888888877776545443222100/...---,,+,+)*)***)))((((&"&%%&%##"
- at 30BB2AAXX080903:3:36:1399:1114#0
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCGCAACTGCACNN
-+
-67777788888888888888888877776555443222100//..---,,-++***))))))((''&$&%$%$#""
- at 30BB2AAXX080903:3:48:1141:1309#0
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCAGATNGTCAGCT
-+
-67777788888888888888888877776555443222100//..---,-+++***)*)))((((''%"""$""##
- at 30BB2AAXX080903:3:57:992:1297#0
-TTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGGAGTTTAAGTTGAGTAGTAGGAAAGATACACA
-+
-677777888888888888888888767765554/3222100//...-,-,+*+)***))))((('''$&%&#$#$"
- at 30BB2AAXX080903:3:58:1400:1418#0
-TAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGGAGTTTAAGTTGAGTAGGCTACAC
-+
-67777788888888888888888877776555443222100//..---,-++++**)))))(((('&'$%$"$%$$
- at 30BB2AAXX080903:3:43:81:245#0
-GTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGAGATCGGAAGAGCGGGGCACAG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&'"""$"#""
- at 30BB2AAXX080903:3:41:1612:1240#0
-AGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGAGATCGGAAGTACAGTG
-+
-67777788888888888888888877776555443222100//..----,+++***)))*)(((''''$#"%%###
- at 30BB2AAXX080903:3:3:1522:1183#0
-ACTCAACTTAAACTCCAGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAANCACANTN
-+
-67777788888888888888888877776555443222000//.-,.-,,,,*+***))))((((('$"%#&%"#"
- at 30BB2AAXX080903:3:49:872:1036#0
-TAAGGGTGTTAGGCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGGCGTGGTGGTGGAGGTTATCTTCTCT
-+
-67777788888888888838888837774555,432320$0.'*..--,,(*+)+*%)()))#('#'$"#""""#"
- at 30BB2AAXX080903:3:36:1082:1729#0
-ACTTAAACTCCAGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCGTCCACCCN
-+
-67777788888888888888888877776555443222100//-.---,,+++****))))(((('%&"$$#"##"
- at 30BB2AAXX080903:3:60:1084:1917#0
-ATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGTGTNTCNN
-+
-677777888888888888888888777735554430221/0./..,--,-,,****)))))(('(''%&&$""%""
- at 30BB2AAXX080903:3:52:1043:1353#0
-GATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGGAGTTTA
-+
-67777788888888888888888877776555443222100//.----,,+,++**))))))(((''$$%"&"#""
- at 30BB2AAXX080903:3:4:736:1434#0
-AACTCCAGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATNTCCGNAN
-+
-67777788888888888888888877776555443222000//-.--,,,+,++**)*))))(((('%"$&"""#"
- at 30BB2AAXX080903:3:38:456:1612#0
-TGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGTCGTGGTGCTGTACTA
-+
-6777778888888888888888887777655.44322/1/0/..--,-,,++***()*))&&(((('"#$&"#$##
- at 30BB2AAXX080903:3:36:1636:905#0
-CTCCAGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATCACACACCNN
-+
-67777788848888888886888877756545443222100//..--,-,+,+**)))&('(((((&%%%%#$#""
- at 30BB2AAXX080903:3:43:1557:1727#0
-CCCGCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATAGATCGG
-+
-67777788888888888888888877776355443221000//..--,,,++**))(()))((((''&&$&#"$"#
- at 30BB2AAXX080903:3:44:151:528#0
-GCACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCAGATCGGA
-+
-67777788888888888888888877776555441222100//..---,,+,+***)*)))))(('''$%%$%%$$
- at 30BB2AAXX080903:3:56:855:935#0
-ACCACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTCACACCCTTAATTCCATCCACCATCTCAC
-+
-6777778888888888888888887/77655544322200///..--(,,+,+***))))'(')((($&$%%###"
- at 30BB2AAXX080903:3:36:402:1305#0
-AGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAAGATCGGAAGAGCGGTTCTGCGCACCN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((&'%&%%"%"##"
- at 30BB2AAXX080903:3:38:722:1931#0
-GAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTGATGCATCAC
-+
-67777788888888888888888877276555243222100./...--+,+,+*)*))))()((('#$"#$""$#$
- at 30BB2AAXX080903:3:50:1284:1667#0
-GAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGCGCCCGG
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))((('('"$#"###""
- at 30BB2AAXX080903:3:40:1389:1755#0
-CACGACCCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTGCGTGAC
-+
-67777788888888888888888877776555442222/00//..--,,,+*+***))()()')(('&&"#$###$
- at 30BB2AAXX080903:3:37:75:1178#0
-AGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTAGATCGGAAGATACACANCN
-+
-67777788888888888888888877776555443222100//.----,,+++****)*))(((((&""##$""""
- at 30BB2AAXX080903:3:50:1452:1552#0
-TAGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAAGATCGGCAGACCGT
-+
-677777888888888888888888777765.5440221100//..---,,+++***)))))((((('"""#"##"#
- at 30BB2AAXX080903:3:57:1571:1018#0
-CCTAGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATACACGACCAC
-+
-67777788888888888888888877776555443222100//...-,,,+++***))))(()(((&$$%"&#$$#
- at 30BB2AAXX080903:3:34:721:328#0
-AGCGGGGGCAGGCCTCCTAGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCAGATCGGAAGAGNACCATCNN
-+
-677777888888888888888888777;655/4412221.0...--.(,++++**))((())(((''""##""$""
- at 30BB2AAXX080903:3:49:125:414#0
-TAGCGGGGGCAGGCCTCCTAGGGAGAGGCGGGTGGATGGAATTAAGGGGGGTAGTCATGAGATCGGGCTGTGTGCA
-+
-6777778888888883888888887777635504332210/+/+.---%,)$'*'&)')()((((('%""""""$#
- at 30BB2AAXX080903:3:42:1124:251#0
-ACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGNTGT
-+
-677777888888888888888888777765554432221/0//..---,,+++**)*))))(()(('&&$%%"#""
- at 30BB2AAXX080903:3:47:318:1586#0
-TAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAAGAATCACCA
-+
-67777788888888888888888877776555443220100///.---,,+++**)**))))(((''%""###"""
- at 30BB2AAXX080903:3:3:1539:90#0
-GGGGATGATGAGGCTATTGTTTTTTGTGAATTCTTCGATAATGGCCCATTTGAGATCGGAAGAGGGGTNTGGANCN
-+
-67777788888888888888888877773555-33.)100///-+*(,+,+'*)'(#((''''(&('$"#""#"#"
- at 30BB2AAXX080903:3:42:1128:1621#0
-GGTGGGGATGATGAGGCTATTGTTTTTTGTGAATTCTTCGATAATGGCCCATTTGGGCAAAAAGCCGGTTAGCGGG
-+
-67777788888888888888888877776555443522/00///.--,--+,+*)*)))))())&'''$$%%$#"#
- at 30BB2AAXX080903:3:59:389:878#0
-TATGATGGTGGGGATGATGAGGCTATTGTTTTTTGTGAATTCTTCGATAATGGCCCATTAGATCGGGAGGTCANNG
-+
-67777788888888888888888877774555443220100-..'---,,+,+$**)()(()''((#&%""$""""
- at 30BB2AAXX080903:3:55:397:2001#0
-TGGCTATGATGGTGGGGATGATGAGGCTATTGTTTTTTGTGAATTATTCGATAATGGGCCATTTGGGGGGTTTCCT
-+
-67777788888888888888888877176555.43222100'/-.(--%,*+)**(*##)#'(('''$"##""##"
- at 30BB2AAXX080903:3:39:44:1216#0
-ATGGTGGCTATGATGGTGGGGATGATGAGGCTATTTTTTTTTGTGAATTTTTTTATTATTGAGAATGTCCACACCA
-+
-6777478888888888%8888/88777765+2443'12100/+.-$,+,++,''(*&*)()%)(##'$"##$"###
- at 30BB2AAXX080903:3:49:1564:403#0
-AGGGTGATGGTGGCTATGATGGTGGGGATGATGAGGCTATTGTTTTTTGTGAATTCTTCGATAATGGGCGAAGTGG
-+
-677727888888888888888828777765554432221.0/-..---+,+++)*)))()((((%&'"$""""""#
- at 30BB2AAXX080903:3:1:1255:209#0
-AGGTAGAAGTAGAGGGTAAGGAGGGTGATGGTGGCTATGATGGTGGGGGTGATGAGGCTATTGTTTGANTANTAGC
-+
-677*778888888888888880887777655/44(.211-/0/&.---$&+&)*'**(('##(#(#%&"""""#""
- at 30BB2AAXX080903:3:1:883:2024#0
-AAAAAACAATAGCCTCATCATCCCCACCATCATCGCCACCATCACACTCCTTAACCAGATCGAAAGACNTGNCTCC
-+
-677777888888888888888888777765553$323001/....%--,,,++)***))()(''(('%""#"###"
- at 30BB2AAXX080903:3:56:1445:456#0
-AAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACGCANAATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$&$#"%#$%
- at 30BB2AAXX080903:3:60:1526:1084#0
-ACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACACAACAAANN
-+
-677777888888888888088888767765511/+22*//.-/.---*+,*+*+*)))))('')(('$$%%%$%""
- at 30BB2AAXX080903:3:33:1759:1265#0
-AATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACGCCNCATGCCNN
-+
-67777788888888888888288877776555443232000/...--,,-++++**)))(())((''""#""##""
- at 30BB2AAXX080903:3:40:1617:1863#0
-AATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACGCCTACTCGCAC
-+
-67777788888888888888888877776555443221100//-,--+,++*+**))*)((')((''%"$%"#$$"
- at 30BB2AAXX080903:3:45:626:148#0
-AGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACGCCTAAAGACCACTC
-+
-67777788888888888888888877776555443222100/-..---,,+++***)**))((((('%"%$%#""#
- at 30BB2AAXX080903:3:49:230:1819#0
-GCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCTACGCCTAATCCTACACCA
-+
-67175788888888888888888877776555443221000./-.---,,,++*+*))*))(()(('%%"##$##"
- at 30BB2AAXX080903:3:37:806:554#0
-TCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACCGACGCCTAATCTACTCCCCNCN
-+
-67777788888888888888888877776555443222000//..---,,+,++&)**)))'(((''%$&%$%"$"
- at 30BB2AAXX080903:3:48:1258:1279#0
-AGTGTGATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAGAGGTTAAGGAGGGTGATGGTGGCTAGTATGTCAC
-+
-67777788888888888888888877776555483201100/....--+,+*+**()))))'(('%'""#"""#"#
- at 30BB2AAXX080903:3:45:1283:2029#0
-TAGTGTGATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAGAGGTTAAGGAGGGTGATGGTGGCTATGGGGGGG
-+
-6777778888888888888888887777655544322210///..-,-,,+++***))())((((#'$#%#"%$$"
- at 30BB2AAXX080903:3:49:1341:649#0
-ATCATAGCCAACATAACCCTCCTTAACCGCGACTTCTACCTACGCCTAATCTACTCCACCTCAAGCACGGCTCAGC
-+
-67777788882888&888888888777754'5343222000//..---,,*++*)**))())((#('&""#"#""$
- at 30BB2AAXX080903:3:35:1551:1786#0
-TTAGATATGGGGAGTAGTGTGATTGAGGTGGAGTAGATTAGGAGTAGGTAGAAGAAGAGGTTAAGGANGTGCTACN
-+
-677777888888%88/888488887.7765504422011-0.'.-,&-+,+)**#'*(**%(&'(('"""#%"##"
- at 30BB2AAXX080903:3:42:138:1661#0
-TGTTAGATATGGGGAGTAGTGTGATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAGAGGTTAAGCACTGCTCA
-+
-67777788888888888888888877776555443222100//./---,,+++***)*)))(()((&$%#""#"##
- at 30BB2AAXX080903:3:40:1223:724#0
-TTACGTTGTTAGATATGGGGAGTAGTGTGATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAGAGGTTAAGATC
-+
-67777788888888888888888877776555443212100//..---,,,+++**'))))('('(&"%%$#$""#
- at 30BB2AAXX080903:3:59:271:1398#0
-CTACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAACGTAAAGATCGCNNNT
-+
-67777788888888888888888877776555443222100//..---,,++++**)*)))(((((&'%%%#""""
- at 30BB2AAXX080903:3:52:759:157#0
-CAAACTGTCATTTTATTTTTACGTTGTTAGATACGGGGAGTAGTGTGATTGAGGTGGAGTAGATTAGGCGTAGTCA
-+
-677777888888888888888888777765554)322200///...-,,,+,+****)))(((((('&""#"$"#"
- at 30BB2AAXX080903:3:41:290:1147#0
-AATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAACGTAAAAATAAAATGACAGTTTGAAGATACAACA
-+
-67777788888888888888888877776555443220100/..----,,+,+++*)))))(()(''$%&%$#$"#
- at 30BB2AAXX080903:3:39:616:1078#0
-CACTACTCCCCATATCTAACAACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('&$%&%&"$#
- at 30BB2AAXX080903:3:44:1329:345#0
-CTACTCCCCATATCTAACAACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCTCCCAAT
-+
-67777788888888888888888877776/55443222100///.---,,+++)****))()(''((&&"%#$"""
- at 30BB2AAXX080903:3:43:1389:320#0
-CTCCCCATATCTAACAACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCCGCACAC
-+
-677777888888888888888888777765554432%2100//..---,(+++**))*))&))(('''""""##"#
- at 30BB2AAXX080903:3:41:703:876#0
-TATCTAACAACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCAGATCGGAAGAGCGTTACA
-+
-67777788888888888888888877776555443222100/....--,,,++***)*))))))((&%%$"""##"
- at 30BB2AAXX080903:3:51:1048:163#0
-TGGTAAGGGCGATGAGTGTGGGGAGGAATGGGGTGGGTTTTGTATGTTCAAACTGTCATTTTATTTTTCCGCTGTC
-+
-67777788888888888888888877866555443221100/...-----,++**+*)*)))(((('"##"$#$#"
- at 30BB2AAXX080903:3:34:756:350#0
-ACGTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATCGCCCTNATACAGNN
-+
-677777888888888888888888777765554432221000/..--,,,,++****))))()((('"""#$#"""
- at 30BB2AAXX080903:3:43:815:1993#0
-AGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGAATGGGGGGGGTTTTGTATGTAGATCGGAAGGGGGGGGCA
-+
-677777888888888888888888777765554532..100//(.--),,,,+(**)()'(#((%%'$$%""""#"
- at 30BB2AAXX080903:3:56:1526:1336#0
-AGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGAATGGGGTGGGTTTTGTATGTAGATCGGAAGCACATCACA
-+
-67777788888888888888888877776555443212100//..--,,,++++**)))))(((('&$$&$"##$#
- at 30BB2AAXX080903:3:2:1212:283#0
-GTAGGAGTAGCGTGGTAAGGGCGATGGGCGTGGGGAGGAATGGGGTGGGTTTTGTGTGTTCAAATTGTNATGTCCA
-+
-677777888888'88.8,88888777(7$5354)3.2202/./(.+--+(,+++**))('#('(#%'$""&"##"#
- at 30BB2AAXX080903:3:48:338:835#0
-ATAGGTAGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGAATGGGGTGGGTTTTGTATGTTCAAGTACACTCT
-+
-67777288888888888884888877719535,4+2221*0/+,---,,++++))**))(((('#&#%""#"""#"
- at 30BB2AAXX080903:3:2:774:798#0
-TGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATCGCCCTTACCACGCTACTCCTNCCCACCC
-+
-67777788888888888888888877776555443212100//...--,,,++***)*)))(()(('""%$##$#"
- at 30BB2AAXX080903:3:38:101:1422#0
-GGAGATAGGTAGGAGGAGCGTGGTAAGGGCGATGCGGGTGGGGAGGGAAGGGGTGGGTTTTTGATCGCGAACTACA
-+
-67777788888888888888888877776553%4"2%1%/0//..-"+&,+,+%**)#(()#(#'#'&"#"$"##"
- at 30BB2AAXX080903:3:53:166:1405#0
-AAAGGGGAGATAGGTAGGAGGAGCGTGGCAAGGGCGATGAGGGAGGGGAGGAATGGGGGGGGGGATGGTGGGGATG
-+
-677777888888888888/8,8887777)5554432(2110//..---,,+*+***))#))(#&&%'&#"$#$"""
- at 30BB2AAXX080903:3:33:187:1565#0
-AAAAGGGGAGATAGGTAGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGAATGGGGTGGGTTTTNTTATCCNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((''('"""""##""
- at 30BB2AAXX080903:3:56:380:1065#0
-AAAAGGGGAGATAGGTAGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGGATAGATCGGAAGAGCGGGTACTC
-+
-67777788888888888888888877776+55443222100/..----,,++%**+)))()((((''%&#"""$"#
- at 30BB2AAXX080903:3:46:1066:1736#0
-AGATTATTAGTATAAAAGGGGAGATAGGTAGGAGTAGCGTGGTAAGGGCGATGAGTGTGGGGAGGAAGCGCTNTCT
-+
-67777788888888888888888877776555443220100/..----+,,++***)*)))((('('"$&#""##"
- at 30BB2AAXX080903:3:52:1124:1136#0
-CACCCCATTCCTCCCCACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAAGCCGCACA
-+
-677777888888888888888888777765554&3222110//-.--++,+++****))))))((('$"$#$%#"#
- at 30BB2AAXX080903:3:34:110:464#0
-CCATTCCTCCCCACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATAGATCGGANACGCACNN
-+
-67777788888888888888888837776555443222100//..---,,,,+***))))))(('('"$%##"#""
- at 30BB2AAXX080903:3:37:539:1043#0
-ATTCCTCCCCACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTAGATCGGAAGAGCGTCGCCATN
-+
-67777788888888888888888877776555443222100//-.---,,++++***)*))(()(('$#""##"#"
- at 30BB2AAXX080903:3:46:69:748#0
-CTCCCCACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCAGTTTATACTAATAGATCGGACGTGTCACA
-+
-67777788888882888881888877766+554332)2100///.-,+,,+,+**'))))*(()(''"""$"#"#"
- at 30BB2AAXX080903:3:48:1478:2035#0
-CAGAAATTAAGTATTGCAACTTACTGAGGGCTTTGAAGGCTCTTGGTCTGTATTTAACCTAAATTTCTCTCACTGC
-+
-677777888888888888888888777765/54432121/0-/..-,--,++**+*)&((((((((&$$"&##"""
- at 30BB2AAXX080903:3:33:14:352#0
-AAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTGTAACAGCTAAGANGCTCCGNN
-+
-677777888888888888888888777765/5443222100//..---,,+++***)*)))((''('""#"#%#""
- at 30BB2AAXX080903:3:50:1411:1901#0
-TAATTTCTGTAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTACACAGCGC
-+
-67777788888888888888888877776555443222100//..---,,++++***))))((((''"$"%""#"#
- at 30BB2AAXX080903:3:45:88:1797#0
-TAAGGGCTTAGCTTAATTAAAGTGGCTGATTTGCGCTCAGTTGGGGCAGAGTGGGGGATTGGTGTCCGTAAGACCA
-+
-6777778888888828888878887723.5644/3$2200.//,..)-,%,&+*+**)#))&&(('#$"#""""##
- at 30BB2AAXX080903:3:60:1442:1089#0
-AGTAAGGGCTTAGCTTAATTAAAGTGGCTGTTTTGTGTTTAGTTGATGGAGGGTGGGGGTTTGGAGTCCACACANN
-+
-677777888888888888885888777765$3443)0'1&0//-,'--',,(+$**))&((((##(#&&%%%$%""
- at 30BB2AAXX080903:3:41:812:687#0
-TAGTAAGGGCTTAGCTTAATTAAAGTGGCTGATTTGCGTTCAGTTGATGCAGAGTGGGGGTTTGCAGTCCTTAGCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))&*)(((''%'%&&%%#"
- at 30BB2AAXX080903:3:47:458:87#0
-CTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCAGATCTGGTC
-+
-6777778888888888888888887777655544322211///..---,,+++)***)))*)(((('"$#"$"""#
- at 30BB2AAXX080903:3:39:1111:330#0
-CATTGGTCTAGTAAGGGCTTAGCTTAATTAAAGTGGCTGATTTGCGTTCAGTTGATGCAGAGTGGGGTTTTGCACA
-+
-6777778888888888888888887777655542322210///..-,-,+++++*))*)*()#('('"&%&%$###
- at 30BB2AAXX080903:3:51:1251:670#0
-AAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCCCTTACTAGACCCACGTATAC
-+
-67777788888888888888888877776555.4300210///.-.-,,,++****)()))')('('"%$""""##
- at 30BB2AAXX080903:3:54:629:1186#0
-AAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCCCTTACTAGACCACTGGTCCT
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))()((''%$#$$"$#"
- at 30BB2AAXX080903:3:46:77:1630#0
-TTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAAGATCGGAAGAGCGAGCCAGCC
-+
-67777788888888888888888877776555443221100//..---,,+++***)))))))((''$""#$""#"
- at 30BB2AAXX080903:3:34:1763:1024#0
-TAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGCTAAGCACCCNCGCAACNN
-+
-677777888888888888888888777765554432.2100//-.-,-,,,++*+*)*)))))((''""#%"#$""
- at 30BB2AAXX080903:3:43:397:1064#0
-ACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGCTAATCACCCTAATCAACTGGCTTCAATCTACT
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(((''&&$&&%#$$
- at 30BB2AAXX080903:3:37:896:467#0
-GGAGAAGTAGATTGAAGCCAGTTGATTAGGGTGCTTAGCTGTTAACTAAGTGTTTGTGGGTTTAAGTATCATTTTN
-+
-67777788888888888888888877776555443222100//..---,,+++*****))(((((''"#"""%"""
- at 30BB2AAXX080903:3:57:1211:65#0
-CGGCGGCGGGAGAAGTAGATTGAAGCCAGTTGATTAGGGTGCTTAGCTGTTAACTAAGTGTTTGTGGGTGTCACTC
-+
-677777888888888888888888777765555432221/0/..----,-,**'**)*()')(((('$&#"$##"#
- at 30BB2AAXX080903:3:48:1192:944#0
-CACAAACACTTAGTTAACAGCTAAGCACCCTAATCAACTGGCTTCAATCTACGTCTACCTCCGCCGCGCGCATACA
-+
-6777778888888888888888887777654-4/322210/.'..*--*,+$#*+*%))'&)((('&$$"$"#"##
- at 30BB2AAXX080903:3:56:1047:1363#0
-TTAGTTAACAGCTAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCTGCACCAA
-+
-677777888888888888888888777765554430211/0/./..--,-,++**))**('((((''&#%#"$#""
- at 30BB2AAXX080903:3:37:1724:47#0
-GGCTTCTCCCGCCTTTTTTCCCGGCGGCGGGAGAAGGAGATTGAAGCCAGTTGATTAGGGGGCGTAGCTCCTTCNN
-+
-677747.888888(83888888.89773644"0$'0#'/$#+.('+(($*$$'$&''')(#'#####$"##"$"""
- at 30BB2AAXX080903:3:52:1184:657#0
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGAGAAGCCCCGCGCGCCG
-+
-67777788888888888888888877776555443232100//..---+,+,+***)**))')('''$"$""%##"
- at 30BB2AAXX080903:3:51:1230:864#0
-ATATTGAATTGCAAATTCGAAGAAGCAGCTTCAAACCTGCCGGGGCTTCTCCCGCCTTAGATCGGAAGAGCCACTC
-+
-6777778888888888888888887777655544321210///..---,,,+++****))()((((("""#$"###
- at 30BB2AAXX080903:3:46:1668:1540#0
-TAAATCTAAAGACAGGGGTTAGGCCTCTTTTTACCAGCTCCGAGGTGATTTTCATATTGAATTGCAAACAGGTCGC
-+
-67777788888888888888888877776555443222100/...,--,-,+++*)**)(()((((%&$"$"##"#
- at 30BB2AAXX080903:3:8:1784:1757#0
-TTTGCAATTCAATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATCGNGACTCANN
-+
-67777788888888888888888877776555443122100//...--,-+,+***))*)())(((&""#%#"$""
- at 30BB2AAXX080903:3:44:1415:1957#0
-TTGCAATTCAATATGAAAATGACATCGGAGCTGGTAAAAAGAGGACGAACCCCTGTATTTAGATTTACAGTCGAAT
-+
-67777788888888888888%882567765.544202.010//-+(+-,%+'(***(*(*)))(&('&#&"#""#"
- at 30BB2AAXX080903:3:42:295:1373#0
-AAGCATTGGACTGTAAATCTAAAGACAGGGGTTAGGCCTCTTTTTACCAGCTCCGAGGAGATCGGAAGAGCGGCTC
-+
-67777788888888888888888877776555443211110//..--,,,,++*****))))(((''$$%"""#"#
- at 30BB2AAXX080903:3:49:1576:617#0
-AGTGAAGCATTGGACTGTAAATCTAAAGACAGGGGTTAGGCCTCTTTTTACCAGCTCCGAGGCGATTCTCACGATC
-+
-6777778888888888888888887777655544312110///..---,,+++***)))()(#(%&'$$%"#""""
- at 30BB2AAXX080903:3:57:369:435#0
-AATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$&%#&$$#"
- at 30BB2AAXX080903:3:33:190:1463#0
-CTCGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTCAGCCANCGACACNN
-+
-67777/888888888888888888777715553432201/0//.---,,,+++*****)))))(('&"$""%#$""
- at 30BB2AAXX080903:3:49:1021:1332#0
-TCGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTCAGCCATGTTATCCTA
-+
-67777788888888888888888877776555443222000///.-,++,+++**)**))())('''"$###$$##
- at 30BB2AAXX080903:3:42:893:907#0
-GGTGAGGTAAATTGGCTGAGTGAAGCATTGGACTGTAAATCTAAAGACAGGGGTTAGGCAGATCGGAAGAGGGATT
-+
-67777788888888888888888877776559443222100//..--,-,-++***)*)))))(((&'$##"""""
- at 30BB2AAXX080903:3:53:849:2016#0
-CATCAGTGGGGGTGAGGTAAAATGGCTGAGTGAAGCATTGGACTGTAAATCTAAAGACAGGGGTTAGGCCCGCCAC
-+
-677777888888+888888888887'1765+5443+22100/...---,,+++*+**')))))'(('$##""##"#
- at 30BB2AAXX080903:3:45:127:30#0
-CGGCGAACATCAGTGGGGGTGAGGTAAAATGGCTGAGTGAAGCATTGGACTAGATCGGAAGAGCGGGGACCGCGTC
-+
-677777888888888888888888777765554430221/0//..---,,+,++(')*#))()(('&""#$"$#"$
- at 30BB2AAXX080903:3:40:352:1876#0
-TGTCTTTAGATTTACAGGCCAATGCTTCACTCAGCCATTTTACCTCACCACCACTGATGTTCGCCGAGCGCTGAGT
-+
-67777748888888888%88888877776551442220100/,,,+,+,&++****('*(('(((('"%""%"#""
- at 30BB2AAXX080903:3:3:164:593#0
-TTTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTAGATCGGAAGCNCGCANCA
-+
-67777788888888888888888877776552443221010./.--,-,,+++***)*)))))((''%"#"#$"$$
- at 30BB2AAXX080903:3:54:403:464#0
-TTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGACGTTCTCCGAGATCGGGCGGGCCT
-+
-677777888888'8888888888877716+5144321'000//.'--),(+'(***)$)(((&('(%""#&%#"#"
- at 30BB2AAXX080903:3:42:768:1099#0
-ATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTCGACGCACGTTGCCTATGTCATCN
-+
-677777848888888888888881774763555132201&../-.-,+,+$,+*#')$#))#(((&''%"##"%$"
- at 30BB2AAXX080903:3:40:1342:1732#0
-CAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCAACTGATGTTCGCCGACCGTTGACTATAGATCTGAGTGT
-+
-67777788888882888888888877776555412222100//-..,-,+,++)**))))))(((''$%&&$"$##
- at 30BB2AAXX080903:3:47:1572:1922#0
-CAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTCTCTATG
-+
-67777788888888888888888877776555443122100/....--,,,+++**))))()(((''&###$"""#
- at 30BB2AAXX080903:3:50:61:1006#0
-TGTGGTTTGTAGAGAATAGTCAACGGTCGGCGAACATCAGTGGGGGGGAGGTAAAATGGCTGAGTGAAGCCACGAG
-+
-67777788888888888888888877776555442222100//..-*-+,+%+***)))()(((('(""#""#"""
- at 30BB2AAXX080903:3:45:1090:1187#0
-CCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACCCCCCAGCG
-+
-6737738888888888888888887725+3554430)2&/0./-..+-,++,)&+)()&()((((&%$#"#%"#""
- at 30BB2AAXX080903:3:50:585:1947#0
-ACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGCCACTGGA
-+
-67777788888888888888888877776555443222120//...--,,,*++**))*)()((('("#$"$#""#
- at 30BB2AAXX080903:3:49:53:1508#0
-TTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTGGAACTACACCAC
-+
-67777788888888888888888877776555443222100//..,.-,,+++*+**))))((((('%""#"###"
- at 30BB2AAXX080903:3:48:538:966#0
-CCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGGTCGGCGAACATCCGTTGCA
-+
-67777788888888888888888877776555443222100//...---,,+++**)()))((((&'&&#&"""#"
- at 30BB2AAXX080903:3:38:801:238#0
-ACTGATGTTCGCCGACCGTTGACTATTCTCTACAAAACACAAAGACATTGGAACACTATACCTATTACACGACCNN
-+
-64777382888880888888888,76+765+5443.)2100/.----(,,+,+***))()()(((&'&"%#"#"""
- at 30BB2AAXX080903:3:42:47:418#0
-TGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTGGAACACTATACCTATTATTCCGCACTGC
-+
-67777788888888888888388877776555441222110//..---,,+*+)**))()))((''&"""#"#""#
- at 30BB2AAXX080903:3:57:730:1510#0
-CTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGAGATCGTGAGAC
-+
-67777788888888888888888877776555443222100//...--,,+++***)*))()(((''"%%$##"##
- at 30BB2AAXX080903:3:44:1477:365#0
-CGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTGGAACACTATACCTATTATTCGGCGCATTCGTCCGT
-+
-67777788888888888886888876776555443222100//..---,,,++**))*))))()((("$""""#""
- at 30BB2AAXX080903:3:39:1156:1677#0
-CTCCAGCTCATGCGCCGAATAATAGGGATAGTGTTCCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGCGCACC
-+
-67777788888888888888888877*76555443032000/...--,,,,++++*)*)))()('&'''%$%$###
- at 30BB2AAXX080903:3:36:214:1816#0
-AGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTTTCACGCGCNN
-+
-67777788888888888888888877776555443222100//..---,-+,+****))))((((''&$$"$##""
- at 30BB2AAXX080903:3:2:1682:418#0
-GAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTAGNACGACAC
-+
-67777788888888888888888877776555443222100./..-,--,,*+*+*)))))()((''%"""#####
- at 30BB2AAXX080903:3:2:1372:359#0
-AGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCNGNCACAC
-+
-6777778/8888888888888886767765555423202$0/.,..,--,+'+**)())(&'(('''&"&"%%###
- at 30BB2AAXX080903:3:39:1040:410#0
-CACAAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAACCCTCCTTC
-+
-67777788888888888888888877776555443222100//...--,,+,+*****)))))((('"$%&&%%#"
- at 30BB2AAXX080903:3:39:1680:1963#0
-CGAATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCAC
-+
-67777788888888888888888877776555443221100//-.-,-,,+++*+*)*)))(((((%&&#%$#%"#
- at 30BB2AAXX080903:3:52:20:726#0
-GACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCCTGTTCAGT
-+
-67777788888888888888888877776555443222100//..--+,,++++**)**(((((((%&$"&#$"""
- at 30BB2AAXX080903:3:3:909:532#0
-CTCGGCTCGAATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTGATGAGATCGGAAGCGCGGGTCNACAANAA
-+
-6077778888888888888888887747635'44322110,.+..+-,-,*+*)#**#))#&('(#'""##"#""#
- at 30BB2AAXX080903:3:3:179:1209#0
-GCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATANCGACNCC
-+
-6777778888888888888888187797652534322-00///.,.,,+-+++***)*())'('(#'$"%"##""#
- at 30BB2AAXX080903:3:44:1147:1236#0
-GGCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAGATCGGCCGGGCG
-+
-677777888888888888888888777765524132221000/..---,,++++***)))))((('''&"#"""##
- at 30BB2AAXX080903:3:35:1596:2018#0
-TACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCNGGCTGACN
-+
-67777788888888888888888877476/./843.,,11,+.),,,'+++(%+')(#'&(#&&%&#"""$""##"
- at 30BB2AAXX080903:3:39:908:1960#0
-TACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCAGATCGGAAGAGCGGATCCGTCTG
-+
-677777888888888888888888777763/5343021201/..,,,*+,+'****'*)('(((#('"&%%%##$#
- at 30BB2AAXX080903:3:40:680:1828#0
-TATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCAGATCGAC
-+
-6777778888888888888888887777655544322210.//.---,,,+++***)())(((((('&""#$&%##
- at 30BB2AAXX080903:3:47:667:1328#0
-TATTATTCGGCGCATGAGCTGGAGGCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCACGTCAGC
-+
-677777888888888888888888777765554432-21000/..-,-,,,+++*)()()&))&(''""#$##"""
- at 30BB2AAXX080903:3:51:257:683#0
-GATTCGGCGCATGAGCTGGAGGCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCGGGGCCAGTTGCATAG
-+
-677777888888888888888,8877776555443222101/&..,,,,,++***)*(*)('((#'&$"""#""##
- at 30BB2AAXX080903:3:35:1366:1330#0
-ATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGNCTGTCTGN
-+
-6777778888888888888838887777655541322212///..----,+++***))((('(&'&'"&&&&$#""
- at 30BB2AAXX080903:3:35:986:1201#0
-AAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTNCTCTCCAN
-+
-677777888888888888888888777765/544322210//...--,-,,+++*)))((((((((("$#%"$##"
- at 30BB2AAXX080903:3:37:555:1743#0
-GCGCAGGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCCCCATCTN
-+
-6777778888888888888888887777465141*.-0+//..---,,,++)++**(*)%(((('''$"##$$##"
- at 30BB2AAXX080903:3:39:1568:407#0
-CCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGCTGTGAGATCGGAAGAGCGCGGCC
-+
-67777788888888888888888877776555443-/0000/...,--,,++**+)*)*)'(((&''"%"%$#"##
- at 30BB2AAXX080903:3:4:238:855#0
-ATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCNCTCANAN
-+
-677777888888888888888888777;655348322210//..---,,+,++*)))*((()((('%%"#"&#"""
- at 30BB2AAXX080903:3:35:1230:663#0
-TGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTCGGCCAGCCAGGCAACANCCCTCCAN
-+
-6777778888+888888888888877736)51443212100/.-),.-,-&++*#)*&)()&(((''"$%#"$$#"
- at 30BB2AAXX080903:3:59:1168:1739#0
-TTACCTAGAAGGTTGCCTGGCTGCCCCAGCTCGGATCGAATAAGGAGGCTTAGAGCTGCGCCTAGAGATCACACGC
-+
-677.7.88-88888888888882,2%7,60/.30*%2-&'&+.&.,--&++'+$*&))'(#'(#(&'%"$"$&%"#
- at 30BB2AAXX080903:3:3:1564:1104#0
-GCTGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCCNCATANGN
-+
-67777788888888888888888877776542423222,0/0.+---+,-*+**)*())'''#''&&$"####"""
- at 30BB2AAXX080903:3:34:1627:1973#0
-TGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTANGGCTAGNN
-+
-677777888888888888888888737765554412220201/--..-+++,'*)**'((##'''''"""%"#"""
- at 30BB2AAXX080903:3:39:1438:1738#0
-TGGAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTACCCNA
-+
-67777788888888888888888877776555443222000-/..---,,,+***))*)''((((('"%%%$#""#
- at 30BB2AAXX080903:3:58:700:1027#0
-GTCGTTAACTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGATTAGAGCTGTGCCCATGCACTCC
-+
-6777278/88881888*888837876-7655644*.00/#,'#*',-+-+,*+&)')))&'(#(##%""%%"$###
- at 30BB2AAXX080903:3:43:1426:1344#0
-GAGTCCTAGGCACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTCATAGGTAGCGCGTA
-+
-67777788888888888888888877776555343222110/-.-.+,$,++*)+()(#)'#&(&&%""#%%"""#
- at 30BB2AAXX080903:3:55:512:1206#0
-TGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGATCGNGAGCGACG
-+
-67777788888888888888888877776555443222100//..-,--,++++**)*)))(()((&"&$&""##"
- at 30BB2AAXX080903:3:47:226:570#0
-GATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGAGCTGTGACCAGT
-+
-67777788888888888888888877776555443222100//..---,,++++**)))()((('''$$%"####"
- at 30BB2AAXX080903:3:2:743:1397#0
-GTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGACNCGTGACA
-+
-6777778888888888888888887/776555441220./.-.+-.-,),*%)')*))'()%#''&'""$$""$""
- at 30BB2AAXX080903:3:46:665:230#0
-TGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGAGGCTTAGCGAGGTGCG
-+
-67777788888888888888888877276555443222000+//+--,,+,+'))))))())'#'&'$""""####
- at 30BB2AAXX080903:3:8:1383:1016#0
-CACAGCTCTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACNTCTACTNN
-+
-6777778888888888888888887777655544322210..-..-+-,,*++**))))('(('%&'""$""#"""
- at 30BB2AAXX080903:3:37:1138:1483#0
-ACGTGGTAGATGTGGTCGCTACCTAGAAGGCTGCCTGGCGGGCCCAGGGCGGCTCGGATAAGGAGGGCTNGNCGCN
-+
-677057888/88888888/88188773763''4232221&0//)-,-)&+++((')))((((('((#%$"&"##""
- at 30BB2AAXX080903:3:43:162:1401#0
-TAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAGATTGGAAGCGCGGGTT
-+
-67777788888888888888888877776555443212100//.,--,,-,*+***))()('#('''&"%""""""
- at 30BB2AAXX080903:3:50:1229:481#0
-TAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCAGATCGGAAGACCCCNCCT
-+
-677777888888888888888888777765554432221000/..-,+,,,+++***'*(')(((%'$"""$"##"
- at 30BB2AAXX080903:3:54:743:78#0
-TCTAAGCCTCCTTATGCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGGAACGACCACATCTACGTCGGTACT
-+
-677777888880188%8888848877-7653544122110./..,++&'+,$*)')*)('((#''#%""$"$"""#
- at 30BB2AAXX080903:3:52:263:1742#0
-CGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCGAATAAGGCTGCNTGC
-+
-67777788888888888888888877776555443022000//..--+,,*+)*)**(&()''''''"$"#$""##
- at 30BB2AAXX080903:3:1:486:576#0
-TAAGCCTCCTTCTTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACNGANCACT
-+
-67777788888888888858888877776355-8322.10/-/.--,,-,,++**)()())()('''&""""$###
- at 30BB2AAXX080903:3:46:1637:1322#0
-TAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACAGATCGGACCAGTTCTC
-+
-6777778888888888888888887777655544322210///..---,,,++***)*)))))('('"""$#####
- at 30BB2AAXX080903:3:36:1640:417#0
-TGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGGCTCCGNGTCACGNN
-+
-6777778881888888888888887877655145323210../..+,-,,-+)+*&))#)()(#'#'"""%#$"""
- at 30BB2AAXX080903:3:54:256:1201#0
-TGTGACGATAACGTTGTAGATGTGGGCGTTACCTAGAAGGTTGCCTGGCTGGGCCCGCTCGGCTCGCGNATGGATA
-+
-6777778888888888888888887%77'57-4/320.10#./#.',-+(++%()#((#&#(###'%""#"#""#"
- at 30BB2AAXX080903:3:41:1234:1246#0
-CTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCTTCCACA
-+
-6777778888888888888888887/776525243.1/0110..-.,,-++++*)*())((((('''$%""###""
- at 30BB2AAXX080903:3:44:1669:1394#0
-CTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTAGTGGTGACT
-+
-67777788828888888838888/777764554332%/.011-.,,-,,-**+**))()(()&(&''"#&#"""#"
- at 30BB2AAXX080903:3:1:1244:906#0
-GGGCTGTGACGATAAAGTTGTAGACGGGGCCGTTACCTAGAAGGTGGCCTGGCTGGCAGAGCGGAAGANACNCAGC
-+
-677777888888888&8-088888$7$76'754$30-21/)//.,+*,,,+,+&'*'()('&((%&'&"$$"##""
- at 30BB2AAXX080903:3:42:1260:86#0
-ATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCCCGAGCACAGCG
-+
-677777888888888888828888777745514432121..//..-)++-+&++****)*)'((#('"&%###"##
- at 30BB2AAXX080903:3:2:304:203#0
-TTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCAGANCGCNNAC
-+
-6777778888888888/48886887871.575141520101/..-,,--+++***))()))')''''$"#&""""#
- at 30BB2AAXX080903:3:38:1053:520#0
-TTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACCGCTCCTCT
-+
-67777788888888888882888377776552412220100/...---,,+++***)()))((((''"$%"&"#$#
- at 30BB2AAXX080903:3:46:136:456#0
-GCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGGCTGGCTGGAGATCGGGACCACGGG
-+
-677777888888888888888888777765554422221(0//..---),++++**))))#()(('&$"#$#%""#
- at 30BB2AAXX080903:3:50:490:337#0
-GCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCGCCCACCG
-+
-67777788888888888888888877776555413212100/..-.--*,,,+)+**())'))'('%"#"#""##"
- at 30BB2AAXX080903:3:35:487:455#0
-TGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCNCCATATCN
-+
-6777778888888888888888287777655544102020./,..--,,$,,')*)*((()'#('&'""$""###"
- at 30BB2AAXX080903:3:46:497:1571#0
-TGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGGTGCCTGAGATCGGAAGAGTGTGGGTG
-+
-6777778888888888888888887777655544222210,....---,&,+)**))*((#))''(&'"""$""""
- at 30BB2AAXX080903:3:4:1621:1090#0
-CGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCNCCTANCN
-+
-67777788888888888888888877776559442202200./.-,,,+,,+++*&)))((''('''""#"%""""
- at 30BB2AAXX080903:3:52:417:1814#0
-GAGCCGAGCTGGGGCAGCCAGGCAACGGTCTAGGTAACGACCACATCTACAACGTTATTGTCACAGCCCCGGGAGC
-+
-677777888888888888.888$877($6'52-4.32'10/1/.,+&+,+,)'+**)*%)'()(&'#%##""#$"#
- at 30BB2AAXX080903:3:35:262:1346#0
-GAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGNCCTCTCGN
-+
-67777788888888888888888877776555443222100//..---,,+,++***))))(()(('""$##"#""
- at 30BB2AAXX080903:3:53:124:1929#0
-ATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGATCTG
-+
-67777788888888888888888877776555443222100//..-.-,,+*++****))'))%(''$""%###"#
- at 30BB2AAXX080903:3:42:636:1959#0
-AGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATAGATCGGAAGAGCGAGACAC
-+
-67777788888888888888888877776555442222100//-.-.-,,,++*+**)))'(('(((&&%#$"#"#
- at 30BB2AAXX080903:3:37:611:1961#0
-GAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGATCCCAATCN
-+
-67777788888888888888888877776555443222200//..---,,+++***)*)))))((''"$$##""#"
- at 30BB2AAXX080903:3:57:1032:83#0
-GCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCACACA
-+
-67777788888888888888888877776555443222100//..---,,+,++*+))()()()(((&&&%$$$#"
- at 30BB2AAXX080903:3:34:1365:178#0
-TACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTNCTCGTCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('"""#"#$""
- at 30BB2AAXX080903:3:45:791:1839#0
-ACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCGTAGTAAA
-+
-677777888888888888888888777765554432/00-//..--,-,,,)+*)*))))(%(((('""#"&$$""
- at 30BB2AAXX080903:3:1:160:605#0
-TAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAAGATCGCNCANCACA
-+
-67777788888888888888888877776555413222000//./---,-+*+***)*))))()('&""%""#""#
- at 30BB2AAXX080903:3:1:1672:271#0
-ACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACACNCCNTACA
-+
-677777888888888888888888777;65522432/2100/./.----(+,**+')**))))(('#'"%#"##""
- at 30BB2AAXX080903:3:56:996:480#0
-CACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCCATCAGATCGACGC
-+
-67777788888888888888888877776555443222100//..---,,++++**))))))))(('&&#%""$""
- at 30BB2AAXX080903:3:37:685:525#0
-AAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACTGTCTCN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('$$%%"#"#"
- at 30BB2AAXX080903:3:3:273:607#0
-AGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTANNGACNAG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*))(((''$""##$"#"
- at 30BB2AAXX080903:3:34:1403:1812#0
-GGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAANCCCACTNN
-+
-677777888888888888888888777763554(322210-//..,---,+++*****)))))'((("$$$#%"""
- at 30BB2AAXX080903:3:58:1136:1196#0
-AGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGACATCA
-+
-677777888888888888888888777765554432221000/..---,,+++***)))))(((((&'&%"#$"#$
- at 30BB2AAXX080903:3:51:1018:1423#0
-TTAGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACACATGTACC
-+
-67777788888888888888888877776555443222000//-.----,,+++****))))))(('%$$#"####
- at 30BB2AAXX080903:3:36:369:1488#0
-TAATAATCTTCTTCATAGTAATACCCATCATAATCGGAGGCTGTGGAAACTGACTAGTTCTCCTAATCNCACATAN
-+
-67777788888888888888888877776555443222100/..,-$---,++***)'))%(()'('$"##%""""
- at 30BB2AAXX080903:3:34:589:162#0
-GGGGGCACCGATTATTAGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGNATACGCNN
-+
-677,778888288888888888887777655544322200///./-,,--++*++**))())((((("$"##"$""
- at 30BB2AAXX080903:3:45:94:1006#0
-GGGGGCACCGATTATTAGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGCAGAGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((('(&&"&#$#"""
- at 30BB2AAXX080903:3:48:1526:961#0
-CATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTAGATAGACACTACTA
-+
-677777888888888888888888777765554432+110,//..---,,+++***)')))((((%'"$"#""###
- at 30BB2AAXX080903:3:59:960:752#0
-GTAACACCCATCATAATCGGAGGGTTTTGCAACTGACTAGTTCCCCCCATAAACACAGCCCCACACCAGCACAACA
-+
-67777788888388888,88).8(-.3$)$$)$$+$##$#####%&"#&$&$#$########%#&##$"%$%#$$#
- at 30BB2AAXX080903:3:37:992:1531#0
-ACCCATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATGGCGTGTCCGCAN
-+
-67777788888888888888888877776555443221001//....-,,,*+**))))((((((''""$#$"#$"
- at 30BB2AAXX080903:3:41:708:1809#0
-TCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTAGATCGGGAGAGCGGTTTATCAGCCCTAC
-+
-6.07/784884888+8888&8.)0#2279/)32&-$/-../-,#+.()+()')(#%'#)&'''%###%""###""%
- at 30BB2AAXX080903:3:57:1145:842#0
-GAGGTAAGAGTCAGAAGCTTATGTTGTTTATGCGGGGAAACGCCATATCGGGGGCACCGATTATTAGGTGTCATCG
-+
-67777788883888888888888877776555443222100//..,.--,+++****))(()(((('$&&"$###"
- at 30BB2AAXX080903:3:44:1138:131#0
-GAGAGGGAGGTAAGAGTCAGAAGCTTATGTTGTTTATGCGGGGAAACGCCATATCGGGGGCACCGATTATTAGGGG
-+
-67777788884888888888888877776555443222100//.----,,,++**+*)))(()((''""$$$%%#$
- at 30BB2AAXX080903:3:52:1292:924#0
-GAGAGGGAGGTAAGAGTCAGAAGCTTATGTTGTTTATGCGGGGAAACGCCATATCGGGGGCACCGATTATTAGTTG
-+
-67777788888888888888888877776555443222000///.-----+++****)*))))('('"#%&%&""#
- at 30BB2AAXX080903:3:54:1266:181#0
-TAATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCCGCCCGGAC
-+
-6777778888888888888888887777655533322.10//./,.-,,,+,***)*))((((((&'"%""#&$$#
- at 30BB2AAXX080903:3:43:1141:217#0
-AATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((''$&&&&%$$%
- at 30BB2AAXX080903:3:55:417:996#0
-AATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCACTCTATGCCTGTG
-+
-67777788888888888888888877779550432202000%//,,(,-,+**+*)))(())%('('$""$"%#"$
- at 30BB2AAXX080903:3:44:101:650#0
-ATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTCCCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))('(&'%&%""""#
- at 30BB2AAXX080903:3:37:1389:523#0
-GGAGTAGGAGAGAGGGAGGTAAGAGTCAGAAGCTTATGTTGTTTATGCGGGGAAACGCCATATCGGGGTCACACTN
-+
-67777788888888888888888878776565442222000./..---,,,++***)**)((((('#%##$$&%#"
- at 30BB2AAXX080903:3:53:1503:1833#0
-GGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCTCGCCAGATG
-+
-677777888888888888888088977765551430221000/.---,*,,+++))))())((('(#""$#&#$##
- at 30BB2AAXX080903:3:47:1379:503#0
-CCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTNCCACACA
-+
-67777788888888888888888877776555443222100//..,--,,,,+****)))))))(('""$%#%%#$
- at 30BB2AAXX080903:3:44:1268:513#0
-GATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACAGATCGGACNCGCCG
-+
-67777788888888888888888877776555443222100///.---,-,,+*+**)))))(((''&$#"#"#""
- at 30BB2AAXX080903:3:3:1499:686#0
-GGCGTTTCCCCGCATAAACAACATAAGATTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATNAGCANAN
-+
-677777888888888888888888777%654544322200..-.-,+,-,+++**)*)())))(((($"$$$#"#"
- at 30BB2AAXX080903:3:58:1216:987#0
-ACTATAGCAGATGCGAGCAGGAGTAGGAGAGAGGGAGGTAAGAGTCAGAAGCTTATGTTGTTTATGCGTGTCAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(()'('$&%"%"%$$
- at 30BB2AAXX080903:3:35:825:1571#0
-CTCCACTATAGCAGATGCGAGCAGGAGTAGGAGAGAGGGAGGTAAGAGTCAGAAGCTTATGTTGTTTNCGCATTAN
-+
-67777788888888888888888877776555443222100/..-----,,++*****)))))((('"$"$#""""
- at 30BB2AAXX080903:3:36:435:1656#0
-TTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGCAGGAGTAGGAGAGAGGGAGGTAAGAGTCAGACTCCACTTAN
-+
-67777788888888888888888877776555443222000//..---+,+++****))))))('(#"$"#%#"""
- at 30BB2AAXX080903:3:38:88:196#0
-TAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCGACACACNN
-+
-67777788888888888888888877776555443222100//..---,,,++***))))((((('%"""$$##""
- at 30BB2AAXX080903:3:43:1050:857#0
-CTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAAGATCGGGAGGNGCT
-+
-67777788888888888888888877776555443222100//..---,,+++***))))(((((('&$$&""%#"
- at 30BB2AAXX080903:3:55:1633:265#0
-TTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTGCTATAGTGGAGGAGATCGGAAGAGCAACACAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&'&&&%$$##
- at 30BB2AAXX080903:3:37:1273:1398#0
-CTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACACGGGGCACN
-+
-67777788888888888888888877776555443222100//-.--,,,,++)++*))((()'(#'$&#####$"
- at 30BB2AAXX080903:3:2:1503:893#0
-TGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGCAGGAGTAGGAGAGAGGGAGGGANCGCACAC
-+
-67777788888888888888888878776555443302/101/./+,,,++$*+*'*)*'(()#((#%""""&$$$
- at 30BB2AAXX080903:3:40:214:1297#0
-AGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGCAGGAGTAGGAGAGAGGGCGTGACAAA
-+
-67777788888888888888888877776555443222100//..--,,,+++****)))))((''&'&""##""#
- at 30BB2AAXX080903:3:1:854:1236#0
-AGGGAGGGTAGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGCAGGAGTAGTNGCNCACC
-+
-67777788888888888813888873776555443212100...--,-,,+*++****(())((&&'"""#"$#$#
- at 30BB2AAXX080903:3:35:435:1046#0
-AGGGAGGGTAGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGATCGGAAGANGTCATCTN
-+
-6777778838888888888888887748652331521120.-..-+-,+,,+**'*()(''(('(''"""####""
- at 30BB2AAXX080903:3:3:830:1973#0
-CTAAGGGAGGGTAGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGAGCAGGAGCNCGCNNAT
-+
-6777778888888888888488883771655342020/1/0*..-.+++++++*('*()')(&((%'""%#"""""
- at 30BB2AAXX080903:3:59:764:951#0
-TCCTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTACGTAC
-+
-67777788888888888888888877776555413222100//-.---,,,+++***)*))((((''&%%$%"""#
- at 30BB2AAXX080903:3:54:1254:1712#0
-CCTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCCGCTCGTCA
-+
-67777788888888888888888877776555-43202100//.-.---,+,+****)*)(()(('&$%#""""##
- at 30BB2AAXX080903:3:42:1039:1366#0
-CTACTCCTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCNACCCTCCCTTAGCAGGTC
-+
-6777778888888888888888887777655184322-/00//----)-,,+****)#)(()'((('&"&&###"#
- at 30BB2AAXX080903:3:60:917:627#0
-TAGTTCCCTGCTAAGGGAGGGTAGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGCGCGANN
-+
-6777778888888888888888887777655544322210///.----,,,+++***)))(()('''%$$%%$#""
- at 30BB2AAXX080903:3:37:988:540#0
-GTAGTTCCCTGCTAAGGGAGGGTAGACTGTTCAACCTGTTCCTGCTCCGGCCTCCACTATAGCAGATGCGATCATN
-+
-67777788888888888888884877776555443222200//..---,-+++**+*)*())()((%"&%$$%%#"
- at 30BB2AAXX080903:3:53:473:1973#0
-CTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTAGCAGGCTATCATC
-+
-67777788888888888888888877776/5544322.000-/.--,,,,+,*)*))))('(()'''$""#$###"
- at 30BB2AAXX080903:3:59:559:1866#0
-CTGCTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTAGCAGGTGCAACAG
-+
-67777788888888888888888877776.5124312-000*/.,.+,,,*,+)***()(((%(&'''""#"#$$"
- at 30BB2AAXX080903:3:33:1458:593#0
-GGGTGGGAGTAGTTCCCTGCTAAGGGAGGGGAGACTGTTCAACCTGTTCCTGCTCCGGCCCCCACAGNTACATANN
-+
-677377888888888888888.88777765$5441/2-111/+.,.-,+,***)))))((&'(&'%#""#$$""""
- at 30BB2AAXX080903:3:42:1322:848#0
-TCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCCCCCTG
-+
-67777788884888888888888877778.55,4322000////-.-+,,,*+**+()))()(((''&$$#$%"##
- at 30BB2AAXX080903:3:55:1303:691#0
-TCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTACACTGTTCAACCTGTTCCTGCTCCGGCCTCACNCATTCAC
-+
-6777778088888888888888887777655544*2121/0*/+--++,,)+*)*)()')(('#''#$""$""#""
- at 30BB2AAXX080903:3:44:55:294#0
-AGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCAGAGCGGTAGA
-+
-677777888888888888888888777565554432.2100//..--,+,+++*+****)))(((('&"%&$""""
- at 30BB2AAXX080903:3:4:950:976#0
-GGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGTGGGTAGACTGGTCAACCTGTTCCTGCTCCGANTTCANCN
-+
-677777888888818888838888577765531432#210&./.---',,,*()'*()''((#'#''$"""$#"#"
- at 30BB2AAXX080903:3:36:1168:1309#0
-TACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTAGACTGTTCAACCAGATCGGAAGCTGCCACAN
-+
-6777778888888888888888887/7765554422221/0//,.---,,+++*+*'()))(()#('%"%""###"
- at 30BB2AAXX080903:3:57:1531:568#0
-TACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTAGACTGTTCAACCTGTTCCTGCACACAGCACA
-+
-6777778888888888888888887777655544+222100//..--,,,*++****)))))(((('$$%&#"###
- at 30BB2AAXX080903:3:57:165:1536#0
-TACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGGAGACTGTTCAACCTGTTCCTGCTCCACCCGCA
-+
-677777888888,888888888287771655544+3221*0//+--,*,,$+))*'(((%('(('''&&"$"""$"
- at 30BB2AAXX080903:3:1:1406:1095#0
-TTAGGTCTACGGAGGATCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTAGAATGATCAATCTGGCNTCNCTCG
-+
-677777888888888&88868-8+*777655-40321/&1/).,--((,,&++*''*(#('&#'%'#%"##"$%$#
- at 30BB2AAXX080903:3:3:857:183#0
-CAGGAACAGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACNTCACNCN
-+
-6777778888888888888888887777955541321200///..,*,-,*+++**)')((((('(''"#&%#"$"
- at 30BB2AAXX080903:3:46:206:1832#0
-ACAGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCT
-+
-67777788888888888888888877776555443222100//..---,,+++**+*)*))((((('&&$"&%###
- at 30BB2AAXX080903:3:46:369:828#0
-CAGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCACCTCTAG
-+
-6777778888888888882880887777655504/02.11//..,-,,,+,'+*))*$(((&'((&%$""%###"#
- at 30BB2AAXX080903:3:52:1100:878#0
-AGGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCAGATCGGAAGAGCGCGAGATC
-+
-67777788888888888883888877776555443222200//-..--,,*,++*)*&))))(((''%%#""""#"
- at 30BB2AAXX080903:3:46:346:359#0
-GGTTGAACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAAGATCGGAAGAGCGGGTCACGAGTCTGC
-+
-6777778888888888888888887777655544302210///.'.-),,-+++*)*)))())#(('%"#""#"##
- at 30BB2AAXX080903:3:58:1385:723#0
-AAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTAGACTGATCACA
-+
-6777778888888888888888887777655544321210//...*,+,,+,+*)*)**())(#(('$$%##$$$%
- at 30BB2AAXX080903:3:34:1668:795#0
-TAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGGAGNTCTACTNN
-+
-6777778888888888888888887777655544322.100//..-,-,+,,+***))*)))((&('"#$"###""
- at 30BB2AAXX080903:3:50:1187:1260#0
-ACAGTCTACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTGACACT
-+
-67777788888888888888888867776355443022100//-.---,++++***)*&)*)(((('$%#"#$#$"
- at 30BB2AAXX080903:3:41:1274:1572#0
-GGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGCTTGACTTC
-+
-67777788888888888888888877776555440*11100-/..,-,,,&,)''*)('%()(('('"$"""%""#
- at 30BB2AAXX080903:3:47:783:1424#0
-GGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGGGAGGGTCATAGCG
-+
-67777788888888888888888877776555443221100./...-+,,,,****))*(())('(($"$""""""
- at 30BB2AAXX080903:3:59:926:588#0
-CTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTAAGTGGCGTCC
-+
-677777888888888888888888477763554432021/0..----',,,*+)**()(((()((&&'"""#""##
- at 30BB2AAXX080903:3:45:1637:86#0
-ACCCTCCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTAGATCGGCGTAG
-+
-6777778888888888888888887775655.440222/00.,,-,-,),*+*())'$((((''(''"$%""""#"
- at 30BB2AAXX080903:3:47:205:443#0
-ACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGTTCCCTGCTGAGGGGAGG
-+
-67777788888888888888888877776553443222100//...--,,++++***)(()()((('$$$"#"#""
- at 30BB2AAXX080903:3:36:18:269#0
-CCCTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCAGANTCTCATGN
-+
-67777788888888888888888877776555443222000//.+----,++++**)))))(()(('""$###"""
- at 30BB2AAXX080903:3:3:1006:1559#0
-CTTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTAGCACNTCCANAC
-+
-67777788888888888888888877776555443.2210/1.---.,,,+++*+*)(*(((('(''"""#"#"##
- at 30BB2AAXX080903:3:50:115:49#0
-TTAGCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTAGATCTGTGGTGCT
-+
-67777788888888888888888877776555443222100./..---,,+++***)))))((('''$$#"""#$"
- at 30BB2AAXX080903:3:53:44:1998#0
-AGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGCGTGGTTGAGTGTGTA
-+
-67777-88888888,88)8/8188&7776525113222+'//,,/--+%+*')*+)%))(#)'#&%#""$###""#
- at 30BB2AAXX080903:3:43:958:344#0
-GATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGTAGACTCCT
-+
-6777778888888888888888887777655544232210///-.---,,+,+*+*)(*))'(((('""%"%####
- at 30BB2AAXX080903:3:50:217:332#0
-GATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGGAGCAGCTCGGC
-+
-67777788888888888888882857776554443222100//..---,,+++***)))))&(('&&&%#%"$""#
- at 30BB2AAXX080903:3:51:566:1759#0
-AGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGAGATCGGAGGGCTCGC
-+
-67777788888888888888888877776555443222100//...--,,+++*++*)&)())('('""""$#"##
- at 30BB2AAXX080903:3:41:823:1457#0
-TAAGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAAGATCGGCAGCACTG
-+
-677777888888888888888888777765554422201000/-.--,,-++++**())(())((''"$"#""$""
- at 30BB2AAXX080903:3:8:773:1334#0
-TAAGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCAGGGTGGNCATCACNN
-+
-67777788888888888888+88877776655443222100%///..-+,++*+*+))))((((#'&"$""%$#""
- at 30BB2AAXX080903:3:33:179:1759#0
-AACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTAGCAGGTGTCTCCTNTCTAGTNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))()((((('""%$#"#""
- at 30BB2AAXX080903:3:43:1414:1126#0
-CTAAGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTAAGATCGGAAGAGCGGGGCAGCGGCA
-+
-67777788888888888888888877576555463222100/)..--'+,+,+*))**())()'((&"$"%""##"
- at 30BB2AAXX080903:3:45:202:768#0
-TGGCAGGGGGTTTTATATTGATAATTGTTGTGATGAAATTGATGGCTCCTAAGATAGAGGAGACACCTGCTGGGGG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&&$#$%$$$
- at 30BB2AAXX080903:3:4:1436:690#0
-TATGGCAGGGGGTTTTATATTGATAATTGTTGTGATGAAATTGATGGCTCCTAAGATAGAGGAGACACNATCANCN
-+
-67777788888888888888888877774555.4522120,//.---++(,$)*+)(*))))'((&''"#"$""#"
- at 30BB2AAXX080903:3:3:492:1707#0
-ACGAAGAGGGGCGTTTGGTATTGGGTTATGGCAGGGGGGTTTATATTGATAATTGATATCGGCAGAGGNGAATNTG
-+
-6717470888888/88880-73161'2++3/+)113/-($)'&(%&&&$$$$#$#####&%###%##""#""""$$
- at 30BB2AAXX080903:3:49:466:1218#0
-GGACGGATCAGACGAAGAGGGGCGTTTGGTATTGGGTTATGGCAGGGGGGTTTATAAGATCGGGAGAGCGTGAGNA
-+
-67777788888888888888888877776355443222100/./.---,,+++&*()))(#((#'(#&#$""$"""
- at 30BB2AAXX080903:3:1:615:635#0
-ACCCCCTGCCTTAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATTACAGCAGTCCTACNTANCCCC
-+
-677777888888888888888488/7776,5343322210//...,-,-+,)++)*)*)())#(('''""#"$##"
- at 30BB2AAXX080903:3:35:1367:717#0
-AGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAAGAGGGGCGTTTNGACTCTAN
-+
-67777788888888888888888877776555443222100//..-----+++***)*)*)((('''""######"
- at 30BB2AAXX080903:3:1:563:663#0
-TAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAAGAGGGGCGTTTNCANACAC
-+
-67777788888888888888888877776355443222100//..---,+,++****)*)))((''(&"%#"####
- at 30BB2AAXX080903:3:46:380:1812#0
-TACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGCTCTAGCTG
-+
-67777788884088888883888,7/275/2534322-00///*,,,,,,*$+**+))()((('((%""%%"$###
- at 30BB2AAXX080903:3:33:1344:1817#0
-TGCCAGCAGCTAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAANCCATGTNN
-+
-677777888888888888888888777765554412221/0//..-(,-,,++*)*))))))(&(''"#$"$""""
- at 30BB2AAXX080903:3:59:1002:561#0
-ATGCCAGCAGCTAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAAGACACAAC
-+
-677777888888888888888883774765553133121100/.--*-,,,(+*))*)(((()('(%%'##"$###
- at 30BB2AAXX080903:3:58:1567:1363#0
-CCCTCTTCGTCTGATCCGTCCTAATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCAGATCGGACACACACCN
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))((('&$$%%%$%$"
- at 30BB2AAXX080903:3:40:950:182#0
-TAGTGATGCCAGCAGCTAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAGGAC
-+
-67777788888888888888888877776555443121100//..-.-,,++******)))((((''%##%#%###
- at 30BB2AAXX080903:3:4:994:447#0
-TCTTCGTCTGATCCGTCCTAATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCNCACTNCN
-+
-67777788888888888888888877776543543222100//..-.-+,+,++**)*)))))('''%"#"%#"""
- at 30BB2AAXX080903:3:40:555:354#0
-TATAGTGATGCCAGCAGCTAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTAGGACGGATCAGACGAAA
-+
-67777788888888888888888877776555443222100/...-,-,,,++**))*)))))('(''%%%%&##"
- at 30BB2AAXX080903:3:41:1687:558#0
-CCTAATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACGACCAGACGCC
-+
-6777778828888888888888887777655)443212/'0//,-',-+,,+*)***))(('(((''""#&""""#
- at 30BB2AAXX080903:3:49:699:684#0
-CCTAATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((('$$"$"$"##
- at 30BB2AAXX080903:3:41:901:774#0
-TGCGGTCTGTTAGTAGTATAGTGATGCCAGCAGCTAGGACTGGGAGAGATAGGAGAAGTAGGACTGCTGTAATTTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''&'$$"%#"$
- at 30BB2AAXX080903:3:41:164:161#0
-AATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACATAGCGAAAC
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(((('%%"$""###
- at 30BB2AAXX080903:3:33:522:1104#0
-ATTACAGCAGTCCTACTTCTCCTATCTCTCCCAGCCCTAGCTGCTGGCATCACTATACTACTAACAGNACTACCNN
-+
-677727848888828838888888/.77655234%1/2/00//.---,,,+++**)(()(((((#''""&#$##""
- at 30BB2AAXX080903:3:54:603:1887#0
-AGGTTGCGGTCTGTTAGTAGTATAGTGATGCCAGCAGCTAGGACTGGAGATCGGGAGAGAGGGTTATGCTGTGCTC
-+
-6777778888888888888888887377654414*.2-.///.(,.,+,,$$%*#)(()#))(%###%$#&"####
- at 30BB2AAXX080903:3:44:71:750#0
-TACAGCAGTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCACCCTC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))(((''&%%&%""""#
- at 30BB2AAXX080903:3:58:1705:1764#0
-GTGGTGTTGAGGTTGCGGTCTGTTTGTAGTATAGTGATGCCAGCAGCTAGGAGTGGGGGAGGGAGGCACACAACAN
-+
-677777888888888888888888977365251432121-$%/(,-*+)-,$#****()#)''#(('$&&$%$%$"
- at 30BB2AAXX080903:3:1:1560:1250#0
-GGTGGTGTTGAGGTTGCGGTCCGTTAGTAGTATAGTGATGCCAGCAGCTAGGACTGGGAGAGATAGGANTANGAGC
-+
-6737778888888/8888864)88287+050,3/2.1/00/+..-,.+,),)#$**))'(#('#(''"""#"""""
- at 30BB2AAXX080903:3:41:68:1446#0
-TCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACGTCCCACAG
-+
-67777788888888888888888877776555443222100//..---,,,++*+)*)))))(((('&$#$$#$#"
- at 30BB2AAXX080903:3:50:1461:1468#0
-CCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACCCTCTTCGCC
-+
-67777788888888888888888877776555443222100//.----,-+++***)))))()(((%%"&""##"#
- at 30BB2AAXX080903:3:33:1562:1294#0
-CGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGTGATGCCAGCAGCTAGGACNCAGTATNN
-+
-6777778888888888888888887777655534322200.//-,---,,++++**)*))(((((('"$"""##""
- at 30BB2AAXX080903:3:54:196:734#0
-CGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGTGATGCCAGCAGATCGGGAGAGTGTGTG
-+
-677777888888888888888888771763552422-2/0/./(,.,,,,,++)*)))')'#(('#&%##""""#"
- at 30BB2AAXX080903:3:45:1750:1587#0
-TCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCGC
-+
-67777788888888888888888877776555443222100./...,,,-+++***)*))))))(('$%#%%"$$$
- at 30BB2AAXX080903:3:8:1135:912#0
-CTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGTGATGCCAGCAGCNACGCATNN
-+
-67777788888888888888888847776455443522100/..,--,,,,+****))*&)((((('""#"$#"""
- at 30BB2AAXX080903:3:58:201:1044#0
-CCTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGGCTGTTAGTAGTATAGTGATGAGATCGGACGACGNNC
-+
-677777888888888888888838787765454232221%0//-..--+,,++*+*)))))()((('%%%"#"""#
- at 30BB2AAXX080903:3:40:111:456#0
-CTCCTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGTGATGCCAGCNACTCGCTA
-+
-67777788888888888888888877776555443222100//..--,,,+++***)*)))((((''""$"$"#""
- at 30BB2AAXX080903:3:36:29:1528#0
-CCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCNCATCACAN
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)*(()('''"$$"%#$#"
- at 30BB2AAXX080903:3:56:221:1884#0
-CCCCTCCTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGTGATGCCCGCCACCTC
-+
-62777788888888888888888827706555443020+00//.'-.-+,)+*)*#)*()()'('%#"$#""$#"#
- at 30BB2AAXX080903:3:2:878:917#0
-AGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGNCTCTCAG
-+
-67777788888888888888888877776555443220110//...-,+,+++*+*)))))()(((%""##$%%$$
- at 30BB2AAXX080903:3:36:596:529#0
-ATGGGGTCTCCTCCTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGTATAGCAGTGTNAN
-+
-677777888288888888888888777765554412221/0//..,--,,++++***)))(((((('%$&%$#"""
- at 30BB2AAXX080903:3:50:297:576#0
-ATCACTATACTACTAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAAGATCGGAAGCGCGGACCC
-+
-67777788888888888888888877776555443222100//..-.-,-++++**)))((()((''$$$""""##
- at 30BB2AAXX080903:3:49:1559:880#0
-ATAGAATGGGGTCTCCTCCTCCGGCGGGGTCGAAGAAGGTGGTGTTGAGGTTGCGGTCTGTTAGTAGCTGAGCTGT
-+
-67777788888888888888888877776/554432221/0//.,---,,++++**))))()(('('$""""#"""
- at 30BB2AAXX080903:3:47:1294:1699#0
-TAACAGACCGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCACTCTATACCACGCACGATC
-+
-677077888888888888888888777735554432-2100/*/--+-,,+*%)))(()(((((''&"$###"#""
- at 30BB2AAXX080903:3:51:1489:315#0
-GTGACCGAAAAATCAGAATAGGTGTTGGTATAGAATGGGGTCTCCTCCTCCGGCGGGGTCGAAGAAGCTAAACACA
-+
-67777788888888888888888877776555443222100//..----,++++**))())()('(&$$#""%##"
- at 30BB2AAXX080903:3:51:385:1717#0
-CAGGGTGACCGAAAAATCAGAATAGGTGTTGGTATAGAATGGGGTCTCCTCCTCCGGCGGGGGCGAAGCCCAGGAC
-+
-67777788888888888888888877776555443222100//.,.---,-++***)*)))('('#%"$"$$"##$
- at 30BB2AAXX080903:3:38:1690:1353#0
-TCAGGGTGACCGAAAAATCAGAATAGGTGTTGGTATAGAATGGGGTCTCCTCCTCCGGCGGGGTCGATGTGCGCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(('((%"%"""""""
- at 30BB2AAXX080903:3:57:546:482#0
-TAAACTTCAGGGTGACCGAAAAATCAGAATAGGTGTTGGTATAGAATGGGGTCTCCAGAGCGGAAGAGCNCNTCCT
-+
-67777788888888888888888877776555443222100//.-.--,,+*+***))))))(((''''"$""$#"
- at 30BB2AAXX080903:3:46:789:2021#0
-TAAGAATATAAACTTCAGGGTGACCGAAAAATCAGAATAGGTGTTGGTATAGAATGGGGAGATCGGTGGGAGTGGG
-+
-67777788888888888888888177776555243022000./,.--,-,+++***)))()(('((&"$""#"##"
- at 30BB2AAXX080903:3:2:394:1097#0
-GGAGGAGACCCCATTCTATACCAACACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTACNCTANACT
-+
-67777788888888888888888877776555443222100//.----,,++++****))))(((('""%&$"#""
- at 30BB2AAXX080903:3:34:1453:92#0
-AAGCCTGGTAGGATAAGAATATAAACTTCAGGGTGACCGAAAAATCAGAATAGGTGTTGGTATAGAANGACCTTNN
-+
-677777888888888888888888.7776555413222100//..---,,+++*****))()(((('"""$$""""
- at 30BB2AAXX080903:3:55:246:443#0
-ACAATATGGGAGATTATTCCGAAGCCTGGTAGGATAAGAATATAAACTTCAGGGTGACCGAAAAATCACTANANTA
-+
-67777788888888888888888877776555403222.00//.----,,++*'****))(((((('$""#"#""#
- at 30BB2AAXX080903:3:8:523:813#0
-TCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATACTACCAGGCTTCGGAATAATCTCCCATATNACAAGCNN
-+
-6777778888888888-88883887777655544322**0///-----,,+,*++*))))'('((''""#"""$""
- at 30BB2AAXX080903:3:8:599:1587#0
-TTCCGGAGTAGTAAGTTACAATATGGGAGATTATTCCGAAGCCTGGTAGGATAAGAATATAAACTTCNGTGCCCNN
-+
-67777788888888888888888877776555443202100/...-,-,,+++**+))))))(((('""$""##""
- at 30BB2AAXX080903:3:34:1226:870#0
-TATGTATCCAAATGGTTCTTTTTTTCCGGAGTAGTAAGTTACAATATGGGAGATTATTCCGAAGAGANACACATNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))(''&"$%$&$#""
- at 30BB2AAXX080903:3:54:1498:2015#0
-ATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGTATGGTCTGAGCTATGATATACACTGGCA
-+
-67777788888888888888888877776555443222100./..--+-,,++***))()))(((('&$&#%%"$#
- at 30BB2AAXX080903:3:52:581:1722#0
-AGGAAGCCAATTGATATCATAGCTCAGACCATACCTATGTATCCAAATGGTTCTTTTTTTCCGGAAGATCGGACTA
-+
-67777788888888888888888877776555443222100//..-,-,,,++***)))))((((('&$"&&$"""
- at 30BB2AAXX080903:3:2:209:537#0
-CCCTAGGAAGCCAATTGATATCATAGCTCAGACCATACCTATGTATCCAAATGGTTCTTTTTTTCCGCNCGANNCT
-+
-67777788888888888888888877776555523220000//./-,,-+,++***))**)((('''%"$$"""#"
- at 30BB2AAXX080903:3:1:1381:1499#0
-CCGGAAAAAAAGAACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGTNCTNTACA
-+
-6777778888888888888888887777655044321210.//..--,,,+,+**)*)))((''(('%"#""#"""
- at 30BB2AAXX080903:3:55:1499:1541#0
-GGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACACACACTTCA
-+
-67777788888888888888888877776555543222+0/-....--),*+')**)*)()(((('%$$%$#%#$#
- at 30BB2AAXX080903:3:37:1034:540#0
-TAGGTATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTCCACACCN
-+
-67777788888888888888888877776555443222100./..----,-++***)*)))(((('&$$%%"#"#"
- at 30BB2AAXX080903:3:45:1587:736#0
-TCTATTCCTACTGTAAATATATGGTGTGCTCACACGATAAACCCTAGGAAGCCAATTGATATCATAGACAATGCCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$"#%%"#""
- at 30BB2AAXX080903:3:1:453:1293#0
-CTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAANCANCCTA
-+
-6777778888888888888888887777655144322200./..-.,,,,++*+**)))())(((('&""""$#""
- at 30BB2AAXX080903:3:49:1384:782#0
-TATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGCCTAC
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))))((('''&""$#""##
- at 30BB2AAXX080903:3:58:1350:1446#0
-GATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACTACACA
-+
-67777788888888888888888877776555443222100//..---,,,+++**)))))((((('&&&"#$%$$
- at 30BB2AAXX080903:3:55:1033:839#0
-CTCGTGTGTCTACGTCTATTCCTACTGTAAATATATGGTGTGCTCACACGATAAACCCTAGGAAGCCCAGTTCCCA
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))()('('$$#"$####
- at 30BB2AAXX080903:3:41:176:368#0
-GGTGAAATATGCTCGTGTGTCTACGTCTATTCCTACTGTAAATATATGGTGTGCTCAAGATCGGAAGNGCGCGTNA
-+
-67777788888888888888888877776555443222100//..---,,++++****)*)))(('&"$#""""""
- at 30BB2AAXX080903:3:51:904:1644#0
-TATGGTAGCGGAGGTGAAATACGCTCGTGTGTCTACGTCTATTCCTACTGTAAATATATGGTGTGCTCCCACTCCA
-+
-67777788888888888888838877776551443+2010///(-,,+,-,++*****)()'('(%'"$#"$"""#
- at 30BB2AAXX080903:3:1:1497:1140#0
-CGTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTCNCTNAACC
-+
-67777788888888888888888877876555443222100-,+,.,-+,+++***)))(''(((''$"$"""#""
- at 30BB2AAXX080903:3:59:689:75#0
-GGTGGGGATAGCGATGATTATGGTAGCGGAGGTGAAATATGCTCGTGTGTCTACGTCTATTCCTACTGCACGCNNA
-+
-67777788888888888888888877776555-43222100/...%,,,,-,***&*))')(('#''&$$$"#"""
- at 30BB2AAXX080903:3:49:1411:1680#0
-ATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCTCATCGCC
-+
-677777888888888888888888777765554432221000...---,,,++****())()()(('%"#""#"#"
- at 30BB2AAXX080903:3:44:1393:884#0
-GACGCCGGTGGGGATAGCGATGATTATGGTAGCGGAGGGGAAAAATGCTCGTGTGGCTACGTCTATTCTTNCTGTG
-+
-6777778848888888888888887777655544322200&//&.,-,+,,**'*'#((')#(((''$$#"&%%$%
- at 30BB2AAXX080903:3:44:160:1236#0
-AGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCACCGGCGCCACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))('(''&"###$""
- at 30BB2AAXX080903:3:41:83:549#0
-TAAATACTTTGACGCCGGTGGGGATAGCGATGATTATGGTAGCGGAGGGGGAATATGGTCGTGTGGTNTGGCACTC
-+
-67777788888888888888888877776555443222100/-..,---,)++(*')')()'('(%%"%"#$"#"#
- at 30BB2AAXX080903:3:50:1526:952#0
-CGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAAAGCACATGCACCC
-+
-67777788888888888888888877776555443222100//...--,,+,+**))))))((((#'%$$"%""#"
- at 30BB2AAXX080903:3:55:348:685#0
-CTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGACGCCGGTGGGGATAGCGATGATTATGAGATAGGCAGCAG
-+
-67777788888888888888888877776555443222100//..---+,+++*+*)*))()(('('"&%"$###"
- at 30BB2AAXX080903:3:49:1611:783#0
-CTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGCACAATA
-+
-67777788888888888888888877776555443222100./..---,,+++****)))))(((('""#"$"#"#
- at 30BB2AAXX080903:3:33:231:495#0
-TCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGACGCCGGTGGGGATAGCGATGATNTCTATCNN
-+
-67777788888888888888888877176555445222100//..---,,+*+***)*))(((('(&"$$"#"#""
- at 30BB2AAXX080903:3:38:1647:608#0
-CCATAATCATCGCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATGACACN
-+
-677777888888888888888888777165554,3222110//...-,,,+,)+)**))((('('''&$&%$"##"
- at 30BB2AAXX080903:3:43:159:718#0
-TCGCTATCCCCACCGGCGTCAAAGAAGTTAGCGGACACGACACACTCCACGGAAGAGATATGAAAAGAGATGCTGA
-+
-6777578888888888+8083888&777*5/'&23')'1/0/&..,-,,,+)*+*)&))()())(''%%""$"#"#
- at 30BB2AAXX080903:3:44:394:1454#0
-AGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGACGGCGGTGGG
-+
-67777788888888888888888877776555443222100//...--,,+++**)))))')((('&'$%&&"$"#
- at 30BB2AAXX080903:3:8:958:605#0
-CAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGANGCCATCNN
-+
-67777788888888888888808877776555443222100//..---,,+***)**)*)(')((('"#&%""$""
- at 30BB2AAXX080903:3:41:956:760#0
-AGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGACTC
-+
-67777788888888888888888877776555443222100//...--,-+++******))(((((''$%&##$"#
- at 30BB2AAXX080903:3:50:945:627#0
-ATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCAGGCCGGACG
-+
-67777788888888888888888877776555443222100//..--,,,,++***))))))()'''$"##"#"#"
- at 30BB2AAXX080903:3:41:1134:226#0
-AAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCGTAGGCTT
-+
-67777788828888888888888877776553442222000/..-----,+++***)())))'('(''"$#&##""
- at 30BB2AAXX080903:3:42:911:348#0
-GATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAAT
-+
-67777788888888888888888877776555443221100//..-,-,,*+++**)*))))((((#%$&##%"$#
- at 30BB2AAXX080903:3:55:1413:1976#0
-CTGACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCACTNTTCAT
-+
-67777788888888888888888877776555443222000//--.-,-,+++***('()(()((('&$""""#"$
- at 30BB2AAXX080903:3:55:25:1257#0
-AAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGCGGGCGAGATTCG
-+
-67777788888888888888888877776555443222100//./---,-+++***))'))((''#&$%""$#"#"
- at 30BB2AAXX080903:3:2:1741:1364#0
-GACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCNATCTATC
-+
-6777778888888888888888887777635544321211//.-.,-,,,,,++*())'))(((''''"$%$##$#
- at 30BB2AAXX080903:3:57:1350:1968#0
-GAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGAGATCGGCGCACAGC
-+
-67777788888888888888888877776555443222100//..----,+++**)))*)))(((('$$$"#$#"$
- at 30BB2AAXX080903:3:33:283:1903#0
-AGGGGAAAAGAAAGATGAATCATAGGGCTCAGAGTACTGCAGCAGATCATTTCATATTGATTCCGTGNTTGCACNN
-+
-677777388888888888888)887777053524#3221-,/...,*-,,$+++%*))*(()#((&'"#""$"$""
- at 30BB2AAXX080903:3:45:57:409#0
-CCACACTCCACGGAAGAAATATGAAATGATCGGCTGCAGTGCTCTGAGCCCCAGGATTCATCTAGATCACGCAGTG
-+
-6777778888888888)88888887777655'4/3/10100/-..---,(+$+***)*'()()((('&""$""##"
- at 30BB2AAXX080903:3:52:422:719#0
-CCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTCACCACCGT
-+
-677777888888888888888888777765554432221/0//..---,,+++***)*))))(((('$"#$%%%$#
- at 30BB2AAXX080903:3:46:1470:1303#0
-TACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGNGTCAGCGG
-+
-67777788888888888888888877776555443222100//..---,-+++***)))))((((('""%#""#""
- at 30BB2AAXX080903:3:33:1090:274#0
-TCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACNCTTCCANN
-+
-67777788888888888888888877773555443222100//....-,,,++*****))))(((('"%""$#"""
- at 30BB2AAXX080903:3:1:64:885#0
-GGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGNGTNACAC
-+
-67777788888888888888888877776555443212100///.---,,+,+***)*)))))((('&""$""#"#
- at 30BB2AAXX080903:3:58:220:769#0
-AAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATCCATCTTTCTTTAGATCGGAAGAGCNTNTCNC
-+
-67777788888888888888888877776555443222100/..'---,,+++*****)))(('(''&&"#"$#"$
- at 30BB2AAXX080903:3:1:216:374#0
-CAGTCAGGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCNTGNGCCA
-+
-67777788888888888888888877776355443022100/..,---,,,++*'**)))))(((('$"""""###
- at 30BB2AAXX080903:3:33:1396:1247#0
-CAGTCAGGCCACCTACGGCGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGAAGATCATTTNATCTCANN
-+
--77777888888888888,888887777655544320200/./.----,,+++*)*)()')(()(%'"$%$%$#""
- at 30BB2AAXX080903:3:3:833:1687#0
-ACAATGCCAGTCAGGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGANCATANCA
-+
-677777888888888888888888787165554,32211/0//.---,-,+,++**)))())()(('%"$"%$"##
- at 30BB2AAXX080903:3:54:1315:1714#0
-GAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGAGATCCAC
-+
-67777788888888888888888877776555443222100//..---,,+,++**)*))()((((&&"%"#"##"
- at 30BB2AAXX080903:3:36:18:1196#0
-TACAATGCCAGTCAGGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCANCCACACGN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()'('""$"###""
- at 30BB2AAXX080903:3:38:1587:1387#0
-ATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATAGATCGGACA
-+
-67777788888888888888888877776555443222100//...-,-,+,+***)*)()((((''"$%$#""$#
- at 30BB2AAXX080903:3:39:1317:1418#0
-TGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTATCTACC
-+
-67777788888888888888888877776555443222100/....--,,+**+*)))))()()(('$$###"###
- at 30BB2AAXX080903:3:8:494:1765#0
-TGCTGCAGTGCTCTGAGCCCTAGGATCCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTANAGGAGCNN
-+
-67777788888888888888888877'763.5443.20100/..,.+-+,,*+*+*)*(()((((('"$""#""""
- at 30BB2AAXX080903:3:1:432:453#0
-AGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAANCANCTCC
-+
-67777788888888888888888877776555443212110/...,,,,,+,+*+***))))(((''%"%""""#"
- at 30BB2AAXX080903:3:38:1613:1535#0
-AGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAACCTCACTA
-+
-67777788888888888888888877776555443222100/...---,-,++***)))))(()'('$$$&%#"""
- at 30BB2AAXX080903:3:43:942:1214#0
-GTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGGTTCG
-+
-6777778888888888888888887777655544322210.//..--+,,,,+*+*)*))))))(''&$&%""""#
- at 30BB2AAXX080903:3:49:1118:1874#0
-CCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTATGGTGCCT
-+
-67777788888888888888888877776555445222100////----,+++*)*)*))))(((''"#"""###"
- at 30BB2AAXX080903:3:52:665:1872#0
-TAGGATTCATCTTTCTTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACT
-+
-67777788888888888888888877776555443212101//..-.-,,+,++**)*))))))(''""#&%%%$#
- at 30BB2AAXX080903:3:36:1411:1733#0
-GTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGGTGAGATCGGATNACTGTNN
-+
-677777888888888888888888777765554432221/0//..---,,+,+++*)))))))('('""###""""
- at 30BB2AAXX080903:3:51:447:677#0
-GTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGGTGAAGATGGACAGT
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))(((''"""""####
- at 30BB2AAXX080903:3:49:1618:721#0
-CGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTAAGATCGGAGTACGC
-+
-67777788888888888888888877776555443222100//..---,,+++****))))((('(($$""$"#"#
- at 30BB2AAXX080903:3:50:22:1750#0
-TCTTTTCACCGTAGGTGGCAGGACTGGCATTGTATTAGCAAACTCATCACTAGACATAGTACTACTCGTGCGTCGA
-+
-677777882888888888/888887777654524'22'+00'..,'--,(,++***)')))'()'%'&""$"""""
- at 30BB2AAXX080903:3:38:296:1167#0
-GTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGCTCACCAGA
-+
-677777888888888888888888777+655544.222100//..---,,,++**))))'(((('(&$%""""##%
- at 30BB2AAXX080903:3:45:418:120#0
-AGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCAGATCGGTCGAGCGC
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))'('((($$#&"%"#"
- at 30BB2AAXX080903:3:51:258:624#0
-TTTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACCCGCTCTT
-+
-67777788888888888888888877776555443222100//..---,,+,+*+*)()))())(('$"$"#"$""
- at 30BB2AAXX080903:3:51:862:1995#0
-CGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTCCNGAGCT
-+
-67777788888888888888888877776555443222200//./---,,,+++**)))))(('('%"$#""""#"
- at 30BB2AAXX080903:3:47:435:968#0
-GTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGAGATCGGAACAGCCATNA
-+
-67777788888888888888888877776555443222200//..---,,+,+*+**)))))((((($$###"#"#
- at 30BB2AAXX080903:3:50:1560:155#0
-AGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGCGTCTCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''"%##"$"##
- at 30BB2AAXX080903:3:44:846:700#0
-GAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGAGATAGGATG
-+
-67777788888888888888888877776555443222100/...---,,+++***)*)))))((('$"%"&%#"$
- at 30BB2AAXX080903:3:8:1090:1869#0
-GGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTCGNCATACANN
-+
-67777788888888888883888877776545445222100//).,.-,-,++****(((((((&%'"$"""$#""
- at 30BB2AAXX080903:3:50:527:539#0
-AAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGACGGGCAGAC
-+
-67737788888888888888888877736)554432221.0/..,---,-+++******))))(((%&"""#####
- at 30BB2AAXX080903:3:60:299:108#0
-CCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCNGANN
-+
-677777888888888888888888777765554432221/0//...-,,,+,+++'**))))''(&&$%&$"""""
- at 30BB2AAXX080903:3:48:1710:2003#0
-GAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGATCAA
-+
-67777788888888888888888877776565443120100-/..--,-,,+++**'*))))%('('%"$"""#""
- at 30BB2AAXX080903:3:35:1148:1226#0
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGNCCACTATN
-+
-67777788888888888888888877776555443222000//..--,,,+++**)***(*()((('"$#"$#"#"
- at 30BB2AAXX080903:3:58:492:1504#0
-GGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATCAGTTTGCTAAGATCGGAAGCCACAC
-+
-67777788888888888888888877776555443232100//..-.-,,,,+**))*)))(((('''$%""###$
- at 30BB2AAXX080903:3:43:1196:1342#0
-GACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCCC
-+
-67777788888888888888888877776555443222100//./---,,+++++*)*))))')((''%#$&%$##
- at 30BB2AAXX080903:3:53:527:1583#0
-GTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAACGTCAGCC
-+
-67777788888888888888888877776555443222201//..---,,+++***)*)()()((''&##"#""##
- at 30BB2AAXX080903:3:40:699:290#0
-ACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACT
-+
-67777788888888888888888877776555443222100//..---,,+*+***))(())(((('%&$&%%$$"
- at 30BB2AAXX080903:3:60:893:488#0
-ACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGAGATCGGCACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((('''$%&%##""
- at 30BB2AAXX080903:3:44:1651:219#0
-AGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACACTGCACGC
-+
-67777788888888888888888877776555443222100//..---,,+,+*****))))((((''#$%&"$$"
- at 30BB2AAXX080903:3:60:945:1556#0
-AGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATAATCTAACANN
-+
-67777788888888888888888877776555443222100//..---,-+++****)))(())'''""$##$#""
- at 30BB2AAXX080903:3:46:751:1726#0
-CTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCAGCTC
-+
-67777788888888888888888877776555443222100//..---,,+,+***))))))(((('&"#$$%"#"
- at 30BB2AAXX080903:3:50:233:2044#0
-ATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATATACAACTA
-+
-677777888888888888888888777765554452211/01/..--+,,+++*+**)))))'((('""#$"##"#
- at 30BB2AAXX080903:3:43:501:169#0
-ATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCCCAAGATCGGAGGTACA
-+
-67777788888888888818882877776553453222100//..+,,-+*+**+)))'#((''(%#%&"#"""#"
- at 30BB2AAXX080903:3:34:766:124#0
-AGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGNCTACATNN
-+
-677777888888888888888881777765554422121/0//.----+-+++****)*))'('(('"%#%"##""
- at 30BB2AAXX080903:3:50:1679:1247#0
-TGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTCACTACGA
-+
-677777888888888888888888777767554432-21/0//..---,,+++***()))))((((%"$##""$""
- at 30BB2AAXX080903:3:35:944:1539#0
-TAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTNCTCTACAN
-+
-67777788888888888888888877776555443222100//..---*,+++***)()))((((('"""$""#""
- at 30BB2AAXX080903:3:39:1042:216#0
-TAGGACATAGTGGAAGGGAGCTACAACGTAGTACGTGTCGTGGAGTACGATGTCTAGGGAAGATCGGAAGAGGGAC
-+
-6777778888288888%88852067773355+3/3'2110./#..+,+,,(,($'*(()()((#'''""%"""#$#
- at 30BB2AAXX080903:3:41:1019:1263#0
-TATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTAGCGCGCGGC
-+
-67777788888888888888888877776555443222100//..---+,+,+***))))*))('''%"%#%$%#"
- at 30BB2AAXX080903:3:34:1757:1065#0
-TGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGNCTACACNN
-+
-67777788888888888883888877776552443222100-/..,,,,,++*+**(*()()(((''"%"#%$$""
- at 30BB2AAXX080903:3:57:127:1200#0
-TGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGATGTGTCCC
-+
-67777788888888888888888877776555443212100//...,-+,+++***)*))')(((&'%&"""####
- at 30BB2AAXX080903:3:59:1488:629#0
-TGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTACACANTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&$%%%%$"#$
- at 30BB2AAXX080903:3:43:121:843#0
-ATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((('&&$$$""#""
- at 30BB2AAXX080903:3:43:121:845#0
-ATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTCTTT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((('&%$$%"$"""
- at 30BB2AAXX080903:3:52:966:163#0
-AGCAAACTCATCACTAGACATCGTACTACACGACACGCACTACGTTGTAGCTCACAGACCGGAAGAGTCTCTCCTT
-+
-6777778888888888888888887747655,4422.%10/...+--)+,+)++**))&&((('(''"%#$"##""
- at 30BB2AAXX080903:3:38:229:803#0
-AAACTCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCAGATCGGGAGAGCGCGACAGC
-+
-677777888888888888888888766765554402221/00/.---*,,++(*)**()')((((''$%%%%$$"#
- at 30BB2AAXX080903:3:39:1324:467#0
-TCATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGCTCAC
-+
-6777778888888888888888887777654644322.000/..,-,-,,++****))(((('('%'"$&$"#$#$
- at 30BB2AAXX080903:3:37:662:158#0
-CATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTAAGATCGGAAGAGACCCTATNN
-+
-677777888888888888888888777765554432321/0//-..-++-+,+))**)()))(((''$"#$"""""
- at 30BB2AAXX080903:3:46:257:525#0
-ACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGATCGGAAGGGGCCTAGG
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(('('""####"""
- at 30BB2AAXX080903:3:54:791:1181#0
-ATCACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGAGCCTTAC
-+
-67777788888888888888888877776555443222100//..---,,+,++***)*))))((('%""""""""
- at 30BB2AAXX080903:3:54:439:1762#0
-ATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGATATGTCGACG
-+
-6777778888888888*888888877776355443232200/..,.-,,,+*+***)))()&)&'&'$""#"##$"
- at 30BB2AAXX080903:3:35:1425:1618#0
-AATACAGCTCCTATTGATAGGACATAGAGGAAGTGAGGTACAACGAAGTACGGGTCGTGTAGAACAGNCCTGTACN
-+
-677777888888888888888888787.657541352'+/&..,.(--',++(+*))#*#&)#(#'&"$$"""#$"
- at 30BB2AAXX080903:3:44:1515:2000#0
-ACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGNTGTCTAG
-+
-67777788888888888888888877776555443222/011,.-++++,,++*#)*)*()(((('''"$&""#""
- at 30BB2AAXX080903:3:47:242:1885#0
-ACTAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCCATAGGAGCCCCTAGA
-+
-677777888888818888888888777&6555.4/3+2.00.'..,-,,,++++'*(#*(#&(((''$#$"$##$#
- at 30BB2AAXX080903:3:40:1292:216#0
-AAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTGCGCTGGTTGCC
-+
-6777778888888888888888887773655544'222.%00..--(*,$+++&*(()()'((#(%'"%"&"#""#
- at 30BB2AAXX080903:3:41:811:1406#0
-CAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTAAGATGTCTCG
-+
-67777788888888888888888877776555443222120//..,-,,,+,+****))))(()('#$"%&$"#""
- at 30BB2AAXX080903:3:49:1201:525#0
-CAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACCAGGTATGA
-+
-6777778888888888888888887/776555443/2210/1,..,-++,+,)**+)')()%(('(#$"""$##""
- at 30BB2AAXX080903:3:49:49:1529#0
-TAGACATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCGCCCCACAC
-+
-67705785883388.888038888977595454/32/201/0..',,,+,,*((+)(('))((((''&$""$$#"#
- at 30BB2AAXX080903:3:59:1342:1581#0
-GGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGTACGNATCAC
-+
-6777778888888888888888887747655544322-100-.-,.-+-+++)*(*)*(#)()(''&%%""&"###
- at 30BB2AAXX080903:3:35:274:647#0
-TGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTAGNGCTCAAGN
-+
-67777788888888888888888877776555443222*0./..----*,*,+)*(*&)('((('('""%#&"#""
- at 30BB2AAXX080903:3:55:591:524#0
-ATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGGGAGCTACAACGTAGTACGTGTCAGATCTGGCGGCGG
-+
-677777888888888888888888777765554432221*0./&,,,+-)*&+*%+))%*#((('%'%&##"#"""
- at 30BB2AAXX080903:3:47:1278:1119#0
-CATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAAGATCGGAAGANTCGCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('('"%""#"##"
- at 30BB2AAXX080903:3:41:546:806#0
-ATCGTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGAGATCGGTAGCA
-+
-6777778888888888888888887777655543*022.010./..,,,,++*(*****()(()((($%%&#""""
- at 30BB2AAXX080903:3:51:1604:1667#0
-TGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGAAAACACCA
-+
-67777788888888888888888877776555443222100//..---+,+'+***)*&))((('''"""###"##
- at 30BB2AAXX080903:3:49:1371:936#0
-ATGATGGCAAATACAGCTCCTGTTGATAGGACATAGTGGAAGGGAGCTACAACGGAGGACGAGGTGTGGGCAAGCT
-+
-677777888888888888888888772765544432221-0/'..-,--,*+**)))&)()#('#('%"$""""#"
- at 30BB2AAXX080903:3:39:1147:1865#0
-TATGATGGCAAATCCAGCTCCTATTGATCGGACATAGTGGCAGGGAGCTAAAACGTAGTCAGTGGTGTGCTGTCAC
-+
-67777788888888888888888877776555'13222100//(.,--,,*&+**()*)#((&('#&$%#""###$
- at 30BB2AAXX080903:3:39:1148:1864#0
-TATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGTTTTCAC
-+
-67777788888888888888888877776555443222100//..--,,,+++&*)*))*(((((%'&%""""###
- at 30BB2AAXX080903:3:44:183:380#0
-TATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGTCGTGGCGTGAG
-+
-67777788888888888888888877776555443222100//..---,-++++*)))))'(((((&&&""%""#$
- at 30BB2AAXX080903:3:4:1156:1584#0
-GTACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCNCCACNCN
-+
-6777778888888888888888887777655544352210+///--,-,,-,******)*)((((('%"#""%"""
- at 30BB2AAXX080903:3:8:901:1500#0
-CCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTACGTGGNGATAAGNN
-+
-6777778888888888888888887777655544322-1/0/...$-&,++,*)*#)(()&('(#(#"&#""##""
- at 30BB2AAXX080903:3:42:980:1549#0
-CTACACGACACGTACTACGTTGTAGCTCCCTTCCACTATGTCCTATCAATAGGAGCTGTATTTTCCACAGATCTGC
-+
-6777778888882888888888817./-$4+1241.0.&.1*.&'+-,+(*)+)*&')('(((##%'"#&""""##
- at 30BB2AAXX080903:3:37:1601:1443#0
-CTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAAAGTAGTACAGCACGCACGN
-+
-677777888888888888888888777765554432221000/./--),,+**+)))')#))#((''&#$"%#$""
- at 30BB2AAXX080903:3:52:236:1968#0
-CCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGGGAGCTACAAAGTAGTACGCCTCCTGCG
-+
-6777778888888888888888887777655544322110,/...-.-&,)+#&)(((&)#&)%'#'%""""""#"
- at 30BB2AAXX080903:3:44:725:1074#0
-CACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCAGATCGGGAGGGG
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()((('&&%"#$""#
- at 30BB2AAXX080903:3:42:1283:1263#0
-CGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGGGTGCTC
-+
-67777788888888888888888877776555443211010./.----,,+++)*)*()'('(''''"&"#"#""#
- at 30BB2AAXX080903:3:38:632:481#0
-GACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGCAGGTCTCA
-+
-67777788888888888888888877776555443222100./..--,,,-++*****))()(((''$##$%$"$#
- at 30BB2AAXX080903:3:8:664:1443#0
-GACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCGATAGATCNCTACCTNN
-+
-67777788888888888888888877776555443222100/...--,,-++++*+))))()(((('"$"##"#""
- at 30BB2AAXX080903:3:52:613:1664#0
-TGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTAGTGTGTGCG
-+
-67777788888888888888888877776555443222100//...--,,,++'*))())(((&(%'$"""&###"
- at 30BB2AAXX080903:3:8:841:789#0
-TGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGTANTCCATCNN
-+
-67777788888888888888888877776555443222100//...-,,,,++)**)()(())'(''""#"""#""
- at 30BB2AAXX080903:3:41:1062:1346#0
-TGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGGGAGCTACCACCTGTATCA
-+
-6777778888888888888888887777655542322210////.-,-+,+*+*)*)&)(*'#(##'&"$""#"""
- at 30BB2AAXX080903:3:38:1784:1722#0
-TACTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCGTTCATCANN
-+
-677777888888888888887838737765.4,41.22210-.--,*,,+,+'(('&')#'((((%%$&%$"#"""
- at 30BB2AAXX080903:3:44:644:1913#0
-AGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACAACGGAGCA
-+
-67777788888888888888888877776555443222100//..---,-+,+*****)&*((&((%'&%%"$%#$
- at 30BB2AAXX080903:3:4:1398:315#0
-AGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTAACNCGACNCN
-+
-677777888888%8888888888837776555443012100//./--,,,,,+*****)#)(('''#""#"##"""
- at 30BB2AAXX080903:3:55:415:751#0
-CTACGTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))()((('&&%&%%"""
- at 30BB2AAXX080903:3:49:1025:580#0
-TCATTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGCTACACAGCGG
-+
-67777788888888888888888877776555443222100//..---,-,+++**))*))&(('('"$"#"##""
- at 30BB2AAXX080903:3:53:1225:1642#0
-AATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGAGTCACACGCA
-+
-67777788888888888888888877776555443222100//..---,,+++**+)*))))(&(('"""&%#"#%
- at 30BB2AAXX080903:3:43:869:894#0
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTC
-+
-6777778888888888888388287377655244322210.//..---,,,+)+**)*)(')(('(&$$%&"$%$$
- at 30BB2AAXX080903:3:53:1593:131#0
-TAGGGGAAATAAGTGAATGAAGCCGCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGCACTCTGCC
-+
-677777888888888888888888-7776555443222100//..---,,+++***)))))(((''%&$"""""#"
- at 30BB2AAXX080903:3:43:1247:1346#0
-ATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGAAGTGGGC
-+
-67777788888888888888888877776555443222100//..----,+++****)))))((''&%$&%"""""
- at 30BB2AAXX080903:3:57:1366:1703#0
-GAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGAAGATCGGAAGACGTGTGAC
-+
-67777788888888888888888877776555443222100//.----,,-++***)))))(((((&'$&""""##
- at 30BB2AAXX080903:3:43:124:407#0
-GAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACATAGTGGACGA
-+
-6777778888888888888888887777655544*222100//..----,+++***)))*)(((('&'&"%%#"""
- at 30BB2AAXX080903:3:49:1566:522#0
-CTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCAGATCGCAC
-+
-67777788888888888888888877776555443222100//...--,,++(***))))()))('&"#""&####
- at 30BB2AAXX080903:3:57:1683:1984#0
-TATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTACACCCACAAA
-+
-67777788888888888888888877775555443222100-/.----,-,++***)()))((((%''"%%%$#$$
- at 30BB2AAXX080903:3:43:784:484#0
-TGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTCTGATGGCAAATACAGCTCCTATTGATAGGACTAG
-+
-67777788888888888888888877776555443222100//..---,,*++*****))))(((('&'%%$""""
- at 30BB2AAXX080903:3:44:1718:565#0
-GGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTGCTATTGA
-+
-67777788838888888888888877776555443222100//..-.-,,,++***)*))))()(('%"$$$&%$#
- at 30BB2AAXX080903:3:42:400:1944#0
-TGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTA
-+
-67777788888888888888888877776555443222100//...--,,+++***)))*))(((''&&&&&%%##
- at 30BB2AAXX080903:3:39:1179:855#0
-TAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGAGATCGGAAGAGCTTTGC
-+
-67777788888888888888888877776555443222100//..---,,+++***))())((('('""#"""""#
- at 30BB2AAXX080903:3:38:1310:1789#0
-GTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCACA
-+
-67777788888888888888888877776555343222110//...--,,-,+***)*)))))(((''$%%%$#%#
- at 30BB2AAXX080903:3:47:1693:378#0
-GAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAGGTGGT
-+
-67777748802888888888888877776555443222100./..-,+,,-++****)))()(&(('""#%"%"#"
- at 30BB2AAXX080903:3:51:1093:1405#0
-TGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCACCACCC
-+
-67777788888888888888888877776555443222/00//...--+,,++***)))())(((('$&"##"$""
- at 30BB2AAXX080903:3:58:1117:231#0
-TCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATNCTGNT
-+
-67777788888888888888888877776555443222100//..-----+++****)))))()('''$%"&##"$
- at 30BB2AAXX080903:3:43:19:495#0
-ATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATCGCACATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&$"$"#""#
- at 30BB2AAXX080903:3:53:633:1875#0
-TGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAGATCGGAAGAGCGCAGC
-+
-677777888888888888888888777765554332221*0//.-.--,,+++***)))))((((''%"$###"""
- at 30BB2AAXX080903:3:1:800:1703#0
-ATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGNATNCAGC
-+
-6777778888888888888888885.774555463232101//..---,,+++*)**)))(&()((#&"""""###
- at 30BB2AAXX080903:3:36:635:727#0
-TATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGCTATGCATN
-+
-67777788888888888888888877776555443221100//..----,++++**)))))))(('%%&"""#"""
- at 30BB2AAXX080903:3:42:1535:1489#0
-ATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGGG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('&%%""#"""
- at 30BB2AAXX080903:3:38:179:1866#0
-TGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAAGATCGGAAGAGCGGTTCCGCCGCCAC
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))(((''$$%"""###
- at 30BB2AAXX080903:3:49:732:1376#0
-GCCGATGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGTCACGCAC
-+
-6777778888888888888888887/776555443222100//---,-,,,++***)))()'()(('%"#"#"#"#
- at 30BB2AAXX080903:3:51:965:869#0
-TACGCCGATGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGCGTGTAGCCTGAGATCGGGCGTAGT
-+
-67777788888888888888888877776555443222100./..---,,+++****))*)((((('"$"$"#"##
- at 30BB2AAXX080903:3:37:479:1565#0
-AGATTTACGCCGATGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGCGACACGAN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((('&&%""%##$"
- at 30BB2AAXX080903:3:49:1482:1821#0
-TAGATTTACGCCGATGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTCTAGGGTGTAGCCTGCGTTTATC
-+
-67777788888888888888888877776555443222100//..--+,,+++***)*)())((('&'$"""""#"
- at 30BB2AAXX080903:3:46:330:1392#0
-ACACCCTAGACCAAACCTACGCCAAAATCCATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACA
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))(('(&'"#$$$"$#
- at 30BB2AAXX080903:3:36:999:822#0
-TGTGGGAAGAAAGTTAGATTTACGCCGATGAATATGATAGTGAAATGGATTTTGGCGTAGGTTTGGTATATGTCTN
-+
-67777788888888888888888877776555443222100//..----,+++***)*)))))(''%%$"$$##""
- at 30BB2AAXX080903:3:41:1033:132#0
-CTACGCCAAAATCCATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACGTTCTCGGCCTC
-+
-67777788888888888888888877776555413222/00/...--,,,,++++***)())#('(''&%%#"#""
- at 30BB2AAXX080903:3:49:586:1158#0
-GCCAAAATCCATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAGATCGGAAGAGCCGCTCGCG
-+
-67777788888888888888888877776555443321101./,.--,,,)+***)*)*((((((''"#"#"#"#"
- at 30BB2AAXX080903:3:34:1015:386#0
-GGGGCATTCCGGATAGGCCGAGAAAGTGTTGTGGGAAGAAAGTTAGATTTACGCCGATAGATCGGAANCCACCCNN
-+
-677777888888888888888888771765554432221/0/0..---,,+,+*****))))(('''"%$"#$#""
- at 30BB2AAXX080903:3:45:1175:1702#0
-ATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCGACGTAACTCGGAC
-+
-67777788888888888888888877776555443222101+/..,---,,*+***))))))()(''"%%"$&$#$
- at 30BB2AAXX080903:3:46:607:49#0
-TTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCGACGTTACACGGAGT
-+
-67777.88888888888888888877776555443221100//-.--+,,,++**)*)))()'((''"$"$"#"""
- at 30BB2AAXX080903:3:52:1681:1455#0
-GGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCGAGAAAGTGTTGTGGGAAGAAAGTTAGCAAACCCAAC
-+
-6777778888888888888888887777655544322210//.-.---,,+++**)*))))()(('#$$%%$%#$$
- at 30BB2AAXX080903:3:46:1697:1105#0
-ATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCGAGAAAGTGGTGTGGGAAGAAAGTTNGTTNACAC
-+
-67777788888888888888888877776555443102100//..+--,-+)+*+*))))))(((&'"#"""#"""
- at 30BB2AAXX080903:3:1:1542:327#0
-TGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGGCGAGAAAGTGTTGTGGGNTANACCA
-+
-67777788888888888/88881877476+5044322-+-0-&/.-*+-,(*+)*%())#)'%'&('"""""###"
- at 30BB2AAXX080903:3:38:763:627#0
-CATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCAGATCGGAAGAGTGTGTCCG
-+
-67777788888888888888888877776555443222100/...---,,+++*+*)*))))(('('$"#"""##"
- at 30BB2AAXX080903:3:41:640:55#0
-TTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCAGACACG
-+
-67777788888888888888888877776555443222100//..---,,++*+*+**)())(((''&%$%%$""#
- at 30BB2AAXX080903:3:46:593:970#0
-TTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGGTAGATCGGAAGAGCGGGTCTGCTG
-+
-67177718818888888888888877176555443222000////--,+,+%+**)))*)(()((''""#%"##""
- at 30BB2AAXX080903:3:55:1529:1414#0
-TTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCAGATCGGGACACNGCGC
-+
-67777788888888888888888897776555443202100./.-,--*(++'**))'#'(%(#&(#&$%$"#"##
- at 30BB2AAXX080903:3:36:251:1061#0
-TAGGATGGTTCATGGGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCGGTATCACGN
-+
-67777788888888&8888888887777655044321210,//..'--,,+***+*(*))'()(#'#$"#"$$$$"
- at 30BB2AAXX080903:3:41:520:634#0
-TAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGCCGCTAACTTCC
-+
-6777778888888888888888887777655044322210///...--,,+**'+()))(((((#&&"$$#""""#
- at 30BB2AAXX080903:3:54:616:774#0
-TGATAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTCCGGATAGGGATGGTCGG
-+
-67777788888888888888888877776555440222100//-----,,+++****)))()'((('"""$""#"$
- at 30BB2AAXX080903:3:41:1033:1357#0
-CTCGGCCTATCCGGAAGGCCCCGACGTTACTCGGAGTACCCCGATGCATACACCACATGAAACATCCCATCCACAC
-+
-67777708888888888888+8887777657+,41'.2.////.+-,,',++***)*#(())'(&'#""%""$"##
- at 30BB2AAXX080903:3:1:1277:1997#0
-GCCTATCCGGAATGCCCCGACGGTACTCGGACTACCCCGATGCATACACCACATGAAACATCCTATCANCTNCCTC
-+
-6777778888888888888588)377770+422232120-.-.-'--,+,*+*(())'((#('''&'%"&%"$$%%
- at 30BB2AAXX080903:3:59:707:1733#0
-AGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCATTGCGTCACA
-+
-677777888888888888888880&77765/5,4321110///.%--,,,,*+'+*())())(((''&"&&##$##
- at 30BB2AAXX080903:3:53:623:1151#0
-TGAGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCCTTCCGCAG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((''%"""$$%""#
- at 30BB2AAXX080903:3:60:479:1687#0
-TGAGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCACTCCTANN
-+
-67777788888888888888888872776%55342222$//./..-+-,$**+)****))('()((%%$%%#"#""
- at 30BB2AAXX080903:3:1:673:511#0
-GGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGAGATNGANACAC
-+
-677777888888888888888826774165524422201/.-.---.-,+*++)(*(*)()'(('('"""$"$#"#
- at 30BB2AAXX080903:3:43:1489:72#0
-TGAATGAGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGTAGTCCGAGTAACGTCGGGGCGGGCG
-+
-67777788888888888885888877/7656134320200///.-,--+,**(*))(')#)''(#%&'&""#""#"
- at 30BB2AAXX080903:3:4:1784:678#0
-TGAATGAGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGAGATCGGAAGAGCGGTTANACTANCN
-+
-6777778888888888888888887777654544322210//.-/,--,,+++)***())()&((%&$""%"""#"
- at 30BB2AAXX080903:3:37:788:1651#0
-GACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGTAGGCTCATTCATATCTCTATN
-+
-6777778888888888888888887777455544322200////,.,-,,,+++**))))(()('('$"#&&$"#"
- at 30BB2AAXX080903:3:1:1226:1885#0
-TGCTGTTAGAGAAATGAATGAGCCTACAGATGATAGGATGTTTCATGTGGTGTATGCATCGGGGAAGTNCCNTACA
-+
-67777788888888888883588877736/503412.0001*..,,,+,-$,)****)())()(#''$""""$$#"
- at 30BB2AAXX080903:3:39:319:1604#0
-CTCGGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGTAGGCTCATTCATTTCAGATCGGAGAACA
-+
-67777788888888/888888887777755554$32221/0//.----,-+++**+)))*)))'('%$""%&$##$
- at 30BB2AAXX080903:3:8:1605:890#0
-CGGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGTAGGGGCATTCAAGATCGGAAANCATACANN
-+
-677777888888888888888888777765554823(.1%//+.--+,-%%))(*)()))##(('%&"""#$$%""
- at 30BB2AAXX080903:3:4:797:612#0
-GGACTACCCCGATGCATACACCACATGAAACATCCTATCATCTGTAGGCTCATTCATTAGATCGGAACNCATANAN
-+
-67777788888888888888888877779555442222200./.-.--+,+++*****))()((('&$"$""""""
- at 30BB2AAXX080903:3:50:910:432#0
-TATTACTGCTGTTAGAGAAATGAATGAGCCTACAGATGATAGGATGTTTCATGTGGGGTATGCATCTGTAGTCATG
-+
-67777788888888888888888877776555443122100//.+-*-,,+++)**#*)((('(('#$""""$##"
- at 30BB2AAXX080903:3:48:1717:1336#0
-TAATATTACTGCTGTTAGAGAAATGAATGAGCCTACAGATGATAGGATGTTTCATGTGGGGTATGCAGCCGGCGTG
-+
-67777788888888888888888877776555443022+00//..--,,-++%)***))#*((((#&%"$"#"###
- at 30BB2AAXX080903:3:8:486:1189#0
-AGGCTTCTCAAATCATGAAAATTATTAATATTACTGCTGTTAGAGAAATGAATGAGCCTACAGATGANTGCATCNN
-+
-67777788888888888888888877776555443222100//..---,,+,+****))))((((''"""""##""
- at 30BB2AAXX080903:3:39:715:1507#0
-CATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTGCAGTGCCTC
-+
-67777788888888888888888877776555413232100//.-----,+*+***))))))('((&$&$%%"$##
- at 30BB2AAXX080903:3:60:263:1064#0
-CATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTGGACTNCCNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*))))('&&&"#"#$""
- at 30BB2AAXX080903:3:41:1638:1919#0
-TGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGTTCTTCTACTATTAGGACTTTTCGCTTCGAGCGAGNG
-+
-677777888888888888888888777765554432221.00/.-.-,,+,++***)*)))()((('%$%$&#"""
- at 30BB2AAXX080903:3:59:527:1146#0
-GAATGTGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGTTCTTCTACTATTATGCTAGAC
-+
-67177788888888888888888877776555423222101//...--,,+++*))))*()((('(''$%#"%"##
- at 30BB2AAXX080903:3:37:874:932#0
-TATACGGGTTCTTCGAATGTGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGTTCTCTTN
-+
-67777788888888888888888877776355443222100//..---,,+++++*))))))((('("%&#%$"""
- at 30BB2AAXX080903:3:49:972:544#0
-CCCTCCATAAACCTGGAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTAACGTACGACN
-+
-67777788888888888888888877776555443222100//....-,,++++*)))))))((((($"""####"
- at 30BB2AAXX080903:3:2:1733:1924#0
-GGCTTGAAACCAGCTTTGGGGGGTTCGATTCCTTCCTTTTTTGTCTAGATTTTATGTATACGGGTTCTNCGANTGT
-+
-67777788888888888888888297716555443121000/0.-----,++++*+))))()))'''&"%&$""""
- at 30BB2AAXX080903:3:43:258:523#0
-CATGGGGTTGGCTTGAAACCAGCTTTGGGGGGTTCGATTCCTTCCTTTTTTGTCTAGATTTTATGTATACGGGATT
-+
-6777778888888888888888887777655524/2'212//.--,--,,+++**(*())()((((%&%%%%$"##
- at 30BB2AAXX080903:3:8:1373:597#0
-AGTCATGGAGGCCATGGGGTTGGCTTGAAACCAGCTTTGGGGGGTTCGATTCCTTCCTTTTTTGTCTNTGTACTNN
-+
-67777788888888888883888877775552243222100//.--,-,,++***))*))))(((''"""##$#""
- at 30BB2AAXX080903:3:43:335:1466#0
-AAGGAAGGAATCGAACCCCCCAAAGCTGGTTTCAAGCCAACCCCATGGCCTCCATGACTTTTTCAAAAAGGAGACG
-+
-67777788888888888888888877776555443212100//*---,,,*+*)(*(())*)(#((''$%&"""""
- at 30BB2AAXX080903:3:53:1361:720#0
-CAACCCCATGGCCTCCATGACTTTTTCAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAATAAT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&'"$%$%"##
- at 30BB2AAXX080903:3:50:1007:1109#0
-TCAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAATTATAGGCTAAAGATCGGAACGCACAGCG
-+
-67777788888888888888888877776555443222100//..---,,+++*****))*((((''"##$$""#"
- at 30BB2AAXX080903:3:54:690:226#0
-AGGTATTAGAAAAACCATTTCATAACTTTCTCAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCATCC
-+
-67747788888888888888888877776)55443222100//..---,,+++***)*)*)))(((($$%""""#"
- at 30BB2AAXX080903:3:57:565:1448#0
-AACCATTTCATAACTTTGTCAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGTCCTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('$%%$$$##"
- at 30BB2AAXX080903:3:55:430:492#0
-ACCATTTCATAACTTTGTCAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAAGATCGGACA
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))()((('$##&&"#$"
- at 30BB2AAXX080903:3:51:518:1466#0
-CGTCTTGTAGACCTACTTGCGCTGCATGTGCCATTAAGATATATAGGATTTAGCCTATAATTTAACTCTTACNATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((&""""#"""#
- at 30BB2AAXX080903:3:45:1485:1169#0
-GCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCACAGAAGA
-+
-67777788888888888888888877776555443222100//..----,+++***))))(((((('%"#$%"$##
- at 30BB2AAXX080903:3:34:1293:31#0
-ATGGCACATGTAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTNCGCAACNN
-+
-67777788888888888888888877776555443222000//.,--,+,,,++*))))((())'('"%#%"#$""
- at 30BB2AAXX080903:3:4:733:1966#0
-GTGATCATGAAAGGTGATAAGCTCTTCTATGATAGGGGAAGTAGCGTCTTGTAGACCTACTTGCGCTCNCTTANCN
-+
-677777888888888888888888.7776555443222/10-/.,-+,,,+****())((((((('%""%""""$"
- at 30BB2AAXX080903:3:48:1022:440#0
-GCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCCCG
-+
-67777788888888888888888877776555443222100//..---,,++****)))))))((('&"%$$""##
- at 30BB2AAXX080903:3:42:1566:800#0
-CATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCCAGTAT
-+
-67777788888881888888888877776551142222100-.,/.---,,*++****))'(((('%%$"#%##"#
- at 30BB2AAXX080903:3:59:1092:85#0
-CATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTAGATCGCTCACNNA
-+
-67777788888888888888888877776555342222,-1.--,---,,,****)&((('(&'''%&$"#"#""#
- at 30BB2AAXX080903:3:43:81:1783#0
-GAGGGCGTGATCATGAAAGGTGATAAGCTCTTCTATGATAGGGGAAGTAGCGTCTTGTAGAGATCGGAACACTGAC
-+
-67777788888888888888888877776555443222100//..--,,,+++***)*)*))((((&&"#"$"""#
- at 30BB2AAXX080903:3:45:332:817#0
-TGAGGGCGTGATCATGAAAGGTGATAAGCTCTTCTATGATAGGGGAAGTAGCGTCTTGTAGACCTACTTGAGCTGC
-+
-67777788888888888888888877776555443222100//..---,,+++++*))))))(((('&"%$$""$#
- at 30BB2AAXX080903:3:40:1222:517#0
-AGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACACCGTCAGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()((''"&%""##$$
- at 30BB2AAXX080903:3:59:766:1214#0
-TATGAGGGCGTGATCATGAAAGGTGATAAGCTCTTCTATGATAGGGGAAGTAGCGTCTTGTAGACCTACTACGCTA
-+
-67777788888888888888888877776555443.22100//..---,,*++)*)()*()'((#''%$%%##$##
- at 30BB2AAXX080903:3:39:298:1037#0
-GCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGACAGCATAC
-+
-67777788888888888888888877776555443222100./..---,,++***+*)*)))((('($'&%%#%##
- at 30BB2AAXX080903:3:56:696:154#0
-TTATGAGGGCGTGATCATGAAAGGGGATAAGCTCTTCTAGGATAGGGGAAGTAGCGTCTTGTAGACCGACTTGACT
-+
-677777888880888888888886-77-655534120'2#0-.,----+,+$+)')('&('##''#&"$"#"""##
- at 30BB2AAXX080903:3:43:586:671#0
-CGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCAGATCGGACGGCG
-+
-6777778888888888888888887777$555443222100//./---,,++*****)))))()'('&$#"#""""
- at 30BB2AAXX080903:3:2:595:802#0
-AAGTAGGTCTACAAGACGCTACTTCCCCTATAATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCNCACACCT
-+
-677777888888888884088484787765.'45321.000...,-,,++,*+*+*))(()((''(''"$&""#""
- at 30BB2AAXX080903:3:33:257:679#0
-ATGATTATGAGGGCGTGATCATGAAAGGTGATAAGCTCTTCTATGATAGGGGAAGTAGCGTCTTGTANACCCAANN
-+
-677777888/888888888888887777655,44321210//...-+-,,++)**')*))&((((%'""##%#"""
- at 30BB2AAXX080903:3:55:432:1167#0
-CAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTTCTCTTATCT
-+
-677777888880888888858888777765554432200///./-.,-,-+,+**)*)))))(((&&$%#%#"##$
- at 30BB2AAXX080903:3:43:1568:1248#0
-CAGATAAGGAAAATGATTATGAGGGCGTGAGCATGAAAGGAGATAAGCTCTTCTATGATAGGGGAGGTAGGCCATG
-+
-6777778888888&8888888888777+65)'44322210&//..---,,,+%+***(*))(((&&'"%$%""#""
- at 30BB2AAXX080903:3:46:1439:942#0
-CCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTNTTACACTC
-+
-677777888888888888888888777765554432211/0//.----,,,++***)*)))))((('""%%&####
- at 30BB2AAXX080903:3:3:1044:1142#0
-GAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTAGATCGGAAGAGNTCGNNAC
-+
-6,7777888888888888/38808071;03.22500110.0//-,*-,+,++*'**()()'((&&'%""""%"""$
- at 30BB2AAXX080903:3:46:451:320#0
-AAAAGGGCATACAGGACTAGGAAGCAGATAAGGAAAATGATTATGAGGGCGTGATCAAGATCGGAAGCACGAGAGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))((((&"$#""#""#
- at 30BB2AAXX080903:3:58:104:1767#0
-TTATCACCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTNNN
-+
-67777788888888888888888877776555443222100//..---,,,++****)))(((('(''$%%##"""
- at 30BB2AAXX080903:3:50:234:1426#0
-TGTTAGGAAAAGGGCATACAGGACTAGGAAGCAGATAAGGAAAATGATTATGAGGGCGTGATCATGAACGCTGTCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))()(((''"$"#"""##
- at 30BB2AAXX080903:3:34:1707:1614#0
-AGTGTTAGGAAAAGGGCATACAGGACTAGGAAGCAGATAAGGAAAATGATTATGAGGGCGTGATCATNCACATCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()(('"$#%"#$""
- at 30BB2AAXX080903:3:44:1659:430#0
-CATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCAAGATCG
-+
-67777788888888888888888877776555443222100//..---,,++++****))))((((''&"%%#"#$
- at 30BB2AAXX080903:3:38:671:627#0
-TGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACCTGCAACATCA
-+
-677777888882888888888888-777655/44321/100./----,+,++*+*')))))()(#'#"$"#"""#"
- at 30BB2AAXX080903:3:41:759:1319#0
-ATAATCATTTTCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATCCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(('(&&&&$%##$#
- at 30BB2AAXX080903:3:8:1519:1870#0
-AATCATTTTCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTNATCATCNN
-+
-67777788888888888888888877776555443222100//...--,,+++***))))))()(''"'#&%"#""
- at 30BB2AAXX080903:3:36:1488:883#0
-CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAACGCGACACNN
-+
-67777788888888888888888877776555443222100//..---,-+++++**)))))((((#""$"#"$""
- at 30BB2AAXX080903:3:59:1110:1393#0
-CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAAATAGCACCTA
-+
-677777888888888888858888777765554432221000/..---,,,++****))*()))((''&&%"#$##
- at 30BB2AAXX080903:3:34:346:1269#0
-TGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAAATNCACACANN
-+
-67777788888888888888/88897776555443222000//..---,-,,+***)*))))))((("%"#"##""
- at 30BB2AAXX080903:3:49:1047:531#0
-TGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAGATCGGAATGGTAGCC
-+
-67777788888888888888888877776555443222000//..---,,++++**))))))'((&'""""""""#
- at 30BB2AAXX080903:3:34:137:253#0
-CACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGNGACCACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))((((&""$####""
- at 30BB2AAXX080903:3:54:1327:1827#0
-GATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGTTTCTATTTCCTGAGAGATCGGAAGAGATGTCCAC
-+
-6777778888888888888888887777655544-02.200-/.----,,)++**)))))'))%((#'""%$###"
- at 30BB2AAXX080903:3:40:1118:1481#0
-TCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCCTCCC
-+
-67777788888888888888880878776455443222100/...,--,-+,+++))***()(((''$%%&#%%#$
- at 30BB2AAXX080903:3:57:346:1419#0
-GGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGTTTCTATTTCCTGATGTCTACG
-+
-6777778888888888888888887747655544322000)..-.'-,*,+***&**))&()('(''$"#"#"###
- at 30BB2AAXX080903:3:40:137:1657#0
-CAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTNGCACGCAC
-+
-677777888888888888888878777765554422221/0/0.----,,+++***)*))(((((('""#"%#"##
- at 30BB2AAXX080903:3:33:1721:302#0
-GTAGGGATGGGAGGGCGATGAGGACTAGCATGATGGCGGGCAGGATAGTTCAGACGGGTTCTATTTCNACAACANN
-+
-6777778888888888888888887777655544322210/./.----&,+*+*)*)#()(((((('"$#""##""
- at 30BB2AAXX080903:3:39:531:1123#0
-GTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGGTTCTATTTTCTCTCTGCT
-+
-6777778888888888888888887777655544320210.1/.,,--,,)*+*'**'()&)#(((#&&"""""""
- at 30BB2AAXX080903:3:59:417:959#0
-GTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGTTTAGATCGGAATTCTNNA
-+
-67777788888888888888888877776555443222100./...--+,++++**)&)))()('('&$""$""""
- at 30BB2AAXX080903:3:56:289:1815#0
-CTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCAGACCGTCCACC
-+
-6777778888888888888888887777655544322210/../..,-,,,++++))*))))(((''$&&"#$###
- at 30BB2AAXX080903:3:40:161:506#0
-TCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCGTACGCATC
-+
-67777788888888888888888877776555443222100//..----,+++***)))))))(('&%"$&%"""#
- at 30BB2AAXX080903:3:60:449:1142#0
-TCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTCACATNN
-+
-67777788888888888888818877776555443222100//..---,,+++***)))*)())('(&$#"$$"""
- at 30BB2AAXX080903:3:46:287:649#0
-GATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGGTCAGATCGGGAGAGCGACTGCG
-+
-67777788888888888888888877776555443222100//..(,-,+,*+)*')*)&'((#(''&$""$""#"
- at 30BB2AAXX080903:3:48:93:1377#0
-GATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGGTTCTCATTTCCGC
-+
-67777788888888888888888877776555443222100//..,,-,,+++&*))))')(()(&&&##$#$#$$
- at 30BB2AAXX080903:3:51:647:724#0
-GATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCAGACGGGTTCTCTATCAGAC
-+
-67777788888888888888888877776553443222100//..+--,++++(*)*)())(#&(&'%##"###$#
- at 30BB2AAXX080903:3:3:712:1239#0
-AGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTANTCATNTA
-+
-67777788888888888888888877776555443222100-//.--,,-++*+**))))'((((''$""$$$"""
- at 30BB2AAXX080903:3:36:1671:634#0
-ATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCCACCTGACNN
-+
-67777788888888888888888877176555443012120./.-,&+,(,+%***)&)()('((''&&#""#$""
- at 30BB2AAXX080903:3:41:855:309#0
-TGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGGTCAGATCGGGGAGCT
-+
-67777788888888888888888877776555443222100//.,----,+,****(()('('#('%"&&"%"#$"
- at 30BB2AAXX080903:3:2:505:1137#0
-AAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCAAGATCNGACACGA
-+
-67777788888888888888888877476.55443212211//...,,-,,,*++*()()((((('%%"""$####
- at 30BB2AAXX080903:3:42:128:1864#0
-AACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTGACCTAAAC
-+
-67777788888888888888388(77776556443212100//.-+--,-+++***)*))))(''(&&&&"##$"#
- at 30BB2AAXX080903:3:41:601:1383#0
-ACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACACACCAA
-+
-67777788888888888888888877776555443222100//..----,,++*+***))))()(('&%&%%%#"#
- at 30BB2AAXX080903:3:48:816:561#0
-CTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGATAGTTCACACGTC
-+
-67777788888888888888888877776555443222000//..---,,,++***))())))(((#&%#$"##"#
- at 30BB2AAXX080903:3:4:1342:574#0
-GTCTGTTATGTAAAGGATGCGTAGGGATGGCAGGGCGATGAGGACTAGGATGATGGCGGGGAGGAGATNAGACNAN
-+
-673773888888888888888'88771765$1415*2.20///,+-,,,++*))**()((#&')#'%""""##"""
- at 30BB2AAXX080903:3:43:1085:168#0
-TCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTAGATCGGAGGCGCCT
-+
-67777788888888888888888877776555443222100//.--,-,,++**+*)*)((()((('&""%#""#"
- at 30BB2AAXX080903:3:56:821:1211#0
-TCTGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACCACCAC
-+
-6777778888888888888888887777655544322210///..---,,-++***)**(())((('$&%"%&#$"
- at 30BB2AAXX080903:3:56:966:1583#0
-CTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATAGATCGGAAGAGCGTCATG
-+
-67177788888888888888888877776555443222+0///-.-,(,,+++***)*)()#)(&('&&$#"$#""
- at 30BB2AAXX080903:3:33:602:212#0
-TGAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTAGATCGGNTGCACTNN
-+
-67777788888888888888888877776555443222100//.---,,-+++***)))())(((('""##"%"""
- at 30BB2AAXX080903:3:57:1069:1572#0
-CCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGGGCAGGTGCCACTA
-+
-677777888888888888881888777765554431221/00/./--,,,+++)***)))(()(%('$$&$###"#
- at 30BB2AAXX080903:3:3:780:775#0
-GAACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACCNGCACNTC
-+
-6477778888888888/.22884877713-.121121/.0.'..,,*,,+*+)*)(()()'((('%%"""$"#"##
- at 30BB2AAXX080903:3:34:765:1500#0
-AACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTGACATAACANACATCTNN
-+
-67777788888888888888888877736555443221100//.,---,,++++*)(*()())((('"#%#"##""
- at 30BB2AAXX080903:3:4:1576:1178#0
-ACTATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGANCTATNAN
-+
-67777788888888888888888877776555443222101/....-,,-,*++**)*)))()((('$"$##""#"
- at 30BB2AAXX080903:3:36:687:92#0
-GTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGATGATGGCGNGCGACCAN
-+
-6777778888888888888888887777655544322210///.--+,,,++++*))*)))()((''""#"###""
- at 30BB2AAXX080903:3:40:329:1065#0
-ATCCTGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGNGCTTAGGT
-+
-67777788888888888888888877776555443222100//..-----+++++*)*))*)((((&"&""#""""
- at 30BB2AAXX080903:3:59:663:1521#0
-ATCCTGCCCGCCATCATCCTAGGCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGCGCGCCG
-+
-6771778888888888888888*0777760554)2221000//.----,,,+++***)*)((((((&$&#%#####
- at 30BB2AAXX080903:3:3:437:1518#0
-TGCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCNCCACNCA
-+
-677777888888888888288882977765555402211/.//.-,--,++*+***())(())(((#&"#""#""#
- at 30BB2AAXX080903:3:53:188:62#0
-GCCCGCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCGACGACACC
-+
-67777788888888888888888877776555433222110//+.--,,-++++))*))())'((#'$"$&##""#
- at 30BB2AAXX080903:3:52:719:515#0
-GAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGAAGCTGGTCG
-+
-677777888848888888)88888777-6555443222+00//-+---+,+++***))))()''((#"##$%%""$
- at 30BB2AAXX080903:3:55:513:1425#0
-GGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGCNGGTAGAT
-+
-67777788888888888888888877776555443222100//..---,-+++****)))))(((''$""##&$#$
- at 30BB2AAXX080903:3:4:299:1016#0
-GCCATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGTNGCCANCN
-+
-67777788888888888888888837776/4550320210/./.--,--,++*++))*())(''(&'"""%$""#"
- at 30BB2AAXX080903:3:50:1500:524#0
-CATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCGCCTCCCG
-+
-67777788888888888888888877776555443222100//..---,,+++****))())(((('&$$$""$#"
- at 30BB2AAXX080903:3:52:1272:1210#0
-AAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGCATGTTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((&'"%"%%%""$
- at 30BB2AAXX080903:3:57:861:723#0
-AAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTCGCCGTGAC
-+
-67777788888888888888888877476552443221000/-/,--,+,++****)))()(((''#"$##$$"#$
- at 30BB2AAXX080903:3:42:796:43#0
-ATCATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCCCCCTTC
-+
-67777785888888888888888877/7655284321100.-//.---,,+,+++)*('((((('&'&""""%%#"
- at 30BB2AAXX080903:3:3:284:1697#0
-TAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGACTNAGCTNAC
-+
-67777788888888888488888677766-55413)22,././(*.--++,+*&**)()(&)((('#"""&"#"##
- at 30BB2AAXX080903:3:47:1657:1407#0
-GTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGAGGGAGAGTCTAT
-+
-677777888888888888888888777765554432221/0/....--,,,++***))))((((((&$"#""#"""
- at 30BB2AAXX080903:3:48:367:704#0
-GGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAATGGATGCGTAGGGATGGGAGGGCGATGAGGACTAGGACA
-+
-6777778888888)888888+68877776555445212100//..-+-,,++++*))))&)'()&('"$""$###"
- at 30BB2AAXX080903:3:43:134:941#0
-ATCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTACCA
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()(((''%&%$%##$
- at 30BB2AAXX080903:3:54:870:526#0
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCTCTTACAAC
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))))(('&"'#"%%"""
- at 30BB2AAXX080903:3:4:1682:201#0
-CCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCNTGTCNCN
-+
-67777788888888888888888877776555430222110//..--,,,,++(**))*))'''('&$"##"$"#"
- at 30BB2AAXX080903:3:41:863:738#0
-TGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGGGGGGAGGAGAGCGGACGAATA
-+
-677777888888888888888888774764454432220100/..--,,&+++*#')))()(()(##%'"""###"
- at 30BB2AAXX080903:3:60:923:194#0
-TGATGGTAAGGGAGGGATCGCTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGAGGGCGATGCGCAGTNN
-+
-677777+8888888888888&88676$1(,454,3220/00//.-)-+,+++++)(*)*(*((#(%#'$%$%""""
- at 30BB2AAXX080903:3:2:934:336#0
-AGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCAGATCNTGCTGTC
-+
-677757888882888882838888777765098412121//-/.---+,,+*+***)((('((((''&""""#""#
- at 30BB2AAXX080903:3:42:1471:645#0
-GATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGGAGGGATGGGAGGAGATCGCACA
-+
-6777778888888888888888884777655540322/100//.----,),'+$**)*(')))(((#'"#$$$%$%
- at 30BB2AAXX080903:3:4:89:493#0
-GATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGAGTAGGGATGGGAGGGCNGTAGNAN
-+
-67777788888888881888188877770%5$3(11221(0//(,,-,+++$+*&*)*)(*(((((($""#$#"#"
- at 30BB2AAXX080903:3:55:976:1965#0
-CTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTAAGACCGCTCANT
-+
-67777788888888888888888877776555143222100//..-.,,,*++*)))*((())((('"$""""#""
- at 30BB2AAXX080903:3:33:768:826#0
-ATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTACCATCANCACGCGNN
-+
-67777788888888888888888877776555443222100//..---,,,,++****))))(((('"$#$"$"""
- at 30BB2AAXX080903:3:38:1744:450#0
-CAATCGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGATGGGTTCACANN
-+
-677-7788388828888888888827746(52140322%0///*,*,),+*,))&*')#')'(##(#&""#"#"""
- at 30BB2AAXX080903:3:55:736:1941#0
-GGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGAAGTCGGACG
-+
-677777888888888888818888777765554431121.0/+..--,,,+++***)))))(((((%"&"""""#"
- at 30BB2AAXX080903:3:39:110:846#0
-TGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGCCAGTACAT
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))(()''&"&$#""#""
- at 30BB2AAXX080903:3:3:1371:137#0
-TGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGTGTACNCACTNTN
-+
-6777770888888888888888087777:5552/12100/,#.*.,+--,+)+)*()()('((#(##&"###""""
- at 30BB2AAXX080903:3:2:63:972#0
-TTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTCNCTCNNAC
-+
-677777888888888888888888777765554432221000..---,,,+,+**))*)))(((''&%"%"""""#
- at 30BB2AAXX080903:3:3:1542:862#0
-ATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGCNAGCANCN
-+
-6777778888888888888888880747653544321-00/.,.,--,,-+,+)**)))()(%'(&'$"$##""#"
- at 30BB2AAXX080903:3:55:844:905#0
-ATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGNGTGCTGCT
-+
-67777788888888888888888877776555443222100//..---,,+,+***)**))((((''"&"%##"#"
- at 30BB2AAXX080903:3:58:1437:514#0
-CATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAAAGGATGCGCATCTACA
-+
-67777788888/88888888888877776555443222100//,-----,++******&))((((''%$%"$"%$%
- at 30BB2AAXX080903:3:52:468:470#0
-ATCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAAACAAATGGACCCAGCAGC
-+
-677777888888888888888888777765554432/2110*/-.--'+,+,%**#))#()(#(('#$##"""##"
- at 30BB2AAXX080903:3:57:815:1074#0
-TCCCTACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCACAACA
-+
-67777788888888888888888877776555443222100//./---,,+++*+*))*))))(((''#%%#"##"
- at 30BB2AAXX080903:3:35:351:1316#0
-ACGCATCCTTTACATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAGNACCGTCGN
-+
-677777888888888888888888777765553421221000/..---,-*,+))****((((((('"$$$""#""
- at 30BB2AAXX080903:3:39:1404:1268#0
-TAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTATGTAACTCA
-+
-67777788888888888888888877776555443222100//..---,-+++***(**)()()(('&&%#""###
- at 30BB2AAXX080903:3:54:1060:107#0
-CTTTACATAACAGACGAGGTCAACGATCCCTCCCCTACCCTCAAATCAATTTGCCACCAATGGTAAAGTGTGTACA
-+
-677777888888888888888888777765$544%2'22*)-,(/,-+++*$))*(()((##&%'(#"#$"%"###
- at 30BB2AAXX080903:3:59:223:1396#0
-TACATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTCCTNNC
-+
-67777788888888888888888877776555443222100/...---,,,++*****))()(((('&&&&%$""$
- at 30BB2AAXX080903:3:34:848:357#0
-CATAACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCNATCGCANN
-+
-67777788888888888888888877776555443222100//..---,,+,++*)**))))(((('"""#"$#""
- at 30BB2AAXX080903:3:39:1116:834#0
-TGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCCTCTGTTCT
-+
-67777788888888888888888877776555443202100//...-,,,+*+**+**))()(((('"&&%%%$##
- at 30BB2AAXX080903:3:39:424:471#0
-TGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGACCTCGTCTGTTGT
-+
-677777888888888888888888777765554432221000/..--,,,+++****))())(((('"$&%$%#""
- at 30BB2AAXX080903:3:43:938:221#0
-AACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGCACATC
-+
-6777778888888888888888887777655444322210000...-,,-,+***(*)))()(('('&&%$#%#"#
- at 30BB2AAXX080903:3:49:133:1841#0
-AACAGACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACNAGTAGACA
-+
-67777788888888888888888877776555423222000//..---,-++++*'*(()))(((('"#%%#""#"
- at 30BB2AAXX080903:3:40:606:1392#0
-GTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTGCTCTCGTCT
-+
-67777388888888888888888877776555441221100//..---,,,,+***))))()((((&%"%%$#$#"
- at 30BB2AAXX080903:3:1:525:79#0
-GACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACATACGAGCANACNAAAC
-+
-67777784888888888808448698-024.5/4-00100/1'.%,,+,+))*)))()(%'('''&#%""%"""#$
- at 30BB2AAXX080903:3:3:792:1854#0
-GACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGCACCTACGAGTANTCCNNCA
-+
-677777888888888888888888777765654432/1000//./.-(+,,)*+*)#**()(()'('$"#&$""$#
- at 30BB2AAXX080903:3:44:691:469#0
-GACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCGACT
-+
-67777788888888888888888877776555443222000//...-,,,+*++**)))))))(((''&""%%$##
- at 30BB2AAXX080903:3:33:190:1612#0
-AGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTNCACTTCNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))()'(&""#$""$""
- at 30BB2AAXX080903:3:51:512:248#0
-AGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTTCTATTTGTC
-+
-6777770888888888888888887777655534322/200/...---,,++++**)))))((('%'%"""""%$$
- at 30BB2AAXX080903:3:37:1317:183#0
-ACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTAACCAGATCN
-+
-677777888888888888888)0137(065/52112+.12//+*--)*,-$**&)))((''&(''#%"#%""""#"
- at 30BB2AAXX080903:3:50:275:520#0
-ACGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACACACTC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((('('%"#""##""
- at 30BB2AAXX080903:3:34:1764:1302#0
-TAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGTNTTGTCGNN
-+
-677777888888888888888888777765554432221/0//-.---,-+++***))))))()'('""#$"#"""
- at 30BB2AAXX080903:3:44:349:962#0
-CGAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCGACTAC
-+
-67777788888888888888888877776555443222100//..---,(,++***)*))(()(((''&$&#$###
- at 30BB2AAXX080903:3:3:1704:1108#0
-GTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGAATCGTNCACANTN
-+
-6777778888888888888888887777655544122210///..---,,+++***)))))('((&''"#$&#"""
- at 30BB2AAXX080903:3:57:1595:719#0
-GTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGATCGCAACGCACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&%$"$"$$##
- at 30BB2AAXX080903:3:34:1733:2032#0
-ACGTAGTCGGTGTACTCGGAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGAGGGAGNCAACAGNN
-+
-277777888888888888088888777765554432-21//....-,--,+***+))))))(()('%"$""%""""
- at 30BB2AAXX080903:3:57:357:1511#0
-GCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGAGATCGGACGTCGCG
-+
-6777778888888888888888817777655544322210,/.------,++*****)*)*)((''('"#""#"#"
- at 30BB2AAXX080903:3:3:1126:1638#0
-GTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCACTTGATTTGATGGTAAGGGATNCACTNTA
-+
-6-7777888888888882288888.77765551422.1100./.,-,'+++'*+**()))''((((%""$"##"##
- at 30BB2AAXX080903:3:58:1286:1597#0
-AGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGCGGACCCCN
-+
-67777788888888888888888877776555483-30100/..-$,,',,+++**))))*((('''"#&#####"
- at 30BB2AAXX080903:3:38:828:29#0
-TTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGAGATCTGAGTCCNN
-+
-67777788888888888888/8887733654541302210/./.,---,+&*+****))(()'((''"#""#"#""
- at 30BB2AAXX080903:3:43:1781:647#0
-GATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTAAGGGTTGGT
-+
-67777788888888888888188877776555,43221110/0..-,-,,++++****))))()(('&&%&"""##
- at 30BB2AAXX080903:3:52:391:879#0
-AGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGATGGTGCCGCGTCG
-+
-67777788888888888888888877776555443222100/...---,,,+++**))**)((((''"#"##"""#
- at 30BB2AAXX080903:3:4:726:1575#0
-TGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATTTGAGCNCTATNCN
-+
-67777788888888888888888827176555,432120//./.,-,,+-*,+)*)')))(()((##$"%""#"#"
- at 30BB2AAXX080903:3:51:755:1179#0
-TGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTGATAGATCCGCCACGGC
-+
-67777788888888888888888877776555443212100//...--,,-++)**)**))()(((#%"##"#""#
- at 30BB2AAXX080903:3:56:1135:164#0
-TTGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATTGGTGGCCAATTCATTTGATGGTGCACC
-+
-677777888888888888888888777;655544322-110//...--,-,*+*()())))(((('%%$%%%%##"
- at 30BB2AAXX080903:3:40:717:415#0
-TGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGGTCAGTACCATTGGTGGCCAAACGATTTGTT
-+
-67777788-88888888888888877%760554&3+1.+00*...,-,,+%,)**#*()'))'(&&#"%"$#%""#
- at 30BB2AAXX080903:3:38:279:1549#0
-TCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAAACCCTCATC
-+
-67777788888888888888888877776553423222200/.,..,-,,+,+***#)))('((&&'""%#%%$$%
- at 30BB2AAXX080903:3:41:666:1859#0
-TGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCAAGATCGGCAG
-+
-67777788888888888888888877776555443222000//..--,+,++++**()(()))('(($$&##"$#"
- at 30BB2AAXX080903:3:49:119:150#0
-TGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACCATNCGACAGAC
-+
-67777788888888888888888877776555443222100//..---,,+++****)*))()(('&""""$""##
- at 30BB2AAXX080903:3:57:310:1321#0
-TAATGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACTCGTAGGTTCAGTACGCGTGTGAT
-+
-2777778888888888+8888888777765554132221000/..--',++)%(**)*)#&'&('(&%"$%"##""
- at 30BB2AAXX080903:3:38:1033:443#0
-CCAATGGAACTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACCTCCCCCACTCTGC
-+
-6777778888888888888888-877776-5944321200.*-/,,+,)(,+')*%)))#()#&'('"%##$##$%
- at 30BB2AAXX080903:3:40:1172:1477#0
-ACTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCCGAACGTGTGACCAC
-+
-67777788888888888888888877776555//32)%00$)0(,.,++,+++)#*#))))'(&#(''$%&"$##"
- at 30BB2AAXX080903:3:59:1031:2034#0
-ACTGAACCTACGAGTACACCGACTACGGCGGGGTAATCTTTAAATCCTACATAATTTCCCCCCTATTCCTCAGCAC
-+
-6777778888888888888888887777655$%1++/#00&%.&'&+)'$*$*$%)'$)''##(#''"&$%%"$$$
- at 30BB2AAXX080903:3:8:523:818#0
-GCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACNCTACTCNN
-+
-6777778888888888888888887775655244322210///..-.-,,+++****)))))(('''"#""$"#""
- at 30BB2AAXX080903:3:58:191:1468#0
-TACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATAGATCGGAAGAGCTGCCTNNC
-+
-6777778888888888888888887777655544322210//....-,--,,+)+***))))()(('%"%"#"""#
- at 30BB2AAXX080903:3:59:859:876#0
-TACGAGTACACCGACTACGGCGGACTAATCTGCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGTGTCAC
-+
-27772788888888888)888888(777'/5,453332(0//..-).,,(+++***))((((((('%&$%%$$###
- at 30BB2AAXX080903:3:45:1579:1444#0
-CAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGGGGGCTCG
-+
-67777788888888888888888877776555443222100//..---,,+++****))))(((((&&$#"""""#
- at 30BB2AAXX080903:3:50:247:1697#0
-TCAAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGGAGTTGAAGATTAGTCGGCCAGAAT
-+
-67777788888888888888888877776555453222100.....--,,+++*+*)()))()((('""#""""""
- at 30BB2AAXX080903:3:48:896:136#0
-CTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGAC
-+
-67777788888888888888888877776555443222100//..---,,++++*)))))))()(('&$%%"%##"
- at 30BB2AAXX080903:3:37:720:806#0
-GCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGAGATCGACCTCTCTN
-+
-67777788888888888888888877776555443222100//..---,-,+++*))))))((('('"%#"###""
- at 30BB2AAXX080903:3:37:1175:265#0
-TAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTCGATCTCN
-+
-67777788888888888888888877776555443222100//..---,,+,+**))))))()(''%$"%""$"$"
- at 30BB2AAXX080903:3:47:1293:1247#0
-CGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGGAGTTGGACTCGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))()((('#$""""#$""
- at 30BB2AAXX080903:3:2:201:1492#0
-TACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGCNGTTNNCT
-+
-6777778888888888888888484773555.4432121////..-,,+,++++****))((((''&$""""""#"
- at 30BB2AAXX080903:3:43:257:118#0
-CGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGTAAGTACGTGA
-+
-6777778888888888888888887777655544322210$-/.-*,-),++*+*())(((((((#'%&""""#""
- at 30BB2AAXX080903:3:59:280:177#0
-CAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGGCGCAGGGCGCCTGGGGGATCGGGAGGGGGGGTGTGNNC
-+
-6777778888888888888-8+8875776)5,'432(,10,'..')-,+$('#$*'#(&(%&'##&''"""#$""#
- at 30BB2AAXX080903:3:39:1664:628#0
-TACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTCC
-+
-67777788888888888888888877776555443222100///.---,-+++***))))()((((''$"%%%$#"
- at 30BB2AAXX080903:3:59:912:1892#0
-CTTCAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGGTCTAGGAAGATCCGACACCG
-+
-6777778888888888888888887771355502132200,./+---,&,*++++&)()&))'((&#$"%"$####
- at 30BB2AAXX080903:3:53:487:1066#0
-GGGGCTTCAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGGTCTAGGAAGCTCGTAG
-+
-67777788888888888888888877776555443222100//.----,,+&+****))'))((('&%$#$"%""#
- at 30BB2AAXX080903:3:45:1653:1285#0
-GGGGGCTTCAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGTGGATCGGCAGTGCGG
-+
-677777888888888888,8088/77786555&12+2#1'0..-.*,-,,-,))*)*(&)'#)&%%&"$"%""##"
- at 30BB2AAXX080903:3:52:987:308#0
-ACGAATGGGGGCTTCAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCAGATCGGCACAGGTCG
-+
-67777788888888888888888877776555443222010//..-.-,,+++***))())()((('"##"%""##
- at 30BB2AAXX080903:3:50:168:1256#0
-TACGAATGGGGGCTTCAATCGGGAGTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGCTTCACGAT
-+
-67777788888888888888888877776555443222100/...---,,-+****)))%))'((('"""##$#""
- at 30BB2AAXX080903:3:59:1069:949#0
-ATACGAATGGGGGCTTCAATCGGGAGTGCTACTCGATTGTCAACGTCAAGGAGTCGCAGGGCGCCTGGGTCCAACC
-+
-67777788888888888888888807476555443.2210/-/---,,,,+%+)'*')*)#')((&#'"$#$#$$#
- at 30BB2AAXX080903:3:53:1388:1053#0
-CCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCGCTCGACNC
-+
-677777888888888888888888777765554432+2100//..--*+,+,++**)*)(((()#'&"##$"##"$
- at 30BB2AAXX080903:3:53:1388:1055#0
-CCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGAGTTAAGCCTCCGCTCGACAT
-+
-+77777888888888&82888888+7776.554(32221/0/..,--),++,****))())(('&''"$"%$$###
- at 30BB2AAXX080903:3:8:1568:1708#0
-TAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATNTCTATCNN
-+
-67777788888888888888888877776555443222000/...-----+++**))(()())((''"%$"#$#""
- at 30BB2AAXX080903:3:49:888:799#0
-AGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGCACAACA
-+
-677777888888888888888888777763554432221000/.-----,,,+++*)))())))(''&%#"#"#"#
- at 30BB2AAXX080903:3:34:923:1335#0
-AATTATTATACGAATGGGGGCTTCAATCGGGAGTACTACTCGATTGTCAACGTCAGATCGGAAGAGGNCCACTANN
-+
-67777788888888888888888877776555443222200/...---,,-++****))))(((('&"$$#"""""
- at 30BB2AAXX080903:3:44:963:1402#0
-CAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCCTTCGTATAATAATTAC
-+
-67777788888888888888888877776555342222100./.--.,,,+,**)))*'#))((('&&#"$%$%##
- at 30BB2AAXX080903:3:41:1544:692#0
-ATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATCGGGAGTACTACTNGATTCTGCAT
-+
-67777788888888888888888877776555443220100//..---,,,,+****)')((('&#''&&#"%""#
- at 30BB2AAXX080903:3:3:50:788#0
-TCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTAGATCGGAAGAGCGGTTCNCGCANAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))(((('%'%"#""#"##
- at 30BB2AAXX080903:3:48:415:1835#0
-AGCTCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATCGAGATCGGAACACATACA
-+
-6777778888888888888888887777655544322210///..---,,+,+****))()))(('%%$#$""###
- at 30BB2AAXX080903:3:39:1217:1534#0
-ACAGCTCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATCGGGAGTACTACCCGGC
-+
-677777888888888888888,38771705554432201000...-*-,,+,#+)()*)())(((%'"%#""""##
- at 30BB2AAXX080903:3:3:378:970#0
-CGAGTAGTACTCCCGATTGAAGGCCCCATTCGTATAATAATTACATCACAAGACTACGTGCACTCAGCNGCACNTA
-+
-/777778888888088+88-88*7367715551431)-00/-/*-+-+,,+(*)*&'&()'('('(&"""%$#"##
- at 30BB2AAXX080903:3:48:332:389#0
-GTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCACA
-+
-67777788888888888888888877776555443222100//..--,,,++*++)**)))))((''%"""$#"$"
- at 30BB2AAXX080903:3:42:1014:996#0
-TGGGGACAGCTCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATAGATCAGGTGAG
-+
-67777788888888888888888877-76+524,3222100/...,-,,+++++*)))&)''('(('&"$%"#$""
- at 30BB2AAXX080903:3:54:405:651#0
-GTGGGGACAGCTCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATCGGGCGTACTG
-+
-67777788888888888888888877776555443222100//..---,,,++****)*)))(((((&#"""""""
- at 30BB2AAXX080903:3:48:927:148#0
-CTAATGTGGGGACAGCTCATGAGTGCAAGACGTCTTGTGATGTAATTATTATACGAATGGGGGCTTCAATCGGCTC
-+
-67777788888888888888888877776555443222100//.----,,,+++*)*)))))()(('"##%"$###
- at 30BB2AAXX080903:3:39:124:840#0
-TCCCGATTGAAGCCCCCATCCGTATAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCTCCATCATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((&""#$%"#"#
- at 30BB2AAXX080903:3:56:164:1145#0
-AAGCCTAATGTGGGGACAGCGCATGAGTGCAAGACGCCTTGTGATGCAATTATTATACGAAGGGGGGCTTCATGCA
-+
-677707888888888888838888777765534/*2$-+00%/-'-$(,&+*+*+&*))((((((('$"%%#$"##
- at 30BB2AAXX080903:3:48:1028:1375#0
-TCGTATAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAACACAGATGCCTGA
-+
-67777788888888888888888877776555443222100//...--,,+++***)*)))((('(&$""$"""""
- at 30BB2AAXX080903:3:50:1605:1316#0
-GGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTCTTGTGATGTAATCGCCATAC
-+
-67777788888888888888888877776555443222100//...--,,+,+****)*))))(((&"#"####""
- at 30BB2AAXX080903:3:41:936:1607#0
-GTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTCTTGTGATGTTATTTC
-+
-67777788888888888888888877776555443222100/../---,,,+*****())(()((('&&$"&%"##
- at 30BB2AAXX080903:3:1:324:1365#0
-CGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTCTTGTGCNCCNACTA
-+
-6777778838888888888-888877776653.4+23210/*/..-,,,+++++*)*(()('('(''$""#""#""
- at 30BB2AAXX080903:3:4:1469:1727#0
-GACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTCTTGTNATCANAN
-+
-677777888888888888888888777;6555443222100.0..-.-,,+*+)+**'))()()(''""##"$"#"
- at 30BB2AAXX080903:3:58:705:800#0
-TTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTCAGATCAACA
-+
-67777788888888888888888877776555443222100//.-----,+++***()))))(((%'&$""#"###
- at 30BB2AAXX080903:3:39:545:202#0
-TTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACGTGTTGTGTGT
-+
-67777788888888888888888877772655443202201//..+-+,,+++)***)))((((((&"&#%#$"#"
- at 30BB2AAXX080903:3:2:693:710#0
-GGTTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGAGTGCAAGACTNCTTGCGA
-+
-67.7778888888888-2888888777+3555413212000/....-+,++,**+*)*)()((('(%""$##"$""
- at 30BB2AAXX080903:3:56:118:1345#0
-CGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCTAAACCAACGNCAC
-+
-67777788888888888888888877776555443222020//.----,,,+*++*)())()(((''&#%%%"%##
- at 30BB2AAXX080903:3:33:1223:231#0
-GTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCTAAACCNACACCGNN
-+
-67777788888888888888888877776555443222100//..---+,,+*+*)**)))()'(''"&%%###""
- at 30BB2AAXX080903:3:57:846:32#0
-CTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCCAAACCAAAAGTTGCAC
-+
-67777788,44888888)888888-77765554/32120200/,,.--,,,++'+**'(#)'((('&$%%""""#"
- at 30BB2AAXX080903:3:38:1290:1328#0
-GGTGAAAGTGGTTTGGTTTAGACGCCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCAGCTACAC
-+
-677777888888888888888888'77765.5443222000+/..--,-++,**+***)))(((''''&&"$#%$%
- at 30BB2AAXX080903:3:55:1336:1222#0
-GCGGTGAAAGTGGTTTGGTTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGGGGACAGCTCATGTCT
-+
-67777788888888888888888877776555443220100//..---,,+,+***))))))(((('&&"#%#"#"
- at 30BB2AAXX080903:3:50:399:847#0
-TAGCGGTGAAAGTGGTTTGGTTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGAGAGCGGGATAGCATA
-+
-6777774888888888.8888+887777655544022211//.....-,,+++*)))*'*))(('('"$"""""#"
- at 30BB2AAXX080903:3:60:1458:90#0
-TCGTGTAGCGGTGAAAGTGGTTTGGTTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATGTGCAACACANN
-+
-6777778888888888888888887777655544322210.//.----,,+++****))))(((((&$$&%%$%""
- at 30BB2AAXX080903:3:39:591:412#0
-CGGTCGTGTAGCGGTGAAAGTGGTTTGGTTTAGACGTCCGGGAATTGCATCTGTTTTTAAGCCTAATNTCTGGCTC
-+
-67777788888888888888888877776555443222100//-.---,,++++**)*))))(((('"&"&$"$$"
- at 30BB2AAXX080903:3:48:249:1899#0
-CGTAGTATACCCCCGGTCGTGTAGCGGTGAAAGTGGTTTGGTTTAGATCGGAAGAGCGGGTCAGCAGGCACACCAG
-+
-67777788888888884883882827776)424132021/00/.,-,,$+,$****#*)#'##(#%#"$"$"###"
- at 30BB2AAXX080903:3:56:809:400#0
-GCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGCGC
-+
-67777788888888888888888877776555443222100//..---,-++******))))(('(''%%%#"#""
- at 30BB2AAXX080903:3:49:86:1814#0
-CCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAAGATCGGAAACTCTAAGA
-+
-67777788888888888888888877776555443022//0//..---,,+++**(()*))(&(('#%&#$"""""
- at 30BB2AAXX080903:3:58:451:451#0
-GCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCGGTCGGGGGGGGGGGGAAGAGGGGTGGGGTGGCACTA
-+
-6777778888888+8*88)58888177*0555441.01/.0#-&'.(-,$+,*+#%#(#()(#%%'%"$""###""
- at 30BB2AAXX080903:3:46:1228:901#0
-CGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGGATACTACGGTGAATGCTCTGAAGATCNGTCANTCA
-+
-6777778888888888888888887777650543232210&//...,,,,*(*+)**)))((()(&'"%""""##"
- at 30BB2AAXX080903:3:50:1369:893#0
-GTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGCGGGCACAC
-+
-677777888888888888888888777765554432221-0//,,-,--,,+++*))*))('(((('$"""#"$$#
- at 30BB2AAXX080903:3:40:316:521#0
-GTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCGGTCGTGTAGCGGTGAAAAGATCGNCAGANTTG
-+
-6777778888888888888888887777655544322210.//..---,,,+++***))()(((((&"$&#$"#"#
- at 30BB2AAXX080903:3:53:1411:320#0
-AAACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGGAGCCCCC
-+
-67777788888888888888888877776555443522100//..--,,,+,+***))))(((('('"""#$###"
- at 30BB2AAXX080903:3:3:332:1924#0
-AACCAAACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATAGATCGGAANTATNNAC
-+
-6777778888888888888888887777655244+00000,/..',++',,++*+()()(('((('%""#""""##
- at 30BB2AAXX080903:3:40:280:850#0
-AACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACNACAGTTTC
-+
-67777788888888888888888877776555443222110//..---,,+(+***)*))((()'('"&%&%%#"#
- at 30BB2AAXX080903:3:54:19:1254#0
-AACCACTTTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACACTCTC
-+
-677777888888888888888888777763554130+110//.&--,,,,+)*+***)()')'&(&%$"%&####"
- at 30BB2AAXX080903:3:44:772:1528#0
-TGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCGGTCGTGTAGCGGTGAGAGGAGG
-+
-677777888888888888888888777765554433221000/.-..-++,++**#))()(''#('%'$""$""#"
- at 30BB2AAXX080903:3:37:1333:596#0
-CTTTCACCGCTACACGACCGGGGGGATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGCTNCACACN
-+
-677777888888888888888888'723355424+2.1)00..+,-,,*++*)***)))()'(((&'$""%%$%%"
- at 30BB2AAXX080903:3:36:521:647#0
-TTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCGGTGGAGCAAACCACAGCAGTTCATCGN
-+
-67777788288888888888888877476-554312$2,0/..---+,$,*++**))))&('(''#%$""&""$""
- at 30BB2AAXX080903:3:57:835:1005#0
-TTCACCGCTACACGACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCGTCACAC
-+
-6777778888888888888888887777655544322210////,---,,+++****))((((('''&%"&&$###
- at 30BB2AAXX080903:3:41:1206:402#0
-ATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCGGTCGTGTAGGTGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++****))))((('('&&%&#%"#"
- at 30BB2AAXX080903:3:46:741:1359#0
-ATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCAGATCGGAAGAGGCGACCT
-+
-67777788888888888888888877776555443222100//..----,+++*****))))(((('"$"#""##"
- at 30BB2AAXX080903:3:43:384:520#0
-CGATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATAGATCGGAAGAGCGGAGCGT
-+
-67777788888888888888888877776555443222100//..---,,,++****)*))((((('$&%$"""""
- at 30BB2AAXX080903:3:41:648:339#0
-ACGATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCGGTCGTGTACAGG
-+
-67777788888888888888888877776555443222100//..--,,,+++***))))))(((((&&%#$"#""
- at 30BB2AAXX080903:3:46:1790:517#0
-ACGATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGAGCATTGACCGTAGTATACCCCCAGATCGGATGTGG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$%$""#""#
- at 30BB2AAXX080903:3:35:68:47#0
-GACCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTNTCCACCNN
-+
-67777788888888888888888877776555443220100//...-,,,,+++**)*))))()(''""$#$#$""
- at 30BB2AAXX080903:3:45:45:1174#0
-TAATTCTAGGACGATGGGCATGAAACTGTGGTTTGCTCCACAGATTTCAGTGCATTGACCGCAGTATCGCACAGTC
-+
-6777778888888888888888&87'770551/45(1/0/+//.,--#',(++*(***)))%)((('$"%&%##"#
- at 30BB2AAXX080903:3:4:858:1672#0
-GGGGGTATACGACGGTCAATGCTCGGAAATCTGTGGAGCAAACCACAGTACCATGCCCATCGTCCTAANGTTCNCN
-+
-67777-888888888888888488$77.055544021110/..---.-+-&')**))))()'(('#'"""#"$"""
- at 30BB2AAXX080903:3:41:1449:963#0
-GGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCAGATCGGAAGAGCTGATC
-+
-67777788888888888888888877776555443222100//..----,++++***))))))((('&%%#""#""
- at 30BB2AAXX080903:3:54:361:148#0
-TACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAAGATCGGATGAGGCCA
-+
-67777788882888888888888877776.554322221.0./..+--,,++***))))(')(((''""$##"##"
- at 30BB2AAXX080903:3:39:1478:1360#0
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAGATCGGAAGACGCTACA
-+
-6777778888888888888278887777655534322210///.-..,,,**+*))(*()(('(((%"$""""#$"
- at 30BB2AAXX080903:3:57:418:358#0
-CTATTTCAAAGATTTTTAGGGGAATTAATTCTAGGACGATGGGCATGAAACTGTGGTTTGCTCCACAGATTCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))(((''&$$$"####"
- at 30BB2AAXX080903:3:47:553:1649#0
-AACCACAGTTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATCTCCACCTC
-+
-67777788888888888888888877776555443222000//.----,-+++***)*))(((((('"$"$""#""
- at 30BB2AAXX080903:3:33:633:44#0
-CACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAACACCTCTTTACAGNCGACCANN
-+
-67777788888888888888888877776555443222100//..-.-,,+,+*****)))))((('"%"$$##""
- at 30BB2AAXX080903:3:47:883:1377#0
-GCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAACACCTCTTTACAGTGAAATGCCACAGCATCT
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()('''"&%"&""""
- at 30BB2AAXX080903:3:36:1201:1481#0
-AGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCATAATTAGAGCGGAGTGN
-+
-6777778888888-888888888877776555443222100//..--,,,+++***))))))((((&$$%%#&$#"
- at 30BB2AAXX080903:3:48:1399:1131#0
-GAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCATAATTACCCCCATAGCCC
-+
-6777778883.8888888881888777745555/322212,//.--,--++*++**))())&(('(#%$""""##"
- at 30BB2AAXX080903:3:41:370:46#0
-CCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCATAATTACCCCCATAAGATCGA
-+
-67777788888888888888888877776555443222100///.---,,+,++**))))))(((''&%%&&%#""
- at 30BB2AAXX080903:3:40:930:166#0
-ATAGTGTAAGGAGTATGGGGGTAATTATGGTGGGCCATACGGTAGTATTTAGTTGGGGCATTTCACTTGAAAGCAT
-+
-67777788888888888888888877776555443222100/...,-,,-++****)*((')(''''"#&""$"""
- at 30BB2AAXX080903:3:35:1689:1731#0
-TGAGGAATAGTGTAAGGAGTATGGGGGTAATTATGGTGGGCCATACGGTAGTATTTAGTTGGGGCATNTACCACAN
-+
-67777788888888888888888877776555443222100//..---,,+*+****))))(((&'&"$"#$###"
- at 30BB2AAXX080903:3:54:167:2042#0
-GGTGATGAGGAATAGTGTAAGGAGTATGGGGGTAATTATGGTGGGCCATACGGTAGTATTTAGTTGGGTGTGCTCT
-+
-67777788888888888888888877776555443222100//....,,-,++*+*))**)'('(''&"""""""$
- at 30BB2AAXX080903:3:49:1491:672#0
-GAAATGCCCCAACTAAATACTACCGTATGGCCCACCATAATTACCCCCATACTCCTTACACTATTCCTCCTCCCCC
-+
-67777788888888888888888877776555443222100//.-,---,+++****))))))((('"$##$$"$"
- at 30BB2AAXX080903:3:52:1229:1602#0
-GGGTGATGAGGAATAGTGTAAGGAGTATGGGGGTAATTATGGTGGGCCATACGGTAAGATCGGAAGAACGCATATC
-+
-67777788888888888888888877776555433222100//..-,,,,+*+***))))(()(((#$%#$""##"
- at 30BB2AAXX080903:3:39:1032:1412#0
-TGGGTGATGAGGAATAGTGTAAGGAGTATGGGGGTAATTATGGTGGGCCATACGGTAGTATTTAGTTTGTGGATCG
-+
-6777/78888888888888888887777655544/2321/0//..--,+,,,+**)))%((()((&'"%"#""##"
- at 30BB2AAXX080903:3:35:1368:1190#0
-TACCGTATGGCCCACCATAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATANTACGACAN
-+
-67777788888888888888888877773555442311000/-..,.--,+,+)*'))))()(((('"$"&$##""
- at 30BB2AAXX080903:3:51:397:327#0
-TCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAAACTACCACCTACCTCCCTCAGATCAGCAGCA
-+
-67777788888888888888888877776555443222100//..---,,+++**+)))))((((('%%""###""
- at 30BB2AAXX080903:3:48:827:1949#0
-TATGGGCTTTGGTGAGGGAGGTAGGTGGTAGTTTGTGTTTAATATTTTTAGTTGGGTGATGAGAGATCGGTGTACA
-+
-67777788888888888888888877776555443222100//-.---,,+++***))))))(('((%&$""""#"
- at 30BB2AAXX080903:3:1:1335:238#0
-TTATGGGCTTTGGTGAGGGAGGTAGGTGGGAGGTTGGGTTGAATATTTTTAGTTGGGTGATGAGGAATNTCNCATC
-+
-6777778888888888888088'177976%+54432/220&/-(.,,-++$+)**+*()(()'((#%&"%%"#"$#
- at 30BB2AAXX080903:3:33:1244:1003#0
-TTATGGGCTTTGGTGAGGGAGGTAGGTGGTAGTTTGTGTTTAATATTTTTAGTTGGGTGATGAGGAGNTCACGANN
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)))((('(&""%#$""""
- at 30BB2AAXX080903:3:56:695:1485#0
-TTATAACAAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGTCCACA
-+
-67777788888888888888888877776555443222100//..----,++++**))))))((&('$&$%"##""
- at 30BB2AAXX080903:3:51:548:134#0
-GGTAGGCCTAGGATGGTGGGGGCAATGAATGAAGCGAACAGATTTTCGTTCATTTTGGTTCTCAGGGCATGTCGTC
-+
-67777788848888(88)88888877276/55443222100./..-.-+,+,+****)())((((('$"""$#$#"
- at 30BB2AAXX080903:3:33:813:140#0
-AAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTNCTCTCCNN
-+
-67777788828888888888888870776555443222110//..-.-,-,)++*))))(#(()('&"""&"$"""
- at 30BB2AAXX080903:3:35:57:41#0
-ACTGCGGCGGGTAGGCCTAGGATTGTGGGGGCAATGAATGAAGCGAACAGATTTTCGTTCAAGATCGNACTGCTNN
-+
-6777778888828888888884887777655544322210///..--,,,,++*+))')))()((''""#""$#""
- at 30BB2AAXX080903:3:55:177:33#0
-TGAGAACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACCCGCCATCCGCCA
-+
-67777788388888888888888877776555443222/20//...-,,++,++*))())(()((('"""%#&##"
- at 30BB2AAXX080903:3:1:1744:1275#0
-GATCAGTACTGCGGCGGGTAGGCCTAGGATTGTGGGGGCAATGAATGAAGCTAACAGATTTTCGTTTANTANGCGC
-+
-6777778888888888888,/84+7677)5452/31/-$.+#,$,$,',$%$%'#))(#'((#####""#""#$"#
- at 30BB2AAXX080903:3:35:160:590#0
-GAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCNGNTTGATN
-+
-67777788888888888888888877776555443222100//..---,,+++**)*))))()((('"""""""""
- at 30BB2AAXX080903:3:43:1214:1240#0
-AAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCAGAT
-+
-67777788888888888888888877776555443222100//..--,,,+++*+*))))))(((''&$%&&%%#%
- at 30BB2AAXX080903:3:45:1521:1467#0
-TGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCCACCAA
-+
-6777778888888888888888806777656534322-201//.-,-+,+%**)**)))(()(#'%'&"$#""""#
- at 30BB2AAXX080903:3:38:443:1978#0
-ATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGATCAGTACTGCGGCGGGTGGGCGTGGGGTACATGCCAT
-+
-67777788888888.8883888887777355344/02222,./...--+,+$+**&')*#('#('''$$$##"#"#
- at 30BB2AAXX080903:3:53:233:1784#0
-CCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCACAGCTCT
-+
-67777788888888888888888877776555143222100//.-.,,,,,,***+)*)('(((('&&$#&##%$$
- at 30BB2AAXX080903:3:37:693:1716#0
-TTGTTGATGAGATATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGATCAGTACTGCGGCGGCAGCGTCGN
-+
-67777788888888888888888877776555423022100./..--,-,++++**)**)))()(('"#"$""#""
- at 30BB2AAXX080903:3:53:359:2024#0
-CGGTTGTTGATGAGATATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGATCAGTACTGCGGCTGCGNGGC
-+
-67777788888888888888888877776555443222100//.-.,-,,,,+***())))((((''"""#""""#
- at 30BB2AAXX080903:3:44:23:239#0
-GGGTGGTGATTAGTCGGTTGTTGATGAGATATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGCTCAGCGT
-+
-677777888888888888888888777765554432121/0//..---,,,++***)))()((((('&$%$"#"""
- at 30BB2AAXX080903:3:50:1005:1852#0
-TGGGTGGTGATTAGTCGGTTGTTGATGAGATATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATCACGAGTC
-+
-67777788888888888888888877776555443222100//..---,-+,+***)))))))('('$$"#""#""
- at 30BB2AAXX080903:3:58:338:941#0
-CATTGTTGGGTGGTGATTAGTCGGTTGGTGATGAGACATTTGGAGGGGGGGATCAATAAGACCGGAAGGGCGGTNG
-+
-6777778888288888888888887777655.4132$2100//(.-(-,,,(+*))))%))%'('#&'$&$#""""
- at 30BB2AAXX080903:3:52:742:1486#0
-TTTGAGGTTAGTTTGATTAGTCATTGTTGGGTGGTGATTAGTCGGTTGTTGAGATCGGAAGAGCGGTTACGGCGTA
-+
-67777788888888888888888877776555443222100//..,.--,,(+)*&)*())&(%('%$"#$""$##
- at 30BB2AAXX080903:3:35:1095:1149#0
-CAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGATAACCATACACNACACTACN
-+
-6777778888888888888888887777:555443221100/-..---,-+,+****))))(((('(""$$%$"#"
- at 30BB2AAXX080903:3:40:404:30#0
-TTTAGTGTTGTGTATGGTTATCATTTGTTTTGAGGTTAGTTTGATTAGTCATTGTTGGGTGGTGGTTCGTTCGCAC
-+
-67777788888888888888888877776555543022110//..-,-+,+,+***)*)')('(&('%%&$"$"#"
- at 30BB2AAXX080903:3:39:1091:874#0
-TTCGTCCTTTAGTGTTGTGTATGGTTATCATTTGTTTTGAGGTTAGCTTGATTAGTCATTGTTGGGGTCATGTTTG
-+
-67777783888828888888888847779555443222000/).,---,+&++$**'())(()'(''%""$"%"""
- at 30BB2AAXX080903:3:44:1704:99#0
-TCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGATAACCATACACAACACTAAAGAGATCGAAAA
-+
-6777778888888888888888887777655544322210///..---,,+,+**))*))))(((''&"#&&""##
- at 30BB2AAXX080903:3:44:1253:615#0
-CAGGTTCGTCCTTTAGTGTTGTGTATGGTTATCATTTGTTTTGAGGTTAGTTTGATTAGTCATTGTTGGGGGTGGG
-+
-67777788888888888888888877776555443222100//-.-,--,+,+***)))((((((''&'"&%""#"
- at 30BB2AAXX080903:3:8:438:1040#0
-GATCAGGTTCGTCCTTTAGTGTTGTGTATGGTTATCATTTGTTTTGAGGTTAGTTTGATTAGTCATTNTGTACANN
-+
-67777788888888888888888877776555443222.00//..---,,+++)**))))()(((('""""#$#""
- at 30BB2AAXX080903:3:40:1474:769#0
-ACAATGACTAATCAAACTAACCTCAAAACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATC
-+
-67777788888888888888888877776555443222100//..---,,++++**()))))(('('&&&&%%%"#
- at 30BB2AAXX080903:3:48:917:191#0
-CAATGACTAATCAAACTAACCTCAAAACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))())'('""&%#####
- at 30BB2AAXX080903:3:34:1231:82#0
-TAGTATAAGAGAGCAGGTTCGCCCTTTAGGGTTGTGTAGGGTTATCATGTGGTTGGAGGTGAGTTTGNCTTATCNN
-+
-67777788888888888)180%887'7-6)55440222000%/.)-,+&,+*+*&)&))'&'((%''"$#$##$""
- at 30BB2AAXX080903:3:33:252:2022#0
-CTAGTATAAGAGATCAGGTTCGTCCTTTAGTGTTGTGTTTGGTTATCATTTGTTTTGAGGTTAGTTTNCTCACCNN
-+
-6777778888888888883888807717:5-504322/$01/..'.+*,,+*++**)'()%(#&(('"&#%%##""
- at 30BB2AAXX080903:3:40:1333:321#0
-CTAGTATAAGAGATCAGGTTCGTCCTTTAGTGTTGTGTATGGTTATCATTTGTTTTGTGGTTAGTTTTGTGTTGTC
-+
-67777788888888888858883872779555443222100/./.-,-,,+*++**(#))()'('(''"#$""#"#
- at 30BB2AAXX080903:3:2:1735:1532#0
-ACTAGTATAAGAGATCAGGTTCGTCCTTTAGTGTTGTGTATGGTTATCATTTGTTTTGAGGTTAGTTTNATTAATA
-+
-67777788888888888888888877776355443222000//-.,--,,,++***))())()(('''"#&%""#"
- at 30BB2AAXX080903:3:3:795:1431#0
-ACTAACCTCAAAACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATNCGTGNCA
-+
-6777778888888888888888887777655544322211//./.---,-,,+*+***)))))((''%"%$$$"$$
- at 30BB2AAXX080903:3:47:1767:821#0
-CTAACCTCAAAACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTACTCA
-+
-67777788888888888888888877776555443222100//..-,,,,+,+***))*))))((('$"#%"$"#"
- at 30BB2AAXX080903:3:58:291:1771#0
-AATGATTAAGGATACTAGTATAAGAGATCAGGTTCGTCCTTTAGTGTTGTGTATAGATCGGAAGAGCGGGCACTNN
-+
-67777788888888888888888877776555343222000/..----,-+++***()())#(('(#'&$%"#"""
- at 30BB2AAXX080903:3:2:320:448#0
-AACAAATGATAACCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAAGATCTNCATNNCT
-+
-677777888888888888808836677765320400/,00..,.--,,,+*,+*))*'())((('&#""%$"""""
- at 30BB2AAXX080903:3:1:144:1353#0
-TGTGGCAATAAAAATGATTAAGGATACTAGTATAAGAGATCAGGTTCGTCCTTTAGTGTTGTGTATGTNAGNTCGC
-+
-67777788888888888888888877776553443212100//.,-----+++****))))()'('&&"#""#$#"
- at 30BB2AAXX080903:3:57:1377:1121#0
-AAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTTTATTGCCACAACTAACCTCCTCGGAGTCACCAC
-+
-67777788888888888888888877776545443222100//..----,+++*+**))())((('&%"$$##"#$
- at 30BB2AAXX080903:3:41:1309:447#0
-CTAGTATCCTTAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACAGATCGGAAGAGGCGCTAC
-+
-67777788888888888888888877776555443222101//.--.-,,+++***)))()))((('&"&"""""#
- at 30BB2AAXX080903:3:39:1431:1414#0
-ACAACTAACCTCCTAGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGTGAT
-+
-67777788888888&882888888777765554432101/./.----,+*+++***(*))()'(((#%$$"$""#"
- at 30BB2AAXX080903:3:8:1140:1420#0
-TCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATNCACTCCNN
-+
-67777788888888888888888877776555443222100//..---,,,+++**)))*)())((&"&&&$$#""
- at 30BB2AAXX080903:3:35:1494:1271#0
-CTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCNACTCATCN
-+
-67777788388888888888888877776555363022100//..--,+,++'**)*((()'()(''"##"##"#"
- at 30BB2AAXX080903:3:35:1618:817#0
-CTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCNTCCACNAN
-+
-67777788888888888888888877776552443222100/...---,,+,++**))())()('('""$%##"""
- at 30BB2AAXX080903:3:52:1303:1113#0
-CTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCCCCTATGAG
-+
-67777788888888888888888877776555443222100//..---,-+,+****))**()((''"$#&$%##$
- at 30BB2AAXX080903:3:60:477:1222#0
-AGCGAAAGCCTATAATCACTGCGCCCGCTCATAAGGGGATGGCCATGGCTAGGTTTATAGATAGAACGCGACACNN
-+
-677777888888888888888888177705/21432222/0/#.,,--,+()*()*(*))#'(#'#%%$%$$$$""
- at 30BB2AAXX080903:3:48:328:1561#0
-CCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCGCTAGATCGGAAGAGCGGGGCATCCA
-+
-6777778888888888488888887777655544322110///..--,,,+++(+*)())&)(((%("""#""###
- at 30BB2AAXX080903:3:45:1554:358#0
-GGTAAGAAGTGGGCTAGGGCATTTTTAATCTTAGAGCGAAAGCCTATAATCACTGCGCCCGCTCATACGCTCGGAG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('"&###$#""
- at 30BB2AAXX080903:3:57:1514:774#0
-ACTTGGGGTAAGAAGTGGGCTAGGGCATTTTTAATCTTAGAGCGAAAGCCTATAATCACTGCGCAGACACAGACCT
-+
-+777778888888888888/888877776555443222100/...---,,+++***))))))((''&$$%#""###
- at 30BB2AAXX080903:3:34:440:1530#0
-AGCGGGCGCAGTGATTATAGGCTTTCGCTCTAAGATTAAAAATGCCCTAGCCCACAGATCGGACGAGNCACTTGNN
-+
-67777788888888888888888877776555443222100//.-.--,,+++***)*))*))((((""#%"""""
- at 30BB2AAXX080903:3:3:789:195#0
-GGTGTAGGTGTGCCTTGTGGTAAGAAGTGGGCTAGGGCATTTTTAATCTTAGAGCGAAAGCCTATAACNACACNGN
-+
-6777778888888888888888887777655-44320,000//./.-+,-,++*'**)))'&(((''&"%&#""$"
- at 30BB2AAXX080903:3:36:1306:1933#0
-TATGGGGATAAGGGGTGTAGGTGTGCCTTGTGGTAAGAAGTGGGCTAGGGCATTTTTAATCTTAGAGCTCATAANN
-+
-6777778888888888888888887777655544322000///.-.--,,++*+**))))'))((('&"%#$"#""
- at 30BB2AAXX080903:3:45:1021:220#0
-TAGTATGGGGATAAGGGGTGTAGGTGTGCCTTGTGGTAAGAAGTGGGCTAGGGCATTTTTAATCTTAGACCGCTTC
-+
-677777888888888888888888577765554432320011/-.---,-+,+****)))()((('''#"#"$""$
- at 30BB2AAXX080903:3:48:1229:169#0
-AATAACTAGTATGGGGATAAGGGGTGTAGGTGTGCCTTGTGGTAAGAAGTGGGCTAGGGCATTTTTAACAGTACAT
-+
-67777788888888888888888877776555443222100//..--,,,++++*))*))))(((('"$"##""#"
- at 30BB2AAXX080903:3:49:1150:664#0
-CTTCTTACCACAAGGCACACCTACACCACTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACCGCATNCN
-+
-677777888888888888888888777+6555443222100//.,---,,+,+***)*))))(('('&#"#"""$"
- at 30BB2AAXX080903:3:4:1188:254#0
-TATTGGTTGAATGAGTAGGCTGATGGTTTCGATAATAACTAGTATGGGGATAAGGGGTGTAGGGAGTANAGGANAN
-+
-6777778888888888888*888877776559443512&/0/...---,(+*++**)()())('&(&&"$%$$"#"
- at 30BB2AAXX080903:3:54:387:719#0
-CCACAAGGCACACCTACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCACTCACTAC
-+
-67777788888888888888888877776555443221100//..-.,,,,+******))))((((&&$#%%"#"$
- at 30BB2AAXX080903:3:60:491:1158#0
-CCACAAGGCACACCTACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCANCCGCCNN
-+
-67777788888888888888888877776555443222000//..-.,,,+,+++*)*)))))(((''"&$"$#""
- at 30BB2AAXX080903:3:33:1532:2005#0
-CACAAGGCACACCTACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCANAACACANN
-+
-67777788888888888888888877776555443232100///.---++,,*++*(**()(('''&"$#&%%$""
- at 30BB2AAXX080903:3:43:1239:1104#0
-GCTATTGGTTGAATGAGTAGGCTGATGGTTTCGATAATAACTAGTATGGGGATAAGGGGTGTAGGTGTGTCTGGGT
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('(&'&"#%#$#"
- at 30BB2AAXX080903:3:56:503:1997#0
-AAGGCACACCTACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTAGATCGGGCTCTCG
-+
-677777888888888888888888.7776555443222100/..-.-,,)*+))****))()()'(&'%##"#"$"
- at 30BB2AAXX080903:3:35:1418:1875#0
-CCAGGGCTATTGATTGAATGAGTAGGCTGATGGTTTCGATAATAACTAGTATGGGGATAAGGGGTGTNGNACATAN
-+
--77777-8888888888888888877776)554632(21-0/...---,,+,+****&)))(((''%"$"$$"#""
- at 30BB2AAXX080903:3:8:1248:1228#0
-CCAGGGCTATTGGTTGAATGAGTAGGCTGATGGTTTCGATAATAACTAGTATGGGGATAAGGGGTGTNCACCACNN
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))()('''"%$#%%$""
- at 30BB2AAXX080903:3:49:1066:1369#0
-CCTACACCCCTTATCTCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCAGTCCGCTG
-+
-67777788888888888888888877776555443222.00//.----,,+++****))*)((((('"$"$""$#"
- at 30BB2AAXX080903:3:44:120:280#0
-TACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGGCGCACGC
-+
-67777788888888888888888877776555443022100//..---,,+,++**))))))))((&$"&&$$$$%
- at 30BB2AAXX080903:3:44:594:1611#0
-TACACCCCTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTCGCCGCACGC
-+
-67777788888888888888888877776555443/22001/...---,,++%++)***)(('(('#&'#&$$##$
- at 30BB2AAXX080903:3:56:1329:751#0
-TAGGCGTACGGCCAGGGCTATTGGTTGAATGAGTAGGCTGATGGTTTCGATAATAACTAGTATGGGGGTCACGAGC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))*)))(('''$'"$"#""#
- at 30BB2AAXX080903:3:37:916:1562#0
-TCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCCACCAATAGCCCTGGCCGTACGCCTCACAGCGTN
-+
-67777788888888888888888877776559443222100/'./--,,,++++**))))()()('#$"&"##"""
- at 30BB2AAXX080903:3:37:917:1562#0
-TCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTCGCACCTCN
-+
-67777788888888888888888877776555443222100//.-----,+,*+*+)*))()((('%$$%#"#"#"
- at 30BB2AAXX080903:3:40:267:1995#0
-GTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATGAGTAGGCTGATGGTTTCGATAATAACTNGTATGGGC
-+
-67777788-888888888885788774765554432.210//.-.-,--,,++'**&*)))(('(%'"$""""""#
- at 30BB2AAXX080903:3:38:752:1330#0
-AGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATGAGTAGGCTGATAGATCGGAAGCGCGTAGTA
-+
-67777788888888888888888877/74555-0/2220/.0-.--(,*+,+%()*())'''((#&&&&%""""""
- at 30BB2AAXX080903:3:2:1530:272#0
-GGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGAGATCGGAAGAGGGGTTCAGGAGGAACNCGTCAGA
-+
-67.777888488828888868)14(8151$3+,(3/$'$/0)**%$,,$*)$'$*&#&%#%######%"$""#""#
- at 30BB2AAXX080903:3:43:1278:1568#0
-GGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATCGGTTGAATGAGAGATCGGAAGATGGGTCC
-+
-67777788888888888888888877776555423222200/0..-&-,,++++**)))*)((('''&"##$""#"
- at 30BB2AAXX080903:3:42:997:330#0
-GAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTAC
-+
-6777778888888888888888887777655544322210///..---,,,++*+**))*)()('(''&%&%%%##
- at 30BB2AAXX080903:3:49:263:57#0
-AACCATCAGCCTACTCATTCAACCAATCGCCCTGGCCGCACGCATAGCCGCGAACATTCCTGCAGGCAATCTACAC
-+
-6177778888238/8888'88888(77-63554)3(10&*1./(.+--&-++*%'))('((&(('&'"""$##$#$
- at 30BB2AAXX080903:3:55:910:332#0
-CCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACCCCT
-+
-67777788888888888888888877776555443222100/0..---,,,,+***))**))(((('%&""#"$##
- at 30BB2AAXX080903:3:41:1403:613#0
-GGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATGCGGCGTGC
-+
-67777788888888888888888877776555443222100./,.----,(++**(*))*)&()(%#%$%""""""
- at 30BB2AAXX080903:3:34:1027:420#0
-CAACCAATAGCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAANCTCAATNN
-+
-67777788888888888888888877776555443222100//..---,,,++**)*))))((((''"$#$"#"""
- at 30BB2AAXX080903:3:39:306:1054#0
-CTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGTCGCACCC
-+
-677777888888888888888888777765554432220/0//..-.-,,,,+****()())'(&''&"$%%%###
- at 30BB2AAXX080903:3:46:855:493#0
-CTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGAG
-+
-67777748888888888888888577776555443222100//-..--,,+++*+*))*)*)((&(&"""$"$""#
- at 30BB2AAXX080903:3:51:1297:908#0
-CCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCCCCCCAGA
-+
-6777778888888888888888887777655544322110///..--,-,,,**+)*))))(((((&$%#%##"$"
- at 30BB2AAXX080903:3:48:1038:1951#0
-TGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCGAGGCGTCGCTCCTGG
-+
-6727778888888888888888887%7+355543/22110/0/.)+-+,,++*+()'*)(&'(('(&"$""$""""
- at 30BB2AAXX080903:3:8:452:567#0
-TGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGAGATCGGAAGANGCTCACNN
-+
-6777778888888888888888887876655045222110....---,,,,+++))()))')(('(%""##%##""
- at 30BB2AAXX080903:3:41:186:1539#0
-CTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAGCCTAGCAA
-+
-67777288888888888888888877776555443022.00-....--,,+*+)****)()((((('&&##$%##"
- at 30BB2AAXX080903:3:52:833:1365#0
-TGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGATCG
-+
-67777788888888888888888877776555443222100//..---,-,+****)**))((((('&$""%#"#$
- at 30BB2AAXX080903:3:55:968:40#0
-TACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAGTATCACC
-+
-67777788888888888888888877776555443222100//..--,,-+,++**)*)))(((('($""&%%$"#
- at 30BB2AAXX080903:3:2:1784:713#0
-AATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGNTGTCACA
-+
-67777788888888888888888877776555443222110//...--,,,,+****))()()((''"""#"$###
- at 30BB2AAXX080903:3:47:1643:746#0
-AATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGATCGTCAC
-+
-67777788888888888888888877776555443222100///..,-,,++*****)))()(((('$"%%$##"#
- at 30BB2AAXX080903:3:49:1363:728#0
-CTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAGATCGACTACTAC
-+
-6777778888888888888888887771655544222000,/.-,----,++)*))**)()))((#'"#%#$%""#
- at 30BB2AAXX080903:3:57:995:288#0
-CTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGAGATCGGAGTTCGAT
-+
-67777788888888888888888877776555443222100//.---,,,+++****))))()((''&'$""####
- at 30BB2AAXX080903:3:54:1625:296#0
-TAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTCACACAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''"""%#%#$$
- at 30BB2AAXX080903:3:57:18:1373#0
-TAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCTCCCGA
-+
-6777778888888888888888887777655544312200///.--,,,,+++***)*))(((((''%'#"###"#
- at 30BB2AAXX080903:3:46:575:295#0
-AGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAATATCAACCCTTCAC
-+
-67777788888888888888888877776555443222110//..-,-,,+*+****)))()()(('$$""""$##
- at 30BB2AAXX080903:3:56:1611:1757#0
-CGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGATCGGAAGAGACACCACCAC
-+
-67777788888888888888888877776555481222100//..----,+++****)))))((('&$$%####"#
- at 30BB2AAXX080903:3:4:1381:662#0
-TACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTTNACACNTN
-+
-6777778888888888888888887777655544322200/....--,-,,++**))))))((('('""#""#"""
- at 30BB2AAXX080903:3:2:74:682#0
-TGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTNTACNNCA
-+
-677777888888888888888888777765554/3222100//.----,,+++***))))'()((''""#"#"""#
- at 30BB2AAXX080903:3:36:1332:585#0
-CAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAAGATAGCGTACAN
-+
-677717888888888888888888777765054432121*0//.-+,,-(+*+*+)))))'))(((&$&"""###"
- at 30BB2AAXX080903:3:42:1459:1447#0
-GACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGGGGGCTC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((((''&&#"""#""
- at 30BB2AAXX080903:3:42:1609:1743#0
-TGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGTAGCNGTNT
-+
-67777788888888888888888877776555443222100//...---,++++***))))(()('&&"&%"$#"#
- at 30BB2AAXX080903:3:60:1070:1554#0
-AAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAATATNN
-+
-67777788888888888888/88837776555443222100//..-*-,,++****)))))()'(''%&"##$"""
- at 30BB2AAXX080903:3:48:1219:633#0
-GTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCAATTAGGTGCATGAGCA
-+
-67777788888888888888888877736555443222100//..---,,+++***)**)))(('('&&"$"""#"
- at 30BB2AAXX080903:3:36:152:536#0
-TGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTAGATCGGACACTCAGCAN
-+
-67777788888888888888888877776555443222100//..---,,++++**'*))))(('(#%&"##"$$"
- at 30BB2AAXX080903:3:42:664:84#0
-TTGTGAAGATGACAAGTGGAGAGGGAAGGTTAATGGTTGATATTGCTAGCGTGGCGCTTCCAATTAGGTGCGTGAG
-+
-677077888888888888,8888877776%55443202101//...-,,&+'+****()((&((('('%$##""""
- at 30BB2AAXX080903:3:48:79:390#0
-CACCTAATTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACGTGTCATCTTCAGTATTATCA
-+
-67777788888888888888888877776555443221100+/..----,+++**()*)))((((('""""#""#"
- at 30BB2AAXX080903:3:2:674:750#0
-ATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCTTCCNATTACGT
-+
-67777788888888888888888576776555813202110//...-,--*,*+**)*&)((('('%&"#%%##""
- at 30BB2AAXX080903:3:1:248:1480#0
-TAATTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTGTCATCTTCACAAGANCTNCACC
-+
-67777788888888888888888871/76555423212/0../,-.-,,,++'**)*((()))((''""#""###"
- at 30BB2AAXX080903:3:1:733:176#0
-TAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGCGCNCCNCCTC
-+
-67777788888888888888888873776555243221100///.---,,,++**+(*))))'(('''""""##$#
- at 30BB2AAXX080903:3:51:1165:1430#0
-TTGGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTATATCTACT
-+
-6777778888888888888888887777655544302200///..---,,++++**))))))()('&%$"#$%#$#
- at 30BB2AAXX080903:3:49:522:1238#0
-GGAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTAATCCTACCGC
-+
-67777788888888888888888877776555443222100//..---,,,,+****)))())('(''$#""%""#
- at 30BB2AAXX080903:3:59:159:1062#0
-TCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGNGCGNNT
-+
-67777788888888888888888877776555443222100//.----,,+++****))))((('''&$"#%$""#
- at 30BB2AAXX080903:3:50:1320:1247#0
-AGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGATGGCTGAC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((((''""""#"###
- at 30BB2AAXX080903:3:39:1718:861#0
-TAGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGTGTGNCGCG
-+
-67777788888888888888888877776555443222100//..--,,,-++*+*)**)))(('(&"&"#""$#"
- at 30BB2AAXX080903:3:56:44:1379#0
-TAGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTAGGGTGGACGT
-+
-67777788888888888888888877776555443222100//-.--,,,+++***)))))((('('&%""$"###
- at 30BB2AAXX080903:3:41:592:1712#0
-AGGATAGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCTCGGGCNT
-+
-67777788888888888888888877776555443222100//..---+,+++***))#)))(((('&$"%#"#"#
- at 30BB2AAXX080903:3:44:1626:703#0
-TAGGATAGGCAGGAGAATTAGAATTGTGAAGATGACAAGTGTAGAGGGAAGGTTAATGGTTGATATTGCGGGGGGG
-+
-677777888888888888388888777765554432221/0//..---,,++++**)))))())(((&""&&%###
- at 30BB2AAXX080903:3:60:247:1511#0
-TAGCAATATCAACCATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTAATTCTACTGACTATAGACNGCNN
-+
-67777788888888888888888877776555443220000//..---,,,++***)*))*)((((''&##""$""
- at 30BB2AAXX080903:3:36:1723:152#0
-AACCATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCNCTGTCGNN
-+
-67777788888888888888888877776555443222100/.-..--,,,,+***))*()(((('(""$%#%"""
- at 30BB2AAXX080903:3:8:1781:1665#0
-AACCATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCNCTCTACNN
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))()'('"$#$"$"""
- at 30BB2AAXX080903:3:54:376:1899#0
-CATTAACCTTCCCTCTACACTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTAGCCTTC
-+
-67777788888888888888888877776555443222100//..---,-,+****)))))((((('%$""%%##"
- at 30BB2AAXX080903:3:3:960:524#0
-TGGATTAAGGCGACAGCGATTTCTAGGATAGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGCNTTGANAC
-+
-67777788888888888888888877776555283222100//...--,,+++***))())()((('$"#""#"##
- at 30BB2AAXX080903:3:33:1607:696#0
-TACACTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTTAATCAGANCGCACCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))))(('&"$"$$$"""
- at 30BB2AAXX080903:3:57:8:1053#0
-GTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGATTTCTAGGATAGTCAGTAGAATTAGAANNGTGAGTCTACN
-+
-67777788888888888888888877776555443222100//..---,-,+++***)))))(##('&%#"#""$"
- at 30BB2AAXX080903:3:35:69:938#0
-AGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGATTTCTAGGATAGTCAGTAGAATTAGAAGTGNGACCTGTN
-+
-67777788888888888888888877776555443222100//..---,,+++***'))))())''&"$"##""#"
- at 30BB2AAXX080903:3:1:1685:1109#0
-AAGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGATTTCTAGGATAGTCAGTAGATCGGAAGAGCNGANCTCT
-+
-677777888888888888888888777765554432211200/-.-,-,,+)+**))))&))'((''""$""$%"#
- at 30BB2AAXX080903:3:36:976:1832#0
-CACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACATCTCATGNN
-+
-6777778888888888*888888837776555423222100//..-,,,,+++**+)*))))((((%$"&%%##""
- at 30BB2AAXX080903:3:48:745:1420#0
-TTACTAGAAGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGATTTCTAGGATAGATCGGAAGAGCTGCACAAC
-+
-6777778888888888888888887777655544321210//..-,--+,+,+*)*)*)'))((('($"##"$""#
- at 30BB2AAXX080903:3:54:421:1430#0
-TACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTATACCTGCA
-+
-67777788888888888888888877776555443232100//...--,,++++****))))()''("&"%#%"#"
- at 30BB2AAXX080903:3:58:1032:584#0
-TGCAGGTAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGAGATCGGAAGAGGTACATA
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*)(((((''&&"#$###
- at 30BB2AAXX080903:3:37:447:245#0
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCACCCTTCCN
-+
-67777788888888888888888877776555443222100//.----,,+++***)*)))()((('$"$%$"##"
- at 30BB2AAXX080903:3:55:377:168#0
-CGTGCAGGTAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGCGATTTCTAGGAGCGCCTT
-+
-67777788888888888888888877776555443222100//.-----,+++**))))()))((''$$"#%"""#
- at 30BB2AAXX080903:3:46:649:987#0
-TGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAAGATCGGAAGAGCGGGACAN
-+
-67777788888888888888888877776555443222100//..---,,++++*+)))*)))((''&&%"#"#""
- at 30BB2AAXX080903:3:3:1274:1538#0
-GTCGTGCAGGTAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGGATTAAGGCGACAGAGATCGGAANCTGANGT
-+
-67777788888888888888888877776055423220100//..-.,,-,,++*****))((((('$""""#"""
- at 30BB2AAXX080903:3:46:1087:1732#0
-CTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACAC
-+
-6777778888888888888888887777655544323210/....--,,,+++)****))()))('(%$#$#"###
- at 30BB2AAXX080903:3:57:1147:1633#0
-TAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGAGATACACCT
-+
-677777888888888888888888777765554432211/0//..---,,+,+**))))())(((('$$$%%$##"
- at 30BB2AAXX080903:3:42:1300:1901#0
-TCATTATGTGTTGTCGTGCAGGGAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGGAGATCGGAAGCGCGGTCC
-+
-677777888888888888,5883877774+55%332/10//-/,..,)-%,++)'&()&(((#((&#%"&"""##"
- at 30BB2AAXX080903:3:47:1059:419#0
-GCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAGGCCTCTACCTGCACGACAAGATCGGCGAGACAC
-+
-67777788888888888888888878776555443222100//..---,,+++****))))((((('&$"""##"$
- at 30BB2AAXX080903:3:55:484:683#0
-TGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCCCC
-+
-67777788888888888888888877776555443222100//..---,,+++****))*)((((('$&#&$%##%
- at 30BB2AAXX080903:3:47:1475:1126#0
-GGTGGGTCATTATGTGTTGTCGTGCAGGTAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGAGATTCATCACGA
-+
-67777788888888888888888878779552442222100/...--,,,,++**)**)(()((((#"$""%#$"#
- at 30BB2AAXX080903:3:39:1463:257#0
-TGGTGGGTCATTATGTGTTGTCGTGCAGGTAGAGGCTTACTAGAAGTGTGAAAACGTAGGCTTGGAGTGTGGGCGC
-+
-6777778888888888888888887777673544323210/-/.--+-,,*++*)*')))(&((('#'$#&##""#
- at 30BB2AAXX080903:3:58:813:1480#0
-GATTGGTGGGTCATTATGTGTTGTCGTGCAGGGAGAGGCTTACTAGAAGTGTGAGATCGGAAGAGGGGTCTCGCAC
-+
-6777778888.888888888888877776555%43222*00.,.--,,,)+*+&**)&))'((((#'&$%&$%$$%
- at 30BB2AAXX080903:3:49:1160:1060#0
-TGTGATTGGGGGGTCATTATGTGTTGTCGTGCAGGTCGAGGCTTACTAGAAGTGTGAAAACGTAGGCGTGGGTTAC
-+
-677777888888888888888888777765554430+21001/...--,,+++*+*)))*()'(('%$$#"""""#
- at 30BB2AAXX080903:3:35:1068:1504#0
-TAATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACNTCTCCACN
-+
-677707888888888,888888887777655544322210/./..---,-+++**)*)())))#'''""##$###"
- at 30BB2AAXX080903:3:47:331:403#0
-ATGTGATTGGTGGGTCATTATGTGTTGTCGTGCAGGTAGAGGCTTACTAGAGATCGGAAGAGCGGTTCACCTCTGA
-+
-677777888888888888888888777765654432'0100/-.-.,,-,,+***+*()))((((#%%"##"##""
- at 30BB2AAXX080903:3:8:1010:1323#0
-CATGTGATTGGTGGGTCATTATGTGTTGTCGTGCAGGCAGAGGCTTACTAGAAGTGTGAAAACGTAGNTCACATNN
-+
-67777788888888888888888)7777655)24322$10)/0...--,,++**)*(*)(()((('(""$#$#"""
- at 30BB2AAXX080903:3:34:1768:778#0
-ATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCANCCACCANN
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))((((('"$##%##""
- at 30BB2AAXX080903:3:59:993:1443#0
-ATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACACCA
-+
-67777788888888888888888877776555443222100//..---,,+++**+***)('(((('$&&#%%##%
- at 30BB2AAXX080903:3:58:1636:245#0
-CAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACACACCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&'%%&%#$""
- at 30BB2AAXX080903:3:41:118:1901#0
-GCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACAGCACCAACA
-+
-67777788888888888888888877776555413222100//./-,-,-+++**))))))))((''$##$$"###
- at 30BB2AAXX080903:3:40:363:849#0
-ATGATAGGCATGTGATTGGTGGGTCATTATGTGTTGTCGTGCAGGTAGAGGCTTACTAGAAGTGTGANAACGGACA
-+
-67777788888888888888888877776555443222100//..,--,,+++++))*)))(((('&"&%%$"$#"
- at 30BB2AAXX080903:3:39:1685:253#0
-TACTATATGATAGGCATGTGATTGGTGGGTCATTATGTGTTGTCGTGCAGGTAGAAGATCGGAAGAGAGCTGTCAC
-+
-6777778888888888888888887,776555443220110/...,-,-,,'+*****))))(((('"&%"""##$
- at 30BB2AAXX080903:3:52:36:468#0
-TCACACTTCTAGTAAGCCTCTACCTGCACGACAACACATAATGACCCATCAATCACATGCCTATCATATCGTAAAC
-+
-6717778888888888888888887777655544321220.0/--+--&,,)*+*))))(()(((''$$#&##"##
- at 30BB2AAXX080903:3:39:682:1555#0
-GCTGGGTTTTACTATATGATAGGCATGTGATTGGTGGGTCATTATGTGTTGTCGTGCAGGTAGAGGCTTACTATCA
-+
-677777888888888888888888777765554432221/1//..---,,++******))))((('%$$#$%""##
- at 30BB2AAXX080903:3:3:839:1051#0
-AGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATAGATCGGAAGANCGCANAC
-+
-67777788888888888888888877576555443122100//./.-,,,+,+*****))()()(('$"#"%#"#$
- at 30BB2AAXX080903:3:50:1447:1377#0
-GGGTCATGGGCTGGGTTTTACTATATGATAGGCATGTGATTGGTGGGTCATTATGAGATCGGAAGAGAGGCACGCC
-+
-67777788888888888888888877776555443222100//..--*-,+++***))*)))(('('"$$##%"##
- at 30BB2AAXX080903:3:35:812:1365#0
-TAGGGGTCATGGGCTGGGTTGTACTATAGGATAGGCATGTGATTGGTGGGTCAGTATGTGTTGTCGTNCGCACATN
-+
-677777-88888888888*8)8887777$5554432221/0//..---,,&+******()')(('('"$"%"$##"
- at 30BB2AAXX080903:3:39:528:626#0
-CTGTTAGGGGTCATGGGCTGGGTTTTACTATATGATAGGCATGTGATTGGTGGGTCATTATGTGTTGTCGTGCATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()((('"&&&%&$"#
- at 30BB2AAXX080903:3:56:1233:1459#0
-GAGAGGGCCCCTGTTAGGGGTCATGGGCTGGGTTTTACTATATGATAGGCATGTGATTGGTGGGTCATTTCTCACG
-+
-67777788888888888888088877776555243222100//./-----,++***)))))()('&'&%"#"###"
- at 30BB2AAXX080903:3:49:612:119#0
-CATATAGTAAAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCAGATCCGTCGCGTC
-+
-677777888888888888888888771705554432210...,,'-,*++++'()')'((&))''#&$""###""#
- at 30BB2AAXX080903:3:35:1144:349#0
-TATAGTAAAACCCAGCCCACGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAACGACCTCCGGCCTANGCACCTNN
-+
-6777778888388882808&888877776555443322&01//.,.-',,+++'*+**)()((((%'""#$$#"""
- at 30BB2AAXX080903:3:45:198:34#0
-ATCACATGGCTAGGCCGGAGGTCATTAGGAGGGCTGAGAGGGCCCCTGTTAGGGGTCATGGGCTGGGGTGTCCTAT
-+
-67777788888888888888888877776555443222100//..---,,+++******))(((('&&&"""#"#"
- at 30BB2AAXX080903:3:50:806:1799#0
-AATCACATGGCTAGGCCGGAGGTCATTAGGAGGGCTGAGAGGGCCCCTGTTAGGGGTCATGGGCTGGGATCTCGTA
-+
-677777888888888888888888777365554422201/0//-,---,,,*++**(')))()&'('%"###""#"
- at 30BB2AAXX080903:3:41:1700:667#0
-TAAAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTAGCCATGTGATTCCA
-+
-67777788888888888888888877776552403/2120/1+--+,*++****)))(((%'('('&$""""###"
- at 30BB2AAXX080903:3:36:100:148#0
-AAGTGAAATCACATGGCTAGGCCGGAGGTCATTAGGAGGGCTGAGAGGGCCCCTGTTAGGGGTCATGNCTGCGTCN
-+
-677777888888888888888888777765/544321210///-.+--,,++++***))))((('(("$"##""$"
- at 30BB2AAXX080903:3:54:1471:1186#0
-AGTGGAAGTGAAATCACATGGCTAGGCCGGAGGTCATTAGGAGGGCTGAGAGGGCCCCTGTTAGGGGGACTGGGCG
-+
-67777788888888888888888877776555413222000//..+---,,++**)(*))(((('''$&$&&&$#"
- at 30BB2AAXX080903:3:48:1312:1228#0
-GTTATGGAGTGGAAGTGAAATCACATGGCTAGGCCGGAGGGCATTAGGAGGGCTGAGAGGGGCCCTGGGTCCTGAT
-+
-6777778888888888888888887777655544322-10+-.+.,--,,,+%*+(*))))#(''##"""##"""#
- at 30BB2AAXX080903:3:37:80:318#0
-TAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTAGCCATGTGATTTCACTTCCACTCCATACAAAACAN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''%$%"""#""
- at 30BB2AAXX080903:3:59:88:186#0
-TAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTAGCCATGTGATTTCACTTCCAGATCGGAAGCACNNC
-+
-67.7/788888888888888888876)7655544322211&//.---+,++*++*+))))'(((('''$%##$""#
- at 30BB2AAXX080903:3:4:1041:1601#0
-GAGGAGCGTTATGGAGTGGAAGTGAAATCACATGGCTAGGCCGGAGGGCATTAGGAGGGCTGAGAGGGNCCTCNTN
-+
-67777788888888,84888888877776552243212001/..)--#,)+**++)**)'')(((''$"#$"$"#"
- at 30BB2AAXX080903:3:33:788:349#0
-TGAGGAGCGTTATGGAGTGGAAGTGAAATCACATGGCTAGGCCGGAGGTCATTAAGATCGGAAGAGCNGCTCAGNN
-+
-67777788888888888888888877776555433222000./..,--*,+*+)**)((()'((((%""#"$#"""
- at 30BB2AAXX080903:3:54:153:584#0
-CCTAGTATGAGGAGCGTTATGGAGTGGAAGTGAAATCACATGGCTAGGCCGGAGGGCCTTAGGAGGGGAGGACNAC
-+
-6777778888888888888888887777655544322110///..---+-,+'**((#()'()#(('$$#$##"##
- at 30BB2AAXX080903:3:43:138:1709#0
-TTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGGAAGTGAAATCACATGGCTAGGGCGGGAGATAGGGACA
-+
-6777778888888888888888887777655544322210//*.,--*+,(*%'*#)'))'(((((&'""##"$#"
- at 30BB2AAXX080903:3:54:872:1097#0
-ATGACCTCCGGCCTAGCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAAGCGCCCACC
-+
-67777788888888888888888877776555413222100/...+--,,+++***)*)))((('('%&""%""$#
- at 30BB2AAXX080903:3:41:609:997#0
-CGGCCTAGCCATGTGCTTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACACACNGCACA
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))*())(''&"%#"%####
- at 30BB2AAXX080903:3:53:547:1856#0
-CGGCCTAGCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACACGAACCCGC
-+
-67777788888888888888888877776555443222100//...-,-,+*+***))))((()(('"#$&%%"""
- at 30BB2AAXX080903:3:54:1539:1762#0
-CGGCCTAGCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAGCCAACACAACACACCCC
-+
-67777788888888888888888877776555443222100/....---,,****)))'(()(((''%%&&$%###
- at 30BB2AAXX080903:3:34:1031:852#0
-TGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGGAAGCGGAATANCTGCACNN
-+
-677.7788888888888888888877776550443222100//.-----,+++*#**)))&)%(('%"$""##$""
- at 30BB2AAXX080903:3:48:524:52#0
-TTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGGGTGGAAGGGAAAGAACCACNAT
-+
-6777778888888888888888887/77655544020.100//-.--',%,++&*#*)#(('('&(#"""#"#"""
- at 30BB2AAXX080903:3:54:507:1700#0
-CATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGGAAGTGAGATAGGCGTC
-+
-67777788888888888888888877776555443222(00//..,-,,,+++***)*))))(#'#'%$#&&#""#
- at 30BB2AAXX080903:3:49:367:735#0
-CATCATTGGTATATGGGTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGGAAGGGCAGAGAGA
-+
-67777788888888888888888897776455343201100./...--+,,+(**))*()'(((((#&$""""###
- at 30BB2AAXX080903:3:50:1772:468#0
-ATAACGCTCCTCATACTAGGCCTACTAACCAACACACTAACCATATACCAATGATGGCGCGATGTAACCCGATAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(('('""$$"""#"
- at 30BB2AAXX080903:3:44:498:284#0
-AACGCTCCTCATACTAGGCCTACTAACCAACACACTAACCATATACCAATGATGGCGCGATGTAACACGCGAGGAA
-+
-67777788/82888888888884-77471535443132/00./..'-+,,+*++*))**(((&((''$%"&"""$"
- at 30BB2AAXX080903:3:58:918:1206#0
-TTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATAGATCGGACTCGACA
-+
-67777.8880888888888888887777655544322210-/..--,,,,+++*+))**)()))((%'""$#"###
- at 30BB2AAXX080903:3:50:654:1092#0
-TTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATCACACTC
-+
-6777778888888888888888887777654544321'101//..-.--,,++****)))''(((('%$#####"#
- at 30BB2AAXX080903:3:33:1020:135#0
-AAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCACNCGTCTCNN
-+
-6777778888888888888888887777)55544322%001//,---,,-+(*&**')()))((('#"$"##"#""
- at 30BB2AAXX080903:3:33:665:168#0
-AAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATNGCCGCCNN
-+
-677777888888888888,887837777455,%452211001/,,--+,+,'+*()))(()')&(&%""$##$#""
- at 30BB2AAXX080903:3:35:1162:1259#0
-GAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCANGCTACCAN
-+
-67777788888888888888882877776355443222+/1//..---,,++****))))())((('"""%%"##"
- at 30BB2AAXX080903:3:51:1306:1860#0
-CGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCGCCGCTGGA
-+
-2777778888888888888858887777656542222210///..,--,,+*++**))'))(('('%%#$"#$$""
- at 30BB2AAXX080903:3:39:745:1152#0
-ATCGAAGGCCTTTTTGGACAGGTGGTGTGGGGTGGCCTTGGGATGTTCTTTTTTGTGGGTTTATGCGCTCCCCTCG
-+
-677777888888888888888888777-6)55.430)2.00/-..+-,),++*)%#)#%&&#####'$#%""#"$"
- at 30BB2AAXX080903:3:47:1740:970#0
-ATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGGGGCCTTGGGATGTGCTTTCTCGTGTTACATCGCGCGCACAGAG
-+
-677777888888888888888828737.6555%43+2/100',...-',,,$+)**)')(''(&(''%"$"""""#
- at 30BB2AAXX080903:3:41:440:568#0
-TATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACAAGATCGGGAGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+**))*))()'('&$%"""#"#
- at 30BB2AAXX080903:3:43:363:32#0
-TATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCAGG
-+
-67777788888888888888888877+79555433232200/...---,,++****())))())(('&&"""%$""
- at 30BB2AAXX080903:3:52:800:576#0
-TATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCCTG
-+
-67777788888888888888888777776555443222100/...----,+++***))))))))(('%$$"%$%$#
- at 30BB2AAXX080903:3:50:152:803#0
-GTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGCGCTTTCTCGTGTTACATCGAGGTAACGA
-+
-677777888888888888888888'7776555443222100//..--$,,+++**))*)))))('(&"""#"##""
- at 30BB2AAXX080903:3:37:1558:705#0
-CGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCAGNGCTCAN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))()(((''$$"#""##"
- at 30BB2AAXX080903:3:51:501:1319#0
-CGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCCCGACCTCA
-+
-67777788888888888888888877776555443222100//.,.--,,,++****)*)*)((((#$%""$"##"
- at 30BB2AAXX080903:3:58:1567:1426#0
-CGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATACACCCACAN
-+
-67777788888888888888888877774555443222//0//.-.--,,+,**'*))))))('((&$$%#%$%$"
- at 30BB2AAXX080903:3:38:1182:87#0
-CCCGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATTGTNCANN
-+
-6777778888888888888888887778651544-22110///-.-*,,,,++++*)*))))(((''"$$&"#$""
- at 30BB2AAXX080903:3:54:994:1837#0
-TGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTAGCGCGCACA
-+
-677777888888888888888888777765554432221////..-,-+,+++*+*)*)))((((('%""$$"##"
- at 30BB2AAXX080903:3:1:1576:1474#0
-TTATCCCGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGCTNCCNTCCG
-+
-67777788888888888888888877776552442232100*/.--,-+,*++*)*))))()(('(%&"#%""#""
- at 30BB2AAXX080903:3:53:780:1400#0
-GATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGATCGGAAGAGCGGTTCCGCAG
-+
-6777778888888888888888887777655542322210///..--,+,+**+**)*)))(((''''$"&#%%##
- at 30BB2AAXX080903:3:35:1344:1291#0
-TGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATACGAGNTAGCGNCN
-+
-6777778/88888888888888887777655541322,100-#.'--,,,+*++*(**)*'()((('"'$&$""#"
- at 30BB2AAXX080903:3:58:1063:1837#0
-ATAAATAGGATTATCCCGTATCGAAGGCCTTTTTGGTCAGGTGGGGGGTGGGGGGCTTGGGGGGTGTGTGACCTCN
-+
-67777788888888&8*883868877711)5543'5(,,/0-/.%-",$,+*++%'((*))%'('(#'&%"#"#$"
- at 30BB2AAXX080903:3:60:1337:1763#0
-GAAAGCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATATTCTAGNN
-+
-67777788888888888888888877776555443511000//.-,--,,+,+**+*)*)()'(('&"$"%"#"""
- at 30BB2AAXX080903:3:2:1075:1871#0
-TGAGGTAATAAATAGGATTATCCCGTATCGAAGGCCTTTTTGGACAGGTGGTGTGTGAGATCGGAAGANCGCNCAC
-+
-67777788888888888888888877776555443222100//..---+,+++***))*((((((''%""$""##$
- at 30BB2AAXX080903:3:50:476:1528#0
-CGAAGAAAAAAACTTCTGAGGTAATAAATAGGATTATCCCGTATCGAAGGCCTTTTTGGACAGGTGGCGGGCACGC
-+
-67777388888888888888888877776555343221/00//.,-,,,,+*+**))))((()('((%"""$"#"#
- at 30BB2AAXX080903:3:37:625:156#0
-CCTGCGAAGAAAAAAACTTCTGAGGTAATAAATAGGATTATCCCGTATCGAAGGCCTTTTTGGACAGGCGTTCCNN
-+
-6777778-80888888888888887675635,443212210/...-,+,,+*++*)*)(()))((''$##""#$""
- at 30BB2AAXX080903:3:56:277:1587#0
-TAGGGGCTAGGCTGGAGTGGTAAAAGGCTCAGAAAAATCCTGCGAAGAAAAAAACTTCTGAGGTAATAAATAGCNT
-+
-677777888888888888888888777765554332221/0//.-,--,,+++*****)))))'(''%"#%###""
- at 30BB2AAXX080903:3:49:882:2013#0
-TCAGAAGTTTTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAAGCAGGAA
-+
-67777788888888888888888877776555441322100.-..-,+,,+****()(()((#(#'%"""$###""
- at 30BB2AAXX080903:3:2:555:1902#0
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGANTGTNTCG
-+
-67777788888888888488828877776055443222100//.-.-,,++*+)**)))))'(((''"""$"""#"
- at 30BB2AAXX080903:3:40:1138:496#0
-GGGCCAGTGCCCTCCTAATTGGGGGGTAGGGGCTAGGCTGGGGTGGGAAAAGGCTCAGAAAAATCCTTCNGCAGNT
-+
-67777788888888888888888877076555443222100//+.-&+,,+++***)*)))()'((%"$""#"""#
- at 30BB2AAXX080903:3:53:453:1717#0
-TCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTTGCCCCC
-+
-6777778888888888*88888887777655558322100///--.-,++,+)+**)())))(((''%""$#"$#$
- at 30BB2AAXX080903:3:39:136:1904#0
-CTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACGGTCACCNC
-+
-677777888888888888888488777755555432-1100/--.---),++*******())((((&"""$#%""#
- at 30BB2AAXX080903:3:51:1688:1968#0
-TCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTACCACCACCA
-+
-677777888888888888888888777765554432221001/..-,,-,+,+**+)))))((((('%&%&#$%$$
- at 30BB2AAXX080903:3:54:172:1563#0
-TCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAAGATCGGAAGAGCGGTCGCGCACG
-+
-6777778088888888888888887777657544102/1/1/...-,+-,+)(+)))*)&')&('''""$"$$"#"
- at 30BB2AAXX080903:3:45:1311:1121#0
-ATGCCTGTTGGGGGCCAGTGCCCTCCTAATTGGGGGGTAGGGGCTAGGCTGGAGGGGGAAAAAGCTCAGCACGCGC
-+
-6/777788888888888888%8887770654544322#0000/+-,--)++)%+%)*'%'''#(#''"%#"$$#"#
- at 30BB2AAXX080903:3:40:353:1873#0
-GGGGTGATGCCTGTTGGGGGCCAGTGCCCTCCTAATTGGGGGGTAGGGGCTAGGAGATCGGGAGAGCGGTCCGCAC
-+
-677777888888888888888036/7%765254&2221&00//,,--,,(,,++#*('#()#'(#'%""""#""##
- at 30BB2AAXX080903:3:35:336:1990#0
-TGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTGGCCCCCAACAGATCNACACACAN
-+
-6777778888888888888888887777655532312210.//..---,-+++**))))((')((('""##$"$#"
- at 30BB2AAXX080903:3:59:840:1855#0
-TGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTGGCCCCCAACAGGCACTCACATCC
-+
-677777888888888888888888777765555435101/.//-/---,,+,*+*)('*)(((((''$&""$#"##
- at 30BB2AAXX080903:3:48:89:1181#0
-ATTTAGCGGGGTGATGCCTGTTGGGGGCCAGTGCCCTCCTAATTGGGGGGTAGGGGCTAGGCTGGAGCATGCCATG
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))()((''&$""##""#
- at 30BB2AAXX080903:3:40:307:713#0
-TTTACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCTCTAAACAC
-+
-67777788888888888888888877176555443222100/0.,--,+,*++**)))())'(('''"&%""##"#
- at 30BB2AAXX080903:3:46:1295:318#0
-TACCACTCCAGCCTAGCCCCTACCCCCCAATTAGGAGGGCACTGGCCCCCAACAGGCATCAGATCGGCAGACTCCA
-+
-677777888888888888888888777765654432221/0/...--,,,)++**)*()(('(&#&'$""#%"###
- at 30BB2AAXX080903:3:50:619:924#0
-AGTGGGACTTCTAGGGGATTTAGCGGGGTGATGCCTGTTGGGGGCCAGTGCGCTCCTAATTGGGGGGGCGTCGNCT
-+
-67777788883888888,8$88887777+565432220100./.-+,,*-+&+*)#'#()(((((('"$####"#"
- at 30BB2AAXX080903:3:34:963:312#0
-TGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTGATGCCTGTTGGGGGCCAGTGCCCTCCTNCCACCANN
-+
-67777788888888888888888877776555443222/00//..---,,+++**)**))()(((''"$#"$$#""
- at 30BB2AAXX080903:3:52:1487:1287#0
-TGATGCGAGTAATACGGATGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTGATGCCTGTTAGCCGCTAC
-+
-67777788888888888888/88877776555443222100//..---,,+,+***))*))&(('('%"#"&##$$
- at 30BB2AAXX080903:3:4:1737:1157#0
-AGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTTTAGGAGTGGGACTTCAGATCGGAAGAGCNATCTNCN
-+
-677077888888888888888888777765554432,2/10-/..-+--,+**)))*))())'((('""""$""$"
- at 30BB2AAXX080903:3:45:1033:1736#0
-GGTGAGCTCAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTGTAGGAGTGGGAGATCGGCAAGGCGGGG
-+
-677777888888.8888888888877776555443222100/...'--',%+++*)*))))))(''#'#$$"#$""
- at 30BB2AAXX080903:3:44:1632:1837#0
-CCATAGAAGTCCCACTCCTAAACACATCCGTATTACTCGCATCAGGAGTATAAATCACCTGCGCTCACCCACGAGC
-+
-67177788888888888888888877756555443.2211-//-.--+,,+))+*'))'))'(''%'"%"%$%"##
- at 30BB2AAXX080903:3:46:884:1759#0
-TTAGACTATGGTGAGCTCAGGTGATTGATACTCCTGATGCGAGTAATACGGGTGTGTTTTGGAGTGTGCAGTCGGG
-+
-67777788888888888888818877776505,43222110//./,--,-+)+*)*%))%)(%(%(&'#####"""
- at 30BB2AAXX080903:3:38:408:2008#0
-ATTAGACTATGGTGAGCTCAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTTTAGGGGTGCTCTCAACA
-+
-6777778888888888488888887777655544-22/20.//.-+)-+*++(****((*'((#(#'%#%"$"#$#
- at 30BB2AAXX080903:3:59:1384:710#0
-ATTAGACTATGGTGAGCTCAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTTTAGAGATCGACAACNGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((((('&""$##""#
- at 30BB2AAXX080903:3:2:1770:77#0
-TCCCACTCCTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACAGATCGGAANACACAAC
-+
-6777778888888888888.8888777755454130221/0/-/..(-)%++**&*')((((%%''&""#%%&%#$
- at 30BB2AAXX080903:3:2:485:615#0
-CCAACTCCTAAACACATCCGTAGTACTCGCATCAGGAGTATCAATCACCTGAGCTCACAGAGCGGAATNCGCCCAT
-+
-67.777888888888888&888&877716/65,43222/000/..--,&,,+++**(*)))((''''$"#"##$##
- at 30BB2AAXX080903:3:3:739:217#0
-GTTGTTTTCTATTAGACTGTGGTGAGCTCAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGCNTTACNGN
-+
-6777778888888888.8$8888877/75555.432/200/-/+---,,,*+++*)**)'))(((&'""""#%"$"
- at 30BB2AAXX080903:3:57:80:906#0
-CATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACAATA
-+
-677777888/888888888888887777655524222200./--,-,,-,*,*)**))(((((((''&&%%#""#"
- at 30BB2AAXX080903:3:38:1024:1853#0
-AAGCAGTGCTTGAATTATTTGGTTTCGGTTGTTTTCTATTAGACTATGGTGAGCTCAGGTGATTGATACTCGTCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*)((('('&&%%&&%##
- at 30BB2AAXX080903:3:42:930:296#0
-TACAATTTTACTGGGTCTCTATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGAC
-+
-67777788888888888888888877776555443222100//..---,,$++***)))*)))(''''&&&&%$$%
- at 30BB2AAXX080903:3:48:1728:633#0
-TCTATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTAGATCGGAAGAGCGGACCAGCT
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()((('&""$#""#"
- at 30BB2AAXX080903:3:8:1271:374#0
-AAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGAGACTCGAAGTACTCTGAGGCTTGTAGGNACACACNN
-+
-67777788888888888888888877476555243222110//..---,,,(+)**)**'(((''&&""#$&$%""
- at 30BB2AAXX080903:3:45:449:1597#0
-AAAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGAGACTCGAAGTACTCTGAGGCTTGTAGGGGGGGATA
-+
-6777778888888888888888887777655544322210///..--+-,+,+***))))(()('&'$"$%"#"#$
- at 30BB2AAXX080903:3:54:1611:1959#0
-AAAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGAGACTCGAAGTACTCTGAGGCTTGTACACACATCCG
-+
-67777788888888888888888877776555443222100//..---,,++****)*))(((('(''&%$$"##"
- at 30BB2AAXX080903:3:47:325:794#0
-CCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACANTTTACGT
-+
-67777788888888888888888877776555443222101//...--,,+++*+)***))))('('%"#"###"#
- at 30BB2AAXX080903:3:52:326:91#0
-CTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATATCTTGTAG
-+
-677777888888888888888888777765554832021.0//..-,,,,,**++(*))(()&(('&"$"&%$$"#
- at 30BB2AAXX080903:3:43:657:803#0
-TCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGC
-+
-67777788888888888888888877776555443222000/...--,,,,,++*)*)*))(((((''&&&&%##$
- at 30BB2AAXX080903:3:34:779:1470#0
-ACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTNATGACCNN
-+
-67777788888888888888888877$765554412220000/...--,-+,+***))*)()((('&""#"##$""
- at 30BB2AAXX080903:3:39:453:1648#0
-ACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTCTCGCTCCA
-+
-677770888888888888/8+888787743.123+322&/0-*..-,,+,*()+'*(&)(''(((('$&"######
- at 30BB2AAXX080903:3:51:407:778#0
-CAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCCACAGTAGATCTGCGCTCGT
-+
-677772888888888888888888777$6555432/1/10/...-.,,,,+***'*%))(''(('&&"%"""""""
- at 30BB2AAXX080903:3:56:391:1579#0
-CCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCNCTAGCANA
-+
-177127388888888888888882374193451002).1//-/--,-,,,+,+)))))))((((''&"%###$#"#
- at 30BB2AAXX080903:3:8:457:1851#0
-CCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCNCGCGCANN
-+
-677777888888888888888888777765554432021/0..//---,,+++**)(*()()(((('"%"%"#$""
- at 30BB2AAXX080903:3:52:1176:1251#0
-GAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGAGACTCGAAGTACTCTTAG
-+
-67777788888888888888888877776555443222100//.----,,+++***))))')(((('$""#"#"#%
- at 30BB2AAXX080903:3:44:1042:160#0
-CGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCGGGAATGGTGAAGGGGGACTCTGACGGCAT
-+
-67777788888.888888838888777.6555'43+12100...%--,%,)'%+**())))'(('#'"$"#"$#"#
- at 30BB2AAXX080903:3:40:1252:203#0
-CCGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGAGACTCGAAGGGCC
-+
-677777888888888888888888777765554432221/0//..---,+++***()(*))(((((#&$""%""##
- at 30BB2AAXX080903:3:59:1515:652#0
-TTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACACCCNTA
-+
-67777788888888888888888877776555443222100//..---,,+*+***)*)*)((((%&$$%%%%"##
- at 30BB2AAXX080903:3:35:1174:2014#0
-GAAGTCCGTGGAAGCCTGTGGCTACAAAAAATGGTGAGCCGGAGAGGCCGTCGAGATTGGGAGAGCGNCACTCCAN
-+
-67777788888888808888888/+.77655/,450.0$1+$.--'*')+&$(((##'()##&#(&'"%"$"##""
- at 30BB2AAXX080903:3:40:1267:862#0
-GTGAAGTCCGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCGGAAATGGTGAAGGGGGCTCTA
-+
-6-77.7-888888888888888887747654544332210,0/..-,,,+,+****()())((((('&#"""##"#
- at 30BB2AAXX080903:3:46:594:1507#0
-GTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTTCACGGTCTAGGTGGG
-+
-677777888888888888887388777765554/22/.*////..-,-,+&')+))(&''%&#&&&%"""#""#"#
- at 30BB2AAXX080903:3:43:260:418#0
-CTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCAT
-+
-67777788888888888888888877776555443221100//...--,-+++*+)**)*))(((''"%$%&"##%
- at 30BB2AAXX080903:3:2:1629:1363#0
-TCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCNCGCACTT
-+
-677777888888888888888888774765554432021000/.----+,,++***)()''')'(%''"&&$$#$#
- at 30BB2AAXX080903:3:41:422:1287#0
-AATGACGTGAAGTCCGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCAGATCGGNAGCGCCAT
-+
-67777788888888888888888877776555343222100//..-,,,,,+++*()*()))(('''"$#$""#""
- at 30BB2AAXX080903:3:54:44:719#0
-CTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACCTCATTATT
-+
-677777888888888888888888777765534532221000/.----,,,+***)())('('((''""#"%$##$
- at 30BB2AAXX080903:3:8:1119:1093#0
-TGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGNCCCGCGNN
-+
-67777788888888888888888877776555443.22000-,/..-,+,+++**)))#()((('''"%$%"#$""
- at 30BB2AAXX080903:3:50:978:276#0
-TTTCCGACGGCATCGACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTGCACGGCATTATCCGACCACT
-+
-677777888888%88888888888237+65.544322210/./-+,"-+,++)*&#*))'#((##%%$$"#%#"#"
- at 30BB2AAXX080903:3:40:1659:1272#0
-GTTTAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTACAAAAAAAGTTGAAGAACGGAAGGCGTGTGTAC
-+
-6777778888888888888888887777654544322210/..,,---,,+*+)()***&#))''&%%$"##"""#
- at 30BB2AAXX080903:3:45:187:716#0
-GTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTACAAAAAATGTTGAGCCGTAGATGCCGTCGGGCA
-+
-67777788888888888888888877776555443222100//..---,,++***+))))()(((''"&""%#%"#
- at 30BB2AAXX080903:3:56:1702:951#0
-AGGAAAGTTGAGCCAATAATGACGTGAAGAACGTGGGAGACAGTGGGGATAAAAAAAAAAAAGGAAGCAACCCAAC
-+
-67777788888888888888888877776)$-4332%01%)#/-.-,,+%++++**)*(&#''####"&&%%$%$$
- at 30BB2AAXX080903:3:1:1553:665#0
-CATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTAGCTCAACTTNCCNCTCT
-+
-67777788888888888888888877776/554/32.11&0-..++,*&,$$*)**)()()(('(#&&"%""""#"
- at 30BB2AAXX080903:3:47:1295:416#0
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCTCGCATA
-+
-67777788888888888888888877776555443221100//.,---,,,,++*****)))(((''&$"#"$##"
- at 30BB2AAXX080903:3:8:1345:1001#0
-TACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCNCACACANN
-+
-6777778888888888888888887777655544302200///.--,-,++++**))**)(((((%("%"%$$#""
- at 30BB2AAXX080903:3:60:1444:740#0
-AAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGATAAAAAAACACAAACNN
-+
-6777778888288888888*8888777765554432/2000//..,---,++++*)))#((#&((''&&%%%$%""
- at 30BB2AAXX080903:3:35:952:944#0
-GAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGCGGAAGACTGAGACCGGAAGANCTCTCCGN
-+
-6377778884888888888888857777655544-3221000+.,-,-,(,'%+%*(*(&&)(''('"%"##"##"
- at 30BB2AAXX080903:3:8:1002:755#0
-GAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTACAAAANATGTCANN
-+
-67777788888888888888888877776555443222120/.-.---,-+++***))))))((((&"%%%%%#""
- at 30BB2AAXX080903:3:40:1518:271#0
-AACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCCGATAC
-+
-67777788888888888888888877776555443222000//..---,,+++*+*)*)()))((('&&#"""##"
- at 30BB2AAXX080903:3:41:433:1987#0
-GATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTAGATCGGACGACACCT
-+
-67777788888888888888888877776555443221100//..-,,,,++++*((*)))))('(''"%"""##"
- at 30BB2AAXX080903:3:59:1174:1407#0
-CATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTGCCACCA
-+
-6777778888888888888-8888777765454332.2000//-.-,,-++*++**))))('(((&%&&%#$####
- at 30BB2AAXX080903:3:38:1634:1439#0
-GCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTCNCAAAACN
-+
-67777788888888888888888877776555443222100//..---,,+++**+*))())(((('""#&$###"
- at 30BB2AAXX080903:3:4:836:199#0
-TTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGACTGTGCNCTCTNCN
-+
-6777778888888888.818,8287673655544/212000//.--+--,++*)*)**()(#(((%'$"%"#""$"
- at 30BB2AAXX080903:3:51:943:1987#0
-AGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAAGATCGTAGAGCGC
-+
-67777788888888888888888877776555443211120//..----,++++*()*))()((((#&"""""#"#
- at 30BB2AAXX080903:3:55:32:799#0
-AGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTAGCA
-+
-67777788888888888888888877776555443222100//..----,,*++**))))((((((&%""#"""$#
- at 30BB2AAXX080903:3:40:1529:293#0
-TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATATGTCGGCGT
-+
-67777788888888888888888877776645543%32100/..,-,-,,+*)**))*(()'(('#'"$%%&$"""
- at 30BB2AAXX080903:3:45:793:28#0
-TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCACCCA
-+
-67777788888888888888888877776352443222100/-..--,,-,++***)*)))'((((('$"$"##"#
- at 30BB2AAXX080903:3:41:838:941#0
-TTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGGAAGCCTGTGGCTCA
-+
-6777778888888888888888886777655544322200///...---,++++**)))())((('&'%%%&###"
- at 30BB2AAXX080903:3:54:484:1617#0
-CCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCAGATCGTCTGCTCC
-+
-2172778888288-8888580888771765533422311////,,-,,+-+++**(**%&)(()(''$$#""#"##
- at 30BB2AAXX080903:3:4:616:1553#0
-ACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCAACCNCTAGNCN
-+
-677777888888881888888818777;6555443000200....+-,+,+++**)*()()(((('%%"$$"""#"
- at 30BB2AAXX080903:3:51:1185:212#0
-GAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAGATCGGAACACTGCTTC
-+
-67777788888888888888888877775505443222100//...--,,+++***())))))(((&$"$"##"##
- at 30BB2AAXX080903:3:42:1255:1144#0
-AGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCCGTGCGACTA
-+
-67777788888888888888888877776755423222000//..--,-,,,+***)))'))'(''&&&%##""#"
- at 30BB2AAXX080903:3:49:709:1893#0
-CCACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACANACAC
-+
-67777788888888888888888877776555402222000/...---,,+**+**())))))((('&""""#$#"
- at 30BB2AAXX080903:3:45:641:807#0
-TGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGTGAAGTCGGGAG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''%&%$#"#""
- at 30BB2AAXX080903:3:8:718:1747#0
-CACGGACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCAGATCGGAAGAGNGCAGCANN
-+
-67777788888888888888888877773455443211110.+..--,,,++***)))))(('(('("&$$"$#""
- at 30BB2AAXX080903:3:52:1224:1300#0
-ACTTCACGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAAGATCGGAAGAGCGCGTCCAC
-+
-67777788888888888888888877776555443222100//..,--'-,++*****)())(((('%$#%$"#""
- at 30BB2AAXX080903:3:49:347:619#0
-TTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAATGACGGGGAGA
-+
-67777788888888888888888877776555443222100//.'---,,,++++*'))())))(('%$""""$#"
- at 30BB2AAXX080903:3:34:405:690#0
-GATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATNATTCACNN
-+
-67777788888888888888888877776555443222100//.----,,+++**))*))(((((('"#""%""""
- at 30BB2AAXX080903:3:58:810:184#0
-TGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCCAATAGTACNNC
-+
-67777788888888888888888877776555443222100/0-..-+,,+++***))())))(((''%%""$""#
- at 30BB2AAXX080903:3:34:974:1466#0
-CGTCATTATTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCNAACATANN
-+
-6777773888888888888888887777655544322210//0.--+--,++++*)))*)))(((''"""$###""
- at 30BB2AAXX080903:3:35:1459:897#0
-AAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGCNATTACTCN
-+
-(-7*7-+,,.338)88408..+361.1/4020/120,/1',',(,+"+&(*(%()#(')###''##'"$""$$#$"
- at 30BB2AAXX080903:3:40:1529:113#0
-CCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGTGCAATA
-+
-67777738888888888888888877776555443222100//..----,+,++**)*))))((&('&$#""""""
- at 30BB2AAXX080903:3:58:164:232#0
-CCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGACACNNC
-+
-67777788888888888888888877776555443222100//-.---,,+++***)*))#((('('&&$&%%""#
- at 30BB2AAXX080903:3:57:1380:300#0
-GCCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGTTGAGTCATAT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&$"%$%""#"
- at 30BB2AAXX080903:3:1:1182:1135#0
-TTGGCTCAACTTTCCTCACTATCTGCTTCATCCGCAAACTAGTATTTCACTTTACATCCAAACATCACNGCNTCGC
-+
-67777788888888+88888887877576556143'.2200*//.-,+,-+,+**+))))))(((&''"&&""#"#
- at 30BB2AAXX080903:3:43:1084:164#0
-TTCGAAGCCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATGAAGCAGATAGTGAGGAAAGGTGTG
-+
-6777778888888-88888888887777655544322210//...-,-,+++++*)))))()(((('&$"&"##""
- at 30BB2AAXX080903:3:54:307:1759#0
-CTTCGAAGCCAAAGTGATGTTTGGAGGTAAAGGGAAATATTAGTTGGCGGATGAAAGATCGGAAGAGCGGTCTCTC
-+
-6777778888888818888888887%77655534'222100//&.--,,,,++***)*)()((('('$"""""###
- at 30BB2AAXX080903:3:60:1396:1876#0
-AGTATCAGGCGGCGGCTTCGAAGCCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGCGGATCACANGANN
-+
-67777788888888888888888877416/5-4432201.0/..-.-,,,+++*+*)*))()#((&'$$#$""#""
- at 30BB2AAXX080903:3:43:187:112#0
-CTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATAGATG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)*)((('('$&$%"%#"#
- at 30BB2AAXX080903:3:46:868:942#0
-CTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGATCGGAAGACTCACTTC
-+
-67777788888888888888888877776555443222100//..---,,++****'*))(((('('$$"%"#""$
- at 30BB2AAXX080903:3:57:277:866#0
-ATGCCAGTATCAGGCGGCGGCTTCGAAGCCAAAGTGATGTTTGGATGTAAAGTGAAATATTAGTTGGGTGATTCAC
-+
-67777788888888888888888877776555441212100//...-,-,+++*)*)))**((((''"$&"""$##
- at 30BB2AAXX080903:3:56:1456:1323#0
-TCATCCGCCAACTAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACAGTGCACT
-+
-67777788888888888888888877776555443222100//..---,,++++*)*))))))(((&$$&""%##%
- at 30BB2AAXX080903:3:35:1043:356#0
-CATCCGCCAACTAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACNGTCACANN
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*)))((((''"%#$"$"""
- at 30BB2AAXX080903:3:42:793:757#0
-AGCCGCAAACTAATATTTCACTTTACATCCAAACAGCACTTTGGCTTCGAAGCCGCCGCCTGGTACGTCATCGGAA
-+
-607077888488888,8883088,7-7-5755443*.,.//0/,'.*++$+*%**&))#('(#(&##%%"$$##""
- at 30BB2AAXX080903:3:59:1361:1122#0
-TAATATTTCACTTTACATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTACATCAACA
-+
-67777788888888888888888877776555443222101/....--+,,,++*)*)*&())(('''"$"#####
- at 30BB2AAXX080903:3:48:1641:1538#0
-AGACCACATCTACAAAATGCCAGTATCAGGCGGCGGCTTCGAAGCCAAAGTGATGTTTGGATAGATCGGGACTTAT
-+
-677777888888888888888888777765554432121/01..-.-,+,*+)**)**))((()(&#"#""$""#"
- at 30BB2AAXX080903:3:50:1594:1823#0
-CAGACCACATCTACAAAATGCCAGTATCAGGCGGCGGCTTCGAAGCCAAAGTGATGTTTGGATGTAACGGGGCACT
-+
-67777788888888888888888877776555443222100//..,-,,,+*+****)*))()((''""#""$"#"
- at 30BB2AAXX080903:3:8:1234:1361#0
-ACAGAAATAGTCAGACCACATCTACAAAATGCCAGTATCAGGCGGCGGCTTCGAAGCCAAAGTGATGNTGAATANN
-+
-67777788888888888888888877776555443122100//..----,,+++*+*))())')(''"""#"""""
- at 30BB2AAXX080903:3:4:794:1162#0
-TACAGAAATAGTCAGACCACATCTACAAAATGCCAGTATCAGGCGGCGGCTTCGAAGCCAAAGTAGACNTGTCNTN
-+
-677777888888888888888888777765554432211/0//-.-,-,,*,++*)*))(()('(('"""$$#"""
- at 30BB2AAXX080903:3:1:1707:1412#0
-ATCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATNTCNTATC
-+
-6777778888888888888888887777655544321220///.,.--,,+++***)*))())((('&"#""$##"
- at 30BB2AAXX080903:3:35:926:995#0
-TCCAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATNTCTGTATN
-+
-67777788888888888888888877776555443222100///.---,,,+++*))))')(((((&"&&&#%$""
- at 30BB2AAXX080903:3:53:996:259#0
-CAAACATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACAGATCGGCTGGCCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(''''$""$"###
- at 30BB2AAXX080903:3:49:1153:1628#0
-ATCACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATTAGATCGGTCCACTAC
-+
-67777788888888888888888877776555443222100//..---),++(+*))*))))()(''%"#"#$"##
- at 30BB2AAXX080903:3:49:1071:1109#0
-TTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATTTCTGTAGATCGGACTNNCTC
-+
-67777788888888888888888877776555443222101//..--,,,+,+***)*)))))((('$"#"""""#
- at 30BB2AAXX080903:3:50:1631:1000#0
-CAATAGATGGAGACATACAGAAATAGTCAGACCACATCTACAAAATGCCAGTATCAGGCGGCGGCTTCGATCCTCA
-+
-67777788888888888888888877776555443222100//..--,,,+++*+*))))))(((''$$""$#"#"
- at 30BB2AAXX080903:3:3:938:1008#0
-CGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATTTCTGTATGTCTCCATCTATTNCTTCNTA
-+
-677777888888888888888888777765554432220/0//..---,,+++****))))))((''%"#&##"""
- at 30BB2AAXX080903:3:3:1460:740#0
-GCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATTTCTGTATGTCTCCATCTATTGATTNTGGCNTT
-+
-67777788888888888888888877776555443222100///.---,++++)**))*))((((&'""""#$"#"
- at 30BB2AAXX080903:3:47:549:1417#0
-CGCCGCCTGATACTGGCATTTTGTAGATGTGGTCTGACTATTTCTGTATGTCTCCATCTATTGAGATCTGGANTGC
-+
-67777788888888888888888877776555443222100//..---,,+,+**))*)))((('('%"%"""#""
- at 30BB2AAXX080903:3:59:288:1660#0
-AGAGTAAGACCCTCATCAATAGATGGAGACATACAGAAATAGTCAGACCACATCTACAAAATGCCAGTATCCANNT
-+
-67777788888888888888888877776555443222100//-.-.-+-+++****))))))('(&$%%#$#"""
- at 30BB2AAXX080903:3:46:1443:1818#0
-AAAAGAGTAAGACCCTCATCAATAGATGGAGACATACAGAAATAGTCAGACAACATCTACAAAATGCCGTGCCTCA
-+
-67777788888888888888888877776555543222100//...,-,,,&++**)*)))))((('"#"#"#"#"
- at 30BB2AAXX080903:3:38:1347:441#0
-AGTACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCAGATCGGCCATATA
-+
-67777788888888888888888877476555443222100.//.--,,*+++*+*))))))(((''"'""#"""#
- at 30BB2AAXX080903:3:54:1587:1230#0
-ATTATTAGTAGTAAGGCTAGGAGGGTGTTGATTATTAAAATTAAGGCGAAGTTTATTACTCTTTTTTGATTGTTGA
-+
-67777788888888888888888877776555443222100//..---,,+++***))())((('''""""%##""
- at 30BB2AAXX080903:3:2:822:1340#0
-AGGGTCGAAGCCGCACTCGTAAGGGGTGGATTTTTCTATGTAGCCGTTGAGTTGTGGTAGGCAGATCGNCGACATC
-+
-6777778888888888888882887727645544322210///.,--+,)+*++**)()*&#(((&#$"#$"#%"%
- at 30BB2AAXX080903:3:41:860:1004#0
-TGACTACCACAACTCAACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCCCCA
-+
-67777788888888888888888877776555443021100//-----,,+,+***(*)((('((''"'"%%#$$%
- at 30BB2AAXX080903:3:46:933:1526#0
-CTACCACAACTCAACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCGCGACGCC
-+
-67777788888888888888888877776555443221000//./---,,,++***))))()(('(#'"%"%$"##
- at 30BB2AAXX080903:3:54:542:1730#0
-ACCACAACTCAACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCTCGCCTC
-+
-67777788888888888828888877776555443222100//-.-----+*+*'+**)'()((('#%$"&%##"%
- at 30BB2AAXX080903:3:8:1533:439#0
-ACTCAACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCCCGCNTAGCACNN
-+
-67777788888888888888888277775555443211100/'/-$-*&+*&))'*'#)'((''(&'"#%#%%#""
- at 30BB2AAXX080903:3:34:29:81#0
-CCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCCCGCGTCCCTTTCTCCATAAAGATCGGAAGANCCACACNN
-+
-67777788888888888888888877776555443222200//.--.--,++++')**)()))('('"$%#%$%""
- at 30BB2AAXX080903:3:59:433:530#0
-CCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACACNA
-+
-6777778888888%888888888877450553443221100/.--,,-+-,++****#))()(((&'&&$####""
- at 30BB2AAXX080903:3:43:529:1054#0
-TTAGTAGCTATTACCTTCTTATTATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACAGATCGGAAGAGAGCATA
-+
-6777778888888888888888887777652544(2221/../---,,,,+*+***)*(((('((&''"$""""""
- at 30BB2AAXX080903:3:60:1165:229#0
-TAACTATTAGTGGCAGGTTAGTTGTTTGTAGGGCTCATGGTAGGGGGAAAAGGAGGGCAATTTCTAGACGCCTCNN
-+
-67777788888888888(8888887777655541320210&//..-,-,,+++***)'))(()'((''%"$###""
- at 30BB2AAXX080903:3:33:1221:765#0
-ATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGCTCATGGGAGGGGGAAAAGGAGGGCAATTTCTANACACGANN
-+
-677777888888888888,888287777355544/01,000*/..--,,,+++*(*))&()&))'('""$##""""
- at 30BB2AAXX080903:3:54:249:1316#0
-TTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATCTCTTTCT
-+
-67777788888888888888888877776555443222100//./--+,-,++**+*)))))))(('&%"%"%$#$
- at 30BB2AAXX080903:3:54:1359:999#0
-GAGGGATGACATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGGTCATGGTAGGGGGAAAAAGGGGGTCTTTACG
-+
-6777778888888888888888887777*545443.22)0.//.%-,,-*+)+***)))))(((%('&&#""###"
- at 30BB2AAXX080903:3:60:967:1358#0
-AAGAGGGATGACATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGCTCATGGTAGAGATCGGAAGAGTGCAATNN
-+
-677777888888888888888888777765+534*22/100/*..-&-,,+++)****)(#)(%&('""#&#$"""
- at 30BB2AAXX080903:3:44:518:1911#0
-TAAGAGGGATGACATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGGTCATGGTAGGGGTAAAAGGGAGGGTGTT
-+
-6777778888888888888888887777655.423222.001/,.--$+++,**)())))'&((((''"#&"""""
- at 30BB2AAXX080903:3:35:163:931#0
-AATAAGAGGGATGACATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGCTAATGGGAGGGGGGATGNCATTGCCN
-+
-67777788888888888888888877776555413222100//..--,,++'****&*)))('(((&"$""""##"
- at 30BB2AAXX080903:3:54:178:178#0
-TAATAAGAGGGATGACATAACTATTAGTGGCAGGGTAGTTGTTTGTAGGGCTCAAGATCGGAAGAGCGCGTGCTCG
-+
-67777785888888888888888877776555442212&00'/.,++-,,()+')))#(')#((&('&#"#$""$"
- at 30BB2AAXX080903:3:50:73:387#0
-TTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTACTACAATA
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))(((('&$$"""""""
- at 30BB2AAXX080903:3:50:1447:99#0
-CTACCATGAGCCCTACAAACAACTAACCTGCCACTAATAGTTATGTCATCCCTCTAGATCGGAAGAGCTTCGAACA
-+
-6777778888888888888888887777655544322210-//..---,,+++***))))))(('('$""""""$"
- at 30BB2AAXX080903:3:46:1554:655#0
-TACCATGAGCCCTACAAACAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATACTCAGCAC
-+
-67777788888888888888888877776555423212100//.,.--,,+++***)*)))()((''"$$$"####
- at 30BB2AAXX080903:3:42:1713:320#0
-CTTAGGGCTAGGATGATGATTAATAAGAGGGATGACATAACTATTAGTGGCAGGGTAGGTGTTTGTAGTGGCGTGT
-+
-67777788888888888888888877776555443222100//..--+,,+++**))*%()&)(('%&$%%"$##"
- at 30BB2AAXX080903:3:58:1397:476#0
-CAGACTTAGGGCTAGGATGATGATTAATAAGAGGGATGACATAACTATTAGTGGCAGGGTAGGTGTTTTGACTACA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))()&('(&'$$$%"%%$
- at 30BB2AAXX080903:3:8:1224:1129#0
-TTGTAGTCACTCATAGGCCAGACTTAGGGCTAGGATGATGATTAATAAGAGGGATGACATAACTATTNCGAAAANN
-+
-6777778888188888888883884777653244102-00.//.,--,-+,,+)****))()(((('"$##""#""
- at 30BB2AAXX080903:3:2:1736:479#0
-TGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGCNAAATTAC
-+
-67777788888888888888888877776555443222100//...-)-,,+****)())()()(%'%"""$""$"
- at 30BB2AAXX080903:3:33:1106:808#0
-GTCTAATCCTTTTTGTAGTCACTCCTAGGCCAGACTTAGGGCTAGGATGATGATTAATAAGAGGAGANCTCTACNN
-+
-67777788888888888888888877776555443221100.0..--,,-+++)**)))))))((('"$%""#%""
- at 30BB2AAXX080903:3:50:1426:1840#0
-ATTCGGTTCAGTCTAATCCTTTTTGTAGTCACTCATAGGCCAGACTTAGGGCTAGGATGATGATTAACATGTTAGC
-+
-67777788888888888188888877776555443022100//.--.,--+*+*+*#))()(((#'#$$""""##"
- at 30BB2AAXX080903:3:37:787:879#0
-CCAATTCGGTTCAGTCTAATCCTTTTTGTAGTCACTCATAGGCCAGACTTAGGGCTAGGATGATGATGCATATATN
-+
-67777788888888888888888877776555443222100//.-----,+++*****)))((('('"$&%&"#""
- at 30BB2AAXX080903:3:45:75:505#0
-TAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAACCGAATTGGGTCCAAG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((((&'&"""#""#
- at 30BB2AAXX080903:3:52:591:86#0
-ATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACAGATCGGAAGAGCGGTCTCGCAGGA
-+
-67777788888888888888888877776555443222100//..--,,,+++***))))))(('(#$"$&$$""#
- at 30BB2AAXX080903:3:56:1046:962#0
-CATTCGTTTTGTTTAAACTATATACCAATTCGGTTCAGTCTAATCCTTTTTGTAGTCACTAGATCGGATGTGCATC
-+
-67777788888888888888888877776555443222100//.----,,+++***)))))()((('%$%""$##"
- at 30BB2AAXX080903:3:42:249:418#0
-TGAGGGGCATTTGGTAAATATGATTATCATAATTTAATGAGTCGAAATCATTCGTTTTGTTTAAGATCGGTAGACT
-+
-67777788888888888888888877776555443222100//.-.--,,+++***)*))))()(('&%%"$""""
- at 30BB2AAXX080903:3:48:1465:1762#0
-ATGAGGGGCATTTGGTAAATATGATTATCATAATTTAATGAGTCGAAATCATTCGTTTAGATCGGAAGGCGATCTT
-+
-67777788888888888888888877776555443222100//..---,-++++**)))))((('''""""""#""
- at 30BB2AAXX080903:3:53:996:1208#0
-AATGAGGGGCATTTGGTAAATATGATTATCATAATTTAATGAGTCGAAATCATTCGTTTTGTTTAAAAGATCGTTC
-+
-67777788888888888888888877776.55423222100///--+++,+,**)*)))*)(((((%%""&&%""#
- at 30BB2AAXX080903:3:37:1001:196#0
-TATTCCTAGAAGTGAGATGGTAAATGCTAGTATAATATTTATGTAAATGAGGGGCATTTGGTAAATATTCTGCTAN
-+
-67777788888888888888888877776555443222100//..-,-,-+++**+)))))((((('"&$"%%$#"
- at 30BB2AAXX080903:3:2:1772:2031#0
-TGAGGTGTGAGCGATATACTAGTATTCCTAGAAGTGAGATGGTAAATGCTAGTATAATATTTATGTAANATANCAA
-+
-6777778888888888888888187777645554/2220/0/.------,+++*****))))()((''"$"%"$"#
- at 30BB2AAXX080903:3:8:613:423#0
-GGAGGATATGAGGTGTGAGCGATATACTAGTATTCCTAGAAGTGAGATGGTAAATGCTAGAGATCGGNGCTCCANN
-+
-677777888888888888888888777765554432221///...---,-,++***)*)))))((('""$"#$"""
- at 30BB2AAXX080903:3:41:1343:1436#0
-AAATATTATACTAGCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCAGATCGGCAC
-+
-67777788888888888888888877776555443222101//...--,,+,+++*)()(((((#%'"&&&%#"##
- at 30BB2AAXX080903:3:3:681:1551#0
-TAGGCATAGTAGGGAGGATATGAGGTGTGAGCGATATACTAGTATTCCTAGAAGTGAGATGGTAAATCNCAGANAA
-+
-2777778888888888888888887,7765554632220000..-,,-,,+)**)*)*))))((('&""##%#""$
- at 30BB2AAXX080903:3:49:1630:1869#0
-AGTATTATTCCTTCTAGGCATAGTAGGGAGGATATGAGGTGTGAGCGATATACTAGTATTCCTAGAAGTGGCTGTG
-+
-677777888888888888888888777765554432221/0//..,-,,,++++****))(((('''&"""#"""#
- at 30BB2AAXX080903:3:3:783:684#0
-GAACAGCGACAGTATTATTCCTTCTAGGCATAGTAGGGAGGATATGAGGTGTGAGCGATATACTAGTANCTCGNTC
-+
-67777788888888888888888877776552442222100./-.-.-,++++***)**)))(((('%"#"%#""#
- at 30BB2AAXX080903:3:8:1099:958#0
-CTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATNGTAATCNN
-+
-677777888888888888888888777765554433201/0//..--,,,-++***)**)()()(('"$#"#"$""
- at 30BB2AAXX080903:3:34:22:508#0
-GAATACTAGTATATCGCTCACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTNTCCTCANN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((('(&""#$#$$""
- at 30BB2AAXX080903:3:52:1329:1356#0
-AGTAGCTATAATGAACAGCGATAGTATTATTCCTTCTAGGCATAGTAGGGAGGATATGAGAGATCGGCAGAGCTTG
-+
-67777788888888888888888877776555443222100//..-.-,,++++**)))))()('('$%$"%#""#
- at 30BB2AAXX080903:3:41:1046:924#0
-GTATATCGCTCACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTAGATCGGAGGCCTCA
-+
-67777788888888888888888877776555443222100//.----,,+,+***)**)))((('($&"$"""""
- at 30BB2AAXX080903:3:53:491:75#0
-GAGAGTAGCTATAATGAACAGCGATAGTATTATTCCTTCTAGGCATAGTAGGGAAGATCGGAAGAGCGGTACACTC
-+
-6777778888.88888888888887777655544322210,//.,-+-,-+,+*+***)))'((((%""""%"$##
- at 30BB2AAXX080903:3:39:21:1904#0
-TATCGCTCACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCTCTGGTATATCGGATGTCCATCC
-+
-677777888888$&&$+/,,818,9'/14/55&40'2/01/....,,-&++'#$'('')(%((##''$#"##""##
- at 30BB2AAXX080903:3:33:904:739#0
-CACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCCNCTACTANN
-+
-67777(88888888888888888877776555443222100//..---,,+++***)*))*(((((#"&&##""""
- at 30BB2AAXX080903:3:46:475:51#0
-CACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCGTGCCCGC
-+
-67777788888888888888888877776555443222100//./.---,*++***))())))'(('"""""##"#
- at 30BB2AAXX080903:3:56:45:786#0
-CACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTNANAACCGA
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))(()(((""""$##""
- at 30BB2AAXX080903:3:43:1719:1554#0
-ACACCTCATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCACAACCCCC
-+
-67777788848888888888888877776555443222100//.--+-,,+++*****)()((('(''$%"$%"##
- at 30BB2AAXX080903:3:52:1657:555#0
-ATATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACGCACAAAACAA
-+
-67777788888888888888888877776555443222100//..---,,+++**))))))((((#'&&%""%###
- at 30BB2AAXX080903:3:52:198:488#0
-ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAGTCCCCAC
-+
-67777788888888888888888877776555443222100//..----,++++*+**))')(((''"$"$"%%##
- at 30BB2AAXX080903:3:52:199:489#0
-ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAGCACCCAC
-+
-,7777788888888888888888877776555443222100//..-.--,++++*+**))')(((''"$$"#%%$"
- at 30BB2AAXX080903:3:54:1237:527#0
-TCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAACACCTCCTCCC
-+
-67777788888888888888888877776555443202100//..-.-,,++++*+**)))))((''&%#$&$$#$
- at 30BB2AAXX080903:3:36:826:1713#0
-CCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAACAACACCACAGN
-+
-67777788888888888888888877776555443222100//..-.-,,,++***)))))))((('&$$$"$"""
- at 30BB2AAXX080903:3:43:427:76#0
-CTACTATGCCTAGAAGGAATAAGACTATCGCTGTTCATTATAGCTACTCTCAGAACCCTCAACACCCGCTCCCTCT
-+
-67777788888888888888888877776555463.01100//.----,,()*+*')*))')((('''%"#%$###
- at 30BB2AAXX080903:3:2:42:1347#0
-CTAAGAGGGAGTGGGTGTTGAGGGTTATGAGAGTAGCTATAATGAACAGCGATAGTATTATTCCTTCANTGGNNAA
-+
-6777778888888888888888882747655944322210.//..-+),,+*+**))))(()'(((%%""#"""""
- at 30BB2AAXX080903:3:44:1669:1200#0
-GAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATTTTG
-+
-67777788888888888888888877776555443202100////-.-,-+++****))))((((('&%%$%#$##
- at 30BB2AAXX080903:3:59:600:925#0
-GCACAATATTGGCTAAGAGGGAGTGGGGGTTGAGGGTTATGAGAGTAGCTATAATGAGATCGGAAGAGCGCCTCCC
-+
-677777888888888888888488777-6555443222110//..-----,,+****))('))(('''"%$#"###
- at 30BB2AAXX080903:3:58:1284:384#0
-AGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGGGTGGTGAGGGGTATGAGAGGAGGTATAACACA
-+
-67777788888888888888888877776555443222100./..--$,,*++**+*))()&(&((%"#%$"####
- at 30BB2AAXX080903:3:40:1071:1151#0
-TATAGCTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCC
-+
-67777788888888888888888877776555443220100///.---,-++***))))())()'('"%&&%%$$"
- at 30BB2AAXX080903:3:37:139:790#0
-CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTCGCGGAGCN
-+
-677777888888888888888888777765554432221/0//..---,,,++***))))))((((&%"%""$"#"
- at 30BB2AAXX080903:3:47:215:981#0
-CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATAGATCGGAAGATCGGCGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('&"#$""##"
- at 30BB2AAXX080903:3:56:208:1219#0
-CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATAGATCGGAAGANCCCACT
-+
-67777788888888888888888877776555443222110//..---,,,,+***)*))))()(('%&"""#"#"
- at 30BB2AAXX080903:3:50:565:1341#0
-CAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGGGTGTTGAGAGAGCCGTCGACTC
-+
-67777788888888888888888876776545443222100//-.,--,,+'+**))')('('(''%"##$"##"#
- at 30BB2AAXX080903:3:59:409:533#0
-GCAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGGGTGTTGGGGAGATCGTATNNA
-+
-67777788888888888888888877776552423222100//-.-,-,,++#***()#))&)('(&"&%""#""#
- at 30BB2AAXX080903:3:59:593:1035#0
-TTCGCAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGGGGGTTGAGGGTGACCTCA
-+
-6777778888888888888888887777655544+202100//....,,++++'*')))))%'(%(&""&$$####
- at 30BB2AAXX080903:3:38:292:475#0
-TCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCTCGCGCATC
-+
-67777788888888888888888877776555443222100//.-----,,+++**))*)))()(('"#"%#"""#
- at 30BB2AAXX080903:3:50:1480:1291#0
-TGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGATCGGAAGAGCGGCTGACCCGG
-+
-67777788888888888888188877776555443222100//..--,-,,,+**)(()(()(('''%""""#""#
- at 30BB2AAXX080903:3:51:530:701#0
-ACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCAGATCGGACTATGCGCG
-+
-67777788888888888888888877776555443222110//..---,,+++**+)))*)()('''"""""#"""
- at 30BB2AAXX080903:3:55:1247:1936#0
-CCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGATGTGTACGCT
-+
-/77777888888888838888888+777655544-,21.00-/-.,+--,,*(***))*'())((#%'%"###"$"
- at 30BB2AAXX080903:3:34:729:1884#0
-CACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGGNTCACACNN
-+
-677777-8888888888888/488771765553430.0000/-/--,,,+,,+'*)))')))#)#(&"""$$#$""
- at 30BB2AAXX080903:3:8:1322:444#0
-CTCAACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGAGATCGGAANATCTGCNN
-+
-6777778888888888888888887777655544222211/./-,,-,-,++++*)'*))(('((&'"##%$""""
- at 30BB2AAXX080903:3:52:1536:652#0
-CCACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAGGCACAATATTGGCTAAGAGGGAGTGCACATCTAC
-+
-67777788888888888888888877776555443212101//...)-,,-+)*****)())(%''&'$%$"$"""
- at 30BB2AAXX080903:3:36:1659:1279#0
-AACACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGACCTGANNN
-+
-6777778888888888888888887777655344322210///..----,++++***))()'((#%%""%#"""""
- at 30BB2AAXX080903:3:34:764:648#0
-CACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGNCTTCTCNN
-+
-67777788888888888888888877776555443222100//..---,,+,++**)))))((('(&"""#%"#""
- at 30BB2AAXX080903:3:44:1511:1915#0
-CCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGGGGGGTCTGCC
-+
-677777888888888.88888888767765554432211000,..--++,++++'*)))())&)(#''$"""""""
- at 30BB2AAXX080903:3:50:1036:275#0
-CCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACGAGTCGTTGCCGCCTGCGAAACAGCGGGGACGCTGTGT
-+
-6.7.7788883-88888808'8087/-7.-41812220&0.+/#-,-&,$$+#**(#)#(''#((#&"""#"""""
- at 30BB2AAXX080903:3:43:115:2011#0
-TAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAGAGATCGGAAGAGCGCTGTGCAAC
-+
-67777788888888888/88,88/7877655912.1-.+0..-.-+,+'++())))%&(('('%(%'%#"""#"#$
- at 30BB2AAXX080903:3:51:49:557#0
-AGTAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAGGCAAGATCGGGACCCGCTGGC
-+
-67777788888888888888888777770555433',.1.,/+.-*+,+,*'#)**(&)('#%&'#&$"#"""""#
- at 30BB2AAXX080903:3:55:1444:1728#0
-AGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCGCA
-+
-67777788888888888888888877776555443222000//.---,-,+++)+*)$(('(#%(&'&#"&##"##
- at 30BB2AAXX080903:3:41:882:137#0
-CAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCCGCGAAGCAGCGGTGGGGCTAGGCCTCGCCGTGTCCACA
-+
-6777778888888888888888837717655542322,100*,.-,-+,,&,)+#(&)#%#)'#%#%%"%&##""#
- at 30BB2AAXX080903:3:40:780:1829#0
-GGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCAATAAGCGCACNT
-+
-67777788888888888888888877776355433011/0,-/-+-,+*++,+$*')()(')#''&#$&#"#"#""
- at 30BB2AAXX080903:3:54:437:254#0
-TGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAAC
-+
-67777788888888888888888877776555443222100//.-.--,,*+++**(()(')(((''"&$&%%#"$
- at 30BB2AAXX080903:3:50:906:2018#0
-GTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGGCCTACTAGTCTCAATACTCAACA
-+
-6777778888888888888888887777655544322110.//-.--'),,+#'*)(#)'('#(&&'""#"#"$""
- at 30BB2AAXX080903:3:43:286:196#0
-TATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAAGACTAGTATGGCCGATG
-+
-67777788888888888888888877776555443322100//-----,,++++*)*())('(((%'%&%""#"""
- at 30BB2AAXX080903:3:45:1475:775#0
-TATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGGGGGCCTAGCCCTACTAGTCTCAATCTCCGATCCACAG
-+
-67777788888888888888888877776555343222$00/,.%,.,+-()*'**(*()((#((''""#"##"""
- at 30BB2AAXX080903:3:48:220:506#0
-ATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAGGAGGAAAAGACTAGACGGGCAGCG
-+
-67777788888888888888888847776555443222.00//.+.--,,,,+&**#&)))')(('&""$####"#
- at 30BB2AAXX080903:3:37:704:1516#0
-CCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACCTCTCGCAN
-+
-6777778888888888888888887777655541322.1-,.+--,+++,++**)))))('('(''#%$$%$"$""
- at 30BB2AAXX080903:3:3:903:1170#0
-CTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCACACCGCTGCTTCGCAAGATCGGAATNACACNCA
-+
-6777778888888888888888887777655'44323000//'.--&-,++,*****)())#(((''""#$"%"##
- at 30BB2AAXX080903:3:3:988:1658#0
-CTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAAGNACTANGT
-+
-67777788888888888888888877776553443220110.../---,++++++*)'))')((&'%""$"##""#
- at 30BB2AAXX080903:3:40:762:432#0
-CTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAGGCGGCAAACGTCGGACA
-+
-67777788888888888888888877776555443222100././---,-++*+****))))(''''$#%&&%"#"
- at 30BB2AAXX080903:3:3:222:1275#0
-TCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCCGGCGGCCAANACGTNAT
-+
-677777888888888888888888767;65553432220/0//-----,,,++*+)))&*(()('##$""#$""#"
- at 30BB2AAXX080903:3:57:33:1674#0
-AGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCCGATCGGAAGATGGACAC
-+
-6777778888888888888880887777655544322211///.,-,,,-+*+*)*)(%)((&((#''"""#""#"
- at 30BB2AAXX080903:3:43:761:57#0
-GTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCTTCGCAAGATCGGGAGGTC
-+
-67777788888888888888888873776355443212100/...-,,,,+,*+)**()))((&('#"'%""#"#"
- at 30BB2AAXX080903:3:51:507:1342#0
-TGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTAGATCGGAAATAGGGA
-+
-67777788888888888888888877776555443222100//..---,,+++****)*))))((''""""""#""
- at 30BB2AAXX080903:3:51:1643:519#0
-TGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACACCACACCA
-+
-67777788888888888888888877776555445222100//..---,,++++**)*)))(((''&$"&%%$%$$
- at 30BB2AAXX080903:3:37:803:518#0
-GCCGCCTGCGAAGCAGCGGTGGGCCTATCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTGTCTCGCTN
-+
-67777788888888888884888(714$)55$13132-0/1.+--.,,&,+++*))())(('(((''""#"$##""
- at 30BB2AAXX080903:3:35:170:592#0
-AGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTCGTAGGGCTAGGCCCACCGCTGNCGCCACAN
-+
-677777888888.88888888.887777/555443222100/....-,,,+++++*))))())&(%'"$"%$###"
- at 30BB2AAXX080903:3:51:152:1109#0
-AGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCCACCGCTGCGTCCTCGT
-+
-6777778888888888888888887777655544322210///..--,,,++*+**)'))))(((('$""#$""#"
- at 30BB2AAXX080903:3:53:1029:889#0
-TGCGAAGCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACCTCACCTAA
-+
-67477788888888888888880877776555343222200/...--,,,,++*****))()((''#$$%&%"###
- at 30BB2AAXX080903:3:43:489:1666#0
-CAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTAGATCGGAAGAGCGGGACGGCC
-+
-6777778888888888888/08881777655.421)11/./$.+/-++,+++**)*)('()'((''#'$"#"""#"
- at 30BB2AAXX080903:3:39:1428:1113#0
-AGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAAGCTCTGCA
-+
-67777788888888888888888877776565443222100//...-,,,+++***)))))(('(('%""#$""#"
- at 30BB2AAXX080903:3:57:731:544#0
-GGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGGCCTACTCA
-+
-677777888888888888888888777765554402221/0//..---,,+++***)))))((('(&$$#""""$"
- at 30BB2AAXX080903:3:44:424:1363#0
-GGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAAACCTACTCCAA
-+
-67777788888888888888888877776555443222100/...---,,+,++***))*((((((''%&&&$%$#
- at 30BB2AAXX080903:3:50:35:510#0
-ATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGGAACGATCAT
-+
-67777788888888888888888877776555443222100//.----+,,,+***)&)))&((('&""#"""$""
- at 30BB2AAXX080903:3:1:396:1739#0
-TGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACGACGTACATAACCTAAACCTCNCANAACC
-+
-277777888888888888,81878.7461525342$2.100*/-...'-,+'++*))))(('(''(''"%&"##""
- at 30BB2AAXX080903:3:43:1377:1569#0
-CATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTCAGACTG
-+
-67777788888888888888888877776555443222100//..-+-,,+++***))())((((''&$##%##""
- at 30BB2AAXX080903:3:58:1417:1634#0
-GCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAAACCTACTCCAACAAGN
-+
-67777788888888888888888877776555443222000//..----,+++**))))()(((((&%%%$""#""
- at 30BB2AAXX080903:3:3:1150:1405#0
-TAGCATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGNCCTGNTG
-+
-677777888888888888888%8877/76542400+2210/1&.'-&,+(,,+****))*''()(&%&"""#$"#"
- at 30BB2AAXX080903:3:4:504:761#0
-TTAGTTTTAGCATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGCNCTCGNCN
-+
-67777788888888888888888877776555443222100./-.-,+,,+,+*+))*)()()((''&"$"%#"$"
- at 30BB2AAXX080903:3:58:960:1382#0
-GATTAGTTTTAGCATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGGTTAACA
-+
-67777788888888888888888877776555443222100/./.---+,+,++*)*))*)((((''&%&"""###
- at 30BB2AAXX080903:3:49:444:1543#0
-TCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAAACCTACTACAATGCTAAAACTAATCGCGACA
-+
-6777778888888888888888887777655546322-100/...-,-,,,+%+***))())(((('&"$&##"#$
- at 30BB2AAXX080903:3:35:1319:412#0
-TGGGACGATTAGTTTTAGCATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGTAGANCGCACANN
-+
-67777788888888888888888877776+55443222100//...--,,+++*+*)*())(((((("$"%#$#""
- at 30BB2AAXX080903:3:56:1624:173#0
-TTGTTGGGACGATTAGTTTTAGCATTGGAGTAGGTTTAGGTTATGTACGTAGTCTAGGCCATATGTGCACAACAGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$$&&###"#
- at 30BB2AAXX080903:3:4:322:1823#0
-CATGTCAGTGGTAGTAATATAATTGGTGGGACGATTAGTTTTAGCATTGGAGAAGGTTTAGGCTATGANCGTANCN
-+
-6777078888888888888888887,776305435/02&00*/.-.-,-,++'***'())'('((('""#""#"$"
- at 30BB2AAXX080903:3:36:786:988#0
-GTCATGTCAGTGGTAGTAATATAATTGTTGGGACGATTAGTTTTAGCATTGGAGATCGGGAGAGCGGCTTCGACAN
-+
-67777788888888888888888877776555423022101//.,+,+,,,+%**)')*%))()%''$"""####"
- at 30BB2AAXX080903:3:60:1351:342#0
-AAGTCATGTCAGTGGTAGTAATATAATTGTTGGGACGATTAGTTTTAGCATTGGAGTAGGTTTAGGTTCCACCANN
-+
-677777888888$8888888888877776555443222100/-..-.-,,+++*)*(*))#()('''"#"####""
- at 30BB2AAXX080903:3:53:235:1478#0
-GTACATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCACTGACATGCGACCG
-+
-6777778828.8888+8888888877776555443222100//..-,,,,+++*+***))()(((('"$%"%####
- at 30BB2AAXX080903:3:47:1715:1485#0
-GGAAAGTCATGTCAGTGGTAGTAATATAATTGTTGGGACGATTAGTTTTAGCATTGGAGTAGGTTTAGTGGCGGGC
-+
-67777788888888888808888877776555443222/00///..--,,+++***)))()((''('&#"""##"#
- at 30BB2AAXX080903:3:42:939:929#0
-TCAAATTATGTGTTTTTTGGAAAGTCATGTCAGTGGTAGTAATATAATTGTTGGGACGATTAGTTTTAGCATTGTG
-+
-677777888888888888888888777765554432221&0/..,,-,,,++)**('))))((((('%&""$%$"#
- at 30BB2AAXX080903:3:58:575:1902#0
-TTCAAATTATGTGTTTTTTGGAAAGTCATGTCAGTGGGAGGAATATAATTGTTGGGGAGATTAGTTTTGGTCTCCN
-+
-6777778888888888888888887777655544122,.0/0/-..,-,,,++***'&*(&)'(('''"%%$"##"
- at 30BB2AAXX080903:3:49:1640:620#0
-GCTAATAATTAGGCTGTGGGTGGTTGTGTTGATTCAAATTATGTGTTTTTTGGAAAGTCATGTCAGTCGAATCGTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''$&"###""#
- at 30BB2AAXX080903:3:49:959:1978#0
-ACTACCACTGACATGACTTTCCAAAAAACACATAATTTGAATCAACACAACCACCCACAGCAGATCGGAAGCTACA
-+
-6777778-888888888888888877776555443222100/...---,,+*+*)*))))())(('&&"""$""##
- at 30BB2AAXX080903:3:51:1528:1847#0
-AGAGGGATGATGCTAATAATTAGGCTGTGGGTGGTTGTGTTGATTCAAATTATGTGTGTTTTGGAAAGATGGTCCC
-+
-67777788888888888-8888887777655$443222101/...$.-,,+++****())'(()'''"$"""#%"#
- at 30BB2AAXX080903:3:40:513:888#0
-CATAATTTGAATCAACACAACCACCCACAGCCTAATTATTAGCATCATCCCTCTACTATTTTTTAACCAGATCACC
-+
-177777888888888*888888857777655+443222100/...--,+,,++***)*)))((((''&&$$%&%##
- at 30BB2AAXX080903:3:55:302:514#0
-AACAGCTAAATAGGTTGTTGTTGATTTGGGTAAAAAATAGTAGAGGGATGATGCTAATAATTAGGCTGGGGGTTTG
-+
-67777788888-88(88888888377776-551432/2100//.-----,,++**)(*))))(((('""$""""""
- at 30BB2AAXX080903:3:36:237:472#0
-GGAAAAGGTTGGGGAACAGCTAAATAGGTTGTTGTTGATTTGGTTAAAAAATAGTAGAGGGATGATGCTACGCNCN
-+
-67777788888888888888888877776555443222100//...,,,+,++***)*))))(((('%$##"#"$"
- at 30BB2AAXX080903:3:38:1547:96#0
-TTAGGGGGTCGGAGGAAAAGGTTGGGGAACAGCTAAATAGGTTGTTGTTGATTTGGTTAAAAAATAGACGACACNN
-+
-677777888888888888888)887778635544+0/2/00./.'-+&--*+*+++'('(((('''%"$$""""""
- at 30BB2AAXX080903:3:46:115:1597#0
-TAGGAGGGGGGTTGTTAGGGGGTCGGAGGAAAAGGTTGGGGAACAGCTAAATAGGTTGAGATCGGAAGTGCGACGC
-+
-67777788888888888888888877776055443.22100./,----,-,+****)))))()('''&""##"#"#
- at 30BB2AAXX080903:3:55:529:118#0
-ACCAAATCAACAACAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCCCCCTGCTCATAAC
-+
-677777888888888888888888777765554432221/0//..---,,+++**(*)))))(((('"'"$%$"##
- at 30BB2AAXX080903:3:60:815:1932#0
-AACAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTCCNACNN
-+
-6777778888888888888888887877655224+12,101//.,-+,,,++***)(**'()('(%'&""$"#$""
- at 30BB2AAXX080903:3:36:453:1548#0
-TAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCGCACATCTN
-+
-677777888888888888888888777765554423111//....---,,,,++*))**)()((('&"$$%$"$#"
- at 30BB2AAXX080903:3:41:1537:428#0
-TGAGGGGTAGGAGTCAGGGAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGTCAGAGCGGAAGAGCGGTTCAGAACC
-+
-677777848888888888$88888777765554432221-0/..----,,$,+**(*)))))(((''"""&#""#"
- at 30BB2AAXX080903:3:46:886:1075#0
-TGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGTGGGAGGAAAAGGTTGGGTGCCGCTT
-+
-6777778588888888888888887777655544322210.//.,---,,(*+*&*)')((()'(''&"""#"#""
- at 30BB2AAXX080903:3:43:1012:1723#0
-TGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGTCGGAGGAAAAGGTTGGGGGCGCG
-+
-67777788888888888888888877776555442222100//..---,,++++***))')'()'''&$%%"""#"
- at 30BB2AAXX080903:3:54:676:1472#0
-GCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGTCGGAGGGACAGGTGC
-+
-67777788888888888888888877776555443522100/...---,++++++*)*))(((((''"%%%%##$$
- at 30BB2AAXX080903:3:52:945:914#0
-TTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGAGATCGGAAGAGCGGTCCCGCGGGG
-+
-677777888888888888888888477765/5343222100/...---,,+++***)*())))(((%"""&%"""#
- at 30BB2AAXX080903:3:37:498:1008#0
-GTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGCCTCCGCN
-+
-6777778888888888888888887'776555443222100//..--+,,+++***)())))(((''&"""""##"
- at 30BB2AAXX080903:3:43:1237:487#0
-GTTGGCTTGCCATGATTGTGAGGGGTAGGAGGCAGGGAGTTAGTATTAGGAGGGGGGTTGTAGATCGGGGGAGACT
-+
-6/777788888888888858088872776/5'3432)-1%0./-.----,,++****&()&)(('%''"#%$"$""
- at 30BB2AAXX080903:3:42:951:1057#0
-TGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGTTGTTAGGGGGTTTT
-+
-6777778888888888888888887777635544321110/./-.--),,+,+***)))))%(('&&%'#""""""
- at 30BB2AAXX080903:3:58:1335:966#0
-TGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGGGTGTTAGTGTCCACA
-+
-67777788888888888888888877776)55443222100//-.---,-+++***)))))%((((''"%"##%$$
- at 30BB2AAXX080903:3:38:1316:1622#0
-GGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGAGGGGGCTGTCACTA
-+
-677777888888888888888888777765554432,1101/--.--#,,)+*+)**))))()((('%$%%%"#""
- at 30BB2AAXX080903:3:41:1035:1846#0
-CACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTAAGATCGGCTCGATGCN
-+
-27777788888888888888/888.7576055323222100//---*'+,*$++**()()((((&''$%%#$###"
- at 30BB2AAXX080903:3:35:1160:1334#0
-TCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGATNTGCTCAAN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*)((('('"#%#"$#""
- at 30BB2AAXX080903:3:57:205:1630#0
-ACCCCCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTTATCCATGCGTA
-+
-67777788888888888888888877776555443222100//..---,,+,++****)))()((('$&$""#"#"
- at 30BB2AAXX080903:3:49:154:485#0
-CCCCCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTTATCNCGACAACT
-+
-67777788888888888888888877776555443222100//..---,,++****))*))(((((&"$"###$#"
- at 30BB2AAXX080903:3:42:1571:406#0
-GGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGGTGGTCGT
-+
-6727778880888888888888887777657543322.1/0//.,,.-+-+,+++')*)(((&'''''&##""#""
- at 30BB2AAXX080903:3:45:1422:1974#0
-CCCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTAGATCGGAAGGGACG
-+
-67777788888888888888888877776555443222100//..---,,+++*)*)*)))))(('''""#"#""#
- at 30BB2AAXX080903:3:59:294:1395#0
-GTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTAAGATCGNNNC
-+
-67777788888888888888888877776555443222100-/..-,-,,++****)#))()((('''"&&%"""#
- at 30BB2AAXX080903:3:40:385:1146#0
-AGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTACTATGAGGC
-+
-67777788888888888888888877776555413222100/...--+-,+*+***))())((('('$$%$%#$"#
- at 30BB2AAXX080903:3:37:1135:1753#0
-TAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTTGGACN
-+
-67777788888888888888888877776555443220100//..---,-+++*+**))()()('''%%##%###"
- at 30BB2AAXX080903:3:52:837:750#0
-TGATAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGTAGTTAGTATTAGC
-+
-6777778888888888888888887777655544322010///.----,,+&+***)()()(#((&'""#######
- at 30BB2AAXX080903:3:36:680:352#0
-GTGATAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCCTGATTGTGCGGGGTAGGAGTCAGGTAGTNGTATAGAN
-+
-6777778388488888888888887777655544321.+00./..,-,,,++#***()(('((#(('"$"#&%%#"
- at 30BB2AAXX080903:3:46:364:1500#0
-GTGATAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGGGTAGGAGTCAGGGAGTGNGNGATAC
-+
-67777788888888888888888877776555443232.00./..--+,,++****()((((('(''""%""#"$%
- at 30BB2AAXX080903:3:2:1154:986#0
-TACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGTGAACCACTANCCGGTCT
-+
-67777788888888888888888877776555443222001//...-,,,,++*****)))((((''%""%""##"
- at 30BB2AAXX080903:3:59:105:571#0
-TACTAACTACCTGACTCCTACCCCTCCCAATCATGGCAAGCCAACGCCACTTATCCAGTGAACCACTATCACANNC
-+
-67777788888888888888888877(7655554322210//,..---+-+*++**(*))')'(((''&&#%#""#
- at 30BB2AAXX080903:3:60:1176:418#0
-TACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGTGAACCACTACGATCCNN
-+
-677777888888888888888888777765554432221000/...--,,,++*+***)))()(((''"%#"##""
- at 30BB2AAXX080903:3:48:30:987#0
-TTTTCGTGATAGTGGTTCACTGGATAAGTGGGGTTGGGTTGTCATGAGTGTGAGGGGGGGGGGGGGGCTCCGCCAC
-+
-677777888888888.888888817777)55)4&*22%.0&#.#+,"',,)*#***)()))((((#&%$##""#"%
- at 30BB2AAXX080903:3:2:853:560#0
-CTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGCCAACGCCACTTATAGATCGGAAGAGCGGCNGCCTCTC
-+
-6777778888888888888388884777655543-2)20-0.+.,,++-,,++**)())&((&(&%(""#"""#"#
- at 30BB2AAXX080903:3:38:239:613#0
-GAGGTAGAGTTTTTTTCGTGATAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGGNGCGTCTCA
-+
-6777778888888888888888887777655544302210///...--,+,,+'+))*&)))()&(&"#""##"#"
- at 30BB2AAXX080903:3:40:404:1033#0
-AGAGGTAGAGTTTTTTTCGTGATAGTGGTTCACTGGATAAGTGGCGTTGGCTTGCCATGATTGTGAGCGTGATCAC
-+
-67777788888888888888888877776535443222100//./---,,+++*)*)*)))((((&&"%"$"""$"
- at 30BB2AAXX080903:3:8:1212:1941#0
-CAAGCCAACGCCACTTATCCAGTGAACCACTATCACGAAAAAAACTCTACCTCTCTATACAGATCGGNCTCGCTNN
-+
-6777778888488888888888167777655544332200/-/,,-,*,-+++*))(#*))((((('"&"#"#"""
- at 30BB2AAXX080903:3:57:91:1513#0
-TCTGTGGCTGTGAAAGTACTAATTAAGGGGGTTTGTCGGGAGGTTAGTATAGAGGGGCAGAGGTTTTTTGTATCTC
-+
-677777888828'8&888,8%8287877%5*'4422$210,/&&-,-#*,)+#+'))$))'(&#'''"$#"$$#$#
- at 30BB2AAXX080903:3:3:15:1417#0
-TTCTGTGGCTGTGAATGTTATAATTAAGGGGATTTGTAGGGGGGTTAGTATAGAGAGGGAGAGGTTTCNCCTNNAC
-+
-67777788888888888.88888877776(5-44322-100*/(.-+-),+++)*()))')((&'(&%"#"%"""$
- at 30BB2AAXX080903:3:35:377:1074#0
-TGATTAGTTCTGTGGCTGTGGATGTTATAATTAAGGAGATTTGTAGGGGGATTAGTATAGAGAGGGANCTACACAN
-+
-677777888888888888$8,888&717.515)432'2000//-,,--&,&,+'*))*))'((('#'"&"#%#$""
- at 30BB2AAXX080903:3:34:330:1261#0
-GAAGATATAAAATATGATTAGTTCTGTGGCTGGGAATGTTATAATTAAGGAGATTTGAGATCGGGAGNCATCCGNN
-+
-67777788888888888888888877776555/4'212,0./-.,-,-,,*++'**'#)''#((&'("$"###"""
- at 30BB2AAXX080903:3:47:993:1219#0
-CTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAGAACTAATCATATTTTATATCTTCTTCGAACACACA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((''"%"$"%##"
- at 30BB2AAXX080903:3:51:961:1813#0
-TAAGTGTGGTTTCGAAGAAGATATAAAATATGATTAGTTCTGTGGCTGGGGATGTTAAGATCGGGAGAACCGCTGC
-+
-67777788888888888888888877776555443222100//..---,,+,*+'*()))&%()&&&""##"&###
- at 30BB2AAXX080903:3:54:1435:1245#0
-GATAGCCAAGGTGGGGATAAGTGTGGTTTCGAAGAAGATATAAAATATGATTAGTTCTGTGGTTGGGGAGTTGTCA
-+
-67777788888888888888888577776553442220100//.-.--,-++)***%))))(#(((%'"$%%#"##
- at 30BB2AAXX080903:3:50:352:590#0
-ATCGGGTGATGATAGCCAAGGTGGGGATAAGTGTGGTTTCGAAGAAGATATAAAATATGATTAGTTCTGGTGCTGG
-+
-677777-88888888888888)88778165504,32-2100/..-,--,,+,*+***)))(&((%(#""##$#"""
- at 30BB2AAXX080903:3:48:333:1078#0
-TGACTGGTTGCCTCATCGGGTGATGATAGCCAAGGGGGGGGTAAGTGGGGGTTCGAAGAAGATAAGAGCAGGCAGC
-+
-6777778888888888088888887777604--43-2210&/...$-&-,&*+'*&)*()(((&(('"###"##"#
- at 30BB2AAXX080903:3:52:508:1890#0
-GTTCAGGCGTTCTGACTGGTTGCCTCATCGGGGGATGATAGCCAAGGTGGGGGTAAGAGAGATCGGGAGCGGCCCG
-+
-677777888888888.888.188876776555,43222100/.,---#,,++*)***#*#(&'#'('$""$"""#%
- at 30BB2AAXX080903:3:58:469:1093#0
-CCTGCGTTCAGGCGTTCTGACTGGTTGCCTCATCGGGGGAGGAAAGGCAAGGGGGGGGGGAGGGGGGGTATGCTAC
-+
-6-77778.888888(88-88,888(27&9)5(,3222.20,/+#,-$'*+,++****)((((''#('&&#"%%"$#
- at 30BB2AAXX080903:3:34:41:314#0
-CTTCGAAACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGNCTCCTTNN
-+
-67777788888888888888888877776555443222100//..---,,,+++****))))(((('"$$#%""""
- at 30BB2AAXX080903:3:52:1417:358#0
-CTTCGAAACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGACCGCGCGC
-+
-67777788888888888888888877276555443.22&00//...--,,++++*'())))'(((&'&#$&%#"#$
- at 30BB2AAXX080903:3:52:973:1914#0
-CTTCGAAACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAGNGCAGCG
-+
-67777788888888888888888877776555443201200/....--,+,*+**')))(('('(('%""&##%#"
- at 30BB2AAXX080903:3:3:1073:1811#0
-TTCGAAACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAAAGATCGGAAGAGCGGTTCNCGCNNAT
-+
-677777888888888888888888767765/5343222100/..,,.,,-)++*+*))()()(((%#$"$""""#"
- at 30BB2AAXX080903:3:33:1741:589#0
-TGCCTGCGTTCAGGCGTTCTGACTGGTTGCCTCATCGGGTGATGATAGCCAAGGTGAGATCGGAAGANTCACACNN
-+
-677777888888888888888888777765554432221-00...---,++*+*#+)*)&'((%(('"$%"###""
- at 30BB2AAXX080903:3:1:506:1152#0
-GAAACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGCTAGAACGCCTGAACGCNCCNACAC
-+
-64/7718828881*.230,,,,20-,2-+)+0(-*()-)*,)+,'(&&$$($#&#'%#####%%#%#""##"#$##
- at 30BB2AAXX080903:3:51:333:1641#0
-AACCACACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCANGCACTGCN
-+
-67777788888888888888888877776555443222100//-..--,,++++*))*)))((('(&""%"$#"#"
- at 30BB2AAXX080903:3:45:272:1952#0
-AGTATGTGCCTGCGTTCAGGCGTTCTGACTGGTTGCCTCATCGGGGGATGATAGCCAAGGGGGGGGTAAGGGGGCG
-+
-67777788888888888888/88897754555(43.+100/./..*-+,,+++*#*()))&)(((''%"$"&"$""
- at 30BB2AAXX080903:3:35:459:433#0
-CACTTATCCCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGAGANCGTGCGNN
-+
-67777788888888888888888877776555443222110...-.--,,+++*++*)))())((('"&""##"""
- at 30BB2AAXX080903:3:43:894:1016#0
-GTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTGACTGGTTGCCTCATCGGGTGATGATAGCCANGGGGTGC
-+
-67777788888888888888888877776555443222110//..---,,,,+***()*))()((&#$"#""##$#
- at 30BB2AAXX080903:3:44:1221:1665#0
-CCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACC
-+
-67777788888888888888888877776555443220100/....---,++++***)))()(((('&$&&&%$$$
- at 30BB2AAXX080903:3:59:1171:24#0
-CCCACCTTGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCANNN
-+
-67777788888888888888888877776535/31.,210/0,.----,,&+**+*''((#'##(''&"##%%"""
- at 30BB2AAXX080903:3:35:1298:203#0
-TGTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTGACTGGTTGCCTCATCGGGGAGATCGGGANCCTCCTNN
-+
-677777888888888888888888777765552432.210///.'--',+*)*****())'&'((#%"$###$"""
- at 30BB2AAXX080903:3:40:1063:1611#0
-TGGCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTCCT
-+
-67777788888888888888888877776555443222100//....-,,+++++)))))))((((''%%&%%"#"
- at 30BB2AAXX080903:3:37:1416:384#0
-TACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTGACTGGTTGCCTCCAGATCGGACACGTCGN
-+
-6777778838888888888888/877/7655544.22-1000-(-+&+,+++*)*#(&(#'''#&#%"%%"##%""
- at 30BB2AAXX080903:3:55:1546:483#0
-GCTATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACAACACATCCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$$%$&#$$#
- at 30BB2AAXX080903:3:55:527:1151#0
-ATCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCNAGTACACT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((''"%##$""$"
- at 30BB2AAXX080903:3:4:497:528#0
-TCATCACCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCAGCNATCANCN
-+
-6777778888888888888888857777655934302.1///0--.,-,,+++)**)*))('(('''%"""%#"#"
- at 30BB2AAXX080903:3:60:859:1679#0
-GAGCCTACTAGGGTGTAGAATAGGAAGTATGTGTCTGCGTTCAGGGGTTCTGTATGGTTGTCTCATATAGCACANN
-+
-677-/7888888888888888888777765534$352,1/1-..-$-,$*++#$)&)&('#''#(%%"%%$%$$""
- at 30BB2AAXX080903:3:33:901:537#0
-GAAGGGAGCCTACTAGGGGGTAGAATAGGAAGTATGTGCCTGAGTTCAGGCGTTCTGACTGGTTGCCNTCTGCANN
-+
-677777888888'8888888888877276555443222100/%./---,,++****))()()(((''""%"#%#""
- at 30BB2AAXX080903:3:42:774:1155#0
-GAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTGTCTGGTTGTCTCCCGGTCG
-+
-67777788888888888818818877176555442222&0///.,--,-,+++*)&)#)((%&''#%&$#%#"###
- at 30BB2AAXX080903:3:35:856:1046#0
-CCCGATGAGGCAACCAGTCAGAACGCCTGAACGAAGGCACATACTTCCTATTCTACACCCTAGTAGGNTACCTTCN
-+
-67777788888888888888888877(7655,4,*21210//..--,,,,+*++**))()()('(''"""&&%"#"
- at 30BB2AAXX080903:3:48:394:1813#0
-CCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGGCCGCTACA
-+
-677777888888888888888888777765554432211/00/-.-,+-,+++**)*)()((((('%"#""$""##
- at 30BB2AAXX080903:3:49:1438:999#0
-CCCGATGAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCCGCGGACG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((('&""#"""""
- at 30BB2AAXX080903:3:47:1204:2009#0
-GGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTGACTGGTTGCCCTCTTCAC
-+
-6777778888888888888888887777655543322210///-.--,-,+++*+))))()(('((%$$%""#"##
- at 30BB2AAXX080903:3:33:904:1339#0
-GTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGCACAGGCGTACTGACCGNCACTGANN
-+
-677777888888888888888888777765/55432-2100/..,,,-,,+&+***))#')(('#%'"$#$"""""
- at 30BB2AAXX080903:3:57:927:1252#0
-GAGGCAACCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTGCGCTATA
-+
-67777788888888888888888877736555443222100-/.,---,,++)*++**)*)()('((&"&"#"$##
- at 30BB2AAXX080903:3:2:309:46#0
-GATGAGGAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGTCTGCGTTGAGGAGTTCTCNAGTNNAT
-+
-6777778888888888488)*0817677635.44+,221/../&.,-+,$+*+$*')'))('(#(#'$"#""""""
- at 30BB2AAXX080903:3:33:1694:477#0
-GATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGTTCAGGCGTTCTNTCCAGCNN
-+
-6777778888888888888888187777655(443222100//$..-,,,+*+**()))))'('(''""$%$"$""
- at 30BB2AAXX080903:3:55:1137:1834#0
-CCAGTCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCCTCACA
-+
-67777788888888888888888877776555443222100//..---,,,,+****)*))((((('&&"#%$#"#
- at 30BB2AAXX080903:3:49:536:890#0
-GAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACGTCCTC
-+
-67777788888888888888888877776555443222100//..---,,,,++*))*)())))(('&"#""####
- at 30BB2AAXX080903:3:57:843:1396#0
-AACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAGTCTA
-+
-67777788888888888858888877776555443212100//./----,,++**)))(*()(((('&&#"$####
- at 30BB2AAXX080903:3:41:1759:339#0
-ACGCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCCTCCCCTACTCATCGAGATCGGGTCT
-+
-67777788888888888888888897476545443220200*...-+-,,)++***(()((('(&''&##%$""$"
- at 30BB2AAXX080903:3:39:1100:149#0
-TGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCCTTCAGTAC
-+
-67777788888888888888888877776555443222/00/-.-,-,,,+++)**(*))())('('"%#$%%"##
- at 30BB2AAXX080903:3:33:1638:1300#0
-GCCTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTNCTACACNN
-+
-677777888888888888888888777765554432221/0//.-.-,,,,,+++)*)))))))(('""""#"#""
- at 30BB2AAXX080903:3:33:1205:213#0
-AGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTNTCTATANN
-+
-67*747888888888888888788777765552432/212//...-,--,+++**)))()()(((''"%%#""#""
- at 30BB2AAXX080903:3:57:301:1298#0
-CTGAACGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGAGATCGCGCGCTGTA
-+
-67777788888888888888888877776555423222000//..-+,,,+,*)**))(((((((''$$$&###"#
- at 30BB2AAXX080903:3:37:628:257#0
-GAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTATGTGCCTGCGCTACN
-+
-67777788888888888888888877776555443222100//..,---,,+++**))))))(('('$&%%$&##"
- at 30BB2AAXX080903:3:50:736:303#0
-TTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAAAGATCGGAAGATAACACTAA
-+
-677777888388888888888828771765554432221000..-----++*+*))*))&(((((('"""%$#"#"
- at 30BB2AAXX080903:3:2:1507:571#0
-CGCAGGCACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCAGATCGGAAGAGCNCGCTCTC
-+
-6777778888888888888888887777555534322210//./,.-,,,-+++***)('))(((('%"$"""$##
- at 30BB2AAXX080903:3:2:191:498#0
-GTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAGAATAGGAAGTANCGANNTA
-+
-67777788888888888888888877776245443222100/.-.,.,,,+++***)*))(()('(#%"#$"""#"
- at 30BB2AAXX080903:3:37:1327:1296#0
-CACATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACGANANGACN
-+
-67777788888888888888888877776555443222100//..----,,++++)))))))(((('$&"%"&##"
- at 30BB2AAXX080903:3:50:1770:1826#0
-TAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGATCGGAAGAGCGGATCCGCGCG
-+
-67777788888888888888888877776555443222100//..---,,,++**+*))))()('''""#""#"##
- at 30BB2AAXX080903:3:2:1202:1083#0
-CCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTAAGATCGNAGTCACT
-+
-67777788888888888888888877776555423222100-/..-,-,,,+*+**)*'))))((#'%"#"#%#$"
- at 30BB2AAXX080903:3:46:1029:1155#0
-CCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGAGATCGGAAGACATGGGTG
-+
-67777788888888888888888877776555443322100//..---,,+,+***)))))(((((&$"""#"#"#
- at 30BB2AAXX080903:3:2:1195:196#0
-AGTGAGCCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTACTAGGGTGTANATACACC
-+
-67777788888888888888888877776555442222100./..--,-,+++*)))*())))('(''"""#$"##
- at 30BB2AAXX080903:3:42:300:1964#0
-TTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAAAT
-+
-67777788-888888888883083477765/5/23+2-0.0....--+,,,++*+))*(((((((%'&%&&%"#"#
- at 30BB2AAXX080903:3:43:1094:206#0
-CTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAAGATCGGAGGCGCGC
-+
-67777788888888888888888877776555443222110//..---,,+++***))))))((((''$"&#%"#"
- at 30BB2AAXX080903:3:50:1101:274#0
-TAGAATGGTTAGTGAGCCTAGGGTGTTGAGAGTGTAAATTAGTGCGATGAGTAGGGGCAGGGAGACTACTTCCCTC
-+
-677177888888.88888888888+,77'515442222100.,..-.-,++)+***)()))'(('''$""#$##"#
- at 30BB2AAXX080903:3:38:1506:711#0
-CCCTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACAGATCGTGAGCGC
-+
-67777788888888888888888877776555443022100//..---,,+++***))))))((((#"$$"""#"#
- at 30BB2AAXX080903:3:41:1224:227#0
-AGTAGAATGTTTAGTGAGCCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGAAGGGAGCCTNCTGTGA
-+
-6777778888888888888888887*776555443212/00//.,---,-+,+***)))')(#((''&%""&$$##
- at 30BB2AAXX080903:3:36:1726:561#0
-CTAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAACANTCTCCTNN
-+
-67777788888888888888888877776555443222100//..-.-,,++*+*)**)*))(((('"&&$$$"""
- at 30BB2AAXX080903:3:58:124:1903#0
-AGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACCANNN
-+
-6777778888888888888888887777655944321200///.---++,+,+***)*()(()(('''&%%#$"""
- at 30BB2AAXX080903:3:54:1501:660#0
-AGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGGGGACACTCCTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&$##"#"#"
- at 30BB2AAXX080903:3:46:1617:617#0
-TCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACAGTGCTAGA
-+
-67777788888888888888881877776555443222100//.-.-,+,+*++**)*))())((('""""$""""
- at 30BB2AAXX080903:3:49:1022:1264#0
-CTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACCGCTTCGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((('''&$"$""##"
- at 30BB2AAXX080903:3:49:1469:208#0
-CAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGTGAGTGTAAATTAGTGCGATGAGTAGTCTGTC
-+
-6777778888888888%888888877770555443222100+...---+,(*+*+**)&)(()('('$"$#$####
- at 30BB2AAXX080903:3:38:1396:722#0
-CTCATCGCACTAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACTCTCACTGCCAGCTGTC
-+
-67777788888888888888888877776555443222100//...--,,+,++*****))()((''&$#&"%#$#
- at 30BB2AAXX080903:3:41:84:660#0
-CGCACTAATTTACACTTACAACACCCTAGGCTCACTAAACATTCTACTACTCACTCTCACTGCCCAANCCTCATCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''"&#"$#"#"
- at 30BB2AAXX080903:3:40:452:1727#0
-TGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGTGAGTGTAATAGATTCAC
-+
-677777888888888888888-88767565514-322100//).--,,,,+++)*)))))()(('('$$%%%$"##
- at 30BB2AAXX080903:3:60:578:84#0
-CAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGGGTTGTGAGTACTNN
-+
-67777788888888888888888877776553443122/00./...---,++****)()*)&('((&'"&%##"""
- at 30BB2AAXX080903:3:38:695:1481#0
-TCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGAGAGGACAC
-+
-67777788888888888,8888887777655544320210//...-,,,,+++**(())))((((('$$#"""###
- at 30BB2AAXX080903:3:1:1137:1440#0
-CTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGNGCNGCTA
-+
-6777778888888888888888887777655240302100/./..--*,++++***'))()((&('%%"#%""#""
- at 30BB2AAXX080903:3:39:244:1967#0
-CTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGTTGTGACATAC
-+
-67777788888888888888888877776555423220201//----,,,-+++**((*))))((''"$"%%"""$
- at 30BB2AAXX080903:3:54:282:249#0
-TTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGGTGCTGGTAT
-+
-6777778888.8888888888888777765554130221000/..,-+,,+*++**))))())((('$%%#$"#""
- at 30BB2AAXX080903:3:1:726:93#0
-CAACACCCTAGGCTCACTAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGACNCTNTCAA
-+
-677777888888888888888888777765254131211/0./..+-,-,,,+***)*))()(((('""#""##"#
- at 30BB2AAXX080903:3:38:1501:851#0
-TAAGTTGTTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATGTTTAGTGAGCCTAGGCTC
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))((('(&&%&""%$"#
- at 30BB2AAXX080903:3:46:635:799#0
-CACTAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGAGCTAT
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))()((('%$$$""""#
- at 30BB2AAXX080903:3:48:1320:595#0
-AAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGGAGATCGCTCGCACA
-+
-677777888888888888888888777365/5'4321200-../.*--,,+++**)*()()#)('#'&&$"##"##
- at 30BB2AAXX080903:3:39:320:1443#0
-TGTAAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGTAGAATTGC
-+
-67777788888888888888888877776555443222100//..---,,+,+****))))()(((&$"%$#"""#
- at 30BB2AAXX080903:3:50:1204:825#0
-TGTAAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGTGAGTAGCTACATCAC
-+
-67777788888888888888888877776555443222100//..---,,+++****)))((((((&""##"""##
- at 30BB2AAXX080903:3:48:447:659#0
-AGCTATTGTGTAAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGATAGTTCTTGGGCAGTGAGAGNGACGCTG
-+
-67777788888888888888888877776555443222100./..--,,,+++***)*)#()((('''"$$#"#""
- at 30BB2AAXX080903:3:2:1683:541#0
-TACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACTAGCTTACACCNAATCACA
-+
-67777788888888888888888877776555443222100//...--,,+,++***)))))))('&$"""%##""
- at 30BB2AAXX080903:3:4:857:1261#0
-TCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACTAGCTAGATCGGAAGAGCNCTCANCN
-+
-67777788888888888888888877776555)43222100/...---,,+,++*)))))))((('(&"$"$#"#"
- at 30BB2AAXX080903:3:53:1692:1419#0
-GGTATCTTTACTATAAAAGCTATTGTGTAAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGATCTACACCACA
-+
-67777788888888888888888877776555443222100//..---,,++****)))))(((''#"$%&%#%"#
- at 30BB2AAXX080903:3:36:663:1796#0
-AGGTATCTTTACTATAAAAGCTATTGTGTAAGCTAGTCATATTAAGTTGTTGGCTCAGGAGTTTGACACATCACNN
-+
-67777788888888888888888877776555343220/0///.----,,+++*+***)()(()('#$$""%$%""
- at 30BB2AAXX080903:3:38:913:1126#0
-CAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACTAGCTTACACAATAGATCGGAAGAGCGGTTCAGCTA
-+
-67777788888888888888888877776555443222100//..---,-+++*****))()(((('%###""""#
- at 30BB2AAXX080903:3:35:374:1092#0
-TAAAGAGGTATCTTTACTATAAAAGCTATTGTGTAAGCTAGTCATATTAAGTTGAGATCGGAAGAGCNCATCTATN
-+
-67777788888888888888888877776555443221100//..---,,+++***)))))()((('""""#"##"
- at 30BB2AAXX080903:3:2:1611:843#0
-AGTGGAGTCCGTAAAGAGGTATCTTTACTATAAAAGCTATTGTGTAAGCTAGTCATATTAAGTTGTTGNTCACCTA
-+
-67777788888888888888888877776555443202100/....,-,,+++***)*)))((((('&"##"##"#
- at 30BB2AAXX080903:3:3:1070:1084#0
-AAGTGGAGTCCGTAAAGAGGTATCTTTACTATAAAAGCTATTGTGTAAGCTAGTCATATTAAGTAGATNCTGCNAC
-+
-67777788888888888888888877776555442222100//...--,,+,+**)))))()('(('$"#%&#"#$
- at 30BB2AAXX080903:3:53:971:1126#0
-AACTTAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACAGATCGGAAGAGCGGCTG
-+
-67777788888888888888888877776555443222100//...--+,+++)***))))((((''%##"###""
- at 30BB2AAXX080903:3:49:1072:1244#0
-TACCTCTTTACGGACTCCACTTATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATATACGACAT
-+
-67777788888888888888888877776555443210100//..-.,*,,,+)*)*)))()(('&'%"#%""#""
- at 30BB2AAXX080903:3:33:1529:186#0
-TTACGGACTCCACTTATGACTCCCTAAAGCCCATGTCGAAGCCGCCATCGCTGGGACAGATCGGAAGNGCGCACNN
-+
-627777888888888888888888777765/54&-'(1201+.(-,-#,),&+**%'(&)(&''#''""$$"#"""
- at 30BB2AAXX080903:3:35:812:1164#0
-CTCCACTTATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTAGATCGGAAGAGCGGGTCNCNCTCCCN
-+
-677777888888888888888888777765554430/21/1/./,-.-),,+*)*)(()()')(#'&""""""##"
- at 30BB2AAXX080903:3:52:227:1277#0
-ATAGCCGCCTAGTTTTAAGAGTACTGCGGCAAGTACTATTGACCCAGCGATGGGGGCTTCGACAGATCTGGGGTCG
-+
-67777788888888888888888877776555443222100//...-,,++++****))()((((('&"##"#"#$
- at 30BB2AAXX080903:3:55:483:728#0
-CCATAGCCGCCTAGTTTTAAGAGTACTGCGGCAAGTACTATTGACCCAGCGATGGGGGCTTCGACATGGCGTCCAT
-+
-67777788888888888888888877776555443)22100//..---,,+,+****)))))(((('"&""###""
- at 30BB2AAXX080903:3:40:243:1720#0
-TAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTAGATCGGAAGANGCGATACG
-+
-6777778888888888888888887777655244021210.//.-,-,,,++++**'*()())('(%"'#""""#"
- at 30BB2AAXX080903:3:43:1725:800#0
-AAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTTCGGGTA
-+
-6777778888888888888888887777655544322210///..----,+,+*+**())())('('"$""%""#"
- at 30BB2AAXX080903:3:59:86:1823#0
-CCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATTGCACNNC
-+
-67777788888888888888888877776555443222100//...-,,,++++**)))))((((('$"&%##"""
- at 30BB2AAXX080903:3:56:806:404#0
-TGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGATCGGAAGAGCGGTCTGCTG
-+
-67777788888881888888888877756-55443222100/.-.---,,+++*+*)))))())((''&"%"""""
- at 30BB2AAXX080903:3:50:484:1458#0
-CCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAACACTAGGCGGCTATGGTATAGATCGGTACCGCAG
-+
-67777788888888888888888877776555443222100/..----,,++****)))(((((''&&$"##$#"#
- at 30BB2AAXX080903:3:56:1036:248#0
-CCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCCCACACC
-+
-67777788888888888888888877776555443222100/...---,,++++**))())))((''%%"&$%"#"
- at 30BB2AAXX080903:3:59:1400:106#0
-CCCCCATCGCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCACACNNA
-+
-677777888888888888888888777765554$3222100//..---,,++++*)))#)))(('('&%%%"%""#
- at 30BB2AAXX080903:3:51:633:1554#0
-TGAGTGTGAGGCGTATTATACCATAGCCGCCTAGTTTTAAGAGTACTGCGGCAAGTACTATTGACCCACACCATGC
-+
-67777788888888888888888877776555843222110//+..--,,++*****())))(((''"$"##"""$
- at 30BB2AAXX080903:3:47:17:568#0
-AATGAGTGTGAGGCGTATTATACCATAGCCGCCTAGTTTTAAGAGTACTGCGGCAAGTAGATCGGAAGTGCTCGCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((''&&""#"#"##
- at 30BB2AAXX080903:3:43:389:1851#0
-GCTGGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCTCAAACTTCATCTTCC
-+
-6777778888888888888888887777655548322210///..---,,+,++&)($')#%#%#%#$$"&""""#
- at 30BB2AAXX080903:3:53:85:775#0
-GGGTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCAGATCGGAAGAGCGCGTC
-+
-67777788888888888888888877776555443222100...---+,-+,++****()(((((#'&$#"#""#"
- at 30BB2AAXX080903:3:3:1697:1557#0
-GTCAATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGCATAATACGCCTCACACTCATTCNCCACNCN
-+
-67777788888888888888408877-75555533.220-1*,-,$,++,*,*(**(*)(''#(('%$"$"&$"$"
- at 30BB2AAXX080903:3:41:1638:1451#0
-GGGGGTTGAGAATGAGTGTGAGGCGTATTATACCATAGCAGCCTAGTTTTAAGAGTACTGCGGGCAGTACGATCGT
-+
-677777888888888888888888777765554602221-)/.---,,,-,*++*)*))))))((''%%$%&$%#"
- at 30BB2AAXX080903:3:37:737:186#0
-AGGGGGTTGAGAATGAGTGTGAGGCGTATTATACCATAGACGCCTCGTTTTAAGAGTACTGCGGCAACTAATCACN
-+
-67777748888888888085888877476555443222100/./.,-+,,+*++***))))((((''"$""####"
- at 30BB2AAXX080903:3:36:1663:52#0
-ATAGTACTTGCCGCAGTACTCTTAAAACTAGGCGGCGATGGTATAATACGCCTCACACTCATTCTCANGCTAATNN
-+
-6777578888888888/8888888777765554432(1001%/-,.+-+,+,**+*)*#)(#'(&('""$"#""""
- at 30BB2AAXX080903:3:58:699:1018#0
-AGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGAGGCGTATTATACCATAGCCGCCTAGTTTTAAGCACAC
-+
-6777778838888888888888887777335544/212100//.----,,+,+*+*))))())('''&$"$$##$#
- at 30BB2AAXX080903:3:56:1142:338#0
-TTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCGAC
-+
-67777788888888888888888877776555443222100//..,--,,+++***)))))((((('&$%&%#""#
- at 30BB2AAXX080903:3:59:996:216#0
-AAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAAACCCCTGACAAAACACATAGCCTACCGACTNC
-+
-67777788888888888888888877+76575443200100/..%.--,+,,+****()(((('&'%%&##""#""
- at 30BB2AAXX080903:3:57:987:160#0
-AGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGAGGCGTATTATACCATAGCCGCCCCAAC
-+
-677777888.8888888888888877776555451222000//.,---,,+++)****))()((((&'%"$##""#
- at 30BB2AAXX080903:3:52:756:316#0
-ACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCACGCCTT
-+
-67777788888888888888888877776555443022100//.,--,,-++++**)*)()(()(('%$"#"&$$#
- at 30BB2AAXX080903:3:34:1415:703#0
-AAGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGAGGCGTATTATACCATAANAGCGTCNN
-+
-67777788888888888888888877776555443222100//..--,,,+++***)*))))((((&"#"&$"#""
- at 30BB2AAXX080903:3:54:689:635#0
-ACAAGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGAGGCGTATTAGATCGGAAGGCGCAC
-+
-677777888888.8888888888877776555443222100//..---,,+++***)))))(((''&&#"#$#$""
- at 30BB2AAXX080903:3:52:269:1537#0
-GGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTCANTTGTTC
-+
-67777788888888888888888877776555443212000//...-,,-+,+++)*))))((((((&""$&$#"#
- at 30BB2AAXX080903:3:38:781:199#0
-CTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTCTACTACNN
-+
-67727718888888888888888877776555443222,00//-..--,,*++++***)))(((((#"$"%##"""
- at 30BB2AAXX080903:3:47:1209:426#0
-TGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCCACCCCTTCCGAGATCTGTTGTCA
-+
-+7770788888888888888888817776555413212110//-.---,,++'***)))()((((('$""###"#"
- at 30BB2AAXX080903:3:55:588:1023#0
-TGGTATAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCGAATGGGAGNAGCACAAC
-+
-67777788888888888888888877776555443222100//..---,,++++&*)())%#((&#'"&%%#%#"#
- at 30BB2AAXX080903:3:3:123:1016#0
-TAGGGATAGTACAAGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGAGGCGTANCATCNCA
-+
-67777788888888888888888877776555443222001//..-,-,,+*+**))*)))((('''&"$%##"##
- at 30BB2AAXX080903:3:1:476:1908#0
-TAATACGCCTCACACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTACTATCCNCCNCATC
-+
-67777788888888888888888877776555(432.21/00&.,--+,,+,++'*))%('((((('&"##""#"#
- at 30BB2AAXX080903:3:57:975:838#0
-GCCTCATAGGGATAGTACAAGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGTGTGGTGTCAACT
-+
-67777788888888888888888877776555443220120//---,-,,++'**))))')((&'('&&%"#""#"
- at 30BB2AAXX080903:3:38:990:1689#0
-TTATGCCTCATAGGGATAGTACAAGGAAGGGGTAGGCTATGTGTTTTGTCAGGGGGTTGAGAATGAGATGTCCACC
-+
-67777788888888888888888877776555443222100//..---,,,++****)))))(('('"%$"#$###
- at 30BB2AAXX080903:3:58:1114:987#0
-TCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATACATAC
-+
-6777718888888888888888887793652544302210/....--,+-,+***))*()(()((''&$&%%%"#%
- at 30BB2AAXX080903:3:58:1115:989#0
-TCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATACAAAC
-+
-67177388888888888888888877516543443.12201../.,-,-,,+*+*))*()(()((&'&$&%%###%
- at 30BB2AAXX080903:3:36:815:995#0
-AGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAAGGAAGGGGTAGGCTATGTGTTTCTCCTGCN
-+
-67777788888888888888888877776555443222100//...--,-+++***))))))(('''"$"$""#""
- at 30BB2AAXX080903:3:55:523:972#0
-GTAGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAAGGAAGGGGTAGGCTATGTGCAGATCGTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&$"""%#""#
- at 30BB2AAXX080903:3:1:1636:466#0
-TGTCGTAGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAAGGAAGGGGTAGGCTATNTCNACTT
-+
-67777788888888888888888877776555441232100//...-+-++++*+)))))')((%'('""#"####
- at 30BB2AAXX080903:3:40:1692:462#0
-TCTGTTTGTCGTAGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAAGGAAGGGAGATTGGGCTG
-+
-67777788888888888888888877776555443222101///.---,-,++)+***)(())(((($$"%$""#"
- at 30BB2AAXX080903:3:58:1667:376#0
-TCTGTTTGTCGTAGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAAGGAAGGGGCACACAACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''%$$%%%#%""
- at 30BB2AAXX080903:3:35:1581:96#0
-GATTTTAGGTCTGTTTGTCGTAGGCAGATGGAGCTTGTTATAATTATGCCTCATAGGGATAGTACAANTCACGCNN
-+
-67777788888888888888888877774555443222100//..---,,++)****)*())'((('"&"$%"$""
- at 30BB2AAXX080903:3:44:1025:712#0
-AATGAGCGATTTTAGGTCTGTTTGTCGTAGGCAGATGGAGCTTGTTATAATTATGCCTCAGATCGGAAGGGCGGTG
-+
-6777778838888888888888886771655544222200//..-.--,,-,+**))*)())((((&%$"#$##"#
- at 30BB2AAXX080903:3:44:450:1782#0
-GTACTATCCCTATGAGGCATAATTATAACAAGCCCCATCTGCCTACGACAAACAGACCTAAAATCGCTCCTTGCAT
-+
-67777788888888888888868877776555250222.00./..--++,++++*+)*)()((('(''%"%%%%$#
- at 30BB2AAXX080903:3:41:367:1046#0
-TACTATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATA
-+
-67777788888888888888888877776555443222100//..--,,,++++**)))))()(((&%%&%%%$##
- at 30BB2AAXX080903:3:57:447:1741#0
-TATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()('''$&%"%###
- at 30BB2AAXX080903:3:52:1227:1808#0
-GGCTGATTGAAGAGTATGCAATGAGCGATTTTAGGTCTGTTTGTCGTAGGCAGATGGAGCTTGTAGAGCGGGGACG
-+
-67777788888888888838/888777;6555343212100//.---,,,+++***))*())(('(%"$#&""##"
- at 30BB2AAXX080903:3:3:1594:36#0
-TGGCTGATTGAAGAGTATGCAATGAGCGATTTTAGGTCTGTTTGTCGTAGGCAGATGAGATAGGAAGCNTGCTNCN
-+
-677,778888888888888688887717655544322,100//.-(--,,+&++*())))'#(((&'%""##""#"
- at 30BB2AAXX080903:3:34:238:1981#0
-TATGTGGCTGATTGAAGAGTATGCAATGAGCGATTTTAGGTCTGTTTGTCGTAGGCAGATGGAGCTTNTACCACNN
-+
-6777778888888888888888887777:55544322110.0/..----,+++**))*(()(()'''"""$#$#""
- at 30BB2AAXX080903:3:41:989:895#0
-ATTATAACAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATCC
-+
-67777788888888888888888877776555443222100//..----,,+++***)))))(((('&&%%##$""
- at 30BB2AAXX080903:3:48:112:1397#0
-ATAACAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCCTATCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*)((('''$"$"#"$##
- at 30BB2AAXX080903:3:51:932:211#0
-ACAAGCTCCATCTGCCTACGACAAACAGACCTAAAAACGCTCATTGCATACTCTTCAGATCGGAAGAGTCTCGCGC
-+
-6777770888888888-8888888777765554432#21/1/...-.,,-+'+**'()))()('(('%"######$
- at 30BB2AAXX080903:3:53:665:1041#0
-CAAGCTCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCACCCACATAGGCGACTC
-+
-67777788888888888888888827776555443222111-...,,-,,+,*****)*)(&('(&'&$""%###"
- at 30BB2AAXX080903:3:46:1195:1334#0
-TCCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCCCTCGCCAC
-+
-6777778888888888888888887777655244322210.//.'-,-,,+,+***)*)(()(((('%#"#"#"""
- at 30BB2AAXX080903:3:49:416:31#0
-CATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGATGCCAGC
-+
-67777788888888888888888877776555443222100//..----,+,+*+*)))())((((($#"###""#
- at 30BB2AAXX080903:3:36:1016:1573#0
-GCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTACCTCTACN
-+
-67777788888888888888888877776555443221100//.----,,,,++***()*))((((%'$$#"###"
- at 30BB2AAXX080903:3:37:950:497#0
-GCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTACCAGTCGN
-+
-67777788888888888888888877776555443222100//..---,-++++++)))))))(((%&"%&$"%""
- at 30BB2AAXX080903:3:33:826:1300#0
-TACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTAACNGCCACCNN
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))))))(((((""$####""
- at 30BB2AAXX080903:3:3:1143:1970#0
-TACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTAACANCCANNCA
-+
-67777788888888888888888877776555443212.0///..--,,,,*+++))'))%)(%(''$""$$""$#
- at 30BB2AAXX080903:3:40:1183:916#0
-AGAATGGCTGTTACTACGAGGGCGATGTGGCTGATTGAAGAGTATGCAATGAGCGATTTTAGGTCTGTTTGTCGTA
-+
-67777788888888888888882+777765.54022/21///...-,-,,-*+)*(%)))()(''''"$%&$#$##
- at 30BB2AAXX080903:3:40:1184:917#0
-AGACTGGCTGTTACTACGAGGGCTATGTGTCTGATTGAAGAGAATGCAATGAGCGATTGTAGGTCTGCTTGTCTAA
-+
-677*77888888888888888/2877776%/545322210./&.,--',),*+****)#)&)(((&'"$%&&$"#"
- at 30BB2AAXX080903:3:35:1634:300#0
-ACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGAGATCGGANCCTCACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((((&"$$$$##""
- at 30BB2AAXX080903:3:4:676:1466#0
-TGAGAATGGCTGTTACTACGAGGGCTATGTGGCTGATTGAAGAGTATGCAAAGATCGGAAGAGCGGTCNCGCANAN
-+
-6777778888888883/88.888877376+55,33(22/0//..,,+,&(++*))&))&)('(#((&""%"$""#"
- at 30BB2AAXX080903:3:48:964:534#0
-GACGAGAATGGCTGTTACTACGAGGGGTATGTGGCTGATTGAAGAGTATGCAATGAGAGATTTTTGGGGAGGTTTG
-+
-67777788888888888.02888877+&:/5)34*22%10.#/.--"+',))*)*)*#*''))(&'&"""$"#"#"
- at 30BB2AAXX080903:3:36:1229:1719#0
-CAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTAACAGCCAACCTCTACN
-+
-67777788888888888888888877776555443222100/...---,-+++***))*))(((('#"$$&&#"#"
- at 30BB2AAXX080903:3:1:726:1205#0
-CAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTAAAGATCGGAAGANCTNACAA
-+
-677777888888888888888888777765558432220/00/...,,-,,**+')*'*()((('''%""#"$$#"
- at 30BB2AAXX080903:3:48:1339:1623#0
-GTTTGGATGAGAATGGCTGTTACTACGAGGGCTATGTGGCTGATTGAAGAGTATGGAATGAGCGATTATGCAGTGN
-+
-6777778888888888888/88087877655241332*1&//'..*+,-*+&+**#())(()%)'%'"%"#""##"
- at 30BB2AAXX080903:3:50:670:574#0
-AGGGGGTTTGGATGAGAATGGCTGTTACTACGAGGGCTATGTGGCTGATTGAAGAGGATGCAATGAGCGAGCATAG
-+
-677777888888888888888888/77796551432+1)/0+/..--+,,+(+***&)()%&('(''""""%$#""
- at 30BB2AAXX080903:3:3:677:1857#0
-TTCAGGGGGTTTGGATGAGAATGGCTGGTACCACCAGGGGGAAGGGGCTGGTTGGAGAGGATGGAAAGNGCGNNGT
-+
-67777788888888/88488888877774/*$1-"'121$&%#-%--&$,(&+)'*())((#(##(%""&"$"""#
- at 30BB2AAXX080903:3:53:1563:1983#0
-TCATTGCATACTCTTCAATCAGCCACATAGCCCTCGTAGTAACAGCCATTCAGATCGGAAGAGCGGCACACCACCA
-+
-677777888888888888888888777765'5,432121/0/...,,,,-*+*)+'**)(((('(('$$%%#%##%
- at 30BB2AAXX080903:3:54:153:385#0
-CCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGGTCCCACCAGGGGGGTGTGGGTGGCCTTGGCGTGCTGTA
-+
-677777888848888888888888+77-5'5.4$/22'&#,##('),,+)*%#()*)$#('#''###%&#"#""""
- at 30BB2AAXX080903:3:44:475:316#0
-GCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGGTACTACGAGGGGGATGTGGGTGGTTGGAGGGGGGGCA
-+
-677777888888888888888888777765554432220$,--,),(,,,)$%&*))*(')'#('#'&"&"""#""
- at 30BB2AAXX080903:3:42:992:134#0
-CTGCGCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGGGACTACGAGGGGGATGTGGGTGGTTGCGGCTCC
-+
-67777788888888888888888877776555442322100/.$%,*',()+++&###'#((&#(##&&#&&###"
- at 30BB2AAXX080903:3:2:618:834#0
-CTCTTCAATCAGCCACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGATCGGAATNCCACACT
-+
-67777788888888888888818877376365)43200101...----,++****)*)(()''(('%""""#%#$#
- at 30BB2AAXX080903:3:4:295:1551#0
-TCTTCAATCAGCCACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGCNCCACNCN
-+
-6777778888888888888888887727852904351.20//+--*+,),,*+)')()))('(((''%"#$"%"""
- at 30BB2AAXX080903:3:4:1755:405#0
-TGACTGCGCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGGTAGTACGAGGGGTATAGAGATGNTCACNCN
-+
-67777788888888888888888877736555443222100/...-+&$+*$*$***(&'&'''###%"##$%"$"
- at 30BB2AAXX080903:3:59:991:1691#0
-TGACTGCGCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGTTTTTACGAGGGGGATGTGGGTATGTGACCA
-+
-67777788888888888888888877776555343222/00/...+,#$+($'%***#&##%#('##""&""#$#"
- at 30BB2AAXX080903:3:42:580:215#0
-TTCAATCAGCCACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCCGAAGCTTCACCGGCGCAGTCCTC
-+
-6777778888888888888888887777655544322210///...--,+,++*)*))))))()((''&%%$%"$#
- at 30BB2AAXX080903:3:45:1397:883#0
-CCACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCAAGATCGGAGCT
-+
-67777788888888888888888876776555443232200//,.---,,,+++***)))()&('''"$"#$"#""
- at 30BB2AAXX080903:3:38:1423:1370#0
-CACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCATTCCTCTAGCGC
-+
-6777778888888888888888887777655544222/100/./..-,+,+**()*()()(#(((&&""&&#""#"
- at 30BB2AAXX080903:3:53:176:2039#0
-CACATAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGAGATCTGACTCCCTC
-+
-677777888888888888888888777365558132.2/00...,.--,,++))**(*(%((((''%'%$$$"$#$
- at 30BB2AAXX080903:3:44:227:1032#0
-CGTGGGCGATTATGAGAATGACTGCGCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGGTAGTACGAGGGG
-+
-67777788888888888888888877776555443222100//..,--,,+,++***))))(()&##&"#%"$%#%
- at 30BB2AAXX080903:3:38:1791:835#0
-AGTCCGTGGGCGATTCTGAGAATGACTGCGCCGGTGAAGCTTCAGGGGGTTTGGATGAGAATGGCTGCGATCGCNN
-+
-677777888888888)888888887777655544122210/....---,&,++**))*))))(('('"&$"#"$""
- at 30BB2AAXX080903:3:54:612:516#0
-GTAACAGCCATTCTCAACCAAACCCCCTGAGGCTTCACCGGCGCAGTCAGTCTCATAATCGCCCACGGTAGTCGGA
-+
-6-77578888888888(888888807776-454&32.0.00'/,*-,-,*,++***)*))))(((%%"""&$$$##
- at 30BB2AAXX080903:3:41:493:769#0
-CAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGACTCACATCCCC
-+
-67777788388888888828888877776555443222100/0--,-,,,+'++)'*(())((((&'&%%$#$""#
- at 30BB2AAXX080903:3:1:1404:845#0
-TAGTAATGAGGATGTAAGTCCGTGGGCGATTATGAGAATGACTGCGCCGGTGAAGCTTCAGGGGGTTTNTANACAT
-+
-67777788888888888888883877776555443221100./.,-,-,,+++**)))'())((('#'""#"%$#"
- at 30BB2AAXX080903:3:55:480:1425#0
-AATAGTAATGAGGATGTAAGTCCGTGGGCGATTATGAGAATGACTGCGCCGGTGAAGCTTCAGGGGGTTCGTAGTA
-+
-67777/888888888888888888-777'55544322210&/...---+-++****)*()((()'('$"##""##"
- at 30BB2AAXX080903:3:42:1284:817#0
-AAACCCCCTGAAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGACTTACATCCTCATTACTATTCTGCCT
-+
-67777788888888888888888877776555543221100//-.--,-,+++*+**))))((((('&&%&&%###
- at 30BB2AAXX080903:3:49:1486:1543#0
-CCCTGAAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGACTTACATCCTCATTACTATTCTGTCTCTCTG
-+
-67777788888888888888888877776555443.2,10010.-.,-,-++)+*)**))()(((('%"###""""
- at 30BB2AAXX080903:3:38:1054:990#0
-GAAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGACTTACATCCTCATTACTATTCTGCCTAGCCAACTC
-+
-67777788888888888888888877776555443222100///.-.,+-+++*+*)**()))((('$&&#&"$%%
- at 30BB2AAXX080903:3:34:1195:1306#0
-CACCGGCGCAGTCATTCTCATAATCGCCCACGGACTTACATCCTCATTACTATTCTGCCTAGCAAACNCACACTNN
-+
-6777778888888888888888887757655541/220&/1./..,+,++*++***)$)*(((((''"%$%#%#""
- at 30BB2AAXX080903:3:45:785:1387#0
-GTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTGGGCGATTATGAGAATGACAGCGCG
-+
-67777788888888888888888877776552443222100//.-----,+++***)*)))(((((''$$"$$###
- at 30BB2AAXX080903:3:50:236:688#0
-CGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTGGGCGATTATGAGAAGTCCCGCTG
-+
-67777788888888888888888877776555443222100//..-----+++**)))))))(((('$#%#$"#""
- at 30BB2AAXX080903:3:47:63:993#0
-CAGTCATTCTCATAATCGCCCACGGACTTACATCCTCATTACTATTCTGCCTAGCAAACTAGATCGGCCGCCCTCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))(((((&%#"$#$"##
- at 30BB2AAXX080903:3:2:230:1581#0
-TGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTGGGCGATCNCTCNNAA
-+
-6777778888888888888888887777635546302220/....---+,++*+**)*)()))('('""%%$""""
- at 30BB2AAXX080903:3:54:328:228#0
-TGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTGGGCGATTACGAGCAG
-+
-67777788888888888888888877776555443.22100/...----,+++**))))()))((''"#"%%%#""
- at 30BB2AAXX080903:3:56:739:1440#0
-GACTGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTAGATCGGTCTTCT
-+
-67777788888888888888888877776555443222100//..---,,+++****)*)(((((('&$%##""#"
- at 30BB2AAXX080903:3:34:331:129#0
-TGCGACTGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTGNTACACANN
-+
-67777788888888888888888877776545443222100././----,+++*+())*))())'&&"""%$##""
- at 30BB2AAXX080903:3:53:330:158#0
-GATGCGACTGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGTATGGTGCG
-+
-67777788888888888888888677776555443221100./-,---,,,++***)*))()((((&"""#"""#"
- at 30BB2AAXX080903:3:45:933:1091#0
-ATGATGCGACTGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGATGTAAGTCCGAGGTCGG
-+
-67777788888888888888888877776555443222100//..---,,+++**))))))))('(&'$$%"""$$
- at 30BB2AAXX080903:3:57:756:377#0
-CCCACGGACTTACATCCTCATTACTATTCTGCCTAGCAAACTCAAACTACGAACGCACTCACAAGATCGNCAACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()''''$"#""##$
- at 30BB2AAXX080903:3:51:1719:36#0
-AGAGGATTATGATGCGACTGTGAGTGCGTTCGTAGTTTGAGTTTGCTAGGCAGAATAGTAATGAGGGNCAAAACCA
-+
-67777788888888888-888878+777+5554132221*0//..$-,,,(,+)*%))())'((('%"$%%$$$$$
- at 30BB2AAXX080903:3:59:1368:120#0
-ATCCTCATTACTATTCTGCCTAGCAAACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTACANNA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))()(('$$%#$#""#
- at 30BB2AAXX080903:3:52:63:581#0
-GTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCGACTGTGAGTGCGTTCGTAGTTTGCGCATGCTCG
-+
-62777788883888888888888877776555343222100//..--,,+++++*)**)(((((''#&&"%%%$#%
- at 30BB2AAXX080903:3:46:1457:1088#0
-AGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCGACTGTGAGTGAGTTCAGATCGGAGGTGTNGTG
-+
-67777788888888888888888877776555443222100//.----+,++++'*(()))((((('"""""""#"
- at 30BB2AAXX080903:3:56:562:1845#0
-AGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCGACTGTGAGTGCGTTCGTAGTTTGAGGTTCTAC
-+
-67777788888888888888888877776555443222100//...--,,+++***)))))(()('('&"$##"##
- at 30BB2AAXX080903:3:3:1139:105#0
-AAGCTATTAGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCGACTGTGAGTGCGTTTCNAGACNTN
-+
-67777788888888888888888877776565443222100//..-.--,*++)****))))'('(#$""###"""
- at 30BB2AAXX080903:3:49:348:929#0
-CAAACTACGAACGCACTCACAGTAGCATCATAATCCTCTCTCAAGGACTTCAAAAGAACGGAAGAGCGTGCCGCTG
-+
-67774788888888188882888%7715955544*(-1+0,.%,-.(()+$(***''##((&((#&%&$#"#"#""
- at 30BB2AAXX080903:3:48:1646:1293#0
-AACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATCCGTCTCT
-+
-6777778888888888888888887777655541322210/0/..---,,+++****))')))((''&##""#$#$
- at 30BB2AAXX080903:3:59:1452:702#0
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATAGCCACACANCA
-+
-67777788888888888888888877776555443222100//./---,,,+++**)*)))(((((%$$%%%$"#$
- at 30BB2AAXX080903:3:1:1783:1278#0
-CTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCGANCANTAGT
-+
-6777778888888888888888887777655544522210/./..,--,,+++***))))))((''&$"#""""""
- at 30BB2AAXX080903:3:49:1354:407#0
-TGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGATGCCTGCGANA
-+
-67777788888888888888888877776555443222100//..---,,++++*+)))))))((('"%"#$"#""
- at 30BB2AAXX080903:3:51:218:1778#0
-CTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGTTTGAAGTCCTTGAGAGAGGATTATGAGGNTACCTA
-+
-6777778888888888888888887777635546312210-//.,---+-+++***))))(&(((''"""#"##""
- at 30BB2AAXX080903:3:33:747:1400#0
-AGCGAGGCTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGGAGAGTTTGAAGTCCTTGAGAGAGGNACATTANN
-+
-67777788888888888858888877736552443202101/'...-+,,+)++*)(**)(()((('""$%##"""
- at 30BB2AAXX080903:3:60:353:1863#0
-ATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAGATCANGANN
-+
-67777788888888888888888877276555443222100//.----,,+++***)*)))(((((&'%%$""#""
- at 30BB2AAXX080903:3:43:19:1832#0
-GGTTAGCGAGGCTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGTTTGAAGTCCTTGAGATGCACACCC
-+
-67777788888888888888888877776355443222100//..---,,+,+***))))()(((''""#"$##"#
- at 30BB2AAXX080903:3:2:1733:831#0
-TAAGGCGAGGTTAGCGAGGCTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGTTTGAAGGCNATGACAC
-+
-677777888888888888880888177765$0441222100-.-.---',++**)))))'())(((#"""%%$$##
- at 30BB2AAXX080903:3:33:1212:25#0
-GTGGGGGGTAAGGCGAGGTTAGCGAGGCTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGNTCGTCANN
-+
-67777788388888888888888877776555443222000//..---,,,++***())))('('(&""$""$#""
- at 30BB2AAXX080903:3:54:1442:756#0
-AGTGGGGGGTAAGGCGAGGTTAGCGAGGCTTGCTAGAAGTCATCAAAAAGCTATTAGTGGGAGTAGAGAGCGGCCA
-+
-67777788888888888888888877776555443222110//..---,,+,+**+**))))('(''&&#&#"###
- at 30BB2AAXX080903:3:54:456:1969#0
-TAATAGTGGGGGGTAAGGAGAGGTTAGCGAGGCTGGCTAGAAACAATCAAAAAGCTACTAGGGGGAGGAGTGTGTG
-+
-677777.8888888888888/88847776355'432221/&-++*&-*,+*'**))'#)')%#((#(""$"$"#"#
- at 30BB2AAXX080903:3:3:159:219#0
-CTCCCAGTAGGTTAATAGTGGGGGGTAAGGCGAGGTTAGCGAGGCTTGCTAGAAGTCATCAAAAAGTCNCAACNCN
-+
-6777778888888888480888187071:5253430112-0-/,+--,$+)+'+*&#)(#(((((&#&"&$"#"#"
- at 30BB2AAXX080903:3:40:1765:1238#0
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTAACCTACAGGTGCGACT
-+
-67777788888888888888888877776)55443222200//.-,----,,+***)))()(('('%%"$"""##"
- at 30BB2AAXX080903:3:1:220:785#0
-AGCACAGAGAGTTATCCCAGTAGGTTAATAGTGGGGCGTAAGGCGAGGTTAGCGAGGGTTGGCGGCGANTCNCACA
-+
-$371.384828-8%--+)')&)03(.)+)%("1-/+%,$(&%+#,)*($$$'#'#'###########$""#"$"##
- at 30BB2AAXX080903:3:41:747:1782#0
-CTAGCACAGAGAGTTCTCCCAGTAGGTTAATAGTGGGGGGTAAGGCGAGGTTAGCGAGGCTTGCTAGAGGTCATCC
-+
-67777788888888888888888877776555443222100//...-,,,+++*)**))())('(''%"%"#"#"$
- at 30BB2AAXX080903:3:44:1652:35#0
-GATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCTGCGTCCGG
-+
-67777788888888888888888877776555143222100./,-+,,+,+)++')')))((((('(&&"""$"""
- at 30BB2AAXX080903:3:8:1217:1635#0
-GACTTCTAGCAAGCCTCGCTAACCCAGACTTACCACCCACTAGTAACCTACTGGGAGAACTCTCTGCNCTACATNN
-+
-677777488882888&888*8888&'7&6)6244*2020/&'+.,,-,+*++++*))&)(')(('('""#"%$"""
- at 30BB2AAXX080903:3:50:547:240#0
-GGTTACTAGCACAGAGAGTTCTCCCAGTAGGTTAATAGTGGGGGGGAAGGCGAGGGTAGCGAGGCTTATGTCACAT
-+
-67777788888888888888888877776550443222000//..---,,+++**'&))))'((&&'""#"##$#"
- at 30BB2AAXX080903:3:36:86:1966#0
-GAGAACGTGGTTACTAGCACAGAGAGTTCTCCCAGTAGGTTAATAGTGGGGGGTAAGGCGAGGTTAGATACTAGNN
-+
-677777888888888888888888777765554130321/0//./-,-,,+++)***)))((('((&$"""##"""
- at 30BB2AAXX080903:3:36:1555:1366#0
-ATTTGATCAGGAGAACGTGGTTACTAGCACAGAGAGTTCTCCCAGTAGGTTAATAGTGGGGGGTAAGACAATACNN
-+
-67777788888888888888888877776555443222100./..,--,,+++***))**)((&(''%$"##"#""
- at 30BB2AAXX080903:3:53:812:2016#0
-ACCCCCCACTATTAACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAGATCGGACGAGCTTA
-+
-67777788888888888888888877776535443221110//.+.-,,,+++****))())((#('"$#""#""#
- at 30BB2AAXX080903:3:43:619:203#0
-ACCCACTATTAACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTT
-+
-67777788888888888888888877776555443222100//..-,,-,+++*****))))((((''&&&&%%$%
- at 30BB2AAXX080903:3:33:902:1486#0
-TATTAACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTANACCCTGNN
-+
-6777778888888888888888887777655544322210//+...-,,,,,++*+)*)*))()('(""#$$""""
- at 30BB2AAXX080903:3:56:354:1212#0
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGCCTCTA
-+
-67777788888888888888888877776555443222100//-.--,,,-+++****)*)))(((''&%"$$#"#
- at 30BB2AAXX080903:3:53:801:363#0
-AGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGGTTACTAGCACAGAGAGTTCTCCCA
-+
-67077788888888888888888877776555443222100//..---,,++++***))))))(('''$#%&%$##
- at 30BB2AAXX080903:3:43:350:266#0
-TGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGGTTACTAGCACAGAGAGG
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))()((''&%&%%%%#"
- at 30BB2AAXX080903:3:56:1089:1123#0
-GCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGGTTACTAGCGCATCAG
-+
-6727778.8888888888888888787165554&3022100/../---'--+****()%))')(&''&%"##"#""
- at 30BB2AAXX080903:3:57:349:761#0
-GCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGGTTAGATCGGAAACTA
-+
-67777788888888888888888877776555443222100//..-.-,,+++*+*)))))(()'(''&&#"###"
- at 30BB2AAXX080903:3:44:1591:255#0
-TGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGCCCTC
-+
-67777788888888888888888877776555443222100//..-.-,,+,+**+)))))()((('&&"%#%$""
- at 30BB2AAXX080903:3:36:480:565#0
-TAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGGTTCTTCGCACN
-+
-67777788888888888888888877776555443220100///.----,,++++*))))(((('''$"#$$%"#"
- at 30BB2AAXX080903:3:39:226:1400#0
-CTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGNCCTATACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&"&#&%##$#
- at 30BB2AAXX080903:3:45:1561:1406#0
-AGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAACGTGAGATTCGC
-+
-677777888888888888888888777765054(322,1000/..---,,+++*+*)*)))((((''%#$#"""""
- at 30BB2AAXX080903:3:59:437:1417#0
-TAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGCCCTCAACNC
-+
-67777788888888888888888877776555443222100/...-,+,,,+++***)*))()(((%'$&$"##"#
- at 30BB2AAXX080903:3:3:168:1152#0
-AGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGAGAANCGCANCA
-+
-67777788888888888888888877776555443222100/....--,,++++**)))*)(((('(""#"##""#
- at 30BB2AAXX080903:3:47:459:1772#0
-TAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGGCTGGCGAGG
-+
-677.77888828888888888)877717654540322210-*...*--,,++'*(*(()))((('''""""##"""
- at 30BB2AAXX080903:3:53:238:1269#0
-ATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTTGATCAGTCGACAT
-+
-67777788888888888888888877736555443222/0///...-,,,+)++**))()))((((%"$""""##"
- at 30BB2AAXX080903:3:50:1375:1575#0
-TAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGATATTCGCTCAGAC
-+
-67777788888888888888888877776555443222100//.-----,++++**))))((()(('$"$"#""""
- at 30BB2AAXX080903:3:37:474:1232#0
-TGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGAGAGTGTCACTN
-+
-67777788888888888888888377776555443220100//..---,,+++*****)))((('(#"$%"###""
- at 30BB2AAXX080903:3:55:748:664#0
-ATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGTAAGTAGGANGGTGCT
-+
-67777788888888888888888877776555443222100//.----,,++++**)))))))((('&""""""#"
- at 30BB2AAXX080903:3:39:939:1279#0
-CTACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATCGTGCATCG
-+
-677777888888888888888888777765554432220000/./--,,,++++*)***))))((''"#""$""#"
- at 30BB2AAXX080903:3:52:153:1296#0
-GAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCATGTACGA
-+
-6777778888888888888888887177655544322200.//..---,,+++)*))(())(((''%$""&"%""#
- at 30BB2AAXX080903:3:59:234:456#0
-GAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTGAGTCCTGAANNC
-+
-6777778888888888888888887777655544322200///..---,,-++**)))))))((('('%&"##"""
- at 30BB2AAXX080903:3:53:1222:1551#0
-GTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGGGACTAGTATGTTGAGTCCTGCAG
-+
-67777788888888888888888877776555443222100//..---,,++%**))*)))(((''#""$#%$#$$
- at 30BB2AAXX080903:3:38:510:962#0
-GGTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTAGTATGTTAGACGAGGAC
-+
-67777788888888888888888877776555443.22100//..---,,*,+**))*)))()(((("'##%$$%$
- at 30BB2AAXX080903:3:33:1222:1852#0
-TCAACATACTAGTCACAGCACTATACTCCCTCTACATATTTATCACACCACAATGGGGCGCACTCACNCCCACTNN
-+
-6777478888888888881)888877776555442222100/)/-.-+,,,++*)+**)(''(((('"%%##%"""
- at 30BB2AAXX080903:3:33:308:1592#0
-CAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCAAGNCTCAACNN
-+
-67777788888888888888818877776555143212100.//-.--,,,,+**))**)()(((&'"$#$"#$""
- at 30BB2AAXX080903:3:36:803:2042#0
-CAACATACTAGTCACAGACGTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCGTCACGANN
-+
-67777788888888888,&*888''7//6.554/222200.+,/,.-,,,,*)***'#(%(#'(''&""$#$"#""
- at 30BB2AAXX080903:3:41:1699:869#0
-AACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACTTACTTA
-+
-677777888888888888088888777765554432221000/..---,,+++****)*)))(((('&$""%%$$#
- at 30BB2AAXX080903:3:57:1492:735#0
-TAATGTGGTGGGTGAGGGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGGTGTGACACATTACTG
-+
-67777488888888888888888877774544443212000//.,---,,+)+*)*'*))')('((#$$#$"$#""
- at 30BB2AAXX080903:3:39:791:1811#0
-TTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACTTGCTGCC
-+
-67777788888888888888888877776555443222000/...---+,+++***)*)))'(('(&%$"&"%"##
- at 30BB2AAXX080903:3:60:1231:838#0
-TTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTGACCGCTACNN
-+
-67777788838888888888888877776555443222100//..---,,++**+*)))))((('''""##"##""
- at 30BB2AAXX080903:3:33:829:34#0
-ATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCNACTCGCNN
-+
-67777788888888888888888877776555443222100...---,+,*++*****))))(((('""#""""""
- at 30BB2AAXX080903:3:3:1202:1782#0
-ATACTAGTCACAGCCCTATACTCCCTCTACAAATTTACCACAACACAATGGGGCTCACTCACCCACCANCTTNNCA
-+
-67777788888888888888888877776550343222.00//..--,,,,+++****)))((((('&"%&%""#%
- at 30BB2AAXX080903:3:4:1311:1186#0
-TGTTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTATAGGGCTGTANCTCANTN
-+
-67777788888888888888888877776552443222101/-.---++,*,+***#))'))(##(#$"$%##"""
- at 30BB2AAXX080903:3:39:327:706#0
-CTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACAGTAACCACA
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))))((('$$&#$$###
- at 30BB2AAXX080903:3:36:833:1796#0
-TAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATCAACTCANN
-+
-67777788888888808888+888767765/54$32220.0//.,---,-+*+**))()))()((''&$&&$%#""
- at 30BB2AAXX080903:3:8:1122:365#0
-TCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAANACCACANN
-+
-677777888888888888888888777765554432221/0//..-.-+-+++*****)(*)()(('"#$#$%$""
- at 30BB2AAXX080903:3:60:1423:1485#0
-GTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAAATATGTAGAGGGAGTAACCAACCNN
-+
-677777888888888888888888777765553333,2100//..,---,+*+****)*')()'(&%$%%&%$%""
- at 30BB2AAXX080903:3:1:1551:1891#0
-CAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCAGATCGGAAGANCTNCTNC
-+
-6777778888888888888888887777655544321.//....--+,+,++++**)))'(((''''&"%$"##""
- at 30BB2AAXX080903:3:45:359:1834#0
-CAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATCAACCC
-+
-67777788888888888888888877776555443222100//..---,,++++****))))((((''%&"&$#$$
- at 30BB2AAXX080903:3:42:1717:1361#0
-GTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGGAAATATGTAAGGTGGGG
-+
-677777888888888888888888777765554432-2001/..-.+,-,++++*%))#&(('((('&%&#%"#""
- at 30BB2AAXX080903:3:46:1735:575#0
-CTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAGATCGGTAGAGTGGT
-+
-67717788888888888888888877776/554/11211001....---,++++**)*)()))((('$$%"""#""
- at 30BB2AAXX080903:3:38:782:728#0
-CGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAAATAGCTAGATCA
-+
-6777778888888888888888887777655544322*100//..---,,,+++***))))(()(('""$#"""##
- at 30BB2AAXX080903:3:51:817:250#0
-CCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCAATCACACGA
-+
-67777788888888888888888877776555443222100//.--,-,,,+++*+)*))))()(('""$#%#$$"
- at 30BB2AAXX080903:3:59:808:886#0
-TTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCCCCATTGTGTTGTGGTAACTCACAGA
-+
-67777788888888888888888877776555443222100./-..--,,+,+***)*)))))('(''"%"&$""#
- at 30BB2AAXX080903:3:42:184:622#0
-CATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAACA
-+
-67777788888888888888888877776555443222100//..---,,+++****))))(((('&'$%&#"%##
- at 30BB2AAXX080903:3:48:1490:1015#0
-ATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGCTAGCACT
-+
-67777788888888888888888877776555443222100//..----,+++*+*))*)))(((''&$"""####
- at 30BB2AAXX080903:3:45:831:918#0
-TACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAGACACGAG
-+
-6777778888888888888888887777655546322210///..--,,,+,++****))*()((('$""#"""""
- at 30BB2AAXX080903:3:42:1771:292#0
-ACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAGATCGGCAGANCGC
-+
-6777778888888888888888887777655544322210///..---,,++****)))))((((('$$%&#""##
- at 30BB2AAXX080903:3:3:858:138#0
-AACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCCCTCNCTCTNCN
-+
-6777778888888888.838888867776556343222100//..,---,+++**&*')((((####%"%"$#"#"
- at 30BB2AAXX080903:3:47:631:253#0
-GAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTGAGCAGATCANAACG
-+
-67777788888888888888888877776555443222100//..---,-+++***))))(((((('$%$""""$#
- at 30BB2AAXX080903:3:42:423:1325#0
-TGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTGAGTAGATCCGAGGACAC
-+
-67777788888888888888888877776545443222200//..---,,++++**)()()(((('#"$"""""#"
- at 30BB2AAXX080903:3:33:1774:178#0
-CAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAACACCCTCANGCACATNN
-+
-67777788888888888888888877776555443222100//...--,,++++*))())))(((''""%$%##""
- at 30BB2AAXX080903:3:57:750:514#0
-ATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTTCCTACAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))))(((&&'%$$##$%
- at 30BB2AAXX080903:3:48:660:1679#0
-TGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTATCCACACC
-+
-677777888888888888888888777765554432-020///..----,+++***))(((((((''"#"#%$"$"
- at 30BB2AAXX080903:3:57:786:385#0
-AGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGAGATCGGNACCCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))(()(((('&"#####"
- at 30BB2AAXX080903:3:4:1110:1612#0
-GGATAGGTGCATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGTNCATANCN
-+
-67777788888888888888888,77776555443222/101/.-+*,,+,++++)*))))()(#''$"#"##"#"
- at 30BB2AAXX080903:3:43:1689:1994#0
-GGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGGTGGGTCTCAT
-+
-67777788888888888888888872776552443321100//-.--,-,+++******('))((('&%###"##"
- at 30BB2AAXX080903:3:38:838:1674#0
-ATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAAGATCGGACTNAC
-+
-6777778888888888888888887777+545442222100//..---,,,+++**)*)))((((('$"%&&$"##
- at 30BB2AAXX080903:3:50:1683:1312#0
-ATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTTGTTAATGTGTCGCTGCC
-+
-67777788888888888888888877776555443202100/...---,,)++***)))))((((''&"#"##"##
- at 30BB2AAXX080903:3:40:570:1949#0
-ACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCC
-+
-67777788888888888888888877776555443222100//..--,,,,++**)*)**)()(((&%%&%&$##"
- at 30BB2AAXX080903:3:53:337:1886#0
-ACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCGCTCTAC
-+
-67777788888888888888888877776555443222100//..---,,,++*****))))((((''$"%#%""#
- at 30BB2AAXX080903:3:36:893:750#0
-TGAGGGATAGGAGGAGAATGGGGGATAGGTGTACGAACATGAGGGTGTTTTCTCGTGAGATCGGAATCTGCTAACN
-+
-+77777888888888888888888277765554,3122100//..'-,,,,*+**)))))())((&#%%"""#"""
- at 30BB2AAXX080903:3:40:1329:250#0
-TGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGGTTTTATGTT
-+
-67777788888888888888888877776355443222100//...-,,,+++***)))))((('(&&%&&&&&##
- at 30BB2AAXX080903:3:4:1367:448#0
-TGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTTAGATCGGAAGAGCGGTTCGNCACANTN
-+
-67777788888888888/8888883777635544352.000///.+-,,,+++)**)))))#((#%&""##%#"""
- at 30BB2AAXX080903:3:39:1091:189#0
-TTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATGAGGTTTTTATAA
-+
-67777788888888888888888877776505443222100/0..-,-,-,++***()()(())(((""$&#%"""
- at 30BB2AAXX080903:3:59:1374:1579#0
-GGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGAATCACCACNAC
-+
-67777788888888888888888877776555443222100//..---,,&++***))*))()((('"%"%$$"##
- at 30BB2AAXX080903:3:57:1373:1568#0
-ATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTAGATGGGAAGAGACTACA
-+
-+723178883888888+8218&88/7(0665345-21/.-0..--++#),+'*+*&(&#&#'#''##'"$$$$##"
- at 30BB2AAXX080903:3:37:1315:668#0
-TCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAGATCGCTCCTCN
-+
-677777888888888888888888777765554432221/0//..--,,-++++*)*()*)()'('%$"""$#"$"
- at 30BB2AAXX080903:3:2:1048:1326#0
-CATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCNCCCAGCT
-+
-677777888888888888888888377765554432221000/.-.+,,-,++***)*)())((('''""$##"#"
- at 30BB2AAXX080903:3:37:1198:887#0
-CATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCAGCNCTNGN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((("$$"%%"""
- at 30BB2AAXX080903:3:56:326:737#0
-ATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGAGCCCGAC
-+
-67777788888888888888888877746555443222100//-----,,++*****))*)()(((''$""$$"$#
- at 30BB2AAXX080903:3:43:606:985#0
-AATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGAGGGTGTTTTCTCGTGTGGGG
-+
-6777778888888888888888887777655544322220///...-,,,-++**))))&)%()(#'$%"&#$"""
- at 30BB2AAXX080903:3:40:660:615#0
-GAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATAGACGCCTCCCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)**))((((''''$"%""##
- at 30BB2AAXX080903:3:33:673:1967#0
-AACCCGGTAATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAGATGGGAAGNATCTACNN
-+
-6772478-8888888888888888-77765/54,32(2+-0//...+(,,,'+$*))()&'#('%#'""##"$$""
- at 30BB2AAXX080903:3:2:394:930#0
-GAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCATTATNTCGNGAT
-+
-67777788888888888888888877776555443222100//..--,-,,,+****))))()((('"""&&"#"#
- at 30BB2AAXX080903:3:41:310:1955#0
-GAAAACCCGGTAATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAGATCGGTAGAGCAGT
-+
-677777888888288888868888777165514432/2100./..---,+,++*)*))))()()&(("&%###""#
- at 30BB2AAXX080903:3:44:953:144#0
-AACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCAAGATCGGTAGCGCCC
-+
-67777788888888888888888877776555443222100//..-.-,,+++**)))*)(()(('''""#$"#"#
- at 30BB2AAXX080903:3:1:278:1520#0
-GAGGAAAACCCGGCAATGATGTCGGGGTTGAGGGATAGGCGGAGAATGGGGGATAGGTGTATGACCCTNCANATCG
-+
-6777778888888218885-8788777165,544(,,20#0/,--,&---+,)*&+)&*('(((###"""%"$"#"
- at 30BB2AAXX080903:3:59:59:1733#0
-GAGGAAAACCCGGTAATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTGTATGAACATGGTAGNNC
-+
-67777788888888888888888877776555443222100/..-,--,,+++++*))))))(((''&$%"""""$
- at 30BB2AAXX080903:3:1:1325:630#0
-AGAGGAAAACCCGGTAATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGGGTATGAGACNGCNTGTA
-+
-67777788888888883886888877770551443/1010.//-.--,,,+,+**)*(#)'''('('$""""#"""
- at 30BB2AAXX080903:3:49:1641:854#0
-CTATATTTACAAGAGGAAAACCCGGTAATGATGTCGGGGTTGAGGGATAGGAGGAGAATGGGGGATAGGTCATACC
-+
-67777748808888888888.888777765554232221-0//..--,,,+++*+***)))((('''%#"$#"###
- at 30BB2AAXX080903:3:37:1505:44#0
-CTATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGTGTNCTANN
-+
-67777788888888888888888877776502843212200.,.--,++-+,+*****)())('((#"$&"$#"""
- at 30BB2AAXX080903:3:57:1111:991#0
-AGCCTCTGTTGTCAGATTCACAATCTGATGTTTTGGTTAAACTATATTTACAAGAGGAAAACCCGGTACTACATAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))())''(&#""##"##
- at 30BB2AAXX080903:3:2:1471:124#0
-TATAGTTTAACCAAAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTTATTTACCGAGANATACTCC
-+
-6777778888888888888/888877476550443322200/..,--,,,+))*'))))*((('(('%"""#%"##
- at 30BB2AAXX080903:3:50:237:649#0
-AAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCAGATCGGCCGCGCAC
-+
-67777788888888888888888877776555443222110//..---,-+++*+)*)))(((((('"##"""###
- at 30BB2AAXX080903:3:2:452:1277#0
-AACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACNTCCACAC
-+
-677777888888888888888888777765554432320010..-.---,+++**))))))))(('''""##%$#%
- at 30BB2AAXX080903:3:2:453:1275#0
-AACATCAGATTGTGACTCTGACAACAGAGGCTTACGACACCTTATTTACCGAGAAAGCTCACACGAACNGCCACAC
-+
-67777788888888888)88588%$'7265$(4$"21,$0/%/,%--&,,+)****)*()((((((&&""$$%$$$
- at 30BB2AAXX080903:3:41:570:1324#0
-ATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATAAGGGGTCGTAAGCCTCTGTTGTCATAGTACC
-+
-677777888888888888888888774765554432221*/....,--,,*++***)(()())(((''&##"%"#"
- at 30BB2AAXX080903:3:49:82:451#0
-CATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATAAGGGGTCGTAAGCCTCTAGATACGTAGACG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$$#""$"#"
- at 30BB2AAXX080903:3:41:1708:798#0
-AGACATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATAAGGGGTCGTAAGCCTCTGTGCNGNCAT
-+
-67777788888888888888888877776555443222100//...---,+++*)))*)()(((((&'%$"$"##$
- at 30BB2AAXX080903:3:46:1650:1344#0
-AGACATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATAAGGGGTCGTAAGCCTCTGNTGGNGTCG
-+
-67777788888888888888888877776555443222000//+..--,,,++*&))))))(((%''"%%""""#"
- at 30BB2AAXX080903:3:59:195:1028#0
-GTTAGACATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATACGGGGTCGTAAGCCTCTNTTANNC
-+
-67777788888888888808888876776545443222100//..-+,+,,,%***)'))(('(''''$""&#""#
- at 30BB2AAXX080903:3:49:184:1766#0
-GACAACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCAGGACATAAC
-+
-67777788888888888818,38877776445443222/00//.----,,++++*)*)**))&('''"$"#"""##
- at 30BB2AAXX080903:3:58:701:1013#0
-CATGTTGTTAGACATGGGGGCATGAGTTAGCAGTTCTTGTGAGCTTTCTCGGTAAATAAGGGGTCGTATGTCTACT
-+
-677777888888+88888888888777765554432221000/-.--,,,++*******)))((%(''"%"$"###
- at 30BB2AAXX080903:3:50:1244:1771#0
-AGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAACNTACACG
-+
-67777788888888888888888877776555443222100//...-,,-+++**)*)**))(((('"$""$##""
- at 30BB2AAXX080903:3:60:1576:1366#0
-AGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTCAACATCANN
-+
-67777788888888888888888877776555443222100//..---,,+++*****))*((((''&$$%"%%""
- at 30BB2AAXX080903:3:8:747:1374#0
-ACGACCCCTTATTTACCGAGAAAGCACACAAGAACTGCTAACTCATGCCCCCATGTCTAACAACATGNCAGACCNN
-+
-6777778888888,888888,8887'7746554432221/0./.---,+,,*++*')**)))(((''"$""$##""
- at 30BB2AAXX080903:3:50:918:222#0
-AGTTGAGAAAGCCATGTTGTTAGACATGGGGGCATGAGTTAGCAGTTCTAGTGAGCTTAGATCGGAAGACCCCGCN
-+
-67777788888888888888888877776555452222000/...'--,*++++*(**)))))((''$$#"$#"#"
- at 30BB2AAXX080903:3:34:161:1201#0
-TGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGGCATGAGTTAGCAGTTCTTGTGNCGAGCTNN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((''&"$"#"$#""
- at 30BB2AAXX080903:3:39:844:901#0
-AGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAACAACATGGCTTTCTCAAAGATCGGAAGAGCGGCTCTCA
-+
-67777788888888888888888877776555443232100//..---,,,++**+))))))((('('""""""#"
- at 30BB2AAXX080903:3:40:503:373#0
-TGGATAGCTGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGGCATGAGTTAGCAGTTCTTGTCA
-+
-67777788888888888888888877776555443222000//..---,,,++***))))())((('"$&&$%$##
- at 30BB2AAXX080903:3:54:1196:1685#0
-ATGGATAGCTGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGATATCGGAAGAGTGTGCCACCA
-+
-67777788888888888888888877776555443202100//..--,-,+++**(*)())')(((#&###"$##%
- at 30BB2AAXX080903:3:41:982:1276#0
-CCAATGGATAGCCGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGGCATGAGTTAGCGTGTCTT
-+
-67777784888388888888888877776555443222010/,....-,,,++*****))()()('''&$$"%"$#
- at 30BB2AAXX080903:3:49:445:302#0
-GACCAATGGATAGCTGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGGCATGAGTCACCCACCA
-+
-67777788888888888888888877776555443222100//.'.-+,+++++**))))(((('''&&##$##""
- at 30BB2AAXX080903:3:38:834:905#0
-GCTAACTCATGCCCCCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATACATTCTCGA
-+
-67777788888888888888888877776555443222121....--,,,+++**)))*)))(((('""%""#"""
- at 30BB2AAXX080903:3:46:491:111#0
-GGGCCTAAGACCAATGGATAGCTGTTATCCTTTAAAAGTTGAGAAAGCCATGTTGTTAGACATGGGGGTGTCCCGG
-+
-677777888888888888888888777765554432221/0//..---,++++**(*)*)(()((('&""""""##
- at 30BB2AAXX080903:3:40:1201:108#0
-ACTCATGCCCCCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTAGATCGCT
-+
-67777788888888888888888877776)553411200/0//-/,----++***(*(((''(&&''&""$%%""#
- at 30BB2AAXX080903:3:36:1218:1219#0
-TTTTGGGGCCTAAGACCAATGGATAGCTGTTATCCTTTAAAAGTTGAGAAAGCCATGAGATCGGAAGCGGCTATTN
-+
-67777788888888888888888877776555443222100//..---,,++++**))))))(((('$$#"#$#$"
- at 30BB2AAXX080903:3:55:1072:436#0
-TATTTGGAGTTGCACCAAAATTTTTGGGGCCTAAGACCAATGGATAGCTGTTATCCTTTAAAAGTTGAGGTACGCC
-+
-67777788888888888888888877776555443222100//-.---,,,++**))*)')((((('&$""##"##
- at 30BB2AAXX080903:3:59:507:435#0
-AAAGGATAACAGCTATCCATTGGTCTTAGGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAANCTTANC
-+
-67777788888888888888888877776555443222100//...--,,+++****)*))(((''''&"&""""#
- at 30BB2AAXX080903:3:54:1589:1065#0
-GTGTGCATGGTTATTACTTTTATTTGGAGTTGCACCAAAATTTTTGGGGCCTAAGACCAATGGATAACACATAAAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&$$&%"#"""
- at 30BB2AAXX080903:3:50:1451:838#0
-TAACAGCTATCCATTGGTCTTAGGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCTCACTGC
-+
-67777788888888888.888888777765554432221-0//..---,,+++**+)**))((((''%""####"#
- at 30BB2AAXX080903:3:43:893:49#0
-TAGTAGTGTGCATGGTTATTACTTTTATTTGGAGTTGCACCAAAATTTTTGGGGCCTAAGACCAATGGATAGCTGT
-+
-67777788888888888888888877776555443222100//..--,,-+++***))*))()((((&%%"$"#$%
- at 30BB2AAXX080903:3:43:912:716#0
-GGTGGTTATAGTAGTGTGCATGGTTATTACTTTTATTTGGAGTTGCACCAAAATTTTTGGGGCCTAAGACCAATGG
-+
-67777788888888888888888&77)76555443222100/&..---,,+++***)*)))((('''$&$&&%%$%
- at 30BB2AAXX080903:3:57:345:1863#0
-AGTCAGGGTTAGGGTGGTTATAGTAGTGTGCATGGTTATTACTTTTATTTGGAGTTGCACCAAAATTTTTTGTCTC
-+
-6777778888888888888888887777655544322210///..---,,+++***)*))()()(('&$%"$##"#
- at 30BB2AAXX080903:3:41:1343:639#0
-AAGTCAGGGTTAGGGTGGTTATAGTAGTGTGCATGGTTATTACTTTTATTTGGAGTTGCACCAAAATTTTTGTTTA
-+
-677777888888888888888888777560554432,2100/..,--,,,++++*)**(()()((''&'%%#""""
- at 30BB2AAXX080903:3:59:972:1782#0
-CAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAACCACCAGATCGGAAGACTTCAT
-+
-6777778888888888888888887777655244322-100././----,,+++*)*))*)))'(('%"&%""#$"
- at 30BB2AAXX080903:3:53:1343:486#0
-TGGTAAGGATGGGGGGAATTAGGGAAGTCAGGGTTAGGGTGGTTATAGTAGTGTGAGATCGGAAGAGCGGTTGTCG
-+
-677777888888888888888888777765554432221/0//..---,-+++***)*)))()('(&"$%""""#"
- at 30BB2AAXX080903:3:44:410:1284#0
-AATAAAAGTAATAACCATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTAAGATC
-+
-67777788888888888888888877776555443222100/...---,,+++**))))))))('('$'&$&%$$$
- at 30BB2AAXX080903:3:36:1505:1842#0
-CGAGGGTGGTAAGGATGGGGGGAATTAGGGAAGTCAGGGTTAGGGTGGTTATAGTAGTGTAGATCGGATCATGTNN
-+
-677777888888888888888888777765554432221200/..---,,,++***)()()))('(#$$%###"""
- at 30BB2AAXX080903:3:56:386:791#0
-AATAACCATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCNTCAGAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))((((('&"$"&$#"$#
- at 30BB2AAXX080903:3:58:1573:687#0
-AATAACCATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACACACAATACN
-+
-67777788888888888888888877776555443222100/...----,,++****))))(((((&$$$##"##"
- at 30BB2AAXX080903:3:45:1097:1675#0
-TAACCATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTCACCCC
-+
-67777*8888888$88888888887-776521,4121/1$0/.//,.+++,*+*)))(()(%(#'''&&##"$"#"
- at 30BB2AAXX080903:3:3:573:950#0
-CATGCACACTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTCNCCCANCA
-+
-677777888888888882288838777844553432(.0/.//--$-++,+*')*)()))&'(('''""""#""##
- at 30BB2AAXX080903:3:54:441:1322#0
-TTTGTTAGGGTTAACGAGGGTGGTAAGGATGGGGGGAATTAGGGAAGTCAGGGTTAGGGTGGGTATATCAGGCTCT
-+
-677777888888888888888888777765554432/1100//..---,-+++)*))))')(%((''"$##$#%""
- at 30BB2AAXX080903:3:57:856:1914#0
-AATGGGGGTATGAGTTTTTTTTGTTAGGGTTAACGAGGGTGGTAAGGATGGGGGGAATTAGGGAAGTCAGTGGCGC
-+
-67777788888888888888888877776555443322100/0..---,,+++**(*))))))((''&&&$%"###
- at 30BB2AAXX080903:3:35:207:658#0
-TGCGACAATGGATTTTACATAATGGGGGTATGAGTTTTTTTTGTTAGGGTTAACGAGGGTGGTAAGGNCACCAAAN
-+
-67777788888888888888888877774555443222100//..---,+++++*))))))()(('&"$##$""""
- at 30BB2AAXX080903:3:3:115:38#0
-TGAGACAATGGATTTTACATAATGGGGGTATGAGTTTTTTTTGTTAGGGTTAACGAGGGTGGTAAGGANAGACNGN
-+
-6..77-888888888188588686771;)4304422/200./..-.,++++++$*)()&%()'((''""%"##"""
- at 30BB2AAXX080903:3:41:626:1894#0
-TCCTTACCACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTT
-+
-67777788888888888888888877776555440222100/....---,+,+*+*)))))((((('&$%&"##"#
- at 30BB2AAXX080903:3:53:533:390#0
-TAAAGGTGGATGCGACAATGGATTTTACATAATGGGGGTATGAGTTTTTTTTGTTAGGGTTAACGAGGTCGGTTGT
-+
-67777788888888888888888877776565443222&00/..----,,+++***)))#)))%(('%#$"#""""
- at 30BB2AAXX080903:3:47:456:1708#0
-AGAGACTGATAATAAAGGTGGATGCGACAATGGATTTTACATAATGGGGGGATGAGTTTTTTTTGTTNTATATCAT
-+
-(710'-85)8+-8$2,8848833+''%-)+514&(,)-.%&',(,,"'+,$((*#)&'((#(&''%%""$"#""""
- at 30BB2AAXX080903:3:57:130:1479#0
-ACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCTCTCCAC
-+
-67777788888888888888888877776555443222110//..---,-+++***)))))))((('&%&%%####
- at 30BB2AAXX080903:3:35:1380:1969#0
-GTTGTGGGGAAGAGACTGATAATAAAGGTGGATGCGACAATGGATTTTACATAATGAGATCGGAAGANCANAACTN
-+
-67777788888888888888888877776555442222100//..---,-+,++**))))(((((('"&#"%%##"
- at 30BB2AAXX080903:3:56:767:1423#0
-AAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACACCATCAC
-+
-67777788888888888888888877776555443222100//./---,,+,+****)))))((''''"##$##""
- at 30BB2AAXX080903:3:38:1111:615#0
-CCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGTCTTGT
-+
-677777888188888888888-8877776555443222100//------,+++****)*)))((('&"%&#%#$$#
- at 30BB2AAXX080903:3:42:1284:673#0
-TTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTGGATCTT
-+
-67777788888888888888888877776555443222100//..---,-++++*****)))((((''&"####$"
- at 30BB2AAXX080903:3:2:1763:678#0
-CCATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACAGATCGNATCACAT
-+
-67777788888888888888888877776555443322100//..---,-+,++*)**)))(((((&&"#"%%#""
- at 30BB2AAXX080903:3:36:1034:1688#0
-ATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGCAACTGCAN
-+
-67777788888888888888888877776555443222100//..---,,+++++*)))))))((('%##$#"$#"
- at 30BB2AAXX080903:3:56:1118:184#0
-CGAGATAATAACTTCTTGGTCTAGGCACATGAATATTGTTGTGGGGAAGAGACTGATAATAAAGGTGGAGNGNCAC
-+
-67777788888888888888888877776555443222100//..-.-,,+++***))*))((((%'$"""%"$#"
- at 30BB2AAXX080903:3:42:1265:207#0
-GTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCGATA
-+
-677777888888888888888888777765554432121000/..----,+++***)*)))()('(''$$$$"#"$
- at 30BB2AAXX080903:3:48:1064:359#0
-CGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATGTCGCAC
-+
-67777788888888888888888877776555443222100//..-&-,,+,+***))))))(('('%"#$%%"##
- at 30BB2AAXX080903:3:39:1086:869#0
-CCTTTATTATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACCCAC
-+
-67777788888888888888888877776555443222100//..--,+,+++***)*)))))(('''&%%$$"""
- at 30BB2AAXX080903:3:58:396:950#0
-TCAGTGTCAGTTCGAGATAATAACTTCTTGGGCTAGGCACATGAATATTGTGGTGAGAACGGTAGAGCGGCGTCCA
-+
-64777788888888888888888%7775655$4432221.&0/.,-(-,,+&+$*#*()))(&((('&'"%""###
- at 30BB2AAXX080903:3:59:792:622#0
-GGCTCAGTGTCAGTTCGAGATAATAACTTCTTGGTCTAGGCACATGAATATTGTTGTGGGGAAGAGACTCTNACTC
-+
-67777788848888888888888877776555443222100//..---,,+++***)))))))(('(&&$""#""$
- at 30BB2AAXX080903:3:34:268:463#0
-GTGGCTCAGTGTCAGTTCGAGATAATAACTTCTTGGTCTAGGCACATGAATATTGTTGTGGGGAAGANCCTACTNN
-+
-67777788888888888888888877776555443222100//...--,,+++***))*))((((('"$#""%#""
- at 30BB2AAXX080903:3:44:1220:131#0
-TATCAGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGCTATTATCTCGAACTAGATCGGCGGCGCA
-+
-67777788388888888888888877776555443522100//..--#,,,**+*)*)()(((((''&'""###""
- at 30BB2AAXX080903:3:42:340:1799#0
-TTGTGGCTCAGTGTCCGTTCGAGGTAATAACTTCTTTGTCTAGGGACAAGAATAGATCGGAAGGGCGGTGCGTGCG
-+
-677277888888881#8&8/888*774-65/54/32(20//'/.,+"&',)+**))'$)(#%(%'#'$%&#%$$$#
- at 30BB2AAXX080903:3:33:244:2025#0
-AGTCTCTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGNCCCACGNN
-+
-6717778888888888888888887777655544321100////.---,,+,+**)))))()(((''"%$#%#"""
- at 30BB2AAXX080903:3:4:520:517#0
-CCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACCCCNCCACNCN
-+
-67777788888888888888888877776555443222100//..---,,,+++***)))((((((&$"$"$$"""
- at 30BB2AAXX080903:3:43:940:1061#0
-CACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACCCAAACCACGCCG
-+
-67777788888888888888888877776555443222100//..---,-+++****)*)*(((((''$##&"$$$
- at 30BB2AAXX080903:3:33:1680:830#0
-ACAACAATATTCAGGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACCCAAANACTCACNN
-+
-6777778888888,888888888877776555443222100//..---,,+++****)))))(('(&"$&"###""
- at 30BB2AAXX080903:3:8:1390:1666#0
-TATTCATGTGCCTAGACCAAGAAGTTATGATCTCGAACTGACACTGAGCCACAACCCAAACAACCCANCACTATNN
-+
-6777778888888888888888887777'555443322100/...----,,++++***()))((((("$"%"""""
- at 30BB2AAXX080903:3:47:1198:1436#0
-TTAGGGAGAGCTGGGTTGTTTGGGTTGTGGCTCAGTGTCAGTTCGAGATAATAACTTCTTGGTCTAGGCGTGGTAT
-+
-67777788888888888888888877776555443222100/.-..-,+,+++***))))))(((''"$"""""$"
- at 30BB2AAXX080903:3:35:1356:1919#0
-AGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACCCAAACAACCCAGCTCTCCCTAAGCNCACCTCCN
-+
-6777-788888888888888888877776555443222100./.,---,,+++***))))(()(((("""$#"$#"
- at 30BB2AAXX080903:3:59:1381:1438#0
-TAGTTTGAAGCTTAGGGAGAGCTGGGTTGTTTGGGTTGTGGCTGGGTGTCAGCTTGGGATTATTGCGTCAACANCC
-+
-67727788888888888888888873$76$55443222//0*,&'-*,++++%***#()(#(&(%#&&%%$$#"##
- at 30BB2AAXX080903:3:39:1137:1634#0
-GAGAAGTAGTCTAGTTTGAAGCTTAGGGAGAGCTGGGTTGTTTGGGTTGTGGCTAGATCGGAAGAGGTGTCTGGCA
-+
-67777788888888888888888877776555443222100//..---,,+++****(())%(((''%&%%%$$#"
- at 30BB2AAXX080903:3:46:1252:1032#0
-TATGGAGAAGTAGTCTAGTTTGAAGCTTAGGGAGAGCTGGGTTGTTTGGGTTGTGGCTCAGTGTCAGATCGTGCGA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((((&"&$#"$#"#
- at 30BB2AAXX080903:3:47:1654:1609#0
-CTCGAACTGACACTGAGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACAGATCGGACNGAGAG
-+
-67777788888888888888888877776555443222100///..--,--*****()))()(((('%%"""""#"
- at 30BB2AAXX080903:3:44:349:1047#0
-GACACTGAGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCAAGATCGGCACAGA
-+
-67777788888888888888888877776555443222000//..---,,+++***))))))(('(&&$&#$"#"#
- at 30BB2AAXX080903:3:2:818:142#0
-CACTGAGCCACAACCCAAACAACCCAGATCTCCCTAAGCTTCAAACTAGACTACTTATACATAGATACNCGCACAC
-+
-6737778888888&188-028888731-6555(43/%,&&1-*.)'-,,,%*+)*)(*%'()((((#""""#$$"#
- at 30BB2AAXX080903:3:46:1779:114#0
-CGAACAATGCTACAGGGATGAATATTATGGAGAAGTAGTCTAGTTTGAAGCTTAGGGAGAGCTGGGTATCGCACAT
-+
-67777788888888888888888877776555443222100//..--,,,,+++**)))))(((('#"#$#$#"#"
- at 30BB2AAXX080903:3:35:1291:647#0
-TGATGGACCATGTAACGAACAATGCTACAGGGATGAATATTATGGAGAAGTAGTCTAGTTTGAAGCTNATTCACCN
-+
-67777788888888888888888877776555443222100//..----,-+++**)))))()(((&"&%"#%##"
- at 30BB2AAXX080903:3:36:1072:1854#0
-TATGATGGACCATGTAACGAACAATGCTACAGGGATGAATATTATGGAGAAGTAGTTGAGTTTGAAGAGTAGTCNN
-+
-67777788888888888288838877676555443(22100//..---,,-+)+*&'())))(((&'""""""$""
- at 30BB2AAXX080903:3:49:202:1420#0
-TATCACAGTGAGAATTCTATGATGGACCATGTAACGAACAATGCTACAGGGATGAATATTATGAGATGGTCCAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&"%#"""#$"
- at 30BB2AAXX080903:3:59:395:1706#0
-TTATATATCACAGTGAGAATTCTATGATGGACCATGTAACGAACAATGCTACAGGGATGAATATTATGTGTCTNNC
-+
-67777788888888888888888877776555443222100//..---,-+++***)*)))((('(&$$&$#$""#
- at 30BB2AAXX080903:3:35:379:256#0
-TCCATAATATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTAGATCGGANCTACTTNN
-+
-67775788888888888884888277776355$)-'2210)+&,,,,--,+++******)'(&#(('"%#####""
- at 30BB2AAXX080903:3:3:434:1351#0
-CTGAGTTTATATATCACAGTGAGAATTCTATGATGGACCATGTAACGAACAATGCTACAAGATCGGAANCTCANGC
-+
-67777788888888888888888877776555443222100//..--,,,,,+***)))())(((('%"#"%$""#
- at 30BB2AAXX080903:3:34:258:1777#0
-TCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATATAAACTCAGACCANCAACACNN
-+
-67777788888888888888888877776555443222100/0..--,,,++++***))))))((''"$"#$##""
- at 30BB2AAXX080903:3:41:641:1177#0
-ACTGATTAATGTTTGGGTCTGAGTTTATATATCACAGTGAGAATTCTATGATGGACCATGTAACGAACACCACTAA
-+
-67777788888888888888888877776555443222100//...,,,--++**)())*()(&(('"%"$&$$$"
- at 30BB2AAXX080903:3:44:1145:1736#0
-TAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATATAAACTCAGACCCAAACATTAATCAGTT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''&&$&%%%#%
- at 30BB2AAXX080903:3:36:463:536#0
-GAAGAACTGATTAATGTTTGGGTCTGAGTTTATATATCACAGTGAGAATTCTATGATGGACCATGAGCNCGTGACN
-+
-67777788888888888888888877776555443222100//..---,,+++**+))))))(('('$"$"""##"
- at 30BB2AAXX080903:3:45:411:1661#0
-GTCCATCATAGAATTCTCACTGTGATATATAAAATCAGACCCAAACATTAATCAGTTCTTCAAATATCGACTCGGT
-+
-617*77888888888888888888777765553&32220%0/../.-,),+,++))()(&(((((('&%"$%%"""
- at 30BB2AAXX080903:3:50:383:100#0
-TCTCACTGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATCTTCAGCGAGTCTGC
-+
-67777788888888888888888877776355443222100//..---,,,++***))))))))'''"""""#"""
- at 30BB2AAXX080903:3:33:245:1149#0
-CACTGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATCAGATCGGANTCGCACNN
-+
-/7777788888888888888882877776545443222100//+..--,,+++**))*)))))('''"$$"%"%""
- at 30BB2AAXX080903:3:35:1307:500#0
-GATTAGTATGGTAATTAGGAAGATGAGTAGATATTTGAAGAACTGATTAATGTTTGGGTCTGAGTTTNCGTGCCCN
-+
-677777488880888888888888777765554432222000...---,-,++***)*()))(((('""#%####"
- at 30BB2AAXX080903:3:45:1037:1580#0
-AGATTAGTATGGTAATTAGGAAGATGAGTAGATATTTGAAGAACTGATTAATGTTTGGGTCTGAGTTCGTATCTCC
-+
-677772888888882888888888777765554432221/0//..---,,+++++*)*))()((''&""""#"$##
- at 30BB2AAXX080903:3:42:1133:1265#0
-CAAACATTAATCAGTTCTTCAAATATCTACTCATCTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACTT
-+
-67777788888888888888888877776555443222100//..---,,+++***)')))((((''$&%%%&%##
- at 30BB2AAXX080903:3:57:350:638#0
-GTTGGAATAGGTTGTTAGCGGTAACTAAGATTAGTATGGTAATTAGGAAGATGAGTAAGATCGGAAGAGGAGACAT
-+
-67777788888888888888888877476545143222111./.,--+,,+*++*&))))('(((''$"%#""##"
- at 30BB2AAXX080903:3:42:1671:268#0
-GAACAGTTGGAATAGGTTGTTAGCGGTAACTAAGATTAGTATGGTAATTAGGAAGATGAGTAGATATTTGAGATGG
-+
-67777788888888888888888877076555443222120//.,-.--,++++***)))'((((('&&%%&"""#
- at 30BB2AAXX080903:3:2:965:758#0
-GATGAACAGTTGGAATAGGTTGTTAGCGGTAACTAAGATTAGTATGGTAATTAGGAAGATGAGTAGATNTCTCCAA
-+
-67777788888888888888888877776355443220100//-.--,,,+++**)*))))(((('($"%#%%###
- at 30BB2AAXX080903:3:3:1108:1811#0
-AGCCGATGAACAGTTGGAATAGGTTGTTAGCGGTAACTAAGATTAGTATGGTAATTAGGAAGATGAGTNCATNNTT
-+
-6777778888888888888888837717655541322//0/-.--.,,+-+)+***)*)(()(((('%"$"$""##
- at 30BB2AAXX080903:3:42:227:495#0
-ATCTACTCATCTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTACTA
-+
-67777788888888888888882877776555443222100//.----,,+++**+)))))(((''&&%%%%$#"%
- at 30BB2AAXX080903:3:8:1324:1310#0
-TCTCAGCCGATGAACAGTTGGAATAGGTTGTTAGCGGTAACTAAGATTAGTATGGTAATTAGGAAGANTCCTAGNN
-+
-67777788888888888888888877756555443220100/.-..--,,,,+******)())((((""$#$#"""
- at 30BB2AAXX080903:3:36:1152:94#0
-AATTCCTACGCCCGCTCAGCCGATGAACAGGTGGGATAAGGTGTTAGCGGGAACTAAGATTAATAGANACGTTACN
-+
-6777778888888)88888888(27575+5/344%2,,&2.*/-.&-*,,&**$'()()##(#&'&'"""#""#$"
- at 30BB2AAXX080903:3:49:172:1151#0
-GCAAGAAGGATATAATTCCTACGCCCTCTCAGCCGATGAACAGTTGGAATAGGTTGTTAGATCGGAATCGTCACGA
-+
-67777788888888888888888877776555443222100//..--,,,++++**)))))((((('"$#""###"
- at 30BB2AAXX080903:3:48:246:36#0
-TGAGCAAGAAGGATATAATTCCTACGCCCTCTCAGCCGATGAACAGTTGGAATAGGTTGTTAGCGGTCCCGGAGCG
-+
-67777788888888888888888877776555443222100//.---,,,&,++**()))())(((#$"#""""##
- at 30BB2AAXX080903:3:53:1142:1184#0
-TTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTAGTTCATCC
-+
-67777788888888888888888877776555443222100//..--+,,,++***)**))(()(''"""#%"$$"
- at 30BB2AAXX080903:3:36:142:977#0
-GTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGTCTGCCTGCN
-+
-67777788888888888888888877776555443222100//..---,,,++*+*))*)))((('#$""#$""#"
- at 30BB2AAXX080903:3:54:77:1776#0
-GTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCGTGTCCGTT
-+
-6777778888888888888888887777655544322200///..--+,,++++**))(*))((((&"$"&%$"""
- at 30BB2AAXX080903:3:4:1241:282#0
-TTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTCGATNACACNCN
-+
-6777778888888888888'/6887777653144222110///#.,,-,,++++***#(('''(##%""&&%$"#"
- at 30BB2AAXX080903:3:37:220:125#0
-CAACTGATGAGCAAGAAGGATATAATTCCTACGCCCTCTCAGCCGATGAACAGTTGGAATAGGTTGTCNAGCTCNN
-+
-67777788888888888888888877776555443222100//..-----,+++**)))))((((''&"&""%#""
- at 30BB2AAXX080903:3:3:186:1889#0
-TCAACTGATGAGCAAGACGGATATAATTCCTACGCCCTCTCAGCCGATGAACAGTTGGCATATGTTGTNTGCNNCA
-+
-6777778888888.$88+88&8880277655.443221100//..-,,,,+)***)**(())&(&('"""&$""##
- at 30BB2AAXX080903:3:47:1557:163#0
-TCAACTGATGAGCAAGAAGGATATAATTCCTACGCCCTCTCAGCCGATGAACAGTTGGAATAGGTTAGTTCGCTCT
-+
-6777778888888888888888887777655544322011/+-..,,,,+,**+'))*()()()#''"""%"$%##
- at 30BB2AAXX080903:3:37:1257:1238#0
-ACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCCAATCGN
-+
-67777788888888888888888877776555443222100//-.---,,+++**)))))))()(('"%&$"%$#"
- at 30BB2AAXX080903:3:45:875:1547#0
-TAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATAG
-+
-677777888888888888888888777765551432-21/0/---.,,,,))+*'*))))(((&'(#'$"##"""#
- at 30BB2AAXX080903:3:8:1430:1295#0
-CAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGANTGCACANN
-+
-67777788888888888888888877776555443-12101//..-.+,,,*+****))())('(''"$"%$#$""
- at 30BB2AAXX080903:3:41:727:1004#0
-ACCTATTCCAACTGTTCATCGGCTGAGAGCGCGTAGGAATTATATCCTTCTTGCTCATCAGAGATCGGAAGTGCGN
-+
-64777788888888888888888878776)5+4-3222200/...,+,,+++***')#(()((('%'""#&"$%#"
- at 30BB2AAXX080903:3:41:1654:1212#0
-CTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGCG
-+
-67777788888888888888888877776555443222100//...-,,,++++*****))(((((('%%&"%"""
- at 30BB2AAXX080903:3:38:1477:1084#0
-TTCCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGCTNGT
-+
-67777788888888888888/8087777055544322210/...-,-,-,-+*+**)*))()(((('"%$#""""#
- at 30BB2AAXX080903:3:39:1380:169#0
-CAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCCTCTTGCTAATCAGAGAACGGGAGAGCGGTCTATCAC
-+
-6777778888888888888588887#276+5,4532010#1/-.-+*#,%+)+())%'((#&(#(&'"#"#%$$#$
- at 30BB2AAXX080903:3:55:973:883#0
-CAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGCGCTTACT
-+
-67777788888888888888888877776555443221100/....---,-++***)*)()((('(''"#%#""#"
- at 30BB2AAXX080903:3:47:991:1822#0
-ACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCCACACAC
-+
-67777788888888888888888877776555443222100//-.---,,+,+*+*)**)()('(('$%""###""
- at 30BB2AAXX080903:3:58:1558:699#0
-ACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGCACACGACTN
-+
-67777788888888888888888877776555443222100///.---,,+,+*)*)())()('((#$$%#"#$""
- at 30BB2AAXX080903:3:55:514:1196#0
-TGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAAGTGCGGTGCG
-+
-67777788888888888888888877776555443222100//./---,,+++***)))))()('''"$#&%""#"
- at 30BB2AAXX080903:3:45:963:669#0
-TGTTGGCATCTGCTCGGGCGTATCATCAACTGATGAGCAAGAAGGATATAATTCCTACGCCCTCTCAGCGGATGTA
-+
-677777-8888888888888888877776555443222100//..---,,+++***))))))))('''$"%"#$""
- at 30BB2AAXX080903:3:58:392:26#0
-CATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCCTCNNC
-+
-67777788888888888888888877776555443222100//..----,+,+******)())'(''&%"""%""#
- at 30BB2AAXX080903:3:48:222:1943#0
-ATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCTACCCAAC
-+
-67777788888888888888888877776555443222120//..---,,+++**()))))()(('&&""#$###"
- at 30BB2AAXX080903:3:3:1096:550#0
-GGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCACNTCAGNCG
-+
-677777888888888888888888777765554132220000/..----,++*))+)*))))()(%(%"#$"""##
- at 30BB2AAXX080903:3:45:844:1213#0
-CTGCTGTGTTGGCATCTGCTCGGGCGTATCATCAACTGATGAGCAAGAAGGATATAATTCCTACGCCCTCTCCGCC
-+
-677777888888888888888888777765554132221000/..--,,,+,++*)**)()(()'(&'%##"#$#%
- at 30BB2AAXX080903:3:59:1005:868#0
-TGAGAGGGCGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGAACACG
-+
-67777788888888888888888877776555443222100//..---,,++++*+*)*)))))(('&&%###$$"
- at 30BB2AAXX080903:3:45:709:1767#0
-CGTAGGAATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGAGATCGGAAGAGCGGTGCAGCAG
-+
-67777788888888888888888877776555443222100//..--,,,,,+***)))))((((#%$###$%#"%
- at 30BB2AAXX080903:3:42:178:1153#0
-TTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCATCTGCTCGGGCGTATCATCAACTGATGAGCANGGACGCTA
-+
-67777788888888888888888877776555443222100//..-.-+,,*++***()))()('#'"%"%""###
- at 30BB2AAXX080903:3:53:961:2044#0
-TACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCATCTGCTCGGGCGTATTATCAACTGATGGGATCGCG
-+
-6777778888888888888888887777655$4335221//0,..,.-+,+&+)**#(*'()''(''""##"""##
- at 30BB2AAXX080903:3:8:936:491#0
-CTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACNTCCACGNN
-+
-67777788888888888888888477776555443222100//..----,+++***)*))(((((('""#$"&"""
- at 30BB2AAXX080903:3:37:1552:1828#0
-TTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACACCGCAACAN
-+
-67777788888888888888888877776555443222100//..-,-+,,++***(**('((((''"#"#$###"
- at 30BB2AAXX080903:3:57:379:1371#0
-CGATACGGGTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCATCTGCTCGGGCGTATCATCCACTGAGCATTAC
-+
-&7777788-888888888888-88774765554,/222+00/)-,'-++$&'++'*'()(('%#(&'&#""#""##
- at 30BB2AAXX080903:3:54:1185:927#0
-GCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCATCTGCTCGGGGGTATCATCAACTATTGCGT
-+
-6777778888888888888888887777655544302210//..'+,,,,*+++**'*('(''('&'$#""#"#"#
- at 30BB2AAXX080903:3:41:91:1270#0
-TCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCATCTGCTCGGGGGTATCATANCTCGACAC
-+
-6777778888888888888888887877655544122,10..+.--*,,(,+%+#**)#)#()#((#"$"$""###
- at 30BB2AAXX080903:3:2:1567:1797#0
-TATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGGTGGCATCTGAGATCGGAAGAGCGNCACNTGA
-+
-67777788888888&88-8888880296655.4132..1(&-&.%,-,$)&')'')(###)%'''%#""&&%"##"
- at 30BB2AAXX080903:3:55:748:1415#0
-GTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGNTTCCAC
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)))))((('%&""""##"
- at 30BB2AAXX080903:3:55:1271:1308#0
-TTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGAGTCTACC
-+
-6777778888888888888888887777655544332210.//.,---+++,++))))()())(((%&####"##"
- at 30BB2AAXX080903:3:46:726:255#0
-TGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGACATCCTCT
-+
-6777778888888888888888887777655544322110/./...-,-,+++*****)((((((''""""#$"#"
- at 30BB2AAXX080903:3:47:1563:1186#0
-AAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGGTGTGTTGGGATAGATCGGGAGGGNCACTC
-+
-67777788888888888888888877776555442222100//..-&-,,+)+**%')))((#((#'""""""#""
- at 30BB2AAXX080903:3:2:1157:465#0
-ATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCAGATCGGAAGACNCGCACTC
-+
-67777788888888888888888877776555283220100./-.---,-,++*)***))(((((('""#$%"$"#
- at 30BB2AAXX080903:3:56:286:583#0
-GGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGGCGGGGTGGGGCTTGGCGTGAAATC
-+
-67777788888888888888882877266305243+(.1////.+'+-'(,)#+)*')))&###%##$"#&$%$$#
- at 30BB2AAXX080903:3:49:175:832#0
-GCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGGTNCTACCGTC
-+
-67777788888888888888888877776555443222100//...--,,,+++**))))*)')(&'"#""$#"##
- at 30BB2AAXX080903:3:52:1241:900#0
-GCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATAGGGTTTAGTCCTG
-+
-6777778888888888888888887777655544302/10///.------+++***'*)((''((#'$##""""#$
- at 30BB2AAXX080903:3:36:319:1271#0
-CGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGGATCTGCTCCTAN
-+
-67777788888888888888888877776555443022000//..--,,,+++*'*)))((((&#(#&"%"#$"""
- at 30BB2AAXX080903:3:38:955:1730#0
-CCCGAGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGTTTAATCNNTGC
-+
-67777788888888888888888877776556443221100//..--,,,,++***)))(&&'(#%'"$%&""#"#
- at 30BB2AAXX080903:3:2:1298:567#0
-GGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTAGATCGGANGGCACAC
-+
-6777778888888888888888887777655244'22.10//.-'--,,,,++(()#'*'&(%##&'$"""$####
- at 30BB2AAXX080903:3:60:513:930#0
-GGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTAGATCGGAGACTNN
-+
-6777778888888888888888887777655544322210///.----,-+++)**&*)')'((('%"'#$##"""
- at 30BB2AAXX080903:3:48:298:1634#0
-AAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTTGGCGTTTCCGG
-+
-677777888888888888888888777766554432101/0//..-*,,-*+++*&))#('&('(''%"""""#""
- at 30BB2AAXX080903:3:59:230:735#0
-AGCAGATGCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCTNNC
-+
-6777778888888888888888787773655044322200/..--&,++,+++)&(&'%'#''###'$"$"$"""#
- at 30BB2AAXX080903:3:57:977:1676#0
-TAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGGTGGGTTTGTGACTCTC
-+
-6777778888888888888888887777655544122%021//-,--),,+****)&()&'((('&%$"%#%"#"#
- at 30BB2AAXX080903:3:42:173:590#0
-GCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGGATGGGTGCTGTGGNGGCGCACT
-+
-677777888888888888888888777765550432/21......)-++,+++&+**))))''(#'%""#"$#$##
- at 30BB2AAXX080903:3:48:1167:970#0
-GCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTGTGTGGGTTGATC
-+
-677777888888888888888888777765554432221/0//..----+++++*)*)(()#&)(('""$"""""#
- at 30BB2AAXX080903:3:51:1105:1525#0
-ATGCTAAGGCGAGGGTGAAATCGATATCGCCGATACGGTTGTGTAGGAGTGCTGGAATGGTTGTTGTTNACATCTC
-+
-67777188888888888-88,8887.7%65'54/32(21&///-'---),*++*')'&*)(###('&"""###$#"
- at 30BB2AAXX080903:3:54:86:457#0
-ATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGGTGGATAGGGGTGCTTGAATGGGGGCTGGGCGCTGANA
-+
-677-778888888888888888883075655511*2.2.0/*&,+.-&*)*&*$*#)#((##(##(#"$#%"""""
- at 30BB2AAXX080903:3:2:30:1263#0
-TCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCTCNAGTNNCA
-+
-677777888888888888888888777765554422/2100//(--,-,,,,+))*(&(())&'(#'$"#"#"""#
- at 30BB2AAXX080903:3:60:710:1356#0
-GCCAACACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCCTTACAGTNN
-+
-67777788888888888888888877776555443232100//..-,)+,&*+)**(''#'&'#''#$&$&%""""
- at 30BB2AAXX080903:3:59:443:386#0
-AATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGCGGTATCNC
-+
-67777788888888888888888877776555443212000//..*--,,+++***)))')(()&''$$"$""$"#
- at 30BB2AAXX080903:3:51:205:683#0
-CACAGCAGCCATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGGTTCATCCTCGCCCTAGCACGCGTGTAC
-+
-67777788888888888888888877776555443222100/-.-,,-'+-+))))())))&(&((&$$$#"#$""
- at 30BB2AAXX080903:3:58:172:902#0
-GGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATTGCTTGAATGGCTGNNNT
-+
-67777788888888888888888877776555443222100./----,-,+*+*+*()))#((('''%&$"$"""#
- at 30BB2AAXX080903:3:59:995:272#0
-CATTCAAGCAATCCTATACAACCGTATCGGCGATATCGGGTTCATCCTCGCCTTAGCATGATTTATCCTACCCANC
-+
-67777788888888888888888877776555433.011(1.+*,,-+-*++)*((*'&((((('&%"$$%"%#"#
- at 30BB2AAXX080903:3:45:668:294#0
-TGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGATCTCTTGAGA
-+
-67777788888888888888888877776555443222100//..---,,+,+**+)))(((('(('$$$""""""
- at 30BB2AAXX080903:3:36:313:107#0
-TTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGACGATACGGTTGGATAGGGNCACGCCAN
-+
-6777,7888888888888888888777765554,32-210./..--,-%-+++))*)'()##'&'(#"""%"###"
- at 30BB2AAXX080903:3:47:816:1983#0
-TTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGAGGTGACATA
-+
-6777778888888888888888887777655544322210///..-,-,,,++))+*'*)''#'((#&#"""#"#"
- at 30BB2AAXX080903:3:60:671:1118#0
-GTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGAGTACACNN
-+
-67777788888888888888888877776555443222100//....-,,,+*+**))'))''''('$"%%$##""
- at 30BB2AAXX080903:3:52:285:1914#0
-CAATCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCACCACACG
-+
-67777788888888888888888877776552442121100/...---+,++*****))())()((%&"$%$&%#"
- at 30BB2AAXX080903:3:53:124:28#0
-TCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCAGATCGGACGACCGCTGAC
-+
-67777188888888888888888877776555443220100//.----,,,*++**)()'())((#'"$#$"""#"
- at 30BB2AAXX080903:3:55:138:1361#0
-ATCCTATACAACCGTATCGGCGATATCGGGTTTATCCTCGCCTTAGCATGATTTATTCTACACTCCAAGATATCTC
-+
-67777788888888888888888877476)55%03(0/10//+.,-+-+,**++*)#))'#('''('"$"&&%%##
- at 30BB2AAXX080903:3:51:1344:518#0
-CTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGGTTGTATAGGGC
-+
-67777788888888888888888877776555443222100//..---,,+++*****))))(('('&""""$$""
- at 30BB2AAXX080903:3:45:1764:117#0
-GGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGATACGCAGGCGGGG
-+
-67777788888.88888888888877776555443322100-/..--,+-*,+***)())(('''('%$#"$#"""
- at 30BB2AAXX080903:3:41:244:1983#0
-TGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCACAACCTCT
-+
-6777778888888-88(80888&8575765254433+0/1.///.-*-'-,&++))*#&)&'('#'&&"#"$"##"
- at 30BB2AAXX080903:3:59:1258:184#0
-TGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATAAGATCCGCAACNC
-+
-677777888888888888888808577765554432/2100/...---+,++*****)))(((((('""%%##%"#
- at 30BB2AAXX080903:3:39:1269:306#0
-CTATTTGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGATATCGCCGAC
-+
-67777788888888888888888877776550443222100//..---,,+++***)*))))(('((&&%&%$$#"
- at 30BB2AAXX080903:3:52:1042:1520#0
-GGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGGATGAAACCGTTTCGCCC
-+
-67777788888888888888888877776555443222100//.----,,,++****))))()((('%$#""%"$"
- at 30BB2AAXX080903:3:40:1697:879#0
-GCGATATCGGTTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAAGATCGGAAGCT
-+
-67777788888888888888888877776555443222100//..---,,++++**)**()))(('(&&$&""##"
- at 30BB2AAXX080903:3:42:855:1147#0
-GATATCGGTTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAGATCGGCCATA
-+
-6777778888888888888)888877776555443312100//-.,,,,-+++**)())&(((((''"%%$"""""
- at 30BB2AAXX080903:3:4:352:460#0
-GATATCGGTTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACACACAACAAACNCACANCN
-+
-6777778888888888888888887777645'4432-2000//.,,+,,,+++(*))&)))((((&'%"%"&""#"
- at 30BB2AAXX080903:3:47:518:1870#0
-TATCGGTTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATACCACTTCTA
-+
-677777888888888888888888777765554432221000/-..-,-,++++*))*)))((((('$""#$####
- at 30BB2AAXX080903:3:2:275:1758#0
-CGTTTAGAAGGGCTATTTGCTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGCGAGTNAGANNTC
-+
-677777888888888888888888775765554531221-0//----,,,,*+****))(()((('&"""%$"""#
- at 30BB2AAXX080903:3:35:1083:255#0
-TTTCATCCTCGCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTNTACTACNN
-+
-67777788888888888888888877776555443221100/...,-,-,+,++*+)*)))))((''"###"#$""
- at 30BB2AAXX080903:3:43:1053:343#0
-TGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGGGGGGG
-+
-67777788888888888888888877776555442.20+000/).--',&+**+**))*)&')((''&%%&"$#""
- at 30BB2AAXX080903:3:58:916:900#0
-TGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGTAGGATAAATCATGCTAAGACAACA
-+
-6777778888888888888888887777655544112/1/0//-.--',,++*+***)))('(((#'&"%%$"#$#
- at 30BB2AAXX080903:3:35:1312:1076#0
-GCCTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTANTCCAATAN
-+
-67777788888888888888888877776555443222101.....-,-,+,++***))()))(('(""$$"""$"
- at 30BB2AAXX080903:3:4:1729:1372#0
-CTTAGCATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAGATCGGAACNTCTCNTN
-+
-67777788888888888888888877776555443222010/.-.----,+*++*)*)))))(((('"""$#%"""
- at 30BB2AAXX080903:3:36:1511:2007#0
-GGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGTAGGATACTTTCTCNN
-+
-67777788888888888888888877776552443222100//.,-,+,,++****%)')()((&'%%#"""$$""
- at 30BB2AAXX080903:3:39:1074:2007#0
-ATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGACATCGTCAC
-+
-6777778888888888888888887777652044322.10/0..,,+-,++,+*)*())))(&((('$&%%&#$##
- at 30BB2AAXX080903:3:60:1539:721#0
-ATGATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCACACACANN
-+
-67777788888888888888888877776555440220200//.,,,--++*+*'*())))%(((#&$$&%%$%""
- at 30BB2AAXX080903:3:55:1252:1771#0
-AGTGGGGTGAGGCTCGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGTTGTATCAAAC
-+
-67777788888888888888888877776555443222100//..---,++++***)*)))()(('#$$"##"#""
- at 30BB2AAXX080903:3:41:1477:316#0
-TAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATGAGTTGGAGTGGTGGTAC
-+
-67777788888888888888888877773555443222100//...--,,+++)*)())()')((&'$$#""""##
- at 30BB2AAXX080903:3:2:1244:1247#0
-TACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTANCAGACCG
-+
-677777888888888888888888777765554432221000*-..--,-,++)*)))*)()(('('%""%#$##"
- at 30BB2AAXX080903:3:4:715:728#0
-TACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTTNCAATNAN
-+
-6777778888888888888888887777655543222200././.--,,,+++**)**)))(((((&""##"""#"
- at 30BB2AAXX080903:3:46:579:753#0
-TCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAAAGCTAATCCAAGCATCACCCCACTACTAGGCCTCGGAC
-+
-27777788888888888888888877776555443212/0///.-.,-+,+')***'))&'()(#''"##$$""#"
- at 30BB2AAXX080903:3:3:534:528#0
-CCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCNGCCCNCA
-+
-67774788888888888888/888777795554432211000..-,-,,,+,)**)))))))(((''$""%##"$"
- at 30BB2AAXX080903:3:55:1600:33#0
-CCAAATCATGAGACCCACAACAAATAGCCATTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGACACAATAAC
-+
-67777788888888888888888877776%55)43222100//..---,,+++***)))))((('''$$$#$"###
- at 30BB2AAXX080903:3:43:581:1060#0
-AGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGTCTCATAGATCGG
-+
-67777788888888888888888877776555443221100//.----,,+++***)*)))()('(&&'%%$%$#%
- at 30BB2AAXX080903:3:34:385:1328#0
-CAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCNCGACCTNN
-+
-67777788888888888888888877776555443222100//.-.--,,++++*+)*))*)(('('"%""#$#""
- at 30BB2AAXX080903:3:57:1268:607#0
-CTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTGCAC
-+
-67777788888888888888888877776555413222100//..---,,+,**+*)*)()((((&''%%$"""$#
- at 30BB2AAXX080903:3:8:1773:891#0
-TGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGNCTATCTNN
-+
-677777888888888888888888775765554432221/0//..---,,+++***)))*))((('&"$%""#"""
- at 30BB2AAXX080903:3:38:679:434#0
-ATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTCCCACCA
-+
-6777778888888888888888887777655544332210....-----,,+++***))))((((''&%%%&""#"
- at 30BB2AAXX080903:3:4:216:1410#0
-TGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTANTCTANTN
-+
-677777888888888888888888677765554432221/0/..--*-,,+)+***)*)))(()(('""##"#"""
- at 30BB2AAXX080903:3:49:1688:283#0
-AGACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCGTCA
-+
-67777788888888888888888877776555443222100//..---,,,++++*)*)))()((('"$""#""$#
- at 30BB2AAXX080903:3:2:1679:1156#0
-TGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTNGCGAGTC
-+
-67777788888888888888888877776555442221100/./-,--,,+,)**))()('(((('%'"%&%#$"#
- at 30BB2AAXX080903:3:51:906:607#0
-TGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTGTGGTTGGT
-+
-67777788888888888888888877776555443221100//..---,++++***)))))))((''"""$""##"
- at 30BB2AAXX080903:3:55:363:433#0
-GACCCACAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCCGCACTAC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((((''""%%$"###
- at 30BB2AAXX080903:3:43:721:690#0
-CTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGGGCTATTTGTTGTGGGGG
-+
-67777788888888888888888877776555443222110//..---+,+,+**))*))(()((('&&%"&%#""
- at 30BB2AAXX080903:3:4:242:569#0
-GCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGATCGGAAGGGCNTGCTNCN
-+
-67777788888888888886880673772515443,2.10../..-,,+,)+***)*((&()#'(#'%""#$#"$"
- at 30BB2AAXX080903:3:45:800:969#0
-TGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGCGTTTAGAAGAGATCGGAGGGGGGG
-+
-67777788888888888888888877776555443222100//..---,,+,++***)*)))(((('$"#%"$"#$
- at 30BB2AAXX080903:3:33:1653:1308#0
-TTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGGAGATCGGAAGAGCGGTGANTCACTGNN
-+
-67777788888888888888888877776555443222&00//.-+--+,+*'%**'))))#()#%#""%%%""""
- at 30BB2AAXX080903:3:44:367:1373#0
-CAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAAGATCGGAAGAGCGCG
-+
-67777788888888888888888877774555443222000//.---,-,*,++***))())((((&&&&"%""""
- at 30BB2AAXX080903:3:55:179:999#0
-CAACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAAGATCGTNCTCAG
-+
-67777788888888888888888877776555443222100*/--.*-+,,,++****)&))()((#$&""$#%##
- at 30BB2AAXX080903:3:47:749:1380#0
-ATTTGCCTGCTGCTGCTAGGAGGAGGGCTAGTAGTGGGGTGAGGCTTTGGTTTGCGTTTAGAAGGGGTTGTCGCTC
-+
-67777788888888888888888877$7635+5422221*0./.,,.&,,*,%*'*#*)')'((('%"""%%"$##
- at 30BB2AAXX080903:3:36:1036:1272#0
-AACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCTAGGTGTGN
-+
-67777788888888888888888877776555143222100//..---,,+++****)*))((((''%"#"%$%#"
- at 30BB2AAXX080903:3:57:523:1828#0
-AACAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCTCCAC
-+
-67777788888888888888888877776555443222100//..--,,-,++****))))))(((''&"#"####
- at 30BB2AAXX080903:3:3:749:138#0
-CAAATAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGCNCATCNCN
-+
-6777778888888888888888887/7553452450/1000/....,,),**+*'*)*(((((('''$"$#$$"#"
- at 30BB2AAXX080903:3:44:70:547#0
-TAGCCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAATACAGCCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((('&""&&%##"#
- at 30BB2AAXX080903:3:49:1248:1539#0
-CCCTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAAGATCGGAAGAGCGGTGTCT
-+
-67777788888888888888888877776555443222100//.--.-,,+++**)*))))()((''$$"""""""
- at 30BB2AAXX080903:3:59:785:1061#0
-CTTCTAAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGAGATCGGAAGAGCTGCAACAC
-+
-67777788888888888888888877776555443222000//..-.-,,+,++*)))(()(((('''$%###$$#
- at 30BB2AAXX080903:3:59:119:1007#0
-ACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATTAGGTGTCNNA
-+
-6777778888888888888888887777655544322,100//-.-,-),+++**)))))))(('(''""$%$""#
- at 30BB2AAXX080903:3:36:1786:967#0
-AGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGATNTGGCAGNN
-+
-677777888888888888888888777765554432221/0//..,-+-,*++**')())(((((&'"%$%%##""
- at 30BB2AAXX080903:3:1:1174:1765#0
-AAACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATNCGNTCGC
-+
-67777788888888888888888857576456342222120-.,/.--,+,+*)**()()('(((%'%"""""""#
- at 30BB2AAXX080903:3:58:1553:630#0
-GGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGATCGGAACACCACAN
-+
-67777788888888888888888077776555443222000//.,,--,,+++***)()()(('('&$$%$$%$#"
- at 30BB2AAXX080903:3:59:865:1924#0
-TGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGAGGCTTGGAGCACAAC
-+
-677777888888888888888888777765554422121/0/-..*,-+,+++***(*()#()'(('&$#%$"###
- at 30BB2AAXX080903:3:36:687:998#0
-GGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGGGGGGTGAGAGTGTAACACAN
-+
-6777778888888888888888887777355544121..001/.,.-(+)),%**#**))&(#(#(#&$""%#$#"
- at 30BB2AAXX080903:3:36:825:2013#0
-TAATCCAAGCCTCACCCCACTACTAGGCCCTCTCCTAGCAGCAGCAGGCAAATCAGCAGATCGGAAGTCTCGCTNN
-+
-6777778888888888388888887874*5$444-2120./-..-+--$+)+*'**')*)%&(('&%%"#$"$"""
- at 30BB2AAXX080903:3:55:1329:1147#0
-AATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCCCCACCACA
-+
-67777788888888888888888877776555443222100//..--,-,++++**)*)()(((('&"%%##$#$#
- at 30BB2AAXX080903:3:38:204:1656#0
-TCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCATCCGACCA
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))))((((''$"%""####
- at 30BB2AAXX080903:3:33:484:1458#0
-TCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGNGCTGTCNN
-+
-67777788888888888888888877776555443222100//-.-,-,,+++*+))())(()((&&""#""#%""
- at 30BB2AAXX080903:3:38:688:171#0
-TCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTAGTGGGGTGCTGTCAGNN
-+
-67777788888888888888888877776555443222100//-.-,-,+,+++*&))&)(((((%'$"""$#"""
- at 30BB2AAXX080903:3:33:1687:204#0
-GCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCNTCACTCNN
-+
-67777788888888888888888877776555443222100/-.---,-,,++***))()(((((''""%#$"$""
- at 30BB2AAXX080903:3:47:127:277#0
-CCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCCGACTCGCC
-+
-67777788888888888888888877776555443222100//..---,,++++**)*)))()((''$""$##$"#
- at 30BB2AAXX080903:3:2:1533:1696#0
-GAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTAGTATNCGCGCAA
-+
-67777788888888888888888872756555445012100./---,,,,+*+*)**(()#(('(&%""$%&$%##
- at 30BB2AAXX080903:3:36:1638:495#0
-TGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGAGATCGGGATCTATNN
-+
-677777888888888888888888777765554432.1100/...,--,,,,+**))*))())'((#$$"$$""""
- at 30BB2AAXX080903:3:50:1255:490#0
-TGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAAGATCGGAAGAGCGCACTCT
-+
-67777788848888888888888877776555443231100/....--,,,+)**))))('))(((&"$##"#"#"
- at 30BB2AAXX080903:3:53:267:155#0
-TGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGAGGCCTCGTCTTCGGGTG
-+
-67777788888888888888888877176555443321100/....--,,,,)**)**)))(('#(#""""$""""
- at 30BB2AAXX080903:3:57:929:328#0
-CTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCTAGGAGGTGCACTCC
-+
-67777788888888888888888877776555443222100//..----,+++***)))))))((('$"%%$$"##
- at 30BB2AAXX080903:3:57:330:1636#0
-AGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGCCTCCACCCGTGACTCCCGTCAGCCATAGCGCCT
-+
-67771788888888888888&888777753454135/0+0//).-(,*,++&++*))#()&((((&%%$""$"##"
- at 30BB2AAXX080903:3:51:1449:1742#0
-GGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATCNAAAGCN
-+
-677777888+8888888888888877776555&41222100/-.'--,,,++*+++(#(#))(('('"$"#"%#$"
- at 30BB2AAXX080903:3:57:358:1455#0
-GTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGAGATCGGAAGAGCGGGTCCGTACC
-+
-6177778088888888888/888877775555413212./..+-----,),,)+*))))(')((#(("'#$"""$"
- at 30BB2AAXX080903:3:49:830:1861#0
-GGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGCTGCCAGCCCG
-+
-6777778888888888888888887777655544322210/0/..---,,+++**))*)))((((''$$#""##""
- at 30BB2AAXX080903:3:55:951:1228#0
-GGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCAGATCGTGTGTAC
-+
-67777788888888888888888877776555443222100//.----,,++++**))*))((('('&$"&$%###
- at 30BB2AAXX080903:3:44:1554:775#0
-CTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCGATCG
-+
-67777788888888888888888877776355443222100//...--,,++++*****)*())('''"$"%###$
- at 30BB2AAXX080903:3:44:19:1322#0
-TCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCTAAGGCAC
-+
-67777788888888888888888877776555443222100/0..---,,+++***)**)))((('''"""""###
- at 30BB2AAXX080903:3:40:659:1779#0
-CCTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCTCCACCAC
-+
-67777788888888888888888827776555443221100.....--+,+,++***))))))(((#&"%"$#$##
- at 30BB2AAXX080903:3:39:490:825#0
-CTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCGCACACACA
-+
-67777788888888888888888877776555242222110//.----,-,,++***)())((((%("&#$""$#"
- at 30BB2AAXX080903:3:60:1089:702#0
-CTAGCAGCAGCAGGCAAATCAGCCCAATTAGGTCGCAACCCCTGACTCCCCTCAGCCATAGAAGGCCCGACACCNN
-+
-677777888888888888'888887777+55511/2)21/,../-.,-,,*'+**+)))()'(('&'"%$$#$#""
- at 30BB2AAXX080903:3:45:618:701#0
-ACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATTTGCCTGCTGTTGTGC
-+
-67777785888888888888888877776555443222100//...,--,+++**)*)))()(('((""%#"%"""
- at 30BB2AAXX080903:3:46:1540:1201#0
-CAGCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGACATAGAAGGCCCCACGCTACACCT
-+
-67777788888888888888888877776552443222100///--.,,,,*+*+*)&)('('('('&$""$####
- at 30BB2AAXX080903:3:52:333:909#0
-GCAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCCTCCTCAG
-+
-67777788888888888888888877776555443222100//..---,,+,+**)*)))))(((('%""#"#$"%
- at 30BB2AAXX080903:3:47:877:2004#0
-CAGCAGGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCAGATCGGTACCGCGAAC
-+
-67777788888888888888888877776555543222.0/-....--,,+,++***)()()(#((#"$""$"""#
- at 30BB2AAXX080903:3:35:507:1548#0
-GGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGATNTGCCCCAN
-+
-677777888888888888888888777765554432211/0//..-,-,,+,**+)))**)((('''"""#####"
- at 30BB2AAXX080903:3:49:1524:1809#0
-AGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGTGGAGACCTAATTGGGCTGGATACACAC
-+
-6777778888888888888888887777655244/2221/0/,,.---+-+'+)'#)(&)((((#'&""""#"#""
- at 30BB2AAXX080903:3:37:1650:1056#0
-GCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCTGCNN
-+
-67777788888888888885888877776555443221100//.--,,-+,+****)*)(((''(''"%""""$""
- at 30BB2AAXX080903:3:39:1410:1543#0
-AGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGATCGGAAGAGCGGTTCCGCAGTA
-+
-67777788888888888888888877776575443122100/...--+,(&++**)*)(()((#('%"#"$%"##"
- at 30BB2AAXX080903:3:54:480:1740#0
-GAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGATCGGAAGAGCGGTCGCGCCAC
-+
-67777788888888888888888877776555443222100//..---,,+,+****))()(((''&"#"#%%""#
- at 30BB2AAXX080903:3:54:523:336#0
-CAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCACCCACGTC
-+
-67777788488888888888888877776555433222100//...-,-,++++*****))((((('&&#&%%$""
- at 30BB2AAXX080903:3:39:1219:400#0
-ATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGGGTGGGCGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))())(('''$&"&"#$##
- at 30BB2AAXX080903:3:2:1781:656#0
-ACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTGAGGGGAGTCAGGGNCGAGCGC
-+
-67777788888888888888888877776555443221100/...----,+++**)*)))&('%(('&"#%"###$
- at 30BB2AAXX080903:3:48:644:1554#0
-CAACTATAGTGCTTGAGTGGAGTAGGGATGAGACTGGGGTGGGGACTTATATGGCTGAGGGGCGACAGAGCACTAA
-+
-677777888888888888888888777+65554432221*0//-'--+%,-,+*)*)))))('(&''"""$##"#"
- at 30BB2AAXX080903:3:40:342:1281#0
-GATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATGGCTCGCGGGAAT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))))('('%""%"#"""
- at 30BB2AAXX080903:3:57:1435:687#0
-AAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTATAGACGACACAT
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))(('(&&%""$$##"
- at 30BB2AAXX080903:3:56:786:316#0
-AAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTTCTAGATCGAATG
-+
-67777788888888888888888877776555443222100//..---,,+++**))))))()(''''&%%&##""
- at 30BB2AAXX080903:3:4:720:1212#0
-TCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATNCTCANCN
-+
-6777778888888888*88888887777625544302210//0.,,.,+,+*+**)**)()()((''"""%%#"#"
- at 30BB2AAXX080903:3:2:71:347#0
-AGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAAAGANACANNGC
-+
-677777888888888888188883777164104131/010...----++,+,++**'*)#(((&(''$"&%""""#
- at 30BB2AAXX080903:3:39:1233:581#0
-AGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATACTCTCACAC
-+
-67777788888888888888888577136/55043221000//,.-.,+-,,+(*)())))(()('#&&%%$%%$$
- at 30BB2AAXX080903:3:33:1236:1913#0
-GAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGCCTNCCCACGNN
-+
-6777778888888888888888887777655544322210///..--,,,+++***)*)())(((''"$#$"$"""
- at 30BB2AAXX080903:3:42:804:1382#0
-AAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGGGTT
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(('('&'#"#""""
- at 30BB2AAXX080903:3:43:474:1012#0
-AAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGTGGGGGCTC
-+
-67777788888888888888888877776555443220100//..----,*++****)))(((((('&&$$""#""
- at 30BB2AAXX080903:3:57:1550:1751#0
-AAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGGGCACTCAAAT
-+
-67777788888888888888808877776530443222110//...--,,,+++*()))))'(((('$$%"##$$"
- at 30BB2AAXX080903:3:1:730:1431#0
-GAAGCGGATGAGTAAGAAGAGTCTGGCTCCAACTAAAGAGCTGGAGGGGGGAAGGGAGGGGAGATCGCNATNCCAC
-+
-67777788888888-&88268'8%'75-$-12,,+$20+-,/&.%."-+%+&***)(&(#(#(###'$"%$""#"#
- at 30BB2AAXX080903:3:33:1537:1426#0
-GAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAAGATCGGNCACGCCNN
-+
-67777788888888888888/888777765551432/220//..,-,-,,,+++**())())(('('"$%$"##""
- at 30BB2AAXX080903:3:33:261:767#0
-GAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGGANCAAACANN
-+
-67777788888888888888888877776555443222.00///,-+-,++++***(*)))(('('#"&###"$""
- at 30BB2AAXX080903:3:36:108:1418#0
-GGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCACACTTN
-+
-677777888888888888888888777765554432211000/..-,-,,+++***)))*))('(''$%"#"##""
- at 30BB2AAXX080903:3:36:1204:194#0
-TGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTATGGCTGAGACTGNAGCCGTAN
-+
-6777778888888888888888887777655544322210.//..---,,++++**))))))((((&"#%#$#"""
- at 30BB2AAXX080903:3:39:891:601#0
-CCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCCTAC
-+
-67777788888888888888888877776555443222100//..---,,,++*****)*))()((&'&&&#%"""
- at 30BB2AAXX080903:3:56:877:2036#0
-GGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGACTGTACTTC
-+
-67777788888888888888888877776555443222100//...--,,+++*+**))))(((('''&%"##""#
- at 30BB2AAXX080903:3:37:143:1292#0
-GGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTGAGCGTATCGTN
-+
-6777778888888888888888887777655544321110//..----,,+++***)()))(()'''%""""#"#"
- at 30BB2AAXX080903:3:2:403:827#0
-CTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGTGGAGTAGGGCTNAGACGCT
-+
-677777888888888888888888777765553432221/0-/..---+,+++***)))))(((((&$""&%&"#"
- at 30BB2AAXX080903:3:4:1420:400#0
-TGCTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGATCGGAAGAGCGGTTCACNCACANCN
-+
-67777788888888888888884877776555441122/00+..,.,,,-,***+*()((#))#'##$"%$#""#"
- at 30BB2AAXX080903:3:36:1103:912#0
-CTCAGCCCTACTCCACTCAAGCACCATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCGATGCACN
-+
-67777788888888888888888877776555443222100//..---,-+,++*+))*)))((((#%""""##$"
- at 30BB2AAXX080903:3:49:581:2014#0
-CTCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCATATCCCATAT
-+
-67777788888888/,8483888/67756/55123+021//-)..,(-+)+*+*#('#(('''(#%%""#""#"""
- at 30BB2AAXX080903:3:4:989:1712#0
-TCAGCCCTACTCCACTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCCNCTAGNCN
-+
-677777888888888888888888275725604420220///--,,++,,+)**)**(()(''(('%&"%""#"$"
- at 30BB2AAXX080903:3:8:1017:788#0
-GCTATTTTCTGCTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTTGAGNTCACACNN
-+
-67777788888888888888888877776555443220100//.---,,-,++**)**)()((('('"$#"$#$""
- at 30BB2AAXX080903:3:42:1294:932#0
-AGTGTGCTATTTTCTGCTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACAACTATAGTGCTATTGTTCT
-+
-677747888888888/88288888-77765154/3222.00/...-)-+,,,)**(*))()(&&'(''##"&#"#$
- at 30BB2AAXX080903:3:40:1780:1441#0
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCACTAAAC
-+
-67777788888888888888888877776555443222100//..--,--+++***)())'(('(('%&$%$##"#
- at 30BB2AAXX080903:3:54:217:1473#0
-TCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCACTAGATG
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))((('''$&&"%###
- at 30BB2AAXX080903:3:33:1469:357#0
-CAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCNATATCTNN
-+
-67777788888888888888888877776555443212100/...---,,+******))*(((((('"$##$$$""
- at 30BB2AAXX080903:3:38:664:888#0
-CACTATAGTTGTAGCAGGAATCTTCTTCCTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCACTACTCTCACAC
-+
-67777788888888888888888877703555443212100//...--,,+++++***))(()((''&$%#%#"#"
- at 30BB2AAXX080903:3:39:1049:483#0
-AGAGTTTGGATTAGTGGGCTATTTTCTGCTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCCTGCTACACCTATCG
-+
-67774788888888(888888888777765554432121/0//..,,-,,+++**))*))())('&('$#$"$$#"
- at 30BB2AAXX080903:3:46:122:961#0
-TGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCACTAATCCAAACTCTAACCCTC
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*)))((('(&%"##%#$""
- at 30BB2AAXX080903:3:59:1513:1142#0
-TAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGCTAGGGGGTGGAAGCGGATGAGTAAGAAGATTCACAACNAC
-+
-67777788888888888888888877776555443222100//..---,,++****)))))))((('$$%%%$"$$
- at 30BB2AAXX080903:3:46:123:914#0
-TAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGCTAGGGGGTGGAAGCGGATGAGTGAGAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(''''%#"#"$""
- at 30BB2AAXX080903:3:50:97:1499#0
-TAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGCTAGGGGGTGGAAGAGATCCGGCGCCAC
-+
-67777788888888888888888877776555443222001//...---,+++***%))**(((((#$""$"##"#
- at 30BB2AAXX080903:3:40:768:1375#0
-GGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCGATTTTCTGCTAGAGATCGGAAGAGTGGCGTT
-+
-674777888888888888888888777763554432,-100//(%--,,,*+***)*()()'()'('&%""#""""
- at 30BB2AAXX080903:3:8:1721:722#0
-GGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGCTAGGGGGTGGAAGNCATCTCNN
-+
-67777788888888888888888877776555443222100//..---,,,++**)))))))((((&""##%##""
- at 30BB2AAXX080903:3:44:88:784#0
-ACAGAGTGGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTAGATGAGAAGAGCGCTCTC
-+
-67777788888888888/88888877776555-452/2100../----,,(++++*)*)))&((((&&""""$##"
- at 30BB2AAXX080903:3:1:305:216#0
-TTCCACCCCCTAGCAGAAAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACNTGNCTCA
-+
-677777888888888888888882087765553/322.100/0-/,.,-,*,++**()()))((%&('""""####
- at 30BB2AAXX080903:3:33:1319:516#0
-TTCCACCCCCTAGCAGAAAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCANCTCACANN
-+
-67777788888888888888888/.777055444320100/1/-.-&,,,*&(*'*()(((''(&'%"$#%$##""
- at 30BB2AAXX080903:3:56:1252:1047#0
-CTGCGAACAGAGTGGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGCTAGTGGCTC
-+
-67777788888888888888888877776555443222100//..---,,,+****))*)))()('''%%"""$""
- at 30BB2AAXX080903:3:60:1084:1851#0
-CTAGCAGAAAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGTNTGNN
-+
-67770788888888888888888877776555443222100//..--,,,+++**()*))()(((''&%%#"#"""
- at 30BB2AAXX080903:3:42:1712:170#0
-CAGACTGCTGCGAACAGAGTGGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGCTATTTTCTGTTG
-+
-67777788888888888888888877776555483222000//..--,,,+++**+)*))))()(''$&%%&$"##
- at 30BB2AAXX080903:3:47:727:856#0
-GCAGACTGCTGCGAACAGAGTGGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATAGATCGGAAGATGCGATGC
-+
-67777788888888888888888877776/55413222000/..,---,,+,+****))))'(((''""#"$""##
- at 30BB2AAXX080903:3:60:908:191#0
-GCAGACTGCTGCGAACAGAGTGGCGATAGCGCCTAAGCATAGGGTTAGAGTTTGGATTAGTGGGCTATATCCGCNN
-+
-67777788888888888888,88,77476/5'4,0221/-0/#.%,--,,*)+++())()%(()%&&'#%#%"$""
- at 30BB2AAXX080903:3:59:346:751#0
-CGCAGACTGCTGCGAACAGAGTGGTGATAGCGCCCAAGCATAGTGTTTGAGGTTGGGTTAGTAGGCTATTTCANNA
-+
-677777888888888888888088577-65.5(-"-.-0.,-/,.,,#,+,$*+**(&(#(#')(#%%"&"%$"""
- at 30BB2AAXX080903:3:37:1709:1765#0
-CAGAAAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCCGCTCTCNN
-+
-67777788888888888888888877776555443222100//..---,-+++***)**()((((('"$$"#"$""
- at 30BB2AAXX080903:3:36:1216:177#0
-GAAAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCAAGACCGGAAGAGCGGNCANCTACN
-+
-677777888888888888888888777785554432-11-0//.---,*(+)***#&&&('(((&''"$""$""$"
- at 30BB2AAXX080903:3:43:667:969#0
-AAGGGCGCAGACTGCTGCGAACAGAGTGGTGATAGCGCCTAAGCATAGTGTTAGAGTTTGGATTAGTGGGGGGACA
-+
-67777788888888888888888877776555443222100//..----,,++****)))))()(('$$&#""#"#
- at 30BB2AAXX080903:3:37:1211:1239#0
-CTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACCAACACGN
-+
-67777788888888888888888877776555443221100//..---,,++++*))))*)(()(('&$#$#%"#"
- at 30BB2AAXX080903:3:49:1270:978#0
-CCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTAAGATCGGTAACCTC
-+
-67777788888888888888888877776545443222200//.-.--,,+++*'*))*((((((('%""""##"#
- at 30BB2AAXX080903:3:44:767:623#0
-CAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAACGACATCA
-+
-67777788888888888888888877776555443222110//..--,,,+,+**+))))))()('('$#""#"##
- at 30BB2AAXX080903:3:48:960:1633#0
-AACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGATATCATC
-+
-67777788888888888888888877776555443222100//..----,++++***)))))(((('"""###"#"
- at 30BB2AAXX080903:3:4:581:669#0
-CTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGAGATCGGAAGAGAGGGTCCNCCTCNCN
-+
-67777788888888888888888/77716555443021001./-,--,,,+,+****$*'*#)(%'%"""#"#"""
- at 30BB2AAXX080903:3:44:65:2007#0
-TGCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATGCAAGTCA
-+
-67777788888888888888888877776553443312.0/..-.-,,),,++**+))*)))()(('$"##"""#"
- at 30BB2AAXX080903:3:1:906:1104#0
-GCTTAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAGATCGTNACNTATA
-+
-6777778888888888888888887777655544320211/...----,,+++**)*)*)(((('&'""##"#""#
- at 30BB2AAXX080903:3:57:112:689#0
-AAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGACTGCTGCGAACAGAGTGGTGATAGCGNGTNCCC
-+
-67777788828888888888888877776555443222101/...---,-+*****)))))((('''&&"##"$$#
- at 30BB2AAXX080903:3:8:838:1370#0
-TAGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAGATCGGAAGANCATGTANN
-+
-6777778888888888888888887777654544322120///.--,-,,+++**))*))))('(''"%""#"#""
- at 30BB2AAXX080903:3:4:793:1855#0
-GAGAAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGACTGCTGCGAACAGAGTGGTGACNCTGANAN
-+
-67777788888888888888888877776555543202(00//...--,--++*)****()&))#('%"$""#"#"
- at 30BB2AAXX080903:3:4:751:1909#0
-AGGCGCTATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAGATCGGAACNACCTNCN
-+
-677777888888888888868888/7776+534432021/1//.,-,+,,++)**)*))()((((''$"%"##"$"
- at 30BB2AAXX080903:3:36:732:936#0
-GGAGAAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGACTGCTGCGAACAGAGTGGTGCTCAGATAN
-+
-67777788888888888888888877776555443222100//.----,,,+++*))*))((((''&"%###$"$"
- at 30BB2AAXX080903:3:38:109:1392#0
-TGGAGAAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGACTGCTGCGAACAGAGTGGACATCGCATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)*))(('''%$"#""###
- at 30BB2AAXX080903:3:50:1612:982#0
-AGTGGAGAAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGACTGCTGCGAACAGAGTGACGCTCTCT
-+
-67777788888888888888888877776555443222100//..---,,,,+****)))()(('&'"$"#"###"
- at 30BB2AAXX080903:3:2:998:1935#0
-TATCACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCCNCACNGCC
-+
-677777888888888888888888777765454032211///,-----,,+)++)*)))')((('%'""%""""#"
- at 30BB2AAXX080903:3:34:716:1406#0
-CACCACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCNCCTCGCNN
-+
-67777788888888888888888877776555443222100//..-----+,+*)**))(())('('"$$"$""""
- at 30BB2AAXX080903:3:35:169:1277#0
-ACTCTGTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTAGATCGNACTACCAN
-+
-67777788888888888888888877776555443222/00//..---,,,++**)*))))((((&&""##$$#$"
- at 30BB2AAXX080903:3:56:1070:890#0
-GTTCGCAGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCAGATCGGAAGAGCGCATACCA
-+
-67777788888888888888888877776555443222100//&.--,,,+,++**)*))))()('''%#""####
- at 30BB2AAXX080903:3:42:1197:1745#0
-TATGAGTCCTAGTTGACTTGAAGTGGAGAAGGCTACGATTTTTTTGATGTCATTTTGTGTAAGGGCGCAGATTGCT
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))((('(&&$%""##""
- at 30BB2AAXX080903:3:57:1017:1304#0
-GTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAGTCAACTAGGACTCGTATAAC
-+
-62777-88888888888888888877(7655544322210//..----,,+&+****'())())'''&$#&""#"#
- at 30BB2AAXX080903:3:44:1323:1466#0
-CTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAGTCAACAGATCGGAAGAGACAAA
-+
-67777788888888888888888877776555443222000/..--,,,-++'*)))*))(()('('&$"#&#%##
- at 30BB2AAXX080903:3:33:1145:1447#0
-ATGCCGATTGTAACTATTATGAGTCCTAGTTGACTTGAAGTGGAGAAGGCTACGATTTTTTTGATGTNACTCTGNN
-+
-64777788888888888888888877776555443222000//..---,,+++*+**)))))()(''"#"&%%#""
- at 30BB2AAXX080903:3:54:845:989#0
-ATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCCACCC
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))(((''%"$"%$$#$
- at 30BB2AAXX080903:3:44:1551:1387#0
-TAGGTGTGGTTGGTTGATGCCGATTGTAACTATTATGAGTCCTAGTTGACTTGAGATCGGAAGAGCGGGTCAGCAG
-+
-6777778888888888888888887777655544322210///-.---,,,++****)))()((''&'"#$%$$"$
- at 30BB2AAXX080903:3:58:1666:1483#0
-ATCGTAGCCTTCTCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACAAAAGACAN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()('&'&"#"$$$"
- at 30BB2AAXX080903:3:35:32:1292#0
-AATGCTAGGTGTGGTTGGTTGATGCCGATTGTAACTATTATGAGTCCTAGTTGACTTGAAGTGGAGANACAAGAGN
-+
-67777788888888888888888877776555443222100//..----,+++***))*)))(((''""$"""#""
- at 30BB2AAXX080903:3:38:1105:1630#0
-AATGCTAGGTGTGGTTGGTTGATGCCGATTGTAACTATTATGAGTCCTAGTTGACTAGATCGGAAGACGTCATTGT
-+
-677777888888888888888888777765554452221/0//./---,,+,+*)*))*)'(('(('%$#"#"$$#
- at 30BB2AAXX080903:3:33:669:983#0
-GTAGCCTTCTCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACAAGNCAATGTNN
-+
-67777788888888888888888877776555443222100//...--,,++++*+**)))()(((("%""""#""
- at 30BB2AAXX080903:3:44:1727:1505#0
-GTAGCCTTCTCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAGATCGGAAGAGAGGGAC
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)))()('''$&&"$""""
- at 30BB2AAXX080903:3:56:291:48#0
-GGAATGCTAGGTGTGGTTGGTTGATGCCGATTGTAACTATTATGAGTCCTAGTTGACTTGAAGTGGAGAGGGACGC
-+
-67777788388888888888888877776355420322010/0.--,--,*,***))*))((('((&&"#%%$$"#
- at 30BB2AAXX080903:3:39:1044:391#0
-TCCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCCGCACACCC
-+
-67777788888888888888888877716555443222000///.---,,-,+***)*()))(((('"&%%$""##
- at 30BB2AAXX080903:3:41:1427:771#0
-CTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCAGATCGCTAC
-+
-67777788888888888888888877776555443222010//..-.-,,-+++'*)*)()((((''&$&%%"#$#
- at 30BB2AAXX080903:3:40:332:1500#0
-TGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTGGTTGATGCCGATTGTAACTATTATGAGATCGGTAGGCGCGA
-+
-67777788888888888888888877776555443222100//..---,,++++***))))((((''$&%%$%""#
- at 30BB2AAXX080903:3:4:101:739#0
-TGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTGGTTGATGCCGATTGTAAATATTATGAGTCCTAGNCGAGNCN
-+
-67777788888888888888888877716,554432+2100/+-.---,+++#+**))(())(''(&"""""""#"
- at 30BB2AAXX080903:3:57:1001:1821#0
-GTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCACATAGAACCACATCC
-+
-6777778888888888888888887772855.54022,100*-.,.,,,,+$+)*()))()'(((''""$"%#"#$
- at 30BB2AAXX080903:3:43:1190:752#0
-CTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCACATCTGTACCCACGCCCATA
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))))('('%$%$#$##"
- at 30BB2AAXX080903:3:43:1631:572#0
-TAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCACATAGATCGGAAGAGCGATCT
-+
-67777788888888888888888877776555443221100//...--,,+++*****))))((('''&%#$""""
- at 30BB2AAXX080903:3:2:1332:587#0
-GAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTGGTTGATGCCGATTAGATCGGAAANCGCACAC
-+
-67777788888888888888888877776555443222100/...-,-,,*+***))*)))('(((&""##&$$##
- at 30BB2AAXX080903:3:52:476:1667#0
-TGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTGGTTGATGAGATCGGAAGGGCGTCG
-+
-67777788888888888888888877776555443222100./.----,,+++*****)))))(('%"$"$"%"##
- at 30BB2AAXX080903:3:43:1245:460#0
-TACAATCGGCATCAACCAACCACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTT
-+
-67777788888888888888888877776555443222100//..----,++++*****)))((((''&&&&$%%$
- at 30BB2AAXX080903:3:43:10:226#0
-CATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGATCGGAAGAGCGGTCACAGACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((('&"$"%"""##
- at 30BB2AAXX080903:3:4:1650:612#0
-AGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTGTNCTATNTN
-+
-67777788888888888888888877776545443212/00/..--,,,,*++*)*)))()(()'('""#""%"""
- at 30BB2AAXX080903:3:45:1092:704#0
-GGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGTGTGGTAGGATGCAC
-+
-677777888888888888888888777765554422220000/..---,,++++**)*)))'('''%$%"""#$#"
- at 30BB2AAXX080903:3:47:1768:1464#0
-CGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGTGTGGTTAGCTGGA
-+
-67777788888888888888888877776555443222100./..--,,,+++*+*)()))((((''$$""$""""
- at 30BB2AAXX080903:3:60:1397:1728#0
-GGACCCGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAATGCTAGGACAAACANN
-+
-67777788888888888888888877776555443222000//..-,,,,+++*)))))))(()((''&&%%%#""
- at 30BB2AAXX080903:3:59:1146:1872#0
-TGATGGACCCGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGGAAGATCGGACACCC
-+
-67777788888888888888888877776555443222100/..----,-+,++***)#*)(((''''&&"#$%##
- at 30BB2AAXX080903:3:48:1703:446#0
-CCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATAACCTCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))()(('&"""""##$"
- at 30BB2AAXX080903:3:53:970:982#0
-CCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGAGATCGGAAGGTTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((((($$""""""#
- at 30BB2AAXX080903:3:39:1561:1853#0
-TGTGGATGATGGACCCGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACAGATGTGCAGTGATANAGN
-+
-67777788888888888818888877776555443222100//..---+,+++*)*')))()'(#('"&&#$"##"
- at 30BB2AAXX080903:3:3:1186:1466#0
-GTTGTGGATGATGGACCCGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACGGATGGGGTNCTCTNAC
-+
-6777778888888888888888884175655541/22200//-.,-,,-,*+(+**#(&(('#('%'%"&"#"""$
- at 30BB2AAXX080903:3:2:736:303#0
-TGCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCACAACNGTCTGCA
-+
-67777788888888&8/8088888787765154435201/01/./---$-,++'*)*)*))(#((('&"#&#"""#
- at 30BB2AAXX080903:3:56:539:515#0
-GCACATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCACAACATTAACATC
-+
-67777788848888888888888877756555443222100//..---,,+++***)))))((((('$$%&"#""#
- at 30BB2AAXX080903:3:58:1080:2019#0
-TCATTGTTAAGGTTGTGGATGATGGACCCGGAGCACATAAATAGTATGGCTTTGAAGAAGGCGTGGGTACNACACN
-+
-6777778888888888888888887777655542222222///..----,+++*)**))))&('(('$&%""#"#"
- at 30BB2AAXX080903:3:8:1731:1740#0
-CTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCACAACAGATCGNGCATCANN
-+
-67777788888888888888888877776555443222100//.-.,-,+,+++****)())(((''"""#&##""
- at 30BB2AAXX080903:3:43:398:1158#0
-TGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAG
-+
-67777788888888888888888877776555443222100//..---,,,++****)*)())(((&'&%&&%%""
- at 30BB2AAXX080903:3:35:812:1787#0
-TTTCGAATATCTTGTTCATTGTTAAGGTTGTGGATGATGGACCCGGAGCACATAAATAGTATGGCTTNGACACTAN
-+
-677777888888888888888888777765554432221001.-.-,--,++*+))*))()))('(&"##%$$"$"
- at 30BB2AAXX080903:3:45:810:764#0
-TACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGCATAAC
-+
-67777788888888888888888877776565443222100//..--,,,+++***))))*()((('%%##"""""
- at 30BB2AAXX080903:3:60:479:723#0
-GGTTTTGAGTAGTCCTCCTATTTTTCGAATATCTTGTTCATTGTTAAGGTTGTGGATGAGATAGGAAGCGCACGNN
-+
-67777788888888888888888877776555443222100//..---,+++***))*()))#((''&"&%#$"""
- at 30BB2AAXX080903:3:60:376:823#0
-TGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAGTNGANN
-+
-67777788888888888888888870776555443222000//.-.-,,,++****)*))())((('%%&"""#""
- at 30BB2AAXX080903:3:55:923:1011#0
-GTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTCGAATATCTTGTTCATTGTTAAGGTTGTGGAGGTTGTCCC
-+
-67777788888888888888888877776555443222000//..---,,++*****)))(((((''$&"$"###"
- at 30BB2AAXX080903:3:2:886:107#0
-AGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTCGAATATCTTGAGATCGGAAGAGTGGTTCACNCGCAACA
-+
-6777578888888888888,8038./67.05048332+0/1/./,.,,,,*+#**)()()#)(%'##""%$#"$##
- at 30BB2AAXX080903:3:33:772:1141#0
-CATCCACAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCNCTCGACNN
-+
-67777788888888888888888877776555443322100/...----,+,+***))))*('((''"$####$""
- at 30BB2AAXX080903:3:57:1094:1151#0
-CATCCACAACCTTAACAACGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTGCATAC
-+
-67777788888888888838888877776555443222100//..---,,++++****))))(((('$$&""###"
- at 30BB2AAXX080903:3:33:791:1659#0
-CACAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTAGATCNCACCTANN
-+
-67777788888888888888888877776565443222100/../--,,,+++*****()))(((('"$%"$""""
- at 30BB2AAXX080903:3:60:1262:580#0
-CCCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTCCTCAAAACCATACCTCTCACTTCAACCCCACTANN
-+
-*777778888888888888888887777655544322210,./..,-,+,&++*+*)))))((%''''#&#$""""
- at 30BB2AAXX080903:3:60:1263:579#0
-ACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACCTCACACNN
-+
-67777788888888888888888877776555443222100//..---+,++++**))))))))'''$&%#%$$""
- at 30BB2AAXX080903:3:43:737:1917#0
-GTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTCGAATAGATCGGAAGAGCGGCTCTC
-+
-67777788888888888888+88*777765554431.2+-/.+.-+--,-++*'&*)*))'))&&(''#%"#"##"
- at 30BB2AAXX080903:3:56:1542:996#0
-AACGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACCTCCCTCACACTTGCCA
-+
-67777788888888888888888877776555443222100//..-,-,,+++****))*)(((''&$$%$%##$%
- at 30BB2AAXX080903:3:47:1709:1411#0
-CTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTCGAATATATTGTCCAT
-+
-67777788888888888888888877776555443222100//..-----+++*+*))))))(((('"%"""##""
- at 30BB2AAXX080903:3:44:1690:1260#0
-GCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTGATCGGAAGCGGGTG
-+
-677777888888888888888888774745554/2222/00/-...--+$,,***(*)))%(((&('$"%#"""##
- at 30BB2AAXX080903:3:57:875:335#0
-CTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTAGATCGGAAGNATGCCC
-+
-67777788888888888888888877776555443221100/...---,,++++**))*))))('''%&""$####
- at 30BB2AAXX080903:3:42:1034:1784#0
-AAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTACC
-+
-67777788888888888888888877776551443222000//..----,+*+*******()(('(('%&&%%$"#
- at 30BB2AAXX080903:3:48:1571:2016#0
-ATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATTTTTCGTACGTC
-+
-6777778888888888888888882777652141302-10&....%+,,,*+')*'&#)#'(&'(''"$$#$#"""
- at 30BB2AAXX080903:3:3:704:1274#0
-TATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTAAACCTCCATCACCATTGGCAGCCNCGTANAC
-+
-6777778888888888888818887777652544122200.+/,%,,,++++')*+)))(((((((&'"#&$#"$"
- at 30BB2AAXX080903:3:40:1025:2020#0
-CTAATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCCTCCTATCTTTCGAAT
-+
-677777888888888888888888777765754/322200///*----+,,+++*)**)&')''(''$$#%#%###
- at 30BB2AAXX080903:3:44:799:1882#0
-CCTGCTAATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGCATGGTTTTGAGTAGTGCTCCTAGTNTGC
-+
-6777778888888888888848887'7-655144-22*.0&/,.---#,,,+%*)**()(()#'(&(%"##%"#"#
- at 30BB2AAXX080903:3:3:390:1182#0
-TATTCCTGCTAATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTTGAGTAGTCNCTCGNAC
-+
-67777788888888888888888877776555443322.00...,-,-,,+)+***#*))*((('(''"%$%#""#
- at 30BB2AAXX080903:3:45:814:637#0
-GAAAGGTATTCCTGCTAATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGGATGGTTTTGGGGAGGCGT
-+
-67777788888888888888888877776525443222100//.,--,,,+++***)&)*)('((((%&"#%"##"
- at 30BB2AAXX080903:3:35:1471:1981#0
-GGACTACTCAAAACCATACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAANACTCCAGN
-+
-67777788888888888888888877776553343322100//..--,,,++****(*()('(((#'""%"####"
- at 30BB2AAXX080903:3:1:871:1913#0
-GAGGAAAGGTATTCCTGCTAATGCTAGGCTGCCAATGGTGAGGGAGGTTGAAGTGAGAGGTATGGTTTNTCNGTGC
-+
-6777778888888888888808887777655544-222/0///..--+,,)*+)***)))'(()('&&"$%""##"
- at 30BB2AAXX080903:3:46:799:732#0
-GAGGAAAGGTATCCCTGCGAATGCTAGGCCGCCAATGGTGAGGGGGGATGCTGTGAGAGGTATGGTTGCGTGCAGG
-+
-677777888288%88883#88828&77+2%514(2222*00//.%-&&,,$&)$*'')))%(''(#'%#$""%$"#
- at 30BB2AAXX080903:3:48:1712:639#0
-TACTCAAAACCATACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATAGATCGGAAGAGCGCGACCACG
-+
-67777788888888888888888877776555443222100//..-,-,,+,++***()*)()((('$"""##"#"
- at 30BB2AAXX080903:3:8:1132:1392#0
-TACTCAAAACCATACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCNTCACCCNN
-+
-67777788888888888888888877776555443222100//..---,,+,+****))))()((''"$"$$##""
- at 30BB2AAXX080903:3:52:1350:805#0
-AAACCATACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCCCAGGTTC
-+
-67777788888888888888888877776555443222100//..--,,,+,+**))*))))(((('"$%%&%"""
- at 30BB2AAXX080903:3:47:480:1397#0
-TACCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGGCTTCATCTC
-+
-6777778888888882888888887777655544122010./...+,-,,,++))))*%(((('(&'"""$""#""
- at 30BB2AAXX080903:3:41:1509:1803#0
-GGAGTAGAAACCTGTGAGGAAAGGCATTCCTGCTAATGCCAGGCTGCCAATGGTGGGGGAGGTTGCAGTGAGCCTA
-+
-67775788888888888888888,6777)555,4%212.%,/-#--+,,(++*$+#**)&))#'(#'%%%$""##"
- at 30BB2AAXX080903:3:37:221:169#0
-CCTCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGGAGTNGAGTTNN
-+
-677(778,8888.8888888888877476555442222100//..--*--+++***)()))()((''&"%&%"$""
- at 30BB2AAXX080903:3:46:1746:264#0
-TCTCACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAAGATCGGAGGCGAGC
-+
-67777788888888888888888877776555343222100//...-,,,++****)*)))(((''($%""#"""#
- at 30BB2AAXX080903:3:55:30:1588#0
-GATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCTAATGCTAGGCTGCCAATGGTCCCTCGT
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((('&'#"##"#$#
- at 30BB2AAXX080903:3:2:390:1386#0
-TTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCTAATGCTAGGCTGCCANTGGNCTG
-+
-67777788888888888888888877775555443222001//.----,,+,+**+**)())((((''"#&#"%$$
- at 30BB2AAXX080903:3:36:1523:1305#0
-GCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCTAATGCTAGGCACACTCCNN
-+
-6777278888888888888888857'7.45624432211/0/..---',,,,)+*)*()))'((((%$"#%"$#""
- at 30BB2AAXX080903:3:55:861:1298#0
-TTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGAGATCGGAAGCGCGGTCTA
-+
-67777788888888888888888877776555443222100//..-.-,,+++***)*))*(((((&%%#$%####
- at 30BB2AAXX080903:3:52:1568:83#0
-TGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGGTTTCTACTCCAAAGACCACATCATCGAAACAGCAAAA
-+
-67777788888888888888888877776555443222100/...---,,+,+***)**))(((''&%'%"#""##
- at 30BB2AAXX080903:3:34:301:1637#0
-TGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCTAATGCNCGCAAGNN
-+
-67777788888888888888888877776555443222000//..---,,+++****))))()((''"%#$"""""
- at 30BB2AAXX080903:3:48:801:936#0
-TATGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCAGATCGCGTGCTA
-+
-67777788888888888888888877776555443222100//..---,,,,+***)*)))(()'('&$""""#""
- at 30BB2AAXX080903:3:33:1147:994#0
-CTAGCATTAGCAGGAATACCTTTCCTCACAGGTTTCTACTCCAAAGACCACATCATCGAAACCGCAANCCACACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))('(&"##"%#%""
- at 30BB2AAXX080903:3:3:435:246#0
-ATGATATGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCGNATGCNTN
-+
-67777788888888888888888877776555443222100///----,,-++++*))))))(''(&%"#%"#"""
- at 30BB2AAXX080903:3:57:1309:699#0
-TATGATATGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGTATTCCTGCTACACCCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))((('''&#$###"
- at 30BB2AAXX080903:3:43:1428:1750#0
-GCAGGAATACCTTTCCTCACAGGTTTCTACTCCAAAGACCACATAATCGAAACAGCAAACATATCATACACAACCC
-+
-677777888888888888888888387765553&5101100//+,---,,+++)*%)))()((((('''%$%##"#
- at 30BB2AAXX080903:3:42:1341:902#0
-GCGTTTGTGTATGATATGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGGNATGCCTG
-+
-677777888888888888488888737765.54432-21.0//..---,,,++**))*)))(((((('"$&"%$##
- at 30BB2AAXX080903:3:59:313:363#0
-TCAGGCGTTTGTGTATGATATGTTTGCGGTTTCGATGATGTGGTCTTTGGAGTAGAAACCTGTGAGGAAAGCANNT
-+
-67777788888888888888888877776355443222100//..---,,++***)*)*()()(('('&"&$#"""
- at 30BB2AAXX080903:3:56:1654:1651#0
-GGTTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGCCCTATACCAACACA
-+
-67777788888888888888888877776555443222100//..---,,+++***())))((('(&&&%%#$%%%
- at 30BB2AAXX080903:3:2:1014:1698#0
-GTAGCGATGAGAGTAATAGATAGGGCTCAGGCGTTTGTGTATGATATGTTTGCGGTTTCGATGATGTGNCTCTCGT
-+
-6777778888888888888888887777655541332.100//--,,-+,+,**+)*)()()((((&&""##$$""
- at 30BB2AAXX080903:3:49:1259:1767#0
-CATCATCGAAACCGAAAACATATCATACACAAACGCCTGAGCCCTATCTATTACTCTCATCGCTACCACCTTCACT
-+
-27777788888888$881888888777363254330/21.1++,.,-+,,+++))**))*((#('%'"##"##"#"
- at 30BB2AAXX080903:3:38:403:1455#0
-TTGTTAGGGAGGTAGCGATGAGAGTAATAGATAGGGCTCAGGCGTTTGTGTATGATATGTTTGCGGTATCGTCGCC
-+
-67777788888888888888888877776545443232110/..-.--,,+++*****)))))((('"&#&"$"##
- at 30BB2AAXX080903:3:46:165:1888#0
-CTTGTTAGGGAGGTAGCGATGAGAGTAATAGATAGGGCTCAGGCGTTTGTGGATGATATGTTTAGATCGGCCGAGC
-+
-67777788888888888888888877776555443221100//-..--,-,)+*****))'((((('&%%###"#"
- at 30BB2AAXX080903:3:36:370:1925#0
-CGCAAACATATCATACACAAACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTAACAAGACTCACACNN
-+
-67777788888888888888888877776525443222100./...,-+,,,++**)***(()(((#%"%"%"#""
- at 30BB2AAXX080903:3:35:602:1105#0
-TATTCGAGTGCTATAGGCGCTTGTTAGGGAGGTAGCGATGAGAGTAATAGATAGGGCTCAGGCGTTANCTCTACTN
-+
-67777788888888888888888877776455443221100/..,---,,,++***())())')%''"%#$###""
- at 30BB2AAXX080903:3:49:1686:677#0
-ATACACAAACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTAACAAGAGATCGGAAGAGCCTCCGCACA
-+
-6777778882888888888888887777655.4432220/0//-.--+,-+*+*+***))))()((#%"$#"$#$"
- at 30BB2AAXX080903:3:34:801:910#0
-GGGTGAGAAGAATTATTCGAGTGCTATAGGCGCTTGTTAGGGAGGTAGCGATGAGAGTAATAGATAGNCAAGATNN
-+
-67777788888888888888888877776555443222100/...+--,,,,+***)())))(((('"$$#"##""
- at 30BB2AAXX080903:3:36:96:1682#0
-CGCTACCTCCCTAACAAGCGCCTATACCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTACCCNATN
-+
-67777788888888888888888877726555443222100//..---+,+,++**))))))((('&$"$$$"$""
- at 30BB2AAXX080903:3:59:691:335#0
-CGCTACCTCCCTAACAAGCGCCTATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGAGATCAACNC
-+
-67777788888888888888888877776555443220100//..-.--,+++****)))))(((('&&#$##$"$
- at 30BB2AAXX080903:3:56:1682:205#0
-GTAAGGGTGGGGAAGCGAGGTTGACCTGTTAGGGTGAGAAGAATTATTCGAGTGCTATAGGCGCTTGCACACACCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''&&%%#$%$%
- at 30BB2AAXX080903:3:39:1645:1004#0
-TAGTAAGGGTGGGGAAGCGAGGTTGACCTGTTAGGGTGAGAAGAATTATTCGAGTGCTATAGGCGCTTGGCTATCA
-+
-677777888888888888888888777765554432/2100//..---,,+++****)*))(()''('&%$%#"$"
- at 30BB2AAXX080903:3:39:1190:1461#0
-CAAGCGCCTATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCCCACCAGATCTGCGCTTCT
-+
-67777788888888888888888877776555443222100//..---,,+++******)))()((&$&"""""#"
- at 30BB2AAXX080903:3:46:306:1636#0
-CGCCTATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACACGCTCGGA
-+
-67777788888888888888888877776555443222100//..---,,++++*****)))((((''%$#"#$#"
- at 30BB2AAXX080903:3:51:751:1889#0
-TAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATAGATCGGGATAAC
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(('('&$""""""#
- at 30BB2AAXX080903:3:39:1197:550#0
-AGGGTGGGGTTATTTTCGTTAATGTTAGTAAGGGGGGGGAAGCGAGGTTGACCTGTTAGGGTGAGAAAAATACCAG
-+
-6777778888888888888888880777455544%222110//..--+,,+&+**))**))((('('$""%$####
- at 30BB2AAXX080903:3:40:1571:1053#0
-ATGGGGTTTAGTAGGGTGGGGTTATTTTCGTTAATGTTAGTAAGGGTGGGGAAGCGAGGTTGACCTGTTGCGTGAT
-+
-67777788888888888888888877776555443222000//..-*-,,+++***)))()(('((''&%$&#"""
- at 30BB2AAXX080903:3:46:220:1335#0
-AGGTCAACCTCGCTTCCCCACCCTTACTAACATTAAAGAAAATAACCCCACCCTACTAAACCCCATTAGAACACTG
-+
-677777888888888882888888777765554432%2000//.-%--+,-*++++)*))))(((''&$"#%#%#%
- at 30BB2AAXX080903:3:39:1488:1570#0
-GCTGCCAGGCGTTTAATGGGGTTTAGTAGGGTGGGGTTATTTTCGTTAATGTTAGTAAGGGTGGGGAAGTCTGCCA
-+
-67777788888888888888888877776555443222100//..---+,++++**)*)))((('''%$""#"##"
- at 30BB2AAXX080903:3:2:1390:1379#0
-TGCGAATAGGCTTCCGGCTGCCAGGCGTTTAATGGGGTTTAGTAGGGGGGGGTTATTTTCGTTAATGTNTGTAGTC
-+
-6777778888888888888888887775635344322+10./-,--.#,,++*)***))(('(&('''""%""""#
- at 30BB2AAXX080903:3:58:1402:645#0
-CCTGCGAATAGGCTTCCGGCTGCCAGGCGTTTAATGGGGGTTAGTAGGGTGGGGTTATTTTCGTTAATGTATGACA
-+
-677777888888888888888888777765550432221%0/...---,,+++*&*)))))'))'''$$&"""$$$
- at 30BB2AAXX080903:3:8:1401:1341#0
-AATCCTGCGAATAGGCTTCCGGCTGCCAGGCGTTTAATGGGGTTTAGTAGGGCGGGGTTATTTTCGTNCTCTCTNN
-+
-64777788888888888888883)7777/5154,.-1-10//#.,+-*++,+#+**)(('&)(''''"$%#"##""
- at 30BB2AAXX080903:3:57:203:555#0
-GGAAGGGGGATGCGGGGGAAATGTTGTTAGTAATGAGAAATCCTGCGAATAGGCTTCCGGCTCGGTTGGGATGTCT
-+
-67777788888888888888888877776555443220100./..,-,,,,+++**()*)&(#'#%#$%#"#"###
- at 30BB2AAXX080903:3:51:303:1022#0
-GCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCATTACTAACAACATTTCCCCCGAGATCGGAAGGCACAGCGC
-+
-6777778888888888888888887777655544+2121&00/,..,-+,*)***))()'#(((('&%$#####"$
- at 30BB2AAXX080903:3:1:919:1238#0
-GTTGTTTGGAAGGGGGATGCGGGGGAAATGTTGTTAGTAATGAGAAATCCTGCGAAGATCGGAAGAGCNGTNATCT
-+
-677777888888888888888888777165/)4/322200,//./.,++,+,+**)*)(()('('%'&"##"###"
- at 30BB2AAXX080903:3:4:1652:529#0
-TGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGGGGATGCGGGGGAAATGTTGTTAGTAATGAGCNTGGTNTN
-+
-67777788888888888888888877776555443222100/-..---,,,++***))')()(((''""&&#%"$"
- at 30BB2AAXX080903:3:36:303:1975#0
-GCTGTGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGGGGATGCGGGGGAAATGTTGTTAGTAAGTACACANN
-+
-6777778888888888888888887777655544321.100//-.-,-,,++***+*)))))((('%"""$"$$""
- at 30BB2AAXX080903:3:38:217:1646#0
-GACAGCGAGGGCTGTGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGGGGATGCGAGATAGGAAGCGGACCGA
-+
-67777788888888-83888888877770555441222100///.-*,,,+++(**())))'')(('&#""###""
- at 30BB2AAXX080903:3:46:1507:923#0
-TGACAGCGAGGGCTGTGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGGGGATGCGGGGGAAATGTGATCACT
-+
-67777788888888888888888877776555443222100//..--,-,+++***))))))(''('"#"""####
- at 30BB2AAXX080903:3:8:1493:824#0
-AAAGTGACAGCGAGGGCTGTGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGGGGATGCGGGGGNCACCACNN
-+
-67777788888888888888888877776555443222110//..---,,+++***)))))(((((&"$"##"#""
- at 30BB2AAXX080903:3:4:1012:1341#0
-GGAAAGTGACAGCGAGGGCTGTGCGTTTTAGGCAGAGGGGGATTGTTCTGTGGAAGGGGGAGGCGGAGNACGCNGN
-+
-67777728888888)8388'8$8&73476255%330+210.%.-.,,&'*+**()*)())&%('((&"""&%$"$"
- at 30BB2AAXX080903:3:56:424:538#0
-AGGAAAGTGACAGCGAGGGCTGTGAGTTTTAGGTAGAGGGGGATTGTAGATCGGAAGAGCGGTTCAGCCGCGACGC
-+
-67777788888888888888888877776555443222100//..---,,,,+**))))))(#(('($"&$""#"#
- at 30BB2AAXX080903:3:54:246:1321#0
-CCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACTCACAGCCCTCGCTGTCACTAGATGTACACTA
-+
-677777888888888888888888727765554432221000/..---,,+,++****)())()'('$"""$#$""
- at 30BB2AAXX080903:3:58:628:423#0
-CCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACTCACAGCCCTCGCTGTCACTTTCCTATACGAC
-+
-67777788888888888888888877776555443222110//..-.-,,,++*+**)*()()((''''$"##"#$
- at 30BB2AAXX080903:3:45:783:2045#0
-GAAGTCCTAGGAAAGTGAGAGCGAGGGCGGTGGGTTTTAGGTAGAGGGGGATTGTTGTTTGGAAGGTGAGCGAGGG
-+
-6777778888888888880888887772(5)5)42221.00-).%---,,+,)+*)(*)())'#((&$"%##$"#"
- at 30BB2AAXX080903:3:54:1368:1964#0
-GCTGTTAGAAGTCCTAGGAAAGTGACAGCGAGGGCTGTGAGTTTTAGGTAGAGGGGGATTGTTGTTTGGTGTGCAC
-+
-677777888888888888888888777765554452221.0//...----+,+****)))))()(('$""$%$#"#
- at 30BB2AAXX080903:3:42:1717:204#0
-CCCCTTCCAAACAACAATCCCCCTCTACCTAAAACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACCACC
-+
-67777788888888888888888877776755443222101./.----,,+++*)&)*(#'((((&'&%&#"""#%
- at 30BB2AAXX080903:3:36:1734:565#0
-ACAACAATCCCCCTCTACCTAAAACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCNAGATCTNN
-+
-6777778888888888888888887777655544322210.//..---,-,++++))**)*))((('""##"$$""
- at 30BB2AAXX080903:3:4:1196:1002#0
-AACAATCCCCCTCTACCTAAAACTCACAGCCCTCGCTGACACTTTCCTAGGACTTCTAACAGCCCTACNCACTNCN
-+
-67777788888888888888888877776555443222100//...--,,++****))))))((((&$"%%$%"#"
- at 30BB2AAXX080903:3:39:1000:1553#0
-CCTCTACCTAAAACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTAGCTACCA
-+
-67777788888888888888888877776555443222100//..-,-,-+,+*)***)))()(('(&$"'&&"##
- at 30BB2AAXX080903:3:58:866:1006#0
-TGGTTAGGTAGTTGAGGTCTAGGGCTGTTAGAAGTCCTAGGAAAGTGACAGCGAGGGCTAGATCGGAATGGCGCTC
-+
-67777788888888888888888877776555443222100//..---,,+,+++*)))))))'(('$$#&"%###
- at 30BB2AAXX080903:3:37:667:1687#0
-CTACCTAAAACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTACTACAN
-+
-67777788888888888888888877776555423222100//-.----,+,++**)*))))(((('$###"#$#"
- at 30BB2AAXX080903:3:48:1298:1992#0
-TTGTTGGTTAGGTAGTTGAGGTCTAGGGCTGTTAGAAGTCCTAGGAAAGTGACAGCGAGGGCTGTGAGGTCTCGCA
-+
-677777888888888888888808777765554431121-./...,-,,,+++**))())(#(('('$"#"$#"#"
- at 30BB2AAXX080903:3:56:155:1614#0
-AACTCACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAACCAACACAGCCAC
-+
-67777788888888888888888877776553443222100//..-.-,,-++**+)**))))(('''&#$$"###
- at 30BB2AAXX080903:3:4:380:1658#0
-TTCTAACAGCCCTAGACCTCAACTACCTAACCAACAAACTTAAAATAAAATCCCCACTATGCACATTANATTTNTN
-+
-6777778888888888888888887777655544322-100...-..,,-,,+**)))())()((''"""&"#"#"
- at 30BB2AAXX080903:3:56:1219:694#0
-GAGAAATAAAATGTGCATAGTGGGGATTTTATTTTAAGTTTGTTGGTTAGGTAGTTAGATCGGAAGAGTGTGCCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''$%%#"###$
- at 30BB2AAXX080903:3:60:1049:25#0
-CTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATTCTACCCTAGCATCACACCACCNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)**)()()(('%##&$##""
- at 30BB2AAXX080903:3:51:1196:1390#0
-TAGATAGGGGATTGTGCGGTGTGTGATGCTAGGGTAGAATCCGAGTATGTTGGAGAAATAAAATGTGCTGAGCGGA
-+
-67777788888888888888888877776555441222100//...--,-++++****)))))(((''"""$#$$"
- at 30BB2AAXX080903:3:45:743:1497#0
-TTTTATTTCTCCAACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTTCCACGC
-+
-677777888888888888888888777765514232222/.//.-.-,,,+*+*(*)()'(((((''"""#""#""
- at 30BB2AAXX080903:3:47:792:1051#0
-TTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGCGGGGTGTGATGCTAGGGTAGAATCCGAGAGAAGTCGTGACC
-+
-67777708888888888884882877779'5544+22-1'0/.,,-"*,,+,#**)*((%(')(((#$"######"
- at 30BB2AAXX080903:3:53:1409:1325#0
-TTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGCGGTGTGTGATGCTAGGGTAGAATCCGAGTATGCTTGCGTAA
-+
-6777778888888888888888887777655544222/100//..---,,++*+*))*())(((((($##&"""#"
- at 30BB2AAXX080903:3:39:253:1770#0
-CTCCAACATACTCGGGTTCTACCCTCGCATCAGGCACCCCACACTCCGCTATCTAGGCATTCTTACGCGTCTCCAC
-+
-(7.7278888,88)-%+888%3085'%+1)65,11%+,.0/$.#,$-(+,),'$)##)(('#&(''%$""#$"$#$
- at 30BB2AAXX080903:3:60:1613:1509#0
-AACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGACACACAACNN
-+
-677777888888888888888888777765554432221000/..---,,,++*)*)*))))((''&$$%%"$%""
- at 30BB2AAXX080903:3:49:52:1174#0
-ACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCACAACCTGCC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))(((((&"$#"%#"##
- at 30BB2AAXX080903:3:33:234:393#0
-AGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGCGGTGTGTGATGCTAGGGTAGANCCACTCNN
-+
-677777888888888888888888777765554402221/0//..---+,++****)))()))#(('"%%%%##""
- at 30BB2AAXX080903:3:54:1013:1584#0
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACCTCTCCTA
-+
-67777788888888888888888877776555443222110//..--,,,+*+****)())((((('&%"&%%%$$
- at 30BB2AAXX080903:3:49:931:491#0
-CCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCCTNCGCCAC
-+
-67777788888888888888888877776555443220100//..---,,,+++****)))')((''"""#""#"#
- at 30BB2AAXX080903:3:57:850:790#0
-CCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTCCTCC
-+
-67777788888888888888888877776555443222100//..---,,,,++**)))))))('(('&&%$#"##
- at 30BB2AAXX080903:3:35:1122:44#0
-TAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGCGGTGTNTGCCTCNN
-+
-67777788888888888888888873776555443222100//..-,--,,++**)())()(((''%""$####""
- at 30BB2AAXX080903:3:3:1318:1012#0
-TAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGGGGTGGTNTGTCNAC
-+
-677777888888888888888038715765401/2..-0.,..(,*)++()++**#%()#'#'(#'&""%"##"##
- at 30BB2AAXX080903:3:33:93:1601#0
-GGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGCGGNTCGTGTNN
-+
-67777788888888888888888877776555443232000/...-,-,+++**++)))'))(('('"$%"#"#""
- at 30BB2AAXX080903:3:48:882:1982#0
-CAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTAGATCGGGCGA
-+
-6777778888888888888888887777655544320200/-..----'++)+**)))))'((('&'"###"""#"
- at 30BB2AAXX080903:3:1:1215:888#0
-GTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGNGCNTACT
-+
-67777788888888888888888877776555343222111//.----+,+****)***))(#%((%%""#"""#"
- at 30BB2AAXX080903:3:50:991:1594#0
-GTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGATTGTGTGATACCA
-+
-67777788888888888888888877776555443222100/../-,--,(++**(*()))(&((('%"$"""###
- at 30BB2AAXX080903:3:35:1367:1708#0
-CTAGTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGCCTAGATAGGGGGTNTGCACATN
-+
-67777788888888888888888877776555443.221001/.--*--,+,+(*'())(()))(%'"$$$#$##"
- at 30BB2AAXX080903:3:57:1070:340#0
-GCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACCTAACCTGACGACTCAC
-+
-67777788888888888888888877776555-43220100//..'--,++*+*+')*))''(((('%'"#$"###
- at 30BB2AAXX080903:3:37:1017:83#0
-CTTTTCTAGTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGGTTTGGCTCGTAAGAAGGCCCAGCTAGCGTGGCTNN
-+
-6777778888888888888888887777654544322110&//..--+-)*'****')#(##(##&'$&$%#%#""
- at 30BB2AAXX080903:3:50:1755:1702#0
-AGGTAATAGCTTTTCTAGTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGGGCAGTCTC
-+
-67737788888888888888888877776555443222110//..---,+,++***)*)((((((&'""##""#"#
- at 30BB2AAXX080903:3:41:1740:887#0
-TTAGGTAATAGCTTTTCTAGTCAGGTTAGGTCTAGGAGGAGTAGGGGCAGGTTTTGGCTCGTAAGAAGGATTCTAT
-+
-67777788888888888888888877776555443222100//..---,,+)+***)**))#(((('&$"#"#"##
- at 30BB2AAXX080903:3:33:1694:740#0
-TTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCGAAAACNACACACNN
-+
-677777888888888888888.88.77765454431220..#'.%-+-+,,+++**'()'(''('(%"#%$$$$""
- at 30BB2AAXX080903:3:38:1488:1643#0
-AGCCAAAACCTGCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCCGT
-+
-67777788888888888888888877776555442222100./..---,,+++**)*)))))((('''"%$#$#"#
- at 30BB2AAXX080903:3:52:1596:1556#0
-TGGAGGTGGAGATTTGGTGCTGTGAAATTGTTTTAGGTAATAGCTTTTCTAGTCAGGTTAGGTCTAGCACAAGAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('"""##"##"
- at 30BB2AAXX080903:3:35:757:516#0
-ACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATCTCCNACTCCANN
-+
-6777778888888888888888887777655544322210//...---,,+++++***))())((('""%%"##""
- at 30BB2AAXX080903:3:44:635:77#0
-CCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCACCCCAAAA
-+
-67777788888888888888888877776555443222100//,/.-,,,++++**)*)()(()((''"%&%$%#%
- at 30BB2AAXX080903:3:48:356:1388#0
-TTATGCCTTTTTGGGTTGAGGTGATGATGGAGGTGGAGATTTGGTGCTGTGAAATTGTTTTAGGTAATAGGCTTCC
-+
-677777888888888888888882777765554/3202.00//..---,-+(+***)*))))((('($$$"##"#"
- at 30BB2AAXX080903:3:42:833:1839#0
-AAAAGCTATTACCTAAAACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAAT
-+
-67777788888888888888888877776555243220100//,.'--,,+++*+())))()()((''&%"""##"
- at 30BB2AAXX080903:3:53:369:1855#0
-CCTAAAACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAATTCTACCG
-+
-67777788888888888888888877776555443222100//..---,,++++*))))))))('(&$"#$&##"#
- at 30BB2AAXX080903:3:56:418:1180#0
-TAAAACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTCTACTAC
-+
-67777788888888888888888877776555443222100//..----,++++**)))))(((((''$#&%%#"%
- at 30BB2AAXX080903:3:46:1017:165#0
-ACAATTTCACAGCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTCCCTCT
-+
-67777788888888888888888877776555443222100//.----,,+++***)))))))((((%$$##$$##
- at 30BB2AAXX080903:3:57:457:665#0
-CACAGCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCCT
-+
-67777788888888888888888877776555443222100///.--,,-,++****)))*))((('&'"$""###
- at 30BB2AAXX080903:3:51:271:1380#0
-CCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCTCCCTCTCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((((''$$#"%&#$%
- at 30BB2AAXX080903:3:46:1263:423#0
-AGTGGGAAGAAGAAAGAGAGGAAGTAAAGTTTAATTATGCCTTTTTGGGTTGAGGTGATGATGGAGGCTCTGTGGG
-+
-67777788888888888888888877776655443222110//.,----,+++**))**))((((('$$#""#"#"
- at 30BB2AAXX080903:3:36:1672:1516#0
-TCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCTAGATCGCTACATANN
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))((((&$""$$""""
- at 30BB2AAXX080903:3:39:324:274#0
-AGGATGAGTGGGAAGAAGAAAGAGAGGAAGTAAAGTTTAATTATGCCTTTTTGGGTTGAGGTGATGACGGATGCAC
-+
-67777788888888888888888877776555443122020//..---+,+++**+*))))(((''(&$$""$"$#
- at 30BB2AAXX080903:3:2:1557:1454#0
-GTTAGGATGAGTGGGAAGAAGAAAGAGAGGAAGTAAAGTTTAATTATGCCTTTTTGGGTTGAGGTGATNTGTACGC
-+
-67777788888888888888888877776555423222.000....--,+,,+*****(*)(((((''"""""#"#
- at 30BB2AAXX080903:3:33:1648:1183#0
-CCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCTTCTTCCCACTCATNCGCTACNN
-+
-67777788888888888888888877776555443222100//.----,,+++***))))))(((('"%"#$#%""
- at 30BB2AAXX080903:3:52:300:450#0
-ATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTTCCTCTCTTTCTTCTTCCCACTCATCCTTGACCTAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''""""$####
- at 30BB2AAXX080903:3:35:1368:1341#0
-TTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCCGAGCAATCTCAATTACAATANATCATACN
-+
-67777788888888888888888877776555443222100//..---,,,+*+**)))))(((((&"&%&%###"
- at 30BB2AAXX080903:3:52:130:672#0
-CCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCCGAGCAATCTAGATCGGAAGAGCGGCTCAGCAG
-+
-67777/88888888888888888877776555443022100//.-+-,+,**'*)*'))((()((''$$#$"%#$#
- at 30BB2AAXX080903:3:47:281:1197#0
-GGTTGAACATTGTTTGTTGGTGTATATATTGTAATTGAGATTGCTCGGGGGAATAGGTTATGTGATTAATCTCACG
-+
-6777778888888888888888887777655'443221100//..---,,++++**))*))()((('"""#""#""
- at 30BB2AAXX080903:3:43:547:317#0
-TCACATAACCTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACTCCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(((&&##%$"$"#
- at 30BB2AAXX080903:3:58:448:1757#0
-GGGCGTTGATTAGTAGTAGTTACTGGTTGAACATTGTTTGTTGGTGTATATATTGTAATTGAGATTGCAGCGATCN
-+
-67777788888888888888888877776555343222100//..---,,+++***))))))((('&&&%#""$#"
- at 30BB2AAXX080903:3:56:96:511#0
-CCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACTACTAGATCGGCTNGCTCGT
-+
-6777778888888888888888887777655544322210///..---,,++++**)))))((((''$""%%%%##
- at 30BB2AAXX080903:3:51:1374:267#0
-CCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACTACTACTAATCAACGNCNATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''"$#"$"$#"
- at 30BB2AAXX080903:3:43:841:186#0
-GAAGGAGAGGGGTCAGGGCTGATTCGGGAGGAGCATATTGGTGCGGGGGATTTGTAGGATTATGGGCGTTGTGTGG
-+
-677777888888888888&888287777'55543"(0./0.+/&.-,,,(*,#+')&'&#%((('''$##$""#""
- at 30BB2AAXX080903:3:54:1409:1705#0
-GAAGGAGAGGGGTCAGGGGTGATTCGGGAGGGTCCTATTGGTGGGAGGGCTTTGTATGATTATGGGTGCGAGCACA
-+
-677777888888888888888828(777655'31/2)2.00-/$.%,'+,+))**'(*'(()(('''$#"#%%#$#
- at 30BB2AAXX080903:3:60:312:1326#0
-GAAGGAGAGGGGTCAGGGTTGATTCGGGAGGATCCTATTGGTGCGGGGGCTTTGTAAGATCGGAAGAGCGCNGANN
-+
-67777788888888888888888877776555443222100//..---,,+++*+)*))*(((((''&$%$"""""
- at 30BB2AAXX080903:3:8:1707:1664#0
-GAAGGAGAGGGGTCAGGGTTGATTCGGGAGGATCCTATTGGTGCGGGGGCTTTGTATGATTATGGGCNATCCAANN
-+
-6777778888888888882888887777655341321%100-/..-,-,,+)*+*)*)((()()('#"$##%"$""
- at 30BB2AAXX080903:3:55:462:1131#0
-AGGAAGCTGAATAATTTATGAAGGAGAGGGGTCAGGGTTGATTCGGGAGGATCCTATTGGTGCGGGGGCATTGACT
-+
-6777778888888888888888887777655544322/100//..---,,,+++****))((((''&"""%$$##$
- at 30BB2AAXX080903:3:39:1400:1385#0
-TTTAATAGTGTAGGAAGCTGAATAATTTATGAAGGAGAGGGGTCAGGGTTGATTCGGGAGGATCCTATTGTCTCGC
-+
-67777788888888888888888877776555443222100//..---,,++++***))))()&((''%%#$$#"#
- at 30BB2AAXX080903:3:51:117:880#0
-GCACCAATAGGATCCTCCCGAATCAACCCCGACCCCTCTCTCTCATAAATTATTCAGCTTCCTACTCCACGTCATC
-+
-+7777708888388888488828827776$561422-11/&)/-'-)+*%+)+)&''((&'&)'(&%$"#""#""#
- at 30BB2AAXX080903:3:34:1602:1855#0
-TCCTCCCGAATCAACCCTGACCCCTCTCCTTCATAAATTATTCAGCTTCACACACTCTTAAAAGATCNCTCTCGNN
-+
-6777718888888888888888887777:-3-.1323-100./#.,-*+$$++*))&'()'(('###"$"$#%"""
- at 30BB2AAXX080903:3:50:816:964#0
-GATGGGGGGGTGGTTGTGGTAAACTTTAATAGTGTAGGAAGCTGAATAATTTATGAAGGAGAGGGGTCGTCCAGCA
-+
-6777778/88888888(888888-77776555$42222100'..,--,,,++*+*)*))))(()((&$"""#""##
- at 30BB2AAXX080903:3:52:1384:1857#0
-TGACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCAGATCTGCCA
-+
-677(5088388188888888888871773550/42*1$100/---.--,,(*+'**'#)'#((#%%%"""&&%""#
- at 30BB2AAXX080903:3:38:208:1288#0
-GTGAAAGAGTATGATGGGGTGGTGGTTGTGGGAAACTTTAATAGTGTAGGAAGCTGAATAATTTAGATCGCAACAT
-+
-6777778888888888888888887777655,043'221&0//.--,,,,+++'**'*))))(((''%"#""###"
- at 30BB2AAXX080903:3:36:1039:1295#0
-CTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCATCATACTCTCTGTGN
-+
-67777788888888888888888877776555443222100//..---,,++++**)**)))))(''$&&$%%%#"
- at 30BB2AAXX080903:3:58:312:1709#0
-ATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGTGGTTGTGGTAAACTTTAATAGTGTAGGAAGCTGNATACNN
-+
-67777788888888888888888877776555543222&00./.',,,+,++***))))')()(((#%&"%$"#""
- at 30BB2AAXX080903:3:2:271:1903#0
-GGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGTGGTTGTGGGAAACTTTAATAGAGGAGATCGNCGANNTC
-+
-67777788888888888888'8.8.777655543%22+10-0/,.-)+,,++**)*)))')&'((&%%"#"#"""#
- at 30BB2AAXX080903:3:54:1619:660#0
-GGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGTGGTTGTGGGAAACTTTAATAGTGTAGATACAACATCCA
-+
-67777788888888888888888877776555443222100//..---,,(++***)))))(((''#$$&%%"###
- at 30BB2AAXX080903:3:44:1069:135#0
-GATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGGGGGGGGTGTGGGAAACTTTCACAGTCGGCAG
-+
-67777788888888888888888877776255441222100//.---&,,+*+*+*()#)'%((#(#""""%%""#
- at 30BB2AAXX080903:3:54:476:1819#0
-CACTATTAAAGTTTACCACAACCACCACCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCTCTCGCCTA
-+
-67777788888888888888888877776555443222100//...--,,,++****))())(((((""$%%$#""
- at 30BB2AAXX080903:3:48:318:1422#0
-TGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGGGGGGGTTGTGGTCGAAGCCTC
-+
-677777888888888888888818777765554432#2+-0//.,-.--,+++*&*)&))&((''('$"""###"#
- at 30BB2AAXX080903:3:44:1552:1847#0
-TAAAGTTTACCACAACCACCACCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCAC
-+
-67777788888888888888888877776550453222100//..---,-++++****)*)()(((&'#&&%%$#%
- at 30BB2AAXX080903:3:40:1399:1074#0
-TAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGGGAAAGAGTATGATGGGGTGGGGGGTGGTGTCGGTAC
-+
-677777888888888888888888777765554432221&0./..,-+,,+++***)'))(()'(('"$%&"#"##
- at 30BB2AAXX080903:3:47:1125:428#0
-TTTACCACAACCACCACCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCAGATCGGAGTTGTTAT
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))))((('&#"#""""#
- at 30BB2AAXX080903:3:38:981:596#0
-TTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGTGGTCTCATCTCA
-+
-67777788888888888888848897776555423222000/).,-,-+,,++**))*))')(#((%"%"&%$%$#
- at 30BB2AAXX080903:3:49:548:943#0
-GTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGTGGTGTCTCCGC
-+
-67777788888888888888888877776555443222100//-..--,,+,+***)))))(((''&"$"#"##"#
- at 30BB2AAXX080903:3:1:1177:1935#0
-GAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGGNGCNACTC
-+
-67777788888888888888888877/76355443222/00//-.---,,-++**)))))))(('&'&""#""#"#
- at 30BB2AAXX080903:3:59:715:1055#0
-TGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGTATGATGGGGTGTGCATCCA
-+
-67777788888888888888888877776555443222100//..---+,,*+***)*))))(('''$%%$#"##$
- at 30BB2AAXX080903:3:41:1158:1111#0
-CAACCACCACCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAAGATCGGAAGAGGCTTCTC
-+
-67777788888888888888888877776555443222100//..-.-,,+++*****))))()((&'%"""#$#"
- at 30BB2AAXX080903:3:56:1714:605#0
-AACCACCACCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAAACCCACCAAACAAAACACA
-+
-67777788888888888888888877776/158/50200%&...--+--)),*+(&)$)))&'%'&'&%%%%$%$$
- at 30BB2AAXX080903:3:51:407:596#0
-GGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGGAAGAAGATCGGAAGGCTATAGTC
-+
-67777788888888888888888877776555023222100./..---,,)+%*+**)))(&)('''"$"""""##
- at 30BB2AAXX080903:3:57:1377:1215#0
-TTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAGGAGTATGATGGTGCACNCT
-+
-67777788888888888888868877756555441222000//(.(---,,+)*&)))#)#')('&&$%%$%$"#"
- at 30BB2AAXX080903:3:4:562:859#0
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCNTCACNCN
-+
-677777888888888888888888777765754432211000.-.--,,,+**+***)()()((((#'"$#%$"#"
- at 30BB2AAXX080903:3:36:373:744#0
-TGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGCAATAGGTN
-+
-67777788888888888888888877776555443222100-/...--,,+++***)))%)((('''$$"#"""""
- at 30BB2AAXX080903:3:47:1645:1845#0
-TTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGAGCGCGCCGT
-+
-67777788888888888888888877776555443222100/...-,--,+++***))))')((((''#%"""#"#
- at 30BB2AAXX080903:3:46:1443:1289#0
-GTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGGTGAAAGCGCCTGAGC
-+
-6777778888888/88888888887777654544322210///.,----,+++*)*)')*)((((('$"""""""#
- at 30BB2AAXX080903:3:4:1232:1142#0
-GTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGAGATCGGAAGAGCGNCTCTNCN
-+
-6777778888888888888888887777655544322210///,.--,,,++****)(***(((((#""#$#$"$"
- at 30BB2AAXX080903:3:36:487:919#0
-TACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTGCACACACN
-+
-67777788888888888&8888883/776550443021200/./,--,,+,++**)*))))()(('%$%%%$###"
- at 30BB2AAXX080903:3:43:577:655#0
-CATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGTGCTGTGGCG
-+
-67777788888888888888888877776555443222100//..---,,,++***)()))((('('$%#&#%$#"
- at 30BB2AAXX080903:3:3:1242:2005#0
-CACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTCAACCCCTGACCCNCACNNCA
-+
-677777888888888888888888777765554430010..//-.,,-+(+)+*'*)&*')(#%&''&"$%"""##
- at 30BB2AAXX080903:3:59:317:793#0
-ACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTCAACCCCTGACCCCCACCANNC
-+
-67777788888888888888888877776555443221100//..---,,+,++****)))((((('&$%###""#
- at 30BB2AAXX080903:3:36:678:1512#0
-GAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGGTCTGTGACGN
-+
-67777788888888888888888877476555423021100-//.-.-&,*+***+)*)))&&((#'&$&"##$#"
- at 30BB2AAXX080903:3:42:1717:975#0
-CAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))(('(&'$$&%%##"
- at 30BB2AAXX080903:3:39:1740:694#0
-TGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGGTTGGTGCGT
-+
-67777788888888888888188877276555142212000//.,---,+,+++*+)))()(&(('#$&#%""#"#
- at 30BB2AAXX080903:3:44:1057:981#0
-TGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGATTGGGGGTG
-+
-67777788888888888888888877776555443222100//..---,-+,+***)))()(()'('$&%&"$"#$
- at 30BB2AAXX080903:3:36:719:1454#0
-CTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGCAGGTTTCN
-+
-6777778888888888888888887775655543302.100//(.,--,,$**+'*&)))(()'&(&%$##"###"
- at 30BB2AAXX080903:3:38:1256:1995#0
-TCCTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTGCGATACACC
-+
-67777788888888888888888877776555443221100//...--,,++++**()))))'(('&$""""#"##
- at 30BB2AAXX080903:3:41:1234:732#0
-TCCTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGATGGAGGTAGGTGTGTAC
-+
-67777788888888888888888877776555443222100//...-,,,+++****))))()('%'&&#"#""""
- at 30BB2AAXX080903:3:54:1432:313#0
-ACCAATCCTACCTCCATCGCTAACCCCACTAAAACACTCACCAAGACCTCAACCCCTGACCCCCATAGCTCGTCAG
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()('''$$#&%##%#
- at 30BB2AAXX080903:3:37:458:1311#0
-GAGGAGTATCCTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGGGGTTAGCGAGCTCTATCN
-+
-67777788888888888888888877776559445222000//..---,-+++**)))))))((('#"$#$"#"#"
- at 30BB2AAXX080903:3:57:987:166#0
-ACCCCACTAAAACACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCGGGATACTCCTCAATAGCAATACACCC
-+
-67777788888888888888888877776555343222100//..--,,,+++)**(*())((((('$""#$$###
- at 30BB2AAXX080903:3:43:1160:891#0
-ACAGCGATGGCTATTGAGGAGTATCCTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTGTTTTAGTGAGGA
-+
-67777788888888888888888877776554543222101./..-,-,,,+))+***()&)'(#'''"&"&"$""
- at 30BB2AAXX080903:3:33:998:1792#0
-TACTACAGCGATGGCTATTGAGGAGTATCCTGAGGCATGGGGGTCAGGGGTTGAGGTCTTGGTGAGTNTCATTCNN
-+
-67777788888888888888888877776555443222100//..---,,-++***(*)))((('('"%%"""#""
- at 30BB2AAXX080903:3:35:437:1613#0
-AAAACACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCAACAAACCNCCACACTN
-+
-6777-788088888888888888877776575443222100//.,-,--),,+***))(*())'(('"$$$%$$""
- at 30BB2AAXX080903:3:2:1206:2010#0
-ACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATAGATCGGAAGANACANCAC
-+
-6777778888888888888888887777655544222210/././.,-,++*****())(')(''('$""#"""#"
- at 30BB2AAXX080903:3:3:670:1119#0
-GGTTGTCTTTGGATATACTACAGCGATGGCTATTGAGGAGTATCCTGAGGCATGGGAGATCGGAAGACNGATCNAC
-+
-67777788888888888888888877776555442222001//.-.-,,,+++**+)*))()(('(&""##%&"##
- at 30BB2AAXX080903:3:57:1319:1123#0
-GATGGTTGTCGTGGGATATACTACAGCGATGGCTATTGAGGAGTATCCTGAGACAGGGGGGGCAGGTGTGNACACC
-+
-67777788888888888888,38877770545'42/21000-/.-.,-+,,,+*)#(*)(((%'('%'$#"%%"##
- at 30BB2AAXX080903:3:4:981:197#0
-GGGGGAATGATGGTTGTCTTTGGATATACTACAGCGATGGCTATTGAGGAGTATCCTGAGGCATGGGCNCATCNTN
-+
-6777778888888888888888887777655244351210///..-+-,++++*'&))())''((''""%""$"""
- at 30BB2AAXX080903:3:50:134:1742#0
-TAGGGGGAATGATGGTTGTCTTTGGATATACTACAGCGATGGCTATTGAGGAGTATCCTAGATCGGACGATTCACA
-+
-67777788888888888888888877776555443212100//..---,,+,+*+*)))()))'(''%$"#"#$$"
- at 30BB2AAXX080903:3:49:443:697#0
-TTTAGGGGGAATGATGGTTGTCTTTGGATATACTACAGCGATGGCTATTGAGGAGTATCCTGAGGCATGACACTAC
-+
-67777788888888888888888877776555443322100//..---,,++++****((()(((('%#"%&""##
- at 30BB2AAXX080903:3:47:371:1552#0
-AAATTAAAAAAACTATTAAACCCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACCTCGCTACA
-+
-67777788888888888888888877776555443222011//..--,,,,++*****)(((()((&$"##$""##
- at 30BB2AAXX080903:3:50:721:698#0
-CTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCAATACTAAACCCCCATACATAGGCAA
-+
-67777788888888888888888877776555443222100//..---,-+++*****))(((((('"$$#""#""
- at 30BB2AAXX080903:3:41:282:259#0
-TAAGCCTTCTCCTATTTATGGGGGTTTAGTATTGATTGTTAGCGGTGTGGTCGGGTGTGTTATTATTNTTGCTTAT
-+
-6777778888888888888888887777655544322210///...--,,,++**()*)))(()(('"&%%#%#"#
- at 30BB2AAXX080903:3:1:487:1508#0
-TAACACACCCGACCACACCGCTAACAATCAATACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAANACNCGAC
-+
-6777778888888888888888887777631244312.0/0...-.,,+,,****))))((()(''($"#""$""#
- at 30BB2AAXX080903:3:55:697:1702#0
-TGAGTGTGGGTTTAGTAATGGGGTTTGTGGGGTTTTCTTCTAAGCCTTCTCCTATTTATCGGGGTTTCTATGGCCG
-+
-677777888888888%8888888,777765550131'11#0-/-,.*,,,$**)&))&)#)((('%'&#""""$#"
- at 30BB2AAXX080903:3:58:1711:719#0
-TGCGAGAATAATGATGTATGCTTTGTTTTTGTTGTGTGTGGGGTGTGGAATGGGGGTTGTGGGGTGTCACCAACAN
-+
-67777788888888888888$8887777)55544%222100//,.'-)%(+,+***())())((((%$$#%%$$$"
- at 30BB2AAXX080903:3:44:1661:724#0
-GAAGAAAACCCCACAAACCCCATTACTAAACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCCCGCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*)((('('%&&%"$%""
- at 30BB2AAXX080903:3:38:1109:476#0
-TAGTCCGTGCGAGAATAATGATGTATGCTTTGTTTCTGTTGAGTGTGGGTTTAGTAATGGGGTTTGTTGGTACGAC
-+
-67777788888888888888888877776555443222100./..---,(+++***)))))(%('''""#"""""#
- at 30BB2AAXX080903:3:36:1727:1255#0
-GTGGTTGTAGTCCGTGCGAGAATAATGATGTATGCTTTGTTTCTGTTGAGGGTGGGGTTAGTAGATGNGTCGACNN
-+
-67777788888888888888888877776555443222100/....--,,(++***&))()(((('#"""$"""""
- at 30BB2AAXX080903:3:53:377:622#0
-CCCCATTACTAAACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCAAGATCGGAAGAGCGNGCCCTC
-+
-67*77788888888888888888877776555443222100///.----,+,++**)*))))((('&&"""##""#
- at 30BB2AAXX080903:3:56:1101:544#0
-TCATTGGTCGTGGTTGTAGTCCGTGCGAGAATAATGATGTATGCTTTGTTTCTGTTGAGTGTGGGTTTTGCATACT
-+
-67777788888888888888888/7777627544322211///-.---,,+++***)))())()'%'"%%##""#"
- at 30BB2AAXX080903:3:40:628:1779#0
-ATCATTGGTCGTGGTTGTAGGCCGTGCGAGAATAATGATGTATGCTTTGTTTCTGTTGAGTGTGGGTAGAGTCTGC
-+
-67777788888888888888$888.77765504032211000/..---,,++****)*()))((('%$%##$#"$#
- at 30BB2AAXX080903:3:40:1313:293#0
-TAAACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTAAAACCACGACCAATGAGATCGAC
-+
-67777788888888888888888877776555443222200//..---,,+,+***)*)))((((('$$%#"#"##
- at 30BB2AAXX080903:3:59:414:1767#0
-AAACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAATGATGACGNNA
-+
-67777788888888888888888877776555443222100//...----+++*+***))))((((&&"%"$"""#
- at 30BB2AAXX080903:3:52:416:608#0
-CACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAAGATCGGAAGCGGGGTGTG
-+
-67777788888888888888888877776555443222100//./----,+++*+****))(((((($$"""""""
- at 30BB2AAXX080903:3:41:1146:1701#0
-ACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAATGAAGAGCGGCACAGACAA
-+
-6777778888888888828888887777655342302210///.,---,,,++)')*'))))(#&('$&"$""$$$
- at 30BB2AAXX080903:3:46:1012:269#0
-CAACGATGGTTTTTCATATCATTGGTCGTGGTTGGAGTCCGTGCGAGAATAATGATGTATGCTTTGTTGCGTACGG
-+
-67777788888888888888888878)7*55'44*'20000)//.--,,*,+)+***()))&%((('"$$"""###
- at 30BB2AAXX080903:3:58:407:1023#0
-ACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAATGATATGAAAAACCAGCGTATTCA
-+
-67777788888888881888888877770555443221100./,.--,+-++***)*()')((''('$"%%#""##
- at 30BB2AAXX080903:3:48:1175:103#0
-ACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAATGATATGAAAAACCATCGTTAGTCCACTAT
-+
-677777888888888888888888777765554432221-0//..-,-,,+++**))))*)((('''$#####"#"
- at 30BB2AAXX080903:3:46:355:658#0
-AAAGCATACATCATTATTCTCGCACGGACTACAACCACGACCAATGATATGAAAAACCATCGTTGTAGTTACCATA
-+
-6777//08//888&8888888828777365.644232110/--,-+,-,-+'+*(*)()(')(((''$"#$##""#
- at 30BB2AAXX080903:3:36:768:1852#0
-CATACATCATTATTCTCGCACGGACTACAACCACGACCAATGATATGAAAAACCATCGTTGTATTTCACCTACANN
-+
-67777788888888888888888877776555443222100//..---,,+++****))))))('''$$%##%#""
- at 30BB2AAXX080903:3:49:1768:1457#0
-CTTGTAGTTGAAATACAACGATGGTTTTTCATATCATTGGTCGTGGTTGTAGTCCGTGCGAGAATAATCGTTACAT
-+
-67777788888888888888888877776555443222100//..---,,++*)*)))))))(((('"#"#""##"
- at 30BB2AAXX080903:3:59:154:426#0
-ATTGGGGTCATTGGTGTTCTTGTAGTTGAAATACAACGATGGTTTTTCATATCATTGGTCGTGGCTGTTGTGCNNA
-+
-67777785888888888.8888887/776453243122000/'.---,,,+)*)*)*('&('((#''%"&""#""#
- at 30BB2AAXX080903:3:58:794:1427#0
-TTTGCGTATTGGGGTCATTGGTGTTCTTGTAGTTGAAATACAACGATGGTTTTTCATATCATTGGTCGTGTGACTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$&%"""$#$
- at 30BB2AAXX080903:3:53:930:1485#0
-TAATTTTGCGTATTGGGGTCATTGGTGTTCTTGTAGTTGAAATACAACGATGGTTTTTCATATCATTGGTGTTTCG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))()(('$%##$"###
- at 30BB2AAXX080903:3:41:1378:1138#0
-ATTTTATTAGGGGGTTAATTTTGCGTATTGGGGTCATTGGTGTTCTTGTAGTTGAAATACAACGAGATAGTGCGCT
-+
-67777788888888888888888377776555413222100/..----,,+,+****)))))()(('""%#$"""#
- at 30BB2AAXX080903:3:4:1709:1062#0
-TTAATTAATTTTATTAGGGGGTTAATTTTGCGTATTGGGGTCATTGGTGTTCTTGTAGTTGAAATACCNCGACNCN
-+
-67777788888888888888888877776555443222100//..--,,,+++****)))))(((('""%$&%"""
- at 30BB2AAXX080903:3:42:1230:1821#0
-GGTCGATGAATGAGTGGTTAATTAATTTTATTAGGGGGTTAATTTTGCGTATTGGGGTCATCGGTGTTCTTGTGGT
-+
-6777778888888888888888887777655544322200/0/..---,,,++***)(**)#(((''&&%%%%""#
- at 30BB2AAXX080903:3:33:761:934#0
-GAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGAGGGCGAAGATCGGAAGAGCGNCCACTGNN
-+
-67777788888882888888888377176552,43.22110)//.-$-,&(+'*+)'#))%'(&(&'"$##$""""
- at 30BB2AAXX080903:3:1:556:1495#0
-AATTAATTAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCNCCNCACT
-+
-6777778888888888888888886777655544031-.0/-+.,-,,-+++**+))((('((%''%'"##"$"$"
- at 30BB2AAXX080903:3:53:398:112#0
-CAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGAGGTCGAGATCGGAAGAGTCTATACA
-+
-677777888888888888888888777765/54432221/0//..,--,,,++&**'))'(()#'(%"$"#""###
- at 30BB2AAXX080903:3:53:995:1722#0
-CAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGAGGTCGATGAATGAGTGNTTGGATAG
-+
-67777788888888888888888877776555343222100//...--,,+++***(*)()))((''""%%&#"##
- at 30BB2AAXX080903:3:36:1566:495#0
-TAATTAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACCACACNN
-+
-67777788888888888888888877776655441222000//.-----,+++****))('(()(('&$##&"#""
- at 30BB2AAXX080903:3:54:1293:1705#0
-TAATTAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCCTCACCTGG
-+
-6777778888888888888888807/+7255621522-0////./,*-,,-+++**))(((()(#(&"""###"""
- at 30BB2AAXX080903:3:46:98:802#0
-ATTAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCCCGGCG
-+
-67777788888888888888888877776555443222100//..---,,+++****))*)((((''"$$#$%###
- at 30BB2AAXX080903:3:2:647:98#0
-TAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCNCGCACCC
-+
-6777778888888888843/8888977715558/32/10..-..,,--+,,++*))*))'(((('(%&"%&%$$##
- at 30BB2AAXX080903:3:58:1268:216#0
-TAACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTCTGNNA
-+
-67777788888888888-88888577716/52113.2201/./..--,,,++++**)*)()((((('&$##""""#
- at 30BB2AAXX080903:3:44:1572:680#0
-AACCACTCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCC
-+
-67777788888888888888888877776555443222100//..----,+++**+)**)))(((((%$%&$%#""
- at 30BB2AAXX080903:3:54:187:1498#0
-CAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGAGGGCGGCGAATCAG
-+
-67777788888888888888888877776555443222100-//.---,,+++***&))))&)('%'&$#""%#"$
- at 30BB2AAXX080903:3:54:1200:226#0
-TCATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCATGCAGTC
-+
-67777788888888888888888877776555443222100//...-+,,,++++*)*)))((((('%"#&&"#$#
- at 30BB2AAXX080903:3:46:299:1138#0
-ATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCAGATCCATACCC
-+
-677777888888888888888888777765523432/11/0//..-,-,+,)+**)))('(%(('('""$""###"
- at 30BB2AAXX080903:3:51:1187:805#0
-ATTCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGGCCGCGC
-+
-67777788888888888888888877776555443221100//..----,+++**)*)))(((((('"""#"#""$
- at 30BB2AAXX080903:3:55:1268:579#0
-GATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGAGGGCGCTCATT
-+
-67777788888888888888888877776552443222100//.----,,++++**)))()((((''""#"$"#""
- at 30BB2AAXX080903:3:51:125:1186#0
-GGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGGAGATCGCAGCACGGC
-+
-6777778888888888+888888877776+55,43222,10//..+-,+,)++**))*))((((#''$%"$#$#"#
- at 30BB2AAXX080903:3:56:1457:531#0
-TCATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCACTACCAA
-+
-67777788888888888888888877716553443.22100//.---*,,,++**)*()(*(((((''%$#""#""
- at 30BB2AAXX080903:3:1:453:259#0
-CATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCAGATCGCNCCNCTCT
-+
-67777788888888880888*88877776/6521320210/0..,+,,+,*))()))())((('(&'""$%"####
- at 30BB2AAXX080903:3:39:381:1474#0
-GAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATAGATCGGAACAGCAGCGC
-+
-67777788888888888888888877776555443222200//..---,-++)***)**)))(((('&$##"##"#
- at 30BB2AAXX080903:3:4:1057:1598#0
-GAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGANACTANCN
-+
-6777778888888888888888787777655544322210/....-.*,*,+'***(())(((((('"""$"#"""
- at 30BB2AAXX080903:3:4:110:587#0
-ATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTAGACNTGACNAN
-+
-67777788888888888888888877776555443022100./.---,,-,++**)**)()(()(('%"""##"""
- at 30BB2AAXX080903:3:1:948:201#0
-GGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTCTCATCATGCGGAGATGTTGGATGGGGGGGGGNGCNACGT
-+
-677777888888888888888888777765255433022/0../.---,,+,+****())))(#(('"""#""#""
- at 30BB2AAXX080903:3:57:819:2041#0
-TCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATACTCCA
-+
-6777778888888888888888887777:555443222100//..---,,,+******)))(()((''%"%%###"
- at 30BB2AAXX080903:3:51:327:681#0
-TGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGGGGGCGCACACA
-+
-67777788888888888888488877-765554102%11/,//.,-.-,)+*+*'**)(()((((('$#"#"%"##
- at 30BB2AAXX080903:3:55:1014:1114#0
-TGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGGGGCGCGTG
-+
-677777888888888888888888774765554432111/0//.--,-,,+++***))())()((''%$""#%""#
- at 30BB2AAXX080903:3:36:1314:919#0
-TTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTACCTCCGCN
-+
-67777788888888888888888877775555443122100//..---,,+*+*+*)*))))((('#"$""$#"#"
- at 30BB2AAXX080903:3:53:779:1012#0
-TTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGGTGGCCGGGTC
-+
-6777708888288888880888-877174555./3300.0/-.---,-+-,*+))*()))'(((((#$"#"#"""#
- at 30BB2AAXX080903:3:35:351:1853#0
-GATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTGGATGGGNATGCATGN
-+
-6777778888888888888808887777655534032110&//,--,--,+++***()*)()((('&"#""###""
- at 30BB2AAXX080903:3:48:1717:1752#0
-GATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGAAGTTGGATGGGGTGGGGGCG
-+
-60777788888888888888884/7777650534522100-%/+,.,,-,+,+'**#*#)((&((('&""""""##
- at 30BB2AAXX080903:3:2:1455:756#0
-CTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTNAAACTAC
-+
-677777888888888888888888777763554332200//0/...-,,,+,+++)(()((()'('&&""""###"
- at 30BB2AAXX080903:3:3:1460:962#0
-TCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCNACCANCC
-+
-6777778888888888888888887767955544332110///..,,-,,++++)*)()(')&''''%"##"#"#"
- at 30BB2AAXX080903:3:44:1246:1249#0
-TGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGATGTTAGATCGGGGGGA
-+
-677777888888888888888888777765554432221000/.----+,,++***)))))((((('"%&%$""""
- at 30BB2AAXX080903:3:38:62:786#0
-CCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCACCTCACCAC
-+
-67777788888888888888888877776555443222100//..---,,++*****))))))(((&$#""&%###
- at 30BB2AAXX080903:3:59:1462:766#0
-AGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCATCATGCGGAGCACCAAANCA
-+
-67777788888888888888888877776555443222110//..-,-,,+++***))))))()'(#$%%%%$"#$
- at 30BB2AAXX080903:3:45:131:984#0
-TAGTACTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGCGAGCCGAAGTTTCATCATGCGGAGATGTTGGCG
-+
-6777778888888888/88888887777655544/22,101/&.---&,,++*%*))*()((#(('&$#$"#$$#$
- at 30BB2AAXX080903:3:1:136:1103#0
-TGGCTAGGAATAGTCCTGTGGTGATTCGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCACNAANCCTA
-+
-67777788888888888888888877+76555443222000/.--,,,,,++****())(()('(''$""#"$#"#
- at 30BB2AAXX080903:3:41:406:1926#0
-CATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTTCCTCCGCAC
-+
-67777788888888888888888877776555443221100//.--,,,,+++***)))))(((((&&"%#""#"#
- at 30BB2AAXX080903:3:49:1066:1146#0
-TGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCGAAGTTCTCAAGTG
-+
-67777788888888888888888877776555443222100//..-,-,,,++*)*))))')('('&&$"$"""#$
- at 30BB2AAXX080903:3:53:105:1225#0
-TGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGGGAGCCGAAGTCNATTGTCT
-+
-67777788888888888888888877756555443221110/.,.-,-+,(*+*)*&)&)&((%#(#$""""""#"
- at 30BB2AAXX080903:3:43:1024:1353#0
-ATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCACTAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('%&%&%%###
- at 30BB2AAXX080903:3:38:1055:423#0
-AGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCCCAAGCGTGT
-+
-677777888888888888888888777765554432220000//.---,,,++***)))()((('('$%&$$"$%"
- at 30BB2AAXX080903:3:1:646:1533#0
-GAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATCNCCNCATC
-+
-6777778888888888888888887777655544322010././.---,,-,++**)))))()((('"""$"""#%
- at 30BB2AAXX080903:3:36:496:476#0
-TGAGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGCGCCAAGGAGTGAGCTCACGATN
-+
-67777788888888888888888877776555443222100//..---,,+++*****))))(('(&%##"#""""
- at 30BB2AAXX080903:3:44:243:1264#0
-TTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCACTACTCACCAC
-+
-67777788888888888888888877776555443222100//..---,,++++**))))))()((''&&&%%%$#
- at 30BB2AAXX080903:3:40:365:427#0
-CGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCACTACNCCACACAC
-+
-67777788888888888888888877776555443222100//...--,,+++++**)))))()(('"$%&%%#$"
- at 30BB2AAXX080903:3:34:881:111#0
-GGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCAGATCGNCCCGTGNN
-+
-67777788888888888888888877776555443220100//..--,,,+++****)))(((('('"&$$""#""
- at 30BB2AAXX080903:3:3:976:717#0
-GTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATAAGGCAGGGNACCTNTC
-+
-677777888888881888388+88777795+54302011(./...-*-,++,+****)(#'(('''&""#&$"""$
- at 30BB2AAXX080903:3:40:700:1850#0
-GGTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGCTCGGAAAC
-+
-67777788888888888888888877776555443222100//..---,-+++***))))()((((&&%%%%""##
- at 30BB2AAXX080903:3:43:882:461#0
-GGTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGAGCAGGCAGGTGGCCGGT
-+
-6777778888828888888&88&8777+657541323210/./.,--+,,(++**(*)))&(('&&'&"%"##"#"
- at 30BB2AAXX080903:3:48:396:1231#0
-CGGTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCCTGTGGTGATTTGGAGGATCAGGCAGGGCTNAGC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))))('('&""#"""##
- at 30BB2AAXX080903:3:54:1288:1637#0
-TGCCTGATCCTCCAAATCACCACAGGACTATTCCTAGCCATGCACTACTCACCAGACGCCTCAACCGCCTCTTCAC
-+
-677777888888888888888888777765554432210/0/..----,-,+++****)))))((''$&%$%$$#"
- at 30BB2AAXX080903:3:43:552:720#0
-GCGATTGATGAAAAGGCGGTTGAGGCGTCTGGGGGGTAGTGCATGGCTAGGAATAGTCCTGTGGGGATNTTGGGAG
-+
-6777778888888888888/8888727+6555'4(2-2100..---,++,+&+)**((())(((&'#&"#"#$$#"
- at 30BB2AAXX080903:3:33:1667:1842#0
-GTGGGCGATTGATGAAAAGGCGGTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCCTGTGNGTCCTCNN
-+
-67777788888888888888888877776555443212/0.//..,--,,+++**))*))('(((&&""$$$"#""
- at 30BB2AAXX080903:3:37:1351:470#0
-CAAATCACCACAGGACTATTCCTAGCCATGCACTACTCACCAGACGCCTCAACCGCCTTTTCAGATCNGGAGCACN
-+
-67777788888888888888888877776555443222100//..---+,,*+****())*)()(''"&$%&%#$"
- at 30BB2AAXX080903:3:46:818:2003#0
-GATGTGGGCGATTGATGAAAAGGCGGTTGAGGGGTGTGGTGGGTAGTGGATGGGTAGGGATAGTTCTGGGTGGCAC
-+
-67777788888888888888888077%76+75(4-$2*0&.)/().),'$+,*')%()&(&#'###'&""""##""
- at 30BB2AAXX080903:3:1:999:892#0
-GTGATGTGGGCGATTGATGAAAAGGCGGTTGAGGCGGCTGGTGAGGAGTGCATGGCTAGGGATAGTCCNTGNTAGA
-+
-6777778888888888888888187777254044-5$,/00-/+.',,$,((++***(()#('(''%""$"""#""
- at 30BB2AAXX080903:3:35:1548:577#0
-GTGATGTGGGCGATTGATGAAAAGGCGGTTGAGGCGTCTGGTGAGTAGTGCATGGCTAGGAATAGTCNTGGTGTAN
-+
-677777888888888888888888777745524432-1000%/+.)--),()++*())))#)&((#'"$%$%%$#"
- at 30BB2AAXX080903:3:54:14:1185#0
-ACCACAGGACTATTCCTAGCCATGCACTACTCACCAGACGCCTCAACCGCCTTTTCATAGATCGGGAGCGCGCTCT
-+
-677777888888888888888888777703,544322010,/)-).,--,+**$*)(*))('%((#%$$#"#"##"
- at 30BB2AAXX080903:3:56:1070:843#0
-CGTCTCGAGTGATGTGGGCGATTGATGAAAAGGCGGTTGAGGCGTCTGGTGGGTAGTGCATGGCTAGGGCTGCTCA
-+
-677777888888888888888888777763554432%2100/..+,,-,(+&+&*+(*&&(((%''#&##&"$##"
- at 30BB2AAXX080903:3:48:890:1412#0
-GACTATTCCTAGCCATGCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCAGATCGGTCAC
-+
-67777788888888888888888877776555443222100//..---,,++****))))()(((('$#%%""$##
- at 30BB2AAXX080903:3:8:1685:1928#0
-CTAGCCATGCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGNAAACACNN
-+
-67777788888888888888888877776555443222100//..---,,+++**)*))())(((('"&%%%%"""
- at 30BB2AAXX080903:3:37:1602:2012#0
-GCCATGCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCAGATCGGAAGACCACCAN
-+
-6777778888888888888888887777655584322210./...-.,,,,+++**))))(()(''%"""$#$#""
- at 30BB2AAXX080903:3:50:1362:1019#0
-CATGCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATAAAGGATAC
-+
-67777788888888888888888677176555-43220//0//...-,-,,+++**))))))''(''"""""""$#
- at 30BB2AAXX080903:3:43:1127:2005#0
-GCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGTCGTCTA
-+
-67777788888888888888888877776555443222100//..----,+++*****)*)((((('&&""""#"#
- at 30BB2AAXX080903:3:59:1134:558#0
-GCACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGGTCACAC
-+
-67777788888888888,8888887774)5554232222//...-*--,,,*+***)()(')(((''&$%##%%$$
- at 30BB2AAXX080903:3:45:1041:389#0
-TACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGTAGCTCTG
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))(((((&'$"#&""""
- at 30BB2AAXX080903:3:60:1180:1589#0
-GGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGAAAAGGCGGTTGAGATTGGCAGAACCNN
-+
-67777788888888888888888877776555443222100./..---+-,++*)*)&)'((&(##'$&#""#"""
- at 30BB2AAXX080903:3:58:1528:611#0
-CTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGACACAACATN
-+
-67777788888888888888888877776555443222100//..---,,++++*+)))))(((''&$$%&$$%#"
- at 30BB2AAXX080903:3:47:1577:775#0
-ACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAAGATCGGAAGAGCGGTGCATCCA
-+
-67777788888888888888888877776545443222001/....--,-++*+**'))))))((&'%#"%"####
- at 30BB2AAXX080903:3:55:797:1648#0
-GTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGAAAAGGCGGGTGGGGTGCCAGCA
-+
-677777888888888888888888777765554/3222100//.----,,+++**)*))()('('#%'#$$"""##
- at 30BB2AAXX080903:3:2:40:990#0
-CCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCAGNGCANNCA
-+
-67777788888888888888888677736559445121111//.--,,,-+,+***))*())(((''$""""""%#
- at 30BB2AAXX080903:3:37:974:767#0
-CCAGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCCCCGCN
-+
-677777888888888888888888777765554432201011/.,-+,,)+,***))))))'(('&#"$$""%##"
- at 30BB2AAXX080903:3:38:1289:57#0
-GGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGAAAAGGCGGGTGGTGGGACANN
-+
-67777788888888888888888877776555442212010//..-----+++**+(**))()&'(&$'"#"##""
- at 30BB2AAXX080903:3:3:1457:1469#0
-AGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGAAAAGGCGGGTGANCGCANAC
-+
-6777778888888888888888887777655584322/101/...,*,,++,+**+()))((((##'""%"$#"#$
- at 30BB2AAXX080903:3:50:1097:629#0
-AGACGCCTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATACCGGAATTC
-+
-67777788888888888888888877776555443222100//./---,,+++***))))))()'(($""""#"##
- at 30BB2AAXX080903:3:43:216:533#0
-GAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATAGATCGGAAGAGGGGGTTAG
-+
-677777888888888888888888777765554432201/0//.----,,,++*+**)*))(((('''$&%""""#
- at 30BB2AAXX080903:3:41:282:1362#0
-CTCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACNTTNGNGCA
-+
-677777888888888888888888777765554432321000...---,,,++****)))(((((''"%&"""%$#
- at 30BB2AAXX080903:3:54:953:1565#0
-TCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAAAGATCGGAAGAGCTGTCCACA
-+
-67777788888888888888888877776545803220000/./.--,,,,++&*))*)&'(%((''$""##"#$#
- at 30BB2AAXX080903:3:60:1056:1106#0
-TCAACCGCCTTTTCATCAATCGCCCACATCACTCGAGACGGAAATTATGGCTGAATCATCCGCTACCGACACAANN
-+
-6777778888888888888588$80777630332302.+0$//.---,+,+++)*)')&((('''#'$""$$##""
- at 30BB2AAXX080903:3:33:213:794#0
-ATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGAANACCATANN
-+
-6777778888888,888888888877776545443222100//..,-,,,,+****'))))(((('&"$"#"""""
- at 30BB2AAXX080903:3:36:238:1812#0
-CATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGTGTACTCANN
-+
-677777888888888888888882777765554422222/00..--,-+,+,+***)()(()((('%%#"#"##""
- at 30BB2AAXX080903:3:54:1442:1840#0
-GCCATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGATTGATGACAGGGTA
-+
-67777788888888888888888877776554443222100+/.---,,,++****)))#)&()(&'$$&%#&###
- at 30BB2AAXX080903:3:59:900:93#0
-AGGCGCCATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGTGGGCGAGTGCGAGNNC
-+
-677777888888888888888888777765554432221/////-,-,,,++**'*)*)())((('#'$#&#"""$
- at 30BB2AAXX080903:3:56:156:191#0
-TGAGGCGCCATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGGGATGTGGGCGATACGCCAC
-+
-677777888888888888888848777725504432201&.+/.,-+,-,+*+*'*%)&()()((#'%"""$####
- at 30BB2AAXX080903:3:3:1093:892#0
-TCATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATGCNTCATNCG
-+
-67777788888888888888888877776555443222/00/..,-.-+,*+**))*()('((('%'&""##$"#"
- at 30BB2AAXX080903:3:8:1655:1637#0
-CATCAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATAANTACAAGNN
-+
-6777778888888888888888887777655544322210//./.---,-++***))()(()(''(%""$#"#"""
- at 30BB2AAXX080903:3:47:864:1648#0
-ATTGAGGCGCCATTGGCGTGAAGGGAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGGTGTGGGACAGCAACA
-+
-677777888888888888888888477765504432.01-1..-----,*,*')('#)')#((#'&%"$"###"#"
- at 30BB2AAXX080903:3:58:1610:1538#0
-GAATATTGAGGCGCCATTGGCGTGAAGGTAGCGGATGATTCAGCCATAATTTACGTCTCGAGTGATGCACAACCAN
-+
-6777778888888888888888887777655544322210.///,---,,+++***))))&()(''%$$%"$$%$"
- at 30BB2AAXX080903:3:40:354:659#0
-CCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATGGCAGATCGGACGAGTGCGC
-+
-67777788888888888888888877776555443222100//-.---,-++++**))*)))(((('%#$#"#""#
- at 30BB2AAXX080903:3:49:1720:353#0
-ACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTACGTGTCCTC
-+
-6777778888388888848888887777655544322110///..,-+-,+++****)*))((((('$""#"####
- at 30BB2AAXX080903:3:35:1608:904#0
-CTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATNTGCACTGN
-+
-67777788888888888888888877776555443222100//..*--,,++++*))*))))(((''"$#$##"#"
- at 30BB2AAXX080903:3:33:656:296#0
-CGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCGCGCCAATGGCGCCTCAATATTCTTTATCTNACTACANN
-+
-67777788888888888888888877776555443221100/------,,,++***))*))))((''"%$""#"""
- at 30BB2AAXX080903:3:38:1790:1349#0
-AGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATCTGCCTCTTTCNN
-+
-67777788888888888888888877776555443222100//..---,,,,*+*))*)))(((((&$"&%%"$""
- at 30BB2AAXX080903:3:3:1029:184#0
-ATTATGGCTGAATCATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTCNTCACNGN
-+
-6777778888888888838888387777454144322-1.-/...---,++++**)*)'()(()&''%""&$$"""
- at 30BB2AAXX080903:3:49:1727:1150#0
-CCTCGCCCGATGTGTAGGAAGAGGCAGATAAAGAATATTGAGGCGCCATTGGCGTGAAGGTAGCGGGAGACAAAAA
-+
-67777788888888888888888877776555443222100//...---,+++***)*))'))('''$$%"&%%#%
- at 30BB2AAXX080903:3:49:1183:414#0
-GAATCATCCGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCCACACAC
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))()((('"$#"$####
- at 30BB2AAXX080903:3:3:1671:781#0
-AGGCCTCGCCCGATGTGTAGGAAGAGGCAGATAAAGAATATTGAGGCGCCATTGGCGTGAAGGGAGCCNATCTNCN
-+
-67777788888888888888888877776555443222100//..-,-+,,+***))'*'()(%''#""#%"%"""
- at 30BB2AAXX080903:3:44:1507:880#0
-TAATATAGGCCTCGCCCGATGTGTAGGAAGAGGCAGATAAAGAATATTGAGGCGCCATTGGCGTGAAGGAGGGACA
-+
-67777788888888888888888877776555443222100//..---,,++++***))))((('''&&"#$""""
- at 30BB2AAXX080903:3:1:999:1009#0
-CGCTACCTTCACGCCAATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGATCGNCGNCACA
-+
-67777788888888888888888877776-5544321220//0-,--,+,,++*+*)*()')(('%'%"#""$##"
- at 30BB2AAXX080903:3:54:935:1115#0
-GATCCGTAATATAGGCCTCGCCCGATATGTAGGAAGAGGCAGATAAAGAATATTGAGGCGCCATTCGAGACGCCCC
-+
-67777788888888888888888897146+254$3212100/.+-'--,,+,*++**)((('('(&'&"%%&#""$
- at 30BB2AAXX080903:3:43:395:326#0
-ATGATCCGTAATATAGGCCTCGCCCGATGTGTAGGAAGAGGCAGATAAAGAATATTGAGGCGCCATTGGCGTGAAG
-+
-677777888888888888888888774765554432121000..----,,+*+++)**))(('('#'''%&"$"##
- at 30BB2AAXX080903:3:37:823:233#0
-GCCAATGGCGCCACAATATTCTTGATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACGGATCATTTCTTN
-+
-67777788888818888888888+77776525443221100//...--,,+++*+)**)(()(('('%#$#$%#""
- at 30BB2AAXX080903:3:54:1247:984#0
-AATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACGGATCATGTCTCTCCC
-+
-67777788888888888888888877776555143222000//..--,,,+++***())))((((('$$"&%%###
- at 30BB2AAXX080903:3:40:84:1261#0
-ATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACGGATCATTTCTCTACTCAGAAGCATCTATA
-+
-67777788888888888888888877776555443211100//..,--,,**+**)))))((()(('$$#"#""""
- at 30BB2AAXX080903:3:38:1473:997#0
-CTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGTCCAC
-+
-67777788888888888888888877776555443222100/...---,,-+****)))()((((''$#$%""#$%
- at 30BB2AAXX080903:3:40:1525:1930#0
-TCTTCCTACACATCGGGCGAGGCCTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCAC
-+
-67777788888888888888888877776555443222100//....-,,+,+***)))))(((''('$%&#%$""
- at 30BB2AAXX080903:3:50:1162:2045#0
-GGAGGATAATGCCGATGTTTCAGGTTTCTGAGTAGAGAAATGATCCGTAATATAGGCCTCGCCCGATGCAGCGGCC
-+
-67777788888888888888888877776555443222100//.-.--,,+++****))))((('('$$""#""##
- at 30BB2AAXX080903:3:51:848:510#0
-TGCAAGCAGGAGGATAATGCCGATGTTTCAGGTTTCTGAGTAGAGAAAAGATCCGTAAGATCGGAAGGGCACACGG
-+
-67777788888888888888888877776555%43222/00//..---$,,++***)*))(('(('&""#"###""
- at 30BB2AAXX080903:3:44:625:415#0
-CGAGGCCTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCAGATCGGAAGAGCGGCTA
-+
-67777788888888888888888877776555443222100//..-.-,,+++++***))))(((''$"$%&$"$#
- at 30BB2AAXX080903:3:56:1115:697#0
-ATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCGACCACC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$'"####"#
- at 30BB2AAXX080903:3:43:227:1084#0
-TACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAGATCGGAACA
-+
-677777888888888888888888777765554432.2100/..-.--,+,,++*+)))))))((''&&&%&#%"%
- at 30BB2AAXX080903:3:50:1546:1294#0
-TATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGATGTTTCAGGTTTCTGAGTAGAGACNCGCGTCG
-+
-6777778888888888888888887777655544222'10///..-,-,,+++%+*'*)'*'(((('""%$"""#"
- at 30BB2AAXX080903:3:37:1188:1877#0
-GGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGACTACAGCN
-+
-67777788888888888888888877776355443212100./.---,,,++***))*)))()('''"$%"$%"#"
- at 30BB2AAXX080903:3:59:956:555#0
-CATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAAGATCGGGTACTGC
-+
-67777788888888888888888877776555443222100/../.--,,+++*+)*)))((((((''%"###""#
- at 30BB2AAXX080903:3:37:1490:155#0
-ATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGCCANN
-+
-67777788888888888888888877776555443222000//..----,++++**)*))))()#('%$%&#$$""
- at 30BB2AAXX080903:3:34:1732:1649#0
-TCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATANCACATCNN
-+
-67777788888888888888888577776555443222100//..-.-,,++++****))))(((('"$%&#"%""
- at 30BB2AAXX080903:3:2:1628:171#0
-GGACATAGCCTATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGATGTTTTAGGGTTTCNCGACGCA
-+
-677777888888888888888888377765/54&322.000./.),---,$$+)**#((%'&&(''%%"##"#"##
- at 30BB2AAXX080903:3:48:548:708#0
-GGGAGGACATAGCCTATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGGTGTTTCTGGTTTTCGGGG
-+
-677777888848.888888888887777).3544022..00+...'--,&,,**#))'()#((##''""""%"#""
- at 30BB2AAXX080903:3:55:740:2013#0
-CGGGAGGACATAGCCTATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGATGTTTTATGTCTCTTCT
-+
-67777788888888888888888877776452443222200/++.-,-,,+*+)+#)*)()#('#%#'&#$#$"#"
- at 30BB2AAXX080903:3:46:663:205#0
-TCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGGTCACGTCT
-+
-67777788888888888888888877776552445222010/..---,,,,++*(**))(()('('%$"#""###"
- at 30BB2AAXX080903:3:41:536:2037#0
-TCACGGGAGGACATAGCCTATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGATGTTTCAGATACAT
-+
-67777788888888883188888877776555143212000-...+,-,++,#()*)*&')')((#(%"""""$#"
- at 30BB2AAXX080903:3:1:453:1068#0
-GCCTCACGGGAGGACATAGCCTATGAAGGCTGTTGCTATGGTTGCAAGCAGATCGGACGAGCGGCTGTNTGNTATA
-+
-6777778888888888/)8808-8724763$5/4.21-/')'&-',+-,,+)#*)(#$##'&'(#'&""#""##""
- at 30BB2AAXX080903:3:40:1243:997#0
-ATTTGGCCTCACGGGAGGACATAGCCTATGAAGGCTGTTGCTATAGTTGCAAGCAGGAGGATAATGCCGATGTTTT
-+
-67777788888888888888888877776555443222100/...---,,+++***)*))((((((#''"%%#"""
- at 30BB2AAXX080903:3:36:609:1060#0
-ACATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGACACACAAN
-+
-67777788888888888888888877776555443222101//..---,,+,+*****))))((((#"%$%%"##"
- at 30BB2AAXX080903:3:41:282:323#0
-CATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCTCACTCCTA
-+
-6777778888888888888888887.776555443222100/...---,,,,++*)))))(&)'(('$&%%#%$##
- at 30BB2AAXX080903:3:46:1192:1126#0
-ATCGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCCAATCACAT
-+
-67777788888888888888888877776555443222100//..--,,,+,*)**)*))')(('&'$"##%"$""
- at 30BB2AAXX080903:3:59:1439:1479#0
-CGGCATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAACACACANCA
-+
-67777788888888888888888877776555443222100//..---,,+++****)))())(((&$$&&"$"$$
- at 30BB2AAXX080903:3:55:32:1289#0
-ATTATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGCGCGGGGATCGGAGTGTCGCAC
-+
-6777778888.888888888888877776555423212000./.%+,,-+++++(*#*)')%&''(%'##"#"$##
- at 30BB2AAXX080903:3:46:343:1278#0
-ATCCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATCTATTGCGC
-+
-67777788888888888888888877776555443222000//-,--,+,+)+)**()()))()'''$""""####
- at 30BB2AAXX080903:3:56:189:767#0
-CTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGACGCC
-+
-67777788888888888888888877776555443222100//..----,++++*)))))()(((('%"$""""#"
- at 30BB2AAXX080903:3:50:1410:1742#0
-CTGTGGCCCCTCAGAATGATATTTGGCCTCACGGGAGGACATAGCCTATGAAGGCTGTTGCTATAGTTGACCTCTA
-+
-67777788888888888888888877776555443022100/0.,,-,,,++++**)())')(('(%"$#"$"#""
- at 30BB2AAXX080903:3:54:489:1196#0
-CTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGTCCCCTNTC
-+
-67777788888888888888888877776555443222100/...---,,,++**+**)))((((('"$###""$%
- at 30BB2AAXX080903:3:2:386:640#0
-CAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACANCATNCAC
-+
-6777778888888888888888887777655514122210,//...--,-+++***))))))(''(''"#%""$$#
- at 30BB2AAXX080903:3:4:1469:285#0
-TTGTAATTACTGTGGCCCCTCAGAATGATATTTGGCCTCACGGGAGGACATAGCCTATAGATCGGAAGNACACNCN
-+
-677777888888888888888888777765554432/2101///.---,-,,+))**)*))('(('#""#%$#"#"
- at 30BB2AAXX080903:3:58:691:2012#0
-TTTGTAATTACTGTGGCCCCTCAGAATGATATTTGGCCTCACGGGAGGACATAGCCTATGAAGGCTGTTGACACCN
-+
-67777788888888888888888877776555443210100//..---,,++++))*)))((()&''"&%###$#"
- at 30BB2AAXX080903:3:35:877:1404#0
-TAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTAGANACTACGTN
-+
-677777888888888888888888777765554432221000//..--,,+++***)))()))((('"#$%"$"#"
- at 30BB2AAXX080903:3:37:694:823#0
-TTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTCTCCTCAN
-+
-677777888888888888888888777765554432221000/..-.-,-+++++***))()((((("%%%$###"
- at 30BB2AAXX080903:3:50:928:967#0
-TATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCCGCCATCTCATAGA
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))(((('%$"$"####
- at 30BB2AAXX080903:3:54:250:1496#0
-CCCAATGTATGGGATGGCGGATAGTAAGTTTGGAATTACTGTGGCCCCTCAGATCGGAAGAGCGGTTAAGCGGCAC
-+
-6777778.888888888888880877476555%2322200//..-,,,,,*+****)'))'(#)(##"#"%""#""
- at 30BB2AAXX080903:3:53:263:1321#0
-TGAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGCAGCAGC
-+
-67777788888888888888888877776555443222100//..---,,++++****)))((((('&"$"#"##"
- at 30BB2AAXX080903:3:39:491:413#0
-TAGGTCTGTCCCAATGTATGGGATGGCGGATAGTAAGTTTGTAATTACTGTGGCTGCGCAGAATGATCTGCTGTGT
-+
-677777888888,888888883'177776-5+1-3221100....,--,,*++)&**(()''('('%%&##&%%##
- at 30BB2AAXX080903:3:50:661:214#0
-CAAATATCATTCGGAGGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGCGGCCGCTC
-+
-6777778888881888888888887177.555443222100//..----,++++**))))))()(('"""#$"##"
- at 30BB2AAXX080903:3:4:962:1296#0
-AATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCNACTCNCN
-+
-67777788888888888888888/77776552443.2210/./.,-,),,++**+*&(((((((('%%"#&%$"$"
- at 30BB2AAXX080903:3:4:620:905#0
-GATTCATTGAACTAGGTCTGTCCCAATGTATGGGATGGCGGATAGTAAGTTTGAGATCGGAAGAGCGCNTCACNCN
-+
-67777788888888888888888877776555443222100//..-.-,,,,+****)))()((('&$""%#%"#"
- at 30BB2AAXX080903:3:33:757:524#0
-TCTGAGGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCANGCGAAANN
-+
-6777778488888888888888887777655544322220//-/---,,-+,+***)*))))(((('""$""""""
- at 30BB2AAXX080903:3:45:1654:229#0
-CTCAGATTCATTGAACTAGGTCTGTCCCAATGTATGGGATGGCGGATAGTAAGTTTGTAATTACTGTGGACCTCAC
-+
-67777788888888888888888877772555443222100//..---,++++***)*)))))((('%$""%#%#$
- at 30BB2AAXX080903:3:43:102:322#0
-CCTCAGATTCATTGAACTAGGTCTGTCCCAATGTATGGGATGGCGGATAGTAAGTTTGAGATCGGAAGACAGCGCT
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((('('&&#"$"###
- at 30BB2AAXX080903:3:41:599:89#0
-TACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCCGTACAC
-+
-67777788888888888888888877776555445222100/..-.--,-,*+*))**))()((''%$%"%#""#"
- at 30BB2AAXX080903:3:36:1626:1762#0
-GGACTGGCTAATGAGTAGCCTCCTCAGATTCATTGAACTAGGTCTGTCCCAATGTATGGGATGGCGGCTATCTTNN
-+
-6777778888-8888888&888+$777/655544322$000/.(/-,,+,*+**)))))))&(((('$$#"##"""
- at 30BB2AAXX080903:3:44:1588:964#0
-TTACTATCCGCCATCCCATACATTGGGACCGACCTAGTTCAATGAATCTGAGGAGGCTACCCAGTAGACGGGCCAC
-+
-6777778888888%8888888888.7730.55243)2/10//+.----,,+++****))'%#%'#(%&"$#""#"#
- at 30BB2AAXX080903:3:36:131:251#0
-TGGGACTGTCTACTGAGTAGCCTCCTCAGATTCATTGAACTAGGTCTGTCCCAATGTATGGGATAGANCTCACAGN
-+
-67777788888888888888888877776555443222100//..---,,++******)))(((((&"$"$%$#""
- at 30BB2AAXX080903:3:36:363:509#0
-TATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGCACCGACTN
-+
-67777788888888888888888877776555443222100//..---,-+++***))))))(((('$"%$""#""
- at 30BB2AAXX080903:3:34:1130:631#0
-ATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTNTTACAGNN
-+
-67777788888888888888888877776555443222100//..---,,++++****)))))((''"""$%#"""
- at 30BB2AAXX080903:3:47:1601:971#0
-ATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTACACCAAAT
-+
-67777788888888888888888877776555443)20100/+..----,+)+*))*))(((((('#"&"#%#%"#
- at 30BB2AAXX080903:3:33:498:673#0
-TCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAAGANGTGAGCNN
-+
-67777788888888888888888877776555443222100//.---,,,+++)**)*&)*(((((("#""#"$""
- at 30BB2AAXX080903:3:55:356:570#0
-GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTCCCATCTCCACAA
-+
-67777788888888888888888877776555443222100//..--,,,+++****))))((((('"'"&&%$$$
- at 30BB2AAXX080903:3:60:866:277#0
-GCCATCCCATACATTGGGACAGACCTAGTTCACTGAATCTGAGGAGGCTACTCAGTAGACAGTCCCACCCCGCANN
-+
-67777788188888888888888877776555-23222100///.---,,+,++*)**&(()'((('''"#"$#""
- at 30BB2AAXX080903:3:60:867:275#0
-GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTCCCACCTCGCANN
-+
-67777788888888888888888877776555443222100//-------,,++*))*))()'('('&&""$%#""
- at 30BB2AAXX080903:3:2:216:1902#0
-ATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTCCCACCCANCACNNAC
-+
-67777788888888888888888577776555453222200//..-.,-,+++*+)**)(()('(('""#"#""##
- at 30BB2AAXX080903:3:51:829:1466#0
-CATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGCATCCGCGCA
-+
-677777888888883888888888777765554432221001..-.----+++**)))(()'(((&%"""#"#"""
- at 30BB2AAXX080903:3:45:124:592#0
-GAAAGGTAAAGAATCGTGTGAGGGTGGGACTGTCTACTGAGTAGCCTCCTCAGATCGGAAGAGCGGGGCCGGAGTG
-+
-67777788888888888888888877776255443212100'/.---,,,+++*+)*)()))('(''"%$%""$##
- at 30BB2AAXX080903:3:37:1640:1971#0
-AGACCTAGTTCAATGAATCTGAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCACTCCTCAN
-+
-677777888888888888888888777,6555443322101/*.,--,,-,,+***))()(()(('%"$"$$#%$"
- at 30BB2AAXX080903:3:50:170:1235#0
-GATGAAGTGAAAGGTAAAGAATCGTGCGAGGGTGGGACTGTCTACTGAGTAGCCTCCTCAGATTCATCGGCGGACT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*)))(('&$$"$#""#"
- at 30BB2AAXX080903:3:55:1667:36#0
-TCAATGAATCTGAGGAGGCTACTCAGTAGACAGACACACCCTCAAACGATTCTTGACCTTTCACTACACAACAAAA
-+
-677777888888888888888888777765554$3)2210////)---,,++)+**)*()))(#(&&$&"%&$#$$
- at 30BB2AAXX080903:3:48:1282:1336#0
-CAATGAATCTGAGGAGGCTACGCAGTAGACAGTCCCACTCTCACACGATGCTTTAACTTTCACTTCAACGCGCTCC
-+
-67777788888888888888108877776555'40,2,*00-/,,+-,)(+(+*'')$((#(&#'(#"#"$"""#"
- at 30BB2AAXX080903:3:49:693:1538#0
-CAATAATGAAGGGCAAGATGAAGTGAAAGGGAAAGAATCGTGGGGGGGGGGGGGGGGTGACTGGGGGCGCCATGCC
-+
-677777888888888888888886777765(344152+$1).&.%---,-++))()(#######'##"##""""#"
- at 30BB2AAXX080903:3:2:686:1072#0
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCAGATCNGCTAGTC
-+
-677777888888888888888888777725452432210100/.-----,+++*+***))()(((''"""$"#""#
- at 30BB2AAXX080903:3:45:1124:1058#0
-GAGGAGGCTACTCAGTAGACAGACCCACCCCCACAAGATGCGTTACCTTTCACCTCCTCCTAGCCATCCTGAGATC
-+
-6/77778588888888888888))777765(5'-.'2/&*,'.--&(#++*$)$*##(%#(#&'##%"""$"$"""
- at 30BB2AAXX080903:3:58:1337:421#0
-AGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCAGTAGCACA
-+
-6777778888888888888888887777655544120$100//.,-+*,+,+++*)*))))'(('''%$&""$%$%
- at 30BB2AAXX080903:3:56:752:106#0
-TGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGTCTACTGAGCAGACTCCT
-+
-67777788888888888888888877776555243222100/..----,,*++****))))(((''&%$##%"###
- at 30BB2AAXX080903:3:45:101:1113#0
-GGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATAGATCGGA
-+
-67777788888888888888888877776555443222100//..---,,+++****))))(((''''%&&"$%##
- at 30BB2AAXX080903:3:4:1017:1901#0
-GCTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGAGATCGGANGATGNTN
-+
-6777778888888888888888887675655544222210///.--+-,,,,**+**)()))(((('&""""""""
- at 30BB2AAXX080903:3:43:128:189#0
-GGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTAACTTTCACTTCATCTTGCCCTTCATTATTAGATCGG
-+
-67777788888888888888888/7877655544322210#//..-*,,+*++**))*)))((('(''%%%"###%
- at 30BB2AAXX080903:3:42:1307:1711#0
-CTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCGTCTGCA
-+
-67777788888888888888888877776575463222020//.,,--,,,+++**(*)((((((('$&%&&#"#"
- at 30BB2AAXX080903:3:38:299:1070#0
-CTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCACCCCTACAC
-+
-67777788888888888888888877776555443222100//..----,+++*+*))))))()(('%"&##%"##
- at 30BB2AAXX080903:3:42:785:820#0
-CTGCTAGGGCTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGTCTCTTGG
-+
-67777788888888888888888877776555443222110/...----,,+***)*)))&))((('&&%&""#"#
- at 30BB2AAXX080903:3:51:991:187#0
-GCTGCTAGGGCTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGCTCTCGG
-+
-67777788888888888888888877776555443222100//-.---,,+++**+)*)))((('('""####"#"
- at 30BB2AAXX080903:3:37:1665:1484#0
-TGCTGCTAGGGCTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACATTGACNN
-+
-67777788888888888888888877776555443222100//.*---,,,++*+**))))(&('''""""""$""
- at 30BB2AAXX080903:3:59:532:1230#0
-GGAGTGCTGCTAGGGCTGCAATAATGAAGGGCAAGAGGAAGTGAAAGGGAAAGAATCGTGTGGGGGTGAGCGCNAC
-+
-677777888888888888888888777305553432(2000//-.+--'&,,+**('*()&)#(((#&$%#"$"##
- at 30BB2AAXX080903:3:33:194:1128#0
-ACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCAGCCCTAGCNTCAACANN
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)))'(((''""%"#$$""
- at 30BB2AAXX080903:3:2:966:696#0
-CCACCCTCACACGATTCTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCAGCCCTAGCAGCACTCNACCTCCC
-+
-677777888888888888888888774766554432.1200/.-,.--,,+++*)'))()'(('('''"$"""##"
- at 30BB2AAXX080903:3:60:1165:497#0
-CGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAATAATGAAGGGCAAGATGAAGTGAAAGGGAAACACCNN
-+
-67777788888888888888888877776555443221100//./---,-+,++****)))()(((#&%&"$##""
- at 30BB2AAXX080903:3:45:250:1372#0
-CTTTACCTTTCACTTCATCTTGCCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCGCGTAACG
-+
-677777888888888888888888777765554432220/0//...-,-,+,*+****)))))((('%"$&##"#%
- at 30BB2AAXX080903:3:53:52:1051#0
-TTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAATAATGAAGGGCAAGAGNCAGNTCT
-+
-677777888888.8888886888877756535433122001/../-,-,,+*+*)))()))(#'(('""#""""#"
- at 30BB2AAXX080903:3:2:1640:1675#0
-GTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAATAATGAAGGGCAAGANTGACGTC
-+
-67777788888888888888888877776550441222010//,.,-,,-+*)**))*))))(''''&"&##%#""
- at 30BB2AAXX080903:3:33:498:592#0
-CTTCATCTTGCCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTAGATCGGAAGAGCGNTAGTCCNN
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(('(&"""""##""
- at 30BB2AAXX080903:3:43:842:45#0
-AGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAATAATGAAGGGCACAG
-+
-67777788888888888888888877776555443222100/..---,,,++++**)*((((((((''&%##""""
- at 30BB2AAXX080903:3:52:773:1544#0
-CTTGCCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACAGATCGGAAGATGCTCCCC
-+
-67777788888888888888888877776555443222100//..---,,++++**))))))(((('%"""""""#
- at 30BB2AAXX080903:3:43:1755:765#0
-CCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGATCAAACAACCCCCTAGGAA
-+
-67777788888888888888888877776555443222100//..---,-+,******)))()((('&&%%%%$""
- at 30BB2AAXX080903:3:37:1464:295#0
-TTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAGACCCTCNTCN
-+
-67777788888888888888888867776555433222200./.*---,+++++****)))'(('('"&$%$"$$"
- at 30BB2AAXX080903:3:42:536:888#0
-GATTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCTGCTAGGGCTGCAATAATGAAG
-+
-67777788888888888888888877776555443222200//..---,,+,+****)*))((('('$&$%$$##%
- at 30BB2AAXX080903:3:55:1148:1423#0
-TCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGCAACGGGATCAAACAACAGACAGGACTACTA
-+
-677777888888888888888888772745554)521'&0//-..'-,',++*')())())((((#%"$"$"##"#
- at 30BB2AAXX080903:3:39:1005:560#0
-ATCGGAATGGGAGGTGATTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAAGATCGGAAGAGTGTAG
-+
-67777788883888888-888%8877772555443210//0/.-+-*-,+++**&***()((&'(&#$$"%$""""
- at 30BB2AAXX080903:3:50:597:724#0
-ATCGGAATGGGAGGTGATTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCACCACTG
-+
-677777888888888888888888777735554432220000/.-----,+++***)))))'(((('%%$#$"#""
- at 30BB2AAXX080903:3:51:1165:707#0
-ATCCGAATGGGAGGTGATTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTTACTCNCTC
-+
-67777788888888888888888877776555443221100./..-,-,,,+****)**))'()('&""$""""##
- at 30BB2AAXX080903:3:49:1498:2039#0
-TATCGGAATGGGAGGTGATTCCTAGGGGGTTGTTTGATCCCGTTTCGTGCAAGAATAGGAGGTGGAGTGCATTCAC
-+
-67777788888888888888888877776/55443212+.///./+-',++*+***)*)())#((('""""""#"#
- at 30BB2AAXX080903:3:50:384:50#0
-CTCCACCTCCTATTCTTGCACGAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAATCTCACAC
-+
-67777788888888888888888877776555443222100//..--,,,+,+***)))))()((('""#"$"$""
- at 30BB2AAXX080903:3:37:998:1081#0
-TAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCCTAGGGGGTTGTTTGATCCCGTTTCGCTCCTGCTAN
-+
-67777708888888888888888877776555443222100//..---+,+,++**)))))'((('%"%"""##""
- at 30BB2AAXX080903:3:52:276:326#0
-TGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCCTATGGGGTTGTTTGATCCCGCCTCTTTC
-+
-67777788888888888888888877776555443222100././--,-+)+++*)))))))(((('%"$"$"""#
- at 30BB2AAXX080903:3:53:1565:1415#0
-TGATTGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCCTAGGGGGTTGTTTGACACACTCCT
-+
-67777788888888888888888847776555413221100/...--,,,**+***)*)()(((((&$$%%$"##"
- at 30BB2AAXX080903:3:3:900:1007#0
-TTTGATTGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCCTAGGGAGATCGGACNGCACNTG
-+
-67777788888888888888888877776555401222000//.---,,-,+)**)*))()(%#(('$"""$#"#"
- at 30BB2AAXX080903:3:39:94:1347#0
-GGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACATATACATCA
-+
-67777788888888888888888877776555443022100//..----,++++***))))(()'(&$$##"%"##
- at 30BB2AAXX080903:3:43:1649:1221#0
-ACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATAAAAGACGCCCACGG
-+
-6777778888888888888888867777455544322-2///..,,--+-,****)*)))'&(((''&$"&#"#""
- at 30BB2AAXX080903:3:49:1177:804#0
-CAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCACTCACA
-+
-67777788888888888888888877776555443222*00./..--,,,+,+***)))))()((('$$""#$$##
- at 30BB2AAXX080903:3:8:589:1921#0
-CAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTAAGATCGGAAGAGCNGATTCANN
-+
-+77777888888888888888$8877776/5943021211/.).,-,-+,+++)*)()))(('('(("""""##""
- at 30BB2AAXX080903:3:49:1009:1992#0
-AGCCGAGGGCGTCTTTGATTGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCCTCGGCTACC
-+
-677777888888888888888888777765555432221/0//..---+,+++***)))*'((((&#$"%"##"$#
- at 30BB2AAXX080903:3:36:333:1879#0
-AAGCCGAGGGCGTCTTTGATTGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGGAGGTGATTCGACCTCCNN
-+
-677777888888888888088888+27-6/554$32+-10,/+,,--,-),+#**)**&))&)'('%""$$###""
- at 30BB2AAXX080903:3:49:1198:690#0
-CCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAGATCGGAAGCGACTCGAC
-+
-67777788888888888888888877776550443222100//..---,,+++(*+))))))()((&"""#""""#
- at 30BB2AAXX080903:3:37:295:617#0
-TAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCCTACAACN
-+
-677777888888888888888888777765,5)43122100//..----,+++***)**))((((('%$%"$"##"
- at 30BB2AAXX080903:3:60:747:779#0
-TAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTGCGCNN
-+
-67777788888.8888888883887773055/483222100//./-----,+++**)))))()'('''"""%"$""
- at 30BB2AAXX080903:3:54:949:93#0
-GGAAGAGAAGTAAGCCGAGGGCGTCTTTGATTGTGTAGTAAGGGTGGAAGGTGATTTTATCGGAATGGCCTGCACT
-+
-67777788888888888888888877776555443222100//.,---,,+*+***)**))()((('%"#"#"##"
- at 30BB2AAXX080903:3:55:241:443#0
-CCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGAGATCGGAAGACGACTGCT
-+
-67777788888888888888888877776552413212.0/--.-*,-+,,++*&*)(*(%((('&'%#""###$$
- at 30BB2AAXX080903:3:57:1368:1723#0
-TCCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTCTTCCACACTA
-+
-67777788888888888888888877776555443222100//..--,,,,++*****))()(('('$"%%""#""
- at 30BB2AAXX080903:3:50:535:717#0
-CCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCAGATCGCCAACGT
-+
-67777788888888888888888877776555443222100/....--,-+,++**(*))))((('&&"$#""#""
- at 30BB2AAXX080903:3:59:23:909#0
-CCCATTCCGATAAAATCACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTAGATCGGAAGAGACCNNA
-+
-67777788888888888888888877776555443222100//..---,,,++*****)))()('((&%&"#%""#
- at 30BB2AAXX080903:3:54:219:1792#0
-GGAGAGAAGGAAGAGAAGTAAGCCGAGGGCGTCTTTGATTGTGTAGTAAGGGTGGAAGGTGATTTTAGCGGATCAG
-+
-67777788888888888888888877776555443221100//..----,+++**))))))(()'''$$#$""$"#
- at 30BB2AAXX080903:3:48:1643:1650#0
-AATCACCTTACACCCTTACTACACAATCAAAGACGCCCTCGGGTTATTTCTCTTCCTTCTTTCCTTTATGTACACA
-+
-677777888/8888888888888877776555421-+0&.//%$%,&',+*))+#(')&(&)'#%'&""""$%""#
- at 30BB2AAXX080903:3:39:1579:1523#0
-ATCAAAGACGCCCCCGGCTTACTTTTCTTCCCTCTCTCCTTAATGACATTAACACAATTCTCCAGAACGTCCCTCA
-+
-6777778888888%8888,-.324(.1,3%5%1$+'1.1%0%)*%,**++*+'''#(&)%'&#&###"%#""#"##
- at 30BB2AAXX080903:3:46:730:1679#0
-GCCTAGGAGGTCTGGTGAGAATAGTGTTAATGTCATTAAGGAGAGAAGGAAGAGAAGTAAGCCGAGGGCGACAGCG
-+
-67777788888.88888884888877776555423222100./-.---,,,+****)))))'((((#'#""#""##
- at 30BB2AAXX080903:3:55:1035:617#0
-TGTCTGGGTCGCCTAGGAGGTCTGGTGAGAATAGTGTTAATGTCATTAAGGAGAGAAGGAAGAGAAGCAACCGATG
-+
-67777788888888888888888877776555441222/00//..--,,,++++*))))))()((('"%$$%""""
- at 30BB2AAXX080903:3:42:1523:859#0
-GGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTATTCTCACCAGACCTCCTAGATCGGAAGCGTCCTC
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()(('''&"###"""
- at 30BB2AAXX080903:3:45:1252:1669#0
-TGGCTAGGGTATAATTGTCTGGGTCGCCTAGGAGGTCTGGTGAGAATAGTGGTAATGTCATTAAGGAGAGGGAGAC
-+
-6777778888888888882888887717655544322210&//.---,,$+%++*))())())(((''$#$$"##"
- at 30BB2AAXX080903:3:1:220:976#0
-TGATGTGGGGAGGGGTATTTAAGGGGTTGGCTAGGGTATAATTGTCTGGGTCGCCTAGGAGGTCTGGANCTNACAA
-+
-677777888888888888888888777765553432111/1//.,,--,,**+))*)))()(&'(((""#"""$#"
- at 30BB2AAXX080903:3:60:1401:1615#0
-CGGGCTTGATGTGGGGAGGGGTATTTAAGGGGTTGGCTAGGGTATAATTGTCTGGGTCGCCTAAGATACCCACANN
-+
-677777888888888888888888777765554432.2000/./.-,-,,,)+****')(')('(('$$#%%$%""
- at 30BB2AAXX080903:3:53:195:1912#0
-GTAGGCGAATAGGAAATATCATTCGGGCTTGATGTGGGGAGGGGTATTTAAGGGGTTGGCTAGGGTACTATTCGTT
-+
-677777888888888888888888777765554422221/0//.----,+,++**))))()'(((#%%##&&#""#
- at 30BB2AAXX080903:3:60:878:1621#0
-GTAGGCGAATAGGAAATATCATTCGGGCTTGATGTGGGGAGGGGTATTTAAGGGGTTGGCTAGGGTATATACAANN
-+
-677777888888888888888888777765554432221*0//.',,--,*++***())()()((#'&$#&%#"""
- at 30BB2AAXX080903:3:2:1139:1227#0
-GAGAATTGTGTAGGCGAATAGGAAATATCATTCGGGCTTGATGTGGGGAGGGGTATTTAAGGAGATCGNCGGCTGA
-+
-6777778888888888828888887777655544322210///..---,,+++)****)*)))((('%"%""$#"$
- at 30BB2AAXX080903:3:53:1584:1417#0
-GGAGAATTGTGTAGGCGAATAGGAAATATCATTCGGGCTTGATGTGGGGAGGGGTATTTAAGGGGTTCACTACAAA
-+
-67777788888888888888888877776555443221100//..---,,+++***)))))((('(%"$#"""##"
- at 30BB2AAXX080903:3:36:1273:1389#0
-CTAGCCAACCCCTTAAATACCCCTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAAGTCTCGTCN
-+
-67777788888888888888888877776455443221100//..---,,,+++*****))(((((%&&&$"#"#"
- at 30BB2AAXX080903:3:35:978:2036#0
-TAGCCAACCCCTTAAATACCCCTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATNCTCACACN
-+
-677777888888888888888888777765554431221/0//...--,,+++**))()))()((''"%#%$##$"
- at 30BB2AAXX080903:3:37:898:1093#0
-GATCGGAGAATTGTGTAGGCGAATAGGAAAGAGCAGTCGGGCGTGATGTGGGGAGGGGGATTTAAGATGGAACATN
-+
-67777788888888888888888*777765$54,3522100-/-..--,,+++***)*&))()(''(%"""##"""
- at 30BB2AAXX080903:3:52:633:280#0
-AACCCCTTAAATACCCCTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGCCCCGCCC
-+
-67777788888888888888888877776555443222100//..----+,+++***)*)(')((('$##&%&##$
- at 30BB2AAXX080903:3:34:1619:1444#0
-TTAGGGACGGATCGGAGAATTGTGTAGGCGAATAGGAAATATCATTCGGGCTTGATGTGGGGAGGGGNACACACNN
-+
-67777788888888888888888877776555443222100//...,-,,,++***)*)))((('(&""#%$##""
- at 30BB2AAXX080903:3:41:1012:759#0
-AAGGACGCCTCCTAGTTTGTTAGGGACGGATCGGAGAATTGTGTAGGCGAATAGGAAATATCATGCGGGTCTCTGC
-+
-67777788888888888888888877776555443222000//-/---,,,++**+)*)))()('''%$$""""""
- at 30BB2AAXX080903:3:8:1421:1061#0
-AAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCCCTAACAAACTAGGAGGCGNGCCACANN
-+
-67777788888888888888888877776555443222200//.----,-+++***))))))(((('""##$$#""
- at 30BB2AAXX080903:3:38:202:141#0
-ATTCGCCTACACAATTCTCCGATCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCNCCNN
-+
-67777788888888888888888877776555443122100//..--,-,+++****))())((((("$$%"##""
- at 30BB2AAXX080903:3:3:1438:141#0
-ATTCGCCTACACAATTCTCCGATCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCACNGCCANAN
-+
-6777778888888888881488883777.55543322-100//..+-+,(,++)&))**))#()('%&"""%%"""
- at 30BB2AAXX080903:3:55:246:89#0
-TTCGCCTACACAATTCGCCGATCCGTCCCTAACAAACGAGGAGGCGTCCCTCCACTACTACTCTCCCACACCANCA
-+
-6777778388888888(88888887*4+6/$0,$12+1.0--/.,-",+$+'#$*'(&)'('#'#%#"""%&#"$#
- at 30BB2AAXX080903:3:50:659:294#0
-CGCCTACACAATTCTCCGATCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCCTCGCC
-+
-6777778888888888888888887777655542'222100//..---,,+++***)))())(((''$"##%$##"
- at 30BB2AAXX080903:3:47:685:1662#0
-GCTAGGATGAGGATGGATAGTAATAGGGCAAGGACGCCTCCTAGTTTGTTAGGGACGGATCGGAGAATTGGGGAGG
-+
-6777778888888888888888887777655544321-100/...---,,,++**))*()(()('#'"$$#"""##
- at 30BB2AAXX080903:3:34:1682:758#0
-TCTCCGATCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCANTAACATNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((&"%####"""
- at 30BB2AAXX080903:3:57:117:699#0
-ATGGGGATTATTGCTAGGATGAGGATGGATAGTAATAGGGCAAGGACGCCTCCTAGTTTGTTAGGGACGCTCTTAT
-+
-67777788888888888888888877776555443222100//..----,+++*****))()(('''$&$%%#%$#
- at 30BB2AAXX080903:3:1:250:1496#0
-CCGATCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATACNCCNTGCC
-+
-677777888888882888888888777163323522210/1./.,),,,,+++**))))((((('&'$"%%""""$
- at 30BB2AAXX080903:3:53:746:1037#0
-TCCGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCGTAC
-+
-67777788888888888888888877776555443222100//..---,,++++****))*(()((&&$#%%#"##
- at 30BB2AAXX080903:3:35:405:1942#0
-GGAGGATGGGGATTATTGCTAGGATGAGGATGGATAGTAATAGGGCAAGGACGCCTCCTAGATCGGANTCTCNCAN
-+
-677777888888888888888888777766554432211/00/..--,,,+++)***&*))))('('""%"$"$#"
- at 30BB2AAXX080903:3:33:884:1604#0
-CGTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAAGATCGNACACGANN
-+
-67777788888888888888888877776-45463221100./.-,,,+,,+++**'())*()((('"&#"%""""
- at 30BB2AAXX080903:3:42:956:1811#0
-GTCCCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCAGATCGGACTACT
-+
-6777778888888888888888889777655534321210///.-.--,,*++***)*)*))((((''&%"""##"
- at 30BB2AAXX080903:3:38:21:1839#0
-TATGGAGGATGGGGATTATTGCTAGGATGAGGATGGATAGTAATAGGGCAAGGACGCCTCCTAGTTTGAACCCCAT
-+
-67777788888888888888888877776555443212101//..---+,+++***(*)())(((('"""$###$#
- at 30BB2AAXX080903:3:55:1116:25#0
-CCTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCCTCAGATACT
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((''%&"$$#"#"
- at 30BB2AAXX080903:3:1:489:491#0
-TAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTGGCAATAATCCCCATCCTCCNCANCCTC
-+
-67777788888888888888888577766545453112100/../,-,,-*+++*)*))())((%'''"##"##"#
- at 30BB2AAXX080903:3:54:842:451#0
-CTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAACCAT
-+
-6777778888888(88888878887*47655544521100&-/..+-,,-,,+*****())((((('"%%%&%#$$
- at 30BB2AAXX080903:3:50:697:1139#0
-TTTGTTGTTTGGATATATGGAGGATGGGGATTATTGCTAGGATGAGGATGGATAGTAATAGGGCAAGGACTGCACA
-+
-67777788888888888888888877776555443222100//..---,,+,+**))*)))((((''""#""#"##
- at 30BB2AAXX080903:3:35:204:344#0
-GTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAACAACNACAACANN
-+
-677777888888888888888888777765554432221/0//..---,,+++****))))))((('"%%#"%#""
- at 30BB2AAXX080903:3:34:195:294#0
-GAAATATTATGCTTTGTTGTTTGGATATATGGAGGATGGGGATTATTGCTAGGATGAGAGATCGGAANACTACANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()('('"$#""#$""
- at 30BB2AAXX080903:3:1:1365:1506#0
-CCCTATTACTATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATANTANTTCT
-+
-67777788888888888888828877776555443222100//...--+,,+++**))))))((((''""""$#$#
- at 30BB2AAXX080903:3:36:1558:664#0
-TATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCCACGCCTCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))((((#$'#"%#$""
- at 30BB2AAXX080903:3:50:1452:1649#0
-TATCCATCCTCATCCTAGCAATAATCCCCATCCTCCATATATCCAAACACCAAAGCATAATATTTCGCCTCCTCAC
-+
-67777788888888888888888877776555443222100//...--,(,+++*+))))))()(('&%"$$#""$
- at 30BB2AAXX080903:3:56:819:1752#0
-TGGCTTAGTGGGCGAAATATTATGATTTGTTGTTTGGATATTTGGAGGATGGGGGTTATTGCTAGGTGTGTGTCTG
-+
-677747888888888888888888$777655544322-1/0%/..---+-+++*')($()(&(&((#'&%#"#$""
- at 30BB2AAXX080903:3:48:920:1781#0
-AGTGATTGGCTTAGTGGGCGAAATATTATGCTTTGTTGTTTGGATATATGGAGGATGGGGATTATTGTCACAGACC
-+
-67777788888888888828888877776565442222110./.-,-+,-+&+*))**))#((('('"%#&#""##
- at 30BB2AAXX080903:3:40:345:1151#0
-ATCCTAGCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCNATCATACC
-+
-67777788888888888888888877776555,43222120//.-----,++++***))))((('('"$%%%$%$#
- at 30BB2AAXX080903:3:60:879:1349#0
-CAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTCTGACANN
-+
-67777788888888888888888877776555443220100//..--,,-,,+****))())()(('&$"""##""
- at 30BB2AAXX080903:3:59:1716:418#0
-GGAGTCAATAAAGTGATTGGCTTAGTGGGCGGAATATTATGCTTTGTTGTTTGGGTATATGGCGGACAACAAANNC
-+
-67777788883888888888+8887177655(44/2022/0%0-..--,,,++*&)(*)))(#'(&%&%&#$%""#
- at 30BB2AAXX080903:3:40:84:1589#0
-AGGAGTCAATAAAGTGATTGGCTTAGTGGGCGAAATATTATGCTTTGTTGTTTGGAGATCGGAAGAGACAGCGACT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&$$#"$""##
- at 30BB2AAXX080903:3:53:17:1179#0
-GGCTAGGAGTCAATAAAGTGATTGGCTTAGTGGGCGAAATATTATGCTTTGTTGTTAGATTGGGAGAGTATAGACA
-+
-677757888888888888888888777725554412+,001*/...,,,,,+++*)')((#((#'(#$#"""#""$
- at 30BB2AAXX080903:3:4:649:1000#0
-TCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTTATTGACTCCTAGCTNCACANCN
-+
-67777788888888888888888877776555443222100//-.---,,+)++***))))))((('""##"#"#"
- at 30BB2AAXX080903:3:46:1154:83#0
-TCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCACACTTT
-+
-67777788888888888888888877776555443222100//..---,,+++**+)***)(()((("#"#"$$""
- at 30BB2AAXX080903:3:49:391:1222#0
-AAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTTATTGACTCAGATCGGAAGAGCGGTGTAGCAAAA
-+
-67777788888888888888888877776555443222100//..---,,+++**)))))))(('''$"#%###"#
- at 30BB2AAXX080903:3:37:472:268#0
-GGTTAGAATGAGGAGGTCTGCGGCTAGGAGTCAATAAAGTGATTGGGTTAGTGGGCGGAATATTATGTGTTCTTCN
-+
-672777888848888888888888777725.111/2-2,%0/..,-&+-()*++*'*#%(#('('&%"$%###"#"
- at 30BB2AAXX080903:3:2:1170:677#0
-CAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATNATCACAC
-+
-6777778888888888888888887777655544323210///..---,-,,******((()('(('&""&%%%##
- at 30BB2AAXX080903:3:55:966:280#0
-TGGTTGTCCTCCGATTCAGGTTAGAATGAGGAGGTCTGCGGCTAGGAGTCAATAAAGTGAGATCGGACGGCTGTCA
-+
-67777788888888888888888877776555443222100//..-,-*,,+++**)'*()(('(('$&"""%$#"
- at 30BB2AAXX080903:3:50:1788:693#0
-TACTGGTTGTCCTCCGATTCAGGTTAGAATGAGGAGGTCTGCGGCTAGGAGTCAATAAAGTGATTGGCATAGACAG
-+
-67777788888888888888888877776555443220000//.,---,,+*))***))(&((&((($""#""$""
- at 30BB2AAXX080903:3:44:1750:1248#0
-AAAAGGGTAGCTTACTGGTTGTCCTCCGATTCAGGTTAGAATGAGGAGGTCTGCGGCTAGGGGGCAATAAAGTGAT
-+
-67777788888888888888888877776555443222100//..-.-,,+,+***))()(()&#&'"#"%$"#"#
- at 30BB2AAXX080903:3:4:524:996#0
-ATGGTAAAAGGGTAGCTTACTGGTTGTCCTCCGATTCAGGTTAGAATGAGGAGGTCTGCGGCTAGGGANCACGNCN
-+
-67777788888888888888888877776555413220101//.,---,,+++*)))*(*)(('('&""%"#""#"
- at 30BB2AAXX080903:3:54:1370:421#0
-GATGGTAAAAGGGTAGCTTACTGGTTGTCCTCCGATTCAGGGTAGAATGAGGAGGTCTGCGGCTAGGGTGGAGTGC
-+
-67777788888888888888888877776555440222100%/...-),,++***')()(*((%('''"""""#""
- at 30BB2AAXX080903:3:42:143:1909#0
-TGATGGTAAAAGGGTAGCTTACTGGTTGTACTCCGATTCAGGGTAGAATGAGGAGGTCTGGGGCTAGCGTCCATCC
-+
-67777788888888888888888877776$55413222(/0/)..-,-,,+++****')(#)(&('&&""#$$"##
- at 30BB2AAXX080903:3:56:384:785#0
-AATGATGGTAAAAGGGTAGCTTACTGGTTGTCCTCCGATTCAGGTTAGAATGAGGAGGTCTGCGGCTAGGGGCACG
-+
-67777788888888888888888877776555443221100//.,-,-,,,+****))((()()(''$&"""$#$"
- at 30BB2AAXX080903:3:36:1379:258#0
-TGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTAGNTCTGTAGN
-+
-67777788888888888888888877776555443222100//..---,,+,*+****))(()(((("%%&%$"""
- at 30BB2AAXX080903:3:53:975:1452#0
-TCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCCTTGGCTG
-+
-67177788888888888888888877776555443222100//...--,,+++*+()))'*((''''$"$&%%$""
- at 30BB2AAXX080903:3:39:594:1968#0
-CGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTCTGA
-+
-67777788888888888888188877776555443221000//..,--,++,+***))))())(((''&%%&&###
- at 30BB2AAXX080903:3:50:1097:1761#0
-GCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCGACCCTTTTACCATCATTGGACAGCGTGCAC
-+
-6777778888888888888888887777655543321210///.-)--,,,++**))*)))))(((&""#"""#""
- at 30BB2AAXX080903:3:55:772:1503#0
-GCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACCACTAGCCC
-+
-67777788888888888888888877076555443222100//...--,,&++**)()))))((((&"&#$$####
- at 30BB2AAXX080903:3:37:180:1854#0
-CAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAGCACTCACN
-+
-67777788888888888888888877776555443002100//..--,+,+++**))))))((((('$%#%#$##"
- at 30BB2AAXX080903:3:50:368:997#0
-CTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATACATAC
-+
-67777788888888888888888877776555443202100../.---,,,*+***))))())(((''$#"##"$%
- at 30BB2AAXX080903:3:46:1010:284#0
-AGTACGGATGCTACTTGTCCAATGATGGTAAAAGGGGAGCTTACTGGTTGTGCTCCGATTCAGGGTTGTAGTCGGG
-+
-6777778888888888888888'8777745554432)2100//..--,,,)$+*)*(('('&')#'#&""#""###
- at 30BB2AAXX080903:3:2:1419:114#0
-ATAGTACGGATGCTACTTGTCCAATGATGGTAAAAGGGTAGCTTACTGGTTGTCCTCCAGATCGGAAANTGTCTAC
-+
-67777788888888888888288877776555443222/00+/..,---+++*$)*'))(('#(('#""%"$$"##
- at 30BB2AAXX080903:3:1:1447:542#0
-TCTAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAAGATCGGAAGNTANATCG
-+
-6777778888888888888888887777654544032/100..--,---,,,++**))*))(#((('$"%""#"#"
- at 30BB2AAXX080903:3:33:223:699#0
-GAAGTATAGTACGGATGCTACTTGTCCAATGATGGTAAAAGGGTAGCTTACTGGTTGTCCTCCGATANTGCGACNN
-+
-67777788888888888888888877776555443222100//,.---,,,++*+*)(%))(((&('"%$#""#""
- at 30BB2AAXX080903:3:56:367:1126#0
-ACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCAGATCGGAAGACTCCG
-+
-67777788888888888888888877776555443222000//..----,+++***)))*)((((''$$##""##"
- at 30BB2AAXX080903:3:34:1416:632#0
-ATTGTTGTGAAGTATAGTACGGATGCTACTTGTCCAATGATGGTAAAAGGGTAGCTTACTGGTTGGCNTCCTAGNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((%%"&&##""""
- at 30BB2AAXX080903:3:39:928:402#0
-CGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTAGATCGGAAGAGCGGTCCC
-+
-67777788888888888888888877776555443222100/..-,-,,,,++****)*))())(('$&#"""###
- at 30BB2AAXX080903:3:59:457:1640#0
-GGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCAGATCTGATAAGC
-+
-67777788888888888888888877776555443222100//..--,,,++****)**)*)()((''"%##"""#
- at 30BB2AAXX080903:3:52:43:522#0
-TTAGGATTAGGATTGTTGTGAAGTATAGTACGGATGCTACTTGTCCAATGATGTGAAAAGGGTAGCTTCATGGATG
-+
-67777788888-8888888888887777655544.2120/,//.,-*)+,*++)'('(*))(#'('&"#"%%%"##
- at 30BB2AAXX080903:3:41:976:1353#0
-AACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAAGATCGGAAGAGCGGAC
-+
-67777788888888888888888877776555443222110/.-.--,,,+++***)*)))))((('%%#%$""""
- at 30BB2AAXX080903:3:58:1048:887#0
-CAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATCAC
-+
-67777788888888888888888877776555443222100//..---,-+,++**)*)))((((('&$&$""##%
- at 30BB2AAXX080903:3:1:952:396#0
-GTTGGTATTAGGATTAGGATTGTTGTGAAGTATAGTACGGATGCTACTTGTCCAATGATGAGATCGGANTCNCATC
-+
-67777788888888888888888877776555443220100//...--,,++)+***)*)()((#(&&"#$"$###
- at 30BB2AAXX080903:3:44:944:1948#0
-CTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAACTATCTCAGA
-+
-67777788888888888888888877776555443222100//..---,-,+++*)*))))(((('''%%%%%%$%
- at 30BB2AAXX080903:3:56:1281:147#0
-TACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAACTATCTACCTCCTT
-+
-67777788888888888888888877776555443222100///.---,-+,+***))*))()((((&"&#$##""
- at 30BB2AAXX080903:3:34:301:2039#0
-ACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAACTATCTNCAGCACNN
-+
-67777788888888888888888877776555443222100//..----,,++***))*)))()'(("&#"#"$""
- at 30BB2AAXX080903:3:40:1323:925#0
-CCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAACTATCTCCCTAATTGC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*)()('''&$%#%$$""
- at 30BB2AAXX080903:3:54:740:1683#0
-ACAAGGACAGGCCCATTTGAGTATTTTGTTTTCAATTAGGGAGATAGTTGGTATTAGGATTTGGATTAGCGTGGAG
-+
-6777778888888888888884887777655532222-100//,.--*,,,%#*+*)*&()#(('''$""%#%#$"
- at 30BB2AAXX080903:3:57:810:1004#0
-ATACTACAAGGACAGGCCCATTTGAGTATTTTGTTTTCAATTAGGGAGATAGTTGGTATAGATCGGAAGGATACAC
-+
-67777788888888888888888877-7655544322.0/0/...-,--,,+*+**))))()((((%&&""""##%
- at 30BB2AAXX080903:3:1:1068:707#0
-AAGGTTTTCATCTCCGGTTTACAAGACTGGTGTATTAGTTTATACTACAAGGACAGGCCCATTTGAAGNACNCACA
-+
-67777788888888888888888877776525443222000//.---,,,,++****)(')((((('""#%"####
- at 30BB2AAXX080903:3:2:1188:1280#0
-ATACTCAAATGGGCCTGTCCTTGTAGTATAAACTAATACACCAGTCTTGTAAACCGGAGATGAAAACCNGTTCCAC
-+
-67777788888888888888888877776555443222100//..--,,,,++****))))((((((%""&%$$""
- at 30BB2AAXX080903:3:37:78:1987#0
-AGACTTTTTCTCTGATTTGGCCTTGGAAAAAGGATTTCATCTCCGGTTTACAAGACTGGTGTATTAGTCAATACAN
-+
-67777788888888888888888877776555442221101//..-,,,,*++**)*))))((#(('"""##"#""
- at 30BB2AAXX080903:3:1:353:277#0
-GAGATGAAAACCTTTTTCCAAGGACAAATCAGAGAAAAAGTCTTTAACTCCACCATTAGCACAGATCTNCANTCAT
-+
-6777778888888888881888487/7760.5343000+0,-/---,,,,&*)&**(*('('((('%$"##""%#"
- at 30BB2AAXX080903:3:35:628:32#0
-AGAGAATAGTTTAAATTAGAATCTTAGCTTTGGGTGCTAATGGTGGAGTTAAAGACTTTTTCTCTGTNTTGTCANN
-+
-67777788888888888888888877776555441222100//...*--,++)**))*))('((((%"'%""##""
- at 30BB2AAXX080903:3:56:1670:650#0
-TTGGGTGGTACCCAAATCTGTTTCCCCATGAAAGAAGAGAGAATAGTGTAAATTAGAATCTTAAGATACACACACC
-+
-67777788888888888888$888777765554432.2100//..---,,+++***)))()(((((''&&%%$%%#
- at 30BB2AAXX080903:3:50:823:229#0
-TGGGTGAGTCAATACTTGGGTGGTACCCAAATCTGCTTCCCCATGAAAGAACAGAGAATAGTTTAAATCACACCAT
-+
-67771788888888882888388877776555443212100/0..---,,+++****))))((((('$$"#"%#""
- at 30BB2AAXX080903:3:42:1230:2002#0
-ATTTAAACTATTCTCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCACACAC
-+
-67777788888888888888888877776555443222100//..---,,+++**+)*)(')(%#'%%'#$$###%
- at 30BB2AAXX080903:3:3:1281:452#0
-CTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATNTCCTNTC
-+
-6777778888888888888888887777635244333220/./..---+-*++++*))(*)(#('(($""#$"""#
- at 30BB2AAXX080903:3:52:1652:149#0
-GTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGCACACACAC
-+
-67777788888888888888888877776555443222100//..----,+++***))))'()(((%""%%$$$##
- at 30BB2AAXX080903:3:49:1560:2000#0
-TCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCCGTCC
-+
-677777888888888/88888888777//54,1222%21001+.,.&,'++)+)#*)&%('(('(&'"""##""##
- at 30BB2AAXX080903:3:51:770:842#0
-TCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTAGA
-+
-677777888888888888888880787755554432,2010//..---,,++++*+*)()()(('('%######$$
- at 30BB2AAXX080903:3:42:1433:1929#0
-TTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCACCAACCGCTATGTATTTAGTTCCTCT
-+
-6777778888888888888888$8937664554,3122.-/0..+,,-,,))**'())('()(('%'"#"#""#""
- at 30BB2AAXX080903:3:44:1337:358#0
-TTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGGGCATCT
-+
-67777788888888888888888877776555453212100//.--,,-,,+++*)*)))()'((%'&""""""#"
- at 30BB2AAXX080903:3:51:76:1710#0
-TCATGGGGAAGCAGATTTGGGTACAACCAACGCATTGACTCACCCATCAACAACCGCTATGAACCTCGTCCCCTCC
-+
-677777888888888,48888/88'767)3$504'2220&/0..,)-,+,,++)****%)%%(%'(($"""#$""#
- at 30BB2AAXX080903:3:43:1511:1868#0
-TGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACCTC
-+
-677777888888888888888888777765553430211////.-.,,,,+*+**)**)(())'(''&%#&$"##$
- at 30BB2AAXX080903:3:37:1601:1577#0
-GGTGACTGGCAGTAATGTACGAAATACATAGCGGTTGTTGATGGGTGGGGCAATACTTGGGGGGGAACTATATATN
-+
-6777778888888888888888887777655544322110/-....-&,%%*+(*)*))))&((('#&$%%%""""
- at 30BB2AAXX080903:3:59:382:1713#0
-ATTTGGGTACCACCCAAGTATTGACTCACCCACCAACAACCGCTATGTATTTCGTACAAGATCGGAAGAGCAANNA
-+
-67777788888888888888888877776555443222100//..----,+++****)))))(((''&%%$"#""#
- at 30BB2AAXX080903:3:40:1281:1063#0
-TTCATGGTGACTGGCAGTAATGTACGAAATACATAGCGGGTGTTGGTGGGGGGGTCAATACTTGGGGTGTGTACAC
-+
-6777778888888888888888887777655,4432221-0/-.'&-,,,++(*&#)*')#')((('$%#"""""#
- at 30BB2AAXX080903:3:37:508:189#0
-GTACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTGCATTACTGCCAGTCACCACTAACGAN
-+
-67777788888888888888888877776555443222100//..---+,++**+**)))))(((('"$""%$"""
- at 30BB2AAXX080903:3:33:1757:1818#0
-ACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATNGTCCTGNN
-+
-67777788888888888888888877776555443222100//.--,-,,+,++**)*)))))(&('"""$$""""
- at 30BB2AAXX080903:3:40:355:782#0
-ACAATATTCATGGTGACTGGCAGCAATGTACGAAACACATAGCGGATGATGAGGGGAGCGCTAAGAGNCTGGGGCC
-+
-6/777084888888888888888*77776545443+22000//..--++,+')+&*)*')#%&(##%"$#&""###
- at 30BB2AAXX080903:3:40:209:2014#0
-CCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCAAGNTCGCAAAC
-+
-67777788888888888888888877776555443222100//..--,,,+++***))))()(((('"&#&"""#$
- at 30BB2AAXX080903:3:46:1441:1189#0
-CCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATGAATANTACAGACA
-+
-677777888888888888888888777765554432221/0//..---,,+*++*****)))(((('"""$"""##
- at 30BB2AAXX080903:3:50:916:860#0
-CCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAAGATCGGAAGAGCGGTCACCCA
-+
-677777888888888888888888777365554432221-0///.--,,,+,++)*)*))((((((#%$"#"####
- at 30BB2AAXX080903:3:2:760:721#0
-GTACCGTACAATATTCATGGTGACTGGCAGTAATGTACGAAATACATAGAGGTTGTTGATGGGGGAGTNTACACAT
-+
-677777088888888888881888777765/143302*1/0//-+--,-(++***')(#''((#(&'"""%#$#""
- at 30BB2AAXX080903:3:39:1742:542#0
-GTACCGTACAATATTCATGGTGACTGGCAATAATGTACGAAATACATAGCGGTTGTTGATGGGTGAGTCCATTCTG
-+
-67777788888888888888888877776555443222100./...--,-+++**)*))())(#(''%%"&$"""#
- at 30BB2AAXX080903:3:52:963:1624#0
-ATGGTACCGTACAATATTCACGGTGACTGGCAGTAATGTACGAAATACATAGCGGGTGGTGATGGGTGCAGGCTGC
-+
-67/77788888888888388888,777765554432/2$-&/'.-+.+,,*'(+*))*()(#()('&&$""$####
- at 30BB2AAXX080903:3:58:307:207#0
-TATGGTACCGTACAATATTCATGGTGACTGGCAGTAATGTACGAAATACATAGCGGTTGTTGTGGGGGGNGTCNNC
-+
-67777388888888888888888847+7655544%5/01/../,--,,+,('*'**&#*&&(##''''%"%"#""$
- at 30BB2AAXX080903:3:4:1229:619#0
-TTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATGAGATCGGAAGAGNCGTCNCN
-+
-67777788888888888888888877776555443222100//..---,,++++***))))((((('""%$"$"#"
- at 30BB2AAXX080903:3:53:1240:1660#0
-ACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATGAATATTGTACGGTACACAGAACG
-+
-677777888888888888888888777765554432221001/..---+,,+++***))))((((''%###&"#$#
- at 30BB2AAXX080903:3:35:189:196#0
-TCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATGAATATTAGATCGGAAGNTGCGTCNN
-+
-677777888888888888888888577765554432221000/..-,-,,++++*))))))((((('"""$"##""
- at 30BB2AAXX080903:3:34:148:519#0
-CAAGTATTTATGGTACCGTACAATATTCATGGTGACTGGCAGTAATGTACGAAATACATAGCGGTTGNCCACTCNN
-+
-67777788888888888888888877776555343222100/-...-+-,++++**)))))()((%'"#%$$"#""
- at 30BB2AAXX080903:3:4:985:1056#0
-TGGTCAAGTATTTATGGTACCGTACAATATTCATGGTGACTGGCAGGAATGTACGAAATACATAGCGTNCGTANTN
-+
-6777778828888888888888.8777765*54432%200.//..-*,,++$+'*)'*&)((&&(&'""%"$""#"
- at 30BB2AAXX080903:3:3:699:1843#0
-TCAACAACCGCTATGTATTTCGTACATTACTGCCAGTCACCATGAATATTGTACGGTACCAAGATCGGNAGANNCG
-+
-677777-8888888888888888877779555482221//0/..,,-,,,,+++*)&(()(((('('$"""#""##
- at 30BB2AAXX080903:3:50:1740:362#0
-TATGTATTTCGTACATTACTGCCAGTCACCATGAATATTGTACGGTACCATAAATACTTGACCACCTGCGCACAGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''$$"%#%#"#
- at 30BB2AAXX080903:3:43:1723:370#0
-TTATGTACTACAGGTGGTCAAGTATTTATGGTACCGGACAATATTCATGGTGACTGGCAGGAAAGGAGGGGGATAC
-+
-67777788888888,888/-88587777662(4231.0210/....,*+-*,++#*)((')'(#(%'%#&"""##"
- at 30BB2AAXX080903:3:44:649:1570#0
-TGGGTTTTTATGTACTACAGGTGGTCAAGTATTTATGGTACCGTACAATATTCATGGTGACTGGCAGGGGGTCGGG
-+
-67777788888888888888888877776555443222100///.--,,-++++**)*))()((((&""%$""$$"
- at 30BB2AAXX080903:3:47:613:1319#0
-ATGTGGATTGGGTTTTTATGTACTACAGGTGGTCAAGTATTTATGGTACCGTACAATATTCATGGTGACGCGCTGC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))))()(((('$%#"$$""#
- at 30BB2AAXX080903:3:48:452:648#0
-GGTTTGATGTGGATTGGGTTTTTATGTACTACAGGTGGTCAAGTATTTATGGTACCGTACAATATTCATGGGGAGT
-+
-67777788888888888888888877776555443122+0.//*----,,,+++*+)))()((((''%%&$"##""
- at 30BB2AAXX080903:3:45:1570:1609#0
-TGAATATTGTACGGTACCATAAATACTTGACCACCTGTAGTACATAAAAACCCAATCCAAGATCGGAAGCGCGCTG
-+
-67777788888888888888888877776555443222101//..----,+*+****)*))))((('%%###""""
- at 30BB2AAXX080903:3:46:220:1308#0
-GGGGGGGGGGGTTTGATGTGGATTGGGTTTTTTTGTACTACAGGTGGGCAAGTATTTATGGTAACGTCCCTACCTC
-+
-677777888888888+88*8838877776555,422,'1.+1/.'--,),,+*)**)$))(%'#(('%$$"#####
- at 30BB2AAXX080903:3:60:439:622#0
-GTACCATAAATACTTGACCACCTGTAGTACATAAAAACCCAATCCACATCAAACCCCCCCCCCCCCGCGTCAGTNN
-+
-67777788888888888888888877776555442022000./..---,,,*****)*)))(('###$""##"#""
- at 30BB2AAXX080903:3:4:40:2019#0
-TGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTAAGCATGGGGGGGGGGGGGTTGGGGGGGGTTGGCNCTCTNTN
-+
-677777888888888888888884.7776555413222000//..---,,+,'('*%')'((%&#''""""#%"#"
- at 30BB2AAXX080903:3:49:898:1401#0
-TAAAAACCCAATCCACATCAAACCCCCCCCCCCCATTCTTTAAAAAAAAGACAACAAACAACCCCCCCACCGCGAT
-+
-677777888888888,888804/1077;6/224)#$##(/&$),%$&))&)$%&#&(&##&#&####""#%"""""
- at 30BB2AAXX080903:3:36:1068:1677#0
-TGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTAAGCATGGGGGGGGGGGGGTGATCATCCN
-+
-67777788888888888888888877776545443222100//..-.,,,+++****)*))((((&'"""$$###"
- at 30BB2AAXX080903:3:59:1634:1181#0
-TGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTAAGCATGGGGGGGGGGGGTTCAACCANCA
-+
-67777788888888888888888877776555443222100/0..-.-,,,++***)))))((('''$'%%%#"$$
- at 30BB2AAXX080903:3:40:232:782#0
-TTGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTAAGCATGGGGGGGGGGGGTCTAGTGTCA
-+
-67777788888888388888888877776555443222100//..---,-+++***)))))((('('$&#"##"##
- at 30BB2AAXX080903:3:46:1552:973#0
-GGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTAAGCATGTCCGCGCC
-+
-677777888888888888888888777/65554/321210&//.---+,-+$(**+()*()&((#''%"#$"#"##
- at 30BB2AAXX080903:3:46:374:1334#0
-CCCCCCCCATGCTTACAAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCAGATCTGAAGC
-+
-67777788888888888888888877776555443212100//..---,,+++**+*))*))((((&&$$##""""
- at 30BB2AAXX080903:3:38:1280:1689#0
-TGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTGCTTGTACGTGTTACA
-+
-677777888888888888888888777765554432120000/...--,+,+*+***))))'))(('%$%$$""#"
- at 30BB2AAXX080903:3:58:243:1377#0
-CCCATGCTTACAAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCACGCNC
-+
-.7777788888888888888888877776555443222100//..-.--,,,+***)*)))))(((''&%#&"$""
- at 30BB2AAXX080903:3:46:520:139#0
-TGCTTACAAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCAGA
-+
-67777788888888888888888877776555443222100/....--,,,+++**)*)))()((('&$%$&$"""
- at 30BB2AAXX080903:3:50:1379:95#0
-TAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGTTGGTTGCTGTACTTCGCTGGGAG
-+
-67777788888888888888888877776355443222120//-..--,,+++***)*)*)())('(""%"""##"
- at 30BB2AAXX080903:3:53:1562:1290#0
-CTAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGTTGGGTGGTGTACTCACATCAAC
-+
-67777788888888888888888877776555443022100//.--+-,,+++**+)$)*#))('%&$$%%$###"
- at 30BB2AAXX080903:3:52:111:895#0
-ACAAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTGGAA
-+
-67777788888888888888888877776555443222100//..---,,+++******))))((''&&#&&&#""
- at 30BB2AAXX080903:3:57:1136:59#0
-CAAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAAGCC
-+
-6777778888888888888888887777655544322210///..---,,+,+**)))))))((((''$$#%%"#"
- at 30BB2AAXX080903:3:59:377:73#0
-AAGCAAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTCTGNNA
-+
-6777778,888888888888888877776555443222100//.-.--,,+)***+**)))()(((''&&"$#""#
- at 30BB2AAXX080903:3:4:786:1138#0
-GGTATCCTAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGGTGGTTGCTNCACANCN
-+
-67777788888888888888838877776555843522000*/.--)-'+++#+*')))&())''(#""""##"""
- at 30BB2AAXX080903:3:59:1112:304#0
-GGTATCCTAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGGTGGTTGCTCTCTCANG
-+
-67777788881888888888888877776555443222000//.,-,-,,++*+*))*)#))('((''$%""&%""
- at 30BB2AAXX080903:3:43:454:229#0
-TGGTATCCTAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGTTGAGGGGTGGTTGCTGGACTTG
-+
-6777778888888888888888+8777765554432221.0/...--,,++*+***))))')(('('%%%#""$$#
- at 30BB2AAXX080903:3:48:244:91#0
-AAGTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGACTCACCC
-+
-67777788888888888888888877776555443222100//..---+,,,+**+)*)))))((('$"#"$$###
- at 30BB2AAXX080903:3:37:1280:1001#0
-GTACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATCCGACCN
-+
-67777788888888888888888877776555443222100//..---,-++++**)))))()((''%&$%#%%#"
- at 30BB2AAXX080903:3:43:339:741#0
-ACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAC
-+
-67777788888888888888888877776555443222100//..---,,,++***))*)))((((''&%&%%$$#
- at 30BB2AAXX080903:3:48:925:871#0
-ACAGCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATATCACATAC
-+
-67777788888888888888888877776555443222100//..---,,+++*****))))(((('&"$$%$"#"
- at 30BB2AAXX080903:3:57:610:143#0
-GCAACCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTATGATACCAACCACACA
-+
-677777-88888888888888888777765554432221010/...---,+++**+*)*(#)('((('$"$%$##"
- at 30BB2AAXX080903:3:41:1598:398#0
-TGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGCTTTGGAGTTGCAGTTGATGTGTGATAGGTGGGGTATC
-+
-67774788888888880888888877771535443*22100//.--,-,,)+'**&**&)')''((%'$#%""#"#
- at 30BB2AAXX080903:3:36:1607:1024#0
-CAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCACCCCTCNN
-+
-67777788888888888888888877776555443222100//..---,-++++*))*))))((('(&$#%#$#""
- at 30BB2AAXX080903:3:60:1483:1864#0
-AACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACACAACANAANN
-+
-67777788888888888888888877776561481202001-..-.--,,++)%*)'*((&#(('(&&$#&"$%""
- at 30BB2AAXX080903:3:53:1212:415#0
-TATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTCACCACC
-+
-67777788888888888888888877776555443222100//..---,,,++*+*)**)))))'('"##&#%##$
- at 30BB2AAXX080903:3:36:808:1994#0
-GTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGGTTTGGAGATAGGGAGATCTCTCNN
-+
-67777788888888888888868877776555-12321100%/+/---+,,)***))#)'(#((%&#%#&##"$""
- at 30BB2AAXX080903:3:50:840:1990#0
-GTACTGTTAAGGGTGGGTAGGGTTGTTGGTATCCTAGTGGGTGAGGGGGGGCTTTGGAGTTGCAGTTGCGATCACT
-+
-677777888888808888888)8877776345113,2%100-/*.---$,+&+)***$)(()##(%'"#"""#"#"
- at 30BB2AAXX080903:3:38:404:1533#0
-ACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTAGATACGCANACT
-+
-6777778888888888888888887777652524122010//.--.-,-,,*+*+*())()(((('%"$%#"""#"
- at 30BB2AAXX080903:3:52:118:1596#0
-ATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGACACTAGCC
-+
-67777788888888888888888877776555443222100//..--,,-+,++*))*)))()((('$%"$"$"""
- at 30BB2AAXX080903:3:49:646:1661#0
-CAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTAAATAGCACA
-+
-67777788888888888888888877776555443222120//..---+,++)+**))))))(((''$"#""####
- at 30BB2AAXX080903:3:60:602:369#0
-ATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGCTTTGGAGTTCACCNN
-+
-67777788888888888888888877776555443222100//.----,,+++***)()))((('''&'#%###""
- at 30BB2AAXX080903:3:58:710:1583#0
-TATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGCTTTGGGGGCGANTA
-+
-67777788888888888888888,777-65534331221.0/./.)-+,,+&+***))())((((((""##"""""
- at 30BB2AAXX080903:3:49:1156:518#0
-CTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAGACCTACCCACCCTTAACAGTACATCATCCANCT
-+
-63777788888888$888885888777363.343-2./10./%.--,-,,+++$))#()())(('('""""%#""#
- at 30BB2AAXX080903:3:55:1543:1116#0
-CTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACAACACACCACA
-+
-6777778888888888888888887777655544323$100///-----+,++*****))))(('('$$%&"""$#
- at 30BB2AAXX080903:3:48:1310:1002#0
-TGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGGTTTGGCGC
-+
-67777788888888888888888877776555443222100//...--,-+++***)))()((('''"$###"###
- at 30BB2AAXX080903:3:2:131:1913#0
-ATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTAGATCGGAANTGCNNTA
-+
-67777788888888888888888877476545441522200//..--,,,++*+***)())((#(('"""$"""#"
- at 30BB2AAXX080903:3:42:1035:1027#0
-AATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGGTGGATTGGTC
-+
-677777888888888888888888777765504433221*0//-..---,,,*+*))))()'((((&'%"#$#"#"
- at 30BB2AAXX080903:3:53:1623:1497#0
-CCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATACACACCAAC
-+
-67777788888888888888888877776555443222100//...--,,+++***))))))()''%%&%#$$#$#
- at 30BB2AAXX080903:3:39:1298:1490#0
-AAGCCACCCCTCACCCACTAGGATACCAACAAACCGACCCACACGCAACAGGACAAAGAACACAAACATCTTTCAA
-+
-6777778888388+8882&288877/55635243.%.,1-..&*%%-''+*$+(*#''#'%(%''('"$#"$"#""
- at 30BB2AAXX080903:3:53:629:128#0
-AAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACACAAAGCTCATCACG
-+
-67777788888888888888888877776552443222100/0..,--,,+*+*+*))())(%((&'%%%"$%%%#
- at 30BB2AAXX080903:3:58:12:700#0
-GGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGTGAGGGNGGCNNC
-+
-67777788888888888888888877776555443022101//-.---,,+++**)*))))()#'''&$"""#""$
- at 30BB2AAXX080903:3:56:779:1644#0
-CCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACACGC
-+
-67777788888888888888888877776552412'220/0/..-.,-+,,++**)))))()((%('$%##$#$""
- at 30BB2AAXX080903:3:48:1165:1269#0
-TGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTGGGCAGCTCAC
-+
-67777788888888888888888877776555443222100//.----*,+++*****)(')(((''&$""$"%#$
- at 30BB2AAXX080903:3:56:874:1115#0
-ATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGCGGGTAGGTTTGTTGGTATCCTAGTAGAGAGGATC
-+
-6777778888888888888888887717635,44322.100./..---,+-++***)(*''(((((''$"%&"#"#
- at 30BB2AAXX080903:3:1:1397:1840#0
-GCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGNTGNCAGT
-+
-67777788888888.8888618887227636501222.0.,/..%.--%+,+(***)())#'('''&'""""#"""
- at 30BB2AAXX080903:3:46:450:1935#0
-GTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTGGGTTTGTTGGTATCCGCGGGGGTG
-+
-67777788888888888888888807776/55443.(2100....-(-,,+)++#***)))((((#'$%%""$#""
- at 30BB2AAXX080903:3:58:1058:1119#0
-GTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCTAGTACCTC
-+
-67777788888888888888888877776555443222100//..-*-,,*,+*)*))&*)(((''(&$&%#####
- at 30BB2AAXX080903:3:46:1076:1244#0
-CCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACCGTACACAGCCAAGA
-+
-67777788888888888888888877776555443222100//..---,,++++**))))))((''&$%$##""#"
- at 30BB2AAXX080903:3:50:380:1721#0
-AATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGGGGGGAGGTTTGTTGGTATCCCACGGG
-+
-67777788888888888888888877776555340222100//..---,$+++&)*)$))))(((&#"""""##""
- at 30BB2AAXX080903:3:42:813:616#0
-GTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTGGTATCCGTNT
-+
-67777788888888888888888877776555443222100//..---,,+,+****))())(('(&'$&&%$""$
- at 30BB2AAXX080903:3:37:1750:557#0
-CTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGTTCTTGTTGNN
-+
-67777788,88888888888888877776555443222000./..-,-,,+++&**)&)))((('''"$%%"%$""
- at 30BB2AAXX080903:3:41:1315:569#0
-ACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTTGGTGCGCTTCC
-+
-67777788888888888888888877776555443222100//.---,,-+++***))#)))&)((%&$#&"""$"
- at 30BB2AAXX080903:3:46:815:664#0
-GACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAAGATCGGCGTCATGG
-+
-67777788888888888888888877776555443222101//-/---+,,'+**')))&)((('&''$""$#"##
- at 30BB2AAXX080903:3:55:1479:86#0
-TTGACTGTAATGTGTTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGGTAGGTTGGTGTCGTA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))'(('(&$#$"""#""
- at 30BB2AAXX080903:3:39:543:919#0
-TTTGACTGTAATGTGCTATGTACGGGAAATGGCTTTATGTACTATGGACTGTTAAGGGTGGGTAGGGTTGGTGCAT
-+
-67777788888888888888888877776555843*211/01...-&-,-+++***))#))('(('&"%#"$#"#"
- at 30BB2AAXX080903:3:37:314:1099#0
-ACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACTCTCACAN
-+
-67777788888888888888888877776555443222100//..---,,+,++**)))))()((''$$""%"$#"
- at 30BB2AAXX080903:3:60:1103:496#0
-ACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACCGCCATNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((''$%###"""
- at 30BB2AAXX080903:3:42:367:1499#0
-GGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGAGATCGGAAGAGCGGTTCTGAGGGNA
-+
-677777888888888888888888777763554432-2101/.-,--+,,&++****)))))#((#''$%#%"#""
- at 30BB2AAXX080903:3:38:1676:659#0
-CAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAGATCCCTN
-+
-67777788888888888888888877776355443222100//..---,,+++***)*)))()(''&$"$&&#$""
- at 30BB2AAXX080903:3:60:998:1537#0
-GAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGGGTGGCGAACANN
-+
-67777788888888888888888877776555443222100//..----,,++++*)))))()(''&%$"##$$""
- at 30BB2AAXX080903:3:41:534:484#0
-ACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACTGTTAAGTGGCGGTCT
-+
-677777888888888848888888777765554432.2000//..--,,,++*+***))())()''&%$%#""###
- at 30BB2AAXX080903:3:8:1294:565#0
-CATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTACNCGCCACNN
-+
-67777788888888888888888877776555443222100//--,--,,+,+++**))())((('%"##$%#%""
- at 30BB2AAXX080903:3:44:462:1317#0
-CCTTAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCAGATCGGGAGCC
-+
-67777788888888888888888877776555333222100/.-.---,,,++++*)*('((%(((''&%""##"#
- at 30BB2AAXX080903:3:36:511:156#0
-TCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGGACTATGTNCTTACACN
-+
-677777888888.888888388880777655540322110///-.'-++,+++**)))*((#((#''"$%"%$##"
- at 30BB2AAXX080903:3:55:304:632#0
-TCCATGGGGACGAGAAGGGATTTGACTGTAATGCGCTATGTACGGTAAATGGCTTTATGTAAGATCGGCGGGACCT
-+
-6777778888888888888488887777555343322-10//...%,,,,,+'***))(((((('&&%"#"""$""
- at 30BB2AAXX080903:3:56:255:1024#0
-TCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGAGATCGGACGGACCTAC
-+
-677777888888888888888888777765554432221000/...,-,,++++****)))))'(('$$""$"#"#
- at 30BB2AAXX080903:3:56:899:1956#0
-TCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACTATGTATGATCAAT
-+
-67777788888888888888888877776555443122100//..---,,++)++*))*))'((((''###"#"#"
- at 30BB2AAXX080903:3:35:1422:1443#0
-TAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCNCCCACCCN
-+
-67777788888888888888888877776555443222100//..---,,,*++**(**)))(((('"$#"####"
- at 30BB2AAXX080903:3:51:461:754#0
-TAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCTCCTATCT
-+
-67777788888888888888888877776555443222100//..---,-,++***)))))((((('&""#"""""
- at 30BB2AAXX080903:3:34:758:1173#0
-AACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCNATCACTNN
-+
-67777788888888888888888877776555443222000//...--,-+,***)*))))((((''""%##%"""
- at 30BB2AAXX080903:3:51:612:182#0
-TCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTAGATCGGACCACACGTC
-+
-6777778888888888888888887777655244322210///.,---),+++**()*)))(('(''$$"""#""#
- at 30BB2AAXX080903:3:43:861:1849#0
-ACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGAGATCG
-+
-67777788888888888888888877776555443220110//.---,,,+++)*)**)))(((((&&'%%&"#$$
- at 30BB2AAXX080903:3:56:803:2016#0
-AGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGTGCTCACT
-+
-6777+788888888888888888877776555443222000//...--+-+*****()))(((((&('"$$$$#$"
- at 30BB2AAXX080903:3:54:530:404#0
-GGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTACGCTGGTCT
-+
-67717088888888888888888873776555443220100///.-,,,,,+++*)**)))()((''&"#$$#$##
- at 30BB2AAXX080903:3:60:1423:74#0
-GGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATAGATCGGAAGGACACACCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))&(((('#%&&%%$%""
- at 30BB2AAXX080903:3:52:233:1754#0
-GGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGGAAATGGCTTTATGACTCATGT
-+
-677777888888888888888.880777655543/3210/0/%.,,,,,&++++&#)()()'(((&'&$$""#$$"
- at 30BB2AAXX080903:3:52:655:1729#0
-GAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTTTATGTATTTT
-+
-67777788888888888888888877776555443222100./..-,-,,+,+)**))())))'(('&"$%"##"#
- at 30BB2AAXX080903:3:33:1263:126#0
-TGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGCACGGCAAATGGCTTNTCTACCNN
-+
-67777788838888888888888877976552101210200..-.--,,+,+%+**)#)')(((#''"$$#$##""
- at 30BB2AAXX080903:3:37:262:1056#0
-TGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGGGCTATGTACGGTAAGATCGGACACCACTAN
-+
-6777778888888888888888887777655.44321/.0/1/.,&-+-++++*)**)))()(''('&"$#"$"#"
- at 30BB2AAXX080903:3:46:346:760#0
-AGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCAGATCGGAAGATATGTCC
-+
-67777788888888888888888877776554443222100//..--+,,,)%)*)**('''('(%'$""#"""#"
- at 30BB2AAXX080903:3:41:288:1891#0
-CTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAATGTGCTATGTACGGTAAATGGCTCTATGTCCC
-+
-67777788888888888888888877766555343222100///.----,++++*))*)()((((&&%$%%$$##"
- at 30BB2AAXX080903:3:50:662:506#0
-GTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCACCTCAGA
-+
-67777788888888888888888877776555443222100///.---,,++++*)))**)(((((%&"%$$%"##
- at 30BB2AAXX080903:3:50:1762:337#0
-TACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCACCCCCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(((('$"$#$#"""
- at 30BB2AAXX080903:3:2:1266:798#0
-AAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATAGATGACCCCCCTCCNATATATC
-+
-67777788888888888888888877776555443221110///.-,-,,+,++***))))((((''%"#$#"#"#
- at 30BB2AAXX080903:3:4:792:1223#0
-ATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGCNCTCANGN
-+
-67777788888888888888888877776555413222100//.--,-,,+++**))()()))('''%"#"##"#"
- at 30BB2AAXX080903:3:45:1487:923#0
-TTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGTNCACCCG
-+
-67777788888888888888888877776552443222100//..---,,+,++**))))))('(('$""$"##""
- at 30BB2AAXX080903:3:3:875:1311#0
-TGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGAGATCGGACNAGTCNCA
-+
-6777778888888888488888887777353533122210.-/+.),,-,*****)())()(&'((&""#""#"##
- at 30BB2AAXX080903:3:49:1718:1404#0
-GTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCGTGCTTAGC
-+
-67777788888888888888888877776555443012100//..-,,+-++++**)))))))&'&#"#$%""""#
- at 30BB2AAXX080903:3:52:1424:1588#0
-TACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGAGATCGGAAGAGCGTGCCAGC
-+
-67777788888888888888888877776555443222100//..----,+++***))))))(('(&%""$"""##
- at 30BB2AAXX080903:3:38:1342:752#0
-GATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTAACGCGTCACA
-+
-67777.88888888888888888877776555413202120//...--,,++++*)')))(((('&'$&"$$"#%$
- at 30BB2AAXX080903:3:45:1567:27#0
-GATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAGATAGGAAGAGCGGTGCAGTTGCAC
-+
-67777(88-88888888828838837/723554430(,0'0//&,,,,,-+++*#&*&)(((#((##&""""###"
- at 30BB2AAXX080903:3:59:885:1091#0
-GCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTGACCACNCNCAGTC
-+
-67777788888888888888888877776555443222110//.----,,++++***))))((((''&"$"##""#
- at 30BB2AAXX080903:3:3:669:505#0
-CACGGAGGATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGCNTGTANTG
-+
-67777788888888888888888878776555413222100./.-,--,-+++***)())))(((('%"#&##""#
- at 30BB2AAXX080903:3:43:754:1987#0
-CACGGAGGATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGACTGTGACG
-+
-6777778888888888-888882-7'77255/4$322210.+..,$&,+-+,%$*)*#&)(('#'''""%%%#"#"
- at 30BB2AAXX080903:3:46:659:673#0
-TCACGGAGGATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGGGGACGAGAAGGGATTTGTGTAGAGG
-+
-67777788888888888888888877776555443222100//..---,,+++++**)*))(((((''""$#$"""
- at 30BB2AAXX080903:3:36:1108:197#0
-GTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTGACCACCATCCTCCGNTCACTACN
-+
-67777788888888888888888877776555443222120//..-,-,,+,++**))))))()(('"$#"%&$$"
- at 30BB2AAXX080903:3:56:1455:1407#0
-AATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAACCTAACAC
-+
-67777788888888888888888877776555443212100/...,.,,,,++*))*))*)()(((%$%"#""$#"
- at 30BB2AAXX080903:3:46:640:575#0
-TTCTCGTCCCCATGGATGACCCCCCTAAGATAGGGGCCCCTGGACCACCACCCTCCGTGAAACAAATATCCGCCAA
-+
-6777778888888888888888887'4765'04432%21000++.&--&-&*))*))#)(((&(('%"$$%"##""
- at 30BB2AAXX080903:3:3:582:1307#0
-TGTGCGGGATATTGATTTCACGGAGGATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCATGTNNTACNAT
-+
-67777788888888888888888677(76535332.-101.-.*-*+)),,'+**)*)#&'''&%&'$""""%"#"
- at 30BB2AAXX080903:3:38:492:589#0
-TAGCACTCTTGTGCGGGATATTGATTTCACGGAGGATGGTGGTCAAGGGACCCCTATCTGAGGGGGGTCATCCTGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&$$#%%%""#
- at 30BB2AAXX080903:3:59:1015:644#0
-AGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGAGGATGGCGGTCAAGGGACCCCTATAGATCGGTCAAC
-+
-677777858888888888888888777765254432221/0//,--$-,,,+)**+*))())(((('&&&#"$###
- at 30BB2AAXX080903:3:49:462:1243#0
-CCCCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCGCT
-+
-67777788888888888888888877776555441212100/..----,,++++*)*)))((()(('%$&%$%##"
- at 30BB2AAXX080903:3:2:1301:909#0
-CGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGAGGATGGTGGTCAAGGGACCCCNAGCGACG
-+
-67777788888888888888888877776555443222100//..---,,+++(**()))))((''#&"#%&$"""
- at 30BB2AAXX080903:3:33:1027:786#0
-CCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGAGGATGGTGGTCAAGGGACCNCTCGACNN
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)*)))(((('&"%%$&#%""
- at 30BB2AAXX080903:3:56:350:1962#0
-CCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGAGGATGGTGGTCAAGATCGGGAGAGTTCC
-+
-67777788888888888888888877776555443222100//..---,,,++*+*)())(((((('"%&##""##
- at 30BB2AAXX080903:3:44:219:1775#0
-TAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCAGATCGGAAGAG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('''$&%%#"###
- at 30BB2AAXX080903:3:48:1429:955#0
-GGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCGCCAGAACGCACACA
-+
-67777788888888888888888877776555433222000/../---+,+,++)***)'(((''('"$#"#####
- at 30BB2AAXX080903:3:38:1706:394#0
-ACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCGCTCCGGGCCCATAACCGCTGGANN
-+
-67777788888888888888888877776555443222000//..---,,++++**)))))(('(('"$"&"##""
- at 30BB2AAXX080903:3:37:1024:956#0
-CCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGAGTCTCTAGTN
-+
-677777-8888888888888888877776555443222100//.----,,,,+*****))))(((('"$&$"#"""
- at 30BB2AAXX080903:3:42:1137:1299#0
-CACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCTCGCTCCGGGACCATAACACTTGGGTTCT
-+
-677777888888888888888888777765554432/2000//...---,++*+*))&))(((((((&&%%%""""
- at 30BB2AAXX080903:3:36:975:1594#0
-TACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGCGATCTCTN
-+
-67777788888888888884888877774551443.221/0/...-,-,-++****()()(((('('%$""$"#""
- at 30BB2AAXX080903:3:45:797:292#0
-GCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGATATTGATTTCACGGGGGCGGG
-+
-67777788888888888888888877776545443222100//..-.-+,+++***)))))(((((('&""%##""
- at 30BB2AAXX080903:3:49:123:1918#0
-CAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTAGCACTCTTGTGCGGGANTCTTCTAC
-+
-67777788888888888888888877776555443322000//...--,,++*+***))))((((''"%$$##$""
- at 30BB2AAXX080903:3:42:446:886#0
-ATCCCGCACAAGAGTGCTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAATGAACTGTATCCGAC
-+
-67777788888888888888888877776555443222100///.---,,++++)))))))))(('''%&%#$$"#
- at 30BB2AAXX080903:3:53:790:383#0
-GATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTAGCACTCTCGTGATG
-+
-67777788888888888888888877776555443122100//..---,,+++***()))()()(('&$#%&%""$
- at 30BB2AAXX080903:3:56:1256:1063#0
-CAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGAGCGGATGTACTCA
-+
-677777888888888888888888777763554612201.0//..-*'+,+++'***)')())'#''"%%%&##$%
- at 30BB2AAXX080903:3:36:1220:1187#0
-AACCAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGAGTGGTGTNCN
-+
-67777788888888888888888877776555443222001//..---,,+,+***)))))'((((#$$&"%$"#"
- at 30BB2AAXX080903:3:34:958:571#0
-GAACCAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGGAGAGTNCGCCTANN
-+
-67777788888888888888888877776555443222100*/-.-,-,,,)*+**)*))))((((%""""#"#""
- at 30BB2AAXX080903:3:1:295:568#0
-GTAGGAACCAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTATGGGCCCGGAGCGAGAGANCANAACA
-+
-677777888888888)888880087627655544122.0//-+..--,,++,+*'((*)()'('('(""%""""##
- at 30BB2AAXX080903:3:50:1738:1119#0
-GCTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAATGAACTGTATCCGACATCTGGAGACTCTAG
-+
-6777778888888888888888887777655544322*100//-.---+,,++***)*))))(((('"""#"#""#
- at 30BB2AAXX080903:3:56:1659:521#0
-TGAAGTAGGAACCAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAGTGTTAGATCGGAAGAGCGACAAAAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&'%#%%$%$$
- at 30BB2AAXX080903:3:4:1086:896#0
-TCCGGGCCCATAACACTTGGGGGTAGCTAAAATGAACTGTATCCGACATCTGGTTCCTACTTCAGATCNGACANCN
-+
-6777778888888888888888887777656544521211./.-.---,+,++***())())''('(%""""""#"
- at 30BB2AAXX080903:3:42:1353:411#0
-TGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGTCGGATACAGTTCATTTTAGCTACCCCCAAAGAC
-+
-6777778888888888888888883787656544321110.//...-+,,*,%**))*()'(''(''&%&"#%"""
- at 30BB2AAXX080903:3:52:707:1478#0
-TGTGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGTCGGATACAGTTCATTTTAGCTACACCCACAC
-+
-67777788888888888888888877776555443221100//...--,,+++***)**)))((((''""$#$%$"
- at 30BB2AAXX080903:3:51:1717:173#0
-CGTGTGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGTCGGATACAGTTCATTTTAACACAACACAC
-+
-677777888888888888888888777765554432221&1//.---),,+++(**&)()))((('&$$%&%&$$$
- at 30BB2AAXX080903:3:50:1121:1425#0
-GAACGTGTGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGTCGGATACAGTTAGATCTGCTGCTACG
-+
-6777778888888888888888887777355544321210//.----,,,,+***)())(((((('#$#""$""#"
- at 30BB2AAXX080903:3:40:1656:1952#0
-GGAACGTGTGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGTCGGATACAGTTCATTTTAGTCNCAC
-+
-67777788888888888888888877776555443222100//..---,,+,+***))))))((((''&$#$"$#$
- at 30BB2AAXX080903:3:48:1643:1982#0
-GTAGCTAAAATGAACTGTATCCGACATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACANCACTCTC
-+
-6777778888888888888888887777655240322010/0/..,-,,,,++*)+**))))&('('&"%#$"#"#
- at 30BB2AAXX080903:3:55:1468:822#0
-AATGAACTGTATCCGACATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACAGATCGGAAGCTCTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&'&"#""$""
- at 30BB2AAXX080903:3:36:1334:1173#0
-TGTATCCGACATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATTAGACNTCN
-+
-67777788888888888888888877776555443222100//..---+,+++***)*)))))('(#"&%#$"##"
- at 30BB2AAXX080903:3:37:218:257#0
-TGATGTCTTATTTAAGGGGAACGTGTGGGCTATTTAGGCTTTATGGCCCTGAAGTAGGAACCAGATGCTGGANACN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))(((&$%&&#"##"
- at 30BB2AAXX080903:3:53:1174:25#0
-GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTGAGGAGTG
-+
-67777788888888888888888877776555443222100//..---,,+++**))*)))))('''$$#%%"$""
- at 30BB2AAXX080903:3:38:251:416#0
-CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCGCAACCTA
-+
-67777.88888888888888888,777765554430.2100/..,.--+-++)')*)))'(%&'(&'$""##"#"%
- at 30BB2AAXX080903:3:1:625:1741#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGNTCNACTG
-+
-6777778888888888888/888)77776355443/2/100-/,.--*+++++)*)*)*((((((''""##""##"
- at 30BB2AAXX080903:3:36:943:1853#0
-GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGCTCGCTCNN
-+
-67777788888888888888888877776555443221100//...--,-+,+*****)))(((((#%&#%$$$""
- at 30BB2AAXX080903:3:52:1558:1025#0
-GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGCACAGGTAC
-+
-67777788888888888888888877776555443222100//-.---,,+,+***)*)))))('('$$&"$""#"
- at 30BB2AAXX080903:3:37:1103:1443#0
-AGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTATTNGNCGCN
-+
-6777778888888888888888887777655544222210./...-,--,+++++*)))))()('(%"$"""$%$"
- at 30BB2AAXX080903:3:1:1088:277#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCACNCCNCGCC
-+
-67777788888888888488888677776/454410-200.-,-..,',--++&)*)))''((('&#%"$$"$""#
- at 30BB2AAXX080903:3:2:1470:1751#0
-GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTNCGGCAAT
-+
-6773778888888188888284887*4065504/3221/.///,,,.,-+**+)+#'))()##(('''"%&"####
- at 30BB2AAXX080903:3:57:1159:1969#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTNCTCTGTC
-+
-67777788888888888888888877776555443222100-/..-,,+,+++)**)*)((()(('%&"#"$""#%
- at 30BB2AAXX080903:3:50:179:800#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGTATCCCG
-+
-67777788888888888888888877776/55443222100//..---,,+++***)))()((('('%""#"###"
- at 30BB2AAXX080903:3:38:1353:1150#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCACACCATCA
-+
-677777888888888888888888777765554432221/0//..--,,,+++***)))((((((''""%%&%###
- at 30BB2AAXX080903:3:40:313:823#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCNAAAGCTCC
-+
-67777788888888888888888877776555443222100//..---,,,,+*****))(((((&'"&#%%""#"
- at 30BB2AAXX080903:3:55:1600:757#0
-CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACACACACAATC
-+
-677777888888*8888888888877776555443222100//..---,,+++*&**))')((('%&'&%"###"#
- at 30BB2AAXX080903:3:1:1571:390#0
-TTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGGTGAGGGTTAGGGTTANCCNGTCC
-+
-67777788888888888888888876776559443220100-.*.--,+(,++)'')))&'()((&%"""%"""##
- at 30BB2AAXX080903:3:41:1736:2020#0
-CTAACCCTAACCCTAGCCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCAGATCGGACGCTCTNC
-+
-6777778888888888888888887777655542211210/...-,,,,,,,*())()('('(%#&&&"$""#""#
- at 30BB2AAXX080903:3:38:1506:1060#0
-TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGACAGACACCA
-+
-677777888888888888888888777765554332221000'..---,,-*****)())(((((''"""#$"###
- at 30BB2AAXX080903:3:2:599:1510#0
-AACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTACNCACACAC
-+
-677777888888888888888888777763533432221//..--.,+,++++)))())'&((('%'&"&"%%$#$
- at 30BB2AAXX080903:3:54:1472:1803#0
-ACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCAGATCACACCCAC
-+
-67727788488888888888888877176552363200/101..-,-,,,+*+*))()))(((((''$$%&"""""
- at 30BB2AAXX080903:3:60:1288:1358#0
-ACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGATCNCACGTANN
-+
-67777788888888888888888877776555243220000/..-.--,,**+***')))))(((('""%$""#""
- at 30BB2AAXX080903:3:40:702:1131#0
-CCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCAGATCCTACCGCAC
-+
-67777788888888888888888877776555443221100//..---,,+++***)*))((()(('$&##"$$$$
- at 30BB2AAXX080903:3:36:358:2013#0
-TTAGGGTTAGGGTTGGGTTAGGGTTAGGGTGAGGGTGAGGGTGCGGGTGAGGGTGAGGGTGTGGGGGCGCCACANN
-+
-67.77788888888888.1888817677645'443*2/100./(---&,(,,(%*(*)*&)%(((##&$"""#"""
- at 30BB2AAXX080903:3:39:1436:304#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCAAACAGATCGCACGCGCGCAA
-+
-677777888888888888888888777765554432211/0./.,----,+++%*#)()('(#&(&#$%$"""$##
- at 30BB2AAXX080903:3:60:1189:129#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCAGATCGGACGCACANN
-+
-677777888888888888888888777765554132121/0//...-,,,+,++')*))()(('(('&$"$###""
- at 30BB2AAXX080903:3:8:1516:1398#0
-TGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGTGGGGGTTGGGGTTGGGGTTGGNCTCACANN
-+
-6777778888888888+8888888777065554&2,2210.+...,"#-,*+#'*+)'&')(''#&'"&"$$%#""
- at 30BB2AAXX080903:3:57:1246:836#0
-CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGATCGGAAGAGCGTGCACTAC
-+
-67777788888888888888888877776555443222100//...--+-++++*+)*)))((((('&""#$##"#
- at 30BB2AAXX080903:3:40:888:550#0
-ACCCTAACCCTAATCCTAACCCTAACCCTAACCGTAACCCTAACCCTAACCTAACCCGAACCCTAAGCTTAACCCA
-+
-6277578888888%8+888(0%887.*743513/122/00/-/-'--,,,)+++*#)(*(('%(('#'"$"#"%#"
- at 30BB2AAXX080903:3:50:1324:1835#0
-GTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGACCGATNGT
-+
-6777778888888888888888887777555544322210///.--,-,,+++**))))))')((('"$"""""""
- at 30BB2AAXX080903:3:35:543:275#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTAGGGTNATCACGNN
-+
-67777788888888888888888877776555543212100//.----,-+++**)#)))%&(('('"#$$"#"""
- at 30BB2AAXX080903:3:49:1703:379#0
-CACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAACCCTAACCCTAACCCTCTCTCACAC
-+
-677777888888888888888888777765554432220000/.-----,++++**)))*)))(''&$"#"$"#"#
- at 30BB2AAXX080903:3:39:606:1085#0
-CTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAACCCTAACCCTAAGATCGGAACATCCGCAC
-+
-67777788888888888888888877776555443222100//..---,,++++**)*)))()('''$&%$"""##
- at 30BB2AAXX080903:3:36:1320:637#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGTTAAGGTTAGGGTTAGGGTTAGGGTTACTCGTGTGN
-+
-67777788888888888/88888877776555443222100//-.-,-,,++****))())(((((#%$""""#""
- at 30BB2AAXX080903:3:48:578:1107#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGATCGGAAGAGCGGTTGAGCACGGTC
-+
-67777788888888888888888877776555443222100//-.--+,,+++)**)*)))'(('(%"$###""""
- at 30BB2AAXX080903:3:38:1259:1343#0
-TTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAAGATCGGAAGAGCGGTCTATCNTAT
-+
-67177788888888888888888877776545243202100//..---,,,+++**)*))))((''&$"""$"#$%
- at 30BB2AAXX080903:3:40:1690:1470#0
-ACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAACCCCAACC
-+
-677777888888888888888888777765555432221/.//.,----,+++**)))(((((#(&%%$%$$%#$#
- at 30BB2AAXX080903:3:56:1127:42#0
-CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTTAACCCTAACCCTAACCCTTAACCCTTAGATCGCAGC
-+
-67777788888888888888888877776555443222100//-/--,,,,*+****())(')(%&('&&&&#""#
- at 30BB2AAXX080903:3:2:59:1248#0
-TAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTGGGGTTGGGGTTGGGGTTGGGGTTGGGGGGGGGGGCNCTGNNCA
-+
-67777788888888888886888-76776.5$-4302.200..+,--*$+*++)#&())(%&((('&$"$#"""##
- at 30BB2AAXX080903:3:52:1068:1516#0
-TTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTGAGGCTG
-+
-67777788888888888888888877776555443222100//.----,,+++***)))))((((''&#"#%##""
- at 30BB2AAXX080903:3:41:1099:881#0
-ACGCAGCTCCGCCCTCGCGGTGCTCTCCGGGGCTGTGCTGAGGAGAACGCAACTCCGCCGTCGCTATGTGCTCCCT
-+
-14777788888888838888*8887'936)5('4..//0//$/,'.-#++)++*')&'&(#'''#%%&"""$##$"
- at 30BB2AAXX080903:3:4:1243:1902#0
-TGCGCCTGCGCCACGCCTCCACCCCTGGACGCGCTAGCATGTGTCTCTGCGCCTGAGATCGGAAGAGCNTACANCN
-+
-67717788888888888-8888137/10+24.(0*.../&,%-**,,&*(*)+)))''&('(&''%'""#$"#"#"
- at 30BB2AAXX080903:3:48:152:905#0
-GACTGGCAAAAATCCAAAAGTAAACACTTTGTGGAGAAACAGGCACTCCTAGACATTGCTGGTGGGATAATCAACA
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))))((('''&"#"##$##
- at 30BB2AAXX080903:3:53:533:539#0
-TCACAGCCAAGGAGATGAGCACAAGCACTACTTACTGGCCTAGGTTGTGAGAGAAGTTGATGAGATCGGCGGCGTC
-+
-67777788888888888888888877776555443222100//.+---,-++++****)))((((('"%"%#$#""
- at 30BB2AAXX080903:3:52:1058:1679#0
-GGGCCGGCATCTCCTGTCTCCTGGAGAGGCTTCGAGGCCCCTCCACACCCTCTTGATCTTCCCTGTTGCAGNACCA
-+
-6777778888888888888888887777635524.22-,10/..--,,+,,+*+)))')*#'((('&&$"""%#$$
- at 30BB2AAXX080903:3:40:828:533#0
-TCCCTGCAGACCAGGCCCATGACAAACACCGTCTCCAGCGGGCAGAGCAAAGGAAGGGCACAGCGCCAGGGCGCGC
-+
-67777788888888888888888877776553443222100/.-.--,-,+,+*****))(()((''"&"####"#
- at 30BB2AAXX080903:3:41:892:1427#0
-CACTCTGGACTCCACACTCTCCTGGGTTTCACCTTTGTAGCAGGATCCCTGCAGACCAGGCCCATGACACACCCAC
-+
-677747888888888888,888287777655.823222100-/.,%,$,,+,+*+*)))*((((((''%"%$"$$"
- at 30BB2AAXX080903:3:45:948:170#0
-AGGGCAGTAGCAGATGGGTCTGCTCCGTCTCGCTTCTAAGAAGGTGGGCAGGACAAATGAGATCGGAAGGCGACGC
-+
-6777778888888888888888887773665544322110/./.%--,+-+++)*)*()()(''('&""""""#""
- at 30BB2AAXX080903:3:42:601:500#0
-AAGGGCAGTAGCAGATGGGTCTGCTCCGTCTCGCTTCTAAGAAGGTCGGCAGGACAAATGGCAGCCTCCCGCTCAC
-+
-67777788888888888888888877776555441212.00//..*,-,-+++*')*(#))'((#(&&&##""#""
- at 30BB2AAXX080903:3:48:340:1748#0
-AGGGAGATAGAAATCCAGGCAAGGCTGTGGGGCAGGTTAGGGAGCAAGGCTGCAAGATCGGAAGAGGGTCCCTCAG
-+
-67777788888888888888888877776555143212100/..++--,,,,*+****)))'(((''%####"#""
- at 30BB2AAXX080903:3:58:1014:1441#0
-CAGACACGGGGTCTCTAAAAATAGTCATGCTGAGAGCCTAATGGCCCTTGGCACAATTGCTGGTAGATCGTCACCG
-+
-677777888888888888888888777765554432021/0//.-,-,,,++++*))*)'))('(('$$%%$#$#"
- at 30BB2AAXX080903:3:39:737:853#0
-CCACACAGTGCTGGTTCCGTCACCCCCTCCCAAGGAAGTAGGTCTGAGCAGCTTGTCCTGGCTGTGTCCCCGTCTG
-+
-67777788888888888888888877776555443222.00//..---,,+,++****))))()'''&&$#%#$$%
- at 30BB2AAXX080903:3:54:154:35#0
-CAGCTGGCAAGAGCAGGGGGTGGGCAGAAAGCACCCGGTGGACTCAGGGCTGGAGGGGAGGAGGCGAGTATGCCTC
-+
-61777788888888&88888/8887*70.,55022111&00--*,&,(,+&*+&*)))#('#((&'#$""$&###"
- at 30BB2AAXX080903:3:57:33:538#0
-ACAGCAGCAGCAGCGCGTCTCCTTCAGGTGGGAGCAGCTCTTTGAGGCCACCTGATTTCTGGTGTGCACAGATNCA
-+
-67777788888888888888888877771555,431221/-00.'---,,++**(*)*))))()(('$%&$##"##
- at 30BB2AAXX080903:3:45:710:1725#0
-CGGCAATGTACATGAGGTCGTTGGCAATGCCGGACAGGTCAGGCAGGTAGGATGGAACATCAATCTCAGGGGGATC
-+
-6777778888888888888888887777655543322211///.---+-,+)+**)*())()))'('%&$"""""#
- at 30BB2AAXX080903:3:41:967:408#0
-TACATGAGGTCGTTGGCAATGCCGGGCAGGTCAGGCAGGTAGGATGGAACATCAATCTCAGGCACCTGGCCCAGTT
-+
-677777888888888888888888777765554432221/0//.---,,-++****)))))))((('%&$#$"%""
- at 30BB2AAXX080903:3:56:134:794#0
-CTCCAGTCAAGGCTGTTGGGCCCCTTATTCCACCCATGGGAGGTGCACACAAGGTCTAGAGCGGGAGNGNCTTCCA
-+
-6777775888888888888888887667235(0430/010,//+--+,++))++#)%&''#'((##'"%"$""###
- at 30BB2AAXX080903:3:42:876:490#0
-AAAGCTCAAGGTACAGGTGGGCAGCAGGGCAGAGACTGGGCAGCCTCAGAGGCACGGGGAAATGGAGGGCGGGCCC
-+
-67777788888888888888888877776555443222100//..---,,,++***)*)((()((''$%#"""##"
- at 30BB2AAXX080903:3:41:363:1455#0
-AGGGCAGAGACTGGGCAGCCTCAGAGGCACGGGGAAATGGAGGGACTGCCCAGTAGATCGGAAGAGCNGCGCACAA
-+
-6777278888888888888888887777655544+212101//.-'--,*+++))*)))))((('(#"'$#$##""
- at 30BB2AAXX080903:3:59:656:332#0
-TGCCCCATCAGTAGCCATGTGTGCATGTGTAAATACCATCCTCTGTGTGCCCTGGAGGCTGTCCTTCAGATAACNA
-+
-67777788888888888888888877776555443222100//...-,,,,,+**)*)*))&'(&('%&$$#"#"#
- at 30BB2AAXX080903:3:35:1540:622#0
-GGGTTGTGAAGTGCTTGCCCCATCAGTAGCCATGTGTGCATGTGTAAATACCATCCTCTGTGTAGATNCTACNACN
-+
-67777788888888888888888877776555443222100//..---,,,++****))))((('('"%%$$"$$"
- at 30BB2AAXX080903:3:45:1395:34#0
-CCTGCTGTTCCCCAGATGTGCCAAGTGCATTCTTGTGTGCTTGCGTCTCATGGAACGCCATTTCCCCGATCTCCCA
-+
-6777778888888888882888887777+55544322210///...--,,++*+**)))*('(((''"""##"##"
- at 30BB2AAXX080903:3:40:861:1811#0
-CCCTTGCCCACAGGGCCACAATCCACGTGCAGAGCAGCCCAAGCACTCACCGGGCACGAGGTATACGCGCACTNCC
-+
-672777+884,88888(8&8+8853677652514%+2-.%&*--,(,,,+*))*))&)(#&&&('''""%"#"""#
- at 30BB2AAXX080903:3:36:1322:1307#0
-GTGCTCTTCTTTTTTCTTTCTGAATTGTGGCCACCTTCATACCAGTCTGTCATGGAACACTTAAGCCTCACGCACN
-+
-67777788888888888888888877776555443222100//..---,,++*++)*))())((('%$&##"#"#"
- at 30BB2AAXX080903:3:55:343:357#0
-AGGTGCATAAGCTCTGCATTCGAGGTCCACAGGGGCAGTGGGAGGGAACTGAGACTGGGGAGGGACAGTGTATANG
-+
-67777788888888888888888877776555443222&00//..-,--,,+++**))))'((('''%$$%""#""
- at 30BB2AAXX080903:3:36:209:1470#0
-CGAAATGTACAGCATTTCTCTTTGTAACAGGATTATTAGCCTGCTGTGCCCGGGGAAAACATGCAGCACTCGACGN
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))((('('$%$$#"#""
- at 30BB2AAXX080903:3:4:536:1872#0
-AGACACAGTTCAGGTGAAGAAAGACCTGGAAACTTCTTTTAACTATAAGCTCAGTAGGGGCTAAAAGCNACTCNAN
-+
-67777788888888/8828884887877:-43442021100.0.---+,,,+++)))()(#((&('&"""%&$"""
- at 30BB2AAXX080903:3:3:1599:1484#0
-CCGGCCTCTGGCCTCACTGGCGTCTGTGCCCAGTGACGCAGGCAGGGGAGCTCCCGGCAAAATAACACNCCCANAN
-+
-67777788888888888/8888/8277165534-23+/,-///+,-$,'++$(*'('&&''#%&#%&""$#$""""
- at 30BB2AAXX080903:3:39:332:978#0
-GAAAAGCCCACTAGCTTGTCCAGTGCCACAGGAGGGGCAAGTGGAGGAGGAGAGGTGGCGGGGCTCCCCCCTCATC
-+
-67777788888888888888888877776555443221100//..--,,,+,++*))*&))#(%'&'$%##"%""#
- at 30BB2AAXX080903:3:57:192:729#0
-GAAGGGAAGGGAGAGCCAGTGACGACTGGCAGTGGAGTGGGGAGCACCGCCCCCTCTCCTCCTCCACCTGCCACTC
-+
-6777778888888888888888887777655534332-100//.-.--,,,%++'*(*)&)('((&'$%&#%##"#
- at 30BB2AAXX080903:3:38:979:972#0
-GGAACGAGGATGAAGGGAAGGGAGAGCCAGTGACGACTGGCAGTGGAGTGGGGAGCACCGCCACCTCACCTCCTTC
-+
-67777788888888888888888877776555443222100//&/-+-%,+++&*()(()#((''#'$$&&&%##$
- at 30BB2AAXX080903:3:45:9:1807#0
-GCTTGCAAGTCCCCTGTCTGCAGCCTCACCCCTGTCGCATCCTGACTACAATAACAGCTTCTGGGTGTNCACGCAA
-+
-6777778888888888888888887777655544322210///..---,,++**+**)))()(('''$"&"$""""
- at 30BB2AAXX080903:3:58:592:1403#0
-TCTCGGGGCATGAGAGGCTGACTTTCCGTGAGCCTGTGGGCCAGGCCTCTTTGAATGGGGCTGAGGGAGCTCCTAC
-+
-67777788888888888888888877776555443222100//..---,,,+++**)))))((((''&&$&###"#
- at 30BB2AAXX080903:3:45:1313:1067#0
-CCAGGGCAACCTGCATATCCACCTCCCTACCCTGCCCCCCTCTTCCAGGAGTCTGCCCTATGTGGAGCAGTGCGGG
-+
-67777788888888888888888877776555443222100//...,,,++,++**)))(()(('&'$""""##""
- at 30BB2AAXX080903:3:51:498:1610#0
-AAGTGCTGGACATGGGGTGGCCACAATCTGGAGCTGATGGCTCTTAAAGACCTGCATCCTCTTCCCTCGGTGTGAC
-+
-67777788888888888888138877776552443222100//+.---,,+)%+**)'))((((''&%"#$""""#
- at 30BB2AAXX080903:3:33:954:1706#0
-CACATACTTCCCACTGGGGTCTACCATGTGAGGCATGGTGTGGGATCCTGGGAAGGAGACCAAGCCTNCTCTCTNN
-+
-67777788888888888888888877776555443222100//..---,,++++***)))()(((&'"%&#"""""
- at 30BB2AAXX080903:3:53:1561:274#0
-ACATACTTCCCACTGGGGTCTACCATGTGAGGCATGGTGTGGGATCCTGGGAAGGAGACCAAGCCTCACACCCGCT
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))(((('&$$%&$"$"#
- at 30BB2AAXX080903:3:2:39:582#0
-ATGGGTTCCCCAGGACCGGGATTCCCCAAGGGGGCTGCTCCGAGAGGGTGGGGTGATGGGGTTGCACANACANNCA
-+
-67777788888888888888888/77%56552442.2010.%..--,-$,$+%)*&))))#&(('%'"""#$""#"
- at 30BB2AAXX080903:3:38:1749:1701#0
-TGGGATTGCCCAGGACAGGGATGGCCCTCTCATCAGGTGGGGGGGAGTGGCAGCACCCACCTGCTGTATGGTGANN
-+
-6777778888888888888888887017675641122$100//(.,-*,,(*+&%&'('&'#(&''#""%&###""
- at 30BB2AAXX080903:3:45:134:925#0
-CAACACCACGCTGCCCTGTGGTGGGGGCGTGCCGGTGGTCGTGGGGGGCTCTGACGCTCCGGCTCCGATCGGGAGC
-+
-677777888888888888888888777765554431221/0-/..'--&++,+)&*('&(()''&''""$$"""#"
- at 30BB2AAXX080903:3:58:485:1940#0
-GCTGTGTTGTCTCAACACCACGCTGCCCTGTGGTGGGGGCGTGCCGGTGGTCGTGGGGGGCTCTGGCGCTCGCCTN
-+
-67777788888888888888888877776555443222110-/-.--,,,**+)*+)&))'(''(##&%$%"###"
- at 30BB2AAXX080903:3:47:1141:1513#0
-AGAGCCACCCACGACCACCGGCACCCACCCACCACAGGGCAGCGTGGTGTTGAGACAACACAGCCCTCCTCCCTAC
-+
-6777778888888888888888887777655544+222100/...--,,,+++****)*))))('''$""##""##
- at 30BB2AAXX080903:3:51:1206:1287#0
-TATGTGCATAGTTGGGATGAGGGCTGTGTTGTCTCAACACCACGCTGCCCTGTGGTGGGGGCGTGCCGGGTGGTGT
-+
-67777788888888888888888877776555443222100/0..---,-+++***)*)))'('(&%$#"""""#"
- at 30BB2AAXX080903:3:43:880:1474#0
-TACAGTGGGGCCCTTGGTTGCAACACAAGTAGGTAGGGATGGATGAGTGTGGCATAGATCGGAAGAGCGCTGAGCA
-+
-67777388888888888488888877776-554/2222000///.--+,++++*+*)*)())(((''%&%#$""#"
- at 30BB2AAXX080903:3:34:678:962#0
-TACCAACTGTAAGTCACCCTATCTTCATACTTTGTCTTTATGTAAACCTAAATTAGATCTGTAGATCNCACAGCNN
-+
-67777788888888888888888877776555443222100//./---,,,+++**)*))))(((('"%#%$"#""
- at 30BB2AAXX080903:3:46:1623:647#0
-GCACAAAGGGGTTGATTAGCAATTATCTTTTGAAAAGCCTGTAGTTGCTCATCTGAAAGATCGGAAGAGTGGCACA
-+
-67777788888888888888888877776555443221100./.---,,,++++**)))))(((('&$$#""#"#"
- at 30BB2AAXX080903:3:59:308:1040#0
-AACAAAATCCCCTGACTTCTCAACTAGTTAATGTCTGCCCACAAAAGAAGAGGGGGTCCGTCGCCATTTCATCNNA
-+
-67777788888888$88888888877776)$54-321'000.*,--,,+,+,+)**($))#'#%###&"#&%%""%
- at 30BB2AAXX080903:3:60:570:1889#0
-GGAGAGACCCTGGAGCGGGGTGTGGGAGAACGGTCTGGAGGAAGGGCTCCGAGCACTTCAGATCGGAAGATNCANN
-+
-6777178888888888888818887747/565422232/00.+---,,++,*+)*)'))()(''((&%##%"##""
- at 30BB2AAXX080903:3:51:760:1891#0
-CGAGCTCCCGACGTGCACACGGCTCCCATGCGTTGTCTTCCGAGCGTCAGGCCGCCCCTACCCGTGCGTCTGTCTC
-+
-677777888888888888888888777765554432121////.--,+,,,*+**)(*)(((((''#"##""""#$
- at 30BB2AAXX080903:3:47:151:1547#0
-AGGAATGTCCCATGCACAAGGTGCACCGATGCCTGGGTAAAGCAGCCTGTCACCGACGGATGCACGACTGGTCGAG
-+
-(-/),7.'+0.+8/$*+&$.,#0$-#1&$',''$'.'%(-)')*%'&+)$**#$&%#)###%'#'&%%"#""##""
- at 30BB2AAXX080903:3:4:535:2007#0
-TAAGCTGTCTGGTCTGTCTGGTGAAGCTTCAAATGCTGTTCATTTCCGATAAGGGAGATCGGAAGAGCNTCACNCN
-+
-677777888888888888888485777065504132220/0-/.-.,,+-+(++**)()()((&('&$"$#"$"#"
- at 30BB2AAXX080903:3:59:969:575#0
-TGTGATGTTCTCTCCCCCATGTCCAAGCGTTCTCATTGTTCAGTTCCCACCTGTGAGTGAGAACATGCAGTGCTCA
-+
-67777788888888888888888877776555443222100//..----,+,+***)))))(()((&'&&&"$"#$
- at 30BB2AAXX080903:3:52:1065:1496#0
-CTTTCTCATGCCAAGATGAGGCTCCCCCAGATTTGCTCAGACTTACCTATAGTCAGCAGCATCGGGGGTGGGCATC
-+
-67777788888888888888888877776555443222100//..,,-,,-++*+*)))(()(((''&"""$#"""
- at 30BB2AAXX080903:3:49:178:481#0
-AGGTGCTGCCCCGAGAAGGATGCATTTATGGCTTCGTGAAGTCTTTCCTGACCCCCGATGCTGCTGAACATGCCTC
-+
-677177888888888888888888777765503432221001/.,---,-,+*****)*)((()(('"$""##"""
- at 30BB2AAXX080903:3:1:248:536#0
-CCTGGCTAGCAGGACTCAGCCCCTCCCCTTCAACTTTACTCAGGACCTGGTCTCCCCTCCTTAAGGTCNCANACAC
-+
-6777778888888888/88854857817656+130101/0..//-+*,-,+*+())()(('((&'''&"$#"####
- at 30BB2AAXX080903:3:49:511:813#0
-CAGGCTCTGGGCTGTGTTACTGGACTAACACTAACACCGTCCCCTTGCACTTCTGAGGGGTCCCTGGAACTCCCCC
-+
-67777788888888888888888877776555443222100/....--,,++++**)**)))(((('$"%$"$#$%
- at 30BB2AAXX080903:3:37:129:1079#0
-CTAAACCCGATTTAGATGAGATTCGGGACTGTGAGCATGAAGGGATCTCAAGAGGGGTGAATGTGTTCTGCACTCN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()'('"$&&&#"#"
- at 30BB2AAXX080903:3:2:436:275#0
-CTCTGCCATTCACACCCTTGAATAATCCCCTTCTCTGGTTGTAAGCAGAACCTGTGGCTTGCAGATCCNTGTCCTC
-+
-67777788888888888888888877776555443222100//...---,,++***))))('((('#$"#$%#$"#
- at 30BB2AAXX080903:3:40:439:201#0
-GCTGGCTGACACACTGATGGCACCTTACAGAGGACCAGTTAGGCTGTGCCAACACCTGACCTGAGATCGTGAGGTC
-+
-677777888838.8888488888877776525543021.0,//-+-,--,+,+&)*)(&'(()((''&&#"$$""#
- at 30BB2AAXX080903:3:45:826:118#0
-GTCAGGGCAGTGTGCTAGGAAGTGAAGGCAGGGAGATGCAGGAGGTGTGGATTGGTGGGGCGTCACAGGGTGGACG
-+
-67777788888888888888888877776555443232110//..&-#,,*++*&*()))()&('&''"$""###"
- at 30BB2AAXX080903:3:37:876:1114#0
-GACGCCCCAACAATCCACACCTCCTGCATCTCCCTGCCTTCACTTCCTAGCACACTGCCCTGACTCCAGAGACCAN
-+
-67777788888888888888888877776555443222001//-/.-,,,+***+)*)))())((%($#%""##""
- at 30BB2AAXX080903:3:33:351:917#0
-CAGCGTGGCTGCGGCAGAGGGAGTCAGGGCAGTGTGCTAGGAAGTGAAGGCAGGGAGATGCAGGAGGNATCTCTNN
-+
-67777788888888888888888878776555443222000./.+--,,,+++***))()'(((''&"""$###""
- at 30BB2AAXX080903:3:42:311:1944#0
-AGGGTGTGCAGTAGTGACACTGGGAAACTGATCATTTTGATTTCTGCTTTCTAGTAGAATCAGCTCCCAGAGACCA
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)*))(((((('"&%%%""""
- at 30BB2AAXX080903:3:42:743:504#0
-ATTCAACCCAGCAATTCCATTACTGGGTATATACCCAGAAGAATATAAATCGTTCTACCATAAAGACGTCAACACA
-+
-67777788888888888888888877716555443222100//..---,,+++++***))))((((''"%&%&%$$
- at 30BB2AAXX080903:3:60:747:2024#0
-TATTGAATTCATGCTCAGAGCAGTGAGAAAAGAGTGTATTCAAATAAGTTGAAAGAGAAAACATTTAGTGCNCANN
-+
-67777788888888888888888877776555442222100//..---,,++++**)**))(((((''&%#"#"""
- at 30BB2AAXX080903:3:54:582:1338#0
-GAGGGCAGGAGAGCGAGACCATCCTGGCTAACACGGGGAAACACCGTCCACACTATTAATATAAAATCTACACGTC
-+
-67777788888888888888888877776555443222.00./+,--)'-+,+)*%(*)()%(''(%%"#$%##$"
- at 30BB2AAXX080903:3:52:1090:647#0
-CAAAATGTGTGTTTCCTTTGTTGGAGGCATCCTGGATAGTCAGGATAATCCATGCTGTATCTCAGTTTGGTCTCTT
-+
-67777788888888888888888877776555443222100//..-.-,,+++***)*)))((((('&""&#%"#"
- at 30BB2AAXX080903:3:8:791:557#0
-ATGAACGTCTCCATGGAAAGACTGGGAAAATGGATTGCAGGTTCTAGCAGGATGTCATAATAAATGGNTCAACANN
-+
-6777778888888888888888887777655544322/100/0,/--,,,,++**)))*)))(((('"$$$%%$""
- at 30BB2AAXX080903:3:37:756:1698#0
-CATCCAGGAAAGTAGGAGGTTAGATCTGTGGATCAGGAACTCAAGAAATAGTACCAGGGTAGATCGGAAGAGTCCN
-+
-67777788888888888888888877776555443222100/0...--,-+++***))))*()((''""$"""##"
- at 30BB2AAXX080903:3:35:573:1176#0
-AGGGAGTTGGCCAGCCAGATACAGAACATGTTGTGATTTGAAGGCTGTTTCCTGAAGATCGGAAGAGNGCACTCAN
-+
-67777788888888888888888877776555443222100//..---,,+,+***)**))('(''&""%#""#$"
- at 30BB2AAXX080903:3:59:1019:1847#0
-CATTTCAATACGCTGTTCGGCCTGCTACCCCAGTTTCCCACTTAGAACAATGGCACACAGGACAGGAGCACACACT
-+
-67777788888888888888888877776552443220200//..--,--+++*****))))((((''&%$#$%$#
- at 30BB2AAXX080903:3:36:319:123#0
-AGTAGTTGGGACTACAGGCATGCACCACCATGCCCAGCTAATTTTTGTTATTTTTAGTAAGATCGGANCACTATAN
-+
-6777778888888888888888887777655544322200///..---,-+,+***)*)))((('('""######"
- at 30BB2AAXX080903:3:35:65:319#0
-AAGGCATCTCTGAAAGCTGTTTCCTACATGTGCCTATAATGATCTACCCCAAACCAACACGTGAATCNCGTCTCNN
-+
-67777788888888888888888877776555443222100//..---,,,+++**))))))(((('""$"###""
- at 30BB2AAXX080903:3:51:356:1137#0
-CCTTGTTATAAGTATTATGCTGGCAACAATTGTCGAGTCCTCCTCCTCACTCTTCTGGGCTAATTTGTTGCACTGC
-+
-6777778888888888888888887777655534322-000//...,,+,++)**))*))(''((('$""##$"##
- at 30BB2AAXX080903:3:49:563:1296#0
-AGGCCTCCTAGCACACAAGCTCATATCTTAACTACTTTAATACGTTGCGCGATGGGAGCTTACAGGTCGTCCTTCA
-+
-6777178888888888888888887777655044-222100//..,-,+,+++***#(*#)(#'(('%$######"
- at 30BB2AAXX080903:3:34:1596:1443#0
-TAATACGTTGCTCGATGGGATCTTACAGGTCTTCATTCACCCCTTTCCTGCTCACACAACCACAACCNCCCCCANN
-+
-67777788888888888888888872776+554)322.10,/.&.-(-,,++*****)*'()'(((%"$%#&$%""
- at 30BB2AAXX080903:3:58:679:475#0
-TATTTGGTTTTCTGTTTCAGTGTTAATTCACTTAGGATAATGGCCTCCAACTGCATTCATGCTGATGCATATGCTA
-+
-67777788888888888888888877776555443222100//...--,,+++****))))((&((&'&##$##"#
- at 30BB2AAXX080903:3:49:1559:181#0
-ACCCCCTGATCCCCAACAAGCAGAGCCCTAACCTCACACCAGCAGTACAGCTGCCCCATCCCCCAGGCTGCAACAT
-+
-67777788888888888888888877776555443222100//..---,-,++****))))()('(&%""#""###
- at 30BB2AAXX080903:3:60:373:1638#0
-CATAGATAATAGATGTTTTCAGATTCTGGTACATTTTGGCTGCATTTGTTTGTTTCATGAGATCGGAACGCNAGNN
-+
-67777788888888888888888877776555443222100/.,.---,,++***))*)))(('('#'$$$"#"""
- at 30BB2AAXX080903:3:44:595:1727#0
-TTTGCTGGCCAACACGAGCACTCTGGGTGCTGAGGGCGAGAGGTGGGAGGTCAGAGGAGATAGATCGGACGCGCGC
-+
-67777788888888888888888877776555443212000///.--,,,+*+***)))()(()(''&"#%"&#$"
- at 30BB2AAXX080903:3:40:52:2000#0
-CTCGCCCTCTGCACCCAGAGTGCTCGTGACGGCCAGCAGAGCCAGCCCCCATCTCCTCTGACCTCCCATGCATGCC
-+
-67777788888888888888888877776355-/32/2010*+--',+*++)#*()(&)((%&'%&'$""#"""##
- at 30BB2AAXX080903:3:41:969:902#0
-CCTTGGGACCCACATTGCTACTCCTCTGCCTGTAGGGGGACCCACAGGTATCCACACAGCTCACTCCTGTCGTACA
-+
-677777888888888888888888777705'521322$001/),---#-+,,+***))*#%''('#'&%#$$%"$#
- at 30BB2AAXX080903:3:42:960:893#0
-GCAGGGACTGTGCTGGTCTTACCTGAGCAGACCTGCATGTCTGCGGTCAACTGGGATGGCAGAGACAGAGTGTGTG
-+
-6777778888888888888888887777655544322212&//...,-,,,+++*&)))((('(((''"&#&$#""
- at 30BB2AAXX080903:3:4:1499:1032#0
-GTAGCTTTTTTGTCTTTGTGTAATAGCTATCTTATTTAGGAACCAGATGGGAAGCAGAGATCGGAAGCNGTCTNCN
-+
-67777788888888888888888877776555443222100//.--.-,,+++***)*))(((((('$""##""#"
- at 30BB2AAXX080903:3:35:220:1888#0
-CATGTTGCTGTTGTTGTTATTGATATTGTTGTTTCTGATGGATAGAGATCTAGGCCTGACACTCCAANCCCTCTGN
-+
-6777778888888888882888881777655'44522010///..'--,,+,+*)*)))()'(((''""#$"##""
- at 30BB2AAXX080903:3:44:1434:1305#0
-AGACGTGCTCATGGTCTGCTTTGCTGCTCAGCATGGCTGGGAGGCACAGTTGAAGATCATGCATCCTGCGGGACGG
-+
-67777788888888888888888877776555443212100-/.,-$),%,+**+**'*')#(&((%&&"&""###
- at 30BB2AAXX080903:3:39:101:423#0
-TAGTCAGGATGGGCTGGATTATGCTGTGTTAACAGCCATTCTCTAAATCTCTGTGGCTCAACAGGGATCTCTGCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$$""#$$##
- at 30BB2AAXX080903:3:57:854:311#0
-CATCATTTTTCTCCTCGCTGGAAGTCTGAGGGGCAGTTCACTTATCTCCTCCCCTCCCCTACTCCTCACNCCACAC
-+
-6777778888888888+8888888777765554432021000/..---,,+++***)*)))(((((&'$"%%%##"
- at 30BB2AAXX080903:3:36:388:946#0
-TTTGAGACGGAATCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGTGCGATCTCGGCTCCCTGCAACTCGCCACTN
-+
-67777788888888888888888877774555443222100/...--,,,++****))))('((&(($%"##"##"
- at 30BB2AAXX080903:3:46:556:592#0
-ACCCATGTTGCTGAAGTCATTTCTCCAATTCATGATCCATGAAACTACTTCAGCAGTGAAAATGGCAGTCCTCAGG
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))((('('$"%#"#"$$
- at 30BB2AAXX080903:3:48:1590:122#0
-TTTGATAGTGACTAGCTCTGTCACCTAGGCTAGAGTGCAGCGGTGCAAACACGACTCACTGCAGCCCTGCCGACCT
-+
-677777888888888888'88886717763.544.'3020.//...,,,,,)))%)('#()(((''#"""$"#"##
- at 30BB2AAXX080903:3:43:386:578#0
-ACTGGTGTGAGATGGTATCTCATTATGGTTTTGATTTGCATTTCTCTAATGATCAGTGATGTTGAACTTTTTTTTT
-+
-677777888888888888888888777765554132221/0///.----,+,+****))))((((''&&%&%%%$$
- at 30BB2AAXX080903:3:46:1757:533#0
-AAGGGAGGCAGTTAGGGAAGCCTTCCCTGAGTTAGTGCCACTTAACCTGAATTATGATAGATGAGATCGACAGGGT
-+
-6777778888888888888888$827786/50443+2'11,//*..-,,,,+*+**)*))))((''%%""#"""""
- at 30BB2AAXX080903:3:46:363:547#0
-GTTCAGCCCTTACTGCATATTCCAGGCACTATTCTGACTGTGGCAGGAGGGAACAAACAGGCAAGGTATCTTCTCC
-+
-67777788888888888888888877776555443222100//..--&,&+&+*+*)()()#'#(''$"#""###$
- at 30BB2AAXX080903:3:33:1000:529#0
-GAAGTGAAATGACATCAAGAGACCTATCAAGACCTGTATCCAGGAAAAGGTAAATCTGAGCTGAAATNGCCCACNN
-+
-67777788888888888888888877776555443222100//.----,,(++***)*))#')((('""#%$$#""
- at 30BB2AAXX080903:3:55:1518:1008#0
-CAAGACTGCAGCATTTCAGATAAGCCACCCTCACAAGAACACTTGCCTAGCAATGGCTGTTTCTGCCACGACGTCA
-+
-67777788888888888888888877776555443222100//..---,,+++****))()(()('''&"$%%$$$
- at 30BB2AAXX080903:3:40:8:1726#0
-CAATGAGAAAAGGAATGCTGATGTTCTCTAGAAGATAGAAAAGGCCAGGATATGGATTCTACCANANATATGCGTT
-+
-6777778.88888888888888887777655544312200///.,,,--*+++***()()'''(#(#""""##"""
- at 30BB2AAXX080903:3:52:1007:530#0
-TGAGGATATTTTACTGCAGTTCGAGTTGTAATAATAGCTCTGTTTAAGATCCGTCAGTCACTTGAATCACGTCTAG
-+
-67777788888888888888888877776555443222100//..---,,++++*+))))))(((&'%%$"##%$%
- at 30BB2AAXX080903:3:50:174:1040#0
-ATGCTGTACGAAGTACATGTTGACATGTGAGCATATAATAAATGGGCTGGAGGCCAGAGGATAGATCGCGACAGCC
-+
-67777788888888888888888877776555443222100//..--,,,+++*++)))))(((((%$$"#%#"""
- at 30BB2AAXX080903:3:56:176:432#0
-CTAGCAGGGCGTGGTGGCTCATGCCTGTAATCTCAGCACTGTGGGAGGCCGAGGTGGGTCGACTACCAGAGTCACC
-+
-67777788888888.8888888887773655544/222110./..,----+*++#*)*&()()('''"&#""#"#"
- at 30BB2AAXX080903:3:38:1047:1029#0
-GTCGACCCACCTCGGCCTCCCACAGTGCTGAGATTACAGGCATGAGCCACCACGCCCTGCTAGGAGTCTCTTCATA
-+
-6777778888888888888888882776655543322210//..--,,,,,,**#))&))((((('&$%"""#$$$
- at 30BB2AAXX080903:3:43:1699:645#0
-TAGCCAGGTGTGGTGGCACACGCCTGTAGTGGTGGGGCATGCCTATAGTCCCAGCTACTCAAGAGGCTGGGGGTCT
-+
-67777788888888888888888877776655443'2%,&0//,,,-,',,,'**(()(('((('('"%#%"$"""
- at 30BB2AAXX080903:3:59:185:201#0
-TCCCTGCAGCCACACGAGGCCCAGCAACCTGCCAGTCACTCAGTGGCCTCCAACCAGACAAAACACCGTGCACNNA
-+
-6777778288888888888888.8781765554422221*/%/&.--,,,+&*)*%((#(''('(%&%$%$$#""#
- at 30BB2AAXX080903:3:48:1203:1580#0
-GCAGCCCAAACACTCCAGAGCTCGGATACCAAGGAGCAGCTTCTGTGGGGCAGAACGGCTGCACACAGGCNATNTC
-+
-67777788888888888888888877776555443222100//..---,,+,+**))*(*)(('(''""$"""""#
- at 30BB2AAXX080903:3:36:432:1108#0
-GGGCAGCCCTGCTGCCGCCCACGTGAGCTGCTCATTCCCAGCACATGGCCAGCGAGGTCATAGCGATGTCCTCACN
-+
-67777788888888888888888877776555443222100//..---,+,,+***)())(()(''#"&%#"###"
- at 30BB2AAXX080903:3:43:1392:1284#0
-CTGTCCTCCTCCTACACATACTTGGATGCTTCCTCCTCAACCTTGGCACCCACCTCCTTCTTACTGGGCCCAGGAC
-+
-67777788888888888888888877776555443322100//-.,--,-+++**+**)))((((('&&$&%$#""
- at 30BB2AAXX080903:3:55:952:1813#0
-GGAGGAGCCTCAGCCTCGCAGGCTGCTCCGTGGGACTGATGACTGCATGATCTTCTGGGCACCTCACCGGTCGCAC
-+
-67777788888888888888888877776505443222110/.-..,-,,+*++**))*)('((((%"$$&&%#$"
- at 30BB2AAXX080903:3:2:1543:1260#0
-GCAGGGCAGCCAGGGTTGTGCCAGAGCCTGAGCAGGTGGAGGGGGGGTGAGGCGGGGCTGGGGGGCATNCGACTCG
-+
-2-+7573888,1818&)/&.*)*)&'+&*)(,$&.*%#+#,*#(,**#$$%'%$&(&&##&###%%#""$#"%"#"
- at 30BB2AAXX080903:3:58:1209:655#0
-GTCTCGAAGGCCTGCACGGGCCCAGCCTCGGCCTCGGCCTCACAGCGGACTCTCCACGCCCAGCTAGCTCTCCAAC
-+
-67777788888888888888888877776555443222100//...--,,+++******))(((((''&&%#%"$%
- at 30BB2AAXX080903:3:3:1253:995#0
-TGGGAGGTCGCGGTGGGGCGAGAGCTGGGCCTGGAGAATCCCCTGGGAGGCAACAGCGGGGTATGGGANCGTCNCT
-+
-6777778888888888,8838818(77766.'4402.'0.-./+,.-+,-(*')**')(''&##'##""#%$""#"
- at 30BB2AAXX080903:3:33:317:1713#0
-TCCCACGCTGAGAGAGGTCAGCCTGAGCCCTTGCCTCACACCAGCCCCTCCCACGCGGACAGAGGTCNCTACACNN
-+
-6777778888888888888888887777655544222210/0/.-.,-,,+,+*+***)))()((''"$##%$#""
- at 30BB2AAXX080903:3:4:1136:1040#0
-CCTCCCACGCGGACAGAGGTCAGCGTGAGCCCCTTGCCTCACACCGGCCCCTCCCACGCTGAGAGAGTNACCTNTN
-+
-677777888888888888888888-/7,335243.0.,1./../,+-+,)+***')((('&'(''&'""#&&%"""
- at 30BB2AAXX080903:3:3:1096:557#0
-CCCCTCCCACGCTGAGAGAGGTCAGCCCGAGCCCCTTGCCTCACACCGGCCCCTCCCACGCTGAGAGCNCGCTNCC
-+
-6/2774888888882888.88.5///+/603(1$/..1&01*,+++*++&%&'(#'&'&''#(#'##$"%##""##
- at 30BB2AAXX080903:3:41:865:161#0
-GGCTCGGGCTGACCTCTGTCCGCGTGGGAGGGGCCGGTGTGAGGCAAGGGGATCGGGCTGACCTGCATCCGGATCC
-+
-647(778888888888888888884707655148222-1%0-/.*%+-,,)$%'*)*)((#&('&'#%$"&$%#$#
- at 30BB2AAXX080903:3:57:26:621#0
-TCCTCCCACGCTGAGAGAGGTCAGTGTGAGCCCTTGCCTCACACCGGCCCCTCCCACGCGGACAGAGGTTCNACAC
-+
-6777778888888888888888289777555541132000,..--,-,+,+%+*)&()(('&'&'#&$"#"""$$"
- at 30BB2AAXX080903:3:3:793:2004#0
-TGTCCGCGTGGGAGGGGCCGGTGTGAGGCAAGGGCTCACACTGACCTCTCTCAGCAGATCGGAAGAGCNTGTNNCG
-+
-67777788888888888808808,71153/.232/.0-0..)-*,,,+)+()'())')%('(#''%'$""#"""#"
- at 30BB2AAXX080903:3:49:1451:1705#0
-GCGTGCGGCCCAGCTCCTCCCTCACGGTGGCCTGTTGATGCCCAACTCATGAGATCGGAAGGGCGGGCGCAGGCCT
-+
-6777778888888888888*8688771-650533%22+00)#.(,-),+++*+)*%))&()()#((%$"#"""##"
- at 30BB2AAXX080903:3:8:1007:1602#0
-CCAGGAGATGGGTAGGCACTGAGTCCAAAGAGGTTGTTGAGAGGCAGGAATCGGGCCTGGAGACCCANACTAGANN
-+
-677777888888888888888788777765454,32,21/0//.--,,),$)))*((&()%('&'''"%$""""""
- at 30BB2AAXX080903:3:52:1492:1419#0
-TGGTGGCCTATGAAGGCCCAAAATCTCCTCAAGTTGACCTGTCCAGGCCCAGCTCCTGCCTCCTGTCCACCTCTAC
-+
-67777788888888888888888877776555443220000//..--,,++,+**))*)())(((('$"##$##"#
- at 30BB2AAXX080903:3:51:1475:1741#0
-CATGACTCTCAATGGCCTATTTAGGCCCATACCCTACGTCACGGCAGCCTCCGCAGATGAGGCAGATGTCATNGGA
-+
-677777888888888888888888777765551432221/0//...-'+++*+)(*(()&()#('%'""#""""""
- at 30BB2AAXX080903:3:57:1499:235#0
-GAATGTGAGCAAAGGGGAGTGGCTGTAAATACAGACGAAGCTTCCCTCACTCCCTCACTCGACACCGCACTCCTCC
-+
-6777778888888888888888887*77655244302210/*/-.-+-,,,++*(*))')((((((''$%"#$"#"
- at 30BB2AAXX080903:3:60:348:1822#0
-TCATGGGATACCCAGTTAATATCCAGAGCACTGAAGAATCTGGTGTAGAAACTCCATACGTACATTCAGTGNGANN
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))))((((('&%"""#""
- at 30BB2AAXX080903:3:1:1061:1251#0
-TGCTGCTGATCTGACAGGACATGGAGCTCAGGTGGTCATGCAAGCGATGGGAGGGGCTAGAAATACAGNACNCACA
-+
-67777788888888888888888877776555,42220100-/---,,,,,*+*+*())()((((''""##""##"
- at 30BB2AAXX080903:3:35:1669:1510#0
-GTTGGGTGCAATGGCTCACACCTGTAATCCCAGCTACTCAGGAGGCTCAGCTAGGAGGATGGCTTGGNCTCTACAN
-+
-67777788888888888888888877776555443222100//..-.-,,++++*)*)(())'((&%"%"&""##"
- at 30BB2AAXX080903:3:4:369:930#0
-TCAGAGCAAAAGCCAAAGCCCCAGCAATAGCGTCCCAGGGATTACACGATCTGTACCGATCTCAGCGCNTCTANCN
-+
-6777778888888888888)88883777653528121210//+-,---+,*++***(*)&(&((('#%"#""#"#"
- at 30BB2AAXX080903:3:37:1298:800#0
-GAGTTGGAGAACTGGTGTAGAAACTCTGCACACACATTTGGTCAGAAGTCTGTGAGTAGAGAGAAACGTGTCTACN
-+
-67777788888888888888888877776555443222100//..---,,+++*+***)*)(()(('%$&###$$"
- at 30BB2AAXX080903:3:35:194:71#0
-GGAGTTCGAGACCAGCCTGATCAACATGGTGAAACCACGTTTCTACTAAAAATACAAAAATTAACCANCCACATNN
-+
-67777788888888888888888877776555443222100//..---+,,++***)))*)()(('&""##$#"""
- at 30BB2AAXX080903:3:47:112:269#0
-GCAGGTCAGGTGAGGTGGCTCATACCTATAATCCCAGCCCACTGGGAGACTAACGCAGGAAGAGTCCGATCGTGCG
-+
-677777.888.88888888888-877)7655244322210)/..'-,-,++++'*()*)&(((''#%&""$""##"
- at 30BB2AAXX080903:3:51:262:1243#0
-GGAGGCAGGGAGAATTGCTTGAACACAGGAGGTGAGACTGCGATGAGCTGAGATCAGACCACTGCACCATGACAGC
-+
-&777778888-888888881818)7.57155,%322%,./.%#-'-&',-*+(*')(&#)''&(#%#$"#""$"#"
- at 30BB2AAXX080903:3:38:1258:1769#0
-GAGGCAGGGAGAATTGCTTGAACACAGGAGGTGAGCTTGCCATGAGCTGAGATCATACCACTGCACTCCTGCTCAC
-+
-67777788888888888888888877776552443.22./01....(,,+,,+)**)()('#(((('%$%%%"###
- at 30BB2AAXX080903:3:35:180:1763#0
-TGAACCCAGGAGGCAGACATTGCAGTGAGCCAAGATCACGCCACTGCCAGCCTGGATGACAGAGCAANTGTCACTN
-+
-6777778888888888888888887777655544322210///..---,,,,+**))))))()((('""##$##""
- at 30BB2AAXX080903:3:43:101:113#0
-GGAGAATCCGTTTCCTGGCCGTAGAGGTGGACTGCACTCCGCAGCTTGTGCTGCCCGTCGCGAAGGGTTGGAGATC
-+
-677777888888888888888888777765$5143222100//.,----,)++))*)()))(#((%'$$%%""#"#
- at 30BB2AAXX080903:3:42:1289:788#0
-CAGAGTAACATGGCAGGAAGTGAGGGGGAAAGCCGCCCTGGAACTGCGCCTCTCTGCCCCCTGACGTCAGCTCGGA
-+
-67777788888888888888888877776755143321,00./+,---,,+,***+*))))(((((#'$%""%""#
- at 30BB2AAXX080903:3:47:1349:1408#0
-CCCGCAGCTATGGGGCTGAAGGGGAATTACAGCCCAAACACCAGATGCTGGCTCTCAAACCAACACTGTCGCGTCC
-+
-6777778888888888888$880817776555.3/222.(,/.+*,,,+++&'%&&&'('&'&&'%%""#"$""##
- at 30BB2AAXX080903:3:36:1643:70#0
-AAAGTGCGCTGATTGTATCTCCCTGTGGGCACTGAGGGCTCAGTGTGAGTTTGAGAGCCAGCAAGATNATACATNN
-+
-67774788888888888888888&77776552,422220#0-/#.*&++((+*))**')('(''((#""""$#"""
- at 30BB2AAXX080903:3:2:1208:1712#0
-TAAGAGACAAAGACCAACGAGCCACCACAGCCACCAGTCCCAGAACCTGCCAATGCTGGCGAACGCAANACTGACG
-+
-677777888888888888888888777715$544332'1//0.,--,-,-+**)*))))#)(('(&'$""#&#"$"
- at 30BB2AAXX080903:3:41:1032:925#0
-TAGAGATGGGGTTACAACATGTTGCCCGGGCTGGTCTCAAACTACTGACGTCAAGTGATCCACCTGCCTTGGCTTC
-+
-67777788888888888888888877776555443222100//./---,,+++**))**))((((''&&%&%%##$
- at 30BB2AAXX080903:3:49:1300:1010#0
-GATGTTCTACAACATTGCTTAACGCAAGGGGAGACGCTCCTGACTCAGAGTGTTTAATTGCTCACCTACTTAGCTC
-+
-677777888888888888888888777765554422221-0//..-,-,,+++***))))()(((''"$"###"$$
- at 30BB2AAXX080903:3:37:1558:1949#0
-AGAAAAAGAAGTAGGTGAGCAATTAAACACTCTGAGTCAGGAGCGTCTCCCCTTGCGTTAAGCAATGTTGCACCGN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))(()((('"$##"#$""
- at 30BB2AAXX080903:3:41:1521:31#0
-CTCAGTGGTCAGCGGAAACTTGATGATAGCATAGTGGCCAAGCTTGTTTCTCCTGGGGGTGCTCAGATCGGATGCT
-+
-6777738888888888888888887677655544322210///.,--,,,)++)*****#(''(''%"$%"#""#"
- at 30BB2AAXX080903:3:43:1395:698#0
-GAGGTCACACTATGTGTATCCTCCTCAGACTGTCTTCTCCCACTTAGCAATGTGCATGCAAGATTCACTCATGTAG
-+
-67777788888888888888888877776555443222100//..---,,,++*+**))))()(('''&&$&$$#$
- at 30BB2AAXX080903:3:35:1014:2002#0
-AAGGCACATGAACTATACTTCATTATTGGATTCCATTTTATAAAGTTCTTTCCAACAGATCGGAAGANCCGCTCTN
-+
-67777788888888888888888877776555443222100//..---,,+++**+)))))((((''"$$"%##""
- at 30BB2AAXX080903:3:1:1373:706#0
-GTAGGTTAGACACACACATATACTTCCTAGCATTGCTAATGAGGGACAAGATACAATGTGCATTCAGCNCCNAGAC
-+
-67777788888888888888888877776555443222100//..---,,++***+))))()()'((&"%$"""#"
- at 30BB2AAXX080903:3:44:724:1311#0
-TACTACTGTAACAGAAAACATGTAAAGGACATTTGTTTTGATTTATATATCAGTCTGCAAGATCGGAAGAGCGATT
-+
-67777788888888888888888877776555443222100//..---,,,+++***)))))((((''&"#"""""
- at 30BB2AAXX080903:3:59:1599:1766#0
-AGGAAGGGATGCTTTTGTAAAACAAGACTTGTGGAATATAACATGTGAAAGTAAAGCCCATGGCAAACACCCANAC
-+
-677777888888888888888888777765554432221000/..---,,+++***()*))((('(&$$%%%$"$$
- at 30BB2AAXX080903:3:42:1295:1267#0
-AAAGTGAGAAGCAGAGATAAACTAGTCCTAGACAGCTGACTCATGTTGGGGGCAGCCCACAGATCGGAAGCGCCAC
-+
-67777788888888888888888877776555443222100/...---,,+++***))))))()((('#&"$$##$
- at 30BB2AAXX080903:3:47:1062:671#0
-CACCTCGAGGCAGCTTTGTAAGCTTCTGAGCACTTCCCAATTCCGGGTGACTTCAGGCACTGGGAGGCCTTCTGTT
-+
-67777788888888888888888877776555443222100/...--,,,++++****))))(((('$&"$#$"""
- at 30BB2AAXX080903:3:59:968:73#0
-TGAGACTCACCTTGGTTGTGTTCTTTTATTAGTGCCTGTGACGCAGCTTCAGGAGGTCCTGAGAACGTGGTCANNC
-+
-6777778888888888888888887777655544322210///..---,,+++)**))*))((''#'&%$$%$""#
- at 30BB2AAXX080903:3:50:1512:1586#0
-TGTTTTGTGTCAGGGAAAGAATCAACCTGGGAGCCAAGCCCAGGAATCAGGATGACCAAGACATACTCGGCGAGAC
-+
-6777778888888888888888887777655544322201///..--,--++*+**&)))('(&(%'$""#"#""#
- at 30BB2AAXX080903:3:4:1738:1246#0
-ACTGCACAAGGAGGGAACAAACCCATCCAAGGACACTCAAGGACAAATCAAGCAAATGAATTTAAGGCNGCTCNAN
-+
-677777888888888888888888767722554632010-/..---,+,,++)**)(*)(('(('''"""""#"#"
- at 30BB2AAXX080903:3:54:828:1860#0
-AAGTCGGTAGACTAATACCTAATAAAAGCAAAGCTGCCAACAATTGAAATTGCCTAGGCTGCTCTGTGTGTCCCTC
-+
-67777788888888888888888877776555443222100//..-,-,++++***)))))()(('&$$%$"$#"#
- at 30BB2AAXX080903:3:36:644:1261#0
-TGTTAATATCAGATTAGTCAGGATGGGCTGGATTATGCTGTGTTAACAGCCATTCTCTAAATCTCTTGTGTGTGCN
-+
-67777788888888888888888877776555443222100//..-,-,,,,+*+*))))))()(('%&#$$%#$"
- at 30BB2AAXX080903:3:40:537:1113#0
-ATCTGGGTGCCTGGCAGGATGACATGGTGTGAGGCTCAAGCAGCACTGTGGGAATTCAAGCATCTGTTTATTTANA
-+
-67777788888888888888888877776555443222000//.-----,+++***)*))())((''"&#%"$#""
- at 30BB2AAXX080903:3:3:1615:1646#0
-AAGTACAGAGGTTATTCCTAGGGTCTTTAATATTACTGTCCCTTTAGGCAAGATTATCCGTATGATAANATGANCN
-+
-677777888888882888888&887777635544312200./,--,-,,+++)**)())')'((''%&""""#"""
- at 30BB2AAXX080903:3:34:1136:1098#0
-CTCTTGCTGCCCAGGTTGGAATGTAGTGGTGCGATCTTGGCTCACTGCAACATCCACCTCACGGGTTNTACTCTNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(('%'"%%"##"""
- at 30BB2AAXX080903:3:39:961:878#0
-GGTTGTTAACAAGAGCCTGGCACAAACCCCTCTCTCTCGCCACGTGATCTCTGCACATGCCAGCTTACATCGTACA
-+
-67777488818888888888888877776555443212100./.'---,,+,++**)**((()''('"""%"""#"
- at 30BB2AAXX080903:3:43:1170:932#0
-CACAGTTCTGAAGGTGTGCAAGAAGCATGGTGCCACCATTTGCTTCTGGTGAGGGCGTTAGGCTGTTTCAGATGTA
-+
-67777788888888888888888877776565443222100//..---,-+++**))*)))(((''(&$#&"""""
- at 30BB2AAXX080903:3:49:39:584#0
-TTGGAAAGCGGAATTTATCTTCATATAAACAACACTGAGCTAAATCTCAATATTTCAGATCTCTAGACCGCTCAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&$"#"$#"""
- at 30BB2AAXX080903:3:58:786:154#0
-TAGAACTATCCATCAGTGAAATGGATTGCAAATACAAAGAGTAATACCATGTCACTTAAGAATACAATCATTGNNA
-+
-67777788888888888888888877776555443222100././--,,-+++*++**))))((((''&%%""""#
- at 30BB2AAXX080903:3:56:1030:521#0
-GGTCTCAGTTCAAATGTCACTTCCCTGTAAAAGCTTCCTGGCCATCAAGCCTTCTTTACACACTCAGATCTGCGCC
-+
-67777788888888888888888877776555443222100//..---,,+++****)*))(()(('%'"""""#"
- at 30BB2AAXX080903:3:43:1004:671#0
-TGTGGAGGCAAGAGGATCACTTGAGGATCACTTGAGTCCATGAGGTCAAGGCTGCAGTGAGTCATGGTTGCGCCAC
-+
-67777788888888888888888877776555443202120//..,-,,,+**+*)*#*()'(('(#&#%$$%###
- at 30BB2AAXX080903:3:57:960:270#0
-ATTATGGTTTTGATTTGCATTTCTCTAATGATCAGTGATGTTGAACTTTTTTTTTGTATGTTTGTAGATGTTCATA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((''&&'#""##""
- at 30BB2AAXX080903:3:52:1474:218#0
-AAAAACCACCACCATCATTTTGCAAGTGTTACCACTATTGTGTGTTAATATTGTAGAAGTATTCCTAGTGATGTGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&"#"&%$##$
- at 30BB2AAXX080903:3:2:180:685#0
-ATTGTCTCATTTTCAGAACAGAGTACTAAATGGATCATGAACACTATCTGGTATGTCACAGATCGGACNTGTNNCT
-+
-67777788888888888888888877776555443222100//..,-,,,+*+***)*)))(('(('"""$"""""
- at 30BB2AAXX080903:3:56:1111:307#0
-GAGAATGGGACATTTAAGAATAGACTTGAAGGACAGGCAAGAGCAATCTCTATGTTTATATGGGAGATCGGTCATC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((('&"%$%"###"
- at 30BB2AAXX080903:3:51:1412:1403#0
-ACTGAATGCAATAAAGGCTTATCAGATGTGATTAAGGATGCAAACCGAGATGGAGAGATCTTCCTGGATGCTCACN
-+
-67777788888888888888888877776555443222100//..---,,++++**)))()((('''"""#"#"#"
- at 30BB2AAXX080903:3:42:222:1832#0
-CACCATTCCCTGAACAAAATATGCCATCTTCGTTGTTCAGGTCTGTACAGTGCTAGATCGGAAGAGCNGCACACAC
-+
-+77777848888/8.8/83808889777654544322./0/.-..-,),,,+*+*+**)))'((((#"$#"$%"""
- at 30BB2AAXX080903:3:53:1153:1961#0
-TCCTGCCACACTTAATTCACCATTCCCTGAACAAAATATGCCATCTTCGTCGTTCAGGTCTGTACAGGGGTGACCT
-+
-6777778888888888888858887/77655544522210/.0.,--,,,++++**))(()))('(%"$""####"
- at 30BB2AAXX080903:3:2:1594:1461#0
-CATGCATGTGTAGTCCTAGCTACTTGGGAGGTTGAGATGGGAGGATTGCTTGATCTCAGAAGGCCAACNCTACACA
-+
-67777788888888888888888877776556443222100./.-.--,,+,)+**)*)(())('('""#$##$"#
- at 30BB2AAXX080903:3:40:564:69#0
-GGATGCACTTGAGCAGGGGTCCCCAACCCCTGAGCCATGGAGCCGCAAGGAGCCACACAGCAGGAGGTGACCAGAG
-+
-67777788888888888888888877776555543222101/...--*,,*++****)())((('''"&####""#
- at 30BB2AAXX080903:3:35:753:1760#0
-GCAGCTGGCCAGGTGTGGTGGCTCACACTGGTAATCGCAACACTTTGGGAGGCTGAGGCAGGAGGAGNCTCATATN
-+
-6777778888888888888888887777655,48332020////.---,,++*+*))))(*((((%&"%"####""
- at 30BB2AAXX080903:3:49:1196:1797#0
-AGGCCGACGGGAGGCAGAGGCTGGGCCTGGAGGGGCCACCAAGATGCAGGAGCTGGGCCTGGAGAGGCAACCACAC
-+
-6777778888888888888888887/776565443.01000-/.--,,,,++'**)*#())((('('%"""$"#"#
- at 30BB2AAXX080903:3:55:1711:1853#0
-CCCAAATCAGGCTTTTGCCCAACTTCTGTCTACTGTCGGACTCTACAGGTCAGCCTCTGCCTCACACACACCCACA
-+
-6727778888888888888888887/7763550432.2100//.-+--++*+*$')(*)&()((''&$$%%$&%$$
- at 30BB2AAXX080903:3:59:367:1142#0
-GTGAGGCCTGACCTGGGCCTGGGGAGCTTGGCTTGAGGAAGCTGTGGGCCGACCAAGGCCGCCAGGAGGTAACNNA
-+
-677777888888888888888888.77765554430220/0...-----,+*+*))*))))')(((#&%"""#""#
- at 30BB2AAXX080903:3:39:38:1695#0
-TGTTGAGGCAGGGGGTCACGCTGACCTCTGTCCGCGTGGGAGGGGCCGGTGTGAGGCAAGGGGTCACCTACACCAC
-+
-677777888888888888,878882777655334221211,0/.-+---*,'+(**##'(((###%#$""#"##"#
- at 30BB2AAXX080903:3:43:1318:786#0
-AGCAGCCCGAGAGCGATCCTGTTCCTCCCTCACGGTGGCCTGTTGAGCCAGGGGGGCGCCGCGCAGTACGGCCGCG
-+
-0777778880,888884888888861276)5514/0112$)..&..-$')*)++*######'(##&&"#""#$##"
- at 30BB2AAXX080903:3:33:1128:1150#0
-ACCCGGAAGGCTGAGGCAGGAGAATGGCGTGAACCCGGCGGGAAGAGGTTGCAGTGAGCCAAGATTGNGCCCCCNN
-+
-67777788888888888888888877776555483222100//..---)-+***+**))(()(('('""##$##""
- at 30BB2AAXX080903:3:54:155:1356#0
-CTATGCACACATCTTCCCCTCCAAGGTTTGTTCTGCCCCTGCCCTGACTCCCAGCCCTGTGGGGGTCCTCAACCCC
-+
-67777788888888888888888877476555343210020...,---,-++)+*)))('(((((%&"""""$###
- at 30BB2AAXX080903:3:42:1470:976#0
-GCAGTGGGCCTGGAAGAGCTGCATGATCAGGGCCGGCACTGGTCCAGGGTACGTGCAGTGAAGAGGACNAGATCCT
-+
-6777-7888888888888888888777765554432211*1/...---,+++++**)*()('(((('%"$&#"""#
- at 30BB2AAXX080903:3:1:1184:305#0
-CACTGAGGGACTGGGCCTGACATCATCTGAGTGGTAGAGGCAACTGGGTGTCAGGAGACATGATGGAGNCANTAAC
-+
-6777778888888888888388887747655644022111/..(-.-,+,+(***)))((()(''(&""##""""$
- at 30BB2AAXX080903:3:56:1412:1940#0
-TGCTCTTGTCACCCAGGCTGGAGTGTAATGGTGAGATCTCTGCTCACTGCAACCTCCACCAGATCGGATGCTGCGC
-+
-67777788888888888888888877776555443221100//.-.+-,++,+)**)*)()((''(''##"##"""
- at 30BB2AAXX080903:3:4:388:998#0
-GCACTCTGTCACCCAGGCTGGAGTGCAGTGGCACAATCTCTGCTCACTGCAACCTCTGCCTCCTGGGANATCANCN
-+
-67777788888888888888888'777785554330201/0...--,+,-,*(**)())(((((('&&""#%""#"
- at 30BB2AAXX080903:3:34:913:939#0
-ATAAACAAGGATTATAATCTGAGATATTTGTGCTATGATCAATCATAGGTGCATCCCAAGAGATCGGNCTCACANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))())('&"$"##%"""
- at 30BB2AAXX080903:3:40:407:531#0
-AGGAAAATATGTAAAGACAAAAAGAAGTCCATGCAAGCTGTTTTGAAACAAACATCATTGGTCACAGCGAGGCACA
-+
-6777778888888888888888887775635544322210///...--,,-++***)))))))(((&&%#"""###
- at 30BB2AAXX080903:3:34:825:1405#0
-AATCTGTGTGGCTTCCAAATTTGCAAGCTGAGAATTTAATTCAAAGTGGTCTCAGGTTGAAGATCGGNCACACTNN
-+
-67777788888888888888888877776555443222100/0..-.-,,,++***)*)()))(((&"$$#$#"""
- at 30BB2AAXX080903:3:47:11:1920#0
-TTCTTGTGCCCTCTCCCTCTCTCTCTTTCTCTTGCCCTCTCATTTGAATGAAGCCAACTGGCATGCTGACACACAG
-+
-677777888888888888888888777765554403221000/..,-,,,+++*)**))))(()('(&%###"##"
- at 30BB2AAXX080903:3:40:161:1355#0
-GAGATTTGGGTGGGGACACAGCCAAACCATATTGCTGCTGAATAGATCATGTAGACAGGCTCTCAAANTCCAGAAC
-+
-67777788888888888888888877776555443222100//...--,,+++****))()))((('"$""%$"##
- at 30BB2AAXX080903:3:50:961:593#0
-TTGGGAAGGCATGATTGGTTTTGAAATGTGAGGACATGAGATTTGGGAGGTGCCAGAGGCAGAATGAGGCGACCAA
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((((''$"##"##""
- at 30BB2AAXX080903:3:44:703:170#0
-CCACGGTGCCTGATCCCTGCTGCATCCTCCTTCTCTAGTGGCAACAGCAAATGGCCACACAGAAGGCAGACACTGC
-+
-67777788888888888888888877776555443222000//..---,++,++****))(((('(''$"""""##
- at 30BB2AAXX080903:3:1:657:109#0
-TGACAGAGCAGGCTCCTAAGTCAATGAAGGAGAGACTGGCCAGTAGAAAGTACATGGGGGAGTGGAACNAANACAC
-+
-677777888888888888888388777765451410222*)-/,-.*,,,$*%*'))*))#(#(##%"""""####
- at 30BB2AAXX080903:3:38:1408:1753#0
-GCAATCCTAGTCTCTGATAAAACAGACTTTAAACCAACAAAGATCAAAAGAGACAAATAAGGGCATTACATAACTG
-+
-67777788888888888888888877776555443222100//.----,,++++**)))))((('(&$$%&$#"""
- at 30BB2AAXX080903:3:38:423:536#0
-CAAGCTGGCATGTGGCTTGAGGTGACCCGAATATGTCAGCACCCCTCAGATGTCTTTCAGATCGGAATAGCCGACA
-+
-677777888888888888888888777765554430221*,./..--*-,++*****)((((((('&$#"#"""##
- at 30BB2AAXX080903:3:3:27:1957#0
-CATGTGTTTTTTGGCTGCATAGATGTCTTCTTTTGAGAAGTGTCTGTTCATATCCTTTGCCCCCTTTCNTACNNGT
-+
-6777778888888888888888887777655544302110///..-,-,,+++**()*))))(('('%"#"#"""#
- at 30BB2AAXX080903:3:43:823:764#0
-GTCCATGTGTTCTCATTGTCCAATTCCCACCTATGAGTGAGAACATGCACTGTTTGGTTTTTTTTCCTTCTGGTTT
-+
-6777778.888888888888888877/76555'432221/0//..----,,+*****)&))'(%(''&&$&#$#""
- at 30BB2AAXX080903:3:54:34:362#0
-TTCTGGGTGCAGCACACCAACATGGCACATGTATACATATGTAACAAACCTGCACTTTGTGCACATGTGGCGATGA
-+
-6777778/88888888885388887777655.4432302/0-.-..,,,,*,+**)())()((((''$""%""""#
- at 30BB2AAXX080903:3:52:540:1144#0
-CCCCTGAGAGGCCCTGGTGTGTGTTGTTCCCCTCCATGTATCCACGTGTTTGTCCTGATGGTAGATCGCGCGACTA
-+
-67777788888888888888888877776555443222100/.-.-,-,,+++*+*)))))(((('#$$"#""#$#
- at 30BB2AAXX080903:3:37:1436:1234#0
-TTCCCCTCCATGTATCCACGTGTTTGTCCTGATGGTCTCCTACCCCCTCTCCCCCTGAGAGTCCATTCTCTCTCTN
-+
-67777788888888888888.8887777+5554432212/.//,-.-,%+,++$)()()(&#'(%&#%$#"$"##"
- at 30BB2AAXX080903:3:4:735:1949#0
-CCCCTGTCCCCCTGACAGGCCCTGGTGTGTGTTGTTCCCCTCCATGTATCCACGCGTTTGTCCTGACANACTCNCN
-+
-67777788888888828888888877776)554413222/#/.,,+,*+,+'+(()'))(((((((&%"%$#""""
- at 30BB2AAXX080903:3:38:261:1349#0
-ATGTACCCACGTGTTTGTCCTGATGGTCTCCTACCCCCTGTCCCCCTGAGAGGCCCTGGTGTGTGTTATTCCCGCT
-+
-67777788888888888888888877776555443232100/.-----,,,,+**)*)))))(('''"&%%%%"$#
- at 30BB2AAXX080903:3:51:826:1191#0
-CATCAAGACAAACACGTGGGTACATGGAGGGGAACAACACACACCAGGGCCTCTCAGGGGGACAGGGGGGCTGTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('$"#%"#"#"
- at 30BB2AAXX080903:3:45:572:45#0
-CCTGTCATTTAATGTTTTTTCAATAAATGCTGGCAGGGCTAGCTAGTCAGGGCTCGTGGCTGCCCGACGNGTCGGC
-+
-677777888888888888888888777765554432221/0//.,.,,),,,*)+(#)*(''&(##%""""##""#
- at 30BB2AAXX080903:3:56:995:113#0
-ATGGTGGCCCAGGCTGGAGTACGATAGTGTGATCTTGGCTCACTGCAACCTGTGTCCTGGGCTTAAGGGTCCACCG
-+
-67777788888888888888888877736555443222100-/-.--,,,,+*+*)***))('((''$&#"#"##"
- at 30BB2AAXX080903:3:45:1022:248#0
-CCAGGCTGGAGTACGATAGTGTGATCTTGGCTCACTGCAACCTGTGTCCTGGGCTTAAGTGATCCTCNCACACCAC
-+
-6777778888888888888888887777655544322210./,.,---,,,,+***)*)()((((''"&"$""##"
- at 30BB2AAXX080903:3:42:321:801#0
-ACAAACTTATAGTTTGATTTTTGTAAACATCCCTGTAATCATCACATAAGTCAAGATATAGGACTTTAGATCGGAA
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))(((((&'&&%%$$#$
- at 30BB2AAXX080903:3:2:1005:1899#0
-TGTATTATCTAAGAATGCATTGCCAATCCACAGCAATGTTTTATTTCCATGTTTTCTTCTAAGCATGTNTGGNCTC
-+
-67777788888888888888888877776755443222100//.----,,++++****))())((((&""%""#""
- at 30BB2AAXX080903:3:52:1130:1835#0
-TGTTAATTTGCCTTTGGATGATCTGATTTCTAAAGGTTTGGTGGAATTCTCTGTGAAAACATCTAAACCTAGTGTT
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))()(((("""$%%#"%
- at 30BB2AAXX080903:3:56:733:1970#0
-TGAGAGGCAGAGGTTGCAGTGAGCCAAGATCATGCCACTGCACTCCAACTGGGGCAACAGAAGATCGGANGAGTCC
-+
-67777788888888888888888877776555441222100//.-----,+++**)*)*)()))('''%""##""#
- at 30BB2AAXX080903:3:1:1112:1239#0
-TGACAGAGTCTTGCTGTGGCACCCAGGCTGGAGTGCAGTGGTGCAATCTCAGCTCACTGCAACCTCCANNTNTCGT
-+
-677777888888888,88*3888&77786552443212.00//----,+,+,+*+*()*)))('('&%""""$#""
- at 30BB2AAXX080903:3:45:230:803#0
-CTCTGTCTGATGCTGGGCTGTCACCATGCCCAAGACTGAGGGGACCCACAGTCTAGCTAGAAGGCATGGAGTAGAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))))))((((('%"""##$%
- at 30BB2AAXX080903:3:49:375:934#0
-TGCTTTGCTGCTCAGCATGGCTGGGAGGCACAGTGGAAGATCATGCATCCTTCCCCTGGGACTCCTCTGCCCTCAC
-+
-677777888888888888888888777765554232/21/0/.-.-,,+,+,***))**)(((((('$#"$#"#"#
- at 30BB2AAXX080903:3:43:1559:1760#0
-ACCTGCTCATGGTCTGCTTTGCTGCTCAGCATGGCTGGGGGGGACAGGGGGAGGACAAGCATGCCAGAGGGGGACG
-+
-677777888888888888888888704763454422221/0/+)%.-#,-**+)##'#(&'&#%##&%"""%#"""
- at 30BB2AAXX080903:3:45:543:1504#0
-GGGCACGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCAGGCAGATCACGAGGTCAGGCGACGGT
-+
-67777788888888888888888877776555343222100/.-/,--,,+,***))))()()('&''""""""""
- at 30BB2AAXX080903:3:3:1522:47#0
-CAAGTCTAAACTCCCGACCCTGGAACATCAGGTCTTTGTGCTCTGTTCAGTGCTTCTCTACCTCACACNACACNCN
-+
-677777888888888882,288887.7725552,321110,/....-,,,+,)+*(*(*)'#(#(%#""####"""
- at 30BB2AAXX080903:3:38:199:546#0
-AAAGAGCTGATCAGGAAGCAACTATGCACGGTCTTCCCCTCCACACCTCCAGCCCCAGCTCCCTTCCTCACACCTA
-+
-67777788888888888888888877776555443222100//..-.-,-,++**))*))))(((('"%"""####
- at 30BB2AAXX080903:3:60:1392:1511#0
-AGTGCATGGCTCCACACTGCCATCTTGGGGGCTGGCACAGGCTGGCAGTGAGTCTGGGGGAGGGAGGCACAACCNN
-+
-67777788888888888881*-307777654'443$+-.01-/..+,&+,(*)'*)'))#((((#(#$$%%%%$""
- at 30BB2AAXX080903:3:41:1728:799#0
-GCCGACTGCTGGGTGCGCGGCAGACCTAGTGCATGGCTCCACACTGCCATCTTGGGGGCTGGCACAGGCCAGNTCC
-+
-67777788888888888888888877216+5444322010///-'.--++))+*(*))''()(''&'&$""&"$#"
- at 30BB2AAXX080903:3:33:659:237#0
-AAGAACCCACAGCCGACTGCTGGGTGCGCGGCAGACCTAGTGCATGGCTCCACACTGCCATCTTGGGNCAGCATNN
-+
-677777888888888888888888+777655544322210///.---,,,,+++*))**((()((('"&""$#"""
- at 30BB2AAXX080903:3:42:1316:1812#0
-TATTACACACCAGATTCATTCCCTGATTAGAGCTGCTGAATTCTTTTACTCTCACTGCACTCATGCTACAGTTTCT
-+
-677777888888888888888888777765554432221/0//..----,,++++*)))))(()(('&"%%$#%#$
- at 30BB2AAXX080903:3:47:234:803#0
-TCACTGCCTGGAGCCAGCTCTTGGAAGTTCCCCAGGAGCTGTCCAGTCTTACGTCATGTCTAGTCAGCAGTGCCTN
-+
-67777788888888888888888877776555443222100//.----,,,,++*)**))))(((('%##""##""
- at 30BB2AAXX080903:3:57:1354:908#0
-AATTGACTCTATGTTCCACAGTCCATACAGGGAGCCTGGCTTGTGAGCGATGCCGTCATACACCCTAGAGCGCACG
-+
-27724728888888888)843&78.027635"34/-2'00+..-+$-+$,$%*'**''%()(##(%#%&%#"%"#"
- at 30BB2AAXX080903:3:45:343:174#0
-CTGCTCAGCTGAACCCCTGGGAGCTGAGGGGCCAACTCTGACTCCCAAGAAGGTGACCTCTATCTCCCTTCCGGGG
-+
-6777778888888888888888887717655548322220///..-,+,+*++(**()*))()((('&""$$"%#"
- at 30BB2AAXX080903:3:34:808:1334#0
-ATGTTGTGTGAGGCCTGACCGCTGTGAGGATGGACTTCCATCTGTGTGAATGGATTCATGAGACCAGNCTCACCNN
-+
-67777788888888888888888877776555443222100//..---,,++++**)***))(((('"%"%"$#""
- at 30BB2AAXX080903:3:1:1153:736#0
-TGCACAGAAACTTAGGCATATGCCTACCAACATGCCCGATGTTGTGTGAGGCCTGACCGCTGTGAGGANTCNCCAC
-+
-67777788888888888888888877776555443222100./.--,-,-++++***))))())(('&""%"####
- at 30BB2AAXX080903:3:52:1018:2027#0
-TCCTTCCACATAGGTGGTTCTCCACCCAGGCTGCCCAGGAGAATGTGGAATCTCCAGCAGTTCTGACGTACGGNGG
-+
-67777788888888.888888188777765554131221/0-.-.,--,,+*+*))*)((&((''%%$""""#"""
- at 30BB2AAXX080903:3:1:506:1384#0
-GGTGTTTGGAGCTTCCTGGTAGGGGCTGGGGACAAAGTGTGGATGGGGCACCTGCTGGACCTGTGGGCNGANCACA
-+
-67777788888888888885888872776553,0..2,1.0/,,.-*-$$+*'*##))%#&#(#(#'""#&"$##"
- at 30BB2AAXX080903:3:41:1164:1967#0
-TGTGCGTGAGTCCCTGTGTGTGATGTTGTGTTCTCGGTGTGAGTTCATGGGTGTGACGGGGGGTGTGCTGTATCNT
-+
-677777888888888888888888777765554432211/0//..,--,,++++*()))))(((''&&'%&#%"""
- at 30BB2AAXX080903:3:3:124:1345#0
-TGTGCTGGGTGAGAACGTGTGTGTAGTGTTCACATGTCCTCTGTGCGTGAGGCCCTGTGTGTGATGTTNTGTCNCT
-+
-6777778888888888888-888177776555443222100//..---,,+%+***)*)()((((''&"$&##"#"
- at 30BB2AAXX080903:3:53:1237:733#0
-GGGGTGTGCTGTGTGAGAACGTGTGTGTAGTGTTCACATGTCCTCTGTGCGTGAGTCCCTGAGATCGGCACAGTTG
-+
-67777788888888888888888877776555443222100//..---,,+++******)))((((&$$"""""""
- at 30BB2AAXX080903:3:4:1614:1500#0
-TGGGTGTGACGGGGTGTGCTGTGTGAGAACGTGTGTGTAGTGTTCACATGTCCTAGATCGGAAGAGCGNTCGCNCN
-+
-6777778888888888888888887777655343322210./...-.,,,,,++*+*)())))(((%"""""#"#"
- at 30BB2AAXX080903:3:36:1382:1870#0
-TAGTGTTCACATGTCCTCTGTGCGTGAGTCCCTATGTGTGATGTTGTGTTCTCGGTGTGAGTTCATGGCTCGTGNN
-+
-67777788888888888888888877776555443222100//..---,,,++**+)*))))((('%"$"""""""
- at 30BB2AAXX080903:3:34:1573:1705#0
-AGGGACTCACGCACAGAGGACATGTGAACACTACACACACGTTCTCACACAGCACACACCCCAGATCNCATACCNN
-+
-677777888888888888888888777755554)30211/0//..----,,)+****))(((('&#'"%"#%$#""
- at 30BB2AAXX080903:3:41:922:166#0
-TGTGAACACTACACACATGCTCTCACACAGCACACACCGCATCACACCCACACCCCCACAAGACNGGTGGCGCGAC
-+
-6777778088888888848$888897776/25243112000..+-,,,-*+*+)+))()('')##''"$%"%#"#"
- at 30BB2AAXX080903:3:38:1400:171#0
-CGGAGGGGCCTCCCTGCCGACTCTGCCCCCGTCCTGTGGCCGTAAGCCCACCCAGAGCGCCCCCTCCTCCCTACNN
-+
-6777778888888888888888833777654'44/.)10//.'(*-",,(+*+&'&))((#(###'%$%$$#"#""
- at 30BB2AAXX080903:3:36:1153:871#0
-GGCCACAGAGAACCCGCGTGCACCGGCCGCCAGGCCTGGGCATCTCCTCTCCTGCAGCGCCGCCTGCCNCAGACGN
-+
-6777778888888888888888887777655544322210/1/-.-,,,,,+++****))))(('(&""###$$""
- at 30BB2AAXX080903:3:51:1670:1413#0
-GCACACGGGTTCTCTGTAGCCAGCAGGCGGCGCTGCAGGAGAGGAGATGCCCAGGCCAGGCGGCCGGAACACACCA
-+
-67777788888888888888888877776555443212120//..---,-+,+***))))((((('&$$&#$#$#$
- at 30BB2AAXX080903:3:44:1274:1604#0
-TGTGAGTGTGTGTGGCTCTCAGGCCTGTTCTGTCCTGGGTGCGCTGCGTTCCCCAGGCGGCACCATCTCTCTGCTC
-+
-67777788888888888888888877776555423222100//.----+-+,+**)))))&'('&'&"$"$$%$"#
- at 30BB2AAXX080903:3:44:1718:847#0
-CACGAGAGCTGTGAAATGGGAGTGAGGGGTGAGGCAGGCCATGGGGCCTTCCACAAGGTGGGCAAGATGGGTGTCG
-+
-677777888888888888888888777763554432221/0-./.-,,+,++*)&**)(())'''('"$$""""#"
- at 30BB2AAXX080903:3:56:504:1509#0
-TGTCAGTCAGAGCTCAGGCCAAACACTGGGGCTAATAGGGGTGAGAGCAGGGAGCTGTGGGGTCCTCACAGCNTNN
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))))((((('%&"&""$""
- at 30BB2AAXX080903:3:60:1067:1145#0
-ACCCTACCCTGTCAACAACACTGGCCTTCAAGACCCTTTGTAGCATAACTCCCACCTATAACTCCCAACTTCAANN
-+
-677777888888888,8888848877776555443222100//..---,,,+++**)))))(()(('"$&##$$""
- at 30BB2AAXX080903:3:58:445:1310#0
-CATTTCCTCCCCACAAAGCCACCTCATGAGCCTGGGGGGGGCCTAGCCAGGCCTGCTGCTGAACCTGCTCTTCCAC
-+
-677777888888888888888888787765.94432.21-0-/.--,-,,&++')*&*'()((#(#''%%#""##%
- at 30BB2AAXX080903:3:43:1138:131#0
-GCAGCGCTAGCCCCTGGACTATTCTCACCACTCACGCCTTGGCCTCCATACCCGCGCGCACACCGCCCCCGGCGCC
-+
-67077788888888/8888888&87777455)43'221+-&/+.--.&)+(+%**&'#'(##((#''""""#""#"
- at 30BB2AAXX080903:3:35:1407:524#0
-ACCGCCTCCCGGGTTCACGCCATTCTCCTGCCTCAGCCTCGCGCGTAGCTGGGACTACAGGTGCCTGNCGACCTTN
-+
-677777-888888888888888),7777.5/514112200,/..+'+,,*+**()()#))(&('%&%""#"#$"""
- at 30BB2AAXX080903:3:48:72:1271#0
-CGGGCCTCCCCTGCCTCCCTCTGCAGCTGTCCACGCCCAGCCAGCCTCCCTGCCTCCCTCTGCAGCTGTCTGTACT
-+
-67777788888888888888888877776555443222100//.-----,++++****)))()('''$$#""#"##
- at 30BB2AAXX080903:3:2:589:1114#0
-CTGCAGAGGGAGGCAGGGAGGCTGGCTGGGCGTGGACAGCTGCAGAGGGGGGCAGGGGGGGGGCGGGTNTGCATAC
-+
-6777778888888888881883)3712765+5'43$+*0-,/*(-*-,,%,+#&)**)#)(###'##"""%$"""$
- at 30BB2AAXX080903:3:36:90:188#0
-CAGGGCAGGACCAGCCCCCCAAGCTGTGAACCTCGCCCGAGGCTATGCCCCACTCTGGAGCAGAACGNCTACGGTN
-+
-67777788888888888888888877776555443222100//.-.-,,,++++**))())(('(('"""#%""""
- at 30BB2AAXX080903:3:41:759:1634#0
-AGCCTCGGGCGAGGTTCACAGCTTGGGGGGCTGGTCCTGCCCTGTCCCACATGTGGCTGGTTTGGGGGCGTGGCGA
-+
-6777778888888888888882887777655544302110.//..-,-,+++***)&*)&'(&''##"$""$"#""
- at 30BB2AAXX080903:3:41:694:781#0
-TGAGGGTGAGGCCCATGGCCTTGGGAAGCAGGCATAAGTTGGGGGGGGTGGGCACACAGGGGCACCGCGGGACCAG
-+
-677777888888888888888888777765554432.2000//..---*,,++*+**)))(#'(('''&""""##"
- at 30BB2AAXX080903:3:34:439:399#0
-ACACACACGTGCATGTGCATACATGGCTTAGCACACACATCTGTAGATCCTGGGTTTGTCCTTTAGANCACGTCNN
-+
-67777788888888888888888877776555443222100//..----,+++**+**))))))(('"#"$#"#""
- at 30BB2AAXX080903:3:41:947:127#0
-ATCTTGGCTCACTGCAAGCTCCACCTCCCGGGCTCACACCATTCTCCTGCCCCAAGATCGGAAGAGGGTTCAGCAC
-+
-6777778888888888888888887/7765254131211//++--.-&+-+**)*))&(')'')#('&%$$""$##
- at 30BB2AAXX080903:3:47:1096:1669#0
-CAAAGAATTTGGGCACCATGGTAATTACTGAACATTTAGGGGAGACACTTTGACAGTATAGATCGGAAGTGTCGGG
-+
-67777788888888888888888877776555443222100//..---,,+++*****)*)(('(('"""""#"""
- at 30BB2AAXX080903:3:46:770:234#0
-CACCTTGGCCGTGTGATCAAGGTCCAGACCACCAGTGATGAGGCATGTTGACATCGTGGCCCCTGAGACGCTGACG
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)*)))((((%'%""""""#"
- at 30BB2AAXX080903:3:41:827:784#0
-GCAGCTCACGTCCAGGACCCCAGGCTGCACTGGCCCTCACGCCTCCTTAGTCCCCTGCACCTGTGACCCTTTCCTC
-+
-677777888888888888888888777765554452220/0///..-,-,,+++**(*)))((('('&$#&$%##"
- at 30BB2AAXX080903:3:33:712:1620#0
-CGAGGGTGCCGTCTCAGCAGCTAAAGGTGTGGAAACTGGGACACTCACGCGGGTGCGGGGATCGGAANACACACNN
-+
-677777888888.8888288+8$)+78+3)55452+.1&0,..,,&,',%+++$*%&(#(###('#%""&%&$$""
- at 30BB2AAXX080903:3:50:685:603#0
-ATCTCAGCAGCTCACGGTGTGGAAACTGCGACACTCACGCGGGTGCAGTCTCAGCAGCTCACGGCGTGGATACACA
-+
-67777788888888888888888877776555443222110//$.---+,+,*+**)))*()((#(#$""""##$#
- at 30BB2AAXX080903:3:56:1307:1519#0
-CACGGGTGCCATCTCAGCAGCTCACGGTGTGGAAACTGCGACACTCACGCGGGTGGCATCTCAGCAGATANGACAC
-+
-677777888888888888888888777+6/55443012/2/./-----,+++*)*#(()'#(()'('&&""##$##
- at 30BB2AAXX080903:3:51:749:1955#0
-AGTTTCCACACCGTGAGCTGCTGAGATGGCACCCGTGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCNCGCATGG
-+
-67777788888888888888888877776555343220100./.,--,,,++*****)()()(((''"""""#"""
- at 30BB2AAXX080903:3:43:807:1752#0
-ACACTCACACGGGTGCCATCTCAGCAGCTCACGGTGTGGAAACTGCGACACTCACGCGGGTGCCGTCTCAGCGGCC
-+
-67777788888888888888888877776555441212100//..,-,,,,,+**(()))()'(('''&%"%"##"
- at 30BB2AAXX080903:3:3:429:941#0
-TGTGTATGACTGTGTGTATGAGTGTGTATGATTTGTGTGTGTGAGTGTGTACATGTATACACTAGTGTNCGTCNCC
-+
-67777788888888888888888877776555443222100//..---,,+,+***))*()))((('$"&#"#""#
- at 30BB2AAXX080903:3:39:469:1852#0
-TGTGTATGAGTGAGCATGAATGTGAACATGTGTGCACGAATGTATATATGATCTGGGTGTGTAGGAGATAGCAACA
-+
-67777788888888888888888877776555442232000//...--,,,++**+)*)))((((('"$""#"###
- at 30BB2AAXX080903:3:53:57:1762#0
-CATGTGTGCACGAGTGTATATATGATCTGGGTGTGTAGGAGTGAGCATGAATGCGTATGCACAAGTGGCCTATCTG
-+
-647777888888888888888888777765514433221/0./-...-,,+++***)*)())(('''"$#"""#""
- at 30BB2AAXX080903:3:45:936:1683#0
-CCAGAAAAGCCTGGATGCCACACAGACTCAATGCTGAAAGCTCCCAGTGCACCTGCACAGATCGGAAGCGCGCGGC
-+
-6777778888888888888888887777655544322200.///-.-,,,+++**)*))*)((((('$"$#%"#"#
- at 30BB2AAXX080903:3:3:651:1124#0
-CATGTGTGGGTGTCTTTGTGCAGGTGCACTGGGAGCTTTCAGCATTGAGTCTGTGTGGCATCCAGGCTNCTGCNTA
-+
-6777778888888,88888881887777655544322212///.-.-+,,*,++**)*#'(&''((%&""&$$"""
- at 30BB2AAXX080903:3:40:540:1733#0
-GACTGAGTTGGCCTGGTCCATTGTGAGGTCAGGTAGAGCCAGGGCCGAGGTGGGGATGCCAAGGGCCTATGTATAT
-+
-671777888888888888888888767765454/3232000/../--+,,+++**))*(((')(&&'%$%%$%%$%
- at 30BB2AAXX080903:3:50:53:145#0
-GGTGAGCATTTCCGGTTCCCCTGCTGTGCTTTGCTGCGTTGTTCTCTCCTGCTGCAACGTTCAGATCNGTCACACG
-+
-67777788888888888888888877776555443222100//..---,,+++*****)(*))((('"$"#"###"
- at 30BB2AAXX080903:3:59:1267:943#0
-GAGCATGGGGCTGTGCGGCGTCCCCTCCCTGGCGCCCACCTGTGCCCTGCACACTGGCCTGCACTGTCATCACACA
-+
-67707788888888888888888877776555443232100/..----,,+++**))()()'''('%"""###$$#
- at 30BB2AAXX080903:3:41:486:1918#0
-GGAGGCAGGCATGGAGCCTTGGAGGAACCACTCCTCCCCAGCCGCCACCAACATTTGTGGCACCGAGAAGCACATC
-+
-677777888188888848888808777754/51/32/-00/-.--+,++++))**)('()%('&(''%"$$$#""#
- at 30BB2AAXX080903:3:57:1025:1228#0
-GGAATTCTGCCCTAGCTGATGGCTTCTCCGAGGCCTAGGCCCAAATCCACACCTGCTGTTTAGCCCAGAGCGTGCC
-+
-677777888888888888888888777765454532221/.././-,,,,+**++***(()(('&''&""$"#"##
- at 30BB2AAXX080903:3:54:1538:1826#0
-GGAGTCAGCCCCCTGCCCACGCCACCAGGCTCACGTTCAGGGCCCTGGCTGGAGAAACCTGAGCTGACACACTGAG
-+
-6777778888888888888887187777:45083520-20//,,-.,,+,,+**&))'(((((%%&&$$%&"""#"
- at 30BB2AAXX080903:3:35:998:167#0
-GAACAGAAGCGGAACAGCCTAATGCTAATGTTTGGGAAGAAGAGAACAGTGATCCCCCTGGTTACCCNACCACCNN
-+
-677777888888888888884888777765554422121/0//.-.--,$+,+**')*())#'(('%""$#$##""
- at 30BB2AAXX080903:3:50:1195:1750#0
-CCTCTGTCTTCACGAGAGCTACTTTTTTAGTAGGTGGGAGAGAACATTCAATGTTTGTCTTTAGATCGGTAGTCCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()('(%""#"$"##"
- at 30BB2AAXX080903:3:35:1436:929#0
-CGAGTAGCTGGGATTTATAGGTGCGCACCACCACGCCCAGCTAATTTTTTGTATTTTAGTAGAGACGNCGCATCCN
-+
-6777778888888888888888887777655544301110/0---.-,,,++++**)*))))((((&"$"$####"
- at 30BB2AAXX080903:3:33:1435:1262#0
-CCTCAGGAAATCAATGTCATGCTGACATCACTCTAGATCTAAAAGTTGGGTTCTTGGACCAGGTGTGNCCACAGNN
-+
-67777788888888888888888877776555443222100//..---,,+++****))))((('(&""%#$$"""
- at 30BB2AAXX080903:3:42:1588:115#0
-GCTGCTTCCTGGAGGAAGACAGTCCCTCTGTCCCTCTGTCTCTGCCCACCAGAGATCGGAAGGGCGGGTGGTGGCC
-+
-677777888888888888888818782707.344'2,-0.,/+-,,$'+,*)'('#(#)#&'#&#'%$""""#"#"
- at 30BB2AAXX080903:3:47:309:1172#0
-CTGGGTCAGAGTCAGAGCCAGAAGTATGGTTAGAGGGGGGGTCATGGTCAGGGTCGAGATCAAAGTCGGGGGACTG
-+
-677777888888888888888888777765554232$2100./-.--,,,+++***)))%()(((##$""$$""#%
- at 30BB2AAXX080903:3:8:1315:1812#0
-ATGCCTCCTCAGGAGATCCTGACAACATGGGCCCAAGGTGGTCGGGGCACCGCTTGGTTTTATAAGANCTCGTGNN
-+
-67777788888888888888888877776555343,21&01*..-.-,++&,)&***&)&(((((''"%"&#$#""
- at 30BB2AAXX080903:3:42:1167:659#0
-AATGGTTTCATTCTTTTGCATTGCTGATTACCCTCTCCACGTGAGGCAATCAGGTATGCATTTATCTCGCTCTGTA
-+
-67777788888888888888888877776555443222100./..-,,-,,++**)*)*(())(((('&"$$"""#
- at 30BB2AAXX080903:3:45:1662:1554#0
-ACGATGGTTTGGATGTGGTTTGTCCCCACAAAAACTCATGTTGAAATTTGACTCCCACTGTGTAGATCGGGGGCAA
-+
-6777778888888888888888887777655544322210///..---,,-++***))))(())(('%$""""$""
- at 30BB2AAXX080903:3:50:1530:1673#0
-CTGTGGTCCCAGGTAATCAGGAGGCTGAGGAGGGAGGATCGTTTGCACCCAGGAGGTAGAGGTTGCAGCCGACTGC
-+
-677777888888888888888888777765554432221/0//...-,-,+++***()))))(('%&"$#""#""#
- at 30BB2AAXX080903:3:38:1262:1788#0
-CAGTGAACACAAGCGTGTTGTTTTCTTCTATCTTCTTCACGCCGACTCAGTGGTCAGCGGAAACTTGATGATGATC
-+
-67777788888888888888888877776555443222100/0..---,,+++*+*))))(((((('$&%##"""#
- at 30BB2AAXX080903:3:3:267:1855#0
-CTGTAGCTCAAGAGAGGATGTAGCTGCCCCCACCCCGCATCCCCGGGCGCGGGTTTGCCTTGCTGACCNCTCNNAG
-+
-677777888888888880882188.77;6.502422,1&'-...+'++$,+*+$'))#(%'((((%'$""#"""#"
- at 30BB2AAXX080903:3:39:376:911#0
-AAAATGAGTCATTGCAAGGATGACAAAGACGCTCTCCTTGACCAAACTCCATTCAGGCTCCTTTGAGCCTTCTCAT
-+
-6777778888888888888888887777655544322210/0/..---,-,,+++*)**)(((((''&%"&%%%""
- at 30BB2AAXX080903:3:58:356:910#0
-ACAGCTCACAGCAGCCTCAAACTCCTAGGCTCAAAGGATCCTCCCACCTCAGCCTCCTGCGTAGTTGAGATCACNA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(((&'$""&"#""
- at 30BB2AAXX080903:3:52:238:333#0
-AAGGATCCTCCCACCTCAGCCTCCTGCGTAGTTGGGACTACAGGTGTGTGCCACTGCACCAAATAATCTGTGTAAA
-+
-677777888888888888888888*777655144322210/*..+---&,++****)))('(('(&'"""""""##
- at 30BB2AAXX080903:3:44:175:741#0
-GATTAATTGTTTGCTATTGTTTGAGCTCCTGGTTATGAATCACTTGTCAGGTGGGTAGCGTGCAAAGATNANTAAC
-+
-67777788888888888888888877776555,43222100*-..-,*,,+)+**)*)()((((('&$'"""""""
- at 30BB2AAXX080903:3:42:1035:180#0
-GTTTCTCTGATGATTAGTGATGTTGAGCATTTTTTCATGTACCTGCTGGCCATTTGTACATCTTTTGAGTGTTATT
-+
-67777788888888888888888877776555443222100//..---,,+*+*****)())((((''$""""""#
- at 30BB2AAXX080903:3:40:463:919#0
-AGGCAGGGGAATCGCTTAAACACAGGAACCCGGGAGGCAGAGGTTGCAGTGAGCCAAGATCACACCACTGCACCCA
-+
-67777788888888888888888877776555443221000//.,--,,(+++)*)*)()))(((''"&&&#$"""
- at 30BB2AAXX080903:3:4:18:454#0
-TGAGTTCATCAGCGGATGATGGATAAACAGAACGTGGTGTGTATACACAGTGGAATATTCTTCAGCCANGACANTN
-+
-67777788888888888888888877776555443222100//...-,-,++++***))()(((((#""""$""#"
- at 30BB2AAXX080903:3:43:128:589#0
-ATGGCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCCGAGATCCCGCCACTGCACTCCAGCCAGATCGGACGCCCG
-+
-67777788888888888888888877776555443222200//..---,,+++*+*)))))((((('&&#""###"
- at 30BB2AAXX080903:3:45:1526:694#0
-CTGCTGGTAGCAGAGCCTCAGTTCCTCTCCTGCGTTCTTTCGCTACAGGTGTTAGACCTCCAGATCGGGCGTGCGC
-+
-67777788888888888888888877776555442222100//..---,,+++*****))))(((('$$#%"$#""
- at 30BB2AAXX080903:3:54:1479:90#0
-AGCTGGATAGGTTGCCTTTGGCCCACATGGAGTCAGCCCCCTGCCCACGCCACCAGGCTCACGTTCACACATGCTA
-+
-67777788888888888888888877776555443232100//-/.--,-,+*)***)(())('(('&$&$""#""
- at 30BB2AAXX080903:3:39:999:1933#0
-ACGGTGGGACTGGGCTAGGGAGACAGGCAGGCTGGCCTACCCACTGAAGGAGCCAGTCTGCTTTCACCTATCTCTC
-+
-67777788888888888888888877736550143+-/0(...+--,,,,++#(()'&()''(#'&#%$&#&#%$#
- at 30BB2AAXX080903:3:47:319:1003#0
-CTGAAGGAGCCAGTCTGCTTCCACCTAGTCAGCAGCTCCAGGGAGCGCATCTCCCTCAGATCGGAAGGACACCTGT
-+
-67777788888888888888888877776555443222100//-.---,,+++**+*)))))(((''$"#"#"###
- at 30BB2AAXX080903:3:40:597:1510#0
-TGGGGCTGTGCGGCGTCCCCTCCCTGGCGCCCACCTGTGCCCTGCACACTGGCCTGCACTGTGGTGATCTCGCTGA
-+
-67777788888888888888888877776565412221100/...,,-,-+++***)()()()('''$"$%%$$""
- at 30BB2AAXX080903:3:45:825:1815#0
-TGGCCTGCACTGTGGTGATCTCGCTTGGCCCCCACCTGATTCCTGACATACAGCAGAGGAAGCTTAGGCTCAGGGG
-+
-67777788888888888888888877776555443222110+/...--,,+,++***))(()'&('%&$###&#"#
- at 30BB2AAXX080903:3:47:553:318#0
-AGTTAAGGGACTGTGGCCCTGTGTAATGCCAGGCAGTGACAAGGACTGTGACTGGGAGCCATCGTAACGCGCATGC
-+
-677777888888888888888888767765554412/21////..----,-,+***)))()'((#''"%%#%"#""
- at 30BB2AAXX080903:3:36:565:943#0
-AGTGTGTGTATGATCTGGGTATGAGTGATTGTGAATGTGAGCATGTGTGCACGAGTGTGTATATGATCACTGGTAN
-+
-67777788888888888888888877776555443222100//..---,,,,+***))))))(('('%$%#"""#"
- at 30BB2AAXX080903:3:36:1383:1270#0
-GTGCACACATTCACACTCATACACACCCAAATCATACTCACATTCATGCACACATGTAGATCGGAAGCTCTCTCTN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('$#&##"$#"
- at 30BB2AAXX080903:3:51:918:1442#0
-ATATGATCTGGGTGTGTATGAGTGAGCATGAGTGTGAACATGTGTGCATGAATGTGAGTATGATTTGGGTTCCTCT
-+
-67777788888888888888888877776555443222100//..---,,+++****))))()('''&$#""#"#"
- at 30BB2AAXX080903:3:2:301:814#0
-ACCCAAATCATACTCACATTCATGCACACATGTTCACATTCATGCTCACTCATACACACCCAGATCAANCTANNAC
-+
-610047888488888.+88)5811./151/45&,/0)*1/,++++-,*++))*)*)(()#&'&&''%$"###""##
- at 30BB2AAXX080903:3:53:1469:791#0
-GTGTATATATGATCTGGGTGTGTATGAGTGAGCATGAATGTGAACATGTGTGCATGAATGTGAGTATCACTTGTCG
-+
-67777788888888888888888877776555443222100//..---,,++++**)*)))((('(''$%&%$%#$
- at 30BB2AAXX080903:3:43:133:755#0
-CAGCTTCCTCTCACTTGAGCATCTTACACGCAATGAGGCACGTGTAGAAACTGCGACACTCACAAGATCGGAACAG
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))(((('&'"&#"""#"
- at 30BB2AAXX080903:3:37:615:904#0
-GACGGCACCCGCGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGTGGGTGGCGCTNCATN
-+
-67777788888888888888888*7)7065554832(220/*,,--,,+,+++**)*('(''#(#'#&$##"%#""
- at 30BB2AAXX080903:3:53:900:830#0
-GGGTGCCGTCTCAGCAGCTCACGGTGTGGAAACTGCGACACTCACGCGGGTGCCGTCTCAGCAGCTCAAGATCCTG
-+
-67777788888888888888888877776555443222100//..---,,*+++***)*)))(('%%&#$"#"""$
- at 30BB2AAXX080903:3:48:1673:47#0
-CCACACCGTGAGCTGCTGAGACGGCACCCGCGTGAGTGTCGCAGCTTCGCCACCCCGAGCGGCCGCGACTACAGCC
-+
-243772-0/02/828888,25+0//*/0)'*,$3",#*%(&-',%$",$&($#&###('########""#"%#"##
- at 30BB2AAXX080903:3:44:866:942#0
-TGCTGAGACGGCACCCGCGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGTGAGGGGGCG
-+
-677777888888888888888883784765554410.010//*..-,+,(+,)+**)*('('((('#'"$""""""
- at 30BB2AAXX080903:3:50:442:106#0
-TCCACACCGTGAGCTGCTGAGACGGCACACCAACGAGAGTCGCAGATTCCACACCGTGAGCTGCTGCGACTACCGT
-+
-67777788828888888888888877776$'534322-1//1/,.$-,+,++***))(()'#((#'#$$#$"##"#
- at 30BB2AAXX080903:3:8:907:898#0
-AGTTTCCACACCGTGAGCTGATGAGACGGCACCCGCGTGAGGGTCGCAGTTTCCACACCGTGCGCTGNGTCCACNN
-+
-67177788888888888888'88877676555833021200#/,,.,)-++**))))(()'(#((&&""#$""%""
- at 30BB2AAXX080903:3:40:998:1656#0
-AGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGCACC
-+
-67777788888888888888888877776555443222100//.---,,,++***)*)()()(((('&&$#"""##
- at 30BB2AAXX080903:3:40:393:1821#0
-TGCTGAGACGGCACCCGCGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACAGATCGGAAGAGCGGCTCCG
-+
-677777888888888888888888777765554423221/1//.----,-,++***))))')('(''$""%$""#"
- at 30BB2AAXX080903:3:2:734:1657#0
-CGCGTGTGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGTGCGTGTCGCAGGTTCCNCACCCGT
-+
-677777888888882888888028774-6/2121201-0-/...-,*-,++$+$*%)#('&''####""$""##""
- at 30BB2AAXX080903:3:54:953:26#0
-GCACCCGCGTGAGTGTTGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGCGAGTGTCGCCGTGTCCACA
-+
-67777788888888888888888877776555-4022210//..-.-,,,+++)*)#)))#(#'(&#"$"%#$###
- at 30BB2AAXX080903:3:51:1273:825#0
-CTCACGGTGTGGAAACTGCGACACTCACGCGGGTGCCGTCTCAGCAGCTCACGGTGTGGAAACTGCGACACTCTCG
-+
-67777788888888888888888877776555413022100//.---,+,+*++)*)**))(((('("%""$%"#"
- at 30BB2AAXX080903:3:51:541:612#0
-AGCTCACGGTGTGGAAACTGCGACACTCACGCGGGTGCCGTCTCAGCAGCTCACGGTGTGGAAACTGGCAACANAC
-+
-67777788888388888888888877776555443121000//..--,,,+**)**')())((((&'$%#"%"""#
- at 30BB2AAXX080903:3:2:725:1428#0
-CGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGCGTGAGTGTCGCAGTTTAGATCGGAAGAGCNTCATACC
-+
-67777785883888888888730731-1054.1-1..0+/#.)-',&*+&&*#$)&&&#''&#&'#'""""""%##
- at 30BB2AAXX080903:3:48:155:835#0
-CGGCACCCGTGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACAGATCGGAAGAGCGGTTCANACGAGTGT
-+
-67777788888888888888888877776755241222010./.--,+,,+**+**)*)*'()#(%%"""#"""""
- at 30BB2AAXX080903:3:2:99:643#0
-CACCGTGAGCTGCTGAGACGGCACCCGTGTGAGTGTCGCAGTTTCCACACGGTGGGGTGCGGGGGTGCNCGCNNAC
-+
-677777888888888888888888777-65514230022/0/0-'+++-+&+*)&*#')##(&(&#'&"#"&""#"
- at 30BB2AAXX080903:3:37:109:865#0
-CACACCGTGAGCTGCTGAGACGGCACCCGTGTGAGTGTCGCAGTTTCCACACCGTGAGCTGCTGAGAGNGGNTCAN
-+
-67777788888888888888888873776555443222001//-.-+-+,+(+***)))()(()&(%""$"""#$"
- at 30BB2AAXX080903:3:41:987:437#0
-GTGTCGCAGTTTCCACACCGTGAGCTGCTGAGACGGCACCCGTGTGAGGGGCGAAGGTTCCCCACCGCGGCAGCTC
-+
-67777788888/8888888858887377654524321,.0/*%*%,,,+,$$%&)'####%'(&(&'&$"##$%#"
- at 30BB2AAXX080903:3:46:579:1731#0
-GGAGGCGTGAGGGCCAGTGCAGCCTGGGGTCCTGTACGTGAGCTGCTGAGACGGCACCCGCGTGAGTGCGAGTGAC
-+
-67777788888888888888888877776305443202100/+..,--+,+%+*')('()')%)&(''##"""""#
- at 30BB2AAXX080903:3:37:27:27#0
-CTGTCAAGGCAGTGAAGCGAAGACAGGCCAGGAAAGGGTCACAGGTGCAGGGGACTAAGGAGGCGTGCGTCACANN
-+
-677777.8888888888888888847776/55433222//0.+..--+,,,,++*))(()&))((#'%""%#$#""
- at 30BB2AAXX080903:3:39:187:1638#0
-AGAGTGCTGCTCAGGTATTCTGCAAGACGCCCCTCAATTGGTGTGTGTGTGATGTTCTCAGATCGGACGGNACAGT
-+
-67777788888888888888888877776555443222100//..---,,+,+****)))))(((''"&#"%%$""
- at 30BB2AAXX080903:3:59:18:1625#0
-TGTGTGGGCAGCATGGATCTTCTTCCGCGGTGACCCTGTGTGCCCACCCCCGCCAACTTATGCCTGCTTCACANNT
-+
-67777788888888888888888877776555143222100/.----,,,,,+*'**))())'(((&&%&"%$""#
- at 30BB2AAXX080903:3:34:1322:491#0
-GTGCACAGCCTATGTGCATGGTGGAAGCTCTGCAGAGGCCGTTCCGCTCCAGAGTGGGGCATAGCCTNACTAGTNN
-+
-62777788888888888888888877776555443122100#..%.-(--*+**&*)))))'((''%"$"$##$""
- at 30BB2AAXX080903:3:34:810:842#0
-CGACAGCTGCAGAGGGAGGCAGGGAGGCTGGCTGGGCGTGGACAGCTGCAGAGGGGGGCAGGGGAGGNGTGAACNN
-+
-677777888888888888888888777765551432/00/0/.-.,,-++-)++*'**)()((('('""""""$""
- at 30BB2AAXX080903:3:38:1630:1572#0
-AGGCCTCACTTCAGACCATAAACACCCTCCCTGTGTGGGATAGAAACACACATCGTCACAGCCAGGAGCACTGCTN
-+
-677777888888888888888888777765554432221/0//..-.-,,+++***)))))((((('$$"$""#""
- at 30BB2AAXX080903:3:45:505:1811#0
-CACAGGGAGAGCTGCCGGGGCTGGGTGGGGGAGCGTGACTGTGAACGGAGTTCTGGGGGTGATGTAACTGGTCTGT
-+
-677777888888888888888888777765534532222001/.-+--*,(,****)))')(((''&"%%"###$"
- at 30BB2AAXX080903:3:45:594:1146#0
-CACCGACTTGGTGCGGTGTGTGTGACAGACCAGCGAAGCGGGTCTTGCTGCCTGTCCTGTGGTTGGTCCACTGCAG
-+
-67777788888888888888888877776555433222100/)+-.-,,,+++*)#*))(((''((#%""#$$$#"
- at 30BB2AAXX080903:3:33:1094:855#0
-CAGGCAGGCAGCCCCGAACAGTGCACTCCAACATGGGATAGTGAGCCAGCTTGGGGGACAGCAAGACNGGACGANN
-+
-677777888888888888888288774065+231322010/1/...,+,-++++*)**)((''(('#""""#""""
- at 30BB2AAXX080903:3:3:1254:1767#0
-CTGGGCATCTCCTCTCCTGCAGCGCCGCCTGCTGGCCACAGAGAACCCGCGTGAGATCGGAAGAGCGGNCCTCNAC
-+
-6777778888888888888888887777645544322,/////,.--,-,+'+**)())()'('(&'""#""$"##
- at 30BB2AAXX080903:3:51:1375:2001#0
-CCTGCTGGCCACAGAGAACCCGCGTGCGCCGGCCGCCAGGCCTGGGCATCTCCTCTCCTGCAGCGCAGGGCGNCGC
-+
-67777788888888888888788877776555-42'32.0.-,--.+++++)*))&#'('&#(#'%#%""%$""#"
- at 30BB2AAXX080903:3:59:1403:192#0
-TCATGCCTGCTTCATGGGGGAGACGTGGAGGACAGGTCAGACGCAGAGCCCGGGGCACACGCCGCAGCACAACNNC
-+
-677777888888888888*888887'776350-432/010)//..-,-,%*++**()*)()'(((%&&%$&#%""#
- at 30BB2AAXX080903:3:35:718:1977#0
-TCTTCCGTCCACCAGGCCAGGGATGCGCGCAGAGTAAGGATGTGTGTGTCTACGCATGTGGGGGTGTNGTCCTGCN
-+
-6777778888888888888888887775655514+1201.0/+.----+,+,++**))))))))'(%"""#$""#"
- at 30BB2AAXX080903:3:4:997:1183#0
-CCACCAGGCCAGGGATGCGCGCAGAGTAAGGATGTGTGTGTCTACGCATGTGGGGGTGTGGGGGTGACNGTGCNTN
-+
-67777788888888.8888888887753655144321200...--.-,,,*++++*#*#)))#('(%$""""#"""
- at 30BB2AAXX080903:3:50:554:1511#0
-GTGTGGGTGTGACAGGGTGTGTTCTGTGTGAGAACATGTGTGTAGTGTCCACATGTCCTCTGTGCGTGTGCCGCCG
-+
-67777788888888888888888877776555442222100//..---,,+++**)))))))(('('&##$#"###
- at 30BB2AAXX080903:3:37:314:1556#0
-TCACACCGAGAACACAACATCACACACAGGGACTCACGCACAGAGGACATGTGGACACTACACACAACATCTCCAN
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))()('&&$$#"##$"
- at 30BB2AAXX080903:3:50:1424:930#0
-TGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCTGTGTGTGATGTTGTGTTCTCGGTGTGAGCACCTACTG
-+
-67777788888888888888888877776555443222100//..-.-,,+++****)))))()''&$"$$"#$""
- at 30BB2AAXX080903:3:47:385:1782#0
-GTGTGAGTTCATGGGTGTGATGGGGTGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGCACGCG
-+
-6777778888888888888888887777655244322200/0/.----,,++++**&)))))(('''&$"$"#"#"
- at 30BB2AAXX080903:3:41:701:63#0
-CGAGAACACAACATCACACACGGGGACTCACGCACAGAGGACATGTGAACACTACACACACGTTCTCACACAACAC
-+
-677777888888888888888888777765554432221010...+-*,,,++*****))()&'(''&$#$$"##$
- at 30BB2AAXX080903:3:44:1232:736#0
-GTGTGACGGGGTGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCGGTGTGGG
-+
-677777888888888888888888/7776555443222100//..---,,+++***))(('(((%&''"%$%##""
- at 30BB2AAXX080903:3:56:264:557#0
-CACACACGGGGACTCACGCACAGAGGACATGTGGACACTACACACACGTTCTCACACAGCACACACCACGTCGTAG
-+
-67772788818088880882888877776/5,443',11'/-/,,-,++*)$+*(')(*#&#''(%'$%#"&&$$#
- at 30BB2AAXX080903:3:60:1110:1003#0
-GACGGGGTGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTATGTGCGTGAGTCCCCGTGTGCACANN
-+
-67777784888888888888888877776555443222100./..--,,&+++*)**))))((('('$$%%"##""
- at 30BB2AAXX080903:3:41:1071:1007#0
-CTACACACACGTTCTCACACAGCACACACCCCGTCACACCCATGAACTCACACCGAGAACACAACATCACACATAC
-+
-67777788888888888888888877776555413222100/..,-----,,++***)))*)((((''&%&&#"#"
- at 30BB2AAXX080903:3:42:1509:1682#0
-AGAGGACATGTGGACACTACACACACGTTCTCACACAGCACACACCCCGTCACACCCATGAACTCACACGNCGCAG
-+
-67777788888888888888888877776555443022100./...-,-+,,++**)(()('(((''&$""""#""
- at 30BB2AAXX080903:3:4:343:1643#0
-GAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCTGTGTGTGATGTTTTGTTCTCGTNTAGANCN
-+
-6777778888888888888808887757)555443221100-..---,,,+*+***)*)()))((('""#""#"""
- at 30BB2AAXX080903:3:41:1295:1796#0
-CCTCTGTGCGTGAGTCCCTGTGTGTGATGTTTTGTTCTCGGTGTGAGTTCATGGGTGTGACGGGGTGTGCCGCACC
-+
-67777708888888888888880877176252443222100./+.--,,,++++*))())')()(#'"""#"###"
- at 30BB2AAXX080903:3:46:628:592#0
-CGTTCTCACACAGCACACACCCCGTCACACCCATGAACTCACACCGAGAACACAACATCACACACGGGTCCTGAGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))(((('''"#"#"""#
- at 30BB2AAXX080903:3:60:1375:1490#0
-TCCCCGTGTGTGATGTTGTGTTCTCGGTGTGAGTTCATGGTTGTGACGGGGTGTGTGCTGTGTGAGAACAACAANN
-+
-6777778888888888888888887777655/44322210,./..-,--,+)+**)))(('('('(%'&%%%##""
- at 30BB2AAXX080903:3:44:284:1267#0
-GACGGGGTGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCCGTGTGTGATGT
-+
-67777788888888888888888877776555443222100//,.--,,,+++****))))((((''&%%"%""""
- at 30BB2AAXX080903:3:59:1463:967#0
-TCACACACGGGGACTCACGCACAGAGGACATGTGGACACTACACACACGTTCTCACACAGCACACACACAACANCA
-+
-677777888888888888888888777765554433220000//-,--,,+,++***))))))((''$$&%$$"$$
- at 30BB2AAXX080903:3:58:1620:382#0
-TGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCCGTGTGTGAACATCACAAN
-+
-6777778888888888888888887777655544322210///..---,,+++**+)))))(((''%$$"&%$%$"
- at 30BB2AAXX080903:3:58:525:892#0
-GTTCTCACACAGCACACACCCCGTCACACCCATGAACTCACACCGAGAACACAACATCACACACGGGGAGTCGCTC
-+
-67777788888888888888888877776555443222100//...-+,-+++***)*))))()''''$#&&#$#$
- at 30BB2AAXX080903:3:33:1649:1030#0
-TGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCATGAGTCCCTGTGTGTGATGTTGTGTNTACCACNN
-+
-67777788888888888888888877776555443222000//..---+,,++****)())((((''"###$$#""
- at 30BB2AAXX080903:3:33:662:1042#0
-CACAGAGGACATGTGGACACTACACACACGTTCTCACACAGCACACCCCGTCACACCCATGAACTCANCCATACNN
-+
-67777788888888888888888877776555443222100//-..+,,,*++***()((('(('''"%#"###""
- at 30BB2AAXX080903:3:33:375:891#0
-GTTCATGGGTGTGACGGGGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGGNATTACGNN
-+
-67777788828888888888888877776555443222100//..--,,-,++****)))))((''%""""#$"""
- at 30BB2AAXX080903:3:59:152:733#0
-GTGACGGGGTGTGCTGTGTGAGAACGTGTGTGTAGTGTCCACATGTCCTCTGTGCGTGAGTCCCTGTATGTCGNNC
-+
-67777788888888888888888877776555443222100//...--,,,++*+**)()'))(((''"&##"""#
- at 30BB2AAXX080903:3:41:1140:527#0
-GCACAGAGGACATGTGAACACTACACACACGTTCTCACACAGCACACCCCGCCACACCCATGAACTCACACTCCTA
-+
-67777788888888888888888877776553443222100//..----,,&++**)))(()(((%(%%#&###$"
- at 30BB2AAXX080903:3:47:590:752#0
-GACGGGGTGTGCTGTGTGAGAACGTGTGTGTAGTGTTCACATGTCCTCTGTGCGTGAGTCCCTGTGTGTTCGTGTG
-+
-677777888888888888888888'7776555443222100./.,.-,,,+++*)*)**))'(((('%"#$"""""
- at 30BB2AAXX080903:3:49:318:370#0
-TGGAAGGCCCTGAGCACAGGAGTTGATTGCTAGCTGCTAAGAGGCTGCGCTTTGTTCCTGAAGGAGAACGTCTCAG
-+
-67777788888888888888888877776555443222100//./--,-,+*++**()))((((((($%""$"##"
- at 30BB2AAXX080903:3:60:738:1265#0
-TAATTCTCCCTTCCACCGGGGGAAGGGCTGGGTCTCAGGAAAGGTCTAAGAGACACACAGTGCCGGGAGCACTANN
-+
-6777778888888888888888887777'355443,22100-/.,,--',&++**)))))'(('(((&"#"#"#""
- at 30BB2AAXX080903:3:53:1319:1606#0
-AGACACGACTTTTCATGGGCCTCTTCCTTTCTCCCCACCGGTAAATCACCACCCTTCAAAAGATCGGCTGCATCTC
-+
-67777788888888888883888877(765)5311112000-/..-*-++++*)*+*)())))('('$"""""#""
- at 30BB2AAXX080903:3:43:563:397#0
-TCTGATTAGGGCATTTCATCCTTCTCTGAAATGCAGCTGAGAACTGGTCAGCCTCACTCCAGATCGGANGAAGCGA
-+
-67777788888888888888888877776555443222100./..--,-,+*+++***))))((((('"$""""""
- at 30BB2AAXX080903:3:38:1752:1355#0
-TGGTAGGGGCTGGGGACAAAGTGTGGATGGGGAGCCTGCTGGACCTGTGGGGCGAGCAACTGGGGTGACTGTTGNN
-+
-67727788888888888&8$8888777&6555.(/('2010//.)---,,*+#)**)&(&)())'#'"$"#%$#""
- at 30BB2AAXX080903:3:40:652:147#0
-ACAACCACAGGAACTGAATTCTACTGACAACCAGTGAGCTTGCAAAGAGGACTTGGAGCCCCAGATGCGAGAGNGC
-+
-677777888888888888888888777765554432221&//..---,,,,,++***))(()(((''"%#""$"##
- at 30BB2AAXX080903:3:48:361:1555#0
-TAAAAATTATTTTTCAAAATGTTTCTGCCCTACCTTCCGTGAGCATCTGGTGATGGAAGATCGGAAGGGGGGGCGC
-+
-67777788888888888888888877776555443222100//..---,,-+++****)))((((''%""#""#"#
- at 30BB2AAXX080903:3:35:188:1526#0
-TTAGAGCTGGTGTCTTGCTCTGTTGCCCAAGTTTGAGTGCAATGGCTCAATCACAGCTTCACTGCAGNCACTTCAN
-+
-677777888888888888888888777765554432221001/..---,,+++****))))))((('"%"&""$""
- at 30BB2AAXX080903:3:48:1246:1576#0
-GGAATAGAGTTTGTCACTTGGGCTGTACTGACCCCAGTGGTGATGTCTTCCCTTTGATGGGTGGTGAGTGACTACG
-+
-6777778888888888888888887777655544322110.//...---,+,+**))))))')(''%""$#"""""
- at 30BB2AAXX080903:3:3:1726:204#0
-CTGGAATGTAAACTCCCTGAAAGCAAGGACTTGGCTTATTGCTGTATCCCAAGAGCCTGACACAGTGCNCGCGNCN
-+
-67777788888888888888888877776355442222100./..--,+,+,++*)'*))()%((&'&"#$$#"#"
- at 30BB2AAXX080903:3:3:1032:917#0
-TGAAATAGCAATTGATTTTCAGACATGAGTTGATAGAACCATGATTTTCTAATACTGTTCCAAAGAGCNGAACNCA
-+
-67777788888888888888888877776555443222000//..----,,++***)))))('(((&%""%##"%$
- at 30BB2AAXX080903:3:37:1109:523#0
-GGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCCGCTCN
-+
-67777788888888888888888877776555443222100/..-.--,+,++****()()(()(('"$$""#"#"
- at 30BB2AAXX080903:3:43:1168:765#0
-CTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGCTACGACCAACTCATAGATCGGAAGAGCGGTTGCGCGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))()()'('$$"""%"""
- at 30BB2AAXX080903:3:46:1727:250#0
-TGAATTCGAACAGCATACCCCCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTCCCATTCC
-+
-67777788888888888888888877776555443222100//-.---,,+*++**))))(((((''$$#""#"$"
- at 30BB2AAXX080903:3:53:206:374#0
-GATTCCGCTACGACAAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCAGATCGGAAGAGCGGACCTA
-+
-67777788888888(88888888877776555443222100//..---,,+++***)))))((('((&$%"""#""
- at 30BB2AAXX080903:3:58:60:90#0
-GACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCTAGCATTACTTATATGATATGTCNCACNNT
-+
-67777788888888888888888877776555443222100//.---,,,+,*****))))((((('&&"%"%"""
- at 30BB2AAXX080903:3:49:416:142#0
-GCTGGAGATTGTAATGGGTATGGAGACATATCATATAAGTAATGCTAGGGTGAGTGGTAGGAAGTTTTGCTCTAGC
-+
-67777788888888888888888877756555443222101./..---,,+++***)()))%))(%'"""""$#""
- at 30BB2AAXX080903:3:3:1196:818#0
-GAGGGGGAATGCTGGAGATTGTAATGGGTATGGAGACATATCATATAAGTAATGCTAGGGTGAGTGGTNCTCCNCA
-+
-67777788888888888888888877772555443212100//..---,,,++***))))(((('''&"#&"$"#"
- at 30BB2AAXX080903:3:36:1464:1271#0
-TGAGGGGGAATGCTGGAGATTGTAATGGGTATGGAGACATATCATATAAGTAATGCTAGGGTGAGTGTGAGTCCNN
-+
-67777788888888888888884877776345443221000.+-----+,*,++*))))))&('(#'"$""###""
- at 30BB2AAXX080903:3:36:1645:827#0
-GTTTGAGGGGGAATGCTGGAGATTGTAATGGGTATGGAGACAGATCATATAAGTAATGCTAGGGTGCATAGCATNN
-+
-677777888888888888888888777765553/32221-,.#.-.--+,,*+)*))*(''(((#(%""""##"""
- at 30BB2AAXX080903:3:54:1525:1479#0
-CAGACATATTTCTTAGTTTTGAGGGGGAATGCTGGAGAGTGTAATGTGTATGGAGAAATATCATATAACACTACCA
-+
-&7777788888888888888882877776555443222+00//,.-,,+,+++**(#))))')((((&$%##"###
- at 30BB2AAXX080903:3:38:1701:185#0
-CTTTTATCAGACATATTTCTTAGGTTTGAGGGGGAATGCTGGAGATTGTAATGGGTATGGAAGATCGGCAGATCNN
-+
-677777888888888888888888777765554432221/0//.------,++**))*))))(((('""$%""#""
- at 30BB2AAXX080903:3:4:1719:1723#0
-CATTACAATCTCCAGCATTCCCCCTCAAACCTAAGAAAGATGTCTGATAAAAGAGACACTGTGATAGANGTATNAN
-+
--777778888888888888886886777655'443112001/./,-+,,++++***#*))#'('('%%""""""""
- at 30BB2AAXX080903:3:1:319:1608#0
-AATCGAACCCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCAGATCGGAAGAGCGTNCCNCTCT
-+
-6777778888888%88888888887717655544302.201/)./---+,-++)*)))))'(()('&"""$"##""
- at 30BB2AAXX080903:3:60:1219:1146#0
-TATGGGCCCGATAGCTTATTTAGCTGACCTTACTTTAGGATGGGGTGTGATAGGTGGCACGGAGAATATTTAAANN
-+
-67777788888888888888888877776555443222100//...--,,+++*+*)))))()(((&$$$"%##""
- at 30BB2AAXX080903:3:43:600:1777#0
-GGTATGGGCCCGATAGCTTATTTAGCTGACCTTACTTTAGGATGGGGTGTGATAGGTGGCACGGAGAATTTTAGAT
-+
-67777788888888888888888877776555443222100//..---,-+,+***))))))((''''&&'&#%#$
- at 30BB2AAXX080903:3:45:862:1238#0
-TCACACCCCATCCTAAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTATCCCCTTC
-+
-67777788888888888888888877776555443202100//.----,,,+++*)))())((((('$""$%%##%
- at 30BB2AAXX080903:3:34:216:1110#0
-CACACCCCATCCTAAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTAGNCTCGACNN
-+
-67777788888888888888888877776555443222100//..---,,,,+****))))(((('&"$#$$#"""
- at 30BB2AAXX080903:3:38:1100:1656#0
-GAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGGTTGGGCCAGGGGATTAATTAGTACGGGAAGGCTATAACAC
-+
-67777788888888888888888877776555443232100//..---,,++****)*)))((((''"%#$%"%#$
- at 30BB2AAXX080903:3:41:205:986#0
-GATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGGTTGGGCCAGGGGATTAATTAGATCGGAANAGCGTGTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&"&%$%#"""
- at 30BB2AAXX080903:3:38:1018:1051#0
-TGTGATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGGTTGGGCCAGGGGATTAATTAGTACGAGTGCCTAC
-+
-60777788888888888888888877776555443222100/-/.----,+++**))))))((((('"%&%%%%$#
- at 30BB2AAXX080903:3:43:691:803#0
-TGTGATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGGTTGGGCCAGGGAGATCGGAAGAGCGGTTCAGCAG
-+
-67777788888888888888888877776455443222100/...----,+++*****))))(((''$$%&$%$#%
- at 30BB2AAXX080903:3:59:56:1905#0
-GCTTAGCGCTGTGATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGACGGGTTGGGCCAGGGAGATCGGGCCANNC
-+
-6777778888888888888888887777055344322210/////--,,,+++*+*((()))&)'(&&%####""#
- at 30BB2AAXX080903:3:47:868:1806#0
-TACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCCCACCCC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))((('('$%""#$#$"
- at 30BB2AAXX080903:3:48:547:1179#0
-TACTAATTAATCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTACGCTG
-+
-677777888888888888888888777765554432221////..---,,+++*****)*)))((('&&%$#""""
- at 30BB2AAXX080903:3:38:778:253#0
-TCCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTCATNC
-+
-6777778888888888888888887777655544322210///..--+,,+++****))()(()((''%&$"#%"#
- at 30BB2AAXX080903:3:3:1487:1529#0
-CCCCTGGCCCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCAGATCGGAAGAGNCAGCNAN
-+
-6777778888888888888888287777634384102101..*,,-,,,++++**))((&(((''&'""%""""""
- at 30BB2AAXX080903:3:58:1307:1845#0
-CCAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTAGATCAACTN
-+
-67777788888888888888888877776555423222100/..-.-+,,+++****))))(()(''$$&%#"#""
- at 30BB2AAXX080903:3:54:1309:883#0
-CAACCCGTCATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTGTACCTCAT
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*)))()(((&"#$%$%###
- at 30BB2AAXX080903:3:54:630:1038#0
-ACTCAGGTAAAAAATCAGTGCGAGCTTAGCGCTGTGATGAGTGTGCCTGCAAAGATGGTAGAGTAGATGTCGCTAC
-+
-67777788888888888888888877776)55443222100.//.--,,,,*++*)))(*))('(''"$"%&""#"
- at 30BB2AAXX080903:3:8:730:454#0
-ATCTACTCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGAGNTCAGCTNN
-+
-67777788888888888888888877776555443020100-..--,,,,,++*****)))'')(''""#""$#""
- at 30BB2AAXX080903:3:50:979:723#0
-GGCACACTCATCACAGCGCTAAGCTCGCACTGAGTTTTTACCTGAGTAGGCCTAGAAATAAACAAGACCGGTCTGC
-+
-6777778888888888888888887777655524322110/0/..-,-,-++*+***))))((((''"#""""""#
- at 30BB2AAXX080903:3:8:1790:1920#0
-GCAAGCAACCGCATCCATAATCCTTCTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGANCCGCTCNN
-+
-67777788888888888888888877776555443222100///---,,,++++**)*)))))((('"$%%&&"""
- at 30BB2AAXX080903:3:35:1156:897#0
-AGGCCGGATGTCAGAGGGGTGCCTTGGGTAACTTCTGGGACTCAGAAGTGAAAGGGGGCTATTCCTANTTTCTACN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(()(''""#&$$$#"
- at 30BB2AAXX080903:3:46:195:1575#0
-ACTAGGAATAGCCCCCTTTCACTTCTGAGTCCCAGAAGTTACCCAAGGCACCCCTCTGACATCCGGCCAGCTCCAT
-+
-67777788888888888888888877776555443222100//..---,,+*+***)))))()(''('#%$"$%#%
- at 30BB2AAXX080903:3:47:1637:1579#0
-GGTGCTGGAGTTTAAGTTGAGTAGTAGGAATGCGGTAGTAGTTAGGATAATATAAATAGTTAAATTACTANTACGC
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*))))))(('%""""####
- at 30BB2AAXX080903:3:45:1649:842#0
-TATCCTAACTACTACCGCATTCCTACTACTCAACTTAAAAACCAGCACCACGACCCCACTACTATCTGTGCACCAC
-+
-677777888888888888888888777746553,*2-21&&-/(-,,',++%+)))%()'%'#(&#'"%#%$##""
- at 30BB2AAXX080903:3:44:1381:808#0
-AGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGGAGGGTCGTCTG
-+
-677777888)888888888888887'71655+44522'101/-.+--,,,+'+)*()()(*'(('''&"#"#"#""
- at 30BB2AAXX080903:3:43:494:1042#0
-GAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTAGGGGTGCTG
-+
-67777788888888888888888877776555443222100./..----,+++***))*))((('&''&%#"#""#
- at 30BB2AAXX080903:3:56:1086:1031#0
-AGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGCGAGATAGTAGTGTTGCAC
-+
-67777788848888888888888877776555443222100//..---,,+++**))))))()('''$&$$""$##
- at 30BB2AAXX080903:3:48:570:1352#0
-GGGCAGGCCTCCTAGGGAGAGGAGGGTGGATGGAATTAAGGGTGTTAGTCATGTTAGCTTGTTTCAGGTGTGATAG
-+
-67777788888888888888888877+76555423220100/...---,,++++**)()*)())'(("$%""#"""
- at 30BB2AAXX080903:3:51:1009:751#0
-GCGGGGGCAGGCCTCCTAGGGAGAGGAGGGTGGATGGAATTAAGGGCGTTAGTCATGTTAGCTTGTTTCGAGATGC
-+
-6777778888888888888888887777650544322.100/...---,-+++***)))))()((''$$""##"#$
- at 30BB2AAXX080903:3:42:162:348#0
-CTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCCCTAGATCGGAAGAGCGCTCACACC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))((''(%"#""""""
- at 30BB2AAXX080903:3:56:1075:747#0
-GGCCCATTTGGGCAAAAAGCCGGTTAGCGGGGGCAGGCCTCCTAGGGAGAGGAGGGGGGATGGAATTGANGCGCTA
-+
-67777788888888888888888877776555443220100//,.--,,,+++***())(((('(('"$"&"""##
- at 30BB2AAXX080903:3:52:520:1754#0
-TCGTCGATAATGGCCCGTTGGGGCAAAAAGCCGGTTAGCGGGGGGAGGGCTTCTACGGAGCGGAGGGATAGCGGTG
-+
-6777778888888888/88888887777655-442200+00//.',--$+)&))*%))#)#((&(('""#"$#"""
- at 30BB2AAXX080903:3:1:1292:584#0
-TATCTAACAACGTAAAAATAAAATGACAGTTTGAACACACAAAACCCACCCCATTCCTCCCCACACTCNGTNCCAC
-+
-6777778888888888888888887747645344312-00//-.-,,,,))*+**)())(('(''&'$""$"%%$"
- at 30BB2AAXX080903:3:46:1289:1701#0
-AGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTGTAACGCCA
-+
-67777788888888888888888877776555443222/11//..---,,++++****)))(((''''""#$#"""
- at 30BB2AAXX080903:3:41:720:1218#0
-AAAGTGGCTGATTTGCGTTCAGTTGATGCAGAGTGGGGTTTTGCAGTCCTTAGCTGTTACAGAAATTAAGTATTTC
-+
-67777788888888888888888877776559443222&00//,----,-+++***'*)())(((''&$%$"$"##
- at 30BB2AAXX080903:3:44:1581:1616#0
-TCTGTAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGC
-+
-67777788888888888888888877776555443222100//..---,,++++***))*)()(((''%%&$$$$%
- at 30BB2AAXX080903:3:40:1329:522#0
-AAGGACTGCAAAACCCCACACTGCATCAACTGAACGCAAATCAGCAACTTTAATTAAGCTAAGCCCCTACTAGACC
-+
-6777778888888888888".8887667655544322210.0...+,-++*++(*+)))()(((('#""#&%%#$#
- at 30BB2AAXX080903:3:37:116:1610#0
-TGTGGGTTTAAGTCCCATTGGTCTAGTAAGGGCTTAGCTTAATTAAAGTGGCTGATTTGCGTTCAGTNGGTTATGN
-+
-677777888888888888888888777765554/32221/0//..---,,+++*+*)))()'(((''"""&"%##"
- at 30BB2AAXX080903:3:41:1680:277#0
-CAGTTGATTAGGGTGCTTAGCTGTTAACTAAGTGTTTGTGGGTTTAAGTCCCATTGGTCTAGTAAGGGCTTAGCTC
-+
-67777788888888888888888877776555343222000//..---,-+,++*+*)))()((((''&&%&&#$"
- at 30BB2AAXX080903:3:49:743:1400#0
-TAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGCTAAGCACCCTAATCAACTGGCAGATCGGGCGATA
-+
-67777788888888888888888877776555443222100//..-,-,,,++*****))))(((('&#""##"""
- at 30BB2AAXX080903:3:40:238:963#0
-ACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGCTAAGCACCCTAATCAACTGGCTTCAATCNACTTCTAC
-+
-67777788888888888888888877776555443222000./-..-,,,,++***)**)))((((%"%"%$$##$
- at 30BB2AAXX080903:3:41:1347:216#0
-GGCGGGAGAAGTAGATTGAAGCCAGTTGATTAGGGTGCTTAGCTGTTAACTAAGTGTTTGTGGGTTTACGGCATNC
-+
-6777778888888888888888887777655544322210///....-,,+++***)))))((((('&$%#$##"#
- at 30BB2AAXX080903:3:46:208:811#0
-TGAATTGCAAATTCGAAGAAGCAGCTTCAAACCTGCCGGGGCTTCTCCCGCGTTTTTTCCCGGCGGCGTCTTCCAT
-+
-67777788888888888888888877776555443222100../+,-,--,%****))(')))'(('&$$""##""
- at 30BB2AAXX080903:3:60:1625:1681#0
-TTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTCAAACAACNN
-+
-67777788888888888888888877776555443232100//..---,,+++***)*)))(((&'&'$%%%"%""
- at 30BB2AAXX080903:3:1:505:1390#0
-ACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGAGATCGGANGTNACAC
-+
-677777888888888888888886777765554432210/0//---,-,,,++*+*)())())''('&"%""#$"#
- at 30BB2AAXX080903:3:41:1761:1312#0
-CACTCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACCAGAC
-+
-677777888888888888888888777765554402/21//./----+,+,+****)()))&(((&'&$#"####"
- at 30BB2AAXX080903:3:39:748:1227#0
-CCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGGTCGGCGAACATCAGTGGGGGTGAGAGATCGGCGGAGCTCA
-+
-67777788888888888888888877776555443211100//..--,-,-++***)*))))(('(&"""""""#"
- at 30BB2AAXX080903:3:49:246:1867#0
-CCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGGTCGGCGAACATCAGTGGGGGTGAGGTAAAATGAGCGAGAG
-+
-647777888888888888888888777765554332..10.//-+.-++,*++***#*&*)#(((''"####&"$"
- at 30BB2AAXX080903:3:34:768:1637#0
-TCAGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAGATNCAGACANN
-+
-6777778888888888888888887777655543120200../.--,--++++*)()*'(((((('%"##"#$#""
- at 30BB2AAXX080903:3:42:1264:24#0
-AGTGTTCCAATGTCTTTGTGGTTTGTAGAGAATACTCAACGGTCGGCGAACATCAGTGGGGGGGAGGGACACTGCG
-+
-67777788888888888888888877776555443122100//..-.-+,++++)*%))))('('(&&"$"$""#"
- at 30BB2AAXX080903:3:57:641:352#0
-GGTATAGTGTTCCAATGTCTTTGTGGTTTGTAGAGAATAGTCAACGGCCGGAGATCGGAAGAGCGGTGCATACGAA
-+
-67777788888888888888888877776555443222100//..--,,,++++*)*))))()((''""""""""#
- at 30BB2AAXX080903:3:43:407:262#0
-CACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTAGATCGGAAGAGCGGACTCC
-+
-6777778888888888888888(87,77670134%212/0///--.-,+,++)*#**))(())'((''"&%#""""
- at 30BB2AAXX080903:3:33:36:651#0
-CTCATGCGCCGAATAATAGGTATAGTTTTACAATGTCTTTGTGGGTTGTAGAGAATAGATCGGGAGGNCTCAGANN
-+
-6777778888888+8888880888777.6053543222100//.%.--+,+++****))'#()'((%"%"##"#""
- at 30BB2AAXX080903:3:56:1646:1004#0
-TCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTTTGTAGAGAAGATCGGACACACCAAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*())*))(#(''$&"#%%%$%
- at 30BB2AAXX080903:3:1:181:790#0
-TAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGTGGTTTGTAGATCGGANCANAACT
-+
-67777788888888888888888877776555343212100/...--,,,+++**)*)*)(())'('""##"#"##
- at 30BB2AAXX080903:3:43:544:1761#0
-TAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGGGTTCCAATGTCTTTGTGGTTTGTAGAGAATAGTGAACGG
-+
-67777788888888888288%8$8777765551352'210+/+-.--+,,+++**((*)&()(('%'$&##"""##
- at 30BB2AAXX080903:3:39:937:230#0
-GGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCAGATCGGAAGAGCGCGCAG
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))*))))('(&%$$"""#"
- at 30BB2AAXX080903:3:42:1249:422#0
-AAACCACAAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCTCTAAGCCTC
-+
-67777788888888888888888877776555443222100//..---,-+++***))))))((((''%"$$"$"%
- at 30BB2AAXX080903:3:54:300:1423#0
-ATAAGGAGGCTTAGAGCTGTGCCTAGGACTCCAGCTCATGCGCCGAATAATAGGTATAGTGTTCCAATGTCTTTGT
-+
-6777778888888888888888887777655544322/000//...,-,,+,+**+)*)))()((''$"$%$%""%
- at 30BB2AAXX080903:3:1:192:541#0
-CATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGTTGCCTGGCTGGCCCAGCTCCNACNGCTG
-+
-67777788888888888838888877476355353220///./----),,(*+*+())(&'''(#%#%""$""#""
- at 30BB2AAXX080903:3:44:1104:694#0
-TGCATGGGCTGTGACGATAACGTTGTAGATGTGGGCGTTACCTAGAAGGTTGCCTGGCTGGGCCACCCCGGGGGGC
-+
-6777778888888888888888-87*476.5344201-10,./.-,.+,&+,*))*)))(('((&&#$$$%"""#"
- at 30BB2AAXX080903:3:57:423:213#0
-CAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGGTGCCTGGCTGGCCCCNCTCGCT
-+
-67777788888888888888888877776355443122100-/-.-*+,++,+$*+**')()'((''&&""""%##
- at 30BB2AAXX080903:3:58:1640:499#0
-CAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGTTACCTAGAAGGGTGCCTGGGTGGGACAAGAACAN
-+
-67777788888888888888888877776555443222120//.,.--,,++++**#*)))%)('(%$&""%$%$"
- at 30BB2AAXX080903:3:41:1097:323#0
-TGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAAT
-+
-67777788888888888888888877776555443222100//..---,,+++**+))))))((((&''&%"%""#
- at 30BB2AAXX080903:3:50:757:526#0
-TGGGCCAGCCAGGCAACCTTCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAGTCAT
-+
-67777788888888888888888878776555443222100//...--,,+,++**)*))(()('''""#""""""
- at 30BB2AAXX080903:3:56:755:965#0
-TACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCGGTACCTCACGCCACC
-+
-67777788888888888888888877776555443222000//.+-+-,++++**)))##)')#'&'""""$###"
- at 30BB2AAXX080903:3:49:1607:397#0
-TATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTCAGATCGGGGGGTG
-+
-67777788888888888888888877776555443222100//..---,,+++***))()))(('''%$"""""#"
- at 30BB2AAXX080903:3:60:1280:1912#0
-TCTAGGTAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTACNACNN
-+
-677777888888%-82,8/.8)8877476452413*2-.-/./.,..,,,+*+****)*)#))((('%$%#"##""
- at 30BB2AAXX080903:3:60:781:755#0
-ATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGGTATTNACANN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''&$""$##""
- at 30BB2AAXX080903:3:43:150:269#0
-TGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTAGATGTGAGATGGGAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&&&"""#$"#
- at 30BB2AAXX080903:3:42:398:1088#0
-ACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAAGCTTCTTCATAGTAATACCCAGTCTAAC
-+
-6777778888888888888)8888787255412332.12/00/.-,--$(*+**))*))((()((##&%#%#"#""
- at 30BB2AAXX080903:3:37:62:842#0
-CGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATAACGTTGTACATGCTGTN
-+
-67777788888888888888888877776555443222100//..----,+++*+*))*))((('('&#$#$##""
- at 30BB2AAXX080903:3:42:75:841#0
-CAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCTGTGACGATNCGCTCCAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&"$"%""#"#
- at 30BB2AAXX080903:3:48:688:658#0
-TAGTCAGTTGCCAAAGCCTCCGATTATGATGGGTATTACTATGAAGAAGATTATTACAAATGCATGGGCCGCACAT
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))(((((''$""$$#""
- at 30BB2AAXX080903:3:35:972:190#0
-CAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGNAGCGTANN
-+
-67777788888888888888888877776555443222100//..---,,++**+****)))(((('"""%""#""
- at 30BB2AAXX080903:3:52:431:625#0
-TTAGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGATGTGTATTACTATGAAGAAGATTATTACAATTGCATG
-+
-677777888888888888888888777765550$3222110-/...,-,-,+++**)))))((((('$"#"%###%
- at 30BB2AAXX080903:3:56:1337:1009#0
-TTATTAGGGGAACTAGGCAGTTGCCAAAGCCGCCGATTATGATGGGTATTACTATGAAGAAGATTATTACTACATC
-+
-6277778888888*883888)88877776)5$44322,1000/...-,--,+***)))))))(('(''$%##$$"#
- at 30BB2AAXX080903:3:4:9:1631#0
-GGGAAACGCCATATCGGGGGCACCGATTATTAGGGGAACTAGTCAGTTGCCAAAGCCTCCGATTATGCNCAACNCN
-+
-67777788888888888888818876771555443230.1)/..----,-,+')+(*))))'((&('$"&"#%"#"
- at 30BB2AAXX080903:3:42:676:371#0
-ACCCATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATGGCGGCTCCCCGA
-+
-677777888888888888&8888877776555463321110//.---,+-+*+*))**)'('(((''""&%#%$""
- at 30BB2AAXX080903:3:50:880:231#0
-CATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATGGCGTTTCCCCGCACCACG
-+
-67777788888888888888888877776555443222100/0..,---,+++****))))(&((('&"#"$#"#"
- at 30BB2AAXX080903:3:53:252:270#0
-CTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATGGCGATTACCCGCCTAAACAACATAAGCTTC
-+
-6777778888888888888888887777655.44332110..*-'(--+,+$%)+)(*(')&))('%"""#%"""#
- at 30BB2AAXX080903:3:60:756:420#0
-ACTAGTTCCCCTAATAATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTCACNN
-+
-67777788888888888888888877776555443222200//...,--,,,+****))))((((('&%#"%##""
- at 30BB2AAXX080903:3:52:1086:1998#0
-GGCTCCTAAGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCAGAACGGACAG
-+
-6777778888888888828858827777655.44212220.//,.-----+++'*)'*)())'(#''$$#%%"##"
- at 30BB2AAXX080903:3:46:1515:1094#0
-TGATGGCTCCTAAGATAGAGGAGACACCTGCTAGGTGTAAGGAGAAGATGGTTAGGTCTACGGAGGCTCCACTCAT
-+
-67777788888888888888888877775545543020100//.----,,+*+***&())')('((&"#$"$"#""
- at 30BB2AAXX080903:3:46:1354:60#0
-TAATTGTTGTGATGAAATTGATGGCTCCTAAGATAGAGGAGACACCTGCTAGGTGCAAGGAGAAGAAGGTATGATC
-+
-67777788888888888888888810776655433232100.//-,,,+*+++&*'))()')'(('#""#"""#"#
- at 30BB2AAXX080903:3:60:1023:908#0
-CGGAGGAGGAGACCCTATTCTATACCAACACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCNTACAANN
-+
-67777788888888888888888877776555443222100//..---,-+,++**)))))()((((&"%"%##""
- at 30BB2AAXX080903:3:49:437:25#0
-CACGATAAACCCTAGGAAGCCAATTGATATCATAGCTCAGACCATACCTATGTATCCAAATGGTTCTATTTATACG
-+
-6777778888888888888882887777455544322220//.+.-,,+,++*+*)*()((()%(''"#"#""#$"
- at 30BB2AAXX080903:3:39:533:494#0
-AACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGTCCCTCT
-+
-67777788888888888888888877776555443222100/...---,-,*+***(*)*))(('(&&$#"""$##
- at 30BB2AAXX080903:3:45:160:555#0
-TTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACGAGCGGG
-+
-67777788888888/88888888877776555443222100//.,---,,+)+****)))*((((''&$%"""%"$
- at 30BB2AAXX080903:3:1:1670:468#0
-GTAAATATATGGTGTGCTCACACGATAAACCCTAGGAAGCCAATTGATATCATAGCTCAGACCATACCNTCNTCAA
-+
-6777778888888888888888887777655344322211///..---,,+++*****))))')((%&""%"$%#"
- at 30BB2AAXX080903:3:35:1075:210#0
-CTGTAAATATATGGTGTGCTCACACGATAAACCCTAGGAAGCCAATTGATATCATAGCTCAGACCATNACCAACNN
-+
-67777788888888888888888877776555443222100//...--,,+++++*)*))))()(('"#&####""
- at 30BB2AAXX080903:3:1:922:385#0
-GGTATGGTCTGAGCTATGATATCAATTGGCTTCTTAGGGTTTATCGTGTGAGCACACCATATATTTACNACNCACA
-+
-671.778828888132.84830.2'147:.+5/$'+2-2(.1-/'$)+++$)))''($#(&'%(''&$""%"#$$%
- at 30BB2AAXX080903:3:53:1045:1609#0
-TCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGACTAGAACA
-+
-677777888888888888888888777765554432201.0//..-,---+,++**)*))()((((%%$""%#"#"
- at 30BB2AAXX080903:3:56:1669:1250#0
-TATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACCACAAACCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''"$$&%$%$$
- at 30BB2AAXX080903:3:1:1092:1262#0
-GTGAAATATGCTCGTGTGTCTACGTCTATTCCTACTGTAAATATATGGTGTGCTCACACGATAAACCCNTGNAATC
-+
-677777888888888888*88088'7776/504,.22-100%.&.--,),)**))&'&()(((''('$"%&"""""
- at 30BB2AAXX080903:3:35:680:1031#0
-TCCTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATANTGCACCCN
-+
-677777888888888888888888777765554332/110//0..---,,+*+***)))))))((%("$"""###"
- at 30BB2AAXX080903:3:51:1146:676#0
-ATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTCCNCAAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()('(''%#"""$$$
- at 30BB2AAXX080903:3:57:1444:235#0
-GTGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCAGATCGAGCGGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('$&"#""$##
- at 30BB2AAXX080903:3:49:1507:1189#0
-TGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCNCTCGAAC
-+
-67777788888888888888888877776555443222100//..---,,++++****()())(((#&"####"##
- at 30BB2AAXX080903:3:54:662:206#0
-TGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACAATCATCCT
-+
-67777788888888888888888877776555443222100//..---,-+++***))))))(((('"#%"%#"##
- at 30BB2AAXX080903:3:36:1191:728#0
-GTGGGGATAGCGATGATTATGGTAGCGGAGGTGAAATATGCTCGTGTGTATACGTCGATTCCTAGAGACTACACCN
-+
-6777778888888888888888887777655+4432/200+'./,.,-,,++%*''#())()''((#"$$"$"##"
- at 30BB2AAXX080903:3:37:675:976#0
-GTGGGGATAGCGATGATTATGGTAGCGGAGGTGAAATATGCTCGTGTGTCTACGTCTATTCCTAAGATCTGCCAGN
-+
-6777778888888888888888887777655(4432.2(00...,-,-,,+)*+&)*)'))('(('%"&&&##"#"
- at 30BB2AAXX080903:3:47:275:71#0
-GCCGGTGGGGATAGCGATGATTATGGTAGCGGAGGGGAAATATGCTCGTGTGGCTACGTCAGATCGGCATACCTGT
-+
-67777788888888888888888877776555443'2*000/.-,,,,,,(,%&))')##&'&#'''$"""##"""
- at 30BB2AAXX080903:3:37:28:1911#0
-ACGCCGGTGGGGATAGCGATGATTATGGTAGCGGAGGGGGAATATGCTCGTGTGTCTACGTCTAGATGCAATAGAN
-+
-6777778888888888888888887777655544322-1'0/).-.)-,,$,***%)(((%')'%'#"$"""#"#"
- at 30BB2AAXX080903:3:46:835:1539#0
-AATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAGTCAAGCA
-+
-67777788888888888888888877736545443122000//...--+,,+++)*(*))(((((''&$"#""%"#
- at 30BB2AAXX080903:3:47:1068:679#0
-GACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCAAGATCGGAAGAGCGGTTCAGCTCATAA
-+
-67777788888888888888888877776551343222100//...-,*,++****)))()(((#&%$$#""""""
- at 30BB2AAXX080903:3:40:705:1440#0
-TGGCGAGTCAGCTAAATACTTTGACGCCGGTGGGGATAGCGATGATTATGGTAGCGGAGGTGAAATATGCTCGTGT
-+
-67777788888888888888888877776555443222120./..--,,,+++*)*)())#)#'(%'"%""$%#"#
- at 30BB2AAXX080903:3:40:852:1798#0
-CCTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACAGATCCGA
-+
-6777778888888888888888887177655544221-.00/,..--,-++,+**)*())('''('''$##&#"##
- at 30BB2AAXX080903:3:60:940:1464#0
-ACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTAAATACTTTGACGCCGGTACACACNN
-+
-67777788888888888888888877776555463222100//.--,-,,,*+**)))))(()(((&'&"&%#$""
- at 30BB2AAXX080903:3:56:935:536#0
-ACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAAGAGCTCACG
-+
-67777788888888888888888837776)5544/2221.0//..--,,,++******)))(((''''%"%"##$"
- at 30BB2AAXX080903:3:58:813:661#0
-TAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGAGATCGGAAGATGTTCCAC
-+
-67777788888888888888888877776555443222100//..---+,+++(**)*))((()(''$$&""####
- at 30BB2AAXX080903:3:47:221:452#0
-ATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCTTCCGTGGAGTGTGGCGAGTCAGCTGAGAACTGT
-+
-67777788888888888888888877776555443222100//..---,,-++***)))))&(((((&$$"#$#$"
- at 30BB2AAXX080903:3:42:1500:1933#0
-TATTTAGCTGACTCGCCACACTCCACGGAAGAAATATGAAATGAACTGCTGCAGTGCGCTGCGCCCTAGGGCACAC
-+
-67777788888888888018&7&06367$52"-1*022001%.,,+,,*++&'*')#'&&'#(%'%%"$""""$"#
- at 30BB2AAXX080903:3:1:1194:734#0
-TAGCTGACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATNTCNCCTT
-+
-677777888888888888888888777765554432221/0-..-.-,+-)+*+*)*)*)')((((''""$"##$#
- at 30BB2AAXX080903:3:50:896:1907#0
-TAGCTTACTCGCCACACTCCACGGAAGCAATATGAAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATGTGTATAT
-+
-677777888888888888888.8877736555443121110/..-.-*+,++))**))))((((((%%$""""#"#
- at 30BB2AAXX080903:3:53:1718:1107#0
-TGCTGCAGTGCTCTGAGCCCTCGGATTCATATTTTTTTTTTTTGTTTGTGGTTTGACTGGACTCAGTACAACACAA
-+
-67.77788888888888&05&'08+17$0-$24/'22210,/&$.&(-,+*&%*)##'))%#&#%%#$$&%%$$$$
- at 30BB2AAXX080903:3:36:237:119#0
-GTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGAGATCGGAANAACAGCCN
-+
-67777788888888888888888577776555442221100//..--,,,,*+***)*)*((')((%"""$#"##"
- at 30BB2AAXX080903:3:57:840:845#0
-GTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACAGATCGGAAGAGCGGTGCATCGC
-+
-67777788888888888888888877776555443222100//..---,--++***)*))()()'('$$"%"#$"#
- at 30BB2AAXX080903:3:36:821:1014#0
-CGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACAGATCGGAAGAGCAGCGACTCN
-+
-67777788888888888888888877776555443232000/....,,,,+*+***)'()((((((%""##"#"#"
- at 30BB2AAXX080903:3:43:385:1195#0
-GTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACAGATCGGAAGGGCGGT
-+
-6777778888888888888883887747655544322210///.-.-,'+-++**)*))(()(((('$&%$"""#"
- at 30BB2AAXX080903:3:51:1585:1216#0
-GTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGGTGAAAAGCACGA
-+
-67777788888888888888888877776555443222100//...--,,,++***))))))(('''$#$"###"#
- at 30BB2AAXX080903:3:36:1572:1081#0
-TAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCAAGATTGCTACANN
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*)))((('(%"""""#"""
- at 30BB2AAXX080903:3:47:1500:392#0
-TTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAT
-+
-67777788888828888888888877776555443222100//..---,,++++*****)))))('(&$%"%#"#"
- at 30BB2AAXX080903:3:55:1663:1126#0
-TTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGAAACACACACC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(%%$%%#&%#$
- at 30BB2AAXX080903:3:8:799:1454#0
-TTTCACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACNCACGTCNN
-+
-67777788888888888888888877776555443221100/../---,,,++***))))))))(('"'##""#""
- at 30BB2AAXX080903:3:39:785:481#0
-ACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTGCGGGCG
-+
-67777788888888888888.88877774555443222100//..---,,+++*+*))*)))(((''&&&&&#"#"
- at 30BB2AAXX080903:3:44:38:1424#0
-ACCGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTAGCATCCAC
-+
-67777788888888888888888877776555443220/00//..--+,,-+++(***)))(()(''$"$##$#"#
- at 30BB2AAXX080903:3:38:82:1200#0
-CAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCGTCTACTCA
-+
-67777788888888888888888877776555443222100//..--,,,+++*****))))(('('""$"#$"##
- at 30BB2AAXX080903:3:52:65:437#0
-CAACGTAGTACGTGTCGTGTAGTACGATGTCTAGTGATGAGTTTGCTAATACAATGCCAGTCAGGCCCACTGGATG
-+
-67777788888888888888888877776555442222100./..---,,+++***))))()(((('$"$%"$$##
- at 30BB2AAXX080903:3:52:292:573#0
-GTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTACGTGGNGGCTCG
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))))((''""""%""#"
- at 30BB2AAXX080903:3:8:1477:553#0
-TGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGACANTGCCTCNN
-+
-67777788888888888888888877776355441221100.)-..-,,,+,**+(*)*)())'(''"%"$#$$""
- at 30BB2AAXX080903:3:38:1155:1161#0
-CCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTATTGATAGGAGATAGTGTG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))()'''"&&%%##$%
- at 30BB2AAXX080903:3:37:582:1497#0
-TCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACGCCAN
-+
-677777888888888888888888-7773555443222001/.--,-,,,+++***)))))'(((('$$%&"#$#"
- at 30BB2AAXX080903:3:58:848:1948#0
-TGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCACCACN
-+
-67777788888888888888888877776555443222100//...---,+,+*+*)))))((('(''&%#%"##"
- at 30BB2AAXX080903:3:41:1225:1810#0
-GTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACAGCTCCTA
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))))))((((&$$%%%%##$
- at 30BB2AAXX080903:3:50:543:824#0
-TAGGGTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCATCCTATGATGGCAAATCNACGAC
-+
-6777528888888888-8888888777764554232221/0//.,-----++++'+))))()(('('%""""#"##
- at 30BB2AAXX080903:3:45:617:1437#0
-GTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCAAATACTGCT
-+
-67777788888888888888888877776555443222100//...--,,++++**))))))((((''"%#"""""
- at 30BB2AAXX080903:3:46:1435:1085#0
-GTAGGTTTGGTCTAGGGTGTAGCCTGAGAATAGGGGAAATCAGTGAATGAAGCCTCCTATGATGGCACCTGCTCTA
-+
-67777788888888888888888877776555443222100///.---,,,++***)))))))((('$$""$"#""
- at 30BB2AAXX080903:3:49:989:436#0
-TATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTCTCTTGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))))(((&&"##%"""#
- at 30BB2AAXX080903:3:53:1395:1187#0
-GCCATCATAGGAGGCTTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCGAATTCC
-+
-67777788888888888888888877776554443222100//./---,,,+++**)**))()(((&"""#&"#$#
- at 30BB2AAXX080903:3:37:1020:102#0
-TATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCGACTTCNN
-+
-67777788888888888888888877776555443222100//..---,,+++++**))))((((('"&$&%##""
- at 30BB2AAXX080903:3:42:690:1087#0
-ATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCAGGGATGCCCCGGCCGTGCT
-+
-674777888880888888*888887777657104320210///.'--),,+++*)*%))))'(('#''$%#%##$"
- at 30BB2AAXX080903:3:60:561:140#0
-TCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCAGATCGGACGCCCCNN
-+
-677777888888888888888888777765554432221/0//..,),,,+,+****)*)'(((((''#&"$#$""
- at 30BB2AAXX080903:3:55:37:1695#0
-CATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGCCTATCCGGAATGCCCCGACGTTACGCCGACATC
-+
-67777788888888888888888877776555443222100//..---,,+,++****))()(((('"$##""##"
- at 30BB2AAXX080903:3:38:99:857#0
-TGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGTTCTTCTACTATTAGGATCCTCTCCCG
-+
-67777788888888888888888877776555443222100//..---,,+*+*+*)*)))(((((#$$&%$&##"
- at 30BB2AAXX080903:3:3:1374:1552#0
-ATGTGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGGTCTTCTACTAAGATCNAGCANCC
-+
-677777888088888888888888(71765524431/2/00-).,.--,,,+%('*)))(('((('%%""""$"#$
- at 30BB2AAXX080903:3:1:15:1043#0
-ATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGNNCTNACAC
-+
-67777788888888888888888877775555443211100./.'-,,+,+,+*')()())((''''""$""#$##
- at 30BB2AAXX080903:3:55:1032:786#0
-TACGGGTTCTTCGAATGTGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTTATGGAGGGTNTNTCTCGT
-+
-677777888888888888888848777.6555443222000//..---,,+++**)))&)))')'(&"""%%$#""
- at 30BB2AAXX080903:3:4:75:371#0
-GTATACGGGTTCTTCGAATGTGTGGTAGGGTGGGGGGCATCCATATAGTCACTCCAGGTTAGATCGGCNCTCGNTN
-+
-6777778888488888888888887/77651244122220.//-.--+&++&+(*))((((('((('""%""""""
- at 30BB2AAXX080903:3:57:1639:95#0
-TGTCAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTAACACACAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('(&$$%%&%$#$
- at 30BB2AAXX080903:3:51:1293:1482#0
-ATAGGGGAAGTAGCGTCTTGTAGACCTACTTGCGCTGCATGTGCCATTAAGATATAAGATCGGAAGAGCGCGGCAT
-+
-6777778888888888888888887777655524112.100//#,.--,-++++*(**))')((((%"$"#""#""
- at 30BB2AAXX080903:3:40:882:158#0
-CCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTGATA
-+
-67777788888888888888888877776555443212100/..-.---,+++**)*)(()((((''&$%#"""""
- at 30BB2AAXX080903:3:55:1126:950#0
-TATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCAGATCGGAAGGTGCGCGAC
-+
-67777788888888888888888877776555843222100//-.---,+,+****(()))'()'''$#$$$#"##
- at 30BB2AAXX080903:3:35:1659:1352#0
-TATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTNACCATTGN
-+
-67777788888888888888888877776555443222100-/.-(-,+,,,+*)**))))(()#&'""$%#""#"
- at 30BB2AAXX080903:3:56:1175:147#0
-GGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCAAGATCGGTACNACT
-+
-67777788888888888888888877776555443511.0//.--,--+-+,++**()))((()(&''$##"""#"
- at 30BB2AAXX080903:3:46:1611:1061#0
-TACAGGACTAGGAAGCAGATAAGGAAAATGATTATGAGGGCGTGATCATGAGATCGGAAGAGCGGTTCAGCATGGG
-+
-67777788888888888888888877776555443222100/...---,,-++***))*))('('(&%"##"""""
- at 30BB2AAXX080903:3:52:1512:647#0
-AGACGGTTTCTATTTCCTGAGCGTCTGAGATGTTAGTATTAGTTAGTTTTGTTGTGAGTGTTAGGAACAGCGAGCG
-+
-67777788888888888888888877776555443222100//..---,,+++****))))((('('%'"&"##$#
- at 30BB2AAXX080903:3:52:1512:649#0
-AGACGGTTTCTATTTCCTGAGCGTCTGAGATGTTAGTATTAGTTAGTTTTGTTGTGAGTGTTAGGAANAGGTAGCG
-+
-67777788828888888888888877776555443222100//..---,,+++***))))(()('('"""$"#"##
- at 30BB2AAXX080903:3:43:693:421#0
-CACTCACAACAAAACTAACTAATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCGCGC
-+
-6777778888888888888888887777655244322210&/...*--+,+++**()()((()('(''%#%&#%$#
- at 30BB2AAXX080903:3:57:1163:1524#0
-CTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCATCCTAGTAGATCGGAAGATGNACACA
-+
-67777788888888888888888877776555443222100//..-----+,+****))))))(((''%$""#$$#
- at 30BB2AAXX080903:3:48:1355:828#0
-ATGGCCAATTGATTTGATGGTAAAGGAGGAATCGTTGACCTCGTCTGTTATGTAAAGGATGCGTAGGGGAGTGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))))))(((''$""""""##
- at 30BB2AAXX080903:3:59:482:535#0
-GGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGTAGGAGTTGAAGATTAGTCCGCCGTAGTCGGTGTACTCCAA
-+
-6717778888888888888888887777435)443222110//.---,,,+++*+**))'()((''#'&#""##"#
- at 30BB2AAXX080903:3:52:504:1093#0
-ACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAAGATCGGAAGCGAAACAA
-+
-67777788888888888888888877776555443222100//..---,,++****)))))()((('$$""$%##"
- at 30BB2AAXX080903:3:37:1005:832#0
-AAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGCATGTAGGATTTGAAGAGTAGTCCGCTGCATCCN
-+
-677777888888888888883$88727765554432201-0/),.-+,,-*&'*)*)*)('((((''"""#"%##"
- at 30BB2AAXX080903:3:56:1232:1741#0
-GACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACCACACC
-+
-6777778888888888888888887,776555433221/0//0.---,,+,++*'**))())('('%&$#"#%$##
- at 30BB2AAXX080903:3:40:783:397#0
-AACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))())()((('$$%##$"#$
- at 30BB2AAXX080903:3:44:591:1677#0
-GTACTACTCGATTGTCAACGTCAAGGAGTCGCAGGTCGCCTGGTTCTAGGAATAATGGGGGAAGTATGGAGATCGG
-+
-677777888888888888888888777765554435221////,.--,,,+++***)))))')((((&""%#$"$%
- at 30BB2AAXX080903:3:43:892:1725#0
-ACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTGCCGCTGCTC
-+
-6777778888888888)88888837777655544+2211//-..---',,+()+)'*()'))&('(''&%##""""
- at 30BB2AAXX080903:3:3:129:387#0
-ACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGATAAAAGATCNCAACNCA
-+
-6277778888888888(88888787777.3554332(2110*-.,-",,,,+*%*'#*&()#)(((%'"#"$$""#
- at 30BB2AAXX080903:3:54:1223:1032#0
-TGTAAAGAGGTGTTGGTTCTCTTAATCTTTAACTTAAAAGGTTAATGCTAAGTTAGCTTTACAGTGGGCGCTGTCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((('''#"&%$"##
- at 30BB2AAXX080903:3:47:208:784#0
-GCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAACACCTCTTTACACTCACAT
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((('(&'###$#"#%
- at 30BB2AAXX080903:3:59:1518:686#0
-TAAGTTAAAGATTAAGAGAACCAACACCTCTCTACAGTGAAATGCCCCAACTAAATACTACCGTATGCACACANAA
-+
-6777778888888888888888887777655.443222100//..,.,,,+,++****)))((((('&$#%$$"##
- at 30BB2AAXX080903:3:54:682:1851#0
-TTCATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCCCCTCTAACAGTCCTC
-+
-67777788888888888888888877776555443222100//..-.-,,+++**+))))())(''&"$%"%$%#%
- at 30BB2AAXX080903:3:49:1243:344#0
-ATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGATCAGTACTGCGGCGGGGAGGCCCAGGATCGAGACTCC
-+
-67777788888888888888888877776555442222100//..---,,+++**%**)'(#(('%%%"#"##"##
- at 30BB2AAXX080903:3:55:523:676#0
-GTTGATGAGATATTTGGAGGTGGGGATCAATAGAGGGGGAAATAGAATGATCAGTACTGCGGCGGGGAGGTTACTC
-+
-677777888888888888888888777765554432221/0//-.-.-,,,,+*****)))(((((%""$"""###
- at 30BB2AAXX080903:3:48:1345:142#0
-CTAGGCCTACCCGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCACACATA
-+
-677777888888888888888888777;6555443222100//.,.-,-,+++****())('('(''$""##%%"#
- at 30BB2AAXX080903:3:48:247:1781#0
-GCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCGACCACACA
-+
-6747+78888888888888888887777.55534322210/-.#.-,+,,,++****))))(((('%"$$""$"#"
- at 30BB2AAXX080903:3:59:1320:999#0
-GCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCTACACCACA
-+
-677777888888888888888888777765554432220/0/./,--,+,,++****)*))()(((#$&&&$##$#
- at 30BB2AAXX080903:3:1:444:322#0
-GGTTAGTTGTGGCAATAAAAATGATTAAGGATACTAGTATAAGAGATCAGGTTCGTAGATCGGAAGATNAANTGCA
-+
-677777888888888888888888777765554432221000/...-,,,+++)*)**))(()((''"""#""##"
- at 30BB2AAXX080903:3:54:672:1670#0
-ACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTNCCTCAC
-+
-67777788888888888888888877776555443222100//.-.---,+++***))()))((((#&""%$%%$#
- at 30BB2AAXX080903:3:55:835:609#0
-TGGGTGGTTGGTGTAAATGAGTGAGGCAGGAGTCCGAGGAGGTTAGTTGTGGCAATAAAAATGATTAAGNGNCACA
-+
-67772788888088888888888877776555442222100/.----,,)++)***)))*)((((('"%"""%$#"
- at 30BB2AAXX080903:3:53:70:484#0
-AGGGGATGGCCATGGCTAGGTTTATAGATAGTTGGGTGGTTGGTGTAAATGAGTGAGGCAGGAGGCCGTGTCGTGG
-+
-677773888888888888888881787163524432,2100//*.(-++,+++&*)))(())#)''%"""#"%"""
- at 30BB2AAXX080903:3:3:566:1332#0
-CCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCNCATCNCA
-+
-67777788888888888888888877776555443222100//.----,,+,++**)*)'(()(''''"%"%$""#
- at 30BB2AAXX080903:3:41:830:1931#0
-TGCGCCCGCTCATAAGGGGATGGCCATGGCTAGGTTTATAGATAGTTGGGTGGTTGAGATCGGAAGGGCGTCTCGC
-+
-6777778888888888888888887777655344222/1101//.,-,,-+++***'*')%((#('#%$$""#$""
- at 30BB2AAXX080903:3:44:1293:462#0
-AAAGCCTATAATCACTGCGCCCGCTCATAAGGGGATGGCCATGGCCAGGGTTCTTGATAGTTGGGGCGAAGCAGCA
-+
-677777888888888888888888&7%735+5403.12.2,+%.%$*'+%,,(*#'#(#('('(%%''"""#"#$#
- at 30BB2AAXX080903:3:44:1777:239#0
-AGTGGGCTAGGGCATTTTTAATCTTAGAGCGAAAGCCTATAATCACTGCGCCCGCTCATAGATCGGACGGACATGC
-+
-67477788888888888888888877776559443222100/...-,,-,+++*+)*)()))#(&''"$"#""#"#
- at 30BB2AAXX080903:3:39:417:1670#0
-CCATCCCCTTATGAGCGGGCGCAGTGAGTATAGGCTTTCGCTATAAGATTAAAAATGCCCTAGCCCACTTCTTCTC
-+
-67777788888888888888885817756555440210000/+------,-++**(*&))('(%(''"%"$%####
- at 30BB2AAXX080903:3:1:1001:812#0
-CACTTCTTACCACAAGGCACACCTACACCCCTTATCCCGATACTAGTTATTATCGAAACCATCAGCCTNACNCACG
-+
-67777788888888888288880877-76545443110.10...--,,,-,++**)()(()(((('#""#%""##"
- at 30BB2AAXX080903:3:53:1077:309#0
-TACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTAGCCGCTACCATCCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*))(((''&#"%%%"##
- at 30BB2AAXX080903:3:51:851:1724#0
-CCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATGAGTAGGCTGATGGTTTCGACTAACT
-+
-6777778888888888888888887777655544322.100//.---,-,+++++*)(*)()(((('%$##"#"#"
- at 30BB2AAXX080903:3:57:579:976#0
-AACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACCC
-+
-67777788888888888888888877776555443222100//..---,,+++**+***))))(((''&&$"###"
- at 30BB2AAXX080903:3:41:241:1097#0
-CATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATGAGGCGGTCGGCG
-+
-6777778888888888888888887777655522522.10/+/.,.+,,,(*+***))))(((('(%$$%""""""
- at 30BB2AAXX080903:3:39:445:207#0
-GGTGCATGAGTAGGTGGCCTGCAGTAATGTTAGCGGCTAGGCGTACGGCCAGGGCTATTGGTTGAATAGGTACACA
-+
-677777888888888888888888777765554432221000/-,,--,,*++**))*)))())((%$"%$%"###
- at 30BB2AAXX080903:3:3:160:1439#0
-ACTCATTCAACCAATAGCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGANTCCANAT
-+
-677777888888888888888888772765554432320/1///-+--+,+*+**)'))((((('('"""&#$"""
- at 30BB2AAXX080903:3:51:352:1004#0
-GCCCTGGCCGTACGCCTAGCCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGACTCGCGAG
-+
-6777278888888888888888887777655454322210/./.-.,,,+++***)'*))()(((''"#"%"#"""
- at 30BB2AAXX080903:3:59:190:1177#0
-TTGGATTAAGGCGACAGCGATTTCTAGGATAGTCAGTAGAATTAGAATTGTGAAGATGACAAGTGTAGCGCANNNA
-+
-67777788888888888888888877776555.4/22.100//...--,,(+++*+*))))((''(''""$""""$
- at 30BB2AAXX080903:3:55:1673:1897#0
-TCCCTCTACACTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTTCACACCCACC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(''&$&%%%$%#$
- at 30BB2AAXX080903:3:33:295:1041#0
-CTTGTCATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGAGANCAACCANN
-+
-67777788888888888888888877776555443222100./..---,-,+++***)))(((('('"%#"###""
- at 30BB2AAXX080903:3:55:255:594#0
-TAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACCCAGCCCA
-+
-67777788888888888888888877776550443222101./..---,,+++***))))))'(('($"$%%%###
- at 30BB2AAXX080903:3:57:1552:1305#0
-TAGTAAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACACATACCA
-+
-67777788888888888888888877776555443221100/...---,,,+++**)))))()(((&'$&$"##$$
- at 30BB2AAXX080903:3:42:522:1136#0
-ATCGCGCCATCATTGGTCTATGGTTCGTGTGTTGGTTAGTAGGCCTAGGATGAGGAGCGTTGTGGAGTGGTGTATA
-+
-6737778888888888888888887'736$514432021.///,.-,-+-,++**))())()(((''&&#$$"#""
- at 30BB2AAXX080903:3:42:1309:868#0
-TACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGGTTT
-+
-67777788888888888888888877776555443222100//..---,,+++**+)))))()(('&&%%#%#"""
- at 30BB2AAXX080903:3:43:837:1057#0
-TACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGGTAGTAGGCCGAGTATGAGGAGCGCTATGGCACCGTGT
-+
-6777778888888888888)8888777745*5442222(00/.-.-,,,,++*****)())(&((('$$""$%#$"
- at 30BB2AAXX080903:3:55:825:1264#0
-TTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGTTATGGAGTGTAT
-+
-67777788888888888888888877776555443222100//..--,-,,+++**))))))()'(&$&"$$%#""
- at 30BB2AAXX080903:3:2:864:1183#0
-TGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGACTAGTATGAGGAGCGATANGGACATC
-+
-677777888848*88888888881777765(94(3022100-.--.--,),,)+*)*)())((#'%'"""#%$$"#
- at 30BB2AAXX080903:3:40:1507:1694#0
-GTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGAGATCGTAGGGTTGC
-+
-67777788888888888888888877776552343212100//-,-+,,,,(+**)*)))))((''&$%#""""#"
- at 30BB2AAXX080903:3:49:1026:996#0
-CGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGAGCGCTATGGAGG
-+
-67777788888888888888888877776555443222100//..---,,++++**)*))*((('(&$#$#$$"""
- at 30BB2AAXX080903:3:34:1041:1648#0
-TTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGAGGNTAGATANN
-+
-67777788888888888888888877776555443222100//..---,,+++******))(((('&""#""##""
- at 30BB2AAXX080903:3:4:1588:709#0
-TTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGAGATCGGAAGAGCGNCACCNCN
-+
-677777888888888888888888777765554412221/0-/.---',-,**+))*()))('((('$"%&$#"""
- at 30BB2AAXX080903:3:43:991:1309#0
-ATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTATTAGGCCTAGTATGAGGAC
-+
-671,4.8382888-8+.88,118,7317)-+/34#0)-.1/*&.,-(+$,('+(')(#&%('&'(&'$""%#%###
- at 30BB2AAXX080903:3:59:138:1822#0
-ATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTAGATCGGAAGAGCGGACGNNC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)*)))(()'(&'$%#$"""#
- at 30BB2AAXX080903:3:44:1284:1377#0
-TGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCCTAGTATGCG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))*))(('''%"%##$%"%
- at 30BB2AAXX080903:3:44:710:798#0
-TGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGAGATCGGAAGGGAGGGACACGCCA
-+
-6777778888888-888/8888(8-777655'%)1%(21&//+&..+,'+)+++''()))%('('(('"#""$"#"
- at 30BB2AAXX080903:3:41:1379:1187#0
-CATACTAGGCCTACTAACCAACACACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACTNT
-+
-67777788888888888888888877776555443222100//..,---,*++**)())))((((''&&%%%$"""
- at 30BB2AAXX080903:3:41:1594:920#0
-TTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGCACGTTCTC
-+
-6777778888888888888888887777655544322210.-/..---,,++++*+)))()(('((&&""%%""$%
- at 30BB2AAXX080903:3:56:454:912#0
-TTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGATCGGTGGAGCTG
-+
-6777778888888888888888887777655544332210///..---,,+&+*+))))))'(((#''$"%"##"$
- at 30BB2AAXX080903:3:53:375:802#0
-GGGGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTCGTAGTCC
-+
-677777833888888888888888777765554432221/0//-.--,-,+++****)()(((('(#$&%$$%"#"
- at 30BB2AAXX080903:3:42:228:196#0
-TGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTCGGAGGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)*))((''&&&$$&"&%#
- at 30BB2AAXX080903:3:8:1106:844#0
-GTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTANCTGCTCNN
-+
-67777788888888888888888877776555443222100//..---,,++****))))((()(('"$""%#"""
- at 30BB2AAXX080903:3:2:60:1894#0
-CTACTAACCAACACACTAACCATATACCAATGATGGCGCGATGTAACACGAGACAGCACATACCACGANGACNNCA
-+
-6777778888888888888838884777635504322200-//,-,-,,,,++&*))(((&(&((%'"""%%""##
- at 30BB2AAXX080903:3:41:1383:27#0
-TGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGCGGACAC
-+
-67777788888888888888888877774555443212100/.-.+-,,,**+*+**(*((((((&'%&%##$#"#
- at 30BB2AAXX080903:3:56:671:2024#0
-TGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTAGATCGGAAGAGCTTTCA
-+
-67777788888888888888888877776555443212100//...--,,-+++**))))))()(('&%$"""##"
- at 30BB2AAXX080903:3:35:824:1294#0
-GTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTNGTCTTAGN
-+
-67777738888888888888888877776555443222100//..---,,++****))*))()(('&""$%#""#"
- at 30BB2AAXX080903:3:41:363:1372#0
-TGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGAGATCGGAAGAGCAGCNGTCACACC
-+
-67777788888888888888888877776555443222000//..---,,,+++*)*)*))(('((%"$#"$####
- at 30BB2AAXX080903:3:57:439:55#0
-TGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGCTNGTTACT
-+
-67777788888888888888888877776555443222100//.----,,++++**)))()((('(&$$"#""#$"
- at 30BB2AAXX080903:3:55:1265:762#0
-GGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGCGACTCGCT
-+
-67777788888888888888888877776555443222100//..--,--+,+***)()))((('&'"&"#"""#"
- at 30BB2AAXX080903:3:35:411:459#0
-AACCAACACACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACNACCCCGAN
-+
-67777788888888888888888877776555443222100//..----,+++*****)))(((((&""$#"%"""
- at 30BB2AAXX080903:3:49:1094:1196#0
-AACCAACACACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACGCACTCCGC
-+
-67777788888888888888888877776555443222100//...--,,+*+***)))*()(('('$$"%#####
- at 30BB2AAXX080903:3:36:849:1531#0
-GTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGAGATCGGAAGCGCCCCCCGN
-+
-67777788888888888888888877776555445222100//.-----,,,+****))))()(('#$$###"#""
- at 30BB2AAXX080903:3:47:950:926#0
-GGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTATCGGGCCGC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))(((((("#"""##"#
- at 30BB2AAXX080903:3:49:881:609#0
-GGTGGTGTGTGGTGGCCTTGGTATGAGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGACATATGG
-+
-677777888888888888888)887,73455544322210.//..---,,++++****))((((%'#&$#"$#"""
- at 30BB2AAXX080903:3:37:951:1054#0
-AGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTCGTTACCAN
-+
-67777788888888888888888877776555443222100//..---,,+++)**)))))))((''$$%$"##$"
- at 30BB2AAXX080903:3:3:1203:1601#0
-CAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTNTACANAT
-+
-67775788888888888888888817776555443221100///----,,+*****)))())(((('%"%#%&""#
- at 30BB2AAXX080903:3:60:427:1283#0
-ACACACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACATCCNGTNN
-+
-67777788888888888888888877776555443222100/.,.----,,++(**))*())))(('%#%#"#"""
- at 30BB2AAXX080903:3:36:321:1673#0
-ACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGCTCTGCGCN
-+
-67777788888888888888888877776555443222100//..---,,+++*+)')))))()(('%#$"$#"#"
- at 30BB2AAXX080903:3:44:619:2017#0
-GACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTG
-+
-677777-8888888888888888872776553443221110//.---,,,+*+**)**)*)(((('''%%&%$%##
- at 30BB2AAXX080903:3:1:341:1411#0
-GGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGNCCNCACT
-+
-677777888888888884888888777765/554323210//..,,+-,,,+***))()())%'(''""$#"$$""
- at 30BB2AAXX080903:3:8:1447:1549#0
-CACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCNCCTCACNN
-+
-677777888888888888888888777765-5443222100//..---,,+,*+*)))))())((('"&##%##""
- at 30BB2AAXX080903:3:44:1712:1095#0
-TGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGTGTGGTG
-+
-67777788888888888888888877776555443222100//-.---,,++++**))*))(((('''&&&$"#"#
- at 30BB2AAXX080903:3:56:1020:2017#0
-ACTAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCGCAGTAC
-+
-67777788888888888888888877776555443222100/..----,,+,+**)*)))()((((''&"##""##
- at 30BB2AAXX080903:3:43:53:1026#0
-TAACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCACCTGCGACACA
-+
-67777788888888888888888877776555443222100//..---,,+++****))))(((''''"#"#$###
- at 30BB2AAXX080903:3:39:1330:161#0
-ACCATATACCAATGATGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCACACACCAGACCCGTGTCTCA
-+
-67777788888888888888888877776555443222100//.---,,-++++*))**)))'((#%"&$"%%#$"
- at 30BB2AAXX080903:3:34:701:316#0
-ATACGGATGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTGATGCCTGTAGATCGGAAGAGNCTAACGNN
-+
-67777788888888888888888877776555443222100//...--,,+,**)**)('()((((("$"""$"""
- at 30BB2AAXX080903:3:35:1380:1616#0
-TAATACGGATGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTGATGCCTGTTGGGGGCCAGNAAACACGN
-+
-67777788888888888888888877776555443202100/0..--,,,+++***)*)())(('''"""##%$#"
- at 30BB2AAXX080903:3:4:385:913#0
-CCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTCCTAAACACATCCGTATTACTCGCACNAGTCNAN
-+
-67777788888888888888888877576545443222100//,..--,,,++*+**))()))('(('"#""#"#"
- at 30BB2AAXX080903:3:3:1050:1036#0
-CAACAGGCATCACCCCGCTAAATCCCCGAGAAGTCCAACTCCCAAACACATCCGTATTACGCGCATCCNCGCANCA
-+
-6777778888888888888888277/(/255'.,22#1//.%&/.-+,+,*$++&*))))'))(('&""$""#"##
- at 30BB2AAXX080903:3:3:1447:1191#0
-AACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTCCTAAACACATCCGTATTACTCGCATCACNCGTGNCA
-+
-677777888888888888888883777763511/10,-(/-/*,--,,+,*)*)*'()((()(('''$""#%#"#"
- at 30BB2AAXX080903:3:39:90:135#0
-AGCAGTGCTTGAATTATTTGGTTTCGGTTGTTTTCTATTAGACTATGGTGAGCTCAGGTGATTGATACGCCTCTCA
-+
-67777788888888888888888877776555443222100/...---,,+++**))))))()(('&""#$"#"##
- at 30BB2AAXX080903:3:58:838:308#0
-AAATAGAGACCCAGTAAAATTGTAATAAGCAGTGCTTGAATTATTTGGTTTCGGTTGAGATCGGAAGAGGTCTCNC
-+
-67777788888888888888888877776555443222110//..---,,+++***))))))(((('&$$"$"#"#
- at 30BB2AAXX080903:3:58:830:1259#0
-GTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTCTATTTTCACAT
-+
-67777788888888888888888877776555443222100//..---,,-++***))))))(((''%$&%$#$#"
- at 30BB2AAXX080903:3:56:1234:725#0
-CTTGTAGGAGGGTAAAATAGAGACCCAGTAAAATTGTAATAAGCAGTGCTTGAATTATTTGGTTTCGGTTGTCTTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('$&$"%#"""
- at 30BB2AAXX080903:3:33:1640:1067#0
-TGAGGCTTGTAGGAGGGTAAAATAGAGACCCAGTAAAATTGTAATAAGCAGTGCTTGAATTATTTGGNGCATATNN
-+
-67777788888888888888888877776555443222100//..---,-+++***))))))()(''""$##""""
- at 30BB2AAXX080903:3:41:546:757#0
-AGTGAGCTGAGATCGTGCCACTGCACTCCAGCCTGGGCAGCAGAGTGAGACTCTGTCTAGATCGGAAGAGCTGCAC
-+
-67777788888888888888888877776555443222100//..---,,+++****)()))((('("&%"""###
- at 30BB2AAXX080903:3:41:1130:1596#0
-ATGGGTGCAGCACACCAACATGGTACATGTATACATACGTAACAGACCTGCACGTTGTGCACAAGATCGGGAATGT
-+
-67777788888888888888888877776555443222100/...--+,,++++*+**))(((((('&$"""""""
- at 30BB2AAXX080903:3:34:1449:1144#0
-TGGTGTTGCCCAGGCTCAGCTCTGCCTAGACACACGTGAGGGCCAAGATCTGGTTTGTGTTTCATGANCACACANN
-+
-67777788888888888888888877776555443202100//.---+,,,++)***))())'((''"&#%"##""
- at 30BB2AAXX080903:3:52:1258:1115#0
-TGAGCCCTGCCTTCCTAGGGAATCTTGTAGGAAAGACAAAGGTAGAGAATCTGTCTGATGGCGGAAGNCAATGATG
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))((((&""%#%%"##
- at 30BB2AAXX080903:3:37:1354:1363#0
-CTGGGGACTGAAGCACCCACCTCCTGTTCATGTTGATACACGGTGAGCAGAATATGGATGTGGGAGGTGTGTGNTN
-+
-67777788888888888888888877776555443222100//-.---,,++++**))*)'))(((%"&"#%#"$"
- at 30BB2AAXX080903:3:40:1436:495#0
-ACACAGGCTAGGGGGAGGGCAGTTGGAATTGATCCATGCCTTCTAGCTAGACTGTGGGTCCCCTCAGTCTTGGGCA
-+
-67777788888888388888/848777765555332-210,0/.-.-(,&+*)+')**&(((('(#'&$#&$%"#"
- at 30BB2AAXX080903:3:2:1482:1047#0
-TTTGGCACAGAATAATCCCGAGGGCTAAATGACATTGTTCCTACAGTGGGCACCTGAAGACAAGATCANCTCTCTC
-+
-67777788888888888(5888387.4765054132211.0*).,-"-,,+++*))'))))'&('&%'""$"#$""
- at 30BB2AAXX080903:3:50:636:1323#0
-GGTGGGCAGGTCACTTGAGGTCAGGAGTTCCAGACCAGCCTCGTCAACATGGCGACACCCTGTCTCTGCAGCACGG
-+
-677777888888888888888888777765$5443322000//..--,+-+++*+**)))))(((('"$#"$"##"
- at 30BB2AAXX080903:3:59:1629:55#0
-GTAATCCCAGCTACTTAGGAGGCTGAGGCAGGAGAATTCCTTGAACCCAGAAGGTGGAGGTTGCAGACACACCNNA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(('(''$$%%%#""$
- at 30BB2AAXX080903:3:39:1392:1551#0
-GGCAGATCACCTGAGGTCAGGAGTTCCAGACCAGCCGGGCCAACATGGTGAAATGTTGTGAGATCGGCACTCCCTC
-+
-67777788888888888288888,7/7.63*543%'(210/..().-,$,)++*#)(#)%)''(#%'"#$#""##$
- at 30BB2AAXX080903:3:40:910:769#0
-ACACACACACACACACACACACACACACATACACACAAACGCAAAAGCAGACTAAAACAGGAACTAATTAGACGAT
-+
-67777788888888888888888877776+55443.2110,/0.-++),+,(*+*')**(&')(%''"$&#%$"##
- at 30BB2AAXX080903:3:58:1402:1823#0
-GGGCAGGAAGACTATTTGAAGAAATGTGTTTGAAAGCTTCCCAAATTTCACTAAAAACAAATATATACATTACGCN
-+
-6777778888888888888888887777655544323211///..---,,+++**+)*)))()((''&"%$$$"""
- at 30BB2AAXX080903:3:3:1506:354#0
-CATCACCTACAATCTTACCAAAAATAGAACCAAGCACGTGTCCTAGTCAAACAGATCGGAAGAGCGGTNTATANAN
-+
-67777788888888888888888877776555443222100....--,,-+,+***(*)*)()('('%"""%#"#"
- at 30BB2AAXX080903:3:55:1172:1085#0
-TATGCAGTATCTGGCTTTCTGTGCCTGGATTATTTTACTCAGTATAATGTCCTCCCGGTTCATTCATGAGATCACA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((((&'%"%%$"#"
- at 30BB2AAXX080903:3:39:484:1224#0
-TGGGGGTGTTGTATAGCTTCAGTAATAGATCTGAATGAAGGCGGCCTAATCCTTCCTTGAGTAAACAGCTTAAATC
-+
-6777778888888888888888887777655544322.200//.-----,,,+*+*))))))(((((%$$&$%"""
- at 30BB2AAXX080903:3:43:759:622#0
-GCCTGTGCAGGCATTCTGCTGGGTCACAAAAAGAAAAAAAAAAAGCTGACTTTGCATGCATCCAGATTGAAAAGGG
-+
-67777788888888888888888877776555443222100//..-,-,,+,+****)))))((((''$%&$#"#"
- at 30BB2AAXX080903:3:46:179:1337#0
-GGTGGGGTAGCTCAGGATGCTGGTCCAGGTAGACAGGTGCTCCAATGCCTGAATTTCTGCCTGAGATCAAGCGAGG
-+
-67777788888888888888888877776555443222100//..---,,+++****))*)((('('&"""$$#"#
- at 30BB2AAXX080903:3:37:817:1511#0
-GAAAATTCCTCAAAGATCTAGAACCAGAAATGCCATTTGCCCCAGCAATCCCTTTACTGGATATATGACCACAGCN
-+
-6777778888888888,888888877776555(432.210///..--,-,+)+***))*))(((((($$%#"#"""
- at 30BB2AAXX080903:3:4:674:204#0
-CACGTGGATACATGGAGGGGAACAACACACACCAGGGCCTCTCAGCGGGAGAGGGGGAGGAGAACACANACCANCN
-+
-27377788888888888888,8)871436051(/3.2*01./,.-(-,,,&+++*+'*()')#''(#$"%&##"#"
- at 30BB2AAXX080903:3:33:598:321#0
-CAACACACACCAGGGCCTCTCAGGGGGACAGGGGTAGGAGACCATCAGGACAAACACATGGATACATNCTCGTCNN
-+
-677777888888888888888888777765554402221000/-/---,,++++****))))(((('"%"$"#%""
- at 30BB2AAXX080903:3:41:758:1171#0
-AAGGAGAAAGAGTATTTCCAAACTCATTTTAAAAGATCAGCATTATTGTTTTTTTTTTAAAGTGAAGTTCCCCTTC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()(((''&&&%%##$
- at 30BB2AAXX080903:3:50:754:114#0
-AGGGAGGTGCCCGCGCTGGGTCGGAGGAGCAGGAGTATGGAGGGAAGACTCCTGGGTGGCATGGAGCTGCTGCGCC
-+
-6777778488888888888888887777655542302210///.+--,,,++****%*)((((((''""###$##"
- at 30BB2AAXX080903:3:46:922:951#0
-CTAGGCACTGCCCAGCCCTGTGTCAGCCAGGGCTGAACACCCACAGGATAAGGAAGCCTGAGTGCGTACCTCTCCT
-+
---777788888888888808282/77772525443022*0./...(,,),+++***&*%('(%(((%%$$#$$##$
- at 30BB2AAXX080903:3:52:920:1172#0
-GAGCCAGACCACTTGGCTCCCTGGCTTCAGCCCCCTTTCCAGGAGAGAGAATGGTTCTGTCTTGTTGGTTGCCCCG
-+
-67777788888888888888888877776555443222200//-.--,,++++*****))())((('%$"""#"#"
- at 30BB2AAXX080903:3:33:488:391#0
-AGAGAGCAGCAGATCTCCCTGCACAGTATTCGAGCTCTGATAAGGGTCAGACTGCCTCCTCAAGTGGNACTTCANN
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))'((('"%$#"$#""
- at 30BB2AAXX080903:3:4:1365:519#0
-GTCAGACTGCCTCCTCAAGTGGGTCCCTAACCCCCGTGTATCCTGACTGGGAGACACCTCCCAGTAGGNACACNGN
-+
-6777778888888888888888887777655144323220/././.---,+,++*)())()'((''#$"%%#$"""
- at 30BB2AAXX080903:3:3:1355:328#0
-AAATCAATAAACATAATTCATCATATAAATAGAACCAATGGCAAAAACCACATGCTTCTCTCAATAGANACACNCN
-+
-67777788888888888888888877776555443.22100./..---+,,++***)))())(((''%"#$%$"""
- at 30BB2AAXX080903:3:42:292:1971#0
-CACAGTGGTCCTTTTGTTCTTTGGTCCACCCATGTTTGTGTATACACGGCCACACCCTAATTCACAGATGGTCCAC
-+
-+7777788828888888888888877476055445222101//..---,,*++*)'**((')(('((%&%#"###"
- at 30BB2AAXX080903:3:58:334:753#0
-AGAATATGTATAAGTACAAATGGAATATGTTGGAAATGAGGAATAGTTAATATCACAGGTCATTTAAACACCTANA
-+
-67777788888888888888888877776555443222100./..---,-+,+****)*))))(((('&&&#"#"#
- at 30BB2AAXX080903:3:52:493:203#0
-CAGTCATGCACATCAGAAAATTAAATGGCGAGTCAAGACCAAATTCCTAGTCACAGTTATGTTCTGTTTCCCGGTC
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((('''"$$$$#$$#
- at 30BB2AAXX080903:3:36:280:920#0
-TGGTGTATGTTGAAGCATACAGATTGTCTACATCCTAAAAATCATTTTGGTGAATAAAGGAAAATACTCACGCGCN
-+
-67777788888888888888888877776552433522011/.-..--,,+++***))))((((''#$$"$"#"#"
- at 30BB2AAXX080903:3:1:516:1108#0
-ATTTGAGGTCACTTAGTTTGCAGAAATTTGTTACAGCAGTAATAGAACAAGTGGTTATCCATATGAGTNCANTTAC
-+
-677777888888888888888888777765554432221.0//..--,,,+'+*'))*(((((((('$"#""""#"
- at 30BB2AAXX080903:3:55:382:1444#0
-CACACCTCAGAGATTCTGTACATGTTCTTCCTCCTGCCTAGAAAGGATCGTCCCTCCACTTTCGCCAGCTATCTCC
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''"&#%$$"$%
- at 30BB2AAXX080903:3:52:260:1286#0
-TGTTCAGCCACACTGCTTTGGTGTCACAACTGCACATTGGTTTCACAGCTGCAGGACAAGTTCGAGCACGTTAAAT
-+
-6777778888888888888882887777655544322210///..---,,+++****)))(((((''"$"&%$$#"
- at 30BB2AAXX080903:3:37:1165:1340#0
-TGGTGGGAGGTGAGCTTTTACCAAGTTCCACCACCCCCAAAGTGTGTGGGGTTGCGGGCCCTGGGCTNTCATCACN
-+
-67777788888888888888888877776555443222101/...---,,+++***))))()()(''"&&&$#"$"
- at 30BB2AAXX080903:3:35:588:449#0
-TCATGTCTCCTGACACCCAGTTGCCTCTACCACTCAGATGATGTCAGGCCCAGTCCCTCAGTGCCCTNACAGCANN
-+
-67777788888888888888888877776555443222101//..---+,,******))()')('('"$###$"""
- at 30BB2AAXX080903:3:50:542:52#0
-GTCCTCTGAACTCCTGTCAGTTGCAGCCCAAACACTCCAGAGCTCGGATACCAAGGAGCAGCTTCTGTACACCAGC
-+
-67777788888888888888888877776/+,44322200,/...--,,++++))*'*)')(#'('%""$"$#""$
- at 30BB2AAXX080903:3:44:1308:706#0
-GAAATAGACCGTCAGGCACTACGGGAACTGACACAGGTGGCGTCCGGCACTGCATCATACTAGATCGGCTCGTCCG
-+
-6777778888888888888888887777655334322110,/..'.-,,,,)+**)*())((((#''%"#%"""""
- at 30BB2AAXX080903:3:57:1344:1654#0
-TGAGGGAGGTGACCCGTGGGCAGCCCTGCTGTCGCCCACGCGAGCTGCTCATTCCATGCACATGGCCATGCACCAC
-+
-6777778888888888388833862747+55$24101,,0&/-,)+-+,+**+))##((''(#''&#"$#$"####
- at 30BB2AAXX080903:3:3:1418:1533#0
-TCCCCACTCTCACTCGGTCACCCACTCCTTGAACTTGAGATCGGTGTCGGTGGTGCTAAAGCCATCATNGGCANAC
-+
-67777788888888888888888877776555542022101//.--+,,+*++'*)(()(&#''#&%""""&$"##
- at 30BB2AAXX080903:3:43:1681:586#0
-CATCCGAGTATGTGTAGGAGGAGGACAGGGTGTGACCATAGACTGCCAAAAGCTGCAGGTGGATCGGGGGGGGGAG
-+
-67777788888888888888888877776565343222100//..---,,++++***))()()((('$%##"""#"
- at 30BB2AAXX080903:3:38:1253:755#0
-GCGACCTCCCAGGCCCAAGTCCCTGCCTACCTCCCAGCAGCCCGAGTGCGACCCTGTAGATCGGAAGCGCGCCGCG
-+
-677777888888888888888880777.655544332210///.,-)--,*)++))(*))'((('%'"""""$"#"
- at 30BB2AAXX080903:3:44:523:644#0
-CCACGCGGACAGAGGTCAGCGTGATCCCCTGCCTCAACAGGCCACCGTGAGGGGGGAACAGGATCGCAGTCGGGCG
-+
-67777788888888888888888877776555443222100/....-+,++,+**+()()))(((('&##%%$$""
- at 30BB2AAXX080903:3:56:391:186#0
-CTTGCCTCACACCGGCCCCTCCCACGCGGACAGAGGTCAGCGTGATCCCCTGCCTCAACAGGCCACCGTCTACCAC
-+
-677777888888888888888888777765554432/2100/..,---,,++++***()))))('('$%$"#"###
- at 30BB2AAXX080903:3:39:1589:255#0
-TCCGGTCGGTGGGCTCCTCCACGCCAAGGTTGGGCCTCCCGGCGACCGCCGCAAGACCGGAAGAGCGGATCAGACT
-+
-677772888.8888888888088871776$454412,101//./,-,+-+))#&*%#'&(''(''%%""""$"##"
- at 30BB2AAXX080903:3:53:658:868#0
-GCGGCCTTGGTCGGCCCACAGCTTCCTCAAGCCAAGCTCCCCAGGCCCAGGTCAGGCCTCACGGTGGCTCCTACAG
-+
-67777788883888888888888877776555443222100//.--.,,-++++**)))*))(((''%#"""#%##
- at 30BB2AAXX080903:3:42:1336:435#0
-TTGGGTCTCCAGGCCCGATTCCTGCCTCTCAACAACCTCTTTGGACTCAGTGCCTACCCATCTCCTGGCGGCCCCC
-+
-677777888888888888888888777765554232221010/..----,*++*****))))()('''&&&#"""#
- at 30BB2AAXX080903:3:42:1023:641#0
-GTAGACGCTGACAGGAGGCAGGAGCGGGGCATGGACAGGTCAACTTGAGGAGATTTTGGGCCTTCATAGGCCCAGC
-+
-6777778888808888888888*8377765/5443202.0,/.-)--,,-+*+(+*)(%*('(('&'%&"####"#
- at 30BB2AAXX080903:3:54:707:1524#0
-CAGGCATGAGCCACCATGCCTGGCCTGGGCTAGTCCCATATTCTCTAGAGTTCTCTTTACTCTGTGCTAGCCACCC
-+
-67777788888888888888888877776555443122100/...---,-,++***)*))))(((''""%#&$"$#
- at 30BB2AAXX080903:3:39:1503:787#0
-TACGAAAATTCCAAATGTTAGTTGGGCATAGTGGCAAGCACCTGTAGTCTCAGCCACGTGGGAGGGTTGTGACGCT
-+
-67777788888888888888888877776555443222100//.-----,+,+*)***()))(((#%"%#%#""$#
- at 30BB2AAXX080903:3:2:970:1734#0
-ACGCTGCTGCTCATCTGAGAAGGTGGAGCTCAGGCGGGAATGTGAGCAAAGGGGAGTGGCTGGGAAAANAGCACAC
-+
-6777778888888888888.888&77176555443222.0./-.---,,++++***())(()(%#%#""$#"#$##
- at 30BB2AAXX080903:3:44:1580:667#0
-AAAGAACTCATATTACTTTACTTGTCACATTTCAACATCTTTCCTCAGCTTATTAGCTCTATTTCTTTTCTGTCTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((''&&'&&%&$$#
- at 30BB2AAXX080903:3:50:608:210#0
-ACGATGGAGCTGTGCCTGTGGAGGCTGGTGTGGGGCAGGAGGCTCATCTGCGGGGGCTGCCCCGGCGCCCGAGTCT
-+
-677777888888888888888888777*6545%43%,2..1/)#-+**&(+*+'**%#(&'%#(#%&""#"""##"
- at 30BB2AAXX080903:3:45:1267:1277#0
-ATAATCATGCCTCACTGCAGCCTTGACCTCCCAGGCTCAAACTTCAGCATTCCGAGTAGCTGGGACTACCGTTAGC
-+
-67777788888888888888888877776555443222100//..---,,+++++*()))))()(('""#"""""#
- at 30BB2AAXX080903:3:1:155:790#0
-TCAGCAAAGTGGGAATATTGTACAGTGTGTGTTGAAGTTCCTATACAACATTGTTTATCTAGTTTGGANTGNAGTC
-+
-6777778888888888888888887777655544322110,//.-'-,,,+)+***')#)()###('$""""####
- at 30BB2AAXX080903:3:35:28:1542#0
-AAAGTTCTTCTTGCTGTCAAAAGAATATGCGTGAATAAGTCATTTTTACTTATTCTTCTGTTTTTTTNTACTGCNN
-+
-67777788888888888,8888887/7765524532001*/./..-(,+,+*+*)*)))))())(%&""#$""#""
- at 30BB2AAXX080903:3:48:1531:1112#0
-TACCCTACGTCACGGCAGCCTTCGCAGAAGAGGCTAATGGCTCACAACACCCCCCCCAAGCACAACACGCGCTCTC
-+
-67777788888888888828'8)80377)5564$++(#(#)#*)'++$,$&)%&*'%'#(&&%'&&#&"$"""###
- at 30BB2AAXX080903:3:37:171:949#0
-GCTGTGCCTGTGGAGGCTGTTGTGAGGCAGGAGCCTCATCTGCGAAGGCTGGCGTGGCGTAGGGGGGCCCTGATCN
-+
-677777888888888888868888477005+11010,%/.--/.%.,-,(,&+***'(*##)(((##%%""##$$"
- at 30BB2AAXX080903:3:33:821:269#0
-CTTGTTTTCCTGCAACTGGATGTTCCCACCTGAGCGTGATGGGAGAAAGTGACAGATCAATAGGTATNACACTTNN
-+
-67777788888888888888882877776555443212100//...-,,+++++*)**)()))('('"$&###"""
- at 30BB2AAXX080903:3:2:1207:1193#0
-GGAATGTGAGCAAAGGGGAGTGGCTGTGAATACAGACGAAACTTACCCCACCCCCCCTCTCAGCACCANACACCTC
-+
-677777888888888888883388$7$&85,.$3/0/'&0&)).,.,,-(*$*+)#&#%'(###''%""$$###"#
- at 30BB2AAXX080903:3:51:246:835#0
-ACAGCAGGAGGTGAGCGGGGTCGAGTGAGGGAGTGAGGGAAGCTTCGTCTGTATTTACCGCCACTCCGCTGTACTC
-+
-6777778848888888885888857777645%4230221.0/'.-(-#,-+')***()#(')'&('%"##"#"#"#
- at 30BB2AAXX080903:3:42:632:166#0
-TCACCAACAGCCAAAGGCTTTATCAATCATGCTTGCATAATAAAGCCTCCATAAACACCCTGAAAGGGGTCGGCAC
-+
-67777788888888888-88888177776+5544322+0/0/0.-.-,,&)+*****)))()(((''&$##""#$"
- at 30BB2AAXX080903:3:36:113:1093#0
-GGCCAACACAACAAGACCCCATCTATACAAAAAATAAAAGAAACTAGCCAGATGTGGTGGGGGAGGGTGATACTGN
-+
-67777788888888888888888877776555443222100//..----,+++***)*))(('#((#""$$"$"#"
- at 30BB2AAXX080903:3:3:474:375#0
-AATGGTGCAGTCATAGCTCATTGCAGCCTTGATTGTCTGGGTTCCAGTGGTTCTCCCACCTCAGCCTCNCTCANCN
-+
-67777788888888883828888877456553443212100./,---,,-+,**()))'((((('&'&"&$&$"#"
- at 30BB2AAXX080903:3:42:876:1457#0
-CTGGAGTGCAGTGGTGCAATCAGGCTCACTGCAGCCTTGACCACCTGGGCTCAAGTAATAGATCGGAAGACTNCNC
-+
-67777788888888888888888877776555443122100//..---,,+,++**)*))))(((('&&$&$"#"#
- at 30BB2AAXX080903:3:42:318:823#0
-TAAGGAGTACACAACCTAGATCCCTCGCATGCACACTTCACAACAGAGTTTGTGCTCCTATGACAACCTAATGCTG
-+
-67777788888888888888888877776555443222100//..----,+++*****())(((((($&&%%%$##
- at 30BB2AAXX080903:3:3:160:1800#0
-ACCACCTGAGCTCCATGTCCTGTCAGATCAGCAGCAGCATTAGGTTGTCATAGGAGCACAAACTCTGTNGTGNNCT
-+
-677777888888888888888888/7/76/554422220./-/.,--++++)+*)))))')'('(''"""$#""##
- at 30BB2AAXX080903:3:47:1312:1872#0
-TGAGCCTGGCAGGTGGAGGCTGCAGTGAGCAGAGGTTGTGCCACTGTACTCCAGCCTGGGTGACAGAGTCCGTGTC
-+
-6777778888888888888888887777655544322200,-.-,---,-*+(+'***))((&#'(%$"#$%"""#
- at 30BB2AAXX080903:3:52:82:1955#0
-GGAACTAGCAGAGGCCAGGCATTGTGGCTCATGCCTGTAATCCCAGCAATTTGGGAAGCCTAGGCAGGACGGCACG
-+
-67777788888888888888888877776545413222100./.--,,+,++++*)))(()'(('''""##"""#"
- at 30BB2AAXX080903:3:40:721:346#0
-AGAGGAGAAAGAGTGTGCGTTCAAGGGGCAGATGAGGCTCAGTTGGACTCCATAGCAGATGAAATGGAGCGGGGTA
-+
-677777888888888888888&8877776555443222100/...--,-,+*+*****)))()((''$&#""""""
- at 30BB2AAXX080903:3:36:636:995#0
-GTATTTTTGATAGAGTCAGAGTTTCACCGTGTTGGCCAGGCTGGTCTCGAACTCCAGACTTCAGGTCGCGTGCCAN
-+
-6777778888888888888888887777655544322210.//...---,+++**)*)))(((((&&$%"""##""
- at 30BB2AAXX080903:3:1:83:1580#0
-GATCTCGTCTCTATGATAAAAAATTACCTGGACATGGTGGCACATGTCTGTAGTCCCAGCTACTTGGGNGCNCACA
-+
-677777888888888888888888777765544432221000/.-----,,++*+**)))()(((('""""""##$
- at 30BB2AAXX080903:3:49:1415:1092#0
-GCCCAGGCAGGGAAACCAGCACTATACAGACCTGAACAATGAAGATGGCACATTTTGTTCAGATCGGCACGGCTCA
-+
-67777788888888888888808877776555443222100/...---,,+++***))))))(((''$"$""#"##
- at 30BB2AAXX080903:3:41:862:1482#0
-CCACCCAGAGTAGTATGTAGAGGAGTCATTCAGGACCGTGCTCATACTTCATTGTATCAAATGGGAGATCCCTTTC
-+
-6777778888888888888888887777655544232200///..-,,,,,,++***()())()((&$%"&"""##
- at 30BB2AAXX080903:3:33:161:1240#0
-ATGAGCACGGTCCTGAATGACTCCTCTACATACTACTCTGGGTGGCTTGAAGTGAAAGATCGGAAGANTCTCACNN
-+
-67777788888888888888888877776555443222100//..---,,+++*+*)))))((((''"$##$##""
- at 30BB2AAXX080903:3:49:1185:745#0
-CCCTACAAAAAAAGCACAAGACAGAATGTGAGCCAAGCAGCTTAGGGTTTAGGCAAGGCTTCTGCCTACACGCCAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*)))(('('"#$%"#$#"
- at 30BB2AAXX080903:3:2:1543:2014#0
-AAGAAGCAGGCCCAGGCTGGGCGCAGTGGCTCATGCCTGTAATCCCAGCACTTTGGGAGATCGGAAGGNTGCNCTC
-+
-677777888888888888888883-7+765/5-&2/1*1&,+#,++&(++)&%&)))$(&##&'##%""%"#"#"$
- at 30BB2AAXX080903:3:44:1666:1166#0
-TGCCGTGGCTTGAGGGCAATGACGTGATCTCAGGTCACCACATTCTCTGCCTTCCAGGTTCAAGCAATTCTCTTGC
-+
-6777778888888818888888887777655544/2221/0//.----,,+++**))))())(((('%&%&&"#$$
- at 30BB2AAXX080903:3:36:1323:706#0
-CTTGAACCTGGAAGGCAGAGAATGTGGTGACCTGAGATCACGTCATTGCCCTCAAGATCGGAAGAGCGTNCTTCAN
-+
-67777788888888888888888877776555443222100//.,---,,++++)*))))))(((''$$"$"#%#"
- at 30BB2AAXX080903:3:49:40:1805#0
-CTGGAAGGCAGAGAATGTAGTGACCTGAGATGACGGCATTGCCCGCAAGAAACGGAAACAAGAAGACATATCGCTA
-+
-67777788888888888888888,7'776/5$44/022000+.+%+,+,(%*+**(&*%#((((%(#$"""$"#"#
- at 30BB2AAXX080903:3:47:999:1737#0
-TGCCTTAGCCTCCCAAGTCACTGGGATTACAGGTGCCCACCACCACACCAGGCTAATTTTTGTATTTTTAGCGGTG
-+
-6777778888888888888888887777655544321212///.,-.-,,+,++*(*)))(((((('"""##""""
- at 30BB2AAXX080903:3:33:1446:1159#0
-AGTTCGAGACCAGCCCAGCCAACATGGTGAAATGCCATCTATACAAAAAATACAAAAACTAGCCGGGNCATCTCNN
-+
-67777788888888888888888877736555443222100///.---,,+++***)))))(()(''"%"$$"#""
- at 30BB2AAXX080903:3:44:1695:922#0
-AAAAGTAGCTAGGGATTCCAACTAGGTGAGAAGGAGAGTGGGGCAGAGCCAGACCAGACAAGGACAGATCGGAACG
-+
-67777788888888888888888877776555443222100//..---,,++++**)))*)(((('''"%&&"#"#
- at 30BB2AAXX080903:3:47:1571:861#0
-ACTGGCGTGCACTCCTCCCCCCCCTCAGGCAGTGGCATGAGTTCCATGTGAGCGCTGAGATCGGAAGAGAGCTATA
-+
-677777888888888*88888888(77765,5)430./1*0$++.,+,&-++(+(#*()('(((&'%$"""###"#
- at 30BB2AAXX080903:3:46:1273:785#0
-CACTGGCGTGCACTCCTCCCCCCCCTCAGGCAGTGGCATGAGTTCCATGTGAGCGCTGTCCTGCTCCATCTGCTAT
-+
-6777778888888888888888887777655541322210./....-,--+*+**)())((((((('""$%$#"""
- at 30BB2AAXX080903:3:41:251:1302#0
-TGAGGCAGGAGAATCACTTGAACCTGGGAGGTGCAGGTTGTAGTGTGGTGAGATCACGCCACTGCACGCCCGACCG
-+
-6777778888888888888888889777655241222010/./-.---,,,++*))))())((((('%&$%&$"#"
- at 30BB2AAXX080903:3:58:277:1811#0
-GAGACAGGGTTTCGCCATGTTGGGCAGGCTGGTCTTGAACTCCTGACCTCAGGTGATCCGACTGGCTCCGTGACNN
-+
-67717088888818/,8888083716770352.$//+,*&-+*,,(**++)))$''(''(''&('&&$&"""$$""
- at 30BB2AAXX080903:3:45:892:521#0
-TGGCCGGTTCTCCTAGCCCCATGGCTCTAGGGATGGAGGACGCTGCAGGAGATGCAGCGCTCACTTCCCCGCTGAG
-+
-6777778888888888888888887775655544322210///..-+-,+++)+*))()('(''&&&&"###"$"#
- at 30BB2AAXX080903:3:49:1133:1296#0
-TGGGAATGCCTACTGGTTACCTTGGTAACAGAGAACAAGGCATTTACCTGATATGAGTGTCTTGGTTCTCATCCTC
-+
-67777788888888888888888877776555443210100//..--,-,+++***)*))())((''&"%"#""#$
- at 30BB2AAXX080903:3:59:222:828#0
-ACACCCCACCTTACCTGGTTTCTTCCTGCCAGGGCCAATCTTCAGACCTCAGGACTTTACAGCCTATCCCACTNNC
-+
-67777788888888888888888877776555443220100//..---,,++++**)))))(()((('&&###""#
- at 30BB2AAXX080903:3:52:62:1203#0
-AGGCACTGCGCATCCATCCAGAGGGGCACTGCCTCAGGCTGCTCGCTGTTCACTGCCTTCTCAAGCAGGCCCTTGT
-+
-67777788888888888828888877776555443222100./..,,-)%*'***))&)(((#'&'%""#$$####
- at 30BB2AAXX080903:3:34:365:1159#0
-TTGGTAGCTGTGAACTCTCCATGCCTCAGGGACCTGCAGAACTGAGCTCTGTCTGAGCCAGGTTCCANTCCCTANN
-+
-6777778888888888888888887777655244322111/...--,,,,)+***)*(()))'('''""$##"#""
- at 30BB2AAXX080903:3:44:1376:1446#0
-TTTGAGATGGAGTCTTTCTATTGTCACCCAGGCTAGAGTGCAGTGGCGTGATCTTCGCTCACTGCAACTACCACCC
-+
-67777788888888888888888877776055243222$0,).#--"-)-+''(#()'((&'#'(##%"""%"#"$
- at 30BB2AAXX080903:3:50:1603:38#0
-TTGATGAACATAGAAGTACTGTATGTAGAATTGACCCAGTGCTGCCCTGGCAACTTTGTAGATCGGACACGACCCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('$"$""#""#
- at 30BB2AAXX080903:3:36:1529:604#0
-ATTTCAGGTCACTGTTGGCCTTAGAAGAAGAGCCCAAAGGCAACAAGCAAAGGCGCTGGAGATCGGCGGCCCCCNN
-+
-67777788888888888888888877776555443222100//..---,,++++***))())((((#$#$#$##""
- at 30BB2AAXX080903:3:53:310:2026#0
-AAATACAGCGTCCTTTACAAAAGCAGTTTTGTCTTTCAAAGCGCATAGATAAGGCACTCAAGTAAATCCGTCNGCT
-+
-67777788888888888888888897776555343112020./,----,,,,+**#()))(((('''$"##"""##
- at 30BB2AAXX080903:3:3:1210:143#0
-CTTGAACCCGGGAGGCAGAGGTTGCACTGTGAAAAGATCACACCACAGCACCACAGTGCGTGCGACGCNACACNAN
-+
-677777888888882,88,,%8*2(7/;6$+')&3,2*$*&/+&,-&$$,)$#$###&#(#'#&##%$"$&"#"""
- at 30BB2AAXX080903:3:49:1671:1599#0
-CCCAGCTACTTGAACCCAAAGGTTCAAGGCTCCAGTGAGCTATGATCCCACCACAGCATTCCAGCCTGCGCTCTCA
-+
-67777788888888888888888877776555443222120...-.,,+,+*+***))))((()'('$#%###"##
- at 30BB2AAXX080903:3:35:811:1022#0
-ATGCGCGCTCCTGGAAGAACCAGCAGCCCCCACCGCGAGTTCTGATTGGCCCTGCGTGAGTGGTAGTNCGCCTCCN
-+
-6777778888888888888888887777155244322-1000/..+-+,,+,****%)()()(#'(%"%"&$#"#"
- at 30BB2AAXX080903:3:57:881:338#0
-CGCAGAGTCTGGCCCTTGCTGCGCCCGGCGCCGAAGACCGGGAAGTCGTAAAGCTCCTCCTCGCGGCCTGTGTCTC
-+
-6777778888888888888888887757655541122-/00/+..'--%,+++***)(*)()(#(('$&"%%"$##
- at 30BB2AAXX080903:3:42:1438:281#0
-TGAGACCAGCCTGCAGTGAGCCGAGATTGCACCACTGCACTCCAGCCTGGGAGACAGAGTGAGACTCCATGGATCG
-+
-67777788888888888888888877776555443222101/./..-,,,+*+**))()'*)(((''&$%"%##"#
- at 30BB2AAXX080903:3:56:879:710#0
-TCGGCTCACTGCAACCTCCACCTCCTGAGTTCAAGCGATTCTCCTGCCTCAGCCTGCCAAGATCGGACGGTCCTCT
-+
-67777738888888388888888877736)55443020101//---,,+,,++**(#*)((('((''"&"#$#%"$
- at 30BB2AAXX080903:3:33:687:808#0
-AGCCTACTCCAGGCCAGAACTGTTCACGTGCCTCCTCTCTGCTCGTGTCCTATATATTACCTAGCAGNCACTAANN
-+
-67777738888888888888888877776550443222100//..---,)++++****))))()(('"%##"""""
- at 30BB2AAXX080903:3:49:1285:1095#0
-CAATCTTTTCCAAACTCAAGGGAACTAAAGAGGCATGAAATCTAAATGCTTAATTCTGGATTTCATCTCTCGTCTA
-+
-67777788888888888888888877776555423222100./..----,+++***))**)(()(('%#$####"#
- at 30BB2AAXX080903:3:57:1680:1669#0
-TTGCATTCCATTCCATCCCATTCCATTCCGTTCCATTCCATTCCATTACATTCCAATATCGTAAGACAAAACACAA
-+
-6770*78/-288.).8()).88**-87+(/01&$(11*&*/-'#%-+'$(+*#$#'#'(######%#""#%%$%$#
- at 30BB2AAXX080903:3:47:403:759#0
-GACACAAATGGAACCAAATGGAATGGAATGGACTCGAATGGAATACAATGGAATTTAATGGAATGGACTCTCATGA
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))))('''$%&%###$"
- at 30BB2AAXX080903:3:51:696:858#0
-TTCTATTCCATTCGAGTCCATTCCATTGCATTCCATACCATTCGAGCCTATTCCGTTCTATAGATCGGGTGATCGT
-+
-677777888888888888888888777765554432221/0//..-,,-,+*++**)*)))))(((%"""#""##"
- at 30BB2AAXX080903:3:8:1105:543#0
-GGAATGGTATGGAATAGAATGGAATGGAATGAAATGGAATATAATGGAATGGAATGGAATGGAATGGNTAGCGTNN
-+
-67777788888888888888888877776555543220100//..---,,+,++**)*())((((('""""#""""
- at 30BB2AAXX080903:3:44:1325:1215#0
-TCCATTCCATTCGAGTCCGTTCCATTCCATTCCATTCCATTCCTTTCCATTAGATCGGAAGAGCGGTTCCGCTGTA
-+
-6-+,7084,43882./.48823)2711*57.+)1+0,,00)*&+,+"*+(+)%))##(##%#(&#%#"##$"""""
- at 30BB2AAXX080903:3:34:1049:1521#0
-CAATGGAATCGACCCGAATGGAATGGAATGGAATGGAATGGAATGGAATGCAAGGGAATCGAATGGGNGTACTTNN
-+
-07777788888888888888880877776552443222100./(.---,,+++%**)()'))&('(&""$"%%"""
- at 30BB2AAXX080903:3:46:1548:427#0
-CATTCGAGACCATTCCATTGTATTCCATTCCAATCCTTTCGAGTCCATTCCATTCCATTCCATCTGAAGATCTGTT
-+
-67777788888888888888888877776555443222100//..----,+++***)*)))(()(('$$"""""""
- at 30BB2AAXX080903:3:51:1655:1952#0
-GAGTCCATTCCATTGCAGTCCATTCCATTCGAGTCCATTACATTCCATTCCATTCGATATCTTTCACACCCCCAAC
-+
-67777788888888888888888877776555443022100//.-.--,,+++*+*))))(((((#'&"""%$$%$
- at 30BB2AAXX080903:3:33:1648:1554#0
-GAATGGAATGGAATGTAATGGACTCGAATGGAATGGACTGCAATGGAATGGACTCGAGTGGAATTGANACGTGCNN
-+
-67777788888888888888888877776555443222100//..--,,,,++***)*)))((((('"$#"#"#""
- at 30BB2AAXX080903:3:59:912:629#0
-ATCGAATGGAATGGAATGGAATCGAATGGAATGGAATGCAATGGAATGGATTCAACTTGAATGGAATGGCAGCTAC
-+
-67777788888888888888888877776555443222000//..---,,,++**)**))))((((''$%&"""#$
- at 30BB2AAXX080903:3:57:751:206#0
-TCCATTCCATTCCATTCCATTCCAGTCCTTTCCATTCCATTCCACTCGGGTTAATTCCATTCTATTAGTGTCCAGC
-+
-67777788888888888888888877776555443222100//-..--,-)++****)()))(((('&$%$%$#"#
- at 30BB2AAXX080903:3:60:912:688#0
-TCCATTCCATTCCATTCCATTCCGTTCCATTCCATTCCATTCCATTCTATTCTGGTTAATTCCATTCTGTTNTANN
-+
-+77777888888888888588888777765554833010.0/.-.---+,,++)****&))((((''&%$%"%$""
- at 30BB2AAXX080903:3:43:993:1371#0
-TTCCATTCCATTCCATTCCGTTCCGTTCAATTCCATTCCATTCCATTCTATTCGGGTTAATTCCATTAGATCGGAC
-+
-67777788888888888888888877776455443222110//.-----,+++*****))))((('''$$&$%#""
- at 30BB2AAXX080903:3:44:1178:214#0
-TTCCATTCCATTCCATTCCGTTCCGTTCCATTCCATTCCATTCCATTCTATTCGGGTTAATTCCATTCCATTCCTT
-+
-67777788888888888888888877476415443222101./.,-,-,,+++*+*))*))))('('&#"&$%%#$
- at 30BB2AAXX080903:3:39:400:995#0
-CATTCCATTCCATTCCATTCCGTTCCGTTCCATTCCATTCCATTCCTTTCTATTCGGGTTAATTCCACTCTATTCC
-+
-6777778888888888888888887777655544322210.0/...--,,++++*+**)))()((''$'&&#%$#"
- at 30BB2AAXX080903:3:50:657:2028#0
-CATTCCATTCCATTCCATTCCGTTCCGTTCCATTCCATTCCATTCCATTCTATTCGGGTTAATTCCATCACTGCCC
-+
-677777888888888888888888727;6555442./210////.,--,,+,+***())*((((&'&"$"#""##"
- at 30BB2AAXX080903:3:59:1265:812#0
-TCATTCCATTCCATTCCATTCAATTCCATTCCGTTCCATTCCATTCCATTACATTCGGATTGATTCTANTCCACAC
-+
-67777788888888888888888877776555443222110//.----,,+,+**)))*))(((((&&"%$%#$$#
- at 30BB2AAXX080903:3:48:351:1053#0
-TTTCATTCCATTCCATTCCATTTCATTCCATTCCATTCCATTCGCTTCCATTCCATTCGTGTCCATTCCACTACAT
-+
-67777788888888888888888877776555423222100/..----,,+++*+***)))((((('%$"$%#$#"
- at 30BB2AAXX080903:3:54:1222:227#0
-AATGGAATTAACCCGAATAGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAACGGAGGTGT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))(('('$$$#$$%##
- at 30BB2AAXX080903:3:39:1420:1343#0
-ATGGAATTAACCCGAATAGAATGGAATGGAATGGAATGGAATGGAACGGAACGGAATGGAATGGAATGGATTGGCA
-+
-67777788888888888888888877776555443222100//..---,,,++***)))))((((('"%$"#$"#"
- at 30BB2AAXX080903:3:49:821:672#0
-ATGGAATTAACCCGAATAGAATGGAATGGAATGGAATGGAACGGAACGGAATGGAATGGAATGGAATGGTGGGGAG
-+
-677777888888888888888888777765554432221000/.--.-,,+++****))))(((('''##"#""""
- at 30BB2AAXX080903:3:34:280:817#0
-GGAATTAACCCGAATAGAATGGAATGGAATGGAATGGAACGGAATGGAATGGAATGGAATGGAATCANCTATCANN
-+
-67777788888888888888888877776555443222100/...--,,,++****)*)*)((((''"%"""$#""
- at 30BB2AAXX080903:3:48:16:1113#0
-AACCCGAATGGAATGGAATCGAACGGAATGGAATGGAATGGAATGGAATGGAATGGAATGAGATTCGCACCGCCAC
-+
-67777788888888888888888877076555443222000-/..-,,,,+)+***))*)))''#&''&%#"$#""
- at 30BB2AAXX080903:3:50:1555:334#0
-CGAATGGAATGGAATCGAATGGATTGGAATGAAATCGAATGGAACGGAATAGAATAGACTCGAATGTACTGGCGTC
-+
-67777788888888888888888877776555443222100/..---+-,+++***))))))'(((%$"#"""""#
- at 30BB2AAXX080903:3:2:192:240#0
-AATGGAATGGAATGGAATGGATTCGAATGGAATCGAATGGAACAATATGGAATGGTACCGAATGGAACNCAANNCA
-+
-6777778888888888888888887777655544322210//-..----,,,+***)))))))('('$"$$$""##
- at 30BB2AAXX080903:3:1:1473:728#0
-ATTGCATTCGATTCCATTCCATTCCATTCGATTCCATTCCATTACATTCCAGTCCATTCCAGTACATTNCTNTCCA
-+
-6777778888888888888'888837%76555-/02120(.//.----,&++%*'))*%(#'('(''&"%#""##"
- at 30BB2AAXX080903:3:57:904:835#0
-ATTCCATTCCATTCCATTCCATTTCATTCCATTCGATTCCATTCCATTCCACTAAATTCCATTACATTCCACTCCC
-+
-67777788888888888884888877776555443222010//.------+,+***)*))))(((('&%%"$"###
- at 30BB2AAXX080903:3:37:934:1167#0
-GAATGGAATGGAATGGAATTGAAATGAATGGAATGGAATCGAATGGAATGGACTGGAATGGAATGGAACCGCTTCN
-+
-67777788888888888888888877776555443222100//..---,,+++*****)))(((('&$$$#"""#"
- at 30BB2AAXX080903:3:33:1272:1848#0
-AATGGAATGGACTTGAAAGGAATGGAATGGACTCAAATGGAATGGAATGGAATGGAATGGAATGGAANTCTCGCNN
-+
-6777778888888888888888887777655(44522210///..-,-,,++****)*))))(((('"%%"$"#""
- at 30BB2AAXX080903:3:44:337:904#0
-TTCCATTCCATTCCATTCCATTCCATTCCATTTCGTTCCATTCCATTCTATTCGGTACCATTCCATTCCATTCCAT
-+
-677777888888888888888888777765554432221/0//..--,,,++++***)()))(((('&&%%&%$#%
- at 30BB2AAXX080903:3:42:1397:1971#0
-GAATGGAATGGAAGCGAATGGAATGGAATGGAATGAAATGGAATGGAATGGAATGAAATGGAATGGAAACGAATAA
-+
-67777788888888888888888877776555443222100//..---,,+,+***)*))))((((''#"&"%$""
- at 30BB2AAXX080903:3:49:1324:1312#0
-CGAGTCCATTCCATTCCATTGCATTCCATTCCATTCCGTTCCATTTGATTCCAATCCGTTCGATTCCACGANCTNC
-+
-67777788888888888888888877776555443222100//..---,,+)+***))))))((('%$$""""""#
- at 30BB2AAXX080903:3:36:1037:1830#0
-CATTCGAGTCGAAACCATTCCATTCCATTCCATTCCATTCCATTCCATGCCAATCCATTGCACACGGGCTCACTNN
-+
-6777778888888%88888888884777*5554/2+2-10//-.,---,,+,++)))')('((('(#"#$""#"""
- at 30BB2AAXX080903:3:33:1525:1009#0
-CGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAACGGACATGAATGGNCTCACTNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()((''"""##$"""
- at 30BB2AAXX080903:3:54:1169:1071#0
-TGGAAAGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGATTGAACCCGAATGAAATGGAAAGGGCTGTCAT
-+
-67777788888888888888888877776555443222100//..---,,,+++**)*)))((((('%""&&"###
- at 30BB2AAXX080903:3:43:1280:1724#0
-GGAATGGAATGGAATGGAATGGAATGGAATGGAATGGAATGGGTTCAACTCGAATGGAATGGAAAGGAGTGGCATC
-+
-67777788888888888888888877776555443222100//..----,,+++**)))))(((('&'"%%&"#""
- at 30BB2AAXX080903:3:48:183:1192#0
-GGAATGGAATGGCATGGAATGGAATGCAATGGAATGGACTCGAATGGAATGGAAAGGAATGGACCCGNCTGACACG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))(((((&""#%"$###
- at 30BB2AAXX080903:3:3:62:194#0
-TAACCACCGACCTTTTCTCCTCTGCCCTCCACTCACACTCTGCTCCATCACCCTCAGCCACACAGCTANCGCTNCN
-+
-67777788888888888852888877174555413220100...-+-,&,***+*))(()'((((#'$"#"$""""
- at 30BB2AAXX080903:3:4:1448:1688#0
-CGGCTCACTGCAACCTCTGCTTCCTGGGTTCAAGCGATTCTCCAGCCTCAGCTTCCCGAGCAGCTCACNACATNGN
-+
-6777778888888888888,88887777(555.4222211///.---,-,**')*))(((((('&#%"""%#""""
- at 30BB2AAXX080903:3:47:1765:1261#0
-TGATCTGGCTGCCTCGGCCTCCCAAAGTGCTGGGATTGCAGGCGTTAGCCACCATAGATCGGAAGAGCACTGCGCT
-+
-677777888888888888888888777765554432221/0//..---,,+****)**)())(((('"""#""###
- at 30BB2AAXX080903:3:4:1279:1169#0
-AAGCTGGAAACCATTATTCTCAGCAAACTAACACGAGAACAGAAAACCAAACACCACATGTTCTTATTNATACNCN
-+
-67777788888888888888888877776555443220100//.--,,,,+++*))))))((()(('"""$$$"""
- at 30BB2AAXX080903:3:35:1255:1788#0
-TCCCAACACTTTGGGAGGCCGAGGCAGGTGGATTACTTGAGGTCAGGAGTTCAAGACCAGCCTGGCCNTCATTGCN
-+
-67777788888888888888888877773551243222100/.-/---,++*++**(**)(((((&'""%%$%%""
- at 30BB2AAXX080903:3:3:170:1262#0
-GTTTCAACTAGATATTTGTAACACCTACATCCTTACAATGCAGTTAATCAGATGATTTATGTATTTTGNATTTNTT
-+
-67777788888888888888888877776555443221100./...---,+++****))))))(('&""#&""""#
- at 30BB2AAXX080903:3:58:604:211#0
-TAAGCACCAGTTTTTTTGGTGTTTTGGGTTCTTGGCATCCGTGCTCCCAGCCTGAAAGCTGCCCGTGGTCGGANNT
-+
-67777788888888888888888877776555443222100//..---,,+++***()))*)((''(&%%$##"""
- at 30BB2AAXX080903:3:55:1653:659#0
-GACAAGCAGCAGGCACTTGCTCTATACCAGGTGAGGGTGTGGAGACATGACGTGGTGCAGGAGATCCACCTCCTCC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))((((&&'#"%#"#%
- at 30BB2AAXX080903:3:48:1748:1106#0
-CTGCCCTCCAAAACACGCCACAGGGAGGACACATTCCCATCAGCATCAGGGGTTCATGCTAACACAGACGCACGCC
-+
-67777788888888888888888877776555443222100//.--.,,,++)+***)))()(((('$$"$"""##
- at 30BB2AAXX080903:3:3:277:575#0
-ACCATACATCCCACAGACCAATGTGTGCATAAATACATGCACAACCATACATACACACCATACATACCNTCACNCA
-+
-67777788888888888828888877776555843222100./.,,.,,,+++**)))())('((('$"$%$%"#%
- at 30BB2AAXX080903:3:46:1741:319#0
-ATACCACATGCACATGCAAGCACACACAATGGAGAATCACTGCCTCAAAAGCTCCTAGATCGGAAGAGCGTCATCG
-+
-67777788888888888888888877776555443222100//..---,,+'****))*))()(((($&%"#""#"
- at 30BB2AAXX080903:3:40:234:1345#0
-AAACATATCAAAGGAAAAGCACAAATACAATGTTCTCCAGAAATAGTGTCGCAGAAATAAAGACAGACTATGGAAC
-+
-67777788888888888888888877776555443221100//..---,,+++**))))*)(((('&"$%%%%$#"
- at 30BB2AAXX080903:3:1:9:362#0
-CTTTAAGACGGCGTTTCCCTTCTGCCAGATTGCACTCTGTGCACAGTGCAGTTGCTTCTCCCTGCGGCNCTNCACT
-+
-67777788888888888888880857774553082222100//..-+-,-+,++'+*()((((('''$"#""###"
- at 30BB2AAXX080903:3:48:14:1740#0
-TGAGTTAATTTTTGTATATGGTGAAAGGTAGGGGTCTGGCTTCAGTCTTCTGTATGTGGATAGCCAGACAGCGCAA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))'))(((('"$#"$##"$
- at 30BB2AAXX080903:3:48:101:663#0
-ATGGGAACCACACATGTAAACACTGAGGTGCCCTGCCACGCCAGTGAAGTGCATGCTGCTCGAGATCNTCACAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))()((('""$#$""##
- at 30BB2AAXX080903:3:1:1054:894#0
-AGCATGGGAACCACACATGTAAACACTGAGGTGCCCTGCCACGCCAGTGAAGTGCATGCTGCTCGTGTNACNTGTC
-+
-2777778888888888888888887777/55.4432220/.///-,,+-,++(+'*)*)))'('(('&""$""""#
- at 30BB2AAXX080903:3:54:1240:1096#0
-TGCAGCTGAGATGGCTGCTCCCCGGTGGGGTGTGTGCTCGGCCTGCAGTCCCCGCCCTCCGGACTCCGNGCGCCAC
-+
-67777788888888888&88888877776555243201100+./.-,-+(+**))))')(((&('('%""#"####
- at 30BB2AAXX080903:3:4:80:2016#0
-CTTGTAGGTCACGCAGTCCAGGGATGCAAAATTAGAAGACAATGACGAGGTGCAAACCTGAGAGCGGCNTCACNAN
-+
-6777778888888888888888817773)3,542323200./-.---,,,&++)*)((((()(((''$"#%$$"""
- at 30BB2AAXX080903:3:50:623:175#0
-GTGTAGACAGGGTAGTTCTGCTGTATAGGCAGGGAAAATAAACAGGGGGGGGTCTTTTGGGGGTCCACACCGCTCC
-+
-63777788888888888808878,767765,544-0%20/,-&,,--,,,&(#$*)**(#)&###%#$"$$"#"##
- at 30BB2AAXX080903:3:1:1446:870#0
-CTTGCCTGTCCAGCAGATCCACTCTGTCTACACTAACTGCCTGCCCAGCAGATCCACCCTGTCTATACNACNCATC
-+
-6777778888888888888888887777654544322111/./--&(,,+++))**())()%((&''&""%"###"
- at 30BB2AAXX080903:3:1:1329:683#0
-AGGGAGGTAGTGTAGACAGGGTGGACCTGCTGGATGGGCAGGGAGTATAGACAGGGGGGGTCTGCTAANCCNACGT
-+
-67777788888888888888888896636755461222.*0/#.-$+,+++(****'()####(###""#%""$""
- at 30BB2AAXX080903:3:3:1563:415#0
-AGAAGATCCACCCTGTCTACACTACCTTCCTTGCCAGTAATGCACGCTATCTACACTATCTGCCTGACNCCTANCN
-+
-67777788888888888888828877776355423220100/..,-+--,+++)*#**)(((''(('$"#""%"""
- at 30BB2AAXX080903:3:51:838:1846#0
-GTGGATCTGCTAGCCAGGCAGATAGTGTAGATAGCGTGCATTACTGGCAAGGAAGGTAGTGTAGACAGGTGGCGCA
-+
-67777788888888888888888877776555442222000//..---,-++++**&*)()'(((##"""####"#
- at 30BB2AAXX080903:3:3:745:1796#0
-ACTACCTGCCTGCTCAGCAGATCCACCCTGTCTATACTAACTGCCTGGCCAGCAGATCCACGCTGTCCNCACNNCG
-+
-67777788888888888888888877756503311.02././.-.(,++-+**))(#)())((''%&""#"%""##
- at 30BB2AAXX080903:3:45:1752:49#0
-TAGACAGGGTGCATCTGCTCGACAGTTAGGTAGTATAGACAGGGTGGATCTGCTGGACAGGCAGGGACACAGCCCT
-+
-6777778888888888888888887777655544322210///.%---+,,+++**))())(&((##$"#""#"#"
- at 30BB2AAXX080903:3:53:490:1603#0
-ACCTGCCTATCCTGCAGGTCCACCTTGTCTACACTACCTGCCTGCCCAGCAGATCCACCCTGTCTACACGACCTCC
-+
-67777788888888888888888877776555443222100//..--,,-++++*+**)*)()((('&&#&$&$"%
- at 30BB2AAXX080903:3:42:63:347#0
-GGCAGGTAGTGTAGACAGGGTGGATCTGCTGGGCAGGCAGGTAGTGTAGACAAGGGGGGCCTGCAGGAGCCACCAT
-+
-67777788888888888888088877776555443222100-/.----,,+)+**)))(')')('(&$"$""##""
- at 30BB2AAXX080903:3:54:1652:795#0
-CAGTAGATCCATGCTATCTACACTACCTGCCTGGCCGGCAGATCCACTCTGTCTACACTGCCTGCACACCAAAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)*)))((('(#%%%%&&%#"
- at 30BB2AAXX080903:3:52:1348:912#0
-ATATCCTCATTGAGTTTTAAAATTTATTTACATGGGTCTACAAATTTATTTCAAATCGTAGTCAAGATCGGAATAG
-+
-67777788888888888888888877776555443222100//..---,,+,+***()*))))((('"%&$""#$"
- at 30BB2AAXX080903:3:45:1412:902#0
-AAGGGAAGGCTATGGGTGAGTTGGGAAATGTGTTAGGCAGGGTCAGAGATTACCACATCCTAAGATCGGCGGGAGC
-+
-67777788888888888888888877776555443222100/).,-,-,,,+***))(()((((((&"&##"#"#"
- at 30BB2AAXX080903:3:51:263:649#0
-ATTCTGTCCTCCATATCTCTGCTGATTCCCATTTTGTCTATTTCCATTTACCCCACTACTGCTTGCTACTCTACAT
-+
-67777788888888888888888837776525443211100///-,--,,+*++*+*()))))((''"$"#""##"
- at 30BB2AAXX080903:3:55:458:1928#0
-CCATATCTCTGCTGATTCCCATTTTGTCTATTTCCATTTACCCCACTACTGCTTGCTCAGGTCACTCTTCTGCGCT
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))))(('&$$&$$##$
- at 30BB2AAXX080903:3:39:1734:535#0
-AATCGCCTCCCACTAGCGGTGACTGTTGGGTGTCTACCCTCCCGGAGTCCTCCTGAGATCGGAACAGCGTGTGTCT
-+
-677777488888888888838888777765253(*.2*+/1...-+-)-,&%+%+(%)('((''#%'&$$"&#%##
- at 30BB2AAXX080903:3:54:1563:87#0
-AAGGGTTGGGACTCTGCTTCCCAGATGGTACCTTGTGGCTGGGGCCTCACGCGGCAGGAGGGGGAAGCACAGAACA
-+
-67777788888888888888888877776555443222100//(*,,,,,++)*'&))&))')''#'$%%%"%#$$
- at 30BB2AAXX080903:3:4:1598:961#0
-TGGGAAGCAGAGTCCCAACCCTTGCCAGACACTGAGCCCACTGGTGCTTTATCTTGGACTCCCAGCCCNTCACNTN
-+
-6777778888888888888888887777655544322110///.,.--,,++)***)()(((('('#$"#"#$"""
- at 30BB2AAXX080903:3:40:661:1840#0
-TGCAGTGGCGTGATCTTGGCTCACTGCAGCCTCCACCTTAGAGCAATCCTCTTGCCTCCTCCTCCCGCCATATTCA
-+
-677777888888888888888888777765554432+,1/0//----*,,++++***)))(((('(("""""%##"
- at 30BB2AAXX080903:3:55:1134:126#0
-CACCTTGGCCCTGCTCGTGGTCCTGCTGTGGGGCACTGGTCAGGTGAGGGTGGGGGGTCTGCAGAGCCGCCGGCAA
-+
-677777888888888888888888777735554421221-0//.)---,+&++**)#))))('((#%"&##""$"#
- at 30BB2AAXX080903:3:2:606:1744#0
-CTGAGGACAAGCACAGGCTGAAGCAGGGGAGCCCTAGTCCTCTCAGTTGCAACTTCCTGGAACGGTGTNTCTTCAA
-+
-6777778888888888888888884777635544122//0.0.--.$,-+**)&((((&)'((((&'$"#$#"#"#
- at 30BB2AAXX080903:3:41:1024:24#0
-TGCCACACCTGGGATGGGGCTCCCACCCTCTGAGGACAAGCACAGGCTGAAGCAGGGGAGCCCCAGTCCTCTCACT
-+
-677777888888888888888888.7770525143012./1..-,-,+-+)++***))&('('#'&#%$%&$$"##
- at 30BB2AAXX080903:3:47:1021:565#0
-CCAGAGCGACACCCTTGCTGCATGAGCCAGTAGCTGGGTGGGCATGGTAGCCTCTTGTCTTCCTAGCTTGCTACCA
-+
-67777788888888888888888877776555443222000//..--,,,,++***)))))))((('$$"#""#""
- at 30BB2AAXX080903:3:55:1356:699#0
-GCTCTGATATTGCTCCTCAGAGGGCACAGCCTTGGACTAGCACACAGTCTCTCCGACCACCTGTGGTATCAGAACA
-+
-67777788888888888888888877776555443222100//..---,,+++**+)*))())(('''&$"$$$$$
- at 30BB2AAXX080903:3:36:1646:1470#0
-GACGCACACACCTGGACGCACACACCTAGACAAACACACCTGGACACACACACCTAGACACACACACTCACACCNN
-+
-67777788888888888888888877776555443222101//-.----,++++*****)))()(('"$%&%$#""
- at 30BB2AAXX080903:3:47:276:804#0
-AGGTGGACATGACCTCAAGCTCCTGGGCCCGTTGCCTGGGATGCATCCCAAGGCACGCACCAGGACCGAAGAGGAC
-+
-677+774888888888888883880774635.24"1-.10)+.*-,,,,++****()()('(((&'&$""""""##
- at 30BB2AAXX080903:3:46:234:1718#0
-GGAGACCTGTGGCTCTGGGAGCCCTTAGGTGGGAGGAAGGATCAGTGTCTCTTCCAGTTAGGTTTGAGGGGGGGGG
-+
-6777778888888888888884'87777645544321110-.,/.,-*+-+++$*(*'*()(#((%%"$""""#""
- at 30BB2AAXX080903:3:48:1600:567#0
-CTCTCTCCTTGGCGTGCAGATGCCATCCTCTGTGTCCTCACACGATCGTCCCTCTGTATGTGAGATCGGCTNACTC
-+
-67777788888888888888888877776555443222100//.-----,,++******))((((''&$##""###
- at 30BB2AAXX080903:3:37:1240:1356#0
-GATGTATCCAAGACATTTTCCCTGTTTCAGGTCATTACTCATCTTGCGCAGCCACTGAGCAAAGCGGGTCCTGCAN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))((''"&%$$%"$"
- at 30BB2AAXX080903:3:58:821:673#0
-GAGGAAGAAGCCGAGCGCGATTCTCCAACACACTGGGGTAAGTACTGGCTGGCCTATGTCCTGGGTCGTCCCAACA
-+
-67777788888888888888888877776555443222000//..---,,++'+'))*)')((('#''%##%"#$%
- at 30BB2AAXX080903:3:8:973:854#0
-TACTTAGGAGGCTGAGGTGGGAGGATCCCTTGAGCCCAGGAGTTCAAGTCTAGCCTGGGCAACATAANACACACNN
-+
-677777888888888888888888777765554402.010//+--.+-+,,++*))**)()''('(&"$$$&$#""
- at 30BB2AAXX080903:3:34:1467:1720#0
-ACTTTGGGAGGCCGAGGCGGGCAGATCACTTGAGGTCAGGAGTTCGATCGGAAGAGCGGGTCAGCAGNCACTGTNN
-+
-67777780888888888.88838847101/51-32,)-/10/,.',*+*++('*)*#)(#'%#(#''"&"$"""""
- at 30BB2AAXX080903:3:57:784:1586#0
-ATCCTCTAGGCCTCTGTAAGCTTCTAGAAGGAAGAAGTTACGTCCTTTAGAGTAATAAAATTCCTCAGATCTCGCT
-+
-67777788888888888888&.*8677765534432%21/&/...-+-,,&***+)))))(((&('''&%&##"#"
- at 30BB2AAXX080903:3:46:658:1178#0
-TTAGTCTGCTCTGGAAAGCAAGATGTGTGCAGATGAGTGACGCAGTGCATCGTGTGGATGCAAAGGGATCTAGCCC
-+
-67777788888888888888888877776555443222100//..----,,++***))))()(('('""#""""#"
- at 30BB2AAXX080903:3:59:979:1032#0
-AGCTCCCCTGGGCTTCACATGGCCATGGAGCACCCAGCAAGTGTAGGCTCTGAGCCTTCAGGGAGGGGGGNAACCA
-+
-67777788888888888888888877776555442222000-/-----,,,+****))*)))((((''"#"$###$
- at 30BB2AAXX080903:3:56:1003:1204#0
-CACATATACACCTGTGTGCATGTGTACATGGTATTTAAGCATGTTTGCACGTGTGTTTGTGCTTGCATGTTCACTC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))))('(''$$#"##"#
- at 30BB2AAXX080903:3:38:1745:1480#0
-CTCAATTCTCAGCCTCCCCACAGCCCAGACTTTCTGTTTTAACCTCACAGCTGCCCAGCGTGATGGCCTTGTAGNN
-+
-67777788888888888888888877776555443222100//..----,,,++*+**))')''((#%$"""""""
- at 30BB2AAXX080903:3:35:1708:161#0
-CCAGTGCTGTGTTGTCATTTGCAAGTTCTTCCTGTGACTGAACTCCAAATGGCACTGGGACTGCTGANCTCGCGNN
-+
-67777788888888888888888877776555441222100//..--,,,+,+*****))*(()(('"$#%"##""
- at 30BB2AAXX080903:3:57:1432:1376#0
-AGGAACTCATGCTGGCCTGCCGGTCCCACCTGACCTGAGAGTGGCGGGGACTCAGCGGGTTAGGAAGCAGTATCCT
-+
-67777788888888888888888877776555443222100//..---'&$&)**')##)%#'##%''""$""###
- at 30BB2AAXX080903:3:34:1180:687#0
-GAAACAAGAGGGCACTGTATGCAAACATCTCTTGAACTCTGGAGTCTGCTCACCTTCCTGCCTCAAGNGCCTCTNN
-+
-67777788888888888888888877776555443222100//.----,,+++++*))*))((((''""%##%#""
- at 30BB2AAXX080903:3:52:580:1028#0
-CCGGGTGGGGGACGGGAATGGTGGGACTGGGGATGCCACGGGACAAGGCTGCTGGCCTGGAAGGGAGCTACATAGT
-+
-67777/88888888888888878877776555443211200/0.,---,,++++*))())'()(#'($$$#"""""
- at 30BB2AAXX080903:3:51:1291:628#0
-CCATCCAGATGGGAGGCTGAGTGCAGAGCAAACGGAGCCCAGCACTCCAGAGCCGTGTCCCTTCACTGACGCCACA
-+
-6777778888888888888883887777:555443221)00//..---,,+++***)))()')((('"$#""#$$#
- at 30BB2AAXX080903:3:2:450:502#0
-GTAGTGATGATTCTAGCACCTTCCTCAGGTTTCTTTAGATTCCTGGTTCTACCTGCATGGAGCATTTCNAGCTACA
-+
-67777788888888888888888)77776/55443222000/.-.-+,+-,+)+**))*)(((((''"""#"####
- at 30BB2AAXX080903:3:46:1623:1211#0
-CTCTGGGCATCAGCGCCAGGCCAGCGAGTAGAGAAGTCCGGCTTGGAGAGTACAAAACAGGCGCGATGTCACTGGT
-+
-67777788888888888888888877776555443220000//..-,-,,*+*)***()))(('(#'$##""#"""
- at 30BB2AAXX080903:3:38:1060:1246#0
-CCCAGCATGGTCAGGGCATTCTGGGCAGAGGAACTGATAATCAGCCCCTCAGCAACCGCAGAGGGAATGCTGTCTC
-+
-6/777788888288888888888877776555.13220&0,//.,-,,+,**+$)*)))(((%(%%%"%$%$%$$$
- at 30BB2AAXX080903:3:2:913:963#0
-GTTCCCCTCTGATATGGAGATTGGTGGAGAATGACCAGGATATTTTATGTGGCAATGGGGGTTGAAGCNCTCACAG
-+
-67777788888888888888888877776555443512100//.,-.-,,++****)*)))%(('('&"&#%%%$$
- at 30BB2AAXX080903:3:44:1217:1380#0
-GAAAAGGAAGGGGGGCACCTACAGTTGCCAGTTCTGTTTGGAAGTGAGGGAGGGGAGGGCAGATTCCCATACTCGC
-+
-6777178888888%88888888882177635,4422)2100//.'---,,*+****))))()((&(#'#%#""""#
- at 30BB2AAXX080903:3:52:1334:429#0
-CTGGAAGTCCCAGGCTTTGCCATCTCTGGTTCCCCACTTCCCCAGTTTCGACGCTCTCCTCTCTCCCCCCCCGCTC
-+
-67777788888888888888888877776345443222100//-.-,-,,+,)+*))**(((((((("$#%%%#"$
- at 30BB2AAXX080903:3:58:1105:328#0
-TGCAGCTCTGGTCGGGCTCTAACACATGCATGGCTGGCATGGATGCCCAAGTGTGCCTGGGGAATAGACGCNTCNG
-+
-677772888888888888888888777765454432+-/10/.-,---&$)*+)*))'(()''&#'%&$&"""#"#
- at 30BB2AAXX080903:3:2:1622:87#0
-CAAACAGAAGGACATGCTCAGTCCTAAAGGTTCTTTGTGGCCCAAGATGTTCTGGCATGAGAACTGACNCACAGTA
-+
-67777788888888888888882/78746515-4521010,.-.,.,-,+*%***&)))((((&%'#'"$%##""#
- at 30BB2AAXX080903:3:47:1300:1883#0
-CACCTGTGCAGCTCATCTGGCCATGAACCTCTCCAGCTCACAACTCTGTTTTCTCCCTGTTGTTTCTCTGAAACCA
-+
-67777788888888888888888877776555443222100//...---,+++****))))((('('"&$"""##"
- at 30BB2AAXX080903:3:58:1536:676#0
-GGCTGTGATAGGGGTCAGATGGGTGACAGCCACATGAGAGGCCGTCCGCTTGGGTGTGATGAGGGGACACAACATN
-+
-6$.72'2,8888)/$88-2/0-4,7-(5+$$1'33-.,)-))','$+#+)+&#*##'(##''####&$$%&"#"""
- at 30BB2AAXX080903:3:35:516:1417#0
-ACGTGGAGGCTACCACGGGCATCGCTGCTCTGCAGTCTGTCAACCCGAGGCCCCTGGTGCTGAGATCNCTACGTAN
-+
-677777888888888888888888777765551/33021.-+.,-$-,-,*')*')*&*())'(''%"##"$"#""
- at 30BB2AAXX080903:3:51:1678:170#0
-CACGGCCTTGGCAGCTTCACCAACAGGAATGTGTTCTCCTAGGGTACTGGAGGGTGGCAGTCCCAGACAAAAACCA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))))('(&$$%%%&%$$
- at 30BB2AAXX080903:3:33:1002:1269#0
-CTCCCTCTGCACTCACATCCCTGACGTCCTCCCGTGCCCTCACGTGGTCCTCCCCCTGCACTCACAGNCTGCACNN
-+
-6777778888888888888888887777655548321-1000/.-.,,,,+,++**))))))(((('"%#"#"#""
- at 30BB2AAXX080903:3:49:742:220#0
-TGCCCTCACGTGGTCCTCCCCCTGCACTCACATCCCTGACGTCCTCCCGAGCCCTCACGTGGTCCTCCCTCTCCCC
-+
-67777788888888888888888877776555443222100//..--,,,+++***)))(()(((('$%#%#$###
- at 30BB2AAXX080903:3:54:954:1661#0
-CACGTGAGGGCACGGGAGGACGTCAGGGATGTGAGTGCAGAGGGAGGACCATGTGAGGGCGCGGGAGGTAGACGTC
-+
-6777778888888888888818.87777*$53442221.00//.---,',,++))**()(%((((#&&"#%"#"""
- at 30BB2AAXX080903:3:40:1533:1397#0
-TCCTCCCCCTGCACTCACATCCCTGACGTCCTCCCGTGCCCTCACGTGGTACACCCCACGCACTGACTGCCCATCA
-+
-607777888888888888888$8*7777*5554432+210/1/..---,(++**))*)%&'(&'##'"&&%&#"$"
- at 30BB2AAXX080903:3:52:132:269#0
-CCTCACGTGGTCCTCCCCCTGCACTCACATCCCTGACGTCCTCCCGAGCCCTCACATGGTCCTCCCTCCTCCCTCA
-+
-67777788888888888888888877774555443222100//..-,--,,+++*(')((()((('#$#$%"###"
- at 30BB2AAXX080903:3:38:276:828#0
-GTCAGGGATGTGAGGGCAGGGGGAGGACCACGTGAGGGCTCGGGAGGACGTCAGGGATGGGAGTGCAAGCACGCAC
-+
-60777788888888.8888888887777656554-2221////..---,,+++++*())'*(('(&#"$###""##
- at 30BB2AAXX080903:3:37:121:300#0
-GCACGGGACGATGTCAGGGATGTGAGTGCAGGGGGAGGACCATGTGAGGGCTCGGGAGGACGTCAGGTCCACCTCN
-+
-6777778-888/8-888888888857676.55242.2201/.%-*.+,+,+%****)*)&((('#('&$%#$##$"
- at 30BB2AAXX080903:3:46:1353:1444#0
-CGTGAGGGCACGGGAGGATGTCAGGGATGTGAGAGCAGGGGGAGGACGATGTGAGGGATCGGGGGGACACGTAGAG
-+
-67777788888888888888/888771765514&3022100/)..,"&,,+'+***)*)'))(#(''%"$""##"#
- at 30BB2AAXX080903:3:1:464:1309#0
-ACCACGTGAGGGCACGGGAGGATGTCAGGGATGTGAGTGCAGGGGGAGGACCATGGGAGGGCGCGGGCNGCNCCTC
-+
-077777888888888888888308476765-541332/1.).+./----%()'(*#)$)()'#((''"""%"##"#
- at 30BB2AAXX080903:3:48:1739:132#0
-ACTCACATCCCTGACGTCCTCCCGTGCCCTCACATGGTCCTCCCCCTGCACTTGCATCCATGACGTCCGCCTGCAC
-+
-6777778888888888888888887777655544322.100//..-*-,,++%***))*)')(((&'%##"""##$
- at 30BB2AAXX080903:3:45:1790:766#0
-GGGCATGGGAGGACGTCATGGATGCAAGTGCAGGGGGAGGACCATGTGAGGGCACGGGAGGACGTCACGGCTGTGG
-+
-67777788888888888888888877776555443220100/.---,-,,+++++***)))()('('%%"#"#"#"
- at 30BB2AAXX080903:3:35:469:1825#0
-ATCCATGACGTCCTCCCATGCCCTCACGTGGTCCTCCCCCTGCACTCACATCCCTGACGTCCTCCCGNCCTCTACN
-+
-67777788888888888888888877776555333002100/.-/-,,,,,++***))))(()('('"#"#$"#$"
- at 30BB2AAXX080903:3:60:995:1902#0
-AAGACCTGCATTTCTTCAACAACCCACACTGAGAGGCTTTCCTGTACTTCTGACCTGTGAGGTCGGGACACNAANN
-+
-677777888888888888888888771745524432/210,./.,.,*-,+++*')*)*((&(&((#%$"$"$"""
- at 30BB2AAXX080903:3:54:332:584#0
-GTGTGTGCTCAGCAGCCACGTGGCTCATCTGCTGGGAGCTTGCTAAATACGATGTTCTACAACATTGCCTAACCAC
-+
-67777788888888888888888877776555443222100//.-.-,-,+++*)***))'()((('"$""$%##"
- at 30BB2AAXX080903:3:57:838:417#0
-AATACTTGATGTTACTTTGTTTTATATAAATGTGTATTTCTACGATAGTTTTAGTGTCATCTAATATTTTTTTGCT
-+
-67777788888888888888888877776555243222100//.-,,-+,++*)+*)())'((((''&&"&%$#$"
- at 30BB2AAXX080903:3:35:1555:774#0
-GGAGTCAAACCTGAGACGGGCTAACCTCGCTGCAGGTGGAGCAAATGAAACCCCCTCCCCCCGAGATNCGTGACCN
-+
-677777888888888888888888777765554432/21/0+/./,--,-,++**'***((%'&('#"$"#"###"
- at 30BB2AAXX080903:3:59:568:1055#0
-CATTTGCTCCACCTGCAGGGCGAATGGTGCTCTCACCTCACACGTGACACTTGGTCCTTTTTGCATTATGACGCGC
-+
-67777788888888888888888877776555443222100...,.,-,,,++***))()))((('('%&#$"$"#
- at 30BB2AAXX080903:3:43:29:929#0
-TGAGAGCTGTAACTGCCTGCAGGGTTTCCAGCTGACCCACTCCCTGGGTTGGGGGAGTGGGTCTGGGCGCTTGGAC
-+
-677777888888888.8888888877776552443'1.100/...---,,+*+***)))()'&(''&""#"""""#
- at 30BB2AAXX080903:3:3:1355:516#0
-GCCGTGACGGGGGTCACGGGCAGCCATCATGTTCTTAGCATCAAACATCTGCTGGGGGAGCTCAGCGCNATCANAC
-+
-677777888888888888881883177/5550413200/./-.--+,,$+******#(#'#&##'##""#"$#"##
- at 30BB2AAXX080903:3:1:711:1825#0
-ACACCGGGCTTGATTCCTGCCTAGTCCCTGCCAGATACCCCATGCCCACCTGGTGAAGAGAATGAGGCNCCNCACC
-+
-2177778888888888888888881717453-311.21//.+-.--,,,,*+*'*'()()'(&('(''"#%"####
- at 30BB2AAXX080903:3:43:408:934#0
-GAAGGGCCTATCCCCAAAGGTGCCACCCTCACCAGGCTCATCCTGACAATCTTGGATTATTTTTTCCCTGAAGTTT
-+
-67777788888888888888888877776755443212110//...-,,,,+++***)))))((((%'&%"##"$#
- at 30BB2AAXX080903:3:53:200:101#0
-ATGGGCATGCCTAGGGGACCTGGGGTAGCGCCTGTTCATCTCCCCACCCCTGGCCCATGCTGGCTTCAGTTTTTCT
-+
-6777778888888888888888887257652543222/00/0-.-)-,+,)*+&)#&('(''((&%#"#"%"""#$
- at 30BB2AAXX080903:3:3:755:871#0
-GTGGGCGAGCGTGGGGGAGCGTGGGGGGGTGTGAGAGATCGGAAGGGCGGTTGAGCGGGGAGGCCGGGNACACNAC
-+
-61777288828888.22-1)8&85*77$6+0'/$-((*%&/-#+,$(&+%&$#$#&##%#&####&#""$#"#"#$
- at 30BB2AAXX080903:3:60:1648:767#0
-CGCCCACACTCGCCCACACTCCCCCACACTCCCTCACAGTCGCCCACACTCCCCCACACTCCCCCAACACACCANN
-+
-67777788888888888888888877776555143222100//..---,,+,++)*)*))))(((&''"%%&"%""
- at 30BB2AAXX080903:3:33:643:1909#0
-TGGGGGAGCGTGGGCGAGTATGGGGGAGCGCGGGCGGGTGTGGGGGAGCGTGGGGGAGTGTGGGGGGNCTACCCNN
-+
-6777778888388888888888887707$5$944/0#1+%1/..-.+-),*++)*)&(#(&(&(''#"$""%##""
- at 30BB2AAXX080903:3:2:1122:671#0
-ATCACCCAGGCCCTGCAAAACTGAGCCACCAACAACCACCTGCACCACTTCCCAGGAGGCCAAATAATNCATAACC
-+
-677777888888888888888888777765553431-11-/-/,-',,,+,*)*#)()))#((('''$"%""####
- at 30BB2AAXX080903:3:3:1518:98#0
-GGAAGATTGAATCAGTAATCGAAAACCCAGCAACAATGAAAAGCCTGGAGCAGATGGCTTCACTGTTCNCACANCN
-+
-677777888.888888888&888873+165+54,3102100/.)'(,,*((+**(*(#''#'#((&%&"%#%#"#"
- at 30BB2AAXX080903:3:57:563:576#0
-TTTGTAGATTCTGGATATTAGCCCTTTGTCAGACAGATAGATTGCAAAAATTTTCTCCCGATCTGTAAGTGTACAT
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('''&&%"""##"
- at 30BB2AAXX080903:3:56:729:528#0
-TAGCAATTGTGAATGAATTTCATTCATGATTTGGCTCTCTACTTGCCTGTTGTTGATGTATAAGATCGGCTGAACG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('&&""""##"
- at 30BB2AAXX080903:3:47:1590:997#0
-TGAAGGGATGTTGAATTTCATTGAAGGCCTTTTCTGCATCTATTGAGATAGTCGTGTTGTTTTATGTTNCCTTATC
-+
-67777788888888888888888877776555443222100//...--,,+++****)))()(((''&"#%#"###
- at 30BB2AAXX080903:3:38:878:517#0
-CGCATGCCCCAGTGAGCCAGCGAGCATTCCGCCGAGACTCCACACAGCTCTGTGCTTCAGACCCAAGCTCATCTCC
-+
-6772478888888888888888887777235544022000,./--,--+,+,*+##'*)((('('%'"#%%""$##
- at 30BB2AAXX080903:3:50:765:1020#0
-AGCGAGCATTCCGCCGAGACTCCACACAGCTCTGTGCTTCAGACCCAAGATCGGAAGAGCGGGGCAGCACTCTCNG
-+
-67777788888888288888,88571(7)5150502/#0//..,,-*+,+($%*#)(((#()##'##""#"#"#""
- at 30BB2AAXX080903:3:54:955:1998#0
-ACACAGCTCTGTGCTTCAGACCCAAGGCCATGGTGGCTGAACTCATGAGGGGACCTCCTGATCTGCAGGCCTTATC
-+
-67777788888888888888888877706555443222110//-..-,,,+++)**()))))(((('%$#""""#"
- at 30BB2AAXX080903:3:59:1401:1441#0
-GTAACAAGATGTGAGTACCACTTCAAACTCCACAACTTCACTGGCAGTGTTTGGAGTTATGATTCATACCAACNCA
-+
-67777788888288888%8888)8777765'544322'00.//..+-+,,++'(***##)('((#'%'%"#%$"#%
- at 30BB2AAXX080903:3:51:1319:350#0
-TGGGGACGGAAAGGGAAGAGGAGCCAGCCACAGGCTACAGGCTGGTTGGTCACTCCGAAACGAAAAAGCCAGTGCG
-+
-6777778888888888888888887777655544322.000./.-'--%+&**&&&#)##''#(##&""$#"""#"
- at 30BB2AAXX080903:3:4:65:424#0
-AATATTGAAGCGTGTAACTCATGGCAGAAGGTGGAATATTTAAAAGGCAAAACTGCCTGGGTCACATANCAACNAN
-+
-67777788888888888888888877776551443522100//..--+,,,+*+*(())))((('('%"$$##"""
- at 30BB2AAXX080903:3:1:1354:1893#0
-AAATGGGTTAAAATGTCCCATTACATGGAGAGTGCTGATCCACAGGGTTGAGATCATTGACTTAGGGCNGTNCTCA
-+
-27777788888888888888888877776515343222000//..--+,-+++**)*))))((((('$""&"%$#"
- at 30BB2AAXX080903:3:34:1563:782#0
-GACATGAGTCCCATCACCTGGGTGATCAGTGCAGAGTTCTGTCACAATGCCCCTGTAGGCAGAGCCTNTCTACANN
-+
-67777788888888888888882877776555443222100//..---,-,,+**)**)))()(((&""$#"#"""
- at 30BB2AAXX080903:3:50:154:1256#0
-AATAAGTTGTCATTGTTGTTTACCTGTCACCCAGGTGATGTAACTCTTGTCTCGGCTCTGCCTACGACTGCACGCG
-+
-67777788888888888888888877776555443222100//..---,,,++***))))(()''(&$""&$#"#"
- at 30BB2AAXX080903:3:54:1676:251#0
-GAAAAGCCTAGACAAGAGTTACATCACCTGGGTGACAGGCAAACAACAATGACAACTTATTTTCACACAAACAACA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('%$%&%%%#$
- at 30BB2AAXX080903:3:58:1532:856#0
-TCAAATCCAAGCTCCACCCCTCGCTGTGTGAGCTTGCTCATGCTGCTAACCTCTCTGAGACTTGAGATAGTACAAN
-+
-67777788888888888888888877776555443222100/0..--,,,,++***)*))))(((''$$%"$$%#"
- at 30BB2AAXX080903:3:4:1497:1652#0
-ACTAAGAGAAGCTGAAAAGGAGCGGGGAGGAACTAACTGCAATGTTACATCAATGAGTTGCATCTTAANCCTCNTN
-+
-6177778888888888888888)877-125454/02220#0..$-.-,,,*++%)*'))(%(('(&'""$""$"""
- at 30BB2AAXX080903:3:51:298:898#0
-GGCATGGTCCCTCAGCCACCTTGTAGCCTTGGCTTGCAACATCTCGACATTGAAACCAAAACGCTGCACGGGCCAC
-+
-6777778888888888888888887777655544322210//...---,,,+***))*)()(((('&$#"#"##"#
- at 30BB2AAXX080903:3:42:791:927#0
-GCCTGGACAACTTTTCAGGAACCTTCAGATCACACGGGCCCTGCTGCATTTTGGTTTCCTTGTCGAGATGCTGCAG
-+
-67777788888888888888888877776545443222100./-.--+,++++*+)*()&))('(&'$%##%##"#
- at 30BB2AAXX080903:3:51:1007:190#0
-TTGAGACAAGGTCTCTCTCTAAGGTCTCACTCTGTTCCCCAGGCTGGAGTGCAGTAGTGGGACCAGAGACCACTGC
-+
-67777788888888888888888877776555443222100//..---,,+++***)*))))()(''$"#%#%$$#
- at 30BB2AAXX080903:3:33:64:358#0
-GCAGGAGAATTGCTCAAACCTGGGAGGTGGAGGTTGCAGTGAGCCAAGATTGTACCACTGTACTCCANCGACCANN
-+
-67777788888880888888888877776575443221100//,..--+(+++***)**))((((('"$""$"#""
- at 30BB2AAXX080903:3:38:1726:1013#0
-ACAAGCGGGCCGGGCGTGGTGGCTCACGCCTGTAAACCCAACACTTTGGGAGGCTTAGGCAGGCGGGTGCACTTNN
-+
-677777888888888882888888777765252322...///,,%---,,+++'()'))(''(#(&#"'&"$""""
- at 30BB2AAXX080903:3:55:637:831#0
-GGGACCTTTTGCAGGGGTTCCCCAGGCAGAGGGCTCACAGCTTTTGTGCAGCAGATCGGAAGAGCGGATACGCACG
-+
-67777788888888888888888877776455443122100//.,----,+,+*+**))))()(('&$$%%%$$"#
- at 30BB2AAXX080903:3:45:120:1660#0
-CTGGTTTGGTCTCCCATCCCACCCCATCCCTGCATCCCATCCTGTTTCAGCCAGTGTCCCACTTCCTGGGGCGGTC
-+
-67777788888888888888888877776555443222100//..---,,+++***))*))(((''('$%"#$#""
- at 30BB2AAXX080903:3:36:905:1336#0
-ATTTAGAACTATTCTGCACTGGAGATTTGTCTGTTCTCCCCCATGATAGATATTTAACCTCACGTTTACATCTCTN
-+
-67777788888888888888888877776555443222200//..--,,-+,++**)*())))(((&$%#"####"
- at 30BB2AAXX080903:3:48:49:1724#0
-TGCAGAGTGGAGGTCAGTGGTGGAGTGAAGACGGACCAGGGTTAACATCGGCAGGGGTCACGTGAGCTCACTGGAT
-+
-67777788888888888&88.888777-655.4430.'100-,.-..,--+)+*)*(##&%#'&##'"$#$#""""
- at 30BB2AAXX080903:3:49:1003:1049#0
-AGGAGGGCCAGTCAGGTATTTTGGAGAACGTCCCTCAATTAGGATTTGTCTATTTTCCTCAAGATCGGCAGCGCGT
-+
-6777778888888888888888887777655922321-10///-..--,-+*+***))*)()(((&(""""$"""#
- at 30BB2AAXX080903:3:37:1257:1176#0
-GACACTCGAGGGCTGCTTTTAGGAGTGCTGACTACATGCTTCCCTACCTCCATGTAGGCATGTGTGTCCACAACAN
-+
-677777888888888888888888767765554432221/0/..----,,-*++))**)')(((''#$#"%""##"
- at 30BB2AAXX080903:3:54:141:1721#0
-GACCCCGCGGCTTTGAGGGGGCCCCGGCACTCACGCCCTGACCCTGGCGTCCTGAGCCTGCGCCCAACGGACCCAC
-+
-6777778888888888888888887777655544321210.//.---,-++*+***)())()#''&%%%"#"#"#"
- at 30BB2AAXX080903:3:40:1123:1233#0
-AACGCGGCCTCCTCCTCCTCCGAACGCGGCCGCCTCCTCCTCCGAACGTGGCCGCCTCCGAACGTGGCCGCCGACC
-+
-6777778888888888888/188677776455313.21100/..-,-,*++)***''()(''''#%'&%#"#""##
- at 30BB2AAXX080903:3:2:1127:406#0
-GAGCTGAAGACTGGGCGCGTGCCGGCGGCAAATGTTCACAGCAAAGGGCGGCCCAGTGCGCAGCTGGANCATACTC
-+
-64777788888888838888888877772/554412/..00*,----,),+*'***(*()&(('(''%"$$#$#"#
- at 30BB2AAXX080903:3:59:1126:569#0
-GGTCGTGGTGGAGCCTGGGTGAGGGCAGAGGTGGTACACCCCAGAAGACCCTGCTCCAGGCAGCGGCGGGTAACCC
-+
-6777778888888888888888887777655244-2120/,//.,---,,+)+('))*()('((('%&$$"$"%##
- at 30BB2AAXX080903:3:49:1044:1595#0
-GGAGCAGGGTCTTCTGGGGTGTACCACCTCTGCCCTCACCCAGGCTCCACCACGACCAGCTTCGTCCACCCCGATC
-+
-67777788888888888888888877776555443222110//.---,,,,,+*+)**))))()(('%&%"$####
- at 30BB2AAXX080903:3:48:933:2045#0
-AGCCCACCCTCCCATCTCCCTGAACTACGGGTAGGACCCCTCTGGCCCCCAGCCCTGCCCTTGACCCAGACTACAT
-+
-677777888848888288288888477765514432+-*//./.-+++*,++*(())(''&'((###"""$""$##
- at 30BB2AAXX080903:3:48:105:1104#0
-AGTCTGCTGTCGCTTCCCCTTTAAGCACACTCATTCACCACACCCGAGGAGGCCAGAGGTGCAGGGACAGAGAACT
-+
-67777788888888888888888877776555443222100//..-.-,,++*+**))*&)((((''$$##"""##
- at 30BB2AAXX080903:3:3:910:1602#0
-CGGTCCCGACCTGCCTGGTCCCTGGAGCTGGGGTGGGAGTCGTGCCTTGAGATCGGAAGAGCGGCTCCNCGGCNAC
-+
-6737778888888888888888827777555541322.1%1/*.-$-,,(++*(*((()()#'(''%""#""#""#
- at 30BB2AAXX080903:3:52:1143:870#0
-TCCTGGGACCTCGGCCCTGGGCAGGATTTGGGGGATGGCCACGTCTCTCTGAGTGGGCTCTGCTCATGGCCCTCAC
-+
-677777888888888888888888777765554432221/0//..-----+*+**+)*)))()(((''$"""####
- at 30BB2AAXX080903:3:1:118:1172#0
-AGATAAACCTGGTGAGCTGCGCCTTTGTGCTCACACGCAGCTGGCAATGGCAAGTCAGTGGATTTGTANATNCACG
-+
-6777778888888888888888789777655544322210../-,,,+-,++)+)%&))))'('(('$""""#"#"
- at 30BB2AAXX080903:3:8:602:371#0
-CATGTGCTTGCGGGGGCTGGGGGCTGAGGGAGGCCATCTGGGATGTGGGGTCTGGGAGATCGGAAGGNGACTGCNN
-+
--777778888888288388/888/972765*52,(*0*20/.*--+,,,-&$***)#)#'&((##'&""##"#$""
- at 30BB2AAXX080903:3:54:118:214#0
-CAGCCACTGTGAGGTGGGTGCTGGTCCCACCTCCTTCACAGGTGCCAGCTGGCAGGTGGTGGAGGGGTCACNATNT
-+
-6777728888888888888888887777255444322-10..-...*-,,+++'**&*)#))#((%#"$""""$"#
- at 30BB2AAXX080903:3:52:680:247#0
-GACCCTGCAGCCACTGTGAGGTGGGTGCTGGTCCCACCTCCTTCACAGGTGCCAGCTGGCAGGTGGGAGAGGCTTC
-+
-67777388888888888888818873776)554432-2100./.,-*,-&,,+(**(**)()'&((#"$#%#""""
- at 30BB2AAXX080903:3:59:1497:1795#0
-CTTCACGCAGACACCAGTCCCCTCTCTCTATTCCTGTTCATCCTTGATGCCAATGTCAAAGATCGGACAACAANCA
-+
-6777778888888888888*838,77776755-53222//0.+..---,+++++*)))))((('(('$&%&%%"$$
- at 30BB2AAXX080903:3:44:567:1178#0
-TGCTGTGGAGTGCAGAAAAGGAAGCTCCAAGCTTGCACCTGGGGCGTGCAGAGCCACCTTCTGCCAAATGCTCCGC
-+
-67777788888888888888888877776555443011000//.----,++++&)*)'))&'('''&&#"##"#""
- at 30BB2AAXX080903:3:35:1685:634#0
-CATTGAGCGTGTGGGGTGGGGCAGAGACAGCCACCTTGCAGCTGGTGAGGCCCTTACAGCATCTGGTNCTCTCCAN
-+
-6777778888888888888888887777:550425002111....+-+,,)+**)))((&'''('(&"&%""$##"
- at 30BB2AAXX080903:3:47:1789:102#0
-CAAGATGAAATTAACATGCATTGAGCGTGTGGGGTGGGGCAGAGACAGCCACCTTGCAGCTGGTGAGGCCACTCGA
-+
-67777788888888888888888877776555441222100/....,-,-*++$**)())'((#('&&"###"""#
- at 30BB2AAXX080903:3:57:1453:1811#0
-TCGGCGTGAGCGCAGGGTAAACTCACGGACCCGAACTCTCAGATGTGCTTCCTGGGCTCAGCTTCCCCATACATGT
-+
-677777888888888888888388767763224032211/0//...-,,,+++**))*)))(((#'#$%#"$#""#
- at 30BB2AAXX080903:3:4:498:969#0
-TCCCACCTGCCCCCTCCTTTTCTGGTCTTGCCTGCGCTGGGCCCAGGGGCTCTGGCTGTGGGTTTTCTNCTCTNCN
-+
-677707888888888888888888777765724422-21/0.-.-.-,,,+*+**))*()))##'''"""""#"#"
- at 30BB2AAXX080903:3:1:56:933#0
-TCCAAGGCGGTGTCCTGGACTCCCACTGTGCTCCCCAGAGGGCAGGGTGAGTGCGTGGCATCCTTTTANGCNCGAA
-+
-67777788888888888888888877775556333202/00/...--+,,,(+)**))(()'(((('&"##"##"#
- at 30BB2AAXX080903:3:1:651:606#0
-CTGGGGGTAGCAGGCCCTCTGTCAGCACTGACTTCTGTATCATGTCAGGGATTTTTAGGGCGGCAAGCNCANCACT
-+
-677777888888888888888888777;65-0440222/0../.--.-,,,++**+))))())&''''"##"$#""
- at 30BB2AAXX080903:3:33:204:72#0
-ACCCAGGTCGCTGGCGTCTGTGCCATCTCTGCTCCACTGACCACTCGTGGTGGTCCTGGAGCTCCTGNGCACACNN
-+
-6777778888888888888888882777655)442.2-10/$,,,."-,,*,*$)*'&)#)'&#(#%""%$$"$""
- at 30BB2AAXX080903:3:46:1507:126#0
-TGCCACGCCACTGTCCAGGAGACTGTCTCCTGAGACTGACCTCCCCCTGCACTGGGCAATGTCTGCCTCACCACTC
-+
-677777888888888888888888777765154432221//+/..-&&,,*&****)&)(('(#(##$%"#$"$"#
- at 30BB2AAXX080903:3:59:491:1031#0
-GCCCACCCTCCCCTGGACACAATGGAGGACCCCGTGTGTGGTTTTCACTGACTGAGCACCTATCTCGTGCCATCCA
-+
-67777788,88888888888888877776555445222100././.--,,,,++****))(((((('%%#$""###
- at 30BB2AAXX080903:3:37:422:239#0
-CCTGTTACGCACGTTCTGGTCTCTCCGTGCCCACAGACCCGCCAAGCTCACCAGCCAATGTGCCGCCGGCTCTCCN
-+
-677777888888888888/8/8887/746)55-2/222(0//.,,*--,++)***#'(()%)'#&#'""%"#"##"
- at 30BB2AAXX080903:3:57:725:1925#0
-CGAGGCCGTCACACAGCACCTGTGCTGAGAGTGAGCTGACGTGGACGGCGGCACCGTGGCCGTGGCCGCGCCGCAC
-+
-67777788888888888888888877776555433222110-/.-,--,,+')*)*#*)(&(#((##'"&##"$##
- at 30BB2AAXX080903:3:56:341:1202#0
-TGACGTGGACGGCGGCACCGTGGCCGTGGCCGAGGCACCATCCCTCCACCCTCACTCATGTAGGGATGTGTCGCGC
-+
-67777788888888888888788877/765552432211//1..,.-,,-+'+)*()())#'(((#'$%"$""#"#
- at 30BB2AAXX080903:3:36:1112:1764#0
-GGGCTCCAGTCCGTGTGCCCCACATCCCTACATGAGTGAGGGTGGAGGGATGGTGCCTCGGCCACGGCAGCACTNN
-+
-67777788888888888888888877776555442212100/-...--,,,++)**()())(((((#&#"#"#"""
- at 30BB2AAXX080903:3:48:206:1195#0
-TCGGCTCCCAGAGTCTCCCACCCAATGTCAGAGAGGGGGCCGCAACAGTGGTTCGGGGGGTCCTGTTAGCACTCGA
-+
-677777888888888)888888817777155544322,1.,/'$.,,,$,$+)***)))(('#&('#""##$"#"#
- at 30BB2AAXX080903:3:37:1666:1038#0
-TTTCGAGGACGCAAGAAGGTGTTTCCAAGTCCAGTCTGTCCACCGACCTGAACCTTTACCATTGAAACACCCACNN
-+
-677777888888888888888888777765554432221000/./---+,,++*+**)))()(((('"&%"$#"""
- at 30BB2AAXX080903:3:2:1126:993#0
-GCTCCTGCAGAAGTGGCCAGGACCTCAGGAACGCACCTGCTCCTGGTCAGACAGGAGGGGCTGCCGTGNAGTCTCC
-+
-6777778888888888888888887777655544322221//0-.-,,,,,++)*)))*)#'(&''%%""""$""#
- at 30BB2AAXX080903:3:46:1601:201#0
-CAGAGGTGGGGTGGGGAGGAGAGAGATGGGGAAGCTGAGTCCGGGGCCACAGGTGCAGCCAGGAGGTGCACAGCCA
-+
-677777088881888888888883777765554432221.11..-..--++++&*)))('(()#('#&"$##"$##
- at 30BB2AAXX080903:3:42:308:880#0
-GAGGCGGCATGCGGGCTGGGGCAGCGGCCCCTGGCGCCCCCACACTCCCCCAGGACGTCTGGGGGCACCGCCTACT
-+
-677777888888888888888888777765513422020/1+.,---,,,+&*))))$((()((#%%$'%""""""
- at 30BB2AAXX080903:3:45:1270:921#0
-CATGGGACACAGGTGTGGTAGTGGAGGACACGTGTGAGCAAGTGAACACATCACACAGATGTGCGAGCAGACTCTA
-+
-67777788888888888888888877776555443222100/...-.-,,-++****))))((((('&&$##"#""
- at 30BB2AAXX080903:3:43:614:1567#0
-ATGGGACACAGGTGTGGTAGTGGAGGACACGTGTGAGCAAGTGAACACATCACACAGATGTGCGAGCAGACCTCCG
-+
-6777778888888888888888887777655544322/0/0-//.+,,,,,+****)))))(((((&%%#%"#"#"
- at 30BB2AAXX080903:3:59:189:1019#0
-CACGAGACACAGGTGTGGGAGTGGACACAGGTGTGTGGGAGTGGACACAGAACAGGGGGGAACATGGACTCTNNNC
-+
-67777788888888888888888877776555443222100-/...-++,+++***')#))(#(((''"%"&"""#
- at 30BB2AAXX080903:3:58:1720:376#0
-CCAGCATCACCCTTTTCCACGGGGGTGTGCCCCTTCCTTGGTCCTGTCCCCTCCCACACACCCGAGCCAACACANN
-+
-6777778888888888888888887777655544322*10.///--+-,+,++)*(*')()&((#('"$%%%$%""
- at 30BB2AAXX080903:3:8:864:1934#0
-CCCCAGCATCACCCTTTTCCACGGGGTTGTGCCCCTTCCTTGGTCCTGTCCACTCACACACACCCGTNACTCTANN
-+
-67777788888888888888888877476%555530212/00/.-,,-)++++****()())(((('""%#%"#""
- at 30BB2AAXX080903:3:4:1073:1492#0
-TGCCTGAGCAGAGCACCCCCGGCCCAGACCTCAATCCGCGGGCTGGCTGTGCGAGCACCAGAATCCTCNATCANCN
-+
-6777778888888888'88&8888707565-5413222200/#-,+,,-+,%+$&&)$%'(''#'##'"#"##"""
- at 30BB2AAXX080903:3:58:226:1271#0
-CTGGCCCCTGCCCTTGAGATGCAGCTGGCATGTCCCTGTGGGCATCTCCCAGAGCAGGTCCAGGGGTGAGCTGANC
-+
-67777788888888888888888877776335401212000/-.-,,,),+++++)*)(()())((''"&#""#"#
- at 30BB2AAXX080903:3:38:1483:1449#0
-GCTGTGCGGTGTTGCATCCACTAGAAAGGGGCCTCCTGTTCTGACCCTGGCCCCTGAGATCGGAAGAGCGCTACAC
-+
-67777788888888888888888877776555443222000//...--,,,,++*****(()(((('"%""""##"
- at 30BB2AAXX080903:3:42:1383:1032#0
-CTGACAGGTCAGTCTGGGCCCCAGTCCCTGGTTCCTGGTGAGCTTCCCATCACCCCCCACCTCCCTGCGCCCCCAC
-+
-677777888888888888888808-847655+442522000//-..,,+-++******')(((((&''$"####"#
- at 30BB2AAXX080903:3:52:1393:242#0
-TGCGCAAAGTCCCAGAGCCGCCGGCGCACGCTCACACCCCGGCGAGCAGCCCCCAGCTCCCTCCCTCTCAGGGCCA
-+
-67777788888888888888888877776555443222100//..---,,++++***)*))(()(''$##""""#"
- at 30BB2AAXX080903:3:53:889:985#0
-GCGGCTGGAATCCAGGACTCCGCGCGGGACTGGGATGGGCTGGGCTGGTCGCGGACCGGGCTCCTCTCGGAGGACG
-+
-6777778888888888888888887777055544222210.//.-.--+-+++**)***)'('((''"""""""#"
- at 30BB2AAXX080903:3:49:1195:77#0
-GGATCCTGCAGGTGCATCCTCCGATCTGCGACTGCCCGGGCTGCCGAATATCCTCCCCGGCGGTGAGATGTCGCGT
-+
-67777788888888888888888877776555243222100//....+-,*++**')*')#()&'&'""""%"#""
- at 30BB2AAXX080903:3:55:1286:840#0
-GATTGTGTGTCAGGTGGGCACATGGGTGAGGTGCGGCTGGGTCCCCTTCCCCTGCCCAACAAGCTGGGGTCATAAC
-+
-677777888888888888888888777765554432221-0+#.-.+,)++*')%))&)('#(&&(#"""""""#"
- at 30BB2AAXX080903:3:4:443:755#0
-ACACAGCCGCACCTCACCCATGTGCCCACCTGACACACAATCCGACATGGACCTGCACGCACAGGCACNCACANCN
-+
-67777788888888,8888288887'7165554122.10(0/..--,-,,*%*****)(&)(')'&&$"%$"#"#"
- at 30BB2AAXX080903:3:47:359:341#0
-CTGTCTCCCCCAAGCCCCATGCCAAATCCGCAGGCATGTGCACCTCATGGTCACAGATGCTCCGGGGCNCGAGGCC
-+
-67777788888888888883888877776555443222.000..-.,--,+++***)))()(('(('&"###""##
- at 30BB2AAXX080903:3:42:210:284#0
-GCCGAGTTTTCAGATCTGTGTGCTGTGGCCGAGGTCTCTAGTGTGGAGGAGGTGTGTTCTGTCCTTGAGNTACGNG
-+
-67774788888888888888888877776555443222100//..---,,++****()))))(((&'$&""%$""#
- at 30BB2AAXX080903:3:8:590:1890#0
-CTGGGGTGCCGGTGTGTCCCCACGCCCGACTCTGCGCATCACGGGGCTGAGGCTGGCATACAGCCTGNCCATCCNN
-+
-6777778888888888888888882767/565343220+11**.,,-&,++,+***))&)((&#'&'""%""$#""
- at 30BB2AAXX080903:3:52:1129:1306#0
-TGCCCGGGCCTCCGCGTGTCAGCTGGAGCTCGGGGGTCCCTTCAACAGCCACAGCCTGTCCGGAGTGTGACTGTCG
-+
-677777888888888888888888777765554432/0*//-,--,-,,,,,++*)*(((&)('(#($""#"%%#"
- at 30BB2AAXX080903:3:33:1368:1702#0
-ACAGACAGGCATCATACCTTCGGCCTTGGCCGCACTCTGTGGTCATTGGTGTTGGCGGCAGCCCAGGNTATCTGNN
-+
-67777788888888888888888877776555483220100/,.+----*+++*+**)%#(''''''"#""##"""
- at 30BB2AAXX080903:3:45:571:1217#0
-ATGTAGTAACAGGCCGCTGGCTCCGGGAGGTGGCAGAGCCCTTGAGAGCGTCTAACTCACTCCCTCCTCCGATCCG
-+
-6777778888888888888888887776650541322200/0..--,-,,+++*))))(((((((''"$%#"##"#
- at 30BB2AAXX080903:3:41:1484:384#0
-GCCCGCTGTGGTCCCTGCAGAGCACAGCCGAGCCCCGAGCTGACGCACACACGCGGCGGACGCGCCCGCGGCTCGC
-+
-6777778818888888888888887777645544321211//...-.-,,-+++*)*)((()#''''$$%$""$"%
- at 30BB2AAXX080903:3:48:855:533#0
-CTGAGAGAAATGCGGGGCAGGGTTTGCGGAACGGAGGACCTGGGCTGGTGAGGGCTCCTCGTCTGGTGCCCCGTGC
-+
-67777788888888888888888877776555443222200//..---,,+++****))))()(('#$"$#$#""#
- at 30BB2AAXX080903:3:3:8:941#0
-CTGTCTGAGCTGAACCCTCGCAGACTGCAGGCCCCGGGGCTCACAGGTCACCAGACGAGGAGCCCTCGNTACNNTT
-+
-67777788888888838888/8887778644013/20-2//..---,+)+(+***(*())((#''%'%"#$$""""
- at 30BB2AAXX080903:3:2:224:380#0
-GCCTGGTGCAAGGCCACTGGCAACTGTCTGAGCTGAACCCTCGCAGACTGCAGGCCCCGGGGCTCACANCTCNNCC
-+
-67777788888888888888,881737363.521322+0....-+,,,,+++***(&)))()((''%""$#"""##
- at 30BB2AAXX080903:3:60:1703:384#0
-TCACAAAGTACGGGTGGGATTGGCAGGCAGATAAAAGGAGGGAAAGAGAGGAATTGAGTGGAAGAACACACCAGNN
-+
-677777888888888888888883777+65554-3+02100//.,.&-%,%,%****)&)')')#'&$%%%$$"""
- at 30BB2AAXX080903:3:51:849:370#0
-GCAGGGGAGGGCTGAGCCAGTGGGCGTCGTCTGTAGGGGGATGCCCAACTGCGGCCCCGTCTCTCGAGACAAATAC
-+
-67777788888888888888088877776/5548322210,-/.,-,,,+++++*))*)(('(''%%%$%#""""#
- at 30BB2AAXX080903:3:58:487:704#0
-GGCCCGGTCCAGCCCCACCTTCCTCTCCTCCTGCCCCACCTTCCTCTCCTCCTGCCCCACCTTCCTCTCCTGCCGC
-+
-67777788888888888888888877776555443222100//..---,-++++*)))*))((((('&%%%"####
- at 30BB2AAXX080903:3:34:357:1406#0
-AGAACAGGACCGAGGCCCCTTCTCCCTACTGCTTGTTGCCGTGCACTAACACGAGCACTCCTGTTCTNCACGAGNN
-+
-67777788888888888(8/8)887787%542442/110/+-....,))&+'*)**))()'()''&%"$"%###""
- at 30BB2AAXX080903:3:49:525:2023#0
-GAAGGGTGTGTAGGAGCTCTAAGGTGAGGGGATGTATGCAGGGTGGGGGGAGAGGGGAGGGCGGAGATTCTCGCCA
-+
-6777778838888888-8&,,388$7%765554/3'12.#0$/-.-+,,)+')*+(#')()#&(#'#""#######
- at 30BB2AAXX080903:3:51:1323:735#0
-CCTGGAATCACACCCCCTACCGTCCTGCTTCCACAGCCTGAATCCAATCCCCTGTCTGCCAGGAAGGCCCCGCGCT
-+
-6777778888888888888888887777655544321210///..-.-,,,+++****))))(((('"$#$"#$#"
- at 30BB2AAXX080903:3:38:1490:1640#0
-GAAGGCCCAGGGGACCTGCGTGTCTTGGCTCCACGCCAGATGTGTTATTATTTATGTCTATGAGAAGCGAGGACAC
-+
-6777778888888888888888817777)53234302-1(,.*.,)+-,,+,+)*))'(#'(%(&''"""""%$##
- at 30BB2AAXX080903:3:35:68:1295#0
-GTCTGCCGTCAGTGCTGCCGAGGGACGCTGCATTCCCGAGGCCAGGCAGACGGAGGAGGGGGCTGCGNCCTCGACN
-+
-67777.88888888888888/8880/7$655-141../.-0/,...*,,+),*$**(*))'(##(#&"$###""#"
- at 30BB2AAXX080903:3:42:565:1695#0
-GGGGAGGGCGTGCTGGGGTCCCCGGAGGAGAAGGCCCAGCACACGCCTGAGTGGACTGAAGCCTCCGCCTGTCCAG
-+
-6777778888888888888803887177154,41--//.0/..,.*,,-+-)*+*()*)'''#''&'&%%%%$%$%
- at 30BB2AAXX080903:3:47:15:1542#0
-CTTCTGCCTCTGCAGGCTCCCACAGAAAACACTGCCAGGCCACCTCCATCTGTGTGTTCATTTGCTCCTGCGCACA
-+
-677777888888888888888888777&25554232.0100...).-+),)***()#)(((()('&'&""$"$#$#
- at 30BB2AAXX080903:3:49:634:380#0
-CCTCGAGCCATTGTTTGCAGGCGGGGGCTTGGCCCCTCTCTCCTGGGCCCCTGAGCTGGTGGGAAAACGCGNGACA
-+
-6777778888888888888888887777255544320200.//,,.-,,-,*+(+()*)'))(''''"$#""#"#"
- at 30BB2AAXX080903:3:47:244:560#0
-TCAGGGGAGCCGGGAGCTATTTAACGAGGTTTAGGGTAGGCTCCCAGGTCACTGCGCAGGACTGCTCCGCACACGC
-+
-6777778888888888888888887757655544320110///..,--+,,,+*)*))))(('((''"$""#####
- at 30BB2AAXX080903:3:42:1715:493#0
-AGGGGAGGCTGCTCCGTTACAGGTGGGCAGGGGAGGCGGCTCCGTTACAGGGGGGGAGGGGGGGGGGGCAGCGCNA
-+
-673177488/.888888183,88,171824153-2+).0##++&%$&#$,*$*)(&#'''#'####%$#""##""#
- at 30BB2AAXX080903:3:46:948:1513#0
-GAGCAGCCAGCCGGCTCTGCCTTCACGCCCTCCACAGGGAATCACAGTTATCTCACTCCCTGCCTCACNGCGCGGC
-+
-6777778888888888888888887777655544322212///..--,,,+++****)(*)((((('"""""#""#
- at 30BB2AAXX080903:3:42:43:813#0
-GGCGGCTGCGGTGGACGCTGGATATGAGGGTGGGAAGGTTGCCGTCCTGGCTGGAGAACGGGACCGGNATGCTCGC
-+
-677777888888888888888884771765'5440222%00*,.)(,,,-*'+%(*&)#)#('#''&""""#"#"#
- at 30BB2AAXX080903:3:34:375:1494#0
-TCCTCCTGCCTCTCTGGCTGCCTGCCAAGGCTGCTGGTGCTGAGTGGAGACGGCACCGTCCCCTGGCNCTCTGCNN
-+
-67777788888888,888/8'8387#)305.340322$1*//),,--',+)+%*'&)(#((''#&'%""%%%""""
- at 30BB2AAXX080903:3:58:114:1203#0
-ATCTGTGTCCCCCATCCATGGCCCCCATCCGCGTCCTCGGGCACCTAGGAAGGCCCTTAGATCGGAAGCGTCANNA
-+
-677777848888888-88888883779&)5554&23001./.,.-,*,,+*++')'((()&'#((%&'"%"##""#
- at 30BB2AAXX080903:3:33:1543:42#0
-ACAGTGGAAACTACCCTCTCCGTTCTGTGGGGGGCTAAGGCCTCCTCCTAGCCCGGGGGAGGGGGCGNTCGCCANN
-+
-677777888888888888/888'87777655544-52.11,/.-.,+-)&(+)$*)))(#((#####"$$"#$$""
- at 30BB2AAXX080903:3:50:1576:91#0
-CCACTGCTCAGGCCCCTGAGAAGCCATCGTCTCCCCCACAGCCTCCCGTGCCCGAGCTCGGTGGGCAGTGAGTCAA
-+
-67777788888888888888888877776.5544522210.//..--,+,++%*))*))()'(((&%%"""""#"#
- at 30BB2AAXX080903:3:3:1499:703#0
-GATGGCTTCTCAGGGGCCTGAGCAGTGGTGCCTGGATCCGTGTGTGGCCAGGGAGATCGGAAGGGGGGNCGTCNCN
-+
-67777788888888888/88888871779532441./')0)/./-,,*&&++#(*&(#()#%'#'#'""$"##"#"
- at 30BB2AAXX080903:3:58:307:224#0
-CAGTGGTGCCTGGATCCGTGTGTGGCCAGGTGCCCCCCGCCGCCCGCCGGGCCCAGCCCCCCGACCTCGNGCGNNC
-+
-677777888888888888381848777365,51/2222*00/..,+,,,+**#*'('(#(&(''#&%%&""$%""$
- at 30BB2AAXX080903:3:4:911:601#0
-GGGAGGACCTCAGGAGAGTGAGCTGGGCCTGGCCTGGGCCTCCCCTCTGCCACCTGCTGGGCTGTGTTNGATCNGN
-+
-67777784884888888288084677410440.,3212/0/**,-.,,,(*+*)**()(''#((''#$"#"%#"""
- at 30BB2AAXX080903:3:53:788:2041#0
-GGCCCAGTCCTGCCTGAGCTAGCACCCTGGCGTGGCTGGCATGGCCTTGTCCACCCGCCCAGCCAGGCACGCGGCG
-+
-67777788888888888888888877776545443322&%.--#,,(*))$(%&*#'&((#'''###$"#$"$"#"
- at 30BB2AAXX080903:3:38:1522:1373#0
-GACAAGGGCATGACAGCCACGCCAGGGTGCTAGCTCAGGCAGGACTGGGCCAGAGAGGAGGACGGGGCCCTCGCTG
-+
-677777888888888888888883777/655544223210///-,,-,,,+*+)+)*)))((((#'(""$##"#""
- at 30BB2AAXX080903:3:49:1121:995#0
-CTTGCCCAACAGGTCACCTGCGGGAGGGTAGTGAGTGCCCACCTGCATCTCAAGGAATGGAAGGGGACATCCGCCC
-+
-6777778888888888888888887777655544322011./...-.-,-+,****))))(((((('%"#$#"#$#
- at 30BB2AAXX080903:3:42:623:814#0
-TCGCTCAGTGCTGACACAAGCCGGCGGTAAAGGGCCTCCCGGCCCACGCTGGGTCCCAGCTCCCGCGGCAGCACGC
-+
-6177718888888888+8838888.77$*4$,4$*0)-&*/.'&,'"))+$')$')(###&#''#'#$$""#"#"$
- at 30BB2AAXX080903:3:34:1296:1102#0
-CGCCTCTACCACCTGGGCCTCCCCAGCCACGGTGAGGACCCACCCTGGCATGATCTCCCCTCATCACNGCATCANN
-+
-67777788888888888888888877776555-1020/./0-/-,)+-,+(+'***)()(&((#'%'""$""%$""
- at 30BB2AAXX080903:3:33:1275:1431#0
-GGACCTAGGGGACATGGAGGTGTGGCCCGCCCCAGGGGGCATGGGGCAGGACGTGTGGCAGAGGGGGNTCACAANN
-+
-677777888888888888888888777765554432221-.//..-,+,,**+'*(*)(()'(((('""%"%""""
- at 30BB2AAXX080903:3:57:203:182#0
-GGAGAACGTCCTGAGGTGGGGTGGACAGGGTCAGGGCCGACCCGGGGGAAGGGGCAGCCCCTCCAGCTGNATACCT
-+
-677747888888888888888888772765/51412221/0///---,)),*+**(*))()&'(&''"&"$&###"
- at 30BB2AAXX080903:3:2:1758:558#0
-CGGGTGCGCATCCCCTGGGAGCCCGCGTGGAGGCTCCCGGAGCCGGCCCCGGCCCCTCCCGGGGCCGCNCGTCTAC
-+
-677777888888888888888888777-6/354/10)*(&&#+,'+&++%$%)))%#######&###$""%"%##$
- at 30BB2AAXX080903:3:56:666:68#0
-GTTGAGTGGTGGCTCCTGGAGATTTGTGTGGCCCCACCCCTACCCCCGGCCACCTCAACACCGAGGCGTGCCGTCG
-+
-6777778888888888388884887757655544301210.+/-.-.,,+(++*&*%))((%'''('%"$##"##"
- at 30BB2AAXX080903:3:47:1097:1460#0
-CTCCAAGGCTGGCTTCTTCCTGATAAAGCAAAATTTATGTAGCCTCCATCTCTCCCCAGATCGGAAGTAGGTGCAA
-+
-67777788888888888888888877776555443222110///..,,,,+,+*+*)))())(((('"$""""#""
- at 30BB2AAXX080903:3:38:1185:987#0
-GAGAGGGCAGGGGCTGGCGGCCACAGCAGGGCCAGGCATCGCCAGACCCACCACCAGGGCCCCATGTGTCCCTCTC
-+
-6777778888888888888818-8077045514/32/0101./,-,,,,)+**)))(()((()(''#""#######
- at 30BB2AAXX080903:3:2:361:1667#0
-GCCTGGGAGAAGCTGACCCGGGAAGAGGGGACACCCCTGACCTTGTACTACAGCCACTGGCGCAAGCTNCGTNACT
-+
-6777778888888888888888.671776355181200*.-.,,-',+,,++****))(((((''('""#%"""##
- at 30BB2AAXX080903:3:42:1683:1627#0
-CTGGGGGGTTGGGGGAGTTCAGGGTCATGCCTCACCCTGGGCAAACCCCCACATGTAGCTGGGGCTATACCCTGCC
-+
-677777888888888888888888777763551312021./1.--,,-,,***(+))))((((('%'%$%$####"
- at 30BB2AAXX080903:3:41:65:1885#0
-TTCTCCTGAACCTTCCCAAGCAGCTGCTGCACCTGCCGGCAGTAGTTGGCCACCTTGCACTCCCGGGTTCTACCGC
-+
-6727/7888888888+88888888777765511132.011//.+-+-+,+*+*)&))(((('((''&""##"##"#
- at 30BB2AAXX080903:3:35:258:206#0
-AAACAGACCTCCCGTGGGGGCCCAGAAGGACCTTCTGAGGATAAGGAGAACCCCCTCCCCCACCCCANCTCTAGNN
-+
-6777778888888888888888887777655522322,10,./...-,,-****)(*)%')(((('%""$%"##""
- at 30BB2AAXX080903:3:54:1451:912#0
-CGGGATGGCCTGGGGAAGTGTGCGATCAGCGTACCAGCCTGAGCCAGGGTCGGCATGCTCAGTCCCACAGCCGCTG
-+
-67777788888888888888888877776555443221100///----,,+++***)))))(((('''&"%%##""
- at 30BB2AAXX080903:3:40:578:806#0
-TCCTGAATGGCTTAGAACCCCTCATCAGCCCCTCCAAGGGGGCCTCACGGGGCGCGTTGCCAAGATCTGTGATGNA
-+
-67777788888888888888888877776555443212100/.--.,,,,,+****)()''((((&#"$$#%"""#
- at 30BB2AAXX080903:3:56:1525:1088#0
-GGCCGAGTGCATCAGGGAGAGGCTGGGGCTGGGCACTCAGGCCCCTTCCCCACAGGCTGTCAGGGCACACACCCCT
-+
-67777788888888888888888877773555411020200.*.-++*,,+*+())%$)(((&'(#'$$&"$###"
- at 30BB2AAXX080903:3:33:1146:1424#0
-TTCGGACTCCAATCTTTCCCTACCGGAGTGGCATGTGCACGTGCAAAGATGCATACACACAGGGACANACACGTNN
-+
-67777788888888888,88888&&77765554432221/0..,,---,(+++**)*))(()(#(''""$#"#"""
- at 30BB2AAXX080903:3:4:1642:1404#0
-TACGTGTGTGCCTGTGCATGTGTGCGCCTGTGTGTACCTGTGTGTATGCATCTTTGCACGTGCACATANCAAANAN
-+
-6777778888888888888888887777655544322210///.--.--,,,++**)))))))(('#$"%#"""""
- at 30BB2AAXX080903:3:3:1569:678#0
-GAGTGGCATGTGCACGTGCAAAGATGCATACACACAGGTACACACAGGCGCACACATGCACAGGCACANATCTNGN
-+
-67777788888888888888888877776545441222.00/..-.--+,)*(+)*()()'((('(#$""%%$"#"
- at 30BB2AAXX080903:3:43:249:880#0
-TGCATCTGCATGTGTGTACTGTGCGTGTGTACCTGTGCGTGTACCTGTACACTTGGGTGCATGCATGCACGTCTGC
-+
-67777788888888888888888877776555443222100//----,+,-++++**)))(((((((&%&&#%$$#
- at 30BB2AAXX080903:3:1:1521:96#0
-TGGGCACCTATGTGCATACACACGTGTCTGTGTGCATTTGTGTGCATGCATTTGCATCTGCATGTGTTNCANTCTG
-+
-6727+7888888882888188888.77165454423%200./..----+,,)+*)**$)('(((('%""$#""$#"
- at 30BB2AAXX080903:3:57:1037:1080#0
-ATGCAAATGCATGCACACAAGTGCACACAGACACGTGTGTATGCACATAGGTGCACAAAGGTACATAGATCCCCTC
-+
-6777778888888888888888887777655544322210///..--,,,+++**+)*)))'((((''$"$$####
- at 30BB2AAXX080903:3:37:315:1077#0
-CAAATGCATGCACACAAGTGCACACAGACACGTGTGTATGCACATAGGTGCACAGATCGGAAGACGGCGCAGCCAN
-+
-67777788888888888808888877776555142222100//.----,,*++***)*))()()(''$#%#"$##"
- at 30BB2AAXX080903:3:34:1362:466#0
-TGCATGTGCGTCTGCGTGTATCTATGTACCTTTGTGCACCTATGTGCATACACACGTGTCTGTGTGCNCTCTCTNN
-+
-6777778888888888888888887777:555443222100//..-----++++**)*)))))('('"$%#"%$""
- at 30BB2AAXX080903:3:39:1328:1242#0
-TGTGTGCATCTGTGCGTGTGTACACCTGTGTGTATGCATGTGTGTACCTTTGCGTGAGATCGGAAGACCTGTCGCA
-+
-67777788888888888888888877776555443222100//...-,,,+++****))))()((''"$#$"""$#
- at 30BB2AAXX080903:3:45:97:971#0
-GTGTGCCTGCAGGTGTGTGCATCTGTGCGTGTGTACACCTGTGTGTATGCATGTGTGTACCTTTGCGAGGGGTTGG
-+
-67777788888888888888888877776555443222100//..---,-,+++**)*))(((('(&"%$""""##
- at 30BB2AAXX080903:3:3:477:2041#0
-CCACCTCCCTTCCCAGCCTTGAGTTTCTAAGGCTCAGCCAGACAGATGCCCCCTCCTGGCCAACGATCNCGGNNCA
-+
-677777888888888888888883237765521,22/12././.-+,+',++)(*)'((((%(&(%''"#"#""$%
- at 30BB2AAXX080903:3:33:1242:952#0
-CTGACCAGGAAACATACCAGTCTGTGTACAACTGGCAGTATGTGCACTGCCTCTTCCTGTGGTGCCGNGCAGTCNN
-+
-67777788888888888888888877776555443222100//./-.-,,++*+****)((((((''"#%""""""
- at 30BB2AAXX080903:3:49:205:1069#0
-CGCAGGTGTATGGCGAGCTGGAGGATGTAGAGGAAGGCGTGCTGGTAGGCCATACCTGGCACAAGGACAACACGTA
-+
-27777788888888888/888)88'77745554432221-0././+--,,++%*)*&)*))()'(''%"##$#""#
- at 30BB2AAXX080903:3:39:564:1845#0
-CCTGGTGCCCTCCCCTTCATCAGTTTCATGCAGTGGACCTTGACGGAGCTGCTGGCCCTGGAGCCGGGTAGANTCT
-+
-67707788-88888888888868877716555433220211/.-,.,-+,,+***(()((('('('&"$#%#"""#
- at 30BB2AAXX080903:3:2:1349:1656#0
-TGGAGGAGGACACTGGGTGTTGGGACCTGACGCCATGGCCAGGGGACAGTCCCACTGCCCGTCCCCACNACGTAGC
-+
-67777788888888888-827888777&3.$/441*)10.)..+%-*'*$**#')#'((('#(''('&""""#"""
- at 30BB2AAXX080903:3:8:571:770#0
-TTTGCCTGGCTGGGGAGGGCTGTGCTGGCCCTGGGGCATCCCTGCTGAGGAGGCTGGGGGGCCACCANTCTACTNN
-+
-6777778888888888888888887777635544322210....---,-,,++)*+**)))&''%'&""$#%%#""
- at 30BB2AAXX080903:3:4:1029:1789#0
-TTCACTTCTGTAACTGAGCACCTAACTCACGGCTCCCCCGAGGTGCTTTGGGAAGAGCTGGTGGCCACNCGCANGN
-+
-677777888888888888888882777765555632221/0..(,.,,+,*+*)*())(((#((&('%"$#$#"""
- at 30BB2AAXX080903:3:41:1592:2006#0
-GGTGCCCTGCTTCCTGACCTTCCCCAAGCAGTGCCGCATGCTGCTCAAGGTGGGTGGCCCAGTCCCCCGGCTCGAC
-+
-672777888888888888188318377785264/-0/.10,./)-,++++(*'*#)(#&##'###%#"""%"#""#
- at 30BB2AAXX080903:3:34:1734:1975#0
-TGGTGCCCTGCTTCCTGACCTTCCCCAAGCAGTGCCGCATGCTGCTCAAGGTGGGTGGCCCAGTCCCNATAGACNN
-+
-677777888888888*888888887727635554122-2/0+./,,+,,,+$**+#))'#('('&'%"$"#"##""
- at 30BB2AAXX080903:3:47:1091:942#0
-ACGACGGTGTTGGCGGACGTGCGGCGGCACATCAGCGTGCTGGCGCCCCACTTCCTGACCCTCCCCAACGACTCAT
-+
-6777778880888888#8828828/7731330-3320#1%.//#.**++&+*)$*&'((('''#(&%""""$"#""
- at 30BB2AAXX080903:3:53:717:875#0
-CTGGTGTCCTGTCTGTCGGAGACGACGGTGTTGGCGGCCGTGCTGCGGCACATCAGCGTGCTGGTGGCGCGGCGGN
-+
-6777778888888888888888887777355544222110-/+,-*,-&(+'(*'*')%)##((%(%"$#"""%$"
- at 30BB2AAXX080903:3:52:225:1682#0
-GAGCAGCCTCGCGTCCGAGCCGTGGGGCCTCCCAGCCAGGGGTGGGGGGTCTCTCTAGATCGGAAGAGNGTCGAGC
-+
-6777778888888888888888887777655544322-100/#..-$-,&++++))(*)(&)('#('$"#"""#"#
- at 30BB2AAXX080903:3:53:951:1893#0
-ACCCCTGGCTGGGAGGCCCCACGGCTCGGACGCGAGGCTGCTCAGCATGTTGGCGGGATCGGGAGGTGCGACCGAA
-+
-64777(88888888/88/882788777/65/5-4(32*./&.+,,++,+&+(*$*#)&&(&(#''##&$%%$#$"#
- at 30BB2AAXX080903:3:40:192:864#0
-TGAGCCACCAGGTCAGGGACCCCTGTCGAGGCAGCAGCTGTACCGGAGGGAGTCAGGCAGGGGGGGGTAGACGCCC
-+
-67777788888888888888888877776555543221100.+..-+-,,++*%*+)(#)#)(('('&"""#"###
- at 30BB2AAXX080903:3:35:1530:450#0
-CCTGGATGCCAGGCTCCCCCCAAGCTCACCAGCACTGTCCGTGACCTGGAATTTGTTGGCCTCAGCANCGCGACNN
-+
-67777788888888888888888877776555443220100-/-.---,,,+++**)*)))(((('%"%"$"#$""
- at 30BB2AAXX080903:3:55:1513:664#0
-TGAGAATTGAACTATGTGGTGGTTTGAGAGGAGGCACGAACGGGTTTGAAGGTGGTGAGATTGGGAACACAGCCAC
-+
-6777778888888888888888887777655544*22220.//&---,+,,+'+**)())&#((%(%$$&$"$###
- at 30BB2AAXX080903:3:43:535:1867#0
-GAAAGGAAGGACAGAGGGGCTGAAGAGAGAGTTGCAGGGGAGCCGAGTTGCTCTGTTAGAAGGAGCGGAGGGTGCG
-+
-67777788888888888888887873776355441122101/+..--+,,+,+**)*))()))((&'&"&""""##
- at 30BB2AAXX080903:3:39:758:317#0
-TTTGTGGGAGCTCTTTGCATAGGAGCCCCGCCGTTGCAGTCTGGCGTCCTCGCAGGCAGATCGGAAGAGGGGGGCA
-+
-677777888888888888888888777765554132221/0//..-,-,-+++*+**)))()))'('"&%%#####
- at 30BB2AAXX080903:3:57:1081:929#0
-AGGACCCGCGGGCTTAACGGACGCGGAGACTGCCGGAGGGCTGCTCGGCGGTGGCGGGCCGGCCAGAGTGTACACA
-+
-67777788888888888888888877776555443202100-/.-.,-,,+$+*)*)'(('&(%#'&%$%"##$$$
- at 30BB2AAXX080903:3:3:685:939#0
-AGAAGGGGCGGGGGCCGCTTCCGAGGGCCGGGGGAGGTCGGGACTCAGGGGCGGCGCTGGGGGCACTANAACANGA
-+
-67777788888888888488184,777./50545111,&///#(,+(-,$+$%*#)%&)&((###%%'"""$$"""
- at 30BB2AAXX080903:3:44:116:1187#0
-GCGCTGGCGCATGCGGCTCATGGCCACGAAGGCATCGTGGTAGGGCCGCTTGGAGTTGTGGGGCACGCCGTGAACG
-+
-6/777788888828883888888827670055/01(2/1/,..#-*&,$(,+)$*)((&()(%&%#'%$"""#"##
- at 30BB2AAXX080903:3:46:267:1348#0
-CCGGTGTCCCCCGACCCTGTGCCTCCCTCACCTGCCTCTCGGTGCCCCGTAGACTCTGCTCCCAGCCGTGCACGTC
-+
-67777788888888888888888877776555443221100//.-.--,,++++*)))))((((('''""##%"##
- at 30BB2AAXX080903:3:40:783:59#0
-GCTGCAGCACTTCGTGGACGTGGCCAAGACCGAGGAGTTTATGCTGCTGCCCCTGCAACAGGGAACACGTAGGCTG
-+
-677777888888888888888888774765550432201////.*.-,,++++'*())'()(#(&%'""%$""#"$
- at 30BB2AAXX080903:3:2:871:1669#0
-TGCCTAGGACGCCCCTCTGCTCAGGCAGCAGGTGGAACTTCAGGGCCTCGATGAGGAGGTCCTTGCCANGAGGCGC
-+
-67777788888888888888888877756/45&22-10000/....,(,,((+&*)&))''(#&(&#""""$"#"#
- at 30BB2AAXX080903:3:46:1730:424#0
-GCCGGCCGAGTACAGGAGTCCATGCAAGGCGGCCACACCCAGGCAGCTTCGGCTTGTGCCCATGGACGTCCTCTGT
-+
-67777788888888888888888877776555443211000.//-.-++-*%+*)*)))))(''(''""#"$#"#"
- at 30BB2AAXX080903:3:59:670:1635#0
-TCATAGCCGCCGGCCGAGTACAGGAGTCCATGCAAGGCGGCCACACCCAGGCAGCTTCGCCTTGTGCGCNTTCACA
-+
-67777788888888888888388877476555333220101..-,,,++,+****()))((&(('(%"$"####$$
- at 30BB2AAXX080903:3:1:818:1064#0
-AGGCAGCCAGGGTCCTGTGCCCACCAGCGGGCCCTGCCTGGTAGGACTTTGCGGTCTGAGTTTGACTCNCANGCGT
-+
-6777778888888888888838287715641232-5/-00-'*,,*+(++*)+)#('('(''((&%#%"#"""$""
- at 30BB2AAXX080903:3:51:1465:1764#0
-CAGCCATTCCGCTGGGGAGGGCAGGTCCTGGGGCCGGGACGCCTTTCTGTCAGATCGGAAGAGCGGTTCAGCAGGA
-+
-6777778888888888888888887777655541/222/00-...-,-,,*+++*))))()((((('"$"####$"
- at 30BB2AAXX080903:3:3:1580:1279#0
-TGGGAGTGGGGTCTCCACGGTGGGGGAAGGTGGGGATGCCCCCCAGGCGGGCCCCCTCACCCACCAACNCTACNTN
-+
--/7777.888888888888808757745/5'111/+-0&-,))+'',&%(+'#'&##&#%'#%%'##""#""""""
- at 30BB2AAXX080903:3:51:994:41#0
-AGGTGTGAGGAGCTGTCGTAGCCGCCCACAGCATACAGGTTCCCATCTGCCGGAAGTCAACACACCCGAGATACTC
-+
-67777788888888888888888877776555443222100//..---,,+++)**()))))(('('"$#"""#"#
- at 30BB2AAXX080903:3:54:1043:691#0
-GCCACGTACAGGGCACCCTCCAGCACGGCCACGCCCGCTGAGCTGCGTCGGCTCAGCATGGACGCCACCGCACCCC
-+
-6777778888888888888888887777655544322210///..--,,,+,+*****)))((('('%$#&&#"""
- at 30BB2AAXX080903:3:35:31:1731#0
-TGCCACGTACAGGGCACCCTCCAGCACGGCCACGCCCGCTGAGCTGCGTCGGCTCAGCATGGACGCCNACACGCAN
-+
-67777788888888888888888877776555443222000//..----,+++**))))))((((''"#$#$"%#"
- at 30BB2AAXX080903:3:58:1374:2026#0
-GGGGGGAGGGGCCACACCACAAAAAGGGGTGGTGGCGGGACATGCTCGCTGAGGGTGGGGGAACTCCCATTCTCCN
-+
-677777888.888888,882848477776.51240.21.-$*-,%'"+$&+'**'*'))#(#'####&"""#"$#"
- at 30BB2AAXX080903:3:42:719:901#0
-TGGTCCTCGGGTTGTACTTCTCGATGGAGTTGAGGCTGGAGCTACCGTCGTTACCCCCCACGGCGTACCACCATCC
-+
-677777888888888888888888777765554432221/00..-,,,,-*,)*&*)*)(('(((#'&"&%$###$
- at 30BB2AAXX080903:3:37:142:97#0
-CACCAGCCTCTGACCCACCTACCACCAGAGGCCTGCAGCCTCCCACATGCCTTAAGGGGACCGTGGCTGATACCNN
-+
-67777788888888888888888877776555443222000/...---,,,++&**))))()(((''"""""##""
- at 30BB2AAXX080903:3:38:1745:401#0
-CTCCACTGCCTGCATGGGGGGCGCGGGGAGTGACCAGGCGGGGGCCTCACCGCCCCAGGGCCGCTGCCAGTTCANN
-+
-67777788888888888888888877774545543222100/,.-.*-+,+*+***''((('(#%&&$"#""#"""
- at 30BB2AAXX080903:3:48:1343:884#0
-GGTCCAGGGTGAGGGGTGTGGGGGGGTGCCCTGAGATGCGCAGGCATCTGGGAGCTGCAAGGCAGAGCTGCGCGCG
-+
-677777888+8888888888888877276552443212200./.--.-,-,,)***))(('((((&'$"$%$$"#"
- at 30BB2AAXX080903:3:39:1428:819#0
-CCACATCGTGGGCTCTGGGGTTCGGGCTGGGGAGGACAGCCTTGCCCCCGAGCGCGCTGCCTGGCTGTGNTGNTCA
-+
-6777778888888888888888$877776555343+-011,*&--.+,,+*''*%'*&)'&((%#'#"&"%#""##
- at 30BB2AAXX080903:3:36:72:1028#0
-CCATGGGGAACAGCCACTGTGTCCCTCAGGCCCCCAGGAGGCTCCGGGCCTCCTTCTCCAGAAAGACTATCACAGN
-+
-677777888888888888888888777165554431/2200//..---),+,+(*+*))))((((#'$&#%#%"""
- at 30BB2AAXX080903:3:47:900:319#0
-AGGAAATGGGGCTGGGGGAGGAGCTCTGGGCCAGTCCTAGAGCCAGTGCTCCGCGGCCCTGTACCTGTGTCTGCTC
-+
-677377888188888888388642-80.0-73.1/.0.00,-+,-+*,++**+)))(#(#'#(&''&"""##"#"$
- at 30BB2AAXX080903:3:56:327:1058#0
-CACTGGGTGCAGAGCCCAGGTACAGGGCCGCGGAGCACTGGCTCTAGGACTGGCCCAGCGCTCCTCCTCCCATCAC
-+
-67777788888888888888*888767765554/3222,00//.%&,-,&&,+&)*))#%(#'(#''"&"%""%#$
- at 30BB2AAXX080903:3:39:478:1119#0
-CTTAGCACCGACCTGACCCCGCTCACTGGATCTATTGATTTGTCCCGTCGTGTGTCTCTGCCGTGGGCATATCTCA
-+
-67777788888888888888888877776355443222100//.,---,,+++***))))()((('&%$%#""$$"
- at 30BB2AAXX080903:3:56:497:804#0
-TCCAAGAATTCCTTTTCTGAAAGCCTTTCTAAAATTCCAGCCTTCCCTGATCCTCTGCACTCATCCCGTCCTGTCT
-+
-67777788888888888888888877776555443222100.-..--,,++*+)*'*)&&%('('''"$$&%"$#$
- at 30BB2AAXX080903:3:3:1247:224#0
-TTAACACCTGGTTCTACAAAAAACAGACACAGAAACACACCGATGCCCTGATTCGTAACGTTTGCCACNATCANCN
-+
-6777778888888888888888817777655544322/10,//..-*,,,+,+(+***()))))&&(""""%#"#"
- at 30BB2AAXX080903:3:54:1558:957#0
-GGTGTGCATGTGTATGTGTGCACGTGTGTATGTGCACGTGTGTATGTGTATACATGTGTATGGGTGTCACAGAGTG
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('''$$%&&"""$
- at 30BB2AAXX080903:3:37:431:514#0
-TGTATTTGCGTGTGGATATGTATGCATGTATGCACGTGTGTGCATATCTGTGTATGTGCAACTGTGTACTCGCACN
-+
-67777788888888888888888877776555443222100//..---,,+++****)))))((('&"$##"$%$"
- at 30BB2AAXX080903:3:35:324:1083#0
-TGTGTATGTGTGCACGTGTGTATCCATGCATATGTGTGCGTGTGTGTACATGTGTGTATAAGTGCGTNTCTATTAN
-+
-67777788888888888888888877776555443222100//..-----+++****)*)(((((''"&$""""#"
- at 30BB2AAXX080903:3:59:243:1142#0
-AGGCAACATGCATGCATCCATATATGCGCACACATACACATGTATAAATGCACACACACACACATGCATGCACNNC
-+
-67777788888888888888888877776555443222100/...-,,,,++++****)*))((((''$#&%$""#
- at 30BB2AAXX080903:3:51:782:761#0
-TTATACATGTGTATGTGTGCGCATATATGGATGCATGCATGTTGCCTGCATGTGCACGTATCGGGTGATGCTCGGC
-+
-67777788888888888888888877776555443222100/..----,-+++***'))))((((''"""##$###
- at 30BB2AAXX080903:3:2:411:202#0
-CATACATATATGCATACATGCATATTCGTGTACACGTACACGCACACACACCCGATACGTGCACATGCNAGACACT
-+
-67777788888888888888188877476555342210.2////--,,*,+*)****))((((#'('%""""$##"
- at 30BB2AAXX080903:3:42:148:1556#0
-TGGGGGGCTGTTCTTCACATATGTGTTGTGTGGCTATGCACAGGCAGACCATGCTATAGTCCTGTAGNCTTGTGCT
-+
-67777788888888888888888877776555443222100//...--,,+,+***)*))')((('&""%"$#$""
- at 30BB2AAXX080903:3:39:481:1768#0
-GGCCATGGCCCCACCCCATTGCCCACCGCCTCACCTGAAATGTGAGTCCTTCCGAGCCGTGGGCCTGCACGCCACA
-+
-677777884888888833888782724765622/-31'.///..,-,*+,+)')')'()'()(#&''$"#######
- at 30BB2AAXX080903:3:39:150:1415#0
-CAGGGTGAGAACCTCAGGGCGGGCAGGGGCTCCTCCATGTCACAGCGGAGACCAGACAGATCGGAAGCGAGGCACT
-+
-67777288888888888888888877776655442222100//..---+,+'))***)*))(((&''%$#"""$#"
- at 30BB2AAXX080903:3:52:56:1514#0
-CCAGGGTTGGTGGTAGCCCCAGGAGACATGGGACCCACTGGCCTCCCTCAGGGTGGTGGCCTCGGTGCCTCGGCGC
-+
-67777788888888888888888877756555441222100/./---,,&+++(**(*)((('((%'$$""%"#"%
- at 30BB2AAXX080903:3:34:1535:321#0
-TCCGCGTGGTGTGCGCCAGCTACGAGGACTACGGTCACTGGCTGCTGTGGCTTCGCGCCGTCCCCCCNCGCCCTNN
-+
-67777788848888888888888877776343443222./0...)+-&-$+&)'()(&#%&%##'''"&"#$##""
- at 30BB2AAXX080903:3:41:166:573#0
-GTGCGCCACCACGCCCGGTCTGCTGCCCCCTTTTTACCACTGCCCAGGACCTGGGCTGTGGGGCCTANTGATCACT
-+
-67777788888888888888888877776555443222100//..----,+++**)*)*))((((('""$#"%"#"
- at 30BB2AAXX080903:3:49:560:1967#0
-GCCCAGGCTGCAGTACAGTGGCACGATCTCGGCTCACTGCAACCTCCGCCTCCTGGTCAAGCGATTCTCCTCACTG
-+
-6777778888888888888888887876645534/2.02//.'.-+,-,,,)****(((()((('(%"$#"$###"
- at 30BB2AAXX080903:3:8:699:670#0
-AGAGAAGAGGTGGCCTAGGCTGTTTCTAGCCGAGAAGCCCATTTCTCCCACCTCTGCCCTGCAGATCNATACACNN
-+
-6777778888888888888888887777635544312//0/1..,--,,,++****(()()((((('"$$##%$""
- at 30BB2AAXX080903:3:42:431:624#0
-TTTGGGGTTCCAGGTCTCCTCTGCCAGGGAAGGTTCGCCCGAACCATGGCTGCCTCTGACAGGTGAGTAGNGCGCG
-+
-677777888888888888888888777765554/3021100./-.'-,,,++%**)())(()(&(%&%"""%#$#%
- at 30BB2AAXX080903:3:55:1179:1147#0
-ACCGACCATCTGGTAGGGAAGGCAGAGATGTGTCAGCCTGTGGGAGGCAACAGGCACTCACCCCAGGCTCTACACA
-+
-67777788888888888888888877776555443222100//..---,,,++*+****))()((('""###""#"
- at 30BB2AAXX080903:3:55:813:1384#0
-TCCTCCCACCAGAAGTGCCCCCAGCTTGGAGGGCCTGAGGCCAGTGGGGGGCTTGTGCAGTGGATCTGGNGGCCCA
-+
-677777888888.8888888888877776555441222100//.,----,++++*')))*')(((''"""$""###
- at 30BB2AAXX080903:3:60:870:880#0
-CCCCATCCAAAGGATGCCCTGGCCAGCGAGGCTGGGTCACAGGTCAGGGAGGTCCTGGCAGATCGGAATGGCCANN
-+
-67777788888888888888888877779555443222100//./,--,,++%**))*)))(((('&%%"$$##""
- at 30BB2AAXX080903:3:55:817:1350#0
-CCTGTGACCCTCATGCCCTCTGACCTCACATACTCTGACCCTGCTGACCTTTCTCTGTCCTCCGACCCTCACGCCC
-+
-67777788888888888888888877776555443222100//..----,+++***)*)))))(((#$%%%&%#"%
- at 30BB2AAXX080903:3:54:752:1805#0
-TGTGAGGTCAGAGGGCATGAGGGTCACAGGTCAGCAAGGTGTGAGTAGCACAAGCCAGGGTGCCCCGAGAGCGTAC
-+
-677777888888888888888888777765554432221/0//..---,-+++*)*)))))()(((&$&"&"###"
- at 30BB2AAXX080903:3:1:281:879#0
-AGATCCCTGGACAGTGTGTGCCTGGGATCTGGACGGGCTGTGGGATCCGAGAGCACGTACCTGCCCGCNTCNCTGT
-+
-6777778888888888888888887797655511322120,./-,+++,*,*+&'')(&''&('#&'"""#"#"""
- at 30BB2AAXX080903:3:36:139:1021#0
-GCTAGAGGTGGCTTCATCTCCACCTGTCTCGGAGGCTGTGCCGAGGATGACCGAGTCCAGCGGGCTTGTTAAGCAN
-+
-6777778888888888888888887777655544322210.//..---,-+++**)))))(((((''%&"$""$#"
- at 30BB2AAXX080903:3:43:1425:1818#0
-ATGTGGCCTTGCCTACAGCAGGCCCAGTGGCTAAGCTAGAGGTGGCTTCATCTCCACAGATCGGAAGAGGACTCCC
-+
-67777788888888888888888877776555343.22120/+..&+-)++)*&*((())'%((&%'&$%"""#""
- at 30BB2AAXX080903:3:41:1248:213#0
-AGACACAGCCATGTCCGTGTCAGGTTGCGGCTCAGAGGCAGGGGGAGACACAACCATGTCCCCGTCAACGGGCGTA
-+
-677777888888888888888288/77765564(12220.0/..,.-++))('**)(('(((&'#&%"#%#%""#"
- at 30BB2AAXX080903:3:58:645:1784#0
-GAGGCTCCTGTGTGCCCACCCCCCTTGGCACCCACAGCTCGCCTCTTCTTTCGGCTGGGGCTCCGTGGGNCAGCTN
-+
-67777788888888888888838877776555283220000----.-,,--+*+)**))*''&((%&'&"$"#"""
- at 30BB2AAXX080903:3:55:692:1757#0
-GCCGGACCAGGGCAGGATGAGAACTGGCTGGGAGGGCTGGCGCCGGGGCCGAGGGGCGGGGGAGCGTCTCCCCGAC
-+
-67777788888888888888888877776555-432(010./-/----&$,)+**&(*)#()#(##'$""#$$"##
- at 30BB2AAXX080903:3:60:561:433#0
-CTCAGGGTGAGCCTGTCTTGGCCCTGGGGACCGGTCAGCAGACACCCAGCACGTCCGCACGGGCAGAANTAACANN
-+
-67777784888888888888888877776455442212100./-.--,,,+++(*)**)))(()(('%""####""
- at 30BB2AAXX080903:3:44:1788:613#0
-CTGGGTGTCTGCTGACCGGTCCCCAGGGCCAAGACAGGCTCACCCTGAGACCTGCTGACCGGCTGCTGTGCGGCCG
-+
-677777888888888888888888777765554432221/0//...-,,,+,+**))))*((('(&%&#&"$#""#
- at 30BB2AAXX080903:3:60:1629:1886#0
-CCCGGGCACCACCCTGCACATGCCGCCCCTGCCCCACGAGACCTGGGAGCTCACACGGCCTCAGAACACACNACNN
-+
-&777778881881888488888*1717-655.0$20./.0/+).---)+%*)%'*)%#('''('#'&$#"#"##""
- at 30BB2AAXX080903:3:1:1534:865#0
-TCCAGCTACAGTACATGAGGACGACTTCCTGGCACGGGGCCGGGCTGAGGTGGGGTCAGACATGGGCCNCGNCAGC
-+
-67777788888881888888782876/1.3002-+3210.01,-*+-',,$+**)##()##'#'#&#""#""$#"#
- at 30BB2AAXX080903:3:39:390:1656#0
-TCCCGTGCCTCCGCCACCCGCGGTGAAACCTCAGACCTGCCCTCCCTGCCGCCCCGGGAATGTTCCACATCGTGTG
-+
-+777728888888088-/18/88(772.*/5()4+',21.#..--+,,&+,+*))#((%'((%(##%&$$$%""#"
- at 30BB2AAXX080903:3:48:1788:1277#0
-GGTCAGGACCGGGAGGCACAAGCCCTGGCCGGGACACAGAGGCCATCTCAGAAGCAGGCCAGGAACATTGCTCCTC
-+
-67777788888888888888888877776555433221110/*-.',,,,,)*+*)))#('((#'#&"""%####$
- at 30BB2AAXX080903:3:33:1480:1507#0
-TCTGTCGCCCAGACTGGAGTGCAGTGGCGCAATCCCAGCTCACTGCAGCCTCCACCTCCCAGGCTCANGTATTCNN
-+
-67777788888888888888888877776555443312100/....--,,++*+****))))(((((""##$"#""
- at 30BB2AAXX080903:3:41:316:1689#0
-GTCCTGTACGAAGAAGGGCCCAGCGGACGATTCTAGCCAATGCAACTTACTCTGCAGGGACAGCGGANTCGGCCAT
-+
-6777778888888888888818887747635544222.0.0/..--.--,,*+**)**))(()((('"&$"%###"
- at 30BB2AAXX080903:3:42:727:764#0
-CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCTGATCACGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACCT
-+
-677777888888888888888888777765554423210/0//..-,-,,+,+$*))*))(()((''&%#"""#"#
- at 30BB2AAXX080903:3:57:378:2044#0
-CCACGCCCTCTGGGTAATTTTTTGTATTTTTATTAGAAACGGGGTTTCACCATGTTGGCCAAGATCGGACTATCAC
-+
-6777778888888888888888887'7765551332221*0//.%--,,-**++*)*()#(((('%'%&%""#$##
- at 30BB2AAXX080903:3:44:103:788#0
-ATATGAGATCATGCCATCTGAAAAGTTTCACATCTTTTTCTTTTCTTTTGAGACAAGGTCTCACTCTGTCATGCAG
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('(&'"&#$%%#%
- at 30BB2AAXX080903:3:1:1120:1095#0
-CGCCCCACCTCAGCCTGCAGAGTAGCTGGGGCTGCAGGTGCACACCACTATGCCCCGCTGATTTTTGCNCTNTCTT
-+
-6777778888888888885858/8771;4771/1-)10(/.-/,+,$*'(&('&*#&'%(##(&'&%$"%%"$###
- at 30BB2AAXX080903:3:55:270:306#0
-TATTCCAGGTGTGGTTGTGTGTGCCTATAGTCCCAGCTACTCAAGATGCCAAGGCCAGCCTGGGCAACACAGCGAC
-+
-67777748838888888888888877776555443222101/,..---,,+++****)))'))((&'&#"%#%###
- at 30BB2AAXX080903:3:37:137:358#0
-GGTGGGCAGAGGAAGGCAGCGGCATCTGAGACGTTGGGATCACTCTGACCTGGACAGGGCAACGGGGCACTCTGCN
-+
-67777788888888888888888877776505443222+/01/..---+,&++*+)))))()((((#&"#"$""$"
- at 30BB2AAXX080903:3:45:1624:268#0
-GCTGAGAGTGAGACCCTGTCTCAGAAAAAAAAAGAAATCAGTTGACTGTAGATCGGAAGAGCGGTTCNGCAGGGCG
-+
-67777788888888888888888877776555443222100//..----,+++***)*))))((#('"%#"##""#
- at 30BB2AAXX080903:3:45:435:920#0
-GCCCTGGGGTGGCAGCCTCCCTGACGTCCCACTGTCCCCGTCTGGCATTCACACCTCAGTGTCCTGAGGGTGGCGA
-+
-677777888888888888888888777765554432221/0//..---,,+++*(+)*)))'''(('$#"##"#$"
- at 30BB2AAXX080903:3:53:442:1469#0
-GGTGCCCCCTCCAGCGGGGGGTCCTTTCTGCCCTCCCCACCCTGCATCCTGTGGCCCCAGACGTGGGGTGCCCCCC
-+
-67777788888888888888888877776575443222100....---,,+)+**))((((#)#(#'"$"$""###
- at 30BB2AAXX080903:3:35:1021:1097#0
-TGAGGGGGAGCCCAGGACAGCCCCTATGCTGCCCCCGTCCAGCCCGGCCCCTCAGGCTGTGTTTCCTNCCTCGCTN
-+
-67777788888888888888888877776555443222100//..---+,,+*)***()()&((#('""$"#"$#"
- at 30BB2AAXX080903:3:40:375:1791#0
-GAGGCCCCCTTCCCCTTGGGAGCTTGAGACCCCGTGAGGGAGGCCTCCTCAGCAGCACAGGAAGGGACGGGCGTAC
-+
-6777778888888288888888887777632134121200)//),-+,,++,+)*)))()(''((('$""#""""#
- at 30BB2AAXX080903:3:59:346:800#0
-CGAGCCCTCCCACCAGCACTGGCCCTCCAGGCCCCAGTCTGTGCCTCCATCAGGAGAGATCGGAAGAGCGCGTNNT
-+
-67777788888888888888888877776555443220100./.----+,+*++**)))(()('((''$%""""""
- at 30BB2AAXX080903:3:1:448:1126#0
-GGAGGCTGCGGGCAGGGCCGACGCCCTCGTGAGCGACGTCCTTGGCCCCGGCACTCGGTAGATCGGGCNCTNTCTC
-+
--71773.888888++,1().+).(*.--+%,',(*$%,$#&%&('%"&$&%$#&#&&'##'####%#%"#$""$"#
- at 30BB2AAXX080903:3:34:1184:718#0
-CAGCAGCGGGCGGCCCGCGTAGACCTCGGGCGCTGGGGCCTCTGCGGGGGCAGATCGGAAGAGCGGGNCACCATNN
-+
-67777788888888888888888877776555423222.00/../----,++++()**)()()'((#"&##$$#""
- at 30BB2AAXX080903:3:58:1383:65#0
-GAGGGCGTCCCGGCCGACGTGCGCTCCCGCCTGCTGGGCCACCTGGCAGCCTGCCTGAGATCGGAAGAGGACANNC
-+
-677777888888888888888388777763/94122220/11.).,+,,,()+&*)(()(''&('%'%"###"""$
- at 30BB2AAXX080903:3:43:733:935#0
-CCACCCGTGCGCCCCTTCGCCGTCCGCTGACTCCGCCCTCCCGCCTGCCGACCCGGCCGCCAACCTTCCCCCGGCC
-+
-67777788888888888888888877776555443222100//...-,,-++++**))*))''(('&&$%%%$""#
- at 30BB2AAXX080903:3:37:229:351#0
-GCAGGACCTCGAGGAGCAGAACGTGCGCGTGACGCGAGCGGGCTGGTGACGTCACCAGGCACCCGGGTCANCNTGN
-+
-6777778888888888888888887777655544322210//0..-",,,+**())())((((('('$$""""##"
- at 30BB2AAXX080903:3:42:1182:1353#0
-TGTGAGCCCCACTTTGCTGCTGCTGAGTTCGCCAGCGGGTCACCTGGAAGCACGTGGCGACACGGGCCACATGACG
-+
-677777888888888888888888777765554432221/0//...-,-,+++***)))))(((((&'%&&%%#"$
- at 30BB2AAXX080903:3:48:144:1354#0
-CCACGCACCTCAGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACCGTGCCAGATCGGAAGAGCGGTCACAAC
-+
-6777778838888888+888888877776555443222100//..---&,+++***))))))(((''$""$"#""#
- at 30BB2AAXX080903:3:52:820:775#0
-GTCGGCACCATCCTGGGCTGCAGCCCAGGATCCACCCCCACACTCAGAGCAAGGGAACCCCAAGGAGCACGCGCAC
-+
-677777888888888888888888777765554432221000/..--,,-,++**))**)()(((('""#&##"##
- at 30BB2AAXX080903:3:38:1086:618#0
-TGTCCCAGGACAGCGAGGTACGCATGGCGTCTTCCAAGTCAGCCTCAGAAGTCATGTCCTGCCAAACACACCATAC
-+
-67777788888888888888888877776555443222100//./---,-+++*******))(((''&&$%&#$$#
- at 30BB2AAXX080903:3:58:1140:1676#0
-AGTCGCTGAGCCTCTGCCTCTGTGGAAGAGAGGAAGGGATCAGCGAGGAGGGAGCAGGGGTGAGGAGGGCAGAGTN
-+
-67777788888888888888882877776555423222./)///-$--+-+,*+)))())&((((#%&"##""$""
- at 30BB2AAXX080903:3:1:488:1415#0
-TGTTGGGGGGTCTCCTCACATTGGGCCACTGTGGCCGCACTCCATGACCACAGCCAGTGTCCCCAGAANCGNATCC
-+
-6777778888888888888886807777655144352../0...,..,+,+++**))()'((&((''"""""#"#"
- at 30BB2AAXX080903:3:58:198:700#0
-GTGGCGAGATGGCAGCCGCCACCTCTGGGTCAGAGGTTGGGAGGGGAGGTCACAGCCAGCACCTAGATCGTCANNC
-+
-67777788888888888888888877776355443212100//..-,-,&+*+**))())(((%'('"&%#$"""#
- at 30BB2AAXX080903:3:54:1090:1969#0
-AGAGACCAGGACTCAGGCAGAAGCAGCAGCACGAGGCTGGCGCCACTGCCAACCCACCGGCATGCATGGCTCGCAC
-+
-67777188888888888888888&77776)55(4322210,//..-,-++$++*%())#)(('((''$"$"$$##$
- at 30BB2AAXX080903:3:39:1261:99#0
-CTGCTGAGAAGGCATGCAGGTGGGGTGGCAGTGGCACCAGCCTGGTGCTGCGGCCTCTGCCTGAGTCCGTGGTCAC
-+
-67777788888888888888/88877776521483%12000/&,,'-,,-+$**#(('(((%(#'#%$$#"%"###
- at 30BB2AAXX080903:3:52:1502:677#0
-CTTGGAGACACAGCTCCCACCGCTGCTGAGAAGGCATGCAGGTGGGGTGGCAGTGGCAGCAGCCTGGCAGCGCCNC
-+
-6777778888888888888888887777656554122..00/-..--,-,+++)**%)()(()('('$$#$"#$"%
- at 30BB2AAXX080903:3:3:1331:522#0
-AGCAGCACCAGGCTGGTGCCACTGCCACCCCACCTGCATGCCTTCTCAGCAGCGGTGGGGGCTGTGTCNCGCANCA
-+
-677777888888888888888188787626/54112/100.+,/,,,+,,++'**#(()#'##'#%#$"#"&#"##
- at 30BB2AAXX080903:3:60:1053:1721#0
-AGGCTGGTGCCACTGCCACCCCACCTGCATGCCTTCTCAGCAGCGGTGGGAGCTGGGTCTCCAAGCATGNGACANN
-+
-6777778888888888888888887777655144322200/-.-..&+,,$,%*+#*(&(''&&#&&"%""#%#""
- at 30BB2AAXX080903:3:2:1138:959#0
-GAAGTGGAAGCCTAGGGACTCTTGAGGCCAGGATCCAGAACGCACATAGTAAGATCGGAAGAGCGGGTNTCCGACC
-+
-613207-88888,1188-/8+388+31-)+*20-(%%/$-#*&)%&&'+%)'''##%(#'&#'#'&#"""###$#"
- at 30BB2AAXX080903:3:51:413:189#0
-CCACTGGAGACCCAGGCCCAGCTGTCCTGGGGGCACTGCTGCGGGGGGAACTGAGATCGGAAGAGCGAGTCTTNCT
-+
-677777888888888888888888777765554432121/0//..---+++*+)**))))('(((('""$%""""#
- at 30BB2AAXX080903:3:1:312:802#0
-CTCCACGGGCGAGGATCACGTAGAGACGTGTAGAGACGCGACGAAGCACGAAGACCCGCGTTTGACGTNAGNACAC
-+
-677777888888888888888888764765)5403,2210,-/,.--+,,&&+(''()#)#''(%&'"""""#%##
- at 30BB2AAXX080903:3:37:54:607#0
-GAGGCAGGAGAATCGCTTGAACCCGGGAGGTAAAGGTTATGGTGAGCCAAGATCATGCCACTGCACTCGCCACTAN
-+
-67777788888888888888888877776555443222100//..-.-,,+++***)*)))((((('%"##"$"$"
- at 30BB2AAXX080903:3:39:492:805#0
-GATCTCCTGACCTCGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCCC
-+
-6777778888888888888888887777655544301210//..-.---,+,++***()()()''''$$%#$%###
- at 30BB2AAXX080903:3:58:1378:782#0
-CAGGAGTTCAAGACCAGCCTGGCCAACACAGTGAAACCCCGTCTCTACAAAGATCGGAAGAGCGGTTCAGCTCACA
-+
-67777788888888888888888877776555443222100/...---,,+++***)**))(()''''"%""#$$$
- at 30BB2AAXX080903:3:50:124:431#0
-CCAGGCTGGAGTGCAGTGTCGCAATCTCGGCTCACTGCATCCTCCGCCTCCCGGGTTCAGATCGGAAGAGAGCACA
-+
-67777788888888888888888877776555443222100//..---,,+++**)))))))(('''"""""#"##
- at 30BB2AAXX080903:3:45:37:146#0
-TGTCAGATGGTGGCTCACATCTGTAATTTCAGCACTTTGGAAGCAAAGCCTAGAGGATCGCTTGAGCTAGCGTACC
-+
-6777778888888888888888887777655544322210///...--,,+++***)))))))((''"$""#""#"
- at 30BB2AAXX080903:3:43:530:1752#0
-TCTCAAACTGCTGACCTCAGGTGATCTACCCGCCTCGGTCTCTCAAAGTGCTGGGATTACAGGTGAGCCACTGCGC
-+
-677777888888888888,8888877774555443222100//.,---,,+++**(())()((&('(%%$%$&#"$
- at 30BB2AAXX080903:3:8:1762:889#0
-CCCAGGAGACAGAGATTGTGGTGAGCCAAGATTGCACCAATGCACTCCAGCCTGGGCAGATCGGAAGNCAGTCANN
-+
-67777788888888888888888877776555443221110/..---,--+**+*)()))(((('''"%"""$#""
- at 30BB2AAXX080903:3:35:393:48#0
-GCTGGCACAGAGCCCACCTCCCCCCACCTGTGACATCTGCCTTACCATGGCTGTGGGCTGCCGGCTGNTGTCTCNN
-+
-6777778888888888%(8888887.70151,1,221110-.+-,--+',+'+$'*)(')##'&#%'"#"%#"$""
- at 30BB2AAXX080903:3:45:278:963#0
-GTGCCGCCTCCCCGCAGGCGCAGATTCATGAACACGGTGCTCAGGGGCTTGAGGCCGGACTCCCCCAGGGGGGGAG
-+
-67777788888888888888888877776555443222100//..---,,+,+***)#('('((((%&"%$##$"#
- at 30BB2AAXX080903:3:33:156:616#0
-CTGATCAGGCGGGTCCCTGCCTAAGCCGTCTGCTGTCCCAGATGGAGGACAGGCAGGATGGGCTCCANGTCACANN
-+
-67777788888888888888888877776555443222110//..----,,++***)()))((('('""#$"$"""
- at 30BB2AAXX080903:3:39:1125:878#0
-TTGAACTCCTGGCCTCAAGTGGTCCGCCTGCCTCGGGCTCCCAAAATGCTGGGATTACAGGTGTGAAGGTCGGATA
-+
-67777788888888888882888877775555443221101/.-.---,,++++***(())')&(&'""&#"#"""
- at 30BB2AAXX080903:3:34:214:1614#0
-AGGCAGTTTCACCATGTTGGTCAGGCTGGTCCCGAACTCCTGACCTTGTGATCCACTCCCCCCTTGGNAGGCATNN
-+
-67777788888888888888888877776555443222100/...-.-,,+++)**)*)())(((('"$""%#"""
- at 30BB2AAXX080903:3:36:1697:1705#0
-GCTAGACATAAATGTTCTCCAAGGTCTCACCAGAGTAGCTAGATACAGAGTGTAGATAGGAAGAGCGNCTCTCANN
-+
-6777778888888888888888887777655248303210//--.-,-,,(+%***($))#)('('&"""%"$"""
- at 30BB2AAXX080903:3:4:386:938#0
-GTTCTCCAAGGTCTCACCAGAGTAGCTAGATACAGAGTGTCCACTGGCGCATTCACAAACCCTGAGCANCGTCNAN
-+
-677777888888888888888885777765554431201.1./.-&-(,+*+*')))((((((('''&"#"#""#"
- at 30BB2AAXX080903:3:49:732:1128#0
-CACAGGGTGCTGATTGGTGTATTTACAATCCCTGAGCTAGACATAAAGGTTCTCCACGTCTCCACCACGCACAGNT
-+
-6777778888888888888888887777655544322220///..---,++,+*++**))))((('''"#""#"""
- at 30BB2AAXX080903:3:37:56:1616#0
-TCTCCACGTCTCCACCACTCAGGAGCCCAGCTGGCTTCACCCAGTGGATCCCGCACTGGGGCTGCACGCAGNTCAN
-+
-677777888888888888888888777765054432210//0,..--+,+*++***()*))%#(''#"&$#""$""
- at 30BB2AAXX080903:3:43:1004:645#0
-CCCCTGCTCCACCGTGCCTAGTCCCATGACCACCCAAGGGCTGAGGAGTGCGGGTGCACAGATCGGAAGGGCGGTC
-+
-67777788888888888888888877776555443222100//..----,,++***)))*))(((('%&"%"%#""
- at 30BB2AAXX080903:3:4:994:354#0
-CTGAGGCAGGAGAATCGCTTGAACCCAGGAGGCGGAGGTTGCAGTGAGCTGAGATAGATCGGAAGAGCNTTCANAN
-+
-67777788888888888888888677776-55343122200-..,.,-,-,)+)**)))'()('(('$"""%#"#"
- at 30BB2AAXX080903:3:47:333:508#0
-TGAGCACCACGTTCGCCTCCTCCTCGCGCCGCTCCAGCGCGCGCTCCGGGCATGTCCCGCCAGATCGGACCATTGT
-+
-67777788888888888888888877776555443/221000/.-.,,,,++*+*)))))((((&''"$##$""##
- at 30BB2AAXX080903:3:42:605:1576#0
-GGCGGGGCGGCAGGCGTCGCGAGGGGAGGCCGGGGTCCGGGTGGGCGCACCTTGCAGGAGTACGTGTGCTGCACCT
-+
-67777788888888888888888877576345445,,-100%/..'-'++*)+*'(**&)'&'('(''&"&&##$"
- at 30BB2AAXX080903:3:42:875:993#0
-TCCTGCGGGAACCGGGGCTCCCCACCCCGGGGATGGGAAGTTTCCCTGGTTTCTCCTTCAGGTGCTTCTGGGGGTC
-+
-6777778888888888888888887777655543322.200./------,+,)+***))(()'('''&%#$""""#
- at 30BB2AAXX080903:3:39:1305:1795#0
-CCAGTTGCGCAGGCAGAGCCTCTTCCACGCCCCCCAACAGTAGGCTCCAGGAGGCAGATGACCCAGGCACCGTTCG
-+
-6.777788888888888888888877776/)5343)-1/.)/.-*,,,),+(+*&)()'(('#'##'$""#"""#"
- at 30BB2AAXX080903:3:39:1706:1058#0
-AGGCCGAATTTGGGAAGGGGGCCCACCTGGCTTGGGGTGCCTGCCGTCCACACCTCTCCCCACAGCTCGTCAGCAG
-+
-677777888888888888*888887677655)&4322#000-.-,)+,)%&&%)**(((%'((''##$%&##&%$%
- at 30BB2AAXX080903:3:51:816:1387#0
-CACACGAGCCCCCCACCACGCACCTTCCACACAGAACTCCACCTCCTCCAGGTTCCGCAGGGTGATCCGACNCANG
-+
-67777788888888888888888877776555443222100/./.----+++)*****))((((((#%$"$"##""
- at 30BB2AAXX080903:3:60:760:824#0
-TGCCGGCCAACGGAGCAGATCGGAGAGACGGGAAGTCAGGACCCTTACCGTTGCCTTGAGGAGGAAGCACTCTGNN
-+
-67777788888888888888888877776555343522100//..,--,,+++***))))))((((&'"%"$"#""
- at 30BB2AAXX080903:3:47:925:1894#0
-GCCAGCCCTGGGCAGCTGGCACTGCGGAGGCCAGGCCACTTCCCTGACAAAGCAGGGGCGGGGGGCGACCTGTCCC
-+
-67.77788888888888888888877746542343.-02./'-+-.-+,,++)+*))(')()((###"""#""###
- at 30BB2AAXX080903:3:40:730:1742#0
-CTGGCCCCCTGCCCTGTCCCTGTGCCAGGCCCCGGCAGGGGCAGACAACACTCCCTTTCTCTGCTCCCGCCCCCGC
-+
-67777788888888888888,8887777636634330210/+-.,..(++++*)****))(()'('#$$""$##"$
- at 30BB2AAXX080903:3:1:1716:1165#0
-GCACCCTCCCTTCCTCCCTGCCTGGCCAGCTGCCTAGGCCTCAGGACGGCAGTCCTAGGGGAAGCCGCNCCNACCA
-+
-67777788888888/8882/8426.*41+3-1,1/(.-*-)-+)*'+++)*)#&###'&''######%"##""###
- at 30BB2AAXX080903:3:1:351:1530#0
-CAGGAGGGGGCAGGAGAGGGTGGCAGGAATGGGGAGGAGTTGGGGGCAGGAGCTGAGCCCTGGAGAGCNACNACAC
-+
-61777788888888188888,888*74-+05632(12'0$)..--.+*++%*#$*#)&(&#'(#(##$""%""$"#
- at 30BB2AAXX080903:3:60:1146:1564#0
-CAGCAAAGCCCCCCCCCAGGCCAAGGCAGGGACAAGCCCAGGAGAAGTCAAAGACGGGACAAGTCCACTCCATTNN
-+
-67777788888888888888888877776555242200*.0//.,--,,-++++'**))()((('&'&%"$#""""
- at 30BB2AAXX080903:3:52:1113:1194#0
-CCACCAGCGGCCTGGGTGGGGCAGGAACGGACCCCCTCCCTGCAGTCCTGGTTCTGGCACCCCCTCCCCCCTCTGC
-+
-677777888888888888888888767765564432220/,/../,-,+,+$*)**)(((''(((&'"$"&%""""
- at 30BB2AAXX080903:3:34:437:786#0
-ACGCATGTGTGTGCACGTGCCTGCAGCCTCAGATGTACCAGCCTGTGCACTTCAGAAGATCGGAAGANCACGACNN
-+
-677777888888888388888888777765554-322210///..*-,,,*,+**(*)))()('((&"$"$##$""
- at 30BB2AAXX080903:3:51:91:1306#0
-CTTGCTGTTGGTTGTCCACTCTCCTGCCCTCTGCTCACTGCGTCCAGCACGCTGCCCCGTGTCTGGCAACGCTCGC
-+
-677777888888888888888888777766554420220010../,--+++***))*))()'((''#""$"#"""#
- at 30BB2AAXX080903:3:41:1380:918#0
-TGATGAAATCAGTGAAGGTCATGGTGAGCCCTGCTCACACCCCAGCCTCCCCAGATCGGAAGAGCGGTTCAGCCTT
-+
-67777788888888888888888877776555443222100//..--,,,+++*+**)))(()((('%$$#$""""
- at 30BB2AAXX080903:3:47:1290:845#0
-TCCACGCCAGCTGTTTTCCTTGGTTGGGGTTGGGGGCACCGAGCGTTTGGGTGGACCGGAAGTCAGCGGCTGCTCT
-+
-67777788888888888888888877776355443222110-/..-.,,,+*+***)**(()%'('%""$#$#"$#
- at 30BB2AAXX080903:3:44:1188:1097#0
-TTGGCCCACGAGGGGCTGGGGCTCGGTTCCTTCGGAAAGGGTGGCGTGGGTGTGGGCGGCCTTGGCGCGCGGCGTA
-+
-6777778888888888888881887717.315343-2/110-..+.-,,,$('***(*(((#%(('#%"%%""#"#
- at 30BB2AAXX080903:3:55:344:1944#0
-GTGTGCCTGTGTCCACACGGGAACATATGGGTGGGAGGTGAGGAGAACGTGCCTTCCCAGTGTATGGGTGTGCTAC
-+
-67777788888888888888888877776555443222/0///...-+,++)*(*)()#)')#'(''"$#""####
- at 30BB2AAXX080903:3:1:145:2036#0
-CCCTCCACCTGCCCACATAGACGCGGGATGTCCCCCTCCCCCTACCTCCCTGCATAGACACTGATGTCNACNCACA
-+
-67777788888888+838388888637-05+55430+112//'*.-($,-&)+*&'(()')#(&#&#%"#$"##$"
- at 30BB2AAXX080903:3:60:627:1694#0
-GGTGCTGGGCAGGCCAGGAATACCCATTGTGTGGCCGTGTGTGTGTGTGCAGTGCATGGTGCTGTGAGCTAACANN
-+
-67777788888888888888888877776555443222100//..---,++++***)))()(((('''"$$"%$""
- at 30BB2AAXX080903:3:50:232:1691#0
-GCTGATCTCACAGCACCATGCACTGCACACACACATGATCTCACAGCACCATGCACTGCACACACACACACACATC
-+
-67777788888888888888888877776555443222100//..----,++++**)))))((((''$%"%"##"#
- at 30BB2AAXX080903:3:36:1047:646#0
-TGTGTGCAGTGCATGGTGCTGTGAGATCATGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGCTTGACACN
-+
-67777788888888888888888877776555443221100/...---,+-++****)))()(('%'%$%$$$$#"
- at 30BB2AAXX080903:3:39:595:1280#0
-TGTGAGATCAGCGTGTGTGTGTGCAGTGCATGGTGCTGTGAGTGTGAGATCGTGTGTGTGTGTGCAGAGTGTGGCC
-+
-67777788888888888888888877776555413222/01/..+----,$+***+***)()&)'''"&#"%$$""
- at 30BB2AAXX080903:3:44:88:600#0
-AGCGTGTGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCATGTGTGTGTGCAGTGCATGGTGCTGTGCGACACG
-+
-67777788888888888888888877776555443220100//..---,,,+++**)))))()(('&&&"%"""""
- at 30BB2AAXX080903:3:50:24:714#0
-CGCTGCACACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACACACACACGCTGATCTCAATCACC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('''%$""#"#"#
- at 30BB2AAXX080903:3:45:817:797#0
-ATGCTGATCTCACACAGCACCATGCACTGCACACACACATGCTGATCTCACAGCACCATGCACTGCACACACAAGC
-+
-67777788888888888888888877776555443222100//..---,,,++****))))()(((''$$"##"$"
- at 30BB2AAXX080903:3:43:39:1175#0
-TGTGCAGTGCATGGTGCTGTGAGATCAGCATGTGTGTGTGCAGTGCATGGTGCTGTGTGAGATCAGCATCTCACCG
-+
-67777788888888888888888877776555443222100//..---,,-++***)))))((((''%"#"#$#""
- at 30BB2AAXX080903:3:40:1414:1013#0
-CACACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACACACATGCTGATCTCACAGCACCNTGCCC
-+
-67777788888888888888888877776555443222100//..---,,+,++**)**)))((((''&%"#%"$"
- at 30BB2AAXX080903:3:45:1434:1505#0
-TCTCACAGCACCAGGCACTGCACACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACAGACACGCC
-+
-677777888888888888888888777765554422.11/0//--,-,,,*++*)))*)*('(('('%""#""#""
- at 30BB2AAXX080903:3:2:954:1913#0
-ATGGTGCTGTGTGAGATCAGCATGTGTGTGTGTGTGCAGTGCCTGGTGCTGTGAAGATCGGAAGAGCGNCTGNCGC
-+
-677777888888888888888888/7873555242222100//./.",+,+$+***)#()''((%(#$"#"""#"#
- at 30BB2AAXX080903:3:42:699:1233#0
-ATGGTGCTGTGTGAGATCAGCATGTGTGTGTGTGTGCAGTGCCTGGTGCTGTGAGATCAGCGTGTGTGTGTGCCCT
-+
-.7777788888888888888888877776555443221100/...-&--,++++***)())((((''&&%%%#""$
- at 30BB2AAXX080903:3:8:1779:873#0
-GATCTCACAGCACCATGCACTGCACACACACACACGCTGATCTCACAGCACCACGCACTGCACACACNCAACTGNN
-+
-6777778888888888888888887777655544323020/+..,.-()++''$)))*&%''&''''"&#"%##""
- at 30BB2AAXX080903:3:39:1663:397#0
-CTGTGAGATCAGCGTGTGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGTGCAGTGCGGGTCG
-+
-677777888888888888888888777765554432321000/..---,,+++***)))))(((((('&""""##"
- at 30BB2AAXX080903:3:36:432:1667#0
-CTGCACACACACACGCTGATCTCACAGCACCATGCACTGCACACACACACATGCTGATCTCACACAGTGCACATCN
-+
-67777788888888888888888877776555443222100//..-----,++**+))*))(()(''&"$"%###"
- at 30BB2AAXX080903:3:3:446:170#0
-CTCACACAGCACCATGCGCTGCACACACACACGCTGATCTCACAGCACCATGCACTGCACACACACATNCTACNCN
-+
-677757888888888848028)8146754.524132.,.0,.*..-++'+++)('*)#('((('(&%""%"$$"#"
- at 30BB2AAXX080903:3:33:860:1735#0
-TGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGCAGCGCATGGTGCTGTGTAGANCGCGCCNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((('"&$$###""
- at 30BB2AAXX080903:3:35:1594:1487#0
-CACACGCTGATCTCACACAGCACCATGCGCTGCACACACACACGCTGATCTCACAGCACCATGCACTNCACCGCAN
-+
-67777788888888888888888877776555443222100//...-,-,++++**))())'((((%"$"$#"$$"
- at 30BB2AAXX080903:3:43:1135:1584#0
-CACAGCACCATGCACTGCACACACACACACACATGCTGATCTCACACAGCACCATGCGCTGCACACAGATCGGAAG
-+
-6777778888888888888888887777655344352210//...---,,+++***)))()(('''''"%%&#%"#
- at 30BB2AAXX080903:3:34:898:1843#0
-ATGCACTGCACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACCCACACACACTTCTNGACAGCNN
-+
-67777788488888888(88880877716-$54,3302+100...,(-,,+++%(***#)&###%''"""####""
- at 30BB2AAXX080903:3:58:800:436#0
-TGAGATCAGCGTGTGTGTGTGTGCAGTGCATGGTGCTGCGTGAGATCAGCATGTGTGTGTGTGCAGTGCGTAACCA
-+
-67777788888888888888888877476555413222&0///...-,,,+++**))*))))((((''%"#####$
- at 30BB2AAXX080903:3:8:1007:1618#0
-TGTGTGTGTGTGCAGTGCATGGTGCTGTGTGAGATCAGCATGTGTGTGTGTGCAGTGCATGGTAGATNACCACANN
-+
-67777788888888888888880877736355442212000/..,-.-+,+++*+)))))))((((&"####%#""
- at 30BB2AAXX080903:3:52:1069:1270#0
-TGTGTGTGTGCAGCGCATGGTGCTGTGTGAGATCAGCGTGTGTGTGTGCAGCGCATGGTGCTGTGAGAGCGGCGTG
-+
-6777778888888888888888887777655544322210///.--.-+,+++)%***))'()((&'""""&#"##
- at 30BB2AAXX080903:3:34:1223:389#0
-ACACGCTGATCTCACAGCACCATGCGCTGCACACACACACGCTGATCTCACACAGCACCACGCGCCGNCAACTANN
-+
-6777778883-88888888888887277655544322210//'.,.--,,++***+)(((&((''#'"%##$#"""
- at 30BB2AAXX080903:3:3:1535:1296#0
-TGCACTGCACACACACACGCTGATCTCACAGCACCATGCACTGCACACACACACGCTGATCTCACAGCNTCACNCN
-+
-677777888888888888888888777765594612.000/...-,,+,,++***(&()(('('#%'"""&%%"#"
- at 30BB2AAXX080903:3:57:876:1633#0
-CTGTGAGATCAGCGTGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGCAGTGCATTGTCACAC
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(('''%$%%$"###
- at 30BB2AAXX080903:3:38:439:1679#0
-TGAGATCAGCGTGTGTGTGTGCAGCGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGCAGTGCATGGAGCTCTTCC
-+
-67777788888888888888888877776555443222200/,-.--+,,+*++**)())()('(('""$##""##
- at 30BB2AAXX080903:3:51:757:258#0
-AGCGTGTGTGTGTGCAGCGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGCAGTGCATGGTGCTGTGTGACAGGGC
-+
-6777778888888888888888882777655544322210///.-----,+,+*****))(()((('"""#""""#
- at 30BB2AAXX080903:3:8:1553:738#0
-CGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGNGGCCACNN
-+
-677777888888888888888888777;6554443212./0/...,--,,,+*)'(*()()((('(&"$"####""
- at 30BB2AAXX080903:3:34:1493:416#0
-TGTGTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGTGTGTGTGTGCAGTGCATGGTGCAGNCTGTCTNN
-+
-67777788838888888888888877776555443232001//.-----,,+***()))()(')'('"$$%"#"""
- at 30BB2AAXX080903:3:34:991:975#0
-TCACAGCACCATGCACTGCACACACACATGCTGATCTCACAGCACCATGCACTGCACACACACACACNCTGTCANN
-+
-67777788888888888888888877776555443222100/...,,'-,,+***+**)))((((('"#"""$"""
- at 30BB2AAXX080903:3:35:834:571#0
-TGTGTGTGCAGTGCATGGTGCTGTGAGATCAGCATGTGTGTGCGCAGTGCATGGTGCTGTGAGATCANCACACCGN
-+
-67777788888888888808888877776555443222100/&..---,,++**+***()))(((''"#"$$#$#"
- at 30BB2AAXX080903:3:44:1385:690#0
-GCACACACACACACGCTGATCTCACAGCACCATGCACTGCACACACACATGCTGATCTCACAGCACCAGGCACACA
-+
-67777788888888888888888877776555443222100//..---,,+++**+**))))()(('%"$$"%"""
- at 30BB2AAXX080903:3:39:319:2022#0
-ATGCACTGCACACACACACACGCTGATCTCACAGCACCATGCACTGCACACACACACGCTGATCTCAGAGCCCCAC
-+
-67777.88888888880833+8/87371635(3411#-1-/..,,.,-,,++*+*)()(''((&'%'"$""#%###
- at 30BB2AAXX080903:3:39:34:1250#0
-GTGCAGTGCATGGTGCTGTGAGATCAGCGTGTGTGTGTGTGCAGTGCATGGTGCTGTGTGAGATCAGACGATCTCT
-+
-67777788888888888888888877776555443222100//..-+-,,+++***)))))(((((&%$""##"#"
- at 30BB2AAXX080903:3:34:898:1844#0
-ATGCACTGCACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACACACACACGCTGATNCACAGCNN
-+
-67777788888888888888888877776555443222000//...---,+,+****)))((('(''"$""#"$""
- at 30BB2AAXX080903:3:54:256:1513#0
-TGTGTGAGATCAGCATGTGTGTGTGTGCAGTGCATGGTGCTGTGTGAGATCAGCATGTGTGTGTGTGTGGGGGGTG
-+
-67777788888888888888888877776555443222100//..----,+,+**+)))))((('(&$"$"##"""
- at 30BB2AAXX080903:3:56:1495:865#0
-ACACACACACACATGCTGATCTCACACAGCACCATGCACTGCACACACACACACGCTGATCTCACAGCACCACCCC
-+
-67777788888888888888888877776555443222100//..---,,+,+*&*)&)()&)(('%$$%&&"##"
- at 30BB2AAXX080903:3:8:909:1802#0
-ATGTGTGTGCAGTGCATGGTGCTGTGAGTGTATCAGCATGTGTGTGTGTGCAGTGCATGTTGCTGTGNCTCAGANN
-+
-677777888888888888868888.777955544120110./,.,-,,+,+,+(*)'))(()(((&'"$"&"#"""
- at 30BB2AAXX080903:3:55:965:1270#0
-CACACACAATCACACTCACAGCACCATGCACTGCACACACACACATGCTGATACACTCACAGCACCACGCACCTCA
-+
-67777788888888888888888877776555443222100//..---,,+++***))))))(((('%$%&"$"##
- at 30BB2AAXX080903:3:37:448:860#0
-GCACACACACACACACAATCACACTCACAGCACCATGCACTGCACACACACACATGCTGATACACTCTNAGANTGN
-+
-67777788888888888888888877776555443222100//..---,,+++*****)*)((((''""$%#"%#"
- at 30BB2AAXX080903:3:48:1334:729#0
-GTGTGATTGTGTGTGTGTGTGTGCGGTGCATGGTGCTGTGTGAGATGTGTGTGTGTGCAGTGCATGGGAGTCGCAG
-+
-67777788888888888888888877776555433222100//..---,,+++***)**)()(((('"#""#""#"
- at 30BB2AAXX080903:3:44:1255:1397#0
-GGTGCATGGTGCTGTGTGAGATGTGTGTGTGTGCAGTGCATGGTGCTGTGTGAGATTGTGTGTGTGCAGGCTACGA
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((((''&"##"""#%
- at 30BB2AAXX080903:3:38:1048:217#0
-TGCTGTGTGAGATTGTGTGTGTGCAGTGCATGGTGCTGAGTGTGAGATCAGCATGTGTGTGTGCAGGCGCTCTCNN
-+
-67777788888888888888888877776555443222/0//..--.-,-++++*()*))))((('#$$&%&&$""
- at 30BB2AAXX080903:3:3:249:59#0
-GATTGTGTGTGTGCAGTGCATGGTGCTGAGTGTGAGATCAGCATGTGTGTGTGCAGTGCATGGTGCTCNCTGTNCN
-+
-6777778888888828880888817177.555241101&/0*-/.--,-,+++$#)')#&((('(#%&"#""""#"
- at 30BB2AAXX080903:3:37:1529:1008#0
-ATTGTGTGTGTGCAGTGCATGGTGCTGAGTGTGAGATCAGCATGTGTGTGTGCAGTGCATGGTGCTGATCGCCCGN
-+
-67777788888888888888888877766555443222100//.--.--,,++**))))*))&('('$##"$##""
- at 30BB2AAXX080903:3:48:241:1228#0
-TGTGTGTGCAGTGCATGGTGCTGTGAGTGTATCAGCATGTCTGTGTGTGTGCAGTGCATGGTGCTGAGTGATATGA
-+
-67777788888888888888888877776555443222100//..---,,++****)*)))((((''""$""""""
- at 30BB2AAXX080903:3:4:1098:711#0
-CACTCACAGCACCATGCACCGCACACACATACACACACATGCTGATCTCACACTCAGCACCATGCACCNCACCNAN
-+
-6777778888888888888888887777655544322221///.-.---,+++****))(((('(('""####"#"
- at 30BB2AAXX080903:3:56:529:265#0
-CTGGCCCCACCCAGCCCCAGTCAGTGTCTGAGCCCCCCACAGAGGCCCAGATGCCTTCAGAAAGACAGAGGGCCCG
-+
-67777788888888888888888837776555443222100/...---,,+*++***)))'(((((("""&#####
- at 30BB2AAXX080903:3:51:401:237#0
-CCAGGAAGGCAGCAGGTGTGGGCAGTGGGTCCTCTGGGGTGGACTGAGGTGAGGCCTGGGTGTGACCAGAGCGGGC
-+
-677777888888888828)888857777655$0,32221.0/..--+-,(+++**)))))')(((''"#""#"%""
- at 30BB2AAXX080903:3:42:1745:575#0
-TGCCGGCAGCCACCAGTGCCACCGCGTGGTCACACCCAGGCCTCACCTCAGTCCACCCCAGAGGACCCCCTCNCNG
-+
-67777788888888888888888877876/55443222100/..---+,,,*+***))*(('(((('&"%"#"%""
- at 30BB2AAXX080903:3:44:897:1052#0
-CAGCTGCCGGCAGCCACCAGTGCCACCGCGTGGTCACACCCAGGCCTCACCTCAGTCCACCCCAGAGGCCCCACTG
-+
-67777788888888888888888877776555433212000//.--,,,-++**+))))((((((''&"%$$$$##
- at 30BB2AAXX080903:3:54:51:775#0
-TGCCCCGGCCGCACCCGCCTCCGCTCCAGCACGCGACGCTGCCCGGCGCGACCCCTGCTCCCCAGACCGGACACAG
-+
-67777788888888888888888877776555443222100//..---,,+,***))*()))('(&#""""#"###
- at 30BB2AAXX080903:3:34:1736:404#0
-TGGCGCGGGACACCCGGCAGCCGCCTGGCGCCTCCCTGCTGGTGCGAGGCTTCATGGTGCCCAGATCNACACGANN
-+
-67777788888888888888,88876776/55/132+00-/-'-,,+++*$*)&(((#(#'(''##%"$%#%""""
- at 30BB2AAXX080903:3:35:1422:172#0
-CTTGTCCAGCCTCCTCCTCACTCCAGACACACTCCACACGTCTGGGTGCACACCTCCAAATGAGATCNACATGCNN
-+
-67777788888888888888888877776555443222100//..-,-,-,*+*++))())))((('""&"#"$""
- at 30BB2AAXX080903:3:52:43:932#0
-GGGGGCGGGCTGACCTTGTTGACCTGCTTTGTGAGGTGGGGCCTGTCCTCCCCGGGGTGCTCCTGGANCCGGGCAG
-+
-67777788888888888888888877776555443222100//....-,-+,+++*)()(('((((#"##"&$"##
- at 30BB2AAXX080903:3:36:1702:1668#0
-GTTGACCTGCTTTGTGAGGTGGGGCCTGTCCTCCCCGGGGTGCTCCTGGTGTTTGGGCGACTGTAGANTTCCTTNN
-+
-67777388888888888888888877776555413222/00/...---,,+(++**)(()(((((('"""###"""
- at 30BB2AAXX080903:3:60:1147:1574#0
-CCCCATCACTGGGTCTCACTTGCGTTCAGTTGTGTGTGCAGGGGTGTGTGTGAGGGCTTTGCTGGGGTCTCATCNN
-+
-67777788888888888888888877776555441222&/0//(---$-,,+%***(&(()&((%('$'$%%"$""
- at 30BB2AAXX080903:3:47:894:168#0
-GGAATGGGGAATGGTGGCTGTGGGAACCCGTCCTACCCCTGGGCTCTAGCCCTGCAACCTGCCCGTCTGANTATAC
-+
-67777788888888888888888857776/'242/5222(///-).+++(+*#)*()(*%'###&#%$"""""#""
- at 30BB2AAXX080903:3:43:1148:612#0
-GCTCTGGCCCGTAACTATGACCACAGTTAGGTGGCATGTGGGTCACGATGGCCTTGGTGTGGAGAGATCGGGGGCG
-+
-67777788888888888888888877776555443222100/0..---,,+++***)))))(((('&&&&##"#"#
- at 30BB2AAXX080903:3:43:842:1137#0
-ATGCGCTGTGCCTGGCGGGTACGTGCGTGTGTGCCATCACCACGTGCACCTGTCTTCAGGTGATCAGATCGCGCTC
-+
-67777788888888888888888877716.5044322-000/..---,+,-+**++***)'((('''""%%#"$"#
- at 30BB2AAXX080903:3:45:224:1085#0
-ATGGGGGGCCAGTGCTCAGCCTGGCTTCAAGGTCCCGCCAGGTACCCAAGGTCTCTCCACTGCCCTGCCACCTTGG
-+
-67777788888888888888888877776555443222100//...--,,+++*****))))((('''%"$"##$%
- at 30BB2AAXX080903:3:58:221:534#0
-CAAGGTCTCTCCACTGCCCTGCCACATTGGTCCAGCAGCTGGTCACTCAGAGCCTGTAGATCGGAAGGTGTACANA
-+
-67777788888888888888888877776555443212100/..-----,,+++*+**))))))'(&$$%"##%"#
- at 30BB2AAXX080903:3:3:434:949#0
-TCCAGGAACAGTGCCCTTGGCCATGGTGTCAGGGCCTTGGGAGAGGTCTGGCTGAGCCAAGGTGACCCNAAGANCA
-+
-67777788888888888888888877176555442322100//-.-,,,,-+****())())&)('#%"""##""#
- at 30BB2AAXX080903:3:57:197:1222#0
-ACCAAAAGGGGAGAAAGGCTCAGGAGCCCTGGTGCAGGGAGGTGACTGGGTCCTTGGCCATGGGGTTCGNGTCCAT
-+
-677777888888888888888888777765554432221/0/-.-.--,,+++***)))(()(((#'%$"""####
- at 30BB2AAXX080903:3:37:1335:1194#0
-TGGGCCAGTATCTGCAAAGCTTAGAGGGTGCCCAGCACACAGCGCTATGTGGCCCGTCTGCTGCCGTCGCTATCTN
-+
-6777778888888888888888887777654544322210//..------,++*)+(*))((((''%$$#"#"#""
- at 30BB2AAXX080903:3:55:357:1047#0
-GCTGTCTGTCTGGGTGTCCCTGCCCCCACCCCAGAAGGCTGAGTGAGGGCCATCAGCCTGCCATCCCTGCGTCTTG
-+
-67771788888888888888888877776555343222110//+.,.-,,,+)++*()()('(&(''$$$&$###"
- at 30BB2AAXX080903:3:4:576:1751#0
-AGGCTCGCGGGACCCCTGCTCCAACGTGACCTGCAGCTTCGGCAGCCCCCGTGCGCGCCCGGCCGCCCNCACANCN
-+
-6777778888888888888888037721/55153+01/.0,-,(,,&(*$+%*)*)((#('''''##%"$$%#"#"
- at 30BB2AAXX080903:3:52:797:592#0
-TGCAGCTTCGGCAGCACCTGTGCGCGCTCGGCCGACGGGCTGACGGCCTCGTGCCTGAGATCGGAAGGGTGGGTTC
-+
-6777778888888888888888887778655534-2121/-/-.---,+,+)+**(*()(''((#&%"""$"##"#
- at 30BB2AAXX080903:3:36:448:113#0
-AGTCAGGACGCTGTCGCCGCGCGCCCACAGAGCTCGAGCCGTGCGCCCGCCGCCGCGCTCACCACAANGTCANATN
-+
-67777788888888888888888877778545412212100*..-,,--,++***)((%(&('&'&%"$$&""$""
- at 30BB2AAXX080903:3:39:570:533#0
-TGGATGAAGATGGCATGTGATGTCCAGGCAGGGACTGACGCAGGAGCAGCCCACCCTGCCTGGCCTCCACCCCTGT
-+
-67777788888888888888888877776555443222100//..---,,,+*+*+)*))())((('&%&%%$%$$
- at 30BB2AAXX080903:3:41:827:453#0
-GGCGAACTGACCAAGACGAACACGACGGGACACGACGGCCACTGCCTCCCCCTGGCCCTTCAAGTCCTGCTCCNCA
-+
-67777788888888888888888877776455443222001/..,---,,+,%**))*%))'(((('&&""#""##
- at 30BB2AAXX080903:3:44:32:1733#0
-AGCGTGTGAAGGCCTGCAGGCGTGATCGAGGCTCTACGATCCTGTGTGCGGGAGCGACGGGGGCACAGTGACACGA
-+
-6777078888888)888)8,8886-377)5+5442.1200&//.----,,(&*+&)&''(&)#'('&"""#$#$""
- at 30BB2AAXX080903:3:53:1461:564#0
-ACACACGGGCTGGGCCAAAGCCACGCATTCAGAGGGGCACACGCAGCGCCCGGTCTCGGCCTCGCACAGACGACCA
-+
-67707788488881888888888878776555443222100//.---,,,,*++**)(*((#((('($$"&""$#"
- at 30BB2AAXX080903:3:44:1049:568#0
-GAGACCGGGCGCTGCGTGTGCCCCTCTGAATGCGTGGCTTTGGCCCAGCCCGTGTGAGATCGGAAGAGCGGGGGCG
-+
-67777788888888888888888877776555442222110//..---,,,+*****)*))((((((&%%$"#""#
- at 30BB2AAXX080903:3:51:413:713#0
-CACACCAGATCAGCCTGCACGTGGCCTCAGCTGGACCCTGTGGTGAGTGAGGCCCTGGGGCCGGGCGGGCCACTAC
-+
-67777788888888888888888877776555443222101///.--,,,+++***)**))))((('""####""$
- at 30BB2AAXX080903:3:35:1183:1815#0
-CGGCAGGCTCCCTGGGCCGCTACGTAGAGCCCTCGCTGTGACTCACACCTGGCCTTCTTCAGCTCACNCTCGGTCN
-+
-67777788888888888888888877776535443212100//...,,--++******)))(()(('"$%&%$#""
- at 30BB2AAXX080903:3:44:1273:1964#0
-GCACATTTGTGCAGCTGCGTGCGCGGGCGTGTGCGTCCATCAGTCAGTGGGCGTGCACCAGGCCAGGCGCGCGCGG
-+
-677777888888888888888'8*7773655(4&3..,0/-/.,-,-#-,,*+)*'&##'''##''&%"#""$#""
- at 30BB2AAXX080903:3:47:1328:800#0
-GTGTGGGCACTTTCTCTGCATACGTCCATCCGGTCGATGTATCACATCAATTAGGTAAAAGTGGTGCACGCGTAGC
-+
-6/7777888888888888838088777555554/32+,101..-.---+,+)***))(*'&%(&'''"$$$#$""#
- at 30BB2AAXX080903:3:41:174:332#0
-GTGGGCCTGGCTGGCTGCCCCAGTGAGTACCTGAGCTCAGCCCCGACCCCGGGCCTGGTGCGGCTGGACAGCCCGC
-+
-67777788888888.88888888,777-655544312/1000...,.,,*+*+****)())((('''&$$$###""
- at 30BB2AAXX080903:3:38:412:310#0
-AGGCCAGGGCAGGACAAGGTCACGTGGCCGCACAGCCGCACCAGGCCCGGGAGATCGGAAGAGCGGTGCTCTAGNG
-+
-6477728888888888888*8388$7779511&332/20*.-./*+)+,,+)+)*)((&&)'('('%"$"$%##"$
- at 30BB2AAXX080903:3:2:1644:1857#0
-CAGGGCCTGCAAATCTCTATCCAGAGCCTGGGCCCGTGCCAGGGTGAGGCCAGAAGACCGGAAGAGCGNCACNCAG
-+
-67777788888888888,8/88886777*5554332(.20-/..%+,,,,+&)*&*(''((&'(#'#&"%#$"%#"
- at 30BB2AAXX080903:3:52:1370:1334#0
-GAGCAGCAGCCCAACGCGGAGTTGTAGCAGGAAGCCCTCTCGACAGGTGGCCCAGGGGTGGCCACGCAGCTGACAC
-+
-6777778888888888888888887777655524101200//..-.-,-,+**(**)))*)#((&('"""&#$"#"
- at 30BB2AAXX080903:3:39:223:1250#0
-GATGTGCACTTTGACCCCAGTGAGACCTGCACCCTGGACCCTTCCTGGGAGGCAATGGGTGGGGGATCCCTGCCGC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((('''&%&%#"#"#
- at 30BB2AAXX080903:3:44:26:1712#0
-AGCCCGTTGCCAAGACCACGGCAGCCCCCACCACACGTCGGCCCCCCCCCGCTGCCCCCAGCCGTGTCTGACCGCT
-+
-6/.347888888888888288828.316.56-4/2,.,./,-+,-(+#&,*+*(%'')'''#''#'#%"""$###"
- at 30BB2AAXX080903:3:46:395:1067#0
-GGGGCCGGGCGATGGTCCTGAGCACCTGCTCCTGCCCTCAGGTTTGACACAGGTTCGGGGCCGGCGGCTTGCAGAG
-+
-67777788888888888888888877776555443122101/..---,,,,++(*((((((&'(''&$""$$#"""
- at 30BB2AAXX080903:3:2:1508:1015#0
-GACGGCCTCAACCTGGACACAGACCTCTTTGTGGGCGGCGTACCCGAGGACCAGATCGGAAGAGCGGTNCATCTAC
-+
-6777778888888888888888887777655544332200/0..,.,,-,+%)*)(())(&(&(#''""$##%###
- at 30BB2AAXX080903:3:52:326:99#0
-TCCAAGGGACTCACACGGCAGCCTGGTCCTCGGGTACGCCGCCCACAAAGAGGTCTGTGTCCAGGTTGCGGGGGGG
-+
-6777778888888888888888887777655544-022000//.-.+'+,*,+(***()()('((#'&"#%"""""
- at 30BB2AAXX080903:3:54:1436:208#0
-CCTCCTGGTGGCAGGGCGCTGGAGCGGACCTTCGTGGGCGCCGGCCTGAGGGGGTGCATCCGTTTGCACGTGAATC
-+
-6777778888888888888888887777:455443222100//.--.-,,+++***))))))('(('&'$$%$"#"
- at 30BB2AAXX080903:3:54:1437:207#0
-CCTCCTGGTGGCAGGGCGCTGGAGCGGACCTTCGTGGGCGCCGGCCTGAGGGGGTGCATCCGTTTGCACGNCGTCG
-+
-6777778888888888888888887770445544322210///.----,,+,+*)*))))))('(('%$$""%"#"
- at 30BB2AAXX080903:3:59:1062:1958#0
-AGAGGCCTGCACACCTTTGCACGGGACCTGGGGTCGGTGGGGCAGGAGCAGGGGGAAGGGCCGGCCCCGCACCTAT
-+
-6777778888888888888-84887.21454.4/*21,101.+,..),$),,+*)#(()(''('&&#&"$"%#"#"
- at 30BB2AAXX080903:3:44:1715:1810#0
-GGCCTCGTGCCAGGAACACGACCTCCAGCGCCATCTTCTCCCTGGGGTCATGGGGAGTCGGGGTGTCTTAGATCGG
-+
-67777788888888888888888877776555443222100//..--,,-+++***))()))(''(&$%%'%##$#
- at 30BB2AAXX080903:3:58:710:819#0
-CGGAACTCCAGGCGGCGGTCCCGCAGTGCCAGCGACACGAAGTCCCCCTTGCCGTCCGTCTTCTGCCCGGTACCAC
-+
-67777788888888888888888877176765343310/0//*-..,-)+++**&())&('(''(%%&&"#"$#$%
- at 30BB2AAXX080903:3:47:89:438#0
-GGGAGGAGCTACCCTAGGGGTTGAGGCGCCAGAGACGGTGAGCAGATGAGAGGCCGACAGTAAGATCGTGTGCTGT
-+
-67777788888888888888888877776555343222100//-.---,,+++***)*)))))(((''$""###$#
- at 30BB2AAXX080903:3:54:1694:93#0
-GCCAGCAGAGGATGGCACATTACCTCTCGGTCACAGCGTTGAGGGACTCGACAAAGGTCCGCCCGTCACCAAAAAA
-+
-677777888888888888888888777765554332/2100//.----,,+++***)')')(((''%&%%%%$$$$
- at 30BB2AAXX080903:3:60:528:332#0
-TCTACTCACACGGGGATCTCATTGGCCAGTTCGCTTGGAAACAAAGAGACAGACAGTGAGAGGCGGGAGGACACNN
-+
-67777788888888888888888877776555443222100//..---,,+++***)))))((('('%%$$%"#""
- at 30BB2AAXX080903:3:42:948:1609#0
-GTGCAGTCGCCCCTCCCAGGGCACAGGCCGAGGGTCGCCCCACAGCCAACCCCCACCACTGAGGCTGTACACCACG
-+
-6777778888888888888888887777655544%022201/.-..,,+,++)*)*())()'((%''$$%"%#$#$
- at 30BB2AAXX080903:3:43:1581:1980#0
-CCAGCTGTGTGTGTGCATGGGTCCATGTATATGTGTGTGTGTATATGTGGGGGGGACAAGATCGGAAGAGCGGGTC
-+
-67777788888888888888888877776555443222100//..---,,+++**(#*))))&)(''&&%""""""
- at 30BB2AAXX080903:3:47:847:1461#0
-TGTGCACACACTATACACACATGGACCCATGCACACACACTCGGACACACACCTGCGTGTCTCCCTCACAACAACA
-+
-6777278838388888882874880.1,655-8/1-2/0./-.-''+++*)(*()((()(''('&%&""""%#"##
- at 30BB2AAXX080903:3:35:450:576#0
-ACACATGCATGTGTGCATGCACGCAAACCTACACACGGACACACACACCCCTCCATGTTAGATCGGANACATCCCN
-+
-67777788888888888888888877776555443222100//..-----+++***)*))))((('(""%#####"
- at 30BB2AAXX080903:3:45:1020:94#0
-GTAGGGTGGAATGGAGTGGAGACCAGGGGCTTGGATGCCCCAGTACACACATGCATGTGTGCATGCACGCGACCAC
-+
-67777788888888888888888877776555442220120*-),.++++*)*)'()()#)'(#''#$"###%#"#
- at 30BB2AAXX080903:3:33:812:26#0
-TTCCACCCTACGCCTACCTCCTTGATCTCTGCGCCCAGCCTTGGCTGTGCTCCCCTGCTGTCTGCACNCGCTGCNN
-+
-6777778888888888888888887777655542321212/-/..--)-+))+**'))(('('('#'"&$$""$""
- at 30BB2AAXX080903:3:53:257:1728#0
-GCCTACCTCCTTGATCTCTGCGCCCAGCCTTGGCTGTGCTCCCCTGCTGTCTGCACGTGGGTGTCTGCCAGNGANG
-+
-67777788888888888888888877776555443222//1//-,--,-,+*+)))*')))&(%&''$"#&"#"""
- at 30BB2AAXX080903:3:49:979:817#0
-ACACTTGAGGGCACAGACACCCACATGCAGACACCCACGTGCAGACACCCACGTGCAGACAGCAGGGCGGCCACGC
-+
-67777788888888888888888877776555445222100//..---,,+++)**))))*))((('"""#$"#"#
- at 30BB2AAXX080903:3:37:534:1546#0
-CCAAAGAGCCCAGCAGGGACACCTACACATGCTTGTGCGGACACGAGACACGTGAGGGTGCAGAGATCAGCTATCN
-+
-6777778888888888888888387777655541332.100-/-.,-*,,++++*)))#)#()((%#$"%&#""$"
- at 30BB2AAXX080903:3:47:293:910#0
-GTGGGGTGCAAGGAGCAGGCACCCACAGAAGACATGCGTGACCTCGAGGATCACTGGCCGCCCACCACAGACACGT
-+
-6777778888888888888888887777655544322220//...---,,+,*++**))))()((''%"#"#"##"
- at 30BB2AAXX080903:3:59:516:1825#0
-CCAGCAGGTGCAGCGGGTGCCGGCCCACCACCACATCCCGCAAGCAGCCCACAAAGCCTGTGCCGTAGNCAGCTAC
-+
-*7777788888888888888088/23676%5211/10-/0,-..,-,+++)+*)')(()(''''(%%$""""#"##
- at 30BB2AAXX080903:3:56:1616:1284#0
-GCCATCCACGCCGAGCCCTCCACGCTGCCACCTCGCCTGTCCATCCCTCAGCACTAGGTCTGTCTGACACCTCAAC
-+
-67777788888888888888888877776555443222100//..----,+++***)))))((('''$$%$"#$$%
- at 30BB2AAXX080903:3:3:1739:1235#0
-GATGGCAGCCTCAGGACACACACCCCTGCCTCAAGGTGCTGAGCCCCCGCCTTGCACTGCGCCTGCACNCCCANCN
-+
-67777788888888888888882477276533,422$20//*.,---++,)&**'(((('''##'&#&"#""""#"
- at 30BB2AAXX080903:3:38:1576:736#0
-CGATAGCCCCTCGCAGGGCCTGGGGTGTGGCAGAGGGATACGGTCATGTCCAGGGTGGCTGGGCAGGGCCTGCGTC
-+
-677777888888888888888888707365554432221/0//-..,-+,+)+**#))(')))'#''"&$""$"##
- at 30BB2AAXX080903:3:33:32:1145#0
-CACACGCACCCACACGCACATGCACCCACACGTACCCGCACCCACACGCACCCACACGTGCACGCCANACACACNN
-+
-67777788888888888888888877776555%43222100//..---,,+,+****)))*())'''"$#"##$""
- at 30BB2AAXX080903:3:34:1565:991#0
-GAGAGCAGGCACACGCACCCACACCCACACGTACCCACACGTGCACGCCAGAGAGCAGGCACACGCANGGTATCNN
-+
-67777788888888888888888877776551443221100+..---,,,+++**))()()((((''"""##$$""
- at 30BB2AAXX080903:3:50:461:948#0
-TGTGGGTGCATGTGCCTGCTCTCTGGCGTGCACGTGTGGGTGCGTGTGGGTGCGGGTGCGTGTGGGTGTACAATCG
-+
-6777778888388818888888887777655544222210//..,-+-,,*+****&(()')'(''#"#"#"""$#
- at 30BB2AAXX080903:3:54:1586:2029#0
-TGTGCCTGCTCTCTGGCGTGCACGTGTGGGTACGTGTGGGTGTGGGTGCGTGTGCCTGCTCTCCGAGCAACACAAC
-+
-67777788888888888888888877776555243222100//..---',+++*#)))')#)'''&#"$#######
- at 30BB2AAXX080903:3:49:577:1937#0
-GGTGCGTGTGCGTGTGGGGGCGTGTGCTTGCTCTCCGGCGTGCATGTGTGGGTGTATGTACGTGTGTGNCCNGACT
-+
-6717778888888828,8&8,828.72785'524..-000)/,.-.,-,,+,*+')(((('(()(''%""#"""#"
- at 30BB2AAXX080903:3:59:1028:261#0
-TGTGCCTGCTCTCCGGCGTGTACGTGTGGGTGCGTGTGCCTGCTCTCTGGCGTGCACGTGTGTGTGTGTGAGCTNA
-+
-677777888888888888888888977765/5443212000//..----,,+****))()()(('('&$%""#"""
- at 30BB2AAXX080903:3:48:1212:977#0
-TCTCACTATGTTGCCCAAGCTGATCTCCCACTCTTGGCCTCAAGCGATCCTCCAGCCTCAGCCTCAGACCGACATA
-+
-67777788888888888888888877776555443222100/...---,,+,++**)))*))()(('&#%%"#"""
- at 30BB2AAXX080903:3:50:124:1343#0
-GCACCGGCAGATGTGAGCCCTGGGGAGAAGCAGGGGGAGAAGGGGTAGGGTGTGTGGCGAGCTGGGTCAATCGACC
-+
-677777888888888883888888777065724432211.///..$--,,(+++**)$)))'(((''$"""$""##
- at 30BB2AAXX080903:3:54:407:660#0
-GGGAGGCTGAGGCACGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCACGATCGCACCAGTGCACCC
-+
-67777788888888888888888877776555443022100//.,--,,,,++*+***)))))((('&""&%"##$
- at 30BB2AAXX080903:3:43:344:1362#0
-CCTGCACACCGTCCAATGGACCCACACCACATGCCCCGCCTCTGGCCTCCTCACCTGCCCTCCCCCTGCTCATGCT
-+
-67777788888888888888888877776555422222100//.,+--,-,++**)*)())(((((''&&&$%$#$
- at 30BB2AAXX080903:3:58:1442:212#0
-CTGGTTCTGCGCACCCTCCTCCTACCCTCCGAGGTCCTCCTCCCTCCTCCATTTCTGGAGATCGGAAGCGTGCNNA
-+
-67777788888888888888888877776555443022210/../.-,,,,+++**))))))()(''&$%""%""$
- at 30BB2AAXX080903:3:56:72:129#0
-ACCTACAGGGAGGCGGACGCGGCACCGCCAGGGAGGTCGGTCCCGCGAGATCGGAAGAGCGGGGCAGAACAACGAC
-+
-6777778888888888888888817%776)554132%110,//.,-,',*$*+*#&*()'()&#(&'""%""%"##
- at 30BB2AAXX080903:3:40:860:2018#0
-GCCTGCCCCCCTCCACCCGCAGGCCCTGCCAGGACACTTTGGTCCCTGGCCCGCCAGGCCTAGATCGCAAGTGCGC
-+
-67777788888888888888888827973525433222000/.,-,,,+($'+)%%))#&('((%#'$""&#$$"#
- at 30BB2AAXX080903:3:49:1042:397#0
-CCTGGCAGGCCCAGGCGGTTGGAGGAGAAGTGGTCGGCTCTGGACACCTTTGTTGTTTTTTTGTTTTTCTTCTCAC
-+
-677777888888888888087878727153.94$-22-//,-.+)&)+&,+)*+*'(*)*(%(&(''"%""#"###
- at 30BB2AAXX080903:3:42:406:1519#0
-GGGCCCTTTGTCCTCCTCCTCGATGGGAGCCCCAGGCCCTGGCTCTTCTGTGTCTGCACAGAGTCTACGCTGGTAC
-+
-677777888888888888888888777763554430/11/,//..--+,,+++)**)((')(('('&$'"#%"###
- at 30BB2AAXX080903:3:37:661:533#0
-GGGCGGGACACGGCTCTGGAGATGAGGGAGAGGACGGGCCGTGCCGACCGGCACCGCGGTGTTCCTGAGCGCGAAN
-+
-67777788888888888888888877776565443222,00./---,*-,-+*)+)))*%)#('&''"$%%""#""
- at 30BB2AAXX080903:3:44:1326:910#0
-CAGACTAGGAAGGTCCTGGGACGGGGGGGATGTTCACCACAACAGGGCCAGGCTCCCGCCCCAGCCTCACATCCAC
-+
-6777778888.88888888888(827776/55)4*.)01-+*&,%--+%*))+%)'(*')''((''#%"$""####
- at 30BB2AAXX080903:3:2:1253:1523#0
-CTCTCCCCACTCCAGGTGGTTTCACCCCAACATCAGCAGGGTGGAGGCGGAGAAGCTGTTCCTATCCCNCTAGTCC
-+
-67777788888888888888888877776755363221100*/.----,,++*)+)')%(%(#''#'%"%"%##"#
- at 30BB2AAXX080903:3:50:109:485#0
-TGGACACGAGGACTTGGTGCGGGGGGCCGATGCCCTGGGAAGGTGGTGAGAGTTGGACGTGGTGCTGTCACACACT
-+
-67777788888888888888888877776555443222100//..---,,,+#***)))()('(#(&"%"$"$"#"
- at 30BB2AAXX080903:3:47:302:683#0
-GTTGGAGTGGTGAGCCCTGGCCCAGCATCCGCGTGTCAGCACACGTGTGTACGTGTGCATGTGTGTGTCCGATACT
-+
-6777778888388888888884887777555544331110.//..,-+,+++***))()()')((&&$##""#"#"
- at 30BB2AAXX080903:3:60:1175:1214#0
-CAGACGCCGTCCCTCAGGATGCAGGCACACGCACACACACACACACACATGCACACGCACACACATGNACACAANN
-+
-67777788888888888888888877776555443222100//...---+,,+*****)))'(((''"'&%#$"""
- at 30BB2AAXX080903:3:34:1508:481#0
-CTGGCTGGTACCCTGGGCTGAGCTGGTTCCTCCAGCCTCAGTTTCCCCACTGCAGCGGGCTGCATCTNCCCCACNN
-+
-67777788-88888888888882677269546532500/-0-./,,(-+,$+*)'))(&'#'%#&'#"$#"#"$""
- at 30BB2AAXX080903:3:33:976:1293#0
-CCTACCAGCCCCTCCGTGTGTCCTCCTGGCACATGGCGACCTCCATGACCCGATGAGGGTGCGGGGCNGTCTCANN
-+
-677777888888888888888888777765554/322211///,-.---,,+)**)**)')()((('""$$$%#""
- at 30BB2AAXX080903:3:50:878:487#0
-GGGGTGCGGGGCCCGGGGCAGCTGCCCTCGGTGGGAGGGGTGTGGTGTGGTCTGCGGGGCCCTGAGAACCGCGCAC
-+
-6777478888888888888888887775935(443.2210+/)..&-+,,*++*)*)))(%(&(%'#"$#"$"#"#
- at 30BB2AAXX080903:3:4:1709:1362#0
-GTACTCCTGGTTCCTCTTTGAAGTTCGTAGTAGATAGCGGTAGAAGAAATAGTGAAAGTCTTAAAGTCNGTTCNCN
-+
-6777778888888888888888887777655544322210////--+--,+++****)))))))(('%""&"#"""
- at 30BB2AAXX080903:3:52:1636:1138#0
-GGTAACGCCAGTGTCTGGGAAGGCACCCGTTACTGAGCAGACCGGGAAAGGGAGTCTCCTTTCCTTGCACAACATA
-+
-67777788888888888888888877776555443222100//..---,,+++**))*)))(((''%&&%&"$%""
- at 30BB2AAXX080903:3:55:352:598#0
-GCCCACCCCTCCCTTGGGGACCCTGGTTCGTCCTGAGCCCCCCAGGAGCAATGGGCACAGGCCCCGCATCTCGCCC
-+
-67177788888888888888888877176'5348312.10///,,-,,-,(&(***&)(%()('(('""##&$###
- at 30BB2AAXX080903:3:42:360:1451#0
-GCCCCGCTCCATCTCCCTGGTGGTCATGACGATGACACGCGTGTTCTCCTGGTGCACCGTGGCCCAAGATCGTACA
-+
-67777788888888888888888877776555443220120//...--,,,++***)))))((((''&&%&%#$#"
- at 30BB2AAXX080903:3:45:1097:1381#0
-TGCATCTGCACAGCCCGCGTGGGCCCGCCCCGCCGCAGCTGAAGTGCACCACCATGGGCCCGGCCCGCGCACCCGG
-+
-67777788888888888888888876776555433322200/-.--,--++)+*)**)(''(('(&'%"""$"#""
- at 30BB2AAXX080903:3:37:352:1667#0
-AGCCTCCGTCTGCACCATTCCCCAGTGCTGCCGCCAAACCAGCTGGATCGTCTTCGGGACGTCGGGGACTCCACCN
-+
-677777888888888888888888777765554432111////..---,,+++*)+)*'')'(((#&"%"#####"
- at 30BB2AAXX080903:3:3:854:402#0
-CCGAAGACGATCCAGCTGGTTTGGCGGCAGAACTGGGGAATGGTGCAGATGGAGGGTCCGGAGCATTCNGCNANTA
-+
-67717788/8888*8&888/8388178/4+$30)3522&/,-,&-(-,+$+,)**)##&(&%'#(##$"#%"""##
- at 30BB2AAXX080903:3:56:1025:867#0
-CGCAGGGCCACGCCCCCACCTGCTCGCGCAGGCGCAGTTACTCGCCCCGGCTGTGCCGCCGCAGCGCCAGACACGA
-+
-67777788888888888488888877776555540.2*10../.-,-,+,$*+)*))&(#(('('&&'$"$$##"#
- at 30BB2AAXX080903:3:38:571:1616#0
-GGGGCGAGTAACTGCGCCAGCGCGAGCAGGTGGGGGCGTGGCCCTGCGCGGCGTGGCCTGTGCGGGCGTACGCGAT
-+
-67774788+8888888-8881888/77165454432/2/00/..--,-',+)+%*)#&))#)#(((#$""#"###"
- at 30BB2AAXX080903:3:42:354:1525#0
-GCCGTCCCAGGGCTGCGGGGTTCTGCGCGTGGAGCAGCGGCTCAGCCCTGCATCCCGCACGTCCCAGACCCTCCAC
-+
-617777888888,8888888,8887/7764553410--20-/,+.'-,+,&)*'*'(()('%(('''%&&&$"%##
- at 30BB2AAXX080903:3:46:742:159#0
-GGAGTGGCCGAGCTGGGGGCGCACGCGGGTTCACACGTGGTCACCGGGGGGGTTCGCAGCCCGTCGCCACTCGCGG
-+
-67777788888888888888888877776.2512322,20./.--+-#+,,*%))*&')'(#(#'&%%"#"$"#"#
- at 30BB2AAXX080903:3:1:1624:303#0
-CACGGGTGGTCAAATGAATATGTCACACACACCTCACTCCACAGACATCCACCATGTGCCTGATGGGGNCGNCTAC
-+
-67777708888888888888887173786/41-/.21-1./-/..--++&,*%(**')#(((('(&'""#""#"##
- at 30BB2AAXX080903:3:51:1015:507#0
-AGGAAGTACCTGGGCTCTGGGGTCAGGGATGGGAAGGCTGAGGAGGCCTGCGTGCGCTGGACCTGGCCCCGGTCTA
-+
-67777788888888888888888877776-45443222000//..-----(++****)()())((&'"##"#"$""
- at 30BB2AAXX080903:3:49:714:1768#0
-CTTGCCGGGCTTCCACTCATGCTGACATTTCCCCGCGGGGCTGGTCCGGCAGATCTGAAGAGAGGGTGCGCACGTC
-+
-6777578,8888*8883-/88.88776765*1&23,'210,./.'+&+,+)&*)#()#()&(#&'#'"$"###"##
- at 30BB2AAXX080903:3:1:858:1885#0
-CTTGGCAAGGGGCTTCCCTGGCAGGCAGTTCACAGGGTGTGTGGGTGGGGGGGATGCTGACCAGCTGCNTCNCCGG
-+
-6777778888888888388888-8577722521,320*/-1-/-.+-,,+++*)())((((('''#&%""""##""
- at 30BB2AAXX080903:3:55:1596:432#0
-TACTGGGGAGGCTGAGGCAGGAGAACTGCTTGAACCGGGGAGGTGGAGGTGGCAGTGAGCCAAGATTCAAGAACAA
-+
-67777788888888888888888877776555443222100//-.---,,++++*))))()((('''"#$"####"
- at 30BB2AAXX080903:3:2:1718:1254#0
-TCCGAGCCAGGGGTGCCAGGGGACCTGGGGCTGCCGGCCGAGCTGGGGGGCCTGGCATCGGGGCGAGCNTGACCTC
-+
-6777778888888288848888807773.33.52212,10$-*&--,,+$$'#(*%'##&#'(####""#""##"#
- at 30BB2AAXX080903:3:48:639:1001#0
-GGCGGCCGGTGATTGCTTACCACAGTCCCTGTCCCACAGCTCAGAGACATGTCGTCAGGCCAGCAGGGCANGNCTC
-+
-67777788818888888888888877776555343221100//..-,,-,++***))*)((&)((('"%""""$"#
- at 30BB2AAXX080903:3:43:1641:1733#0
-CTCACATAGCTGCCTACAAATCAGGCCTGCACCGCCCAAGCCAGGCACCCATCCTGGGATAGATCGGACGACTGCC
-+
-67777788888888888888888877776555445110100/...--,+-++)*****)())(('('&"%"%"#$"
- at 30BB2AAXX080903:3:49:612:1479#0
-GGGGGCTTTGGGACGACAGGGAGGGCCCAGGCAGGGGCAGGGGTCAGTGCCCGAGGAAGGTGCACGTGTACTACAT
-+
-67777788888888888888888877776556542221200//--,-,,***+)*)()))#)'''('"$"#"##""
- at 30BB2AAXX080903:3:2:1466:634#0
-AGGTGGGACCCCTGTGGCTCCCTGCAGCGGATCCTGGGTGCAGGGGAGGGGCGGGGGGTGGAGCAGGGNTCNCAGG
-+
-67777788888888888888388877776545442222.0///..-,-,,+*+**'))#)(#'##%'""#%"#$""
- at 30BB2AAXX080903:3:42:424:701#0
-ATGGTGCCCCACCCTGAGCCTGTGCAGGTAAGGGGTGAACACGGGCTGAGCTGGCCTTACCTGGTGGCCGGGGGGN
-+
-67777788888888888888888877776555443222100//...---,,++*)**)))))(((''&&%#"##""
- at 30BB2AAXX080903:3:45:1728:1601#0
-GCGGGTGACGGCGCACGCATTCCTTGTGTCCCCGCCTGTCTTGGACAGAGCAGAAGCCACACCTGCCAGGCGAGTG
-+
-6777778888888888888888887777655544322210///.-,,-,-,+++**(*)))(('(''"""%""$"#
- at 30BB2AAXX080903:3:45:180:875#0
-CCCACACCCAGCAACTCACACCTGCCTCAGACCAGAGCTCTGTGCGGGTGACGGCGCACGCATTCCTTGTGTCCCC
-+
-67777788888888888888888877776555443222100//..---,,+++*+*))*))))(('&'&"$$""#$
- at 30BB2AAXX080903:3:51:145:928#0
-GGCTGGCTTCATCCTCTCCTTGGCGGGCCAGGCAGCTGGAGGGCAGGGGGGGGGGGGGGAGGGGGGGCGCGCGTGC
-+
-677777888888888888888888777763554432121&///(%---+,+++***)))#)(((#((%##""""##
- at 30BB2AAXX080903:3:47:990:425#0
-GTGGCTGCTCTCACACATGGGCCATGTGTTCACACGCTCTATGCCCCCGTGTCCACAGGCTCGCACCATCACATAT
-+
-617777882848888888888888/777851244313-20-/.*,-.-&$&&'*)*)((&&'#(#&#""%"####"
- at 30BB2AAXX080903:3:56:1073:1094#0
-TAGGGCATGTGGACATGGCATGTGTGTGTGTGTGGACACAGGGCACGTGTGTGAGAGCATGTGTACATGGCGAGCC
-+
-67777788888888888888888877776555443222010//..--,,+++++**))))))(((''"&&#"""##
- at 30BB2AAXX080903:3:46:1569:205#0
-AGTCTGCTAGGGCATGTGGACATGGCATGTGTGTGTGTGTGGACACAGGGCACGTGTGTGAGAGCATGTGTNCNAG
-+
-67777788888888888888888877776555443222100/...---,,+,+***))))))()(('&""#"$"#"
- at 30BB2AAXX080903:3:33:1211:314#0
-GCACAGACCAGTCCTGTAGTCTGCTAGGGCATGTGGACATGGCATGTGTGTGTGTGTGGACACAGGGNCCTCCCNN
-+
-67777788888888888888888877776555443222100/.-.-,-,,+++***)**())'((''""%"##$""
- at 30BB2AAXX080903:3:4:972:966#0
-TTCCTGAGCCCAAGTCCCTGTGCTCCTCCTCGGGGTGTTGCCCCCGGGCCTCTGCAGTCCTGGGTCCGNATTANAN
-+
-6777773888888888888888887777655544322/+00.-..'-++,,*++*)*))(((('(''%"""##"""
- at 30BB2AAXX080903:3:54:1671:1552#0
-ACGGAGTCCCCATAGCCTCAGCCTCCCCCCACGGAGTCCCCATAGCCTCAGCCTCAGATCGGAAGAGACCAAAACA
-+
-67777788888888888888888877776555443220000//..----,+,****)*)))()(''%"""%&$%$$
- at 30BB2AAXX080903:3:51:472:1192#0
-TGCGGGGTGGCTGAGGCTATGGGGACTCCGTGCCGGGAGGCTGAGGCTATGGGGACTCCAGATCGGACGGTCACAG
-+
-6777778088888888888888889773655534322110///-.---,,,++***((*&)'((((%$"""$"##"
- at 30BB2AAXX080903:3:40:596:230#0
-GTGCCGGGAGGCTGAGGCTATGGGGACTCCGTGCCGGGAGGCTGAGGCTATGGGGACTCCGTGGGGGTCGCGTGAT
-+
-67777788888888888888888877776555443222/00//.----,,,++****))))&)(((&"#&#$#"##
- at 30BB2AAXX080903:3:36:734:672#0
-CCACGGAGTCCCCATAGCCTCAGCCTCCCCCCACGGAGTCCCCATAGCCTCAGCCTCCCGGCACGGCATACCTNCN
-+
-67777788888888888888888877776555443232100///----,-+++**)*)*)((((('#$####%"#"
- at 30BB2AAXX080903:3:58:791:536#0
-TCCAGGCCTCGGTTACGGGTCACACCTGGCACTGCCAGGCCTGGGGACGTGGTGCGGCCGGTGCGGGGGGTCTCAC
-+
-677777888888888888888888777765554432221000/..-,,,,+,**)**))))'(((('&"%#$"###
- at 30BB2AAXX080903:3:42:1324:1277#0
-CGTGCCCCTCGCTGCCACAGGTCCTGGCTGACCACGTGCTGCCCAAGGGCCAATCGCGAGTGCGCAGGTGGGNCTC
-+
-677777888888888888888888777765554222/2100/0.,,,,,,+*+'&)&)((')'('&'&"$"""""#
- at 30BB2AAXX080903:3:42:1614:348#0
-ACAGCAGGTCCAGCCAGGCAGGGTCTGGAGGCCAGGCCAGACACAGACAGGCACCTCCCAGCCCACCCTCTGCAGC
-+
-67777788888888888888888,77776555443222.1///.--,-+,++*+*())*('((('''&$$#%""""
- at 30BB2AAXX080903:3:37:350:1141#0
-GAGGGAAGGAGTCCACATCCCCCTGGAAACTCCACTCCTGCATTTGCACCAGGCTGGGCGTCTGGTTTACATATCN
-+
-67777788888888888888888877776555443222100//..---,-,++*+*))))))(((('$###"#"#"
- at 30BB2AAXX080903:3:46:1540:1941#0
-CAGACGCCCAGCCTGGTGCAAATGCAGGAGTGGAGTTTCCAGGGGGATGTGGACTCCTTCCCTCCACGCCCGCCAC
-+
-67777788888888888888888877776555423222100//..-.-,,,++****))))((((''"##"%###"
- at 30BB2AAXX080903:3:52:421:1492#0
-CCCTGGCTGCAAACCTCAGGCTGGGGGTTTTTGGGGACAGGGATGCAGGTGTCTAAGGACACGACCCTTCAGGCAG
-+
-67777788888888888888888877736555443222100//..---,-+++**)*)))))((''&""$"&$$"#
- at 30BB2AAXX080903:3:53:481:2002#0
-GGACAGGGATGCAGGTGTCTAAGGACACGACCCTTCAGGCAGTGGATGTTTTAGATCGGGAGAGGGGGTCGACCGA
-+
-67777788888888888888888877776555443.2210./-..,"-&*+%'')&#()#'('(#'%"#%%""#""
- at 30BB2AAXX080903:3:4:955:1307#0
-CTCCAGGCAGTGGACGTTTCTGCCTGGGTGGAGGGCACGGTTACGAGAGCAGGGCCCGCGCTCTGGCTNCGACNAN
-+
-67777788888888883883888877770555443.000/&-**'+,),++)++'))((((#(##''$"$%$%"#"
- at 30BB2AAXX080903:3:57:1252:74#0
-GCCAGTGGGGAGGACACAGCCTAGGAACCAGCTGCCTGAGACCAGGGTGCCTCTGGGCTGTCCTCCCGTGACTCAC
-+
-677777888888888888888888777165554412220/1.-*---#,+,**)())()(''(&'#''"%%$####
- at 30BB2AAXX080903:3:53:812:126#0
-AAGTGCGTGGCGTGGTCTCGGCCTCCAGGTCAGACATTGCTGATACGGGCCTCCCCCGGGAAGGCCGCGCGCACAG
-+
-677777888888888888888888771765554622211////.--,+,+,(+)***(*('((('#'$$#$#"##"
- at 30BB2AAXX080903:3:47:746:1426#0
-GGCGCCCGGGGCTGTTTACTCTGACCAGGTGGGAACCCAGATGCCCCCTGCCCCTAAGGCGCCCTCANCGCTCCTC
-+
-67777788888888888888888877476/554350/1001..-,-,,+,+**+*)())()'&'''&"$"%###"#
- at 30BB2AAXX080903:3:52:763:1694#0
-GGCAGGGGCTGGGAAGGCAGACAGCGTCCTCCCCGAAGCCTCGGGAAGCGTGTGGCCTTGTGTGCCCCGCGGATGT
-+
-6777778888888888888888887777+5553432320(///..,,-,,+,***#))()(&((''#%$"&$"%""
- at 30BB2AAXX080903:3:39:781:949#0
-TGGGTCAGGCGGACCCAAGAGTCAGCCCGGTTAGGACCCATTTTATGTGCGGGGCCACAGACACAGGCTGAGATCA
-+
-67777788888888888888888878776555443210000//.,---,-+,+*)*))))))(((((&&&&$#$""
- at 30BB2AAXX080903:3:55:1627:829#0
-CAGCAGAGGCCCCGGGGCTGCAGGGTCTCCCCCAACCTCTCCCTGCGGTGCATCAGCCTGGCCCTCCACACACAAC
-+
-67777788888888888888888877776555443222100//..---,,,+++**))))))(('(%$$%%%$&$$
- at 30BB2AAXX080903:3:50:935:144#0
-CTCCGGGGCACGCACAGGTGCGGGGGCATCCCGAGCACCCCAGGGGAGTCCCCGCTCCCGGGACGCACTCTCCCAC
-+
-6.77778888881888-8-8888/777+6545%4'122100/-.-.+,+,+'+***)**#(&((&(&%$$"##$"#
- at 30BB2AAXX080903:3:60:626:592#0
-GTGGGGCTCAAAGCCACCTCGTGCCTGAGGCTCCTCCCGGGAGGGGGGGAGGGGAGCCCGTCCCCTGGTCACAANN
-+
-6777778888888888888808887777555546+2/2.00*...&--,+-++$'*)))'()'((#'$"%$&#"""
- at 30BB2AAXX080903:3:46:1773:1441#0
-TGACCCCTTCCCACTGGAGAGACGGCCTTGTGACTGTGGGGCCTTCAGGCGGGGGCGGGGTCTGGGANGTATACTA
-+
-677077888888888888888888777765554432-10-0#/&-+*,,++++++()*((#&((&'#""$""##""
- at 30BB2AAXX080903:3:50:820:1165#0
-CCCGCCTGAAGGCACCACAGTCACAAGGCCGTCTCTCCAGTGGGAAGGGGTCAGTGCCCAGGCCCGGGCGCTCTGG
-+
-6777778888888888888888887777655544322210.//...--,,+++***)))*)(((('(%$"""#"""
- at 30BB2AAXX080903:3:40:264:1575#0
-GAAACGCCTCTCCGATTCCAGTTGCCCCTGAAAGCCAGGGGGTTCTCAGCCTTGTTCCTTCCTCCGGACACACACC
-+
-6'*1.2+88281./188/068888+'1/6501483('1///.)-)-*),*(++&**'()('%('''#$&#&&$###
- at 30BB2AAXX080903:3:60:743:670#0
-GCTCACGGCCACACCGCACGCTCTTAGGTTCACACTTAAGGCTCACACTCACGGCTCACGCTGACACCCACAATNN
-+
-67777788888888888888888877776555443222000//..---,,+++*+**)*))(((('''$"&"#"""
- at 30BB2AAXX080903:3:37:680:901#0
-CATGGCTCACGGCCACACCGCACGCTCTTAGGTTCACACTTAAGGCTCACACTCACGGCTCACGCTGCNACGACCN
-+
-67777788888888888-8888887-7163/5/4322200/-/-..--,,++*()***)((()((''"""""$$#"
- at 30BB2AAXX080903:3:57:421:267#0
-CAGCGTGAGCCGTGAGTGTGAGCCTTAAGTGTGAACCTAAGAGCGTGCGGTGTGGCCGTGAGCCATGAGCGTATAT
-+
-67777788888888888888888877776755443222110//..---,,,++***))))(('('''&$#%#""##
- at 30BB2AAXX080903:3:8:591:1715#0
-AGAGCGTGCGGTGTGGCCGTGAGCCAGGAGTGGGAACCTGAGAGCGTGTGGCTGGGGGGGGAGGACGNGGCGACNN
-+
-67777788888888888888888877)765.5'4321210./,.--,-*,,*)*'*#*&#(#)%##'""%$#"#""
- at 30BB2AAXX080903:3:35:1260:433#0
-CTCTTCCCGAGTCTGCTGGGCCATTCGGGACAGCTCTGTGGTGAGGGCTGCTCCGCCCCCTCAGCCCNCTCTTANN
-+
-67777788888888888888888877776555443222000-/..--,+,+++*+)*))(()(((''"%"#""#""
- at 30BB2AAXX080903:3:52:471:1340#0
-TGCCCGGCTCCCCCCGGCTCCCTTCTCACAGCTCCAGCTGTGGGAGACACTGTGGGGGGTGGTGTCCTGTGTCTCC
-+
-677777888888888888888878727/65551,3220101//.--,,,,++#++*#)&&'#''###"""#"""##
- at 30BB2AAXX080903:3:41:1297:799#0
-GCTGTGAGAAGGGAGCCGGGGGGAGCCGGGCAGACCTACAGCTTCTACACTCGGAGCCGTTGTAGGCTGGGACCTC
-+
-67777788888888888888888577776555422501.00..-,,,+,,+***))'))#''#&(%#%$$""##"#
- at 30BB2AAXX080903:3:2:1772:883#0
-CCGGGGTGCTCGGCGTGGAGTGCAGCGTGGAGTACTCGGGGCTGGGGGGCTCGGCGTGGGGAGTGCGCNCTGCTCT
-+
-677777888888888888880888777;6555241202100*..,-.$,(*)+*&*#*)#)#(#(#%""$"####"
- at 30BB2AAXX080903:3:42:1535:1455#0
-CAGCGGGCACTTCTGGGGACAGTGCTGCGCTGGTGTTTGGCTCCCTGCCGTGGACTCCGTTCTTCGGCCTCCGGGC
-+
-67777788888888888888888877776555443222100//...--,,+++*****)()(((((''#%&###""
- at 30BB2AAXX080903:3:36:1009:517#0
-AGGACCCCAAGGTGCTCAGCTTCCTCCCAGCCCCTCTGTTCCCCCTCAGAGCGGTGCCCTCCTCCTCACTCGCGCN
-+
-677777888888888888888888772765550431%2//1$/...-,,++)*)#))')#'&(('%'"%#&####"
- at 30BB2AAXX080903:3:39:1638:1437#0
-AGGGCAGCCAGTGGGAGCAGCCAGGGGAGGGGAGGACAGAGTGAGAAGGTGCAAGGGCCACTCCTTGTACCGCACA
-+
-677777888888888888888888777765554432-2110-/..-,-,(+*++**)')'('(&#&'"""""###"
- at 30BB2AAXX080903:3:33:1418:466#0
-GCTTTGCCAGAGGCCCCTGGAGCCAGGACAGCCCCGTGAGAATGGCTGAGCTCATGGGAGATCGGGANAACAGTNN
-+
-67777788888888888-8888789777355,3212)2100/....*-&,+*+))**)))'((((#'"$##"""""
- at 30BB2AAXX080903:3:56:1363:157#0
-GCCAGCCAGGAGGGCGAGGTGCCGCAGCGCCATGCCAGGAGCAGATGCGCAGAGCCAGCCACAGGGCGAGTACATC
-+
-67777788884888888888888877776)55-4-222100*..,--+,-+****)%(#)(('('(#$"""$$"##
- at 30BB2AAXX080903:3:1:1668:1715#0
-TTGGCTCCGCATGCTCCTCCCTGTGGCAGGCTCTGCGCATCTGCTCCTGGCATGGCGCCGCGGCACCCNCCNCTCC
-+
-6777778888888888888882807771656,3-/0/1(*.)+,%,-&)++&#)**))#(''((%#'"""#"#%#"
- at 30BB2AAXX080903:3:50:55:1198#0
-CCAGTCCTGCAGATGAAGACAGCAGGTGAGGCCGTGGTCACGCGAGGGCAACCCAGGTGGGCCGTGGATTACGCTC
-+
-67777788888888888888888877776555443222100//..----,+,****)*))))(('''""""$"#"#
- at 30BB2AAXX080903:3:46:129:667#0
-TGTGCGGAGAGTGGACCGTCCCTGTGCAGAGACTGGAGCTGTGTCCTCCAGGGCCTCCGTCTCCCTGCAGACGCAC
-+
-67777788888888888888888877776555443222100//..---,,++++***))))((('(&&#""$##"#
- at 30BB2AAXX080903:3:40:1705:697#0
-ACGGACACCCTGCGTGCACCCACATCGCCAGTGGGAGGGTATACAGCACAGCCACTGTGGAAGACGGCTGCAGGCA
-+
-677777888888888888888888777765534432221/0//..----,++++*)))))))((((&&%%#"$"#"
- at 30BB2AAXX080903:3:57:105:1283#0
-ATACATAAGTCTGATGAAGAATATGTGTTTTAGCTGAGCGTGGTGGTGACGCACACCTCTAGTCTCAGCTCTCACA
-+
-67777788888888888888888877776555443222100//..---,,+++******)(((((('&&"$"$###
- at 30BB2AAXX080903:3:35:934:475#0
-GGCAGCACTTGCTTGTGTTCCAGCTACTTGGGAGGCTGAGGTGGGAGGATGGCCTGGGCCTGGGAGANCTCGGCAN
-+
-67777788888888888888888877776555443222200-/..---,,++******())))((('"$#$##$#"
- at 30BB2AAXX080903:3:55:1342:1356#0
-TCAATCTTTCCAATCTTTTAGGGAAAAAATCAGCTTTTGATATTGTTAAGTTTCTCCATTTTTCTCATGCTTTCAT
-+
-67777788888888888888888877776555443222110//..---,,++++*+**)))(()'('&%#&$%$##
- at 30BB2AAXX080903:3:1:611:1148#0
-CACATCACCACCACTCAAAGTCCATGGTTGACACGAGGGCGCACTCTTGGTGCTGCACGTTAGATCGANCANCGCC
-+
-67777788888888888888188897786579113/112./-+.,,*++,&+*))#(()#'#(#'#'""##"#""#
- at 30BB2AAXX080903:3:37:44:723#0
-TCTCACCCCGGCCTCCTGAATAGTTGGGACCTCAGGTGCACACCATTACACCCAGGTAACAGATCGGCGTCCTGTN
-+
-67777788888888888888888677776555443222100///.---,,+*++***)*))()((('%""#####"
- at 30BB2AAXX080903:3:56:732:1223#0
-TCCTGACCTCGTGATCCACCTGCCTCTGCCTCCCAAAGTGCTGGGATCACAGGCGTGAGCCACTGCATCACGTGCT
-+
-6777778888888888888888887777655544322210///..---,,+++***)*))'(()(('"$"%%$$"#
- at 30BB2AAXX080903:3:56:1532:1930#0
-GACCATGCAGGCTTGTTACTGCCCAGAGTTGAGCACCTGGGAAGCAACACCAGCGCCCACCGTCTAACACCTCCGC
-+
-67777788888888888888888877776555413//2100//.---+,++,+**)&))'()('(''$$%%$&#"$
- at 30BB2AAXX080903:3:41:918:1630#0
-GGCTGATGCAAGAGGACTGCTTGAGCCCAGGAGTTCGAAGCCGAAGTGCAGACGCATTCAAGCTGGTCGCGCAGCT
-+
-6777778888888888888888887777655/4432200/1-/-----+-,,)****))*'('(((%&$$%#%#$"
- at 30BB2AAXX080903:3:55:674:380#0
-ATAGGGCCTCGCTCTGTTGCCCAGGCTGCAGTGCAGGTGCGCTCCCGGCTCGACCAGCTTGCGTGTTGTCTCTGCG
-+
-2717,7232488)&&8)388%$08671&)+3'0,+0.*/..*-,-$*++&()#')#($&###&####"$""#""#"
- at 30BB2AAXX080903:3:42:22:1324#0
-CGCACCTGCACTCCAGCCTGGGCAACAGAGCGAGGCCCTGTCTCAAAGGAAAAAAAAAAAGCTTTGGCTCCTCACC
-+
-67777788888888888888888877776555443212100//.,).,,,*+++****))))(((('""$#"####
- at 30BB2AAXX080903:3:57:848:1966#0
-GGGAGGCTGAGGCAGGAGAATAGCATGAACCTGGGAAGGTGGAGCTTGCGGTGAGCCGAGATAGCACCACTCACCC
-+
-677777888888888888888888777765554432221.0//.-.--+,+++**'()))))((&(&''%##"$##
- at 30BB2AAXX080903:3:46:1634:372#0
-TGCCGGGCCTCAGCTGCCTCCCCGCGGGGCAGGGCTCGGCAGCCTGCCAGATCGGGAGGGCGGGTCCTCAGCACTA
-+
-67777788888888888888888877386401441/0-10,.,,%,*+&+&&)**#%)#(#'(##&#$$""$"$"#
- at 30BB2AAXX080903:3:3:193:405#0
-GAGCAGCGATTGGTGCATTTACAAACCTTGAGCTAGACACAAGGTGATGATTGGTGCGTTTACAAACCNACACNAC
-+
-677777888888888888888)8877772505&33220120//.'-$,-,+++*'+(*()((#((&#$"$"$#"#"
- at 30BB2AAXX080903:3:38:1659:1935#0
-TGCTGAGACATGGGGCTGTGGTGAATGGTGCTGCCGAGACATGGTGGCTGGGGGGGATGGGGGTGCTATACTGTGN
-+
-677770888888888888888+88777765-5443202010//.---++,&++%*)))))'('((&#%##"$###"
- at 30BB2AAXX080903:3:39:568:39#0
-GGTGCTGCTGAGACATGGTGGCTGTGGTGAACGGTGCTGAGACATGGTGGCTGGGGGGGGGGGGGCGTGGGGGGTA
-+
-677777888888888888888888777765554422221/0/0-.--',,*)+)**()))%((((#&"&#&$##$%
- at 30BB2AAXX080903:3:40:1067:1195#0
-ATGTCTCAGCACCGTTCACCACAGCCACCATGTCTCAGCAGCACCGTTCACCACAGCCACCATGTCTCGCCCCACT
-+
-67777788888888888888888877776555443222100//---,-,,,*****)))())((((''""#$$"#"
- at 30BB2AAXX080903:3:58:1528:1758#0
-ACATGGTGGCTGTGGTGAACGGTGCCAAGACATGGTGGCTGTGGGGGGGGGGGGTGGTGGGACATGGCAAAAAACN
-+
-6777778888888888888/888877776512443222+00$..'--+&,,**)#(()&()##''%($$"%%$%$"
- at 30BB2AAXX080903:3:58:510:184#0
-ACGGTGCTGCTGAGACATGGTGGCTGTGGTGAACGGTGCCGAGACATGGTGGCTGGGGGGGGAGGGGGGCGATNNA
-+
-677747888888888888888888771763554432,2100-/.-+,--+++***&)))))(#((%'$%##%#""#
- at 30BB2AAXX080903:3:43:1231:1156#0
-CGGCACCGTTCACCACAGCCACCATGTCTCAGCAGCACCGTCCACCACAGCCACCATGTAGATCGGAACGCGGACG
-+
-677777888888888888887888/7176555243+.210./...-,),,,+*+*())()))''(('%"$"""##"
- at 30BB2AAXX080903:3:43:755:369#0
-TCAGCAGCACCGTCCACCACAGCCACCATGTCTCGGCAGCACCGCCCACCACAGCCACCACGTCTCGGCACCACCC
-+
-677777888888888888888888777765354422211/...-%--+,,-+)*))(()(#'&(%'#'%#&$"#"#
- at 30BB2AAXX080903:3:45:1601:1697#0
-CAGCCACCATGTCTCGGCAGCACCGTCCACCACAGCCACCATGTCTCGGCACCGTTCACCACAGCCACCATGTCCG
-+
-67777788888888888888888877776555443.1210.0/-----,--++*)+)())(((((''$$""$"""$
- at 30BB2AAXX080903:3:2:1403:1054#0
-CACCATGTCTCGGCAGCACCGTCCACCACAGCCACCATGTCTCGGCACCGTTCACCACAGAAGATCGCNTGACACA
-+
-677777888888888888888888-77765554432..1/0./.-'(,*-**'')))))(#'((#&'"""&"##"#
- at 30BB2AAXX080903:3:50:732:1756#0
-CACCATGTCTCGGCACCATTCACCACAGCCACCATGTCTCGGCACCGTCCACCACAGCCACCATGTCGCGGCCCCC
-+
-67777788888888888888888877776555343222100//.,----,+++****))(((((('#"%"#"$###
- at 30BB2AAXX080903:3:49:121:2021#0
-ACCGTTCACCACAGCCACCATGTCTCAGCAGCACCGTCCACCACAGCCACCATGTCTCGGCAGCACCCGCAACACA
-+
-6777778888888888888888887777655540.21./2,./+-.,*-+*,***)))))'(''(##$#%#"###"
- at 30BB2AAXX080903:3:39:820:979#0
-CCATGTCTCGGCAGCACCGTTCACCACAGCCACCATGTCTCAGCACCATCCACCACGGCCACCATGTCTCAGCTAC
-+
-67777788888888888888888857776555442121.0/1/..--+,*+++*+*(*))()((''%$#"###"##
- at 30BB2AAXX080903:3:45:506:229#0
-GGACGGTGCTGCTGAGACATGGTGGCCGTGGTGGATGGTGCTGAGACATGGTGGCTGGGGGGGAAGGGTGCGCACA
-+
-67777788888888888888888877775551443222+00-/,..-,,,+*+*&*)'))%)('#''&"%#"#"#"
- at 30BB2AAXX080903:3:38:1077:875#0
-TGTGGTGAACGGTGCCGAGACATGGTGGCTGTGGTGAACGGGGCTGCCGAGACATGGGGGGTGGGGGCTGTTCTAC
-+
-6777778888888888888888887.77655244-230.00)/.,.,,-,,+*()**())%#)'(('"$""""""$
- at 30BB2AAXX080903:3:41:509:358#0
-TGTGGTGAACGGTGCCGAGACATGGTGGCTGTGGTGGACGGTGCTGCCGAGACATGGTGGCCGGGGGGGGGGCAAT
-+
-6777778888888888888888887/7765514412'2./0-//,-,,-+,,+*(**&*)##)'((("%"#"""#"
- at 30BB2AAXX080903:3:34:1765:1123#0
-TGCCGAGACATGGTGGCTGTGGTGGACGGTGCTGCTGAGACATGGTGGCCGGGGGGGGTGGGGGGGGNCACTAANN
-+
-6777778888888888888888787727635044322110&+...+,-&(+'++***(#))'(##''"%#%###""
- at 30BB2AAXX080903:3:58:136:1200#0
-GGACGGTGCTGCCGAGACATGGTGGCTGTGGTGGACGGGGCTGCTGAGACATGGGGGGTGGGGGGGGGTGTCTNNC
-+
-6777778888888888888888887777455+44+.22&0.-/),-"-,*)*++&))(#)(()((('&"%"$"""#
- at 30BB2AAXX080903:3:41:1452:1401#0
-GGTGCTGCCGAGACATGGTGGCTGTGGTGGACGGTGCTGCCGAGACATGGAGGCTGGGGGGGGCGGGGTCTNGACA
-+
-671777888888888888888888.77-650044'2)+1.0.+.,-,#-,$++$#)'))'(((#(('%$#""""""
- at 30BB2AAXX080903:3:60:1542:1754#0
-ACCGTCCACCACAGCCACCATGTCTCGGCAGCACCGTTCACCACAGCCACCATGTCTCAGGACCAACAAACACANN
-+
-67777788888888/88438888/7777455.1,+5/1//.-/+,.+#&$(%)()'(&(##(#'%%&$$%&&$%""
- at 30BB2AAXX080903:3:36:266:1657#0
-GTGGACGGTGCTGCTGAGACATGGTGGCCGTGGTGGATGGTGCTGAGGCGTGGTGGCTGTGGGGGGACACATCTTN
-+
-6777/7888888888888887888177105/54&32/110&/'+.'-(%(+++$*+%&)#()&('%%$#%#$%#""
- at 30BB2AAXX080903:3:44:1142:1341#0
-TGTGGTGAACAATGCTGCTGCAGACATGGTGGCTGGGGGGAACGGGGCCGGGACATGGGGGGGGGGGGGGCTAGCG
-+
-67777788888888888888888877776555443%2200,/'..,-*,,&)+')%)*&))'&('('&$"$$"###
- at 30BB2AAXX080903:3:58:1404:183#0
-CTCGGCACCGTTCACCACAGCCACCATGTCTGCAGCAGCATTGTTCACCACAGATGAATGGATAAACAAAATCNNA
-+
-677777888888888888888888777765554432221/0//..---,,+)++**)*))))()(('%%%##%""$
- at 30BB2AAXX080903:3:51:1451:282#0
-ACTAACTGACCCCCCATTTCACGGCCATAACTACAGCGTCACTTTCCATAACTTCCTCCTGATAAGACACTCTGGC
-+
-67777788888888888888888877776555443222100//..---,,+,+***)))))(((''&&"""$""$"
- at 30BB2AAXX080903:3:8:607:1304#0
-TTATGGAAAGTGACGCTGTAGTTATGGCCGTGAAATGGGGGGGCAGTTAGGGCCTGGCAGCGAGCCANCACTCANN
-+
-677777888888888888888888977765452/1012100/#+,-+,+,$+*)(*)'(('(#'#'&"$%##$$""
- at 30BB2AAXX080903:3:35:1505:1904#0
-CCGGATTTCATGTGTTTTCTAGCTATTGGGAGCCTGTCTTTCCCTGGCGCTGGGTGCAACCAGTTCTNGTCGCACN
-+
-67777788888888888888888877776555443210100-/.-.--,,+,+*#+%(('''('(&'""$#"###"
- at 30BB2AAXX080903:3:40:769:561#0
-ACACGCCGCCATTTTGCCCCTCAGTGCACACGCTTGAGCCAACTCGCCCAGTTCCTGAGATCGTATCAGGGTCTCT
-+
-677777888838888888&883486777455530*22210--+)-,-,-&+%*)*))()(('('(#%"%#$""##"
- at 30BB2AAXX080903:3:47:1683:2020#0
-TCCCTGGAGGGAGGGAGCATGCCCGGTGTGTTCACTGGAGGGAGGGAGGATGCCCCGTGTATTCAGGCATGCGTCA
-+
-6777778888888888888888)87777152544/220(00/,..-*,%)**#$##%#'###'####$"""$###"
- at 30BB2AAXX080903:3:55:287:410#0
-GCACCCCTTCTCCCCTGATCCTTCTTCAGGGTGGGCTGTCCACCCATGCAGCATCTTGCGAGAGATCGGCGGCGGT
-+
-67777788888888888888888,7777655/443222&00//+..,-,,+*(***'))'(((((''&"%&&""""
- at 30BB2AAXX080903:3:33:1562:607#0
-TGAGATGGAGTCTGTCTCTGTCGCCCAGGCTGAAGTCCAGTGGCACAATCTCCGCTCACTGCACGCTNGCCACTNN
-+
-67777788848888888888838877876.55'430011/)./--+-,++*&%*'(((&((#'#(%#""$#"#"""
- at 30BB2AAXX080903:3:53:173:884#0
-GCACTTGGGAGGGAGCATGCACAGAGTTTACTGGAGTTGTGCGCACGCTCCCTCGAGGCCTTTTTTTTCTTTTTTT
-+
-677777888088888888888888774763554422011/0//-,.-,+,+*)**())((('''(&'$$$$&%$$$
- at 30BB2AAXX080903:3:3:1044:1064#0
-CCCCCATTGTGCGGCGCGCGGAGGAGCCGCCAGCGCCTGGGCCCGCGTCCTCGTCGCCGCCAGATCGTNAGCCNCA
-+
-677777888888888888088+883784652,411.1-./1...,+,)++*)*$&(#()'%%'##%'""""$#"##
- at 30BB2AAXX080903:3:60:500:161#0
-CATGCGCCCGCGGACGTGCAGCTTCTGTGTCGGTCCCATTAAGAGGAACCCGGCCCAGATCGGAAGAGCCGCTCNN
-+
-6777778888888888888.8888777665554)222')/-.,,,-,,&+$*+)*#(''#(')#'(#%&#$$"#""
- at 30BB2AAXX080903:3:56:467:1684#0
-GCATGATCGTGGCTCACTGCAGCCTGGACCTCCTAGGCTCAAGCGATCCTCCACCTCAGCCTCCAGAGTCTCTCAC
-+
-67777788888888888888888877776555443222100./..---,,,+++*+**)))))(''''$"#$#$##
- at 30BB2AAXX080903:3:56:89:2027#0
-ACACACCCGTGGTCCCAGCTACTCTGGAGGCTGAGGTGGAGGATCGCTTGAGCCTAGGAGGTCCAGGCTGCTCGCC
-+
-677777888888888888888888777765544/32/2100/,.,-,,,,*+*)*%))((('&#&&%"$%#"####
- at 30BB2AAXX080903:3:8:1605:568#0
-CTGTGGCCCTGGGTGACCGTGTCCTTATGCTGGAGCTTGGTCCACAAGTGTCCCCGCCCCTAGATCGNCCTGCGNN
-+
-677777888888888888888888777765554431221000...-+-+,+***)*(*)((((('''""$$"#"""
- at 30BB2AAXX080903:3:35:1258:1134#0
-ACGCCGGCAGGGGCTCTGCTCCCAGAGATCAGGTGGGTGCTGGTCTCAGAGCACAGTTCAGCAGGGGNTCTATCAN
-+
-677777888888888888888884777864554-322.10///.--,,+,,*+$')#'((''(''#'"$$""#$#"
- at 30BB2AAXX080903:3:54:609:1219#0
-GTTCTCGGGAATGTGCACCCCGTGCGGTTACTCAGGAGGGAGCCTCCAGGGACATCTCGCATGGCCTAGACTCTCT
-+
-67777788888888888888888877775555443232100/...---,-+,+**+)))))))((''$%"$$$"$$
- at 30BB2AAXX080903:3:45:1228:510#0
-GCGGTGGCTCACGCCTGGAATCCCAGCACTCTTGAGAGGCCAAGGCGGGCGGAGCCCGTGGAGTCCGGCGNCTGCG
-+
-677777883818'88&88888888/77/6-5%4(103/11/./--+---+,*%)#'##)&%((##%%%##"#"###
- at 30BB2AAXX080903:3:37:502:284#0
-GACGCAACAGAAACCGAACCCCACCAAGGCCCCCAAAACCGAGCCCCACCGAGGCCCCCAAGATCGGACGTCGCCN
-+
-6777778888888888888888887777655542322001/../-.--,++*+)**)*)((((&((%%"""""##"
- at 30BB2AAXX080903:3:41:369:530#0
-TTGGGGGCCTTGGTGGGGTTCGGTTTCTGTTGCGTCACCTCTATGCGGTCCCTGGGGCTGGCGTGCCACGCGCNGG
-+
-67777788888888888888888877776555443222200//..---,,,,+***)*)))((('''%"%#%$""#
- at 30BB2AAXX080903:3:3:1454:1726#0
-GGGGGTAAAGGGCACCCAGCTGCAGTTCTGAGCCTCCCTCGTCCACGCACGTCCTGGTGTAGCTATGCNCATCNTA
-+
-6777778888888888888888887,$76-55441210(/00/.,.,,+,*)+**))#)'(((((&'"""#"%""#
- at 30BB2AAXX080903:3:49:1063:534#0
-GCTGCCTGGCTGGGCAGGAGGCTGGGGGGCCTCTGTCCCGCCATGGCTTCCCCGGGACCGCACCCCCCGCATACAC
-+
-677777888888888888888888777;655043321110///,--,++,+*+))*'())(''('#&$""""$""%
- at 30BB2AAXX080903:3:41:1725:888#0
-ACCTGCAGGCGGGCTCAGGGACCTGGCACTGGGGAGACGAGGGTCAGCGGGGGCCCCAGCCCGAGCTCCNAGCGTT
-+
-677777888888888888888.2'77719'3544/31-1.1/.&+$+(,,$$*$#&'#%#&#&#'%#%$"%#"""#
- at 30BB2AAXX080903:3:45:1667:1542#0
-GGCGGGGCTGCCTCCCATCAGCTCCGAAGATCCCCCAGGTCCTGAGAACCCCTGCTCCGGGTCTCCTGGGGGCCGG
-+
-6777778888888888888888887707665544322212//..--,,,,++*+*()$)(('('(''&"#""#"#"
- at 30BB2AAXX080903:3:51:1686:695#0
-TGAGCTTCGAGGTGCCGTAGCTTCACTTCCGAGGGAGCCGGCCTCACAGGCCGAGGCCAGGGGGCCTNCACACAAC
-+
-67777788888888888888888877776555443222100//..---,,++++**)))))((((''"$&%$##$$
- at 30BB2AAXX080903:3:46:1033:1163#0
-CACAGGCCCCACCTCCCCACGGGCGAGGGGCACCCCTTGATTCAGGAGGTAGAATGTGGCAACAGAGCGATCTCAC
-+
-67777788888888888888888877776555243222100///.---,,++****))*))(('(((""#"#"#"#
- at 30BB2AAXX080903:3:43:1533:1444#0
-AGGAGAGCAACTGCGGAGAAGGCTGTGCCCTGAGGCGGCAGAGCTGAGGCCAACAGCAACCAGATCGGACAAGGCN
-+
-67777788888888888888888877776555443222210./,'-,-,+,*+*)*())'((((#&(&$#""""""
- at 30BB2AAXX080903:3:33:85:362#0
-AAGGTGGGGCTCTCCAGATGGGGCTGTAAACGCCGCGTCCTGTGTGCTCTGCCTGGGATGGCGCGCCNCACTATNN
-+
-6777178.8888888888888888777765554&3222101%-.,-**-,,++'**)*))))&(('&"%#$###""
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/illumina-as-standard.bam b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/illumina-as-standard.bam
deleted file mode 100644
index a98d864..0000000
Binary files a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/illumina-as-standard.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/s_1_sequence.txt b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/s_1_sequence.txt
deleted file mode 100644
index 8b96bba..0000000
--- a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/s_1_sequence.txt
+++ /dev/null
@@ -1,40 +0,0 @@
- at SL-XAP:1:1:0:1171#0/1
-NTGAGGAGGAATCAGATGAAGTGGAGGATAACGACAATGACTCTGAAATGGAGAGGCCTGTAAATAGAGGAGGCAG
-+SL-XAP:1:1:0:1171#0/1
-DNUYUPUNUXXYWYSYYSVYVRNSWUUYYYYVTSYYXWPWYVYVYPSRTRNPLTQLUYSFSVXXBBBBBBBBBBBB
- at SL-XAP:1:1:0:1477#0/1
-NCACTCGTTTATCCATCCTCTCGTTACTGGGTCATGTCATAAGACTGCAGCCATCTTGGAATCATAAGCTCTATCA
-+SL-XAP:1:1:0:1477#0/1
-DMWYUSUWVWYUQRSUSUWSWYWVWSYYVVVWNRTWROQUWBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:0:1733#0/1
-NAGAACGAGCAGTTTGGAAGTTGCTACCAATTTAATACTCAGACTGCTCTTTCTTGTAAAGAAGCTTATGTTTCAT
-+SL-XAP:1:1:0:1733#0/1
-DOTWZVRUNUVQV[VQNVRNUTKTZZZXVVY[YTQVXXZZRJQODEOYYYYZBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:0:1384#0/1
-NAAATTTATACTTTAAATTACCTTCACTGTTCCATCAAATGACCAAGAAAGCAGTCTTGAATTTTTCAATATTCTA
-+SL-XAP:1:1:0:1384#0/1
-DP[[[[[[Z[[[[[YZZ[[[Z[[[Z[[XRX[[ZZ[ZXXUVOV[[XTPWUUMXXIXZYTOTQVYYYY[WBBBBBBBB
- at SL-XAP:1:1:0:528#0/1
-NAGAAATAATATATATCCTATTTCTTAGTAAGCCACCTAGAACAGCAAGAGTGGCTAAAATGAGATGGTGTTCCTT
-+SL-XAP:1:1:0:528#0/1
-DOUVXXXXYZ[[[YXY[[YXY[[[[YSLVXURXZZ[[[TBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:1:408#0/1
-NGCCACTACGCCATGAAGATCCTCAACAAGCAGAAGGTGGTGAATATGAAGCATGTCTAGCACATACTTAACTAGA
-+SL-XAP:1:1:1:408#0/1
-DMWYVYWUUQUYYTLSWSVYYYYWVWYWVPBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:2:1424#0/1
-NTCAAGTTTCATTACTTTCTTAATTTATTTCCTAAATAGGCTGCCATGATGTCTTATGATCTTAAGAATTAACATT
-+SL-XAP:1:1:2:1424#0/1
-DO[[VLV[[[[[[[[[[[[[[[[[[[[[[[Y[[ZZZZBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:2:1419#0/1
-NGATCATAGGCAAGAGCCACCACATCGACCTAGCACTGCTTTNTAACCTGTGCTCTGACCTGCCCCTCCCAAGCAT
-+SL-XAP:1:1:2:1419#0/1
-DMWWXWXWURWWURWUUWWWWWXVWSKSWWWWUWWWUKSWXNDPUWWWNEMPSWWUOPVWTOTXWVWBBBBBBBBB
- at SL-XAP:1:1:2:1872#0/1
-NTATGTACGTAGTCTAGGCCATATGTGTTGGAGATTGAGACTAGTAGGGCTAGTCCCACCGCTGCTTCGCAGGCGG
-+SL-XAP:1:1:2:1872#0/1
-DPWWUWXWRWTPUWWSPPTWUWVWSTNUUONUPTWBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
- at SL-XAP:1:1:2:472#0/1
-NATGACTTGTGGGACATCACAGTAGAAGTTGTCCAGTTCATTGGGCCCACAGAAAGGCAGCTGTATGACTAGTATG
-+SL-XAP:1:1:2:472#0/1
-DNWVWYYWRVTSSVWVWYYYYVWUUUVSVTRTYWTRVYWVWUNFLTYWBBBBBBBBBBBBBBBBBBBBBBBBBBBB
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa-as-standard.bam b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa-as-standard.bam
deleted file mode 100644
index 7235dfa..0000000
Binary files a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa-as-standard.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa_full_range_as_solexa.fastq b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa_full_range_as_solexa.fastq
deleted file mode 100644
index 2154981..0000000
--- a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/solexa_full_range_as_solexa.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at FAKE0003 Original version has Solexa scores from 62 to -5 inclusive (in that order)
-ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
-+
-;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- at FAKE0004 Original version has Solexa scores from -5 to 62 inclusive (in that order)
-TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCA
-+
-~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;
diff --git a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/unmapped.sam b/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/unmapped.sam
deleted file mode 100644
index b47ad2b..0000000
--- a/src/test/resources/htsjdk/samtools/util/QualityEncodingDetectorTest/unmapped.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at RG	ID:0	SM:Hi,Mom!	PL:ILLUMINA
-both_reads_align_clip_adapter	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_align_clip_adapter	141	*	0	0	*	*	0	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-both_reads_align_clip_marked	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0	XT:i:97
-both_reads_align_clip_marked	141	*	0	0	*	*	0	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0	XT:i:97
-both_reads_present_only_first_aligns	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-both_reads_present_only_first_aligns	141	*	0	0	*	*	0	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-neither_read_aligns_or_present	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-neither_read_aligns_or_present	141	*	0	0	*	*	0	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
-read_2_too_many_gaps	77	*	0	0	*	*	0	0	CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN	)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&	RG:Z:0
-read_2_too_many_gaps	141	*	0	0	*	*	0	0	NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA	&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1	RG:Z:0
diff --git a/src/test/resources/htsjdk/samtools/util/defective_bgzf.bam b/src/test/resources/htsjdk/samtools/util/defective_bgzf.bam
deleted file mode 100644
index 749b8e7..0000000
Binary files a/src/test/resources/htsjdk/samtools/util/defective_bgzf.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/util/no_bgzf_terminator.bam b/src/test/resources/htsjdk/samtools/util/no_bgzf_terminator.bam
deleted file mode 100644
index 0d9cbf7..0000000
Binary files a/src/test/resources/htsjdk/samtools/util/no_bgzf_terminator.bam and /dev/null differ
diff --git a/src/test/resources/htsjdk/samtools/util/whitespace_text_file.txt b/src/test/resources/htsjdk/samtools/util/whitespace_text_file.txt
deleted file mode 100644
index 21c7fd8..0000000
--- a/src/test/resources/htsjdk/samtools/util/whitespace_text_file.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Now			is       the time
-for all good				men			   
-to	  come	to the
-#This is a comment
-aid of their country.
-15.0   23  55			67.88888
diff --git a/src/test/resources/htsjdk/tribble/Tb.vcf.idx b/src/test/resources/htsjdk/tribble/Tb.vcf.idx
deleted file mode 100644
index daf3430..0000000
Binary files a/src/test/resources/htsjdk/tribble/Tb.vcf.idx and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/basicDbSNP.dbsnp b/src/test/resources/htsjdk/tribble/basicDbSNP.dbsnp
deleted file mode 100644
index fd1fc5e..0000000
--- a/src/test/resources/htsjdk/tribble/basicDbSNP.dbsnp
+++ /dev/null
@@ -1,43 +0,0 @@
-#bin	chrom	chromStart	chromEnd	name	score	strand	refNCBI	refUCSC	observed	molType	class	valid	avHet	avHetSE	func	locType	weight	
-585	1	259	260	rs72477211	0	+	C	C	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	433	433	rs56289060	0	+	-	-	-/C	genomic	insertion	unknown	0	0	unknown	between	1	
-585	1	491	492	rs55998931	0	+	C	C	C/T	genomic	single	unknown	0	0	unknown	exact	1
-585	1	518	519	rs62636508	0	+	G	G	C/G	genomic	single	unknown	0	0	unknown	exact	1
-585	1	582	583	rs58108140	0	+	G	G	A/G	genomic	single	unknown	0	0	unknown	exact	1
-585	1	690	691	rs10218492	0	+	G	G	A/G	genomic	single	by-cluster	0	0	unknown	exact	1
-585	1	766	767	rs10218493	0	+	G	G	A/G	genomic	single	by-cluster	0	0	unknown	exact	1
-585	1	789	790	rs10218527	0	+	A	A	A/G	genomic	single	by-cluster	0	0	unknown	exact	1
-585	1	800	801	rs28853987	0	+	G	G	A/G	genomic	single	unknown	0	0	unknown	exact	1
-585	1	876	877	rs28484712	0	+	G	G	A/G	genomic	single	unknown	0	0	unknown	exact	1
-585	1	884	885	rs28775022	0	+	G	G	A/G	genomic	single	unknown	0	0	unknown	exact	1
-585	1	884	885	rs62636509	0	+	G	G	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	943	944	rs10218495	0	+	G	G	G/T	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1016	1017	rs62635278	0	+	A	A	A/C	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1029	1030	rs62635279	0	+	C	C	A/C	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1271	1272	rs2441671	0	-	A	A	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1271	1272	rs9803797	0	+	A	A	A/G	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1319	1320	rs2758124	0	-	C	C	C/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1332	1333	rs3950659	0	-	G	G	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1370	1371	rs3877545	0	-	A	A	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1404	1405	rs2758123	0	-	A	A	A/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1427	1428	rs2691333	0	-	G	G	A/C	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1468	1469	rs62162368	0	-	A	A	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1539	1540	rs4030196	0	-	G	G	C/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1554	1555	rs2363296	0	-	A	A	G/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1591	1592	rs4592209	0	+	T	T	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1643	1644	rs61427470	0	-	C	C	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1643	1644	rs62162367	0	-	C	C	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1649	1650	rs57905273	0	-	T	T	-/A	genomic	deletion	unknown	0	0	unknown	exact	3
-585	1	1665	1666	rs62162366	0	-	T	T	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1730	1731	rs11510383	0	-	C	C	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1757	1758	rs4030194	0	-	G	G	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1783	1784	rs57442816	0	-	T	T	A/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1808	1809	rs4849250	0	-	C	C	A/G	genomic	single	by-2hit-2allele	0	0	unknown	exact	3
-585	1	1809	1810	rs7564627	0	-	G	G	C/T	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1822	1823	rs71234145	0	+	C	C	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1823	1824	rs2981848	0	-	G	G	C/T	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1825	1826	rs2462500	0	-	G	G	A/C	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1832	1833	rs7357973	0	-	A	A	C/T	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1863	1864	rs62028714	0	+	C	C	C/G	genomic	single	unknown	0	0	unknown	exact	3
-585	1	1911	1912	rs7357889	0	-	C	C	C/G	genomic	single	by-cluster	0	0	unknown	exact	3
-585	1	1936	1937	rs11510263	0	-	T	T	A/G	genomic	single	unknown	0	0	unknown	exact	3
diff --git a/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed b/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed
deleted file mode 100644
index 36959bb..0000000
--- a/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed
+++ /dev/null
@@ -1,35 +0,0 @@
-#comment
-1	25592413	25657872
-1	35101420	35111976
-1	110226277	110241477
-1	152555536	152587611
-2	34695828	34736559
-3	65188868	65214748
-3	162512133	162626335
-3	192875328	192885405
-4	10210770	10234599
-4	70130411	70231411
-4	116166903	116177179
-5	104432112	104503671
-6	55825956	55846709
-6	67008726	67048918
-6	78967153	79036479
-6	103737463	103762885
-7	141767909	141785939
-8	24972431	24990943
-8	39232073	39387227
-8	144700483	144714692
-9	23362800	23377775
-9	44242964	44280939
-10	53203675	53214217
-10	71281002	71291092
-11	51341924	51362954
-11	55366389	55376449
-11	55388020	55431449
-11	55445865	55456751
-14	73996607	74025282
-16	19945549	19967579
-19	20595809	20717976
-19	52133806	52150233
-20	1560965		1594435
-20	52647063	52658002
diff --git a/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed b/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed
deleted file mode 100644
index ea34a83..0000000
--- a/src/test/resources/htsjdk/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed
+++ /dev/null
@@ -1,36 +0,0 @@
-##########
-1	25592413	25657872
-1	35101420	35111976
-1	110226277	110241477
-1	152555536	152587611
-2	34695828	34736559
-3	65188868	65214748
-3	162512133	162626335
-3	192875328	192885405
-4	10210770	10234599
-4	70130411	70231411
-4	116166903	116177179
-5	104432112	104503671
-6	55825956	55846709
-6	67008726	67048918
-6	78967153	79036479
-6	103737463	103762885
-#########
-7	141767909	141785939
-8	24972431	24990943
-8	39232073	39387227
-8	144700483	144714692
-9	23362800	23377775
-9	44242964	44280939
-10	53203675	53214217
-10	71281002	71291092
-11	51341924	51362954
-11	55366389	55376449
-11	55388020	55431449
-11	55445865	55456751
-14	73996607	74025282
-16	19945549	19967579
-19	20595809	20717976
-19	52133806	52150233
-20	1560965	1594435
-20	52647063	52658002
diff --git a/src/test/resources/htsjdk/tribble/bed/Unigene.sample.bed b/src/test/resources/htsjdk/tribble/bed/Unigene.sample.bed
deleted file mode 100644
index 1628199..0000000
--- a/src/test/resources/htsjdk/tribble/bed/Unigene.sample.bed
+++ /dev/null
@@ -1,72 +0,0 @@
-chr2	1	200000000	LONG_FEATURE	0	+	178707289	178707561	0	3	85,177,8,	0,87,264,
-chr2	178707289	178707561	Hs.666133	0	+	178707289	178707561	0	3	85,177,8,	0,87,264,
-chr2	178709699	178711955	Hs.377257	0	+	178709699	178711955	0	1	2256,	0,
-chr2	178711404	178712057	Hs.688767	0	-	178711404	178712057	0	1	653,	0,
-chr2	178777793	178778272	Hs.541631	0	-	178777793	178778272	0	1	479,	0,
-chr2	178908612	178916376	Hs.318775	0	+	178908612	178916376	0	4	2644,3067,464,1588,	0,2645,5712,6176,
-chr2	178969501	178972156	Hs.593061	0	+	178969501	178972156	0	2	1262,1393,	0,1262,
-chr2	178969902	178971077	Hs.712020	0	-	178969902	178971077	0	1	1175,	0,
-chr2	178973806	178974450	Hs.634282	0	+	178973806	178974450	0	1	644,	0,
-chr2	178974749	178975493	Hs.323349	0	+	178974749	178975493	0	4	337,389,4,13,	0,337,726,731,
-chr2	179004517	179006503	Hs.632540	0	-	179004517	179006503	0	1	1986,	0,
-chr2	179004764	179005050	Hs.625283	0	+	179004764	179005050	0	2	9,276,	0,10,
-chr2	179007083	179007837	Hs.684082	0	+	179007083	179007837	0	5	28,30,20,226,79,	0,72,117,449,675,
-chr2	179008250	179008984	Hs.685223	0	+	179008250	179008984	0	1	734,	0,
-chr2	179008373	179013032	Hs.570274	0	+	179008373	179013032	0	3	2710,583,1365,	0,2711,3294,
-chr2	179011106	179011819	Hs.662660	0	+	179011106	179011819	0	8	556,6,22,98,12,6,6,5,	0,558,564,586,684,696,702,708,
-chr2	179012189	179013184	Hs.658781	0	-	179012189	179013184	0	7	5,9,22,99,844,4,6,	0,6,16,39,139,984,989,
-chr2	179018046	179018564	Hs.633180	0	-	179018046	179018564	0	1	518,	0,
-chr2	179020446	179020899	Hs.605693	0	-	179020446	179020899	0	1	453,	0,
-chr2	179026223	179034260	Hs.87734	0	+	179026223	179034260	0	5	1276,142,118,99,306,	0,2759,5259,7097,7731,
-chr2	179033863	179034261	Hs.607684	0	-	179033863	179034261	0	1	398,	0,
-chr2	179036643	179037341	Hs.645700	0	+	179036643	179037341	0	2	678,19,	0,679,
-chr2	179037911	179051526	Hs.410378	0	-	179037911	179051526	0	5	813,179,134,152,275,	0,814,4713,12123,13340,
-chr2	179052287	179052856	Hs.560940	0	-	179052287	179052856	0	2	291,277,	0,292,
-chr2	179053444	179078029	Hs.41086	0	+	179053444	179078029	0	8	438,117,156,137,165,44,116,1297,	0,5169,10187,13381,15024,18739,20589,23288,
-chr2	179053611	179058730	Hs.560270	0	+	179053611	179058730	0	7	105,37,4,23,99,9,107,	0,105,144,148,172,5002,5012,
-chr2	179078066	179078770	Hs.600801	0	-	179078066	179078770	0	2	350,8,	0,696,
-chr2	179078529	179079064	Hs.541630	0	+	179078529	179079064	0	1	535,	0,
-chr2	179087076	179087882	Hs.560768	0	+	179087076	179087882	0	11	586,90,17,10,22,7,14,23,8,13,10,	0,586,680,697,708,730,738,752,775,783,796,
-chr2	179088297	179088941	Hs.612551	0	+	179088297	179088941	0	7	383,4,214,16,6,5,12,	0,384,389,603,620,626,632,
-chr2	179088778	179089441	Hs.712123	0	-	179088778	179089441	0	8	7,6,8,7,9,12,17,588,	0,9,17,26,34,44,57,75,
-chr2	179088997	179089435	Hs.470769	0	-	179088997	179089435	0	1	438,	0,
-chr2	179095799	179178377	Hs.714450	0	+	179095799	179178377	0	17	34,185,97,331,1193,63,140,135,191,398,421,176,86,118,157,192,675,	0,625,12905,14534,15871,17280,19395,59745,60164,60697,61746,68312,74768,75728,76766,77648,81903,
-chr2	179098961	179380395	Hs.134602	0	-	179098961	179380395	0	314	1319,303,154,692,157,5609,594,306,576,300,306,585,303,303,300,288,594,282,306,306,297,291,306,303,2067,300,288,294,1767,306,303,300,288,297,303,588,297,17106,303,588,297,198,105,588,288,291,288,306,303,297,288,300,303,300,276,303,300,285,321,2967,294,300,282,309,303,300,282,303,303,38,243,151,149,315,300,295,27,292,300,130,33,149,309,430,191,309,300,294,285,297,300,303,363,303,300,279,306,197,106,300,300,116,187,297,288,122 [...]
-chr2	179114097	179114772	Hs.596354	0	-	179114097	179114772	0	1	675,	0,
-chr2	179115873	179116818	Hs.622912	0	-	179115873	179116818	0	2	67,603,	0,342,
-chr2	179121907	179122356	Hs.609542	0	-	179121907	179122356	0	2	224,224,	0,225,
-chr2	179122873	179123656	Hs.621944	0	-	179122873	179123656	0	1	783,	0,
-chr2	179123897	179124349	Hs.619377	0	-	179123897	179124349	0	1	452,	0,
-chr2	179127533	179131939	Hs.640473	0	+	179127533	179131939	0	1	4406,	0,
-chr2	179150961	179151480	Hs.609295	0	-	179150961	179151480	0	1	519,	0,
-chr2	179189619	179190087	Hs.710694	0	+	179189619	179190087	0	12	33,37,18,29,11,179,33,13,34,16,5,52,	0,34,72,91,120,131,311,344,358,393,409,416,
-chr2	179204887	179205401	Hs.661496	0	-	179204887	179205401	0	2	16,498,	0,16,
-chr2	179209546	179287210	Hs.620337	0	-	179209546	179287210	0	5	124,358,6,11,109,	0,77179,77537,77544,77555,
-chr2	179217688	179218151	Hs.603086	0	-	179217688	179218151	0	1	463,	0,
-chr2	179227481	179235392	Hs.678928	0	-	179227481	179235392	0	12	6,15,2,11,72,85,5,79,81,73,8,83,	0,7,23,235,247,402,990,7254,7438,7632,7705,7828,
-chr2	179266309	179266748	Hs.609465	0	-	179266309	179266748	0	1	439,	0,
-chr2	179296428	179300012	Hs.623987	0	+	179296428	179300012	0	1	3584,	0,
-chr2	179302952	179303488	Hs.594545	0	-	179302952	179303488	0	1	536,	0,
-chr2	179305908	179308754	Hs.595834	0	+	179305908	179308754	0	6	121,194,124,4,13,40,	0,701,1567,1691,2793,2806,
-chr2	179315565	179317384	Hs.628418	0	-	179315565	179317384	0	1	1819,	0,
-chr2	179315565	179316076	Hs.670754	0	+	179315565	179316076	0	1	511,	0,
-chr2	179317750	179337584	Hs.589824	0	+	179317750	179337584	0	6	64,57,54,75,373,53,	0,11487,14212,16161,19407,19781,
-chr2	179349897	179352934	Hs.570275	0	+	179349897	179352934	0	2	1830,125,	0,2912,
-chr2	179360386	179361066	Hs.711672	0	+	179360386	179361066	0	1	680,	0,
-chr2	179405591	179445166	Hs.324341	0	-	179405591	179445166	0	13	1821,236,352,117,113,184,195,141,150,180,189,126,62,	0,4274,4773,13006,17429,20821,22727,23637,33147,35406,36497,38807,39513,
-chr2	179433849	179434307	Hs.663044	0	-	179433849	179434307	0	1	458,	0,
-chr2	179445992	179623031	Hs.591627	0	-	179445992	179623031	0	19	283,2269,402,296,353,208,10,1299,192,120,142,173,195,117,254,109,192,123,220,	0,283,2553,2955,3252,3605,3813,3824,11880,13731,15506,32308,45692,71514,88209,102036,105463,174263,176819,
-chr2	179531336	179531470	Hs.610180	0	+	179531336	179531470	0	1	134,	0,
-chr2	179531674	179531995	Hs.610180	0	+	179531674	179531995	0	4	6,17,164,130,	0,10,27,191,
-chr2	179674663	179837595	Hs.30977	0	-	179674663	179837595	0	18	8337,122,192,123,82,160,115,195,123,212,56,98,114,114,91,109,80,125,	0,11032,13373,14976,15840,20078,22023,22672,30612,41900,44710,47605,49586,70428,74756,81388,90095,162807,
-chr2	179675396	179681310	Hs.714518	0	+	179675396	179681310	0	2	435,41,	0,5873,
-chr2	179675483	179675797	Hs.609408	0	+	179675483	179675797	0	1	314,	0,
-chr2	179698890	179699454	Hs.667783	0	-	179698890	179699454	0	2	436,125,	0,439,
-chr2	179702362	179702797	Hs.602509	0	+	179702362	179702797	0	1	435,	0,
-chr2	179714478	179714731	Hs.679403	0	-	179714478	179714731	0	1	253,	0,
-chr2	179720333	179721089	Hs.686454	0	+	179720333	179721089	0	1	756,	0,
-chr2	179820582	179821132	Hs.671087	0	+	179820582	179821132	0	1	550,	0,
-chr2	179820805	179821282	Hs.621019	0	-	179820805	179821282	0	2	264,205,	0,272,
-chr2	179908392	179909870	Hs.516555	0	-	179908392	179909870	0	3	227,147,6,	0,1115,1472,
-chr2	179929123	179929744	Hs.541629	0	-	179929123	179929744	0	4	18,41,385,164,	0,30,71,457,
-chr2	179972131	179973464	Hs.179697	0	-	179972131	179973464	0	3	4,1011,317,	0,5,1016,
diff --git a/src/test/resources/htsjdk/tribble/bed/disconcontigs.bed b/src/test/resources/htsjdk/tribble/bed/disconcontigs.bed
deleted file mode 100644
index 9f3334b..0000000
--- a/src/test/resources/htsjdk/tribble/bed/disconcontigs.bed
+++ /dev/null
@@ -1,5 +0,0 @@
-chr2	178707289	178707561	Hs.666133	0	+	178707289	178707561	0	3	85,177,8,	0,87,264,
-chr1	178709699	178711955	Hs.377257	0	+	178709699	178711955	0	1	2256,	0,
-chr1	178711404	178712057	Hs.688767	0	-	178711404	178712057	0	1	653,	0,
-chr2	178777793	178778272	Hs.541631	0	-	178777793	178778272	0	1	479,	0,
-chr2	178908612	178916376	Hs.318775	0	+	178908612	178916376	0	4	2644,3067,464,1588,	0,2645,5712,6176,
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/tribble/bed/unsorted.bed b/src/test/resources/htsjdk/tribble/bed/unsorted.bed
deleted file mode 100644
index 42500d8..0000000
--- a/src/test/resources/htsjdk/tribble/bed/unsorted.bed
+++ /dev/null
@@ -1,5 +0,0 @@
-chr2	178707289	178707561	Hs.666133	0	+	178707289	178707561	0	3	85,177,8,	0,87,264,
-chr2	178709699	178711955	Hs.377257	0	+	178709699	178711955	0	1	2256,	0,
-chr2	178711404	178712057	Hs.688767	0	-	178711404	178712057	0	1	653,	0,
-chr2	178908612	178916376	Hs.318775	0	+	178908612	178916376	0	4	2644,3067,464,1588,	0,2645,5712,6176,
-chr2	178777793	178778272	Hs.541631	0	-	178777793	178778272	0	1	479,	0,
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/tribble/complexExample.vcf b/src/test/resources/htsjdk/tribble/complexExample.vcf
deleted file mode 100644
index fb76a8d..0000000
--- a/src/test/resources/htsjdk/tribble/complexExample.vcf
+++ /dev/null
@@ -1,23 +0,0 @@
-##format=VCRv3.3
-##source=ArbitrarySource
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##reference=human_b36_both.fasta
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA00001	NA00002	NA00003	
-1	10001292	testid1	G	A	12.22	0	AF=0.50;AlleleBalance=0.57;DoC=23;HomopolymerRun=0;MAPQ0=8;NS=1;RMSMAPQ=46.31;SB=-24.92;SpanningDeletions=0	GT:DP:GQ	1/0:23:19.27	./.	./.
-1	10002963	.	C	G	22.22	.	AF=0.50;AlleleBalance=0.47;DoC=30;HomopolymerRun=0;MAPQ0=0;NS=1;RMSMAPQ=81.91;SB=-41.73;SpanningDeletions=0	GT:DP:GQ	0/1:30:33.07	./.	./.
-1	10005008	.	A	T,C	123.78	0	AF=1.00;DoC=30;HomopolymerRun=6;MAPQ0=2;NS=1;RMSMAPQ=61.05;SB=-75.45;SpanningDeletions=1	GT:DP:GQ	1/1:27:4.03	0/1:26:3.0	0/0:16:2.0
-1	10006296	.	C	T	42.23	0	AF=0.50;AlleleBalance=0.33;DoC=7;HomopolymerRun=0;MAPQ0=11;NS=1;RMSMAPQ=46.62;SB=-0.04;SpanningDeletions=0	GT:DP:GQ	0/1:7:2000000	./.	./.
-1	10023478	.	G	C,A,T	84.23	.	AF=1.00;DoC=27;HomopolymerRun=1;MAPQ0=10;NS=1;RMSMAPQ=42.16;SB=-48.38;SpanningDeletions=0	GT:DP:GQ	1/1:27:4.03	2/2:26:3.0	0/3:16:2.0
-1	10029362	.	T	C	52.22	.	AF=0.50;AlleleBalance=0.52;DoC=44;HomopolymerRun=0;MAPQ0=0;NS=1;RMSMAPQ=81.28;SB=-42.22;SpanningDeletions=0	GT:DP:GQ	./.	1/0:-1:36.62	./.
-1	10042312	.	G	C	31.81	.	AF=0.50;AlleleBalance=0.70;DoC=24;HomopolymerRun=1;MAPQ0=0;NS=1;RMSMAPQ=85.07;SB=0.00;SpanningDeletions=0	GT:DP:GQ	1/0::5.85	0/0::	0/1:4:
-1	10044557	.	C	T	62.22	.	AF=0.50;AlleleBalance=0.68;DoC=31;HomopolymerRun=16;MAPQ0=0;NS=1;RMSMAPQ=85.34;SB=-0.00;SpanningDeletions=0	GT:DP:GQ	./.	./.	0/1:31:15.01
-1	10045603	.	A	D3	40.26	0	AF=0.50	GT:DP:GQ	0/1:15:7.94	0/0:15:7.94	1/1:15:7.94
-1	10045604	.	A	ICAT	41.26	0	AF=0.50	GT:DP:GQ	1/1:14:6.94	0/0:15:7.94	1/0:15:7.94
-1	10048142	.	A	G	126.81	foo	AF=1.00;DoC=36;HomopolymerRun=4;MAPQ0=0;NS=1;RMSMAPQ=82.11;SB=-85.45;SpanningDeletions=0	GT:DP:GQ	0/1:15:7.94	0/0:15:7.94	1/1:15:7.94
-1	10048580	.	T	A	72.22	bar;baz	AF=0.50;AlleleBalance=0.69;DoC=33;HomopolymerRun=6;MAPQ0=0;NS=1;RMSMAPQ=84.45;SB=-27.41;SpanningDeletions=0	GT:DP:GQ	0/1:15:7.94	0/0:15:7.94	1/1:15:7.94
diff --git a/src/test/resources/htsjdk/tribble/fakeBed.bed b/src/test/resources/htsjdk/tribble/fakeBed.bed
deleted file mode 100644
index 0c46b81..0000000
--- a/src/test/resources/htsjdk/tribble/fakeBed.bed
+++ /dev/null
@@ -1,51 +0,0 @@
-chrM 1 1 TITLE
-chr1 1 1 TITLE
-chr1 101 101 TITLE
-chr1 201 201 TITLE
-chr1 301 301 TITLE
-chr1 401 401 TITLE
-chr1 501 501 TITLE
-chr1 601 601 TITLE
-chr1 701 701 TITLE
-chr1 801 801 TITLE
-chr1 901 901 TITLE
-chr1 1001 1001 TITLE
-chr1 1101 1101 TITLE
-chr1 1201 1201 TITLE
-chr1 1301 1301 TITLE
-chr1 1401 1401 TITLE
-chr1 1501 1501 TITLE
-chr1 1601 1601 TITLE
-chr1 1701 1701 TITLE
-chr1 1801 1801 TITLE
-chr1 1901 1901 TITLE
-chr1 2001 2001 TITLE
-chr1 2101 2101 TITLE
-chr1 2201 2201 TITLE
-chr1 2301 2301 TITLE
-chr1 2401 2401 TITLE
-chr1 2501 2501 TITLE
-chr1 2601 2601 TITLE
-chr1 2701 2701 TITLE
-chr1 2801 2801 TITLE
-chr1 2901 2901 TITLE
-chr1 3001 3001 TITLE
-chr1 3101 3101 TITLE
-chr1 3201 3201 TITLE
-chr1 3301 3301 TITLE
-chr1 3401 3401 TITLE
-chr1 3501 3501 TITLE
-chr1 3601 3601 TITLE
-chr1 3701 3701 TITLE
-chr1 3801 3801 TITLE
-chr1 3901 3901 TITLE
-chr1 4001 4001 TITLE
-chr1 4101 4101 TITLE
-chr1 4201 4201 TITLE
-chr1 4301 4301 TITLE
-chr1 4401 4401 TITLE
-chr1 4501 4501 TITLE
-chr1 4601 4601 TITLE
-chr1 4701 4701 TITLE
-chr1 4801 4801 TITLE
-chr1 4901 4901 TITLE
diff --git a/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz b/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz
deleted file mode 100644
index e8c7465..0000000
Binary files a/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz.tbi b/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz.tbi
deleted file mode 100644
index 0f71973..0000000
Binary files a/src/test/resources/htsjdk/tribble/fakeVCF.vcf.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/gwas/smallp.gwas b/src/test/resources/htsjdk/tribble/gwas/smallp.gwas
deleted file mode 100644
index 0344a98..0000000
--- a/src/test/resources/htsjdk/tribble/gwas/smallp.gwas
+++ /dev/null
@@ -1,20 +0,0 @@
-SNP     CHR     BP      P
-rs1233367       6       29622220        2.28235e-32
-rs29228 6       29623739        0.931148124684
-rs29228 6       29623739        1.70737e-89
-rs3130250       6       29625001        7.18775027174e-05
-rs2535260       6       29628883        0.00246256208471
-rs3129063       6       29645613        3.32185e-97
-rs387642        6       29645634        8.0006e-123
-rs385492        6       29649547        7.60380647336e-12
-rs3129045       6       29652576        4.16094765754e-07
-rs3129090       6       29664131        9.31671032411e-06
-rs3131886       6       29664452        1.85639e-21
-rs3129190       6       29669443        6.50202338003e-05
-rs6456993       6       29670536        5.71059057921e-05
-rs3129046       6       29670652        8.48154e-66
-rs3116788       6       29674197        2.1088206692e-07
-rs3131862       6       29675227        1.81790802347e-05
-rs1610584       6       29675615        7.97182551082e-08
-rs1610585       6       29675676        1.44138539548e-07
-rs9258126       6       29675791        0.000193925445894
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/tribble/index/chrY_Y4_small.bed b/src/test/resources/htsjdk/tribble/index/chrY_Y4_small.bed
deleted file mode 100644
index b85a841..0000000
--- a/src/test/resources/htsjdk/tribble/index/chrY_Y4_small.bed
+++ /dev/null
@@ -1,5000 +0,0 @@
-track name="chrY_Y4 Sequences" description="Illumina bowtie-aligned reads - Y4" visibility=4 priority=10 itemRgb="On"
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770199	2770251	CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA	0	+	2770199	2770251	255,0,0	
-chrY	2770217	2770269	GAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGCCAAACT	0	+	2770217	2770269	255,0,0	
-chrY	2770217	2770269	GAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGCTGCTTGACAAATT	0	+	2770217	2770269	255,0,0	
-chrY	2770220	2770272	GCNCTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAAC	0	+	2770220	2770272	255,0,0	
-chrY	2770220	2770272	GCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAAATAAC	0	+	2770220	2770272	255,0,0	
-chrY	2770222	2770274	ACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGG	0	+	2770222	2770274	255,0,0	
-chrY	2770222	2770274	ACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGG	0	+	2770222	2770274	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770226	2770278	AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT	0	+	2770226	2770278	255,0,0	
-chrY	2770229	2770281	GCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGGGTATT	0	+	2770229	2770281	255,0,0	
-chrY	2772150	2772202	GGAATGTCTTCCTCTGATCGTCTTCCTCAGGAATAGGCTCAAGTATGCGTG	0	-	2772150	2772202	0,0,255	
-chrY	2772150	2772202	GGAAGGTCTTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTG	0	-	2772150	2772202	0,0,255	
-chrY	2772157	2772209	CTTCCTCTGATCGTCTTCCTCAGGAATCGACTCAAGTATGCGTTGACTGGA	0	+	2772157	2772209	255,0,0	
-chrY	2772157	2772209	CCTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGA	0	+	2772157	2772209	255,0,0	
-chrY	2772157	2772209	CTTCCTCTGATGGTCTTCCCCGGGAATAGACTCAAGTATGCGTTGACTGGA	0	+	2772157	2772209	255,0,0	
-chrY	2772157	2772209	CTTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGG	0	+	2772157	2772209	255,0,0	
-chrY	2772158	2772210	TTCCTCTGATCGGCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAG	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGGCTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGATTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772158	2772210	TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA	0	-	2772158	2772210	0,0,255	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772160	2772212	TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT	0	+	2772160	2772212	255,0,0	
-chrY	2772187	2772239	CTCAAGCATGCGTTGACTGGAGATGAGGAAAAGAAGATATGTATGCAACGT	0	+	2772187	2772239	255,0,0	
-chrY	2772201	2772253	GACCGGAGATGAGGTAAAGAAGATATGTATGCAACGTTTCATCAAAATTGA	0	-	2772201	2772253	0,0,255	
-chrY	2772214	2772266	GTAAAGAAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGATCGA	0	+	2772214	2772266	255,0,0	
-chrY	2772214	2772266	GTAAAGACGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGA	0	+	2772214	2772266	255,0,0	
-chrY	2772215	2772267	AAAAGAAGATATGTATGCAACGTTTCATCAAAATAGATGGCAAGGTTCGAG	0	-	2772215	2772267	0,0,255	
-chrY	2772215	2772267	TAAAGAAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCTAG	0	-	2772215	2772267	0,0,255	
-chrY	2772215	2772267	TAAAGAAGATATGTATGCAACGTTTCATCAAAATTGGTGGCAAGGTTCGAG	0	-	2772215	2772267	0,0,255	
-chrY	2772215	2772267	TAAAGAGGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAG	0	-	2772215	2772267	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGACGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAATGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTAGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGAGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATAGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	+	2772220	2772272	255,0,0	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772220	2772272	AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT	0	-	2772220	2772272	0,0,255	
-chrY	2772223	2772275	ATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTC	0	-	2772223	2772275	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772224	2772276	TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA	0	-	2772224	2772276	0,0,255	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772226	2772278	TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA	0	+	2772226	2772278	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAGGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGCCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	NTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGATTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772227	2772279	GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT	0	+	2772227	2772279	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAAGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGGCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772229	2772281	ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC	0	+	2772229	2772281	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772230	2772282	TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC	0	+	2772230	2772282	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772231	2772283	GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC	0	+	2772231	2772283	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGTATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGAGGATGTCACATACCAT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGCTGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT	0	+	2772232	2772284	255,0,0	
-chrY	2772232	2772284	CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC	0	-	2772232	2772284	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772233	2772285	AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG	0	-	2772233	2772285	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATCGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGN	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772234	2772286	ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC	0	-	2772234	2772286	0,0,255	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG	0	-	2772235	2772287	0,0,255	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG	0	-	2772235	2772287	0,0,255	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG	0	-	2772235	2772287	0,0,255	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG	0	-	2772235	2772287	0,0,255	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT	0	+	2772235	2772287	255,0,0	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT	0	+	2772235	2772287	255,0,0	
-chrY	2772235	2772287	CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT	0	+	2772235	2772287	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772236	2772288	GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG	0	+	2772236	2772288	255,0,0	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772237	2772289	TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG	0	-	2772237	2772289	0,0,255	
-chrY	2772244	2772296	AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGAGTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772244	2772296	AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCGGGATTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772244	2772296	AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772244	2772296	AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772244	2772296	AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772244	2772296	AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGCTTCATG	0	+	2772244	2772296	255,0,0	
-chrY	2772244	2772296	AAAATTGATGGCAAGGTTCGAGTGGATGTCACATGCCCTGCTGGATTCATG	0	-	2772244	2772296	0,0,255	
-chrY	2772245	2772297	AAATTGATGGCAAGGTTCGAGTGGATGTCACGTACCCTGCTGGATTCATGG	0	+	2772245	2772297	255,0,0	
-chrY	2772245	2772297	AAATTGATGGCAAGGTTTGAGTGGATGTCACATACCCTGCTGGATTCATGG	0	+	2772245	2772297	255,0,0	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTTGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	GTCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ANCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773689	2773741	ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG	0	-	2773689	2773741	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCACGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	+	2773690	2773742	255,0,0	
-chrY	2773690	2773742	TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG	0	-	2773690	2773742	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGAGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG	0	-	2773694	2773746	0,0,255	
-chrY	2773694	2773746	CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA	0	-	2773694	2773746	0,0,255	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTTTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773699	2773751	AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG	0	+	2773699	2773751	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	GGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773702	2773754	AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG	0	+	2773702	2773754	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773703	2773755	GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT	0	+	2773703	2773755	255,0,0	
-chrY	2773709	2773761	TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG	0	+	2773709	2773761	255,0,0	
-chrY	2773709	2773761	TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG	0	+	2773709	2773761	255,0,0	
-chrY	2773709	2773761	TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG	0	+	2773709	2773761	255,0,0	
-chrY	2773709	2773761	TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG	0	+	2773709	2773761	255,0,0	
-chrY	2773709	2773761	TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG	0	+	2773709	2773761	255,0,0	
-chrY	2773710	2773762	GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC	0	-	2773710	2773762	0,0,255	
-chrY	2773710	2773762	GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC	0	-	2773710	2773762	0,0,255	
-chrY	2773710	2773762	GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC	0	-	2773710	2773762	0,0,255	
-chrY	2773710	2773762	GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC	0	-	2773710	2773762	0,0,255	
-chrY	2773710	2773762	GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC	0	-	2773710	2773762	0,0,255	
-chrY	2773715	2773767	TTTCCNCCTGGTCTATGACACCAAGGGCCGTTTTGCNGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773715	2773767	TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC	0	+	2773715	2773767	255,0,0	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCATTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCATTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773717	2773769	TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG	0	-	2773717	2773769	0,0,255	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTTCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773718	2773770	CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT	0	+	2773718	2773770	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773720	2773772	GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG	0	+	2773720	2773772	255,0,0	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773722	2773774	CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA	0	-	2773722	2773774	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773723	2773775	TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG	0	-	2773723	2773775	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACGAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773725	2773777	GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG	0	-	2773725	2773777	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773727	2773779	CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC	0	-	2773727	2773779	0,0,255	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCNNGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCNA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTCCTGTTCACCGCATCCCAGTGGAAGAGCCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773729	2773781	ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGCCAA	0	+	2773729	2773781	255,0,0	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773731	2773783	GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG	0	-	2773731	2773783	0,0,255	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2773733	2773785	CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA	0	+	2773733	2773785	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTATGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774693	2774745	TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT	0	+	2774693	2774745	255,0,0	
-chrY	2774811	2774863	AAATCAAAGCTGATGACTGGTTTCTGCTTTTGTATGGAATTTGGATCTCAA	0	-	2774811	2774863	0,0,255	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCCGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGACCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGNGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCTGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCCGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2774930	2774982	CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG	0	+	2774930	2774982	255,0,0	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	TCGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCAGTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775049	2775101	ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG	0	-	2775049	2775101	0,0,255	
-chrY	2775260	2775312	CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG	0	+	2775260	2775312	255,0,0	
-chrY	2775260	2775312	CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG	0	+	2775260	2775312	255,0,0	
-chrY	2775260	2775312	CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG	0	+	2775260	2775312	255,0,0	
-chrY	2775260	2775312	CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG	0	+	2775260	2775312	255,0,0	
-chrY	2775260	2775312	CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG	0	+	2775260	2775312	255,0,0	
-chrY	2775362	2775414	GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT	0	-	2775362	2775414	0,0,255	
-chrY	2775362	2775414	GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT	0	-	2775362	2775414	0,0,255	
-chrY	2775362	2775414	GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT	0	-	2775362	2775414	0,0,255	
-chrY	2775362	2775414	GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT	0	-	2775362	2775414	0,0,255	
-chrY	2775362	2775414	GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT	0	-	2775362	2775414	0,0,255	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2776928	2776980	GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT	0	+	2776928	2776980	255,0,0	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATGGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777048	2777100	ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT	0	-	2777048	2777100	0,0,255	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777447	2777499	CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA	0	+	2777447	2777499	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCGCATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777453	2777505	CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT	0	+	2777453	2777505	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777539	2777591	CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT	0	+	2777539	2777591	255,0,0	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGGCGCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777561	2777613	GCCAGGGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA	0	-	2777561	2777613	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777581	2777633	CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG	0	-	2777581	2777633	0,0,255	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTAAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTTACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777631	2777683	GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA	0	+	2777631	2777683	255,0,0	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAGTTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	CGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGCGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777667	2777719	TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC	0	-	2777667	2777719	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2777745	2777797	AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC	0	-	2777745	2777797	0,0,255	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTATTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778418	2778470	AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT	0	+	2778418	2778470	255,0,0	
-chrY	2778697	2778749	TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA	0	+	2778697	2778749	255,0,0	
-chrY	2778697	2778749	TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA	0	+	2778697	2778749	255,0,0	
-chrY	2778697	2778749	TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA	0	+	2778697	2778749	255,0,0	
-chrY	2778697	2778749	TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA	0	+	2778697	2778749	255,0,0	
-chrY	2778697	2778749	TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA	0	+	2778697	2778749	255,0,0	
-chrY	2778798	2778850	TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC	0	-	2778798	2778850	0,0,255	
-chrY	2778798	2778850	TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC	0	-	2778798	2778850	0,0,255	
-chrY	2778798	2778850	TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC	0	-	2778798	2778850	0,0,255	
-chrY	2778798	2778850	TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC	0	-	2778798	2778850	0,0,255	
-chrY	2778798	2778850	TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC	0	-	2778798	2778850	0,0,255	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779169	2779221	CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG	0	+	2779169	2779221	255,0,0	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779277	2779329	GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG	0	-	2779277	2779329	0,0,255	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779315	2779367	TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG	0	+	2779315	2779367	255,0,0	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAAGGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTGTGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779428	2779480	TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT	0	-	2779428	2779480	0,0,255	
-chrY	2779683	2779735	ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG	0	+	2779683	2779735	255,0,0	
-chrY	2779683	2779735	ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG	0	+	2779683	2779735	255,0,0	
-chrY	2779683	2779735	ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG	0	+	2779683	2779735	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779695	2779747	CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA	0	+	2779695	2779747	255,0,0	
-chrY	2779735	2779787	CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA	0	-	2779735	2779787	0,0,255	
-chrY	2779735	2779787	CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA	0	-	2779735	2779787	0,0,255	
-chrY	2779735	2779787	CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA	0	-	2779735	2779787	0,0,255	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779789	2779841	TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG	0	+	2779789	2779841	255,0,0	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779810	2779862	GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG	0	-	2779810	2779862	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2779899	2779951	TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA	0	-	2779899	2779951	0,0,255	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780254	2780306	ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT	0	+	2780254	2780306	255,0,0	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780385	2780437	TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA	0	-	2780385	2780437	0,0,255	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAACGCTGGCAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780563	2780615	GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT	0	+	2780563	2780615	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGACCACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780640	2780692	AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT	0	+	2780640	2780692	255,0,0	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2780701	2780753	GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC	0	-	2780701	2780753	0,0,255	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781475	2781527	CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG	0	+	2781475	2781527	255,0,0	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTGGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781572	2781624	TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC	0	-	2781572	2781624	0,0,255	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781670	2781722	CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC	0	+	2781670	2781722	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781743	2781795	AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG	0	+	2781743	2781795	255,0,0	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781797	2781849	GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC	0	-	2781797	2781849	0,0,255	
-chrY	2781864	2781916	AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA	0	-	2781864	2781916	0,0,255	
-chrY	2781864	2781916	AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA	0	-	2781864	2781916	0,0,255	
-chrY	2781864	2781916	AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA	0	-	2781864	2781916	0,0,255	
-chrY	2781864	2781916	AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA	0	-	2781864	2781916	0,0,255	
-chrY	2781864	2781916	AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA	0	-	2781864	2781916	0,0,255	
-chrY	2781973	2782025	CGACTTTCCTGCCTCAGCCTCCCGAGTAGGTGGGATTACAGGCTTGTGCCC	0	+	2781973	2782025	255,0,0	
-chrY	2782189	2782241	GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC	0	-	2782189	2782241	0,0,255	
-chrY	2782189	2782241	GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC	0	-	2782189	2782241	0,0,255	
-chrY	2782189	2782241	GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC	0	-	2782189	2782241	0,0,255	
-chrY	2782189	2782241	GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC	0	-	2782189	2782241	0,0,255	
-chrY	2782189	2782241	GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC	0	-	2782189	2782241	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCCGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782506	2782558	GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT	0	-	2782506	2782558	0,0,255	
-chrY	2782528	2782580	CTCTGACCGAGGAAATGCTGGAAATCGATGGGATAAGTAATGTCTGGGTGA	0	+	2782528	2782580	255,0,0	
-chrY	2782537	2782589	AGGAAATGCTGGAAATCGATGGGATAAGTAATGTCTGGGTGACTGCTTTAG	0	-	2782537	2782589	0,0,255	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782582	2782634	CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT	0	+	2782582	2782634	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782589	2782641	CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA	0	+	2782589	2782641	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	ACAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782632	2782684	GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA	0	+	2782632	2782684	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGCACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782633	2782685	CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA	0	+	2782633	2782685	255,0,0	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGTAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782634	2782686	AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT	0	-	2782634	2782686	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTCGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782636	2782688	AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC	0	-	2782636	2782688	0,0,255	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782638	2782690	TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT	0	+	2782638	2782690	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782641	2782693	AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC	0	+	2782641	2782693	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGTTTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782646	2782698	GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT	0	+	2782646	2782698	255,0,0	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782647	2782699	TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG	0	-	2782647	2782699	0,0,255	
-chrY	2782648	2782700	GCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGA	0	+	2782648	2782700	255,0,0	
-chrY	2782648	2782700	GCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGA	0	+	2782648	2782700	255,0,0	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782653	2782705	GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT	0	-	2782653	2782705	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782661	2782713	GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG	0	-	2782661	2782713	0,0,255	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACCCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGAGTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782662	2782714	ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA	0	+	2782662	2782714	255,0,0	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782664	2782716	TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC	0	-	2782664	2782716	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782667	2782719	TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC	0	-	2782667	2782719	0,0,255	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	+	2782670	2782722	255,0,0	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	+	2782670	2782722	255,0,0	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	-	2782670	2782722	0,0,255	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	-	2782670	2782722	0,0,255	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	-	2782670	2782722	0,0,255	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	-	2782670	2782722	0,0,255	
-chrY	2782670	2782722	GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG	0	-	2782670	2782722	0,0,255	
-chrY	2782671	2782723	GATCTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGCGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782671	2782723	GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC	0	-	2782671	2782723	0,0,255	
-chrY	2782676	2782728	GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC	0	+	2782676	2782728	255,0,0	
-chrY	2782676	2782728	GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC	0	+	2782676	2782728	255,0,0	
-chrY	2782676	2782728	GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC	0	+	2782676	2782728	255,0,0	
-chrY	2782676	2782728	GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC	0	-	2782676	2782728	0,0,255	
-chrY	2782676	2782728	GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC	0	+	2782676	2782728	255,0,0	
-chrY	2782685	2782737	CCCTCACCTGGTGACTCATCATGCTCGAACCATCCGCTACCCAGATCCTGT	0	+	2782685	2782737	255,0,0	
-chrY	2782685	2782737	CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT	0	+	2782685	2782737	255,0,0	
-chrY	2782685	2782737	CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT	0	+	2782685	2782737	255,0,0	
-chrY	2782685	2782737	CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT	0	+	2782685	2782737	255,0,0	
-chrY	2782686	2782738	CCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTATCCAGATCCTGTC	0	+	2782686	2782738	255,0,0	
-chrY	2782690	2782742	CCCTGGTGACTCATGATGCTCGACCCATCCGCTACCCAGATCCTGTCATCA	0	-	2782690	2782742	0,0,255	
-chrY	2782710	2782762	CAACCCATCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG	0	-	2782710	2782762	0,0,255	
-chrY	2782710	2782762	CAACCCATCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG	0	-	2782710	2782762	0,0,255	
-chrY	2782710	2782762	CCACCCACCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG	0	-	2782710	2782762	0,0,255	
-chrY	2782710	2782762	AGACCCATCCGCTCCCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG	0	-	2782710	2782762	0,0,255	
-chrY	2782716	2782768	ATCCGCTACCCAGATCCTGTCATCAAGGTGAACGAAACTGTGCAGATTTAT	0	+	2782716	2782768	255,0,0	
-chrY	2782718	2782770	CCGCCACCCAGATCCTGTCATCAAGGTGAACGATACCGTGCAGCTTGATTT	0	+	2782718	2782770	255,0,0	
-chrY	2782755	2782807	GTGCAGATTGAATTAGGGGCTGGCAAGATAATCAACTTTATCAAATTTGAT	0	-	2782755	2782807	0,0,255	
-chrY	2782755	2782807	GTGTAGATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGAT	0	-	2782755	2782807	0,0,255	
-chrY	2782756	2782808	TGCAGATTGATTTAGGGACTGGCAAGATAAACAACTTTATCAAATTTGATA	0	+	2782756	2782808	255,0,0	
-chrY	2782760	2782812	GATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAAGTTGATACAGG	0	-	2782760	2782812	0,0,255	
-chrY	2782760	2782812	GATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACTGG	0	-	2782760	2782812	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782762	2782814	TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG	0	-	2782762	2782814	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2782767	2782819	TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG	0	-	2782767	2782819	0,0,255	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTGGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2789679	2789731	GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC	0	+	2789679	2789731	255,0,0	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2790238	2790290	GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC	0	-	2790238	2790290	0,0,255	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793126	2793178	GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA	0	+	2793126	2793178	255,0,0	
-chrY	2793133	2793185	GTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAA	0	+	2793133	2793185	255,0,0	
-chrY	2793144	2793196	TGTGTGGGGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC	0	-	2793144	2793196	0,0,255	
-chrY	2793144	2793196	TTGGGGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC	0	-	2793144	2793196	0,0,255	
-chrY	2793144	2793196	TGGGTGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC	0	-	2793144	2793196	0,0,255	
-chrY	2793150	2793202	GAGCCTGCCTCGGTCGTGTTGGTGTGATCTCCAACAGGGAAAGACATCCTG	0	-	2793150	2793202	0,0,255	
-chrY	2793150	2793202	GAGCCAACCTCGGTCGTGTTGGTGTGATCAACAAAAGGGAAAGACATCCTG	0	+	2793150	2793202	255,0,0	
-chrY	2793150	2793202	GAGCCAACCTCGGTCGCGTTGGTGTGATCACCAACAGGGAACGACATCCTG	0	+	2793150	2793202	255,0,0	
-chrY	2793159	2793211	TCGGTCGTGTTGGTGTGATCCCCAACAGGGAAAGACATCCTGGTTCTTTTG	0	-	2793159	2793211	0,0,255	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGATCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793170	2793222	GGTGTGATCACCAACAGGGAAAGACAACCTGGTTCTTTTGATGTGGTGCAT	0	+	2793170	2793222	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCGCCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	-	2793173	2793225	0,0,255	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793173	2793225	GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG	0	+	2793173	2793225	255,0,0	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACGGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAN	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793175	2793227	GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA	0	-	2793175	2793227	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATATGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793177	2793229	TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG	0	-	2793177	2793229	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	-	2793178	2793230	0,0,255	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCANGTGANGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793178	2793230	CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA	0	+	2793178	2793230	255,0,0	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATACTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793179	2793231	ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT	0	-	2793179	2793231	0,0,255	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGCAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	NAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793181	2793233	CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC	0	+	2793181	2793233	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793190	2793242	AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA	0	+	2793190	2793242	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793199	2793251	TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC	0	+	2793199	2793251	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GCTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGATGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	+	2793201	2793253	255,0,0	
-chrY	2793201	2793253	GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA	0	-	2793201	2793253	0,0,255	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCAAGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793204	2793256	CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA	0	+	2793204	2793256	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATCGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	-	2793205	2793257	0,0,255	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	-	2793205	2793257	0,0,255	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	-	2793205	2793257	0,0,255	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCACTGGCAACAGCTTTGCCACGCG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCAACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793205	2793257	TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG	0	+	2793205	2793257	255,0,0	
-chrY	2793206	2793258	TTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGG	0	+	2793206	2793258	255,0,0	
-chrY	2793206	2793258	TTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGG	0	+	2793206	2793258	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TCGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGACAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793207	2793259	TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC	0	+	2793207	2793259	255,0,0	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793213	2793265	TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA	0	-	2793213	2793265	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGTCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAATAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	+	2793215	2793267	255,0,0	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793215	2793267	GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC	0	-	2793215	2793267	0,0,255	
-chrY	2793221	2793273	GTGAAGGATGCCAATGAAAACAGCTTTGCCACGAGGATTTCCAACATTTTT	0	+	2793221	2793273	255,0,0	
-chrY	2793223	2793275	GAAGGATGCCAATGGCAACAGCTTTGCCACGGGGCTTTCCAACATTTTTGT	0	+	2793223	2793275	255,0,0	
-chrY	2793231	2793283	CCAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATCGGCA	0	-	2793231	2793283	0,0,255	
-chrY	2793232	2793284	CAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAN	0	-	2793232	2793284	0,0,255	
-chrY	2793232	2793284	CAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCGTTGGCAA	0	-	2793232	2793284	0,0,255	
-chrY	2793232	2793284	CAATGGCAACAGCTTTGCCACGAGGCTTTCGAACATTTTTGTCATTGGCAA	0	-	2793232	2793284	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGCCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793233	2793285	AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC	0	-	2793233	2793285	0,0,255	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793336	2793388	ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT	0	+	2793336	2793388	255,0,0	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGAGCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAACCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793447	2793499	AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG	0	-	2793447	2793499	0,0,255	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAGGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793566	2793618	GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT	0	+	2793566	2793618	255,0,0	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793684	2793736	ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG	0	-	2793684	2793736	0,0,255	
-chrY	2793788	2793840	CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG	0	+	2793788	2793840	255,0,0	
-chrY	2793788	2793840	CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG	0	+	2793788	2793840	255,0,0	
-chrY	2793788	2793840	CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG	0	+	2793788	2793840	255,0,0	
-chrY	2793788	2793840	CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG	0	+	2793788	2793840	255,0,0	
-chrY	2793797	2793849	CTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATGCAGTATCCT	0	+	2793797	2793849	255,0,0	
-chrY	2793868	2793920	CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT	0	+	2793868	2793920	255,0,0	
-chrY	2793868	2793920	CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT	0	+	2793868	2793920	255,0,0	
-chrY	2793868	2793920	CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT	0	+	2793868	2793920	255,0,0	
-chrY	2793868	2793920	CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT	0	+	2793868	2793920	255,0,0	
-chrY	2793894	2793946	ATAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGG	0	-	2793894	2793946	0,0,255	
-chrY	2793895	2793947	TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA	0	-	2793895	2793947	0,0,255	
-chrY	2793895	2793947	TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA	0	-	2793895	2793947	0,0,255	
-chrY	2793895	2793947	TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA	0	-	2793895	2793947	0,0,255	
-chrY	2793895	2793947	TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA	0	-	2793895	2793947	0,0,255	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2793897	2793949	ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT	0	+	2793897	2793949	255,0,0	
-chrY	2794051	2794103	CTGGGACTAAGGCGCCCGCCACCAGACCTGGCTAATTTCTTTTTGTATTTT	0	+	2794051	2794103	255,0,0	
-chrY	2794051	2794103	CTGGGACTAAGGCGCCCGCCACCAGACCTGGCTAATTTCTTTTTGTATTTT	0	+	2794051	2794103	255,0,0	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATATCCTGACCTGGTGATCAACCAGCTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794124	2794176	TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC	0	-	2794124	2794176	0,0,255	
-chrY	2794138	2794190	GTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGCCTCCCAAAGTGCAG	0	-	2794138	2794190	0,0,255	
-chrY	2794138	2794190	GTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGCCTCCCAAAGTGCAG	0	-	2794138	2794190	0,0,255	
-chrY	2794216	2794268	GGCCAACTGAAAAGCTTTTCATCAAGCTATTCAGCCCCGGGAGCAGCATCT	0	+	2794216	2794268	255,0,0	
-chrY	2794216	2794268	GGCCAACTGAAAAGCTTTTCATCAAGCTATTCAGCCCCGGGAGCAGCATCT	0	+	2794216	2794268	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794297	2794349	TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG	0	+	2794297	2794349	255,0,0	
-chrY	2794312	2794364	ACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTGCCACTCAGAAGCTCT	0	-	2794312	2794364	0,0,255	
-chrY	2794312	2794364	ACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTGCCACTCAGAAGCTCT	0	-	2794312	2794364	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794400	2794452	AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG	0	-	2794400	2794452	0,0,255	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTAAGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794517	2794569	CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT	0	+	2794517	2794569	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794573	2794625	CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA	0	+	2794573	2794625	255,0,0	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794627	2794679	GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA	0	-	2794627	2794679	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTGTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794667	2794719	ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG	0	-	2794667	2794719	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794704	2794756	TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT	0	-	2794704	2794756	0,0,255	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794727	2794779	TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT	0	+	2794727	2794779	255,0,0	
-chrY	2794759	2794811	GTTTTGGTGGGATGTTGTTTTTCTCTCCTCCCTTTCTTTCTGTACTTACTT	0	+	2794759	2794811	255,0,0	
-chrY	2794759	2794811	GTTTTGGTGGGATGTTGTTTTTCTCTCCTCCCTTTCTTTCTGTACTTACTT	0	+	2794759	2794811	255,0,0	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794845	2794897	GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG	0	-	2794845	2794897	0,0,255	
-chrY	2794852	2794904	TTGCCCAGGGGAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAG	0	-	2794852	2794904	0,0,255	
-chrY	2794858	2794910	AGGGGAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTA	0	-	2794858	2794910	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794862	2794914	GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA	0	-	2794862	2794914	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794866	2794918	GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA	0	-	2794866	2794918	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794868	2794920	GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC	0	-	2794868	2794920	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794871	2794923	TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA	0	-	2794871	2794923	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794877	2794929	TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG	0	-	2794877	2794929	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794878	2794930	TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG	0	-	2794878	2794930	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	GGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794887	2794939	TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC	0	-	2794887	2794939	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAAAGGTTGGCCACCAAACAAAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794888	2794940	GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA	0	-	2794888	2794940	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794889	2794941	AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG	0	-	2794889	2794941	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794894	2794946	AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC	0	-	2794894	2794946	0,0,255	
-chrY	2794897	2794949	GATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCG	0	-	2794897	2794949	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794903	2794955	AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT	0	-	2794903	2794955	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794907	2794959	TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT	0	-	2794907	2794959	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGAAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794915	2794967	AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA	0	-	2794915	2794967	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATGGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794924	2794976	AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC	0	-	2794924	2794976	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTCTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GNAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2794936	2794988	GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA	0	-	2794936	2794988	0,0,255	
-chrY	2857835	2857887	TTCAACGTGAAATTCTAAGACAAAACTCATAGGCTGGCCAGCATGTGAGAA	0	+	2857835	2857887	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTCGCTCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863491	2863543	CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT	0	+	2863491	2863543	255,0,0	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TGTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCGCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCGGGTCGGCGTCCCGGAGGGCGCCCTCCCGCGCTAGGCCGGAC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863539	2863591	TTGGGGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC	0	-	2863539	2863591	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CGGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2863606	2863658	CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC	0	-	2863606	2863658	0,0,255	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAC	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865129	2865181	CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA	0	+	2865129	2865181	255,0,0	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865241	2865293	CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC	0	-	2865241	2865293	0,0,255	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865316	2865368	GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA	0	+	2865316	2865368	255,0,0	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCGGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2865423	2865475	CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC	0	-	2865423	2865475	0,0,255	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866382	2866434	CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC	0	+	2866382	2866434	255,0,0	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2866472	2866524	CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA	0	-	2866472	2866524	0,0,255	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871012	2871064	CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA	0	+	2871012	2871064	255,0,0	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2871111	2871163	GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT	0	-	2871111	2871163	0,0,255	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTGAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876103	2876155	GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT	0	+	2876103	2876155	255,0,0	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2876229	2876281	CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC	0	-	2876229	2876281	0,0,255	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGNNACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880278	2880330	TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT	0	+	2880278	2880330	255,0,0	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	ATAAGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2880395	2880447	TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT	0	-	2880395	2880447	0,0,255	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2881985	2882037	ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG	0	+	2881985	2882037	255,0,0	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2889166	2889218	CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG	0	-	2889166	2889218	0,0,255	
-chrY	2890047	2890099	TTTCCCCTTTTTTTCTACCTTATTGTCCGTTTTCTCTTTAAGTAATGATTT	0	+	2890047	2890099	255,0,0	
-chrY	2890134	2890186	AAATCTAGTGAATTCTCTGAAATACAGTGGTCTCACCAAGACCATCAACCG	0	-	2890134	2890186	0,0,255	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898706	2898758	CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG	0	+	2898706	2898758	255,0,0	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2898850	2898902	TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC	0	-	2898850	2898902	0,0,255	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2902594	2902646	TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA	0	+	2902594	2902646	255,0,0	
-chrY	2904753	2904805	GAGAGGAGGATGCTGCTGTTGCAGCAGCAGCAGCTGCTGTGCATGAGCAGC	0	+	2904753	2904805	255,0,0	
-chrY	2904753	2904805	GAGAGGAGGATGCTGCTGTTGCAGCAGCAGCAGCTGCTGTGCCTGAGCCGC	0	+	2904753	2904805	255,0,0	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907254	2907306	TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG	0	-	2907254	2907306	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCCTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2907629	2907681	CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT	0	-	2907629	2907681	0,0,255	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2908968	2909020	TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC	0	+	2908968	2909020	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCGAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909010	2909062	AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG	0	+	2909010	2909062	255,0,0	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909109	2909161	TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC	0	-	2909109	2909161	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTCGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909135	2909187	ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA	0	-	2909135	2909187	0,0,255	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909455	2909507	TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA	0	+	2909455	2909507	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909485	2909537	TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTCTAGGTTCCTTAA	0	+	2909485	2909537	255,0,0	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCNTCTNGCTTTAGTATGGTAGTGCTTCATNCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909596	2909648	ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT	0	-	2909596	2909648	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGCTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	ATAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909618	2909670	TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC	0	-	2909618	2909670	0,0,255	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909655	2909707	GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA	0	+	2909655	2909707	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909735	2909787	CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC	0	+	2909735	2909787	255,0,0	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909760	2909812	TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA	0	-	2909760	2909812	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2909842	2909894	GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG	0	-	2909842	2909894	0,0,255	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGNN	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATACTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910075	2910127	AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA	0	+	2910075	2910127	255,0,0	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910182	2910234	ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT	0	-	2910182	2910234	0,0,255	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGGTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTACAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910224	2910276	TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA	0	+	2910224	2910276	255,0,0	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910330	2910382	AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG	0	-	2910330	2910382	0,0,255	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTCTGAAGCATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	2910400	2910452	CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA	0	+	2910400	2910452	255,0,0	
-chrY	3547861	3547913	CACACCTGGCTAATTTTTTATATTTTTAGTGGAGACAGGGCTCCACCGTGC	0	-	3547861	3547913	0,0,255	
-chrY	3547861	3547913	CACACCTGGCTAATTTTTTATATTTTTAGTGGAGACAGGGCTCCACCGTGC	0	-	3547861	3547913	0,0,255	
diff --git a/src/test/resources/htsjdk/tribble/large.txt b/src/test/resources/htsjdk/tribble/large.txt
deleted file mode 100644
index 5f4e1d4..0000000
--- a/src/test/resources/htsjdk/tribble/large.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES down [...]
-##CombineVariants="analysis_type=CombineVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsampli [...]
-##FILTER=<ID=Indel_FS,Description="FS>200.0">
-##FILTER=<ID=Indel_InbreedingCoeff,Description="InbreedingCoeff<-0.8">
-##FILTER=<ID=Indel_QD,Description="QD<2.0">
-##FILTER=<ID=Indel_ReadPosRankSum,Description="ReadPosRankSum<-20.0">
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheSNP98.50to98.60,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -0.9687 <= x < -0.8298">
-##FILTER=<ID=VQSRTrancheSNP98.60to98.80,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.2821 <= x < -0.9687">
-##FILTER=<ID=VQSRTrancheSNP98.80to98.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.5011 <= x < -1.2821">
-##FILTER=<ID=VQSRTrancheSNP98.90to99.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.7494 <= x < -1.5011">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.30,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -2.9782 <= x < -1.7494">
-##FILTER=<ID=VQSRTrancheSNP99.30to99.50,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -4.7694 <= x < -2.9782">
-##FILTER=<ID=VQSRTrancheSNP99.50to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -15.7985 <= x < -4.7694">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -4789.109">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -4789.109 <= x < -15.7985">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
-##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
-##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
-##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
-##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SNPEFF_AMINO_ACID_CHANGE,Number=1,Type=String,Description="Old/New amino acid for the highest-impact effect resulting from the current variant (in HGVS style)">
-##INFO=<ID=SNPEFF_CODON_CHANGE,Number=1,Type=String,Description="Old/New codon for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_EFFECT,Number=1,Type=String,Description="The highest-impact effect resulting from the current variant (or one of the highest-impact effects, if there is a tie)">
-##INFO=<ID=SNPEFF_EXON_ID,Number=1,Type=String,Description="Exon ID for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_FUNCTIONAL_CLASS,Number=1,Type=String,Description="Functional class of the highest-impact effect resulting from the current variant: [NONE, SILENT, MISSENSE, NONSENSE]">
-##INFO=<ID=SNPEFF_GENE_BIOTYPE,Number=1,Type=String,Description="Gene biotype for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_GENE_NAME,Number=1,Type=String,Description="Gene name for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_IMPACT,Number=1,Type=String,Description="Impact of the highest-impact effect resulting from the current variant [MODIFIER, LOW, MODERATE, HIGH]">
-##INFO=<ID=SNPEFF_TRANSCRIPT_ID,Number=1,Type=String,Description="Transcript ID for the highest-impact effect resulting from the current variant">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##OriginalSnpEffCmd="SnpEff eff -v -onlyCoding true -c /seq/references/Homo_sapiens_assembly19/v1/snpEff/Homo_sapiens_assembly19.snpEff.config -i vcf -o vcf GRCh37.64 /seq/dax/t2d_genes/v1/t2d_genes.unannotated.vcf "
-##OriginalSnpEffVersion="2.0.5 (build 2011-12-24), by Pablo Cingolani"
-##SelectVariants="analysis_type=SelectVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsampling [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/seq/dax/t2d_genes/v1/t2d_genes.bam.list] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/scatter/temp_0001_of_2500/scattered.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomizati [...]
-##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=50 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assemb [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsa [...]
-##contig=<ID=1,length=249250621>
-##contig=<ID=2,length=243199373>
-##contig=<ID=3,length=198022430>
-##contig=<ID=4,length=191154276>
-##contig=<ID=5,length=180915260>
-##contig=<ID=6,length=171115067>
-##contig=<ID=7,length=159138663>
-##contig=<ID=8,length=146364022>
-##contig=<ID=9,length=141213431>
-##contig=<ID=10,length=135534747>
-##contig=<ID=11,length=135006516>
-##contig=<ID=12,length=133851895>
-##contig=<ID=13,length=115169878>
-##contig=<ID=14,length=107349540>
-##contig=<ID=15,length=102531392>
-##contig=<ID=16,length=90354753>
-##contig=<ID=17,length=81195210>
-##contig=<ID=18,length=78077248>
-##contig=<ID=19,length=59128983>
-##contig=<ID=20,length=63025520>
-##contig=<ID=21,length=48129895>
-##contig=<ID=22,length=51304566>
-##contig=<ID=X,length=155270560>
-##contig=<ID=Y,length=59373566>
-##contig=<ID=MT,length=16569>
-##contig=<ID=GL000207.1,length=4262>
-##contig=<ID=GL000226.1,length=15008>
-##contig=<ID=GL000229.1,length=19913>
-##contig=<ID=GL000231.1,length=27386>
-##contig=<ID=GL000210.1,length=27682>
-##contig=<ID=GL000239.1,length=33824>
-##contig=<ID=GL000235.1,length=34474>
-##contig=<ID=GL000201.1,length=36148>
-##contig=<ID=GL000247.1,length=36422>
-##contig=<ID=GL000245.1,length=36651>
-##contig=<ID=GL000197.1,length=37175>
-##contig=<ID=GL000203.1,length=37498>
-##contig=<ID=GL000246.1,length=38154>
-##contig=<ID=GL000249.1,length=38502>
-##contig=<ID=GL000196.1,length=38914>
-##contig=<ID=GL000248.1,length=39786>
-##contig=<ID=GL000244.1,length=39929>
-##contig=<ID=GL000238.1,length=39939>
-##contig=<ID=GL000202.1,length=40103>
-##contig=<ID=GL000234.1,length=40531>
-##contig=<ID=GL000232.1,length=40652>
-##contig=<ID=GL000206.1,length=41001>
-##contig=<ID=GL000240.1,length=41933>
-##contig=<ID=GL000236.1,length=41934>
-##contig=<ID=GL000241.1,length=42152>
-##contig=<ID=GL000243.1,length=43341>
-##contig=<ID=GL000242.1,length=43523>
-##contig=<ID=GL000230.1,length=43691>
-##contig=<ID=GL000237.1,length=45867>
-##contig=<ID=GL000233.1,length=45941>
-##contig=<ID=GL000204.1,length=81310>
-##contig=<ID=GL000198.1,length=90085>
-##contig=<ID=GL000208.1,length=92689>
-##contig=<ID=GL000191.1,length=106433>
-##contig=<ID=GL000227.1,length=128374>
-##contig=<ID=GL000228.1,length=129120>
-##contig=<ID=GL000214.1,length=137718>
-##contig=<ID=GL000221.1,length=155397>
-##contig=<ID=GL000209.1,length=159169>
-##contig=<ID=GL000218.1,length=161147>
-##contig=<ID=GL000220.1,length=161802>
-##contig=<ID=GL000213.1,length=164239>
-##contig=<ID=GL000211.1,length=166566>
-##contig=<ID=GL000199.1,length=169874>
-##contig=<ID=GL000217.1,length=172149>
-##contig=<ID=GL000216.1,length=172294>
-##contig=<ID=GL000215.1,length=172545>
-##contig=<ID=GL000205.1,length=174588>
-##contig=<ID=GL000219.1,length=179198>
-##contig=<ID=GL000224.1,length=179693>
-##contig=<ID=GL000223.1,length=180455>
-##contig=<ID=GL000195.1,length=182896>
-##contig=<ID=GL000212.1,length=186858>
-##contig=<ID=GL000222.1,length=186861>
-##contig=<ID=GL000200.1,length=187035>
-##contig=<ID=GL000193.1,length=189789>
-##contig=<ID=GL000194.1,length=191469>
-##contig=<ID=GL000225.1,length=211173>
-##contig=<ID=GL000192.1,length=547496>
-##contig=<ID=NC_007605,length=171823>
-##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
-##source=SelectVariants
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	100	1000-10D	1001	1001-10D	10018	1002-10D	10029	1003-10D	10032	1004-10D	10046	10049	1005	1005-10D	10050	10059	1006-10D	10069	1007-10BD	1008-10D	10088	1009-10D	10090	1010-10D	10105	10109	1011-10D	10110	10114	10118	1012-10D	1013-10D	1014-10D	10148	1015-10D	1016-10D	1018-10D	1019-10D	10191	10194	10196	1020-10D	10204.0	1021-10D	10210	10211.0	10221	10268	1028	10282	10304	10326	10330	10339	10356	10371	10376	10388.0	10397	10402	10434	10447	10451	104 [...]
-1	69270	.	A	G	67802.61	VQSRTrancheSNP99.50to99.90	AC=4763;AF=0.736;AN=6468;BaseQRankSum=-29.966;DP=1452155;Dels=0.00;FS=0.000;HaplotypeScore=0.0519;InbreedingCoeff=0.3564;MLEAC=3470;MLEAF=0.536;MQ=2.72;MQ0=522186;MQRankSum=17.776;QD=0.32;ReadPosRankSum=-9.274;SNPEFF_AMINO_ACID_CHANGE=S108;SNPEFF_CODON_CHANGE=tcA/tcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;S [...]
-1	69335	.	G	A	97.21	VQSRTrancheSNP99.90to100.00	AC=1;AF=6.701e-05;AN=14924;BaseQRankSum=3.221;DP=1123713;Dels=0.00;FS=0.000;HaplotypeScore=0.0941;InbreedingCoeff=-0.0589;MLEAC=1;MLEAF=6.701e-05;MQ=4.99;MQ0=459016;MQRankSum=0.427;QD=1.30;ReadPosRankSum=-1.122;SNPEFF_AMINO_ACID_CHANGE=R130H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1	69366	.	T	G	871.42	VQSRTrancheSNP99.50to99.90	AC=2;AF=1.239e-04;AN=16146;BaseQRankSum=-1.719;DP=990333;Dels=0.00;FS=0.000;HaplotypeScore=0.0933;InbreedingCoeff=-0.0247;MLEAC=2;MLEAF=1.239e-04;MQ=5.96;MQ0=407294;MQRankSum=0.001;QD=21.25;ReadPosRankSum=0.517;SNPEFF_AMINO_ACID_CHANGE=V140;SNPEFF_CODON_CHANGE=gtT/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;SN [...]
-1	69409	.	A	G	4406.28	VQSRTrancheSNP99.50to99.90	AC=8;AF=4.147e-04;AN=19290;BaseQRankSum=13.621;DP=1362430;Dels=0.00;FS=26.031;HaplotypeScore=0.1448;InbreedingCoeff=0.0053;MLEAC=8;MLEAF=4.147e-04;MQ=11.68;MQ0=219922;MQRankSum=5.323;QD=9.71;ReadPosRankSum=-9.497;SNPEFF_AMINO_ACID_CHANGE=I107V;SNPEFF_CODON_CHANGE=Atc/Gtc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMP [...]
-1	69428	rs140739101	T	G	419908.06	VQSRTrancheSNP99.50to99.90	AC=453;AF=0.022;AN=20242;BaseQRankSum=49.526;DB;DP=1394601;Dels=0.00;FS=975.380;HaplotypeScore=0.1195;InbreedingCoeff=0.2461;MLEAC=334;MLEAF=0.017;MQ=16.42;MQ0=138676;MQRankSum=-2.177;QD=17.57;ReadPosRankSum=-10.322;SNPEFF_AMINO_ACID_CHANGE=F113C;SNPEFF_CODON_CHANGE=tTt/tGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=O [...]
-1	69438	.	T	C	3107.59	VQSRTrancheSNP99.50to99.90	AC=2;AF=9.729e-05;AN=20558;BaseQRankSum=-2.899;DP=1379680;Dels=0.00;FS=8.925;HaplotypeScore=0.1499;InbreedingCoeff=0.0001;MLEAC=2;MLEAF=9.729e-05;MQ=22.72;MQ0=95489;MQRankSum=0.850;QD=24.66;ReadPosRankSum=-0.870;SNPEFF_AMINO_ACID_CHANGE=Y116;SNPEFF_CODON_CHANGE=taT/taC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW; [...]
-1	69453	rs142004627	G	A	923.30	VQSRTrancheSNP99.00to99.30	AC=141;AF=7.059e-03;AN=19974;BaseQRankSum=-19.711;DB;DP=1292464;Dels=0.00;FS=234.751;HaplotypeScore=0.2262;InbreedingCoeff=0.1247;MLEAC=44;MLEAF=2.203e-03;MQ=31.12;MQ0=15075;MQRankSum=-11.276;QD=1.14;ReadPosRankSum=-4.900;SNPEFF_AMINO_ACID_CHANGE=K121;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5 [...]
-1	69478	.	T	C	625.46	VQSRTrancheSNP99.50to99.90	AC=2;AF=9.713e-05;AN=20590;BaseQRankSum=-5.701;DP=1224140;Dels=0.00;FS=9.248;HaplotypeScore=0.1621;InbreedingCoeff=-0.0073;MLEAC=1;MLEAF=4.857e-05;MQ=28.40;MQ0=31089;MQRankSum=-0.497;QD=7.19;ReadPosRankSum=-4.289;SNPEFF_AMINO_ACID_CHANGE=C130R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPA [...]
-1	69489	.	A	C	1035.55	VQSRTrancheSNP99.50to99.90	AC=3;AF=1.469e-04;AN=20422;BaseQRankSum=4.705;DP=1117540;Dels=0.00;FS=2.442;HaplotypeScore=0.1773;InbreedingCoeff=-0.0003;MLEAC=2;MLEAF=9.793e-05;MQ=28.74;MQ0=29993;MQRankSum=-1.170;QD=12.78;ReadPosRankSum=-2.427;SNPEFF_AMINO_ACID_CHANGE=A133;SNPEFF_CODON_CHANGE=gcA/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW [...]
-1	69496	rs150690004	G	A	74883.53	VQSRTrancheSNP99.00to99.30	AC=33;AF=1.628e-03;AN=20272;BaseQRankSum=-5.450;DB;DP=993841;Dels=0.00;FS=22.218;HaplotypeScore=0.2924;InbreedingCoeff=0.0259;MLEAC=17;MLEAF=8.386e-04;MQ=29.16;MQ0=27895;MQRankSum=10.649;QD=70.12;ReadPosRankSum=0.884;SNPEFF_AMINO_ACID_CHANGE=G136S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=O [...]
-1	69496	.	GGCATTATGGCTGTCA	G	555413.58	Indel_FS	AC=2988;AF=0.148;AN=20226;BaseQRankSum=43.899;DP=993841;FS=Infinity;HaplotypeScore=20.7358;InbreedingCoeff=0.7977;MLEAC=3420;MLEAF=0.169;MQ=29.16;MQ0=0;MQRankSum=-13.694;QD=3.63;ReadPosRankSum=37.478;SNPEFF_AMINO_ACID_CHANGE=GIMAVT136A;SNPEFF_CODON_CHANGE=ggcattatggctgtcaca/gca;SNPEFF_EFFECT=CODON_CHANGE_PLUS_CODON_DELETION;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4 [...]
-1	69502	.	A	G	509.73	VQSRTrancheSNP99.50to99.90	AC=2;AF=9.975e-05;AN=20050;BaseQRankSum=6.603;DP=919807;Dels=0.00;FS=1.954;HaplotypeScore=0.3679;InbreedingCoeff=-0.0070;MLEAC=1;MLEAF=4.988e-05;MQ=29.88;MQ0=25457;MQRankSum=-2.320;QD=6.22;ReadPosRankSum=-2.827;SNPEFF_AMINO_ACID_CHANGE=M138V;SNPEFF_CODON_CHANGE=Atg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1	69511	rs75062661	A	G	31383854.34	VQSRTrancheSNP99.50to99.90	AC=16694;AF=0.858;AN=19460;BaseQRankSum=60.147;DB;DP=773705;Dels=0.00;FS=138.417;HaplotypeScore=0.2818;InbreedingCoeff=0.5035;MLEAC=16887;MLEAF=0.868;MQ=31.39;MQ0=16811;MQRankSum=-164.893;QD=52.42;ReadPosRankSum=-36.782;SNPEFF_AMINO_ACID_CHANGE=T141A;SNPEFF_CODON_CHANGE=Aca/Gca;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_N [...]
-1	69521	.	T	C	722.77	VQSRTrancheSNP99.50to99.90	AC=2;AF=1.011e-04;AN=19776;BaseQRankSum=2.538;DP=915452;Dels=0.00;FS=1.110;HaplotypeScore=0.2063;InbreedingCoeff=-0.0088;MLEAC=2;MLEAF=1.011e-04;MQ=34.73;MQ0=15188;MQRankSum=-1.312;QD=4.82;ReadPosRankSum=-4.246;SNPEFF_AMINO_ACID_CHANGE=I144T;SNPEFF_CODON_CHANGE=aTt/aCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1	69534	rs190717287	T	C	10791.59	VQSRTrancheSNP99.50to99.90	AC=14;AF=7.034e-04;AN=19902;BaseQRankSum=15.572;DB;DP=1059436;Dels=0.00;FS=1.036;HaplotypeScore=0.1863;InbreedingCoeff=-0.0037;MLEAC=14;MLEAF=7.034e-04;MQ=35.59;MQ0=12762;MQRankSum=-2.121;QD=11.54;ReadPosRankSum=-6.516;SNPEFF_AMINO_ACID_CHANGE=H148;SNPEFF_CODON_CHANGE=caT/caC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5; [...]
diff --git a/src/test/resources/htsjdk/tribble/sites.bed b/src/test/resources/htsjdk/tribble/sites.bed
deleted file mode 100644
index 3750b3f..0000000
--- a/src/test/resources/htsjdk/tribble/sites.bed
+++ /dev/null
@@ -1,1000 +0,0 @@
-chr1	1245	1425	chr1.1	348	0.0432341
-chr1	1578	1818	chr1.2	430	0.314475
-chr1	2018	2318	chr1.3	345	0.038427
-chr1	10665	11465	chr1.4	478	0.589475
-chr1	18100	19780	chr1.5	558	1.22721
-chr1	81011	81491	chr1.6	460	0.474365
-chr1	227342	227822	chr1.7	415	0.245863
-chr1	409247	409627	chr1.8	349	0.045556
-chr1	481720	482000	chr1.9	415	0.245863
-chr1	501569	502049	chr1.10	415	0.245863
-chr1	580608	580888	chr1.11	465	0.502745
-chr1	580906	581246	chr1.12	418	0.256501
-chr1	604472	604712	chr1.13	446	0.395281
-chr1	604748	607828	chr1.14	564	1.28828
-chr1	607863	610103	chr1.15	558	1.2282
-chr1	613316	613496	chr1.16	380	0.118186
-chr1	613539	613919	chr1.17	415	0.245863
-chr1	659767	660147	chr1.18	349	0.045555
-chr1	753372	753552	chr1.19	430	0.312979
-chr1	753620	754600	chr1.20	773	4.13035
-chr1	763942	764200	chr1.21	442	0.372517
-chr1	766594	766939	chr1.22	546	1.11774
-chr1	792467	793007	chr1.23	433	0.330713
-chr1	801766	802806	chr1.24	580	1.44576
-chr1	802807	803681	chr1.25	575	1.39455
-chr1	815798	816776	chr1.26	447	0.398158
-chr1	817006	818146	chr1.27	520	0.897849
-chr1	819524	820204	chr1.28	488	0.65421
-chr1	832980	834171	chr1.29	520	0.897575
-chr1	834220	834309	chr1.30	346	0.0402192
-chr1	845033	845448	chr1.31	497	0.71717
-chr1	847812	848512	chr1.32	478	0.589475
-chr1	864905	865029	chr1.33	461	0.481443
-chr1	874965	875487	chr1.34	423	0.278914
-chr1	879344	880327	chr1.35	699	2.94227
-chr1	880399	880708	chr1.36	495	0.706021
-chr1	880819	881023	chr1.37	383	0.127674
-chr1	881317	881911	chr1.38	418	0.256617
-chr1	883868	883904	chr1.39	312	0.002659
-chr1	896391	896556	chr1.40	385	0.135142
-chr1	898579	898621	chr1.41	355	0.0577104
-chr1	898899	899244	chr1.42	465	0.502855
-chr1	899766	899825	chr1.43	370	0.090538
-chr1	900065	900365	chr1.44	380	0.120379
-chr1	915757	916630	chr1.46	503	0.763638
-chr1	916730	917500	chr1.47	497	0.717085
-chr1	918108	918284	chr1.48	364	0.076574
-chr1	933354	933459	chr1.49	334	0.022302
-chr1	934187	936901	chr1.50	633	2.05262
-chr1	941632	942976	chr1.51	724	3.32186
-chr1	950199	950539	chr1.52	379	0.116623
-chr1	950732	950911	chr1.53	397	0.173826
-chr1	951480	952193	chr1.54	540	1.06184
-chr1	959185	959967	chr1.55	547	1.1301
-chr1	974506	974514	chr1.56	464	0.498756
-chr1	974607	975915	chr1.57	511	0.820906
-chr1	976014	976607	chr1.58	520	0.896575
-chr1	977283	977586	chr1.59	476	0.570696
-chr1	977654	977656	chr1.60	321	0.00827205
-chr1	980210	980408	chr1.61	362	0.070928
-chr1	988439	989479	chr1.62	683	2.70895
-chr1	994719	995751	chr1.63	695	2.88776
-chr1	995982	996106	chr1.64	343	0.0347552
-chr1	1007846	1009215	chr1.65	543	1.09033
-chr1	1015954	1016662	chr1.66	844	5.46574
-chr1	1034335	1034386	chr1.67	352	0.0505361
-chr1	1034434	1035191	chr1.68	639	2.12808
-chr1	1035857	1035864	chr1.69	316	0.005078
-chr1	1038865	1039724	chr1.70	632	2.03877
-chr1	1043743	1045133	chr1.71	703	3.00446
-chr1	1045399	1045565	chr1.72	356	0.05951
-chr1	1051338	1055456	chr1.73	562	1.27378
-chr1	1066992	1067071	chr1.74	396	0.170616
-chr1	1074179	1074787	chr1.75	439	0.358819
-chr1	1074991	1075171	chr1.76	399	0.180898
-chr1	1090923	1092369	chr1.77	788	4.3897
-chr1	1092391	1092445	chr1.78	488	0.656287
-chr1	1097165	1097971	chr1.79	708	3.07697
-chr1	1109347	1109587	chr1.80	354	0.054381
-chr1	1111706	1111715	chr1.81	355	0.056866
-chr1	1112293	1113013	chr1.82	609	1.76339
-chr1	1114276	1114340	chr1.83	312	0.00306007
-chr1	1114376	1115977	chr1.84	557	1.22389
-chr1	1116001	1116077	chr1.85	356	0.0594875
-chr1	1116556	1116778	chr1.86	485	0.636473
-chr1	1119001	1120315	chr1.87	692	2.84254
-chr1	1132538	1133672	chr1.88	660	2.39289
-chr1	1147188	1147624	chr1.89	447	0.400542
-chr1	1148692	1149412	chr1.90	593	1.59091
-chr1	1150502	1150712	chr1.91	395	0.166746
-chr1	1175365	1175776	chr1.92	397	0.175746
-chr1	1175855	1175965	chr1.93	390	0.152057
-chr1	1175988	1176265	chr1.94	373	0.100502
-chr1	1176365	1177189	chr1.95	705	3.0325
-chr1	1179837	1179888	chr1.96	317	0.005669
-chr1	1181827	1181950	chr1.97	331	0.0186511
-chr1	1182204	1182342	chr1.98	372	0.096425
-chr1	1183309	1184620	chr1.99	596	1.62052
-chr1	1186006	1186106	chr1.100	387	0.141911
-chr1	1187635	1189712	chr1.101	466	0.512313
-chr1	1190211	1190243	chr1.102	341	0.0312
-chr1	1192080	1192764	chr1.103	514	0.847194
-chr1	1194721	1194953	chr1.104	413	0.23692
-chr1	1206466	1207907	chr1.105	964	8.1342
-chr1	1225896	1226676	chr1.106	677	2.62722
-chr1	1248823	1249818	chr1.107	679	2.65973
-chr1	1259437	1259474	chr1.108	373	0.099368
-chr1	1267142	1267455	chr1.109	467	0.518669
-chr1	1280573	1281286	chr1.110	546	1.12306
-chr1	1282929	1284571	chr1.111	782	4.2808
-chr1	1299611	1300483	chr1.113	508	0.80183
-chr1	1324330	1325361	chr1.114	655	2.33046
-chr1	1330452	1330468	chr1.115	334	0.0224878
-chr1	1330481	1331143	chr1.116	431	0.316867
-chr1	1346249	1347613	chr1.117	532	0.991835
-chr1	1347713	1347813	chr1.118	347	0.0411966
-chr1	1349983	1351025	chr1.119	545	1.10701
-chr1	1419517	1420926	chr1.120	629	1.99595
-chr1	1427488	1428398	chr1.121	525	0.935949
-chr1	1448100	1448474	chr1.122	470	0.536396
-chr1	1452780	1453180	chr1.123	364	0.076725
-chr1	1455704	1455804	chr1.124	345	0.03843
-chr1	1461588	1461788	chr1.125	402	0.193601
-chr1	1491957	1492840	chr1.126	539	1.05258
-chr1	1525496	1525636	chr1.127	366	0.081578
-chr1	1531949	1533247	chr1.128	799	4.59657
-chr1	1560514	1561514	chr1.129	619	1.87645
-chr1	1590384	1590764	chr1.130	410	0.223637
-chr1	1590893	1591133	chr1.131	421	0.273791
-chr1	1594138	1596142	chr1.132	778	4.21174
-chr1	1655537	1655677	chr1.133	377	0.109362
-chr1	1655705	1657274	chr1.134	561	1.26111
-chr1	1663663	1663999	chr1.135	364	0.076725
-chr1	1687411	1688491	chr1.136	608	1.75721
-chr1	1688694	1688834	chr1.137	354	0.054312
-chr1	1691755	1692664	chr1.138	526	0.947746
-chr1	1708812	1708952	chr1.139	377	0.109362
-chr1	1708980	1710540	chr1.140	557	1.22281
-chr1	1740616	1741256	chr1.141	419	0.264632
-chr1	1741318	1741356	chr1.142	319	0.00727334
-chr1	1741824	1743156	chr1.143	772	4.11305
-chr1	1743330	1744816	chr1.144	694	2.86169
-chr1	1746429	1746901	chr1.145	466	0.512036
-chr1	1747199	1747370	chr1.146	366	0.080847
-chr1	1807202	1807442	chr1.147	357	0.061208
-chr1	1808587	1808927	chr1.148	398	0.179818
-chr1	1822336	1822611	chr1.149	464	0.501034
-chr1	1844627	1844854	chr1.150	373	0.099617
-chr1	1852389	1852529	chr1.151	404	0.201567
-chr1	1852929	1853169	chr1.152	382	0.126305
-chr1	1853350	1855972	chr1.153	745	3.66134
-chr1	1869830	1869840	chr1.154	332	0.0200274
-chr1	1869854	1870110	chr1.155	421	0.2737
-chr1	1872207	1873215	chr1.157	847	5.52993
-chr1	1882469	1883811	chr1.158	882	6.24189
-chr1	1907330	1908222	chr1.159	558	1.23049
-chr1	1923744	1923940	chr1.160	390	0.152416
-chr1	1923977	1924078	chr1.161	448	0.405503
-chr1	1959820	1960149	chr1.162	410	0.225941
-chr1	1982813	1983428	chr1.163	494	0.69409
-chr1	1984368	1984428	chr1.164	362	0.071593
-chr1	1989288	1989779	chr1.165	470	0.535642
-chr1	2007586	2007647	chr1.166	400	0.185196
-chr1	2008131	2008215	chr1.167	433	0.328356
-chr1	2008217	2008948	chr1.168	605	1.71627
-chr1	2010135	2010260	chr1.169	350	0.047398
-chr1	2013529	2014584	chr1.170	979	8.49978
-chr1	2055212	2055259	chr1.171	382	0.124886
-chr1	2068581	2068781	chr1.172	381	0.122871
-chr1	2086746	2087226	chr1.173	418	0.25753
-chr1	2090656	2091256	chr1.174	414	0.242561
-chr1	2095779	2096421	chr1.175	536	1.03316
-chr1	2096481	2097513	chr1.176	878	6.17002
-chr1	2103292	2103757	chr1.177	412	0.231373
-chr1	2103804	2103951	chr1.178	390	0.151735
-chr1	2109803	2110443	chr1.179	466	0.507647
-chr1	2112092	2113186	chr1.180	628	1.98414
-chr1	2116483	2116895	chr1.181	556	1.21258
-chr1	2134155	2134284	chr1.182	359	0.064291
-chr1	2137988	2137998	chr1.183	333	0.0212074
-chr1	2138022	2138316	chr1.184	430	0.315656
-chr1	2152859	2153858	chr1.185	721	3.27329
-chr1	2158055	2159299	chr1.186	711	3.11241
-chr1	2162443	2163421	chr1.187	721	3.27972
-chr1	2168224	2169293	chr1.188	809	4.78985
-chr1	2175799	2176777	chr1.189	542	1.08667
-chr1	2190263	2190275	chr1.190	308	0.001444
-chr1	2190962	2191887	chr1.191	945	7.67556
-chr1	2191916	2192099	chr1.192	448	0.408285
-chr1	2192279	2192298	chr1.193	459	0.470934
-chr1	2192819	2196309	chr1.194	666	2.47055
-chr1	2196880	2196980	chr1.195	409	0.221254
-chr1	2197480	2198620	chr1.196	597	1.63065
-chr1	2200780	2201425	chr1.197	516	0.865186
-chr1	2201461	2201525	chr1.198	322	0.00900521
-chr1	2203957	2204865	chr1.199	495	0.703671
-chr1	2218787	2220327	chr1.200	629	2.00121
-chr1	2222381	2223142	chr1.201	508	0.799448
-chr1	2240080	2240229	chr1.202	336	0.024456
-chr1	2242187	2242252	chr1.203	339	0.028898
-chr1	2251956	2252371	chr1.204	470	0.533144
-chr1	2253682	2255082	chr1.205	631	2.01952
-chr1	2263846	2265446	chr1.206	802	4.65529
-chr1	2274218	2274318	chr1.207	394	0.16333
-chr1	2274518	2274818	chr1.208	400	0.184861
-chr1	2274918	2275118	chr1.209	405	0.205095
-chr1	2275146	2275641	chr1.210	462	0.489108
-chr1	2277948	2279581	chr1.211	694	2.86896
-chr1	2281005	2281170	chr1.212	355	0.057667
-chr1	2345305	2345741	chr1.213	584	1.48807
-chr1	2345971	2345977	chr1.214	463	0.493836
-chr1	2354701	2355774	chr1.215	899	6.63001
-chr1	2374003	2374258	chr1.216	379	0.116116
-chr1	2375777	2377035	chr1.217	948	7.74791
-chr1	2377735	2378575	chr1.218	692	2.84491
-chr1	2378809	2378949	chr1.219	406	0.207187
-chr1	2378999	2379885	chr1.220	504	0.768902
-chr1	2379906	2380606	chr1.221	541	1.07024
-chr1	2397286	2397294	chr1.222	348	0.042792
-chr1	2413260	2413261	chr1.223	438	0.352263
-chr1	2430347	2431135	chr1.224	441	0.367269
-chr1	2431624	2431978	chr1.225	424	0.284169
-chr1	2457576	2457707	chr1.226	346	0.039385
-chr1	2459172	2460272	chr1.227	552	1.17653
-chr1	2463388	2463823	chr1.228	417	0.253052
-chr1	2470454	2470461	chr1.229	390	0.150899
-chr1	2486936	2488236	chr1.230	636	2.09041
-chr1	2489257	2490776	chr1.231	817	4.93949
-chr1	2492492	2492761	chr1.232	364	0.0760051
-chr1	2493101	2493146	chr1.233	469	0.531862
-chr1	2493326	2493347	chr1.235	461	0.482003
-chr1	2494419	2494642	chr1.236	341	0.031532
-chr1	2507151	2507330	chr1.237	387	0.141125
-chr1	2509159	2512197	chr1.238	772	4.11993
-chr1	2512208	2512756	chr1.239	642	2.16565
-chr1	2512807	2513247	chr1.240	516	0.860853
-chr1	2528188	2529907	chr1.241	690	2.80766
-chr1	2530087	2530368	chr1.242	432	0.324825
-chr1	2541499	2541739	chr1.243	437	0.346076
-chr1	2541759	2542339	chr1.244	578	1.4257
-chr1	2547635	2548035	chr1.245	549	1.14232
-chr1	2548806	2551026	chr1.246	937	7.48971
-chr1	2592434	2592526	chr1.247	336	0.024189
-chr1	2598191	2598791	chr1.248	445	0.388726
-chr1	2605620	2607520	chr1.249	834	5.268
-chr1	2664089	2664689	chr1.250	471	0.543906
-chr1	2665089	2665155	chr1.251	323	0.0105816
-chr1	2665189	2665259	chr1.252	374	0.103334
-chr1	2665289	2665989	chr1.253	524	0.925015
-chr1	2726150	2726886	chr1.254	549	1.14798
-chr1	2741401	2741593	chr1.255	397	0.174468
-chr1	2761650	2762004	chr1.256	464	0.497814
-chr1	2779686	2780556	chr1.257	750	3.73479
-chr1	2787864	2787900	chr1.258	346	0.04022
-chr1	2803409	2803859	chr1.259	375	0.105857
-chr1	2807226	2807228	chr1.260	308	0.001362
-chr1	2825483	2825625	chr1.261	435	0.34042
-chr1	2834138	2834756	chr1.262	538	1.04609
-chr1	2838065	2838157	chr1.263	345	0.038829
-chr1	2861188	2862281	chr1.264	548	1.13627
-chr1	2952115	2952560	chr1.265	418	0.258463
-chr1	2972843	2973318	chr1.266	411	0.230882
-chr1	2989768	2989968	chr1.267	386	0.137707
-chr1	3009017	3009062	chr1.268	390	0.15157
-chr1	3017175	3017575	chr1.269	456	0.451931
-chr1	3100471	3100558	chr1.270	335	0.023096
-chr1	3100898	3100998	chr1.271	338	0.0268333
-chr1	3101023	3101198	chr1.272	379	0.115724
-chr1	3105089	3105689	chr1.273	448	0.406987
-chr1	3190046	3190546	chr1.274	391	0.155685
-chr1	3364248	3364299	chr1.275	337	0.0257644
-chr1	3364410	3364646	chr1.276	398	0.18047
-chr1	3392559	3393373	chr1.277	587	1.51733
-chr1	3393741	3393850	chr1.278	430	0.314211
-chr1	3394031	3394804	chr1.279	409	0.222675
-chr1	3395156	3395206	chr1.280	353	0.0526742
-chr1	3395208	3395317	chr1.281	385	0.135351
-chr1	3398334	3398339	chr1.282	320	0.00753599
-chr1	3416964	3417115	chr1.283	521	0.904628
-chr1	3423248	3424044	chr1.284	530	0.9811
-chr1	3430716	3431581	chr1.285	656	2.3428
-chr1	3441703	3441928	chr1.286	426	0.295677
-chr1	3470113	3471947	chr1.287	1000	11.4006
-chr1	3475465	3475504	chr1.288	374	0.101467
-chr1	3504471	3505271	chr1.289	527	0.953672
-chr1	3511697	3512037	chr1.290	459	0.466982
-chr1	3512150	3512990	chr1.291	537	1.04137
-chr1	3522919	3523619	chr1.292	433	0.326354
-chr1	3536918	3537783	chr1.293	633	2.04946
-chr1	3550327	3550461	chr1.294	330	0.0169024
-chr1	3550933	3551686	chr1.295	571	1.35693
-chr1	3558392	3559167	chr1.296	563	1.27809
-chr1	3563409	3563437	chr1.297	324	0.0106548
-chr1	3563440	3565944	chr1.298	1000	11.196
-chr1	3588610	3590407	chr1.300	768	4.04642
-chr1	3590997	3591377	chr1.301	376	0.107667
-chr1	3591959	3592119	chr1.302	338	0.0268488
-chr1	3592147	3592218	chr1.303	474	0.558572
-chr1	3596509	3596651	chr1.304	374	0.102515
-chr1	3635398	3635663	chr1.305	583	1.47628
-chr1	3643823	3643991	chr1.306	374	0.103457
-chr1	3663878	3664519	chr1.307	534	1.01189
-chr1	3686655	3687421	chr1.308	750	3.73117
-chr1	3711401	3713059	chr1.309	824	5.07398
-chr1	3715204	3715280	chr1.310	339	0.0290495
-chr1	3715304	3715504	chr1.311	390	0.151907
-chr1	3715577	3716104	chr1.312	540	1.06776
-chr1	3723440	3723532	chr1.313	320	0.00791382
-chr1	3723732	3724032	chr1.314	436	0.341917
-chr1	3724132	3724232	chr1.315	355	0.0573958
-chr1	3727297	3727730	chr1.316	424	0.285042
-chr1	3735696	3736832	chr1.317	824	5.06396
-chr1	3790191	3790391	chr1.318	397	0.173633
-chr1	3790591	3790791	chr1.319	377	0.111306
-chr1	3790891	3790991	chr1.320	363	0.074843
-chr1	3796408	3797763	chr1.321	980	8.53863
-chr1	3830679	3831134	chr1.322	430	0.315135
-chr1	3839363	3841336	chr1.323	781	4.26183
-chr1	3841840	3843168	chr1.324	588	1.52897
-chr1	4046527	4046867	chr1.325	447	0.399924
-chr1	4046958	4047138	chr1.326	414	0.24036
-chr1	4179552	4179952	chr1.327	416	0.249199
-chr1	4263232	4263472	chr1.328	394	0.16575
-chr1	4273382	4273755	chr1.329	746	3.66676
-chr1	4495319	4495376	chr1.330	343	0.03471
-chr1	4604953	4605053	chr1.331	369	0.088698
-chr1	4622971	4623877	chr1.332	552	1.178
-chr1	4744712	4745512	chr1.333	533	1.00327
-chr1	4940852	4941152	chr1.334	396	0.170009
-chr1	5047636	5047838	chr1.335	351	0.048973
-chr1	5048038	5048138	chr1.336	339	0.0282311
-chr1	5056002	5056102	chr1.337	362	0.072234
-chr1	5119853	5119944	chr1.338	330	0.016646
-chr1	5295783	5295854	chr1.339	340	0.030582
-chr1	5299567	5300031	chr1.340	462	0.484579
-chr1	5304398	5305198	chr1.341	521	0.90563
-chr1	5308358	5308368	chr1.342	318	0.006299
-chr1	5314173	5314313	chr1.343	359	0.06435
-chr1	5317356	5317596	chr1.344	412	0.231594
-chr1	5336290	5336503	chr1.345	341	0.032255
-chr1	5417389	5418189	chr1.346	489	0.662748
-chr1	5429980	5430720	chr1.347	501	0.747305
-chr1	5463124	5463804	chr1.348	438	0.352774
-chr1	5476109	5476633	chr1.349	485	0.633405
-chr1	5504277	5504573	chr1.350	433	0.329133
-chr1	5508837	5509421	chr1.351	562	1.26653
-chr1	5631634	5631785	chr1.352	380	0.118948
-chr1	5661217	5661497	chr1.353	384	0.131985
-chr1	5661536	5662716	chr1.354	544	1.09861
-chr1	5664507	5664525	chr1.355	409	0.219854
-chr1	5681109	5681436	chr1.356	358	0.062922
-chr1	5707550	5707830	chr1.357	418	0.258635
-chr1	5707893	5708339	chr1.358	411	0.230736
-chr1	5810885	5811785	chr1.359	487	0.646923
-chr1	5845657	5845897	chr1.360	383	0.128835
-chr1	5905304	5906204	chr1.361	540	1.06385
-chr1	5907432	5907824	chr1.362	470	0.538406
-chr1	5909947	5910847	chr1.363	558	1.2354
-chr1	5953137	5953377	chr1.364	384	0.130998
-chr1	5969567	5970207	chr1.365	435	0.33689
-chr1	5985436	5989627	chr1.366	937	7.48701
-chr1	6020073	6023367	chr1.367	763	3.95216
-chr1	6025268	6025914	chr1.369	416	0.250311
-chr1	6047083	6047181	chr1.370	381	0.123346
-chr1	6051121	6051151	chr1.371	349	0.045605
-chr1	6065059	6065145	chr1.372	367	0.084044
-chr1	6103157	6103198	chr1.373	393	0.160523
-chr1	6103280	6103514	chr1.374	400	0.184768
-chr1	6110849	6110906	chr1.375	322	0.00935
-chr1	6121907	6122607	chr1.376	566	1.3095
-chr1	6139611	6139786	chr1.377	350	0.047781
-chr1	6142543	6142589	chr1.378	347	0.0410937
-chr1	6142845	6143478	chr1.379	507	0.796213
-chr1	6174913	6174926	chr1.380	322	0.00919397
-chr1	6175613	6175672	chr1.381	344	0.037
-chr1	6179651	6179851	chr1.382	371	0.093017
-chr1	6193230	6194465	chr1.383	825	5.09165
-chr1	6194589	6194769	chr1.384	361	0.0694778
-chr1	6199507	6199764	chr1.385	542	1.08144
-chr1	6199776	6199845	chr1.386	470	0.532812
-chr1	6200213	6201182	chr1.387	470	0.532765
-chr1	6203569	6203691	chr1.388	326	0.013056
-chr1	6203924	6204029	chr1.389	427	0.298376
-chr1	6229736	6230720	chr1.390	663	2.43144
-chr1	6230962	6231102	chr1.391	397	0.175743
-chr1	6239308	6239343	chr1.392	490	0.671257
-chr1	6239348	6239881	chr1.393	609	1.76614
-chr1	6240252	6240434	chr1.394	359	0.0644718
-chr1	6240452	6241652	chr1.395	667	2.48376
-chr1	6254059	6254762	chr1.396	619	1.88495
-chr1	6255114	6255608	chr1.397	595	1.61068
-chr1	6276001	6276541	chr1.398	425	0.291287
-chr1	6342254	6343584	chr1.399	612	1.80057
-chr1	6353019	6354469	chr1.400	556	1.21155
-chr1	6359423	6359670	chr1.401	426	0.292977
-chr1	6387410	6388963	chr1.403	833	5.24564
-chr1	6398989	6399799	chr1.404	565	1.29732
-chr1	6408661	6409101	chr1.405	435	0.336793
-chr1	6413979	6414449	chr1.406	415	0.244244
-chr1	6414720	6414782	chr1.407	418	0.258695
-chr1	6417717	6419744	chr1.408	615	1.83352
-chr1	6431850	6432707	chr1.409	534	1.01216
-chr1	6434544	6435100	chr1.410	604	1.70279
-chr1	6441530	6442436	chr1.411	487	0.644963
-chr1	6443498	6444188	chr1.412	421	0.272466
-chr1	6444808	6444908	chr1.413	397	0.174494
-chr1	6453802	6455542	chr1.414	796	4.54512
-chr1	6458957	6460910	chr1.415	715	3.17974
-chr1	6469556	6470536	chr1.416	670	2.53514
-chr1	6479822	6480051	chr1.417	464	0.500152
-chr1	6480191	6481291	chr1.418	606	1.7329
-chr1	6484026	6485952	chr1.419	642	2.16671
-chr1	6485996	6486113	chr1.420	347	0.0424213
-chr1	6487684	6487830	chr1.421	375	0.104822
-chr1	6491298	6492410	chr1.422	690	2.80757
-chr1	6515040	6515180	chr1.423	329	0.016359
-chr1	6539345	6539585	chr1.424	439	0.358308
-chr1	6539609	6540252	chr1.425	549	1.14281
-chr1	6548511	6549715	chr1.426	713	3.1525
-chr1	6573604	6575104	chr1.427	805	4.70201
-chr1	6585740	6585839	chr1.428	354	0.054151
-chr1	6593261	6594397	chr1.429	564	1.28992
-chr1	6595174	6596474	chr1.430	693	2.85379
-chr1	6596574	6596606	chr1.431	335	0.0227389
-chr1	6596789	6598555	chr1.433	656	2.34421
-chr1	6606848	6609592	chr1.434	856	5.71167
-chr1	6618971	6620258	chr1.435	727	3.36245
-chr1	6640224	6640764	chr1.436	524	0.925278
-chr1	6640789	6641228	chr1.437	546	1.11628
-chr1	6645301	6645401	chr1.438	358	0.062647
-chr1	6645465	6645501	chr1.439	316	0.00506949
-chr1	6695708	6696512	chr1.440	700	2.9551
-chr1	6714442	6714554	chr1.441	356	0.059668
-chr1	6721933	6722127	chr1.442	369	0.089852
-chr1	6728819	6729659	chr1.443	523	0.919928
-chr1	6736584	6736598	chr1.444	319	0.007138
-chr1	6737420	6737700	chr1.445	444	0.384274
-chr1	6737762	6738402	chr1.446	485	0.633369
-chr1	6778180	6780361	chr1.447	924	7.17666
-chr1	6780589	6781263	chr1.448	432	0.325742
-chr1	6956891	6957167	chr1.449	397	0.174899
-chr1	6957391	6957964	chr1.450	504	0.769395
-chr1	7113515	7114155	chr1.451	440	0.363658
-chr1	7212679	7212780	chr1.452	336	0.024595
-chr1	7231995	7232034	chr1.453	314	0.004009
-chr1	7459398	7459598	chr1.454	372	0.096016
-chr1	7641508	7641952	chr1.455	553	1.18241
-chr1	7661729	7662412	chr1.456	530	0.979164
-chr1	7663793	7664125	chr1.457	452	0.430045
-chr1	7664193	7665093	chr1.458	492	0.679594
-chr1	7671588	7671988	chr1.459	396	0.172629
-chr1	7674459	7675524	chr1.460	582	1.47493
-chr1	7698392	7699989	chr1.461	672	2.55111
-chr1	7703712	7704052	chr1.462	338	0.027123
-chr1	7719286	7719826	chr1.463	436	0.343389
-chr1	7719860	7719966	chr1.464	318	0.00611124
-chr1	7720728	7721328	chr1.465	405	0.203769
-chr1	7727749	7728266	chr1.466	379	0.116645
-chr1	7730905	7731605	chr1.467	378	0.1146
-chr1	7746847	7747449	chr1.468	459	0.467609
-chr1	7761778	7761876	chr1.469	331	0.018436
-chr1	7764993	7765980	chr1.470	764	3.96799
-chr1	7776325	7776328	chr1.471	311	0.002269
-chr1	7777665	7779419	chr1.472	858	5.75116
-chr1	7821343	7822543	chr1.473	549	1.14715
-chr1	7880838	7881078	chr1.474	335	0.023662
-chr1	7897160	7897302	chr1.475	380	0.119257
-chr1	7897330	7897335	chr1.476	331	0.0180441
-chr1	7925170	7925557	chr1.477	462	0.485144
-chr1	7936502	7937182	chr1.478	539	1.06055
-chr1	7937244	7937484	chr1.479	421	0.272625
-chr1	7943310	7943950	chr1.480	537	1.04177
-chr1	7947986	7949355	chr1.481	660	2.39798
-chr1	7955338	7957402	chr1.482	824	5.07687
-chr1	7976547	7977227	chr1.483	536	1.03135
-chr1	8009415	8009785	chr1.484	428	0.305295
-chr1	8018822	8021099	chr1.485	612	1.80179
-chr1	8041607	8042107	chr1.486	376	0.10901
-chr1	8107706	8107849	chr1.487	372	0.096754
-chr1	8132243	8132543	chr1.488	382	0.125108
-chr1	8143554	8143894	chr1.489	433	0.327808
-chr1	8143933	8144213	chr1.490	480	0.597669
-chr1	8146312	8146674	chr1.491	439	0.358509
-chr1	8146925	8147810	chr1.492	582	1.47331
-chr1	8148073	8148653	chr1.493	499	0.732333
-chr1	8163643	8165099	chr1.494	652	2.28248
-chr1	8176501	8177381	chr1.495	624	1.93584
-chr1	8188192	8188532	chr1.496	425	0.289221
-chr1	8188549	8188889	chr1.497	403	0.197338
-chr1	8226358	8227023	chr1.498	493	0.690844
-chr1	8227114	8227294	chr1.499	431	0.318179
-chr1	8308676	8308954	chr1.500	430	0.315372
-chr1	8311985	8312979	chr1.501	709	3.08172
-chr1	8343035	8343828	chr1.502	627	1.97195
-chr1	8365384	8365684	chr1.503	399	0.180655
-chr1	8367944	8368781	chr1.504	392	0.158363
-chr1	8377207	8377958	chr1.505	485	0.633445
-chr1	8378241	8378299	chr1.506	319	0.00705539
-chr1	8389754	8391034	chr1.507	582	1.47437
-chr1	8391225	8391458	chr1.508	427	0.300652
-chr1	8391775	8392255	chr1.509	506	0.785274
-chr1	8392257	8392497	chr1.510	451	0.425152
-chr1	8401847	8401987	chr1.511	411	0.229506
-chr1	8401988	8403428	chr1.512	582	1.47017
-chr1	8403494	8403828	chr1.513	426	0.295087
-chr1	8406765	8406965	chr1.514	365	0.077851
-chr1	8413105	8413405	chr1.515	392	0.157024
-chr1	8415222	8415722	chr1.516	416	0.248503
-chr1	8416622	8419418	chr1.517	615	1.83419
-chr1	8421702	8422460	chr1.518	525	0.933497
-chr1	8443136	8443793	chr1.519	490	0.667712
-chr1	8445710	8446070	chr1.520	406	0.20897
-chr1	8455610	8455710	chr1.521	393	0.162064
-chr1	8455810	8456023	chr1.522	352	0.0506586
-chr1	8457410	8458110	chr1.523	481	0.60741
-chr1	8467012	8467112	chr1.524	392	0.15691
-chr1	8467212	8467289	chr1.525	309	0.00179666
-chr1	8473205	8473445	chr1.526	402	0.194979
-chr1	8504074	8505261	chr1.527	639	2.12098
-chr1	8505309	8505549	chr1.528	457	0.455829
-chr1	8518014	8521014	chr1.529	638	2.11
-chr1	8539553	8539588	chr1.530	308	0.001211
-chr1	8555596	8556022	chr1.531	407	0.211031
-chr1	8556483	8556583	chr1.532	338	0.027828
-chr1	8596816	8597258	chr1.533	505	0.774181
-chr1	8597269	8597809	chr1.534	540	1.06175
-chr1	8598776	8598916	chr1.535	402	0.193151
-chr1	8598936	8599276	chr1.536	431	0.316757
-chr1	8617713	8618353	chr1.537	421	0.272994
-chr1	8626317	8627317	chr1.538	549	1.14922
-chr1	8632762	8632902	chr1.539	385	0.133882
-chr1	8661178	8661718	chr1.540	438	0.353218
-chr1	8664366	8664706	chr1.541	407	0.211497
-chr1	8665732	8665919	chr1.542	372	0.096127
-chr1	8695228	8696331	chr1.543	715	3.176
-chr1	8697421	8698862	chr1.544	585	1.50209
-chr1	8698906	8699146	chr1.545	425	0.287892
-chr1	8706288	8707511	chr1.546	569	1.3331
-chr1	8731775	8731915	chr1.547	377	0.110385
-chr1	8731995	8732575	chr1.548	466	0.509635
-chr1	8809256	8809314	chr1.549	359	0.065604
-chr1	8810776	8813089	chr1.550	850	5.58414
-chr1	8824007	8824219	chr1.551	395	0.167879
-chr1	8843233	8843545	chr1.552	497	0.718104
-chr1	8853785	8854065	chr1.553	413	0.237218
-chr1	8855301	8855801	chr1.554	367	0.084444
-chr1	8868031	8868671	chr1.555	447	0.398462
-chr1	8872166	8873910	chr1.556	798	4.57685
-chr1	8894251	8894279	chr1.557	392	0.158434
-chr1	8894282	8894552	chr1.558	475	0.567848
-chr1	8907813	8908393	chr1.559	416	0.252026
-chr1	8912501	8912881	chr1.560	502	0.754464
-chr1	8920942	8921307	chr1.561	381	0.122501
-chr1	8939414	8940401	chr1.562	492	0.681736
-chr1	8957412	8957500	chr1.563	368	0.085716
-chr1	8961522	8961662	chr1.564	346	0.0405167
-chr1	8961759	8962339	chr1.565	448	0.408565
-chr1	8964588	8964813	chr1.566	416	0.248209
-chr1	8965060	8965759	chr1.567	592	1.57161
-chr1	8980485	8980585	chr1.568	326	0.012831
-chr1	8981022	8981340	chr1.569	424	0.287339
-chr1	8981392	8981424	chr1.570	402	0.193757
-chr1	8981992	8982827	chr1.571	545	1.1102
-chr1	8999149	8999943	chr1.572	580	1.44595
-chr1	9096355	9096448	chr1.573	349	0.044431
-chr1	9104051	9104214	chr1.574	333	0.021132
-chr1	9105039	9105050	chr1.575	322	0.00894791
-chr1	9105071	9105545	chr1.576	496	0.713335
-chr1	9116162	9116802	chr1.577	532	0.998398
-chr1	9122811	9124711	chr1.578	876	6.11381
-chr1	9136473	9136935	chr1.579	495	0.706033
-chr1	9175634	9176189	chr1.580	547	1.13023
-chr1	9176362	9176368	chr1.581	317	0.00586586
-chr1	9176450	9176468	chr1.582	331	0.018376
-chr1	9176470	9176541	chr1.583	325	0.0121209
-chr1	9177287	9177603	chr1.584	420	0.266916
-chr1	9190382	9191375	chr1.585	623	1.92201
-chr1	9195449	9196089	chr1.586	428	0.302592
-chr1	9228264	9229757	chr1.587	796	4.53492
-chr1	9229896	9229910	chr1.588	304	0.000402749
-chr1	9233829	9234632	chr1.589	525	0.934048
-chr1	9261379	9261919	chr1.590	519	0.889613
-chr1	9270017	9270163	chr1.591	490	0.66517
-chr1	9278539	9278796	chr1.592	454	0.438251
-chr1	9283189	9283674	chr1.593	456	0.452064
-chr1	9283688	9283928	chr1.594	394	0.166216
-chr1	9284257	9285108	chr1.595	431	0.320773
-chr1	9286721	9287687	chr1.596	650	2.25714
-chr1	9287823	9287962	chr1.597	492	0.679897
-chr1	9288179	9288206	chr1.598	347	0.0421743
-chr1	9288642	9289182	chr1.599	468	0.525884
-chr1	9289184	9289282	chr1.600	358	0.0623004
-chr1	9394854	9394931	chr1.601	333	0.020678
-chr1	9406782	9407951	chr1.602	539	1.05838
-chr1	9411837	9412817	chr1.603	579	1.43638
-chr1	9420268	9421248	chr1.604	679	2.64855
-chr1	9422600	9423877	chr1.605	717	3.21228
-chr1	9449753	9449853	chr1.606	341	0.0322128
-chr1	9449953	9450569	chr1.607	573	1.37542
-chr1	9467097	9467337	chr1.608	392	0.15655
-chr1	9467637	9467837	chr1.609	368	0.0858662
-chr1	9485361	9485821	chr1.610	513	0.840315
-chr1	9489645	9489876	chr1.611	413	0.235815
-chr1	9489953	9490033	chr1.612	415	0.247304
-chr1	9533273	9535021	chr1.613	709	3.08609
-chr1	9553064	9553181	chr1.614	350	0.0477783
-chr1	9553783	9554331	chr1.615	437	0.347944
-chr1	9568019	9568099	chr1.616	330	0.016923
-chr1	9582594	9583420	chr1.617	903	6.69798
-chr1	9583449	9584334	chr1.618	506	0.787083
-chr1	9610065	9610145	chr1.619	342	0.032849
-chr1	9610260	9610283	chr1.620	373	0.09963
-chr1	9621183	9621955	chr1.622	691	2.82618
-chr1	9622147	9622287	chr1.623	401	0.191001
-chr1	9622579	9624821	chr1.624	696	2.89883
-chr1	9645580	9646153	chr1.625	442	0.371898
-chr1	9646271	9648303	chr1.626	646	2.21344
-chr1	9648349	9649129	chr1.627	520	0.898129
-chr1	9649348	9650028	chr1.628	455	0.4443
-chr1	9681057	9681092	chr1.629	335	0.0229328
-chr1	9681190	9682723	chr1.630	582	1.47354
-chr1	9683237	9684175	chr1.631	732	3.45277
-chr1	9708410	9709147	chr1.632	562	1.27224
-chr1	9709689	9710489	chr1.633	529	0.968673
-chr1	9710538	9710589	chr1.634	343	0.0341791
-chr1	9711289	9711317	chr1.635	332	0.0199725
-chr1	9711389	9712729	chr1.636	770	4.0696
-chr1	9712751	9712891	chr1.637	398	0.178471
-chr1	9716067	9716402	chr1.638	429	0.309362
-chr1	9719049	9719682	chr1.639	549	1.14888
-chr1	9722503	9724028	chr1.640	651	2.27965
-chr1	9724115	9724128	chr1.641	309	0.0015425
-chr1	9766728	9766968	chr1.642	386	0.137728
-chr1	9778793	9779291	chr1.643	463	0.490789
-chr1	9782028	9782274	chr1.644	443	0.381381
-chr1	9817059	9817732	chr1.645	448	0.408183
-chr1	9817953	9820336	chr1.646	868	5.94748
-chr1	9820415	9820651	chr1.647	439	0.359755
-chr1	9830856	9831496	chr1.648	496	0.712757
-chr1	9844382	9845378	chr1.649	558	1.22972
-chr1	9861218	9862258	chr1.650	583	1.47632
-chr1	9868810	9869815	chr1.651	631	2.01853
-chr1	9876719	9877271	chr1.652	477	0.580527
-chr1	9903639	9905821	chr1.653	981	8.54314
-chr1	9926380	9926459	chr1.654	357	0.060471
-chr1	9936538	9938255	chr1.655	642	2.1585
-chr1	9944645	9945128	chr1.656	542	1.08591
-chr1	9991451	9991619	chr1.657	362	0.0722512
-chr1	9991905	9992075	chr1.658	430	0.312042
-chr1	10026446	10027898	chr1.659	901	6.66041
-chr1	10152497	10152897	chr1.660	415	0.244103
-chr1	10203931	10205596	chr1.661	844	5.46755
-chr1	10252928	10253558	chr1.662	453	0.436453
-chr1	10267847	10268147	chr1.663	398	0.179382
-chr1	10302008	10302908	chr1.664	555	1.20448
-chr1	10340217	10340457	chr1.665	380	0.118807
-chr1	10340474	10340654	chr1.666	353	0.0524881
-chr1	10368060	10368099	chr1.667	339	0.028562
-chr1	10392571	10395144	chr1.668	908	6.82367
-chr1	10422302	10422338	chr1.669	363	0.0739107
-chr1	10422348	10422721	chr1.670	535	1.02426
-chr1	10424138	10425705	chr1.671	776	4.17679
-chr1	10430996	10431476	chr1.672	414	0.242571
-chr1	10465584	10466024	chr1.673	422	0.276309
-chr1	10466142	10467509	chr1.674	701	2.9744
-chr1	10468986	10469846	chr1.675	639	2.11803
-chr1	10488894	10490094	chr1.676	637	2.09619
-chr1	10492577	10492817	chr1.677	354	0.054395
-chr1	10501511	10502108	chr1.678	445	0.390985
-chr1	10502491	10502504	chr1.679	348	0.042946
-chr1	10504244	10504584	chr1.680	431	0.318759
-chr1	10504616	10506302	chr1.681	680	2.67308
-chr1	10513400	10513700	chr1.682	395	0.167584
-chr1	10538500	10538537	chr1.683	308	0.00122817
-chr1	10538741	10538822	chr1.684	327	0.013649
-chr1	10589375	10589975	chr1.685	449	0.410125
-chr1	10632536	10633579	chr1.686	570	1.34375
-chr1	10646692	10646717	chr1.687	382	0.124599
-chr1	10661090	10661197	chr1.688	397	0.175384
-chr1	10686500	10689884	chr1.689	1000	9.21871
-chr1	10690597	10690937	chr1.690	347	0.041224
-chr1	10749912	10750903	chr1.691	614	1.81912
-chr1	10772740	10773080	chr1.692	377	0.109684
-chr1	10778350	10778391	chr1.693	318	0.005996
-chr1	10786017	10786025	chr1.694	324	0.010846
-chr1	10861097	10861213	chr1.695	444	0.384366
-chr1	10861380	10862435	chr1.696	640	2.1315
-chr1	10866122	10866302	chr1.697	371	0.095126
-chr1	10882982	10883087	chr1.698	426	0.294169
-chr1	10891540	10891604	chr1.699	320	0.007629
-chr1	10898133	10899553	chr1.700	514	0.849986
-chr1	10904157	10904210	chr1.701	410	0.224514
-chr1	10904269	10904564	chr1.702	469	0.528286
-chr1	10911375	10911665	chr1.703	431	0.316975
-chr1	10912049	10912921	chr1.704	516	0.861241
-chr1	10926584	10926733	chr1.705	359	0.065068
-chr1	10933863	10935019	chr1.706	510	0.817714
-chr1	10936200	10936966	chr1.707	506	0.786559
-chr1	10955303	10955741	chr1.708	543	1.09428
-chr1	10959321	10959801	chr1.709	477	0.583446
-chr1	10960104	10960341	chr1.710	425	0.290026
-chr1	10990398	10990778	chr1.711	405	0.206693
-chr1	11006124	11006152	chr1.712	338	0.0274196
-chr1	11006373	11008013	chr1.713	765	3.99066
-chr1	11018515	11019115	chr1.714	405	0.203476
-chr1	11024710	11024910	chr1.715	397	0.174439
-chr1	11031646	11032526	chr1.716	674	2.57742
-chr1	11032603	11032843	chr1.717	438	0.354543
-chr1	11053181	11053281	chr1.718	324	0.0114404
-chr1	11053875	11055539	chr1.719	935	7.44763
-chr1	11093526	11094719	chr1.720	760	3.90018
-chr1	11138750	11139150	chr1.721	452	0.428346
-chr1	11207178	11207878	chr1.722	487	0.64576
-chr1	11221841	11222026	chr1.723	380	0.1194
-chr1	11236089	11236216	chr1.724	452	0.429745
-chr1	11240175	11241255	chr1.725	549	1.14549
-chr1	11256285	11257525	chr1.726	833	5.23514
-chr1	11266912	11267010	chr1.727	440	0.363964
-chr1	11267052	11268289	chr1.728	720	3.26155
-chr1	11275264	11275760	chr1.729	511	0.826675
-chr1	11288942	11289089	chr1.730	364	0.076249
-chr1	11306190	11306330	chr1.732	391	0.153405
-chr1	11306357	11306597	chr1.733	454	0.438669
-chr1	11306897	11306997	chr1.734	331	0.0179042
-chr1	11314602	11314779	chr1.735	365	0.078178
-chr1	11331880	11331885	chr1.736	329	0.0160068
-chr1	11331990	11332094	chr1.737	354	0.053898
-chr1	11333774	11333923	chr1.738	403	0.197859
-chr1	11348931	11349031	chr1.739	359	0.0657591
-chr1	11349331	11349631	chr1.740	447	0.401474
-chr1	11378211	11378740	chr1.741	439	0.356991
-chr1	11472644	11473841	chr1.742	605	1.71862
-chr1	11474475	11474725	chr1.743	545	1.10582
-chr1	11532620	11532693	chr1.744	338	0.026821
-chr1	11548123	11548303	chr1.745	370	0.0902696
-chr1	11548367	11548507	chr1.746	391	0.154725
-chr1	11636532	11637090	chr1.747	528	0.962523
-chr1	11640057	11640342	chr1.748	545	1.11199
-chr1	11643261	11643263	chr1.749	454	0.442281
-chr1	11643310	11643450	chr1.750	372	0.0964662
-chr1	11644166	11645286	chr1.751	631	2.02555
-chr1	11648139	11648395	chr1.752	374	0.10208
-chr1	11648444	11649651	chr1.753	535	1.02368
-chr1	11649814	11649862	chr1.754	439	0.360995
-chr1	11658259	11659370	chr1.755	680	2.66911
-chr1	11674833	11676363	chr1.756	755	3.81803
-chr1	11685899	11685963	chr1.757	348	0.0427532
-chr1	11686103	11686203	chr1.758	386	0.137489
-chr1	11686723	11686803	chr1.759	358	0.0624899
-chr1	11687143	11687225	chr1.760	347	0.0419641
-chr1	11687275	11687853	chr1.761	421	0.270193
-chr1	11700314	11700321	chr1.762	320	0.007512
-chr1	11705512	11705965	chr1.763	454	0.440738
-chr1	11713519	11714464	chr1.764	641	2.14917
-chr1	11724399	11724538	chr1.765	324	0.0111745
-chr1	11724656	11725336	chr1.766	531	0.98641
-chr1	11730045	11731533	chr1.767	644	2.19209
-chr1	11734375	11735216	chr1.768	503	0.765884
-chr1	11735248	11735477	chr1.769	393	0.159503
-chr1	11743298	11743951	chr1.770	589	1.54117
-chr1	11756894	11757005	chr1.771	403	0.199074
-chr1	11797494	11798391	chr1.772	666	2.46757
-chr1	11798736	11799516	chr1.773	589	1.54157
-chr1	11799528	11801368	chr1.774	876	6.12942
-chr1	11832726	11833584	chr1.775	654	2.31091
-chr1	11839882	11840382	chr1.776	461	0.479399
-chr1	11853568	11854246	chr1.777	502	0.757542
-chr1	11888103	11888671	chr1.778	548	1.13601
-chr1	11900015	11900148	chr1.779	366	0.0825749
-chr1	11900247	11900335	chr1.780	400	0.18488
-chr1	11901991	11902909	chr1.781	608	1.7513
-chr1	11902976	11903612	chr1.782	711	3.12403
-chr1	11903696	11904564	chr1.783	518	0.882039
-chr1	11904863	11905003	chr1.784	396	0.170739
-chr1	11919310	11919389	chr1.785	352	0.050833
-chr1	11920555	11921134	chr1.786	637	2.09438
-chr1	11928312	11929587	chr1.787	706	3.04291
-chr1	11973919	11975541	chr1.788	778	4.21722
-chr1	11975727	11975967	chr1.789	434	0.332081
-chr1	12013365	12014345	chr1.790	869	5.96891
-chr1	12041403	12042004	chr1.791	453	0.435287
-chr1	12058298	12059198	chr1.792	505	0.780643
-chr1	12060328	12060406	chr1.793	321	0.00834494
-chr1	12060419	12060530	chr1.794	375	0.105754
-chr1	12072388	12072482	chr1.795	309	0.001827
-chr1	12081725	12083553	chr1.796	529	0.973503
-chr1	12083592	12084172	chr1.797	473	0.552283
-chr1	12100660	12100749	chr1.798	339	0.0294
-chr1	12112953	12113194	chr1.799	434	0.331642
-chr1	12119325	12119399	chr1.800	378	0.112809
-chr1	12127227	12127737	chr1.801	571	1.35524
-chr1	12137135	12138575	chr1.802	516	0.860251
-chr1	12144761	12145329	chr1.803	504	0.773191
-chr1	12146431	12146852	chr1.804	370	0.092743
-chr1	12147573	12148060	chr1.805	426	0.29298
-chr1	12152020	12152520	chr1.807	457	0.455083
-chr1	12154183	12154374	chr1.808	398	0.17961
-chr1	12155721	12155925	chr1.809	362	0.070915
-chr1	12156003	12156605	chr1.810	505	0.780809
-chr1	12160994	12161705	chr1.811	491	0.678695
-chr1	12162251	12162338	chr1.812	367	0.083161
-chr1	12166143	12166283	chr1.813	386	0.137527
-chr1	12166483	12166623	chr1.814	390	0.152242
-chr1	12166685	12166825	chr1.815	367	0.0831564
-chr1	12167125	12167365	chr1.816	365	0.0779965
-chr1	12167457	12168531	chr1.817	665	2.45889
-chr1	12171747	12172044	chr1.818	435	0.336281
-chr1	12172089	12173870	chr1.819	626	1.95922
-chr1	12183907	12183974	chr1.820	344	0.035861
-chr1	12197940	12198104	chr1.821	394	0.164764
-chr1	12198287	12199067	chr1.822	551	1.16823
-chr1	12202922	12203798	chr1.823	586	1.51165
-chr1	12204860	12205296	chr1.824	582	1.4676
-chr1	12223965	12223992	chr1.825	357	0.0617072
-chr1	12224082	12224704	chr1.826	776	4.18161
-chr1	12225014	12225192	chr1.827	360	0.0667278
-chr1	12225392	12225556	chr1.828	334	0.022319
-chr1	12237712	12238106	chr1.830	394	0.162787
-chr1	12238306	12238406	chr1.831	374	0.102884
-chr1	12250439	12251019	chr1.832	430	0.314475
-chr1	12296646	12296833	chr1.833	374	0.102431
-chr1	12308740	12309003	chr1.834	382	0.123975
-chr1	12332362	12333062	chr1.835	449	0.41104
-chr1	12336091	12336191	chr1.836	395	0.167755
-chr1	12336391	12336891	chr1.837	496	0.70959
-chr1	12338572	12340898	chr1.838	600	1.65857
-chr1	12379179	12380859	chr1.839	573	1.38276
-chr1	12402071	12402250	chr1.840	372	0.095808
-chr1	12404145	12404785	chr1.841	439	0.357204
-chr1	12427890	12428967	chr1.842	549	1.14903
-chr1	12429946	12430557	chr1.843	452	0.430647
-chr1	12430657	12430757	chr1.844	332	0.0193219
-chr1	12432758	12433138	chr1.845	450	0.419825
-chr1	12442728	12444136	chr1.846	576	1.40849
-chr1	12447658	12448191	chr1.847	393	0.159936
-chr1	12456074	12456274	chr1.849	381	0.123171
-chr1	12466961	12468243	chr1.850	579	1.44035
-chr1	12468308	12468343	chr1.851	317	0.00565047
-chr1	12469713	12470813	chr1.852	577	1.42181
-chr1	12472613	12473713	chr1.853	592	1.57865
-chr1	12474674	12475574	chr1.854	499	0.732854
-chr1	12504326	12505648	chr1.855	694	2.86522
-chr1	12507812	12508452	chr1.856	460	0.476398
-chr1	12589337	12590109	chr1.857	527	0.95416
-chr1	12595533	12595885	chr1.858	538	1.04484
-chr1	12595964	12596007	chr1.859	381	0.122329
-chr1	12598333	12599059	chr1.860	634	2.0554
-chr1	12602441	12602921	chr1.861	437	0.347268
-chr1	12609975	12615062	chr1.862	681	2.67612
-chr1	12628983	12629038	chr1.863	328	0.01499
-chr1	12653139	12653750	chr1.864	585	1.49641
-chr1	12709964	12710204	chr1.865	392	0.158386
-chr1	13536563	13536663	chr1.866	365	0.079255
-chr1	13648290	13648564	chr1.867	396	0.170599
-chr1	13648630	13648930	chr1.868	394	0.164951
-chr1	13662441	13662743	chr1.869	376	0.106974
-chr1	13664935	13665135	chr1.870	385	0.136126
-chr1	13737241	13738053	chr1.871	550	1.15861
-chr1	13771156	13773437	chr1.872	602	1.68301
-chr1	13774089	13774979	chr1.873	568	1.32514
-chr1	13802090	13803586	chr1.874	669	2.51079
-chr1	13805063	13805403	chr1.875	469	0.529197
-chr1	13805417	13805657	chr1.876	408	0.21799
-chr1	13806857	13807057	chr1.877	402	0.194273
-chr1	13807157	13807258	chr1.878	366	0.0805917
-chr1	13820234	13821790	chr1.879	863	5.85212
-chr1	13860441	13860681	chr1.881	405	0.206331
-chr1	13860716	13860994	chr1.882	425	0.289412
-chr1	13866367	13866907	chr1.883	419	0.263851
-chr1	13869148	13870002	chr1.884	499	0.730528
-chr1	14032227	14032506	chr1.885	412	0.232528
-chr1	14111264	14111804	chr1.886	402	0.192342
-chr1	14175862	14176462	chr1.887	401	0.190955
-chr1	14261116	14261256	chr1.888	348	0.043671
-chr1	14377545	14378045	chr1.889	447	0.398278
-chr1	14606946	14607186	chr1.890	354	0.054381
-chr1	14778554	14778888	chr1.891	414	0.240023
-chr1	14906714	14907214	chr1.892	434	0.333813
-chr1	14995701	14996075	chr1.893	565	1.3023
-chr1	14996277	14996382	chr1.894	466	0.512972
-chr1	15040834	15041229	chr1.895	431	0.319072
-chr1	15090292	15090325	chr1.896	331	0.018017
-chr1	15136259	15136736	chr1.897	448	0.404303
-chr1	15162138	15162749	chr1.898	409	0.221743
-chr1	15172653	15172993	chr1.899	443	0.377085
-chr1	15173052	15173192	chr1.900	393	0.160083
-chr1	15173226	15173392	chr1.901	352	0.0515823
-chr1	15200339	15200879	chr1.902	543	1.08883
-chr1	15209631	15210311	chr1.903	486	0.641895
-chr1	15257215	15257749	chr1.904	388	0.144293
-chr1	15276886	15277426	chr1.905	449	0.409087
-chr1	15394922	15395202	chr1.906	453	0.432337
-chr1	15395205	15395885	chr1.907	517	0.869571
-chr1	15395960	15396200	chr1.908	417	0.254147
-chr1	15404605	15405145	chr1.909	472	0.549452
-chr1	15413596	15414121	chr1.910	426	0.294237
-chr1	15417888	15418021	chr1.911	367	0.082711
-chr1	15480449	15480689	chr1.912	440	0.364072
-chr1	15480762	15483101	chr1.913	657	2.35582
-chr1	15483501	15484141	chr1.914	451	0.420121
-chr1	15488902	15489744	chr1.915	527	0.95526
-chr1	15502704	15503364	chr1.916	604	1.70467
-chr1	15523081	15523221	chr1.917	380	0.119752
-chr1	15595510	15597650	chr1.918	922	7.1369
-chr1	15597865	15599193	chr1.919	750	3.74345
-chr1	15649465	15650083	chr1.920	490	0.667183
-chr1	15650330	15651770	chr1.921	670	2.52282
-chr1	15655458	15655571	chr1.922	330	0.017011
-chr1	15656213	15656968	chr1.923	611	1.79092
-chr1	15674755	15675864	chr1.924	788	4.39598
-chr1	15688133	15690546	chr1.925	724	3.31213
-chr1	15733832	15734032	chr1.926	375	0.106116
-chr1	15755232	15755432	chr1.928	411	0.229849
-chr1	15755792	15757966	chr1.929	723	3.30323
-chr1	15768518	15769498	chr1.930	615	1.83402
-chr1	15769591	15769971	chr1.931	443	0.378344
-chr1	15812858	15813715	chr1.932	620	1.88854
-chr1	15828323	15828328	chr1.933	310	0.002096
-chr1	15829882	15830047	chr1.934	441	0.36691
-chr1	15830227	15830286	chr1.935	445	0.389135
-chr1	15830395	15830629	chr1.936	529	0.972392
-chr1	15863863	15864128	chr1.937	458	0.465222
-chr1	15875248	15875369	chr1.938	366	0.080629
-chr1	15887454	15887600	chr1.939	385	0.135358
-chr1	15905267	15905365	chr1.940	339	0.0289332
-chr1	15905461	15908288	chr1.941	827	5.1255
-chr1	15918864	15922205	chr1.942	738	3.54094
-chr1	15958522	15958769	chr1.943	419	0.264563
-chr1	15996735	15997035	chr1.944	414	0.239623
-chr1	16021081	16022481	chr1.945	707	3.05552
-chr1	16022581	16023617	chr1.946	452	0.430443
-chr1	16037778	16038658	chr1.947	505	0.776284
-chr1	16047135	16048662	chr1.948	774	4.14074
-chr1	16066441	16066479	chr1.949	331	0.018547
-chr1	16080746	16081381	chr1.950	441	0.371092
-chr1	16084523	16084632	chr1.951	456	0.450871
-chr1	16084650	16084783	chr1.952	344	0.0365067
-chr1	16127613	16128489	chr1.953	678	2.6351
-chr1	16142110	16142395	chr1.954	480	0.603216
-chr1	16145119	16145707	chr1.955	699	2.9408
-chr1	16145724	16145764	chr1.956	468	0.521564
-chr1	16150588	16151175	chr1.957	595	1.60769
-chr1	16215862	16216336	chr1.958	441	0.369728
-chr1	16226595	16227829	chr1.959	583	1.48114
-chr1	16229788	16230117	chr1.960	487	0.64524
-chr1	16231910	16232110	chr1.961	368	0.085952
-chr1	16233262	16233351	chr1.962	427	0.297411
-chr1	16233531	16234692	chr1.963	623	1.93145
-chr1	16239119	16240074	chr1.964	604	1.71212
-chr1	16259549	16259795	chr1.965	424	0.284513
-chr1	16259815	16259883	chr1.966	459	0.471239
-chr1	16277952	16279335	chr1.967	772	4.10972
-chr1	16287820	16289983	chr1.968	719	3.23859
-chr1	16307757	16309643	chr1.969	701	2.963
-chr1	16316085	16316553	chr1.970	459	0.469429
-chr1	16335846	16336486	chr1.971	442	0.372348
-chr1	16385123	16385373	chr1.972	375	0.105099
-chr1	16385463	16385803	chr1.973	369	0.0889854
-chr1	16423272	16424769	chr1.974	754	3.80381
-chr1	16424803	16425083	chr1.975	498	0.722923
-chr1	16438330	16440076	chr1.976	711	3.11638
-chr1	16448707	16448947	chr1.977	376	0.108169
-chr1	16458706	16458814	chr1.978	401	0.189876
-chr1	16459154	16459289	chr1.979	371	0.0930393
-chr1	16459554	16459754	chr1.980	372	0.0972496
-chr1	16492328	16492973	chr1.981	564	1.29202
-chr1	16511879	16513759	chr1.982	716	3.19559
-chr1	16524480	16524580	chr1.983	370	0.091235
-chr1	16567461	16567841	chr1.984	349	0.045555
-chr1	16570611	16571718	chr1.985	689	2.79814
-chr1	16584704	16585284	chr1.986	529	0.9694
-chr1	16585413	16586501	chr1.987	591	1.55995
-chr1	16586544	16587124	chr1.988	552	1.178
-chr1	16592295	16593134	chr1.989	526	0.945032
-chr1	16605956	16607226	chr1.990	578	1.42612
-chr1	16607330	16607426	chr1.991	331	0.018543
-chr1	16650721	16651561	chr1.992	495	0.703933
-chr1	16657017	16657717	chr1.993	447	0.399027
-chr1	16663475	16664375	chr1.994	538	1.05196
-chr1	16684068	16686560	chr1.995	820	4.99284
-chr1	16687546	16687708	chr1.996	348	0.043704
-chr1	16692836	16692860	chr1.997	395	0.16956
-chr1	16692903	16693329	chr1.998	557	1.21841
-chr1	16694833	16694937	chr1.999	372	0.097097
-chr1	16696709	16696711	chr1.1000	315	0.00459888
-chr1	16696773	16697030	chr1.1001	471	0.543454
-chr1	16703861	16703878	chr1.1003	312	0.002797
-chr1	16715636	16715735	chr1.1004	370	0.092628
-chr1	16715776	16717338	chr1.1005	868	5.95332
-chr1	16719238	16720038	chr1.1006	545	1.11388
-chr1	16724525	16725049	chr1.1007	379	0.116114
-chr1	16733239	16733339	chr1.1008	329	0.016083
-chr1	16737378	16737958	chr1.1009	536	1.02924
-chr1	16738014	16738594	chr1.1010	536	1.02924
-chr1	16738684	16739164	chr1.1011	512	0.83069
-chr1	16739206	16739786	chr1.1012	536	1.02924
-chr1	16770909	16770930	chr1.1013	376	0.108583
-chr1	16771358	16771728	chr1.1014	539	1.05694
-chr1	16771773	16772096	chr1.1015	373	0.0984549
-chr1	16772128	16773528	chr1.1016	617	1.85105
diff --git a/src/test/resources/htsjdk/tribble/soapsnp.txt b/src/test/resources/htsjdk/tribble/soapsnp.txt
deleted file mode 100644
index 906408c..0000000
--- a/src/test/resources/htsjdk/tribble/soapsnp.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-chr1       00024553502     C       T       8       T       34      2       2       C       0       0       0       2       2       1.00000 1.00000 1
-chr1       00032906555     T       Y       0       C       34      1       1       T       0       0       0       1       1       0.00000 1.00000 1
-chr1       00043851998     T       C       11      C       34      1       1       T       0       0       0       1       1       1.00000 1.00000 1
-chr1       00085336726     A       G       9       G       34      1       1       A       0       0       0       1       1       1.00000 1.00000 1
-chr1       00089619960     G       T       15      T       34      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr1       00150459311     T       C       25      C       18      2       2       T       0       0       0       2       2       1.00000 1.00000 1
-chr1       00150542507     C       M       0       C       34      1       1       G       0       0       0       1       1       0.00000 1.00000 1
-chr1       00155208036     T       G       8       G       34      2       2       T       0       0       0       2       2       1.00000 1.00000 1
-chr1       00159060586     G       C       15      C       34      2       2       G       0       0       0       2       2       1.00000 1.00000 1
-chr1       00159279214     G       A       4       A       34      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr1       00173313412     A       G       10      G       35      1       1       A       0       0       0       1       1       1.00000 1.00000 1
-chr1       00184407924     G       A       12      A       34      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr1       00205302577     G       A       2       A       34      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr2       00057129003     G       A       1       A       35      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr2       00068399444     T       G       14      G       32      1       1       T       0       0       0       1       1       1.00000 1.00000 1
-chr2       00068399489     C       G       4       G       2       2       2       C       0       0       0       2       2       1.00000 1.00000 1
-chr2       00074039384     A       T       11      T       34      1       1       A       0       0       0       1       1       1.00000 1.00000 1
-chr2       00099388952     C       A       2       A       34      2       2       C       0       0       0       2       2       1.00000 1.00000 0
-chr2       00129970560     G       A       2       A       34      2       2       G       0       0       0       2       2       1.00000 1.00000 0
-chr2       00172106557     T       C       20      C       33      2       2       T       0       0       0       2       2       1.00000 1.00000 1
-chr2       00190398016     G       A       6       A       34      1       1       G       0       0       0       1       1       1.00000 1.00000 1
-chr2       00202177606     C       T       32      T       32      1       1       C       0       0       0       1       1       1.00000 1.00000 1
-chr2       00230378724     C       A       2       A       31      2       2       C       0       0       0       2       2       1.00000 1.00000 0
-chr2       00239133677     G       A       0       A       33      1       1       G       0       0       0       1       1       1.00000 1.00000 1
diff --git a/src/test/resources/htsjdk/tribble/split/test.bin.part1 b/src/test/resources/htsjdk/tribble/split/test.bin.part1
deleted file mode 100644
index a128411..0000000
Binary files a/src/test/resources/htsjdk/tribble/split/test.bin.part1 and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/split/test.bin.part2 b/src/test/resources/htsjdk/tribble/split/test.bin.part2
deleted file mode 100644
index 011fd79..0000000
Binary files a/src/test/resources/htsjdk/tribble/split/test.bin.part2 and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/split/test.bin.part3 b/src/test/resources/htsjdk/tribble/split/test.bin.part3
deleted file mode 100644
index b8aa567..0000000
Binary files a/src/test/resources/htsjdk/tribble/split/test.bin.part3 and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/split/test.bin.split b/src/test/resources/htsjdk/tribble/split/test.bin.split
deleted file mode 100644
index 8d0fb5a..0000000
--- a/src/test/resources/htsjdk/tribble/split/test.bin.split
+++ /dev/null
@@ -1,3 +0,0 @@
-test.bin.part1 4000
-test.bin.part2 4000
-test.bin.part3 4000
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz b/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz
deleted file mode 100644
index d98edfb..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz.tbi b/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz.tbi
deleted file mode 100644
index e80441b..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/YRI.trio.2010_07.indel.sites.vcf.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/tabix/bigger.vcf.gz.tbi b/src/test/resources/htsjdk/tribble/tabix/bigger.vcf.gz.tbi
deleted file mode 100644
index 232a1a2..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/bigger.vcf.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf b/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf
deleted file mode 100644
index ab31c59..0000000
--- a/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf
+++ /dev/null
@@ -1,51 +0,0 @@
-##fileformat=VCFv4.2
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA19238	NA19239	NA19240
-1	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-2	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-3	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-5	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-6	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-7	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-8	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-9	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-10	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-11	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-12	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-13	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-14	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-15	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-16	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-17	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-18	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-19	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-20	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-21	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-22	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-X	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-Y	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
diff --git a/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz b/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz
deleted file mode 100644
index 761f6a3..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/testTabixIndex.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf b/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf
deleted file mode 100644
index 39e4b90..0000000
--- a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf
+++ /dev/null
@@ -1,75 +0,0 @@
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA19238	NA19239	NA19240	
-1	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-2	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-3	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-5	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-6	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-7	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-8	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-9	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-10	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-11	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-12	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-13	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-14	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-15	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-16	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-17	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-18	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-19	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-20	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-21	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-22	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-X	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-Y	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
diff --git a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz b/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz
deleted file mode 100644
index ccda746..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz.tbi b/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz.tbi
deleted file mode 100644
index 6bc4be2..0000000
Binary files a/src/test/resources/htsjdk/tribble/tabix/trioDup.vcf.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/test with spaces.vcf b/src/test/resources/htsjdk/tribble/test with spaces.vcf
deleted file mode 100644
index 27d4500..0000000
--- a/src/test/resources/htsjdk/tribble/test with spaces.vcf	
+++ /dev/null
@@ -1,24 +0,0 @@
-##fileformat=VCFv4.1
-##fileDate=20090805
-##source=myImputationProgramV3.1
-##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
-##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>
-##phasing=partial
-##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
-##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
-##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
-##FILTER=<ID=q10,Description="Quality below 10">
-##FILTER=<ID=s50,Description="Less than 50% of samples have data">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
-##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA00001	NA00002	NA00003
-20	14370	rs6054257	G	A	29	PASS	NS=3;DP=14;AF=0.5;DB;H2	GT:GQ:DP:HQ	0|0:48:1:51,51	1|0:48:8:51,51	1/1:43:5:.,.
-20	17330	.	T	A	3	q10	NS=3;DP=11;AF=0.017	GT:GQ:DP:HQ	0|0:49:3:58,50	0|1:3:5:65,3	0/0:41:3
-20	1110696	rs6040355	A	G,T	67	PASS	NS=2;DP=10;AF=0.333,0.667;AA=T;DB	GT:GQ:DP:HQ	1|2:21:6:23,27	2|1:2:0:18,2	2/2:35:4
-20	1230237	.	T	.	47	PASS	NS=3;DP=13;AA=T	GT:GQ:DP:HQ	0|0:54:7:56,60	0|0:48:4:51,51	0/0:61:2
-20	1234567	microsat1	GTC	G,GTCT	50	PASS	NS=3;DP=9;AA=G	GT:GQ:DP	0/1:35:4	0/2:17:2	1/1:40:3
diff --git a/src/test/resources/htsjdk/tribble/test.bed b/src/test/resources/htsjdk/tribble/test.bed
deleted file mode 100644
index 2a68645..0000000
--- a/src/test/resources/htsjdk/tribble/test.bed
+++ /dev/null
@@ -1,9 +0,0 @@
-track name="test bed"
-#a comment
-chr1	100	101
-chr1	200	201
-chr1	300	301
-chr1	100000	100010
-chr1	100020	100040
-chr2	1	10
-chr2	20	30
diff --git a/src/test/resources/htsjdk/tribble/test.gff b/src/test/resources/htsjdk/tribble/test.gff
deleted file mode 100644
index 6a24793..0000000
--- a/src/test/resources/htsjdk/tribble/test.gff
+++ /dev/null
@@ -1,9 +0,0 @@
-#header
-#cont
-chr1    100   101
-chr1    200   201
-chr1    300   301
-chr1    100000   100010
-chr1    100020   100040
-chr2    1   10
-chr2    20   30
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/tribble/test.tabix.bed.gz b/src/test/resources/htsjdk/tribble/test.tabix.bed.gz
deleted file mode 100644
index 7c3b419..0000000
Binary files a/src/test/resources/htsjdk/tribble/test.tabix.bed.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/test.tabix.bed.gz.tbi b/src/test/resources/htsjdk/tribble/test.tabix.bed.gz.tbi
deleted file mode 100644
index b9d16c8..0000000
Binary files a/src/test/resources/htsjdk/tribble/test.tabix.bed.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/test.vcf b/src/test/resources/htsjdk/tribble/test.vcf
deleted file mode 100644
index 27d4500..0000000
--- a/src/test/resources/htsjdk/tribble/test.vcf
+++ /dev/null
@@ -1,24 +0,0 @@
-##fileformat=VCFv4.1
-##fileDate=20090805
-##source=myImputationProgramV3.1
-##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
-##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>
-##phasing=partial
-##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
-##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
-##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
-##FILTER=<ID=q10,Description="Quality below 10">
-##FILTER=<ID=s50,Description="Less than 50% of samples have data">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
-##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA00001	NA00002	NA00003
-20	14370	rs6054257	G	A	29	PASS	NS=3;DP=14;AF=0.5;DB;H2	GT:GQ:DP:HQ	0|0:48:1:51,51	1|0:48:8:51,51	1/1:43:5:.,.
-20	17330	.	T	A	3	q10	NS=3;DP=11;AF=0.017	GT:GQ:DP:HQ	0|0:49:3:58,50	0|1:3:5:65,3	0/0:41:3
-20	1110696	rs6040355	A	G,T	67	PASS	NS=2;DP=10;AF=0.333,0.667;AA=T;DB	GT:GQ:DP:HQ	1|2:21:6:23,27	2|1:2:0:18,2	2/2:35:4
-20	1230237	.	T	.	47	PASS	NS=3;DP=13;AA=T	GT:GQ:DP:HQ	0|0:54:7:56,60	0|0:48:4:51,51	0/0:61:2
-20	1234567	microsat1	GTC	G,GTCT	50	PASS	NS=3;DP=9;AA=G	GT:GQ:DP	0/1:35:4	0/2:17:2	1/1:40:3
diff --git a/src/test/resources/htsjdk/tribble/test.vcf.bgz b/src/test/resources/htsjdk/tribble/test.vcf.bgz
deleted file mode 100644
index 44072dc..0000000
Binary files a/src/test/resources/htsjdk/tribble/test.vcf.bgz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/test.vcf.gz b/src/test/resources/htsjdk/tribble/test.vcf.gz
deleted file mode 100644
index 0033290..0000000
Binary files a/src/test/resources/htsjdk/tribble/test.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/testGeliText.txt b/src/test/resources/htsjdk/tribble/testGeliText.txt
deleted file mode 100644
index 6c3d5cc..0000000
--- a/src/test/resources/htsjdk/tribble/testGeliText.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-22	14438070	A	0	0	GG	33.2618	33.2618	0	0	0	0	0	0	0	33.2618	0	0
-22	14438200	G	0	0	AA	1.1886	1.1886	1.1886	0	0	0	0	0	0	0	0	0
-22	14441250	T	0	0	CC	53.483	53.483	0	0	0	0	53.483	0	0	0	0	0
-22	14447887	G	0	0	AA	12.4813	12.4813	12.4813	0	0	0	0	0	0	0	0	0
-22	14457860	C	0	0	AA	12.4084	12.4084	12.4084	0	0	0	0	0	0	0	0	0
-22	14458514	C	0	0	TT	7.5213	7.5213	0	0	0	0	0	0	0	0	0	7.5213
-22	14461115	T	0	0	AA	16.8074	16.8074	16.8074	0	0	0	0	0	0	0	0	0
-22	14461207	G	0	0	AA	16.2602	16.2602	16.2602	0	0	0	0	0	0	0	0	0
-22	14461877	G	0	0	CC	38.4419	38.4419	0	0	0	0	38.4419	0	0	0	0	0
-22	14477581	G	0	0	CC	100.1684	100.1684	0	0	0	0	100.1684	0	0	0	0	0
-22	14478631	C	0	0	GG	183.3861	183.3861	0	0	0	0	0	0	0	183.3861	0	0
-22	14481814	T	0	0	CC	85.2846	85.2846	0	0	0	0	85.2846	0	0	0	0	0
-22	14483033	G	0	0	AA	31.8788	31.8788	31.8788	0	0	0	0	0	0	0	0	0
-22	14483299	A	0	0	GG	77.8744	77.8744	0	0	0	0	0	0	0	77.8744	0	0
-22	14485386	T	0	0	CC	74.4269	74.4269	0	0	0	0	74.4269	0	0	0	0	0
-22	14485626	C	0	0	TT	113.7914	113.7914	0	0	0	0	0	0	0	0	0	113.7914
-22	14493000	C	0	0	AA	80.076	80.076	80.076	0	0	0	0	0	0	0	0	0
-22	14493115	T	0	0	CC	13.3876	13.3876	0	0	0	0	13.3876	0	0	0	0	0
-22	14493547	C	0	0	AA	66.7446	66.7446	66.7446	0	0	0	0	0	0	0	0	0
-22	14498096	C	0	0	TT	22.2114	22.2114	0	0	0	0	0	0	0	0	0	22.2114
-22	14500486	A	0	0	CC	40.1737	40.1737	0	0	0	0	40.1737	0	0	0	0	0
-22	14500558	C	0	0	AA	9.7267	9.7267	9.7267	0	0	0	0	0	0	0	0	0
-22	14513510	T	0	0	CC	0.371	0.371	0	0	0	0	0.371	0	0	0	0	0
-22	14515016	C	0	0	TT	18.3656	18.3656	0	0	0	0	0	0	0	0	0	18.3656
-22	14515375	C	0	0	AA	8.0465	8.0465	8.0465	0	0	0	0	0	0	0	0	0
-22	14518569	T	0	0	CC	7.0936	7.0936	0	0	0	0	7.0936	0	0	0	0	0
-22	14521164	G	0	0	AA	14.6779	14.6779	14.6779	0	0	0	0	0	0	0	0	0
-22	14521784	T	0	0	AA	103.5567	103.5567	103.5567	0	0	0	0	0	0	0	0	0
-22	14523455	G	0	0	AA	111.3576	111.3576	111.3576	0	0	0	0	0	0	0	0	0
-22	14523946	A	0	0	GG	557.6265	557.6265	0	0	0	0	0	0	0	557.6265	0	0
-22	14524113	T	0	0	CC	13.5924	13.5924	0	0	0	0	13.5924	0	0	0	0	0
-22	14529743	T	0	0	AA	14.9931	14.9931	14.9931	0	0	0	0	0	0	0	0	0
-22	14529851	G	0	0	AA	36.2328	36.2328	36.2328	0	0	0	0	0	0	0	0	0
-22	14530198	C	0	0	TT	10.9314	10.9314	0	0	0	0	0	0	0	0	0	10.9314
-22	14530589	C	0	0	AA	5.7191	5.7191	5.7191	0	0	0	0	0	0	0	0	0
-22	14532450	A	0	0	GG	36.3551	36.3551	0	0	0	0	0	0	0	36.3551	0	0
-22	14532603	G	0	0	CC	1.1431	1.1431	0	0	0	0	1.1431	0	0	0	0	0
-22	14533615	A	0	0	CC	76.6265	76.6265	0	0	0	0	76.6265	0	0	0	0	0
-22	14535726	A	0	0	GG	16.5307	16.5307	0	0	0	0	0	0	0	16.5307	0	0
-22	14537455	G	0	0	TT	8.0559	8.0559	0	0	0	0	0	0	0	0	0	8.0559
-22	14539060	G	0	0	AA	11.4875	11.4875	11.4875	0	0	0	0	0	0	0	0	0
-22	14539158	A	0	0	GG	8.9543	8.9543	0	0	0	0	0	0	0	8.9543	0	0
-22	14541357	T	0	0	CC	2.2916	2.2916	0	0	0	0	2.2916	0	0	0	0	0
-22	14543758	C	0	0	TT	5.108	5.108	0	0	0	0	0	0	0	0	0	5.108
-22	14556926	T	0	0	AA	101.0105	101.0105	101.0105	0	0	0	0	0	0	0	0	0
-22	14561744	T	0	0	CC	2.4103	2.4103	0	0	0	0	2.4103	0	0	0	0	0
-22	14579503	C	0	0	TT	49.7801	49.7801	0	0	0	0	0	0	0	0	0	49.7801
-22	14582170	C	0	0	TT	37.9647	37.9647	0	0	0	0	0	0	0	0	0	37.9647
-22	14591631	T	0	0	CC	2.5744	2.5744	0	0	0	0	2.5744	0	0	0	0	0
-22	14592250	A	0	0	GG	16.8241	16.8241	0	0	0	0	0	0	0	16.8241	0	0
diff --git a/src/test/resources/htsjdk/tribble/testIntervalList.list b/src/test/resources/htsjdk/tribble/testIntervalList.list
deleted file mode 100644
index 304d8fb..0000000
--- a/src/test/resources/htsjdk/tribble/testIntervalList.list
+++ /dev/null
@@ -1,6 +0,0 @@
-chr1:1-100
-chr1:200-300
-chr1:500-600
-chr1:700-800
-chr1:900-1001
-chr1:1001-1002
diff --git a/src/test/resources/htsjdk/tribble/trio.vcf b/src/test/resources/htsjdk/tribble/trio.vcf
deleted file mode 100644
index 8a24fb2..0000000
--- a/src/test/resources/htsjdk/tribble/trio.vcf
+++ /dev/null
@@ -1,100 +0,0 @@
-##fileformat=VCFv3.2
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA19238	NA19239	NA19240	
-1	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-1	4793	rs6682385	A	G	1687.16	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.54;AC=3;AF=0.50;AN=6;DB=1;DP=242;Dels=0.00;HRun=0;MQ=77.94;MQ0=43;QD=6.97;SB=-891.19;set=filteredInBoth	GT:DP:GQ	0/1:15:4.94	0/1:58:99.00	0/1:73:99.00
-1	45162	rs10399749	C	T	634.21	HARD_TO_VALIDATE	AB=0.63;AC=3;AF=0.50;AN=6;DB=1;DP=67;Dels=0.00;HRun=0;MQ=115.93;MQ0=7;QD=12.44;SB=-359.74;set=filteredInBoth	GT:DP:GQ	1/1:6:18.05	0/0:12:35.94	0/1:35:99.00
-1	48677	.	G	A	1049.06	HARD_TO_VALIDATE	AB=0.48;AC=2;AF=0.33;AN=6;DB=0;DP=88;Dels=0.00;HRun=1;MQ=120.08;MQ0=12;QD=14.78;SB=-423.81;set=filteredInBoth	GT:DP:GQ	1/0:16:99.00	0/0:12:36.07	1/0:42:99.00
-1	56724	rs28375825	C	T	65.41	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.88;AC=1;AF=0.50;AN=2;DB=1;DP=145;Dels=0.00;HRun=0;MQ=42.19;MQ0=140;QD=1.01;SB=-44.70;set=filteredInBoth	GT:DP:GQ	./.	./.	0/1:4:16.39
-1	61969	.	T	C	98.69	GATK_STANDARD;HARD_TO_VALIDATE	AC=2;AF=1.00;AN=2;DB=0;DP=83;Dels=0.00;HRun=0;MQ=62.34;MQ0=78;QD=2.30;SB=-40.43;set=filteredInBoth	GT:DP:GQ	./.	./.	1/1:5:15.00
-1	66069	rs6672770	T	C	129.77	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.79;AC=1;AF=0.50;AN=2;DB=1;DP=81;Dels=0.00;HRun=1;MQ=79.82;MQ0=72;QD=3.24;SB=-34.43;set=filteredInBoth	GT:DP:GQ	./.	./.	1/0:8:49.36
-1	72824	.	C	T	442.04	HARD_TO_VALIDATE	AB=0.64;AC=2;AF=0.33;AN=6;DB=0;DP=77;Dels=0.00;HRun=1;MQ=110.14;MQ0=34;QD=7.76;SB=-223.18;set=filteredInBoth	GT:DP:GQ	0/1:8:45.25	0/0:6:17.89	0/1:19:99.00
-1	77053	rs1524602	G	A	550.09	GATK_STANDARD;HARD_TO_VALIDATE	AC=4;AF=0.67;AN=6;DB=1;DP=79;Dels=0.00;HRun=0;MQ=107.50;MQ0=42;QD=9.02;SB=-259.27;set=filteredInBoth	GT:DP:GQ	1/1:1:3.00	0/0:8:23.91	1/1:15:45.14
-1	77999	rs59529791	G	A	405.10	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.54;AC=1;AF=0.50;AN=2;DB=1;DP=149;Dels=0.00;HRun=0;MQ=97.90;MQ0=125;QD=4.82;SB=-212.96;set=filteredInBoth	GT:DP:GQ	./.	./.	1/0:18:99.00
-1	78032	rs940550	C	T	326.66	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.62;AC=2;AF=0.33;AN=6;DB=1;DP=166;Dels=0.00;HRun=0;MQ=106.31;MQ0=90;QD=2.68;SB=-159.68;set=filteredInBoth	GT:DP:GQ	0/1:9:55.54	0/0:13:19.59	0/1:36:99.00
-1	78201	rs55700207	G	A	727.51	HARD_TO_VALIDATE	AB=0.69;AC=2;AF=0.33;AN=6;DB=1;DP=156;Dels=0.00;HRun=1;MQ=123.99;MQ0=18;QD=6.11;SB=-313.22;set=filteredInBoth	GT:DP:GQ	1/0:15:71.23	0/0:30:89.75	1/0:76:99.00
-1	79870	rs6600761	G	A	446.08	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.79;AC=5;AF=0.83;AN=6;DB=1;DP=144;Dels=0.00;HRun=0;MQ=63.25;MQ0=120;QD=3.10;SB=-207.47;set=filteredInBoth	GT:DP:GQ	1/1:1:3.01	1/0:4:39.73	1/1:16:1.78
-1	79914	rs7545609	C	T	330.71	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.43;AC=3;AF=0.75;AN=4;DB=1;DP=113;Dels=0.00;HRun=1;MQ=52.52;MQ0=95;QD=3.31;SB=-87.43;set=filteredInBoth	GT:DP:GQ	./.	1/1:3:8.99	0/1:11:15.70
-1	81468	rs13328714	C	T	1069.45	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.62;AC=3;AF=0.50;AN=6;DB=1;DP=140;Dels=0.00;HRun=0;MQ=54.71;MQ0=81;QD=7.64;SB=-475.44;set=filteredInBoth	GT:DP:GQ	0/1:10:34.30	0/1:6:59.37	0/1:31:84.17
-1	98093	rs9726668	C	T	112.02	GATK_STANDARD;HARD_TO_VALIDATE	AC=2;AF=1.00;AN=2;DB=1;DP=129;Dels=0.00;HRun=1;MQ=44.79;MQ0=116;QD=2.15;SB=-79.41;set=filteredInBoth	GT:DP:GQ	./.	./.	1/1:4:12.04
-1	130294	.	A	T	197.39	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.86;AC=1;AF=0.50;AN=2;DB=0;DP=103;Dels=0.00;HRun=0;MQ=90.59;MQ0=90;QD=3.72;SB=-106.74;set=filteredInBoth	GT:DP:GQ	./.	./.	0/1:11:99.00
-1	235923	.	G	A	594.00	HARD_TO_VALIDATE	AB=0.60;AC=2;AF=0.33;AN=6;DB=0;DP=109;Dels=0.00;HRun=2;MQ=79.25;MQ0=18;QD=6.91;SB=-296.81;set=filteredInBoth	GT:DP:GQ	0/0:18:52.41	1/0:21:99.00	1/0:38:99.00
-1	526849	rs9918921	G	T	729.63	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.70;AC=3;AF=0.50;AN=6;DB=1;DP=144;Dels=0.00;HRun=1;MQ=58.35;MQ0=63;QD=5.07;SB=-386.25;set=filteredInBoth	GT:DP:GQ	0/1:22:99.00	0/1:9:5.72	0/1:32:99.00
-1	554535	rs2792856	A	C	460.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.98;AC=2;AF=0.33;AN=6;DB=1;DP=5992;Dels=0.00;HRun=0;MQ=24.07;MQ0=3765;QD=0.17;SB=-263.03;set=filteredInBoth	GT:DP:GQ	0/1:11:11.51	0/0:1904:99.00	0/1:49:99.00
-1	555454	rs7416152	C	T	337.28	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.69;AC=1;AF=0.17;AN=6;DB=1;DP=613;Dels=0.00;HRun=0;MQ=69.04;MQ0=411;QD=1.44;SB=-37.69;set=filteredInBoth	GT:DP:GQ	0/0:28:10.08	0/0:15:44.56	0/1:45:99.00
-1	556655	rs9283152	T	C	271.50	HARD_TO_VALIDATE	AB=0.56;AC=3;AF=0.50;AN=6;DB=1;DP=143;Dels=0.00;HRun=0;MQ=113.17;MQ0=28;QD=1.90;SB=-150.20;set=filteredInBoth	GT:DP:GQ	1/0:15:11.69	1/0:6:0.60	1/0:43:99.00
-1	556738	rs2185539	C	T	969.07	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.98;AC=2;AF=0.33;AN=6;DB=1;DP=6824;Dels=0.00;HRun=0;MQ=14.67;MQ0=6699;QD=0.19;SB=-473.67;set=filteredInBoth	GT:DP:GQ	0/1:12:41.37	0/0:10:29.98	0/1:49:99.00
-1	557239	rs1972376	G	A	206.76	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.99;AC=2;AF=0.33;AN=6;DB=1;DP=9777;Dels=0.00;HRun=0;MQ=14.50;MQ0=9698;QD=0.03;SB=-116.61;set=filteredInBoth	GT:DP:GQ	0/0:12:35.59	1/0:6:3.58	1/0:34:99.00
-1	558119	rs4098612	C	T	883.08	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.68;AC=3;AF=0.50;AN=6;DB=1;DP=846;Dels=0.00;HRun=0;MQ=61.17;MQ0=599;QD=1.04;SB=-257.60;set=filteredInBoth	GT:DP:GQ	0/1:38:99.00	0/1:29:99.00	0/1:89:99.00
-1	558554	rs8179256	T	C	148.11	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.83;AC=2;AF=0.33;AN=6;DB=1;DP=203;Dels=0.00;HRun=1;MQ=120.71;MQ0=124;QD=0.87;SB=-66.34;set=filteredInBoth	GT:DP:GQ	1/0:4:18.64	0/0:5:15.05	1/0:51:99.00
-1	558581	rs7417964	C	T	290.58	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.82;AC=2;AF=0.33;AN=6;DB=1;DP=265;Dels=0.00;HRun=0;MQ=111.81;MQ0=79;QD=1.49;SB=-93.95;set=filteredInBoth	GT:DP:GQ	0/1:13:14.08	0/0:22:47.05	0/1:77:99.00
-1	588696	.	T	C	218.82	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.54;AC=2;AF=0.33;AN=6;DB=0;DP=134;Dels=0.00;HRun=0;MQ=83.72;MQ0=47;QD=2.77;SB=-104.66;set=filteredInBoth	GT:DP:GQ	1/0:24:61.33	1/0:20:99.00	0/0:26:78.22
-1	593378	.	C	A	251.81	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.79;AC=3;AF=0.50;AN=6;DB=0;DP=87;Dels=0.00;HRun=0;MQ=89.00;MQ0=57;QD=3.87;SB=-90.25;set=filteredInBoth	GT:DP:GQ	0/0:1:3.01	1/1:2:6.01	1/0:18:99.00
-1	593379	.	C	A	264.50	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.80;AC=3;AF=0.50;AN=6;DB=0;DP=88;Dels=0.00;HRun=0;MQ=88.49;MQ0=59;QD=4.01;SB=-90.26;set=filteredInBoth	GT:DP:GQ	0/0:2:6.02	1/1:2:6.02	1/0:17:99.00
-1	625979	rs3871845	G	C	930.94	GATK_STANDARD;HARD_TO_VALIDATE	AC=6;AF=1.00;AN=6;DB=1;DP=107;Dels=0.00;HRun=0;MQ=52.60;MQ0=65;QD=8.70;SB=-330.39;set=filteredInBoth	GT:DP:GQ	1/1:2:6.02	1/1:13:3.64	1/1:13:39.08
-1	658074	.	G	A	158.20	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.85;AC=1;AF=0.50;AN=2;DB=0;DP=128;Dels=0.00;HRun=1;MQ=107.95;MQ0=103;QD=2.11;SB=-62.45;set=filteredInBoth	GT:DP:GQ	./.	./.	1/0:18:99.00
-1	670109	.	G	A	261.26	SnpCluster;HARD_TO_VALIDATE	AB=0.64;AC=3;AF=0.50;AN=6;DB=0;DP=50;Dels=0.00;HRun=0;MQ=57.55;MQ0=22;QD=7.92;SB=-162.18;set=filteredInBoth	GT:DP:GQ	0/0:6:17.87	1/1:4:12.03	1/0:10:99.00
-1	670115	.	A	G	95.67	SnpCluster;HARD_TO_VALIDATE	AB=0.47;AC=1;AF=0.17;AN=6;DB=0;DP=49;Dels=0.00;HRun=0;MQ=45.30;MQ0=22;QD=6.38;SB=-48.65;set=filteredInBoth	GT:DP:GQ	0/1:6:17.65	0/0:4:12.03	0/0:9:27.08
-1	695744	.	C	T	287.83	0	AB=0.53;AC=2;AF=0.33;AN=6;DB=0;DP=115;Dels=0.00;HRun=0;MQ=134.37;MQ0=4;QD=8.72;SB=-139.69;set=Intersection	GT:DP:GQ	0/1:6:39.04	0/1:17:99.00	0/0:67:99.00
-1	705134	.	G	C	479.55	HARD_TO_VALIDATE	AB=0.46;AC=2;AF=0.33;AN=6;DB=0;DP=115;Dels=0.00;HRun=0;MQ=103.92;MQ0=31;QD=8.56;SB=-251.32;set=filteredInBoth	GT:DP:GQ	1/0:7:14.41	1/0:20:99.00	0/0:40:99.00
-1	713682	rs11804171	T	A	146.13	0	AB=0.49;AC=2;AF=0.33;AN=6;DB=1;DP=137;Dels=0.00;HRun=1;MQ=162.31;MQ0=7;QD=3.32;SB=-73.71;set=Intersection	GT:DP:GQ	1/0:10:99.00	1/0:23:78.43	0/0:80:99.00
-1	714613	.	T	A	128.46	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.85;AC=1;AF=0.17;AN=6;DB=0;DP=312;Dels=0.00;HRun=0;MQ=62.11;MQ0=223;QD=1.01;SB=-96.00;set=filteredInBoth	GT:DP:GQ	0/0:8:23.94	0/0:8:24.02	1/0:30:99.00
-1	714914	.	G	C	1014.25	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.89;AC=3;AF=0.50;AN=6;DB=0;DP=1105;Dels=0.00;HRun=0;MQ=40.04;MQ0=802;QD=0.92;SB=-342.49;set=filteredInBoth	GT:DP:GQ	1/0:19:99.00	1/0:63:99.00	1/0:121:99.00
-1	714919	.	C	T	182.40	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.93;AC=2;AF=0.33;AN=6;DB=0;DP=1718;Dels=0.00;HRun=1;MQ=31.70;MQ0=1407;QD=0.14;SB=-70.23;set=filteredInBoth	GT:DP:GQ	0/0:16:13.44	0/1:47:99.00	0/1:116:71.35
-1	715102	.	C	T	464.73	SnpCluster;GATK_STANDARD;HARD_TO_VALIDATE	AB=0.91;AC=2;AF=0.33;AN=6;DB=0;DP=1683;Dels=0.00;HRun=1;MQ=35.16;MQ0=913;QD=0.40;SB=-83.11;set=filteredInBoth	GT:DP:GQ	0/0:84:37.60	0/1:133:36.77	0/1:137:99.00
-1	715843	.	C	T	246.91	SnpCluster;GATK_STANDARD;HARD_TO_VALIDATE	AB=0.57;AC=3;AF=0.75;AN=4;DB=0;DP=573;Dels=0.00;HRun=1;MQ=54.60;MQ0=530;QD=0.60;SB=-78.54;set=filteredInBoth	GT:DP:GQ	./.	1/1:2:6.00	0/1:21:99.00
-1	716461	.	A	T	15831.28	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.39;AC=3;AF=0.50;AN=6;DB=0;DP=4568;Dels=0.00;HRun=1;MQ=25.76;MQ0=2971;QD=3.47;SB=-4224.71;set=filteredInBoth	GT:DP:GQ	0/1:198:99.00	0/1:47:99.00	0/1:355:99.00
-1	716471	.	A	T	63.29	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.84;AC=2;AF=0.33;AN=6;DB=0;DP=1752;Dels=0.00;HRun=1;MQ=26.79;MQ0=1662;QD=0.05;SB=-6.09;set=filteredInBoth	GT:DP:GQ	0/1:2:22.36	0/0:5:15.04	0/1:31:67.13
-1	716513	.	G	T	355.52	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.87;AC=1;AF=0.17;AN=6;DB=0;DP=432;Dels=0.00;HRun=1;MQ=67.96;MQ0=365;QD=1.74;SB=-22.88;set=filteredInBoth	GT:DP:GQ	0/0:5:15.03	0/0:9:26.77	0/1:37:99.00
-1	716514	.	C	A	297.66	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.90;AC=1;AF=0.17;AN=6;DB=0;DP=384;Dels=0.00;HRun=1;MQ=72.11;MQ0=313;QD=1.60;SB=-30.31;set=filteredInBoth	GT:DP:GQ	0/0:6:9.42	0/0:11:24.43	1/0:38:99.00
-1	716758	.	A	G	95.95	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.51;AC=2;AF=0.33;AN=6;DB=0;DP=484;Dels=0.00;HRun=1;MQ=36.47;MQ0=449;QD=0.26;SB=-91.54;set=filteredInBoth	GT:DP:GQ	0/0:1:3.01	0/1:4:18.64	0/1:17:99.00
-1	723728	.	A	G	314.08	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.56;AC=2;AF=0.33;AN=6;DB=0;DP=87;Dels=0.00;HRun=2;MQ=78.26;MQ0=55;QD=4.69;SB=-169.71;set=filteredInBoth	GT:DP:GQ	0/0:3:8.98	0/1:5:19.54	0/1:16:99.00
-1	726158	.	A	T	365.11	0	AB=0.53;AC=2;AF=0.33;AN=6;DB=0;DP=73;Dels=0.01;HRun=6;MQ=84.48;MQ0=0;QD=8.11;SB=-183.35;set=Intersection	GT:DP:GQ	0/1:17:99.00	0/1:23:99.00	0/0:26:75.17
diff --git a/src/test/resources/htsjdk/tribble/trio.vcf.idx b/src/test/resources/htsjdk/tribble/trio.vcf.idx
deleted file mode 100644
index b3aaaff..0000000
Binary files a/src/test/resources/htsjdk/tribble/trio.vcf.idx and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/trioDup.vcf b/src/test/resources/htsjdk/tribble/trioDup.vcf
deleted file mode 100644
index 39e4b90..0000000
--- a/src/test/resources/htsjdk/tribble/trioDup.vcf
+++ /dev/null
@@ -1,75 +0,0 @@
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA19238	NA19239	NA19240	
-1	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-2	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-3	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-4	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-5	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-6	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-7	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-8	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-9	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-10	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-11	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-12	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-13	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-14	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-15	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-16	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-17	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-18	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-19	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-20	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-21	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-22	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-X	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
-Y	327	.	T	C	666.18	GATK_STANDARD;HARD_TO_VALIDATE	AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth	GT:DP:GQ	1/0:10:62.65	1/0:37:99.00	1/0:53:99.00
diff --git a/src/test/resources/htsjdk/tribble/vcfexample.vcf b/src/test/resources/htsjdk/tribble/vcfexample.vcf
deleted file mode 100644
index 5d482c9..0000000
--- a/src/test/resources/htsjdk/tribble/vcfexample.vcf
+++ /dev/null
@@ -1,12 +0,0 @@
-##format=VCRv3.2
-##fileDate=20090805
-##source=myImputationProgramV3.1
-##reference=1000GenomesPilot-NCBI36
-##phasing=partial
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA00001	NA00002	NA00003
-20	14370	rs6054257	G	A	29	0	NS=58;DP=258;AF=0.786	GT:GQ:DP:HQ	0|0:48:1:51,51	1|0:48:8:51,51	1/1:43:5
-20	15330	.	T	A	3	q10	NS=55;DP=202;AF=0.024	GT:GQ:DP:HQ	0|0:49:3:58,50	0|1:3:5:65,3	0/0:41:3
-20	111096	rs6040355	A	G	67	0	NS=55;DP=276;AF=0.421,0.579;AA=T	GT:GQ:DP:HQ	1|0:21:6:23,27	0|1:2:0:18,2	0/0:35:4
-20	120237	.	T	.	47	0	NS=57;DP=257;AA=T	GT:GQ:DP:HQ	0|0:54:7:56,60	0|0:48:4:51,51	0/0:61:2
-20	123456	microsat1	G	D4	50	0	NS=55;DP=250;AA=G	GT:GQ:DP	0/1:35:4	0/1:17:2	1/1:40:3
-20	123457	microsat1	G	IGA	50	0	NS=55;DP=250;AA=G	GT:GQ:DP	0/1:35:4	0/1:17:2	1/1:40:3
diff --git a/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz b/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz
deleted file mode 100644
index 9d2b1d0..0000000
Binary files a/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz.tbi b/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz.tbi
deleted file mode 100644
index 194073c..0000000
Binary files a/src/test/resources/htsjdk/tribble/vcfexample.vcf.gz.tbi and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.gz b/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.gz
deleted file mode 100644
index eaeb499..0000000
Binary files a/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.hdr.gz b/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.hdr.gz
deleted file mode 100644
index bbea6c9..0000000
Binary files a/src/test/resources/htsjdk/tribble/vcfexample.vcf.truncated.hdr.gz and /dev/null differ
diff --git a/src/test/resources/htsjdk/variant/HiSeq.10000.vcf b/src/test/resources/htsjdk/variant/HiSeq.10000.vcf
deleted file mode 100644
index a304ba2..0000000
--- a/src/test/resources/htsjdk/variant/HiSeq.10000.vcf
+++ /dev/null
@@ -1,10001 +0,0 @@
-##fileformat=VCFv4.0
-##FILTER=<ID=ABFilter,Description="AB  0.75 && DP  40">
-##FILTER=<ID=DPFilter,Description="DP  120 || SB  -0.10">
-##FILTER=<ID=FDRtranche0.00to0.10,Description="FDR tranche level at qual 0.06">
-##FILTER=<ID=FDRtranche0.10to1.00,Description="FDR tranche level at qual 0.03">
-##FILTER=<ID=FDRtranche1.00to2.00,Description="FDR tranche level at qual 0.02">
-##FILTER=<ID=FDRtranche2.00to10.00+,Description="FDR tranche level at qual > 0.06">
-##FILTER=<ID=FDRtranche2.00to10.00,Description="FDR tranche level at qual unknown">
-##FILTER=<ID=HARD_TO_VALIDATE,Description="MQ0 = 4 && ((MQ0 / (1.0 * DP))  0.1)">
-##FILTER=<ID=Indel,Description="Overlaps a user-input mask">
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=LowQual,Description="QUAL  50.0">
-##FILTER=<ID=SnpCluster,Description="SNPs found in clusters">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth (only filtered reads used for calling)">
-##FORMAT=<ID=GL,Number=3,Type=Float,Description="Log-scaled likelihoods for AA,AB,BB genotypes where A=ref and B=alt; not applicable if site is not biallelic">
-##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##INFO=<ID=AC,Number=.,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with two (and only two) segregating haplotypes">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=OQ,Number=1,Type=Float,Description="The original variant quality score">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-23/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-24/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-5/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessi [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf, mask,Bed,wgs.v9/HiSeq.WGS.cleaned.indels.10.mask] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.in [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf err=null outerr=null filterZeroMappingQualityReads=false dow [...]
-##source=VariantOptimizer
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	
-chr1	109	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1019;Dels=0.00;HRun=0;HaplotypeScore=686.65;MQ=19.20;MQ0=288;OQ=2175.54;QD=2.13;SB=-1042.18	GT:AD:DP:GL:GQ	0/1:610,327:308:-316.30,-95.47,-803.03:99
-chr1	147	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=348;Dels=0.01;HRun=2;HaplotypeScore=268.66;MQ=20.23;MQ0=105;OQ=196.24;QD=0.56;SB=-76.48	GT:AD:DP:GL:GQ	0/1:294,49:118:-57.87,-34.96,-338.46:99
-chr1	177	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=432;Dels=0.02;HRun=2;HaplotypeScore=404.17;MQ=17.76;MQ0=153;OQ=697.20;QD=1.61;SB=-140.54	GT:AD:DP:GL:GQ	0/1:283,140:122:-108.58,-35.57,-292.84:99
-chr1	180	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=630;Dels=0.01;HRun=2;HaplotypeScore=495.41;MQ=14.22;MQ0=327;OQ=885.33;QD=1.41;SB=-412.44	GT:AD:DP:GL:GQ	0/1:466,154:104:-122.27,-30.46,-246.17:99
-chr1	234	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=336;Dels=0.00;HRun=1;HaplotypeScore=423.95;MQ=19.45;MQ0=111;OQ=596.60;QD=1.78;SB=-230.12	GT:AD:DP:GL:GQ	0/1:267,67:106:-94.87,-31.93,-297.68:99
-chr1	235	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=391.04;MQ=19.68;MQ0=106;OQ=580.03;QD=1.78;SB=-219.50	GT:AD:DP:GL:GQ	0/1:274,47:105:-99.60,-38.31,-293.27:99
-chr1	250	.	A	C	22.88	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=182;Dels=0.01;HRun=3;HaplotypeScore=244.83;MQ=21.91;MQ0=52;QD=0.13;SB=-23.67	GT:AD:DP:GL:GQ	0/1:148,33:70:-26.66,-21.09,-215.78:55.69
-chr1	291	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=284.50;MQ=20.72;MQ0=39;OQ=529.94;QD=3.93;SB=-160.31	GT:AD:DP:GL:GQ	0/1:87,43:32:-69.55,-13.28,-54.44:99
-chr1	297	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=214.52;MQ=20.93;MQ0=36;OQ=101.21;QD=0.82;SB=-38.97	GT:AD:DP:GL:GQ	0/1:98,15:30:-33.20,-19.79,-87.91:99
-chr1	309	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=153.70;MQ=21.12;MQ0=35;OQ=53.98;QD=0.46;SB=-50.01	GT:AD:DP:GL:GQ	0/1:103,9:32:-18.33,-9.64,-96.32:86.82
-chr1	321	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=612.30;MQ=19.11;MQ0=29;OQ=136.39;QD=0.67;SB=-61.25	GT:AD:DP:GL:GQ	0/1:171,23:33:-33.14,-16.22,-92.98:99
-chr1	327	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=3;HaplotypeScore=227.75;MQ=19.74;MQ0=24;OQ=143.34;QD=0.69;SB=-63.56	GT:AD:DP:GL:GQ	0/1:183,21:38:-34.61,-16.99,-113.13:99
-chr1	352	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=325;Dels=0.00;HRun=1;HaplotypeScore=437.89;MQ=18.90;MQ0=142;OQ=774.23;QD=2.38;SB=-355.54	GT:AD:DP:GL:GQ	0/1:238,84:81:-104.82,-24.11,-183.81:99
-chr1	354	.	C	A	24.89	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=486;Dels=0.01;HRun=1;HaplotypeScore=281.11;MQ=16.12;MQ0=261;QD=0.05;SB=17.54	GT:AD:DP:GL:GQ	0/1:459,24:90:-32.28,-26.51,-269.47:57.71
-chr1	469	.	C	A	22.04	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=82.51;MQ=26.50;MQ0=12;QD=0.39;SB=-7.00	GT:AD:DP:GL:GQ	0/1:34,21:20:-11.52,-6.03,-45.07:54.85
-chr1	664	.	C	G	30.66	PASS	AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=50.85;QD=25.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-8.49,-0.60,-0.00:6.02
-chr1	666	.	C	G	10.99	LowQual	AC=1;AF=0.50;AN=2;DP=1;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=10.99;SB=-10.00	GT:AD:DP:GL:GQ	0/1:0,1:1:-4.35,-0.30,-0.00:1.76
-chr1	2646	rs62635284	G	A	0.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=9.27;MQ=6.23;MQ0=107;OQ=89.13;QD=0.70;SB=-10.00	GT:AD:DP:GL:GQ	1/1:53,75:3:-12.40,-0.90,-0.00:9.03
-chr1	2979	rs62635286	T	G	83.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=11.99;MQ0=41;OQ=300.29;QD=4.77;SB=-10.00	GT:AD:DP:GL:GQ	1/1:31,32:9:-33.61,-2.71,-0.00:27.09
-chr1	2981	rs62028691	A	G	14.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=11.89;MQ0=42;OQ=285.31;QD=4.46;SB=-10.00	GT:AD:DP:GL:GQ	1/1:31,33:9:-32.12,-2.71,-0.00:27.08
-chr1	3759	.	C	A	0.19	PASS	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=9.71;MQ0=116;OQ=458.45;QD=3.14;SB=-211.61	GT:AD:DP:GL:GQ	0/1:106,40:25:-56.66,-7.53,-33.77:99
-chr1	4536	rs11582131	G	C	0.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=9.63;MQ=12.37;MQ0=52;OQ=335.66;QD=4.48;SB=8.06	GT:AD:DP:GL:GQ	0/1:42,33:16:-41.67,-4.82,-26.29:99
-chr1	4540	.	G	A	47.71	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=2;HaplotypeScore=11.12;MQ=11.52;MQ0=49;QD=0.67;SB=8.05	GT:AD:DP:GL:GQ	0/1:66,5:13:-11.97,-3.92,-35.35:80.54
-chr1	4562	rs11490464	C	G	0.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=11.28;MQ0=37;OQ=136.40;QD=2.44;SB=-10.00	GT:AD:DP:GL:GQ	0/1:26,30:9:-19.64,-2.72,-14.87:99
-chr1	4770	rs6682375	A	G	0.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=26.23;MQ0=31;OQ=2992.25;QD=24.73;SB=-1410.84	GT:AD:DP:GL:GQ	1/1:9,111:84:-306.27,-28.58,-3.46:99
-chr1	4793	rs6682385	A	G	0.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=8.98;MQ=29.61;MQ0=5;OQ=3517.41;QD=29.56;SB=-1722.01	GT:AD:DP:GL:GQ	1/1:4,115:109:-350.74,-32.88,-0.10:99
-chr1	5074	rs11586607	T	G	0.01	FDRtranche2.00to10.00	AC=2;AF=1.00;AN=2;DB;DP=126;Dels=0.00;HRun=1;HaplotypeScore=24.34;MQ=21.42;MQ0=68;OQ=1230.02;QD=9.76;SB=-234.94	GT:AD:DP:GL:GQ	1/1:29,97:39:-130.41,-11.75,-3.82:79.31
-chr1	5137	rs62636497	A	T	140.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=21.69;MQ0=25;OQ=1453.92;QD=17.73;SB=-222.33	GT:AD:DP:GL:GQ	1/1:0,74:39:-148.99,-11.75,-0.01:99
-chr1	5966	.	T	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=129;Dels=0.18;HRun=5;HaplotypeScore=140.84;MQ=21.40;MQ0=8;OQ=1764.68;QD=13.68;SB=-234.42	GT:AD:DP:GL:GQ	1/1:0,106:53:-180.07,-15.66,-0.02:99
-chr1	6092	.	C	A	11.16	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=9.08;MQ=27.90;MQ0=10;QD=0.08;SB=14.05	GT:AD:DP:GL:GQ	0/1:125,11:94:-32.68,-28.32,-307.61:43.65
-chr1	6120	rs11489794	G	C	0.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=27.31;MQ0=11;OQ=181.15;QD=2.01;SB=8.06	GT:AD:DP:GL:GQ	0/1:73,17:66:-41.29,-19.89,-251.91:99
-chr1	6151	rs62028673	C	G	0.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=22.13;MQ0=10;OQ=58.79;QD=1.73;SB=-6.99	GT:AD:DP:GL:GQ	0/1:24,10:14:-13.38,-4.22,-45.26:91.62
-chr1	6241	rs17041382	T	C	5.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=138;Dels=0.00;HRun=0;HaplotypeScore=4.98;MQ=14.62;MQ0=74;OQ=755.36;QD=5.47;SB=-258.37	GT:AD:DP:GL:GQ	0/1:39,99:33:-88.77,-9.95,-20.05:99
-chr1	6358	rs3210724	G	C	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=174;Dels=0.00;HRun=0;HaplotypeScore=19.20;MQ=25.41;MQ0=15;OQ=678.86;QD=3.90;SB=-150.77	GT:AD:DP:GL:GQ	0/1:131,42:113:-105.24,-34.07,-360.44:99
-chr1	6360	rs7359297	A	G	49.26	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=2;HaplotypeScore=19.20;MQ=25.54;MQ0=15;QD=0.29;SB=20.10	GT:AD:DP:GL:GQ	0/1:155,16:111:-41.64,-33.43,-398.12:82.10
-chr1	6397	rs15642	C	T	157.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=21.39;MQ0=24;OQ=850.53;QD=7.88;SB=-122.64	GT:AD:DP:GL:GQ	0/1:45,63:33:-98.28,-9.94,-33.57:99
-chr1	7270	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=18.12;MQ=8.37;MQ0=128;OQ=66.01;QD=0.43;SB=-47.55	GT:AD:DP:GL:GQ	0/1:137,16:8:-12.30,-2.42,-14.38:98.84
-chr1	7558	rs7357853	G	A	28.66	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=11.88;MQ0=88;QD=0.23;SB=-10.00	GT:AD:DP:GL:GQ	0/1:113,10:21:-12.48,-6.33,-62.63:61.49
-chr1	7609	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=4.53;MQ=19.87;MQ0=60;OQ=69.47;QD=0.58;SB=-10.00	GT:AD:DP:GL:GQ	0/1:98,22:48:-24.69,-14.46,-166.38:99
-chr1	7766	.	C	T	24.46	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=9.88;MQ=9.94;MQ0=60;QD=0.35;SB=-10.00	GT:AD:DP:GL:GQ	0/1:66,3:7:-7.84,-2.11,-15.08:57.28
-chr1	9089	rs28609851	T	A	1.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=14.01;MQ0=34;OQ=172.68;QD=2.93;SB=-37.66	GT:AD:DP:GL:GQ	0/1:50,9:19:-26.28,-5.72,-45.27:99
-chr1	9185	rs2974813	C	T	45.14	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=3.92;MQ0=67;QD=0.65;SB=-47.56	GT:AD:DP:GL:GQ	1/1:67,2:2:-7.92,-0.60,-0.00:6.02
-chr1	9721	rs12354145	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=2;HaplotypeScore=26.09;MQ=12.03;MQ0=77;OQ=197.90;QD=1.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:97,31:18:-28.50,-5.42,-36.05:99
-chr1	9805	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=10.83;MQ0=134;OQ=142.73;QD=0.73;SB=-10.00	GT:AD:DP:GL:GQ	0/1:171,24:24:-24.81,-7.25,-68.77:99
-chr1	9993	rs7354882	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=155;Dels=0.00;HRun=0;HaplotypeScore=22.48;MQ=21.20;MQ0=19;OQ=727.76;QD=4.70;SB=-285.16	GT:AD:DP:GL:GQ	0/1:126,29:124:-113.46,-37.39,-308.40:99
-chr1	10108	rs6682921	G	A	129.70	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=249;Dels=0.00;HRun=1;HaplotypeScore=98.13;MQ=8.71;MQ0=185;QD=0.52;SB=-64.03	GT:AD:DP:GL:GQ	0/1:175,74:25:-23.78,-7.53,-70.54:99
-chr1	10113	rs11490226	T	C	60.45	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.00;HRun=0;HaplotypeScore=99.00;MQ=8.29;MQ0=191;QD=0.24;SB=-6.56	GT:AD:DP:GL:GQ	0/1:200,52:22:-15.96,-6.63,-68.61:93.28
-chr1	10117	.	G	A	27.78	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=0;HaplotypeScore=92.18;MQ=8.29;MQ0=191;QD=0.11;SB=-12.58	GT:AD:DP:GL:GQ	0/1:210,41:21:-12.39,-6.33,-58.67:60.61
-chr1	10375	rs6683179	G	T	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=229;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=7.78;MQ0=173;OQ=50.55;QD=0.22;SB=-10.00	GT:AD:DP:GL:GQ	0/1:152,76:16:-13.16,-4.82,-44.89:83.39
-chr1	10410	rs11489908	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=236;Dels=0.00;HRun=2;HaplotypeScore=3.67;MQ=7.06;MQ0=196;OQ=84.39;QD=0.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:188,48:18:-17.15,-5.42,-52.83:99
-chr1	16862	rs376349	A	G	0.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=2.47;MQ=20.73;MQ0=3;OQ=399.27;QD=24.95;SB=-188.41	GT:AD:DP:GL:GQ	1/1:2,14:12:-43.52,-3.61,-0.00:36.11
-chr1	18110	rs4413987	G	A	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.00;HRun=0;HaplotypeScore=6.99;MQ=6.98;MQ0=101;OQ=80.12;QD=0.70;SB=-10.00	GT:AD:DP:GL:GQ	0/1:95,19:5:-12.80,-1.51,-7.39:58.87
-chr1	18357	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=8.76;MQ=5.01;MQ0=96;OQ=60.18;QD=0.60;SB=-6.99	GT:AD:DP:GL:GQ	0/1:80,21:4:-10.51,-1.20,-3.97:27.63
-chr1	18421	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=23.14;MQ=14.44;MQ0=48;OQ=339.38;QD=4.35;SB=-90.89	GT:AD:DP:GL:GQ	0/1:55,23:25:-44.76,-7.53,-46.87:99
-chr1	18426	rs4099234	A	G	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=22.14;MQ=14.77;MQ0=46;OQ=857.23;QD=11.13;SB=-429.56	GT:AD:DP:GL:GQ	1/1:24,53:25:-89.32,-7.53,-0.01:75.22
-chr1	18451	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=15;HaplotypeScore=19.76;MQ=19.64;MQ0=16;OQ=152.23;QD=2.67;SB=-85.40	GT:AD:DP:GL:GQ	0/1:45,12:33:-28.45,-9.95,-82.12:99
-chr1	18454	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=47.13;MQ=19.20;MQ0=19;OQ=58.45;QD=0.99;SB=-20.71	GT:AD:DP:GL:GQ	0/1:53,6:35:-19.67,-10.55,-115.15:91.28
-chr1	18526	rs2418705	T	A	37.69	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=4.16;MQ0=59;QD=0.62;SB=-10.00	GT:AD:DP:GL:GQ	1/1:52,9:2:-7.18,-0.60,-0.00:6.02
-chr1	18698	rs3871714	A	G	0.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=9.06;MQ0=38;OQ=98.37;QD=2.19;SB=-10.00	GT:AD:DP:GL:GQ	1/1:27,18:4:-13.37,-1.21,-0.00:12.03
-chr1	18726	rs16924801	C	A	45.81	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=3.57;MQ=10.40;MQ0=25;QD=1.27;SB=-10.00	GT:AD:DP:GL:GQ	1/1:31,5:2:-7.99,-0.60,-0.00:6.02
-chr1	20391	rs4248192	C	T	0.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=17.17;MQ0=74;OQ=114.21;QD=1.08;SB=-10.00	GT:AD:DP:GL:GQ	0/1:95,11:32:-24.34,-9.64,-88.28:99
-chr1	20411	rs62028215	T	G	8.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.84;MQ=18.51;MQ0=71;OQ=573.84;QD=5.26;SB=-10.00	GT:AD:DP:GL:GQ	0/1:56,53:38:-72.12,-11.45,-46.57:99
-chr1	20723	rs28673882	G	C	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=0;HaplotypeScore=9.28;MQ=29.99;MQ0=37;OQ=163.32;QD=1.45;SB=40.84	GT:AD:DP:GL:GQ	0/1:100,13:69:-40.42,-20.80,-251.48:99
-chr1	20786	rs806731	G	T	139.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=34.31;MQ0=5;OQ=1407.60;QD=31.99;SB=-624.57	GT:AD:DP:GL:GQ	1/1:0,44:38:-144.35,-11.44,-0.01:99
-chr1	21158	rs806729	A	C	233.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.41;MQ0=5;OQ=71.14;QD=7.90;SB=-10.00	GT:AD:DP:GL:GQ	1/1:6,3:3:-10.60,-0.90,-0.00:9.03
-chr1	30569	rs62101646	G	A	24.23	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=13.59;MQ0=55;QD=0.37;SB=-0.99	GT:AD:DP:GL:GQ	0/1:53,12:8:-8.12,-2.41,-18.79:57.05
-chr1	30757	rs56954914	G	A	38.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=7.79;MQ0=81;QD=0.44;SB=-10.00	GT:AD:DP:GL:GQ	0/1:56,30:4:-8.31,-1.20,-6.94:57.33
-chr1	30916	.	C	T	44.25	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=6.25;MQ0=41;QD=1.03;SB=-10.00	GT:AD:DP:GL:GQ	1/1:40,3:2:-7.83,-0.60,-0.00:6.02
-chr1	41536	rs2531251	T	C	28.51	LowQual	AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=19.20;MQ0=3;QD=4.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,2:3:-7.04,-0.90,-3.46:25.52
-chr1	41761	.	C	A	0.43	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=27.62;MQ0=8;OQ=172.06;QD=5.55;SB=14.07	GT:AD:DP:GL:GQ	0/1:17,14:19:-26.21,-5.72,-39.58:99
-chr1	41791	.	G	A	3.24	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.83;MQ=30.13;MQ0=12;OQ=368.88;QD=8.20;SB=14.07	GT:AD:DP:GL:GQ	0/1:28,17:31:-49.51,-9.34,-69.71:99
-chr1	42101	rs2691277	T	G	379.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.14;MQ0=8;OQ=1117.45;QD=27.25;SB=-498.06	GT:AD:DP:GL:GQ	1/1:0,41:32:-115.34,-9.64,-0.01:96.29
-chr1	44243	rs2691279	T	C	13.38	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.42;MQ0=2;QD=0.32;SB=29.13	GT:AD:DP:GL:GQ	0/1:35,7:40:-16.65,-12.05,-143.10:46.01
-chr1	44449	.	T	C	10.02	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=30.96;MQ0=0;QD=0.25;SB=38.15	GT:AD:DP:GL:GQ	0/1:31,9:34:-14.48,-10.24,-121.45:42.40
-chr1	44539	rs2462492	C	T	2.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=48.14;MQ0=0;OQ=219.90;QD=4.40;SB=-111.03	GT:AD:DP:GL:GQ	0/1:40,10:50:-40.33,-15.06,-146.68:99
-chr1	44571	.	G	C	349.91	SnpCluster	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=22.88;MQ=46.02;MQ0=0;QD=5.74;SB=-120.67	GT:AD:DP:GL:GQ	0/1:43,18:49:-53.04,-14.77,-155.67:99
-chr1	44573	.	A	T	77.97	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=5;HaplotypeScore=28.86;MQ=46.27;MQ0=0;QD=1.22;SB=18.79	GT:AD:DP:GL:GQ	0/1:55,9:53:-27.05,-15.97,-167.03:99
-chr1	44575	.	T	C	100.77	SnpCluster	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=36.58;MQ=45.60;MQ0=1;QD=1.53;SB=-17.16	GT:AD:DP:GL:GQ	0/1:57,9:54:-29.63,-16.27,-179.47:99
-chr1	44579	.	C	T	185.88	SnpCluster	AC=1;AF=0.50;AN=2;DP=83;Dels=0.04;HRun=5;HaplotypeScore=85.91;MQ=43.82;MQ0=2;QD=2.24;SB=-100.05	GT:AD:DP:GL:GQ	0/1:66,14:58:-39.34,-17.47,-169.22:99
-chr1	44707	.	G	A	14.95	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=25.67;MQ0=14;OQ=285.82;QD=6.35;SB=-102.92	GT:AD:DP:GL:GQ	0/1:29,16:26:-39.70,-7.83,-56.06:99
-chr1	44948	.	T	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=3.69;MQ=36.35;MQ0=4;OQ=152.52;QD=2.99;SB=0.17	GT:AD:DP:GL:GQ	0/1:39,12:36:-29.38,-10.84,-106.91:99
-chr1	45027	rs3091274	C	A	22.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=21.32;MQ0=9;OQ=324.14;QD=13.51;SB=-88.90	GT:AD:DP:GL:GQ	1/1:0,24:10:-36.00,-3.01,-0.00:30.09
-chr1	45162	rs10399749	C	T	268.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=27.59;MQ0=3;OQ=1749.04;QD=37.21;SB=-889.19	GT:AD:DP:GL:GQ	1/1:1,46:44:-178.50,-13.25,-0.01:99
-chr1	45189	rs3107975	T	C	528.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.64;MQ0=0;OQ=1690.04;QD=36.74;SB=-682.96	GT:AD:DP:GL:GQ	1/1:0,46:46:-172.60,-13.85,-0.01:99
-chr1	45408	rs28396308	C	T	25.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=23.65;MQ0=4;OQ=659.03;QD=19.97;SB=-174.67	GT:AD:DP:GL:GQ	1/1:0,33:17:-69.49,-5.12,-0.00:51.17
-chr1	46501	rs2691308	C	T	1.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=36.83;MQ0=2;OQ=218.70;QD=3.22;SB=47.17	GT:AD:DP:GL:GQ	0/1:55,13:65:-44.73,-19.58,-190.42:99
-chr1	46662	rs2691309	T	C	45.27	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=41.65;MQ0=3;QD=1.29;SB=26.11	GT:AD:DP:GL:GQ	0/1:27,8:32:-17.45,-9.64,-107.04:78.10
-chr1	46896	rs2691311	T	C	94.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=47.00;MQ0=0;OQ=492.79;QD=6.48;SB=-211.35	GT:AD:DP:GL:GQ	0/1:55,21:75:-75.15,-22.59,-219.09:99
-chr1	46927	rs2548884	G	A	0.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=44.33;MQ0=0;OQ=115.48;QD=1.89;SB=-71.32	GT:AD:DP:GL:GQ	0/1:53,8:60:-32.90,-18.07,-195.48:99
-chr1	47021	rs6658003	G	C	0.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=8.74;MQ0=44;OQ=79.96;QD=1.45;SB=-46.90	GT:AD:DP:GL:GQ	0/1:36,19:6:-13.09,-1.81,-12.99:99
-chr1	47109	rs2691313	C	G	35.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=36.99;MQ0=0;OQ=346.71;QD=6.80;SB=47.18	GT:AD:DP:GL:GQ	0/1:38,13:51:-53.32,-15.37,-164.95:99
-chr1	47155	.	C	T	135.45	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=34.92;MQ0=10;OQ=1281.86;QD=17.56;SB=-510.08	GT:AD:DP:GL:GQ	0/1:34,39:60:-149.57,-18.10,-69.03:99
-chr1	47239	rs2854673	C	T	32.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.73;MQ0=3;OQ=244.39;QD=4.61;SB=47.16	GT:AD:DP:GL:GQ	0/1:39,14:49:-42.48,-14.76,-140.73:99
-chr1	47719	.	T	A	0.78	PASS	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=19.08;MQ0=29;OQ=670.79;QD=8.49;SB=-194.63	GT:AD:DP:GL:GQ	0/1:47,32:46:-84.22,-13.86,-89.29:99
-chr1	48074	rs2691335	A	G	2.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.51;MQ0=2;OQ=156.22;QD=22.32;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:5:-19.18,-1.51,-0.00:15.05
-chr1	48634	.	T	C	2.39	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.66;MQ=33.49;MQ0=8;OQ=733.26;QD=12.22;SB=-133.25	GT:AD:DP:GL:GQ	0/1:32,28:50:-91.67,-15.06,-103.96:99
-chr1	50195	rs62637816	T	C	137.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=17.45;MQ0=31;OQ=544.88;QD=7.46;SB=-273.42	GT:AD:DP:GL:GQ	0/1:46,26:42:-70.43,-12.65,-88.66:99
-chr1	50884	rs3844232	G	A	43.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.69;MQ0=8;OQ=74.12;QD=4.12;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,7:6:-12.50,-1.81,-9.19:73.80
-chr1	51151	.	T	A	30.50	LowQual	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.43;MQ0=2;QD=5.08;SB=-37.96	GT:AD:DP:GL:GQ	0/1:4,2:4:-7.54,-1.20,-7.68:63.33
-chr1	51152	.	A	G	76.91	PASS	AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.59;MQ0=2;OQ=62.44;QD=8.92;SB=-39.93	GT:AD:DP:GL:GQ	0/1:4,3:5:-11.03,-1.51,-8.33:68.29
-chr1	51305	rs2531261	A	G	318.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.94;MQ0=3;OQ=1035.37;QD=25.88;SB=-471.86	GT:AD:DP:GL:GQ	1/1:0,40:29:-107.13,-8.73,-0.01:87.27
-chr1	51850	.	A	G	82.68	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=39.81;MQ0=7;OQ=720.99;QD=12.22;SB=-171.50	GT:AD:DP:GL:GQ	0/1:32,27:50:-90.45,-15.06,-94.52:99
-chr1	51852	.	G	C	25.49	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=40.15;MQ0=6;OQ=1021.36;QD=17.61;SB=-245.09	GT:AD:DP:GL:GQ	0/1:31,27:50:-120.48,-15.06,-101.09:99
-chr1	52066	rs28402963	T	C	139.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=39.80;MQ0=3;OQ=684.28;QD=9.50;SB=-320.22	GT:AD:DP:GL:GQ	0/1:42,30:68:-92.19,-20.48,-169.52:99
-chr1	52134	rs28599927	A	G	180.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=31.13;MQ0=5;OQ=314.17;QD=8.73;SB=-124.71	GT:AD:DP:GL:GQ	0/1:23,13:30:-43.74,-9.04,-73.62:99
-chr1	52441	rs2531315	G	A	15.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.89;MQ0=7;OQ=286.62;QD=17.91;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:8:-32.24,-2.41,-0.00:24.08
-chr1	52640	rs3844233	A	T	1.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=20.92;MQ0=32;OQ=114.33;QD=2.04;SB=-23.31	GT:AD:DP:GL:GQ	0/1:45,11:17:-19.84,-5.12,-46.79:99
-chr1	53560	.	T	C	39.15	PASS	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=25.49;MQ0=11;OQ=919.76;QD=11.22;SB=-454.58	GT:AD:DP:GL:GQ	0/1:47,35:69:-116.05,-20.79,-145.77:99
-chr1	54476	rs1627939	T	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=2;HaplotypeScore=1.16;MQ=27.48;MQ0=38;OQ=233.94;QD=2.36;SB=-139.05	GT:AD:DP:GL:GQ	0/1:84,15:50:-41.74,-15.06,-148.46:99
-chr1	54790	rs996010	G	T	31.78	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=23.12;MQ0=20;QD=0.47;SB=29.08	GT:AD:DP:GL:GQ	0/1:55,13:40:-18.51,-12.05,-121.17:64.61
-chr1	54839	rs2854687	C	T	10.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=27.08;MQ0=0;OQ=1633.87;QD=34.04;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,48:40:-166.98,-12.05,-0.01:99
-chr1	55660	.	T	C	47.12	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=8.71;MQ0=70;QD=0.52;SB=-10.00	GT:AD:DP:GL:GQ	0/1:73,17:9:-10.71,-2.71,-24.43:79.96
-chr1	55735	.	T	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=7.24;MQ0=61;OQ=58.14;QD=0.81;SB=-10.00	GT:AD:DP:GL:GQ	0/1:55,17:5:-10.60,-1.51,-6.69:51.83
-chr1	56025	rs62639105	A	T	0.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=1.00;MQ=23.00;MQ0=0;OQ=377.29;QD=31.44;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,11:12:-44.38,-3.61,-3.44:2.23
-chr1	60591	.	C	T	1.69	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=14.15;MQ0=46;OQ=324.67;QD=4.39;SB=-159.64	GT:AD:DP:GL:GQ	0/1:50,24:28:-44.18,-8.43,-61.59:99
-chr1	60624	.	T	C	29.51	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=5.38;MQ0=69;QD=0.40;SB=-6.99	GT:AD:DP:GL:GQ	0/1:53,20:3:-7.14,-0.90,-3.77:28.64
-chr1	63704	rs3020697	C	T	122.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.04;MQ=34.36;MQ0=1;OQ=168.10;QD=12.93;SB=-51.56	GT:AD:DP:GL:GQ	1/1:0,13:6:-20.39,-1.81,-0.01:18.05
-chr1	64418	.	A	G	43.84	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=8.82;MQ=6.47;MQ0=82;QD=0.45;SB=-10.00	GT:AD:DP:GL:GQ	1/1:82,16:2:-7.79,-0.60,-0.00:6.02
-chr1	64433	.	T	A	31.10	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=7.92;MQ0=71;QD=0.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:82,12:3:-7.30,-0.90,-3.84:29.36
-chr1	64544	rs13328683	G	T	4.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.57;MQ=18.78;MQ0=9;OQ=435.52;QD=13.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:10,22:12:-47.14,-3.61,-0.00:36.12
-chr1	67325	rs2462497	G	A	48.02	LowQual	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.51;MQ0=2;QD=12.01;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,4:2:-8.21,-0.60,-0.00:6.02
-chr1	72009	.	A	G	32.65	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=5.60;MQ=18.28;MQ0=7;QD=1.72;SB=-38.67	GT:AD:DP:GL:GQ	0/1:14,5:11:-9.86,-3.31,-31.53:65.48
-chr1	72112	rs1851945	A	G	1.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=25.77;MQ0=4;OQ=504.38;QD=26.55;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,15:15:-54.03,-4.52,-0.00:45.14
-chr1	72166	rs2907073	T	C	81.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.95;MQ0=1;OQ=468.64;QD=33.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,14:13:-50.45,-3.91,-0.00:39.13
-chr1	72179	rs2260604	A	C	22.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.51;MQ0=4;OQ=244.12;QD=17.44;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,10:10:-28.01,-3.01,-0.01:30.03
-chr1	72195	.	T	C	61.39	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.33;MQ0=10;OQ=206.79;QD=10.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,7:10:-26.97,-3.01,-11.90:88.90
-chr1	73690	.	A	G	59.97	Indel	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=8.93;MQ=23.64;MQ0=3;QD=4.28;SB=-6.99	GT:AD:DP:GL:GQ	0/1:7,7:8:-11.69,-2.41,-21.22:92.80
-chr1	73692	.	G	A	71.09	Indel	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=3;HaplotypeScore=9.93;MQ=23.64;MQ0=3;QD=5.08;SB=-6.99	GT:AD:DP:GL:GQ	0/1:7,7:8:-12.80,-2.41,-18.45:99
-chr1	73996	.	A	T	22.55	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=27.59;MQ0=22;OQ=466.23;QD=7.40;SB=-57.87	GT:AD:DP:GL:GQ	0/1:36,27:38:-61.35,-11.44,-82.94:99
-chr1	74170	rs4118012	C	A	85.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=197.97;QD=32.99;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:6:-23.37,-1.81,-0.00:18.06
-chr1	74355	rs3871778	C	G	11.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.46;MQ0=2;OQ=92.52;QD=18.50;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:3:-12.74,-0.90,-0.00:9.03
-chr1	74885	.	G	A	80.42	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=18.46;MQ0=14;OQ=538.01;QD=13.12;SB=-187.68	GT:AD:DP:GL:GQ	0/1:20,21:26:-64.92,-7.83,-36.63:99
-chr1	80719	.	G	A	41.54	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=8.20;MQ0=31;QD=1.19;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,2:3:-8.34,-0.91,-2.50:15.90
-chr1	81004	rs4245761	G	T	39.81	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=13.75;MQ0=7;QD=3.32;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,5:2:-7.39,-0.60,-0.00:6.02
-chr1	81077	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=13;HaplotypeScore=2.26;MQ=18.21;MQ0=7;OQ=85.86;QD=5.05;SB=-62.92	GT:AD:DP:GL:GQ	0/1:11,6:5:-13.38,-1.51,-3.74:22.35
-chr1	81199	rs4245763	A	T	30.68	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.70;MQ0=7;QD=3.07;SB=-10.00	GT:AD:DP:GL:GQ	1/1:6,4:2:-6.48,-0.60,-0.00:6.01
-chr1	81378	.	A	C	3.99	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=33.30;MQ0=0;OQ=188.72;QD=4.72;SB=-114.61	GT:AD:DP:GL:GQ	0/1:31,9:34:-32.39,-10.24,-89.64:99
-chr1	81399	rs6702460	G	T	307.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=32.81;MQ0=0;OQ=1379.58;QD=33.65;SB=-370.87	GT:AD:DP:GL:GQ	1/1:0,41:37:-141.55,-11.14,-0.01:99
-chr1	81444	rs1524604	G	A	325.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.68;MQ0=1;OQ=1101.93;QD=36.73;SB=-340.44	GT:AD:DP:GL:GQ	1/1:0,30:28:-113.78,-8.43,-0.01:84.28
-chr1	81611	rs4256762	C	T	100.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=17.29;MQ0=34;OQ=684.35;QD=12.01;SB=-10.00	GT:AD:DP:GL:GQ	1/1:14,43:19:-75.91,-5.72,-3.90:18.23
-chr1	82517	.	T	C	0.75	PASS	AC=2;AF=1.00;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=13.00;MQ0=6;OQ=70.17;QD=3.19;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,22:3:-10.51,-0.90,-0.00:9.03
-chr1	86134	.	C	G	0.28	PASS	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=17.64;MQ0=31;OQ=214.58;QD=2.38;SB=-33.05	GT:AD:DP:GL:GQ	0/1:81,9:51:-40.11,-15.36,-187.83:99
-chr1	88546	.	G	A	0.08	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.25;MQ0=8;OQ=736.28;QD=19.90;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,24:26:-84.74,-7.83,-23.08:99
-chr1	88616	rs4504463	T	C	1.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.27;MQ0=29;OQ=80.37;QD=1.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:43,9:21:-17.65,-6.33,-64.09:99
-chr1	88704	.	G	A	26.43	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=13.14;MQ0=25;QD=0.76;SB=-10.00	GT:AD:DP:GL:GQ	0/1:33,2:8:-8.34,-2.41,-22.88:59.26
-chr1	88715	.	A	G	0.29	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.96;MQ0=21;OQ=53.96;QD=1.74;SB=-10.00	GT:AD:DP:GL:GQ	0/1:28,3:8:-11.09,-2.41,-20.54:86.80
-chr1	88808	.	C	T	3.03	PASS	AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.56;MQ0=9;OQ=459.05;QD=18.36;SB=-49.56	GT:AD:DP:GL:GQ	1/1:1,24:12:-49.49,-3.61,-0.00:36.12
-chr1	88856	rs1851939	G	A	178.37	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=30.10;MQ0=10;QD=3.64;SB=-37.62	GT:AD:DP:GL:GQ	0/1:36,12:37:-32.26,-11.14,-102.50:99
-chr1	88918	.	C	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=6.89;MQ=32.20;MQ0=8;OQ=309.74;QD=3.64;SB=-68.70	GT:AD:DP:GL:GQ	0/1:64,21:74:-56.55,-22.29,-199.33:99
-chr1	88963	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=30.09;MQ=26.41;MQ0=31;OQ=291.13;QD=2.62;SB=-116.74	GT:AD:DP:GL:GQ	0/1:88,23:71:-53.80,-21.40,-203.68:99
-chr1	88966	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=24.42;MQ=26.07;MQ0=32;OQ=253.10;QD=2.32;SB=-149.24	GT:AD:DP:GL:GQ	0/1:88,21:67:-48.78,-20.19,-197.64:99
-chr1	89000	.	A	G	0.14	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=15.31;MQ0=39;OQ=157.34;QD=2.76;SB=-51.84	GT:AD:DP:GL:GQ	0/1:48,9:10:-22.04,-3.02,-12.09:90.71
-chr1	89029	.	C	T	23.46	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.84;MQ=12.16;MQ0=50;QD=0.36;SB=5.02	GT:AD:DP:GL:GQ	0/1:50,16:9:-8.34,-2.71,-21.03:56.28
-chr1	89043	.	T	C	25.04	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=9.57;MQ0=58;QD=0.36;SB=-0.97	GT:AD:DP:GL:GQ	0/1:54,16:6:-7.59,-1.81,-16.33:57.86
-chr1	89188	.	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=17.90;MQ0=10;OQ=61.10;QD=3.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,3:7:-11.50,-2.11,-14.49:93.93
-chr1	89528	.	C	T	1.15	PASS	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.04;MQ0=0;OQ=168.19;QD=24.03;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,6:5:-20.38,-1.51,-0.00:15.05
-chr1	90974	rs62639107	G	T	14.16	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=10.20;MQ0=34;QD=0.33;SB=-0.97	GT:AD:DP:GL:GQ	0/1:33,10:6:-6.49,-1.81,-14.67:46.83
-chr1	91131	.	G	A	0.50	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=10.39;MQ0=55;OQ=206.73;QD=2.79;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,33:9:-26.67,-2.71,-7.60:48.84
-chr1	91212	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=134;Dels=0.01;HRun=13;HaplotypeScore=35.68;MQ=19.40;MQ0=63;OQ=147.19;QD=1.10;SB=-6.99	GT:AD:DP:GL:GQ	0/1:107,25:41:-30.37,-12.37,-109.55:99
-chr1	91252	.	A	C	43.23	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=1;HaplotypeScore=36.75;MQ=16.93;MQ0=85;QD=0.29;SB=-10.00	GT:AD:DP:GL:GQ	0/1:138,10:43:-20.56,-12.95,-127.64:76.06
-chr1	91549	.	A	G	49.47	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=15.98;MQ=27.81;MQ0=39;QD=0.24;SB=65.80	GT:AD:DP:GL:GQ	0/1:179,30:144:-51.61,-43.38,-519.29:82.31
-chr1	91758	.	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=22.49;MQ0=25;OQ=143.40;QD=2.17;SB=15.64	GT:AD:DP:GL:GQ	0/1:56,10:34:-27.86,-10.24,-97.22:99
-chr1	91835	.	T	C	60.94	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.01;MQ0=36;OQ=785.45;QD=10.47;SB=-10.00	GT:AD:DP:GL:GQ	0/1:43,32:33:-91.79,-9.96,-12.24:22.78
-chr1	91851	rs4109800	G	C	35.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.96;MQ0=33;OQ=1198.57;QD=15.98;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,34:33:-133.08,-9.94,-16.89:69.53
-chr1	91938	.	G	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=2.53;MQ=14.92;MQ0=47;OQ=298.50;QD=3.21;SB=-10.00	GT:AD:DP:GL:GQ	0/1:77,15:21:-39.46,-6.32,-39.15:99
-chr1	92459	rs3912701	G	A	1.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.98;MQ=17.65;MQ0=34;OQ=809.52;QD=14.99;SB=-10.00	GT:AD:DP:GL:GQ	1/1:30,24:20:-84.54,-6.02,-0.00:60.20
-chr1	92527	rs4618909	A	G	1.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=1;HaplotypeScore=7.26;MQ=22.11;MQ0=40;OQ=1083.35;QD=10.62;SB=-10.00	GT:AD:DP:GL:GQ	0/1:55,47:51:-126.98,-15.36,-75.91:99
-chr1	92632	rs3872168	C	A	251.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.40;MQ0=16;OQ=274.62;QD=10.98;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,25:9:-31.05,-2.71,-0.00:27.07
-chr1	92814	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=1;HaplotypeScore=9.83;MQ=30.05;MQ0=21;OQ=659.75;QD=3.88;SB=-292.33	GT:AD:DP:GL:GQ	0/1:135,35:144:-112.64,-43.38,-415.54:99
-chr1	93070	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=8.90;MQ=17.00;MQ0=65;OQ=190.64;QD=1.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:83,17:34:-32.59,-10.25,-92.04:99
-chr1	93104	rs62642109	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=24.91;MQ=20.20;MQ0=60;OQ=819.40;QD=6.83;SB=-0.98	GT:AD:DP:GL:GQ	0/1:72,48:57:-102.42,-17.19,-99.00:99
-chr1	93113	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=17.60;MQ=21.02;MQ0=51;OQ=474.12;QD=4.23;SB=5.03	GT:AD:DP:GL:GQ	0/1:79,33:56:-67.57,-16.87,-129.01:99
-chr1	93181	.	T	C	7.86	PASS	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.97;MQ0=67;OQ=759.85;QD=7.17;SB=20.10	GT:AD:DP:GL:GQ	0/1:53,53:35:-89.81,-10.54,-44.53:99
-chr1	93248	rs62639110	G	A	30.22	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=8.07;MQ0=76;QD=0.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:62,22:6:-8.11,-1.81,-14.17:63.05
-chr1	93307	.	G	A	47.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=5.80;MQ0=48;QD=0.94;SB=-10.00	GT:AD:DP:GL:GQ	1/1:44,6:2:-8.11,-0.60,-0.00:6.02
-chr1	93757	.	T	C	30.28	LowQual	AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=10.09;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,2:2:-6.44,-0.60,-0.00:6.01
-chr1	93896	rs4287120	T	C	0.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=174;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=4.84;MQ0=151;OQ=128.63;QD=0.74;SB=-81.37	GT:AD:DP:GL:GQ	1/1:41,133:5:-16.43,-1.51,-0.00:15.04
-chr1	93971	rs4492556	A	G	12.01	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=2.58;MQ=7.18;MQ0=71;QD=0.15;SB=-31.93	GT:AD:DP:GL:GQ	0/1:47,34:7:-6.57,-2.11,-19.60:44.57
-chr1	94001	.	G	T	0.94	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=16.11;MQ0=45;OQ=194.11;QD=3.35;SB=-41.38	GT:AD:DP:GL:GQ	0/1:51,7:13:-26.61,-3.91,-21.51:99
-chr1	94049	rs4288537	T	C	0.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=10.96;MQ=20.93;MQ0=24;OQ=438.79;QD=10.45;SB=-71.88	GT:AD:DP:GL:GQ	0/1:18,24:17:-52.28,-5.12,-8.24:31.18
-chr1	94088	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.06;MQ=13.40;MQ0=57;OQ=79.42;QD=1.15;SB=-38.36	GT:AD:DP:GL:GQ	0/1:64,5:10:-14.24,-3.02,-19.96:99
-chr1	94312	.	C	A	18.04	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=10.70;MQ0=65;QD=0.24;SB=-10.00	GT:AD:DP:GL:GQ	0/1:72,2:9:-7.79,-2.71,-24.60:50.81
-chr1	98160	rs4109806	A	C	199.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.46;MQ0=21;OQ=505.68;QD=12.97;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,39:15:-54.16,-4.52,-0.00:45.14
-chr1	98173	.	T	C	2.30	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.05;MQ0=20;OQ=109.74;QD=3.05;SB=-45.95	GT:AD:DP:GL:GQ	0/1:14,22:12:-17.87,-3.61,-27.89:99
-chr1	98191	rs4109805	A	G	15.99	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=16.84;MQ0=14;QD=0.50;SB=5.05	GT:AD:DP:GL:GQ	0/1:28,4:15:-9.39,-4.52,-49.05:48.72
-chr1	98276	rs4457511	T	G	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=9.15;MQ=5.64;MQ0=97;OQ=125.84;QD=1.20;SB=-67.98	GT:AD:DP:GL:GQ	0/1:81,24:6:-17.67,-1.81,-3.90:20.89
-chr1	99188	.	T	C	0.10	PASS	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=8.00;MQ0=82;OQ=57.15;QD=0.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:85,4:6:-10.81,-1.81,-11.97:89.99
-chr1	99237	.	G	A	48.25	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=4.41;MQ0=117;QD=0.40;SB=-10.00	GT:AD:DP:GL:GQ	1/1:114,6:2:-8.23,-0.60,-0.00:6.02
-chr1	99503	rs4126043	T	A	232.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.79;MQ0=3;OQ=79.29;QD=11.33;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:3:-11.42,-0.90,-0.00:9.03
-chr1	110568	rs4117992	T	C	36.28	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=12.09;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-7.04,-0.60,-0.00:6.02
-chr1	110846	.	C	T	29.97	PASS	AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=21.24;MQ0=9;OQ=175.53;QD=12.54;SB=-93.11	GT:AD:DP:GL:GQ	1/1:6,8:5:-21.11,-1.51,-0.00:15.05
-chr1	110872	rs1851943	C	T	61.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.59;MQ0=3;OQ=127.11;QD=18.16;SB=-91.11	GT:AD:DP:GL:GQ	1/1:0,7:4:-16.25,-1.20,-0.00:12.04
-chr1	117436	.	G	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=9.09;MQ0=104;OQ=195.33;QD=1.58;SB=-97.57	GT:AD:DP:GL:GQ	0/1:100,24:19:-28.54,-5.73,-40.13:99
-chr1	119192	.	C	G	13.29	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=6.87;MQ0=19;QD=0.58;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,8:1:-4.59,-0.30,-0.00:1.76
-chr1	125911	rs11531330	C	T	87.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=18.40;MQ0=3;OQ=89.79;QD=11.22;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,3:3:-12.47,-0.90,-0.00:9.03
-chr1	217782	.	A	T	46.88	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.40;MQ0=4;QD=5.86;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:2:-8.10,-0.60,-0.00:6.02
-chr1	219536	rs6678242	A	C	214.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.88;MQ0=9;OQ=112.38;QD=6.61;SB=-45.01	GT:AD:DP:GL:GQ	1/1:0,17:4:-14.77,-1.20,-0.00:12.04
-chr1	219731	.	C	T	12.21	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.96;MQ0=44;QD=0.17;SB=38.14	GT:AD:DP:GL:GQ	0/1:62,9:27:-12.61,-8.14,-82.06:44.77
-chr1	219921	rs12239119	T	G	63.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.26;MQ0=4;OQ=606.74;QD=25.28;SB=-312.56	GT:AD:DP:GL:GQ	1/1:0,24:18:-64.26,-5.42,-0.01:54.16
-chr1	221068	rs10047119	T	A	39.88	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=254;Dels=0.00;HRun=1;HaplotypeScore=6.12;MQ=8.79;MQ0=135;QD=0.16;SB=-10.00	GT:AD:DP:GL:GQ	1/1:167,87:2:-7.40,-0.60,-0.00:6.02
-chr1	221077	rs10047174	C	A	38.69	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=271;Dels=0.00;HRun=0;HaplotypeScore=6.64;MQ=8.55;MQ0=150;QD=0.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:181,90:2:-7.28,-0.60,-0.00:6.02
-chr1	221092	rs10047175	C	A	39.69	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=283;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=7.57;MQ0=174;QD=0.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:201,82:2:-7.38,-0.60,-0.00:6.02
-chr1	221109	rs10047121	T	C	34.28	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=275;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=7.06;MQ0=184;QD=0.12;SB=-10.00	GT:AD:DP:GL:GQ	1/1:197,78:2:-6.84,-0.60,-0.00:6.02
-chr1	221318	.	T	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=19.94;MQ0=85;OQ=462.52;QD=1.92;SB=39.55	GT:AD:DP:GL:GQ	0/1:212,29:108:-82.07,-32.53,-323.83:99
-chr1	221343	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=0;HaplotypeScore=2.12;MQ=22.79;MQ0=47;OQ=408.64;QD=1.57;SB=-215.29	GT:AD:DP:GL:GQ	0/1:222,38:157:-91.46,-47.31,-595.18:99
-chr1	221367	rs10047230	G	A	0.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=11.19;MQ=25.20;MQ0=11;OQ=1571.46;QD=5.65;SB=-527.77	GT:AD:DP:GL:GQ	0/1:197,80:212:-224.34,-63.91,-509.11:99
-chr1	221389	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=260;Dels=0.00;HRun=1;HaplotypeScore=1.74;MQ=24.37;MQ0=22;OQ=840.34;QD=3.23;SB=-412.02	GT:AD:DP:GL:GQ	0/1:209,50:201:-147.86,-60.54,-597.88:99
-chr1	221420	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=1;HaplotypeScore=4.60;MQ=20.04;MQ0=77;OQ=83.18;QD=0.40;SB=26.98	GT:AD:DP:GL:GQ	0/1:192,14:117:-46.84,-35.24,-385.27:99
-chr1	222364	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.03;HRun=0;HaplotypeScore=32.96;MQ=22.76;MQ0=12;OQ=2072.95;QD=11.14;SB=59.21	GT:AD:DP:GL:GQ	0/1:70,111:137:-251.84,-41.26,-268.25:99
-chr1	222793	.	C	G	25.72	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=260;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=16.62;MQ0=87;QD=0.10;SB=81.54	GT:AD:DP:GL:GQ	0/1:230,30:110:-38.99,-33.14,-447.79:58.55
-chr1	223336	.	C	G	28.20	PASS	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=35.25;MQ0=2;OQ=1925.92;QD=21.40;SB=-854.31	GT:AD:DP:GL:GQ	0/1:39,51:87:-222.09,-26.21,-160.96:99
-chr1	224095	rs8179512	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=229;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=15.51;MQ0=125;OQ=91.58;QD=0.40;SB=-45.96	GT:AD:DP:GL:GQ	0/1:203,26:89:-39.28,-26.84,-255.40:99
-chr1	224171	rs7195389	A	G	40.71	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=269;Dels=0.00;HRun=0;HaplotypeScore=47.18;MQ=22.11;MQ0=18;QD=0.15;SB=122.50	GT:AD:DP:GL:GQ	0/1:232,36:234:-77.87,-70.51,-842.48:73.55
-chr1	224176	rs56055731	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=1;HaplotypeScore=39.67;MQ=21.41;MQ0=32;OQ=545.76;QD=1.98;SB=-248.71	GT:AD:DP:GL:GQ	0/1:242,34:226:-125.93,-68.07,-709.89:99
-chr1	224241	rs62053733	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=0;HaplotypeScore=20.29;MQ=17.49;MQ0=74;OQ=1752.30;QD=8.11;SB=-714.08	GT:AD:DP:GL:GQ	0/1:103,113:104:-209.87,-31.36,-152.51:99
-chr1	224344	rs8179403	T	A	166.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=163;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=23.92;MQ0=45;OQ=2824.26;QD=17.33;SB=-725.16	GT:AD:DP:GL:GQ	0/1:38,125:108:-318.26,-32.55,-66.31:99
-chr1	224419	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=18.87;MQ=14.35;MQ0=100;OQ=127.03;QD=0.68;SB=8.05	GT:AD:DP:GL:GQ	0/1:161,26:49:-30.75,-14.76,-153.48:99
-chr1	224472	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=1;HaplotypeScore=6.53;MQ=15.44;MQ0=125;OQ=992.61;QD=3.80;SB=-39.67	GT:AD:DP:GL:GQ	0/1:177,84:84:-127.86,-25.32,-192.69:99
-chr1	224623	rs7548182	A	T	1.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=3;HaplotypeScore=1.37;MQ=26.54;MQ0=23;OQ=863.08;QD=8.07;SB=50.19	GT:AD:DP:GL:GQ	0/1:39,68:64:-108.87,-19.28,-138.61:99
-chr1	225707	rs6603780	C	G	0.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=6.28;MQ=15.73;MQ0=150;OQ=1742.87;QD=6.27;SB=-566.38	GT:AD:DP:GL:GQ	0/1:147,131:57:-194.74,-17.17,-58.86:99
-chr1	225839	rs6422503	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=34.58;MQ0=26;OQ=4599.62;QD=21.39;SB=-1688.57	GT:AD:DP:GL:GQ	0/1:70,145:162:-458.96,-48.79,-124.49:99
-chr1	226216	.	T	C	24.03	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=3.20;MQ=9.23;MQ0=93;QD=0.13;SB=-10.00	GT:AD:DP:GL:GQ	0/1:162,19:7:-7.79,-2.11,-21.54:56.85
-chr1	227048	.	C	A	43.64	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=9.30;MQ0=121;QD=0.28;SB=-44.79	GT:AD:DP:GL:GQ	0/1:134,21:22:-14.27,-6.63,-62.25:76.48
-chr1	227333	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=5.51;MQ=14.65;MQ0=59;OQ=58.63;QD=0.42;SB=-10.00	GT:AD:DP:GL:GQ	0/1:125,16:25:-16.68,-7.54,-70.62:91.47
-chr1	227353	.	C	A	20.49	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=1;HaplotypeScore=4.94;MQ=14.92;MQ0=62;QD=0.15;SB=-10.00	GT:AD:DP:GL:GQ	0/1:122,18:29:-14.07,-8.74,-90.83:53.29
-chr1	227461	rs28618397	A	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=0;HaplotypeScore=6.94;MQ=8.17;MQ0=115;OQ=63.90;QD=0.44;SB=-10.00	GT:AD:DP:GL:GQ	0/1:131,13:8:-12.09,-2.41,-14.97:96.73
-chr1	227626	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=4.92;MQ=20.49;MQ0=18;OQ=315.55;QD=1.73;SB=-168.42	GT:AD:DP:GL:GQ	0/1:163,19:138:-76.40,-41.57,-437.40:99
-chr1	227735	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=14.30;MQ=17.08;MQ0=35;OQ=66.90;QD=0.75;SB=20.77	GT:AD:DP:GL:GQ	0/1:78,11:41:-22.33,-12.35,-159.24:99
-chr1	230298	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=1;HaplotypeScore=4.58;MQ=24.72;MQ0=17;OQ=319.24;QD=2.47;SB=-97.27	GT:AD:DP:GL:GQ	0/1:109,19:104:-66.59,-31.38,-356.71:99
-chr1	230890	.	G	A	0.28	PASS	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=4.05;MQ=28.42;MQ0=10;OQ=452.11;QD=3.77;SB=-186.08	GT:AD:DP:GL:GQ	0/1:99,21:95:-77.11,-28.62,-272.62:99
-chr1	231027	rs1917217	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=16;HaplotypeScore=20.40;MQ=32.62;MQ0=10;OQ=363.52;QD=5.05;SB=32.11	GT:AD:DP:GL:GQ	0/1:47,24:50:-54.70,-15.07,-118.26:99
-chr1	231044	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=16;HaplotypeScore=28.71;MQ=27.06;MQ0=9;OQ=128.09;QD=1.69;SB=39.29	GT:AD:DP:GL:GQ	0/1:63,12:57:-36.63,-20.54,-166.03:99
-chr1	231045	.	A	T	16.10	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=26.04;MQ=26.31;MQ0=9;QD=0.22;SB=44.16	GT:AD:DP:GL:GQ	0/1:63,8:54:-21.15,-16.27,-182.36:48.82
-chr1	231183	.	A	G	0.09	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=8.45;MQ=28.02;MQ0=10;OQ=325.16;QD=6.25;SB=-110.63	GT:AD:DP:GL:GQ	0/1:19,32:27:-43.95,-8.15,-48.50:99
-chr1	231232	rs11490246	C	T	142.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=27.55;MQ0=9;OQ=1010.69;QD=16.84;SB=-258.84	GT:AD:DP:GL:GQ	1/1:0,59:26:-104.66,-7.83,-0.01:78.25
-chr1	234887	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=14.30;MQ=23.11;MQ0=12;OQ=591.52;QD=2.82;SB=-248.32	GT:AD:DP:GL:GQ	0/1:173,36:184:-117.86,-55.42,-542.00:99
-chr1	235002	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=3;HaplotypeScore=1.45;MQ=7.75;MQ0=92;OQ=65.10;QD=0.63;SB=-6.99	GT:AD:DP:GL:GQ	0/1:88,15:7:-11.90,-2.11,-15.26:97.93
-chr1	235268	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=1;HaplotypeScore=31.21;MQ=26.04;MQ0=17;OQ=96.26;QD=2.53;SB=-57.31	GT:AD:DP:GL:GQ	0/1:24,12:15:-17.43,-4.52,-39.23:99
-chr1	235318	.	C	G	0.88	PASS	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=31.66;MQ0=1;OQ=172.25;QD=9.57;SB=-27.84	GT:AD:DP:GL:GQ	0/1:12,6:17:-25.63,-5.12,-44.90:99
-chr1	237291	rs62639107	G	T	22.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=12.32;MQ0=83;OQ=830.85;QD=6.59;SB=-342.75	GT:AD:DP:GL:GQ	0/1:51,75:34:-96.61,-10.24,-28.48:99
-chr1	237573	.	T	C	21.25	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=8.41;MQ=14.44;MQ0=98;QD=0.12;SB=17.09	GT:AD:DP:GL:GQ	0/1:155,19:37:-16.55,-11.15,-125.38:54.05
-chr1	238151	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=9.86;MQ0=83;OQ=59.88;QD=0.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:91,4:10:-12.29,-3.01,-24.61:92.72
-chr1	238167	rs4109800	G	C	1.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=9.69;MQ0=81;OQ=122.76;QD=1.31;SB=-10.00	GT:AD:DP:GL:GQ	0/1:83,11:9:-18.27,-2.71,-21.24:99
-chr1	238254	.	G	A	14.34	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=10.94;MQ0=73;QD=0.13;SB=-10.00	GT:AD:DP:GL:GQ	0/1:101,9:10:-7.71,-3.01,-28.55:47.01
-chr1	242992	rs4109808	G	C	0.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=205;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=17.96;MQ0=77;OQ=316.33;QD=1.54;SB=11.07	GT:AD:DP:GL:GQ	0/1:143,62:81:-59.32,-24.40,-284.11:99
-chr1	244543	rs62639119	A	G	39.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=13.13;MQ0=71;OQ=645.60;QD=5.98;SB=-100.72	GT:AD:DP:GL:GQ	0/1:56,52:34:-78.09,-10.25,-42.39:99
-chr1	244959	rs4096710	C	T	45.82	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=3.93;MQ=13.07;MQ0=59;QD=0.54;SB=-26.62	GT:AD:DP:GL:GQ	0/1:74,11:15:-12.39,-4.52,-39.32:78.66
-chr1	245030	rs4247528	T	G	34.76	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=14.80;MQ0=42;QD=0.49;SB=8.04	GT:AD:DP:GL:GQ	0/1:62,9:14:-10.98,-4.22,-38.66:67.59
-chr1	245496	.	A	G	44.84	LowQual	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.49;MQ0=2;QD=7.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:2:-7.89,-0.60,-0.00:6.02
-chr1	314685	.	A	T	13.26	PASS	AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.75;MQ=14.76;MQ0=13;OQ=314.43;QD=11.65;SB=-42.39	GT:AD:DP:GL:GQ	1/1:12,15:9:-35.03,-2.71,-0.00:27.09
-chr1	314938	.	G	C	1.97	PASS	AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=12.45;MQ0=16;OQ=80.86;QD=3.23;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,9:3:-11.58,-0.91,-0.00:9.03
-chr1	314990	.	T	C	42.83	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=12.15;MQ0=12;QD=2.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:10,10:2:-7.69,-0.60,-0.00:6.02
-chr1	354114	rs3905534	G	T	4.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=1.96;MQ=17.14;MQ0=8;OQ=149.39;QD=8.30;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,8:10:-21.23,-3.01,-14.53:99
-chr1	374336	rs4959767	C	G	48.85	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=9.01;MQ=5.04;MQ0=75;QD=0.57;SB=-10.00	GT:AD:DP:GL:GQ	1/1:78,7:2:-8.29,-0.60,-0.00:6.02
-chr1	374388	rs4120938	C	T	0.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=7.85;MQ=3.88;MQ0=74;OQ=50.25;QD=0.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:76,7:2:-8.43,-0.60,-0.00:6.02
-chr1	374916	.	A	C	6.13	PASS	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.92;MQ0=3;OQ=209.71;QD=17.48;SB=-40.56	GT:AD:DP:GL:GQ	1/1:2,10:8:-24.56,-2.41,-0.01:24.03
-chr1	391491	.	T	G	33.28	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=5.85;MQ0=67;QD=0.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:70,4:3:-7.51,-0.90,-3.44:25.36
-chr1	394166	.	C	T	0.46	PASS	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=7.89;MQ0=95;OQ=178.49;QD=1.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:96,6:7:-23.23,-2.11,-3.57:14.61
-chr1	394272	.	T	G	16.31	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=17.93;MQ0=35;OQ=484.03;QD=7.81;SB=-10.00	GT:AD:DP:GL:GQ	0/1:39,23:22:-58.31,-6.63,-19.38:99
-chr1	394291	rs12121306	C	T	153.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=16.59;MQ0=30;OQ=364.11;QD=7.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:31,16:14:-43.91,-4.22,-11.01:67.92
-chr1	394310	.	C	T	0.18	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=12.47;MQ0=36;OQ=147.86;QD=3.21;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,5:8:-20.48,-2.41,-10.61:81.97
-chr1	394537	.	G	A	2.58	PASS	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=6.78;MQ=23.70;MQ0=52;OQ=1238.38;QD=11.79;SB=-421.21	GT:AD:DP:GL:GQ	0/1:65,40:50:-142.19,-15.07,-44.99:99
-chr1	394765	.	A	G	0.18	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=7.43;MQ0=57;OQ=65.19;QD=1.07;SB=-10.00	GT:AD:DP:GL:GQ	0/1:58,3:4:-11.01,-1.20,-3.46:22.51
-chr1	394834	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=7.99;MQ=12.79;MQ0=47;OQ=202.79;QD=3.56;SB=-10.00	GT:AD:DP:GL:GQ	0/1:49,8:10:-26.57,-3.01,-12.50:94.91
-chr1	394837	.	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=7.99;MQ=12.80;MQ0=51;OQ=216.52;QD=3.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:48,14:11:-28.25,-3.31,-11.97:86.56
-chr1	404035	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=20.45;MQ=17.63;MQ0=51;OQ=155.60;QD=2.22;SB=-84.79	GT:AD:DP:GL:GQ	0/1:62,8:17:-23.97,-5.12,-38.73:99
-chr1	511466	rs3902909	G	A	114.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.37;MQ0=1;OQ=299.83;QD=6.00;SB=-10.00	GT:AD:DP:GL:GQ	0/1:35,15:40:-45.34,-12.07,-85.80:99
-chr1	513688	rs61767343	C	T	0.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=21.22;MQ0=15;OQ=264.79;QD=2.88;SB=32.01	GT:AD:DP:GL:GQ	0/1:78,14:66:-49.68,-19.91,-161.21:99
-chr1	522943	.	G	A	31.72	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=14;HaplotypeScore=31.16;MQ=21.11;MQ0=30;QD=0.33;SB=74.23	GT:AD:DP:GL:GQ	0/1:84,11:55:-23.03,-16.58,-166.54:64.56
-chr1	523155	.	C	T	20.46	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=11.23;MQ0=37;QD=0.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:56,5:10:-8.34,-3.02,-25.17:53.26
-chr1	523163	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=11.49;MQ0=30;OQ=99.30;QD=1.99;SB=-10.00	GT:AD:DP:GL:GQ	0/1:37,13:9:-15.92,-2.71,-17.34:99
-chr1	523812	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=9.50;MQ=11.52;MQ0=31;OQ=145.45;QD=2.05;SB=-10.00	GT:AD:DP:GL:GQ	0/1:61,10:10:-20.85,-3.02,-13.58:99
-chr1	523821	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=9.21;MQ=15.64;MQ0=25;OQ=121.38;QD=1.84;SB=-10.00	GT:AD:DP:GL:GQ	0/1:57,9:12:-19.04,-3.62,-21.78:99
-chr1	523868	.	G	A	13.34	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.79;MQ0=4;OQ=177.69;QD=5.08;SB=-10.00	GT:AD:DP:GL:GQ	0/1:21,14:15:-25.58,-4.53,-24.67:99
-chr1	524029	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=26.24;MQ0=29;OQ=72.18;QD=0.99;SB=-17.85	GT:AD:DP:GL:GQ	0/1:58,15:34:-20.75,-10.24,-100.17:99
-chr1	524055	rs6680723	C	T	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=2;HaplotypeScore=11.94;MQ=30.97;MQ0=23;OQ=525.09;QD=5.30;SB=-269.67	GT:AD:DP:GL:GQ	0/1:68,31:65:-75.37,-19.58,-166.45:99
-chr1	524061	rs6680725	C	T	44.53	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=14.45;MQ=31.89;MQ0=22;QD=0.42;SB=98.20	GT:AD:DP:GL:GQ	0/1:92,13:70:-28.85,-21.11,-204.21:77.37
-chr1	524105	rs2792879	C	T	49.58	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=35.66;MQ0=5;QD=0.40;SB=82.58	GT:AD:DP:GL:GQ	0/1:106,18:95:-36.89,-28.65,-274.71:82.42
-chr1	524187	.	G	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=13.69;MQ=38.72;MQ0=2;OQ=392.49;QD=8.18;SB=-133.62	GT:AD:DP:GL:GQ	0/1:25,22:25:-49.77,-7.23,-31.06:99
-chr1	524410	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=27.66;MQ=40.25;MQ0=9;OQ=582.52;QD=5.34;SB=-205.05	GT:AD:DP:GL:GQ	0/1:82,27:83:-86.53,-25.00,-225.34:99
-chr1	524592	rs61767348	C	T	0.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=35.17;MQ0=0;OQ=230.33;QD=1.84;SB=-71.36	GT:AD:DP:GL:GQ	0/1:109,16:125:-63.96,-37.65,-391.79:99
-chr1	524704	.	C	G	0.30	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=15.62;MQ0=42;OQ=247.71;QD=3.26;SB=-10.00	GT:AD:DP:GL:GQ	0/1:63,13:16:-32.88,-4.82,-37.64:99
-chr1	525671	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=16.72;MQ=18.80;MQ0=44;OQ=189.70;QD=1.52;SB=-93.64	GT:AD:DP:GL:GQ	0/1:113,12:40:-34.30,-12.05,-118.97:99
-chr1	525779	.	A	G	0.63	PASS	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=22.14;MQ0=11;OQ=348.30;QD=4.15;SB=-47.83	GT:AD:DP:GL:GQ	0/1:66,18:49:-52.88,-14.76,-137.92:99
-chr1	525958	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=25.63;MQ=21.45;MQ0=28;OQ=60.59;QD=0.61;SB=-44.97	GT:AD:DP:GL:GQ	0/1:86,13:50:-24.43,-15.08,-139.15:93.42
-chr1	526007	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=23.90;MQ=27.74;MQ0=20;OQ=72.77;QD=0.52;SB=-61.14	GT:AD:DP:GL:GQ	0/1:119,22:81:-34.97,-24.41,-279.63:99
-chr1	526679	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=6.10;MQ=15.23;MQ0=50;OQ=159.06;QD=1.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:72,25:19:-24.93,-5.74,-37.85:99
-chr1	526910	.	C	T	33.12	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=15.09;MQ=12.21;MQ0=78;QD=0.31;SB=8.05	GT:AD:DP:GL:GQ	0/1:95,11:28:-15.03,-8.43,-86.21:65.95
-chr1	527066	rs1109924	C	T	18.08	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=24.80;MQ0=20;QD=0.22;SB=56.20	GT:AD:DP:GL:GQ	0/1:74,8:55:-21.66,-16.57,-168.07:50.84
-chr1	527350	rs1105044	C	T	0.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=5.45;MQ=30.46;MQ0=9;OQ=109.38;QD=3.91;SB=5.03	GT:AD:DP:GL:GQ	0/1:19,9:14:-18.45,-4.22,-27.73:99
-chr1	527399	.	C	G	0.15	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.45;MQ=22.48;MQ0=26;OQ=195.21;QD=3.42;SB=2.03	GT:AD:DP:GL:GQ	0/1:49,8:23:-29.74,-6.93,-66.80:99
-chr1	527400	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=5.09;MQ=22.50;MQ0=26;OQ=149.94;QD=2.50;SB=3.82	GT:AD:DP:GL:GQ	0/1:51,8:23:-28.15,-9.87,-58.83:99
-chr1	527445	.	C	G	0.06	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=15.27;MQ0=33;OQ=120.74;QD=2.05;SB=-43.89	GT:AD:DP:GL:GQ	0/1:47,12:21:-21.68,-6.33,-71.74:99
-chr1	530476	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=20.30;MQ0=34;OQ=101.99;QD=0.68;SB=16.46	GT:AD:DP:GL:GQ	0/1:135,15:110:-46.63,-33.14,-338.24:99
-chr1	534258	rs61769278	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=9.91;MQ0=64;OQ=75.11;QD=0.62;SB=-10.00	GT:AD:DP:GL:GQ	0/1:81,40:6:-12.60,-1.81,-10.89:90.82
-chr1	534650	rs61769279	G	C	10.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=22.82;MQ0=11;OQ=171.47;QD=4.76;SB=-10.00	GT:AD:DP:GL:GQ	0/1:26,10:21:-26.76,-6.33,-62.71:99
-chr1	536560	rs12025928	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=20.90;MQ=24.04;MQ0=6;OQ=206.19;QD=3.49;SB=8.06	GT:AD:DP:GL:GQ	0/1:26,33:37:-35.06,-11.16,-99.03:99
-chr1	536665	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=53.76;MQ=25.56;MQ0=32;OQ=200.39;QD=1.71;SB=-106.47	GT:AD:DP:GL:GQ	0/1:92,25:66:-43.22,-19.90,-241.56:99
-chr1	536668	rs61769283	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=116;Dels=0.00;HRun=0;HaplotypeScore=52.49;MQ=25.44;MQ0=31;OQ=176.14;QD=1.52;SB=-101.57	GT:AD:DP:GL:GQ	0/1:89,25:62:-39.59,-18.70,-187.95:99
-chr1	536745	rs9438485	T	C	0.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=10.16;MQ=22.38;MQ0=21;OQ=208.92;QD=2.37;SB=-117.20	GT:AD:DP:GL:GQ	0/1:59,28:39:-35.93,-11.75,-108.78:99
-chr1	536815	rs9438487	T	C	0.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=5.65;MQ=26.07;MQ0=22;OQ=487.78;QD=3.81;SB=-195.14	GT:AD:DP:GL:GQ	0/1:76,52:82:-76.77,-24.71,-234.35:99
-chr1	536828	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=25.55;MQ0=22;OQ=75.76;QD=0.57;SB=28.89	GT:AD:DP:GL:GQ	0/1:122,12:82:-35.59,-24.73,-235.80:99
-chr1	537100	.	G	A	12.85	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=13.16;MQ0=46;QD=0.12;SB=-7.00	GT:AD:DP:GL:GQ	0/1:81,22:25:-12.08,-7.53,-73.93:45.46
-chr1	537113	.	C	T	31	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=12.14;MQ0=51;QD=0.29;SB=-6.99	GT:AD:DP:GL:GQ	0/1:84,22:18:-11.81,-5.42,-56.12:63.83
-chr1	537596	.	G	A	46.75	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=23.62;MQ=12.88;MQ0=95;QD=0.28;SB=83.26	GT:AD:DP:GL:GQ	0/1:155,15:50:-23.03,-15.07,-148.87:79.59
-chr1	537643	rs9438495	T	C	0.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=12.92;MQ0=56;OQ=64.59;QD=0.65;SB=29.12	GT:AD:DP:GL:GQ	0/1:83,15:29:-18.49,-8.74,-88.70:97.43
-chr1	540378	.	T	C	1.66	PASS	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=10.44;MQ0=61;OQ=250.82;QD=2.82;SB=-10.00	GT:AD:DP:GL:GQ	0/1:69,20:17:-33.49,-5.12,-26.69:99
-chr1	543605	.	G	A	0.71	PASS	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=19.26;MQ0=44;OQ=534.14;QD=4.38;SB=-165.55	GT:AD:DP:GL:GQ	0/1:95,27:72:-78.41,-21.71,-168.45:99
-chr1	544671	rs4120954	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=1;HaplotypeScore=17.61;MQ=20.21;MQ0=40;OQ=184.77;QD=1.55;SB=-112.49	GT:AD:DP:GL:GQ	0/1:103,16:61:-40.15,-18.39,-172.29:99
-chr1	549231	.	A	G	0.07	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=20.37;MQ0=37;OQ=179.14;QD=2.21;SB=30.55	GT:AD:DP:GL:GQ	0/1:67,14:40:-33.25,-12.05,-121.81:99
-chr1	549235	.	C	G	0.42	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=21.34;MQ0=35;OQ=329.96;QD=4.12;SB=-9.65	GT:AD:DP:GL:GQ	0/1:65,15:43:-49.24,-12.96,-142.49:99
-chr1	549756	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=4.27;MQ=22.29;MQ0=22;OQ=255.07;QD=4.40;SB=-111.11	GT:AD:DP:GL:GQ	0/1:45,13:33:-38.73,-9.94,-83.62:99
-chr1	551019	.	T	G	0.10	PASS	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=26.98;MQ0=20;OQ=197.80;QD=2.50;SB=4.26	GT:AD:DP:GL:GQ	0/1:67,12:53:-39.03,-15.96,-159.29:99
-chr1	551526	rs3908981	C	A	0.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=9.51;MQ0=72;OQ=83.63;QD=0.93;SB=-10.00	GT:AD:DP:GL:GQ	0/1:72,18:8:-14.06,-2.41,-15.23:99
-chr1	552065	.	T	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=19.90;MQ0=42;OQ=77.24;QD=1.04;SB=-15.93	GT:AD:DP:GL:GQ	0/1:68,6:22:-17.64,-6.63,-61.21:99
-chr1	553226	.	C	T	0.19	PASS	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=3;HaplotypeScore=1.62;MQ=24.97;MQ0=44;OQ=605.74;QD=6.51;SB=-203.18	GT:AD:DP:GL:GQ	0/1:67,26:42:-76.51,-12.65,-84.24:99
-chr1	553488	.	T	C	0.79	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=309.81;QD=34.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:9:-34.57,-2.71,-0.00:27.09
-chr1	555282	rs55668158	C	G	1.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=7.94;MQ=40.12;MQ0=17;OQ=1152.38;QD=10.38;SB=-595.15	GT:AD:DP:GL:GQ	0/1:77,33:92:-146.24,-27.72,-249.40:99
-chr1	555454	rs7416152	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=6.80;MQ=46.34;MQ0=10;OQ=133.21;QD=0.99;SB=31.52	GT:AD:DP:GL:GQ	0/1:100,33:107:-48.84,-32.23,-339.95:99
-chr1	555839	rs9283151	C	T	3.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.60;MQ0=9;OQ=549.78;QD=4.07;SB=-291.62	GT:AD:DP:GL:GQ	0/1:100,35:123:-95.32,-37.06,-353.94:99
-chr1	555911	rs6421780	G	A	0.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=39.59;MQ0=14;OQ=584.19;QD=4.56;SB=-299.10	GT:AD:DP:GL:GQ	0/1:90,32:104:-93.03,-31.32,-293.74:99
-chr1	557751	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=2961;Dels=0.00;HRun=2;HaplotypeScore=55.38;MQ=12.90;MQ0=2051;OQ=15633.32;QD=5.28;SB=59.42	GT:AD:DP:GL:GQ	0/1:109,2851:490:-1562.33,-147.66,-305.00:99
-chr1	558077	.	C	T	9.05	PASS	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=45.73;MQ0=8;OQ=1080.95;QD=8.72;SB=-436.58	GT:AD:DP:GL:GQ	0/1:87,37:109:-144.24,-32.87,-230.68:99
-chr1	559290	rs55665739	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=606;Dels=0.00;HRun=3;HaplotypeScore=17.31;MQ=15.96;MQ0=469;OQ=1033.33;QD=1.71;SB=-487.92	GT:AD:DP:GL:GQ	0/1:561,45:103:-137.67,-31.06,-222.34:99
-chr1	559575	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=0;HaplotypeScore=67.59;MQ=29.40;MQ0=143;OQ=1081.89;QD=3.78;SB=-504.88	GT:AD:DP:GL:GQ	0/1:248,38:131:-150.96,-39.49,-301.87:99
-chr1	560501	rs3912527	T	C	0.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=42.53;MQ0=1;OQ=256.32;QD=2.44;SB=101.36	GT:AD:DP:GL:GQ	0/1:81,24:98:-58.45,-29.53,-320.39:99
-chr1	561486	rs4951848	T	G	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=3;HaplotypeScore=1.10;MQ=14.41;MQ0=91;OQ=408.98;QD=3.27;SB=-10.00	GT:AD:DP:GL:GQ	0/1:75,49:28:-52.62,-8.43,-47.04:99
-chr1	561492	rs4951847	T	C	0.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=12.50;MQ0=93;OQ=266.80;QD=2.28;SB=-10.00	GT:AD:DP:GL:GQ	0/1:73,44:19:-35.69,-5.72,-37.10:99
-chr1	561756	rs4092521	C	A	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=234;Dels=0.00;HRun=0;HaplotypeScore=3.92;MQ=28.08;MQ0=93;OQ=133.54;QD=0.57;SB=-15.37	GT:AD:DP:GL:GQ	0/1:211,23:136:-57.61,-40.97,-421.13:99
-chr1	574427	rs4317776	G	T	26.75	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=197;Dels=0.00;HRun=9;HaplotypeScore=3.53;MQ=6.95;MQ0=179;QD=0.14;SB=-30.89	GT:AD:DP:GL:GQ	0/1:180,17:17:-11.08,-5.12,-48.02:59.57
-chr1	575363	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=13.77;MQ=11.89;MQ0=66;OQ=93.79;QD=0.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:97,11:18:-18.09,-5.43,-51.57:99
-chr1	575571	.	A	G	44.95	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=12.50;MQ0=35;QD=0.49;SB=-7.00	GT:AD:DP:GL:GQ	0/1:88,3:9:-10.49,-2.71,-23.69:77.78
-chr1	575656	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=17.86;MQ=21.34;MQ0=33;OQ=102.29;QD=0.86;SB=-15.11	GT:AD:DP:GL:GQ	0/1:101,18:60:-31.59,-18.08,-183.63:99
-chr1	577203	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=2;HaplotypeScore=18.06;MQ=18.60;MQ0=50;OQ=68.56;QD=0.90;SB=-15.46	GT:AD:DP:GL:GQ	0/1:71,5:16:-14.96,-4.82,-42.28:99
-chr1	578945	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=108;Dels=0.01;HRun=3;HaplotypeScore=26.60;MQ=35.12;MQ0=11;OQ=422.46;QD=3.91;SB=-212.09	GT:AD:DP:GL:GQ	0/1:86,21:88:-72.04,-26.51,-252.61:99
-chr1	581862	rs428603	C	T	12.84	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=16.17;MQ0=62;QD=0.11;SB=5.04	GT:AD:DP:GL:GQ	0/1:112,5:25:-12.07,-7.53,-76.64:45.44
-chr1	582131	rs2808300	G	T	0.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=20.19;MQ0=60;OQ=103.03;QD=0.77;SB=74.25	GT:AD:DP:GL:GQ	0/1:113,20:71:-34.97,-21.38,-223.52:99
-chr1	590341	.	G	A	2.32	PASS	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=31.66;MQ0=1;OQ=697.92;QD=5.91;SB=-148.83	GT:AD:DP:GL:GQ	0/1:88,30:101:-103.52,-30.45,-248.69:99
-chr1	591004	.	C	T	96.57	PASS	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.15;MQ0=0;OQ=697.04;QD=7.58;SB=-276.23	GT:AD:DP:GL:GQ	0/1:66,26:89:-99.83,-26.84,-204.19:99
-chr1	591498	rs2531322	C	A	0.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=32.80;MQ0=0;OQ=356.51;QD=2.76;SB=131.06	GT:AD:DP:GL:GQ	0/1:108,21:125:-76.61,-37.67,-331.80:99
-chr1	592316	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=5.89;MQ=8.09;MQ0=42;OQ=58.17;QD=0.88;SB=-10.00	GT:AD:DP:GL:GQ	0/1:52,12:5:-10.61,-1.51,-6.31:48.04
-chr1	592508	rs2686868	C	T	15.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=1;HaplotypeScore=3.16;MQ=34.52;MQ0=0;OQ=1500.76;QD=12.61;SB=-645.23	GT:AD:DP:GL:GQ	0/1:71,48:113:-187.40,-34.04,-240.50:99
-chr1	616184	rs2808330	A	G	13.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.61;MQ0=5;OQ=348.18;QD=3.38;SB=86.31	GT:AD:DP:GL:GQ	0/1:75,28:95:-66.73,-28.63,-299.16:99
-chr1	625884	rs3857304	G	A	2.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=6.38;MQ0=48;OQ=115.97;QD=2.23;SB=-51.67	GT:AD:DP:GL:GQ	1/1:47,5:4:-15.13,-1.21,-0.00:12.03
-chr1	625907	rs4030160	G	A	213.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=11.50;MQ0=27;OQ=320.38;QD=8.90;SB=-93.34	GT:AD:DP:GL:GQ	1/1:25,11:9:-35.62,-2.71,-0.00:27.09
-chr1	625979	rs3871845	G	C	249.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=11.96;MQ0=27;OQ=358.10;QD=9.68;SB=-129.40	GT:AD:DP:GL:GQ	1/1:26,11:9:-39.40,-2.71,-0.00:27.09
-chr1	626181	rs3873089	G	A	177.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.43;MQ0=3;OQ=376.84;QD=28.99;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:10:-41.27,-3.01,-0.00:30.10
-chr1	638976	.	C	T	0.12	PASS	AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=4.06;MQ=23.85;MQ0=8;OQ=648.49;QD=24.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,27:17:-68.44,-5.12,-0.00:51.17
-chr1	640686	.	A	G	25.04	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=6.84;MQ0=102;QD=0.23;SB=-10.00	GT:AD:DP:GL:GQ	0/1:98,10:6:-7.60,-1.81,-15.47:57.87
-chr1	641012	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=12.45;MQ0=138;OQ=282.66;QD=1.80;SB=-113.62	GT:AD:DP:GL:GQ	0/1:142,15:18:-36.97,-5.42,-32.71:99
-chr1	647651	.	G	C	91.46	PASS	AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=15.14;MQ0=31;OQ=441.56;QD=9.39;SB=-238.61	GT:AD:DP:GL:GQ	1/1:28,19:11:-47.74,-3.31,-0.00:33.11
-chr1	652720	rs62639125	G	A	47.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=8.82;MQ0=19;QD=1.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:13,20:2:-8.11,-0.60,-0.00:6.02
-chr1	652960	rs61769340	G	C	105.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=20.58;MQ0=11;OQ=1522.59;QD=27.68;SB=-684.47	GT:AD:DP:GL:GQ	1/1:10,45:39:-155.88,-11.77,-0.03:99
-chr1	656406	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=11.93;MQ0=83;OQ=127.34;QD=1.14;SB=-0.98	GT:AD:DP:GL:GQ	0/1:95,17:17:-21.14,-5.12,-45.67:99
-chr1	662072	.	G	A	11.72	PASS	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=27.50;MQ0=7;OQ=1481.48;QD=11.06;SB=-511.41	GT:AD:DP:GL:GQ	0/1:80,54:118:-187.00,-35.57,-233.79:99
-chr1	662535	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=4.63;MQ=12.94;MQ0=86;OQ=221.86;QD=1.71;SB=-10.00	GT:AD:DP:GL:GQ	0/1:117,13:31:-34.81,-9.34,-77.61:99
-chr1	664297	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=8.91;MQ=25.89;MQ0=44;OQ=139.99;QD=0.72;SB=29.32	GT:AD:DP:GL:GQ	0/1:135,59:118:-52.83,-35.54,-396.03:99
-chr1	664319	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=1;HaplotypeScore=4.98;MQ=25.84;MQ0=39;OQ=562.89;QD=2.86;SB=-70.36	GT:AD:DP:GL:GQ	0/1:152,44:131:-101.81,-42.24,-385.33:99
-chr1	665009	.	G	A	0.15	PASS	AC=2;AF=1.00;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=7.66;MQ=13.29;MQ0=30;OQ=394.21;QD=6.36;SB=-10.00	GT:AD:DP:GL:GQ	1/1:20,42:11:-43.01,-3.32,-0.01:33.10
-chr1	665981	.	C	T	314.88	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.49;MQ0=9;OQ=1228.86;QD=15.36;SB=-521.03	GT:AD:DP:GL:GQ	0/1:42,38:68:-146.65,-20.48,-114.04:99
-chr1	678857	.	T	C	37.39	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=9.96;MQ0=52;QD=0.58;SB=-41.94	GT:AD:DP:GL:GQ	0/1:58,5:10:-10.04,-3.02,-24.70:70.23
-chr1	681407	.	T	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=56;Dels=0.00;HRun=13;HaplotypeScore=8.39;MQ=28.14;MQ0=23;OQ=991.49;QD=17.71;SB=-487.41	GT:AD:DP:GL:GQ	1/1:17,39:33:-109.19,-9.95,-6.46:34.91
-chr1	681927	.	C	G	40.97	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.89;MQ=4.61;MQ0=72;QD=0.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:72,2:3:-8.29,-0.90,-4.05:31.44
-chr1	684740	rs1829739	A	C	31.20	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=3;HaplotypeScore=24.15;MQ=12.41;MQ0=41;QD=0.60;SB=-34.97	GT:AD:DP:GL:GQ	0/1:47,5:9:-9.12,-2.71,-21.21:64.03
-chr1	684742	.	C	A	14.57	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=37.61;MQ=12.41;MQ0=41;QD=0.28;SB=-31.35	GT:AD:DP:GL:GQ	0/1:46,6:9:-7.44,-2.71,-24.53:47.25
-chr1	684781	.	C	T	48.14	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.66;MQ=4.69;MQ0=46;QD=1.00;SB=-49.56	GT:AD:DP:GL:GQ	1/1:40,8:2:-8.22,-0.60,-0.00:6.02
-chr1	684978	.	A	T	38.37	PASS	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.29;MQ0=2;OQ=86.08;QD=14.35;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:3:-12.10,-0.90,-0.00:9.03
-chr1	690691	rs6685320	T	A	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=41.41;MQ0=1;OQ=71.22;QD=0.76;SB=149.48	GT:AD:DP:GL:GQ	0/1:83,11:90:-37.51,-27.11,-298.94:99
-chr1	692785	.	C	T	0.89	PASS	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.63;MQ0=14;OQ=282.72;QD=2.30;SB=-80.41	GT:AD:DP:GL:GQ	0/1:107,16:98:-61.07,-29.52,-300.46:99
-chr1	692834	.	C	T	2.02	PASS	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=26.70;MQ0=10;OQ=722.71;QD=6.12;SB=-381.76	GT:AD:DP:GL:GQ	0/1:89,29:108:-108.08,-32.53,-294.03:99
-chr1	692878	rs12124557	G	C	71.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.28;MQ0=34;OQ=350.61;QD=4.61;SB=-168.38	GT:AD:DP:GL:GQ	0/1:61,15:41:-50.70,-12.35,-126.27:99
-chr1	694230	rs9727436	T	C	8.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=32.48;MQ0=2;OQ=333.56;QD=17.56;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,18:12:-36.95,-3.62,-0.01:36.08
-chr1	695745	.	G	A	102.02	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=41.82;MQ0=0;OQ=1169.68;QD=16.02;SB=-501.47	GT:AD:DP:GL:GQ	0/1:36,37:71:-141.66,-21.41,-112.07:99
-chr1	696231	rs12029736	A	G	92.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=39.21;MQ0=1;OQ=1205.31;QD=20.78;SB=-587.73	GT:AD:DP:GL:GQ	0/1:5,53:49:-138.60,-14.79,-16.39:15.94
-chr1	696641	.	G	A	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=11.92;MQ=21.76;MQ0=28;OQ=1527.01;QD=18.18;SB=-47.56	GT:AD:DP:GL:GQ	1/1:26,58:39:-156.30,-11.75,-0.02:99
-chr1	704290	rs12028261	G	A	67.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=38.97;MQ0=0;OQ=1407.21;QD=35.18;SB=-656.37	GT:AD:DP:GL:GQ	1/1:0,40:36:-144.32,-10.85,-0.01:99
-chr1	705211	rs3131984	T	G	181.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=48.59;MQ0=0;OQ=1797.71;QD=32.69;SB=-808.10	GT:AD:DP:GL:GQ	1/1:0,55:52:-183.37,-15.66,-0.02:99
-chr1	705859	rs4614203	A	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=9;HaplotypeScore=9.09;MQ=20.66;MQ0=19;OQ=690.18;QD=13.80;SB=-46.39	GT:AD:DP:GL:GQ	1/1:1,48:20:-72.61,-6.03,-0.01:60.18
-chr1	708249	rs10900602	A	G	1.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=25.93;MQ0=21;OQ=1118.18;QD=17.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,63:38:-115.46,-11.48,-0.05:99
-chr1	708418	rs10751453	T	C	415.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.69;MQ0=5;OQ=1667.51;QD=27.79;SB=-566.12	GT:AD:DP:GL:GQ	1/1:4,56:54:-174.43,-16.28,-4.09:99
-chr1	710103	rs3121393	T	C	439.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.62;MQ0=19;OQ=1791.16;QD=20.59;SB=-717.22	GT:AD:DP:GL:GQ	1/1:0,87:51:-182.72,-15.36,-0.02:99
-chr1	710660	rs3115846	G	A	23.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=32.94;MQ0=7;OQ=1843.21;QD=32.91;SB=-738.02	GT:AD:DP:GL:GQ	1/1:0,56:47:-187.92,-14.16,-0.01:99
-chr1	713754	rs2977670	G	C	680.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.16;MQ0=0;OQ=1954.35;QD=36.87;SB=-819.16	GT:AD:DP:GL:GQ	1/1:0,53:49:-199.05,-14.78,-0.03:99
-chr1	714052	.	G	A	38.81	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=27.06;MQ=47.82;MQ0=13;QD=0.40;SB=-19.66	GT:AD:DP:GL:GQ	0/1:88,9:69:-27.95,-20.79,-220.66:71.64
-chr1	714724	rs12123401	G	A	77.21	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=38.16;MQ=32.18;MQ0=19;QD=1.19;SB=53.18	GT:AD:DP:GL:GQ	0/1:50,14:32:-20.64,-9.64,-97.41:99
-chr1	714732	rs12735556	C	A	597.50	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=35.96;MQ=32.37;MQ0=15;QD=9.34;SB=-186.20	GT:AD:DP:GL:GQ	0/1:31,30:31:-72.37,-9.34,-42.36:99
-chr1	714734	rs12735557	C	G	606.51	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=32.96;MQ=32.01;MQ0=15;QD=9.48;SB=-232.37	GT:AD:DP:GL:GQ	0/1:31,33:32:-73.58,-9.64,-63.94:99
-chr1	714811	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=105.18;MQ=32.80;MQ0=13;OQ=394.82;QD=4.11;SB=-25.79	GT:AD:DP:GL:GQ	0/1:48,48:42:-55.42,-12.65,-93.88:99
-chr1	714830	.	G	A	44.58	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=2;HaplotypeScore=123.02;MQ=32.55;MQ0=17;QD=0.46;SB=2.03	GT:AD:DP:GL:GQ	0/1:60,27:26:-15.57,-7.83,-82.81:77.42
-chr1	714865	.	G	A	118.87	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=2;HaplotypeScore=72.07;MQ=36.16;MQ0=17;QD=1.19;SB=45.52	GT:AD:DP:GL:GQ	0/1:83,11:39:-26.94,-11.77,-99.77:99
-chr1	714869	.	G	A	210.22	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=70.54;MQ=36.82;MQ0=18;QD=2.08;SB=89.30	GT:AD:DP:GL:GQ	0/1:78,22:52:-39.97,-15.66,-154.79:99
-chr1	714870	.	G	C	132.10	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=64.77;MQ=36.96;MQ0=18;QD=1.33;SB=86.32	GT:AD:DP:GL:GQ	0/1:81,18:51:-31.86,-15.37,-195.72:99
-chr1	714885	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=11.63;MQ=42.34;MQ0=19;OQ=59.67;QD=0.80;SB=57.28	GT:AD:DP:GL:GQ	0/1:59,16:42:-21.91,-12.66,-130.29:92.50
-chr1	714965	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.06;HRun=0;HaplotypeScore=109.90;MQ=37.50;MQ0=15;OQ=104.38;QD=1.12;SB=93.07	GT:AD:DP:GL:GQ	0/1:76,7:50:-34.61,-20.89,-189.48:99
-chr1	714987	.	A	T	75.82	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=80;Dels=0.03;HRun=1;HaplotypeScore=85.54;MQ=37.34;MQ0=12;QD=0.95;SB=77.28	GT:AD:DP:GL:GQ	0/1:70,6:44:-26.77,-15.90,-141.85:99
-chr1	714990	.	A	G	169.75	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=75;Dels=0.04;HRun=1;HaplotypeScore=76.84;MQ=38.08;MQ0=11;QD=2.26;SB=1.07	GT:AD:DP:GL:GQ	0/1:50,19:44:-36.22,-15.96,-136.58:99
-chr1	714991	.	A	G	49.83	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=75;Dels=0.01;HRun=0;HaplotypeScore=63.75;MQ=38.08;MQ0=11;QD=0.66;SB=86.30	GT:AD:DP:GL:GQ	0/1:68,6:44:-21.52,-13.26,-154.68:82.67
-chr1	714995	.	C	A	39.02	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=2;HaplotypeScore=68.11;MQ=38.07;MQ0=12;QD=0.54;SB=48.86	GT:AD:DP:GL:GQ	0/1:52,10:39:-31.66,-24.48,-125.33:71.86
-chr1	715012	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=28.31;MQ=43.81;MQ0=11;OQ=81.07;QD=1.33;SB=77.26	GT:AD:DP:GL:GQ	0/1:50,6:42:-27.43,-16.04,-129.03:99
-chr1	715014	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=28.31;MQ=44.76;MQ0=10;OQ=135.00;QD=2.29;SB=80.30	GT:AD:DP:GL:GQ	0/1:48,10:43:-29.74,-12.96,-149.46:99
-chr1	715704	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=1;HaplotypeScore=25.25;MQ=54.80;MQ0=2;OQ=145.06;QD=1.23;SB=-43.38	GT:AD:DP:GL:GQ	0/1:97,21:107:-50.01,-32.22,-342.89:99
-chr1	716048	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=178;Dels=0.00;HRun=1;HaplotypeScore=18.47;MQ=39.54;MQ0=8;OQ=52.50;QD=0.29;SB=34.27	GT:AD:DP:GL:GQ	0/1:78,99:81:-32.94,-24.40,-274.16:85.34
-chr1	716061	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=21.67;MQ=39.51;MQ0=6;OQ=115.15;QD=0.62;SB=43.85	GT:AD:DP:GL:GQ	0/1:135,49:85:-40.41,-25.61,-331.38:99
-chr1	716222	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=139.36;MQ=31.95;MQ0=27;OQ=92.92;QD=0.79;SB=-50.76	GT:AD:DP:GL:GQ	0/1:103,13:47:-26.73,-14.16,-149.22:99
-chr1	716344	rs3131980	T	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=39.71;MQ=55.45;MQ0=6;OQ=2415.81;QD=31.79;SB=-1086.51	GT:AD:DP:GL:GQ	1/1:2,74:68:-245.18,-20.48,-0.02:99
-chr1	716802	rs4520358	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=160;Dels=0.00;HRun=0;HaplotypeScore=127.95;MQ=28.01;MQ0=48;OQ=1542.52;QD=9.64;SB=-717.92	GT:AD:DP:GL:GQ	0/1:109,49:76:-180.46,-22.93,-134.20:99
-chr1	716807	rs3131979	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.00;HRun=1;HaplotypeScore=146.45;MQ=27.53;MQ0=52;OQ=2520.74;QD=14.92;SB=-1257.54	GT:AD:DP:GL:GQ	0/1:69,89:79:-286.20,-30.85,-56.55:99
-chr1	717392	.	A	G	3.52	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.37;MQ=24.74;MQ0=13;OQ=554.36;QD=8.66;SB=-175.95	GT:AD:DP:GL:GQ	0/1:36,28:38:-70.17,-11.45,-77.18:99
-chr1	717776	.	A	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=36.84;MQ0=8;OQ=198.21;QD=1.82;SB=-48.31	GT:AD:DP:GL:GQ	0/1:82,26:93:-51.12,-28.02,-315.62:99
-chr1	717825	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=45.12;MQ0=3;OQ=93.24;QD=0.90;SB=-41.95	GT:AD:DP:GL:GQ	0/1:87,17:97:-41.83,-29.22,-341.26:99
-chr1	718022	rs3131978	C	T	227.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.78;MQ0=12;OQ=2206.38;QD=27.93;SB=-528.20	GT:AD:DP:GL:GQ	1/1:0,79:55:-224.24,-16.57,-0.01:99
-chr1	718105	rs3131977	C	G	701.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.42;MQ0=9;OQ=2564.24;QD=33.30;SB=-886.52	GT:AD:DP:GL:GQ	1/1:0,77:61:-260.03,-18.38,-0.02:99
-chr1	718468	rs2977661	C	A	0.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=44.88;MQ0=1;OQ=306.65;QD=3.13;SB=125.41	GT:AD:DP:GL:GQ	0/1:81,17:92:-61.67,-27.72,-254.10:99
-chr1	719542	rs4951859	C	G	20.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=0.73;MQ=51.87;MQ0=0;OQ=2314.11;QD=40.60;SB=-1158.05	GT:AD:DP:GL:GQ	1/1:0,57:55:-235.02,-16.58,-0.02:99
-chr1	722635	.	G	A	178.90	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.65;MQ0=17;OQ=703.25;QD=9.38;SB=-329.31	GT:AD:DP:GL:GQ	0/1:40,35:48:-88.07,-14.46,-95.92:99
-chr1	723861	rs3094321	C	T	2.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=4.03;MQ=14.10;MQ0=13;OQ=171.30;QD=5.53;SB=-52.67	GT:AD:DP:GL:GQ	1/1:0,31:5:-20.69,-1.51,-0.00:15.05
-chr1	723905	rs3115866	G	A	435.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.45;MQ0=11;OQ=1488.74;QD=31.02;SB=-417.55	GT:AD:DP:GL:GQ	1/1:0,48:37:-152.47,-11.14,-0.01:99
-chr1	724152	rs2427932	G	A	28.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=40.65;MQ0=10;OQ=544.36;QD=7.78;SB=29.11	GT:AD:DP:GL:GQ	0/1:46,24:57:-74.91,-17.19,-123.40:99
-chr1	724325	rs12564807	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.02;HRun=14;HaplotypeScore=12.95;MQ=25.23;MQ0=25;OQ=486.84;QD=10.36;SB=-195.27	GT:AD:DP:GL:GQ	0/1:7,39:20:-57.99,-6.03,-17.33:99
-chr1	724354	rs7518433	T	C	213.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.24;MQ0=8;OQ=108.50;QD=7.23;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:4:-14.38,-1.21,-0.00:12.04
-chr1	724429	.	G	A	5.67	PASS	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=39.71;MQ0=12;OQ=1919.08;QD=16.26;SB=-856.39	GT:AD:DP:GL:GQ	0/1:56,62:102:-225.91,-30.72,-172.49:99
-chr1	724483	rs2427930	A	G	156.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.92;MQ0=8;OQ=1015.40;QD=8.46;SB=-368.74	GT:AD:DP:GL:GQ	0/1:73,47:110:-137.96,-33.13,-289.42:99
-chr1	724814	rs61770166	A	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.01;HRun=0;HaplotypeScore=8.00;MQ=38.81;MQ0=11;OQ=57.16;QD=0.57;SB=101.37	GT:AD:DP:GL:GQ	0/1:74,25:85:-34.30,-25.30,-302.54:90
-chr1	725289	rs10900603	G	A	319.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.84;MQ0=12;OQ=1308.47;QD=22.56;SB=-614.32	GT:AD:DP:GL:GQ	1/1:0,58:33:-134.44,-9.94,-0.01:99
-chr1	727603	rs3893479	G	A	3.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=20.83;MQ0=35;OQ=241.46;QD=3.71;SB=-122.11	GT:AD:DP:GL:GQ	0/1:49,15:27:-35.56,-8.14,-65.14:99
-chr1	729005	rs2340527	T	A	17.56	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=11;HaplotypeScore=0.00;MQ=42.93;MQ0=12;QD=0.18;SB=2.25	GT:AD:DP:GL:GQ	0/1:70,25:68:-25.52,-20.49,-222.57:50.31
-chr1	729073	rs2427917	A	G	0.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=1.32;MQ=36.83;MQ0=11;OQ=1725.34;QD=25.00;SB=-386.59	GT:AD:DP:GL:GQ	1/1:8,61:54:-180.20,-16.27,-4.08:99
-chr1	729289	rs3131973	A	G	242.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.01;MQ0=22;OQ=768.10;QD=13.48;SB=-48.96	GT:AD:DP:GL:GQ	1/1:0,57:23:-80.40,-6.93,-0.01:69.20
-chr1	729391	rs3094317	G	A	25.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=29.31;MQ0=14;OQ=1050.45;QD=23.87;SB=-501.02	GT:AD:DP:GL:GQ	1/1:0,44:27:-108.64,-8.13,-0.01:81.26
-chr1	731442	rs3115865	T	C	10.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=14.78;MQ0=18;OQ=257.65;QD=3.79;SB=-147.73	GT:AD:DP:GL:GQ	1/1:0,68:9:-29.35,-2.71,-0.01:27.07
-chr1	732688	.	A	G	132.94	PASS	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=40.79;MQ0=0;OQ=1231.30;QD=15.02;SB=-638.22	GT:AD:DP:GL:GQ	0/1:40,42:81:-150.81,-24.40,-157.55:99
-chr1	732884	rs2488925	T	C	45.12	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=12.78;MQ0=54;QD=0.47;SB=-0.97	GT:AD:DP:GL:GQ	0/1:72,25:9:-10.51,-2.71,-24.07:77.96
-chr1	732935	rs2488505	C	A	405.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=25.42;MQ0=21;OQ=984.68;QD=12.62;SB=-456.35	GT:AD:DP:GL:GQ	1/1:10,68:28:-102.06,-8.43,-0.01:84.26
-chr1	734986	rs61823337	A	C	21.52	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=22.23;MQ0=45;QD=0.18;SB=23.10	GT:AD:DP:GL:GQ	0/1:104,17:71:-26.81,-21.38,-234.10:54.33
-chr1	735210	rs2488501	T	C	0.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=29.20;MQ0=16;OQ=204.37;QD=1.75;SB=-126.97	GT:AD:DP:GL:GQ	0/1:101,16:100:-53.85,-30.13,-340.21:99
-chr1	736231	rs3925106	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=38.77;MQ0=4;OQ=87.62;QD=1.33;SB=28.85	GT:AD:DP:GL:GQ	0/1:58,8:62:-30.72,-18.67,-192.09:99
-chr1	736257	rs28622890	G	A	34.58	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=41.58;MQ0=5;QD=0.43;SB=53.57	GT:AD:DP:GL:GQ	0/1:73,8:73:-28.75,-22.01,-217.76:67.42
-chr1	737271	rs2427896	G	A	1.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.89;MQ0=27;OQ=95.91;QD=0.96;SB=26.10	GT:AD:DP:GL:GQ	0/1:78,22:62:-31.55,-18.68,-198.47:99
-chr1	737583	rs2488922	A	G	0.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=42.10;MQ0=2;OQ=266.56;QD=2.17;SB=-121.05	GT:AD:DP:GL:GQ	0/1:92,31:105:-61.60,-31.66,-333.56:99
-chr1	738741	rs2519043	G	T	42.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=26.82;MQ0=11;OQ=2109.65;QD=29.30;SB=-875.26	GT:AD:DP:GL:GQ	1/1:7,65:57:-214.56,-17.17,-0.01:99
-chr1	739128	rs2519041	G	A	43.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=8.37;MQ0=49;QD=0.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:19,51:2:-7.71,-0.60,-0.00:6.02
-chr1	739546	rs12184332	C	T	184.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=12.22;MQ0=29;OQ=412.05;QD=9.81;SB=-172.22	GT:AD:DP:GL:GQ	1/1:0,15:11:-44.79,-3.31,-0.00:33.11
-chr1	739719	rs12409679	C	T	476.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.16;MQ0=31;OQ=1249.90;QD=19.53;SB=-559.74	GT:AD:DP:GL:GQ	1/1:9,55:32:-128.58,-9.64,-0.01:96.31
-chr1	739852	rs12409693	C	T	32.23	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=4;HaplotypeScore=0.83;MQ=11.24;MQ0=16;QD=1.29;SB=-3.98	GT:AD:DP:GL:GQ	0/1:9,16:4:-7.71,-1.20,-7.59:63.88
-chr1	739860	rs12410209	A	G	6.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=11.03;MQ0=14;OQ=69.01;QD=3.14;SB=-6.99	GT:AD:DP:GL:GQ	0/1:7,15:4:-11.39,-1.20,-4.06:28.52
-chr1	742429	rs3094315	G	A	709.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.17;MQ0=0;OQ=3081.43;QD=40.02;SB=-1319.35	GT:AD:DP:GL:GQ	1/1:0,77:77:-311.75,-23.19,-0.02:99
-chr1	742584	rs3131972	A	G	25.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=43.52;MQ0=0;OQ=2970.98;QD=35.37;SB=-1399.49	GT:AD:DP:GL:GQ	1/1:0,84:83:-300.71,-25.00,-0.02:99
-chr1	742757	rs3131971	T	C	41.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=23.17;MQ0=17;OQ=516.07;QD=12.59;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,37:19:-55.23,-5.74,-0.04:57.08
-chr1	743132	rs3115861	C	G	14.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=27.06;MQ0=17;OQ=1234.23;QD=26.26;SB=-15.29	GT:AD:DP:GL:GQ	1/1:0,46:29:-129.86,-11.46,-2.85:86.17
-chr1	743268	rs3115860	C	A	75.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.75;MQ0=7;OQ=486.16;QD=22.10;SB=-153.55	GT:AD:DP:GL:GQ	1/1:0,22:14:-52.20,-4.22,-0.00:42.13
-chr1	743288	rs3131970	T	C	362.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.31;MQ0=12;OQ=231.44;QD=11.57;SB=-100.85	GT:AD:DP:GL:GQ	1/1:0,20:8:-26.73,-2.41,-0.01:24.06
-chr1	743337	rs2073814	C	G	1.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=4;HaplotypeScore=1.47;MQ=27.30;MQ0=10;OQ=1125.84;QD=30.43;SB=-429.30	GT:AD:DP:GL:GQ	1/1:1,36:27:-116.18,-8.13,-0.01:81.27
-chr1	743712	rs56101360	G	T	37.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=10.96;MQ0=18;OQ=73.40;QD=3.50;SB=-44.39	GT:AD:DP:GL:GQ	1/1:0,21:3:-10.83,-0.90,-0.00:9.03
-chr1	744045	rs3131969	A	G	233.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.14;MQ0=6;OQ=1104.31;QD=23.50;SB=-502.19	GT:AD:DP:GL:GQ	1/1:0,47:36:-114.05,-10.86,-0.03:99
-chr1	744055	rs3131968	A	G	489.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.65;MQ0=5;OQ=1245.81;QD=27.08;SB=-566.90	GT:AD:DP:GL:GQ	1/1:0,46:40:-128.20,-12.07,-0.04:99
-chr1	744197	rs3131967	T	C	119.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=53.80;MQ0=2;OQ=2119.16;QD=28.26;SB=-841.48	GT:AD:DP:GL:GQ	1/1:1,74:67:-215.56,-20.21,-0.06:99
-chr1	744366	rs3115859	G	A	143.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.48;MQ0=0;OQ=2152.98;QD=37.77;SB=-958.79	GT:AD:DP:GL:GQ	1/1:0,55:55:-218.90,-16.57,-0.02:99
-chr1	744827	rs3131966	C	T	120.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=47.82;MQ0=1;OQ=2882.74;QD=38.96;SB=-1406.06	GT:AD:DP:GL:GQ	1/1:1,73:72:-291.88,-21.69,-0.02:99
-chr1	745638	rs3131965	A	G	37.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=59.56;MQ0=0;OQ=1308.09;QD=25.16;SB=-645.91	GT:AD:DP:GL:GQ	1/1:2,50:45:-138.61,-13.58,-4.21:93.63
-chr1	745750	rs3131964	C	G	3.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=53.42;MQ0=0;OQ=1959.71;QD=42.60;SB=-541.05	GT:AD:DP:GL:GQ	1/1:0,46:45:-199.57,-13.56,-0.01:99
-chr1	745753	rs3115858	A	T	53.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=52.51;MQ0=0;OQ=1749.78;QD=37.23;SB=-548.77	GT:AD:DP:GL:GQ	1/1:0,47:47:-178.57,-14.15,-0.01:99
-chr1	745791	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=2;HaplotypeScore=18.24;MQ=43.86;MQ0=9;OQ=50.05;QD=0.65;SB=68.26	GT:AD:DP:GL:GQ	0/1:71,6:65:-27.87,-19.59,-256.05:82.88
-chr1	745803	rs3115857	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=56.59;MQ=40.14;MQ0=10;OQ=1678.77;QD=22.69;SB=-752.72	GT:AD:DP:GL:GQ	0/1:24,50:53:-187.11,-15.98,-16.89:9.18
-chr1	745905	.	G	C	40.04	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=109.46;MQ=39.52;MQ0=1;QD=0.47;SB=41.16	GT:AD:DP:GL:GQ	0/1:44,42:46:-21.15,-13.87,-174.52:72.88
-chr1	745926	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=71.25;MQ=39.59;MQ0=1;OQ=190.93;QD=2.22;SB=53.16	GT:AD:DP:GL:GQ	0/1:47,39:55:-38.95,-16.57,-157.39:99
-chr1	745944	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=34.08;MQ=37.55;MQ0=2;OQ=183.15;QD=2.23;SB=41.15	GT:AD:DP:GL:GQ	0/1:68,13:63:-40.58,-18.98,-189.40:99
-chr1	745947	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=37.64;MQ0=2;OQ=144.60;QD=1.76;SB=41.13	GT:AD:DP:GL:GQ	0/1:61,21:63:-36.72,-18.98,-195.32:99
-chr1	745969	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=26.39;MQ=43.31;MQ0=1;OQ=191.12;QD=2.62;SB=65.24	GT:AD:DP:GL:GQ	0/1:56,17:62:-41.07,-18.68,-205.74:99
-chr1	745970	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=53.14;MQ=43.05;MQ0=1;OQ=181.87;QD=2.46;SB=65.22	GT:AD:DP:GL:GQ	0/1:57,13:62:-40.15,-18.68,-186.08:99
-chr1	746120	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=45.83;MQ=41.92;MQ0=5;OQ=178.43;QD=2.66;SB=1.10	GT:AD:DP:GL:GQ	0/1:36,31:38:-32.58,-11.45,-99.35:99
-chr1	746127	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=64.18;MQ=39.79;MQ0=5;OQ=90.17;QD=1.29;SB=23.10	GT:AD:DP:GL:GQ	0/1:61,9:40:-24.35,-12.05,-113.93:99
-chr1	746131	rs12567639	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=86.22;MQ=40.15;MQ0=5;OQ=1193.97;QD=14.74;SB=-198.46	GT:AD:DP:GL:GQ	0/1:23,47:41:-137.40,-14.72,-24.14:94.15
-chr1	746140	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=67.36;MQ=39.96;MQ0=6;OQ=451.51;QD=4.47;SB=-226.37	GT:AD:DP:GL:GQ	0/1:64,37:56:-65.31,-16.87,-128.04:99
-chr1	746183	rs61768169	G	A	45.64	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=15.14;MQ=43.93;MQ0=4;QD=0.48;SB=0.06	GT:AD:DP:GL:GQ	0/1:84,10:80:-31.96,-24.11,-251.75:78.48
-chr1	746197	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=9.62;MQ=45.83;MQ0=2;OQ=266.46;QD=3.10;SB=-143.52	GT:AD:DP:GL:GQ	0/1:62,24:69:-50.72,-20.79,-191.84:99
-chr1	746210	.	C	G	29.36	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=12.28;MQ=48.57;MQ0=1;QD=0.39;SB=83.30	GT:AD:DP:GL:GQ	0/1:61,15:60:-24.30,-18.08,-232.38:62.19
-chr1	746211	.	A	C	19.28	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=12.28;MQ=48.88;MQ0=1;QD=0.26;SB=56.68	GT:AD:DP:GL:GQ	0/1:55,20:60:-23.28,-18.07,-191.05:52.07
-chr1	746241	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=37.04;MQ=43.41;MQ0=2;OQ=460.88;QD=4.90;SB=-102.94	GT:AD:DP:GL:GQ	0/1:66,28:77:-72.58,-23.21,-260.56:99
-chr1	746243	rs3131963	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=38.28;MQ=42.00;MQ0=2;OQ=2225.83;QD=20.61;SB=-986.67	GT:AD:DP:GL:GQ	0/1:37,71:77:-249.07,-23.20,-37.48:99
-chr1	746259	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=53.13;MQ=42.82;MQ0=2;OQ=115.63;QD=1.04;SB=-45.40	GT:AD:DP:GL:GQ	0/1:89,21:81:-39.28,-24.43,-223.64:99
-chr1	746271	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=62.70;MQ=43.89;MQ0=1;OQ=73.67;QD=0.68;SB=-12.36	GT:AD:DP:GL:GQ	0/1:82,19:79:-37.12,-26.47,-271.48:99
-chr1	746467	rs3131962	A	G	256.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.92;MQ0=2;OQ=1247.82;QD=23.54;SB=-557.88	GT:AD:DP:GL:GQ	1/1:1,52:40:-128.40,-12.06,-0.04:99
-chr1	747503	rs3115853	G	A	25.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.30;MQ=58.23;MQ0=2;OQ=3098.30;QD=37.78;SB=-1549.56	GT:AD:DP:GL:GQ	1/1:0,81:79:-317.18,-27.31,-3.76:99
-chr1	747597	rs4951929	C	T	626.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2652.10;QD=38.44;SB=-1324.28	GT:AD:DP:GL:GQ	1/1:0,69:67:-268.81,-20.18,-0.02:99
-chr1	747799	rs4951862	C	A	77.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=57.90;MQ0=0;OQ=1743.44;QD=32.90;SB=-442.30	GT:AD:DP:GL:GQ	1/1:0,53:51:-177.95,-15.36,-0.02:99
-chr1	748007	rs3131956	A	G	613.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1973.59;QD=34.03;SB=-931.61	GT:AD:DP:GL:GQ	1/1:0,58:58:-200.97,-17.48,-0.03:99
-chr1	748187	rs3131955	T	C	137.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=57.23;MQ0=0;OQ=1684.65;QD=30.08;SB=-868.87	GT:AD:DP:GL:GQ	1/1:0,56:51:-172.08,-15.37,-0.03:99
-chr1	748489	rs3131954	C	T	606.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.38;MQ0=0;OQ=1957.02;QD=37.63;SB=-957.97	GT:AD:DP:GL:GQ	1/1:0,52:51:-199.31,-15.37,-0.02:99
-chr1	749563	rs3115852	T	C	295.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.43;MQ0=19;OQ=1638.73;QD=24.46;SB=-694.62	GT:AD:DP:GL:GQ	1/1:0,67:46:-167.47,-13.85,-0.01:99
-chr1	749700	rs3115851	T	A	246.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=37.92;MQ0=12;OQ=2113.34;QD=28.18;SB=-566.84	GT:AD:DP:GL:GQ	1/1:0,75:55:-214.93,-16.56,-0.01:99
-chr1	750775	rs1048488	C	T	147.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=55.79;MQ0=0;OQ=2544.23;QD=37.42;SB=-1282.72	GT:AD:DP:GL:GQ	1/1:0,68:64:-258.02,-19.28,-0.02:99
-chr1	751010	rs3115850	T	C	532.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.77;MQ0=0;OQ=2501.23;QD=35.73;SB=-1116.81	GT:AD:DP:GL:GQ	1/1:0,70:69:-253.73,-20.78,-0.02:99
-chr1	751595	rs2286139	C	T	599.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=41.46;MQ0=7;OQ=1283.06;QD=32.08;SB=-543.21	GT:AD:DP:GL:GQ	1/1:0,40:32:-131.90,-9.64,-0.01:96.32
-chr1	751615	rs1057213	C	T	31.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=31.78;MQ0=12;OQ=906.27;QD=25.17;SB=-453.10	GT:AD:DP:GL:GQ	1/1:0,36:23:-94.22,-6.93,-0.00:69.23
-chr1	751674	rs1057212	G	A	293.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=15.73;MQ0=12;OQ=176.65;QD=10.39;SB=-51.56	GT:AD:DP:GL:GQ	1/1:0,17:5:-21.22,-1.51,-0.00:15.05
-chr1	752136	rs3115849	G	A	60.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.04;MQ0=8;OQ=733.35;QD=26.19;SB=-160.21	GT:AD:DP:GL:GQ	1/1:0,28:19:-76.93,-5.73,-0.01:57.18
-chr1	752452	rs3115848	G	C	110.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=44.19;MQ0=1;OQ=1521.80;QD=34.59;SB=-621.54	GT:AD:DP:GL:GQ	1/1:1,43:40:-155.80,-12.08,-0.04:99
-chr1	752455	rs3131950	C	G	3.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=4.46;MQ=42.62;MQ0=2;OQ=1386.15;QD=32.24;SB=-555.07	GT:AD:DP:GL:GQ	1/1:1,42:36:-142.24,-10.87,-0.04:99
-chr1	752464	rs3131949	T	C	84.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=40.87;MQ0=2;OQ=1077.25;QD=28.35;SB=-454.51	GT:AD:DP:GL:GQ	1/1:1,37:32:-111.32,-9.64,-0.01:96.27
-chr1	752495	rs3131948	T	A	77.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=37.91;MQ0=2;OQ=926.17;QD=28.94;SB=-390.81	GT:AD:DP:GL:GQ	1/1:1,31:26:-96.21,-7.83,-0.01:78.23
-chr1	753257	rs3115847	G	A	0.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=27.21;MQ0=9;OQ=840.10;QD=24.71;SB=-20.92	GT:AD:DP:GL:GQ	1/1:5,28:22:-89.90,-8.89,-2.30:65.88
-chr1	755968	rs2519015	T	A	366.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.21;MQ0=48;OQ=1019.18;QD=12.90;SB=-121.94	GT:AD:DP:GL:GQ	1/1:23,56:29:-105.51,-8.74,-0.01:87.26
-chr1	757643	rs2905042	G	A	71.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=34.85;MQ0=1;OQ=1607.55;QD=32.81;SB=-663.38	GT:AD:DP:GL:GQ	1/1:0,49:41:-164.35,-12.35,-0.01:99
-chr1	758116	rs2977608	A	C	58.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=47.69;MQ0=11;OQ=2396.98;QD=30.34;SB=-914.67	GT:AD:DP:GL:GQ	1/1:4,75:68:-243.30,-20.48,-0.02:99
-chr1	759692	rs2977607	C	A	65.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=47.39;MQ0=6;OQ=1539.69;QD=31.42;SB=-733.73	GT:AD:DP:GL:GQ	1/1:0,49:42:-157.56,-12.65,-0.01:99
-chr1	759938	rs2977606	C	T	514.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.63;MQ0=7;OQ=1693.07;QD=33.20;SB=-574.34	GT:AD:DP:GL:GQ	1/1:0,51:44:-172.91,-13.26,-0.01:99
-chr1	760431	rs3131943	A	G	213.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=31.32;MQ0=2;OQ=527.61;QD=27.77;SB=-87.92	GT:AD:DP:GL:GQ	1/1:0,19:16:-56.35,-4.82,-0.00:48.14
-chr1	760781	rs3095826	T	G	40.05	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=15.14;MQ0=8;QD=3.64;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,11:2:-7.41,-0.60,-0.00:6.02
-chr1	761273	rs2519006	C	T	29.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=27.71;MQ0=20;OQ=1719.34;QD=22.33;SB=-558.69	GT:AD:DP:GL:GQ	1/1:18,59:45:-179.00,-13.55,-3.48:99
-chr1	761686	rs2977605	T	C	284.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.99;MQ0=4;OQ=744.87;QD=26.60;SB=-283.54	GT:AD:DP:GL:GQ	1/1:0,28:24:-78.09,-7.24,-0.02:72.16
-chr1	762618	rs2905039	A	C	494.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.90;MQ0=0;OQ=1864.52;QD=29.13;SB=-798.77	GT:AD:DP:GL:GQ	1/1:0,64:60:-190.09,-18.09,-0.06:99
-chr1	764599	rs28830877	A	C	154.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=49.78;MQ0=3;OQ=2217.13;QD=30.37;SB=-1008.12	GT:AD:DP:GL:GQ	1/1:0,73:64:-225.32,-19.28,-0.02:99
-chr1	764648	rs28873693	G	A	193.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=40.27;MQ0=2;OQ=1900.97;QD=32.22;SB=-951.98	GT:AD:DP:GL:GQ	1/1:0,59:49:-193.70,-14.76,-0.02:99
-chr1	764732	rs55994826	G	A	15.73	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=36.88;MQ0=1;QD=0.58;SB=17.08	GT:AD:DP:GL:GQ	0/1:24,3:23:-11.77,-6.93,-72.32:48.45
-chr1	764737	rs28810152	A	C	715.74	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=38.33;MQ0=0;QD=28.63;SB=-297.55	GT:AD:DP:GL:GQ	1/1:0,25:22:-75.17,-6.63,-0.01:66.18
-chr1	764742	.	A	T	46.72	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=39.13;MQ0=0;QD=2.03;SB=-38.86	GT:AD:DP:GL:GQ	0/1:19,4:18:-13.38,-5.42,-51.11:79.56
-chr1	764746	.	G	A	393.33	SnpCluster	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=40.70;MQ0=1;QD=17.88;SB=-221.92	GT:AD:DP:GL:GQ	0/1:8,14:19:-48.34,-5.72,-22.76:99
-chr1	764763	rs28797844	C	G	118.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=44.74;MQ0=1;OQ=234.91;QD=8.39;SB=-89.25	GT:AD:DP:GL:GQ	0/1:20,8:26:-34.62,-7.84,-73.94:99
-chr1	764786	rs28769076	G	C	293.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.71;MQ0=4;OQ=1154.38;QD=32.98;SB=-346.74	GT:AD:DP:GL:GQ	1/1:0,35:27:-119.03,-8.14,-0.01:81.27
-chr1	765119	.	T	G	7.65	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=15.72;MQ0=15;OQ=87.25;QD=4.15;SB=-66.98	GT:AD:DP:GL:GQ	0/1:15,6:6:-13.82,-1.81,-7.64:58.28
-chr1	765289	rs2905037	G	A	284.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=48.40;MQ0=0;OQ=3000.65;QD=37.51;SB=-1455.38	GT:AD:DP:GL:GQ	1/1:0,80:75:-303.67,-22.59,-0.02:99
-chr1	765522	rs2905035	A	G	84.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=40.77;MQ0=3;OQ=2096.78;QD=30.39;SB=-645.26	GT:AD:DP:GL:GQ	1/1:0,68:58:-213.28,-17.47,-0.02:99
-chr1	766409	rs12124819	A	G	273.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=51.01;MQ0=0;OQ=1354.31;QD=15.75;SB=-621.86	GT:AD:DP:GL:GQ	0/1:41,45:85:-164.32,-25.60,-163.76:99
-chr1	766985	rs2980319	A	T	684.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.93;MQ0=0;OQ=2347.43;QD=37.26;SB=-849.94	GT:AD:DP:GL:GQ	1/1:0,63:62:-238.35,-18.68,-0.02:99
-chr1	768432	rs2977615	A	G	315.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.80;MQ0=5;OQ=1414.86;QD=25.27;SB=-618.23	GT:AD:DP:GL:GQ	1/1:0,56:46:-145.13,-13.88,-0.05:99
-chr1	769890	rs2977613	G	T	314.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=53.23;MQ0=0;OQ=2549.06;QD=34.45;SB=-1034.15	GT:AD:DP:GL:GQ	1/1:0,74:70:-258.51,-21.09,-0.02:99
-chr1	770648	rs2977612	T	A	316.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=55.02;MQ0=0;OQ=2471.78;QD=34.81;SB=-1070.63	GT:AD:DP:GL:GQ	1/1:1,70:68:-253.32,-20.49,-2.56:99
-chr1	773167	rs2980295	T	C	625.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.46;MQ0=0;OQ=2479.28;QD=34.43;SB=-1064.87	GT:AD:DP:GL:GQ	1/1:0,72:71:-251.54,-21.39,-0.02:99
-chr1	774913	rs2905062	G	A	647.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.25;MQ0=0;OQ=2057.09;QD=38.09;SB=-793.69	GT:AD:DP:GL:GQ	1/1:0,54:52:-209.31,-15.66,-0.01:99
-chr1	775852	rs2980300	T	C	398.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.91;MQ0=0;OQ=1925.83;QD=36.34;SB=-289.45	GT:AD:DP:GL:GQ	1/1:0,53:52:-196.18,-15.66,-0.01:99
-chr1	776110	rs59319764	G	A	135.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.95;MQ0=5;OQ=708.27;QD=21.46;SB=-330.44	GT:AD:DP:GL:GQ	1/1:5,28:18:-74.41,-5.42,-0.00:54.18
-chr1	776673	rs2905061	G	A	271.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.77;MQ0=2;OQ=243.21;QD=12.80;SB=-51.67	GT:AD:DP:GL:GQ	1/1:0,19:7:-27.90,-2.11,-0.00:21.07
-chr1	776882	rs2905060	C	T	28.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.47;MQ0=13;OQ=680.11;QD=21.25;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,32:18:-71.60,-5.42,-0.01:54.17
-chr1	776908	.	C	G	26.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=23.04;MQ0=7;QD=1.35;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,8:6:-7.79,-1.82,-13.09:59.77
-chr1	776998	rs28753393	A	G	1.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=22.78;MQ0=8;OQ=492.59;QD=20.52;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,24:14:-52.85,-4.22,-0.00:42.13
-chr1	777048	rs2905058	G	A	64.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=17.04;MQ0=12;OQ=310.80;QD=12.43;SB=-128.67	GT:AD:DP:GL:GQ	1/1:0,25:9:-34.67,-2.71,-0.01:27.08
-chr1	777068	rs2905057	G	A	256.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=15.61;MQ0=17;OQ=265.15;QD=9.14;SB=-131.67	GT:AD:DP:GL:GQ	1/1:0,29:8:-30.10,-2.41,-0.01:24.07
-chr1	777125	rs2905056	C	G	369.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=42.20;MQ0=14;OQ=1716.63;QD=32.39;SB=-514.60	GT:AD:DP:GL:GQ	1/1:0,53:39:-175.26,-11.75,-0.01:99
-chr1	777262	rs2905055	G	T	436.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.93;MQ0=5;OQ=1457.00;QD=33.11;SB=-678.96	GT:AD:DP:GL:GQ	1/1:0,44:39:-149.29,-11.74,-0.01:99
-chr1	777290	.	C	T	29.42	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=32.80;MQ0=5;OQ=855.45;QD=17.11;SB=-308.80	GT:AD:DP:GL:GQ	0/1:21,29:44:-102.09,-13.26,-62.10:99
-chr1	777548	rs2905054	G	T	500.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.40;MQ0=0;OQ=2267.93;QD=36.00;SB=-851.89	GT:AD:DP:GL:GQ	1/1:0,63:62:-230.39,-18.67,-0.01:99
-chr1	777707	rs2905053	C	T	334.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=44.44;MQ0=2;OQ=3957.07;QD=39.57;SB=-1940.72	GT:AD:DP:GL:GQ	1/1:0,100:95:-394.71,-28.61,-0.02:99
-chr1	778576	rs2980306	T	C	128.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=33.51;MQ0=34;OQ=1562.02;QD=19.05;SB=-268.41	GT:AD:DP:GL:GQ	1/1:13,69:45:-159.81,-13.56,-0.02:99
-chr1	778703	rs10157303	T	C	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=7.41;MQ=38.85;MQ0=14;OQ=444.81;QD=5.30;SB=-42.81	GT:AD:DP:GL:GQ	0/1:40,44:57:-64.95,-17.19,-138.39:99
-chr1	778707	rs10159337	C	G	0.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=6.67;MQ=39.47;MQ0=14;OQ=423.04;QD=5.29;SB=32.36	GT:AD:DP:GL:GQ	0/1:47,33:53:-61.57,-15.98,-162.13:99
-chr1	778752	rs10159341	C	T	0.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=43.79;MQ0=4;OQ=82.84;QD=1.45;SB=53.17	GT:AD:DP:GL:GQ	0/1:50,7:44:-24.83,-13.27,-122.87:99
-chr1	778808	.	G	C	4.86	PASS	AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=23.40;MQ0=13;OQ=99.43;QD=5.52;SB=-51.47	GT:AD:DP:GL:GQ	1/1:11,7:3:-13.43,-0.90,-0.00:9.03
-chr1	778958	.	C	G	0.12	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=6.83;MQ=13.77;MQ0=12;OQ=373.21;QD=7.46;SB=-3.98	GT:AD:DP:GL:GQ	0/1:40,10:17:-45.73,-5.12,-29.92:99
-chr1	778962	rs10158938	G	A	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=6.77;MQ=13.74;MQ0=12;OQ=114.14;QD=2.24;SB=-77.09	GT:AD:DP:GL:GQ	0/1:17,34:17:-19.83,-5.13,-36.56:99
-chr1	779001	.	C	G	62.18	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=43.25;MQ=17.50;MQ0=24;QD=0.60;SB=-3.98	GT:AD:DP:GL:GQ	0/1:92,11:44:-22.76,-13.26,-160.88:95.02
-chr1	779004	.	G	C	379.18	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=41.31;MQ=17.52;MQ0=26;QD=3.61;SB=-3.98	GT:AD:DP:GL:GQ	0/1:83,21:42:-55.98,-14.78,-128.84:99
-chr1	779007	.	G	C	125.98	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=41.47;MQ=17.84;MQ0=24;QD=1.21;SB=-3.98	GT:AD:DP:GL:GQ	0/1:82,22:45:-29.45,-13.56,-167.32:99
-chr1	779046	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=13.36;MQ=16.85;MQ0=30;OQ=85.18;QD=0.76;SB=-0.98	GT:AD:DP:GL:GQ	0/1:103,9:39:-23.55,-11.75,-110.84:99
-chr1	779119	rs3131939	T	C	14.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=38.97;MQ0=6;OQ=1691.71;QD=26.03;SB=-847.52	GT:AD:DP:GL:GQ	1/1:0,65:53:-172.80,-15.99,-0.05:99
-chr1	782126	rs1044922	A	G	199.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=35.10;MQ0=8;OQ=1304.52;QD=20.38;SB=-463.86	GT:AD:DP:GL:GQ	1/1:3,61:42:-134.08,-12.67,-0.04:99
-chr1	782343	rs2905036	C	T	605.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=44.88;MQ0=2;OQ=3789.97;QD=39.07;SB=-1780.39	GT:AD:DP:GL:GQ	1/1:0,97:94:-378.00,-28.32,-0.03:99
-chr1	783071	rs2905029	C	G	4.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=24.02;MQ0=7;OQ=636.50;QD=15.91;SB=29.13	GT:AD:DP:GL:GQ	0/1:20,20:32:-76.58,-9.64,-67.00:99
-chr1	783292	rs2519067	T	C	14.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=32.87;MQ0=7;OQ=1046.72;QD=28.29;SB=-162.84	GT:AD:DP:GL:GQ	1/1:5,32:30:-108.26,-9.03,-0.01:90.27
-chr1	785455	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=20;HaplotypeScore=3.33;MQ=47.34;MQ0=4;OQ=246.17;QD=4.48;SB=-56.75	GT:AD:DP:GL:GQ	0/1:43,12:47:-42.06,-14.16,-132.17:99
-chr1	786397	.	T	C	0.59	PASS	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=41.18;MQ0=9;OQ=325.37;QD=4.52;SB=-24.72	GT:AD:DP:GL:GQ	0/1:50,22:59:-53.59,-17.77,-179.67:99
-chr1	786590	rs2909612	G	T	160.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=27.34;MQ0=10;OQ=1960.56;QD=30.63;SB=-1001.80	GT:AD:DP:GL:GQ	1/1:0,64:54:-199.65,-16.26,-0.01:99
-chr1	786630	rs12076540	G	A	0.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=7.41;MQ=41.01;MQ0=13;OQ=2659.94;QD=26.60;SB=-1327.51	GT:AD:DP:GL:GQ	0/1:23,77:83:-294.28,-25.01,-36.59:99
-chr1	786634	rs2909613	T	C	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=7.24;MQ=42.00;MQ0=12;OQ=84.11;QD=0.83;SB=12.37	GT:AD:DP:GL:GQ	0/1:80,21:85:-37.30,-25.61,-300.66:99
-chr1	786902	.	A	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=48.19;MQ0=15;OQ=198.92;QD=1.55;SB=-72.06	GT:AD:DP:GL:GQ	0/1:96,32:111:-56.61,-33.43,-385.87:99
-chr1	787026	.	G	A	14.82	LowQual	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=46.76;MQ0=8;QD=0.17;SB=-27.80	GT:AD:DP:GL:GQ	0/1:74,15:80:-28.85,-24.10,-261.80:47.51
-chr1	787041	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=44.71;MQ0=13;OQ=84.25;QD=0.90;SB=-23.86	GT:AD:DP:GL:GQ	0/1:71,22:80:-37.92,-26.21,-271.06:99
-chr1	787889	rs4951864	C	T	266.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.78;MQ0=1;OQ=2714.18;QD=38.77;SB=-989.31	GT:AD:DP:GL:GQ	1/1:1,69:67:-275.02,-20.18,-0.01:99
-chr1	789326	rs4245756	T	C	211.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.75;MQ0=0;OQ=3107.92;QD=34.53;SB=-1502.55	GT:AD:DP:GL:GQ	1/1:0,90:89:-314.41,-26.81,-0.04:99
-chr1	789870	rs6681049	T	C	615.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.06;MQ0=1;OQ=2660.56;QD=34.55;SB=-1115.14	GT:AD:DP:GL:GQ	1/1:0,77:73:-269.66,-21.99,-0.02:99
-chr1	790246	rs4951931	C	T	190.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=47.97;MQ0=4;OQ=2808.35;QD=36.95;SB=-1258.17	GT:AD:DP:GL:GQ	1/1:1,75:70:-284.44,-21.09,-0.02:99
-chr1	791806	rs7516866	C	T	78.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=49.91;MQ0=4;OQ=2127.43;QD=34.88;SB=-1017.37	GT:AD:DP:GL:GQ	1/1:0,61:56:-216.36,-16.88,-0.03:99
-chr1	791858	rs7553084	G	A	0.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=36.92;MQ0=13;OQ=63.33;QD=1.47;SB=-33.64	GT:AD:DP:GL:GQ	0/1:29,14:21:-15.95,-6.33,-55.40:96.17
-chr1	791869	rs9700144	T	C	36.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=30.98;MQ0=16;OQ=499.95;QD=11.90;SB=-156.35	GT:AD:DP:GL:GQ	0/1:18,24:19:-59.00,-5.72,-11.19:54.70
-chr1	791956	rs7553197	G	A	67.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=36.93;MQ0=8;OQ=1294.09;QD=27.53;SB=-402.66	GT:AD:DP:GL:GQ	1/1:3,44:34:-133.00,-10.24,-0.01:99
-chr1	792054	.	G	A	0.09	PASS	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=2.92;MQ=30.80;MQ0=19;OQ=223.16;QD=2.37;SB=-57.50	GT:AD:DP:GL:GQ	0/1:66,28:40:-37.67,-12.07,-95.70:99
-chr1	792085	rs61768213	G	A	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=11.76;MQ=27.41;MQ0=19;OQ=204.34;QD=1.93;SB=-8.44	GT:AD:DP:GL:GQ	0/1:88,18:55:-40.31,-16.60,-140.17:99
-chr1	792094	rs59334306	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=46.76;MQ=26.45;MQ0=20;OQ=280.32;QD=2.64;SB=-7.86	GT:AD:DP:GL:GQ	0/1:75,30:53:-47.28,-15.96,-151.37:99
-chr1	792103	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=25.85;MQ=29.18;MQ0=20;OQ=339.53;QD=3.09;SB=-172.66	GT:AD:DP:GL:GQ	0/1:84,26:61:-55.65,-18.41,-142.90:99
-chr1	792163	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.02;HRun=3;HaplotypeScore=9.77;MQ=36.34;MQ0=8;OQ=472.25;QD=5.02;SB=-153.68	GT:AD:DP:GL:GQ	0/1:49,43:64:-69.50,-18.99,-156.72:99
-chr1	792183	.	G	A	7.22	PASS	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=42.20;MQ0=9;OQ=1359.41;QD=15.27;SB=-245.27	GT:AD:DP:GL:GQ	0/1:36,53:59:-157.01,-17.79,-57.64:99
-chr1	792201	.	G	A	0.06	PASS	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=43.46;MQ0=8;OQ=234.21;QD=2.47;SB=6.27	GT:AD:DP:GL:GQ	0/1:68,27:69:-47.53,-20.82,-170.85:99
-chr1	792244	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=3.46;MQ=47.18;MQ0=4;OQ=75.38;QD=1.05;SB=92.33	GT:AD:DP:GL:GQ	0/1:49,23:53:-26.79,-15.97,-181.50:99
-chr1	793978	rs9725068	G	A	105.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.47;MQ0=13;OQ=1474.93;QD=26.34;SB=-321.42	GT:AD:DP:GL:GQ	1/1:0,56:37:-151.09,-11.15,-0.01:99
-chr1	794403	rs11240778	T	C	115.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.32;MQ0=0;OQ=2475.68;QD=30.95;SB=-1150.98	GT:AD:DP:GL:GQ	1/1:0,80:77:-251.22,-23.23,-0.07:99
-chr1	797375	rs10751454	A	G	614.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.93;MQ0=1;OQ=2184.15;QD=34.67;SB=-971.41	GT:AD:DP:GL:GQ	1/1:0,63:61:-222.02,-18.37,-0.02:99
-chr1	797624	rs4951932	C	A	532.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.69;MQ0=0;OQ=2699.27;QD=36.48;SB=-1270.15	GT:AD:DP:GL:GQ	1/1:0,74:72:-273.52,-21.68,-0.01:99
-chr1	798086	rs4951933	G	C	74.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=48.23;MQ0=3;OQ=1918.57;QD=25.24;SB=-881.14	GT:AD:DP:GL:GQ	1/1:5,71:54:-198.81,-16.33,-3.37:99
-chr1	798494	rs11240779	G	A	160.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=54.32;MQ0=0;OQ=2346.63;QD=37.85;SB=-859.15	GT:AD:DP:GL:GQ	1/1:0,62:60:-238.27,-18.08,-0.02:99
-chr1	798785	rs6594027	G	A	211.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=43.75;MQ0=6;OQ=1743.42;QD=29.06;SB=-625.73	GT:AD:DP:GL:GQ	1/1:3,57:47:-180.84,-14.16,-2.92:99
-chr1	798791	rs11240780	C	T	1.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=44.87;MQ0=5;OQ=1874.68;QD=30.73;SB=-625.19	GT:AD:DP:GL:GQ	1/1:3,58:49:-194.73,-14.76,-3.68:99
-chr1	801153	rs6683530	G	C	58.35	Indel	AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=47.12;MQ0=0;QD=7.29;SB=-48.46	GT:AD:DP:GL:GQ	0/1:3,5:6:-10.93,-1.81,-12.15:91.19
-chr1	801443	.	G	C	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=38.48;MQ0=1;OQ=52.85;QD=17.62;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-8.69,-0.60,-0.00:6.02
-chr1	801493	.	G	A	49.74	LowQual	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=43.23;MQ0=0;QD=5.53;SB=-18.25	GT:AD:DP:GL:GQ	0/1:2,4:4:-12.63,-4.37,-6.30:19.25
-chr1	801563	.	C	G	14.05	LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=42.60;MQ0=0;QD=1.40;SB=-3.98	GT:AD:DP:GL:GQ	0/1:8,2:7:-6.79,-2.12,-21.33:46.71
-chr1	801598	.	T	C	10.44	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=49.26;MQ0=0;OQ=130.47;QD=6.21;SB=-25.63	GT:AD:DP:GL:GQ	0/1:13,8:15:-20.85,-4.52,-36.05:99
-chr1	801628	.	C	T	6.09	PASS	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=52.56;MQ0=0;OQ=245.60;QD=14.45;SB=-39.65	GT:AD:DP:GL:GQ	0/1:7,10:12:-31.46,-3.62,-11.96:83.42
-chr1	802130	rs7541694	A	G	69.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=55.65;MQ0=0;OQ=1955.23;QD=29.18;SB=-933.35	GT:AD:DP:GL:GQ	1/1:0,67:63:-199.17,-19.00,-0.06:99
-chr1	802147	rs7545373	C	G	33.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=3.57;MQ=55.54;MQ0=0;OQ=2348.31;QD=37.27;SB=-1198.48	GT:AD:DP:GL:GQ	1/1:2,61:60:-246.74,-18.09,-8.33:97.66
-chr1	802165	.	G	A	18.16	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.79;MQ=55.42;MQ0=0;QD=0.31;SB=71.21	GT:AD:DP:GL:GQ	0/1:51,8:51:-20.46,-15.37,-155.58:50.93
-chr1	802175	.	C	T	26.53	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=55.08;MQ0=0;QD=0.48;SB=56.20	GT:AD:DP:GL:GQ	0/1:46,8:48:-20.39,-14.46,-154.35:59.35
-chr1	802189	.	G	A	11.38	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=55.49;MQ0=0;QD=0.20;SB=56.19	GT:AD:DP:GL:GQ	0/1:49,8:51:-19.75,-15.37,-163.52:43.89
-chr1	802470	.	T	C	21.38	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=54.38;MQ0=1;QD=0.34;SB=62.23	GT:AD:DP:GL:GQ	0/1:57,6:59:-23.19,-17.77,-210.98:54.19
-chr1	802488	.	G	T	29.03	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=53.89;MQ0=1;QD=0.53;SB=65.21	GT:AD:DP:GL:GQ	0/1:49,6:52:-21.85,-15.66,-163.62:61.86
-chr1	802614	rs4246500	T	C	405.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1600.84;QD=34.80;SB=-568.88	GT:AD:DP:GL:GQ	1/1:0,46:45:-163.68,-13.56,-0.02:99
-chr1	803503	rs16973606	A	G	11.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=28.75;MQ0=1;OQ=1669.54;QD=28.30;SB=-566.93	GT:AD:DP:GL:GQ	1/1:0,58:52:-170.59,-15.68,-0.05:99
-chr1	803610	rs4970388	G	A	620.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.63;MQ0=0;OQ=2297.43;QD=38.94;SB=-1171.71	GT:AD:DP:GL:GQ	1/1:0,59:58:-233.34,-17.47,-0.02:99
-chr1	803950	.	C	A	24.11	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=7.91;MQ=35.01;MQ0=10;QD=0.32;SB=59.14	GT:AD:DP:GL:GQ	0/1:54,21:50:-20.76,-15.06,-152.32:56.93
-chr1	803957	rs61768235	A	G	0.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=7.75;MQ=34.03;MQ0=10;OQ=322.16;QD=4.30;SB=35.12	GT:AD:DP:GL:GQ	0/1:42,30:47:-49.67,-14.18,-120.05:99
-chr1	803968	.	C	T	1.63	PASS	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=30.80;MQ0=12;OQ=418.55;QD=4.81;SB=59.13	GT:AD:DP:GL:GQ	0/1:53,34:61:-63.53,-18.39,-146.32:99
-chr1	804010	rs4268301	G	C	0.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=6.53;MQ=32.14;MQ0=12;OQ=1062.36;QD=10.84;SB=53.20	GT:AD:DP:GL:GQ	0/1:43,55:71:-130.91,-21.39,-167.36:99
-chr1	804023	.	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=7.44;MQ=36.24;MQ0=5;OQ=967.44;QD=10.63;SB=62.24	GT:AD:DP:GL:GQ	0/1:48,43:70:-121.12,-21.09,-190.26:99
-chr1	804036	.	A	T	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=7.15;MQ=36.45;MQ0=7;OQ=717.66;QD=8.34;SB=65.21	GT:AD:DP:GL:GQ	0/1:47,38:68:-95.53,-20.48,-155.46:99
-chr1	804078	rs4468103	A	G	426.89	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=12.81;MQ=43.94;MQ0=3;QD=5.62;SB=77.26	GT:AD:DP:GL:GQ	0/1:53,23:63:-64.96,-18.98,-178.46:99
-chr1	804080	rs34234497	C	A	381.14	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=12.71;MQ=43.70;MQ0=3;QD=4.95;SB=89.27	GT:AD:DP:GL:GQ	0/1:53,24:67:-61.57,-20.18,-178.60:99
-chr1	804083	.	C	A	27.31	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=12.71;MQ=43.58;MQ0=4;QD=0.34;SB=86.24	GT:AD:DP:GL:GQ	0/1:70,11:67:-26.19,-20.18,-214.42:60.14
-chr1	804127	rs4571914	C	T	3.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=47.10;MQ0=4;OQ=2988.66;QD=31.13;SB=-1433.34	GT:AD:DP:GL:GQ	1/1:3,93:75:-302.47,-22.59,-0.02:99
-chr1	804160	.	T	A	1.44	PASS	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=46.18;MQ0=5;OQ=470.49;QD=4.06;SB=48.91	GT:AD:DP:GL:GQ	0/1:72,44:82:-75.03,-24.70,-237.11:99
-chr1	804163	.	T	A	0.61	PASS	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=45.72;MQ0=5;OQ=536.43;QD=4.62;SB=45.90	GT:AD:DP:GL:GQ	0/1:71,45:81:-81.32,-24.40,-231.88:99
-chr1	804176	.	C	T	0.11	PASS	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=42.84;MQ0=5;OQ=284.28;QD=2.41;SB=31.59	GT:AD:DP:GL:GQ	0/1:90,28:84:-57.01,-25.30,-251.94:99
-chr1	804255	rs61768236	C	T	415.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.82;MQ0=7;OQ=1235.94;QD=11.44;SB=-464.41	GT:AD:DP:GL:GQ	0/1:49,59:70:-147.96,-21.08,-123.48:99
-chr1	804268	rs61768237	T	C	267.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.38;MQ0=8;OQ=1449.21;QD=11.32;SB=-624.62	GT:AD:DP:GL:GQ	0/1:53,75:88:-174.71,-26.51,-156.34:99
-chr1	804322	.	T	C	170.65	PASS	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.67;MQ0=9;OQ=1734.45;QD=11.19;SB=-540.49	GT:AD:DP:GL:GQ	0/1:72,83:118:-212.27,-35.54,-249.66:99
-chr1	804353	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=4;HaplotypeScore=24.21;MQ=44.77;MQ0=2;OQ=299.39;QD=2.32;SB=-27.46	GT:AD:DP:GL:GQ	0/1:106,23:112:-66.96,-33.74,-330.98:99
-chr1	804358	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=1;HaplotypeScore=23.14;MQ=46.13;MQ0=0;OQ=958.19;QD=8.33;SB=-257.80	GT:AD:DP:GL:GQ	0/1:68,47:100:-129.23,-30.12,-232.16:99
-chr1	804472	.	A	T	0.19	PASS	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=48.14;MQ0=4;OQ=798.74;QD=6.89;SB=107.38	GT:AD:DP:GL:GQ	0/1:75,41:98:-112.67,-29.52,-266.53:99
-chr1	804474	.	A	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=2;HaplotypeScore=5.00;MQ=47.90;MQ0=4;OQ=704.41;QD=6.18;SB=101.34	GT:AD:DP:GL:GQ	0/1:73,41:96:-102.63,-28.91,-247.09:99
-chr1	804544	.	A	T	0.11	PASS	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=3.62;MQ=40.45;MQ0=6;OQ=406.04;QD=3.15;SB=95.34	GT:AD:DP:GL:GQ	0/1:99,30:89:-70.69,-26.81,-271.16:99
-chr1	804557	.	A	C	0.23	PASS	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=40.10;MQ0=5;OQ=416.51;QD=3.82;SB=86.28	GT:AD:DP:GL:GQ	0/1:65,43:73:-66.93,-21.99,-180.79:99
-chr1	804573	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=8.85;MQ=43.02;MQ0=4;OQ=579.16;QD=6.16;SB=83.29	GT:AD:DP:GL:GQ	0/1:56,38:69:-81.99,-20.79,-176.35:99
-chr1	804594	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=7.80;MQ=47.78;MQ0=4;OQ=294.82;QD=3.04;SB=104.36	GT:AD:DP:GL:GQ	0/1:66,31:74:-55.06,-22.29,-235.53:99
-chr1	804605	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=13.95;MQ=49.87;MQ0=3;OQ=284.24;QD=2.81;SB=113.40	GT:AD:DP:GL:GQ	0/1:73,28:82:-56.44,-24.73,-279.54:99
-chr1	804976	.	T	C	11.87	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=17.62;MQ=47.74;MQ0=10;QD=0.07;SB=128.44	GT:AD:DP:GL:GQ	0/1:107,52:112:-38.18,-33.74,-401.64:44.42
-chr1	805001	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=1;HaplotypeScore=76.93;MQ=42.40;MQ0=12;OQ=1246.68;QD=5.17;SB=146.50	GT:AD:DP:GL:GQ	0/1:129,112:153:-174.09,-46.14,-468.17:99
-chr1	805002	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=75.93;MQ=42.40;MQ0=13;OQ=1673.16;QD=6.89;SB=-6.76	GT:AD:DP:GL:GQ	0/1:105,138:154:-217.01,-46.41,-335.99:99
-chr1	805021	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=298;Dels=0.00;HRun=1;HaplotypeScore=153.68;MQ=38.48;MQ0=13;OQ=1337.90;QD=4.49;SB=-19.37	GT:AD:DP:GL:GQ	0/1:146,152:156:-184.06,-46.99,-421.14:99
-chr1	805031	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=318;Dels=0.00;HRun=0;HaplotypeScore=207.07;MQ=37.99;MQ0=12;OQ=1684.06;QD=5.30;SB=131.37	GT:AD:DP:GL:GQ	0/1:175,143:165:-221.39,-49.70,-405.98:99
-chr1	805042	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=0;HaplotypeScore=155.12;MQ=37.32;MQ0=17;OQ=677.06;QD=1.99;SB=140.48	GT:AD:DP:GL:GQ	0/1:285,55:199:-130.92,-59.93,-605.02:99
-chr1	805044	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=1;HaplotypeScore=156.13;MQ=36.94;MQ0=19;OQ=889.27;QD=2.62;SB=-0.09	GT:AD:DP:GL:GQ	0/1:243,95:179:-146.12,-53.91,-499.80:99
-chr1	805060	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=82.46;MQ=36.20;MQ0=28;OQ=262.53;QD=0.74;SB=131.47	GT:AD:DP:GL:GQ	0/1:269,85:206:-91.58,-62.05,-725.20:99
-chr1	805070	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=335;Dels=0.00;HRun=0;HaplotypeScore=72.27;MQ=36.04;MQ0=29;OQ=243.31;QD=0.73;SB=122.43	GT:AD:DP:GL:GQ	0/1:284,51:196:-86.65,-59.04,-686.22:99
-chr1	805096	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=1;HaplotypeScore=49.35;MQ=36.73;MQ0=27;OQ=2126.16;QD=7.70;SB=101.36	GT:AD:DP:GL:GQ	0/1:81,194:152:-261.68,-45.78,-320.28:99
-chr1	805097	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=277;Dels=0.00;HRun=0;HaplotypeScore=50.14;MQ=36.84;MQ0=27;OQ=2166.21;QD=7.82;SB=104.34	GT:AD:DP:GL:GQ	0/1:80,196:153:-269.55,-49.64,-287.57:99
-chr1	805200	.	G	T	14.62	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=163;Dels=0.00;HRun=0;HaplotypeScore=25.70;MQ=44.88;MQ0=22;QD=0.09;SB=134.45	GT:AD:DP:GL:GQ	0/1:137,26:122:-41.47,-36.74,-399.49:47.31
-chr1	805236	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=3;HaplotypeScore=58.62;MQ=48.88;MQ0=19;OQ=385.49;QD=2.77;SB=18.48	GT:AD:DP:GL:GQ	0/1:87,52:105:-73.46,-31.63,-322.22:99
-chr1	805261	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=375.75;MQ=40.95;MQ0=20;OQ=701.87;QD=3.00;SB=-184.24	GT:AD:DP:GL:GQ	0/1:132,101:136:-114.44,-40.97,-420.32:99
-chr1	805262	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=0;HaplotypeScore=355.61;MQ=40.41;MQ0=21;OQ=112.78;QD=0.47;SB=-10.32	GT:AD:DP:GL:GQ	0/1:195,42:136:-62.96,-48.40,-549.49:99
-chr1	805283	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=350;Dels=0.00;HRun=0;HaplotypeScore=86.54;MQ=35.73;MQ0=32;OQ=70.17;QD=0.20;SB=7.66	GT:AD:DP:GL:GQ	0/1:314,35:208:-72.95,-62.65,-681.33:99
-chr1	805284	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=355;Dels=0.00;HRun=0;HaplotypeScore=88.37;MQ=35.41;MQ0=32;OQ=4656.41;QD=13.12;SB=-1324.68	GT:AD:DP:GL:GQ	0/1:83,272:209:-464.64,-62.96,-333.94:99
-chr1	805326	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=520;Dels=0.00;HRun=0;HaplotypeScore=98.56;MQ=31.27;MQ0=33;OQ=692.81;QD=1.33;SB=-240.64	GT:AD:DP:GL:GQ	0/1:439,81:305:-164.43,-91.87,-1058.15:99
-chr1	805332	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=545;Dels=0.00;HRun=2;HaplotypeScore=105.70;MQ=31.02;MQ0=35;OQ=141.69;QD=0.26;SB=-23.90	GT:AD:DP:GL:GQ	0/1:483,62:326:-115.64,-98.18,-1059.59:99
-chr1	805355	.	A	G	982.52	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=566;Dels=0.00;HRun=0;HaplotypeScore=511.67;MQ=31.08;MQ0=42;QD=1.74;SB=-163.90	GT:AD:DP:GL:GQ	0/1:444,82:337:-230.52,-128.98,-1164.43:99
-chr1	805360	.	A	G	1795.44	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=565;Dels=0.00;HRun=0;HaplotypeScore=478.07;MQ=31.09;MQ0=46;QD=3.18;SB=-791.73	GT:AD:DP:GL:GQ	0/1:432,132:335:-287.21,-104.38,-1038.16:99
-chr1	805365	.	T	C	1655.74	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=542;Dels=0.00;HRun=0;HaplotypeScore=449.89;MQ=31.32;MQ0=44;QD=3.05;SB=-765.34	GT:AD:DP:GL:GQ	0/1:385,157:321:-265.54,-96.68,-1024.45:99
-chr1	805383	rs61768238	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=498;Dels=0.00;HRun=3;HaplotypeScore=98.26;MQ=31.16;MQ0=41;OQ=7913.78;QD=15.89;SB=-2299.71	GT:AD:DP:GL:GQ	0/1:75,423:268:-790.38,-80.71,-278.68:99
-chr1	805386	rs61768239	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=483;Dels=0.00;HRun=1;HaplotypeScore=91.10;MQ=31.39;MQ0=41;OQ=3141.51;QD=6.50;SB=-667.16	GT:AD:DP:GL:GQ	0/1:227,256:265:-397.24,-79.81,-626.74:99
-chr1	805419	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=1;HaplotypeScore=30.13;MQ=32.93;MQ0=34;OQ=719.57;QD=1.75;SB=-330.57	GT:AD:DP:GL:GQ	0/1:225,186:205:-136.99,-61.75,-686.74:99
-chr1	805436	rs61768240	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=352;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=34.71;MQ0=24;OQ=2408.76;QD=6.84;SB=-1167.64	GT:AD:DP:GL:GQ	0/1:93,259:163:-293.26,-49.10,-323.35:99
-chr1	805464	.	T	C	90.93	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=2;HaplotypeScore=145.78;MQ=37.92;MQ0=13;QD=0.36;SB=50.70	GT:AD:DP:GL:GQ	0/1:218,34:131:-51.84,-39.46,-473.80:99
-chr1	805469	.	G	A	411.01	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=129.65;MQ=39.23;MQ0=10;QD=1.77;SB=-144.72	GT:AD:DP:GL:GQ	0/1:163,68:125:-82.03,-37.65,-380.30:99
-chr1	805474	.	C	T	980.44	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=4;HaplotypeScore=70.79;MQ=41.63;MQ0=7;QD=4.83;SB=-326.68	GT:AD:DP:GL:GQ	0/1:87,114:116:-136.29,-34.97,-264.49:99
-chr1	805480	.	G	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=1;HaplotypeScore=5.97;MQ=42.07;MQ0=5;OQ=803.65;QD=4.10;SB=-259.91	GT:AD:DP:GL:GQ	0/1:87,109:116:-118.58,-34.93,-301.30:99
-chr1	805558	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=21.59;MQ=45.69;MQ0=3;OQ=812.25;QD=4.51;SB=-279.67	GT:AD:DP:GL:GQ	0/1:110,69:130:-123.67,-39.16,-392.54:99
-chr1	805591	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=34.23;MQ=41.40;MQ0=5;OQ=1850.17;QD=8.49;SB=-635.41	GT:AD:DP:GL:GQ	0/1:84,134:148:-232.88,-44.58,-338.13:99
-chr1	805603	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=0;HaplotypeScore=49.54;MQ=40.33;MQ0=6;OQ=1757.35;QD=7.35;SB=-559.93	GT:AD:DP:GL:GQ	0/1:109,130:154:-225.41,-46.39,-351.31:99
-chr1	805620	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=50.16;MQ=37.51;MQ0=8;OQ=230.26;QD=0.84;SB=134.91	GT:AD:DP:GL:GQ	0/1:246,28:171:-77.81,-51.50,-552.70:99
-chr1	805666	.	G	A	1332.87	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=0;HaplotypeScore=203.60;MQ=35.75;MQ0=0;QD=3.93;SB=119.41	GT:AD:DP:GL:GQ	0/1:281,58:223:-203.73,-67.16,-610.84:99
-chr1	805667	.	T	G	1225.05	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=341;Dels=0.00;HRun=2;HaplotypeScore=286.55;MQ=35.76;MQ0=2;QD=3.59;SB=122.41	GT:AD:DP:GL:GQ	0/1:261,66:222:-230.10,-104.31,-623.63:99
-chr1	805699	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=311;Dels=0.00;HRun=0;HaplotypeScore=73.71;MQ=35.76;MQ0=12;OQ=1765.48;QD=5.68;SB=-47.39	GT:AD:DP:GL:GQ	0/1:139,171:182:-234.66,-54.83,-454.10:99
-chr1	805716	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=1;HaplotypeScore=131.75;MQ=37.99;MQ0=12;OQ=2170.35;QD=7.72;SB=-121.23	GT:AD:DP:GL:GQ	0/1:87,193:163:-269.41,-49.09,-357.63:99
-chr1	805720	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=145.61;MQ=38.29;MQ0=13;OQ=527.98;QD=1.87;SB=137.43	GT:AD:DP:GL:GQ	0/1:237,44:165:-105.78,-49.70,-509.42:99
-chr1	805742	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=47.83;MQ=40.90;MQ0=15;OQ=1225.89;QD=5.11;SB=-296.81	GT:AD:DP:GL:GQ	0/1:97,143:138:-167.44,-41.57,-348.72:99
-chr1	805786	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=3.15;MQ=44.26;MQ0=7;OQ=155.59;QD=0.86;SB=-81.22	GT:AD:DP:GL:GQ	0/1:95,86:108:-51.37,-32.53,-383.93:99
-chr1	805792	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=9.50;MQ=44.61;MQ0=6;OQ=192.56;QD=1.10;SB=-88.24	GT:AD:DP:GL:GQ	0/1:93,82:108:-55.07,-32.53,-377.29:99
-chr1	805825	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=46.58;MQ0=3;OQ=327.36;QD=1.98;SB=-101.34	GT:AD:DP:GL:GQ	0/1:95,70:115:-70.67,-34.65,-378.60:99
-chr1	805831	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=10.96;MQ=47.14;MQ0=3;OQ=324.94;QD=2.11;SB=-17.64	GT:AD:DP:GL:GQ	0/1:97,57:110:-68.91,-33.13,-331.34:99
-chr1	805897	.	G	T	104.51	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=51.05;MQ0=2;QD=0.74;SB=119.34	GT:AD:DP:GL:GQ	0/1:121,19:121:-50.18,-36.44,-386.79:99
-chr1	805898	.	C	A	129.42	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=35.61;MQ=51.05;MQ0=2;QD=0.91;SB=116.38	GT:AD:DP:GL:GQ	0/1:123,19:121:-52.67,-36.45,-375.35:99
-chr1	805905	.	T	G	13.51	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=25.14;MQ=52.44;MQ0=2;QD=0.10;SB=92.42	GT:AD:DP:GL:GQ	0/1:98,32:107:-36.84,-32.23,-356.89:46.15
-chr1	806044	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=16.71;MQ=40.59;MQ0=35;OQ=921.37;QD=5.06;SB=-438.60	GT:AD:DP:GL:GQ	0/1:71,111:106:-127.34,-31.92,-261.51:99
-chr1	806066	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=250;Dels=0.00;HRun=1;HaplotypeScore=9.43;MQ=37.37;MQ0=38;OQ=287.57;QD=1.15;SB=103.29	GT:AD:DP:GL:GQ	0/1:214,36:146:-76.01,-43.97,-467.77:99
-chr1	806081	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=255;Dels=0.00;HRun=0;HaplotypeScore=39.62;MQ=37.88;MQ0=27;OQ=908.24;QD=3.56;SB=97.71	GT:AD:DP:GL:GQ	0/1:178,77:158:-141.71,-47.60,-556.49:99
-chr1	806157	.	T	C	806.81	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=71.06;MQ=40.64;MQ0=4;QD=3.75;SB=110.40	GT:AD:DP:GL:GQ	0/1:92,123:126:-121.92,-37.95,-368.73:99
-chr1	806159	.	A	C	141.17	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=72.96;MQ=40.68;MQ0=4;QD=0.64;SB=110.38	GT:AD:DP:GL:GQ	0/1:166,49:128:-59.78,-42.38,-415.09:99
-chr1	806180	.	A	G	18.74	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=0;HaplotypeScore=59.33;MQ=41.65;MQ0=4;QD=0.09;SB=116.41	GT:AD:DP:GL:GQ	0/1:140,60:110:-38.29,-33.13,-408.92:51.52
-chr1	806197	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=1;HaplotypeScore=58.42;MQ=43.62;MQ0=5;OQ=190.94;QD=0.95;SB=134.47	GT:AD:DP:GL:GQ	0/1:110,91:116:-57.32,-34.94,-409.71:99
-chr1	806222	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=4;HaplotypeScore=6.94;MQ=47.96;MQ0=4;OQ=291.81;QD=1.80;SB=146.43	GT:AD:DP:GL:GQ	0/1:98,64:114:-66.80,-34.33,-354.69:99
-chr1	806232	.	T	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=1;HaplotypeScore=11.98;MQ=49.02;MQ0=3;OQ=233.87;QD=1.55;SB=140.48	GT:AD:DP:GL:GQ	0/1:96,55:110:-59.80,-33.13,-362.79:99
-chr1	806258	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=0;HaplotypeScore=10.30;MQ=50.03;MQ0=8;OQ=407.17;QD=2.51;SB=100.40	GT:AD:DP:GL:GQ	0/1:106,56:126:-81.95,-37.95,-384.61:99
-chr1	806268	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=1;HaplotypeScore=25.82;MQ=48.78;MQ0=9;OQ=670.14;QD=4.09;SB=84.39	GT:AD:DP:GL:GQ	0/1:109,55:126:-108.24,-37.95,-362.57:99
-chr1	806273	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=24.82;MQ=48.14;MQ0=9;OQ=549.55;QD=3.23;SB=88.59	GT:AD:DP:GL:GQ	0/1:119,51:130:-97.39,-39.15,-372.33:99
-chr1	806316	.	T	G	0.95	PASS	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=0;HaplotypeScore=6.00;MQ=41.01;MQ0=11;OQ=1685.25;QD=7.49;SB=-248.74	GT:AD:DP:GL:GQ	0/1:86,139:148:-216.38,-44.57,-322.16:99
-chr1	806332	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=118.47;MQ=40.66;MQ0=10;OQ=669.93;QD=2.51;SB=-242.01	GT:AD:DP:GL:GQ	0/1:204,61:176:-123.31,-53.03,-632.31:99
-chr1	806338	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=0;HaplotypeScore=122.42;MQ=40.64;MQ0=8;OQ=2439.01;QD=9.17;SB=-856.79	GT:AD:DP:GL:GQ	0/1:98,144:180:-333.38,-86.20,-389.89:99
-chr1	806349	.	G	A	3132.30	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=280;Dels=0.07;HRun=0;HaplotypeScore=186.48;MQ=39.25;MQ0=4;QD=11.19;SB=-1153.15	GT:AD:DP:GL:GQ	0/1:91,170:182:-371.34,-54.83,-329.61:99
-chr1	806378	rs61768241	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=371;Dels=0.00;HRun=0;HaplotypeScore=37.20;MQ=35.74;MQ0=10;OQ=1136.07;QD=3.06;SB=-392.71	GT:AD:DP:GL:GQ	0/1:284,87:244:-190.38,-73.49,-742.15:99
-chr1	806405	.	A	T	171.83	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=402;Dels=0.02;HRun=5;HaplotypeScore=383.28;MQ=34.90;MQ0=14;QD=0.43;SB=-100.81	GT:AD:DP:GL:GQ	0/1:350,43:240:-91.25,-70.78,-803.92:99
-chr1	806411	.	A	T	5745.19	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=405;Dels=0.00;HRun=5;HaplotypeScore=552.66;MQ=35.31;MQ0=14;QD=14.19;SB=-2306.85	GT:AD:DP:GL:GQ	0/1:102,301:243:-573.52,-72.58,-344.41:99
-chr1	806412	.	A	T	2395.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=407;Dels=0.00;HRun=0;HaplotypeScore=506.57;MQ=35.27;MQ0=14;QD=5.89;SB=-1049.34	GT:AD:DP:GL:GQ	0/1:219,186:244:-315.74,-72.89,-600.57:99
-chr1	806419	.	G	T	930.64	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=4;HaplotypeScore=220.68;MQ=34.42;MQ0=17;QD=2.15;SB=-419.01	GT:AD:DP:GL:GQ	0/1:342,91:258:-174.05,-77.70,-758.54:99
-chr1	806424	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=450;Dels=0.00;HRun=4;HaplotypeScore=249.41;MQ=33.94;MQ0=20;OQ=971.28;QD=2.16;SB=-437.51	GT:AD:DP:GL:GQ	0/1:358,92:263:-179.62,-79.21,-806.78:99
-chr1	806430	rs61768242	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=441;Dels=0.01;HRun=1;HaplotypeScore=160.65;MQ=34.18;MQ0=22;OQ=1511.20;QD=3.43;SB=-624.36	GT:AD:DP:GL:GQ	0/1:304,134:257:-231.81,-77.41,-730.64:99
-chr1	806460	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=368;Dels=0.01;HRun=0;HaplotypeScore=18.13;MQ=35.78;MQ0=21;OQ=826.67;QD=2.25;SB=-89.07	GT:AD:DP:GL:GQ	0/1:306,59:217:-150.70,-64.75,-660.76:99
-chr1	806471	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=38.11;MQ0=12;OQ=2295.87;QD=7.92;SB=-836.85	GT:AD:DP:GL:GQ	0/1:88,202:166:-282.86,-49.99,-314.28:99
-chr1	806472	.	T	G	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=38.55;MQ0=12;OQ=2108.07;QD=7.42;SB=-683.52	GT:AD:DP:GL:GQ	0/1:91,193:165:-263.78,-49.69,-338.75:99
-chr1	806498	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=2;HaplotypeScore=28.30;MQ=42.69;MQ0=9;OQ=436.81;QD=2.11;SB=-20.91	GT:AD:DP:GL:GQ	0/1:161,46:144:-90.38,-43.41,-400.65:99
-chr1	806543	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=100.50;MQ=43.92;MQ0=14;OQ=975.93;QD=5.00;SB=-107.11	GT:AD:DP:GL:GQ	0/1:89,101:124:-149.49,-48.61,-281.82:99
-chr1	806545	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=0;HaplotypeScore=104.33;MQ=43.14;MQ0=16;OQ=1451.12;QD=6.88;SB=-262.10	GT:AD:DP:GL:GQ	0/1:103,108:137:-189.66,-41.27,-324.56:99
-chr1	806559	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=338;Dels=0.00;HRun=5;HaplotypeScore=96.33;MQ=38.72;MQ0=24;OQ=1155.72;QD=3.42;SB=-374.82	GT:AD:DP:GL:GQ	0/1:243,83:209:-199.57,-80.72,-560.52:99
-chr1	806579	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=0;HaplotypeScore=77.21;MQ=36.57;MQ0=25;OQ=319.95;QD=0.84;SB=31.35	GT:AD:DP:GL:GQ	0/1:306,63:241:-152.76,-117.48,-790.42:99
-chr1	806588	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=0;HaplotypeScore=158.67;MQ=35.58;MQ0=25;OQ=4390.20;QD=10.76;SB=-833.37	GT:AD:DP:GL:GQ	0/1:156,252:245:-438.02,-73.80,-510.93:99
-chr1	806591	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=423;Dels=0.00;HRun=0;HaplotypeScore=153.73;MQ=35.14;MQ0=25;OQ=116.80;QD=0.28;SB=22.12	GT:AD:DP:GL:GQ	0/1:359,64:250:-90.26,-75.29,-922.92:99
-chr1	806599	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=465;Dels=0.00;HRun=3;HaplotypeScore=92.78;MQ=34.88;MQ0=25;OQ=533.96;QD=1.15;SB=-62.62	GT:AD:DP:GL:GQ	0/1:398,67:259:-134.68,-78.00,-790.36:99
-chr1	806614	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=4;HaplotypeScore=128.97;MQ=33.43;MQ0=27;OQ=171.34;QD=0.31;SB=81.53	GT:AD:DP:GL:GQ	0/1:512,39:328:-122.57,-102.16,-1083.77:99
-chr1	806616	.	A	C	48.77	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=560;Dels=0.00;HRun=0;HaplotypeScore=145.79;MQ=33.35;MQ0=27;QD=0.09;SB=125.19	GT:AD:DP:GL:GQ	0/1:521,38:333:-108.15,-99.99,-1104.08:81.61
-chr1	806647	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=500;Dels=0.00;HRun=1;HaplotypeScore=106.37;MQ=33.16;MQ0=15;OQ=6479.54;QD=12.96;SB=-2653.75	GT:AD:DP:GL:GQ	0/1:87,413:252:-646.95,-75.89,-317.53:99
-chr1	806652	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=463;Dels=0.00;HRun=0;HaplotypeScore=119.18;MQ=33.47;MQ0=16;OQ=6167.91;QD=13.32;SB=-2596.35	GT:AD:DP:GL:GQ	0/1:76,386:224:-615.79,-67.46,-279.43:99
-chr1	806659	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=0;HaplotypeScore=138.09;MQ=33.68;MQ0=14;OQ=4821.66;QD=11.70;SB=-2064.94	GT:AD:DP:GL:GQ	0/1:127,285:208:-481.17,-62.64,-276.81:99
-chr1	806663	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=403;Dels=0.00;HRun=1;HaplotypeScore=116.74;MQ=34.29;MQ0=14;OQ=4902.23;QD=12.16;SB=-2019.44	GT:AD:DP:GL:GQ	0/1:76,327:212:-489.22,-63.85,-279.67:99
-chr1	806698	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=346;Dels=0.00;HRun=0;HaplotypeScore=104.08;MQ=36.06;MQ0=23;OQ=205.16;QD=0.59;SB=41.51	GT:AD:DP:GL:GQ	0/1:305,41:216:-88.85,-65.05,-740.73:99
-chr1	806719	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=400.08;MQ=40.22;MQ0=20;OQ=582.43;QD=2.75;SB=89.75	GT:AD:DP:GL:GQ	0/1:145,66:134:-101.59,-40.07,-419.05:99
-chr1	806735	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=24.14;MQ=41.77;MQ0=24;OQ=129.16;QD=0.59;SB=143.49	GT:AD:DP:GL:GQ	0/1:169,49:138:-57.78,-41.58,-482.40:99
-chr1	806755	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=0;HaplotypeScore=72.66;MQ=42.05;MQ0=23;OQ=1702.34;QD=7.99;SB=-97.29	GT:AD:DP:GL:GQ	0/1:86,127:148:-218.09,-44.57,-348.93:99
-chr1	806758	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=66.82;MQ=42.51;MQ0=24;OQ=101.05;QD=0.48;SB=140.48	GT:AD:DP:GL:GQ	0/1:180,31:147:-57.67,-44.28,-533.12:99
-chr1	806774	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=33.98;MQ=43.76;MQ0=28;OQ=1370.17;QD=7.29;SB=4.43	GT:AD:DP:GL:GQ	0/1:94,94:136:-181.26,-40.96,-326.53:99
-chr1	806807	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=247;Dels=0.00;HRun=1;HaplotypeScore=84.17;MQ=41.43;MQ0=32;OQ=1901.04;QD=7.70;SB=-364.66	GT:AD:DP:GL:GQ	0/1:93,133:161:-255.61,-62.23,-399.73:99
-chr1	806819	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=1;HaplotypeScore=51.78;MQ=39.46;MQ0=35;OQ=117.55;QD=0.45;SB=-52.87	GT:AD:DP:GL:GQ	0/1:235,29:167:-65.33,-50.29,-569.53:99
-chr1	806835	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=24.93;MQ=38.15;MQ0=32;OQ=3184.79;QD=11.46;SB=-1086.54	GT:AD:DP:GL:GQ	0/1:75,203:179:-375.67,-53.91,-276.38:99
-chr1	806857	.	A	G	426.69	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=0;HaplotypeScore=416.26;MQ=36.42;MQ0=33;QD=1.10;SB=-205.00	GT:AD:DP:GL:GQ	0/1:336,52:260:-124.27,-78.32,-915.07:99
-chr1	806858	.	A	C	2180.12	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=390;Dels=0.00;HRun=1;HaplotypeScore=419.10;MQ=36.36;MQ0=33;QD=5.59;SB=-410.18	GT:AD:DP:GL:GQ	0/1:135,134:259:-523.35,-302.06,-691.29:99
-chr1	806860	.	T	C	364.40	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=414;Dels=0.02;HRun=1;HaplotypeScore=391.10;MQ=36.35;MQ0=33;QD=0.88;SB=-200.49	GT:AD:DP:GL:GQ	0/1:360,44:277:-126.33,-86.61,-1004.70:99
-chr1	806864	.	G	A	1874.70	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=430;Dels=0.00;HRun=0;HaplotypeScore=443.75;MQ=36.02;MQ0=32;QD=4.36;SB=-378.35	GT:AD:DP:GL:GQ	0/1:340,90:284:-276.29,-85.54,-766.79:99
-chr1	806872	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=439;Dels=0.00;HRun=3;HaplotypeScore=61.91;MQ=35.95;MQ0=27;OQ=241.94;QD=0.55;SB=-56.85	GT:AD:DP:GL:GQ	0/1:394,45:294:-116.03,-88.55,-994.05:99
-chr1	806914	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=1;HaplotypeScore=82.84;MQ=36.13;MQ0=15;OQ=91.45;QD=0.21;SB=145.33	GT:AD:DP:GL:GQ	0/1:380,53:292:-100.38,-87.95,-1073.99:99
-chr1	806929	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=1;HaplotypeScore=53.78;MQ=36.16;MQ0=12;OQ=628.62;QD=1.60;SB=165.96	GT:AD:DP:GL:GQ	0/1:300,94:257:-143.55,-77.40,-778.57:99
-chr1	806933	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=384;Dels=0.00;HRun=1;HaplotypeScore=52.56;MQ=36.30;MQ0=13;OQ=624.21;QD=1.63;SB=148.11	GT:AD:DP:GL:GQ	0/1:298,86:253:-141.91,-76.20,-801.85:99
-chr1	807097	rs4970387	A	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=141;Dels=0.00;HRun=4;HaplotypeScore=35.71;MQ=49.47;MQ0=9;OQ=3569.50;QD=25.32;SB=-1647.14	GT:AD:DP:GL:GQ	1/1:0,141:95:-355.95,-28.62,-0.03:99
-chr1	807120	.	C	T	28.74	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=5;HaplotypeScore=8.47;MQ=47.00;MQ0=10;QD=0.19;SB=107.30	GT:AD:DP:GL:GQ	0/1:82,66:90:-33.27,-27.11,-295.41:61.57
-chr1	807127	.	C	G	240.31	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=32.57;MQ=46.64;MQ0=10;QD=1.61;SB=107.38	GT:AD:DP:GL:GQ	0/1:80,69:92:-55.04,-27.72,-340.23:99
-chr1	807132	.	T	C	652.10	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=41.20;MQ=46.24;MQ0=10;QD=4.29;SB=107.38	GT:AD:DP:GL:GQ	0/1:77,75:102:-99.22,-30.73,-310.86:99
-chr1	807136	.	C	A	59.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=2;HaplotypeScore=75.46;MQ=45.64;MQ0=10;QD=0.36;SB=6.21	GT:AD:DP:GL:GQ	0/1:135,27:108:-41.72,-32.53,-330.47:91.87
-chr1	807137	.	T	G	132.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=74.46;MQ=45.79;MQ0=10;QD=0.83;SB=113.39	GT:AD:DP:GL:GQ	0/1:140,19:114:-50.84,-34.34,-356.98:99
-chr1	807144	.	G	C	321.19	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=33.44;MQ=44.89;MQ0=10;QD=1.96;SB=17.66	GT:AD:DP:GL:GQ	0/1:131,27:122:-82.39,-46.99,-445.41:99
-chr1	807168	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=236.47;MQ=42.45;MQ0=9;OQ=1209.57;QD=6.91;SB=-394.74	GT:AD:DP:GL:GQ	0/1:124,51:131:-163.71,-39.47,-414.74:99
-chr1	807169	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=262.45;MQ=42.56;MQ0=9;OQ=108.48;QD=0.61;SB=74.80	GT:AD:DP:GL:GQ	0/1:162,17:135:-54.79,-40.66,-456.43:99
-chr1	807188	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.01;HRun=8;HaplotypeScore=227.66;MQ=43.88;MQ0=1;OQ=1264.52;QD=6.80;SB=-460.79	GT:AD:DP:GL:GQ	0/1:118,67:149:-174.32,-44.58,-377.47:99
-chr1	807190	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=246.34;MQ=43.75;MQ0=1;OQ=529.31;QD=2.86;SB=137.46	GT:AD:DP:GL:GQ	0/1:148,37:145:-99.89,-43.67,-443.33:99
-chr1	807204	.	A	C	36.37	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=12.98;MQ=42.45;MQ0=6;QD=0.19;SB=109.90	GT:AD:DP:GL:GQ	0/1:167,21:153:-53.00,-46.08,-519.54:69.21
-chr1	807245	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=1;HaplotypeScore=17.90;MQ=38.97;MQ0=18;OQ=1145.58;QD=6.94;SB=-550.34	GT:AD:DP:GL:GQ	0/1:87,78:121:-154.28,-36.44,-312.35:99
-chr1	807259	.	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=39.36;MQ0=20;OQ=646.71;QD=4.25;SB=-192.93	GT:AD:DP:GL:GQ	0/1:96,56:108:-100.48,-32.53,-300.21:99
-chr1	807350	rs4082611	G	A	0.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=9.97;MQ=44.42;MQ0=8;OQ=866.67;QD=5.70;SB=98.31	GT:AD:DP:GL:GQ	0/1:80,69:106:-125.51,-35.56,-282.07:99
-chr1	807353	.	C	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=8.92;MQ=43.77;MQ0=8;OQ=867.33;QD=5.45;SB=95.29	GT:AD:DP:GL:GQ	0/1:76,83:108:-122.54,-32.52,-265.26:99
-chr1	807384	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=0;HaplotypeScore=61.52;MQ=40.31;MQ0=13;OQ=503.09;QD=2.47;SB=116.39	GT:AD:DP:GL:GQ	0/1:145,57:132:-93.37,-39.78,-338.75:99
-chr1	807385	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=61.52;MQ=40.32;MQ0=13;OQ=1779.01;QD=8.76;SB=73.73	GT:AD:DP:GL:GQ	0/1:76,126:131:-220.64,-39.46,-278.09:99
-chr1	807400	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=1;HaplotypeScore=26.31;MQ=38.88;MQ0=12;OQ=2472.80;QD=10.18;SB=76.74	GT:AD:DP:GL:GQ	0/1:81,162:155:-297.25,-46.69,-297.33:99
-chr1	807412	rs4082610	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=262;Dels=0.00;HRun=4;HaplotypeScore=30.19;MQ=38.31;MQ0=9;OQ=2516.42;QD=9.60;SB=119.38	GT:AD:DP:GL:GQ	0/1:109,153:168:-305.53,-50.60,-311.50:99
-chr1	807432	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=25.55;MQ=38.32;MQ0=6;OQ=4433.84;QD=16.92;SB=-160.81	GT:AD:DP:GL:GQ	0/1:80,182:176:-442.38,-53.03,-343.20:99
-chr1	807469	.	C	T	416.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=92.28;MQ=41.14;MQ0=1;QD=1.98;SB=-49.34	GT:AD:DP:GL:GQ	0/1:84,126:97:-74.18,-29.22,-280.73:99
-chr1	807471	.	A	C	318.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=2;HaplotypeScore=90.45;MQ=41.29;MQ0=1;QD=1.49;SB=-31.35	GT:AD:DP:GL:GQ	0/1:85,128:99:-64.91,-29.81,-297.50:99
-chr1	807475	.	C	T	356.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=0;HaplotypeScore=174.77;MQ=40.93;MQ0=2;QD=1.67;SB=-36.29	GT:AD:DP:GL:GQ	0/1:85,128:101:-69.35,-30.45,-273.00:99
-chr1	807484	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=1;HaplotypeScore=266.19;MQ=40.31;MQ0=2;OQ=100.09;QD=0.47;SB=95.09	GT:AD:DP:GL:GQ	0/1:168,47:127:-51.55,-38.26,-450.15:99
-chr1	807508	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=1;HaplotypeScore=7.00;MQ=41.28;MQ0=4;OQ=211.72;QD=1.14;SB=90.69	GT:AD:DP:GL:GQ	0/1:142,43:119:-60.30,-35.84,-379.49:99
-chr1	807527	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=2;HaplotypeScore=9.95;MQ=41.68;MQ0=7;OQ=177.85;QD=1.10;SB=146.44	GT:AD:DP:GL:GQ	0/1:119,42:108:-53.60,-32.53,-346.10:99
-chr1	807556	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=1;HaplotypeScore=66.91;MQ=41.77;MQ0=6;OQ=532.40;QD=3.89;SB=-236.01	GT:AD:DP:GL:GQ	0/1:68,69:85:-82.13,-25.60,-230.23:99
-chr1	807561	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=0;HaplotypeScore=70.93;MQ=41.65;MQ0=7;OQ=124.65;QD=0.89;SB=101.32	GT:AD:DP:GL:GQ	0/1:96,44:87:-41.95,-26.20,-282.69:99
-chr1	807571	rs34106744	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=3;HaplotypeScore=33.63;MQ=41.31;MQ0=9;OQ=377.46;QD=2.80;SB=-157.65	GT:AD:DP:GL:GQ	0/1:62,73:80:-65.12,-24.09,-230.06:99
-chr1	807588	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=29.86;MQ=39.35;MQ0=12;OQ=1527.96;QD=9.32;SB=-255.65	GT:AD:DP:GL:GQ	0/1:60,104:105:-187.72,-31.65,-191.88:99
-chr1	807611	.	G	C	0.98	PASS	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=7.78;MQ=38.64;MQ0=13;OQ=1984.90;QD=11.81;SB=-213.08	GT:AD:DP:GL:GQ	0/1:60,108:111:-235.21,-33.44,-245.33:99
-chr1	807628	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=0;HaplotypeScore=15.09;MQ=38.17;MQ0=13;OQ=1889.96;QD=9.74;SB=-59.93	GT:AD:DP:GL:GQ	0/1:68,126:123:-229.33,-37.05,-239.27:99
-chr1	807662	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=324;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=35.02;MQ0=24;OQ=5029.36;QD=15.52;SB=-1355.57	GT:AD:DP:GL:GQ	0/1:79,245:206:-501.94,-62.04,-299.38:99
-chr1	807698	rs61768243	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=413;Dels=0.00;HRun=1;HaplotypeScore=119.83;MQ=33.65;MQ0=41;OQ=7356.92;QD=17.81;SB=-2911.42	GT:AD:DP:GL:GQ	0/1:85,328:252:-734.69,-75.92,-368.28:99
-chr1	807726	rs61768244	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=451;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=33.55;MQ0=36;OQ=2315.76;QD=5.13;SB=-928.19	GT:AD:DP:GL:GQ	0/1:303,148:263:-314.08,-79.22,-727.35:99
-chr1	807759	rs4034377	A	C	755.20	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=336;Dels=0.00;HRun=0;HaplotypeScore=236.06;MQ=33.74;MQ0=39;QD=2.25;SB=-109.97	GT:AD:DP:GL:GQ	0/1:260,76:175:-131.50,-52.70,-521.92:99
-chr1	807761	.	A	G	2451.79	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=328;Dels=0.00;HRun=0;HaplotypeScore=310.08;MQ=33.84;MQ0=39;QD=7.47;SB=-739.45	GT:AD:DP:GL:GQ	0/1:164,163:171:-299.96,-51.50,-359.62:99
-chr1	807766	rs3969819	A	C	564.07	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=320;Dels=0.00;HRun=0;HaplotypeScore=284.38;MQ=33.76;MQ0=45;QD=1.76;SB=-303.05	GT:AD:DP:GL:GQ	0/1:266,53:164:-109.08,-49.39,-509.36:99
-chr1	807787	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=301;Dels=0.00;HRun=1;HaplotypeScore=10.94;MQ=35.09;MQ0=34;OQ=678.04;QD=2.25;SB=50.87	GT:AD:DP:GL:GQ	0/1:179,122:124:-108.43,-37.34,-358.12:99
-chr1	807799	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=330;Dels=0.00;HRun=1;HaplotypeScore=46.01;MQ=35.31;MQ0=34;OQ=1300.39;QD=3.94;SB=-358.87	GT:AD:DP:GL:GQ	0/1:191,139:161:-181.81,-48.48,-410.83:99
-chr1	807817	rs4034379	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=305;Dels=0.00;HRun=0;HaplotypeScore=40.59;MQ=36.43;MQ0=47;OQ=1097.69;QD=3.60;SB=-508.19	GT:AD:DP:GL:GQ	0/1:205,100:154:-159.44,-46.39,-521.49:99
-chr1	807831	rs4034380	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=324;Dels=0.00;HRun=0;HaplotypeScore=53.25;MQ=36.07;MQ0=54;OQ=860.18;QD=2.65;SB=-52.35	GT:AD:DP:GL:GQ	0/1:235,89:165:-139.00,-49.70,-477.57:99
-chr1	807843	rs61768247	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=340;Dels=0.00;HRun=3;HaplotypeScore=25.24;MQ=35.61;MQ0=59;OQ=2917.98;QD=8.58;SB=-1176.92	GT:AD:DP:GL:GQ	0/1:93,247:179:-348.99,-53.91,-340.62:99
-chr1	807878	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=3;HaplotypeScore=1.68;MQ=33.99;MQ0=59;OQ=2636.13;QD=7.75;SB=-1148.59	GT:AD:DP:GL:GQ	0/1:141,199:182:-321.71,-54.82,-379.20:99
-chr1	807900	rs61768248	A	G	107.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=254;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=36.51;MQ0=52;OQ=2423.92;QD=9.54;SB=-510.71	GT:AD:DP:GL:GQ	0/1:72,182:155:-292.36,-46.69,-288.83:99
-chr1	807921	rs4034381	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=0;HaplotypeScore=52.91;MQ=37.12;MQ0=38;OQ=730.38;QD=3.07;SB=87.15	GT:AD:DP:GL:GQ	0/1:169,69:152:-122.12,-45.80,-464.61:99
-chr1	807923	rs2311679	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=1;HaplotypeScore=53.91;MQ=36.90;MQ0=37;OQ=150.90;QD=0.63;SB=114.49	GT:AD:DP:GL:GQ	0/1:205,33:149:-63.25,-44.87,-483.89:99
-chr1	807940	rs61768249	C	T	132.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=201;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=39.52;MQ0=18;OQ=2365.28;QD=11.77;SB=-227.57	GT:AD:DP:GL:GQ	0/1:70,131:135:-280.47,-40.66,-242.20:99
-chr1	807969	.	G	T	0.34	PASS	AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=3.99;MQ=40.13;MQ0=16;OQ=852.49;QD=4.24;SB=25.59	GT:AD:DP:GL:GQ	0/1:139,62:138:-130.10,-41.57,-369.51:99
-chr1	807986	.	G	A	410.65	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=0;HaplotypeScore=37.75;MQ=40.61;MQ0=11;QD=2.15;SB=32.93	GT:AD:DP:GL:GQ	0/1:73,117:91:-71.78,-27.44,-235.41:99
-chr1	807989	.	A	G	41.79	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=63.74;MQ=41.32;MQ0=11;QD=0.24;SB=71.44	GT:AD:DP:GL:GQ	0/1:71,104:80:-31.56,-24.09,-295.20:74.62
-chr1	807990	.	G	T	63.48	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=63.74;MQ=41.32;MQ0=11;QD=0.36;SB=71.41	GT:AD:DP:GL:GQ	0/1:71,104:79:-33.42,-23.79,-250.10:96.32
-chr1	808001	rs2311681	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=1;HaplotypeScore=145.95;MQ=39.96;MQ0=12;OQ=189.55;QD=1.02;SB=-28.87	GT:AD:DP:GL:GQ	0/1:68,100:81:-53.53,-31.29,-271.83:99
-chr1	808002	.	C	T	30.08	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=1;HaplotypeScore=147.95;MQ=39.81;MQ0=12;QD=0.16;SB=5.97	GT:AD:DP:GL:GQ	0/1:124,64:83:-31.29,-25.00,-266.30:62.91
-chr1	808027	rs3969820	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=178;Dels=0.00;HRun=0;HaplotypeScore=57.38;MQ=38.17;MQ0=19;OQ=723.18;QD=4.06;SB=-165.45	GT:AD:DP:GL:GQ	0/1:134,44:108:-108.14,-32.53,-287.08:99
-chr1	808030	.	A	G	1086.71	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=0;HaplotypeScore=42.92;MQ=38.47;MQ0=18;QD=6.51;SB=-568.31	GT:AD:DP:GL:GQ	0/1:57,109:99:-141.80,-29.84,-220.97:99
-chr1	808043	.	A	G	970.86	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=1;HaplotypeScore=39.52;MQ=39.24;MQ0=20;QD=6.11;SB=-490.82	GT:AD:DP:GL:GQ	0/1:58,101:92:-128.08,-27.71,-229.15:99
-chr1	808058	rs4068670	A	G	19.55	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=0;HaplotypeScore=41.67;MQ=39.19;MQ0=26;QD=0.13;SB=-33.62	GT:AD:DP:GL:GQ	0/1:54,74:61:-37.68,-32.44,-211.21:52.34
-chr1	808064	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=1;HaplotypeScore=40.55;MQ=38.61;MQ0=24;OQ=246.33;QD=1.85;SB=-81.77	GT:AD:DP:GL:GQ	0/1:48,85:54:-44.19,-16.27,-162.59:99
-chr1	808071	.	C	T	20.12	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=40.24;MQ=40.16;MQ0=22;QD=0.15;SB=14.54	GT:AD:DP:GL:GQ	0/1:54,82:58:-22.76,-17.47,-182.75:52.91
-chr1	808112	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=2;HaplotypeScore=125.36;MQ=37.91;MQ0=32;OQ=1776.62;QD=7.83;SB=-160.46	GT:AD:DP:GL:GQ	0/1:73,153:125:-218.60,-37.66,-274.51:99
-chr1	808131	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=257;Dels=0.00;HRun=1;HaplotypeScore=46.49;MQ=37.72;MQ0=22;OQ=2127.72;QD=8.28;SB=-282.13	GT:AD:DP:GL:GQ	0/1:106,150:146:-260.04,-43.99,-307.83:99
-chr1	808143	rs2871830	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=266;Dels=0.00;HRun=0;HaplotypeScore=22.61;MQ=37.96;MQ0=21;OQ=255.61;QD=0.96;SB=23.44	GT:AD:DP:GL:GQ	0/1:214,51:151:-74.35,-45.50,-504.23:99
-chr1	808170	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=1;HaplotypeScore=39.92;MQ=39.75;MQ0=13;OQ=386.02;QD=1.54;SB=116.39	GT:AD:DP:GL:GQ	0/1:201,50:155:-88.58,-46.69,-468.07:99
-chr1	808187	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=7;HaplotypeScore=162.06;MQ=41.27;MQ0=11;OQ=363.00;QD=1.65;SB=17.72	GT:AD:DP:GL:GQ	0/1:176,44:136:-80.56,-40.98,-399.39:99
-chr1	808189	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=288.29;MQ=41.39;MQ0=11;OQ=708.25;QD=3.28;SB=-149.01	GT:AD:DP:GL:GQ	0/1:142,53:138:-146.61,-72.50,-410.59:99
-chr1	808297	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=0;HaplotypeScore=21.45;MQ=38.78;MQ0=17;OQ=1228.84;QD=6.27;SB=-563.99	GT:AD:DP:GL:GQ	0/1:75,120:104:-157.52,-31.35,-213.62:99
-chr1	808336	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=1;HaplotypeScore=34.12;MQ=34.50;MQ0=28;OQ=414.84;QD=1.47;SB=-185.55	GT:AD:DP:GL:GQ	0/1:228,54:155:-91.47,-46.70,-585.75:99
-chr1	808347	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=78.29;MQ=34.29;MQ0=30;OQ=600.10;QD=2.16;SB=-67.28	GT:AD:DP:GL:GQ	0/1:221,39:151:-138.41,-75.12,-545.71:99
-chr1	808349	rs61768250	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=274;Dels=0.00;HRun=0;HaplotypeScore=172.09;MQ=34.47;MQ0=30;OQ=2858.46;QD=10.43;SB=-822.44	GT:AD:DP:GL:GQ	0/1:82,190:149:-334.02,-44.89,-232.77:99
-chr1	808359	.	C	T	950.38	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=0;HaplotypeScore=192.43;MQ=34.52;MQ0=31;QD=3.53;SB=-243.11	GT:AD:DP:GL:GQ	0/1:178,83:148:-142.90,-44.58,-399.15:99
-chr1	808362	.	G	A	76.04	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=113.80;MQ=34.64;MQ0=30;QD=0.28;SB=96.15	GT:AD:DP:GL:GQ	0/1:234,29:151:-56.37,-45.49,-495.71:99
-chr1	808363	.	C	A	14.91	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=113.80;MQ=34.60;MQ0=34;QD=0.05;SB=125.29	GT:AD:DP:GL:GQ	0/1:250,29:157:-52.05,-47.29,-518.11:47.61
-chr1	808367	.	G	A	731.54	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=120.25;MQ=34.34;MQ0=33;QD=2.52;SB=-82.29	GT:AD:DP:GL:GQ	0/1:229,61:165:-126.14,-49.70,-491.32:99
-chr1	808394	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=235;Dels=0.00;HRun=0;HaplotypeScore=10.16;MQ=37.74;MQ0=26;OQ=126.55;QD=0.54;SB=56.98	GT:AD:DP:GL:GQ	0/1:188,47:147:-60.25,-44.31,-434.17:99
-chr1	808413	.	T	G	317.98	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=2;HaplotypeScore=72.86;MQ=40.13;MQ0=20;QD=1.94;SB=-24.43	GT:AD:DP:GL:GQ	0/1:121,43:105:-66.71,-31.62,-317.98:99
-chr1	808417	.	G	A	68.93	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=67.03;MQ=42.13;MQ0=16;QD=0.46;SB=83.26	GT:AD:DP:GL:GQ	0/1:135,13:103:-41.21,-31.03,-340.99:99
-chr1	808421	.	G	A	1042.35	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=46.56;MQ=44.72;MQ0=15;QD=7.72;SB=-112.51	GT:AD:DP:GL:GQ	0/1:67,68:99:-137.34,-29.83,-234.94:99
-chr1	808447	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=2;HaplotypeScore=11.26;MQ=49.75;MQ0=9;OQ=392.50;QD=3.54;SB=-21.38	GT:AD:DP:GL:GQ	0/1:71,40:86:-68.46,-25.93,-223.10:99
-chr1	808451	.	A	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=9.78;MQ=50.21;MQ0=9;OQ=368.72;QD=3.29;SB=-63.61	GT:AD:DP:GL:GQ	0/1:73,39:88:-66.66,-26.51,-263.45:99
-chr1	808566	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=42.07;MQ=40.72;MQ0=9;OQ=262.25;QD=1.45;SB=83.19	GT:AD:DP:GL:GQ	0/1:73,108:86:-55.43,-25.93,-233.09:99
-chr1	808594	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=0;HaplotypeScore=18.85;MQ=37.64;MQ0=16;OQ=690.50;QD=2.77;SB=110.37	GT:AD:DP:GL:GQ	0/1:80,169:110:-105.47,-33.14,-280.23:99
-chr1	808641	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=1;HaplotypeScore=21.83;MQ=33.64;MQ0=19;OQ=2063.93;QD=7.29;SB=28.04	GT:AD:DP:GL:GQ	0/1:72,211:133:-249.73,-40.06,-265.59:99
-chr1	808664	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=245;Dels=0.00;HRun=1;HaplotypeScore=236.43;MQ=34.77;MQ0=16;OQ=159.51;QD=0.65;SB=12.22	GT:AD:DP:GL:GQ	0/1:197,22:147:-105.83,-86.60,-492.17:99
-chr1	808677	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=233;Dels=0.00;HRun=0;HaplotypeScore=83.64;MQ=35.28;MQ0=11;OQ=206.00;QD=0.88;SB=113.55	GT:AD:DP:GL:GQ	0/1:190,43:144:-67.26,-43.38,-499.53:99
-chr1	808728	.	C	A	203.60	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=31.96;MQ=45.04;MQ0=12;QD=1.82;SB=15.39	GT:AD:DP:GL:GQ	0/1:87,25:80:-47.74,-24.10,-238.32:99
-chr1	808731	.	C	T	444.24	SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=24.97;MQ=46.65;MQ0=11;QD=4.04;SB=-165.40	GT:AD:DP:GL:GQ	0/1:69,41:86:-73.64,-25.93,-224.50:99
-chr1	808732	.	G	A	408.16	SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=24.97;MQ=46.65;MQ0=11;QD=3.71;SB=-130.98	GT:AD:DP:GL:GQ	0/1:69,41:85:-69.72,-25.62,-220.30:99
-chr1	808802	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=47.94;MQ=46.85;MQ0=10;OQ=50.85;QD=0.45;SB=55.37	GT:AD:DP:GL:GQ	0/1:67,39:74:-30.66,-22.29,-262.89:83.69
-chr1	808813	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=9.12;MQ=42.90;MQ0=8;OQ=68.22;QD=0.48;SB=65.92	GT:AD:DP:GL:GQ	0/1:121,22:85:-35.73,-25.62,-328.85:99
-chr1	808837	.	A	G	640.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=190.29;MQ=37.94;MQ0=4;QD=3.42;SB=66.67	GT:AD:DP:GL:GQ	0/1:64,123:88:-93.80,-26.51,-252.52:99
-chr1	808839	.	G	A	725.93	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=188;Dels=0.01;HRun=3;HaplotypeScore=118.63;MQ=37.90;MQ0=4;QD=3.86;SB=63.76	GT:AD:DP:GL:GQ	0/1:65,112:89:-102.68,-26.81,-229.73:99
-chr1	808842	.	A	G	234.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=215.12;MQ=37.45;MQ0=5;QD=1.20;SB=62.67	GT:AD:DP:GL:GQ	0/1:152,43:87:-52.93,-26.20,-300.50:99
-chr1	808844	.	C	A	211.39	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=139.43;MQ=37.30;MQ0=5;QD=1.09;SB=62.33	GT:AD:DP:GL:GQ	0/1:151,43:87:-50.63,-26.20,-257.94:99
-chr1	808878	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=228;Dels=0.00;HRun=0;HaplotypeScore=11.87;MQ=35.54;MQ0=6;OQ=484.59;QD=2.13;SB=67.42	GT:AD:DP:GL:GQ	0/1:69,159:88:-78.25,-26.50,-268.80:99
-chr1	808900	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=0;HaplotypeScore=53.01;MQ=34.26;MQ0=7;OQ=319.52;QD=1.51;SB=101.36	GT:AD:DP:GL:GQ	0/1:68,143:78:-58.73,-23.49,-234.89:99
-chr1	808952	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=30.36;MQ0=16;OQ=684.75;QD=4.08;SB=-303.13	GT:AD:DP:GL:GQ	0/1:69,99:91:-99.17,-27.41,-260.34:99
-chr1	808969	rs57185426	C	T	0.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=167;Dels=0.00;HRun=0;HaplotypeScore=6.98;MQ=27.19;MQ0=22;OQ=1308.35;QD=7.83;SB=-543.36	GT:AD:DP:GL:GQ	0/1:64,103:97:-163.35,-29.23,-183.79:99
-chr1	809028	rs61768251	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=24.74;MQ=37.22;MQ0=19;OQ=1197.89;QD=7.88;SB=-487.91	GT:AD:DP:GL:GQ	0/1:69,83:107:-155.31,-32.23,-252.53:99
-chr1	809058	.	T	C	0.11	PASS	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=4.46;MQ=47.89;MQ0=8;OQ=300.60;QD=2.95;SB=-111.38	GT:AD:DP:GL:GQ	0/1:71,31:84:-58.65,-25.31,-262.00:99
-chr1	809087	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=12.78;MQ=44.45;MQ0=38;OQ=174.63;QD=1.20;SB=29.35	GT:AD:DP:GL:GQ	0/1:79,66:90:-47.85,-27.11,-283.45:99
-chr1	809147	.	A	G	708.22	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=385;Dels=0.00;HRun=0;HaplotypeScore=142.43;MQ=32.08;MQ0=67;QD=1.84;SB=-338.08	GT:AD:DP:GL:GQ	0/1:273,112:167:-124.42,-50.31,-531.00:99
-chr1	809152	.	A	G	2828.87	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=380;Dels=0.00;HRun=0;HaplotypeScore=142.28;MQ=32.36;MQ0=64;QD=7.44;SB=-821.16	GT:AD:DP:GL:GQ	0/1:76,304:165:-335.87,-49.70,-295.78:99
-chr1	809155	.	G	A	906.28	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=379;Dels=0.00;HRun=1;HaplotypeScore=107.83;MQ=32.25;MQ0=64;QD=2.39;SB=-437.76	GT:AD:DP:GL:GQ	0/1:271,108:165:-143.61,-49.69,-484.11:99
-chr1	809196	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=2;HaplotypeScore=63.80;MQ=34.67;MQ0=22;OQ=1194.90;QD=4.80;SB=-269.68	GT:AD:DP:GL:GQ	0/1:67,182:101:-153.20,-30.42,-236.52:99
-chr1	809260	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=41.08;MQ0=8;OQ=376.66;QD=3.30;SB=116.36	GT:AD:DP:GL:GQ	0/1:80,34:93:-68.96,-28.01,-266.36:99
-chr1	809273	.	T	C	463.34	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=8.66;MQ=40.73;MQ0=7;QD=3.83;SB=119.42	GT:AD:DP:GL:GQ	0/1:85,36:100:-79.74,-30.12,-319.61:99
-chr1	809278	.	T	A	448.40	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=9.66;MQ=40.70;MQ0=10;QD=3.59;SB=128.40	GT:AD:DP:GL:GQ	0/1:95,30:101:-78.54,-30.42,-301.76:99
-chr1	809279	.	C	A	472.08	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=9.66;MQ=40.57;MQ0=10;QD=3.72;SB=128.43	GT:AD:DP:GL:GQ	0/1:97,30:103:-81.51,-31.02,-300.46:99
-chr1	809374	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=40.85;MQ=49.25;MQ0=14;OQ=274.74;QD=2.18;SB=128.46	GT:AD:DP:GL:GQ	0/1:85,41:95:-59.38,-28.62,-356.10:99
-chr1	809396	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=153;Dels=0.03;HRun=0;HaplotypeScore=81.33;MQ=46.63;MQ0=11;OQ=370.18;QD=2.42;SB=128.42	GT:AD:DP:GL:GQ	0/1:90,59:107:-71.93,-31.63,-311.43:99
-chr1	809418	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=0;HaplotypeScore=18.59;MQ=42.45;MQ0=17;OQ=1574.87;QD=7.57;SB=-383.90	GT:AD:DP:GL:GQ	0/1:84,123:141:-203.25,-42.48,-331.17:99
-chr1	809463	.	T	C	270.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=113.69;MQ=41.23;MQ0=17;QD=1.24;SB=22.33	GT:AD:DP:GL:GQ	0/1:180,37:141:-72.78,-42.48,-486.18:99
-chr1	809466	.	G	A	91.66	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=2;HaplotypeScore=122.84;MQ=41.24;MQ0=16;QD=0.43;SB=110.32	GT:AD:DP:GL:GQ	0/1:181,32:144:-55.83,-43.38,-458.71:99
-chr1	809470	.	T	C	630.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=2;HaplotypeScore=238.78;MQ=41.40;MQ0=14;QD=3.03;SB=-114.41	GT:AD:DP:GL:GQ	0/1:153,55:135:-107.03,-40.67,-427.65:99
-chr1	809480	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=103.82;MQ=41.73;MQ0=11;OQ=1974.03;QD=10.79;SB=-338.07	GT:AD:DP:GL:GQ	0/1:66,116:122:-237.45,-36.76,-206.62:99
-chr1	809721	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=3;HaplotypeScore=9.02;MQ=53.95;MQ0=4;OQ=80.85;QD=0.86;SB=59.35	GT:AD:DP:GL:GQ	0/1:75,18:84:-36.67,-25.30,-283.82:99
-chr1	809780	rs6605057	A	G	0.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=11.81;MQ=56.13;MQ0=2;OQ=3054.85;QD=32.85;SB=-1362.55	GT:AD:DP:GL:GQ	1/1:0,93:85:-309.09,-25.60,-0.02:99
-chr1	809879	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=0;HaplotypeScore=59.97;MQ=40.35;MQ0=14;OQ=622.51;QD=3.19;SB=42.71	GT:AD:DP:GL:GQ	0/1:76,119:98:-95.05,-29.52,-272.29:99
-chr1	809895	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=1;HaplotypeScore=66.59;MQ=38.60;MQ0=19;OQ=465.46;QD=2.28;SB=92.30	GT:AD:DP:GL:GQ	0/1:110,94:92:-77.54,-27.71,-254.54:99
-chr1	809906	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=107.86;MQ=38.19;MQ0=19;OQ=204.28;QD=1.02;SB=98.35	GT:AD:DP:GL:GQ	0/1:163,38:93:-51.72,-28.01,-294.59:99
-chr1	810152	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=23.45;MQ=46.60;MQ0=18;OQ=256.17;QD=1.80;SB=89.22	GT:AD:DP:GL:GQ	0/1:80,62:93:-56.93,-28.03,-260.32:99
-chr1	810179	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=166;Dels=0.00;HRun=0;HaplotypeScore=40.97;MQ=43.29;MQ0=18;OQ=423.48;QD=2.55;SB=-10.82	GT:AD:DP:GL:GQ	0/1:90,76:99:-75.44,-29.81,-289.52:99
-chr1	810200	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=0;HaplotypeScore=91.89;MQ=44.44;MQ0=8;OQ=93.53;QD=0.60;SB=79.37	GT:AD:DP:GL:GQ	0/1:113,44:97:-41.85,-29.21,-309.84:99
-chr1	810211	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=3;HaplotypeScore=28.81;MQ=44.83;MQ0=8;OQ=438.48;QD=2.67;SB=-23.86	GT:AD:DP:GL:GQ	0/1:92,72:104:-78.46,-31.33,-303.09:99
-chr1	810249	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=0;HaplotypeScore=54.95;MQ=45.56;MQ0=5;OQ=532.92;QD=3.29;SB=-263.19	GT:AD:DP:GL:GQ	0/1:92,70:108:-89.11,-32.53,-336.39:99
-chr1	810266	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=6.95;MQ=49.31;MQ0=7;OQ=320.58;QD=2.31;SB=3.34	GT:AD:DP:GL:GQ	0/1:87,51:105:-66.97,-31.63,-352.01:99
-chr1	810282	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=2;HaplotypeScore=2.11;MQ=50.38;MQ0=7;OQ=214.82;QD=1.51;SB=75.99	GT:AD:DP:GL:GQ	0/1:98,44:111:-58.20,-33.43,-338.53:99
-chr1	810326	.	T	C	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.92;MQ0=10;OQ=89.69;QD=0.81;SB=59.40	GT:AD:DP:GL:GQ	0/1:87,24:95:-40.87,-28.62,-338.92:99
-chr1	810564	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=14.88;MQ=44.23;MQ0=6;OQ=498.14;QD=2.90;SB=-150.99	GT:AD:DP:GL:GQ	0/1:102,70:118:-88.65,-35.55,-364.99:99
-chr1	810629	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=38.71;MQ=50.61;MQ0=2;OQ=253.97;QD=2.29;SB=-143.03	GT:AD:DP:GL:GQ	0/1:83,27:94:-56.99,-28.31,-290.69:99
-chr1	810683	.	T	C	21.46	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=45.49;MQ0=13;QD=0.17;SB=104.38	GT:AD:DP:GL:GQ	0/1:80,50:88:-31.93,-26.50,-325.33:54.27
-chr1	810696	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=34.97;MQ=44.00;MQ0=14;OQ=294.30;QD=1.91;SB=110.32	GT:AD:DP:GL:GQ	0/1:85,69:98:-62.23,-29.52,-298.08:99
-chr1	810711	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=44.23;MQ=40.46;MQ0=17;OQ=839.07;QD=4.51;SB=107.39	GT:AD:DP:GL:GQ	0/1:81,105:106:-119.13,-31.94,-347.53:99
-chr1	810733	.	C	A	43.01	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=56.61;MQ=40.22;MQ0=16;QD=0.19;SB=125.38	GT:AD:DP:GL:GQ	0/1:192,33:131:-47.04,-39.45,-426.81:75.84
-chr1	810794	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=3;HaplotypeScore=52.64;MQ=44.21;MQ0=2;OQ=1066.68;QD=5.73;SB=31.06	GT:AD:DP:GL:GQ	0/1:92,94:128:-148.50,-38.55,-332.75:99
-chr1	810798	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=60.51;MQ=44.84;MQ0=1;OQ=1224.15;QD=6.69;SB=34.50	GT:AD:DP:GL:GQ	0/1:93,90:127:-163.96,-38.27,-393.95:99
-chr1	810830	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=3;HaplotypeScore=77.56;MQ=44.23;MQ0=2;OQ=74.26;QD=0.42;SB=98.47	GT:AD:DP:GL:GQ	0/1:145,25:125:-59.06,-48.35,-399.04:99
-chr1	810842	.	C	G	7.71	PASS	AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=44.02;MQ0=3;OQ=1687.26;QD=9.37;SB=-373.48	GT:AD:DP:GL:GQ	0/1:84,96:131:-211.48,-39.47,-372.20:99
-chr1	810901	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=76.75;MQ=45.85;MQ0=4;OQ=1193.00;QD=8.40;SB=-508.15	GT:AD:DP:GL:GQ	0/1:72,70:110:-155.72,-33.14,-263.20:99
-chr1	810906	.	T	C	38.41	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=84.75;MQ=46.22;MQ0=3;QD=0.29;SB=-42.29	GT:AD:DP:GL:GQ	0/1:104,29:99:-36.95,-29.82,-359.79:71.24
-chr1	810914	rs2871831	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=47.06;MQ0=6;OQ=781.68;QD=6.20;SB=-314.19	GT:AD:DP:GL:GQ	0/1:70,55:96:-110.36,-28.91,-259.38:99
-chr1	810923	.	A	T	0.10	PASS	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=1;HaplotypeScore=7.81;MQ=46.94;MQ0=8;OQ=838.41;QD=6.60;SB=-348.34	GT:AD:DP:GL:GQ	0/1:70,57:101:-117.55,-30.42,-266.19:99
-chr1	810974	rs61768253	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=90.96;MQ=39.12;MQ0=31;OQ=376.97;QD=2.37;SB=-131.06	GT:AD:DP:GL:GQ	0/1:90,68:97:-70.20,-29.22,-313.33:99
-chr1	810984	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=2;HaplotypeScore=97.32;MQ=34.90;MQ0=35;OQ=108.00;QD=0.52;SB=94.23	GT:AD:DP:GL:GQ	0/1:166,41:109:-46.91,-32.83,-360.50:99
-chr1	810998	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=0;HaplotypeScore=73.35;MQ=33.36;MQ0=43;OQ=73.40;QD=0.31;SB=-50.06	GT:AD:DP:GL:GQ	0/1:185,54:123:-47.67,-37.04,-404.38:99
-chr1	811006	rs61768254	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=248;Dels=0.00;HRun=1;HaplotypeScore=66.91;MQ=33.49;MQ0=48;OQ=832.91;QD=3.36;SB=-277.39	GT:AD:DP:GL:GQ	0/1:106,142:128:-125.13,-38.56,-331.35:99
-chr1	811069	rs35186927	T	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=481;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=31.63;MQ0=35;OQ=1139.00;QD=2.37;SB=-237.78	GT:AD:DP:GL:GQ	0/1:346,135:257:-194.59,-77.40,-784.30:99
-chr1	811112	rs2311684	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=350;Dels=0.00;HRun=0;HaplotypeScore=77.41;MQ=35.82;MQ0=8;OQ=2362.85;QD=6.75;SB=-654.92	GT:AD:DP:GL:GQ	0/1:216,134:219:-305.59,-66.02,-466.00:99
-chr1	811131	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=87.33;MQ=41.16;MQ0=2;OQ=4074.75;QD=16.43;SB=-1430.41	GT:AD:DP:GL:GQ	0/1:100,147:200:-406.47,-62.90,-355.42:99
-chr1	811184	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=2;HaplotypeScore=27.77;MQ=43.71;MQ0=0;OQ=460.52;QD=3.74;SB=149.45	GT:AD:DP:GL:GQ	0/1:91,32:108:-81.87,-32.53,-317.70:99
-chr1	811205	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=2;HaplotypeScore=18.01;MQ=44.82;MQ0=0;OQ=329.41;QD=2.86;SB=146.50	GT:AD:DP:GL:GQ	0/1:87,28:104:-67.56,-31.33,-345.48:99
-chr1	811285	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=37.25;MQ=40.88;MQ0=3;OQ=828.79;QD=5.53;SB=-15.76	GT:AD:DP:GL:GQ	0/1:66,84:93:-114.20,-28.04,-207.99:99
-chr1	811292	.	G	C	33.11	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=58.15;MQ=39.23;MQ0=3;QD=0.21;SB=95.35	GT:AD:DP:GL:GQ	0/1:79,14:72:-31.92,-25.33,-286.41:65.95
-chr1	811309	.	A	C	218.07	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=95.42;MQ=36.77;MQ0=3;QD=1.21;SB=75.78	GT:AD:DP:GL:GQ	0/1:95,84:77:-48.28,-23.19,-225.41:99
-chr1	811313	.	C	A	77.35	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=1;HaplotypeScore=126.41;MQ=36.87;MQ0=1;QD=0.41;SB=64.94	GT:AD:DP:GL:GQ	0/1:128,61:85:-36.63,-25.61,-260.99:99
-chr1	811315	.	G	A	900.17	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=189;Dels=0.00;HRun=1;HaplotypeScore=96.44;MQ=36.96;MQ0=1;QD=4.76;SB=64.69	GT:AD:DP:GL:GQ	0/1:57,131:88:-122.19,-28.89,-207.10:99
-chr1	811336	.	T	C	533.21	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=37.36;MQ0=1;QD=2.63;SB=59.62	GT:AD:DP:GL:GQ	0/1:62,140:81:-81.01,-24.41,-227.12:99
-chr1	811339	.	T	C	458.52	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=1;HaplotypeScore=44.80;MQ=38.07;MQ0=1;QD=2.29;SB=92.33	GT:AD:DP:GL:GQ	0/1:65,135:85:-74.74,-25.60,-261.77:99
-chr1	811347	.	T	G	278.98	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=226;Dels=0.00;HRun=3;HaplotypeScore=134.53;MQ=37.01;MQ0=0;QD=1.23;SB=83.27	GT:AD:DP:GL:GQ	0/1:65,161:80:-55.28,-24.10,-233.47:99
-chr1	811354	.	C	T	677.91	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=233;Dels=0.00;HRun=0;HaplotypeScore=163.01;MQ=36.31;MQ0=0;QD=2.91;SB=83.23	GT:AD:DP:GL:GQ	0/1:63,170:82:-95.80,-24.72,-187.92:99
-chr1	811362	.	C	T	454.65	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=226.76;MQ=36.80;MQ0=0;QD=1.97;SB=83.14	GT:AD:DP:GL:GQ	0/1:64,167:80:-72.88,-24.13,-190.51:99
-chr1	811364	.	T	C	196.31	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=1;HaplotypeScore=66.22;MQ=36.51;MQ0=0;QD=0.85;SB=79.92	GT:AD:DP:GL:GQ	0/1:84,145:75:-47.99,-25.07,-244.42:99
-chr1	811375	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=93.49;MQ=37.41;MQ0=0;OQ=1696.08;QD=7.34;SB=71.11	GT:AD:DP:GL:GQ	0/1:93,137:119:-208.77,-35.88,-209.62:99
-chr1	811378	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=1;HaplotypeScore=193.97;MQ=37.86;MQ0=0;OQ=1149.75;QD=4.81;SB=77.23	GT:AD:DP:GL:GQ	0/1:188,51:123:-155.31,-37.05,-314.47:99
-chr1	811386	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=2;HaplotypeScore=163.58;MQ=38.25;MQ0=0;OQ=516.99;QD=2.28;SB=29.28	GT:AD:DP:GL:GQ	0/1:149,78:121:-91.43,-36.45,-384.88:99
-chr1	811400	.	C	T	562.85	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=151.19;MQ=39.64;MQ0=0;QD=2.69;SB=23.60	GT:AD:DP:GL:GQ	0/1:96,113:102:-90.30,-30.73,-291.44:99
-chr1	811402	.	C	T	93.97	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=1;HaplotypeScore=101.45;MQ=39.46;MQ0=1;QD=0.46;SB=62.16	GT:AD:DP:GL:GQ	0/1:188,18:99:-42.50,-29.82,-326.30:99
-chr1	811408	.	G	T	250.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=192;Dels=0.00;HRun=0;HaplotypeScore=79.23;MQ=40.75;MQ0=2;QD=1.30;SB=59.20	GT:AD:DP:GL:GQ	0/1:111,80:98:-57.85,-29.52,-298.59:99
-chr1	811413	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=67.52;MQ=40.58;MQ0=2;OQ=77.44;QD=0.41;SB=62.19	GT:AD:DP:GL:GQ	0/1:97,91:86:-36.94,-25.92,-277.54:99
-chr1	811430	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=4;HaplotypeScore=58.87;MQ=40.65;MQ0=2;OQ=63.77;QD=0.39;SB=65.24	GT:AD:DP:GL:GQ	0/1:88,76:92:-37.38,-27.72,-324.79:96.61
-chr1	811435	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=19.26;MQ=40.95;MQ0=1;OQ=266.78;QD=1.72;SB=71.27	GT:AD:DP:GL:GQ	0/1:84,71:100:-60.08,-30.12,-340.43:99
-chr1	811443	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=2;HaplotypeScore=30.32;MQ=41.18;MQ0=1;OQ=189.19;QD=1.39;SB=77.28	GT:AD:DP:GL:GQ	0/1:79,56:91:-52.39,-30.19,-304.45:99
-chr1	811635	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=82.21;MQ=40.79;MQ0=16;OQ=141.45;QD=0.98;SB=-89.35	GT:AD:DP:GL:GQ	0/1:111,34:74:-39.73,-22.30,-281.80:99
-chr1	811650	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=95.82;MQ=42.47;MQ0=12;OQ=224.58;QD=1.65;SB=-61.36	GT:AD:DP:GL:GQ	0/1:66,70:76:-48.64,-22.89,-228.84:99
-chr1	811656	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=71.17;MQ=43.15;MQ0=11;OQ=112.09;QD=0.87;SB=-75.98	GT:AD:DP:GL:GQ	0/1:102,27:76:-37.39,-22.90,-238.94:99
-chr1	811750	rs6677354	A	G	0.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=4.05;MQ=50.03;MQ0=0;OQ=1811.37;QD=31.78;SB=-810.16	GT:AD:DP:GL:GQ	1/1:0,56:52:-184.74,-15.66,-0.02:99
-chr1	811789	rs35660652	C	G	23.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=4.89;MQ=49.27;MQ0=1;OQ=933.21;QD=16.97;SB=-483.19	GT:AD:DP:GL:GQ	0/1:25,30:48:-111.08,-14.47,-94.44:99
-chr1	811811	rs6671445	T	C	60.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=51.17;MQ0=1;OQ=1096.50;QD=26.11;SB=-519.10	GT:AD:DP:GL:GQ	1/1:0,42:35:-113.27,-10.56,-0.03:99
-chr1	811899	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=32.15;MQ=43.49;MQ0=20;OQ=124.06;QD=1.01;SB=92.32	GT:AD:DP:GL:GQ	0/1:62,60:72:-37.38,-21.69,-248.07:99
-chr1	812359	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=23.61;MQ=48.84;MQ0=1;OQ=66.32;QD=0.77;SB=71.21	GT:AD:DP:GL:GQ	0/1:52,34:57:-27.09,-17.17,-171.46:99
-chr1	812367	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=15.11;MQ=47.39;MQ0=1;OQ=182.54;QD=1.77;SB=-16.56	GT:AD:DP:GL:GQ	0/1:55,46:66:-41.42,-19.89,-213.25:99
-chr1	812395	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=0;HaplotypeScore=16.89;MQ=44.59;MQ0=4;OQ=290.02;QD=1.97;SB=-35.46	GT:AD:DP:GL:GQ	0/1:75,71:87:-58.50,-26.21,-278.39:99
-chr1	812396	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=12.57;MQ=44.24;MQ0=4;OQ=510.01;QD=3.40;SB=-121.97	GT:AD:DP:GL:GQ	0/1:77,73:89:-81.09,-26.81,-250.00:99
-chr1	812452	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=1;HaplotypeScore=44.19;MQ=38.30;MQ0=6;OQ=174.18;QD=0.73;SB=140.46	GT:AD:DP:GL:GQ	0/1:178,59:128:-59.25,-38.55,-429.97:99
-chr1	812470	.	G	A	3027.24	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=2;HaplotypeScore=95.67;MQ=37.00;MQ0=5;QD=11.38;SB=-136.01	GT:AD:DP:GL:GQ	0/1:72,177:161:-375.45,-69.45,-279.59:99
-chr1	812474	.	A	G	225.39	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=98.08;MQ=36.45;MQ0=4;QD=0.80;SB=107.36	GT:AD:DP:GL:GQ	0/1:225,57:173:-77.95,-52.13,-605.26:99
-chr1	812476	.	G	A	4194.86	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=1;HaplotypeScore=148.97;MQ=36.56;MQ0=4;QD=14.98;SB=-125.96	GT:AD:DP:GL:GQ	0/1:71,208:172:-418.49,-51.81,-254.37:99
-chr1	812496	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=383;Dels=0.00;HRun=3;HaplotypeScore=110.05;MQ=34.24;MQ0=3;OQ=4072.28;QD=10.63;SB=-60.38	GT:AD:DP:GL:GQ	0/1:191,192:229:-406.23,-68.97,-420.64:99
-chr1	812509	.	A	G	1306.01	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=390;Dels=0.00;HRun=0;HaplotypeScore=338.39;MQ=34.90;MQ0=4;QD=3.35;SB=113.39	GT:AD:DP:GL:GQ	0/1:88,302:134:-174.25,-40.36,-354.14:99
-chr1	812511	.	C	T	253.04	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=392;Dels=0.00;HRun=1;HaplotypeScore=342.27;MQ=34.93;MQ0=3;QD=0.65;SB=107.37	GT:AD:DP:GL:GQ	0/1:210,181:105:-60.21,-31.62,-326.58:99
-chr1	812536	.	C	T	6216.93	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=431;Dels=0.00;HRun=0;HaplotypeScore=21.13;MQ=33.82;MQ0=5;QD=14.42;SB=89.30	GT:AD:DP:GL:GQ	0/1:86,345:239:-620.69,-71.99,-300.06:99
-chr1	812546	.	A	T	6301.61	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=5;HaplotypeScore=527.01;MQ=34.23;MQ0=5;QD=15.33;SB=95.32	GT:AD:DP:GL:GQ	0/1:107,219:261:-629.16,-251.98,-546.86:99
-chr1	812557	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=384;Dels=0.00;HRun=0;HaplotypeScore=98.60;MQ=34.24;MQ0=5;OQ=4742.49;QD=12.35;SB=92.31	GT:AD:DP:GL:GQ	0/1:201,182:235:-473.25,-70.78,-414.34:99
-chr1	812581	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=273;Dels=0.00;HRun=0;HaplotypeScore=142.64;MQ=35.76;MQ0=4;OQ=1205.24;QD=4.41;SB=74.26	GT:AD:DP:GL:GQ	0/1:167,71:149:-175.85,-52.04,-375.17:99
-chr1	812582	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=141.33;MQ=35.99;MQ0=4;OQ=1716.18;QD=6.43;SB=71.26	GT:AD:DP:GL:GQ	0/1:103,164:146:-218.89,-43.99,-346.52:99
-chr1	812608	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=1;HaplotypeScore=67.91;MQ=41.17;MQ0=4;OQ=693.18;QD=4.20;SB=50.19	GT:AD:DP:GL:GQ	0/1:102,63:97:-101.82,-29.21,-294.33:99
-chr1	812623	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=28.33;MQ=46.60;MQ0=1;OQ=165.38;QD=1.61;SB=41.15	GT:AD:DP:GL:GQ	0/1:59,44:68:-40.30,-20.48,-216.18:99
-chr1	812625	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=1;HaplotypeScore=28.33;MQ=46.70;MQ0=1;OQ=134.52;QD=1.27;SB=44.17	GT:AD:DP:GL:GQ	0/1:60,46:69:-37.52,-20.78,-218.11:99
-chr1	812637	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=37.48;MQ=47.73;MQ0=2;OQ=214.50;QD=1.87;SB=-61.85	GT:AD:DP:GL:GQ	0/1:67,48:77:-47.94,-23.20,-220.91:99
-chr1	812655	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=33.89;MQ=47.71;MQ0=3;OQ=405.95;QD=3.35;SB=-136.06	GT:AD:DP:GL:GQ	0/1:68,53:87:-70.08,-26.20,-247.74:99
-chr1	812661	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=2;HaplotypeScore=21.84;MQ=47.58;MQ0=5;OQ=365.64;QD=2.95;SB=-168.82	GT:AD:DP:GL:GQ	0/1:87,37:88:-66.35,-26.51,-263.64:99
-chr1	812666	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=21.15;MQ=47.18;MQ0=5;OQ=451.13;QD=3.67;SB=-190.13	GT:AD:DP:GL:GQ	0/1:65,57:86:-74.30,-25.91,-260.71:99
-chr1	812725	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=2;HaplotypeScore=17.99;MQ=47.07;MQ0=7;OQ=51.25;QD=0.37;SB=36.23	GT:AD:DP:GL:GQ	0/1:99,33:95:-37.06,-28.65,-279.36:84.09
-chr1	812740	.	T	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=2;HaplotypeScore=10.99;MQ=47.57;MQ0=4;OQ=391.52;QD=3.08;SB=-178.55	GT:AD:DP:GL:GQ	0/1:69,58:85:-68.04,-25.60,-259.04:99
-chr1	812742	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=11.99;MQ=46.41;MQ0=4;OQ=355.87;QD=2.58;SB=-160.38	GT:AD:DP:GL:GQ	0/1:72,66:89:-65.67,-26.80,-277.85:99
-chr1	812772	.	C	A	4524.81	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=1;HaplotypeScore=205.36;MQ=35.68;MQ0=5;QD=13.31;SB=-1151.01	GT:AD:DP:GL:GQ	0/1:83,257:202:-451.48,-60.83,-296.00:99
-chr1	812774	.	G	A	5465.17	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=359;Dels=0.00;HRun=1;HaplotypeScore=230.04;MQ=35.29;MQ0=5;QD=15.22;SB=-1392.69	GT:AD:DP:GL:GQ	0/1:83,276:217:-545.52,-65.36,-295.35:99
-chr1	812778	.	A	C	2967.60	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=395;Dels=0.00;HRun=0;HaplotypeScore=217.58;MQ=34.63;MQ0=8;QD=7.51;SB=-725.51	GT:AD:DP:GL:GQ	0/1:219,176:242:-372.92,-72.88,-512.65:99
-chr1	812823	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=734;Dels=0.00;HRun=0;HaplotypeScore=134.36;MQ=30.02;MQ0=41;OQ=617.75;QD=0.84;SB=-157.33	GT:AD:DP:GL:GQ	0/1:653,81:442:-198.19,-133.13,-1425.62:99
-chr1	812838	rs657923	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=716;Dels=0.00;HRun=1;HaplotypeScore=212.74;MQ=29.97;MQ0=41;OQ=1388.92;QD=1.94;SB=-7.94	GT:AD:DP:GL:GQ	0/1:599,117:439:-274.39,-132.21,-1407.52:99
-chr1	812875	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=465;Dels=0.00;HRun=0;HaplotypeScore=110.91;MQ=32.05;MQ0=37;OQ=83.36;QD=0.18;SB=55.37	GT:AD:DP:GL:GQ	0/1:398,67:296:-100.77,-89.15,-980.63:99
-chr1	812885	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=346;Dels=0.00;HRun=1;HaplotypeScore=111.42;MQ=33.27;MQ0=30;OQ=5208.47;QD=15.05;SB=-2233.36	GT:AD:DP:GL:GQ	0/1:69,277:208:-519.85,-62.65,-238.95:99
-chr1	812886	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=335;Dels=0.00;HRun=1;HaplotypeScore=55.46;MQ=33.49;MQ0=30;OQ=451.06;QD=1.35;SB=-154.07	GT:AD:DP:GL:GQ	0/1:302,33:200:-108.62,-60.23,-633.51:99
-chr1	812900	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=14.94;MQ=39.79;MQ0=13;OQ=813.81;QD=4.45;SB=92.87	GT:AD:DP:GL:GQ	0/1:73,110:100:-114.78,-30.12,-260.13:99
-chr1	812923	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=27.88;MQ=50.22;MQ0=2;OQ=306.33;QD=2.95;SB=-30.81	GT:AD:DP:GL:GQ	0/1:70,34:81:-58.31,-24.40,-238.03:99
-chr1	812935	.	G	A	2.07	PASS	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=2.66;MQ=47.53;MQ0=2;OQ=744.11;QD=5.55;SB=-223.02	GT:AD:DP:GL:GQ	0/1:69,65:96:-106.61,-28.92,-247.13:99
-chr1	812951	.	G	T	11.25	PASS	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=43.90;MQ0=5;OQ=1351.36;QD=8.72;SB=-400.31	GT:AD:DP:GL:GQ	0/1:63,92:108:-170.95,-32.53,-225.30:99
-chr1	812975	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=28.65;MQ=40.87;MQ0=15;OQ=1862.55;QD=9.36;SB=-484.23	GT:AD:DP:GL:GQ	0/1:66,132:123:-230.20,-40.66,-212.95:99
-chr1	812981	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=40.75;MQ=39.82;MQ0=15;OQ=1797.82;QD=8.86;SB=-460.63	GT:AD:DP:GL:GQ	0/1:63,140:120:-219.20,-36.14,-217.08:99
-chr1	812999	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=293;Dels=0.00;HRun=3;HaplotypeScore=112.34;MQ=35.70;MQ0=17;OQ=746.50;QD=2.55;SB=103.46	GT:AD:DP:GL:GQ	0/1:201,92:175:-130.64,-52.71,-522.15:99
-chr1	813018	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=409;Dels=0.00;HRun=4;HaplotypeScore=24.00;MQ=34.51;MQ0=18;OQ=2503.76;QD=6.12;SB=-85.25	GT:AD:DP:GL:GQ	0/1:266,142:285:-339.49,-85.83,-765.92:99
-chr1	813030	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=463;Dels=0.00;HRun=0;HaplotypeScore=48.87;MQ=34.17;MQ0=19;OQ=2316.95;QD=5.00;SB=-56.40	GT:AD:DP:GL:GQ	0/1:312,151:338:-336.77,-101.79,-911.65:99
-chr1	813038	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=491;Dels=0.00;HRun=0;HaplotypeScore=299.82;MQ=33.86;MQ0=19;OQ=574.58;QD=1.17;SB=49.00	GT:AD:DP:GL:GQ	0/1:442,49:363:-170.06,-109.32,-1157.10:99
-chr1	813041	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=493;Dels=0.00;HRun=0;HaplotypeScore=391.76;MQ=34.08;MQ0=19;OQ=10262.92;QD=20.82;SB=-1216.69	GT:AD:DP:GL:GQ	0/1:84,408:369:-1025.29,-114.38,-315.19:99
-chr1	813055	.	T	G	5105.47	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=534;Dels=0.00;HRun=1;HaplotypeScore=573.54;MQ=33.39;MQ0=15;QD=9.56;SB=-804.21	GT:AD:DP:GL:GQ	0/1:355,179:410:-509.55,-123.48,-999.47:99
-chr1	813070	.	G	T	1334.14	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=573;Dels=0.00;HRun=1;HaplotypeScore=588.05;MQ=33.10;MQ0=9;QD=2.33;SB=-193.13	GT:AD:DP:GL:GQ	0/1:472,101:440:-269.21,-132.51,-1306.87:99
-chr1	813073	.	C	G	2805.72	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=592;Dels=0.00;HRun=1;HaplotypeScore=532.94;MQ=33.08;MQ0=8;QD=4.74;SB=-566.71	GT:AD:DP:GL:GQ	0/1:469,123:455:-420.94,-137.09,-1553.33:99
-chr1	813077	.	G	A	139.61	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=606;Dels=0.00;HRun=1;HaplotypeScore=787.16;MQ=33.34;MQ0=7;QD=0.23;SB=20.29	GT:AD:DP:GL:GQ	0/1:564,42:462:-156.39,-139.14,-1597.16:99
-chr1	813078	.	C	G	7856.82	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=607;Dels=0.00;HRun=1;HaplotypeScore=894.22;MQ=33.34;MQ0=7;QD=12.94;SB=-567.18	GT:AD:DP:GL:GQ	0/1:367,165:476:-784.68,-363.52,-1514.16:99
-chr1	813086	.	C	G	6412.49	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=625;Dels=0.00;HRun=0;HaplotypeScore=667.82;MQ=33.46;MQ0=7;QD=10.26;SB=-767.41	GT:AD:DP:GL:GQ	0/1:438,186:509:-640.25,-153.35,-1590.01:99
-chr1	813088	.	G	A	7116.40	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=627;Dels=0.00;HRun=1;HaplotypeScore=625.87;MQ=33.36;MQ0=7;QD=11.35;SB=-863.76	GT:AD:DP:GL:GQ	0/1:405,186:507:-710.64,-256.24,-1344.66:99
-chr1	813094	.	C	T	2968.23	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=620;Dels=0.00;HRun=0;HaplotypeScore=211.21;MQ=33.22;MQ0=9;QD=4.79;SB=-1023.50	GT:AD:DP:GL:GQ	0/1:481,139:495:-449.19,-149.09,-1385.37:99
-chr1	813107	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=546;Dels=0.00;HRun=0;HaplotypeScore=55.14;MQ=33.11;MQ0=20;OQ=871.93;QD=1.60;SB=-175.62	GT:AD:DP:GL:GQ	0/1:477,69:368:-201.32,-110.84,-1286.63:99
-chr1	813112	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=540;Dels=0.00;HRun=1;HaplotypeScore=215.40;MQ=33.46;MQ0=24;OQ=633.86;QD=1.17;SB=-102.54	GT:AD:DP:GL:GQ	0/1:489,51:349:-171.78,-105.11,-1109.57:99
-chr1	813120	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=452;Dels=0.00;HRun=0;HaplotypeScore=223.96;MQ=34.07;MQ0=26;OQ=8026.64;QD=17.76;SB=-2723.00	GT:AD:DP:GL:GQ	0/1:104,348:294:-801.66,-88.56,-349.63:99
-chr1	813123	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=449;Dels=0.00;HRun=0;HaplotypeScore=337.04;MQ=33.84;MQ0=28;OQ=7271.87;QD=16.20;SB=-2574.23	GT:AD:DP:GL:GQ	0/1:72,377:266:-726.19,-80.11,-257.87:99
-chr1	813133	.	G	C	2818.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=399;Dels=0.00;HRun=0;HaplotypeScore=373.63;MQ=34.21;MQ0=30;QD=7.06;SB=-1307.24	GT:AD:DP:GL:GQ	0/1:279,119:209:-348.13,-62.97,-562.66:99
-chr1	813135	.	A	G	6195.50	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=391;Dels=0.00;HRun=0;HaplotypeScore=305.70;MQ=34.41;MQ0=29;QD=15.85;SB=-2650.19	GT:AD:DP:GL:GQ	0/1:69,321:237:-618.55,-71.38,-275.07:99
-chr1	813142	.	T	C	345.82	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=364;Dels=0.00;HRun=1;HaplotypeScore=286.54;MQ=33.82;MQ0=33;QD=0.95;SB=-108.69	GT:AD:DP:GL:GQ	0/1:317,47:188:-94.49,-56.62,-663.95:99
-chr1	813148	.	C	A	1435.04	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=349;Dels=0.00;HRun=2;HaplotypeScore=161.77;MQ=34.46;MQ0=34;QD=4.11;SB=-365.32	GT:AD:DP:GL:GQ	0/1:282,67:257:-224.19,-77.40,-705.20:99
-chr1	813156	.	T	A	297.72	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=111.01;MQ=35.71;MQ0=35;QD=0.97;SB=9.92	GT:AD:DP:GL:GQ	0/1:276,32:221:-99.61,-66.55,-759.37:99
-chr1	813157	.	G	C	549.74	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=111.01;MQ=35.86;MQ0=35;QD=1.79;SB=-210.25	GT:AD:DP:GL:GQ	0/1:247,59:221:-124.85,-66.59,-828.88:99
-chr1	813168	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=2;HaplotypeScore=4.86;MQ=37.54;MQ0=37;OQ=984.94;QD=3.88;SB=44.86	GT:AD:DP:GL:GQ	0/1:209,45:173:-153.88,-52.11,-496.83:99
-chr1	813186	.	G	C	76.25	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=0;HaplotypeScore=72.20;MQ=40.71;MQ0=36;QD=0.48;SB=71.95	GT:AD:DP:GL:GQ	0/1:148,12:83:-35.91,-25.01,-332.34:99
-chr1	813187	.	A	G	513.33	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=1;HaplotypeScore=71.20;MQ=41.66;MQ0=35;QD=3.49;SB=-73.38	GT:AD:DP:GL:GQ	0/1:75,50:94:-82.93,-28.31,-287.29:99
-chr1	813188	.	C	A	79.88	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=1;HaplotypeScore=71.20;MQ=41.50;MQ0=35;QD=0.55;SB=44.61	GT:AD:DP:GL:GQ	0/1:120,26:78:-34.77,-23.49,-243.41:99
-chr1	813189	.	C	A	521.18	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=67.21;MQ=41.65;MQ0=35;QD=3.62;SB=-1.36	GT:AD:DP:GL:GQ	0/1:108,26:91:-101.37,-45.97,-249.59:99
-chr1	813208	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=2;HaplotypeScore=18.83;MQ=43.26;MQ0=23;OQ=418.24;QD=3.37;SB=-54.23	GT:AD:DP:GL:GQ	0/1:61,63:76:-68.00,-22.89,-206.10:99
-chr1	813240	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=2;HaplotypeScore=43.28;MQ=41.04;MQ0=25;OQ=943.89;QD=6.13;SB=-68.91	GT:AD:DP:GL:GQ	0/1:64,90:92:-125.38,-27.71,-227.61:99
-chr1	813250	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=0;HaplotypeScore=62.53;MQ=37.95;MQ0=22;OQ=226.25;QD=1.16;SB=14.99	GT:AD:DP:GL:GQ	0/1:153,42:96:-54.82,-28.92,-298.56:99
-chr1	813271	.	T	C	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=0;HaplotypeScore=8.46;MQ=34.98;MQ0=19;OQ=1147.61;QD=4.61;SB=-134.40	GT:AD:DP:GL:GQ	0/1:63,186:103:-149.07,-31.02,-256.47:99
-chr1	813292	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=2;HaplotypeScore=102.43;MQ=30.92;MQ0=23;OQ=1986.60;QD=5.20;SB=-566.46	GT:AD:DP:GL:GQ	0/1:105,277:133:-242.00,-40.06,-276.00:99
-chr1	813307	.	A	G	32.13	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=535;Dels=0.00;HRun=0;HaplotypeScore=181.84;MQ=30.25;MQ0=27;QD=0.06;SB=46.55	GT:AD:DP:GL:GQ	0/1:504,31:255:-83.31,-76.81,-935.22:64.97
-chr1	813316	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=619;Dels=0.00;HRun=2;HaplotypeScore=75.11;MQ=29.97;MQ0=27;OQ=3157.81;QD=5.10;SB=-1462.71	GT:AD:DP:GL:GQ	0/1:382,237:331:-418.76,-99.69,-846.79:99
-chr1	813335	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=826;Dels=0.00;HRun=1;HaplotypeScore=136.91;MQ=30.11;MQ0=21;OQ=7119.57;QD=8.62;SB=-2280.77	GT:AD:DP:GL:GQ	0/1:537,288:549:-710.96,-165.36,-1364.58:99
-chr1	813362	.	A	G	16357.98	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=920;Dels=0.00;HRun=1;HaplotypeScore=446.32;MQ=30.10;MQ0=24;QD=17.78;SB=-5014.09	GT:AD:DP:GL:GQ	0/1:273,494:683:-1634.80,-554.43,-1400.88:99
-chr1	813367	.	T	C	20902.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=914;Dels=0.00;HRun=0;HaplotypeScore=426.41;MQ=30.28;MQ0=24;QD=22.87;SB=-7448.46	GT:AD:DP:GL:GQ	0/1:141,716:687:-2089.26,-358.04,-691.48:99
-chr1	813368	rs13302980	T	C	206.93	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=916;Dels=0.00;HRun=0;HaplotypeScore=426.41;MQ=30.25;MQ0=24;QD=0.23;SB=-118.41	GT:AD:DP:GL:GQ	0/1:843,73:685:-230.32,-206.34,-2521.41:99
-chr1	813385	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=888;Dels=0.00;HRun=0;HaplotypeScore=40.71;MQ=30.82;MQ0=25;OQ=1088.75;QD=1.23;SB=-408.14	GT:AD:DP:GL:GQ	0/1:783,105:699:-322.70,-210.54,-2232.26:99
-chr1	813404	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=750;Dels=0.00;HRun=2;HaplotypeScore=134.73;MQ=32.26;MQ0=17;OQ=670.55;QD=0.89;SB=-191.51	GT:AD:DP:GL:GQ	0/1:685,65:613:-254.96,-184.62,-2037.75:99
-chr1	813405	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=741;Dels=0.00;HRun=2;HaplotypeScore=133.74;MQ=32.36;MQ0=17;OQ=1633.92;QD=2.21;SB=-672.01	GT:AD:DP:GL:GQ	0/1:597,144:607:-349.50,-182.82,-2122.95:99
-chr1	813418	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=590;Dels=0.00;HRun=0;HaplotypeScore=47.11;MQ=33.33;MQ0=15;OQ=65.79;QD=0.11;SB=206.84	GT:AD:DP:GL:GQ	0/1:544,46:476:-153.22,-143.35,-1574.37:98.63
-chr1	813443	.	T	G	3848.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=38.86;MQ=37.99;MQ0=5;QD=13.99;SB=-1241.58	GT:AD:DP:GL:GQ	0/1:79,195:186:-383.81,-56.02,-279.85:99
-chr1	813451	.	C	T	1033.45	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=197;Dels=0.01;HRun=0;HaplotypeScore=22.13;MQ=41.75;MQ0=4;QD=5.25;SB=-217.95	GT:AD:DP:GL:GQ	0/1:81,115:114:-140.97,-34.34,-279.86:99
-chr1	813452	.	A	G	765.89	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=186;Dels=0.01;HRun=0;HaplotypeScore=26.12;MQ=42.21;MQ0=4;QD=4.12;SB=-130.38	GT:AD:DP:GL:GQ	0/1:79,106:109:-112.71,-32.84,-316.56:99
-chr1	813514	rs61768255	T	A	0.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=40.18;MQ0=52;OQ=194.92;QD=1.28;SB=-18.62	GT:AD:DP:GL:GQ	0/1:64,87:75:-45.36,-22.59,-238.39:99
-chr1	813576	.	G	T	36.42	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=256;Dels=0.00;HRun=0;HaplotypeScore=114.90;MQ=32.12;MQ0=13;QD=0.14;SB=80.27	GT:AD:DP:GL:GQ	0/1:231,25:108:-39.45,-32.53,-355.25:69.25
-chr1	813577	.	C	T	12.25	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=253;Dels=0.00;HRun=0;HaplotypeScore=118.76;MQ=32.29;MQ0=11;QD=0.05;SB=83.28	GT:AD:DP:GL:GQ	0/1:222,24:110:-47.87,-43.39,-370.50:44.82
-chr1	813595	.	G	A	14.36	DPFilter;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=304;Dels=0.02;HRun=3;HaplotypeScore=679.47;MQ=32.56;MQ0=1;QD=0.05;SB=59.22	GT:AD:DP:GL:GQ	0/1:279,19:122:-44.63,-39.92,-398.76:47.04
-chr1	813600	.	G	A	274.89	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=874.07;MQ=32.03;MQ0=1;QD=0.84;SB=65.24	GT:AD:DP:GL:GQ	0/1:247,78:142:-73.54,-42.77,-440.28:99
-chr1	813603	.	G	A	897.36	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=1015.89;MQ=31.94;MQ0=0;QD=2.75;SB=17.55	GT:AD:DP:GL:GQ	0/1:201,125:138:-134.59,-41.57,-374.40:99
-chr1	813618	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=385;Dels=0.01;HRun=2;HaplotypeScore=1064.00;MQ=30.68;MQ0=0;OQ=4144.71;QD=10.77;SB=-60.77	GT:AD:DP:GL:GQ	0/1:139,193:174:-413.47,-52.40,-263.62:99
-chr1	813640	.	G	A	6008.25	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=492;Dels=0.03;HRun=2;HaplotypeScore=778.76;MQ=30.34;MQ0=0;QD=12.21;SB=-280.67	GT:AD:DP:GL:GQ	0/1:225,249:279:-599.83,-82.23,-444.10:99
-chr1	813644	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=499;Dels=0.00;HRun=2;HaplotypeScore=589.76;MQ=30.13;MQ0=0;OQ=1319.59;QD=2.64;SB=-65.34	GT:AD:DP:GL:GQ	0/1:370,128:286:-221.39,-86.15,-815.48:99
-chr1	813653	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=493;Dels=0.00;HRun=1;HaplotypeScore=439.06;MQ=30.75;MQ0=0;OQ=617.48;QD=1.25;SB=-157.65	GT:AD:DP:GL:GQ	0/1:455,38:256:-142.14,-77.10,-775.99:99
-chr1	813667	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=450;Dels=0.03;HRun=0;HaplotypeScore=1087.09;MQ=31.84;MQ0=0;OQ=612.31;QD=1.36;SB=24.15	GT:AD:DP:GL:GQ	0/1:310,99:290:-203.97,-139.46,-953.68:99
-chr1	813680	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=385;Dels=0.03;HRun=2;HaplotypeScore=1191.21;MQ=32.81;MQ0=0;OQ=1213.04;QD=3.15;SB=-10.63	GT:AD:DP:GL:GQ	0/1:276,97:229:-193.56,-68.97,-645.40:99
-chr1	813720	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=252;Dels=0.06;HRun=1;HaplotypeScore=327.60;MQ=37.03;MQ0=0;OQ=194.28;QD=0.77;SB=110.38	GT:AD:DP:GL:GQ	0/1:205,33:146:-66.38,-43.67,-457.57:99
-chr1	813729	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=373.81;MQ=39.70;MQ0=0;OQ=281.23;QD=1.50;SB=15.00	GT:AD:DP:GL:GQ	0/1:127,60:111:-64.84,-33.43,-345.95:99
-chr1	813820	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=81;Dels=0.05;HRun=2;HaplotypeScore=42.41;MQ=49.74;MQ0=3;OQ=162.06;QD=2.00;SB=-100.42	GT:AD:DP:GL:GQ	0/1:56,21:59:-37.26,-17.77,-183.03:99
-chr1	813869	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=73.61;MQ=47.62;MQ0=2;OQ=155.20;QD=1.94;SB=41.14	GT:AD:DP:GL:GQ	0/1:71,9:54:-35.07,-16.26,-160.29:99
-chr1	813877	.	G	A	25.05	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=66.85;MQ=49.86;MQ0=1;QD=0.34;SB=32.11	GT:AD:DP:GL:GQ	0/1:64,9:51:-21.15,-15.36,-169.54:57.88
-chr1	813907	.	G	A	23.05	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.04;HRun=1;HaplotypeScore=56.30;MQ=49.27;MQ0=1;QD=0.32;SB=38.13	GT:AD:DP:GL:GQ	0/1:63,7:54:-21.25,-15.66,-171.08:55.87
-chr1	813910	.	G	A	12.29	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=61.37;MQ=49.27;MQ0=1;QD=0.17;SB=35.12	GT:AD:DP:GL:GQ	0/1:63,10:55:-21.06,-16.57,-179.39:44.87
-chr1	813923	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=75;Dels=0.03;HRun=2;HaplotypeScore=23.38;MQ=50.12;MQ0=1;OQ=138.74;QD=1.85;SB=-24.20	GT:AD:DP:GL:GQ	0/1:50,23:55:-33.43,-16.28,-173.24:99
-chr1	813957	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=2;HaplotypeScore=18.68;MQ=43.32;MQ0=1;OQ=871.71;QD=6.86;SB=-275.74	GT:AD:DP:GL:GQ	0/1:65,62:85:-116.06,-25.61,-200.91:99
-chr1	813978	.	A	C	0.71	PASS	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=39.28;MQ0=4;OQ=705.69;QD=4.77;SB=-252.74	GT:AD:DP:GL:GQ	0/1:54,94:80:-97.95,-24.09,-193.62:99
-chr1	814078	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=6.42;MQ=36.79;MQ0=24;OQ=486.46;QD=2.55;SB=-267.20	GT:AD:DP:GL:GQ	0/1:63,128:82:-76.63,-24.70,-247.64:99
-chr1	814121	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=39.43;MQ=40.45;MQ0=17;OQ=289.94;QD=1.73;SB=-38.08	GT:AD:DP:GL:GQ	0/1:70,98:82:-56.99,-24.71,-295.92:99
-chr1	814147	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=0;HaplotypeScore=14.17;MQ=45.92;MQ0=13;OQ=964.78;QD=6.39;SB=-366.58	GT:AD:DP:GL:GQ	0/1:82,69:112:-133.50,-33.74,-285.66:99
-chr1	814171	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=1;HaplotypeScore=20.78;MQ=44.66;MQ0=14;OQ=904.13;QD=5.38;SB=-364.51	GT:AD:DP:GL:GQ	0/1:83,85:118:-129.23,-35.54,-305.53:99
-chr1	814202	.	C	A	1692.96	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=197;Dels=0.09;HRun=0;HaplotypeScore=162.31;MQ=41.97;MQ0=8;QD=8.59;SB=-578.48	GT:AD:DP:GL:GQ	0/1:79,100:139:-213.84,-41.26,-286.69:99
-chr1	814220	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=0;HaplotypeScore=50.82;MQ=39.65;MQ0=8;OQ=329.14;QD=1.52;SB=-86.50	GT:AD:DP:GL:GQ	0/1:161,56:136:-77.16,-40.96,-423.94:99
-chr1	814233	.	G	A	2067.86	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=147.47;MQ=38.66;MQ0=13;QD=9.23;SB=-544.97	GT:AD:DP:GL:GQ	0/1:105,119:132:-249.86,-39.79,-228.63:99
-chr1	814239	.	A	G	1315.30	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=1;HaplotypeScore=123.50;MQ=38.45;MQ0=13;QD=5.98;SB=-142.40	GT:AD:DP:GL:GQ	0/1:70,150:114:-169.16,-34.34,-278.17:99
-chr1	814242	.	A	G	554.64	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=125.56;MQ=38.13;MQ0=16;QD=2.40;SB=-155.01	GT:AD:DP:GL:GQ	0/1:172,59:130:-97.91,-39.16,-422.03:99
-chr1	814256	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=245;Dels=0.00;HRun=0;HaplotypeScore=21.41;MQ=37.07;MQ0=15;OQ=2324.45;QD=9.49;SB=-360.77	GT:AD:DP:GL:GQ	0/1:68,177:144:-279.11,-43.38,-270.96:99
-chr1	814273	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=59.92;MQ=36.71;MQ0=15;OQ=51.68;QD=0.19;SB=122.32	GT:AD:DP:GL:GQ	0/1:221,49:163:-60.05,-51.60,-506.38:84.51
-chr1	814274	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=0;HaplotypeScore=59.77;MQ=36.62;MQ0=15;OQ=1850.48;QD=6.88;SB=-407.81	GT:AD:DP:GL:GQ	0/1:149,120:153:-234.45,-46.12,-315.76:99
-chr1	814294	.	A	G	2410.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=2;HaplotypeScore=103.79;MQ=37.05;MQ0=15;QD=9.06;SB=-443.47	GT:AD:DP:GL:GQ	0/1:75,191:153:-290.38,-46.10,-295.34:99
-chr1	814296	.	G	A	1211.04	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=219.20;MQ=36.82;MQ0=15;QD=4.42;SB=-351.23	GT:AD:DP:GL:GQ	0/1:200,74:158:-171.99,-47.60,-420.58:99
-chr1	814301	.	A	G	978.34	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=220.77;MQ=36.41;MQ0=15;QD=3.57;SB=-180.08	GT:AD:DP:GL:GQ	0/1:73,201:110:-134.26,-33.14,-291.65:99
-chr1	814305	.	T	C	45.78	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=232.83;MQ=35.76;MQ0=15;QD=0.16;SB=-43.14	GT:AD:DP:GL:GQ	0/1:206,71:102:-38.59,-30.73,-365.14:78.61
-chr1	814318	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=167.17;MQ=36.26;MQ0=13;OQ=2113.99;QD=7.60;SB=-387.55	GT:AD:DP:GL:GQ	0/1:72,191:148:-269.75,-55.07,-295.63:99
-chr1	814320	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=167.17;MQ=36.49;MQ0=13;OQ=746.17;QD=2.66;SB=-108.14	GT:AD:DP:GL:GQ	0/1:218,62:140:-120.08,-42.18,-412.31:99
-chr1	814333	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=285;Dels=0.00;HRun=0;HaplotypeScore=281.15;MQ=35.53;MQ0=9;OQ=1990.33;QD=6.98;SB=-447.96	GT:AD:DP:GL:GQ	0/1:95,190:142:-245.09,-42.77,-288.22:99
-chr1	814346	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=0;HaplotypeScore=225.23;MQ=36.32;MQ0=4;OQ=1683.84;QD=6.71;SB=-421.88	GT:AD:DP:GL:GQ	0/1:107,144:128:-210.24,-38.57,-269.23:99
-chr1	814360	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=2;HaplotypeScore=149.83;MQ=38.08;MQ0=4;OQ=172.19;QD=0.77;SB=51.61	GT:AD:DP:GL:GQ	0/1:195,28:117:-55.74,-35.24,-362.13:99
-chr1	814384	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=42.51;MQ=45.49;MQ0=3;OQ=551.67;QD=3.70;SB=-145.33	GT:AD:DP:GL:GQ	0/1:76,73:99:-88.27,-29.82,-286.26:99
-chr1	814428	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=10.58;MQ=49.14;MQ0=17;OQ=342.52;QD=2.63;SB=-111.49	GT:AD:DP:GL:GQ	0/1:82,48:99:-67.35,-29.82,-298.71:99
-chr1	814439	.	C	T	20.82	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=47.72;MQ0=20;QD=0.14;SB=152.46	GT:AD:DP:GL:GQ	0/1:137,12:115:-40.00,-34.64,-383.60:53.62
-chr1	814456	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=15.28;MQ=46.84;MQ0=26;OQ=753.94;QD=4.65;SB=-138.63	GT:AD:DP:GL:GQ	0/1:92,70:122:-115.43,-36.75,-321.50:99
-chr1	814470	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=189;Dels=0.00;HRun=1;HaplotypeScore=31.58;MQ=44.82;MQ0=39;OQ=884.58;QD=4.68;SB=-229.69	GT:AD:DP:GL:GQ	0/1:97,92:121:-128.25,-36.50,-368.74:99
-chr1	814488	.	C	A	76.03	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=247;Dels=0.00;HRun=0;HaplotypeScore=105.09;MQ=41.14;MQ0=41;QD=0.31;SB=176.55	GT:AD:DP:GL:GQ	0/1:229,16:148:-55.47,-44.58,-476.50:99
-chr1	814489	.	C	G	69.13	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=89.81;MQ=41.12;MQ0=41;QD=0.28;SB=176.62	GT:AD:DP:GL:GQ	0/1:231,17:149:-55.10,-44.90,-596.57:99
-chr1	814495	.	T	C	1858.16	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=56.93;MQ=40.44;MQ0=47;QD=7.20;SB=-760.45	GT:AD:DP:GL:GQ	0/1:92,166:157:-236.40,-47.30,-370.00:99
-chr1	814529	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=0;HaplotypeScore=120.51;MQ=38.11;MQ0=39;OQ=500.57;QD=1.16;SB=-243.42	GT:AD:DP:GL:GQ	0/1:383,50:261:-131.95,-78.61,-806.43:99
-chr1	814534	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=446;Dels=0.00;HRun=0;HaplotypeScore=107.63;MQ=38.32;MQ0=36;OQ=359.59;QD=0.81;SB=-173.49	GT:AD:DP:GL:GQ	0/1:401,44:272:-121.18,-81.93,-841.90:99
-chr1	814540	.	A	G	36.54	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=477;Dels=0.00;HRun=1;HaplotypeScore=62.33;MQ=38.25;MQ0=37;QD=0.08;SB=123.17	GT:AD:DP:GL:GQ	0/1:445,32:265:-86.76,-79.83,-986.21:69.37
-chr1	814554	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=529;Dels=0.00;HRun=0;HaplotypeScore=89.36;MQ=37.97;MQ0=32;OQ=9731.93;QD=18.40;SB=-1976.66	GT:AD:DP:GL:GQ	0/1:80,449:318:-972.19,-95.79,-281.92:99
-chr1	814557	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=0;HaplotypeScore=97.56;MQ=38.01;MQ0=31;OQ=8661.84;QD=15.69;SB=-1680.73	GT:AD:DP:GL:GQ	0/1:195,357:340:-865.18,-102.42,-472.42:99
-chr1	814572	rs564838	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=625;Dels=0.00;HRun=1;HaplotypeScore=63.63;MQ=38.08;MQ0=27;OQ=2371.32;QD=3.79;SB=-326.77	GT:AD:DP:GL:GQ	0/1:480,145:413:-364.80,-124.39,-1136.05:99
-chr1	814627	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=504;Dels=0.00;HRun=1;HaplotypeScore=183.33;MQ=39.27;MQ0=14;OQ=10984.00;QD=21.79;SB=-1265.89	GT:AD:DP:GL:GQ	0/1:67,203:343:-1097.40,-537.50,-676.52:99
-chr1	814675	.	G	A	2732.90	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=265;Dels=0.00;HRun=1;HaplotypeScore=261.45;MQ=41.69;MQ0=11;QD=10.31;SB=-108.93	GT:AD:DP:GL:GQ	0/1:161,102:166:-330.09,-53.51,-314.61:99
-chr1	814679	.	A	G	2402.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=1;HaplotypeScore=135.51;MQ=41.79;MQ0=13;QD=10.14;SB=-20.34	GT:AD:DP:GL:GQ	0/1:70,167:146:-287.52,-43.99,-273.83:99
-chr1	814680	.	C	T	2092.18	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=238;Dels=0.00;HRun=0;HaplotypeScore=134.51;MQ=41.43;MQ0=17;QD=8.79;SB=-7.62	GT:AD:DP:GL:GQ	0/1:151,86:144:-255.88,-43.38,-283.23:99
-chr1	814701	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=51.82;MQ=41.75;MQ0=19;OQ=1622.55;QD=7.41;SB=-75.48	GT:AD:DP:GL:GQ	0/1:87,132:141:-208.02,-42.48,-267.24:99
-chr1	814708	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=76.68;MQ=40.68;MQ0=25;OQ=2028.26;QD=9.14;SB=-58.81	GT:AD:DP:GL:GQ	0/1:84,138:144:-249.49,-43.38,-267.28:99
-chr1	814713	rs563211	T	C	1374.69	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=232;Dels=0.00;HRun=0;HaplotypeScore=105.58;MQ=40.40;MQ0=29;QD=5.93;SB=29.72	GT:AD:DP:GL:GQ	0/1:146,86:143:-183.83,-43.08,-359.04:99
-chr1	814720	.	T	C	689.97	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=108.11;MQ=39.59;MQ0=32;QD=2.84;SB=46.65	GT:AD:DP:GL:GQ	0/1:85,157:115:-106.92,-34.64,-346.63:99
-chr1	814722	.	C	G	183.01	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=0;HaplotypeScore=126.09;MQ=39.61;MQ0=33;QD=0.72;SB=68.61	GT:AD:DP:GL:GQ	0/1:217,37:122:-58.35,-36.76,-472.38:99
-chr1	814737	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=30.86;MQ=38.18;MQ0=38;OQ=2218.82;QD=7.42;SB=-36.77	GT:AD:DP:GL:GQ	0/1:186,113:186:-281.20,-56.03,-416.78:99
-chr1	814767	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=365;Dels=0.00;HRun=2;HaplotypeScore=49.56;MQ=35.63;MQ0=43;OQ=5264.89;QD=14.42;SB=-427.42	GT:AD:DP:GL:GQ	0/1:96,269:216:-525.49,-65.13,-366.09:99
-chr1	814784	.	A	G	211.71	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=402;Dels=0.00;HRun=0;HaplotypeScore=324.91;MQ=34.66;MQ0=41;QD=0.53;SB=-28.05	GT:AD:DP:GL:GQ	0/1:357,45:243:-97.65,-73.19,-885.32:99
-chr1	814787	.	A	G	1988.10	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=404;Dels=0.00;HRun=0;HaplotypeScore=288.76;MQ=34.45;MQ0=41;QD=4.92;SB=-448.31	GT:AD:DP:GL:GQ	0/1:239,165:199:-262.08,-59.99,-467.56:99
-chr1	814790	.	G	A	2076.12	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=406;Dels=0.00;HRun=0;HaplotypeScore=289.81;MQ=34.38;MQ0=42;QD=5.11;SB=-426.20	GT:AD:DP:GL:GQ	0/1:294,112:245:-284.69,-73.80,-651.34:99
-chr1	814794	.	G	C	5521.90	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=0;HaplotypeScore=359.70;MQ=34.34;MQ0=40;QD=13.80;SB=-919.83	GT:AD:DP:GL:GQ	0/1:77,252:207:-551.19,-211.22,-478.27:99
-chr1	814804	.	C	T	88.70	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=434;Dels=0.00;HRun=1;HaplotypeScore=347.22;MQ=35.87;MQ0=35;QD=0.20;SB=-33.30	GT:AD:DP:GL:GQ	0/1:387,47:188:-68.79,-56.64,-599.68:99
-chr1	814807	.	A	C	912.16	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=446;Dels=0.00;HRun=1;HaplotypeScore=302.12;MQ=36.31;MQ0=35;QD=2.05;SB=-348.23	GT:AD:DP:GL:GQ	0/1:319,127:242:-167.40,-72.90,-690.79:99
-chr1	814811	.	C	T	8629.57	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=472;Dels=0.00;HRun=2;HaplotypeScore=321.44;MQ=36.81;MQ0=35;QD=18.28;SB=-2662.56	GT:AD:DP:GL:GQ	0/1:133,339:310:-861.96,-93.38,-350.61:99
-chr1	814815	.	G	A	1219.97	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=497;Dels=0.00;HRun=1;HaplotypeScore=253.88;MQ=37.19;MQ0=33;QD=2.45;SB=-308.28	GT:AD:DP:GL:GQ	0/1:414,82:332:-225.30,-100.02,-991.58:99
-chr1	814833	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=0;HaplotypeScore=30.66;MQ=38.93;MQ0=25;OQ=13138.69;QD=23.80;SB=-5564.86	GT:AD:DP:GL:GQ	0/1:68,484:387:-1312.87,-116.58,-241.99:99
-chr1	814846	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=600;Dels=0.00;HRun=1;HaplotypeScore=69.54;MQ=39.19;MQ0=23;OQ=3136.64;QD=5.23;SB=-1237.78	GT:AD:DP:GL:GQ	0/1:435,165:409:-440.13,-123.18,-1039.78:99
-chr1	814879	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=693;Dels=0.00;HRun=0;HaplotypeScore=388.69;MQ=39.91;MQ0=7;OQ=8125.01;QD=11.72;SB=-2578.04	GT:AD:DP:GL:GQ	0/1:409,284:467:-811.50,-140.66,-960.39:99
-chr1	814880	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=692;Dels=0.00;HRun=2;HaplotypeScore=381.90;MQ=39.95;MQ0=7;OQ=2413.57;QD=3.49;SB=-960.49	GT:AD:DP:GL:GQ	0/1:533,158:465:-387.57,-142.93,-1289.43:99
-chr1	814900	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=699;Dels=0.00;HRun=0;HaplotypeScore=119.56;MQ=39.22;MQ0=14;OQ=14541.95;QD=20.80;SB=-4000.09	GT:AD:DP:GL:GQ	0/1:90,605:445:-1453.20,-134.09,-272.14:99
-chr1	814929	.	C	T	1261.33	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=562;Dels=0.00;HRun=0;HaplotypeScore=644.78;MQ=37.11;MQ0=29;QD=2.24;SB=-29.99	GT:AD:DP:GL:GQ	0/1:384,176:313:-223.70,-94.28,-953.66:99
-chr1	814931	.	T	C	7350.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=554;Dels=0.00;HRun=4;HaplotypeScore=616.85;MQ=36.93;MQ0=28;QD=13.27;SB=-1896.86	GT:AD:DP:GL:GQ	0/1:148,405:309:-734.01,-93.08,-440.40:99
-chr1	814932	rs4475692	G	A	10783.24	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=554;Dels=0.00;HRun=0;HaplotypeScore=621.95;MQ=36.79;MQ0=29;QD=19.46;SB=-2129.22	GT:AD:DP:GL:GQ	0/1:174,298:306:-1077.32,-380.57,-459.91:99
-chr1	814939	.	G	A	1306.21	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=568;Dels=0.00;HRun=1;HaplotypeScore=479.84;MQ=36.20;MQ0=35;QD=2.30;SB=-170.45	GT:AD:DP:GL:GQ	0/1:402,165:327:-232.39,-98.48,-986.51:99
-chr1	814952	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=543;Dels=0.00;HRun=0;HaplotypeScore=51.53;MQ=35.74;MQ0=35;OQ=140.17;QD=0.26;SB=144.16	GT:AD:DP:GL:GQ	0/1:482,61:349:-122.41,-105.11,-1207.38:99
-chr1	814967	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=541;Dels=0.00;HRun=0;HaplotypeScore=312.71;MQ=35.10;MQ0=40;OQ=7468.20;QD=13.80;SB=-2338.34	GT:AD:DP:GL:GQ	0/1:256,284:360:-745.82,-108.45,-622.35:99
-chr1	814975	.	C	T	35.90	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=483;Dels=0.00;HRun=0;HaplotypeScore=80.80;MQ=34.88;MQ0=44;QD=0.07;SB=387.40	GT:AD:DP:GL:GQ	0/1:418,42:326:-167.53,-160.66,-1098.08:68.73
-chr1	815007	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=591;Dels=0.00;HRun=1;HaplotypeScore=71.67;MQ=32.27;MQ0=41;OQ=5134.52;QD=8.69;SB=-1587.17	GT:AD:DP:GL:GQ	0/1:388,203:408:-512.45,-122.89,-966.60:99
-chr1	815060	rs7417801	G	A	11239.90	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=650;Dels=0.00;HRun=0;HaplotypeScore=316.82;MQ=33.42;MQ0=19;QD=17.29;SB=-4737.34	GT:AD:DP:GL:GQ	0/1:178,470:421:-1122.99,-126.87,-458.77:99
-chr1	815061	.	C	T	1691.04	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=650;Dels=0.00;HRun=1;HaplotypeScore=315.98;MQ=33.65;MQ0=19;QD=2.60;SB=-738.44	GT:AD:DP:GL:GQ	0/1:537,113:421:-299.19,-126.80,-1266.58:99
-chr1	815070	rs61768257	T	C	12258.60	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=631;Dels=0.00;HRun=0;HaplotypeScore=343.15;MQ=33.97;MQ0=16;QD=19.43;SB=-5504.71	GT:AD:DP:GL:GQ	0/1:80,551:412:-1224.86,-124.09,-309.22:99
-chr1	815113	rs61768258	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=470;Dels=0.00;HRun=0;HaplotypeScore=109.35;MQ=33.63;MQ0=24;OQ=6584.76;QD=14.01;SB=-2185.39	GT:AD:DP:GL:GQ	0/1:114,356:254:-657.48,-76.51,-273.29:99
-chr1	815129	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=3;HaplotypeScore=48.33;MQ=33.58;MQ0=23;OQ=4485.00;QD=11.74;SB=-986.12	GT:AD:DP:GL:GQ	0/1:120,260:190:-447.50,-57.26,-260.95:99
-chr1	815155	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=321;Dels=0.00;HRun=2;HaplotypeScore=58.38;MQ=34.02;MQ0=21;OQ=1737.47;QD=5.41;SB=15.00	GT:AD:DP:GL:GQ	0/1:189,132:155:-223.72,-46.69,-361.30:99
-chr1	815170	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=270;Dels=0.00;HRun=0;HaplotypeScore=137.94;MQ=34.80;MQ0=19;OQ=2424.70;QD=8.98;SB=14.59	GT:AD:DP:GL:GQ	0/1:64,205:125:-283.44,-37.69,-171.56:99
-chr1	815209	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=4;HaplotypeScore=80.30;MQ=38.66;MQ0=0;OQ=2224.65;QD=10.44;SB=11.50	GT:AD:DP:GL:GQ	0/1:67,146:136:-266.72,-40.97,-258.01:99
-chr1	815222	.	C	G	180.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=2;HaplotypeScore=142.18;MQ=38.40;MQ0=0;QD=0.81;SB=9.29	GT:AD:DP:GL:GQ	0/1:186,36:136:-62.35,-41.04,-500.13:99
-chr1	815223	.	G	T	2117.77	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=129.82;MQ=38.70;MQ0=0;QD=9.80;SB=21.09	GT:AD:DP:GL:GQ	0/1:67,149:140:-257.24,-42.18,-220.42:99
-chr1	815225	.	C	A	1105.29	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=2;HaplotypeScore=129.82;MQ=38.83;MQ0=0;QD=5.09;SB=62.22	GT:AD:DP:GL:GQ	0/1:119,82:139:-174.62,-60.81,-341.62:99
-chr1	815273	rs13303179	G	A	2565.92	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=228;Dels=0.03;HRun=0;HaplotypeScore=354.84;MQ=39.22;MQ0=2;QD=11.25;SB=-1159.78	GT:AD:DP:GL:GQ	0/1:137,80:90:-286.39,-26.51,-60.11:99
-chr1	815278	.	G	T	761.09	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=623.87;MQ=38.93;MQ0=0;QD=3.17;SB=80.36	GT:AD:DP:GL:GQ	0/1:181,48:118:-132.78,-53.39,-296.79:99
-chr1	815284	.	A	T	612.72	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=234;Dels=0.01;HRun=0;HaplotypeScore=131.40;MQ=39.54;MQ0=0;QD=2.62;SB=-4.85	GT:AD:DP:GL:GQ	0/1:70,108:89:-96.12,-31.56,-237.53:99
-chr1	815299	.	C	T	462.61	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=1;HaplotypeScore=228.02;MQ=37.95;MQ0=1;QD=1.71;SB=107.29	GT:AD:DP:GL:GQ	0/1:137,134:104:-80.88,-31.33,-296.80:99
-chr1	815300	.	A	G	825.50	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=0;HaplotypeScore=227.74;MQ=37.73;MQ0=1;QD=3.08;SB=104.37	GT:AD:DP:GL:GQ	0/1:110,156:125:-123.50,-37.66,-346.20:99
-chr1	815308	.	A	G	1233.06	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=0;HaplotypeScore=419.76;MQ=37.40;MQ0=1;QD=4.67;SB=68.40	GT:AD:DP:GL:GQ	0/1:127,137:154:-172.99,-46.40,-402.39:99
-chr1	815312	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=0;HaplotypeScore=183.65;MQ=36.17;MQ0=1;OQ=3931.91;QD=14.25;SB=-32.81	GT:AD:DP:GL:GQ	0/1:62,214:156:-392.19,-47.02,-185.37:99
-chr1	815328	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=297;Dels=0.00;HRun=0;HaplotypeScore=61.42;MQ=35.05;MQ0=1;OQ=1563.62;QD=5.26;SB=37.57	GT:AD:DP:GL:GQ	0/1:210,87:190:-216.89,-57.25,-456.11:99
-chr1	815333	.	A	G	262.79	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=239.02;MQ=35.16;MQ0=1;QD=0.88;SB=12.36	GT:AD:DP:GL:GQ	0/1:257,42:214:-94.06,-64.49,-716.97:99
-chr1	815339	.	G	A	1298.73	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=1;HaplotypeScore=174.26;MQ=34.74;MQ0=1;QD=4.57;SB=28.57	GT:AD:DP:GL:GQ	0/1:213,70:192:-191.01,-57.85,-488.27:99
-chr1	815340	.	C	A	157.45	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=166.11;MQ=34.52;MQ0=1;QD=0.56;SB=56.17	GT:AD:DP:GL:GQ	0/1:238,39:195:-77.77,-58.74,-595.87:99
-chr1	815347	.	C	T	431.68	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=149.67;MQ=34.21;MQ0=1;QD=1.59;SB=13.61	GT:AD:DP:GL:GQ	0/1:219,52:183:-101.60,-55.14,-567.56:99
-chr1	815356	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=134.05;MQ=33.48;MQ0=1;OQ=648.64;QD=2.30;SB=53.15	GT:AD:DP:GL:GQ	0/1:240,42:173:-120.28,-52.13,-519.88:99
-chr1	815363	.	G	A	778.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=288;Dels=0.00;HRun=0;HaplotypeScore=145.91;MQ=33.47;MQ0=1;QD=2.70;SB=9.52	GT:AD:DP:GL:GQ	0/1:221,66:188:-137.76,-56.63,-540.20:99
-chr1	815371	.	T	A	4591.13	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=258.43;MQ=32.98;MQ0=1;QD=16.70;SB=38.12	GT:AD:DP:GL:GQ	0/1:49,226:171:-458.11,-51.51,-170.42:99
-chr1	815373	.	A	T	533.41	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=2;HaplotypeScore=261.79;MQ=33.03;MQ0=1;QD=1.87;SB=35.14	GT:AD:DP:GL:GQ	0/1:246,39:154:-103.02,-46.39,-455.31:99
-chr1	815376	.	C	A	1170.34	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=127.10;MQ=33.82;MQ0=1;QD=4.15;SB=38.15	GT:AD:DP:GL:GQ	0/1:188,94:146:-164.30,-43.98,-347.79:99
-chr1	815381	.	G	A	252.28	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=149.34;MQ=33.65;MQ0=1;QD=0.84;SB=44.17	GT:AD:DP:GL:GQ	0/1:261,37:167:-78.82,-50.30,-512.70:99
-chr1	815393	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=2;HaplotypeScore=32.62;MQ=34.43;MQ0=1;OQ=361.63;QD=1.32;SB=59.23	GT:AD:DP:GL:GQ	0/1:214,61:130:-78.62,-39.18,-425.44:99
-chr1	815401	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=139.53;MQ=35.48;MQ0=0;OQ=534.52;QD=2.04;SB=65.23	GT:AD:DP:GL:GQ	0/1:204,58:105:-88.37,-31.63,-309.51:99
-chr1	815405	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=256;Dels=0.00;HRun=0;HaplotypeScore=139.38;MQ=35.34;MQ0=0;OQ=1047.66;QD=4.09;SB=65.23	GT:AD:DP:GL:GQ	0/1:61,195:95:-136.67,-28.62,-215.61:99
-chr1	815412	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=1;HaplotypeScore=225.15;MQ=36.20;MQ0=0;OQ=276.35;QD=1.22;SB=65.25	GT:AD:DP:GL:GQ	0/1:61,166:74:-53.21,-22.29,-232.02:99
-chr1	815417	rs4970337	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=202;Dels=0.00;HRun=1;HaplotypeScore=585.49;MQ=36.06;MQ0=0;OQ=1433.41;QD=7.10;SB=-630.86	GT:AD:DP:GL:GQ	1/1:20,53:52:-158.74,-15.68,-11.81:38.71
-chr1	815425	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=313.15;MQ=35.48;MQ0=0;OQ=58.46;QD=0.32;SB=65.13	GT:AD:DP:GL:GQ	0/1:47,51:54:-25.40,-16.27,-162.78:91.30
-chr1	815458	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=13.84;MQ=40.96;MQ0=1;OQ=53.27;QD=0.51;SB=62.22	GT:AD:DP:GL:GQ	0/1:68,36:55:-25.19,-16.58,-184.48:86.11
-chr1	815470	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=23.44;MQ=43.10;MQ0=1;OQ=126.81;QD=1.44;SB=62.23	GT:AD:DP:GL:GQ	0/1:44,44:50:-31.03,-15.06,-165.46:99
-chr1	815557	.	T	C	22.78	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=22.31;MQ=51.18;MQ0=1;QD=0.27;SB=2.47	GT:AD:DP:GL:GQ	0/1:71,13:68:-26.06,-20.50,-237.08:55.60
-chr1	815639	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=2;HaplotypeScore=38.60;MQ=52.07;MQ0=2;OQ=197.56;QD=2.27;SB=80.29	GT:AD:DP:GL:GQ	0/1:75,12:73:-45.07,-22.03,-247.37:99
-chr1	815714	rs4549984	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=282;Dels=0.00;HRun=0;HaplotypeScore=45.55;MQ=35.23;MQ0=6;OQ=3065.05;QD=10.87;SB=-490.50	GT:AD:DP:GL:GQ	0/1:131,151:198:-369.43,-59.64,-380.00:99
-chr1	815740	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=1;HaplotypeScore=91.19;MQ=33.31;MQ0=8;OQ=203.81;QD=0.53;SB=46.30	GT:AD:DP:GL:GQ	0/1:351,35:273:-111.13,-87.46,-857.56:99
-chr1	815759	.	A	T	981.66	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=425;Dels=0.00;HRun=0;HaplotypeScore=319.89;MQ=33.30;MQ0=16;QD=2.31;SB=-282.31	GT:AD:DP:GL:GQ	0/1:309,70:292:-258.47,-157.02,-944.68:99
-chr1	815760	.	C	A	1978.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=424;Dels=0.00;HRun=3;HaplotypeScore=319.89;MQ=33.21;MQ0=16;QD=4.67;SB=-361.60	GT:AD:DP:GL:GQ	0/1:311,113:290:-288.45,-87.35,-755.50:99
-chr1	815761	.	C	A	1757.71	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=422;Dels=0.00;HRun=1;HaplotypeScore=319.47;MQ=33.03;MQ0=16;QD=4.17;SB=-393.48	GT:AD:DP:GL:GQ	0/1:295,112:286:-275.36,-96.30,-763.46:99
-chr1	815762	.	A	G	1602.96	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=423;Dels=0.00;HRun=0;HaplotypeScore=319.57;MQ=33.04;MQ0=16;QD=3.79;SB=-325.52	GT:AD:DP:GL:GQ	0/1:273,113:288:-310.25,-146.67,-857.16:99
-chr1	815765	.	G	A	2936.95	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=427;Dels=0.00;HRun=3;HaplotypeScore=320.41;MQ=33.17;MQ0=17;QD=6.88;SB=-566.97	GT:AD:DP:GL:GQ	0/1:277,150:291:-384.73,-87.75,-614.82:99
-chr1	815777	.	C	T	24.19	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=434;Dels=0.00;HRun=0;HaplotypeScore=73.54;MQ=32.97;MQ0=17;QD=0.06;SB=99.73	GT:AD:DP:GL:GQ	0/1:393,41:292:-93.65,-87.95,-958.63:57.01
-chr1	815780	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=1;HaplotypeScore=75.21;MQ=32.79;MQ0=17;OQ=115.11;QD=0.27;SB=79.01	GT:AD:DP:GL:GQ	0/1:399,33:289:-101.84,-87.05,-1076.94:99
-chr1	815810	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=3;HaplotypeScore=40.23;MQ=35.68;MQ0=17;OQ=207.08;QD=0.78;SB=-57.21	GT:AD:DP:GL:GQ	0/1:229,35:180:-78.22,-54.22,-636.76:99
-chr1	815845	.	C	G	0.13	PASS	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=5.72;MQ=49.45;MQ0=9;OQ=487.79;QD=4.69;SB=-262.79	GT:AD:DP:GL:GQ	0/1:68,36:85:-77.68,-25.61,-285.79:99
-chr1	815857	.	T	A	21.33	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=5.01;MQ=54.04;MQ0=5;QD=0.23;SB=16.48	GT:AD:DP:GL:GQ	0/1:77,14:82:-30.11,-24.70,-281.02:54.14
-chr1	815931	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=2;HaplotypeScore=25.80;MQ=41.76;MQ0=34;OQ=413.34;QD=2.70;SB=-90.95	GT:AD:DP:GL:GQ	0/1:89,64:100:-74.74,-30.13,-291.31:99
-chr1	815936	.	T	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=41.51;MQ0=35;OQ=307.08;QD=1.93;SB=-87.61	GT:AD:DP:GL:GQ	0/1:91,68:101:-64.41,-30.42,-308.26:99
-chr1	815949	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=25.06;MQ=39.71;MQ0=34;OQ=456.33;QD=2.82;SB=-102.31	GT:AD:DP:GL:GQ	0/1:134,28:100:-79.04,-30.12,-319.08:99
-chr1	815979	.	A	G	1177.05	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=1;HaplotypeScore=140.50;MQ=42.13;MQ0=3;QD=7.18;SB=-203.16	GT:AD:DP:GL:GQ	0/1:88,76:129:-159.86,-38.87,-326.00:99
-chr1	815980	.	T	C	32.10	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=144.97;MQ=42.03;MQ0=3;QD=0.19;SB=-40.00	GT:AD:DP:GL:GQ	0/1:145,23:122:-43.25,-36.76,-439.68:64.94
-chr1	815986	.	A	G	296.02	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=2;HaplotypeScore=92.41;MQ=40.86;MQ0=3;QD=1.64;SB=-47.33	GT:AD:DP:GL:GQ	0/1:153,28:121:-69.34,-36.45,-404.50:99
-chr1	816000	.	G	A	125.95	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=173;Dels=0.00;HRun=1;HaplotypeScore=82.29;MQ=39.25;MQ0=3;QD=0.73;SB=53.66	GT:AD:DP:GL:GQ	0/1:159,14:109:-48.71,-32.83,-348.18:99
-chr1	816001	.	G	A	216.96	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=0;HaplotypeScore=91.06;MQ=39.38;MQ0=3;QD=1.27;SB=50.65	GT:AD:DP:GL:GQ	0/1:127,38:117:-81.21,-56.23,-367.68:99
-chr1	816004	.	G	A	219.09	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=92.89;MQ=39.19;MQ0=0;QD=1.27;SB=56.64	GT:AD:DP:GL:GQ	0/1:125,47:119:-61.04,-35.85,-362.44:99
-chr1	816007	.	G	A	88.79	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=173;Dels=0.02;HRun=1;HaplotypeScore=88.30;MQ=38.80;MQ0=0;QD=0.51;SB=95.33	GT:AD:DP:GL:GQ	0/1:131,39:117:-47.40,-35.24,-375.36:99
-chr1	816018	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=1;HaplotypeScore=112.53;MQ=36.89;MQ0=0;OQ=274.62;QD=1.40;SB=-52.14	GT:AD:DP:GL:GQ	0/1:173,23:109:-63.59,-32.85,-401.41:99
-chr1	816026	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=509.63;MQ=37.96;MQ0=0;OQ=1247.86;QD=6.86;SB=56.18	GT:AD:DP:GL:GQ	0/1:108,73:128:-166.63,-38.56,-316.49:99
-chr1	816043	.	A	G	1178.79	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=0;HaplotypeScore=614.45;MQ=34.94;MQ0=1;QD=4.19;SB=56.21	GT:AD:DP:GL:GQ	0/1:198,83:191:-178.71,-57.55,-539.60:99
-chr1	816057	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=287;Dels=0.00;HRun=0;HaplotypeScore=198.13;MQ=34.34;MQ0=4;OQ=1603.81;QD=5.59;SB=62.23	GT:AD:DP:GL:GQ	0/1:144,109:196:-293.22,-129.56,-512.85:99
-chr1	816072	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=33.06;MQ=33.48;MQ0=15;OQ=115.32;QD=0.37;SB=71.18	GT:AD:DP:GL:GQ	0/1:282,15:160:-71.44,-56.63,-531.53:99
-chr1	816077	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=55.33;MQ=33.49;MQ0=15;OQ=4794.59;QD=16.04;SB=68.22	GT:AD:DP:GL:GQ	0/1:81,218:173:-478.46,-52.11,-201.39:99
-chr1	816088	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=1;HaplotypeScore=51.57;MQ=34.30;MQ0=16;OQ=4463.53;QD=16.06;SB=62.23	GT:AD:DP:GL:GQ	0/1:58,220:169:-445.35,-50.90,-214.04:99
-chr1	816103	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=0;HaplotypeScore=38.99;MQ=36.26;MQ0=16;OQ=1889.47;QD=7.97;SB=68.20	GT:AD:DP:GL:GQ	0/1:61,152:117:-237.42,-45.19,-199.18:99
-chr1	816115	.	C	T	1441.66	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=145.73;MQ=37.27;MQ0=15;QD=7.14;SB=68.18	GT:AD:DP:GL:GQ	0/1:132,70:112:-181.22,-33.77,-214.53:99
-chr1	816118	.	A	T	125.43	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=0;HaplotypeScore=164.12;MQ=38.34;MQ0=15;QD=0.66;SB=77.28	GT:AD:DP:GL:GQ	0/1:145,37:109:-58.41,-42.58,-369.08:99
-chr1	816122	.	G	C	132.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=159.96;MQ=38.91;MQ0=15;QD=0.73;SB=80.30	GT:AD:DP:GL:GQ	0/1:155,27:96:-45.43,-28.94,-364.83:99
-chr1	816123	.	A	G	766.79	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=157.96;MQ=38.91;MQ0=14;QD=4.28;SB=80.30	GT:AD:DP:GL:GQ	0/1:86,89:106:-121.93,-41.97,-306.67:99
-chr1	816140	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=2;HaplotypeScore=35.96;MQ=45.77;MQ0=9;OQ=496.37;QD=3.82;SB=92.32	GT:AD:DP:GL:GQ	0/1:81,49:95:-81.53,-28.61,-273.48:99
-chr1	817130	rs2879698	C	T	1.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=52.69;MQ0=4;OQ=2390.21;QD=32.30;SB=-1172.34	GT:AD:DP:GL:GQ	1/1:5,69:61:-242.62,-18.38,-0.02:99
-chr1	817140	rs4246498	T	C	134.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=52.12;MQ0=4;OQ=2043.04;QD=29.61;SB=-1026.82	GT:AD:DP:GL:GQ	1/1:0,69:59:-207.91,-17.78,-0.03:99
-chr1	817186	rs4970386	C	T	31.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.56;MQ=51.33;MQ0=3;OQ=2194.13;QD=35.39;SB=-970.28	GT:AD:DP:GL:GQ	1/1:3,59:55:-223.01,-16.57,-0.01:99
-chr1	819196	rs9778019	G	A	567.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.32;MQ0=0;OQ=1941.14;QD=39.62;SB=-968.30	GT:AD:DP:GL:GQ	1/1:0,49:49:-197.71,-14.76,-0.01:99
-chr1	819500	rs4437820	C	T	68.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=47.44;MQ0=2;OQ=2599.35;QD=37.13;SB=-1006.03	GT:AD:DP:GL:GQ	1/1:0,70:64:-263.53,-19.28,-0.01:99
-chr1	819787	.	G	A	25.28	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=51.75;MQ0=1;QD=0.29;SB=104.31	GT:AD:DP:GL:GQ	0/1:80,8:75:-28.42,-22.61,-220.79:58.10
-chr1	820044	rs28444699	A	G	2.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.59;MQ=55.18;MQ0=2;OQ=1994.05;QD=28.49;SB=-1022.00	GT:AD:DP:GL:GQ	1/1:9,61:60:-210.82,-18.07,-7.83:99
-chr1	820670	rs6422669	G	C	266.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=1;OQ=1743.26;QD=40.54;SB=-467.22	GT:AD:DP:GL:GQ	1/1:1,42:42:-177.93,-12.66,-0.02:99
-chr1	821139	rs4024798	C	T	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=239;Dels=0.00;HRun=1;HaplotypeScore=9.98;MQ=39.26;MQ0=24;OQ=434.25;QD=1.82;SB=23.91	GT:AD:DP:GL:GQ	0/1:189,50:167:-97.03,-50.32,-487.12:99
-chr1	821171	rs477080	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=308;Dels=0.00;HRun=0;HaplotypeScore=33.10;MQ=34.56;MQ0=43;OQ=282.37;QD=0.92;SB=137.47	GT:AD:DP:GL:GQ	0/1:233,75:190:-88.75,-57.23,-688.44:99
-chr1	821352	rs4970385	C	T	0.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=12.93;MQ=49.51;MQ0=5;OQ=2978.23;QD=32.02;SB=-1308.26	GT:AD:DP:GL:GQ	1/1:14,79:78:-308.32,-23.50,-6.91:99
-chr1	821772	rs9697642	C	T	1.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=6.48;MQ=53.07;MQ0=1;OQ=2639.96;QD=38.26;SB=-935.74	GT:AD:DP:GL:GQ	1/1:1,68:65:-267.59,-19.58,-0.01:99
-chr1	821923	rs9697378	G	A	628.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.85;MQ0=2;OQ=2615.06;QD=34.87;SB=-1164.40	GT:AD:DP:GL:GQ	1/1:9,66:67:-268.90,-20.18,-3.81:99
-chr1	821929	rs9697380	G	C	204.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=46.00;MQ0=2;OQ=2952.34;QD=37.85;SB=-1375.91	GT:AD:DP:GL:GQ	1/1:9,69:70:-303.53,-21.09,-4.71:99
-chr1	821975	rs9697725	T	C	60.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=42.31;MQ0=7;OQ=2446.13;QD=25.75;SB=-880.44	GT:AD:DP:GL:GQ	1/1:20,75:74:-256.35,-22.29,-8.15:99
-chr1	822041	rs13302934	A	G	54.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=37.41;MQ0=11;OQ=2291.03;QD=26.64;SB=-1047.92	GT:AD:DP:GL:GQ	1/1:17,69:67:-236.77,-20.18,-4.08:99
-chr1	822181	rs4500250	C	A	165.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.49;MQ0=0;OQ=2287.58;QD=33.15;SB=-1055.56	GT:AD:DP:GL:GQ	1/1:2,67:63:-232.36,-18.97,-0.02:99
-chr1	822261	rs4553118	T	C	105.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=53.16;MQ0=0;OQ=2074.16;QD=32.41;SB=-1031.91	GT:AD:DP:GL:GQ	1/1:0,64:58:-211.02,-17.47,-0.02:99
-chr1	827077	.	G	C	11.08	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1103.43;QD=20.06;SB=-557.74	GT:AD:DP:GL:GQ	0/1:23,32:50:-128.70,-15.07,-86.51:99
-chr1	832688	rs7519340	A	G	206.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.92;MQ0=0;OQ=2256.38;QD=34.19;SB=-897.99	GT:AD:DP:GL:GQ	1/1:0,66:64:-229.25,-19.28,-0.02:99
-chr1	833268	rs11516185	A	G	180.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.49;MQ=58.03;MQ0=0;OQ=720.81;QD=12.65;SB=-270.98	GT:AD:DP:GL:GQ	0/1:24,33:50:-90.45,-15.09,-82.68:99
-chr1	834163	rs61769713	C	G	7.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=34.66;MQ0=0;OQ=386.18;QD=32.18;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,12:11:-42.22,-3.32,-0.01:33.11
-chr1	834187	rs61769714	G	A	6.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=34.17;MQ0=0;OQ=258.44;QD=25.84;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:8:-29.44,-2.42,-0.01:24.06
-chr1	834206	rs61769715	A	G	21	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=32.88;MQ0=0;OQ=98.47;QD=14.07;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:4:-13.38,-1.21,-0.00:12.03
-chr1	834961	.	T	G	0.56	PASS	AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=16.23;MQ0=3;OQ=70.14;QD=6.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,10:3:-10.50,-0.90,-0.00:9.03
-chr1	835146	rs7366404	G	T	7.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=37.00;MQ0=0;OQ=260.28;QD=32.54;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:8:-29.61,-2.41,-0.00:24.08
-chr1	836201	rs4970334	A	G	56.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=57.95;MQ0=0;OQ=1280.53;QD=26.68;SB=-522.83	GT:AD:DP:GL:GQ	1/1:0,47:43:-131.69,-12.98,-0.05:99
-chr1	836352	rs4970333	T	C	54.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=58.58;MQ0=0;OQ=1607.31;QD=32.80;SB=-789.15	GT:AD:DP:GL:GQ	1/1:0,49:46:-164.33,-13.86,-0.02:99
-chr1	837113	rs7416129	G	A	502.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=3431.98;QD=39.91;SB=-1125.99	GT:AD:DP:GL:GQ	1/1:0,85:84:-342.20,-25.31,-0.02:99
-chr1	839861	rs13303222	A	G	170.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.09;MQ0=0;OQ=2748.15;QD=33.51;SB=-1203.79	GT:AD:DP:GL:GQ	1/1:0,81:78:-278.43,-23.50,-0.03:99
-chr1	840081	rs6664536	T	A	113.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.64;MQ0=0;OQ=1837.58;QD=35.34;SB=-814.88	GT:AD:DP:GL:GQ	1/1:0,52:50:-187.36,-15.06,-0.02:99
-chr1	840234	rs6679046	G	T	614.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.48;MQ0=0;OQ=2550.23;QD=33.56;SB=-1032.51	GT:AD:DP:GL:GQ	1/1:0,76:73:-258.64,-22.00,-0.04:99
-chr1	840643	rs6657440	C	T	589.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2334.22;QD=36.47;SB=-836.99	GT:AD:DP:GL:GQ	1/1:0,64:61:-237.03,-18.38,-0.02:99
-chr1	841253	.	G	T	87.70	PASS	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=59.70;MQ0=0;OQ=1174.44;QD=15.25;SB=-547.82	GT:AD:DP:GL:GQ	0/1:37,40:75:-143.32,-22.59,-125.03:99
-chr1	841362	rs4970465	A	G	15.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=60.00;MQ0=0;OQ=1972.18;QD=30.34;SB=-856.55	GT:AD:DP:GL:GQ	1/1:0,65:61:-200.85,-18.39,-0.05:99
-chr1	841500	.	G	C	11.73	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=3;HaplotypeScore=11.47;MQ=56.60;MQ0=0;QD=0.26;SB=59.23	GT:AD:DP:GL:GQ	0/1:36,10:33:-14.38,-9.96,-126.72:44.27
-chr1	841620	rs62677860	A	G	51.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=1201.63;QD=27.31;SB=-317.48	GT:AD:DP:GL:GQ	1/1:0,43:38:-123.78,-11.46,-0.03:99
-chr1	841900	rs4970463	G	A	437.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=1176.31;QD=36.76;SB=-508.18	GT:AD:DP:GL:GQ	1/1:0,32:31:-121.23,-9.34,-0.01:93.29
-chr1	841926	rs28436996	G	A	99.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=58.05;MQ0=0;OQ=1247.42;QD=34.65;SB=-580.28	GT:AD:DP:GL:GQ	1/1:0,35:33:-128.34,-9.94,-0.01:99
-chr1	841996	rs7518702	C	T	517.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1573.23;QD=37.46;SB=-692.34	GT:AD:DP:GL:GQ	1/1:0,41:40:-160.92,-12.05,-0.01:99
-chr1	842738	rs13303369	C	T	76.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=58.47;MQ0=0;OQ=2145.17;QD=36.99;SB=-908.72	GT:AD:DP:GL:GQ	1/1:0,58:57:-218.13,-17.18,-0.03:99
-chr1	842827	rs4970461	T	G	8.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.36;MQ=59.03;MQ0=0;OQ=1414.13;QD=29.46;SB=-684.25	GT:AD:DP:GL:GQ	1/1:0,48:47:-145.05,-14.17,-0.05:99
-chr1	843817	rs1806509	C	A	190.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.61;MQ0=0;OQ=1993.99;QD=33.80;SB=-878.64	GT:AD:DP:GL:GQ	1/1:0,59:57:-203.01,-17.17,-0.02:99
-chr1	844640	rs13303019	A	G	51.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.20;MQ0=0;OQ=644.86;QD=22.24;SB=-345.42	GT:AD:DP:GL:GQ	1/1:0,29:23:-68.11,-6.95,-0.04:69.10
-chr1	844841	rs13303057	A	C	5.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=58.36;MQ0=0;OQ=1059.33;QD=26.48;SB=-412.87	GT:AD:DP:GL:GQ	1/1:0,40:35:-109.55,-10.55,-0.04:99
-chr1	844938	rs6673914	C	G	24.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.27;MQ0=0;OQ=1048.92;QD=37.46;SB=-371.18	GT:AD:DP:GL:GQ	1/1:0,28:26:-108.49,-7.84,-0.02:78.26
-chr1	847591	rs6689107	T	G	181.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.19;MQ0=0;OQ=1848.72;QD=32.43;SB=-803.49	GT:AD:DP:GL:GQ	1/1:0,57:54:-188.48,-16.27,-0.02:99
-chr1	848664	rs7418179	A	G	160.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=1692.05;QD=34.53;SB=-783.00	GT:AD:DP:GL:GQ	1/1:0,49:48:-172.81,-14.46,-0.02:99
-chr1	850279	rs61464428	G	A	12.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.66;MQ0=0;OQ=337.99;QD=33.80;SB=-134.01	GT:AD:DP:GL:GQ	1/1:0,10:10:-37.39,-3.02,-0.01:30.09
-chr1	850324	rs57465118	G	A	8.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=54.65;MQ0=0;OQ=218.19;QD=24.24;SB=-48.67	GT:AD:DP:GL:GQ	1/1:0,9:7:-25.40,-2.11,-0.00:21.06
-chr1	850384	rs57924093	C	A	117.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.88;MQ0=0;OQ=151.15;QD=25.19;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:5:-18.67,-1.51,-0.00:15.05
-chr1	850551	rs60837925	G	A	175.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=188.60;QD=31.43;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:6:-22.43,-1.81,-0.00:18.06
-chr1	850660	.	G	T	32.80	LowQual	AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=65.19;MQ0=0;QD=16.40;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-6.69,-0.60,-0.00:6.02
-chr1	850717	rs57816555	T	C	168.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.96;MQ0=0;OQ=139.82;QD=27.96;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:5:-17.54,-1.51,-0.00:15.04
-chr1	850871	rs28521172	G	C	136.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=409.27;QD=34.11;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,12:11:-44.52,-3.32,-0.00:33.11
-chr1	851493	rs2879816	G	A	181.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=58.51;MQ0=0;OQ=1761.97;QD=35.24;SB=-837.99	GT:AD:DP:GL:GQ	1/1:0,50:46:-179.80,-13.86,-0.02:99
-chr1	851671	rs13302982	A	G	540.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.19;MQ0=0;OQ=1746.20;QD=30.64;SB=-800.68	GT:AD:DP:GL:GQ	1/1:0,57:56:-178.25,-16.89,-0.05:99
-chr1	851956	rs13303291	T	C	0.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=5;HaplotypeScore=0.79;MQ=59.54;MQ0=0;OQ=1647.69;QD=32.95;SB=-763.57	GT:AD:DP:GL:GQ	1/1:0,50:48:-168.38,-14.46,-0.02:99
-chr1	851987	rs13303101	A	G	75.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=58.42;MQ0=0;OQ=1718.71;QD=29.13;SB=-814.55	GT:AD:DP:GL:GQ	1/1:0,59:55:-175.51,-16.59,-0.06:99
-chr1	852246	rs6680268	C	T	87.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.89;MQ0=0;OQ=1535.86;QD=36.57;SB=-649.38	GT:AD:DP:GL:GQ	1/1:0,42:40:-157.19,-12.05,-0.02:99
-chr1	852252	rs6693546	A	G	8.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=57.97;MQ0=0;OQ=1460.23;QD=31.74;SB=-743.12	GT:AD:DP:GL:GQ	1/1:0,45:42:-149.63,-12.66,-0.02:99
-chr1	852729	rs3892970	C	T	119.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1397.63;QD=34.09;SB=-551.29	GT:AD:DP:GL:GQ	1/1:0,41:38:-143.37,-11.46,-0.02:99
-chr1	852987	rs4040604	G	T	33.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=59.28;MQ0=0;OQ=1900.46;QD=32.77;SB=-758.90	GT:AD:DP:GL:GQ	1/1:0,58:55:-193.66,-16.57,-0.02:99
-chr1	853374	rs28626846	T	C	176.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=56.72;MQ0=0;OQ=383.16;QD=9.12;SB=-198.44	GT:AD:DP:GL:GQ	0/1:24,18:39:-53.37,-11.77,-80.00:99
-chr1	853419	rs7410998	G	A	181.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.05;MQ0=1;OQ=787.22;QD=31.49;SB=-167.67	GT:AD:DP:GL:GQ	1/1:1,24:21:-82.31,-6.33,-0.01:63.20
-chr1	853425	rs7417972	A	C	3.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=51.24;MQ0=1;OQ=853.26;QD=25.86;SB=-413.26	GT:AD:DP:GL:GQ	1/1:1,32:29:-88.94,-8.74,-0.03:87.12
-chr1	853552	rs7417994	A	G	58.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=47.89;MQ0=0;OQ=1045.12;QD=27.50;SB=-347.41	GT:AD:DP:GL:GQ	1/1:0,38:34:-108.13,-10.26,-0.03:99
-chr1	854589	rs2340590	T	A	319.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.35;MQ0=0;OQ=1082.41;QD=34.92;SB=-267.73	GT:AD:DP:GL:GQ	1/1:0,31:30:-111.84,-9.04,-0.02:90.27
-chr1	854618	rs2340589	A	G	2.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1104.04;QD=28.31;SB=-284.44	GT:AD:DP:GL:GQ	1/1:0,39:37:-114.04,-11.17,-0.05:99
-chr1	854620	rs2340588	G	A	306.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1407.34;QD=36.09;SB=-288.88	GT:AD:DP:GL:GQ	1/1:0,39:36:-144.33,-10.85,-0.01:99
-chr1	854801	.	G	A	27.13	PASS	AC=2;AF=1.00;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.52;MQ0=0;OQ=1814.99;QD=37.81;SB=-848.99	GT:AD:DP:GL:GQ	1/1:0,48:46:-185.10,-13.86,-0.01:99
-chr1	856182	rs9988021	G	A	414.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1807.60;QD=37.66;SB=-511.65	GT:AD:DP:GL:GQ	1/1:0,48:47:-184.36,-14.16,-0.02:99
-chr1	856756	rs2880024	T	C	439.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.61;MQ0=0;OQ=1661.89;QD=33.92;SB=-660.32	GT:AD:DP:GL:GQ	1/1:0,49:47:-169.79,-14.16,-0.01:99
-chr1	856783	rs2341361	A	G	391.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1555.14;QD=34.56;SB=-535.20	GT:AD:DP:GL:GQ	1/1:0,45:44:-159.12,-13.26,-0.02:99
-chr1	857447	rs2341360	A	T	453.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1951.43;QD=37.53;SB=-755.79	GT:AD:DP:GL:GQ	1/1:0,51:51:-198.74,-15.36,-0.01:99
-chr1	858192	rs2341359	A	C	117.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=55.20;MQ0=0;OQ=1194.83;QD=30.64;SB=-603.64	GT:AD:DP:GL:GQ	1/1:0,39:36:-123.08,-10.85,-0.02:99
-chr1	858267	rs13302914	C	T	413.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.75;MQ0=0;OQ=1181.60;QD=33.76;SB=-589.79	GT:AD:DP:GL:GQ	1/1:0,35:32:-121.76,-9.65,-0.02:96.30
-chr1	858654	rs13303003	C	T	431.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=892.14;QD=35.69;SB=-459.35	GT:AD:DP:GL:GQ	1/1:1,24:23:-92.80,-6.93,-0.01:69.23
-chr1	858754	rs13303066	A	G	117.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.96;MQ0=0;OQ=1127.68;QD=32.22;SB=-537.22	GT:AD:DP:GL:GQ	1/1:0,35:32:-116.36,-9.64,-0.01:96.29
-chr1	858844	rs13303037	C	T	239.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.36;MQ0=0;OQ=920.18;QD=35.39;SB=-178.71	GT:AD:DP:GL:GQ	1/1:0,26:25:-95.62,-7.54,-0.02:75.23
-chr1	859186	rs13303207	T	C	5.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=1.75;MQ=49.46;MQ0=0;OQ=860.62;QD=31.87;SB=-321.13	GT:AD:DP:GL:GQ	1/1:0,27:25:-89.66,-7.53,-0.01:75.22
-chr1	859220	.	G	T	15.33	LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=44.47;MQ0=0;QD=0.73;SB=-4.00	GT:AD:DP:GL:GQ	0/1:18,3:16:-9.63,-4.82,-45.13:48.04
-chr1	859232	rs13303328	G	T	26.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=42.12;MQ0=0;OQ=238.10;QD=15.87;SB=-41.94	GT:AD:DP:GL:GQ	0/1:4,11:12:-30.71,-3.62,-8.58:49.58
-chr1	859236	rs13303330	G	C	2.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=42.12;MQ0=0;OQ=289.97;QD=19.33;SB=-45.46	GT:AD:DP:GL:GQ	0/1:4,11:11:-35.60,-3.32,-10.54:72.26
-chr1	859264	rs13303353	G	C	17.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=37.87;MQ0=1;OQ=164.66;QD=13.72;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,7:8:-22.16,-2.41,-12.54:99
-chr1	859992	.	G	C	97.38	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.96;MQ0=0;OQ=93.52;QD=10.39;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:3:-12.84,-0.90,-0.00:9.03
-chr1	860032	.	G	T	37.54	PASS	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.43;MQ0=0;OQ=70.96;QD=5.46;SB=-10.00	GT:AD:DP:GL:GQ	1/1:8,5:3:-10.58,-0.90,-0.00:9.03
-chr1	860180	rs28451560	G	A	12.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=73.11;QD=18.28;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,3:3:-10.80,-0.90,-0.00:9.03
-chr1	860766	rs13303094	T	C	16.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.17;MQ0=0;OQ=826.94;QD=29.53;SB=-125.69	GT:AD:DP:GL:GQ	1/1:0,28:25:-86.29,-7.54,-0.02:75.20
-chr1	861197	rs4072383	G	T	400.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.63;MQ0=0;OQ=731.30;QD=30.47;SB=-355.85	GT:AD:DP:GL:GQ	1/1:0,24:22:-76.73,-6.63,-0.01:66.18
-chr1	861546	rs4504834	G	A	1.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.70;MQ0=0;OQ=257.15;QD=25.71;SB=-133.67	GT:AD:DP:GL:GQ	1/1:0,10:8:-29.30,-2.41,-0.01:24.07
-chr1	863421	rs1110052	G	T	380.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1308.42;QD=32.71;SB=-530.08	GT:AD:DP:GL:GQ	1/1:0,40:39:-134.45,-11.76,-0.03:99
-chr1	865499	.	C	T	29.46	LowQual	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;QD=4.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,2:5:-7.74,-1.51,-8.99:62.30
-chr1	865506	rs7411115	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=55.21;MQ0=0;OQ=112.00;QD=22.40;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,4:5:-15.99,-1.51,-3.39:18.84
-chr1	866063	.	G	C	0.28	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=689.42;QD=21.54;SB=-257.43	GT:AD:DP:GL:GQ	0/1:12,20:31:-81.58,-9.35,-46.59:99
-chr1	866362	rs4372192	A	G	0.01	FDRtranche2.00to10.00	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=6;HaplotypeScore=0.89;MQ=56.86;MQ0=0;OQ=933.15;QD=29.16;SB=-432.49	GT:AD:DP:GL:GQ	1/1:0,31:29:-96.92,-8.74,-0.02:87.21
-chr1	867578	rs6605066	C	G	7.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=93.52;QD=31.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:3:-12.84,-0.90,-0.00:9.03
-chr1	867694	rs6672356	T	C	3.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=52.96;QD=17.65;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:3:-8.79,-0.91,-0.01:9.01
-chr1	868792	.	G	C	15.78	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.02;HRun=2;HaplotypeScore=22.45;MQ=51.57;MQ0=2;QD=0.38;SB=59.22	GT:AD:DP:GL:GQ	0/1:36,4:34:-14.81,-9.96,-119.24:48.50
-chr1	869539	rs6605067	G	A	19.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.58;MQ=56.16;MQ0=0;OQ=2221.47;QD=39.67;SB=-1054.70	GT:AD:DP:GL:GQ	1/1:0,56:55:-225.74,-16.57,-0.01:99
-chr1	869550	rs2839	T	C	133.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=56.64;MQ0=0;OQ=2001.68;QD=34.51;SB=-1024.77	GT:AD:DP:GL:GQ	1/1:0,58:57:-203.78,-17.17,-0.02:99
-chr1	870101	rs3748592	A	G	495.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=1890.23;QD=34.37;SB=-862.36	GT:AD:DP:GL:GQ	1/1:0,55:54:-192.63,-16.27,-0.02:99
-chr1	871490	rs2272757	G	A	6.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.19;MQ=57.04;MQ0=0;OQ=1394.54;QD=37.69;SB=-510.64	GT:AD:DP:GL:GQ	1/1:0,37:36:-143.05,-10.85,-0.01:99
-chr1	872666	rs2340582	A	G	42.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.34;MQ=59.14;MQ0=0;OQ=1872.55;QD=34.68;SB=-917.03	GT:AD:DP:GL:GQ	1/1:0,54:54:-190.86,-16.27,-0.02:99
-chr1	873488	rs4970378	A	G	248.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1449.35;QD=35.35;SB=-732.23	GT:AD:DP:GL:GQ	1/1:0,41:41:-148.53,-12.35,-0.01:99
-chr1	873762	.	T	G	3.38	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=57.58;MQ0=0;OQ=623.05;QD=12.98;SB=-319.82	GT:AD:DP:GL:GQ	0/1:24,24:47:-79.75,-14.16,-84.17:99
-chr1	873892	.	A	C	58.62	SnpCluster	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=2.09;SB=-41.91	GT:AD:DP:GL:GQ	0/1:23,5:28:-17.58,-8.43,-82.84:91.46
-chr1	873894	.	C	T	82.90	SnpCluster	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=2.96;SB=-56.23	GT:AD:DP:GL:GQ	0/1:23,5:28:-20.01,-8.43,-84.10:99
-chr1	873895	.	C	T	48.24	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.20;MQ0=0;QD=1.56;SB=-25.58	GT:AD:DP:GL:GQ	0/1:26,5:28:-16.54,-8.43,-88.26:81.07
-chr1	873901	.	T	G	115.57	SnpCluster	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.52;MQ0=0;QD=3.50;SB=-81.81	GT:AD:DP:GL:GQ	0/1:26,7:33:-24.78,-9.94,-99.02:99
-chr1	873954	rs7522415	C	G	8.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=43.40;MQ0=0;OQ=1100.42;QD=22.93;SB=-415.98	GT:AD:DP:GL:GQ	0/1:16,32:45:-126.89,-13.56,-66.90:99
-chr1	873964	rs4970455	A	C	1.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=2.44;MQ=43.46;MQ0=0;OQ=358.55;QD=6.77;SB=-63.88	GT:AD:DP:GL:GQ	0/1:38,15:50:-54.21,-15.07,-122.51:99
-chr1	874630	.	G	A	13.69	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=47.61;MQ0=0;OQ=1000.31;QD=21.75;SB=-485.51	GT:AD:DP:GL:GQ	0/1:17,29:46:-117.17,-13.86,-57.54:99
-chr1	874678	rs4246503	A	G	158.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=55.11;MQ0=0;OQ=1771.59;QD=30.03;SB=-814.69	GT:AD:DP:GL:GQ	1/1:0,59:55:-180.79,-16.58,-0.04:99
-chr1	875539	rs4970377	C	A	535.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.40;MQ0=0;OQ=2636.42;QD=36.12;SB=-1177.36	GT:AD:DP:GL:GQ	1/1:1,72:71:-267.24,-21.38,-0.02:99
-chr1	875552	rs4970452	G	A	0.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=56.01;MQ0=0;OQ=2730.82;QD=37.93;SB=-1364.34	GT:AD:DP:GL:GQ	1/1:1,71:70:-276.69,-21.09,-0.03:99
-chr1	875562	rs4970376	A	G	1.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=9.96;MQ=55.41;MQ0=0;OQ=2063.84;QD=30.35;SB=-1045.24	GT:AD:DP:GL:GQ	1/1:1,67:64:-210.02,-19.30,-0.05:99
-chr1	875869	rs4970375	T	C	458.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.16;MQ0=0;OQ=1904.11;QD=35.26;SB=-492.54	GT:AD:DP:GL:GQ	1/1:0,54:53:-194.01,-15.96,-0.01:99
-chr1	876651	rs10465242	G	A	37.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=58.78;MQ0=0;OQ=1853.33;QD=37.07;SB=-743.49	GT:AD:DP:GL:GQ	1/1:0,50:47:-188.93,-14.16,-0.01:99
-chr1	876680	rs10465241	C	T	139.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1420.84;QD=37.39;SB=-598.99	GT:AD:DP:GL:GQ	1/1:0,38:38:-145.68,-11.45,-0.02:99
-chr1	877423	rs3748595	A	C	60.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.73;MQ0=0;OQ=1913.10;QD=31.88;SB=-946.06	GT:AD:DP:GL:GQ	1/1:0,60:56:-194.92,-16.87,-0.02:99
-chr1	877664	rs3828047	A	G	27.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.38;MQ0=0;OQ=1254.26;QD=33.90;SB=-513.49	GT:AD:DP:GL:GQ	1/1:0,37:36:-129.02,-10.84,-0.01:99
-chr1	878502	rs3748596	T	C	69.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=55.26;MQ0=0;OQ=1390.46;QD=33.11;SB=-577.30	GT:AD:DP:GL:GQ	1/1:0,42:41:-142.65,-12.35,-0.02:99
-chr1	878522	rs3748597	T	C	420.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.43;MQ0=0;OQ=1101.61;QD=31.47;SB=-433.56	GT:AD:DP:GL:GQ	1/1:0,35:33:-113.76,-9.94,-0.02:99
-chr1	879021	rs56262069	G	C	15.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1649.51;QD=39.27;SB=-490.55	GT:AD:DP:GL:GQ	1/1:0,42:39:-168.56,-11.76,-0.02:99
-chr1	879022	rs13302945	A	C	102.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1299.59;QD=30.94;SB=-461.34	GT:AD:DP:GL:GQ	1/1:0,42:39:-133.56,-11.75,-0.02:99
-chr1	879501	rs13303206	G	C	38.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.78;MQ0=0;OQ=1536.75;QD=40.44;SB=-636.90	GT:AD:DP:GL:GQ	1/1:0,38:37:-157.27,-11.15,-0.01:99
-chr1	879576	rs13303051	C	A	192.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=59.05;MQ0=0;OQ=1663.22;QD=33.94;SB=-850.81	GT:AD:DP:GL:GQ	1/1:1,48:46:-169.92,-13.85,-0.01:99
-chr1	880884	rs13302957	G	A	138.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=59.32;MQ0=0;OQ=2228.59;QD=40.52;SB=-1097.37	GT:AD:DP:GL:GQ	1/1:0,55:55:-226.45,-16.57,-0.01:99
-chr1	880922	rs13303065	C	T	237.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2022.89;QD=39.66;SB=-914.68	GT:AD:DP:GL:GQ	1/1:0,51:51:-205.89,-15.36,-0.01:99
-chr1	881808	rs13303106	A	G	3.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=59.21;MQ0=0;OQ=1343.98;QD=25.36;SB=-644.88	GT:AD:DP:GL:GQ	1/1:0,53:43:-138.03,-12.97,-0.04:99
-chr1	882608	rs13303227	G	A	569.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2091.00;QD=38.72;SB=-899.68	GT:AD:DP:GL:GQ	1/1:0,54:53:-212.70,-15.97,-0.01:99
-chr1	883143	rs4970371	G	A	143.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=57.73;MQ0=0;OQ=2249.45;QD=37.49;SB=-940.26	GT:AD:DP:GL:GQ	1/1:0,60:57:-228.55,-17.17,-0.02:99
-chr1	883494	rs6605069	A	G	58.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=58.62;MQ0=0;OQ=2094.43;QD=32.73;SB=-870.68	GT:AD:DP:GL:GQ	1/1:0,64:60:-213.05,-18.07,-0.02:99
-chr1	883582	rs4970445	G	A	189.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.14;MQ0=0;OQ=1807.99;QD=33.48;SB=-798.52	GT:AD:DP:GL:GQ	1/1:1,53:49:-184.42,-14.78,-0.04:99
-chr1	884436	rs13303010	G	A	1.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=58.63;MQ0=0;OQ=585.11;QD=34.42;SB=-52.67	GT:AD:DP:GL:GQ	1/1:0,17:16:-62.10,-4.82,-0.01:48.15
-chr1	885569	rs13303327	G	A	161.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=61.07;MQ0=0;OQ=743.89;QD=37.19;SB=-245.00	GT:AD:DP:GL:GQ	1/1:0,20:20:-77.98,-6.03,-0.01:60.19
-chr1	887188	rs4970441	G	C	2.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=753.54;QD=39.66;SB=-289.25	GT:AD:DP:GL:GQ	1/1:0,19:18:-78.95,-5.42,-0.01:54.18
-chr1	887427	rs13303229	T	C	257.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1210.82;QD=33.63;SB=-286.61	GT:AD:DP:GL:GQ	1/1:0,36:36:-124.69,-10.85,-0.02:99
-chr1	888186	rs6605071	T	C	17.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.35;MQ=58.67;MQ0=0;OQ=1185.73;QD=33.88;SB=-618.22	GT:AD:DP:GL:GQ	1/1:0,35:34:-122.17,-10.24,-0.01:99
-chr1	889791	rs6677386	G	C	245.35	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=39.71;MQ0=0;QD=16.36;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:8:-28.14,-2.43,-0.02:24.07
-chr1	889800	.	G	T	344.36	SnpCluster	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.12;MQ0=0;QD=28.70;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,12:11:-38.03,-3.31,-0.01:33.08
-chr1	889801	.	G	C	465.29	SnpCluster	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=39.12;MQ0=0;QD=38.77;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,12:11:-50.12,-3.31,-0.00:33.11
-chr1	889805	.	G	A	501.88	SnpCluster	AC=2;AF=1.00;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.71;MQ0=0;QD=33.46;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:14:-53.78,-4.22,-0.01:42.13
-chr1	889852	rs6669071	A	C	11.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=44.10;MQ0=0;OQ=318.72;QD=26.56;SB=-44.57	GT:AD:DP:GL:GQ	1/1:0,12:11:-35.46,-3.31,-0.01:33.07
-chr1	889864	rs28754834	G	A	283.84	Indel	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=44.79;MQ0=0;QD=31.54;SB=-93.34	GT:AD:DP:GL:GQ	1/1:0,9:8:-31.97,-2.41,-0.00:24.08
-chr1	889872	rs6704181	C	G	264.94	Indel	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=42.50;MQ0=0;QD=33.12;SB=-56.93	GT:AD:DP:GL:GQ	1/1:0,8:7:-30.07,-2.11,-0.00:21.07
-chr1	890148	rs4970435	C	T	1.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=54.37;MQ0=0;OQ=1059.65;QD=35.32;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,29:28:-109.56,-8.43,-0.01:84.27
-chr1	890149	rs4970434	A	G	1.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=54.37;MQ0=0;OQ=1048.98;QD=34.97;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,30:29:-108.49,-8.74,-0.01:87.27
-chr1	890161	.	C	G	0.39	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=54.80;MQ0=0;OQ=464.33;QD=12.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,21:31:-59.09,-9.37,-60.44:99
-chr1	890593	rs3935066	G	A	1827.67	Indel	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.80;MQ0=0;QD=38.08;SB=-380.50	GT:AD:DP:GL:GQ	1/1:0,48:46:-186.37,-13.86,-0.02:99
-chr1	890835	rs9697711	T	G	5.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=57.77;MQ0=0;OQ=1087.73;QD=27.19;SB=-563.56	GT:AD:DP:GL:GQ	1/1:0,40:34:-112.38,-10.25,-0.03:99
-chr1	890886	rs13303351	T	C	4.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=56.17;MQ0=0;OQ=1868.96;QD=27.89;SB=-762.95	GT:AD:DP:GL:GQ	1/1:0,67:61:-190.56,-18.41,-0.08:99
-chr1	891422	rs13303160	G	A	335.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1009.81;QD=38.84;SB=-456.35	GT:AD:DP:GL:GQ	1/1:0,26:26:-104.57,-7.83,-0.01:78.26
-chr1	891470	rs13302996	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1288.09;QD=33.03;SB=-383.20	GT:AD:DP:GL:GQ	1/1:0,39:34:-132.43,-10.27,-0.04:99
-chr1	891515	rs2879814	A	G	4.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.80;MQ=59.05;MQ0=0;OQ=1360.05;QD=30.91;SB=-420.15	GT:AD:DP:GL:GQ	1/1:0,44:40:-139.61,-12.06,-0.03:99
-chr1	892627	rs28416780	C	G	985.40	Indel	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.73;MQ=60.94;MQ0=0;QD=29.86;SB=-516.60	GT:AD:DP:GL:GQ	1/1:0,33:26:-102.16,-7.86,-0.03:78.25
-chr1	892860	rs7524174	G	A	607.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2039.21;QD=35.78;SB=-884.69	GT:AD:DP:GL:GQ	1/1:0,57:52:-207.52,-15.67,-0.02:99
-chr1	893108	rs28690976	A	G	19.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.50;MQ0=0;OQ=1221.87;QD=33.02;SB=-508.55	GT:AD:DP:GL:GQ	1/1:0,37:34:-125.78,-10.24,-0.01:99
-chr1	893184	rs6669800	G	A	536.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1821.94;QD=35.04;SB=-645.66	GT:AD:DP:GL:GQ	1/1:0,52:47:-185.80,-14.16,-0.02:99
-chr1	895023	rs7555426	C	T	0.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.03;HRun=0;HaplotypeScore=12.36;MQ=55.36;MQ0=0;OQ=2346.52;QD=37.25;SB=-860.64	GT:AD:DP:GL:GQ	1/1:0,60:62:-238.26,-18.08,-0.02:99
-chr1	895028	rs7522959	A	G	167.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=55.43;MQ0=0;OQ=2120.68;QD=33.14;SB=-824.97	GT:AD:DP:GL:GQ	1/1:0,63:62:-215.68,-18.68,-0.03:99
-chr1	899282	rs28548431	C	T	198.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.43;MQ0=0;OQ=508.80;QD=15.42;SB=-237.75	GT:AD:DP:GL:GQ	0/1:15,18:31:-63.51,-9.35,-46.57:99
-chr1	899418	rs2340594	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1231.29;QD=30.03;SB=-602.23	GT:AD:DP:GL:GQ	1/1:0,41:40:-126.75,-12.06,-0.03:99
-chr1	899631	rs2340593	A	G	106.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1110.83;QD=35.83;SB=-387.48	GT:AD:DP:GL:GQ	1/1:0,31:31:-114.68,-9.34,-0.01:93.28
-chr1	900257	rs28477686	C	T	200.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=716.99;QD=16.30;SB=-337.87	GT:AD:DP:GL:GQ	0/1:20,24:40:-87.03,-12.05,-62.41:99
-chr1	900301	rs6685581	A	G	61.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.90;MQ0=0;OQ=1025.59;QD=26.99;SB=-469.48	GT:AD:DP:GL:GQ	1/1:0,38:34:-106.18,-10.26,-0.04:99
-chr1	900766	rs4970429	T	C	21.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1255.50;QD=27.90;SB=-520.11	GT:AD:DP:GL:GQ	1/1:0,45:41:-129.18,-12.37,-0.04:99
-chr1	901458	rs7417106	A	G	62.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.69;MQ0=0;OQ=1131.68;QD=22.63;SB=-392.29	GT:AD:DP:GL:GQ	1/1:0,48:37:-116.79,-11.16,-0.04:99
-chr1	901912	rs9803103	T	C	68.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.16;MQ0=0;OQ=72.78;QD=4.85;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,5:15:-15.08,-4.52,-39.48:99
-chr1	901966	rs9803017	G	A	5.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=48.89;MQ0=0;OQ=164.19;QD=23.46;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,5:5:-19.98,-1.51,-0.00:15.05
-chr1	903262	.	C	T	47.02	LowQual	AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.12;MQ0=0;QD=23.51;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-8.11,-0.60,-0.00:6.02
-chr1	903752	rs2340596	G	A	213.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.63;MQ0=0;OQ=437.08;QD=12.86;SB=-239.73	GT:AD:DP:GL:GQ	0/1:19,15:34:-57.25,-10.26,-59.16:99
-chr1	904055	rs2340595	G	C	462.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1540.41;QD=36.68;SB=-743.79	GT:AD:DP:GL:GQ	1/1:0,42:38:-157.65,-11.46,-0.02:99
-chr1	904196	rs13302979	C	G	14.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=238.96;QD=11.95;SB=-110.33	GT:AD:DP:GL:GQ	0/1:12,8:19:-32.91,-5.73,-43.20:99
-chr1	904715	rs13303368	G	C	150.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=58.83;MQ0=0;OQ=429.52;QD=11.93;SB=-165.16	GT:AD:DP:GL:GQ	0/1:21,15:34:-56.48,-10.25,-87.94:99
-chr1	904739	rs13302983	T	C	1.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=59.49;MQ0=0;OQ=1146.65;QD=25.48;SB=-382.24	GT:AD:DP:GL:GQ	1/1:0,45:37:-118.29,-11.16,-0.04:99
-chr1	904803	rs13303033	T	C	97.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=59.44;MQ0=0;OQ=505.70;QD=12.33;SB=-138.55	GT:AD:DP:GL:GQ	0/1:20,21:40:-65.92,-12.07,-67.38:99
-chr1	905090	rs13303355	A	G	1.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=8.34;MQ=56.14;MQ0=0;OQ=1675.03;QD=29.39;SB=-822.95	GT:AD:DP:GL:GQ	1/1:1,56:50:-171.12,-15.07,-0.03:99
-chr1	906412	rs6660139	A	G	108.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=506.06;QD=14.88;SB=-146.57	GT:AD:DP:GL:GQ	0/1:14,20:33:-63.84,-9.95,-51.10:99
-chr1	906453	rs28566954	G	A	282.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=491.61;QD=13.66;SB=-253.24	GT:AD:DP:GL:GQ	0/1:20,16:35:-62.99,-10.55,-63.70:99
-chr1	906697	rs6694632	G	A	262.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.25;MQ0=0;OQ=424.41;QD=13.69;SB=-233.73	GT:AD:DP:GL:GQ	0/1:16,15:29:-54.46,-8.74,-53.31:99
-chr1	906923	rs6605058	C	G	4.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.45;MQ0=0;OQ=1718.51;QD=40.92;SB=-739.75	GT:AD:DP:GL:GQ	1/1:0,42:41:-175.45,-12.36,-0.02:99
-chr1	907503	rs41285816	G	A	149.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=650.11;QD=15.12;SB=-327.85	GT:AD:DP:GL:GQ	0/1:21,22:41:-80.65,-12.35,-76.53:99
-chr1	908101	rs28552711	C	G	269.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.03;MQ0=0;OQ=561.89;QD=11.71;SB=-234.09	GT:AD:DP:GL:GQ	0/1:27,21:45:-73.04,-13.57,-111.91:99
-chr1	908247	rs13303118	G	T	75.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.58;MQ0=0;OQ=378.28;QD=8.60;SB=-112.78	GT:AD:DP:GL:GQ	0/1:27,17:40:-53.17,-12.06,-75.89:99
-chr1	908436	rs2341354	A	G	288.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.09;MQ0=0;OQ=687.85;QD=13.49;SB=-217.36	GT:AD:DP:GL:GQ	0/1:22,29:47:-86.23,-14.17,-83.30:99
-chr1	908990	rs28469033	T	C	203.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=58.06;MQ0=0;OQ=712.75;QD=12.29;SB=-242.27	GT:AD:DP:GL:GQ	0/1:29,28:55:-91.13,-16.57,-114.97:99
-chr1	909282	rs6605059	T	C	230.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=181.71;QD=7.57;SB=-100.01	GT:AD:DP:GL:GQ	0/1:13,11:22:-28.09,-6.63,-51.27:99
-chr1	909352	rs61606412	C	T	41.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=53.76;MQ0=0;OQ=576.99;QD=16.03;SB=-77.09	GT:AD:DP:GL:GQ	0/1:16,19:32:-70.62,-9.64,-54.85:99
-chr1	909718	.	G	A	32.42	PASS	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=82.61;QD=6.35;SB=-28.51	GT:AD:DP:GL:GQ	0/1:9,4:13:-15.46,-3.92,-29.36:99
-chr1	909851	.	C	T	379.69	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=14.99;MQ=38.66;MQ0=0;QD=8.44;SB=-209.86	GT:AD:DP:GL:GQ	0/1:32,13:38:-52.70,-11.44,-90.66:99
-chr1	909854	.	C	A	33.53	Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=23.31;MQ=39.61;MQ0=0;QD=0.73;SB=-35.83	GT:AD:DP:GL:GQ	0/1:41,3:18:-18.90,-12.26,-52.66:66.37
-chr1	909858	.	T	A	34.25	Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=85.24;MQ=39.71;MQ0=0;QD=0.69;SB=-24.32	GT:AD:DP:GL:GQ	0/1:46,4:25:-14.24,-7.53,-79.28:67.09
-chr1	909861	rs2341357	A	C	442.96	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=92.23;MQ=37.93;MQ0=0;QD=9.23;SB=-187.18	GT:AD:DP:GL:GQ	0/1:13,31:32:-70.70,-23.12,-57.83:99
-chr1	909862	.	T	C	28.94	Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=90.34;MQ=37.54;MQ0=1;QD=0.59;SB=-27.89	GT:AD:DP:GL:GQ	0/1:45,4:23:-13.11,-6.93,-76.03:61.77
-chr1	909865	rs55746336	A	C	368.04	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=65.88;MQ=38.28;MQ0=1;QD=7.51;SB=-150.94	GT:AD:DP:GL:GQ	0/1:20,29:28:-48.52,-8.43,-49.13:99
-chr1	910511	rs6677020	T	C	126.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.99;MQ0=0;OQ=1842.74;QD=30.71;SB=-555.07	GT:AD:DP:GL:GQ	1/1:0,60:57:-187.90,-17.18,-0.04:99
-chr1	910596	rs6677131	T	C	281.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=1029.24;QD=25.10;SB=-459.07	GT:AD:DP:GL:GQ	1/1:0,41:35:-106.55,-10.56,-0.04:99
-chr1	911433	rs6662128	T	C	65.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=42.74;MQ0=0;OQ=1332.64;QD=27.76;SB=-494.18	GT:AD:DP:GL:GQ	1/1:0,48:43:-136.89,-12.97,-0.04:99
-chr1	911523	rs6703008	C	T	253.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.87;MQ0=0;OQ=592.10;QD=14.44;SB=-247.55	GT:AD:DP:GL:GQ	0/1:21,20:40:-74.55,-12.06,-68.34:99
-chr1	911579	rs13303278	C	A	321.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=57.82;MQ0=0;OQ=846.22;QD=16.27;SB=-412.14	GT:AD:DP:GL:GQ	0/1:22,30:49:-102.67,-14.76,-65.25:99
-chr1	911872	rs6693747	G	A	247.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=57.81;MQ0=0;OQ=692.72;QD=11.94;SB=-247.55	GT:AD:DP:GL:GQ	0/1:34,24:51:-87.93,-15.37,-94.90:99
-chr1	912939	rs6605060	A	G	422.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1569.95;QD=29.62;SB=-431.82	GT:AD:DP:GL:GQ	1/1:0,53:52:-160.64,-15.69,-0.06:99
-chr1	913322	rs9442609	A	G	120.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=58.95;MQ0=0;OQ=1780.01;QD=28.25;SB=-752.61	GT:AD:DP:GL:GQ	1/1:0,63:58:-181.64,-17.49,-0.06:99
-chr1	913612	rs9442610	T	C	76.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.45;MQ0=1;OQ=2496.82;QD=28.70;SB=-1150.17	GT:AD:DP:GL:GQ	1/1:1,86:79:-253.33,-23.82,-0.07:99
-chr1	913974	rs28447224	T	A	288.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.45;MQ0=0;OQ=731.87;QD=12.20;SB=-322.51	GT:AD:DP:GL:GQ	0/1:33,27:58:-93.94,-17.47,-123.87:99
-chr1	914034	.	A	T	3.99	PASS	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.53;MQ0=0;OQ=328.12;QD=3.57;SB=-36.46	GT:AD:DP:GL:GQ	0/1:74,18:90:-63.21,-27.12,-275.61:99
-chr1	914043	.	A	T	0.15	PASS	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=53.25;MQ0=0;OQ=310.60;QD=3.20;SB=-88.90	GT:AD:DP:GL:GQ	0/1:71,26:82:-59.05,-24.71,-248.58:99
-chr1	914057	rs36034299	T	A	46.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=52.48;MQ0=0;OQ=1254.45;QD=10.20;SB=-515.06	GT:AD:DP:GL:GQ	0/1:78,44:120:-164.87,-36.14,-292.57:99
-chr1	914062	rs34208189	G	T	4.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=1;HaplotypeScore=4.71;MQ=52.50;MQ0=0;OQ=1304.79;QD=10.87;SB=-551.46	GT:AD:DP:GL:GQ	0/1:72,47:118:-172.13,-38.37,-252.01:99
-chr1	914098	rs28489602	G	A	178.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=53.92;MQ0=0;OQ=1142.45;QD=9.29;SB=-414.29	GT:AD:DP:GL:GQ	0/1:80,43:115:-152.18,-34.65,-273.57:99
-chr1	914111	.	T	G	3.17	PASS	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=54.02;MQ0=0;OQ=717.31;QD=5.56;SB=-222.67	GT:AD:DP:GL:GQ	0/1:95,34:128:-113.56,-38.55,-355.41:99
-chr1	914118	rs59424352	T	G	15.06	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=131;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=54.89;MQ0=0;QD=0.11;SB=-22.32	GT:AD:DP:GL:GQ	0/1:103,28:116:-39.71,-34.94,-387.42:47.76
-chr1	914126	rs28607403	A	T	0.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=56.46;MQ0=0;OQ=177.88;QD=1.41;SB=-25.34	GT:AD:DP:GL:GQ	0/1:106,20:118:-56.62,-35.55,-387.33:99
-chr1	914231	rs35562283	C	T	2.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=2;HaplotypeScore=2.10;MQ=59.39;MQ0=0;OQ=4072.19;QD=40.72;SB=-2034.20	GT:AD:DP:GL:GQ	1/1:0,100:100:-406.22,-30.12,-0.03:99
-chr1	914391	rs34712273	C	A	51.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=5.23;MQ=56.94;MQ0=0;OQ=1123.83;QD=11.59;SB=-531.23	GT:AD:DP:GL:GQ	0/1:55,42:95:-144.28,-28.62,-196.31:99
-chr1	914466	rs28422907	T	C	454.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=3679.99;QD=36.08;SB=-1782.71	GT:AD:DP:GL:GQ	1/1:0,102:101:-367.00,-30.42,-0.03:99
-chr1	914492	rs28622096	A	G	82.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=92;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=2947.74;QD=32.04;SB=-1451.63	GT:AD:DP:GL:GQ	1/1:0,92:91:-298.43,-27.44,-0.07:99
-chr1	914761	rs6665000	C	A	607.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3789.11;QD=37.15;SB=-1446.45	GT:AD:DP:GL:GQ	1/1:0,101:101:-377.91,-33.59,-3.42:99
-chr1	915547	rs6605061	T	C	196.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=57.81;MQ0=0;OQ=1982.79;QD=33.05;SB=-855.97	GT:AD:DP:GL:GQ	1/1:0,60:57:-201.89,-17.17,-0.03:99
-chr1	916214	rs6671243	C	T	469.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2468.85;QD=39.82;SB=-737.98	GT:AD:DP:GL:GQ	1/1:0,62:61:-250.48,-18.37,-0.01:99
-chr1	916294	rs4970403	A	T	304.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=59.43;MQ0=0;OQ=2680.54;QD=36.72;SB=-1154.05	GT:AD:DP:GL:GQ	1/1:1,72:71:-271.66,-21.39,-0.02:99
-chr1	916484	rs4970351	A	C	485.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1740.98;QD=35.53;SB=-550.05	GT:AD:DP:GL:GQ	1/1:0,49:49:-177.70,-14.76,-0.01:99
-chr1	917172	rs2341362	T	C	555.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1855.09;QD=30.92;SB=-890.64	GT:AD:DP:GL:GQ	1/1:0,60:59:-189.15,-17.80,-0.06:99
-chr1	917604	rs6665587	G	A	343.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=746.63;QD=16.23;SB=-250.74	GT:AD:DP:GL:GQ	0/1:23,23:45:-91.50,-13.55,-86.19:99
-chr1	918279	.	G	A	19.72	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=64.12;MQ0=0;OQ=347.49;QD=8.91;SB=-127.57	GT:AD:DP:GL:GQ	0/1:25,14:32:-47.68,-9.65,-62.78:99
-chr1	918383	rs35002855	A	G	36.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.30;MQ0=0;OQ=923.20;QD=27.98;SB=-310.47	GT:AD:DP:GL:GQ	1/1:0,33:30:-95.93,-9.05,-0.03:90.20
-chr1	918441	rs28394749	G	A	367.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1345.86;QD=38.45;SB=-480.97	GT:AD:DP:GL:GQ	1/1:0,35:35:-138.18,-10.55,-0.01:99
-chr1	918699	rs9777703	C	T	463.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.88;MQ0=0;OQ=1525.43;QD=38.14;SB=-621.02	GT:AD:DP:GL:GQ	1/1:0,40:39:-156.14,-11.75,-0.01:99
-chr1	919053	rs9777939	A	G	223.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1351.32;QD=33.78;SB=-678.95	GT:AD:DP:GL:GQ	1/1:0,40:38:-138.73,-11.45,-0.01:99
-chr1	919179	rs9777893	C	T	85.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=55.86;MQ0=0;OQ=1631.07;QD=35.46;SB=-540.88	GT:AD:DP:GL:GQ	1/1:0,46:44:-166.72,-13.27,-0.03:99
-chr1	919184	rs13302916	A	C	0.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=5;HaplotypeScore=2.13;MQ=54.60;MQ0=0;OQ=1536.74;QD=31.36;SB=-480.03	GT:AD:DP:GL:GQ	1/1:0,49:45:-157.28,-13.56,-0.02:99
-chr1	919190	rs13302924	A	G	46.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=54.92;MQ0=0;OQ=1263.79;QD=24.30;SB=-518.21	GT:AD:DP:GL:GQ	1/1:0,52:42:-130.02,-12.68,-0.06:99
-chr1	919921	.	C	A	110.32	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=58.99;MQ0=0;OQ=1041.89;QD=15.10;SB=-490.89	GT:AD:DP:GL:GQ	0/1:34,35:65:-127.06,-19.58,-99.23:99
-chr1	920192	rs3128108	C	T	194.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.69;MQ0=0;OQ=711.37;QD=14.23;SB=-187.15	GT:AD:DP:GL:GQ	0/1:24,26:47:-88.59,-14.17,-77.59:99
-chr1	920240	rs3128109	C	T	215.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.70;MQ0=0;OQ=1131.05;QD=17.95;SB=-367.88	GT:AD:DP:GL:GQ	0/1:29,34:63:-135.38,-18.99,-92.17:99
-chr1	920396	rs3128110	C	G	210.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=58.26;MQ0=0;OQ=1157.59;QD=14.84;SB=-599.54	GT:AD:DP:GL:GQ	0/1:41,37:77:-142.27,-23.22,-177.91:99
-chr1	920430	rs3121574	A	G	364.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.06;MQ0=0;OQ=652.89;QD=9.60;SB=-349.53	GT:AD:DP:GL:GQ	0/1:41,27:65:-88.16,-19.59,-156.95:99
-chr1	920614	rs3128111	C	G	139.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=58.99;MQ0=0;OQ=1461.73;QD=21.18;SB=-736.36	GT:AD:DP:GL:GQ	0/1:28,41:68:-169.95,-20.49,-124.60:99
-chr1	920786	rs2710882	A	G	12.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.97;MQ=49.62;MQ0=0;OQ=1291.93;QD=28.71;SB=-670.84	GT:AD:DP:GL:GQ	1/1:0,45:41:-132.82,-12.37,-0.04:99
-chr1	920877	rs2710881	A	G	324.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=966.43;QD=26.85;SB=-364.34	GT:AD:DP:GL:GQ	1/1:0,36:31:-100.25,-9.35,-0.03:93.22
-chr1	921029	rs2710880	A	G	58.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=56.56;MQ0=0;OQ=562.50;QD=14.06;SB=-270.38	GT:AD:DP:GL:GQ	0/1:15,25:36:-70.39,-10.85,-55.63:99
-chr1	921225	rs2799060	G	A	150.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.04;MQ=54.08;MQ0=0;OQ=614.91;QD=17.08;SB=-332.87	GT:AD:DP:GL:GQ	0/1:15,21:29:-73.51,-8.74,-35.50:99
-chr1	921371	rs2799061	T	A	126.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=52.82;MQ0=0;OQ=1479.30;QD=33.62;SB=-589.54	GT:AD:DP:GL:GQ	1/1:0,44:41:-151.53,-12.35,-0.02:99
-chr1	921411	rs2799062	G	T	122.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=53.36;MQ0=0;OQ=738.91;QD=16.06;SB=-235.96	GT:AD:DP:GL:GQ	0/1:19,27:43:-90.13,-12.95,-62.40:99
-chr1	921593	rs2005437	A	G	3.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=3.71;MQ=50.61;MQ0=0;OQ=1146.23;QD=32.75;SB=-497.46	GT:AD:DP:GL:GQ	1/1:0,35:33:-118.22,-9.94,-0.01:99
-chr1	921666	rs1891908	C	T	2.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.85;MQ=32.06;MQ0=2;OQ=160.89;QD=4.35;SB=-6.43	GT:AD:DP:GL:GQ	0/1:19,17:19:-25.09,-5.72,-45.39:99
-chr1	921743	rs2710878	G	A	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=13.34;MQ=30.42;MQ0=11;OQ=92.22;QD=1.77;SB=38.12	GT:AD:DP:GL:GQ	0/1:43,9:31:-21.85,-9.35,-87.56:99
-chr1	921798	rs59581901	T	C	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=13.36;MQ=44.02;MQ0=2;OQ=265.71;QD=4.66;SB=-27.22	GT:AD:DP:GL:GQ	0/1:37,20:42:-42.52,-12.66,-114.67:99
-chr1	921802	rs13303155	G	A	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=12.88;MQ=43.29;MQ0=2;OQ=165.28;QD=2.85;SB=-96.56	GT:AD:DP:GL:GQ	0/1:44,13:47:-33.98,-14.17,-116.58:99
-chr1	921917	rs13302969	G	T	74.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=21.41;MQ0=5;OQ=283.37;QD=8.86;SB=-65.73	GT:AD:DP:GL:GQ	0/1:6,26:13:-35.54,-3.92,-11.08:71.59
-chr1	921950	rs4350142	T	G	3.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=16.76;MQ0=5;OQ=77.67;QD=4.32;SB=-39.55	GT:AD:DP:GL:GQ	0/1:13,5:9:-13.76,-2.71,-16.22:99
-chr1	922320	rs1891910	G	A	55.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=54.96;MQ0=0;OQ=908.58;QD=18.93;SB=-365.40	GT:AD:DP:GL:GQ	0/1:20,28:47:-108.30,-14.16,-73.49:99
-chr1	922481	rs3128112	C	G	140.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.00;MQ0=0;OQ=2826.91;QD=42.19;SB=-1373.36	GT:AD:DP:GL:GQ	1/1:0,67:66:-286.30,-19.89,-0.02:99
-chr1	923653	rs9442392	G	A	34.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.66;MQ0=0;OQ=346.01;QD=17.30;SB=-99.62	GT:AD:DP:GL:GQ	0/1:8,12:18:-43.31,-5.43,-22.69:99
-chr1	923962	rs2710867	G	C	179.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=491.87;QD=30.74;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:14:-52.79,-4.24,-0.02:42.13
-chr1	923969	rs2799063	A	G	177.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.52;MQ0=0;OQ=467.35;QD=31.16;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:15:-50.33,-4.52,-0.01:45.12
-chr1	923984	rs2488989	G	A	4.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=52.45;MQ0=0;OQ=54.72;QD=4.21;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,4:12:-12.37,-3.61,-31.32:87.56
-chr1	924007	rs9697551	C	G	2.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.65;MQ0=0;OQ=378.82;QD=37.88;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,10:10:-41.47,-3.01,-0.00:30.10
-chr1	925085	rs2298214	C	A	41.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=126.82;QD=15.85;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,5:8:-18.37,-2.41,-10.50:80.94
-chr1	925696	rs3128115	C	G	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=341.24;QD=28.44;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,12:10:-37.72,-3.03,-0.02:30.09
-chr1	925974	rs1936360	C	T	39.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=58.35;MQ0=0;OQ=214.61;QD=12.62;SB=-42.53	GT:AD:DP:GL:GQ	0/1:9,8:14:-28.97,-4.22,-22.12:99
-chr1	926057	rs3121570	A	G	2.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=311.77;QD=28.34;SB=-100.02	GT:AD:DP:GL:GQ	1/1:0,11:11:-34.77,-3.32,-0.01:33.06
-chr1	926073	rs3121569	C	A	189.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=295.10;QD=26.83;SB=-77.88	GT:AD:DP:GL:GQ	1/1:0,11:10:-33.10,-3.01,-0.01:30.07
-chr1	927551	rs2489000	T	C	23.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.20;MQ0=0;OQ=869.96;QD=30.00;SB=-383.48	GT:AD:DP:GL:GQ	1/1:0,29:26:-90.60,-7.84,-0.01:78.21
-chr1	927679	.	G	T	11.95	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=20;HaplotypeScore=4.44;MQ=51.49;MQ0=1;QD=0.30;SB=29.12	GT:AD:DP:GL:GQ	0/1:35,5:33:-14.39,-9.94,-101.16:44.50
-chr1	927979	rs2710869	T	G	68.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=52.06;MQ0=0;OQ=1400.53;QD=31.83;SB=-711.32	GT:AD:DP:GL:GQ	1/1:0,44:41:-143.66,-12.35,-0.02:99
-chr1	927988	rs2710868	G	A	255.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.36;MQ0=0;OQ=410.87;QD=10.02;SB=-73.54	GT:AD:DP:GL:GQ	0/1:27,14:38:-55.83,-11.46,-75.32:99
-chr1	928076	rs2799058	A	G	513.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.12;MQ0=1;OQ=1982.35;QD=34.78;SB=-956.40	GT:AD:DP:GL:GQ	1/1:0,57:56:-201.84,-16.87,-0.02:99
-chr1	929868	rs2799056	A	G	83.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=60.00;MQ0=0;OQ=292.67;QD=13.30;SB=-94.98	GT:AD:DP:GL:GQ	0/1:10,12:19:-38.28,-5.73,-31.90:99
-chr1	929959	rs4503294	C	T	66.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=59.48;MQ0=0;OQ=871.55;QD=19.81;SB=-434.84	GT:AD:DP:GL:GQ	0/1:17,27:40:-102.50,-12.06,-44.62:99
-chr1	931147	rs3128116	C	T	186.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=58.74;MQ0=0;OQ=584.87;QD=15.81;SB=-318.85	GT:AD:DP:GL:GQ	0/1:17,20:34:-72.02,-10.25,-50.30:99
-chr1	931197	rs57683598	G	A	242.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.63;MQ0=0;OQ=443.86;QD=13.05;SB=-202.91	GT:AD:DP:GL:GQ	0/1:19,15:33:-57.62,-9.95,-57.41:99
-chr1	931402	rs9778087	C	T	103.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=58.18;MQ0=0;OQ=521.73;QD=14.49;SB=-147.61	GT:AD:DP:GL:GQ	0/1:17,19:30:-64.50,-9.04,-41.68:99
-chr1	933113	rs3121568	C	T	81.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=27.66;MQ0=1;OQ=764.02;QD=34.73;SB=-301.68	GT:AD:DP:GL:GQ	1/1:1,21:20:-79.99,-6.02,-0.00:60.20
-chr1	933331	rs3121567	T	C	90.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=52.92;MQ0=0;OQ=1930.66;QD=28.39;SB=-605.93	GT:AD:DP:GL:GQ	1/1:0,67:59:-196.69,-17.79,-0.04:99
-chr1	933550	rs2465140	G	C	10.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=52.98;MQ0=0;OQ=1826.77;QD=24.04;SB=-482.83	GT:AD:DP:GL:GQ	0/1:29,47:76:-208.87,-22.91,-115.72:99
-chr1	933770	rs2488992	C	G	622.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2496.05;QD=39.00;SB=-1249.63	GT:AD:DP:GL:GQ	1/1:1,63:62:-253.23,-18.70,-0.04:99
-chr1	933831	rs13303313	C	T	77.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=54.98;MQ0=1;OQ=1022.40;QD=21.30;SB=-421.46	GT:AD:DP:GL:GQ	0/1:17,31:46:-119.39,-13.87,-49.73:99
-chr1	934427	rs3128117	T	C	70.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.79;MQ=59.48;MQ0=0;OQ=1012.81;QD=12.50;SB=-424.88	GT:AD:DP:GL:GQ	0/1:46,35:81:-128.96,-24.40,-186.84:99
-chr1	934959	rs3135457	C	T	611.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=2185.20;QD=35.82;SB=-904.70	GT:AD:DP:GL:GQ	1/1:0,61:55:-222.12,-16.57,-0.02:99
-chr1	934974	rs13303172	C	T	140.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.59;MQ0=0;OQ=2216.02;QD=34.63;SB=-887.19	GT:AD:DP:GL:GQ	1/1:0,63:58:-225.21,-17.48,-0.03:99
-chr1	935337	rs3121566	C	T	64.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=57.82;MQ0=0;OQ=2650.36;QD=37.33;SB=-1265.29	GT:AD:DP:GL:GQ	1/1:0,71:68:-268.65,-20.49,-0.03:99
-chr1	935475	rs3121565	C	T	3.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.58;MQ=54.82;MQ0=0;OQ=1712.26;QD=33.57;SB=-826.14	GT:AD:DP:GL:GQ	1/1:0,51:46:-174.83,-13.86,-0.02:99
-chr1	935997	rs2341364	T	G	377.30	Indel	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=10.97;MQ=57.32;MQ0=2;QD=7.12;SB=-202.78	GT:AD:DP:GL:GQ	0/1:37,16:48:-55.47,-14.46,-118.77:99
-chr1	935998	rs9723307	T	G	915.61	Indel	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=11.45;MQ=57.32;MQ0=2;QD=17.28;SB=-353.60	GT:AD:DP:GL:GQ	0/1:21,32:48:-109.30,-14.46,-57.43:99
-chr1	936897	rs2465126	G	A	228.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.52;MQ0=0;OQ=1823.18;QD=37.98;SB=-798.06	GT:AD:DP:GL:GQ	1/1:0,48:47:-185.92,-14.16,-0.02:99
-chr1	937401	rs2465125	C	T	186.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.20;MQ0=0;OQ=2163.80;QD=37.31;SB=-987.00	GT:AD:DP:GL:GQ	1/1:0,58:56:-219.99,-16.88,-0.02:99
-chr1	938555	rs2341365	G	A	140.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.55;MQ0=0;OQ=1650.26;QD=34.38;SB=-693.43	GT:AD:DP:GL:GQ	1/1:0,47:44:-168.63,-13.26,-0.02:99
-chr1	938733	rs4615788	C	G	63.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=59.05;MQ0=0;OQ=1777.68;QD=37.82;SB=-661.48	GT:AD:DP:GL:GQ	1/1:0,47:45:-181.39,-13.58,-0.03:99
-chr1	938784	rs15842	T	C	63.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=51.15;MQ0=0;OQ=1180.61;QD=25.67;SB=-593.57	GT:AD:DP:GL:GQ	1/1:0,46:38:-121.68,-11.46,-0.04:99
-chr1	939098	rs2465124	G	A	101.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.32;MQ0=0;OQ=1385.28;QD=35.52;SB=-635.85	GT:AD:DP:GL:GQ	1/1:0,39:36:-142.13,-10.85,-0.02:99
-chr1	939471	rs1921	G	A	210.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.46;MQ0=0;OQ=818.95;QD=19.05;SB=-428.80	GT:AD:DP:GL:GQ	0/1:17,25:41:-97.53,-12.36,-57.36:99
-chr1	939517	rs8997	A	G	93.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.52;MQ=58.71;MQ0=0;OQ=1127.57;QD=31.32;SB=-511.18	GT:AD:DP:GL:GQ	1/1:0,36:33:-116.36,-9.94,-0.02:99
-chr1	939788	rs2799070	C	T	122.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=60.00;MQ0=0;OQ=1513.64;QD=36.92;SB=-701.35	GT:AD:DP:GL:GQ	1/1:0,40:39:-154.96,-11.75,-0.01:99
-chr1	940106	rs1891906	A	C	58.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.38;MQ0=0;OQ=496.04;QD=13.41;SB=-49.04	GT:AD:DP:GL:GQ	0/1:19,18:37:-64.03,-11.14,-68.15:99
-chr1	940540	rs9331223	T	C	228.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.40;MQ0=0;OQ=564.77;QD=13.45;SB=-287.31	GT:AD:DP:GL:GQ	0/1:17,25:39:-71.52,-11.76,-66.74:99
-chr1	940579	rs2799069	A	T	132.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=57.66;MQ0=0;OQ=1217.27;QD=32.90;SB=-595.76	GT:AD:DP:GL:GQ	1/1:0,37:34:-125.32,-10.24,-0.01:99
-chr1	941146	rs9442363	C	T	200.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=29.19;MQ0=1;OQ=502.68;QD=12.89;SB=-262.28	GT:AD:DP:GL:GQ	0/1:16,22:28:-61.99,-8.44,-37.57:99
-chr1	941158	rs9442388	C	T	75.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.38;MQ=27.92;MQ0=1;OQ=496.98;QD=10.80;SB=-155.64	GT:AD:DP:GL:GQ	0/1:24,22:37:-64.14,-11.16,-65.52:99
-chr1	941185	rs9697362	C	T	0.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=4;HaplotypeScore=0.96;MQ=26.62;MQ0=0;OQ=1253.78;QD=25.59;SB=-636.34	GT:AD:DP:GL:GQ	1/1:0,49:34:-128.98,-10.25,-0.02:99
-chr1	941193	rs9697717	G	A	313.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.36;MQ0=0;OQ=1030.78;QD=25.77;SB=-468.62	GT:AD:DP:GL:GQ	1/1:0,40:27:-106.67,-8.14,-0.01:81.26
-chr1	941427	rs2465141	A	G	200.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=50.56;MQ0=1;OQ=585.65;QD=10.65;SB=-303.21	GT:AD:DP:GL:GQ	0/1:29,26:48:-76.32,-14.47,-98.65:99
-chr1	941491	.	A	T	28.08	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.78;MQ0=3;QD=0.52;SB=41.14	GT:AD:DP:GL:GQ	0/1:46,8:45:-19.65,-13.56,-148.74:60.91
-chr1	941866	rs3128118	G	A	182.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.48;MQ=58.42;MQ0=1;OQ=769.91;QD=13.27;SB=-278.19	GT:AD:DP:GL:GQ	0/1:30,27:54:-96.56,-16.28,-93.17:99
-chr1	942291	rs9442611	G	A	158.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=58.27;MQ0=0;OQ=928.32;QD=19.34;SB=-479.01	GT:AD:DP:GL:GQ	0/1:19,29:48:-110.59,-14.48,-59.61:99
-chr1	943087	rs4970390	C	T	107.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=50.43;MQ0=1;OQ=376.23;QD=6.60;SB=-175.84	GT:AD:DP:GL:GQ	0/1:38,19:49:-55.68,-14.78,-111.95:99
-chr1	943217	rs61766298	G	A	33.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=54.66;MQ0=1;OQ=355.20;QD=4.80;SB=-58.95	GT:AD:DP:GL:GQ	0/1:57,16:65:-58.41,-19.60,-158.72:99
-chr1	943541	rs2952918	T	C	3.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=5.78;MQ=53.39;MQ0=0;OQ=348.13;QD=8.70;SB=-186.61	GT:AD:DP:GL:GQ	0/1:24,16:38:-49.55,-11.46,-86.70:99
-chr1	943815	rs9442612	G	A	205.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=57.73;MQ0=0;OQ=533.79;QD=13.02;SB=-257.75	GT:AD:DP:GL:GQ	0/1:22,19:39:-68.42,-11.76,-70.56:99
-chr1	944640	rs61766299	C	A	104.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=57.66;MQ0=0;OQ=76.34;QD=7.63;SB=-34.38	GT:AD:DP:GL:GQ	0/1:6,4:9:-13.63,-2.71,-15.11:99
-chr1	946715	rs9777931	C	T	99.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=313.20;QD=12.05;SB=-129.12	GT:AD:DP:GL:GQ	0/1:14,11:22:-41.23,-6.63,-41.31:99
-chr1	949018	rs3845291	G	A	42.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=59.54;MQ0=0;OQ=843.29;QD=16.87;SB=-349.52	GT:AD:DP:GL:GQ	0/1:23,27:47:-101.78,-14.17,-66.18:99
-chr1	949032	rs3845292	G	C	180	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.52;MQ0=0;OQ=777.11;QD=16.19;SB=-360.45	GT:AD:DP:GL:GQ	0/1:22,26:45:-94.57,-13.58,-90.66:99
-chr1	949094	rs4039721	G	A	273.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.09;MQ0=0;OQ=688.73;QD=16.80;SB=-366.42	GT:AD:DP:GL:GQ	0/1:19,22:36:-83.01,-10.86,-46.17:99
-chr1	950272	rs4970392	G	C	3.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=405.25;QD=17.62;SB=-227.38	GT:AD:DP:GL:GQ	0/1:10,13:21:-50.14,-6.33,-36.47:99
-chr1	951690	rs3121556	G	A	175.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=59.49;MQ0=0;OQ=541.95;QD=12.04;SB=-261.27	GT:AD:DP:GL:GQ	0/1:25,20:39:-69.24,-11.76,-65.32:99
-chr1	952469	rs4970393	G	A	53.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=4.24;MQ=58.80;MQ0=0;OQ=631.93;QD=18.06;SB=-331.90	GT:AD:DP:GL:GQ	0/1:14,21:33:-76.42,-9.95,-42.13:99
-chr1	952754	rs4970394	C	T	113.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=59.23;MQ0=0;OQ=488.22;QD=16.27;SB=-210.21	GT:AD:DP:GL:GQ	0/1:14,15:29:-60.84,-8.74,-49.96:99
-chr1	953112	rs2710870	C	T	198.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=60.00;MQ0=0;OQ=692.82;QD=14.74;SB=-280.19	GT:AD:DP:GL:GQ	0/1:24,23:46:-86.43,-13.86,-83.87:99
-chr1	953580	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=16;HaplotypeScore=1.95;MQ=42.79;MQ0=0;OQ=89.92;QD=8.17;SB=-0.97	GT:AD:DP:GL:GQ	0/1:7,4:8:-14.69,-2.41,-16.44:99
-chr1	953584	rs2465127	T	C	0.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=3.77;MQ=52.61;MQ0=0;OQ=94.29;QD=7.86;SB=-65.34	GT:AD:DP:GL:GQ	0/1:4,8:9:-15.43,-2.71,-16.16:99
-chr1	954093	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=9.68;MQ=33.26;MQ0=5;OQ=209.72;QD=5.67;SB=-3.99	GT:AD:DP:GL:GQ	0/1:21,12:15:-28.78,-4.52,-24.72:99
-chr1	954161	rs61766303	C	G	18.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=31.02;MQ0=1;OQ=184.53;QD=5.27;SB=-0.98	GT:AD:DP:GL:GQ	0/1:19,16:16:-26.57,-4.83,-37.31:99
-chr1	954252	rs4970397	C	T	103.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=32.94;MQ0=3;OQ=204.52;QD=7.57;SB=-35.64	GT:AD:DP:GL:GQ	0/1:17,10:18:-29.16,-5.43,-34.74:99
-chr1	954703	rs4970343	T	C	2.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=6.47;MQ=58.52;MQ0=0;OQ=457.55;QD=14.30;SB=-98.71	GT:AD:DP:GL:GQ	0/1:14,18:30:-58.08,-9.04,-50.50:99
-chr1	954711	rs4970344	A	T	37.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.43;MQ0=0;OQ=626.99;QD=19.00;SB=-168.81	GT:AD:DP:GL:GQ	0/1:12,21:33:-75.92,-9.94,-45.13:99
-chr1	954872	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=20.43;MQ=48.78;MQ0=1;OQ=116.04;QD=3.14;SB=-52.28	GT:AD:DP:GL:GQ	0/1:25,12:25:-22.42,-7.54,-71.63:99
-chr1	955038	rs28373660	A	G	250.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=55.30;MQ0=0;OQ=611.00;QD=13.28;SB=-229.46	GT:AD:DP:GL:GQ	0/1:20,26:39:-76.13,-11.75,-66.91:99
-chr1	955106	.	A	G	23.39	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=10.05;MQ=39.47;MQ0=7;QD=0.46;SB=-5.58	GT:AD:DP:GL:GQ	0/1:38,13:31:-14.97,-9.35,-98.23:56.21
-chr1	955141	rs28433148	T	C	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.04;HRun=0;HaplotypeScore=16.86;MQ=40.85;MQ0=6;OQ=407.46;QD=7.41;SB=-215.36	GT:AD:DP:GL:GQ	0/1:25,28:41:-56.09,-12.06,-84.28:99
-chr1	955386	rs4970404	A	G	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.02;HRun=0;HaplotypeScore=18.83;MQ=42.69;MQ0=11;OQ=218.68;QD=3.58;SB=-113.62	GT:AD:DP:GL:GQ	0/1:39,21:33:-35.11,-9.95,-82.73:99
-chr1	955467	rs4970345	C	T	151.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=44.49;MQ0=2;OQ=398.93;QD=9.73;SB=-192.19	GT:AD:DP:GL:GQ	0/1:19,21:26:-51.01,-7.84,-42.93:99
-chr1	955802	rs4970398	A	T	97.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=47.03;MQ0=2;OQ=550.07;QD=10.19;SB=-184.73	GT:AD:DP:GL:GQ	0/1:27,27:47:-72.45,-14.16,-100.00:99
-chr1	955812	rs4970399	A	G	52.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.02;HRun=0;HaplotypeScore=3.69;MQ=45.58;MQ0=2;OQ=418.21;QD=7.47;SB=-156.96	GT:AD:DP:GL:GQ	0/1:27,28:43:-57.78,-12.67,-88.06:99
-chr1	955927	.	T	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.47;MQ=51.74;MQ0=5;OQ=79.40;QD=1.80;SB=-44.68	GT:AD:DP:GL:GQ	0/1:30,14:34:-21.47,-10.25,-106.58:99
-chr1	955942	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=21.62;MQ=50.59;MQ0=7;OQ=96.72;QD=1.97;SB=-71.62	GT:AD:DP:GL:GQ	0/1:29,17:31:-22.31,-9.35,-90.50:99
-chr1	956010	.	A	G	17.59	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=45.86;MQ0=9;QD=0.35;SB=1.17	GT:AD:DP:GL:GQ	0/1:36,13:34:-15.29,-10.25,-111.87:50.35
-chr1	957521	rs4970349	C	T	109.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.54;MQ=59.65;MQ0=0;OQ=696.48;QD=12.90;SB=-243.23	GT:AD:DP:GL:GQ	0/1:30,24:51:-88.30,-15.37,-100.68:99
-chr1	960023	.	C	T	7.39	PASS	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=53.50;MQ0=0;OQ=70.28;QD=5.86;SB=-0.98	GT:AD:DP:GL:GQ	0/1:7,5:10:-13.33,-3.02,-17.80:99
-chr1	960078	rs9442364	G	C	190.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=59.38;QD=8.48;SB=-32.42	GT:AD:DP:GL:GQ	0/1:3,4:6:-11.04,-1.82,-11.54:92.22
-chr1	961087	rs2799055	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=6;HaplotypeScore=0.98;MQ=59.32;MQ0=0;OQ=442.07;QD=13.00;SB=-186.63	GT:AD:DP:GL:GQ	0/1:16,18:32:-57.14,-9.65,-55.82:99
-chr1	961230	rs2710883	T	C	342.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=662.38;QD=14.09;SB=-345.94	GT:AD:DP:GL:GQ	0/1:23,24:47:-83.68,-14.16,-90.90:99
-chr1	961997	rs3121575	C	T	135.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=582.22;QD=15.32;SB=-286.19	GT:AD:DP:GL:GQ	0/1:17,20:35:-72.05,-10.55,-56.30:99
-chr1	962043	rs4970350	G	A	118.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=762.03;QD=19.05;SB=-359.38	GT:AD:DP:GL:GQ	0/1:16,24:38:-90.95,-11.46,-47.96:99
-chr1	963199	rs2488993	A	G	276.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=691.22;QD=14.71;SB=-269.95	GT:AD:DP:GL:GQ	0/1:22,25:46:-86.26,-13.86,-87.86:99
-chr1	963240	rs2465129	G	A	277.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.66;MQ=58.44;MQ0=0;OQ=598.48;QD=15.35;SB=-309.81	GT:AD:DP:GL:GQ	0/1:19,20:36:-73.98,-10.85,-56.47:99
-chr1	963321	rs2465130	C	T	51.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=517.87;QD=11.26;SB=-211.85	GT:AD:DP:GL:GQ	0/1:28,18:43:-68.02,-12.95,-92.79:99
-chr1	963531	rs2488994	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=7.50;MQ=58.37;MQ0=0;OQ=421.46;QD=9.80;SB=-94.66	GT:AD:DP:GL:GQ	0/1:26,17:40:-57.48,-12.05,-93.15:99
-chr1	964043	rs3121577	G	T	194.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.29;MQ0=0;OQ=740.60;QD=11.39;SB=-370.98	GT:AD:DP:GL:GQ	0/1:36,29:64:-96.63,-19.29,-128.48:99
-chr1	964062	rs2465131	C	T	262.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.28;MQ0=0;OQ=941.69;QD=14.71;SB=-361.86	GT:AD:DP:GL:GQ	0/1:34,30:62:-116.13,-18.68,-116.79:99
-chr1	964088	rs2488995	A	G	204.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=60.00;MQ0=0;OQ=709.06;QD=12.66;SB=-311.29	GT:AD:DP:GL:GQ	0/1:29,27:55:-90.77,-16.58,-108.13:99
-chr1	964159	rs2488996	A	G	168.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=59.09;MQ0=0;OQ=732.05;QD=15.91;SB=-365.63	GT:AD:DP:GL:GQ	0/1:18,28:43:-89.45,-12.96,-67.34:99
-chr1	964218	rs2488997	G	A	8.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.51;MQ=58.80;MQ0=0;OQ=657.04;QD=18.77;SB=-348.46	GT:AD:DP:GL:GQ	0/1:15,20:35:-79.53,-10.55,-53.54:99
-chr1	964219	rs2465132	T	C	152.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=58.80;MQ0=0;OQ=438.83;QD=12.54;SB=-221.28	GT:AD:DP:GL:GQ	0/1:15,20:33:-57.12,-9.95,-56.00:99
-chr1	964357	rs2465133	G	T	31.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=5.89;MQ=58.66;MQ0=0;OQ=971.31;QD=14.72;SB=-505.87	GT:AD:DP:GL:GQ	0/1:30,36:62:-119.10,-18.68,-97.98:99
-chr1	964433	rs2465134	T	G	140.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.32;MQ=58.54;MQ0=0;OQ=578.70;QD=12.58;SB=-251.93	GT:AD:DP:GL:GQ	0/1:22,23:38:-72.60,-11.45,-62.23:99
-chr1	964525	rs2465135	G	T	124.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=58.59;MQ0=0;OQ=621.72;QD=18.84;SB=-320.48	GT:AD:DP:GL:GQ	0/1:13,20:32:-75.10,-9.64,-38.41:99
-chr1	964757	rs3121578	C	T	344.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.81;MQ0=0;OQ=283.06;QD=10.11;SB=-156.67	GT:AD:DP:GL:GQ	0/1:18,10:26:-39.43,-7.84,-52.76:99
-chr1	964996	rs3121579	T	A	109.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.40;MQ0=0;OQ=475.63;QD=15.34;SB=-146.82	GT:AD:DP:GL:GQ	0/1:15,16:30:-59.88,-9.04,-53.03:99
-chr1	965565	rs9331224	A	G	58.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=1.21;MQ=58.67;MQ0=0;OQ=414.04;QD=11.83;SB=-233.27	GT:AD:DP:GL:GQ	0/1:19,16:32:-54.33,-9.64,-64.60:99
-chr1	967066	rs3121552	G	C	40.51	LowQual	AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=8.10;SB=-43.44	GT:AD:DP:GL:GQ	0/1:3,2:4:-8.54,-1.21,-8.39:71.79
-chr1	967193	rs2799066	T	C	15.85	LowQual	AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.05;MQ0=0;QD=1.98;SB=-24.63	GT:AD:DP:GL:GQ	0/1:6,2:8:-7.27,-2.41,-22.53:48.57
-chr1	967433	rs2710876	G	A	2.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=7.34;MQ=57.29;MQ0=0;OQ=207.99;QD=8.00;SB=-101.60	GT:AD:DP:GL:GQ	0/1:14,12:21:-30.42,-6.34,-38.59:99
-chr1	967643	rs2710875	C	T	1.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=57.25;MQ0=0;OQ=665.34;QD=21.46;SB=-289.34	GT:AD:DP:GL:GQ	0/1:11,20:28:-78.26,-8.44,-23.82:99
-chr1	970323	rs3128097	G	A	1.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=9.72;MQ=59.47;MQ0=0;OQ=926.21;QD=16.84;SB=-308.84	GT:AD:DP:GL:GQ	0/1:24,31:51:-111.27,-15.36,-80.98:99
-chr1	970950	rs3128098	A	G	264.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.28;MQ0=0;OQ=593.17;QD=14.83;SB=-270.38	GT:AD:DP:GL:GQ	0/1:15,24:36:-73.46,-10.85,-50.98:99
-chr1	971794	rs2465128	A	G	68.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=60.00;MQ0=0;OQ=206.80;QD=7.66;SB=-83.65	GT:AD:DP:GL:GQ	0/1:13,14:23:-30.90,-6.93,-51.94:99
-chr1	972307	rs3128099	A	G	0.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=7.82;MQ=57.77;MQ0=0;OQ=622.11;QD=14.81;SB=-282.64	GT:AD:DP:GL:GQ	0/1:15,25:37:-76.65,-11.15,-58.34:99
-chr1	972325	rs3128100	T	C	8.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=4.33;MQ=57.56;MQ0=0;OQ=1298.64;QD=27.06;SB=-459.21	GT:AD:DP:GL:GQ	1/1:0,48:42:-133.49,-12.67,-0.04:99
-chr1	972376	rs3128101	T	C	10.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=5.66;MQ=56.76;MQ0=0;OQ=571.56;QD=13.94;SB=-141.55	GT:AD:DP:GL:GQ	0/1:15,25:36:-73.37,-12.93,-53.37:99
-chr1	972804	rs3128102	T	C	4.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=3.75;MQ=59.50;MQ0=0;OQ=547.08;QD=11.89;SB=-200.60	GT:AD:DP:GL:GQ	0/1:23,23:37:-69.14,-11.15,-71.89:99
-chr1	972857	rs10267	T	C	1.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.51;MQ=58.63;MQ0=0;OQ=633.32;QD=18.63;SB=-175.96	GT:AD:DP:GL:GQ	0/1:12,21:33:-76.56,-9.94,-48.12:99
-chr1	974010	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=20;HaplotypeScore=11.22;MQ=50.83;MQ0=0;OQ=57.83;QD=3.04;SB=2.03	GT:AD:DP:GL:GQ	0/1:15,4:17:-14.19,-5.12,-41.74:90.67
-chr1	974165	rs9442391	T	C	32.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=57.07;MQ0=0;OQ=302.47;QD=11.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,13:22:-40.16,-6.63,-43.34:99
-chr1	975129	rs2275813	C	T	11.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.16;MQ0=0;OQ=102.58;QD=20.52;SB=-45.66	GT:AD:DP:GL:GQ	0/1:1,4:5:-15.04,-1.51,-2.70:11.90
-chr1	975309	rs2275812	G	T	1.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=7.77;MQ=59.16;MQ0=0;OQ=108.56;QD=9.87;SB=-36.92	GT:AD:DP:GL:GQ	0/1:5,6:10:-17.15,-3.01,-16.77:99
-chr1	975312	rs56255212	G	A	0.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=7.96;MQ=57.00;MQ0=0;OQ=248.84;QD=22.62;SB=-118.97	GT:AD:DP:GL:GQ	0/1:2,9:10:-31.18,-3.01,-6.57:35.54
-chr1	976306	rs2710887	C	T	180.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=498.86;QD=13.13;SB=-206.20	GT:AD:DP:GL:GQ	0/1:21,17:37:-64.33,-11.16,-66.50:99
-chr1	977063	rs9803031	C	T	254.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=585.89;QD=18.90;SB=-309.86	GT:AD:DP:GL:GQ	0/1:13,18:30:-70.92,-9.05,-35.55:99
-chr1	977533	rs13303287	T	G	495.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=796.56;QD=13.73;SB=-424.70	GT:AD:DP:GL:GQ	0/1:25,33:58:-100.42,-17.48,-92.24:99
-chr1	978366	rs2799071	A	T	261.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=849.34;QD=16.33;SB=-440.60	GT:AD:DP:GL:GQ	0/1:23,29:48:-102.68,-14.47,-71.41:99
-chr1	978795	rs2710871	G	C	22.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=58.33;MQ0=0;OQ=743.65;QD=17.71;SB=-370.12	GT:AD:DP:GL:GQ	0/1:18,24:36:-88.51,-10.86,-57.89:99
-chr1	980143	rs4275402	C	T	40.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=58.13;MQ0=0;OQ=896.64;QD=35.87;SB=-438.31	GT:AD:DP:GL:GQ	1/1:0,25:24:-93.26,-7.23,-0.01:72.23
-chr1	980380	rs2710872	C	T	78.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=549.92;QD=18.33;SB=-189.29	GT:AD:DP:GL:GQ	0/1:12,18:27:-66.42,-8.14,-30.90:99
-chr1	980636	rs2799072	C	T	101.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=1104.80;QD=20.09;SB=-396.92	GT:AD:DP:GL:GQ	0/1:22,33:54:-130.03,-16.27,-75.12:99
-chr1	980669	rs2799073	G	A	136.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=60.00;MQ0=0;OQ=1001.06;QD=20.02;SB=-407.16	GT:AD:DP:GL:GQ	0/1:17,32:47:-117.55,-14.17,-57.43:99
-chr1	980847	rs8014	G	A	99.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=656.29;QD=17.27;SB=-261.26	GT:AD:DP:GL:GQ	0/1:18,20:38:-80.37,-11.45,-56.60:99
-chr1	981587	rs3121562	C	T	350.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.79;MQ0=0;OQ=354.87;QD=13.14;SB=-164.15	GT:AD:DP:GL:GQ	0/1:12,15:25:-46.32,-7.55,-37.60:99
-chr1	981840	rs4970400	G	A	115.33	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=38.45;MQ=54.81;MQ0=0;QD=3.04;SB=-51.02	GT:AD:DP:GL:GQ	0/1:30,8:33:-24.78,-9.96,-81.20:99
-chr1	981844	rs13303259	A	G	138.38	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=33.28;MQ=55.32;MQ0=0;QD=3.29;SB=-90.63	GT:AD:DP:GL:GQ	0/1:32,10:37:-28.28,-11.16,-110.43:99
-chr1	981845	rs2710885	T	C	325.46	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=29.31;MQ=55.32;MQ0=0;QD=7.75;SB=-95.70	GT:AD:DP:GL:GQ	0/1:24,18:34:-46.08,-10.25,-78.60:99
-chr1	981905	rs3121564	C	T	503.25	Indel	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=56.07;MQ0=0;QD=13.24;SB=-230.23	GT:AD:DP:GL:GQ	0/1:19,19:34:-63.86,-10.25,-57.54:99
-chr1	981947	rs2710886	T	C	139.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=57.30;MQ0=0;OQ=454.51;QD=9.88;SB=-191.43	GT:AD:DP:GL:GQ	0/1:25,21:45:-62.31,-13.57,-94.53:99
-chr1	981957	rs2799074	T	C	39.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=57.39;MQ0=0;OQ=362.93;QD=6.48;SB=-127.51	GT:AD:DP:GL:GQ	0/1:32,23:44:-52.84,-13.27,-101.58:99
-chr1	982190	rs2245754	C	T	115.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=56.87;MQ0=0;OQ=667.97;QD=12.60;SB=-322.42	GT:AD:DP:GL:GQ	0/1:29,24:49:-84.84,-14.76,-98.05:99
-chr1	982682	rs9331226	G	A	139.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=47.23;MQ0=0;OQ=1563.99;QD=20.85;SB=-791.90	GT:AD:DP:GL:GQ	0/1:29,46:74:-181.97,-22.29,-107.08:99
-chr1	983223	rs13303240	C	A	201.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.32;MQ0=0;OQ=838.66;QD=15.82;SB=-290.67	GT:AD:DP:GL:GQ	0/1:25,28:52:-102.82,-15.67,-74.49:99
-chr1	984254	rs2488991	G	T	204.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=58.59;MQ0=0;OQ=458.34;QD=13.89;SB=-201.49	GT:AD:DP:GL:GQ	0/1:13,19:30:-58.16,-9.04,-45.43:99
-chr1	985344	rs9442393	T	G	429.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=599.53;QD=14.99;SB=-298.50	GT:AD:DP:GL:GQ	0/1:18,22:39:-74.98,-11.75,-60.16:99
-chr1	987271	rs28397086	T	C	29.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.90;MQ0=0;OQ=513.69;QD=32.11;SB=-117.05	GT:AD:DP:GL:GQ	1/1:0,16:15:-54.96,-4.52,-0.01:45.13
-chr1	988258	rs7526076	A	G	181.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.56;MQ0=0;OQ=852.42;QD=16.08;SB=-332.31	GT:AD:DP:GL:GQ	0/1:24,29:52:-104.19,-15.67,-91.85:99
-chr1	988445	rs3813194	G	C	229.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.48;MQ0=0;OQ=676.17;QD=16.90;SB=-324.02	GT:AD:DP:GL:GQ	0/1:19,21:38:-82.36,-11.46,-78.97:99
-chr1	990019	rs11584349	C	T	5.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=221.74;QD=18.48;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,7:12:-29.08,-3.62,-14.98:99
-chr1	991040	rs4970401	G	C	199.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1348.36;QD=21.75;SB=-452.37	GT:AD:DP:GL:GQ	0/1:27,35:61:-156.51,-18.39,-101.07:99
-chr1	992297	rs11260596	C	T	126.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.11;MQ0=0;OQ=235.14;QD=11.76;SB=-75.09	GT:AD:DP:GL:GQ	0/1:10,10:18:-32.23,-5.43,-30.14:99
-chr1	992795	rs4246502	C	G	1.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.20;MQ0=0;OQ=331.32;QD=25.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,10:12:-40.03,-3.62,-11.85:82.27
-chr1	992916	rs4074992	C	T	64.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.96;MQ0=0;OQ=236.09;QD=13.12;SB=-45.65	GT:AD:DP:GL:GQ	0/1:9,9:18:-32.32,-5.43,-28.25:99
-chr1	993492	rs4075116	C	T	510.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=697.41;QD=15.16;SB=-277.76	GT:AD:DP:GL:GQ	0/1:23,23:43:-85.98,-12.96,-73.34:99
-chr1	994820	rs4073176	G	A	10.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=141.42;QD=15.71;SB=-0.98	GT:AD:DP:GL:GQ	0/1:4,5:9:-20.14,-2.71,-13.80:99
-chr1	994843	rs4073177	G	A	1.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=225.74;QD=20.52;SB=-3.99	GT:AD:DP:GL:GQ	0/1:4,7:11:-29.17,-3.31,-13.13:98.16
-chr1	995932	rs55918415	G	A	129.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=57.98;MQ0=1;OQ=500.10;QD=13.89;SB=-124.09	GT:AD:DP:GL:GQ	0/1:20,16:33:-63.24,-9.94,-54.88:99
-chr1	996086	rs9442394	G	A	160.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=2.17;MQ=59.51;MQ0=0;OQ=685.95;QD=14.59;SB=-304.81	GT:AD:DP:GL:GQ	0/1:25,22:45:-85.44,-13.56,-78.07:99
-chr1	996853	rs4326571	G	A	22.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.32;MQ=58.90;MQ0=0;OQ=529.40;QD=13.93;SB=-35.65	GT:AD:DP:GL:GQ	0/1:21,17:38:-67.68,-11.45,-66.25:99
-chr1	999097	rs9442366	T	C	69.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.30;MQ0=0;OQ=217.52;QD=6.59;SB=-81.95	GT:AD:DP:GL:GQ	0/1:21,12:31:-34.38,-9.34,-81.07:99
-chr1	999304	.	G	A	28.33	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=57.94;MQ0=0;OQ=327.19;QD=9.62;SB=-182.19	GT:AD:DP:GL:GQ	0/1:21,13:31:-45.35,-9.34,-65.26:99
-chr1	999341	rs9442367	G	C	25.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=0.81;MQ=58.59;MQ0=0;OQ=590.30;QD=17.89;SB=-256.14	GT:AD:DP:GL:GQ	0/1:14,19:30:-71.37,-9.06,-48.75:99
-chr1	1000580	rs9442368	C	T	47.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=4.96;MQ=54.71;MQ0=0;OQ=650.78;QD=15.49;SB=-262.79	GT:AD:DP:GL:GQ	0/1:21,21:39:-80.11,-11.75,-60.91:99
-chr1	1000958	rs11810785	A	G	695.93	Indel	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=6;HaplotypeScore=2.96;MQ=54.24;MQ0=1;QD=26.77;SB=-339.63	GT:AD:DP:GL:GQ	1/1:0,26:21:-73.19,-6.33,-0.01:63.17
-chr1	1001394	.	T	C	34.95	LowQual	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=41.30;MQ0=1;QD=3.88;SB=-6.99	GT:AD:DP:GL:GQ	0/1:6,3:8:-9.19,-2.41,-20.53:67.78
-chr1	1001500	.	A	T	20.13	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=16.78;MQ0=8;QD=0.81;SB=-10.00	GT:AD:DP:GL:GQ	0/1:19,5:9:-8.01,-2.72,-22.07:52.92
-chr1	1002064	.	G	C	10.08	LowQual	AC=1;AF=0.50;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.77;MQ0=0;QD=5.04;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,1:1:-4.25,-0.30,-0.00:1.76
-chr1	1002464	.	A	T	1.23	PASS	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=18.46;MQ0=3;OQ=57.47;QD=3.59;SB=-37.37	GT:AD:DP:GL:GQ	0/1:8,7:4:-10.24,-1.21,-3.80:25.95
-chr1	1002488	.	A	T	34.11	LowQual	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=7.23;MQ=19.96;MQ0=3;QD=2.27;SB=-4.00	GT:AD:DP:GL:GQ	0/1:9,6:4:-7.90,-1.21,-5.60:43.89
-chr1	1002494	.	A	T	35.11	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=19.72;MQ0=3;QD=2.51;SB=-7.00	GT:AD:DP:GL:GQ	0/1:7,7:3:-7.70,-0.90,-3.30:23.95
-chr1	1002516	.	G	A	46.02	LowQual	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=18.44;MQ0=1;QD=4.60;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,5:2:-8.01,-0.60,-0.00:6.02
-chr1	1002856	.	T	G	12.29	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.33;MQ0=1;OQ=106.33;QD=5.32;SB=-21.95	GT:AD:DP:GL:GQ	0/1:10,10:13:-17.84,-3.92,-27.80:99
-chr1	1003100	.	C	T	26.46	LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=39.70;MQ0=0;QD=2.65;SB=-3.99	GT:AD:DP:GL:GQ	0/1:8,2:6:-7.74,-1.81,-13.13:59.28
-chr1	1003243	.	G	C	4.11	PASS	AC=2;AF=1.00;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.94;MQ=27.95;MQ0=9;OQ=330.47;QD=13.77;SB=-94.94	GT:AD:DP:GL:GQ	1/1:14,10:9:-36.64,-2.72,-0.01:27.09
-chr1	1003514	.	C	A	42.25	LowQual	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.30;MQ0=1;QD=7.04;SB=-46.39	GT:AD:DP:GL:GQ	1/1:0,6:2:-7.63,-0.60,-0.00:6.02
-chr1	1003557	.	T	A	0.08	PASS	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=5.02;MQ=17.13;MQ0=14;OQ=71.49;QD=2.98;SB=-43.38	GT:AD:DP:GL:GQ	0/1:21,3:4:-11.64,-1.20,-3.64:24.35
-chr1	1003864	.	G	C	10.99	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=9.87;MQ=5.60;MQ0=15;QD=0.58;SB=-10.00	GT:AD:DP:GL:GQ	0/1:17,2:1:-4.35,-0.30,-0.00:1.76
-chr1	1004168	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=12.18;MQ=19.95;MQ0=11;OQ=53.86;QD=2.56;SB=-37.95	GT:AD:DP:GL:GQ	0/1:14,6:6:-10.48,-1.81,-11.22:86.70
-chr1	1004254	.	G	C	33.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=6.90;MQ=13.09;MQ0=11;QD=1.32;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,12:4:-7.80,-1.21,-8.59:65.89
-chr1	1004313	.	G	C	21.04	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=11.38;MQ0=14;QD=0.84;SB=-3.98	GT:AD:DP:GL:GQ	0/1:23,2:6:-7.19,-1.81,-17.58:53.84
-chr1	1004699	rs12401605	A	G	193.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=54.82;MQ0=0;OQ=256.92;QD=8.56;SB=-154.32	GT:AD:DP:GL:GQ	0/1:17,12:28:-37.42,-8.44,-63.53:99
-chr1	1004727	rs12411041	T	A	29.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=54.35;MQ0=0;OQ=225.92;QD=6.11;SB=-72.06	GT:AD:DP:GL:GQ	0/1:25,11:32:-35.52,-9.65,-76.83:99
-chr1	1004989	rs36027499	A	G	65.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=54.55;MQ0=0;OQ=184.41;QD=7.38;SB=-109.60	GT:AD:DP:GL:GQ	0/1:16,9:24:-28.96,-7.24,-58.60:99
-chr1	1005120	rs9442369	A	G	5.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=59.36;MQ0=0;OQ=146.76;QD=4.08;SB=-64.75	GT:AD:DP:GL:GQ	0/1:26,10:34:-28.21,-10.25,-99.59:99
-chr1	1005414	rs9442370	C	T	185.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.23;MQ0=0;OQ=413.23;QD=13.77;SB=-165.25	GT:AD:DP:GL:GQ	0/1:14,16:26:-52.45,-7.84,-38.57:99
-chr1	1005680	rs12746483	G	A	50.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=2.06;MQ=55.16;MQ0=0;OQ=462.98;QD=16.54;SB=-241.55	GT:AD:DP:GL:GQ	0/1:13,15:28:-58.02,-8.44,-44.58:99
-chr1	1007033	rs3766193	C	G	206.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=57.65;MQ0=0;OQ=606.89;QD=15.97;SB=-241.40	GT:AD:DP:GL:GQ	0/1:19,19:36:-74.82,-10.85,-77.35:99
-chr1	1007060	rs3766192	C	T	263.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=59.03;MQ0=0;OQ=740.51;QD=17.22;SB=-335.87	GT:AD:DP:GL:GQ	0/1:19,24:42:-90.01,-12.67,-54.97:99
-chr1	1007204	rs1133647	G	T	220.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.63;MQ0=0;OQ=352.30;QD=10.36;SB=-144.83	GT:AD:DP:GL:GQ	0/1:20,14:34:-48.76,-10.25,-68.42:99
-chr1	1008007	rs9442395	T	C	79.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.17;MQ=58.20;MQ0=0;OQ=515.12;QD=11.71;SB=-260.59	GT:AD:DP:GL:GQ	0/1:23,21:43:-67.76,-12.96,-87.04:99
-chr1	1008425	rs9442371	C	T	263.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.95;MQ0=0;OQ=629.69;QD=14.31;SB=-217.52	GT:AD:DP:GL:GQ	0/1:24,20:39:-78.01,-11.76,-59.01:99
-chr1	1008567	rs9442372	A	G	252.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.72;MQ=58.97;MQ0=0;OQ=538.45;QD=11.97;SB=-254.34	GT:AD:DP:GL:GQ	0/1:20,24:42:-69.79,-12.66,-79.04:99
-chr1	1009038	rs2298215	C	G	217.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=687.91;QD=14.95;SB=-237.07	GT:AD:DP:GL:GQ	0/1:26,20:46:-85.94,-13.87,-107.64:99
-chr1	1009043	rs9442396	T	C	432.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=537.22;QD=11.94;SB=-291.59	GT:AD:DP:GL:GQ	0/1:24,21:42:-69.65,-12.65,-93.39:99
-chr1	1010269	rs9442397	T	C	3.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.96;MQ=59.38;MQ0=0;OQ=202.19;QD=5.46;SB=-53.82	GT:AD:DP:GL:GQ	0/1:25,12:35:-34.05,-10.54,-100.39:99
-chr1	1011278	rs3737728	A	G	36.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=58.01;MQ0=0;OQ=401.40;QD=7.72;SB=-209.34	GT:AD:DP:GL:GQ	0/1:32,20:49:-58.20,-14.77,-121.11:99
-chr1	1011558	rs9442398	A	G	416.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.92;MQ0=0;OQ=544.78;QD=12.67;SB=-280.28	GT:AD:DP:GL:GQ	0/1:17,25:38:-69.23,-11.47,-56.30:99
-chr1	1011900	rs6701114	C	T	240.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.30;MQ0=0;OQ=587.87;QD=17.81;SB=-314.84	GT:AD:DP:GL:GQ	0/1:13,20:30:-71.11,-9.04,-40.79:99
-chr1	1013307	rs9442399	C	G	25.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=338.37;QD=37.60;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:9:-37.42,-2.71,-0.00:27.09
-chr1	1015133	.	C	T	6.55	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.91;MQ=59.48;MQ0=0;OQ=504.60;QD=11.47;SB=-145.62	GT:AD:DP:GL:GQ	0/1:26,18:38:-65.20,-11.46,-67.24:99
-chr1	1015164	rs9442400	T	C	212.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.61;MQ0=0;OQ=1416.80;QD=29.52;SB=-594.18	GT:AD:DP:GL:GQ	1/1:0,48:47:-145.32,-14.18,-0.06:99
-chr1	1016570	rs4074137	C	A	81.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=60.00;MQ0=0;OQ=196.23;QD=6.33;SB=-112.43	GT:AD:DP:GL:GQ	0/1:22,9:30:-31.95,-9.04,-69.97:99
-chr1	1016664	rs4562563	T	A	69.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=58.99;MQ0=0;OQ=428.33;QD=18.62;SB=-222.84	GT:AD:DP:GL:GQ	0/1:8,15:23:-53.05,-6.93,-28.44:99
-chr1	1021403	rs9651273	A	G	292.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=648.57;QD=9.40;SB=-308.20	GT:AD:DP:GL:GQ	0/1:44,25:69:-88.92,-20.78,-180.93:99
-chr1	1022047	rs9651272	A	G	123.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=59.58;MQ0=0;OQ=389.06;QD=8.84;SB=-195.60	GT:AD:DP:GL:GQ	0/1:25,19:42:-54.85,-12.66,-100.05:99
-chr1	1023862	rs4970353	C	T	10.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=971.03;QD=16.18;SB=-472.48	GT:AD:DP:GL:GQ	0/1:30,30:59:-118.16,-17.77,-101.63:99
-chr1	1025668	rs12759295	G	A	84.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=59.60;MQ0=0;OQ=2089.51;QD=36.03;SB=-522.67	GT:AD:DP:GL:GQ	1/1:0,58:54:-212.56,-16.27,-0.02:99
-chr1	1026680	rs61766341	T	C	205.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=959.29;QD=13.51;SB=-415.84	GT:AD:DP:GL:GQ	0/1:32,39:68:-119.71,-20.50,-125.74:99
-chr1	1026910	rs12134754	C	T	210.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.33;MQ0=0;OQ=1080.76;QD=17.43;SB=-366.87	GT:AD:DP:GL:GQ	0/1:30,32:60:-129.44,-18.08,-89.78:99
-chr1	1027893	.	T	A	15.04	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=20;HaplotypeScore=5.87;MQ=44.25;MQ0=4;QD=0.40;SB=32.13	GT:AD:DP:GL:GQ	0/1:33,5:23:-11.70,-6.93,-76.52:47.73
-chr1	1037844	rs11584392	G	A	163.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.82;MQ0=0;OQ=608.74;QD=14.16;SB=-241.74	GT:AD:DP:GL:GQ	0/1:22,21:40:-76.22,-12.06,-65.82:99
-chr1	1043248	rs4970408	C	T	441.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.36;MQ0=0;OQ=945.52;QD=17.51;SB=-425.94	GT:AD:DP:GL:GQ	0/1:25,29:54:-114.11,-16.27,-86.23:99
-chr1	1050037	rs7548798	C	T	114.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=3.36;MQ=58.61;MQ0=0;OQ=733.89;QD=15.61;SB=-330.30	GT:AD:DP:GL:GQ	0/1:24,23:47:-90.84,-14.17,-83.86:99
-chr1	1050038	rs7556082	T	C	10.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=4;HaplotypeScore=2.36;MQ=58.61;MQ0=0;OQ=528.95;QD=11.25;SB=-283.60	GT:AD:DP:GL:GQ	0/1:24,23:46:-70.05,-13.87,-95.38:99
-chr1	1050218	rs12567855	G	C	18.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=1.10;MQ=59.48;MQ0=0;OQ=549.12;QD=15.25;SB=-150.55	GT:AD:DP:GL:GQ	0/1:19,17:33:-68.15,-9.95,-68.62:99
-chr1	1050923	.	C	G	38.31	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=7.12;MQ=59.57;MQ0=0;QD=0.71;SB=62.24	GT:AD:DP:GL:GQ	0/1:40,14:36:-17.98,-10.86,-134.66:71.15
-chr1	1051029	rs11807848	T	C	153.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.10;MQ=60.00;MQ0=0;OQ=328.64;QD=9.39;SB=-171.94	GT:AD:DP:GL:GQ	0/1:21,14:34:-46.39,-10.24,-82.90:99
-chr1	1051657	rs34530354	A	G	139.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.25;MQ0=0;OQ=341.50;QD=11.02;SB=-128.73	GT:AD:DP:GL:GQ	0/1:17,14:30:-46.47,-9.04,-63.98:99
-chr1	1051711	rs35207507	A	G	157.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=57.36;MQ0=0;OQ=232.59;QD=9.30;SB=-75.78	GT:AD:DP:GL:GQ	0/1:12,13:22:-33.17,-6.63,-47.34:99
-chr1	1051888	rs9329411	A	G	8.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=58.95;MQ0=0;OQ=307.14;QD=13.96;SB=-152.31	GT:AD:DP:GL:GQ	0/1:10,12:20:-40.02,-6.03,-35.33:99
-chr1	1052501	rs9442373	C	A	218.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.03;MQ0=0;OQ=1229.67;QD=18.35;SB=-293.35	GT:AD:DP:GL:GQ	0/1:29,38:65:-145.84,-19.58,-78.11:99
-chr1	1052907	rs7545801	A	G	1.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.49;MQ=60.00;MQ0=0;OQ=935.67;QD=29.24;SB=-247.57	GT:AD:DP:GL:GQ	1/1:0,32:30:-97.17,-9.04,-0.02:90.21
-chr1	1053104	rs4970413	G	T	111.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=59.42;MQ0=0;OQ=637.82;QD=15.95;SB=-209.62	GT:AD:DP:GL:GQ	0/1:16,24:36:-77.92,-10.85,-38.08:99
-chr1	1053355	rs55945496	G	A	154.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=58.97;MQ0=0;OQ=692.26;QD=15.38;SB=-240.56	GT:AD:DP:GL:GQ	0/1:24,21:40:-84.57,-12.06,-60.15:99
-chr1	1054398	rs6682475	G	C	62.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=3.35;MQ=57.20;MQ0=0;OQ=522.88;QD=16.34;SB=-284.57	GT:AD:DP:GL:GQ	0/1:16,16:32:-65.22,-9.65,-67.94:99
-chr1	1054533	rs7547403	C	G	0.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=4;HaplotypeScore=0.79;MQ=59.42;MQ0=0;OQ=1637.77;QD=40.94;SB=-672.45	GT:AD:DP:GL:GQ	1/1:0,40:39:-167.38,-11.75,-0.02:99
-chr1	1054665	rs2298216	T	C	152.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=59.60;MQ0=0;OQ=1938.74;QD=34.01;SB=-772.11	GT:AD:DP:GL:GQ	1/1:0,57:57:-197.48,-17.17,-0.02:99
-chr1	1055159	rs4072537	T	C	138.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.50;MQ0=0;OQ=1817.15;QD=30.80;SB=-665.83	GT:AD:DP:GL:GQ	1/1:0,59:56:-185.34,-16.89,-0.04:99
-chr1	1055460	rs9442357	C	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.04;HRun=20;HaplotypeScore=17.31;MQ=48.11;MQ0=2;OQ=1123.16;QD=23.90;SB=-311.46	GT:AD:DP:GL:GQ	1/1:9,36:37:-122.62,-11.15,-6.72:44.32
-chr1	1056122	rs4072496	G	C	273.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=828.08;QD=31.85;SB=-146.57	GT:AD:DP:GL:GQ	1/1:0,26:22:-86.41,-6.64,-0.02:66.21
-chr1	1056145	rs10907181	A	G	65.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=60.00;MQ0=0;OQ=849.61;QD=28.32;SB=-350.43	GT:AD:DP:GL:GQ	1/1:0,30:29:-88.58,-8.75,-0.04:87.15
-chr1	1056266	rs10907182	T	C	152.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.47;MQ0=0;OQ=1343.61;QD=29.86;SB=-493.15	GT:AD:DP:GL:GQ	1/1:0,45:43:-137.99,-12.97,-0.04:99
-chr1	1056679	.	A	G	17.68	PASS	AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.92;MQ0=0;OQ=622.64;QD=23.06;SB=-77.91	GT:AD:DP:GL:GQ	1/1:0,27:19:-65.86,-5.72,-0.01:57.16
-chr1	1056682	rs7513297	A	G	4.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=33.92;MQ0=0;OQ=613.60;QD=22.73;SB=-73.89	GT:AD:DP:GL:GQ	1/1:0,27:19:-64.96,-5.73,-0.01:57.15
-chr1	1056691	rs7553878	C	G	182.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.04;MQ0=0;OQ=986.57;QD=30.83;SB=-182.68	GT:AD:DP:GL:GQ	1/1:0,32:25:-102.26,-7.54,-0.01:75.24
-chr1	1056809	rs7513404	A	G	1483.16	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=11.12;MQ=36.69;MQ0=3;QD=26.02;SB=-571.97	GT:AD:DP:GL:GQ	1/1:2,55:47:-151.94,-14.18,-0.04:99
-chr1	1056815	rs7513405	A	G	1422.20	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=12.03;MQ=35.94;MQ0=3;QD=26.83;SB=-591.02	GT:AD:DP:GL:GQ	1/1:4,49:44:-145.84,-13.27,-0.03:99
-chr1	1056816	rs7516160	T	C	1466.09	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=12.03;MQ=36.53;MQ0=3;QD=27.15;SB=-727.28	GT:AD:DP:GL:GQ	1/1:3,50:47:-150.24,-14.18,-0.04:99
-chr1	1057725	rs9442374	T	G	13.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=58.50;MQ0=0;OQ=951.55;QD=30.70;SB=-471.37	GT:AD:DP:GL:GQ	1/1:0,31:29:-98.75,-8.74,-0.01:87.23
-chr1	1057728	rs9442358	A	C	4.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.48;MQ=58.50;MQ0=0;OQ=931.22;QD=30.04;SB=-418.04	GT:AD:DP:GL:GQ	1/1:1,30:28:-96.72,-8.44,-0.02:84.22
-chr1	1059288	rs9442375	C	A	11.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=37.62;MQ0=0;OQ=1307.51;QD=33.53;SB=-359.86	GT:AD:DP:GL:GQ	1/1:0,39:37:-134.35,-11.15,-0.01:99
-chr1	1059306	rs9442376	G	A	317.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=30.41;MQ0=0;OQ=1189.43;QD=32.15;SB=-404.66	GT:AD:DP:GL:GQ	1/1:0,37:31:-122.54,-9.34,-0.01:93.30
-chr1	1059314	rs9442377	G	A	1.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=29.14;MQ0=0;OQ=1298.78;QD=30.92;SB=-496.01	GT:AD:DP:GL:GQ	1/1:0,42:35:-133.48,-10.55,-0.02:99
-chr1	1059991	rs9442378	T	G	44.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.34;MQ0=0;OQ=1111.12;QD=31.75;SB=-500.92	GT:AD:DP:GL:GQ	1/1:0,35:33:-114.71,-9.94,-0.02:99
-chr1	1060304	rs9442379	C	T	128.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1793.65;QD=37.37;SB=-715.98	GT:AD:DP:GL:GQ	1/1:0,48:46:-182.96,-13.86,-0.01:99
-chr1	1060981	rs10907183	G	C	289	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.17;MQ=58.88;MQ0=0;OQ=1986.90;QD=34.26;SB=-998.16	GT:AD:DP:GL:GQ	1/1:0,58:51:-202.32,-15.40,-0.05:99
-chr1	1061055	rs6604971	T	C	165.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.35;MQ0=0;OQ=1959.28;QD=30.61;SB=-872.00	GT:AD:DP:GL:GQ	1/1:0,64:62:-199.57,-18.70,-0.06:99
-chr1	1062361	rs9442360	G	C	41.74	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;QD=13.91;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-7.58,-0.60,-0.00:6.02
-chr1	1063812	.	C	A	39.60	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=20;HaplotypeScore=10.99;MQ=49.89;MQ0=1;QD=0.94;SB=53.19	GT:AD:DP:GL:GQ	0/1:34,7:30:-16.28,-9.04,-89.71:72.44
-chr1	1064433	.	T	C	21.13	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=43.11;MQ0=1;QD=1.11;SB=5.04	GT:AD:DP:GL:GQ	0/1:14,5:14:-9.62,-4.23,-37.37:53.93
-chr1	1064508	.	A	G	48.32	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=5;HaplotypeScore=5.11;MQ=25.52;MQ0=20;QD=0.93;SB=-10.00	GT:AD:DP:GL:GQ	0/1:42,6:27:-16.25,-8.14,-83.13:81.15
-chr1	1064534	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=5.91;MQ=22.24;MQ0=19;OQ=77.81;QD=1.62;SB=-10.00	GT:AD:DP:GL:GQ	0/1:26,22:23:-17.99,-6.93,-63.10:99
-chr1	1064544	.	G	A	18.70	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=9.26;MQ=23.84;MQ0=13;QD=0.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:39,3:23:-12.08,-6.93,-67.67:51.47
-chr1	1064666	.	G	A	28.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=17.49;MQ0=7;QD=1.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:19,2:4:-7.31,-1.21,-6.24:50.32
-chr1	1064676	.	G	A	32.25	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=15.31;MQ0=8;QD=1.61;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,4:3:-7.41,-0.90,-3.57:26.65
-chr1	1064678	.	A	G	13.68	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=15.31;MQ0=8;QD=0.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,5:3:-5.54,-0.90,-4.06:31.54
-chr1	1065083	.	T	G	0.75	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=13.28;MQ0=6;OQ=72.14;QD=8.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,7:3:-10.70,-0.90,-0.00:9.03
-chr1	1065545	.	A	T	15.58	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=6.82;MQ=15.84;MQ0=10;QD=0.78;SB=-20.32	GT:AD:DP:GL:GQ	0/1:16,4:8:-7.24,-2.41,-23.49:48.29
-chr1	1065754	.	T	G	10.50	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=26.23;MQ0=5;QD=0.50;SB=-7.00	GT:AD:DP:GL:GQ	0/1:10,11:9:-7.00,-2.71,-25.01:42.93
-chr1	1065788	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=4;HaplotypeScore=1.91;MQ=35.15;MQ0=3;OQ=426.85;QD=16.42;SB=-65.33	GT:AD:DP:GL:GQ	0/1:10,16:20:-52.00,-6.03,-21.27:99
-chr1	1065876	rs34294086	G	T	14.09	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.05;MQ=16.68;MQ0=19;QD=0.25;SB=-0.98	GT:AD:DP:GL:GQ	0/1:47,10:18:-10.10,-5.43,-46.58:46.75
-chr1	1065896	rs34976191	A	G	3.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=25.24;MQ0=16;OQ=221.06;QD=5.02;SB=-47.30	GT:AD:DP:GL:GQ	0/1:32,12:17:-30.51,-5.13,-29.81:99
-chr1	1065898	rs35853231	G	A	14.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=25.42;MQ0=15;OQ=228.24;QD=5.43;SB=-22.49	GT:AD:DP:GL:GQ	0/1:33,9:15:-30.63,-4.52,-21.87:99
-chr1	1066927	rs4970357	C	A	263.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=704.25;QD=32.01;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,22:21:-74.02,-6.32,-0.01:63.19
-chr1	1067825	rs55750860	C	T	23.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.51;MQ=58.95;MQ0=0;OQ=1494.41;QD=37.36;SB=-613.01	GT:AD:DP:GL:GQ	1/1:0,40:39:-153.04,-11.75,-0.01:99
-chr1	1070149	rs1539638	G	A	498.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1278.23;QD=37.59;SB=-657.67	GT:AD:DP:GL:GQ	1/1:0,34:33:-131.42,-9.94,-0.01:99
-chr1	1070766	.	C	G	0.10	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=47.59;MQ0=0;OQ=113.71;QD=2.58;SB=-2.32	GT:AD:DP:GL:GQ	0/1:34,9:39:-26.42,-11.76,-133.80:99
-chr1	1070768	.	C	T	0.13	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=46.93;MQ0=0;OQ=115.95;QD=2.64;SB=-32.19	GT:AD:DP:GL:GQ	0/1:34,10:38:-26.33,-11.45,-104.66:99
-chr1	1070788	rs1539637	G	C	8.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=2.86;MQ=44.98;MQ0=0;OQ=574.54;QD=14.73;SB=-154.58	GT:AD:DP:GL:GQ	0/1:22,17:37:-71.91,-11.17,-77.14:99
-chr1	1070790	rs4512588	T	C	118.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.33;MQ=44.52;MQ0=0;OQ=439.51;QD=11.57;SB=-120.73	GT:AD:DP:GL:GQ	0/1:20,18:36:-58.08,-10.85,-73.14:99
-chr1	1070804	.	T	C	317.73	Indel	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=43.50;MQ0=0;QD=8.83;SB=-125.65	GT:AD:DP:GL:GQ	0/1:20,16:34:-45.31,-10.25,-78.50:99
-chr1	1070810	.	T	C	59.59	Indel	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=42.56;MQ0=0;QD=1.92;SB=-21.88	GT:AD:DP:GL:GQ	0/1:21,10:26:-17.08,-7.83,-82.36:92.43
-chr1	1070825	.	C	T	12.15	LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=46.99;MQ0=0;QD=0.45;SB=-5.49	GT:AD:DP:GL:GQ	0/1:24,3:26:-12.31,-7.84,-75.55:44.71
-chr1	1070828	.	C	T	17.92	LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=46.99;MQ0=0;QD=0.66;SB=-11.45	GT:AD:DP:GL:GQ	0/1:24,3:24:-12.30,-7.23,-73.32:50.69
-chr1	1074807	.	T	G	14.10	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=4;HaplotypeScore=1.72;MQ=58.59;MQ0=0;QD=0.43;SB=59.21	GT:AD:DP:GL:GQ	0/1:24,8:27:-12.81,-8.13,-82.30:46.77
-chr1	1075432	.	C	T	38.87	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=57.97;MQ0=0;OQ=818.81;QD=17.80;SB=-345.86	GT:AD:DP:GL:GQ	0/1:20,26:46:-99.04,-13.88,-63.69:99
-chr1	1077546	rs9442380	T	C	202.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=2295.26;QD=29.81;SB=-1162.13	GT:AD:DP:GL:GQ	1/1:0,76:73:-233.18,-22.02,-0.07:99
-chr1	1079125	rs4970358	A	G	12.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=5.70;MQ=59.35;MQ0=0;OQ=2374.58;QD=33.44;SB=-995.95	GT:AD:DP:GL:GQ	1/1:0,69:68:-244.00,-23.26,-2.96:99
-chr1	1079873	rs9442361	C	A	5.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=1.89;MQ=53.07;MQ0=0;OQ=1204.88;QD=33.47;SB=-532.76	GT:AD:DP:GL:GQ	1/1:0,36:34:-124.08,-10.24,-0.01:99
-chr1	1080440	rs6604972	A	G	531.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1807.70;QD=30.64;SB=-735.76	GT:AD:DP:GL:GQ	1/1:0,59:56:-184.40,-16.89,-0.04:99
-chr1	1082462	rs56863140	G	C	99.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=146.93;QD=24.49;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:5:-18.26,-1.52,-0.01:15.05
-chr1	1084348	rs4970360	C	T	64.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=58.41;MQ0=0;OQ=1613.83;QD=36.68;SB=-777.04	GT:AD:DP:GL:GQ	1/1:0,44:42:-164.99,-12.66,-0.02:99
-chr1	1084535	rs4970361	A	C	88.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=58.78;MQ0=1;OQ=1424.16;QD=32.37;SB=-688.05	GT:AD:DP:GL:GQ	1/1:1,43:41:-146.01,-12.35,-0.01:99
-chr1	1084601	rs4970362	A	G	229.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.53;MQ0=0;OQ=1464.98;QD=29.90;SB=-668.84	GT:AD:DP:GL:GQ	1/1:0,49:47:-150.13,-14.18,-0.04:99
-chr1	1084842	rs7538773	G	A	9.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.13;MQ0=0;OQ=1279.59;QD=36.56;SB=-199.76	GT:AD:DP:GL:GQ	1/1:0,33:33:-131.55,-9.94,-0.01:99
-chr1	1085246	rs6604973	G	A	85.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.42;MQ0=0;OQ=1511.71;QD=37.79;SB=-646.86	GT:AD:DP:GL:GQ	1/1:0,40:38:-154.76,-11.45,-0.01:99
-chr1	1085482	rs4970419	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=7;HaplotypeScore=2.24;MQ=59.45;MQ0=0;OQ=1670.84;QD=39.78;SB=-828.31	GT:AD:DP:GL:GQ	1/1:0,42:40:-170.69,-12.06,-0.02:99
-chr1	1085874	rs9442381	C	G	314.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.11;MQ0=0;OQ=1195.39;QD=38.56;SB=-412.65	GT:AD:DP:GL:GQ	1/1:0,31:28:-123.13,-8.44,-0.01:84.28
-chr1	1086061	rs9442382	C	T	139.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=990.01;QD=38.08;SB=-164.21	GT:AD:DP:GL:GQ	1/1:0,26:26:-102.60,-7.84,-0.01:78.25
-chr1	1086771	rs1539636	T	C	148.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=60.00;MQ0=0;OQ=1262.30;QD=33.22;SB=-642.89	GT:AD:DP:GL:GQ	1/1:0,38:37:-129.83,-11.15,-0.02:99
-chr1	1086955	rs1539635	G	A	48.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=56.37;MQ0=0;OQ=1687.66;QD=35.91;SB=-612.00	GT:AD:DP:GL:GQ	1/1:0,47:43:-172.36,-12.95,-0.01:99
-chr1	1086963	rs1539634	C	T	83.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.95;MQ0=0;OQ=1761.33;QD=36.69;SB=-642.86	GT:AD:DP:GL:GQ	1/1:0,48:45:-179.73,-13.56,-0.02:99
-chr1	1087150	rs9442384	T	C	36.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=59.81;MQ0=0;OQ=1429.90;QD=29.79;SB=-636.25	GT:AD:DP:GL:GQ	1/1:0,48:46:-146.63,-13.88,-0.05:99
-chr1	1087198	rs9442385	T	G	89.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=57.84;MQ0=0;OQ=1240.37;QD=26.39;SB=-556.87	GT:AD:DP:GL:GQ	1/1:0,47:40:-127.66,-12.06,-0.04:99
-chr1	1087800	rs1891907	A	G	2.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=57.36;MQ0=0;OQ=810.89;QD=32.44;SB=-193.80	GT:AD:DP:GL:GQ	1/1:0,25:24:-84.68,-7.23,-0.01:72.21
-chr1	1088284	rs12135382	C	T	198.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=312.05;QD=28.37;SB=-50.56	GT:AD:DP:GL:GQ	1/1:0,11:9:-34.79,-2.71,-0.00:27.09
-chr1	1088577	rs4379629	C	G	8.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=217.53;QD=24.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:7:-25.35,-2.12,-0.02:21.06
-chr1	1089205	rs9660710	A	C	62.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=60.00;MQ0=0;OQ=1253.07;QD=26.66;SB=-477.88	GT:AD:DP:GL:GQ	1/1:0,47:40:-128.93,-12.06,-0.03:99
-chr1	1090080	rs1891905	C	T	107.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.89;MQ0=0;OQ=1593.75;QD=37.95;SB=-678.31	GT:AD:DP:GL:GQ	1/1:0,42:41:-162.97,-12.35,-0.01:99
-chr1	1090182	rs1891904	C	A	413.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=739.19;QD=30.80;SB=-375.45	GT:AD:DP:GL:GQ	1/1:0,24:22:-77.51,-6.63,-0.01:66.17
-chr1	1090866	rs7549819	C	T	73.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=59.25;MQ0=0;OQ=998.72;QD=32.22;SB=-450.59	GT:AD:DP:GL:GQ	1/1:1,30:27:-103.47,-8.14,-0.02:81.25
-chr1	1091932	rs9442386	A	G	1.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=172.84;QD=21.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:7:-20.87,-2.12,-0.01:21.04
-chr1	1093405	rs7518873	T	C	57.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.77;MQ0=0;OQ=646.68;QD=30.79;SB=-268.71	GT:AD:DP:GL:GQ	1/1:0,21:20:-68.26,-6.03,-0.01:60.16
-chr1	1093821	rs7521584	T	G	116.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.95;MQ0=0;OQ=1316.49;QD=29.92;SB=-587.88	GT:AD:DP:GL:GQ	1/1:0,44:43:-135.27,-12.96,-0.04:99
-chr1	1095101	rs9442362	T	C	65.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=60.00;MQ0=0;OQ=375.39;QD=7.99;SB=-207.86	GT:AD:DP:GL:GQ	0/1:27,20:44:-54.09,-13.27,-100.76:99
-chr1	1095924	rs6656236	G	A	130.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=57.77;MQ0=0;OQ=609.61;QD=16.04;SB=-273.30	GT:AD:DP:GL:GQ	0/1:18,20:34:-74.49,-10.25,-50.31:99
-chr1	1096647	rs4442317	T	C	203.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=59.13;MQ0=0;OQ=506.89;QD=10.56;SB=-244.47	GT:AD:DP:GL:GQ	0/1:29,19:48:-68.44,-14.47,-111.87:99
-chr1	1114401	rs11577350	G	A	483.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1009.34;QD=13.28;SB=-463.05	GT:AD:DP:GL:GQ	0/1:45,31:75:-126.83,-22.61,-139.35:99
-chr1	1114613	rs6702156	T	C	467.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=978.73;QD=12.23;SB=-374.99	GT:AD:DP:GL:GQ	0/1:42,38:78:-124.66,-23.50,-162.90:99
-chr1	1127805	.	C	T	17.93	LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.76;MQ=47.96;MQ0=1;QD=0.48;SB=-4.44	GT:AD:DP:GL:GQ	0/1:29,6:21:-11.40,-6.33,-63.23:50.69
-chr1	1133298	rs55945303	G	A	59.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=925.55;QD=21.52;SB=-252.58	GT:AD:DP:GL:GQ	0/1:14,29:40:-107.89,-12.05,-42.24:99
-chr1	1139524	rs35878953	C	T	131.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=58.24;MQ0=0;OQ=799.98;QD=18.60;SB=-423.99	GT:AD:DP:GL:GQ	0/1:17,25:37:-94.44,-11.16,-36.66:99
-chr1	1148494	rs6603781	A	G	136.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.05;MQ0=0;OQ=1330.48;QD=27.15;SB=-433.29	GT:AD:DP:GL:GQ	1/1:0,49:42:-136.66,-12.66,-0.03:99
-chr1	1149380	rs6702268	T	C	227.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.80;MQ0=0;OQ=961.17;QD=27.46;SB=-122.75	GT:AD:DP:GL:GQ	1/1:0,35:31:-99.73,-9.35,-0.03:93.18
-chr1	1152189	rs4970423	A	G	15.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.39;MQ0=0;OQ=1088.52;QD=28.65;SB=-378.40	GT:AD:DP:GL:GQ	1/1:0,38:34:-112.46,-10.25,-0.02:99
-chr1	1161280	rs6603782	C	T	102.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=59.00;MQ0=0;OQ=708.75;QD=16.88;SB=-201.20	GT:AD:DP:GL:GQ	0/1:20,22:40:-86.21,-12.05,-64.42:99
-chr1	1162770	rs715643	C	T	309.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.65;MQ0=0;OQ=561.34;QD=14.77;SB=-301.32	GT:AD:DP:GL:GQ	0/1:18,19:36:-70.27,-10.85,-55.47:99
-chr1	1171665	.	C	T	4.62	PASS	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.39;MQ0=0;OQ=105.76;QD=11.75;SB=-6.99	GT:AD:DP:GL:GQ	0/1:5,4:9:-16.57,-2.71,-16.65:99
-chr1	1178813	.	G	C	27.28	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=10.95;MQ=55.60;MQ0=0;QD=0.43;SB=74.28	GT:AD:DP:GL:GQ	0/1:46,17:41:-18.38,-12.37,-155.87:60.10
-chr1	1182131	.	G	A	44.09	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.04;HRun=20;HaplotypeScore=11.11;MQ=50.33;MQ0=0;QD=0.85;SB=65.22	GT:AD:DP:GL:GQ	0/1:38,12:42:-20.05,-12.36,-125.30:76.92
-chr1	1183574	.	T	C	30.78	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=5;HaplotypeScore=13.00;MQ=56.93;MQ0=0;QD=0.83;SB=23.10	GT:AD:DP:GL:GQ	0/1:22,15:21:-12.69,-6.33,-67.62:63.61
-chr1	1186726	rs6659787	T	C	444.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1920.21;QD=33.11;SB=-425.81	GT:AD:DP:GL:GQ	1/1:0,58:55:-195.63,-16.57,-0.02:99
-chr1	1194535	.	A	G	16.67	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=6.08;MQ=52.52;MQ0=1;QD=0.32;SB=29.11	GT:AD:DP:GL:GQ	0/1:42,10:39:-16.70,-11.76,-128.34:49.41
-chr1	1204684	rs34258594	C	T	26.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=41.53;MQ0=1;OQ=534.60;QD=15.27;SB=-99.92	GT:AD:DP:GL:GQ	0/1:16,19:32:-66.39,-9.65,-50.26:99
-chr1	1206810	.	C	A	15.67	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=59.17;MQ0=0;QD=0.56;SB=17.05	GT:AD:DP:GL:GQ	0/1:19,7:21:-11.17,-6.33,-52.97:48.38
-chr1	1212553	.	C	T	5.74	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=5.06;MQ=57.97;MQ0=0;OQ=298.13;QD=12.96;SB=-173.70	GT:AD:DP:GL:GQ	0/1:12,11:19:-38.83,-5.73,-27.23:99
-chr1	1213523	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=15.57;MQ=33.50;MQ0=4;OQ=59.03;QD=3.28;SB=2.04	GT:AD:DP:GL:GQ	0/1:9,9:9:-11.90,-2.71,-23.47:91.86
-chr1	1213617	.	C	T	7.11	PASS	AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=18.72;MQ0=10;OQ=134.34;QD=6.72;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,15:4:-16.97,-1.20,-0.00:12.04
-chr1	1213622	.	T	C	11.33	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.30;MQ=19.74;MQ0=10;QD=0.49;SB=-3.98	GT:AD:DP:GL:GQ	0/1:20,3:7:-6.49,-2.11,-18.92:43.83
-chr1	1213635	.	C	T	23.33	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=18.06;MQ0=13;QD=0.75;SB=-33.62	GT:AD:DP:GL:GQ	0/1:24,7:9:-8.33,-2.71,-24.32:56.15
-chr1	1213653	.	C	T	47.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=17.89;MQ0=21;QD=1.00;SB=-23.48	GT:AD:DP:GL:GQ	0/1:37,11:13:-11.99,-3.92,-35.04:80.78
-chr1	1213671	.	C	T	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=22.77;MQ0=22;OQ=90.19;QD=1.80;SB=-17.46	GT:AD:DP:GL:GQ	0/1:28,22:20:-18.33,-6.03,-51.67:99
-chr1	1213694	.	T	C	39.97	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=2;HaplotypeScore=8.39;MQ=23.73;MQ0=21;QD=0.73;SB=-15.88	GT:AD:DP:GL:GQ	0/1:51,4:21:-13.61,-6.33,-64.53:72.80
-chr1	1213750	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=7.03;MQ=25.74;MQ0=11;OQ=59.44;QD=1.56;SB=-49.23	GT:AD:DP:GL:GQ	0/1:22,16:17:-14.35,-5.12,-45.82:92.28
-chr1	1213763	.	C	T	47.85	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.61;MQ0=8;QD=1.65;SB=-29.61	GT:AD:DP:GL:GQ	0/1:21,8:13:-11.99,-3.92,-33.55:80.68
-chr1	1213781	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=3.20;MQ=28.82;MQ0=7;OQ=70.59;QD=2.82;SB=-20.63	GT:AD:DP:GL:GQ	0/1:21,4:13:-14.26,-3.92,-34.86:99
-chr1	1213884	.	C	T	18.32	PASS	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=20.52;MQ0=9;OQ=123.88;QD=9.53;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,11:4:-15.92,-1.20,-0.00:12.04
-chr1	1213994	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=2;HaplotypeScore=2.99;MQ=9.42;MQ0=22;OQ=67.77;QD=1.94;SB=-42.68	GT:AD:DP:GL:GQ	0/1:31,4:4:-11.26,-1.21,-2.97:17.61
-chr1	1214386	.	C	T	18.53	PASS	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=12.80;MQ0=7;OQ=79.89;QD=6.15;SB=-52.67	GT:AD:DP:GL:GQ	1/1:3,10:3:-11.48,-0.90,-0.00:9.03
-chr1	1214538	.	C	T	13.99	PASS	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.76;MQ0=3;OQ=222.41;QD=22.24;SB=-119.99	GT:AD:DP:GL:GQ	1/1:1,9:7:-25.82,-2.11,-0.00:21.06
-chr1	1214556	.	C	T	78.88	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.62;MQ0=3;OQ=125.22;QD=13.91;SB=-42.55	GT:AD:DP:GL:GQ	1/1:2,7:4:-16.06,-1.21,-0.00:12.04
-chr1	1214569	.	C	T	4.09	PASS	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=21.21;MQ0=3;OQ=121.10;QD=17.30;SB=-81.10	GT:AD:DP:GL:GQ	1/1:3,4:4:-15.65,-1.21,-0.00:12.04
-chr1	1214849	.	T	C	10.83	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=11.01;MQ0=15;QD=0.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,8:6:-6.14,-1.81,-16.12:43.30
-chr1	1214919	.	A	T	0.53	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=20.32;MQ0=10;OQ=98.85;QD=4.94;SB=-69.74	GT:AD:DP:GL:GQ	0/1:10,9:7:-15.28,-2.11,-10.80:86.87
-chr1	1215102	.	A	T	1.26	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=20.59;MQ0=9;OQ=98.25;QD=4.91;SB=-47.98	GT:AD:DP:GL:GQ	0/1:4,16:7:-15.22,-2.11,-12.20:99
-chr1	1215147	.	T	C	24.78	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=2;HaplotypeScore=5.19;MQ=18.98;MQ0=32;QD=0.28;SB=-36.82	GT:AD:DP:GL:GQ	0/1:83,7:38:-17.21,-11.45,-127.57:57.61
-chr1	1215165	.	C	T	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=3.30;MQ=20.48;MQ0=21;OQ=101.26;QD=1.35;SB=26.10	GT:AD:DP:GL:GQ	0/1:48,27:30:-22.45,-9.04,-79.18:99
-chr1	1215324	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.60;MQ=26.05;MQ0=19;OQ=186.49;QD=2.49;SB=8.19	GT:AD:DP:GL:GQ	0/1:60,15:45:-35.50,-13.57,-130.76:99
-chr1	1227467	rs2296475	T	C	67.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=59.44;MQ0=0;OQ=1380.81;QD=33.68;SB=-616.59	GT:AD:DP:GL:GQ	1/1:0,40:39:-141.68,-11.75,-0.01:99
-chr1	1227692	rs11586188	G	A	13.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=60.00;MQ0=0;OQ=456.88;QD=14.74;SB=-204.92	GT:AD:DP:GL:GQ	0/1:15,16:30:-58.02,-9.04,-49.24:99
-chr1	1228900	.	T	C	25.48	LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=4;HaplotypeScore=1.75;MQ=56.48;MQ0=0;QD=0.75;SB=-20.62	GT:AD:DP:GL:GQ	0/1:26,7:28:-14.27,-8.44,-89.93:58.30
-chr1	1229202	rs11260584	T	G	37.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=976.99;QD=27.91;SB=-499.87	GT:AD:DP:GL:GQ	1/1:0,35:32:-101.31,-9.64,-0.03:96.16
-chr1	1229816	rs10399878	A	G	473.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1102.82;QD=26.90;SB=-522.83	GT:AD:DP:GL:GQ	1/1:0,41:37:-113.91,-11.17,-0.05:99
-chr1	1231392	rs1536168	A	G	97.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.82;MQ0=0;OQ=1395.06;QD=27.90;SB=-606.94	GT:AD:DP:GL:GQ	1/1:0,50:45:-143.13,-13.57,-0.04:99
-chr1	1231663	rs3737720	A	G	139.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=58.81;MQ0=0;OQ=1690.11;QD=30.73;SB=-679.26	GT:AD:DP:GL:GQ	1/1:0,55:50:-172.62,-15.06,-0.03:99
-chr1	1231766	rs3737719	C	G	2.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.43;MQ=58.78;MQ0=0;OQ=1400.23;QD=36.85;SB=-370.18	GT:AD:DP:GL:GQ	1/1:0,38:34:-143.63,-10.26,-0.03:99
-chr1	1232078	rs4970431	A	G	216.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1612.70;QD=32.91;SB=-685.61	GT:AD:DP:GL:GQ	1/1:0,49:46:-164.87,-13.86,-0.01:99
-chr1	1232570	rs2274262	A	G	6.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=2.33;MQ=58.39;MQ0=0;OQ=927.22;QD=31.97;SB=-261.82	GT:AD:DP:GL:GQ	1/1:0,28:29:-99.47,-11.27,-3.16:81.12
-chr1	1232846	rs2887285	G	A	7.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=60.00;MQ0=0;OQ=156.17;QD=26.03;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,5:5:-19.18,-1.51,-0.00:15.05
-chr1	1233759	rs61766198	C	T	47.25	LowQual	AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=23.62;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-8.13,-0.60,-0.00:6.02
-chr1	1235231	rs11590283	G	A	557.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1461.68;QD=36.54;SB=-745.00	GT:AD:DP:GL:GQ	1/1:1,39:37:-149.76,-11.15,-0.01:99
-chr1	1235867	rs2296474	A	G	712.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.51;MQ0=0;OQ=1812.39;QD=34.20;SB=-908.32	GT:AD:DP:GL:GQ	1/1:0,53:53:-184.85,-15.97,-0.02:99
-chr1	1237357	rs12103	T	C	207.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=647.94;QD=29.45;SB=-286.45	GT:AD:DP:GL:GQ	1/1:0,22:21:-68.40,-6.33,-0.02:63.15
-chr1	1237452	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=10;HaplotypeScore=2.81;MQ=58.76;MQ0=0;OQ=54.80;QD=4.98;SB=-3.98	GT:AD:DP:GL:GQ	0/1:7,4:6:-10.58,-1.82,-11.64:87.64
-chr1	1239050	rs12142199	G	A	66.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.62;MQ=58.97;MQ0=0;OQ=2440.21;QD=38.73;SB=-1144.03	GT:AD:DP:GL:GQ	1/1:1,62:62:-247.62,-18.68,-0.02:99
-chr1	1239352	.	C	G	26.31	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=58.82;MQ0=0;OQ=1214.59;QD=20.59;SB=-515.28	GT:AD:DP:GL:GQ	0/1:25,34:56:-141.62,-16.88,-95.25:99
-chr1	1242263	rs55998830	C	T	160.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=57.24;MQ0=0;OQ=503.69;QD=12.29;SB=-134.60	GT:AD:DP:GL:GQ	0/1:23,18:39:-65.41,-11.76,-71.08:99
-chr1	1243999	rs4970432	G	A	36.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=58.63;MQ0=0;OQ=2692.59;QD=39.60;SB=-1179.08	GT:AD:DP:GL:GQ	1/1:0,68:67:-272.86,-20.18,-0.01:99
-chr1	1244299	rs1886773	A	G	203.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.11;MQ0=0;OQ=1463.44;QD=28.14;SB=-748.56	GT:AD:DP:GL:GQ	1/1:0,52:48:-149.98,-14.48,-0.05:99
-chr1	1244306	rs1886772	G	A	170.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=58.89;MQ0=0;OQ=2428.21;QD=38.54;SB=-1150.05	GT:AD:DP:GL:GQ	1/1:0,63:62:-246.42,-18.68,-0.02:99
-chr1	1244704	rs10907179	C	G	226.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=2474.22;QD=40.56;SB=-1116.55	GT:AD:DP:GL:GQ	1/1:0,61:58:-251.03,-17.48,-0.03:99
-chr1	1245150	rs10449892	C	T	372.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1031.28;QD=35.56;SB=-512.17	GT:AD:DP:GL:GQ	1/1:0,29:28:-106.73,-8.44,-0.02:84.26
-chr1	1247456	rs1810745	A	G	110.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=54.75;MQ0=0;OQ=1043.28;QD=28.20;SB=-313.49	GT:AD:DP:GL:GQ	1/1:0,37:33:-107.94,-9.95,-0.02:99
-chr1	1256339	rs28704486	A	G	29.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=16.01;MQ0=0;OQ=60.16;QD=4.63;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:3:-9.51,-0.90,-0.00:9.02
-chr1	1258710	rs307378	T	G	2.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=76.83;QD=25.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:3:-11.17,-0.90,-0.00:9.03
-chr1	1259417	rs307377	T	C	101.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=21.92;MQ0=3;OQ=105.39;QD=15.06;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:4:-14.07,-1.20,-0.00:12.04
-chr1	1260192	rs188647	A	G	29.27	LowQual	AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=14.64;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-6.34,-0.60,-0.00:6.01
-chr1	1260222	rs307374	T	C	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=63.98;QD=21.33;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:3:-9.89,-0.91,-0.00:9.02
-chr1	1262360	rs307372	A	G	1.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.52;MQ=35.06;MQ0=0;OQ=290.20;QD=24.18;SB=-151.34	GT:AD:DP:GL:GQ	1/1:0,12:11:-32.62,-3.32,-0.02:33.05
-chr1	1262979	rs307371	A	G	118.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.17;MQ0=0;OQ=96.93;QD=24.23;SB=-72.91	GT:AD:DP:GL:GQ	1/1:0,4:4:-13.23,-1.21,-0.00:12.03
-chr1	1263141	rs307370	A	G	373.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.14;MQ0=0;OQ=479.19;QD=34.23;SB=-188.41	GT:AD:DP:GL:GQ	1/1:0,14:14:-51.51,-4.22,-0.00:42.13
-chr1	1265154	rs11582808	G	A	10.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=44.52;MQ0=0;OQ=273.35;QD=19.53;SB=-116.97	GT:AD:DP:GL:GQ	0/1:5,9:13:-34.54,-3.92,-12.73:88.15
-chr1	1266341	rs307364	T	G	24.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=22.99;MQ0=5;OQ=64.81;QD=5.40;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,10:3:-9.97,-0.90,-0.00:9.02
-chr1	1267396	rs17854636	T	C	111.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.81;MQ0=1;OQ=372.39;QD=23.27;SB=-142.72	GT:AD:DP:GL:GQ	1/1:0,16:13:-40.84,-3.92,-0.02:39.08
-chr1	1268100	rs307361	T	C	193.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.78;MQ0=3;OQ=449.98;QD=25.00;SB=-194.71	GT:AD:DP:GL:GQ	1/1:0,18:15:-48.59,-4.52,-0.01:45.11
-chr1	1268888	rs307360	A	G	2.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=29.77;MQ0=0;OQ=268.28;QD=26.83;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:9:-30.42,-2.71,-0.01:27.07
-chr1	1270382	rs307358	T	C	22.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=83.45;QD=20.86;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,4:4:-11.88,-1.21,-0.01:12.02
-chr1	1276604	.	G	C	27.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.66;MQ=11.97;MQ0=10;QD=1.29;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,12:4:-7.20,-1.21,-7.49:59.88
-chr1	1276657	rs35104845	C	T	49.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=23.40;MQ0=3;OQ=76.78;QD=6.98;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,5:3:-11.17,-0.90,-0.00:9.03
-chr1	1276684	rs61766214	G	C	3.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=32.46;MQ0=2;OQ=374.70;QD=28.82;SB=-82.81	GT:AD:DP:GL:GQ	1/1:1,12:10:-41.06,-3.02,-0.01:30.10
-chr1	1276760	rs34380086	G	C	256.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.61;MQ0=0;OQ=915.51;QD=35.21;SB=-194.53	GT:AD:DP:GL:GQ	1/1:0,26:24:-95.15,-7.24,-0.02:72.23
-chr1	1276990	rs56165241	G	A	0.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=23.71;MQ0=1;OQ=124.88;QD=20.81;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:4:-16.02,-1.20,-0.00:12.04
-chr1	1278208	rs13249	A	G	0.03	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=4;HaplotypeScore=0.79;MQ=29.00;MQ0=0;OQ=519.51;QD=34.63;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:15:-55.54,-4.52,-0.01:45.13
-chr1	1278334	rs3766183	C	T	70.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=12.77;MQ0=25;OQ=129.88;QD=4.48;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,29:4:-16.52,-1.20,-0.00:12.04
-chr1	1279774	rs4970365	G	A	205.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=37.02;MQ0=1;OQ=413.00;QD=27.53;SB=-81.33	GT:AD:DP:GL:GQ	1/1:0,15:12:-44.89,-3.62,-0.01:36.11
-chr1	1283627	rs34841888	G	C	242.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=17.25;MQ0=18;OQ=165.64;QD=7.20;SB=-87.83	GT:AD:DP:GL:GQ	1/1:0,23:5:-20.13,-1.51,-0.00:15.05
-chr1	1284791	rs2649608	A	G	15.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=325.53;QD=25.04;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:12:-36.15,-3.62,-0.02:36.07
-chr1	1285186	rs34389364	G	A	48.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=44.84;MQ0=0;OQ=775.48;QD=28.72;SB=-269.63	GT:AD:DP:GL:GQ	1/1:0,25:23:-81.16,-6.94,-0.03:69.18
-chr1	1285266	rs34876581	T	C	166.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=42.89;MQ0=0;OQ=1629.47;QD=31.95;SB=-823.96	GT:AD:DP:GL:GQ	1/1:0,51:47:-166.55,-14.16,-0.02:99
-chr1	1285545	rs61766236	A	G	14.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=53.58;MQ0=0;OQ=756.88;QD=26.10;SB=-99.85	GT:AD:DP:GL:GQ	1/1:0,29:25:-79.29,-7.54,-0.02:75.15
-chr1	1285750	.	T	C	31.55	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=14.50;MQ0=6;QD=3.94;SB=-38.95	GT:AD:DP:GL:GQ	1/1:0,8:2:-6.56,-0.60,-0.00:6.01
-chr1	1286016	rs2765027	T	G	82.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=481.12;QD=30.07;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:16:-51.71,-4.82,-0.01:48.07
-chr1	1286554	rs2765025	C	G	315.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.90;MQ0=0;OQ=1204.51;QD=36.50;SB=-193.69	GT:AD:DP:GL:GQ	1/1:0,33:29:-124.04,-8.74,-0.01:87.29
-chr1	1286681	rs2765024	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=715.35;QD=35.77;SB=-192.69	GT:AD:DP:GL:GQ	1/1:0,20:18:-75.13,-5.42,-0.01:54.18
-chr1	1286922	rs35056373	G	A	454.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.41;MQ0=1;OQ=1368.71;QD=34.22;SB=-459.59	GT:AD:DP:GL:GQ	1/1:0,40:36:-140.48,-10.85,-0.02:99
-chr1	1287079	rs2649611	A	G	142	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.17;MQ0=0;OQ=99.93;QD=24.98;SB=-76.36	GT:AD:DP:GL:GQ	1/1:0,4:4:-13.53,-1.21,-0.00:12.03
-chr1	1287285	rs2765021	C	T	19.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=27.13;MQ0=1;OQ=211.29;QD=26.41;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:6:-24.70,-1.81,-0.00:18.06
-chr1	1287346	.	G	A	32.26	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.41;MQ=19.54;MQ0=6;QD=3.23;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,5:4:-7.72,-1.21,-5.84:46.31
-chr1	1287498	rs34896744	G	A	28.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=522.90;QD=37.35;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,14:14:-55.88,-4.22,-0.00:42.14
-chr1	1288153	.	C	T	10.16	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=6.84;MQ0=17;QD=0.56;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,3:1:-4.26,-0.30,-0.00:1.76
-chr1	1288274	rs4970439	C	T	158.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.76;MQ0=1;OQ=198.94;QD=24.87;SB=-120.99	GT:AD:DP:GL:GQ	1/1:0,8:6:-23.47,-1.81,-0.00:18.06
-chr1	1288396	rs9700464	T	G	39.49	LowQual	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.48;MQ0=3;QD=7.90;SB=-46.01	GT:AD:DP:GL:GQ	1/1:0,5:2:-7.36,-0.60,-0.00:6.02
-chr1	1288400	rs2477784	C	T	45.25	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.37;MQ0=1;QD=15.08;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-7.93,-0.60,-0.00:6.02
-chr1	1288965	.	T	C	42.83	LowQual	AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=3;HaplotypeScore=1.16;MQ=15.81;MQ0=3;QD=8.57;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,2:2:-7.69,-0.60,-0.00:6.02
-chr1	1288989	.	G	A	32	LowQual	AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.68;MQ0=2;QD=8.00;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,2:2:-6.61,-0.60,-0.00:6.01
-chr1	1288993	.	G	A	39.02	LowQual	AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.68;MQ0=2;QD=9.75;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,2:2:-7.31,-0.60,-0.00:6.02
-chr1	1289038	.	G	A	46.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=8.33;MQ0=16;QD=2.56;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,2:2:-8.01,-0.60,-0.00:6.02
-chr1	1289229	rs28368296	C	T	48.25	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.08;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,2:2:-8.23,-0.60,-0.00:6.02
-chr1	1292190	.	A	C	28.74	DPFilter;HARD_TO_VALIDATE;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=31.67;MQ=32.93;MQ0=5;QD=1.44;SB=2.03	GT:AD:DP:GL:GQ	0/1:14,6:12:-9.77,-3.62,-33.18:61.57
-chr1	1292271	rs61766242	A	G	18.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=30.84;MQ0=4;OQ=1066.32;QD=26.66;SB=-193.80	GT:AD:DP:GL:GQ	1/1:0,40:32:-110.23,-9.64,-0.01:96.27
-chr1	1292418	rs3104610	C	T	418.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=45.84;MQ0=1;OQ=2220.73;QD=38.96;SB=-760.52	GT:AD:DP:GL:GQ	1/1:0,57:55:-225.67,-16.57,-0.01:99
-chr1	1297501	rs2649597	T	C	2.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.11;MQ0=4;OQ=360.28;QD=22.52;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:12:-39.62,-3.62,-0.01:36.08
-chr1	1298491	rs2477775	A	G	32.28	LowQual	AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=16.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-6.64,-0.60,-0.00:6.02
-chr1	1298734	rs2649595	A	T	1.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.11;MQ0=1;OQ=88.08;QD=22.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,4:3:-12.30,-0.90,-0.00:9.03
-chr1	1300531	rs2242398	A	C	250.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.82;MQ0=0;OQ=470.94;QD=31.40;SB=-111.01	GT:AD:DP:GL:GQ	1/1:0,15:15:-50.69,-4.52,-0.01:45.12
-chr1	1300838	rs2649594	C	T	51.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.25;MQ0=5;OQ=315.14;QD=22.51;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,14:9:-35.10,-2.71,-0.01:27.08
-chr1	1300941	rs2649592	G	T	12.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.29;MQ0=5;OQ=256.28;QD=18.31;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,14:8:-29.21,-2.41,-0.00:24.07
-chr1	1302674	rs34582295	C	T	6.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.06;MQ=25.59;MQ0=11;OQ=374.66;QD=16.29;SB=-144.64	GT:AD:DP:GL:GQ	1/1:0,23:11:-41.06,-3.32,-0.01:33.10
-chr1	1303447	rs11489820	G	C	2.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=7.53;MQ0=41;OQ=125.53;QD=2.73;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,46:4:-16.09,-1.21,-0.00:12.04
-chr1	1304035	rs2477777	C	T	175.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.74;MQ0=4;OQ=578.49;QD=28.92;SB=-248.33	GT:AD:DP:GL:GQ	1/1:0,20:15:-61.44,-4.52,-0.00:45.15
-chr1	1304333	rs2313135	T	G	34.29	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.98;MQ0=4;QD=4.90;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,2:3:-7.61,-0.90,-3.34:24.36
-chr1	1304907	rs2368566	G	A	186.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.16;MQ0=0;OQ=83.01;QD=27.67;SB=-45.55	GT:AD:DP:GL:GQ	1/1:0,3:3:-11.79,-0.90,-0.00:9.03
-chr1	1305206	rs2368565	G	A	178.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=123.88;QD=30.97;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,4:4:-15.92,-1.20,-0.00:12.04
-chr1	1305756	rs2454652	C	T	47.02	LowQual	AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=23.51;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-8.11,-0.60,-0.00:6.02
-chr1	1306033	rs2649587	G	A	6.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=34.70;MQ0=1;OQ=503.12;QD=31.45;SB=-129.67	GT:AD:DP:GL:GQ	1/1:0,16:14:-53.90,-4.22,-0.01:42.13
-chr1	1306331	rs2649586	A	G	0.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=29.00;MQ0=0;OQ=293.94;QD=24.50;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,11:10:-32.98,-3.01,-0.01:30.07
-chr1	1307502	.	C	G	13.29	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=4.50;MQ0=24;QD=0.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:26,1:1:-4.59,-0.30,-0.00:1.76
-chr1	1307925	.	G	C	0.13	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=13.45;MQ0=29;OQ=83.85;QD=1.78;SB=-0.97	GT:AD:DP:GL:GQ	0/1:38,9:8:-14.08,-2.41,-22.17:99
-chr1	1307979	.	T	C	42.83	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=7.67;MQ0=16;QD=2.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:13,5:2:-7.69,-0.60,-0.00:6.02
-chr1	1308095	.	C	G	10.99	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.17;HRun=1;HaplotypeScore=14.74;MQ=6.41;MQ0=25;QD=0.38;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,4:1:-4.35,-0.30,-0.00:1.76
-chr1	1321841	.	G	T	47.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=20;HaplotypeScore=6.03;MQ=23.98;MQ0=9;QD=1.65;SB=-0.97	GT:AD:DP:GL:GQ	0/1:18,11:6:-9.89,-1.81,-11.27:80.77
-chr1	1323299	rs1240743	C	A	6.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=38.33;MQ0=6;OQ=144.07;QD=3.27;SB=50.03	GT:AD:DP:GL:GQ	0/1:30,14:36:-28.54,-10.85,-84.17:99
-chr1	1332475	rs2275915	G	C	24.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=31.54;MQ0=6;OQ=92.26;QD=5.77;SB=-43.44	GT:AD:DP:GL:GQ	0/1:8,8:10:-15.53,-3.02,-24.58:99
-chr1	1346911	.	G	A	0.08	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=8.57;MQ=40.33;MQ0=2;OQ=331.50;QD=8.72;SB=-7.00	GT:AD:DP:GL:GQ	0/1:22,16:33:-46.38,-9.94,-72.87:99
-chr1	1349702	.	C	A	0.66	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=5.78;MQ=19.45;MQ0=7;OQ=297.18;QD=9.29;SB=-141.76	GT:AD:DP:GL:GQ	0/1:14,17:13:-36.92,-3.92,-7.86:39.43
-chr1	1352746	rs58304223	G	C	14.25	LowQual	AC=1;AF=0.50;AN=2;DB;DP=1;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=14.25;SB=-10.00	GT:AD:DP:GL:GQ	0/1:0,1:1:-4.69,-0.30,-0.00:1.76
-chr1	1353363	.	G	T	42.81	LowQual	AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=37.00;MQ0=0;QD=21.40;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-7.69,-0.60,-0.00:6.02
-chr1	1355197	rs1781138	A	G	15.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=39.89;MQ0=3;OQ=305.23;QD=16.96;SB=-38.95	GT:AD:DP:GL:GQ	1/1:0,18:10:-34.11,-3.01,-0.00:30.08
-chr1	1358462	rs1240703	A	C	0.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=21.92;MQ0=3;OQ=100.91;QD=14.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:4:-13.63,-1.21,-0.00:12.03
-chr1	1358648	.	C	G	24.94	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=3;HaplotypeScore=2.70;MQ=19.30;MQ0=6;QD=1.19;SB=5.05	GT:AD:DP:GL:GQ	0/1:13,8:7:-7.89,-2.11,-21.96:57.76
-chr1	1377530	rs1781144	C	G	16.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=20.51;MQ0=10;OQ=394.74;QD=19.74;SB=-103.85	GT:AD:DP:GL:GQ	1/1:0,20:10:-43.06,-3.01,-0.00:30.10
-chr1	1380491	.	G	A	10.40	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=6;HaplotypeScore=29.42;MQ=36.22;MQ0=8;QD=0.18;SB=26.07	GT:AD:DP:GL:GQ	0/1:33,26:17:-9.41,-5.13,-45.72:42.82
-chr1	1390605	rs1240723	T	C	30.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.36;MQ=30.70;MQ0=2;OQ=239.92;QD=7.06;SB=-41.82	GT:AD:DP:GL:GQ	0/1:20,14:26:-35.12,-7.84,-56.30:99
-chr1	1390829	.	C	T	33.01	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=3;HaplotypeScore=8.88;MQ=28.73;MQ0=9;QD=1.00;SB=26.10	GT:AD:DP:GL:GQ	0/1:27,6:18:-12.01,-5.42,-52.81:65.84
-chr1	1394381	.	T	G	40.77	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=20.66;MQ0=17;QD=0.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:31,13:12:-10.98,-3.61,-30.75:73.61
-chr1	1398226	.	C	T	36.49	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=10.21;MQ0=21;QD=1.46;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,13:3:-7.84,-0.90,-3.10:21.92
-chr1	1410500	rs35871802	C	T	116.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.49;MQ0=17;OQ=181.39;QD=6.05;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,18:11:-24.74,-3.31,-17.34:99
-chr1	1413144	.	G	A	12.73	PASS	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=22.29;MQ0=2;OQ=489.12;QD=14.82;SB=-131.14	GT:AD:DP:GL:GQ	0/1:17,16:30:-61.25,-9.05,-41.87:99
-chr1	1414249	.	G	C	31.95	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=2;HaplotypeScore=6.60;MQ=15.28;MQ0=13;QD=1.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,6:4:-7.69,-1.21,-7.60:63.89
-chr1	1423959	rs1781141	T	G	30.05	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=21.23;MQ0=4;QD=1.58;SB=5.04	GT:AD:DP:GL:GQ	0/1:13,6:14:-10.50,-4.22,-40.36:62.88
-chr1	1424829	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=20;HaplotypeScore=5.78;MQ=28.83;MQ0=9;OQ=77.31;QD=1.98;SB=59.13	GT:AD:DP:GL:GQ	0/1:32,7:28:-19.45,-8.44,-75.28:99
-chr1	1424855	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=20;HaplotypeScore=4.13;MQ=29.08;MQ0=4;OQ=54.78;QD=1.96;SB=29.12	GT:AD:DP:GL:GQ	0/1:21,7:17:-13.88,-5.12,-48.25:87.62
-chr1	1425922	rs28755011	C	T	122.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.56;MQ0=1;OQ=756.68;QD=16.45;SB=-222.92	GT:AD:DP:GL:GQ	0/1:21,25:43:-91.92,-12.96,-62.88:99
-chr1	1430132	rs3104609	A	G	485.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.69;MQ0=1;OQ=1088.71;QD=31.11;SB=-534.36	GT:AD:DP:GL:GQ	1/1:0,35:33:-112.47,-9.94,-0.02:99
-chr1	1447936	rs3118507	A	G	40.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=47.98;MQ0=0;OQ=209.16;QD=6.97;SB=-124.72	GT:AD:DP:GL:GQ	0/1:20,10:26:-32.03,-7.83,-67.04:99
-chr1	1450120	rs6603789	G	C	0.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=28.41;MQ0=9;OQ=784.91;QD=23.09;SB=-55.93	GT:AD:DP:GL:GQ	1/1:6,28:20:-82.08,-6.03,-0.01:60.20
-chr1	1450953	rs3128345	A	G	6.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=8.00;MQ=58.21;MQ0=0;OQ=533.48;QD=10.67;SB=-234.27	GT:AD:DP:GL:GQ	0/1:28,22:48:-71.10,-14.47,-106.23:99
-chr1	1457784	.	T	A	85.12	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.74;MQ0=0;OQ=950.58;QD=15.09;SB=-335.63	GT:AD:DP:GL:GQ	0/1:32,31:63:-117.32,-18.98,-122.45:99
-chr1	1458041	rs6694994	T	C	138.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.26;MQ0=0;OQ=499.68;QD=12.19;SB=-117.64	GT:AD:DP:GL:GQ	0/1:20,21:38:-64.71,-11.46,-68.00:99
-chr1	1459409	rs3128344	G	A	558.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.45;MQ0=0;OQ=1638.56;QD=37.24;SB=-778.68	GT:AD:DP:GL:GQ	1/1:0,43:42:-167.45,-12.65,-0.01:99
-chr1	1461502	.	A	C	42.07	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=57.05;MQ0=0;QD=2.63;SB=14.06	GT:AD:DP:GL:GQ	0/1:8,8:12:-11.11,-3.62,-27.42:74.90
-chr1	1461910	rs3118505	C	T	45.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=58.35;MQ0=0;OQ=649.92;QD=17.57;SB=-339.91	GT:AD:DP:GL:GQ	0/1:17,20:34:-78.52,-10.25,-48.35:99
-chr1	1462403	rs1571148	T	G	289.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=414.06;QD=9.41;SB=-126.87	GT:AD:DP:GL:GQ	0/1:27,17:41:-57.04,-12.35,-89.89:99
-chr1	1462736	rs4259576	T	A	334.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=60.00;MQ0=0;OQ=380.45;QD=11.19;SB=-195.57	GT:AD:DP:GL:GQ	0/1:20,14:33:-51.27,-9.94,-69.97:99
-chr1	1464030	rs1571149	A	G	400.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=649.88;QD=11.01;SB=-311.08	GT:AD:DP:GL:GQ	0/1:30,29:55:-84.85,-16.58,-112.84:99
-chr1	1464167	rs1571150	C	A	91.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.52;MQ0=0;OQ=665.06;QD=17.05;SB=-221.93	GT:AD:DP:GL:GQ	0/1:16,23:39:-81.54,-11.75,-55.47:99
-chr1	1464327	rs56239289	T	C	341.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=731.44;QD=11.99;SB=-372.97	GT:AD:DP:GL:GQ	0/1:31,30:58:-93.91,-17.48,-117.75:99
-chr1	1464734	rs9439465	G	C	86.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=410.54;QD=15.21;SB=-187.22	GT:AD:DP:GL:GQ	0/1:13,14:25:-51.89,-7.55,-46.69:99
-chr1	1468557	rs55694463	C	G	72.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.11;MQ0=0;OQ=367.44;QD=14.13;SB=-116.67	GT:AD:DP:GL:GQ	0/1:13,13:22:-46.66,-6.63,-46.00:99
-chr1	1468920	rs61777888	A	T	11.23	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=40.58;MQ0=0;QD=1.12;SB=2.00	GT:AD:DP:GL:GQ	0/1:8,2:6:-6.19,-1.81,-11.86:43.73
-chr1	1471211	rs3766177	T	C	144.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=59.42;MQ0=0;OQ=424.79;QD=8.50;SB=-61.74	GT:AD:DP:GL:GQ	0/1:28,22:46:-59.63,-13.86,-111.57:99
-chr1	1472873	rs7517401	G	A	289.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=59.55;MQ0=0;OQ=742.89;QD=14.57;SB=-367.87	GT:AD:DP:GL:GQ	0/1:27,24:48:-92.05,-14.47,-78.97:99
-chr1	1474833	rs7515814	C	G	227.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.23;MQ0=0;OQ=1418.95;QD=20.87;SB=-692.35	GT:AD:DP:GL:GQ	0/1:30,38:67:-165.38,-20.20,-121.41:99
-chr1	1476697	rs3128342	C	A	175.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=1.77;MQ=59.37;MQ0=0;OQ=1038.77;QD=15.74;SB=-518.96	GT:AD:DP:GL:GQ	0/1:32,34:66:-127.04,-19.88,-111.54:99
-chr1	1478935	rs3930748	A	G	131.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=57.35;MQ0=0;OQ=678.62;QD=14.44;SB=-210.49	GT:AD:DP:GL:GQ	0/1:18,29:41:-83.51,-12.36,-58.93:99
-chr1	1479484	rs11590038	T	C	187.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=60.00;MQ0=0;OQ=498.05;QD=12.45;SB=-267.61	GT:AD:DP:GL:GQ	0/1:17,23:38:-64.56,-11.47,-62.93:99
-chr1	1479489	rs11588893	C	T	162.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=60.00;MQ0=0;OQ=580.48;QD=15.69;SB=-263.76	GT:AD:DP:GL:GQ	0/1:17,20:34:-71.58,-10.25,-50.12:99
-chr1	1479533	rs7531530	C	T	220.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=59.18;MQ0=1;OQ=444.32;QD=12.01;SB=-149.64	GT:AD:DP:GL:GQ	0/1:19,18:31:-57.07,-9.35,-49.87:99
-chr1	1479791	rs7366884	T	C	122.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=816.32;QD=13.61;SB=-418.23	GT:AD:DP:GL:GQ	0/1:30,30:57:-102.08,-17.17,-116.37:99
-chr1	1479937	rs7366635	A	G	20.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=59.07;MQ0=0;OQ=292.89;QD=6.51;SB=-136.53	GT:AD:DP:GL:GQ	0/1:30,15:42:-45.23,-12.66,-112.08:99
-chr1	1480024	rs3753332	A	G	36.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.44;MQ0=0;OQ=490.38;QD=11.96;SB=-170.97	GT:AD:DP:GL:GQ	0/1:21,20:37:-63.47,-11.15,-78.00:99
-chr1	1480095	rs3753331	T	C	462.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=783.79;QD=15.07;SB=-339.35	GT:AD:DP:GL:GQ	0/1:24,28:51:-97.03,-15.37,-89.70:99
-chr1	1480422	rs3820075	A	G	268.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=768.88;QD=14.24;SB=-360.10	GT:AD:DP:GL:GQ	0/1:23,31:53:-96.15,-15.98,-92.13:99
-chr1	1480490	rs3753330	T	A	237.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=615.93;QD=11.41;SB=-300.65	GT:AD:DP:GL:GQ	0/1:28,26:50:-79.94,-15.07,-101.11:99
-chr1	1480556	.	C	T	26.64	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.59;MQ0=0;OQ=854.85;QD=18.58;SB=-376.92	GT:AD:DP:GL:GQ	0/1:20,26:44:-102.04,-13.27,-56.58:99
-chr1	1481114	rs12048706	T	C	201.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=57.91;MQ0=0;OQ=878.58;QD=11.87;SB=-292.17	GT:AD:DP:GL:GQ	0/1:36,38:70:-112.24,-21.10,-138.24:99
-chr1	1484218	rs3118509	T	C	19.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1926.74;QD=28.76;SB=-881.49	GT:AD:DP:GL:GQ	1/1:0,67:60:-196.31,-18.09,-0.05:99
-chr1	1484946	rs6667347	G	C	188.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.64;MQ0=0;OQ=1104.15;QD=17.25;SB=-384.86	GT:AD:DP:GL:GQ	0/1:33,31:63:-132.69,-18.99,-142.09:99
-chr1	1485056	rs3118508	A	G	123.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.54;MQ0=0;OQ=1673.18;QD=28.36;SB=-768.59	GT:AD:DP:GL:GQ	1/1:0,59:54:-170.96,-16.29,-0.05:99
-chr1	1486871	rs3766170	T	C	6.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=1.66;MQ=57.15;MQ0=0;OQ=440.82;QD=8.82;SB=-192.43	GT:AD:DP:GL:GQ	0/1:28,22:46:-61.23,-13.87,-105.72:99
-chr1	1488802	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=20;HaplotypeScore=27.79;MQ=52.29;MQ0=1;OQ=57.57;QD=0.82;SB=89.30	GT:AD:DP:GL:GQ	0/1:49,20:48:-23.51,-14.47,-151.88:90.40
-chr1	1489161	rs9439468	A	G	111.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=56.25;MQ0=0;OQ=911.03;QD=16.56;SB=-250.50	GT:AD:DP:GL:GQ	0/1:21,34:50:-109.45,-15.06,-75.57:99
-chr1	1490804	rs6603791	A	G	440.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=55.41;MQ0=0;OQ=778.85;QD=12.98;SB=-348.06	GT:AD:DP:GL:GQ	0/1:28,32:58:-98.65,-17.48,-110.76:99
-chr1	1490867	.	C	G	0.31	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=53.32;MQ0=0;OQ=206.00;QD=2.71;SB=-32.07	GT:AD:DP:GL:GQ	0/1:64,12:75:-46.49,-22.61,-271.24:99
-chr1	1490871	.	A	G	0.08	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=53.82;MQ0=0;OQ=220.05;QD=2.75;SB=-14.75	GT:AD:DP:GL:GQ	0/1:66,14:78:-48.79,-23.50,-263.73:99
-chr1	1490927	rs6656541	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=23.59;MQ=53.32;MQ0=0;OQ=1558.39;QD=20.51;SB=-788.78	GT:AD:DP:GL:GQ	0/1:23,53:74:-181.42,-22.29,-76.04:99
-chr1	1490930	rs12730242	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=22.45;MQ=53.65;MQ0=0;OQ=417.53;QD=5.49;SB=-224.35	GT:AD:DP:GL:GQ	0/1:55,21:70:-66.13,-21.09,-238.86:99
-chr1	1490948	rs12742689	T	C	0.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=53.98;MQ0=0;OQ=96.30;QD=1.23;SB=-34.35	GT:AD:DP:GL:GQ	0/1:66,12:72:-34.61,-21.70,-240.60:99
-chr1	1490950	rs12730248	C	T	0.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=54.06;MQ0=0;OQ=172.01;QD=2.18;SB=-98.81	GT:AD:DP:GL:GQ	0/1:67,11:73:-45.59,-25.10,-225.19:99
-chr1	1491329	rs7543799	G	A	29	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.33;MQ=58.37;MQ0=0;OQ=592.32;QD=13.16;SB=-320.34	GT:AD:DP:GL:GQ	0/1:24,21:38:-73.97,-11.45,-67.99:99
-chr1	1492958	rs7367692	G	A	226.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=59.16;MQ0=0;OQ=759.07;QD=13.80;SB=-311.80	GT:AD:DP:GL:GQ	0/1:31,24:51:-94.56,-15.37,-89.99:99
-chr1	1492962	rs7364711	A	C	163.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=59.20;MQ0=0;OQ=581.10;QD=10.02;SB=-270.86	GT:AD:DP:GL:GQ	0/1:35,23:56:-78.26,-16.87,-122.50:99
-chr1	1493671	rs11578409	C	G	251.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=59.04;MQ0=0;OQ=1371.84;QD=13.45;SB=-443.87	GT:AD:DP:GL:GQ	0/1:57,45:96:-169.40,-28.93,-244.12:99
-chr1	1493791	rs7550471	G	A	6.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=5.83;MQ=58.91;MQ0=0;OQ=1272.31;QD=21.21;SB=-593.09	GT:AD:DP:GL:GQ	0/1:20,38:56:-150.16,-19.64,-65.04:99
-chr1	1494423	rs7552586	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=6;HaplotypeScore=3.99;MQ=59.04;MQ0=0;OQ=1025.73;QD=12.36;SB=-469.22	GT:AD:DP:GL:GQ	0/1:45,38:80:-129.96,-24.11,-158.72:99
-chr1	1494904	rs6603792	T	C	342.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=427.21;QD=9.94;SB=-158.94	GT:AD:DP:GL:GQ	0/1:24,19:43:-58.97,-12.96,-97.93:99
-chr1	1495118	rs6603793	C	T	185.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.74;MQ0=0;OQ=1162.21;QD=15.92;SB=-407.71	GT:AD:DP:GL:GQ	0/1:38,35:73:-141.49,-21.99,-140.54:99
-chr1	1495830	rs7548959	C	T	131.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=58.74;MQ0=0;OQ=1025.47;QD=14.65;SB=-444.99	GT:AD:DP:GL:GQ	0/1:38,32:69:-126.64,-20.81,-114.78:99
-chr1	1495898	rs7540231	G	A	67.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=1.75;MQ=58.44;MQ0=0;OQ=3508.72;QD=37.73;SB=-1621.33	GT:AD:DP:GL:GQ	1/1:0,92:90:-349.87,-27.12,-0.03:99
-chr1	1497229	rs9439469	G	A	187.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.17;MQ0=0;OQ=210.39;QD=8.42;SB=-10.00	GT:AD:DP:GL:GQ	0/1:17,8:25:-31.85,-7.53,-57.26:99
-chr1	1497775	rs61774865	A	C	52.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.97;MQ0=0;OQ=260.15;QD=7.88;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,13:31:-38.64,-9.34,-70.58:99
-chr1	1498322	rs9439473	A	G	18.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=56.11;MQ0=0;OQ=610.76;QD=13.57;SB=-249.32	GT:AD:DP:GL:GQ	0/1:21,24:44:-77.63,-13.27,-79.03:99
-chr1	1498506	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=5;HaplotypeScore=2.45;MQ=50.85;MQ0=0;OQ=161.89;QD=3.37;SB=24.24	GT:AD:DP:GL:GQ	0/1:38,10:40:-31.52,-12.05,-112.23:99
-chr1	1498508	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=15;HaplotypeScore=1.82;MQ=51.05;MQ0=0;OQ=196.72;QD=4.01;SB=27.81	GT:AD:DP:GL:GQ	0/1:38,11:41:-35.31,-12.36,-104.62:99
-chr1	1498897	rs7520996	T	C	291.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=56.74;MQ0=0;OQ=1344.56;QD=17.46;SB=-662.63	GT:AD:DP:GL:GQ	0/1:31,46:75:-160.33,-22.59,-123.58:99
-chr1	1499019	rs7518083	A	G	453.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.97;MQ0=0;OQ=1144.84;QD=14.49;SB=-308.25	GT:AD:DP:GL:GQ	0/1:39,40:76:-140.66,-22.89,-155.49:99
-chr1	1499688	rs6666293	A	G	47.16	LowQual	AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=1.90;MQ=53.03;MQ0=0;QD=6.74;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,3:5:-9.51,-1.51,-8.01:65.07
-chr1	1500664	rs7519837	C	T	335.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=543.75;QD=13.59;SB=-294.78	GT:AD:DP:GL:GQ	0/1:21,19:39:-69.41,-11.75,-74.55:99
-chr1	1500967	rs7556282	G	C	209.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=56.81;MQ0=0;OQ=874.72;QD=17.85;SB=-362.79	GT:AD:DP:GL:GQ	0/1:21,27:44:-104.04,-13.28,-69.73:99
-chr1	1501107	rs4590622	G	A	74.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=35.43;MQ0=2;OQ=406.87;QD=8.30;SB=-78.55	GT:AD:DP:GL:GQ	0/1:30,19:38:-55.43,-11.46,-75.84:99
-chr1	1501178	rs4618908	T	C	437.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.31;MQ0=1;OQ=645.96;QD=14.68;SB=-291.48	GT:AD:DP:GL:GQ	0/1:19,25:40:-79.93,-12.05,-65.32:99
-chr1	1504046	.	C	T	7.57	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=59.17;MQ0=0;OQ=1022.24;QD=18.25;SB=-279.21	GT:AD:DP:GL:GQ	0/1:26,30:52:-121.18,-15.67,-71.09:99
-chr1	1504960	rs9331751	T	A	36.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=4.88;MQ=56.51;MQ0=1;OQ=1100.76;QD=14.11;SB=-360.40	GT:AD:DP:GL:GQ	0/1:39,39:73:-135.35,-21.99,-132.17:99
-chr1	1506133	rs9442407	C	T	139.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=35.12;MQ0=12;OQ=825.82;QD=11.16;SB=-394.16	GT:AD:DP:GL:GQ	0/1:42,32:54:-102.14,-16.28,-92.88:99
-chr1	1509564	rs9442406	T	C	136.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=56.80;MQ0=0;OQ=711.41;QD=13.42;SB=-198.20	GT:AD:DP:GL:GQ	0/1:27,26:51:-89.79,-15.37,-103.56:99
-chr1	1510588	rs28788874	C	T	634.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.10;MQ0=1;OQ=2154.00;QD=35.90;SB=-1071.35	GT:AD:DP:GL:GQ	1/1:0,60:56:-219.01,-16.88,-0.03:99
-chr1	1510832	rs6666084	A	G	27.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=29.16;MQ0=1;OQ=863.94;QD=22.15;SB=-357.32	GT:AD:DP:GL:GQ	1/1:0,34:29:-93.05,-11.63,-3.07:85.61
-chr1	1511143	rs6679999	C	T	270.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.32;MQ0=0;OQ=967.03;QD=37.19;SB=-287.88	GT:AD:DP:GL:GQ	1/1:0,26:25:-100.30,-7.53,-0.01:75.24
-chr1	1511216	.	T	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=40.83;MQ0=0;OQ=921.95;QD=25.61;SB=-124.48	GT:AD:DP:GL:GQ	0/1:7,29:35:-106.02,-10.55,-27.02:99
-chr1	1511668	rs4648786	A	G	87.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=58.14;MQ0=0;OQ=1843.13;QD=31.78;SB=-498.18	GT:AD:DP:GL:GQ	1/1:0,58:57:-187.94,-17.18,-0.05:99
-chr1	1511869	rs4648787	C	T	29.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.56;MQ=56.20;MQ0=1;OQ=2155.57;QD=37.82;SB=-1079.94	GT:AD:DP:GL:GQ	1/1:1,56:55:-219.17,-16.58,-0.02:99
-chr1	1511922	rs4648612	C	T	25.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=42.53;MQ0=1;OQ=1102.46;QD=35.56;SB=-299.68	GT:AD:DP:GL:GQ	1/1:1,30:28:-113.84,-8.43,-0.01:84.28
-chr1	1512199	rs4648613	T	C	554.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.33;MQ0=0;OQ=1584.81;QD=33.02;SB=-688.28	GT:AD:DP:GL:GQ	1/1:0,48:45:-162.08,-13.55,-0.01:99
-chr1	1512230	rs28809773	G	A	465.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=52.87;MQ0=0;OQ=1755.99;QD=36.58;SB=-748.51	GT:AD:DP:GL:GQ	1/1:0,48:45:-179.20,-13.56,-0.01:99
-chr1	1512325	.	G	A	85.65	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=55.47;MQ0=0;OQ=776.49;QD=14.65;SB=-378.86	GT:AD:DP:GL:GQ	0/1:28,24:51:-96.30,-15.37,-89.39:99
-chr1	1512595	rs4366263	A	G	19.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.13;MQ=56.40;MQ0=0;OQ=1310.46;QD=34.49;SB=-610.36	GT:AD:DP:GL:GQ	1/1:0,38:38:-134.64,-11.45,-0.01:99
-chr1	1512656	rs28778974	C	T	131.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=49.50;MQ0=1;OQ=1426.66;QD=34.80;SB=-730.49	GT:AD:DP:GL:GQ	1/1:1,40:37:-146.26,-11.15,-0.01:99
-chr1	1512790	rs61774869	C	T	40.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=48.67;MQ0=1;OQ=1682.46;QD=36.58;SB=-840.63	GT:AD:DP:GL:GQ	1/1:2,44:43:-171.84,-12.95,-0.01:99
-chr1	1513302	rs9725077	G	A	148.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=48.17;MQ0=1;OQ=1464.10;QD=34.05;SB=-687.33	GT:AD:DP:GL:GQ	1/1:1,42:38:-150.01,-11.45,-0.01:99
-chr1	1514300	rs9442423	T	C	34.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.59;MQ0=0;OQ=266.23;QD=6.83;SB=-0.97	GT:AD:DP:GL:GQ	0/1:24,15:34:-40.16,-10.25,-85.89:99
-chr1	1514394	.	C	T	901.86	Indel	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.65;MQ0=0;QD=14.78;SB=-128.11	GT:AD:DP:GL:GQ	0/1:33,28:59:-111.26,-17.79,-98.57:99
-chr1	1514734	rs9442403	A	G	0.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=12.23;MQ=53.49;MQ0=0;OQ=367.70;QD=7.99;SB=-54.31	GT:AD:DP:GL:GQ	0/1:25,19:37:-51.21,-11.16,-85.57:99
-chr1	1514861	.	A	T	164.64	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.34;MQ0=0;OQ=646.82;QD=13.76;SB=-331.07	GT:AD:DP:GL:GQ	0/1:25,22:46:-81.82,-13.86,-91.60:99
-chr1	1515925	rs6681422	T	C	152.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.53;MQ0=0;OQ=534.97;QD=11.15;SB=-174.52	GT:AD:DP:GL:GQ	0/1:23,25:43:-69.74,-12.96,-84.05:99
-chr1	1516662	rs12735276	A	G	21.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.05;MQ=57.32;MQ0=1;OQ=2133.75;QD=30.05;SB=-1092.47	GT:AD:DP:GL:GQ	1/1:2,69:66:-217.02,-19.91,-0.06:99
-chr1	1516946	rs10157140	T	C	503.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.65;MQ0=0;OQ=1116.09;QD=14.69;SB=-475.23	GT:AD:DP:GL:GQ	0/1:37,39:76:-137.79,-22.90,-145.96:99
-chr1	1517815	.	T	C	151.98	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.19;MQ0=0;OQ=718.93;QD=11.41;SB=-330.87	GT:AD:DP:GL:GQ	0/1:32,31:61:-93.57,-18.39,-126.83:99
-chr1	1518089	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=19;HaplotypeScore=19.37;MQ=53.15;MQ0=1;OQ=397.54;QD=5.76;SB=50.30	GT:AD:DP:GL:GQ	0/1:45,23:60:-60.81,-17.78,-147.22:99
-chr1	1518109	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.01;HRun=19;HaplotypeScore=9.39;MQ=51.76;MQ0=1;OQ=216.06;QD=2.63;SB=62.19	GT:AD:DP:GL:GQ	0/1:54,27:58:-42.07,-17.18,-142.92:99
-chr1	1518112	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=77;Dels=0.01;HRun=4;HaplotypeScore=9.55;MQ=51.62;MQ0=1;OQ=92.02;QD=1.20;SB=65.18	GT:AD:DP:GL:GQ	0/1:56,20:51:-27.56,-15.07,-144.06:99
-chr1	1518863	rs12725297	G	C	139.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=58.84;MQ0=0;OQ=1568.02;QD=18.67;SB=-365.83	GT:AD:DP:GL:GQ	0/1:39,45:81:-184.49,-24.41,-167.76:99
-chr1	1518975	rs12725449	G	C	178.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.97;MQ0=0;OQ=2276.77;QD=38.59;SB=-1002.01	GT:AD:DP:GL:GQ	1/1:0,59:56:-231.29,-16.89,-0.03:99
-chr1	1519320	rs28566709	T	C	64.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=59.59;MQ0=0;OQ=477.78;QD=8.53;SB=-190.61	GT:AD:DP:GL:GQ	0/1:33,23:51:-66.44,-15.38,-114.90:99
-chr1	1519374	rs28662991	T	C	77.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.56;MQ0=0;OQ=635.95;QD=12.23;SB=-285.60	GT:AD:DP:GL:GQ	0/1:29,23:51:-82.25,-15.37,-108.55:99
-chr1	1519813	rs28503881	A	G	211.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.02;MQ0=0;OQ=531.98;QD=8.58;SB=-234.91	GT:AD:DP:GL:GQ	0/1:35,27:58:-73.97,-17.49,-134.84:99
-chr1	1519842	rs4648788	T	C	59.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=56.83;MQ0=0;OQ=1829.71;QD=27.72;SB=-554.05	GT:AD:DP:GL:GQ	1/1:0,66:57:-186.60,-17.18,-0.04:99
-chr1	1519857	.	G	C	3.15	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=5.53;MQ=56.98;MQ0=0;OQ=985.46;QD=15.64;SB=-338.06	GT:AD:DP:GL:GQ	0/1:28,35:57:-119.03,-17.20,-116.72:99
-chr1	1519861	rs28689700	C	G	213.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=56.88;MQ0=0;OQ=841.97;QD=13.80;SB=-287.94	GT:AD:DP:GL:GQ	0/1:30,31:57:-104.69,-17.21,-125.41:99
-chr1	1520060	rs4648789	A	C	15.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=4;HaplotypeScore=1.27;MQ=50.71;MQ0=0;OQ=838.47;QD=14.46;SB=-329.82	GT:AD:DP:GL:GQ	0/1:26,32:54:-103.41,-16.28,-79.25:99
-chr1	1520063	rs4648790	C	T	336.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=51.65;MQ0=0;OQ=926.60;QD=15.19;SB=-418.36	GT:AD:DP:GL:GQ	0/1:30,31:60:-114.03,-18.08,-107.59:99
-chr1	1520195	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.02;HRun=0;HaplotypeScore=46.04;MQ=50.13;MQ0=3;OQ=55.61;QD=0.49;SB=110.40	GT:AD:DP:GL:GQ	0/1:96,14:92:-36.27,-27.42,-356.52:88.45
-chr1	1520222	.	G	A	94.09	SnpCluster	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=77.51;MQ=46.35;MQ0=0;QD=0.80;SB=-48.89	GT:AD:DP:GL:GQ	0/1:102,15:106:-44.62,-31.93,-348.40:99
-chr1	1520225	.	G	C	344.68	SnpCluster	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=69.75;MQ=44.94;MQ0=0;QD=2.92;SB=-153.13	GT:AD:DP:GL:GQ	0/1:100,18:110:-70.90,-33.15,-412.65:99
-chr1	1520229	.	C	G	412.05	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=94.26;MQ=43.35;MQ0=0;QD=3.41;SB=-151.44	GT:AD:DP:GL:GQ	0/1:103,18:106:-76.44,-31.95,-372.75:99
-chr1	1520237	.	G	C	91.10	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=128;Dels=0.05;HRun=0;HaplotypeScore=131.86;MQ=42.98;MQ0=0;QD=0.71;SB=13.51	GT:AD:DP:GL:GQ	0/1:106,16:113:-45.55,-33.15,-430.26:99
-chr1	1520238	rs61774873	T	A	718.56	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.05;HRun=0;HaplotypeScore=125.70;MQ=43.01;MQ0=0;QD=5.75;SB=-75.62	GT:AD:DP:GL:GQ	0/1:71,41:100:-122.71,-47.57,-247.49:99
-chr1	1520243	.	C	G	225.05	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=118.32;MQ=42.36;MQ0=0;QD=1.77;SB=107.39	GT:AD:DP:GL:GQ	0/1:107,20:111:-59.26,-33.47,-404.28:99
-chr1	1520250	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=130;Dels=0.03;HRun=1;HaplotypeScore=70.65;MQ=43.20;MQ0=0;OQ=629.57;QD=4.84;SB=-297.59	GT:AD:DP:GL:GQ	0/1:85,37:107:-98.49,-32.25,-308.33:99
-chr1	1520281	rs61774874	G	C	511.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=95.68;MQ=43.19;MQ0=0;QD=4.13;SB=-246.08	GT:AD:DP:GL:GQ	0/1:99,25:103:-85.52,-31.04,-362.79:99
-chr1	1520285	.	G	C	387.17	SnpCluster	AC=1;AF=0.50;AN=2;DP=119;Dels=0.01;HRun=0;HaplotypeScore=65.61;MQ=43.42;MQ0=0;QD=3.25;SB=-155.15	GT:AD:DP:GL:GQ	0/1:98,20:100:-71.84,-29.84,-355.29:99
-chr1	1520289	rs62642589	C	G	93.31	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.01;HRun=0;HaplotypeScore=35.98;MQ=43.17;MQ0=0;QD=0.77;SB=134.48	GT:AD:DP:GL:GQ	0/1:107,13:109:-45.17,-32.56,-411.19:99
-chr1	1520331	rs28654137	C	G	48.96	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.01;HRun=0;HaplotypeScore=27.98;MQ=47.63;MQ0=0;QD=0.60;SB=18.43	GT:AD:DP:GL:GQ	0/1:72,9:75:-30.78,-22.60,-290.44:81.79
-chr1	1520344	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=73;Dels=0.01;HRun=0;HaplotypeScore=35.55;MQ=46.62;MQ0=0;OQ=147.13;QD=2.02;SB=-55.25	GT:AD:DP:GL:GQ	0/1:57,14:62:-36.39,-18.39,-179.58:99
-chr1	1520377	.	C	G	26.02	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=20.54;MQ=46.26;MQ0=1;QD=0.42;SB=59.22	GT:AD:DP:GL:GQ	0/1:52,10:48:-20.35,-14.47,-182.03:58.84
-chr1	1520381	rs28593368	C	G	11.70	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=9.32;MQ=47.21;MQ0=1;QD=0.18;SB=37.38	GT:AD:DP:GL:GQ	0/1:58,8:56:-21.30,-16.87,-217.45:44.23
-chr1	1520469	rs11488585	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.01;HRun=0;HaplotypeScore=36.86;MQ=43.53;MQ0=4;OQ=2355.10;QD=23.55;SB=-1049.66	GT:AD:DP:GL:GQ	0/1:35,63:89:-265.31,-26.51,-115.33:99
-chr1	1520498	.	G	A	0.22	PASS	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=42.41;MQ0=4;OQ=313.12;QD=3.48;SB=-164.48	GT:AD:DP:GL:GQ	0/1:71,19:76:-57.51,-22.91,-206.14:99
-chr1	1520609	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=16.97;MQ=45.11;MQ0=1;OQ=1017.74;QD=9.51;SB=-327.71	GT:AD:DP:GL:GQ	0/1:72,34:94:-133.38,-28.32,-275.79:99
-chr1	1520627	.	T	C	0.10	PASS	AC=2;AF=1.00;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=10.65;MQ=46.29;MQ0=2;OQ=3224.03;QD=30.42;SB=-1396.99	GT:AD:DP:GL:GQ	1/1:0,101:93:-329.81,-30.68,-3.83:99
-chr1	1520757	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=47.64;MQ0=6;OQ=89.81;QD=0.88;SB=110.39	GT:AD:DP:GL:GQ	0/1:91,11:89:-39.08,-26.81,-310.80:99
-chr1	1520774	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=99;Dels=0.01;HRun=0;HaplotypeScore=56.31;MQ=48.08;MQ0=6;OQ=62.24;QD=0.63;SB=110.34	GT:AD:DP:GL:GQ	0/1:89,9:83:-34.23,-24.72,-231.51:95.08
-chr1	1520787	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=96;Dels=0.04;HRun=0;HaplotypeScore=27.20;MQ=49.95;MQ0=4;OQ=173.92;QD=1.81;SB=77.51	GT:AD:DP:GL:GQ	0/1:78,14:87:-45.69,-25.01,-305.10:99
-chr1	1520821	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=51.43;MQ0=1;OQ=216.93;QD=2.55;SB=101.36	GT:AD:DP:GL:GQ	0/1:69,16:80:-49.07,-24.10,-269.00:99
-chr1	1520848	.	G	A	0.20	PASS	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=50.21;MQ0=2;OQ=302.35;QD=3.44;SB=74.15	GT:AD:DP:GL:GQ	0/1:72,16:76:-56.43,-22.92,-203.92:99
-chr1	1520892	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=71.05;MQ=51.39;MQ0=2;OQ=950.76;QD=9.51;SB=-387.75	GT:AD:DP:GL:GQ	0/1:63,37:86:-124.27,-25.91,-211.22:99
-chr1	1520953	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=74;Dels=0.01;HRun=0;HaplotypeScore=47.85;MQ=52.80;MQ0=2;OQ=265.98;QD=3.59;SB=-146.32	GT:AD:DP:GL:GQ	0/1:59,14:61:-47.97,-18.09,-205.99:99
-chr1	1520957	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=21.78;MQ=53.36;MQ0=2;OQ=105.70;QD=1.55;SB=-47.11	GT:AD:DP:GL:GQ	0/1:59,9:55:-30.43,-16.57,-209.84:99
-chr1	1520979	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=45.80;MQ=49.11;MQ0=2;OQ=234.58;QD=3.72;SB=-118.04	GT:AD:DP:GL:GQ	0/1:53,10:50:-41.81,-15.07,-172.68:99
-chr1	1521029	.	C	G	208.12	Indel	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=31.42;MQ=47.45;MQ0=1;QD=3.20;SB=-33.62	GT:AD:DP:GL:GQ	0/1:53,12:61:-42.48,-18.38,-218.36:99
-chr1	1521111	.	C	G	34.71	LowQual	AC=1;AF=0.50;AN=2;DP=75;Dels=0.05;HRun=0;HaplotypeScore=51.94;MQ=49.50;MQ0=5;QD=0.46;SB=-34.07	GT:AD:DP:GL:GQ	0/1:62,9:60:-24.84,-18.09,-231.30:67.54
-chr1	1521139	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=19.29;MQ=49.73;MQ0=4;OQ=471.32;QD=8.42;SB=-237.06	GT:AD:DP:GL:GQ	0/1:38,18:43:-63.38,-12.96,-121.81:99
-chr1	1521149	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=50;Dels=0.04;HRun=0;HaplotypeScore=25.97;MQ=51.25;MQ0=5;OQ=94.80;QD=1.90;SB=0.71	GT:AD:DP:GL:GQ	0/1:42,6:42:-25.43,-12.66,-151.77:99
-chr1	1521416	.	G	A	908.87	Indel	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=49.66;MQ0=7;QD=12.12;SB=-403.37	GT:AD:DP:GL:GQ	0/1:47,28:66:-114.05,-19.88,-141.06:99
-chr1	1521692	.	G	A	0.94	PASS	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=9.14;MQ=58.40;MQ0=0;OQ=1252.37;QD=15.27;SB=-600.00	GT:AD:DP:GL:GQ	0/1:41,41:79:-152.32,-23.80,-150.35:99
-chr1	1521772	rs36210710	A	G	0.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=15.96;MQ=57.04;MQ0=1;OQ=875.12;QD=13.46;SB=-359.37	GT:AD:DP:GL:GQ	0/1:32,33:57:-107.96,-17.17,-110.70:99
-chr1	1522125	rs28569178	A	G	2.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=5.24;MQ=53.41;MQ0=0;OQ=1519.29;QD=31.65;SB=-783.99	GT:AD:DP:GL:GQ	1/1:0,48:43:-155.53,-12.95,-0.01:99
-chr1	1522142	rs35051391	A	C	34.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=4.14;MQ=53.19;MQ0=0;OQ=509.94;QD=11.86;SB=-251.92	GT:AD:DP:GL:GQ	0/1:20,23:38:-65.73,-11.45,-61.61:99
-chr1	1522705	.	C	T	4.71	PASS	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=50.65;MQ0=0;OQ=133.19;QD=16.65;SB=-79.09	GT:AD:DP:GL:GQ	0/1:3,5:8:-19.01,-2.41,-10.59:81.80
-chr1	1524477	rs11552172	T	C	56.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.17;MQ0=0;OQ=436.12;QD=15.58;SB=-113.68	GT:AD:DP:GL:GQ	0/1:12,16:28:-55.34,-8.44,-45.31:99
-chr1	1527039	rs4075469	A	C	248.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.34;MQ0=0;OQ=696.22;QD=16.58;SB=-340.88	GT:AD:DP:GL:GQ	0/1:16,26:40:-84.95,-12.05,-59.28:99
-chr1	1527300	rs7554569	C	T	296.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=424.42;QD=8.16;SB=-236.55	GT:AD:DP:GL:GQ	0/1:35,17:46:-59.60,-13.87,-96.44:99
-chr1	1527750	.	C	A	254.99	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=986.18;QD=16.71;SB=-374.21	GT:AD:DP:GL:GQ	0/1:26,33:55:-118.47,-16.57,-69.65:99
-chr1	1527909	.	G	A	103.61	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.52;MQ0=0;OQ=783.03;QD=16.31;SB=-358.36	GT:AD:DP:GL:GQ	0/1:23,25:47:-95.76,-14.17,-71.60:99
-chr1	1528300	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=10.61;MQ=58.05;MQ0=0;OQ=286.83;QD=5.98;SB=62.19	GT:AD:DP:GL:GQ	0/1:26,22:41:-44.32,-12.35,-90.74:99
-chr1	1529232	rs6656591	T	C	65.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.39;MQ=56.33;MQ0=0;OQ=1005.79;QD=17.65;SB=-491.70	GT:AD:DP:GL:GQ	0/1:23,34:55:-120.43,-16.57,-83.35:99
-chr1	1529445	rs6691649	G	A	161.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.46;MQ0=0;OQ=1057.94;QD=19.59;SB=-480.07	GT:AD:DP:GL:GQ	0/1:20,34:51:-124.45,-15.37,-67.92:99
-chr1	1529817	rs4075275	G	C	15.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=58.35;MQ0=0;OQ=1607.65;QD=30.92;SB=-720.33	GT:AD:DP:GL:GQ	1/1:0,52:40:-164.38,-12.07,-0.03:99
-chr1	1530590	.	C	T	27.41	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=55.36;MQ0=0;OQ=363.07;QD=13.45;SB=-133.59	GT:AD:DP:GL:GQ	0/1:14,13:26:-47.43,-7.84,-42.81:99
-chr1	1530910	.	G	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=6.92;MQ=37.58;MQ0=2;OQ=79.86;QD=5.32;SB=-10.00	GT:AD:DP:GL:GQ	0/1:7,8:5:-12.78,-1.51,-7.90:63.88
-chr1	1530912	.	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=2;HaplotypeScore=4.15;MQ=38.11;MQ0=2;OQ=71.50;QD=5.11;SB=-6.99	GT:AD:DP:GL:GQ	0/1:4,10:6:-12.24,-1.81,-12.03:99
-chr1	1530952	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=8.79;MQ=42.16;MQ0=2;OQ=53.35;QD=3.33;SB=-39.44	GT:AD:DP:GL:GQ	0/1:11,5:9:-11.33,-2.71,-25.48:86.19
-chr1	1530975	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=5.18;MQ=46.58;MQ0=0;OQ=57.06;QD=3.57;SB=5.04	GT:AD:DP:GL:GQ	0/1:12,4:12:-12.60,-3.61,-32.43:89.90
-chr1	1531008	.	C	G	10.82	LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=2;HaplotypeScore=6.64;MQ=46.16;MQ0=1;QD=0.52;SB=-26.85	GT:AD:DP:GL:GQ	0/1:16,5:11:-7.66,-3.33,-32.36:43.28
-chr1	1531060	.	A	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=9.36;MQ=36.61;MQ0=1;OQ=116.93;QD=7.31;SB=-3.99	GT:AD:DP:GL:GQ	0/1:5,10:9:-17.69,-2.71,-12.57:98.57
-chr1	1531096	.	C	T	31.46	LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=8.94;MQ=35.04;MQ0=1;QD=3.15;SB=-6.99	GT:AD:DP:GL:GQ	0/1:5,5:4:-7.64,-1.21,-6.67:54.60
-chr1	1531214	.	C	T	12.58	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=48.08;MQ0=0;QD=0.90;SB=-28.53	GT:AD:DP:GL:GQ	0/1:11,2:10:-7.53,-3.02,-23.43:45.17
-chr1	1531255	.	G	A	2.13	PASS	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=54.60;MQ0=0;OQ=208.62;QD=17.39;SB=-121.64	GT:AD:DP:GL:GQ	0/1:2,10:8:-26.44,-2.41,-2.60:1.87
-chr1	1531316	.	A	T	48.17	LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=48.85;MQ0=0;QD=2.01;SB=-30.94	GT:AD:DP:GL:GQ	0/1:15,8:14:-12.32,-4.22,-35.65:81.01
-chr1	1531334	.	C	T	13.43	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=45.60;MQ0=1;QD=0.56;SB=5.01	GT:AD:DP:GL:GQ	0/1:15,7:11:-7.93,-3.32,-25.96:46.07
-chr1	1531359	.	G	A	17.07	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=4.20;MQ=46.76;MQ0=1;QD=0.74;SB=11.04	GT:AD:DP:GL:GQ	0/1:19,4:19:-10.71,-5.73,-55.15:49.82
-chr1	1531380	.	C	G	42.65	LowQual	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=3;HaplotypeScore=7.66;MQ=46.38;MQ0=2;QD=1.42;SB=-45.68	GT:AD:DP:GL:GQ	0/1:23,7:24:-14.78,-7.24,-85.75:75.49
-chr1	1531419	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=2;HaplotypeScore=5.63;MQ=45.92;MQ0=1;OQ=63.73;QD=3.03;SB=23.10	GT:AD:DP:GL:GQ	0/1:16,5:18:-15.09,-5.43,-50.86:96.57
-chr1	1531527	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=3.70;MQ=32.41;MQ0=1;OQ=75.08;QD=3.75;SB=-44.95	GT:AD:DP:GL:GQ	0/1:9,10:9:-13.51,-2.71,-17.78:99
-chr1	1531545	.	G	C	27.47	LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=8.08;MQ=36.24;MQ0=1;QD=1.37;SB=-32.85	GT:AD:DP:GL:GQ	0/1:18,2:9:-8.74,-2.71,-27.23:60.30
-chr1	1531547	.	C	G	25.49	LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=8.42;MQ=36.81;MQ0=1;QD=1.34;SB=-27.40	GT:AD:DP:GL:GQ	0/1:14,5:6:-7.64,-1.81,-15.17:58.31
-chr1	1532873	rs9442420	T	C	73.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.50;MQ0=0;OQ=1279.49;QD=27.81;SB=-597.57	GT:AD:DP:GL:GQ	1/1:0,46:41:-131.57,-12.37,-0.04:99
-chr1	1533487	rs61774903	T	C	6.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.07;MQ0=0;OQ=267.71;QD=10.71;SB=-22.90	GT:AD:DP:GL:GQ	0/1:12,13:23:-36.99,-6.93,-45.73:99
-chr1	1533846	.	C	A	150.54	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=607.30;QD=13.20;SB=-294.38	GT:AD:DP:GL:GQ	0/1:23,23:45:-77.57,-13.56,-81.22:99
-chr1	1534313	.	G	A	286.31	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.20;MQ0=0;OQ=679.07;QD=15.09;SB=-355.53	GT:AD:DP:GL:GQ	0/1:22,23:43:-84.16,-12.97,-66.20:99
-chr1	1535152	rs6671612	G	T	108.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.91;MQ=57.71;MQ0=0;OQ=838.64;QD=11.98;SB=-304.64	GT:AD:DP:GL:GQ	0/1:41,29:64:-106.43,-19.29,-110.69:99
-chr1	1536167	rs11492279	C	T	248.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=60.00;MQ0=0;OQ=1040.79;QD=15.31;SB=-440.43	GT:AD:DP:GL:GQ	0/1:36,32:64:-126.65,-19.29,-102.67:99
-chr1	1536812	rs4612573	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.03;HRun=1;HaplotypeScore=39.15;MQ=49.08;MQ0=0;OQ=1478.03;QD=23.09;SB=-556.56	GT:AD:DP:GL:GQ	1/1:5,57:50:-162.89,-15.07,-11.50:35.64
-chr1	1537429	rs4369171	A	G	1.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=7.54;MQ=57.32;MQ0=0;OQ=2121.87;QD=33.68;SB=-744.31	GT:AD:DP:GL:GQ	1/1:0,62:59:-215.79,-17.77,-0.02:99
-chr1	1537803	.	G	T	52.70	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=13;HaplotypeScore=28.28;MQ=58.09;MQ0=1;QD=0.71;SB=63.90	GT:AD:DP:GL:GQ	0/1:60,13:55:-25.14,-16.58,-155.96:85.54
-chr1	1537805	.	T	C	135.64	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=41.12;MQ=58.24;MQ0=1;QD=2.02;SB=15.89	GT:AD:DP:GL:GQ	0/1:57,10:56:-33.73,-16.88,-176.73:99
-chr1	1538333	.	A	G	136.38	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.86;MQ0=0;OQ=748.93;QD=13.87;SB=-356.58	GT:AD:DP:GL:GQ	0/1:27,27:53:-94.15,-15.98,-99.69:99
-chr1	1538565	rs9442431	T	C	829.64	Indel	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=7.58;MQ=50.06;MQ0=1;QD=21.83;SB=-151.73	GT:AD:DP:GL:GQ	1/1:0,37:28:-86.58,-8.45,-0.03:84.18
-chr1	1538664	rs9442430	T	C	1.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.01;HRun=1;HaplotypeScore=8.39;MQ=59.12;MQ0=0;OQ=2182.53;QD=31.63;SB=-555.08	GT:AD:DP:GL:GQ	1/1:0,68:67:-221.88,-20.20,-0.05:99
-chr1	1539012	rs34501155	C	T	24.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.10;MQ=59.44;MQ0=0;OQ=1523.49;QD=20.31;SB=-698.38	GT:AD:DP:GL:GQ	0/1:29,46:74:-177.93,-22.30,-104.96:99
-chr1	1539217	rs12066	G	A	112.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2269.66;QD=38.47;SB=-1077.37	GT:AD:DP:GL:GQ	1/1:0,59:57:-230.57,-17.17,-0.02:99
-chr1	1539583	.	C	T	13.58	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.17;MQ=59.69;MQ0=0;OQ=849.58;QD=14.16;SB=-408.41	GT:AD:DP:GL:GQ	0/1:34,26:60:-106.31,-18.07,-125.62:99
-chr1	1540565	rs4648611	A	G	1.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=4.13;MQ=58.95;MQ0=0;OQ=632.46;QD=28.75;SB=-329.75	GT:AD:DP:GL:GQ	1/1:0,22:20:-66.85,-6.03,-0.02:60.13
-chr1	1541790	rs7418389	T	C	9.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=644.37;QD=28.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,23:21:-68.04,-6.33,-0.01:63.14
-chr1	1542618	rs6604985	T	C	187.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.49;MQ0=0;OQ=2789.66;QD=34.02;SB=-860.05	GT:AD:DP:GL:GQ	1/1:0,82:81:-282.58,-24.40,-0.03:99
-chr1	1543361	rs28546565	G	A	262.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.46;MQ0=0;OQ=627.76;QD=14.60;SB=-285.20	GT:AD:DP:GL:GQ	0/1:20,23:40:-78.11,-12.05,-70.94:99
-chr1	1543456	rs28623434	C	G	8.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=2.93;MQ=59.20;MQ0=0;OQ=2332.23;QD=40.21;SB=-1030.14	GT:AD:DP:GL:GQ	1/1:0,58:55:-236.83,-16.57,-0.02:99
-chr1	1543533	rs9442410	G	C	82.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=2713.47;QD=43.07;SB=-1108.14	GT:AD:DP:GL:GQ	1/1:0,63:62:-274.95,-18.68,-0.02:99
-chr1	1544225	rs9442425	G	A	33.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.11;MQ=59.22;MQ0=0;OQ=1855.01;QD=38.65;SB=-869.17	GT:AD:DP:GL:GQ	1/1:0,48:47:-189.10,-14.16,-0.01:99
-chr1	1545229	rs9329576	T	C	4.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=60.00;MQ0=0;OQ=1266.55;QD=28.15;SB=-625.18	GT:AD:DP:GL:GQ	1/1:0,45:39:-130.27,-11.76,-0.03:99
-chr1	1545852	rs7543265	G	A	8.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=6.32;MQ=58.20;MQ0=0;OQ=611.29;QD=15.67;SB=-238.27	GT:AD:DP:GL:GQ	0/1:17,20:35:-74.97,-10.56,-46.23:99
-chr1	1546595	rs34983251	G	A	45.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=59.23;MQ0=0;OQ=349.98;QD=11.67;SB=-133.57	GT:AD:DP:GL:GQ	0/1:16,14:26:-46.12,-7.83,-51.50:99
-chr1	1547538	rs28710339	G	C	59.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=3.45;MQ=58.50;MQ0=0;OQ=866.08;QD=15.47;SB=-347.43	GT:AD:DP:GL:GQ	0/1:31,25:53:-105.89,-16.00,-107.63:99
-chr1	1547753	.	C	T	52.88	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.60;MQ0=0;OQ=1139.64;QD=19.99;SB=-512.06	GT:AD:DP:GL:GQ	0/1:22,35:54:-133.53,-16.28,-63.46:99
-chr1	1548655	rs12755088	T	C	97.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=439.27;QD=24.40;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,18:16:-47.54,-4.84,-0.03:48.08
-chr1	1548983	.	C	G	40.73	LowQual	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=5;HaplotypeScore=1.58;MQ=47.12;MQ0=0;QD=6.79;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,5:2:-7.48,-0.61,-0.00:6.02
-chr1	1549329	rs28617190	G	A	97.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.74;MQ=57.37;MQ0=0;OQ=547.08;QD=16.09;SB=-253.53	GT:AD:DP:GL:GQ	0/1:16,18:32:-67.63,-9.64,-54.05:99
-chr1	1549834	rs12748433	C	T	442.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.23;MQ0=0;OQ=1400.65;QD=37.86;SB=-569.32	GT:AD:DP:GL:GQ	1/1:0,37:36:-143.66,-10.85,-0.01:99
-chr1	1549963	rs28441650	G	A	319.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.05;MQ0=0;OQ=739.99;QD=15.10;SB=-342.91	GT:AD:DP:GL:GQ	0/1:25,24:48:-91.75,-14.47,-81.34:99
-chr1	1551048	.	G	A	13.72	PASS	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=55.20;MQ0=0;OQ=331.40;QD=13.81;SB=-96.94	GT:AD:DP:GL:GQ	0/1:12,12:21:-42.75,-6.33,-33.17:99
-chr1	1551194	.	G	A	9.75	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.45;MQ0=0;OQ=497.08;QD=14.62;SB=-108.95	GT:AD:DP:GL:GQ	0/1:18,16:33:-62.94,-9.95,-55.65:99
-chr1	1552758	rs12735861	C	T	11.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=56.58;MQ0=0;OQ=143.44;QD=15.94;SB=-6.99	GT:AD:DP:GL:GQ	0/1:3,6:8:-20.04,-2.41,-9.16:67.50
-chr1	1553652	.	C	A	57.28	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.52;MQ0=0;OQ=736.76;QD=15.35;SB=-347.43	GT:AD:DP:GL:GQ	0/1:23,25:44:-90.22,-13.26,-60.84:99
-chr1	1554057	rs3935032	C	T	0.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=59.31;MQ0=0;OQ=580.92;QD=21.52;SB=-104.60	GT:AD:DP:GL:GQ	0/1:9,18:26:-69.21,-7.83,-32.29:99
-chr1	1555931	rs28730454	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=7;HaplotypeScore=0.32;MQ=55.21;MQ0=0;OQ=59.16;QD=11.83;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:3:-9.41,-0.90,-0.00:9.02
-chr1	1556023	rs28464684	T	C	13.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=73.72;QD=24.57;SB=-40.68	GT:AD:DP:GL:GQ	1/1:0,3:3:-10.86,-0.90,-0.00:9.03
-chr1	1556952	rs28451771	T	C	12.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=601.05;QD=31.63;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,19:19:-63.70,-5.72,-0.01:57.14
-chr1	1561503	rs61774909	G	T	0.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=9.65;MQ0=29;OQ=78.96;QD=2.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,16:3:-11.38,-0.90,-0.00:9.03
-chr1	1563882	rs61774911	A	G	1.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=39.06;MQ0=5;OQ=124.38;QD=2.76;SB=-85.66	GT:AD:DP:GL:GQ	0/1:34,10:35:-26.27,-10.55,-104.24:99
-chr1	1563939	rs9442413	G	A	8.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=40.26;MQ0=2;OQ=315.22;QD=4.50;SB=-153.56	GT:AD:DP:GL:GQ	0/1:51,19:59:-52.60,-17.79,-143.72:99
-chr1	1564183	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=20;HaplotypeScore=14.98;MQ=46.49;MQ0=5;OQ=64.66;QD=1.80;SB=35.13	GT:AD:DP:GL:GQ	0/1:31,5:28:-18.18,-8.44,-79.86:97.49
-chr1	1564572	rs28401288	T	G	29.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=41.92;MQ0=1;OQ=1158.48;QD=27.58;SB=-476.97	GT:AD:DP:GL:GQ	1/1:0,42:35:-119.45,-10.55,-0.02:99
-chr1	1565479	rs28394074	T	C	98.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=12.86;MQ0=16;OQ=207.25;QD=7.68;SB=-36.94	GT:AD:DP:GL:GQ	1/1:0,27:7:-24.31,-2.11,-0.00:21.06
-chr1	1565699	.	C	G	5.41	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.34;MQ=26.47;MQ0=10;OQ=657.44;QD=8.65;SB=-346.42	GT:AD:DP:GL:GQ	0/1:55,21:62:-87.73,-18.71,-164.80:99
-chr1	1566499	rs3765908	G	A	18.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.75;MQ=37.81;MQ0=3;OQ=1730.84;QD=29.34;SB=-752.15	GT:AD:DP:GL:GQ	1/1:8,51:54:-192.27,-16.27,-15.84:4.30
-chr1	1566866	rs3819995	C	T	33.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=17.30;MQ0=34;OQ=418.63;QD=7.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:21,36:18:-50.57,-5.43,-18.99:99
-chr1	1567043	rs1137001	C	T	0.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=9.65;MQ0=38;OQ=66.77;QD=1.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:35,15:6:-11.77,-1.81,-10.91:90.99
-chr1	1569585	rs61774912	C	T	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=8.98;MQ=13.84;MQ0=43;OQ=132.92;QD=1.51;SB=-3.99	GT:AD:DP:GL:GQ	0/1:64,24:26:-24.41,-7.83,-74.67:99
-chr1	1569917	rs6688326	C	A	0.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=26.34;MQ0=26;OQ=227.69;QD=3.04;SB=-87.75	GT:AD:DP:GL:GQ	0/1:58,17:44:-39.31,-13.26,-117.30:99
-chr1	1570601	rs4648767	T	A	243.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=24.85;MQ0=18;OQ=1006.84;QD=11.57;SB=-380.53	GT:AD:DP:GL:GQ	0/1:42,45:58:-121.45,-17.48,-87.58:99
-chr1	1570928	.	G	C	0.90	PASS	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=3.62;MQ=32.27;MQ0=14;OQ=845.01;QD=5.52;SB=-333.79	GT:AD:DP:GL:GQ	0/1:113,40:123:-124.85,-37.07,-408.45:99
-chr1	1570959	.	C	T	0.27	PASS	AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=2;HaplotypeScore=4.89;MQ=34.90;MQ0=12;OQ=2272.40;QD=13.77;SB=-727.55	GT:AD:DP:GL:GQ	0/1:85,80:144:-273.90,-43.38,-268.43:99
-chr1	1571421	rs61774913	C	T	442.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.06;MQ0=31;OQ=744.27;QD=14.31;SB=-218.78	GT:AD:DP:GL:GQ	1/1:0,52:19:-78.02,-5.72,-0.00:57.19
-chr1	1571449	rs61774914	T	C	385.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=19.48;MQ0=37;OQ=993.50;QD=14.19;SB=-324.14	GT:AD:DP:GL:GQ	1/1:0,70:28:-102.94,-8.43,-0.01:84.26
-chr1	1571467	.	G	A	0.11	PASS	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=5.46;MQ=31.83;MQ0=25;OQ=330.51;QD=3.76;SB=-146.19	GT:AD:DP:GL:GQ	0/1:69,19:55:-52.91,-16.58,-135.58:99
-chr1	1571576	.	A	C	50.03	PASS	AC=2;AF=1.00;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=35.58;MQ0=13;OQ=1974.59;QD=21.23;SB=-847.56	GT:AD:DP:GL:GQ	1/1:0,61:79:-282.59,-90.56,-81.54:90.13
-chr1	1571744	rs61774916	T	C	0.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=43.65;MQ0=18;OQ=618.53;QD=4.99;SB=-195.46	GT:AD:DP:GL:GQ	0/1:91,33:103:-96.17,-31.03,-294.76:99
-chr1	1571789	rs61774917	G	T	99.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=40.38;MQ0=17;OQ=858.73;QD=7.53;SB=-166.41	GT:AD:DP:GL:GQ	0/1:66,48:94:-117.47,-28.31,-223.12:99
-chr1	1571821	rs4279785	T	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=33.09;MQ0=22;OQ=74.70;QD=0.60;SB=13.40	GT:AD:DP:GL:GQ	0/1:103,22:85:-36.35,-25.60,-306.33:99
-chr1	1571969	rs4648753	T	C	252.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.21;MQ0=23;OQ=2308.47;QD=23.08;SB=-928.73	GT:AD:DP:GL:GQ	1/1:1,99:73:-234.50,-22.02,-0.07:99
-chr1	1572065	rs61774918	C	T	271.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=40.98;MQ0=5;OQ=1993.46;QD=16.08;SB=-715.20	GT:AD:DP:GL:GQ	0/1:57,67:116:-237.58,-34.95,-201.11:99
-chr1	1572318	rs61774919	G	A	28.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=173;Dels=0.00;HRun=0;HaplotypeScore=4.27;MQ=26.57;MQ0=15;OQ=1639.76;QD=9.48;SB=-550.56	GT:AD:DP:GL:GQ	0/1:104,69:121:-203.75,-36.49,-222.67:99
-chr1	1572479	.	T	C	0.14	PASS	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=45.14;MQ0=0;OQ=1750.04;QD=12.24;SB=-888.87	GT:AD:DP:GL:GQ	0/1:83,60:141:-220.76,-42.47,-332.08:99
-chr1	1572504	.	T	C	0.71	PASS	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=42.33;MQ0=3;OQ=1049.29;QD=7.72;SB=-546.16	GT:AD:DP:GL:GQ	0/1:84,52:129:-147.09,-38.88,-337.66:99
-chr1	1572657	rs4648754	C	A	97.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=39.40;MQ0=0;OQ=4131.60;QD=35.01;SB=-1448.13	GT:AD:DP:GL:GQ	1/1:1,117:114:-412.16,-34.34,-0.04:99
-chr1	1572704	rs61774920	A	G	0.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=29.04;MQ0=13;OQ=131.71;QD=1.78;SB=23.25	GT:AD:DP:GL:GQ	0/1:54,20:56:-33.33,-16.87,-184.69:99
-chr1	1572707	rs61774921	G	T	0.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=28.52;MQ0=13;OQ=177.56;QD=2.50;SB=-37.61	GT:AD:DP:GL:GQ	0/1:52,19:55:-37.61,-16.57,-159.55:99
-chr1	1572743	rs3820000	G	C	38.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.84;MQ0=19;OQ=650.68;QD=7.75;SB=38.16	GT:AD:DP:GL:GQ	0/1:50,34:58:-85.85,-17.49,-156.24:99
-chr1	1572824	rs3820001	G	C	184.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=41.82;MQ0=4;OQ=1359.68;QD=17.43;SB=-597.25	GT:AD:DP:GL:GQ	0/1:31,47:67:-159.47,-20.22,-110.10:99
-chr1	1572866	rs61776849	C	T	39.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=4.48;MQ=49.73;MQ0=0;OQ=1155.72;QD=12.70;SB=-351.36	GT:AD:DP:GL:GQ	0/1:50,41:84:-144.17,-25.32,-161.47:99
-chr1	1572951	.	A	G	0.08	PASS	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=47.33;MQ0=7;OQ=238.29;QD=2.91;SB=26.27	GT:AD:DP:GL:GQ	0/1:60,22:73:-49.11,-21.99,-235.06:99
-chr1	1573358	rs61774952	T	C	32.21	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=47.33;MQ0=8;QD=0.37;SB=67.42	GT:AD:DP:GL:GQ	0/1:70,16:71:-27.89,-21.39,-252.84:65.04
-chr1	1573532	.	C	T	35.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=10.41;MQ0=15;QD=1.97;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,3:3:-7.73,-0.90,-3.80:28.93
-chr1	1573550	.	T	C	24.36	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=33.97;MQ0=17;QD=0.72;SB=-17.89	GT:AD:DP:GL:GQ	0/1:23,11:14:-9.94,-4.22,-42.08:57.18
-chr1	1573618	.	C	T	2.54	PASS	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=45.15;MQ0=15;OQ=814.16;QD=7.75;SB=-232.64	GT:AD:DP:GL:GQ	0/1:66,38:82:-109.43,-24.73,-173.93:99
-chr1	1573625	.	G	A	3.56	PASS	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=45.17;MQ0=14;OQ=654.74;QD=6.18;SB=-207.09	GT:AD:DP:GL:GQ	0/1:70,36:84:-94.09,-25.34,-189.03:99
-chr1	1573865	rs6691927	A	G	0.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=13.93;MQ=47.63;MQ0=8;OQ=1026.45;QD=17.40;SB=-411.69	GT:AD:DP:GL:GQ	0/1:13,46:46:-119.80,-13.87,-37.07:99
-chr1	1573965	rs28525262	G	A	126.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=48.13;MQ0=7;OQ=3091.70;QD=33.97;SB=-1505.87	GT:AD:DP:GL:GQ	1/1:7,83:80:-316.25,-24.10,-3.49:99
-chr1	1573980	rs4648756	G	C	18.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=4.39;MQ=47.15;MQ0=6;OQ=3392.36;QD=38.99;SB=-1642.01	GT:AD:DP:GL:GQ	1/1:0,87:79:-338.24,-23.81,-0.03:99
-chr1	1574055	rs4648606	G	A	59.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=37.73;MQ0=7;OQ=2424.32;QD=33.21;SB=-1231.00	GT:AD:DP:GL:GQ	1/1:0,72:61:-246.03,-18.38,-0.02:99
-chr1	1574081	rs4648607	T	C	84.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=40.76;MQ0=4;OQ=2240.23;QD=31.55;SB=-1072.45	GT:AD:DP:GL:GQ	1/1:0,71:63:-227.63,-18.98,-0.02:99
-chr1	1574087	rs4648757	G	C	98.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=43.14;MQ0=1;OQ=2791.35;QD=39.31;SB=-1268.99	GT:AD:DP:GL:GQ	1/1:0,71:65:-282.74,-19.59,-0.02:99
-chr1	1574123	.	A	C	149.77	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=169.77;MQ=39.72;MQ0=1;QD=1.63;SB=83.29	GT:AD:DP:GL:GQ	0/1:79,13:73:-40.25,-21.99,-225.95:99
-chr1	1574124	.	A	G	50.98	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=170.51;MQ=39.99;MQ0=1;QD=0.55;SB=86.31	GT:AD:DP:GL:GQ	0/1:80,13:72:-30.08,-21.70,-250.90:83.81
-chr1	1574131	.	A	G	472.59	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=2;HaplotypeScore=66.93;MQ=41.08;MQ0=1;QD=5.25;SB=86.31	GT:AD:DP:GL:GQ	0/1:61,29:78:-74.04,-23.50,-234.93:99
-chr1	1574135	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=78.57;MQ=41.20;MQ0=1;OQ=155.65;QD=1.75;SB=86.32	GT:AD:DP:GL:GQ	0/1:76,13:71:-40.23,-21.39,-240.65:99
-chr1	1574143	.	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=43.74;MQ0=1;OQ=78.06;QD=1.07;SB=89.31	GT:AD:DP:GL:GQ	0/1:60,13:65:-30.68,-19.59,-219.52:99
-chr1	1574152	.	C	T	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=43.30;MQ0=0;OQ=130.78;QD=1.92;SB=41.52	GT:AD:DP:GL:GQ	0/1:58,10:59:-34.15,-17.79,-160.93:99
-chr1	1574339	.	T	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=12.88;MQ=42.39;MQ0=0;OQ=429.14;QD=5.50;SB=104.35	GT:AD:DP:GL:GQ	0/1:59,19:76:-69.09,-22.90,-217.44:99
-chr1	1574367	rs12749208	C	T	7.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=36.29;MQ0=0;OQ=733.94;QD=10.48;SB=80.18	GT:AD:DP:GL:GQ	0/1:43,27:66:-96.58,-19.90,-132.61:99
-chr1	1574398	rs12756960	A	G	17.43	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=34.26;MQ0=0;QD=0.28;SB=39.57	GT:AD:DP:GL:GQ	0/1:29,33:32:-14.67,-9.65,-103.72:50.18
-chr1	1574404	rs12756961	A	T	204.46	Indel	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=35.46;MQ0=0;QD=3.01;SB=-19.65	GT:AD:DP:GL:GQ	0/1:32,36:41:-36.08,-12.35,-112.04:99
-chr1	1574410	rs12749336	C	G	884.89	Indel	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=10.32;MQ=35.72;MQ0=0;QD=12.82;SB=-17.81	GT:AD:DP:GL:GQ	0/1:40,29:35:-102.33,-10.56,-39.37:99
-chr1	1574434	rs61774954	A	C	428.65	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=8.25;MQ=34.95;MQ0=1;QD=6.30;SB=56.20	GT:AD:DP:GL:GQ	0/1:39,29:57:-63.32,-17.18,-124.62:99
-chr1	1574437	rs61774955	A	C	431.78	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=7.93;MQ=34.95;MQ0=1;QD=6.35;SB=56.19	GT:AD:DP:GL:GQ	0/1:38,30:51:-61.82,-15.36,-118.50:99
-chr1	1574456	rs12749364	C	A	1380.74	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=20.46;MQ=37.20;MQ0=1;QD=17.26;SB=-577.01	GT:AD:DP:GL:GQ	1/1:30,50:46:-152.08,-13.86,-10.42:34.36
-chr1	1574458	.	G	C	45.27	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=79;Dels=0.01;HRun=0;HaplotypeScore=10.44;MQ=37.76;MQ0=1;QD=0.57;SB=71.27	GT:AD:DP:GL:GQ	0/1:52,26:51:-22.87,-15.06,-200.14:78.10
-chr1	1574459	.	G	A	19.52	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=78;Dels=0.01;HRun=1;HaplotypeScore=9.38;MQ=37.85;MQ0=1;QD=0.25;SB=68.24	GT:AD:DP:GL:GQ	0/1:50,27:51:-20.29,-15.06,-165.60:52.31
-chr1	1574490	.	C	T	446.32	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=13.97;MQ=40.46;MQ0=1;QD=6.11;SB=62.20	GT:AD:DP:GL:GQ	0/1:48,25:59:-65.69,-17.77,-151.07:99
-chr1	1574491	.	A	G	363.54	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=40.79;MQ0=1;QD=4.91;SB=65.24	GT:AD:DP:GL:GQ	0/1:48,26:58:-57.11,-17.48,-164.32:99
-chr1	1574495	.	G	A	435.54	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=16.96;MQ=40.97;MQ0=1;QD=5.73;SB=65.16	GT:AD:DP:GL:GQ	0/1:50,26:61:-65.23,-18.39,-146.68:99
-chr1	1574611	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=41.66;MQ0=2;OQ=80.08;QD=1.13;SB=68.24	GT:AD:DP:GL:GQ	0/1:54,17:60:-29.38,-18.09,-195.87:99
-chr1	1574622	.	G	A	0.30	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=40.91;MQ0=2;OQ=251.34;QD=3.44;SB=59.11	GT:AD:DP:GL:GQ	0/1:55,18:61:-46.81,-18.39,-160.50:99
-chr1	1574627	.	C	T	0.19	PASS	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=42.21;MQ0=2;OQ=221.98;QD=2.88;SB=74.24	GT:AD:DP:GL:GQ	0/1:61,16:67:-45.68,-20.20,-184.31:99
-chr1	1574705	rs12753686	C	T	533.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.26;MQ0=1;OQ=2577.15;QD=38.46;SB=-1301.71	GT:AD:DP:GL:GQ	1/1:1,66:64:-261.31,-19.28,-0.01:99
-chr1	1574781	rs12753729	C	T	0.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.51;MQ=55.74;MQ0=0;OQ=2039.46;QD=37.77;SB=-910.24	GT:AD:DP:GL:GQ	1/1:1,53:52:-207.55,-15.67,-0.02:99
-chr1	1575120	rs4648758	A	G	435.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.79;MQ0=0;OQ=1070.30;QD=28.93;SB=-511.19	GT:AD:DP:GL:GQ	1/1:0,37:35:-110.65,-10.56,-0.04:99
-chr1	1575210	rs4648760	T	C	43.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=63.90;MQ0=0;OQ=1693.31;QD=34.56;SB=-784.12	GT:AD:DP:GL:GQ	1/1:0,49:49:-172.94,-14.76,-0.02:99
-chr1	1575251	rs4648761	A	G	5.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.80;MQ0=0;OQ=1436.67;QD=28.17;SB=-671.85	GT:AD:DP:GL:GQ	1/1:0,51:45:-147.29,-13.57,-0.04:99
-chr1	1575460	rs7531938	A	G	536.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.20;MQ0=0;OQ=2059.81;QD=30.29;SB=-875.65	GT:AD:DP:GL:GQ	1/1:0,68:66:-209.63,-19.91,-0.06:99
-chr1	1575505	rs3936009	G	T	209.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=57.75;MQ0=0;OQ=2310.00;QD=35.54;SB=-1127.37	GT:AD:DP:GL:GQ	1/1:0,65:65:-234.60,-19.58,-0.02:99
-chr1	1576615	rs11486023	T	C	106.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.19;MQ0=0;OQ=1526.39;QD=31.15;SB=-484.14	GT:AD:DP:GL:GQ	1/1:0,49:47:-156.26,-14.17,-0.04:99
-chr1	1577178	rs4648762	A	G	161.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=54.74;MQ0=0;OQ=2251.82;QD=30.85;SB=-761.70	GT:AD:DP:GL:GQ	1/1:0,72:69:-228.82,-20.80,-0.05:99
-chr1	1578533	rs61774958	G	A	209.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.20;MQ0=11;OQ=1051.54;QD=7.73;SB=-56.39	GT:AD:DP:GL:GQ	0/1:86,50:122:-145.19,-36.75,-299.83:99
-chr1	1578580	rs61774959	G	A	15.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.73;MQ0=4;OQ=297.29;QD=2.89;SB=-52.85	GT:AD:DP:GL:GQ	0/1:73,30:83:-58.01,-25.00,-251.41:99
-chr1	1578600	rs61776760	C	T	0.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=43.98;MQ0=2;OQ=158.49;QD=1.69;SB=-47.28	GT:AD:DP:GL:GQ	0/1:69,25:74:-41.42,-22.29,-233.46:99
-chr1	1579194	rs28530622	C	G	155.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.72;MQ0=1;OQ=430.39;QD=33.11;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:10:-46.62,-3.01,-0.00:30.10
-chr1	1579428	rs61776762	A	G	153.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.52;MQ0=1;OQ=97.37;QD=13.91;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:4:-13.27,-1.21,-0.00:12.02
-chr1	1580015	rs11486024	G	A	46.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=22.93;MQ0=7;OQ=160.84;QD=5.96;SB=11.04	GT:AD:DP:GL:GQ	0/1:15,12:15:-23.90,-4.53,-24.75:99
-chr1	1580190	rs7547516	A	G	298.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.87;MQ0=6;OQ=291.00;QD=13.23;SB=-79.37	GT:AD:DP:GL:GQ	1/1:0,22:11:-32.70,-3.32,-0.02:33.05
-chr1	1580389	rs9329573	G	C	27.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=38.23;MQ0=0;OQ=1419.74;QD=36.40;SB=-378.04	GT:AD:DP:GL:GQ	1/1:0,39:37:-145.59,-11.17,-0.03:99
-chr1	1580438	rs9661285	G	A	38.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=39.42;MQ0=4;OQ=1274.78;QD=31.87;SB=-484.63	GT:AD:DP:GL:GQ	1/1:2,38:33:-131.07,-9.94,-0.01:99
-chr1	1580544	rs9661500	G	A	46.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=56.47;MQ0=0;OQ=1331.19;QD=35.03;SB=-445.09	GT:AD:DP:GL:GQ	1/1:0,38:35:-136.72,-10.55,-0.02:99
-chr1	1581642	.	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.20;MQ=10.78;MQ0=31;OQ=96.64;QD=2.06;SB=-42.54	GT:AD:DP:GL:GQ	0/1:28,19:6:-14.76,-1.81,-6.20:43.86
-chr1	1581652	rs61776763	A	G	3.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=12.19;MQ0=23;OQ=234.90;QD=5.87;SB=-48.96	GT:AD:DP:GL:GQ	1/1:0,40:8:-27.08,-2.41,-0.00:24.06
-chr1	1581732	.	C	T	10.55	PASS	AC=2;AF=1.00;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.72;MQ0=12;OQ=388.23;QD=16.18;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,24:11:-42.41,-3.31,-0.00:33.10
-chr1	1581758	rs61776764	C	G	0.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=4.17;MQ=24.63;MQ0=12;OQ=1218.98;QD=26.50;SB=-184.87	GT:AD:DP:GL:GQ	1/1:2,44:29:-125.50,-8.74,-0.02:87.29
-chr1	1582007	rs28625763	T	C	180.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.96;MQ0=0;OQ=1011.19;QD=29.74;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,34:31:-104.72,-9.34,-0.02:93.23
-chr1	1582130	rs4648770	T	G	609.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=44.32;MQ0=0;OQ=2027.74;QD=33.24;SB=-1018.12	GT:AD:DP:GL:GQ	1/1:1,60:58:-206.38,-17.47,-0.02:99
-chr1	1582744	rs4648774	A	C	3.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=4.26;MQ=37.79;MQ0=0;OQ=1971.73;QD=29.87;SB=-941.08	GT:AD:DP:GL:GQ	1/1:1,65:56:-200.78,-16.87,-0.02:99
-chr1	1582886	rs1062088	G	C	0.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=28.33;MQ0=1;OQ=872.58;QD=39.66;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,22:20:-90.85,-6.03,-0.01:60.20
-chr1	1584178	rs1061892	C	T	196.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=53.48;MQ0=0;OQ=3220.76;QD=38.34;SB=-1363.82	GT:AD:DP:GL:GQ	1/1:0,84:80:-325.67,-24.10,-0.02:99
-chr1	1584256	rs6659270	T	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=6;HaplotypeScore=1.24;MQ=50.39;MQ0=3;OQ=904.07;QD=12.05;SB=-396.42	GT:AD:DP:GL:GQ	0/1:40,35:71:-115.08,-21.39,-150.96:99
-chr1	1584361	rs7416520	C	T	137.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.09;MQ0=1;OQ=651.60;QD=13.86;SB=-179.69	GT:AD:DP:GL:GQ	0/1:25,22:41:-80.80,-12.36,-66.61:99
-chr1	1585061	rs4307513	A	G	66.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.44;MQ0=9;OQ=1311.89;QD=23.85;SB=-662.93	GT:AD:DP:GL:GQ	1/1:0,55:42:-134.81,-12.67,-0.04:99
-chr1	1585263	rs4313339	A	G	2.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=25.65;MQ0=5;OQ=594.23;QD=25.84;SB=-123.88	GT:AD:DP:GL:GQ	1/1:0,23:18:-63.01,-5.42,-0.01:54.15
-chr1	1585730	rs4443835	C	A	38.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=31.44;MQ0=8;OQ=878.16;QD=23.73;SB=-366.86	GT:AD:DP:GL:GQ	1/1:0,37:25:-91.41,-7.53,-0.01:75.22
-chr1	1586059	rs1109644	C	T	45.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=26.30;MQ0=10;OQ=1336.40;QD=26.73;SB=-334.34	GT:AD:DP:GL:GQ	1/1:3,47:35:-137.24,-10.55,-0.01:99
-chr1	1586167	rs1109645	G	A	15.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=25.64;MQ0=10;OQ=920.81;QD=25.58;SB=-127.66	GT:AD:DP:GL:GQ	1/1:5,31:24:-95.67,-7.23,-0.01:72.23
-chr1	1586837	rs4074020	C	T	96.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.56;MQ0=0;OQ=1972.50;QD=37.93;SB=-886.69	GT:AD:DP:GL:GQ	1/1:0,52:51:-200.86,-15.37,-0.02:99
-chr1	1588296	.	A	C	37.76	DPFilter;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=2.36;SB=20.08	GT:AD:DP:GL:GQ	0/1:12,4:13:-10.98,-3.92,-35.85:70.59
-chr1	1588297	.	C	T	55.71	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=3.48;SB=17.08	GT:AD:DP:GL:GQ	0/1:12,4:12:-12.47,-3.61,-34.17:88.55
-chr1	1588300	.	G	T	70.59	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=4.41;SB=-0.98	GT:AD:DP:GL:GQ	0/1:12,4:13:-14.26,-3.92,-32.75:99
-chr1	1588313	.	A	G	0.48	PASS	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=34.54;MQ0=0;OQ=106.39;QD=17.73;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:4:-14.17,-1.20,-0.00:12.04
-chr1	1588430	.	A	C	41.05	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=7.96;MQ=16.51;MQ0=4;QD=5.86;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,5:2:-7.51,-0.60,-0.00:6.02
-chr1	1588435	.	G	A	88.13	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=17.24;MQ0=5;QD=8.81;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,5:3:-12.30,-0.90,-0.00:9.03
-chr1	1588436	.	C	T	85.79	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=17.47;MQ0=5;QD=9.53;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,5:3:-12.07,-0.90,-0.00:9.03
-chr1	1588443	.	T	A	229.32	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.72;MQ0=5;QD=15.29;SB=-115.17	GT:AD:DP:GL:GQ	1/1:5,10:7:-26.51,-2.11,-0.00:21.07
-chr1	1589024	rs6604981	A	G	620.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.22;MQ0=0;OQ=1995.26;QD=35.00;SB=-949.98	GT:AD:DP:GL:GQ	1/1:0,57:56:-203.13,-16.87,-0.02:99
-chr1	1589224	rs6662227	A	G	24.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=48.28;MQ0=4;OQ=837.14;QD=23.92;SB=-301.43	GT:AD:DP:GL:GQ	1/1:0,35:27:-87.33,-8.14,-0.03:81.18
-chr1	1589250	.	A	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.35;MQ=44.60;MQ0=6;OQ=197.93;QD=4.95;SB=-12.85	GT:AD:DP:GL:GQ	0/1:24,16:34:-33.32,-10.25,-92.46:99
-chr1	1589410	rs12725286	C	T	1.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=10.99;MQ=39.64;MQ0=8;OQ=1191.02;QD=13.38;SB=-569.58	GT:AD:DP:GL:GQ	0/1:50,39:71:-143.77,-21.38,-134.51:99
-chr1	1589675	rs12729295	C	T	309.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.48;MQ0=3;OQ=671.60;QD=8.72;SB=-350.30	GT:AD:DP:GL:GQ	0/1:53,24:68:-90.94,-20.50,-145.90:99
-chr1	1589751	rs2072923	A	G	247.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=29.67;MQ0=6;OQ=1186.35;QD=17.98;SB=-547.83	GT:AD:DP:GL:GQ	0/1:14,52:56:-138.81,-16.89,-48.69:99
-chr1	1589844	.	C	T	0.07	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=10.53;MQ=52.48;MQ0=3;OQ=898.69;QD=17.28;SB=-297.81	GT:AD:DP:GL:GQ	0/1:24,28:47:-107.32,-14.16,-70.31:99
-chr1	1589914	.	C	G	0.11	PASS	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=2;HaplotypeScore=0.33;MQ=46.80;MQ0=0;OQ=573.53;QD=6.52;SB=39.39	GT:AD:DP:GL:GQ	0/1:67,21:88:-87.20,-26.56,-264.39:99
-chr1	1589924	.	G	A	1.33	PASS	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=0.49;MQ=46.92;MQ0=0;OQ=633.71;QD=6.67;SB=49.65	GT:AD:DP:GL:GQ	0/1:70,25:92:-94.37,-27.71,-247.48:99
-chr1	1590019	.	C	G	30.30	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=49.37;MQ0=3;OQ=641.05;QD=9.29;SB=-314.06	GT:AD:DP:GL:GQ	0/1:47,21:64:-90.20,-22.81,-187.56:99
-chr1	1590023	.	C	T	0.46	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=8.72;MQ=48.76;MQ0=3;OQ=551.31;QD=8.89;SB=-275.75	GT:AD:DP:GL:GQ	0/1:40,22:54:-74.68,-16.27,-125.00:99
-chr1	1590878	.	G	A	29.06	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=58.63;MQ0=0;OQ=418.19;QD=12.30;SB=-160.22	GT:AD:DP:GL:GQ	0/1:18,16:32:-54.75,-9.64,-59.96:99
-chr1	1590915	.	G	A	47.89	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.20;MQ0=0;OQ=322.06;QD=8.26;SB=-141.18	GT:AD:DP:GL:GQ	0/1:27,12:38:-46.95,-11.46,-84.40:99
-chr1	1592399	rs4648609	G	C	54.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=906.62;QD=20.60;SB=-310.97	GT:AD:DP:GL:GQ	0/1:19,25:42:-106.61,-12.66,-75.02:99
-chr1	1592450	rs4233029	C	T	90.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=60.00;MQ0=0;OQ=849.63;QD=19.76;SB=-437.98	GT:AD:DP:GL:GQ	0/1:15,28:37:-99.40,-11.15,-39.71:99
-chr1	1592650	rs4639697	G	T	61.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.87;MQ=58.92;MQ0=0;OQ=2757.17;QD=35.35;SB=-1369.99	GT:AD:DP:GL:GQ	1/1:1,77:76:-279.32,-22.89,-0.02:99
-chr1	1593099	rs11523819	G	A	285.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.60;MQ0=0;OQ=1010.41;QD=14.43;SB=-280.29	GT:AD:DP:GL:GQ	0/1:39,31:68:-124.83,-20.51,-114.09:99
-chr1	1593297	rs6699975	G	T	40.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.04;MQ=58.42;MQ0=0;OQ=872.27;QD=15.58;SB=-424.16	GT:AD:DP:GL:GQ	0/1:24,32:48:-104.97,-14.46,-59.27:99
-chr1	1594362	rs36048328	G	A	212.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=53.76;MQ0=0;OQ=936.15;QD=14.86;SB=-437.40	GT:AD:DP:GL:GQ	0/1:33,30:61:-115.28,-18.38,-109.00:99
-chr1	1595120	rs12736155	A	C	482.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=48.94;MQ0=1;OQ=857.21;QD=13.61;SB=-454.19	GT:AD:DP:GL:GQ	0/1:31,32:60:-107.08,-18.07,-108.87:99
-chr1	1595458	.	A	G	4.92	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=5.30;MQ=27.16;MQ0=16;OQ=685.03;QD=9.01;SB=-336.52	GT:AD:DP:GL:GQ	0/1:42,34:52:-87.45,-15.67,-106.28:99
-chr1	1595935	.	C	A	13.79	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=13;HaplotypeScore=5.11;MQ=47.25;MQ0=0;QD=0.27;SB=44.14	GT:AD:DP:GL:GQ	0/1:44,8:42:-17.30,-12.66,-119.04:46.44
-chr1	1596150	rs28678861	G	C	0.01	FDRtranche2.00to10.00	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=6;HaplotypeScore=0.16;MQ=35.71;MQ0=1;OQ=1428.28;QD=37.59;SB=-739.75	GT:AD:DP:GL:GQ	1/1:0,38:34:-146.42,-10.25,-0.01:99
-chr1	1596170	rs61776786	G	A	218.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.46;MQ=33.82;MQ0=1;OQ=367.66;QD=11.86;SB=-172.25	GT:AD:DP:GL:GQ	0/1:17,14:26:-47.89,-7.84,-41.82:99
-chr1	1596393	.	A	G	1.96	PASS	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=1.79;MQ=38.63;MQ0=2;OQ=223.84;QD=8.95;SB=-123.74	GT:AD:DP:GL:GQ	0/1:13,12:22:-32.30,-6.64,-46.25:99
-chr1	1596434	rs61776787	A	G	239.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=27.74;MQ0=11;OQ=461.68;QD=12.82;SB=-213.08	GT:AD:DP:GL:GQ	1/1:0,36:16:-49.77,-4.83,-0.02:48.10
-chr1	1598092	rs61776790	C	T	85.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=16.88;MQ0=18;OQ=268.46;QD=6.88;SB=-142.62	GT:AD:DP:GL:GQ	0/1:27,12:20:-36.16,-6.04,-33.65:99
-chr1	1599022	rs12724172	T	G	248.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=48.86;MQ0=1;OQ=792.00;QD=12.00;SB=-236.82	GT:AD:DP:GL:GQ	0/1:30,36:59:-100.27,-17.78,-99.33:99
-chr1	1599028	rs12757736	A	T	344.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=49.16;MQ0=1;OQ=842.96;QD=13.82;SB=-342.44	GT:AD:DP:GL:GQ	0/1:27,34:53:-103.55,-15.97,-87.26:99
-chr1	1600387	rs7544851	T	C	182.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=59.17;MQ0=0;OQ=618.77;QD=11.05;SB=-250.34	GT:AD:DP:GL:GQ	0/1:28,28:48:-79.63,-14.47,-94.46:99
-chr1	1601295	rs6700884	A	G	128.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=57.79;MQ0=0;OQ=747.49;QD=15.90;SB=-253.32	GT:AD:DP:GL:GQ	0/1:21,26:46:-91.89,-13.86,-83.83:99
-chr1	1601516	rs6695303	T	C	234.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=57.63;MQ0=0;OQ=837.86;QD=14.45;SB=-344.58	GT:AD:DP:GL:GQ	0/1:27,31:54:-103.34,-16.27,-95.10:99
-chr1	1601858	rs4074196	A	G	175.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.26;MQ0=0;OQ=386.06;QD=8.39;SB=-209.64	GT:AD:DP:GL:GQ	0/1:26,20:39:-53.65,-11.76,-84.70:99
-chr1	1601974	rs4074197	C	T	305.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=818.07;QD=17.41;SB=-411.47	GT:AD:DP:GL:GQ	0/1:22,25:46:-98.95,-13.86,-71.35:99
-chr1	1602466	rs4074198	G	A	258.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.07;MQ0=0;OQ=1998.12;QD=19.98;SB=-732.09	GT:AD:DP:GL:GQ	0/1:43,57:99:-232.92,-29.82,-143.69:99
-chr1	1602672	rs4076580	T	G	4.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=6.99;MQ=58.71;MQ0=0;OQ=379.11;QD=10.53;SB=-115.90	GT:AD:DP:GL:GQ	0/1:20,16:35:-51.74,-10.54,-71.19:99
-chr1	1603230	.	C	A	105.90	PASS	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.30;MQ0=0;OQ=439.60;QD=13.32;SB=-227.94	GT:AD:DP:GL:GQ	0/1:17,16:31:-56.59,-9.34,-45.91:99
-chr1	1605211	rs7520934	A	C	437.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=732.80;QD=12.42;SB=-285.83	GT:AD:DP:GL:GQ	0/1:28,31:56:-93.43,-16.87,-99.80:99
-chr1	1605568	rs28774670	T	C	204.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.50;MQ0=0;OQ=582.27;QD=9.87;SB=-203.22	GT:AD:DP:GL:GQ	0/1:33,26:57:-78.69,-17.18,-127.49:99
-chr1	1605610	rs28435953	G	C	130.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=58.73;MQ0=0;OQ=779.25;QD=14.17;SB=-322.40	GT:AD:DP:GL:GQ	0/1:29,26:52:-96.88,-15.68,-122.76:99
-chr1	1605921	rs28464677	G	A	40.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.09;MQ=58.05;MQ0=1;OQ=855.32;QD=14.50;SB=-377.37	GT:AD:DP:GL:GQ	0/1:31,28:56:-105.70,-16.88,-92.60:99
-chr1	1606119	rs61776792	G	C	0.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=15.64;MQ=49.02;MQ0=1;OQ=469.22;QD=9.02;SB=-238.10	GT:AD:DP:GL:GQ	0/1:28,21:33:-60.17,-9.96,-72.09:99
-chr1	1606735	.	G	A	20.16	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=18;HaplotypeScore=5.53;MQ=52.51;MQ0=0;QD=0.29;SB=62.21	GT:AD:DP:GL:GQ	0/1:55,14:41:-17.65,-12.36,-123.60:52.96
-chr1	1607449	rs28736713	T	G	133.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.99;MQ=58.63;MQ0=0;OQ=1023.89;QD=16.00;SB=-507.80	GT:AD:DP:GL:GQ	0/1:29,35:64:-124.95,-19.28,-105.76:99
-chr1	1607623	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=18;HaplotypeScore=7.66;MQ=51.83;MQ0=1;OQ=52.14;QD=1.00;SB=0.53	GT:AD:DP:GL:GQ	0/1:41,11:37:-19.66,-11.16,-103.64:84.98
-chr1	1608184	rs28367203	T	C	304.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.41;MQ0=0;OQ=680.60;QD=12.15;SB=-333.30	GT:AD:DP:GL:GQ	0/1:31,25:55:-87.91,-16.57,-127.27:99
-chr1	1608363	rs28463291	C	T	163.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1453.08;QD=22.02;SB=-689.01	GT:AD:DP:GL:GQ	0/1:22,44:66:-168.48,-19.89,-77.76:99
-chr1	1608455	rs28366981	A	G	89.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=57.97;MQ0=0;OQ=661.92;QD=12.98;SB=-317.10	GT:AD:DP:GL:GQ	0/1:21,30:45:-83.04,-13.57,-76.52:99
-chr1	1608461	rs28561498	G	T	18.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=3.73;MQ=57.75;MQ0=0;OQ=745.42;QD=16.20;SB=-317.33	GT:AD:DP:GL:GQ	0/1:20,26:44:-91.08,-13.26,-59.03:99
-chr1	1608538	rs28541555	T	G	156.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=57.89;MQ0=0;OQ=606.69;QD=12.91;SB=-204.78	GT:AD:DP:GL:GQ	0/1:20,27:44:-77.21,-13.26,-75.77:99
-chr1	1608823	rs4648780	T	C	124.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.99;MQ0=0;OQ=1965.86;QD=28.49;SB=-779.58	GT:AD:DP:GL:GQ	1/1:0,69:63:-200.23,-19.00,-0.06:99
-chr1	1608945	rs7524863	G	A	246.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=57.51;MQ0=0;OQ=796.58;QD=15.03;SB=-348.35	GT:AD:DP:GL:GQ	0/1:28,25:52:-98.61,-15.67,-100.29:99
-chr1	1609404	rs28487995	G	A	270.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=56.05;MQ0=0;OQ=943.08;QD=14.97;SB=-428.82	GT:AD:DP:GL:GQ	0/1:34,29:58:-115.07,-17.48,-93.42:99
-chr1	1609630	rs9442411	T	C	340.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.02;MQ0=2;OQ=562.05;QD=9.37;SB=-254.95	GT:AD:DP:GL:GQ	0/1:29,31:53:-75.47,-15.98,-117.16:99
-chr1	1609711	rs61776794	G	C	177	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=50.27;MQ0=2;OQ=557.29;QD=11.15;SB=-303.13	GT:AD:DP:GL:GQ	0/1:25,25:40:-71.08,-12.07,-91.96:99
-chr1	1609833	.	C	T	8.33	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=46.17;MQ0=4;OQ=546.56;QD=9.42;SB=-24.96	GT:AD:DP:GL:GQ	0/1:34,24:50:-73.01,-15.07,-102.31:99
-chr1	1609872	.	T	A	2.74	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=43.11;MQ0=2;OQ=308.49;QD=7.17;SB=35.14	GT:AD:DP:GL:GQ	0/1:26,17:38:-45.58,-11.45,-97.07:99
-chr1	1609888	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.91;MQ=43.11;MQ0=0;OQ=145.44;QD=3.93;SB=26.10	GT:AD:DP:GL:GQ	0/1:23,14:31:-27.18,-9.35,-84.75:99
-chr1	1609946	.	A	G	0.35	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=42.17;MQ0=4;OQ=138.81;QD=3.39;SB=-12.69	GT:AD:DP:GL:GQ	0/1:29,12:37:-28.31,-11.14,-120.75:99
-chr1	1610085	rs61776797	A	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=1.23;MQ=52.83;MQ0=0;OQ=168.50;QD=4.32;SB=29.12	GT:AD:DP:GL:GQ	0/1:29,10:36:-30.98,-10.85,-111.33:99
-chr1	1610720	rs3737622	A	G	151.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=52.83;MQ0=0;OQ=742.56;QD=16.14;SB=-328.41	GT:AD:DP:GL:GQ	0/1:21,25:45:-91.09,-13.55,-80.03:99
-chr1	1610745	rs3737623	C	T	272.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=54.47;MQ0=0;OQ=1103.20;QD=18.09;SB=-448.99	GT:AD:DP:GL:GQ	0/1:28,33:59:-131.40,-17.79,-81.29:99
-chr1	1610764	rs3737624	G	A	559.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=1181.67;QD=16.88;SB=-410.16	GT:AD:DP:GL:GQ	0/1:34,36:69:-142.24,-20.78,-119.02:99
-chr1	1612040	.	T	A	0.13	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=1.10;MQ=42.64;MQ0=1;OQ=306.88;QD=6.39;SB=17.08	GT:AD:DP:GL:GQ	0/1:34,14:39:-45.73,-11.76,-89.73:99
-chr1	1612676	rs1855706	C	T	48.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=4.57;MQ=18.63;MQ0=42;OQ=747.37;QD=8.59;SB=-370.40	GT:AD:DP:GL:GQ	0/1:52,35:41:-90.38,-12.36,-60.67:99
-chr1	1612716	rs61776798	T	C	0.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=7.54;MQ0=54;OQ=87.83;QD=1.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:40,23:6:-13.87,-1.81,-8.21:64.05
-chr1	1613585	rs7542306	C	A	20.92	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=15.32;MQ0=21;QD=0.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,13:6:-7.18,-1.81,-14.53:53.72
-chr1	1614256	rs368915	T	G	26.47	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=20.52;MQ0=9;QD=2.04;SB=-32.98	GT:AD:DP:GL:GQ	1/1:0,13:2:-6.06,-0.60,-0.00:6
-chr1	1614726	rs4648651	G	A	96.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.04;MQ0=5;OQ=94.30;QD=5.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,5:9:-15.42,-2.71,-17.14:99
-chr1	1615466	rs35947799	G	A	107.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.41;MQ0=0;OQ=601.60;QD=18.23;SB=-258.27	GT:AD:DP:GL:GQ	0/1:13,20:32:-73.09,-9.64,-46.27:99
-chr1	1616758	rs28587348	A	G	239	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=22.66;MQ0=5;OQ=648.18;QD=9.53;SB=-227.25	GT:AD:DP:GL:GQ	0/1:39,28:59:-88.06,-19.96,-129.14:99
-chr1	1617046	rs1932228	C	T	15.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.02;MQ0=16;OQ=210.38;QD=4.29;SB=-111.61	GT:AD:DP:GL:GQ	0/1:30,19:14:-28.54,-4.22,-22.09:99
-chr1	1617416	rs61776801	G	A	266.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=37.27;MQ0=15;OQ=982.95;QD=15.60;SB=-353.39	GT:AD:DP:GL:GQ	0/1:28,35:47:-115.75,-14.17,-56.63:99
-chr1	1617665	rs601141	A	C	373.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=54.30;MQ0=0;OQ=987.22;QD=15.19;SB=-461.24	GT:AD:DP:GL:GQ	0/1:31,34:63:-120.98,-18.98,-104.99:99
-chr1	1618057	rs61776802	A	G	60.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=53.96;MQ0=1;OQ=690.37;QD=9.86;SB=-238.28	GT:AD:DP:GL:GQ	0/1:36,33:62:-91.01,-18.69,-134.09:99
-chr1	1618313	rs61776803	G	T	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.46;MQ=39.85;MQ0=11;OQ=285.62;QD=3.97;SB=-133.03	GT:AD:DP:GL:GQ	0/1:51,21:59:-49.62,-17.77,-159.76:99
-chr1	1618571	rs12081891	G	A	12.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=28.69;MQ0=14;OQ=348.19;QD=5.36;SB=-177.80	GT:AD:DP:GL:GQ	0/1:47,18:38:-49.56,-11.46,-83.32:99
-chr1	1618766	rs61776804	G	A	86.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=43.94;MQ0=0;OQ=732.16;QD=19.27;SB=-352.49	GT:AD:DP:GL:GQ	0/1:16,22:37:-87.65,-11.15,-51.61:99
-chr1	1619321	rs4648621	G	A	136.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=27.57;MQ0=5;OQ=508.21;QD=13.37;SB=-144.61	GT:AD:DP:GL:GQ	0/1:18,20:30:-63.15,-9.04,-45.60:99
-chr1	1619347	rs34716550	T	C	0.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=6.10;MQ=29.73;MQ0=3;OQ=380.00;QD=9.05;SB=-24.63	GT:AD:DP:GL:GQ	0/1:23,19:33:-51.24,-9.95,-72.01:99
-chr1	1624864	rs874516	T	C	339.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=46.52;MQ0=1;OQ=784.43;QD=15.38;SB=-383.28	GT:AD:DP:GL:GQ	0/1:22,29:49:-96.49,-14.76,-89.37:99
-chr1	1625479	rs2076329	T	C	1.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=3.63;MQ=58.85;MQ0=0;OQ=346.77;QD=7.08;SB=-173.37	GT:AD:DP:GL:GQ	0/1:30,19:42:-50.63,-12.67,-103.10:99
-chr1	1625609	rs1136997	C	A	28.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.88;MQ=49.57;MQ0=0;OQ=129.32;QD=4.62;SB=-74.73	GT:AD:DP:GL:GQ	0/1:19,9:24:-23.45,-7.23,-57.11:99
-chr1	1625904	rs1059822	G	A	133.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=49.02;MQ0=1;OQ=290.88;QD=7.65;SB=-88.57	GT:AD:DP:GL:GQ	0/1:22,16:33:-42.33,-9.95,-69.30:99
-chr1	1626134	rs2179381	C	T	246.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=42.93;MQ0=0;OQ=354.22;QD=9.84;SB=-190.16	GT:AD:DP:GL:GQ	0/1:22,14:30:-47.74,-9.04,-64.17:99
-chr1	1626190	.	G	A	71.25	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=48.48;MQ0=0;OQ=619.32;QD=15.48;SB=-321.82	GT:AD:DP:GL:GQ	0/1:21,19:40:-77.26,-12.05,-77.19:99
-chr1	1627098	rs61774911	A	G	6.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.86;MQ0=3;OQ=57.73;QD=2.14;SB=17.07	GT:AD:DP:GL:GQ	0/1:19,8:19:-14.79,-5.73,-53.94:90.57
-chr1	1627115	rs9439480	A	G	25.79	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=40.42;MQ0=0;QD=1.07;SB=26.10	GT:AD:DP:GL:GQ	0/1:18,5:21:-12.19,-6.33,-66.21:58.62
-chr1	1627865	rs17162876	G	C	61.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=50.90;MQ0=0;OQ=596.59;QD=13.56;SB=-287.98	GT:AD:DP:GL:GQ	0/1:25,19:41:-75.32,-12.38,-88.05:99
-chr1	1628397	.	C	T	6.47	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=17.03;MQ0=21;OQ=258.72;QD=7.19;SB=-86.31	GT:AD:DP:GL:GQ	0/1:19,17:11:-32.47,-3.31,-10.93:76.22
-chr1	1628516	.	G	A	0.42	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=23.14;MQ0=15;OQ=161.97;QD=3.60;SB=-32.64	GT:AD:DP:GL:GQ	0/1:32,13:24:-26.72,-7.23,-54.65:99
-chr1	1629661	.	T	C	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=34.50;MQ0=9;OQ=82.09;QD=2.22;SB=-48.26	GT:AD:DP:GL:GQ	0/1:21,16:24:-18.73,-7.24,-70.81:99
-chr1	1631887	rs61776845	C	T	226.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.12;MQ0=0;OQ=487.31;QD=34.81;SB=-143.63	GT:AD:DP:GL:GQ	1/1:0,14:14:-52.32,-4.22,-0.01:42.13
-chr1	1633129	rs6688326	C	A	4.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=11.56;MQ0=25;OQ=150.41;QD=4.30;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,10:8:-20.73,-2.41,-7.32:49.07
-chr1	1634432	rs2143105	A	G	2.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=24.63;MQ0=4;OQ=286.53;QD=16.85;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,17:11:-32.26,-3.33,-0.02:33.05
-chr1	1634696	rs2179382	G	A	8.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=32.34;MQ0=16;OQ=279.13;QD=3.58;SB=-95.45	GT:AD:DP:GL:GQ	0/1:61,16:59:-48.98,-17.78,-155.91:99
-chr1	1634768	rs2179383	C	T	205.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=11.72;MQ0=13;OQ=127.00;QD=6.35;SB=-51.67	GT:AD:DP:GL:GQ	1/1:0,20:4:-16.23,-1.20,-0.00:12.04
-chr1	1634910	.	C	T	73.11	PASS	AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=12.98;MQ0=22;OQ=295.97;QD=9.25;SB=-135.01	GT:AD:DP:GL:GQ	1/1:0,32:8:-33.18,-2.41,-0.00:24.08
-chr1	1634953	.	C	T	62.81	PASS	AC=2;AF=1.00;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.86;MQ0=18;OQ=384.85;QD=13.27;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,29:10:-42.07,-3.01,-0.00:30.10
-chr1	1634973	.	T	C	4.22	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.05;MQ0=18;OQ=118.84;QD=3.71;SB=-10.00	GT:AD:DP:GL:GQ	0/1:22,10:13:-19.08,-3.92,-33.24:99
-chr1	1634975	.	C	T	14.66	PASS	AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.05;MQ0=18;OQ=504.84;QD=15.78;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,32:13:-54.07,-3.92,-0.00:39.13
-chr1	1635050	rs4279785	T	C	293.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.94;MQ0=12;OQ=364.98;QD=8.90;SB=-161.33	GT:AD:DP:GL:GQ	0/1:23,18:28:-48.21,-8.43,-62.26:99
-chr1	1635547	rs61774919	G	A	162.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=14.59;MQ0=11;OQ=173.64;QD=7.55;SB=-50.56	GT:AD:DP:GL:GQ	1/1:6,17:5:-20.92,-1.51,-0.00:15.05
-chr1	1635860	rs3819996	T	C	34.28	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=13.67;MQ0=7;QD=3.81;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:2:-6.84,-0.60,-0.00:6.02
-chr1	1635866	rs3819997	A	G	27.83	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.50;MQ0=6;QD=3.48;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:2:-6.19,-0.60,-0.00:6.01
-chr1	1635934	rs3819998	A	G	17.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=31.93;MQ0=9;OQ=462.29;QD=12.84;SB=-95.99	GT:AD:DP:GL:GQ	0/1:9,27:21:-55.85,-6.34,-11.59:52.52
-chr1	1635937	rs3819999	G	T	0.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=31.93;MQ0=9;OQ=663.10;QD=18.42;SB=-104.11	GT:AD:DP:GL:GQ	0/1:9,26:24:-76.82,-7.23,-11.28:40.49
-chr1	1635973	rs3820000	G	C	54.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.49;MQ0=15;OQ=883.63;QD=21.55;SB=-127.19	GT:AD:DP:GL:GQ	1/1:8,33:25:-95.91,-7.54,-3.96:35.78
-chr1	1636091	rs3820002	T	C	108.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.55;MQ0=2;OQ=418.10;QD=27.87;SB=-161.84	GT:AD:DP:GL:GQ	1/1:0,15:13:-45.40,-3.92,-0.01:39.10
-chr1	1636096	rs61776849	C	T	171.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.06;MQ0=2;OQ=513.34;QD=30.20;SB=-178.68	GT:AD:DP:GL:GQ	1/1:0,17:14:-54.92,-4.22,-0.01:42.13
-chr1	1636231	rs61776850	G	T	45.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.84;MQ=41.85;MQ0=7;OQ=641.89;QD=13.95;SB=-342.30	GT:AD:DP:GL:GQ	0/1:20,26:39:-79.22,-11.75,-58.73:99
-chr1	1636287	rs61776851	T	G	219.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=36.80;MQ0=8;OQ=1107.10;QD=20.13;SB=-508.74	GT:AD:DP:GL:GQ	1/1:4,51:37:-114.34,-11.16,-0.05:99
-chr1	1636310	rs3820004	G	A	84.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=34.50;MQ0=11;OQ=1585.10;QD=27.33;SB=-811.33	GT:AD:DP:GL:GQ	1/1:6,52:41:-162.11,-12.35,-0.01:99
-chr1	1636434	rs56030177	T	C	84.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=28.90;MQ0=10;OQ=1324.64;QD=27.60;SB=-500.48	GT:AD:DP:GL:GQ	1/1:0,48:38:-136.06,-11.45,-0.01:99
-chr1	1636517	rs760926	T	C	66.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.90;MQ0=7;OQ=976.98;QD=25.05;SB=-384.56	GT:AD:DP:GL:GQ	1/1:1,38:28:-101.29,-8.43,-0.01:84.25
-chr1	1636649	rs760927	T	C	127.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.47;MQ0=5;OQ=898.10;QD=25.66;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,35:25:-93.41,-7.53,-0.01:75.22
-chr1	1636735	.	C	G	66.44	PASS	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=39.28;MQ0=9;OQ=1254.01;QD=12.80;SB=-309.31	GT:AD:DP:GL:GQ	0/1:56,42:83:-153.70,-25.01,-208.71:99
-chr1	1636777	.	C	T	31.32	PASS	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=38.96;MQ0=9;OQ=1301.14;QD=13.41;SB=-647.75	GT:AD:DP:GL:GQ	0/1:49,48:84:-158.72,-25.32,-141.36:99
-chr1	1636840	rs61776853	A	C	1.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=0.97;MQ=31.48;MQ0=5;OQ=997.06;QD=27.70;SB=-256.95	GT:AD:DP:GL:GQ	1/1:0,36:30:-103.31,-9.04,-0.02:90.22
-chr1	1636845	rs61776854	C	T	13.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=31.12;MQ0=5;OQ=595.02;QD=17.50;SB=-27.62	GT:AD:DP:GL:GQ	0/1:11,23:28:-71.23,-8.44,-30.58:99
-chr1	1636852	rs35642458	G	A	71.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.10;MQ0=4;OQ=612.21;QD=24.49;SB=-39.52	GT:AD:DP:GL:GQ	0/1:3,22:20:-70.53,-6.02,-10.71:46.85
-chr1	1637044	rs61073446	G	A	19.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=48.10;MQ0=1;OQ=604.36;QD=8.06;SB=-316.73	GT:AD:DP:GL:GQ	0/1:54,21:68:-84.21,-20.50,-156.95:99
-chr1	1637060	.	G	C	0.16	PASS	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=3.23;MQ=46.92;MQ0=1;OQ=770.35;QD=8.37;SB=83.29	GT:AD:DP:GL:GQ	0/1:66,26:89:-107.18,-26.86,-257.87:99
-chr1	1637092	.	A	G	13.80	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=45.24;MQ0=3;OQ=524.47;QD=7.09;SB=62.24	GT:AD:DP:GL:GQ	0/1:50,24:71:-77.11,-21.38,-201.71:99
-chr1	1637137	rs4437818	C	T	70.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.48;MQ=37.21;MQ0=3;OQ=419.91;QD=7.63;SB=-236.03	GT:AD:DP:GL:GQ	0/1:38,17:49:-60.03,-14.76,-127.40:99
-chr1	1637159	rs760928	C	T	610.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.78;MQ0=3;OQ=1773.57;QD=35.47;SB=-891.67	GT:AD:DP:GL:GQ	1/1:0,50:45:-180.95,-13.56,-0.01:99
-chr1	1637161	rs760929	G	A	499.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=39.49;MQ0=3;OQ=1819.83;QD=36.40;SB=-852.64	GT:AD:DP:GL:GQ	1/1:0,50:45:-185.58,-13.55,-0.01:99
-chr1	1637349	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=12.15;MQ=53.21;MQ0=0;OQ=258.06;QD=3.04;SB=74.27	GT:AD:DP:GL:GQ	0/1:68,17:73:-51.13,-22.04,-238.97:99
-chr1	1637350	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=13.99;MQ=53.21;MQ0=0;OQ=156.60;QD=1.84;SB=74.27	GT:AD:DP:GL:GQ	0/1:68,16:78:-42.44,-23.50,-258.99:99
-chr1	1637384	rs760930	C	T	155.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.38;MQ0=0;OQ=2369.71;QD=38.22;SB=-867.02	GT:AD:DP:GL:GQ	1/1:0,62:60:-240.58,-18.08,-0.02:99
-chr1	1637388	rs760931	G	C	174.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.72;MQ0=0;OQ=2115.79;QD=36.48;SB=-781.25	GT:AD:DP:GL:GQ	1/1:0,58:53:-215.20,-15.99,-0.03:99
-chr1	1637546	rs56081394	A	C	94.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=52.34;MQ0=0;OQ=2774.94;QD=32.65;SB=-1180.71	GT:AD:DP:GL:GQ	1/1:0,85:81:-281.12,-24.40,-0.04:99
-chr1	1637613	.	C	T	21.89	LowQual	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=50.67;MQ0=0;QD=0.27;SB=-29.39	GT:AD:DP:GL:GQ	0/1:68,12:72:-27.16,-21.69,-231.62:54.70
-chr1	1637638	.	C	G	0.51	PASS	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=47.75;MQ0=0;OQ=459.74;QD=4.84;SB=-189.88	GT:AD:DP:GL:GQ	0/1:65,30:83:-74.29,-25.03,-272.64:99
-chr1	1637674	.	T	C	96.11	PASS	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.42;MQ0=0;OQ=794.87;QD=7.87;SB=-336.87	GT:AD:DP:GL:GQ	0/1:55,46:82:-107.47,-24.70,-217.72:99
-chr1	1637731	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=47.58;MQ0=0;OQ=197.23;QD=2.38;SB=-124.83	GT:AD:DP:GL:GQ	0/1:61,22:74:-45.30,-22.29,-250.27:99
-chr1	1637788	rs1883424	A	G	452.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.70;MQ0=0;OQ=1180.37;QD=13.26;SB=-539.57	GT:AD:DP:GL:GQ	0/1:48,41:89:-148.13,-26.81,-196.69:99
-chr1	1637887	rs61776857	T	C	8.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=37.62;MQ0=3;OQ=1207.11;QD=23.21;SB=-211.69	GT:AD:DP:GL:GQ	1/1:2,49:41:-124.35,-12.38,-0.05:99
-chr1	1638000	.	G	C	4.04	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=49.72;MQ0=1;OQ=363.96;QD=6.17;SB=-28.72	GT:AD:DP:GL:GQ	0/1:37,21:48:-56.87,-17.19,-155.52:99
-chr1	1638008	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=51.97;MQ0=1;OQ=62.73;QD=1.08;SB=29.80	GT:AD:DP:GL:GQ	0/1:41,17:44:-22.82,-13.26,-168.23:95.57
-chr1	1638068	rs61776858	C	T	414.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.78;MQ0=0;OQ=1645.34;QD=38.26;SB=-705.35	GT:AD:DP:GL:GQ	1/1:1,42:42:-168.13,-12.65,-0.01:99
-chr1	1638095	rs28722732	A	C	115.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=48.13;MQ0=1;OQ=1285.24;QD=32.95;SB=-522.05	GT:AD:DP:GL:GQ	1/1:1,38:38:-132.12,-11.45,-0.02:99
-chr1	1638236	.	G	A	17.91	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=8.77;MQ=38.97;MQ0=0;QD=0.34;SB=23.08	GT:AD:DP:GL:GQ	0/1:43,6:25:-15.81,-10.75,-74.55:50.67
-chr1	1638252	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=56.73;MQ=41.68;MQ0=0;OQ=220.25;QD=3.86;SB=17.08	GT:AD:DP:GL:GQ	0/1:43,13:37:-36.47,-11.16,-97.19:99
-chr1	1638265	rs28669101	A	G	1.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=5.08;MQ=44.94;MQ0=1;OQ=1841.80;QD=27.49;SB=-530.20	GT:AD:DP:GL:GQ	1/1:1,66:52:-187.79,-15.67,-0.02:99
-chr1	1638282	.	T	C	372.16	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=2;HaplotypeScore=20.32;MQ=48.81;MQ0=1;QD=5.64;SB=53.20	GT:AD:DP:GL:GQ	0/1:48,18:62:-59.18,-18.68,-176.85:99
-chr1	1638285	.	G	A	362.16	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=22.88;MQ=49.05;MQ0=1;QD=5.57;SB=50.16	GT:AD:DP:GL:GQ	0/1:45,17:60:-57.59,-18.09,-158.00:99
-chr1	1638291	.	G	T	350.74	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=36.28;MQ=47.79;MQ0=1;QD=5.48;SB=47.16	GT:AD:DP:GL:GQ	0/1:46,17:57:-55.53,-17.18,-142.31:99
-chr1	1638353	.	T	C	4.41	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=49.10;MQ0=0;OQ=579.45;QD=7.24;SB=-118.38	GT:AD:DP:GL:GQ	0/1:52,28:75:-83.82,-22.59,-209.22:99
-chr1	1638397	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.02;HRun=4;HaplotypeScore=13.77;MQ=49.39;MQ0=0;OQ=1251.99;QD=12.16;SB=-214.10	GT:AD:DP:GL:GQ	0/1:54,47:95:-156.50,-28.02,-195.84:99
-chr1	1638484	rs61776859	C	A	0.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=1;HaplotypeScore=3.66;MQ=44.01;MQ0=0;OQ=2573.54;QD=19.06;SB=-1062.18	GT:AD:DP:GL:GQ	0/1:54,81:126:-298.59,-37.95,-167.48:99
-chr1	1638485	.	A	G	2.65	PASS	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=44.20;MQ0=0;OQ=954.08;QD=7.07;SB=27.40	GT:AD:DP:GL:GQ	0/1:81,54:124:-136.06,-37.37,-329.92:99
-chr1	1638496	.	A	C	4.42	PASS	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=43.37;MQ0=0;OQ=1281.45;QD=9.42;SB=-10.58	GT:AD:DP:GL:GQ	0/1:80,56:126:-169.38,-37.95,-296.59:99
-chr1	1638502	.	T	C	3.56	PASS	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=44.49;MQ0=0;OQ=1373.44;QD=10.25;SB=-79.40	GT:AD:DP:GL:GQ	0/1:76,58:123:-177.67,-37.05,-300.79:99
-chr1	1638544	.	C	T	171.39	PASS	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=48.39;MQ0=0;OQ=1993.39;QD=14.44;SB=-439.97	GT:AD:DP:GL:GQ	0/1:62,76:123:-239.68,-37.06,-213.30:99
-chr1	1638628	.	C	T	21.95	PASS	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=49.90;MQ0=0;OQ=1604.78;QD=15.14;SB=-725.65	GT:AD:DP:GL:GQ	0/1:52,53:100:-193.90,-30.14,-170.77:99
-chr1	1638640	.	A	C	22.88	PASS	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=47.54;MQ0=0;OQ=1027.76;QD=10.18;SB=-470.68	GT:AD:DP:GL:GQ	0/1:56,45:93:-134.07,-28.01,-207.58:99
-chr1	1638645	.	G	C	1.18	PASS	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=6.44;MQ=47.94;MQ0=0;OQ=1189.28;QD=12.14;SB=-604.90	GT:AD:DP:GL:GQ	0/1:56,42:91:-149.63,-27.42,-247.05:99
-chr1	1638691	rs61777460	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=1;HaplotypeScore=70.95;MQ=45.55;MQ0=0;OQ=1598.01;QD=14.14;SB=-702.52	GT:AD:DP:GL:GQ	0/1:53,60:107:-195.32,-32.23,-214.62:99
-chr1	1638728	.	T	A	0.06	PASS	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=48.71;MQ0=0;OQ=2481.89;QD=16.22;SB=-1020.86	GT:AD:DP:GL:GQ	0/1:71,82:150:-296.65,-45.18,-270.24:99
-chr1	1638806	rs909824	T	C	0.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=50.30;MQ0=0;OQ=2209.99;QD=14.35;SB=-996.92	GT:AD:DP:GL:GQ	0/1:79,75:150:-269.47,-45.19,-301.46:99
-chr1	1638825	rs61777461	C	T	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=50.48;MQ0=0;OQ=2137.82;QD=14.95;SB=-1070.06	GT:AD:DP:GL:GQ	0/1:71,72:135:-257.74,-40.67,-255.42:99
-chr1	1638946	.	C	T	467.64	SnpCluster	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=32.37;MQ=43.71;MQ0=5;QD=7.19;SB=-205.68	GT:AD:DP:GL:GQ	0/1:44,21:47:-64.21,-14.16,-108.79:99
-chr1	1638954	.	T	C	736.34	SnpCluster	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=21.87;MQ=42.89;MQ0=5;QD=12.70;SB=-358.18	GT:AD:DP:GL:GQ	0/1:23,35:42:-89.58,-12.66,-57.09:99
-chr1	1638955	.	G	A	193.46	SnpCluster	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=28.88;MQ=42.53;MQ0=5;QD=3.39;SB=-66.48	GT:AD:DP:GL:GQ	0/1:44,13:42:-35.29,-12.66,-112.58:99
-chr1	1638965	rs61777464	A	G	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=17.05;MQ=41.40;MQ0=5;OQ=280.02;QD=5.83;SB=-138.25	GT:AD:DP:GL:GQ	0/1:30,18:32:-40.93,-9.64,-84.27:99
-chr1	1638997	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=41.45;MQ0=4;OQ=154.17;QD=3.08;SB=35.12	GT:AD:DP:GL:GQ	0/1:37,12:37:-29.85,-11.15,-98.68:99
-chr1	1639030	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=25.29;MQ=40.65;MQ0=7;OQ=247.09;QD=2.75;SB=50.20	GT:AD:DP:GL:GQ	0/1:68,21:63:-46.97,-18.98,-193.46:99
-chr1	1639109	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=25.12;MQ=46.53;MQ0=4;OQ=115.22;QD=1.05;SB=83.25	GT:AD:DP:GL:GQ	0/1:96,13:84:-40.14,-25.34,-234.06:99
-chr1	1639113	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=24.12;MQ=46.66;MQ0=4;OQ=396.71;QD=3.64;SB=8.10	GT:AD:DP:GL:GQ	0/1:82,27:87:-69.20,-26.24,-219.98:99
-chr1	1639145	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=44.81;MQ=46.42;MQ0=3;OQ=230.67;QD=1.94;SB=-28.38	GT:AD:DP:GL:GQ	0/1:92,27:94:-54.66,-28.31,-297.41:99
-chr1	1639152	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=23.68;MQ=46.30;MQ0=1;OQ=1088.67;QD=9.07;SB=-62.94	GT:AD:DP:GL:GQ	0/1:69,50:95:-140.79,-28.64,-195.69:99
-chr1	1639166	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=19.38;MQ=46.56;MQ0=1;OQ=479.08;QD=3.89;SB=-121.97	GT:AD:DP:GL:GQ	0/1:92,31:101:-81.65,-30.45,-258.17:99
-chr1	1639203	.	C	T	59.61	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=106;Dels=0.01;HRun=4;HaplotypeScore=28.93;MQ=49.66;MQ0=0;QD=0.56;SB=37.04	GT:AD:DP:GL:GQ	0/1:84,20:85:-34.85,-25.61,-268.94:92.45
-chr1	1639204	.	A	G	88.80	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=34.26;MQ=50.07;MQ0=0;QD=0.81;SB=122.42	GT:AD:DP:GL:GQ	0/1:87,23:90:-39.28,-27.11,-316.10:99
-chr1	1639210	.	T	G	106.61	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=109.94;MQ=48.22;MQ0=0;QD=0.90;SB=107.36	GT:AD:DP:GL:GQ	0/1:99,20:91:-41.35,-27.41,-290.49:99
-chr1	1639221	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=51.18;MQ=48.34;MQ0=0;OQ=110.59;QD=0.87;SB=-36.37	GT:AD:DP:GL:GQ	0/1:109,18:89:-41.16,-26.82,-305.73:99
-chr1	1639227	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=3;HaplotypeScore=53.65;MQ=47.85;MQ0=2;OQ=61.26;QD=0.48;SB=63.76	GT:AD:DP:GL:GQ	0/1:90,38:88:-35.92,-26.51,-284.90:94.09
-chr1	1639237	.	A	T	220.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=2;HaplotypeScore=39.50;MQ=47.38;MQ0=3;QD=1.53;SB=98.34	GT:AD:DP:GL:GQ	0/1:108,36:102:-56.01,-30.73,-323.39:99
-chr1	1639238	.	T	C	363.43	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=40.62;MQ=46.99;MQ0=4;QD=2.51;SB=-35.37	GT:AD:DP:GL:GQ	0/1:115,29:91:-67.04,-27.41,-296.52:99
-chr1	1639239	.	T	G	307.74	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=40.46;MQ=46.55;MQ0=5;QD=2.08;SB=5.35	GT:AD:DP:GL:GQ	0/1:110,36:106:-65.98,-31.93,-325.39:99
-chr1	1639244	.	C	G	433.01	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=0;HaplotypeScore=72.81;MQ=46.68;MQ0=6;QD=2.87;SB=-83.32	GT:AD:DP:GL:GQ	0/1:112,37:109:-82.29,-35.70,-402.49:99
-chr1	1639252	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=2;HaplotypeScore=45.12;MQ=45.10;MQ0=7;OQ=932.16;QD=6.13;SB=-397.36	GT:AD:DP:GL:GQ	0/1:117,33:103:-127.53,-31.03,-261.51:99
-chr1	1639301	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=21.56;MQ=40.71;MQ0=20;OQ=622.52;QD=6.35;SB=-215.64	GT:AD:DP:GL:GQ	0/1:52,46:51:-80.90,-15.37,-137.71:99
-chr1	1639318	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=38.28;MQ=34.31;MQ0=28;OQ=125.27;QD=1.35;SB=-14.91	GT:AD:DP:GL:GQ	0/1:76,17:35:-26.35,-10.54,-101.55:99
-chr1	1639325	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=5.46;MQ=33.52;MQ0=28;OQ=116.93;QD=1.38;SB=23.07	GT:AD:DP:GL:GQ	0/1:73,12:33:-24.93,-9.95,-86.29:99
-chr1	1639374	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=20.02;MQ=34.37;MQ0=20;OQ=192.31;QD=2.19;SB=-88.00	GT:AD:DP:GL:GQ	0/1:73,15:45:-36.07,-13.55,-128.18:99
-chr1	1639407	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=42.54;MQ0=9;OQ=114.05;QD=1.02;SB=-8.75	GT:AD:DP:GL:GQ	0/1:85,19:71:-46.36,-31.67,-236.26:99
-chr1	1639417	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=4;HaplotypeScore=17.30;MQ=43.78;MQ0=5;OQ=74.87;QD=0.61;SB=-8.76	GT:AD:DP:GL:GQ	0/1:106,16:83:-35.80,-25.03,-240.05:99
-chr1	1639441	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=3;HaplotypeScore=5.23;MQ=45.90;MQ0=8;OQ=109.77;QD=0.77;SB=-10.15	GT:AD:DP:GL:GQ	0/1:120,22:103:-45.28,-31.02,-334.31:99
-chr1	1639479	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=26.42;MQ=48.72;MQ0=12;OQ=76.35;QD=0.64;SB=70.54	GT:AD:DP:GL:GQ	0/1:100,20:90:-38.04,-27.12,-310.60:99
-chr1	1639492	.	C	T	15.20	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=3;HaplotypeScore=52.40;MQ=48.82;MQ0=15;QD=0.14;SB=67.73	GT:AD:DP:GL:GQ	0/1:90,22:79:-28.59,-23.80,-254.17:47.90
-chr1	1639499	rs36141200	G	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=107;Dels=0.01;HRun=0;HaplotypeScore=32.74;MQ=48.53;MQ0=15;OQ=2982.80;QD=27.88;SB=-1344.29	GT:AD:DP:GL:GQ	1/1:0,106:74:-301.88,-22.29,-0.02:99
-chr1	1639600	rs36135823	C	T	0.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=3;HaplotypeScore=14.31;MQ=43.93;MQ0=12;OQ=2247.07;QD=26.44;SB=-416.38	GT:AD:DP:GL:GQ	1/1:10,75:60:-232.21,-18.08,-3.91:99
-chr1	1639610	rs34963151	A	T	0.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=15.64;MQ=43.34;MQ0=11;OQ=1936.12;QD=25.14;SB=-344.48	GT:AD:DP:GL:GQ	1/1:5,72:55:-200.25,-16.56,-3.05:99
-chr1	1639612	rs36137888	T	G	0.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=11.64;MQ=43.34;MQ0=11;OQ=1831.08;QD=23.78;SB=-311.74	GT:AD:DP:GL:GQ	1/1:2,72:55:-190.04,-16.56,-3.35:99
-chr1	1639702	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=34.54;MQ=35.32;MQ0=37;OQ=98.37;QD=0.75;SB=39.28	GT:AD:DP:GL:GQ	0/1:59,72:53:-29.08,-15.96,-156.59:99
-chr1	1639726	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=70.45;MQ=36.36;MQ0=39;OQ=52.18;QD=0.37;SB=48.69	GT:AD:DP:GL:GQ	0/1:67,74:65:-28.09,-19.58,-201.69:85.02
-chr1	1639861	.	C	T	25.55	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=57.75;MQ=41.48;MQ0=14;QD=0.18;SB=-23.37	GT:AD:DP:GL:GQ	0/1:90,50:90:-32.98,-27.15,-260.27:58.37
-chr1	1639867	.	C	T	19.37	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=3;HaplotypeScore=75.47;MQ=41.18;MQ0=14;QD=0.14;SB=-17.32	GT:AD:DP:GL:GQ	0/1:97,46:92:-32.93,-27.71,-303.81:52.16
-chr1	1639892	rs61777469	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.04;HRun=2;HaplotypeScore=74.14;MQ=41.98;MQ0=12;OQ=2469.47;QD=18.43;SB=-1178.56	GT:AD:DP:GL:GQ	0/1:25,104:86:-276.13,-25.90,-32.75:68.49
-chr1	1639893	rs61777470	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=137.24;MQ=41.98;MQ0=12;OQ=2615.52;QD=19.52;SB=-1204.51	GT:AD:DP:GL:GQ	0/1:44,90:89:-291.64,-26.81,-37.18:99
-chr1	1639911	.	G	A	14.93	LowQual	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=26.42;MQ=45.76;MQ0=10;QD=0.13;SB=-12.75	GT:AD:DP:GL:GQ	0/1:81,37:78:-28.28,-23.52,-231.19:47.63
-chr1	1639962	rs61777471	C	T	260.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=54.09;MQ0=1;OQ=1805.36;QD=37.61;SB=-829.34	GT:AD:DP:GL:GQ	1/1:0,48:47:-184.14,-14.16,-0.02:99
-chr1	1640060	rs1969650	A	C	38.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=47.36;MQ0=0;OQ=1283.12;QD=25.66;SB=-659.19	GT:AD:DP:GL:GQ	1/1:0,50:43:-131.95,-12.97,-0.05:99
-chr1	1640123	rs1967676	G	T	619.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.68;MQ0=0;OQ=2013.64;QD=35.33;SB=-938.04	GT:AD:DP:GL:GQ	1/1:0,57:55:-204.96,-16.56,-0.01:99
-chr1	1640270	rs1967677	T	C	0.01	FDRtranche2.00to10.00	AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=23.68;MQ=51.29;MQ0=1;OQ=2260.88;QD=25.69;SB=-1076.20	GT:AD:DP:GL:GQ	1/1:7,81:78:-241.90,-23.52,-12.23:99
-chr1	1640284	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=21.65;MQ=49.80;MQ0=1;OQ=283.77;QD=2.56;SB=107.23	GT:AD:DP:GL:GQ	0/1:95,16:94:-60.00,-28.34,-253.49:99
-chr1	1640321	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=250.42;MQ=48.13;MQ0=0;OQ=561.76;QD=3.98;SB=122.35	GT:AD:DP:GL:GQ	0/1:98,27:119:-99.13,-39.67,-333.17:99
-chr1	1640332	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=158;Dels=0.00;HRun=0;HaplotypeScore=133.26;MQ=46.63;MQ0=0;OQ=950.96;QD=6.02;SB=119.36	GT:AD:DP:GL:GQ	0/1:94,64:124:-135.74,-37.36,-315.76:99
-chr1	1640347	.	T	C	550.46	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=23.57;MQ=45.32;MQ0=0;QD=3.72;SB=95.35	GT:AD:DP:GL:GQ	0/1:118,30:114:-92.67,-34.34,-350.75:99
-chr1	1640368	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=38.96;MQ=45.47;MQ0=0;OQ=414.73;QD=2.94;SB=65.22	GT:AD:DP:GL:GQ	0/1:119,22:108:-77.29,-32.53,-317.79:99
-chr1	1640378	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=4;HaplotypeScore=21.61;MQ=45.56;MQ0=0;OQ=227.10;QD=1.77;SB=59.14	GT:AD:DP:GL:GQ	0/1:110,18:98:-55.53,-29.53,-284.49:99
-chr1	1640389	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=23.69;MQ=45.00;MQ0=0;OQ=372.62;QD=3.11;SB=38.14	GT:AD:DP:GL:GQ	0/1:83,37:73:-62.56,-22.01,-186.44:99
-chr1	1640393	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=31.49;MQ=46.43;MQ0=0;OQ=193.70;QD=1.67;SB=47.18	GT:AD:DP:GL:GQ	0/1:63,52:78:-46.16,-23.50,-255.92:99
-chr1	1640402	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=3;HaplotypeScore=44.61;MQ=47.57;MQ0=0;OQ=589.53;QD=5.51;SB=47.18	GT:AD:DP:GL:GQ	0/1:71,36:90:-89.34,-27.11,-243.28:99
-chr1	1640405	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=32.67;MQ=47.67;MQ0=0;OQ=576.56;QD=5.54;SB=44.17	GT:AD:DP:GL:GQ	0/1:79,25:85:-86.54,-25.60,-227.82:99
-chr1	1640428	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=12.31;MQ=51.68;MQ0=0;OQ=687.66;QD=7.47;SB=59.21	GT:AD:DP:GL:GQ	0/1:63,29:86:-97.95,-25.90,-226.28:99
-chr1	1640435	.	T	C	0.39	PASS	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=52.41;MQ0=0;OQ=479.95;QD=4.95;SB=65.24	GT:AD:DP:GL:GQ	0/1:69,28:91:-78.69,-27.41,-274.97:99
-chr1	1640479	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=10.56;MQ=53.01;MQ0=0;OQ=125.57;QD=1.23;SB=55.33	GT:AD:DP:GL:GQ	0/1:77,25:89:-42.65,-26.81,-277.44:99
-chr1	1640500	.	C	A	40.46	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=5.00;MQ=52.43;MQ0=0;QD=0.42;SB=79.01	GT:AD:DP:GL:GQ	0/1:71,25:78:-30.82,-23.49,-254.06:73.30
-chr1	1640502	.	T	G	39.38	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=52.41;MQ0=0;QD=0.40;SB=58.40	GT:AD:DP:GL:GQ	0/1:73,26:82:-31.92,-24.69,-274.53:72.21
-chr1	1640517	.	C	G	1.85	PASS	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.82;MQ0=0;OQ=540.14;QD=4.54;SB=-210.84	GT:AD:DP:GL:GQ	0/1:81,38:99:-87.13,-29.83,-340.31:99
-chr1	1640647	rs17845218	T	C	5.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=139;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=46.16;MQ0=1;OQ=829.41;QD=5.97;SB=-392.09	GT:AD:DP:GL:GQ	0/1:85,54:124:-123.60,-37.37,-339.83:99
-chr1	1640657	rs1059830	A	G	689.07	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=46.01;MQ0=1;QD=5.07;SB=-273.97	GT:AD:DP:GL:GQ	0/1:84,52:114:-106.55,-34.36,-315.05:99
-chr1	1640661	rs1137004	T	C	924.56	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=137;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.08;MQ0=1;QD=6.75;SB=-478.80	GT:AD:DP:GL:GQ	0/1:82,55:116:-130.68,-34.94,-330.64:99
-chr1	1640667	rs3200657	T	C	2206.14	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=43.98;MQ0=1;QD=16.59;SB=-708.39	GT:AD:DP:GL:GQ	0/1:59,73:112:-259.82,-35.92,-162.90:99
-chr1	1640692	.	A	G	15.57	PASS	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=41.55;MQ0=0;OQ=1129.49;QD=8.89;SB=-491.78	GT:AD:DP:GL:GQ	0/1:59,68:99:-146.06,-29.83,-231.81:99
-chr1	1640705	rs1059831	G	A	307.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=41.79;MQ0=0;OQ=1854.51;QD=15.72;SB=-686.99	GT:AD:DP:GL:GQ	0/1:63,55:86:-214.65,-25.92,-105.31:99
-chr1	1640780	rs36191908	G	A	2.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=50.84;MQ0=0;OQ=222.00;QD=2.52;SB=-69.38	GT:AD:DP:GL:GQ	0/1:66,22:78:-49.00,-23.51,-215.31:99
-chr1	1640799	.	G	A	26.24	LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.16;MQ0=0;QD=0.29;SB=-18.77	GT:AD:DP:GL:GQ	0/1:79,12:87:-32.13,-26.22,-265.70:59.07
-chr1	1640856	.	T	C	1.18	PASS	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=51.06;MQ0=0;OQ=537.04;QD=4.84;SB=42.60	GT:AD:DP:GL:GQ	0/1:73,38:93:-85.00,-28.02,-284.38:99
-chr1	1640863	.	G	A	0.15	PASS	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=50.41;MQ0=0;OQ=682.37;QD=6.20;SB=40.52	GT:AD:DP:GL:GQ	0/1:69,41:93:-99.55,-28.03,-223.44:99
-chr1	1640907	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=91;Dels=0.01;HRun=2;HaplotypeScore=10.49;MQ=48.20;MQ0=0;OQ=731.52;QD=8.04;SB=71.23	GT:AD:DP:GL:GQ	0/1:53,37:73:-98.42,-21.99,-174.07:99
-chr1	1640923	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=64.78;MQ=43.84;MQ0=1;OQ=272.78;QD=3.17;SB=56.20	GT:AD:DP:GL:GQ	0/1:67,19:80:-54.67,-24.11,-250.01:99
-chr1	1640931	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=98.55;MQ=40.13;MQ0=1;OQ=147.14;QD=2.16;SB=38.15	GT:AD:DP:GL:GQ	0/1:57,11:64:-37.28,-19.28,-217.64:99
-chr1	1640986	.	A	C	0.64	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=43.40;MQ0=0;OQ=371.72;QD=5.81;SB=77.22	GT:AD:DP:GL:GQ	0/1:47,17:62:-59.13,-18.68,-158.05:99
-chr1	1640996	.	C	T	0.49	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=45.56;MQ0=0;OQ=291.78;QD=4.63;SB=80.17	GT:AD:DP:GL:GQ	0/1:49,14:56:-49.34,-16.88,-145.60:99
-chr1	1641016	.	C	T	53.74	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=51.28;MQ0=0;QD=0.87;SB=74.21	GT:AD:DP:GL:GQ	0/1:47,15:50:-23.72,-15.06,-152.06:86.58
-chr1	1641017	.	A	G	257.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=51.43;MQ0=0;QD=4.08;SB=80.28	GT:AD:DP:GL:GQ	0/1:48,15:61:-47.39,-18.39,-179.46:99
-chr1	1641026	.	C	T	369.95	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=52.99;MQ0=0;QD=5.97;SB=74.25	GT:AD:DP:GL:GQ	0/1:47,15:60:-58.35,-18.07,-168.55:99
-chr1	1641040	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=51.94;MQ0=0;OQ=253.54;QD=4.23;SB=74.26	GT:AD:DP:GL:GQ	0/1:44,15:55:-45.26,-16.62,-168.61:99
-chr1	1641126	rs12137617	A	G	24.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=54.87;MQ0=0;OQ=1275.18;QD=31.10;SB=-536.43	GT:AD:DP:GL:GQ	1/1:0,41:37:-131.12,-11.15,-0.02:99
-chr1	1641482	rs11260627	C	T	34.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=55.33;MQ0=0;OQ=1435.98;QD=36.82;SB=-496.00	GT:AD:DP:GL:GQ	1/1:0,39:37:-147.19,-11.15,-0.01:99
-chr1	1641491	rs12135951	T	G	20.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=56.50;MQ0=0;OQ=197.57;QD=5.20;SB=-66.56	GT:AD:DP:GL:GQ	0/1:25,13:35:-33.59,-10.55,-90.46:99
-chr1	1641587	rs12044811	G	A	0.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=15.92;MQ=55.20;MQ0=1;OQ=1462.24;QD=35.66;SB=-578.76	GT:AD:DP:GL:GQ	1/1:1,40:37:-149.82,-11.15,-0.01:99
-chr1	1641608	rs12044814	G	C	398.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.85;MQ0=0;OQ=998.26;QD=30.25;SB=-358.22	GT:AD:DP:GL:GQ	1/1:1,32:26:-103.43,-7.84,-0.02:78.25
-chr1	1641675	rs4648768	T	C	52.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=49.39;MQ0=0;OQ=640.24;QD=18.29;SB=-205.57	GT:AD:DP:GL:GQ	1/1:0,32:21:-67.63,-6.34,-0.02:63.13
-chr1	1641761	rs4648772	T	C	503.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.21;MQ0=0;OQ=1369.78;QD=30.44;SB=-625.00	GT:AD:DP:GL:GQ	1/1:0,45:43:-140.60,-12.97,-0.03:99
-chr1	1641771	rs4648773	C	A	18.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.41;MQ=54.78;MQ0=0;OQ=1559.28;QD=33.90;SB=-751.90	GT:AD:DP:GL:GQ	1/1:0,46:44:-159.53,-13.25,-0.02:99
-chr1	1641797	rs4648775	G	A	91.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=54.06;MQ0=0;OQ=1591.86;QD=36.18;SB=-734.99	GT:AD:DP:GL:GQ	1/1:0,44:41:-162.79,-12.35,-0.01:99
-chr1	1641822	rs4648776	G	A	529.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.06;MQ0=0;OQ=1730.65;QD=38.46;SB=-774.66	GT:AD:DP:GL:GQ	1/1:0,45:44:-176.66,-13.26,-0.01:99
-chr1	1642086	rs4648777	A	G	238.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.56;MQ0=1;OQ=1172.89;QD=24.44;SB=-406.15	GT:AD:DP:GL:GQ	1/1:1,47:39:-120.92,-11.77,-0.04:99
-chr1	1642864	rs36039898	T	C	113.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.55;MQ0=0;OQ=2211.83;QD=36.26;SB=-727.29	GT:AD:DP:GL:GQ	1/1:0,61:61:-224.79,-18.37,-0.02:99
-chr1	1642888	rs16825265	C	T	105.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=54.90;MQ0=0;OQ=2464.17;QD=40.40;SB=-985.30	GT:AD:DP:GL:GQ	1/1:0,61:61:-250.01,-18.37,-0.01:99
-chr1	1643163	rs35548050	T	C	620.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.02;MQ0=0;OQ=2383.87;QD=34.06;SB=-1115.83	GT:AD:DP:GL:GQ	1/1:0,70:67:-241.99,-20.18,-0.02:99
-chr1	1643221	rs2206307	C	T	629.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.40;MQ0=0;OQ=2196.71;QD=34.87;SB=-1116.03	GT:AD:DP:GL:GQ	1/1:0,63:57:-223.28,-17.18,-0.02:99
-chr1	1643274	rs2206308	C	T	615.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.68;MQ0=0;OQ=2077.20;QD=37.77;SB=-1010.04	GT:AD:DP:GL:GQ	1/1:0,55:53:-211.32,-15.97,-0.02:99
-chr1	1643659	rs2223485	C	T	454.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.70;MQ0=1;OQ=1724.40;QD=36.69;SB=-535.21	GT:AD:DP:GL:GQ	1/1:0,47:43:-176.03,-12.95,-0.01:99
-chr1	1643745	rs61777493	C	A	268.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=53.15;MQ0=3;OQ=2449.58;QD=34.50;SB=-1240.29	GT:AD:DP:GL:GQ	1/1:3,68:66:-248.56,-19.87,-0.01:99
-chr1	1643867	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=19.40;MQ0=14;OQ=84.98;QD=3.04;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,15:12:-15.40,-3.61,-30.71:99
-chr1	1643873	.	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=27;Dels=0.41;HRun=0;HaplotypeScore=83.92;MQ=18.34;MQ0=14;OQ=350.65;QD=12.99;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:10:-42.29,-6.54,-3.64:28.97
-chr1	1643898	rs61777494	G	A	157	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.17;MQ0=2;OQ=461.81;QD=27.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,16:12:-49.77,-3.61,-0.00:36.12
-chr1	1643918	rs61777495	C	T	757.85	Indel	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.37;MQ0=1;QD=31.58;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,23:19:-79.37,-5.72,-0.00:57.19
-chr1	1643924	.	A	T	950.73	Indel	AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.62;MQ0=1;QD=30.67;SB=-180.94	GT:AD:DP:GL:GQ	1/1:1,30:26:-98.67,-7.83,-0.01:78.24
-chr1	1644591	rs61777496	G	A	138.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.34;MQ0=0;OQ=130.88;QD=26.18;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:4:-16.62,-1.20,-0.00:12.04
-chr1	1644813	rs2056977	A	G	170.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.65;MQ0=9;OQ=292.06;QD=7.69;SB=-147.83	GT:AD:DP:GL:GQ	1/1:7,31:10:-32.80,-3.01,-0.01:30.08
-chr1	1645334	rs11486024	G	A	35.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=22.46;MQ0=10;OQ=345.89;QD=5.67;SB=32.11	GT:AD:DP:GL:GQ	0/1:46,15:32:-47.52,-9.65,-66.64:99
-chr1	1645788	rs28649027	G	C	26.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=53.44;MQ0=0;OQ=593.92;QD=15.23;SB=-280.31	GT:AD:DP:GL:GQ	0/1:20,19:36:-73.54,-10.87,-73.49:99
-chr1	1646881	rs61777497	T	C	0.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=11.68;MQ0=43;OQ=71.62;QD=1.23;SB=-32.65	GT:AD:DP:GL:GQ	0/1:40,18:10:-13.46,-3.01,-23.67:99
-chr1	1646928	.	C	T	0.40	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.38;MQ0=21;OQ=97.42;QD=2.87;SB=-39.65	GT:AD:DP:GL:GQ	0/1:20,14:7:-15.13,-2.11,-10.71:85.98
-chr1	1646938	rs61776763	A	G	17.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.10;MQ=17.28;MQ0=15;OQ=266.90;QD=8.34;SB=-88.98	GT:AD:DP:GL:GQ	1/1:0,32:9:-30.28,-2.71,-0.01:27.04
-chr1	1646996	rs4648783	T	C	206.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=31.62;MQ0=1;OQ=494.82;QD=9.00;SB=-214.36	GT:AD:DP:GL:GQ	0/1:25,30:43:-65.73,-12.96,-90.44:99
-chr1	1647044	rs4648784	C	G	2.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.82;MQ=32.49;MQ0=8;OQ=1818.45;QD=23.93;SB=-827.04	GT:AD:DP:GL:GQ	0/1:14,62:58:-202.62,-17.49,-37.52:99
-chr1	1647352	rs9439501	G	C	210.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=45.38;MQ0=4;OQ=1643.24;QD=34.96;SB=-614.99	GT:AD:DP:GL:GQ	1/1:0,47:39:-167.92,-11.75,-0.01:99
-chr1	1647425	rs11576302	G	A	125.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=52.45;MQ0=0;OQ=868.24;QD=17.72;SB=-259.77	GT:AD:DP:GL:GQ	0/1:23,26:49:-104.87,-14.76,-83.38:99
-chr1	1647461	rs11589282	T	C	44.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=51.71;MQ0=1;OQ=1927.78;QD=33.24;SB=-715.12	GT:AD:DP:GL:GQ	1/1:0,58:56:-196.39,-16.87,-0.02:99
-chr1	1648203	rs4648785	T	C	8.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=39.29;MQ0=4;OQ=1376.56;QD=30.59;SB=-396.50	GT:AD:DP:GL:GQ	1/1:0,45:38:-141.25,-11.44,-0.01:99
-chr1	1648805	rs1062057	T	C	6.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=3.69;MQ=25.80;MQ0=25;OQ=1469.54;QD=13.86;SB=-734.60	GT:AD:DP:GL:GQ	0/1:45,61:78:-173.74,-23.50,-116.68:99
-chr1	1649970	rs1801781	C	A	600.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.53;MQ0=0;OQ=2075.47;QD=36.41;SB=-874.83	GT:AD:DP:GL:GQ	1/1:0,57:57:-211.15,-17.17,-0.01:99
-chr1	1650495	rs2377220	T	G	497.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.20;MQ0=1;OQ=1908.80;QD=31.81;SB=-547.03	GT:AD:DP:GL:GQ	1/1:0,60:54:-194.48,-16.27,-0.02:99
-chr1	1650579	.	G	C	24.29	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=9.52;MQ=48.11;MQ0=12;QD=0.34;SB=80.30	GT:AD:DP:GL:GQ	0/1:60,12:43:-18.68,-12.97,-167.36:57.11
-chr1	1650586	rs28662997	T	C	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=7.30;MQ=48.54;MQ0=13;OQ=175.02;QD=2.22;SB=-47.44	GT:AD:DP:GL:GQ	0/1:53,26:60:-38.86,-18.08,-194.29:99
-chr1	1650595	rs1061883	T	C	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=49.38;MQ0=13;OQ=60.20;QD=0.69;SB=-8.74	GT:AD:DP:GL:GQ	0/1:58,29:65:-28.90,-19.59,-216.78:93.04
-chr1	1651158	rs1546882	A	G	91.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.86;MQ=36.24;MQ0=1;OQ=1126.99;QD=14.09;SB=-474.67	GT:AD:DP:GL:GQ	0/1:32,48:73:-138.00,-22.01,-116.79:99
-chr1	1651704	rs61777505	G	C	26.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=32.64;MQ0=2;OQ=1226.35;QD=32.27;SB=-479.52	GT:AD:DP:GL:GQ	1/1:4,34:33:-134.22,-9.95,-8.01:19.39
-chr1	1652175	.	C	G	107.65	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.31;MQ0=18;OQ=446.15;QD=8.42;SB=-112.32	GT:AD:DP:GL:GQ	0/1:32,21:35:-58.45,-10.56,-85.98:99
-chr1	1652288	rs2281171	A	G	55.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.68;MQ=47.07;MQ0=0;OQ=1046.84;QD=33.77;SB=-483.46	GT:AD:DP:GL:GQ	1/1:0,31:31:-108.28,-9.34,-0.01:93.26
-chr1	1652674	rs61777506	T	C	260.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.10;MQ0=0;OQ=1515.24;QD=32.94;SB=-289.56	GT:AD:DP:GL:GQ	1/1:0,46:45:-155.13,-13.56,-0.02:99
-chr1	1652697	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=17;HaplotypeScore=26.60;MQ=53.41;MQ0=0;OQ=216.45;QD=3.80;SB=47.16	GT:AD:DP:GL:GQ	0/1:42,15:40:-36.99,-12.06,-92.34:99
-chr1	1652700	.	G	A	48.19	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=19.75;MQ=52.95;MQ0=0;QD=0.96;SB=53.18	GT:AD:DP:GL:GQ	0/1:40,10:33:-18.05,-9.95,-95.61:81.03
-chr1	1652755	rs61777507	A	G	615.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1969.12;QD=34.55;SB=-927.86	GT:AD:DP:GL:GQ	1/1:0,57:57:-200.52,-17.17,-0.03:99
-chr1	1653262	rs34298494	A	C	3.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=4.92;MQ=57.93;MQ0=0;OQ=1820.14;QD=28.89;SB=-933.22	GT:AD:DP:GL:GQ	1/1:0,63:59:-185.65,-17.78,-0.05:99
-chr1	1653465	.	A	G	0.67	PASS	AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.82;MQ=58.69;MQ0=0;OQ=1218.77;QD=28.34;SB=-585.02	GT:AD:DP:GL:GQ	1/1:0,43:39:-125.50,-11.76,-0.03:99
-chr1	1653691	rs3817856	C	T	262.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=59.21;MQ0=0;OQ=2006.29;QD=37.85;SB=-990.80	GT:AD:DP:GL:GQ	1/1:0,53:51:-204.23,-15.37,-0.02:99
-chr1	1653879	rs2294488	T	C	118.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=52.10;MQ0=0;OQ=1419.75;QD=28.40;SB=-681.96	GT:AD:DP:GL:GQ	1/1:0,49:45:-145.60,-13.57,-0.04:99
-chr1	1653984	rs2294489	T	C	14.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=58.58;MQ0=0;OQ=1353.88;QD=31.49;SB=-691.09	GT:AD:DP:GL:GQ	1/1:0,43:40:-138.99,-12.05,-0.02:99
-chr1	1655431	rs61777508	T	G	492.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.47;MQ0=3;OQ=2585.92;QD=31.92;SB=-532.88	GT:AD:DP:GL:GQ	1/1:0,81:75:-262.21,-22.59,-0.04:99
-chr1	1655473	rs4648764	A	G	513.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.46;MQ0=4;OQ=2874.97;QD=29.64;SB=-827.61	GT:AD:DP:GL:GQ	1/1:1,96:86:-291.13,-25.92,-0.05:99
-chr1	1655600	rs2281176	T	C	43.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=43.78;MQ0=0;OQ=2374.61;QD=30.44;SB=-588.04	GT:AD:DP:GL:GQ	1/1:0,78:71:-241.09,-21.40,-0.04:99
-chr1	1655607	rs2281177	T	C	16.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=43.12;MQ0=0;OQ=1801.45;QD=22.24;SB=-550.84	GT:AD:DP:GL:GQ	0/1:17,64:75:-206.03,-22.60,-57.34:99
-chr1	1656111	.	G	A	19.94	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=24.98;MQ0=9;OQ=1269.10;QD=20.14;SB=-363.89	GT:AD:DP:GL:GQ	0/1:20,43:51:-145.56,-15.37,-46.93:99
-chr1	1656198	rs2072924	G	A	130.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=29.23;MQ0=3;OQ=1510.31;QD=34.33;SB=-636.84	GT:AD:DP:GL:GQ	1/1:0,44:39:-154.63,-11.75,-0.02:99
-chr1	1656202	rs2072925	A	G	35.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=31.20;MQ0=3;OQ=1130.90;QD=24.58;SB=-545.87	GT:AD:DP:GL:GQ	1/1:0,46:37:-116.71,-11.16,-0.04:99
-chr1	1656475	rs2076325	C	T	114.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=50.53;MQ0=0;OQ=1787.32;QD=37.24;SB=-867.16	GT:AD:DP:GL:GQ	1/1:0,48:46:-182.33,-13.86,-0.01:99
-chr1	1657113	rs1474648	T	C	589.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.20;MQ0=0;OQ=2447.49;QD=32.63;SB=-1145.82	GT:AD:DP:GL:GQ	1/1:0,75:68:-248.35,-20.48,-0.02:99
-chr1	1657231	rs1474649	A	G	31.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=49.42;MQ0=0;OQ=1497.15;QD=33.27;SB=-642.31	GT:AD:DP:GL:GQ	1/1:0,45:43:-153.31,-12.95,-0.02:99
-chr1	1657279	rs2377208	A	C	135.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=44.04;MQ0=1;OQ=1645.48;QD=30.47;SB=-668.23	GT:AD:DP:GL:GQ	1/1:0,54:48:-168.15,-14.46,-0.02:99
-chr1	1658028	rs28718827	G	T	1.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=10.14;MQ=51.62;MQ0=0;OQ=1872.10;QD=31.73;SB=-828.68	GT:AD:DP:GL:GQ	1/1:2,57:55:-190.82,-16.57,-0.03:99
-chr1	1658119	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=18;HaplotypeScore=24.79;MQ=51.46;MQ0=0;OQ=102.87;QD=1.49;SB=-23.99	GT:AD:DP:GL:GQ	0/1:55,12:49:-28.05,-14.47,-131.71:99
-chr1	1658135	rs2889577	A	G	0.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=15.54;MQ=53.86;MQ0=0;OQ=1611.78;QD=21.78;SB=-529.45	GT:AD:DP:GL:GQ	1/1:8,66:53:-172.54,-15.98,-7.77:82.05
-chr1	1658803	rs28537345	A	C	60.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.02;HRun=1;HaplotypeScore=0.16;MQ=51.80;MQ0=0;OQ=1884.76;QD=31.95;SB=-820.50	GT:AD:DP:GL:GQ	1/1:0,58:56:-192.08,-16.57,-0.02:99
-chr1	1659088	rs11485870	T	C	2.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=5.25;MQ=48.74;MQ0=0;OQ=1314.03;QD=25.77;SB=-582.00	GT:AD:DP:GL:GQ	1/1:2,49:46:-142.54,-13.87,-7.55:63.21
-chr1	1659426	rs9442408	C	T	56.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=38.94;MQ0=1;OQ=469.40;QD=7.96;SB=-62.79	GT:AD:DP:GL:GQ	0/1:41,18:57:-67.39,-17.17,-141.22:99
-chr1	1659594	rs61777512	G	T	329.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.52;MQ0=1;OQ=761.00;QD=27.18;SB=-349.52	GT:AD:DP:GL:GQ	1/1:2,26:23:-79.70,-6.93,-0.01:69.17
-chr1	1659896	.	C	A	16.91	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=18.32;MQ0=25;OQ=324.85;QD=7.55;SB=-33.35	GT:AD:DP:GL:GQ	0/1:14,29:14:-39.99,-4.22,-11.38:71.59
-chr1	1659905	.	C	T	19.49	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=18.62;MQ0=24;OQ=356.25;QD=8.28;SB=-31.52	GT:AD:DP:GL:GQ	0/1:14,29:15:-43.43,-4.52,-12.58:80.58
-chr1	1661214	rs2005995	G	A	408.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=11.78;MQ0=23;OQ=327.72;QD=9.93;SB=-165.22	GT:AD:DP:GL:GQ	1/1:16,17:9:-36.36,-2.71,-0.00:27.09
-chr1	1661590	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.96;MQ=36.56;MQ0=3;OQ=54.36;QD=1.05;SB=68.26	GT:AD:DP:GL:GQ	0/1:38,14:35:-19.28,-10.56,-129.90:87.20
-chr1	1661642	rs4648793	C	T	457.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.04;MQ0=0;OQ=1470.76;QD=37.71;SB=-587.27	GT:AD:DP:GL:GQ	1/1:0,39:38:-150.68,-11.45,-0.01:99
-chr1	1661726	rs7364986	A	T	4.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=5.15;MQ=47.34;MQ0=1;OQ=2656.76;QD=33.63;SB=-1106.52	GT:AD:DP:GL:GQ	1/1:0,79:72:-269.28,-21.69,-0.02:99
-chr1	1662002	.	C	T	0.16	PASS	AC=2;AF=1.00;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.72;MQ=52.52;MQ0=1;OQ=1857.08;QD=37.14;SB=-705.36	GT:AD:DP:GL:GQ	1/1:0,50:47:-189.31,-14.16,-0.02:99
-chr1	1662772	.	C	T	43.11	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=50.80;MQ0=2;QD=0.70;SB=83.20	GT:AD:DP:GL:GQ	0/1:53,9:53:-23.58,-15.98,-150.38:75.94
-chr1	1663032	.	T	C	46.58	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=53.54;MQ0=2;QD=0.93;SB=38.12	GT:AD:DP:GL:GQ	0/1:38,9:34:-18.20,-10.26,-102.10:79.41
-chr1	1663379	rs35790103	T	C	8.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=-0.24;MQ=57.22;MQ0=0;OQ=1409.71;QD=33.56;SB=-634.30	GT:AD:DP:GL:GQ	1/1:0,42:41:-144.58,-12.35,-0.02:99
-chr1	1663767	rs35678883	G	C	8.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=2.38;MQ=50.72;MQ0=2;OQ=2425.38;QD=39.12;SB=-647.42	GT:AD:DP:GL:GQ	1/1:0,62:56:-246.15,-16.88,-0.03:99
-chr1	1663886	rs36050429	G	C	377.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.29;MQ0=3;OQ=1259.11;QD=34.03;SB=-328.71	GT:AD:DP:GL:GQ	1/1:0,37:30:-129.51,-9.04,-0.01:90.30
-chr1	1664767	.	G	C	282.90	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.97;MQ0=0;OQ=606.08;QD=13.77;SB=-320.01	GT:AD:DP:GL:GQ	0/1:24,20:40:-75.96,-12.06,-88.71:99
-chr1	1664855	.	A	G	129.97	Indel	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=9.28;MQ=43.11;MQ0=1;QD=4.06;SB=-24.89	GT:AD:DP:GL:GQ	0/1:24,8:26:-24.12,-7.84,-71.93:99
-chr1	1664856	.	G	A	433.28	Indel	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=12;HaplotypeScore=9.83;MQ=42.77;MQ0=1;QD=12.74;SB=-25.59	GT:AD:DP:GL:GQ	0/1:18,16:29:-55.35,-8.74,-47.19:99
-chr1	1665027	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=13;HaplotypeScore=3.74;MQ=53.18;MQ0=0;OQ=78.07;QD=1.28;SB=0.76	GT:AD:DP:GL:GQ	0/1:47,14:45:-24.65,-13.56,-131.48:99
-chr1	1665395	.	C	T	17.70	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.53;MQ=22.06;MQ0=30;QD=0.34;SB=14.07	GT:AD:DP:GL:GQ	0/1:42,10:21:-11.37,-6.32,-66.25:50.46
-chr1	1667416	rs16824474	G	C	10.38	LowQual	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=47.86;MQ0=3;QD=0.61;SB=-0.97	GT:AD:DP:GL:GQ	0/1:12,5:14:-8.50,-4.22,-50.97:42.79
-chr1	1670869	.	G	C	14.33	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=45.06;MQ0=4;QD=0.19;SB=74.28	GT:AD:DP:GL:GQ	0/1:64,12:62:-23.39,-18.69,-239.55:47
-chr1	1670881	.	G	C	19.24	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.38;MQ=42.81;MQ0=4;QD=0.27;SB=74.28	GT:AD:DP:GL:GQ	0/1:59,12:59:-22.99,-17.79,-226.11:52.02
-chr1	1670904	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=38.22;MQ0=4;OQ=63.86;QD=0.91;SB=56.13	GT:AD:DP:GL:GQ	0/1:50,20:51:-25.06,-15.39,-141.72:96.69
-chr1	1670928	.	G	A	848.58	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=30.83;MQ0=10;QD=13.91;SB=-297.25	GT:AD:DP:GL:GQ	0/1:30,31:35:-98.68,-10.54,-33.99:99
-chr1	1670936	.	G	T	255.10	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=3;HaplotypeScore=4.00;MQ=28.80;MQ0=12;QD=3.99;SB=20.07	GT:AD:DP:GL:GQ	0/1:33,31:36:-39.64,-10.84,-86.07:99
-chr1	1671525	rs35301881	C	T	26.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=43.35;MQ0=4;OQ=980.88;QD=30.65;SB=-483.00	GT:AD:DP:GL:GQ	1/1:4,28:26:-101.68,-7.83,-0.01:78.25
-chr1	1672234	rs4648812	G	A	127.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.23;MQ0=1;OQ=275.04;QD=7.86;SB=-150.63	GT:AD:DP:GL:GQ	0/1:24,11:30:-39.83,-9.05,-63.69:99
-chr1	1673187	rs14390	C	T	78.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=730.68;QD=36.53;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,20:19:-76.66,-5.72,-0.00:57.19
-chr1	1673425	rs12588	G	A	34.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=30.14;MQ0=16;OQ=466.02;QD=6.66;SB=-83.01	GT:AD:DP:GL:GQ	0/1:47,23:47:-64.06,-14.17,-100.00:99
-chr1	1675073	rs2072928	C	G	44.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.71;MQ=59.55;MQ0=0;OQ=1934.62;QD=37.93;SB=-835.43	GT:AD:DP:GL:GQ	1/1:0,51:47:-197.07,-14.17,-0.02:99
-chr1	1675900	rs4751	G	T	24.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.42;MQ=59.65;MQ0=0;OQ=1889.22;QD=34.99;SB=-617.91	GT:AD:DP:GL:GQ	1/1:0,54:52:-192.52,-15.66,-0.02:99
-chr1	1676803	rs2072929	T	C	69.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1256.22;QD=28.55;SB=-491.53	GT:AD:DP:GL:GQ	1/1:0,44:41:-129.26,-12.37,-0.05:99
-chr1	1676822	rs2076327	C	T	34.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=58.97;MQ0=0;OQ=1637.49;QD=36.39;SB=-774.03	GT:AD:DP:GL:GQ	1/1:0,45:43:-167.35,-12.96,-0.02:99
-chr1	1677485	rs34306661	T	C	77.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=60.00;MQ0=0;OQ=1787.88;QD=27.94;SB=-566.94	GT:AD:DP:GL:GQ	1/1:0,64:57:-182.43,-17.19,-0.05:99
-chr1	1677651	.	C	T	157.32	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=1381.04;QD=20.92;SB=-549.37	GT:AD:DP:GL:GQ	0/1:23,43:64:-160.68,-19.29,-80.55:99
-chr1	1677956	.	C	T	7.81	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=59.68;MQ0=0;OQ=1209.30;QD=20.50;SB=-531.10	GT:AD:DP:GL:GQ	0/1:22,37:56:-141.09,-16.88,-73.03:99
-chr1	1678052	rs2281173	A	G	576.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1215.40;QD=30.39;SB=-536.99	GT:AD:DP:GL:GQ	1/1:0,40:39:-125.17,-11.77,-0.04:99
-chr1	1678329	rs4648623	C	G	0.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.16;MQ0=0;OQ=844.68;QD=36.73;SB=-124.74	GT:AD:DP:GL:GQ	1/1:0,23:22:-88.07,-6.64,-0.02:66.21
-chr1	1678373	rs4648624	G	T	1.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.84;MQ0=0;OQ=639.15;QD=31.96;SB=-120.84	GT:AD:DP:GL:GQ	1/1:0,20:19:-67.51,-5.72,-0.01:57.16
-chr1	1679024	rs2235536	C	T	173.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.47;MQ0=0;OQ=2302.66;QD=39.70;SB=-1126.49	GT:AD:DP:GL:GQ	1/1:0,58:58:-233.87,-17.47,-0.02:99
-chr1	1679622	rs2235537	T	C	108.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=59.56;MQ0=0;OQ=1772.95;QD=33.45;SB=-589.32	GT:AD:DP:GL:GQ	1/1:0,53:52:-180.90,-15.67,-0.02:99
-chr1	1681624	.	G	A	66.45	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=58.28;MQ0=0;OQ=379.97;QD=10.00;SB=-141.64	GT:AD:DP:GL:GQ	0/1:24,13:33:-51.23,-9.94,-69.72:99
-chr1	1682181	rs1107910	T	C	610.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1733.17;QD=30.41;SB=-652.94	GT:AD:DP:GL:GQ	1/1:0,57:55:-176.95,-16.58,-0.05:99
-chr1	1683963	rs2011384	A	G	3.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=4.20;MQ=58.55;MQ0=0;OQ=1546.21;QD=34.36;SB=-525.21	GT:AD:DP:GL:GQ	1/1:0,45:43:-158.22,-12.95,-0.01:99
-chr1	1684111	.	C	T	6.27	PASS	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=5.81;MQ=58.90;MQ0=0;OQ=1337.84;QD=16.12;SB=-601.14	GT:AD:DP:GL:GQ	0/1:40,41:79:-160.90,-23.83,-119.77:99
-chr1	1685322	rs4648629	C	A	210.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.13;MQ0=0;OQ=2599.96;QD=34.67;SB=-1123.97	GT:AD:DP:GL:GQ	1/1:0,75:71:-263.60,-21.38,-0.02:99
-chr1	1685434	rs876029	G	T	83.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1202.21;QD=31.64;SB=-492.27	GT:AD:DP:GL:GQ	1/1:0,38:36:-123.83,-10.85,-0.02:99
-chr1	1685691	rs63093560	C	T	514.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=1899.13;QD=37.98;SB=-713.35	GT:AD:DP:GL:GQ	1/1:0,50:49:-193.52,-14.77,-0.02:99
-chr1	1686194	rs35270315	A	C	13.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=3.38;MQ=58.28;MQ0=0;OQ=2324.40;QD=30.19;SB=-1042.79	GT:AD:DP:GL:GQ	1/1:0,77:73:-236.08,-22.00,-0.06:99
-chr1	1686519	.	A	G	162.43	PASS	AC=2;AF=1.00;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1839.98;QD=29.21;SB=-784.98	GT:AD:DP:GL:GQ	1/1:0,63:60:-187.66,-18.11,-0.08:99
-chr1	1687967	rs35086222	C	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=6;HaplotypeScore=6.25;MQ=58.18;MQ0=0;OQ=2341.51;QD=37.77;SB=-1078.61	GT:AD:DP:GL:GQ	1/1:1,61:60:-237.76,-18.08,-0.02:99
-chr1	1688667	rs4648826	C	G	14.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=58.62;MQ0=0;OQ=2540.02;QD=41.64;SB=-864.78	GT:AD:DP:GL:GQ	1/1:0,61:58:-257.61,-17.48,-0.02:99
-chr1	1689061	rs4648827	C	A	174	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2030.67;QD=34.42;SB=-1001.13	GT:AD:DP:GL:GQ	1/1:1,58:58:-206.68,-17.47,-0.02:99
-chr1	1692374	rs6658139	T	C	285.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.82;MQ0=0;OQ=1093.26;QD=29.55;SB=-273.03	GT:AD:DP:GL:GQ	0/1:3,34:37:-123.62,-11.15,-11.29:1.44
-chr1	1694514	rs61774982	C	A	248.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.73;MQ0=0;OQ=726.51;QD=34.60;SB=-285.07	GT:AD:DP:GL:GQ	1/1:0,21:21:-76.24,-6.33,-0.01:63.18
-chr1	1695016	.	T	A	11.74	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=37;Dels=0.03;HRun=0;HaplotypeScore=27.67;MQ=32.06;MQ0=0;QD=0.32;SB=-25.92	GT:AD:DP:GL:GQ	0/1:10,26:10:-7.44,-3.01,-29.53:44.28
-chr1	1695024	.	T	A	13.63	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=9.62;MQ=29.68;MQ0=0;QD=0.39;SB=-25.92	GT:AD:DP:GL:GQ	0/1:9,26:10:-7.64,-3.01,-29.53:46.28
-chr1	1695026	.	T	A	81.80	SnpCluster	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=32.06;MQ0=0;QD=2.21;SB=-59.89	GT:AD:DP:GL:GQ	0/1:8,29:12:-15.08,-3.61,-28.63:99
-chr1	1695028	.	T	A	128.81	SnpCluster	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=32.06;MQ0=0;QD=3.48;SB=-77.75	GT:AD:DP:GL:GQ	0/1:7,30:9:-18.88,-2.71,-13.92:99
-chr1	1695464	rs61774983	A	G	565.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.28;MQ0=0;OQ=1675.23;QD=34.19;SB=-712.27	GT:AD:DP:GL:GQ	1/1:0,49:49:-171.13,-14.76,-0.02:99
-chr1	1695607	rs6603809	G	A	610.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1827.34;QD=36.55;SB=-919.23	GT:AD:DP:GL:GQ	1/1:0,50:48:-186.34,-14.47,-0.02:99
-chr1	1695633	rs6603810	A	G	70.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.63;MQ0=1;OQ=1141.91;QD=27.85;SB=-557.89	GT:AD:DP:GL:GQ	1/1:0,41:37:-117.81,-11.16,-0.04:99
-chr1	1695996	rs6603811	T	C	513.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1134.00;QD=29.08;SB=-433.18	GT:AD:DP:GL:GQ	1/1:0,39:37:-117.03,-11.17,-0.04:99
-chr1	1696020	rs7531583	A	G	565.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1293.98;QD=28.76;SB=-649.94	GT:AD:DP:GL:GQ	1/1:0,45:43:-133.03,-12.97,-0.04:99
-chr1	1697600	rs12041925	T	G	3.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=58.61;MQ0=0;OQ=1724.62;QD=29.73;SB=-619.85	GT:AD:DP:GL:GQ	1/1:0,58:53:-176.09,-15.97,-0.04:99
-chr1	1702090	rs10907194	C	T	0.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=5.73;MQ=57.94;MQ0=0;OQ=1197.78;QD=35.23;SB=-529.68	GT:AD:DP:GL:GQ	1/1:1,33:31:-123.37,-9.34,-0.01:93.30
-chr1	1703208	rs10907195	C	T	76.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.55;MQ0=0;OQ=1814.27;QD=37.80;SB=-686.40	GT:AD:DP:GL:GQ	1/1:0,48:45:-185.02,-13.55,-0.01:99
-chr1	1703574	rs454577	T	G	67.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=652.72;QD=31.08;SB=-294.53	GT:AD:DP:GL:GQ	1/1:0,21:20:-68.87,-6.03,-0.01:60.16
-chr1	1703729	rs7534617	T	G	38.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.38;MQ0=0;OQ=1200.11;QD=32.44;SB=-519.95	GT:AD:DP:GL:GQ	1/1:0,37:36:-123.61,-10.85,-0.02:99
-chr1	1704871	rs742359	C	A	251.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.49;MQ0=0;OQ=1398.04;QD=31.07;SB=-698.80	GT:AD:DP:GL:GQ	1/1:0,45:41:-143.41,-12.36,-0.02:99
-chr1	1706848	.	G	A	26.61	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=3.11;MQ=59.44;MQ0=0;QD=0.65;SB=62.22	GT:AD:DP:GL:GQ	0/1:33,8:34:-16.19,-10.25,-103.26:59.43
-chr1	1709327	.	C	A	45.07	LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=18;HaplotypeScore=15.97;MQ=51.18;MQ0=0;QD=1.07;SB=-1.26	GT:AD:DP:GL:GQ	0/1:34,8:30:-16.83,-9.04,-86.61:77.90
-chr1	1710980	.	G	C	20.70	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.37;MQ=53.66;MQ0=1;QD=0.48;SB=38.15	GT:AD:DP:GL:GQ	0/1:38,5:37:-16.51,-11.16,-138.32:53.50
-chr1	1712688	rs3737627	G	A	389.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1534.00;QD=37.41;SB=-461.61	GT:AD:DP:GL:GQ	1/1:0,41:41:-157.01,-12.36,-0.03:99
-chr1	1715121	rs7545812	A	G	362.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2055.38;QD=33.69;SB=-1042.38	GT:AD:DP:GL:GQ	1/1:0,61:58:-209.15,-17.47,-0.02:99
-chr1	1715620	rs6690956	C	T	11.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=58.81;MQ0=0;OQ=2937.89;QD=37.67;SB=-1197.36	GT:AD:DP:GL:GQ	1/1:0,77:75:-297.40,-22.60,-0.03:99
-chr1	1716741	.	G	A	184.26	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=52.39;MQ0=0;OQ=1148.50;QD=16.18;SB=-579.64	GT:AD:DP:GL:GQ	0/1:37,34:69:-138.94,-20.80,-109.67:99
-chr1	1718547	rs6603794	C	G	73.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.81;MQ=57.85;MQ0=0;OQ=2921.36;QD=42.96;SB=-1363.94	GT:AD:DP:GL:GQ	1/1:0,68:67:-295.74,-20.18,-0.02:99
-chr1	1722071	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.01;HRun=18;HaplotypeScore=24.45;MQ=58.30;MQ0=0;OQ=60.55;QD=0.72;SB=155.39	GT:AD:DP:GL:GQ	0/1:70,13:70:-30.14,-20.80,-197.36:93.38
-chr1	1724830	rs12077553	C	T	351.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.34;MQ0=0;OQ=2450.74;QD=39.53;SB=-952.27	GT:AD:DP:GL:GQ	1/1:0,62:62:-248.68,-18.68,-0.02:99
-chr1	1726513	rs12134783	T	G	35.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=59.11;MQ0=0;OQ=1936.28;QD=28.47;SB=-959.69	GT:AD:DP:GL:GQ	1/1:0,68:64:-197.28,-19.30,-0.07:99
-chr1	1726715	rs11260613	A	G	12.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=55.98;MQ0=0;OQ=727.27;QD=23.46;SB=-220.64	GT:AD:DP:GL:GQ	1/1:0,31:24:-76.34,-7.24,-0.02:72.14
-chr1	1728231	rs11585349	C	T	444.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.78;MQ0=0;OQ=853.44;QD=13.13;SB=-325.29	GT:AD:DP:GL:GQ	0/1:37,28:63:-107.61,-18.98,-131.07:99
-chr1	1728793	.	C	A	11.24	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=87;Dels=0.01;HRun=20;HaplotypeScore=12.66;MQ=49.01;MQ0=7;QD=0.13;SB=83.42	GT:AD:DP:GL:GQ	0/1:67,19:60:-22.45,-18.07,-182.40:43.74
-chr1	1731385	rs12407008	A	G	570.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1462.68;QD=34.02;SB=-730.24	GT:AD:DP:GL:GQ	1/1:0,43:43:-149.87,-12.95,-0.02:99
-chr1	1733337	rs4648725	G	C	64.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=54.96;MQ0=0;OQ=2515.07;QD=40.57;SB=-1047.66	GT:AD:DP:GL:GQ	1/1:0,62:59:-255.12,-17.78,-0.02:99
-chr1	1733967	rs6603795	T	C	231.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.62;MQ0=0;OQ=1265.69;QD=28.77;SB=-184.41	GT:AD:DP:GL:GQ	1/1:0,44:42:-130.20,-12.68,-0.05:99
-chr1	1736016	rs12408690	A	G	634.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1961.02;QD=35.02;SB=-638.31	GT:AD:DP:GL:GQ	1/1:0,56:56:-199.70,-16.87,-0.02:99
-chr1	1736120	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=20;HaplotypeScore=11.72;MQ=42.99;MQ0=2;OQ=648.30;QD=8.64;SB=8.14	GT:AD:DP:GL:GQ	0/1:44,31:58:-85.60,-17.49,-115.79:99
-chr1	1737932	.	A	T	32.39	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=5;HaplotypeScore=48.11;MQ=56.04;MQ0=0;QD=0.40;SB=116.40	GT:AD:DP:GL:GQ	0/1:65,15:66:-26.41,-19.89,-217.38:65.23
-chr1	1737943	.	C	T	27.67	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=20;HaplotypeScore=10.01;MQ=51.69;MQ0=1;QD=0.36;SB=101.33	GT:AD:DP:GL:GQ	0/1:61,16:52:-21.72,-15.67,-162.40:60.50
-chr1	1739272	.	T	G	33.88	PASS	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=58.21;MQ0=0;OQ=1071.30;QD=13.56;SB=-555.72	GT:AD:DP:GL:GQ	0/1:40,39:77:-133.61,-23.19,-145.75:99
-chr1	1741546	rs12140085	T	C	459.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.38;MQ0=0;OQ=960.01;QD=14.12;SB=-398.30	GT:AD:DP:GL:GQ	0/1:32,36:66:-119.17,-19.88,-129.12:99
-chr1	1741636	rs11260615	A	G	471.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.06;MQ0=1;OQ=1308.14;QD=29.07;SB=-638.27	GT:AD:DP:GL:GQ	1/1:1,44:42:-134.44,-12.67,-0.04:99
-chr1	1742815	rs4648726	C	T	274.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=3089.56;QD=40.12;SB=-1427.40	GT:AD:DP:GL:GQ	1/1:0,77:77:-312.56,-23.19,-0.02:99
-chr1	1743224	rs7542340	T	C	171.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=-0.06;MQ=58.50;MQ0=0;OQ=2101.69;QD=35.62;SB=-1028.76	GT:AD:DP:GL:GQ	1/1:0,59:59:-213.77,-17.77,-0.02:99
-chr1	1744541	.	G	A	32.03	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=61;Dels=0.03;HRun=20;HaplotypeScore=23.82;MQ=51.57;MQ0=1;QD=0.53;SB=71.26	GT:AD:DP:GL:GQ	0/1:45,13:49:-20.64,-14.16,-151.56:64.87
-chr1	1748886	rs9786963	T	C	652.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1920.23;QD=32.55;SB=-686.89	GT:AD:DP:GL:GQ	1/1:0,59:59:-195.65,-17.79,-0.04:99
-chr1	1748914	rs10907187	G	A	586.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2397.92;QD=36.89;SB=-817.09	GT:AD:DP:GL:GQ	1/1:0,65:65:-243.43,-19.61,-0.05:99
-chr1	1750849	rs12568603	A	C	141.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=1462.88;QD=34.02;SB=-618.64	GT:AD:DP:GL:GQ	1/1:0,43:43:-149.89,-12.95,-0.02:99
-chr1	1751196	rs1999704	A	C	13.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.14;MQ=56.69;MQ0=1;OQ=2047.05;QD=32.49;SB=-593.04	GT:AD:DP:GL:GQ	1/1:1,62:59:-208.31,-17.77,-0.02:99
-chr1	1751865	rs11260616	A	T	0.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=6;HaplotypeScore=1.13;MQ=59.11;MQ0=0;OQ=1852.12;QD=35.62;SB=-771.53	GT:AD:DP:GL:GQ	1/1:0,52:52:-188.82,-15.67,-0.02:99
-chr1	1751874	rs7553640	T	C	711.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1893.02;QD=35.06;SB=-889.04	GT:AD:DP:GL:GQ	1/1:0,54:53:-192.90,-15.97,-0.02:99
-chr1	1752558	rs6603796	T	C	171.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.20;MQ0=0;OQ=1646.02;QD=32.27;SB=-583.16	GT:AD:DP:GL:GQ	1/1:0,51:48:-168.22,-14.47,-0.03:99
-chr1	1755443	rs6603797	T	C	720.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=2694.93;QD=35.46;SB=-935.73	GT:AD:DP:GL:GQ	1/1:0,76:74:-273.10,-22.29,-0.02:99
-chr1	1755954	rs6663586	A	C	220.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.45;MQ0=0;OQ=1370.69;QD=32.64;SB=-604.02	GT:AD:DP:GL:GQ	1/1:0,42:40:-140.67,-12.05,-0.02:99
-chr1	1756219	rs6603798	A	G	29.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=55.51;MQ0=2;OQ=1475.64;QD=28.38;SB=-669.92	GT:AD:DP:GL:GQ	1/1:2,50:47:-151.19,-14.18,-0.04:99
-chr1	1757221	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=20;HaplotypeScore=10.23;MQ=53.30;MQ0=1;OQ=618.88;QD=9.67;SB=31.58	GT:AD:DP:GL:GQ	0/1:38,25:58:-82.66,-17.49,-122.37:99
-chr1	1758520	rs10752417	C	G	0.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=5.58;MQ=57.83;MQ0=0;OQ=4550.45;QD=42.93;SB=-2086.29	GT:AD:DP:GL:GQ	1/1:0,106:103:-454.04,-31.03,-0.03:99
-chr1	1758754	rs10907188	C	T	32.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=58.85;MQ0=1;OQ=2558.37;QD=38.18;SB=-882.18	GT:AD:DP:GL:GQ	1/1:1,66:64:-259.44,-19.28,-0.02:99
-chr1	1759918	rs6603799	T	C	1.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=56.09;MQ0=0;OQ=1988.53;QD=33.14;SB=-981.94	GT:AD:DP:GL:GQ	1/1:1,59:56:-202.45,-16.87,-0.02:99
-chr1	1760648	rs6657357	C	G	301.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.38;MQ0=0;OQ=2954.84;QD=38.37;SB=-1347.06	GT:AD:DP:GL:GQ	1/1:0,77:74:-299.12,-22.32,-0.05:99
-chr1	1760649	rs6665287	T	A	112.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.39;MQ0=0;OQ=2934.49;QD=37.15;SB=-1492.41	GT:AD:DP:GL:GQ	1/1:0,79:78:-297.05,-23.49,-0.02:99
-chr1	1762348	rs6603800	T	G	88.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.54;MQ0=0;OQ=1401.85;QD=28.04;SB=-481.90	GT:AD:DP:GL:GQ	1/1:0,50:43:-143.80,-12.96,-0.03:99
-chr1	1762595	rs10907189	T	C	215.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.73;MQ0=1;OQ=2558.08;QD=35.53;SB=-1178.50	GT:AD:DP:GL:GQ	1/1:1,71:71:-259.41,-21.39,-0.02:99
-chr1	1763512	rs11260618	A	G	251.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=34.24;MQ0=0;OQ=1296.92;QD=19.36;SB=-537.23	GT:AD:DP:GL:GQ	1/1:0,67:42:-133.32,-12.67,-0.05:99
-chr1	1763520	rs11260619	C	G	204.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=32.31;MQ0=0;OQ=1789.21;QD=27.11;SB=-722.93	GT:AD:DP:GL:GQ	1/1:0,66:41:-182.52,-12.35,-0.01:99
-chr1	1763525	rs11260620	T	C	490.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.33;MQ0=0;OQ=1197.40;QD=18.42;SB=-469.25	GT:AD:DP:GL:GQ	1/1:0,65:37:-123.35,-11.15,-0.02:99
-chr1	1763536	rs11260621	T	C	53.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=32.77;MQ0=1;OQ=1342.11;QD=19.74;SB=-614.98	GT:AD:DP:GL:GQ	1/1:1,67:42:-137.83,-12.66,-0.03:99
-chr1	1763632	rs10907190	G	A	500.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=2342.36;QD=38.40;SB=-955.26	GT:AD:DP:GL:GQ	1/1:0,61:60:-237.85,-18.08,-0.03:99
-chr1	1765035	rs11260622	A	G	3.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.83;MQ=58.68;MQ0=1;OQ=1949.34;QD=28.25;SB=-876.43	GT:AD:DP:GL:GQ	1/1:0,68:61:-198.58,-18.40,-0.06:99
-chr1	1766129	rs4648727	C	A	222.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.39;MQ0=0;OQ=2474.83;QD=35.87;SB=-1254.46	GT:AD:DP:GL:GQ	1/1:0,69:68:-251.09,-20.48,-0.02:99
-chr1	1768896	rs6692959	T	C	606.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2761.38;QD=31.74;SB=-1372.68	GT:AD:DP:GL:GQ	1/1:0,87:87:-279.80,-26.24,-0.08:99
-chr1	1769657	.	A	T	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=45;Dels=0.02;HRun=0;HaplotypeScore=8.89;MQ=56.00;MQ0=1;OQ=229.76;QD=5.11;SB=-125.76	GT:AD:DP:GL:GQ	0/1:24,18:27:-34.10,-7.84,-57.21:99
-chr1	1770738	rs6603801	T	C	614.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1986.61;QD=34.85;SB=-910.02	GT:AD:DP:GL:GQ	1/1:0,57:57:-202.27,-17.17,-0.02:99
-chr1	1771205	rs6664578	G	A	696.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=3186.74;QD=38.39;SB=-1518.58	GT:AD:DP:GL:GQ	1/1:0,83:81:-322.28,-24.40,-0.02:99
-chr1	1772480	rs12066667	C	T	200.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.77;MQ0=0;OQ=1986.28;QD=37.48;SB=-1001.85	GT:AD:DP:GL:GQ	1/1:0,53:51:-202.23,-15.37,-0.02:99
-chr1	1773061	rs12402876	G	A	282.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=57.70;MQ0=0;OQ=2522.68;QD=37.10;SB=-929.21	GT:AD:DP:GL:GQ	1/1:0,68:65:-255.88,-19.59,-0.03:99
-chr1	1773444	rs7526236	G	A	531.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1822.31;QD=37.96;SB=-748.50	GT:AD:DP:GL:GQ	1/1:0,48:47:-185.83,-14.16,-0.02:99
-chr1	1782409	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=18;HaplotypeScore=10.25;MQ=50.63;MQ0=2;OQ=451.92;QD=7.66;SB=-97.66	GT:AD:DP:GL:GQ	0/1:39,20:52:-64.14,-15.67,-118.24:99
-chr1	1782428	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=65;Dels=0.02;HRun=18;HaplotypeScore=18.34;MQ=52.25;MQ0=1;OQ=88.42;QD=1.36;SB=56.19	GT:AD:DP:GL:GQ	0/1:56,8:49:-26.89,-14.77,-145.13:99
-chr1	1782863	rs1889678	A	G	536.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.83;MQ0=0;OQ=1352.43;QD=28.18;SB=-598.57	GT:AD:DP:GL:GQ	1/1:0,48:43:-138.86,-12.97,-0.04:99
-chr1	1782931	rs12076620	A	G	575.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1635.06;QD=34.79;SB=-754.18	GT:AD:DP:GL:GQ	1/1:0,47:46:-167.10,-13.85,-0.01:99
-chr1	1782971	rs10907192	A	G	594.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1599.36;QD=34.03;SB=-532.43	GT:AD:DP:GL:GQ	1/1:0,47:46:-163.54,-13.86,-0.02:99
-chr1	1783646	rs7511905	A	C	266.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1582.35;QD=31.65;SB=-751.07	GT:AD:DP:GL:GQ	1/1:0,50:47:-161.84,-14.16,-0.02:99
-chr1	1785347	rs6660452	A	C	506.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.51;MQ0=0;OQ=1748.60;QD=30.15;SB=-666.84	GT:AD:DP:GL:GQ	1/1:0,58:55:-178.49,-16.58,-0.04:99
-chr1	1785613	.	C	A	22.53	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=20;HaplotypeScore=2.54;MQ=46.56;MQ0=0;QD=0.48;SB=89.31	GT:AD:DP:GL:GQ	0/1:40,7:41:-17.88,-12.35,-133.39:55.34
-chr1	1785636	rs6697311	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.01;HRun=20;HaplotypeScore=31.36;MQ=43.36;MQ0=1;OQ=989.12;QD=9.79;SB=-44.45	GT:AD:DP:GL:GQ	0/1:50,49:75:-124.51,-22.31,-136.94:99
-chr1	1785639	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=98;Dels=0.01;HRun=4;HaplotypeScore=41.45;MQ=42.87;MQ0=1;OQ=381.85;QD=3.90;SB=86.26	GT:AD:DP:GL:GQ	0/1:59,38:65:-60.76,-19.29,-163.75:99
-chr1	1785649	rs12036384	C	T	5.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=10.21;MQ=50.24;MQ0=1;OQ=2105.43;QD=30.96;SB=-932.26	GT:AD:DP:GL:GQ	1/1:2,63:54:-214.14,-16.27,-0.02:99
-chr1	1786577	rs12134553	A	C	2.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=7.76;MQ=57.97;MQ0=1;OQ=1915.32;QD=26.98;SB=-959.05	GT:AD:DP:GL:GQ	1/1:3,68:63:-201.59,-18.99,-6.48:99
-chr1	1787250	rs6670246	T	A	192	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.78;MQ0=0;OQ=2864.46;QD=33.70;SB=-1257.90	GT:AD:DP:GL:GQ	1/1:2,83:84:-296.95,-25.31,-6.91:99
-chr1	1789560	rs4648591	T	C	58.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=47.68;MQ0=0;OQ=1563.80;QD=30.66;SB=-605.93	GT:AD:DP:GL:GQ	1/1:0,51:49:-160.01,-14.78,-0.04:99
-chr1	1789813	rs7516995	T	C	114.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.57;MQ0=0;OQ=1801.38;QD=30.53;SB=-555.03	GT:AD:DP:GL:GQ	1/1:0,59:55:-183.76,-16.58,-0.04:99
-chr1	1790511	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=20;HaplotypeScore=40.13;MQ=50.15;MQ0=2;OQ=70.47;QD=0.70;SB=149.46	GT:AD:DP:GL:GQ	0/1:69,28:73:-32.03,-21.69,-222.30:99
-chr1	1790894	rs4648592	G	A	598.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.49;MQ0=0;OQ=2599.64;QD=38.23;SB=-928.70	GT:AD:DP:GL:GQ	1/1:0,68:65:-263.57,-19.58,-0.02:99
-chr1	1792032	rs6666068	A	G	457.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2160.60;QD=28.43;SB=-673.85	GT:AD:DP:GL:GQ	1/1:0,76:67:-219.70,-20.20,-0.05:99
-chr1	1794162	rs3855951	C	T	52.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=2.26;MQ=59.71;MQ0=0;OQ=3179.43;QD=39.74;SB=-1555.57	GT:AD:DP:GL:GQ	1/1:0,80:79:-321.55,-23.80,-0.02:99
-chr1	1795251	rs10907193	G	A	266.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=60.00;MQ0=0;OQ=1860.92;QD=32.65;SB=-731.44	GT:AD:DP:GL:GQ	1/1:0,56:50:-189.71,-15.08,-0.03:99
-chr1	1796166	rs10399762	A	G	54.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.73;MQ0=0;OQ=1409.98;QD=25.64;SB=-484.50	GT:AD:DP:GL:GQ	1/1:0,55:46:-144.64,-13.88,-0.05:99
-chr1	1798609	.	A	T	162.96	SnpCluster	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=74.10;MQ=46.50;MQ0=2;QD=4.29;SB=-81.05	GT:AD:DP:GL:GQ	0/1:27,11:32:-29.22,-9.64,-87.24:99
-chr1	1798611	.	A	T	632.57	SnpCluster	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=43.92;MQ=46.08;MQ0=2;QD=17.10;SB=-306.76	GT:AD:DP:GL:GQ	0/1:10,25:30:-75.58,-9.04,-33.08:99
-chr1	1798613	rs57488553	A	T	825.28	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=35.29;MQ=45.64;MQ0=2;QD=22.92;SB=-393.55	GT:AD:DP:GL:GQ	0/1:7,29:31:-95.15,-9.34,-18.41:90.67
-chr1	1798615	rs58263709	A	T	846.29	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=33.82;MQ=45.64;MQ0=2;QD=23.51;SB=-402.56	GT:AD:DP:GL:GQ	0/1:6,30:30:-96.95,-9.04,-14.67:56.29
-chr1	1799369	rs11260624	C	T	198.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.40;MQ0=0;OQ=2735.01;QD=39.07;SB=-1363.94	GT:AD:DP:GL:GQ	1/1:0,69:70:-279.86,-23.72,-2.77:99
-chr1	1799950	rs7525092	C	T	160.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=59.72;MQ0=0;OQ=3051.79;QD=36.77;SB=-1420.35	GT:AD:DP:GL:GQ	1/1:0,83:79:-308.79,-23.80,-0.03:99
-chr1	1800981	rs12133865	G	A	87.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=56.12;MQ0=0;OQ=1844.69;QD=38.43;SB=-730.97	GT:AD:DP:GL:GQ	1/1:0,48:48:-188.07,-14.47,-0.02:99
-chr1	1802311	.	A	G	78.46	Indel	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.28;MQ=57.45;MQ0=0;QD=1.09;SB=-6.51	GT:AD:DP:GL:GQ	0/1:62,10:70:-32.22,-21.09,-246.49:99
-chr1	1802688	rs6670776	G	A	560.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=2301.44;QD=40.38;SB=-996.99	GT:AD:DP:GL:GQ	1/1:0,57:57:-233.74,-17.17,-0.01:99
-chr1	1805482	rs12138152	G	A	76.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.49;MQ0=0;OQ=2306.96;QD=39.10;SB=-1138.66	GT:AD:DP:GL:GQ	1/1:0,59:59:-234.30,-17.78,-0.02:99
-chr1	1807030	rs10796396	G	A	291.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.36;MQ0=0;OQ=1090.79;QD=38.96;SB=-403.67	GT:AD:DP:GL:GQ	1/1:0,28:28:-112.67,-8.43,-0.01:84.28
-chr1	1809238	rs6603804	T	C	659.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2030.11;QD=33.84;SB=-689.61	GT:AD:DP:GL:GQ	1/1:0,60:59:-206.62,-17.78,-0.03:99
-chr1	1809966	rs28608797	A	C	520.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.00;MQ0=0;OQ=1235.99;QD=32.53;SB=-595.06	GT:AD:DP:GL:GQ	1/1:1,37:36:-127.20,-10.84,-0.01:99
-chr1	1813782	rs6688000	A	G	233.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=58.61;MQ0=0;OQ=1439.33;QD=30.62;SB=-681.87	GT:AD:DP:GL:GQ	1/1:0,46:46:-147.56,-13.87,-0.04:99
-chr1	1818624	rs12045595	G	A	59.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.53;MQ0=0;OQ=1836.38;QD=37.48;SB=-594.97	GT:AD:DP:GL:GQ	1/1:0,49:48:-187.24,-14.46,-0.02:99
-chr1	1821118	rs6603808	A	G	79.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=60.00;MQ0=0;OQ=1052.30;QD=28.44;SB=-413.55	GT:AD:DP:GL:GQ	1/1:0,37:31:-108.83,-9.34,-0.01:93.27
-chr1	1822217	rs941531	G	A	113.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=58.68;MQ0=0;OQ=2643.63;QD=39.46;SB=-1073.33	GT:AD:DP:GL:GQ	1/1:0,67:66:-267.97,-19.88,-0.02:99
-chr1	1822410	.	A	G	49.96	LowQual	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;QD=0.89;SB=-35.78	GT:AD:DP:GL:GQ	0/1:49,7:55:-24.85,-16.57,-195.12:82.80
-chr1	1822442	rs4996032	G	A	113.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.02;HRun=2;HaplotypeScore=1.09;MQ=59.55;MQ0=0;OQ=884.12;QD=14.03;SB=-419.83	GT:AD:DP:GL:GQ	0/1:35,27:62:-110.37,-18.67,-127.42:99
-chr1	1822448	rs4996031	A	G	133.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.02;MQ=59.08;MQ0=1;OQ=897.87;QD=14.03;SB=-423.51	GT:AD:DP:GL:GQ	0/1:31,33:61:-111.45,-18.38,-115.75:99
-chr1	1823355	rs10454464	G	A	100.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=57.95;MQ0=0;OQ=1113.42;QD=34.79;SB=-534.62	GT:AD:DP:GL:GQ	1/1:0,31:31:-117.34,-11.71,-2.42:92.95
-chr1	1824608	rs4648731	A	G	30.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=54.33;MQ0=0;OQ=891.08;QD=28.74;SB=-233.75	GT:AD:DP:GL:GQ	1/1:0,31:26:-92.71,-7.84,-0.01:78.21
-chr1	1824902	rs11260625	G	A	47.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=46.58;MQ0=0;OQ=814.82;QD=27.16;SB=-295.36	GT:AD:DP:GL:GQ	1/1:0,25:22:-85.08,-6.64,-0.02:66.19
-chr1	1824916	rs11260626	C	T	92.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=48.72;MQ0=0;OQ=1289.62;QD=36.85;SB=-588.96	GT:AD:DP:GL:GQ	1/1:0,35:34:-132.56,-10.25,-0.01:99
-chr1	1825136	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=16;HaplotypeScore=8.80;MQ=56.14;MQ0=0;OQ=163.77;QD=3.72;SB=41.15	GT:AD:DP:GL:GQ	0/1:27,17:32:-29.31,-9.65,-83.86:99
-chr1	1826546	rs2748989	C	G	308.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.60;MQ0=0;OQ=2438.44;QD=41.33;SB=-736.72	GT:AD:DP:GL:GQ	1/1:0,59:58:-247.45,-17.48,-0.02:99
-chr1	1827738	rs4648732	C	T	470.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=1741.59;QD=38.70;SB=-666.40	GT:AD:DP:GL:GQ	1/1:0,45:44:-177.75,-13.25,-0.01:99
-chr1	1828376	rs2377037	C	A	189.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=1605.71;QD=33.45;SB=-826.68	GT:AD:DP:GL:GQ	1/1:1,47:46:-164.17,-13.86,-0.02:99
-chr1	1828498	rs28672079	A	G	314.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=1270.30;QD=29.54;SB=-594.88	GT:AD:DP:GL:GQ	1/1:0,43:41:-130.66,-12.37,-0.05:99
-chr1	1829551	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=17.55;MQ=56.35;MQ0=0;OQ=57.59;QD=1.48;SB=26.11	GT:AD:DP:GL:GQ	0/1:19,19:17:-14.19,-5.14,-50.87:90.43
-chr1	1829898	rs2474461	T	C	40.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=579.60;QD=34.09;SB=-105.03	GT:AD:DP:GL:GQ	1/1:0,17:17:-61.55,-5.12,-0.01:51.14
-chr1	1830536	rs28384316	G	T	112.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=125.10;QD=25.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:5:-16.07,-1.51,-0.01:15.03
-chr1	1832651	.	A	G	0.32	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=742.60;QD=18.11;SB=-247.32	GT:AD:DP:GL:GQ	0/1:17,24:40:-89.59,-12.05,-62.50:99
-chr1	1834219	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=20;HaplotypeScore=9.36;MQ=53.72;MQ0=0;OQ=93.63;QD=2.46;SB=11.06	GT:AD:DP:GL:GQ	0/1:25,13:25:-20.18,-7.53,-63.71:99
-chr1	1834282	.	T	C	14.27	PASS	AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=417.56;QD=26.10;SB=-221.65	GT:AD:DP:GL:GQ	1/1:0,16:14:-45.35,-4.22,-0.01:42.10
-chr1	1834553	rs28842562	C	T	275.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.51;MQ0=1;OQ=892.93;QD=34.34;SB=-192.75	GT:AD:DP:GL:GQ	1/1:0,26:23:-92.88,-6.93,-0.01:69.22
-chr1	1836321	rs41306992	C	T	57.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.24;MQ0=0;OQ=2100.54;QD=38.19;SB=-756.01	GT:AD:DP:GL:GQ	1/1:0,55:53:-213.65,-15.97,-0.01:99
-chr1	1836442	rs2748987	A	G	431.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=1604.85;QD=34.15;SB=-631.28	GT:AD:DP:GL:GQ	1/1:0,47:47:-164.09,-14.16,-0.02:99
-chr1	1838594	rs941532	A	G	20.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=58.71;MQ0=0;OQ=477.15;QD=26.51;SB=-129.69	GT:AD:DP:GL:GQ	1/1:0,18:17:-51.32,-5.13,-0.02:51.08
-chr1	1839996	rs2295364	C	T	1.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.59;MQ0=0;OQ=1245.14;QD=37.73;SB=-117.65	GT:AD:DP:GL:GQ	1/1:0,33:32:-128.11,-9.64,-0.01:96.31
-chr1	1841796	rs2474458	C	A	22.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.16;MQ=58.78;MQ0=0;OQ=1243.51;QD=32.72;SB=-630.04	GT:AD:DP:GL:GQ	1/1:0,38:36:-127.95,-10.85,-0.01:99
-chr1	1842344	rs28508199	A	G	34.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.67;MQ0=0;OQ=1404.62;QD=28.67;SB=-672.87	GT:AD:DP:GL:GQ	1/1:0,49:45:-144.09,-13.57,-0.04:99
-chr1	1843148	rs1884454	G	T	340.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=56.74;MQ0=0;OQ=831.99;QD=14.34;SB=-322.02	GT:AD:DP:GL:GQ	0/1:28,30:55:-103.05,-16.57,-95.32:99
-chr1	1844181	rs2250833	A	G	20.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=995.90;QD=27.66;SB=-313.46	GT:AD:DP:GL:GQ	1/1:0,36:31:-103.20,-9.35,-0.02:93.22
-chr1	1845310	rs28423370	A	G	170.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=608.06;QD=32.00;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,19:19:-64.40,-5.72,-0.01:57.14
-chr1	1845407	.	C	A	46.94	LowQual	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=55.21;MQ0=0;QD=9.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,3:5:-9.49,-1.51,-6.80:52.97
-chr1	1845958	rs752965	C	T	17.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.17;MQ0=0;OQ=985.76;QD=35.21;SB=-88.34	GT:AD:DP:GL:GQ	1/1:0,28:26:-102.17,-7.83,-0.01:78.25
-chr1	1846560	rs2092922	C	T	67.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.95;MQ0=0;OQ=1561.86;QD=36.32;SB=-529.71	GT:AD:DP:GL:GQ	1/1:0,43:41:-159.79,-12.36,-0.02:99
-chr1	1848991	rs4648734	C	T	0.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.13;MQ=58.00;MQ0=0;OQ=1973.99;QD=36.56;SB=-772.04	GT:AD:DP:GL:GQ	1/1:0,53:53:-203.45,-18.19,-2.47:99
-chr1	1849418	rs28670388	T	C	0.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=7.22;MQ=55.28;MQ0=2;OQ=1025.15;QD=29.29;SB=-496.47	GT:AD:DP:GL:GQ	1/1:3,32:30:-106.11,-9.04,-0.01:90.24
-chr1	1850605	rs28685049	C	T	18.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=778.38;QD=38.92;SB=-47.56	GT:AD:DP:GL:GQ	1/1:0,20:20:-81.43,-6.03,-0.01:60.20
-chr1	1850678	.	T	A	0.69	PASS	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=41.96;MQ0=0;OQ=61.03;QD=6.78;SB=5.04	GT:AD:DP:GL:GQ	0/1:6,3:9:-12.10,-2.71,-21.43:93.87
-chr1	1850683	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=10.93;MQ=35.14;MQ0=0;OQ=63.11;QD=9.02;SB=-3.99	GT:AD:DP:GL:GQ	0/1:4,3:6:-11.40,-1.81,-10.53:87.27
-chr1	1851012	rs55825112	G	A	257.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.15;MQ0=0;OQ=1284.14;QD=38.91;SB=-355.97	GT:AD:DP:GL:GQ	1/1:0,33:33:-132.01,-9.94,-0.01:99
-chr1	1852535	rs2474449	C	T	115.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=42.11;MQ0=1;OQ=2050.54;QD=37.28;SB=-856.64	GT:AD:DP:GL:GQ	1/1:1,54:53:-211.75,-15.96,-3.11:99
-chr1	1852731	.	T	A	22.37	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=63;Dels=0.05;HRun=20;HaplotypeScore=13.90;MQ=48.22;MQ0=0;QD=0.36;SB=16.21	GT:AD:DP:GL:GQ	0/1:42,18:40:-16.96,-11.45,-121.97:55.18
-chr1	1852818	rs4648595	A	G	3.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.78;MQ=50.34;MQ0=1;OQ=917.27;QD=25.48;SB=-127.78	GT:AD:DP:GL:GQ	1/1:1,35:28:-95.33,-8.44,-0.02:84.22
-chr1	1853042	.	C	A	10.89	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=20;HaplotypeScore=9.56;MQ=49.02;MQ0=4;QD=0.19;SB=86.27	GT:AD:DP:GL:GQ	0/1:51,7:42:-16.99,-12.66,-132.54:43.35
-chr1	1853068	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=2;HaplotypeScore=13.43;MQ=48.98;MQ0=4;OQ=94.12;QD=1.00;SB=104.36	GT:AD:DP:GL:GQ	0/1:70,24:65:-32.29,-19.60,-195.03:99
-chr1	1853265	rs60147457	T	C	26.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.17;MQ0=0;OQ=1299.21;QD=28.24;SB=-640.40	GT:AD:DP:GL:GQ	1/1:1,45:44:-136.91,-13.28,-3.40:98.74
-chr1	1855559	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.77;MQ=58.15;MQ0=0;OQ=143.93;QD=1.87;SB=17.18	GT:AD:DP:GL:GQ	0/1:67,10:76:-40.57,-22.90,-237.26:99
-chr1	1855612	rs2748968	C	T	224.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=53.49;MQ0=2;OQ=1207.94;QD=15.10;SB=-597.02	GT:AD:DP:GL:GQ	0/1:40,40:73:-146.08,-22.00,-120.30:99
-chr1	1855646	.	T	C	0.93	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=9.48;MQ=53.45;MQ0=2;OQ=1049.44;QD=14.78;SB=-537.98	GT:AD:DP:GL:GQ	0/1:31,40:66:-128.11,-19.89,-114.90:99
-chr1	1855674	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=15.63;MQ=50.86;MQ0=1;OQ=126.19;QD=2.25;SB=-24.71	GT:AD:DP:GL:GQ	0/1:49,7:53:-31.88,-15.98,-189.82:99
-chr1	1855675	.	A	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=14.63;MQ=50.86;MQ0=1;OQ=886.43;QD=15.83;SB=-281.60	GT:AD:DP:GL:GQ	0/1:21,35:52:-107.60,-15.67,-76.26:99
-chr1	1856033	rs34454803	C	G	2.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=4.56;MQ=48.03;MQ0=9;OQ=1928.44;QD=26.78;SB=-825.04	GT:AD:DP:GL:GQ	1/1:9,62:49:-203.74,-17.80,-7.31:99
-chr1	1856195	rs61775027	C	T	136.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=55.46;MQ0=1;OQ=2158.57;QD=29.98;SB=-1089.45	GT:AD:DP:GL:GQ	1/1:8,64:59:-222.77,-17.79,-3.33:99
-chr1	1856465	rs34793596	C	G	37.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.87;MQ=54.29;MQ0=1;OQ=3153.75;QD=39.92;SB=-1439.03	GT:AD:DP:GL:GQ	1/1:3,76:75:-323.13,-22.60,-4.17:99
-chr1	1856473	rs35531706	C	G	44.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=2.23;MQ=55.29;MQ0=1;OQ=2974.48;QD=40.20;SB=-1193.83	GT:AD:DP:GL:GQ	1/1:1,73:71:-301.06,-21.40,-0.03:99
-chr1	1858345	rs28658236	G	A	98.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1111.27;QD=16.34;SB=-403.37	GT:AD:DP:GL:GQ	0/1:35,33:68:-134.91,-20.49,-114.02:99
-chr1	1859106	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=2;HaplotypeScore=6.59;MQ=57.30;MQ0=0;OQ=100.83;QD=1.80;SB=56.18	GT:AD:DP:GL:GQ	0/1:31,25:39:-25.12,-11.75,-106.73:99
-chr1	1859766	rs28592294	C	T	2.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=5.60;MQ=57.03;MQ0=0;OQ=2783.58;QD=37.62;SB=-907.72	GT:AD:DP:GL:GQ	1/1:1,72:73:-285.26,-22.00,-3.32:99
-chr1	1860070	rs2803323	G	A	91.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.89;MQ0=0;OQ=1564.69;QD=37.25;SB=-659.28	GT:AD:DP:GL:GQ	1/1:0,42:41:-160.07,-12.36,-0.02:99
-chr1	1861277	rs2803324	T	C	62.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=848.26;QD=30.30;SB=-320.13	GT:AD:DP:GL:GQ	1/1:0,28:28:-88.44,-8.45,-0.03:84.18
-chr1	1863485	rs12758705	G	A	595.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2263.21;QD=38.36;SB=-926.70	GT:AD:DP:GL:GQ	1/1:0,59:57:-229.92,-17.17,-0.01:99
-chr1	1864441	rs2803329	A	G	280.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1008.85;QD=27.27;SB=-491.17	GT:AD:DP:GL:GQ	1/1:0,37:33:-104.50,-9.95,-0.03:99
-chr1	1864697	rs2803330	A	G	60.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=756.37;QD=30.25;SB=-313.68	GT:AD:DP:GL:GQ	1/1:0,25:22:-79.23,-6.63,-0.01:66.20
-chr1	1865005	rs2803331	C	T	233.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.84;MQ0=0;OQ=1354.55;QD=33.86;SB=-668.39	GT:AD:DP:GL:GQ	1/1:0,37:37:-139.06,-11.16,-0.02:99
-chr1	1865127	rs2262190	A	G	525.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=948.06;QD=30.58;SB=-404.33	GT:AD:DP:GL:GQ	1/1:0,31:30:-98.41,-9.05,-0.02:90.22
-chr1	1867098	rs2748978	T	G	544.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=1416.47;QD=34.55;SB=-657.23	GT:AD:DP:GL:GQ	1/1:0,41:41:-145.24,-12.35,-0.01:99
-chr1	1867212	rs2803339	T	C	83.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=54.90;MQ0=0;OQ=1104.15;QD=27.60;SB=-492.17	GT:AD:DP:GL:GQ	1/1:1,39:37:-114.04,-11.17,-0.04:99
-chr1	1868944	rs2490543	C	T	282.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=58.05;MQ0=0;OQ=849.11;QD=14.15;SB=-315.86	GT:AD:DP:GL:GQ	0/1:33,27:55:-104.77,-16.57,-95.97:99
-chr1	1868947	rs28573337	G	A	161.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.95;MQ0=0;OQ=983.65;QD=17.26;SB=-292.79	GT:AD:DP:GL:GQ	0/1:26,31:55:-118.23,-16.58,-80.47:99
-chr1	1869420	rs28498068	T	G	172.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=56.75;MQ0=0;OQ=395.95;QD=11.31;SB=-182.88	GT:AD:DP:GL:GQ	0/1:18,17:34:-53.12,-10.25,-61.66:99
-chr1	1869908	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=14;HaplotypeScore=14.65;MQ=46.99;MQ0=0;OQ=127.58;QD=2.90;SB=11.06	GT:AD:DP:GL:GQ	0/1:29,15:29:-24.78,-8.74,-71.11:99
-chr1	1870211	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=105;Dels=0.02;HRun=2;HaplotypeScore=156.21;MQ=37.45;MQ0=0;OQ=89.02;QD=0.85;SB=-10.74	GT:AD:DP:GL:GQ	0/1:91,12:93:-39.61,-27.42,-314.70:99
-chr1	1870216	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.13;HRun=3;HaplotypeScore=129.57;MQ=35.88;MQ0=0;OQ=216.82;QD=2.28;SB=-71.49	GT:AD:DP:GL:GQ	0/1:69,14:77:-47.26,-22.30,-241.64:99
-chr1	1870237	.	C	T	350.17	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=136.82;MQ=33.84;MQ0=0;QD=4.38;SB=-96.57	GT:AD:DP:GL:GQ	0/1:64,16:68:-58.79,-20.48,-197.51:99
-chr1	1870241	.	T	C	795.72	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=2;HaplotypeScore=105.65;MQ=33.28;MQ0=0;QD=10.33;SB=-171.98	GT:AD:DP:GL:GQ	0/1:49,28:68:-103.35,-20.49,-158.12:99
-chr1	1870246	.	T	C	783.37	SnpCluster	AC=1;AF=0.50;AN=2;DP=75;Dels=0.01;HRun=3;HaplotypeScore=106.17;MQ=32.28;MQ0=0;QD=10.44;SB=-190.65	GT:AD:DP:GL:GQ	0/1:44,29:65:-101.22,-19.60,-139.10:99
-chr1	1870249	rs28490251	C	T	536.49	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=65.25;MQ=33.25;MQ0=0;QD=8.01;SB=-19.48	GT:AD:DP:GL:GQ	0/1:45,22:60:-75.01,-18.07,-158.51:99
-chr1	1870263	.	T	C	67.37	SnpCluster	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=2;HaplotypeScore=102.33;MQ=35.77;MQ0=0;QD=1.07;SB=-0.98	GT:AD:DP:GL:GQ	0/1:55,8:53:-25.99,-15.97,-184.95:99
-chr1	1870272	.	C	T	96.33	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=53.42;MQ=40.73;MQ0=0;QD=1.55;SB=5.03	GT:AD:DP:GL:GQ	0/1:52,10:55:-29.48,-16.57,-180.28:99
-chr1	1870273	.	T	C	72.37	SnpCluster	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=53.42;MQ=40.73;MQ0=0;QD=1.17;SB=-0.98	GT:AD:DP:GL:GQ	0/1:55,7:53:-26.49,-15.97,-188.35:99
-chr1	1870281	.	C	T	187.69	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=96.79;MQ=44.56;MQ0=0;QD=3.24;SB=5.04	GT:AD:DP:GL:GQ	0/1:46,12:51:-37.41,-15.36,-160.10:99
-chr1	1870294	.	T	C	11.65	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=47.97;MQ0=0;QD=0.19;SB=8.05	GT:AD:DP:GL:GQ	0/1:55,6:59:-22.20,-17.78,-213.89:44.18
-chr1	1870405	.	C	A	16.24	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=38.44;MQ0=0;OQ=457.23;QD=8.97;SB=-4.29	GT:AD:DP:GL:GQ	0/1:33,18:50:-64.07,-15.06,-117.59:99
-chr1	1870410	.	T	C	0.86	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=38.95;MQ0=0;OQ=422.51;QD=8.80;SB=-31.25	GT:AD:DP:GL:GQ	0/1:31,17:47:-59.69,-14.16,-126.57:99
-chr1	1870428	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=20.35;MQ=41.74;MQ0=0;OQ=75.20;QD=2.15;SB=23.10	GT:AD:DP:GL:GQ	0/1:27,8:31:-20.14,-9.34,-96.20:99
-chr1	1870432	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=16.08;MQ=42.82;MQ0=0;OQ=52.58;QD=1.81;SB=29.11	GT:AD:DP:GL:GQ	0/1:24,5:28:-16.98,-8.43,-86.35:85.42
-chr1	1870446	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=25;Dels=0.04;HRun=2;HaplotypeScore=17.65;MQ=47.45;MQ0=0;OQ=105.58;QD=4.22;SB=-62.85	GT:AD:DP:GL:GQ	0/1:18,6:24:-20.77,-6.93,-68.32:99
-chr1	1871370	rs2490541	C	A	191.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.38;MQ0=1;OQ=2594.06;QD=33.69;SB=-1155.38	GT:AD:DP:GL:GQ	1/1:0,76:73:-263.01,-21.99,-0.02:99
-chr1	1872147	rs2490540	A	G	201.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.87;MQ0=0;OQ=2121.33;QD=34.22;SB=-1028.42	GT:AD:DP:GL:GQ	1/1:0,62:60:-215.74,-18.07,-0.02:99
-chr1	1872797	rs28754760	C	T	596.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2762.82;QD=40.63;SB=-1367.30	GT:AD:DP:GL:GQ	1/1:0,68:68:-279.88,-20.48,-0.01:99
-chr1	1872809	rs2490564	A	G	614.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=2664.00;QD=34.60;SB=-1257.66	GT:AD:DP:GL:GQ	1/1:0,77:76:-270.02,-22.89,-0.03:99
-chr1	1872820	rs2490563	C	A	537.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.73;MQ0=0;OQ=2673.37;QD=36.62;SB=-1103.59	GT:AD:DP:GL:GQ	1/1:0,73:73:-270.94,-21.99,-0.02:99
-chr1	1872941	rs28505085	C	T	182.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.70;MQ0=0;OQ=3049.13;QD=40.12;SB=-1406.71	GT:AD:DP:GL:GQ	1/1:0,76:76:-308.51,-22.89,-0.02:99
-chr1	1873219	rs2490562	A	G	659.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=2029.90;QD=31.23;SB=-828.58	GT:AD:DP:GL:GQ	1/1:0,65:64:-206.63,-19.30,-0.05:99
-chr1	1874915	rs2474455	C	T	626.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2935.86;QD=37.64;SB=-1349.01	GT:AD:DP:GL:GQ	1/1:0,78:74:-297.19,-22.29,-0.02:99
-chr1	1876080	rs4648738	C	T	622.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.86;MQ0=0;OQ=2172.76;QD=36.21;SB=-969.30	GT:AD:DP:GL:GQ	1/1:0,60:56:-220.88,-16.87,-0.02:99
-chr1	1876082	rs2803287	T	G	577.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.86;MQ0=0;OQ=1927.37;QD=32.12;SB=-839.09	GT:AD:DP:GL:GQ	1/1:0,60:56:-196.35,-16.87,-0.02:99
-chr1	1876206	.	G	A	152.24	Indel	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=32.79;MQ=48.52;MQ0=0;QD=4.91;SB=-65.27	GT:AD:DP:GL:GQ	0/1:20,7:27:-34.54,-16.03,-70.20:99
-chr1	1876245	rs2803286	T	C	61.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=51.77;MQ0=0;OQ=999.35;QD=27.76;SB=-355.43	GT:AD:DP:GL:GQ	1/1:0,36:34:-103.57,-10.26,-0.05:99
-chr1	1876361	rs2748976	C	A	113.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.22;MQ0=0;OQ=179.32;QD=6.90;SB=-106.45	GT:AD:DP:GL:GQ	0/1:18,8:25:-28.75,-7.53,-52.51:99
-chr1	1876371	.	C	A	48.69	LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=43.76;MQ0=0;QD=2.03;SB=-50.67	GT:AD:DP:GL:GQ	0/1:20,4:23:-15.08,-6.93,-60.82:81.52
-chr1	1876379	rs2748975	C	A	111.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=47.73;MQ0=0;OQ=820.31;QD=34.18;SB=-360.86	GT:AD:DP:GL:GQ	1/1:0,24:23:-85.62,-6.93,-0.01:69.21
-chr1	1876719	rs3795290	C	T	341.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.08;MQ0=0;OQ=1064.55;QD=38.02;SB=-422.06	GT:AD:DP:GL:GQ	1/1:0,28:28:-110.05,-8.44,-0.01:84.27
-chr1	1876879	rs28548017	A	G	12.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=3.36;MQ=59.09;MQ0=0;OQ=1547.11;QD=33.63;SB=-748.91	GT:AD:DP:GL:GQ	1/1:0,45:45:-158.32,-13.56,-0.02:99
-chr1	1877105	rs28575980	G	A	126.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=58.88;MQ0=0;OQ=2123.64;QD=39.33;SB=-940.36	GT:AD:DP:GL:GQ	1/1:0,54:54:-215.96,-16.27,-0.02:99
-chr1	1878053	rs3820011	C	A	596.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1358.01;QD=33.95;SB=-534.23	GT:AD:DP:GL:GQ	1/1:0,40:39:-139.40,-11.75,-0.01:99
-chr1	1878190	rs28535696	C	T	4.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.27;MQ=59.60;MQ0=0;OQ=1961.78;QD=33.82;SB=-651.37	GT:AD:DP:GL:GQ	1/1:0,56:52:-199.79,-15.68,-0.03:99
-chr1	1878229	rs2803285	A	G	106.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=1952.57;QD=31.49;SB=-789.62	GT:AD:DP:GL:GQ	1/1:0,62:61:-198.90,-18.40,-0.05:99
-chr1	1878313	rs28549710	G	A	560.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1883.77;QD=38.44;SB=-852.64	GT:AD:DP:GL:GQ	1/1:0,49:48:-191.98,-14.46,-0.02:99
-chr1	1878885	rs2748974	A	G	5.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.37;MQ=58.15;MQ0=0;OQ=1276.90;QD=26.60;SB=-511.07	GT:AD:DP:GL:GQ	1/1:1,47:40:-131.31,-12.06,-0.03:99
-chr1	1878935	rs941533	C	T	78.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.81;MQ0=0;OQ=1331.51;QD=34.14;SB=-642.34	GT:AD:DP:GL:GQ	1/1:0,39:35:-136.75,-10.55,-0.02:99
-chr1	1879652	rs2748973	A	T	145.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1566.33;QD=34.81;SB=-658.70	GT:AD:DP:GL:GQ	1/1:0,44:44:-160.23,-13.26,-0.02:99
-chr1	1881908	rs2803292	G	C	343.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1280.73;QD=16.85;SB=-445.74	GT:AD:DP:GL:GQ	0/1:41,35:73:-153.35,-22.00,-166.87:99
-chr1	1882185	rs2803291	T	C	583.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1616.58;QD=28.87;SB=-749.95	GT:AD:DP:GL:GQ	1/1:0,56:52:-165.29,-15.68,-0.05:99
-chr1	1883521	rs9777849	T	C	52.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=58.55;MQ0=0;OQ=2600.99;QD=33.78;SB=-793.15	GT:AD:DP:GL:GQ	1/1:0,77:75:-263.71,-22.59,-0.03:99
-chr1	1883775	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=18;HaplotypeScore=34.55;MQ=54.67;MQ0=0;OQ=115.46;QD=1.72;SB=60.06	GT:AD:DP:GL:GQ	0/1:50,15:53:-37.44,-22.61,-153.19:99
-chr1	1884144	rs4648739	T	C	265.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=56.66;MQ0=0;OQ=1089.11;QD=12.10;SB=-234.30	GT:AD:DP:GL:GQ	0/1:41,48:84:-137.52,-25.33,-160.93:99
-chr1	1884622	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=7.50;MQ=53.07;MQ0=0;OQ=108.82;QD=2.02;SB=71.24	GT:AD:DP:GL:GQ	0/1:31,23:39:-25.91,-11.75,-106.64:99
-chr1	1884705	rs9697615	G	A	136.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.71;MQ0=0;OQ=608.41;QD=12.94;SB=-170.23	GT:AD:DP:GL:GQ	0/1:24,22:44:-77.39,-13.26,-79.80:99
-chr1	1884754	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=43.50;MQ=52.44;MQ0=1;OQ=107.17;QD=1.76;SB=65.22	GT:AD:DP:GL:GQ	0/1:47,13:52:-29.66,-15.66,-164.16:99
-chr1	1884755	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=20;HaplotypeScore=45.92;MQ=52.41;MQ0=1;OQ=326.78;QD=5.11;SB=65.23	GT:AD:DP:GL:GQ	0/1:48,16:59:-53.73,-17.77,-157.95:99
-chr1	1884837	rs35817970	T	C	556.60	Indel	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=55.91;MQ0=0;QD=10.91;SB=-219.26	GT:AD:DP:GL:GQ	0/1:29,21:48:-73.41,-14.46,-106.68:99
-chr1	1885037	rs7523728	C	T	495.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=754.75;QD=13.98;SB=-403.19	GT:AD:DP:GL:GQ	0/1:30,24:50:-93.83,-15.07,-88.75:99
-chr1	1885400	rs28561741	A	G	4.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=59.52;MQ0=0;OQ=350.23;QD=7.30;SB=-137.55	GT:AD:DP:GL:GQ	0/1:31,17:46:-52.17,-13.87,-117.69:99
-chr1	1885962	rs13302978	G	A	113.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=53.12;MQ0=0;OQ=689.28;QD=12.53;SB=-222.75	GT:AD:DP:GL:GQ	0/1:26,26:49:-87.00,-14.79,-79.84:99
-chr1	1886045	rs13303324	T	C	252.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.41;MQ0=0;OQ=434.96;QD=11.15;SB=-181.59	GT:AD:DP:GL:GQ	0/1:18,21:37:-57.94,-11.16,-71.83:99
-chr1	1886083	rs13303202	C	T	406.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=730.31;QD=16.98;SB=-346.33	GT:AD:DP:GL:GQ	0/1:21,22:43:-89.27,-12.95,-73.96:99
-chr1	1886300	rs16824585	G	A	23.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.05;MQ0=0;OQ=933.53;QD=20.75;SB=-382.89	GT:AD:DP:GL:GQ	0/1:18,27:45:-110.19,-13.56,-62.00:99
-chr1	1886413	rs28625839	C	T	106.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.20;MQ0=0;OQ=181.47;QD=6.98;SB=-69.07	GT:AD:DP:GL:GQ	0/1:17,9:21:-27.77,-6.34,-42.14:99
-chr1	1887329	rs28523363	A	G	314.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=60.00;MQ0=0;OQ=843.98;QD=13.40;SB=-333.92	GT:AD:DP:GL:GQ	0/1:32,31:62:-106.36,-18.68,-128.89:99
-chr1	1887451	rs4648599	C	T	245.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.01;MQ0=0;OQ=690.92;QD=14.70;SB=-275.28	GT:AD:DP:GL:GQ	0/1:24,23:44:-85.64,-13.26,-73.07:99
-chr1	1887613	rs4648600	C	G	12.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=4.38;MQ=58.99;MQ0=0;OQ=734.25;QD=15.96;SB=-239.38	GT:AD:DP:GL:GQ	0/1:23,23:42:-89.37,-12.66,-89.33:99
-chr1	1887905	rs28712827	G	A	21.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=6.31;MQ=57.89;MQ0=0;OQ=502.21;QD=13.22;SB=-250.22	GT:AD:DP:GL:GQ	0/1:20,17:35:-64.07,-10.57,-52.53:99
-chr1	1888209	rs28414188	C	T	21.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=59.03;MQ0=0;OQ=593.85;QD=13.81;SB=-128.12	GT:AD:DP:GL:GQ	0/1:24,19:42:-75.32,-12.65,-82.23:99
-chr1	1888229	rs28629936	G	A	50.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=708.17;QD=17.70;SB=-204.21	GT:AD:DP:GL:GQ	0/1:19,21:39:-85.85,-11.75,-58.81:99
-chr1	1888545	rs17715950	T	C	188.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=392.93;QD=12.68;SB=-143.27	GT:AD:DP:GL:GQ	0/1:16,15:29:-51.31,-8.74,-58.30:99
-chr1	1888637	rs34506333	G	C	174.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=57.85;MQ0=0;OQ=1081.48;QD=18.97;SB=-492.64	GT:AD:DP:GL:GQ	0/1:26,30:56:-128.32,-16.89,-103.04:99
-chr1	1888639	rs35698161	C	A	246.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=57.81;MQ0=0;OQ=901.53;QD=16.10;SB=-413.05	GT:AD:DP:GL:GQ	0/1:26,30:56:-110.30,-16.87,-89.43:99
-chr1	1888688	rs34824947	T	C	245.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.71;MQ0=0;OQ=584.90;QD=12.44;SB=-198.60	GT:AD:DP:GL:GQ	0/1:25,22:46:-75.63,-13.86,-99.35:99
-chr1	1888695	rs34586002	C	A	280.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.48;MQ0=0;OQ=561.20;QD=12.75;SB=-230.89	GT:AD:DP:GL:GQ	0/1:24,20:42:-72.05,-12.65,-79.10:99
-chr1	1888719	rs35031992	G	A	261.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=534.91;QD=11.38;SB=-199.88	GT:AD:DP:GL:GQ	0/1:28,19:46:-70.65,-13.87,-88.35:99
-chr1	1888794	rs35186797	T	C	29.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.78;MQ=57.65;MQ0=0;OQ=525.33;QD=10.94;SB=-267.94	GT:AD:DP:GL:GQ	0/1:23,25:43:-68.78,-12.96,-87.05:99
-chr1	1888798	rs13303138	G	A	173.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=57.75;MQ0=0;OQ=779.95;QD=15.60;SB=-266.18	GT:AD:DP:GL:GQ	0/1:24,26:46:-95.14,-13.87,-72.15:99
-chr1	1888835	rs34940616	G	A	9.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.88;MQ0=0;OQ=741.91;QD=23.93;SB=-335.86	GT:AD:DP:GL:GQ	0/1:9,22:29:-86.21,-8.74,-25.83:99
-chr1	1889024	rs17778128	G	C	179.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=57.35;MQ0=0;OQ=668.72;QD=10.79;SB=-360.78	GT:AD:DP:GL:GQ	0/1:38,24:59:-87.94,-17.79,-162.55:99
-chr1	1889139	rs61775058	A	T	458.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.25;MQ0=0;OQ=787.44;QD=13.58;SB=-299.67	GT:AD:DP:GL:GQ	0/1:31,27:58:-99.50,-17.47,-121.67:99
-chr1	1889179	rs61775059	T	C	275.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.27;MQ0=0;OQ=765.16;QD=11.42;SB=-328.14	GT:AD:DP:GL:GQ	0/1:35,32:66:-99.69,-19.89,-140.70:99
-chr1	1889260	rs13303007	G	A	42.33	Indel;LowQual	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.98;MQ=52.93;MQ0=0;QD=0.73;SB=-30.38	GT:AD:DP:GL:GQ	0/1:52,6:58:-24.99,-17.47,-182.54:75.16
-chr1	1889721	rs4648601	C	T	94.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=56.35;MQ0=0;OQ=530.41;QD=10.20;SB=-77.51	GT:AD:DP:GL:GQ	0/1:33,19:47:-70.50,-14.17,-95.11:99
-chr1	1890092	rs16824588	T	C	13.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=57.02;MQ0=0;OQ=150.77;QD=3.97;SB=-54.71	GT:AD:DP:GL:GQ	0/1:26,12:35:-28.91,-10.55,-104.30:99
-chr1	1890192	rs55709963	A	G	31.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.20;MQ0=0;OQ=293.66;QD=11.75;SB=-65.87	GT:AD:DP:GL:GQ	0/1:12,13:24:-39.88,-7.23,-45.12:99
-chr1	1890199	rs56126097	A	G	24.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=55.86;MQ0=0;OQ=270.97;QD=11.78;SB=-47.83	GT:AD:DP:GL:GQ	0/1:11,12:22:-37.01,-6.63,-43.67:99
-chr1	1890235	rs55676322	G	A	36.70	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.45;MQ0=0;QD=2.82;SB=-3.98	GT:AD:DP:GL:GQ	0/1:10,3:12:-10.57,-3.62,-30.38:69.54
-chr1	1890236	.	C	T	56.05	SnpCluster	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=4.00;SB=-3.98	GT:AD:DP:GL:GQ	0/1:11,3:13:-12.81,-3.92,-36.41:88.89
-chr1	1890241	rs55784504	G	A	37.70	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=53.95;MQ0=0;QD=2.36;SB=-0.97	GT:AD:DP:GL:GQ	0/1:13,3:15:-11.57,-4.52,-40.91:70.54
-chr1	1890268	rs61776961	A	G	12.56	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=53.61;MQ0=0;QD=0.66;SB=-31.93	GT:AD:DP:GL:GQ	0/1:15,4:17:-9.64,-5.12,-56.10:45.15
-chr1	1890270	rs61776962	C	T	67.49	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=53.03;MQ0=0;QD=3.21;SB=-45.25	GT:AD:DP:GL:GQ	0/1:16,5:19:-15.77,-5.74,-45.89:99
-chr1	1890274	rs61776963	T	C	59.17	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=2.43;MQ=51.33;MQ0=0;QD=2.96;SB=-53.70	GT:AD:DP:GL:GQ	0/1:14,6:19:-14.93,-5.73,-56.51:92.01
-chr1	1890292	rs61776964	T	G	172.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=50.53;MQ0=0;OQ=263.44;QD=9.08;SB=-95.94	GT:AD:DP:GL:GQ	0/1:17,12:28:-38.07,-8.44,-56.66:99
-chr1	1890305	rs61776965	C	T	161.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=50.32;MQ0=0;OQ=365.34;QD=11.79;SB=-175.70	GT:AD:DP:GL:GQ	0/1:18,13:27:-47.95,-8.13,-56.49:99
-chr1	1890314	rs6681749	A	G	143.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=50.65;MQ0=0;OQ=306.18;QD=9.57;SB=-129.77	GT:AD:DP:GL:GQ	0/1:17,15:29:-42.64,-8.74,-64.98:99
-chr1	1890507	.	T	C	42.73	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.92;MQ=54.77;MQ0=0;QD=1.86;SB=14.07	GT:AD:DP:GL:GQ	0/1:16,7:17:-12.68,-5.13,-48.62:75.57
-chr1	1890548	.	A	T	8.30	PASS	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=60.00;MQ0=0;OQ=79.81;QD=7.98;SB=-57.71	GT:AD:DP:GL:GQ	0/1:6,4:10:-14.28,-3.01,-22.53:99
-chr1	1890778	rs28707401	G	A	84.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.74;MQ=58.33;MQ0=0;OQ=401.02;QD=14.32;SB=-129.13	GT:AD:DP:GL:GQ	0/1:13,14:24:-53.53,-10.14,-35.22:99
-chr1	1892326	.	A	C	112.36	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.24;MQ0=0;OQ=852.28;QD=15.50;SB=-429.85	GT:AD:DP:GL:GQ	0/1:26,29:52:-104.18,-15.67,-81.22:99
-chr1	1892422	rs7367171	A	G	220.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.60;MQ0=0;OQ=514.17;QD=9.02;SB=-267.96	GT:AD:DP:GL:GQ	0/1:32,25:54:-70.98,-16.28,-126.05:99
-chr1	1892426	rs7367879	G	A	251.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=59.60;MQ0=0;OQ=832.91;QD=14.36;SB=-352.38	GT:AD:DP:GL:GQ	0/1:32,26:52:-102.26,-15.68,-81.39:99
-chr1	1892733	rs7366028	C	T	234.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.35;MQ0=0;OQ=1086.69;QD=15.31;SB=-535.37	GT:AD:DP:GL:GQ	0/1:36,35:67:-132.15,-20.20,-106.68:99
-chr1	1893163	rs4648603	C	T	25.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.48;MQ0=0;OQ=261.75;QD=5.95;SB=-111.10	GT:AD:DP:GL:GQ	0/1:32,12:41:-41.83,-12.38,-90.87:99
-chr1	1893572	rs13303201	C	A	360.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.58;MQ0=0;OQ=726.40;QD=15.46;SB=-340.06	GT:AD:DP:GL:GQ	0/1:22,25:44:-89.18,-13.26,-62.88:99
-chr1	1895166	rs56313717	C	A	171.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=635.59;QD=15.13;SB=-197.47	GT:AD:DP:GL:GQ	0/1:18,24:41:-79.20,-12.35,-61.36:99
-chr1	1897772	rs7528894	C	T	135.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.63;MQ0=0;OQ=607.52;QD=11.91;SB=-152.65	GT:AD:DP:GL:GQ	0/1:30,21:44:-77.30,-13.26,-84.20:99
-chr1	1897865	rs7536087	T	C	25.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=54.74;MQ0=0;OQ=378.78;QD=5.83;SB=-147.48	GT:AD:DP:GL:GQ	0/1:38,27:56:-58.05,-16.88,-148.17:99
-chr1	1897872	rs28588807	T	C	29.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=53.22;MQ0=0;OQ=367.97;QD=6.24;SB=-166.50	GT:AD:DP:GL:GQ	0/1:36,23:50:-55.16,-15.08,-127.98:99
-chr1	1897899	rs4388640	C	T	188.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.25;MQ0=0;OQ=499.97;QD=8.20;SB=-247.55	GT:AD:DP:GL:GQ	0/1:39,22:51:-68.65,-15.37,-112.84:99
-chr1	1897945	rs28410799	A	G	3.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.71;MQ=54.36;MQ0=0;OQ=341.23;QD=5.59;SB=-142.90	GT:AD:DP:GL:GQ	0/1:39,21:52:-53.08,-15.68,-138.70:99
-chr1	1897960	rs28789409	G	T	236.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=55.27;MQ0=0;OQ=569.89;QD=9.19;SB=-286.60	GT:AD:DP:GL:GQ	0/1:38,24:59:-78.04,-17.77,-137.70:99
-chr1	1898245	rs13303203	C	T	367.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.47;MQ0=0;OQ=546.46;QD=10.31;SB=-185.87	GT:AD:DP:GL:GQ	0/1:33,20:47:-72.10,-14.17,-90.13:99
-chr1	1898289	rs28545809	T	C	170.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=55.94;MQ0=0;OQ=320.54;QD=7.82;SB=-173.95	GT:AD:DP:GL:GQ	0/1:24,16:37:-46.49,-11.16,-87.43:99
-chr1	1898563	rs4233027	C	G	427.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=977.32;QD=15.27;SB=-297.92	GT:AD:DP:GL:GQ	0/1:36,28:63:-120.00,-18.99,-153.02:99
-chr1	1899064	rs35953639	A	G	134.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=58.52;MQ0=0;OQ=901.65;QD=15.82;SB=-439.15	GT:AD:DP:GL:GQ	0/1:25,32:55:-110.02,-16.57,-94.81:99
-chr1	1899178	rs61776976	G	A	36.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=59.15;MQ0=0;OQ=1106.44;QD=22.13;SB=-371.92	GT:AD:DP:GL:GQ	0/1:16,34:48:-128.39,-14.47,-53.19:99
-chr1	1899305	rs55863117	A	G	206.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.24;MQ0=0;OQ=872.61;QD=14.31;SB=-340.17	GT:AD:DP:GL:GQ	0/1:25,35:57:-107.73,-17.18,-95.38:99
-chr1	1899354	rs28716654	C	T	202.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=59.30;MQ0=0;OQ=1176.35;QD=17.82;SB=-612.15	GT:AD:DP:GL:GQ	0/1:31,35:62:-139.59,-18.67,-102.07:99
-chr1	1899413	rs28680595	T	A	360.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=1036.44;QD=15.95;SB=-464.88	GT:AD:DP:GL:GQ	0/1:30,35:63:-125.91,-18.98,-108.28:99
-chr1	1899561	rs28613404	C	T	21.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=5.89;MQ=58.07;MQ0=0;OQ=742.01;QD=16.13;SB=-312.34	GT:AD:DP:GL:GQ	0/1:20,25:42:-90.15,-12.66,-60.03:99
-chr1	1899593	rs28491083	G	T	384.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=572.46;QD=14.31;SB=-222.49	GT:AD:DP:GL:GQ	0/1:17,23:37:-71.67,-11.14,-60.73:99
-chr1	1899703	rs28433557	C	T	153.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.28;MQ0=0;OQ=695.04;QD=16.55;SB=-241.74	GT:AD:DP:GL:GQ	0/1:19,23:39:-84.54,-11.75,-59.04:99
-chr1	1899714	rs28448395	G	A	59.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=57.87;MQ0=0;OQ=975.55;QD=21.68;SB=-411.21	GT:AD:DP:GL:GQ	0/1:16,29:43:-113.79,-12.96,-49.10:99
-chr1	1899728	rs28539219	G	A	22.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.50;MQ0=0;OQ=1039.92;QD=21.66;SB=-531.16	GT:AD:DP:GL:GQ	0/1:16,32:45:-120.83,-13.56,-54.90:99
-chr1	1899861	rs28468541	C	G	2.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=9.03;MQ=56.76;MQ0=0;OQ=898.89;QD=17.63;SB=-410.04	GT:AD:DP:GL:GQ	0/1:24,26:48:-107.64,-14.46,-99.37:99
-chr1	1899872	rs28588737	T	C	12.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.04;MQ=57.56;MQ0=0;OQ=448.65;QD=9.35;SB=-239.28	GT:AD:DP:GL:GQ	0/1:25,23:43:-61.11,-12.96,-97.10:99
-chr1	1899946	rs28645949	G	T	144.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=60.00;MQ0=0;OQ=332.80;QD=10.40;SB=-155.69	GT:AD:DP:GL:GQ	0/1:19,13:30:-45.61,-9.04,-50.81:99
-chr1	1900096	rs28651716	T	C	225.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=54.90;MQ0=0;OQ=686.40;QD=12.71;SB=-338.36	GT:AD:DP:GL:GQ	0/1:28,26:53:-87.90,-15.97,-105.41:99
-chr1	1900231	rs28642304	G	A	31.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=5.35;MQ=52.67;MQ0=2;OQ=686.17;QD=14.00;SB=-341.85	GT:AD:DP:GL:GQ	0/1:25,24:43:-84.86,-12.96,-72.07:99
-chr1	1900342	.	C	G	14.82	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=12.94;MQ=53.14;MQ0=2;QD=0.37;SB=26.12	GT:AD:DP:GL:GQ	0/1:35,5:34:-15.00,-10.25,-129.63:47.51
-chr1	1900344	.	T	C	47.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=13.10;MQ=54.07;MQ0=2;QD=1.16;SB=26.11	GT:AD:DP:GL:GQ	0/1:32,9:34:-18.29,-10.25,-109.75:80.39
-chr1	1900366	.	T	C	19.64	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=56.14;MQ0=0;QD=0.48;SB=17.08	GT:AD:DP:GL:GQ	0/1:34,7:35:-15.79,-10.55,-116.81:52.43
-chr1	1900466	rs7550407	A	G	75.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=45.89;MQ0=2;OQ=380.59;QD=19.03;SB=-189.68	GT:AD:DP:GL:GQ	1/1:0,20:13:-41.66,-3.92,-0.01:39.09
-chr1	1900518	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=35.59;MQ0=6;OQ=55.62;QD=1.29;SB=-13.87	GT:AD:DP:GL:GQ	0/1:29,14:19:-14.57,-5.73,-56.56:88.46
-chr1	1900571	.	C	T	45.32	LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=19.95;MQ=36.93;MQ0=3;QD=0.91;SB=-24.62	GT:AD:DP:GL:GQ	0/1:41,9:25:-15.36,-7.54,-65.46:78.16
-chr1	1900816	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=6.83;MQ=47.18;MQ0=2;OQ=71.50;QD=1.79;SB=-42.78	GT:AD:DP:GL:GQ	0/1:30,10:31:-19.78,-9.34,-96.64:99
-chr1	1900861	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=8.07;MQ=42.04;MQ0=5;OQ=136.19;QD=2.67;SB=-39.59	GT:AD:DP:GL:GQ	0/1:31,18:36:-30.43,-13.53,-101.33:99
-chr1	1900880	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=21.93;MQ=42.64;MQ0=5;OQ=81.77;QD=1.99;SB=26.03	GT:AD:DP:GL:GQ	0/1:32,9:28:-19.91,-8.45,-71.11:99
-chr1	1900981	.	G	A	32.02	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=14.77;MQ=47.97;MQ0=0;QD=1.07;SB=20.08	GT:AD:DP:GL:GQ	0/1:27,3:20:-12.51,-6.03,-56.06:64.85
-chr1	1900982	.	C	T	11.94	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=14.77;MQ=47.50;MQ0=0;QD=0.41;SB=35.07	GT:AD:DP:GL:GQ	0/1:26,3:25:-11.99,-7.54,-69.22:44.49
-chr1	1900987	.	C	G	179.53	SnpCluster	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=15.25;MQ=49.14;MQ0=0;QD=5.79;SB=-106.68	GT:AD:DP:GL:GQ	0/1:23,8:22:-27.88,-6.64,-59.47:99
-chr1	1901007	.	A	G	17.82	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=50.60;MQ0=0;OQ=269.42;QD=8.42;SB=-129.64	GT:AD:DP:GL:GQ	0/1:19,13:29:-38.97,-8.74,-66.56:99
-chr1	1901025	.	T	C	1.37	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=50.85;MQ0=0;OQ=146.63;QD=3.67;SB=-63.91	GT:AD:DP:GL:GQ	0/1:26,13:31:-27.31,-9.36,-79.17:99
-chr1	1901036	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.09;MQ=51.49;MQ0=1;OQ=87.37;QD=1.99;SB=-8.61	GT:AD:DP:GL:GQ	0/1:38,6:38:-23.49,-11.46,-98.15:99
-chr1	1901053	.	T	C	11.36	LowQual	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=52.41;MQ0=1;QD=0.25;SB=-25.22	GT:AD:DP:GL:GQ	0/1:37,8:38:-15.84,-11.45,-126.44:43.87
-chr1	1901418	rs28645431	C	T	0.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.95;MQ=41.39;MQ0=1;OQ=172.22;QD=4.53;SB=-89.91	GT:AD:DP:GL:GQ	0/1:29,9:21:-26.84,-6.33,-42.67:99
-chr1	1901574	rs13303001	G	A	41.49	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=7.68;MQ=10.86;MQ0=15;QD=1.66;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,5:3:-8.34,-0.90,-3.10:21.92
-chr1	1901637	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=16.41;MQ=17.84;MQ0=13;OQ=157.79;QD=2.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:44,10:26:-26.90,-7.83,-65.70:99
-chr1	1901664	.	G	A	34.02	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.20;MQ=18.33;MQ0=14;QD=0.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:42,9:17:-11.81,-5.13,-50.35:66.86
-chr1	1901668	.	G	A	0.06	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.04;MQ=18.51;MQ0=13;OQ=99.32;QD=2.03;SB=-7.00	GT:AD:DP:GL:GQ	0/1:40,9:16:-18.04,-4.83,-38.64:99
-chr1	1901732	rs13303290	T	C	12.82	LowQual	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.55;MQ0=0;QD=0.64;SB=-24.62	GT:AD:DP:GL:GQ	0/1:15,5:16:-9.37,-4.82,-51.21:45.43
-chr1	1901798	rs4648740	A	G	153	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=48.72;MQ0=0;OQ=495.24;QD=14.15;SB=-240.44	GT:AD:DP:GL:GQ	0/1:16,19:34:-63.06,-10.25,-57.72:99
-chr1	1901828	rs4648741	T	A	223.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=49.47;MQ0=0;OQ=518.42;QD=14.01;SB=-218.56	GT:AD:DP:GL:GQ	0/1:16,21:33:-65.07,-9.94,-58.68:99
-chr1	1902252	rs35209771	G	A	29.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.72;MQ=59.38;MQ0=0;OQ=570.39;QD=15.42;SB=-188.28	GT:AD:DP:GL:GQ	0/1:17,20:31:-69.66,-9.34,-43.55:99
-chr1	1902361	rs35032062	A	G	8.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=1.19;MQ=56.62;MQ0=0;OQ=288.56;QD=9.31;SB=-81.77	GT:AD:DP:GL:GQ	0/1:15,16:27:-40.29,-8.15,-49.29:99
-chr1	1902443	rs4648742	T	G	2.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=3;HaplotypeScore=1.88;MQ=52.64;MQ0=0;OQ=307.57;QD=13.98;SB=-102.98	GT:AD:DP:GL:GQ	0/1:8,14:19:-39.76,-5.72,-27.07:99
-chr1	1902590	rs34957887	A	G	5.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.60;MQ0=0;OQ=111.21;QD=3.83;SB=-42.82	GT:AD:DP:GL:GQ	0/1:21,8:27:-22.55,-8.14,-76.38:99
-chr1	1902594	rs34699657	T	C	6.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=55.30;MQ0=0;OQ=114.19;QD=4.08;SB=-28.64	GT:AD:DP:GL:GQ	0/1:19,9:26:-22.55,-7.85,-71.28:99
-chr1	1902618	rs13302917	G	C	80.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=55.30;MQ0=0;OQ=235.26;QD=8.40;SB=8.06	GT:AD:DP:GL:GQ	0/1:18,10:26:-34.65,-7.84,-76.52:99
-chr1	1902752	.	G	A	16.41	LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=23.04;MQ0=3;QD=0.82;SB=-30.52	GT:AD:DP:GL:GQ	0/1:17,3:9:-7.63,-2.71,-23.66:49.15
-chr1	1902780	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=12.84;MQ=20.15;MQ0=3;OQ=68.78;QD=3.62;SB=-7.00	GT:AD:DP:GL:GQ	0/1:14,5:6:-11.97,-1.81,-9.13:73.25
-chr1	1902787	.	G	A	0.55	PASS	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=20.15;MQ0=3;OQ=103.65;QD=5.46;SB=-46.55	GT:AD:DP:GL:GQ	0/1:13,6:5:-15.16,-1.51,-3.80:22.92
-chr1	1902803	.	A	G	0.43	PASS	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=19.89;MQ0=3;OQ=59.98;QD=3.75;SB=-6.99	GT:AD:DP:GL:GQ	0/1:11,5:6:-11.09,-1.81,-11.69:92.82
-chr1	1902817	.	T	C	41.42	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=9.95;MQ=22.02;MQ0=2;QD=2.96;SB=-35.94	GT:AD:DP:GL:GQ	0/1:9,4:6:-9.23,-1.81,-11.87:74.25
-chr1	1902835	rs61776983	A	C	26.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.55;MQ=20.97;MQ0=2;OQ=78.83;QD=5.63;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,12:3:-11.37,-0.90,-0.00:9.03
-chr1	1903052	.	G	A	0.07	PASS	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=21.19;MQ0=5;OQ=185.24;QD=7.12;SB=-114.97	GT:AD:DP:GL:GQ	0/1:13,13:10:-24.83,-3.02,-9.74:67.23
-chr1	1903096	.	C	T	19.36	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=27.09;MQ=29.12;MQ0=4;QD=0.84;SB=-32.50	GT:AD:DP:GL:GQ	0/1:20,3:10:-8.23,-3.01,-26.23:52.14
-chr1	1903103	.	G	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=11.25;MQ=32.31;MQ0=4;OQ=203.36;QD=8.13;SB=-108.63	GT:AD:DP:GL:GQ	0/1:11,14:13:-27.54,-3.92,-21.98:99
-chr1	1903122	.	G	A	1.51	PASS	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=5.86;MQ=37.50;MQ0=2;OQ=277.72;QD=11.11;SB=-116.63	GT:AD:DP:GL:GQ	0/1:11,14:14:-35.28,-4.22,-14.88:99
-chr1	1903133	.	C	T	26.70	DPFilter;HARD_TO_VALIDATE;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=14.79;MQ=33.51;MQ0=4;QD=0.92;SB=2.00	GT:AD:DP:GL:GQ	0/1:25,3:16:-10.78,-4.83,-41.60:59.53
-chr1	1903194	.	G	A	0.17	PASS	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=22.60;MQ0=6;OQ=59.87;QD=3.15;SB=-29.63	GT:AD:DP:GL:GQ	0/1:15,4:8:-11.68,-2.41,-15.55:92.71
-chr1	1903256	rs56273126	A	C	0.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=9.88;MQ=34.34;MQ0=2;OQ=157.91;QD=8.77;SB=-43.00	GT:AD:DP:GL:GQ	0/1:8,10:11:-22.39,-3.31,-17.60:99
-chr1	1903263	rs56067355	C	T	0.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=9.27;MQ=35.40;MQ0=1;OQ=103.77;QD=4.72;SB=-3.99	GT:AD:DP:GL:GQ	0/1:16,6:17:-18.78,-5.12,-41.68:99
-chr1	1903283	.	G	A	8.07	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.95;MQ=39.68;MQ0=0;OQ=372.77;QD=10.96;SB=-73.09	GT:AD:DP:GL:GQ	0/1:17,16:22:-47.20,-6.63,-29.71:99
-chr1	1903404	.	C	T	39.84	LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=6.15;MQ=48.13;MQ0=1;QD=1.73;SB=-35.65	GT:AD:DP:GL:GQ	0/1:19,4:16:-12.09,-4.83,-40.40:72.68
-chr1	1903423	rs58434854	A	G	0.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=7.95;MQ=46.73;MQ0=3;OQ=182.58;QD=6.30;SB=-71.95	GT:AD:DP:GL:GQ	0/1:18,11:23:-28.48,-6.94,-51.85:99
-chr1	1903439	rs58923167	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=17.53;MQ=42.29;MQ0=6;OQ=136.42;QD=4.01;SB=-25.62	GT:AD:DP:GL:GQ	0/1:26,8:22:-23.56,-6.63,-53.26:99
-chr1	1903440	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=17.53;MQ=42.29;MQ0=6;OQ=187.84;QD=5.52;SB=-110.54	GT:AD:DP:GL:GQ	0/1:26,8:23:-29.00,-6.94,-48.31:99
-chr1	1903458	rs55879512	A	G	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=7.35;MQ=44.38;MQ0=5;OQ=75.85;QD=1.85;SB=-63.75	GT:AD:DP:GL:GQ	0/1:26,14:24:-18.11,-7.24,-65.52:99
-chr1	1903493	.	G	A	1.04	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=47.31;MQ0=2;OQ=168.07;QD=4.31;SB=-57.28	GT:AD:DP:GL:GQ	0/1:31,8:25:-27.63,-7.54,-58.38:99
-chr1	1903509	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=11.62;MQ=39.25;MQ0=5;OQ=92.69;QD=2.73;SB=5.04	GT:AD:DP:GL:GQ	0/1:25,9:18:-17.98,-5.43,-46.46:99
-chr1	1903540	.	G	A	33.23	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=27.81;MQ=22.93;MQ0=9;QD=1.15;SB=-3.98	GT:AD:DP:GL:GQ	0/1:26,3:5:-8.11,-1.51,-11.06:66.06
-chr1	1903547	.	T	A	34.51	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=29.76;MQ=15.81;MQ0=9;QD=1.33;SB=-42.38	GT:AD:DP:GL:GQ	0/1:19,6:3:-7.64,-0.90,-3.64:27.36
-chr1	1903587	rs4648605	C	T	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=14.50;MQ=19.08;MQ0=11;OQ=79.27;QD=1.98;SB=-3.99	GT:AD:DP:GL:GQ	0/1:27,13:10:-14.23,-3.02,-19.87:99
-chr1	1904125	rs4648745	T	C	247.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.25;MQ0=0;OQ=694.34;QD=11.20;SB=-245.29	GT:AD:DP:GL:GQ	0/1:33,29:61:-91.10,-18.39,-129.32:99
-chr1	1904347	rs4648746	A	G	176.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.39;MQ0=0;OQ=338.48;QD=8.91;SB=-150.90	GT:AD:DP:GL:GQ	0/1:21,17:36:-47.98,-10.85,-82.55:99
-chr1	1904465	rs28737396	A	T	328.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1094.85;QD=18.56;SB=-354.42	GT:AD:DP:GL:GQ	0/1:24,35:59:-130.54,-17.77,-93.43:99
-chr1	1904806	rs61776990	C	T	103.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=56.91;MQ0=0;OQ=639.60;QD=17.29;SB=-221.92	GT:AD:DP:GL:GQ	0/1:15,22:35:-77.80,-10.56,-46.60:99
-chr1	1905885	rs4648747	G	A	213.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=54.80;MQ0=0;OQ=758.00;QD=15.16;SB=-295.79	GT:AD:DP:GL:GQ	0/1:26,24:49:-93.85,-14.76,-88.23:99
-chr1	1905894	rs13303091	C	T	219.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=53.79;MQ0=0;OQ=656.87;QD=13.14;SB=-261.28	GT:AD:DP:GL:GQ	0/1:27,22:45:-82.54,-13.57,-75.64:99
-chr1	1905900	rs13302998	T	C	119.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=54.88;MQ0=0;OQ=405.99;QD=8.83;SB=-193.60	GT:AD:DP:GL:GQ	0/1:27,19:44:-57.15,-13.26,-102.12:99
-chr1	1906158	rs13302999	C	T	171.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=58.63;MQ0=0;OQ=813.49;QD=15.95;SB=-262.17	GT:AD:DP:GL:GQ	0/1:25,26:49:-99.40,-14.77,-77.74:99
-chr1	1906389	rs3795284	C	T	21.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=2.33;MQ=60.00;MQ0=0;OQ=758.20;QD=14.04;SB=-278.28	GT:AD:DP:GL:GQ	0/1:28,26:52:-94.77,-15.67,-93.68:99
-chr1	1906447	rs3795283	G	T	377.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=60.00;MQ0=0;OQ=998.45;QD=16.37;SB=-378.14	GT:AD:DP:GL:GQ	0/1:26,35:60:-121.20,-18.07,-93.96:99
-chr1	1906750	rs3795280	C	T	425.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=568.99;QD=13.55;SB=-250.75	GT:AD:DP:GL:GQ	0/1:24,18:42:-72.83,-12.65,-87.72:99
-chr1	1906918	rs34331632	A	G	117.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=58.45;MQ0=0;OQ=396.71;QD=8.82;SB=-212.27	GT:AD:DP:GL:GQ	0/1:26,19:41:-55.32,-12.36,-92.05:99
-chr1	1907309	rs34567059	T	G	9.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=3;HaplotypeScore=0.99;MQ=59.28;MQ0=0;OQ=266.80;QD=8.34;SB=-138.72	GT:AD:DP:GL:GQ	0/1:18,13:26:-37.80,-7.84,-51.38:99
-chr1	1907332	rs13303173	G	A	219.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.50;MQ0=0;OQ=402.42;QD=8.75;SB=-215.71	GT:AD:DP:GL:GQ	0/1:30,16:41:-55.89,-12.37,-85.41:99
-chr1	1907475	rs13302992	A	T	11.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.57;MQ=54.24;MQ0=0;OQ=373.16;QD=8.88;SB=-86.42	GT:AD:DP:GL:GQ	0/1:20,21:33:-50.55,-9.95,-63.90:99
-chr1	1907510	rs13302993	T	C	10.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=3.38;MQ=53.93;MQ0=0;OQ=691.42;QD=12.35;SB=-327.29	GT:AD:DP:GL:GQ	0/1:24,32:51:-87.80,-15.38,-95.79:99
-chr1	1907689	rs4648748	T	G	25.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.34;MQ=60.00;MQ0=0;OQ=189.73;QD=5.93;SB=-95.86	GT:AD:DP:GL:GQ	0/1:21,11:31:-31.60,-9.34,-75.09:99
-chr1	1907731	rs4648749	T	A	88.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=58.55;MQ0=0;OQ=1056.82;QD=33.03;SB=-482.74	GT:AD:DP:GL:GQ	1/1:0,32:31:-109.29,-9.34,-0.02:93.25
-chr1	1907768	rs4648750	A	C	41.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=58.69;MQ0=0;OQ=501.71;QD=15.68;SB=-178.91	GT:AD:DP:GL:GQ	0/1:13,18:31:-62.79,-9.34,-46.86:99
-chr1	1908051	rs4233028	A	G	0.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=11.36;MQ=58.24;MQ0=0;OQ=590.53;QD=10.36;SB=-318.09	GT:AD:DP:GL:GQ	0/1:28,29:51:-77.71,-15.37,-108.19:99
-chr1	1908348	rs4350140	A	G	295.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=483.27;QD=11.51;SB=-249.48	GT:AD:DP:GL:GQ	0/1:22,19:40:-63.66,-12.05,-87.28:99
-chr1	1908395	rs4535948	A	T	243.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=561.16;QD=14.03;SB=-291.34	GT:AD:DP:GL:GQ	0/1:20,20:38:-70.85,-11.45,-68.83:99
-chr1	1908444	rs4603072	C	T	95.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.91;MQ=59.00;MQ0=0;OQ=825.49;QD=16.19;SB=-274.16	GT:AD:DP:GL:GQ	0/1:24,27:46:-99.69,-13.86,-72.18:99
-chr1	1908455	rs4466593	G	A	154	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.00;MQ0=0;OQ=749.94;QD=14.70;SB=-209.69	GT:AD:DP:GL:GQ	0/1:25,26:47:-92.45,-14.17,-73.64:99
-chr1	1910822	rs13303020	T	C	316	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.07;MQ0=0;OQ=856.90;QD=15.30;SB=-348.06	GT:AD:DP:GL:GQ	0/1:22,34:54:-105.26,-16.29,-79.82:99
-chr1	1912163	rs13303195	C	T	281.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.42;MQ0=0;OQ=1071.80;QD=15.76;SB=-460.45	GT:AD:DP:GL:GQ	0/1:35,33:67:-130.66,-20.19,-113.97:99
-chr1	1912512	rs13303233	T	C	59.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=5.24;MQ=56.21;MQ0=1;OQ=632.02;QD=12.15;SB=-238.92	GT:AD:DP:GL:GQ	0/1:24,28:49:-81.26,-14.77,-90.12:99
-chr1	1912694	rs6605075	T	C	195.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.81;MQ0=0;OQ=3518.98;QD=36.28;SB=-1667.64	GT:AD:DP:GL:GQ	1/1:0,97:97:-350.90,-29.22,-0.04:99
-chr1	1912989	rs13303332	A	G	477.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.92;MQ0=0;OQ=1063.77;QD=12.66;SB=-392.88	GT:AD:DP:GL:GQ	0/1:42,42:74:-131.95,-22.29,-145.18:99
-chr1	1913060	rs13303315	T	C	275.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=55.32;MQ0=0;OQ=932.62;QD=13.14;SB=-432.88	GT:AD:DP:GL:GQ	0/1:32,39:67:-116.74,-20.20,-124.71:99
-chr1	1913077	rs7529662	A	G	28.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=51.94;MQ0=0;OQ=415.73;QD=6.60;SB=-158.33	GT:AD:DP:GL:GQ	0/1:37,26:55:-61.45,-16.59,-136.84:99
-chr1	1913121	rs6605076	G	A	18.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=38.45;MQ0=0;OQ=1375.58;QD=22.55;SB=-647.86	GT:AD:DP:GL:GQ	1/1:0,60:36:-143.81,-13.38,-2.67:99
-chr1	1913134	rs6662056	C	T	90.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=31.19;MQ0=0;OQ=470.14;QD=8.11;SB=-253.79	GT:AD:DP:GL:GQ	0/1:33,25:32:-59.95,-9.65,-52.35:99
-chr1	1913140	rs6605077	T	C	265.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=26.77;MQ0=0;OQ=931.68;QD=17.25;SB=-415.14	GT:AD:DP:GL:GQ	1/1:0,54:27:-96.76,-8.13,-0.01:81.23
-chr1	1913166	rs6605078	A	G	225.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=29.40;MQ0=0;OQ=379.61;QD=9.73;SB=-193.70	GT:AD:DP:GL:GQ	1/1:0,39:13:-41.56,-3.92,-0.01:39.09
-chr1	1913525	rs13303140	A	G	349.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.90;MQ0=0;OQ=337.35;QD=9.92;SB=-170.51	GT:AD:DP:GL:GQ	0/1:16,18:26:-44.86,-7.84,-45.87:99
-chr1	1913541	rs6675865	A	G	238.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=54.81;MQ0=0;OQ=476.22;QD=12.53;SB=-203.64	GT:AD:DP:GL:GQ	0/1:19,19:32:-60.55,-9.64,-59.13:99
-chr1	1914266	rs35822535	A	G	10.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.48;MQ=52.01;MQ0=0;OQ=172.60;QD=5.57;SB=-106.80	GT:AD:DP:GL:GQ	0/1:17,12:25:-30.72,-10.17,-62.92:99
-chr1	1914406	rs28674034	C	A	137.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=56.09;MQ0=0;OQ=479.30;QD=11.15;SB=-93.09	GT:AD:DP:GL:GQ	0/1:24,19:37:-62.36,-11.14,-73.40:99
-chr1	1914407	.	C	G	17.06	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.38;MQ=56.18;MQ0=0;OQ=578.11;QD=13.14;SB=-126.71	GT:AD:DP:GL:GQ	0/1:24,20:35:-71.66,-10.56,-69.93:99
-chr1	1914645	rs58504758	G	A	76.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.31;MQ0=0;OQ=649.38;QD=14.43;SB=-87.56	GT:AD:DP:GL:GQ	0/1:23,22:44:-81.48,-13.26,-81.33:99
-chr1	1914669	rs57460771	C	G	59.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=52.90;MQ0=0;OQ=635.24;QD=15.88;SB=-152.79	GT:AD:DP:GL:GQ	0/1:17,23:37:-77.97,-11.16,-71.80:99
-chr1	1915019	rs5021356	C	T	38.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=38.83;MQ0=0;OQ=299.26;QD=5.16;SB=-51.25	GT:AD:DP:GL:GQ	0/1:26,32:29:-41.96,-8.75,-54.57:99
-chr1	1915025	rs5021357	C	T	0.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=37.79;MQ0=0;OQ=104.46;QD=1.66;SB=-36.16	GT:AD:DP:GL:GQ	0/1:31,32:32:-23.37,-9.64,-89.65:99
-chr1	1915153	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=18.97;MQ=41.21;MQ0=1;OQ=317.64;QD=7.56;SB=-31.63	GT:AD:DP:GL:GQ	0/1:23,16:24:-42.29,-7.24,-39.07:99
-chr1	1915186	rs2377036	C	A	0.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=38.80;MQ0=2;OQ=789.31;QD=23.22;SB=-127.84	GT:AD:DP:GL:GQ	1/1:3,31:25:-82.54,-7.54,-0.02:75.13
-chr1	1915197	.	C	T	2.41	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=35.96;MQ0=2;OQ=151.83;QD=4.34;SB=2.02	GT:AD:DP:GL:GQ	0/1:24,11:24:-25.70,-7.23,-56.48:99
-chr1	1915324	rs2889540	C	T	459.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.97;MQ0=0;OQ=2370.24;QD=35.38;SB=-497.01	GT:AD:DP:GL:GQ	1/1:1,66:63:-240.64,-18.99,-0.03:99
-chr1	1915581	rs6691182	G	A	155.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=58.09;MQ0=0;OQ=1565.00;QD=18.20;SB=-799.86	GT:AD:DP:GL:GQ	0/1:40,46:84:-185.10,-25.32,-125.47:99
-chr1	1915947	rs6661597	T	C	434.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=753.37;QD=11.59;SB=-273.59	GT:AD:DP:GL:GQ	0/1:32,33:62:-97.31,-18.69,-126.97:99
-chr1	1915962	rs6675751	G	C	346.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1124.09;QD=17.56;SB=-315.97	GT:AD:DP:GL:GQ	0/1:34,30:64:-134.99,-19.30,-134.99:99
-chr1	1916138	rs6667687	A	T	24.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=5.93;MQ=59.44;MQ0=0;OQ=1046.27;QD=14.14;SB=-543.64	GT:AD:DP:GL:GQ	0/1:37,36:71:-129.30,-21.39,-135.06:99
-chr1	1917124	rs13302991	A	G	77.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=48.19;MQ0=0;OQ=664.15;QD=15.09;SB=-132.68	GT:AD:DP:GL:GQ	0/1:17,27:41:-82.05,-12.36,-62.14:99
-chr1	1918235	rs58325500	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.01;HRun=15;HaplotypeScore=12.28;MQ=47.41;MQ0=2;OQ=54.80;QD=0.68;SB=8.48	GT:AD:DP:GL:GQ	0/1:66,14:56:-25.35,-16.59,-150.42:87.64
-chr1	1918448	rs28827857	G	A	289.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=57.61;MQ0=0;OQ=1091.40;QD=15.82;SB=-363.89	GT:AD:DP:GL:GQ	0/1:36,33:66:-132.32,-19.90,-105.59:99
-chr1	1918459	rs28770275	C	T	156.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.33;MQ0=0;OQ=990.70;QD=15.98;SB=-272.19	GT:AD:DP:GL:GQ	0/1:31,31:62:-121.04,-18.69,-98.12:99
-chr1	1919267	rs6672175	T	C	222.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=59.22;MQ0=0;OQ=1139.84;QD=14.61;SB=-513.90	GT:AD:DP:GL:GQ	0/1:38,40:77:-140.46,-23.19,-152.92:99
-chr1	1919526	rs7532409	A	G	229.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.27;MQ0=0;OQ=832.47;QD=13.21;SB=-385.03	GT:AD:DP:GL:GQ	0/1:26,37:58:-104.01,-17.48,-104.69:99
-chr1	1919694	rs7532529	A	C	228.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=57.10;MQ0=0;OQ=714.32;QD=14.58;SB=-265.84	GT:AD:DP:GL:GQ	0/1:24,25:47:-88.87,-14.15,-84.13:99
-chr1	1919719	rs7527169	T	C	335.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.16;MQ0=0;OQ=729.87;QD=16.59;SB=-259.34	GT:AD:DP:GL:GQ	0/1:16,28:43:-89.23,-12.96,-64.51:99
-chr1	1919737	rs7520124	C	A	233.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.52;MQ0=0;OQ=916.99;QD=20.84;SB=-414.85	GT:AD:DP:GL:GQ	0/1:15,29:44:-108.24,-13.26,-45.66:99
-chr1	1919954	rs7542825	G	A	154.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.01;MQ0=0;OQ=805.39;QD=15.79;SB=-224.54	GT:AD:DP:GL:GQ	0/1:26,25:50:-98.90,-15.08,-78.21:99
-chr1	1920251	rs6605079	C	G	333.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1146.24;QD=15.08;SB=-200.61	GT:AD:DP:GL:GQ	0/1:45,31:76:-140.81,-22.90,-188.17:99
-chr1	1920372	rs6605080	A	G	234.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=57.79;MQ0=0;OQ=682.29;QD=12.87;SB=-281.00	GT:AD:DP:GL:GQ	0/1:25,28:47:-85.67,-14.16,-99.05:99
-chr1	1920614	rs6605081	C	T	426.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=58.39;MQ0=0;OQ=1403.83;QD=17.12;SB=-667.29	GT:AD:DP:GL:GQ	0/1:39,43:80:-167.77,-24.10,-135.75:99
-chr1	1920665	rs6605082	G	C	238.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=58.49;MQ0=0;OQ=1324.95;QD=16.99;SB=-669.29	GT:AD:DP:GL:GQ	0/1:42,36:76:-158.70,-22.92,-158.25:99
-chr1	1920803	rs13303035	C	T	159	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=59.45;MQ0=0;OQ=1062.14;QD=13.98;SB=-530.37	GT:AD:DP:GL:GQ	0/1:41,35:73:-131.51,-22.01,-125.50:99
-chr1	1920841	rs13303352	T	C	445.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.82;MQ0=0;OQ=837.48;QD=11.63;SB=-306.06	GT:AD:DP:GL:GQ	0/1:38,34:70:-108.13,-21.10,-146.79:99
-chr1	1921055	rs13303031	G	T	88.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=58.92;MQ0=0;OQ=786.34;QD=15.12;SB=-342.30	GT:AD:DP:GL:GQ	0/1:26,26:52:-97.58,-15.66,-91.48:99
-chr1	1921356	rs6685055	A	G	17.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.97;MQ=59.49;MQ0=0;OQ=448.41;QD=9.96;SB=-237.28	GT:AD:DP:GL:GQ	0/1:26,19:44:-61.39,-13.26,-100.60:99
-chr1	1921389	rs6679335	T	G	83.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.67;MQ=59.13;MQ0=0;OQ=685.03;QD=12.93;SB=-353.06	GT:AD:DP:GL:GQ	0/1:29,24:52:-87.45,-15.66,-100.08:99
-chr1	1922327	rs28588769	G	A	183.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.89;MQ0=1;OQ=778.96;QD=15.58;SB=-259.18	GT:AD:DP:GL:GQ	0/1:25,25:47:-95.35,-14.17,-73.16:99
-chr1	1922868	rs2376808	G	A	157.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.34;MQ0=0;OQ=723.69;QD=10.34;SB=-347.08	GT:AD:DP:GL:GQ	0/1:45,25:64:-94.96,-19.30,-123.08:99
-chr1	1922895	rs2376807	G	A	266.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=58.98;MQ0=0;OQ=1217.48;QD=13.99;SB=-488.00	GT:AD:DP:GL:GQ	0/1:49,38:84:-150.33,-25.30,-168.79:99
-chr1	1923727	rs4434797	T	C	63.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.46;MQ0=0;OQ=1150.76;QD=28.77;SB=-542.44	GT:AD:DP:GL:GQ	1/1:1,39:35:-118.68,-10.55,-0.02:99
-chr1	1923976	rs2376806	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=7;HaplotypeScore=3.79;MQ=59.30;MQ0=0;OQ=886.58;QD=14.78;SB=-242.95	GT:AD:DP:GL:GQ	0/1:31,29:60:-110.01,-18.07,-107.98:99
-chr1	1924507	rs6682175	C	G	459.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1286.38;QD=16.93;SB=-654.00	GT:AD:DP:GL:GQ	0/1:39,37:74:-154.22,-22.30,-163.90:99
-chr1	1925440	.	A	C	17.47	PASS	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=54.31;MQ0=0;OQ=233.12;QD=9.71;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,12:20:-32.62,-6.03,-38.03:99
-chr1	1925994	rs13303219	G	A	173.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.24;MQ0=0;OQ=2130.07;QD=38.04;SB=-927.23	GT:AD:DP:GL:GQ	1/1:0,56:55:-216.61,-16.57,-0.02:99
-chr1	1927245	.	C	A	6.32	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=50.81;MQ0=0;OQ=1490.54;QD=26.15;SB=-627.15	GT:AD:DP:GL:GQ	0/1:11,46:54:-168.60,-16.27,-27.03:99
-chr1	1929194	.	G	A	93.04	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=54.76;MQ0=0;OQ=934.74;QD=16.40;SB=-478.51	GT:AD:DP:GL:GQ	0/1:29,28:56:-113.63,-16.87,-101.37:99
-chr1	1929934	.	G	A	0.59	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=6.95;MQ=58.36;MQ0=1;OQ=902.25;QD=19.20;SB=-435.95	GT:AD:DP:GL:GQ	0/1:20,27:46:-107.37,-13.86,-69.60:99
-chr1	1931518	rs6605072	C	T	176.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.65;MQ0=0;OQ=1960.94;QD=37.71;SB=-913.32	GT:AD:DP:GL:GQ	1/1:0,52:51:-199.70,-15.37,-0.02:99
-chr1	1931688	rs13303071	T	C	1556.10	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.24;MQ0=0;QD=27.79;SB=-792.66	GT:AD:DP:GL:GQ	1/1:0,56:50:-159.24,-15.08,-0.05:99
-chr1	1931693	.	A	G	1848.16	SnpCluster	AC=2;AF=1.00;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.03;MQ0=0;QD=33.60;SB=-934.96	GT:AD:DP:GL:GQ	1/1:0,55:53:-188.42,-15.97,-0.02:99
-chr1	1931694	.	T	A	1917.61	SnpCluster	AC=2;AF=1.00;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=49.24;MQ0=0;QD=35.51;SB=-952.61	GT:AD:DP:GL:GQ	1/1:0,54:52:-195.36,-15.66,-0.02:99
-chr1	1931789	rs6656398	G	A	540.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.77;MQ0=0;OQ=2040.90;QD=38.51;SB=-804.04	GT:AD:DP:GL:GQ	1/1:0,53:51:-207.69,-15.36,-0.01:99
-chr1	1931893	rs13303124	C	A	616.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.54;MQ0=0;OQ=2901.26;QD=36.72;SB=-1390.14	GT:AD:DP:GL:GQ	1/1:0,79:79:-293.73,-23.79,-0.02:99
-chr1	1933151	rs6672254	C	T	447.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1292.37;QD=33.14;SB=-431.53	GT:AD:DP:GL:GQ	1/1:0,39:34:-132.84,-10.25,-0.02:99
-chr1	1933961	rs6605073	C	G	112.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=54.93;MQ0=0;OQ=3433.93;QD=42.39;SB=-1558.19	GT:AD:DP:GL:GQ	1/1:0,81:81:-342.39,-24.42,-0.04:99
-chr1	1936451	rs13303016	G	A	86.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=58.88;MQ0=0;OQ=2221.58;QD=38.30;SB=-691.42	GT:AD:DP:GL:GQ	1/1:0,56:56:-225.76,-16.87,-0.02:99
-chr1	1936669	rs4648752	C	T	217.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=2508.96;QD=37.45;SB=-1210.99	GT:AD:DP:GL:GQ	1/1:0,67:64:-254.50,-19.28,-0.02:99
-chr1	1937615	rs2376804	C	A	568.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.26;MQ0=0;OQ=1581.66;QD=34.38;SB=-723.87	GT:AD:DP:GL:GQ	1/1:0,46:45:-161.77,-13.56,-0.02:99
-chr1	1938260	rs13303344	C	A	671.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1865.08;QD=33.91;SB=-728.87	GT:AD:DP:GL:GQ	1/1:0,55:54:-190.12,-16.27,-0.02:99
-chr1	1938665	rs4481796	T	C	1.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=7.00;MQ=59.19;MQ0=0;OQ=1999.82;QD=33.90;SB=-790.00	GT:AD:DP:GL:GQ	1/1:1,58:55:-203.58,-16.56,-0.01:99
-chr1	1939404	rs3121818	G	T	55.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.13;MQ=57.70;MQ0=0;OQ=2038.83;QD=32.88;SB=-977.56	GT:AD:DP:GL:GQ	1/1:1,61:60:-210.75,-18.07,-3.28:99
-chr1	1940481	rs28603108	G	A	85.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=244.10;QD=30.51;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:7:-27.99,-2.11,-0.00:21.07
-chr1	1941687	rs3121819	A	G	228.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2020.01;QD=32.58;SB=-994.40	GT:AD:DP:GL:GQ	1/1:0,62:62:-205.63,-18.69,-0.05:99
-chr1	1942465	rs28502222	T	C	371.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=1719.40;QD=30.16;SB=-855.54	GT:AD:DP:GL:GQ	1/1:0,57:54:-175.57,-16.29,-0.05:99
-chr1	1942470	rs28407473	T	C	563.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1937.81;QD=31.25;SB=-894.53	GT:AD:DP:GL:GQ	1/1:0,62:60:-197.41,-18.09,-0.05:99
-chr1	1942642	rs3128318	C	A	368.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1363.24;QD=34.95;SB=-493.39	GT:AD:DP:GL:GQ	1/1:0,39:38:-139.92,-11.45,-0.01:99
-chr1	1943112	rs3128321	T	C	309.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=865.40;QD=28.85;SB=-224.64	GT:AD:DP:GL:GQ	1/1:0,30:27:-90.14,-8.14,-0.02:81.21
-chr1	1943436	rs28595482	G	A	148.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.62;MQ0=0;OQ=1902.67;QD=38.83;SB=-885.18	GT:AD:DP:GL:GQ	1/1:0,49:48:-193.87,-14.46,-0.01:99
-chr1	1943672	rs4648614	C	T	198.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.32;MQ0=0;OQ=2028.99;QD=36.89;SB=-959.37	GT:AD:DP:GL:GQ	1/1:0,55:53:-206.51,-15.97,-0.03:99
-chr1	1944296	rs3128322	G	A	216.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.01;MQ0=0;OQ=2427.18;QD=36.78;SB=-1173.08	GT:AD:DP:GL:GQ	1/1:0,65:64:-246.33,-19.29,-0.03:99
-chr1	1944940	rs3128323	G	A	20.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=59.13;MQ0=0;OQ=1516.55;QD=28.61;SB=-577.76	GT:AD:DP:GL:GQ	1/1:0,53:41:-155.26,-12.36,-0.02:99
-chr1	1945844	rs2889475	C	T	626.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=2161.84;QD=35.44;SB=-988.03	GT:AD:DP:GL:GQ	1/1:0,61:56:-219.79,-16.87,-0.02:99
-chr1	1946222	rs2376805	G	A	202.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.86;MQ0=0;OQ=2273.19;QD=37.27;SB=-1064.36	GT:AD:DP:GL:GQ	1/1:0,61:58:-230.92,-17.47,-0.02:99
-chr1	1946897	rs2229110	T	C	11.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=58.29;MQ0=0;OQ=1169.00;QD=28.51;SB=-410.54	GT:AD:DP:GL:GQ	1/1:1,40:35:-120.50,-10.54,-0.02:99
-chr1	1947159	rs3820007	C	T	19.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=59.17;MQ0=0;OQ=557.21;QD=19.90;SB=-159.09	GT:AD:DP:GL:GQ	1/1:0,24:17:-62.02,-7.79,-2.71:50.81
-chr1	1949121	rs28574670	A	G	500.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1666.55;QD=35.46;SB=-850.35	GT:AD:DP:GL:GQ	1/1:0,47:47:-170.25,-14.16,-0.02:99
-chr1	1949838	rs28409373	C	T	14.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.07;MQ0=0;OQ=1034.54;QD=34.48;SB=-177.68	GT:AD:DP:GL:GQ	1/1:0,30:29:-107.06,-8.75,-0.02:87.26
-chr1	1950786	rs28581504	T	C	332.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.64;MQ0=0;OQ=1013.22;QD=32.68;SB=-423.78	GT:AD:DP:GL:GQ	1/1:0,31:30:-104.92,-9.04,-0.02:90.23
-chr1	1953035	rs13302932	A	G	11.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.55;MQ=60.00;MQ0=0;OQ=905.11;QD=24.46;SB=-434.83	GT:AD:DP:GL:GQ	1/1:0,37:30:-94.12,-9.05,-0.03:90.20
-chr1	1953275	rs17715203	A	G	438.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1126.75;QD=30.45;SB=-438.29	GT:AD:DP:GL:GQ	1/1:0,37:35:-116.28,-10.55,-0.02:99
-chr1	1955750	.	G	C	30.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=3;HaplotypeScore=5.70;MQ=42.68;MQ0=2;QD=0.27;SB=83.98	GT:AD:DP:GL:GQ	0/1:64,50:68:-26.83,-20.49,-269.17:63.39
-chr1	1955789	.	C	G	28.79	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=3.29;MQ=41.60;MQ0=2;QD=0.26;SB=62.45	GT:AD:DP:GL:GQ	0/1:60,50:64:-25.45,-19.29,-247.08:61.62
-chr1	1956476	rs3128311	A	G	7.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=2.79;MQ=58.13;MQ0=0;OQ=1189.30;QD=33.98;SB=-560.89	GT:AD:DP:GL:GQ	1/1:0,35:34:-122.53,-10.24,-0.01:99
-chr1	1956519	rs3128312	A	G	0.03	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=5;HaplotypeScore=2.16;MQ=57.85;MQ0=0;OQ=1010.92;QD=30.63;SB=-251.77	GT:AD:DP:GL:GQ	1/1:0,33:30:-104.69,-9.04,-0.02:90.25
-chr1	1956874	.	G	A	318.30	PASS	AC=2;AF=1.00;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1884.66;QD=38.46;SB=-687.34	GT:AD:DP:GL:GQ	1/1:0,49:48:-192.06,-14.46,-0.01:99
-chr1	1957814	rs2376803	C	T	3.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=59.46;MQ0=0;OQ=1636.24;QD=38.05;SB=-662.40	GT:AD:DP:GL:GQ	1/1:0,43:42:-167.22,-12.65,-0.01:99
-chr1	1958691	rs9442614	A	G	93.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.19;MQ0=0;OQ=1548.19;QD=27.16;SB=-690.61	GT:AD:DP:GL:GQ	1/1:0,57:50:-158.45,-15.08,-0.05:99
-chr1	1958819	rs13303086	G	A	42.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.38;MQ0=0;OQ=1355.91;QD=36.65;SB=-559.75	GT:AD:DP:GL:GQ	1/1:0,37:35:-139.19,-10.54,-0.01:99
-chr1	1961249	rs3121820	G	C	348.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.98;MQ0=0;OQ=1964.71;QD=40.10;SB=-703.68	GT:AD:DP:GL:GQ	1/1:0,49:48:-200.08,-14.47,-0.02:99
-chr1	1964088	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=20;HaplotypeScore=27.35;MQ=45.54;MQ0=0;OQ=216.77;QD=4.93;SB=-12.47	GT:AD:DP:GL:GQ	0/1:28,16:30:-34.00,-9.04,-73.59:99
-chr1	1966711	rs28394674	G	T	70.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=58.47;MQ0=0;OQ=2068.09;QD=33.90;SB=-496.39	GT:AD:DP:GL:GQ	1/1:0,60:58:-210.42,-17.47,-0.02:99
-chr1	1974087	rs3128319	C	T	215.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=59.66;MQ0=0;OQ=974.85;QD=17.72;SB=-353.37	GT:AD:DP:GL:GQ	0/1:25,30:52:-116.43,-15.67,-87.00:99
-chr1	1974552	rs3121826	A	G	92.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.67;MQ0=0;OQ=1020.08;QD=29.15;SB=-506.02	GT:AD:DP:GL:GQ	1/1:0,35:33:-105.63,-9.96,-0.04:99
-chr1	1974671	rs3121827	G	T	491.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.58;MQ0=0;OQ=1710.64;QD=34.91;SB=-820.86	GT:AD:DP:GL:GQ	1/1:0,49:48:-174.66,-14.46,-0.02:99
-chr1	1975030	rs35020387	G	A	113.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1769.06;QD=36.10;SB=-889.65	GT:AD:DP:GL:GQ	1/1:0,49:46:-180.51,-13.86,-0.02:99
-chr1	1982066	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=56.20;MQ0=0;OQ=60.60;QD=2.42;SB=35.14	GT:AD:DP:GL:GQ	0/1:18,7:19:-15.09,-5.75,-56.99:93.44
-chr1	1982837	rs17777295	G	T	2.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=4.79;MQ=57.88;MQ0=0;OQ=1411.52;QD=35.29;SB=-620.56	GT:AD:DP:GL:GQ	1/1:0,40:39:-144.75,-11.75,-0.01:99
-chr1	1987331	rs56136180	A	G	202.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=55.14;MQ0=0;OQ=1346.89;QD=15.85;SB=-685.93	GT:AD:DP:GL:GQ	0/1:38,47:81:-162.37,-24.40,-147.70:99
-chr1	1989540	rs28479788	G	A	186.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=58.66;MQ0=0;OQ=851.87;QD=16.38;SB=-358.89	GT:AD:DP:GL:GQ	0/1:25,27:48:-102.94,-14.47,-69.44:99
-chr1	1995600	rs2459986	T	C	313.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.14;MQ0=0;OQ=733.38;QD=27.16;SB=-310.12	GT:AD:DP:GL:GQ	1/1:0,27:25:-76.96,-7.55,-0.03:75.14
-chr1	1996588	rs2678943	T	C	52.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.08;MQ0=0;OQ=1052.54;QD=26.99;SB=-491.16	GT:AD:DP:GL:GQ	1/1:0,38:34:-108.87,-10.26,-0.03:99
-chr1	1997534	rs2803307	A	G	10.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.74;MQ=59.13;MQ0=0;OQ=1580.39;QD=29.82;SB=-788.60	GT:AD:DP:GL:GQ	1/1:0,53:50:-161.67,-15.08,-0.05:99
-chr1	1999411	.	C	T	1.67	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=5.65;MQ=58.95;MQ0=0;OQ=1145.66;QD=18.48;SB=-378.12	GT:AD:DP:GL:GQ	0/1:25,36:58:-135.32,-17.47,-87.50:99
-chr1	2004056	rs28436686	G	A	119.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.61;MQ0=0;OQ=2326.78;QD=39.44;SB=-1079.37	GT:AD:DP:GL:GQ	1/1:0,59:59:-236.28,-17.77,-0.01:99
-chr1	2014367	rs9729600	T	C	414.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=1723.74;QD=27.36;SB=-655.55	GT:AD:DP:GL:GQ	1/1:0,63:57:-176.03,-17.20,-0.07:99
-chr1	2015467	rs61775405	G	A	154	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=57.06;MQ0=0;OQ=444.57;QD=10.84;SB=-245.22	GT:AD:DP:GL:GQ	0/1:23,18:37:-58.92,-11.18,-62.94:99
-chr1	2015957	.	T	A	20.13	LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.77;MQ0=3;QD=0.75;SB=-6.99	GT:AD:DP:GL:GQ	0/1:17,10:5:-6.80,-1.51,-8.98:52.92
-chr1	2015991	.	G	T	43.95	LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=23.36;MQ0=2;QD=1.19;SB=-6.99	GT:AD:DP:GL:GQ	0/1:34,3:8:-10.09,-2.41,-13.96:76.78
-chr1	2017284	rs12123775	G	A	100.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=256.85;QD=11.17;SB=-34.51	GT:AD:DP:GL:GQ	0/1:14,9:22:-35.60,-6.63,-46.44:99
-chr1	2019252	rs3128329	T	C	18.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=58.39;MQ0=0;OQ=1634.16;QD=29.71;SB=-754.64	GT:AD:DP:GL:GQ	1/1:0,55:52:-167.05,-15.69,-0.05:99
-chr1	2019320	.	T	G	18.93	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=4;HaplotypeScore=7.98;MQ=58.04;MQ0=0;QD=0.34;SB=68.22	GT:AD:DP:GL:GQ	0/1:29,26:34:-15.41,-10.24,-102.90:51.71
-chr1	2019693	.	T	G	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=51.54;MQ0=0;OQ=164.91;QD=4.34;SB=47.17	GT:AD:DP:GL:GQ	0/1:19,19:29:-28.51,-8.74,-68.55:99
-chr1	2023899	rs7521371	A	G	276.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.14;MQ0=0;OQ=762.93;QD=15.26;SB=-284.46	GT:AD:DP:GL:GQ	0/1:23,27:49:-94.34,-14.76,-92.20:99
-chr1	2025239	rs10910029	A	G	201.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.60;MQ0=0;OQ=1376.71;QD=29.29;SB=-649.94	GT:AD:DP:GL:GQ	1/1:0,47:44:-141.29,-13.27,-0.04:99
-chr1	2025544	rs10910030	C	T	525.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1279.25;QD=36.55;SB=-479.12	GT:AD:DP:GL:GQ	1/1:0,35:34:-131.53,-10.25,-0.02:99
-chr1	2025659	rs10752741	G	A	653.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2163.55;QD=37.96;SB=-800.07	GT:AD:DP:GL:GQ	1/1:0,57:55:-219.96,-16.57,-0.02:99
-chr1	2025837	rs10752742	G	T	4.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=6.39;MQ=58.92;MQ0=0;OQ=1340.29;QD=31.17;SB=-640.07	GT:AD:DP:GL:GQ	1/1:0,43:38:-137.63,-11.45,-0.01:99
-chr1	2026123	rs10797413	G	A	219.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.78;MQ0=0;OQ=1381.00;QD=36.34;SB=-700.35	GT:AD:DP:GL:GQ	1/1:0,38:36:-141.70,-10.85,-0.01:99
-chr1	2026457	rs3128332	G	T	494.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1536.71;QD=35.74;SB=-400.25	GT:AD:DP:GL:GQ	1/1:0,43:42:-157.27,-12.65,-0.01:99
-chr1	2027806	.	A	G	242.28	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=33.01;MQ0=5;QD=9.69;SB=-135.79	GT:AD:DP:GL:GQ	0/1:9,16:13:-31.43,-3.92,-15.54:99
-chr1	2027817	.	A	G	86.37	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=28.31;MQ0=5;QD=5.08;SB=-66.32	GT:AD:DP:GL:GQ	0/1:7,10:8:-14.33,-2.41,-15.43:99
-chr1	2027825	rs7364595	T	C	235.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.06;MQ0=5;OQ=93.65;QD=7.80;SB=-40.95	GT:AD:DP:GL:GQ	1/1:0,12:4:-12.90,-1.21,-0.00:12.03
-chr1	2027884	.	A	G	40.99	LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=37.48;MQ0=2;QD=4.10;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,7:4:-8.59,-1.21,-3.37:21.64
-chr1	2027902	.	C	T	0.78	PASS	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=45.01;MQ0=2;OQ=55.77;QD=3.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,3:11:-12.18,-3.32,-23.75:88.60
-chr1	2027903	.	A	G	47.94	LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=45.01;MQ0=2;QD=3.00;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,4:11:-11.39,-3.31,-30.54:80.77
-chr1	2027922	rs61775410	A	G	254.38	Indel	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=52.34;MQ0=2;QD=12.11;SB=-40.68	GT:AD:DP:GL:GQ	0/1:8,13:15:-33.24,-4.52,-21.40:99
-chr1	2027961	rs12745429	G	A	0.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=51.66;MQ0=4;OQ=50.47;QD=1.58;SB=-46.03	GT:AD:DP:GL:GQ	0/1:27,5:21:-14.67,-6.34,-51.74:83.30
-chr1	2027962	rs12723086	T	C	0.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=51.66;MQ0=4;OQ=55.89;QD=1.75;SB=-41.82	GT:AD:DP:GL:GQ	0/1:25,7:25:-16.41,-7.54,-72.40:88.73
-chr1	2027980	.	A	G	0.42	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=49.52;MQ0=4;OQ=96.12;QD=2.75;SB=-41.28	GT:AD:DP:GL:GQ	0/1:27,8:28:-21.34,-8.45,-80.79:99
-chr1	2027991	.	A	G	34.81	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.55;MQ=51.01;MQ0=3;OQ=431.23;QD=9.58;SB=-194.62	GT:AD:DP:GL:GQ	0/1:24,21:36:-57.25,-10.85,-78.85:99
-chr1	2028038	rs7349084	A	G	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=50.77;MQ0=1;OQ=115.20;QD=1.99;SB=-64.54	GT:AD:DP:GL:GQ	0/1:47,10:48:-29.27,-14.47,-151.97:99
-chr1	2028049	rs12133181	A	G	36.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=65.95;MQ=50.10;MQ0=2;QD=0.48;SB=17.41	GT:AD:DP:GL:GQ	0/1:60,12:63:-25.92,-18.99,-218.94:69.39
-chr1	2028057	rs7514664	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=1;HaplotypeScore=92.07;MQ=50.08;MQ0=4;OQ=1734.98;QD=17.53;SB=-712.36	GT:AD:DP:GL:GQ	0/1:13,84:69:-197.59,-20.81,-27.48:66.63
-chr1	2028096	rs7349113	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=1;HaplotypeScore=338.66;MQ=50.60;MQ0=2;OQ=249.31;QD=1.73;SB=17.40	GT:AD:DP:GL:GQ	0/1:107,21:99:-60.23,-32.01,-282.27:99
-chr1	2028116	rs61775411	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=130;Dels=0.00;HRun=1;HaplotypeScore=156.17;MQ=50.22;MQ0=2;OQ=1368.71;QD=10.53;SB=-489.55	GT:AD:DP:GL:GQ	0/1:47,78:82:-164.90,-24.74,-105.56:99
-chr1	2028135	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=77.77;MQ=49.84;MQ0=2;OQ=170.97;QD=2.04;SB=-24.42	GT:AD:DP:GL:GQ	0/1:67,11:63:-39.37,-18.98,-181.92:99
-chr1	2028136	rs12080420	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=76.98;MQ=49.85;MQ0=2;OQ=157.43;QD=1.94;SB=-74.46	GT:AD:DP:GL:GQ	0/1:62,16:61:-37.41,-18.38,-198.10:99
-chr1	2028154	rs3753241	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=33.73;MQ=52.95;MQ0=1;OQ=379.95;QD=7.31;SB=-7.96	GT:AD:DP:GL:GQ	0/1:34,16:44:-54.55,-13.27,-93.77:99
-chr1	2028522	rs3128334	G	A	30.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=59.44;MQ0=0;OQ=1539.70;QD=37.55;SB=-534.21	GT:AD:DP:GL:GQ	1/1:0,39:39:-157.57,-11.75,-0.01:99
-chr1	2028753	rs908744	G	A	89.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.73;MQ=58.80;MQ0=0;OQ=1922.45;QD=33.15;SB=-549.87	GT:AD:DP:GL:GQ	1/1:0,58:52:-195.86,-15.68,-0.03:99
-chr1	2029096	rs1040231	G	T	78.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=58.48;MQ0=0;OQ=1527.94;QD=33.22;SB=-620.05	GT:AD:DP:GL:GQ	1/1:1,45:45:-156.40,-13.56,-0.02:99
-chr1	2029381	rs16824792	G	T	92.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.28;MQ0=0;OQ=1106.74;QD=34.59;SB=-441.64	GT:AD:DP:GL:GQ	1/1:0,32:31:-114.27,-9.34,-0.01:93.28
-chr1	2029579	rs1878752	G	A	107.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.58;MQ0=0;OQ=1364.65;QD=36.88;SB=-510.18	GT:AD:DP:GL:GQ	1/1:0,37:36:-140.06,-10.85,-0.01:99
-chr1	2029956	rs6666117	T	C	57.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=967.27;QD=27.64;SB=-467.25	GT:AD:DP:GL:GQ	1/1:0,35:31:-100.34,-9.35,-0.03:93.22
-chr1	2030248	rs6683011	G	A	365.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=938.15;QD=36.08;SB=-369.99	GT:AD:DP:GL:GQ	1/1:0,26:24:-97.41,-7.23,-0.01:72.24
-chr1	2030623	rs4648805	G	A	629.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=1690.17;QD=38.41;SB=-769.01	GT:AD:DP:GL:GQ	1/1:0,44:44:-172.62,-13.26,-0.02:99
-chr1	2030637	rs4648806	C	T	94.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=56.04;MQ0=0;OQ=1691.52;QD=35.24;SB=-723.01	GT:AD:DP:GL:GQ	1/1:0,48:44:-172.75,-13.26,-0.02:99
-chr1	2030645	rs6674878	A	G	54.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=55.66;MQ0=0;OQ=1170.82;QD=26.61;SB=-567.76	GT:AD:DP:GL:GQ	1/1:0,44:39:-120.72,-11.78,-0.06:99
-chr1	2030758	rs4648807	T	C	223.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=59.17;MQ0=0;OQ=1628.83;QD=29.09;SB=-733.30	GT:AD:DP:GL:GQ	1/1:0,56:52:-166.52,-15.69,-0.05:99
-chr1	2030796	rs4648808	T	C	215.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.65;MQ0=0;OQ=1868.75;QD=28.75;SB=-846.52	GT:AD:DP:GL:GQ	1/1:0,65:59:-190.51,-17.80,-0.05:99
-chr1	2031015	rs10910046	C	T	236.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.92;MQ0=0;OQ=619.66;QD=30.98;SB=-276.86	GT:AD:DP:GL:GQ	1/1:0,20:17:-65.56,-5.12,-0.01:51.16
-chr1	2031321	rs12059660	C	T	236.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.27;MQ0=0;OQ=1048.92;QD=38.85;SB=-437.08	GT:AD:DP:GL:GQ	1/1:0,27:27:-108.48,-8.13,-0.01:81.26
-chr1	2032403	rs11584491	A	G	58.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=59.38;MQ0=0;OQ=893.06;QD=29.77;SB=-424.80	GT:AD:DP:GL:GQ	1/1:0,30:30:-92.92,-9.05,-0.03:90.18
-chr1	2032854	rs3128336	C	G	73.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=59.29;MQ0=0;OQ=1394.69;QD=35.76;SB=-622.82	GT:AD:DP:GL:GQ	1/1:0,39:35:-143.08,-10.56,-0.03:99
-chr1	2033844	rs3107141	C	T	92.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=59.25;MQ0=0;OQ=2275.40;QD=36.70;SB=-1025.90	GT:AD:DP:GL:GQ	1/1:0,62:59:-231.15,-17.78,-0.02:99
-chr1	2033897	rs925905	T	C	149.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.07;MQ0=0;OQ=2152.92;QD=34.17;SB=-821.32	GT:AD:DP:GL:GQ	1/1:0,63:61:-218.90,-18.38,-0.02:99
-chr1	2033914	rs925906	A	C	279.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.02;HRun=0;HaplotypeScore=0.48;MQ=59.34;MQ0=0;OQ=1986.91;QD=33.12;SB=-865.63	GT:AD:DP:GL:GQ	1/1:0,59:59:-202.29,-17.47,-0.02:99
-chr1	2034402	rs3107142	T	C	2.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=862.83;QD=28.76;SB=-292.45	GT:AD:DP:GL:GQ	1/1:0,30:25:-89.88,-7.54,-0.02:75.20
-chr1	2035025	rs1467217	G	A	101.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=58.81;MQ0=0;OQ=1215.26;QD=31.16;SB=-472.57	GT:AD:DP:GL:GQ	1/1:2,37:32:-125.13,-9.65,-0.02:96.30
-chr1	2035232	rs3107143	G	C	1383.32	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=1.46;MQ=53.42;MQ0=0;QD=40.69;SB=-202.29	GT:AD:DP:GL:GQ	1/1:0,34:32:-141.93,-9.65,-0.01:96.32
-chr1	2035236	rs61775448	A	G	957.24	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=52.98;MQ0=0;QD=29.91;SB=-159.74	GT:AD:DP:GL:GQ	1/1:0,32:29:-99.32,-8.74,-0.01:87.24
-chr1	2035240	rs3107144	C	A	1108.98	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=53.21;MQ0=0;QD=33.61;SB=-288.09	GT:AD:DP:GL:GQ	1/1:0,33:31:-114.49,-9.34,-0.01:93.28
-chr1	2035742	rs3128337	A	G	495.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.14;MQ0=0;OQ=2084.14;QD=30.20;SB=-613.59	GT:AD:DP:GL:GQ	1/1:0,69:67:-212.07,-20.22,-0.07:99
-chr1	2036646	rs3128338	G	A	633.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2283.85;QD=36.84;SB=-1084.46	GT:AD:DP:GL:GQ	1/1:0,61:60:-232.00,-18.09,-0.03:99
-chr1	2036798	rs3128339	G	T	418.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.44;MQ0=0;OQ=1615.06;QD=33.65;SB=-604.54	GT:AD:DP:GL:GQ	1/1:0,48:46:-165.11,-13.86,-0.02:99
-chr1	2037356	rs3128340	C	G	20.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.21;MQ=59.34;MQ0=0;OQ=2469.41;QD=39.20;SB=-820.16	GT:AD:DP:GL:GQ	1/1:0,63:62:-250.56,-18.70,-0.04:99
-chr1	2037407	rs3107145	G	A	220.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.05;MQ0=0;OQ=2392.58;QD=37.38;SB=-1173.71	GT:AD:DP:GL:GQ	1/1:0,64:62:-242.87,-18.68,-0.02:99
-chr1	2037444	rs3107146	T	C	445.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=1708.25;QD=30.50;SB=-576.98	GT:AD:DP:GL:GQ	1/1:0,56:53:-174.45,-15.98,-0.04:99
-chr1	2038589	rs3107147	G	A	179.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.78;MQ0=0;OQ=3375.92;QD=40.19;SB=-1379.05	GT:AD:DP:GL:GQ	1/1:0,83:83:-336.59,-25.00,-0.02:99
-chr1	2039293	.	A	T	534.23	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=3;HaplotypeScore=26.93;MQ=46.16;MQ0=1;QD=5.40;SB=50.36	GT:AD:DP:GL:GQ	0/1:64,35:82:-81.41,-24.70,-228.25:99
-chr1	2039297	.	C	T	849.12	Indel	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=16;HaplotypeScore=37.86;MQ=45.71;MQ0=2;QD=8.01;SB=-44.28	GT:AD:DP:GL:GQ	0/1:72,34:90:-115.31,-27.11,-215.41:99
-chr1	2039368	rs3128290	G	T	199.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.68;MQ0=0;OQ=1893.89;QD=32.65;SB=-943.62	GT:AD:DP:GL:GQ	1/1:0,58:54:-193.00,-16.27,-0.02:99
-chr1	2039459	rs3107148	T	C	580.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1837.96;QD=36.04;SB=-792.00	GT:AD:DP:GL:GQ	1/1:0,51:51:-187.40,-15.36,-0.01:99
-chr1	2040055	rs3107149	A	T	0.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.05;MQ=47.19;MQ0=2;OQ=1180.60;QD=26.83;SB=-338.84	GT:AD:DP:GL:GQ	1/1:1,43:33:-121.66,-9.94,-0.01:99
-chr1	2040785	rs3107150	T	A	621.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=2606.94;QD=34.76;SB=-964.53	GT:AD:DP:GL:GQ	1/1:0,75:72:-264.30,-21.69,-0.03:99
-chr1	2041373	rs3107151	T	G	405.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=1384.90;QD=30.11;SB=-485.99	GT:AD:DP:GL:GQ	1/1:0,46:41:-142.10,-12.35,-0.02:99
-chr1	2042357	rs3107152	T	C	727.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2187.52;QD=34.72;SB=-1010.74	GT:AD:DP:GL:GQ	1/1:0,63:62:-222.36,-18.68,-0.02:99
-chr1	2042782	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.57;MQ=44.83;MQ0=0;OQ=64.06;QD=1.26;SB=2.03	GT:AD:DP:GL:GQ	0/1:44,7:48:-24.15,-14.46,-148.69:96.90
-chr1	2042814	.	C	G	7.67	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.26;MQ=39.19;MQ0=0;OQ=415.49;QD=7.69;SB=-85.80	GT:AD:DP:GL:GQ	0/1:38,16:51:-60.21,-15.38,-162.70:99
-chr1	2042818	.	A	G	548.88	SnpCluster	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=3.40;MQ=38.13;MQ0=0;QD=9.15;SB=-238.62	GT:AD:DP:GL:GQ	0/1:35,25:55:-74.74,-16.57,-136.02:99
-chr1	2042827	rs56946456	C	T	974.86	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=37.16;MQ0=0;QD=15.23;SB=-13.45	GT:AD:DP:GL:GQ	0/1:33,30:59:-118.54,-17.77,-108.89:99
-chr1	2042828	rs59510407	A	G	718.63	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.75;MQ=36.52;MQ0=0;QD=11.98;SB=-10.84	GT:AD:DP:GL:GQ	0/1:33,26:56:-92.01,-16.87,-122.40:99
-chr1	2042846	rs58866862	A	G	74.49	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=35.77;MQ0=0;QD=1.16;SB=32.14	GT:AD:DP:GL:GQ	0/1:43,21:44:-23.99,-13.25,-151.62:99
-chr1	2042857	rs61526019	C	T	19.11	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=37.11;MQ0=1;QD=0.30;SB=35.13	GT:AD:DP:GL:GQ	0/1:49,15:46:-19.05,-13.86,-151.53:51.90
-chr1	2042876	.	G	T	13.23	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=9.69;MQ=38.17;MQ0=2;QD=0.18;SB=41.11	GT:AD:DP:GL:GQ	0/1:58,9:53:-20.55,-15.96,-167.03:45.86
-chr1	2042878	.	T	C	0.10	PASS	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=11.69;MQ=38.38;MQ0=2;OQ=1187.23;QD=16.96;SB=-479.73	GT:AD:DP:GL:GQ	0/1:15,55:50:-137.09,-15.08,-24.25:91.67
-chr1	2042931	.	A	G	53.02	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=15.54;MQ=37.98;MQ0=2;QD=0.69;SB=20.09	GT:AD:DP:GL:GQ	0/1:67,10:63:-27.57,-18.98,-213.37:85.85
-chr1	2042932	.	C	T	144.76	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=10.55;MQ=37.98;MQ0=2;QD=1.88;SB=20.04	GT:AD:DP:GL:GQ	0/1:64,13:62:-36.47,-18.71,-162.72:99
-chr1	2042933	rs61775451	A	G	2056.36	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=7.24;MQ=37.41;MQ0=2;QD=27.79;SB=-304.45	GT:AD:DP:GL:GQ	1/1:0,74:61:-209.25,-18.38,-0.03:99
-chr1	2042939	rs61775452	A	G	1556.23	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=44.30;MQ=35.88;MQ0=3;QD=19.21;SB=-241.65	GT:AD:DP:GL:GQ	0/1:26,55:67:-179.09,-20.18,-61.01:99
-chr1	2042967	.	G	A	494.62	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=42.03;MQ=31.07;MQ0=2;QD=5.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:65,21:57:-69.92,-17.17,-132.17:99
-chr1	2042968	.	T	C	324.84	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=41.51;MQ=30.57;MQ0=2;QD=3.82;SB=-7.00	GT:AD:DP:GL:GQ	0/1:68,17:56:-52.65,-16.88,-157.62:99
-chr1	2042975	.	G	A	918.15	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=43.08;MQ=30.97;MQ0=1;QD=11.92;SB=-7.00	GT:AD:DP:GL:GQ	0/1:43,34:50:-110.16,-15.06,-77.95:99
-chr1	2042993	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=37.83;MQ=26.92;MQ0=1;OQ=262.34;QD=4.60;SB=-10.00	GT:AD:DP:GL:GQ	0/1:38,19:39:-41.26,-11.74,-103.99:99
-chr1	2043003	.	A	G	593.68	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=39;Dels=0.03;HRun=0;HaplotypeScore=30.47;MQ=26.18;MQ0=1;QD=15.22;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,22:23:-69.27,-6.63,-8.02:13.91
-chr1	2043004	.	C	T	763.57	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DP=36;Dels=0.06;HRun=0;HaplotypeScore=22.21;MQ=26.52;MQ0=1;QD=21.21;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,31:22:-82.94,-6.33,-3.00:33.26
-chr1	2043011	.	A	G	85.38	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=13.94;MQ=26.97;MQ0=0;QD=3.28;SB=-10.00	GT:AD:DP:GL:GQ	0/1:19,7:20:-17.84,-6.02,-61.94:99
-chr1	2043025	.	C	T	0.23	PASS	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=7.88;MQ=23.26;MQ0=0;OQ=89.13;QD=11.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,5:3:-12.40,-0.90,-0.00:9.03
-chr1	2043058	.	C	T	0.16	PASS	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=7.97;MQ=18.94;MQ0=5;OQ=124.33;QD=12.43;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,6:4:-15.97,-1.21,-0.00:12.04
-chr1	2043061	.	C	T	0.16	PASS	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=9.08;MQ=17.30;MQ0=6;OQ=117.32;QD=9.78;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,8:4:-15.27,-1.21,-0.00:12.04
-chr1	2043097	.	C	T	1.40	PASS	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=4.78;MQ=17.14;MQ0=7;OQ=117.84;QD=7.86;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,4:5:-16.57,-1.51,-3.10:15.90
-chr1	2043134	rs62641630	A	G	85.81	Indel	AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=34.82;MQ=24.20;MQ0=2;QD=5.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,7:9:-14.57,-2.71,-19.58:99
-chr1	2043141	.	T	G	143.26	Indel	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=21.33;MQ0=2;QD=11.94;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,9:5:-17.89,-1.51,-0.00:15.05
-chr1	2043178	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=18.82;MQ=19.76;MQ0=6;OQ=129.40;QD=2.70;SB=-10.00	GT:AD:DP:GL:GQ	0/1:34,14:15:-20.75,-4.53,-30.16:99
-chr1	2043181	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=18.51;MQ=19.26;MQ0=7;OQ=70.77;QD=1.31;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,12:15:-14.88,-4.52,-41.18:99
-chr1	2043199	.	T	C	326.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=71.39;MQ=18.51;MQ0=9;QD=3.23;SB=5.04	GT:AD:DP:GL:GQ	0/1:73,28:19:-41.66,-5.73,-27.12:99
-chr1	2043200	.	G	T	127.31	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=1;HaplotypeScore=109.06;MQ=18.45;MQ0=9;QD=1.24;SB=5.04	GT:AD:DP:GL:GQ	0/1:88,15:19:-21.74,-5.72,-47.36:99
-chr1	2043203	.	A	G	195.43	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=58.32;MQ=18.15;MQ0=10;QD=1.74;SB=5.04	GT:AD:DP:GL:GQ	0/1:95,17:20:-28.85,-6.02,-47.43:99
-chr1	2043227	rs61775455	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=139;Dels=0.00;HRun=1;HaplotypeScore=26.18;MQ=17.76;MQ0=15;OQ=512.67;QD=3.69;SB=-282.20	GT:AD:DP:GL:GQ	0/1:22,117:18:-59.98,-5.43,-16.39:99
-chr1	2043250	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=40.25;MQ=18.52;MQ0=5;OQ=52.10;QD=0.80;SB=5.03	GT:AD:DP:GL:GQ	0/1:47,18:9:-11.21,-2.71,-18.54:84.93
-chr1	2043253	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=69.74;MQ=17.96;MQ0=6;OQ=126.28;QD=2.18;SB=-31.52	GT:AD:DP:GL:GQ	0/1:37,20:7:-18.02,-2.11,-6.74:46.31
-chr1	2043286	.	C	T	29.35	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=15.82;MQ=16.30;MQ0=5;QD=1.47;SB=-39.54	GT:AD:DP:GL:GQ	0/1:10,10:4:-7.42,-1.21,-6.19:49.87
-chr1	2043289	.	C	T	29.39	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=12.80;MQ=15.14;MQ0=5;QD=1.73;SB=-36.53	GT:AD:DP:GL:GQ	0/1:8,8:3:-7.13,-0.91,-2.70:17.92
-chr1	2043333	.	T	G	28.03	LowQual	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=18.60;MQ0=2;QD=4.00;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:2:-6.21,-0.60,-0.00:6.01
-chr1	2043370	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=30.96;MQ=17.94;MQ0=3;OQ=266.78;QD=3.51;SB=-158.18	GT:AD:DP:GL:GQ	0/1:20,55:9:-32.59,-2.71,-3.10:3.86
-chr1	2043387	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=305.93;MQ=17.79;MQ0=4;OQ=61.76;QD=0.60;SB=5.03	GT:AD:DP:GL:GQ	0/1:70,33:9:-12.17,-2.71,-18.55:94.59
-chr1	2043399	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=80.07;MQ=17.30;MQ0=8;OQ=50.40;QD=0.46;SB=-41.37	GT:AD:DP:GL:GQ	0/1:77,30:6:-10.13,-1.81,-8.76:69.51
-chr1	2043410	.	G	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=62.95;MQ=16.84;MQ0=8;OQ=120.99;QD=1.22;SB=-42.66	GT:AD:DP:GL:GQ	1/1:14,85:4:-15.63,-1.21,-0.00:12.04
-chr1	2043421	.	C	T	40.51	LowQual	AC=1;AF=0.50;AN=2;DP=97;Dels=0.01;HRun=0;HaplotypeScore=78.29;MQ=16.56;MQ0=9;QD=0.42;SB=-7.00	GT:AD:DP:GL:GQ	0/1:75,21:3:-8.24,-0.90,-2.77:18.65
-chr1	2043428	.	G	A	73.75	Indel	AC=2;AF=1.00;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=65.46;MQ=16.72;MQ0=6;QD=0.88;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,68:3:-10.87,-0.91,-0.00:9.02
-chr1	2043438	.	G	A	70.80	Indel	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=64.65;MQ=17.33;MQ0=2;QD=1.00;SB=-10.00	GT:AD:DP:GL:GQ	0/1:44,27:4:-11.57,-1.20,-3.47:22.64
-chr1	2043560	.	G	C	29.95	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=54.01;MQ=17.20;MQ0=4;QD=0.86;SB=-10.00	GT:AD:DP:GL:GQ	0/1:29,6:4:-7.49,-1.21,-7.00:57.86
-chr1	2043565	.	C	T	49.25	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=47.09;MQ=17.14;MQ0=4;QD=1.37;SB=-10.00	GT:AD:DP:GL:GQ	1/1:19,17:2:-8.33,-0.60,-0.00:6.02
-chr1	2043572	.	G	A	46.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=33.86;MQ=16.62;MQ0=6;QD=1.18;SB=-10.00	GT:AD:DP:GL:GQ	1/1:22,17:2:-8.01,-0.60,-0.00:6.02
-chr1	2043583	.	C	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=32.32;MQ=16.61;MQ0=6;OQ=173.76;QD=4.57;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,22:5:-20.94,-1.51,-0.00:15.05
-chr1	2043590	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=28.82;MQ=16.31;MQ0=5;OQ=78.84;QD=2.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,18:4:-12.37,-1.20,-2.87:16.64
-chr1	2043797	.	C	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=30.70;MQ=15.39;MQ0=12;OQ=90.55;QD=2.66;SB=-10.00	GT:AD:DP:GL:GQ	1/1:10,21:4:-15.80,-4.21,-3.24:9.74
-chr1	2043818	.	T	C	79	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=39.74;MQ=12.98;MQ0=29;QD=1.39;SB=-10.00	GT:AD:DP:GL:GQ	1/1:42,15:3:-11.39,-0.90,-0.00:9.03
-chr1	2043819	.	G	T	74.28	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=66.63;MQ=12.86;MQ0=30;QD=1.28;SB=-10.00	GT:AD:DP:GL:GQ	1/1:43,15:3:-10.92,-0.90,-0.00:9.03
-chr1	2043822	.	G	A	85.78	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=66.31;MQ=12.73;MQ0=32;QD=1.41;SB=-10.00	GT:AD:DP:GL:GQ	1/1:35,26:3:-12.07,-0.90,-0.00:9.03
-chr1	2043840	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=53.86;MQ=13.17;MQ0=31;OQ=75.78;QD=1.28;SB=-3.99	GT:AD:DP:GL:GQ	0/1:33,26:5:-12.37,-1.51,-6.39:48.86
-chr1	2043865	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=29.69;MQ=17.30;MQ0=6;OQ=56.87;QD=2.19;SB=-30.92	GT:AD:DP:GL:GQ	0/1:19,7:4:-10.17,-1.21,-3.00:17.97
-chr1	2043873	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=65.88;MQ=20.81;MQ0=0;OQ=78.81;QD=5.63;SB=-7.00	GT:AD:DP:GL:GQ	0/1:7,7:4:-12.37,-1.21,-3.20:19.92
-chr1	2044254	.	A	G	32.28	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=14.52;MQ0=7;QD=1.90;SB=-10.00	GT:AD:DP:GL:GQ	1/1:8,9:2:-6.64,-0.60,-0.00:6.02
-chr1	2044261	.	G	T	34.69	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=14.97;MQ0=6;QD=2.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:8,8:2:-6.88,-0.60,-0.00:6.02
-chr1	2045053	.	A	G	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=1;HaplotypeScore=13.98;MQ=19.49;MQ0=2;OQ=141.20;QD=10.86;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,8:5:-17.68,-1.51,-0.00:15.04
-chr1	2045060	.	G	T	46.93	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=16.54;MQ=19.21;MQ0=2;QD=3.35;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,5:5:-9.49,-1.51,-6.61:50.97
-chr1	2045064	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=17.54;MQ=18.55;MQ0=3;OQ=51.75;QD=3.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,9:5:-9.97,-1.51,-6.44:49.32
-chr1	2045454	.	C	T	0.01	FDRtranche2.00to10.00	AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=19.88;MQ=20.43;MQ0=9;OQ=198.28;QD=7.34;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,20:6:-23.40,-1.81,-0.00:18.06
-chr1	2045469	.	C	T	0.06	PASS	AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=12.29;MQ=20.17;MQ0=11;OQ=284.41;QD=8.89;SB=-48.56	GT:AD:DP:GL:GQ	1/1:9,23:8:-32.02,-2.41,-0.00:24.08
-chr1	2045505	.	C	T	28.68	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=18.97;MQ=24.13;MQ0=5;QD=0.54;SB=11.04	GT:AD:DP:GL:GQ	0/1:44,9:20:-12.18,-6.03,-54.06:61.51
-chr1	2045518	.	C	G	738.24	SnpCluster	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=15.01;MQ=25.23;MQ0=2;QD=13.67;SB=-291.20	GT:AD:DP:GL:GQ	0/1:10,44:25:-84.64,-7.53,-25.69:99
-chr1	2045519	.	G	A	107.30	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=14.97;MQ=25.69;MQ0=2;QD=1.95;SB=11.06	GT:AD:DP:GL:GQ	0/1:46,9:22:-20.64,-6.63,-60.44:99
-chr1	2045523	rs61775456	C	T	1156.65	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=31.40;MQ=26.13;MQ0=1;QD=21.03;SB=-340.35	GT:AD:DP:GL:GQ	1/1:5,50:30:-119.26,-9.04,-0.01:90.29
-chr1	2045530	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=38.81;MQ=25.91;MQ0=2;OQ=314.66;QD=4.56;SB=14.05	GT:AD:DP:GL:GQ	0/1:30,39:21:-41.08,-6.33,-36.84:99
-chr1	2045541	rs61775457	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=85.67;MQ=25.28;MQ0=4;OQ=1042.79;QD=14.28;SB=-111.96	GT:AD:DP:GL:GQ	0/1:30,43:36:-118.41,-10.85,-17.33:64.79
-chr1	2045548	rs61775458	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=80.30;MQ=24.94;MQ0=7;OQ=952.67;QD=11.48;SB=11.05	GT:AD:DP:GL:GQ	0/1:35,48:39:-110.31,-11.76,-31.30:99
-chr1	2045552	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=3;HaplotypeScore=82.09;MQ=25.54;MQ0=10;OQ=109.35;QD=1.09;SB=14.08	GT:AD:DP:GL:GQ	0/1:83,17:53:-30.20,-15.98,-173.43:99
-chr1	2045562	rs61775459	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=44.83;MQ=25.87;MQ0=15;OQ=1085.84;QD=10.54;SB=-112.96	GT:AD:DP:GL:GQ	0/1:18,82:44:-125.15,-13.28,-24.49:99
-chr1	2045577	rs61776561	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=71.26;MQ=25.93;MQ0=17;OQ=471.38;QD=4.36;SB=-66.29	GT:AD:DP:GL:GQ	0/1:83,25:48:-64.89,-14.47,-100.62:99
-chr1	2045590	rs61776562	C	G	1122.80	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=71.62;MQ=27.29;MQ0=12;QD=12.62;SB=-466.47	GT:AD:DP:GL:GQ	0/1:38,51:51:-130.94,-15.38,-82.60:99
-chr1	2045591	.	G	A	91.87	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=67.28;MQ=27.29;MQ0=12;QD=1.03;SB=20.08	GT:AD:DP:GL:GQ	0/1:68,21:39:-24.23,-11.76,-108.70:99
-chr1	2045595	rs61776563	C	T	1533.88	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=45.58;MQ=27.30;MQ0=11;QD=17.43;SB=-260.54	GT:AD:DP:GL:GQ	1/1:9,79:49:-170.95,-14.77,-14.14:6.27
-chr1	2045606	.	A	G	34.51	DPFilter;HARD_TO_VALIDATE;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=3;HaplotypeScore=43.22;MQ=27.00;MQ0=12;QD=0.42;SB=23.11	GT:AD:DP:GL:GQ	0/1:76,7:41:-19.11,-12.37,-129.33:67.35
-chr1	2045616	.	T	C	78.88	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=250.84;MQ=27.16;MQ0=10;QD=1.21;SB=21.87	GT:AD:DP:GL:GQ	0/1:53,10:39:-22.94,-11.77,-110.81:99
-chr1	2045620	rs61776564	G	A	378.54	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=91.32;MQ=25.99;MQ0=10;QD=7.14;SB=2.03	GT:AD:DP:GL:GQ	0/1:31,22:26:-48.98,-7.84,-44.75:99
-chr1	2045631	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=20.68;MQ=23.69;MQ0=10;OQ=345.67;QD=8.43;SB=-190.29	GT:AD:DP:GL:GQ	0/1:16,25:18:-43.28,-5.43,-21.54:99
-chr1	2045638	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=35.28;MQ=23.82;MQ0=10;OQ=167.44;QD=4.29;SB=-58.06	GT:AD:DP:GL:GQ	0/1:24,15:14:-24.25,-4.23,-24.00:99
-chr1	2045652	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=49.08;MQ=21.77;MQ0=9;OQ=173.85;QD=5.43;SB=-84.31	GT:AD:DP:GL:GQ	0/1:13,19:7:-22.76,-2.11,-3.10:9.89
-chr1	2045656	.	G	A	40.26	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=55.88;MQ=22.32;MQ0=8;QD=1.34;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,14:3:-8.21,-0.90,-3.07:21.65
-chr1	2045667	.	C	T	56.78	SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=27.04;MQ=25.03;MQ0=2;QD=2.18;SB=-3.99	GT:AD:DP:GL:GQ	0/1:9,17:7:-11.07,-2.11,-11.53:89.62
-chr1	2045670	.	C	T	22.25	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=24.25;MQ=25.19;MQ0=1;QD=0.93;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,19:3:-6.41,-0.91,-3.37:24.66
-chr1	2045674	.	G	A	38.46	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=35.09;MQ=29.74;MQ0=1;QD=1.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,15:4:-8.34,-1.21,-6.59:53.87
-chr1	2045688	rs61776565	C	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=37.51;MQ=32.86;MQ0=0;OQ=472.91;QD=12.78;SB=-219.35	GT:AD:DP:GL:GQ	1/1:8,29:13:-50.88,-3.92,-0.00:39.13
-chr1	2045716	rs11589827	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=37.92;MQ=32.79;MQ0=0;OQ=1051.52;QD=19.47;SB=-363.54	GT:AD:DP:GL:GQ	0/1:22,32:36:-119.28,-10.85,-21.22:99
-chr1	2045975	rs56260599	A	G	8.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.17;MQ=48.30;MQ0=0;OQ=1370.04;QD=29.78;SB=-550.86	GT:AD:DP:GL:GQ	1/1:0,45:39:-140.61,-11.75,-0.02:99
-chr1	2047610	rs3107154	A	C	149.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.43;MQ0=0;OQ=1416.93;QD=32.20;SB=-509.01	GT:AD:DP:GL:GQ	1/1:0,44:41:-145.30,-12.35,-0.02:99
-chr1	2047883	rs3128291	A	G	544.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1311.92;QD=28.52;SB=-584.18	GT:AD:DP:GL:GQ	1/1:0,46:44:-134.83,-13.28,-0.06:99
-chr1	2050384	rs3107155	T	C	5.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=59.45;MQ0=0;OQ=1167.72;QD=27.80;SB=-528.96	GT:AD:DP:GL:GQ	1/1:0,42:38:-120.40,-11.47,-0.04:99
-chr1	2050490	rs3107156	T	C	249.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=2021.38;QD=30.17;SB=-957.45	GT:AD:DP:GL:GQ	1/1:0,67:63:-205.77,-19.00,-0.05:99
-chr1	2050592	rs10797427	C	T	209.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=2020.11;QD=36.73;SB=-999.03	GT:AD:DP:GL:GQ	1/1:0,54:53:-205.62,-15.97,-0.03:99
-chr1	2051236	rs6603815	T	C	200	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.85;MQ0=0;OQ=2560.21;QD=35.07;SB=-874.04	GT:AD:DP:GL:GQ	1/1:0,73:73:-259.63,-21.99,-0.03:99
-chr1	2051829	rs3107157	T	C	631.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.47;MQ0=0;OQ=1661.55;QD=30.21;SB=-807.71	GT:AD:DP:GL:GQ	1/1:0,55:52:-169.78,-15.68,-0.04:99
-chr1	2053024	rs2222217	G	A	330.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=1814.00;QD=39.43;SB=-879.02	GT:AD:DP:GL:GQ	1/1:0,46:46:-185.00,-13.86,-0.01:99
-chr1	2055199	rs3128293	A	G	0.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=4;HaplotypeScore=2.50;MQ=57.87;MQ0=0;OQ=714.48;QD=32.48;SB=-354.81	GT:AD:DP:GL:GQ	1/1:0,22:21:-75.04,-6.33,-0.01:63.18
-chr1	2055203	rs3128294	G	C	31.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=59.11;MQ0=0;OQ=958.73;QD=36.87;SB=-480.55	GT:AD:DP:GL:GQ	1/1:0,26:24:-99.47,-7.24,-0.01:72.23
-chr1	2056850	rs55958603	C	T	1.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=3.45;MQ=57.77;MQ0=0;OQ=633.04;QD=15.07;SB=-129.09	GT:AD:DP:GL:GQ	0/1:21,21:38:-78.03,-11.45,-68.95:99
-chr1	2058340	rs3128295	C	T	135.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=57.98;MQ0=0;OQ=1478.85;QD=33.61;SB=-754.65	GT:AD:DP:GL:GQ	1/1:0,43:39:-151.49,-11.75,-0.02:99
-chr1	2058766	rs3128296	G	T	62.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=59.52;MQ0=0;OQ=1387.47;QD=35.58;SB=-366.86	GT:AD:DP:GL:GQ	1/1:0,39:38:-142.34,-11.45,-0.01:99
-chr1	2060181	rs411021	T	C	39.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.62;MQ0=0;OQ=1893.37;QD=29.58;SB=-877.01	GT:AD:DP:GL:GQ	1/1:0,64:60:-192.98,-18.10,-0.06:99
-chr1	2061200	rs424079	C	A	282.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.70;MQ0=0;OQ=2061.38;QD=33.25;SB=-816.15	GT:AD:DP:GL:GQ	1/1:2,60:59:-209.75,-17.78,-0.03:99
-chr1	2061416	rs436045	A	G	341.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1852.88;QD=31.95;SB=-463.52	GT:AD:DP:GL:GQ	1/1:0,58:55:-188.90,-16.57,-0.02:99
-chr1	2061625	rs364677	A	G	92.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=57.88;MQ0=0;OQ=1754.29;QD=33.10;SB=-829.10	GT:AD:DP:GL:GQ	1/1:0,53:50:-179.03,-15.06,-0.02:99
-chr1	2062860	rs2945573	A	G	10.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=53.50;MQ0=0;OQ=1269.78;QD=34.32;SB=-473.51	GT:AD:DP:GL:GQ	1/1:0,37:36:-130.57,-10.84,-0.01:99
-chr1	2063413	rs643076	A	G	32.55	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=23.27;MQ0=4;QD=3.26;SB=-41.68	GT:AD:DP:GL:GQ	1/1:0,9:2:-6.66,-0.60,-0.00:6.02
-chr1	2063477	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=1;HaplotypeScore=9.72;MQ=34.90;MQ0=16;OQ=82.45;QD=1.04;SB=5.04	GT:AD:DP:GL:GQ	0/1:72,7:47:-25.69,-14.16,-141.31:99
-chr1	2063706	rs56038539	T	C	3.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=41.37;MQ0=1;OQ=139.38;QD=19.91;SB=-78.92	GT:AD:DP:GL:GQ	1/1:0,7:5:-17.50,-1.51,-0.00:15.04
-chr1	2068664	.	C	T	1.14	PASS	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=1;HaplotypeScore=4.59;MQ=58.77;MQ0=0;OQ=1604.59;QD=18.44;SB=-789.85	GT:AD:DP:GL:GQ	0/1:40,47:84:-189.05,-25.30,-139.35:99
-chr1	2076421	rs2459983	A	G	9.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.88;MQ=57.31;MQ0=0;OQ=556.13;QD=9.43;SB=-262.92	GT:AD:DP:GL:GQ	0/1:36,23:54:-75.17,-16.28,-123.64:99
-chr1	2080370	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=7.10;MQ=51.87;MQ0=1;OQ=83.25;QD=1.63;SB=68.25	GT:AD:DP:GL:GQ	0/1:34,17:35:-22.19,-10.58,-111.66:99
-chr1	2084392	rs12132341	G	A	174.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.31;MQ0=0;OQ=863.52;QD=15.99;SB=-268.13	GT:AD:DP:GL:GQ	0/1:26,28:52:-105.30,-15.67,-88.61:99
-chr1	2089742	rs12137653	G	A	181.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=58.90;MQ0=0;OQ=1123.18;QD=19.04;SB=-544.82	GT:AD:DP:GL:GQ	0/1:23,36:56:-132.48,-16.88,-70.24:99
-chr1	2096700	rs12135175	T	C	69.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=484.58;QD=34.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,14:14:-52.05,-4.22,-0.00:42.13
-chr1	2096756	rs12135178	T	C	1.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=63.69;QD=21.23;SB=-45.69	GT:AD:DP:GL:GQ	1/1:0,3:3:-9.86,-0.91,-0.00:9.02
-chr1	2097150	.	G	T	29.88	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=4.60;MQ=59.01;MQ0=0;QD=1.57;SB=20.09	GT:AD:DP:GL:GQ	0/1:12,7:13:-10.19,-3.92,-36.97:62.71
-chr1	2103132	.	T	G	33.73	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=13.23;MQ=58.26;MQ0=0;QD=0.50;SB=77.26	GT:AD:DP:GL:GQ	0/1:40,27:45:-20.22,-13.56,-132.60:66.56
-chr1	2103519	.	T	G	34.88	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=24.16;MQ=56.69;MQ0=0;QD=0.66;SB=65.20	GT:AD:DP:GL:GQ	0/1:32,21:34:-17.01,-10.24,-99.26:67.71
-chr1	2110321	rs12145923	A	C	0.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=12.44;MQ=52.00;MQ0=0;OQ=558.55;QD=9.01;SB=-276.83	GT:AD:DP:GL:GQ	0/1:36,25:56:-76.01,-16.87,-110.27:99
-chr1	2119788	.	T	C	18.51	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=3;HaplotypeScore=2.86;MQ=58.76;MQ0=0;QD=0.33;SB=56.21	GT:AD:DP:GL:GQ	0/1:41,15:42:-17.79,-12.66,-139.27:51.28
-chr1	2129255	.	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=12.54;MQ=53.09;MQ0=0;OQ=134.48;QD=3.96;SB=-44.78	GT:AD:DP:GL:GQ	0/1:28,6:25:-24.27,-7.54,-83.09:99
-chr1	2130727	.	C	A	3.24	PASS	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=883.89;QD=21.05;SB=-232.51	GT:AD:DP:GL:GQ	0/1:13,29:42:-104.32,-12.65,-47.37:99
-chr1	2133967	rs2503715	A	G	158.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=295.10;QD=12.30;SB=-168.37	GT:AD:DP:GL:GQ	0/1:13,11:24:-40.02,-7.23,-52.87:99
-chr1	2146787	.	G	T	26.55	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=20;HaplotypeScore=12.86;MQ=49.19;MQ0=1;QD=0.48;SB=62.22	GT:AD:DP:GL:GQ	0/1:43,12:38:-17.39,-11.45,-117.88:59.38
-chr1	2157661	.	T	G	18.80	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=2;HaplotypeScore=22.82;MQ=58.47;MQ0=0;QD=0.32;SB=110.33	GT:AD:DP:GL:GQ	0/1:45,13:50:-20.22,-15.06,-154.85:51.58
-chr1	2158219	.	G	A	102.84	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=58.11;MQ0=0;OQ=732.58;QD=15.59;SB=-362.51	GT:AD:DP:GL:GQ	0/1:23,24:45:-90.10,-13.56,-76.34:99
-chr1	2159397	.	G	A	168.87	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=557.34;QD=13.59;SB=-169.24	GT:AD:DP:GL:GQ	0/1:23,18:39:-70.77,-11.75,-72.68:99
-chr1	2162698	rs55996607	T	A	417.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=618.41;QD=12.13;SB=-230.72	GT:AD:DP:GL:GQ	0/1:28,23:50:-80.19,-15.06,-104.77:99
-chr1	2164572	rs263525	T	C	240.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=58.19;MQ0=0;OQ=1470.94;QD=30.02;SB=-709.84	GT:AD:DP:GL:GQ	1/1:0,49:48:-150.72,-14.48,-0.04:99
-chr1	2166877	rs4648817	C	T	227.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=42.45;MQ0=0;OQ=888.81;QD=15.06;SB=-258.26	GT:AD:DP:GL:GQ	0/1:29,28:53:-108.14,-15.97,-85.30:99
-chr1	2167087	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=78;Dels=0.03;HRun=20;HaplotypeScore=33.19;MQ=45.08;MQ0=3;OQ=60.74;QD=0.78;SB=86.28	GT:AD:DP:GL:GQ	0/1:57,18:48:-23.51,-14.16,-146.86:93.57
-chr1	2172859	rs55827021	G	A	215.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=60.00;MQ0=0;OQ=711.82;QD=15.47;SB=-343.87	GT:AD:DP:GL:GQ	0/1:21,25:42:-87.13,-12.66,-66.29:99
-chr1	2181828	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=5;HaplotypeScore=57.83;MQ=51.68;MQ0=2;OQ=160.28;QD=2.32;SB=74.25	GT:AD:DP:GL:GQ	0/1:46,21:51:-34.38,-15.07,-143.28:99
-chr1	2181834	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=20;HaplotypeScore=10.75;MQ=49.92;MQ0=3;OQ=651.07;QD=8.57;SB=86.24	GT:AD:DP:GL:GQ	0/1:47,28:67:-88.59,-20.20,-142.58:99
-chr1	2190201	rs4648625	G	T	81.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=59.03;MQ0=0;OQ=1500.00;QD=34.88;SB=-738.07	GT:AD:DP:GL:GQ	1/1:0,43:43:-153.60,-12.95,-0.02:99
-chr1	2194650	rs4648819	G	A	133.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=743.48;QD=16.52;SB=-314.80	GT:AD:DP:GL:GQ	0/1:22,23:44:-90.89,-13.26,-76.95:99
-chr1	2200056	rs55778641	A	C	21.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.74;MQ=60.00;MQ0=0;OQ=608.53;QD=12.95;SB=-87.63	GT:AD:DP:GL:GQ	0/1:21,26:44:-77.39,-13.25,-77.32:99
-chr1	2201955	.	C	T	11.73	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=16.61;MQ=30.48;MQ0=8;QD=0.49;SB=-3.98	GT:AD:DP:GL:GQ	0/1:18,6:8:-6.84,-2.41,-19.02:44.27
-chr1	2202003	.	A	G	11.74	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=1;HaplotypeScore=7.13;MQ=18.21;MQ0=12;QD=0.30;SB=-3.98	GT:AD:DP:GL:GQ	0/1:31,8:9:-7.14,-2.71,-26.71:44.28
-chr1	2202019	.	C	A	24.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=18.13;MQ0=6;QD=1.05;SB=-6.99	GT:AD:DP:GL:GQ	0/1:15,8:6:-7.50,-1.81,-11.06:56.87
-chr1	2202047	.	A	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=10.59;MQ=18.96;MQ0=8;OQ=148.17;QD=5.93;SB=-3.98	GT:AD:DP:GL:GQ	0/1:17,8:9:-20.81,-2.71,-12.59:98.81
-chr1	2202060	.	C	T	1.87	PASS	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=16.70;MQ0=15;OQ=178.09;QD=5.94;SB=-4.00	GT:AD:DP:GL:GQ	0/1:17,12:9:-23.81,-2.71,-8.44:57.22
-chr1	2202081	.	C	T	18.49	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.03;HRun=0;HaplotypeScore=43.99;MQ=16.84;MQ0=21;QD=0.47;SB=-6.99	GT:AD:DP:GL:GQ	0/1:31,7:8:-7.54,-2.41,-18.75:51.27
-chr1	2202085	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=40;Dels=0.03;HRun=0;HaplotypeScore=35.15;MQ=14.59;MQ0=24;OQ=74.01;QD=1.85;SB=-48.55	GT:AD:DP:GL:GQ	0/1:30,9:6:-12.50,-1.81,-8.79:69.79
-chr1	2202103	.	C	T	23.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=12.67;MQ=15.94;MQ0=20;QD=0.57;SB=-6.99	GT:AD:DP:GL:GQ	0/1:31,9:7:-7.74,-2.11,-15.15:56.28
-chr1	2202167	.	C	A	13.22	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=11.12;MQ=8.91;MQ0=36;QD=0.22;SB=-10.00	GT:AD:DP:GL:GQ	0/1:51,9:4:-5.79,-1.21,-5.41:41.98
-chr1	2202296	.	C	A	18.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=9.91;MQ=10.32;MQ0=37;QD=0.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:36,13:6:-6.98,-1.81,-13.53:51.72
-chr1	2202348	.	A	G	10.17	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=23.55;MQ=13.35;MQ0=40;QD=0.15;SB=-25.65	GT:AD:DP:GL:GQ	0/1:57,8:7:-6.37,-2.11,-18.82:42.57
-chr1	2202364	.	C	T	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=20.33;MQ0=13;OQ=62.56;QD=1.49;SB=-32.09	GT:AD:DP:GL:GQ	0/1:34,6:7:-15.23,-5.69,-14.13:84.42
-chr1	2202391	.	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=5.05;MQ=22.23;MQ0=9;OQ=175.98;QD=4.09;SB=-54.84	GT:AD:DP:GL:GQ	0/1:26,17:18:-26.30,-5.42,-41.13:99
-chr1	2202434	.	A	G	21.78	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=15.47;MQ=13.87;MQ0=17;QD=0.81;SB=-34.93	GT:AD:DP:GL:GQ	0/1:19,8:5:-6.97,-1.51,-11.89:54.59
-chr1	2202602	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=59.56;MQ=10.62;MQ0=43;OQ=145.43;QD=2.24;SB=-6.99	GT:AD:DP:GL:GQ	0/1:30,35:7:-19.94,-2.11,-6.77:46.57
-chr1	2202632	.	G	T	82.62	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=11.21;MQ0=49;QD=1.18;SB=-10.00	GT:AD:DP:GL:GQ	0/1:61,9:9:-14.26,-2.71,-18.59:99
-chr1	2202667	.	A	C	16.33	DPFilter;HARD_TO_VALIDATE;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=25.34;MQ=10.07;MQ0=49;QD=0.22;SB=8.05	GT:AD:DP:GL:GQ	0/1:64,9:8:-7.32,-2.41,-22.67:49.06
-chr1	2202682	.	G	A	36.23	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=78.01;MQ=9.70;MQ0=44;QD=0.48;SB=-3.98	GT:AD:DP:GL:GQ	0/1:63,12:4:-8.11,-1.20,-7.39:61.88
-chr1	2202686	.	G	A	35.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=79.87;MQ=9.88;MQ0=42;QD=0.50;SB=-3.99	GT:AD:DP:GL:GQ	0/1:59,12:4:-8.01,-1.21,-5.99:47.86
-chr1	2202707	.	C	T	38.48	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=10.09;MQ=9.21;MQ0=26;QD=0.82;SB=-10.00	GT:AD:DP:GL:GQ	0/1:44,3:4:-8.34,-1.21,-5.59:43.85
-chr1	2202728	.	T	C	26.83	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=9.84;MQ=8.94;MQ0=16;QD=1.07;SB=-10.00	GT:AD:DP:GL:GQ	1/1:12,12:2:-6.09,-0.60,-0.00:6.01
-chr1	2202823	.	G	A	38.25	LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=5.28;MQ=19.51;MQ0=2;QD=3.82;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,8:3:-8.01,-0.90,-3.57:26.65
-chr1	2203054	.	A	C	12.92	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=9.60;MQ0=26;QD=0.31;SB=-27.98	GT:AD:DP:GL:GQ	0/1:36,6:4:-5.76,-1.21,-6.84:45.53
-chr1	2203334	.	C	T	27.36	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=7.10;MQ=12.34;MQ0=21;QD=0.94;SB=-37.65	GT:AD:DP:GL:GQ	0/1:21,8:4:-7.23,-1.21,-5.77:45.59
-chr1	2203377	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=20.17;MQ=13.03;MQ0=22;OQ=140.31;QD=3.79;SB=-42.53	GT:AD:DP:GL:GQ	0/1:23,14:7:-19.42,-2.11,-7.14:50.30
-chr1	2203636	.	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=18.31;MQ0=12;OQ=75.25;QD=2.03;SB=-3.99	GT:AD:DP:GL:GQ	0/1:28,9:19:-16.53,-5.73,-47.88:99
-chr1	2203679	rs2643914	C	T	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=6.14;MQ=18.30;MQ0=12;OQ=93.96;QD=1.92;SB=-63.48	GT:AD:DP:GL:GQ	0/1:36,12:24:-19.91,-7.23,-64.90:99
-chr1	2203718	rs2645079	T	C	32.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.98;MQ0=8;OQ=123.75;QD=3.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,20:15:-20.18,-4.52,-29.86:99
-chr1	2203765	rs12117574	T	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=5.02;MQ=32.99;MQ0=11;OQ=133.28;QD=2.18;SB=-88.55	GT:AD:DP:GL:GQ	0/1:50,11:38:-28.07,-11.46,-111.19:99
-chr1	2204009	.	C	G	47.74	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=47.05;MQ0=0;OQ=366.61;QD=8.94;SB=-120.51	GT:AD:DP:GL:GQ	0/1:27,14:39:-51.71,-11.77,-108.96:99
-chr1	2206228	rs4648821	T	G	261.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.19;MQ0=0;OQ=657.01;QD=12.63;SB=-349.05	GT:AD:DP:GL:GQ	0/1:29,23:51:-84.34,-15.36,-102.93:99
-chr1	2206251	rs6689315	A	G	495.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=794.59;QD=13.94;SB=-403.30	GT:AD:DP:GL:GQ	0/1:29,28:56:-99.61,-16.87,-113.15:99
-chr1	2206925	rs61759158	G	A	51.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=54.01;MQ0=0;OQ=371.96;QD=12.40;SB=-7.00	GT:AD:DP:GL:GQ	0/1:17,13:28:-48.92,-8.45,-48.51:99
-chr1	2207673	.	G	C	46.34	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=3;HaplotypeScore=11.90;MQ=55.68;MQ0=0;QD=1.03;SB=71.27	GT:AD:DP:GL:GQ	0/1:33,12:36:-18.77,-10.85,-141.59:79.18
-chr1	2207894	.	C	T	62.11	PASS	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=60.00;MQ0=0;OQ=1408.04;QD=16.96;SB=-562.41	GT:AD:DP:GL:GQ	0/1:38,45:79:-167.91,-23.82,-117.96:99
-chr1	2208688	rs10910049	G	T	213.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=47.61;MQ0=2;OQ=399.96;QD=8.89;SB=-196.49	GT:AD:DP:GL:GQ	0/1:28,17:40:-55.33,-12.05,-79.33:99
-chr1	2208825	rs6691983	C	T	81.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=52.03;MQ0=1;OQ=657.40;QD=17.30;SB=-233.73	GT:AD:DP:GL:GQ	0/1:18,20:35:-79.57,-10.55,-49.20:99
-chr1	2208828	rs6682474	G	A	54.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=53.40;MQ0=1;OQ=696.36;QD=18.33;SB=-278.18	GT:AD:DP:GL:GQ	0/1:17,21:37:-84.07,-11.15,-57.35:99
-chr1	2209299	rs56051051	T	G	55.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=58.49;MQ0=0;OQ=442.31;QD=9.41;SB=-244.75	GT:AD:DP:GL:GQ	0/1:22,25:42:-60.17,-12.66,-79.16:99
-chr1	2209740	rs17372827	A	C	232.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=877.78;QD=13.10;SB=-279.93	GT:AD:DP:GL:GQ	0/1:36,31:66:-110.94,-19.88,-129.70:99
-chr1	2209930	rs4648823	T	A	295.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.11;MQ0=0;OQ=697.00;QD=13.40;SB=-278.32	GT:AD:DP:GL:GQ	0/1:27,24:50:-88.05,-15.06,-97.62:99
-chr1	2210285	rs2643884	T	C	4	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.32;MQ=58.60;MQ0=0;OQ=1465.33;QD=29.31;SB=-698.59	GT:AD:DP:GL:GQ	1/1:0,50:47:-150.17,-14.18,-0.05:99
-chr1	2210377	rs1039065	A	C	393.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=1107.46;QD=29.14;SB=-383.86	GT:AD:DP:GL:GQ	1/1:0,38:36:-114.37,-10.85,-0.04:99
-chr1	2210509	rs2017143	C	T	306.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.15;MQ0=0;OQ=1280.02;QD=38.79;SB=-395.53	GT:AD:DP:GL:GQ	1/1:0,33:33:-131.60,-9.94,-0.01:99
-chr1	2211082	rs2643885	A	C	289.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1017.95;QD=35.10;SB=-113.02	GT:AD:DP:GL:GQ	1/1:0,29:29:-105.39,-8.74,-0.01:87.26
-chr1	2211133	rs2843166	C	A	247.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.20;MQ0=0;OQ=767.67;QD=31.99;SB=-111.83	GT:AD:DP:GL:GQ	1/1:0,24:23:-80.36,-6.93,-0.01:69.19
-chr1	2211394	rs903924	A	G	577.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1710.61;QD=33.54;SB=-819.09	GT:AD:DP:GL:GQ	1/1:0,51:49:-174.66,-14.76,-0.02:99
-chr1	2211494	rs903923	G	C	2.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=5.22;MQ=56.20;MQ0=0;OQ=1828.69;QD=36.57;SB=-846.47	GT:AD:DP:GL:GQ	1/1:0,50:45:-186.48,-13.57,-0.02:99
-chr1	2211496	rs903922	A	T	57.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.95;MQ=56.42;MQ0=0;OQ=1691.54;QD=31.92;SB=-801.63	GT:AD:DP:GL:GQ	1/1:0,53:49:-172.77,-14.77,-0.03:99
-chr1	2211936	rs903921	G	A	86.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=57.20;MQ0=0;OQ=1373.97;QD=32.71;SB=-609.72	GT:AD:DP:GL:GQ	1/1:1,40:39:-143.60,-11.76,-2.62:91.42
-chr1	2212420	rs903920	A	G	98.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.39;MQ0=0;OQ=1274.47;QD=33.54;SB=-555.35	GT:AD:DP:GL:GQ	1/1:0,38:37:-131.05,-11.15,-0.02:99
-chr1	2212443	rs903919	T	C	439.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=897.63;QD=27.20;SB=-373.47	GT:AD:DP:GL:GQ	1/1:0,33:30:-93.38,-9.05,-0.03:90.19
-chr1	2212983	rs2172900	T	C	377	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1306.72;QD=32.67;SB=-161.75	GT:AD:DP:GL:GQ	1/1:0,40:40:-134.28,-12.05,-0.02:99
-chr1	2213118	rs2132303	T	C	18.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.55;MQ0=0;OQ=1347.55;QD=32.08;SB=-116.87	GT:AD:DP:GL:GQ	1/1:0,41:39:-138.35,-11.75,-0.01:99
-chr1	2214142	rs903617	A	G	32.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=58.97;MQ0=0;OQ=1261.61;QD=28.04;SB=-567.89	GT:AD:DP:GL:GQ	1/1:0,45:41:-129.80,-12.38,-0.05:99
-chr1	2214469	rs2643886	T	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=5;HaplotypeScore=4.66;MQ=57.70;MQ0=0;OQ=1258.31;QD=26.77;SB=-451.03	GT:AD:DP:GL:GQ	1/1:1,46:38:-129.44,-11.45,-0.02:99
-chr1	2214505	rs2645091	A	G	160.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.58;MQ0=0;OQ=1430.84;QD=31.11;SB=-424.25	GT:AD:DP:GL:GQ	1/1:0,46:44:-146.70,-13.26,-0.03:99
-chr1	2214736	rs10910050	A	C	929.01	Indel	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=9;HaplotypeScore=4.06;MQ=59.20;MQ0=0;QD=27.32;SB=-435.82	GT:AD:DP:GL:GQ	1/1:1,33:28:-96.50,-8.43,-0.01:84.23
-chr1	2215144	rs1532385	G	A	183.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.56;MQ0=0;OQ=1969.69;QD=37.88;SB=-987.83	GT:AD:DP:GL:GQ	1/1:1,51:50:-200.57,-15.06,-0.01:99
-chr1	2216193	rs903918	T	A	121.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=60.00;MQ0=0;OQ=1515.17;QD=34.44;SB=-696.39	GT:AD:DP:GL:GQ	1/1:0,44:41:-155.11,-12.35,-0.01:99
-chr1	2216414	.	T	G	45.79	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=10.58;MQ=58.61;MQ0=0;QD=0.68;SB=86.26	GT:AD:DP:GL:GQ	0/1:37,30:42:-20.52,-12.66,-118.85:78.63
-chr1	2217282	rs2843163	C	T	190.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=57.17;MQ0=0;OQ=844.33;QD=16.89;SB=-357.35	GT:AD:DP:GL:GQ	0/1:22,28:45:-101.28,-13.56,-64.72:99
-chr1	2217535	rs56117572	A	C	228.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=59.71;MQ0=0;OQ=819.93;QD=12.61;SB=-293.99	GT:AD:DP:GL:GQ	0/1:33,32:61:-103.65,-18.38,-105.35:99
-chr1	2219307	rs2643888	A	G	69.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=2.64;MQ=59.39;MQ0=0;OQ=1301.49;QD=34.25;SB=-624.24	GT:AD:DP:GL:GQ	1/1:0,38:38:-133.76,-11.45,-0.02:99
-chr1	2219413	rs2843161	C	T	101.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1668.32;QD=37.92;SB=-845.15	GT:AD:DP:GL:GQ	1/1:0,44:43:-170.43,-12.96,-0.01:99
-chr1	2219777	.	C	T	48.76	PASS	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.44;MQ=59.45;MQ0=0;OQ=599.56;QD=14.28;SB=-283.32	GT:AD:DP:GL:GQ	0/1:19,21:37:-74.40,-11.16,-63.66:99
-chr1	2220425	rs56341331	C	G	57.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=59.52;MQ0=0;OQ=468.59;QD=12.02;SB=-132.55	GT:AD:DP:GL:GQ	0/1:23,16:35:-60.70,-10.56,-79.04:99
-chr1	2221427	rs1809823	G	T	87.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.54;MQ0=0;OQ=673.61;QD=16.43;SB=-228.53	GT:AD:DP:GL:GQ	0/1:18,23:40:-82.70,-12.05,-57.34:99
-chr1	2221826	rs55710545	G	C	290.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.48;MQ0=0;OQ=503.65;QD=11.45;SB=-276.95	GT:AD:DP:GL:GQ	0/1:26,18:42:-66.31,-12.67,-107.95:99
-chr1	2223172	rs903618	A	G	139.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1447.93;QD=30.17;SB=-664.81	GT:AD:DP:GL:GQ	1/1:0,48:47:-148.43,-14.18,-0.05:99
-chr1	2224111	rs1496555	A	G	103.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=57.88;MQ0=0;OQ=1360.32;QD=32.39;SB=-504.48	GT:AD:DP:GL:GQ	1/1:0,42:39:-139.63,-11.75,-0.01:99
-chr1	2224763	rs2256178	C	T	433.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=665.60;QD=16.23;SB=-342.52	GT:AD:DP:GL:GQ	0/1:20,21:41:-82.21,-12.37,-61.19:99
-chr1	2225516	rs11577387	G	A	98.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.87;MQ0=0;OQ=626.11;QD=16.92;SB=-209.93	GT:AD:DP:GL:GQ	0/1:17,20:32:-75.54,-9.65,-40.72:99
-chr1	2226199	rs4648825	T	C	63.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=59.17;MQ0=0;OQ=999.95;QD=17.24;SB=-492.13	GT:AD:DP:GL:GQ	0/1:22,36:55:-119.85,-16.57,-85.50:99
-chr1	2226557	rs2643904	A	G	112.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=59.50;MQ0=0;OQ=1489.85;QD=32.39;SB=-771.11	GT:AD:DP:GL:GQ	1/1:0,46:44:-152.59,-13.26,-0.02:99
-chr1	2226618	rs2843158	G	C	77.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1399.75;QD=34.99;SB=-297.26	GT:AD:DP:GL:GQ	1/1:0,40:37:-143.60,-11.18,-0.04:99
-chr1	2227108	rs11580302	A	G	15.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=58.99;MQ0=0;OQ=1313.96;QD=28.56;SB=-483.14	GT:AD:DP:GL:GQ	1/1:0,46:42:-135.02,-12.67,-0.04:99
-chr1	2228420	.	T	C	34.45	PASS	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.20;MQ0=0;OQ=345.13;QD=11.90;SB=-158.70	GT:AD:DP:GL:GQ	0/1:16,13:29:-46.53,-8.74,-63.45:99
-chr1	2229866	rs2173049	T	C	234.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.01;MQ0=0;OQ=1791.17;QD=29.36;SB=-845.65	GT:AD:DP:GL:GQ	1/1:0,60:57:-182.75,-17.19,-0.05:99
-chr1	2230243	rs2843157	C	T	3.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=5.43;MQ=58.16;MQ0=0;OQ=293.03;QD=7.71;SB=-52.03	GT:AD:DP:GL:GQ	0/1:21,15:25:-40.13,-7.54,-43.56:99
-chr1	2233378	rs2843156	C	T	2.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.97;MQ0=0;OQ=1676.83;QD=39.00;SB=-476.64	GT:AD:DP:GL:GQ	1/1:0,43:42:-171.28,-12.65,-0.01:99
-chr1	2234765	rs2843154	C	T	245.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.42;MQ0=0;OQ=364.59;QD=11.39;SB=-94.60	GT:AD:DP:GL:GQ	0/1:19,13:29:-48.48,-8.74,-59.24:99
-chr1	2235081	rs2843153	C	T	158.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.00;MQ0=0;OQ=1550.87;QD=36.93;SB=-657.38	GT:AD:DP:GL:GQ	1/1:0,42:40:-158.69,-12.05,-0.01:99
-chr1	2235299	rs2643902	T	C	83.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=58.80;MQ0=0;OQ=1694.87;QD=26.90;SB=-805.69	GT:AD:DP:GL:GQ	1/1:0,63:54:-173.12,-16.28,-0.05:99
-chr1	2235430	rs2843152	C	G	36.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=1353.71;QD=36.59;SB=-455.86	GT:AD:DP:GL:GQ	1/1:0,37:35:-138.99,-10.57,-0.03:99
-chr1	2235493	rs2843151	C	T	341.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1519.57;QD=37.99;SB=-552.74	GT:AD:DP:GL:GQ	1/1:0,40:39:-155.55,-11.75,-0.01:99
-chr1	2237259	rs2643903	T	C	68.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.78;MQ0=0;OQ=1099.17;QD=28.93;SB=-371.38	GT:AD:DP:GL:GQ	1/1:0,38:35:-113.53,-10.55,-0.03:99
-chr1	2237347	rs2645076	A	G	8.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=892.74;QD=27.90;SB=-347.40	GT:AD:DP:GL:GQ	1/1:0,32:29:-92.89,-8.75,-0.03:87.17
-chr1	2237604	rs2843150	G	C	105.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=929.83;QD=32.06;SB=-483.10	GT:AD:DP:GL:GQ	1/1:0,29:23:-96.58,-6.93,-0.01:69.23
-chr1	2237845	rs2643905	T	C	349.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1229.58;QD=32.36;SB=-467.52	GT:AD:DP:GL:GQ	1/1:0,38:37:-126.56,-11.15,-0.02:99
-chr1	2238243	rs60565777	G	T	1452.57	Indel	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.48;MQ0=0;QD=34.58;SB=-671.66	GT:AD:DP:GL:GQ	1/1:0,42:42:-148.86,-12.66,-0.02:99
-chr1	2238484	rs12035836	A	C	189.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.53;MQ0=0;OQ=471.85;QD=11.80;SB=-205.81	GT:AD:DP:GL:GQ	0/1:20,20:36:-61.31,-10.85,-64.85:99
-chr1	2239096	rs2645077	G	A	27.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=1.28;MQ=59.32;MQ0=0;OQ=1136.46;QD=33.43;SB=-382.99	GT:AD:DP:GL:GQ	1/1:0,33:31:-117.25,-9.35,-0.02:93.28
-chr1	2241682	.	G	A	17.89	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=57.94;MQ0=0;OQ=417.19;QD=12.27;SB=-164.16	GT:AD:DP:GL:GQ	0/1:17,17:31:-54.36,-9.35,-49.53:99
-chr1	2243754	rs56393204	G	A	58.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.84;MQ0=0;OQ=282.27;QD=14.11;SB=-81.31	GT:AD:DP:GL:GQ	0/1:7,11:14:-35.73,-4.22,-15.87:99
-chr1	2244770	rs2645075	T	C	149.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.02;MQ0=0;OQ=1276.49;QD=27.75;SB=-655.75	GT:AD:DP:GL:GQ	1/1:0,46:42:-131.28,-12.68,-0.05:99
-chr1	2245871	rs2645074	A	G	281.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.11;MQ0=0;OQ=516.48;QD=10.99;SB=-220.38	GT:AD:DP:GL:GQ	0/1:24,23:43:-67.90,-12.97,-87.14:99
-chr1	2246105	rs2843148	A	T	522.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.70;MQ0=0;OQ=1342.05;QD=33.55;SB=-593.22	GT:AD:DP:GL:GQ	1/1:0,40:36:-137.80,-10.84,-0.01:99
-chr1	2246150	.	C	T	22.21	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=51.90;MQ0=0;OQ=477.24;QD=15.39;SB=-219.23	GT:AD:DP:GL:GQ	0/1:15,16:26:-58.85,-7.84,-34.36:99
-chr1	2246331	.	T	A	1.20	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=56.18;MQ0=0;OQ=642.82;QD=20.09;SB=-121.93	GT:AD:DP:GL:GQ	0/1:11,21:32:-77.21,-9.64,-40.89:99
-chr1	2246422	.	C	T	17.03	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=2;HaplotypeScore=46.69;MQ=32.60;MQ0=2;QD=0.46;SB=17.08	GT:AD:DP:GL:GQ	0/1:33,4:25:-12.51,-7.53,-79.77:49.78
-chr1	2246424	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=54.85;MQ=32.43;MQ0=2;OQ=173.30;QD=4.56;SB=-18.60	GT:AD:DP:GL:GQ	0/1:26,12:25:-28.15,-7.53,-68.25:99
-chr1	2246439	rs9725291	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=64.95;MQ=33.89;MQ0=1;OQ=86.92;QD=2.12;SB=-39.19	GT:AD:DP:GL:GQ	0/1:33,8:25:-19.51,-7.53,-71.60:99
-chr1	2246445	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=48.09;MQ=35.48;MQ0=0;OQ=216.97;QD=4.82;SB=-10.56	GT:AD:DP:GL:GQ	0/1:34,11:29:-33.72,-8.74,-70.74:99
-chr1	2246456	.	C	T	34.43	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=27.71;MQ=37.83;MQ0=0;QD=0.69;SB=1.58	GT:AD:DP:GL:GQ	0/1:43,7:33:-16.67,-9.94,-103.65:67.27
-chr1	2246469	.	T	C	28.75	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=49;Dels=0.02;HRun=2;HaplotypeScore=77.34;MQ=40.72;MQ0=0;QD=0.59;SB=44.16	GT:AD:DP:GL:GQ	0/1:38,10:28:-14.30,-8.14,-89.44:61.58
-chr1	2246471	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=72.35;MQ=42.43;MQ0=0;OQ=76.08;QD=1.58;SB=-6.17	GT:AD:DP:GL:GQ	0/1:36,12:29:-19.64,-8.74,-87.84:99
-chr1	2246484	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=51.65;MQ=47.04;MQ0=0;OQ=81.71;QD=2.15;SB=50.19	GT:AD:DP:GL:GQ	0/1:29,8:26:-19.29,-7.83,-83.08:99
-chr1	2246793	.	G	A	5.64	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.91;MQ=55.18;MQ0=1;OQ=1074.55;QD=18.53;SB=-560.61	GT:AD:DP:GL:GQ	0/1:23,35:54:-127.01,-16.27,-81.39:99
-chr1	2247067	rs35006635	C	A	47.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.81;MQ0=0;OQ=1074.59;QD=21.07;SB=-429.40	GT:AD:DP:GL:GQ	1/1:0,28:51:-197.40,-96.91,-86.36:99
-chr1	2247213	rs12566205	C	T	241.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=57.90;MQ0=0;OQ=759.24;QD=13.09;SB=-368.12	GT:AD:DP:GL:GQ	0/1:33,25:57:-96.39,-17.18,-106.07:99
-chr1	2247351	rs2643892	C	T	241.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=665.97;QD=19.59;SB=-340.91	GT:AD:DP:GL:GQ	0/1:14,20:33:-79.82,-9.94,-42.88:99
-chr1	2247555	rs10910051	G	A	197.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=4.80;MQ=58.86;MQ0=0;OQ=1049.52;QD=16.15;SB=-447.98	GT:AD:DP:GL:GQ	0/1:31,34:61:-126.63,-18.39,-90.57:99
-chr1	2247587	rs2643893	C	T	300.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.44;MQ0=0;OQ=2112.94;QD=35.22;SB=-1052.32	GT:AD:DP:GL:GQ	1/1:0,60:56:-214.91,-16.88,-0.03:99
-chr1	2247723	rs2645092	C	T	700.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=2085.22;QD=38.62;SB=-998.04	GT:AD:DP:GL:GQ	1/1:0,54:53:-212.12,-15.97,-0.01:99
-chr1	2247791	rs2645093	G	A	189.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=60.00;MQ0=0;OQ=700.42;QD=15.92;SB=-289.76	GT:AD:DP:GL:GQ	0/1:22,22:42:-85.99,-12.66,-67.45:99
-chr1	2248183	rs2643894	C	T	135.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=57.95;MQ0=0;OQ=1940.09;QD=35.27;SB=-797.32	GT:AD:DP:GL:GQ	1/1:0,55:52:-197.62,-15.67,-0.03:99
-chr1	2248333	rs2643895	G	A	408.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2697.00;QD=39.09;SB=-1222.14	GT:AD:DP:GL:GQ	1/1:0,69:68:-273.30,-20.48,-0.02:99
-chr1	2248552	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.80;MQ=51.38;MQ0=0;OQ=50.72;QD=0.83;SB=23.47	GT:AD:DP:GL:GQ	0/1:53,7:56:-28.20,-19.84,-214.64:83.56
-chr1	2248554	.	G	A	35.21	LowQual	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=3;HaplotypeScore=5.80;MQ=51.10;MQ0=0;QD=0.57;SB=-8.06	GT:AD:DP:GL:GQ	0/1:56,6:58:-24.27,-17.47,-188.51:68.04
-chr1	2248658	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=56.92;MQ0=0;OQ=60.63;QD=0.88;SB=6.91	GT:AD:DP:GL:GQ	0/1:61,8:68:-29.84,-20.49,-240.21:93.47
-chr1	2249886	.	C	T	54.96	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=60.00;MQ0=0;OQ=750.55;QD=14.72;SB=-348.88	GT:AD:DP:GL:GQ	0/1:25,26:44:-91.61,-13.27,-61.40:99
-chr1	2249910	rs2645063	G	A	24.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=5.82;MQ=59.50;MQ0=0;OQ=758.18;QD=16.48;SB=-336.52	GT:AD:DP:GL:GQ	0/1:22,24:45:-92.67,-13.57,-67.35:99
-chr1	2250405	rs2645064	G	A	151.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.71;MQ0=0;OQ=569.60;QD=15.82;SB=-242.53	GT:AD:DP:GL:GQ	0/1:16,20:34:-70.49,-10.25,-54.37:99
-chr1	2251037	rs35273536	C	T	60.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.05;MQ=58.82;MQ0=0;OQ=1072.47;QD=18.18;SB=-334.93	GT:AD:DP:GL:GQ	0/1:24,34:52:-128.89,-18.36,-63.36:99
-chr1	2253264	.	T	C	16.56	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=51.77;MQ0=0;QD=2.76;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,2:6:-6.74,-1.81,-16.62:49.30
-chr1	2253282	.	C	G	16.92	PASS	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=51.16;MQ0=0;OQ=118.58;QD=9.88;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,6:11:-18.46,-3.32,-24.69:99
-chr1	2253362	rs12752072	T	C	172.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=253.44;QD=12.07;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,11:21:-34.96,-6.33,-38.76:99
-chr1	2254886	rs2645066	G	A	78.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=5.62;MQ=59.17;MQ0=0;OQ=893.72;QD=15.96;SB=-436.47	GT:AD:DP:GL:GQ	0/1:25,31:52:-108.33,-15.67,-85.72:99
-chr1	2255036	rs2645067	T	C	87.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.60;MQ0=0;OQ=995.78;QD=33.19;SB=-523.42	GT:AD:DP:GL:GQ	1/1:0,30:29:-103.17,-8.74,-0.01:87.25
-chr1	2255079	rs2643898	C	T	28.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=59.03;MQ0=0;OQ=590.58;QD=13.73;SB=-262.25	GT:AD:DP:GL:GQ	0/1:23,20:42:-75.01,-12.66,-72.41:99
-chr1	2255654	rs7546567	G	A	132.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.73;MQ0=0;OQ=454.68;QD=13.78;SB=-126.36	GT:AD:DP:GL:GQ	0/1:16,16:32:-61.47,-12.72,-52.76:99
-chr1	2255829	rs2843146	T	G	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=441.34;QD=27.58;SB=-113.02	GT:AD:DP:GL:GQ	1/1:0,16:14:-47.73,-4.22,-0.01:42.10
-chr1	2255938	rs2643899	T	C	18.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=58.69;MQ0=0;OQ=756.05;QD=23.63;SB=-323.76	GT:AD:DP:GL:GQ	1/1:0,32:26:-79.22,-7.85,-0.03:78.14
-chr1	2256793	rs903905	C	T	99.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.29;MQ0=0;OQ=354.28;QD=16.10;SB=-192.21	GT:AD:DP:GL:GQ	0/1:10,12:21:-45.05,-6.33,-27.84:99
-chr1	2258430	rs12091632	A	G	318.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=1030.69;QD=30.31;SB=-507.55	GT:AD:DP:GL:GQ	1/1:0,34:33:-106.69,-9.95,-0.03:99
-chr1	2258440	rs12085675	G	A	96.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.39;MQ0=0;OQ=1318.84;QD=34.71;SB=-520.68	GT:AD:DP:GL:GQ	1/1:0,37:35:-135.49,-10.55,-0.02:99
-chr1	2258510	rs28394874	C	G	5.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=4.06;MQ=57.77;MQ0=0;OQ=783.94;QD=18.67;SB=-330.90	GT:AD:DP:GL:GQ	0/1:17,25:36:-92.55,-10.88,-48.65:99
-chr1	2258528	rs35986070	A	G	102.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.27;MQ0=0;OQ=457.65;QD=16.95;SB=-106.83	GT:AD:DP:GL:GQ	0/1:11,16:27:-57.18,-8.13,-41.35:99
-chr1	2258538	rs2645069	T	C	177.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.13;MQ0=0;OQ=677.36;QD=27.09;SB=-198.05	GT:AD:DP:GL:GQ	1/1:0,25:23:-71.35,-6.94,-0.03:69.14
-chr1	2258598	rs2645070	A	G	16.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=322.02;QD=18.94;SB=-156.34	GT:AD:DP:GL:GQ	0/1:4,13:17:-40.61,-5.13,-15.36:99
-chr1	2258651	rs2843145	A	G	4.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=2.01;MQ=59.14;MQ0=0;OQ=426.64;QD=15.80;SB=-196.02	GT:AD:DP:GL:GQ	0/1:8,19:23:-52.88,-6.93,-31.12:99
-chr1	2258910	.	A	G	4.11	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.17;MQ=58.13;MQ0=0;OQ=457.98;QD=13.09;SB=-246.31	GT:AD:DP:GL:GQ	0/1:17,18:33:-59.02,-9.94,-70.06:99
-chr1	2259759	rs2036085	T	C	103.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=626.01;QD=14.56;SB=-172.51	GT:AD:DP:GL:GQ	0/1:16,27:40:-77.94,-12.06,-63.91:99
-chr1	2259869	rs12734736	C	T	347.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=60.00;MQ0=0;OQ=965.34;QD=16.64;SB=-492.13	GT:AD:DP:GL:GQ	0/1:29,29:54:-116.09,-16.28,-80.58:99
-chr1	2259958	rs2843142	A	G	263.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=59.76;MQ0=0;OQ=1095.49;QD=13.87;SB=-502.48	GT:AD:DP:GL:GQ	0/1:40,39:78:-136.33,-23.50,-157.46:99
-chr1	2261724	rs2843141	C	T	591.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1956.29;QD=36.91;SB=-863.62	GT:AD:DP:GL:GQ	1/1:0,53:52:-199.24,-15.68,-0.03:99
-chr1	2262086	rs1472318	C	T	44.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=57.36;MQ0=0;OQ=484.27;QD=19.37;SB=-215.23	GT:AD:DP:GL:GQ	0/1:8,16:22:-58.34,-6.63,-21.67:99
-chr1	2262763	rs2843139	A	G	28.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=58.77;MQ0=0;OQ=1612.91;QD=30.43;SB=-829.43	GT:AD:DP:GL:GQ	1/1:0,53:52:-164.94,-15.69,-0.06:99
-chr1	2262883	.	G	A	16	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=49.61;MQ0=5;QD=0.44;SB=-17.46	GT:AD:DP:GL:GQ	0/1:28,8:25:-12.42,-7.54,-69.64:48.73
-chr1	2263004	rs12730050	A	G	0.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=14.25;MQ=55.46;MQ0=1;OQ=1032.60;QD=11.35;SB=-477.87	GT:AD:DP:GL:GQ	0/1:51,40:84:-131.86,-25.32,-172.18:99
-chr1	2263146	rs2843138	T	C	3.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.02;HRun=0;HaplotypeScore=5.34;MQ=54.41;MQ0=0;OQ=1335.96;QD=29.04;SB=-625.83	GT:AD:DP:GL:GQ	1/1:0,44:44:-137.23,-12.97,-0.04:99
-chr1	2263291	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=4;HaplotypeScore=15.31;MQ=57.02;MQ0=0;OQ=65.39;QD=1.72;SB=65.25	GT:AD:DP:GL:GQ	0/1:31,7:33:-19.78,-9.96,-120.76:98.22
-chr1	2263292	.	A	G	14.86	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=57.52;MQ0=0;QD=0.41;SB=62.21	GT:AD:DP:GL:GQ	0/1:29,6:31:-14.10,-9.35,-99.44:47.55
-chr1	2263765	rs1472319	T	C	33.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.68;MQ=59.72;MQ0=0;OQ=1846.27;QD=27.56;SB=-842.46	GT:AD:DP:GL:GQ	1/1:0,67:60:-188.28,-18.10,-0.07:99
-chr1	2264170	rs12735747	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=4;HaplotypeScore=15.88;MQ=53.27;MQ0=1;OQ=600.98;QD=16.24;SB=-322.72	GT:AD:DP:GL:GQ	0/1:17,20:33:-73.32,-9.94,-46.93:99
-chr1	2264171	rs12740557	T	A	0.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=15.88;MQ=53.27;MQ0=1;OQ=596.15;QD=16.11;SB=-294.37	GT:AD:DP:GL:GQ	0/1:17,20:33:-72.84,-9.94,-48.77:99
-chr1	2264298	rs61288374	A	G	10.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=58.45;MQ0=0;OQ=219.39;QD=7.31;SB=-3.98	GT:AD:DP:GL:GQ	0/1:16,13:26:-33.06,-7.84,-58.70:99
-chr1	2264816	rs4648828	G	A	38.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.55;MQ=58.44;MQ0=0;OQ=661.80;QD=16.97;SB=-286.79	GT:AD:DP:GL:GQ	0/1:17,22:36:-80.32,-10.86,-47.76:99
-chr1	2264998	rs4648829	C	T	229.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.45;MQ0=0;OQ=171.83;QD=11.46;SB=-76.07	GT:AD:DP:GL:GQ	0/1:9,6:13:-24.38,-3.92,-22.89:99
-chr1	2265236	rs4648830	T	G	6.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.55;MQ0=0;OQ=452.22;QD=28.26;SB=-174.97	GT:AD:DP:GL:GQ	1/1:0,16:15:-48.82,-4.52,-0.01:45.09
-chr1	2265809	rs2643909	C	G	56	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=57.02;MQ0=0;OQ=1592.56;QD=34.62;SB=-562.49	GT:AD:DP:GL:GQ	1/1:0,46:39:-162.87,-11.76,-0.03:99
-chr1	2265882	.	G	A	8.69	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.87;MQ0=0;OQ=753.33;QD=18.37;SB=-247.76	GT:AD:DP:GL:GQ	0/1:17,24:37:-89.77,-11.15,-48.26:99
-chr1	2265933	.	T	C	0.10	PASS	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=3;HaplotypeScore=2.25;MQ=58.59;MQ0=0;OQ=218.96;QD=6.64;SB=-11.87	GT:AD:DP:GL:GQ	0/1:21,12:30:-34.22,-9.04,-78.51:99
-chr1	2266056	rs11589063	C	A	17.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.57;MQ=58.25;MQ0=0;OQ=453.86;QD=11.35;SB=-250.27	GT:AD:DP:GL:GQ	0/1:23,17:40:-60.72,-12.05,-77.71:99
-chr1	2266060	rs2843137	T	A	278.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=57.66;MQ0=0;OQ=421.83;QD=10.55;SB=-226.71	GT:AD:DP:GL:GQ	0/1:23,17:37:-56.61,-11.15,-79.80:99
-chr1	2266231	rs11589451	C	A	57.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.26;MQ=58.41;MQ0=0;OQ=597.75;QD=10.67;SB=-255.49	GT:AD:DP:GL:GQ	0/1:32,24:50:-78.13,-15.07,-90.69:99
-chr1	2266279	rs11590175	A	G	185.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.15;MQ0=0;OQ=537.72;QD=10.97;SB=-262.22	GT:AD:DP:GL:GQ	0/1:22,25:41:-69.42,-12.37,-72.12:99
-chr1	2266621	.	G	A	34.89	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=59.21;MQ0=0;OQ=474.72;QD=13.56;SB=-211.70	GT:AD:DP:GL:GQ	0/1:17,18:29:-59.50,-8.75,-41.35:99
-chr1	2267026	.	G	A	47.30	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.99;MQ0=0;OQ=613.73;QD=16.59;SB=-254.78	GT:AD:DP:GL:GQ	0/1:17,20:34:-74.91,-10.25,-50.44:99
-chr1	2267073	.	T	C	188.99	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=394.61;QD=9.87;SB=-211.55	GT:AD:DP:GL:GQ	0/1:22,18:38:-54.20,-11.45,-84.44:99
-chr1	2267410	rs61762093	G	C	176.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=56.22;MQ0=0;OQ=747.58;QD=15.26;SB=-308.18	GT:AD:DP:GL:GQ	0/1:27,22:44:-91.30,-13.26,-97.18:99
-chr1	2267687	rs2843134	G	A	624.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=2217.24;QD=36.95;SB=-1015.91	GT:AD:DP:GL:GQ	1/1:0,60:58:-225.33,-17.48,-0.02:99
-chr1	2267975	rs12409523	G	C	1.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=5.47;MQ=59.03;MQ0=0;OQ=822.23;QD=17.13;SB=-209.63	GT:AD:DP:GL:GQ	0/1:24,24:46:-99.39,-13.88,-93.78:99
-chr1	2268100	rs2132595	C	T	240.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.35;MQ0=0;OQ=844.37;QD=16.56;SB=-387.19	GT:AD:DP:GL:GQ	0/1:23,28:47:-101.89,-14.17,-71.24:99
-chr1	2268508	rs2843133	A	G	0.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=4;HaplotypeScore=2.38;MQ=57.65;MQ0=0;OQ=995.04;QD=26.19;SB=-340.62	GT:AD:DP:GL:GQ	1/1:0,38:30:-103.10,-9.04,-0.01:90.24
-chr1	2268841	rs2643910	C	T	6.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=58.25;MQ0=0;OQ=784.65;QD=19.62;SB=-334.39	GT:AD:DP:GL:GQ	0/1:16,24:39:-93.50,-11.75,-52.91:99
-chr1	2269677	rs56030548	C	T	80.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=57.12;MQ0=0;OQ=443.83;QD=15.85;SB=-131.12	GT:AD:DP:GL:GQ	0/1:13,15:27:-55.80,-8.14,-42.23:99
-chr1	2269999	rs35941092	C	T	0.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=8.68;MQ=48.71;MQ0=0;OQ=64.58;QD=4.61;SB=-21.48	GT:AD:DP:GL:GQ	0/1:10,4:14:-13.97,-4.23,-30.76:97.42
-chr1	2270100	.	T	A	5.69	PASS	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.04;MQ0=0;OQ=92.13;QD=5.12;SB=-47.85	GT:AD:DP:GL:GQ	0/1:13,5:18:-17.92,-5.42,-46.07:99
-chr1	2270283	rs2645072	A	C	0.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=56.22;MQ0=0;OQ=963.23;QD=33.21;SB=-173.01	GT:AD:DP:GL:GQ	1/1:0,29:28:-99.92,-8.44,-0.01:84.24
-chr1	2270521	rs2055204	G	A	60.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=59.66;MQ0=0;OQ=983.74;QD=17.89;SB=-468.43	GT:AD:DP:GL:GQ	0/1:22,33:52:-117.32,-15.67,-79.90:99
-chr1	2271586	rs7527871	A	C	436.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=784.91;QD=12.08;SB=-319.01	GT:AD:DP:GL:GQ	0/1:36,29:64:-101.05,-19.28,-130.62:99
-chr1	2271838	rs1039063	T	G	2.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=5;HaplotypeScore=1.22;MQ=60.00;MQ0=0;OQ=495.93;QD=11.27;SB=-259.90	GT:AD:DP:GL:GQ	0/1:22,22:41:-65.23,-12.35,-74.62:99
-chr1	2271995	rs10910053	G	A	269.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=928.57;QD=18.95;SB=-437.81	GT:AD:DP:GL:GQ	0/1:20,29:47:-110.30,-14.16,-67.66:99
-chr1	2272064	.	G	A	22.07	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.67;MQ=59.48;MQ0=0;OQ=676.05;QD=15.36;SB=-356.51	GT:AD:DP:GL:GQ	0/1:22,22:42:-83.55,-12.66,-69.45:99
-chr1	2272233	.	C	T	4.84	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=3.42;MQ=59.14;MQ0=0;OQ=912.77;QD=16.90;SB=-354.47	GT:AD:DP:GL:GQ	0/1:26,28:53:-110.53,-15.96,-92.85:99
-chr1	2272335	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.06;MQ=56.98;MQ0=0;OQ=124.90;QD=3.20;SB=56.19	GT:AD:DP:GL:GQ	0/1:24,15:32:-25.41,-9.64,-85.35:99
-chr1	2272540	rs2279704	C	T	249.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.55;MQ0=0;OQ=742.26;QD=14.55;SB=-245.76	GT:AD:DP:GL:GQ	0/1:25,25:47:-91.67,-14.16,-87.05:99
-chr1	2272636	rs2254874	G	C	9.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.74;MQ=56.62;MQ0=0;OQ=1562.16;QD=37.19;SB=-628.86	GT:AD:DP:GL:GQ	1/1:0,42:38:-159.82,-11.46,-0.02:99
-chr1	2272850	rs2036082	C	T	429.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=669.32;QD=14.55;SB=-278.20	GT:AD:DP:GL:GQ	0/1:25,21:46:-84.08,-13.87,-81.55:99
-chr1	2273702	rs2643912	G	T	414.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=338.96;QD=15.41;SB=-195.57	GT:AD:DP:GL:GQ	0/1:9,13:21:-43.50,-6.33,-31.88:99
-chr1	2273756	rs2840528	A	G	171.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.44;MQ0=0;OQ=666.96;QD=16.27;SB=-294.48	GT:AD:DP:GL:GQ	0/1:18,23:41:-82.33,-12.35,-70.40:99
-chr1	2273863	rs2645082	T	C	3.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=2.08;MQ=58.41;MQ0=0;OQ=1044.33;QD=23.73;SB=-369.45	GT:AD:DP:GL:GQ	1/1:0,44:35:-108.06,-10.56,-0.04:99
-chr1	2274055	rs3795272	T	C	1.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=3;HaplotypeScore=4.58;MQ=58.20;MQ0=0;OQ=382.95;QD=8.15;SB=-128.51	GT:AD:DP:GL:GQ	0/1:28,19:44:-54.84,-13.26,-106.89:99
-chr1	2274346	rs12049067	C	T	357.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.77;MQ0=0;OQ=508.21;QD=12.71;SB=-252.25	GT:AD:DP:GL:GQ	0/1:22,18:38:-65.56,-11.45,-75.12:99
-chr1	2274758	rs2840529	T	G	24.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=59.39;MQ0=0;OQ=311.73;QD=8.20;SB=-145.73	GT:AD:DP:GL:GQ	0/1:25,13:34:-44.70,-10.25,-72.81:99
-chr1	2275042	rs2036083	A	T	221.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=59.63;MQ0=0;OQ=509.88;QD=10.20;SB=-241.63	GT:AD:DP:GL:GQ	0/1:29,21:43:-67.22,-12.95,-90.87:99
-chr1	2275274	rs2843129	G	A	298.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.43;MQ0=0;OQ=2821.79;QD=38.65;SB=-1326.28	GT:AD:DP:GL:GQ	1/1:0,73:71:-285.78,-21.39,-0.02:99
-chr1	2276807	rs1039100	A	G	434.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1195.19;QD=31.45;SB=-467.43	GT:AD:DP:GL:GQ	1/1:0,38:36:-123.12,-10.85,-0.02:99
-chr1	2277377	rs2645083	T	C	625.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=1448.36;QD=34.48;SB=-607.22	GT:AD:DP:GL:GQ	1/1:0,42:42:-148.44,-12.65,-0.02:99
-chr1	2277394	rs11577374	C	T	128.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=58.95;MQ0=0;OQ=767.18;QD=17.44;SB=-322.88	GT:AD:DP:GL:GQ	0/1:20,24:40:-92.06,-12.06,-52.10:99
-chr1	2277476	rs2645085	T	C	300.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.58;MQ0=0;OQ=627.13;QD=11.40;SB=-216.37	GT:AD:DP:GL:GQ	0/1:27,28:51:-81.37,-15.38,-100.48:99
-chr1	2277708	rs16825067	G	C	15.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=58.92;MQ0=0;OQ=727.07;QD=18.64;SB=-379.89	GT:AD:DP:GL:GQ	0/1:17,22:37:-87.14,-11.15,-70.33:99
-chr1	2278607	rs2645086	T	C	275.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.11;MQ0=0;OQ=269.17;QD=10.35;SB=-101.72	GT:AD:DP:GL:GQ	0/1:13,13:25:-37.74,-7.54,-47.79:99
-chr1	2279110	rs903912	C	G	0.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=12.20;MQ=57.42;MQ0=0;OQ=679.10;QD=12.81;SB=-356.81	GT:AD:DP:GL:GQ	0/1:28,25:46:-85.06,-13.87,-109.25:99
-chr1	2279111	rs903913	T	C	0.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.02;HRun=1;HaplotypeScore=12.09;MQ=57.42;MQ0=0;OQ=643.89;QD=12.15;SB=-297.64	GT:AD:DP:GL:GQ	0/1:27,25:52:-83.04,-15.37,-108.03:99
-chr1	2279181	rs903914	G	A	327.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=59.27;MQ0=0;OQ=1113.86;QD=17.68;SB=-571.62	GT:AD:DP:GL:GQ	0/1:30,33:61:-133.06,-18.39,-88.20:99
-chr1	2280148	rs2840544	T	C	12.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=59.49;MQ0=0;OQ=176.15;QD=3.91;SB=-95.61	GT:AD:DP:GL:GQ	0/1:34,11:43:-33.87,-12.97,-121.04:99
-chr1	2280520	rs2645088	T	C	494.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=961.96;QD=28.29;SB=-437.29	GT:AD:DP:GL:GQ	1/1:0,34:31:-99.81,-9.35,-0.03:93.20
-chr1	2280750	rs2840543	C	T	201	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.69;MQ0=0;OQ=2174.81;QD=36.25;SB=-926.73	GT:AD:DP:GL:GQ	1/1:0,60:56:-221.09,-16.88,-0.02:99
-chr1	2280771	rs2645089	G	A	262.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=676.44;QD=13.53;SB=-331.88	GT:AD:DP:GL:GQ	0/1:29,21:47:-85.09,-14.16,-84.51:99
-chr1	2281127	rs6424093	A	G	144.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.16;MQ0=0;OQ=492.45;QD=11.73;SB=-156.68	GT:AD:DP:GL:GQ	0/1:23,19:40:-64.58,-12.05,-85.73:99
-chr1	2281540	rs2840542	T	C	309.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=56.56;MQ0=0;OQ=2607.54;QD=33.86;SB=-1074.11	GT:AD:DP:GL:GQ	1/1:0,77:73:-264.36,-21.99,-0.02:99
-chr1	2282015	rs2840541	T	C	311.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=585.20;QD=9.75;SB=-280.12	GT:AD:DP:GL:GQ	0/1:36,24:60:-79.89,-18.08,-145.26:99
-chr1	2282269	rs2645090	T	C	432.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=613.50;QD=9.16;SB=-290.16	GT:AD:DP:GL:GQ	0/1:38,29:64:-83.92,-19.29,-153.60:99
-chr1	2283026	rs2250799	G	A	138.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.62;MQ0=0;OQ=1864.73;QD=38.06;SB=-791.54	GT:AD:DP:GL:GQ	1/1:0,49:48:-190.08,-14.47,-0.02:99
-chr1	2284017	rs10797420	G	A	1.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=10.89;MQ=55.69;MQ0=1;OQ=1110.47;QD=17.63;SB=-493.05	GT:AD:DP:GL:GQ	0/1:28,34:55:-130.90,-16.57,-82.96:99
-chr1	2284704	rs55873848	C	T	485.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.27;MQ0=0;OQ=939.68;QD=16.78;SB=-471.48	GT:AD:DP:GL:GQ	0/1:26,30:53:-113.22,-15.97,-82.15:99
-chr1	2284890	rs7530501	T	G	19.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=5.02;MQ=57.51;MQ0=0;OQ=731.65;QD=13.80;SB=-124.84	GT:AD:DP:GL:GQ	0/1:25,28:51:-91.81,-15.36,-86.72:99
-chr1	2285068	rs57840322	G	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=6;HaplotypeScore=29.71;MQ=39.31;MQ0=0;OQ=1533.11;QD=35.65;SB=-660.69	GT:AD:DP:GL:GQ	1/1:0,43:40:-156.91,-12.05,-0.01:99
-chr1	2285112	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=42;Dels=0.05;HRun=7;HaplotypeScore=20.40;MQ=45.44;MQ0=0;OQ=661.72;QD=15.76;SB=-259.95	GT:AD:DP:GL:GQ	0/1:19,21:41:-81.21,-11.75,-63.70:99
-chr1	2285126	rs6682345	A	T	200.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.08;MQ0=0;OQ=1898.67;QD=35.16;SB=-880.24	GT:AD:DP:GL:GQ	1/1:1,53:53:-197.20,-15.96,-3.75:99
-chr1	2285128	rs6682346	A	T	359.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.28;MQ0=0;OQ=737.49;QD=13.41;SB=-376.75	GT:AD:DP:GL:GQ	0/1:30,25:55:-93.60,-16.56,-117.95:99
-chr1	2285638	rs10910055	A	C	76.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=3.44;MQ=49.97;MQ0=2;OQ=838.51;QD=11.65;SB=-398.65	GT:AD:DP:GL:GQ	0/1:39,33:60:-105.20,-18.07,-117.50:99
-chr1	2285783	rs12026746	C	T	166.61	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.98;MQ=27.61;MQ0=1;QD=3.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,15:30:-28.99,-9.05,-73.71:99
-chr1	2285784	.	A	G	712.90	SnpCluster	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.98;MQ=27.61;MQ0=1;QD=15.17;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,34:30:-83.61,-9.04,-20.49:99
-chr1	2285789	.	T	C	107.62	SnpCluster	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=51.95;MQ=27.67;MQ0=1;QD=2.20;SB=-10.00	GT:AD:DP:GL:GQ	0/1:37,12:31:-23.38,-9.34,-102.78:99
-chr1	2285797	.	C	T	99.87	SnpCluster	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=27.29;MQ0=3;QD=1.72;SB=-6.99	GT:AD:DP:GL:GQ	0/1:46,12:38:-24.73,-11.46,-107.35:99
-chr1	2285798	rs6685453	A	G	587.05	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=37.13;MQ=27.02;MQ0=4;QD=10.12;SB=-34.94	GT:AD:DP:GL:GQ	0/1:35,23:38:-73.44,-11.45,-64.40:99
-chr1	2285805	rs2840539	G	A	1277.62	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=29.98;MQ=27.32;MQ0=3;QD=21.65;SB=-159.63	GT:AD:DP:GL:GQ	0/1:13,46:41:-143.39,-12.35,-21.42:90.69
-chr1	2285956	rs7539098	A	T	36.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.84;MQ0=4;OQ=256.31;QD=4.93;SB=-97.36	GT:AD:DP:GL:GQ	0/1:30,22:31:-38.25,-9.34,-84.38:99
-chr1	2285957	rs7539099	A	T	39.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.84;MQ0=4;OQ=262.32;QD=5.04;SB=-99.37	GT:AD:DP:GL:GQ	0/1:29,23:31:-38.85,-9.34,-83.38:99
-chr1	2286519	rs12029098	A	G	0.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=10.29;MQ=20.58;MQ0=25;OQ=214.67;QD=3.41;SB=-10.00	GT:AD:DP:GL:GQ	0/1:52,10:32:-34.39,-9.64,-87.93:99
-chr1	2286535	rs10910056	C	T	41.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=18.11;MQ0=29;OQ=264.94;QD=4.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:49,10:24:-37.01,-7.23,-58.35:99
-chr1	2286632	rs12062221	G	A	163.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.73;MQ0=23;OQ=318.86;QD=6.13;SB=-122.97	GT:AD:DP:GL:GQ	0/1:37,15:21:-41.50,-6.33,-38.58:99
-chr1	2286682	rs10910057	T	C	259.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=21.36;MQ0=18;OQ=880.98;QD=17.98;SB=-392.60	GT:AD:DP:GL:GQ	1/1:18,31:25:-91.69,-7.53,-0.01:75.23
-chr1	2287320	rs7366927	T	C	67.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=20.66;MQ0=24;OQ=467.32;QD=6.97;SB=-192.02	GT:AD:DP:GL:GQ	0/1:40,27:33:-59.96,-9.95,-57.33:99
-chr1	2287795	rs10910058	A	T	108.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.68;MQ0=0;OQ=672.40;QD=13.18;SB=-131.84	GT:AD:DP:GL:GQ	0/1:26,25:50:-85.58,-15.06,-97.61:99
-chr1	2287854	rs10910059	G	C	295.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.70;MQ0=0;OQ=1098.70;QD=16.90;SB=-242.39	GT:AD:DP:GL:GQ	0/1:34,31:65:-132.74,-19.58,-150.89:99
-chr1	2288115	rs4648834	A	G	229.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=58.69;MQ0=0;OQ=974.25;QD=11.88;SB=-367.23	GT:AD:DP:GL:GQ	0/1:45,37:80:-124.81,-24.10,-176.65:99
-chr1	2288354	rs55960350	C	A	363.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.19;MQ0=0;OQ=926.53;QD=15.44;SB=-445.49	GT:AD:DP:GL:GQ	0/1:29,31:60:-114.01,-18.07,-107.19:99
-chr1	2288496	rs10453826	G	A	57.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1349.11;QD=17.75;SB=-668.70	GT:AD:DP:GL:GQ	0/1:36,39:75:-160.78,-22.59,-131.92:99
-chr1	2288624	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.02;HRun=18;HaplotypeScore=24.48;MQ=54.73;MQ0=1;OQ=401.02;QD=6.57;SB=-41.45	GT:AD:DP:GL:GQ	0/1:43,17:55:-59.67,-16.28,-122.97:99
-chr1	2288630	rs28792725	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.02;HRun=6;HaplotypeScore=25.44;MQ=54.48;MQ0=1;OQ=211.43;QD=3.92;SB=68.22	GT:AD:DP:GL:GQ	0/1:42,11:47:-38.29,-13.87,-121.95:99
-chr1	2288943	rs6704200	G	A	186.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.03;MQ0=0;OQ=2659.42;QD=39.69;SB=-1189.57	GT:AD:DP:GL:GQ	1/1:0,67:67:-269.55,-20.19,-0.02:99
-chr1	2289098	rs12069579	C	T	14.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=4;HaplotypeScore=1.46;MQ=57.20;MQ0=1;OQ=865.75;QD=14.43;SB=-343.49	GT:AD:DP:GL:GQ	0/1:32,28:57:-107.04,-17.18,-97.55:99
-chr1	2289170	rs12069588	C	T	455.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=1016.01;QD=15.88;SB=-357.83	GT:AD:DP:GL:GQ	0/1:33,31:64:-124.17,-19.28,-114.93:99
-chr1	2289171	rs12071572	A	G	466.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=819.05;QD=12.80;SB=-318.26	GT:AD:DP:GL:GQ	0/1:33,31:63:-104.18,-18.99,-126.28:99
-chr1	2289487	rs7545940	T	C	276.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=59.67;MQ0=0;OQ=618.09;QD=11.04;SB=-316.36	GT:AD:DP:GL:GQ	0/1:32,24:55:-81.66,-16.57,-127.86:99
-chr1	2289511	rs2840538	T	C	82.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=59.24;MQ0=0;OQ=1874.35;QD=34.08;SB=-939.34	GT:AD:DP:GL:GQ	1/1:0,55:54:-191.04,-16.27,-0.02:99
-chr1	2289772	rs7546224	T	C	223.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.97;MQ0=0;OQ=650.32;QD=11.02;SB=-248.17	GT:AD:DP:GL:GQ	0/1:33,26:58:-85.80,-17.48,-124.44:99
-chr1	2290017	rs12070927	C	A	51.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=59.12;MQ0=0;OQ=1316.41;QD=19.08;SB=-657.73	GT:AD:DP:GL:GQ	0/1:26,43:67:-155.11,-20.18,-89.64:99
-chr1	2290238	rs7514750	G	C	5.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=56.12;MQ0=0;OQ=999.16;QD=16.93;SB=-161.14	GT:AD:DP:GL:GQ	0/1:29,30:55:-119.78,-16.58,-120.03:99
-chr1	2290509	rs7542190	C	T	358.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.38;MQ0=0;OQ=592.85;QD=11.62;SB=-156.20	GT:AD:DP:GL:GQ	0/1:31,20:49:-77.34,-14.77,-99.87:99
-chr1	2290635	rs7554609	A	G	100.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=57.81;MQ0=0;OQ=439.50;QD=11.27;SB=-190.14	GT:AD:DP:GL:GQ	0/1:19,19:37:-60.47,-13.23,-75.89:99
-chr1	2290654	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=20;HaplotypeScore=28.09;MQ=53.25;MQ0=0;OQ=241.28;QD=4.02;SB=92.32	GT:AD:DP:GL:GQ	0/1:44,16:53:-43.38,-15.97,-152.46:99
-chr1	2290675	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=20;HaplotypeScore=29.22;MQ=49.62;MQ0=0;OQ=64.81;QD=0.94;SB=71.20	GT:AD:DP:GL:GQ	0/1:52,14:46:-23.33,-13.56,-132.10:97.65
-chr1	2291469	rs2840535	G	T	504.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=896.75;QD=14.95;SB=-459.55	GT:AD:DP:GL:GQ	0/1:30,30:59:-110.74,-17.78,-88.69:99
-chr1	2291551	rs6665546	G	A	392.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1434.00;QD=17.70;SB=-726.06	GT:AD:DP:GL:GQ	0/1:39,42:81:-171.09,-24.41,-128.82:99
-chr1	2292331	rs2453567	C	T	202.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=54.48;MQ0=0;OQ=1114.28;QD=17.14;SB=-425.43	GT:AD:DP:GL:GQ	0/1:31,34:60:-132.80,-18.08,-88.05:99
-chr1	2292376	rs2453566	T	C	254.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=52.46;MQ0=0;OQ=498.58;QD=10.18;SB=-208.48	GT:AD:DP:GL:GQ	0/1:22,27:40:-65.21,-12.06,-74.69:99
-chr1	2293426	rs2840534	A	G	74.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=4.04;MQ=59.63;MQ0=0;OQ=998.53;QD=16.11;SB=-332.38	GT:AD:DP:GL:GQ	0/1:27,35:61:-121.51,-18.38,-106.86:99
-chr1	2297776	rs2843165	A	C	120.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=714.07;QD=14.28;SB=-105.81	GT:AD:DP:GL:GQ	0/1:23,27:49:-89.45,-14.76,-84.29:99
-chr1	2298377	rs2843162	C	G	368.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=490.57;QD=15.82;SB=-257.11	GT:AD:DP:GL:GQ	0/1:17,14:31:-61.68,-9.34,-73.31:99
-chr1	2298942	rs2843160	T	G	117.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=59.17;MQ0=0;OQ=634.08;QD=11.32;SB=-278.70	GT:AD:DP:GL:GQ	0/1:27,29:53:-82.67,-15.98,-90.35:99
-chr1	2302255	rs2643908	C	T	314.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.55;MQ0=0;OQ=684.01;QD=13.41;SB=-309.40	GT:AD:DP:GL:GQ	0/1:26,25:46:-85.54,-13.86,-88.50:99
-chr1	2303400	rs2843132	A	G	8.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=3.40;MQ=59.58;MQ0=0;OQ=438.03;QD=9.96;SB=-158.56	GT:AD:DP:GL:GQ	0/1:24,20:38:-58.54,-11.45,-84.41:99
-chr1	2304179	rs2643901	T	C	196.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=59.45;MQ0=0;OQ=721.33;QD=17.17;SB=-281.01	GT:AD:DP:GL:GQ	0/1:15,26:39:-87.17,-11.75,-56.36:99
-chr1	2305298	rs2645060	G	A	178.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=60.00;MQ0=0;OQ=1082.92;QD=18.05;SB=-486.00	GT:AD:DP:GL:GQ	0/1:25,35:57:-128.76,-17.18,-76.49:99
-chr1	2305540	rs2843128	A	G	194.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.59;MQ0=0;OQ=482.38;QD=10.49;SB=-248.93	GT:AD:DP:GL:GQ	0/1:24,22:42:-64.18,-12.66,-86.34:99
-chr1	2305577	rs2843127	A	G	547.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=527.20;QD=11.98;SB=-284.59	GT:AD:DP:GL:GQ	0/1:25,19:44:-69.26,-13.26,-98.42:99
-chr1	2306175	rs2843126	A	G	188.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=58.39;MQ0=0;OQ=344.67;QD=9.07;SB=-143.56	GT:AD:DP:GL:GQ	0/1:18,19:33:-47.70,-9.95,-71.62:99
-chr1	2306848	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=13;HaplotypeScore=4.17;MQ=55.00;MQ0=0;OQ=100.30;QD=4.18;SB=17.09	GT:AD:DP:GL:GQ	0/1:17,7:16:-18.14,-4.82,-46.21:99
-chr1	2309288	rs903903	A	G	560.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1265.25;QD=17.33;SB=-657.78	GT:AD:DP:GL:GQ	0/1:28,45:70:-150.90,-21.10,-100.41:99
-chr1	2309390	rs2645061	G	T	558.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=773.84;QD=12.28;SB=-380.71	GT:AD:DP:GL:GQ	0/1:36,27:63:-99.64,-18.97,-129.32:99
-chr1	2310428	.	G	A	99.95	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=70;Dels=0.04;HRun=15;HaplotypeScore=39.00;MQ=46.05;MQ0=0;QD=1.43;SB=52.68	GT:AD:DP:GL:GQ	0/1:53,14:55:-29.56,-16.28,-149.90:99
-chr1	2313868	rs2840533	C	T	252.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=59.24;MQ0=0;OQ=794.28;QD=14.44;SB=-234.49	GT:AD:DP:GL:GQ	0/1:29,26:54:-98.98,-16.27,-105.03:99
-chr1	2314319	.	A	G	42.45	LowQual	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=50.37;MQ0=0;QD=0.63;SB=-7.70	GT:AD:DP:GL:GQ	0/1:58,9:63:-26.51,-18.98,-220.77:75.28
-chr1	2314326	.	A	G	0.25	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=50.58;MQ0=0;OQ=173.32;QD=2.44;SB=-79.68	GT:AD:DP:GL:GQ	0/1:59,12:69:-41.40,-20.79,-226.63:99
-chr1	2314333	rs41315342	C	T	21.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=49.96;MQ0=0;OQ=309.71;QD=4.62;SB=-180.11	GT:AD:DP:GL:GQ	0/1:53,14:62:-52.95,-18.70,-157.19:99
-chr1	2315408	.	G	A	4.80	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=3.55;MQ=59.13;MQ0=0;OQ=1258.74;QD=16.78;SB=-356.05	GT:AD:DP:GL:GQ	0/1:37,38:74:-151.46,-22.30,-126.73:99
-chr1	2315869	rs1123571	G	A	390.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.65;MQ0=0;OQ=976.67;QD=13.95;SB=-457.41	GT:AD:DP:GL:GQ	0/1:38,32:64:-120.23,-19.28,-120.05:99
-chr1	2316672	rs903911	A	G	4.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=4.83;MQ=58.81;MQ0=0;OQ=646.68;QD=16.58;SB=-230.30	GT:AD:DP:GL:GQ	0/1:16,22:38:-79.40,-11.45,-61.89:99
-chr1	2317675	rs2840532	C	T	230.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.63;MQ0=0;OQ=2453.68;QD=38.95;SB=-993.83	GT:AD:DP:GL:GQ	1/1:0,63:62:-248.97,-18.68,-0.02:99
-chr1	2318574	rs2645081	A	G	8.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=6.83;MQ=58.95;MQ0=0;OQ=2467.67;QD=30.85;SB=-995.94	GT:AD:DP:GL:GQ	1/1:0,79:71:-250.38,-21.39,-0.03:99
-chr1	2319521	rs6698680	A	G	273.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.27;MQ0=0;OQ=618.22;QD=12.12;SB=-195.44	GT:AD:DP:GL:GQ	0/1:27,24:49:-79.88,-14.77,-98.83:99
-chr1	2319668	rs3001344	A	G	117.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.27;MQ0=0;OQ=3223.06;QD=35.42;SB=-1436.46	GT:AD:DP:GL:GQ	1/1:0,91:90:-325.91,-27.11,-0.03:99
-chr1	2319862	rs6698978	A	G	270.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=53.38;MQ0=0;OQ=935.78;QD=15.60;SB=-478.67	GT:AD:DP:GL:GQ	0/1:27,33:58:-114.34,-17.47,-100.10:99
-chr1	2319876	rs6685829	C	T	18.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.10;MQ=50.59;MQ0=0;OQ=722.12;QD=12.24;SB=-192.86	GT:AD:DP:GL:GQ	0/1:35,24:57:-92.67,-17.18,-109.45:99
-chr1	2320050	rs6693447	T	G	274.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.41;MQ0=0;OQ=1099.08;QD=15.48;SB=-483.82	GT:AD:DP:GL:GQ	0/1:33,38:70:-134.27,-21.08,-119.27:99
-chr1	2321898	rs55912310	A	G	16.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=6.30;MQ=59.22;MQ0=0;OQ=1063.46;QD=13.63;SB=-443.56	GT:AD:DP:GL:GQ	0/1:40,38:76:-132.53,-22.90,-155.79:99
-chr1	2322251	rs12037485	C	T	255.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=54.76;MQ0=0;OQ=603.45;QD=12.57;SB=-317.81	GT:AD:DP:GL:GQ	0/1:27,21:45:-77.19,-13.56,-84.03:99
-chr1	2322525	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=3;HaplotypeScore=18.90;MQ=37.53;MQ0=0;OQ=105.39;QD=3.90;SB=-31.65	GT:AD:DP:GL:GQ	0/1:20,7:25:-21.36,-7.54,-75.64:99
-chr1	2322526	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=17.62;MQ=38.02;MQ0=0;OQ=76.24;QD=2.63;SB=-0.98	GT:AD:DP:GL:GQ	0/1:23,6:24:-18.14,-7.23,-69.35:99
-chr1	2322566	.	C	T	184.67	Indel	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=7.93;MQ=44.33;MQ0=0;QD=9.72;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,7:16:-26.58,-4.82,-31.47:99
-chr1	2322586	.	T	C	43.94	LowQual	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=2;HaplotypeScore=6.02;MQ=50.39;MQ0=0;QD=3.38;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,4:11:-10.99,-3.32,-30.04:76.77
-chr1	2322650	.	T	C	18.09	LowQual	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=2;HaplotypeScore=5.99;MQ=43.00;MQ0=0;QD=3.01;SB=-3.98	GT:AD:DP:GL:GQ	0/1:4,2:6:-6.89,-1.81,-15.35:50.86
-chr1	2322668	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=1;HaplotypeScore=16.47;MQ=36.20;MQ0=0;OQ=99.28;QD=6.62;SB=-3.98	GT:AD:DP:GL:GQ	0/1:11,4:11:-16.52,-3.31,-24.94:99
-chr1	2322705	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=18.95;MQ=39.10;MQ0=0;OQ=127.82;QD=7.99;SB=-6.99	GT:AD:DP:GL:GQ	0/1:11,5:12:-19.68,-3.62,-24.01:99
-chr1	2322711	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=13.96;MQ=44.08;MQ0=0;OQ=161.06;QD=8.05;SB=-38.94	GT:AD:DP:GL:GQ	0/1:13,7:16:-24.21,-4.82,-34.51:99
-chr1	2322848	rs3001337	T	C	21.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.78;MQ0=0;OQ=436.82;QD=19.86;SB=-71.91	GT:AD:DP:GL:GQ	1/1:0,22:15:-47.28,-4.52,-0.02:45.08
-chr1	2322891	rs3001336	G	A	52.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.61;MQ=57.77;MQ0=0;OQ=1380.55;QD=34.51;SB=-210.77	GT:AD:DP:GL:GQ	1/1:0,39:36:-141.66,-10.85,-0.02:99
-chr1	2324121	.	G	T	2.67	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=60.00;MQ0=0;OQ=1012.17;QD=19.85;SB=-217.60	GT:AD:DP:GL:GQ	0/1:19,32:51:-119.87,-15.37,-54.76:99
-chr1	2324716	rs41315648	C	T	55.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=58.50;MQ0=0;OQ=419.39;QD=13.53;SB=-59.02	GT:AD:DP:GL:GQ	0/1:17,14:29:-53.97,-8.74,-50.19:99
-chr1	2325536	rs1129333	A	G	283.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=1733.67;QD=33.99;SB=-802.65	GT:AD:DP:GL:GQ	1/1:0,51:50:-176.97,-15.06,-0.02:99
-chr1	2327137	rs11586985	C	T	102.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=429.81;QD=12.28;SB=-139.15	GT:AD:DP:GL:GQ	0/1:21,14:35:-56.82,-10.56,-64.66:99
-chr1	2327397	rs2494426	C	G	233.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=927.58;QD=37.10;SB=-342.73	GT:AD:DP:GL:GQ	1/1:0,25:23:-96.36,-6.94,-0.02:69.23
-chr1	2327420	rs55746053	G	A	222.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.19;MQ0=0;OQ=251.55;QD=10.94;SB=-144.16	GT:AD:DP:GL:GQ	0/1:13,10:21:-34.77,-6.33,-37.00:99
-chr1	2327986	rs3795269	C	A	81.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.48;MQ=59.11;MQ0=0;OQ=721.54;QD=13.88;SB=-337.19	GT:AD:DP:GL:GQ	0/1:25,27:47:-89.60,-14.16,-76.64:99
-chr1	2328429	rs2494427	T	C	699.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1614.58;QD=34.35;SB=-832.33	GT:AD:DP:GL:GQ	1/1:0,47:46:-165.06,-13.86,-0.02:99
-chr1	2328739	rs6671420	G	A	245.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=58.64;MQ0=0;OQ=433.47;QD=13.98;SB=-240.76	GT:AD:DP:GL:GQ	0/1:16,15:30:-55.68,-9.05,-50.08:99
-chr1	2328934	rs2494428	C	T	252.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=2537.82;QD=38.45;SB=-908.73	GT:AD:DP:GL:GQ	1/1:0,66:65:-257.39,-19.59,-0.03:99
-chr1	2328975	rs2494599	T	C	150.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=60.00;MQ0=0;OQ=1601.93;QD=34.08;SB=-647.90	GT:AD:DP:GL:GQ	1/1:0,47:46:-163.80,-13.86,-0.02:99
-chr1	2328999	rs6671730	G	A	141.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=617.02;QD=15.43;SB=-196.85	GT:AD:DP:GL:GQ	0/1:20,20:39:-76.74,-11.75,-69.55:99
-chr1	2329255	rs2494429	A	G	318.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.40;MQ0=0;OQ=347.51;QD=11.21;SB=-114.76	GT:AD:DP:GL:GQ	0/1:16,15:29:-46.78,-8.74,-56.84:99
-chr1	2329287	rs4648634	C	T	185.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.86;MQ=59.06;MQ0=0;OQ=270.55;QD=13.53;SB=-158.18	GT:AD:DP:GL:GQ	0/1:11,9:17:-35.47,-5.13,-24.67:99
-chr1	2329933	.	C	G	22.59	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=58.67;MQ0=0;OQ=614.01;QD=12.53;SB=-287.97	GT:AD:DP:GL:GQ	0/1:22,27:40:-76.76,-12.08,-83.82:99
-chr1	2330060	rs2494598	T	C	290.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=58.95;MQ0=0;OQ=481.10;QD=12.03;SB=-246.32	GT:AD:DP:GL:GQ	0/1:19,21:39:-63.16,-11.76,-72.17:99
-chr1	2332427	.	C	T	0.21	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.66;MQ=58.03;MQ0=0;OQ=1034.47;QD=16.96;SB=-503.70	GT:AD:DP:GL:GQ	0/1:28,33:58:-124.21,-17.48,-97.70:99
-chr1	2333054	rs2494597	T	C	55.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.48;MQ0=0;OQ=1376.62;QD=31.29;SB=-454.42	GT:AD:DP:GL:GQ	1/1:0,44:41:-141.27,-12.35,-0.02:99
-chr1	2334551	rs2494595	A	G	104.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=58.99;MQ0=0;OQ=304.12;QD=13.22;SB=-164.34	GT:AD:DP:GL:GQ	0/1:12,11:22:-40.32,-6.63,-44.91:99
-chr1	2334785	rs9424320	T	C	95.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.20;MQ0=0;OQ=385.94;QD=13.31;SB=-75.78	GT:AD:DP:GL:GQ	0/1:11,17:25:-49.42,-7.54,-38.41:99
-chr1	2335959	rs7556447	C	G	349.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=56.82;MQ0=0;OQ=713.10;QD=13.71;SB=-329.23	GT:AD:DP:GL:GQ	0/1:30,22:47:-88.76,-14.16,-115.39:99
-chr1	2336342	rs4648839	T	C	24.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=49.60;MQ0=0;OQ=479.90;QD=20.87;SB=-161.36	GT:AD:DP:GL:GQ	1/1:1,22:17:-51.60,-5.13,-0.02:51.09
-chr1	2336383	rs10910065	G	C	120.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=52.63;MQ0=0;OQ=649.76;QD=18.05;SB=-286.56	GT:AD:DP:GL:GQ	0/1:17,19:34:-78.51,-10.25,-66.28:99
-chr1	2336384	rs10910066	T	C	189.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=52.63;MQ0=0;OQ=539.82;QD=14.99;SB=-236.31	GT:AD:DP:GL:GQ	0/1:17,19:36:-68.12,-10.85,-65.37:99
-chr1	2336612	.	G	A	111.33	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=53.01;MQ0=0;OQ=620.89;QD=13.80;SB=-302.81	GT:AD:DP:GL:GQ	0/1:24,21:40:-77.43,-12.05,-71.03:99
-chr1	2337326	rs12746918	C	T	6.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=7.69;MQ=54.86;MQ0=0;OQ=484.18;QD=9.68;SB=-259.25	GT:AD:DP:GL:GQ	0/1:29,21:42:-64.36,-12.66,-87.95:99
-chr1	2337359	.	C	T	7.61	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.85;MQ=55.32;MQ0=0;OQ=435.73;QD=9.68;SB=-169.11	GT:AD:DP:GL:GQ	0/1:27,17:41:-59.22,-12.37,-82.09:99
-chr1	2337436	.	G	T	34.30	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=57.73;MQ0=0;OQ=368.11;QD=11.87;SB=-146.62	GT:AD:DP:GL:GQ	0/1:16,15:30:-49.13,-9.04,-55.91:99
-chr1	2337592	rs12184328	G	A	0.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=8.46;MQ=57.94;MQ0=0;OQ=510.09;QD=15.00;SB=-111.95	GT:AD:DP:GL:GQ	0/1:17,16:33:-64.24,-9.94,-57.68:99
-chr1	2337900	rs10910068	T	C	14.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=1.32;MQ=56.47;MQ0=0;OQ=310.27;QD=9.13;SB=-165.49	GT:AD:DP:GL:GQ	0/1:15,19:29:-43.06,-8.75,-59.62:99
-chr1	2339629	rs2494432	G	A	402.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=824.63;QD=16.83;SB=-334.87	GT:AD:DP:GL:GQ	0/1:23,26:44:-99.01,-13.26,-63.50:99
-chr1	2339896	.	C	T	167.28	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=715.32;QD=13.50;SB=-333.31	GT:AD:DP:GL:GQ	0/1:31,22:52:-90.49,-15.68,-97.09:99
-chr1	2340772	rs10910070	G	A	197.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=60.00;MQ0=0;OQ=631.24;QD=14.35;SB=-260.25	GT:AD:DP:GL:GQ	0/1:23,21:43:-79.37,-12.96,-74.56:99
-chr1	2340956	rs11577147	A	G	10.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=289.51;QD=8.77;SB=-78.79	GT:AD:DP:GL:GQ	0/1:19,14:32:-41.88,-9.65,-72.03:99
-chr1	2341435	rs11590507	G	A	0.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=57.66;MQ0=0;OQ=472.75;QD=15.76;SB=-44.54	GT:AD:DP:GL:GQ	0/1:14,15:29:-59.30,-8.74,-51.63:99
-chr1	2341559	rs3935659	T	C	7.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=3.23;MQ=59.25;MQ0=0;OQ=287.36;QD=11.49;SB=-29.91	GT:AD:DP:GL:GQ	0/1:13,12:25:-39.55,-7.53,-50.79:99
-chr1	2341739	rs3935660	C	T	165.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.09;MQ0=0;OQ=670.17;QD=13.68;SB=-195.21	GT:AD:DP:GL:GQ	0/1:27,21:42:-82.97,-12.67,-64.00:99
-chr1	2342006	rs12731309	C	T	203.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=58.88;MQ0=0;OQ=846.80;QD=15.68;SB=-399.13	GT:AD:DP:GL:GQ	0/1:28,26:51:-103.32,-15.36,-93.02:99
-chr1	2342252	.	A	T	13.40	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=20.03;MQ=56.40;MQ0=0;QD=0.29;SB=20.83	GT:AD:DP:GL:GQ	0/1:37,6:32:-14.24,-9.64,-106.31:46.04
-chr1	2342253	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=16;HaplotypeScore=7.92;MQ=56.40;MQ0=0;OQ=132.41;QD=2.82;SB=14.63	GT:AD:DP:GL:GQ	0/1:39,8:37:-27.67,-11.15,-101.20:99
-chr1	2342945	rs10910071	A	G	300.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=58.83;MQ0=0;OQ=1016.43;QD=13.20;SB=-494.01	GT:AD:DP:GL:GQ	0/1:41,36:76:-127.82,-22.90,-155.86:99
-chr1	2343155	rs12143389	C	T	127	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=58.70;MQ0=1;OQ=925.95;QD=15.69;SB=-402.44	GT:AD:DP:GL:GQ	0/1:31,28:58:-113.35,-17.47,-107.32:99
-chr1	2343729	rs35799953	G	T	69.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.02;MQ0=0;OQ=852.19;QD=13.75;SB=-419.16	GT:AD:DP:GL:GQ	0/1:33,29:62:-107.18,-18.68,-104.15:99
-chr1	2343876	rs34574702	C	T	503.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1119.07;QD=15.54;SB=-507.56	GT:AD:DP:GL:GQ	0/1:37,35:71:-136.60,-21.41,-114.39:99
-chr1	2344230	rs12022832	T	C	209.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=58.42;MQ0=0;OQ=1122.84;QD=12.62;SB=-438.76	GT:AD:DP:GL:GQ	0/1:44,45:86:-141.48,-25.92,-179.52:99
-chr1	2344260	rs12096965	C	T	229.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.88;MQ0=0;OQ=1606.93;QD=18.26;SB=-801.37	GT:AD:DP:GL:GQ	0/1:41,47:83:-188.99,-25.01,-117.57:99
-chr1	2344423	rs12097032	C	T	484.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=986.20;QD=13.33;SB=-465.97	GT:AD:DP:GL:GQ	0/1:43,31:74:-124.19,-22.29,-159.47:99
-chr1	2344746	rs10797421	G	A	65.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.32;MQ0=1;OQ=3166.01;QD=39.09;SB=-1482.03	GT:AD:DP:GL:GQ	1/1:0,81:79:-320.20,-23.80,-0.02:99
-chr1	2345260	.	A	G	75.95	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.23;MQ0=0;OQ=680.86;QD=11.35;SB=-282.57	GT:AD:DP:GL:GQ	0/1:36,24:58:-88.84,-17.47,-139.70:99
-chr1	2346437	rs4648840	A	G	47.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.94;MQ0=0;OQ=537.49;QD=18.53;SB=-194.00	GT:AD:DP:GL:GQ	0/1:11,18:29:-65.77,-8.74,-43.90:99
-chr1	2346772	rs2494433	G	A	58.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=56.91;MQ0=0;OQ=1163.67;QD=17.63;SB=-493.51	GT:AD:DP:GL:GQ	0/1:29,36:61:-138.03,-18.37,-99.55:99
-chr1	2347335	rs2494434	T	C	559.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=1472.38;QD=29.45;SB=-544.87	GT:AD:DP:GL:GQ	1/1:0,50:48:-150.87,-14.48,-0.05:99
-chr1	2347933	rs2494588	C	T	188.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=57.48;MQ0=0;OQ=702.34;QD=16.33;SB=-327.35	GT:AD:DP:GL:GQ	0/1:19,24:41:-85.88,-12.36,-61.93:99
-chr1	2348381	rs55852252	G	A	9.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.28;MQ=58.74;MQ0=0;OQ=406.10;QD=10.98;SB=-128.60	GT:AD:DP:GL:GQ	0/1:20,16:33:-53.85,-9.96,-60.26:99
-chr1	2348618	rs2494587	C	T	128.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=58.45;MQ0=0;OQ=376.88;QD=12.56;SB=-173.14	GT:AD:DP:GL:GQ	0/1:17,13:28:-49.41,-8.44,-50.72:99
-chr1	2348708	rs12116913	G	C	294.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=640.63;QD=17.31;SB=-259.09	GT:AD:DP:GL:GQ	0/1:14,23:34:-77.61,-10.26,-60.10:99
-chr1	2349777	rs2494436	T	C	163.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.34;MQ0=0;OQ=309.46;QD=8.84;SB=-92.69	GT:AD:DP:GL:GQ	0/1:19,16:32:-43.87,-9.64,-70.50:99
-chr1	2349800	rs7515934	C	T	251.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=58.83;MQ0=0;OQ=424.25;QD=11.78;SB=-175.26	GT:AD:DP:GL:GQ	0/1:19,17:28:-54.15,-8.45,-42.69:99
-chr1	2350992	rs10910075	C	T	473.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=647.50;QD=14.08;SB=-334.47	GT:AD:DP:GL:GQ	0/1:24,22:45:-81.60,-13.57,-79.99:99
-chr1	2351241	.	T	G	21.83	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=2;HaplotypeScore=2.69;MQ=59.58;MQ0=0;QD=0.40;SB=68.21	GT:AD:DP:GL:GQ	0/1:36,19:40:-17.52,-12.05,-117.29:54.64
-chr1	2351880	rs4531246	G	T	25.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.77;MQ=57.66;MQ0=0;OQ=504.52;QD=12.61;SB=-172.18	GT:AD:DP:GL:GQ	0/1:16,23:33:-63.68,-9.95,-50.73:99
-chr1	2352624	rs10797424	A	T	924.88	Indel	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.64;MQ=59.45;MQ0=0;QD=16.52;SB=-353.59	GT:AD:DP:GL:GQ	0/1:25,31:52:-111.44,-15.67,-81.17:99
-chr1	2352687	rs2494641	C	T	290.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=59.48;MQ0=0;OQ=558.90;QD=11.89;SB=-269.24	GT:AD:DP:GL:GQ	0/1:28,19:43:-72.14,-12.96,-80.82:99
-chr1	2353187	rs2494640	G	C	26.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=4.41;MQ=59.56;MQ0=0;OQ=532.94;QD=10.25;SB=-240.06	GT:AD:DP:GL:GQ	0/1:33,18:51:-71.97,-15.39,-132.20:99
-chr1	2361858	rs12756220	T	C	1.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=2;HaplotypeScore=7.14;MQ=34.26;MQ0=3;OQ=1721.38;QD=12.30;SB=-137.87	GT:AD:DP:GL:GQ	0/1:41,97:98:-204.99,-29.57,-118.98:99
-chr1	2361893	rs34648463	T	G	24.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=3.90;MQ=42.90;MQ0=5;OQ=1167.25;QD=12.83;SB=-195.79	GT:AD:DP:GL:GQ	0/1:32,58:69:-140.80,-20.79,-99.18:99
-chr1	2361936	rs28669301	A	C	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=18.37;MQ=47.88;MQ0=0;OQ=797.11;QD=9.96;SB=-212.34	GT:AD:DP:GL:GQ	0/1:30,48:65:-102.59,-19.60,-99.90:99
-chr1	2361993	rs2494638	G	C	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=3.02;MQ=48.10;MQ0=3;OQ=294.71;QD=3.68;SB=53.21	GT:AD:DP:GL:GQ	0/1:57,23:60:-50.84,-18.09,-206.36:99
-chr1	2363043	.	G	A	28.79	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=59.14;MQ0=0;OQ=346.36;QD=12.83;SB=-157.68	GT:AD:DP:GL:GQ	0/1:14,13:24:-45.16,-7.24,-42.35:99
-chr1	2380627	.	C	G	34.70	LowQual	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=57.50;MQ0=0;QD=0.48;SB=-30.39	GT:AD:DP:GL:GQ	0/1:66,6:63:-25.74,-18.99,-243.93:67.54
-chr1	2380700	rs28508164	T	C	2.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.08;MQ0=1;OQ=73.76;QD=1.76;SB=-56.90	GT:AD:DP:GL:GQ	0/1:36,6:33:-20.60,-9.94,-107.88:99
-chr1	2380723	.	G	C	46.32	LowQual	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=2;HaplotypeScore=2.29;MQ=49.69;MQ0=1;QD=2.72;SB=-23.39	GT:AD:DP:GL:GQ	0/1:12,5:11:-11.23,-3.32,-34.81:79.16
-chr1	2380725	.	C	T	43.06	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=49.69;MQ0=1;QD=2.53;SB=5.04	GT:AD:DP:GL:GQ	0/1:12,5:11:-10.90,-3.32,-27.83:75.90
-chr1	2380739	.	G	C	31.92	LowQual	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=2;HaplotypeScore=1.16;MQ=44.53;MQ0=1;QD=1.88;SB=-3.98	GT:AD:DP:GL:GQ	0/1:10,7:9:-9.19,-2.71,-29.02:64.75
-chr1	2380741	.	C	T	23.47	LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=43.38;MQ0=1;QD=1.47;SB=-3.99	GT:AD:DP:GL:GQ	0/1:10,6:8:-8.04,-2.42,-18.12:56.29
-chr1	2380787	.	C	G	11.87	PASS	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=41.08;MQ0=2;OQ=228.10;QD=9.12;SB=-107.32	GT:AD:DP:GL:GQ	0/1:13,12:14:-30.31,-4.22,-31.36:99
-chr1	2380789	.	T	C	0.06	PASS	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=3.66;MQ=41.08;MQ0=2;OQ=146.59;QD=5.86;SB=-69.76	GT:AD:DP:GL:GQ	0/1:13,12:14:-22.16,-4.22,-27.36:99
-chr1	2380812	.	C	T	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=13.92;MQ=46.38;MQ0=1;OQ=329.40;QD=9.98;SB=-91.91	GT:AD:DP:GL:GQ	0/1:15,18:19:-41.95,-5.73,-28.82:99
-chr1	2380819	.	C	G	37.83	LowQual	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=9.81;MQ=46.57;MQ0=1;QD=1.08;SB=-27.83	GT:AD:DP:GL:GQ	0/1:27,8:18:-12.49,-5.42,-65.92:70.67
-chr1	2382567	.	A	G	10.80	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=573.70;QD=14.34;SB=-186.56	GT:AD:DP:GL:GQ	0/1:16,24:36:-71.50,-10.85,-55.65:99
-chr1	2390539	rs56368227	C	T	147.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=58.63;MQ0=0;OQ=772.55;QD=15.15;SB=-231.31	GT:AD:DP:GL:GQ	0/1:25,25:47:-96.89,-16.35,-71.90:99
-chr1	2391510	rs942818	T	C	169.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1503.43;QD=30.07;SB=-692.23	GT:AD:DP:GL:GQ	1/1:0,50:44:-153.95,-13.26,-0.02:99
-chr1	2393714	rs10910080	G	A	120.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.52;MQ=58.38;MQ0=0;OQ=343.05;QD=13.19;SB=-140.60	GT:AD:DP:GL:GQ	0/1:13,13:24:-44.83,-7.24,-36.59:99
-chr1	2394116	rs2494626	C	T	263.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.95;MQ0=0;OQ=492.85;QD=12.32;SB=-207.19	GT:AD:DP:GL:GQ	0/1:23,17:37:-63.72,-11.16,-67.50:99
-chr1	2398521	rs1536155	A	G	7.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=2.26;MQ=58.44;MQ0=0;OQ=280.60;QD=10.39;SB=-38.80	GT:AD:DP:GL:GQ	0/1:14,13:25:-38.88,-7.54,-51.71:99
-chr1	2399136	rs12049628	A	G	275.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=58.16;MQ0=0;OQ=457.42;QD=9.94;SB=-243.30	GT:AD:DP:GL:GQ	0/1:24,22:43:-61.98,-12.96,-96.02:99
-chr1	2399220	rs59417818	G	A	58.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=60.00;MQ0=0;OQ=406.26;QD=15.63;SB=-103.61	GT:AD:DP:GL:GQ	0/1:12,13:24:-51.14,-7.23,-38.48:99
-chr1	2399752	rs12727342	A	G	0.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=4.77;MQ=57.40;MQ0=0;OQ=225.70;QD=6.10;SB=-108.60	GT:AD:DP:GL:GQ	0/1:20,17:31:-35.20,-9.35,-75.95:99
-chr1	2399993	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.11;MQ=57.31;MQ0=0;OQ=125.38;QD=3.58;SB=53.21	GT:AD:DP:GL:GQ	0/1:25,10:27:-23.96,-8.14,-94.75:99
-chr1	2400649	rs11799501	C	T	116.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.89;MQ=60.00;MQ0=0;OQ=748.36;QD=14.39;SB=-393.78	GT:AD:DP:GL:GQ	0/1:28,24:51:-93.50,-15.38,-86.98:99
-chr1	2401311	rs10797428	A	G	76.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=59.53;MQ0=0;OQ=638.41;QD=15.96;SB=-314.23	GT:AD:DP:GL:GQ	0/1:15,25:38:-78.58,-11.46,-54.60:99
-chr1	2402139	rs4648638	A	T	283.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.43;MQ0=0;OQ=382.69;QD=11.60;SB=-121.80	GT:AD:DP:GL:GQ	0/1:19,14:31:-50.89,-9.34,-63.99:99
-chr1	2403494	rs942817	G	C	329.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.68;MQ0=0;OQ=865.92;QD=18.82;SB=-441.92	GT:AD:DP:GL:GQ	0/1:21,25:43:-102.83,-12.96,-79.86:99
-chr1	2404788	rs4995304	G	A	54.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=55.45;MQ0=0;OQ=801.00;QD=19.54;SB=-282.18	GT:AD:DP:GL:GQ	0/1:16,24:39:-95.13,-11.75,-53.28:99
-chr1	2405062	.	T	G	6.04	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=55.86;MQ0=0;OQ=164.49;QD=7.15;SB=2.04	GT:AD:DP:GL:GQ	0/1:15,8:23:-26.66,-6.93,-55.71:99
-chr1	2405078	.	C	T	5.98	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=52.76;MQ0=0;OQ=151.99;QD=6.61;SB=-0.99	GT:AD:DP:GL:GQ	0/1:16,7:20:-24.51,-6.03,-50.27:99
-chr1	2405106	.	G	T	34.21	LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=4.38;MQ=49.04;MQ0=0;QD=1.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,5:14:-10.92,-4.22,-37.23:67.05
-chr1	2405179	.	T	G	0.09	PASS	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=3;HaplotypeScore=3.52;MQ=52.14;MQ0=0;OQ=147.78;QD=8.21;SB=-98.66	GT:AD:DP:GL:GQ	0/1:11,7:13:-21.98,-3.92,-24.09:99
-chr1	2405189	.	T	C	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=19;Dels=0.00;HRun=3;HaplotypeScore=5.56;MQ=47.05;MQ0=0;OQ=344.28;QD=18.12;SB=-173.40	GT:AD:DP:GL:GQ	1/1:0,19:11:-38.02,-3.32,-0.01:33.08
-chr1	2405210	.	C	A	0.76	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=2.86;MQ=39.01;MQ0=0;OQ=86.77;QD=6.20;SB=-60.75	GT:AD:DP:GL:GQ	0/1:10,4:8:-14.37,-2.41,-11.67:92.61
-chr1	2405220	.	G	C	0.99	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=39.01;MQ0=0;OQ=62.38;QD=4.46;SB=-40.43	GT:AD:DP:GL:GQ	0/1:10,4:7:-11.64,-2.12,-15.93:95.21
-chr1	2405254	.	T	C	25.50	LowQual	AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=3;HaplotypeScore=1.85;MQ=37.93;MQ0=1;QD=3.64;SB=-6.99	GT:AD:DP:GL:GQ	0/1:3,4:4:-7.04,-1.21,-6.92:57.17
-chr1	2405275	.	C	A	10.07	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=32.15;MQ0=1;OQ=98.76;QD=10.97;SB=-39.94	GT:AD:DP:GL:GQ	1/1:5,4:4:-13.41,-1.21,-0.00:12.03
-chr1	2405285	.	G	C	5.32	PASS	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=37.51;MQ0=1;OQ=185.89;QD=12.39;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,7:7:-23.98,-2.11,-4.50:23.85
-chr1	2405307	.	G	C	0.94	PASS	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=44.11;MQ0=0;OQ=225.33;QD=17.33;SB=-6.99	GT:AD:DP:GL:GQ	0/1:5,8:9:-28.53,-2.71,-8.94:62.30
-chr1	2405357	rs61763948	T	C	6.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.63;MQ0=0;OQ=296.15;QD=17.42;SB=-3.98	GT:AD:DP:GL:GQ	0/1:4,13:16:-37.72,-4.82,-15.46:99
-chr1	2406217	rs4648639	G	A	225.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=51.38;MQ0=0;OQ=834.51;QD=18.14;SB=-265.24	GT:AD:DP:GL:GQ	0/1:20,26:45:-100.29,-13.55,-72.00:99
-chr1	2407818	rs4648640	G	A	162.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=59.09;MQ0=0;OQ=709.86;QD=15.43;SB=-272.15	GT:AD:DP:GL:GQ	0/1:23,23:44:-87.53,-13.26,-76.87:99
-chr1	2408795	rs10910082	C	T	122.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.49;MQ0=0;OQ=319.86;QD=7.11;SB=-107.45	GT:AD:DP:GL:GQ	0/1:33,12:44:-48.52,-13.25,-117.65:99
-chr1	2410450	rs10752744	T	C	140.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=60.00;MQ0=0;OQ=499.26;QD=10.62;SB=-158.91	GT:AD:DP:GL:GQ	0/1:28,19:47:-67.37,-14.16,-113.54:99
-chr1	2410773	rs6668720	A	G	120.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.84;MQ0=0;OQ=320.90;QD=8.02;SB=-52.83	GT:AD:DP:GL:GQ	0/1:24,16:36:-46.22,-10.85,-86.61:99
-chr1	2412474	rs2477699	G	A	360.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=58.60;MQ0=0;OQ=676.25;QD=13.52;SB=-318.34	GT:AD:DP:GL:GQ	0/1:25,25:46:-84.77,-13.86,-87.14:99
-chr1	2413426	rs3001349	C	G	122.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=59.07;MQ0=0;OQ=984.04;QD=19.68;SB=-507.27	GT:AD:DP:GL:GQ	0/1:22,28:50:-116.76,-15.07,-93.45:99
-chr1	2414277	rs2477701	T	C	471.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1313.31;QD=32.03;SB=-482.12	GT:AD:DP:GL:GQ	1/1:0,41:41:-134.95,-12.36,-0.03:99
-chr1	2414754	rs2477702	T	C	257.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=58.58;MQ0=0;OQ=407.32;QD=11.31;SB=-181.54	GT:AD:DP:GL:GQ	0/1:18,17:33:-53.96,-9.95,-62.99:99
-chr1	2415234	.	G	A	52.54	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.25;MQ0=0;OQ=558.86;QD=13.97;SB=-294.85	GT:AD:DP:GL:GQ	0/1:20,20:36:-70.03,-10.86,-54.36:99
-chr1	2415852	rs2477703	C	T	47.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=7.69;MQ=58.80;MQ0=0;OQ=763.15;QD=13.16;SB=-352.50	GT:AD:DP:GL:GQ	0/1:34,24:57:-96.78,-17.18,-104.35:99
-chr1	2416626	rs3001347	A	G	166.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=58.74;MQ0=0;OQ=303.26;QD=8.20;SB=-170.50	GT:AD:DP:GL:GQ	0/1:20,17:33:-43.56,-9.95,-71.18:99
-chr1	2417572	rs3762444	C	T	276.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=447.88;QD=14.93;SB=-199.90	GT:AD:DP:GL:GQ	0/1:15,15:29:-56.82,-8.74,-44.39:99
-chr1	2418734	rs2477706	T	C	40.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=58.67;MQ0=0;OQ=224.99;QD=6.43;SB=-131.52	GT:AD:DP:GL:GQ	0/1:20,15:30:-34.83,-9.05,-71.11:99
-chr1	2422191	rs4648641	C	A	142.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=139.36;QD=6.33;SB=-88.78	GT:AD:DP:GL:GQ	0/1:13,9:20:-23.25,-6.03,-44.88:99
-chr1	2422622	rs4648642	G	A	142.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=59.39;MQ0=0;OQ=411.20;QD=10.82;SB=-172.27	GT:AD:DP:GL:GQ	0/1:23,15:36:-55.26,-10.86,-70.83:99
-chr1	2422899	.	G	A	37.84	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=59.45;MQ0=0;OQ=458.87;QD=13.50;SB=-199.87	GT:AD:DP:GL:GQ	0/1:18,16:31:-58.52,-9.34,-51.58:99
-chr1	2423328	.	G	A	53.96	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=296.62;QD=12.90;SB=-35.64	GT:AD:DP:GL:GQ	0/1:13,10:22:-39.58,-6.63,-40.93:99
-chr1	2423754	rs55874156	G	A	35.47	LowQual	AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=5.91;SB=-7.00	GT:AD:DP:GL:GQ	0/1:3,3:5:-8.34,-1.51,-8.96:68.30
-chr1	2423760	rs12736998	C	T	230.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=70.89;QD=11.81;SB=-46.66	GT:AD:DP:GL:GQ	0/1:3,3:6:-12.18,-1.81,-9.71:78.98
-chr1	2424604	rs3814298	C	T	190.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=60.00;MQ0=0;OQ=798.59;QD=18.57;SB=-384.92	GT:AD:DP:GL:GQ	0/1:19,24:41:-95.50,-12.36,-53.02:99
-chr1	2428628	rs12725663	C	T	86.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=59.46;MQ0=0;OQ=892.70;QD=20.76;SB=-466.01	GT:AD:DP:GL:GQ	0/1:16,27:41:-104.92,-12.36,-47.45:99
-chr1	2429459	rs2494621	C	A	2.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=3;HaplotypeScore=1.26;MQ=59.48;MQ0=0;OQ=889.11;QD=20.21;SB=-361.22	GT:AD:DP:GL:GQ	0/1:15,29:43:-105.15,-12.95,-49.46:99
-chr1	2429541	rs4648559	C	T	370.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=862.47;QD=17.60;SB=-340.86	GT:AD:DP:GL:GQ	0/1:22,27:49:-104.31,-14.78,-68.65:99
-chr1	2429545	rs3791180	G	C	362.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=669.25;QD=13.12;SB=-329.42	GT:AD:DP:GL:GQ	0/1:24,27:45:-83.79,-13.58,-96.76:99
-chr1	2434274	rs7535528	G	A	398.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=57.41;MQ0=0;OQ=974.09;QD=16.23;SB=-447.47	GT:AD:DP:GL:GQ	0/1:29,31:55:-117.28,-16.58,-80.59:99
-chr1	2440170	rs56168662	G	C	440.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=641.06;QD=13.94;SB=-291.00	GT:AD:DP:GL:GQ	0/1:24,22:44:-80.67,-13.28,-95.39:99
-chr1	2442429	rs2985862	T	C	118.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=58.11;MQ0=0;OQ=446.59;QD=12.07;SB=-57.29	GT:AD:DP:GL:GQ	0/1:20,17:36:-58.79,-10.85,-82.58:99
-chr1	2442985	.	C	G	26.50	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=2.73;MQ=57.66;MQ0=0;QD=0.66;SB=53.21	GT:AD:DP:GL:GQ	0/1:27,13:28:-14.38,-8.45,-107.19:59.33
-chr1	2443996	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=42.41;MQ=51.42;MQ0=0;OQ=532.54;QD=4.29;SB=-103.57	GT:AD:DP:GL:GQ	0/1:93,31:115:-91.18,-34.64,-325.86:99
-chr1	2444008	rs12757829	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=24.89;MQ=51.04;MQ0=0;OQ=890.38;QD=6.31;SB=-413.05	GT:AD:DP:GL:GQ	0/1:89,52:127:-130.59,-38.27,-352.78:99
-chr1	2444025	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=101.62;MQ=51.11;MQ0=0;OQ=575.04;QD=3.76;SB=-161.02	GT:AD:DP:GL:GQ	0/1:119,34:145:-104.47,-43.68,-467.68:99
-chr1	2444046	rs11582708	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.00;HRun=3;HaplotypeScore=36.45;MQ=48.57;MQ0=0;OQ=119.48;QD=0.71;SB=230.81	GT:AD:DP:GL:GQ	0/1:152,17:154:-61.64,-46.41,-606.32:99
-chr1	2444064	rs11583446	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=165;Dels=0.00;HRun=0;HaplotypeScore=21.72;MQ=47.52;MQ0=0;OQ=2894.91;QD=17.54;SB=-1278.77	GT:AD:DP:GL:GQ	0/1:56,109:148:-337.38,-44.60,-196.45:99
-chr1	2444078	rs2494629	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=179;Dels=0.00;HRun=0;HaplotypeScore=85.91;MQ=46.23;MQ0=1;OQ=3166.59;QD=17.69;SB=-903.91	GT:AD:DP:GL:GQ	0/1:79,100:143:-363.06,-43.11,-245.67:99
-chr1	2444084	rs11583448	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=183;Dels=0.00;HRun=0;HaplotypeScore=146.19;MQ=45.66;MQ0=1;OQ=1337.56;QD=7.31;SB=32.08	GT:AD:DP:GL:GQ	0/1:128,54:167:-187.36,-50.32,-447.47:99
-chr1	2444090	rs11582711	C	T	0.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=184;Dels=0.00;HRun=1;HaplotypeScore=9.96;MQ=45.23;MQ0=1;OQ=1767.35;QD=9.61;SB=-110.22	GT:AD:DP:GL:GQ	0/1:119,64:165:-229.73,-49.72,-378.76:99
-chr1	2444114	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=1;HaplotypeScore=224.24;MQ=44.82;MQ0=1;OQ=1189.56;QD=7.12;SB=-484.53	GT:AD:DP:GL:GQ	0/1:105,62:153:-168.35,-46.11,-399.99:99
-chr1	2444123	rs60947977	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.00;HRun=1;HaplotypeScore=187.19;MQ=44.56;MQ0=1;OQ=222.03;QD=1.35;SB=140.46	GT:AD:DP:GL:GQ	0/1:146,18:145:-69.17,-43.68,-451.95:99
-chr1	2444144	rs12735280	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=41.21;MQ=45.78;MQ0=2;OQ=126.97;QD=0.80;SB=158.55	GT:AD:DP:GL:GQ	0/1:146,13:126:-53.98,-38.00,-474.20:99
-chr1	2444156	rs61763952	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=1;HaplotypeScore=50.63;MQ=44.65;MQ0=2;OQ=841.78;QD=5.89;SB=-177.38	GT:AD:DP:GL:GQ	0/1:107,36:119:-123.33,-35.87,-307.59:99
-chr1	2444175	.	A	G	1992.57	SnpCluster	AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=57.72;MQ=43.73;MQ0=1;QD=16.74;SB=-969.28	GT:AD:DP:GL:GQ	0/1:46,73:107:-234.78,-32.23,-167.74:99
-chr1	2444179	.	C	T	733.69	SnpCluster	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=1;HaplotypeScore=94.68;MQ=43.15;MQ0=1;QD=6.79;SB=-249.70	GT:AD:DP:GL:GQ	0/1:79,29:94:-104.98,-28.32,-236.84:99
-chr1	2444180	.	T	C	74.50	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=102.88;MQ=43.30;MQ0=1;QD=0.72;SB=40.74	GT:AD:DP:GL:GQ	0/1:89,15:92:-38.46,-27.73,-318.94:99
-chr1	2444188	.	C	T	230.63	SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=69.58;MQ=42.94;MQ0=1;QD=2.33;SB=-68.96	GT:AD:DP:GL:GQ	0/1:80,18:83:-51.35,-25.01,-254.74:99
-chr1	2444203	rs12723596	A	G	0.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=13.04;MQ=41.89;MQ0=1;OQ=932.46;QD=10.25;SB=-166.34	GT:AD:DP:GL:GQ	0/1:48,43:72:-118.23,-21.70,-146.57:99
-chr1	2444214	.	T	G	33.51	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=90.11;MQ=41.94;MQ0=0;QD=0.39;SB=20.19	GT:AD:DP:GL:GQ	0/1:75,10:71:-28.02,-21.39,-222.83:66.35
-chr1	2444236	rs3001351	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=1;HaplotypeScore=44.56;MQ=42.21;MQ0=1;OQ=1478.32;QD=13.82;SB=-341.03	GT:AD:DP:GL:GQ	0/1:32,75:79:-174.93,-23.81,-103.79:99
-chr1	2444239	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=57.18;MQ=42.22;MQ0=1;OQ=253.01;QD=2.32;SB=-45.72	GT:AD:DP:GL:GQ	0/1:94,15:81:-52.98,-24.40,-242.61:99
-chr1	2444569	rs2494625	T	C	30.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.30;MQ0=0;OQ=234.27;QD=7.10;SB=-122.64	GT:AD:DP:GL:GQ	0/1:20,13:30:-35.75,-9.04,-76.61:99
-chr1	2445722	rs12131236	C	T	283.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=971.15;QD=13.87;SB=-406.34	GT:AD:DP:GL:GQ	0/1:39,31:69:-121.19,-20.79,-133.37:99
-chr1	2446063	rs3122922	A	G	422.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.95;MQ0=0;OQ=840.10;QD=14.48;SB=-338.93	GT:AD:DP:GL:GQ	0/1:28,30:57:-104.46,-17.17,-113.53:99
-chr1	2452678	rs2494603	T	C	117.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.28;MQ0=0;OQ=471.49;QD=14.73;SB=-130.66	GT:AD:DP:GL:GQ	0/1:12,20:28:-58.88,-8.44,-38.02:99
-chr1	2452695	rs10910087	A	G	48.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=58.97;MQ0=0;OQ=650.54;QD=14.46;SB=-235.28	GT:AD:DP:GL:GQ	0/1:22,23:45:-81.90,-13.56,-89.06:99
-chr1	2453274	rs11583602	G	A	37.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=1048.89;QD=19.42;SB=-532.12	GT:AD:DP:GL:GQ	0/1:23,31:52:-123.83,-15.66,-80.52:99
-chr1	2453609	rs4648645	G	T	421.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=634.41;QD=13.22;SB=-255.25	GT:AD:DP:GL:GQ	0/1:25,23:48:-81.19,-14.46,-89.13:99
-chr1	2453905	rs6694195	G	A	6.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=641.00;QD=22.10;SB=-187.27	GT:AD:DP:GL:GQ	0/1:9,20:26:-75.22,-7.83,-25.34:99
-chr1	2454427	rs12406506	G	T	168.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.39;MQ0=0;OQ=384.63;QD=10.12;SB=-161.15	GT:AD:DP:GL:GQ	0/1:22,16:36:-52.59,-10.85,-75.30:99
-chr1	2454955	rs11585747	C	T	158.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.68;MQ0=0;OQ=442.85;QD=9.63;SB=-209.92	GT:AD:DP:GL:GQ	0/1:30,16:43:-60.53,-12.97,-87.57:99
-chr1	2455004	rs9803764	C	T	21.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=718.09;QD=21.76;SB=-255.79	GT:AD:DP:GL:GQ	0/1:12,21:31:-84.43,-9.34,-35.39:99
-chr1	2455189	rs11584295	G	A	326.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.30;MQ0=0;OQ=897.10;QD=14.95;SB=-369.89	GT:AD:DP:GL:GQ	0/1:30,30:57:-110.18,-17.19,-92.60:99
-chr1	2455531	rs4648561	T	C	59.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=60.00;MQ0=0;OQ=506.09;QD=9.04;SB=-221.92	GT:AD:DP:GL:GQ	0/1:28,28:51:-69.27,-15.38,-110.78:99
-chr1	2455652	rs3001339	C	T	0.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=3.44;MQ=59.16;MQ0=0;OQ=1028.71;QD=18.70;SB=-294.19	GT:AD:DP:GL:GQ	0/1:22,32:53:-122.12,-15.97,-77.91:99
-chr1	2455772	rs6661956	C	T	143.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=537.50;QD=14.93;SB=-189.16	GT:AD:DP:GL:GQ	0/1:19,17:35:-67.58,-10.55,-58.49:99
-chr1	2455810	rs2494605	A	G	6.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=3.59;MQ=59.41;MQ0=0;OQ=1343.57;QD=34.45;SB=-641.25	GT:AD:DP:GL:GQ	1/1:0,39:38:-137.96,-11.45,-0.01:99
-chr1	2456285	rs2985860	T	G	0.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=9.84;MQ=58.13;MQ0=0;OQ=394.22;QD=7.88;SB=-79.96	GT:AD:DP:GL:GQ	0/1:20,30:34:-52.96,-10.25,-63.38:99
-chr1	2456493	rs2494606	A	G	522.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1382.51;QD=30.72;SB=-394.30	GT:AD:DP:GL:GQ	1/1:0,45:44:-141.87,-13.27,-0.04:99
-chr1	2460535	.	T	C	626.63	Indel	AC=1;AF=0.50;AN=2;DP=47;Dels=0.04;HRun=0;HaplotypeScore=9.81;MQ=45.54;MQ0=0;QD=13.33;SB=-234.30	GT:AD:DP:GL:GQ	0/1:22,23:45:-78.90,-12.95,-84.01:99
-chr1	2460708	rs12042279	G	A	153.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=58.99;MQ0=0;OQ=696.74;QD=15.15;SB=-237.53	GT:AD:DP:GL:GQ	0/1:24,22:46:-86.83,-13.87,-76.84:99
-chr1	2461941	rs1886731	T	C	87.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=203.62;QD=14.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,9:14:-27.87,-4.22,-19.55:99
-chr1	2462004	rs4487972	G	C	44.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=56.62;MQ0=0;OQ=71.85;QD=10.26;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,4:6:-12.28,-1.81,-12.84:99
-chr1	2464065	rs942824	T	C	72.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.36;MQ0=0;OQ=370.87;QD=10.30;SB=-61.73	GT:AD:DP:GL:GQ	0/1:20,16:34:-50.61,-10.24,-77.88:99
-chr1	2465072	rs10797429	G	C	201.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=57.71;MQ0=0;OQ=487.96;QD=13.19;SB=-257.25	GT:AD:DP:GL:GQ	0/1:21,16:34:-62.33,-10.25,-80.32:99
-chr1	2465334	rs55929178	C	T	11.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.63;MQ=56.91;MQ0=0;OQ=721.66;QD=14.73;SB=-233.74	GT:AD:DP:GL:GQ	0/1:26,23:43:-88.40,-12.95,-74.05:99
-chr1	2467218	rs12097268	T	A	23.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=190.70;QD=11.22;SB=-35.94	GT:AD:DP:GL:GQ	0/1:9,8:17:-27.48,-5.13,-30.96:99
-chr1	2468371	rs2477678	T	A	119.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=60.00;MQ0=0;OQ=463.47;QD=13.24;SB=-147.88	GT:AD:DP:GL:GQ	0/1:17,17:32:-59.27,-9.64,-59.80:99
-chr1	2469843	rs1974044	A	G	45.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.40;MQ=59.34;MQ0=0;OQ=371.34;QD=10.61;SB=-193.60	GT:AD:DP:GL:GQ	0/1:21,14:32:-50.06,-9.64,-71.49:99
-chr1	2471303	.	C	T	62.24	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=41.42;MQ0=6;OQ=776.47;QD=14.38;SB=-282.22	GT:AD:DP:GL:GQ	0/1:29,25:42:-93.59,-12.66,-60.88:99
-chr1	2472781	rs2147905	T	C	210.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=57.08;MQ0=0;OQ=779.17;QD=15.90;SB=-258.93	GT:AD:DP:GL:GQ	0/1:21,26:47:-95.36,-14.16,-80.25:99
-chr1	2473130	rs3748825	T	C	24.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=50.53;MQ0=0;OQ=489.49;QD=14.40;SB=-174.97	GT:AD:DP:GL:GQ	0/1:17,17:34:-62.48,-10.24,-67.15:99
-chr1	2473158	rs2985858	C	G	170.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=52.63;MQ0=0;OQ=759.64;QD=17.67;SB=-375.14	GT:AD:DP:GL:GQ	0/1:22,21:42:-91.90,-12.65,-91.93:99
-chr1	2474608	rs4449972	T	C	1.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=17.16;MQ0=14;OQ=59.70;QD=2.60;SB=-42.68	GT:AD:DP:GL:GQ	0/1:13,10:7:-11.36,-2.11,-16.47:92.53
-chr1	2474629	rs2764846	G	T	13.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=13.44;MQ0=12;OQ=72.28;QD=4.25;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,10:3:-10.72,-0.90,-0.00:9.03
-chr1	2474959	rs10910088	A	G	3.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=22.58;MQ0=15;OQ=106.75;QD=3.44;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,14:12:-17.58,-3.63,-21.51:99
-chr1	2475164	rs2182176	C	T	397.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=48.51;MQ0=0;OQ=552.02;QD=13.14;SB=-223.69	GT:AD:DP:GL:GQ	0/1:24,18:39:-70.24,-11.76,-69.97:99
-chr1	2475556	rs1555791	C	G	11.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=2.88;MQ=58.58;MQ0=0;OQ=550.02;QD=11.96;SB=-241.08	GT:AD:DP:GL:GQ	0/1:27,19:40:-70.37,-12.08,-87.80:99
-chr1	2475800	rs10910089	C	A	3.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=9.04;MQ=58.28;MQ0=0;OQ=671.47;QD=13.70;SB=-238.39	GT:AD:DP:GL:GQ	0/1:23,26:46:-84.29,-13.86,-77.00:99
-chr1	2476366	rs61054170	G	A	7.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=6.03;MQ=57.64;MQ0=0;OQ=224.60;QD=8.64;SB=-97.61	GT:AD:DP:GL:GQ	0/1:16,10:23:-32.68,-6.93,-48.70:99
-chr1	2476391	rs2495365	T	C	262.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=56.62;MQ0=0;OQ=373.37;QD=12.04;SB=-190.59	GT:AD:DP:GL:GQ	0/1:16,15:29:-49.36,-8.74,-57.56:99
-chr1	2476740	rs11577783	T	C	207.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=58.69;MQ0=0;OQ=459.72;QD=9.19;SB=-194.29	GT:AD:DP:GL:GQ	0/1:30,20:49:-64.03,-14.78,-111.22:99
-chr1	2476777	rs7550231	C	T	162.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.21;MQ0=0;OQ=483.70;QD=13.44;SB=-69.05	GT:AD:DP:GL:GQ	0/1:20,15:32:-61.30,-9.65,-52.93:99
-chr1	2477765	rs7515633	T	C	23.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=58.71;MQ0=0;OQ=253.35;QD=14.07;SB=-51.83	GT:AD:DP:GL:GQ	0/1:8,10:18:-34.04,-5.43,-30.81:99
-chr1	2477769	rs7544646	G	C	297.66	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=6.07;MQ=56.04;MQ0=0;QD=16.54;SB=-32.86	GT:AD:DP:GL:GQ	0/1:9,9:14:-37.27,-4.22,-20.23:99
-chr1	2477776	.	G	C	10.29	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=1;HaplotypeScore=18.19;MQ=56.92;MQ0=0;QD=0.45;SB=20.10	GT:AD:DP:GL:GQ	0/1:13,10:13:-8.19,-3.92,-49.87:42.70
-chr1	2477778	.	A	C	172	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=2;HaplotypeScore=22.60;MQ=57.66;MQ0=0;QD=5.73;SB=23.08	GT:AD:DP:GL:GQ	0/1:12,18:21:-26.81,-6.33,-40.53:99
-chr1	2477836	rs2843396	C	G	11.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=59.36;MQ0=0;OQ=1290.53;QD=35.85;SB=-556.54	GT:AD:DP:GL:GQ	1/1:0,36:34:-132.68,-10.27,-0.04:99
-chr1	2478204	rs10910090	G	A	182.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.53;MQ0=0;OQ=449.68;QD=11.24;SB=-202.69	GT:AD:DP:GL:GQ	0/1:23,17:38:-59.71,-11.46,-71.62:99
-chr1	2479633	rs8725	C	T	49.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.46;MQ=59.51;MQ0=0;OQ=577.64;QD=12.29;SB=-219.70	GT:AD:DP:GL:GQ	0/1:27,20:42:-73.71,-12.66,-80.51:99
-chr1	2480088	rs2234167	C	T	215.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=60.00;MQ0=0;OQ=519.75;QD=13.33;SB=-131.13	GT:AD:DP:GL:GQ	0/1:22,17:38:-66.72,-11.46,-63.96:99
-chr1	2481753	rs11573988	C	A	159.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.54;MQ0=0;OQ=542.33;QD=13.23;SB=-158.65	GT:AD:DP:GL:GQ	0/1:20,21:37:-68.66,-11.14,-62.61:99
-chr1	2483213	rs2234161	G	A	326.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.71;MQ0=0;OQ=435.68;QD=12.10;SB=-173.67	GT:AD:DP:GL:GQ	0/1:20,16:32:-56.50,-9.65,-56.89:99
-chr1	2483476	rs2281852	G	T	352.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.50;MQ0=0;OQ=604.05;QD=13.13;SB=-299.46	GT:AD:DP:GL:GQ	0/1:23,23:43:-76.65,-12.96,-66.34:99
-chr1	2483520	rs2257763	G	T	186.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.87;MQ=58.41;MQ0=0;OQ=599.64;QD=13.63;SB=-190.60	GT:AD:DP:GL:GQ	0/1:21,23:41:-75.60,-12.36,-64.98:99
-chr1	2485488	rs2495366	C	T	214.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.54;MQ0=0;OQ=410.34;QD=10.01;SB=-177.87	GT:AD:DP:GL:GQ	0/1:24,17:33:-54.27,-9.95,-57.69:99
-chr1	2485810	rs1886730	A	G	395.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=201.47;QD=10.07;SB=-95.61	GT:AD:DP:GL:GQ	0/1:11,9:20:-29.46,-6.03,-42.35:99
-chr1	2486265	rs4870	T	C	17.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=53.94;MQ0=0;OQ=133.00;QD=5.54;SB=-10.85	GT:AD:DP:GL:GQ	0/1:16,8:22:-23.21,-6.63,-59.96:99
-chr1	2486652	rs2227313	A	G	323.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=361.41;QD=9.04;SB=-171.95	GT:AD:DP:GL:GQ	0/1:24,16:39:-51.18,-11.76,-90.45:99
-chr1	2486755	rs2227312	G	T	192.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.51;MQ0=0;OQ=435.37;QD=11.46;SB=-199.58	GT:AD:DP:GL:GQ	0/1:21,17:35:-57.36,-10.54,-70.01:99
-chr1	2489670	rs4449972	A	G	6.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=14.84;MQ0=21;OQ=104.96;QD=3.09;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,15:5:-15.28,-1.51,-4.27:27.62
-chr1	2489758	rs4385650	G	C	16.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=2.00;MQ=35.98;MQ0=1;OQ=450.14;QD=15.00;SB=-208.64	GT:AD:DP:GL:GQ	0/1:17,13:27:-56.44,-8.15,-54.66:99
-chr1	2490753	rs4648647	G	A	26.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.33;MQ=50.09;MQ0=0;OQ=371.65;QD=10.04;SB=-147.20	GT:AD:DP:GL:GQ	0/1:24,13:35:-51.00,-10.56,-68.63:99
-chr1	2490924	.	G	A	58.67	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=40.19;MQ0=3;OQ=773.22;QD=14.59;SB=-281.28	GT:AD:DP:GL:GQ	0/1:27,26:42:-93.26,-12.65,-67.56:99
-chr1	2491198	rs10797432	C	T	12.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=7.73;MQ=51.44;MQ0=1;OQ=449.43;QD=8.48;SB=-221.51	GT:AD:DP:GL:GQ	0/1:35,17:47:-62.39,-14.17,-101.99:99
-chr1	2491376	rs10910092	A	G	353.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.86;MQ0=0;OQ=953.50;QD=15.89;SB=-479.29	GT:AD:DP:GL:GQ	0/1:27,33:59:-116.41,-17.77,-105.03:99
-chr1	2491870	rs10797433	T	C	399.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.09;MQ0=0;OQ=643.74;QD=13.99;SB=-281.26	GT:AD:DP:GL:GQ	0/1:20,26:45:-81.22,-13.56,-79.26:99
-chr1	2492640	rs6667605	C	T	284.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1076.76;QD=20.32;SB=-511.53	GT:AD:DP:GL:GQ	0/1:22,31:53:-126.92,-15.96,-81.92:99
-chr1	2492694	rs6672381	A	G	59.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=2.96;MQ=59.67;MQ0=0;OQ=836.72;QD=14.68;SB=-261.21	GT:AD:DP:GL:GQ	0/1:25,31:56:-103.83,-16.88,-100.88:99
-chr1	2493042	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=3;HaplotypeScore=24.29;MQ=58.55;MQ0=0;OQ=229.07;QD=5.45;SB=41.17	GT:AD:DP:GL:GQ	0/1:24,18:31:-35.54,-9.35,-97.62:99
-chr1	2494094	rs6671426	C	A	112.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=782.65;QD=13.98;SB=-297.63	GT:AD:DP:GL:GQ	0/1:30,26:56:-98.41,-16.86,-108.17:99
-chr1	2494223	rs28734787	T	C	285.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.94;MQ=59.74;MQ0=0;OQ=1016.84;QD=14.32;SB=-488.08	GT:AD:DP:GL:GQ	0/1:37,34:71:-126.35,-21.38,-153.97:99
-chr1	2495573	rs10910093	C	T	602.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1162.34;QD=15.92;SB=-466.49	GT:AD:DP:GL:GQ	0/1:38,35:73:-141.53,-22.01,-121.32:99
-chr1	2496089	rs55658746	T	C	89.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=57.64;MQ0=0;OQ=790.54;QD=12.35;SB=-411.26	GT:AD:DP:GL:GQ	0/1:36,28:63:-101.32,-18.98,-139.07:99
-chr1	2496219	rs2477685	G	T	165.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=55.91;MQ0=0;OQ=1646.89;QD=32.29;SB=-779.73	GT:AD:DP:GL:GQ	1/1:1,50:48:-168.30,-14.46,-0.02:99
-chr1	2496348	rs10910094	C	T	138.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=47.91;MQ0=1;OQ=444.30;QD=9.66;SB=-141.63	GT:AD:DP:GL:GQ	0/1:26,19:40:-59.77,-12.06,-79.45:99
-chr1	2497303	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=4;HaplotypeScore=6.77;MQ=59.20;MQ0=0;OQ=63.06;QD=2.17;SB=17.06	GT:AD:DP:GL:GQ	0/1:13,16:15:-14.11,-4.52,-33.25:95.89
-chr1	2497798	rs10752745	A	G	23.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.74;MQ=53.22;MQ0=0;OQ=566.34;QD=12.59;SB=-208.51	GT:AD:DP:GL:GQ	0/1:24,21:42:-72.57,-12.65,-89.49:99
-chr1	2498203	rs6675676	G	C	138.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=30.17;MQ0=2;OQ=540.65;QD=15.02;SB=-227.70	GT:AD:DP:GL:GQ	0/1:18,18:32:-67.01,-9.66,-62.30:99
-chr1	2500615	rs10910095	G	A	293.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.83;MQ0=0;OQ=619.40;QD=15.49;SB=-326.87	GT:AD:DP:GL:GQ	0/1:18,21:35:-75.77,-10.55,-51.15:99
-chr1	2501140	rs10797434	C	T	359.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=59.72;MQ0=0;OQ=1006.21;QD=15.25;SB=-442.36	GT:AD:DP:GL:GQ	0/1:35,31:65:-123.49,-19.58,-121.16:99
-chr1	2501248	rs12129508	G	A	509.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1099.72;QD=18.33;SB=-426.78	GT:AD:DP:GL:GQ	0/1:28,32:59:-131.03,-17.77,-95.59:99
-chr1	2502312	rs4648648	G	A	10.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.67;MQ=56.86;MQ0=0;OQ=538.80;QD=17.96;SB=-254.77	GT:AD:DP:GL:GQ	0/1:13,17:27:-65.30,-8.13,-39.62:99
-chr1	2502510	rs4648649	T	C	255.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.39;MQ0=0;OQ=590.46;QD=13.42;SB=-228.32	GT:AD:DP:GL:GQ	0/1:17,27:40:-74.40,-12.07,-60.31:99
-chr1	2502570	rs10910096	T	C	112.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.22;MQ0=0;OQ=671.99;QD=19.20;SB=-218.66	GT:AD:DP:GL:GQ	0/1:13,22:35:-81.03,-10.54,-52.21:99
-chr1	2502755	.	G	A	190.59	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=20;HaplotypeScore=16.86;MQ=48.05;MQ0=1;QD=2.32;SB=89.22	GT:AD:DP:GL:GQ	0/1:62,20:60:-40.44,-18.10,-157.12:99
-chr1	2502759	.	G	A	95.63	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=4;HaplotypeScore=8.02;MQ=49.03;MQ0=1;QD=1.15;SB=92.21	GT:AD:DP:GL:GQ	0/1:62,21:60:-30.94,-18.09,-170.87:99
-chr1	2502764	.	G	A	61.94	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=4;HaplotypeScore=11.73;MQ=52.06;MQ0=1;QD=0.77;SB=101.27	GT:AD:DP:GL:GQ	0/1:64,16:66:-29.37,-19.89,-196.86:94.78
-chr1	2502769	.	G	A	36.83	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=4;HaplotypeScore=29.21;MQ=54.00;MQ0=1;QD=0.49;SB=101.32	GT:AD:DP:GL:GQ	0/1:66,9:67:-27.16,-20.19,-206.36:69.66
-chr1	2502915	rs4486391	A	T	575.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=706.11;QD=12.61;SB=-348.36	GT:AD:DP:GL:GQ	0/1:31,25:55:-90.46,-16.56,-121.47:99
-chr1	2502965	rs735000	C	T	134.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.41;MQ0=0;OQ=774.05;QD=19.85;SB=-347.38	GT:AD:DP:GL:GQ	0/1:16,23:37:-91.84,-11.15,-44.36:99
-chr1	2503076	rs734999	C	T	284.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=51.96;MQ0=0;OQ=837.38;QD=13.51;SB=-164.65	GT:AD:DP:GL:GQ	0/1:35,27:61:-105.40,-18.37,-127.82:99
-chr1	2503492	rs2016175	C	G	123.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=50.82;MQ0=0;OQ=1084.11;QD=19.71;SB=-398.00	GT:AD:DP:GL:GQ	0/1:24,31:54:-127.97,-16.28,-102.13:99
-chr1	2503538	rs2016366	A	T	76.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=3.79;MQ=51.20;MQ0=0;OQ=1061.50;QD=16.33;SB=-509.95	GT:AD:DP:GL:GQ	0/1:31,34:63:-128.41,-18.98,-104.88:99
-chr1	2504435	rs2094074	C	T	20.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=6.13;MQ=59.30;MQ0=0;OQ=1039.69;QD=17.04;SB=-426.84	GT:AD:DP:GL:GQ	0/1:29,32:61:-125.64,-18.39,-96.67:99
-chr1	2506299	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=15.52;MQ=57.83;MQ0=0;OQ=93.19;QD=2.39;SB=56.19	GT:AD:DP:GL:GQ	0/1:27,12:31:-21.95,-9.34,-90.63:99
-chr1	2511290	rs10910097	C	T	251.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.70;MQ0=0;OQ=1148.10;QD=18.52;SB=-511.69	GT:AD:DP:GL:GQ	0/1:27,35:61:-136.47,-18.38,-99.00:99
-chr1	2512252	rs2296443	G	A	195.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.53;MQ0=0;OQ=544.43;QD=13.61;SB=-235.74	GT:AD:DP:GL:GQ	0/1:18,22:33:-67.68,-9.95,-51.18:99
-chr1	2515036	.	A	C	42.97	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.51;MQ0=0;OQ=337.76;QD=7.68;SB=-183.81	GT:AD:DP:GL:GQ	0/1:27,17:42:-49.72,-12.66,-93.24:99
-chr1	2517538	rs2260976	A	G	4.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.14;MQ=56.76;MQ0=0;OQ=1272.91;QD=31.05;SB=-372.36	GT:AD:DP:GL:GQ	1/1:0,41:39:-130.90,-11.76,-0.03:99
-chr1	2517993	rs2843401	T	C	105.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=57.77;MQ0=0;OQ=962.33;QD=26.73;SB=-342.23	GT:AD:DP:GL:GQ	1/1:0,36:31:-99.85,-9.36,-0.04:93.19
-chr1	2518542	rs2843402	T	C	221.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=60.00;MQ0=0;OQ=1968.59;QD=35.79;SB=-942.98	GT:AD:DP:GL:GQ	1/1:0,55:55:-200.46,-16.56,-0.01:99
-chr1	2518859	rs2764845	G	T	123.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=60.00;MQ0=0;OQ=1822.58;QD=33.75;SB=-893.66	GT:AD:DP:GL:GQ	1/1:0,54:52:-185.86,-15.67,-0.02:99
-chr1	2518957	rs2843403	T	C	21.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=1.02;MQ=56.17;MQ0=0;OQ=926.62;QD=29.89;SB=-317.56	GT:AD:DP:GL:GQ	1/1:0,31:28:-96.27,-8.44,-0.02:84.21
-chr1	2519052	rs2764842	A	G	76.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1201.00;QD=30.79;SB=-460.21	GT:AD:DP:GL:GQ	1/1:0,39:38:-123.72,-11.46,-0.03:99
-chr1	2519220	rs2764841	G	A	268.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=59.01;MQ0=0;OQ=1602.47;QD=34.10;SB=-756.02	GT:AD:DP:GL:GQ	1/1:0,46:43:-163.85,-12.96,-0.02:99
-chr1	2519297	rs2764840	C	T	22.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=57.55;MQ0=0;OQ=1701.90;QD=37.00;SB=-691.34	GT:AD:DP:GL:GQ	1/1:0,46:43:-173.78,-12.95,-0.01:99
-chr1	2520418	rs2843404	T	C	200.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.75;MQ0=0;OQ=2535.27;QD=33.80;SB=-857.06	GT:AD:DP:GL:GQ	1/1:0,75:73:-257.13,-21.99,-0.02:99
-chr1	2520554	rs2764848	G	A	508.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2620.71;QD=40.32;SB=-1288.71	GT:AD:DP:GL:GQ	1/1:0,65:65:-265.67,-19.58,-0.01:99
-chr1	2521232	rs2985855	A	C	625.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.53;MQ0=0;OQ=2344.13;QD=34.47;SB=-1125.14	GT:AD:DP:GL:GQ	1/1:0,68:67:-238.02,-20.18,-0.02:99
-chr1	2521327	rs6689711	T	C	152.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.71;MQ0=0;OQ=2140.18;QD=32.93;SB=-405.31	GT:AD:DP:GL:GQ	1/1:0,65:64:-217.64,-19.29,-0.04:99
-chr1	2521365	rs6681973	C	T	205.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1951.81;QD=38.27;SB=-716.95	GT:AD:DP:GL:GQ	1/1:0,51:50:-198.79,-15.07,-0.02:99
-chr1	2521374	rs6682043	C	A	555.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1757.71;QD=35.87;SB=-715.96	GT:AD:DP:GL:GQ	1/1:0,49:49:-179.37,-14.76,-0.01:99
-chr1	2521839	.	A	G	1244.02	Indel	AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.74;MQ0=0;QD=31.90;SB=-233.75	GT:AD:DP:GL:GQ	1/1:1,38:37:-132.07,-11.15,-4.08:70.65
-chr1	2522276	rs2985859	T	C	630.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.35;MQ0=0;OQ=2205.91;QD=35.58;SB=-1051.93	GT:AD:DP:GL:GQ	1/1:0,62:62:-224.19,-18.67,-0.02:99
-chr1	2522366	rs3001837	G	A	528.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.76;MQ0=0;OQ=2660.16;QD=39.12;SB=-1251.03	GT:AD:DP:GL:GQ	1/1:0,68:68:-269.62,-20.49,-0.02:99
-chr1	2522484	rs2985857	C	T	472.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=3579.52;QD=41.62;SB=-1476.96	GT:AD:DP:GL:GQ	1/1:0,86:86:-356.95,-25.90,-0.02:99
-chr1	2522759	rs6424092	C	A	529.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2798.98;QD=36.83;SB=-1322.91	GT:AD:DP:GL:GQ	1/1:0,76:75:-283.50,-22.58,-0.01:99
-chr1	2523213	.	A	C	18.95	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=2;HaplotypeScore=7.65;MQ=59.48;MQ0=0;QD=0.43;SB=47.15	GT:AD:DP:GL:GQ	0/1:27,17:32:-14.82,-9.65,-87.52:51.73
-chr1	2530333	.	T	C	29.61	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=7.38;MQ=54.61;MQ0=1;QD=0.64;SB=33.57	GT:AD:DP:GL:GQ	0/1:37,5:39:-21.30,-15.06,-133.42:62.44
-chr1	2530381	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=20.91;MQ=54.33;MQ0=2;OQ=131.02;QD=2.85;SB=56.21	GT:AD:DP:GL:GQ	0/1:39,7:40:-28.44,-12.05,-138.25:99
-chr1	2537888	rs4379628	A	G	6.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.46;MQ=59.75;MQ0=0;OQ=2299.26;QD=31.07;SB=-964.39	GT:AD:DP:GL:GQ	1/1:0,74:72:-233.58,-21.72,-0.07:99
-chr1	2541362	.	T	C	301.82	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=1099.72;QD=15.94;SB=-567.63	GT:AD:DP:GL:GQ	0/1:31,38:67:-133.44,-20.18,-122.76:99
-chr1	2541645	rs12117343	C	T	412.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.64;MQ0=0;OQ=1073.30;QD=16.77;SB=-513.05	GT:AD:DP:GL:GQ	0/1:32,32:63:-129.60,-18.99,-99.14:99
-chr1	2543980	rs61765771	T	G	318.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=635.63;QD=14.45;SB=-332.88	GT:AD:DP:GL:GQ	0/1:20,24:43:-79.80,-12.95,-72.63:99
-chr1	2546847	.	G	A	17.21	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.27;MQ0=0;OQ=1072.92;QD=19.87;SB=-329.89	GT:AD:DP:GL:GQ	0/1:19,35:49:-125.34,-14.77,-58.33:99
-chr1	2547051	rs7523364	C	T	194.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=55.15;MQ0=0;OQ=3310.62;QD=39.41;SB=-1353.31	GT:AD:DP:GL:GQ	1/1:0,84:83:-330.06,-25.01,-0.03:99
-chr1	2547391	rs6422657	C	T	186.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=2783.42;QD=38.13;SB=-1334.38	GT:AD:DP:GL:GQ	1/1:1,71:72:-284.61,-21.69,-2.69:99
-chr1	2548168	rs6668149	A	C	205.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.44;MQ0=0;OQ=2627.68;QD=35.04;SB=-1288.37	GT:AD:DP:GL:GQ	1/1:0,75:74:-266.37,-22.29,-0.02:99
-chr1	2548600	rs12748729	C	T	627.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2890.24;QD=37.05;SB=-1331.37	GT:AD:DP:GL:GQ	1/1:0,78:77:-292.65,-23.21,-0.04:99
-chr1	2549449	rs12730932	T	G	82.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.16;MQ0=0;OQ=1601.53;QD=32.03;SB=-737.35	GT:AD:DP:GL:GQ	1/1:0,50:47:-163.76,-14.16,-0.02:99
-chr1	2550595	rs4648657	A	G	5.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.33;MQ0=0;OQ=350.17;QD=25.01;SB=-43.68	GT:AD:DP:GL:GQ	1/1:0,14:13:-38.62,-3.93,-0.02:39.06
-chr1	2550742	rs4648658	G	A	10.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.23;MQ0=0;OQ=551.80;QD=32.46;SB=-125.66	GT:AD:DP:GL:GQ	1/1:0,17:15:-58.77,-4.52,-0.01:45.14
-chr1	2550763	rs4648659	T	G	0.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=309.18;QD=19.32;SB=-86.14	GT:AD:DP:GL:GQ	1/1:0,16:12:-34.52,-3.62,-0.02:36.01
-chr1	2551146	rs28532547	T	G	110.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=53.21;MQ0=0;OQ=1059.23;QD=30.26;SB=-548.02	GT:AD:DP:GL:GQ	1/1:0,35:32:-109.53,-9.64,-0.02:96.26
-chr1	2552029	rs4648564	C	T	0.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=7.47;MQ=58.85;MQ0=1;OQ=2625.23;QD=39.18;SB=-1028.39	GT:AD:DP:GL:GQ	1/1:1,66:66:-266.13,-19.88,-0.02:99
-chr1	2553110	rs12749591	G	T	349.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=723.50;QD=32.89;SB=-266.61	GT:AD:DP:GL:GQ	1/1:0,22:22:-75.95,-6.63,-0.01:66.17
-chr1	2553270	.	G	T	45.57	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=10.71;MQ=58.27;MQ0=0;QD=1.69;SB=20.06	GT:AD:DP:GL:GQ	0/1:17,10:20:-13.87,-6.03,-50.95:78.40
-chr1	2554043	rs6698817	T	C	9.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=887.43;QD=26.89;SB=-424.17	GT:AD:DP:GL:GQ	1/1:0,33:29:-92.36,-8.75,-0.03:87.20
-chr1	2554325	rs12752515	T	C	17.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.11;MQ0=0;OQ=775.65;QD=29.83;SB=-403.34	GT:AD:DP:GL:GQ	1/1:0,26:25:-81.17,-7.54,-0.02:75.18
-chr1	2554665	rs12723864	A	G	160.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=60.00;MQ0=0;OQ=414.17;QD=9.86;SB=-197.61	GT:AD:DP:GL:GQ	0/1:26,16:42:-57.35,-12.65,-104.43:99
-chr1	2555187	rs55649610	G	T	258.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=951.34;QD=20.68;SB=-431.11	GT:AD:DP:GL:GQ	0/1:14,32:46:-112.28,-13.86,-47.81:99
-chr1	2555885	.	C	T	1.81	PASS	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=57.89;MQ0=0;OQ=690.84;QD=23.82;SB=-291.84	GT:AD:DP:GL:GQ	0/1:8,21:28:-80.81,-8.44,-25.16:99
-chr1	2556197	.	T	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=11.22;MQ=54.79;MQ0=0;OQ=66.20;QD=3.31;SB=-59.09	GT:AD:DP:GL:GQ	0/1:16,4:14:-14.12,-4.22,-33.87:99
-chr1	2556342	rs6657378	T	G	21.29	LowQual	AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=3.31;MQ=37.32;MQ0=0;QD=3.04;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,2:5:-6.92,-1.51,-9.22:54.10
-chr1	2556350	rs6671623	G	A	0.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=6.12;MQ=40.03;MQ0=1;OQ=207.84;QD=25.98;SB=-95.34	GT:AD:DP:GL:GQ	1/1:1,7:6:-24.36,-1.81,-0.00:18.06
-chr1	2556357	rs6671625	G	A	182.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.68;MQ0=1;OQ=89.01;QD=14.84;SB=-50.56	GT:AD:DP:GL:GQ	1/1:1,5:3:-12.39,-0.90,-0.00:9.03
-chr1	2556483	rs61765773	C	T	0.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=11.29;MQ=45.87;MQ0=1;OQ=153.35;QD=5.11;SB=26.06	GT:AD:DP:GL:GQ	0/1:23,7:20:-24.65,-6.03,-43.69:99
-chr1	2556797	rs61765774	G	C	178.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.58;MQ0=0;OQ=587.02;QD=17.79;SB=-197.49	GT:AD:DP:GL:GQ	0/1:16,17:32:-71.63,-9.64,-64.58:99
-chr1	2557281	rs12756665	C	T	187.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.25;MQ=59.28;MQ0=0;OQ=722.29;QD=11.29;SB=-327.75	GT:AD:DP:GL:GQ	0/1:40,24:64:-94.79,-19.28,-146.15:99
-chr1	2557351	rs12739597	A	G	96.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.10;MQ0=0;OQ=470.82;QD=7.03;SB=-215.20	GT:AD:DP:GL:GQ	0/1:44,23:67:-70.56,-20.20,-177.79:99
-chr1	2557360	rs6666788	A	G	33.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=2.28;MQ=59.11;MQ0=0;OQ=2385.56;QD=35.08;SB=-1067.87	GT:AD:DP:GL:GQ	1/1:0,68:67:-242.16,-20.18,-0.02:99
-chr1	2558285	rs4648661	T	C	264.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.76;MQ0=0;OQ=708.13;QD=11.80;SB=-352.07	GT:AD:DP:GL:GQ	0/1:29,30:58:-91.59,-17.49,-110.76:99
-chr1	2559883	rs4648565	A	G	68.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=1657.37;QD=34.53;SB=-734.30	GT:AD:DP:GL:GQ	1/1:0,48:47:-169.34,-14.16,-0.02:99
-chr1	2561683	rs28690427	A	G	44.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.48;MQ0=0;OQ=1625.27;QD=33.17;SB=-564.36	GT:AD:DP:GL:GQ	1/1:0,49:47:-166.13,-14.16,-0.02:99
-chr1	2563059	rs4648662	A	G	36.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=57.88;MQ0=0;OQ=986.78;QD=31.83;SB=-278.44	GT:AD:DP:GL:GQ	1/1:0,30:28:-102.27,-8.43,-0.01:84.25
-chr1	2563587	rs4648663	A	C	432.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1398.67;QD=33.30;SB=-656.05	GT:AD:DP:GL:GQ	1/1:0,42:41:-143.47,-12.35,-0.02:99
-chr1	2563763	rs12726651	C	T	270.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.90;MQ0=0;OQ=164.81;QD=9.69;SB=-74.06	GT:AD:DP:GL:GQ	0/1:11,6:16:-24.59,-4.82,-34.68:99
-chr1	2563938	rs9970196	T	C	22.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.81;MQ=59.28;MQ0=0;OQ=1014.31;QD=31.70;SB=-295.06	GT:AD:DP:GL:GQ	1/1:0,32:30:-105.04,-9.04,-0.02:90.22
-chr1	2566315	rs6604989	T	C	18.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1647.45;QD=28.40;SB=-794.64	GT:AD:DP:GL:GQ	1/1:0,58:52:-168.38,-15.68,-0.05:99
-chr1	2568080	rs12744876	G	T	183.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=58.84;MQ0=0;OQ=1106.09;QD=17.02;SB=-318.70	GT:AD:DP:GL:GQ	0/1:29,35:64:-133.17,-19.27,-104.78:99
-chr1	2571402	rs28611770	A	G	632.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.32;MQ0=1;OQ=2534.42;QD=35.20;SB=-1124.79	GT:AD:DP:GL:GQ	1/1:0,72:70:-257.05,-21.08,-0.02:99
-chr1	2571473	.	C	T	26.42	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=54.51;MQ0=1;OQ=420.48;QD=8.58;SB=-192.15	GT:AD:DP:GL:GQ	0/1:33,16:41:-57.68,-12.35,-93.81:99
-chr1	2571476	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=3;HaplotypeScore=3.65;MQ=54.65;MQ0=1;OQ=290.92;QD=5.94;SB=-124.22	GT:AD:DP:GL:GQ	0/1:34,15:41:-44.73,-12.36,-110.26:99
-chr1	2571505	.	C	T	0.62	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=52.42;MQ0=0;OQ=231.01;QD=4.20;SB=-18.13	GT:AD:DP:GL:GQ	0/1:42,13:52:-42.05,-15.67,-144.47:99
-chr1	2571527	.	A	T	14.96	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=51.64;MQ0=0;OQ=434.87;QD=7.91;SB=-142.65	GT:AD:DP:GL:GQ	0/1:35,20:51:-62.14,-15.37,-122.01:99
-chr1	2572200	rs12732266	C	G	51.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=5.49;MQ=58.04;MQ0=0;OQ=559.70;QD=11.91;SB=-261.11	GT:AD:DP:GL:GQ	0/1:26,21:41:-71.62,-12.36,-99.19:99
-chr1	2573315	rs12738064	C	T	887.13	DPFilter;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=171.89;MQ=24.26;MQ0=9;QD=6.67;SB=-137.01	GT:AD:DP:GL:GQ	1/1:10,119:25:-96.41,-11.12,-4.11:70.06
-chr1	2573322	.	T	G	343.20	DPFilter;SnpCluster	AC=2;AF=1.00;AN=2;DP=144;Dels=0.01;HRun=0;HaplotypeScore=333.45;MQ=22.10;MQ0=11;QD=2.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:29,104:11:-37.91,-3.31,-0.00:33.09
-chr1	2573323	.	C	G	95.88	DPFilter;SnpCluster	AC=2;AF=1.00;AN=2;DP=144;Dels=0.01;HRun=1;HaplotypeScore=342.46;MQ=22.10;MQ0=11;QD=0.67;SB=-10.00	GT:AD:DP:GL:GQ	1/1:103,36:3:-13.08,-0.90,-0.00:9.03
-chr1	2573324	.	G	C	506.46	DPFilter;Indel;SnpCluster	AC=2;AF=1.00;AN=2;DP=147;Dels=0.01;HRun=1;HaplotypeScore=339.64;MQ=22.28;MQ0=11;QD=3.45;SB=-10.00	GT:AD:DP:GL:GQ	1/1:15,116:14:-57.88,-7.75,-3.65:41.01
-chr1	2573329	rs12734173	G	A	146.94	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=218;Dels=0.00;HRun=1;HaplotypeScore=513.41;MQ=21.01;MQ0=20;QD=0.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:132,84:24:-25.21,-7.23,-67.73:99
-chr1	2573338	.	C	G	83.26	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=710.09;MQ=20.03;MQ0=40;QD=0.29;SB=-0.97	GT:AD:DP:GL:GQ	0/1:254,26:38:-23.06,-11.45,-135.55:99
-chr1	2573342	.	C	A	213.70	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=322;Dels=0.00;HRun=1;HaplotypeScore=673.88;MQ=20.07;MQ0=46;QD=0.66;SB=1.99	GT:AD:DP:GL:GQ	0/1:277,45:41:-37.01,-12.35,-108.15:99
-chr1	2573345	.	A	C	1425.86	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=338;Dels=0.02;HRun=3;HaplotypeScore=632.90;MQ=20.26;MQ0=48;QD=4.22;SB=-172.79	GT:AD:DP:GL:GQ	0/1:132,186:90:-176.25,-30.38,-146.77:99
-chr1	2573350	.	T	C	293.04	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=399;Dels=0.00;HRun=0;HaplotypeScore=691.94;MQ=19.84;MQ0=54;QD=0.73;SB=44.71	GT:AD:DP:GL:GQ	0/1:277,71:78:-104.74,-72.15,-238.43:99
-chr1	2573354	.	C	A	62.42	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=1;HaplotypeScore=848.73;MQ=19.94;MQ0=56;QD=0.14;SB=50.16	GT:AD:DP:GL:GQ	0/1:379,40:51:-24.89,-15.36,-155.69:95.25
-chr1	2573358	.	T	C	129.61	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=457;Dels=0.00;HRun=1;HaplotypeScore=683.78;MQ=19.93;MQ0=58;QD=0.28;SB=-34.65	GT:AD:DP:GL:GQ	0/1:367,56:52:-42.68,-26.43,-169.09:99
-chr1	2573364	rs55738582	C	G	575.47	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=473;Dels=0.00;HRun=1;HaplotypeScore=961.37;MQ=19.71;MQ0=62;QD=1.22;SB=-67.52	GT:AD:DP:GL:GQ	0/1:411,23:43:-73.79,-12.96,-105.12:99
-chr1	2573370	rs55790383	G	A	775.08	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=470;Dels=0.00;HRun=1;HaplotypeScore=917.62;MQ=19.72;MQ0=61;QD=1.65;SB=-367.90	GT:AD:DP:GL:GQ	0/1:265,173:48:-98.76,-17.97,-89.48:99
-chr1	2573371	rs55657722	G	C	3489.08	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=470;Dels=0.00;HRun=0;HaplotypeScore=944.58;MQ=19.72;MQ0=61;QD=7.42;SB=-1002.13	GT:AD:DP:GL:GQ	1/1:47,398:84:-347.91,-28.85,-3.68:99
-chr1	2573372	.	A	G	46.25	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=482;Dels=0.00;HRun=2;HaplotypeScore=999.26;MQ=19.79;MQ0=62;QD=0.10;SB=26.11	GT:AD:DP:GL:GQ	0/1:425,48:54:-24.18,-16.27,-184.96:79.08
-chr1	2573374	.	C	A	193.31	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=490;Dels=0.00;HRun=1;HaplotypeScore=979.59;MQ=19.99;MQ0=60;QD=0.39;SB=-75.64	GT:AD:DP:GL:GQ	0/1:438,45:65:-48.93,-26.32,-189.47:99
-chr1	2573382	.	C	A	261.06	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=502;Dels=0.01;HRun=1;HaplotypeScore=946.29;MQ=19.95;MQ0=64;QD=0.52;SB=17.04	GT:AD:DP:GL:GQ	0/1:391,72:71:-67.99,-38.60,-197.52:99
-chr1	2573383	.	C	G	55.13	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=502;Dels=0.00;HRun=0;HaplotypeScore=899.21;MQ=20.04;MQ0=63;QD=0.11;SB=37.79	GT:AD:DP:GL:GQ	0/1:438,33:65:-35.38,-26.59,-240.37:87.97
-chr1	2573385	.	C	A	145.75	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=503;Dels=0.00;HRun=0;HaplotypeScore=828.45;MQ=20.02;MQ0=64;QD=0.29;SB=-23.06	GT:AD:DP:GL:GQ	0/1:432,48:49:-35.99,-18.13,-141.74:99
-chr1	2573390	.	T	C	166.49	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=483;Dels=0.01;HRun=0;HaplotypeScore=660.44;MQ=20.15;MQ0=61;QD=0.34;SB=-43.82	GT:AD:DP:GL:GQ	0/1:342,96:43:-35.67,-15.74,-120.66:99
-chr1	2573404	rs56352113	A	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=412;Dels=0.00;HRun=1;HaplotypeScore=785.14;MQ=20.24;MQ0=50;OQ=1746.05;QD=4.24;SB=-272.76	GT:AD:DP:GL:GQ	1/1:48,316:72:-242.08,-66.55,-63.89:26.61
-chr1	2573410	rs12759490	A	G	148.65	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DB;DP=383;Dels=0.00;HRun=0;HaplotypeScore=682.21;MQ=20.35;MQ0=44;QD=0.39;SB=-43.26	GT:AD:DP:GL:GQ	0/1:276,96:57:-35.34,-17.19,-178.84:99
-chr1	2573423	.	C	A	163.64	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=1;HaplotypeScore=927.03;MQ=21.34;MQ0=33;QD=0.58;SB=26.07	GT:AD:DP:GL:GQ	0/1:224,38:48:-34.11,-14.46,-128.40:99
-chr1	2573426	.	C	A	487.43	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=598.86;MQ=21.74;MQ0=31;QD=1.77;SB=-144.61	GT:AD:DP:GL:GQ	0/1:229,39:67:-72.21,-20.18,-167.89:99
-chr1	2573431	.	T	A	55.01	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=0;HaplotypeScore=414.88;MQ=22.20;MQ0=23;QD=0.23;SB=-37.64	GT:AD:DP:GL:GQ	0/1:198,17:62:-42.64,-33.85,-190.83:87.85
-chr1	2573439	rs12738268	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=199;Dels=0.00;HRun=0;HaplotypeScore=197.41;MQ=23.56;MQ0=17;OQ=1379.28;QD=6.93;SB=-473.52	GT:AD:DP:GL:GQ	0/1:75,107:51:-156.58,-15.37,-36.65:99
-chr1	2573442	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=0;HaplotypeScore=181.20;MQ=23.67;MQ0=14;OQ=103.36;QD=0.53;SB=32.13	GT:AD:DP:GL:GQ	0/1:179,11:55:-39.39,-25.77,-162.27:99
-chr1	2573451	.	A	G	329.45	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=156;Dels=0.00;HRun=0;HaplotypeScore=168.85;MQ=25.71;MQ0=9;QD=2.11;SB=-36.23	GT:AD:DP:GL:GQ	0/1:80,76:54:-52.50,-16.27,-154.97:99
-chr1	2573454	rs55760918	C	G	556.39	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=0;HaplotypeScore=206.74;MQ=26.90;MQ0=8;QD=3.97;SB=-52.80	GT:AD:DP:GL:GQ	0/1:46,88:51:-74.30,-15.38,-138.45:99
-chr1	2573455	rs56258540	A	C	134.39	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=145;Dels=0.00;HRun=1;HaplotypeScore=218.70;MQ=26.73;MQ0=9;QD=0.93;SB=-34.89	GT:AD:DP:GL:GQ	0/1:91,52:51:-34.62,-17.90,-142.52:99
-chr1	2573485	rs55714819	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=241;Dels=0.00;HRun=1;HaplotypeScore=172.11;MQ=27.92;MQ0=9;OQ=766.38;QD=3.18;SB=-61.60	GT:AD:DP:GL:GQ	0/1:152,84:106:-115.24,-35.32,-271.38:99
-chr1	2573510	rs61765777	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=332;Dels=0.00;HRun=1;HaplotypeScore=336.11;MQ=27.14;MQ0=14;OQ=2271.13;QD=6.84;SB=-383.23	GT:AD:DP:GL:GQ	0/1:103,229:130:-269.56,-39.16,-232.28:99
-chr1	2573523	.	C	T	271.88	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=476;Dels=0.00;HRun=0;HaplotypeScore=388.59;MQ=26.03;MQ0=25;QD=0.57;SB=-54.44	GT:AD:DP:GL:GQ	0/1:421,51:171:-82.00,-51.53,-495.80:99
-chr1	2573524	.	G	A	673.59	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=489;Dels=0.00;HRun=0;HaplotypeScore=381.72;MQ=26.07;MQ0=26;QD=1.38;SB=-235.66	GT:AD:DP:GL:GQ	0/1:348,136:174:-123.14,-52.50,-452.42:99
-chr1	2573532	.	A	G	266.78	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=584;Dels=0.00;HRun=0;HaplotypeScore=454.81;MQ=26.29;MQ0=38;QD=0.46;SB=-50.09	GT:AD:DP:GL:GQ	0/1:462,118:225:-100.76,-70.80,-803.69:99
-chr1	2573533	.	C	T	518.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=590;Dels=0.00;HRun=0;HaplotypeScore=454.86;MQ=26.25;MQ0=38;QD=0.88;SB=-177.22	GT:AD:DP:GL:GQ	0/1:555,34:221:-123.94,-68.80,-639.87:99
-chr1	2573545	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=760;Dels=0.00;HRun=0;HaplotypeScore=554.01;MQ=25.28;MQ0=58;OQ=2752.41;QD=3.62;SB=-334.08	GT:AD:DP:GL:GQ	0/1:504,247:275:-368.19,-89.67,-758.94:99
-chr1	2573551	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=816;Dels=0.00;HRun=0;HaplotypeScore=706.82;MQ=24.77;MQ0=61;OQ=92.57;QD=0.11;SB=99.33	GT:AD:DP:GL:GQ	0/1:767,48:306:-104.74,-92.20,-1021.89:99
-chr1	2573560	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=935;Dels=0.00;HRun=0;HaplotypeScore=771.90;MQ=24.19;MQ0=82;OQ=1354.07;QD=1.45;SB=-436.68	GT:AD:DP:GL:GQ	0/1:723,199:339:-248.95,-110.26,-942.99:99
-chr1	2573563	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=967;Dels=0.00;HRun=0;HaplotypeScore=867.36;MQ=23.97;MQ0=86;OQ=1389.93;QD=1.44;SB=161.22	GT:AD:DP:GL:GQ	0/1:819,137:345:-262.46,-120.18,-962.42:99
-chr1	2573572	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1012;Dels=0.00;HRun=0;HaplotypeScore=731.51;MQ=23.62;MQ0=98;OQ=634.63;QD=0.63;SB=-79.47	GT:AD:DP:GL:GQ	0/1:773,210:334:-172.80,-106.05,-1139.69:99
-chr1	2573600	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=878;Dels=0.00;HRun=0;HaplotypeScore=653.71;MQ=23.12;MQ0=120;OQ=1122.68;QD=1.28;SB=-567.08	GT:AD:DP:GL:GQ	0/1:678,154:296:-246.10,-130.55,-807.07:99
-chr1	2573603	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=862;Dels=0.00;HRun=0;HaplotypeScore=618.67;MQ=23.10;MQ0=123;OQ=316.50;QD=0.37;SB=-169.71	GT:AD:DP:GL:GQ	0/1:783,67:305:-136.37,-101.44,-918.41:99
-chr1	2573643	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=406;Dels=0.00;HRun=0;HaplotypeScore=240.70;MQ=22.59;MQ0=105;OQ=101.01;QD=0.25;SB=40.47	GT:AD:DP:GL:GQ	0/1:341,64:133:-53.47,-40.09,-445.02:99
-chr1	2573645	.	T	G	27.32	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=393;Dels=0.00;HRun=0;HaplotypeScore=214.15;MQ=22.61;MQ0=102;QD=0.07;SB=22.12	GT:AD:DP:GL:GQ	0/1:333,60:125:-43.68,-37.67,-396.83:60.15
-chr1	2573659	rs28581291	G	C	4615.63	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=333;Dels=0.00;HRun=1;HaplotypeScore=205.79;MQ=24.13;MQ0=78;QD=13.86;SB=-1212.00	GT:AD:DP:GL:GQ	0/1:35,294:132:-460.56,-39.52,-82.06:99
-chr1	2573662	.	C	T	559.05	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=280.21;MQ=24.11;MQ0=79;QD=1.58;SB=-274.91	GT:AD:DP:GL:GQ	0/1:309,45:145:-102.89,-43.70,-398.94:99
-chr1	2573665	.	C	G	1510.34	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=0;HaplotypeScore=325.78;MQ=24.58;MQ0=76;QD=3.70;SB=-297.94	GT:AD:DP:GL:GQ	0/1:264,141:179:-211.73,-57.41,-536.45:99
-chr1	2573688	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=651;Dels=0.00;HRun=2;HaplotypeScore=395.85;MQ=24.99;MQ0=65;OQ=362.26;QD=0.56;SB=-155.57	GT:AD:DP:GL:GQ	0/1:581,65:307:-140.30,-100.79,-1081.14:99
-chr1	2573689	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=665;Dels=0.00;HRun=0;HaplotypeScore=525.06;MQ=24.91;MQ0=65;OQ=1827.67;QD=2.75;SB=-517.28	GT:AD:DP:GL:GQ	0/1:550,112:319:-282.15,-96.10,-903.12:99
-chr1	2573699	rs28514305	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=700;Dels=0.00;HRun=1;HaplotypeScore=627.89;MQ=25.13;MQ0=51;OQ=504.00;QD=0.72;SB=-50.28	GT:AD:DP:GL:GQ	0/1:553,135:325:-164.84,-111.15,-1100.31:99
-chr1	2573722	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=939;Dels=0.00;HRun=0;HaplotypeScore=511.14;MQ=24.55;MQ0=41;OQ=652.05;QD=0.69;SB=-156.78	GT:AD:DP:GL:GQ	0/1:833,100:448:-203.46,-134.97,-1376.56:99
-chr1	2573743	.	C	A	1376.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=920;Dels=0.01;HRun=1;HaplotypeScore=1049.31;MQ=24.03;MQ0=45;QD=1.50;SB=-654.94	GT:AD:DP:GL:GQ	0/1:771,125:393:-273.72,-132.79,-1119.66:99
-chr1	2573744	.	C	A	2246.36	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=920;Dels=0.00;HRun=0;HaplotypeScore=1100.48;MQ=24.05;MQ0=45;QD=2.44;SB=-774.39	GT:AD:DP:GL:GQ	0/1:696,198:389:-363.03,-135.11,-1033.83:99
-chr1	2573747	.	C	T	2541.21	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=900;Dels=0.00;HRun=0;HaplotypeScore=1014.50;MQ=23.93;MQ0=43;QD=2.82;SB=-593.64	GT:AD:DP:GL:GQ	0/1:671,157:361:-422.27,-164.86,-953.11:99
-chr1	2573753	.	A	T	936.20	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=863;Dels=0.00;HRun=0;HaplotypeScore=1289.29;MQ=23.50;MQ0=46;QD=1.08;SB=-444.50	GT:AD:DP:GL:GQ	0/1:735,98:311:-195.18,-98.28,-961.18:99
-chr1	2573759	.	C	T	306.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=786;Dels=0.00;HRun=0;HaplotypeScore=944.88;MQ=23.40;MQ0=46;QD=0.39;SB=80.59	GT:AD:DP:GL:GQ	0/1:568,186:262:-146.29,-112.39,-779.46:99
-chr1	2573762	.	C	T	1224.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=751;Dels=0.00;HRun=0;HaplotypeScore=1008.25;MQ=23.38;MQ0=43;QD=1.63;SB=32.31	GT:AD:DP:GL:GQ	0/1:549,181:260:-207.81,-82.08,-705.47:99
-chr1	2573768	.	G	A	69.35	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=690;Dels=0.00;HRun=0;HaplotypeScore=1128.47;MQ=23.25;MQ0=39;QD=0.10;SB=181.10	GT:AD:DP:GL:GQ	0/1:645,45:222:-77.09,-66.88,-732.33:99
-chr1	2573775	rs61765778	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=598;Dels=0.00;HRun=0;HaplotypeScore=829.09;MQ=23.11;MQ0=35;OQ=51.56;QD=0.09;SB=-51.39	GT:AD:DP:GL:GQ	0/1:411,178:176:-78.89,-70.45,-552.62:84.40
-chr1	2573784	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=482;Dels=0.00;HRun=0;HaplotypeScore=533.05;MQ=23.86;MQ0=35;OQ=97.06;QD=0.20;SB=-41.06	GT:AD:DP:GL:GQ	0/1:428,39:135:-57.53,-44.54,-428.93:99
-chr1	2573791	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=376;Dels=0.00;HRun=0;HaplotypeScore=279.62;MQ=25.08;MQ0=23;OQ=809.10;QD=2.15;SB=-122.99	GT:AD:DP:GL:GQ	0/1:249,119:103:-122.37,-38.18,-240.78:99
-chr1	2573803	rs61765779	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=0;HaplotypeScore=273.29;MQ=27.85;MQ0=11;OQ=738.52;QD=3.10;SB=-305.23	GT:AD:DP:GL:GQ	0/1:82,152:68:-97.64,-20.50,-141.62:99
-chr1	2573809	rs61765805	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=1;HaplotypeScore=207.51;MQ=30.86;MQ0=7;OQ=486.71;QD=2.85;SB=-123.47	GT:AD:DP:GL:GQ	0/1:47,107:55:-75.59,-23.64,-159.88:99
-chr1	2573825	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.04;HRun=2;HaplotypeScore=133.51;MQ=37.12;MQ0=1;OQ=152.18;QD=1.48;SB=68.24	GT:AD:DP:GL:GQ	0/1:42,51:50:-47.81,-29.31,-160.18:99
-chr1	2573831	rs55855140	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=126.91;MQ=39.65;MQ0=1;OQ=158.89;QD=1.62;SB=62.19	GT:AD:DP:GL:GQ	0/1:53,43:46:-39.96,-20.79,-124.08:99
-chr1	2573842	.	A	C	115.63	SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=142.04;MQ=40.93;MQ0=1;QD=1.17;SB=-71.86	GT:AD:DP:GL:GQ	0/1:45,45:51:-30.22,-15.37,-141.99:99
-chr1	2573846	rs61765806	C	G	427.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=158.02;MQ=39.65;MQ0=2;QD=3.34;SB=50.19	GT:AD:DP:GL:GQ	0/1:94,33:65:-65.70,-19.61,-201.59:99
-chr1	2573851	.	G	A	820.83	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=1;HaplotypeScore=122.19;MQ=40.52;MQ0=2;QD=5.86;SB=-152.15	GT:AD:DP:GL:GQ	0/1:66,72:74:-107.66,-22.30,-166.53:99
-chr1	2573859	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=126.84;MQ=40.41;MQ0=2;OQ=121.72;QD=0.77;SB=152.53	GT:AD:DP:GL:GQ	0/1:122,36:93:-43.49,-28.03,-346.24:99
-chr1	2573901	rs35515286	G	C	550.86	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=206;Dels=0.00;HRun=0;HaplotypeScore=105.96;MQ=43.03;MQ0=1;QD=2.67;SB=237.50	GT:AD:DP:GL:GQ	0/1:135,63:142:-119.31,-60.94,-520.06:99
-chr1	2573904	.	G	C	824.37	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=3;HaplotypeScore=109.03;MQ=42.87;MQ0=2;QD=4.04;SB=193.35	GT:AD:DP:GL:GQ	0/1:129,71:137:-131.62,-45.90,-468.47:99
-chr1	2573907	.	C	T	232.33	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=169.38;MQ=41.15;MQ0=2;QD=0.99;SB=246.29	GT:AD:DP:GL:GQ	0/1:198,35:151:-72.01,-45.49,-466.42:99
-chr1	2573937	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=313;Dels=0.00;HRun=2;HaplotypeScore=156.05;MQ=41.48;MQ0=6;OQ=610.21;QD=1.95;SB=184.28	GT:AD:DP:GL:GQ	0/1:179,131:178:-121.09,-56.78,-561.52:99
-chr1	2573955	rs4648664	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=309;Dels=0.01;HRun=0;HaplotypeScore=189.00;MQ=39.75;MQ0=9;OQ=5144.30;QD=16.65;SB=-1373.56	GT:AD:DP:GL:GQ	0/1:99,207:204:-513.43,-64.42,-219.84:99
-chr1	2573957	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=210.03;MQ=39.51;MQ0=9;OQ=1411.76;QD=4.57;SB=186.52	GT:AD:DP:GL:GQ	0/1:164,144:192:-204.89,-60.43,-482.07:99
-chr1	2573977	rs36074084	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=329;Dels=0.14;HRun=3;HaplotypeScore=420.13;MQ=34.94;MQ0=9;OQ=1855.95;QD=5.64;SB=145.19	GT:AD:DP:GL:GQ	0/1:152,125:193:-244.66,-55.78,-561.08:99
-chr1	2573987	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=436;Dels=0.02;HRun=3;HaplotypeScore=523.62;MQ=29.87;MQ0=18;OQ=97.02;QD=0.22;SB=235.20	GT:AD:DP:GL:GQ	0/1:315,109:216:-76.87,-63.88,-657.84:99
-chr1	2574006	rs56001931	C	A	193.50	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=578;Dels=0.00;HRun=0;HaplotypeScore=796.32;MQ=26.82;MQ0=27;QD=0.33;SB=-95.26	GT:AD:DP:GL:GQ	0/1:506,46:197:-84.56,-61.92,-620.37:99
-chr1	2574010	.	G	A	47.43	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=576;Dels=0.00;HRun=1;HaplotypeScore=936.31;MQ=26.86;MQ0=27;QD=0.08;SB=305.98	GT:AD:DP:GL:GQ	0/1:514,37:196:-70.15,-62.12,-641.00:80.27
-chr1	2574012	.	G	A	1112.09	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=567;Dels=0.00;HRun=1;HaplotypeScore=881.66;MQ=26.70;MQ0=27;QD=1.96;SB=173.94	GT:AD:DP:GL:GQ	0/1:337,218:205:-176.25,-61.76,-573.77:99
-chr1	2574013	rs35375421	G	C	2739.83	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=556;Dels=0.00;HRun=0;HaplotypeScore=907.42;MQ=26.74;MQ0=27;QD=4.93;SB=-98.82	GT:AD:DP:GL:GQ	0/1:185,358:186:-340.69,-63.42,-477.87:99
-chr1	2574046	rs61765808	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=633;Dels=0.00;HRun=1;HaplotypeScore=769.62;MQ=25.77;MQ0=33;OQ=2369.47;QD=3.74;SB=-14.31	GT:AD:DP:GL:GQ	0/1:214,394:219:-332.81,-92.58,-459.77:99
-chr1	2574062	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=571;Dels=0.02;HRun=0;HaplotypeScore=1395.05;MQ=27.31;MQ0=25;OQ=270.74;QD=0.47;SB=9.21	GT:AD:DP:GL:GQ	0/1:393,159:156:-79.45,-49.09,-466.84:99
-chr1	2574081	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=574;Dels=0.00;HRun=0;HaplotypeScore=636.02;MQ=28.62;MQ0=23;OQ=102.79;QD=0.18;SB=258.30	GT:AD:DP:GL:GQ	0/1:339,178:156:-99.87,-86.31,-482.50:99
-chr1	2574099	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=481;Dels=0.01;HRun=2;HaplotypeScore=469.12;MQ=32.08;MQ0=15;OQ=332.15;QD=0.69;SB=-15.43	GT:AD:DP:GL:GQ	0/1:184,278:155:-88.85,-52.35,-456.19:99
-chr1	2574112	rs4648665	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=407;Dels=0.00;HRun=1;HaplotypeScore=376.40;MQ=32.86;MQ0=13;OQ=5520.38;QD=13.56;SB=-1708.96	GT:AD:DP:GL:GQ	1/1:7,385:151:-551.04,-45.49,-0.05:99
-chr1	2574233	rs6678571	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=482;Dels=0.00;HRun=0;HaplotypeScore=317.44;MQ=37.14;MQ0=103;OQ=51.18;QD=0.11;SB=33.13	GT:AD:DP:GL:GQ	0/1:400,76:222:-75.35,-66.94,-654.61:84.02
-chr1	2574280	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=0;HaplotypeScore=206.24;MQ=40.63;MQ0=25;OQ=702.83;QD=1.71;SB=165.25	GT:AD:DP:GL:GQ	0/1:262,145:248:-148.35,-74.78,-882.77:99
-chr1	2574370	rs56005609	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=224;Dels=0.00;HRun=0;HaplotypeScore=51.47;MQ=47.47;MQ0=12;OQ=160.10;QD=0.71;SB=-105.06	GT:AD:DP:GL:GQ	0/1:203,21:172:-71.19,-51.89,-483.26:99
-chr1	2574383	rs4648666	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=0;HaplotypeScore=154.22;MQ=48.52;MQ0=8;OQ=4531.65;QD=21.08;SB=-1293.59	GT:AD:DP:GL:GQ	0/1:45,169:169:-452.16,-50.92,-131.50:99
-chr1	2574398	rs4648667	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=297;Dels=0.00;HRun=0;HaplotypeScore=177.69;MQ=43.72;MQ0=17;OQ=1775.91;QD=5.98;SB=-869.96	GT:AD:DP:GL:GQ	0/1:211,86:190:-238.16,-57.29,-446.26:99
-chr1	2574435	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=784;Dels=0.00;HRun=0;HaplotypeScore=476.42;MQ=30.94;MQ0=61;OQ=552.66;QD=0.70;SB=-126.39	GT:AD:DP:GL:GQ	0/1:497,287:235:-129.39,-70.84,-631.70:99
-chr1	2574468	.	A	C	45.91	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=925;Dels=0.00;HRun=3;HaplotypeScore=499.34;MQ=30.78;MQ0=79;QD=0.05;SB=344.95	GT:AD:DP:GL:GQ	0/1:799,98:301:-105.40,-97.53,-960.73:78.74
-chr1	2574499	.	C	A	22.95	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=665;Dels=0.00;HRun=2;HaplotypeScore=681.86;MQ=36.15;MQ0=63;QD=0.03;SB=89.36	GT:AD:DP:GL:GQ	0/1:533,92:270:-145.98,-140.40,-853.73:55.76
-chr1	2574516	rs61765812	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=416;Dels=0.00;HRun=0;HaplotypeScore=217.32;MQ=43.57;MQ0=35;OQ=129.59;QD=0.31;SB=68.68	GT:AD:DP:GL:GQ	0/1:278,133:243:-89.48,-73.24,-851.13:99
-chr1	2574566	rs28558799	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=282;Dels=0.00;HRun=0;HaplotypeScore=119.44;MQ=43.46;MQ0=13;OQ=5625.16;QD=19.95;SB=-2459.11	GT:AD:DP:GL:GQ	0/1:49,230:200:-561.52,-60.25,-174.15:99
-chr1	2574594	rs56062029	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=452;Dels=0.00;HRun=2;HaplotypeScore=294.75;MQ=33.13;MQ0=30;OQ=1117.30;QD=2.47;SB=-453.09	GT:AD:DP:GL:GQ	0/1:369,56:211:-181.97,-66.96,-565.43:99
-chr1	2574621	rs57267388	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=571;Dels=0.00;HRun=0;HaplotypeScore=771.91;MQ=31.23;MQ0=33;OQ=342.14;QD=0.60;SB=-185.77	GT:AD:DP:GL:GQ	0/1:283,102:222:-153.52,-116.02,-729.22:99
-chr1	2574649	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=993;Dels=0.00;HRun=0;HaplotypeScore=693.61;MQ=28.27;MQ0=75;OQ=1079.32;QD=1.09;SB=-556.01	GT:AD:DP:GL:GQ	0/1:844,137:401:-235.64,-124.42,-1471.20:99
-chr1	2574659	.	A	C	29.66	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=980;Dels=0.00;HRun=3;HaplotypeScore=948.25;MQ=27.73;MQ0=79;QD=0.03;SB=242.38	GT:AD:DP:GL:GQ	0/1:842,123:385:-128.64,-122.39,-1217.71:62.50
-chr1	2574737	rs61765814	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=400;Dels=0.00;HRun=0;HaplotypeScore=203.09;MQ=41.26;MQ0=24;OQ=736.68;QD=1.84;SB=-0.60	GT:AD:DP:GL:GQ	0/1:202,185:205:-145.42,-68.47,-717.91:99
-chr1	2574757	rs61765815	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=370;Dels=0.00;HRun=0;HaplotypeScore=249.27;MQ=42.55;MQ0=25;OQ=384.28;QD=1.04;SB=73.46	GT:AD:DP:GL:GQ	0/1:205,136:201:-108.67,-66.96,-637.57:99
-chr1	2574806	rs61765816	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=433;Dels=0.00;HRun=0;HaplotypeScore=271.20;MQ=41.78;MQ0=23;OQ=447.69;QD=1.03;SB=-108.45	GT:AD:DP:GL:GQ	0/1:271,156:236:-119.20,-71.14,-762.60:99
-chr1	2574851	rs6691639	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=333;Dels=0.00;HRun=0;HaplotypeScore=216.92;MQ=45.13;MQ0=5;OQ=7151.39;QD=21.48;SB=-2958.67	GT:AD:DP:GL:GQ	0/1:25,306:212:-714.14,-63.86,-81.27:99
-chr1	2574904	rs6604990	T	C	6413.62	DPFilter;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=427;Dels=0.06;HRun=3;HaplotypeScore=563.84;MQ=34.54;MQ0=9;QD=15.02;SB=-2045.14	GT:AD:DP:GL:GQ	1/1:119,272:189:-640.36,-56.34,-15.02:99
-chr1	2574911	.	A	C	149.58	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=456;Dels=0.00;HRun=3;HaplotypeScore=557.08;MQ=32.46;MQ0=11;QD=0.33;SB=-79.57	GT:AD:DP:GL:GQ	0/1:298,141:171:-69.76,-51.52,-530.42:99
-chr1	2574914	.	A	G	786.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=464;Dels=0.02;HRun=1;HaplotypeScore=590.68;MQ=31.99;MQ0=11;QD=1.70;SB=-166.87	GT:AD:DP:GL:GQ	0/1:189,264:184:-140.25,-58.27,-581.91:99
-chr1	2574924	rs61765818	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=562;Dels=0.00;HRun=1;HaplotypeScore=584.85;MQ=29.44;MQ0=16;OQ=664.13;QD=1.18;SB=-72.04	GT:AD:DP:GL:GQ	0/1:412,132:178:-126.09,-56.39,-566.98:99
-chr1	2574942	rs60506177	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=681;Dels=0.00;HRun=2;HaplotypeScore=1240.22;MQ=29.22;MQ0=28;OQ=4364.77;QD=6.41;SB=-1487.53	GT:AD:DP:GL:GQ	0/1:160,495:256:-435.48,-89.03,-503.32:99
-chr1	2574956	rs59191334	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=906;Dels=0.00;HRun=0;HaplotypeScore=851.71;MQ=29.72;MQ0=44;OQ=1149.69;QD=1.27;SB=-284.23	GT:AD:DP:GL:GQ	0/1:632,252:274:-200.91,-82.66,-713.01:99
-chr1	2574986	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=944;Dels=0.00;HRun=1;HaplotypeScore=1818.61;MQ=31.01;MQ0=59;OQ=1122.41;QD=1.19;SB=-398.32	GT:AD:DP:GL:GQ	0/1:745,146:351:-246.18,-130.65,-980.48:99
-chr1	2575019	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=719;Dels=0.00;HRun=0;HaplotypeScore=472.84;MQ=36.86;MQ0=62;OQ=2013.75;QD=2.80;SB=-548.67	GT:AD:DP:GL:GQ	0/1:509,205:351:-310.40,-105.75,-919.85:99
-chr1	2575034	rs61763547	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=646;Dels=0.00;HRun=1;HaplotypeScore=246.19;MQ=38.01;MQ0=57;OQ=1218.08;QD=1.89;SB=297.56	GT:AD:DP:GL:GQ	0/1:304,285:351:-300.74,-175.64,-1150.43:99
-chr1	2575068	.	C	G	824.18	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=841;Dels=0.00;HRun=0;HaplotypeScore=834.43;MQ=32.24;MQ0=93;QD=0.98;SB=69.34	GT:AD:DP:GL:GQ	0/1:592,151:395:-352.89,-267.19,-1451.52:99
-chr1	2575069	rs11510858	C	A	2054.73	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=851;Dels=0.00;HRun=0;HaplotypeScore=833.69;MQ=32.03;MQ0=94;QD=2.41;SB=-732.04	GT:AD:DP:GL:GQ	0/1:701,130:386:-337.44,-128.68,-1037.66:99
-chr1	2575076	.	C	G	56.74	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=869;Dels=0.00;HRun=2;HaplotypeScore=716.58;MQ=31.37;MQ0=95;QD=0.07;SB=276.82	GT:AD:DP:GL:GQ	0/1:773,41:392:-146.00,-137.04,-1458.73:89.57
-chr1	2575191	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=619;Dels=0.01;HRun=3;HaplotypeScore=666.18;MQ=32.68;MQ0=22;OQ=1037.47;QD=1.68;SB=-98.59	GT:AD:DP:GL:GQ	0/1:385,224:265:-186.87,-79.84,-734.84:99
-chr1	2575196	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=669;Dels=0.00;HRun=0;HaplotypeScore=585.81;MQ=31.95;MQ0=25;OQ=410.40;QD=0.61;SB=138.71	GT:AD:DP:GL:GQ	0/1:518,139:278:-128.14,-83.81,-902.17:99
-chr1	2575224	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=936;Dels=0.00;HRun=0;HaplotypeScore=711.05;MQ=30.70;MQ0=52;OQ=206.48;QD=0.22;SB=16.18	GT:AD:DP:GL:GQ	0/1:817,101:399:-165.30,-141.37,-1545.34:99
-chr1	2575246	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=981;Dels=0.00;HRun=1;HaplotypeScore=733.47;MQ=31.11;MQ0=67;OQ=1892.73;QD=1.93;SB=-760.65	GT:AD:DP:GL:GQ	0/1:771,204:430:-322.12,-129.56,-1274.76:99
-chr1	2575261	rs6692051	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=945;Dels=0.00;HRun=3;HaplotypeScore=358.84;MQ=32.03;MQ0=68;OQ=2338.43;QD=2.47;SB=-661.83	GT:AD:DP:GL:GQ	0/1:802,142:427:-365.78,-128.65,-1131.84:99
-chr1	2575299	.	G	T	161.49	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=614;Dels=0.00;HRun=1;HaplotypeScore=591.39;MQ=37.63;MQ0=50;QD=0.26;SB=20.79	GT:AD:DP:GL:GQ	0/1:494,69:362:-227.05,-207.62,-1136.93:99
-chr1	2575300	rs61765821	T	C	1192.57	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=603;Dels=0.00;HRun=0;HaplotypeScore=567.88;MQ=38.04;MQ0=47;QD=1.98;SB=-535.85	GT:AD:DP:GL:GQ	0/1:348,222:348:-246.80,-124.26,-1045.28:99
-chr1	2575308	.	C	A	283.33	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=591;Dels=0.00;HRun=1;HaplotypeScore=502.16;MQ=39.21;MQ0=53;QD=0.48;SB=90.50	GT:AD:DP:GL:GQ	0/1:465,102:356:-142.06,-110.45,-1099.38:99
-chr1	2575350	rs28411086	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=541;Dels=0.00;HRun=2;HaplotypeScore=281.76;MQ=38.20;MQ0=48;OQ=2021.31;QD=3.74;SB=-545.18	GT:AD:DP:GL:GQ	0/1:247,291:277:-288.88,-83.46,-673.01:99
-chr1	2575391	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=992;Dels=0.00;HRun=2;HaplotypeScore=510.05;MQ=30.36;MQ0=68;OQ=227.39;QD=0.23;SB=145.08	GT:AD:DP:GL:GQ	0/1:854,132:434:-160.44,-134.42,-1359.22:99
-chr1	2575398	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1075;Dels=0.00;HRun=0;HaplotypeScore=310.34;MQ=30.19;MQ0=65;OQ=528.27;QD=0.49;SB=20.12	GT:AD:DP:GL:GQ	0/1:895,162:479:-203.83,-147.72,-1593.06:99
-chr1	2575422	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1315;Dels=0.00;HRun=1;HaplotypeScore=628.02;MQ=29.05;MQ0=70;OQ=417.47;QD=0.32;SB=307.23	GT:AD:DP:GL:GQ	0/1:1146,168:592:-223.40,-178.37,-1814.12:99
-chr1	2575443	rs6678990	C	G	1968.81	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=1397;Dels=0.00;HRun=0;HaplotypeScore=834.10;MQ=29.41;MQ0=63;QD=1.41;SB=-880.90	GT:AD:DP:GL:GQ	0/1:1263,104:657:-428.32,-228.16,-2407.74:99
-chr1	2575448	.	C	T	306.07	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=1347;Dels=0.00;HRun=0;HaplotypeScore=969.72;MQ=29.55;MQ0=58;QD=0.23;SB=98.85	GT:AD:DP:GL:GQ	0/1:1166,127:596:-237.42,-203.53,-1765.67:99
-chr1	2575453	.	G	A	633.22	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=1324;Dels=0.01;HRun=0;HaplotypeScore=1094.28;MQ=29.55;MQ0=52;QD=0.48;SB=22.83	GT:AD:DP:GL:GQ	0/1:1098,210:631:-255.45,-188.85,-1774.06:99
-chr1	2575459	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1275;Dels=0.00;HRun=1;HaplotypeScore=976.35;MQ=29.72;MQ0=48;OQ=260.30;QD=0.20;SB=456.22	GT:AD:DP:GL:GQ	0/1:1186,88:626:-217.90,-188.59,-2068.65:99
-chr1	2575467	.	A	T	1827.05	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=1257;Dels=0.00;HRun=0;HaplotypeScore=1002.71;MQ=30.06;MQ0=39;QD=1.45;SB=-471.84	GT:AD:DP:GL:GQ	0/1:1025,208:608:-372.29,-186.30,-1881.69:99
-chr1	2575472	.	C	A	9687.38	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=1255;Dels=0.00;HRun=1;HaplotypeScore=858.65;MQ=30.07;MQ0=41;QD=7.72;SB=-1503.87	GT:AD:DP:GL:GQ	0/1:729,316:639:-967.74,-542.07,-1662.70:99
-chr1	2575476	rs28479903	C	T	328.26	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=1232;Dels=0.00;HRun=0;HaplotypeScore=989.29;MQ=30.12;MQ0=43;QD=0.27;SB=122.56	GT:AD:DP:GL:GQ	0/1:1040,174:572:-219.19,-183.08,-1716.97:99
-chr1	2575484	rs61765822	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=1214;Dels=0.00;HRun=0;HaplotypeScore=468.08;MQ=30.51;MQ0=43;OQ=1888.53;QD=1.56;SB=-874.96	GT:AD:DP:GL:GQ	0/1:984,212:602:-396.91,-204.77,-1679.64:99
-chr1	2575509	rs7367485	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=1003;Dels=0.00;HRun=3;HaplotypeScore=708.39;MQ=31.59;MQ0=44;OQ=1317.31;QD=1.31;SB=-683.17	GT:AD:DP:GL:GQ	0/1:599,311:447:-397.20,-262.18,-1298.11:99
-chr1	2575527	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=899;Dels=0.00;HRun=1;HaplotypeScore=616.46;MQ=32.40;MQ0=36;OQ=2129.63;QD=2.37;SB=-658.87	GT:AD:DP:GL:GQ	0/1:666,188:432:-362.76,-146.52,-1154.94:99
-chr1	2575536	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=816;Dels=0.00;HRun=1;HaplotypeScore=629.02;MQ=33.06;MQ0=36;OQ=245.82;QD=0.30;SB=187.48	GT:AD:DP:GL:GQ	0/1:660,150:389:-147.61,-119.74,-1232.57:99
-chr1	2575553	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=672;Dels=0.00;HRun=0;HaplotypeScore=869.01;MQ=35.62;MQ0=23;OQ=1048.35;QD=1.56;SB=44.73	GT:AD:DP:GL:GQ	0/1:542,123:340:-220.20,-112.08,-1057.17:99
-chr1	2575577	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=529;Dels=0.00;HRun=0;HaplotypeScore=616.14;MQ=41.10;MQ0=11;OQ=295.55;QD=0.56;SB=93.12	GT:AD:DP:GL:GQ	0/1:363,155:340:-135.27,-102.43,-1079.29:99
-chr1	2575583	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=497;Dels=0.00;HRun=0;HaplotypeScore=739.15;MQ=41.67;MQ0=9;OQ=177.97;QD=0.36;SB=340.79	GT:AD:DP:GL:GQ	0/1:426,63:314:-122.58,-101.50,-1218.09:99
-chr1	2575632	rs6686754	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=363;Dels=0.00;HRun=1;HaplotypeScore=439.13;MQ=46.08;MQ0=4;OQ=7215.73;QD=19.88;SB=-2967.87	GT:AD:DP:GL:GQ	0/1:59,294:248:-720.57,-74.71,-189.55:99
-chr1	2575661	rs28498367	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=482;Dels=0.00;HRun=0;HaplotypeScore=598.03;MQ=41.57;MQ0=4;OQ=4453.10;QD=9.24;SB=-977.05	GT:AD:DP:GL:GQ	0/1:194,269:275:-444.31,-82.91,-730.02:99
-chr1	2575692	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=647;Dels=0.00;HRun=1;HaplotypeScore=594.08;MQ=36.97;MQ0=17;OQ=2155.18;QD=3.33;SB=272.10	GT:AD:DP:GL:GQ	0/1:259,365:295:-329.81,-111.01,-802.38:99
-chr1	2575711	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=667;Dels=0.00;HRun=3;HaplotypeScore=1191.59;MQ=36.49;MQ0=18;OQ=1467.43;QD=2.20;SB=-170.23	GT:AD:DP:GL:GQ	0/1:245,407:245:-231.00,-80.98,-619.30:99
-chr1	2575718	.	C	T	91.63	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=668;Dels=0.07;HRun=0;HaplotypeScore=726.36;MQ=36.74;MQ0=18;QD=0.14;SB=390.06	GT:AD:DP:GL:GQ	0/1:453,157:278:-93.88,-81.43,-798.07:99
-chr1	2575725	.	C	T	321.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=662;Dels=0.00;HRun=1;HaplotypeScore=724.85;MQ=36.17;MQ0=17;QD=0.49;SB=411.17	GT:AD:DP:GL:GQ	0/1:600,56:323:-132.74,-97.29,-1057.81:99
-chr1	2575728	.	A	T	148.72	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=660;Dels=0.00;HRun=0;HaplotypeScore=737.53;MQ=36.50;MQ0=17;QD=0.23;SB=417.37	GT:AD:DP:GL:GQ	0/1:600,48:321:-114.85,-96.69,-1096.48:99
-chr1	2575731	.	G	A	128.25	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=638;Dels=0.00;HRun=1;HaplotypeScore=523.34;MQ=37.45;MQ0=16;QD=0.20;SB=259.66	GT:AD:DP:GL:GQ	0/1:525,83:335:-143.82,-127.71,-1107.68:99
-chr1	2575750	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=473;Dels=0.00;HRun=1;HaplotypeScore=339.24;MQ=40.86;MQ0=6;OQ=314.90;QD=0.67;SB=-156.95	GT:AD:DP:GL:GQ	0/1:417,42:281:-123.25,-88.47,-781.88:99
-chr1	2575766	rs6694964	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=418;Dels=0.00;HRun=0;HaplotypeScore=190.54;MQ=43.00;MQ0=6;OQ=9217.59;QD=22.05;SB=-3555.11	GT:AD:DP:GL:GQ	0/1:33,383:267:-920.76,-80.43,-83.85:34.20
-chr1	2575784	rs28583924	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=426;Dels=0.00;HRun=0;HaplotypeScore=272.61;MQ=42.95;MQ0=8;OQ=181.28;QD=0.43;SB=6.29	GT:AD:DP:GL:GQ	0/1:359,64:257:-98.92,-77.51,-960.45:99
-chr1	2575825	rs6689281	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=557;Dels=0.01;HRun=2;HaplotypeScore=469.61;MQ=35.81;MQ0=25;OQ=9475.08;QD=17.01;SB=-3650.18	GT:AD:DP:GL:GQ	1/1:3,541:282:-946.51,-86.27,-2.51:99
-chr1	2575851	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=634;Dels=0.00;HRun=0;HaplotypeScore=686.59;MQ=33.18;MQ0=30;OQ=77.00;QD=0.12;SB=-18.66	GT:AD:DP:GL:GQ	0/1:437,151:251:-86.73,-75.75,-723.32:99
-chr1	2575861	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=670;Dels=0.00;HRun=0;HaplotypeScore=1084.95;MQ=32.16;MQ0=34;OQ=174.30;QD=0.26;SB=144.01	GT:AD:DP:GL:GQ	0/1:448,201:255:-97.68,-76.97,-707.97:99
-chr1	2575918	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=659;Dels=0.00;HRun=0;HaplotypeScore=602.10;MQ=33.55;MQ0=33;OQ=1205.47;QD=1.83;SB=-331.68	GT:AD:DP:GL:GQ	0/1:520,139:294:-212.43,-88.60,-836.61:99
-chr1	2575963	rs61765824	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=414;Dels=0.00;HRun=0;HaplotypeScore=225.65;MQ=45.71;MQ0=16;OQ=175.37;QD=0.42;SB=-3.54	GT:AD:DP:GL:GQ	0/1:256,154:262:-99.81,-78.99,-882.64:99
-chr1	2576027	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=375;Dels=0.00;HRun=0;HaplotypeScore=441.20;MQ=41.08;MQ0=22;OQ=359.44;QD=0.96;SB=-25.38	GT:AD:DP:GL:GQ	0/1:347,27:212:-103.15,-63.92,-790.76:99
-chr1	2576035	rs55917765	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=384;Dels=0.02;HRun=4;HaplotypeScore=406.51;MQ=41.42;MQ0=19;OQ=289.17;QD=0.75;SB=-132.89	GT:AD:DP:GL:GQ	0/1:212,141:214:-106.50,-74.30,-717.21:99
-chr1	2576075	rs57994724	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=300;Dels=0.03;HRun=4;HaplotypeScore=363.80;MQ=42.84;MQ0=2;OQ=76.42;QD=0.25;SB=-28.60	GT:AD:DP:GL:GQ	0/1:192,90:162:-61.96,-51.03,-580.93:99
-chr1	2576111	rs58221160	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=281;Dels=0.00;HRun=1;HaplotypeScore=182.21;MQ=43.93;MQ0=7;OQ=597.72;QD=2.13;SB=-221.46	GT:AD:DP:GL:GQ	0/1:232,45:207:-125.42,-62.37,-596.71:99
-chr1	2576240	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1159;Dels=0.00;HRun=0;HaplotypeScore=623.69;MQ=25.02;MQ0=69;OQ=409.78;QD=0.35;SB=-223.95	GT:AD:DP:GL:GQ	0/1:968,178:369:-162.51,-118.25,-1426.92:99
-chr1	2576263	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1066;Dels=0.00;HRun=1;HaplotypeScore=622.37;MQ=26.52;MQ0=59;OQ=159.54;QD=0.15;SB=19.45	GT:AD:DP:GL:GQ	0/1:984,81:387:-135.82,-116.58,-1209.01:99
-chr1	2576333	.	C	G	40.07	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=1;HaplotypeScore=154.83;MQ=40.65;MQ0=29;QD=0.18;SB=-8.93	GT:AD:DP:GL:GQ	0/1:181,32:158:-64.21,-56.92,-644.64:72.91
-chr1	2576335	.	C	T	1221.15	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=167.65;MQ=40.55;MQ0=30;QD=5.65;SB=-581.17	GT:AD:DP:GL:GQ	0/1:122,94:144:-168.83,-43.43,-331.79:99
-chr1	2576336	rs28676518	G	A	1105.16	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=214;Dels=0.00;HRun=0;HaplotypeScore=205.71;MQ=40.45;MQ0=30;QD=5.16;SB=-168.80	GT:AD:DP:GL:GQ	0/1:170,44:143:-156.87,-43.08,-364.02:99
-chr1	2576346	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=74.98;MQ=40.01;MQ0=31;OQ=210.24;QD=1.17;SB=-126.34	GT:AD:DP:GL:GQ	0/1:138,41:111:-57.78,-33.47,-394.51:99
-chr1	2576366	rs61765835	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=158;Dels=0.00;HRun=0;HaplotypeScore=35.61;MQ=33.02;MQ0=57;OQ=96.35;QD=0.61;SB=-36.52	GT:AD:DP:GL:GQ	0/1:92,66:79:-36.73,-23.81,-255.03:99
-chr1	2576428	rs61765837	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=303;Dels=0.00;HRun=2;HaplotypeScore=260.74;MQ=16.89;MQ0=145;OQ=101.18;QD=0.33;SB=-66.11	GT:AD:DP:GL:GQ	0/1:155,144:52:-29.09,-15.69,-174.52:99
-chr1	2576448	rs61765838	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=595;Dels=0.00;HRun=0;HaplotypeScore=426.54;MQ=17.45;MQ0=199;OQ=372.66;QD=0.63;SB=-42.53	GT:AD:DP:GL:GQ	0/1:377,206:114:-74.98,-34.43,-280.80:99
-chr1	2576460	rs61765839	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=687;Dels=0.00;HRun=1;HaplotypeScore=471.75;MQ=17.40;MQ0=212;OQ=453.85;QD=0.66;SB=-3.98	GT:AD:DP:GL:GQ	0/1:511,164:138:-90.25,-41.59,-375.50:99
-chr1	2576472	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=774;Dels=0.03;HRun=1;HaplotypeScore=800.59;MQ=17.54;MQ0=228;OQ=234.98;QD=0.30;SB=-38.37	GT:AD:DP:GL:GQ	0/1:618,98:166:-76.78,-50.00,-493.07:99
-chr1	2576534	rs57105227	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=374;Dels=0.00;HRun=1;HaplotypeScore=347.91;MQ=18.87;MQ0=112;OQ=329.07;QD=0.88;SB=-154.80	GT:AD:DP:GL:GQ	0/1:156,198:111:-73.27,-37.08,-391.39:99
-chr1	2576577	rs4648668	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=1;HaplotypeScore=59.62;MQ=22.81;MQ0=26;OQ=851.22;QD=6.98;SB=10.08	GT:AD:DP:GL:GQ	0/1:55,66:69:-109.20,-20.79,-201.97:99
-chr1	2576600	rs4648566	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=1;HaplotypeScore=109.15;MQ=20.95;MQ0=39;OQ=455.68;QD=3.38;SB=83.24	GT:AD:DP:GL:GQ	0/1:105,30:52:-64.51,-15.66,-117.10:99
-chr1	2576616	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=178.18;MQ=20.10;MQ0=38;OQ=374.43;QD=2.62;SB=-39.54	GT:AD:DP:GL:GQ	0/1:116,27:44:-54.00,-13.27,-93.80:99
-chr1	2576848	rs61765840	G	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=22.44;MQ=39.05;MQ0=35;OQ=52.46;QD=0.37;SB=-15.32	GT:AD:DP:GL:GQ	0/1:129,12:77:-31.72,-23.19,-231.93:85.30
-chr1	2577010	rs4648671	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=239;Dels=0.00;HRun=0;HaplotypeScore=65.16;MQ=37.14;MQ0=12;OQ=5199.52;QD=21.76;SB=-2266.90	GT:AD:DP:GL:GQ	1/1:7,232:163:-518.95,-49.17,-3.73:99
-chr1	2577062	rs28507281	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=0;HaplotypeScore=78.67;MQ=40.58;MQ0=11;OQ=1143.65;QD=3.88;SB=-492.64	GT:AD:DP:GL:GQ	0/1:238,57:237:-189.11,-71.46,-605.04:99
-chr1	2577084	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=72.39;MQ=39.59;MQ0=17;OQ=519.07;QD=1.69;SB=-15.56	GT:AD:DP:GL:GQ	0/1:259,48:248:-129.89,-74.70,-751.71:99
-chr1	2577123	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=291;Dels=0.00;HRun=1;HaplotypeScore=84.53;MQ=39.37;MQ0=26;OQ=265.40;QD=0.91;SB=-39.23	GT:AD:DP:GL:GQ	0/1:250,41:219:-95.80,-65.98,-773.71:99
-chr1	2577397	rs58719822	G	C	0.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=190;Dels=0.00;HRun=0;HaplotypeScore=14.16;MQ=39.42;MQ0=19;OQ=6097.98;QD=32.09;SB=-764.81	GT:AD:DP:GL:GQ	1/1:1,189:137:-608.80,-41.28,-0.05:99
-chr1	2577433	rs60264562	G	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=207;Dels=0.05;HRun=4;HaplotypeScore=105.46;MQ=35.87;MQ0=25;OQ=5113.11;QD=24.70;SB=-614.98	GT:AD:DP:GL:GQ	1/1:9,184:123:-510.31,-38.53,-16.18:99
-chr1	2577515	.	A	C	17.95	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=331;Dels=0.00;HRun=3;HaplotypeScore=311.11;MQ=35.94;MQ0=23;QD=0.05;SB=173.50	GT:AD:DP:GL:GQ	0/1:258,71:167:-55.40,-50.33,-521.31:50.72
-chr1	2577549	rs4648567	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=289;Dels=0.00;HRun=0;HaplotypeScore=107.18;MQ=38.40;MQ0=7;OQ=5448.91;QD=18.85;SB=-2125.98	GT:AD:DP:GL:GQ	1/1:24,231:174:-543.89,-82.79,-51.97:99
-chr1	2577655	.	G	C	44.44	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=2;HaplotypeScore=58.73;MQ=26.75;MQ0=23;QD=0.33;SB=26.12	GT:AD:DP:GL:GQ	0/1:116,10:43:-24.31,-16.59,-159.35:77.27
-chr1	2577671	rs58842912	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=128.81;MQ=16.71;MQ0=28;OQ=137.08;QD=1.46;SB=-35.94	GT:AD:DP:GL:GQ	0/1:63,25:12:-20.61,-3.62,-16.30:99
-chr1	2577677	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=3;HaplotypeScore=117.98;MQ=17.54;MQ0=28;OQ=281.66;QD=3.03;SB=-45.56	GT:AD:DP:GL:GQ	0/1:33,58:12:-35.06,-3.61,-7.69:40.79
-chr1	2577682	.	T	C	14.20	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=57.79;MQ=17.58;MQ0=34;QD=0.14;SB=-10.00	GT:AD:DP:GL:GQ	0/1:68,26:4:-5.89,-1.21,-7.84:46.86
-chr1	2577700	.	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=167.08;MQ=18.58;MQ0=41;OQ=266.89;QD=2.36;SB=-10.00	GT:AD:DP:GL:GQ	1/1:35,36:10:-34.52,-6.65,-4.25:23.97
-chr1	2577709	.	C	T	15.40	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=131;Dels=0.00;HRun=0;HaplotypeScore=233.03;MQ=18.07;MQ0=48;QD=0.12;SB=-10.00	GT:AD:DP:GL:GQ	0/1:96,13:7:-9.83,-5.02,-17.83:48.10
-chr1	2577721	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=74.87;MQ=18.10;MQ0=63;OQ=399.60;QD=2.20;SB=-10.00	GT:AD:DP:GL:GQ	0/1:147,35:41:-55.60,-12.35,-87.25:99
-chr1	2577722	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=54.78;MQ=18.15;MQ0=62;OQ=179.28;QD=0.99;SB=-10.00	GT:AD:DP:GL:GQ	0/1:160,20:38:-32.69,-11.48,-98.33:99
-chr1	2577735	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=37.61;MQ=17.86;MQ0=65;OQ=262.32;QD=1.37;SB=-10.00	GT:AD:DP:GL:GQ	0/1:173,18:55:-46.08,-16.57,-148.55:99
-chr1	2577740	rs61763463	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=1;HaplotypeScore=34.83;MQ=17.84;MQ0=63;OQ=1671.60;QD=8.99;SB=-10.00	GT:AD:DP:GL:GQ	0/1:52,133:54:-186.71,-16.27,-40.75:99
-chr1	2577765	.	C	A	125.78	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=41.35;MQ=16.77;MQ0=52;QD=0.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:91,53:26:-23.70,-7.84,-54.51:99
-chr1	2577769	.	C	T	71.72	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=43.82;MQ=16.10;MQ0=52;QD=0.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:87,47:21:-16.80,-6.34,-49.74:99
-chr1	2577770	.	G	C	89.65	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=1;HaplotypeScore=42.82;MQ=16.09;MQ0=52;QD=0.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:85,48:21:-18.58,-6.33,-66.40:99
-chr1	2577784	rs61761450	G	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=93.26;MQ=15.12;MQ0=44;OQ=499.20;QD=4.62;SB=-10.00	GT:AD:DP:GL:GQ	1/1:36,72:12:-53.51,-3.62,-0.00:36.12
-chr1	2577796	rs28368363	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=154.23;MQ=14.20;MQ0=39;OQ=53.95;QD=0.56;SB=-10.00	GT:AD:DP:GL:GQ	0/1:68,23:5:-10.19,-1.51,-6.10:45.96
-chr1	2577799	rs61765844	A	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=4;HaplotypeScore=106.56;MQ=13.50;MQ0=38;OQ=136.44;QD=1.53;SB=-10.00	GT:AD:DP:GL:GQ	1/1:37,52:5:-17.20,-1.51,-0.00:15.04
-chr1	2577815	rs61761446	G	A	0.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=16.91;MQ=12.99;MQ0=33;OQ=113.87;QD=2.19;SB=-10.00	GT:AD:DP:GL:GQ	1/1:30,21:4:-14.92,-1.21,-0.00:12.04
-chr1	2577825	.	G	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=32.84;MQ=14.16;MQ0=28;OQ=149.17;QD=3.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:28,19:5:-18.48,-1.51,-0.00:15.04
-chr1	2577833	.	C	T	42.25	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=22.86;MQ=13.04;MQ0=28;QD=0.98;SB=-10.00	GT:AD:DP:GL:GQ	1/1:33,10:2:-7.63,-0.60,-0.00:6.02
-chr1	2577851	.	G	T	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=11.27;MQ=14.57;MQ0=20;OQ=148.54;QD=4.24;SB=-10.00	GT:AD:DP:GL:GQ	1/1:17,14:6:-18.43,-1.81,-0.01:18.02
-chr1	2577883	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=114.78;MQ=19.71;MQ0=31;OQ=87.78;QD=0.84;SB=-10.00	GT:AD:DP:GL:GQ	0/1:82,22:16:-16.89,-4.83,-35.06:99
-chr1	2577892	rs61761448	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=139.63;MQ=19.08;MQ0=41;OQ=358.39;QD=3.04;SB=-10.00	GT:AD:DP:GL:GQ	0/1:46,69:13:-43.04,-3.92,-5.80:18.77
-chr1	2577904	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=169.18;MQ=18.99;MQ0=45;OQ=432.72;QD=3.38;SB=-10.00	GT:AD:DP:GL:GQ	0/1:56,72:16:-51.38,-4.83,-6.85:20.23
-chr1	2577913	.	A	G	43.14	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=228.63;MQ=18.89;MQ0=43;QD=0.37;SB=-10.00	GT:AD:DP:GL:GQ	0/1:102,14:7:-9.71,-2.11,-14.52:75.98
-chr1	2577923	.	G	A	12.44	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=139.34;MQ=19.75;MQ0=38;QD=0.10;SB=-10.00	GT:AD:DP:GL:GQ	0/1:84,37:10:-7.51,-3.01,-26.55:45.02
-chr1	2577924	.	T	C	61.88	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=137.09;MQ=19.68;MQ0=38;QD=0.52;SB=-10.00	GT:AD:DP:GL:GQ	0/1:94,23:11:-12.79,-3.32,-26.27:94.71
-chr1	2577931	rs61763465	G	C	371.46	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=106.32;MQ=19.54;MQ0=35;QD=3.50;SB=-10.00	GT:AD:DP:GL:GQ	1/1:30,75:9:-40.73,-2.71,-0.00:27.09
-chr1	2577945	rs61765845	G	C	1059.87	HARD_TO_VALIDATE;Indel	AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=141.04;MQ=19.73;MQ0=38;QD=10.00;SB=-10.00	GT:AD:DP:GL:GQ	1/1:31,70:26:-113.65,-11.26,-4.08:71.85
-chr1	2577953	.	A	G	356.53	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=136.50;MQ=18.50;MQ0=43;QD=3.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:78,20:16:-43.76,-4.82,-8.02:32
-chr1	2577977	.	G	A	20.69	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=1;HaplotypeScore=16.21;MQ=15.79;MQ0=48;QD=0.27;SB=-10.00	GT:AD:DP:GL:GQ	0/1:72,5:20:-11.37,-6.02,-58.36:53.49
-chr1	2579397	rs61761374	C	G	193.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=22.35;MQ0=6;OQ=1341.59;QD=14.91;SB=-551.47	GT:AD:DP:GL:GQ	0/1:44,46:77:-160.66,-23.22,-161.20:99
-chr1	2580726	.	T	G	35.92	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=5.25;MQ0=59;QD=0.59;SB=-10.00	GT:AD:DP:GL:GQ	1/1:58,2:2:-7.00,-0.60,-0.00:6.02
-chr1	2580768	.	T	C	36.28	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=5.74;MQ0=49;QD=0.71;SB=-10.00	GT:AD:DP:GL:GQ	1/1:46,5:2:-7.04,-0.60,-0.00:6.02
-chr1	2580784	rs11488598	T	A	45.88	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=6.33;MQ0=40;QD=1.09;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,41:2:-8.00,-0.60,-0.00:6.02
-chr1	2581065	rs61761440	A	C	33.92	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=9.03;MQ=10.33;MQ0=29;QD=0.71;SB=-10.00	GT:AD:DP:GL:GQ	1/1:28,20:2:-6.80,-0.60,-0.00:6.02
-chr1	2581076	.	T	A	42.69	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=11.35;MQ0=18;QD=1.33;SB=-10.00	GT:AD:DP:GL:GQ	1/1:16,15:2:-7.68,-0.60,-0.00:6.02
-chr1	2581088	.	A	C	35.92	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=15.32;MQ0=5;QD=3.27;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,8:2:-7.00,-0.60,-0.00:6.02
-chr1	2581203	.	C	G	46.77	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=10.81;MQ0=53;QD=0.69;SB=5.05	GT:AD:DP:GL:GQ	0/1:57,11:14:-12.18,-4.22,-47.55:79.61
-chr1	2581221	rs4648702	C	A	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=1;HaplotypeScore=12.38;MQ=17.15;MQ0=42;OQ=109.22;QD=1.11;SB=-5.56	GT:AD:DP:GL:GQ	0/1:80,16:46:-28.07,-13.86,-128.22:99
-chr1	2581257	rs4648701	T	A	0.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=5.16;MQ=20.38;MQ0=25;OQ=3859.45;QD=28.80;SB=-1801.06	GT:AD:DP:GL:GQ	1/1:0,134:101:-384.94,-30.42,-0.03:99
-chr1	2587428	.	A	C	37.49	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.36;MQ0=8;QD=1.10;SB=-45.01	GT:AD:DP:GL:GQ	1/1:0,34:2:-7.16,-0.60,-0.00:6.02
-chr1	2593169	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=425;Dels=0.00;HRun=1;HaplotypeScore=105.62;MQ=17.46;MQ0=82;OQ=848.96;QD=2.00;SB=-332.82	GT:AD:DP:GL:GQ	0/1:365,60:163:-137.29,-49.11,-428.79:99
-chr1	2596443	.	C	T	41.24	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=12.40;MQ0=7;QD=3.75;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,4:2:-7.53,-0.60,-0.00:6.02
-chr1	2596445	.	T	G	36.05	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=2.31;MQ=11.87;MQ0=8;QD=3.00;SB=-10.00	GT:AD:DP:GL:GQ	1/1:5,7:2:-7.01,-0.60,-0.00:6.02
-chr1	2596476	.	G	A	46.02	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=26.89;MQ=5.53;MQ0=56;QD=0.77;SB=-10.00	GT:AD:DP:GL:GQ	1/1:58,2:2:-8.01,-0.60,-0.00:6.02
-chr1	2596850	.	G	C	35.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=11.43;MQ0=28;QD=0.82;SB=-10.00	GT:AD:DP:GL:GQ	0/1:29,14:5:-8.30,-1.51,-13.08:67.88
-chr1	2596943	.	C	A	49.59	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=50.99;MQ=11.35;MQ0=54;QD=0.70;SB=-6.99	GT:AD:DP:GL:GQ	0/1:65,5:13:-12.16,-3.92,-30.66:82.43
-chr1	2597318	.	T	C	31.81	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=14.62;MQ=5.54;MQ0=70;QD=0.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:73,2:2:-6.59,-0.60,-0.00:6.01
-chr1	2598250	.	T	A	27.90	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=1;HaplotypeScore=2.24;MQ=16.56;MQ0=5;QD=1.27;SB=-0.98	GT:AD:DP:GL:GQ	0/1:19,3:5:-7.58,-1.51,-10.62:60.73
-chr1	2598257	.	G	T	12.16	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=15.61;MQ0=8;QD=0.55;SB=-0.98	GT:AD:DP:GL:GQ	0/1:19,3:5:-5.98,-1.51,-10.70:44.72
-chr1	2598656	.	G	A	10.26	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=114.17;MQ=5.78;MQ0=152;QD=0.06;SB=-10.00	GT:AD:DP:GL:GQ	0/1:161,14:1:-4.27,-0.30,-0.00:1.76
-chr1	2598795	.	G	A	10.26	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=47.85;MQ=7.17;MQ0=69;QD=0.12;SB=-10.00	GT:AD:DP:GL:GQ	0/1:84,2:1:-4.27,-0.30,-0.00:1.76
-chr1	2598944	.	A	C	17.83	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=1;HaplotypeScore=67.67;MQ=10.48;MQ0=39;QD=0.27;SB=-25.99	GT:AD:DP:GL:GQ	0/1:48,17:3:-5.96,-0.91,-2.50:15.92
-chr1	2598946	.	A	G	34.06	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=82.40;MQ=11.36;MQ0=42;QD=0.46;SB=-10.00	GT:AD:DP:GL:GQ	0/1:70,4:3:-7.59,-0.90,-4.17:32.64
-chr1	2598950	.	C	A	54.26	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=105.52;MQ=12.29;MQ0=47;QD=0.53;SB=-3.99	GT:AD:DP:GL:GQ	0/1:94,7:7:-10.82,-2.11,-14.32:87.10
-chr1	2599001	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=31.75;MQ=12.68;MQ0=54;OQ=83.85;QD=0.63;SB=-3.99	GT:AD:DP:GL:GQ	0/1:91,33:10:-18.26,-6.59,-21.60:99
-chr1	2599015	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=2;HaplotypeScore=24.68;MQ=11.50;MQ0=72;OQ=64.97;QD=0.46;SB=-43.54	GT:AD:DP:GL:GQ	0/1:128,12:9:-12.49,-2.71,-23.15:97.80
-chr1	2599040	rs61761456	A	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=87.15;MQ=9.23;MQ0=88;OQ=72.77;QD=0.55;SB=-10.00	GT:AD:DP:GL:GQ	1/1:81,14:5:-17.43,-7.71,-6.64:10.71
-chr1	2599044	rs61761457	T	A	33.25	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=131;Dels=0.00;HRun=1;HaplotypeScore=64.29;MQ=9.30;MQ0=86;QD=0.25;SB=-10.00	GT:AD:DP:GL:GQ	0/1:104,11:6:-11.67,-5.06,-13.57:66.08
-chr1	2599198	.	C	T	23.45	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=16.24;MQ=14.99;MQ0=19;QD=0.50;SB=-3.99	GT:AD:DP:GL:GQ	0/1:29,18:5:-7.14,-1.51,-10.24:56.27
-chr1	2599218	.	G	A	105.55	HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=106.10;MQ=16.73;MQ0=11;QD=2.29;SB=-69.07	GT:AD:DP:GL:GQ	0/1:28,17:6:-15.65,-1.81,-6.14:43.30
-chr1	2599225	.	C	G	35.32	HARD_TO_VALIDATE;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=82.64;MQ=16.87;MQ0=11;QD=0.78;SB=-10.88	GT:AD:DP:GL:GQ	0/1:36,6:7:-14.02,-7.20,-19.31:68.16
-chr1	2599228	.	G	A	323.86	HARD_TO_VALIDATE;Indel;SnpCluster	AC=2;AF=1.00;AN=2;DP=46;Dels=0.04;HRun=0;HaplotypeScore=68.32;MQ=16.68;MQ0=12;QD=7.04;SB=-89.34	GT:AD:DP:GL:GQ	1/1:16,28:10:-35.98,-3.02,-0.01:30.08
-chr1	2599239	.	T	A	19.57	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=43.45;MQ=14.62;MQ0=19;QD=0.36;SB=-4.42	GT:AD:DP:GL:GQ	0/1:49,2:7:-12.49,-7.25,-17.00:52.36
-chr1	2599247	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=40.77;MQ=14.18;MQ0=20;OQ=70.13;QD=1.35;SB=-7.01	GT:AD:DP:GL:GQ	0/1:29,21:6:-12.11,-1.81,-8.56:67.52
-chr1	2599654	.	G	C	12.35	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=26.39;MQ=2.65;MQ0=119;QD=0.10;SB=-10.00	GT:AD:DP:GL:GQ	0/1:119,1:1:-4.49,-0.30,-0.00:1.76
-chr1	2601422	.	A	G	25.82	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=4.09;MQ0=110;QD=0.23;SB=-10.00	GT:AD:DP:GL:GQ	1/1:99,14:2:-5.99,-0.60,-0.00:6.01
-chr1	2601437	.	T	C	35.28	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=3.79;MQ0=129;QD=0.27;SB=-10.00	GT:AD:DP:GL:GQ	1/1:103,30:2:-6.94,-0.60,-0.00:6.02
-chr1	2601504	.	G	A	41.24	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=19.74;MQ=3.30;MQ0=165;QD=0.25;SB=-10.00	GT:AD:DP:GL:GQ	1/1:158,9:2:-7.53,-0.60,-0.00:6.02
-chr1	2601515	.	A	C	43.05	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=155;Dels=0.00;HRun=2;HaplotypeScore=7.29;MQ=3.29;MQ0=153;QD=0.28;SB=-10.00	GT:AD:DP:GL:GQ	1/1:91,64:2:-7.71,-0.60,-0.00:6.02
-chr1	2601516	.	G	A	0.02	FDRtranche1.00to2.00	AC=2;AF=1.00;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=6.38;MQ=3.29;MQ0=153;OQ=51.25;QD=0.33;SB=-10.00	GT:AD:DP:GL:GQ	1/1:89,66:2:-8.53,-0.60,-0.00:6.02
-chr1	2601859	.	G	A	39.02	DPFilter;HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=20.82;MQ=4.64;MQ0=146;QD=0.24;SB=-10.00	GT:AD:DP:GL:GQ	1/1:150,13:2:-7.31,-0.60,-0.00:6.02
-chr1	2603248	rs11486046	A	C	0.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=4;HaplotypeScore=1.14;MQ=19.37;MQ0=3;OQ=283.27;QD=11.33;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,23:9:-31.91,-2.71,-0.00:27.08
-chr1	2603587	.	A	G	31.28	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=24.46;MQ=5.10;MQ0=81;QD=0.34;SB=-10.00	GT:AD:DP:GL:GQ	1/1:74,19:2:-6.54,-0.60,-0.00:6.01
-chr1	2603630	.	C	T	0.04	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.88;MQ=7.26;MQ0=55;OQ=82.12;QD=1.35;SB=-10.00	GT:AD:DP:GL:GQ	1/1:51,10:3:-11.70,-0.90,-0.00:9.03
-chr1	2603684	.	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=23.79;MQ=8.35;MQ0=58;OQ=160.35;QD=2.36;SB=-10.00	GT:AD:DP:GL:GQ	1/1:55,13:6:-19.61,-1.81,-0.00:18.04
-chr1	2603850	.	C	G	10.08	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=0;HaplotypeScore=68.31;MQ=3.10;MQ0=215;QD=0.04;SB=-10.00	GT:AD:DP:GL:GQ	0/1:213,10:1:-4.25,-0.30,-0.00:1.76
-chr1	2604182	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=169;Dels=0.00;HRun=1;HaplotypeScore=49.21;MQ=7.86;MQ0=143;OQ=70.78;QD=0.42;SB=-10.00	GT:AD:DP:GL:GQ	0/1:162,7:11:-13.68,-3.31,-27.79:99
-chr1	2604202	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=66.53;MQ=7.81;MQ0=146;OQ=55.73;QD=0.32;SB=-10.00	GT:AD:DP:GL:GQ	0/1:164,10:11:-12.17,-3.31,-27.45:88.56
-chr1	2604211	.	C	A	34.20	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=110.16;MQ=8.09;MQ0=168;QD=0.17;SB=-10.00	GT:AD:DP:GL:GQ	0/1:190,11:14:-10.92,-4.22,-40.03:67.04
-chr1	2604257	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=82.11;MQ=12.16;MQ0=114;OQ=80.38;QD=0.46;SB=32.96	GT:AD:DP:GL:GQ	0/1:146,20:31:-22.91,-11.59,-89.29:99
-chr1	2604263	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=1;HaplotypeScore=133.02;MQ=12.71;MQ0=105;OQ=191.66;QD=1.14;SB=50.18	GT:AD:DP:GL:GQ	0/1:122,46:33:-32.40,-9.95,-88.01:99
-chr1	2604269	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=77.37;MQ=13.05;MQ0=90;OQ=192.77;QD=1.32;SB=17.43	GT:AD:DP:GL:GQ	0/1:70,69:33:-34.89,-12.33,-71.96:99
-chr1	2604305	.	T	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=7.47;MQ=17.34;MQ0=29;OQ=55.74;QD=0.69;SB=74.25	GT:AD:DP:GL:GQ	0/1:58,22:37:-20.01,-11.15,-121.92:88.58
-chr1	2604310	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.63;MQ=18.11;MQ0=23;OQ=69.18;QD=0.93;SB=74.24	GT:AD:DP:GL:GQ	0/1:55,19:37:-21.34,-11.14,-111.00:99
-chr1	2604358	.	C	T	71.23	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=145.78;MQ=14.15;MQ0=44;QD=0.82;SB=11.06	GT:AD:DP:GL:GQ	0/1:71,13:12:-14.02,-3.62,-30.75:99
-chr1	2604359	.	C	A	74.64	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=131.89;MQ=14.13;MQ0=41;QD=0.91;SB=5.02	GT:AD:DP:GL:GQ	0/1:26,56:10:-13.76,-3.01,-18.66:99
-chr1	2604363	.	G	C	180.85	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=2;HaplotypeScore=137.79;MQ=13.57;MQ0=46;QD=2.10;SB=2.04	GT:AD:DP:GL:GQ	0/1:29,40:11:-24.68,-3.31,-21.48:99
-chr1	2604377	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=82.82;MQ=13.39;MQ0=50;OQ=54.76;QD=0.61;SB=-10.00	GT:AD:DP:GL:GQ	0/1:65,25:4:-9.97,-1.21,-3.57:23.65
-chr1	2604397	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=150.87;MQ=13.17;MQ0=49;OQ=71.12;QD=0.83;SB=-10.00	GT:AD:DP:GL:GQ	0/1:47,38:4:-11.60,-1.21,-3.90:26.92
-chr1	2604403	.	T	C	38.45	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=82;Dels=0.00;HRun=2;HaplotypeScore=145.51;MQ=12.80;MQ0=46;QD=0.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:13,58:3:-10.84,-4.28,-3.54:7.45
-chr1	2604424	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=48.30;MQ=13.20;MQ0=33;OQ=76.83;QD=1.35;SB=-6.99	GT:AD:DP:GL:GQ	0/1:21,30:6:-12.78,-1.81,-6.73:49.16
-chr1	2604431	.	C	T	25.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=33.49;MQ=13.71;MQ0=25;QD=0.55;SB=-7.01	GT:AD:DP:GL:GQ	0/1:40,3:5:-7.32,-1.51,-9.43:58.07
-chr1	2604444	.	G	C	43.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=38.64;MQ=15.55;MQ0=13;QD=1.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,16:4:-12.26,-4.63,-7.13:24.99
-chr1	2604449	.	G	C	30.45	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=21;Dels=0.10;HRun=4;HaplotypeScore=30.98;MQ=14.63;MQ0=12;QD=1.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,6:4:-11.16,-4.83,-7.63:28
-chr1	2604508	.	G	C	0.07	PASS	AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=11.01;MQ=14.95;MQ0=13;OQ=265.66;QD=7.81;SB=-10.00	GT:AD:DP:GL:GQ	1/1:9,25:7:-30.15,-2.11,-0.00:21.07
-chr1	2604516	.	G	T	0.07	PASS	AC=2;AF=1.00;AN=2;DP=41;Dels=0.00;HRun=1;HaplotypeScore=5.00;MQ=14.42;MQ0=18;OQ=191.90;QD=4.68;SB=-10.00	GT:AD:DP:GL:GQ	1/1:15,26:7:-22.77,-2.11,-0.00:21.05
-chr1	2604535	rs61763522	A	G	0.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=9.63;MQ=11.76;MQ0=38;OQ=251.64;QD=3.87;SB=-10.00	GT:AD:DP:GL:GQ	1/1:12,53:8:-28.75,-2.41,-0.00:24.07
-chr1	2604555	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=35.24;MQ=12.18;MQ0=57;OQ=115.73;QD=1.24;SB=14.08	GT:AD:DP:GL:GQ	0/1:66,27:12:-18.47,-3.62,-35.84:99
-chr1	2604572	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=3;HaplotypeScore=50.74;MQ=13.39;MQ0=78;OQ=55.27;QD=0.40;SB=20.07	GT:AD:DP:GL:GQ	0/1:127,10:20:-14.84,-6.03,-56.38:88.11
-chr1	2604579	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=62.98;MQ=13.28;MQ0=75;OQ=144.76;QD=1.05;SB=20.08	GT:AD:DP:GL:GQ	0/1:125,13:18:-23.19,-5.43,-45.19:99
-chr1	2604585	rs61763523	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=1;HaplotypeScore=70.32;MQ=13.11;MQ0=76;OQ=158.49;QD=1.13;SB=-6.99	GT:AD:DP:GL:GQ	0/1:102,37:9:-21.84,-2.71,-10.97:82.64
-chr1	2604597	.	A	G	110.83	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=107.90;MQ=13.27;MQ0=78;QD=0.74;SB=8.05	GT:AD:DP:GL:GQ	0/1:135,14:14:-18.58,-4.22,-35.74:99
-chr1	2604601	.	A	C	218.40	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=111.25;MQ=13.41;MQ0=75;QD=1.51;SB=4.22	GT:AD:DP:GL:GQ	0/1:108,36:15:-33.23,-8.10,-26.51:99
-chr1	2604603	.	T	C	273.40	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=2;HaplotypeScore=107.87;MQ=13.23;MQ0=76;QD=1.89;SB=-75.88	GT:AD:DP:GL:GQ	0/1:65,76:14:-34.84,-4.22,-16.55:99
-chr1	2604631	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=169;Dels=0.00;HRun=1;HaplotypeScore=78.83;MQ=15.93;MQ0=66;OQ=130.30;QD=0.77;SB=-43.00	GT:AD:DP:GL:GQ	0/1:129,40:31:-25.65,-9.34,-87.13:99
-chr1	2604640	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=101.27;MQ=16.99;MQ0=53;OQ=84.42;QD=0.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:93,61:34:-21.98,-10.25,-116.76:99
-chr1	2604659	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=114.19;MQ=17.85;MQ0=39;OQ=180.46;QD=1.31;SB=-10.00	GT:AD:DP:GL:GQ	0/1:106,32:34:-31.57,-10.24,-88.52:99
-chr1	2604673	rs7415296	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=120;Dels=0.00;HRun=1;HaplotypeScore=73.29;MQ=18.57;MQ0=29;OQ=1125.63;QD=9.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,107:33:-116.16,-9.94,-0.01:99
-chr1	2604706	rs6673862	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=39.35;MQ=23.53;MQ0=16;OQ=454.13;QD=4.83;SB=-3.99	GT:AD:DP:GL:GQ	0/1:51,43:41:-61.05,-12.35,-88.54:99
-chr1	2604709	rs6604993	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=41.02;MQ=25.10;MQ0=15;OQ=512.66;QD=5.40;SB=-34.93	GT:AD:DP:GL:GQ	0/1:48,47:45:-68.11,-13.56,-92.92:99
-chr1	2604721	rs61763524	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=115.04;MQ=25.76;MQ0=12;OQ=386.36;QD=4.15;SB=-44.44	GT:AD:DP:GL:GQ	0/1:49,44:40:-53.97,-12.05,-114.41:99
-chr1	2604728	rs61763525	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=150.75;MQ=27.24;MQ0=8;OQ=52.75;QD=0.62;SB=-10.00	GT:AD:DP:GL:GQ	0/1:49,22:37:-19.70,-11.14,-117.15:85.59
-chr1	2604813	rs6687492	A	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.04;HRun=2;HaplotypeScore=47.11;MQ=23.79;MQ0=20;OQ=1537.32;QD=16.53;SB=-154.02	GT:AD:DP:GL:GQ	1/1:2,87:44:-157.33,-12.95,-0.02:99
-chr1	2604848	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=9.77;MQ=17.69;MQ0=30;OQ=71.77;QD=1.30;SB=-10.00	GT:AD:DP:GL:GQ	0/1:37,18:14:-14.68,-4.22,-36.61:99
-chr1	2604864	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=28.67;MQ=16.02;MQ0=35;OQ=77.33;QD=1.17;SB=-10.00	GT:AD:DP:GL:GQ	0/1:62,4:12:-14.63,-3.61,-28.91:99
-chr1	2604867	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=23.02;MQ=16.18;MQ0=37;OQ=170.35;QD=2.43;SB=-10.00	GT:AD:DP:GL:GQ	0/1:59,11:15:-24.84,-4.52,-31.52:99
-chr1	2604879	.	A	G	48.78	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=25.49;MQ=18.59;MQ0=41;QD=0.57;SB=-6.99	GT:AD:DP:GL:GQ	0/1:79,7:20:-14.19,-6.03,-66.66:81.62
-chr1	2604892	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=1;HaplotypeScore=62.88;MQ=20.71;MQ0=36;OQ=145.34;QD=1.60;SB=-40.00	GT:AD:DP:GL:GQ	0/1:67,21:27:-25.95,-8.13,-71.88:99
-chr1	2604894	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.01;HRun=1;HaplotypeScore=55.68;MQ=20.44;MQ0=36;OQ=138.96;QD=1.49;SB=-41.95	GT:AD:DP:GL:GQ	0/1:67,21:26:-25.01,-7.83,-77.06:99
-chr1	2604912	rs61763528	T	G	20.95	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=50.36;MQ=22.66;MQ0=25;QD=0.19;SB=-10.00	GT:AD:DP:GL:GQ	0/1:76,35:29:-14.11,-8.74,-95.07:53.75
-chr1	2604916	rs61763529	T	G	194.85	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=0;HaplotypeScore=46.31;MQ=24.02;MQ0=23;QD=1.72;SB=-10.00	GT:AD:DP:GL:GQ	0/1:75,37:38:-34.21,-11.44,-107.06:99
-chr1	2604917	rs61763530	C	G	1480.34	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=47.31;MQ=24.13;MQ0=22;QD=13.22;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,96:38:-168.50,-25.75,-16.88:88.75
-chr1	2604946	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=1;HaplotypeScore=63.84;MQ=27.71;MQ0=21;OQ=79.42;QD=0.34;SB=27.56	GT:AD:DP:GL:GQ	0/1:204,31:106:-43.16,-31.93,-335.49:99
-chr1	2604947	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=1;HaplotypeScore=57.70;MQ=27.78;MQ0=20;OQ=56.57;QD=0.24;SB=26.25	GT:AD:DP:GL:GQ	0/1:201,34:107:-41.17,-32.23,-378.22:89.40
-chr1	2604959	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=1;HaplotypeScore=113.45;MQ=29.01;MQ0=17;OQ=854.86;QD=3.55;SB=-18.43	GT:AD:DP:GL:GQ	0/1:165,75:109:-121.61,-32.84,-284.29:99
-chr1	2604960	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=123.76;MQ=29.06;MQ0=17;OQ=593.64;QD=2.47;SB=71.18	GT:AD:DP:GL:GQ	0/1:190,50:108:-95.18,-32.53,-286.72:99
-chr1	2604983	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=1;HaplotypeScore=495.52;MQ=29.66;MQ0=13;OQ=71.64;QD=0.32;SB=60.44	GT:AD:DP:GL:GQ	0/1:161,61:71:-31.89,-21.44,-242.50:99
-chr1	2604984	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=666.90;MQ=29.67;MQ0=14;OQ=53.59;QD=0.24;SB=51.85	GT:AD:DP:GL:GQ	0/1:162,59:73:-33.13,-24.49,-250.82:86.43
-chr1	2604994	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=301;Dels=0.00;HRun=1;HaplotypeScore=445.50;MQ=27.33;MQ0=32;OQ=911.93;QD=3.03;SB=-289.52	GT:AD:DP:GL:GQ	0/1:244,47:103:-139.58,-45.10,-310.97:99
-chr1	2605000	.	A	G	39.90	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=313;Dels=0.00;HRun=0;HaplotypeScore=296.02;MQ=26.42;MQ0=37;QD=0.13;SB=95.30	GT:AD:DP:GL:GQ	0/1:236,73:110:-42.96,-35.69,-387.52:72.73
-chr1	2605008	.	C	A	80.14	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=1;HaplotypeScore=230.13;MQ=26.37;MQ0=45;QD=0.26;SB=104.26	GT:AD:DP:GL:GQ	0/1:278,18:127:-64.22,-52.92,-396.67:99
-chr1	2605010	.	C	A	77.92	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=1;HaplotypeScore=334.39;MQ=26.26;MQ0=46;QD=0.25;SB=101.18	GT:AD:DP:GL:GQ	0/1:276,18:125:-51.79,-40.71,-371.85:99
-chr1	2605026	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=292;Dels=0.00;HRun=0;HaplotypeScore=503.51;MQ=24.87;MQ0=63;OQ=127.24;QD=0.44;SB=-33.91	GT:AD:DP:GL:GQ	0/1:107,181:82:-40.71,-24.70,-242.51:99
-chr1	2605040	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=333;Dels=0.00;HRun=0;HaplotypeScore=585.35;MQ=23.26;MQ0=69;OQ=164.03;QD=0.49;SB=60.04	GT:AD:DP:GL:GQ	0/1:234,98:87:-48.89,-29.20,-293.13:99
-chr1	2605055	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=0;HaplotypeScore=493.35;MQ=22.62;MQ0=80;OQ=367.10;QD=0.93;SB=90.44	GT:AD:DP:GL:GQ	0/1:300,89:126:-77.94,-37.95,-375.51:99
-chr1	2605064	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=1;HaplotypeScore=562.83;MQ=22.35;MQ0=77;OQ=111.09;QD=0.28;SB=241.07	GT:AD:DP:GL:GQ	0/1:342,17:127:-65.55,-51.15,-483.41:99
-chr1	2605074	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=367;Dels=0.02;HRun=1;HaplotypeScore=550.64;MQ=22.20;MQ0=72;OQ=1826.16;QD=4.98;SB=11.30	GT:AD:DP:GL:GQ	0/1:140,136:125:-251.01,-65.11,-307.30:99
-chr1	2605078	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=360;Dels=0.00;HRun=1;HaplotypeScore=645.39;MQ=22.69;MQ0=67;OQ=145.82;QD=0.41;SB=80.26	GT:AD:DP:GL:GQ	0/1:281,25:108:-50.40,-32.54,-347.91:99
-chr1	2605087	rs9442451	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=302;Dels=0.00;HRun=1;HaplotypeScore=515.01;MQ=23.21;MQ0=61;OQ=1550.28;QD=5.13;SB=0.26	GT:AD:DP:GL:GQ	0/1:127,172:83:-183.36,-25.04,-152.30:99
-chr1	2605095	rs7411254	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=0;HaplotypeScore=864.08;MQ=22.89;MQ0=61;OQ=861.12;QD=2.92;SB=-439.01	GT:AD:DP:GL:GQ	0/1:231,62:100:-119.53,-30.13,-233.73:99
-chr1	2605099	rs61763531	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=268;Dels=0.03;HRun=1;HaplotypeScore=671.07;MQ=23.34;MQ0=56;OQ=331.54;QD=1.24;SB=62.18	GT:AD:DP:GL:GQ	0/1:101,158:88:-62.36,-25.93,-228.22:99
-chr1	2605116	rs61763532	G	T	727.77	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=280;Dels=0.00;HRun=0;HaplotypeScore=340.71;MQ=26.06;MQ0=38;QD=2.60;SB=80.25	GT:AD:DP:GL:GQ	0/1:98,160:86:-122.32,-46.26,-192.83:99
-chr1	2605118	.	G	A	130.78	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=2;HaplotypeScore=353.34;MQ=26.07;MQ0=39;QD=0.45;SB=68.17	GT:AD:DP:GL:GQ	0/1:266,20:82:-41.07,-24.71,-249.92:99
-chr1	2605120	.	A	G	143.56	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=0;HaplotypeScore=391.53;MQ=26.07;MQ0=38;QD=0.50;SB=44.57	GT:AD:DP:GL:GQ	0/1:230,56:92:-45.37,-27.73,-305.63:99
-chr1	2605121	.	C	A	843.63	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=2;HaplotypeScore=384.52;MQ=26.08;MQ0=38;QD=2.98;SB=80.20	GT:AD:DP:GL:GQ	0/1:195,69:112:-123.96,-36.31,-258.00:99
-chr1	2605143	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=0;HaplotypeScore=165.80;MQ=26.36;MQ0=57;OQ=2061.60;QD=7.90;SB=82.92	GT:AD:DP:GL:GQ	0/1:135,121:131:-251.29,-41.84,-249.16:99
-chr1	2605152	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=0;HaplotypeScore=166.41;MQ=25.95;MQ0=68;OQ=1747.63;QD=6.33;SB=68.24	GT:AD:DP:GL:GQ	0/1:180,94:128:-216.61,-38.56,-254.69:99
-chr1	2605164	rs56278231	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=99.67;MQ=26.36;MQ0=65;OQ=2109.83;QD=7.59;SB=62.23	GT:AD:DP:GL:GQ	0/1:140,134:129:-253.13,-38.87,-210.06:99
-chr1	2605176	rs61763533	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=283;Dels=0.00;HRun=4;HaplotypeScore=192.72;MQ=26.37;MQ0=64;OQ=2285.97;QD=8.08;SB=50.20	GT:AD:DP:GL:GQ	0/1:155,126:135:-272.62,-40.74,-266.81:99
-chr1	2605179	rs7415101	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=293;Dels=0.00;HRun=0;HaplotypeScore=210.05;MQ=26.19;MQ0=65;OQ=1158.68;QD=3.95;SB=-384.91	GT:AD:DP:GL:GQ	0/1:236,57:97:-148.38,-29.23,-220.79:99
-chr1	2605208	.	C	A	465.30	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=1;HaplotypeScore=227.21;MQ=26.15;MQ0=63;QD=1.73;SB=32.07	GT:AD:DP:GL:GQ	0/1:153,116:69:-70.60,-20.78,-175.32:99
-chr1	2605210	.	C	A	482.33	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=1;HaplotypeScore=189.40;MQ=26.42;MQ0=62;QD=1.81;SB=32.08	GT:AD:DP:GL:GQ	0/1:149,115:67:-71.70,-20.18,-161.20:99
-chr1	2605214	rs61082664	T	C	967.30	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=2;HaplotypeScore=127.28;MQ=27.64;MQ0=60;QD=3.50;SB=23.10	GT:AD:DP:GL:GQ	0/1:97,178:76:-122.91,-22.90,-161.42:99
-chr1	2605243	.	G	T	751.64	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=305;Dels=0.00;HRun=1;HaplotypeScore=253.27;MQ=31.30;MQ0=36;QD=2.46;SB=71.20	GT:AD:DP:GL:GQ	0/1:173,132:102:-109.18,-30.73,-247.59:99
-chr1	2605244	rs28455054	T	C	853.34	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=304;Dels=0.00;HRun=0;HaplotypeScore=224.13;MQ=31.61;MQ0=34;QD=2.81;SB=-69.58	GT:AD:DP:GL:GQ	0/1:99,183:104:-137.17,-48.55,-265.91:99
-chr1	2605247	.	C	T	78.33	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=241.73;MQ=32.15;MQ0=30;QD=0.26;SB=92.28	GT:AD:DP:GL:GQ	0/1:261,44:108:-43.66,-32.54,-342.18:99
-chr1	2605252	.	C	A	302.63	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=316;Dels=0.00;HRun=1;HaplotypeScore=325.23;MQ=32.85;MQ0=33;QD=0.96;SB=113.24	GT:AD:DP:GL:GQ	0/1:197,119:109:-66.39,-32.84,-311.74:99
-chr1	2605255	rs55876897	A	C	449.77	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=317;Dels=0.00;HRun=3;HaplotypeScore=260.93;MQ=33.01;MQ0=35;QD=1.42;SB=-150.70	GT:AD:DP:GL:GQ	0/1:239,77:117:-83.21,-34.95,-326.08:99
-chr1	2605259	rs56999649	T	G	716.83	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=300;Dels=0.00;HRun=1;HaplotypeScore=227.19;MQ=34.47;MQ0=29;QD=2.39;SB=-184.23	GT:AD:DP:GL:GQ	0/1:116,182:121:-111.42,-36.45,-316.52:99
-chr1	2605264	rs4648676	C	T	210.17	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=316;Dels=0.00;HRun=0;HaplotypeScore=557.56;MQ=35.06;MQ0=25;QD=0.67;SB=-21.82	GT:AD:DP:GL:GQ	0/1:289,24:136:-67.74,-43.44,-416.85:99
-chr1	2605334	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=4;HaplotypeScore=186.79;MQ=36.75;MQ0=7;OQ=1485.59;QD=3.64;SB=-538.59	GT:AD:DP:GL:GQ	0/1:275,118:294:-243.85,-92.01,-1014.23:99
-chr1	2605341	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=415;Dels=0.00;HRun=0;HaplotypeScore=229.92;MQ=36.33;MQ0=7;OQ=215.75;QD=0.52;SB=102.02	GT:AD:DP:GL:GQ	0/1:365,48:297:-114.34,-89.49,-957.91:99
-chr1	2605353	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=430;Dels=0.00;HRun=0;HaplotypeScore=200.04;MQ=35.29;MQ0=7;OQ=112.93;QD=0.26;SB=60.60	GT:AD:DP:GL:GQ	0/1:389,39:313:-108.94,-94.36,-1191.77:99
-chr1	2605354	rs4648678	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=435;Dels=0.00;HRun=0;HaplotypeScore=203.33;MQ=35.33;MQ0=8;OQ=1038.03;QD=2.39;SB=-273.03	GT:AD:DP:GL:GQ	0/1:373,60:307:-199.57,-92.49,-955.77:99
-chr1	2605374	rs61763535	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=451;Dels=0.00;HRun=4;HaplotypeScore=174.52;MQ=33.98;MQ0=15;OQ=1772.73;QD=3.93;SB=-155.11	GT:AD:DP:GL:GQ	0/1:257,185:286:-266.74,-86.18,-803.52:99
-chr1	2605416	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=641;Dels=0.00;HRun=0;HaplotypeScore=116.73;MQ=29.52;MQ0=38;OQ=101.05;QD=0.16;SB=-26.09	GT:AD:DP:GL:GQ	0/1:592,49:383:-128.76,-115.37,-1229.08:99
-chr1	2605473	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=505;Dels=0.00;HRun=1;HaplotypeScore=72.40;MQ=31.01;MQ0=19;OQ=529.76;QD=1.05;SB=-238.32	GT:AD:DP:GL:GQ	0/1:450,54:383:-171.63,-115.37,-1165.16:99
-chr1	2605495	rs56293461	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=486;Dels=0.00;HRun=0;HaplotypeScore=95.08;MQ=32.56;MQ0=15;OQ=821.52;QD=1.69;SB=-409.31	GT:AD:DP:GL:GQ	0/1:403,80:369:-196.58,-111.15,-1127.43:99
-chr1	2605529	rs28651038	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=428;Dels=0.00;HRun=0;HaplotypeScore=82.79;MQ=34.53;MQ0=16;OQ=2602.34;QD=6.08;SB=-653.43	GT:AD:DP:GL:GQ	0/1:288,123:298:-353.40,-89.88,-659.17:99
-chr1	2605657	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=389;Dels=0.01;HRun=3;HaplotypeScore=175.38;MQ=30.03;MQ0=70;OQ=99.64;QD=0.26;SB=74.25	GT:AD:DP:GL:GQ	0/1:326,61:215:-77.75,-64.51,-660.65:99
-chr1	2605686	.	A	C	325.50	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=398;Dels=0.00;HRun=0;HaplotypeScore=501.75;MQ=28.89;MQ0=57;QD=0.82;SB=95.28	GT:AD:DP:GL:GQ	0/1:281,115:207:-98.21,-62.38,-634.44:99
-chr1	2605688	.	T	C	330.54	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=397;Dels=0.00;HRun=2;HaplotypeScore=497.47;MQ=28.92;MQ0=57;QD=0.83;SB=65.64	GT:AD:DP:GL:GQ	0/1:226,152:200:-122.31,-85.97,-661.75:99
-chr1	2605695	rs55827558	C	T	892.89	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=401;Dels=0.00;HRun=0;HaplotypeScore=534.98;MQ=29.24;MQ0=57;QD=2.23;SB=9.18	GT:AD:DP:GL:GQ	0/1:315,49:193:-153.53,-60.96,-575.72:99
-chr1	2605725	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=0;HaplotypeScore=360.95;MQ=32.85;MQ0=34;OQ=61.42;QD=0.22;SB=89.31	GT:AD:DP:GL:GQ	0/1:168,111:137:-50.75,-41.32,-529.65:94.25
-chr1	2605754	.	C	T	591.89	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=467.58;MQ=37.63;MQ0=15;QD=2.12;SB=140.37	GT:AD:DP:GL:GQ	0/1:235,40:127:-100.77,-38.29,-327.93:99
-chr1	2605755	.	G	A	525.10	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=436.48;MQ=37.79;MQ0=15;QD=1.94;SB=80.56	GT:AD:DP:GL:GQ	0/1:156,112:135:-96.50,-40.71,-357.83:99
-chr1	2605761	rs61763538	C	G	1339.29	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=259;Dels=0.00;HRun=1;HaplotypeScore=254.24;MQ=38.34;MQ0=17;QD=5.17;SB=4.72	GT:AD:DP:GL:GQ	0/1:84,169:121:-173.69,-36.48,-327.29:99
-chr1	2605783	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=297;Dels=0.00;HRun=0;HaplotypeScore=293.73;MQ=35.79;MQ0=20;OQ=562.93;QD=1.90;SB=121.81	GT:AD:DP:GL:GQ	0/1:195,74:123:-135.97,-76.40,-335.89:99
-chr1	2605795	.	G	A	252.45	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=324;Dels=0.00;HRun=0;HaplotypeScore=499.11;MQ=34.45;MQ0=20;QD=0.78;SB=203.66	GT:AD:DP:GL:GQ	0/1:201,116:126:-66.49,-37.96,-390.94:99
-chr1	2605804	.	C	T	66.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=356;Dels=0.00;HRun=0;HaplotypeScore=268.83;MQ=34.41;MQ0=22;QD=0.19;SB=-31.15	GT:AD:DP:GL:GQ	0/1:312,39:152:-58.55,-48.66,-460.06:98.95
-chr1	2605805	.	G	A	2340.79	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=356;Dels=0.00;HRun=0;HaplotypeScore=224.04;MQ=34.36;MQ0=23;QD=6.58;SB=164.74	GT:AD:DP:GL:GQ	0/1:199,157:186:-293.46,-56.10,-343.74:99
-chr1	2605831	.	C	T	1118.55	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=295;Dels=0.00;HRun=0;HaplotypeScore=238.92;MQ=35.23;MQ0=23;QD=3.79;SB=174.98	GT:AD:DP:GL:GQ	0/1:220,69:156:-162.17,-47.03,-376.03:99
-chr1	2605834	.	C	T	954.45	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=236.05;MQ=35.80;MQ0=20;QD=3.42;SB=200.51	GT:AD:DP:GL:GQ	0/1:218,59:162:-147.54,-48.81,-432.29:99
-chr1	2605836	.	T	G	306.78	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=263;Dels=0.00;HRun=0;HaplotypeScore=206.04;MQ=36.89;MQ0=20;QD=1.17;SB=188.58	GT:AD:DP:GL:GQ	0/1:205,52:142:-88.13,-54.17,-440.06:99
-chr1	2605841	.	A	G	545.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=1;HaplotypeScore=155.67;MQ=38.58;MQ0=20;QD=2.35;SB=182.62	GT:AD:DP:GL:GQ	0/1:160,70:131:-97.35,-39.47,-411.37:99
-chr1	2605874	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=124.99;MQ=42.37;MQ0=11;OQ=512.21;QD=2.21;SB=-14.46	GT:AD:DP:GL:GQ	0/1:155,74:147:-102.43,-47.93,-470.53:99
-chr1	2605886	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=108.30;MQ=44.38;MQ0=8;OQ=363.46;QD=1.81;SB=149.68	GT:AD:DP:GL:GQ	0/1:128,71:139:-81.51,-41.88,-451.45:99
-chr1	2605893	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=0;HaplotypeScore=120.52;MQ=42.83;MQ0=17;OQ=327.45;QD=1.66;SB=185.60	GT:AD:DP:GL:GQ	0/1:128,68:129:-77.12,-41.09,-417.50:99
-chr1	2605899	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=1;HaplotypeScore=109.97;MQ=40.67;MQ0=24;OQ=225.12;QD=1.10;SB=176.57	GT:AD:DP:GL:GQ	0/1:183,21:132:-65.55,-39.76,-408.38:99
-chr1	2605937	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=2;HaplotypeScore=54.75;MQ=35.12;MQ0=33;OQ=125.52;QD=0.63;SB=203.69	GT:AD:DP:GL:GQ	0/1:151,48:110:-48.99,-33.15,-378.43:99
-chr1	2605949	rs55869659	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=1;HaplotypeScore=266.34;MQ=30.03;MQ0=43;OQ=1589.71;QD=5.39;SB=-453.79	GT:AD:DP:GL:GQ	0/1:231,64:135:-202.93,-40.67,-294.60:99
-chr1	2605976	rs6683769	G	C	6974.39	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=343;Dels=0.02;HRun=3;HaplotypeScore=423.51;MQ=29.44;MQ0=37;QD=20.33;SB=-2874.56	GT:AD:DP:GL:GQ	1/1:19,284:159:-696.44,-51.43,-8.07:99
-chr1	2605977	rs6661848	C	T	1027.05	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=358;Dels=0.00;HRun=0;HaplotypeScore=456.32;MQ=29.31;MQ0=37;QD=2.87;SB=-210.09	GT:AD:DP:GL:GQ	0/1:307,50:125:-143.65,-37.67,-316.41:99
-chr1	2605979	.	C	A	1028.24	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=357;Dels=0.00;HRun=1;HaplotypeScore=354.37;MQ=29.31;MQ0=37;QD=2.88;SB=152.21	GT:AD:DP:GL:GQ	0/1:297,56:154:-152.50,-46.39,-400.06:99
-chr1	2605985	.	A	G	302.88	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=344;Dels=0.00;HRun=1;HaplotypeScore=327.75;MQ=29.96;MQ0=33;QD=0.88;SB=170.59	GT:AD:DP:GL:GQ	0/1:269,70:128:-72.14,-38.56,-425.79:99
-chr1	2606004	.	C	T	951.09	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=672.95;MQ=32.63;MQ0=23;QD=3.28;SB=87.89	GT:AD:DP:GL:GQ	0/1:220,66:128:-136.98,-38.59,-302.88:99
-chr1	2606005	rs6683777	G	A	1342.36	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=287;Dels=0.00;HRun=0;HaplotypeScore=631.13;MQ=33.21;MQ0=21;QD=4.68;SB=-76.00	GT:AD:DP:GL:GQ	0/1:85,177:126:-230.50,-92.98,-257.82:99
-chr1	2606006	rs57008511	G	T	1549.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=289;Dels=0.00;HRun=0;HaplotypeScore=644.99;MQ=33.16;MQ0=21;QD=5.36;SB=-385.70	GT:AD:DP:GL:GQ	0/1:228,60:127:-196.55,-38.27,-243.78:99
-chr1	2606009	.	A	T	459	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=0;HaplotypeScore=430.52;MQ=33.69;MQ0=19;QD=1.63;SB=105.62	GT:AD:DP:GL:GQ	0/1:113,66:123:-152.84,-103.65,-371.87:99
-chr1	2606031	.	C	G	597.38	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=1;HaplotypeScore=164.77;MQ=37.58;MQ0=8;QD=2.69;SB=139.07	GT:AD:DP:GL:GQ	0/1:114,51:127:-143.77,-80.75,-412.83:99
-chr1	2606038	.	C	A	277.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=0;HaplotypeScore=107.00;MQ=38.94;MQ0=8;QD=1.28;SB=120.78	GT:AD:DP:GL:GQ	0/1:160,54:121:-67.44,-36.45,-363.09:99
-chr1	2606041	.	G	T	124.23	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=0;HaplotypeScore=125.82;MQ=39.98;MQ0=7;QD=0.60;SB=144.54	GT:AD:DP:GL:GQ	0/1:161,44:113:-49.75,-34.04,-340.70:99
-chr1	2606206	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=315;Dels=0.00;HRun=1;HaplotypeScore=256.44;MQ=28.06;MQ0=39;OQ=155.48;QD=0.49;SB=-29.90	GT:AD:DP:GL:GQ	0/1:209,63:107:-66.50,-47.67,-397.67:99
-chr1	2606217	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=250;Dels=0.00;HRun=3;HaplotypeScore=224.65;MQ=29.86;MQ0=28;OQ=458.20;QD=1.83;SB=-95.78	GT:AD:DP:GL:GQ	0/1:87,160:81:-76.54,-27.44,-208.99:99
-chr1	2606220	rs36162961	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=249;Dels=0.00;HRun=0;HaplotypeScore=180.31;MQ=29.93;MQ0=27;OQ=201.47;QD=0.81;SB=-7.21	GT:AD:DP:GL:GQ	0/1:213,32:103:-54.47,-31.04,-311.81:99
-chr1	2606247	rs6662065	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=156;Dels=0.00;HRun=0;HaplotypeScore=58.65;MQ=36.60;MQ0=15;OQ=2337.23;QD=14.98;SB=-1097.47	GT:AD:DP:GL:GQ	0/1:41,86:97:-280.18,-43.17,-102.47:99
-chr1	2606279	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=1;HaplotypeScore=25.92;MQ=42.76;MQ0=2;OQ=312.76;QD=2.56;SB=-74.63	GT:AD:DP:GL:GQ	0/1:94,28:104:-65.90,-31.34,-343.27:99
-chr1	2606294	rs28562476	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.00;HRun=0;HaplotypeScore=45.48;MQ=41.64;MQ0=3;OQ=158.71;QD=1.23;SB=-91.27	GT:AD:DP:GL:GQ	0/1:99,30:98:-48.69,-29.54,-326.61:99
-chr1	2606300	rs6662172	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=1;HaplotypeScore=45.57;MQ=40.35;MQ0=4;OQ=2445.81;QD=16.53;SB=-1064.82	GT:AD:DP:GL:GQ	0/1:63,84:112:-281.60,-33.73,-119.13:99
-chr1	2606379	rs28410393	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=0;HaplotypeScore=27.63;MQ=39.78;MQ0=6;OQ=368.46;QD=3.02;SB=6.71	GT:AD:DP:GL:GQ	0/1:95,26:92:-67.86,-27.73,-327.77:99
-chr1	2606380	rs28520729	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=27.50;MQ=39.82;MQ0=6;OQ=559.99;QD=4.71;SB=-194.85	GT:AD:DP:GL:GQ	0/1:94,25:96:-88.22,-28.94,-322.33:99
-chr1	2606465	rs28436923	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=147;Dels=0.00;HRun=0;HaplotypeScore=131.13;MQ=40.98;MQ0=13;OQ=2035.71;QD=13.85;SB=-905.49	GT:AD:DP:GL:GQ	0/1:80,64:81:-231.26,-24.41,-73.56:99
-chr1	2606518	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=218.01;MQ=25.24;MQ0=20;OQ=216.97;QD=1.17;SB=68.19	GT:AD:DP:GL:GQ	0/1:119,56:69:-45.78,-20.79,-195.94:99
-chr1	2606520	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=182;Dels=0.01;HRun=1;HaplotypeScore=197.55;MQ=24.90;MQ0=18;OQ=425.87;QD=2.34;SB=7.72	GT:AD:DP:GL:GQ	0/1:98,71:68:-66.40,-20.53,-203.96:99
-chr1	2606555	rs55641610	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=142;Dels=0.00;HRun=0;HaplotypeScore=86.83;MQ=22.44;MQ0=15;OQ=611.31;QD=4.31;SB=-217.67	GT:AD:DP:GL:GQ	0/1:66,72:64:-83.70,-19.29,-186.04:99
-chr1	2606567	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=1;HaplotypeScore=115.34;MQ=22.30;MQ0=19;OQ=114.64;QD=0.87;SB=-3.31	GT:AD:DP:GL:GQ	0/1:113,14:59:-32.52,-17.77,-180.72:99
-chr1	2606594	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=41.70;MQ=23.56;MQ0=16;OQ=75.03;QD=0.63;SB=28.48	GT:AD:DP:GL:GQ	0/1:83,36:66:-30.68,-19.89,-255.45:99
-chr1	2606643	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=21.80;MQ=30.64;MQ0=12;OQ=1721.23;QD=15.37;SB=-793.00	GT:AD:DP:GL:GQ	0/1:46,66:82:-200.11,-24.70,-94.60:99
-chr1	2606798	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=16.08;MQ=18.33;MQ0=33;OQ=155.22;QD=2.13;SB=-92.26	GT:AD:DP:GL:GQ	0/1:36,34:23:-29.36,-10.56,-75.52:99
-chr1	2607095	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=115.98;MQ=20.76;MQ0=93;OQ=63.80;QD=0.37;SB=-35.41	GT:AD:DP:GL:GQ	0/1:164,10:54:-25.95,-16.29,-195.04:96.63
-chr1	2607127	rs28555663	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=71.01;MQ=31.05;MQ0=18;OQ=1628.35;QD=13.57;SB=-397.76	GT:AD:DP:GL:GQ	0/1:27,60:78:-215.41,-49.30,-93.76:99
-chr1	2607162	rs61763542	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=1;HaplotypeScore=85.56;MQ=29.70;MQ0=30;OQ=368.13;QD=1.71;SB=-56.56	GT:AD:DP:GL:GQ	0/1:178,35:124:-77.45,-37.35,-360.47:99
-chr1	2607163	.	G	A	13.12	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=2;HaplotypeScore=87.56;MQ=29.61;MQ0=31;QD=0.06;SB=-11.83	GT:AD:DP:GL:GQ	0/1:187,28:129:-43.44,-38.86,-425.52:45.74
-chr1	2607204	.	G	C	43.54	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=0;HaplotypeScore=43.04;MQ=31.64;MQ0=30;QD=0.22;SB=-29.18	GT:AD:DP:GL:GQ	0/1:170,26:109:-40.50,-32.86,-424.67:76.37
-chr1	2607231	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=1;HaplotypeScore=72.77;MQ=31.17;MQ0=24;OQ=125.47;QD=0.87;SB=-42.71	GT:AD:DP:GL:GQ	0/1:125,19:75:-38.43,-22.60,-228.94:99
-chr1	2607242	rs61763545	G	T	46.85	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=36.90;MQ=31.04;MQ0=29;QD=0.40;SB=43.89	GT:AD:DP:GL:GQ	0/1:84,30:54:-24.25,-16.28,-154.98:79.69
-chr1	2607298	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=68.12;MQ=14.41;MQ0=82;OQ=66.90;QD=0.45;SB=20.86	GT:AD:DP:GL:GQ	0/1:129,10:21:-19.87,-9.89,-58.18:99
-chr1	2607355	rs61765818	C	T	12.91	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=56.37;MQ=16.61;MQ0=62;QD=0.11;SB=29.06	GT:AD:DP:GL:GQ	0/1:90,27:23:-11.49,-6.94,-61.93:45.51
-chr1	2607366	.	A	G	13.05	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=2;HaplotypeScore=34.50;MQ=17.10;MQ0=55;QD=0.12;SB=29.12	GT:AD:DP:GL:GQ	0/1:102,6:22:-11.19,-6.63,-75.23:45.67
-chr1	2607368	rs61763546	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=35.70;MQ=17.26;MQ0=53;OQ=303.93;QD=2.87;SB=-146.92	GT:AD:DP:GL:GQ	0/1:46,59:26:-41.51,-7.84,-47.60:99
-chr1	2607409	.	G	A	15.60	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=56.89;MQ=28.46;MQ0=6;QD=0.24;SB=38.64	GT:AD:DP:GL:GQ	0/1:41,24:37:-15.99,-11.15,-106.07:48.31
-chr1	2607422	rs56133135	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=19.37;MQ=32.69;MQ0=0;OQ=693.38;QD=12.61;SB=2.03	GT:AD:DP:GL:GQ	0/1:26,28:39:-84.38,-11.76,-83.37:99
-chr1	2607465	rs61763547	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=40.98;MQ=25.86;MQ0=35;OQ=388.51;QD=4.63;SB=-36.91	GT:AD:DP:GL:GQ	0/1:60,23:42:-54.79,-12.65,-94.92:99
-chr1	2607520	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=176;Dels=0.00;HRun=1;HaplotypeScore=43.55;MQ=22.90;MQ0=79;OQ=121.23;QD=0.69;SB=8.68	GT:AD:DP:GL:GQ	0/1:158,14:67:-35.59,-20.18,-205.83:99
-chr1	2607562	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=0;HaplotypeScore=58.31;MQ=31.97;MQ0=28;OQ=222.37;QD=1.51;SB=-108.77	GT:AD:DP:GL:GQ	0/1:118,16:74:-51.32,-25.80,-191.60:99
-chr1	2607568	rs61763549	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=80.59;MQ=33.84;MQ0=16;OQ=1066.74;QD=7.90;SB=-480.14	GT:AD:DP:GL:GQ	0/1:64,70:72:-131.67,-21.72,-176.26:99
-chr1	2607579	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=1;HaplotypeScore=59.49;MQ=32.83;MQ0=15;OQ=376.87;QD=2.37;SB=-134.64	GT:AD:DP:GL:GQ	0/1:129,30:89:-67.78,-26.81,-244.98:99
-chr1	2607622	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=166;Dels=0.00;HRun=1;HaplotypeScore=74.61;MQ=28.79;MQ0=41;OQ=121.71;QD=0.73;SB=1.49	GT:AD:DP:GL:GQ	0/1:144,22:68:-35.94,-20.49,-206.61:99
-chr1	2607635	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=177;Dels=0.00;HRun=1;HaplotypeScore=30.67;MQ=24.43;MQ0=69;OQ=168.44;QD=0.95;SB=-26.38	GT:AD:DP:GL:GQ	0/1:144,24:48:-34.61,-14.49,-156.01:99
-chr1	2607650	.	G	A	36.08	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=75.42;MQ=22.15;MQ0=92;QD=0.19;SB=17.06	GT:AD:DP:GL:GQ	0/1:183,11:48:-21.35,-14.46,-155.19:68.92
-chr1	2607670	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=229;Dels=0.00;HRun=0;HaplotypeScore=160.50;MQ=16.74;MQ0=141;OQ=99.29;QD=0.43;SB=62.11	GT:AD:DP:GL:GQ	0/1:219,9:33:-23.18,-9.97,-80.62:99
-chr1	2607674	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=226;Dels=0.00;HRun=0;HaplotypeScore=115.26;MQ=15.31;MQ0=147;OQ=144.37;QD=0.64;SB=59.23	GT:AD:DP:GL:GQ	0/1:144,82:32:-27.37,-9.65,-111.07:99
-chr1	2607705	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=135.41;MQ=9.50;MQ0=238;OQ=88.23;QD=0.29;SB=44.16	GT:AD:DP:GL:GQ	0/1:293,13:26:-19.94,-7.83,-70.73:99
-chr1	2607732	.	A	G	46.69	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=0;HaplotypeScore=160.28;MQ=9.40;MQ0=205;QD=0.18;SB=38.16	GT:AD:DP:GL:GQ	0/1:246,15:21:-14.28,-6.33,-70.03:79.52
-chr1	2607768	.	C	G	49.76	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=95.94;MQ=10.01;MQ0=124;QD=0.30;SB=-3.98	GT:AD:DP:GL:GQ	0/1:136,25:16:-13.08,-4.82,-52.20:82.60
-chr1	2607891	rs7416366	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=0;HaplotypeScore=58.84;MQ=34.41;MQ0=14;OQ=1644.48;QD=13.48;SB=-506.65	GT:AD:DP:GL:GQ	0/1:59,63:73:-189.73,-22.00,-69.36:99
-chr1	2607919	.	C	G	24.55	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=0;HaplotypeScore=83.78;MQ=30.54;MQ0=25;QD=0.11;SB=109.84	GT:AD:DP:GL:GQ	0/1:205,16:120:-41.91,-36.17,-462.22:57.38
-chr1	2607925	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=102.41;MQ=29.59;MQ0=28;OQ=208.07;QD=0.92;SB=12.89	GT:AD:DP:GL:GQ	0/1:171,51:116:-59.04,-34.95,-344.67:99
-chr1	2607990	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=62.53;MQ=19.75;MQ0=60;OQ=143.02;QD=0.67;SB=-11.93	GT:AD:DP:GL:GQ	0/1:169,45:70:-38.68,-21.10,-211.21:99
-chr1	2608016	rs61763552	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.00;HRun=1;HaplotypeScore=33.08;MQ=18.38;MQ0=35;OQ=157.73;QD=1.02;SB=-56.91	GT:AD:DP:GL:GQ	0/1:74,80:55:-35.63,-16.57,-153.82:99
-chr1	2608035	rs60386739	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=68.10;MQ=20.23;MQ0=19;OQ=139.83;QD=0.99;SB=-34.61	GT:AD:DP:GL:GQ	0/1:123,11:68:-37.75,-20.49,-226.75:99
-chr1	2608187	.	T	A	19.78	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=100.91;MQ=20.82;MQ0=35;QD=0.14;SB=68.21	GT:AD:DP:GL:GQ	0/1:73,68:45:-18.82,-13.56,-139.70:52.57
-chr1	2608269	rs28464857	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=0;HaplotypeScore=134.04;MQ=20.25;MQ0=84;OQ=169.32;QD=0.91;SB=-92.57	GT:AD:DP:GL:GQ	0/1:170,15:57:-37.38,-17.17,-176.94:99
-chr1	2608484	rs28436796	C	G	0.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.24;MQ=47.84;MQ0=1;OQ=487.04;QD=5.47;SB=-196.59	GT:AD:DP:GL:GQ	0/1:66,21:74:-74.31,-22.32,-232.63:99
-chr1	2608664	rs4074927	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=182;Dels=0.01;HRun=1;HaplotypeScore=99.89;MQ=34.06;MQ0=19;OQ=2375.90;QD=13.05;SB=-939.83	GT:AD:DP:GL:GQ	0/1:91,85:111:-274.32,-33.45,-107.97:99
-chr1	2608867	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=118;Dels=0.01;HRun=2;HaplotypeScore=20.49;MQ=45.47;MQ0=7;OQ=974.46;QD=8.26;SB=-210.08	GT:AD:DP:GL:GQ	0/1:62,55:87:-126.99,-26.26,-221.81:99
-chr1	2609068	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=3;HaplotypeScore=118.35;MQ=34.13;MQ0=24;OQ=526.94;QD=2.38;SB=137.47	GT:AD:DP:GL:GQ	0/1:93,112:118:-95.11,-39.14,-362.67:99
-chr1	2609088	rs6604995	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=244;Dels=0.00;HRun=1;HaplotypeScore=80.61;MQ=35.58;MQ0=31;OQ=2415.96;QD=9.90;SB=-1183.52	GT:AD:DP:GL:GQ	0/1:168,75:136:-285.85,-40.97,-232.15:99
-chr1	2609117	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=242;Dels=0.00;HRun=0;HaplotypeScore=86.85;MQ=40.05;MQ0=22;OQ=564.86;QD=2.33;SB=136.90	GT:AD:DP:GL:GQ	0/1:188,54:147:-104.06,-44.29,-429.75:99
-chr1	2609119	.	T	A	10.35	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=66.02;MQ=40.40;MQ0=19;QD=0.04;SB=-13.71	GT:AD:DP:GL:GQ	0/1:216,24:153:-50.36,-46.09,-521.00:42.77
-chr1	2609136	rs6680012	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.00;HRun=0;HaplotypeScore=138.11;MQ=41.19;MQ0=14;OQ=1288.83;QD=5.11;SB=-20.42	GT:AD:DP:GL:GQ	0/1:111,140:159:-180.06,-47.89,-385.06:99
-chr1	2609225	rs61765683	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=279;Dels=0.00;HRun=0;HaplotypeScore=196.30;MQ=28.44;MQ0=55;OQ=715.74;QD=2.57;SB=-196.88	GT:AD:DP:GL:GQ	0/1:215,53:119:-124.19,-49.34,-290.35:99
-chr1	2609273	rs4648680	A	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=189;Dels=0.00;HRun=0;HaplotypeScore=41.61;MQ=19.84;MQ0=34;OQ=2444.19;QD=12.93;SB=-891.61	GT:AD:DP:GL:GQ	1/1:0,186:71:-248.05,-21.40,-0.04:99
-chr1	2609305	rs6672446	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=196;Dels=0.00;HRun=1;HaplotypeScore=44.27;MQ=21.28;MQ0=40;OQ=1443.42;QD=7.36;SB=-313.15	GT:AD:DP:GL:GQ	0/1:121,75:90:-174.74,-27.11,-141.16:99
-chr1	2609332	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=25.23;MQ=24.42;MQ0=31;OQ=1010.88;QD=5.29;SB=-411.33	GT:AD:DP:GL:GQ	0/1:130,60:101:-134.82,-30.45,-224.41:99
-chr1	2609354	rs61765685	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=264;Dels=0.00;HRun=0;HaplotypeScore=43.36;MQ=26.38;MQ0=47;OQ=877.95;QD=3.33;SB=-290.40	GT:AD:DP:GL:GQ	0/1:123,140:122:-127.86,-36.78,-326.56:99
-chr1	2609381	.	C	A	220.25	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=378;Dels=0.00;HRun=0;HaplotypeScore=205.42;MQ=26.54;MQ0=63;QD=0.58;SB=-92.16	GT:AD:DP:GL:GQ	0/1:327,50:132:-65.07,-39.76,-400.14:99
-chr1	2609387	.	C	A	185.57	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=439;Dels=0.00;HRun=0;HaplotypeScore=250.48;MQ=26.77;MQ0=67;QD=0.42;SB=5.95	GT:AD:DP:GL:GQ	0/1:387,52:145:-65.52,-43.68,-445.14:99
-chr1	2609389	.	C	T	92.18	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=450;Dels=0.00;HRun=0;HaplotypeScore=251.37;MQ=26.71;MQ0=67;QD=0.20;SB=175.01	GT:AD:DP:GL:GQ	0/1:391,58:155:-59.19,-46.69,-504.94:99
-chr1	2609452	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=378;Dels=0.00;HRun=2;HaplotypeScore=241.26;MQ=31.94;MQ0=54;OQ=971.37;QD=2.57;SB=-357.67	GT:AD:DP:GL:GQ	0/1:305,73:146:-144.40,-43.98,-395.70:99
-chr1	2609455	rs58318704	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=356;Dels=0.00;HRun=0;HaplotypeScore=220.51;MQ=31.91;MQ0=49;OQ=2158.97;QD=6.06;SB=-1017.43	GT:AD:DP:GL:GQ	0/1:79,219:141:-270.22,-51.04,-310.17:99
-chr1	2609547	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=66.94;MQ=35.31;MQ0=17;OQ=674.03;QD=3.60;SB=-244.40	GT:AD:DP:GL:GQ	0/1:135,50:133:-110.75,-40.07,-356.06:99
-chr1	2609555	rs28575476	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=0;HaplotypeScore=68.51;MQ=35.35;MQ0=12;OQ=1288.35;QD=7.53;SB=-481.51	GT:AD:DP:GL:GQ	0/1:88,78:120:-168.27,-36.15,-252.36:99
-chr1	2609591	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=34.97;MQ=33.84;MQ0=11;OQ=2484.13;QD=14.44;SB=-938.03	GT:AD:DP:GL:GQ	0/1:84,88:135:-292.43,-40.73,-257.29:99
-chr1	2609644	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=353;Dels=0.00;HRun=1;HaplotypeScore=213.12;MQ=29.19;MQ0=26;OQ=1530.86;QD=4.34;SB=-311.00	GT:AD:DP:GL:GQ	0/1:205,118:177:-209.80,-53.43,-491.62:99
-chr1	2609668	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=375;Dels=0.01;HRun=0;HaplotypeScore=299.53;MQ=28.31;MQ0=38;OQ=119.51;QD=0.32;SB=-39.52	GT:AD:DP:GL:GQ	0/1:330,33:168:-65.89,-50.66,-484.68:99
-chr1	2609669	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=370;Dels=0.01;HRun=3;HaplotypeScore=295.29;MQ=28.20;MQ0=38;OQ=509.10;QD=1.38;SB=-148.65	GT:AD:DP:GL:GQ	0/1:202,146:144:-97.68,-43.48,-474.43:99
-chr1	2609682	.	T	C	10.13	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=1;HaplotypeScore=318.76;MQ=28.20;MQ0=43;QD=0.03;SB=29.61	GT:AD:DP:GL:GQ	0/1:328,21:141:-56.49,-52.23,-495.36:42.52
-chr1	2609688	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=357;Dels=0.00;HRun=0;HaplotypeScore=304.49;MQ=28.68;MQ0=43;OQ=540.31;QD=1.51;SB=-146.86	GT:AD:DP:GL:GQ	0/1:288,44:135:-97.99,-40.67,-405.76:99
-chr1	2609713	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=325;Dels=0.00;HRun=2;HaplotypeScore=235.46;MQ=29.07;MQ0=50;OQ=183.31;QD=0.56;SB=-70.06	GT:AD:DP:GL:GQ	0/1:293,30:98:-51.18,-29.56,-309.43:99
-chr1	2609764	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=67.69;MQ=41.15;MQ0=28;OQ=547.70;QD=3.06;SB=-220.32	GT:AD:DP:GL:GQ	0/1:154,22:97:-87.34,-29.29,-296.73:99
-chr1	2609770	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=51.04;MQ=41.72;MQ0=28;OQ=50.39;QD=0.29;SB=107.80	GT:AD:DP:GL:GQ	0/1:92,83:96:-37.25,-28.93,-332.67:83.23
-chr1	2609843	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=18.24;MQ=41.49;MQ0=22;OQ=514.69;QD=3.78;SB=-103.96	GT:AD:DP:GL:GQ	0/1:89,47:97:-83.99,-29.23,-261.15:99
-chr1	2609879	rs60995822	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=53.77;MQ=31.75;MQ0=20;OQ=1688.97;QD=13.62;SB=-590.07	GT:AD:DP:GL:GQ	0/1:21,102:69:-192.97,-20.79,-48.84:99
-chr1	2609938	rs61765691	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=210;Dels=0.00;HRun=0;HaplotypeScore=78.06;MQ=23.32;MQ0=40;OQ=3717.12;QD=17.70;SB=-1751.06	GT:AD:DP:GL:GQ	1/1:3,206:105:-370.71,-31.64,-0.05:99
-chr1	2610024	rs60041779	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=0;HaplotypeScore=93.88;MQ=40.95;MQ0=10;OQ=112.09;QD=0.90;SB=83.51	GT:AD:DP:GL:GQ	0/1:77,47:69:-35.30,-20.81,-248.60:99
-chr1	2610174	rs61765693	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=331;Dels=0.00;HRun=1;HaplotypeScore=45.52;MQ=28.55;MQ0=47;OQ=762.69;QD=2.30;SB=-121.02	GT:AD:DP:GL:GQ	0/1:162,168:127:-117.91,-38.35,-381.81:99
-chr1	2610186	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=102.42;MQ=26.42;MQ0=47;OQ=1467.29;QD=4.14;SB=-129.66	GT:AD:DP:GL:GQ	0/1:303,49:127:-191.55,-41.54,-284.06:99
-chr1	2610220	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=0;HaplotypeScore=158.15;MQ=26.10;MQ0=33;OQ=52.73;QD=0.15;SB=-33.83	GT:AD:DP:GL:GQ	0/1:323,33:128:-47.12,-38.57,-405.99:85.57
-chr1	2610228	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=347;Dels=0.00;HRun=0;HaplotypeScore=258.31;MQ=25.86;MQ0=32;OQ=417.23;QD=1.20;SB=-217.33	GT:AD:DP:GL:GQ	0/1:235,103:129:-86.15,-41.14,-407.87:99
-chr1	2610288	rs61765694	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=240;Dels=0.00;HRun=0;HaplotypeScore=161.76;MQ=34.28;MQ0=24;OQ=460.60;QD=1.92;SB=-235.27	GT:AD:DP:GL:GQ	0/1:119,106:122:-91.58,-42.24,-307.51:99
-chr1	2610304	rs57887432	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=214;Dels=0.00;HRun=1;HaplotypeScore=126.12;MQ=34.24;MQ0=19;OQ=2078.47;QD=9.71;SB=-912.59	GT:AD:DP:GL:GQ	0/1:141,72:106:-243.09,-31.96,-204.85:99
-chr1	2610325	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=58.60;MQ=38.14;MQ0=8;OQ=610.61;QD=3.94;SB=-307.83	GT:AD:DP:GL:GQ	0/1:117,38:94:-92.67,-28.33,-261.00:99
-chr1	2610342	rs58318302	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=64.33;MQ=41.99;MQ0=6;OQ=1628.60;QD=14.67;SB=-308.68	GT:AD:DP:GL:GQ	0/1:43,66:83:-191.15,-25.00,-121.94:99
-chr1	2610414	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=331;Dels=0.00;HRun=0;HaplotypeScore=235.51;MQ=30.47;MQ0=22;OQ=935.47;QD=2.83;SB=-429.72	GT:AD:DP:GL:GQ	0/1:275,53:139:-142.25,-45.42,-348.13:99
-chr1	2610415	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=337;Dels=0.00;HRun=1;HaplotypeScore=237.48;MQ=30.55;MQ0=22;OQ=1122.12;QD=3.33;SB=-419.64	GT:AD:DP:GL:GQ	0/1:156,170:150:-188.30,-72.80,-443.59:99
-chr1	2610441	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=398;Dels=0.00;HRun=0;HaplotypeScore=305.07;MQ=30.41;MQ0=29;OQ=523.24;QD=1.31;SB=-254.15	GT:AD:DP:GL:GQ	0/1:145,184:159:-118.96,-63.35,-451.63:99
-chr1	2610473	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=351;Dels=0.00;HRun=1;HaplotypeScore=331.68;MQ=29.41;MQ0=37;OQ=1376.69;QD=3.92;SB=-162.02	GT:AD:DP:GL:GQ	0/1:286,64:127:-179.22,-38.27,-253.78:99
-chr1	2610474	rs28418735	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=350;Dels=0.03;HRun=3;HaplotypeScore=309.89;MQ=29.49;MQ0=38;OQ=65.43;QD=0.19;SB=221.76	GT:AD:DP:GL:GQ	0/1:271,68:132:-49.66,-39.83,-486.19:98.27
-chr1	2610506	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=143.13;MQ=32.96;MQ0=24;OQ=241.48;QD=1.21;SB=-28.90	GT:AD:DP:GL:GQ	0/1:85,107:74:-49.73,-22.29,-227.60:99
-chr1	2610517	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=3;HaplotypeScore=142.26;MQ=34.55;MQ0=20;OQ=220.80;QD=1.35;SB=75.68	GT:AD:DP:GL:GQ	0/1:65,82:63:-52.24,-26.88,-202.10:99
-chr1	2610573	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=104.72;MQ=37.56;MQ0=8;OQ=553.10;QD=3.29;SB=-39.90	GT:AD:DP:GL:GQ	0/1:88,80:80:-82.71,-24.12,-188.70:99
-chr1	2610594	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=122;Dels=0.02;HRun=0;HaplotypeScore=84.91;MQ=43.41;MQ0=3;OQ=1001.55;QD=8.21;SB=-522.00	GT:AD:DP:GL:GQ	0/1:52,66:81:-127.86,-24.42,-216.74:99
-chr1	2610598	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=2;HaplotypeScore=59.26;MQ=42.74;MQ0=3;OQ=1239.36;QD=9.61;SB=-593.34	GT:AD:DP:GL:GQ	0/1:51,77:86:-153.17,-25.95,-194.38:99
-chr1	2610632	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=151.91;MQ=39.51;MQ0=6;OQ=369.19;QD=2.01;SB=-62.83	GT:AD:DP:GL:GQ	0/1:154,30:112:-73.95,-33.75,-316.70:99
-chr1	2610635	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=139.15;MQ=38.51;MQ0=6;OQ=274.48;QD=1.35;SB=-41.80	GT:AD:DP:GL:GQ	0/1:164,37:123:-67.82,-37.08,-455.22:99
-chr1	2610665	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=1;HaplotypeScore=315.73;MQ=36.51;MQ0=11;OQ=1591.77;QD=7.40;SB=-670.77	GT:AD:DP:GL:GQ	0/1:149,65:109:-195.35,-32.89,-252.45:99
-chr1	2610712	rs55957791	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=331.10;MQ=30.73;MQ0=38;OQ=351.17;QD=1.26;SB=50.69	GT:AD:DP:GL:GQ	0/1:157,116:120:-81.22,-42.82,-389.65:99
-chr1	2610714	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=276;Dels=0.03;HRun=1;HaplotypeScore=276.80;MQ=30.44;MQ0=40;OQ=799.29;QD=2.90;SB=-215.74	GT:AD:DP:GL:GQ	0/1:208,58:112:-116.35,-33.14,-272.42:99
-chr1	2610938	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=61.08;MQ=40.33;MQ0=9;OQ=2312.34;QD=13.21;SB=-496.11	GT:AD:DP:GL:GQ	0/1:80,95:114:-268.87,-34.35,-152.15:99
-chr1	2610982	rs61765696	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=168;Dels=0.00;HRun=1;HaplotypeScore=77.40;MQ=36.09;MQ0=4;OQ=730.22;QD=4.35;SB=-250.72	GT:AD:DP:GL:GQ	0/1:133,34:93:-104.33,-28.02,-240.35:99
-chr1	2610988	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=177;Dels=0.00;HRun=2;HaplotypeScore=104.66;MQ=37.43;MQ0=4;OQ=180.91;QD=1.02;SB=-14.66	GT:AD:DP:GL:GQ	0/1:124,53:103:-52.42,-31.04,-397.79:99
-chr1	2611005	rs28657620	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=175;Dels=0.00;HRun=0;HaplotypeScore=240.92;MQ=35.09;MQ0=11;OQ=589.04;QD=3.37;SB=-319.71	GT:AD:DP:GL:GQ	0/1:148,26:83:-87.21,-25.02,-177.35:99
-chr1	2611008	rs61765697	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=177;Dels=0.00;HRun=0;HaplotypeScore=268.58;MQ=34.75;MQ0=11;OQ=814.23;QD=4.60;SB=-203.16	GT:AD:DP:GL:GQ	0/1:94,75:81:-109.12,-24.42,-183.44:99
-chr1	2611037	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=3;HaplotypeScore=47.75;MQ=33.75;MQ0=25;OQ=310.37;QD=1.46;SB=128.35	GT:AD:DP:GL:GQ	0/1:180,32:105:-65.95,-31.63,-301.79:99
-chr1	2611075	.	C	A	675.15	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=0;HaplotypeScore=289.45;MQ=35.67;MQ0=15;QD=3.41;SB=-245.12	GT:AD:DP:GL:GQ	0/1:138,49:92:-105.75,-34.95,-225.78:99
-chr1	2611076	.	C	A	59.41	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=288.77;MQ=35.79;MQ0=15;QD=0.30;SB=-43.36	GT:AD:DP:GL:GQ	0/1:179,20:91:-36.64,-27.42,-281.03:92.25
-chr1	2611077	.	T	C	1287	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=3;HaplotypeScore=272.49;MQ=35.97;MQ0=16;QD=6.47;SB=-518.91	GT:AD:DP:GL:GQ	0/1:56,142:93:-160.01,-28.02,-190.32:99
-chr1	2611149	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=128.93;MQ=29.89;MQ0=30;OQ=118.35;QD=0.49;SB=-20.53	GT:AD:DP:GL:GQ	0/1:190,53:92:-42.83,-27.72,-276.95:99
-chr1	2611155	rs61765698	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=245;Dels=0.00;HRun=0;HaplotypeScore=130.50;MQ=30.96;MQ0=25;OQ=203.44;QD=0.83;SB=-29.37	GT:AD:DP:GL:GQ	0/1:191,50:97:-52.56,-28.94,-359.64:99
-chr1	2611193	rs61029569	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.01;HRun=0;HaplotypeScore=78.67;MQ=38.69;MQ0=8;OQ=1417.86;QD=9.21;SB=-633.08	GT:AD:DP:GL:GQ	0/1:43,100:84:-170.37,-25.30,-121.64:99
-chr1	2611212	rs28774982	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=125;Dels=0.00;HRun=0;HaplotypeScore=29.20;MQ=42.14;MQ0=3;OQ=3660.18;QD=29.28;SB=-1724.01	GT:AD:DP:GL:GQ	1/1:0,124:85:-365.02,-25.61,-0.03:99
-chr1	2611218	rs28581654	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=132;Dels=0.00;HRun=1;HaplotypeScore=33.13;MQ=42.84;MQ0=2;OQ=1779.64;QD=13.48;SB=-735.33	GT:AD:DP:GL:GQ	0/1:39,85:92:-211.73,-30.48,-139.53:99
-chr1	2611236	rs61765699	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=181;Dels=0.00;HRun=1;HaplotypeScore=137.95;MQ=39.80;MQ0=14;OQ=1598.49;QD=8.83;SB=-821.38	GT:AD:DP:GL:GQ	0/1:99,78:96:-192.06,-28.93,-137.58:99
-chr1	2611310	.	G	C	25	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=214;Dels=0.00;HRun=2;HaplotypeScore=68.15;MQ=29.71;MQ0=28;QD=0.12;SB=77.64	GT:AD:DP:GL:GQ	0/1:182,25:80:-33.47,-27.69,-302.15:57.82
-chr1	2611331	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=171.01;MQ=28.57;MQ0=19;OQ=169.19;QD=1.00;SB=32.13	GT:AD:DP:GL:GQ	0/1:101,40:47:-34.37,-14.17,-141.57:99
-chr1	2611336	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=0;HaplotypeScore=142.89;MQ=27.04;MQ0=20;OQ=617.89;QD=3.86;SB=-201.64	GT:AD:DP:GL:GQ	0/1:32,126:45:-78.63,-13.56,-88.17:99
-chr1	2611359	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=2;HaplotypeScore=100.78;MQ=27.44;MQ0=19;OQ=605.72;QD=3.79;SB=-223.68	GT:AD:DP:GL:GQ	0/1:36,124:39:-75.62,-11.76,-86.35:99
-chr1	2611360	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=172;Dels=0.01;HRun=0;HaplotypeScore=100.05;MQ=27.08;MQ0=24;OQ=169.30;QD=0.98;SB=23.10	GT:AD:DP:GL:GQ	0/1:135,36:41:-32.56,-12.35,-112.95:99
-chr1	2611385	.	A	G	25.43	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=141.90;MQ=28.13;MQ0=36;QD=0.13;SB=77.25	GT:AD:DP:GL:GQ	0/1:184,18:55:-22.41,-16.58,-186.56:58.25
-chr1	2611395	.	C	A	10.87	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=1;HaplotypeScore=214.46;MQ=28.47;MQ0=34;QD=0.06;SB=44.16	GT:AD:DP:GL:GQ	0/1:160,27:48:-18.79,-14.46,-145.75:43.33
-chr1	2611409	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=176;Dels=0.00;HRun=0;HaplotypeScore=170.63;MQ=30.96;MQ0=28;OQ=246.71;QD=1.40;SB=-63.23	GT:AD:DP:GL:GQ	0/1:66,90:51:-46.30,-18.34,-146.08:99
-chr1	2611417	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=201.92;MQ=31.46;MQ0=25;OQ=276.60;QD=1.55;SB=-61.04	GT:AD:DP:GL:GQ	0/1:50,88:59:-67.59,-36.64,-159.73:99
-chr1	2611440	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=297.52;MQ=31.70;MQ0=24;OQ=229.57;QD=1.28;SB=65.18	GT:AD:DP:GL:GQ	0/1:152,22:68:-46.74,-20.49,-196.70:99
-chr1	2611441	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=4;HaplotypeScore=281.36;MQ=31.83;MQ0=24;OQ=677.61;QD=3.87;SB=-187.78	GT:AD:DP:GL:GQ	0/1:57,116:70:-92.13,-21.09,-155.28:99
-chr1	2611460	.	G	C	143.72	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=209;Dels=0.02;HRun=1;HaplotypeScore=206.53;MQ=28.72;MQ0=29;QD=0.69;SB=95.33	GT:AD:DP:GL:GQ	0/1:169,33:67:-37.89,-20.23,-223.47:99
-chr1	2611462	.	G	C	346.96	DPFilter;HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=0;HaplotypeScore=159.36;MQ=28.99;MQ0=26;QD=1.68;SB=95.35	GT:AD:DP:GL:GQ	0/1:176,30:73:-60.00,-22.02,-249.89:99
-chr1	2611473	.	C	A	226.87	DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=0;HaplotypeScore=716.79;MQ=27.80;MQ0=23;QD=1.15;SB=98.33	GT:AD:DP:GL:GQ	0/1:167,28:68:-46.46,-20.49,-193.68:99
-chr1	2611481	.	A	C	47.15	DPFilter;HARD_TO_VALIDATE;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=3;HaplotypeScore=376.14;MQ=26.76;MQ0=25;QD=0.22;SB=4.29	GT:AD:DP:GL:GQ	0/1:158,51:68:-32.16,-24.16,-211.95:79.99
-chr1	2611482	rs28657015	C	T	493.48	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.03;HRun=0;HaplotypeScore=277.76;MQ=26.81;MQ0=24;QD=2.28;SB=-58.33	GT:AD:DP:GL:GQ	0/1:180,23:71:-73.42,-20.79,-178.37:99
-chr1	2611484	.	G	A	123.65	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=1;HaplotypeScore=257.24;MQ=26.43;MQ0=26;QD=0.57;SB=52.66	GT:AD:DP:GL:GQ	0/1:181,35:66:-35.53,-19.88,-208.25:99
-chr1	2611506	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=1;HaplotypeScore=227.39;MQ=23.92;MQ0=38;OQ=83.72;QD=0.34;SB=1.08	GT:AD:DP:GL:GQ	0/1:205,36:67:-31.84,-20.19,-209.30:99
-chr1	2611529	.	G	C	1369.67	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=198.19;MQ=24.21;MQ0=25;QD=7.40;SB=-595.38	GT:AD:DP:GL:GQ	0/1:36,136:57:-168.20,-27.95,-90.83:99
-chr1	2611531	.	T	A	49.73	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=1;HaplotypeScore=167.31;MQ=24.09;MQ0=26;QD=0.27;SB=30.12	GT:AD:DP:GL:GQ	0/1:175,9:48:-26.14,-17.88,-160.86:82.57
-chr1	2611537	.	A	C	10.75	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=150.76;MQ=24.75;MQ0=25;QD=0.06;SB=49.53	GT:AD:DP:GL:GQ	0/1:160,17:47:-21.51,-17.19,-149.44:43.20
-chr1	2611551	.	C	A	34.16	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=166;Dels=0.02;HRun=1;HaplotypeScore=423.66;MQ=25.51;MQ0=20;QD=0.21;SB=47.16	GT:AD:DP:GL:GQ	0/1:139,17:37:-21.33,-14.63,-112.07:67
-chr1	2611559	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=150;Dels=0.01;HRun=3;HaplotypeScore=531.42;MQ=25.48;MQ0=17;OQ=388.67;QD=2.59;SB=-7.62	GT:AD:DP:GL:GQ	0/1:47,82:45:-90.78,-48.63,-105.70:99
-chr1	2611586	.	G	A	21.13	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=158;Dels=0.00;HRun=1;HaplotypeScore=127.50;MQ=28.93;MQ0=18;QD=0.13;SB=47.15	GT:AD:DP:GL:GQ	0/1:123,29:42:-18.05,-12.65,-132.34:53.94
-chr1	2611593	.	C	A	39.57	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=189.22;MQ=30.35;MQ0=16;QD=0.29;SB=47.17	GT:AD:DP:GL:GQ	0/1:123,13:39:-18.99,-11.75,-120.10:72.41
-chr1	2611600	.	T	C	291.60	SnpCluster	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=2;HaplotypeScore=197.17;MQ=32.27;MQ0=10;QD=2.58;SB=-146.84	GT:AD:DP:GL:GQ	0/1:38,66:38:-47.43,-14.99,-100.79:99
-chr1	2611602	.	C	G	76.87	SnpCluster	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=173.17;MQ=32.76;MQ0=9;QD=0.68;SB=-63.17	GT:AD:DP:GL:GQ	0/1:81,31:39:-22.73,-11.76,-142.68:99
-chr1	2611613	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=122.16;MQ=34.85;MQ0=5;OQ=326.72;QD=4.08;SB=-171.57	GT:AD:DP:GL:GQ	0/1:20,59:33:-49.07,-13.11,-79.40:99
-chr1	2611623	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=114.07;MQ=31.99;MQ0=3;OQ=59.10;QD=0.57;SB=53.18	GT:AD:DP:GL:GQ	0/1:44,51:42:-30.56,-21.37,-135.55:91.94
-chr1	2611678	.	C	A	64.73	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=1;HaplotypeScore=80.70;MQ=27.19;MQ0=13;QD=0.45;SB=-53.00	GT:AD:DP:GL:GQ	0/1:121,21:50:-24.83,-15.07,-143.50:97.56
-chr1	2611679	.	C	T	18.94	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=77.77;MQ=26.46;MQ0=13;QD=0.14;SB=-28.00	GT:AD:DP:GL:GQ	0/1:130,7:48:-19.64,-14.46,-152.87:51.72
-chr1	2611680	.	C	A	348.12	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=72.18;MQ=26.57;MQ0=13;QD=2.58;SB=-130.78	GT:AD:DP:GL:GQ	0/1:71,64:46:-51.95,-13.86,-109.26:99
-chr1	2611697	rs28420770	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.01;HRun=1;HaplotypeScore=63.25;MQ=30.55;MQ0=12;OQ=549.37;QD=5.97;SB=-271.47	GT:AD:DP:GL:GQ	0/1:70,21:28:-66.35,-8.13,-30.04:99
-chr1	2611699	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=39.05;MQ=32.12;MQ0=10;OQ=169.31;QD=2.23;SB=14.08	GT:AD:DP:GL:GQ	0/1:20,50:24:-27.45,-7.24,-73.47:99
-chr1	2611710	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=70.70;MQ=31.94;MQ0=10;OQ=120.36;QD=1.56;SB=14.06	GT:AD:DP:GL:GQ	0/1:29,48:25:-22.85,-7.53,-69.69:99
-chr1	2611716	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=60.36;MQ=32.04;MQ0=11;OQ=222.09;QD=2.71;SB=-31.85	GT:AD:DP:GL:GQ	0/1:24,55:26:-33.33,-7.83,-79.05:99
-chr1	2611761	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=2;HaplotypeScore=77.17;MQ=34.64;MQ0=9;OQ=73.97;QD=1.01;SB=-32.72	GT:AD:DP:GL:GQ	0/1:30,33:31:-23.41,-12.73,-88.75:99
-chr1	2611777	.	A	C	23.19	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=20.98;MQ=38.72;MQ0=5;QD=0.42;SB=23.10	GT:AD:DP:GL:GQ	0/1:24,30:28:-14.03,-8.43,-89.75:56.01
-chr1	2611805	.	A	G	44.82	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=14.04;MQ=39.70;MQ0=6;QD=0.79;SB=-36.77	GT:AD:DP:GL:GQ	0/1:29,28:32:-17.41,-9.64,-104.85:77.66
-chr1	2611822	.	C	T	55.46	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=122.77;MQ=30.12;MQ0=10;QD=0.46;SB=-42.84	GT:AD:DP:GL:GQ	0/1:92,29:48:-23.31,-14.48,-136.72:88.30
-chr1	2611823	.	G	A	42.96	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=122.08;MQ=30.26;MQ0=10;QD=0.35;SB=5.54	GT:AD:DP:GL:GQ	0/1:91,15:51:-29.64,-22.06,-149.48:75.79
-chr1	2611827	.	C	G	117.16	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=1;HaplotypeScore=109.01;MQ=29.94;MQ0=10;QD=0.92;SB=-46.17	GT:AD:DP:GL:GQ	0/1:97,15:52:-50.99,-35.99,-189.94:99
-chr1	2611857	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=1;HaplotypeScore=130.70;MQ=25.34;MQ0=25;OQ=261.41;QD=1.07;SB=-55.24	GT:AD:DP:GL:GQ	0/1:221,22:85:-55.03,-25.61,-242.15:99
-chr1	2611880	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=242.50;MQ=25.49;MQ0=23;OQ=371.36;QD=1.47;SB=-110.03	GT:AD:DP:GL:GQ	0/1:223,22:91:-74.78,-34.36,-326.09:99
-chr1	2611909	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=117.77;MQ=27.67;MQ0=16;OQ=1593.34;QD=8.80;SB=-695.72	GT:AD:DP:GL:GQ	0/1:25,155:74:-184.91,-22.29,-95.32:99
-chr1	2611913	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=162;Dels=0.01;HRun=0;HaplotypeScore=121.10;MQ=28.43;MQ0=16;OQ=688.73;QD=4.25;SB=-310.55	GT:AD:DP:GL:GQ	0/1:24,47:69:-160.80,-88.65,-165.59:99
-chr1	2611940	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=1;HaplotypeScore=46.12;MQ=30.62;MQ0=15;OQ=640.18;QD=4.61;SB=-181.43	GT:AD:DP:GL:GQ	0/1:50,89:56:-84.19,-16.88,-155.00:99
-chr1	2611948	.	A	C	23.15	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=36.39;MQ=28.65;MQ0=12;QD=0.17;SB=47.17	GT:AD:DP:GL:GQ	0/1:116,20:55:-22.17,-16.57,-171.47:55.97
-chr1	2612014	rs28499205	G	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=56.64;MQ=32.76;MQ0=15;OQ=1145.21;QD=14.50;SB=-563.07	GT:AD:DP:GL:GQ	1/1:1,78:27:-118.11,-8.13,-0.01:81.27
-chr1	2612058	rs61765702	C	T	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=0;HaplotypeScore=18.96;MQ=27.13;MQ0=31;OQ=323.91;QD=1.80;SB=-155.18	GT:AD:DP:GL:GQ	0/1:143,37:66:-55.56,-19.88,-179.35:99
-chr1	2612062	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=39.83;MQ=27.44;MQ0=33;OQ=304.96;QD=1.66;SB=-159.14	GT:AD:DP:GL:GQ	0/1:147,37:67:-53.98,-20.20,-229.14:99
-chr1	2612081	rs61765703	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.01;HRun=2;HaplotypeScore=85.10;MQ=27.93;MQ0=25;OQ=1205.35;QD=8.86;SB=-216.92	GT:AD:DP:GL:GQ	0/1:19,114:53:-139.78,-15.97,-53.09:99
-chr1	2612085	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=63.07;MQ=28.64;MQ0=22;OQ=1108.83;QD=8.66;SB=-225.89	GT:AD:DP:GL:GQ	0/1:16,110:51:-129.53,-15.36,-50.00:99
-chr1	2612107	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=1;HaplotypeScore=61.85;MQ=27.81;MQ0=21;OQ=276.90;QD=1.72;SB=-68.50	GT:AD:DP:GL:GQ	0/1:116,39:58:-48.45,-17.48,-165.18:99
-chr1	2612151	rs61765704	A	C	24.50	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.02;HRun=0;HaplotypeScore=220.24;MQ=28.08;MQ0=15;QD=0.19;SB=6.59	GT:AD:DP:GL:GQ	0/1:44,80:28:-14.16,-8.43,-88.22:57.33
-chr1	2612161	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=149;Dels=0.05;HRun=2;HaplotypeScore=289.32;MQ=26.74;MQ0=14;OQ=154.71;QD=1.04;SB=-60.88	GT:AD:DP:GL:GQ	0/1:35,100:29:-27.20,-8.44,-77.78:99
-chr1	2612175	rs61765705	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=189;Dels=0.00;HRun=1;HaplotypeScore=208.27;MQ=26.09;MQ0=18;OQ=54.71;QD=0.29;SB=-8.07	GT:AD:DP:GL:GQ	0/1:131,51:39:-26.91,-18.15,-132.87:87.54
-chr1	2612187	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=211.77;MQ=24.98;MQ0=26;OQ=72.89;QD=0.35;SB=45.47	GT:AD:DP:GL:GQ	0/1:143,55:44:-28.75,-18.18,-125.97:99
-chr1	2612211	.	C	A	45.89	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=1;HaplotypeScore=262.96;MQ=25.29;MQ0=30;QD=0.22;SB=-5.55	GT:AD:DP:GL:GQ	0/1:190,13:50:-25.52,-17.65,-153.60:78.73
-chr1	2612261	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=73.22;MQ=36.24;MQ0=2;OQ=156.42;QD=1.55;SB=-48.52	GT:AD:DP:GL:GQ	0/1:66,32:53:-34.90,-15.97,-147.29:99
-chr1	2612283	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=4;HaplotypeScore=43.06;MQ=38.47;MQ0=2;OQ=327.02;QD=4.74;SB=-23.62	GT:AD:DP:GL:GQ	0/1:32,34:36:-46.54,-10.55,-82.71:99
-chr1	2612309	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=19.73;MQ=36.93;MQ0=0;OQ=479.11;QD=9.39;SB=-112.96	GT:AD:DP:GL:GQ	0/1:16,33:31:-63.92,-12.72,-54.61:99
-chr1	2612321	rs58055515	A	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.06;HRun=2;HaplotypeScore=36.08;MQ=38.02;MQ0=0;OQ=654.82;QD=13.64;SB=-115.75	GT:AD:DP:GL:GQ	1/1:1,35:27:-89.55,-24.40,-20.49:39.17
-chr1	2612344	.	C	G	24.81	LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=34.46;MQ=40.80;MQ0=2;QD=0.48;SB=-19.81	GT:AD:DP:GL:GQ	0/1:23,28:23:-12.71,-6.94,-79.49:57.63
-chr1	2612349	rs56814247	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=26.66;MQ=40.32;MQ0=2;OQ=741.43;QD=14.54;SB=-345.45	GT:AD:DP:GL:GQ	1/1:6,45:24:-77.75,-7.24,-0.02:72.17
-chr1	2612359	.	A	C	18.09	LowQual	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=26.16;MQ=43.64;MQ0=3;QD=0.33;SB=-28.97	GT:AD:DP:GL:GQ	0/1:34,20:31:-14.42,-9.34,-99.97:50.86
-chr1	2612360	.	A	C	30.50	LowQual	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=3;HaplotypeScore=20.17;MQ=44.05;MQ0=2;QD=0.58;SB=-0.42	GT:AD:DP:GL:GQ	0/1:26,25:28:-14.77,-8.43,-87.24:63.33
-chr1	2612401	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=42.26;MQ=44.22;MQ0=1;OQ=144.16;QD=2.72;SB=-18.17	GT:AD:DP:GL:GQ	0/1:29,20:34:-31.58,-13.88,-103.42:99
-chr1	2612402	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=41.27;MQ=43.87;MQ0=1;OQ=96.43;QD=1.85;SB=-29.80	GT:AD:DP:GL:GQ	0/1:26,21:30:-21.97,-9.04,-85.20:99
-chr1	2612447	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=39.94;MQ=46.94;MQ0=0;OQ=81.12;QD=1.66;SB=23.03	GT:AD:DP:GL:GQ	0/1:31,17:32:-23.40,-12.01,-88.55:99
-chr1	2612451	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=20.86;MQ=47.66;MQ0=0;OQ=53.68;QD=1.14;SB=26.08	GT:AD:DP:GL:GQ	0/1:30,14:32:-18.30,-9.65,-100.77:86.52
-chr1	2612461	.	A	C	44.60	LowQual	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=34.01;MQ=47.11;MQ0=0;QD=0.86;SB=-23.85	GT:AD:DP:GL:GQ	0/1:42,10:33:-17.68,-9.94,-101.23:77.43
-chr1	2612468	.	C	G	44.05	LowQual	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=46.41;MQ=45.54;MQ0=0;QD=0.76;SB=-1.30	GT:AD:DP:GL:GQ	0/1:51,7:35:-18.24,-10.55,-129.78:76.89
-chr1	2612500	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=111.55;MQ=36.58;MQ0=2;OQ=75.18;QD=0.91;SB=-6.47	GT:AD:DP:GL:GQ	0/1:42,40:29:-19.55,-8.75,-75.63:99
-chr1	2612520	.	C	T	19.28	LowQual	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=133.17;MQ=33.82;MQ0=3;QD=0.19;SB=-16.60	GT:AD:DP:GL:GQ	0/1:87,13:36:-16.06,-10.85,-103.87:52.07
-chr1	2612521	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=3;HaplotypeScore=133.17;MQ=33.95;MQ0=3;OQ=122.65;QD=1.20;SB=-13.90	GT:AD:DP:GL:GQ	0/1:59,34:32:-39.02,-23.47,-101.66:99
-chr1	2612546	rs56822453	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=145.71;MQ=34.54;MQ0=2;OQ=1448.77;QD=15.58;SB=-452.10	GT:AD:DP:GL:GQ	1/1:7,78:40:-172.07,-31.81,-23.61:81.95
-chr1	2612548	.	A	G	23.46	LowQual	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=130.25;MQ=34.63;MQ0=2;QD=0.24;SB=-12.60	GT:AD:DP:GL:GQ	0/1:76,19:32:-15.27,-9.65,-107.66:56.27
-chr1	2612572	rs61765712	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=119.88;MQ=29.64;MQ0=12;OQ=136.28;QD=1.57;SB=-70.93	GT:AD:DP:GL:GQ	0/1:30,56:22:-23.54,-6.63,-51.28:99
-chr1	2612576	.	C	G	19.60	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=117.65;MQ=28.19;MQ0=14;QD=0.19;SB=-14.55	GT:AD:DP:GL:GQ	0/1:68,14:25:-20.23,-14.99,-84.25:52.39
-chr1	2612600	.	A	C	31.76	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=4;HaplotypeScore=156.76;MQ=23.41;MQ0=28;QD=0.14;SB=30.15	GT:AD:DP:GL:GQ	0/1:163,45:61:-27.98,-21.52,-181.64:64.60
-chr1	2612627	.	A	C	39.29	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=198.32;MQ=23.30;MQ0=41;QD=0.16;SB=-11.41	GT:AD:DP:GL:GQ	0/1:198,41:66:-27.09,-19.88,-204.81:72.12
-chr1	2612682	.	A	C	10.13	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=52.92;MQ=47.05;MQ0=0;QD=0.24;SB=14.06	GT:AD:DP:GL:GQ	0/1:27,14:23:-11.18,-6.93,-67.83:42.53
-chr1	2612696	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=17.87;MQ=44.37;MQ0=2;OQ=127.11;QD=2.08;SB=-25.83	GT:AD:DP:GL:GQ	0/1:32,29:31:-25.34,-9.35,-104.60:99
-chr1	2612737	rs61765713	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=31.73;MQ=37.37;MQ0=1;OQ=431.17;QD=5.01;SB=-153.88	GT:AD:DP:GL:GQ	0/1:41,45:46:-60.27,-13.87,-108.65:99
-chr1	2612767	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=55.42;MQ=39.20;MQ0=1;OQ=525.18;QD=6.48;SB=-145.82	GT:AD:DP:GL:GQ	0/1:30,49:46:-69.66,-13.86,-97.51:99
-chr1	2612773	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=50.07;MQ=38.87;MQ0=1;OQ=424.50;QD=5.31;SB=-154.37	GT:AD:DP:GL:GQ	0/1:53,27:45:-59.30,-13.57,-131.50:99
-chr1	2612799	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=27.45;MQ=41.43;MQ0=1;OQ=164.57;QD=2.70;SB=-62.57	GT:AD:DP:GL:GQ	0/1:27,34:35:-30.28,-10.54,-94.10:99
-chr1	2612844	rs55724072	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=94.30;MQ=38.07;MQ0=8;OQ=665.81;QD=9.12;SB=-251.98	GT:AD:DP:GL:GQ	0/1:45,26:28:-81.79,-11.92,-21.81:98.87
-chr1	2612950	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=255.70;MQ=27.55;MQ0=15;OQ=78.72;QD=0.37;SB=19.51	GT:AD:DP:GL:GQ	0/1:145,61:50:-33.24,-22.08,-169.61:99
-chr1	2612958	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=205;Dels=0.05;HRun=2;HaplotypeScore=345.72;MQ=28.14;MQ0=11;OQ=268.77;QD=1.31;SB=-87.58	GT:AD:DP:GL:GQ	0/1:82,113:44:-43.44,-13.28,-132.37:99
-chr1	2612962	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=206;Dels=0.01;HRun=1;HaplotypeScore=293.73;MQ=28.22;MQ0=11;OQ=53.07;QD=0.26;SB=-7.29	GT:AD:DP:GL:GQ	0/1:160,36:46:-29.48,-20.89,-140.25:85.91
-chr1	2612982	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=0;HaplotypeScore=272.98;MQ=28.95;MQ0=11;OQ=81.29;QD=0.49;SB=23.09	GT:AD:DP:GL:GQ	0/1:43,117:27:-19.56,-8.14,-70.61:99
-chr1	2612988	rs28729890	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=157;Dels=0.00;HRun=1;HaplotypeScore=282.08;MQ=29.13;MQ0=10;OQ=1088.24;QD=6.93;SB=-426.67	GT:AD:DP:GL:GQ	1/1:3,146:27:-116.69,-11.76,-4.28:74.86
-chr1	2613013	.	G	A	31.52	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=131;Dels=0.00;HRun=1;HaplotypeScore=164.33;MQ=32.03;MQ0=7;QD=0.24;SB=26.10	GT:AD:DP:GL:GQ	0/1:117,14:35:-16.98,-10.54,-112.15:64.35
-chr1	2613017	.	T	C	180.98	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=137.52;MQ=33.34;MQ0=7;QD=1.65;SB=26.11	GT:AD:DP:GL:GQ	0/1:27,81:34:-31.63,-10.24,-97.73:99
-chr1	2613018	rs28484972	G	C	140.73	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.00;HRun=0;HaplotypeScore=137.35;MQ=33.34;MQ0=7;QD=1.28;SB=31.01	GT:AD:DP:GL:GQ	0/1:28,44:35:-37.27,-19.91,-118.50:99
-chr1	2613040	rs55713073	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=61.60;MQ=39.34;MQ0=3;OQ=876.14;QD=14.13;SB=-413.05	GT:AD:DP:GL:GQ	0/1:33,24:31:-100.24,-9.35,-30.73:99
-chr1	2613043	.	T	C	38.29	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=3;HaplotypeScore=55.65;MQ=43.83;MQ0=2;QD=0.78;SB=29.13	GT:AD:DP:GL:GQ	0/1:25,20:28:-15.55,-8.44,-93.33:71.12
-chr1	2613090	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=62.85;MQ=32.34;MQ0=20;OQ=113.77;QD=0.92;SB=20.02	GT:AD:DP:GL:GQ	0/1:89,34:35:-25.22,-10.56,-90.70:99
-chr1	2613132	.	T	C	17.83	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=135.62;MQ=34.15;MQ0=7;QD=0.19;SB=20.93	GT:AD:DP:GL:GQ	0/1:49,17:34:-18.39,-13.34,-109.40:50.59
-chr1	2613155	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=54.50;MQ=36.94;MQ0=5;OQ=56.13;QD=0.85;SB=-8.31	GT:AD:DP:GL:GQ	0/1:26,40:25:-16.44,-7.54,-66.14:88.97
-chr1	2613166	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=54;Dels=0.04;HRun=0;HaplotypeScore=39.25;MQ=40.07;MQ0=1;OQ=108.06;QD=2.00;SB=-13.35	GT:AD:DP:GL:GQ	0/1:25,27:25:-21.62,-7.53,-86.20:99
-chr1	2613178	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=39.82;MQ=40.42;MQ0=1;OQ=87.18;QD=1.53;SB=-9.45	GT:AD:DP:GL:GQ	0/1:38,18:28:-20.44,-8.44,-74.35:99
-chr1	2613186	rs28398452	A	T	0.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=19.52;MQ=46.06;MQ0=0;OQ=818.22;QD=19.96;SB=-414.28	GT:AD:DP:GL:GQ	1/1:0,40:23:-85.41,-6.93,-0.01:69.21
-chr1	2613234	.	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=40.12;MQ=46.29;MQ0=1;OQ=1357.25;QD=31.56;SB=-584.52	GT:AD:DP:GL:GQ	1/1:1,41:32:-139.32,-9.64,-0.01:96.32
-chr1	2613318	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=61.23;MQ=29.57;MQ0=14;OQ=124.73;QD=1.48;SB=-14.36	GT:AD:DP:GL:GQ	0/1:67,16:36:-26.61,-10.86,-123.23:99
-chr1	2613323	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=72.34;MQ=25.61;MQ0=20;OQ=95.66;QD=0.62;SB=33.80	GT:AD:DP:GL:GQ	0/1:133,12:61:-34.86,-22.01,-226.45:99
-chr1	2613370	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=0;HaplotypeScore=293.23;MQ=21.10;MQ0=61;OQ=714.05;QD=1.79;SB=-288.95	GT:AD:DP:GL:GQ	0/1:327,73:124:-112.05,-37.36,-344.59:99
-chr1	2613374	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=416;Dels=0.00;HRun=0;HaplotypeScore=328.46;MQ=20.95;MQ0=62;OQ=571.93;QD=1.37;SB=-114.36	GT:AD:DP:GL:GQ	0/1:288,118:123:-97.54,-37.07,-375.44:99
-chr1	2613385	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=437;Dels=0.00;HRun=0;HaplotypeScore=225.97;MQ=20.17;MQ0=68;OQ=628.49;QD=1.44;SB=-284.83	GT:AD:DP:GL:GQ	0/1:363,65:125:-113.05,-46.91,-348.87:99
-chr1	2613405	rs61765715	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=430;Dels=0.00;HRun=0;HaplotypeScore=214.90;MQ=20.78;MQ0=65;OQ=1559.54;QD=3.63;SB=-415.95	GT:AD:DP:GL:GQ	0/1:296,132:120:-195.39,-36.15,-225.88:99
-chr1	2613406	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=428;Dels=0.00;HRun=0;HaplotypeScore=190.35;MQ=20.81;MQ0=64;OQ=96.31;QD=0.23;SB=35.50	GT:AD:DP:GL:GQ	0/1:369,32:113:-77.37,-64.46,-359.74:99
-chr1	2613418	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=0;HaplotypeScore=49.55;MQ=21.34;MQ0=50;OQ=281.60;QD=0.79;SB=32.81	GT:AD:DP:GL:GQ	0/1:313,45:98:-60.98,-29.53,-359.08:99
-chr1	2613432	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=2;HaplotypeScore=59.86;MQ=23.20;MQ0=28;OQ=127.98;QD=0.64;SB=-77.60	GT:AD:DP:GL:GQ	0/1:175,24:60:-37.72,-21.64,-201.76:99
-chr1	2613443	rs61765716	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=4;HaplotypeScore=21.82;MQ=28.33;MQ0=15;OQ=129.32;QD=1.54;SB=2.14	GT:AD:DP:GL:GQ	0/1:37,47:28:-24.65,-8.44,-74.06:99
-chr1	2613523	rs61765738	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=30.76;MQ=30.14;MQ0=9;OQ=85.37;QD=1.61;SB=5.05	GT:AD:DP:GL:GQ	0/1:23,13:17:-22.76,-10.94,-45.61:99
-chr1	2613566	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=71;Dels=0.04;HRun=3;HaplotypeScore=57.78;MQ=26.34;MQ0=13;OQ=54.80;QD=0.77;SB=8.05	GT:AD:DP:GL:GQ	0/1:32,29:23:-15.40,-6.63,-70.44:87.64
-chr1	2613630	.	G	A	0.07	PASS	AC=2;AF=1.00;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=13.24;MQ=22.14;MQ0=5;OQ=193.82;QD=10.20;SB=-82.32	GT:AD:DP:GL:GQ	1/1:2,17:6:-22.96,-1.81,-0.00:18.06
-chr1	2613635	.	G	A	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=13.88;MQ=20.75;MQ0=5;OQ=116.09;QD=7.26;SB=-82.32	GT:AD:DP:GL:GQ	1/1:1,15:4:-15.15,-1.21,-0.00:12.04
-chr1	2613646	.	G	C	10.99	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.07;HRun=2;HaplotypeScore=14.02;MQ=19.81;MQ0=4;QD=0.79;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,8:1:-4.35,-0.30,-0.00:1.76
-chr1	2613690	.	T	C	13.23	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=116.33;MQ=18.38;MQ0=8;QD=0.19;SB=-10.00	GT:AD:DP:GL:GQ	0/1:49,18:4:-5.79,-1.21,-8.34:45.86
-chr1	2613693	.	G	C	35.94	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=149.70;MQ=18.45;MQ0=8;QD=0.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:76,3:6:-8.69,-1.81,-15.69:68.78
-chr1	2613698	.	T	G	15.64	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=2;HaplotypeScore=190.59;MQ=18.98;MQ0=9;QD=0.16;SB=-10.00	GT:AD:DP:GL:GQ	0/1:64,7:8:-12.71,-7.87,-20.94:48.35
-chr1	2613700	.	G	A	196.12	SnpCluster	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=236.20;MQ=18.98;MQ0=9;QD=2.06;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,83:8:-25.29,-2.41,-3.47:10.61
-chr1	2613710	.	G	A	290.78	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=258.37;MQ=18.71;MQ0=19;QD=1.88;SB=-45.65	GT:AD:DP:GL:GQ	0/1:71,77:15:-43.35,-10.99,-17.24:62.53
-chr1	2613712	.	A	G	19.12	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=303.47;MQ=18.88;MQ0=19;QD=0.12;SB=-3.98	GT:AD:DP:GL:GQ	0/1:153,6:17:-10.32,-5.13,-49.10:51.90
-chr1	2613717	.	C	G	26.91	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=408.47;MQ=18.72;MQ0=23;QD=0.14;SB=-6.99	GT:AD:DP:GL:GQ	0/1:167,10:18:-16.44,-10.47,-59.87:59.74
-chr1	2613725	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=344.41;MQ=18.80;MQ0=26;OQ=51.69;QD=0.25;SB=-6.99	GT:AD:DP:GL:GQ	0/1:188,19:21:-17.15,-8.70,-57.87:84.53
-chr1	2613732	.	A	C	62.04	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=339.87;MQ=19.08;MQ0=26;QD=0.29;SB=-6.99	GT:AD:DP:GL:GQ	0/1:184,21:14:-13.71,-4.22,-32.30:94.88
-chr1	2613741	.	C	T	167.14	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=432.19;MQ=19.10;MQ0=22;QD=0.81;SB=-10.00	GT:AD:DP:GL:GQ	0/1:175,24:13:-27.15,-7.15,-25.74:99
-chr1	2613742	.	T	A	554.18	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=437.29;MQ=19.15;MQ0=21;QD=2.73;SB=-10.00	GT:AD:DP:GL:GQ	1/1:10,159:27:-96.09,-42.87,-37.09:57.79
-chr1	2613744	.	C	T	234.43	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=0;HaplotypeScore=584.09;MQ=19.37;MQ0=21;QD=1.13;SB=-10.00	GT:AD:DP:GL:GQ	0/1:171,26:22:-36.59,-9.87,-49.51:99
-chr1	2613745	.	C	G	76.87	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=0;HaplotypeScore=579.63;MQ=19.38;MQ0=20;QD=0.37;SB=-10.00	GT:AD:DP:GL:GQ	0/1:148,19:15:-15.49,-4.52,-49.92:99
-chr1	2613750	.	G	A	306.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=658.57;MQ=19.32;MQ0=20;QD=1.48;SB=-7.01	GT:AD:DP:GL:GQ	0/1:99,104:19:-39.62,-5.73,-26.69:99
-chr1	2613754	.	C	A	11.17	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=223;Dels=0.00;HRun=1;HaplotypeScore=578.78;MQ=19.04;MQ0=24;QD=0.05;SB=-7.00	GT:AD:DP:GL:GQ	0/1:199,19:23:-11.29,-6.93,-65.57:43.66
-chr1	2613765	.	C	A	112.66	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=0;HaplotypeScore=358.32;MQ=18.80;MQ0=30;QD=0.49;SB=-6.99	GT:AD:DP:GL:GQ	0/1:192,30:26:-22.38,-7.83,-66.37:99
-chr1	2613766	.	C	G	145.08	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=229;Dels=0.00;HRun=0;HaplotypeScore=340.83;MQ=18.60;MQ0=30;QD=0.63;SB=-3.99	GT:AD:DP:GL:GQ	0/1:197,20:34:-28.04,-10.25,-119.31:99
-chr1	2613770	.	T	C	33.51	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=286.65;MQ=18.56;MQ0=29;QD=0.15;SB=-3.99	GT:AD:DP:GL:GQ	0/1:176,33:38:-18.09,-11.45,-126.83:66.35
-chr1	2613772	.	A	G	57.20	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=261.18;MQ=18.59;MQ0=29;QD=0.26;SB=-0.97	GT:AD:DP:GL:GQ	0/1:199,13:41:-24.12,-15.12,-140.12:90.03
-chr1	2613796	.	G	C	177.04	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=135;Dels=0.04;HRun=2;HaplotypeScore=330.87;MQ=18.33;MQ0=22;QD=1.31;SB=-45.45	GT:AD:DP:GL:GQ	0/1:71,48:21:-34.21,-13.22,-61.82:99
-chr1	2613800	.	G	A	69.22	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=111;Dels=0.04;HRun=0;HaplotypeScore=218.43;MQ=17.88;MQ0=19;QD=0.62;SB=-7.00	GT:AD:DP:GL:GQ	0/1:92,15:13:-14.13,-3.92,-31.45:99
-chr1	2613801	.	C	G	13.55	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=246.51;MQ=18.17;MQ0=17;QD=0.12;SB=-7.00	GT:AD:DP:GL:GQ	0/1:104,4:15:-12.67,-8.05,-55.30:46.19
-chr1	2613803	.	C	A	151.29	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=241.51;MQ=18.66;MQ0=17;QD=1.36;SB=-3.98	GT:AD:DP:GL:GQ	0/1:89,19:17:-27.02,-8.61,-39.19:99
-chr1	2613805	.	C	T	87.71	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=208.83;MQ=18.81;MQ0=15;QD=0.80;SB=-0.98	GT:AD:DP:GL:GQ	0/1:93,15:13:-15.97,-3.92,-32.68:99
-chr1	2613807	.	C	T	57.07	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=165.36;MQ=18.87;MQ0=15;QD=0.53;SB=-3.99	GT:AD:DP:GL:GQ	0/1:93,9:11:-12.30,-3.31,-28.01:89.90
-chr1	2613812	.	G	A	29.24	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=106.13;MQ=18.30;MQ0=14;QD=0.32;SB=-3.99	GT:AD:DP:GL:GQ	0/1:75,16:5:-7.71,-1.51,-10.06:62.07
-chr1	2613813	.	T	C	74.94	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=91.21;MQ=18.35;MQ0=14;QD=0.88;SB=-6.99	GT:AD:DP:GL:GQ	0/1:16,66:5:-12.29,-1.51,-3.76:22.52
-chr1	2613826	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=36.04;MQ=20.56;MQ0=13;OQ=192.78;QD=2.30;SB=-28.63	GT:AD:DP:GL:GQ	0/1:21,57:13:-29.99,-7.43,-22.77:99
-chr1	2613831	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=23.92;MQ=20.73;MQ0=14;OQ=180.38;QD=2.20;SB=-29.94	GT:AD:DP:GL:GQ	0/1:21,61:13:-25.24,-3.92,-19.14:99
-chr1	2613859	.	G	T	41.43	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=24.92;MQ=20.48;MQ0=13;QD=0.62;SB=-43.38	GT:AD:DP:GL:GQ	0/1:19,47:11:-10.74,-3.32,-20.71:74.26
-chr1	2613869	rs28391329	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=60.53;MQ=21.20;MQ0=15;OQ=293.59;QD=2.94;SB=-0.98	GT:AD:DP:GL:GQ	0/1:82,18:19:-38.38,-5.73,-37.90:99
-chr1	2613889	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=72.75;MQ=25.64;MQ0=15;OQ=180.19;QD=1.96;SB=-114.68	GT:AD:DP:GL:GQ	0/1:18,61:28:-47.05,-25.75,-76.38:99
-chr1	2613903	rs11486068	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=48.68;MQ=24.40;MQ0=19;OQ=50.76;QD=0.51;SB=-13.14	GT:AD:DP:GL:GQ	0/1:40,15:30:-30.07,-21.71,-94.96:83.60
-chr1	2613959	rs61765741	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=30.66;MQ=19.75;MQ0=50;OQ=129.32;QD=0.85;SB=-3.99	GT:AD:DP:GL:GQ	0/1:135,11:45:-36.43,-20.22,-129.55:99
-chr1	2613977	rs61765742	T	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=20.51;MQ=18.10;MQ0=36;OQ=631.54;QD=6.19;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,87:32:-76.08,-9.64,-40.58:99
-chr1	2614061	.	C	G	47.32	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=9.70;MQ=18.60;MQ0=18;QD=1.05;SB=-42.45	GT:AD:DP:GL:GQ	0/1:29,16:12:-11.64,-3.62,-36.27:80.16
-chr1	2614087	rs61765744	A	C	20.16	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=3;HaplotypeScore=20.71;MQ=12.14;MQ0=19;QD=0.63;SB=-6.99	GT:AD:DP:GL:GQ	0/1:25,7:6:-7.10,-1.81,-13.92:52.96
-chr1	2614090	.	A	G	19.51	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=20.91;MQ=12.88;MQ0=18;QD=0.59;SB=-6.99	GT:AD:DP:GL:GQ	0/1:21,12:7:-7.34,-2.11,-20.39:52.30
-chr1	2614091	.	G	C	37.94	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=21.91;MQ=12.37;MQ0=20;QD=1.05;SB=-6.99	GT:AD:DP:GL:GQ	0/1:28,8:7:-9.19,-2.11,-21.58:70.77
-chr1	2614114	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=32.88;MQ=18.47;MQ0=36;OQ=121.42;QD=1.52;SB=-36.64	GT:AD:DP:GL:GQ	0/1:36,44:20:-21.46,-6.03,-44.98:99
-chr1	2614128	.	T	C	13.34	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=4;HaplotypeScore=47.41;MQ=18.72;MQ0=40;QD=0.11;SB=-2.29	GT:AD:DP:GL:GQ	0/1:78,34:26:-19.39,-14.79,-91.44:45.97
-chr1	2614209	.	G	A	41.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=1;HaplotypeScore=24.29;MQ=22.02;MQ0=31;QD=0.45;SB=-24.59	GT:AD:DP:GL:GQ	0/1:55,36:29:-16.14,-8.74,-87.91:74.08
-chr1	2614364	rs28730517	A	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=28.46;MQ=18.26;MQ0=16;OQ=311.67;QD=6.23;SB=-151.28	GT:AD:DP:GL:GQ	1/1:14,32:12:-37.44,-3.62,-2.80:8.16
-chr1	2614590	rs28497985	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=34.12;MQ=28.69;MQ0=18;OQ=755.20;QD=6.74;SB=-383.20	GT:AD:DP:GL:GQ	0/1:87,25:65:-98.40,-19.59,-181.93:99
-chr1	2614771	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=33.03;MQ=8.84;MQ0=54;OQ=63.99;QD=0.94;SB=-10.00	GT:AD:DP:GL:GQ	0/1:54,14:6:-11.49,-1.81,-12.10:96.82
-chr1	2614794	.	A	C	36.23	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=12.63;MQ=15.22;MQ0=54;QD=0.39;SB=8.03	GT:AD:DP:GL:GQ	0/1:56,38:25:-14.44,-7.53,-71.85:69.07
-chr1	2614835	rs61765748	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=146;Dels=0.00;HRun=0;HaplotypeScore=67.43;MQ=23.43;MQ0=43;OQ=134.71;QD=0.92;SB=83.23	GT:AD:DP:GL:GQ	0/1:105,39:61:-35.15,-18.40,-166.15:99
-chr1	2615014	.	A	G	45.47	PASS	AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=21.27;MQ0=3;OQ=106.85;QD=8.90;SB=-34.66	GT:AD:DP:GL:GQ	1/1:0,12:5:-14.25,-1.51,-0.01:15.01
-chr1	2615159	.	C	A	49.14	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=2;HaplotypeScore=142.59;MQ=8.79;MQ0=169;QD=0.22;SB=-7.86	GT:AD:DP:GL:GQ	0/1:185,31:17:-13.32,-5.12,-43.12:81.98
-chr1	2615230	.	C	G	11.72	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=6.15;MQ=11.52;MQ0=52;QD=0.14;SB=-26.39	GT:AD:DP:GL:GQ	0/1:72,12:14:-8.65,-4.23,-47.78:44.25
-chr1	2615372	.	G	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=29.65;MQ=17.03;MQ0=60;OQ=691.36;QD=8.13;SB=-292.88	GT:AD:DP:GL:GQ	1/1:59,24:18:-72.73,-5.42,-0.01:54.18
-chr1	2615442	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=52.99;MQ=12.22;MQ0=96;OQ=368.66;QD=2.38;SB=-99.96	GT:AD:DP:GL:GQ	0/1:30,125:25:-47.68,-7.53,-41.84:99
-chr1	2615466	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=61.50;MQ=14.17;MQ0=69;OQ=112.35;QD=0.77;SB=-18.60	GT:AD:DP:GL:GQ	0/1:116,29:31:-23.86,-9.34,-81.69:99
-chr1	2615470	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=63.31;MQ=14.07;MQ0=68;OQ=351.94;QD=2.53;SB=-90.74	GT:AD:DP:GL:GQ	0/1:65,72:34:-48.72,-10.24,-70.14:99
-chr1	2615502	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=32.33;MQ=16.10;MQ0=38;OQ=288.56;QD=3.65;SB=2.03	GT:AD:DP:GL:GQ	0/1:49,30:24:-39.38,-7.24,-59.32:99
-chr1	2615515	.	T	G	27.54	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=32.70;MQ=13.65;MQ0=43;QD=0.37;SB=-0.98	GT:AD:DP:GL:GQ	0/1:31,13:15:-18.30,-12.26,-45.52:60.37
-chr1	2615553	.	G	A	21.44	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=33.08;MQ=9.60;MQ0=74;QD=0.23;SB=-3.99	GT:AD:DP:GL:GQ	0/1:70,24:9:-8.14,-2.71,-26.22:54.25
-chr1	2615563	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=52.83;MQ=8.09;MQ0=76;OQ=64.78;QD=0.70;SB=-10.00	GT:AD:DP:GL:GQ	0/1:82,10:5:-11.27,-1.51,-6.24:47.31
-chr1	2615689	.	T	C	30.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=62.56;MQ=10.13;MQ0=88;QD=0.28;SB=-3.98	GT:AD:DP:GL:GQ	0/1:18,89:9:-9.09,-2.71,-22.98:63.77
-chr1	2615717	rs61765669	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=37.80;MQ=10.99;MQ0=80;OQ=103.09;QD=0.95;SB=-3.99	GT:AD:DP:GL:GQ	0/1:26,83:10:-16.61,-3.01,-17.76:99
-chr1	2615757	.	C	A	39.74	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=30.17;MQ=13.18;MQ0=60;QD=0.43;SB=0.17	GT:AD:DP:GL:GQ	0/1:71,20:17:-15.95,-8.69,-48.17:72.57
-chr1	2615837	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=39.99;MQ=26.86;MQ0=21;OQ=73.19;QD=1.33;SB=-36.22	GT:AD:DP:GL:GQ	0/1:29,26:20:-16.63,-6.03,-56.46:99
-chr1	2615892	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=3;HaplotypeScore=44.02;MQ=30.58;MQ0=2;OQ=63.96;QD=1.12;SB=26.10	GT:AD:DP:GL:GQ	0/1:25,32:26:-17.51,-7.83,-73.92:96.79
-chr1	2615945	rs28619423	T	C	0.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=8.32;MQ=22.59;MQ0=1;OQ=99.94;QD=5.26;SB=-76.91	GT:AD:DP:GL:GQ	1/1:3,15:4:-13.53,-1.21,-0.00:12.03
-chr1	2615949	rs28373809	G	A	10.26	LowQual	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=9.32;MQ=19.47;MQ0=1;QD=0.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,14:1:-4.27,-0.30,-0.00:1.76
-chr1	2615990	.	C	G	0.11	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=8.97;MQ=20.31;MQ0=1;OQ=58.76;QD=6.53;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:2:-9.28,-0.60,-0.00:6.02
-chr1	2615997	.	G	A	36.46	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=29.63;MQ=20.63;MQ0=6;QD=1.35;SB=-7.00	GT:AD:DP:GL:GQ	0/1:18,9:5:-8.44,-1.51,-10.16:69.30
-chr1	2616009	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=37.74;MQ=29.64;MQ0=6;OQ=112.90;QD=3.53;SB=-3.99	GT:AD:DP:GL:GQ	0/1:15,17:12:-18.19,-3.62,-24.59:99
-chr1	2616012	.	A	C	43.77	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=39.70;MQ=31.56;MQ0=5;QD=1.41;SB=-0.98	GT:AD:DP:GL:GQ	0/1:13,18:11:-10.97,-3.31,-27.78:76.61
-chr1	2616021	.	C	A	30.19	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=71.42;MQ=30.54;MQ0=5;QD=0.70;SB=-0.98	GT:AD:DP:GL:GQ	0/1:37,6:16:-11.12,-4.82,-46.67:63.02
-chr1	2616048	.	A	C	104.33	Indel	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=256.69;MQ=33.48;MQ0=5;QD=1.53;SB=-0.98	GT:AD:DP:GL:GQ	0/1:26,38:27:-21.85,-8.13,-76.79:99
-chr1	2616053	.	A	C	36.21	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=80;Dels=0.06;HRun=3;HaplotypeScore=159.99;MQ=31.20;MQ0=8;QD=0.45;SB=-3.99	GT:AD:DP:GL:GQ	0/1:43,32:27:-15.04,-8.13,-81.51:69.04
-chr1	2616066	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=127.16;MQ=28.37;MQ0=17;OQ=116.17;QD=0.90;SB=11.03	GT:AD:DP:GL:GQ	0/1:64,41:40:-43.16,-28.26,-112.08:99
-chr1	2616091	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=152;Dels=0.02;HRun=3;HaplotypeScore=245.31;MQ=26.01;MQ0=24;OQ=74.30;QD=0.49;SB=8.05	GT:AD:DP:GL:GQ	0/1:77,30:40:-32.83,-22.11,-117.91:99
-chr1	2616098	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=238.65;MQ=25.86;MQ0=23;OQ=203.33;QD=1.36;SB=8.03	GT:AD:DP:GL:GQ	0/1:83,65:39:-35.37,-11.76,-97.26:99
-chr1	2616121	rs28707614	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=1;HaplotypeScore=348.16;MQ=25.38;MQ0=21;OQ=754.79;QD=6.92;SB=-132.69	GT:AD:DP:GL:GQ	0/1:14,95:27:-86.90,-8.14,-12.11:39.77
-chr1	2616201	rs28495110	G	T	0.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=18.82;MQ=45.96;MQ0=6;OQ=1088.68;QD=25.92;SB=-422.58	GT:AD:DP:GL:GQ	1/1:8,34:31:-112.47,-9.34,-0.01:93.25
-chr1	2616235	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=22.81;MQ=34.27;MQ0=9;OQ=189.73;QD=2.67;SB=-88.83	GT:AD:DP:GL:GQ	0/1:28,43:31:-31.59,-9.34,-82.55:99
-chr1	2616250	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=1;HaplotypeScore=98.35;MQ=24.83;MQ0=26;OQ=53.95;QD=0.27;SB=-52.26	GT:AD:DP:GL:GQ	0/1:175,16:77:-39.01,-30.33,-235.94:86.79
-chr1	2616284	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=316;Dels=0.00;HRun=0;HaplotypeScore=207.75;MQ=22.41;MQ0=34;OQ=472.89;QD=1.50;SB=-261.05	GT:AD:DP:GL:GQ	0/1:280,35:108:-83.11,-32.54,-299.84:99
-chr1	2616291	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=168.73;MQ=22.17;MQ0=35;OQ=503.17;QD=1.63;SB=-147.25	GT:AD:DP:GL:GQ	0/1:228,77:110:-86.74,-33.14,-306.67:99
-chr1	2616303	rs61765755	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=285;Dels=0.00;HRun=0;HaplotypeScore=48.79;MQ=22.14;MQ0=36;OQ=3893.80;QD=13.66;SB=-1294.80	GT:AD:DP:GL:GQ	0/1:13,240:102:-388.38,-54.71,-62.45:77.36
-chr1	2616333	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=268.36;MQ=23.38;MQ0=29;OQ=127.30;QD=0.54;SB=-30.73	GT:AD:DP:GL:GQ	0/1:215,16:95:-44.63,-28.62,-299.60:99
-chr1	2616354	rs7544898	A	C	1854.66	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=113;Dels=0.00;HRun=1;HaplotypeScore=61.29;MQ=28.89;MQ0=15;QD=16.41;SB=-484.04	GT:AD:DP:GL:GQ	1/1:2,105:53:-193.02,-19.43,-3.97:99
-chr1	2616358	.	A	G	865.25	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=46.74;MQ=30.83;MQ0=11;QD=8.83;SB=-6.56	GT:AD:DP:GL:GQ	0/1:29,69:51:-105.17,-15.36,-93.21:99
-chr1	2616363	.	G	C	842.15	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=46.38;MQ=31.26;MQ0=12;QD=8.68;SB=-14.79	GT:AD:DP:GL:GQ	0/1:55,42:53:-103.48,-15.98,-115.82:99
-chr1	2616398	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=48.31;MQ=34.63;MQ0=12;OQ=554.46;QD=5.84;SB=10.29	GT:AD:DP:GL:GQ	0/1:66,29:54:-75.00,-16.28,-154.28:99
-chr1	2616612	.	G	C	20.97	LowQual	AC=1;AF=0.50;AN=2;DP=70;Dels=0.01;HRun=0;HaplotypeScore=165.26;MQ=30.37;MQ0=2;QD=0.30;SB=-32.74	GT:AD:DP:GL:GQ	0/1:19,45:24:-19.94,-14.57,-91.68:53.77
-chr1	2616615	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=3;HaplotypeScore=70.16;MQ=28.36;MQ0=2;OQ=89.21;QD=1.29;SB=-14.35	GT:AD:DP:GL:GQ	0/1:26,38:19:-17.94,-5.74,-58.45:99
-chr1	2616647	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=0;HaplotypeScore=217.54;MQ=24.00;MQ0=30;OQ=94.92;QD=0.69;SB=35.11	GT:AD:DP:GL:GQ	0/1:84,43:37:-23.93,-11.16,-103.88:99
-chr1	2616654	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=1;HaplotypeScore=223.04;MQ=23.83;MQ0=42;OQ=359.87;QD=1.99;SB=35.13	GT:AD:DP:GL:GQ	0/1:140,35:44:-52.54,-13.27,-92.39:99
-chr1	2616670	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=0;HaplotypeScore=299.99;MQ=23.86;MQ0=44;OQ=60.86;QD=0.31;SB=35.11	GT:AD:DP:GL:GQ	0/1:127,67:50:-24.46,-15.09,-137.52:93.69
-chr1	2616692	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=0;HaplotypeScore=231.37;MQ=26.06;MQ0=26;OQ=91.62;QD=0.55;SB=35.13	GT:AD:DP:GL:GQ	0/1:91,73:56:-32.64,-20.19,-183.88:99
-chr1	2616713	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=98.28;MQ=31.06;MQ0=12;OQ=565.06;QD=6.81;SB=-40.25	GT:AD:DP:GL:GQ	0/1:27,50:40:-78.76,-18.97,-82.14:99
-chr1	2616803	.	G	C	11.63	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=76;Dels=0.01;HRun=0;HaplotypeScore=115.33;MQ=32.59;MQ0=10;QD=0.15;SB=23.09	GT:AD:DP:GL:GQ	0/1:27,42:23:-11.36,-6.95,-79.45:44.16
-chr1	2616826	.	T	C	18.72	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=39.74;MQ=39.24;MQ0=2;QD=0.38;SB=20.09	GT:AD:DP:GL:GQ	0/1:24,24:22:-11.78,-6.63,-68.52:51.50
-chr1	2616954	rs28486014	C	A	1246.57	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=172;Dels=0.00;HRun=0;HaplotypeScore=118.85;MQ=19.01;MQ0=19;QD=7.25;SB=-604.12	GT:AD:DP:GL:GQ	1/1:2,165:36:-131.25,-13.77,-3.01:99
-chr1	2616962	.	A	G	25.32	DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=150.59;MQ=18.32;MQ0=25;QD=0.12;SB=17.48	GT:AD:DP:GL:GQ	0/1:179,39:39:-17.57,-11.75,-132.90:58.14
-chr1	2616963	.	C	G	90.14	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=167.60;MQ=18.42;MQ0=25;QD=0.41;SB=8.17	GT:AD:DP:GL:GQ	0/1:182,34:40:-27.79,-15.49,-139.11:99
-chr1	2616976	.	C	A	13.99	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=283.46;MQ=18.62;MQ0=35;QD=0.05;SB=55.93	GT:AD:DP:GL:GQ	0/1:236,26:51:-20.03,-15.36,-160.20:46.65
-chr1	2616982	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=251.51;MQ=19.64;MQ0=37;OQ=486.76;QD=1.74;SB=8.99	GT:AD:DP:GL:GQ	0/1:187,73:54:-71.97,-20.01,-131.66:99
-chr1	2617013	.	A	C	16.86	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=5;HaplotypeScore=227.22;MQ=22.36;MQ0=34;QD=0.07;SB=14.07	GT:AD:DP:GL:GQ	0/1:208,22:59:-25.00,-20.04,-187.42:49.60
-chr1	2617015	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=200.07;MQ=22.66;MQ0=33;OQ=161.89;QD=0.73;SB=20.10	GT:AD:DP:GL:GQ	0/1:186,27:59:-43.12,-23.65,-203.21:99
-chr1	2617028	rs61765757	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=178;Dels=0.00;HRun=0;HaplotypeScore=111.43;MQ=24.75;MQ0=28;OQ=1236.03;QD=6.94;SB=-23.31	GT:AD:DP:GL:GQ	0/1:36,141:55:-143.45,-16.57,-61.22:99
-chr1	2617033	rs61765759	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=173;Dels=0.00;HRun=0;HaplotypeScore=123.68;MQ=24.76;MQ0=29;OQ=945.67;QD=5.47;SB=-60.88	GT:AD:DP:GL:GQ	0/1:19,129:49:-112.61,-14.76,-62.28:99
-chr1	2617058	rs28585375	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=236;Dels=0.00;HRun=0;HaplotypeScore=112.06;MQ=22.97;MQ0=54;OQ=357.80;QD=1.52;SB=-120.52	GT:AD:DP:GL:GQ	0/1:214,20:72:-60.76,-21.69,-192.59:99
-chr1	2617101	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=89.01;MQ=23.73;MQ0=48;OQ=1884.44;QD=9.10;SB=-387.68	GT:AD:DP:GL:GQ	0/1:34,172:76:-214.63,-22.90,-42.31:99
-chr1	2617123	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=48.50;MQ=26.08;MQ0=56;OQ=129.18;QD=0.64;SB=-72.20	GT:AD:DP:GL:GQ	0/1:185,17:80:-40.33,-24.13,-284.57:99
-chr1	2617151	.	G	C	42.86	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=2;HaplotypeScore=97.11;MQ=23.22;MQ0=69;QD=0.22;SB=-10.77	GT:AD:DP:GL:GQ	0/1:167,21:55:-24.18,-16.61,-193.30:75.70
-chr1	2617160	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=1;HaplotypeScore=68.35;MQ=20.95;MQ0=76;OQ=103.39;QD=0.57;SB=17.08	GT:AD:DP:GL:GQ	0/1:148,32:50:-28.69,-15.07,-157.59:99
-chr1	2617178	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.01;HRun=4;HaplotypeScore=67.98;MQ=19.71;MQ0=69;OQ=224.46;QD=1.59;SB=-23.83	GT:AD:DP:GL:GQ	0/1:56,82:32:-35.39,-9.66,-90.46:99
-chr1	2617216	.	T	C	14.18	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=2;HaplotypeScore=54.33;MQ=16.92;MQ0=58;QD=0.13;SB=5.04	GT:AD:DP:GL:GQ	0/1:54,55:21:-11.01,-6.33,-70.16:46.85
-chr1	2617218	.	C	G	13.85	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=69.57;MQ=15.97;MQ0=58;QD=0.13;SB=5.05	GT:AD:DP:GL:GQ	0/1:87,20:21:-10.98,-6.33,-76.68:46.51
-chr1	2617261	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=41.53;MQ=20.71;MQ0=16;OQ=109.26;QD=1.79;SB=-48.91	GT:AD:DP:GL:GQ	0/1:26,35:19:-19.93,-5.73,-46.91:99
-chr1	2617273	rs61466658	T	C	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=31.65;MQ=19.33;MQ0=33;OQ=744.68;QD=8.97;SB=-307.99	GT:AD:DP:GL:GQ	1/1:6,73:24:-80.83,-7.23,-2.78:44.58
-chr1	2617320	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=383;Dels=0.00;HRun=2;HaplotypeScore=179.89;MQ=20.12;MQ0=69;OQ=511.87;QD=1.34;SB=-192.93	GT:AD:DP:GL:GQ	0/1:271,102:88:-80.98,-26.51,-240.14:99
-chr1	2617333	.	A	C	189.16	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=1;HaplotypeScore=324.51;MQ=20.25;MQ0=68;QD=0.46;SB=-46.42	GT:AD:DP:GL:GQ	0/1:362,48:102:-52.93,-30.73,-310.85:99
-chr1	2617334	.	C	T	347.52	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=413;Dels=0.00;HRun=0;HaplotypeScore=315.80;MQ=20.22;MQ0=68;QD=0.84;SB=-93.66	GT:AD:DP:GL:GQ	0/1:367,35:98:-67.59,-29.55,-258.47:99
-chr1	2617338	.	C	G	222.34	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=0;HaplotypeScore=396.78;MQ=20.69;MQ0=66;QD=0.51;SB=19.38	GT:AD:DP:GL:GQ	0/1:381,42:103:-66.44,-40.92,-386.05:99
-chr1	2617341	.	G	T	154.66	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=435;Dels=0.00;HRun=1;HaplotypeScore=393.28;MQ=20.73;MQ0=66;QD=0.36;SB=-27.31	GT:AD:DP:GL:GQ	0/1:377,44:114:-56.17,-37.42,-341.25:99
-chr1	2617354	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=456;Dels=0.00;HRun=0;HaplotypeScore=284.18;MQ=21.50;MQ0=65;OQ=410.45;QD=0.90;SB=-157.97	GT:AD:DP:GL:GQ	0/1:367,88:128:-86.24,-41.91,-394.71:99
-chr1	2617375	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=397;Dels=0.00;HRun=0;HaplotypeScore=286.33;MQ=23.04;MQ0=37;OQ=238.47;QD=0.60;SB=-127.61	GT:AD:DP:GL:GQ	0/1:316,80:131:-66.59,-39.46,-400.07:99
-chr1	2617377	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=393;Dels=0.00;HRun=0;HaplotypeScore=264.38;MQ=23.09;MQ0=38;OQ=52.53;QD=0.13;SB=34.31	GT:AD:DP:GL:GQ	0/1:349,42:132:-48.29,-39.76,-421.34:85.37
-chr1	2617406	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=150.38;MQ=24.81;MQ0=30;OQ=1026.09;QD=4.44;SB=-81.56	GT:AD:DP:GL:GQ	0/1:71,150:85:-131.52,-25.63,-230.33:99
-chr1	2617434	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=111.67;MQ=24.27;MQ0=28;OQ=290.81;QD=2.02;SB=-29.80	GT:AD:DP:GL:GQ	0/1:61,70:56:-59.33,-26.96,-156.98:99
-chr1	2617463	rs56282610	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=58.94;MQ=24.92;MQ0=20;OQ=411.11;QD=4.42;SB=-153.67	GT:AD:DP:GL:GQ	0/1:29,63:36:-55.25,-10.85,-76.21:99
-chr1	2617490	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=85.26;MQ=28.92;MQ0=14;OQ=93.54;QD=0.96;SB=32.09	GT:AD:DP:GL:GQ	0/1:84,12:39:-24.38,-11.75,-112.74:99
-chr1	2617496	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=107.91;MQ=30.31;MQ0=12;OQ=102.53;QD=1.11;SB=32.10	GT:AD:DP:GL:GQ	0/1:79,12:38:-24.98,-11.44,-111.78:99
-chr1	2617505	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=81.67;MQ=32.33;MQ0=11;OQ=247.78;QD=2.69;SB=-60.73	GT:AD:DP:GL:GQ	0/1:40,39:40:-40.11,-12.05,-107.49:99
-chr1	2617521	rs56279030	G	C	42.50	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=0;HaplotypeScore=51.30;MQ=31.83;MQ0=12;QD=0.40;SB=0.26	GT:AD:DP:GL:GQ	0/1:94,13:44:-20.79,-13.26,-170.49:75.34
-chr1	2617526	rs28536771	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=63.55;MQ=32.40;MQ0=9;OQ=160.23;QD=1.53;SB=-3.57	GT:AD:DP:GL:GQ	0/1:45,55:37:-30.46,-11.15,-113.20:99
-chr1	2617584	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=87.31;MQ=28.18;MQ0=10;OQ=524.04;QD=3.59;SB=-151.92	GT:AD:DP:GL:GQ	0/1:49,97:62:-74.37,-18.69,-162.12:99
-chr1	2617611	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=154;Dels=0.01;HRun=0;HaplotypeScore=176.05;MQ=27.08;MQ0=16;OQ=81.66;QD=0.53;SB=-0.83	GT:AD:DP:GL:GQ	0/1:126,24:59:-29.22,-17.77,-179.32:99
-chr1	2617617	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=177.05;MQ=27.20;MQ0=14;OQ=126.07;QD=0.84;SB=8.21	GT:AD:DP:GL:GQ	0/1:125,25:58:-33.36,-17.47,-170.99:99
-chr1	2617626	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=0;HaplotypeScore=162.52;MQ=28.40;MQ0=11;OQ=508.32;QD=3.63;SB=-161.48	GT:AD:DP:GL:GQ	0/1:40,77:57:-73.89,-19.78,-125.32:99
-chr1	2617630	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=1;HaplotypeScore=122.08;MQ=28.20;MQ0=11;OQ=734.14;QD=5.13;SB=-361.31	GT:AD:DP:GL:GQ	0/1:73,47:61:-98.65,-21.95,-111.48:99
-chr1	2617659	rs55801140	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=125.08;MQ=27.55;MQ0=12;OQ=175.93;QD=1.11;SB=23.11	GT:AD:DP:GL:GQ	0/1:141,12:44:-34.15,-13.27,-148.76:99
-chr1	2617668	rs28535687	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=255.63;MQ=27.99;MQ0=8;OQ=172.40;QD=1.28;SB=-72.12	GT:AD:DP:GL:GQ	0/1:31,69:32:-40.65,-20.12,-107.26:99
-chr1	2617672	.	G	T	32.81	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=245.46;MQ=28.29;MQ0=7;QD=0.25;SB=11.06	GT:AD:DP:GL:GQ	0/1:84,46:25:-14.10,-7.54,-64.41:65.64
-chr1	2617713	.	C	T	25.50	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=235.92;MQ=23.71;MQ0=16;QD=0.15;SB=11.61	GT:AD:DP:GL:GQ	0/1:80,75:31:-15.18,-9.35,-88.30:58.32
-chr1	2617737	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=196.10;MQ=25.34;MQ0=20;OQ=242.18;QD=1.19;SB=-124.57	GT:AD:DP:GL:GQ	0/1:154,44:50:-42.56,-15.06,-131.92:99
-chr1	2617767	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=115.66;MQ=29.10;MQ0=18;OQ=374.38;QD=2.92;SB=-46.69	GT:AD:DP:GL:GQ	0/1:37,72:41:-53.07,-12.35,-97.04:99
-chr1	2617781	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=110.28;MQ=28.42;MQ0=22;OQ=65.20;QD=0.50;SB=26.12	GT:AD:DP:GL:GQ	0/1:110,18:43:-22.77,-12.97,-156.99:98.03
-chr1	2617809	rs28698520	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.01;HRun=1;HaplotypeScore=154.47;MQ=26.46;MQ0=29;OQ=544.53;QD=4.54;SB=20.07	GT:AD:DP:GL:GQ	0/1:74,45:37:-68.88,-11.15,-59.02:99
-chr1	2617834	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=142.69;MQ=25.75;MQ0=33;OQ=247.39;QD=1.66;SB=-8.79	GT:AD:DP:GL:GQ	0/1:101,20:44:-48.54,-20.52,-132.57:99
-chr1	2617846	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=163;Dels=0.00;HRun=0;HaplotypeScore=110.83;MQ=27.45;MQ0=31;OQ=574.67;QD=3.53;SB=-169.29	GT:AD:DP:GL:GQ	0/1:34,98:52:-84.16,-23.41,-106.75:99
-chr1	2617859	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=189.65;MQ=26.24;MQ0=36;OQ=661.11;QD=2.56;SB=-188.93	GT:AD:DP:GL:GQ	0/1:183,74:74:-91.72,-22.32,-216.13:99
-chr1	2617878	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=214.86;MQ=26.40;MQ0=36;OQ=1364.14;QD=4.43;SB=-695.16	GT:AD:DP:GL:GQ	0/1:245,61:100:-169.82,-30.12,-204.71:99
-chr1	2617913	rs61766463	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=0;HaplotypeScore=33.34;MQ=34.26;MQ0=23;OQ=345.85;QD=1.25;SB=54.43	GT:AD:DP:GL:GQ	0/1:130,145:134:-78.24,-40.37,-397.42:99
-chr1	2617929	rs61766464	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=313;Dels=0.00;HRun=0;HaplotypeScore=209.86;MQ=34.59;MQ0=24;OQ=2475.95;QD=7.91;SB=-469.20	GT:AD:DP:GL:GQ	0/1:207,106:147:-295.16,-44.28,-232.82:99
-chr1	2617945	rs61766465	G	A	678.02	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=327;Dels=0.00;HRun=0;HaplotypeScore=293.41;MQ=35.76;MQ0=33;QD=2.07;SB=57.72	GT:AD:DP:GL:GQ	0/1:285,42:156:-118.09,-47.00,-457.61:99
-chr1	2617948	.	A	T	1515.78	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=0;HaplotypeScore=339.78;MQ=35.84;MQ0=34;QD=4.47;SB=-315.59	GT:AD:DP:GL:GQ	0/1:267,71:155:-201.56,-46.69,-377.16:99
-chr1	2617953	rs61766466	C	A	621.95	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=348;Dels=0.00;HRun=0;HaplotypeScore=257.70;MQ=36.09;MQ0=43;QD=1.79;SB=55.33	GT:AD:DP:GL:GQ	0/1:287,49:168:-116.08,-50.61,-483.68:99
-chr1	2618063	rs28379532	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.02;HRun=0;HaplotypeScore=36.25;MQ=31.70;MQ0=29;OQ=1863.52;QD=13.03;SB=-253.52	GT:AD:DP:GL:GQ	0/1:27,111:85:-215.25,-25.61,-83.05:99
-chr1	2618135	rs28499404	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=183;Dels=0.00;HRun=0;HaplotypeScore=48.32;MQ=27.35;MQ0=42;OQ=347.83;QD=1.90;SB=-174.55	GT:AD:DP:GL:GQ	0/1:162,21:105:-69.72,-31.65,-366.58:99
-chr1	2618152	rs61766467	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=192;Dels=0.00;HRun=1;HaplotypeScore=85.82;MQ=26.36;MQ0=44;OQ=458.63;QD=2.39;SB=-15.83	GT:AD:DP:GL:GQ	0/1:151,41:104:-80.48,-31.33,-290.41:99
-chr1	2618186	rs28655771	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=193;Dels=0.00;HRun=1;HaplotypeScore=114.84;MQ=21.49;MQ0=56;OQ=2645.92;QD=13.71;SB=-1050.69	GT:AD:DP:GL:GQ	1/1:5,188:77:-268.22,-23.20,-0.04:99
-chr1	2618191	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=161.00;MQ=22.90;MQ0=57;OQ=50.10;QD=0.25;SB=39.02	GT:AD:DP:GL:GQ	0/1:173,30:86:-34.21,-25.91,-268.48:82.93
-chr1	2618226	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=0;HaplotypeScore=192.42;MQ=33.49;MQ0=36;OQ=337.18;QD=1.26;SB=-53.39	GT:AD:DP:GL:GQ	0/1:227,40:152:-82.80,-45.80,-457.42:99
-chr1	2618254	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=296;Dels=0.00;HRun=0;HaplotypeScore=166.54;MQ=37.41;MQ0=24;OQ=808.97;QD=2.73;SB=-397.12	GT:AD:DP:GL:GQ	0/1:225,67:181:-140.83,-56.65,-515.36:99
-chr1	2618301	.	C	A	998.94	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=292;Dels=0.00;HRun=0;HaplotypeScore=277.61;MQ=43.53;MQ0=9;QD=3.42;SB=-458.03	GT:AD:DP:GL:GQ	0/1:215,74:195:-161.93,-58.75,-524.06:99
-chr1	2618303	.	C	A	591.91	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=295;Dels=0.00;HRun=0;HaplotypeScore=301.39;MQ=43.31;MQ0=10;QD=2.01;SB=-293.38	GT:AD:DP:GL:GQ	0/1:236,56:205:-124.23,-61.75,-600.14:99
-chr1	2618307	.	G	A	971.72	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=0;HaplotypeScore=193.14;MQ=43.47;MQ0=11;QD=3.43;SB=-273.43	GT:AD:DP:GL:GQ	0/1:228,48:199:-160.42,-59.96,-556.19:99
-chr1	2618320	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=150.76;MQ=41.04;MQ0=29;OQ=452.34;QD=1.46;SB=-151.56	GT:AD:DP:GL:GQ	0/1:223,31:184:-121.13,-72.62,-509.07:99
-chr1	2618366	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=558;Dels=0.00;HRun=0;HaplotypeScore=219.65;MQ=26.44;MQ0=134;OQ=289.23;QD=0.52;SB=167.70	GT:AD:DP:GL:GQ	0/1:454,69:221:-105.97,-73.77,-728.70:99
-chr1	2618375	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=585;Dels=0.00;HRun=0;HaplotypeScore=337.36;MQ=25.16;MQ0=141;OQ=507.21;QD=0.87;SB=196.74	GT:AD:DP:GL:GQ	0/1:487,75:227:-128.47,-74.47,-700.80:99
-chr1	2618378	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=594;Dels=0.00;HRun=0;HaplotypeScore=307.01;MQ=24.92;MQ0=142;OQ=386.51;QD=0.65;SB=-74.59	GT:AD:DP:GL:GQ	0/1:524,66:225:-115.59,-73.65,-670.89:99
-chr1	2618414	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=573;Dels=0.00;HRun=1;HaplotypeScore=206.56;MQ=24.36;MQ0=140;OQ=719.44;QD=1.26;SB=-72.20	GT:AD:DP:GL:GQ	0/1:439,119:210:-138.50,-63.27,-592.09:99
-chr1	2618418	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=531;Dels=0.00;HRun=0;HaplotypeScore=181.25;MQ=24.54;MQ0=131;OQ=939.27;QD=1.77;SB=-76.38	GT:AD:DP:GL:GQ	0/1:427,103:204:-158.68,-61.47,-574.55:99
-chr1	2618432	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=0;HaplotypeScore=70.50;MQ=25.62;MQ0=105;OQ=877.24;QD=2.13;SB=-428.33	GT:AD:DP:GL:GQ	0/1:368,44:152:-136.86,-45.86,-364.87:99
-chr1	2618444	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=352;Dels=0.00;HRun=1;HaplotypeScore=46.24;MQ=26.18;MQ0=89;OQ=1301.34;QD=3.70;SB=170.58	GT:AD:DP:GL:GQ	0/1:167,181:143:-176.57,-43.15,-394.32:99
-chr1	2618459	rs61766471	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=309;Dels=0.00;HRun=0;HaplotypeScore=122.77;MQ=27.15;MQ0=60;OQ=430.68;QD=1.39;SB=-167.89	GT:AD:DP:GL:GQ	0/1:283,25:135:-87.04,-40.69,-380.50:99
-chr1	2618482	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=91.95;MQ=32.62;MQ0=31;OQ=752.10;QD=3.36;SB=-248.53	GT:AD:DP:GL:GQ	0/1:115,107:101:-108.92,-30.43,-254.35:99
-chr1	2618501	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=234;Dels=0.01;HRun=4;HaplotypeScore=341.35;MQ=30.82;MQ0=33;OQ=155.62;QD=0.67;SB=92.01	GT:AD:DP:GL:GQ	0/1:155,66:98:-53.97,-35.12,-329.58:99
-chr1	2618530	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=168.93;MQ=32.32;MQ0=29;OQ=236.35;QD=1.02;SB=-122.19	GT:AD:DP:GL:GQ	0/1:211,19:107:-59.16,-32.24,-318.05:99
-chr1	2618557	rs28411025	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=156;Dels=0.00;HRun=0;HaplotypeScore=133.44;MQ=39.19;MQ0=9;OQ=2883.82;QD=18.49;SB=-1383.19	GT:AD:DP:GL:GQ	0/1:27,128:92:-319.41,-27.74,-64.72:99
-chr1	2618577	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=228;Dels=0.01;HRun=1;HaplotypeScore=243.04;MQ=34.35;MQ0=14;OQ=206.46;QD=0.91;SB=-125.59	GT:AD:DP:GL:GQ	0/1:119,105:92:-51.66,-27.73,-260.87:99
-chr1	2618590	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=341;Dels=0.00;HRun=0;HaplotypeScore=269.37;MQ=32.40;MQ0=23;OQ=694.60;QD=2.04;SB=-10.03	GT:AD:DP:GL:GQ	0/1:206,129:134:-115.74,-43.00,-326.10:99
-chr1	2618603	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=385;Dels=0.00;HRun=0;HaplotypeScore=742.67;MQ=32.24;MQ0=20;OQ=374.09;QD=0.97;SB=-84.54	GT:AD:DP:GL:GQ	0/1:213,140:157:-94.37,-53.68,-577.68:99
-chr1	2618613	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=414;Dels=0.00;HRun=1;HaplotypeScore=803.50;MQ=31.66;MQ0=23;OQ=626.38;QD=1.51;SB=181.82	GT:AD:DP:GL:GQ	0/1:349,58:175:-118.68,-52.76,-621.84:99
-chr1	2618617	.	A	C	34.85	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=417;Dels=0.00;HRun=1;HaplotypeScore=645.23;MQ=31.22;MQ0=23;QD=0.08;SB=-15.32	GT:AD:DP:GL:GQ	0/1:232,176:163:-62.01,-55.24,-512.02:67.68
-chr1	2618648	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=485;Dels=0.00;HRun=0;HaplotypeScore=582.18;MQ=29.51;MQ0=32;OQ=1313.91;QD=2.71;SB=163.03	GT:AD:DP:GL:GQ	0/1:367,113:208:-197.35,-62.68,-695.38:99
-chr1	2618651	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=487;Dels=0.00;HRun=0;HaplotypeScore=686.95;MQ=29.46;MQ0=33;OQ=108.10;QD=0.22;SB=256.13	GT:AD:DP:GL:GQ	0/1:431,46:211:-84.08,-69.98,-671.09:99
-chr1	2618685	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=500;Dels=0.00;HRun=1;HaplotypeScore=291.67;MQ=27.86;MQ0=33;OQ=4318.30;QD=8.64;SB=-761.47	GT:AD:DP:GL:GQ	0/1:182,284:216:-430.83,-67.58,-458.35:99
-chr1	2618707	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=462;Dels=0.01;HRun=4;HaplotypeScore=721.39;MQ=29.06;MQ0=34;OQ=2615.02;QD=5.66;SB=-699.35	GT:AD:DP:GL:GQ	0/1:165,282:202:-327.27,-62.48,-383.70:99
-chr1	2618711	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=464;Dels=0.00;HRun=0;HaplotypeScore=458.70;MQ=28.79;MQ0=35;OQ=1658.43;QD=3.57;SB=-180.55	GT:AD:DP:GL:GQ	0/1:156,178:185:-246.74,-77.62,-433.93:99
-chr1	2618743	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=565;Dels=0.00;HRun=1;HaplotypeScore=594.08;MQ=28.52;MQ0=39;OQ=195.57;QD=0.35;SB=27.58	GT:AD:DP:GL:GQ	0/1:503,58:268:-103.62,-80.78,-771.76:99
-chr1	2618776	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=541;Dels=0.00;HRun=0;HaplotypeScore=502.52;MQ=30.93;MQ0=35;OQ=5244.83;QD=9.69;SB=-856.66	GT:AD:DP:GL:GQ	0/1:182,353:279:-523.48,-84.06,-514.94:99
-chr1	2618784	.	C	T	23.85	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=542;Dels=0.00;HRun=0;HaplotypeScore=612.02;MQ=31.33;MQ0=33;QD=0.04;SB=67.53	GT:AD:DP:GL:GQ	0/1:386,152:218:-71.34,-65.68,-703.92:56.67
-chr1	2618799	rs61766473	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=520;Dels=0.00;HRun=1;HaplotypeScore=456.03;MQ=31.14;MQ0=35;OQ=4809.01;QD=9.25;SB=-828.34	GT:AD:DP:GL:GQ	0/1:169,328:274:-479.90,-94.56,-523.76:99
-chr1	2618813	rs28570043	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=586;Dels=0.00;HRun=0;HaplotypeScore=299.20;MQ=30.92;MQ0=47;OQ=1856.68;QD=3.17;SB=-717.31	GT:AD:DP:GL:GQ	0/1:501,75:250:-270.75,-81.80,-777.18:99
-chr1	2618823	rs61766474	A	T	4860.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=562;Dels=0.00;HRun=0;HaplotypeScore=709.32;MQ=30.48;MQ0=44;QD=8.65;SB=-560.15	GT:AD:DP:GL:GQ	0/1:287,273:277:-485.00,-83.44,-550.46:99
-chr1	2618832	.	C	G	1479.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=512;Dels=0.00;HRun=2;HaplotypeScore=411.64;MQ=30.81;MQ0=42;QD=2.89;SB=-17.36	GT:AD:DP:GL:GQ	0/1:367,94:241:-231.26,-80.00,-778.36:99
-chr1	2618833	.	G	C	375.40	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=513;Dels=0.00;HRun=1;HaplotypeScore=505.52;MQ=30.67;MQ0=42;QD=0.73;SB=152.53	GT:AD:DP:GL:GQ	0/1:466,47:236:-112.05,-71.23,-847.97:99
-chr1	2618853	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=470;Dels=0.00;HRun=0;HaplotypeScore=742.82;MQ=31.02;MQ0=40;OQ=917.98;QD=1.95;SB=-4.91	GT:AD:DP:GL:GQ	0/1:336,89:211:-236.75,-141.67,-586.15:99
-chr1	2618854	rs61766475	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=465;Dels=0.00;HRun=1;HaplotypeScore=675.66;MQ=31.14;MQ0=39;OQ=3030.86;QD=6.52;SB=-170.15	GT:AD:DP:GL:GQ	0/1:129,210:216:-470.96,-164.59,-497.24:99
-chr1	2618865	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=505;Dels=0.00;HRun=0;HaplotypeScore=338.61;MQ=30.47;MQ0=44;OQ=342.56;QD=0.68;SB=-14.42	GT:AD:DP:GL:GQ	0/1:439,53:231:-117.83,-80.29,-726.19:99
-chr1	2618904	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=499;Dels=0.00;HRun=4;HaplotypeScore=608.12;MQ=29.15;MQ0=44;OQ=1769.15;QD=3.55;SB=89.28	GT:AD:DP:GL:GQ	0/1:280,197:227:-252.16,-71.97,-553.68:99
-chr1	2618905	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=514;Dels=0.00;HRun=0;HaplotypeScore=596.36;MQ=29.03;MQ0=46;OQ=337.81;QD=0.66;SB=-30.28	GT:AD:DP:GL:GQ	0/1:424,43:227:-138.22,-101.16,-705.27:99
-chr1	2618928	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=624;Dels=0.00;HRun=2;HaplotypeScore=323.04;MQ=29.42;MQ0=49;OQ=696.10;QD=1.12;SB=42.74	GT:AD:DP:GL:GQ	0/1:499,120:322:-169.90,-97.01,-976.27:99
-chr1	2618942	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=632;Dels=0.00;HRun=0;HaplotypeScore=427.92;MQ=29.57;MQ0=51;OQ=1430.20;QD=2.26;SB=-6.35	GT:AD:DP:GL:GQ	0/1:441,177:340:-255.05,-108.75,-1027.84:99
-chr1	2618944	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=660;Dels=0.01;HRun=1;HaplotypeScore=381.00;MQ=29.09;MQ0=58;OQ=94.18;QD=0.14;SB=-52.32	GT:AD:DP:GL:GQ	0/1:544,51:336:-209.60,-196.90,-1072.15:99
-chr1	2619010	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=979;Dels=0.00;HRun=0;HaplotypeScore=447.29;MQ=26.60;MQ0=70;OQ=796.25;QD=0.81;SB=-92.06	GT:AD:DP:GL:GQ	0/1:864,98:425:-220.34,-137.43,-1275.90:99
-chr1	2619053	rs28733941	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=909;Dels=0.00;HRun=0;HaplotypeScore=595.79;MQ=27.09;MQ0=60;OQ=13631.67;QD=15.00;SB=-2975.80	GT:AD:DP:GL:GQ	0/1:104,553:419:-1362.17,-600.80,-836.54:99
-chr1	2619065	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1083;Dels=0.00;HRun=0;HaplotypeScore=883.09;MQ=27.27;MQ0=55;OQ=741.35;QD=0.68;SB=-174.53	GT:AD:DP:GL:GQ	0/1:939,125:552:-281.40,-203.98,-1716.07:99
-chr1	2619068	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1124;Dels=0.00;HRun=1;HaplotypeScore=958.29;MQ=27.28;MQ0=55;OQ=693.79;QD=0.62;SB=-203.14	GT:AD:DP:GL:GQ	0/1:985,132:593:-257.34,-184.67,-1827.88:99
-chr1	2619088	rs28368434	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=1328;Dels=0.00;HRun=2;HaplotypeScore=334.46;MQ=28.00;MQ0=46;OQ=7035.59;QD=5.30;SB=-1628.81	GT:AD:DP:GL:GQ	0/1:1024,295:793:-702.56,-254.86,-2119.90:99
-chr1	2619105	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1330;Dels=0.00;HRun=0;HaplotypeScore=932.09;MQ=28.23;MQ0=29;OQ=2367.59;QD=1.78;SB=-1159.72	GT:AD:DP:GL:GQ	0/1:991,151:799:-779.65,-539.60,-2921.50:99
-chr1	2619148	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=990;Dels=0.00;HRun=0;HaplotypeScore=340.48;MQ=27.70;MQ0=55;OQ=2332.09;QD=2.36;SB=-739.43	GT:AD:DP:GL:GQ	0/1:796,178:558:-439.22,-202.73,-1989.78:99
-chr1	2619186	.	A	C	371.93	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=419;Dels=0.00;HRun=2;HaplotypeScore=464.28;MQ=28.43;MQ0=32;QD=0.89;SB=-209.63	GT:AD:DP:GL:GQ	0/1:320,97:190:-97.71,-57.24,-585.62:99
-chr1	2619187	.	A	C	430.91	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=1;HaplotypeScore=324.16;MQ=28.26;MQ0=30;QD=1.08;SB=-112.57	GT:AD:DP:GL:GQ	0/1:310,88:169:-97.29,-50.91,-502.75:99
-chr1	2619196	rs61766477	C	T	639.34	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=339;Dels=0.00;HRun=0;HaplotypeScore=406.21;MQ=29.84;MQ0=24;QD=1.89;SB=-240.09	GT:AD:DP:GL:GQ	0/1:283,37:141:-134.06,-66.84,-411.36:99
-chr1	2619205	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=257;Dels=0.00;HRun=0;HaplotypeScore=259.69;MQ=32.70;MQ0=16;OQ=1928.35;QD=7.50;SB=-426.10	GT:AD:DP:GL:GQ	0/1:80,173:106:-228.05,-31.94,-159.03:99
-chr1	2619218	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=235;Dels=0.00;HRun=1;HaplotypeScore=278.38;MQ=35.10;MQ0=10;OQ=372.83;QD=1.59;SB=-167.14	GT:AD:DP:GL:GQ	0/1:174,58:82:-65.27,-24.71,-216.22:99
-chr1	2619230	.	G	A	206.96	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=238;Dels=0.00;HRun=1;HaplotypeScore=422.57;MQ=34.96;MQ0=8;QD=0.87;SB=86.30	GT:AD:DP:GL:GQ	0/1:192,38:100:-59.43,-35.45,-312.61:99
-chr1	2619232	.	T	C	831.94	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=355.75;MQ=35.18;MQ0=8;QD=3.59;SB=-351.57	GT:AD:DP:GL:GQ	0/1:163,64:87:-112.72,-26.24,-194.80:99
-chr1	2619238	.	G	T	230.19	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=214;Dels=0.00;HRun=0;HaplotypeScore=374.27;MQ=36.67;MQ0=6;QD=1.08;SB=104.29	GT:AD:DP:GL:GQ	0/1:105,106:92:-54.02,-27.71,-267.56:99
-chr1	2619244	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=269.42;MQ=37.21;MQ0=7;OQ=1921.19;QD=9.56;SB=-479.90	GT:AD:DP:GL:GQ	0/1:57,142:93:-223.42,-28.02,-104.14:99
-chr1	2619306	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=2;HaplotypeScore=23.50;MQ=42.95;MQ0=2;OQ=983.37;QD=8.48;SB=-151.45	GT:AD:DP:GL:GQ	0/1:49,66:80:-128.94,-27.32,-178.83:99
-chr1	2619313	.	T	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=14.58;MQ=45.37;MQ0=2;OQ=717.70;QD=7.40;SB=-61.81	GT:AD:DP:GL:GQ	0/1:47,50:71:-96.45,-21.40,-150.45:99
-chr1	2619324	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=29.83;MQ=44.91;MQ0=2;OQ=606.68;QD=6.74;SB=-59.89	GT:AD:DP:GL:GQ	0/1:45,45:58:-81.45,-17.50,-117.39:99
-chr1	2619346	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=198;Dels=0.01;HRun=2;HaplotypeScore=304.95;MQ=34.96;MQ0=2;OQ=1893.09;QD=9.56;SB=62.22	GT:AD:DP:GL:GQ	0/1:48,144:92:-224.02,-31.43,-163.64:99
-chr1	2619351	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=1;HaplotypeScore=417.56;MQ=32.10;MQ0=4;OQ=1347.04;QD=5.41;SB=71.23	GT:AD:DP:GL:GQ	0/1:80,143:111:-171.44,-33.46,-209.78:99
-chr1	2619360	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=1;HaplotypeScore=438.87;MQ=28.93;MQ0=6;OQ=112.12;QD=0.29;SB=98.35	GT:AD:DP:GL:GQ	0/1:301,77:156:-68.00,-53.51,-526.40:99
-chr1	2619395	rs61766478	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=748;Dels=0.00;HRun=0;HaplotypeScore=964.64;MQ=26.94;MQ0=26;OQ=5287.26;QD=7.07;SB=128.59	GT:AD:DP:GL:GQ	0/1:216,518:288:-527.73,-89.49,-471.13:99
-chr1	2619416	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=775;Dels=0.00;HRun=0;HaplotypeScore=727.49;MQ=27.55;MQ0=26;OQ=6889.43;QD=8.89;SB=178.09	GT:AD:DP:GL:GQ	0/1:249,511:342:-687.94,-103.01,-497.11:99
-chr1	2619432	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=738;Dels=0.01;HRun=0;HaplotypeScore=785.98;MQ=28.56;MQ0=15;OQ=287.49;QD=0.39;SB=162.31	GT:AD:DP:GL:GQ	0/1:586,116:299:-161.89,-129.86,-1001.87:99
-chr1	2619446	rs61766479	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=555;Dels=0.00;HRun=1;HaplotypeScore=580.47;MQ=30.08;MQ0=12;OQ=4833.38;QD=8.71;SB=183.30	GT:AD:DP:GL:GQ	0/1:214,317:283:-482.34,-118.04,-540.99:99
-chr1	2619465	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=306;Dels=0.02;HRun=1;HaplotypeScore=404.44;MQ=32.23;MQ0=6;OQ=129.50;QD=0.42;SB=102.00	GT:AD:DP:GL:GQ	0/1:203,74:120:-64.50,-48.27,-416.86:99
-chr1	2619467	rs61766480	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=303;Dels=0.02;HRun=1;HaplotypeScore=363.13;MQ=31.91;MQ0=6;OQ=4502.12;QD=14.86;SB=-1253.39	GT:AD:DP:GL:GQ	0/1:40,252:153:-449.21,-45.80,-111.82:99
-chr1	2619477	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=335.87;MQ=32.02;MQ0=7;OQ=542.66;QD=1.95;SB=122.33	GT:AD:DP:GL:GQ	0/1:161,107:129:-96.42,-38.87,-351.57:99
-chr1	2619489	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=1;HaplotypeScore=215.67;MQ=32.52;MQ0=8;OQ=1128.11;QD=4.21;SB=95.32	GT:AD:DP:GL:GQ	0/1:114,145:131:-166.02,-49.92,-331.55:99
-chr1	2619505	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=305.81;MQ=31.15;MQ0=10;OQ=135.21;QD=0.50;SB=68.22	GT:AD:DP:GL:GQ	0/1:237,31:129:-55.67,-38.86,-389.56:99
-chr1	2619511	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=356.76;MQ=30.03;MQ0=11;OQ=250.01;QD=0.95;SB=47.18	GT:AD:DP:GL:GQ	0/1:212,49:118:-63.84,-35.55,-351.09:99
-chr1	2619524	rs34081960	A	G	343.80	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=1;HaplotypeScore=217.57;MQ=30.42;MQ0=7;QD=1.59;SB=47.18	GT:AD:DP:GL:GQ	0/1:179,33:102:-68.39,-30.73,-325.69:99
-chr1	2619526	.	C	A	23.86	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=205;Dels=0.00;HRun=1;HaplotypeScore=236.96;MQ=30.18;MQ0=8;QD=0.12;SB=44.17	GT:AD:DP:GL:GQ	0/1:190,11:95:-34.28,-28.61,-300.58:56.68
-chr1	2619527	.	A	C	538.74	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=1;HaplotypeScore=224.55;MQ=30.05;MQ0=8;QD=2.73;SB=-87.11	GT:AD:DP:GL:GQ	0/1:122,73:87:-83.37,-26.21,-226.60:99
-chr1	2619530	.	T	G	866.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=215.21;MQ=31.06;MQ0=6;QD=4.84;SB=12.12	GT:AD:DP:GL:GQ	0/1:87,85:86:-126.63,-36.72,-179.70:99
-chr1	2619534	.	A	G	264.68	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=1;HaplotypeScore=280.66;MQ=30.98;MQ0=7;QD=1.54;SB=41.16	GT:AD:DP:GL:GQ	0/1:139,33:74:-52.04,-22.29,-233.98:99
-chr1	2619544	.	C	T	108.85	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=155;Dels=0.06;HRun=0;HaplotypeScore=267.97;MQ=31.40;MQ0=5;QD=0.70;SB=38.12	GT:AD:DP:GL:GQ	0/1:124,16:57:-34.75,-20.58,-177.62:99
-chr1	2619546	.	C	G	37.35	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=251.96;MQ=31.91;MQ0=5;QD=0.25;SB=38.15	GT:AD:DP:GL:GQ	0/1:138,7:61:-25.40,-18.38,-245.36:70.19
-chr1	2619553	.	A	G	821.41	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=113.41;MQ=33.54;MQ0=5;QD=6.96;SB=23.10	GT:AD:DP:GL:GQ	0/1:33,83:56:-102.29,-16.87,-105.73:99
-chr1	2619570	rs12757527	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=61.91;MQ=39.68;MQ0=1;OQ=223.25;QD=2.51;SB=41.15	GT:AD:DP:GL:GQ	0/1:39,49:45:-39.17,-13.56,-132.69:99
-chr1	2619576	rs11516512	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=85.98;MQ=40.41;MQ0=1;OQ=1215.90;QD=15.59;SB=-537.94	GT:AD:DP:GL:GQ	0/1:9,69:47:-139.03,-14.16,-23.39:92.31
-chr1	2619644	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=167.24;MQ=38.77;MQ0=11;OQ=65.21;QD=0.53;SB=59.09	GT:AD:DP:GL:GQ	0/1:83,36:47:-23.99,-14.18,-125.75:98.05
-chr1	2619667	rs12757684	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.02;HRun=3;HaplotypeScore=150.20;MQ=38.48;MQ0=2;OQ=87.98;QD=0.80;SB=-4.94	GT:AD:DP:GL:GQ	0/1:62,46:39:-23.84,-11.75,-110.18:99
-chr1	2619672	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=2;HaplotypeScore=165.55;MQ=38.18;MQ0=2;OQ=67.69;QD=0.61;SB=56.21	GT:AD:DP:GL:GQ	0/1:58,23:45:-37.64,-27.58,-156.78:99
-chr1	2619717	rs35537872	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=158.55;MQ=37.91;MQ0=1;OQ=82.21;QD=0.81;SB=12.47	GT:AD:DP:GL:GQ	0/1:41,55:41:-23.87,-12.36,-127.50:99
-chr1	2619725	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=160.68;MQ=38.53;MQ0=0;OQ=110.57;QD=1.00;SB=59.22	GT:AD:DP:GL:GQ	0/1:96,15:49:-29.10,-14.76,-154.28:99
-chr1	2619755	rs35198281	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=135.67;MQ=40.63;MQ0=1;OQ=77.36;QD=0.78;SB=-26.15	GT:AD:DP:GL:GQ	0/1:44,49:41:-23.37,-12.36,-121.95:99
-chr1	2619802	.	G	A	11.69	LowQual	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=127.16;MQ=33.63;MQ0=4;QD=0.12;SB=-22.48	GT:AD:DP:GL:GQ	0/1:79,20:38:-15.87,-11.45,-120.55:44.22
-chr1	2619811	rs11516513	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=94.34;MQ=31.96;MQ0=5;OQ=1057.97;QD=11.02;SB=-282.04	GT:AD:DP:GL:GQ	0/1:29,63:37:-120.23,-11.15,-15.87:47.21
-chr1	2619844	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=163.21;MQ=35.54;MQ0=9;OQ=150.26;QD=1.60;SB=-85.59	GT:AD:DP:GL:GQ	0/1:35,58:32:-27.96,-9.65,-83.83:99
-chr1	2619873	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=1;HaplotypeScore=84.94;MQ=33.03;MQ0=22;OQ=528.32;QD=3.80;SB=-259.93	GT:AD:DP:GL:GQ	0/1:45,94:55:-72.69,-16.57,-137.30:99
-chr1	2619885	rs4648686	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=0;HaplotypeScore=76.46;MQ=34.20;MQ0=29;OQ=72.77;QD=0.51;SB=-32.15	GT:AD:DP:GL:GQ	0/1:107,35:58:-28.03,-17.47,-178.69:99
-chr1	2619907	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.02;HRun=0;HaplotypeScore=75.23;MQ=35.05;MQ0=37;OQ=78.76;QD=0.61;SB=20.08	GT:AD:DP:GL:GQ	0/1:80,29:48:-28.88,-17.72,-148.42:99
-chr1	2619934	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=66.32;MQ=35.85;MQ0=29;OQ=172.74;QD=1.52;SB=-28.24	GT:AD:DP:GL:GQ	0/1:48,66:48:-35.03,-14.47,-147.33:99
-chr1	2619955	rs6604996	C	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=63.40;MQ=33.93;MQ0=36;OQ=1440.37;QD=13.21;SB=-479.54	GT:AD:DP:GL:GQ	1/1:0,108:38:-147.67,-11.48,-0.04:99
-chr1	2620070	rs12740972	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=47.55;MQ=45.30;MQ0=8;OQ=554.48;QD=5.72;SB=-255.88	GT:AD:DP:GL:GQ	0/1:70,21:53:-74.72,-15.98,-142.31:99
-chr1	2620085	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=54.16;MQ=39.71;MQ0=11;OQ=120.34;QD=1.02;SB=-33.16	GT:AD:DP:GL:GQ	0/1:69,45:56:-32.19,-16.87,-164.99:99
-chr1	2620124	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=63.81;MQ=34.92;MQ0=3;OQ=525.60;QD=3.65;SB=47.19	GT:AD:DP:GL:GQ	0/1:42,93:57:-80.08,-24.23,-172.63:99
-chr1	2620133	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=1;HaplotypeScore=107.36;MQ=34.37;MQ0=3;OQ=432.59;QD=2.86;SB=-11.69	GT:AD:DP:GL:GQ	0/1:52,96:55:-63.12,-16.58,-172.84:99
-chr1	2620148	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=3;HaplotypeScore=138.11;MQ=33.81;MQ0=6;OQ=406.05;QD=2.39;SB=-68.70	GT:AD:DP:GL:GQ	0/1:52,113:57:-61.06,-17.17,-159.71:99
-chr1	2620167	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=1;HaplotypeScore=129.33;MQ=31.98;MQ0=15;OQ=238.76;QD=1.16;SB=-5.73	GT:AD:DP:GL:GQ	0/1:136,68:69:-47.94,-20.78,-212.90:99
-chr1	2620268	rs12741311	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=74.94;MQ=48.87;MQ0=0;OQ=615.93;QD=7.90;SB=-166.53	GT:AD:DP:GL:GQ	0/1:39,39:52:-80.54,-15.66,-101.64:99
-chr1	2620338	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=10.27;MQ=42.72;MQ0=7;OQ=159.57;QD=1.60;SB=-79.74	GT:AD:DP:GL:GQ	0/1:47,53:53:-35.21,-15.97,-154.39:99
-chr1	2620373	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=37.37;MQ=38.59;MQ0=9;OQ=479.31;QD=3.40;SB=-63.47	GT:AD:DP:GL:GQ	0/1:49,92:64:-70.51,-19.30,-148.48:99
-chr1	2620382	.	G	A	119.16	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=95.95;MQ=37.22;MQ0=9;QD=0.82;SB=68.14	GT:AD:DP:GL:GQ	0/1:86,59:65:-34.81,-19.61,-177.00:99
-chr1	2620388	.	A	C	105.30	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=1;HaplotypeScore=83.57;MQ=35.41;MQ0=9;QD=0.69;SB=-45.48	GT:AD:DP:GL:GQ	0/1:132,21:67:-34.00,-20.19,-204.42:99
-chr1	2620390	rs28376921	A	C	238.82	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=3;HaplotypeScore=84.30;MQ=34.68;MQ0=9;QD=1.57;SB=-137.48	GT:AD:DP:GL:GQ	0/1:57,64:66:-69.75,-42.59,-188.12:99
-chr1	2620438	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=39.76;MQ=41.64;MQ0=7;OQ=388.27;QD=3.70;SB=-212.33	GT:AD:DP:GL:GQ	0/1:46,59:60:-60.19,-18.08,-149.44:99
-chr1	2620448	.	T	C	36.03	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=55.60;MQ=44.75;MQ0=3;QD=0.36;SB=59.63	GT:AD:DP:GL:GQ	0/1:72,27:62:-25.58,-18.69,-209.22:68.86
-chr1	2620451	rs28507126	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=42.59;MQ=44.33;MQ0=4;OQ=207.39;QD=2.07;SB=-2.70	GT:AD:DP:GL:GQ	0/1:56,44:55:-40.61,-16.58,-162.04:99
-chr1	2620498	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=117.30;MQ=35.77;MQ0=21;OQ=96.72;QD=0.68;SB=-10.89	GT:AD:DP:GL:GQ	0/1:119,24:63:-31.93,-18.98,-196.03:99
-chr1	2620509	.	C	A	44.02	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=149.75;MQ=36.71;MQ0=19;QD=0.28;SB=8.48	GT:AD:DP:GL:GQ	0/1:122,32:70:-28.77,-21.09,-215.81:76.85
-chr1	2620530	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.01;HRun=0;HaplotypeScore=86.24;MQ=39.02;MQ0=10;OQ=202.63;QD=1.69;SB=-58.78	GT:AD:DP:GL:GQ	0/1:60,45:53:-46.29,-22.74,-131.05:99
-chr1	2620553	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=4;HaplotypeScore=12.66;MQ=42.96;MQ0=4;OQ=154.29;QD=1.66;SB=6.59	GT:AD:DP:GL:GQ	0/1:47,46:55:-35.28,-16.57,-164.62:99
-chr1	2620589	rs4648687	C	A	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=19.10;MQ=49.13;MQ0=2;OQ=495.80;QD=9.01;SB=-265.29	GT:AD:DP:GL:GQ	0/1:36,19:38:-64.31,-11.45,-69.99:99
-chr1	2620786	rs12742092	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=51.45;MQ=48.85;MQ0=1;OQ=289.75;QD=5.57;SB=-99.04	GT:AD:DP:GL:GQ	0/1:36,16:30:-41.30,-9.04,-64.97:99
-chr1	2620835	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=99.62;MQ=36.59;MQ0=7;OQ=441.17;QD=4.64;SB=-224.20	GT:AD:DP:GL:GQ	0/1:74,18:36:-60.73,-13.33,-87.56:99
-chr1	2620875	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=107.69;MQ=35.97;MQ0=15;OQ=95.46;QD=0.71;SB=-26.90	GT:AD:DP:GL:GQ	0/1:113,19:59:-30.61,-17.78,-174.51:99
-chr1	2620960	.	T	A	14.94	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=17.98;MQ=48.66;MQ0=1;QD=0.38;SB=38.15	GT:AD:DP:GL:GQ	0/1:35,4:38:-16.21,-11.45,-119.38:47.63
-chr1	2621024	.	C	A	47.37	LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=15.73;MQ=45.56;MQ0=1;QD=1.18;SB=-9.87	GT:AD:DP:GL:GQ	0/1:33,7:35:-18.56,-10.54,-104.34:80.21
-chr1	2621154	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=51.59;MQ=53.22;MQ0=2;OQ=488.50;QD=9.77;SB=-206.66	GT:AD:DP:GL:GQ	0/1:29,19:38:-63.61,-11.47,-88.44:99
-chr1	2621346	rs12746691	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=78.63;MQ=48.13;MQ0=0;OQ=876.62;QD=14.61;SB=-440.96	GT:AD:DP:GL:GQ	0/1:34,26:44:-104.20,-13.26,-62.31:99
-chr1	2621414	rs12746841	C	G	50.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=5.31;MQ=55.95;MQ0=0;OQ=526.83;QD=11.97;SB=-219.19	GT:AD:DP:GL:GQ	0/1:24,20:36:-66.82,-10.85,-82.62:99
-chr1	2621575	rs61766505	T	A	0.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=9.78;MQ=51.58;MQ0=2;OQ=514.79;QD=12.26;SB=-105.13	GT:AD:DP:GL:GQ	0/1:24,18:33:-64.70,-9.94,-57.89:99
-chr1	2621592	rs11516514	C	A	2.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=7.05;MQ=51.18;MQ0=2;OQ=412.67;QD=8.78;SB=-93.77	GT:AD:DP:GL:GQ	0/1:31,16:35:-55.10,-10.55,-68.38:99
-chr1	2621664	rs12743419	G	A	126.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=54.07;MQ0=3;OQ=805.45;QD=17.14;SB=-279.82	GT:AD:DP:GL:GQ	0/1:16,31:40:-95.89,-12.06,-46.66:99
-chr1	2621957	rs12751643	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.02;HRun=1;HaplotypeScore=33.34;MQ=53.32;MQ0=0;OQ=1019.18;QD=17.27;SB=-299.66	GT:AD:DP:GL:GQ	0/1:24,34:54:-121.47,-16.27,-70.01:99
-chr1	2622417	.	C	G	34.36	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=22.88;MQ0=7;QD=1.01;SB=-10.00	GT:AD:DP:GL:GQ	0/1:28,6:20:-12.75,-6.03,-74.77:67.20
-chr1	2622422	rs11488613	G	T	0.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=6.76;MQ=21.77;MQ0=7;OQ=525.32;QD=15.45;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,31:16:-56.12,-4.82,-0.00:48.14
-chr1	2622433	rs12752340	C	A	26.89	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=20.67;MQ0=10;QD=0.75;SB=-10.00	GT:AD:DP:GL:GQ	0/1:30,6:16:-10.79,-4.82,-42.41:59.72
-chr1	2674088	.	C	G	42.96	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=0;HaplotypeScore=11.98;MQ=19.55;MQ0=6;QD=3.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,3:5:-9.09,-1.51,-12.64:75.79
-chr1	2674094	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=17.86;MQ=18.47;MQ0=6;OQ=64.31;QD=4.95;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,3:4:-10.92,-1.20,-3.26:20.53
-chr1	2674111	.	T	A	27.07	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=32.32;MQ0=6;QD=1.80;SB=-6.99	GT:AD:DP:GL:GQ	0/1:12,3:7:-8.10,-2.11,-18.86:59.90
-chr1	2674112	.	A	G	16.12	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=32.32;MQ0=6;QD=1.07;SB=-6.99	GT:AD:DP:GL:GQ	0/1:12,3:7:-6.99,-2.11,-20.42:48.85
-chr1	2674407	.	A	G	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=13.44;MQ=45.39;MQ0=5;OQ=445.12;QD=11.41;SB=-215.68	GT:AD:DP:GL:GQ	0/1:16,22:32:-57.44,-9.65,-56.21:99
-chr1	2674852	rs61766513	G	A	450.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.17;MQ0=18;OQ=519.69;QD=10.39;SB=-286.88	GT:AD:DP:GL:GQ	1/1:0,50:14:-55.56,-4.22,-0.00:42.14
-chr1	2676124	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=15.64;MQ=24.04;MQ0=14;OQ=178.81;QD=2.03;SB=-90.56	GT:AD:DP:GL:GQ	0/1:59,29:40:-33.21,-12.05,-114.97:99
-chr1	2676150	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=19.23;MQ=23.09;MQ0=22;OQ=221.70;QD=2.33;SB=-83.88	GT:AD:DP:GL:GQ	0/1:54,41:38:-36.91,-11.46,-90.41:99
-chr1	2676190	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=39.71;MQ=18.24;MQ0=31;OQ=65.56;QD=0.85;SB=-25.50	GT:AD:DP:GL:GQ	0/1:64,13:22:-16.48,-6.63,-57.54:98.40
-chr1	2676191	.	G	A	29.02	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=39.71;MQ=17.81;MQ0=31;QD=0.39;SB=26.10	GT:AD:DP:GL:GQ	0/1:60,14:18:-11.61,-5.43,-50.51:61.85
-chr1	2676208	.	G	A	16.39	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.26;MQ=15.36;MQ0=32;QD=0.30;SB=-24.49	GT:AD:DP:GL:GQ	0/1:43,10:12:-8.53,-3.62,-33.94:49.13
-chr1	2676293	rs11486072	G	T	42.12	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.44;MQ0=18;QD=0.68;SB=83.26	GT:AD:DP:GL:GQ	0/1:53,9:41:-19.85,-12.35,-121.85:74.96
-chr1	2676409	.	C	G	16.08	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=24.91;MQ=14.80;MQ0=58;QD=0.16;SB=-10.00	GT:AD:DP:GL:GQ	0/1:83,17:12:-8.50,-3.62,-44.92:48.81
-chr1	2677515	.	G	T	19.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=14.46;MQ=8.37;MQ0=110;QD=0.16;SB=-10.00	GT:AD:DP:GL:GQ	0/1:117,3:8:-7.59,-2.41,-19.90:51.83
-chr1	2677525	.	C	T	16.29	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=20.34;MQ=9.26;MQ0=102;QD=0.14;SB=-10.00	GT:AD:DP:GL:GQ	0/1:110,4:10:-7.91,-3.01,-27.95:49.02
-chr1	2677552	.	A	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=12.35;MQ=15.52;MQ0=82;OQ=53.71;QD=0.48;SB=0.32	GT:AD:DP:GL:GQ	0/1:89,18:28:-23.83,-15.18,-91.71:86.54
-chr1	2677675	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=15.33;MQ=33.22;MQ0=25;OQ=57.19;QD=0.55;SB=35.14	GT:AD:DP:GL:GQ	0/1:87,15:66:-28.89,-19.89,-231.82:90.03
-chr1	2677743	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=4.26;MQ=19.03;MQ0=67;OQ=90.19;QD=0.78;SB=-10.00	GT:AD:DP:GL:GQ	0/1:98,17:39:-24.05,-11.75,-110.96:99
-chr1	2677829	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=23.79;MQ=23.13;MQ0=70;OQ=279.18;QD=2.18;SB=-0.99	GT:AD:DP:GL:GQ	0/1:107,21:47:-45.38,-14.18,-109.88:99
-chr1	2677890	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=41.46;MQ=39.72;MQ0=24;OQ=334.00;QD=2.24;SB=-111.40	GT:AD:DP:GL:GQ	0/1:125,24:98:-66.21,-29.53,-281.36:99
-chr1	2677918	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=22.75;MQ=42.78;MQ0=7;OQ=406.29;QD=3.01;SB=-222.57	GT:AD:DP:GL:GQ	0/1:111,24:99:-73.74,-29.83,-281.76:99
-chr1	2678023	rs4601526	G	T	43.97	LowQual	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=8.77;MQ=39.66;MQ0=3;QD=0.46;SB=-45.56	GT:AD:DP:GL:GQ	0/1:69,27:71:-29.07,-21.39,-211.74:76.81
-chr1	2678153	rs4287119	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=21.76;MQ=40.92;MQ0=5;OQ=2547.58;QD=22.75;SB=-1076.65	GT:AD:DP:GL:GQ	0/1:21,91:87:-284.26,-26.22,-47.57:99
-chr1	2679458	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=42.73;MQ=34.12;MQ0=11;OQ=188.41;QD=2.36;SB=-47.79	GT:AD:DP:GL:GQ	0/1:51,29:31:-31.49,-9.36,-91.42:99
-chr1	2679642	.	C	G	45.83	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=7.58;MQ=33.48;MQ0=11;QD=0.45;SB=71.27	GT:AD:DP:GL:GQ	0/1:93,9:79:-31.68,-23.81,-299.21:78.67
-chr1	2679803	rs56221638	T	A	49.73	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=28.41;MQ=20.22;MQ0=17;QD=0.80;SB=-24.63	GT:AD:DP:GL:GQ	0/1:36,25:21:-14.59,-6.33,-59.48:82.57
-chr1	2679816	rs4648571	G	A	0.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=13.76;MQ=19.63;MQ0=17;OQ=484.56;QD=8.35;SB=18.94	GT:AD:DP:GL:GQ	1/1:9,49:16:-54.94,-4.82,-2.91:19.19
-chr1	2680538	rs58288263	C	A	0.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=19.45;MQ0=42;OQ=235.18;QD=2.28;SB=-135.60	GT:AD:DP:GL:GQ	0/1:70,33:45:-40.37,-13.56,-115.16:99
-chr1	2681143	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=43.31;MQ=7.59;MQ0=129;OQ=216.62;QD=1.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:128,12:8:-27.36,-2.41,-6.90:44.81
-chr1	2681205	.	C	T	16.27	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=11.46;MQ=9.18;MQ0=122;QD=0.12;SB=-10.00	GT:AD:DP:GL:GQ	0/1:130,4:11:-8.21,-3.31,-32.22:49.01
-chr1	2681386	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.02;HRun=1;HaplotypeScore=17.33;MQ=40.82;MQ0=2;OQ=547.52;QD=6.44;SB=26.11	GT:AD:DP:GL:GQ	0/1:58,25:71:-78.82,-20.79,-186.55:99
-chr1	2681420	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=13.55;MQ=31.27;MQ0=32;OQ=249.95;QD=2.34;SB=17.08	GT:AD:DP:GL:GQ	0/1:90,15:70:-49.36,-21.09,-234.22:99
-chr1	2681440	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=12.17;MQ=28.00;MQ0=51;OQ=57.67;QD=0.49;SB=-0.98	GT:AD:DP:GL:GQ	0/1:103,11:57:-26.23,-17.18,-176.09:90.51
-chr1	2681463	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=17.45;MQ=24.10;MQ0=61;OQ=86.42;QD=0.77;SB=-10.00	GT:AD:DP:GL:GQ	0/1:104,8:47:-26.08,-14.16,-135.23:99
-chr1	2681473	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=11.36;MQ=22.15;MQ0=63;OQ=86.11;QD=0.79;SB=-10.00	GT:AD:DP:GL:GQ	0/1:101,7:42:-24.54,-12.65,-127.26:99
-chr1	2681679	rs61766519	A	T	2.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=46.07;MQ0=2;OQ=403.94;QD=3.71;SB=-208.28	GT:AD:DP:GL:GQ	0/1:86,23:102:-74.40,-30.73,-305.98:99
-chr1	2681697	.	C	G	10.09	PASS	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=45.11;MQ0=2;OQ=843.38;QD=7.21;SB=-230.77	GT:AD:DP:GL:GQ	0/1:84,33:113:-121.68,-34.06,-367.48:99
-chr1	2681715	rs4430271	G	A	32.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=112;Dels=0.00;HRun=1;HaplotypeScore=3.54;MQ=44.60;MQ0=4;OQ=4104.48;QD=36.65;SB=-1313.32	GT:AD:DP:GL:GQ	1/1:1,111:104:-409.45,-31.34,-0.04:99
-chr1	2681869	.	T	C	23.42	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=42.88;MQ0=2;QD=0.35;SB=71.26	GT:AD:DP:GL:GQ	0/1:51,15:54:-21.90,-16.27,-186.51:56.24
-chr1	2681986	rs11586212	G	A	7.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.27;MQ=47.82;MQ0=3;OQ=510.08;QD=6.80;SB=56.19	GT:AD:DP:GL:GQ	0/1:53,22:70:-75.38,-21.09,-180.91:99
-chr1	2682337	.	G	A	7.34	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=27.22;MQ0=23;OQ=345.10;QD=8.03;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,23:16:-42.61,-4.82,-16.65:99
-chr1	2682347	.	G	T	0.70	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=19.93;MQ0=26;OQ=183.77;QD=4.59;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,20:10:-24.67,-3.01,-11.27:82.62
-chr1	2682645	.	C	A	19.07	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=11.47;MQ0=37;QD=0.33;SB=-0.98	GT:AD:DP:GL:GQ	0/1:31,27:8:-7.60,-2.41,-19.17:51.85
-chr1	2683816	rs10909957	C	T	271.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=46.26;MQ0=0;OQ=686.46;QD=13.46;SB=-268.23	GT:AD:DP:GL:GQ	0/1:24,27:45:-85.49,-13.56,-81.02:99
-chr1	2684356	rs6424062	G	A	144.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.15;MQ0=0;OQ=655.97;QD=13.39;SB=-112.11	GT:AD:DP:GL:GQ	0/1:26,23:46:-82.76,-13.88,-73.01:99
-chr1	2687573	rs4648459	G	T	323.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=991.84;QD=18.37;SB=-411.82	GT:AD:DP:GL:GQ	0/1:20,34:49:-117.23,-14.76,-57.58:99
-chr1	2689509	rs4648499	A	C	571.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=812.32;QD=13.32;SB=-346.80	GT:AD:DP:GL:GQ	0/1:31,30:60:-102.59,-18.07,-113.17:99
-chr1	2689977	rs4648502	C	G	37.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=4.68;MQ=58.83;MQ0=0;OQ=362.80;QD=11.34;SB=-98.64	GT:AD:DP:GL:GQ	0/1:15,17:26:-47.41,-7.85,-58.24:99
-chr1	2691287	rs10909982	A	C	5.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=1.88;MQ=58.74;MQ0=0;OQ=1314.76;QD=31.30;SB=-536.04	GT:AD:DP:GL:GQ	1/1:0,42:39:-135.08,-11.75,-0.02:99
-chr1	2691405	.	T	C	26.51	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.83;MQ=54.55;MQ0=0;QD=0.72;SB=1.18	GT:AD:DP:GL:GQ	0/1:31,6:36:-16.78,-10.85,-121.87:59.34
-chr1	2691676	rs1456462	C	G	51.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=56.36;MQ0=0;OQ=806.36;QD=17.53;SB=-304.60	GT:AD:DP:GL:GQ	0/1:21,25:41:-96.28,-12.36,-77.64:99
-chr1	2694331	rs12748553	C	T	3.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=8.78;MQ=58.48;MQ0=0;OQ=835.97;QD=17.06;SB=-250.13	GT:AD:DP:GL:GQ	0/1:21,26:46:-100.74,-13.86,-71.99:99
-chr1	2694778	rs55972083	G	T	162.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.66;MQ0=0;OQ=915.47;QD=16.64;SB=-316.68	GT:AD:DP:GL:GQ	0/1:25,30:54:-111.10,-16.27,-82.95:99
-chr1	2697298	rs7526311	A	T	117.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.01;MQ0=0;OQ=185.29;QD=9.75;SB=-41.37	GT:AD:DP:GL:GQ	0/1:12,7:18:-27.23,-5.42,-39.59:99
-chr1	2697760	.	G	T	0.81	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=344.69;QD=12.77;SB=-29.36	GT:AD:DP:GL:GQ	0/1:13,14:25:-45.29,-7.54,-35.79:99
-chr1	2697817	rs57572926	T	A	7.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.48;MQ0=0;OQ=773.03;QD=21.47;SB=-134.51	GT:AD:DP:GL:GQ	0/1:11,25:35:-91.13,-10.54,-41.10:99
-chr1	2699252	rs12044475	G	A	223.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.73;MQ0=0;OQ=1184.05;QD=17.41;SB=-586.14	GT:AD:DP:GL:GQ	0/1:32,36:66:-141.59,-19.90,-99.06:99
-chr1	2699436	rs12024170	C	T	193.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.75;MQ0=0;OQ=1445.81;QD=19.54;SB=-655.75	GT:AD:DP:GL:GQ	0/1:31,43:72:-169.56,-21.69,-100.95:99
-chr1	2699862	rs6687680	G	A	230.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.28;MQ0=0;OQ=1732.28;QD=19.25;SB=-761.79	GT:AD:DP:GL:GQ	0/1:40,50:89:-203.33,-26.82,-125.78:99
-chr1	2700237	.	G	A	246.23	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1343.35;QD=18.92;SB=-523.75	GT:AD:DP:GL:GQ	0/1:31,40:71:-159.02,-21.40,-102.65:99
-chr1	2702030	rs12731995	A	G	434.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=677.81;QD=11.11;SB=-347.04	GT:AD:DP:GL:GQ	0/1:33,28:60:-89.15,-18.08,-132.37:99
-chr1	2703187	rs2377041	C	T	502.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=621.61;QD=15.54;SB=-277.29	GT:AD:DP:GL:GQ	0/1:21,19:39:-77.20,-11.76,-63.03:99
-chr1	2704632	.	T	C	38.02	LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=4;HaplotypeScore=7.59;MQ=52.48;MQ0=0;QD=2.38;SB=-19.89	GT:AD:DP:GL:GQ	0/1:10,6:12:-10.71,-3.62,-29.51:70.86
-chr1	2704685	.	G	A	22.35	LowQual	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=7.62;MQ=56.04;MQ0=0;QD=1.86;SB=-34.51	GT:AD:DP:GL:GQ	0/1:9,2:7:-7.63,-2.11,-16.67:55.16
-chr1	2704950	.	A	G	2.25	PASS	AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=48.87;MQ0=0;OQ=588.34;QD=32.69;SB=-143.72	GT:AD:DP:GL:GQ	1/1:0,18:17:-62.42,-5.12,-0.01:51.15
-chr1	2705371	.	T	C	47.74	LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=60.80;MQ0=0;QD=2.51;SB=-6.99	GT:AD:DP:GL:GQ	0/1:12,6:14:-12.28,-4.22,-38.37:80.58
-chr1	2705380	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=2.68;MQ=59.93;MQ0=0;OQ=62.82;QD=3.31;SB=-3.98	GT:AD:DP:GL:GQ	0/1:14,5:17:-14.69,-5.13,-40.99:95.66
-chr1	2706146	.	A	G	47.67	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=5;HaplotypeScore=3.46;MQ=57.94;MQ0=0;QD=1.40;SB=47.18	GT:AD:DP:GL:GQ	0/1:26,7:27:-16.19,-8.14,-86.26:80.50
-chr1	2706767	rs751358	G	C	35.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=240.08;QD=16.01;SB=-112.68	GT:AD:DP:GL:GQ	0/1:7,8:15:-31.82,-4.53,-27.47:99
-chr1	2708350	rs897627	T	C	68.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.23;MQ0=0;OQ=241.23;QD=8.04;SB=-88.78	GT:AD:DP:GL:GQ	0/1:18,12:26:-35.25,-7.84,-56.33:99
-chr1	2709162	rs897626	T	C	124.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=58.50;MQ0=0;OQ=297.67;QD=9.60;SB=-169.49	GT:AD:DP:GL:GQ	0/1:13,16:23:-39.99,-6.94,-39.26:99
-chr1	2709764	rs12725202	C	A	209.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.58;MQ0=0;OQ=806.35;QD=14.66;SB=-275.34	GT:AD:DP:GL:GQ	0/1:27,28:48:-98.38,-14.47,-61.56:99
-chr1	2711436	rs897623	A	G	190.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=58.98;MQ0=0;OQ=627.29;QD=15.30;SB=-199.45	GT:AD:DP:GL:GQ	0/1:15,26:39:-77.77,-11.76,-60.17:99
-chr1	2712708	rs6692145	C	T	11.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=7.75;MQ=59.11;MQ0=0;OQ=873.72;QD=16.80;SB=-440.44	GT:AD:DP:GL:GQ	0/1:21,31:48:-105.13,-14.48,-65.51:99
-chr1	2713074	rs4648450	C	A	220.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.19;MQ0=0;OQ=931.32;QD=16.34;SB=-352.41	GT:AD:DP:GL:GQ	0/1:24,33:49:-111.18,-14.76,-58.95:99
-chr1	2713205	rs4648360	C	T	362.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.64;MQ0=0;OQ=808.14;QD=12.63;SB=-348.52	GT:AD:DP:GL:GQ	0/1:38,26:64:-103.39,-19.29,-126.27:99
-chr1	2713822	rs11588256	T	C	179.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.44;MQ0=0;OQ=1164.73;QD=28.41;SB=-522.80	GT:AD:DP:GL:GQ	1/1:0,40:39:-122.64,-14.15,-2.58:99
-chr1	2715335	rs7537581	C	A	258.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.30;MQ0=0;OQ=476.92;QD=14.45;SB=-256.43	GT:AD:DP:GL:GQ	0/1:16,17:32:-60.62,-9.64,-51.47:99
-chr1	2715367	rs56038961	C	T	199.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.45;MQ0=0;OQ=479.64;QD=15.99;SB=-264.20	GT:AD:DP:GL:GQ	0/1:12,18:27:-59.39,-8.14,-35.88:99
-chr1	2716724	rs17387572	C	G	92.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=2.10;MQ=58.95;MQ0=0;OQ=183.11;QD=8.32;SB=-57.73	GT:AD:DP:GL:GQ	0/1:14,8:19:-27.33,-5.74,-48.15:99
-chr1	2717498	rs10909879	G	A	568.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=638.90;QD=14.20;SB=-321.91	GT:AD:DP:GL:GQ	0/1:24,21:43:-80.13,-12.96,-77.89:99
-chr1	2717664	rs10909880	C	T	111.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.85;MQ=58.20;MQ0=0;OQ=901.98;QD=16.40;SB=-412.72	GT:AD:DP:GL:GQ	0/1:27,27:53:-109.45,-15.96,-95.84:99
-chr1	2718581	rs2290583	C	T	466.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.90;MQ0=0;OQ=858.25;QD=15.60;SB=-364.54	GT:AD:DP:GL:GQ	0/1:27,28:51:-104.48,-15.37,-82.61:99
-chr1	2720957	rs56242447	T	C	191.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=60.00;MQ0=0;OQ=720.09;QD=11.43;SB=-266.23	GT:AD:DP:GL:GQ	0/1:29,34:60:-93.39,-18.10,-112.64:99
-chr1	2725957	rs4648454	C	A	155.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.23;MQ0=0;OQ=2137.84;QD=35.63;SB=-968.57	GT:AD:DP:GL:GQ	1/1:0,60:60:-217.39,-18.07,-0.02:99
-chr1	2727346	rs4515734	C	T	401.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=1193.72;QD=37.30;SB=-333.34	GT:AD:DP:GL:GQ	1/1:0,32:32:-122.97,-9.64,-0.01:96.30
-chr1	2728125	rs11584658	C	T	220.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=58.92;MQ0=0;OQ=363.72;QD=9.33;SB=-203.89	GT:AD:DP:GL:GQ	0/1:25,14:38:-51.11,-11.46,-81.85:99
-chr1	2728509	.	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=7.07;MQ=57.48;MQ0=0;OQ=153.44;QD=5.48;SB=38.15	GT:AD:DP:GL:GQ	0/1:17,11:22:-25.28,-6.65,-60.78:99
-chr1	2728983	rs12025517	T	C	254.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.46;MQ0=0;OQ=692.09;QD=16.10;SB=-320.61	GT:AD:DP:GL:GQ	0/1:17,25:42:-87.78,-15.29,-69.40:99
-chr1	2731560	rs897622	T	C	5.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.40;MQ=59.38;MQ0=0;OQ=1158.40;QD=31.31;SB=-281.53	GT:AD:DP:GL:GQ	1/1:0,37:35:-119.44,-10.55,-0.02:99
-chr1	2734276	rs56400103	G	A	253.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=949.71;QD=17.92;SB=-409.46	GT:AD:DP:GL:GQ	0/1:24,29:51:-113.64,-15.38,-67.18:99
-chr1	2734570	rs12747919	T	C	241.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.34;MQ0=0;OQ=778.48;QD=12.36;SB=-342.05	GT:AD:DP:GL:GQ	0/1:32,31:63:-100.12,-18.99,-128.39:99
-chr1	2734737	rs12125787	G	A	71.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.70;MQ=57.83;MQ0=0;OQ=2028.15;QD=37.56;SB=-957.98	GT:AD:DP:GL:GQ	1/1:0,54:53:-206.42,-15.97,-0.02:99
-chr1	2735743	rs4609377	C	T	266.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=58.76;MQ0=0;OQ=803.58;QD=14.35;SB=-286.83	GT:AD:DP:GL:GQ	0/1:31,25:54:-99.92,-16.28,-93.51:99
-chr1	2735926	rs1001620	G	C	451.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.61;MQ0=0;OQ=977.15;QD=12.69;SB=-354.56	GT:AD:DP:GL:GQ	0/1:46,31:77:-124.21,-23.21,-202.34:99
-chr1	2739474	rs10797389	G	A	308.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=60.00;MQ0=0;OQ=750.99;QD=15.65;SB=-309.79	GT:AD:DP:GL:GQ	0/1:23,25:47:-92.55,-14.16,-81.12:99
-chr1	2739576	rs4648481	G	T	368.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=60.00;MQ0=0;OQ=793.99;QD=14.70;SB=-305.02	GT:AD:DP:GL:GQ	0/1:26,28:52:-98.35,-15.67,-82.42:99
-chr1	2739781	rs4648482	T	C	14.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=4.29;MQ=58.44;MQ0=0;OQ=365.14;QD=8.69;SB=-69.92	GT:AD:DP:GL:GQ	0/1:24,18:40:-51.86,-12.06,-91.45:99
-chr1	2740297	rs1563471	C	T	85.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=5.94;MQ=59.22;MQ0=0;OQ=682.02;QD=11.56;SB=-286.79	GT:AD:DP:GL:GQ	0/1:33,26:55:-88.08,-16.60,-99.20:99
-chr1	2740756	rs12132067	G	A	288.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=59.52;MQ0=0;OQ=623.21;QD=12.98;SB=-250.12	GT:AD:DP:GL:GQ	0/1:27,21:48:-80.07,-14.46,-95.69:99
-chr1	2742125	rs7511879	A	G	408.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.68;MQ0=0;OQ=942.16;QD=16.24;SB=-438.99	GT:AD:DP:GL:GQ	0/1:24,34:55:-114.07,-16.57,-91.14:99
-chr1	2742553	rs10797390	C	T	146.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=1057.36;QD=18.88;SB=-301.83	GT:AD:DP:GL:GQ	0/1:24,32:56:-125.89,-16.87,-83.67:99
-chr1	2743097	rs12031493	A	G	99.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.23;MQ=59.34;MQ0=0;OQ=647.93;QD=9.26;SB=-314.90	GT:AD:DP:GL:GQ	0/1:40,29:67:-88.27,-20.19,-156.45:99
-chr1	2743232	rs11803074	T	C	136.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.52;MQ0=0;OQ=450.58;QD=9.39;SB=-159.47	GT:AD:DP:GL:GQ	0/1:26,22:43:-61.31,-12.96,-94.61:99
-chr1	2743923	rs2377040	G	A	85.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.57;MQ0=0;OQ=1679.85;QD=39.07;SB=-699.34	GT:AD:DP:GL:GQ	1/1:0,43:43:-171.58,-12.96,-0.02:99
-chr1	2744048	rs6691019	A	G	253.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=599.61;QD=12.24;SB=-315.28	GT:AD:DP:GL:GQ	0/1:24,25:46:-77.11,-13.87,-86.95:99
-chr1	2744266	rs729045	A	G	494.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=550.14;QD=10.19;SB=-251.93	GT:AD:DP:GL:GQ	0/1:30,24:53:-74.27,-15.97,-120.98:99
-chr1	2744372	rs6680471	C	T	188.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=743.73;QD=13.52;SB=-388.16	GT:AD:DP:GL:GQ	0/1:30,25:50:-92.73,-15.07,-87.39:99
-chr1	2744840	rs7541827	T	G	3.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.30;MQ=53.60;MQ0=0;OQ=317.87;QD=7.95;SB=-163.88	GT:AD:DP:GL:GQ	0/1:27,13:38:-46.52,-11.45,-85.79:99
-chr1	2745157	rs10909938	C	G	278.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.10;MQ0=0;OQ=946.24;QD=11.98;SB=-426.32	GT:AD:DP:GL:GQ	0/1:47,32:78:-121.44,-23.53,-202.08:99
-chr1	2745633	rs10909941	A	G	382.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.59;MQ0=0;OQ=1890.77;QD=33.76;SB=-793.15	GT:AD:DP:GL:GQ	1/1:0,56:54:-192.68,-16.26,-0.02:99
-chr1	2746148	rs4648382	C	T	75.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=4.95;MQ=58.25;MQ0=0;OQ=1103.18;QD=17.24;SB=-437.97	GT:AD:DP:GL:GQ	0/1:30,34:62:-132.29,-18.69,-91.91:99
-chr1	2746257	rs4648383	C	T	112.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.45;MQ0=0;OQ=1198.75;QD=17.63;SB=-573.37	GT:AD:DP:GL:GQ	0/1:33,35:67:-143.34,-20.18,-115.97:99
-chr1	2746481	rs4648384	C	A	147.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=2.23;MQ=58.55;MQ0=0;OQ=974.97;QD=15.98;SB=-482.87	GT:AD:DP:GL:GQ	0/1:29,32:59:-118.55,-17.77,-93.40:99
-chr1	2746667	rs7516014	G	T	183	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=529.64;QD=10.81;SB=-238.43	GT:AD:DP:GL:GQ	0/1:28,20:47:-70.41,-14.16,-95.06:99
-chr1	2746749	rs7548023	T	G	93.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=3.08;MQ=57.92;MQ0=0;OQ=762.24;QD=14.12;SB=-346.84	GT:AD:DP:GL:GQ	0/1:27,27:54:-95.77,-16.26,-99.72:99
-chr1	2747056	rs4648495	T	C	0.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=4;HaplotypeScore=4.04;MQ=53.57;MQ0=0;OQ=334.06;QD=9.83;SB=-158.61	GT:AD:DP:GL:GQ	0/1:15,19:25:-44.23,-7.54,-43.47:99
-chr1	2747271	rs4648496	A	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=20.04;MQ=49.89;MQ0=0;OQ=70.38;QD=0.95;SB=-47.55	GT:AD:DP:GL:GQ	0/1:64,10:68:-30.81,-20.49,-219.78:99
-chr1	2747291	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=65;Dels=0.03;HRun=0;HaplotypeScore=32.13;MQ=46.89;MQ0=0;OQ=444.72;QD=6.84;SB=-168.12	GT:AD:DP:GL:GQ	0/1:44,19:62:-65.84,-18.08,-149.47:99
-chr1	2747315	.	A	T	0.07	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=12.70;MQ=47.25;MQ0=0;OQ=757.92;QD=13.53;SB=-390.15	GT:AD:DP:GL:GQ	0/1:29,27:49:-93.84,-14.77,-85.21:99
-chr1	2747334	rs36040910	C	G	1014.60	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.02;HRun=0;HaplotypeScore=10.13;MQ=46.42;MQ0=0;QD=19.14;SB=-531.73	GT:AD:DP:GL:GQ	0/1:24,28:52:-120.42,-15.67,-100.79:99
-chr1	2747338	.	G	C	826.30	SnpCluster	AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=9.97;MQ=47.26;MQ0=0;QD=17.21;SB=-358.43	GT:AD:DP:GL:GQ	0/1:23,24:47:-99.78,-13.86,-101.33:99
-chr1	2747339	.	A	T	752.39	SnpCluster	AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=3.00;MQ=47.26;MQ0=0;QD=15.67;SB=-313.68	GT:AD:DP:GL:GQ	0/1:23,24:47:-92.38,-13.86,-82.64:99
-chr1	2747369	.	A	T	3.22	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=49.16;MQ0=0;OQ=703.99;QD=14.37;SB=-261.27	GT:AD:DP:GL:GQ	0/1:25,24:47:-87.84,-14.16,-92.00:99
-chr1	2747375	rs61766530	T	A	10.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=7.95;MQ=48.99;MQ0=0;OQ=615.25;QD=13.37;SB=-274.62	GT:AD:DP:GL:GQ	0/1:24,22:43:-77.76,-12.95,-81.15:99
-chr1	2747387	rs34464542	A	T	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.05;HRun=0;HaplotypeScore=17.99;MQ=50.33;MQ0=0;OQ=475.32;QD=10.80;SB=-181.51	GT:AD:DP:GL:GQ	0/1:25,17:43:-63.16,-12.35,-94.24:99
-chr1	2747397	rs12739189	C	T	56.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=51.77;MQ0=0;OQ=606.36;QD=14.44;SB=-321.86	GT:AD:DP:GL:GQ	0/1:23,19:42:-76.58,-12.66,-74.78:99
-chr1	2747562	rs35401657	A	G	338.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=54.94;MQ0=0;OQ=916.49;QD=12.73;SB=-443.41	GT:AD:DP:GL:GQ	0/1:37,34:70:-119.52,-24.59,-154.08:99
-chr1	2747592	rs34262355	G	A	349.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=54.28;MQ0=0;OQ=1032.22;QD=12.74;SB=-451.44	GT:AD:DP:GL:GQ	0/1:45,35:78:-130.02,-23.51,-145.95:99
-chr1	2747610	rs34202711	A	G	414.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.97;MQ0=0;OQ=1011.04;QD=11.89;SB=-504.68	GT:AD:DP:GL:GQ	0/1:42,43:82:-129.10,-24.71,-172.46:99
-chr1	2747660	rs1456461	C	T	603.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.82;MQ0=0;OQ=891.16;QD=15.63;SB=-457.95	GT:AD:DP:GL:GQ	0/1:30,27:57:-109.57,-17.17,-111.30:99
-chr1	2748044	rs12740180	C	A	413.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=606.44;QD=10.83;SB=-262.28	GT:AD:DP:GL:GQ	0/1:33,23:54:-80.19,-16.26,-114.41:99
-chr1	2748753	rs2889541	G	A	337.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.41;MQ0=0;OQ=1139.69;QD=16.05;SB=-477.50	GT:AD:DP:GL:GQ	0/1:37,34:70:-138.35,-21.10,-115.20:99
-chr1	2749666	rs12037615	A	T	1.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=5;HaplotypeScore=1.16;MQ=59.20;MQ0=0;OQ=1128.99;QD=14.86;SB=-549.41	GT:AD:DP:GL:GQ	0/1:40,36:76:-139.07,-22.89,-148.90:99
-chr1	2749715	rs12047690	C	T	131.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=816.13;QD=12.95;SB=-150.20	GT:AD:DP:GL:GQ	0/1:36,27:60:-102.99,-18.09,-107.52:99
-chr1	2751235	rs12049543	C	A	405.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.56;MQ0=0;OQ=1060.86;QD=12.63;SB=-512.22	GT:AD:DP:GL:GQ	0/1:47,37:84:-134.67,-25.30,-168.73:99
-chr1	2751390	rs1840738	T	C	158.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=56.95;MQ0=0;OQ=466.03;QD=9.14;SB=-238.28	GT:AD:DP:GL:GQ	0/1:29,21:47:-64.06,-14.17,-105.57:99
-chr1	2751392	rs1840737	T	C	150.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=56.89;MQ0=0;OQ=432.09;QD=8.64;SB=-211.35	GT:AD:DP:GL:GQ	0/1:30,20:46:-60.36,-13.87,-105.49:99
-chr1	2751468	rs1840736	C	T	225.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.99;MQ0=0;OQ=538.81;QD=11.71;SB=-284.82	GT:AD:DP:GL:GQ	0/1:28,18:46:-71.04,-13.87,-86.92:99
-chr1	2751723	rs1456460	G	T	356.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=57.19;MQ0=0;OQ=1157.64;QD=13.31;SB=-342.38	GT:AD:DP:GL:GQ	0/1:48,39:87:-145.25,-26.21,-162.75:99
-chr1	2753129	rs6424080	T	C	316.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.51;MQ0=0;OQ=966.99;QD=12.24;SB=-274.18	GT:AD:DP:GL:GQ	0/1:43,36:77:-123.19,-23.21,-165.41:99
-chr1	2753241	rs6424081	G	C	7.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=4;HaplotypeScore=2.76;MQ=58.85;MQ0=0;OQ=855.86;QD=17.47;SB=-443.74	GT:AD:DP:GL:GQ	0/1:25,24:49:-103.64,-14.77,-108.86:99
-chr1	2753928	rs10909950	G	C	275.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.98;MQ0=0;OQ=738.28;QD=13.67;SB=-369.83	GT:AD:DP:GL:GQ	0/1:27,27:50:-92.19,-15.07,-120.46:99
-chr1	2754032	rs7553697	T	C	122.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=50.90;MQ0=0;OQ=845.37;QD=27.27;SB=-371.38	GT:AD:DP:GL:GQ	1/1:0,31:28:-88.15,-8.45,-0.03:84.18
-chr1	2754183	rs6424082	A	G	8.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=5.05;MQ=58.51;MQ0=0;OQ=416.20;QD=9.46;SB=-192.43	GT:AD:DP:GL:GQ	0/1:23,21:40:-56.97,-12.06,-83.18:99
-chr1	2754298	rs6424083	C	G	173.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=55.35;MQ0=0;OQ=1296.80;QD=37.05;SB=-603.86	GT:AD:DP:GL:GQ	1/1:0,35:33:-133.29,-9.95,-0.02:99
-chr1	2754773	.	G	A	0.64	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=3.22;MQ=60.00;MQ0=0;OQ=1109.61;QD=18.81;SB=-280.74	GT:AD:DP:GL:GQ	0/1:25,34:58:-131.72,-17.47,-86.47:99
-chr1	2754949	rs34133714	C	T	67.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.50;MQ0=0;OQ=577.42;QD=16.98;SB=-168.27	GT:AD:DP:GL:GQ	0/1:16,18:34:-71.28,-10.25,-51.84:99
-chr1	2755031	rs34352177	T	C	19.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=7.41;MQ=59.06;MQ0=0;OQ=899.29;QD=13.03;SB=-455.95	GT:AD:DP:GL:GQ	0/1:36,31:67:-116.13,-22.92,-145.73:99
-chr1	2755403	rs11806141	T	G	18.81	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=6.77;MQ=51.89;MQ0=9;QD=0.27;SB=74.23	GT:AD:DP:GL:GQ	0/1:49,20:51:-20.52,-15.36,-159.70:51.59
-chr1	2755508	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=79;Dels=0.06;HRun=2;HaplotypeScore=38.09;MQ=49.34;MQ0=4;OQ=65.07;QD=0.82;SB=71.26	GT:AD:DP:GL:GQ	0/1:58,15:62:-27.57,-17.78,-196.95:97.90
-chr1	2755529	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=65.45;MQ=46.51;MQ0=7;OQ=513.73;QD=7.04;SB=-185.79	GT:AD:DP:GL:GQ	0/1:43,30:51:-70.02,-15.37,-107.03:99
-chr1	2755532	.	A	G	42.46	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=67.89;MQ=46.23;MQ0=7;QD=0.57;SB=41.14	GT:AD:DP:GL:GQ	0/1:61,13:50:-22.60,-15.07,-170.16:75.29
-chr1	2755579	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=21.20;MQ=45.33;MQ0=9;OQ=157.48;QD=2.02;SB=-23.25	GT:AD:DP:GL:GQ	0/1:60,12:47:-33.22,-14.19,-119.56:99
-chr1	2755596	rs11806928	A	G	0.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=12.62;MQ=45.10;MQ0=9;OQ=205.66;QD=2.78;SB=-15.21	GT:AD:DP:GL:GQ	0/1:58,16:54:-40.13,-16.28,-162.81:99
-chr1	2755612	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=11.17;MQ=46.38;MQ0=5;OQ=126.58;QD=1.73;SB=14.62	GT:AD:DP:GL:GQ	0/1:63,10:57:-33.13,-17.19,-158.30:99
-chr1	2755632	rs10909952	C	T	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=10.73;MQ=46.85;MQ0=3;OQ=64.17;QD=0.87;SB=26.06	GT:AD:DP:GL:GQ	0/1:61,13:47:-23.87,-14.17,-131.74:97
-chr1	2755643	.	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=46.66;MQ0=2;OQ=370.42;QD=5.22;SB=-83.91	GT:AD:DP:GL:GQ	0/1:46,20:49:-55.11,-14.78,-108.17:99
-chr1	2755657	rs61763677	G	T	0.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=8.88;MQ=44.97;MQ0=5;OQ=282.63;QD=3.29;SB=-9.61	GT:AD:DP:GL:GQ	0/1:69,17:72:-53.24,-21.69,-193.61:99
-chr1	2755674	rs61763678	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=23.01;MQ=44.47;MQ0=7;OQ=292.56;QD=2.76;SB=-24.23	GT:AD:DP:GL:GQ	0/1:76,27:79:-56.37,-23.83,-203.58:99
-chr1	2755706	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=46.46;MQ=43.46;MQ0=6;OQ=100.65;QD=1.01;SB=48.33	GT:AD:DP:GL:GQ	0/1:73,19:68:-33.86,-20.51,-216.35:99
-chr1	2755733	rs10909953	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=134.56;MQ=44.60;MQ0=11;OQ=218.03;QD=1.83;SB=-68.77	GT:AD:DP:GL:GQ	0/1:91,18:82:-72.98,-47.89,-237.50:99
-chr1	2755738	rs10909954	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=94.54;MQ=44.07;MQ0=12;OQ=119.63;QD=1.01;SB=15.66	GT:AD:DP:GL:GQ	0/1:86,29:80:-42.04,-26.79,-256.64:99
-chr1	2755753	.	G	A	11.77	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=1;HaplotypeScore=33.32;MQ=44.33;MQ0=10;QD=0.09;SB=66.29	GT:AD:DP:GL:GQ	0/1:116,10:95:-33.05,-28.62,-308.21:44.31
-chr1	2755755	rs57067996	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=130;Dels=0.00;HRun=1;HaplotypeScore=39.46;MQ=44.65;MQ0=10;OQ=1208.64;QD=9.30;SB=-349.24	GT:AD:DP:GL:GQ	0/1:72,52:91:-151.57,-27.42,-186.87:99
-chr1	2755787	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=9.86;MQ=44.22;MQ0=18;OQ=212.29;QD=1.02;SB=84.79	GT:AD:DP:GL:GQ	0/1:175,28:147:-68.83,-44.32,-479.03:99
-chr1	2755816	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=62.94;MQ=43.89;MQ0=23;OQ=172.99;QD=0.80;SB=63.05	GT:AD:DP:GL:GQ	0/1:192,24:159:-68.50,-47.92,-487.91:99
-chr1	2755844	rs4991850	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.00;HRun=0;HaplotypeScore=53.96;MQ=43.72;MQ0=16;OQ=1135.99;QD=6.93;SB=-394.17	GT:AD:DP:GL:GQ	0/1:112,52:121:-153.35,-36.47,-275.01:99
-chr1	2755847	rs57868894	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=161;Dels=0.00;HRun=1;HaplotypeScore=64.38;MQ=43.84;MQ0=16;OQ=859.67;QD=5.34;SB=-128.73	GT:AD:DP:GL:GQ	0/1:103,58:122:-126.01,-36.76,-296.17:99
-chr1	2755864	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=32.56;MQ=44.46;MQ0=14;OQ=96.62;QD=0.70;SB=30.17	GT:AD:DP:GL:GQ	0/1:117,20:102:-43.73,-30.78,-282.87:99
-chr1	2755889	rs4991849	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.04;HRun=2;HaplotypeScore=40.28;MQ=47.08;MQ0=9;OQ=2321.13;QD=20.36;SB=-1120.12	GT:AD:DP:GL:GQ	0/1:18,92:93:-262.51,-27.11,-65.29:99
-chr1	2755910	rs12728224	T	G	16.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=49.38;MQ0=5;QD=0.17;SB=88.35	GT:AD:DP:GL:GQ	0/1:84,11:79:-28.73,-23.80,-253.95:49.30
-chr1	2755924	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=18.40;MQ=49.90;MQ0=6;OQ=1394.92;QD=15.16;SB=-476.13	GT:AD:DP:GL:GQ	0/1:39,53:66:-162.68,-19.90,-75.57:99
-chr1	2755992	.	G	A	33.66	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=19.55;MQ=45.20;MQ0=8;QD=0.40;SB=27.48	GT:AD:DP:GL:GQ	0/1:73,12:61:-25.05,-18.40,-176.14:66.50
-chr1	2756013	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=17.90;MQ=45.32;MQ0=5;OQ=157.50;QD=2.67;SB=-33.78	GT:AD:DP:GL:GQ	0/1:38,21:37:-30.19,-11.15,-106.30:99
-chr1	2756025	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=4.66;MQ=45.60;MQ0=4;OQ=63.13;QD=1.15;SB=26.12	GT:AD:DP:GL:GQ	0/1:45,10:38:-21.07,-11.48,-129.01:95.97
-chr1	2756051	rs4992290	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=36.34;MQ=44.26;MQ0=6;OQ=205.91;QD=3.38;SB=35.13	GT:AD:DP:GL:GQ	0/1:37,24:36:-34.74,-10.86,-87.18:99
-chr1	2756088	rs6676347	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=50.22;MQ=41.73;MQ0=14;OQ=1315.11;QD=15.29;SB=-568.14	GT:AD:DP:GL:GQ	0/1:37,49:48:-149.26,-14.46,-35.10:99
-chr1	2756101	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=21.36;MQ=40.87;MQ0=15;OQ=73.71;QD=0.88;SB=47.17	GT:AD:DP:GL:GQ	0/1:64,20:51:-26.02,-15.36,-158.57:99
-chr1	2756151	rs4648513	T	C	97.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.14;MQ=50.77;MQ0=9;OQ=1380.54;QD=20.92;SB=-651.39	GT:AD:DP:GL:GQ	1/1:9,57:48:-150.01,-14.48,-8.38:61.01
-chr1	2756174	rs59048447	G	A	70.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=56.28;MQ0=2;OQ=675.24;QD=12.74;SB=-328.31	GT:AD:DP:GL:GQ	0/1:26,27:46:-84.67,-13.86,-86.53:99
-chr1	2756831	rs4648515	C	T	238.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=59.11;MQ0=0;OQ=2661.31;QD=39.14;SB=-1337.11	GT:AD:DP:GL:GQ	1/1:1,67:68:-272.30,-20.49,-2.59:99
-chr1	2757061	rs4648518	A	G	438.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1894.09;QD=32.66;SB=-719.10	GT:AD:DP:GL:GQ	1/1:0,58:55:-193.02,-16.57,-0.02:99
-chr1	2757563	rs4648519	C	T	617.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=2063.43;QD=38.21;SB=-1058.93	GT:AD:DP:GL:GQ	1/1:0,54:53:-209.94,-15.97,-0.02:99
-chr1	2758482	.	C	T	0.54	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=50.17;MQ0=3;OQ=191.27;QD=4.25;SB=-120.51	GT:AD:DP:GL:GQ	0/1:31,14:38:-33.86,-11.45,-100.08:99
-chr1	2758751	.	T	G	48.69	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=34.31;MQ0=7;QD=1.62;SB=-11.91	GT:AD:DP:GL:GQ	0/1:21,9:22:-14.78,-6.63,-62.96:81.53
-chr1	2758819	.	A	G	182.25	PASS	AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.84;MQ0=2;OQ=868.67;QD=27.15;SB=-395.30	GT:AD:DP:GL:GQ	1/1:1,31:28:-90.48,-8.45,-0.03:84.20
-chr1	2758861	.	T	C	30.75	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=44.85;MQ0=1;QD=0.90;SB=29.12	GT:AD:DP:GL:GQ	0/1:26,7:26:-14.19,-7.84,-86.43:63.58
-chr1	2758882	.	G	A	6.14	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=35.37;MQ0=5;OQ=748.79;QD=17.41;SB=-255.79	GT:AD:DP:GL:GQ	0/1:14,29:29:-86.90,-8.74,-21.14:99
-chr1	2758933	.	T	C	5.05	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=4.40;MQ=30.24;MQ0=6;OQ=270.13;QD=7.50;SB=-156.34	GT:AD:DP:GL:GQ	0/1:9,26:16:-35.12,-4.83,-17.51:99
-chr1	2758959	.	T	G	27.66	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=27.02;MQ0=8;QD=0.92;SB=-23.52	GT:AD:DP:GL:GQ	0/1:24,6:11:-9.36,-3.32,-25.67:60.48
-chr1	2759011	.	T	G	0.06	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=3.83;MQ=18.26;MQ0=23;OQ=314.04;QD=4.42;SB=-69.87	GT:AD:DP:GL:GQ	0/1:37,34:26:-42.52,-7.83,-50.68:99
-chr1	2759038	.	G	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=15.13;MQ=25.49;MQ0=29;OQ=89.07;QD=0.97;SB=-9.29	GT:AD:DP:GL:GQ	0/1:85,7:35:-22.74,-10.55,-90.79:99
-chr1	2759090	.	G	T	15.10	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=11.61;MQ=28.51;MQ0=10;QD=0.35;SB=-6.99	GT:AD:DP:GL:GQ	0/1:32,11:16:-9.61,-4.83,-35.57:47.80
-chr1	2759130	rs61763686	T	C	37.28	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.78;MQ0=1;QD=12.43;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-7.14,-0.60,-0.00:6.02
-chr1	2759142	.	G	A	1.53	PASS	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=18.78;MQ0=2;OQ=80.16;QD=13.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,3:4:-12.50,-1.21,-3.10:18.91
-chr1	2759167	.	G	T	2.82	PASS	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=26.71;MQ0=4;OQ=151.71;QD=6.90;SB=-6.99	GT:AD:DP:GL:GQ	0/1:16,6:14:-22.67,-4.22,-28.76:99
-chr1	2759193	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=15.10;MQ=26.07;MQ0=10;OQ=142.00;QD=2.90;SB=-61.29	GT:AD:DP:GL:GQ	0/1:38,11:32:-27.13,-9.65,-83.88:99
-chr1	2759219	.	G	T	0.58	PASS	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=27.42;MQ0=13;OQ=233.66;QD=3.03;SB=-10.31	GT:AD:DP:GL:GQ	0/1:59,18:48:-41.11,-14.46,-126.09:99
-chr1	2759237	rs10909961	G	A	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.56;MQ=30.14;MQ0=15;OQ=68.31;QD=0.77;SB=29.11	GT:AD:DP:GL:GQ	0/1:82,7:55:-26.69,-16.57,-172.16:99
-chr1	2759271	.	G	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=31.60;MQ0=17;OQ=103.26;QD=1.09;SB=14.07	GT:AD:DP:GL:GQ	0/1:79,16:53:-29.57,-15.96,-157.88:99
-chr1	2759402	rs10752737	G	A	706.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.81;MQ0=0;OQ=3330.93;QD=38.29;SB=-1475.63	GT:AD:DP:GL:GQ	1/1:0,87:84:-332.09,-25.31,-0.03:99
-chr1	2759793	rs6665646	C	T	285.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.67;MQ0=0;OQ=1210.11;QD=17.54;SB=-511.14	GT:AD:DP:GL:GQ	0/1:33,36:69:-145.09,-20.79,-106.44:99
-chr1	2760042	rs6679343	A	T	0.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=6;HaplotypeScore=1.76;MQ=59.01;MQ0=0;OQ=2240.29;QD=33.94;SB=-793.89	GT:AD:DP:GL:GQ	1/1:0,66:63:-227.64,-18.99,-0.03:99
-chr1	2761186	.	C	G	0.63	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.71;MQ=59.37;MQ0=0;OQ=541.38;QD=12.30;SB=-216.32	GT:AD:DP:GL:GQ	0/1:26,18:41:-69.78,-12.36,-101.99:99
-chr1	2761364	rs12743952	G	A	204.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=59.65;MQ0=0;OQ=611.70;QD=11.33;SB=-279.20	GT:AD:DP:GL:GQ	0/1:32,22:50:-79.52,-15.07,-100.94:99
-chr1	2761375	rs12743965	G	A	240.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.65;MQ0=0;OQ=726.42;QD=13.45;SB=-307.80	GT:AD:DP:GL:GQ	0/1:31,23:53:-91.89,-15.96,-108.39:99
-chr1	2761483	rs34161193	G	A	219.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=58.78;MQ0=0;OQ=505.10;QD=13.29;SB=-258.15	GT:AD:DP:GL:GQ	0/1:20,17:37:-64.94,-11.15,-70.90:99
-chr1	2761516	rs35134901	G	C	42.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=58.89;MQ0=0;OQ=485.26;QD=11.55;SB=-253.13	GT:AD:DP:GL:GQ	0/1:25,17:38:-63.28,-11.47,-90.46:99
-chr1	2761538	rs35767265	C	A	434.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=663.44;QD=13.54;SB=-277.32	GT:AD:DP:GL:GQ	0/1:26,23:47:-83.79,-14.16,-83.28:99
-chr1	2761907	rs35313744	A	C	3.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=4;HaplotypeScore=1.29;MQ=59.00;MQ0=0;OQ=545.25;QD=12.98;SB=-173.29	GT:AD:DP:GL:GQ	0/1:20,22:40:-69.86,-12.05,-71.88:99
-chr1	2762054	rs6694484	G	A	356.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.79;MQ0=0;OQ=715.90;QD=13.26;SB=-315.29	GT:AD:DP:GL:GQ	0/1:29,25:51:-90.24,-15.37,-99.20:99
-chr1	2762207	rs6675221	C	A	216.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.45;MQ0=0;OQ=527.73;QD=12.57;SB=-249.28	GT:AD:DP:GL:GQ	0/1:21,20:39:-67.80,-11.75,-71.40:99
-chr1	2762658	rs12727394	T	C	169.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=383.94;QD=11.63;SB=-133.29	GT:AD:DP:GL:GQ	0/1:17,15:29:-50.42,-8.74,-57.72:99
-chr1	2763115	rs12729596	C	T	224.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.16;MQ0=0;OQ=609.66;QD=12.19;SB=-271.12	GT:AD:DP:GL:GQ	0/1:30,20:50:-79.31,-15.06,-107.78:99
-chr1	2763349	rs6660680	C	G	206.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.16;MQ=59.65;MQ0=0;OQ=809.85;QD=15.28;SB=-407.93	GT:AD:DP:GL:GQ	0/1:28,25:49:-99.04,-14.78,-104.68:99
-chr1	2763426	rs6660759	C	T	169.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.89;MQ0=0;OQ=778.20;QD=18.53;SB=-350.90	GT:AD:DP:GL:GQ	0/1:15,27:38:-92.57,-11.46,-40.16:99
-chr1	2763555	rs6674204	A	G	358.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1244.75;QD=33.64;SB=-466.51	GT:AD:DP:GL:GQ	1/1:0,37:36:-128.07,-10.85,-0.01:99
-chr1	2763913	rs7529000	A	G	539.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=590.27;QD=13.73;SB=-268.99	GT:AD:DP:GL:GQ	0/1:19,24:38:-73.77,-11.46,-59.16:99
-chr1	2765576	.	A	G	299.17	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.30;MQ0=1;OQ=708.87;QD=14.18;SB=-362.49	GT:AD:DP:GL:GQ	0/1:25,25:46:-88.03,-13.85,-86.85:99
-chr1	2765703	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=40;Dels=0.03;HRun=1;HaplotypeScore=65.65;MQ=34.06;MQ0=6;OQ=224.51;QD=5.61;SB=-69.85	GT:AD:DP:GL:GQ	0/1:16,18:20:-31.76,-6.02,-57.23:99
-chr1	2765716	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=45.86;MQ=31.67;MQ0=6;OQ=473.81;QD=11.56;SB=-227.60	GT:AD:DP:GL:GQ	0/1:7,34:22:-57.29,-6.63,-24.20:99
-chr1	2765718	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=49.51;MQ=31.73;MQ0=6;OQ=139.31;QD=3.48;SB=14.07	GT:AD:DP:GL:GQ	0/1:34,6:18:-22.64,-5.42,-43.65:99
-chr1	2765729	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=2;HaplotypeScore=101.24;MQ=39.70;MQ0=5;OQ=348.53;QD=8.30;SB=-73.03	GT:AD:DP:GL:GQ	0/1:25,16:29:-48.99,-10.85,-57.39:99
-chr1	2765740	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=21.54;MQ=47.97;MQ0=0;OQ=288.34;QD=9.94;SB=-104.59	GT:AD:DP:GL:GQ	0/1:16,13:26:-39.95,-7.84,-58.99:99
-chr1	2765813	.	A	G	11.29	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=51.84;MQ0=0;OQ=780.70;QD=15.61;SB=-390.27	GT:AD:DP:GL:GQ	0/1:21,28:48:-95.81,-14.46,-83.37:99
-chr1	2765894	.	A	C	0.06	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=11.31;MQ=45.14;MQ0=0;OQ=337.42;QD=9.37;SB=-140.89	GT:AD:DP:GL:GQ	0/1:21,15:33:-46.96,-9.94,-71.34:99
-chr1	2765910	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=53;Dels=0.02;HRun=1;HaplotypeScore=33.31;MQ=38.51;MQ0=0;OQ=588.92;QD=11.11;SB=23.11	GT:AD:DP:GL:GQ	0/1:28,24:46:-75.73,-13.55,-102.75:99
-chr1	2765957	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=2;HaplotypeScore=176.91;MQ=27.98;MQ0=17;OQ=352.77;QD=3.12;SB=2.45	GT:AD:DP:GL:GQ	0/1:85,28:53:-54.54,-15.98,-142.28:99
-chr1	2765968	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=118.45;MQ=28.99;MQ0=17;OQ=151.04;QD=1.26;SB=-15.93	GT:AD:DP:GL:GQ	0/1:95,25:59:-36.17,-17.78,-173.10:99
-chr1	2765995	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=52.19;MQ=34.85;MQ0=7;OQ=128.24;QD=1.78;SB=-51.69	GT:AD:DP:GL:GQ	0/1:61,11:54:-32.38,-16.27,-203.82:99
-chr1	2765996	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=51.72;MQ=35.05;MQ0=7;OQ=180.10;QD=2.54;SB=-41.96	GT:AD:DP:GL:GQ	0/1:59,12:54:-37.57,-16.27,-158.22:99
-chr1	2766902	rs34376289	C	T	393.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.48;MQ0=0;OQ=811.67;QD=17.64;SB=-367.51	GT:AD:DP:GL:GQ	0/1:20,26:45:-98.01,-13.56,-71.88:99
-chr1	2768626	rs10909992	C	T	335.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.57;MQ0=0;OQ=811.02;QD=12.48;SB=-416.42	GT:AD:DP:GL:GQ	0/1:35,29:62:-103.08,-18.70,-112.11:99
-chr1	2768752	rs12409918	A	C	74.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.55;MQ=59.57;MQ0=0;OQ=965.61;QD=17.88;SB=-402.66	GT:AD:DP:GL:GQ	0/1:20,34:50:-114.91,-15.06,-60.43:99
-chr1	2768903	rs12409348	T	C	172.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.28;MQ=60.00;MQ0=0;OQ=398.89;QD=10.50;SB=-78.75	GT:AD:DP:GL:GQ	0/1:20,17:35:-53.71,-10.54,-80.33:99
-chr1	2769019	rs10909995	C	G	17.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=58.48;MQ0=0;OQ=1462.05;QD=36.55;SB=-653.43	GT:AD:DP:GL:GQ	1/1:0,40:35:-149.81,-10.55,-0.02:99
-chr1	2769620	rs28600853	C	T	67.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.53;MQ0=0;OQ=1091.29;QD=28.72;SB=-540.63	GT:AD:DP:GL:GQ	0/1:4,33:36:-123.26,-10.85,-13.62:27.66
-chr1	2769674	rs4648542	G	A	90.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=51.80;MQ0=1;OQ=271.91;QD=9.71;SB=-148.61	GT:AD:DP:GL:GQ	0/1:13,15:21:-36.80,-6.33,-39.42:99
-chr1	2769679	rs28367217	C	G	36.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=51.80;MQ0=1;OQ=209.26;QD=8.37;SB=2.04	GT:AD:DP:GL:GQ	0/1:15,10:18:-29.64,-5.43,-44.14:99
-chr1	2769692	rs28478242	A	G	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=4;HaplotypeScore=0.82;MQ=53.88;MQ0=1;OQ=89.42;QD=4.26;SB=5.05	GT:AD:DP:GL:GQ	0/1:15,6:17:-17.35,-5.12,-46.13:99
-chr1	2769752	rs7542593	T	C	75.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.77;MQ0=0;OQ=136.56;QD=6.21;SB=-67.76	GT:AD:DP:GL:GQ	0/1:10,12:17:-22.07,-5.13,-38.52:99
-chr1	2769805	rs4648543	T	G	0.02	FDRtranche1.00to2.00	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=4;HaplotypeScore=2.68;MQ=55.12;MQ0=0;OQ=754.89;QD=29.03;SB=-110.69	GT:AD:DP:GL:GQ	1/1:0,26:23:-79.08,-6.93,-0.01:69.18
-chr1	2770855	rs729178	T	G	35.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=57.97;MQ0=0;OQ=332.17;QD=14.44;SB=-62.09	GT:AD:DP:GL:GQ	0/1:7,16:18:-41.92,-5.42,-18.71:99
-chr1	2770856	rs729177	T	C	47.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=57.97;MQ0=0;OQ=319.36;QD=13.89;SB=-53.86	GT:AD:DP:GL:GQ	0/1:7,16:20:-41.25,-6.03,-26.63:99
-chr1	2772453	rs12119163	G	A	585.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1388.32;QD=37.52;SB=-625.84	GT:AD:DP:GL:GQ	1/1:0,37:36:-142.43,-10.85,-0.01:99
-chr1	2772603	rs7551868	T	C	19.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=3.77;MQ=58.92;MQ0=0;OQ=1140.34;QD=29.24;SB=-578.97	GT:AD:DP:GL:GQ	1/1:0,39:37:-117.66,-11.16,-0.04:99
-chr1	2772900	rs4648402	T	C	156.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.00;MQ0=0;OQ=994.66;QD=28.42;SB=-468.49	GT:AD:DP:GL:GQ	1/1:0,35:33:-103.09,-9.96,-0.03:99
-chr1	2773675	rs12752112	G	C	9.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.95;MQ0=0;OQ=859.11;QD=39.05;SB=-325.45	GT:AD:DP:GL:GQ	1/1:0,22:21:-89.50,-6.33,-0.01:63.21
-chr1	2776554	rs1563470	T	C	23.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=60.00;MQ0=0;OQ=1838.24;QD=33.42;SB=-908.03	GT:AD:DP:GL:GQ	1/1:0,55:52:-187.42,-15.66,-0.02:99
-chr1	2777013	rs897616	C	G	7.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=1.07;MQ=58.26;MQ0=0;OQ=1193.61;QD=34.10;SB=-446.20	GT:AD:DP:GL:GQ	1/1:0,35:30:-122.96,-9.05,-0.02:90.29
-chr1	2777567	rs897620	C	G	317.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1920.95;QD=42.69;SB=-716.92	GT:AD:DP:GL:GQ	1/1:0,45:44:-195.69,-13.26,-0.01:99
-chr1	2778573	rs56273341	A	G	89.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=1164.73;QD=29.12;SB=-590.57	GT:AD:DP:GL:GQ	1/1:0,40:37:-120.09,-11.16,-0.03:99
-chr1	2779035	rs12569164	T	C	119.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=49.75;MQ0=0;OQ=1623.80;QD=28.49;SB=-755.66	GT:AD:DP:GL:GQ	1/1:0,57:53:-166.02,-15.99,-0.06:99
-chr1	2779347	.	T	C	140.90	Indel	AC=1;AF=0.50;AN=2;DP=70;Dels=0.03;HRun=0;HaplotypeScore=53.64;MQ=31.59;MQ0=1;QD=2.01;SB=-93.61	GT:AD:DP:GL:GQ	0/1:59,9:55:-33.34,-15.96,-177.98:99
-chr1	2779357	rs55740077	T	C	137.39	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=61.84;MQ=29.83;MQ0=1;QD=1.99;SB=-25.89	GT:AD:DP:GL:GQ	0/1:28,41:15:-21.54,-4.52,-37.07:99
-chr1	2779361	rs55927204	T	C	380.25	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=52.10;MQ=29.71;MQ0=1;QD=5.51;SB=-184.74	GT:AD:DP:GL:GQ	0/1:7,62:16:-46.13,-4.82,-12.60:77.76
-chr1	2779365	.	T	C	528.78	SnpCluster	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=50.77;MQ=30.92;MQ0=1;QD=7.24;SB=-289.59	GT:AD:DP:GL:GQ	0/1:6,67:20:-62.19,-6.02,-12.60:65.71
-chr1	2779369	.	T	C	809.75	SnpCluster	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=40.71;MQ=31.11;MQ0=1;QD=10.52;SB=-337.36	GT:AD:DP:GL:GQ	0/1:9,68:31:-93.60,-9.34,-19.91:99
-chr1	2779373	rs56012041	T	C	260.44	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=37.08;MQ=32.24;MQ0=1;QD=3.38;SB=-116.63	GT:AD:DP:GL:GQ	0/1:28,49:21:-35.65,-6.33,-44.87:99
-chr1	2779421	rs5023660	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=3;HaplotypeScore=23.36;MQ=40.90;MQ0=1;OQ=1397.64;QD=21.18;SB=-647.72	GT:AD:DP:GL:GQ	0/1:24,41:55:-159.31,-16.27,-52.10:99
-chr1	2779423	rs56155638	T	C	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=0;HaplotypeScore=20.03;MQ=40.90;MQ0=1;OQ=1243.01;QD=18.83;SB=-541.02	GT:AD:DP:GL:GQ	0/1:23,42:56:-144.15,-16.57,-59.53:99
-chr1	2779766	rs2124661	C	G	42.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=49.71;MQ0=0;OQ=2767.03;QD=41.92;SB=-1222.51	GT:AD:DP:GL:GQ	1/1:0,66:63:-280.30,-18.98,-0.02:99
-chr1	2779832	rs2168531	C	T	260.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=50.55;MQ0=0;OQ=2553.68;QD=38.69;SB=-1139.52	GT:AD:DP:GL:GQ	1/1:0,66:66:-258.98,-19.89,-0.03:99
-chr1	2780005	.	G	C	32.52	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=15.63;MQ=58.92;MQ0=0;QD=0.76;SB=44.18	GT:AD:DP:GL:GQ	0/1:33,10:29:-15.29,-8.76,-103.60:65.36
-chr1	2781003	rs10910023	C	T	121.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.11;MQ0=0;OQ=1930.80;QD=37.13;SB=-708.95	GT:AD:DP:GL:GQ	1/1:0,52:49:-196.68,-14.76,-0.01:99
-chr1	2781813	rs12131393	C	T	195.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=701.85;QD=13.76;SB=-265.19	GT:AD:DP:GL:GQ	0/1:28,23:44:-86.73,-13.26,-75.43:99
-chr1	2781975	rs12131450	C	T	0.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=915.40;QD=20.80;SB=-418.48	GT:AD:DP:GL:GQ	0/1:17,27:44:-108.08,-13.26,-61.20:99
-chr1	2784004	rs10909791	C	T	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=18.57;MQ=55.20;MQ0=0;OQ=554.87;QD=8.95;SB=-141.63	GT:AD:DP:GL:GQ	0/1:38,21:51:-74.16,-15.38,-99.65:99
-chr1	2784009	rs6673503	T	C	0.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=15.72;MQ=55.44;MQ0=0;OQ=828.36;QD=14.04;SB=-284.66	GT:AD:DP:GL:GQ	0/1:19,40:49:-100.91,-14.79,-59.84:99
-chr1	2784113	rs6658584	G	A	324.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=573.55;QD=11.95;SB=-252.51	GT:AD:DP:GL:GQ	0/1:29,19:42:-73.29,-12.65,-86.05:99
-chr1	2784397	rs6668620	C	T	83.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.97;MQ0=0;OQ=989.63;QD=21.99;SB=-434.99	GT:AD:DP:GL:GQ	0/1:12,32:41:-114.60,-12.35,-43.77:99
-chr1	2784411	rs10909793	G	T	285.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=987.49;QD=22.44;SB=-485.97	GT:AD:DP:GL:GQ	0/1:11,33:43:-114.99,-12.95,-39.80:99
-chr1	2785397	rs6679954	T	C	177.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=57.39;MQ0=0;OQ=162.89;QD=9.05;SB=-99.99	GT:AD:DP:GL:GQ	0/1:9,8:15:-24.09,-4.52,-32.21:99
-chr1	2785861	rs10797340	G	C	110.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=2067.39;QD=39.01;SB=-1035.13	GT:AD:DP:GL:GQ	1/1:0,53:49:-210.35,-14.77,-0.02:99
-chr1	2786415	rs10752722	A	G	154.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.07;MQ0=0;OQ=1517.85;QD=30.36;SB=-724.72	GT:AD:DP:GL:GQ	1/1:0,50:49:-155.42,-14.78,-0.05:99
-chr1	2786479	rs4648406	T	C	92.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.34;MQ0=0;OQ=883.04;QD=25.23;SB=-376.38	GT:AD:DP:GL:GQ	1/1:0,35:29:-91.92,-8.75,-0.03:87.18
-chr1	2787126	rs6424057	T	G	92.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.46;MQ0=0;OQ=1311.97;QD=30.51;SB=-464.84	GT:AD:DP:GL:GQ	1/1:0,43:41:-134.82,-12.36,-0.04:99
-chr1	2787716	rs10797342	C	T	575.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=717.10;QD=14.63;SB=-344.49	GT:AD:DP:GL:GQ	0/1:27,22:49:-89.77,-14.77,-84.62:99
-chr1	2788065	rs2124662	G	C	9.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=5.21;MQ=57.80;MQ0=0;OQ=437.50;QD=13.67;SB=-215.17	GT:AD:DP:GL:GQ	0/1:15,17:26:-54.88,-7.85,-48.57:99
-chr1	2788136	rs1563472	G	A	261.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.38;MQ0=0;OQ=469.47;QD=12.69;SB=-131.12	GT:AD:DP:GL:GQ	0/1:19,18:28:-58.68,-8.45,-41.51:99
-chr1	2788195	rs1563473	T	G	178.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=57.45;MQ0=0;OQ=577.74;QD=12.56;SB=-216.84	GT:AD:DP:GL:GQ	0/1:19,27:43:-74.02,-12.96,-66.19:99
-chr1	2788317	rs1563474	G	A	94.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.84;MQ=58.45;MQ0=0;OQ=661.75;QD=14.71;SB=-298.81	GT:AD:DP:GL:GQ	0/1:21,24:41:-81.83,-12.37,-60.24:99
-chr1	2788572	rs4373707	T	C	44.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.22;MQ=58.97;MQ0=0;OQ=526.05;QD=11.69;SB=-185.63	GT:AD:DP:GL:GQ	0/1:22,23:42:-68.55,-12.66,-84.21:99
-chr1	2788907	rs2377038	A	G	118.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.81;MQ=59.09;MQ0=0;OQ=482.56;QD=10.49;SB=-194.43	GT:AD:DP:GL:GQ	0/1:24,21:41:-63.90,-12.36,-79.61:99
-chr1	2789039	rs729965	G	C	149.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=2442.19;QD=42.11;SB=-956.71	GT:AD:DP:GL:GQ	1/1:0,58:57:-247.82,-17.18,-0.02:99
-chr1	2789321	rs897629	T	C	12.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=3.68;MQ=58.87;MQ0=0;OQ=1220.90;QD=29.78;SB=-560.89	GT:AD:DP:GL:GQ	1/1:0,40:39:-125.71,-11.76,-0.03:99
-chr1	2789340	rs11580768	C	T	285.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=58.92;MQ0=0;OQ=699.84;QD=16.28;SB=-316.84	GT:AD:DP:GL:GQ	0/1:20,23:40:-85.33,-12.06,-59.14:99
-chr1	2789623	rs729419	G	T	32.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=56.89;MQ0=0;OQ=1157.82;QD=30.47;SB=-604.54	GT:AD:DP:GL:GQ	1/1:0,38:33:-119.38,-9.94,-0.01:99
-chr1	2789978	rs4233022	T	C	8.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.32;MQ0=0;OQ=1306.00;QD=33.49;SB=-393.50	GT:AD:DP:GL:GQ	1/1:0,38:38:-137.49,-14.36,-3.31:99
-chr1	2790214	rs61763695	G	T	159.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.41;MQ0=0;OQ=678.47;QD=17.40;SB=-357.12	GT:AD:DP:GL:GQ	0/1:15,24:37:-82.28,-11.15,-45.69:99
-chr1	2790614	rs2061229	A	G	424.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=1321.60;QD=28.73;SB=-492.17	GT:AD:DP:GL:GQ	1/1:0,46:43:-135.79,-12.97,-0.04:99
-chr1	2791688	rs4648429	A	G	0.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.02;HRun=3;HaplotypeScore=3.60;MQ=59.05;MQ0=0;OQ=1300.58;QD=29.56;SB=-615.14	GT:AD:DP:GL:GQ	1/1:0,43:39:-133.67,-11.76,-0.03:99
-chr1	2791895	rs10737188	A	G	0.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=11.58;MQ=57.39;MQ0=0;OQ=1158.45;QD=32.18;SB=-423.17	GT:AD:DP:GL:GQ	1/1:0,36:33:-119.44,-9.94,-0.01:99
-chr1	2791912	rs12127835	C	T	0.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=15.40;MQ=57.73;MQ0=0;OQ=440.23;QD=14.20;SB=-189.24	GT:AD:DP:GL:GQ	0/1:15,16:28:-55.74,-8.44,-48.73:99
-chr1	2791917	rs12124890	G	A	0.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=56.96;MQ0=0;OQ=462.23;QD=14.91;SB=-204.21	GT:AD:DP:GL:GQ	0/1:14,16:28:-57.95,-8.44,-40.79:99
-chr1	2792072	rs10752725	T	C	491.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1748.59;QD=30.68;SB=-570.96	GT:AD:DP:GL:GQ	1/1:0,57:55:-178.49,-16.59,-0.05:99
-chr1	2792208	rs7552943	A	G	158.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.00;MQ0=0;OQ=672.02;QD=16.00;SB=-219.52	GT:AD:DP:GL:GQ	0/1:13,29:36:-81.33,-10.85,-44.36:99
-chr1	2792422	.	G	A	42.68	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.28;MQ0=0;OQ=1176.82;QD=18.39;SB=-377.70	GT:AD:DP:GL:GQ	0/1:28,36:64:-140.25,-19.29,-99.03:99
-chr1	2793407	rs3001793	G	A	9.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=57.81;MQ0=0;OQ=925.83;QD=30.86;SB=-281.35	GT:AD:DP:GL:GQ	1/1:0,30:25:-96.18,-7.54,-0.02:75.22
-chr1	2793666	rs2377039	C	T	77.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=60.00;MQ0=0;OQ=452.51;QD=18.10;SB=-252.58	GT:AD:DP:GL:GQ	0/1:10,15:20:-54.56,-6.03,-20.77:99
-chr1	2794138	rs3001794	C	G	65.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=352.40;QD=13.05;SB=-39.43	GT:AD:DP:GL:GQ	0/1:15,12:26:-46.37,-7.84,-60.81:99
-chr1	2800878	rs2842928	T	C	235.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=901.11;QD=33.37;SB=-249.77	GT:AD:DP:GL:GQ	1/1:0,27:26:-93.71,-7.83,-0.01:78.23
-chr1	2802104	rs10909834	G	C	0.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=3.91;MQ=59.36;MQ0=0;OQ=721.69;QD=20.05;SB=-360.48	GT:AD:DP:GL:GQ	0/1:15,21:32:-85.11,-9.65,-46.55:99
-chr1	2803334	rs10909835	C	A	282.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.29;MQ0=0;OQ=1113.78;QD=16.14;SB=-524.88	GT:AD:DP:GL:GQ	0/1:32,37:69:-135.44,-20.78,-115.35:99
-chr1	2809215	.	C	A	24.19	LowQual	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=33.87;MQ0=3;QD=0.67;SB=-3.99	GT:AD:DP:GL:GQ	0/1:32,3:16:-10.52,-4.82,-48.73:57.01
-chr1	2812608	rs12091184	T	C	225.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.35;MQ0=0;OQ=707.81;QD=11.06;SB=-307.08	GT:AD:DP:GL:GQ	0/1:33,31:62:-92.76,-18.69,-131.04:99
-chr1	2813319	rs12035436	G	T	336.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.54;MQ0=0;OQ=779.74;QD=15.59;SB=-317.29	GT:AD:DP:GL:GQ	0/1:23,27:47:-95.42,-14.16,-69.60:99
-chr1	2815014	rs880724	C	T	302.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=894.47;QD=16.56;SB=-357.16	GT:AD:DP:GL:GQ	0/1:25,29:52:-108.41,-15.68,-73.43:99
-chr1	2816229	rs34114281	G	A	56.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.49;MQ0=0;OQ=818.99;QD=18.20;SB=-240.71	GT:AD:DP:GL:GQ	0/1:20,25:44:-98.44,-13.25,-71.30:99
-chr1	2816447	rs12738063	G	A	183.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=436.36;QD=11.79;SB=-199.90	GT:AD:DP:GL:GQ	0/1:21,16:33:-56.87,-9.95,-58.54:99
-chr1	2819411	rs1869970	A	G	323.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=58.68;MQ0=0;OQ=562.16;QD=12.22;SB=-263.95	GT:AD:DP:GL:GQ	0/1:23,23:46:-73.37,-13.87,-93.65:99
-chr1	2819722	rs10797359	G	A	80.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=58.97;MQ0=0;OQ=661.62;QD=14.70;SB=-329.32	GT:AD:DP:GL:GQ	0/1:24,21:45:-83.00,-13.56,-85.88:99
-chr1	2819782	rs10797360	T	C	62.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.11;MQ0=0;OQ=276.31;QD=7.47;SB=-143.57	GT:AD:DP:GL:GQ	0/1:22,15:35:-41.46,-10.55,-86.74:99
-chr1	2821229	rs2606408	T	C	106.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.39;MQ=59.56;MQ0=0;OQ=598.54;QD=11.51;SB=-201.20	GT:AD:DP:GL:GQ	0/1:29,23:50:-78.20,-15.07,-111.31:99
-chr1	2821448	rs1563475	G	T	119.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=513.38;QD=12.83;SB=-112.67	GT:AD:DP:GL:GQ	0/1:19,21:38:-66.07,-11.45,-67.04:99
-chr1	2821650	rs11590100	A	G	136.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.60;MQ0=0;OQ=943.28;QD=10.14;SB=-480.61	GT:AD:DP:GL:GQ	0/1:51,42:88:-124.13,-26.52,-198.52:99
-chr1	2822111	rs3001796	T	C	212.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=55.14;MQ0=0;OQ=802.13;QD=11.80;SB=-349.06	GT:AD:DP:GL:GQ	0/1:33,34:64:-102.79,-19.29,-127.57:99
-chr1	2822273	rs3001797	G	A	0.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=14.80;MQ=58.82;MQ0=1;OQ=1009.61;QD=19.42;SB=-317.35	GT:AD:DP:GL:GQ	0/1:22,30:49:-119.01,-14.77,-60.02:99
-chr1	2822628	rs6696129	C	T	18.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.89;MQ=57.91;MQ0=1;OQ=832.22;QD=14.35;SB=-326.29	GT:AD:DP:GL:GQ	0/1:32,26:55:-103.07,-16.57,-105.26:99
-chr1	2823020	rs1869971	C	T	374.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=57.94;MQ0=0;OQ=535.79;QD=14.48;SB=-291.84	GT:AD:DP:GL:GQ	0/1:19,18:35:-67.42,-10.56,-54.80:99
-chr1	2823154	rs7339944	G	A	129.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.45;MQ0=0;OQ=957.99;QD=19.16;SB=-392.16	GT:AD:DP:GL:GQ	0/1:19,31:48:-113.55,-14.46,-66.11:99
-chr1	2823192	rs7340016	A	G	29.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.35;MQ=59.34;MQ0=0;OQ=422.29;QD=10.05;SB=-179.53	GT:AD:DP:GL:GQ	0/1:21,21:36:-56.37,-10.85,-73.83:99
-chr1	2823287	rs2124663	C	T	42.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.59;MQ0=0;OQ=634.70;QD=14.10;SB=-71.85	GT:AD:DP:GL:GQ	0/1:24,21:45:-80.32,-13.56,-82.96:99
-chr1	2823310	rs1563466	T	C	23.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.63;MQ=58.92;MQ0=0;OQ=514.85;QD=13.20;SB=-114.69	GT:AD:DP:GL:GQ	0/1:19,20:38:-66.22,-11.45,-76.59:99
-chr1	2823513	rs11587665	C	T	40.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=6.13;MQ=59.14;MQ0=0;OQ=737.31;QD=13.65;SB=-373.35	GT:AD:DP:GL:GQ	0/1:29,25:51:-92.39,-15.38,-90.11:99
-chr1	2823603	rs1563468	T	C	458.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.00;MQ0=0;OQ=947.27;QD=14.14;SB=-372.60	GT:AD:DP:GL:GQ	0/1:28,39:64:-117.31,-19.30,-107.37:99
-chr1	2823870	rs11809099	C	T	295.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.56;MQ0=0;OQ=690.45;QD=13.28;SB=-256.23	GT:AD:DP:GL:GQ	0/1:28,23:49:-87.09,-14.76,-98.54:99
-chr1	2823885	rs2842926	G	A	181.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.53;MQ0=0;OQ=786.09;QD=16.04;SB=-320.86	GT:AD:DP:GL:GQ	0/1:23,26:46:-95.76,-13.86,-71.19:99
-chr1	2825347	rs897633	A	C	527.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=683.77;QD=14.86;SB=-280.84	GT:AD:DP:GL:GQ	0/1:21,25:45:-85.22,-13.56,-75.45:99
-chr1	2825552	rs897634	T	C	95.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1172.99;QD=30.08;SB=-560.88	GT:AD:DP:GL:GQ	1/1:0,39:37:-120.91,-11.16,-0.03:99
-chr1	2825769	rs2606409	A	G	32.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.74;MQ=57.77;MQ0=0;OQ=329.46;QD=7.84;SB=-164.95	GT:AD:DP:GL:GQ	0/1:25,16:40:-48.29,-12.06,-98.69:99
-chr1	2825959	rs2606410	C	T	311.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=59.57;MQ0=0;OQ=951.03;QD=17.61;SB=-434.47	GT:AD:DP:GL:GQ	0/1:25,29:51:-113.75,-15.36,-82.67:99
-chr1	2827304	rs55855166	G	A	337.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=391.24;QD=9.10;SB=-201.88	GT:AD:DP:GL:GQ	0/1:27,16:41:-54.76,-12.35,-93.92:99
-chr1	2828084	rs35844499	A	C	0.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=8.95;MQ=33.58;MQ0=13;OQ=215.00;QD=4.89;SB=-66.98	GT:AD:DP:GL:GQ	0/1:23,20:16:-29.61,-4.82,-23.59:99
-chr1	2831038	.	C	T	212.41	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=614.63;QD=14.29;SB=-239.55	GT:AD:DP:GL:GQ	0/1:23,20:43:-77.70,-12.96,-79.28:99
-chr1	2833249	.	C	T	39.44	LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=56.74;MQ0=0;QD=1.36;SB=-41.03	GT:AD:DP:GL:GQ	0/1:24,4:19:-12.96,-5.74,-47.17:72.28
-chr1	2833472	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=11.49;MQ=58.05;MQ0=0;OQ=54.69;QD=1.52;SB=-45.69	GT:AD:DP:GL:GQ	0/1:28,8:19:-14.49,-5.74,-59.79:87.52
-chr1	2837348	rs2606411	T	C	351.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=583.14;QD=14.58;SB=-128.66	GT:AD:DP:GL:GQ	0/1:14,26:36:-72.45,-10.85,-55.84:99
-chr1	2838116	rs35880479	G	A	202.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=58.64;MQ0=0;OQ=848.27;QD=13.05;SB=-379.33	GT:AD:DP:GL:GQ	0/1:37,28:62:-106.79,-18.68,-116.44:99
-chr1	2844321	rs12120163	C	T	361.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.44;MQ0=0;OQ=1226.99;QD=16.58;SB=-528.52	GT:AD:DP:GL:GQ	0/1:36,38:72:-147.69,-21.70,-111.75:99
-chr1	2849584	rs2842909	C	T	85.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=5.45;MQ=57.20;MQ0=0;OQ=445.80;QD=10.87;SB=-188.84	GT:AD:DP:GL:GQ	0/1:22,19:36:-58.71,-10.85,-74.85:99
-chr1	2850791	rs2925499	C	T	367.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.73;MQ0=0;OQ=1163.55;QD=17.11;SB=-509.17	GT:AD:DP:GL:GQ	0/1:33,35:67:-139.83,-20.19,-105.50:99
-chr1	2856184	.	C	T	37.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=14.17;MQ0=11;QD=1.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,10:4:-8.24,-1.21,-6.09:48.87
-chr1	2856380	rs3010827	T	C	18.54	LowQual	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=21.91;MQ0=3;QD=0.66;SB=-6.99	GT:AD:DP:GL:GQ	0/1:20,8:5:-6.64,-1.51,-11.98:51.31
-chr1	2865080	rs2788089	G	A	618.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2745.57;QD=39.79;SB=-1234.70	GT:AD:DP:GL:GQ	1/1:0,69:69:-278.16,-20.78,-0.02:99
-chr1	2866385	rs10909845	T	C	68.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=1.49;MQ=58.86;MQ0=0;OQ=1786.40;QD=31.34;SB=-680.16	GT:AD:DP:GL:GQ	1/1:0,57:53:-182.25,-15.97,-0.03:99
-chr1	2866462	rs6663830	A	G	10.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=57.19;MQ0=0;OQ=455.20;QD=23.96;SB=-149.73	GT:AD:DP:GL:GQ	1/1:1,18:16:-49.13,-4.83,-0.02:48.09
-chr1	2866480	rs12132266	C	G	0.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=2;HaplotypeScore=2.31;MQ=54.22;MQ0=2;OQ=483.83;QD=32.26;SB=-138.40	GT:AD:DP:GL:GQ	1/1:2,13:12:-51.97,-3.62,-0.01:36.12
-chr1	2866511	rs12129394	G	A	181.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.76;MQ0=0;OQ=82.01;QD=27.34;SB=-47.56	GT:AD:DP:GL:GQ	1/1:0,3:3:-11.69,-0.90,-0.00:9.03
-chr1	2866552	rs11582761	G	A	15.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=47.10;MQ0=0;OQ=87.13;QD=17.43;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,4:3:-12.20,-0.90,-0.00:9.03
-chr1	2868226	rs11583804	G	A	591.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=1019.85;QD=15.45;SB=-422.44	GT:AD:DP:GL:GQ	0/1:35,31:65:-124.85,-19.58,-125.50:99
-chr1	2872997	rs10909848	G	T	338.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=59.67;MQ0=0;OQ=904.50;QD=15.87;SB=-468.05	GT:AD:DP:GL:GQ	0/1:25,32:54:-110.00,-16.27,-78.02:99
-chr1	2873890	.	G	C	11.21	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=4;HaplotypeScore=5.27;MQ=55.45;MQ0=0;QD=0.59;SB=14.08	GT:AD:DP:GL:GQ	0/1:10,9:11:-7.69,-3.32,-38.19:43.71
-chr1	2874116	rs2993507	T	C	16.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=58.76;MQ0=0;OQ=1405.38;QD=31.23;SB=-680.25	GT:AD:DP:GL:GQ	1/1:0,45:40:-144.14,-12.05,-0.01:99
-chr1	2876216	rs2842925	A	G	411.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1144.93;QD=30.13;SB=-502.20	GT:AD:DP:GL:GQ	1/1:0,38:36:-118.11,-10.86,-0.03:99
-chr1	2876326	rs12752801	C	T	372.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.51;MQ0=0;OQ=555.75;QD=11.82;SB=-279.71	GT:AD:DP:GL:GQ	0/1:29,18:46:-72.72,-13.86,-94.69:99
-chr1	2876664	rs1104934	C	T	153.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.11;MQ0=0;OQ=873.37;QD=18.58;SB=-376.40	GT:AD:DP:GL:GQ	0/1:19,28:45:-104.19,-13.57,-58.40:99
-chr1	2876848	rs4072769	G	A	397.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.29;MQ0=0;OQ=569.53;QD=13.56;SB=-264.25	GT:AD:DP:GL:GQ	0/1:22,20:41:-72.60,-12.36,-71.89:99
-chr1	2877278	rs12731895	T	A	88.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.47;MQ0=0;OQ=1142.36;QD=32.64;SB=-433.66	GT:AD:DP:GL:GQ	1/1:0,35:33:-117.84,-9.95,-0.02:99
-chr1	2877329	rs12727338	A	G	1.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=6.87;MQ=57.26;MQ0=0;OQ=1138.52;QD=25.30;SB=-341.40	GT:AD:DP:GL:GQ	1/1:0,45:36:-117.47,-10.86,-0.03:99
-chr1	2877535	rs4648443	G	C	93.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.43;MQ0=0;OQ=1023.89;QD=31.03;SB=-246.78	GT:AD:DP:GL:GQ	1/1:0,33:28:-106.01,-8.47,-0.04:84.26
-chr1	2878321	rs10797371	T	C	561.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1137.37;QD=29.16;SB=-576.99	GT:AD:DP:GL:GQ	1/1:0,39:37:-117.36,-11.16,-0.04:99
-chr1	2878374	rs10797372	A	G	151.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.80;MQ0=0;OQ=958.51;QD=27.39;SB=-485.14	GT:AD:DP:GL:GQ	1/1:0,35:31:-99.47,-9.35,-0.03:93.21
-chr1	2878478	rs57027760	G	T	756.85	Indel	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=16.93;MQ=60.84;MQ0=0;QD=20.46;SB=-136.60	GT:AD:DP:GL:GQ	0/1:7,30:29:-87.69,-8.74,-9.78:10.36
-chr1	2879008	rs56619891	G	A	46.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.68;MQ0=0;OQ=1774.48;QD=38.58;SB=-601.31	GT:AD:DP:GL:GQ	1/1:0,46:45:-181.04,-13.56,-0.01:99
-chr1	2879409	rs2495273	T	A	230.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=58.81;MQ0=0;OQ=1962.54;QD=35.68;SB=-1002.53	GT:AD:DP:GL:GQ	1/1:0,55:54:-199.86,-16.27,-0.02:99
-chr1	2879437	rs12044030	C	T	157.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=58.72;MQ0=0;OQ=1987.31;QD=38.97;SB=-989.84	GT:AD:DP:GL:GQ	1/1:0,51:51:-202.33,-15.37,-0.02:99
-chr1	2880205	rs4648445	G	A	0.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=7.53;MQ=59.36;MQ0=0;OQ=1380.04;QD=38.33;SB=-528.20	GT:AD:DP:GL:GQ	1/1:1,35:35:-141.60,-10.54,-0.01:99
-chr1	2880574	rs4648446	C	T	93.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=58.80;MQ0=0;OQ=2154.57;QD=37.15;SB=-942.74	GT:AD:DP:GL:GQ	1/1:0,58:56:-219.07,-16.88,-0.03:99
-chr1	2880814	rs35060945	G	T	115.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.36;MQ0=0;OQ=1511.10;QD=32.85;SB=-647.26	GT:AD:DP:GL:GQ	1/1:0,46:43:-154.71,-12.95,-0.02:99
-chr1	2880975	rs9661752	C	T	171.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=57.35;MQ0=0;OQ=1967.63;QD=36.44;SB=-881.18	GT:AD:DP:GL:GQ	1/1:0,54:51:-200.37,-15.37,-0.02:99
-chr1	2880988	rs35377179	C	A	115.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=57.03;MQ0=0;OQ=1298.02;QD=29.50;SB=-650.95	GT:AD:DP:GL:GQ	1/1:1,43:37:-133.40,-11.15,-0.01:99
-chr1	2881030	.	C	A	0.40	PASS	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=54.52;MQ0=1;OQ=214.49;QD=8.25;SB=26.09	GT:AD:DP:GL:GQ	0/1:17,8:22:-34.34,-9.60,-47.09:99
-chr1	2881446	rs12046122	C	A	164.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=56.73;MQ0=0;OQ=1555.86;QD=34.57;SB=-803.87	GT:AD:DP:GL:GQ	1/1:0,45:44:-159.18,-13.25,-0.01:99
-chr1	2881573	rs12046158	C	T	78.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1075.02;QD=38.39;SB=-495.01	GT:AD:DP:GL:GQ	1/1:0,28:28:-111.09,-8.43,-0.01:84.27
-chr1	2882784	rs12096719	A	G	679.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;OQ=1529.67;QD=33.99;SB=-756.19	GT:AD:DP:GL:GQ	1/1:0,45:44:-156.57,-13.25,-0.01:99
-chr1	2883117	rs34709641	C	A	0.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=27.00;MQ0=0;OQ=541.23;QD=24.60;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,21:16:-57.72,-4.82,-0.01:48.13
-chr1	2883336	.	T	C	0.07	PASS	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=28.41;MQ0=1;OQ=55.83;QD=2.15;SB=35.13	GT:AD:DP:GL:GQ	0/1:19,7:19:-14.60,-5.73,-55.04:88.67
-chr1	2883474	.	C	T	16.42	PASS	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=19.09;MQ0=3;OQ=91.28;QD=9.13;SB=-10.00	GT:AD:DP:GL:GQ	1/1:6,3:4:-15.26,-3.77,-2.60:11.70
-chr1	2883529	.	A	G	32.82	LowQual	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.58;MQ0=2;QD=4.69;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:2:-6.69,-0.60,-0.00:6.01
-chr1	2883801	.	G	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.62;MQ=34.13;MQ0=1;OQ=549.05;QD=22.88;SB=-205.68	GT:AD:DP:GL:GQ	0/1:3,21:17:-63.31,-5.13,-9.19:40.68
-chr1	2883821	.	C	G	1.10	PASS	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=22.36;MQ0=5;OQ=186.32;QD=8.47;SB=-39.88	GT:AD:DP:GL:GQ	0/1:7,15:10:-24.93,-3.02,-15.34:99
-chr1	2883940	.	C	G	0.08	PASS	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=7.32;MQ=24.85;MQ0=3;OQ=119.37;QD=7.02;SB=-3.99	GT:AD:DP:GL:GQ	0/1:4,13:7:-17.34,-2.12,-7.20:50.86
-chr1	2883991	.	G	A	9.80	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=39.91;MQ0=4;OQ=393.88;QD=7.16;SB=-196.17	GT:AD:DP:GL:GQ	0/1:36,19:38:-54.13,-11.46,-77.08:99
-chr1	2884111	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=5.45;MQ=48.57;MQ0=0;OQ=67.53;QD=1.73;SB=-58.84	GT:AD:DP:GL:GQ	0/1:29,10:26:-17.87,-7.84,-79.49:99
-chr1	2884204	.	C	G	13.82	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=10.52;MQ=37.87;MQ0=5;QD=0.29;SB=17.09	GT:AD:DP:GL:GQ	0/1:44,3:31:-13.69,-9.05,-110.48:46.47
-chr1	2884224	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=7.14;MQ=33.65;MQ0=6;OQ=99.62;QD=2.69;SB=-73.89	GT:AD:DP:GL:GQ	0/1:22,14:21:-19.58,-6.34,-62.85:99
-chr1	2884275	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=8.64;MQ=43.29;MQ0=0;OQ=54.38;QD=1.36;SB=23.10	GT:AD:DP:GL:GQ	0/1:34,6:34:-18.98,-10.26,-119.97:87.22
-chr1	2884325	.	G	C	41.80	PASS	AC=2;AF=1.00;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=49.14;MQ0=0;OQ=1253.36;QD=33.87;SB=-646.42	GT:AD:DP:GL:GQ	1/1:0,37:34:-128.97,-10.28,-0.05:99
-chr1	2885060	rs63721360	G	T	452.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1106.85;QD=29.13;SB=-549.16	GT:AD:DP:GL:GQ	1/1:0,38:32:-114.28,-9.64,-0.01:96.27
-chr1	2885413	rs34183832	C	T	53.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1297.32;QD=37.07;SB=-499.18	GT:AD:DP:GL:GQ	1/1:0,35:34:-133.33,-10.25,-0.01:99
-chr1	2885666	rs12746525	C	T	345.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=771.21;QD=35.05;SB=-307.40	GT:AD:DP:GL:GQ	1/1:0,22:21:-80.72,-6.33,-0.01:63.20
-chr1	2885725	rs12731464	G	A	43.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.36;MQ0=0;OQ=1296.44;QD=36.01;SB=-473.63	GT:AD:DP:GL:GQ	1/1:0,36:34:-133.24,-10.25,-0.01:99
-chr1	2885912	rs12746985	C	T	116.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.54;MQ0=0;OQ=1570.34;QD=38.30;SB=-739.01	GT:AD:DP:GL:GQ	1/1:0,40:40:-160.63,-12.05,-0.01:99
-chr1	2886057	rs12747179	C	G	228.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1558.47;QD=39.96;SB=-692.89	GT:AD:DP:GL:GQ	1/1:0,39:37:-159.45,-11.15,-0.01:99
-chr1	2886368	rs7519674	G	T	104.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=58.92;MQ0=0;OQ=1251.61;QD=32.09;SB=-486.26	GT:AD:DP:GL:GQ	1/1:0,39:37:-128.76,-11.15,-0.02:99
-chr1	2886595	rs7533362	A	G	145.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=2108.67;QD=35.74;SB=-1026.73	GT:AD:DP:GL:GQ	1/1:0,59:59:-214.47,-17.77,-0.02:99
-chr1	2886944	rs10909849	A	G	437.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=1258.82;QD=27.97;SB=-649.76	GT:AD:DP:GL:GQ	1/1:0,45:41:-129.52,-12.37,-0.05:99
-chr1	2886953	rs2788088	G	A	571.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=615.00;QD=13.67;SB=-320.48	GT:AD:DP:GL:GQ	0/1:23,22:41:-77.15,-12.37,-67.43:99
-chr1	2887315	rs3001801	T	C	293.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.55;MQ0=0;OQ=285.37;QD=12.41;SB=-113.63	GT:AD:DP:GL:GQ	0/1:11,12:22:-38.45,-6.63,-44.08:99
-chr1	2887325	rs2495272	A	G	0.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=3;HaplotypeScore=1.25;MQ=56.85;MQ0=0;OQ=451.51;QD=25.08;SB=-251.59	GT:AD:DP:GL:GQ	1/1:0,18:15:-48.75,-4.52,-0.01:45.11
-chr1	2887439	.	A	G	0.37	PASS	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=3.88;MQ=55.21;MQ0=0;OQ=257.68;QD=9.20;SB=-92.00	GT:AD:DP:GL:GQ	0/1:17,11:26:-36.89,-7.84,-61.45:99
-chr1	2887454	.	A	G	0.28	PASS	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=2;HaplotypeScore=5.31;MQ=55.54;MQ0=0;OQ=380.48;QD=12.68;SB=-84.99	GT:AD:DP:GL:GQ	0/1:15,15:27:-49.47,-8.14,-52.46:99
-chr1	2887461	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=56.64;MQ0=0;OQ=82.14;QD=2.65;SB=-24.50	GT:AD:DP:GL:GQ	0/1:26,5:30:-20.54,-9.04,-87.21:99
-chr1	2887469	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=10.99;MQ=56.64;MQ0=0;OQ=56.39;QD=1.82;SB=-10.59	GT:AD:DP:GL:GQ	0/1:26,5:30:-17.96,-9.04,-99.17:89.23
-chr1	2887476	rs61763639	G	A	1.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=10.80;MQ=56.85;MQ0=0;OQ=400.87;QD=12.15;SB=-209.95	GT:AD:DP:GL:GQ	0/1:19,13:29:-55.44,-12.07,-58.42:99
-chr1	2887567	rs61763640	G	C	352.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=547.00;QD=15.63;SB=-239.40	GT:AD:DP:GL:GQ	0/1:19,16:35:-68.53,-10.55,-82.14:99
-chr1	2887764	rs35529252	C	G	80.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.06;MQ=57.39;MQ0=0;OQ=226.67;QD=8.40;SB=2.03	GT:AD:DP:GL:GQ	0/1:18,9:23:-32.89,-6.94,-62.31:99
-chr1	2887828	rs56335850	C	G	110.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=58.45;MQ0=0;OQ=748.06;QD=17.40;SB=-393.99	GT:AD:DP:GL:GQ	0/1:21,22:42:-90.75,-12.66,-91.15:99
-chr1	2888083	rs56195961	C	T	7.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=60.00;MQ0=0;OQ=1112.19;QD=20.22;SB=-391.16	GT:AD:DP:GL:GQ	0/1:22,33:55:-131.08,-16.58,-71.48:99
-chr1	2888354	rs17391563	T	C	531.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=612.67;QD=11.56;SB=-261.21	GT:AD:DP:GL:GQ	0/1:27,26:52:-80.22,-15.67,-108.53:99
-chr1	2888416	rs6681331	C	T	397.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.62;MQ0=0;OQ=831.46;QD=13.63;SB=-416.81	GT:AD:DP:GL:GQ	0/1:34,27:59:-104.22,-17.79,-102.21:99
-chr1	2888820	rs6681741	C	T	399.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=909.46;QD=13.78;SB=-406.91	GT:AD:DP:GL:GQ	0/1:37,29:64:-113.53,-19.30,-110.49:99
-chr1	2889209	rs12043738	C	T	43	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=2.99;MQ=59.70;MQ0=0;OQ=782.92;QD=12.63;SB=-392.82	GT:AD:DP:GL:GQ	0/1:36,26:56:-98.47,-16.89,-96.75:99
-chr1	2889348	rs12046140	T	C	210.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=58.78;MQ0=0;OQ=758.51;QD=11.67;SB=-309.09	GT:AD:DP:GL:GQ	0/1:33,31:62:-97.83,-18.69,-124.67:99
-chr1	2891988	rs1572657	C	T	224.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=58.69;MQ0=0;OQ=1966.14;QD=39.32;SB=-982.30	GT:AD:DP:GL:GQ	1/1:0,50:49:-200.21,-14.76,-0.01:99
-chr1	2893019	rs16823303	A	G	473.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1016.72;QD=15.17;SB=-513.96	GT:AD:DP:GL:GQ	0/1:31,36:67:-125.14,-20.19,-125.83:99
-chr1	2893437	rs4350139	T	C	494.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=627.58;QD=13.35;SB=-219.43	GT:AD:DP:GL:GQ	0/1:23,24:46:-79.90,-13.86,-93.15:99
-chr1	2893916	rs10797373	G	A	257.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.18;MQ=59.61;MQ0=0;OQ=845.53;QD=14.33;SB=-302.29	GT:AD:DP:GL:GQ	0/1:31,28:56:-104.72,-16.88,-95.11:99
-chr1	2895465	rs10909852	T	C	196.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=59.46;MQ0=0;OQ=1273.07;QD=16.32;SB=-516.27	GT:AD:DP:GL:GQ	0/1:36,42:76:-153.48,-22.89,-141.76:99
-chr1	2897295	rs7546695	C	A	472.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.44;MQ0=0;OQ=1069.83;QD=15.97;SB=-543.65	GT:AD:DP:GL:GQ	0/1:30,37:66:-130.15,-19.88,-106.29:99
-chr1	2897527	rs12411019	T	C	97.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.42;MQ0=0;OQ=164.92;QD=5.15;SB=-60.30	GT:AD:DP:GL:GQ	0/1:21,11:29:-28.52,-8.74,-78.99:99
-chr1	2897840	rs58882615	A	T	78.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.81;MQ0=0;OQ=696.78;QD=12.67;SB=-96.85	GT:AD:DP:GL:GQ	0/1:28,27:52:-88.62,-15.66,-107.99:99
-chr1	2897930	rs10909854	A	G	302.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=59.44;MQ0=0;OQ=922.43;QD=11.25;SB=-327.10	GT:AD:DP:GL:GQ	0/1:45,37:81:-119.94,-24.41,-179.92:99
-chr1	2898248	rs10909855	C	T	438.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.39;MQ0=0;OQ=1131.76;QD=16.40;SB=-432.83	GT:AD:DP:GL:GQ	0/1:34,35:68:-136.95,-20.49,-112.64:99
-chr1	2898666	.	G	A	72.98	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=60.00;MQ0=0;OQ=1136.24;QD=18.33;SB=-578.42	GT:AD:DP:GL:GQ	0/1:27,35:58:-134.38,-17.48,-83.03:99
-chr1	2898708	rs56000855	G	T	262.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=393.56;QD=10.09;SB=-213.51	GT:AD:DP:GL:GQ	0/1:23,16:38:-54.09,-11.45,-79.61:99
-chr1	2899110	rs16823315	A	G	251.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.58;MQ=58.82;MQ0=0;OQ=851.48;QD=14.43;SB=-403.32	GT:AD:DP:GL:GQ	0/1:28,31:58:-105.90,-17.47,-115.59:99
-chr1	2899231	rs17391750	G	A	437.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=1161.97;QD=13.51;SB=-467.04	GT:AD:DP:GL:GQ	0/1:50,36:85:-145.10,-25.62,-160.28:99
-chr1	2899576	rs4335321	A	G	105.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.00;MQ0=0;OQ=946.55;QD=13.52;SB=-144.87	GT:AD:DP:GL:GQ	0/1:37,33:68:-118.42,-20.48,-143.93:99
-chr1	2899597	.	A	T	1.69	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.60;MQ=57.30;MQ0=0;OQ=711.73;QD=11.67;SB=-108.79	GT:AD:DP:GL:GQ	0/1:34,27:58:-91.93,-17.47,-124.49:99
-chr1	2899698	.	C	A	3.06	PASS	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=964.27;QD=14.39;SB=-495.28	GT:AD:DP:GL:GQ	0/1:34,33:65:-119.29,-19.58,-112.82:99
-chr1	2899893	.	T	C	127.63	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.77;MQ=59.43;MQ0=0;OQ=700.47;QD=10.61;SB=-280.59	GT:AD:DP:GL:GQ	0/1:36,30:65:-92.92,-19.59,-144.88:99
-chr1	2900185	rs57720952	A	G	235.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.13;MQ0=0;OQ=624.52;QD=11.78;SB=-194.60	GT:AD:DP:GL:GQ	0/1:27,26:53:-81.72,-15.98,-107.90:99
-chr1	2900204	rs58538272	A	G	481.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=755.97;QD=13.50;SB=-350.98	GT:AD:DP:GL:GQ	0/1:26,30:55:-95.46,-16.58,-99.09:99
-chr1	2900256	rs60017523	T	C	269.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.37;MQ0=0;OQ=740.61;QD=11.22;SB=-378.62	GT:AD:DP:GL:GQ	0/1:33,33:62:-96.04,-18.69,-126.33:99
-chr1	2901217	rs58445466	T	C	331.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.93;MQ0=0;OQ=860.37;QD=15.36;SB=-212.50	GT:AD:DP:GL:GQ	0/1:26,30:54:-105.58,-16.26,-101.98:99
-chr1	2901454	rs56337009	G	A	18.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.33;MQ0=1;OQ=975.13;QD=34.83;SB=-240.32	GT:AD:DP:GL:GQ	1/1:2,26:25:-101.11,-7.53,-0.01:75.24
-chr1	2902060	rs12022594	C	T	230.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=53.29;MQ0=0;OQ=1320.21;QD=14.67;SB=-682.37	GT:AD:DP:GL:GQ	0/1:48,42:84:-160.62,-25.31,-148.07:99
-chr1	2902087	rs12059864	C	T	220.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=55.08;MQ0=0;OQ=1120.96;QD=14.95;SB=-477.46	GT:AD:DP:GL:GQ	0/1:41,34:69:-136.16,-20.78,-131.24:99
-chr1	2902707	rs10909856	T	C	237.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.08;MQ0=0;OQ=1121.38;QD=13.04;SB=-473.58	GT:AD:DP:GL:GQ	0/1:47,39:85:-141.02,-25.60,-190.53:99
-chr1	2902862	rs12401989	C	A	536.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=929.32;QD=11.47;SB=-426.42	GT:AD:DP:GL:GQ	0/1:49,32:81:-120.61,-24.40,-176.66:99
-chr1	2903095	rs60435231	A	G	179.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=59.67;MQ0=0;OQ=920.63;QD=13.15;SB=-378.56	GT:AD:DP:GL:GQ	0/1:39,31:70:-116.43,-21.08,-161.00:99
-chr1	2903159	rs59407673	T	C	419.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=752.64;QD=11.07;SB=-260.51	GT:AD:DP:GL:GQ	0/1:41,27:66:-98.43,-19.88,-155.58:99
-chr1	2903756	.	C	T	100.01	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.38;MQ0=0;OQ=1160.57;QD=15.47;SB=-488.46	GT:AD:DP:GL:GQ	0/1:41,34:75:-141.93,-22.59,-152.72:99
-chr1	2903757	.	C	T	97.23	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.38;MQ0=0;OQ=1040.83;QD=14.07;SB=-405.37	GT:AD:DP:GL:GQ	0/1:41,33:72:-129.05,-21.68,-151.62:99
-chr1	2903785	.	C	T	13.14	PASS	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.97;MQ=59.68;MQ0=0;OQ=1201.38;QD=16.69;SB=-623.18	GT:AD:DP:GL:GQ	0/1:36,36:71:-144.81,-21.39,-125.25:99
-chr1	2904148	rs34909435	G	C	261.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.06;MQ0=0;OQ=923.50;QD=16.20;SB=-375.83	GT:AD:DP:GL:GQ	0/1:30,27:56:-112.51,-16.88,-128.89:99
-chr1	2904478	rs34453862	G	T	153.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.73;MQ=59.34;MQ0=0;OQ=843.87;QD=14.80;SB=-424.19	GT:AD:DP:GL:GQ	0/1:29,28:55:-104.24,-16.57,-85.73:99
-chr1	2904922	.	G	A	6.65	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=986.03;QD=18.26;SB=-298.76	GT:AD:DP:GL:GQ	0/1:24,30:53:-117.86,-15.97,-81.07:99
-chr1	2904988	.	G	T	192.75	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.69;MQ0=0;OQ=850.19;QD=14.17;SB=-430.19	GT:AD:DP:GL:GQ	0/1:30,30:56:-105.17,-16.87,-90.14:99
-chr1	2905123	rs12049173	C	A	190.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.62;MQ0=0;OQ=810.47;QD=14.22;SB=-367.40	GT:AD:DP:GL:GQ	0/1:30,27:57:-101.50,-17.17,-107.52:99
-chr1	2905133	rs12046411	G	A	347.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.57;MQ0=0;OQ=1037.17;QD=16.73;SB=-437.83	GT:AD:DP:GL:GQ	0/1:30,32:59:-124.78,-17.78,-92.83:99
-chr1	2905422	rs12049274	C	T	603.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=930.71;QD=16.05;SB=-490.47	GT:AD:DP:GL:GQ	0/1:30,28:58:-113.82,-17.47,-110.72:99
-chr1	2905744	.	G	A	180.07	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=873.90;QD=13.87;SB=-441.80	GT:AD:DP:GL:GQ	0/1:36,27:62:-109.35,-18.68,-126.71:99
-chr1	2905997	rs12239064	T	G	232.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=59.60;MQ0=0;OQ=846.38;QD=14.85;SB=-338.82	GT:AD:DP:GL:GQ	0/1:27,30:56:-104.79,-16.87,-99.38:99
-chr1	2906020	rs12240128	G	A	259.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=59.61;MQ0=0;OQ=950.01;QD=16.10;SB=-410.72	GT:AD:DP:GL:GQ	0/1:30,29:59:-116.06,-17.77,-109.83:99
-chr1	2906205	.	C	T	60.99	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=59.51;MQ0=0;OQ=509.22;QD=13.40;SB=-258.23	GT:AD:DP:GL:GQ	0/1:18,20:34:-64.46,-10.25,-58.74:99
-chr1	2906216	rs59653178	T	C	119.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.26;MQ=59.54;MQ0=0;OQ=444.86;QD=10.85;SB=-210.25	GT:AD:DP:GL:GQ	0/1:22,19:37:-58.92,-11.15,-79.90:99
-chr1	2906318	.	G	C	294.79	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=687.54;QD=14.03;SB=-349.42	GT:AD:DP:GL:GQ	0/1:28,21:48:-86.50,-14.46,-122.06:99
-chr1	2906331	.	T	C	64.13	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=486.38;QD=9.01;SB=-239.89	GT:AD:DP:GL:GQ	0/1:34,20:53:-67.89,-15.97,-133.79:99
-chr1	2906530	rs16823325	A	G	170.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=627.60;QD=14.26;SB=-219.26	GT:AD:DP:GL:GQ	0/1:22,22:44:-79.30,-13.26,-90.47:99
-chr1	2906541	rs57711454	A	G	139.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.54;MQ0=0;OQ=394.78;QD=7.90;SB=-84.54	GT:AD:DP:GL:GQ	0/1:29,20:47:-56.93,-14.17,-116.48:99
-chr1	2906996	rs10909857	T	C	66.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.62;MQ=57.79;MQ0=0;OQ=652.62;QD=12.31;SB=-287.16	GT:AD:DP:GL:GQ	0/1:27,26:51:-83.92,-15.38,-97.87:99
-chr1	2907051	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=17;HaplotypeScore=24.33;MQ=55.91;MQ0=0;OQ=72.31;QD=0.98;SB=54.68	GT:AD:DP:GL:GQ	0/1:56,17:51:-25.89,-15.37,-146.19:99
-chr1	2907237	rs12025260	T	C	432.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.22;MQ0=0;OQ=586.66;QD=11.73;SB=-318.24	GT:AD:DP:GL:GQ	0/1:25,25:46:-75.82,-13.87,-89.45:99
-chr1	2907320	rs10797374	C	G	183.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=56.79;MQ0=0;OQ=866.79;QD=16.35;SB=-401.99	GT:AD:DP:GL:GQ	0/1:26,27:47:-104.13,-14.17,-96.80:99
-chr1	2907323	rs10797375	C	T	107.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.36;MQ0=0;OQ=897.14;QD=16.31;SB=-320.30	GT:AD:DP:GL:GQ	0/1:27,28:53:-108.97,-15.97,-91.39:99
-chr1	2907332	rs10797376	A	G	569.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.97;MQ0=0;OQ=769.31;QD=13.26;SB=-314.20	GT:AD:DP:GL:GQ	0/1:28,30:54:-96.49,-16.28,-97.60:99
-chr1	2907425	rs17389607	C	T	13.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=8.86;MQ=57.83;MQ0=0;OQ=822.69;QD=15.82;SB=-373.37	GT:AD:DP:GL:GQ	0/1:24,28:48:-100.02,-14.47,-70.94:99
-chr1	2907558	rs10909859	C	T	467.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=759.55;QD=17.26;SB=-317.87	GT:AD:DP:GL:GQ	0/1:21,23:40:-91.30,-12.06,-54.32:99
-chr1	2907881	rs56008028	A	G	101.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=60.00;MQ0=0;OQ=314.58;QD=9.83;SB=-73.78	GT:AD:DP:GL:GQ	0/1:16,16:27:-42.88,-8.14,-52.46:99
-chr1	2908045	rs12562237	C	T	38.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=57.73;MQ0=0;OQ=402.69;QD=12.99;SB=-180.26	GT:AD:DP:GL:GQ	0/1:14,17:26:-51.39,-7.84,-42.83:99
-chr1	2908055	rs3924055	G	A	76.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=57.57;MQ0=0;OQ=483.15;QD=16.66;SB=-242.76	GT:AD:DP:GL:GQ	0/1:13,16:26:-59.44,-7.84,-34.72:99
-chr1	2908089	rs16823330	C	T	124.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.14;MQ0=0;OQ=508.46;QD=18.83;SB=-215.91	GT:AD:DP:GL:GQ	0/1:11,16:27:-62.27,-8.14,-34.10:99
-chr1	2908371	.	G	A	74.23	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.57;MQ0=0;OQ=788.94;QD=18.35;SB=-397.93	GT:AD:DP:GL:GQ	0/1:18,24:36:-93.03,-10.85,-43.26:99
-chr1	2908432	.	T	C	8.81	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=56.92;MQ0=0;OQ=358.32;QD=15.58;SB=-114.66	GT:AD:DP:GL:GQ	0/1:9,14:19:-44.84,-5.73,-23.69:99
-chr1	2908471	.	G	A	46.40	LowQual	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.79;MQ=51.77;MQ0=0;QD=1.93;SB=-32.97	GT:AD:DP:GL:GQ	0/1:20,4:22:-14.55,-6.63,-62.87:79.23
-chr1	2908486	.	G	A	26.78	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=53.95;MQ0=0;QD=1.12;SB=-23.58	GT:AD:DP:GL:GQ	0/1:21,3:20:-11.99,-6.02,-60.39:59.60
-chr1	2908487	.	G	A	23.81	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=53.95;MQ0=0;QD=0.99;SB=-23.59	GT:AD:DP:GL:GQ	0/1:21,3:20:-11.69,-6.03,-57.69:56.63
-chr1	2908489	rs7413322	A	G	127.27	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=7.20;MQ=53.67;MQ0=0;QD=5.53;SB=-41.81	GT:AD:DP:GL:GQ	0/1:15,7:21:-22.34,-6.33,-53.28:99
-chr1	2908502	.	G	A	0.58	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.89;MQ=54.56;MQ0=0;OQ=132.59;QD=4.28;SB=-84.55	GT:AD:DP:GL:GQ	0/1:22,9:26:-24.37,-7.83,-71.82:99
-chr1	2908503	.	G	A	2.61	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.89;MQ=54.56;MQ0=0;OQ=189.68;QD=6.12;SB=-101.89	GT:AD:DP:GL:GQ	0/1:22,9:28:-30.69,-8.44,-70.32:99
-chr1	2908532	.	T	C	3.50	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.76;MQ=54.67;MQ0=0;OQ=250.55;QD=6.77;SB=-66.91	GT:AD:DP:GL:GQ	0/1:24,13:35:-38.89,-10.55,-92.28:99
-chr1	2908533	.	G	A	0.93	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=54.15;MQ0=0;OQ=217.08;QD=5.71;SB=-54.22	GT:AD:DP:GL:GQ	0/1:25,13:33:-34.93,-9.94,-84.25:99
-chr1	2908644	.	G	A	90.84	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=55.47;MQ0=0;OQ=799.27;QD=15.67;SB=-377.10	GT:AD:DP:GL:GQ	0/1:25,26:51:-98.58,-15.37,-88.82:99
-chr1	2908650	.	T	C	65.40	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=55.56;MQ0=0;OQ=744.55;QD=14.32;SB=-322.26	GT:AD:DP:GL:GQ	0/1:26,26:52:-93.41,-15.67,-101.68:99
-chr1	2908671	.	T	C	96.67	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=55.57;MQ0=0;OQ=663.38;QD=13.01;SB=-328.92	GT:AD:DP:GL:GQ	0/1:26,25:50:-84.69,-15.07,-101.18:99
-chr1	2908691	rs7524813	A	G	287.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.53;MQ0=0;OQ=655.21;QD=13.10;SB=-352.07	GT:AD:DP:GL:GQ	0/1:22,28:47:-82.98,-14.17,-84.04:99
-chr1	2908767	.	C	T	11.79	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=50.29;MQ0=0;OQ=630.57;QD=18.02;SB=-203.89	GT:AD:DP:GL:GQ	0/1:14,21:32:-75.99,-9.65,-40.87:99
-chr1	2908798	rs7520336	C	T	363.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=53.82;MQ0=0;OQ=459.08;QD=13.12;SB=-219.69	GT:AD:DP:GL:GQ	0/1:20,15:31:-58.54,-9.34,-53.07:99
-chr1	2909329	rs6424067	A	G	0.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=3.24;MQ=54.59;MQ0=0;OQ=434.74;QD=9.88;SB=-243.29	GT:AD:DP:GL:GQ	0/1:26,18:41:-59.12,-12.36,-92.44:99
-chr1	2909490	rs12025062	C	T	390.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.85;MQ0=0;OQ=616.92;QD=11.64;SB=-324.31	GT:AD:DP:GL:GQ	0/1:32,21:52:-80.64,-15.67,-112.78:99
-chr1	2909802	rs12022429	G	A	318.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=605.69;QD=12.36;SB=-271.15	GT:AD:DP:GL:GQ	0/1:27,22:47:-78.02,-14.16,-93.88:99
-chr1	2909879	rs12025167	C	T	200.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=58.32;MQ0=0;OQ=594.51;QD=15.24;SB=-283.81	GT:AD:DP:GL:GQ	0/1:20,19:35:-73.29,-10.56,-48.45:99
-chr1	2909902	rs12022456	G	A	164.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.51;MQ=58.51;MQ0=0;OQ=722.60;QD=16.42;SB=-335.48	GT:AD:DP:GL:GQ	0/1:20,24:41:-87.91,-12.37,-56.64:99
-chr1	2910018	rs16823332	C	T	243.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=942.08;QD=19.23;SB=-418.46	GT:AD:DP:GL:GQ	0/1:20,28:45:-111.06,-13.56,-54.54:99
-chr1	2910291	rs12066017	A	G	366.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=575.67;QD=14.76;SB=-270.53	GT:AD:DP:GL:GQ	0/1:19,20:38:-72.30,-11.45,-69.20:99
-chr1	2911142	.	G	A	41.67	PASS	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.51;MQ=59.36;MQ0=0;OQ=1099.50;QD=16.92;SB=-501.68	GT:AD:DP:GL:GQ	0/1:32,33:61:-131.61,-18.38,-102.89:99
-chr1	2911277	.	C	G	44.53	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.86;MQ=58.95;MQ0=0;OQ=436.44;QD=10.91;SB=-233.06	GT:AD:DP:GL:GQ	0/1:26,14:40:-58.99,-12.06,-109.38:99
-chr1	2911306	.	G	C	234.71	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.10;MQ0=0;OQ=519.44;QD=14.04;SB=-251.08	GT:AD:DP:GL:GQ	0/1:21,16:36:-66.08,-10.85,-90.14:99
-chr1	2911720	rs16823335	G	A	261.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.20;MQ0=0;OQ=681.92;QD=11.76;SB=-297.82	GT:AD:DP:GL:GQ	0/1:33,24:53:-87.45,-15.98,-100.90:99
-chr1	2912187	rs12028094	C	T	355.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.31;MQ0=0;OQ=839.47;QD=15.55;SB=-427.81	GT:AD:DP:GL:GQ	0/1:28,26:51:-102.60,-15.37,-81.01:99
-chr1	2912604	rs10797377	G	A	324.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=59.31;MQ0=0;OQ=1121.19;QD=18.38;SB=-566.38	GT:AD:DP:GL:GQ	0/1:27,34:59:-133.18,-17.78,-89.26:99
-chr1	2913061	.	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=14.44;MQ=58.67;MQ0=0;OQ=1557.84;QD=18.11;SB=-803.34	GT:AD:DP:GL:GQ	0/1:39,47:82:-183.77,-24.70,-131.16:99
-chr1	2913244	rs12063869	T	A	356.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.21;MQ0=0;OQ=1259.24;QD=16.35;SB=-327.01	GT:AD:DP:GL:GQ	0/1:37,40:76:-152.10,-22.89,-141.13:99
-chr1	2913685	.	T	A	78.15	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=72;Dels=0.01;HRun=7;HaplotypeScore=10.99;MQ=58.04;MQ0=0;QD=1.09;SB=89.27	GT:AD:DP:GL:GQ	0/1:54,17:56:-27.67,-16.57,-168.58:99
-chr1	2914586	rs2889476	T	C	86.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.50;MQ0=0;OQ=1018.41;QD=13.58;SB=-348.57	GT:AD:DP:GL:GQ	0/1:38,37:73:-127.11,-21.99,-156.39:99
-chr1	2915216	.	C	A	133.06	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=840.99;QD=15.57;SB=-328.03	GT:AD:DP:GL:GQ	0/1:26,28:54:-103.65,-16.27,-91.36:99
-chr1	2915282	rs946175	A	G	382.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.34;MQ0=0;OQ=951.27;QD=13.59;SB=-404.30	GT:AD:DP:GL:GQ	0/1:37,33:69:-119.20,-20.78,-144.79:99
-chr1	2915357	rs946176	C	T	193.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=60.00;MQ0=0;OQ=877.87;QD=15.14;SB=-352.31	GT:AD:DP:GL:GQ	0/1:30,28:58:-108.55,-17.48,-106.40:99
-chr1	2915382	rs946177	A	G	311.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=696.00;QD=12.21;SB=-254.19	GT:AD:DP:GL:GQ	0/1:29,28:55:-89.46,-16.58,-112.38:99
-chr1	2916239	rs2027262	T	C	443.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=530.92;QD=9.65;SB=-168.92	GT:AD:DP:GL:GQ	0/1:28,27:51:-71.75,-15.38,-111.87:99
-chr1	2916397	rs2027263	A	G	6.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=4.33;MQ=58.92;MQ0=0;OQ=1007.60;QD=17.99;SB=-520.31	GT:AD:DP:GL:GQ	0/1:22,34:54:-120.31,-16.27,-82.47:99
-chr1	2916415	rs2027264	G	A	412.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=890.12;QD=17.45;SB=-464.45	GT:AD:DP:GL:GQ	0/1:23,27:49:-107.06,-14.77,-75.59:99
-chr1	2916645	.	C	T	34.34	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=56.98;MQ0=0;OQ=878.75;QD=16.90;SB=-242.23	GT:AD:DP:GL:GQ	0/1:24,28:50:-106.23,-15.07,-83.70:99
-chr1	2916833	rs11802804	T	G	172.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=53.08;MQ0=1;OQ=929.71;QD=12.91;SB=-466.74	GT:AD:DP:GL:GQ	0/1:38,34:69:-117.04,-20.78,-128.73:99
-chr1	2916871	.	T	G	0.62	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=5.93;MQ=46.04;MQ0=1;OQ=612.93;QD=10.57;SB=-101.87	GT:AD:DP:GL:GQ	0/1:33,25:54:-80.84,-16.27,-108.92:99
-chr1	2916874	.	G	A	4.25	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=45.85;MQ0=1;OQ=812.26;QD=13.32;SB=-234.49	GT:AD:DP:GL:GQ	0/1:33,28:56:-101.38,-16.87,-110.18:99
-chr1	2917035	rs12028439	A	G	6.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=4.28;MQ=54.23;MQ0=0;OQ=1040.90;QD=18.93;SB=-369.97	GT:AD:DP:GL:GQ	0/1:20,35:53:-123.34,-15.97,-76.66:99
-chr1	2917114	rs12024879	G	A	187.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=55.08;MQ0=0;OQ=934.32;QD=17.30;SB=-362.51	GT:AD:DP:GL:GQ	0/1:25,29:52:-112.38,-15.67,-83.45:99
-chr1	2917331	rs12027818	C	T	143.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=58.15;MQ0=1;OQ=1252.97;QD=20.21;SB=-536.07	GT:AD:DP:GL:GQ	0/1:25,37:61:-146.97,-18.38,-79.78:99
-chr1	2917538	rs12027883	C	T	346.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=58.55;MQ0=0;OQ=1081.24;QD=14.42;SB=-345.82	GT:AD:DP:GL:GQ	0/1:42,33:74:-133.70,-22.29,-151.25:99
-chr1	2918836	rs6681651	C	T	64.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=454.13;QD=15.66;SB=-29.51	GT:AD:DP:GL:GQ	0/1:13,16:27:-56.83,-8.14,-47.37:99
-chr1	2921187	rs6691208	C	A	92.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=715.52;QD=11.36;SB=-355.27	GT:AD:DP:GL:GQ	0/1:37,26:61:-93.21,-18.38,-116.36:99
-chr1	2921274	rs4357486	G	C	320.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=59.45;MQ0=0;OQ=673.44;QD=16.03;SB=-361.79	GT:AD:DP:GL:GQ	0/1:20,22:41:-83.00,-12.37,-84.03:99
-chr1	2921300	rs4486390	C	T	182.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=59.45;MQ0=0;OQ=737.41;QD=17.56;SB=-360.43	GT:AD:DP:GL:GQ	0/1:18,24:38:-88.48,-11.46,-48.81:99
-chr1	2922007	rs59869348	T	C	59.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.22;MQ=59.22;MQ0=0;OQ=864.59;QD=16.01;SB=-414.28	GT:AD:DP:GL:GQ	0/1:23,31:52:-105.41,-15.67,-90.49:99
-chr1	2922076	rs59041920	C	T	58.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=4.59;MQ=59.36;MQ0=0;OQ=1222.53;QD=18.81;SB=-446.93	GT:AD:DP:GL:GQ	0/1:26,38:58:-143.01,-17.47,-78.18:99
-chr1	2922420	.	C	T	142.55	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.20;MQ0=0;OQ=828.62;QD=13.81;SB=-355.45	GT:AD:DP:GL:GQ	0/1:34,26:58:-103.62,-17.47,-119.28:99
-chr1	2922927	.	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=3.70;MQ=45.44;MQ0=1;OQ=81.65;QD=2.92;SB=-41.94	GT:AD:DP:GL:GQ	0/1:20,8:20:-17.47,-6.02,-59.35:99
-chr1	2923073	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=21;Dels=0.05;HRun=1;HaplotypeScore=30.97;MQ=45.34;MQ0=0;OQ=111.92;QD=5.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,8:13:-18.39,-3.92,-26.21:99
-chr1	2923110	.	A	C	47.42	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=28.91;MQ=36.30;MQ0=0;QD=3.65;SB=5.05	GT:AD:DP:GL:GQ	0/1:6,4:10:-13.77,-5.74,-26.81:80.25
-chr1	2923762	rs6680573	C	G	6.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=60.00;MQ0=0;OQ=313.93;QD=10.46;SB=-109.66	GT:AD:DP:GL:GQ	0/1:20,10:28:-43.13,-8.46,-67.50:99
-chr1	2924595	rs56200661	C	T	138.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.81;MQ0=0;OQ=702.85;QD=18.02;SB=-315.84	GT:AD:DP:GL:GQ	0/1:17,22:37:-84.72,-11.16,-50.65:99
-chr1	2924706	.	G	A	66.14	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.09;MQ0=0;OQ=681.79;QD=16.63;SB=-295.78	GT:AD:DP:GL:GQ	0/1:19,22:39:-83.22,-11.75,-60.51:99
-chr1	2926246	rs12564456	C	G	10.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=2.61;MQ=58.69;MQ0=0;OQ=646.12;QD=12.92;SB=-206.63	GT:AD:DP:GL:GQ	0/1:26,24:45:-81.49,-13.60,-94.41:99
-chr1	2926340	rs10752732	T	C	133.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=58.78;MQ0=0;OQ=1282.63;QD=33.75;SB=-620.25	GT:AD:DP:GL:GQ	1/1:0,38:38:-131.87,-11.45,-0.02:99
-chr1	2926606	rs55949537	A	T	46.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=59.67;MQ0=0;OQ=1017.41;QD=14.13;SB=-469.52	GT:AD:DP:GL:GQ	0/1:36,35:69:-125.81,-20.79,-130.04:99
-chr1	2926614	rs55784203	G	T	254.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=59.65;MQ0=0;OQ=972.92;QD=14.31;SB=-412.15	GT:AD:DP:GL:GQ	0/1:33,35:66:-120.46,-19.89,-108.03:99
-chr1	2926663	rs56091202	A	G	268.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=59.60;MQ0=0;OQ=738.64;QD=12.74;SB=-307.21	GT:AD:DP:GL:GQ	0/1:29,29:57:-94.32,-17.18,-112.23:99
-chr1	2926891	.	A	G	0.34	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=3.44;MQ=59.42;MQ0=0;OQ=538.71;QD=11.22;SB=-143.63	GT:AD:DP:GL:GQ	0/1:27,21:47:-71.31,-14.16,-109.92:99
-chr1	2927088	rs61266721	G	A	167.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=59.23;MQ0=0;OQ=1016.77;QD=16.95;SB=-453.45	GT:AD:DP:GL:GQ	0/1:30,30:57:-122.14,-17.18,-86.53:99
-chr1	2927410	rs12033927	A	G	358.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.13;MQ0=0;OQ=706.05;QD=14.71;SB=-368.25	GT:AD:DP:GL:GQ	0/1:23,25:48:-88.35,-14.46,-94.54:99
-chr1	2927411	rs12034794	T	G	337.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.15;MQ0=0;OQ=614.57;QD=12.54;SB=-294.80	GT:AD:DP:GL:GQ	0/1:24,25:47:-78.90,-14.16,-89.23:99
-chr1	2928125	rs4576609	C	T	277.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=57.60;MQ0=0;OQ=875.52;QD=14.35;SB=-423.82	GT:AD:DP:GL:GQ	0/1:31,30:59:-108.62,-17.78,-98.44:99
-chr1	2928429	rs35806103	C	T	10.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=59.80;MQ0=0;OQ=886.08;QD=19.69;SB=-315.84	GT:AD:DP:GL:GQ	0/1:17,27:42:-104.54,-12.65,-59.38:99
-chr1	2928557	rs3795262	T	G	88	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.78;MQ0=0;OQ=296.95;QD=7.81;SB=-58.83	GT:AD:DP:GL:GQ	0/1:21,17:33:-42.92,-9.94,-74.02:99
-chr1	2928784	.	T	G	4.50	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.61;MQ=58.98;MQ0=0;OQ=615.11;QD=15.00;SB=-301.85	GT:AD:DP:GL:GQ	0/1:17,24:38:-76.24,-11.45,-59.09:99
-chr1	2929872	rs55873718	A	G	218.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.73;MQ0=0;OQ=845.74;QD=10.07;SB=-404.66	GT:AD:DP:GL:GQ	0/1:48,36:83:-112.88,-25.02,-189.40:99
-chr1	2930858	rs56176404	A	G	226.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.44;MQ0=0;OQ=1022.49;QD=13.82;SB=-491.10	GT:AD:DP:GL:GQ	0/1:38,36:73:-127.52,-21.99,-154.69:99
-chr1	2932289	rs55885250	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.04;HRun=0;HaplotypeScore=32.21;MQ=45.88;MQ0=1;OQ=148.06;QD=1.90;SB=104.37	GT:AD:DP:GL:GQ	0/1:58,16:68:-38.29,-20.20,-216.63:99
-chr1	2932299	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=92;Dels=0.02;HRun=0;HaplotypeScore=97.52;MQ=43.85;MQ0=0;OQ=59.90;QD=0.65;SB=104.31	GT:AD:DP:GL:GQ	0/1:78,12:69:-29.77,-20.49,-208.32:92.74
-chr1	2932325	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=91;Dels=0.02;HRun=1;HaplotypeScore=195.32;MQ=42.40;MQ0=0;OQ=612.63;QD=6.73;SB=-162.19	GT:AD:DP:GL:GQ	0/1:51,38:73:-86.24,-21.70,-183.14:99
-chr1	2932341	.	A	G	250.48	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=1;HaplotypeScore=40.55;MQ=40.81;MQ0=0;QD=2.04;SB=89.32	GT:AD:DP:GL:GQ	0/1:96,27:107:-60.57,-32.24,-364.33:99
-chr1	2932343	.	G	A	487.06	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=123;Dels=0.01;HRun=0;HaplotypeScore=44.00;MQ=40.81;MQ0=0;QD=3.96;SB=58.75	GT:AD:DP:GL:GQ	0/1:99,23:108:-84.22,-32.23,-314.56:99
-chr1	2932349	.	G	A	708.07	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=1;HaplotypeScore=35.72;MQ=40.62;MQ0=0;QD=5.80;SB=89.29	GT:AD:DP:GL:GQ	0/1:95,27:119:-109.94,-35.84,-335.64:99
-chr1	2932354	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=77.99;MQ=40.25;MQ0=0;OQ=691.65;QD=5.49;SB=86.28	GT:AD:DP:GL:GQ	0/1:97,29:123:-109.51,-37.06,-349.27:99
-chr1	2932376	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=2;HaplotypeScore=11.36;MQ=39.42;MQ0=0;OQ=679.31;QD=5.27;SB=92.31	GT:AD:DP:GL:GQ	0/1:96,32:117:-106.47,-35.26,-303.35:99
-chr1	2932379	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=125;Dels=0.01;HRun=1;HaplotypeScore=36.27;MQ=39.15;MQ0=0;OQ=716.76;QD=5.73;SB=92.27	GT:AD:DP:GL:GQ	0/1:94,28:121:-111.11,-36.16,-333.12:99
-chr1	2932387	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=36.67;MQ=38.20;MQ0=0;OQ=140.95;QD=1.25;SB=77.24	GT:AD:DP:GL:GQ	0/1:93,19:101:-47.83,-30.45,-304.67:99
-chr1	2932417	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=80.35;MQ=36.74;MQ0=0;OQ=291.45;QD=2.83;SB=86.26	GT:AD:DP:GL:GQ	0/1:76,27:77:-55.63,-23.21,-217.09:99
-chr1	2932437	.	G	A	14.74	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=80.96;MQ=35.05;MQ0=0;QD=0.16;SB=80.26	GT:AD:DP:GL:GQ	0/1:79,12:67:-24.93,-20.19,-214.14:47.43
-chr1	2932441	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=78.31;MQ=34.28;MQ0=0;OQ=251.61;QD=2.83;SB=77.24	GT:AD:DP:GL:GQ	0/1:70,19:66:-48.33,-19.89,-185.59:99
-chr1	2932450	rs55992205	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=52.98;MQ=32.53;MQ0=0;OQ=616.18;QD=7.16;SB=92.26	GT:AD:DP:GL:GQ	0/1:64,22:76:-87.80,-22.90,-186.06:99
-chr1	2932474	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=98;Dels=0.05;HRun=0;HaplotypeScore=121.87;MQ=31.47;MQ0=0;OQ=770.86;QD=7.87;SB=104.31	GT:AD:DP:GL:GQ	0/1:66,27:80:-104.48,-24.11,-189.46:99
-chr1	2932495	.	A	G	458.76	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=104.10;MQ=35.05;MQ0=0;QD=4.59;SB=98.32	GT:AD:DP:GL:GQ	0/1:77,23:78:-72.67,-23.51,-220.09:99
-chr1	2932498	.	G	A	771.99	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=85.95;MQ=35.28;MQ0=0;QD=8.04;SB=59.63	GT:AD:DP:GL:GQ	0/1:70,26:76:-103.38,-22.90,-174.72:99
-chr1	2932501	.	G	A	15.55	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=78.10;MQ=36.15;MQ0=0;QD=0.16;SB=-7.88	GT:AD:DP:GL:GQ	0/1:82,13:64:-24.12,-19.29,-198.59:48.26
-chr1	2932516	.	A	G	437.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=2;HaplotypeScore=90.55;MQ=38.01;MQ0=0;QD=4.37;SB=68.24	GT:AD:DP:GL:GQ	0/1:78,20:76:-69.30,-22.30,-207.20:99
-chr1	2932519	.	A	G	420.64	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=1;HaplotypeScore=127.72;MQ=37.64;MQ0=1;QD=3.72;SB=86.29	GT:AD:DP:GL:GQ	0/1:90,23:88:-71.87,-26.52,-261.50:99
-chr1	2932522	.	A	G	354.05	SnpCluster	AC=1;AF=0.50;AN=2;DP=116;Dels=0.02;HRun=1;HaplotypeScore=155.74;MQ=37.22;MQ0=2;QD=3.05;SB=-178.30	GT:AD:DP:GL:GQ	0/1:89,24:100:-68.22,-29.53,-308.19:99
-chr1	2932531	.	G	A	40.28	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=127;Dels=0.02;HRun=0;HaplotypeScore=95.96;MQ=37.07;MQ0=3;QD=0.32;SB=-35.75	GT:AD:DP:GL:GQ	0/1:114,11:85:-32.32,-25.01,-255.84:73.11
-chr1	2932543	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=90.42;MQ=36.51;MQ0=3;OQ=448.17;QD=3.59;SB=-29.75	GT:AD:DP:GL:GQ	0/1:94,23:99:-91.60,-43.50,-272.82:99
-chr1	2932549	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=106.24;MQ=36.58;MQ0=3;OQ=776.41;QD=6.81;SB=20.21	GT:AD:DP:GL:GQ	0/1:80,34:91:-108.36,-27.43,-223.52:99
-chr1	2932558	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=87.01;MQ=36.91;MQ0=2;OQ=55.94;QD=0.53;SB=50.16	GT:AD:DP:GL:GQ	0/1:89,16:77:-32.08,-23.20,-238.58:88.78
-chr1	2932594	.	A	G	95.90	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=101;Dels=0.01;HRun=2;HaplotypeScore=79.79;MQ=37.41;MQ0=0;QD=0.95;SB=41.16	GT:AD:DP:GL:GQ	0/1:85,15:78:-36.37,-23.50,-267.93:99
-chr1	2932595	.	G	T	858.77	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.01;HRun=0;HaplotypeScore=92.92;MQ=37.56;MQ0=0;QD=8.67;SB=50.17	GT:AD:DP:GL:GQ	0/1:57,41:82:-113.86,-24.70,-181.24:99
-chr1	2932597	.	A	G	613.75	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=100;Dels=0.01;HRun=2;HaplotypeScore=83.48;MQ=37.85;MQ0=0;QD=6.14;SB=53.19	GT:AD:DP:GL:GQ	0/1:69,29:84:-89.97,-25.31,-224.02:99
-chr1	2932647	.	A	G	424.25	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=36.34;MQ=40.26;MQ0=1;QD=3.82;SB=65.23	GT:AD:DP:GL:GQ	0/1:87,24:95:-74.33,-28.62,-285.65:99
-chr1	2932650	.	G	A	15.47	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=35.26;MQ=39.92;MQ0=1;QD=0.13;SB=83.21	GT:AD:DP:GL:GQ	0/1:106,9:104:-36.16,-31.34,-318.46:48.18
-chr1	2932656	.	G	A	597.61	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=41.23;MQ=39.70;MQ0=1;QD=5.24;SB=83.24	GT:AD:DP:GL:GQ	0/1:85,29:104:-94.39,-31.34,-268.84:99
-chr1	2932671	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=55.64;MQ=38.11;MQ0=1;OQ=790.23;QD=6.17;SB=74.25	GT:AD:DP:GL:GQ	0/1:94,34:113:-116.34,-34.04,-292.03:99
-chr1	2932680	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=32.69;MQ=37.68;MQ0=1;OQ=1237.37;QD=9.67;SB=74.20	GT:AD:DP:GL:GQ	0/1:85,43:122:-163.79,-36.76,-270.86:99
-chr1	2932682	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=26.80;MQ=37.61;MQ0=1;OQ=704.94;QD=5.42;SB=71.27	GT:AD:DP:GL:GQ	0/1:103,27:122:-110.54,-36.77,-411.49:99
-chr1	2932721	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=36.50;MQ=39.93;MQ0=0;OQ=181.45;QD=1.51;SB=92.30	GT:AD:DP:GL:GQ	0/1:93,27:104:-52.76,-31.33,-321.47:99
-chr1	2932727	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=27.86;MQ=40.16;MQ0=0;OQ=588.52;QD=5.35;SB=83.30	GT:AD:DP:GL:GQ	0/1:83,27:109:-94.97,-32.83,-329.92:99
-chr1	2932738	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=39.11;MQ=39.53;MQ0=0;OQ=873.00;QD=7.94;SB=74.25	GT:AD:DP:GL:GQ	0/1:74,36:108:-123.12,-32.54,-289.99:99
-chr1	2932769	.	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=7.13;MQ=40.78;MQ0=0;OQ=619.13;QD=6.59;SB=56.17	GT:AD:DP:GL:GQ	0/1:71,23:91:-92.61,-27.42,-231.77:99
-chr1	2933043	rs7412983	A	C	563.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=861.61;QD=12.67;SB=-438.69	GT:AD:DP:GL:GQ	0/1:37,31:65:-109.02,-19.58,-126.93:99
-chr1	2933258	rs58265521	C	A	261.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.67;MQ0=0;OQ=928.26;QD=16.29;SB=-439.21	GT:AD:DP:GL:GQ	0/1:24,33:53:-112.08,-15.97,-65.68:99
-chr1	2933528	rs60287244	A	G	23.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=7.04;MQ=58.03;MQ0=0;OQ=739.69;QD=12.98;SB=-372.23	GT:AD:DP:GL:GQ	0/1:30,27:55:-93.82,-16.57,-116.71:99
-chr1	2933898	rs12034766	A	G	35.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=1.69;MQ=58.27;MQ0=0;OQ=600.73;QD=11.12;SB=-275.56	GT:AD:DP:GL:GQ	0/1:26,28:51:-78.73,-15.38,-104.98:99
-chr1	2933946	rs12033401	C	T	155.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.82;MQ=57.46;MQ0=0;OQ=525.20;QD=14.19;SB=-282.22	GT:AD:DP:GL:GQ	0/1:16,21:31:-65.15,-9.35,-44.32:99
-chr1	2934531	rs57893585	T	A	124.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.24;MQ0=0;OQ=372.99;QD=15.54;SB=-168.83	GT:AD:DP:GL:GQ	0/1:10,14:21:-46.91,-6.33,-28.06:99
-chr1	2935764	rs12035292	C	T	0.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=43.51;MQ0=2;OQ=248.84;QD=4.70;SB=-149.59	GT:AD:DP:GL:GQ	0/1:30,23:31:-37.51,-9.34,-74.68:99
-chr1	2935800	rs6693975	G	A	0.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.49;MQ=45.50;MQ0=1;OQ=189.85;QD=4.75;SB=-111.56	GT:AD:DP:GL:GQ	0/1:24,16:23:-29.21,-6.94,-45.54:99
-chr1	2935836	rs6693982	G	A	38.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.48;MQ=49.72;MQ0=2;OQ=286.18;QD=6.36;SB=-139.13	GT:AD:DP:GL:GQ	0/1:25,20:29:-40.65,-8.75,-58.79:99
-chr1	2936586	rs12038530	T	A	386.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=538.23;QD=11.21;SB=-193.51	GT:AD:DP:GL:GQ	0/1:29,19:46:-70.96,-13.86,-104.56:99
-chr1	2937616	rs12037307	C	A	453.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=785.06;QD=15.10;SB=-326.01	GT:AD:DP:GL:GQ	0/1:25,27:52:-97.46,-15.67,-88.48:99
-chr1	2937769	rs12039548	T	C	374.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=59.62;MQ0=0;OQ=1018.45;QD=16.97;SB=-485.32	GT:AD:DP:GL:GQ	0/1:25,35:58:-122.60,-17.48,-90.45:99
-chr1	2937880	rs12034573	G	A	539.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=601.18;QD=13.36;SB=-263.26	GT:AD:DP:GL:GQ	0/1:25,20:44:-76.67,-13.27,-77.09:99
-chr1	2938038	rs10909864	T	C	31.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.17;MQ=58.15;MQ0=0;OQ=603.85;QD=12.58;SB=-301.61	GT:AD:DP:GL:GQ	0/1:20,28:44:-76.94,-13.27,-79.42:99
-chr1	2938888	rs1890338	C	T	331.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=59.50;MQ0=0;OQ=622.92;QD=13.54;SB=-315.86	GT:AD:DP:GL:GQ	0/1:22,23:40:-77.64,-12.06,-61.98:99
-chr1	2939215	rs12039132	C	T	18.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=58.67;MQ0=0;OQ=590.59;QD=16.87;SB=-94.60	GT:AD:DP:GL:GQ	0/1:16,19:32:-71.99,-9.65,-41.59:99
-chr1	2939467	rs7514166	G	C	161.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=58.11;MQ0=0;OQ=380.76;QD=10.29;SB=-57.73	GT:AD:DP:GL:GQ	0/1:23,14:34:-51.61,-10.25,-87.39:99
-chr1	2939859	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=9;HaplotypeScore=3.75;MQ=51.46;MQ0=0;OQ=333.21;QD=11.49;SB=-54.83	GT:AD:DP:GL:GQ	0/1:17,12:25:-44.15,-7.55,-58.82:99
-chr1	2939927	rs34408665	T	C	431.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.91;MQ0=0;OQ=752.79;QD=11.76;SB=-348.05	GT:AD:DP:GL:GQ	0/1:32,32:61:-96.95,-18.39,-123.70:99
-chr1	2939954	rs58052947	T	C	258.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=58.84;MQ0=0;OQ=891.02;QD=13.92;SB=-428.88	GT:AD:DP:GL:GQ	0/1:28,36:63:-111.38,-19.00,-108.25:99
-chr1	2940097	rs56398543	G	A	185.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=57.77;MQ0=0;OQ=622.10;QD=14.81;SB=-266.78	GT:AD:DP:GL:GQ	0/1:21,21:40:-77.55,-12.06,-68.06:99
-chr1	2940194	rs6661908	G	A	424.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1140.17;QD=20.00;SB=-442.95	GT:AD:DP:GL:GQ	0/1:24,33:57:-134.47,-17.17,-86.30:99
-chr1	2940230	rs41334845	G	T	113.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=1373.67;QD=21.13;SB=-590.07	GT:AD:DP:GL:GQ	0/1:21,44:63:-159.63,-18.98,-64.63:99
-chr1	2940454	rs6679678	T	C	216.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=522.35;QD=9.16;SB=-250.32	GT:AD:DP:GL:GQ	0/1:31,26:48:-69.99,-14.47,-101.54:99
-chr1	2940732	rs12042403	T	C	312.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=888.06;QD=12.51;SB=-433.91	GT:AD:DP:GL:GQ	0/1:39,32:70:-113.18,-21.09,-157.81:99
-chr1	2940746	rs12041583	A	G	452.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=809.95;QD=12.27;SB=-418.24	GT:AD:DP:GL:GQ	0/1:35,31:63:-103.26,-18.98,-134.35:99
-chr1	2940894	rs12041634	A	T	208.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=886.35;QD=14.77;SB=-371.51	GT:AD:DP:GL:GQ	0/1:30,30:60:-110.00,-18.08,-114.34:99
-chr1	2940901	rs12040299	C	T	487.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=953.57;QD=15.63;SB=-409.79	GT:AD:DP:GL:GQ	0/1:31,30:60:-116.73,-18.09,-97.56:99
-chr1	2941104	rs10489589	T	C	232.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.67;MQ0=0;OQ=498.13;QD=8.90;SB=-202.46	GT:AD:DP:GL:GQ	0/1:33,23:54:-69.37,-16.27,-132.36:99
-chr1	2941207	.	G	A	104.13	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.25;MQ0=0;OQ=904.38;QD=16.15;SB=-378.12	GT:AD:DP:GL:GQ	0/1:27,29:55:-110.29,-16.57,-94.24:99
-chr1	2941209	.	T	C	102.69	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.25;MQ0=0;OQ=663.66;QD=11.85;SB=-280.62	GT:AD:DP:GL:GQ	0/1:26,30:53:-85.63,-15.98,-103.85:99
-chr1	2941371	rs12408197	C	T	428.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=717.16;QD=12.36;SB=-246.23	GT:AD:DP:GL:GQ	0/1:33,25:52:-90.68,-15.68,-91.34:99
-chr1	2941666	.	T	C	142.44	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.70;MQ0=0;OQ=433.61;QD=8.50;SB=-223.24	GT:AD:DP:GL:GQ	0/1:30,21:49:-61.42,-14.77,-117.95:99
-chr1	2941694	rs10489588	G	A	184.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.01;MQ=58.17;MQ0=0;OQ=458.21;QD=8.98;SB=-152.21	GT:AD:DP:GL:GQ	0/1:34,17:47:-63.28,-14.17,-98.47:99
-chr1	2941849	.	C	T	36.18	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=59.44;MQ0=0;OQ=1385.60;QD=18.72;SB=-578.48	GT:AD:DP:GL:GQ	0/1:29,44:70:-162.94,-21.10,-91.88:99
-chr1	2942163	rs2017600	A	C	566.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2376.48;QD=32.55;SB=-930.21	GT:AD:DP:GL:GQ	1/1:0,72:69:-241.26,-20.78,-0.03:99
-chr1	2942474	rs1005471	T	C	5.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=441.09;QD=10.02;SB=-191.58	GT:AD:DP:GL:GQ	0/1:27,17:44:-60.65,-13.26,-106.56:99
-chr1	2942683	rs9660819	C	T	0.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=5.17;MQ=58.20;MQ0=0;OQ=155.13;QD=5.97;SB=-65.81	GT:AD:DP:GL:GQ	0/1:19,7:24:-26.03,-7.23,-63.04:99
-chr1	2942700	rs9661525	T	G	36.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.11;MQ0=0;OQ=126.09;QD=4.85;SB=-19.97	GT:AD:DP:GL:GQ	0/1:19,7:25:-23.42,-7.53,-64.66:99
-chr1	2943003	.	G	A	0.16	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.14;MQ0=0;OQ=556.71;QD=20.62;SB=-180.72	GT:AD:DP:GL:GQ	0/1:10,17:27:-67.10,-8.14,-31.23:99
-chr1	2943693	rs16823392	C	G	180.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.22;MQ=57.09;MQ0=0;OQ=626.82;QD=16.07;SB=-312.19	GT:AD:DP:GL:GQ	0/1:21,18:38:-77.42,-11.46,-83.70:99
-chr1	2943891	.	A	G	12.02	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=54.82;MQ0=0;OQ=422.22;QD=8.28;SB=-205.52	GT:AD:DP:GL:GQ	0/1:33,18:49:-60.27,-14.76,-127.83:99
-chr1	2943911	.	C	T	10.41	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=52.84;MQ0=0;QD=0.25;SB=11.05	GT:AD:DP:GL:GQ	0/1:24,17:24:-11.53,-7.24,-65.03:42.84
-chr1	2943915	.	A	G	396.79	SnpCluster	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=1.74;MQ=53.20;MQ0=0;QD=9.23;SB=-114.71	GT:AD:DP:GL:GQ	0/1:25,18:39:-54.71,-11.75,-89.79:99
-chr1	2943921	.	G	A	412.53	SnpCluster	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.30;MQ0=0;QD=10.31;SB=-110.52	GT:AD:DP:GL:GQ	0/1:23,17:37:-55.69,-11.15,-76.61:99
-chr1	2943983	.	T	C	18.12	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.49;MQ=57.65;MQ0=0;OQ=359.40;QD=9.46;SB=-125.65	GT:AD:DP:GL:GQ	0/1:21,17:36:-50.07,-10.85,-82.05:99
-chr1	2944025	.	C	T	103.45	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.94;MQ0=0;OQ=634.89;QD=13.23;SB=-327.90	GT:AD:DP:GL:GQ	0/1:27,21:45:-80.34,-13.56,-81.81:99
-chr1	2944063	.	C	T	0.51	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=4;HaplotypeScore=2.62;MQ=59.46;MQ0=0;OQ=776.27;QD=15.22;SB=-389.17	GT:AD:DP:GL:GQ	0/1:26,25:47:-95.07,-14.16,-76.30:99
-chr1	2944068	.	G	A	119.57	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=59.46;MQ0=0;OQ=782.48;QD=15.34;SB=-373.90	GT:AD:DP:GL:GQ	0/1:25,26:49:-96.29,-14.76,-89.91:99
-chr1	2944090	.	T	C	3.70	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.56;MQ=59.48;MQ0=0;OQ=656.17;QD=12.38;SB=-215.36	GT:AD:DP:GL:GQ	0/1:27,26:49:-83.67,-14.77,-97.10:99
-chr1	2944157	.	T	C	29.83	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.30;MQ0=0;OQ=936.38;QD=15.61;SB=-205.50	GT:AD:DP:GL:GQ	0/1:27,33:58:-114.40,-17.47,-101.34:99
-chr1	2944208	rs4996810	A	C	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=56.26;MQ0=1;OQ=219.14;QD=3.48;SB=-132.81	GT:AD:DP:GL:GQ	0/1:47,15:56:-42.07,-16.87,-150.42:99
-chr1	2944226	.	G	A	136.97	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.40;MQ0=1;OQ=501.67;QD=8.36;SB=-261.69	GT:AD:DP:GL:GQ	0/1:41,19:55:-70.03,-16.58,-122.86:99
-chr1	2944238	.	T	C	5.54	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=54.51;MQ0=0;OQ=327.91;QD=6.43;SB=-156.50	GT:AD:DP:GL:GQ	0/1:37,14:48:-50.53,-14.46,-136.22:99
-chr1	2944239	.	T	C	1.08	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.23;MQ=54.83;MQ0=0;OQ=279.86;QD=5.18;SB=-104.43	GT:AD:DP:GL:GQ	0/1:40,14:49:-46.04,-14.77,-139.11:99
-chr1	2945018	rs12036378	G	A	163.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.58;MQ0=0;OQ=895.36;QD=16.28;SB=-275.78	GT:AD:DP:GL:GQ	0/1:27,28:53:-108.80,-15.98,-79.65:99
-chr1	2945105	rs55863899	C	G	134.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.52;MQ0=0;OQ=868.77;QD=18.10;SB=-284.96	GT:AD:DP:GL:GQ	0/1:21,27:46:-104.04,-13.88,-85.12:99
-chr1	2945790	.	A	G	4.08	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=57.28;MQ0=0;OQ=318.97;QD=15.19;SB=-83.80	GT:AD:DP:GL:GQ	0/1:8,13:20:-41.21,-6.03,-32.48:99
-chr1	2946023	rs10909865	A	G	147.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.15;MQ=60.00;MQ0=0;OQ=547.73;QD=10.74;SB=-195.64	GT:AD:DP:GL:GQ	0/1:24,27:47:-72.23,-14.17,-93.16:99
-chr1	2946442	.	A	G	66.31	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=798.37;QD=10.79;SB=-385.01	GT:AD:DP:GL:GQ	0/1:39,35:70:-104.22,-21.10,-152.02:99
-chr1	2946526	rs2993510	T	C	256.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.44;MQ0=0;OQ=807.53;QD=9.73;SB=-328.89	GT:AD:DP:GL:GQ	0/1:47,36:81:-108.45,-24.41,-191.18:99
-chr1	2946859	rs12567620	T	G	251.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.22;MQ0=0;OQ=588.28;QD=9.97;SB=-221.33	GT:AD:DP:GL:GQ	0/1:35,23:57:-79.28,-17.17,-127.60:99
-chr1	2947460	rs12409277	T	C	554.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1261.63;QD=14.67;SB=-598.55	GT:AD:DP:GL:GQ	0/1:39,47:86:-155.36,-25.92,-158.90:99
-chr1	2948421	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=83;Dels=0.02;HRun=17;HaplotypeScore=13.52;MQ=50.26;MQ0=0;OQ=57.24;QD=0.69;SB=67.75	GT:AD:DP:GL:GQ	0/1:69,12:60:-26.49,-17.48,-170.55:90.07
-chr1	2948568	rs12044162	A	G	115.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.63;MQ0=0;OQ=498.67;QD=9.23;SB=-105.58	GT:AD:DP:GL:GQ	0/1:33,21:52:-68.82,-15.67,-126.86:99
-chr1	2949062	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=21.05;MQ=49.42;MQ0=0;OQ=103.70;QD=2.53;SB=-31.97	GT:AD:DP:GL:GQ	0/1:35,6:34:-23.91,-10.25,-88.62:99
-chr1	2949076	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=103.01;MQ=49.60;MQ0=0;OQ=345.15;QD=7.50;SB=-146.53	GT:AD:DP:GL:GQ	0/1:33,13:40:-49.87,-12.07,-111.45:99
-chr1	2949080	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=47.15;MQ=49.74;MQ0=0;OQ=115.37;QD=2.35;SB=-79.50	GT:AD:DP:GL:GQ	0/1:37,11:45:-31.37,-16.54,-140.93:99
-chr1	2949088	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=39.37;MQ=50.39;MQ0=0;OQ=395.27;QD=7.60;SB=-176.85	GT:AD:DP:GL:GQ	0/1:38,14:46:-56.68,-13.87,-100.52:99
-chr1	2949107	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.13;MQ=51.92;MQ0=0;OQ=58.43;QD=0.96;SB=-33.78	GT:AD:DP:GL:GQ	0/1:53,8:55:-25.70,-16.57,-188.08:91.26
-chr1	2949470	rs6692292	T	C	310.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=58.36;MQ0=0;OQ=1146.89;QD=15.93;SB=-322.30	GT:AD:DP:GL:GQ	0/1:33,39:71:-139.36,-21.39,-132.11:99
-chr1	2949881	rs56213325	G	A	8.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=3.87;MQ=58.97;MQ0=0;OQ=1032.99;QD=16.40;SB=-387.12	GT:AD:DP:GL:GQ	0/1:30,33:61:-124.96,-18.37,-109.42:99
-chr1	2950052	rs12045368	A	G	278.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=53.32;MQ0=0;OQ=936.38;QD=14.41;SB=-275.26	GT:AD:DP:GL:GQ	0/1:28,37:62:-115.61,-18.69,-106.66:99
-chr1	2950232	rs10909866	C	T	182.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.68;MQ0=0;OQ=969.99;QD=15.90;SB=-309.81	GT:AD:DP:GL:GQ	0/1:32,29:61:-118.67,-18.38,-109.12:99
-chr1	2950468	rs12046233	A	G	39.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.71;MQ=59.23;MQ0=0;OQ=754.54;QD=12.58;SB=-279.44	GT:AD:DP:GL:GQ	0/1:30,30:55:-95.31,-16.57,-110.00:99
-chr1	2950650	rs12044848	C	T	194.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.52;MQ0=0;OQ=784.81;QD=16.35;SB=-285.29	GT:AD:DP:GL:GQ	0/1:24,24:47:-95.92,-14.16,-84.23:99
-chr1	2950883	.	C	A	3.38	PASS	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=60.00;MQ0=0;OQ=1395.15;QD=16.81;SB=-283.26	GT:AD:DP:GL:GQ	0/1:36,46:82:-170.17,-27.37,-127.09:99
-chr1	2951230	rs56088946	T	C	7.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.61;MQ0=0;OQ=1944.95;QD=16.34;SB=-964.49	GT:AD:DP:GL:GQ	0/1:53,66:118:-233.32,-35.54,-213.54:99
-chr1	2951262	rs10909867	G	T	333.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.76;MQ0=0;OQ=1581.91;QD=16.48;SB=-612.08	GT:AD:DP:GL:GQ	0/1:44,52:95:-190.09,-28.61,-155.75:99
-chr1	2952067	rs10909868	A	C	183.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=60.00;MQ0=0;OQ=929.11;QD=14.75;SB=-149.21	GT:AD:DP:GL:GQ	0/1:29,34:62:-114.87,-18.67,-108.28:99
-chr1	2952085	rs12048975	T	C	158.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=956.32;QD=14.94;SB=-180.58	GT:AD:DP:GL:GQ	0/1:30,34:62:-117.59,-18.68,-121.18:99
-chr1	2952452	rs2981859	G	A	525.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2597.04;QD=39.95;SB=-874.18	GT:AD:DP:GL:GQ	1/1:0,65:65:-263.30,-19.58,-0.02:99
-chr1	2953353	rs7339938	G	C	184.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1644.05;QD=21.35;SB=-832.89	GT:AD:DP:GL:GQ	0/1:34,43:75:-190.30,-22.61,-128.08:99
-chr1	2954257	rs12044831	A	C	328.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.75;MQ0=0;OQ=969.03;QD=12.75;SB=-480.26	GT:AD:DP:GL:GQ	0/1:35,41:74:-122.48,-22.29,-132.71:99
-chr1	2956899	rs2993479	A	T	39.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.90;MQ=58.88;MQ0=0;OQ=639.75;QD=11.85;SB=-334.02	GT:AD:DP:GL:GQ	0/1:32,22:53:-83.22,-15.96,-119.83:99
-chr1	2958839	.	C	T	167.01	PASS	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.03;MQ0=0;OQ=1118.18;QD=16.69;SB=-463.99	GT:AD:DP:GL:GQ	0/1:31,36:62:-133.80,-18.70,-86.01:99
-chr1	2958843	.	G	C	98.75	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=58.98;MQ0=0;OQ=1122.63;QD=17.54;SB=-409.32	GT:AD:DP:GL:GQ	0/1:29,34:58:-133.03,-17.49,-113.54:99
-chr1	2960143	rs56298939	A	T	308.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.67;MQ0=0;OQ=788.46;QD=14.08;SB=-295.64	GT:AD:DP:GL:GQ	0/1:29,27:56:-99.00,-16.87,-109.64:99
-chr1	2960324	rs717795	T	C	9.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=2.74;MQ=59.13;MQ0=0;OQ=443.35;QD=8.37;SB=-240.88	GT:AD:DP:GL:GQ	0/1:32,21:49:-62.39,-14.77,-120.82:99
-chr1	2961312	rs56069604	T	C	18.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.73;MQ=58.64;MQ0=0;OQ=450.45;QD=14.53;SB=-212.67	GT:AD:DP:GL:GQ	0/1:13,18:29:-57.07,-8.74,-51.18:99
-chr1	2961381	rs2981857	T	C	166.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=60.00;MQ0=0;OQ=428.10;QD=15.29;SB=-207.68	GT:AD:DP:GL:GQ	0/1:10,18:28:-54.54,-8.45,-38.77:99
-chr1	2962384	rs2981856	T	C	282.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=862.73;QD=12.32;SB=-362.96	GT:AD:DP:GL:GQ	0/1:34,36:67:-109.75,-20.19,-134.76:99
-chr1	2963182	rs2993480	C	T	393.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=959.18;QD=15.72;SB=-400.92	GT:AD:DP:GL:GQ	0/1:31,30:60:-117.29,-18.09,-96.43:99
-chr1	2963293	rs2993481	A	T	141.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.01;MQ=59.62;MQ0=0;OQ=743.23;QD=12.39;SB=-349.56	GT:AD:DP:GL:GQ	0/1:34,26:58:-95.08,-17.48,-119.69:99
-chr1	2963436	rs1109251	G	A	197.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=1.34;MQ=60.00;MQ0=0;OQ=932.59;QD=15.04;SB=-469.42	GT:AD:DP:GL:GQ	0/1:34,28:62:-115.22,-18.68,-120.45:99
-chr1	2963924	.	A	G	132.32	PASS	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.54;MQ0=0;OQ=1229.61;QD=13.51;SB=-579.93	GT:AD:DP:GL:GQ	0/1:47,44:90:-153.35,-27.11,-189.83:99
-chr1	2964602	rs1125017	A	C	413.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=773.70;QD=11.90;SB=-364.77	GT:AD:DP:GL:GQ	0/1:35,30:63:-99.63,-18.98,-121.64:99
-chr1	2964712	rs2376821	T	C	458.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2329.60;QD=30.25;SB=-1071.67	GT:AD:DP:GL:GQ	1/1:0,77:75:-236.63,-22.63,-0.08:99
-chr1	2964979	rs55775305	C	G	191.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.60;MQ0=0;OQ=1095.41;QD=18.89;SB=-526.68	GT:AD:DP:GL:GQ	0/1:27,31:56:-129.70,-16.87,-112.36:99
-chr1	2966676	rs1138513	T	C	342.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=60.00;MQ0=0;OQ=1004.23;QD=15.45;SB=-395.31	GT:AD:DP:GL:GQ	0/1:29,36:64:-122.99,-19.29,-112.84:99
-chr1	2967377	rs2981855	A	G	110.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.78;MQ0=0;OQ=2017.68;QD=35.40;SB=-766.96	GT:AD:DP:GL:GQ	1/1:0,57:57:-205.37,-17.17,-0.02:99
-chr1	2967903	rs2075969	G	C	175.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.42;MQ0=0;OQ=486.84;QD=12.17;SB=-253.09	GT:AD:DP:GL:GQ	0/1:21,19:36:-62.83,-10.86,-80.92:99
-chr1	2969034	rs41315262	C	T	141.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=432.24;QD=14.90;SB=-163.20	GT:AD:DP:GL:GQ	0/1:14,15:28:-54.95,-8.44,-49.21:99
-chr1	2970137	rs2072732	T	C	36.95	LowQual	AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.39;MQ0=0;QD=4.11;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,4:7:-9.09,-2.11,-16.67:69.79
-chr1	2970438	.	C	T	1.69	PASS	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=3.02;MQ=60.00;MQ0=0;OQ=106.79;QD=5.62;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,5:16:-18.78,-4.82,-35.96:99
-chr1	2973178	rs2788091	T	C	354.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.56;MQ0=0;OQ=657.96;QD=12.65;SB=-286.58	GT:AD:DP:GL:GQ	0/1:29,23:52:-84.74,-15.66,-115.27:99
-chr1	2973823	rs2297828	G	A	18.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=95.21;QD=3.97;SB=-16.50	GT:AD:DP:GL:GQ	0/1:18,6:22:-19.43,-6.63,-57.66:99
-chr1	2975672	.	C	G	0.31	PASS	AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=6.00;MQ=60.00;MQ0=0;OQ=69.47;QD=7.72;SB=-10.00	GT:AD:DP:GL:GQ	1/1:3,6:3:-10.44,-0.91,-0.01:9.02
-chr1	2977743	rs909510	G	C	79.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.73;MQ0=0;OQ=593.38;QD=17.98;SB=-309.99	GT:AD:DP:GL:GQ	0/1:15,18:31:-71.97,-9.35,-58.08:99
-chr1	2979403	rs1572656	T	G	132.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.39;MQ0=0;OQ=227.87;QD=7.86;SB=-74.87	GT:AD:DP:GL:GQ	0/1:16,12:27:-34.21,-8.14,-59.65:99
-chr1	2982894	rs2981889	T	C	0.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=3.40;MQ=59.07;MQ0=0;OQ=530.79;QD=10.62;SB=-197.61	GT:AD:DP:GL:GQ	0/1:25,25:44:-69.63,-13.27,-84.86:99
-chr1	2983498	rs2993486	G	A	189.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.11;MQ0=0;OQ=2009.66;QD=38.65;SB=-804.34	GT:AD:DP:GL:GQ	1/1:0,52:51:-204.56,-15.36,-0.01:99
-chr1	2983667	rs2981888	C	G	249.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=760.63;QD=16.54;SB=-378.87	GT:AD:DP:GL:GQ	0/1:20,26:44:-92.63,-13.28,-85.11:99
-chr1	2984196	rs4648359	G	C	304.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=59.62;MQ0=0;OQ=739.36;QD=15.09;SB=-327.39	GT:AD:DP:GL:GQ	0/1:26,23:45:-90.79,-13.57,-98.24:99
-chr1	2984400	rs2788092	C	G	25.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.57;MQ0=0;OQ=997.66;QD=18.48;SB=-280.54	GT:AD:DP:GL:GQ	0/1:23,31:51:-118.43,-15.38,-97.87:99
-chr1	2985122	rs2742689	T	G	341.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.79;MQ0=0;OQ=737.00;QD=13.65;SB=-353.07	GT:AD:DP:GL:GQ	0/1:26,28:52:-92.65,-15.66,-91.92:99
-chr1	2985309	rs7515436	G	A	254.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.36;MQ0=0;OQ=1107.59;QD=17.04;SB=-525.74	GT:AD:DP:GL:GQ	0/1:30,35:61:-132.42,-18.38,-99.41:99
-chr1	2985493	rs2788093	C	T	164.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=52.54;MQ0=0;OQ=672.12;QD=14.61;SB=-188.18	GT:AD:DP:GL:GQ	0/1:25,21:45:-84.06,-13.57,-76.74:99
-chr1	2985947	.	G	A	42.58	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=59.42;MQ0=0;QD=1.06;SB=86.29	GT:AD:DP:GL:GQ	0/1:35,5:38:-18.99,-11.45,-122.25:75.41
-chr1	2986056	rs7525173	C	G	198.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=57.11;MQ0=0;OQ=1235.82;QD=21.68;SB=-610.55	GT:AD:DP:GL:GQ	0/1:22,35:54:-143.14,-16.27,-91.10:99
-chr1	2986416	rs1569420	C	G	131.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.22;MQ0=0;OQ=1047.24;QD=19.39;SB=-356.09	GT:AD:DP:GL:GQ	0/1:24,30:53:-123.98,-15.97,-102.98:99
-chr1	2986462	rs1569419	T	C	443.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1686.91;QD=29.59;SB=-810.28	GT:AD:DP:GL:GQ	1/1:0,57:54:-172.33,-16.29,-0.05:99
-chr1	2988794	rs2742686	T	C	110.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.81;MQ=59.55;MQ0=0;OQ=633.23;QD=12.42;SB=-265.98	GT:AD:DP:GL:GQ	0/1:26,25:48:-81.08,-14.47,-95.70:99
-chr1	2988858	rs10909873	C	G	203.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.25;MQ=59.51;MQ0=0;OQ=629.03;QD=13.38;SB=-304.03	GT:AD:DP:GL:GQ	0/1:24,23:43:-79.16,-12.98,-98.92:99
-chr1	2988928	rs2981886	T	G	27.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=713.08;QD=17.39;SB=-342.06	GT:AD:DP:GL:GQ	0/1:16,25:41:-86.94,-12.35,-58.67:99
-chr1	2989062	rs2742685	T	C	91.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=59.38;MQ0=0;OQ=332.13;QD=8.98;SB=-168.61	GT:AD:DP:GL:GQ	0/1:21,16:36:-47.35,-10.86,-77.27:99
-chr1	2989275	rs760570	T	C	183.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=60.00;MQ0=0;OQ=452.99;QD=11.62;SB=-195.61	GT:AD:DP:GL:GQ	0/1:18,21:37:-59.74,-11.16,-71.21:99
-chr1	2989352	rs11580403	C	T	17.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=6.35;MQ=58.51;MQ0=0;OQ=786.31;QD=16.73;SB=-390.18	GT:AD:DP:GL:GQ	0/1:22,25:44:-95.18,-13.26,-64.65:99
-chr1	2989378	rs11581212	A	G	26.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=4.12;MQ=58.01;MQ0=0;OQ=610.70;QD=12.99;SB=-220.27	GT:AD:DP:GL:GQ	0/1:23,24:41:-76.70,-12.35,-80.42:99
-chr1	2989575	rs6674036	G	T	86.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=295.75;QD=8.45;SB=-112.67	GT:AD:DP:GL:GQ	0/1:22,13:32:-42.50,-9.64,-70.40:99
-chr1	2989750	rs6683976	C	G	152.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=58.25;MQ0=0;OQ=588.86;QD=14.72;SB=-197.30	GT:AD:DP:GL:GQ	0/1:21,19:38:-73.63,-11.46,-80.42:99
-chr1	2989984	rs760569	A	G	0.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=3;HaplotypeScore=3.04;MQ=55.35;MQ0=1;OQ=203.26;QD=6.78;SB=-13.61	GT:AD:DP:GL:GQ	0/1:16,14:25:-31.15,-7.54,-61.01:99
-chr1	2990301	rs760568	A	G	305.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=56.76;MQ0=0;OQ=713.37;QD=13.99;SB=-336.34	GT:AD:DP:GL:GQ	0/1:22,29:50:-89.69,-15.07,-88.33:99
-chr1	2990325	rs760567	A	G	357.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=57.34;MQ0=0;OQ=769.95;QD=14.53;SB=-388.67	GT:AD:DP:GL:GQ	0/1:25,28:52:-95.94,-15.67,-100.59:99
-chr1	2990784	rs6695131	T	C	278.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.69;MQ0=0;OQ=1038.17;QD=17.02;SB=-324.30	GT:AD:DP:GL:GQ	0/1:25,36:59:-124.87,-17.77,-99.97:99
-chr1	2991113	rs760566	T	C	528.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1563.77;QD=31.91;SB=-755.58	GT:AD:DP:GL:GQ	1/1:0,49:46:-159.99,-13.86,-0.02:99
-chr1	2991563	rs6690540	C	T	182.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=58.34;MQ0=0;OQ=662.57;QD=14.72;SB=-343.52	GT:AD:DP:GL:GQ	0/1:23,22:42:-82.21,-12.67,-65.85:99
-chr1	2991617	rs2742682	T	C	232.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.38;MQ0=0;OQ=410.76;QD=11.10;SB=-215.29	GT:AD:DP:GL:GQ	0/1:16,19:33:-54.32,-9.96,-57.14:99
-chr1	2991708	rs2742681	T	G	14.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=58.98;MQ0=0;OQ=365.17;QD=8.91;SB=-102.16	GT:AD:DP:GL:GQ	0/1:24,17:38:-51.25,-11.45,-78.22:99
-chr1	2992174	rs2742680	C	G	300.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=58.66;MQ0=0;OQ=934.85;QD=17.98;SB=-447.39	GT:AD:DP:GL:GQ	0/1:22,30:49:-111.56,-14.79,-83.87:99
-chr1	2992195	rs2742679	C	T	269.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=58.13;MQ0=0;OQ=860.87;QD=17.22;SB=-384.13	GT:AD:DP:GL:GQ	0/1:23,27:48:-103.84,-14.47,-74.36:99
-chr1	2992210	rs2742678	G	A	296.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=57.39;MQ0=0;OQ=701.27;QD=15.58;SB=-336.35	GT:AD:DP:GL:GQ	0/1:23,22:43:-86.37,-12.96,-74.58:99
-chr1	2993392	rs11801109	G	A	5.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.59;MQ0=0;OQ=759.83;QD=16.52;SB=-91.91	GT:AD:DP:GL:GQ	0/1:23,23:45:-92.82,-13.56,-77.23:99
-chr1	2993874	rs2981883	T	C	12.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=58.95;MQ0=0;OQ=1316.25;QD=29.91;SB=-475.45	GT:AD:DP:GL:GQ	1/1:0,44:39:-135.23,-11.75,-0.02:99
-chr1	2994092	rs2981882	A	G	168.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.63;MQ0=0;OQ=1897.54;QD=30.61;SB=-828.34	GT:AD:DP:GL:GQ	1/1:0,62:61:-193.40,-18.40,-0.06:99
-chr1	2994217	rs2981881	T	C	270.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=58.88;MQ0=0;OQ=1946.57;QD=31.40;SB=-838.62	GT:AD:DP:GL:GQ	1/1:1,61:56:-198.26,-16.87,-0.02:99
-chr1	2994648	rs2981880	T	C	6.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.30;MQ=56.36;MQ0=0;OQ=1597.03;QD=34.72;SB=-433.18	GT:AD:DP:GL:GQ	1/1:0,45:44:-163.30,-13.25,-0.01:99
-chr1	2994734	rs2981879	T	C	43.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.75;MQ0=0;OQ=1057.22;QD=35.24;SB=-208.08	GT:AD:DP:GL:GQ	1/1:0,30:30:-109.32,-9.04,-0.01:90.26
-chr1	2994945	rs34014659	G	A	271.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.59;MQ0=1;OQ=187.11;QD=9.85;SB=-73.30	GT:AD:DP:GL:GQ	0/1:11,8:17:-27.12,-5.12,-33.00:99
-chr1	2995445	rs2981878	A	G	132.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=56.06;MQ0=1;OQ=382.82;QD=11.96;SB=-131.28	GT:AD:DP:GL:GQ	0/1:16,16:31:-50.91,-9.34,-62.42:99
-chr1	2995487	rs6676479	G	A	196.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=57.97;MQ0=1;OQ=534.41;QD=14.06;SB=-244.76	GT:AD:DP:GL:GQ	0/1:21,17:34:-66.98,-10.25,-53.48:99
-chr1	2995498	rs34884268	C	T	260.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=626.01;QD=14.90;SB=-317.32	GT:AD:DP:GL:GQ	0/1:22,20:41:-78.24,-12.36,-68.94:99
-chr1	2995610	rs34782467	G	A	183.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=857.05;QD=16.48;SB=-325.85	GT:AD:DP:GL:GQ	0/1:26,26:50:-104.07,-15.08,-74.92:99
-chr1	2995991	rs926246	T	C	314.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=57.39;MQ0=0;OQ=671.24;QD=12.43;SB=-260.51	GT:AD:DP:GL:GQ	0/1:30,24:53:-86.37,-15.96,-115.93:99
-chr1	2996058	rs926245	C	A	105.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=53.36;MQ0=0;OQ=705.06;QD=12.82;SB=-99.80	GT:AD:DP:GL:GQ	0/1:29,26:52:-89.45,-15.66,-93.51:99
-chr1	2996143	rs926244	A	G	215.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=58.61;MQ0=0;OQ=1978.79;QD=31.92;SB=-947.90	GT:AD:DP:GL:GQ	1/1:0,60:58:-201.49,-17.47,-0.03:99
-chr1	2996175	rs926243	T	G	426.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=690.75;QD=11.32;SB=-265.78	GT:AD:DP:GL:GQ	0/1:31,30:58:-89.83,-17.48,-108.47:99
-chr1	2996487	rs55932943	C	T	3.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=10.54;MQ=58.03;MQ0=1;OQ=1021.25;QD=14.80;SB=-443.45	GT:AD:DP:GL:GQ	0/1:37,31:63:-124.40,-18.99,-104.76:99
-chr1	2996899	rs2817165	A	G	93.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.80;MQ0=0;OQ=288.71;QD=8.25;SB=-166.95	GT:AD:DP:GL:GQ	0/1:21,13:29:-40.90,-8.74,-67.04:99
-chr1	2997535	rs34300623	G	A	185.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.69;MQ0=0;OQ=968.84;QD=15.88;SB=-326.31	GT:AD:DP:GL:GQ	0/1:32,29:60:-118.25,-18.08,-106.92:99
-chr1	2997956	rs6693385	C	T	247.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=59.55;MQ0=0;OQ=876.50;QD=17.19;SB=-364.90	GT:AD:DP:GL:GQ	0/1:22,29:45:-104.50,-13.57,-57.88:99
-chr1	2998547	rs2376820	C	G	2318.28	Indel	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=17.39;MQ=51.50;MQ0=0;QD=40.67;SB=-1149.31	GT:AD:DP:GL:GQ	1/1:0,55:56:-238.28,-19.61,-2.86:99
-chr1	3000177	rs760565	A	T	219.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=60.00;MQ0=0;OQ=708.84;QD=15.75;SB=-333.07	GT:AD:DP:GL:GQ	0/1:21,24:41:-86.52,-12.35,-66.91:99
-chr1	3001189	rs2981873	T	C	24.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=57.66;MQ0=0;OQ=381.92;QD=12.73;SB=-154.31	GT:AD:DP:GL:GQ	0/1:16,14:30:-50.52,-9.04,-62.50:99
-chr1	3002186	rs12135325	T	C	1.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.32;MQ=58.67;MQ0=0;OQ=210.96;QD=6.03;SB=-111.21	GT:AD:DP:GL:GQ	0/1:22,13:32:-34.02,-9.64,-84.87:99
-chr1	3002840	rs6666748	A	G	255.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=60.00;MQ0=0;OQ=801.41;QD=14.84;SB=-400.31	GT:AD:DP:GL:GQ	0/1:21,33:50:-98.50,-15.08,-74.39:99
-chr1	3003005	rs2788097	A	C	59.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=59.05;MQ0=0;OQ=463.07;QD=10.52;SB=-200.91	GT:AD:DP:GL:GQ	0/1:25,19:39:-61.34,-11.75,-74.66:99
-chr1	3005383	rs2981870	G	A	337.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.45;MQ0=0;OQ=532.89;QD=12.69;SB=-258.26	GT:AD:DP:GL:GQ	0/1:23,19:40:-68.63,-12.06,-71.78:99
-chr1	3005452	rs55674255	C	T	63.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.20;MQ=60.00;MQ0=0;OQ=640.76;QD=14.56;SB=-293.19	GT:AD:DP:GL:GQ	0/1:24,20:44:-80.62,-13.26,-82.30:99
-chr1	3005702	rs55784774	G	A	50.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.79;MQ=59.56;MQ0=0;OQ=701.05;QD=13.23;SB=-358.53	GT:AD:DP:GL:GQ	0/1:30,23:49:-88.16,-14.77,-89.46:99
-chr1	3005947	.	C	T	228.82	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.77;MQ0=0;OQ=514.40;QD=13.54;SB=-233.73	GT:AD:DP:GL:GQ	0/1:21,17:37:-65.88,-11.16,-63.18:99
-chr1	3005977	.	G	A	25.43	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=57.94;MQ0=0;OQ=561.32;QD=13.69;SB=-151.18	GT:AD:DP:GL:GQ	0/1:21,20:37:-70.56,-11.15,-69.03:99
-chr1	3006143	rs2981869	C	T	155.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.84;MQ0=0;OQ=588.68;QD=14.72;SB=-230.75	GT:AD:DP:GL:GQ	0/1:19,21:38:-73.61,-11.45,-64.86:99
-chr1	3007018	.	G	A	13.33	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=59.05;MQ0=0;OQ=465.01;QD=10.57;SB=-225.50	GT:AD:DP:GL:GQ	0/1:25,18:41:-64.52,-14.73,-86.50:99
-chr1	3008086	rs2993492	G	A	197.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.53;MQ0=0;OQ=913.42;QD=18.64;SB=-406.43	GT:AD:DP:GL:GQ	0/1:20,29:46:-108.49,-13.86,-62.00:99
-chr1	3009487	rs12131890	G	A	77.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.17;MQ0=0;OQ=935.16;QD=20.78;SB=-364.90	GT:AD:DP:GL:GQ	0/1:15,30:42:-109.46,-12.66,-48.94:99
-chr1	3010048	rs56029998	T	C	182.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.92;MQ=59.24;MQ0=0;OQ=609.91;QD=11.09;SB=-261.57	GT:AD:DP:GL:GQ	0/1:31,24:54:-80.54,-16.27,-125.83:99
-chr1	3010106	rs2993493	C	A	285.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=59.63;MQ0=0;OQ=789.70;QD=15.48;SB=-315.68	GT:AD:DP:GL:GQ	0/1:25,26:51:-97.62,-15.36,-86.35:99
-chr1	3010923	rs2993494	G	A	362.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=449.17;QD=13.21;SB=-177.14	GT:AD:DP:GL:GQ	0/1:18,16:33:-58.15,-9.95,-61.38:99
-chr1	3011156	rs55898371	A	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=5;HaplotypeScore=4.00;MQ=58.74;MQ0=0;OQ=420.03;QD=11.35;SB=-193.92	GT:AD:DP:GL:GQ	0/1:18,19:33:-55.23,-9.95,-57.05:99
-chr1	3011412	rs12133978	G	A	162.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=59.34;MQ0=0;OQ=429.68;QD=12.28;SB=-187.26	GT:AD:DP:GL:GQ	0/1:20,15:33:-56.20,-9.95,-61.55:99
-chr1	3011547	rs11808136	C	T	5.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=59.52;MQ0=0;OQ=731.81;QD=18.76;SB=-195.18	GT:AD:DP:GL:GQ	0/1:16,23:36:-87.31,-10.85,-49.60:99
-chr1	3012571	rs2993495	A	G	13.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=549.01;QD=28.90;SB=-194.71	GT:AD:DP:GL:GQ	1/1:0,19:18:-58.50,-5.43,-0.01:54.13
-chr1	3012575	rs2993496	T	C	83.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=58.78;MQ0=0;OQ=196.75;QD=10.36;SB=-98.00	GT:AD:DP:GL:GQ	0/1:9,10:18:-28.39,-5.43,-32.68:99
-chr1	3012992	rs2993497	G	A	7	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.90;MQ=59.59;MQ0=0;OQ=932.60;QD=20.72;SB=-424.82	GT:AD:DP:GL:GQ	0/1:16,29:42:-109.20,-12.66,-48.01:99
-chr1	3013111	rs56363358	C	A	42.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.28;MQ0=0;OQ=749.52;QD=19.72;SB=-289.38	GT:AD:DP:GL:GQ	0/1:12,26:36:-89.08,-10.85,-37.10:99
-chr1	3013255	rs2993498	T	C	497.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=1211.16;QD=31.87;SB=-545.88	GT:AD:DP:GL:GQ	1/1:0,38:36:-124.72,-10.85,-0.02:99
-chr1	3013565	rs6667850	A	C	171.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.41;MQ0=0;OQ=400.63;QD=10.27;SB=-101.88	GT:AD:DP:GL:GQ	0/1:20,19:37:-54.50,-11.15,-69.04:99
-chr1	3013819	rs1890337	A	G	45.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=58.49;MQ0=0;OQ=1788.78;QD=31.38;SB=-712.22	GT:AD:DP:GL:GQ	1/1:0,56:52:-182.49,-15.67,-0.02:99
-chr1	3014125	rs1890336	A	C	168.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.71;MQ0=0;OQ=1775.96;QD=32.89;SB=-886.08	GT:AD:DP:GL:GQ	1/1:0,54:51:-181.20,-15.36,-0.02:99
-chr1	3014227	rs2993499	T	C	143.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.04;MQ=59.50;MQ0=0;OQ=1217.03;QD=32.89;SB=-587.31	GT:AD:DP:GL:GQ	1/1:0,37:36:-125.31,-10.85,-0.02:99
-chr1	3014565	rs2993500	C	T	15.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=4.44;MQ=59.65;MQ0=0;OQ=1234.24;QD=18.99;SB=-544.80	GT:AD:DP:GL:GQ	0/1:29,36:64:-145.99,-19.28,-92.77:99
-chr1	3015706	rs12137954	T	A	122.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.40;MQ0=0;OQ=345.66;QD=6.91;SB=-177.77	GT:AD:DP:GL:GQ	0/1:35,15:48:-52.31,-14.46,-129.85:99
-chr1	3015846	rs2993501	A	C	217.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=57.44;MQ0=0;OQ=1649.50;QD=29.99;SB=-596.80	GT:AD:DP:GL:GQ	1/1:0,55:53:-168.59,-15.98,-0.05:99
-chr1	3015960	rs12135664	C	T	346.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=60.00;MQ0=0;OQ=1146.10;QD=16.85;SB=-550.79	GT:AD:DP:GL:GQ	0/1:34,34:67:-138.08,-20.19,-108.20:99
-chr1	3016120	rs2981868	T	A	119.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.10;MQ=59.44;MQ0=0;OQ=1114.65;QD=15.06;SB=-570.99	GT:AD:DP:GL:GQ	0/1:37,36:67:-134.93,-20.18,-118.55:99
-chr1	3016369	rs59909070	G	A	353.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=434.09;QD=10.10;SB=-171.10	GT:AD:DP:GL:GQ	0/1:27,16:42:-59.35,-12.65,-95.52:99
-chr1	3016502	.	T	C	0.18	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=2;HaplotypeScore=5.91;MQ=44.72;MQ0=3;OQ=351.94;QD=7.65;SB=-166.48	GT:AD:DP:GL:GQ	0/1:25,21:36:-49.33,-10.85,-81.52:99
-chr1	3016606	.	A	C	15.74	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=48.95;MQ0=1;OQ=373.22;QD=9.82;SB=-133.20	GT:AD:DP:GL:GQ	0/1:18,17:27:-48.74,-8.13,-43.17:99
-chr1	3016839	rs56010213	A	T	12.71	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=38.33;MQ0=7;QD=0.33;SB=20.09	GT:AD:DP:GL:GQ	0/1:34,5:23:-11.46,-6.93,-70.69:45.31
-chr1	3017201	rs2993502	C	T	589.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.38;MQ0=0;OQ=2029.57;QD=38.29;SB=-936.75	GT:AD:DP:GL:GQ	1/1:0,53:51:-206.56,-15.36,-0.01:99
-chr1	3017765	.	T	C	156.29	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=257.37;QD=12.26;SB=-133.69	GT:AD:DP:GL:GQ	0/1:7,14:18:-34.45,-5.43,-28.78:99
-chr1	3017780	.	C	T	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=2.01;MQ=59.03;MQ0=0;OQ=567.81;QD=23.66;SB=-154.18	GT:AD:DP:GL:GQ	0/1:6,18:22:-66.70,-6.63,-18.59:99
-chr1	3018779	rs11808946	C	T	272.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=781.20;QD=16.62;SB=-355.56	GT:AD:DP:GL:GQ	0/1:22,25:44:-94.67,-13.26,-66.92:99
-chr1	3018847	rs2993503	A	G	82.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=59.16;MQ0=0;OQ=1494.14;QD=27.17;SB=-767.73	GT:AD:DP:GL:GQ	1/1:0,55:49:-153.05,-14.78,-0.05:99
-chr1	3018941	rs2072733	C	T	12.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=59.46;MQ0=0;OQ=605.93;QD=14.09;SB=-165.23	GT:AD:DP:GL:GQ	0/1:22,21:41:-76.24,-12.36,-69.17:99
-chr1	3019072	rs10909875	C	T	272.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.03;MQ0=0;OQ=534.00;QD=11.12;SB=-208.44	GT:AD:DP:GL:GQ	0/1:28,20:45:-70.25,-13.56,-92.78:99
-chr1	3019517	rs12136745	G	A	248.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=59.62;MQ0=0;OQ=984.07;QD=16.40;SB=-470.51	GT:AD:DP:GL:GQ	0/1:28,32:55:-118.26,-16.57,-87.88:99
-chr1	3019842	rs58968988	G	A	56.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=58.92;MQ0=0;OQ=590.92;QD=13.74;SB=-159.22	GT:AD:DP:GL:GQ	0/1:22,21:39:-74.13,-11.75,-67.01:99
-chr1	3020484	rs2981867	G	C	387.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=547.74;QD=12.17;SB=-190.58	GT:AD:DP:GL:GQ	0/1:29,16:44:-71.32,-13.26,-119.60:99
-chr1	3020597	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=37.34;MQ=39.25;MQ0=1;OQ=144.44;QD=4.25;SB=-87.67	GT:AD:DP:GL:GQ	0/1:24,10:27:-25.87,-8.14,-74.17:99
-chr1	3020599	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=45.49;MQ=39.25;MQ0=1;OQ=360.48;QD=10.60;SB=-127.10	GT:AD:DP:GL:GQ	0/1:21,13:31:-48.68,-9.35,-60.35:99
-chr1	3020611	.	A	G	19.24	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=21.97;MQ=37.81;MQ0=1;QD=0.62;SB=-30.78	GT:AD:DP:GL:GQ	0/1:24,7:24:-12.43,-7.23,-80.13:52.02
-chr1	3020613	rs6691894	A	G	41.97	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=22.61;MQ=37.81;MQ0=1;QD=1.35;SB=-10.86	GT:AD:DP:GL:GQ	0/1:24,7:20:-13.51,-6.02,-64.69:74.80
-chr1	3020615	rs6691895	A	G	400.54	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=24.36;MQ=38.97;MQ0=1;QD=12.92;SB=-173.99	GT:AD:DP:GL:GQ	0/1:14,17:24:-50.58,-7.24,-30.30:99
-chr1	3020629	.	A	G	22.23	LowQual	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=19.42;MQ=38.02;MQ0=1;QD=0.85;SB=-32.78	GT:AD:DP:GL:GQ	0/1:21,5:22:-12.14,-6.63,-70.51:55.04
-chr1	3020688	rs6691996	A	G	381.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.90;MQ0=0;OQ=370.45;QD=11.58;SB=-184.01	GT:AD:DP:GL:GQ	0/1:14,18:30:-49.38,-9.05,-56.94:99
-chr1	3020691	rs6695017	T	C	343.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.28;MQ0=0;OQ=495.78;QD=14.58;SB=-192.66	GT:AD:DP:GL:GQ	0/1:16,18:34:-63.11,-10.25,-58.83:99
-chr1	3020744	rs6687292	C	T	95.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=56.56;MQ0=0;OQ=522.71;QD=9.33;SB=-137.11	GT:AD:DP:GL:GQ	0/1:34,22:53:-71.53,-15.97,-120.29:99
-chr1	3020924	rs2981866	G	A	33.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.17;MQ0=0;OQ=1933.34;QD=38.67;SB=-489.14	GT:AD:DP:GL:GQ	1/1:0,50:49:-196.94,-14.76,-0.02:99
-chr1	3020982	rs10909876	A	G	347.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.47;MQ0=0;OQ=796.80;QD=13.06;SB=-340.94	GT:AD:DP:GL:GQ	0/1:29,32:61:-101.36,-18.40,-112.11:99
-chr1	3020998	rs10909877	T	A	2173.88	Indel	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=54.79;MQ0=0;QD=36.23;SB=-1033.22	GT:AD:DP:GL:GQ	1/1:0,60:59:-220.99,-17.77,-0.02:99
-chr1	3021182	.	G	A	53.76	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.25;MQ0=0;OQ=405.03;QD=13.07;SB=-180.66	GT:AD:DP:GL:GQ	0/1:18,13:30:-52.83,-9.04,-54.54:99
-chr1	3022425	rs2981865	G	C	1.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.81;MQ0=0;OQ=743.56;QD=24.79;SB=-346.46	GT:AD:DP:GL:GQ	0/1:9,21:29:-86.39,-8.75,-34.33:99
-chr1	3024466	rs10909878	A	G	299.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=58.18;MQ0=0;OQ=619.53;QD=13.18;SB=-324.31	GT:AD:DP:GL:GQ	0/1:20,27:45:-78.81,-13.57,-80.16:99
-chr1	3024530	rs12141827	T	C	99.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=53.26;MQ0=0;OQ=329.91;QD=8.25;SB=-169.50	GT:AD:DP:GL:GQ	0/1:24,16:37:-47.43,-11.15,-87.85:99
-chr1	3025087	rs6690373	A	G	254.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=819.31;QD=14.63;SB=-343.19	GT:AD:DP:GL:GQ	0/1:23,33:54:-101.49,-16.28,-89.82:99
-chr1	3025597	rs2981864	A	G	2.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=59.23;MQ0=0;OQ=762.15;QD=25.41;SB=-232.49	GT:AD:DP:GL:GQ	1/1:0,28:25:-82.46,-10.02,-2.66:73.60
-chr1	3025622	rs12409836	A	G	68.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.74;MQ0=0;OQ=225.89;QD=6.11;SB=-44.83	GT:AD:DP:GL:GQ	0/1:23,14:30:-34.92,-9.04,-72.62:99
-chr1	3025639	rs2472822	C	G	79.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=1446.74;QD=36.17;SB=-602.98	GT:AD:DP:GL:GQ	1/1:0,40:36:-148.28,-10.86,-0.02:99
-chr1	3027473	rs876740	C	T	271.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=2215.19;QD=38.19;SB=-1128.00	GT:AD:DP:GL:GQ	1/1:0,58:56:-225.12,-16.87,-0.02:99
-chr1	3028483	rs2742672	A	G	23.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.51;MQ0=0;OQ=1087.23;QD=28.61;SB=-502.17	GT:AD:DP:GL:GQ	1/1:0,38:36:-112.35,-10.86,-0.04:99
-chr1	3029008	rs2817171	C	A	191.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.65;MQ0=0;OQ=733.04;QD=13.57;SB=-391.11	GT:AD:DP:GL:GQ	0/1:29,25:54:-92.85,-16.26,-102.92:99
-chr1	3030045	rs2981863	G	C	66.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.63;MQ0=0;OQ=889.03;QD=17.78;SB=-256.52	GT:AD:DP:GL:GQ	0/1:23,27:46:-106.06,-13.87,-86.32:99
-chr1	3030624	rs2012731	G	A	16.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=4.70;MQ=59.61;MQ0=0;OQ=1536.02;QD=32.00;SB=-433.32	GT:AD:DP:GL:GQ	1/1:0,48:41:-157.21,-12.36,-0.02:99
-chr1	3031379	rs2817172	T	C	144.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1381.66;QD=30.70;SB=-636.88	GT:AD:DP:GL:GQ	1/1:0,45:44:-141.79,-13.27,-0.04:99
-chr1	3032241	rs2472820	G	A	108.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.74;MQ0=0;OQ=572.26;QD=15.47;SB=-176.66	GT:AD:DP:GL:GQ	0/1:19,18:36:-71.36,-10.85,-60.89:99
-chr1	3032694	.	C	T	55.78	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=546.49;QD=14.77;SB=-205.90	GT:AD:DP:GL:GQ	0/1:19,18:36:-68.78,-10.85,-58.80:99
-chr1	3033426	rs12410830	A	G	6.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=3.60;MQ=59.16;MQ0=0;OQ=614.56;QD=12.29;SB=-235.29	GT:AD:DP:GL:GQ	0/1:27,23:49:-79.50,-14.76,-107.00:99
-chr1	3034041	rs2817174	T	C	277.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.38;MQ0=0;OQ=1499.60;QD=26.78;SB=-664.93	GT:AD:DP:GL:GQ	1/1:0,56:48:-153.59,-14.48,-0.05:99
-chr1	3034512	rs35529420	C	T	72.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.41;MQ=59.18;MQ0=0;OQ=899.04;QD=15.77;SB=-264.19	GT:AD:DP:GL:GQ	0/1:27,29:53:-109.16,-15.97,-86.82:99
-chr1	3034731	rs35951269	T	C	58.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.40;MQ=58.97;MQ0=0;OQ=780.41;QD=12.39;SB=-339.30	GT:AD:DP:GL:GQ	0/1:36,27:63:-100.30,-18.98,-146.89:99
-chr1	3035225	rs2742670	A	G	75.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=60.00;MQ0=0;OQ=1811.56;QD=33.55;SB=-920.03	GT:AD:DP:GL:GQ	1/1:0,54:51:-184.76,-15.36,-0.02:99
-chr1	3035475	rs2817175	T	C	135.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=57.17;MQ0=0;OQ=1487.18;QD=29.74;SB=-663.57	GT:AD:DP:GL:GQ	1/1:0,50:49:-152.36,-14.79,-0.06:99
-chr1	3035871	rs2817176	A	G	10.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=58.80;MQ0=0;OQ=1642.91;QD=28.33;SB=-799.47	GT:AD:DP:GL:GQ	1/1:0,58:54:-167.94,-16.30,-0.07:99
-chr1	3036323	rs2817177	T	C	492.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1385.60;QD=34.64;SB=-536.41	GT:AD:DP:GL:GQ	1/1:0,40:39:-142.16,-11.75,-0.01:99
-chr1	3036571	rs35625823	T	G	1.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.02;HRun=1;HaplotypeScore=8.04;MQ=58.17;MQ0=0;OQ=682.10;QD=13.37;SB=-105.91	GT:AD:DP:GL:GQ	0/1:25,25:50:-86.26,-14.76,-86.59:99
-chr1	3036686	rs35201154	G	T	212.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.64;MQ0=0;OQ=542.18;QD=11.30;SB=-157.49	GT:AD:DP:GL:GQ	0/1:27,21:48:-71.97,-14.46,-93.11:99
-chr1	3037032	rs2788086	A	G	87.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.14;MQ0=0;OQ=1440.07;QD=26.67;SB=-745.96	GT:AD:DP:GL:GQ	1/1:1,53:49:-151.81,-14.78,-4.21:99
-chr1	3037112	rs2817178	T	C	138.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.50;MQ=59.01;MQ0=0;OQ=1783.83;QD=33.66;SB=-780.99	GT:AD:DP:GL:GQ	1/1:0,53:51:-182.00,-15.37,-0.03:99
-chr1	3037307	rs10797378	T	C	263.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=57.77;MQ0=0;OQ=673.03;QD=12.02;SB=-270.24	GT:AD:DP:GL:GQ	0/1:24,31:50:-85.66,-15.07,-91.32:99
-chr1	3037312	rs2788087	A	G	5.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=4.61;MQ=57.43;MQ0=0;OQ=719.26;QD=12.40;SB=-323.12	GT:AD:DP:GL:GQ	0/1:28,30:54:-91.49,-16.28,-101.63:99
-chr1	3037323	rs10909881	G	A	169.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.31;MQ=57.69;MQ0=0;OQ=859.60;QD=14.57;SB=-445.45	GT:AD:DP:GL:GQ	0/1:30,29:55:-105.83,-16.59,-85.38:99
-chr1	3038158	rs2817180	T	C	101.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1662.63;QD=29.17;SB=-686.71	GT:AD:DP:GL:GQ	1/1:0,57:52:-169.90,-15.69,-0.05:99
-chr1	3038602	rs35360783	A	G	220.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.65;MQ0=0;OQ=463.18;QD=8.74;SB=-235.89	GT:AD:DP:GL:GQ	0/1:32,21:53:-65.58,-15.98,-127.69:99
-chr1	3039222	rs12024620	C	T	40.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.42;MQ=59.20;MQ0=0;OQ=839.66;QD=14.48;SB=-156.21	GT:AD:DP:GL:GQ	0/1:32,26:56:-104.13,-16.88,-98.69:99
-chr1	3039241	rs12021948	G	C	56.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=946.79;QD=17.86;SB=-223.20	GT:AD:DP:GL:GQ	0/1:25,28:53:-113.94,-15.98,-109.97:99
-chr1	3039433	rs12740389	C	T	216.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=1244.61;QD=19.15;SB=-628.67	GT:AD:DP:GL:GQ	0/1:28,37:63:-146.73,-18.98,-86.83:99
-chr1	3039715	rs35999894	C	T	445.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1131.40;QD=18.86;SB=-581.12	GT:AD:DP:GL:GQ	0/1:26,34:58:-133.91,-17.48,-78.73:99
-chr1	3039945	rs34733164	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=4;HaplotypeScore=2.38;MQ=59.17;MQ0=0;OQ=103.23;QD=3.69;SB=-48.95	GT:AD:DP:GL:GQ	0/1:18,10:23:-20.53,-6.93,-62.39:99
-chr1	3040081	rs12022170	G	A	254.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.17;MQ0=0;OQ=717.02;QD=15.93;SB=-327.88	GT:AD:DP:GL:GQ	0/1:23,22:43:-87.95,-12.96,-65.92:99
-chr1	3040191	rs12028027	T	C	223.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.03;MQ0=0;OQ=428.68;QD=8.93;SB=-212.28	GT:AD:DP:GL:GQ	0/1:28,20:45:-59.72,-13.57,-97.74:99
-chr1	3040222	rs12027117	A	G	229.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.46;MQ0=0;OQ=557.56;QD=12.97;SB=-281.47	GT:AD:DP:GL:GQ	0/1:21,22:42:-71.69,-12.65,-82.66:99
-chr1	3040357	rs10909883	A	G	344.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.62;MQ0=0;OQ=754.58;QD=12.37;SB=-348.58	GT:AD:DP:GL:GQ	0/1:28,33:59:-96.53,-17.79,-109.54:99
-chr1	3040454	rs12120879	C	G	45.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.33;MQ=58.92;MQ0=0;OQ=1009.80;QD=18.03;SB=-357.43	GT:AD:DP:GL:GQ	0/1:27,29:53:-120.25,-15.98,-106.43:99
-chr1	3040798	rs35848773	T	C	267.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.65;MQ0=0;OQ=685.07;QD=12.69;SB=-277.27	GT:AD:DP:GL:GQ	0/1:21,33:48:-86.26,-14.47,-82.32:99
-chr1	3040900	rs12731315	G	C	3.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=3;HaplotypeScore=3.13;MQ=60.00;MQ0=0;OQ=656.27;QD=17.74;SB=-310.23	GT:AD:DP:GL:GQ	0/1:18,19:37:-80.07,-11.16,-76.94:99
-chr1	3041210	rs12724921	T	A	454.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=611.82;QD=12.00;SB=-313.55	GT:AD:DP:GL:GQ	0/1:28,23:48:-78.92,-14.46,-101.94:99
-chr1	3041481	rs909509	A	G	48.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=59.51;MQ0=0;OQ=373.32;QD=7.94;SB=-138.54	GT:AD:DP:GL:GQ	0/1:28,18:38:-52.08,-11.46,-81.04:99
-chr1	3041609	rs12725529	T	C	111.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=58.62;MQ0=0;OQ=287.04;QD=7.76;SB=-113.62	GT:AD:DP:GL:GQ	0/1:21,16:34:-42.24,-10.25,-81.99:99
-chr1	3042125	rs7535865	A	C	10.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=7.89;MQ=58.97;MQ0=0;OQ=623.66;QD=13.86;SB=-308.90	GT:AD:DP:GL:GQ	0/1:18,27:40:-77.70,-12.05,-63.90:99
-chr1	3042361	rs4648363	C	T	227.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.42;MQ0=0;OQ=413.64;QD=10.34;SB=-159.64	GT:AD:DP:GL:GQ	0/1:26,14:37:-55.80,-11.16,-73.37:99
-chr1	3043023	rs35794895	G	A	293.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=58.64;MQ0=0;OQ=693.50;QD=14.45;SB=-320.87	GT:AD:DP:GL:GQ	0/1:21,26:42:-85.30,-12.67,-60.57:99
-chr1	3043817	rs12741594	A	T	497.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=877.02;QD=14.62;SB=-406.56	GT:AD:DP:GL:GQ	0/1:31,29:60:-109.06,-18.07,-115.07:99
-chr1	3043966	rs2235176	T	C	337.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=677.48;QD=12.55;SB=-208.33	GT:AD:DP:GL:GQ	0/1:27,27:53:-87.00,-15.97,-104.05:99
-chr1	3044349	rs35877876	C	T	270.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.61;MQ0=0;OQ=969.79;QD=16.44;SB=-358.48	GT:AD:DP:GL:GQ	0/1:30,29:59:-118.04,-17.77,-107.71:99
-chr1	3045481	rs10797379	T	C	126.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.62;MQ0=0;OQ=1290.17;QD=29.32;SB=-604.23	GT:AD:DP:GL:GQ	1/1:0,44:42:-132.64,-12.67,-0.04:99
-chr1	3045736	rs10797380	A	G	12.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=4.39;MQ=59.03;MQ0=0;OQ=1384.53;QD=28.84;SB=-697.60	GT:AD:DP:GL:GQ	1/1:0,48:44:-142.08,-13.27,-0.04:99
-chr1	3046509	rs7354964	C	G	181.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.06;MQ0=0;OQ=756.10;QD=18.90;SB=-387.98	GT:AD:DP:GL:GQ	0/1:19,21:40:-90.95,-12.05,-80.97:99
-chr1	3047001	rs2817181	A	G	378.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=2402.64;QD=34.32;SB=-979.90	GT:AD:DP:GL:GQ	1/1:0,70:68:-243.87,-20.48,-0.03:99
-chr1	3047521	rs7538096	T	C	291.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.64;MQ0=0;OQ=861.01;QD=13.45;SB=-250.18	GT:AD:DP:GL:GQ	0/1:31,33:64:-108.67,-19.29,-124.47:99
-chr1	3048093	rs2742666	T	C	36.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=6.22;MQ=57.02;MQ0=0;OQ=594.94;QD=12.93;SB=-209.63	GT:AD:DP:GL:GQ	0/1:23,23:42:-75.43,-12.65,-85.93:99
-chr1	3048098	rs2742665	A	C	100.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=57.17;MQ0=0;OQ=617.42;QD=15.44;SB=-256.42	GT:AD:DP:GL:GQ	0/1:17,23:38:-76.47,-11.45,-58.49:99
-chr1	3048109	rs2817183	A	G	380.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.05;MQ0=0;OQ=578.38;QD=14.46;SB=-222.56	GT:AD:DP:GL:GQ	0/1:19,21:39:-72.87,-11.75,-75.47:99
-chr1	3048230	rs2817184	G	A	543.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=743.48;QD=15.82;SB=-334.86	GT:AD:DP:GL:GQ	0/1:23,24:46:-91.50,-13.86,-76.30:99
-chr1	3050041	rs6684093	C	T	40.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=5.68;MQ=58.71;MQ0=0;OQ=937.27;QD=17.36;SB=-475.05	GT:AD:DP:GL:GQ	0/1:24,30:51:-112.38,-15.37,-76.51:99
-chr1	3051143	rs1875449	C	A	6.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=5.78;MQ=59.44;MQ0=0;OQ=367.51;QD=8.96;SB=-206.89	GT:AD:DP:GL:GQ	0/1:23,18:37:-51.19,-11.15,-77.66:99
-chr1	3052735	rs2817187	G	T	176.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=2057.17;QD=34.87;SB=-1041.53	GT:AD:DP:GL:GQ	1/1:0,59:58:-209.32,-17.47,-0.02:99
-chr1	3066300	.	C	T	85.23	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.28;MQ0=0;OQ=957.84;QD=16.51;SB=-344.34	GT:AD:DP:GL:GQ	0/1:29,29:58:-116.54,-17.47,-102.34:99
-chr1	3068821	.	G	A	12.77	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=59.41;MQ0=0;OQ=492.51;QD=12.63;SB=-226.54	GT:AD:DP:GL:GQ	0/1:19,20:34:-62.79,-10.25,-59.33:99
-chr1	3069601	rs34175350	G	C	4.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=15.60;MQ0=24;OQ=307.57;QD=4.16;SB=-10.00	GT:AD:DP:GL:GQ	0/1:61,13:26:-41.87,-7.83,-71.98:99
-chr1	3071991	.	T	C	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=7.33;MQ=54.00;MQ0=2;OQ=261.16;QD=5.02;SB=-67.51	GT:AD:DP:GL:GQ	0/1:33,19:40:-41.45,-12.05,-111.58:99
-chr1	3072015	.	C	T	17.95	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=6.27;MQ=51.72;MQ0=4;QD=0.46;SB=-17.49	GT:AD:DP:GL:GQ	0/1:29,10:20:-11.10,-6.03,-56.69:50.72
-chr1	3077233	rs10909887	A	T	53.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=59.65;MQ0=0;OQ=1671.94;QD=31.55;SB=-810.23	GT:AD:DP:GL:GQ	1/1:0,53:48:-170.81,-14.47,-0.03:99
-chr1	3078302	rs2817127	C	G	3.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=58.92;MQ0=0;OQ=1590.78;QD=40.79;SB=-669.44	GT:AD:DP:GL:GQ	1/1:0,39:38:-162.68,-11.46,-0.02:99
-chr1	3078602	rs2651936	C	T	556.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1763.78;QD=38.34;SB=-617.01	GT:AD:DP:GL:GQ	1/1:0,46:45:-179.97,-13.55,-0.01:99
-chr1	3078803	rs2817128	T	C	41.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=0.92;MQ=58.79;MQ0=0;OQ=1700.76;QD=31.50;SB=-627.85	GT:AD:DP:GL:GQ	1/1:0,54:53:-173.71,-15.98,-0.05:99
-chr1	3078920	rs2817129	G	C	420.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2270.90;QD=42.85;SB=-927.24	GT:AD:DP:GL:GQ	1/1:0,53:53:-230.70,-15.98,-0.02:99
-chr1	3079836	rs3795268	G	A	518.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2012.53;QD=38.70;SB=-765.66	GT:AD:DP:GL:GQ	1/1:0,52:51:-204.85,-15.36,-0.01:99
-chr1	3082486	rs61759169	A	T	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=17.96;MQ=49.98;MQ0=1;OQ=467.66;QD=5.85;SB=-63.76	GT:AD:DP:GL:GQ	0/1:57,23:74:-72.34,-22.29,-212.74:99
-chr1	3082576	rs59307218	T	C	89.31	Indel	AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=16.28;MQ=58.32;MQ0=0;QD=0.84;SB=-6.84	GT:AD:DP:GL:GQ	0/1:94,12:100:-42.34,-30.13,-353.31:99
-chr1	3082715	rs61759170	T	C	0.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=13.70;MQ=54.13;MQ0=0;OQ=433.59;QD=4.61;SB=-120.39	GT:AD:DP:GL:GQ	0/1:66,28:84:-71.95,-25.31,-255.13:99
-chr1	3082724	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=20.17;MQ=53.56;MQ0=0;OQ=265.77;QD=3.09;SB=-1.90	GT:AD:DP:GL:GQ	0/1:64,21:77:-55.36,-25.50,-226.03:99
-chr1	3082730	rs61759171	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=25.02;MQ=53.60;MQ0=0;OQ=115.19;QD=1.46;SB=35.65	GT:AD:DP:GL:GQ	0/1:62,16:69:-35.59,-20.79,-209.49:99
-chr1	3083610	rs2817131	T	C	1.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=7.31;MQ=58.76;MQ0=0;OQ=2679.05;QD=35.25;SB=-1269.49	GT:AD:DP:GL:GQ	1/1:0,76:75:-271.51,-22.59,-0.03:99
-chr1	3086215	rs868718	G	A	224.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.60;MQ0=0;OQ=2257.57;QD=38.92;SB=-929.74	GT:AD:DP:GL:GQ	1/1:0,58:57:-229.36,-17.17,-0.02:99
-chr1	3086338	rs2817132	T	C	256.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1749.39;QD=34.30;SB=-792.14	GT:AD:DP:GL:GQ	1/1:0,51:49:-178.54,-14.76,-0.01:99
-chr1	3086971	.	G	A	6.54	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.63;MQ0=0;OQ=869.92;QD=17.06;SB=-366.15	GT:AD:DP:GL:GQ	0/1:23,28:49:-105.05,-14.78,-70.17:99
-chr1	3087284	rs28576654	G	A	0.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=8.45;MQ=55.21;MQ0=0;OQ=1827.21;QD=37.29;SB=-761.03	GT:AD:DP:GL:GQ	1/1:1,48:47:-186.32,-14.16,-0.02:99
-chr1	3087324	rs36042320	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=36.16;MQ=53.71;MQ0=0;OQ=1199.13;QD=20.32;SB=-596.19	GT:AD:DP:GL:GQ	1/1:10,49:47:-136.03,-14.18,-12.56:16.27
-chr1	3087368	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=62.15;MQ=52.02;MQ0=2;OQ=84.05;QD=0.99;SB=68.22	GT:AD:DP:GL:GQ	0/1:64,20:65:-31.27,-19.58,-199.12:99
-chr1	3087405	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=113.18;MQ=45.62;MQ0=12;OQ=152.20;QD=1.23;SB=83.17	GT:AD:DP:GL:GQ	0/1:93,25:100:-54.91,-36.41,-286.94:99
-chr1	3087421	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=108;Dels=0.01;HRun=1;HaplotypeScore=157.91;MQ=45.44;MQ0=13;OQ=317.87;QD=2.94;SB=62.22	GT:AD:DP:GL:GQ	0/1:65,42:72:-56.46,-21.39,-222.98:99
-chr1	3087430	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.09;HRun=0;HaplotypeScore=131.45;MQ=45.35;MQ0=13;OQ=71.40;QD=0.71;SB=68.23	GT:AD:DP:GL:GQ	0/1:57,34:61:-28.82,-18.40,-174.57:99
-chr1	3087432	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=125.43;MQ=44.68;MQ0=16;OQ=349.00;QD=3.39;SB=68.23	GT:AD:DP:GL:GQ	0/1:85,18:67:-58.39,-20.20,-173.08:99
-chr1	3087446	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=34.86;MQ=42.41;MQ0=15;OQ=253.15;QD=2.81;SB=53.16	GT:AD:DP:GL:GQ	0/1:47,43:54:-44.89,-16.29,-135.66:99
-chr1	3087456	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=33.91;MQ=40.94;MQ0=15;OQ=574.41;QD=6.38;SB=41.15	GT:AD:DP:GL:GQ	0/1:47,43:59:-78.52,-17.79,-127.78:99
-chr1	3087469	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=37.75;MQ=38.93;MQ0=14;OQ=420.06;QD=4.94;SB=41.09	GT:AD:DP:GL:GQ	0/1:56,29:63:-64.29,-19.00,-146.93:99
-chr1	3087482	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=75.90;MQ=37.38;MQ0=13;OQ=93.48;QD=1.23;SB=56.14	GT:AD:DP:GL:GQ	0/1:55,21:54:-28.92,-16.29,-150.91:99
-chr1	3087484	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=59.86;MQ=36.69;MQ0=13;OQ=224.49;QD=2.95;SB=47.15	GT:AD:DP:GL:GQ	0/1:64,12:51:-41.12,-15.38,-130.32:99
-chr1	3087496	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.18;HRun=0;HaplotypeScore=92.35;MQ=35.16;MQ0=7;OQ=80.55;QD=1.41;SB=-35.75	GT:AD:DP:GL:GQ	0/1:30,16:29:-20.09,-8.75,-100.50:99
-chr1	3087498	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=70.78;MQ=33.76;MQ0=7;OQ=147.15;QD=2.58;SB=-95.04	GT:AD:DP:GL:GQ	0/1:41,16:33:-27.95,-9.95,-82.07:99
-chr1	3087509	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.05;HRun=0;HaplotypeScore=74.81;MQ=32.58;MQ0=5;OQ=64.70;QD=1.06;SB=56.11	GT:AD:DP:GL:GQ	0/1:52,6:35:-20.32,-10.56,-93.36:97.54
-chr1	3087512	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=54.96;MQ=31.97;MQ0=5;OQ=503.11;QD=8.11;SB=-236.10	GT:AD:DP:GL:GQ	0/1:31,31:45:-67.16,-13.57,-94.41:99
-chr1	3087536	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=33.03;MQ=32.40;MQ0=3;OQ=59.37;QD=0.74;SB=89.25	GT:AD:DP:GL:GQ	0/1:72,7:63:-28.22,-18.99,-181.57:92.21
-chr1	3087538	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=37.44;MQ=32.40;MQ0=3;OQ=247.27;QD=3.09;SB=80.25	GT:AD:DP:GL:GQ	0/1:65,15:63:-46.99,-18.98,-180.33:99
-chr1	3087608	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.01;HRun=0;HaplotypeScore=54.40;MQ=37.28;MQ0=13;OQ=1887.72;QD=11.24;SB=-729.24	GT:AD:DP:GL:GQ	0/1:104,63:145:-235.47,-43.42,-271.37:99
-chr1	3087617	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=53.68;MQ=37.94;MQ0=15;OQ=1635.04;QD=8.84;SB=-493.28	GT:AD:DP:GL:GQ	0/1:114,71:160:-215.01,-48.22,-344.93:99
-chr1	3087664	.	A	G	18.84	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=189;Dels=0.01;HRun=0;HaplotypeScore=131.51;MQ=40.84;MQ0=15;QD=0.10;SB=241.96	GT:AD:DP:GL:GQ	0/1:170,18:163:-53.97,-48.81,-580.79:51.62
-chr1	3087667	.	C	T	165.92	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=188;Dels=0.01;HRun=0;HaplotypeScore=132.64;MQ=41.11;MQ0=15;QD=0.88;SB=179.60	GT:AD:DP:GL:GQ	0/1:167,20:158:-67.18,-47.30,-486.26:99
-chr1	3087668	.	A	G	310.08	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=187;Dels=0.01;HRun=1;HaplotypeScore=124.54;MQ=41.17;MQ0=15;QD=1.66;SB=124.04	GT:AD:DP:GL:GQ	0/1:158,28:160:-82.20,-47.90,-540.31:99
-chr1	3087734	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=13.23;MQ=44.53;MQ0=2;OQ=55.34;QD=0.49;SB=-14.90	GT:AD:DP:GL:GQ	0/1:101,11:104:-40.16,-31.34,-369.37:88.18
-chr1	3087747	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=23.95;MQ=43.49;MQ0=2;OQ=1649.29;QD=15.71;SB=-709.98	GT:AD:DP:GL:GQ	0/1:48,57:100:-198.34,-30.13,-180.84:99
-chr1	3087772	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=99.40;MQ=37.75;MQ0=7;OQ=762.57;QD=5.73;SB=-239.63	GT:AD:DP:GL:GQ	0/1:102,30:117:-114.83,-35.29,-281.68:99
-chr1	3087833	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=261.50;MQ=29.30;MQ0=7;OQ=1486.23;QD=9.78;SB=-676.51	GT:AD:DP:GL:GQ	0/1:100,52:130:-191.07,-39.17,-253.74:99
-chr1	3087850	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=106.63;MQ=29.08;MQ0=7;OQ=1055.92;QD=7.23;SB=-459.23	GT:AD:DP:GL:GQ	0/1:100,46:125:-146.56,-37.68,-289.33:99
-chr1	3087853	.	C	A	11.81	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=84.96;MQ=29.13;MQ0=6;QD=0.08;SB=22.69	GT:AD:DP:GL:GQ	0/1:134,14:133:-44.49,-40.06,-434.86:44.36
-chr1	3087861	.	A	C	168.29	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=23.28;MQ=29.00;MQ0=4;QD=1.25;SB=-17.42	GT:AD:DP:GL:GQ	0/1:115,20:120:-56.26,-36.15,-379.05:99
-chr1	3087900	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=22.94;MQ=28.28;MQ0=1;OQ=423.78;QD=5.81;SB=-214.40	GT:AD:DP:GL:GQ	0/1:51,22:68:-66.15,-20.49,-189.92:99
-chr1	3087911	.	C	T	880.08	SnpCluster	AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=0;HaplotypeScore=32.89;MQ=28.46;MQ0=0;QD=12.75;SB=-315.83	GT:AD:DP:GL:GQ	0/1:40,27:49:-105.45,-14.16,-69.50:99
-chr1	3087912	.	A	G	1267.81	SnpCluster	AC=1;AF=0.50;AN=2;DP=68;Dels=0.03;HRun=1;HaplotypeScore=32.88;MQ=28.45;MQ0=0;QD=18.64;SB=-474.20	GT:AD:DP:GL:GQ	0/1:22,44:48:-143.92,-13.86,-20.32:64.59
-chr1	3087920	.	G	A	574.31	SnpCluster	AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=0;HaplotypeScore=182.60;MQ=28.60;MQ0=0;QD=7.76;SB=-289.69	GT:AD:DP:GL:GQ	0/1:50,21:71:-81.21,-20.50,-157.25:99
-chr1	3087952	.	G	A	1075.62	Indel	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=58.78;MQ=31.99;MQ0=0;QD=13.62;SB=-555.39	GT:AD:DP:GL:GQ	0/1:45,34:75:-133.45,-22.61,-136.49:99
-chr1	3087978	.	A	G	38.22	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=109;Dels=0.02;HRun=1;HaplotypeScore=54.40;MQ=36.04;MQ0=0;QD=0.35;SB=94.63	GT:AD:DP:GL:GQ	0/1:93,14:103:-37.54,-30.43,-360.90:71.06
-chr1	3088004	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=30.72;MQ=40.10;MQ0=2;OQ=423.13;QD=3.00;SB=9.29	GT:AD:DP:GL:GQ	0/1:121,20:123:-82.68,-37.08,-335.63:99
-chr1	3088013	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.03;HRun=0;HaplotypeScore=47.98;MQ=41.19;MQ0=4;OQ=426.97;QD=3.01;SB=-54.18	GT:AD:DP:GL:GQ	0/1:112,26:133:-84.85,-38.87,-412.97:99
-chr1	3088015	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=42.51;MQ=41.21;MQ0=4;OQ=465.21;QD=3.21;SB=-60.11	GT:AD:DP:GL:GQ	0/1:116,29:131:-89.28,-39.48,-409.01:99
-chr1	3088100	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=40.45;MQ0=11;OQ=130.52;QD=0.99;SB=-31.41	GT:AD:DP:GL:GQ	0/1:119,13:106:-48.30,-31.97,-302.63:99
-chr1	3088101	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=40.49;MQ0=10;OQ=71.07;QD=0.55;SB=-5.78	GT:AD:DP:GL:GQ	0/1:117,11:111:-47.37,-36.98,-326.83:99
-chr1	3088217	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=80;Dels=0.01;HRun=0;HaplotypeScore=17.08;MQ=42.86;MQ0=1;OQ=126.54;QD=1.58;SB=-85.23	GT:AD:DP:GL:GQ	0/1:66,13:74:-37.94,-22.00,-241.16:99
-chr1	3088220	rs34886760	A	G	0.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.01;HRun=1;HaplotypeScore=12.97;MQ=43.96;MQ0=1;OQ=1584.16;QD=20.84;SB=-521.89	GT:AD:DP:GL:GQ	0/1:11,64:65:-181.29,-19.59,-39.63:99
-chr1	3088304	rs61759175	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.08;HRun=0;HaplotypeScore=55.59;MQ=46.00;MQ0=11;OQ=251.71;QD=2.13;SB=81.71	GT:AD:DP:GL:GQ	0/1:90,18:102:-58.89,-30.43,-301.97:99
-chr1	3088575	rs2817134	T	C	3.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=5.64;MQ=59.45;MQ0=0;OQ=1472.39;QD=35.06;SB=-604.20	GT:AD:DP:GL:GQ	1/1:0,42:42:-150.84,-12.65,-0.02:99
-chr1	3088745	rs2651931	C	T	32.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=59.44;MQ0=0;OQ=1502.67;QD=36.65;SB=-632.85	GT:AD:DP:GL:GQ	1/1:0,40:38:-153.86,-11.45,-0.01:99
-chr1	3088761	rs2817135	T	C	98.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.39;MQ0=0;OQ=1114.54;QD=29.33;SB=-484.51	GT:AD:DP:GL:GQ	1/1:0,38:36:-115.07,-10.86,-0.04:99
-chr1	3089054	rs950200	A	G	135.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.38;MQ0=0;OQ=1494.35;QD=33.21;SB=-586.20	GT:AD:DP:GL:GQ	1/1:0,45:43:-153.04,-12.95,-0.02:99
-chr1	3091593	rs9660914	G	A	174.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=2157.13;QD=34.24;SB=-1073.97	GT:AD:DP:GL:GQ	1/1:0,63:58:-219.33,-17.49,-0.04:99
-chr1	3093686	rs4233024	C	T	199.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.75;MQ0=0;OQ=1964.65;QD=37.78;SB=-829.97	GT:AD:DP:GL:GQ	1/1:0,52:51:-200.08,-15.37,-0.03:99
-chr1	3094490	rs10752733	A	G	125.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1561.08;QD=30.61;SB=-635.88	GT:AD:DP:GL:GQ	1/1:0,51:49:-159.74,-14.78,-0.04:99
-chr1	3094942	rs2817136	G	A	89.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1690.06;QD=36.74;SB=-568.32	GT:AD:DP:GL:GQ	1/1:0,46:44:-172.61,-13.26,-0.02:99
-chr1	3095136	rs2817138	T	G	4.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=58.92;MQ0=0;OQ=1072.43;QD=24.94;SB=-511.45	GT:AD:DP:GL:GQ	1/1:0,43:37:-110.87,-11.16,-0.04:99
-chr1	3095423	rs2651919	G	T	722.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2110.88;QD=35.78;SB=-952.39	GT:AD:DP:GL:GQ	1/1:0,59:58:-214.69,-17.47,-0.02:99
-chr1	3095697	rs2651918	T	C	14.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=3.68;MQ=59.20;MQ0=0;OQ=1955.56;QD=33.72;SB=-956.98	GT:AD:DP:GL:GQ	1/1:0,58:55:-199.16,-16.57,-0.02:99
-chr1	3095769	rs2817139	A	G	514.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=1684.86;QD=27.18;SB=-755.66	GT:AD:DP:GL:GQ	1/1:0,62:53:-172.12,-15.99,-0.05:99
-chr1	3095922	rs7530075	G	A	526.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1784.81;QD=39.66;SB=-851.64	GT:AD:DP:GL:GQ	1/1:0,45:45:-182.08,-13.55,-0.01:99
-chr1	3096128	rs2651917	C	G	97.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.80;MQ0=0;OQ=1717.27;QD=36.54;SB=-542.46	GT:AD:DP:GL:GQ	1/1:0,47:42:-175.34,-12.67,-0.03:99
-chr1	3096165	rs7545798	A	G	335.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=1218.45;QD=30.46;SB=-546.04	GT:AD:DP:GL:GQ	1/1:0,40:39:-125.47,-11.76,-0.04:99
-chr1	3096243	rs7545871	A	G	179.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1274.76;QD=30.35;SB=-481.26	GT:AD:DP:GL:GQ	1/1:0,42:39:-131.09,-11.76,-0.02:99
-chr1	3096257	rs2651916	C	T	670.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1810.18;QD=36.20;SB=-763.02	GT:AD:DP:GL:GQ	1/1:0,50:47:-184.62,-14.16,-0.02:99
-chr1	3096476	rs2817140	A	G	6.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1038.30;QD=28.84;SB=-515.16	GT:AD:DP:GL:GQ	1/1:0,36:34:-107.45,-10.26,-0.04:99
-chr1	3096661	rs61759179	G	A	1.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.55;MQ=53.62;MQ0=2;OQ=1172.74;QD=30.07;SB=-520.65	GT:AD:DP:GL:GQ	1/1:8,31:31:-120.87,-9.34,-0.01:93.29
-chr1	3096814	rs2817141	T	C	22.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=1.30;MQ=59.19;MQ0=0;OQ=1269.17;QD=27.59;SB=-620.79	GT:AD:DP:GL:GQ	1/1:0,46:42:-130.56,-12.68,-0.06:99
-chr1	3097140	rs1875451	C	T	277.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.63;MQ0=0;OQ=1807.86;QD=35.45;SB=-805.30	GT:AD:DP:GL:GQ	1/1:0,51:46:-184.39,-13.86,-0.02:99
-chr1	3098276	rs2651914	T	G	143.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=2148.66;QD=35.22;SB=-1029.38	GT:AD:DP:GL:GQ	1/1:0,61:61:-218.47,-18.37,-0.02:99
-chr1	3098356	rs10737190	G	A	615.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=3298.92;QD=39.75;SB=-1410.68	GT:AD:DP:GL:GQ	1/1:0,83:81:-328.89,-24.40,-0.02:99
-chr1	3098377	rs6685614	G	A	280.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.78;MQ0=0;OQ=3233.06;QD=38.95;SB=-1261.68	GT:AD:DP:GL:GQ	1/1:0,83:82:-327.11,-24.71,-0.03:99
-chr1	3099011	rs7539775	G	A	230.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.47;MQ0=0;OQ=1818.76;QD=34.98;SB=-678.01	GT:AD:DP:GL:GQ	1/1:1,51:49:-188.18,-14.77,-2.72:99
-chr1	3100277	rs2651913	C	G	465.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1755.38;QD=41.79;SB=-899.81	GT:AD:DP:GL:GQ	1/1:0,42:41:-179.13,-12.35,-0.01:99
-chr1	3100595	rs2651912	T	C	68.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=4.22;MQ=58.95;MQ0=0;OQ=646.58;QD=10.43;SB=-279.12	GT:AD:DP:GL:GQ	0/1:33,29:56:-84.82,-16.88,-119.30:99
-chr1	3104232	.	G	A	37.52	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=60.00;MQ0=0;OQ=572.60;QD=16.36;SB=-260.57	GT:AD:DP:GL:GQ	0/1:16,19:33:-70.49,-9.94,-51.89:99
-chr1	3105581	rs950449	C	G	114.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=352.20;QD=14.09;SB=-136.76	GT:AD:DP:GL:GQ	0/1:14,11:24:-45.74,-7.23,-56.39:99
-chr1	3106518	rs2651923	T	C	555.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=1262.70;QD=28.70;SB=-607.93	GT:AD:DP:GL:GQ	1/1:0,44:40:-129.89,-12.07,-0.04:99
-chr1	3110061	rs2817142	T	C	84.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=58.76;MQ0=0;OQ=950.22;QD=27.95;SB=-463.20	GT:AD:DP:GL:GQ	1/1:1,33:31:-98.64,-9.35,-0.03:93.20
-chr1	3113619	rs2817143	T	C	475.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1485.25;QD=30.31;SB=-541.01	GT:AD:DP:GL:GQ	1/1:0,49:46:-152.15,-13.87,-0.04:99
-chr1	3119305	.	C	T	6.85	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=482.22;QD=12.06;SB=-197.28	GT:AD:DP:GL:GQ	0/1:23,17:38:-62.96,-11.45,-76.10:99
-chr1	3119433	rs60892783	T	A	341.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.85;MQ0=0;OQ=778.15;QD=15.26;SB=-381.44	GT:AD:DP:GL:GQ	0/1:26,25:51:-96.46,-15.36,-96.60:99
-chr1	3124191	rs12124147	C	T	18.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=2106.36;QD=38.30;SB=-923.21	GT:AD:DP:GL:GQ	1/1:0,55:54:-214.24,-16.27,-0.02:99
-chr1	3125697	.	G	A	48.02	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=59.58;MQ0=0;OQ=894.40;QD=16.26;SB=-426.44	GT:AD:DP:GL:GQ	0/1:28,27:53:-108.70,-15.98,-81.48:99
-chr1	3133804	rs10737191	T	C	216.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.05;MQ0=0;OQ=1310.90;QD=29.79;SB=-629.85	GT:AD:DP:GL:GQ	1/1:0,44:43:-134.73,-12.98,-0.05:99
-chr1	3137939	rs2651921	T	C	31.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=57.88;MQ0=0;OQ=1318.12;QD=31.38;SB=-539.87	GT:AD:DP:GL:GQ	1/1:0,42:38:-135.41,-11.45,-0.01:99
-chr1	3139859	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=4;HaplotypeScore=1.59;MQ=58.84;MQ0=0;OQ=177.35;QD=4.43;SB=56.21	GT:AD:DP:GL:GQ	0/1:24,16:34:-31.27,-10.25,-94.47:99
-chr1	3140395	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=11.19;MQ=58.95;MQ0=0;OQ=93.28;QD=2.12;SB=71.27	GT:AD:DP:GL:GQ	0/1:31,13:33:-22.56,-9.95,-125.01:99
-chr1	3146326	rs2455112	A	G	135.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=60.00;MQ0=0;OQ=1096.93;QD=16.88;SB=-503.18	GT:AD:DP:GL:GQ	0/1:28,37:65:-132.56,-19.58,-110.95:99
-chr1	3151094	.	T	G	27.85	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=10.51;MQ=58.72;MQ0=0;QD=0.55;SB=62.22	GT:AD:DP:GL:GQ	0/1:29,22:34:-16.31,-10.24,-101.82:60.68
-chr1	3154977	.	C	T	20.55	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.05;MQ0=0;OQ=960.26;QD=19.60;SB=-359.36	GT:AD:DP:GL:GQ	0/1:20,29:48:-113.77,-14.46,-73.03:99
-chr1	3155966	rs1105111	C	A	740.08	Indel	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=60.39;MQ0=0;QD=13.46;SB=-187.60	GT:AD:DP:GL:GQ	0/1:28,27:54:-93.56,-16.26,-102.62:99
-chr1	3156860	.	C	A	1.29	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.70;MQ=59.41;MQ0=0;OQ=714.68;QD=18.33;SB=-335.33	GT:AD:DP:GL:GQ	0/1:15,24:39:-86.50,-11.75,-50.10:99
-chr1	3157063	rs60443258	C	G	197.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.43;MQ0=0;OQ=467.30;QD=14.16;SB=-190.23	GT:AD:DP:GL:GQ	0/1:18,15:33:-59.97,-9.95,-75.73:99
-chr1	3158034	rs11589327	C	T	221.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=55.82;MQ0=0;OQ=602.02;QD=14.68;SB=-226.92	GT:AD:DP:GL:GQ	0/1:22,19:39:-75.24,-11.75,-65.81:99
-chr1	3158063	rs61759183	G	A	105.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=54.25;MQ0=0;OQ=859.64;QD=18.29;SB=-349.39	GT:AD:DP:GL:GQ	0/1:17,30:44:-102.53,-13.28,-49.01:99
-chr1	3158107	rs55987640	G	A	184.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=55.61;MQ0=0;OQ=836.43;QD=16.73;SB=-292.80	GT:AD:DP:GL:GQ	0/1:21,29:42:-99.58,-12.65,-57.74:99
-chr1	3158110	rs10909910	G	C	37.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=55.78;MQ0=0;OQ=2043.92;QD=39.31;SB=-983.24	GT:AD:DP:GL:GQ	1/1:0,52:49:-208.00,-14.77,-0.02:99
-chr1	3158140	rs10797386	A	G	147.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=58.66;MQ0=0;OQ=1752.75;QD=33.71;SB=-820.65	GT:AD:DP:GL:GQ	1/1:0,52:49:-178.87,-14.76,-0.02:99
-chr1	3158322	rs12143201	C	T	107.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=58.81;MQ0=0;OQ=1087.80;QD=19.78;SB=-426.85	GT:AD:DP:GL:GQ	0/1:23,32:54:-128.34,-16.28,-69.54:99
-chr1	3158948	rs7539489	G	A	212.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=59.50;MQ0=0;OQ=701.66;QD=15.25;SB=-203.89	GT:AD:DP:GL:GQ	0/1:22,24:42:-86.11,-12.66,-64.73:99
-chr1	3160428	rs56015432	C	G	319.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=42.71;MQ0=18;OQ=1056.37;QD=11.61;SB=-361.10	GT:AD:DP:GL:GQ	0/1:52,38:68:-131.78,-22.86,-160.18:99
-chr1	3160647	rs2376494	T	C	490.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.54;MQ0=5;OQ=1049.98;QD=13.46;SB=-449.81	GT:AD:DP:GL:GQ	0/1:34,44:69:-129.08,-20.80,-121.01:99
-chr1	3160969	rs61691507	T	C	83.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=3;HaplotypeScore=0.96;MQ=48.88;MQ0=0;OQ=936.08;QD=14.18;SB=-414.90	GT:AD:DP:GL:GQ	0/1:32,34:63:-115.87,-18.98,-126.60:99
-chr1	3161244	rs28883366	T	C	328.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=20.07;MQ0=44;OQ=827.10;QD=11.18;SB=-204.07	GT:AD:DP:GL:GQ	1/1:25,49:28:-86.33,-8.45,-0.03:84.18
-chr1	3161789	rs4648464	G	A	197.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=53.22;MQ0=0;OQ=1078.68;QD=20.35;SB=-414.45	GT:AD:DP:GL:GQ	0/1:21,32:51:-126.53,-15.37,-60.62:99
-chr1	3161922	rs4648465	G	A	93.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=50.73;MQ0=0;OQ=1117.60;QD=22.35;SB=-454.98	GT:AD:DP:GL:GQ	0/1:18,32:50:-130.11,-15.06,-59.43:99
-chr1	3162133	rs2455100	T	C	1.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=58.24;MQ0=0;OQ=1353.88;QD=28.21;SB=-366.45	GT:AD:DP:GL:GQ	1/1:0,48:45:-139.02,-13.58,-0.05:99
-chr1	3162911	rs6699624	G	C	272.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.50;MQ0=0;OQ=1093.08;QD=16.07;SB=-449.43	GT:AD:DP:GL:GQ	0/1:32,35:63:-131.59,-19.00,-134.16:99
-chr1	3163088	rs1971330	C	T	114.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=49.78;MQ0=0;OQ=900.72;QD=19.58;SB=-445.49	GT:AD:DP:GL:GQ	0/1:19,27:44:-106.61,-13.25,-68.73:99
-chr1	3163142	rs1971331	A	G	155.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=39.25;MQ0=0;OQ=1400.23;QD=30.44;SB=-715.29	GT:AD:DP:GL:GQ	1/1:0,46:45:-143.65,-13.57,-0.04:99
-chr1	3165231	rs10909912	T	G	383.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.06;MQ0=0;OQ=430.36;QD=10.76;SB=-234.78	GT:AD:DP:GL:GQ	0/1:20,20:39:-58.07,-11.75,-73.52:99
-chr1	3165588	rs2455101	A	G	194.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.36;MQ0=0;OQ=514.34;QD=12.86;SB=-185.55	GT:AD:DP:GL:GQ	0/1:18,22:37:-65.87,-11.15,-65.63:99
-chr1	3165783	.	C	T	13.80	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=427.64;QD=9.30;SB=-160.18	GT:AD:DP:GL:GQ	0/1:30,16:42:-58.70,-12.66,-94.89:99
-chr1	3166230	.	C	G	139.63	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=825.87;QD=15.88;SB=-367.51	GT:AD:DP:GL:GQ	0/1:23,29:49:-100.65,-14.78,-100.14:99
-chr1	3167106	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=181.43;MQ=36.47;MQ0=0;OQ=530.53;QD=4.31;SB=-209.32	GT:AD:DP:GL:GQ	0/1:66,39:92:-95.27,-38.93,-253.94:99
-chr1	3167116	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=174;Dels=0.01;HRun=1;HaplotypeScore=260.94;MQ=34.61;MQ0=0;OQ=942.41;QD=5.42;SB=-369.43	GT:AD:DP:GL:GQ	0/1:66,57:123:-208.12,-110.59,-323.19:99
-chr1	3167119	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=217.51;MQ=34.08;MQ0=0;OQ=198.48;QD=1.04;SB=93.36	GT:AD:DP:GL:GQ	0/1:148,42:118:-61.70,-38.57,-398.62:99
-chr1	3167131	.	G	A	38.92	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=418.78;MQ=33.67;MQ0=0;QD=0.18;SB=-15.26	GT:AD:DP:GL:GQ	0/1:171,44:118:-42.73,-35.55,-373.47:71.75
-chr1	3167160	.	G	A	609.50	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=0;HaplotypeScore=319.28;MQ=32.32;MQ0=1;QD=3.21;SB=-149.32	GT:AD:DP:GL:GQ	0/1:134,56:72:-85.93,-21.70,-173.92:99
-chr1	3167161	.	T	C	245.51	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=318.96;MQ=32.30;MQ0=1;QD=1.31;SB=53.20	GT:AD:DP:GL:GQ	0/1:174,14:59:-45.63,-17.79,-171.10:99
-chr1	3167162	.	G	A	200.87	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=336.60;MQ=32.32;MQ0=1;QD=1.07;SB=56.18	GT:AD:DP:GL:GQ	0/1:174,10:62:-51.08,-27.71,-180.52:99
-chr1	3167163	.	G	A	107.11	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=325.93;MQ=32.20;MQ0=1;QD=0.58;SB=-62.93	GT:AD:DP:GL:GQ	0/1:163,18:64:-33.28,-19.29,-195.22:99
-chr1	3167166	.	A	G	243.37	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=314.12;MQ=31.98;MQ0=1;QD=1.36;SB=56.35	GT:AD:DP:GL:GQ	0/1:138,41:62:-46.30,-18.68,-187.52:99
-chr1	3167169	.	A	G	120.84	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=1;HaplotypeScore=387.92;MQ=32.13;MQ0=1;QD=0.65;SB=76.41	GT:AD:DP:GL:GQ	0/1:141,44:79:-39.18,-23.81,-262.75:99
-chr1	3167180	rs57179041	G	A	114.65	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=408.58;MQ=31.71;MQ0=1;QD=0.81;SB=86.30	GT:AD:DP:GL:GQ	0/1:118,23:43:-27.70,-12.95,-132.25:99
-chr1	3167181	.	A	G	38.85	DPFilter;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=419.93;MQ=31.63;MQ0=1;QD=0.28;SB=86.30	GT:AD:DP:GL:GQ	0/1:108,33:42:-19.82,-12.66,-143.77:71.68
-chr1	3167187	.	T	C	11.48	DPFilter;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=120;Dels=0.41;HRun=0;HaplotypeScore=330.20;MQ=31.90;MQ0=1;QD=0.10;SB=5.04	GT:AD:DP:GL:GQ	0/1:52,5:44:-17.05,-12.65,-148.02:44
-chr1	3167189	.	G	A	33.08	DPFilter;Indel;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=123;Dels=0.12;HRun=1;HaplotypeScore=208.65;MQ=32.18;MQ0=1;QD=0.27;SB=8.05	GT:AD:DP:GL:GQ	0/1:103,5:46:-20.45,-13.86,-154.58:65.91
-chr1	3167200	rs57648616	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=125.27;MQ=33.30;MQ0=1;OQ=406.22;QD=3.41;SB=39.53	GT:AD:DP:GL:GQ	0/1:44,74:56:-63.73,-19.82,-152.72:99
-chr1	3167205	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=1;HaplotypeScore=95.81;MQ=33.44;MQ0=1;OQ=560.09;QD=4.87;SB=72.41	GT:AD:DP:GL:GQ	0/1:70,45:71:-80.68,-21.39,-190.32:99
-chr1	3167222	rs57879698	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=105.67;MQ=36.94;MQ0=1;OQ=371.38;QD=4.08;SB=65.41	GT:AD:DP:GL:GQ	0/1:54,36:67:-60.61,-20.18,-198.91:99
-chr1	3167226	.	A	G	25.97	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=94.17;MQ=37.02;MQ0=1;QD=0.29;SB=104.36	GT:AD:DP:GL:GQ	0/1:77,13:68:-26.37,-20.49,-239.07:58.80
-chr1	3167247	.	A	G	94.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=9.30;MQ=43.30;MQ0=0;QD=1.30;SB=66.40	GT:AD:DP:GL:GQ	0/1:60,13:64:-32.03,-19.29,-213.53:99
-chr1	3167248	rs61151413	C	T	166.25	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=15.29;MQ=43.46;MQ0=0;QD=2.31;SB=80.73	GT:AD:DP:GL:GQ	0/1:59,13:65:-39.51,-19.60,-174.44:99
-chr1	3167253	.	A	G	43.60	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=1;HaplotypeScore=18.65;MQ=43.75;MQ0=0;QD=0.56;SB=110.39	GT:AD:DP:GL:GQ	0/1:68,10:69:-28.43,-20.79,-243.20:76.44
-chr1	3167258	.	G	A	29.42	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=1;HaplotypeScore=29.46;MQ=43.75;MQ0=0;QD=0.38;SB=107.33	GT:AD:DP:GL:GQ	0/1:71,7:70:-27.32,-21.09,-225.20:62.25
-chr1	3167340	rs3002685	A	G	235.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=44.86;MQ0=0;OQ=812.94;QD=11.29;SB=-432.88	GT:AD:DP:GL:GQ	0/1:35,37:64:-103.87,-19.29,-131.86:99
-chr1	3167551	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=15;HaplotypeScore=12.64;MQ=52.48;MQ0=0;OQ=368.96;QD=5.95;SB=77.28	GT:AD:DP:GL:GQ	0/1:44,18:52:-55.84,-15.67,-137.44:99
-chr1	3168576	.	C	T	188.74	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.69;MQ0=0;OQ=823.49;QD=13.72;SB=-404.84	GT:AD:DP:GL:GQ	0/1:34,26:58:-103.11,-17.48,-109.21:99
-chr1	3169081	.	C	T	79.34	PASS	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.66;MQ0=0;OQ=1096.77;QD=16.37;SB=-547.56	GT:AD:DP:GL:GQ	0/1:32,35:63:-131.94,-18.98,-108.41:99
-chr1	3169567	rs1501611	G	A	10.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=8.26;MQ=58.29;MQ0=0;OQ=520.16;QD=12.69;SB=-281.22	GT:AD:DP:GL:GQ	0/1:21,20:36:-66.15,-10.85,-62.40:99
-chr1	3169746	rs2455106	G	C	285.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1036.68;QD=23.56;SB=-535.79	GT:AD:DP:GL:GQ	0/1:15,29:43:-119.91,-12.96,-65.17:99
-chr1	3170018	rs2455107	T	G	277.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.50;MQ0=0;OQ=669.75;QD=14.56;SB=-280.87	GT:AD:DP:GL:GQ	0/1:21,25:42:-82.91,-12.65,-66.12:99
-chr1	3170493	rs2455102	A	G	356.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.62;MQ0=0;OQ=653.73;QD=10.21;SB=-205.32	GT:AD:DP:GL:GQ	0/1:37,27:63:-87.64,-18.99,-144.47:99
-chr1	3170958	.	C	T	1.10	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.86;MQ=59.55;MQ0=0;OQ=1035.67;QD=20.31;SB=-528.11	GT:AD:DP:GL:GQ	0/1:20,31:50:-121.92,-15.07,-64.72:99
-chr1	3171559	rs2500250	T	C	389.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=559.12;QD=10.55;SB=-252.33	GT:AD:DP:GL:GQ	0/1:30,23:52:-74.86,-15.66,-123.43:99
-chr1	3171782	rs10909913	A	G	116.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.90;MQ=59.63;MQ0=0;OQ=1003.48;QD=15.93;SB=-509.29	GT:AD:DP:GL:GQ	0/1:27,35:61:-122.01,-18.38,-106.15:99
-chr1	3172391	rs2455096	A	C	43.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=287.98;QD=8.47;SB=-120.97	GT:AD:DP:GL:GQ	0/1:18,16:31:-41.43,-9.34,-63.22:99
-chr1	3172429	rs56042628	C	T	96.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=280.31;QD=9.34;SB=-80.59	GT:AD:DP:GL:GQ	0/1:19,11:28:-39.76,-8.44,-58.47:99
-chr1	3173020	rs2455094	G	A	166.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=59.53;MQ0=0;OQ=444.07;QD=11.10;SB=-203.69	GT:AD:DP:GL:GQ	0/1:22,17:34:-57.94,-10.25,-64.34:99
-chr1	3173727	rs2455093	A	G	256.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=832.24;QD=16.98;SB=-357.94	GT:AD:DP:GL:GQ	0/1:20,29:47:-100.67,-14.16,-75.12:99
-chr1	3174715	rs2455119	G	T	285.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.49;MQ0=0;OQ=576.42;QD=12.81;SB=-209.45	GT:AD:DP:GL:GQ	0/1:23,22:42:-73.58,-12.65,-77.54:99
-chr1	3176001	.	C	T	83.35	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.70;MQ0=0;OQ=696.01;QD=13.92;SB=-293.84	GT:AD:DP:GL:GQ	0/1:26,23:46:-86.76,-13.88,-73.45:99
-chr1	3176267	.	T	G	76.55	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=60.00;MQ0=0;OQ=841.56;QD=14.76;SB=-394.65	GT:AD:DP:GL:GQ	0/1:27,30:56:-104.31,-16.87,-93.27:99
-chr1	3177045	rs3002687	T	G	225.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=59.59;MQ0=0;OQ=571.62;QD=12.43;SB=-258.88	GT:AD:DP:GL:GQ	0/1:24,22:45:-74.00,-13.56,-84.05:99
-chr1	3177468	.	C	T	3.04	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.42;MQ0=0;OQ=538.59;QD=16.83;SB=-100.92	GT:AD:DP:GL:GQ	0/1:14,18:31:-66.48,-9.34,-49.83:99
-chr1	3177939	rs2500308	A	G	95.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=59.39;MQ0=0;OQ=763.00;QD=10.04;SB=-332.88	GT:AD:DP:GL:GQ	0/1:45,31:71:-100.98,-21.39,-171.46:99
-chr1	3178661	.	G	A	33.39	PASS	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=60.00;MQ0=0;OQ=796.34;QD=18.96;SB=-401.21	GT:AD:DP:GL:GQ	0/1:18,24:42:-95.58,-12.66,-58.00:99
-chr1	3178998	rs2455127	A	G	173.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=58.67;MQ0=0;OQ=507.17;QD=14.49;SB=-257.35	GT:AD:DP:GL:GQ	0/1:11,24:30:-63.05,-9.05,-41.23:99
-chr1	3179379	.	A	G	65.56	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.32;MQ0=0;OQ=481.41;QD=12.34;SB=-241.93	GT:AD:DP:GL:GQ	0/1:18,21:37:-62.58,-11.16,-65.22:99
-chr1	3179574	rs2455128	A	G	108.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.62;MQ0=0;OQ=838.70;QD=13.98;SB=-378.24	GT:AD:DP:GL:GQ	0/1:31,29:59:-104.93,-17.77,-121.27:99
-chr1	3179592	rs2500307	T	A	726.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2101.50;QD=36.23;SB=-987.86	GT:AD:DP:GL:GQ	1/1:0,58:58:-213.75,-17.47,-0.02:99
-chr1	3182386	rs2500304	T	C	246	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.51;MQ0=0;OQ=550.86;QD=11.72;SB=-174.37	GT:AD:DP:GL:GQ	0/1:23,24:45:-71.94,-13.57,-90.75:99
-chr1	3182819	rs2455131	A	G	160.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=53.72;MQ0=0;OQ=380.67;QD=9.28;SB=-185.58	GT:AD:DP:GL:GQ	0/1:26,15:41:-53.71,-12.35,-99.70:99
-chr1	3183091	.	T	G	31.12	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.54;MQ=48.96;MQ0=0;QD=0.80;SB=16.16	GT:AD:DP:GL:GQ	0/1:34,5:37:-17.54,-11.14,-116.34:63.95
-chr1	3183092	.	C	A	30.14	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=9.54;MQ=48.87;MQ0=0;QD=0.74;SB=14.77	GT:AD:DP:GL:GQ	0/1:36,5:37:-17.45,-11.16,-100.79:62.97
-chr1	3183861	rs55923982	G	C	139.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.45;MQ0=0;OQ=542.30;QD=11.79;SB=-148.38	GT:AD:DP:GL:GQ	0/1:27,19:44:-70.78,-13.27,-111.52:99
-chr1	3184193	rs2455115	A	G	314.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=53.52;MQ0=0;OQ=598.87;QD=12.22;SB=-281.59	GT:AD:DP:GL:GQ	0/1:25,24:48:-77.64,-14.47,-94.87:99
-chr1	3185401	.	G	T	101.68	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.51;MQ0=0;OQ=440.43;QD=11.59;SB=-233.97	GT:AD:DP:GL:GQ	0/1:19,19:33:-57.27,-9.94,-56.75:99
-chr1	3187015	.	G	A	77.56	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=59.67;MQ0=0;OQ=971.62;QD=17.05;SB=-421.44	GT:AD:DP:GL:GQ	0/1:28,29:55:-117.01,-16.57,-95.93:99
-chr1	3188693	rs905137	A	G	186.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=484.36;QD=10.09;SB=-266.22	GT:AD:DP:GL:GQ	0/1:25,23:44:-64.98,-13.26,-96.26:99
-chr1	3189244	rs905136	A	G	4.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=4;HaplotypeScore=2.03;MQ=60.00;MQ0=0;OQ=654.87;QD=15.97;SB=-328.31	GT:AD:DP:GL:GQ	0/1:18,23:38:-80.22,-11.45,-60.36:99
-chr1	3189344	rs905135	A	C	1.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=6.41;MQ=59.54;MQ0=0;OQ=215.02;QD=4.30;SB=-100.13	GT:AD:DP:GL:GQ	0/1:35,15:44:-38.04,-13.26,-114.24:99
-chr1	3189859	rs2500302	T	C	241.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.92;MQ0=0;OQ=339.74;QD=8.71;SB=-144.67	GT:AD:DP:GL:GQ	0/1:23,16:37:-48.41,-11.15,-86.58:99
-chr1	3190143	rs56004439	G	A	2.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=8.41;MQ=57.37;MQ0=0;OQ=401.65;QD=8.37;SB=-155.21	GT:AD:DP:GL:GQ	0/1:33,15:46:-57.32,-13.87,-99.82:99
-chr1	3190754	.	G	A	32.75	PASS	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1225.08;QD=18.85;SB=-426.92	GT:AD:DP:GL:GQ	0/1:29,36:64:-145.07,-19.28,-99.09:99
-chr1	3190930	rs6685398	C	A	88.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=4.12;MQ=60.00;MQ0=0;OQ=531.21;QD=13.28;SB=-273.35	GT:AD:DP:GL:GQ	0/1:21,19:39:-68.15,-11.75,-68.57:99
-chr1	3190993	rs6690217	A	C	128.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1454.60;QD=28.52;SB=-648.68	GT:AD:DP:GL:GQ	1/1:0,51:48:-149.09,-14.47,-0.05:99
-chr1	3192051	.	C	T	11.01	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.25;MQ0=0;OQ=927.90;QD=18.56;SB=-215.90	GT:AD:DP:GL:GQ	0/1:20,30:48:-110.53,-14.46,-70.14:99
-chr1	3192870	rs10797387	A	C	142.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.89;MQ=59.80;MQ0=0;OQ=775.82;QD=12.93;SB=-322.85	GT:AD:DP:GL:GQ	0/1:30,30:54:-97.13,-16.27,-96.18:99
-chr1	3193262	.	A	G	27.47	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=435.09;QD=14.04;SB=-158.61	GT:AD:DP:GL:GQ	0/1:13,18:29:-55.53,-8.74,-48.24:99
-chr1	3193691	rs12024838	G	C	0.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=9.20;MQ=52.13;MQ0=0;OQ=313.95;QD=12.08;SB=-105.65	GT:AD:DP:GL:GQ	0/1:16,10:19:-40.41,-5.73,-35.18:99
-chr1	3193692	rs61759191	C	T	0.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=52.13;MQ0=0;OQ=179.56;QD=6.91;SB=-26.50	GT:AD:DP:GL:GQ	0/1:18,8:19:-26.97,-5.73,-38.66:99
-chr1	3193738	rs10909916	C	G	2.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=6.33;MQ=40.46;MQ0=4;OQ=154.87;QD=11.06;SB=-44.90	GT:AD:DP:GL:GQ	0/1:9,5:7:-20.88,-2.11,-8.99:68.77
-chr1	3194086	rs6687930	T	C	3.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=48.01;MQ0=1;OQ=344.21;QD=18.12;SB=-6.99	GT:AD:DP:GL:GQ	0/1:2,17:14:-41.92,-4.22,-8.13:39.10
-chr1	3194355	rs2134119	C	G	59.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.23;MQ=54.23;MQ0=0;OQ=781.76;QD=15.95;SB=-353.76	GT:AD:DP:GL:GQ	0/1:22,27:44:-94.74,-13.28,-81.77:99
-chr1	3194394	rs2455117	T	A	339.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.31;MQ0=0;OQ=679.10;QD=15.43;SB=-276.72	GT:AD:DP:GL:GQ	0/1:22,22:42:-83.84,-12.65,-73.08:99
-chr1	3197040	rs2250291	C	T	260.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.34;MQ0=0;OQ=469.67;QD=13.42;SB=-216.70	GT:AD:DP:GL:GQ	0/1:18,17:34:-60.50,-10.25,-62.96:99
-chr1	3197640	rs55866132	G	A	241.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=60.00;MQ0=0;OQ=793.46;QD=13.45;SB=-307.77	GT:AD:DP:GL:GQ	0/1:34,25:59:-100.40,-17.77,-123.91:99
-chr1	3197902	rs2500297	C	T	238.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=60.00;MQ0=0;OQ=756.06;QD=14.00;SB=-170.24	GT:AD:DP:GL:GQ	0/1:30,24:49:-93.65,-14.77,-87.43:99
-chr1	3198235	rs10909918	A	G	238.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=490.49;QD=8.92;SB=-208.46	GT:AD:DP:GL:GQ	0/1:32,23:51:-67.70,-15.37,-121.94:99
-chr1	3198466	.	G	A	262.64	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=604.73;QD=12.34;SB=-281.22	GT:AD:DP:GL:GQ	0/1:28,21:46:-77.62,-13.87,-86.11:99
-chr1	3199356	rs2500295	T	C	571.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=1482.44;QD=28.51;SB=-763.58	GT:AD:DP:GL:GQ	1/1:0,52:48:-151.88,-14.48,-0.05:99
-chr1	3199491	rs4648376	G	A	14.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=4.90;MQ=58.90;MQ0=0;OQ=2231.72;QD=37.83;SB=-1015.37	GT:AD:DP:GL:GQ	1/1:0,59:58:-226.79,-17.49,-0.03:99
-chr1	3199627	rs2500294	C	T	622.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=2326.22;QD=38.77;SB=-1091.37	GT:AD:DP:GL:GQ	1/1:0,60:58:-236.22,-17.47,-0.02:99
-chr1	3199783	rs1553291	A	G	564.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=1581.83;QD=29.29;SB=-575.98	GT:AD:DP:GL:GQ	1/1:0,54:51:-161.82,-15.38,-0.05:99
-chr1	3200187	.	C	T	35.88	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.26;MQ=59.60;MQ0=0;OQ=491.30;QD=10.45;SB=-217.71	GT:AD:DP:GL:GQ	0/1:29,18:43:-65.37,-12.96,-91.60:99
-chr1	3200810	rs4648468	A	G	447.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1398.57;QD=30.40;SB=-596.06	GT:AD:DP:GL:GQ	1/1:0,46:43:-143.47,-12.96,-0.03:99
-chr1	3201105	rs10047257	C	T	220.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=596.34;QD=15.29;SB=-318.86	GT:AD:DP:GL:GQ	0/1:20,19:38:-74.37,-11.45,-63.70:99
-chr1	3201318	rs4648377	A	C	538.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1615.09;QD=33.65;SB=-661.05	GT:AD:DP:GL:GQ	1/1:0,48:47:-165.11,-14.16,-0.02:99
-chr1	3201410	rs4648469	A	G	202.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1230.36;QD=30.76;SB=-513.23	GT:AD:DP:GL:GQ	1/1:0,39:38:-126.64,-11.45,-0.02:99
-chr1	3201613	rs4648470	C	T	79.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1081.89;QD=24.59;SB=-515.59	GT:AD:DP:GL:GQ	0/1:12,32:43:-124.44,-12.96,-36.35:99
-chr1	3202053	rs2500292	A	G	471	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1432.25;QD=32.55;SB=-511.16	GT:AD:DP:GL:GQ	1/1:0,44:41:-146.83,-12.35,-0.02:99
-chr1	3202174	rs2500291	C	T	728.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2429.46;QD=38.56;SB=-1207.61	GT:AD:DP:GL:GQ	1/1:1,62:61:-246.55,-18.37,-0.01:99
-chr1	3202451	rs2500290	G	C	18.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=58.98;MQ0=0;OQ=1616.44;QD=39.43;SB=-797.54	GT:AD:DP:GL:GQ	1/1:0,41:39:-165.25,-11.76,-0.02:99
-chr1	3202782	rs1875452	C	G	157.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.36;MQ=59.54;MQ0=0;OQ=2035.33;QD=40.71;SB=-884.21	GT:AD:DP:GL:GQ	1/1:0,50:48:-207.14,-14.47,-0.02:99
-chr1	3202806	rs2500289	A	G	260.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.19;MQ0=0;OQ=1923.10;QD=33.74;SB=-724.29	GT:AD:DP:GL:GQ	1/1:0,57:54:-195.91,-16.27,-0.02:99
-chr1	3203962	rs2500288	T	C	186.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.58;MQ0=0;OQ=1801.36;QD=32.75;SB=-828.32	GT:AD:DP:GL:GQ	1/1:0,55:51:-183.74,-15.36,-0.02:99
-chr1	3204030	rs7553849	T	C	226.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=56.20;MQ0=0;OQ=1684.70;QD=29.05;SB=-851.52	GT:AD:DP:GL:GQ	1/1:0,58:53:-172.10,-15.99,-0.05:99
-chr1	3204380	rs10442593	A	G	67.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=958.98;QD=29.97;SB=-369.57	GT:AD:DP:GL:GQ	1/1:0,32:28:-99.49,-8.43,-0.01:84.24
-chr1	3204592	rs2455144	A	G	617.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2332.51;QD=29.90;SB=-1027.75	GT:AD:DP:GL:GQ	1/1:0,78:74:-236.91,-22.33,-0.08:99
-chr1	3204835	.	G	A	53.06	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.06;MQ=60.00;MQ0=0;OQ=892.55;QD=15.13;SB=-296.23	GT:AD:DP:GL:GQ	0/1:30,29:55:-109.11,-16.57,-93.52:99
-chr1	3204852	rs2500287	G	T	86	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=2470.97;QD=33.85;SB=-613.02	GT:AD:DP:GL:GQ	1/1:1,71:71:-250.71,-21.39,-0.03:99
-chr1	3205054	.	A	G	35.05	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=60.00;MQ0=0;OQ=563.88;QD=10.44;SB=-299.62	GT:AD:DP:GL:GQ	0/1:29,25:52:-75.34,-15.67,-118.24:99
-chr1	3205180	rs2455143	A	T	124.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=58.71;MQ0=0;OQ=2383.23;QD=36.67;SB=-1091.65	GT:AD:DP:GL:GQ	1/1:0,65:64:-241.93,-19.28,-0.02:99
-chr1	3205492	rs2455142	T	G	512.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.74;MQ0=0;OQ=2083.81;QD=29.77;SB=-759.91	GT:AD:DP:GL:GQ	1/1:0,70:70:-212.03,-21.10,-0.07:99
-chr1	3205734	rs2455141	A	C	27.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=40.69;MQ0=0;OQ=504.37;QD=19.40;SB=-155.27	GT:AD:DP:GL:GQ	1/1:2,24:21:-57.94,-6.33,-3.92:24.11
-chr1	3205761	rs2455140	T	G	0.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=22.97;MQ0=1;OQ=235.32;QD=18.10;SB=-39.00	GT:AD:DP:GL:GQ	0/1:2,10:9:-29.50,-2.71,-3.64:9.30
-chr1	3205805	rs12728296	T	C	26.83	LowQual	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=13.68;MQ0=0;QD=1.79;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:2:-6.09,-0.60,-0.00:6.01
-chr1	3205846	.	G	A	232.99	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.36;MQ0=0;OQ=538.85;QD=13.47;SB=-237.77	GT:AD:DP:GL:GQ	0/1:19,21:21:-63.50,-6.33,-16.25:99
-chr1	3206300	rs12036713	A	G	35.28	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=14.04;MQ0=4;QD=5.04;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,7:2:-6.94,-0.60,-0.00:6.02
-chr1	3206493	.	T	G	46.28	PASS	AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=17.34;MQ0=4;OQ=70.14;QD=6.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,10:3:-10.50,-0.90,-0.00:9.03
-chr1	3206505	.	T	C	3.40	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=18.66;MQ0=4;OQ=95.85;QD=6.85;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,9:5:-14.37,-1.51,-4.06:25.51
-chr1	3206506	.	A	G	5.49	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=18.66;MQ0=4;OQ=74.94;QD=5.35;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,9:5:-12.29,-1.51,-3.97:24.63
-chr1	3206538	.	G	A	1.11	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=18.43;MQ0=3;OQ=73.15;QD=5.23;SB=-10.00	GT:AD:DP:GL:GQ	0/1:7,7:4:-11.80,-1.21,-3.10:18.92
-chr1	3206554	rs56276321	T	G	10.51	LowQual	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.60;MQ0=3;QD=0.53;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,5:8:-6.70,-2.41,-21.47:42.94
-chr1	3206566	.	T	C	28.09	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.53;MQ0=2;OQ=145.15;QD=6.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,9:12:-21.41,-3.62,-22.84:99
-chr1	3206567	.	A	G	6.01	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.53;MQ0=2;OQ=85.83;QD=4.09;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,9:11:-15.19,-3.32,-21.71:99
-chr1	3206577	.	C	T	7.20	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=22.19;MQ0=2;OQ=218.94;QD=10.43;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,11:11:-28.49,-3.31,-13.17:98.62
-chr1	3206588	.	A	C	10.65	LowQual	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.88;MQ=22.98;MQ0=0;QD=0.59;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,6:7:-6.42,-2.11,-14.50:43.09
-chr1	3206599	.	G	A	2.11	PASS	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=22.00;MQ0=0;OQ=65.71;QD=4.11;SB=-10.00	GT:AD:DP:GL:GQ	0/1:7,9:7:-11.98,-2.12,-8.40:62.78
-chr1	3206700	.	A	G	0.69	PASS	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.64;MQ0=1;OQ=276.82;QD=18.45;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,14:12:-34.36,-3.62,-3.48:2.36
-chr1	3206761	.	A	G	22.65	LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=26.60;MQ0=1;QD=0.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,10:32:-15.20,-9.65,-103.92:55.47
-chr1	3206926	rs61759194	A	G	113.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.49;MQ=46.00;MQ0=0;OQ=649.36;QD=10.82;SB=-346.23	GT:AD:DP:GL:GQ	0/1:29,31:46:-82.08,-13.86,-88.11:99
-chr1	3207011	rs2455137	C	T	379.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=48.62;MQ0=0;OQ=1983.22;QD=35.41;SB=-860.00	GT:AD:DP:GL:GQ	1/1:0,56:50:-201.92,-15.06,-0.01:99
-chr1	3207294	rs2500284	G	A	102.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=58.88;MQ0=0;OQ=2616.26;QD=39.05;SB=-1335.76	GT:AD:DP:GL:GQ	1/1:1,66:66:-265.23,-19.89,-0.02:99
-chr1	3208189	rs2455136	A	T	142.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=59.12;MQ0=0;OQ=2529.01;QD=36.65;SB=-1261.52	GT:AD:DP:GL:GQ	1/1:0,69:68:-256.50,-20.48,-0.02:99
-chr1	3208783	rs2500283	G	C	612.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2831.75;QD=42.91;SB=-1184.48	GT:AD:DP:GL:GQ	1/1:0,66:66:-286.78,-19.89,-0.02:99
-chr1	3209357	rs2500282	A	G	594.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1981.22;QD=32.48;SB=-526.13	GT:AD:DP:GL:GQ	1/1:0,61:61:-201.75,-18.39,-0.04:99
-chr1	3209761	rs2455135	A	G	63.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1623.95;QD=30.64;SB=-619.36	GT:AD:DP:GL:GQ	1/1:0,53:46:-165.99,-13.85,-0.01:99
-chr1	3210242	rs2500281	G	A	563.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.01;MQ0=0;OQ=1613.10;QD=35.07;SB=-716.96	GT:AD:DP:GL:GQ	1/1:0,46:42:-164.91,-12.65,-0.01:99
-chr1	3210275	rs2455134	A	G	102.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.21;MQ0=0;OQ=983.95;QD=25.89;SB=-399.50	GT:AD:DP:GL:GQ	1/1:0,38:28:-101.99,-8.43,-0.01:84.26
-chr1	3210353	rs2455133	C	G	65.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=35.62;MQ0=2;OQ=1518.72;QD=29.78;SB=-723.73	GT:AD:DP:GL:GQ	1/1:4,47:41:-164.26,-12.36,-8.80:35.57
-chr1	3210943	rs2455132	T	C	34.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=58.65;MQ0=0;OQ=1292.96;QD=28.73;SB=-546.03	GT:AD:DP:GL:GQ	1/1:1,44:43:-137.07,-12.97,-4.19:87.75
-chr1	3211298	rs56357655	G	T	236.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=570.69;QD=13.59;SB=-286.33	GT:AD:DP:GL:GQ	0/1:20,22:39:-72.10,-11.75,-66.92:99
-chr1	3211481	rs4648378	A	T	264.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1968.99;QD=35.80;SB=-994.60	GT:AD:DP:GL:GQ	1/1:0,55:54:-200.50,-16.27,-0.02:99
-chr1	3212566	rs3923081	A	G	604.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1445.27;QD=30.75;SB=-602.58	GT:AD:DP:GL:GQ	1/1:0,47:46:-148.15,-13.87,-0.04:99
-chr1	3213090	rs4648471	A	G	181.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=58.96;MQ0=0;OQ=1176.67;QD=14.53;SB=-570.90	GT:AD:DP:GL:GQ	0/1:40,41:78:-144.45,-23.50,-149.52:99
-chr1	3213140	rs4233025	C	T	288.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.52;MQ0=0;OQ=3371.29;QD=38.75;SB=-1393.36	GT:AD:DP:GL:GQ	1/1:0,86:84:-336.13,-25.31,-0.03:99
-chr1	3213393	rs4648472	G	A	290.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=58.95;MQ0=0;OQ=2168.73;QD=34.98;SB=-915.32	GT:AD:DP:GL:GQ	1/1:0,61:56:-220.48,-16.87,-0.02:99
-chr1	3213624	rs4648473	A	G	299.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=2351.35;QD=35.09;SB=-1180.73	GT:AD:DP:GL:GQ	1/1:0,67:67:-238.75,-20.18,-0.03:99
-chr1	3213815	rs4145901	A	G	578.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1913.13;QD=34.78;SB=-765.19	GT:AD:DP:GL:GQ	1/1:0,55:55:-194.92,-16.57,-0.02:99
-chr1	3214070	rs4145900	C	T	633.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=2312.37;QD=39.87;SB=-883.19	GT:AD:DP:GL:GQ	1/1:0,58:58:-234.84,-17.47,-0.01:99
-chr1	3214663	rs2483258	A	G	141.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.74;MQ=58.20;MQ0=0;OQ=1545.60;QD=32.89;SB=-781.14	GT:AD:DP:GL:GQ	1/1:0,47:45:-158.16,-13.56,-0.02:99
-chr1	3215654	rs2500279	A	G	10.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1630.84;QD=29.65;SB=-792.65	GT:AD:DP:GL:GQ	1/1:0,55:51:-166.71,-15.38,-0.04:99
-chr1	3215800	rs2500278	C	T	196.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.49;MQ=60.00;MQ0=0;OQ=2097.43;QD=35.55;SB=-1034.29	GT:AD:DP:GL:GQ	1/1:1,57:55:-213.35,-16.58,-0.03:99
-chr1	3216399	rs59127130	T	A	71.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=59.01;MQ0=0;OQ=500.47;QD=10.65;SB=-267.66	GT:AD:DP:GL:GQ	0/1:27,19:45:-66.90,-13.56,-91.26:99
-chr1	3218505	.	G	T	13.88	PASS	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=59.42;MQ0=0;OQ=562.03;QD=14.05;SB=-143.82	GT:AD:DP:GL:GQ	0/1:17,23:34:-69.73,-10.24,-51.47:99
-chr1	3223491	rs2500277	T	C	605.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1039.56;QD=14.85;SB=-437.57	GT:AD:DP:GL:GQ	0/1:34,36:70:-128.33,-21.09,-137.20:99
-chr1	3227069	rs2500274	G	A	733.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2547.84;QD=38.03;SB=-1230.64	GT:AD:DP:GL:GQ	1/1:0,67:65:-258.39,-19.58,-0.02:99
-chr1	3231689	rs2500271	A	G	65.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=6.09;MQ=58.05;MQ0=0;OQ=618.77;QD=12.89;SB=-326.13	GT:AD:DP:GL:GQ	0/1:22,25:43:-80.91,-15.74,-76.88:99
-chr1	3232314	rs2500270	C	T	276.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=58.93;MQ0=0;OQ=890.12;QD=13.69;SB=-466.96	GT:AD:DP:GL:GQ	0/1:37,28:63:-111.27,-18.97,-132.21:99
-chr1	3232391	rs7521865	T	C	80.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.46;MQ0=0;OQ=581.07;QD=12.11;SB=-302.66	GT:AD:DP:GL:GQ	0/1:25,23:45:-74.95,-13.56,-94.63:99
-chr1	3232424	rs11576578	C	T	337.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=583.63;QD=16.21;SB=-245.53	GT:AD:DP:GL:GQ	0/1:18,18:35:-72.19,-10.55,-57.05:99
-chr1	3232513	rs2500268	C	T	2.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.10;MQ0=0;OQ=81.92;QD=2.64;SB=-51.23	GT:AD:DP:GL:GQ	0/1:26,5:28:-19.91,-8.44,-80.68:99
-chr1	3232545	rs7550743	G	C	135.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=204.00;QD=6.18;SB=-89.25	GT:AD:DP:GL:GQ	0/1:25,8:26:-31.53,-7.85,-72.48:99
-chr1	3233210	rs2483268	C	T	55.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.45;MQ0=0;OQ=685.34;QD=20.16;SB=-292.33	GT:AD:DP:GL:GQ	0/1:13,21:31:-81.16,-9.34,-34.58:99
-chr1	3233282	rs2483269	C	T	150.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.51;MQ0=0;OQ=931.05;QD=19.81;SB=-450.84	GT:AD:DP:GL:GQ	0/1:20,27:46:-110.24,-13.86,-67.60:99
-chr1	3234117	rs2483270	T	C	92.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=54.48;MQ0=0;OQ=186.80;QD=8.90;SB=-89.99	GT:AD:DP:GL:GQ	0/1:13,8:21:-28.30,-6.33,-49.94:99
-chr1	3235659	rs56368529	T	G	3.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=4.81;MQ=58.01;MQ0=0;OQ=299.04;QD=9.06;SB=-59.90	GT:AD:DP:GL:GQ	0/1:16,17:27:-41.32,-8.14,-54.29:99
-chr1	3236031	rs55929121	A	G	111.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.44;MQ0=0;OQ=382.21;QD=9.32;SB=-138.40	GT:AD:DP:GL:GQ	0/1:24,17:41:-53.86,-12.36,-96.85:99
-chr1	3237249	rs2483272	T	C	227.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=58.89;MQ0=0;OQ=695.19;QD=16.55;SB=-364.39	GT:AD:DP:GL:GQ	0/1:17,25:40:-84.86,-12.05,-61.97:99
-chr1	3237696	rs11577229	A	C	60.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=59.46;MQ0=0;OQ=605.90;QD=14.09;SB=-151.87	GT:AD:DP:GL:GQ	0/1:20,23:42:-76.53,-12.66,-70.16:99
-chr1	3237725	rs2483273	C	T	273.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=458.56;QD=11.46;SB=-253.26	GT:AD:DP:GL:GQ	0/1:23,17:37:-60.29,-11.15,-74.02:99
-chr1	3237958	rs2483274	A	G	334.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=489.91;QD=10.42;SB=-162.48	GT:AD:DP:GL:GQ	0/1:24,23:45:-65.84,-13.57,-92.79:99
-chr1	3238582	rs56033677	T	C	21.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.43;MQ0=0;OQ=296.91;QD=9.00;SB=-160.33	GT:AD:DP:GL:GQ	0/1:18,15:30:-42.02,-9.04,-67.71:99
-chr1	3238892	rs55807399	G	T	41.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=58.83;MQ0=0;OQ=103.10;QD=6.44;SB=-69.87	GT:AD:DP:GL:GQ	0/1:10,6:13:-17.51,-3.92,-27.55:99
-chr1	3239158	.	C	T	1.04	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.48;MQ0=0;OQ=666.04;QD=18.50;SB=-35.64	GT:AD:DP:GL:GQ	0/1:16,20:35:-80.44,-10.55,-47.82:99
-chr1	3239323	.	G	A	79.22	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=885.68;QD=16.10;SB=-289.76	GT:AD:DP:GL:GQ	0/1:28,27:52:-107.52,-15.67,-84.40:99
-chr1	3240283	rs1889121	A	G	183.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.44;MQ0=0;OQ=423.56;QD=10.86;SB=-163.96	GT:AD:DP:GL:GQ	0/1:18,20:36:-60.24,-14.60,-67.49:99
-chr1	3241019	rs1110307	T	C	317.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.03;MQ0=0;OQ=790.39;QD=11.80;SB=-362.96	GT:AD:DP:GL:GQ	0/1:34,33:66:-102.22,-19.90,-132.82:99
-chr1	3241835	rs4648477	G	A	340.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.63;MQ0=0;OQ=880.63;QD=17.27;SB=-457.99	GT:AD:DP:GL:GQ	0/1:24,27:48:-105.81,-14.46,-75.34:99
-chr1	3241867	rs4648478	C	T	165.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.81;MQ=58.72;MQ0=0;OQ=927.39;QD=18.18;SB=-291.79	GT:AD:DP:GL:GQ	0/1:22,29:49:-110.80,-14.77,-66.95:99
-chr1	3241964	rs2483278	C	T	199.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.49;MQ=58.47;MQ0=0;OQ=815.99;QD=11.33;SB=-270.80	GT:AD:DP:GL:GQ	0/1:44,28:65:-104.47,-19.59,-130.43:99
-chr1	3242641	rs10797388	C	T	87.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.66;MQ0=0;OQ=1468.23;QD=21.91;SB=-716.28	GT:AD:DP:GL:GQ	0/1:24,43:63:-169.09,-18.98,-69.99:99
-chr1	3243022	rs4648479	C	G	270.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.32;MQ0=0;OQ=1259.62;QD=18.52;SB=-604.54	GT:AD:DP:GL:GQ	0/1:33,35:68:-149.74,-20.49,-145.47:99
-chr1	3243475	rs2500264	A	G	371.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=57.70;MQ0=0;OQ=965.24;QD=13.04;SB=-435.59	GT:AD:DP:GL:GQ	0/1:35,39:72:-121.52,-21.71,-132.46:99
-chr1	3243538	rs2500263	C	T	449.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=59.43;MQ0=0;OQ=1163.15;QD=14.36;SB=-551.30	GT:AD:DP:GL:GQ	0/1:44,37:79:-143.40,-23.80,-157.59:99
-chr1	3243563	rs10909933	A	T	21.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=5.38;MQ=58.82;MQ0=0;OQ=1256.33;QD=15.90;SB=-624.35	GT:AD:DP:GL:GQ	0/1:39,40:77:-152.11,-23.19,-142.90:99
-chr1	3243699	rs7516137	C	G	384.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.95;MQ0=1;OQ=1414.58;QD=19.38;SB=-612.10	GT:AD:DP:GL:GQ	0/1:31,42:71:-166.15,-21.41,-133.01:99
-chr1	3243749	rs7516150	C	T	110.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.27;MQ=59.28;MQ0=0;OQ=1059.88;QD=16.56;SB=-511.08	GT:AD:DP:GL:GQ	0/1:31,33:63:-128.25,-18.98,-110.55:99
-chr1	3243801	rs7552331	G	A	50.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=59.68;MQ0=0;OQ=1395.05;QD=19.38;SB=-586.45	GT:AD:DP:GL:GQ	0/1:31,41:71:-164.18,-21.39,-100.20:99
-chr1	3244201	rs1572038	G	A	223.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=60.00;MQ0=0;OQ=849.89;QD=14.40;SB=-320.28	GT:AD:DP:GL:GQ	0/1:33,26:58:-105.75,-17.48,-105.23:99
-chr1	3244229	rs1572037	T	C	103.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=1.14;MQ=59.74;MQ0=0;OQ=759.65;QD=10.70;SB=-211.19	GT:AD:DP:GL:GQ	0/1:40,31:70:-100.34,-21.09,-160.53:99
-chr1	3245634	.	G	A	2.67	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=5.38;MQ=59.21;MQ0=0;OQ=768.53;QD=14.50;SB=-362.88	GT:AD:DP:GL:GQ	0/1:27,25:49:-94.91,-14.77,-78.82:99
-chr1	3245968	rs1999527	C	A	270.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.55;MQ0=0;OQ=832.76;QD=16.33;SB=-309.70	GT:AD:DP:GL:GQ	0/1:20,31:46:-100.42,-13.86,-57.62:99
-chr1	3246110	rs1999526	G	A	145.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.11;MQ=60.00;MQ0=0;OQ=722.36;QD=13.89;SB=-206.02	GT:AD:DP:GL:GQ	0/1:25,26:46:-91.77,-16.25,-79.35:99
-chr1	3247225	rs944819	T	G	210.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.73;MQ0=0;OQ=1004.82;QD=11.68;SB=-427.67	GT:AD:DP:GL:GQ	0/1:50,36:86:-129.67,-25.90,-183.72:99
-chr1	3247599	rs2483281	C	T	240.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=58.98;MQ0=0;OQ=504.82;QD=12.31;SB=-180.16	GT:AD:DP:GL:GQ	0/1:24,17:38:-65.21,-11.45,-77.36:99
-chr1	3251376	rs4648379	C	T	354.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.76;MQ0=0;OQ=1302.21;QD=16.91;SB=-654.31	GT:AD:DP:GL:GQ	0/1:37,40:76:-156.40,-22.89,-133.27:99
-chr1	3251542	rs4415513	C	T	583.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1033.27;QD=16.67;SB=-449.45	GT:AD:DP:GL:GQ	0/1:31,31:61:-125.00,-18.39,-98.88:99
-chr1	3252129	rs12564920	A	G	258.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.38;MQ0=0;OQ=448.15;QD=9.96;SB=-222.39	GT:AD:DP:GL:GQ	0/1:23,22:39:-59.86,-11.76,-74.90:99
-chr1	3253722	.	G	A	5.82	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=951.14;QD=18.65;SB=-376.90	GT:AD:DP:GL:GQ	0/1:22,29:50:-113.46,-15.06,-78.22:99
-chr1	3254050	rs2483289	A	C	189.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=800.56;QD=13.80;SB=-367.58	GT:AD:DP:GL:GQ	0/1:28,30:55:-99.91,-16.57,-92.54:99
-chr1	3254157	rs2500257	A	G	11.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=3.42;MQ=59.13;MQ0=0;OQ=570.29;QD=13.26;SB=-176.97	GT:AD:DP:GL:GQ	0/1:21,22:40:-72.37,-12.05,-79.78:99
-chr1	3257948	.	G	C	98.91	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=35.14;MQ0=0;QD=7.07;SB=14.07	GT:AD:DP:GL:GQ	0/1:10,4:12:-16.79,-3.62,-31.08:99
-chr1	3257994	rs60920916	T	C	0.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=2;HaplotypeScore=2.63;MQ=42.15;MQ0=0;OQ=77.87;QD=4.58;SB=20.08	GT:AD:DP:GL:GQ	0/1:13,4:15:-15.59,-4.52,-39.62:99
-chr1	3258005	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=6.10;MQ=42.12;MQ0=0;OQ=65.85;QD=3.29;SB=23.09	GT:AD:DP:GL:GQ	0/1:16,4:17:-15.00,-5.13,-47.65:98.69
-chr1	3258920	.	C	T	2.85	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=553.46;QD=12.87;SB=-213.92	GT:AD:DP:GL:GQ	0/1:24,19:40:-70.69,-12.06,-71.24:99
-chr1	3262401	rs7550526	G	A	60.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=58.89;MQ0=0;OQ=1567.02;QD=37.31;SB=-629.85	GT:AD:DP:GL:GQ	1/1:0,42:40:-160.30,-12.05,-0.01:99
-chr1	3262685	rs946759	C	A	62.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=57.75;MQ0=0;OQ=630.41;QD=19.70;SB=-314.39	GT:AD:DP:GL:GQ	1/1:3,29:21:-69.14,-6.33,-2.51:38.17
-chr1	3262923	rs946758	G	A	287.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.58;MQ0=0;OQ=2113.36;QD=38.42;SB=-1046.71	GT:AD:DP:GL:GQ	1/1:0,55:53:-214.93,-15.96,-0.01:99
-chr1	3263976	rs55805251	C	T	94.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.59;MQ0=0;OQ=518.72;QD=15.72;SB=-142.59	GT:AD:DP:GL:GQ	0/1:15,18:30:-64.20,-9.04,-43.17:99
-chr1	3264566	rs2483265	T	C	43.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=868.82;QD=26.33;SB=-460.17	GT:AD:DP:GL:GQ	1/1:0,33:29:-90.50,-8.75,-0.03:87.17
-chr1	3265009	rs12748963	C	T	26.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.21;MQ=58.97;MQ0=0;OQ=826.30;QD=18.36;SB=-347.35	GT:AD:DP:GL:GQ	0/1:19,25:43:-98.87,-12.96,-59.86:99
-chr1	3266234	rs12073172	G	A	592.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=1102.37;QD=35.56;SB=-562.26	GT:AD:DP:GL:GQ	1/1:0,31:30:-113.84,-9.05,-0.02:90.27
-chr1	3266600	rs2500280	G	C	2.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=8.93;MQ=59.31;MQ0=0;OQ=2375.28;QD=38.94;SB=-992.26	GT:AD:DP:GL:GQ	1/1:0,60:56:-241.13,-16.87,-0.02:99
-chr1	3266936	.	G	A	52.38	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.54;MQ=59.62;MQ0=0;OQ=518.77;QD=10.59;SB=-162.22	GT:AD:DP:GL:GQ	0/1:32,17:48:-69.63,-14.47,-101.23:99
-chr1	3267606	rs884308	C	T	94.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1579.42;QD=39.49;SB=-771.63	GT:AD:DP:GL:GQ	1/1:0,40:40:-161.54,-12.05,-0.01:99
-chr1	3268390	rs11583116	G	A	130.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.33;MQ0=0;OQ=690.56;QD=13.81;SB=-242.25	GT:AD:DP:GL:GQ	0/1:26,24:43:-85.30,-12.96,-65.77:99
-chr1	3269184	rs7524171	A	G	11.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=5.01;MQ=59.60;MQ0=0;OQ=1781.26;QD=30.71;SB=-880.26	GT:AD:DP:GL:GQ	1/1:0,58:53:-181.75,-15.98,-0.04:99
-chr1	3269881	rs2500262	T	C	201.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.11;MQ0=0;OQ=1534.16;QD=29.50;SB=-546.01	GT:AD:DP:GL:GQ	1/1:0,52:49:-157.05,-14.78,-0.05:99
-chr1	3271322	.	C	T	58.72	PASS	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=59.40;MQ0=0;OQ=375.26;QD=12.11;SB=-208.89	GT:AD:DP:GL:GQ	0/1:17,14:28:-49.26,-8.45,-45.56:99
-chr1	3273388	rs4648485	G	A	602.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2075.89;QD=37.74;SB=-912.72	GT:AD:DP:GL:GQ	1/1:0,55:53:-211.19,-15.97,-0.02:99
-chr1	3275010	rs4648486	C	T	123.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=58.75;MQ0=0;OQ=2039.90;QD=39.23;SB=-914.69	GT:AD:DP:GL:GQ	1/1:0,52:51:-207.59,-15.36,-0.01:99
-chr1	3275164	rs4648487	T	C	21.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=5.20;MQ=59.14;MQ0=0;OQ=1843.56;QD=34.14;SB=-799.67	GT:AD:DP:GL:GQ	1/1:0,54:53:-187.96,-15.97,-0.02:99
-chr1	3275488	rs6424073	G	A	234.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2488.63;QD=39.50;SB=-1214.11	GT:AD:DP:GL:GQ	1/1:0,63:63:-252.47,-18.98,-0.02:99
-chr1	3277411	rs12138292	A	G	1.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.96;MQ=56.17;MQ0=0;OQ=1416.27;QD=24.85;SB=-414.15	GT:AD:DP:GL:GQ	1/1:0,57:48:-145.28,-14.50,-0.07:99
-chr1	3279384	rs12135987	G	A	273.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.39;MQ0=0;OQ=2572.74;QD=37.83;SB=-927.33	GT:AD:DP:GL:GQ	1/1:0,68:65:-260.88,-19.58,-0.02:99
-chr1	3279467	rs6688949	T	C	3.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=57.66;MQ0=0;OQ=1297.10;QD=25.94;SB=-450.26	GT:AD:DP:GL:GQ	1/1:0,50:40:-133.33,-12.06,-0.03:99
-chr1	3279589	rs1333190	C	T	668.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1807.78;QD=36.89;SB=-784.69	GT:AD:DP:GL:GQ	1/1:0,49:46:-184.37,-13.86,-0.01:99
-chr1	3279831	rs1333189	C	T	229.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.13;MQ0=0;OQ=1483.34;QD=36.18;SB=-765.52	GT:AD:DP:GL:GQ	1/1:0,40:38:-151.93,-11.45,-0.01:99
-chr1	3280999	rs2249860	A	C	81.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=57.93;MQ0=0;OQ=1454.60;QD=33.83;SB=-752.07	GT:AD:DP:GL:GQ	1/1:0,43:42:-149.06,-12.65,-0.01:99
-chr1	3281067	rs2368593	G	T	64.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=58.09;MQ0=0;OQ=2257.03;QD=31.79;SB=-1064.90	GT:AD:DP:GL:GQ	1/1:0,70:66:-229.32,-19.89,-0.04:99
-chr1	3281249	.	G	A	160.30	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.53;MQ0=0;OQ=717.46;QD=13.54;SB=-318.84	GT:AD:DP:GL:GQ	0/1:27,26:46:-88.90,-13.87,-75.19:99
-chr1	3282736	rs4648488	C	T	347.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.52;MQ0=0;OQ=841.46;QD=17.53;SB=-434.81	GT:AD:DP:GL:GQ	0/1:21,27:46:-101.29,-13.86,-70.83:99
-chr1	3283525	rs4648489	A	G	474.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1662.64;QD=30.23;SB=-834.46	GT:AD:DP:GL:GQ	1/1:0,55:53:-169.90,-15.99,-0.06:99
-chr1	3284832	rs1538693	G	A	695.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1980.96;QD=38.10;SB=-939.35	GT:AD:DP:GL:GQ	1/1:0,52:51:-201.70,-15.37,-0.02:99
-chr1	3285724	.	G	A	0.22	PASS	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=1;HaplotypeScore=6.56;MQ=21.51;MQ0=1;OQ=72.03;QD=9.00;SB=-40.54	GT:AD:DP:GL:GQ	0/1:2,5:4:-11.69,-1.21,-3.37:21.64
-chr1	3285990	.	G	A	25.35	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.35;MQ=15.41;MQ0=12;QD=0.85;SB=-32.52	GT:AD:DP:GL:GQ	0/1:21,9:5:-7.32,-1.51,-9.51:58.18
-chr1	3286144	.	A	G	36.06	LowQual	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=14.48;MQ0=3;QD=4.51;SB=-6.99	GT:AD:DP:GL:GQ	0/1:4,3:3:-7.79,-0.90,-4.06:31.52
-chr1	3286152	.	A	C	0.09	PASS	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=27.22;MQ0=3;OQ=114.38;QD=16.34;SB=-46.01	GT:AD:DP:GL:GQ	1/1:0,7:4:-14.97,-1.20,-0.00:12.04
-chr1	3286284	.	G	A	36.93	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=3.77;MQ=31.49;MQ0=4;QD=1.27;SB=-29.53	GT:AD:DP:GL:GQ	0/1:22,7:15:-11.50,-4.52,-41.17:69.76
-chr1	3286312	.	G	A	19.94	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=9.31;MQ=28.36;MQ0=5;QD=0.59;SB=-24.50	GT:AD:DP:GL:GQ	0/1:27,6:17:-10.40,-5.13,-47.64:52.73
-chr1	3286320	.	C	A	227.39	HARD_TO_VALIDATE;Indel	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=8.75;MQ=31.04;MQ0=4;QD=5.98;SB=-25.91	GT:AD:DP:GL:GQ	0/1:27,11:20:-32.05,-6.03,-35.21:99
-chr1	3286354	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=6.21;MQ=33.14;MQ0=5;OQ=87.60;QD=2.92;SB=-62.36	GT:AD:DP:GL:GQ	0/1:22,7:14:-19.10,-7.05,-34.67:99
-chr1	3286558	rs61043152	G	A	1.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=54.01;MQ0=1;OQ=487.76;QD=11.09;SB=-75.56	GT:AD:DP:GL:GQ	0/1:23,21:40:-64.12,-12.06,-79.70:99
-chr1	3286811	.	T	C	44.59	PASS	AC=2;AF=1.00;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=60.00;MQ0=0;OQ=1964.33;QD=34.46;SB=-944.38	GT:AD:DP:GL:GQ	1/1:0,57:56:-200.04,-16.87,-0.02:99
-chr1	3287141	rs11584942	G	A	391.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.82;MQ0=0;OQ=780.63;QD=15.31;SB=-324.32	GT:AD:DP:GL:GQ	0/1:25,26:47:-95.51,-14.16,-75.83:99
-chr1	3287246	rs11584967	G	A	573.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=877.40;QD=15.67;SB=-384.91	GT:AD:DP:GL:GQ	0/1:28,28:54:-107.29,-16.27,-98.41:99
-chr1	3287659	rs4648490	A	C	117.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=58.26;MQ0=0;OQ=1692.37;QD=33.18;SB=-840.06	GT:AD:DP:GL:GQ	1/1:0,51:50:-172.85,-15.06,-0.02:99
-chr1	3290667	rs868688	C	T	279.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=58.44;MQ0=0;OQ=2018.08;QD=35.40;SB=-933.25	GT:AD:DP:GL:GQ	1/1:0,57:52:-205.41,-15.67,-0.02:99
-chr1	3290990	rs868689	T	G	679.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1815.91;QD=31.86;SB=-898.65	GT:AD:DP:GL:GQ	1/1:0,57:52:-185.19,-15.66,-0.02:99
-chr1	3292591	rs11810266	C	G	73.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.54;MQ0=0;OQ=822.36;QD=20.06;SB=-350.43	GT:AD:DP:GL:GQ	0/1:18,23:40:-97.58,-12.06,-74.61:99
-chr1	3293306	rs2245703	T	C	622.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2385.34;QD=35.60;SB=-962.70	GT:AD:DP:GL:GQ	1/1:0,67:67:-242.14,-20.18,-0.02:99
-chr1	3293627	rs6676024	C	T	186.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.97;MQ0=0;OQ=1016.67;QD=17.23;SB=-303.79	GT:AD:DP:GL:GQ	0/1:29,30:58:-122.43,-17.48,-92.51:99
-chr1	3293798	rs2065525	C	G	62.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=58.34;MQ0=0;OQ=2298.73;QD=40.33;SB=-651.91	GT:AD:DP:GL:GQ	1/1:0,56:54:-233.47,-16.27,-0.01:99
-chr1	3294876	rs17399998	C	T	445.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1142.20;QD=15.23;SB=-563.39	GT:AD:DP:GL:GQ	0/1:40,35:73:-139.51,-22.00,-126.39:99
-chr1	3295312	rs6687463	A	G	1.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=5.24;MQ=59.03;MQ0=0;OQ=1175.21;QD=27.33;SB=-477.09	GT:AD:DP:GL:GQ	1/1:0,42:38:-121.14,-11.46,-0.04:99
-chr1	3295326	.	C	A	16.33	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=58.87;MQ0=0;OQ=469.13;QD=12.68;SB=-130.80	GT:AD:DP:GL:GQ	0/1:19,18:34:-60.44,-10.25,-57.03:99
-chr1	3295820	.	C	T	40.94	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=844.76;QD=17.60;SB=-369.85	GT:AD:DP:GL:GQ	0/1:21,27:46:-101.62,-13.86,-70.72:99
-chr1	3296384	rs6686140	C	A	6.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=6.50;MQ=59.17;MQ0=0;OQ=324.87;QD=11.60;SB=-121.49	GT:AD:DP:GL:GQ	0/1:8,20:20:-41.81,-6.04,-18.74:99
-chr1	3296715	rs2151350	T	G	0.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=4;HaplotypeScore=2.18;MQ=58.99;MQ0=0;OQ=1168.63;QD=25.41;SB=-611.86	GT:AD:DP:GL:GQ	1/1:0,46:39:-120.49,-11.76,-0.04:99
-chr1	3297308	rs2493281	A	G	8.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=58.18;MQ0=1;OQ=1041.73;QD=26.04;SB=-499.54	GT:AD:DP:GL:GQ	1/1:1,39:33:-107.79,-9.95,-0.03:99
-chr1	3297606	rs2493278	T	C	732.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.88;MQ0=0;OQ=2573.66;QD=35.26;SB=-1043.85	GT:AD:DP:GL:GQ	1/1:0,73:73:-260.97,-21.99,-0.02:99
-chr1	3298358	rs2493268	T	C	154.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=58.22;MQ0=0;OQ=1688.23;QD=33.76;SB=-851.05	GT:AD:DP:GL:GQ	1/1:0,50:48:-172.42,-14.46,-0.02:99
-chr1	3298817	rs12139767	G	C	583.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=898.96;QD=13.62;SB=-383.19	GT:AD:DP:GL:GQ	0/1:39,27:65:-112.80,-19.62,-153.47:99
-chr1	3299326	rs35864014	G	A	497.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1037.02;QD=15.25;SB=-535.48	GT:AD:DP:GL:GQ	0/1:36,32:68:-127.47,-20.48,-131.88:99
-chr1	3301121	rs6702992	C	T	313.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.53;MQ0=0;OQ=194.21;QD=10.22;SB=-113.94	GT:AD:DP:GL:GQ	0/1:12,7:19:-28.43,-5.72,-42.63:99
-chr1	3301284	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=11;HaplotypeScore=19.15;MQ=56.72;MQ0=0;OQ=88.35;QD=1.38;SB=59.21	GT:AD:DP:GL:GQ	0/1:53,11:56:-28.99,-16.87,-158.63:99
-chr1	3301891	rs883678	C	G	91.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.56;MQ0=0;OQ=812.38;QD=19.34;SB=-299.58	GT:AD:DP:GL:GQ	0/1:20,22:42:-97.18,-12.66,-83.21:99
-chr1	3302116	rs17822575	T	G	316.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.54;MQ0=0;OQ=510.49;QD=12.45;SB=-250.83	GT:AD:DP:GL:GQ	0/1:20,21:40:-66.39,-12.05,-67.05:99
-chr1	3302296	rs10909937	C	T	502.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1321.67;QD=36.71;SB=-625.01	GT:AD:DP:GL:GQ	1/1:0,36:34:-135.76,-10.24,-0.01:99
-chr1	3302524	rs56378103	C	T	103.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.71;MQ0=0;OQ=1572.33;QD=29.12;SB=-689.92	GT:AD:DP:GL:GQ	1/1:0,52:42:-160.84,-12.66,-0.02:99
-chr1	3302527	.	C	T	6.09	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=58.33;MQ0=0;OQ=1011.78;QD=18.07;SB=-471.49	GT:AD:DP:GL:GQ	0/1:25,31:52:-120.14,-15.67,-71.42:99
-chr1	3302823	rs12726710	C	T	452.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=952.26;QD=17.31;SB=-305.83	GT:AD:DP:GL:GQ	0/1:25,30:55:-115.09,-16.58,-80.89:99
-chr1	3303142	rs7535965	G	A	141.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.64;MQ0=0;OQ=1848.10;QD=38.50;SB=-836.62	GT:AD:DP:GL:GQ	1/1:0,48:47:-188.41,-14.16,-0.02:99
-chr1	3304456	rs17822581	A	G	359.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=58.93;MQ0=0;OQ=1113.18;QD=17.13;SB=-574.04	GT:AD:DP:GL:GQ	0/1:27,38:62:-133.28,-18.68,-95.39:99
-chr1	3304922	rs57432749	C	T	181.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=59.75;MQ0=0;OQ=993.31;QD=13.07;SB=-496.07	GT:AD:DP:GL:GQ	0/1:41,34:74:-127.49,-24.88,-150.46:99
-chr1	3305219	rs12144338	C	T	131.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.67;MQ0=0;OQ=987.68;QD=17.33;SB=-284.79	GT:AD:DP:GL:GQ	0/1:26,31:53:-118.03,-15.98,-72.20:99
-chr1	3305551	.	G	A	103.37	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.39;MQ0=0;OQ=1099.92;QD=15.94;SB=-511.04	GT:AD:DP:GL:GQ	0/1:36,33:68:-133.77,-20.49,-112.10:99
-chr1	3305678	rs7542793	G	A	440.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.35;MQ0=0;OQ=1064.35;QD=16.63;SB=-455.47	GT:AD:DP:GL:GQ	0/1:30,34:62:-128.41,-18.69,-93.40:99
-chr1	3305692	rs12737284	G	A	493.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=901.95;QD=14.79;SB=-398.19	GT:AD:DP:GL:GQ	0/1:31,30:59:-111.27,-17.79,-96.32:99
-chr1	3305845	rs12117228	T	C	284.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=60.00;MQ0=0;OQ=892.28;QD=11.74;SB=-260.21	GT:AD:DP:GL:GQ	0/1:38,38:73:-114.51,-22.00,-150.21:99
-chr1	3305873	rs7551733	C	G	174.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=60.00;MQ0=0;OQ=1089.18;QD=17.02;SB=-530.69	GT:AD:DP:GL:GQ	0/1:32,32:62:-130.89,-18.69,-134.52:99
-chr1	3306535	rs10909939	T	C	528.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=956.73;QD=17.08;SB=-375.64	GT:AD:DP:GL:GQ	0/1:23,33:55:-115.53,-16.57,-90.24:99
-chr1	3306616	rs10909940	G	A	39.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=1181.64;QD=23.63;SB=-497.15	GT:AD:DP:GL:GQ	0/1:15,35:49:-136.22,-14.77,-45.61:99
-chr1	3306995	rs12743248	G	A	92.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.54;MQ0=0;OQ=921.67;QD=15.36;SB=-465.48	GT:AD:DP:GL:GQ	0/1:29,31:55:-112.03,-16.58,-86.62:99
-chr1	3307093	rs12747145	G	A	172.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.50;MQ0=0;OQ=526.33;QD=14.23;SB=-229.52	GT:AD:DP:GL:GQ	0/1:18,17:34:-69.44,-13.52,-51.06:99
-chr1	3307640	rs6424074	A	G	354.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.52;MQ0=0;OQ=483.77;QD=10.08;SB=-196.29	GT:AD:DP:GL:GQ	0/1:28,20:48:-66.12,-14.46,-114.20:99
-chr1	3307747	rs6424075	G	T	374.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.24;MQ0=0;OQ=884.55;QD=14.04;SB=-359.35	GT:AD:DP:GL:GQ	0/1:31,32:59:-109.52,-17.78,-88.61:99
-chr1	3308193	rs7551796	G	A	363.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.69;MQ0=0;OQ=1293.28;QD=17.24;SB=-465.48	GT:AD:DP:GL:GQ	0/1:35,40:71:-154.00,-21.39,-119.84:99
-chr1	3308294	rs11576794	C	T	278.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=57.73;MQ0=0;OQ=809.01;QD=14.19;SB=-410.42	GT:AD:DP:GL:GQ	0/1:31,26:56:-101.07,-16.88,-98.51:99
-chr1	3308295	rs11577526	A	G	45.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=57.69;MQ0=0;OQ=1861.63;QD=33.24;SB=-741.99	GT:AD:DP:GL:GQ	1/1:0,56:55:-189.77,-16.57,-0.03:99
-chr1	3308392	rs11578011	T	C	195.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.80;MQ0=0;OQ=1812.46;QD=30.21;SB=-790.65	GT:AD:DP:GL:GQ	1/1:0,59:59:-188.08,-20.60,-3.25:99
-chr1	3308574	rs5024246	G	A	333.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=876.20;QD=19.47;SB=-325.85	GT:AD:DP:GL:GQ	0/1:19,26:45:-104.46,-13.56,-63.60:99
-chr1	3308629	rs10909942	C	G	63.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.03;HRun=0;HaplotypeScore=2.61;MQ=58.12;MQ0=0;OQ=1384.57;QD=36.44;SB=-590.68	GT:AD:DP:GL:GQ	1/1:0,37:37:-142.07,-10.86,-0.03:99
-chr1	3308702	rs56148282	G	A	636.18	Indel	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.59;MQ0=0;QD=19.28;SB=-248.56	GT:AD:DP:GL:GQ	0/1:12,21:30:-75.94,-9.04,-37.32:99
-chr1	3308921	rs1889124	A	G	16.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.23;MQ=58.83;MQ0=0;OQ=1016.70;QD=28.24;SB=-485.51	GT:AD:DP:GL:GQ	1/1:0,36:33:-105.29,-9.95,-0.03:99
-chr1	3309492	rs4353034	G	A	0.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=16.76;MQ=57.87;MQ0=0;OQ=200.25;QD=6.07;SB=-37.01	GT:AD:DP:GL:GQ	0/1:23,8:31:-40.02,-16.71,-79.20:99
-chr1	3309534	rs12562397	C	T	380.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=1380.14;QD=38.34;SB=-494.65	GT:AD:DP:GL:GQ	1/1:0,36:35:-141.61,-10.54,-0.01:99
-chr1	3309541	rs12562399	C	G	28.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.39;MQ0=0;OQ=1543.76;QD=40.63;SB=-639.90	GT:AD:DP:GL:GQ	1/1:0,38:37:-157.97,-11.15,-0.01:99
-chr1	3309637	rs4471209	G	A	344.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.51;MQ0=0;OQ=382.91;QD=10.08;SB=-184.19	GT:AD:DP:GL:GQ	0/1:25,13:37:-52.73,-11.16,-73.72:99
-chr1	3309732	rs6664364	C	T	134.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.91;MQ0=0;OQ=1699.09;QD=36.15;SB=-803.59	GT:AD:DP:GL:GQ	1/1:0,47:44:-173.51,-13.26,-0.01:99
-chr1	3309737	rs6664369	C	T	130.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.53;MQ0=0;OQ=1859.42;QD=37.95;SB=-907.23	GT:AD:DP:GL:GQ	1/1:0,49:48:-189.54,-14.46,-0.02:99
-chr1	3309924	rs6669407	A	G	328.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=995.86;QD=29.29;SB=-353.80	GT:AD:DP:GL:GQ	1/1:0,34:32:-103.20,-9.65,-0.03:96.22
-chr1	3310023	rs2493286	G	C	420.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1672.06;QD=40.78;SB=-718.73	GT:AD:DP:GL:GQ	1/1:0,41:40:-170.80,-12.05,-0.01:99
-chr1	3310336	rs6657675	G	A	148.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=58.38;MQ0=0;OQ=936.76;QD=20.36;SB=-332.89	GT:AD:DP:GL:GQ	0/1:17,29:43:-109.92,-12.96,-52.69:99
-chr1	3310582	rs55820208	C	T	260.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=862.76;QD=19.61;SB=-355.48	GT:AD:DP:GL:GQ	0/1:19,25:43:-102.51,-12.95,-64.90:99
-chr1	3311027	rs41315264	C	A	149.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.45;MQ0=0;OQ=411.02;QD=12.09;SB=-182.52	GT:AD:DP:GL:GQ	0/1:19,15:31:-53.72,-9.34,-57.20:99
-chr1	3311596	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=4;HaplotypeScore=11.58;MQ=54.22;MQ0=0;OQ=65.40;QD=1.42;SB=47.17	GT:AD:DP:GL:GQ	0/1:36,10:29:-18.61,-8.78,-88.90:98.24
-chr1	3312969	rs2483222	T	C	325.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.04;MQ0=0;OQ=585.55;QD=11.71;SB=-306.07	GT:AD:DP:GL:GQ	0/1:25,25:48:-76.31,-14.47,-93.64:99
-chr1	3313057	rs2483223	T	G	88.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.28;MQ0=0;OQ=1723.37;QD=26.93;SB=-826.52	GT:AD:DP:GL:GQ	1/1:0,64:57:-175.98,-17.18,-0.06:99
-chr1	3313337	rs2493304	A	G	110.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=57.61;MQ0=0;OQ=687.56;QD=10.91;SB=-122.49	GT:AD:DP:GL:GQ	0/1:35,28:61:-90.42,-18.38,-140.37:99
-chr1	3313476	rs2483224	C	T	77.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.15;MQ=58.48;MQ0=0;OQ=742.74;QD=16.15;SB=-389.41	GT:AD:DP:GL:GQ	0/1:21,25:42:-90.21,-12.66,-65.08:99
-chr1	3314069	rs2493303	G	C	188.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.50;MQ=59.20;MQ0=0;OQ=943.60;QD=16.27;SB=-364.47	GT:AD:DP:GL:GQ	0/1:29,29:57:-114.83,-17.19,-120.69:99
-chr1	3314293	rs2493302	A	T	133.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=59.50;MQ0=0;OQ=1593.32;QD=34.64;SB=-633.61	GT:AD:DP:GL:GQ	1/1:0,46:43:-162.93,-12.95,-0.01:99
-chr1	3314897	rs2483225	T	C	612.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.62;MQ0=0;OQ=1899.06;QD=30.14;SB=-687.73	GT:AD:DP:GL:GQ	1/1:0,63:60:-193.54,-18.10,-0.05:99
-chr1	3315120	rs12063572	A	G	188.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.59;MQ0=0;OQ=550.32;QD=9.83;SB=-278.26	GT:AD:DP:GL:GQ	0/1:32,24:53:-74.29,-15.98,-116.93:99
-chr1	3315180	rs12063579	A	G	62.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.22;MQ=57.82;MQ0=1;OQ=599.80;QD=10.91;SB=-262.60	GT:AD:DP:GL:GQ	0/1:27,28:47:-77.44,-14.18,-83.26:99
-chr1	3315190	rs2493301	G	C	0.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=15.61;MQ=57.11;MQ0=1;OQ=860.03;QD=14.83;SB=-355.44	GT:AD:DP:GL:GQ	0/1:31,27:50:-104.37,-15.08,-104.68:99
-chr1	3315194	rs12063613	A	G	1.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.46;MQ=56.06;MQ0=1;OQ=577.86;QD=9.47;SB=-271.10	GT:AD:DP:GL:GQ	0/1:30,31:51:-76.46,-15.39,-99.42:99
-chr1	3315219	.	C	T	17.67	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=15.64;MQ=52.76;MQ0=1;QD=0.26;SB=34.67	GT:AD:DP:GL:GQ	0/1:62,6:62:-23.74,-18.70,-180.77:50.43
-chr1	3315354	rs12065021	T	C	254.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.68;MQ0=0;OQ=519.08;QD=13.66;SB=-277.27	GT:AD:DP:GL:GQ	0/1:17,21:38:-66.65,-11.46,-65.47:99
-chr1	3315386	rs2493300	A	G	19.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=1158.12;QD=28.95;SB=-549.05	GT:AD:DP:GL:GQ	1/1:0,40:37:-119.43,-11.16,-0.04:99
-chr1	3315441	rs2493299	A	G	105.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=60.00;MQ0=0;OQ=1355.37;QD=28.24;SB=-603.93	GT:AD:DP:GL:GQ	1/1:0,48:44:-139.17,-13.27,-0.04:99
-chr1	3315528	rs55929648	C	T	143.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=56.18;MQ0=0;OQ=1041.13;QD=18.59;SB=-362.91	GT:AD:DP:GL:GQ	0/1:25,31:52:-123.07,-15.67,-66.96:99
-chr1	3315772	rs2493298	C	A	135.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=60.00;MQ0=0;OQ=850.76;QD=17.72;SB=-447.55	GT:AD:DP:GL:GQ	0/1:19,29:48:-102.82,-14.46,-64.75:99
-chr1	3315954	rs36070715	C	G	3.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.72;MQ=51.04;MQ0=0;OQ=1102.41;QD=21.62;SB=-424.97	GT:AD:DP:GL:GQ	0/1:21,30:46:-127.39,-13.87,-69.58:99
-chr1	3316002	rs60965010	G	A	53.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=53.52;MQ0=0;OQ=683.65;QD=15.19;SB=-341.33	GT:AD:DP:GL:GQ	0/1:23,22:41:-84.00,-12.35,-71.37:99
-chr1	3316048	rs59831144	A	G	16.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=6.55;MQ=58.48;MQ0=0;OQ=584.41;QD=12.70;SB=-233.93	GT:AD:DP:GL:GQ	0/1:24,22:41:-74.08,-12.36,-76.23:99
-chr1	3316091	rs2493297	G	A	148.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.53;MQ0=0;OQ=1649.32;QD=33.66;SB=-643.25	GT:AD:DP:GL:GQ	1/1:0,49:44:-168.54,-13.26,-0.02:99
-chr1	3316251	.	G	A	182.76	SnpCluster	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=43.92;MQ0=0;QD=3.10;SB=-111.51	GT:AD:DP:GL:GQ	0/1:47,12:54:-37.83,-16.27,-156.64:99
-chr1	3316256	.	T	C	219.54	SnpCluster	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=43.18;MQ0=0;QD=3.66;SB=-32.48	GT:AD:DP:GL:GQ	0/1:44,16:55:-41.82,-16.58,-163.02:99
-chr1	3316258	rs7364679	G	T	370	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=43.51;MQ0=0;QD=6.07;SB=-108.68	GT:AD:DP:GL:GQ	0/1:43,18:56:-57.15,-16.87,-140.13:99
-chr1	3316271	.	G	T	44.21	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=42.99;MQ0=0;OQ=836.87;QD=13.72;SB=-249.23	GT:AD:DP:GL:GQ	0/1:29,32:52:-102.65,-15.68,-71.94:99
-chr1	3316274	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=55.35;MQ=42.03;MQ0=0;OQ=122.20;QD=2.07;SB=-76.97	GT:AD:DP:GL:GQ	0/1:47,12:53:-31.48,-15.98,-148.32:99
-chr1	3316287	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=56;Dels=0.04;HRun=0;HaplotypeScore=28.34;MQ=46.39;MQ0=0;OQ=249.44;QD=4.45;SB=13.22	GT:AD:DP:GL:GQ	0/1:42,12:52:-43.29,-15.07,-133.82:99
-chr1	3316288	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=24.35;MQ=46.92;MQ0=0;OQ=241.94;QD=4.17;SB=40.21	GT:AD:DP:GL:GQ	0/1:44,14:54:-43.75,-16.27,-150.33:99
-chr1	3316304	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=2;HaplotypeScore=31.71;MQ=50.98;MQ0=0;OQ=105.86;QD=1.79;SB=47.12	GT:AD:DP:GL:GQ	0/1:51,8:50:-28.93,-15.06,-145.13:99
-chr1	3316355	.	A	G	40.11	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=6.42;MQ=53.40;MQ0=0;QD=0.79;SB=24.53	GT:AD:DP:GL:GQ	0/1:42,9:48:-21.76,-14.47,-159.00:72.94
-chr1	3316370	.	G	A	1.13	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=7.87;MQ=52.81;MQ0=0;OQ=530.25;QD=10.40;SB=-291.29	GT:AD:DP:GL:GQ	0/1:31,20:45:-69.88,-13.57,-88.85:99
-chr1	3316500	rs4648494	A	G	396.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.41;MQ0=0;OQ=1411.68;QD=27.15;SB=-591.87	GT:AD:DP:GL:GQ	1/1:0,52:46:-144.80,-13.88,-0.05:99
-chr1	3316656	rs6670123	C	G	292.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=56.33;MQ0=0;OQ=1404.84;QD=19.79;SB=-673.50	GT:AD:DP:GL:GQ	0/1:33,38:68:-164.26,-20.49,-128.05:99
-chr1	3316892	rs2493296	C	T	338.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.07;MQ0=0;OQ=702.09;QD=14.04;SB=-332.51	GT:AD:DP:GL:GQ	0/1:27,23:46:-87.37,-13.87,-76.76:99
-chr1	3317409	rs1106270	A	G	118.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=1192.84;QD=30.59;SB=-537.44	GT:AD:DP:GL:GQ	1/1:0,39:35:-122.88,-10.54,-0.02:99
-chr1	3317462	rs1106271	T	G	1.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=1.32;MQ=56.98;MQ0=0;OQ=1224.22;QD=31.39;SB=-406.92	GT:AD:DP:GL:GQ	1/1:0,39:38:-126.04,-11.45,-0.03:99
-chr1	3317665	rs57382922	C	T	121.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=57.50;MQ0=0;OQ=526.20;QD=15.48;SB=-279.22	GT:AD:DP:GL:GQ	0/1:15,19:32:-65.55,-9.65,-47.15:99
-chr1	3318218	rs870124	T	C	46.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=58.35;MQ0=0;OQ=987.47;QD=31.85;SB=-495.44	GT:AD:DP:GL:GQ	1/1:0,30:29:-102.35,-8.74,-0.01:87.24
-chr1	3318519	rs2493292	C	T	35.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=5.38;MQ=58.81;MQ0=0;OQ=410.88;QD=10.54;SB=-213.48	GT:AD:DP:GL:GQ	0/1:22,17:36:-55.22,-10.85,-74.55:99
-chr1	3319244	rs2493291	C	T	128.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=57.07;MQ0=0;OQ=113.91;QD=8.76;SB=-36.64	GT:AD:DP:GL:GQ	0/1:8,5:13:-18.59,-3.92,-28.88:99
-chr1	3319441	.	G	A	108.40	PASS	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=283.86;QD=13.52;SB=-108.97	GT:AD:DP:GL:GQ	0/1:11,10:21:-38.00,-6.33,-35.64:99
-chr1	3320120	.	C	T	102.17	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=709.62;QD=14.78;SB=-362.53	GT:AD:DP:GL:GQ	0/1:24,23:45:-87.81,-13.57,-69.77:99
-chr1	3320537	rs2493290	G	A	97.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.41;MQ=59.54;MQ0=0;OQ=872.79;QD=17.46;SB=-392.92	GT:AD:DP:GL:GQ	0/1:24,26:48:-105.02,-14.46,-80.60:99
-chr1	3320607	rs11578951	G	A	205.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=56.45;MQ0=0;OQ=183.21;QD=9.16;SB=-114.08	GT:AD:DP:GL:GQ	0/1:13,7:17:-26.73,-5.12,-34.52:99
-chr1	3320622	rs2493289	A	G	29.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.62;MQ0=0;OQ=591.39;QD=28.16;SB=-179.75	GT:AD:DP:GL:GQ	1/1:0,20:19:-62.74,-5.73,-0.02:57.13
-chr1	3320744	rs2493288	G	A	319.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.00;MQ0=0;OQ=558.26;QD=13.29;SB=-286.76	GT:AD:DP:GL:GQ	0/1:23,19:41:-71.47,-12.36,-76.00:99
-chr1	3321412	rs60973157	G	C	340.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.61;MQ0=0;OQ=1008.01;QD=17.08;SB=-510.27	GT:AD:DP:GL:GQ	0/1:31,28:58:-121.57,-17.48,-125.42:99
-chr1	3321593	rs2483228	T	C	57.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=59.17;MQ0=0;OQ=862.49;QD=30.80;SB=-342.44	GT:AD:DP:GL:GQ	1/1:0,28:27:-89.85,-8.14,-0.02:81.21
-chr1	3321759	rs1999528	A	G	88.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1263.70;QD=30.82;SB=-424.24	GT:AD:DP:GL:GQ	1/1:0,41:41:-129.99,-12.37,-0.04:99
-chr1	3322543	rs2483229	T	C	158.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.98;MQ0=0;OQ=401.83;QD=7.31;SB=-190.61	GT:AD:DP:GL:GQ	0/1:33,22:50:-58.54,-15.08,-123.40:99
-chr1	3322811	rs1889123	T	C	57.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=1553.51;QD=34.52;SB=-743.30	GT:AD:DP:GL:GQ	1/1:0,45:44:-158.95,-13.25,-0.01:99
-chr1	3323101	rs55713431	A	G	0.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=1.93;MQ=59.65;MQ0=0;OQ=422.62;QD=7.97;SB=-123.50	GT:AD:DP:GL:GQ	0/1:32,21:47:-59.71,-14.17,-112.42:99
-chr1	3323323	rs2068354	A	G	160.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=738.34;QD=11.36;SB=-391.91	GT:AD:DP:GL:GQ	0/1:34,31:64:-96.41,-19.29,-135.43:99
-chr1	3324752	rs2483230	A	G	139.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=59.42;MQ0=0;OQ=1229.51;QD=30.74;SB=-406.34	GT:AD:DP:GL:GQ	1/1:0,40:38:-126.56,-11.45,-0.03:99
-chr1	3326060	rs1984069	C	T	66.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=2062.28;QD=37.50;SB=-721.47	GT:AD:DP:GL:GQ	1/1:0,55:53:-209.83,-15.97,-0.02:99
-chr1	3327403	rs1572040	A	G	479.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1561.86;QD=33.95;SB=-803.63	GT:AD:DP:GL:GQ	1/1:0,46:45:-159.79,-13.56,-0.02:99
-chr1	3327481	.	A	G	13.29	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.51;MQ=58.78;MQ0=0;OQ=805.84;QD=11.68;SB=-333.16	GT:AD:DP:GL:GQ	0/1:35,34:66:-103.76,-19.89,-136.42:99
-chr1	3327496	rs11579873	G	A	76.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.52;MQ=59.07;MQ0=0;OQ=1231.78;QD=17.60;SB=-403.19	GT:AD:DP:GL:GQ	0/1:34,36:67:-146.65,-20.19,-102.53:99
-chr1	3328305	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=2;HaplotypeScore=9.54;MQ=57.05;MQ0=0;OQ=81.44;QD=1.66;SB=56.21	GT:AD:DP:GL:GQ	0/1:35,13:31:-20.79,-9.36,-100.83:99
-chr1	3328931	rs2483231	A	G	0.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=57.64;MQ0=0;OQ=961.69;QD=26.71;SB=-96.83	GT:AD:DP:GL:GQ	1/1:0,35:29:-99.77,-8.74,-0.01:87.24
-chr1	3329199	rs10492937	C	A	94.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=591.17;QD=15.16;SB=-220.88	GT:AD:DP:GL:GQ	0/1:18,21:38:-73.85,-11.45,-60.07:99
-chr1	3329740	.	G	T	6.44	PASS	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=3.49;MQ=59.36;MQ0=0;OQ=539.79;QD=14.99;SB=-294.29	GT:AD:DP:GL:GQ	0/1:15,21:33:-67.21,-9.94,-47.46:99
-chr1	3329976	rs2483232	A	G	146.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=59.54;MQ0=0;OQ=1387.79;QD=27.76;SB=-682.70	GT:AD:DP:GL:GQ	1/1:0,49:45:-142.42,-13.58,-0.05:99
-chr1	3330129	rs4648385	C	T	62.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.51;MQ0=0;OQ=1421.02;QD=37.40;SB=-712.36	GT:AD:DP:GL:GQ	1/1:0,38:36:-145.70,-10.84,-0.01:99
-chr1	3330207	rs2483233	A	G	536.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1265.03;QD=33.29;SB=-631.30	GT:AD:DP:GL:GQ	1/1:0,38:37:-130.10,-11.15,-0.02:99
-chr1	3330527	rs2483234	A	G	229.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1088.75;QD=27.92;SB=-544.02	GT:AD:DP:GL:GQ	1/1:0,38:35:-112.49,-10.56,-0.04:99
-chr1	3330619	rs2483235	A	G	461.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=1699.01;QD=28.80;SB=-626.83	GT:AD:DP:GL:GQ	1/1:0,59:55:-173.55,-16.59,-0.06:99
-chr1	3330715	rs4648500	A	C	461.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.69;MQ0=0;OQ=953.20;QD=15.63;SB=-476.30	GT:AD:DP:GL:GQ	0/1:28,33:61:-116.98,-18.37,-104.31:99
-chr1	3331400	rs2483236	C	T	56.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=55.81;MQ0=0;OQ=1168.69;QD=36.52;SB=-534.21	GT:AD:DP:GL:GQ	1/1:0,31:30:-120.46,-9.04,-0.01:90.29
-chr1	3331651	rs1970118	A	G	69.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=50.87;MQ0=0;OQ=938.62;QD=27.61;SB=-452.46	GT:AD:DP:GL:GQ	1/1:0,34:32:-97.49,-9.66,-0.04:96.17
-chr1	3331969	rs41303861	G	T	165.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=56.82;MQ0=0;OQ=610.74;QD=12.99;SB=-193.66	GT:AD:DP:GL:GQ	0/1:23,24:44:-77.62,-13.26,-67.40:99
-chr1	3332390	rs2244013	G	A	343.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.76;MQ=59.53;MQ0=0;OQ=624.83;QD=12.75;SB=-319.81	GT:AD:DP:GL:GQ	0/1:27,22:47:-79.93,-14.16,-96.24:99
-chr1	3332664	rs870171	G	T	453.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=726.05;QD=12.10;SB=-151.13	GT:AD:DP:GL:GQ	0/1:34,26:59:-93.67,-17.78,-105.77:99
-chr1	3333105	rs7549050	A	G	414.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=796.44;QD=10.62;SB=-292.01	GT:AD:DP:GL:GQ	0/1:42,33:74:-105.23,-22.30,-168.30:99
-chr1	3333795	rs55833861	T	C	103.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=2.59;MQ=58.97;MQ0=0;OQ=717.11;QD=11.38;SB=-232.86	GT:AD:DP:GL:GQ	0/1:36,27:59:-92.78,-17.78,-129.42:99
-chr1	3333920	rs56196310	G	T	246.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.56;MQ0=0;OQ=564.40;QD=10.65;SB=-293.98	GT:AD:DP:GL:GQ	0/1:32,21:49:-74.48,-14.76,-99.79:99
-chr1	3334336	rs61759212	A	G	99.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.13;MQ0=0;OQ=418.37;QD=9.73;SB=-116.62	GT:AD:DP:GL:GQ	0/1:23,20:40:-57.18,-12.06,-85.13:99
-chr1	3334647	rs2483240	A	G	15.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=55.38;MQ0=1;OQ=79.23;QD=3.96;SB=-53.29	GT:AD:DP:GL:GQ	0/1:13,7:16:-16.03,-4.82,-44.27:99
-chr1	3335005	rs2483242	A	T	508.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.64;MQ0=0;OQ=469.82;QD=13.82;SB=-232.91	GT:AD:DP:GL:GQ	0/1:18,16:34:-60.51,-10.24,-69.68:99
-chr1	3335714	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=9.36;MQ=57.49;MQ0=0;OQ=205.84;QD=4.57;SB=56.19	GT:AD:DP:GL:GQ	0/1:25,20:36:-34.71,-10.85,-86.86:99
-chr1	3336208	rs2493277	C	G	559.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=642.22;QD=14.94;SB=-326.21	GT:AD:DP:GL:GQ	0/1:23,20:42:-80.17,-12.66,-97.68:99
-chr1	3336263	rs11583353	C	T	94.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.90;MQ0=0;OQ=708.85;QD=18.65;SB=-324.84	GT:AD:DP:GL:GQ	0/1:17,21:37:-85.32,-11.15,-51.45:99
-chr1	3339994	rs10752734	T	C	155.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.27;MQ0=2;OQ=107.39;QD=6.32;SB=-10.00	GT:AD:DP:GL:GQ	1/1:8,9:4:-14.27,-1.20,-0.00:12.04
-chr1	3342087	rs1537406	T	C	266.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.23;MQ0=0;OQ=2135.99;QD=33.90;SB=-825.32	GT:AD:DP:GL:GQ	1/1:0,63:60:-217.21,-18.07,-0.02:99
-chr1	3342088	rs12735779	G	C	80.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.25;MQ0=0;OQ=2678.31;QD=41.20;SB=-987.13	GT:AD:DP:GL:GQ	1/1:0,65:62:-271.44,-18.68,-0.02:99
-chr1	3342207	rs1537405	T	C	92.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=1223.31;QD=28.45;SB=-485.50	GT:AD:DP:GL:GQ	1/1:0,43:40:-125.96,-12.07,-0.04:99
-chr1	3342363	rs1537404	G	C	0.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=2.53;MQ=57.71;MQ0=0;OQ=1605.19;QD=37.33;SB=-574.94	GT:AD:DP:GL:GQ	1/1:0,43:39:-164.12,-11.76,-0.02:99
-chr1	3342401	rs1065247	T	C	218.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=58.89;MQ0=0;OQ=523.80;QD=12.47;SB=-250.33	GT:AD:DP:GL:GQ	0/1:20,21:38:-67.12,-11.46,-67.07:99
-chr1	3342439	rs1537402	T	C	329.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=1390.94;QD=29.59;SB=-663.80	GT:AD:DP:GL:GQ	1/1:0,47:44:-142.72,-13.27,-0.04:99
-chr1	3342644	rs2493267	A	G	426.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1871.16;QD=31.71;SB=-785.23	GT:AD:DP:GL:GQ	1/1:0,59:54:-190.73,-16.27,-0.03:99
-chr1	3342725	rs35015571	C	T	160.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.43;MQ0=0;OQ=266.00;QD=8.06;SB=-157.61	GT:AD:DP:GL:GQ	0/1:23,10:28:-38.32,-8.44,-61.48:99
-chr1	3342732	rs2236518	A	C	16.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=2.32;MQ=59.45;MQ0=0;OQ=611.30;QD=17.98;SB=-246.93	GT:AD:DP:GL:GQ	0/1:10,24:30:-73.45,-9.04,-31.78:99
-chr1	3343497	rs35837267	G	A	179.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.81;MQ=58.20;MQ0=0;OQ=412.37;QD=12.13;SB=-230.72	GT:AD:DP:GL:GQ	0/1:20,14:34:-54.77,-10.25,-72.54:99
-chr1	3343750	rs2493265	A	G	92.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.09;MQ0=0;OQ=1343.75;QD=27.42;SB=-616.98	GT:AD:DP:GL:GQ	1/1:0,49:43:-138.00,-12.97,-0.04:99
-chr1	3343809	rs2493264	A	G	123.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.40;MQ=58.91;MQ0=0;OQ=1865.11;QD=29.14;SB=-622.24	GT:AD:DP:GL:GQ	1/1:0,64:61:-190.17,-18.41,-0.07:99
-chr1	3344455	rs2483249	T	C	577.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2266.24;QD=31.92;SB=-1078.24	GT:AD:DP:GL:GQ	1/1:0,71:70:-230.26,-21.11,-0.05:99
-chr1	3344475	rs2493263	T	C	726.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2858.56;QD=35.29;SB=-1249.13	GT:AD:DP:GL:GQ	1/1:0,81:80:-289.47,-24.10,-0.03:99
-chr1	3345122	rs55729137	G	A	38.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.48;MQ0=0;OQ=807.80;QD=18.36;SB=-199.91	GT:AD:DP:GL:GQ	0/1:20,24:42:-96.73,-12.66,-57.09:99
-chr1	3346265	rs2483250	A	C	12.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=59.52;MQ0=0;OQ=1256.35;QD=32.21;SB=-315.07	GT:AD:DP:GL:GQ	1/1:0,39:37:-129.23,-11.15,-0.01:99
-chr1	3346495	rs2483251	T	C	2.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=60.00;MQ0=0;OQ=525.69;QD=27.67;SB=-225.75	GT:AD:DP:GL:GQ	1/1:0,19:16:-56.16,-4.82,-0.01:48.13
-chr1	3346655	rs2493262	C	G	18.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=59.17;MQ0=0;OQ=878.66;QD=31.38;SB=-427.67	GT:AD:DP:GL:GQ	1/1:0,27:23:-91.47,-6.94,-0.02:69.23
-chr1	3346875	rs12745100	C	T	10.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=496.33;QD=18.38;SB=-39.63	GT:AD:DP:GL:GQ	0/1:12,15:27:-61.05,-8.13,-42.91:99
-chr1	3347097	rs55892133	A	G	803.11	Indel	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.17;MQ=58.79;MQ0=0;QD=12.55;SB=-200.20	GT:AD:DP:GL:GQ	0/1:34,30:60:-101.69,-18.09,-118.87:99
-chr1	3347896	rs10797392	T	G	467.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=1;OQ=720.09;QD=12.20;SB=-372.76	GT:AD:DP:GL:GQ	0/1:27,32:54:-91.57,-16.27,-88.57:99
-chr1	3348782	rs2483252	G	C	20.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=1.07;MQ=58.41;MQ0=0;OQ=1754.48;QD=39.87;SB=-676.45	GT:AD:DP:GL:GQ	1/1:0,43:42:-179.05,-12.66,-0.02:99
-chr1	3348792	rs35536718	C	G	187.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.60;MQ0=0;OQ=722.68;QD=14.45;SB=-275.28	GT:AD:DP:GL:GQ	0/1:28,22:46:-89.42,-13.87,-106.46:99
-chr1	3349040	rs2493261	C	G	241.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=2328.68;QD=40.85;SB=-454.11	GT:AD:DP:GL:GQ	1/1:0,57:55:-236.48,-16.59,-0.03:99
-chr1	3349142	rs56009352	G	T	195.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=58.75;MQ0=0;OQ=381.64;QD=9.09;SB=-161.15	GT:AD:DP:GL:GQ	0/1:24,18:38:-52.90,-11.45,-81.46:99
-chr1	3349843	rs11588737	T	C	126.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.70;MQ0=0;OQ=680.83;QD=8.96;SB=-348.93	GT:AD:DP:GL:GQ	0/1:44,32:72:-93.07,-21.70,-169.44:99
-chr1	3349896	rs9424295	C	A	298.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.90;MQ0=0;OQ=883.58;QD=12.27;SB=-371.71	GT:AD:DP:GL:GQ	0/1:40,32:69:-112.42,-20.78,-136.87:99
-chr1	3350654	.	A	G	19.67	PASS	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=58.94;MQ0=0;OQ=752.06;QD=11.22;SB=-353.94	GT:AD:DP:GL:GQ	0/1:36,30:64:-97.78,-19.29,-134.25:99
-chr1	3350874	rs2493260	A	T	152.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1881.55;QD=33.01;SB=-813.90	GT:AD:DP:GL:GQ	1/1:0,54:52:-191.76,-15.67,-0.02:99
-chr1	3351164	rs2483254	G	A	165.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.02;MQ=57.99;MQ0=0;OQ=1923.46;QD=34.35;SB=-708.45	GT:AD:DP:GL:GQ	1/1:0,56:52:-195.97,-15.68,-0.04:99
-chr1	3351668	rs61759222	T	C	292.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.16;MQ0=0;OQ=649.71;QD=12.99;SB=-320.27	GT:AD:DP:GL:GQ	0/1:27,23:50:-83.32,-15.07,-104.64:99
-chr1	3351675	rs61759223	T	C	215.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.56;MQ0=0;OQ=453.74;QD=8.73;SB=-214.35	GT:AD:DP:GL:GQ	0/1:31,21:51:-64.03,-15.38,-121.39:99
-chr1	3351951	rs61759224	A	G	132.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.69;MQ0=0;OQ=462.74;QD=9.25;SB=-204.32	GT:AD:DP:GL:GQ	0/1:29,21:49:-64.32,-14.77,-119.90:99
-chr1	3352116	rs867814	C	T	338.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.66;MQ0=0;OQ=1015.19;QD=15.15;SB=-259.14	GT:AD:DP:GL:GQ	0/1:34,33:66:-124.69,-19.89,-112.54:99
-chr1	3352233	rs55781247	C	T	0.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=12.27;MQ=55.55;MQ0=1;OQ=438.31;QD=8.59;SB=-227.00	GT:AD:DP:GL:GQ	0/1:27,22:35:-60.74,-13.63,-60.12:99
-chr1	3352662	.	G	C	94.32	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.30;MQ0=0;OQ=750.60;QD=12.94;SB=-224.33	GT:AD:DP:GL:GQ	0/1:34,23:56:-95.22,-16.87,-149.91:99
-chr1	3353096	rs11808277	C	G	337.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.63;MQ0=0;OQ=1053.89;QD=17.00;SB=-489.21	GT:AD:DP:GL:GQ	0/1:30,32:59:-126.45,-17.78,-131.54:99
-chr1	3353132	.	G	A	167.12	PASS	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=1096.75;QD=16.13;SB=-431.84	GT:AD:DP:GL:GQ	0/1:34,34:67:-133.15,-20.19,-109.37:99
-chr1	3353327	rs10158332	A	T	108.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.82;MQ0=0;OQ=1002.21;QD=14.12;SB=-515.47	GT:AD:DP:GL:GQ	0/1:38,33:71:-124.89,-21.39,-148.24:99
-chr1	3353449	rs10157570	G	A	490.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=905.02;QD=15.88;SB=-430.82	GT:AD:DP:GL:GQ	0/1:30,27:56:-110.66,-16.88,-93.98:99
-chr1	3353662	rs2483255	A	T	46.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=59.30;MQ0=0;OQ=2470.87;QD=37.44;SB=-912.35	GT:AD:DP:GL:GQ	1/1:0,66:64:-250.68,-19.27,-0.01:99
-chr1	3353786	rs2493258	A	G	307.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.56;MQ0=0;OQ=1182.18;QD=13.91;SB=-595.40	GT:AD:DP:GL:GQ	0/1:39,46:85:-147.12,-25.62,-159.37:99
-chr1	3354380	rs61759225	T	C	235.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=921.81;QD=12.29;SB=-424.06	GT:AD:DP:GL:GQ	0/1:42,33:74:-117.76,-22.29,-166.03:99
-chr1	3354597	rs2263010	T	C	533.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2222.94;QD=35.85;SB=-1114.11	GT:AD:DP:GL:GQ	1/1:0,62:62:-225.90,-18.68,-0.02:99
-chr1	3354829	rs61759226	A	T	251.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.16;MQ0=0;OQ=1748.33;QD=17.48;SB=-874.02	GT:AD:DP:GL:GQ	0/1:46,54:99:-207.93,-29.81,-176.30:99
-chr1	3355107	rs4648386	A	G	12.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=59.31;MQ0=0;OQ=1773.45;QD=34.77;SB=-505.48	GT:AD:DP:GL:GQ	1/1:0,51:51:-180.95,-15.36,-0.02:99
-chr1	3355113	rs61759227	G	A	0.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=6.85;MQ=58.80;MQ0=0;OQ=911.32;QD=18.60;SB=-216.88	GT:AD:DP:GL:GQ	0/1:22,27:48:-108.87,-14.46,-75.78:99
-chr1	3355993	rs55913848	G	T	115.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.15;MQ0=0;OQ=1046.84;QD=16.62;SB=-492.93	GT:AD:DP:GL:GQ	0/1:29,34:61:-126.34,-18.38,-91.26:99
-chr1	3356353	rs2096102	C	A	344.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=61.19;MQ0=0;OQ=1204.86;QD=17.21;SB=-565.00	GT:AD:DP:GL:GQ	0/1:30,40:67:-143.95,-20.18,-94.79:99
-chr1	3356461	.	G	A	34.92	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=63.59;MQ=46.78;MQ0=1;QD=0.83;SB=-40.97	GT:AD:DP:GL:GQ	0/1:36,6:34:-17.03,-10.25,-100.31:67.76
-chr1	3356464	.	T	G	27.11	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=13.28;MQ=49.36;MQ0=1;QD=0.85;SB=-38.91	GT:AD:DP:GL:GQ	0/1:28,4:29:-14.73,-8.74,-84.74:59.94
-chr1	3356466	.	G	T	324.76	SnpCluster	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=10.60;MQ=48.57;MQ0=1;QD=10.83;SB=-127.64	GT:AD:DP:GL:GQ	0/1:15,15:26:-43.60,-7.84,-42.90:99
-chr1	3357640	rs2487679	A	G	123.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=59.32;MQ0=0;OQ=2260.98;QD=33.25;SB=-697.21	GT:AD:DP:GL:GQ	1/1:0,68:67:-229.71,-20.18,-0.03:99
-chr1	3357895	rs6697669	T	C	43.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.03;HRun=0;HaplotypeScore=3.79;MQ=57.15;MQ0=0;OQ=335.02;QD=10.15;SB=-38.93	GT:AD:DP:GL:GQ	0/1:18,13:30:-45.82,-9.04,-67.57:99
-chr1	3357991	rs4648501	G	A	122.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.97;MQ0=0;OQ=545.72;QD=10.70;SB=-291.79	GT:AD:DP:GL:GQ	0/1:33,18:50:-72.92,-15.06,-113.74:99
-chr1	3358003	rs2487670	G	A	120.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.77;MQ0=0;OQ=1144.78;QD=22.01;SB=-472.53	GT:AD:DP:GL:GQ	0/1:18,34:50:-132.83,-15.07,-51.40:99
-chr1	3358201	rs55902179	A	G	118.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=60.00;MQ0=0;OQ=620.71;QD=14.78;SB=-241.29	GT:AD:DP:GL:GQ	0/1:20,22:41:-77.71,-12.35,-78.03:99
-chr1	3359613	rs2487668	G	A	227.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.61;MQ0=0;OQ=985.10;QD=16.70;SB=-425.79	GT:AD:DP:GL:GQ	0/1:26,32:57:-118.97,-17.18,-94.23:99
-chr1	3359684	rs34681041	A	G	13.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.71;MQ=60.00;MQ0=0;OQ=330.72;QD=8.70;SB=-110.60	GT:AD:DP:GL:GQ	0/1:21,17:34:-46.60,-10.25,-79.14:99
-chr1	3361330	.	G	C	0.29	PASS	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=68.48;QD=6.85;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,4:9:-12.85,-2.72,-22.16:99
-chr1	3361841	rs55858614	G	C	94.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.70;MQ0=0;OQ=503.58;QD=17.36;SB=-238.39	GT:AD:DP:GL:GQ	0/1:14,15:29:-62.38,-8.74,-58.19:99
-chr1	3362331	rs10909946	A	C	12.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=2.71;MQ=58.18;MQ0=0;OQ=655.84;QD=12.15;SB=-228.89	GT:AD:DP:GL:GQ	0/1:26,28:47:-83.03,-14.16,-81.70:99
-chr1	3362529	rs61759232	T	C	1.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=3.67;MQ=58.99;MQ0=0;OQ=549.81;QD=11.95;SB=-107.61	GT:AD:DP:GL:GQ	0/1:22,24:42:-70.93,-12.66,-83.77:99
-chr1	3362717	.	A	G	41.71	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.65;MQ0=0;OQ=773.42;QD=14.59;SB=-374.28	GT:AD:DP:GL:GQ	0/1:23,30:49:-95.39,-14.76,-86.55:99
-chr1	3363471	rs56365322	C	G	249.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.24;MQ0=0;OQ=638.66;QD=11.61;SB=-240.06	GT:AD:DP:GL:GQ	0/1:30,25:50:-82.23,-15.08,-125.58:99
-chr1	3363827	rs2493256	A	G	265.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.48;MQ0=0;OQ=531.11;QD=12.35;SB=-221.59	GT:AD:DP:GL:GQ	0/1:23,19:42:-71.22,-14.82,-89.22:99
-chr1	3364220	rs12745860	C	T	264.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=58.78;MQ0=0;OQ=718.26;QD=12.60;SB=-212.70	GT:AD:DP:GL:GQ	0/1:33,24:53:-91.09,-15.98,-94.23:99
-chr1	3364244	rs12758368	T	A	250.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.27;MQ0=0;OQ=910.80;QD=14.46;SB=-359.58	GT:AD:DP:GL:GQ	0/1:33,30:62:-113.04,-18.68,-119.17:99
-chr1	3364803	rs56242281	A	G	70.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.36;MQ=59.30;MQ0=0;OQ=300.82;QD=9.12;SB=-84.67	GT:AD:DP:GL:GQ	0/1:18,14:30:-42.41,-9.04,-64.59:99
-chr1	3365228	rs61759235	A	G	136.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=58.63;MQ0=0;OQ=478.85;QD=9.39;SB=-239.48	GT:AD:DP:GL:GQ	0/1:30,21:48:-65.63,-14.46,-116.95:99
-chr1	3365583	rs61759236	C	G	131.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=835.90;QD=18.58;SB=-383.86	GT:AD:DP:GL:GQ	0/1:22,23:43:-99.85,-12.97,-77.78:99
-chr1	3366053	rs61759237	C	T	131.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=735.43;QD=17.10;SB=-313.83	GT:AD:DP:GL:GQ	0/1:21,22:42:-89.48,-12.65,-70.75:99
-chr1	3366393	rs12059504	T	C	302.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=60.00;MQ0=0;OQ=609.78;QD=12.70;SB=-240.29	GT:AD:DP:GL:GQ	0/1:24,24:48:-78.73,-14.47,-96.53:99
-chr1	3366983	rs59183260	C	T	199.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=59.56;MQ0=0;OQ=586.61;QD=13.97;SB=-272.28	GT:AD:DP:GL:GQ	0/1:22,20:39:-73.71,-11.76,-62.95:99
-chr1	3367203	rs2487681	T	C	222.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=60.00;MQ0=0;OQ=351.40;QD=8.79;SB=-154.93	GT:AD:DP:GL:GQ	0/1:22,18:38:-49.88,-11.46,-85.17:99
-chr1	3372040	rs10909947	G	T	39.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.75;MQ0=0;OQ=1667.04;QD=35.47;SB=-355.84	GT:AD:DP:GL:GQ	1/1:0,47:46:-170.30,-13.86,-0.01:99
-chr1	3372773	.	T	G	28.89	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=4.07;MQ=59.49;MQ0=0;QD=0.64;SB=56.17	GT:AD:DP:GL:GQ	0/1:32,13:34:-16.42,-10.24,-99.13:61.72
-chr1	3372898	rs947351	G	A	372.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.19;MQ0=0;OQ=649.44;QD=12.49;SB=-216.21	GT:AD:DP:GL:GQ	0/1:28,24:49:-83.00,-14.77,-93.12:99
-chr1	3373453	rs3893316	G	T	349.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=441.10;QD=14.70;SB=-201.58	GT:AD:DP:GL:GQ	0/1:13,17:29:-56.13,-8.74,-43.76:99
-chr1	3373525	rs7550948	G	A	64.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=1066.26;QD=21.76;SB=-418.80	GT:AD:DP:GL:GQ	0/1:18,31:47:-124.08,-14.17,-50.84:99
-chr1	3373758	rs6424078	A	G	63.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.45;MQ0=0;OQ=303.09;QD=10.10;SB=-109.62	GT:AD:DP:GL:GQ	0/1:15,15:29:-42.34,-8.75,-57.35:99
-chr1	3373912	rs45512802	C	T	115.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.77;MQ=58.81;MQ0=0;OQ=487.90;QD=12.51;SB=-154.65	GT:AD:DP:GL:GQ	0/1:21,18:37:-63.22,-11.15,-77.33:99
-chr1	3374091	rs6667361	A	G	15.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=1.91;MQ=58.45;MQ0=0;OQ=441.93;QD=9.82;SB=-196.52	GT:AD:DP:GL:GQ	0/1:26,19:43:-60.43,-12.96,-100.55:99
-chr1	3374466	rs7522513	A	G	114.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.36;MQ0=0;OQ=449.01;QD=11.23;SB=-195.64	GT:AD:DP:GL:GQ	0/1:20,20:37:-59.34,-11.16,-69.75:99
-chr1	3374989	rs2493250	G	A	285.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.52;MQ0=0;OQ=823.07;QD=17.15;SB=-412.42	GT:AD:DP:GL:GQ	0/1:23,25:48:-100.06,-14.47,-73.79:99
-chr1	3374999	rs2487673	G	T	438.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=759.07;QD=16.87;SB=-384.82	GT:AD:DP:GL:GQ	0/1:19,26:45:-92.75,-13.56,-63.83:99
-chr1	3375110	rs1417897	C	A	224.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.71;MQ0=0;OQ=613.48;QD=15.73;SB=-271.51	GT:AD:DP:GL:GQ	0/1:18,21:37:-75.78,-11.15,-51.34:99
-chr1	3375116	rs1891143	A	G	122.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=57.71;MQ0=0;OQ=346.85;QD=8.89;SB=-128.27	GT:AD:DP:GL:GQ	0/1:22,17:35:-48.52,-10.55,-81.11:99
-chr1	3375190	rs2493249	T	C	0.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=2.59;MQ=59.45;MQ0=0;OQ=889.42;QD=26.16;SB=-381.39	GT:AD:DP:GL:GQ	1/1:0,34:28:-92.55,-8.44,-0.02:84.20
-chr1	3377520	.	G	A	54.48	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=60.00;MQ0=0;OQ=404.10;QD=10.92;SB=-123.57	GT:AD:DP:GL:GQ	0/1:21,16:32:-53.34,-9.65,-57.04:99
-chr1	3379133	rs2298082	T	C	273.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.53;MQ=58.32;MQ0=0;OQ=528.06;QD=13.20;SB=-222.68	GT:AD:DP:GL:GQ	0/1:19,21:37:-67.24,-11.15,-73.98:99
-chr1	3379181	rs2487687	C	T	16.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=60.00;MQ0=0;OQ=545.94;QD=21.00;SB=-232.27	GT:AD:DP:GL:GQ	0/1:9,17:25:-65.41,-7.53,-31.41:99
-chr1	3379587	rs2185639	C	T	119.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=58.13;MQ0=0;OQ=232.01;QD=9.28;SB=-26.61	GT:AD:DP:GL:GQ	0/1:14,10:22:-33.12,-6.63,-45.28:99
-chr1	3380098	rs2493323	T	A	210.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1873.41;QD=38.23;SB=-364.88	GT:AD:DP:GL:GQ	1/1:0,49:49:-190.94,-14.76,-0.01:99
-chr1	3380882	rs2493322	G	A	155.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=666.25;QD=12.34;SB=-269.17	GT:AD:DP:GL:GQ	0/1:33,21:52:-85.58,-15.67,-103.39:99
-chr1	3381466	.	A	G	34.09	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.23;MQ=18.93;MQ0=48;QD=0.47;SB=2.04	GT:AD:DP:GL:GQ	0/1:58,15:13:-10.61,-3.92,-40.00:66.92
-chr1	3381536	rs2493320	G	A	66.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=9.35;MQ0=30;OQ=163.18;QD=3.98;SB=-10.00	GT:AD:DP:GL:GQ	1/1:12,29:5:-19.88,-1.51,-0.00:15.05
-chr1	3381776	rs56863381	G	A	0.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=12.80;MQ0=34;OQ=57.75;QD=1.03;SB=5.02	GT:AD:DP:GL:GQ	0/1:40,16:11:-12.38,-3.32,-24.49:90.59
-chr1	3382016	.	A	G	35.80	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=12.28;MQ0=39;QD=0.55;SB=-10.00	GT:AD:DP:GL:GQ	0/1:54,11:16:-11.69,-4.82,-49.41:68.63
-chr1	3382186	rs2493318	A	G	275.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=47.26;MQ0=1;OQ=747.71;QD=13.35;SB=-372.26	GT:AD:DP:GL:GQ	0/1:27,29:52:-93.72,-15.67,-105.01:99
-chr1	3382897	rs12124163	G	T	198.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.56;MQ0=0;OQ=598.86;QD=14.26;SB=-222.53	GT:AD:DP:GL:GQ	0/1:21,21:41:-75.52,-12.35,-66.44:99
-chr1	3383727	rs10797394	G	A	171.07	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=49.26;MQ0=0;QD=13.16;SB=8.03	GT:AD:DP:GL:GQ	0/1:7,6:12:-24.01,-3.62,-19.11:99
-chr1	3383981	rs56341824	G	T	14.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=1.70;MQ=59.25;MQ0=0;OQ=147.62;QD=5.90;SB=-6.99	GT:AD:DP:GL:GQ	0/1:17,8:23:-24.98,-6.93,-50.77:99
-chr1	3384110	rs10909948	C	T	220.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=54.75;MQ0=0;OQ=493.02;QD=17.00;SB=-263.55	GT:AD:DP:GL:GQ	0/1:13,16:28:-61.02,-8.44,-45.99:99
-chr1	3384316	rs4638054	T	C	12.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.07;MQ0=0;OQ=1239.78;QD=27.55;SB=-421.16	GT:AD:DP:GL:GQ	1/1:0,45:41:-127.61,-12.37,-0.05:99
-chr1	3384500	rs4422946	A	G	10.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=60.00;MQ0=0;OQ=259.70;QD=9.27;SB=-73.94	GT:AD:DP:GL:GQ	0/1:16,12:25:-36.79,-7.54,-56.39:99
-chr1	3384534	rs4534324	T	C	47.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.99;MQ0=0;OQ=674.08;QD=29.31;SB=-343.44	GT:AD:DP:GL:GQ	1/1:0,23:22:-71.01,-6.63,-0.02:66.16
-chr1	3384899	rs10797395	G	A	51.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.52;MQ=59.38;MQ0=0;OQ=712.83;QD=19.27;SB=-338.87	GT:AD:DP:GL:GQ	0/1:16,21:35:-85.11,-10.54,-50.14:99
-chr1	3385089	rs4553117	T	C	310.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=892.31;QD=26.24;SB=-387.26	GT:AD:DP:GL:GQ	1/1:0,34:29:-92.85,-8.75,-0.03:87.19
-chr1	3385248	rs28568519	C	G	124.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=59.45;MQ0=0;OQ=725.71;QD=17.28;SB=-286.30	GT:AD:DP:GL:GQ	0/1:20,22:38:-87.31,-11.46,-71.37:99
-chr1	3386469	rs881978	C	T	144.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.64;MQ=59.25;MQ0=0;OQ=1109.69;QD=19.82;SB=-578.43	GT:AD:DP:GL:GQ	0/1:23,33:55:-130.82,-16.57,-79.57:99
-chr1	3386922	rs56309807	G	A	10.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=6.20;MQ=58.23;MQ0=0;OQ=434.23;QD=11.74;SB=-179.25	GT:AD:DP:GL:GQ	0/1:20,16:31:-56.05,-9.34,-54.39:99
-chr1	3387048	rs2487677	T	C	22.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=58.11;MQ0=0;OQ=1498.47;QD=31.88;SB=-723.23	GT:AD:DP:GL:GQ	1/1:0,46:43:-153.45,-12.96,-0.02:99
-chr1	3387315	rs1051515	G	A	124.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=59.55;MQ0=0;OQ=661.19;QD=15.03;SB=-242.52	GT:AD:DP:GL:GQ	0/1:21,23:41:-81.76,-12.36,-69.63:99
-chr1	3387424	rs1051517	C	T	185.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.57;MQ0=0;OQ=722.32;QD=16.80;SB=-358.40	GT:AD:DP:GL:GQ	0/1:21,22:42:-88.17,-12.66,-71.34:99
-chr1	3387765	rs2487676	G	C	0.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.56;MQ0=0;OQ=985.55;QD=23.47;SB=-402.96	GT:AD:DP:GL:GQ	0/1:13,29:39:-113.61,-11.77,-48.31:99
-chr1	3387785	rs10797396	G	A	343.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=869.16;QD=19.75;SB=-452.50	GT:AD:DP:GL:GQ	0/1:15,29:41:-102.56,-12.36,-46.08:99
-chr1	3388739	.	G	C	3.92	PASS	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=47.12;MQ0=0;OQ=99.91;QD=7.14;SB=-0.98	GT:AD:DP:GL:GQ	0/1:10,4:13:-17.20,-3.93,-33.90:99
-chr1	3388844	rs11579276	C	T	89.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=228.92;QD=8.80;SB=-0.98	GT:AD:DP:GL:GQ	0/1:16,10:21:-32.51,-6.33,-40.91:99
-chr1	3389315	rs2493316	T	C	332.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=364.79;QD=11.40;SB=-143.65	GT:AD:DP:GL:GQ	0/1:18,14:32:-49.41,-9.65,-68.22:99
-chr1	3390585	rs12124659	C	T	210.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.96;MQ0=0;OQ=1350.80;QD=37.52;SB=-227.30	GT:AD:DP:GL:GQ	1/1:0,36:35:-138.68,-10.55,-0.01:99
-chr1	3391131	rs2487674	A	G	49.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=2482.25;QD=31.82;SB=-1068.16	GT:AD:DP:GL:GQ	1/1:0,78:76:-251.87,-22.92,-0.06:99
-chr1	3392093	rs4648504	C	T	77.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=53.45;MQ0=1;OQ=1952.99;QD=36.17;SB=-850.15	GT:AD:DP:GL:GQ	1/1:1,53:50:-198.90,-15.06,-0.02:99
-chr1	3394087	rs2821041	C	T	330.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=59.75;MQ0=0;OQ=1098.32;QD=14.64;SB=-325.80	GT:AD:DP:GL:GQ	0/1:41,34:73:-135.10,-21.99,-140.04:99
-chr1	3394997	rs61759244	C	G	135	PASS	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=59.37;MQ0=0;OQ=1716.91;QD=17.88;SB=-792.82	GT:AD:DP:GL:GQ	0/1:43,53:93:-203.04,-28.07,-171.23:99
-chr1	3395156	rs4648505	T	C	309	PASS	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.51;MQ0=0;OQ=921.20;QD=9.70;SB=-319.80	GT:AD:DP:GL:GQ	0/1:57,38:95:-124.03,-28.62,-233.81:99
-chr1	3401826	rs2821034	T	C	25.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=5.69;MQ=57.22;MQ0=0;OQ=336.60;QD=15.30;SB=-157.73	GT:AD:DP:GL:GQ	1/1:0,21:12:-37.26,-3.62,-0.02:36.06
-chr1	3406983	.	G	A	147.34	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=493.27;QD=14.51;SB=-172.20	GT:AD:DP:GL:GQ	0/1:17,17:33:-62.55,-9.94,-60.75:99
-chr1	3408031	rs7516662	A	G	45.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=59.41;MQ0=0;OQ=599.81;QD=15.38;SB=-119.66	GT:AD:DP:GL:GQ	0/1:18,21:37:-74.41,-11.15,-64.16:99
-chr1	3408425	rs2821030	T	C	291.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=44.95;MQ0=0;OQ=775.65;QD=13.61;SB=-335.17	GT:AD:DP:GL:GQ	0/1:17,40:43:-93.82,-12.97,-49.21:99
-chr1	3408438	rs56284135	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=5;HaplotypeScore=43.60;MQ=44.49;MQ0=0;OQ=630.57;QD=9.70;SB=-139.40	GT:AD:DP:GL:GQ	0/1:28,36:49:-81.11,-14.77,-94.33:99
-chr1	3408476	rs57408931	G	C	181.30	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.03;HRun=1;HaplotypeScore=218.91;MQ=41.51;MQ0=3;QD=1.11;SB=-63.16	GT:AD:DP:GL:GQ	0/1:117,24:115:-89.58,-68.17,-379.21:99
-chr1	3408478	rs57082253	G	A	513.03	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=0;HaplotypeScore=193.59;MQ=41.21;MQ0=2;QD=2.85;SB=-274.73	GT:AD:DP:GL:GQ	0/1:134,38:129:-95.85,-41.26,-324.12:99
-chr1	3408517	rs7368034	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=115;Dels=0.00;HRun=0;HaplotypeScore=120.54;MQ=42.22;MQ0=3;OQ=514.65;QD=4.48;SB=-116.36	GT:AD:DP:GL:GQ	0/1:73,33:82:-88.72,-33.97,-192.96:99
-chr1	3411446	rs6669870	C	T	607.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.14;MQ0=0;OQ=1485.27;QD=36.23;SB=-614.81	GT:AD:DP:GL:GQ	1/1:0,41:39:-152.13,-11.76,-0.02:99
-chr1	3411518	rs2821009	A	T	529.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;OQ=1252.41;QD=34.79;SB=-623.61	GT:AD:DP:GL:GQ	1/1:0,36:35:-128.84,-10.55,-0.01:99
-chr1	3411757	rs2821008	A	G	31.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.41;MQ0=0;OQ=238.32;QD=6.11;SB=-110.60	GT:AD:DP:GL:GQ	0/1:25,14:37:-38.27,-11.15,-99.52:99
-chr1	3413327	rs947344	C	T	169.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.66;MQ0=0;OQ=1006.19;QD=19.35;SB=-478.56	GT:AD:DP:GL:GQ	0/1:21,31:45:-117.47,-13.57,-45.94:99
-chr1	3413493	rs2821006	A	G	514.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1416.92;QD=30.15;SB=-704.80	GT:AD:DP:GL:GQ	1/1:0,47:45:-145.32,-13.57,-0.04:99
-chr1	3413602	rs10797397	C	A	230.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=59.11;MQ0=0;OQ=969.58;QD=16.43;SB=-386.82	GT:AD:DP:GL:GQ	0/1:25,34:55:-116.81,-16.57,-75.73:99
-chr1	3414248	rs947345	G	A	253.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=59.23;MQ0=0;OQ=855.83;QD=14.26;SB=-381.90	GT:AD:DP:GL:GQ	0/1:31,29:53:-104.84,-15.98,-85.70:99
-chr1	3415290	rs2794358	A	G	117.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1082.49;QD=30.93;SB=-492.45	GT:AD:DP:GL:GQ	1/1:0,35:32:-111.85,-9.64,-0.02:96.25
-chr1	3416927	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=20.42;MQ=57.31;MQ0=0;OQ=341.32;QD=7.11;SB=-84.89	GT:AD:DP:GL:GQ	0/1:26,19:38:-51.91,-14.49,-87.40:99
-chr1	3416981	rs56310990	G	C	2.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.26;MQ0=0;OQ=93.69;QD=3.02;SB=-14.81	GT:AD:DP:GL:GQ	0/1:25,6:25:-20.20,-7.54,-81.40:99
-chr1	3416998	.	C	T	35.62	PASS	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.93;MQ0=0;OQ=473.15;QD=15.77;SB=-230.75	GT:AD:DP:GL:GQ	0/1:10,20:24:-57.83,-7.23,-29.03:99
-chr1	3418020	rs2820999	T	G	23.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=1.35;MQ=59.30;MQ0=0;OQ=1099.49;QD=33.32;SB=-419.27	GT:AD:DP:GL:GQ	1/1:0,32:32:-113.54,-9.64,-0.01:96.28
-chr1	3418284	rs4648391	G	T	480.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1326.40;QD=33.16;SB=-497.29	GT:AD:DP:GL:GQ	1/1:0,40:39:-136.24,-11.75,-0.02:99
-chr1	3418288	rs4648514	C	T	298.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1504.64;QD=38.58;SB=-514.18	GT:AD:DP:GL:GQ	1/1:0,39:39:-154.07,-11.75,-0.02:99
-chr1	3418468	rs11585362	G	A	504.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1061.06;QD=36.59;SB=-446.58	GT:AD:DP:GL:GQ	1/1:0,29:29:-109.71,-8.74,-0.02:87.27
-chr1	3419555	rs11587354	C	A	388.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=2174.38;QD=35.07;SB=-358.82	GT:AD:DP:GL:GQ	1/1:0,62:58:-221.04,-17.47,-0.02:99
-chr1	3420506	.	T	A	214.92	PASS	AC=2;AF=1.00;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1094.09;QD=36.47;SB=-408.28	GT:AD:DP:GL:GQ	1/1:0,30:30:-113.00,-9.04,-0.01:90.28
-chr1	3422067	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=4;HaplotypeScore=5.56;MQ=56.93;MQ0=0;OQ=142.54;QD=3.85;SB=26.11	GT:AD:DP:GL:GQ	0/1:17,20:22:-24.18,-6.64,-53.52:99
-chr1	3422138	rs12045137	C	G	147.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1703.92;QD=40.57;SB=-765.63	GT:AD:DP:GL:GQ	1/1:0,42:41:-174.00,-12.36,-0.02:99
-chr1	3422853	rs11587498	G	A	175.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=60.00;MQ0=0;OQ=415.52;QD=12.22;SB=-203.18	GT:AD:DP:GL:GQ	0/1:20,14:31:-54.19,-9.35,-54.52:99
-chr1	3424377	rs2820995	A	G	162.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=58.66;MQ0=0;OQ=1805.64;QD=27.36;SB=-525.83	GT:AD:DP:GL:GQ	1/1:0,66:60:-184.23,-18.11,-0.08:99
-chr1	3424844	rs2794362	G	C	500.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1899.04;QD=42.20;SB=-801.86	GT:AD:DP:GL:GQ	1/1:0,45:44:-193.50,-13.26,-0.01:99
-chr1	3427795	rs2794365	T	C	272.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.56;MQ0=0;OQ=540.74;QD=12.87;SB=-223.28	GT:AD:DP:GL:GQ	0/1:22,20:39:-69.11,-11.75,-73.06:99
-chr1	3428053	rs11587384	G	A	58.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=58.59;MQ0=0;OQ=656.10;QD=19.88;SB=-350.39	GT:AD:DP:GL:GQ	0/1:13,20:30:-77.94,-9.05,-31.18:99
-chr1	3428530	rs10909958	C	T	169.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=60.00;MQ0=0;OQ=649.49;QD=10.31;SB=-164.81	GT:AD:DP:GL:GQ	0/1:40,23:61:-86.62,-18.39,-128.91:99
-chr1	3429888	rs10797398	G	C	1.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.26;MQ=58.87;MQ0=0;OQ=1501.66;QD=40.59;SB=-598.80	GT:AD:DP:GL:GQ	1/1:0,37:37:-153.77,-11.16,-0.02:99
-chr1	3430507	rs2794322	T	C	118.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=864.34;QD=26.19;SB=-416.15	GT:AD:DP:GL:GQ	1/1:0,33:29:-90.06,-8.75,-0.04:87.16
-chr1	3430803	rs12049449	A	C	10.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=1.13;MQ=59.39;MQ0=0;OQ=1279.24;QD=33.66;SB=-506.06	GT:AD:DP:GL:GQ	1/1:0,38:37:-131.52,-11.15,-0.02:99
-chr1	3431124	rs12093117	G	A	200.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.17;MQ=59.61;MQ0=0;OQ=828.18;QD=17.25;SB=-263.28	GT:AD:DP:GL:GQ	0/1:20,28:45:-99.67,-13.57,-58.69:99
-chr1	3432615	rs11589895	G	A	209.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.89;MQ0=0;OQ=771.91;QD=18.38;SB=-386.90	GT:AD:DP:GL:GQ	0/1:19,23:42:-93.13,-12.66,-62.18:99
-chr1	3433053	.	C	T	70.11	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=58.26;MQ0=0;OQ=707.05;QD=13.86;SB=-362.49	GT:AD:DP:GL:GQ	0/1:26,25:48:-88.45,-14.46,-91.49:99
-chr1	3435213	rs2821068	G	C	38.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.11;MQ0=0;OQ=1371.97;QD=37.08;SB=-540.03	GT:AD:DP:GL:GQ	1/1:0,36:33:-140.79,-9.95,-0.01:99
-chr1	3435771	rs883427	G	A	416.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.00;MQ0=0;OQ=1899.02;QD=38.76;SB=-741.50	GT:AD:DP:GL:GQ	1/1:0,49:48:-193.50,-14.46,-0.01:99
-chr1	3436171	rs11589175	G	A	118.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=494.22;QD=9.88;SB=-114.31	GT:AD:DP:GL:GQ	0/1:32,17:48:-69.83,-17.13,-113.83:99
-chr1	3436855	rs11811714	C	T	197.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.93;MQ0=0;OQ=2210.05;QD=36.23;SB=-988.23	GT:AD:DP:GL:GQ	1/1:0,61:58:-224.62,-17.49,-0.03:99
-chr1	3436977	rs56103034	G	C	151.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=60.00;MQ0=0;OQ=361.61;QD=12.91;SB=-169.18	GT:AD:DP:GL:GQ	0/1:15,13:27:-47.59,-8.14,-66.07:99
-chr1	3437069	.	A	C	13.05	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=6.13;MQ=58.68;MQ0=0;QD=0.25;SB=74.24	GT:AD:DP:GL:GQ	0/1:37,15:37:-15.71,-11.15,-109.98:45.67
-chr1	3438669	rs61762171	G	A	197.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.08;MQ=59.50;MQ0=0;OQ=831.35;QD=18.07;SB=-356.42	GT:AD:DP:GL:GQ	0/1:21,25:43:-99.38,-12.97,-55.25:99
-chr1	3438727	rs55762450	C	A	163.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.54;MQ0=0;OQ=660.37;QD=13.21;SB=-236.28	GT:AD:DP:GL:GQ	0/1:20,30:45:-82.89,-13.57,-69.96:99
-chr1	3440115	rs2493313	T	C	297.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=56.74;MQ0=0;OQ=1008.77;QD=34.79;SB=-528.20	GT:AD:DP:GL:GQ	1/1:0,29:29:-104.47,-8.74,-0.01:87.25
-chr1	3444452	rs9970944	G	T	111.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=58.11;MQ0=0;OQ=1564.30;QD=32.59;SB=-784.47	GT:AD:DP:GL:GQ	1/1:1,47:45:-160.04,-13.56,-0.02:99
-chr1	3445102	rs12049456	G	A	432	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.32;MQ0=0;OQ=1256.64;QD=36.96;SB=-508.18	GT:AD:DP:GL:GQ	1/1:0,34:33:-129.26,-9.95,-0.01:99
-chr1	3445120	.	C	G	39.08	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=55.59;MQ0=2;QD=0.85;SB=59.22	GT:AD:DP:GL:GQ	0/1:40,6:41:-19.55,-12.36,-150.78:71.92
-chr1	3448511	rs2821064	A	T	100.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.44;MQ=58.81;MQ0=0;OQ=526.36;QD=13.50;SB=-238.77	GT:AD:DP:GL:GQ	0/1:20,19:39:-67.67,-11.75,-70.26:99
-chr1	3448541	rs2794331	G	C	111.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=58.71;MQ0=0;OQ=556.37;QD=15.45;SB=-245.10	GT:AD:DP:GL:GQ	0/1:19,17:32:-68.58,-9.65,-62.08:99
-chr1	3448992	rs12065874	C	T	177.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.46;MQ0=0;OQ=793.34;QD=18.45;SB=-374.15	GT:AD:DP:GL:GQ	0/1:19,24:39:-94.38,-11.76,-47.24:99
-chr1	3452764	rs10797401	T	C	166.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=59.52;MQ0=0;OQ=647.76;QD=16.61;SB=-319.33	GT:AD:DP:GL:GQ	0/1:16,23:38:-79.51,-11.45,-58.06:99
-chr1	3453088	rs28479691	G	A	97.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=55.43;MQ0=1;OQ=249.39;QD=11.34;SB=-131.56	GT:AD:DP:GL:GQ	0/1:11,11:18:-33.65,-5.43,-32.56:99
-chr1	3453209	rs13374309	C	G	5.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=57.20;MQ0=0;OQ=292.98;QD=15.42;SB=-154.58	GT:AD:DP:GL:GQ	0/1:9,10:17:-37.71,-5.13,-33.06:99
-chr1	3455556	rs7539836	A	G	113.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=359.37;QD=13.82;SB=-189.55	GT:AD:DP:GL:GQ	0/1:12,14:25:-46.76,-7.53,-43.20:99
-chr1	3458010	rs7533321	G	A	155.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.46;MQ0=0;OQ=810.48;QD=18.85;SB=-428.48	GT:AD:DP:GL:GQ	0/1:17,25:39:-96.09,-11.75,-47.40:99
-chr1	3458818	rs6413780	A	C	146.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=401.98;QD=8.20;SB=-115.74	GT:AD:DP:GL:GQ	0/1:29,20:47:-57.64,-14.16,-107.92:99
-chr1	3458949	rs7355038	G	A	151.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.19;MQ0=0;OQ=998.13;QD=19.19;SB=-471.50	GT:AD:DP:GL:GQ	0/1:22,30:52:-118.77,-15.67,-71.64:99
-chr1	3460223	rs10909965	T	G	23.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=2.59;MQ=58.78;MQ0=0;OQ=201.44;QD=10.60;SB=-54.94	GT:AD:DP:GL:GQ	0/1:10,9:17:-28.55,-5.12,-30.64:99
-chr1	3460241	rs12078542	T	C	57.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.39;MQ0=0;OQ=207.08;QD=7.14;SB=-117.62	GT:AD:DP:GL:GQ	0/1:17,12:22:-30.63,-6.64,-46.05:99
-chr1	3460729	rs1557089	T	G	340.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=311.87;QD=12.99;SB=-162.75	GT:AD:DP:GL:GQ	0/1:12,12:20:-40.49,-6.02,-30.26:99
-chr1	3462253	rs7516641	A	G	481.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=514.29;QD=11.96;SB=-180.52	GT:AD:DP:GL:GQ	0/1:23,20:43:-67.67,-12.96,-92.19:99
-chr1	3466443	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=45;Dels=0.02;HRun=17;HaplotypeScore=21.57;MQ=53.85;MQ0=0;OQ=205.19;QD=4.56;SB=-78.83	GT:AD:DP:GL:GQ	0/1:24,20:32:-33.15,-9.34,-78.96:99
-chr1	3466697	.	C	G	64.69	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.96;MQ0=0;OQ=671.74;QD=12.44;SB=-259.12	GT:AD:DP:GL:GQ	0/1:31,23:50:-85.55,-15.09,-116.59:99
-chr1	3474782	rs56410789	G	A	184.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=59.61;MQ0=0;OQ=703.19;QD=14.65;SB=-349.63	GT:AD:DP:GL:GQ	0/1:25,22:45:-89.80,-16.20,-75.19:99
-chr1	3480873	.	T	C	0.25	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=1.82;MQ=59.06;MQ0=0;OQ=234.33;QD=11.72;SB=-33.65	GT:AD:DP:GL:GQ	0/1:10,10:19:-32.44,-5.72,-41.44:99
-chr1	3480967	rs4431782	T	C	9.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=2.79;MQ=59.14;MQ0=0;OQ=141.27;QD=5.23;SB=-37.66	GT:AD:DP:GL:GQ	0/1:16,11:24:-24.65,-7.24,-64.66:99
-chr1	3482056	rs2821057	A	G	50.28	Indel	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.04;HRun=0;HaplotypeScore=40.06;MQ=43.76;MQ0=3;QD=0.93;SB=-23.61	GT:AD:DP:GL:GQ	0/1:44,8:48:-22.18,-13.87,-154.71:83.12
-chr1	3483124	rs2821056	A	T	583.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.89;MQ0=0;OQ=1839.69;QD=37.54;SB=-868.96	GT:AD:DP:GL:GQ	1/1:0,49:49:-187.56,-14.76,-0.01:99
-chr1	3483560	rs2821055	T	C	111.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=57.13;MQ0=0;OQ=1375.27;QD=31.98;SB=-687.18	GT:AD:DP:GL:GQ	1/1:0,43:41:-141.13,-12.35,-0.02:99
-chr1	3483710	rs2821054	G	T	266.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.07;MQ0=0;OQ=1733.58;QD=34.67;SB=-747.08	GT:AD:DP:GL:GQ	1/1:0,50:50:-176.97,-15.07,-0.02:99
-chr1	3484389	rs2794348	A	G	1.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=6.39;MQ=58.05;MQ0=0;OQ=1127.20;QD=31.31;SB=-545.88	GT:AD:DP:GL:GQ	1/1:0,36:34:-116.33,-10.25,-0.02:99
-chr1	3484478	rs2794347	G	C	132.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=1529.91;QD=34.77;SB=-715.91	GT:AD:DP:GL:GQ	1/1:0,44:40:-156.62,-12.09,-0.05:99
-chr1	3484580	rs2794346	G	A	64.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=980.89;QD=28.85;SB=-342.41	GT:AD:DP:GL:GQ	1/1:1,32:27:-101.70,-8.14,-0.02:81.23
-chr1	3485237	rs2794344	G	A	227.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=58.20;MQ0=0;OQ=1135.92;QD=18.03;SB=-434.44	GT:AD:DP:GL:GQ	0/1:26,37:58:-134.36,-17.49,-77.46:99
-chr1	3485276	rs2794343	G	T	262.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=58.14;MQ0=0;OQ=635.86;QD=12.00;SB=-319.27	GT:AD:DP:GL:GQ	0/1:28,25:50:-81.94,-15.07,-81.25:99
-chr1	3485297	rs2794342	T	C	164.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.19;MQ=55.76;MQ0=0;OQ=873.19;QD=16.17;SB=-382.03	GT:AD:DP:GL:GQ	0/1:20,34:51:-105.98,-15.38,-70.34:99
-chr1	3485317	.	C	T	0.61	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=55.51;MQ0=0;OQ=217.69;QD=4.03;SB=-62.86	GT:AD:DP:GL:GQ	0/1:42,11:46:-38.92,-13.87,-116.02:99
-chr1	3485320	.	C	T	0.57	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=55.81;MQ0=0;OQ=186.10;QD=3.58;SB=-62.80	GT:AD:DP:GL:GQ	0/1:41,10:44:-35.15,-13.26,-125.21:99
-chr1	3485329	rs56044258	C	G	8.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=4.19;MQ=55.35;MQ0=0;OQ=1813.27;QD=38.58;SB=-922.42	GT:AD:DP:GL:GQ	1/1:0,47:43:-184.93,-12.96,-0.02:99
-chr1	3485401	rs2821053	T	C	608.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.09;MQ0=0;OQ=2115.06;QD=34.11;SB=-1060.08	GT:AD:DP:GL:GQ	1/1:0,62:60:-215.11,-18.07,-0.02:99
-chr1	3485841	rs2794341	T	C	133.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=59.57;MQ0=0;OQ=1280.08;QD=29.77;SB=-579.98	GT:AD:DP:GL:GQ	1/1:0,43:41:-131.63,-12.37,-0.04:99
-chr1	3485914	rs2821052	G	C	139.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.60;MQ0=0;OQ=1918.65;QD=40.82;SB=-901.42	GT:AD:DP:GL:GQ	1/1:0,47:46:-195.47,-13.86,-0.02:99
-chr1	3486188	rs2821051	T	C	180.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.51;MQ0=0;OQ=1502.08;QD=31.96;SB=-651.24	GT:AD:DP:GL:GQ	1/1:0,47:44:-153.81,-13.26,-0.02:99
-chr1	3486339	rs2794340	T	C	195.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=747.54;QD=27.69;SB=-185.41	GT:AD:DP:GL:GQ	1/1:0,27:25:-78.37,-7.54,-0.03:75.17
-chr1	3486805	rs2794339	G	A	3.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=790.02;QD=34.35;SB=-39.54	GT:AD:DP:GL:GQ	1/1:0,23:21:-82.60,-6.33,-0.01:63.20
-chr1	3486898	.	C	G	23.94	LowQual	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=60.00;MQ0=0;QD=2.18;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,7:5:-7.19,-1.52,-10.35:56.76
-chr1	3486969	rs2821050	A	G	170.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.66;MQ0=0;OQ=230.85;QD=23.09;SB=-101.03	GT:AD:DP:GL:GQ	1/1:0,10:9:-26.68,-2.72,-0.01:27.04
-chr1	3487085	rs2821049	G	A	44.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.41;MQ0=1;OQ=1103.43;QD=35.59;SB=-441.32	GT:AD:DP:GL:GQ	1/1:0,31:29:-113.94,-8.74,-0.01:87.28
-chr1	3487785	rs2821048	T	C	3.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.07;MQ0=0;OQ=795.96;QD=29.48;SB=-323.61	GT:AD:DP:GL:GQ	1/1:0,26:24:-83.19,-7.23,-0.01:72.20
-chr1	3488346	rs2821047	A	C	41.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.50;MQ0=0;OQ=1833.45;QD=33.34;SB=-923.21	GT:AD:DP:GL:GQ	1/1:0,55:53:-186.95,-15.96,-0.02:99
-chr1	3488543	rs2794338	G	A	5.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.25;MQ=59.38;MQ0=0;OQ=1108.21;QD=36.94;SB=-425.07	GT:AD:DP:GL:GQ	1/1:0,30:29:-114.42,-8.74,-0.01:87.27
-chr1	3488600	rs2821046	T	C	153.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.16;MQ0=0;OQ=1640.68;QD=29.83;SB=-825.95	GT:AD:DP:GL:GQ	1/1:0,55:53:-167.70,-15.99,-0.05:99
-chr1	3488885	rs2794337	T	G	92.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.67;MQ0=0;OQ=1036.65;QD=29.62;SB=-469.86	GT:AD:DP:GL:GQ	1/1:0,35:34:-107.28,-10.25,-0.03:99
-chr1	3488911	rs2794336	C	A	491.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1159.72;QD=31.34;SB=-543.79	GT:AD:DP:GL:GQ	1/1:0,37:35:-119.58,-10.55,-0.02:99
-chr1	3489106	rs2821045	A	G	0.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=15.70;MQ=58.09;MQ0=0;OQ=1342.02;QD=27.39;SB=-607.24	GT:AD:DP:GL:GQ	1/1:1,48:44:-137.83,-13.27,-0.05:99
-chr1	3489389	rs2794335	C	G	104.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.91;MQ0=0;OQ=2044.98;QD=41.73;SB=-1038.63	GT:AD:DP:GL:GQ	1/1:0,49:48:-208.10,-14.46,-0.02:99
-chr1	3489541	rs2821044	A	G	154.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.93;MQ0=0;OQ=1856.46;QD=32.01;SB=-939.38	GT:AD:DP:GL:GQ	1/1:0,58:53:-189.25,-15.96,-0.02:99
-chr1	3489730	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=5.70;MQ=38.46;MQ0=13;OQ=219.88;QD=2.71;SB=-20.96	GT:AD:DP:GL:GQ	0/1:65,15:58:-42.77,-17.50,-145.53:99
-chr1	3489856	rs61762194	A	G	22.79	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=13.90;MQ=6.46;MQ0=57;QD=0.35;SB=-34.94	GT:AD:DP:GL:GQ	0/1:19,46:3:-6.46,-0.90,-4.17:32.64
-chr1	3490108	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=22.57;MQ=11.21;MQ0=79;OQ=52.09;QD=0.43;SB=2.03	GT:AD:DP:GL:GQ	0/1:64,55:12:-12.11,-3.62,-27.46:84.92
-chr1	3490124	.	G	C	37.51	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=28.89;MQ=9.24;MQ0=69;QD=0.40;SB=-36.43	GT:AD:DP:GL:GQ	0/1:52,37:3:-7.94,-0.91,-4.59:36.89
-chr1	3490204	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=9.07;MQ=18.33;MQ0=40;OQ=221.10;QD=2.91;SB=-48.02	GT:AD:DP:GL:GQ	0/1:38,34:16:-30.22,-4.83,-23.80:99
-chr1	3490220	.	G	C	14.47	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=1;HaplotypeScore=18.26;MQ=21.29;MQ0=44;QD=0.14;SB=5.04	GT:AD:DP:GL:GQ	0/1:89,13:27:-12.87,-8.16,-91.89:47.15
-chr1	3490238	.	G	C	29.48	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=1;HaplotypeScore=19.99;MQ=24.83;MQ0=54;QD=0.24;SB=65.23	GT:AD:DP:GL:GQ	0/1:92,32:39:-18.02,-11.79,-132.68:62.32
-chr1	3490274	rs61762197	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=195;Dels=0.00;HRun=0;HaplotypeScore=31.55;MQ=26.52;MQ0=97;OQ=140.78;QD=0.72;SB=53.20	GT:AD:DP:GL:GQ	0/1:172,21:60:-35.47,-18.11,-209.36:99
-chr1	3490294	rs61762198	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=0;HaplotypeScore=18.88;MQ=30.38;MQ0=61;OQ=410.69;QD=2.85;SB=-6.44	GT:AD:DP:GL:GQ	0/1:110,32:48:-58.84,-14.49,-102.11:99
-chr1	3490309	rs61762199	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=43.37;MQ=33.08;MQ0=48;OQ=683.06;QD=5.42;SB=-30.63	GT:AD:DP:GL:GQ	0/1:101,25:47:-85.76,-14.17,-79.46:99
-chr1	3490312	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=46.24;MQ=34.26;MQ0=40;OQ=200.77;QD=1.72;SB=-32.50	GT:AD:DP:GL:GQ	0/1:85,31:40:-35.43,-12.07,-95.25:99
-chr1	3490435	rs2995009	G	A	597.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.35;MQ0=0;OQ=1467.09;QD=38.61;SB=-711.36	GT:AD:DP:GL:GQ	1/1:0,38:38:-150.31,-11.45,-0.01:99
-chr1	3491040	rs2995008	T	C	284.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1828.19;QD=32.07;SB=-897.29	GT:AD:DP:GL:GQ	1/1:0,57:55:-186.44,-16.58,-0.04:99
-chr1	3492147	.	G	A	23.72	PASS	AC=2;AF=1.00;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=55.26;MQ0=1;OQ=1679.66;QD=32.93;SB=-585.96	GT:AD:DP:GL:GQ	1/1:1,50:45:-171.57,-13.56,-0.02:99
-chr1	3492404	rs2487682	G	A	109.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=55.97;MQ0=0;OQ=1664.54;QD=34.68;SB=-566.34	GT:AD:DP:GL:GQ	1/1:2,46:43:-170.05,-12.95,-0.01:99
-chr1	3493214	rs10909977	C	T	290.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=982.44;QD=37.79;SB=-341.35	GT:AD:DP:GL:GQ	1/1:0,26:26:-101.84,-7.83,-0.01:78.25
-chr1	3493427	rs12133810	G	A	0.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=6.10;MQ=60.00;MQ0=0;OQ=1731.58;QD=36.07;SB=-586.35	GT:AD:DP:GL:GQ	1/1:0,47:45:-176.76,-13.56,-0.02:99
-chr1	3493933	rs12139206	T	C	718.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.76;MQ0=0;OQ=2133.52;QD=33.87;SB=-1000.69	GT:AD:DP:GL:GQ	1/1:0,63:61:-216.96,-18.38,-0.03:99
-chr1	3494278	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=29.95;MQ=39.18;MQ0=0;OQ=57.06;QD=1.00;SB=32.12	GT:AD:DP:GL:GQ	0/1:51,6:50:-24.05,-15.06,-154.00:89.90
-chr1	3494280	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=31.95;MQ=39.34;MQ0=0;OQ=98.32;QD=1.76;SB=29.10	GT:AD:DP:GL:GQ	0/1:46,10:49:-27.88,-14.76,-138.47:99
-chr1	3494307	.	T	G	201.76	SnpCluster	AC=1;AF=0.50;AN=2;DP=58;Dels=0.10;HRun=2;HaplotypeScore=112.88;MQ=32.38;MQ0=0;QD=3.48;SB=-117.62	GT:AD:DP:GL:GQ	0/1:34,18:28:-31.59,-8.13,-64.60:99
-chr1	3494310	rs61762200	C	A	192.29	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=121.85;MQ=30.79;MQ0=0;QD=3.43;SB=-60.75	GT:AD:DP:GL:GQ	0/1:36,18:28:-30.95,-8.43,-66.22:99
-chr1	3494317	.	G	T	32.47	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=81.33;MQ=29.05;MQ0=0;QD=0.60;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,11:25:-14.06,-7.53,-79.10:65.31
-chr1	3494320	.	G	A	676.99	SnpCluster	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=53.82;MQ=29.06;MQ0=0;QD=13.02;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,41:24:-78.21,-7.23,-14.28:70.50
-chr1	3494331	.	C	T	224.74	SnpCluster	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=74.35;MQ=28.87;MQ0=0;QD=4.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:29,19:11:-29.07,-3.31,-14.19:99
-chr1	3494338	.	G	A	223.95	SnpCluster	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=78.36;MQ=28.88;MQ0=0;QD=4.76;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,22:10:-28.69,-3.01,-9.91:68.95
-chr1	3494340	.	G	A	250.50	SnpCluster	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=74.35;MQ=28.88;MQ0=0;QD=5.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,38:10:-31.35,-3.01,-6.64:36.27
-chr1	3494344	.	G	A	85.25	SnpCluster	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=68.88;MQ=28.67;MQ0=0;QD=1.85;SB=-10.00	GT:AD:DP:GL:GQ	0/1:41,5:14:-16.03,-4.22,-34.38:99
-chr1	3494347	.	A	T	143.02	SnpCluster	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=69.92;MQ=28.59;MQ0=0;QD=3.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,19:7:-19.69,-2.11,-6.98:48.71
-chr1	3494357	.	G	T	24.90	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=73.10;MQ=28.56;MQ0=0;QD=0.73;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,15:5:-7.28,-1.51,-10.87:57.73
-chr1	3494360	.	G	A	23.23	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=81.86;MQ=28.53;MQ0=0;QD=0.73;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,11:6:-7.41,-1.81,-14.17:56.05
-chr1	3494364	.	G	A	65.76	SnpCluster	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=67.04;MQ=28.12;MQ0=1;QD=1.93;SB=-10.00	GT:AD:DP:GL:GQ	0/1:29,5:7:-11.97,-2.11,-13.57:98.60
-chr1	3494367	.	G	T	116.01	SnpCluster	AC=1;AF=0.50;AN=2;DP=34;Dels=0.03;HRun=0;HaplotypeScore=76.86;MQ=28.12;MQ0=1;QD=3.41;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,19:9:-17.59,-2.71,-15.13:99
-chr1	3494370	.	G	C	77.61	SnpCluster	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=62.98;MQ=28.25;MQ0=1;QD=2.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,7:9:-20.69,-9.65,-24.68:99
-chr1	3494377	.	G	T	26.91	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=64.80;MQ=28.23;MQ0=1;QD=1.03;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,4:4:-7.18,-1.20,-7.71:59.73
-chr1	3494378	.	G	A	98.30	SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=59.24;MQ=28.44;MQ0=1;QD=3.78;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,11:7:-15.22,-2.11,-10.61:84.98
-chr1	3494380	.	G	A	43.51	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=65.22;MQ=28.44;MQ0=1;QD=1.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,15:4:-12.40,-4.77,-6.87:20.98
-chr1	3494384	.	G	A	26.23	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=51.99;MQ=28.44;MQ0=1;QD=1.01;SB=-10.00	GT:AD:DP:GL:GQ	0/1:20,6:7:-8.02,-2.11,-15.94:59.06
-chr1	3494390	.	G	A	130.87	SnpCluster	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=39.84;MQ=28.27;MQ0=1;QD=6.54;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,12:6:-18.18,-1.81,-3.67:18.63
-chr1	3494414	.	G	A	19.25	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=22.06;MQ=28.20;MQ0=1;QD=1.13;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,2:8:-7.61,-2.41,-20.11:52.04
-chr1	3494416	.	G	C	113.75	SnpCluster	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=18.24;MQ=27.40;MQ0=1;QD=6.32;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,4:8:-17.07,-2.41,-16.09:99
-chr1	3494417	.	A	T	24.41	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=25.18;MQ=27.40;MQ0=1;QD=1.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,5:8:-14.34,-8.61,-21.17:57.23
-chr1	3494420	.	C	A	17.09	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=28.79;MQ=27.40;MQ0=1;QD=0.95;SB=-10.00	GT:AD:DP:GL:GQ	0/1:7,11:6:-6.79,-1.81,-13.20:49.84
-chr1	3494428	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=21.58;MQ=27.57;MQ0=1;OQ=101.33;QD=5.07;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,6:9:-16.13,-2.71,-15.44:99
-chr1	3494440	.	A	G	20.51	LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=4;HaplotypeScore=16.99;MQ=27.20;MQ0=1;QD=1.28;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,2:6:-7.14,-1.81,-14.72:53.31
-chr1	3494450	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=19.98;MQ=27.07;MQ0=1;OQ=136.86;QD=9.12;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,11:7:-19.08,-2.11,-6.94:48.30
-chr1	3494456	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=17;Dels=0.12;HRun=1;HaplotypeScore=13.10;MQ=27.31;MQ0=1;OQ=95.30;QD=5.61;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,5:11:-16.13,-3.31,-22.08:99
-chr1	3494463	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=15.99;MQ=27.75;MQ0=0;OQ=76.78;QD=6.98;SB=-10.00	GT:AD:DP:GL:GQ	0/1:8,3:5:-12.47,-1.51,-7.14:56.32
-chr1	3494470	.	G	A	37.25	LowQual	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=29.00;MQ0=0;QD=4.66;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,6:3:-7.91,-0.90,-3.57:26.65
-chr1	3494476	.	C	G	10.99	LowQual	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=6.99;MQ=29.00;MQ0=0;QD=1.83;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,3:1:-4.35,-0.30,-0.00:1.76
-chr1	3494500	.	C	A	20.04	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=24.21;MQ=29.00;MQ0=0;QD=1.43;SB=-10.00	GT:AD:DP:GL:GQ	0/1:6,8:6:-7.09,-1.81,-14.10:52.83
-chr1	3494506	.	G	A	17.29	LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.05;HRun=1;HaplotypeScore=32.64;MQ=29.00;MQ0=0;QD=0.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,4:10:-8.02,-3.01,-25.65:50.04
-chr1	3494513	.	G	A	25.23	LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=41.45;MQ=31.40;MQ0=0;QD=1.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,4:6:-7.61,-1.81,-13.27:58.06
-chr1	3494520	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=37.55;MQ=33.42;MQ0=0;OQ=64.77;QD=3.24;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,13:7:-11.87,-2.11,-12.97:97.60
-chr1	3494524	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=27.25;MQ=33.22;MQ0=0;OQ=65.77;QD=3.13;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,3:5:-11.37,-1.51,-6.04:45.31
-chr1	3494544	.	G	A	102.31	SnpCluster	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=60.62;MQ=32.58;MQ0=0;QD=4.09;SB=-10.00	GT:AD:DP:GL:GQ	0/1:21,4:9:-16.23,-2.71,-16.04:99
-chr1	3494547	.	G	T	87.64	SnpCluster	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=65.61;MQ=32.58;MQ0=0;QD=3.51;SB=-10.00	GT:AD:DP:GL:GQ	0/1:19,5:8:-14.46,-2.41,-14.43:99
-chr1	3494550	.	A	C	79.94	SnpCluster	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=55.04;MQ=32.72;MQ0=0;QD=3.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,6:8:-16.58,-5.30,-13.73:84.35
-chr1	3494557	.	G	T	60.29	SnpCluster	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=39.81;MQ=31.18;MQ0=0;QD=2.87;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,8:4:-10.52,-1.20,-3.86:26.53
-chr1	3494560	.	G	A	91.28	SnpCluster	AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=38.65;MQ=31.18;MQ0=0;QD=4.35;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,11:4:-16.06,-4.57,-3.40:11.70
-chr1	3494564	.	G	A	29.24	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=32.50;MQ=31.29;MQ0=0;QD=1.46;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,2:6:-8.02,-1.81,-12.47:62.07
-chr1	3494574	.	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=26.98;MQ=29.00;MQ0=0;OQ=69.17;QD=4.94;SB=-10.00	GT:AD:DP:GL:GQ	1/1:6,8:3:-10.41,-0.90,-0.00:9.03
-chr1	3494590	.	G	A	142.91	SnpCluster	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=22.40;MQ=29.00;MQ0=0;QD=9.53;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,8:6:-19.38,-1.81,-3.57:17.63
-chr1	3494597	.	G	T	106.99	SnpCluster	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=25.38;MQ=29.00;MQ0=0;QD=7.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,5:11:-17.30,-3.31,-21.74:99
-chr1	3494600	.	G	A	30.23	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=29.00;MQ0=0;QD=3.02;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,6:5:-7.81,-1.51,-10.71:63.06
-chr1	3494624	.	A	G	3.02	PASS	AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=23.68;MQ0=1;OQ=61.17;QD=10.20;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,5:4:-10.61,-1.20,-4.06:28.52
-chr1	3494941	rs3122612	T	C	27.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.13;MQ0=0;OQ=190.96;QD=21.22;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,9:7:-22.68,-2.11,-0.00:21.05
-chr1	3496357	rs2794320	A	G	629.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.59;MQ0=0;OQ=2197.16;QD=34.88;SB=-1063.87	GT:AD:DP:GL:GQ	1/1:0,63:62:-223.32,-18.67,-0.02:99
-chr1	3497672	rs12138013	G	A	514.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1894.53;QD=36.43;SB=-916.70	GT:AD:DP:GL:GQ	1/1:0,52:50:-193.07,-15.07,-0.03:99
-chr1	3497721	rs4648527	G	A	5.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=5.91;MQ=58.60;MQ0=0;OQ=1808.59;QD=36.17;SB=-904.68	GT:AD:DP:GL:GQ	1/1:0,50:47:-184.46,-14.16,-0.02:99
-chr1	3497811	rs4233026	A	G	453.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=985.33;QD=29.86;SB=-500.18	GT:AD:DP:GL:GQ	1/1:0,33:33:-102.16,-9.96,-0.04:99
-chr1	3499530	rs10909980	C	T	12.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.36;MQ0=0;OQ=831.01;QD=36.13;SB=-270.86	GT:AD:DP:GL:GQ	1/1:0,23:22:-86.69,-6.63,-0.01:66.21
-chr1	3501794	rs7513275	A	G	98.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=60.00;MQ0=0;OQ=215.59;QD=10.78;SB=-81.80	GT:AD:DP:GL:GQ	0/1:7,13:17:-29.97,-5.13,-27.54:99
-chr1	3502201	rs2794327	C	T	251.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=1770.81;QD=37.68;SB=-842.63	GT:AD:DP:GL:GQ	1/1:0,47:45:-180.68,-13.55,-0.01:99
-chr1	3502376	rs2821025	T	C	189.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.06;MQ0=0;OQ=1399.30;QD=34.13;SB=-531.22	GT:AD:DP:GL:GQ	1/1:1,40:40:-143.53,-12.05,-0.02:99
-chr1	3502406	rs2821024	G	A	10.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.84;MQ=59.12;MQ0=0;OQ=1381.75;QD=37.34;SB=-602.98	GT:AD:DP:GL:GQ	1/1:0,37:36:-141.77,-10.85,-0.01:99
-chr1	3502660	rs2821023	T	C	164.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.31;MQ0=0;OQ=631.91;QD=27.47;SB=-134.71	GT:AD:DP:GL:GQ	1/1:0,23:22:-66.81,-6.64,-0.03:66.13
-chr1	3503040	rs3001104	T	C	11.75	LowQual	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=53.43;MQ0=0;QD=0.90;SB=-7.00	GT:AD:DP:GL:GQ	0/1:11,2:9:-7.15,-2.72,-25.40:44.29
-chr1	3503107	rs6697282	T	C	2.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.92;MQ0=0;OQ=303.24;QD=27.57;SB=-40.95	GT:AD:DP:GL:GQ	1/1:0,11:10:-33.91,-3.01,-0.00:30.08
-chr1	3503479	rs55936822	G	A	66.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=385.29;QD=13.76;SB=-81.58	GT:AD:DP:GL:GQ	0/1:14,14:27:-49.96,-8.15,-41.31:99
-chr1	3504130	rs3001107	A	T	92.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=60.00;MQ0=0;OQ=1158.27;QD=35.10;SB=-515.45	GT:AD:DP:GL:GQ	1/1:0,33:32:-119.42,-9.64,-0.01:96.30
-chr1	3504221	rs2995006	A	G	438.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1363.50;QD=34.96;SB=-648.28	GT:AD:DP:GL:GQ	1/1:0,39:39:-139.95,-11.75,-0.02:99
-chr1	3504611	rs6701230	T	C	61.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=1071.54;QD=26.79;SB=-482.12	GT:AD:DP:GL:GQ	1/1:0,40:34:-110.77,-10.26,-0.03:99
-chr1	3505152	.	C	G	6.95	PASS	AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=54.64;MQ0=0;OQ=215.54;QD=15.40;SB=-56.93	GT:AD:DP:GL:GQ	1/1:2,12:6:-25.13,-1.81,-0.00:18.06
-chr1	3505256	rs2794328	C	A	31.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.33;MQ0=0;OQ=824.44;QD=29.44;SB=-191.27	GT:AD:DP:GL:GQ	1/1:1,27:24:-86.04,-7.23,-0.01:72.19
-chr1	3505590	rs2821011	T	C	3.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=1307.30;QD=29.71;SB=-329.39	GT:AD:DP:GL:GQ	1/1:0,44:40:-134.34,-12.06,-0.03:99
-chr1	3506096	rs4648395	G	A	428.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1105.43;QD=35.66;SB=-453.34	GT:AD:DP:GL:GQ	1/1:0,31:29:-114.14,-8.74,-0.01:87.28
-chr1	3506280	rs7552280	C	T	597.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1498.57;QD=38.42;SB=-699.42	GT:AD:DP:GL:GQ	1/1:0,39:38:-153.45,-11.45,-0.01:99
-chr1	3506640	rs4018202	C	T	591.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1796.97;QD=36.67;SB=-852.00	GT:AD:DP:GL:GQ	1/1:0,49:46:-183.30,-13.86,-0.02:99
-chr1	3507139	rs4648528	C	T	150.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.89;MQ0=0;OQ=1470.55;QD=35.01;SB=-673.24	GT:AD:DP:GL:GQ	1/1:0,42:39:-150.66,-11.76,-0.02:99
-chr1	3507337	rs61373700	C	G	106.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.76;MQ=57.26;MQ0=0;OQ=1716.27;QD=39.91;SB=-832.44	GT:AD:DP:GL:GQ	1/1:1,42:42:-175.24,-12.66,-0.02:99
-chr1	3507396	rs6693958	G	A	63.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.29;MQ0=0;OQ=1559.78;QD=38.04;SB=-721.97	GT:AD:DP:GL:GQ	1/1:0,41:40:-159.58,-12.05,-0.01:99
-chr1	3507433	rs59013990	G	C	40.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.41;MQ0=0;OQ=1114.70;QD=28.58;SB=-265.33	GT:AD:DP:GL:GQ	1/1:0,38:29:-115.08,-8.75,-0.02:87.28
-chr1	3508244	rs2821012	T	C	433.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=981.44;QD=28.87;SB=-510.19	GT:AD:DP:GL:GQ	1/1:0,34:32:-101.76,-9.65,-0.03:96.21
-chr1	3508275	rs12410528	G	A	77.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.32;MQ0=0;OQ=639.66;QD=18.81;SB=-281.31	GT:AD:DP:GL:GQ	0/1:14,20:31:-76.59,-9.34,-39.32:99
-chr1	3508279	rs12401505	C	T	12.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=59.32;MQ0=0;OQ=621.28;QD=18.27;SB=-279.19	GT:AD:DP:GL:GQ	0/1:14,19:31:-74.75,-9.34,-43.77:99
-chr1	3508347	rs56770023	C	T	305.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=1098.04;QD=36.60;SB=-308.27	GT:AD:DP:GL:GQ	1/1:0,30:29:-113.40,-8.74,-0.01:87.27
-chr1	3508348	rs60957843	A	G	332.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=996.70;QD=34.37;SB=-270.42	GT:AD:DP:GL:GQ	1/1:0,29:29:-103.27,-8.74,-0.01:87.25
-chr1	3508499	rs2821013	C	A	29.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=59.05;MQ0=0;OQ=1719.86;QD=35.10;SB=-757.10	GT:AD:DP:GL:GQ	1/1:0,49:47:-175.58,-14.15,-0.01:99
-chr1	3508603	rs7514061	C	T	105.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.33;MQ0=0;OQ=1426.84;QD=33.97;SB=-607.00	GT:AD:DP:GL:GQ	1/1:0,42:38:-146.28,-11.45,-0.02:99
-chr1	3508717	rs2821014	A	C	0.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=3;HaplotypeScore=1.13;MQ=59.42;MQ0=0;OQ=907.74;QD=22.69;SB=-295.54	GT:AD:DP:GL:GQ	1/1:0,37:28:-94.37,-8.43,-0.01:84.22
-chr1	3508804	rs7521546	T	C	5.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=1.42;MQ=57.17;MQ0=0;OQ=713.23;QD=28.53;SB=-330.78	GT:AD:DP:GL:GQ	1/1:0,25:24:-74.93,-7.24,-0.02:72.16
-chr1	3509294	rs12024499	A	G	18.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=58.37;MQ0=0;OQ=1073.16;QD=24.96;SB=-338.38	GT:AD:DP:GL:GQ	1/1:0,43:37:-110.95,-11.17,-0.05:99
-chr1	3509463	rs12025426	T	C	57.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.00;MQ0=0;OQ=1068.56;QD=25.44;SB=-559.52	GT:AD:DP:GL:GQ	1/1:0,42:36:-110.49,-10.87,-0.05:99
-chr1	3509651	rs56328010	C	G	123.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.54;MQ=58.84;MQ0=0;OQ=608.86;QD=15.22;SB=-231.35	GT:AD:DP:GL:GQ	0/1:21,19:38:-75.63,-11.46,-87.10:99
-chr1	3509894	rs10752738	A	G	106.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=57.39;MQ0=0;OQ=1124.20;QD=31.23;SB=-480.45	GT:AD:DP:GL:GQ	1/1:0,36:33:-116.02,-9.94,-0.01:99
-chr1	3509987	rs2821015	T	C	88.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.95;MQ0=0;OQ=1023.67;QD=31.99;SB=-513.41	GT:AD:DP:GL:GQ	1/1:0,31:32:-108.71,-12.22,-2.76:94.68
-chr1	3510191	rs2794356	C	A	66.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=58.63;MQ0=0;OQ=1082.36;QD=31.83;SB=-352.40	GT:AD:DP:GL:GQ	1/1:0,34:33:-111.84,-9.95,-0.02:99
-chr1	3510399	rs2794355	C	T	148.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.22;MQ0=0;OQ=1723.81;QD=37.47;SB=-800.07	GT:AD:DP:GL:GQ	1/1:0,46:45:-175.99,-13.56,-0.02:99
-chr1	3510532	rs2821016	A	C	65.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=868.96;QD=27.16;SB=-409.86	GT:AD:DP:GL:GQ	1/1:0,32:29:-90.51,-8.74,-0.03:87.13
-chr1	3511971	rs56140438	T	C	2680.91	Indel	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.68;MQ0=0;QD=34.82;SB=-1364.21	GT:AD:DP:GL:GQ	1/1:0,77:76:-271.70,-22.89,-0.02:99
-chr1	3513689	rs2794354	T	C	23.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=1332.54;QD=30.29;SB=-459.40	GT:AD:DP:GL:GQ	1/1:0,44:41:-136.87,-12.36,-0.03:99
-chr1	3513757	rs2821018	T	C	1.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=52.28;MQ0=0;OQ=1127.31;QD=32.21;SB=-555.88	GT:AD:DP:GL:GQ	1/1:0,35:33:-116.33,-9.94,-0.01:99
-chr1	3513776	rs2821019	A	C	16.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=52.84;MQ0=0;OQ=1256.82;QD=30.65;SB=-634.67	GT:AD:DP:GL:GQ	1/1:0,41:37:-129.29,-11.15,-0.02:99
-chr1	3513778	rs2821020	G	A	39.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=4.08;MQ=53.03;MQ0=0;OQ=1497.87;QD=35.66;SB=-772.68	GT:AD:DP:GL:GQ	1/1:0,42:39:-153.39,-11.75,-0.01:99
-chr1	3515181	rs2794353	G	C	0.02	FDRtranche1.00to2.00	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=5;HaplotypeScore=0.32;MQ=58.30;MQ0=0;OQ=1440.93;QD=40.03;SB=-600.98	GT:AD:DP:GL:GQ	1/1:0,36:34:-147.69,-10.24,-0.01:99
-chr1	3515467	rs36031771	G	A	114.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1598.59;QD=36.33;SB=-811.32	GT:AD:DP:GL:GQ	1/1:0,44:42:-163.46,-12.66,-0.02:99
-chr1	3515500	rs34852522	G	A	546.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1591.31;QD=37.01;SB=-737.47	GT:AD:DP:GL:GQ	1/1:1,42:41:-162.73,-12.35,-0.01:99
-chr1	3515696	rs10909986	G	A	566.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1907.24;QD=38.92;SB=-905.69	GT:AD:DP:GL:GQ	1/1:0,49:48:-194.32,-14.46,-0.01:99
-chr1	3516250	rs12121341	A	G	86.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1093.76;QD=29.56;SB=-543.02	GT:AD:DP:GL:GQ	1/1:0,37:35:-112.99,-10.56,-0.03:99
-chr1	3518397	rs57902798	C	A	88.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.13;MQ0=0;OQ=809.40;QD=32.38;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,25:24:-84.53,-7.23,-0.01:72.21
-chr1	3518534	rs1539126	G	A	66.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=60.00;MQ0=0;OQ=1266.77;QD=36.19;SB=-476.64	GT:AD:DP:GL:GQ	1/1:0,34:33:-130.27,-9.94,-0.01:99
-chr1	3518701	rs2794326	T	C	149.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.07;MQ0=0;OQ=1658.37;QD=33.17;SB=-790.25	GT:AD:DP:GL:GQ	1/1:0,50:49:-169.45,-14.76,-0.03:99
-chr1	3519249	rs10909987	G	C	637.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1866.21;QD=40.57;SB=-960.72	GT:AD:DP:GL:GQ	1/1:0,45:44:-190.22,-13.26,-0.01:99
-chr1	3521082	rs4648396	C	T	0.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=5;HaplotypeScore=1.32;MQ=59.36;MQ0=0;OQ=2285.23;QD=39.40;SB=-1043.37	GT:AD:DP:GL:GQ	1/1:0,58:57:-232.12,-17.17,-0.02:99
-chr1	3521301	rs4648397	T	C	39.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.20;MQ0=0;OQ=1821.49;QD=31.41;SB=-869.61	GT:AD:DP:GL:GQ	1/1:0,58:57:-185.78,-17.19,-0.04:99
-chr1	3521455	rs4648398	C	T	121.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=58.90;MQ0=0;OQ=2021.45;QD=34.26;SB=-686.93	GT:AD:DP:GL:GQ	1/1:0,59:53:-205.75,-15.97,-0.02:99
-chr1	3522563	rs6693192	A	G	270.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=513.63;QD=9.88;SB=-275.26	GT:AD:DP:GL:GQ	0/1:30,22:52:-70.32,-15.67,-121.33:99
-chr1	3522569	rs6678958	G	A	350.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=670.10;QD=13.14;SB=-343.79	GT:AD:DP:GL:GQ	0/1:29,22:51:-85.67,-15.38,-96.37:99
-chr1	3523424	rs55728961	C	A	42.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=240.49;QD=10.46;SB=-10.00	GT:AD:DP:GL:GQ	0/1:14,9:23:-34.26,-6.93,-47.21:99
-chr1	3523484	rs56385042	T	C	1.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=309.24;QD=11.89;SB=-6.99	GT:AD:DP:GL:GQ	0/1:12,14:26:-42.05,-7.84,-46.91:99
-chr1	3523847	rs10797404	T	C	200.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=602.56;QD=14.01;SB=-77.79	GT:AD:DP:GL:GQ	0/1:21,22:42:-76.19,-12.65,-81.56:99
-chr1	3524383	rs4648532	A	G	19.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=2.34;MQ=56.80;MQ0=0;OQ=354.98;QD=11.45;SB=-152.32	GT:AD:DP:GL:GQ	0/1:16,15:28:-47.22,-8.44,-59.85:99
-chr1	3524566	rs10909988	A	G	146.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=60.00;MQ0=0;OQ=306.09;QD=9.28;SB=-127.66	GT:AD:DP:GL:GQ	0/1:17,15:30:-42.93,-9.04,-69.22:99
-chr1	3524652	rs7522500	G	C	8.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=6.16;MQ=57.13;MQ0=0;OQ=583.92;QD=14.24;SB=-274.31	GT:AD:DP:GL:GQ	0/1:21,20:34:-71.93,-10.26,-66.25:99
-chr1	3524668	rs7522507	G	A	205.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.19;MQ=57.92;MQ0=0;OQ=639.63;QD=14.21;SB=-315.32	GT:AD:DP:GL:GQ	0/1:22,23:42:-79.91,-12.67,-66.98:99
-chr1	3525324	rs7538707	A	G	23.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=845.73;QD=19.67;SB=-223.67	GT:AD:DP:GL:GQ	0/1:16,27:42:-100.51,-12.65,-58.85:99
-chr1	3526188	rs4648533	G	A	210.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=59.62;MQ0=0;OQ=1070.40;QD=17.55;SB=-483.49	GT:AD:DP:GL:GQ	0/1:29,32:60:-128.41,-18.08,-91.39:99
-chr1	3526260	rs4648534	T	C	399.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.82;MQ0=0;OQ=652.36;QD=10.19;SB=-312.36	GT:AD:DP:GL:GQ	0/1:38,26:63:-87.50,-18.98,-151.40:99
-chr1	3526320	rs4648535	C	A	306.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=54.45;MQ0=1;OQ=780.07;QD=10.99;SB=-371.06	GT:AD:DP:GL:GQ	0/1:40,31:67:-101.47,-20.18,-141.37:99
-chr1	3526422	rs4648399	A	G	309.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.19;MQ0=0;OQ=1278.95;QD=17.52;SB=-632.97	GT:AD:DP:GL:GQ	0/1:30,43:71:-152.57,-21.39,-116.57:99
-chr1	3527222	rs4648400	A	G	9.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=7.73;MQ=57.63;MQ0=0;OQ=603.16;QD=10.40;SB=-310.07	GT:AD:DP:GL:GQ	0/1:32,26:56:-80.48,-16.88,-126.15:99
-chr1	3527718	rs4648401	A	G	74.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=1.41;MQ=56.19;MQ0=0;OQ=587.94;QD=13.67;SB=-299.61	GT:AD:DP:GL:GQ	0/1:18,25:41:-74.44,-12.36,-73.19:99
-chr1	3528340	rs4400556	A	T	87.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.12;MQ0=0;OQ=994.97;QD=12.59;SB=-457.52	GT:AD:DP:GL:GQ	0/1:45,34:78:-126.28,-23.49,-166.80:99
-chr1	3528361	rs4364818	C	T	460.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.38;MQ0=0;OQ=945.91;QD=13.14;SB=-450.44	GT:AD:DP:GL:GQ	0/1:42,30:72:-119.57,-21.70,-148.80:99
-chr1	3528695	rs6424087	G	C	115.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=59.24;MQ0=0;OQ=909.93;QD=16.54;SB=-215.65	GT:AD:DP:GL:GQ	0/1:28,26:51:-109.65,-15.37,-108.54:99
-chr1	3528942	rs10909989	A	G	309.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=59.00;MQ0=0;OQ=981.47;QD=13.82;SB=-369.60	GT:AD:DP:GL:GQ	0/1:36,35:70:-122.52,-21.09,-148.98:99
-chr1	3529341	rs10909990	A	G	374.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.19;MQ0=0;OQ=916.10;QD=14.78;SB=-423.95	GT:AD:DP:GL:GQ	0/1:29,33:61:-113.27,-18.38,-114.82:99
-chr1	3529884	rs12757620	T	G	87.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=2.04;MQ=59.45;MQ0=0;OQ=798.71;QD=11.75;SB=-349.72	GT:AD:DP:GL:GQ	0/1:29,39:61:-101.54,-18.38,-103.90:99
-chr1	3532172	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=4.52;MQ=58.17;MQ0=0;OQ=111.86;QD=2.19;SB=68.21	GT:AD:DP:GL:GQ	0/1:30,21:37:-25.62,-11.15,-96.21:99
-chr1	3535452	rs41315304	G	A	150.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=58.25;MQ0=0;OQ=1069.05;QD=16.70;SB=-525.75	GT:AD:DP:GL:GQ	0/1:32,32:63:-129.18,-18.99,-99.29:99
-chr1	3536795	rs2821007	G	A	330.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.23;MQ0=0;OQ=1047.23;QD=17.45;SB=-508.04	GT:AD:DP:GL:GQ	0/1:27,33:59:-125.78,-17.78,-94.59:99
-chr1	3537996	rs2760321	T	C	53.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=58.11;MQ0=0;OQ=916.84;QD=24.78;SB=-335.79	GT:AD:DP:GL:GQ	1/1:0,37:31:-95.30,-9.36,-0.04:93.19
-chr1	3538692	rs2760320	G	C	208.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.15;MQ0=0;OQ=946.49;QD=15.02;SB=-485.84	GT:AD:DP:GL:GQ	0/1:35,28:62:-116.63,-18.70,-140.41:99
-chr1	3540707	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=4;HaplotypeScore=6.24;MQ=58.05;MQ0=0;OQ=310.07;QD=8.61;SB=35.15	GT:AD:DP:GL:GQ	0/1:20,16:27:-42.43,-8.14,-74.49:99
-chr1	3542640	rs2821061	A	G	174.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=519.03;QD=10.38;SB=-253.57	GT:AD:DP:GL:GQ	0/1:27,23:48:-69.65,-14.47,-105.26:99
-chr1	3543649	rs2821058	T	C	578.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=1559.49;QD=29.42;SB=-616.98	GT:AD:DP:GL:GQ	1/1:0,53:50:-159.58,-15.08,-0.04:99
-chr1	3545730	rs2760318	T	G	276.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=500.47;QD=13.53;SB=-245.40	GT:AD:DP:GL:GQ	0/1:16,21:34:-63.58,-10.25,-53.36:99
-chr1	3546316	rs2760317	T	C	74.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=59.23;MQ0=0;OQ=365.54;QD=12.18;SB=-82.96	GT:AD:DP:GL:GQ	0/1:16,13:27:-47.97,-8.14,-53.97:99
-chr1	3546766	rs2821032	A	G	15.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.71;MQ=58.45;MQ0=0;OQ=501.73;QD=10.45;SB=-117.63	GT:AD:DP:GL:GQ	0/1:27,21:44:-66.72,-13.26,-92.65:99
-chr1	3546958	.	G	C	33.36	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=52.99;MQ0=1;OQ=414.27;QD=15.34;SB=-224.70	GT:AD:DP:GL:GQ	0/1:11,16:20:-50.74,-6.03,-33.52:99
-chr1	3550868	rs12408890	C	T	50.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=714.51;QD=21.65;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,22:31:-84.07,-9.34,-33.99:99
-chr1	3556431	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=56.43;MQ0=0;OQ=64.63;QD=2.69;SB=26.11	GT:AD:DP:GL:GQ	0/1:20,4:17:-14.89,-5.14,-48.86:97.47
-chr1	3556566	rs2251098	G	A	89.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.00;MQ0=0;OQ=575.61;QD=16.45;SB=-81.09	GT:AD:DP:GL:GQ	0/1:16,19:34:-71.09,-10.24,-59.62:99
-chr1	3560743	rs6697769	C	T	108.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=59.11;MQ0=0;OQ=591.49;QD=14.08;SB=-304.84	GT:AD:DP:GL:GQ	0/1:21,21:39:-74.19,-11.76,-62.78:99
-chr1	3562592	rs10752739	A	G	278.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=56.42;MQ0=0;OQ=804.83;QD=14.63;SB=-300.66	GT:AD:DP:GL:GQ	0/1:25,30:50:-98.83,-15.07,-88.55:99
-chr1	3562634	rs2181484	A	G	237.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=59.09;MQ0=0;OQ=421.19;QD=9.16;SB=-138.88	GT:AD:DP:GL:GQ	0/1:25,21:41:-57.77,-12.36,-88.24:99
-chr1	3564279	rs9662739	T	A	199.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=58.99;MQ0=0;OQ=516.88;QD=11.24;SB=-252.67	GT:AD:DP:GL:GQ	0/1:26,19:44:-68.23,-13.26,-93.50:99
-chr1	3564280	rs9662052	C	A	196.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=58.99;MQ0=0;OQ=511.23;QD=11.11;SB=-234.91	GT:AD:DP:GL:GQ	0/1:27,19:44:-67.66,-13.26,-88.90:99
-chr1	3565050	rs2368543	T	C	86.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=57.97;MQ0=0;OQ=928.11;QD=12.89;SB=-445.02	GT:AD:DP:GL:GQ	0/1:38,33:71:-117.49,-21.39,-151.96:99
-chr1	3565471	rs4648544	C	T	133.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=1.75;MQ=59.57;MQ0=0;OQ=791.33;QD=14.65;SB=-418.72	GT:AD:DP:GL:GQ	0/1:30,24:54:-98.68,-16.27,-109.24:99
-chr1	3565693	rs2208993	C	G	156.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.21;MQ0=0;OQ=372.36;QD=11.28;SB=-74.78	GT:AD:DP:GL:GQ	0/1:21,12:29:-49.27,-8.75,-66.40:99
-chr1	3565739	rs2208992	C	T	135.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=555.57;QD=16.34;SB=-208.21	GT:AD:DP:GL:GQ	0/1:17,17:34:-69.09,-10.25,-52.42:99
-chr1	3565920	rs2224718	T	C	463.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=705.17;QD=14.10;SB=-316.42	GT:AD:DP:GL:GQ	0/1:24,26:48:-88.27,-14.47,-84.73:99
-chr1	3567181	rs4648545	A	G	559.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1256.11;QD=14.78;SB=-595.27	GT:AD:DP:GL:GQ	0/1:42,43:84:-154.20,-25.30,-171.31:99
-chr1	3568175	rs1885863	C	T	33.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.95;MQ0=0;OQ=503.58;QD=17.98;SB=-117.62	GT:AD:DP:GL:GQ	0/1:13,15:28:-62.07,-8.43,-48.10:99
-chr1	3569688	rs1885861	A	T	263.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=805.05;QD=14.38;SB=-228.60	GT:AD:DP:GL:GQ	0/1:30,26:55:-100.35,-16.57,-108.86:99
-chr1	3572104	rs6679556	T	A	168.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.18;MQ0=0;OQ=534.82;QD=14.07;SB=-147.78	GT:AD:DP:GL:GQ	0/1:19,19:35:-67.31,-10.54,-60.93:99
-chr1	3572105	rs6679560	T	G	310.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.18;MQ0=0;OQ=483.25;QD=12.72;SB=-122.88	GT:AD:DP:GL:GQ	0/1:19,19:35:-62.15,-10.55,-61.28:99
-chr1	3572847	rs1885860	T	C	202.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=55.65;MQ0=0;OQ=1537.12;QD=28.47;SB=-796.29	GT:AD:DP:GL:GQ	1/1:0,54:50:-157.34,-15.08,-0.05:99
-chr1	3573552	rs1885859	G	C	126.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=931.27;QD=19.81;SB=-452.38	GT:AD:DP:GL:GQ	0/1:21,26:45:-109.97,-13.56,-87.15:99
-chr1	3575442	rs3765694	G	A	29.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=58.20;MQ0=0;OQ=1425.18;QD=36.54;SB=-559.30	GT:AD:DP:GL:GQ	1/1:0,39:37:-146.12,-11.15,-0.01:99
-chr1	3575611	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=3;HaplotypeScore=1.74;MQ=57.17;MQ0=0;OQ=76.89;QD=3.08;SB=14.07	GT:AD:DP:GL:GQ	0/1:14,11:13:-14.90,-3.93,-34.07:99
-chr1	3576288	rs1009345	G	A	91.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.80;MQ0=0;OQ=1800.40;QD=39.14;SB=-661.66	GT:AD:DP:GL:GQ	1/1:0,46:46:-183.64,-13.86,-0.02:99
-chr1	3576560	rs6657895	G	A	60.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=59.27;MQ0=0;OQ=1276.11;QD=33.58;SB=-586.96	GT:AD:DP:GL:GQ	1/1:1,37:35:-131.22,-10.55,-0.02:99
-chr1	3577406	rs3765697	C	T	0.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.64;MQ=56.35;MQ0=0;OQ=1305.04;QD=33.46;SB=-441.58	GT:AD:DP:GL:GQ	1/1:0,39:35:-134.11,-10.55,-0.02:99
-chr1	3578761	rs3765700	G	C	611.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=1985.98;QD=38.19;SB=-981.19	GT:AD:DP:GL:GQ	1/1:0,52:47:-202.21,-14.17,-0.02:99
-chr1	3578861	rs3765701	T	A	287.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.60;MQ0=0;OQ=1646.63;QD=35.03;SB=-839.93	GT:AD:DP:GL:GQ	1/1:0,47:46:-168.27,-13.86,-0.02:99
-chr1	3579831	rs56255778	C	A	326.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=59.60;MQ0=0;OQ=723.70;QD=12.70;SB=-343.37	GT:AD:DP:GL:GQ	0/1:30,27:51:-91.02,-15.37,-85.23:99
-chr1	3580285	rs6671482	G	A	126.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=1575.76;QD=35.81;SB=-662.31	GT:AD:DP:GL:GQ	1/1:1,43:41:-161.17,-12.35,-0.01:99
-chr1	3587189	.	C	T	94.68	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.81;MQ0=0;OQ=415.33;QD=10.65;SB=-200.88	GT:AD:DP:GL:GQ	0/1:25,14:37:-55.97,-11.16,-70.24:99
-chr1	3594672	rs12562573	G	A	160.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.53;MQ0=0;OQ=1829.37;QD=37.33;SB=-900.21	GT:AD:DP:GL:GQ	1/1:0,49:48:-186.54,-14.47,-0.02:99
-chr1	3594957	rs1885872	G	A	83.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.07;MQ0=0;OQ=1704.97;QD=37.89;SB=-859.63	GT:AD:DP:GL:GQ	1/1:0,45:44:-174.10,-13.26,-0.02:99
-chr1	3595447	rs1885870	G	C	563.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.58;MQ0=0;OQ=1514.49;QD=32.92;SB=-721.32	GT:AD:DP:GL:GQ	1/1:1,45:40:-155.08,-12.08,-0.04:99
-chr1	3596410	rs3765725	C	T	84.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.54;MQ0=0;OQ=1239.60;QD=30.23;SB=-472.10	GT:AD:DP:GL:GQ	1/1:0,41:33:-127.56,-9.95,-0.02:99
-chr1	3596486	rs3765727	G	A	208.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.62;MQ0=0;OQ=883.29;QD=18.03;SB=-364.54	GT:AD:DP:GL:GQ	0/1:22,27:47:-105.77,-14.16,-69.54:99
-chr1	3596710	rs3765728	G	A	119.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.63;MQ0=0;OQ=1974.23;QD=38.71;SB=-814.08	GT:AD:DP:GL:GQ	1/1:0,51:50:-201.02,-15.06,-0.01:99
-chr1	3597380	rs3765730	G	A	180.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.40;MQ0=0;OQ=530.99;QD=17.13;SB=-202.91	GT:AD:DP:GL:GQ	0/1:13,18:30:-65.42,-9.04,-41.88:99
-chr1	3597871	rs10732965	C	T	75.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=57.81;MQ0=0;OQ=940.44;QD=33.59;SB=-454.61	GT:AD:DP:GL:GQ	1/1:0,27:25:-97.64,-7.53,-0.01:75.24
-chr1	3598087	rs34868661	A	G	136.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.05;MQ0=0;OQ=432.49;QD=9.83;SB=-227.39	GT:AD:DP:GL:GQ	0/1:23,20:41:-58.89,-12.36,-89.12:99
-chr1	3598141	rs12126706	C	T	141.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.13;MQ0=0;OQ=455.42;QD=13.01;SB=-109.06	GT:AD:DP:GL:GQ	0/1:19,16:32:-58.47,-9.65,-57.68:99
-chr1	3598905	rs1078687	G	A	163.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.42;MQ0=0;OQ=1623.93;QD=33.83;SB=-687.95	GT:AD:DP:GL:GQ	1/1:0,47:43:-166.00,-12.96,-0.02:99
-chr1	3599033	rs879622	G	A	151.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.44;MQ0=0;OQ=684.79;QD=16.70;SB=-307.82	GT:AD:DP:GL:GQ	0/1:19,22:37:-82.91,-11.15,-57.20:99
-chr1	3599257	rs879621	C	A	346.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.17;MQ0=0;OQ=766.56;QD=13.69;SB=-343.33	GT:AD:DP:GL:GQ	0/1:29,27:55:-96.51,-16.57,-104.71:99
-chr1	3599783	rs2146660	A	G	32.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=57.85;MQ0=0;OQ=1704.59;QD=34.79;SB=-814.09	GT:AD:DP:GL:GQ	1/1:0,49:49:-174.06,-14.76,-0.02:99
-chr1	3600146	.	T	C	37.22	LowQual	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=40.64;MQ0=2;QD=1.16;SB=-35.23	GT:AD:DP:GL:GQ	0/1:25,6:25:-14.54,-7.54,-78.76:70.05
-chr1	3600159	rs34095686	C	A	8.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=38.58;MQ0=3;OQ=139.88;QD=4.37;SB=-64.01	GT:AD:DP:GL:GQ	0/1:23,9:27:-25.41,-8.14,-69.86:99
-chr1	3600191	.	C	G	0.30	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=5.79;MQ=36.62;MQ0=7;OQ=200.47;QD=5.90;SB=-62.84	GT:AD:DP:GL:GQ	0/1:21,13:22:-29.96,-6.63,-63.33:99
-chr1	3600194	rs34612797	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=5.12;MQ=34.72;MQ0=8;OQ=74.27;QD=2.12;SB=-16.93	GT:AD:DP:GL:GQ	0/1:24,11:20:-16.74,-6.03,-51.18:99
-chr1	3600242	.	C	T	27.02	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=31.01;MQ0=9;QD=0.82;SB=14.05	GT:AD:DP:GL:GQ	0/1:28,5:16:-10.81,-4.82,-45.03:59.85
-chr1	3600252	.	G	A	0.25	PASS	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=5.21;MQ=33.15;MQ0=7;OQ=119.84;QD=4.99;SB=-7.00	GT:AD:DP:GL:GQ	0/1:19,5:10:-18.28,-3.02,-16.17:99
-chr1	3600264	rs61762234	A	C	2.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=2.09;MQ=34.74;MQ0=5;OQ=244.22;QD=13.57;SB=-10.00	GT:AD:DP:GL:GQ	1/1:4,14:8:-28.01,-2.41,-0.00:24.07
-chr1	3600309	.	C	A	44.81	LowQual	AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.74;MQ0=1;QD=8.96;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:2:-7.89,-0.60,-0.00:6.02
-chr1	3600350	.	C	T	27.34	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=4.81;MQ=17.75;MQ0=4;QD=2.28;SB=-31.62	GT:AD:DP:GL:GQ	0/1:8,4:3:-6.92,-0.91,-3.40:24.94
-chr1	3600367	rs35012159	G	C	33.49	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=10.16;MQ=14.95;MQ0=16;QD=0.93;SB=-40.88	GT:AD:DP:GL:GQ	0/1:29,7:6:-8.44,-1.81,-16.03:66.33
-chr1	3600427	.	C	T	85.30	DPFilter;HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=22.31;MQ=14.22;MQ0=48;QD=0.87;SB=11.05	GT:AD:DP:GL:GQ	0/1:88,10:24:-19.05,-7.24,-63.74:99
-chr1	3600428	.	G	A	105.38	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=22.15;MQ=14.50;MQ0=46;QD=1.12;SB=-26.63	GT:AD:DP:GL:GQ	0/1:84,9:25:-21.36,-7.54,-60.74:99
-chr1	3600437	.	G	C	161.98	HARD_TO_VALIDATE;SnpCluster	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=28.11;MQ=14.54;MQ0=44;QD=1.78;SB=-27.40	GT:AD:DP:GL:GQ	0/1:81,9:25:-27.02,-7.53,-80.42:99
-chr1	3600440	.	A	C	23.09	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=12.59;MQ=14.51;MQ0=44;QD=0.25;SB=-17.83	GT:AD:DP:GL:GQ	0/1:72,19:25:-13.12,-7.53,-77.67:55.91
-chr1	3600470	.	C	T	26.44	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=13.21;MQ=11.80;MQ0=28;QD=0.61;SB=2.03	GT:AD:DP:GL:GQ	0/1:41,2:8:-8.34,-2.41,-20.77:59.27
-chr1	3600475	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=10.93;MQ0=23;OQ=89.38;QD=2.48;SB=-3.98	GT:AD:DP:GL:GQ	0/1:21,15:6:-14.03,-1.81,-7.79:59.84
-chr1	3600532	.	C	T	45.13	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=11.72;MQ0=9;QD=2.65;SB=-47.67	GT:AD:DP:GL:GQ	1/1:12,5:2:-7.92,-0.60,-0.00:6.02
-chr1	3600545	.	A	C	20.73	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=18.85;MQ0=10;QD=0.80;SB=-32.99	GT:AD:DP:GL:GQ	0/1:14,12:4:-6.56,-1.20,-7.53:53.53
-chr1	3600575	.	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=7.34;MQ=23.21;MQ0=9;OQ=164.83;QD=5.49;SB=-77.08	GT:AD:DP:GL:GQ	0/1:24,6:9:-22.48,-2.71,-11.26:85.52
-chr1	3600578	.	C	T	0.49	PASS	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=23.98;MQ0=9;OQ=197.36;QD=6.81;SB=-112.62	GT:AD:DP:GL:GQ	0/1:22,7:11:-26.34,-3.32,-14.46:99
-chr1	3600596	.	C	T	0.28	PASS	AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=33.58;MQ0=0;OQ=353.36;QD=25.24;SB=-175.22	GT:AD:DP:GL:GQ	1/1:0,14:10:-38.92,-3.01,-0.01:30.09
-chr1	3600667	.	C	T	19.38	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=14.09;MQ=16.96;MQ0=7;QD=1.08;SB=-29.64	GT:AD:DP:GL:GQ	0/1:14,4:7:-7.33,-2.11,-16.23:52.17
-chr1	3600709	.	C	T	32.48	PASS	AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=14.75;MQ0=16;OQ=271.94;QD=8.77;SB=-129.00	GT:AD:DP:GL:GQ	1/1:10,20:8:-30.78,-2.41,-0.00:24.07
-chr1	3600734	.	C	A	11.22	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=17.16;MQ0=10;QD=0.59;SB=-7.00	GT:AD:DP:GL:GQ	0/1:17,2:6:-6.18,-1.81,-13.77:43.72
-chr1	3600738	.	C	T	23.24	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=17.16;MQ0=10;QD=1.22;SB=-6.99	GT:AD:DP:GL:GQ	0/1:14,5:6:-7.41,-1.81,-13.10:56.06
-chr1	3600746	.	G	A	0.90	PASS	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=5.14;MQ=19.46;MQ0=10;OQ=147.44;QD=6.70;SB=-47.55	GT:AD:DP:GL:GQ	0/1:6,16:6:-19.82,-1.81,-3.10:12.90
-chr1	3600943	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=10.81;MQ0=18;OQ=79.37;QD=2.27;SB=-10.00	GT:AD:DP:GL:GQ	0/1:27,8:5:-12.73,-1.51,-3.55:20.36
-chr1	3600944	.	G	A	31.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=10.97;MQ0=17;QD=0.93;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,2:5:-7.94,-1.51,-9.29:64.30
-chr1	3600955	.	C	T	29.25	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=11.72;MQ0=17;QD=0.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,7:6:-8.02,-1.81,-11.97:62.08
-chr1	3600968	.	A	C	27.28	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=2;HaplotypeScore=4.96;MQ=11.75;MQ0=20;QD=0.80;SB=-10.00	GT:AD:DP:GL:GQ	0/1:18,16:5:-7.52,-1.51,-9.32:60.10
-chr1	3601000	.	G	C	23.03	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=12.60;MQ=11.01;MQ0=30;QD=0.46;SB=-6.99	GT:AD:DP:GL:GQ	0/1:44,6:9:-8.30,-2.71,-30.70:55.84
-chr1	3601003	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=15.11;MQ=12.05;MQ0=28;OQ=191.04;QD=3.75;SB=-6.99	GT:AD:DP:GL:GQ	0/1:28,23:11:-25.70,-3.31,-14.21:99
-chr1	3601025	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=13.71;MQ=14.27;MQ0=33;OQ=53.75;QD=0.96;SB=-3.99	GT:AD:DP:GL:GQ	0/1:46,9:10:-11.67,-3.01,-22.44:86.59
-chr1	3601070	rs36156048	C	G	0.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=10.95;MQ=20.17;MQ0=10;OQ=79.41;QD=3.18;SB=-46.45	GT:AD:DP:GL:GQ	0/1:14,11:6:-13.03,-1.81,-11.69:98.78
-chr1	3601096	.	G	A	20.37	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=8.03;MQ=17.90;MQ0=5;QD=1.20;SB=-27.52	GT:AD:DP:GL:GQ	0/1:13,3:5:-6.83,-1.51,-8.44:53.16
-chr1	3601143	.	A	C	0.18	PASS	AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=20.37;MQ0=7;OQ=150.35;QD=6.54;SB=-72.98	GT:AD:DP:GL:GQ	0/1:14,9:10:-21.33,-3.01,-13.91:99
-chr1	3601165	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=11.69;MQ=24.21;MQ0=10;OQ=173.39;QD=5.78;SB=-3.99	GT:AD:DP:GL:GQ	0/1:22,8:11:-23.94,-3.31,-15.90:99
-chr1	3601175	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=35.74;MQ=29.63;MQ0=10;OQ=194.57;QD=4.75;SB=-123.70	GT:AD:DP:GL:GQ	0/1:27,14:21:-29.07,-6.33,-61.55:99
-chr1	3601178	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=2;HaplotypeScore=14.60;MQ=30.57;MQ0=8;OQ=427.34;QD=9.94;SB=-58.96	GT:AD:DP:GL:GQ	0/1:21,22:25:-53.55,-7.53,-34.82:99
-chr1	3601218	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=2;HaplotypeScore=16.31;MQ=41.71;MQ0=5;OQ=182.10;QD=2.43;SB=-33.64	GT:AD:DP:GL:GQ	0/1:61,14:63:-40.49,-19.00,-224.09:99
-chr1	3601225	rs12722819	A	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=3;HaplotypeScore=15.63;MQ=42.30;MQ0=5;OQ=524.29;QD=6.32;SB=-141.88	GT:AD:DP:GL:GQ	0/1:52,30:59:-73.50,-17.79,-124.07:99
-chr1	3601229	rs12727450	T	C	0.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=5.92;MQ=43.45;MQ0=6;OQ=762.30;QD=9.07;SB=-332.31	GT:AD:DP:GL:GQ	0/1:49,35:67:-99.71,-20.19,-147.26:99
-chr1	3601341	rs12239528	C	T	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.01;HRun=0;HaplotypeScore=14.56;MQ=44.93;MQ0=17;OQ=62.54;QD=0.70;SB=44.13	GT:AD:DP:GL:GQ	0/1:79,8:62:-27.92,-18.38,-184.40:95.37
-chr1	3601342	rs11581562	G	A	0.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.01;HRun=0;HaplotypeScore=14.40;MQ=44.68;MQ0=18;OQ=819.35;QD=9.10;SB=-177.16	GT:AD:DP:GL:GQ	0/1:53,33:59:-102.70,-17.49,-103.40:99
-chr1	3601389	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=2;HaplotypeScore=7.82;MQ=44.29;MQ0=18;OQ=186.02;QD=2.30;SB=-61.02	GT:AD:DP:GL:GQ	0/1:62,19:52:-37.55,-15.67,-142.29:99
-chr1	3601457	rs10910012	A	G	122.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=54.59;MQ0=0;OQ=1506.74;QD=29.54;SB=-756.93	GT:AD:DP:GL:GQ	1/1:0,51:48:-154.31,-14.48,-0.05:99
-chr1	3601752	rs3765731	G	A	361.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=59.28;MQ0=0;OQ=1001.62;QD=15.65;SB=-488.04	GT:AD:DP:GL:GQ	0/1:31,33:59:-121.23,-17.79,-88.90:99
-chr1	3601820	rs3765732	G	A	2.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=59.03;MQ0=0;OQ=1613.11;QD=33.61;SB=-476.00	GT:AD:DP:GL:GQ	1/1:0,46:44:-167.13,-15.44,-2.23:99
-chr1	3602293	rs1885869	T	C	376.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1214.50;QD=32.82;SB=-519.18	GT:AD:DP:GL:GQ	1/1:0,37:35:-125.05,-10.54,-0.02:99
-chr1	3603630	rs10910013	C	T	111.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.47;MQ0=0;OQ=534.95;QD=15.28;SB=-205.85	GT:AD:DP:GL:GQ	0/1:18,17:34:-67.02,-10.25,-59.55:99
-chr1	3603781	rs35837097	A	G	62.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.60;MQ=59.60;MQ0=0;OQ=546.71;QD=11.63;SB=-279.27	GT:AD:DP:GL:GQ	0/1:23,24:43:-70.92,-12.96,-83.70:99
-chr1	3605288	rs11580811	G	A	73.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=59.17;MQ0=0;OQ=263.75;QD=9.42;SB=-51.00	GT:AD:DP:GL:GQ	0/1:17,11:22:-36.29,-6.63,-43.95:99
-chr1	3606461	rs3765736	C	T	194.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=57.38;MQ0=0;OQ=406.81;QD=15.07;SB=-214.90	GT:AD:DP:GL:GQ	0/1:13,14:23:-50.90,-6.93,-35.03:99
-chr1	3606652	rs3765737	A	G	468.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=799.22;QD=12.89;SB=-323.13	GT:AD:DP:GL:GQ	0/1:30,32:60:-101.29,-18.08,-117.49:99
-chr1	3606658	rs3765738	G	A	253.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.79;MQ0=0;OQ=935.05;QD=15.08;SB=-404.78	GT:AD:DP:GL:GQ	0/1:33,29:61:-115.17,-18.38,-103.51:99
-chr1	3606835	rs4610947	C	A	292.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.39;MQ0=0;OQ=957.03;QD=17.09;SB=-493.95	GT:AD:DP:GL:GQ	0/1:24,31:55:-115.55,-16.56,-86.20:99
-chr1	3606979	rs4378145	G	A	258.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=57.58;MQ0=5;OQ=1287.24;QD=16.29;SB=-484.49	GT:AD:DP:GL:GQ	0/1:40,39:72:-153.70,-21.69,-124.59:99
-chr1	3607481	rs3765739	A	G	35.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=56.52;MQ0=0;OQ=316.46;QD=9.31;SB=-99.71	GT:AD:DP:GL:GQ	0/1:16,18:27:-43.07,-8.14,-49.38:99
-chr1	3608425	rs3819959	T	C	21.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.02;MQ=53.67;MQ0=0;OQ=372.33;QD=9.08;SB=-195.61	GT:AD:DP:GL:GQ	0/1:23,18:34:-50.76,-10.24,-80.92:99
-chr1	3608574	rs3765740	T	G	43.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=2;HaplotypeScore=1.03;MQ=59.11;MQ0=0;OQ=373.92;QD=14.38;SB=-208.83	GT:AD:DP:GL:GQ	0/1:12,14:26:-48.51,-7.83,-42.30:99
-chr1	3608643	rs3765741	A	G	139.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.25;MQ0=0;OQ=277.44;QD=11.10;SB=-3.99	GT:AD:DP:GL:GQ	0/1:13,12:23:-37.96,-6.93,-45.69:99
-chr1	3608686	rs3765742	G	A	11.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=299.52;QD=14.98;SB=-7.00	GT:AD:DP:GL:GQ	0/1:9,11:19:-38.96,-5.72,-31.25:99
-chr1	3608969	rs3765743	C	T	17.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=315.53;QD=15.78;SB=-3.99	GT:AD:DP:GL:GQ	0/1:10,10:19:-40.56,-5.72,-31.07:99
-chr1	3609567	rs4648550	T	A	206.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1535.78;QD=37.46;SB=-673.01	GT:AD:DP:GL:GQ	1/1:0,41:41:-157.17,-12.35,-0.01:99
-chr1	3609807	rs34881405	T	C	7.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.49;MQ=57.54;MQ0=0;OQ=345.64;QD=7.86;SB=-128.25	GT:AD:DP:GL:GQ	0/1:24,20:40:-49.91,-12.06,-96.00:99
-chr1	3610040	rs17379833	A	T	163.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.52;MQ0=0;OQ=999.11;QD=20.81;SB=-480.53	GT:AD:DP:GL:GQ	0/1:16,32:47:-117.35,-14.16,-58.41:99
-chr1	3610295	rs12742969	A	G	136.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=514.16;QD=10.49;SB=-277.41	GT:AD:DP:GL:GQ	0/1:28,21:47:-68.86,-14.16,-115.22:99
-chr1	3610320	rs12735439	C	A	230.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=801.03;QD=16.35;SB=-378.77	GT:AD:DP:GL:GQ	0/1:22,27:48:-97.85,-14.46,-70.21:99
-chr1	3611339	rs3765749	A	T	129.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=60.00;MQ0=0;OQ=640.71;QD=17.32;SB=-252.96	GT:AD:DP:GL:GQ	0/1:16,21:36:-78.20,-10.84,-56.57:99
-chr1	3612044	rs3765751	A	G	0.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.05;MQ=58.84;MQ0=0;OQ=1141.41;QD=28.54;SB=-361.32	GT:AD:DP:GL:GQ	1/1:0,39:37:-117.76,-11.16,-0.04:99
-chr1	3612141	rs3765752	G	A	98.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=790.33;QD=19.76;SB=-403.21	GT:AD:DP:GL:GQ	0/1:16,24:40:-94.37,-12.05,-52.81:99
-chr1	3612166	rs3765753	T	G	307.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1135.84;QD=31.55;SB=-218.90	GT:AD:DP:GL:GQ	1/1:0,36:34:-117.19,-10.25,-0.02:99
-chr1	3612496	rs12086279	A	T	144.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.76;MQ0=0;OQ=264.24;QD=12.01;SB=-145.87	GT:AD:DP:GL:GQ	0/1:12,10:20:-35.73,-6.03,-37.15:99
-chr1	3612742	rs56124535	A	G	117.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=57.14;MQ0=0;OQ=143.16;QD=7.53;SB=-61.32	GT:AD:DP:GL:GQ	0/1:9,9:16:-22.43,-4.83,-33.66:99
-chr1	3612752	rs55976062	T	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=16.88;MQ=55.46;MQ0=1;OQ=130.66;QD=6.88;SB=-60.86	GT:AD:DP:GL:GQ	0/1:11,8:16:-21.17,-4.82,-37.90:99
-chr1	3612857	rs10910014	T	C	4.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=45.10;MQ0=1;OQ=122.28;QD=3.82;SB=-65.87	GT:AD:DP:GL:GQ	0/1:18,14:19:-21.24,-5.73,-45.71:99
-chr1	3612894	rs58140697	A	G	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=4;HaplotypeScore=5.46;MQ=58.05;MQ0=0;OQ=210.19;QD=8.76;SB=-118.71	GT:AD:DP:GL:GQ	0/1:15,9:22:-30.93,-6.63,-52.73:99
-chr1	3612902	rs60071664	T	C	130.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=57.06;MQ0=0;OQ=194.42;QD=7.48;SB=-106.60	GT:AD:DP:GL:GQ	0/1:16,10:25:-30.26,-7.53,-62.36:99
-chr1	3613185	rs12564843	G	C	7.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=53.89;MQ0=0;OQ=1382.10;QD=38.39;SB=-571.48	GT:AD:DP:GL:GQ	1/1:0,36:33:-141.81,-9.95,-0.02:99
-chr1	3613274	rs9786966	A	G	67.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.62;MQ=57.45;MQ0=0;OQ=414.03;QD=10.62;SB=-167.59	GT:AD:DP:GL:GQ	0/1:21,18:36:-55.53,-10.85,-77.07:99
-chr1	3613481	rs55657548	C	T	77.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=58.92;MQ0=0;OQ=252.32;QD=6.47;SB=-105.49	GT:AD:DP:GL:GQ	0/1:27,11:38:-39.97,-11.45,-93.41:99
-chr1	3614769	rs10910016	G	A	258.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=59.57;MQ0=0;OQ=815.07;QD=15.09;SB=-428.45	GT:AD:DP:GL:GQ	0/1:27,26:50:-99.87,-15.07,-79.93:99
-chr1	3615542	rs3765755	G	C	6.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=3.76;MQ=57.56;MQ0=0;OQ=289.35;QD=10.72;SB=-124.51	GT:AD:DP:GL:GQ	0/1:17,10:20:-38.26,-6.05,-38.86:99
-chr1	3615628	rs2368540	G	A	45.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.64;MQ0=0;OQ=1334.80;QD=39.26;SB=-676.69	GT:AD:DP:GL:GQ	1/1:0,34:34:-137.07,-10.24,-0.01:99
-chr1	3615736	rs2368539	G	A	82.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.19;MQ=58.99;MQ0=0;OQ=1720.73;QD=37.41;SB=-824.61	GT:AD:DP:GL:GQ	1/1:0,46:45:-175.68,-13.56,-0.02:99
-chr1	3616028	rs12130809	G	A	272.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=838.34;QD=17.11;SB=-389.14	GT:AD:DP:GL:GQ	0/1:23,26:48:-101.58,-14.46,-75.57:99
-chr1	3616588	rs3753208	C	T	1.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=2.44;MQ=57.64;MQ0=0;OQ=539.82;QD=20.76;SB=-254.78	GT:AD:DP:GL:GQ	0/1:9,17:24:-64.50,-7.23,-25.72:99
-chr1	3616624	rs3753209	G	A	11.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.89;MQ0=0;OQ=522.74;QD=24.89;SB=-281.33	GT:AD:DP:GL:GQ	0/1:4,17:19:-61.28,-5.73,-9.34:36.13
-chr1	3618071	rs3819961	T	C	130.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=59.30;MQ0=0;OQ=302.64;QD=9.17;SB=-168.93	GT:AD:DP:GL:GQ	0/1:19,14:29:-42.29,-8.74,-60.25:99
-chr1	3618163	rs3819962	C	T	161.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.36;MQ0=0;OQ=457.21;QD=12.70;SB=-166.18	GT:AD:DP:GL:GQ	0/1:20,16:35:-59.55,-10.55,-68.25:99
-chr1	3618201	rs3819963	C	T	122.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=60.00;MQ0=0;OQ=469.25;QD=9.98;SB=-160.23	GT:AD:DP:GL:GQ	0/1:28,19:40:-62.27,-12.06,-77.68:99
-chr1	3618523	rs6424089	A	G	234.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=515.26;QD=10.10;SB=-135.54	GT:AD:DP:GL:GQ	0/1:28,23:50:-69.88,-15.07,-112.69:99
-chr1	3618537	rs6424090	A	G	547.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.83;MQ0=0;OQ=1664.50;QD=30.82;SB=-446.16	GT:AD:DP:GL:GQ	1/1:0,54:52:-170.07,-15.68,-0.04:99
-chr1	3619132	rs61568045	A	T	75.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=702.41;QD=14.05;SB=-308.70	GT:AD:DP:GL:GQ	0/1:27,23:49:-88.29,-14.76,-94.54:99
-chr1	3619452	rs3765758	A	G	47.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.30;MQ0=0;OQ=878.57;QD=26.62;SB=-355.42	GT:AD:DP:GL:GQ	1/1:0,33:30:-91.48,-9.06,-0.04:90.16
-chr1	3620336	rs3765761	C	T	430.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.64;MQ0=0;OQ=893.13;QD=17.18;SB=-472.49	GT:AD:DP:GL:GQ	0/1:25,27:51:-107.96,-15.36,-81.84:99
-chr1	3620975	rs3765763	C	A	252.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.39;MQ0=0;OQ=502.24;QD=13.22;SB=-232.36	GT:AD:DP:GL:GQ	0/1:20,18:37:-64.65,-11.14,-68.16:99
-chr1	3621759	rs61759267	C	T	206.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.40;MQ0=0;OQ=667.68;QD=16.28;SB=-326.34	GT:AD:DP:GL:GQ	0/1:19,22:40:-82.11,-12.06,-61.46:99
-chr1	3622468	rs3753211	T	C	35.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=6.67;MQ=58.45;MQ0=0;OQ=511.74;QD=11.37;SB=-197.62	GT:AD:DP:GL:GQ	0/1:23,22:42:-67.14,-12.68,-73.45:99
-chr1	3622590	rs4648551	G	A	13.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=8.04;MQ=59.11;MQ0=0;OQ=881.37;QD=14.94;SB=-385.40	GT:AD:DP:GL:GQ	0/1:30,29:55:-108.00,-16.58,-90.70:99
-chr1	3623397	rs3765764	G	A	5.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.59;MQ0=0;OQ=1699.76;QD=37.77;SB=-349.25	GT:AD:DP:GL:GQ	1/1:0,44:44:-176.03,-15.59,-2.47:99
-chr1	3624319	rs3765765	C	A	38.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=752.18;QD=20.33;SB=-184.22	GT:AD:DP:GL:GQ	0/1:13,24:36:-89.34,-10.84,-42.24:99
-chr1	3624520	rs3765766	T	C	10.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=2.32;MQ=58.08;MQ0=0;OQ=679.70;QD=30.90;SB=-324.14	GT:AD:DP:GL:GQ	1/1:0,22:21:-71.57,-6.33,-0.02:63.16
-chr1	3625325	rs3765767	G	C	128.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.30;MQ0=0;OQ=648.42;QD=19.65;SB=-303.36	GT:AD:DP:GL:GQ	0/1:15,18:33:-78.07,-9.95,-65.85:99
-chr1	3625451	rs3765768	C	T	99.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=57.87;MQ0=0;OQ=372.64;QD=16.94;SB=-111.62	GT:AD:DP:GL:GQ	0/1:9,13:20:-46.58,-6.03,-24.55:99
-chr1	3625480	rs3819968	G	T	164.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.32;MQ0=0;OQ=519.45;QD=15.28;SB=-228.94	GT:AD:DP:GL:GQ	0/1:15,19:32:-64.87,-9.64,-47.62:99
-chr1	3627107	rs3765771	G	C	208.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=1861.37;QD=37.99;SB=-769.21	GT:AD:DP:GL:GQ	1/1:0,49:48:-189.76,-14.49,-0.04:99
-chr1	3627319	rs12731705	C	T	198.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.16;MQ0=0;OQ=1887.80;QD=37.76;SB=-826.61	GT:AD:DP:GL:GQ	1/1:0,50:48:-192.38,-14.46,-0.01:99
-chr1	3627473	rs2146658	T	G	374.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.91;MQ0=0;OQ=603.03;QD=10.05;SB=-295.81	GT:AD:DP:GL:GQ	0/1:35,25:58:-81.06,-17.47,-122.08:99
-chr1	3627672	rs2181487	C	A	40.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.14;MQ=58.10;MQ0=0;OQ=433.83;QD=7.35;SB=-156.52	GT:AD:DP:GL:GQ	0/1:34,22:49:-61.43,-14.77,-105.52:99
-chr1	3628534	rs1801174	C	T	158.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.66;MQ0=0;OQ=2550.78;QD=38.07;SB=-965.29	GT:AD:DP:GL:GQ	1/1:0,67:65:-258.68,-19.58,-0.02:99
-chr1	3628694	rs12737840	C	T	176.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=58.05;MQ0=0;OQ=694.01;QD=14.46;SB=-295.84	GT:AD:DP:GL:GQ	0/1:22,26:42:-85.35,-12.67,-62.54:99
-chr1	3629503	rs4648552	T	C	338.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1294.39;QD=30.10;SB=-605.94	GT:AD:DP:GL:GQ	1/1:0,43:41:-133.06,-12.37,-0.04:99
-chr1	3629584	rs7537335	G	A	0.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=58.30;MQ0=0;OQ=677.32;QD=21.85;SB=-284.30	GT:AD:DP:GL:GQ	0/1:10,21:29:-79.75,-8.74,-30.01:99
-chr1	3629945	rs6424091	C	G	0.03	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=5;HaplotypeScore=2.31;MQ=58.54;MQ0=0;OQ=1470.54;QD=38.70;SB=-622.99	GT:AD:DP:GL:GQ	1/1:0,38:35:-150.65,-10.55,-0.01:99
-chr1	3630886	rs6687491	G	A	255.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.48;MQ0=0;OQ=516.42;QD=12.91;SB=-227.77	GT:AD:DP:GL:GQ	0/1:22,18:36:-65.79,-10.86,-57.81:99
-chr1	3630983	rs6701784	A	C	437.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1276.86;QD=28.37;SB=-579.85	GT:AD:DP:GL:GQ	1/1:0,45:42:-131.31,-12.66,-0.04:99
-chr1	3632013	rs34178965	G	C	41.74	LowQual	AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=13.91;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-7.58,-0.60,-0.00:6.02
-chr1	3632108	.	A	G	92.54	PASS	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.46;MQ0=0;OQ=246.19;QD=30.77;SB=-85.92	GT:AD:DP:GL:GQ	1/1:0,8:8:-28.20,-2.41,-0.00:24.07
-chr1	3633787	rs2296031	A	G	6.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=452.89;QD=19.69;SB=-150.34	GT:AD:DP:GL:GQ	0/1:6,16:22:-55.20,-6.63,-22.30:99
-chr1	3634209	rs2181486	A	G	1.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=4;HaplotypeScore=1.69;MQ=58.39;MQ0=0;OQ=887.40;QD=30.60;SB=-422.16	GT:AD:DP:GL:GQ	1/1:0,29:29:-92.36,-8.75,-0.03:87.19
-chr1	3634234	rs2146657	A	G	3.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.86;MQ=58.55;MQ0=0;OQ=912.28;QD=28.51;SB=-446.82	GT:AD:DP:GL:GQ	1/1:0,32:28:-94.83,-8.44,-0.02:84.21
-chr1	3634529	rs2236367	C	T	14.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=-0.18;MQ=58.05;MQ0=0;OQ=381.45;QD=15.89;SB=-87.90	GT:AD:DP:GL:GQ	0/1:11,13:23:-48.37,-6.94,-31.96:99
-chr1	3634665	rs2236366	A	G	76.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=58.92;MQ0=0;OQ=536.64;QD=13.76;SB=-250.32	GT:AD:DP:GL:GQ	0/1:16,23:35:-67.50,-10.56,-54.78:99
-chr1	3634718	rs2236365	G	C	250.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.69;MQ0=0;OQ=951.80;QD=19.04;SB=-496.24	GT:AD:DP:GL:GQ	0/1:20,30:47:-112.65,-14.19,-78.43:99
-chr1	3634912	rs12095248	A	G	50.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=529.65;QD=10.81;SB=-225.29	GT:AD:DP:GL:GQ	0/1:29,20:49:-71.01,-14.76,-117.85:99
-chr1	3635695	rs2254530	C	A	234.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=56.85;MQ0=0;OQ=701.30;QD=15.58;SB=-270.34	GT:AD:DP:GL:GQ	0/1:17,28:43:-86.38,-12.96,-55.17:99
-chr1	3635704	rs2096224	G	A	61.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.39;MQ0=0;OQ=843.06;QD=18.33;SB=-255.19	GT:AD:DP:GL:GQ	0/1:18,27:42:-100.25,-12.66,-49.65:99
-chr1	3635997	rs11589885	C	T	153.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.19;MQ=58.55;MQ0=0;OQ=582.90;QD=18.22;SB=-289.86	GT:AD:DP:GL:GQ	0/1:14,18:32:-71.22,-9.65,-43.73:99
-chr1	3636052	rs1885867	G	A	143.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.44;MQ0=0;OQ=1392.32;QD=33.96;SB=-648.62	GT:AD:DP:GL:GQ	1/1:1,40:37:-142.84,-11.16,-0.02:99
-chr1	3636074	rs1885866	T	C	394.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1194.73;QD=27.15;SB=-580.01	GT:AD:DP:GL:GQ	1/1:0,44:39:-123.10,-11.76,-0.04:99
-chr1	3636151	rs1885865	G	A	33.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.03;MQ0=0;OQ=1851.65;QD=38.58;SB=-906.66	GT:AD:DP:GL:GQ	1/1:0,48:47:-188.76,-14.16,-0.01:99
-chr1	3637822	rs1745813	T	C	55.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.13;MQ=58.97;MQ0=0;OQ=680.74;QD=15.13;SB=-289.66	GT:AD:DP:GL:GQ	0/1:18,27:43:-84.33,-12.97,-62.63:99
-chr1	3638114	rs34661835	G	A	68.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=3.56;MQ=59.01;MQ0=0;OQ=1063.39;QD=15.19;SB=-366.89	GT:AD:DP:GL:GQ	0/1:37,33:66:-129.52,-19.90,-102.17:99
-chr1	3638739	rs4648553	G	A	223.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.68;MQ=58.64;MQ0=0;OQ=511.89;QD=10.66;SB=-215.18	GT:AD:DP:GL:GQ	0/1:26,22:40:-66.54,-12.07,-70.14:99
-chr1	3640958	rs1181869	C	T	138.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=782.45;QD=20.06;SB=-285.16	GT:AD:DP:GL:GQ	0/1:16,23:38:-92.98,-11.45,-54.47:99
-chr1	3640986	rs1181868	G	T	357.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.51;MQ0=0;OQ=742.19;QD=14.55;SB=-306.02	GT:AD:DP:GL:GQ	0/1:23,27:47:-91.66,-14.16,-72.26:99
-chr1	3641178	rs1181867	A	G	3.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=11.13;MQ=59.11;MQ0=0;OQ=463.08;QD=9.85;SB=-239.29	GT:AD:DP:GL:GQ	0/1:24,23:43:-62.56,-12.97,-88.46:99
-chr1	3642477	rs1047928	G	C	24.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.25;MQ0=0;OQ=1110.64;QD=19.83;SB=-354.44	GT:AD:DP:GL:GQ	0/1:25,31:54:-130.64,-16.30,-94.09:99
-chr1	3642678	rs61759293	G	A	143.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=59.59;MQ0=0;OQ=746.17;QD=16.22;SB=-262.29	GT:AD:DP:GL:GQ	0/1:23,23:46:-91.76,-13.86,-82.87:99
-chr1	3642682	rs9800	C	G	193.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=59.59;MQ0=0;OQ=608.81;QD=13.23;SB=-238.07	GT:AD:DP:GL:GQ	0/1:25,21:45:-77.74,-13.57,-107.75:99
-chr1	3643272	rs1181866	A	C	242.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1714.13;QD=34.28;SB=-732.08	GT:AD:DP:GL:GQ	1/1:0,50:49:-175.01,-14.76,-0.02:99
-chr1	3643286	rs1181865	T	C	423.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1563.43;QD=32.57;SB=-664.24	GT:AD:DP:GL:GQ	1/1:0,48:46:-159.95,-13.86,-0.02:99
-chr1	3644050	rs1181864	A	G	156.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=57.94;MQ0=0;OQ=704.72;QD=10.36;SB=-357.09	GT:AD:DP:GL:GQ	0/1:38,30:68:-94.25,-20.50,-152.69:99
-chr1	3644355	rs41315308	C	T	206.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=57.86;MQ0=0;OQ=957.61;QD=14.96;SB=-405.80	GT:AD:DP:GL:GQ	0/1:34,30:63:-118.03,-18.99,-105.73:99
-chr1	3646184	rs1181863	T	C	89.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.04;MQ0=1;OQ=1725.96;QD=27.84;SB=-738.77	GT:AD:DP:GL:GQ	1/1:0,62:55:-176.23,-16.59,-0.05:99
-chr1	3647330	rs61339658	C	T	216.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.48;MQ0=0;OQ=622.56;QD=14.15;SB=-204.90	GT:AD:DP:GL:GQ	0/1:24,20:43:-78.50,-12.96,-75.30:99
-chr1	3647619	rs12117836	G	A	258.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.76;MQ0=0;OQ=3087.35;QD=39.58;SB=-1142.52	GT:AD:DP:GL:GQ	1/1:0,78:77:-312.34,-23.20,-0.02:99
-chr1	3647643	rs55704710	C	T	372.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1117.31;QD=14.14;SB=-441.41	GT:AD:DP:GL:GQ	0/1:44,35:79:-138.82,-23.81,-145.27:99
-chr1	3648097	rs10797409	G	A	267.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.27;MQ0=0;OQ=783.87;QD=15.37;SB=-396.73	GT:AD:DP:GL:GQ	0/1:26,25:51:-97.04,-15.37,-93.66:99
-chr1	3648630	rs12068191	T	C	36.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=59.42;MQ0=0;OQ=210.22;QD=6.57;SB=-113.63	GT:AD:DP:GL:GQ	0/1:20,12:30:-33.36,-9.05,-73.41:99
-chr1	3649517	rs2298222	G	A	272.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=58.64;MQ0=0;OQ=639.47;QD=13.32;SB=-210.21	GT:AD:DP:GL:GQ	0/1:28,20:45:-80.80,-13.57,-77.92:99
-chr1	3650201	rs10910020	A	G	239.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=60.00;MQ0=0;OQ=830.62;QD=14.32;SB=-256.96	GT:AD:DP:GL:GQ	0/1:22,36:55:-102.93,-16.58,-89.31:99
-chr1	3650655	rs61759295	C	T	319.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=56.32;MQ0=0;OQ=1049.42;QD=17.20;SB=-513.15	GT:AD:DP:GL:GQ	0/1:29,32:58:-125.70,-17.48,-89.86:99
-chr1	3650715	.	C	T	1.43	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=58.05;MQ0=0;OQ=1053.29;QD=21.50;SB=-546.76	GT:AD:DP:GL:GQ	0/1:18,30:49:-126.44,-17.83,-68.95:99
-chr1	3650833	rs61759296	C	T	365.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=780.11;QD=18.14;SB=-365.90	GT:AD:DP:GL:GQ	0/1:18,25:43:-94.25,-12.96,-66.61:99
-chr1	3650834	rs61759297	A	G	444.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=732.78;QD=16.65;SB=-378.33	GT:AD:DP:GL:GQ	0/1:18,26:44:-89.82,-13.26,-70.47:99
-chr1	3651042	.	A	G	50.56	PASS	AC=2;AF=1.00;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.01;MQ0=0;OQ=2317.73;QD=30.50;SB=-942.03	GT:AD:DP:GL:GQ	1/1:0,76:75:-235.44,-22.63,-0.08:99
-chr1	3651109	.	A	G	1.79	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=56.71;MQ0=0;OQ=273.27;QD=7.01;SB=-125.50	GT:AD:DP:GL:GQ	0/1:24,15:37:-41.77,-11.16,-93.00:99
-chr1	3651611	rs61759298	C	T	14.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=6.20;MQ=59.36;MQ0=0;OQ=487.25;QD=13.53;SB=-201.22	GT:AD:DP:GL:GQ	0/1:19,17:31:-61.35,-9.34,-53.39:99
-chr1	3651666	rs61759299	G	A	290.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=58.58;MQ0=0;OQ=537.51;QD=11.69;SB=-229.48	GT:AD:DP:GL:GQ	0/1:28,18:45:-70.60,-13.56,-93.90:99
-chr1	3652705	rs3737589	A	G	232.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1820.89;QD=33.11;SB=-644.31	GT:AD:DP:GL:GQ	1/1:0,55:53:-185.70,-15.97,-0.02:99
-chr1	3652806	.	C	A	30.45	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=18.21;MQ=58.71;MQ0=0;QD=0.56;SB=77.26	GT:AD:DP:GL:GQ	0/1:38,16:41:-18.69,-12.36,-124.87:63.28
-chr1	3652917	rs3737590	A	T	248.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=534.27;QD=11.87;SB=-180.50	GT:AD:DP:GL:GQ	0/1:25,20:43:-69.67,-12.96,-88.74:99
-chr1	3652988	rs3737591	G	A	355.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=743.37;QD=18.13;SB=-354.36	GT:AD:DP:GL:GQ	0/1:19,22:40:-89.67,-12.05,-59.56:99
-chr1	3653501	.	C	T	1.63	PASS	AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=4.19;MQ=56.43;MQ0=0;OQ=295.19;QD=12.30;SB=-147.16	GT:AD:DP:GL:GQ	0/1:12,11:20:-38.83,-6.03,-35.51:99
-chr1	3654278	rs61759300	C	T	319.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.50;MQ0=0;OQ=838.34;QD=14.71;SB=-382.16	GT:AD:DP:GL:GQ	0/1:29,28:55:-103.70,-16.58,-94.60:99
-chr1	3654412	.	G	A	1.87	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.14;MQ=59.58;MQ0=0;OQ=1116.86;QD=20.31;SB=-482.46	GT:AD:DP:GL:GQ	0/1:23,32:54:-131.23,-16.26,-80.42:99
-chr1	3655727	rs12120656	G	T	277.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.16;MQ0=0;OQ=2493.88;QD=34.64;SB=-1022.51	GT:AD:DP:GL:GQ	1/1:0,71:69:-252.99,-20.78,-0.02:99
-chr1	3657359	rs61759301	C	A	268.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.56;MQ0=0;OQ=858.70;QD=16.20;SB=-443.00	GT:AD:DP:GL:GQ	0/1:24,29:52:-104.82,-15.66,-81.51:99
-chr1	3657864	rs4648554	T	C	343.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.67;MQ0=0;OQ=2306.57;QD=35.49;SB=-875.99	GT:AD:DP:GL:GQ	1/1:0,65:64:-234.26,-19.28,-0.02:99
-chr1	3658613	rs12128253	A	C	493.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=800.32;QD=17.40;SB=-351.83	GT:AD:DP:GL:GQ	0/1:19,27:46:-97.17,-13.85,-71.32:99
-chr1	3658641	rs12123850	G	T	445.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1182.07;QD=31.95;SB=-471.02	GT:AD:DP:GL:GQ	1/1:0,37:33:-121.80,-9.94,-0.01:99
-chr1	3659032	rs41315312	C	T	393.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=747.09;QD=16.24;SB=-297.79	GT:AD:DP:GL:GQ	0/1:23,23:45:-91.55,-13.56,-71.39:99
-chr1	3659061	rs10797410	A	G	617.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1286.97;QD=30.64;SB=-659.94	GT:AD:DP:GL:GQ	1/1:0,42:41:-132.32,-12.36,-0.04:99
-chr1	3659065	rs10910021	C	G	483.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1547.05;QD=38.68;SB=-689.48	GT:AD:DP:GL:GQ	1/1:0,40:36:-158.30,-10.85,-0.01:99
-chr1	3659480	rs10797411	T	C	0.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=7.27;MQ=57.71;MQ0=0;OQ=1720.61;QD=33.09;SB=-601.34	GT:AD:DP:GL:GQ	1/1:0,51:50:-175.67,-15.06,-0.02:99
-chr1	3659744	.	C	T	75.39	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=20;HaplotypeScore=21.91;MQ=50.61;MQ0=1;QD=1.13;SB=59.16	GT:AD:DP:GL:GQ	0/1:57,10:52:-26.50,-15.68,-150.70:99
-chr1	3659750	.	T	C	207.45	SnpCluster	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=50.10;MQ=49.95;MQ0=1;QD=3.05;SB=-120.43	GT:AD:DP:GL:GQ	0/1:53,15:58:-41.51,-17.48,-178.17:99
-chr1	3659751	.	T	C	331.47	SnpCluster	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=48.26;MQ=49.78;MQ0=1;QD=4.95;SB=-162.44	GT:AD:DP:GL:GQ	0/1:46,21:55:-53.00,-16.57,-149.72:99
-chr1	3660887	rs1181889	T	C	275.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=59.11;MQ0=0;OQ=722.62;QD=13.90;SB=-328.30	GT:AD:DP:GL:GQ	0/1:24,28:49:-90.30,-14.76,-97.70:99
-chr1	3661651	rs1181888	A	G	399.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=490.27;QD=11.14;SB=-251.93	GT:AD:DP:GL:GQ	0/1:22,22:42:-64.98,-12.67,-82.79:99
-chr1	3662016	rs4648555	C	A	364.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=510.62;QD=9.46;SB=-259.25	GT:AD:DP:GL:GQ	0/1:34,20:53:-70.31,-15.96,-121.67:99
-chr1	3662783	rs12128087	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=13;HaplotypeScore=8.43;MQ=60.15;MQ0=0;OQ=558.18;QD=10.94;SB=-253.17	GT:AD:DP:GL:GQ	0/1:30,21:47:-73.27,-14.17,-94.61:99
-chr1	3663356	rs4648405	T	G	117.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.45;MQ0=0;OQ=421.62;QD=10.04;SB=-89.84	GT:AD:DP:GL:GQ	0/1:24,18:40:-57.50,-12.05,-84.73:99
-chr1	3663862	rs1181887	T	G	544.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1620.49;QD=34.48;SB=-656.23	GT:AD:DP:GL:GQ	1/1:0,47:47:-165.65,-14.16,-0.01:99
-chr1	3664012	rs7542464	C	T	327.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.16;MQ0=0;OQ=1410.26;QD=37.11;SB=-358.47	GT:AD:DP:GL:GQ	1/1:0,38:38:-144.63,-11.46,-0.02:99
-chr1	3664166	.	G	A	2.11	PASS	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=3;HaplotypeScore=2.17;MQ=59.59;MQ0=0;OQ=801.46;QD=17.81;SB=-414.44	GT:AD:DP:GL:GQ	0/1:20,25:43:-96.39,-12.96,-61.16:99
-chr1	3664614	rs1181886	A	T	88.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.65;MQ0=0;OQ=779.71;QD=14.44;SB=-332.65	GT:AD:DP:GL:GQ	0/1:28,26:52:-96.92,-15.66,-100.50:99
-chr1	3664618	rs9424312	T	A	76.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=946.40;QD=17.53;SB=-254.96	GT:AD:DP:GL:GQ	0/1:24,30:54:-114.19,-16.27,-85.78:99
-chr1	3664638	rs59291549	A	G	339.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=754.74;QD=11.44;SB=-151.30	GT:AD:DP:GL:GQ	0/1:31,35:62:-97.45,-18.69,-125.83:99
-chr1	3664862	rs6682863	G	A	201.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.78;MQ0=0;OQ=631.54;QD=12.63;SB=-190.86	GT:AD:DP:GL:GQ	0/1:30,20:45:-80.00,-13.57,-81.03:99
-chr1	3665697	rs12128570	C	G	270.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=50.42;MQ0=0;OQ=767.84;QD=13.01;SB=-344.88	GT:AD:DP:GL:GQ	0/1:34,25:56:-96.94,-16.88,-141.00:99
-chr1	3665819	rs12131045	T	G	461.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.52;MQ0=0;OQ=642.50;QD=12.12;SB=-333.74	GT:AD:DP:GL:GQ	0/1:24,29:50:-82.60,-15.07,-87.60:99
-chr1	3665937	rs12128669	C	T	521.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.12;MQ0=0;OQ=862.45;QD=14.37;SB=-269.15	GT:AD:DP:GL:GQ	0/1:32,28:59:-107.30,-17.77,-116.90:99
-chr1	3666427	rs1181885	C	T	33.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.66;MQ0=0;OQ=1204.99;QD=21.91;SB=-603.11	GT:AD:DP:GL:GQ	0/1:19,36:52:-139.46,-15.68,-54.65:99
-chr1	3666458	rs1181884	T	C	438.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1123.89;QD=17.56;SB=-533.09	GT:AD:DP:GL:GQ	0/1:26,38:63:-134.65,-18.98,-101.24:99
-chr1	3666632	rs12406474	T	C	126.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=1.53;MQ=58.86;MQ0=0;OQ=740.89;QD=13.00;SB=-344.59	GT:AD:DP:GL:GQ	0/1:29,28:56:-94.24,-16.87,-116.11:99
-chr1	3667793	rs1181883	T	C	251.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.64;MQ0=0;OQ=2030.56;QD=31.73;SB=-682.90	GT:AD:DP:GL:GQ	1/1:0,64:64:-206.69,-19.29,-0.05:99
-chr1	3668081	rs1181882	G	C	162.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=60.00;MQ0=0;OQ=1618.57;QD=31.13;SB=-715.93	GT:AD:DP:GL:GQ	1/1:0,52:43:-165.50,-13.00,-0.06:99
-chr1	3668091	rs7516756	A	G	107.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=613.13;QD=11.57;SB=-116.72	GT:AD:DP:GL:GQ	0/1:27,26:49:-79.36,-14.77,-98.00:99
-chr1	3668371	rs7516968	A	G	62.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=209.36;QD=9.10;SB=-37.93	GT:AD:DP:GL:GQ	0/1:13,10:22:-30.85,-6.63,-52.05:99
-chr1	3668596	.	G	A	15.65	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=57.44;MQ0=0;OQ=384.28;QD=10.98;SB=-65.05	GT:AD:DP:GL:GQ	0/1:22,13:35:-52.26,-10.55,-81.04:99
-chr1	3668758	rs1181881	A	G	16.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=57.96;MQ0=0;OQ=916.82;QD=30.56;SB=-341.43	GT:AD:DP:GL:GQ	1/1:0,30:29:-95.29,-8.74,-0.02:87.21
-chr1	3668764	rs1181880	C	T	45.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.66;MQ0=0;OQ=531.41;QD=18.98;SB=-213.73	GT:AD:DP:GL:GQ	0/1:11,17:28:-64.87,-8.45,-34.91:99
-chr1	3668999	rs1181879	T	C	13.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.38;MQ=59.44;MQ0=0;OQ=1208.95;QD=29.49;SB=-449.15	GT:AD:DP:GL:GQ	1/1:0,41:38:-124.52,-11.46,-0.04:99
-chr1	3669006	rs4648556	G	A	196.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.44;MQ0=0;OQ=524.36;QD=12.79;SB=-228.74	GT:AD:DP:GL:GQ	0/1:24,17:40:-67.77,-12.05,-80.81:99
-chr1	3669167	rs4648557	T	C	163.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=314.58;QD=10.15;SB=-171.98	GT:AD:DP:GL:GQ	0/1:15,16:28:-43.19,-8.45,-53.69:99
-chr1	3669321	rs4648558	A	T	213.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=59.30;MQ0=0;OQ=430.63;QD=13.05;SB=-151.85	GT:AD:DP:GL:GQ	0/1:18,15:33:-56.29,-9.94,-66.61:99
-chr1	3669635	rs10910024	C	T	223.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=60.00;MQ0=0;OQ=261.53;QD=10.46;SB=-131.12	GT:AD:DP:GL:GQ	0/1:15,10:24:-36.67,-7.23,-47.59:99
-chr1	3669916	rs56079032	G	A	49.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.11;MQ0=0;OQ=457.75;QD=17.61;SB=-143.18	GT:AD:DP:GL:GQ	0/1:10,16:25:-56.59,-7.54,-35.59:99
-chr1	3670503	rs1181878	G	A	204.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=58.92;MQ0=0;OQ=593.13;QD=15.21;SB=-209.18	GT:AD:DP:GL:GQ	0/1:21,18:39:-74.34,-11.75,-76.92:99
-chr1	3670589	rs1181877	C	T	442.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.71;MQ0=0;OQ=1051.46;QD=16.43;SB=-536.72	GT:AD:DP:GL:GQ	0/1:31,33:61:-126.81,-18.38,-107.46:99
-chr1	3670923	rs6669358	A	G	271.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.35;MQ=59.49;MQ0=0;OQ=863.52;QD=11.83;SB=-442.10	GT:AD:DP:GL:GQ	0/1:40,33:71:-111.03,-21.40,-156.37:99
-chr1	3671541	rs1181876	A	G	312.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.35;MQ0=0;OQ=557.92;QD=8.72;SB=-268.23	GT:AD:DP:GL:GQ	0/1:36,28:60:-77.16,-18.08,-144.69:99
-chr1	3671691	rs1181875	T	C	354.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.69;MQ0=0;OQ=768.78;QD=12.60;SB=-310.35	GT:AD:DP:GL:GQ	0/1:32,29:59:-97.93,-17.77,-128.86:99
-chr1	3671930	rs1181874	C	A	548.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1553.48;QD=14.00;SB=-588.81	GT:AD:DP:GL:GQ	0/1:58,53:110:-191.77,-33.14,-192.67:99
-chr1	3673550	rs1181873	A	C	65.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=502.42;QD=12.88;SB=-249.39	GT:AD:DP:GL:GQ	0/1:20,19:38:-64.97,-11.45,-71.58:99
-chr1	3673967	rs1181872	T	A	314.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.13;MQ0=0;OQ=665.69;QD=15.48;SB=-321.70	GT:AD:DP:GL:GQ	0/1:19,24:41:-82.21,-12.35,-69.45:99
-chr1	3674181	rs1181871	A	G	201.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.16;MQ0=0;OQ=271.85;QD=7.55;SB=-59.74	GT:AD:DP:GL:GQ	0/1:21,15:32:-40.11,-9.65,-77.03:99
-chr1	3674814	rs1181870	C	A	305.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=57.69;MQ0=0;OQ=866.35;QD=12.93;SB=-280.62	GT:AD:DP:GL:GQ	0/1:36,31:65:-109.50,-19.58,-123.19:99
-chr1	3677599	rs1175552	C	A	135.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=60.00;MQ0=0;OQ=585.48;QD=10.09;SB=-188.53	GT:AD:DP:GL:GQ	0/1:34,24:53:-77.81,-15.97,-102.27:99
-chr1	3678505	rs1175551	T	C	166.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=58.20;MQ0=0;OQ=103.01;QD=7.92;SB=-65.87	GT:AD:DP:GL:GQ	0/1:7,6:12:-17.20,-3.62,-26.14:99
-chr1	3679407	.	C	G	26.93	LowQual	AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=48.93;MQ0=0;QD=2.45;SB=-6.99	GT:AD:DP:GL:GQ	0/1:3,8:4:-7.19,-1.21,-8.24:59.76
-chr1	3681100	rs1184341	C	T	108.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.04;MQ=59.23;MQ0=0;OQ=426.67;QD=14.22;SB=-164.69	GT:AD:DP:GL:GQ	0/1:15,15:28:-54.39,-8.44,-49.07:99
-chr1	3681124	rs2797432	A	G	199.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=396.40;QD=12.39;SB=-160.61	GT:AD:DP:GL:GQ	0/1:13,19:29:-51.67,-8.74,-51.47:99
-chr1	3681330	rs1181893	A	C	235.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.61;MQ0=0;OQ=409.25;QD=27.28;SB=-143.01	GT:AD:DP:GL:GQ	1/1:0,15:13:-44.52,-3.92,-0.01:39.10
-chr1	3681388	rs1175550	A	G	206.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.14;MQ0=0;OQ=268.33;QD=9.94;SB=-118.66	GT:AD:DP:GL:GQ	0/1:16,11:27:-38.26,-8.14,-61.45:99
-chr1	3681587	rs1175549	A	C	56.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.28;MQ0=0;OQ=317.74;QD=9.93;SB=-135.67	GT:AD:DP:GL:GQ	0/1:18,14:31:-44.40,-9.34,-64.53:99
-chr1	3682892	rs1175548	A	G	294.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.99;MQ0=0;OQ=521.21;QD=11.33;SB=-266.55	GT:AD:DP:GL:GQ	0/1:25,21:43:-68.36,-12.95,-93.71:99
-chr1	3683615	rs1175547	G	T	106.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=58.25;MQ0=0;OQ=658.75;QD=16.47;SB=-219.58	GT:AD:DP:GL:GQ	0/1:18,22:39:-80.91,-11.75,-53.72:99
-chr1	3683769	rs1175546	C	T	14.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=58.95;MQ0=0;OQ=845.89;QD=19.22;SB=-175.68	GT:AD:DP:GL:GQ	0/1:18,26:42:-100.52,-12.65,-61.88:99
-chr1	3684656	rs1891934	G	A	75.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.58;MQ0=0;OQ=574.95;QD=13.07;SB=-268.25	GT:AD:DP:GL:GQ	0/1:26,18:41:-73.14,-12.36,-73.56:99
-chr1	3684836	.	T	G	29.95	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=2;HaplotypeScore=5.28;MQ=57.94;MQ0=0;QD=0.88;SB=50.17	GT:AD:DP:GL:GQ	0/1:20,14:25:-13.81,-7.53,-70.58:62.78
-chr1	3685860	rs2799182	T	C	179.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=58.63;MQ0=0;OQ=681.56;QD=13.36;SB=-324.12	GT:AD:DP:GL:GQ	0/1:23,28:50:-86.51,-15.07,-94.22:99
-chr1	3686231	rs61759305	C	T	280.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=512.50;QD=17.08;SB=-238.52	GT:AD:DP:GL:GQ	0/1:14,16:29:-63.27,-8.74,-47.74:99
-chr1	3686750	rs8379	A	C	132.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.70;MQ0=0;OQ=512.51;QD=8.27;SB=-204.80	GT:AD:DP:GL:GQ	0/1:39,23:59:-72.31,-17.77,-139.60:99
-chr1	3687151	rs2996428	C	T	323.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=59.68;MQ0=0;OQ=1332.10;QD=18.25;SB=-588.63	GT:AD:DP:GL:GQ	0/1:30,43:68:-156.98,-20.49,-102.01:99
-chr1	3688388	rs2799186	C	G	198.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=1120.38;QD=14.55;SB=-296.13	GT:AD:DP:GL:GQ	0/1:44,32:77:-141.06,-25.73,-190.14:99
-chr1	3688807	rs12122058	C	T	132.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=788.10;QD=15.16;SB=-353.46	GT:AD:DP:GL:GQ	0/1:27,25:50:-97.16,-15.07,-93.28:99
-chr1	3689428	rs2799185	G	C	86.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.23;MQ0=0;OQ=644.64;QD=17.42;SB=-205.64	GT:AD:DP:GL:GQ	0/1:18,19:35:-78.30,-10.56,-70.47:99
-chr1	3689489	rs2799184	T	G	198.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.30;MQ=56.35;MQ0=0;OQ=514.42;QD=13.19;SB=-238.40	GT:AD:DP:GL:GQ	0/1:19,20:37:-65.87,-11.14,-65.31:99
-chr1	3689844	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=16;HaplotypeScore=12.40;MQ=56.82;MQ0=0;OQ=207.53;QD=3.10;SB=47.88	GT:AD:DP:GL:GQ	0/1:50,16:53:-40.01,-15.97,-140.82:99
-chr1	3691351	rs2996426	A	G	107.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=59.77;MQ0=0;OQ=576.97;QD=11.10;SB=-273.25	GT:AD:DP:GL:GQ	0/1:26,26:49:-75.76,-14.78,-98.82:99
-chr1	3693197	rs2368537	G	C	138.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.55;MQ0=0;OQ=1805.49;QD=35.40;SB=-781.23	GT:AD:DP:GL:GQ	1/1:0,51:46:-184.17,-13.88,-0.03:99
-chr1	3693570	rs2253143	G	A	60.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=58.41;MQ0=0;OQ=495.55;QD=11.26;SB=-141.61	GT:AD:DP:GL:GQ	0/1:26,18:41:-65.20,-12.37,-77.20:99
-chr1	3694312	rs12142183	T	G	312.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=59.65;MQ0=0;OQ=615.52;QD=11.61;SB=-311.76	GT:AD:DP:GL:GQ	0/1:22,31:47:-79.00,-14.16,-79.12:99
-chr1	3694564	.	G	C	39.33	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=6.24;MQ=58.81;MQ0=0;QD=0.72;SB=44.18	GT:AD:DP:GL:GQ	0/1:42,12:37:-18.38,-11.17,-134.23:72.16
-chr1	3701498	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=71;Dels=0.03;HRun=20;HaplotypeScore=51.30;MQ=52.45;MQ0=0;OQ=259.27;QD=3.65;SB=80.25	GT:AD:DP:GL:GQ	0/1:46,23:54:-44.89,-15.68,-134.64:99
-chr1	3708347	rs6681383	G	A	128.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.34;MQ0=0;OQ=1078.39;QD=18.92;SB=-322.85	GT:AD:DP:GL:GQ	0/1:24,33:53:-127.10,-15.97,-69.66:99
-chr1	3712148	rs2996425	A	T	193.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=59.02;MQ0=0;OQ=2222.50;QD=35.85;SB=-1018.88	GT:AD:DP:GL:GQ	1/1:0,62:60:-225.85,-18.07,-0.02:99
-chr1	3714307	rs61759320	G	A	326.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=53.55;MQ0=0;OQ=770.50;QD=14.01;SB=-354.84	GT:AD:DP:GL:GQ	0/1:29,25:53:-96.31,-15.97,-95.14:99
-chr1	3714663	.	A	C	15.04	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=8.17;MQ=57.66;MQ0=0;QD=0.38;SB=56.19	GT:AD:DP:GL:GQ	0/1:24,16:28:-13.21,-8.44,-81.36:47.74
-chr1	3727878	.	C	T	38.08	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=59.48;MQ0=0;OQ=1399.61;QD=17.28;SB=-662.18	GT:AD:DP:GL:GQ	0/1:40,41:81:-167.65,-24.40,-140.98:99
-chr1	3731503	.	A	G	18.90	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=3;HaplotypeScore=1.79;MQ=54.69;MQ0=0;QD=0.73;SB=5.04	GT:AD:DP:GL:GQ	0/1:21,5:21:-11.50,-6.33,-70.25:51.68
-chr1	3735976	rs1836	A	G	124.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.74;MQ0=0;OQ=2210.40;QD=31.13;SB=-963.45	GT:AD:DP:GL:GQ	1/1:0,70:69:-227.21,-23.18,-2.59:99
-chr1	3736114	rs2275830	T	C	634.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2088.07;QD=30.71;SB=-734.31	GT:AD:DP:GL:GQ	1/1:0,68:67:-212.46,-20.22,-0.07:99
-chr1	3736443	rs2275828	G	T	17.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=3.28;MQ=59.05;MQ0=0;OQ=2655.56;QD=36.38;SB=-1342.28	GT:AD:DP:GL:GQ	1/1:0,73:72:-269.16,-21.68,-0.02:99
-chr1	3736449	rs2275826	C	G	89.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.10;MQ0=0;OQ=3375.97;QD=43.84;SB=-1685.64	GT:AD:DP:GL:GQ	1/1:0,77:77:-336.60,-23.20,-0.02:99
-chr1	3737179	rs4648417	C	T	55.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=58.05;MQ0=0;OQ=1230.92;QD=34.19;SB=-377.48	GT:AD:DP:GL:GQ	1/1:0,35:33:-126.70,-9.95,-0.02:99
-chr1	3737440	rs6424058	C	T	106.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=56.84;MQ0=0;OQ=1463.09;QD=34.84;SB=-699.35	GT:AD:DP:GL:GQ	1/1:0,42:38:-149.91,-11.45,-0.01:99
-chr1	3737463	rs6413779	T	C	36.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.40;MQ0=0;OQ=1023.14;QD=33.00;SB=-220.63	GT:AD:DP:GL:GQ	1/1:0,31:31:-105.92,-9.34,-0.02:93.25
-chr1	3737945	rs7522227	A	G	230.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=2674.63;QD=34.29;SB=-1340.60	GT:AD:DP:GL:GQ	1/1:0,77:76:-271.07,-22.89,-0.02:99
-chr1	3738031	rs7524765	T	C	717.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2886.44;QD=35.20;SB=-1305.64	GT:AD:DP:GL:GQ	1/1:0,82:82:-292.25,-24.70,-0.03:99
-chr1	3738548	rs17403836	A	C	593.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.20;MQ0=0;OQ=3340.65;QD=35.92;SB=-1448.19	GT:AD:DP:GL:GQ	1/1:0,93:93:-333.07,-28.01,-0.02:99
-chr1	3738842	rs61768911	C	G	310.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.39;MQ0=2;OQ=606.83;QD=30.34;SB=-199.55	GT:AD:DP:GL:GQ	1/1:0,19:16:-64.28,-4.83,-0.01:48.16
-chr1	3738927	.	T	C	23.45	LowQual	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.48;MQ=47.67;MQ0=1;QD=0.60;SB=-5.57	GT:AD:DP:GL:GQ	0/1:32,7:31:-14.97,-9.34,-106.27:56.26
-chr1	3738930	.	T	C	7.68	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=48.29;MQ0=0;OQ=738.60;QD=19.44;SB=-353.38	GT:AD:DP:GL:GQ	0/1:6,32:31:-86.49,-9.35,-16.38:70.33
-chr1	3738954	rs61768912	T	C	1249.83	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.18;MQ0=0;QD=28.41;SB=-561.89	GT:AD:DP:GL:GQ	1/1:0,43:40:-128.60,-12.06,-0.04:99
-chr1	3738962	rs61768913	A	G	1521.07	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.09;MQ0=0;QD=28.17;SB=-501.21	GT:AD:DP:GL:GQ	1/1:0,54:48:-155.73,-14.47,-0.04:99
-chr1	3738964	rs61768914	A	G	1823.57	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.35;MQ0=0;QD=32.56;SB=-678.27	GT:AD:DP:GL:GQ	1/1:0,56:52:-185.96,-15.66,-0.02:99
-chr1	3738975	rs61768915	T	C	185.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=53.83;MQ0=0;OQ=2377.40;QD=34.96;SB=-853.97	GT:AD:DP:GL:GQ	1/1:0,68:67:-241.35,-20.18,-0.03:99
-chr1	3739217	rs6684560	G	A	167.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=55.03;MQ0=0;OQ=2027.81;QD=36.87;SB=-859.02	GT:AD:DP:GL:GQ	1/1:1,54:53:-206.39,-15.97,-0.02:99
-chr1	3739448	rs6676260	T	C	481.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1276.86;QD=30.40;SB=-555.08	GT:AD:DP:GL:GQ	1/1:0,42:41:-131.31,-12.36,-0.03:99
-chr1	3739507	rs10797344	C	G	65.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.28;MQ0=0;OQ=2404.57;QD=37.57;SB=-1028.99	GT:AD:DP:GL:GQ	1/1:0,64:58:-244.08,-17.49,-0.04:99
-chr1	3739508	rs10797345	G	A	56.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=59.28;MQ0=0;OQ=2416.64;QD=37.76;SB=-1154.54	GT:AD:DP:GL:GQ	1/1:0,64:63:-245.28,-18.99,-0.03:99
-chr1	3739554	rs6673716	A	G	130.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=1461.81;QD=29.83;SB=-615.96	GT:AD:DP:GL:GQ	1/1:0,49:46:-149.80,-13.87,-0.04:99
-chr1	3739633	rs6673807	A	G	581.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=2050.62;QD=35.36;SB=-778.99	GT:AD:DP:GL:GQ	1/1:0,58:58:-208.67,-17.47,-0.02:99
-chr1	3740027	rs2368533	G	A	618.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2881.32;QD=38.94;SB=-1374.05	GT:AD:DP:GL:GQ	1/1:0,74:73:-291.74,-21.99,-0.02:99
-chr1	3740589	rs6677381	A	G	634.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2780.11;QD=35.64;SB=-1088.76	GT:AD:DP:GL:GQ	1/1:0,78:77:-281.62,-23.19,-0.02:99
-chr1	3740591	rs6680017	T	G	509.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2637.83;QD=34.26;SB=-1082.49	GT:AD:DP:GL:GQ	1/1:0,77:75:-267.39,-22.59,-0.02:99
-chr1	3740758	.	T	A	7.56	PASS	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.28;MQ0=1;OQ=174.11;QD=4.71;SB=-20.31	GT:AD:DP:GL:GQ	0/1:28,9:34:-30.93,-10.24,-98.40:99
-chr1	3741138	rs2887273	C	G	484.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2855.33;QD=43.26;SB=-1170.05	GT:AD:DP:GL:GQ	1/1:0,66:66:-289.13,-19.88,-0.02:99
-chr1	3741826	rs4648419	C	G	552.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=3843.78;QD=42.24;SB=-1290.87	GT:AD:DP:GL:GQ	1/1:0,91:88:-383.38,-26.52,-0.03:99
-chr1	3742892	.	G	T	16.29	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=20;HaplotypeScore=18.89;MQ=55.03;MQ0=1;QD=0.28;SB=44.02	GT:AD:DP:GL:GQ	0/1:50,6:41:-19.70,-14.80,-98.51:49.02
-chr1	3742917	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.02;HRun=20;HaplotypeScore=34.21;MQ=57.45;MQ0=0;OQ=170.67;QD=3.28;SB=56.18	GT:AD:DP:GL:GQ	0/1:37,14:43:-33.01,-12.65,-114.45:99
-chr1	3742996	rs2275824	A	T	710.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2009.53;QD=35.25;SB=-882.57	GT:AD:DP:GL:GQ	1/1:0,57:56:-204.56,-16.87,-0.02:99
-chr1	3744349	rs12409082	G	C	531.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3059.06;QD=43.09;SB=-1422.83	GT:AD:DP:GL:GQ	1/1:0,71:71:-309.52,-21.40,-0.02:99
-chr1	3744456	rs6683827	G	T	2.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=4.28;MQ=58.86;MQ0=0;OQ=2501.40;QD=35.73;SB=-1071.46	GT:AD:DP:GL:GQ	1/1:0,70:69:-253.75,-20.78,-0.02:99
-chr1	3745535	rs1891941	T	C	731.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2479.06;QD=35.42;SB=-1217.69	GT:AD:DP:GL:GQ	1/1:0,70:69:-251.51,-20.78,-0.02:99
-chr1	3745729	rs1891940	T	C	456.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=1634.49;QD=34.78;SB=-697.28	GT:AD:DP:GL:GQ	1/1:0,47:46:-167.05,-13.85,-0.01:99
-chr1	3745735	rs1891939	T	G	249.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=1553.73;QD=33.78;SB=-800.51	GT:AD:DP:GL:GQ	1/1:0,46:45:-158.97,-13.55,-0.02:99
-chr1	3745980	rs1539649	A	G	625.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=2553.81;QD=30.77;SB=-1180.11	GT:AD:DP:GL:GQ	1/1:0,83:80:-259.03,-24.12,-0.06:99
-chr1	3746353	rs7535887	T	C	654.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1854.47;QD=30.91;SB=-854.01	GT:AD:DP:GL:GQ	1/1:0,60:59:-189.08,-17.79,-0.05:99
-chr1	3746392	rs10797346	T	C	305.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2579.74;QD=35.83;SB=-1200.15	GT:AD:DP:GL:GQ	1/1:0,72:72:-261.58,-21.69,-0.02:99
-chr1	3747160	rs10909800	C	T	207.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2281.73;QD=39.34;SB=-904.67	GT:AD:DP:GL:GQ	1/1:0,58:58:-231.78,-17.47,-0.02:99
-chr1	3748578	rs4381131	T	C	118.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=57.58;MQ0=0;OQ=1302.81;QD=35.21;SB=-612.36	GT:AD:DP:GL:GQ	1/1:0,37:37:-133.88,-11.14,-0.01:99
-chr1	3748616	rs4411084	A	G	124.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=57.27;MQ0=0;OQ=1453.01;QD=29.06;SB=-634.87	GT:AD:DP:GL:GQ	1/1:0,50:46:-148.93,-13.88,-0.04:99
-chr1	3749212	rs3765774	T	A	197.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=2826.29;QD=36.71;SB=-1358.75	GT:AD:DP:GL:GQ	1/1:0,77:76:-286.23,-22.89,-0.02:99
-chr1	3749644	rs10797347	A	G	265.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.07;MQ0=0;OQ=1626.88;QD=34.61;SB=-812.67	GT:AD:DP:GL:GQ	1/1:0,47:46:-166.29,-13.86,-0.01:99
-chr1	3749797	rs10909801	A	G	1.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=13.74;MQ=53.38;MQ0=0;OQ=1309.63;QD=23.81;SB=-631.48	GT:AD:DP:GL:GQ	1/1:0,53:41:-134.59,-12.37,-0.04:99
-chr1	3749921	rs6701360	G	A	575.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.91;MQ0=0;OQ=2426.40;QD=38.51;SB=-904.68	GT:AD:DP:GL:GQ	1/1:0,63:63:-246.25,-18.99,-0.03:99
-chr1	3749974	rs6690371	A	G	48.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=58.34;MQ0=0;OQ=1681.22;QD=35.03;SB=-728.27	GT:AD:DP:GL:GQ	1/1:0,48:48:-171.73,-14.47,-0.03:99
-chr1	3749989	rs6678020	C	T	441.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.59;MQ0=0;OQ=1518.29;QD=37.96;SB=-571.34	GT:AD:DP:GL:GQ	1/1:0,40:39:-155.43,-11.75,-0.01:99
-chr1	3750090	rs6680552	C	T	728	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.60;MQ0=1;OQ=1998.34;QD=35.06;SB=-998.84	GT:AD:DP:GL:GQ	1/1:0,57:51:-203.43,-15.36,-0.01:99
-chr1	3750216	rs6695657	T	C	130.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.67;MQ0=0;OQ=1753.47;QD=29.72;SB=-613.96	GT:AD:DP:GL:GQ	1/1:0,59:56:-178.99,-16.89,-0.06:99
-chr1	3750378	rs10752723	A	G	15.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.50;MQ=56.80;MQ0=0;OQ=1482.59;QD=32.95;SB=-488.54	GT:AD:DP:GL:GQ	1/1:1,43:41:-151.86,-12.35,-0.01:99
-chr1	3751141	rs6698930	T	A	637.91	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=7;HaplotypeScore=46.26;MQ=41.75;MQ0=0;QD=7.78;SB=8.51	GT:AD:DP:GL:GQ	0/1:49,33:69:-87.87,-20.79,-167.40:99
-chr1	3751339	rs2275822	C	T	226.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.23;MQ0=0;OQ=2373.96;QD=39.57;SB=-964.37	GT:AD:DP:GL:GQ	1/1:0,60:60:-241.00,-18.08,-0.02:99
-chr1	3751510	rs2275821	A	G	573.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.31;MQ0=0;OQ=3500.46;QD=35.36;SB=-1716.03	GT:AD:DP:GL:GQ	1/1:0,99:96:-349.05,-28.91,-0.03:99
-chr1	3751936	rs6699784	T	C	22.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1634.61;QD=34.05;SB=-680.60	GT:AD:DP:GL:GQ	1/1:0,48:47:-167.07,-14.16,-0.02:99
-chr1	3751940	rs6699785	T	C	457.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1716.61;QD=35.76;SB=-707.61	GT:AD:DP:GL:GQ	1/1:0,48:48:-175.26,-14.46,-0.02:99
-chr1	3752276	rs6687498	C	A	0.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=58.29;MQ0=1;OQ=1565.75;QD=34.79;SB=-714.95	GT:AD:DP:GL:GQ	1/1:1,44:44:-160.17,-13.25,-0.01:99
-chr1	3752464	rs4494088	C	T	130.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.01;MQ0=0;OQ=2585.87;QD=39.18;SB=-1275.71	GT:AD:DP:GL:GQ	1/1:0,66:65:-262.19,-19.58,-0.02:99
-chr1	3752510	.	C	A	11.64	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=20;HaplotypeScore=16.03;MQ=54.71;MQ0=1;QD=0.16;SB=98.34	GT:AD:DP:GL:GQ	0/1:63,8:53:-20.38,-15.96,-171.47:44.17
-chr1	3752581	rs4534323	A	T	713.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2157.31;QD=36.56;SB=-930.57	GT:AD:DP:GL:GQ	1/1:0,59:59:-219.34,-17.77,-0.02:99
-chr1	3753724	rs12047360	G	A	108.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.36;MQ0=0;OQ=1255.98;QD=34.89;SB=-564.33	GT:AD:DP:GL:GQ	1/1:0,36:33:-129.19,-9.94,-0.01:99
-chr1	3754321	rs34401151	C	T	220.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.55;MQ0=0;OQ=2357.19;QD=36.83;SB=-1184.12	GT:AD:DP:GL:GQ	1/1:0,63:62:-242.18,-21.42,-2.88:99
-chr1	3754471	rs55873991	T	C	460.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=2216.85;QD=34.64;SB=-478.52	GT:AD:DP:GL:GQ	1/1:0,64:60:-225.28,-18.07,-0.01:99
-chr1	3755409	rs4648346	G	A	377.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=56.94;MQ0=0;OQ=2718.34;QD=38.83;SB=-1289.71	GT:AD:DP:GL:GQ	1/1:0,70:68:-275.43,-20.48,-0.02:99
-chr1	3755538	rs4648423	C	T	3.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=59.49;MQ0=0;OQ=1662.33;QD=36.94;SB=-681.30	GT:AD:DP:GL:GQ	1/1:0,44:44:-169.84,-13.26,-0.02:99
-chr1	3755615	rs4648347	T	C	415.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.19;MQ0=0;OQ=2002.26;QD=34.52;SB=-940.97	GT:AD:DP:GL:GQ	1/1:0,58:56:-203.83,-16.87,-0.02:99
-chr1	3755919	rs12097923	G	T	175.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.51;MQ0=0;OQ=2007.64;QD=34.03;SB=-971.58	GT:AD:DP:GL:GQ	1/1:0,58:57:-204.37,-17.17,-0.02:99
-chr1	3756146	rs17404435	G	T	642.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1775.93;QD=34.82;SB=-654.09	GT:AD:DP:GL:GQ	1/1:0,51:50:-181.19,-15.06,-0.02:99
-chr1	3756301	rs6683156	C	T	153.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.62;MQ0=0;OQ=3593.95;QD=38.64;SB=-1767.70	GT:AD:DP:GL:GQ	1/1:0,92:90:-358.39,-27.12,-0.03:99
-chr1	3757458	rs3765779	A	G	312.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1547.17;QD=29.19;SB=-677.55	GT:AD:DP:GL:GQ	1/1:0,53:50:-158.35,-15.08,-0.05:99
-chr1	3757556	rs3765780	C	T	73.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1220.87;QD=37.00;SB=-540.71	GT:AD:DP:GL:GQ	1/1:0,33:32:-125.68,-9.64,-0.01:96.30
-chr1	3758579	rs1539647	T	C	5.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=3.94;MQ=58.65;MQ0=1;OQ=2215.43;QD=29.94;SB=-922.78	GT:AD:DP:GL:GQ	1/1:1,73:71:-228.15,-21.41,-3.03:99
-chr1	3758589	rs1539648	T	C	162.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.09;MQ0=0;OQ=2319.86;QD=30.52;SB=-925.48	GT:AD:DP:GL:GQ	1/1:0,76:73:-235.63,-22.01,-0.06:99
-chr1	3759091	rs6657021	A	G	451.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=2173.33;QD=30.19;SB=-1093.08	GT:AD:DP:GL:GQ	1/1:0,72:68:-220.98,-20.51,-0.06:99
-chr1	3759136	rs6668213	G	C	44.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.72;MQ0=0;OQ=2874.30;QD=41.66;SB=-1253.95	GT:AD:DP:GL:GQ	1/1:0,69:66:-291.04,-19.89,-0.02:99
-chr1	3759146	rs6693152	C	T	203.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.07;MQ0=0;OQ=2711.10;QD=38.73;SB=-1194.58	GT:AD:DP:GL:GQ	1/1:0,70:68:-274.71,-20.49,-0.02:99
-chr1	3759189	rs6657132	A	G	408.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1707.03;QD=31.04;SB=-847.00	GT:AD:DP:GL:GQ	1/1:0,55:50:-174.32,-15.07,-0.03:99
-chr1	3759225	rs6668306	G	C	258.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.53;MQ0=0;OQ=1917.17;QD=39.13;SB=-849.44	GT:AD:DP:GL:GQ	1/1:0,49:46:-195.32,-13.87,-0.02:99
-chr1	3759237	rs6693259	C	T	255.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1813.57;QD=38.59;SB=-875.61	GT:AD:DP:GL:GQ	1/1:0,47:47:-184.96,-14.17,-0.02:99
-chr1	3759339	.	T	C	4.24	PASS	AC=2;AF=1.00;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=37.66;MQ0=0;OQ=1291.89;QD=29.36;SB=-665.80	GT:AD:DP:GL:GQ	1/1:0,44:41:-132.82,-12.37,-0.04:99
-chr1	3759424	rs11576718	T	C	18.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.78;MQ0=0;OQ=1915.98;QD=34.84;SB=-646.27	GT:AD:DP:GL:GQ	1/1:0,55:53:-195.20,-15.96,-0.02:99
-chr1	3759450	rs11578021	G	C	393.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2482.73;QD=42.08;SB=-1009.18	GT:AD:DP:GL:GQ	1/1:0,59:57:-251.88,-17.18,-0.02:99
-chr1	3760255	rs4130539	C	A	200.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=59.43;MQ0=0;OQ=2921.40;QD=36.07;SB=-1317.55	GT:AD:DP:GL:GQ	1/1:0,81:81:-295.75,-24.40,-0.03:99
-chr1	3760285	rs4233023	G	A	128.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=2979.99;QD=37.25;SB=-1007.64	GT:AD:DP:GL:GQ	1/1:0,80:76:-301.61,-22.90,-0.03:99
-chr1	3760596	rs4582731	T	C	194.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1740.97;QD=31.65;SB=-868.36	GT:AD:DP:GL:GQ	1/1:0,55:54:-177.73,-16.29,-0.05:99
-chr1	3760968	rs12023761	T	C	207.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=57.12;MQ0=0;OQ=2651.31;QD=33.99;SB=-1110.83	GT:AD:DP:GL:GQ	1/1:0,78:75:-268.74,-22.59,-0.02:99
-chr1	3760980	rs12023762	T	C	71.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=56.93;MQ0=0;OQ=2310.56;QD=34.49;SB=-1074.87	GT:AD:DP:GL:GQ	1/1:0,66:64:-234.66,-19.27,-0.02:99
-chr1	3761023	rs12026284	G	A	45.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.92;MQ0=0;OQ=1613.24;QD=38.41;SB=-773.05	GT:AD:DP:GL:GQ	1/1:0,42:41:-164.92,-12.35,-0.01:99
-chr1	3761229	rs12024538	T	C	108.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=57.43;MQ0=0;OQ=2622.46;QD=34.06;SB=-1093.09	GT:AD:DP:GL:GQ	1/1:0,77:74:-265.86,-22.29,-0.03:99
-chr1	3761407	rs7552678	C	T	182.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=55.63;MQ0=0;OQ=2322.80;QD=37.46;SB=-1101.95	GT:AD:DP:GL:GQ	1/1:0,61:58:-235.88,-17.47,-0.01:99
-chr1	3761583	rs10909805	A	T	36.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.39;MQ0=0;OQ=1183.25;QD=32.87;SB=-378.79	GT:AD:DP:GL:GQ	1/1:0,36:34:-121.93,-10.24,-0.02:99
-chr1	3762135	rs4648348	G	T	313.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=2805.56;QD=36.44;SB=-1091.90	GT:AD:DP:GL:GQ	1/1:0,77:77:-284.17,-23.19,-0.03:99
-chr1	3762966	rs6424059	C	T	50.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1794.59;QD=39.88;SB=-207.77	GT:AD:DP:GL:GQ	1/1:0,45:45:-183.06,-13.56,-0.01:99
-chr1	3763112	rs6424060	C	A	1.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.94;MQ0=0;OQ=1225.37;QD=36.04;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,34:33:-126.13,-9.94,-0.01:99
-chr1	3763448	rs7542369	C	G	0.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=407.00;QD=27.13;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,15:12:-44.31,-3.64,-0.03:36.11
-chr1	3763578	rs4648428	A	G	5.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=286.53;QD=20.47;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:11:-32.26,-3.33,-0.02:33.05
-chr1	3764486	rs10909806	C	A	23.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=58.37;MQ0=0;OQ=1559.40;QD=35.44;SB=-546.78	GT:AD:DP:GL:GQ	1/1:0,44:43:-159.54,-12.95,-0.01:99
-chr1	3765314	rs4376673	C	G	417.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1404.99;QD=36.03;SB=-615.54	GT:AD:DP:GL:GQ	1/1:0,39:36:-144.12,-10.87,-0.03:99
-chr1	3765882	rs9786959	A	G	29.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=1920.48;QD=30.48;SB=-862.57	GT:AD:DP:GL:GQ	1/1:0,63:60:-195.68,-18.09,-0.05:99
-chr1	3767471	rs11800725	A	G	13.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.98;MQ0=0;OQ=1927.36;QD=30.11;SB=-765.33	GT:AD:DP:GL:GQ	1/1:0,64:61:-196.39,-18.41,-0.06:99
-chr1	3767577	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=17;HaplotypeScore=9.33;MQ=55.19;MQ0=0;OQ=73.00;QD=1.66;SB=10.79	GT:AD:DP:GL:GQ	0/1:33,10:33:-20.53,-9.94,-95.54:99
-chr1	3767595	.	G	A	13.29	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=17;HaplotypeScore=14.08;MQ=55.46;MQ0=0;QD=0.23;SB=74.24	GT:AD:DP:GL:GQ	0/1:47,10:46:-18.45,-13.86,-142.27:45.92
-chr1	3769011	rs4400555	C	T	258.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.08;MQ0=0;OQ=2381.95;QD=39.05;SB=-1005.83	GT:AD:DP:GL:GQ	1/1:0,61:61:-241.80,-18.38,-0.02:99
-chr1	3769497	rs4573474	G	C	208.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.06;MQ0=0;OQ=1909.70;QD=37.45;SB=-679.47	GT:AD:DP:GL:GQ	1/1:0,51:49:-194.60,-14.79,-0.05:99
-chr1	3769504	rs4475689	T	C	437.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.81;MQ0=0;OQ=1544.26;QD=28.60;SB=-549.88	GT:AD:DP:GL:GQ	1/1:0,54:50:-158.07,-15.09,-0.05:99
-chr1	3769540	rs4393098	C	T	134.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.73;MQ0=0;OQ=2714.04;QD=39.33;SB=-879.18	GT:AD:DP:GL:GQ	1/1:0,69:68:-275.01,-20.48,-0.02:99
-chr1	3770416	rs10909807	A	G	70.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.66;MQ0=0;OQ=2327.40;QD=34.23;SB=-632.25	GT:AD:DP:GL:GQ	1/1:0,68:65:-236.35,-19.58,-0.03:99
-chr1	3770956	rs10797348	C	A	725.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2194.69;QD=35.40;SB=-970.66	GT:AD:DP:GL:GQ	1/1:0,62:61:-223.07,-18.37,-0.02:99
-chr1	3770996	rs10752724	C	G	36.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.68;MQ0=0;OQ=3059.04;QD=41.90;SB=-884.77	GT:AD:DP:GL:GQ	1/1:0,73:70:-309.51,-21.10,-0.03:99
-chr1	3772468	rs10909809	C	T	66.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.41;MQ=58.92;MQ0=0;OQ=1387.22;QD=35.57;SB=-471.11	GT:AD:DP:GL:GQ	1/1:0,38:37:-142.33,-11.16,-0.02:99
-chr1	3773138	rs10909810	A	C	280.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.04;MQ0=0;OQ=955.91;QD=32.96;SB=-323.98	GT:AD:DP:GL:GQ	1/1:0,29:29:-99.19,-8.74,-0.02:87.21
-chr1	3773433	rs10797349	C	T	164.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=58.68;MQ0=0;OQ=1490.84;QD=33.88;SB=-752.63	GT:AD:DP:GL:GQ	1/1:0,44:39:-152.69,-11.75,-0.02:99
-chr1	3773480	rs10797350	T	C	13.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=58.30;MQ0=0;OQ=1471.72;QD=30.66;SB=-684.88	GT:AD:DP:GL:GQ	1/1:0,48:45:-150.79,-13.57,-0.03:99
-chr1	3773523	rs10752726	T	G	347.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1497.10;QD=33.27;SB=-446.81	GT:AD:DP:GL:GQ	1/1:0,45:43:-153.31,-12.95,-0.01:99
-chr1	3773611	rs12035912	C	T	197.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.30;MQ0=0;OQ=2493.51;QD=37.78;SB=-1130.03	GT:AD:DP:GL:GQ	1/1:0,66:64:-252.96,-19.28,-0.02:99
-chr1	3775032	.	T	C	552.80	SnpCluster	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=33.42;MQ=46.78;MQ0=0;QD=6.28;SB=-111.60	GT:AD:DP:GL:GQ	0/1:60,28:83:-83.58,-25.02,-222.80:99
-chr1	3775037	.	G	T	197.57	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=30.55;MQ=47.65;MQ0=0;QD=2.00;SB=65.19	GT:AD:DP:GL:GQ	0/1:82,15:90:-57.60,-34.56,-265.76:99
-chr1	3775038	rs11801559	A	G	304.07	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=1;HaplotypeScore=31.22;MQ=47.58;MQ0=0;QD=3.07;SB=-149.93	GT:AD:DP:GL:GQ	0/1:75,24:82:-58.40,-24.71,-264.98:99
-chr1	3775067	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=55.99;MQ=43.63;MQ0=2;OQ=741.54;QD=4.41;SB=-115.85	GT:AD:DP:GL:GQ	0/1:87,38:131:-206.86,-129.42,-352.70:99
-chr1	3775068	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=2;HaplotypeScore=57.14;MQ=43.69;MQ0=2;OQ=621.12;QD=3.63;SB=-22.34	GT:AD:DP:GL:GQ	0/1:130,41:133:-105.49,-40.09,-359.21:99
-chr1	3775097	.	C	T	202.73	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=156;Dels=0.02;HRun=0;HaplotypeScore=180.15;MQ=42.01;MQ0=2;QD=1.30;SB=-48.46	GT:AD:DP:GL:GQ	0/1:127,21:125:-62.81,-39.25,-356.59:99
-chr1	3775132	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=17.94;MQ=41.24;MQ0=3;OQ=65.49;QD=0.68;SB=-47.12	GT:AD:DP:GL:GQ	0/1:77,9:78:-49.90,-40.06,-295.84:98.32
-chr1	3779522	rs11581471	A	G	100.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.41;MQ0=0;OQ=1287.54;QD=29.26;SB=-667.82	GT:AD:DP:GL:GQ	1/1:0,44:42:-132.38,-12.67,-0.05:99
-chr1	3779990	rs12130391	G	A	164	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=2160.23;QD=35.41;SB=-916.74	GT:AD:DP:GL:GQ	1/1:0,60:57:-219.63,-17.18,-0.03:99
-chr1	3780767	.	T	C	4.63	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=30.96;MQ0=11;OQ=368.82;QD=6.36;SB=-104.61	GT:AD:DP:GL:GQ	0/1:34,24:38:-51.63,-11.46,-83.55:99
-chr1	3781074	rs10752727	C	T	2.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=7.70;MQ=37.12;MQ0=12;OQ=1286.15;QD=21.08;SB=-457.95	GT:AD:DP:GL:GQ	1/1:3,58:36:-135.18,-10.85,-2.98:78.66
-chr1	3783772	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=19;HaplotypeScore=32.14;MQ=55.75;MQ0=0;OQ=200.26;QD=4.01;SB=53.19	GT:AD:DP:GL:GQ	0/1:32,18:38:-34.76,-11.45,-99.41:99
-chr1	3784133	rs12132240	C	T	668.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.52;MQ0=0;OQ=2396.10;QD=39.93;SB=-998.03	GT:AD:DP:GL:GQ	1/1:0,60:60:-243.21,-18.07,-0.02:99
-chr1	3785251	rs10737189	T	C	42.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=59.45;MQ0=0;OQ=2617.88;QD=31.17;SB=-945.37	GT:AD:DP:GL:GQ	1/1:0,84:80:-265.43,-24.12,-0.06:99
-chr1	3786402	rs12071660	G	A	151.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2743.00;QD=38.63;SB=-1108.49	GT:AD:DP:GL:GQ	1/1:0,71:69:-277.90,-20.79,-0.02:99
-chr1	3787079	rs4074710	T	C	1.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=9.84;MQ=58.78;MQ0=0;OQ=1684.95;QD=27.18;SB=-797.66	GT:AD:DP:GL:GQ	1/1:2,60:56:-176.09,-16.89,-4.01:99
-chr1	3787169	rs61768959	C	T	435.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1824.58;QD=38.82;SB=-789.07	GT:AD:DP:GL:GQ	1/1:0,47:46:-186.05,-13.86,-0.01:99
-chr1	3787855	rs4073324	C	T	458.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1383.49;QD=37.39;SB=-414.06	GT:AD:DP:GL:GQ	1/1:0,37:37:-141.95,-11.15,-0.02:99
-chr1	3787909	rs4073323	A	G	2.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.99;MQ=59.35;MQ0=0;OQ=1345.64;QD=32.04;SB=-424.45	GT:AD:DP:GL:GQ	1/1:0,42:40:-138.17,-12.05,-0.02:99
-chr1	3788260	rs12084944	C	T	298.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=888.25;QD=37.01;SB=-436.08	GT:AD:DP:GL:GQ	1/1:0,24:23:-92.42,-6.93,-0.01:69.22
-chr1	3788534	rs12030906	T	C	0.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.02;HRun=0;HaplotypeScore=9.00;MQ=56.58;MQ0=0;OQ=1607.45;QD=29.23;SB=-436.47	GT:AD:DP:GL:GQ	1/1:0,54:48:-164.35,-14.16,-0.02:99
-chr1	3789424	rs4382652	G	A	2153.41	Indel	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.66;MQ=56.10;MQ0=0;QD=35.30;SB=-1010.66	GT:AD:DP:GL:GQ	1/1:0,61:57:-218.95,-17.18,-0.03:99
-chr1	3790102	rs3205087	A	G	382.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.28;MQ0=0;OQ=1027.83;QD=26.35;SB=-300.09	GT:AD:DP:GL:GQ	1/1:0,39:35:-106.42,-10.57,-0.05:99
-chr1	3790340	rs7555538	G	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=8;HaplotypeScore=0.92;MQ=59.43;MQ0=0;OQ=2444.86;QD=33.49;SB=-1058.90	GT:AD:DP:GL:GQ	1/1:0,73:70:-248.10,-21.09,-0.03:99
-chr1	3791107	rs10909817	T	G	151.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=57.75;MQ0=0;OQ=1681.31;QD=32.33;SB=-830.07	GT:AD:DP:GL:GQ	1/1:0,51:49:-171.73,-14.76,-0.02:99
-chr1	3792631	rs11584721	G	C	5.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=5.57;MQ=57.48;MQ0=0;OQ=2243.27;QD=40.06;SB=-1057.19	GT:AD:DP:GL:GQ	1/1:1,55:53:-227.93,-15.97,-0.02:99
-chr1	3793561	rs12136187	C	A	227.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.95;MQ0=0;OQ=1328.46;QD=34.06;SB=-683.01	GT:AD:DP:GL:GQ	1/1:0,39:37:-136.44,-11.15,-0.01:99
-chr1	3793615	rs7367066	T	C	611.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.19;MQ0=0;OQ=1618.23;QD=29.97;SB=-707.63	GT:AD:DP:GL:GQ	1/1:0,53:51:-165.45,-15.38,-0.04:99
-chr1	3795300	rs6678851	C	T	1.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=5.47;MQ=59.65;MQ0=0;OQ=2468.27;QD=37.97;SB=-809.33	GT:AD:DP:GL:GQ	1/1:0,65:63:-250.43,-18.98,-0.02:99
-chr1	3795934	rs4075974	G	A	558.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.49;MQ0=0;OQ=2140.67;QD=39.64;SB=-940.34	GT:AD:DP:GL:GQ	1/1:0,54:54:-217.66,-16.27,-0.01:99
-chr1	3796218	rs10909819	T	C	98.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.14;MQ0=0;OQ=2198.60;QD=32.33;SB=-948.97	GT:AD:DP:GL:GQ	1/1:0,68:64:-223.47,-19.28,-0.03:99
-chr1	3796503	rs4520357	T	A	245.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.09;MQ0=0;OQ=3186.37;QD=35.40;SB=-1505.31	GT:AD:DP:GL:GQ	1/1:0,90:85:-322.25,-25.60,-0.02:99
-chr1	3797453	rs4274008	G	C	114.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.65;MQ0=0;OQ=2739.80;QD=42.15;SB=-1186.93	GT:AD:DP:GL:GQ	1/1:0,65:64:-277.59,-19.29,-0.02:99
-chr1	3798031	rs6701422	T	C	38.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=51.74;MQ0=0;OQ=1832.37;QD=30.04;SB=-733.76	GT:AD:DP:GL:GQ	1/1:0,60:57:-186.87,-17.19,-0.05:99
-chr1	3798222	rs4446914	G	A	207.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=50.14;MQ0=0;OQ=2015.61;QD=38.03;SB=-988.99	GT:AD:DP:GL:GQ	1/1:0,53:52:-205.17,-15.67,-0.02:99
-chr1	3798375	.	A	G	51.46	PASS	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=16.12;MQ0=4;OQ=176.38;QD=13.57;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,13:6:-21.21,-1.81,-0.00:18.05
-chr1	3798911	rs12757258	A	C	37.05	LowQual	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.57;MQ0=1;QD=7.41;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,3:2:-7.11,-0.60,-0.00:6.02
-chr1	3798957	rs12757292	A	C	18.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.60;MQ0=1;OQ=75.37;QD=3.14;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,13:13:-14.74,-3.92,-26.95:99
-chr1	3799283	rs11807227	G	A	605.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.57;MQ0=0;OQ=2371.97;QD=38.88;SB=-744.48	GT:AD:DP:GL:GQ	1/1:0,61:60:-240.80,-18.08,-0.02:99
-chr1	3800246	rs4568776	A	G	199.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=2257.59;QD=31.80;SB=-934.52	GT:AD:DP:GL:GQ	1/1:0,71:68:-229.39,-20.50,-0.04:99
-chr1	3801063	rs7515869	A	T	278.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=61.08;MQ0=0;OQ=1948.49;QD=33.03;SB=-981.77	GT:AD:DP:GL:GQ	1/1:0,57:54:-198.46,-16.27,-0.03:99
-chr1	3801228	rs6674160	G	A	506.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.72;MQ0=0;OQ=1203.93;QD=37.62;SB=-496.15	GT:AD:DP:GL:GQ	1/1:0,32:32:-124.00,-9.65,-0.02:96.29
-chr1	3801965	rs10909822	A	C	705.90	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=42.43;MQ0=0;QD=30.69;SB=-332.99	GT:AD:DP:GL:GQ	1/1:1,22:22:-74.19,-6.63,-0.02:66.14
-chr1	3801968	.	T	A	440.70	SnpCluster	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=38.89;MQ0=0;QD=11.60;SB=-170.81	GT:AD:DP:GL:GQ	0/1:21,17:32:-56.99,-9.64,-61.90:99
-chr1	3801971	.	G	T	508.15	SnpCluster	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=35.42;MQ0=0;QD=14.52;SB=-198.56	GT:AD:DP:GL:GQ	0/1:17,18:35:-64.64,-10.54,-61.42:99
-chr1	3801978	.	G	C	1059.09	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.04;MQ0=0;QD=40.73;SB=-392.21	GT:AD:DP:GL:GQ	1/1:0,26:25:-109.50,-7.53,-0.01:75.25
-chr1	3802009	rs12133786	A	C	321.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.45;MQ0=0;OQ=1401.55;QD=33.37;SB=-709.03	GT:AD:DP:GL:GQ	1/1:0,42:41:-143.76,-12.35,-0.02:99
-chr1	3802570	rs10797352	T	C	148.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.68;MQ0=0;OQ=1740.38;QD=32.84;SB=-623.49	GT:AD:DP:GL:GQ	1/1:0,53:51:-177.65,-15.37,-0.03:99
-chr1	3802708	rs10797353	C	G	720.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2712.05;QD=38.74;SB=-1379.38	GT:AD:DP:GL:GQ	1/1:0,69:70:-279.01,-24.65,-4.23:99
-chr1	3804150	rs10797354	T	C	170.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.56;MQ0=0;OQ=1825.12;QD=32.59;SB=-712.23	GT:AD:DP:GL:GQ	1/1:0,56:54:-186.12,-16.27,-0.03:99
-chr1	3804602	rs6658198	T	C	302.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.62;MQ0=0;OQ=2079.20;QD=34.65;SB=-977.94	GT:AD:DP:GL:GQ	1/1:0,60:60:-211.53,-18.07,-0.02:99
-chr1	3806368	rs35131135	T	C	13.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=58.87;MQ0=0;OQ=1257.30;QD=30.67;SB=-415.16	GT:AD:DP:GL:GQ	1/1:0,40:36:-129.33,-10.85,-0.01:99
-chr1	3806714	rs61770363	G	A	10.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.71;MQ0=0;OQ=641.87;QD=35.66;SB=-278.65	GT:AD:DP:GL:GQ	1/1:0,18:18:-67.78,-5.43,-0.01:54.17
-chr1	3806753	rs4072725	C	T	77.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=544.23;QD=34.01;SB=-280.66	GT:AD:DP:GL:GQ	1/1:0,16:15:-58.01,-4.52,-0.01:45.14
-chr1	3808604	rs10797355	T	C	125.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=53.60;MQ0=1;OQ=2350.13;QD=34.56;SB=-914.68	GT:AD:DP:GL:GQ	1/1:0,68:66:-238.63,-19.89,-0.03:99
-chr1	3808731	rs10797356	G	A	43.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=58.71;MQ0=0;OQ=2012.52;QD=37.27;SB=-776.06	GT:AD:DP:GL:GQ	1/1:0,54:52:-204.86,-15.67,-0.02:99
-chr1	3809184	rs6672335	A	G	119.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.56;MQ0=0;OQ=1683.69;QD=31.77;SB=-530.84	GT:AD:DP:GL:GQ	1/1:0,53:48:-171.97,-14.46,-0.02:99
-chr1	3809865	rs10909828	G	A	654.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=2184.41;QD=38.32;SB=-826.35	GT:AD:DP:GL:GQ	1/1:0,57:56:-222.04,-16.87,-0.02:99
-chr1	3809876	rs12139857	G	C	137.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.22;MQ0=0;OQ=2518.12;QD=42.68;SB=-984.74	GT:AD:DP:GL:GQ	1/1:0,59:58:-255.41,-17.48,-0.02:99
-chr1	3811076	rs6687869	G	A	107.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.45;MQ0=0;OQ=1628.97;QD=38.79;SB=-568.34	GT:AD:DP:GL:GQ	1/1:0,42:42:-166.50,-12.65,-0.01:99
-chr1	3811194	rs10797357	G	A	521.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=1858.19;QD=37.92;SB=-535.68	GT:AD:DP:GL:GQ	1/1:0,49:48:-189.42,-14.46,-0.01:99
-chr1	3812563	rs10909830	C	T	206.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=58.81;MQ0=0;OQ=2305.91;QD=36.60;SB=-919.31	GT:AD:DP:GL:GQ	1/1:0,63:60:-234.20,-18.08,-0.02:99
-chr1	3812792	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=14.74;MQ=58.39;MQ0=0;OQ=154.04;QD=2.80;SB=80.30	GT:AD:DP:GL:GQ	0/1:43,12:42:-31.36,-12.67,-148.77:99
-chr1	3816486	rs35332894	A	G	12.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=58.25;MQ0=1;OQ=1726.98;QD=27.41;SB=-682.71	GT:AD:DP:GL:GQ	1/1:0,63:54:-176.33,-16.29,-0.05:99
-chr1	3817341	rs61770379	C	T	109.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.38;MQ0=0;OQ=1418.14;QD=38.33;SB=-728.97	GT:AD:DP:GL:GQ	1/1:0,37:36:-145.41,-10.84,-0.01:99
-chr1	3819020	rs34825671	C	T	409.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1564.33;QD=39.11;SB=-750.02	GT:AD:DP:GL:GQ	1/1:0,40:40:-160.03,-12.05,-0.01:99
-chr1	3819278	rs35368826	T	C	12.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=60.00;MQ0=0;OQ=1199.67;QD=27.90;SB=-424.22	GT:AD:DP:GL:GQ	1/1:0,43:38:-123.59,-11.46,-0.04:99
-chr1	3819474	rs35583447	A	G	89.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.69;MQ0=0;OQ=1939.06;QD=31.79;SB=-974.91	GT:AD:DP:GL:GQ	1/1:0,61:57:-197.52,-17.18,-0.03:99
-chr1	3819901	rs34284135	A	G	55.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=1296.25;QD=30.15;SB=-641.91	GT:AD:DP:GL:GQ	1/1:0,43:38:-133.23,-11.45,-0.02:99
-chr1	3820479	rs4073647	C	A	185.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.55;MQ0=0;OQ=1638.97;QD=32.14;SB=-804.86	GT:AD:DP:GL:GQ	1/1:0,51:47:-167.50,-14.16,-0.02:99
-chr1	3820963	rs35355307	G	A	127.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.69;MQ0=0;OQ=2262.75;QD=37.09;SB=-711.99	GT:AD:DP:GL:GQ	1/1:0,61:59:-229.89,-17.78,-0.03:99
-chr1	3821092	rs35241263	A	G	89.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.63;MQ0=0;OQ=1378.97;QD=27.04;SB=-599.21	GT:AD:DP:GL:GQ	1/1:0,51:45:-141.53,-13.58,-0.05:99
-chr1	3821416	rs34803434	G	A	80.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=58.07;MQ0=0;OQ=1633.32;QD=35.51;SB=-688.34	GT:AD:DP:GL:GQ	1/1:1,45:44:-166.94,-13.26,-0.02:99
-chr1	3823053	rs61770387	C	T	609.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2714.99;QD=39.35;SB=-1139.68	GT:AD:DP:GL:GQ	1/1:0,69:68:-275.10,-20.48,-0.02:99
-chr1	3823181	rs61770388	T	C	199.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.19;MQ0=0;OQ=1728.56;QD=33.24;SB=-864.04	GT:AD:DP:GL:GQ	1/1:0,52:50:-176.46,-15.06,-0.02:99
-chr1	3824979	rs61770390	T	C	82.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=55.31;MQ0=0;OQ=486.55;QD=7.85;SB=-261.22	GT:AD:DP:GL:GQ	0/1:37,25:59:-69.72,-17.78,-147.85:99
-chr1	3824990	.	C	T	3.46	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.66;MQ=55.46;MQ0=0;OQ=1251.91;QD=19.56;SB=-545.38	GT:AD:DP:GL:GQ	0/1:27,37:61:-146.86,-18.39,-82.02:99
-chr1	3825051	.	C	A	3.22	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=2;HaplotypeScore=3.18;MQ=58.29;MQ0=0;OQ=820.60;QD=11.56;SB=-414.89	GT:AD:DP:GL:GQ	0/1:42,29:71:-106.73,-21.38,-145.16:99
-chr1	3825054	.	T	C	10.09	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=58.08;MQ0=0;OQ=722.16;QD=10.47;SB=-351.97	GT:AD:DP:GL:GQ	0/1:40,28:65:-95.08,-19.58,-155.89:99
-chr1	3825324	rs61770392	A	T	88.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=57.20;MQ0=0;OQ=1894.97;QD=35.09;SB=-920.36	GT:AD:DP:GL:GQ	1/1:0,54:51:-193.10,-15.37,-0.02:99
-chr1	3827005	.	C	T	22.22	LowQual	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=43.17;MQ0=3;QD=1.48;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,3:9:-8.21,-2.71,-24.78:55.03
-chr1	3827011	.	C	T	25.21	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=2.11;MQ=38.99;MQ0=3;QD=1.80;SB=-10.00	GT:AD:DP:GL:GQ	0/1:12,2:8:-8.21,-2.41,-21.31:58.03
-chr1	3830505	rs35265992	A	G	0.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=4;HaplotypeScore=5.22;MQ=58.50;MQ0=0;OQ=970.90;QD=17.34;SB=-315.39	GT:AD:DP:GL:GQ	0/1:20,36:52:-116.04,-15.67,-75.68:99
-chr1	3830738	rs35974482	G	A	171.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=57.87;MQ0=0;OQ=551.40;QD=12.53;SB=-198.84	GT:AD:DP:GL:GQ	0/1:25,19:40:-70.48,-12.05,-78.52:99
-chr1	3830888	rs35314156	G	C	209.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.07;MQ0=0;OQ=668.40;QD=13.37;SB=-257.46	GT:AD:DP:GL:GQ	0/1:30,20:50:-85.20,-15.08,-125.99:99
-chr1	3831972	rs34835780	T	C	632.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.64;MQ0=0;OQ=2285.64;QD=35.16;SB=-1132.81	GT:AD:DP:GL:GQ	1/1:0,65:64:-232.17,-19.28,-0.02:99
-chr1	3833915	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=17.15;MQ=47.19;MQ0=1;OQ=288.77;QD=3.66;SB=-113.05	GT:AD:DP:GL:GQ	0/1:64,15:78:-55.66,-23.49,-226.25:99
-chr1	3895148	.	C	A	18	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=35.10;MQ0=1;OQ=333.31;QD=9.80;SB=-100.81	GT:AD:DP:GL:GQ	0/1:15,18:23:-43.54,-6.93,-34.49:99
-chr1	3895632	.	G	A	3.06	PASS	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=4;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=959.16;QD=14.11;SB=-372.32	GT:AD:DP:GL:GQ	0/1:38,30:68:-119.69,-20.49,-137.83:99
-chr1	3895766	rs61770398	T	C	202.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=59.18;MQ0=0;OQ=960.24;QD=12.98;SB=-389.21	GT:AD:DP:GL:GQ	0/1:40,34:73:-121.30,-21.99,-162.55:99
-chr1	3899769	.	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=8.09;MQ=59.49;MQ0=0;OQ=340.78;QD=7.57;SB=47.18	GT:AD:DP:GL:GQ	0/1:26,19:34:-47.63,-10.27,-85.91:99
-chr1	3902626	rs12073174	A	G	196.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.14;MQ0=0;OQ=542.74;QD=11.31;SB=-148.64	GT:AD:DP:GL:GQ	0/1:27,21:46:-71.41,-13.85,-105.98:99
-chr1	3902680	rs61770400	C	T	70.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=59.24;MQ0=0;OQ=954.92;QD=15.65;SB=-346.04	GT:AD:DP:GL:GQ	0/1:29,32:59:-116.56,-17.78,-99.06:99
-chr1	3903888	.	C	T	983.33	SnpCluster	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.15;MQ0=0;QD=17.88;SB=-501.10	GT:AD:DP:GL:GQ	0/1:24,31:52:-117.28,-15.67,-81.69:99
-chr1	3903897	rs12076404	C	T	1044.63	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.20;MQ0=0;QD=18.01;SB=-538.06	GT:AD:DP:GL:GQ	0/1:25,33:54:-124.01,-16.27,-82.66:99
-chr1	3903898	.	G	A	621.65	SnpCluster	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.17;MQ0=0;QD=11.10;SB=-272.76	GT:AD:DP:GL:GQ	0/1:33,23:52:-81.12,-15.67,-110.15:99
-chr1	3904122	.	C	T	64.01	PASS	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=58.92;MQ0=0;OQ=1312.00;QD=16.00;SB=-449.98	GT:AD:DP:GL:GQ	0/1:43,39:81:-158.89,-24.40,-148.69:99
-chr1	3904123	rs7518198	G	A	275.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=58.92;MQ0=0;OQ=1318.95;QD=16.08;SB=-404.76	GT:AD:DP:GL:GQ	0/1:38,44:78:-158.67,-23.50,-132.87:99
-chr1	3904259	rs55651676	C	G	11.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=58.80;MQ0=0;OQ=719.49;QD=18.45;SB=-354.47	GT:AD:DP:GL:GQ	0/1:17,22:35:-85.79,-10.56,-59.36:99
-chr1	3904673	rs56300127	T	C	189.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.07;MQ0=0;OQ=384.21;QD=11.30;SB=-194.60	GT:AD:DP:GL:GQ	0/1:17,17:31:-51.05,-9.34,-58.99:99
-chr1	3905021	rs10915614	A	G	3.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.21;MQ=59.48;MQ0=0;OQ=428.89;QD=9.75;SB=-152.44	GT:AD:DP:GL:GQ	0/1:24,19:41:-58.53,-12.36,-93.35:99
-chr1	3905038	.	G	A	50.50	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.41;MQ0=0;OQ=477.39;QD=12.24;SB=-188.87	GT:AD:DP:GL:GQ	0/1:22,17:37:-62.18,-11.16,-67.50:99
-chr1	3905246	.	C	T	93.17	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=58.57;MQ0=0;OQ=1011.86;QD=16.32;SB=-440.98	GT:AD:DP:GL:GQ	0/1:30,32:58:-121.96,-17.49,-85.78:99
-chr1	3905920	rs7548668	T	C	26.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=6.64;MQ=59.57;MQ0=0;OQ=666.76;QD=12.35;SB=-179.62	GT:AD:DP:GL:GQ	0/1:27,27:46:-83.82,-13.86,-87.80:99
-chr1	3906227	rs9793287	T	C	337.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=444.12;QD=9.25;SB=-215.36	GT:AD:DP:GL:GQ	0/1:27,21:46:-61.57,-13.87,-101.57:99
-chr1	3906248	rs12562706	C	A	152.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.59;MQ0=0;OQ=415.45;QD=9.23;SB=-231.91	GT:AD:DP:GL:GQ	0/1:25,20:41:-57.18,-12.35,-86.80:99
-chr1	3906531	rs7526903	G	A	280.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=909.30;QD=17.83;SB=-442.97	GT:AD:DP:GL:GQ	0/1:23,27:47:-108.38,-14.16,-65.40:99
-chr1	3906648	rs7551771	C	T	37.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=60.06;MQ0=0;OQ=776.93;QD=15.54;SB=-354.36	GT:AD:DP:GL:GQ	0/1:26,24:48:-95.43,-14.46,-92.96:99
-chr1	3906868	rs7519349	A	G	578.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=764.11;QD=13.64;SB=-362.95	GT:AD:DP:GL:GQ	0/1:26,30:56:-96.58,-16.88,-105.57:99
-chr1	3906970	rs7519458	A	G	232.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=762.22;QD=13.14;SB=-199.60	GT:AD:DP:GL:GQ	0/1:26,31:57:-96.69,-17.19,-106.25:99
-chr1	3907888	rs10799162	T	C	190.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=58.79;MQ0=0;OQ=719.58;QD=13.33;SB=-230.44	GT:AD:DP:GL:GQ	0/1:27,27:53:-91.22,-15.97,-102.46:99
-chr1	3907889	rs10799163	G	T	86.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=58.79;MQ0=0;OQ=758.50;QD=14.05;SB=-193.54	GT:AD:DP:GL:GQ	0/1:27,26:51:-94.50,-15.37,-86.70:99
-chr1	3907912	rs10915345	G	A	203.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=59.62;MQ0=0;OQ=1037.45;QD=17.01;SB=-258.26	GT:AD:DP:GL:GQ	0/1:29,32:57:-124.21,-17.18,-83.11:99
-chr1	3909896	rs6683165	G	A	201.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=59.62;MQ0=0;OQ=837.44;QD=12.88;SB=-252.13	GT:AD:DP:GL:GQ	0/1:38,27:62:-105.71,-18.68,-120.77:99
-chr1	3910104	rs10799194	C	T	90.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.69;MQ=60.00;MQ0=0;OQ=794.06;QD=13.23;SB=-418.44	GT:AD:DP:GL:GQ	0/1:34,26:57:-99.88,-17.19,-98.75:99
-chr1	3919557	rs9426474	A	G	111.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=1753.83;QD=29.73;SB=-828.62	GT:AD:DP:GL:GQ	1/1:0,59:55:-179.01,-16.59,-0.05:99
-chr1	3922104	rs9426475	T	C	209.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=54.82;MQ0=0;OQ=1570.14;QD=28.55;SB=-720.64	GT:AD:DP:GL:GQ	1/1:0,55:50:-160.65,-15.09,-0.06:99
-chr1	3922325	rs10915469	T	C	562.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1863.57;QD=28.24;SB=-798.65	GT:AD:DP:GL:GQ	1/1:0,66:58:-189.99,-17.49,-0.05:99
-chr1	3922572	rs7540846	C	T	41.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.57;MQ=53.34;MQ0=0;OQ=2905.34;QD=34.59;SB=-1359.03	GT:AD:DP:GL:GQ	1/1:0,81:75:-294.15,-22.60,-0.03:99
-chr1	3922839	rs7516192	G	C	540.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=2588.44;QD=42.43;SB=-1244.89	GT:AD:DP:GL:GQ	1/1:0,61:60:-262.44,-18.08,-0.02:99
-chr1	3922855	rs9426476	A	G	185.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=58.63;MQ0=0;OQ=2064.09;QD=34.40;SB=-842.35	GT:AD:DP:GL:GQ	1/1:0,60:58:-210.01,-17.47,-0.02:99
-chr1	3922974	rs7541241	C	A	552.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=1520.98;QD=33.80;SB=-673.30	GT:AD:DP:GL:GQ	1/1:0,45:44:-155.71,-13.26,-0.03:99
-chr1	3923246	rs9426498	T	C	9.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=52.33;MQ0=0;OQ=1450.84;QD=25.91;SB=-720.70	GT:AD:DP:GL:GQ	1/1:0,56:46:-148.71,-13.88,-0.05:99
-chr1	3923458	rs9426499	A	C	507.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1349.47;QD=30.67;SB=-364.89	GT:AD:DP:GL:GQ	1/1:0,44:42:-138.57,-12.66,-0.04:99
-chr1	3923596	rs9426477	A	G	619.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2188.14;QD=34.73;SB=-945.36	GT:AD:DP:GL:GQ	1/1:0,63:61:-222.42,-18.37,-0.02:99
-chr1	3923941	rs6698811	T	C	664.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2773.83;QD=33.83;SB=-1404.50	GT:AD:DP:GL:GQ	1/1:0,82:80:-281.00,-24.10,-0.03:99
-chr1	3936055	rs10753378	T	C	376.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.51;MQ0=0;OQ=543.43;QD=11.56;SB=-218.27	GT:AD:DP:GL:GQ	0/1:23,24:45:-71.19,-13.57,-90.09:99
-chr1	3938219	.	C	T	61.19	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.45;MQ=59.60;MQ0=0;OQ=740.10;QD=12.76;SB=-319.83	GT:AD:DP:GL:GQ	0/1:30,28:53:-93.28,-15.99,-88.25:99
-chr1	3940015	rs4654525	C	T	311.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.10;MQ0=0;OQ=1004.75;QD=15.00;SB=-479.00	GT:AD:DP:GL:GQ	0/1:36,31:66:-123.64,-19.88,-133.78:99
-chr1	3942839	rs60972376	A	C	11.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.30;MQ=58.67;MQ0=0;OQ=585.81;QD=11.96;SB=-197.90	GT:AD:DP:GL:GQ	0/1:20,28:43:-74.82,-12.96,-73.58:99
-chr1	3942909	rs55887893	C	T	197.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=60.00;MQ0=0;OQ=588.30;QD=11.77;SB=-314.85	GT:AD:DP:GL:GQ	0/1:29,21:47:-76.28,-14.17,-92.23:99
-chr1	3944651	rs59118111	G	C	246.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=60.00;MQ0=0;OQ=1068.67;QD=16.44;SB=-449.44	GT:AD:DP:GL:GQ	0/1:32,33:64:-129.45,-19.30,-140.55:99
-chr1	3945187	rs4654538	G	A	29.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=58.81;MQ0=0;OQ=1094.72;QD=19.90;SB=-430.80	GT:AD:DP:GL:GQ	0/1:23,32:55:-129.32,-16.57,-83.23:99
-chr1	3947137	rs4654543	T	C	110.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=382.96;QD=9.82;SB=-135.53	GT:AD:DP:GL:GQ	0/1:21,18:38:-53.04,-11.46,-84.39:99
-chr1	3947479	rs10449244	C	A	197.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=744.81;QD=13.07;SB=-230.89	GT:AD:DP:GL:GQ	0/1:29,28:53:-93.73,-15.97,-94.52:99
-chr1	3948534	rs4654544	A	G	534.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=551.19;QD=12.53;SB=-251.96	GT:AD:DP:GL:GQ	0/1:21,23:44:-71.67,-13.27,-84.12:99
-chr1	3949636	rs4654436	T	C	195.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=59.16;MQ0=0;OQ=834.97;QD=11.60;SB=-298.88	GT:AD:DP:GL:GQ	0/1:38,34:66:-106.67,-19.89,-140.32:99
-chr1	3949646	rs6426416	A	T	32.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=2.47;MQ=59.20;MQ0=0;OQ=1168.58;QD=15.38;SB=-401.17	GT:AD:DP:GL:GQ	0/1:38,38:72:-141.84,-21.70,-126.75:99
-chr1	3950380	.	A	G	266.35	PASS	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1356.42;QD=15.96;SB=-652.62	GT:AD:DP:GL:GQ	0/1:40,45:85:-164.53,-25.60,-164.89:99
-chr1	3950813	rs10737411	A	G	175.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=1;HaplotypeScore=2.09;MQ=59.83;MQ0=0;OQ=1386.28;QD=12.84;SB=-502.53	GT:AD:DP:GL:GQ	0/1:55,53:107:-174.15,-32.24,-226.13:99
-chr1	3951883	rs6657331	G	C	1.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=59.14;MQ0=0;OQ=976.24;QD=22.70;SB=-437.36	GT:AD:DP:GL:GQ	0/1:16,27:40:-112.97,-12.06,-59.28:99
-chr1	3951915	rs12145443	C	T	0.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=58.72;MQ0=0;OQ=829.82;QD=21.84;SB=-313.85	GT:AD:DP:GL:GQ	0/1:13,25:37:-97.41,-11.15,-45.43:99
-chr1	3952816	rs10799236	A	G	574.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=747.27;QD=14.10;SB=-330.89	GT:AD:DP:GL:GQ	0/1:27,26:52:-93.67,-15.66,-106.05:99
-chr1	3953295	rs12038964	T	C	361.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.86;MQ0=0;OQ=750.82;QD=12.31;SB=-348.04	GT:AD:DP:GL:GQ	0/1:30,31:60:-96.45,-18.08,-120.40:99
-chr1	3953370	rs12040628	A	G	147.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=59.55;MQ0=0;OQ=749.75;QD=14.70;SB=-277.27	GT:AD:DP:GL:GQ	0/1:21,30:49:-93.03,-14.77,-83.59:99
-chr1	3954832	rs9426500	A	C	437.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=970.97;QD=16.46;SB=-363.09	GT:AD:DP:GL:GQ	0/1:25,34:59:-118.15,-17.77,-92.14:99
-chr1	3955140	rs7413013	G	C	5.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=59.17;MQ0=0;OQ=1282.99;QD=22.91;SB=-362.10	GT:AD:DP:GL:GQ	0/1:21,35:56:-148.46,-16.87,-92.34:99
-chr1	3955487	rs9426501	T	C	61.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.29;MQ=58.95;MQ0=0;OQ=1025.38;QD=16.54;SB=-268.62	GT:AD:DP:GL:GQ	0/1:26,36:60:-123.90,-18.08,-97.56:99
-chr1	3956324	rs28609919	G	C	274.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.69;MQ0=0;OQ=890.13;QD=14.84;SB=-464.74	GT:AD:DP:GL:GQ	0/1:33,27:59:-110.08,-17.78,-139.21:99
-chr1	3957249	rs12756251	G	A	25.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=3.32;MQ=59.14;MQ0=0;OQ=1510.62;QD=18.65;SB=-581.41	GT:AD:DP:GL:GQ	0/1:36,45:78:-177.84,-23.50,-121.43:99
-chr1	3957262	rs12733769	T	A	184.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.13;MQ0=0;OQ=1410.63;QD=17.63;SB=-590.40	GT:AD:DP:GL:GQ	0/1:34,46:77:-167.55,-23.20,-118.80:99
-chr1	3957348	rs12135298	A	G	336.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.25;MQ0=0;OQ=781.36;QD=12.21;SB=-403.89	GT:AD:DP:GL:GQ	0/1:34,30:63:-100.41,-18.99,-132.61:99
-chr1	3959579	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=7.87;MQ=33.13;MQ0=5;OQ=83.58;QD=1.58;SB=-67.89	GT:AD:DP:GL:GQ	0/1:44,9:38:-23.11,-11.47,-97.21:99
-chr1	3959589	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=8.30;MQ=33.13;MQ0=5;OQ=210.60;QD=3.76;SB=-42.01	GT:AD:DP:GL:GQ	0/1:42,14:42:-37.00,-12.66,-114.99:99
-chr1	3959610	rs4654559	T	C	0.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=19.50;MQ=38.33;MQ0=4;OQ=745.10;QD=13.55;SB=-325.28	GT:AD:DP:GL:GQ	0/1:20,35:43:-90.76,-12.97,-56.11:99
-chr1	3959618	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=40.78;MQ0=4;OQ=377.28;QD=6.50;SB=-163.72	GT:AD:DP:GL:GQ	0/1:35,17:42:-66.15,-25.14,-90.45:99
-chr1	3959638	rs12137425	A	G	6.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=49.20;MQ0=1;OQ=205.57;QD=4.28;SB=-109.83	GT:AD:DP:GL:GQ	0/1:33,15:40:-35.90,-12.06,-107.08:99
-chr1	3959766	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=11.71;MQ=40.06;MQ0=2;OQ=205.60;QD=3.54;SB=-53.76	GT:AD:DP:GL:GQ	0/1:44,14:49:-38.61,-14.76,-139.54:99
-chr1	3959787	rs11807610	T	C	0.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=13.45;MQ=43.41;MQ0=2;OQ=585.11;QD=10.45;SB=-259.35	GT:AD:DP:GL:GQ	0/1:22,34:43:-74.76,-12.96,-79.59:99
-chr1	3959815	rs10915563	A	G	47.44	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=13.21;MQ=50.51;MQ0=1;QD=0.72;SB=62.23	GT:AD:DP:GL:GQ	0/1:56,10:52:-23.70,-15.67,-173.58:80.28
-chr1	3959825	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=18.02;MQ=51.36;MQ0=1;OQ=581.75;QD=8.19;SB=-258.36	GT:AD:DP:GL:GQ	0/1:43,28:61:-79.84,-18.38,-149.14:99
-chr1	3959826	.	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=9.14;MQ=50.86;MQ0=1;OQ=291.12;QD=3.93;SB=-139.48	GT:AD:DP:GL:GQ	0/1:51,23:56:-49.27,-16.88,-163.75:99
-chr1	3959854	rs10799245	C	A	521.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.17;MQ0=0;OQ=879.17;QD=14.65;SB=-268.32	GT:AD:DP:GL:GQ	0/1:29,31:55:-107.78,-16.58,-78.49:99
-chr1	3961215	rs6670453	G	C	331.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.13;MQ0=0;OQ=833.59;QD=15.73;SB=-292.89	GT:AD:DP:GL:GQ	0/1:29,24:53:-102.62,-15.98,-127.58:99
-chr1	3961230	rs6672877	G	T	118.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=59.07;MQ0=0;OQ=633.10;QD=12.66;SB=-213.34	GT:AD:DP:GL:GQ	0/1:27,23:49:-81.35,-14.76,-89.22:99
-chr1	3961237	rs12045715	G	A	510.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=793.63;QD=15.56;SB=-285.83	GT:AD:DP:GL:GQ	0/1:26,25:51:-98.03,-15.38,-79.59:99
-chr1	3961468	rs12045781	G	A	286.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=60.00;MQ0=0;OQ=606.20;QD=13.78;SB=-238.18	GT:AD:DP:GL:GQ	0/1:24,20:42:-76.57,-12.66,-72.65:99
-chr1	3961548	rs10799247	A	G	169.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=58.33;MQ0=0;OQ=674.03;QD=12.04;SB=-151.92	GT:AD:DP:GL:GQ	0/1:31,24:52:-86.36,-15.67,-108.75:99
-chr1	3962010	rs4654565	G	A	105.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=336.97;QD=12.96;SB=-103.61	GT:AD:DP:GL:GQ	0/1:14,12:25:-44.52,-7.54,-43.04:99
-chr1	3962589	rs4654447	A	G	258.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.65;MQ0=0;OQ=712.70;QD=13.45;SB=-356.22	GT:AD:DP:GL:GQ	0/1:26,27:50:-89.62,-15.07,-95.62:99
-chr1	3962703	rs4654448	A	C	265.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=756.85;QD=13.52;SB=-251.86	GT:AD:DP:GL:GQ	0/1:29,27:55:-95.53,-16.56,-103.20:99
-chr1	3962856	rs4654567	T	C	95.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=59.17;MQ0=0;OQ=415.90;QD=9.24;SB=-159.46	GT:AD:DP:GL:GQ	0/1:25,20:42:-57.53,-12.66,-94.60:99
-chr1	3962899	rs4654449	G	A	419.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=60.00;MQ0=0;OQ=648.86;QD=14.75;SB=-335.88	GT:AD:DP:GL:GQ	0/1:22,22:42:-80.82,-12.65,-78.42:99
-chr1	3963307	rs7520607	T	C	230.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=58.42;MQ0=0;OQ=845.59;QD=14.58;SB=-424.34	GT:AD:DP:GL:GQ	0/1:26,32:53:-103.81,-15.97,-95.34:99
-chr1	3963607	rs4654568	T	G	463.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.07;MQ0=0;OQ=931.94;QD=16.64;SB=-413.80	GT:AD:DP:GL:GQ	0/1:24,32:56:-113.34,-16.87,-88.78:99
-chr1	3963626	rs12027462	C	T	248.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=57.57;MQ0=0;OQ=963.52;QD=17.21;SB=-429.93	GT:AD:DP:GL:GQ	0/1:26,30:55:-116.20,-16.57,-93.29:99
-chr1	3963784	rs4654451	G	A	171.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.79;MQ0=0;OQ=912.02;QD=16.00;SB=-225.51	GT:AD:DP:GL:GQ	0/1:28,28:53:-110.46,-15.98,-78.09:99
-chr1	3964643	rs6426429	A	G	60.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.27;MQ=59.56;MQ0=0;OQ=582.81;QD=11.00;SB=-285.59	GT:AD:DP:GL:GQ	0/1:28,25:51:-76.94,-15.38,-106.26:99
-chr1	3965132	rs4074993	C	G	325.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.87;MQ=59.28;MQ0=0;OQ=814.87;QD=14.05;SB=-345.07	GT:AD:DP:GL:GQ	0/1:34,24:55:-101.37,-16.60,-121.74:99
-chr1	3965479	rs4074994	T	C	268.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=52.28;MQ0=0;OQ=617.78;QD=12.36;SB=-300.36	GT:AD:DP:GL:GQ	0/1:25,25:49:-79.83,-14.77,-98.86:99
-chr1	3965536	rs57323923	T	C	0.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=2.11;MQ=50.55;MQ0=0;OQ=424.15;QD=8.48;SB=-173.38	GT:AD:DP:GL:GQ	0/1:29,21:47:-59.86,-14.17,-115.12:99
-chr1	3965975	.	C	G	7.70	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.67;MQ0=0;OQ=589.92;QD=12.04;SB=-25.38	GT:AD:DP:GL:GQ	0/1:32,17:46:-76.14,-13.87,-119.93:99
-chr1	3965977	.	T	C	0.69	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=58.22;MQ0=0;OQ=427.57;QD=8.55;SB=-16.87	GT:AD:DP:GL:GQ	0/1:33,17:49:-60.80,-14.76,-127.29:99
-chr1	3966027	rs7414863	A	C	144.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.13;MQ0=0;OQ=452.26;QD=9.42;SB=-62.85	GT:AD:DP:GL:GQ	0/1:27,21:45:-62.07,-13.56,-92.65:99
-chr1	3966540	rs3935559	C	G	391.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=1031.71;QD=18.42;SB=-312.99	GT:AD:DP:GL:GQ	0/1:24,32:56:-123.36,-16.90,-103.47:99
-chr1	3966816	.	G	A	1.68	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=5.13;MQ=57.97;MQ0=0;OQ=1415.89;QD=20.52;SB=-484.12	GT:AD:DP:GL:GQ	0/1:24,45:61:-163.26,-18.38,-64.39:99
-chr1	3967294	rs12747294	C	T	4.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=8.87;MQ=56.15;MQ0=1;OQ=813.80;QD=16.95;SB=-391.14	GT:AD:DP:GL:GQ	0/1:22,26:45:-98.22,-13.56,-71.93:99
-chr1	3967372	rs6702213	C	T	194.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=34.49;MQ0=0;OQ=718.26;QD=12.17;SB=-239.54	GT:AD:DP:GL:GQ	0/1:33,26:54:-91.39,-16.28,-98.59:99
-chr1	3967404	rs6661264	T	C	167.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=40.81;MQ0=0;OQ=475.36;QD=8.80;SB=-244.91	GT:AD:DP:GL:GQ	0/1:34,20:52:-66.49,-15.67,-131.05:99
-chr1	3967405	rs6675434	G	A	377.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.63;MQ0=0;OQ=533.67;QD=9.70;SB=-290.77	GT:AD:DP:GL:GQ	0/1:34,21:52:-72.31,-15.66,-122.28:99
-chr1	3967434	rs12747604	C	T	38.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=46.12;MQ0=0;OQ=331.44;QD=7.71;SB=-108.07	GT:AD:DP:GL:GQ	0/1:29,14:41:-48.79,-12.36,-91.55:99
-chr1	3967444	rs56081307	C	A	64.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=45.65;MQ0=0;OQ=391.03;QD=8.32;SB=-188.48	GT:AD:DP:GL:GQ	0/1:31,16:44:-55.64,-13.25,-103.38:99
-chr1	3967458	rs6661363	T	C	158.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=46.22;MQ0=0;OQ=383.22;QD=7.82;SB=-172.51	GT:AD:DP:GL:GQ	0/1:29,19:44:-54.87,-13.26,-104.62:99
-chr1	3967912	rs6675979	G	A	278.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=58.64;MQ0=0;OQ=1206.49;QD=19.46;SB=-623.12	GT:AD:DP:GL:GQ	0/1:25,37:60:-142.02,-18.08,-76.63:99
-chr1	3968006	rs12731145	A	G	28.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.76;MQ=59.49;MQ0=0;OQ=439.53;QD=9.77;SB=-228.43	GT:AD:DP:GL:GQ	0/1:27,18:43:-60.19,-12.95,-105.51:99
-chr1	3968073	rs6426431	G	A	223.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=59.56;MQ0=0;OQ=482.88;QD=9.29;SB=-221.45	GT:AD:DP:GL:GQ	0/1:34,18:50:-66.64,-15.07,-119.13:99
-chr1	3968105	rs12744667	G	A	365.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.56;MQ0=0;OQ=827.90;QD=15.62;SB=-433.93	GT:AD:DP:GL:GQ	0/1:27,26:51:-101.44,-15.36,-92.63:99
-chr1	3968106	rs55866108	A	G	217.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.57;MQ0=0;OQ=738.88;QD=13.68;SB=-284.42	GT:AD:DP:GL:GQ	0/1:27,27:53:-93.14,-15.96,-108.96:99
-chr1	3968537	rs12753281	C	G	269.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.90;MQ0=0;OQ=1244.08;QD=14.99;SB=-559.96	GT:AD:DP:GL:GQ	0/1:45,38:83:-152.72,-25.03,-193.42:99
-chr1	3968581	rs12736036	A	G	78.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.15;MQ=57.56;MQ0=0;OQ=949.82;QD=11.58;SB=-430.05	GT:AD:DP:GL:GQ	0/1:44,38:77:-121.46,-23.19,-177.75:99
-chr1	3968726	rs34940664	G	T	190.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.33;MQ0=0;OQ=1575.63;QD=16.24;SB=-709.50	GT:AD:DP:GL:GQ	0/1:45,52:96:-189.76,-28.91,-164.22:99
-chr1	3968753	rs35749996	A	G	455.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1487.59;QD=17.92;SB=-656.99	GT:AD:DP:GL:GQ	0/1:35,48:83:-177.04,-25.00,-145.40:99
-chr1	3968768	rs12753644	C	G	340.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=1876.77;QD=20.85;SB=-779.42	GT:AD:DP:GL:GQ	0/1:40,50:90:-218.08,-27.12,-169.27:99
-chr1	3968858	rs12045134	A	C	23.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=5.51;MQ=58.42;MQ0=0;OQ=708.96;QD=8.54;SB=-321.59	GT:AD:DP:GL:GQ	0/1:52,31:81:-98.58,-24.40,-189.89:99
-chr1	3968949	rs12047590	G	T	243.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.74;MQ0=0;OQ=980.09;QD=13.61;SB=-395.21	GT:AD:DP:GL:GQ	0/1:39,33:71:-122.68,-21.39,-124.97:99
-chr1	3969008	rs12027284	C	T	226.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.68;MQ0=0;OQ=1351.13;QD=18.77;SB=-463.00	GT:AD:DP:GL:GQ	0/1:32,40:69:-159.19,-20.80,-95.94:99
-chr1	3969221	rs12045225	A	G	0.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=9.56;MQ=58.22;MQ0=0;OQ=654.37;QD=13.09;SB=-95.63	GT:AD:DP:GL:GQ	0/1:21,29:44:-81.99,-13.27,-67.60:99
-chr1	3969391	rs12046014	A	G	106.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=58.95;MQ0=0;OQ=580.96;QD=9.37;SB=-244.16	GT:AD:DP:GL:GQ	0/1:36,26:57:-78.56,-17.18,-134.21:99
-chr1	3969440	rs12044268	T	C	521.33	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.87;MQ0=0;QD=12.72;SB=-263.94	GT:AD:DP:GL:GQ	0/1:19,21:40:-67.48,-12.06,-76.36:99
-chr1	3969444	rs12048464	G	T	535.50	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.71;MQ0=0;QD=14.88;SB=-256.96	GT:AD:DP:GL:GQ	0/1:18,18:36:-67.68,-10.85,-54.15:99
-chr1	3969450	rs34283588	G	A	563.46	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.55;MQ0=0;QD=17.61;SB=-257.77	GT:AD:DP:GL:GQ	0/1:15,17:30:-68.67,-9.04,-41.92:99
-chr1	3969504	rs12028147	C	A	128.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.50;MQ0=0;OQ=1173.33;QD=18.92;SB=-401.82	GT:AD:DP:GL:GQ	0/1:25,37:62:-139.29,-18.67,-88.93:99
-chr1	3969731	rs35514116	C	A	193.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=2.36;MQ=59.11;MQ0=0;OQ=1169.40;QD=14.99;SB=-425.64	GT:AD:DP:GL:GQ	0/1:38,39:78:-146.50,-26.28,-138.29:99
-chr1	3969738	rs35902612	G	T	87.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.60;MQ=59.14;MQ0=0;OQ=1314.22;QD=16.22;SB=-492.89	GT:AD:DP:GL:GQ	0/1:38,43:80:-158.80,-24.09,-135.14:99
-chr1	3969835	rs34306433	G	C	322.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1225.99;QD=18.03;SB=-578.33	GT:AD:DP:GL:GQ	0/1:31,36:68:-148.71,-22.83,-138.52:99
-chr1	3970192	rs34458454	T	C	115.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=60.00;MQ0=0;OQ=393.81;QD=8.04;SB=-222.38	GT:AD:DP:GL:GQ	0/1:28,21:43:-55.63,-12.97,-98.60:99
-chr1	3970255	rs34994381	G	A	356.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1045.77;QD=16.09;SB=-475.47	GT:AD:DP:GL:GQ	0/1:34,31:61:-126.25,-18.39,-98.09:99
-chr1	3970431	rs35579324	A	T	318.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.56;MQ0=0;OQ=768.67;QD=14.78;SB=-345.07	GT:AD:DP:GL:GQ	0/1:26,26:52:-95.82,-15.67,-98.48:99
-chr1	3970448	rs35474759	C	T	457.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=955.78;QD=18.03;SB=-501.52	GT:AD:DP:GL:GQ	0/1:25,28:52:-114.52,-15.66,-86.38:99
-chr1	3970842	rs12049555	G	A	157.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=59.39;MQ0=0;OQ=384.99;QD=10.13;SB=-163.62	GT:AD:DP:GL:GQ	0/1:23,15:35:-52.33,-10.55,-71.59:99
-chr1	3970912	rs6664533	C	T	146.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=58.67;MQ0=0;OQ=505.76;QD=14.45;SB=-247.75	GT:AD:DP:GL:GQ	0/1:19,16:34:-64.11,-10.25,-57.21:99
-chr1	3971010	rs6664655	C	G	360.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=59.06;MQ0=0;OQ=1105.77;QD=14.94;SB=-455.72	GT:AD:DP:GL:GQ	0/1:42,32:74:-136.16,-22.30,-181.19:99
-chr1	3971024	rs6686502	G	A	241.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=59.09;MQ0=0;OQ=1058.60;QD=13.93;SB=-346.09	GT:AD:DP:GL:GQ	0/1:42,34:75:-131.76,-22.62,-128.76:99
-chr1	3971052	rs6672264	T	C	278.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.20;MQ0=0;OQ=887.02;QD=10.95;SB=-268.12	GT:AD:DP:GL:GQ	0/1:49,32:80:-116.09,-24.10,-192.61:99
-chr1	3971195	rs6686709	G	C	441.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=533.40;QD=11.85;SB=-281.29	GT:AD:DP:GL:GQ	0/1:29,16:42:-69.28,-12.66,-112.85:99
-chr1	3971259	rs6680847	A	G	343.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=805.68;QD=13.21;SB=-291.63	GT:AD:DP:GL:GQ	0/1:33,28:60:-101.92,-18.07,-129.04:99
-chr1	3971430	rs6675053	T	C	59.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=57.14;MQ0=0;OQ=478.62;QD=6.74;SB=-133.24	GT:AD:DP:GL:GQ	0/1:48,23:70:-72.24,-21.10,-194.61:99
-chr1	3971753	.	C	A	69.39	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=12;HaplotypeScore=26.59;MQ=52.60;MQ0=0;QD=1.16;SB=62.22	GT:AD:DP:GL:GQ	0/1:50,10:49:-24.98,-14.76,-146.09:99
-chr1	3971766	rs12030209	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=12;HaplotypeScore=17.56;MQ=52.68;MQ0=0;OQ=817.96;QD=12.39;SB=-315.05	GT:AD:DP:GL:GQ	0/1:32,34:60:-103.15,-18.07,-109.51:99
-chr1	3972069	rs55798869	G	T	4.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=5.71;MQ=56.04;MQ0=0;OQ=802.09;QD=13.37;SB=-418.83	GT:AD:DP:GL:GQ	0/1:32,28:52:-99.17,-15.67,-74.15:99
-chr1	3972136	rs55745368	T	C	189.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.03;MQ0=0;OQ=1099.26;QD=12.08;SB=-445.57	GT:AD:DP:GL:GQ	0/1:52,39:91:-140.63,-27.42,-210.68:99
-chr1	3972189	rs7414301	T	C	60.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=5.42;MQ=59.51;MQ0=0;OQ=1011.76;QD=11.76;SB=-466.68	GT:AD:DP:GL:GQ	0/1:46,40:86:-130.38,-25.92,-186.30:99
-chr1	3972623	.	A	C	192.74	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.77;MQ0=0;OQ=1230.69;QD=15.38;SB=-527.79	GT:AD:DP:GL:GQ	0/1:36,44:79:-150.15,-23.80,-134.39:99
-chr1	3972753	rs10915589	G	A	130.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.30;MQ0=0;OQ=1165.16;QD=17.65;SB=-331.36	GT:AD:DP:GL:GQ	0/1:30,36:63:-138.78,-18.98,-103.29:99
-chr1	3972924	rs12023372	G	C	321.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1325.91;QD=18.94;SB=-613.61	GT:AD:DP:GL:GQ	0/1:33,37:69:-156.66,-20.79,-145.10:99
-chr1	3973210	rs12023479	G	A	281.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.70;MQ0=0;OQ=1046.55;QD=13.59;SB=-512.32	GT:AD:DP:GL:GQ	0/1:44,33:77:-131.15,-23.21,-144.02:99
-chr1	3973292	.	A	G	33.55	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=55.10;MQ0=0;OQ=633.05;QD=11.94;SB=-175.56	GT:AD:DP:GL:GQ	0/1:28,25:47:-80.75,-14.16,-95.41:99
-chr1	3973506	.	G	A	176.17	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.46;MQ0=0;OQ=876.83;QD=12.71;SB=-380.14	GT:AD:DP:GL:GQ	0/1:42,27:67:-111.16,-20.19,-131.21:99
-chr1	3973875	rs4654459	T	A	52.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=58.55;MQ0=0;OQ=1176.09;QD=14.70;SB=-563.67	GT:AD:DP:GL:GQ	0/1:41,39:78:-144.39,-23.49,-149.95:99
-chr1	3973955	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=17;HaplotypeScore=22.03;MQ=54.06;MQ0=0;OQ=55.47;QD=1.03;SB=65.23	GT:AD:DP:GL:GQ	0/1:43,10:44:-22.08,-13.25,-133.74:88.31
-chr1	3974003	.	A	G	105.47	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.51;MQ0=0;OQ=461.72;QD=11.26;SB=-234.29	GT:AD:DP:GL:GQ	0/1:22,19:40:-61.51,-12.06,-83.11:99
-chr1	3974203	.	T	G	66.57	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.62;MQ0=0;OQ=954.85;QD=13.84;SB=-428.75	GT:AD:DP:GL:GQ	0/1:35,34:68:-119.25,-20.48,-128.89:99
-chr1	3974239	rs35998568	G	A	463.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.48;MQ0=0;OQ=1184.56;QD=17.95;SB=-510.14	GT:AD:DP:GL:GQ	0/1:31,35:66:-141.63,-19.89,-102.39:99
-chr1	3974376	rs57696600	C	T	6.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=4;HaplotypeScore=1.87;MQ=59.16;MQ0=0;OQ=1418.07;QD=19.70;SB=-722.06	GT:AD:DP:GL:GQ	0/1:30,42:71:-166.49,-21.40,-92.47:99
-chr1	3974614	rs4457544	A	T	403.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1649.20;QD=19.18;SB=-732.91	GT:AD:DP:GL:GQ	0/1:34,52:86:-194.11,-25.90,-133.63:99
-chr1	3974846	rs12025374	G	A	466.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=1051.59;QD=16.43;SB=-403.40	GT:AD:DP:GL:GQ	0/1:31,33:63:-127.44,-18.99,-100.16:99
-chr1	3975091	rs12049502	T	C	199.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.55;MQ0=0;OQ=805.28;QD=16.78;SB=-288.47	GT:AD:DP:GL:GQ	0/1:19,29:47:-97.97,-14.16,-75.75:99
-chr1	3975721	rs34928897	A	G	109.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=59.19;MQ0=1;OQ=1038.58;QD=10.93;SB=-532.63	GT:AD:DP:GL:GQ	0/1:53,42:94:-135.47,-28.33,-210.33:99
-chr1	3975829	rs12060834	A	C	406.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1062.88;QD=14.56;SB=-251.81	GT:AD:DP:GL:GQ	0/1:37,36:73:-131.56,-21.98,-139.84:99
-chr1	3975904	rs12026411	G	T	347.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=57.00;MQ0=0;OQ=1228.86;QD=14.99;SB=-454.51	GT:AD:DP:GL:GQ	0/1:42,40:82:-150.86,-24.69,-151.44:99
-chr1	3976117	rs12034312	C	T	244.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=60.00;MQ0=0;OQ=1562.01;QD=18.38;SB=-442.95	GT:AD:DP:GL:GQ	0/1:40,45:84:-184.80,-25.32,-123.96:99
-chr1	3976389	rs35297022	T	C	334.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=962.55;QD=13.95;SB=-357.60	GT:AD:DP:GL:GQ	0/1:35,34:68:-120.03,-20.49,-141.31:99
-chr1	3976394	rs35043594	A	T	325.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=916.45;QD=13.68;SB=-308.03	GT:AD:DP:GL:GQ	0/1:36,31:67:-115.11,-20.18,-137.00:99
-chr1	3976477	rs4641284	A	G	171.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=58.95;MQ0=0;OQ=487.70;QD=11.08;SB=-180.60	GT:AD:DP:GL:GQ	0/1:26,18:42:-64.71,-12.65,-94.45:99
-chr1	3976506	rs34448752	C	T	57.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.85;MQ0=0;OQ=445.94;QD=14.86;SB=-105.62	GT:AD:DP:GL:GQ	0/1:16,14:29:-56.62,-8.74,-46.04:99
-chr1	3976567	.	C	T	0.32	PASS	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=1.54;MQ=51.77;MQ0=0;OQ=226.37;QD=18.86;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,9:11:-29.24,-3.32,-8.40:50.74
-chr1	3976658	rs35326871	G	T	11.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.52;MQ0=0;OQ=1096.88;QD=17.41;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,38:62:-131.64,-18.67,-93.14:99
-chr1	3977151	rs10915596	T	G	1.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=3.48;MQ=59.09;MQ0=0;OQ=756.41;QD=14.83;SB=-45.56	GT:AD:DP:GL:GQ	0/1:22,29:48:-93.38,-14.46,-82.79:99
-chr1	3977453	rs4654599	G	T	361.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.46;MQ0=0;OQ=1289.21;QD=16.74;SB=-567.82	GT:AD:DP:GL:GQ	0/1:35,42:77:-155.40,-23.19,-125.68:99
-chr1	3977541	rs4654600	T	C	61.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=3.43;MQ=59.43;MQ0=0;OQ=838.26;QD=17.11;SB=-388.65	GT:AD:DP:GL:GQ	0/1:18,30:47:-103.58,-16.47,-75.42:99
-chr1	3977567	rs4654601	G	A	272.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=1148.82;QD=18.83;SB=-426.81	GT:AD:DP:GL:GQ	0/1:26,35:60:-136.24,-18.08,-87.47:99
-chr1	3977950	rs4654604	T	C	322.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.65;MQ0=0;OQ=975.26;QD=14.78;SB=-339.18	GT:AD:DP:GL:GQ	0/1:28,38:65:-120.40,-19.59,-110.65:99
-chr1	3978231	rs4129099	T	C	330.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=733.04;QD=11.64;SB=-345.90	GT:AD:DP:GL:GQ	0/1:32,31:62:-95.28,-18.69,-130.06:99
-chr1	3978308	rs4129100	G	A	317.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1482.59;QD=16.85;SB=-689.02	GT:AD:DP:GL:GQ	0/1:42,46:86:-177.46,-25.92,-132.95:99
-chr1	3980624	rs4323679	C	T	566.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=703.77;QD=12.13;SB=-349.85	GT:AD:DP:GL:GQ	0/1:35,23:57:-90.85,-17.19,-108.01:99
-chr1	3980746	rs35182639	G	A	123.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.13;MQ=59.70;MQ0=0;OQ=1453.16;QD=18.63;SB=-621.68	GT:AD:DP:GL:GQ	0/1:35,43:76:-171.51,-22.91,-105.10:99
-chr1	3980982	rs12747944	G	A	386.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=60.00;MQ0=0;OQ=715.67;QD=12.56;SB=-369.37	GT:AD:DP:GL:GQ	0/1:32,24:53:-90.82,-15.97,-105.07:99
-chr1	3981385	rs17404600	C	T	307.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.06;MQ=59.56;MQ0=0;OQ=909.30;QD=17.16;SB=-459.01	GT:AD:DP:GL:GQ	0/1:26,27:49:-108.98,-14.77,-70.07:99
-chr1	3981945	.	G	C	7.35	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.62;MQ=59.25;MQ0=0;OQ=783.42;QD=13.99;SB=-334.02	GT:AD:DP:GL:GQ	0/1:33,23:54:-97.92,-16.29,-122.30:99
-chr1	3981947	rs10799260	C	T	127.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=59.25;MQ0=0;OQ=721.41;QD=12.88;SB=-288.75	GT:AD:DP:GL:GQ	0/1:33,23:55:-91.99,-16.57,-116.30:99
-chr1	3982051	rs10753384	A	G	287.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=59.62;MQ0=0;OQ=891.61;QD=14.62;SB=-286.59	GT:AD:DP:GL:GQ	0/1:30,31:60:-110.52,-18.08,-117.65:99
-chr1	3982227	rs10799261	T	C	592.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=920.95;QD=13.35;SB=-433.27	GT:AD:DP:GL:GQ	0/1:35,34:67:-115.56,-20.18,-140.96:99
-chr1	3982891	rs12023925	T	C	257.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.13;MQ0=0;OQ=486.42;QD=9.18;SB=-229.40	GT:AD:DP:GL:GQ	0/1:30,23:50:-67.00,-15.07,-113.54:99
-chr1	3984164	rs7418256	T	G	46.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=4;HaplotypeScore=1.00;MQ=59.72;MQ0=0;OQ=1495.13;QD=18.23;SB=-531.78	GT:AD:DP:GL:GQ	0/1:33,49:80:-176.89,-24.10,-113.02:99
-chr1	3984958	rs6426436	A	G	575.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=842.05;QD=12.95;SB=-332.89	GT:AD:DP:GL:GQ	0/1:35,30:64:-106.77,-19.28,-141.35:99
-chr1	3985143	rs5015188	T	C	159.92	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=12.99;MQ=58.62;MQ0=0;QD=2.25;SB=-60.43	GT:AD:DP:GL:GQ	0/1:60,11:70:-40.36,-21.09,-240.05:99
-chr1	3985147	rs5015187	T	C	314.93	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=67.96;MQ=58.31;MQ0=0;QD=4.37;SB=-165.46	GT:AD:DP:GL:GQ	0/1:57,15:70:-55.86,-21.08,-223.89:99
-chr1	3985151	rs5015186	T	C	601.51	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.01;HRun=1;HaplotypeScore=11.99;MQ=58.34;MQ0=0;QD=8.24;SB=-304.19	GT:AD:DP:GL:GQ	0/1:49,23:71:-84.52,-21.09,-190.22:99
-chr1	3985364	rs4233266	A	G	350.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=58.47;MQ0=0;OQ=817.82;QD=10.76;SB=-299.84	GT:AD:DP:GL:GQ	0/1:41,35:71:-106.46,-21.39,-162.85:99
-chr1	3985761	rs4654611	G	C	378.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=59.78;MQ0=0;OQ=1274.73;QD=15.36;SB=-534.37	GT:AD:DP:GL:GQ	0/1:45,38:78:-154.27,-23.51,-187.35:99
-chr1	3985811	rs4654612	C	T	99.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.68;MQ=59.17;MQ0=0;OQ=618.20;QD=11.04;SB=-273.28	GT:AD:DP:GL:GQ	0/1:30,25:47:-79.28,-14.18,-83.87:99
-chr1	3988267	rs3829818	C	G	50.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.32;MQ0=0;OQ=1075.32;QD=19.55;SB=-391.87	GT:AD:DP:GL:GQ	0/1:26,29:54:-127.10,-16.29,-99.01:99
-chr1	3988626	rs34649702	A	C	437.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=920.32;QD=18.41;SB=-485.28	GT:AD:DP:GL:GQ	0/1:20,30:49:-110.07,-14.76,-69.08:99
-chr1	3988704	rs55889146	T	A	313.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.71;MQ0=0;OQ=1088.43;QD=16.75;SB=-492.44	GT:AD:DP:GL:GQ	0/1:29,36:65:-131.71,-19.58,-109.61:99
-chr1	3989745	rs35412083	G	A	332.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.92;MQ0=0;OQ=1097.15;QD=11.93;SB=-405.76	GT:AD:DP:GL:GQ	0/1:55,36:89:-139.82,-26.82,-176.39:99
-chr1	3990405	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=94;Dels=0.03;HRun=18;HaplotypeScore=33.42;MQ=54.32;MQ0=1;OQ=80.49;QD=0.86;SB=90.81	GT:AD:DP:GL:GQ	0/1:76,15:73:-32.44,-21.10,-200.50:99
-chr1	3990446	rs34385055	G	A	276.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=58.88;MQ0=0;OQ=865.10;QD=15.73;SB=-440.45	GT:AD:DP:GL:GQ	0/1:26,29:49:-104.56,-14.77,-74.37:99
-chr1	3990572	rs10915650	T	C	322.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=53.91;MQ0=0;OQ=802.60;QD=15.43;SB=-363.11	GT:AD:DP:GL:GQ	0/1:19,33:50:-98.61,-15.07,-76.41:99
-chr1	3990932	rs4654614	C	T	267.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1697.75;QD=19.97;SB=-727.98	GT:AD:DP:GL:GQ	0/1:36,49:85:-198.66,-25.60,-134.20:99
-chr1	3991939	.	G	T	133.26	Indel	AC=1;AF=0.50;AN=2;DP=31;Dels=0.03;HRun=0;HaplotypeScore=37.12;MQ=55.25;MQ0=0;QD=4.30;SB=-33.93	GT:AD:DP:GL:GQ	0/1:22,8:23:-23.24,-6.63,-47.74:99
-chr1	3992866	rs34160796	A	G	334.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=483.28;QD=9.29;SB=-177.56	GT:AD:DP:GL:GQ	0/1:33,19:51:-66.97,-15.36,-129.46:99
-chr1	3993123	rs10915661	A	G	223.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=58.90;MQ0=0;OQ=752.89;QD=12.76;SB=-356.58	GT:AD:DP:GL:GQ	0/1:32,27:57:-95.74,-17.17,-122.04:99
-chr1	3993398	rs10799273	A	G	39.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.69;MQ0=0;OQ=432.60;QD=13.52;SB=-183.96	GT:AD:DP:GL:GQ	0/1:16,16:30:-55.58,-9.04,-60.72:99
-chr1	3993415	rs55877711	T	C	152.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.43;MQ0=0;OQ=474.94;QD=14.39;SB=-232.31	GT:AD:DP:GL:GQ	0/1:16,17:31:-60.12,-9.34,-57.39:99
-chr1	3993656	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=16;HaplotypeScore=11.17;MQ=56.96;MQ0=0;OQ=77.46;QD=1.25;SB=65.19	GT:AD:DP:GL:GQ	0/1:50,11:45:-24.60,-13.57,-123.37:99
-chr1	3994923	rs4654469	G	A	168.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=59.68;MQ0=0;OQ=1491.96;QD=20.44;SB=-717.78	GT:AD:DP:GL:GQ	0/1:30,43:72:-174.18,-21.70,-94.37:99
-chr1	3995705	rs34085171	T	G	1347.57	Indel	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.38;MQ0=0;QD=15.85;SB=-684.75	GT:AD:DP:GL:GQ	0/1:40,45:84:-163.34,-25.30,-143.02:99
-chr1	3997814	.	A	G	166.71	PASS	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.77;MQ0=0;OQ=1047.22;QD=13.09;SB=-493.22	GT:AD:DP:GL:GQ	0/1:44,36:80:-132.11,-24.10,-175.80:99
-chr1	3999521	rs7533488	A	C	424.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.32;MQ0=0;OQ=1161.71;QD=14.17;SB=-423.73	GT:AD:DP:GL:GQ	0/1:41,40:80:-143.55,-24.09,-150.24:99
-chr1	4000164	rs10753345	T	C	207.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=54.60;MQ0=3;OQ=972.02;QD=12.62;SB=-388.88	GT:AD:DP:GL:GQ	0/1:39,38:72:-122.18,-21.70,-141.20:99
-chr1	4000350	rs10915304	A	G	90.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=49.42;MQ0=0;OQ=302.07;QD=8.39;SB=-112.62	GT:AD:DP:GL:GQ	0/1:20,15:32:-43.14,-9.65,-72.05:99
-chr1	4001557	rs35079847	T	C	179.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=42.74;MQ0=4;OQ=737.26;QD=10.24;SB=-356.16	GT:AD:DP:GL:GQ	0/1:43,29:67:-97.19,-20.18,-162.42:99
-chr1	4002410	rs9792845	T	A	39.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=2;HaplotypeScore=2.16;MQ=49.63;MQ0=6;OQ=1137.13;QD=12.92;SB=-561.60	GT:AD:DP:GL:GQ	0/1:48,40:80:-141.09,-24.09,-168.17:99
-chr1	4002600	.	C	T	9.93	PASS	AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=34.65;MQ0=18;OQ=1297.58;QD=10.30;SB=-536.53	GT:AD:DP:GL:GQ	0/1:72,54:87:-159.25,-26.21,-171.14:99
-chr1	4003027	rs7539155	C	T	270.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=49.52;MQ0=2;OQ=1241.45;QD=15.71;SB=-511.02	GT:AD:DP:GL:GQ	0/1:40,39:77:-150.62,-23.19,-144.23:99
-chr1	4003660	rs34911143	C	G	406.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1137.88;QD=19.96;SB=-593.22	GT:AD:DP:GL:GQ	0/1:26,31:56:-133.94,-16.87,-107.70:99
-chr1	4003790	.	T	C	0.57	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.22;MQ=56.08;MQ0=0;OQ=469.98;QD=8.55;SB=-182.54	GT:AD:DP:GL:GQ	0/1:35,20:52:-65.94,-15.66,-138.69:99
-chr1	4003932	rs60522686	C	T	104.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=60.00;MQ0=0;OQ=1130.00;QD=21.32;SB=-533.08	GT:AD:DP:GL:GQ	0/1:20,33:53:-132.25,-15.97,-67.95:99
-chr1	4004106	rs12036981	T	A	126.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=56.22;MQ0=2;OQ=519.83;QD=10.19;SB=-138.13	GT:AD:DP:GL:GQ	0/1:29,21:47:-69.43,-14.17,-100.44:99
-chr1	4004617	rs12036953	A	G	190.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.43;MQ0=0;OQ=561.78;QD=8.64;SB=-245.46	GT:AD:DP:GL:GQ	0/1:41,24:63:-78.44,-18.98,-164.76:99
-chr1	4005149	rs5018354	G	T	769.64	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=5;HaplotypeScore=8.12;MQ=53.93;MQ0=0;QD=10.84;SB=-410.03	GT:AD:DP:GL:GQ	0/1:41,30:69:-101.03,-20.78,-142.34:99
-chr1	4005155	.	A	T	709.63	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=5;HaplotypeScore=11.69;MQ=54.09;MQ0=0;QD=10.28;SB=-304.00	GT:AD:DP:GL:GQ	0/1:43,26:65:-93.83,-19.58,-142.00:99
-chr1	4005156	.	A	T	576.66	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=13.11;MQ=54.00;MQ0=0;QD=8.48;SB=-291.97	GT:AD:DP:GL:GQ	0/1:44,24:63:-79.93,-18.98,-151.00:99
-chr1	4005449	rs34905442	A	G	30.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=5.92;MQ=57.79;MQ0=0;OQ=842.19;QD=15.89;SB=-428.92	GT:AD:DP:GL:GQ	0/1:23,30:52:-103.18,-15.68,-83.89:99
-chr1	4010416	rs55645535	A	G	3.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=58.64;MQ0=0;OQ=504.55;QD=16.28;SB=-163.34	GT:AD:DP:GL:GQ	0/1:10,21:29:-62.49,-8.75,-36.79:99
-chr1	4012539	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=20;HaplotypeScore=3.78;MQ=46.27;MQ0=3;OQ=496.42;QD=5.23;SB=131.33	GT:AD:DP:GL:GQ	0/1:70,25:77:-76.14,-23.22,-185.60:99
-chr1	4012545	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=7;HaplotypeScore=6.81;MQ=48.30;MQ0=1;OQ=296.48;QD=3.12;SB=125.35	GT:AD:DP:GL:GQ	0/1:68,26:74:-55.23,-22.30,-199.64:99
-chr1	4015436	rs10799171	T	C	582.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1395.24;QD=29.69;SB=-603.59	GT:AD:DP:GL:GQ	1/1:0,47:45:-143.16,-13.58,-0.05:99
-chr1	4015788	rs6426377	G	C	79.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=58.24;MQ0=0;OQ=2118.03;QD=39.96;SB=-1018.28	GT:AD:DP:GL:GQ	1/1:0,53:49:-215.40,-14.76,-0.01:99
-chr1	4016464	rs3856168	T	C	206.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.60;MQ0=0;OQ=1420.67;QD=28.41;SB=-682.89	GT:AD:DP:GL:GQ	1/1:0,50:45:-145.69,-13.57,-0.04:99
-chr1	4017003	rs4654403	T	C	46.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=59.61;MQ0=0;OQ=1716.77;QD=29.10;SB=-823.60	GT:AD:DP:GL:GQ	1/1:0,59:55:-175.31,-16.59,-0.05:99
-chr1	4017098	rs4654404	C	T	8.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=4.56;MQ=58.64;MQ0=0;OQ=1853.34;QD=38.61;SB=-777.68	GT:AD:DP:GL:GQ	1/1:0,48:47:-188.93,-14.16,-0.01:99
-chr1	4018431	rs4654475	T	C	39.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.54;MQ0=0;OQ=1443.50;QD=28.87;SB=-682.71	GT:AD:DP:GL:GQ	1/1:0,50:46:-147.99,-13.88,-0.05:99
-chr1	4018760	rs7419106	C	G	402.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1082.64;QD=34.92;SB=-389.10	GT:AD:DP:GL:GQ	1/1:0,31:28:-111.87,-8.45,-0.02:84.27
-chr1	4018847	rs10799175	T	C	20.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=58.50;MQ0=0;OQ=814.89;QD=26.29;SB=-376.57	GT:AD:DP:GL:GQ	1/1:1,29:28:-88.39,-10.61,-3.32:72.94
-chr1	4019483	rs10799177	G	A	473.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.36;MQ0=0;OQ=1615.08;QD=33.65;SB=-313.91	GT:AD:DP:GL:GQ	1/1:0,48:42:-165.11,-12.66,-0.02:99
-chr1	4019522	rs9792946	G	A	281.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=54.50;MQ0=0;OQ=2603.69;QD=38.29;SB=-1110.00	GT:AD:DP:GL:GQ	1/1:0,68:66:-263.98,-19.89,-0.02:99
-chr1	4019590	rs7418034	G	A	135.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=43.49;MQ0=0;OQ=1841.94;QD=30.70;SB=-845.46	GT:AD:DP:GL:GQ	1/1:0,59:50:-190.21,-17.45,-2.43:99
-chr1	4019593	rs7412152	A	C	123.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=42.41;MQ0=0;OQ=1763.32;QD=29.89;SB=-853.08	GT:AD:DP:GL:GQ	1/1:0,59:51:-179.93,-15.36,-0.02:99
-chr1	4019614	rs7411249	C	G	15.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.88;MQ=36.55;MQ0=1;OQ=1713.38;QD=32.33;SB=-801.51	GT:AD:DP:GL:GQ	1/1:0,53:41:-174.94,-12.36,-0.02:99
-chr1	4019841	rs7412217	A	G	301.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=36.34;MQ0=0;OQ=1308.64;QD=29.08;SB=-633.25	GT:AD:DP:GL:GQ	1/1:0,45:37:-134.46,-11.14,-0.01:99
-chr1	4019863	rs4310408	A	G	15.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=44.42;MQ0=0;OQ=1396.45;QD=30.36;SB=-620.23	GT:AD:DP:GL:GQ	1/1:0,46:40:-143.25,-12.05,-0.02:99
-chr1	4019987	rs10737398	C	T	456.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.86;MQ0=6;OQ=1422.85;QD=30.93;SB=-467.35	GT:AD:DP:GL:GQ	1/1:0,46:37:-145.88,-11.15,-0.01:99
-chr1	4020055	rs7411353	C	A	1052.58	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=9;HaplotypeScore=6.69;MQ=42.23;MQ0=1;QD=22.40;SB=-302.56	GT:AD:DP:GL:GQ	1/1:0,47:31:-108.85,-9.34,-0.01:93.27
-chr1	4020059	.	T	A	16.07	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=4;HaplotypeScore=6.64;MQ=40.62;MQ0=1;QD=0.41;SB=14.07	GT:AD:DP:GL:GQ	0/1:27,12:17:-10.01,-5.13,-48.93:48.79
-chr1	4020065	rs6426379	G	C	834.47	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=40.47;MQ0=0;QD=30.91;SB=-369.17	GT:AD:DP:GL:GQ	1/1:1,26:20:-87.04,-6.03,-0.01:60.20
-chr1	4020216	rs6426380	C	T	178.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=56.52;MQ0=0;OQ=2286.70;QD=38.76;SB=-938.24	GT:AD:DP:GL:GQ	1/1:0,59:59:-232.28,-17.78,-0.03:99
-chr1	4020359	rs4233255	T	A	506.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.30;MQ0=1;OQ=1405.72;QD=30.56;SB=-629.64	GT:AD:DP:GL:GQ	1/1:0,46:40:-144.18,-12.05,-0.02:99
-chr1	4020451	rs4654476	A	G	27.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.11;MQ0=0;OQ=1489.65;QD=28.65;SB=-689.96	GT:AD:DP:GL:GQ	1/1:0,52:47:-152.59,-14.18,-0.04:99
-chr1	4020454	rs4654477	T	C	48.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=59.54;MQ0=0;OQ=1536.11;QD=30.72;SB=-613.94	GT:AD:DP:GL:GQ	1/1:0,50:48:-157.24,-14.48,-0.04:99
-chr1	4020656	rs4233256	A	C	90.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.09;MQ0=0;OQ=1344.37;QD=29.23;SB=-633.78	GT:AD:DP:GL:GQ	1/1:0,46:45:-138.07,-13.57,-0.05:99
-chr1	4020738	rs4233257	G	A	285.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.81;MQ0=0;OQ=1954.21;QD=35.53;SB=-857.02	GT:AD:DP:GL:GQ	1/1:0,55:50:-199.02,-15.06,-0.01:99
-chr1	4020758	rs4233258	T	C	590.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.92;MQ0=0;OQ=1509.42;QD=29.03;SB=-773.63	GT:AD:DP:GL:GQ	1/1:0,52:49:-154.57,-14.78,-0.05:99
-chr1	4020965	rs10915373	A	G	41.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=3.05;MQ=59.15;MQ0=0;OQ=2124.75;QD=32.19;SB=-981.05	GT:AD:DP:GL:GQ	1/1:0,66:61:-216.09,-18.38,-0.03:99
-chr1	4021209	rs12087801	A	G	66.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=59.44;MQ0=0;OQ=1399.12;QD=34.12;SB=-653.32	GT:AD:DP:GL:GQ	1/1:0,41:40:-143.51,-12.05,-0.01:99
-chr1	4021244	rs7524590	A	G	21.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=1518.93;QD=29.21;SB=-554.05	GT:AD:DP:GL:GQ	1/1:0,52:47:-155.52,-14.17,-0.04:99
-chr1	4021467	rs6426381	T	C	70.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.82;MQ0=0;OQ=1271.75;QD=29.58;SB=-623.00	GT:AD:DP:GL:GQ	1/1:0,43:40:-130.79,-12.06,-0.03:99
-chr1	4021470	rs6665286	C	T	565.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.82;MQ0=0;OQ=1632.61;QD=37.97;SB=-837.35	GT:AD:DP:GL:GQ	1/1:0,43:42:-166.86,-12.66,-0.02:99
-chr1	4021576	rs10799179	C	T	140.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.60;MQ0=0;OQ=2105.87;QD=36.95;SB=-1023.68	GT:AD:DP:GL:GQ	1/1:0,57:54:-214.19,-16.27,-0.02:99
-chr1	4022324	rs10799180	T	C	96.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1478.38;QD=30.80;SB=-697.61	GT:AD:DP:GL:GQ	1/1:0,48:47:-151.47,-14.18,-0.04:99
-chr1	4023064	rs12044274	A	T	27.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.00;MQ0=0;OQ=1175.00;QD=33.57;SB=-370.25	GT:AD:DP:GL:GQ	1/1:0,34:33:-121.10,-9.94,-0.02:99
-chr1	4023346	rs12728781	C	T	64.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.67;MQ0=0;OQ=1081.51;QD=30.90;SB=-492.01	GT:AD:DP:GL:GQ	1/1:1,34:29:-111.75,-8.74,-0.01:87.27
-chr1	4023709	rs10915381	G	C	0.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=3.44;MQ=58.92;MQ0=0;OQ=2348.10;QD=41.93;SB=-727.93	GT:AD:DP:GL:GQ	1/1:0,56:54:-238.42,-16.28,-0.02:99
-chr1	4024015	rs6672626	C	T	663.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.30;MQ0=0;OQ=1764.84;QD=37.55;SB=-805.32	GT:AD:DP:GL:GQ	1/1:0,47:46:-180.09,-13.86,-0.02:99
-chr1	4024120	rs6672716	C	T	182.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=36.16;MQ0=0;OQ=1966.97;QD=37.83;SB=-833.61	GT:AD:DP:GL:GQ	1/1:0,51:51:-203.16,-18.10,-2.88:99
-chr1	4024270	.	T	A	112.05	Indel	AC=1;AF=0.50;AN=2;DP=33;Dels=0.03;HRun=0;HaplotypeScore=2.93;MQ=35.48;MQ0=0;QD=3.40;SB=-51.99	GT:AD:DP:GL:GQ	0/1:21,11:28:-22.63,-8.14,-76.45:99
-chr1	4024272	.	A	T	86.10	Indel	AC=1;AF=0.50;AN=2;DP=34;Dels=0.03;HRun=0;HaplotypeScore=5.09;MQ=34.14;MQ0=0;QD=2.53;SB=-27.82	GT:AD:DP:GL:GQ	0/1:23,10:27:-19.73,-7.83,-71.54:99
-chr1	4024295	rs6683289	T	C	432.26	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=27.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:16:-46.84,-4.84,-0.03:48.07
-chr1	4024297	rs6665849	G	C	696.90	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=43.56;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,16:16:-73.28,-4.82,-0.00:48.16
-chr1	4024305	.	T	C	154.38	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=7.02;SB=-40.68	GT:AD:DP:GL:GQ	0/1:15,7:22:-25.35,-6.63,-60.61:99
-chr1	4024357	.	T	G	116.82	Indel	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=28.57;MQ0=0;QD=4.67;SB=-30.96	GT:AD:DP:GL:GQ	0/1:17,8:23:-21.89,-6.93,-59.79:99
-chr1	4024403	.	G	T	1246.60	Indel	AC=2;AF=1.00;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=28.45;MQ0=0;QD=33.69;SB=-622.14	GT:AD:DP:GL:GQ	1/1:0,37:35:-128.26,-10.54,-0.01:99
-chr1	4024413	.	C	T	38.79	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=32.72;MQ0=0;QD=0.90;SB=-26.14	GT:AD:DP:GL:GQ	0/1:37,6:40:-19.21,-12.05,-127.12:71.63
-chr1	4024463	.	G	C	836.03	Indel	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.63;MQ=36.44;MQ0=0;QD=16.39;SB=-259.21	GT:AD:DP:GL:GQ	0/1:27,24:51:-102.25,-15.37,-114.08:99
-chr1	4024467	.	C	T	697.56	Indel	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=4.47;MQ=36.57;MQ0=0;QD=13.95;SB=-194.79	GT:AD:DP:GL:GQ	0/1:28,22:49:-87.80,-14.76,-98.23:99
-chr1	4024517	rs28542205	C	G	1129.16	Indel	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=18.36;MQ=32.35;MQ0=0;QD=26.26;SB=-522.33	GT:AD:DP:GL:GQ	0/1:8,31:35:-126.75,-10.55,-27.16:99
-chr1	4024521	.	G	C	975.12	Indel	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=18.89;MQ=30.36;MQ0=0;QD=23.78;SB=-491.19	GT:AD:DP:GL:GQ	0/1:9,27:35:-115.01,-14.21,-36.24:99
-chr1	4024603	.	G	C	2.26	PASS	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=24.41;MQ0=0;OQ=50.98;QD=5.66;SB=-6.99	GT:AD:DP:GL:GQ	0/1:1,8:3:-9.29,-0.90,-4.69:37.89
-chr1	4024673	.	T	C	8.19	PASS	AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=30.71;MQ0=0;OQ=656.07;QD=31.24;SB=-288.45	GT:AD:DP:GL:GQ	1/1:0,21:20:-69.20,-6.03,-0.01:60.17
-chr1	4024788	.	T	C	850.29	Indel	AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.58;MQ0=0;QD=34.01;SB=-338.76	GT:AD:DP:GL:GQ	1/1:0,25:25:-88.63,-7.53,-0.01:75.20
-chr1	4024845	.	T	G	1.74	PASS	AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=68.85;QD=17.21;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,3:4:-11.37,-1.20,-3.44:22.35
-chr1	4024894	.	T	C	62.45	Indel	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=29.00;MQ0=0;QD=12.49;SB=-41.94	GT:AD:DP:GL:GQ	0/1:2,3:4:-10.73,-1.20,-4.27:30.63
-chr1	4024923	.	G	A	22.24	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=8;Dels=0.25;HRun=0;HaplotypeScore=23.92;MQ=29.00;MQ0=0;QD=2.78;SB=-0.97	GT:AD:DP:GL:GQ	0/1:4,2:6:-7.31,-1.81,-14.76:55.05
-chr1	4024936	.	T	G	14.90	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=16;Dels=0.06;HRun=0;HaplotypeScore=31.98;MQ=29.00;MQ0=0;QD=0.93;SB=4.38	GT:AD:DP:GL:GQ	0/1:12,2:8:-11.00,-6.24,-20.74:47.59
-chr1	4024944	.	C	T	21.22	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=58.95;MQ=29.00;MQ0=0;QD=1.25;SB=8.05	GT:AD:DP:GL:GQ	0/1:15,2:9:-8.11,-2.71,-25.25:54.02
-chr1	4024945	.	A	T	15.01	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=58.95;MQ=29.00;MQ0=0;QD=0.88;SB=8.04	GT:AD:DP:GL:GQ	0/1:13,4:9:-7.48,-2.71,-24.43:47.70
-chr1	4024946	.	C	T	97.28	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=64.95;MQ=29.00;MQ0=0;QD=5.72;SB=8.05	GT:AD:DP:GL:GQ	0/1:13,4:11:-16.32,-3.31,-25.25:99
-chr1	4024979	.	C	T	611.81	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=6.71;MQ=29.00;MQ0=0;QD=33.99;SB=-293.67	GT:AD:DP:GL:GQ	1/1:0,16:16:-64.77,-4.82,-0.00:48.16
-chr1	4024982	.	T	G	173	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=11.86;MQ=29.00;MQ0=0;QD=9.11;SB=14.07	GT:AD:DP:GL:GQ	0/1:10,7:16:-25.40,-4.82,-33.30:99
-chr1	4024983	.	C	T	250.37	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=11.86;MQ=29.00;MQ0=0;QD=13.18;SB=14.06	GT:AD:DP:GL:GQ	0/1:11,8:16:-33.14,-4.82,-27.15:99
-chr1	4025014	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=18.19;MQ=29.00;MQ0=0;OQ=197.67;QD=9.88;SB=17.08	GT:AD:DP:GL:GQ	0/1:13,7:18:-28.47,-5.42,-39.21:99
-chr1	4025033	.	G	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=9.30;MQ=27.51;MQ0=1;OQ=89.74;QD=8.97;SB=2.03	GT:AD:DP:GL:GQ	0/1:5,5:9:-14.97,-2.71,-16.97:99
-chr1	4025048	.	C	T	21.22	DPFilter;Indel;LowQual	AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=32.62;MQ=27.51;MQ0=1;QD=2.12;SB=2.04	GT:AD:DP:GL:GQ	0/1:8,2:9:-8.11,-2.71,-25.19:54.03
-chr1	4025070	.	G	A	35.48	LowQual	AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=1;HaplotypeScore=6.00;MQ=29.00;MQ0=0;QD=8.87;SB=-6.99	GT:AD:DP:GL:GQ	0/1:2,2:3:-7.73,-0.90,-3.47:25.65
-chr1	4025144	.	C	T	71.12	Indel	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=8.89;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,6:5:-11.90,-1.51,-7.69:61.87
-chr1	4025168	.	G	C	48.97	LowQual	AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=29.00;MQ0=0;QD=7.00;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,5:4:-9.39,-1.21,-8.09:68.89
-chr1	4025186	.	C	T	0.12	PASS	AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=78.13;QD=19.53;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,3:4:-12.30,-1.20,-3.90:26.92
-chr1	4025245	.	C	T	49.25	LowQual;SnpCluster	AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,2:2:-8.33,-0.60,-0.00:6.02
-chr1	4025247	.	G	C	137.89	SnpCluster	AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.94;MQ0=1;QD=27.58;SB=-52.47	GT:AD:DP:GL:GQ	1/1:1,4:4:-17.32,-1.21,-0.00:12.04
-chr1	4025253	.	T	C	341.02	SnpCluster	AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.68;MQ0=2;QD=26.23;SB=-182.78	GT:AD:DP:GL:GQ	1/1:1,12:11:-37.69,-3.31,-0.01:33.09
-chr1	4025355	.	C	T	528.21	SnpCluster	AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=33.01;SB=-144.72	GT:AD:DP:GL:GQ	1/1:1,15:16:-59.68,-4.82,-3.30:15.20
-chr1	4025359	.	T	C	305.09	SnpCluster	AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=29.00;MQ0=0;QD=23.47;SB=-70.88	GT:AD:DP:GL:GQ	0/1:2,11:13:-37.71,-3.92,-7.64:37.23
-chr1	4025364	.	T	A	90.08	SnpCluster	AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=29.00;MQ0=0;QD=18.02;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,3:3:-12.50,-0.90,-0.00:9.03
-chr1	4025431	.	G	C	10.49	LowQual	AC=1;AF=0.50;AN=2;DP=1;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=10.49;SB=-10.00	GT:AD:DP:GL:GQ	0/1:0,1:1:-4.29,-0.30,-0.00:1.76
-chr1	4025466	.	T	C	25.23	LowQual	AC=1;AF=0.50;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=29.00;MQ0=0;QD=8.41;SB=-10.00	GT:AD:DP:GL:GQ	0/1:0,2:3:-9.75,-4.24,-3.95:1.79
-chr1	4025523	.	A	C	21.19	LowQual	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=1;HaplotypeScore=4.30;MQ=29.00;MQ0=0;QD=4.24;SB=-10.00	GT:AD:DP:GL:GQ	0/1:3,2:3:-6.30,-0.90,-3.10:21.92
-chr1	4025542	.	T	C	37.83	LowQual	AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=12.61;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,2:2:-7.19,-0.60,-0.00:6.02
-chr1	4025586	.	G	C	7.40	PASS	AC=1;AF=0.50;AN=2;DP=5;Dels=0.20;HRun=0;HaplotypeScore=2.25;MQ=29.00;MQ0=0;OQ=51.98;QD=10.40;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,3:3:-9.39,-0.90,-3.95:30.43
-chr1	4025618	.	C	T	7.86	PASS	AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=29.00;MQ0=0;OQ=87.13;QD=12.45;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,5:3:-12.20,-0.90,-0.00:9.03
-chr1	4025642	.	T	C	158.22	Indel	AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=31.64;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,5:5:-19.38,-1.51,-0.00:15.05
-chr1	4025697	.	A	T	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=29.00;MQ0=0;OQ=113.07;QD=22.61;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,4:5:-16.09,-1.51,-3.64:21.34
-chr1	4025746	.	T	G	32.28	LowQual	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=3.93;MQ=23.71;MQ0=1;QD=6.46;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,2:3:-7.41,-0.90,-3.74:28.36
-chr1	4025760	.	T	C	33.23	LowQual	AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=26.51;MQ0=0;QD=8.31;SB=-10.00	GT:AD:DP:GL:GQ	0/1:1,2:3:-10.45,-4.14,-3.85:1.79
-chr1	4026171	.	A	T	209.87	Indel	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=25.28;MQ0=0;QD=14.99;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,9:8:-26.67,-2.41,-4.00:15.91
-chr1	4026180	.	C	G	33.92	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.28;MQ0=0;QD=2.42;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,5:9:-9.39,-2.71,-29.13:66.75
-chr1	4026184	.	C	T	21.22	LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.28;MQ0=0;QD=1.52;SB=-10.00	GT:AD:DP:GL:GQ	0/1:9,5:9:-8.11,-2.71,-25.08:54.02
-chr1	4026206	.	C	G	51.98	Indel	AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.01;MQ0=1;QD=7.43;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,5:3:-9.39,-0.90,-4.15:32.44
-chr1	4026210	.	G	C	48.85	LowQual	AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.61;MQ0=1;QD=8.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,5:2:-8.29,-0.60,-0.00:6.02
-chr1	4026326	.	G	C	28.47	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=22.92;MQ=30.24;MQ0=0;QD=1.90;SB=-27.39	GT:AD:DP:GL:GQ	0/1:8,6:9:-8.84,-2.71,-32.55:61.30
-chr1	4026330	.	C	T	15.30	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=20.94;MQ=33.42;MQ0=0;QD=0.96;SB=-6.99	GT:AD:DP:GL:GQ	0/1:14,2:11:-8.11,-3.31,-31.44:48.01
-chr1	4026341	.	A	T	151.96	Indel	AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=32.82;MQ=37.84;MQ0=1;QD=7.24;SB=-45.98	GT:AD:DP:GL:GQ	0/1:14,7:14:-22.70,-4.22,-31.99:99
-chr1	4026383	.	A	G	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.11;MQ=37.86;MQ0=1;OQ=685.36;QD=14.58;SB=-116.05	GT:AD:DP:GL:GQ	1/1:7,40:26:-76.32,-7.85,-4.20:36.49
-chr1	4026434	.	C	G	29.02	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=0.81;SB=5.05	GT:AD:DP:GL:GQ	0/1:34,2:8:-8.60,-2.41,-25.63:61.85
-chr1	4026435	.	A	T	728.54	SnpCluster	AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=20.24;SB=-50.99	GT:AD:DP:GL:GQ	1/1:2,34:20:-76.44,-6.02,-0.00:60.19
-chr1	4026437	.	T	A	762.24	SnpCluster	AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=21.17;SB=-46.39	GT:AD:DP:GL:GQ	1/1:2,34:20:-79.81,-6.02,-0.00:60.20
-chr1	4026440	.	T	G	564.23	SnpCluster	AC=2;AF=1.00;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.87;MQ0=0;QD=17.10;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,31:17:-60.01,-5.12,-0.00:51.15
-chr1	4026444	.	C	G	41.07	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.30;MQ0=1;QD=1.28;SB=-6.99	GT:AD:DP:GL:GQ	0/1:30,2:3:-8.29,-0.90,-4.25:33.44
-chr1	4026449	.	A	T	483.60	SnpCluster	AC=2;AF=1.00;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.81;MQ0=1;QD=16.68;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,29:14:-51.95,-4.22,-0.00:42.13
-chr1	4026483	.	G	A	173.76	Indel	AC=2;AF=1.00;AN=2;DP=7;Dels=0.14;HRun=0;HaplotypeScore=0.00;MQ=25.96;MQ0=0;QD=24.82;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,6:5:-20.94,-1.51,-0.00:15.05
-chr1	4026581	.	T	C	45.31	PASS	AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.51;MQ0=0;OQ=56.13;QD=14.03;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,4:3:-9.11,-0.91,-0.01:9
-chr1	4026636	.	T	A	64.25	PASS	AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.75;MQ0=0;OQ=1092.89;QD=35.25;SB=-113.17	GT:AD:DP:GL:GQ	1/1:0,31:29:-112.88,-8.73,-0.01:87.28
-chr1	4026761	.	T	A	283.60	PASS	AC=2;AF=1.00;AN=2;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.63;MQ0=0;OQ=910.42;QD=32.51;SB=-440.82	GT:AD:DP:GL:GQ	1/1:0,28:25:-94.63,-7.53,-0.01:75.24
-chr1	4026798	.	G	C	10.99	LowQual	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=22.58;MQ0=0;QD=2.20;SB=-10.00	GT:AD:DP:GL:GQ	0/1:2,3:1:-4.35,-0.30,-0.00:1.76
-chr1	4026914	.	T	C	49.44	PASS	AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.57;MQ0=0;OQ=246.59;QD=24.66;SB=-150.73	GT:AD:DP:GL:GQ	1/1:0,10:9:-28.25,-2.72,-0.01:27.05
-chr1	4026927	.	A	T	206.91	PASS	AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.61;MQ0=0;OQ=634.07;QD=30.19;SB=-308.12	GT:AD:DP:GL:GQ	1/1:0,21:18:-67.00,-5.42,-0.01:54.16
-chr1	4027026	.	C	T	64.95	Indel	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=32.20;MQ0=1;QD=1.71;SB=-49.74	GT:AD:DP:GL:GQ	0/1:32,6:37:-20.92,-11.15,-115.91:97.79
-chr1	4027042	.	T	C	614.97	Indel	AC=2;AF=1.00;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=29.00;MQ0=0;QD=27.95;SB=-154.73	GT:AD:DP:GL:GQ	1/1:0,22:21:-65.11,-6.34,-0.03:63.13
-chr1	4027052	.	T	C	696.49	Indel	AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=34.82;SB=-114.05	GT:AD:DP:GL:GQ	1/1:0,20:20:-73.24,-6.03,-0.01:60.18
-chr1	4027210	.	G	C	19.50	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=26.88;MQ0=0;QD=1.39;SB=-27.39	GT:AD:DP:GL:GQ	0/1:12,2:10:-8.24,-3.01,-36.19:52.28
-chr1	4027332	.	C	G	36.70	PASS	AC=2;AF=1.00;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.49;MQ0=0;OQ=1976.71;QD=43.93;SB=-544.06	GT:AD:DP:GL:GQ	1/1:0,45:45:-201.27,-13.56,-0.01:99
-chr1	4027338	.	T	C	290.59	PASS	AC=2;AF=1.00;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.34;MQ0=0;OQ=1625.12;QD=35.33;SB=-497.48	GT:AD:DP:GL:GQ	1/1:0,46:46:-166.11,-13.85,-0.01:99
-chr1	4027382	rs4654478	T	C	529.46	Indel	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=33.88;MQ0=0;QD=11.77;SB=-150.80	GT:AD:DP:GL:GQ	0/1:25,20:45:-69.78,-13.55,-102.60:99
-chr1	4027391	.	A	T	124.12	Indel	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=29.00;MQ0=0;QD=3.18;SB=-45.98	GT:AD:DP:GL:GQ	0/1:32,7:37:-26.84,-11.14,-119.06:99
-chr1	4027395	.	T	A	21.79	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=29.00;MQ0=0;QD=0.61;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,4:36:-16.30,-10.84,-120.25:54.60
-chr1	4027428	rs4654405	C	A	54.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=1067.75;QD=35.59;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,30:30:-110.36,-9.03,-0.00:90.28
-chr1	4027512	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=38;Dels=0.03;HRun=0;HaplotypeScore=41.12;MQ=30.70;MQ0=0;OQ=583.71;QD=15.36;SB=-96.83	GT:AD:DP:GL:GQ	0/1:11,26:29:-70.09,-8.44,-49.32:99
-chr1	4027516	.	C	G	4.55	PASS	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=30.66;MQ0=0;OQ=294.17;QD=7.54;SB=2.04	GT:AD:DP:GL:GQ	0/1:30,9:29:-41.44,-8.74,-84.22:99
-chr1	4027660	rs4654407	G	A	193.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=42.76;MQ0=0;OQ=2435.59;QD=39.28;SB=-760.64	GT:AD:DP:GL:GQ	1/1:0,62:62:-247.16,-18.68,-0.02:99
-chr1	4027721	rs4654408	C	T	529.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.67;MQ0=0;OQ=1726.14;QD=39.23;SB=-623.32	GT:AD:DP:GL:GQ	1/1:0,44:43:-176.21,-12.95,-0.01:99
-chr1	4027907	rs4654409	G	A	268.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.85;MQ0=0;OQ=2188.75;QD=36.48;SB=-1120.98	GT:AD:DP:GL:GQ	1/1:0,60:57:-222.49,-17.18,-0.03:99
-chr1	4028014	rs10915398	T	C	85.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.65;MQ0=0;OQ=1826.56;QD=33.83;SB=-678.24	GT:AD:DP:GL:GQ	1/1:0,54:52:-186.26,-15.66,-0.02:99
-chr1	4028230	rs10753357	A	C	280.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.61;MQ0=0;OQ=1933.90;QD=32.78;SB=-901.67	GT:AD:DP:GL:GQ	1/1:0,59:56:-196.99,-16.87,-0.02:99
-chr1	4028383	rs10753358	C	A	101.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=59.50;MQ0=0;OQ=3292.23;QD=35.40;SB=-1450.96	GT:AD:DP:GL:GQ	1/1:0,93:90:-328.22,-27.11,-0.03:99
-chr1	4028555	rs10915400	C	T	609.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2231.72;QD=39.15;SB=-1113.00	GT:AD:DP:GL:GQ	1/1:0,57:57:-226.78,-17.18,-0.02:99
-chr1	4028627	rs11586513	G	A	570.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2205.25;QD=39.38;SB=-957.37	GT:AD:DP:GL:GQ	1/1:0,56:55:-224.12,-16.57,-0.01:99
-chr1	4029107	rs17404781	C	A	590.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2642.82;QD=36.71;SB=-848.25	GT:AD:DP:GL:GQ	1/1:0,72:72:-267.88,-21.68,-0.02:99
-chr1	4029794	rs4603097	A	G	153.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=2799.69;QD=36.36;SB=-819.68	GT:AD:DP:GL:GQ	1/1:1,76:76:-283.57,-22.89,-0.02:99
-chr1	4030208	rs4130940	A	G	693.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3003.68;QD=34.53;SB=-1360.53	GT:AD:DP:GL:GQ	1/1:0,87:86:-303.98,-25.91,-0.03:99
-chr1	4030429	rs4130941	T	C	169.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=60.00;MQ0=0;OQ=3432.78;QD=35.76;SB=-1689.36	GT:AD:DP:GL:GQ	1/1:0,96:95:-342.28,-28.61,-0.03:99
-chr1	4030544	rs4391636	T	C	184.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2626.35;QD=31.27;SB=-1250.03	GT:AD:DP:GL:GQ	1/1:0,84:83:-266.29,-25.03,-0.07:99
-chr1	4030874	rs4262509	T	C	686.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=2253.22;QD=36.34;SB=-816.67	GT:AD:DP:GL:GQ	1/1:0,62:62:-228.93,-18.68,-0.02:99
-chr1	4031041	rs4400586	C	T	220	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=2740.70;QD=40.30;SB=-1397.85	GT:AD:DP:GL:GQ	1/1:0,68:68:-277.67,-20.48,-0.01:99
-chr1	4031109	rs7537141	A	G	223.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.17;MQ=58.69;MQ0=0;OQ=2389.72;QD=33.66;SB=-1060.09	GT:AD:DP:GL:GQ	1/1:0,70:68:-242.58,-20.48,-0.02:99
-chr1	4031170	rs7537236	A	G	284.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.42;MQ0=0;OQ=1865.29;QD=33.31;SB=-585.57	GT:AD:DP:GL:GQ	1/1:0,56:52:-190.13,-15.66,-0.02:99
-chr1	4031176	rs7537237	A	G	151.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=58.47;MQ0=0;OQ=1912.22;QD=32.97;SB=-672.55	GT:AD:DP:GL:GQ	1/1:0,58:55:-194.84,-16.57,-0.03:99
-chr1	4031220	rs7532788	C	T	294.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.01;MQ0=0;OQ=2323.83;QD=38.10;SB=-1060.94	GT:AD:DP:GL:GQ	1/1:0,60:59:-235.99,-17.78,-0.02:99
-chr1	4031586	rs3936238	A	G	138.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=58.69;MQ0=0;OQ=2519.09;QD=35.48;SB=-1162.71	GT:AD:DP:GL:GQ	1/1:0,71:71:-255.52,-21.39,-0.03:99
-chr1	4031878	rs9628649	C	T	644.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=2284.52;QD=38.72;SB=-825.09	GT:AD:DP:GL:GQ	1/1:0,59:58:-232.06,-17.48,-0.02:99
-chr1	4031986	rs9628650	G	T	130.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=59.09;MQ0=0;OQ=2689.72;QD=35.39;SB=-1301.17	GT:AD:DP:GL:GQ	1/1:0,75:74:-272.58,-22.29,-0.02:99
-chr1	4032433	rs7529548	G	C	483.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=2621.92;QD=40.34;SB=-1086.06	GT:AD:DP:GL:GQ	1/1:0,65:62:-265.80,-18.69,-0.02:99
-chr1	4032637	rs7538658	C	T	720.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2747.15;QD=39.25;SB=-1233.63	GT:AD:DP:GL:GQ	1/1:0,70:70:-278.33,-21.09,-0.03:99
-chr1	4032742	rs7529853	G	C	195.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.01;HRun=0;HaplotypeScore=1.43;MQ=59.67;MQ0=0;OQ=2970.07;QD=42.43;SB=-1256.98	GT:AD:DP:GL:GQ	1/1:0,69:70:-300.61,-20.79,-0.02:99
-chr1	4032815	rs10157040	T	G	55.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=2073.63;QD=33.99;SB=-743.38	GT:AD:DP:GL:GQ	1/1:0,61:60:-210.97,-18.07,-0.02:99
-chr1	4032895	rs60405213	A	G	332.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=1606.75;QD=29.75;SB=-645.91	GT:AD:DP:GL:GQ	1/1:0,54:50:-164.30,-15.08,-0.04:99
-chr1	4032956	rs10157057	T	C	590.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=1852.28;QD=34.95;SB=-804.30	GT:AD:DP:GL:GQ	1/1:0,53:53:-188.83,-15.97,-0.02:99
-chr1	4033505	.	A	T	38.74	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=20;HaplotypeScore=16.08;MQ=50.01;MQ0=1;QD=0.73;SB=62.20	GT:AD:DP:GL:GQ	0/1:43,10:38:-18.61,-11.45,-119.32:71.58
-chr1	4035925	rs6686087	G	A	676.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=1910.92;QD=36.06;SB=-777.68	GT:AD:DP:GL:GQ	1/1:0,53:52:-194.71,-15.68,-0.03:99
-chr1	4036210	rs7553013	A	G	89.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=1455.02;QD=35.49;SB=-567.89	GT:AD:DP:GL:GQ	1/1:0,41:41:-149.10,-12.35,-0.01:99
-chr1	4037078	rs6671404	G	A	595.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.26;MQ0=0;OQ=2338.43;QD=39.63;SB=-1084.95	GT:AD:DP:GL:GQ	1/1:0,59:59:-237.45,-17.77,-0.02:99
-chr1	4037233	.	C	T	0.09	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=10.47;MQ=23.53;MQ0=14;OQ=386.45;QD=7.43;SB=-174.70	GT:AD:DP:GL:GQ	0/1:24,28:16:-46.75,-4.82,-13.21:83.85
-chr1	4037300	rs12731949	G	A	33.47	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=10.93;MQ=13.10;MQ0=15;QD=0.96;SB=-6.99	GT:AD:DP:GL:GQ	0/1:26,6:3:-7.53,-0.90,-3.57:26.65
-chr1	4037316	.	A	G	19.58	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=10.60;MQ0=15;QD=0.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,4:3:-6.14,-0.91,-2.76:18.51
-chr1	4037317	rs12747176	C	T	33.48	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=10.78;MQ0=15;QD=1.20;SB=-10.00	GT:AD:DP:GL:GQ	0/1:25,3:3:-7.53,-0.90,-3.30:23.93
-chr1	4037349	rs55974954	C	T	4.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=15.25;MQ0=10;OQ=78.13;QD=3.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:11,9:5:-12.60,-1.51,-5.79:42.85
-chr1	4037373	.	C	T	49.25	HARD_TO_VALIDATE;LowQual;SnpCluster	AC=2;AF=1.00;AN=2;DP=23;Dels=0.09;HRun=0;HaplotypeScore=5.10;MQ=12.43;MQ0=14;QD=2.14;SB=-10.00	GT:AD:DP:GL:GQ	1/1:17,4:2:-8.33,-0.60,-0.00:6.02
-chr1	4037374	rs58910132	A	G	67.17	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.10;HRun=0;HaplotypeScore=2.46;MQ=12.64;MQ0=13;QD=3.20;SB=-10.00	GT:AD:DP:GL:GQ	1/1:14,5:3:-10.21,-0.90,-0.00:9.03
-chr1	4037375	.	C	T	89.13	HARD_TO_VALIDATE;SnpCluster	AC=2;AF=1.00;AN=2;DP=21;Dels=0.10;HRun=0;HaplotypeScore=2.62;MQ=12.64;MQ0=13;QD=4.24;SB=-10.00	GT:AD:DP:GL:GQ	1/1:14,5:3:-12.40,-0.90,-0.00:9.03
-chr1	4037523	.	C	T	36.25	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=8.14;MQ=8.07;MQ0=27;QD=0.91;SB=-10.00	GT:AD:DP:GL:GQ	0/1:35,5:3:-7.81,-0.90,-3.47:25.65
-chr1	4037532	.	G	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=7.98;MQ=8.93;MQ0=30;OQ=75.12;QD=1.67;SB=-10.00	GT:AD:DP:GL:GQ	0/1:32,13:5:-12.30,-1.51,-6.19:46.86
-chr1	4037589	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=30.55;MQ=12.67;MQ0=42;OQ=141.32;QD=1.74;SB=-10.00	GT:AD:DP:GL:GQ	0/1:62,18:18:-22.84,-5.42,-40.02:99
-chr1	4037590	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=31.66;MQ=13.12;MQ0=42;OQ=99.34;QD=1.18;SB=-10.00	GT:AD:DP:GL:GQ	0/1:65,14:18:-18.65,-5.43,-43.06:99
-chr1	4037755	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=10.80;MQ=28.57;MQ0=9;OQ=123.11;QD=4.25;SB=-10.00	GT:AD:DP:GL:GQ	0/1:16,13:15:-20.11,-4.52,-34.90:99
-chr1	4037764	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=27.02;MQ0=10;OQ=406.03;QD=10.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,21:18:-49.31,-5.43,-18.48:99
-chr1	4037797	.	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=2.36;MQ=25.37;MQ0=16;OQ=242.41;QD=2.96;SB=-0.99	GT:AD:DP:GL:GQ	0/1:69,13:49:-42.29,-14.76,-143.27:99
-chr1	4037813	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=30.43;MQ=23.50;MQ0=19;OQ=796.43;QD=8.38;SB=2.04	GT:AD:DP:GL:GQ	0/1:48,46:55:-99.50,-16.57,-97.10:99
-chr1	4037822	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=35.10;MQ=23.24;MQ0=31;OQ=606.69;QD=4.81;SB=-57.33	GT:AD:DP:GL:GQ	0/1:70,54:63:-82.95,-19.00,-147.74:99
-chr1	4037843	rs61768802	C	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=1;HaplotypeScore=17.92;MQ=21.78;MQ0=58;OQ=417.65;QD=2.32;SB=-34.91	GT:AD:DP:GL:GQ	0/1:148,32:87:-71.25,-26.21,-246.67:99
-chr1	4037880	rs61768803	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=196;Dels=0.00;HRun=0;HaplotypeScore=29.31;MQ=22.28;MQ0=61;OQ=120.84;QD=0.62;SB=11.02	GT:AD:DP:GL:GQ	0/1:165,26:69:-36.22,-20.85,-175.88:99
-chr1	4037929	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=21.90;MQ0=34;OQ=107.87;QD=1.14;SB=35.15	GT:AD:DP:GL:GQ	0/1:76,17:46:-27.95,-13.88,-137.64:99
-chr1	4037943	.	C	T	85.40	PASS	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=21.61;MQ0=16;OQ=809.30;QD=13.95;SB=-392.58	GT:AD:DP:GL:GQ	0/1:14,44:31:-93.56,-9.34,-20.82:99
-chr1	4037953	.	T	C	0.02	FDRtranche1.00to2.00	AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=3;HaplotypeScore=11.12;MQ=21.57;MQ0=12;OQ=534.72;QD=14.07;SB=-137.10	GT:AD:DP:GL:GQ	1/1:2,36:20:-60.44,-6.03,-3.38:26.46
-chr1	4037971	.	G	A	35.49	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=11.71;MQ0=7;QD=2.96;SB=-7.00	GT:AD:DP:GL:GQ	0/1:2,10:3:-7.73,-0.90,-2.97:20.65
-chr1	4038007	.	C	T	11.96	PASS	AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=24.37;MQ0=17;OQ=478.18;QD=12.58;SB=-0.67	GT:AD:DP:GL:GQ	1/1:9,29:15:-54.99,-4.52,-3.70:8.18
-chr1	4038085	.	G	A	6.73	PASS	AC=2;AF=1.00;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=25.54;MQ0=21;OQ=1434.12;QD=19.65;SB=-222.29	GT:AD:DP:GL:GQ	1/1:0,70:37:-147.01,-11.15,-0.01:99
-chr1	4038095	.	A	C	37.18	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=2;HaplotypeScore=5.05;MQ=31.28;MQ0=12;QD=0.48;SB=35.10	GT:AD:DP:GL:GQ	0/1:67,11:51:-22.37,-15.37,-153.89:70.01
-chr1	4038119	rs61768805	A	G	52.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=34.39;MQ0=8;OQ=2201.59;QD=25.60;SB=-880.89	GT:AD:DP:GL:GQ	1/1:0,86:64:-223.78,-19.28,-0.04:99
-chr1	4038137	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=16.06;MQ=35.46;MQ0=14;OQ=344.80;QD=2.45;SB=-97.28	GT:AD:DP:GL:GQ	0/1:105,36:95:-66.41,-28.65,-282.14:99
-chr1	4038181	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=35.03;MQ0=15;OQ=1093.66;QD=4.11;SB=-524.11	GT:AD:DP:GL:GQ	0/1:186,80:195:-171.41,-58.76,-524.00:99
-chr1	4038248	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=30.85;MQ=29.46;MQ0=44;OQ=1065.01;QD=3.80;SB=-230.16	GT:AD:DP:GL:GQ	0/1:155,104:139:-156.85,-47.07,-312.49:99
-chr1	4038269	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=2;HaplotypeScore=13.90;MQ=27.15;MQ0=44;OQ=427.47;QD=1.93;SB=-154.75	GT:AD:DP:GL:GQ	0/1:158,62:110:-79.18,-33.15,-296.78:99
-chr1	4038306	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=30.95;MQ=24.15;MQ0=24;OQ=80.75;QD=0.71;SB=17.44	GT:AD:DP:GL:GQ	0/1:88,21:54:-27.64,-16.28,-152.20:99
-chr1	4038311	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=30.17;MQ=23.18;MQ0=20;OQ=320.40;QD=3.56;SB=-113.10	GT:AD:DP:GL:GQ	0/1:60,30:46:-49.20,-13.87,-108.56:99
-chr1	4038321	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=3;HaplotypeScore=15.26;MQ=23.68;MQ0=14;OQ=766.53;QD=12.99;SB=-327.28	GT:AD:DP:GL:GQ	0/1:10,49:31:-89.28,-9.34,-16.69:73.43
-chr1	4038334	.	G	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=25.40;MQ0=9;OQ=78.94;QD=1.49;SB=-27.72	GT:AD:DP:GL:GQ	0/1:40,11:25:-21.55,-10.37,-63.16:99
-chr1	4038397	.	A	G	17.54	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=29.53;MQ0=4;OQ=326.31;QD=7.42;SB=-58.84	GT:AD:DP:GL:GQ	0/1:24,20:28:-44.35,-8.44,-57.72:99
-chr1	4038422	rs61768806	G	A	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=18.20;MQ=33.84;MQ0=4;OQ=183.71;QD=3.40;SB=-62.31	GT:AD:DP:GL:GQ	0/1:35,13:24:-31.46,-9.80,-50.09:99
-chr1	4038450	rs9426493	G	A	0.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=7.50;MQ=40.53;MQ0=7;OQ=257.95;QD=3.31;SB=38.10	GT:AD:DP:GL:GQ	0/1:50,27:46:-42.95,-13.87,-108.04:99
-chr1	4038485	.	T	C	49.84	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=36.99;MQ=38.79;MQ0=13;QD=0.38;SB=-42.38	GT:AD:DP:GL:GQ	0/1:107,23:79:-32.08,-23.81,-273.26:82.67
-chr1	4038495	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=3;HaplotypeScore=26.37;MQ=38.36;MQ0=11;OQ=110.49;QD=0.81;SB=81.70	GT:AD:DP:GL:GQ	0/1:101,35:77:-37.55,-23.22,-250.69:99
-chr1	4038559	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=2;HaplotypeScore=4.40;MQ=37.40;MQ0=14;OQ=181.94;QD=1.28;SB=76.72	GT:AD:DP:GL:GQ	0/1:114,27:102:-52.21,-30.74,-302.69:99
-chr1	4038595	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=10.57;MQ=44.92;MQ0=10;OQ=118.91;QD=1.67;SB=44.58	GT:AD:DP:GL:GQ	0/1:49,22:52:-30.86,-15.68,-162.15:99
-chr1	4038920	rs12240075	G	A	506.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.13;MQ0=0;OQ=3029.69;QD=39.35;SB=-1486.40	GT:AD:DP:GL:GQ	1/1:0,77:75:-306.57,-22.59,-0.02:99
-chr1	4039098	rs4073835	G	A	496.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2305.48;QD=39.08;SB=-997.03	GT:AD:DP:GL:GQ	1/1:0,59:59:-234.15,-17.78,-0.02:99
-chr1	4039791	rs4639725	C	T	236.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.67;MQ0=0;OQ=2672.94;QD=38.18;SB=-1315.36	GT:AD:DP:GL:GQ	1/1:0,70:69:-270.90,-20.79,-0.02:99
-chr1	4039890	rs4436359	C	A	272.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=60.00;MQ0=0;OQ=1804.54;QD=34.70;SB=-797.85	GT:AD:DP:GL:GQ	1/1:1,51:51:-184.06,-15.36,-0.02:99
-chr1	4040736	rs6684922	G	A	149.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=2464.15;QD=39.74;SB=-984.31	GT:AD:DP:GL:GQ	1/1:0,62:61:-250.01,-18.37,-0.01:99
-chr1	4041212	rs7418376	A	G	9.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.36;MQ=59.69;MQ0=0;OQ=2587.00;QD=34.49;SB=-1318.64	GT:AD:DP:GL:GQ	1/1:0,75:71:-262.30,-21.38,-0.02:99
-chr1	4041774	rs6657076	T	C	524.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=2268.81;QD=30.25;SB=-1070.20	GT:AD:DP:GL:GQ	1/1:0,75:71:-230.53,-21.41,-0.06:99
-chr1	4045735	rs10915422	A	C	14.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=4.42;MQ=59.68;MQ0=0;OQ=2455.12;QD=33.63;SB=-728.83	GT:AD:DP:GL:GQ	1/1:0,73:71:-249.12,-21.38,-0.02:99
-chr1	4045888	rs10915423	A	C	727.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2031.28;QD=35.02;SB=-998.12	GT:AD:DP:GL:GQ	1/1:0,58:58:-206.73,-17.47,-0.02:99
-chr1	4046948	rs10915425	T	G	80.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=53.47;MQ0=0;OQ=1869.59;QD=31.69;SB=-736.37	GT:AD:DP:GL:GQ	1/1:0,59:55:-190.57,-16.57,-0.02:99
-chr1	4046996	rs55774050	C	G	2240.61	Indel	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=9.46;MQ=51.11;MQ0=0;QD=43.09;SB=-978.74	GT:AD:DP:GL:GQ	1/1:0,52:52:-227.66,-15.67,-0.01:99
-chr1	4047821	rs11578552	T	C	402.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=2100.45;QD=30.89;SB=-846.51	GT:AD:DP:GL:GQ	1/1:0,68:66:-213.69,-19.91,-0.06:99
-chr1	4047883	rs11577344	C	T	490.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1935.40;QD=37.95;SB=-660.87	GT:AD:DP:GL:GQ	1/1:0,51:48:-197.13,-14.46,-0.01:99
-chr1	4049164	rs7411603	A	G	3.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=6.69;MQ=58.71;MQ0=0;OQ=1270.28;QD=27.03;SB=-493.17	GT:AD:DP:GL:GQ	1/1:0,47:41:-130.65,-12.36,-0.04:99
-chr1	4050387	rs10753365	G	A	99.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.61;MQ0=0;OQ=1534.51;QD=32.65;SB=-464.08	GT:AD:DP:GL:GQ	1/1:0,46:42:-157.07,-12.67,-0.03:99
-chr1	4051611	rs4548406	T	C	78.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1346.57;QD=28.65;SB=-544.85	GT:AD:DP:GL:GQ	1/1:0,47:44:-138.29,-13.28,-0.05:99
-chr1	4051999	rs12123119	C	T	624.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2169.89;QD=37.41;SB=-1044.39	GT:AD:DP:GL:GQ	1/1:0,58:55:-220.59,-16.57,-0.02:99
-chr1	4052066	rs4654410	C	T	678.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=2087.99;QD=37.96;SB=-873.17	GT:AD:DP:GL:GQ	1/1:0,55:53:-212.40,-15.97,-0.02:99
-chr1	4052788	rs4481820	C	A	313.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=1188.08;QD=18.86;SB=-612.83	GT:AD:DP:GL:GQ	0/1:26,37:61:-140.47,-18.38,-73.47:99
-chr1	4052947	rs6676961	T	G	272.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=1401.56;QD=15.75;SB=-713.67	GT:AD:DP:GL:GQ	0/1:39,50:87:-169.64,-26.20,-144.08:99
-chr1	4053067	rs12125719	A	G	101.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.17;MQ0=0;OQ=1483.09;QD=29.08;SB=-606.95	GT:AD:DP:GL:GQ	1/1:0,51:48:-151.94,-14.48,-0.05:99
-chr1	4053090	rs12125725	A	G	83.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.17;MQ0=0;OQ=1585.81;QD=31.09;SB=-493.18	GT:AD:DP:GL:GQ	1/1:0,51:49:-162.20,-14.77,-0.03:99
-chr1	4053122	rs12126649	T	C	176.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=59.24;MQ0=0;OQ=907.97;QD=14.88;SB=-331.31	GT:AD:DP:GL:GQ	0/1:25,36:59:-111.87,-17.79,-96.53:99
-chr1	4055170	rs12033210	T	C	0.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=28.53;MQ0=2;OQ=209.19;QD=4.65;SB=-102.57	GT:AD:DP:GL:GQ	0/1:32,13:39:-35.96,-11.75,-110.64:99
-chr1	4056038	rs10799198	G	A	260.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=58.67;MQ0=0;OQ=782.28;QD=15.96;SB=-386.17	GT:AD:DP:GL:GQ	0/1:25,24:47:-95.68,-14.17,-75.73:99
-chr1	4057058	rs4600014	A	G	442.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=917.69;QD=13.70;SB=-389.30	GT:AD:DP:GL:GQ	0/1:34,33:66:-114.93,-19.88,-136.81:99
-chr1	4057633	rs4361964	G	C	120.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=59.22;MQ0=0;OQ=837.80;QD=15.51;SB=-437.88	GT:AD:DP:GL:GQ	0/1:29,25:53:-103.04,-15.97,-126.00:99
-chr1	4057702	rs4351611	C	T	297.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.56;MQ0=0;OQ=594.05;QD=11.21;SB=-284.78	GT:AD:DP:GL:GQ	0/1:33,20:53:-78.67,-15.98,-105.42:99
-chr1	4057917	.	A	T	65.58	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.62;MQ0=0;OQ=752.30;QD=12.54;SB=-170.72	GT:AD:DP:GL:GQ	0/1:33,27:58:-95.98,-17.47,-122.23:99
-chr1	4058815	rs10915428	G	T	369.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.39;MQ0=0;OQ=1224.65;QD=16.11;SB=-630.74	GT:AD:DP:GL:GQ	0/1:35,41:75:-148.34,-22.59,-115.71:99
-chr1	4059239	rs10799199	C	T	251.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.66;MQ0=0;OQ=1243.57;QD=18.84;SB=-304.82	GT:AD:DP:GL:GQ	0/1:29,37:64:-146.92,-19.28,-100.42:99
-chr1	4059378	.	C	T	11.57	PASS	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=59.47;MQ0=0;OQ=1236.26;QD=14.72;SB=-551.55	GT:AD:DP:GL:GQ	0/1:45,38:82:-151.61,-24.70,-168.36:99
-chr1	4060338	rs10799200	T	C	170.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=152.75;QD=7.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:13,7:19:-24.28,-5.72,-48.27:99
-chr1	4064782	rs61768818	G	A	481.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.07;MQ0=0;OQ=848.15;QD=13.90;SB=-350.47	GT:AD:DP:GL:GQ	0/1:34,27:59:-105.87,-17.77,-118.54:99
-chr1	4066674	rs12032257	C	T	294.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.36;MQ0=0;OQ=916.01;QD=14.09;SB=-410.80	GT:AD:DP:GL:GQ	0/1:35,30:64:-114.18,-19.29,-113.47:99
-chr1	4067283	.	T	C	0.61	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=2;HaplotypeScore=4.39;MQ=59.62;MQ0=0;OQ=557.04;QD=9.13;SB=-241.90	GT:AD:DP:GL:GQ	0/1:35,25:58:-76.48,-17.49,-133.72:99
-chr1	4067926	rs7542313	A	G	387.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=220.94;QD=10.52;SB=-100.82	GT:AD:DP:GL:GQ	0/1:11,10:19:-31.10,-5.72,-40.90:99
-chr1	4075727	.	C	T	158.87	PASS	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.34;MQ=59.67;MQ0=0;OQ=1143.65;QD=16.34;SB=-503.75	GT:AD:DP:GL:GQ	0/1:35,35:66:-137.54,-19.89,-102.02:99
-chr1	4075966	rs6670920	T	C	606.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1104.32;QD=15.13;SB=-452.80	GT:AD:DP:GL:GQ	0/1:30,43:71:-135.11,-21.40,-121.92:99
-chr1	4077630	rs4654486	G	A	691.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2711.47;QD=39.87;SB=-1087.95	GT:AD:DP:GL:GQ	1/1:0,68:68:-274.75,-20.48,-0.02:99
-chr1	4078163	rs10737402	T	C	504.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=530.04;QD=10.82;SB=-231.26	GT:AD:DP:GL:GQ	0/1:26,23:49:-71.06,-14.78,-100.24:99
-chr1	4080498	rs12042946	T	C	249.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.30;MQ0=0;OQ=891.53;QD=12.56;SB=-237.45	GT:AD:DP:GL:GQ	0/1:37,34:69:-113.22,-20.78,-148.64:99
-chr1	4080702	rs12040805	C	T	139.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.60;MQ0=0;OQ=776.81;QD=15.54;SB=-108.61	GT:AD:DP:GL:GQ	0/1:26,24:46:-94.83,-13.87,-71.68:99
-chr1	4081256	rs10753367	T	C	35.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=3;HaplotypeScore=2.04;MQ=59.74;MQ0=0;OQ=1167.96;QD=12.98;SB=-513.88	GT:AD:DP:GL:GQ	0/1:48,42:88:-146.59,-26.51,-188.24:99
-chr1	4081433	rs10799203	T	G	17.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.59;MQ0=0;OQ=328.89;QD=7.15;SB=-123.86	GT:AD:DP:GL:GQ	0/1:29,17:43:-49.13,-12.95,-102.00:99
-chr1	4082645	rs4400585	G	T	491.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=492.73;QD=10.71;SB=-210.53	GT:AD:DP:GL:GQ	0/1:27,19:44:-65.81,-13.26,-82.00:99
-chr1	4082866	rs10915437	A	G	75.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=4.59;MQ=58.36;MQ0=0;OQ=891.90;QD=12.56;SB=-289.16	GT:AD:DP:GL:GQ	0/1:37,34:68:-112.97,-20.49,-138.67:99
-chr1	4083359	rs56090673	C	T	320.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1009.69;QD=17.11;SB=-451.46	GT:AD:DP:GL:GQ	0/1:27,32:58:-121.73,-17.48,-93.77:99
-chr1	4083978	rs7531421	A	G	116.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=57.42;MQ0=0;OQ=435.48;QD=7.02;SB=-215.25	GT:AD:DP:GL:GQ	0/1:41,21:60:-64.91,-18.08,-162.54:99
-chr1	4084862	rs6675734	C	T	47.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=59.20;MQ0=0;OQ=1105.86;QD=19.07;SB=-554.64	GT:AD:DP:GL:GQ	0/1:25,33:57:-131.05,-17.18,-82.44:99
-chr1	4084986	rs10753368	A	G	566.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1198.41;QD=14.10;SB=-565.61	GT:AD:DP:GL:GQ	0/1:44,41:83:-148.13,-25.00,-168.94:99
-chr1	4085630	rs6679136	C	T	24.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=4.32;MQ=58.42;MQ0=0;OQ=804.43;QD=14.36;SB=-252.24	GT:AD:DP:GL:GQ	0/1:29,27:53:-99.70,-15.97,-99.87:99
-chr1	4085663	rs6669476	G	A	136.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=57.81;MQ0=0;OQ=833.61;QD=13.89;SB=-171.20	GT:AD:DP:GL:GQ	0/1:32,27:56:-103.51,-16.87,-106.04:99
-chr1	4086169	rs6426389	C	T	138.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.69;MQ0=0;OQ=1183.25;QD=19.72;SB=-609.44	GT:AD:DP:GL:GQ	0/1:26,34:60:-139.68,-18.07,-94.16:99
-chr1	4086333	rs6663976	C	G	599.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=3962.79;QD=44.03;SB=-1451.88	GT:AD:DP:GL:GQ	1/1:0,90:89:-395.28,-26.81,-0.02:99
-chr1	4087812	rs4654487	T	C	259.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=59.52;MQ0=0;OQ=1480.85;QD=30.85;SB=-766.73	GT:AD:DP:GL:GQ	1/1:0,48:47:-151.71,-14.17,-0.04:99
-chr1	4089403	.	G	C	16.75	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.80;MQ=58.74;MQ0=0;QD=0.45;SB=53.21	GT:AD:DP:GL:GQ	0/1:27,10:26:-12.79,-7.84,-102.04:49.49
-chr1	4089489	rs7536041	T	C	90.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.19;MQ0=0;OQ=812.10;QD=15.62;SB=-146.31	GT:AD:DP:GL:GQ	0/1:23,29:51:-99.86,-15.37,-93.49:99
-chr1	4090545	rs4282783	T	G	725.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2332.11;QD=35.34;SB=-970.80	GT:AD:DP:GL:GQ	1/1:0,66:66:-236.81,-19.88,-0.02:99
-chr1	4091584	rs4654488	A	T	219.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.30;MQ=60.00;MQ0=0;OQ=743.21;QD=16.52;SB=-370.44	GT:AD:DP:GL:GQ	0/1:20,25:44:-90.86,-13.25,-75.80:99
-chr1	4092168	rs10915441	C	G	2.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=4;HaplotypeScore=3.62;MQ=59.69;MQ0=0;OQ=1389.48;QD=18.78;SB=-645.48	GT:AD:DP:GL:GQ	0/1:35,39:69:-163.06,-20.83,-116.77:99
-chr1	4092567	rs10915442	A	G	394.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.42;MQ0=0;OQ=572.04;QD=14.30;SB=-311.22	GT:AD:DP:GL:GQ	0/1:18,22:39:-72.24,-11.76,-67.58:99
-chr1	4093270	rs10799206	C	G	674.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.42;MQ0=0;OQ=2045.47;QD=38.59;SB=-902.40	GT:AD:DP:GL:GQ	1/1:0,52:50:-208.16,-15.07,-0.02:99
-chr1	4093286	rs12409803	G	A	414.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=57.03;MQ0=0;OQ=773.71;QD=14.33;SB=-322.45	GT:AD:DP:GL:GQ	0/1:28,26:51:-96.03,-15.38,-79.04:99
-chr1	4093324	rs10915443	G	C	254.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=58.02;MQ0=0;OQ=1430.72;QD=20.15;SB=-674.45	GT:AD:DP:GL:GQ	0/1:30,40:69:-167.15,-20.79,-134.28:99
-chr1	4093733	rs6693173	A	G	464.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1381.36;QD=28.78;SB=-644.93	GT:AD:DP:GL:GQ	1/1:0,48:45:-141.76,-13.57,-0.04:99
-chr1	4094457	rs4131506	A	C	340.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.60;MQ0=0;OQ=704.94;QD=12.15;SB=-316.99	GT:AD:DP:GL:GQ	0/1:32,26:58:-91.25,-17.47,-120.43:99
-chr1	4094660	rs4131508	A	G	571.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=1332.71;QD=17.31;SB=-634.89	GT:AD:DP:GL:GQ	0/1:33,44:77:-159.75,-23.19,-134.55:99
-chr1	4094683	rs4630099	A	G	443.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1288.63;QD=16.31;SB=-670.63	GT:AD:DP:GL:GQ	0/1:36,43:77:-155.34,-23.19,-143.15:99
-chr1	4095397	rs10915444	T	C	1.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=8.82;MQ=58.53;MQ0=0;OQ=789.45;QD=10.25;SB=-380.13	GT:AD:DP:GL:GQ	0/1:49,28:72:-103.91,-21.68,-179.32:99
-chr1	4095558	rs35986531	G	A	271.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=56.64;MQ0=0;OQ=1336.75;QD=16.71;SB=-522.69	GT:AD:DP:GL:GQ	0/1:36,44:75:-159.55,-22.59,-133.47:99
-chr1	4095815	rs12118815	A	T	0.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=1;HaplotypeScore=13.10;MQ=57.70;MQ0=3;OQ=1249.48;QD=13.88;SB=-570.06	GT:AD:DP:GL:GQ	0/1:44,46:80:-152.33,-24.10,-146.70:99
-chr1	4095919	.	A	T	39.64	LowQual	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=51.56;MQ0=5;QD=0.50;SB=-37.91	GT:AD:DP:GL:GQ	0/1:71,9:66:-27.13,-19.88,-223.94:72.48
-chr1	4096225	.	A	G	48.26	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=52.24;MQ0=7;QD=0.68;SB=74.28	GT:AD:DP:GL:GQ	0/1:64,7:63:-27.09,-18.98,-229.53:81.10
-chr1	4096236	.	T	G	0.06	PASS	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=54.07;MQ0=3;OQ=91.64;QD=1.31;SB=86.24	GT:AD:DP:GL:GQ	0/1:61,9:66:-32.33,-19.88,-208.22:99
-chr1	4096240	.	A	T	0.08	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.91;MQ0=2;OQ=161.77;QD=2.16;SB=86.29	GT:AD:DP:GL:GQ	0/1:64,11:72:-41.14,-21.68,-231.71:99
-chr1	4096257	.	A	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=53.32;MQ0=2;OQ=207.48;QD=2.56;SB=92.31	GT:AD:DP:GL:GQ	0/1:68,13:79:-47.82,-23.79,-251.49:99
-chr1	4096278	.	A	G	232.76	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=27.32;MQ=52.46;MQ0=1;QD=2.68;SB=98.35	GT:AD:DP:GL:GQ	0/1:72,15:85:-52.16,-25.60,-288.15:99
-chr1	4096286	.	G	A	106.04	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=48.93;MQ=51.56;MQ0=1;QD=1.18;SB=98.32	GT:AD:DP:GL:GQ	0/1:78,12:85:-39.49,-25.60,-276.62:99
-chr1	4096288	rs34088827	G	A	955.67	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=1;HaplotypeScore=48.46;MQ=51.26;MQ0=1;QD=10.62;SB=-379.33	GT:AD:DP:GL:GQ	0/1:57,33:88:-125.36,-26.51,-207.05:99
-chr1	4096294	.	A	T	86.31	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=1;HaplotypeScore=32.32;MQ=50.46;MQ0=1;QD=0.97;SB=89.30	GT:AD:DP:GL:GQ	0/1:73,16:80:-36.01,-24.10,-264.64:99
-chr1	4096606	rs28726337	A	G	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=2;HaplotypeScore=13.44;MQ=43.57;MQ0=1;OQ=262.51;QD=2.76;SB=-123.92	GT:AD:DP:GL:GQ	0/1:75,20:86:-55.44,-25.91,-287.10:99
-chr1	4096617	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=1;HaplotypeScore=34.91;MQ=42.33;MQ0=1;OQ=1160.59;QD=10.01;SB=-606.06	GT:AD:DP:GL:GQ	0/1:70,46:109:-152.17,-32.83,-258.54:99
-chr1	4096620	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=123;Dels=0.01;HRun=0;HaplotypeScore=30.11;MQ=42.25;MQ0=1;OQ=989.14;QD=8.04;SB=-388.23	GT:AD:DP:GL:GQ	0/1:72,50:106:-134.12,-31.93,-263.47:99
-chr1	4096638	rs28412783	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=181;Dels=0.02;HRun=0;HaplotypeScore=64.64;MQ=40.70;MQ0=1;OQ=1178.07;QD=6.51;SB=-446.63	GT:AD:DP:GL:GQ	0/1:123,47:169:-194.38,-73.29,-545.37:99
-chr1	4096655	rs61768832	A	G	321.42	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=228;Dels=0.00;HRun=1;HaplotypeScore=261.82;MQ=41.93;MQ0=0;QD=1.41;SB=-157.54	GT:AD:DP:GL:GQ	0/1:199,29:224:-102.90,-67.48,-791.83:99
-chr1	4096678	.	T	G	1342.80	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=0;HaplotypeScore=216.99;MQ=43.01;MQ0=0;QD=5.69;SB=-512.77	GT:AD:DP:GL:GQ	0/1:166,63:218:-227.86,-90.30,-587.53:99
-chr1	4096685	.	A	G	1626.24	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=1;HaplotypeScore=162.66;MQ=41.97;MQ0=0;QD=6.80;SB=-808.35	GT:AD:DP:GL:GQ	0/1:167,72:225:-233.68,-67.78,-652.24:99
-chr1	4096698	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=228;Dels=0.00;HRun=0;HaplotypeScore=76.98;MQ=42.62;MQ0=0;OQ=2269.48;QD=9.95;SB=-1066.45	GT:AD:DP:GL:GQ	0/1:129,90:219:-325.16,-94.93,-493.11:99
-chr1	4096706	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=1;HaplotypeScore=79.95;MQ=43.15;MQ0=0;OQ=1034.27;QD=4.50;SB=-170.01	GT:AD:DP:GL:GQ	0/1:185,45:223:-173.88,-67.17,-658.24:99
-chr1	4096718	rs61768834	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=0;HaplotypeScore=38.48;MQ=44.61;MQ0=0;OQ=645.34;QD=2.99;SB=-265.93	GT:AD:DP:GL:GQ	0/1:168,32:157:-165.70,-97.89,-554.00:99
-chr1	4096731	.	G	A	559.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=83.54;MQ=45.39;MQ0=0;QD=3.13;SB=44.95	GT:AD:DP:GL:GQ	0/1:150,29:155:-105.94,-46.69,-468.61:99
-chr1	4096732	rs61768835	A	G	2251.43	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=2;HaplotypeScore=115.12;MQ=45.31;MQ0=0;QD=13.17;SB=-1083.79	GT:AD:DP:GL:GQ	0/1:80,91:158:-276.04,-47.61,-312.72:99
-chr1	4096736	rs61768836	A	G	2066.81	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.02;HRun=0;HaplotypeScore=91.40;MQ=45.63;MQ0=0;QD=12.23;SB=-1029.89	GT:AD:DP:GL:GQ	0/1:85,81:160:-257.27,-47.30,-336.21:99
-chr1	4096755	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=1;HaplotypeScore=46.33;MQ=46.26;MQ0=0;OQ=201.55;QD=1.56;SB=65.52	GT:AD:DP:GL:GQ	0/1:112,17:113:-57.49,-34.05,-383.82:99
-chr1	4096759	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=42.17;MQ=46.84;MQ0=0;OQ=310.94;QD=2.51;SB=-151.81	GT:AD:DP:GL:GQ	0/1:106,18:122:-71.13,-36.75,-367.88:99
-chr1	4096775	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=30.95;MQ=47.51;MQ0=0;OQ=647.24;QD=5.73;SB=52.09	GT:AD:DP:GL:GQ	0/1:87,26:107:-100.24,-32.23,-298.38:99
-chr1	4096805	.	A	G	20.07	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=14.94;MQ=48.07;MQ0=0;QD=0.18;SB=107.37	GT:AD:DP:GL:GQ	0/1:94,15:99:-35.11,-29.83,-355.50:52.86
-chr1	4096811	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=1;HaplotypeScore=14.56;MQ=47.07;MQ0=0;OQ=301.49;QD=2.87;SB=92.31	GT:AD:DP:GL:GQ	0/1:85,20:99:-63.26,-29.83,-325.00:99
-chr1	4096845	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=27.21;MQ=46.78;MQ0=0;OQ=135.08;QD=1.34;SB=107.37	GT:AD:DP:GL:GQ	0/1:86,15:98:-46.31,-29.52,-344.47:99
-chr1	4096895	rs6702633	G	A	282.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=48.03;MQ0=0;OQ=1209.14;QD=19.50;SB=-562.59	GT:AD:DP:GL:GQ	0/1:26,36:60:-142.27,-18.07,-91.55:99
-chr1	4097116	rs6663939	C	T	575.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1353.52;QD=17.35;SB=-623.00	GT:AD:DP:GL:GQ	0/1:38,40:78:-162.13,-23.49,-140.27:99
-chr1	4097278	rs4408122	C	T	90.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=3.55;MQ=60.00;MQ0=0;OQ=1285.61;QD=19.78;SB=-663.71	GT:AD:DP:GL:GQ	0/1:26,39:64:-151.13,-19.28,-94.25:99
-chr1	4097502	rs10915445	G	A	15.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=4.76;MQ=58.14;MQ0=0;OQ=1551.73;QD=21.26;SB=-659.25	GT:AD:DP:GL:GQ	0/1:29,44:69:-179.24,-20.78,-91.34:99
-chr1	4097702	rs4233259	G	A	393.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.88;MQ0=0;OQ=488.96;QD=11.64;SB=-238.49	GT:AD:DP:GL:GQ	0/1:23,19:39:-63.93,-11.75,-79.38:99
-chr1	4097847	rs4233260	A	G	265.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.25;MQ0=0;OQ=841.80;QD=15.31;SB=-425.02	GT:AD:DP:GL:GQ	0/1:21,34:53:-103.45,-15.98,-81.47:99
-chr1	4098460	rs4654489	C	T	575.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1233.62;QD=17.37;SB=-483.09	GT:AD:DP:GL:GQ	0/1:34,37:71:-148.05,-21.40,-108.91:99
-chr1	4098462	rs4654412	C	G	408.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1295.21;QD=18.24;SB=-423.31	GT:AD:DP:GL:GQ	0/1:36,35:70:-153.90,-21.10,-151.48:99
-chr1	4098561	rs4654490	T	C	109.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=5.61;MQ=59.35;MQ0=0;OQ=707.20;QD=11.05;SB=-320.12	GT:AD:DP:GL:GQ	0/1:35,29:62:-92.69,-18.69,-135.70:99
-chr1	4098636	rs4654491	A	T	298.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.55;MQ=58.32;MQ0=0;OQ=679.16;QD=12.81;SB=-348.54	GT:AD:DP:GL:GQ	0/1:28,25:51:-86.56,-15.36,-108.00:99
-chr1	4101675	rs4654492	C	T	166.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=985.64;QD=17.92;SB=-310.22	GT:AD:DP:GL:GQ	0/1:24,31:53:-117.81,-15.96,-85.09:99
-chr1	4102203	rs10799207	G	A	234.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=645.03;QD=15.36;SB=-340.37	GT:AD:DP:GL:GQ	0/1:22,20:41:-80.15,-12.36,-66.12:99
-chr1	4102678	rs7542208	A	G	473.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.58;MQ0=0;OQ=945.73;QD=14.78;SB=-439.91	GT:AD:DP:GL:GQ	0/1:26,38:62:-116.54,-18.69,-104.23:99
-chr1	4102853	rs12143662	C	T	77.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=3.06;MQ=59.31;MQ0=0;OQ=653.08;QD=14.51;SB=-306.78	GT:AD:DP:GL:GQ	0/1:23,22:43:-81.54,-12.95,-84.16:99
-chr1	4103423	rs12096127	C	T	146.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=3;HaplotypeScore=0.93;MQ=59.48;MQ0=0;OQ=1299.31;QD=16.24;SB=-452.94	GT:AD:DP:GL:GQ	0/1:42,38:79:-157.01,-23.79,-152.41:99
-chr1	4104350	.	G	A	39.75	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=50.14;MQ=43.88;MQ0=0;QD=0.41;SB=41.13	GT:AD:DP:GL:GQ	0/1:55,43:59:-25.05,-17.79,-166.63:72.58
-chr1	4104372	.	C	A	158.64	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=1;HaplotypeScore=261.20;MQ=40.26;MQ0=0;QD=1.18;SB=50.16	GT:AD:DP:GL:GQ	0/1:118,16:102:-49.87,-30.72,-316.01:99
-chr1	4104378	.	T	C	1045.41	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=132;Dels=0.09;HRun=0;HaplotypeScore=252.28;MQ=39.40;MQ0=0;QD=7.92;SB=47.18	GT:AD:DP:GL:GQ	0/1:70,50:112:-140.05,-32.23,-268.85:99
-chr1	4104379	.	G	A	1387.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=131;Dels=0.09;HRun=0;HaplotypeScore=164.33;MQ=39.20;MQ0=0;QD=10.59;SB=44.10	GT:AD:DP:GL:GQ	0/1:65,54:109:-173.34,-31.33,-223.67:99
-chr1	4104399	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=192;Dels=0.00;HRun=0;HaplotypeScore=398.28;MQ=38.87;MQ0=2;OQ=296.43;QD=1.54;SB=-98.03	GT:AD:DP:GL:GQ	0/1:164,28:154:-79.31,-46.39,-472.12:99
-chr1	4104401	rs61768839	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=194;Dels=0.00;HRun=0;HaplotypeScore=419.03;MQ=39.00;MQ0=2;OQ=166.93;QD=0.86;SB=-91.09	GT:AD:DP:GL:GQ	0/1:156,37:153:-66.06,-46.09,-471.26:99
-chr1	4104420	rs56397723	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.01;HRun=1;HaplotypeScore=92.55;MQ=41.09;MQ0=3;OQ=4650.56;QD=18.45;SB=-702.42	GT:AD:DP:GL:GQ	0/1:91,159:212:-464.06,-63.56,-317.29:99
-chr1	4104448	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=303;Dels=0.00;HRun=1;HaplotypeScore=67.42;MQ=41.21;MQ0=8;OQ=4147.70;QD=13.69;SB=-263.14	GT:AD:DP:GL:GQ	0/1:172,131:260:-413.77,-78.32,-559.37:99
-chr1	4104453	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=303;Dels=0.00;HRun=0;HaplotypeScore=122.24;MQ=41.63;MQ0=7;OQ=1110.55;QD=3.67;SB=-37.03	GT:AD:DP:GL:GQ	0/1:232,70:246:-188.46,-74.12,-759.14:99
-chr1	4104461	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=296;Dels=0.01;HRun=1;HaplotypeScore=119.61;MQ=41.59;MQ0=7;OQ=214.27;QD=0.72;SB=-23.14	GT:AD:DP:GL:GQ	0/1:251,42:244:-97.34,-72.63,-828.00:99
-chr1	4104464	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=293;Dels=0.00;HRun=0;HaplotypeScore=47.37;MQ=41.56;MQ0=7;OQ=330.17;QD=1.13;SB=-9.81	GT:AD:DP:GL:GQ	0/1:251,41:246:-110.42,-74.12,-748.00:99
-chr1	4104493	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=1;HaplotypeScore=30.82;MQ=42.50;MQ0=6;OQ=2710.70;QD=12.73;SB=-739.33	GT:AD:DP:GL:GQ	0/1:93,120:174:-326.79,-52.44,-298.85:99
-chr1	4104517	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=0;HaplotypeScore=91.08;MQ=42.89;MQ0=5;OQ=579.51;QD=3.69;SB=-277.61	GT:AD:DP:GL:GQ	0/1:123,34:134:-101.62,-40.38,-368.83:99
-chr1	4104540	rs62641248	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=101.41;MQ=39.74;MQ0=1;OQ=311.08;QD=3.34;SB=-25.45	GT:AD:DP:GL:GQ	0/1:75,18:80:-58.50,-24.10,-250.10:99
-chr1	4104551	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=87.22;MQ=37.20;MQ0=4;OQ=331.14;QD=4.87;SB=-44.20	GT:AD:DP:GL:GQ	0/1:51,17:54:-52.67,-16.27,-140.50:99
-chr1	4104561	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=32.90;MQ=39.14;MQ0=4;OQ=99.56;QD=1.56;SB=92.30	GT:AD:DP:GL:GQ	0/1:53,11:58:-30.72,-17.48,-172.38:99
-chr1	4104601	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=0;HaplotypeScore=38.41;MQ=39.91;MQ0=6;OQ=155.34;QD=0.76;SB=68.34	GT:AD:DP:GL:GQ	0/1:183,21:180:-73.04,-54.23,-586.07:99
-chr1	4104605	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=1;HaplotypeScore=39.02;MQ=40.58;MQ0=6;OQ=226.77;QD=1.07;SB=164.51	GT:AD:DP:GL:GQ	0/1:188,23:190:-83.19,-57.23,-627.45:99
-chr1	4104633	rs56023565	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=168;Dels=0.00;HRun=0;HaplotypeScore=43.28;MQ=41.56;MQ0=5;OQ=1077.06;QD=6.41;SB=128.56	GT:AD:DP:GL:GQ	0/1:117,50:150:-156.17,-45.18,-408.43:99
-chr1	4104638	rs62641251	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=155;Dels=0.00;HRun=1;HaplotypeScore=82.61;MQ=42.16;MQ0=4;OQ=1017.44;QD=6.56;SB=-202.97	GT:AD:DP:GL:GQ	0/1:99,56:128:-143.60,-38.57,-325.85:99
-chr1	4104646	rs56328141	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.05;HRun=0;HaplotypeScore=83.44;MQ=42.94;MQ0=3;OQ=598.93;QD=4.50;SB=-113.26	GT:AD:DP:GL:GQ	0/1:76,33:104:-104.27,-41.10,-292.97:99
-chr1	4104661	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=114;Dels=0.03;HRun=0;HaplotypeScore=168.88;MQ=43.79;MQ0=2;OQ=339.54;QD=2.98;SB=-7.31	GT:AD:DP:GL:GQ	0/1:92,17:99:-69.57,-32.33,-280.39:99
-chr1	4104695	rs58865682	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=0;HaplotypeScore=26.95;MQ=46.39;MQ0=1;OQ=148.27;QD=1.39;SB=113.35	GT:AD:DP:GL:GQ	0/1:90,17:100:-48.23,-30.12,-318.63:99
-chr1	4104698	rs59763636	A	C	13.51	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=104;Dels=0.00;HRun=0;HaplotypeScore=26.94;MQ=46.80;MQ0=1;QD=0.13;SB=110.36	GT:AD:DP:GL:GQ	0/1:87,17:97:-33.83,-29.22,-321.32:46.15
-chr1	4104799	rs56113813	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=1;HaplotypeScore=110.54;MQ=45.23;MQ0=4;OQ=195.94;QD=2.13;SB=86.31	GT:AD:DP:GL:GQ	0/1:78,14:77:-46.07,-23.20,-257.99:99
-chr1	4106070	rs9426471	T	C	595.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1098.91;QD=16.16;SB=-453.97	GT:AD:DP:GL:GQ	0/1:32,36:68:-133.66,-20.48,-129.09:99
-chr1	4106148	rs9426494	C	T	344.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=60.00;MQ0=0;OQ=1566.25;QD=17.40;SB=-768.74	GT:AD:DP:GL:GQ	0/1:44,46:88:-186.42,-26.51,-142.07:99
-chr1	4107203	rs6680278	C	T	328.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.92;MQ0=0;OQ=777.87;QD=13.89;SB=-285.17	GT:AD:DP:GL:GQ	0/1:32,24:55:-97.64,-16.57,-110.93:99
-chr1	4107258	rs6672998	G	A	334.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=520.45;QD=13.01;SB=-193.18	GT:AD:DP:GL:GQ	0/1:23,17:40:-67.38,-12.05,-82.67:99
-chr1	4107272	rs17406305	C	T	361.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=435.04;QD=9.89;SB=-220.70	GT:AD:DP:GL:GQ	0/1:26,18:41:-59.15,-12.36,-84.72:99
-chr1	4108156	rs7528351	G	A	171.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=978.84;QD=16.88;SB=-340.32	GT:AD:DP:GL:GQ	0/1:29,29:58:-118.64,-17.47,-104.14:99
-chr1	4108402	rs7539733	C	T	327.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=58.92;MQ0=0;OQ=799.67;QD=15.38;SB=-336.43	GT:AD:DP:GL:GQ	0/1:24,28:47:-97.41,-14.16,-80.03:99
-chr1	4108778	rs9426495	G	A	284.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.59;MQ=59.34;MQ0=0;OQ=895.14;QD=14.21;SB=-321.33	GT:AD:DP:GL:GQ	0/1:34,29:62:-111.48,-18.68,-120.65:99
-chr1	4108797	rs9426472	G	C	415.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.27;MQ0=0;OQ=1011.60;QD=17.75;SB=-519.74	GT:AD:DP:GL:GQ	0/1:27,30:53:-120.42,-15.97,-106.06:99
-chr1	4109900	.	A	G	31.51	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=2;HaplotypeScore=6.53;MQ=57.95;MQ0=0;QD=0.55;SB=59.23	GT:AD:DP:GL:GQ	0/1:35,22:36:-17.29,-10.85,-119.86:64.34
-chr1	4110024	rs6690263	C	T	117.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=1118.91;QD=21.11;SB=-400.94	GT:AD:DP:GL:GQ	0/1:20,32:53:-134.68,-19.51,-68.02:99
-chr1	4110064	rs6695126	A	G	708.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1770.58;QD=35.41;SB=-875.05	GT:AD:DP:GL:GQ	1/1:0,50:50:-180.66,-15.06,-0.02:99
-chr1	4110262	rs6683453	G	A	435.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=1205.59;QD=18.27;SB=-574.05	GT:AD:DP:GL:GQ	0/1:29,37:64:-143.13,-19.28,-100.61:99
-chr1	4110315	rs9426473	G	A	464.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=896.46;QD=18.68;SB=-396.93	GT:AD:DP:GL:GQ	0/1:19,29:46:-106.79,-13.86,-67.55:99
-chr1	4110338	rs9426496	A	G	430.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=545.25;QD=11.36;SB=-275.98	GT:AD:DP:GL:GQ	0/1:25,23:47:-71.97,-14.16,-100.50:99
-chr1	4111600	rs12752733	G	A	194.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.12;MQ0=0;OQ=1088.74;QD=20.54;SB=-407.75	GT:AD:DP:GL:GQ	0/1:20,33:51:-127.52,-15.37,-66.14:99
-chr1	4111741	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=11;HaplotypeScore=4.85;MQ=55.91;MQ0=0;OQ=88.59;QD=2.16;SB=32.11	GT:AD:DP:GL:GQ	0/1:33,8:32:-21.79,-9.64,-86.81:99
-chr1	4112024	.	C	T	265.51	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=941.42;QD=16.81;SB=-396.13	GT:AD:DP:GL:GQ	0/1:27,29:55:-113.99,-16.57,-97.04:99
-chr1	4112929	rs4654494	C	G	169.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=60.00;MQ0=0;OQ=822.69;QD=13.27;SB=-341.77	GT:AD:DP:GL:GQ	0/1:34,28:54:-101.84,-16.28,-127.78:99
-chr1	4113201	rs55759139	G	A	249.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.37;MQ=59.68;MQ0=0;OQ=761.01;QD=13.12;SB=-311.83	GT:AD:DP:GL:GQ	0/1:32,26:53:-95.35,-15.97,-100.34:99
-chr1	4113760	rs4498774	A	C	130.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.71;MQ0=0;OQ=628.38;QD=9.67;SB=-313.59	GT:AD:DP:GL:GQ	0/1:36,29:64:-85.41,-19.28,-138.00:99
-chr1	4114825	rs7339911	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=10;HaplotypeScore=3.32;MQ=58.55;MQ0=0;OQ=757.63;QD=12.42;SB=-183.20	GT:AD:DP:GL:GQ	0/1:36,25:59:-96.82,-17.77,-126.07:99
-chr1	4116025	rs9988443	G	A	336.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.45;MQ0=0;OQ=1567.78;QD=20.63;SB=-720.28	GT:AD:DP:GL:GQ	0/1:30,46:75:-182.67,-22.61,-94.32:99
-chr1	4116630	rs4336820	T	C	72.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=59.52;MQ0=0;OQ=1667.19;QD=34.73;SB=-687.27	GT:AD:DP:GL:GQ	1/1:0,48:47:-170.32,-14.16,-0.01:99
-chr1	4116791	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=12.66;MQ=58.95;MQ0=0;OQ=57.38;QD=1.43;SB=71.25	GT:AD:DP:GL:GQ	0/1:31,9:34:-19.31,-10.29,-109.30:90.22
-chr1	4117150	rs12062237	T	C	0.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=3;HaplotypeScore=3.14;MQ=57.94;MQ0=0;OQ=1345.47;QD=32.82;SB=-624.25	GT:AD:DP:GL:GQ	1/1:0,41:39:-138.15,-11.75,-0.02:99
-chr1	4118916	rs3890798	A	G	534.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=2055.84;QD=30.23;SB=-868.59	GT:AD:DP:GL:GQ	1/1:0,68:65:-209.23,-19.60,-0.06:99
-chr1	4119595	rs6426391	A	T	243.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.73;MQ0=0;OQ=1272.79;QD=18.45;SB=-602.37	GT:AD:DP:GL:GQ	0/1:28,41:68:-151.04,-20.48,-104.90:99
-chr1	4119856	.	G	A	80.75	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=54.88;MQ0=1;OQ=952.98;QD=16.15;SB=-461.48	GT:AD:DP:GL:GQ	0/1:28,31:56:-115.46,-16.88,-95.51:99
-chr1	4120161	rs7549636	G	A	106.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.96;MQ=59.21;MQ0=1;OQ=708.05;QD=15.39;SB=-359.50	GT:AD:DP:GL:GQ	0/1:23,23:43:-87.04,-12.95,-74.47:99
-chr1	4120271	rs6426392	T	C	252.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.44;MQ0=0;OQ=208.98;QD=7.74;SB=-130.51	GT:AD:DP:GL:GQ	0/1:16,11:25:-31.72,-7.54,-55.62:99
-chr1	4121295	rs4414012	C	T	109.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=243.26;QD=16.22;SB=-32.52	GT:AD:DP:GL:GQ	0/1:7,8:15:-32.13,-4.52,-23.19:99
-chr1	4121459	rs4614226	C	T	3.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.33;MQ0=0;OQ=708.73;QD=25.31;SB=-192.72	GT:AD:DP:GL:GQ	0/1:8,20:25:-81.69,-7.53,-15.26:77.23
-chr1	4122266	rs4654495	C	T	267.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.05;MQ0=0;OQ=844.66;QD=17.24;SB=-383.42	GT:AD:DP:GL:GQ	0/1:22,27:48:-102.21,-14.46,-81.80:99
-chr1	4122640	.	C	T	27.21	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=1;HaplotypeScore=9.85;MQ=48.82;MQ0=0;QD=3.40;SB=2.03	GT:AD:DP:GL:GQ	0/1:6,2:7:-8.11,-2.11,-18.35:60.04
-chr1	4122866	rs4654413	A	G	16.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.58;MQ0=0;OQ=1224.52;QD=28.48;SB=-81.37	GT:AD:DP:GL:GQ	1/1:0,43:41:-126.09,-12.38,-0.05:99
-chr1	4122935	rs4654414	G	A	17.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=53.29;MQ0=0;OQ=1666.36;QD=36.23;SB=-267.85	GT:AD:DP:GL:GQ	1/1:1,45:42:-170.23,-12.65,-0.01:99
-chr1	4123288	rs4233261	T	C	17.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.16;MQ=58.63;MQ0=0;OQ=2395.13;QD=34.71;SB=-1054.42	GT:AD:DP:GL:GQ	1/1:0,69:66:-243.12,-19.88,-0.02:99
-chr1	4123748	rs6679293	T	C	176.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.14;MQ0=0;OQ=1906.56;QD=31.26;SB=-831.63	GT:AD:DP:GL:GQ	1/1:0,61:59:-194.29,-17.79,-0.05:99
-chr1	4123963	rs4654496	C	T	83.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=2067.60;QD=39.01;SB=-750.62	GT:AD:DP:GL:GQ	1/1:0,53:53:-210.36,-15.97,-0.02:99
-chr1	4124418	rs4654497	T	C	597.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1506.19;QD=30.74;SB=-582.98	GT:AD:DP:GL:GQ	1/1:0,49:47:-154.24,-14.17,-0.04:99
-chr1	4126306	rs4367764	C	T	454.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2115.14;QD=39.17;SB=-864.64	GT:AD:DP:GL:GQ	1/1:0,54:53:-215.11,-15.97,-0.01:99
-chr1	4127324	rs12123330	C	T	249.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1048.68;QD=17.77;SB=-496.03	GT:AD:DP:GL:GQ	0/1:27,32:56:-125.03,-16.88,-80.71:99
-chr1	4127494	rs4468133	G	A	195.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.26;MQ=60.00;MQ0=0;OQ=1260.59;QD=18.01;SB=-425.95	GT:AD:DP:GL:GQ	0/1:31,38:68:-152.64,-23.30,-109.48:99
-chr1	4128172	rs4654498	A	G	107.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.33;MQ=59.19;MQ0=0;OQ=2014.82;QD=35.35;SB=-1032.76	GT:AD:DP:GL:GQ	1/1:0,57:56:-205.08,-16.87,-0.01:99
-chr1	4128310	rs4654499	G	T	305.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=983.44;QD=17.88;SB=-296.34	GT:AD:DP:GL:GQ	0/1:22,33:55:-118.19,-16.56,-78.95:99
-chr1	4130572	rs3890729	A	T	141.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=59.18;MQ0=0;OQ=905.47;QD=17.75;SB=-227.90	GT:AD:DP:GL:GQ	0/1:23,28:51:-109.19,-15.36,-88.04:99
-chr1	4131311	rs10915460	G	A	189.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=57.39;MQ0=0;OQ=480.50;QD=13.35;SB=-233.54	GT:AD:DP:GL:GQ	0/1:19,17:33:-61.28,-9.95,-54.49:99
-chr1	4131491	rs10915461	A	G	151.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=51.87;MQ0=0;OQ=492.21;QD=9.65;SB=-268.94	GT:AD:DP:GL:GQ	0/1:28,23:49:-67.28,-14.77,-113.16:99
-chr1	4131545	rs10915462	T	C	155.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.56;MQ0=0;OQ=299.94;QD=7.69;SB=-143.28	GT:AD:DP:GL:GQ	0/1:25,14:37:-44.43,-11.15,-99.76:99
-chr1	4131617	rs6688343	T	C	208.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.31;MQ0=0;OQ=662.26;QD=13.25;SB=-230.45	GT:AD:DP:GL:GQ	0/1:25,25:48:-83.97,-14.46,-97.39:99
-chr1	4131656	rs6688428	T	C	133.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=58.40;MQ0=0;OQ=444.13;QD=10.83;SB=-97.71	GT:AD:DP:GL:GQ	0/1:22,19:40:-59.75,-12.06,-84.80:99
-chr1	4131666	rs6688431	T	C	70.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.40;MQ0=0;OQ=339.10;QD=8.27;SB=-98.71	GT:AD:DP:GL:GQ	0/1:23,18:37:-48.34,-11.15,-87.20:99
-chr1	4131704	.	G	A	41.43	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=58.60;MQ0=0;OQ=706.66;QD=14.13;SB=-238.75	GT:AD:DP:GL:GQ	0/1:28,22:49:-88.72,-14.77,-84.55:99
-chr1	4131824	rs12032295	C	T	752.83	Indel	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.96;MQ0=0;QD=14.20;SB=-367.84	GT:AD:DP:GL:GQ	0/1:30,23:51:-93.93,-15.37,-94.00:99
-chr1	4132377	rs12405392	C	T	226.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=59.66;MQ0=0;OQ=1021.86;QD=15.03;SB=-451.99	GT:AD:DP:GL:GQ	0/1:34,34:62:-124.15,-18.68,-109.47:99
-chr1	4132399	rs56827341	A	G	272.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=59.66;MQ0=0;OQ=903.58;QD=13.29;SB=-319.89	GT:AD:DP:GL:GQ	0/1:32,36:65:-113.24,-19.60,-113.27:99
-chr1	4132555	rs11580927	G	A	598.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=853.00;QD=13.76;SB=-450.44	GT:AD:DP:GL:GQ	0/1:34,28:61:-106.96,-18.38,-120.31:99
-chr1	4132654	rs11583685	T	C	237.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.58;MQ=60.00;MQ0=0;OQ=809.75;QD=12.46;SB=-338.53	GT:AD:DP:GL:GQ	0/1:35,30:64:-103.54,-19.28,-136.81:99
-chr1	4134373	rs6690519	C	T	596.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2577.92;QD=39.66;SB=-1051.40	GT:AD:DP:GL:GQ	1/1:0,65:64:-261.39,-19.28,-0.02:99
-chr1	4134652	rs12743431	G	A	916.73	Indel	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.05;MQ0=0;QD=16.08;SB=-472.04	GT:AD:DP:GL:GQ	0/1:25,32:53:-110.92,-15.97,-91.04:99
-chr1	4134672	rs61037363	C	T	207.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.34;MQ0=0;OQ=1244.96;QD=19.15;SB=-619.07	GT:AD:DP:GL:GQ	0/1:27,38:61:-146.16,-18.38,-83.21:99
-chr1	4135628	rs4654501	G	A	449.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=800.03;QD=17.78;SB=-327.85	GT:AD:DP:GL:GQ	0/1:21,24:44:-96.54,-13.26,-71.19:99
-chr1	4136297	rs4531262	C	T	292.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.55;MQ0=0;OQ=900.23;QD=17.65;SB=-443.97	GT:AD:DP:GL:GQ	0/1:23,28:50:-108.37,-15.06,-81.34:99
-chr1	4136842	rs4233262	C	T	514.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1175.57;QD=19.27;SB=-513.00	GT:AD:DP:GL:GQ	0/1:27,34:61:-139.22,-18.38,-97.14:99
-chr1	4137022	rs12726068	G	A	202.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1078.50;QD=19.97;SB=-346.48	GT:AD:DP:GL:GQ	0/1:22,32:54:-127.40,-16.27,-78.49:99
-chr1	4137146	rs12741551	C	T	188.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.60;MQ=60.00;MQ0=0;OQ=744.97;QD=14.06;SB=-275.26	GT:AD:DP:GL:GQ	0/1:28,23:51:-95.75,-17.97,-99.94:99
-chr1	4137455	rs34927664	C	T	374.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=672.79;QD=16.41;SB=-286.16	GT:AD:DP:GL:GQ	0/1:20,21:40:-82.61,-12.05,-71.71:99
-chr1	4137533	rs6687719	A	G	359.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.55;MQ0=0;OQ=693.89;QD=13.61;SB=-371.11	GT:AD:DP:GL:GQ	0/1:24,27:51:-88.05,-15.37,-93.98:99
-chr1	4137942	rs4654415	A	G	54.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=3;HaplotypeScore=0.52;MQ=59.28;MQ0=0;OQ=812.82;QD=15.63;SB=-375.38	GT:AD:DP:GL:GQ	0/1:23,29:51:-99.93,-15.36,-91.58:99
-chr1	4137964	rs4654416	T	C	201.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=58.39;MQ0=0;OQ=863.33;QD=15.70;SB=-318.29	GT:AD:DP:GL:GQ	0/1:25,30:54:-105.89,-16.27,-96.91:99
-chr1	4138124	rs4654417	A	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.04;HRun=0;HaplotypeScore=22.45;MQ=53.05;MQ0=0;OQ=979.60;QD=14.62;SB=-425.14	GT:AD:DP:GL:GQ	0/1:30,34:67:-120.52,-19.28,-120.75:99
-chr1	4138539	rs10915465	C	T	116.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=932.04;QD=16.95;SB=-231.54	GT:AD:DP:GL:GQ	0/1:26,28:51:-111.86,-15.37,-73.76:99
-chr1	4138848	rs4233263	T	C	563.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.57;MQ0=0;OQ=1932.95;QD=31.18;SB=-950.38	GT:AD:DP:GL:GQ	1/1:0,61:61:-196.93,-18.40,-0.06:99
-chr1	4140038	rs4233264	T	C	391.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.43;MQ0=0;OQ=1125.34;QD=13.89;SB=-437.57	GT:AD:DP:GL:GQ	0/1:41,40:80:-139.92,-24.10,-167.96:99
-chr1	4140287	rs4654502	A	G	258.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=716.89;QD=12.36;SB=-328.15	GT:AD:DP:GL:GQ	0/1:28,30:57:-92.15,-17.18,-113.12:99
-chr1	4140357	rs4654503	A	G	175.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.08;MQ=60.00;MQ0=0;OQ=528.96;QD=9.98;SB=-287.63	GT:AD:DP:GL:GQ	0/1:26,24:47:-70.35,-14.17,-96.77:99
-chr1	4140721	rs12074230	G	C	441.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=1211.59;QD=19.54;SB=-432.34	GT:AD:DP:GL:GQ	0/1:29,33:61:-142.82,-18.38,-122.06:99
-chr1	4141214	rs61770887	T	A	176.81	Indel	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=41.85;MQ0=5;QD=2.39;SB=-58.97	GT:AD:DP:GL:GQ	0/1:35,39:44:-34.22,-13.25,-135.84:99
-chr1	4141739	.	C	G	151.90	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.44;MQ0=0;OQ=861.28;QD=11.64;SB=-403.50	GT:AD:DP:GL:GQ	0/1:45,29:72:-111.12,-21.71,-193.89:99
-chr1	4143108	rs7544125	G	A	98.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.58;MQ0=4;OQ=463.56;QD=6.62;SB=-223.67	GT:AD:DP:GL:GQ	0/1:38,32:54:-65.91,-16.27,-136.81:99
-chr1	4143110	rs7515133	T	G	11.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.83;MQ0=4;OQ=280.65;QD=3.95;SB=-136.72	GT:AD:DP:GL:GQ	0/1:40,31:55:-47.92,-16.57,-148.31:99
-chr1	4143183	rs4408123	T	C	60.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.41;MQ=54.71;MQ0=0;OQ=2012.85;QD=31.45;SB=-855.54	GT:AD:DP:GL:GQ	1/1:0,63:62:-204.92,-18.70,-0.05:99
-chr1	4143665	rs4654505	C	T	14.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=7.02;MQ=58.52;MQ0=0;OQ=1278.62;QD=17.05;SB=-644.75	GT:AD:DP:GL:GQ	0/1:36,39:72:-152.84,-21.70,-110.95:99
-chr1	4143971	rs56322069	G	A	219.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=58.68;MQ0=0;OQ=1179.12;QD=14.38;SB=-509.98	GT:AD:DP:GL:GQ	0/1:47,35:78:-144.69,-23.49,-153.28:99
-chr1	4144717	rs4654419	G	T	409.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.48;MQ0=0;OQ=576.97;QD=11.10;SB=-278.60	GT:AD:DP:GL:GQ	0/1:31,21:52:-76.65,-15.66,-108.30:99
-chr1	4144899	rs4654506	A	G	59.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.57;MQ=57.19;MQ0=0;OQ=798.47;QD=12.67;SB=-355.09	GT:AD:DP:GL:GQ	0/1:32,31:63:-102.12,-18.99,-128.03:99
-chr1	4145034	rs4654420	T	C	208.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=57.63;MQ0=0;OQ=567.20;QD=9.30;SB=-299.19	GT:AD:DP:GL:GQ	0/1:35,26:59:-77.79,-17.78,-138.00:99
-chr1	4145265	rs10799210	A	G	75.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=52.55;MQ0=0;OQ=2612.65;QD=35.79;SB=-1182.09	GT:AD:DP:GL:GQ	1/1:0,72:73:-267.51,-24.47,-2.66:99
-chr1	4146179	rs4354511	G	A	19.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=3;HaplotypeScore=1.79;MQ=39.00;MQ0=1;OQ=2945.76;QD=39.28;SB=-1473.93	GT:AD:DP:GL:GQ	1/1:0,75:73:-298.18,-21.99,-0.02:99
-chr1	4146185	rs61770891	T	G	349.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=40.44;MQ0=1;OQ=1123.38;QD=15.18;SB=-586.47	GT:AD:DP:GL:GQ	0/1:35,39:73:-137.61,-21.99,-124.99:99
-chr1	4146278	rs35969529	A	C	46.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=52.18;MQ0=0;OQ=652.54;QD=12.55;SB=-341.77	GT:AD:DP:GL:GQ	0/1:27,25:52:-84.21,-15.67,-95.88:99
-chr1	4146315	rs34096100	G	A	254.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.76;MQ0=0;OQ=657.20;QD=13.41;SB=-218.51	GT:AD:DP:GL:GQ	0/1:28,21:47:-83.18,-14.17,-82.42:99
-chr1	4146537	.	C	T	111.88	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=53.66;MQ0=1;OQ=1107.86;QD=16.06;SB=-448.39	GT:AD:DP:GL:GQ	0/1:34,35:67:-134.26,-20.19,-114.24:99
-chr1	4146953	rs4654421	T	C	433.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.82;MQ0=0;OQ=2189.94;QD=31.74;SB=-1040.77	GT:AD:DP:GL:GQ	1/1:0,69:68:-222.64,-20.51,-0.06:99
-chr1	4147013	rs4654422	T	A	163.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.20;MQ0=1;OQ=3024.40;QD=36.88;SB=-1331.44	GT:AD:DP:GL:GQ	1/1:1,80:81:-309.61,-27.75,-3.59:99
-chr1	4148323	rs35837871	C	T	12.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.85;MQ=58.88;MQ0=0;OQ=689.43;QD=12.77;SB=-158.63	GT:AD:DP:GL:GQ	0/1:29,24:49:-86.99,-14.77,-93.34:99
-chr1	4148556	rs10753370	A	G	191.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=57.40;MQ0=0;OQ=2083.85;QD=34.73;SB=-1040.92	GT:AD:DP:GL:GQ	1/1:0,60:59:-211.99,-17.77,-0.02:99
-chr1	4149011	rs12084286	A	G	120.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=57.86;MQ0=0;OQ=472.12;QD=10.26;SB=-116.70	GT:AD:DP:GL:GQ	0/1:26,20:42:-63.15,-12.65,-98.66:99
-chr1	4149320	rs10733015	T	C	59.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.72;MQ=56.65;MQ0=0;OQ=2004.37;QD=30.37;SB=-729.73	GT:AD:DP:GL:GQ	1/1:0,65:63:-204.08,-19.00,-0.06:99
-chr1	4149923	rs4654507	T	C	369.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.77;MQ0=0;OQ=1162.12;QD=14.53;SB=-509.31	GT:AD:DP:GL:GQ	0/1:40,40:79:-143.29,-23.80,-162.73:99
-chr1	4150793	rs11808641	A	G	288.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=1163.51;QD=16.62;SB=-493.62	GT:AD:DP:GL:GQ	0/1:32,38:70:-140.72,-21.09,-129.98:99
-chr1	4151258	rs35392680	C	A	277.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=1.25;MQ=59.48;MQ0=0;OQ=1358.51;QD=16.77;SB=-581.67	GT:AD:DP:GL:GQ	0/1:37,44:80:-163.23,-24.09,-127.72:99
-chr1	4151486	rs35452955	A	T	64.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1469.46;QD=19.34;SB=-729.32	GT:AD:DP:GL:GQ	0/1:30,45:74:-172.52,-22.29,-110.18:99
-chr1	4151668	rs6703301	G	T	631.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3028.09;QD=37.38;SB=-1101.60	GT:AD:DP:GL:GQ	1/1:0,81:80:-306.41,-24.09,-0.01:99
-chr1	4151981	rs34414875	C	T	365.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1305.64;QD=16.32;SB=-537.52	GT:AD:DP:GL:GQ	0/1:41,39:80:-157.95,-24.10,-144.69:99
-chr1	4152854	rs10915467	A	T	474.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1268.93;QD=17.38;SB=-610.43	GT:AD:DP:GL:GQ	0/1:33,40:72:-151.86,-21.68,-124.21:99
-chr1	4153158	rs12722935	C	T	465.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1317.34;QD=16.26;SB=-636.13	GT:AD:DP:GL:GQ	0/1:41,40:80:-159.12,-24.10,-137.48:99
-chr1	4153203	rs55974255	T	G	492.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1277.21;QD=15.39;SB=-533.71	GT:AD:DP:GL:GQ	0/1:38,45:83:-156.01,-25.00,-142.96:99
-chr1	4153672	rs6679104	T	C	519.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=1796.89;QD=30.98;SB=-648.94	GT:AD:DP:GL:GQ	1/1:0,58:56:-183.31,-16.88,-0.04:99
-chr1	4153751	rs12750830	G	A	339.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=841.06;QD=12.19;SB=-424.91	GT:AD:DP:GL:GQ	0/1:41,27:67:-107.58,-20.19,-146.61:99
-chr1	4153835	rs12740143	T	G	222.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.66;MQ0=0;OQ=767.69;QD=11.29;SB=-346.80	GT:AD:DP:GL:GQ	0/1:40,28:68:-100.53,-20.48,-145.06:99
-chr1	4154543	rs12143082	T	C	171.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.61;MQ0=1;OQ=1104.97;QD=14.17;SB=-407.20	GT:AD:DP:GL:GQ	0/1:39,39:74:-136.07,-22.29,-143.19:99
-chr1	4154828	rs4578184	A	T	236.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.74;MQ0=0;OQ=3286.63;QD=37.35;SB=-1618.09	GT:AD:DP:GL:GQ	1/1:0,87:86:-327.66,-25.90,-0.02:99
-chr1	4156046	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=80;Dels=0.01;HRun=20;HaplotypeScore=22.75;MQ=49.75;MQ0=0;OQ=501.86;QD=6.27;SB=92.27	GT:AD:DP:GL:GQ	0/1:48,31:64:-72.46,-18.99,-149.51:99
-chr1	4157196	rs4276878	C	G	356.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1452.13;QD=15.78;SB=-539.06	GT:AD:DP:GL:GQ	0/1:47,45:92:-176.24,-27.75,-207.05:99
-chr1	4159822	rs34626829	T	C	256.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=966.32;QD=13.24;SB=-369.17	GT:AD:DP:GL:GQ	0/1:40,33:72:-121.60,-21.69,-157.15:99
-chr1	4159905	rs4654509	T	C	45.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.48;MQ0=0;OQ=2796.88;QD=34.96;SB=-1388.49	GT:AD:DP:GL:GQ	1/1:0,80:80:-283.30,-24.10,-0.03:99
-chr1	4160278	rs6667065	G	A	347.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=1508.83;QD=20.12;SB=-751.28	GT:AD:DP:GL:GQ	0/1:32,43:74:-176.46,-22.30,-103.02:99
-chr1	4160487	rs6426401	C	G	585.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2415.89;QD=43.14;SB=-1118.15	GT:AD:DP:GL:GQ	1/1:0,56:56:-245.19,-16.88,-0.02:99
-chr1	4163843	rs4654511	A	G	129.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.90;MQ=59.46;MQ0=0;OQ=1014.81;QD=11.80;SB=-473.86	GT:AD:DP:GL:GQ	0/1:46,40:85:-130.38,-25.61,-186.22:99
-chr1	4163857	rs4654512	A	G	307.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.44;MQ0=0;OQ=1070.59;QD=12.90;SB=-521.48	GT:AD:DP:GL:GQ	0/1:46,37:83:-135.34,-25.00,-185.85:99
-chr1	4164344	rs4529679	G	C	272.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=59.36;MQ0=0;OQ=772.49;QD=10.73;SB=-392.69	GT:AD:DP:GL:GQ	0/1:46,26:70:-101.64,-21.10,-199.05:99
-chr1	4166949	rs16840901	T	C	388.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.68;MQ0=0;OQ=1039.54;QD=14.24;SB=-434.53	GT:AD:DP:GL:GQ	0/1:37,36:73:-129.23,-21.99,-150.63:99
-chr1	4167749	rs10915471	T	G	58.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=3.59;MQ=59.58;MQ0=0;OQ=744.43;QD=13.54;SB=-264.89	GT:AD:DP:GL:GQ	0/1:27,27:49:-92.49,-14.76,-80.31:99
-chr1	4168111	rs35122589	C	T	228.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=59.26;MQ0=0;OQ=1364.57;QD=16.64;SB=-443.34	GT:AD:DP:GL:GQ	0/1:40,41:80:-163.84,-24.10,-142.82:99
-chr1	4168454	rs12095632	C	G	92.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=59.32;MQ0=0;OQ=1054.00;QD=19.16;SB=-475.80	GT:AD:DP:GL:GQ	0/1:24,31:54:-124.96,-16.28,-104.73:99
-chr1	4168730	rs4130091	T	C	180.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=1367.19;QD=28.48;SB=-696.78	GT:AD:DP:GL:GQ	1/1:0,48:44:-140.35,-13.27,-0.05:99
-chr1	4169351	rs6426402	G	T	131.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=58.55;MQ0=0;OQ=809.13;QD=11.40;SB=-425.17	GT:AD:DP:GL:GQ	0/1:41,30:69:-104.98,-20.78,-138.71:99
-chr1	4169394	rs6426403	C	G	338.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.89;MQ0=0;OQ=727.35;QD=12.99;SB=-274.92	GT:AD:DP:GL:GQ	0/1:33,23:54:-92.30,-16.28,-134.02:99
-chr1	4169498	rs6426404	G	A	414.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.75;MQ0=0;OQ=1380.19;QD=18.40;SB=-605.61	GT:AD:DP:GL:GQ	0/1:34,41:72:-163.00,-21.69,-105.58:99
-chr1	4169658	rs60017975	A	G	318.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.77;MQ0=0;OQ=1450.14;QD=18.13;SB=-530.63	GT:AD:DP:GL:GQ	0/1:31,49:79:-172.10,-23.80,-127.67:99
-chr1	4170881	rs7550659	A	G	248.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.70;MQ0=0;OQ=2075.07;QD=30.97;SB=-804.69	GT:AD:DP:GL:GQ	1/1:0,66:63:-211.13,-18.99,-0.04:99
-chr1	4171135	rs10799212	A	G	40.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.91;MQ=40.70;MQ0=1;OQ=2175.11;QD=31.07;SB=-612.96	GT:AD:DP:GL:GQ	1/1:1,69:67:-221.14,-20.20,-0.04:99
-chr1	4171182	rs12410442	G	A	385.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.19;MQ0=4;OQ=361.27;QD=10.95;SB=-197.20	GT:AD:DP:GL:GQ	0/1:20,13:27:-47.55,-8.14,-48.20:99
-chr1	4171315	.	C	A	41.63	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=20;HaplotypeScore=7.30;MQ=33.40;MQ0=5;QD=0.97;SB=41.16	GT:AD:DP:GL:GQ	0/1:37,6:31:-16.79,-9.34,-90.98:74.46
-chr1	4171344	rs10799213	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.01;HRun=20;HaplotypeScore=28.32;MQ=47.02;MQ0=1;OQ=768.09;QD=11.30;SB=-343.49	GT:AD:DP:GL:GQ	0/1:35,32:53:-95.75,-15.66,-101.72:99
-chr1	4171386	rs12022636	C	A	71.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=6.39;MQ=55.43;MQ0=0;OQ=1032.82;QD=16.66;SB=-507.94	GT:AD:DP:GL:GQ	0/1:28,34:59:-124.34,-17.77,-88.85:99
-chr1	4171443	rs10799214	T	A	380.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.02;MQ=52.31;MQ0=0;OQ=893.79;QD=14.65;SB=-401.19	GT:AD:DP:GL:GQ	0/1:30,31:58:-110.14,-17.48,-102.42:99
-chr1	4171775	rs7553814	A	G	404.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.01;MQ0=0;OQ=970.08;QD=12.93;SB=-503.90	GT:AD:DP:GL:GQ	0/1:40,35:74:-122.58,-22.29,-161.95:99
-chr1	4171833	rs7553919	A	G	37.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=59.60;MQ0=0;OQ=2384.19;QD=34.55;SB=-1112.82	GT:AD:DP:GL:GQ	1/1:0,69:66:-242.02,-19.88,-0.02:99
-chr1	4171990	rs7554028	A	G	628.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=1;OQ=2341.28;QD=30.02;SB=-854.63	GT:AD:DP:GL:GQ	1/1:0,78:76:-237.79,-22.93,-0.08:99
-chr1	4173512	rs7517572	T	A	699.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=2653.94;QD=34.47;SB=-1331.37	GT:AD:DP:GL:GQ	1/1:0,77:72:-269.00,-21.69,-0.02:99
-chr1	4173702	rs10753372	T	C	483.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.88;MQ0=0;OQ=510.62;QD=9.82;SB=-265.21	GT:AD:DP:GL:GQ	0/1:30,22:52:-70.02,-15.68,-118.09:99
-chr1	4173822	rs10737404	T	C	229.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1647.35;QD=29.95;SB=-655.93	GT:AD:DP:GL:GQ	1/1:0,55:53:-168.37,-15.99,-0.05:99
-chr1	4174045	rs10915473	C	T	65.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=45.21;MQ0=0;OQ=1332.73;QD=36.02;SB=-585.26	GT:AD:DP:GL:GQ	1/1:0,37:35:-136.87,-10.55,-0.02:99
-chr1	4174057	.	C	T	1039.01	SnpCluster	AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=42.84;MQ0=0;QD=33.52;SB=-399.52	GT:AD:DP:GL:GQ	1/1:2,29:27:-107.50,-8.14,-0.01:81.26
-chr1	4174060	.	A	C	853.72	SnpCluster	AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=1.07;MQ=43.67;MQ0=0;QD=27.54;SB=-294.55	GT:AD:DP:GL:GQ	1/1:0,31:26:-88.97,-7.83,-0.01:78.20
-chr1	4174064	.	A	C	949.90	SnpCluster	AC=2;AF=1.00;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=44.60;MQ0=0;QD=28.78;SB=-378.69	GT:AD:DP:GL:GQ	1/1:0,33:28:-98.58,-8.43,-0.01:84.24
-chr1	4174382	rs1908491	C	T	0.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=6.22;MQ=54.65;MQ0=0;OQ=1883.08;QD=36.21;SB=-503.01	GT:AD:DP:GL:GQ	1/1:0,52:48:-191.91,-14.46,-0.01:99
-chr1	4174484	rs10915474	T	A	225.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=55.68;MQ0=0;OQ=801.30;QD=15.41;SB=-299.67	GT:AD:DP:GL:GQ	0/1:26,26:51:-98.78,-15.36,-93.02:99
-chr1	4174489	rs1908492	C	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=7;HaplotypeScore=1.12;MQ=55.99;MQ0=0;OQ=1860.19;QD=37.20;SB=-932.70	GT:AD:DP:GL:GQ	1/1:0,50:48:-189.62,-14.46,-0.02:99
-chr1	4174597	rs1908493	C	T	268.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.04;MQ0=0;OQ=2611.89;QD=38.41;SB=-1140.03	GT:AD:DP:GL:GQ	1/1:0,68:66:-264.79,-19.88,-0.02:99
-chr1	4174874	rs1495245	T	A	732.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2554.22;QD=37.56;SB=-1304.61	GT:AD:DP:GL:GQ	1/1:0,68:68:-259.02,-20.48,-0.02:99
-chr1	4174974	rs11578399	C	A	12.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=3.61;MQ=59.22;MQ0=0;OQ=421.58;QD=7.81;SB=-139.06	GT:AD:DP:GL:GQ	0/1:37,17:52:-61.11,-15.67,-117.17:99
-chr1	4175032	rs1495246	C	G	204.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=56.85;MQ0=0;OQ=2607.23;QD=39.50;SB=-1308.71	GT:AD:DP:GL:GQ	1/1:0,66:62:-264.33,-18.68,-0.02:99
-chr1	4175046	.	T	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=2;HaplotypeScore=9.95;MQ=56.80;MQ0=0;OQ=180.72;QD=2.78;SB=92.29	GT:AD:DP:GL:GQ	0/1:40,25:50:-36.42,-15.06,-130.62:99
-chr1	4175151	rs10915476	G	A	237.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.01;MQ0=0;OQ=567.09;QD=12.07;SB=-92.91	GT:AD:DP:GL:GQ	0/1:29,18:45:-73.55,-13.56,-90.83:99
-chr1	4175279	rs1495247	C	T	209.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=2597.96;QD=37.11;SB=-1279.76	GT:AD:DP:GL:GQ	1/1:0,70:67:-263.40,-20.19,-0.02:99
-chr1	4175302	rs7411802	C	A	438.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=58.93;MQ0=0;OQ=2181.45;QD=35.76;SB=-1110.34	GT:AD:DP:GL:GQ	1/1:0,61:61:-221.75,-18.37,-0.02:99
-chr1	4175576	rs4326593	G	A	325.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=55.58;MQ0=0;OQ=888.28;QD=16.76;SB=-433.95	GT:AD:DP:GL:GQ	0/1:25,28:48:-106.58,-14.47,-68.77:99
-chr1	4175736	rs4615813	G	C	667.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.55;MQ0=0;OQ=2403.10;QD=41.43;SB=-1195.96	GT:AD:DP:GL:GQ	1/1:0,58:56:-243.91,-16.87,-0.02:99
-chr1	4175807	rs28600106	C	T	6.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=7.59;MQ=48.39;MQ0=0;OQ=365.75;QD=9.89;SB=-206.69	GT:AD:DP:GL:GQ	0/1:22,15:31:-49.20,-9.35,-60.01:99
-chr1	4175944	rs2898790	T	C	0.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.41;MQ=54.62;MQ0=0;OQ=1686.61;QD=30.67;SB=-329.61	GT:AD:DP:GL:GQ	1/1:0,55:50:-172.27,-15.06,-0.02:99
-chr1	4176053	rs2411737	G	C	0.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=4.08;MQ=49.96;MQ0=0;OQ=907.29;QD=30.24;SB=-45.91	GT:AD:DP:GL:GQ	1/1:0,30:23:-94.32,-6.93,-0.01:69.23
-chr1	4176083	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=2;HaplotypeScore=5.12;MQ=50.79;MQ0=0;OQ=53.84;QD=1.17;SB=68.23	GT:AD:DP:GL:GQ	0/1:30,16:35:-19.21,-10.54,-99.51:86.68
-chr1	4176698	rs10915477	G	A	75.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=1.92;MQ=55.80;MQ0=0;OQ=3415.18;QD=40.18;SB=-1433.92	GT:AD:DP:GL:GQ	1/1:0,85:84:-340.52,-25.30,-0.02:99
-chr1	4176748	rs12060660	A	C	70.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=58.23;MQ0=0;OQ=2781.95;QD=35.21;SB=-941.32	GT:AD:DP:GL:GQ	1/1:0,78:78:-285.04,-25.98,-3.27:99
-chr1	4176763	rs10915478	T	C	721.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=2617.35;QD=33.99;SB=-1088.89	GT:AD:DP:GL:GQ	1/1:0,77:74:-265.34,-22.29,-0.02:99
-chr1	4176794	rs12060664	A	G	585.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2362.72;QD=33.28;SB=-1094.09	GT:AD:DP:GL:GQ	1/1:0,71:67:-239.88,-20.19,-0.03:99
-chr1	4177795	rs4654423	T	C	596.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1639.97;QD=29.29;SB=-739.78	GT:AD:DP:GL:GQ	1/1:0,56:52:-167.62,-15.68,-0.04:99
-chr1	4177808	rs10915479	T	C	281.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.62;MQ0=0;OQ=507.44;QD=10.36;SB=-255.93	GT:AD:DP:GL:GQ	0/1:30,19:46:-67.89,-13.86,-108.27:99
-chr1	4179046	rs12116719	G	A	182.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=2853.60;QD=39.09;SB=-1453.00	GT:AD:DP:GL:GQ	1/1:0,73:73:-288.97,-22.00,-0.02:99
-chr1	4179422	rs59176411	C	T	132.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=56.41;MQ0=0;OQ=2598.61;QD=37.12;SB=-1098.00	GT:AD:DP:GL:GQ	1/1:1,69:68:-267.13,-20.49,-3.69:99
-chr1	4179485	rs10737405	A	G	230.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.59;MQ0=0;OQ=1795.14;QD=34.52;SB=-680.95	GT:AD:DP:GL:GQ	1/1:1,51:52:-187.08,-15.66,-3.98:99
-chr1	4180030	rs6657617	C	T	6.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.45;MQ=59.28;MQ0=0;OQ=2474.15;QD=38.66;SB=-836.62	GT:AD:DP:GL:GQ	1/1:0,64:62:-251.01,-18.68,-0.02:99
-chr1	4180081	rs6426405	G	A	604.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2617.17;QD=39.06;SB=-1069.36	GT:AD:DP:GL:GQ	1/1:0,67:67:-265.32,-20.19,-0.02:99
-chr1	4180490	rs4592237	G	A	306.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=1850.80;QD=34.92;SB=-947.36	GT:AD:DP:GL:GQ	1/1:0,53:49:-188.69,-14.77,-0.02:99
-chr1	4181020	rs10799216	G	A	235.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=59.57;MQ0=0;OQ=3471.51;QD=40.37;SB=-1574.60	GT:AD:DP:GL:GQ	1/1:0,86:85:-346.15,-25.60,-0.02:99
-chr1	4181670	rs4233265	T	C	517.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.29;MQ0=0;OQ=2065.74;QD=31.30;SB=-824.68	GT:AD:DP:GL:GQ	1/1:0,66:65:-210.21,-19.60,-0.06:99
-chr1	4182159	rs4654425	A	G	260.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1828.94;QD=35.17;SB=-776.99	GT:AD:DP:GL:GQ	1/1:0,52:51:-186.50,-15.36,-0.02:99
-chr1	4182646	rs11579829	C	T	305.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.69;MQ0=0;OQ=2773.62;QD=37.48;SB=-1347.81	GT:AD:DP:GL:GQ	1/1:0,74:71:-280.97,-21.39,-0.02:99
-chr1	4183175	rs2132177	C	A	639.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2919.91;QD=36.50;SB=-1144.30	GT:AD:DP:GL:GQ	1/1:0,80:79:-295.60,-23.79,-0.02:99
-chr1	4184348	rs55978003	G	A	105.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.27;MQ0=0;OQ=776.05;QD=15.22;SB=-305.78	GT:AD:DP:GL:GQ	0/1:27,23:48:-95.35,-14.46,-90.95:99
-chr1	4184779	rs7528938	C	T	220.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.11;MQ0=0;OQ=1623.71;QD=34.55;SB=-657.89	GT:AD:DP:GL:GQ	1/1:1,44:43:-165.98,-12.96,-0.02:99
-chr1	4185286	rs17415519	A	G	242.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=60.00;MQ0=0;OQ=1345.26;QD=33.63;SB=-658.93	GT:AD:DP:GL:GQ	1/1:0,40:39:-138.12,-11.75,-0.01:99
-chr1	4185339	.	G	T	41.06	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=12;HaplotypeScore=2.80;MQ=54.83;MQ0=0;QD=0.98;SB=22.81	GT:AD:DP:GL:GQ	0/1:35,7:35:-17.93,-10.54,-103.81:73.90
-chr1	4185557	rs4654516	G	C	54.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.67;MQ=58.74;MQ0=0;OQ=2607.62;QD=37.25;SB=-842.00	GT:AD:DP:GL:GQ	1/1:1,69:66:-264.40,-19.92,-0.05:99
-chr1	4187570	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=2;HaplotypeScore=8.14;MQ=58.89;MQ0=0;OQ=68.10;QD=0.81;SB=131.41	GT:AD:DP:GL:GQ	0/1:59,24:60:-28.18,-18.09,-178.30:99
-chr1	4188372	rs1874267	T	G	455.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.37;MQ0=0;OQ=1048.28;QD=15.88;SB=-524.40	GT:AD:DP:GL:GQ	0/1:29,37:66:-127.99,-19.88,-107.31:99
-chr1	4188412	rs1874266	A	G	468.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.24;MQ0=0;OQ=798.75;QD=14.52;SB=-409.67	GT:AD:DP:GL:GQ	0/1:23,32:52:-98.84,-15.68,-83.89:99
-chr1	4188663	rs10915480	A	G	337.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.23;MQ0=0;OQ=1153.25;QD=13.73;SB=-560.60	GT:AD:DP:GL:GQ	0/1:38,45:83:-146.27,-27.66,-153.88:99
-chr1	4188905	rs10753374	A	G	386.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1195.33;QD=15.73;SB=-552.85	GT:AD:DP:GL:GQ	0/1:35,41:76:-145.71,-22.90,-141.29:99
-chr1	4189544	rs10753375	T	G	601.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1995.47;QD=35.01;SB=-845.10	GT:AD:DP:GL:GQ	1/1:0,57:56:-203.15,-16.86,-0.01:99
-chr1	4189582	rs10799217	A	G	68.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=59.39;MQ0=0;OQ=909.16;QD=14.90;SB=-461.96	GT:AD:DP:GL:GQ	0/1:30,31:61:-112.58,-18.38,-119.06:99
-chr1	4189759	rs10799218	T	C	84.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=3;HaplotypeScore=1.76;MQ=58.80;MQ0=0;OQ=827.52;QD=11.18;SB=-285.14	GT:AD:DP:GL:GQ	0/1:41,32:73:-108.03,-22.00,-167.09:99
-chr1	4191122	rs6426406	T	C	3.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=7.31;MQ=59.57;MQ0=0;OQ=717.35;QD=10.71;SB=-224.24	GT:AD:DP:GL:GQ	0/1:37,30:64:-94.30,-19.28,-145.85:99
-chr1	4191702	rs7541544	T	C	425.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.70;MQ0=0;OQ=729.14;QD=11.76;SB=-343.04	GT:AD:DP:GL:GQ	0/1:32,30:60:-94.28,-18.09,-122.33:99
-chr1	4191813	rs7534461	C	G	457.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.78;MQ0=0;OQ=1324.41;QD=15.96;SB=-593.50	GT:AD:DP:GL:GQ	0/1:46,37:83:-160.73,-25.00,-206.24:99
-chr1	4191898	rs7534558	C	T	290.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=60.00;MQ0=0;OQ=1246.57;QD=14.17;SB=-621.73	GT:AD:DP:GL:GQ	0/1:50,38:86:-153.86,-25.92,-153.30:99
-chr1	4191985	rs10799219	G	C	69.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=59.38;MQ0=0;OQ=1617.32;QD=21.86;SB=-548.71	GT:AD:DP:GL:GQ	0/1:32,42:72:-186.71,-21.70,-128.86:99
-chr1	4192218	rs10159168	A	T	343.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1388.76;QD=16.94;SB=-472.56	GT:AD:DP:GL:GQ	0/1:39,43:82:-166.86,-24.70,-146.13:99
-chr1	4195817	rs1390135	T	G	143.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=58.67;MQ0=0;OQ=705.86;QD=11.20;SB=-334.03	GT:AD:DP:GL:GQ	0/1:33,30:61:-92.25,-18.38,-113.54:99
-chr1	4197896	.	G	A	10.32	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.52;MQ0=0;OQ=1035.41;QD=21.57;SB=-410.45	GT:AD:DP:GL:GQ	0/1:18,30:48:-121.29,-14.46,-58.46:99
-chr1	4198535	rs1495242	A	G	438.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1076.27;QD=12.97;SB=-544.21	GT:AD:DP:GL:GQ	0/1:44,39:81:-135.31,-24.40,-175.25:99
-chr1	4199191	rs12124378	C	T	379.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=1302.45;QD=20.35;SB=-581.61	GT:AD:DP:GL:GQ	0/1:26,38:63:-152.50,-18.97,-95.47:99
-chr1	4199881	.	G	T	32.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=2;HaplotypeScore=5.28;MQ=57.83;MQ0=0;QD=0.74;SB=74.26	GT:AD:DP:GL:GQ	0/1:31,13:34:-16.78,-10.24,-105.31:65.40
-chr1	4200007	.	G	A	96.98	PASS	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.35;MQ0=0;OQ=1236.21;QD=18.45;SB=-537.73	GT:AD:DP:GL:GQ	0/1:28,39:63:-145.88,-18.98,-96.95:99
-chr1	4200165	rs6426407	A	G	72.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.49;MQ0=0;OQ=1344.67;QD=18.17;SB=-519.96	GT:AD:DP:GL:GQ	0/1:29,44:72:-159.44,-21.69,-113.24:99
-chr1	4200817	rs4654518	G	A	711.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2818.25;QD=39.69;SB=-1209.38	GT:AD:DP:GL:GQ	1/1:0,71:70:-285.42,-21.08,-0.01:99
-chr1	4202021	rs12124548	G	A	209.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.70;MQ0=0;OQ=1241.05;QD=20.02;SB=-465.47	GT:AD:DP:GL:GQ	0/1:26,36:61:-145.77,-18.38,-85.04:99
-chr1	4202445	rs12405770	A	G	576.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1249.87;QD=15.62;SB=-595.92	GT:AD:DP:GL:GQ	0/1:37,43:79:-152.07,-23.80,-148.48:99
-chr1	4202474	rs6426409	T	G	405.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.78;MQ0=0;OQ=1102.86;QD=13.13;SB=-556.72	GT:AD:DP:GL:GQ	0/1:44,40:82:-138.27,-24.70,-157.66:99
-chr1	4204888	rs12132080	A	T	242.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=45.12;MQ0=6;OQ=964.76;QD=12.69;SB=-408.56	GT:AD:DP:GL:GQ	0/1:34,42:65:-119.34,-19.58,-129.51:99
-chr1	4208143	rs6690300	T	G	448.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.45;MQ0=0;OQ=967.38;QD=12.73;SB=-340.51	GT:AD:DP:GL:GQ	0/1:41,35:76:-122.91,-22.89,-152.81:99
-chr1	4208388	rs12239600	T	C	466.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.66;MQ0=0;OQ=937.21;QD=13.78;SB=-484.77	GT:AD:DP:GL:GQ	0/1:32,36:68:-117.50,-20.50,-127.59:99
-chr1	4208894	rs12078298	T	A	402.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.48;MQ0=0;OQ=1434.64;QD=16.12;SB=-624.40	GT:AD:DP:GL:GQ	0/1:43,46:88:-173.25,-26.51,-162.85:99
-chr1	4209813	rs6679489	G	A	164.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=60.00;MQ0=0;OQ=1435.86;QD=16.89;SB=-638.14	GT:AD:DP:GL:GQ	0/1:41,44:83:-171.87,-25.00,-148.88:99
-chr1	4211295	rs4654519	C	T	437.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.97;MQ0=0;OQ=1264.42;QD=19.76;SB=-439.80	GT:AD:DP:GL:GQ	0/1:26,38:62:-148.40,-18.68,-90.27:99
-chr1	4211773	rs10915487	T	G	175.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.23;MQ0=0;OQ=638.07;QD=10.29;SB=-306.76	GT:AD:DP:GL:GQ	0/1:37,25:61:-85.47,-18.38,-128.27:99
-chr1	4212065	rs1908490	C	T	369.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=57.82;MQ0=0;OQ=1109.73;QD=15.20;SB=-541.53	GT:AD:DP:GL:GQ	0/1:40,33:71:-135.64,-21.39,-134.48:99
-chr1	4213163	rs12741715	A	T	578.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1267.51;QD=16.90;SB=-452.19	GT:AD:DP:GL:GQ	0/1:35,40:74:-152.32,-22.29,-133.91:99
-chr1	4215064	rs966321	G	T	6.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=4;HaplotypeScore=2.95;MQ=59.70;MQ0=0;OQ=1037.52;QD=13.65;SB=-540.72	GT:AD:DP:GL:GQ	0/1:40,36:75:-129.62,-22.59,-142.94:99
-chr1	4215408	rs12691488	C	T	601.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1073.26;QD=16.02;SB=-541.06	GT:AD:DP:GL:GQ	0/1:35,32:66:-130.50,-19.89,-109.64:99
-chr1	4216644	rs964715	T	C	389.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=939.74;QD=14.46;SB=-445.57	GT:AD:DP:GL:GQ	0/1:32,33:65:-116.84,-19.58,-130.15:99
-chr1	4217111	rs1495250	T	C	316.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=777.71;QD=11.44;SB=-393.04	GT:AD:DP:GL:GQ	0/1:36,32:67:-101.25,-20.19,-143.99:99
-chr1	4218910	rs11583756	G	A	393.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=562.25;QD=10.41;SB=-300.82	GT:AD:DP:GL:GQ	0/1:33,21:51:-74.88,-15.38,-106.07:99
-chr1	4219107	rs7545415	G	A	274.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.24;MQ0=0;OQ=794.53;QD=14.45;SB=-389.90	GT:AD:DP:GL:GQ	0/1:30,25:51:-98.11,-15.38,-85.30:99
-chr1	4221548	rs1826719	G	A	1.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=1;HaplotypeScore=9.57;MQ=59.01;MQ0=0;OQ=1104.32;QD=16.73;SB=-370.86	GT:AD:DP:GL:GQ	0/1:31,34:63:-132.39,-18.68,-107.97:99
-chr1	4221834	rs1390137	T	A	402.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.24;MQ0=0;OQ=1338.31;QD=14.71;SB=-600.22	GT:AD:DP:GL:GQ	0/1:48,43:91:-164.52,-27.41,-184.18:99
-chr1	4222993	rs7526339	A	G	180.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=860.50;QD=13.04;SB=-424.26	GT:AD:DP:GL:GQ	0/1:36,30:65:-108.91,-19.58,-143.92:99
-chr1	4225449	rs9286982	A	C	384.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.50;MQ0=0;OQ=1099.77;QD=14.66;SB=-338.80	GT:AD:DP:GL:GQ	0/1:38,37:74:-135.55,-22.29,-134.84:99
-chr1	4226228	rs2411738	G	A	332.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=1328.38;QD=18.98;SB=-511.52	GT:AD:DP:GL:GQ	0/1:30,40:68:-156.63,-20.50,-89.85:99
-chr1	4227495	rs2101576	C	T	457.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.43;MQ0=0;OQ=1111.42;QD=15.22;SB=-551.59	GT:AD:DP:GL:GQ	0/1:39,34:73:-136.43,-22.01,-124.07:99
-chr1	4227724	rs10915493	G	A	108.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=60.00;MQ0=0;OQ=1106.23;QD=18.75;SB=-402.40	GT:AD:DP:GL:GQ	0/1:26,33:59:-131.68,-17.78,-92.93:99
-chr1	4228365	.	G	A	59.74	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.73;MQ0=0;OQ=1218.17;QD=16.69;SB=-516.71	GT:AD:DP:GL:GQ	0/1:36,37:71:-146.49,-21.39,-124.67:99
-chr1	4228440	rs11586171	G	A	378.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.25;MQ0=0;OQ=793.38;QD=14.17;SB=-261.74	GT:AD:DP:GL:GQ	0/1:30,26:52:-98.30,-15.68,-86.01:99
-chr1	4228626	rs10799221	A	G	244.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.55;MQ0=0;OQ=773.13;QD=15.16;SB=-359.35	GT:AD:DP:GL:GQ	0/1:24,27:50:-95.66,-15.07,-89.39:99
-chr1	4230147	rs6677984	A	G	313.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.80;MQ0=0;OQ=752.97;QD=10.61;SB=-294.25	GT:AD:DP:GL:GQ	0/1:36,35:64:-97.88,-19.30,-127.54:99
-chr1	4231035	.	G	A	41.87	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=59.27;MQ0=0;OQ=1023.37;QD=17.95;SB=-471.06	GT:AD:DP:GL:GQ	0/1:23,34:54:-121.89,-16.27,-83.08:99
-chr1	4231643	rs4654426	A	G	357.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.13;MQ0=0;OQ=804.91;QD=14.63;SB=-368.10	GT:AD:DP:GL:GQ	0/1:22,33:51:-99.15,-15.37,-84.11:99
-chr1	4232195	.	G	A	71.35	PASS	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=60.00;MQ0=0;OQ=896.42;QD=13.18;SB=-396.87	GT:AD:DP:GL:GQ	0/1:39,29:68:-113.42,-20.50,-128.87:99
-chr1	4232590	rs7527612	G	A	196.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.22;MQ=59.61;MQ0=0;OQ=598.22;QD=12.46;SB=-285.21	GT:AD:DP:GL:GQ	0/1:26,20:44:-76.37,-13.26,-81.07:99
-chr1	4233150	rs10737406	C	T	190.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1662.89;QD=19.34;SB=-750.79	GT:AD:DP:GL:GQ	0/1:38,48:86:-195.48,-25.90,-136.98:99
-chr1	4233365	rs10737407	T	C	106.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.79;MQ0=0;OQ=829.78;QD=9.43;SB=-420.85	GT:AD:DP:GL:GQ	0/1:52,36:87:-112.48,-26.22,-211.16:99
-chr1	4233528	rs10737408	T	C	490.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1057.73;QD=14.90;SB=-414.29	GT:AD:DP:GL:GQ	0/1:30,41:71:-130.46,-21.40,-122.91:99
-chr1	4233635	rs10799223	G	C	53.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=4.97;MQ=59.34;MQ0=0;OQ=1650.26;QD=16.67;SB=-729.99	GT:AD:DP:GL:GQ	0/1:53,46:99:-198.14,-29.83,-227.12:99
-chr1	4234047	rs12095914	C	T	0.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=9.26;MQ=42.37;MQ0=0;OQ=137.29;QD=9.81;SB=-42.54	GT:AD:DP:GL:GQ	0/1:9,5:10:-20.03,-3.01,-17.15:99
-chr1	4234051	rs56077919	C	T	1.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=38.66;MQ0=0;OQ=106.65;QD=8.89;SB=-40.54	GT:AD:DP:GL:GQ	0/1:8,4:8:-16.36,-2.41,-14.46:99
-chr1	4234076	.	T	C	1.57	PASS	AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=36.23;MQ0=1;OQ=55.15;QD=6.13;SB=-6.99	GT:AD:DP:GL:GQ	0/1:6,3:7:-10.91,-2.11,-15.53:87.98
-chr1	4234095	rs12752111	C	T	29.22	LowQual	AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=2.44;MQ=42.08;MQ0=1;QD=3.65;SB=-10.00	GT:AD:DP:GL:GQ	0/1:5,3:6:-8.01,-1.81,-14.07:62.05
-chr1	4234115	.	T	C	41.10	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=27.16;MQ=46.57;MQ0=0;QD=2.94;SB=-6.99	GT:AD:DP:GL:GQ	0/1:10,4:11:-10.71,-3.31,-31.76:73.94
-chr1	4234119	.	T	C	26.07	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=23.15;MQ=48.70;MQ0=0;QD=1.37;SB=-6.99	GT:AD:DP:GL:GQ	0/1:13,6:15:-10.41,-4.52,-48.38:58.90
-chr1	4234123	.	T	C	99.42	SnpCluster	AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=15.26;MQ=47.83;MQ0=0;QD=4.52;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,7:16:-18.04,-4.82,-44.01:99
-chr1	4234141	.	C	T	11.93	LowQual	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=3;HaplotypeScore=2.90;MQ=45.82;MQ0=0;QD=0.38;SB=-10.00	GT:AD:DP:GL:GQ	0/1:27,4:24:-11.68,-7.23,-69.44:44.48
-chr1	4234162	rs55680202	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.02;HRun=14;HaplotypeScore=7.57;MQ=46.57;MQ0=0;OQ=162.83;QD=3.54;SB=-20.39	GT:AD:DP:GL:GQ	0/1:36,9:39:-31.01,-11.45,-100.16:99
-chr1	4234461	rs2898791	C	A	324.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=54.58;MQ0=0;OQ=1440.90;QD=17.57;SB=-669.70	GT:AD:DP:GL:GQ	0/1:33,49:78:-170.87,-23.50,-98.97:99
-chr1	4235747	rs1495243	G	A	21.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=59.34;MQ0=0;OQ=727.40;QD=20.78;SB=-304.24	GT:AD:DP:GL:GQ	0/1:14,21:34:-86.27,-10.24,-44.00:99
-chr1	4235753	rs903541	A	G	320.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=658.30;QD=17.79;SB=-304.49	GT:AD:DP:GL:GQ	0/1:15,22:36:-79.96,-10.84,-57.03:99
-chr1	4236215	rs2411739	T	C	3.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=4;HaplotypeScore=1.73;MQ=54.14;MQ0=0;OQ=570.50;QD=9.84;SB=-308.25	GT:AD:DP:GL:GQ	0/1:27,31:50:-75.41,-15.07,-105.40:99
-chr1	4243198	rs6658727	T	C	21.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=56.21;MQ0=0;OQ=1400.87;QD=30.45;SB=-402.32	GT:AD:DP:GL:GQ	1/1:0,46:43:-143.70,-12.96,-0.03:99
-chr1	4254604	rs1495248	G	A	254.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.88;MQ0=0;OQ=575.96;QD=13.39;SB=-220.90	GT:AD:DP:GL:GQ	0/1:24,19:42:-73.53,-12.65,-79.75:99
-chr1	4255328	rs2130621	G	A	47.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=4.28;MQ=59.31;MQ0=0;OQ=1064.10;QD=15.88;SB=-426.97	GT:AD:DP:GL:GQ	0/1:33,34:65:-129.28,-19.59,-111.47:99
-chr1	4255353	rs12123539	G	C	316.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=1198.39;QD=17.89;SB=-531.27	GT:AD:DP:GL:GQ	0/1:31,36:67:-143.33,-20.20,-136.21:99
-chr1	4255453	rs2029490	A	G	353.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.70;MQ0=0;OQ=1028.79;QD=13.19;SB=-497.67	GT:AD:DP:GL:GQ	0/1:34,44:74:-128.48,-22.32,-128.69:99
-chr1	4256070	rs61769407	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.03;HRun=0;HaplotypeScore=33.48;MQ=52.67;MQ0=1;OQ=340.13;QD=5.08;SB=-156.75	GT:AD:DP:GL:GQ	0/1:47,18:58:-54.18,-16.88,-142.71:99
-chr1	4256256	rs12563155	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=93.47;MQ=55.97;MQ0=0;OQ=536.64;QD=7.56;SB=-213.44	GT:AD:DP:GL:GQ	0/1:49,22:63:-75.92,-18.98,-150.16:99
-chr1	4256294	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=8.05;MQ=57.07;MQ0=1;OQ=87.19;QD=1.23;SB=41.60	GT:AD:DP:GL:GQ	0/1:61,10:65:-31.59,-19.59,-196.34:99
-chr1	4256295	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=7.58;MQ=57.07;MQ0=1;OQ=86.67;QD=1.22;SB=35.22	GT:AD:DP:GL:GQ	0/1:61,10:60:-30.03,-18.08,-181.58:99
-chr1	4256665	rs11487456	A	C	56.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=2.90;MQ=57.92;MQ0=0;OQ=976.57;QD=11.10;SB=-464.71	GT:AD:DP:GL:GQ	0/1:50,38:85:-126.54,-25.60,-185.54:99
-chr1	4258667	rs10753377	G	C	1.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=5;HaplotypeScore=1.15;MQ=59.53;MQ0=0;OQ=783.06;QD=15.98;SB=-363.09	GT:AD:DP:GL:GQ	0/1:26,23:47:-95.76,-14.17,-99.93:99
-chr1	4259991	rs592323	G	T	282.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1759.13;QD=36.65;SB=-870.26	GT:AD:DP:GL:GQ	1/1:0,48:48:-179.51,-14.45,-0.01:99
-chr1	4261395	rs513096	G	A	177.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=58.45;MQ0=0;OQ=707.77;QD=15.73;SB=-231.55	GT:AD:DP:GL:GQ	0/1:23,22:44:-87.33,-13.26,-70.99:99
-chr1	4262899	.	A	G	18.25	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=43.81;MQ=48.38;MQ0=0;QD=0.33;SB=-10.00	GT:AD:DP:GL:GQ	0/1:50,5:40:-17.15,-12.05,-140.45:51.02
-chr1	4262904	rs28675202	G	A	73.10	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=50.70;MQ0=0;QD=1.43;SB=-10.00	GT:AD:DP:GL:GQ	0/1:40,11:45:-24.15,-13.55,-132.97:99
-chr1	4262909	.	G	A	79.12	SnpCluster	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=50.76;MQ0=0;QD=1.65;SB=-10.00	GT:AD:DP:GL:GQ	0/1:37,11:43:-24.15,-12.95,-125.43:99
-chr1	4262914	rs629808	G	A	33.56	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=52.89;MQ=50.96;MQ0=0;QD=0.68;SB=-10.00	GT:AD:DP:GL:GQ	0/1:39,10:44:-19.89,-13.25,-132.97:66.40
-chr1	4262923	.	C	T	231.89	SnpCluster	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=36.64;MQ=51.44;MQ0=0;QD=5.27;SB=-10.00	GT:AD:DP:GL:GQ	0/1:30,14:37:-37.63,-11.16,-89.50:99
-chr1	4262924	rs3124336	G	A	119.70	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=42.63;MQ=51.44;MQ0=0;QD=2.72;SB=-10.00	GT:AD:DP:GL:GQ	0/1:30,14:37:-26.40,-11.15,-102.56:99
-chr1	4262928	.	C	T	227.91	SnpCluster	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=40.91;MQ=51.65;MQ0=0;QD=5.06;SB=-10.00	GT:AD:DP:GL:GQ	0/1:31,14:38:-37.54,-11.47,-89.09:99
-chr1	4262934	.	G	A	212.81	SnpCluster	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=38.78;MQ=51.84;MQ0=0;QD=4.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:35,11:39:-36.31,-11.75,-102.65:99
-chr1	4262955	.	C	T	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=10.30;MQ=55.28;MQ0=0;OQ=119.85;QD=3.24;SB=-10.00	GT:AD:DP:GL:GQ	0/1:30,7:34:-25.51,-10.24,-106.69:99
-chr1	4262965	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=55.83;MQ0=0;OQ=58.64;QD=1.63;SB=-10.00	GT:AD:DP:GL:GQ	0/1:31,5:33:-19.09,-9.94,-116.28:91.47
-chr1	4263200	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=16.50;MQ=29.51;MQ0=20;OQ=97.44;QD=2.38;SB=-10.00	GT:AD:DP:GL:GQ	0/1:35,5:14:-17.24,-4.22,-36.40:99
-chr1	4263205	rs12035244	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=20.28;MQ=30.89;MQ0=18;OQ=95.43;QD=2.27;SB=-10.00	GT:AD:DP:GL:GQ	0/1:37,5:15:-17.34,-4.52,-40.16:99
-chr1	4263595	rs34429154	C	A	184.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=59.01;MQ0=0;OQ=488.72;QD=10.40;SB=-267.26	GT:AD:DP:GL:GQ	0/1:29,18:46:-66.01,-13.86,-101.87:99
-chr1	4263832	rs584035	G	A	216.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.61;MQ0=0;OQ=1091.44;QD=18.50;SB=-496.53	GT:AD:DP:GL:GQ	0/1:27,32:59:-130.21,-17.78,-86.40:99
-chr1	4263930	rs503536	G	A	202.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.57;MQ0=0;OQ=661.52;QD=12.25;SB=-344.44	GT:AD:DP:GL:GQ	0/1:32,22:49:-84.20,-14.76,-96.54:99
-chr1	4264086	rs693734	C	T	101.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.89;MQ=58.91;MQ0=0;OQ=1021.37;QD=17.02;SB=-501.11	GT:AD:DP:GL:GQ	0/1:29,31:59:-123.20,-17.78,-92.76:99
-chr1	4264332	rs1106307	A	G	290.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=59.33;MQ0=0;OQ=913.45;QD=14.73;SB=-354.33	GT:AD:DP:GL:GQ	0/1:28,34:58:-112.10,-17.47,-104.59:99
-chr1	4264424	rs2132176	A	G	368.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=613.38;QD=11.15;SB=-237.28	GT:AD:DP:GL:GQ	0/1:30,25:53:-80.60,-15.97,-111.46:99
-chr1	4264542	rs2132174	T	A	221.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=52.27;MQ0=0;OQ=1008.56;QD=17.69;SB=-458.63	GT:AD:DP:GL:GQ	0/1:21,35:54:-122.63,-18.49,-81.00:99
-chr1	4264801	rs3007778	G	C	66.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.11;MQ0=0;OQ=580.26;QD=12.35;SB=-271.29	GT:AD:DP:GL:GQ	0/1:28,19:44:-74.59,-13.28,-102.55:99
-chr1	4265009	rs3007777	C	A	272.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.09;MQ0=0;OQ=812.00;QD=17.65;SB=-415.86	GT:AD:DP:GL:GQ	0/1:19,27:45:-98.04,-13.55,-64.20:99
-chr1	4265174	.	G	A	199.75	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=560.44;QD=13.67;SB=-202.85	GT:AD:DP:GL:GQ	0/1:23,18:41:-71.68,-12.35,-78.36:99
-chr1	4265866	rs56198562	A	G	125.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=59.78;MQ0=0;OQ=979.47;QD=11.66;SB=-298.20	GT:AD:DP:GL:GQ	0/1:43,41:82:-125.95,-24.72,-170.33:99
-chr1	4266398	rs1495240	C	T	180.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.09;MQ0=0;OQ=962.96;QD=18.88;SB=-480.01	GT:AD:DP:GL:GQ	0/1:23,28:47:-113.74,-14.16,-62.01:99
-chr1	4266494	rs1845634	G	A	227.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1124.56;QD=17.85;SB=-553.73	GT:AD:DP:GL:GQ	0/1:30,33:63:-134.72,-18.98,-108.50:99
-chr1	4267183	rs1490413	G	A	163.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=1.58;MQ=59.39;MQ0=0;OQ=1192.58;QD=17.54;SB=-578.10	GT:AD:DP:GL:GQ	0/1:31,37:66:-142.43,-19.88,-110.71:99
-chr1	4267249	rs16838591	G	A	109.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.45;MQ0=0;OQ=560.73;QD=16.49;SB=-154.59	GT:AD:DP:GL:GQ	0/1:17,17:34:-69.60,-10.24,-59.00:99
-chr1	4267670	rs17448695	C	T	256.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=2.17;MQ=59.11;MQ0=0;OQ=785.86;QD=16.72;SB=-406.95	GT:AD:DP:GL:GQ	0/1:22,24:45:-95.42,-13.55,-80.15:99
-chr1	4267782	rs1817914	T	C	324.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.97;MQ0=0;OQ=827.52;QD=14.03;SB=-394.24	GT:AD:DP:GL:GQ	0/1:29,30:58:-103.51,-17.47,-117.96:99
-chr1	4267840	rs2934983	G	A	322.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.36;MQ0=0;OQ=1060.38;QD=18.28;SB=-513.09	GT:AD:DP:GL:GQ	0/1:26,32:57:-126.49,-17.17,-95.38:99
-chr1	4267886	rs1817913	A	G	440.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=738.48;QD=13.43;SB=-393.26	GT:AD:DP:GL:GQ	0/1:24,31:50:-92.21,-15.08,-81.77:99
-chr1	4268301	rs351622	A	T	719.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1814.47;QD=35.58;SB=-930.73	GT:AD:DP:GL:GQ	1/1:0,51:49:-185.04,-14.76,-0.01:99
-chr1	4268579	rs351621	T	C	72.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.25;MQ0=0;OQ=1364.91;QD=27.30;SB=-524.09	GT:AD:DP:GL:GQ	1/1:0,50:43:-140.11,-12.97,-0.04:99
-chr1	4268604	rs351620	C	T	134.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=59.46;MQ0=0;OQ=1433.75;QD=33.34;SB=-736.64	GT:AD:DP:GL:GQ	1/1:0,43:39:-146.99,-11.76,-0.03:99
-chr1	4268679	rs351619	G	A	84.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1739.98;QD=37.83;SB=-519.64	GT:AD:DP:GL:GQ	1/1:0,46:44:-177.59,-13.26,-0.01:99
-chr1	4268802	rs351618	T	C	98.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=1092.21;QD=26.64;SB=-356.42	GT:AD:DP:GL:GQ	1/1:0,41:37:-112.85,-11.17,-0.05:99
-chr1	4268811	rs351617	C	T	143.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1491.48;QD=36.38;SB=-509.63	GT:AD:DP:GL:GQ	1/1:1,40:39:-152.75,-11.76,-0.02:99
-chr1	4268960	rs2087571	C	T	152.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.63;MQ0=0;OQ=643.83;QD=17.40;SB=-299.23	GT:AD:DP:GL:GQ	0/1:15,22:34:-77.91,-10.25,-47.03:99
-chr1	4269767	rs351616	A	G	168.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.87;MQ0=0;OQ=1214.77;QD=29.63;SB=-431.27	GT:AD:DP:GL:GQ	1/1:0,41:38:-125.09,-11.46,-0.03:99
-chr1	4270245	rs351615	G	A	292.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=58.55;MQ0=0;OQ=1966.57;QD=35.76;SB=-975.01	GT:AD:DP:GL:GQ	1/1:0,54:52:-200.27,-15.67,-0.02:99
-chr1	4271723	rs351614	C	T	601.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2473.56;QD=39.90;SB=-1111.03	GT:AD:DP:GL:GQ	1/1:0,62:62:-250.96,-18.68,-0.01:99
-chr1	4271809	rs12132314	C	T	430.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.65;MQ0=0;OQ=1181.91;QD=18.18;SB=-613.64	GT:AD:DP:GL:GQ	0/1:30,35:65:-141.06,-19.59,-97.20:99
-chr1	4273032	rs171260	A	C	300.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=870.08;QD=12.08;SB=-225.83	GT:AD:DP:GL:GQ	0/1:41,31:71:-111.68,-21.38,-150.14:99
-chr1	4274131	rs351613	A	C	265.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.14;MQ0=0;OQ=2299.32;QD=35.37;SB=-1119.04	GT:AD:DP:GL:GQ	1/1:0,65:65:-233.54,-19.58,-0.02:99
-chr1	4277771	rs351596	C	T	568.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=2579.09;QD=39.68;SB=-949.23	GT:AD:DP:GL:GQ	1/1:0,65:64:-261.51,-19.28,-0.02:99
-chr1	4279737	rs876273	C	G	132.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=59.56;MQ0=0;OQ=768.76;QD=14.78;SB=-189.63	GT:AD:DP:GL:GQ	0/1:23,29:48:-94.65,-14.49,-97.38:99
-chr1	4279818	rs351598	A	T	381.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.53;MQ=59.66;MQ0=0;OQ=991.33;QD=14.58;SB=-452.46	GT:AD:DP:GL:GQ	0/1:35,33:67:-122.60,-20.18,-130.61:99
-chr1	4280055	rs1874269	C	T	619.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=2766.74;QD=39.52;SB=-1179.55	GT:AD:DP:GL:GQ	1/1:0,70:69:-280.28,-20.79,-0.02:99
-chr1	4280204	rs2411741	C	A	180.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=1.15;MQ=60.13;MQ0=0;OQ=1218.75;QD=14.51;SB=-564.82	GT:AD:DP:GL:GQ	0/1:42,42:82:-149.85,-24.70,-149.73:99
-chr1	4280489	rs351599	C	T	413.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.72;MQ0=0;OQ=1071.03;QD=16.23;SB=-457.49	GT:AD:DP:GL:GQ	0/1:33,33:66:-130.29,-19.90,-102.77:99
-chr1	4285644	.	A	G	0.07	PASS	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=4;HaplotypeScore=2.54;MQ=57.79;MQ0=0;OQ=595.83;QD=12.16;SB=-120.71	GT:AD:DP:GL:GQ	0/1:26,23:47:-77.03,-14.16,-95.21:99
-chr1	4288221	.	G	A	0.84	PASS	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=8.13;MQ=58.71;MQ0=0;OQ=1360.73;QD=16.39;SB=-394.38	GT:AD:DP:GL:GQ	0/1:43,40:81:-163.76,-24.40,-149.01:99
-chr1	4289709	.	T	G	46.86	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=16.54;MQ=56.55;MQ0=0;QD=0.98;SB=53.18	GT:AD:DP:GL:GQ	0/1:27,21:32:-17.62,-9.65,-87.21:79.70
-chr1	4292594	rs34245285	G	C	0.05	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=3.96;MQ=50.65;MQ0=4;OQ=195.36;QD=3.15;SB=-102.43	GT:AD:DP:GL:GQ	0/1:47,15:34:-33.09,-10.27,-97.74:99
-chr1	4293081	rs34762254	C	G	17.74	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=35.42;MQ0=7;QD=0.43;SB=11.07	GT:AD:DP:GL:GQ	0/1:35,5:26:-12.90,-7.85,-90.70:50.51
-chr1	4293374	.	G	A	3.97	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=44.45;MQ0=2;OQ=329.37;QD=6.59;SB=0.51	GT:AD:DP:GL:GQ	0/1:31,19:40:-48.28,-12.06,-89.72:99
-chr1	4296431	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.01;HRun=0;HaplotypeScore=166.11;MQ=33.71;MQ0=1;OQ=76.77;QD=0.64;SB=116.41	GT:AD:DP:GL:GQ	0/1:95,22:100:-40.80,-29.83,-343.52:99
-chr1	4296441	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=126;Dels=0.07;HRun=0;HaplotypeScore=204.38;MQ=34.16;MQ0=1;OQ=63.06;QD=0.50;SB=111.78	GT:AD:DP:GL:GQ	0/1:104,10:96:-43.83,-34.24,-290.54:95.89
-chr1	4296449	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=184.01;MQ=35.76;MQ0=1;OQ=76.57;QD=0.81;SB=108.85	GT:AD:DP:GL:GQ	0/1:78,6:65:-53.79,-42.85,-256.56:99
-chr1	4296459	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=1;HaplotypeScore=225.82;MQ=37.43;MQ0=0;OQ=345.89;QD=3.98;SB=26.09	GT:AD:DP:GL:GQ	0/1:63,24:68:-58.36,-20.48,-198.46:99
-chr1	4296469	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=189.98;MQ=37.41;MQ0=0;OQ=75.74;QD=0.80;SB=12.63	GT:AD:DP:GL:GQ	0/1:84,11:69:-31.64,-20.79,-221.92:99
-chr1	4296493	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=88.30;MQ=41.30;MQ0=0;OQ=474.04;QD=4.65;SB=-167.48	GT:AD:DP:GL:GQ	0/1:59,36:81:-93.85,-43.16,-272.31:99
-chr1	4296506	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=103;Dels=0.03;HRun=1;HaplotypeScore=78.61;MQ=43.01;MQ0=0;OQ=51.88;QD=0.50;SB=101.36	GT:AD:DP:GL:GQ	0/1:87,13:87:-34.09,-25.62,-299.11:84.72
-chr1	4296513	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=0;HaplotypeScore=60.45;MQ=43.56;MQ0=0;OQ=185.47;QD=1.85;SB=-3.86	GT:AD:DP:GL:GQ	0/1:80,18:74:-44.13,-22.29,-236.48:99
-chr1	4296520	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=86.57;MQ=43.66;MQ0=0;OQ=90.49;QD=0.82;SB=69.81	GT:AD:DP:GL:GQ	0/1:99,12:95:-40.96,-28.62,-301.41:99
-chr1	4296571	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=0;HaplotypeScore=148.81;MQ=42.35;MQ0=0;OQ=149.13;QD=1.49;SB=56.28	GT:AD:DP:GL:GQ	0/1:64,20:79:-66.77,-48.58,-247.91:99
-chr1	4296587	.	G	A	55.07	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=113;Dels=0.02;HRun=0;HaplotypeScore=138.42;MQ=36.11;MQ0=2;QD=0.49;SB=3.46	GT:AD:DP:GL:GQ	0/1:83,28:77:-31.99,-23.20,-236.17:87.91
-chr1	4296590	.	A	G	63.20	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=113;Dels=0.01;HRun=1;HaplotypeScore=134.39;MQ=36.11;MQ0=2;QD=0.56;SB=44.15	GT:AD:DP:GL:GQ	0/1:101,11:84:-34.62,-25.01,-283.57:96.04
-chr1	4296596	.	G	A	133.96	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=190.44;MQ=35.58;MQ0=2;QD=1.09;SB=41.12	GT:AD:DP:GL:GQ	0/1:107,16:99:-46.51,-29.83,-296.83:99
-chr1	4296607	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=1;HaplotypeScore=185.73;MQ=34.74;MQ0=2;OQ=309.12;QD=2.47;SB=41.15	GT:AD:DP:GL:GQ	0/1:106,19:100:-64.31,-30.12,-298.02:99
-chr1	4296636	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=188.32;MQ=35.30;MQ0=3;OQ=116.48;QD=0.91;SB=56.18	GT:AD:DP:GL:GQ	0/1:110,17:102:-45.68,-30.75,-346.20:99
-chr1	4296642	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=236.73;MQ=34.36;MQ0=5;OQ=253.36;QD=1.95;SB=47.15	GT:AD:DP:GL:GQ	0/1:113,17:102:-59.34,-30.72,-306.11:99
-chr1	4296665	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=107.40;MQ=33.96;MQ0=6;OQ=319.22;QD=2.73;SB=50.15	GT:AD:DP:GL:GQ	0/1:91,24:96:-64.13,-28.92,-272.83:99
-chr1	4296668	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=119;Dels=0.01;HRun=0;HaplotypeScore=114.24;MQ=34.12;MQ0=7;OQ=295.42;QD=2.48;SB=-19.17	GT:AD:DP:GL:GQ	0/1:99,19:98:-62.05,-29.23,-276.38:99
-chr1	4296677	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=110;Dels=0.03;HRun=0;HaplotypeScore=117.38;MQ=34.73;MQ0=5;OQ=320.24;QD=2.91;SB=47.14	GT:AD:DP:GL:GQ	0/1:86,21:91:-62.13,-26.82,-250.93:99
-chr1	4296686	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=54.93;MQ=36.96;MQ0=5;OQ=147.08;QD=1.67;SB=50.15	GT:AD:DP:GL:GQ	0/1:78,10:74:-40.29,-22.30,-219.44:99
-chr1	4308180	.	C	T	161.22	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.53;MQ0=0;OQ=1282.15;QD=17.56;SB=-488.11	GT:AD:DP:GL:GQ	0/1:35,38:73:-153.50,-22.00,-116.62:99
-chr1	4309112	.	A	C	86.02	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.03;MQ0=0;OQ=562.66;QD=13.09;SB=-287.67	GT:AD:DP:GL:GQ	0/1:22,20:43:-74.67,-15.12,-82.44:99
-chr1	4310347	.	C	T	101.72	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=1172.68;QD=16.52;SB=-579.36	GT:AD:DP:GL:GQ	0/1:36,35:70:-141.64,-21.08,-130.80:99
-chr1	4314528	.	T	C	249.50	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.71;QD=18.38;SB=-476.64	GT:AD:DP:GL:GQ	0/1:22,35:57:-125.23,-17.17,-90.17:99
-chr1	4316332	.	T	G	43.87	PASS	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.09;MQ=59.28;MQ0=0;OQ=471.43;QD=14.73;SB=-242.41	GT:AD:DP:GL:GQ	0/1:14,18:31:-59.77,-9.34,-47.32:99
-chr1	4316334	.	C	G	15.52	PASS	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.32;MQ0=0;OQ=676.22;QD=19.89;SB=-323.04	GT:AD:DP:GL:GQ	0/1:15,19:34:-81.16,-10.25,-60.88:99
-chr1	4318103	rs349395	A	G	659.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1716.14;QD=31.20;SB=-834.63	GT:AD:DP:GL:GQ	1/1:0,55:54:-175.24,-16.28,-0.05:99
-chr1	4319680	rs349393	A	C	563.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=813.26;QD=15.95;SB=-376.77	GT:AD:DP:GL:GQ	0/1:23,28:51:-99.97,-15.36,-86.41:99
-chr1	4319765	rs102083	A	T	361.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=55.80;MQ0=0;OQ=747.97;QD=14.96;SB=-385.65	GT:AD:DP:GL:GQ	0/1:24,26:48:-92.54,-14.46,-85.84:99
-chr1	4319782	rs28431405	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=20;HaplotypeScore=17.05;MQ=53.28;MQ0=0;OQ=875.22;QD=14.59;SB=-406.12	GT:AD:DP:GL:GQ	0/1:25,35:49:-105.57,-14.76,-69.63:99
-chr1	4319814	rs102085	G	A	15.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=5.54;MQ=52.08;MQ0=0;OQ=929.67;QD=17.22;SB=-462.49	GT:AD:DP:GL:GQ	0/1:25,29:49:-111.01,-14.76,-74.46:99
-chr1	4319857	rs17410050	C	T	91.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.83;MQ0=0;OQ=1009.89;QD=18.36;SB=-347.35	GT:AD:DP:GL:GQ	0/1:26,29:55:-120.84,-16.57,-94.75:99
-chr1	4320268	rs349392	G	T	359.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.27;MQ=58.71;MQ0=0;OQ=818.84;QD=15.16;SB=-433.16	GT:AD:DP:GL:GQ	0/1:23,30:49:-99.94,-14.77,-68.96:99
-chr1	4320352	rs101287	A	C	9.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.94;MQ=58.91;MQ0=0;OQ=686.61;QD=10.73;SB=-323.81	GT:AD:DP:GL:GQ	0/1:36,28:61:-90.33,-18.38,-119.68:99
-chr1	4321671	rs56216403	A	T	13.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.66;MQ=57.98;MQ0=0;OQ=569.50;QD=12.94;SB=-290.67	GT:AD:DP:GL:GQ	0/1:24,20:41:-72.59,-12.36,-76.85:99
-chr1	4321865	rs349391	T	C	61.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=58.51;MQ0=0;OQ=775.30;QD=16.50;SB=-140.34	GT:AD:DP:GL:GQ	0/1:20,26:42:-93.47,-12.66,-62.46:99
-chr1	4321866	rs56376431	G	A	8.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=58.51;MQ0=0;OQ=873.71;QD=18.59;SB=-178.26	GT:AD:DP:GL:GQ	0/1:21,26:42:-103.31,-12.65,-56.39:99
-chr1	4322006	rs56162804	C	T	116.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.53;MQ0=0;OQ=1021.04;QD=20.84;SB=-534.77	GT:AD:DP:GL:GQ	0/1:19,30:49:-120.16,-14.77,-59.62:99
-chr1	4322030	rs55838104	C	T	52.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=1120.64;QD=21.14;SB=-534.76	GT:AD:DP:GL:GQ	0/1:20,33:52:-131.01,-15.67,-66.54:99
-chr1	4322090	rs16838800	A	G	416.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=910.62;QD=19.80;SB=-423.34	GT:AD:DP:GL:GQ	0/1:16,30:46:-108.20,-13.86,-64.49:99
-chr1	4322538	rs12403556	C	G	69.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=60.00;MQ0=0;OQ=1513.57;QD=24.81;SB=-525.74	GT:AD:DP:GL:GQ	0/1:20,41:61:-173.03,-18.39,-83.32:99
-chr1	4322543	rs12404034	A	G	25.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.64;MQ=60.00;MQ0=0;OQ=1221.46;QD=20.02;SB=-417.22	GT:AD:DP:GL:GQ	0/1:20,41:60:-143.50,-18.07,-80.25:99
-chr1	4322609	rs12404038	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=5;HaplotypeScore=9.16;MQ=59.56;MQ0=0;OQ=664.61;QD=12.54;SB=-143.41	GT:AD:DP:GL:GQ	0/1:24,29:49:-84.51,-14.77,-94.35:99
-chr1	4322739	rs12404366	T	C	226.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=432.95;QD=9.41;SB=-158.54	GT:AD:DP:GL:GQ	0/1:29,17:46:-60.44,-13.86,-115.98:99
-chr1	4322916	rs12402553	G	A	357.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.62;MQ0=0;OQ=842.62;QD=13.81;SB=-393.36	GT:AD:DP:GL:GQ	0/1:35,26:59:-105.32,-17.77,-117.60:99
-chr1	4323438	rs16838810	A	G	123.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=59.40;MQ0=0;OQ=808.90;QD=13.05;SB=-366.96	GT:AD:DP:GL:GQ	0/1:30,32:61:-102.56,-18.39,-119.19:99
-chr1	4323490	rs55944275	G	A	62.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=1153.53;QD=19.89;SB=-343.36	GT:AD:DP:GL:GQ	0/1:24,34:57:-135.81,-17.17,-85.54:99
-chr1	4323756	rs349390	T	C	313.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.62;MQ0=0;OQ=671.97;QD=11.20;SB=-140.85	GT:AD:DP:GL:GQ	0/1:34,26:58:-87.95,-17.47,-136.36:99
-chr1	4323757	rs58351078	G	A	132.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.61;MQ0=0;OQ=802.14;QD=13.60;SB=-181.76	GT:AD:DP:GL:GQ	0/1:34,25:59:-101.27,-17.77,-124.39:99
-chr1	4323928	rs61676533	C	T	374.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.48;MQ0=0;OQ=1036.80;QD=14.40;SB=-477.00	GT:AD:DP:GL:GQ	0/1:40,32:72:-128.65,-21.69,-142.77:99
-chr1	4323975	rs16838812	A	G	340.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=59.17;MQ0=0;OQ=822.30;QD=12.09;SB=-364.22	GT:AD:DP:GL:GQ	0/1:38,30:68:-106.00,-20.49,-150.74:99
-chr1	4324005	rs16838813	G	A	586.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.08;MQ0=0;OQ=833.74;QD=14.13;SB=-356.82	GT:AD:DP:GL:GQ	0/1:33,26:58:-104.14,-17.48,-106.56:99
-chr1	4324062	rs56775247	A	G	352.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.86;MQ0=0;OQ=755.78;QD=11.81;SB=-150.88	GT:AD:DP:GL:GQ	0/1:37,27:64:-98.14,-19.28,-148.79:99
-chr1	4324102	rs57599092	A	T	199.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=53.27;MQ0=0;OQ=1008.31;QD=14.83;SB=-333.61	GT:AD:DP:GL:GQ	0/1:34,34:66:-123.99,-19.88,-127.49:99
-chr1	4324399	rs11804096	T	C	269.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=45.70;MQ0=1;OQ=598.48;QD=11.29;SB=-306.38	GT:AD:DP:GL:GQ	0/1:28,25:48:-77.59,-14.46,-100.69:99
-chr1	4324626	rs11803736	A	G	203.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=51.26;MQ0=1;OQ=569.48;QD=10.55;SB=-273.41	GT:AD:DP:GL:GQ	0/1:32,22:52:-75.89,-15.66,-126.39:99
-chr1	4324693	rs11801800	G	A	371.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=50.70;MQ0=1;OQ=920.80;QD=14.85;SB=-460.99	GT:AD:DP:GL:GQ	0/1:32,30:59:-113.14,-17.77,-113.29:99
-chr1	4324939	rs12729994	C	A	219.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.71;MQ0=0;OQ=746.98;QD=16.98;SB=-320.72	GT:AD:DP:GL:GQ	0/1:18,26:42:-90.63,-12.65,-55.46:99
-chr1	4325115	rs12742617	T	G	433.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.56;MQ0=0;OQ=1013.88;QD=12.07;SB=-397.13	GT:AD:DP:GL:GQ	0/1:47,37:83:-129.67,-25.00,-173.24:99
-chr1	4325508	rs34012704	A	G	166.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=59.63;MQ0=0;OQ=986.31;QD=19.34;SB=-504.18	GT:AD:DP:GL:GQ	0/1:17,34:49:-116.68,-14.77,-62.75:99
-chr1	4325583	.	G	A	54.73	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=709.46;QD=16.50;SB=-303.82	GT:AD:DP:GL:GQ	0/1:18,25:41:-86.59,-12.36,-64.70:99
-chr1	4325707	rs12405082	A	G	0.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=6.04;MQ=58.57;MQ0=0;OQ=521.78;QD=8.42;SB=-177.38	GT:AD:DP:GL:GQ	0/1:38,24:56:-72.34,-16.88,-134.28:99
-chr1	4325759	.	C	T	1.66	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=2.89;MQ=58.50;MQ0=0;OQ=768.28;QD=12.39;SB=-160.15	GT:AD:DP:GL:GQ	0/1:32,29:57:-97.29,-17.18,-106.60:99
-chr1	4325887	rs12403671	G	C	245.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.67;MQ0=0;OQ=1119.45;QD=19.64;SB=-552.71	GT:AD:DP:GL:GQ	0/1:24,33:54:-131.50,-16.27,-104.02:99
-chr1	4325945	rs12404619	C	T	347.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.65;MQ0=0;OQ=874.85;QD=15.91;SB=-387.13	GT:AD:DP:GL:GQ	0/1:26,29:53:-106.74,-15.97,-91.70:99
-chr1	4326338	rs16838819	A	C	229.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=58.63;MQ0=0;OQ=550.44;QD=10.79;SB=-296.79	GT:AD:DP:GL:GQ	0/1:29,22:49:-73.09,-14.76,-103.75:99
-chr1	4327728	rs34472761	G	C	257.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.05;MQ0=0;OQ=1072.08;QD=16.75;SB=-550.71	GT:AD:DP:GL:GQ	0/1:32,32:62:-129.19,-18.70,-130.17:99
-chr1	4328031	rs56108323	G	A	198.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=626.21;QD=12.28;SB=-249.12	GT:AD:DP:GL:GQ	0/1:27,24:48:-80.37,-14.46,-97.54:99
-chr1	4329322	rs483344	A	G	283.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.34;MQ0=0;OQ=672.82;QD=9.61;SB=-273.11	GT:AD:DP:GL:GQ	0/1:41,29:68:-91.06,-20.50,-159.89:99
-chr1	4331124	rs572439	A	C	450.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.73;MQ0=0;OQ=1069.67;QD=15.73;SB=-417.82	GT:AD:DP:GL:GQ	0/1:30,38:67:-130.43,-20.18,-110.75:99
-chr1	4331158	rs572343	G	A	289.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.72;MQ0=0;OQ=1247.65;QD=18.62;SB=-597.10	GT:AD:DP:GL:GQ	0/1:31,36:64:-147.32,-19.27,-103.83:99
-chr1	4331483	rs12750862	T	C	292.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=59.55;MQ0=0;OQ=752.94;QD=14.76;SB=-378.63	GT:AD:DP:GL:GQ	0/1:24,27:49:-93.35,-14.77,-86.37:99
-chr1	4331508	.	C	T	49.49	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=60.00;MQ0=0;OQ=892.12;QD=17.84;SB=-369.91	GT:AD:DP:GL:GQ	0/1:18,31:43:-105.46,-12.97,-47.94:99
-chr1	4333712	rs2926485	T	C	268.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=59.83;MQ0=0;OQ=1004.92;QD=15.70;SB=-484.15	GT:AD:DP:GL:GQ	0/1:28,35:61:-122.15,-18.38,-108.51:99
-chr1	4334184	rs57575485	C	T	360.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.70;MQ0=0;OQ=1292.51;QD=16.79;SB=-566.07	GT:AD:DP:GL:GQ	0/1:37,40:76:-155.43,-22.90,-133.07:99
-chr1	4334834	rs661536	A	G	714.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1993.62;QD=34.98;SB=-900.02	GT:AD:DP:GL:GQ	1/1:0,57:57:-202.97,-17.17,-0.02:99
-chr1	4339520	rs902403	T	C	449.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=846.06;QD=12.44;SB=-357.94	GT:AD:DP:GL:GQ	0/1:35,33:68:-108.38,-20.49,-140.89:99
-chr1	4339677	rs2926482	C	G	218.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2219.96;QD=42.69;SB=-974.35	GT:AD:DP:GL:GQ	1/1:0,52:52:-225.60,-15.67,-0.01:99
-chr1	4340373	rs590798	A	C	514.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2632.91;QD=34.64;SB=-1142.61	GT:AD:DP:GL:GQ	1/1:0,76:76:-266.90,-22.89,-0.03:99
-chr1	4344158	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=3;HaplotypeScore=3.49;MQ=60.00;MQ0=0;OQ=63.29;QD=1.07;SB=56.21	GT:AD:DP:GL:GQ	0/1:42,17:47:-23.79,-14.18,-151.98:96.13
-chr1	4344566	rs349413	C	A	606.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1116.07;QD=14.69;SB=-454.53	GT:AD:DP:GL:GQ	0/1:39,37:76:-137.78,-22.89,-141.17:99
-chr1	4345038	rs164598	G	A	482.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.02;MQ0=0;OQ=1164.61;QD=17.38;SB=-524.70	GT:AD:DP:GL:GQ	0/1:32,35:67:-139.93,-20.18,-113.85:99
-chr1	4347591	rs4654526	C	T	500.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1310.21;QD=20.16;SB=-660.78	GT:AD:DP:GL:GQ	0/1:25,40:61:-152.69,-18.39,-71.94:99
-chr1	4351708	rs11585123	G	T	52.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=1.96;MQ=59.43;MQ0=0;OQ=956.92;QD=13.11;SB=-391.99	GT:AD:DP:GL:GQ	0/1:39,34:73:-120.97,-21.99,-133.39:99
-chr1	4352257	rs627555	G	A	556.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=1274.67;QD=14.01;SB=-577.49	GT:AD:DP:GL:GQ	0/1:53,38:91:-158.16,-27.41,-187.48:99
-chr1	4352698	.	A	C	145.09	PASS	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1251.00;QD=14.55;SB=-612.69	GT:AD:DP:GL:GQ	0/1:43,43:84:-153.68,-25.30,-154.64:99
-chr1	4353326	rs7523383	C	T	223.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=1125.20;QD=18.75;SB=-322.36	GT:AD:DP:GL:GQ	0/1:24,35:55:-132.39,-16.58,-65.47:99
-chr1	4354986	rs55703746	G	T	228.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1494.65;QD=18.68;SB=-625.43	GT:AD:DP:GL:GQ	0/1:32,48:80:-176.84,-24.10,-112.47:99
-chr1	4358435	.	C	T	24.59	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=55.69;MQ0=0;QD=0.61;SB=41.14	GT:AD:DP:GL:GQ	0/1:35,4:36:-16.60,-10.86,-102.91:57.41
-chr1	4358482	.	C	G	35.61	LowQual	AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=54.32;MQ0=0;QD=1.05;SB=-23.70	GT:AD:DP:GL:GQ	0/1:30,4:32:-16.49,-9.64,-124.37:68.45
-chr1	4359549	rs6679220	T	C	288.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=543.81;QD=10.66;SB=-272.37	GT:AD:DP:GL:GQ	0/1:30,21:50:-72.72,-15.06,-124.68:99
-chr1	4360825	rs56081339	G	A	327.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.43;MQ0=0;OQ=993.85;QD=13.61;SB=-456.06	GT:AD:DP:GL:GQ	0/1:40,33:70:-123.78,-21.11,-120.70:99
-chr1	4363525	rs349402	G	A	561.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.26;MQ0=0;OQ=1290.95;QD=16.99;SB=-425.80	GT:AD:DP:GL:GQ	0/1:36,40:74:-154.68,-22.30,-119.31:99
-chr1	4367389	rs4654429	G	A	56.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=5.58;MQ=57.65;MQ0=0;OQ=1142.68;QD=16.80;SB=-522.78	GT:AD:DP:GL:GQ	0/1:32,36:64:-136.84,-19.29,-93.56:99
-chr1	4367566	rs4654430	T	C	472.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=611.79;QD=10.92;SB=-199.58	GT:AD:DP:GL:GQ	0/1:34,22:55:-81.03,-16.57,-131.86:99
-chr1	4368744	rs547923	C	A	335.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=58.91;MQ0=0;OQ=794.59;QD=12.42;SB=-343.21	GT:AD:DP:GL:GQ	0/1:34,30:61:-101.12,-18.38,-116.77:99
-chr1	4369295	rs6687224	C	G	567.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1064.80;QD=17.75;SB=-495.28	GT:AD:DP:GL:GQ	0/1:29,31:59:-127.55,-17.78,-120.89:99
-chr1	4369728	rs733308	T	G	295.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.39;MQ=59.19;MQ0=1;OQ=894.22;QD=10.65;SB=-355.63	GT:AD:DP:GL:GQ	0/1:48,36:83:-117.71,-25.00,-176.40:99
-chr1	4370735	rs2926477	A	G	468.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=995.20;QD=15.31;SB=-357.26	GT:AD:DP:GL:GQ	0/1:29,36:64:-122.09,-19.28,-116.14:99
-chr1	4371593	rs505933	A	G	376.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.99;MQ0=0;OQ=894.44;QD=10.78;SB=-423.73	GT:AD:DP:GL:GQ	0/1:45,38:82:-117.44,-24.72,-179.72:99
-chr1	4371867	rs693045	T	C	492.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.26;MQ0=0;OQ=669.20;QD=9.99;SB=-303.21	GT:AD:DP:GL:GQ	0/1:37,30:64:-89.50,-19.29,-143.01:99
-chr1	4371873	rs10915529	G	C	482.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.33;MQ0=0;OQ=903.58;QD=12.91;SB=-393.25	GT:AD:DP:GL:GQ	0/1:40,30:69:-114.44,-20.80,-177.40:99
-chr1	4371886	rs659514	T	C	97.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=1.39;MQ=58.28;MQ0=0;OQ=683.73;QD=10.05;SB=-268.51	GT:AD:DP:GL:GQ	0/1:42,26:67:-91.84,-20.18,-171.36:99
-chr1	4372308	rs4654533	C	G	209.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1490.53;QD=19.61;SB=-620.61	GT:AD:DP:GL:GQ	0/1:35,41:72:-174.05,-21.72,-126.16:99
-chr1	4375044	rs349405	A	C	311.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=541.86;QD=10.62;SB=-270.89	GT:AD:DP:GL:GQ	0/1:31,20:51:-72.83,-15.36,-116.45:99
-chr1	4375626	rs349406	T	C	212.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=2.99;MQ=59.38;MQ0=0;OQ=1112.63;QD=14.84;SB=-554.63	GT:AD:DP:GL:GQ	0/1:36,39:72:-136.23,-21.69,-140.85:99
-chr1	4375771	rs12562242	G	T	432.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=59.23;MQ0=0;OQ=915.50;QD=12.54;SB=-381.76	GT:AD:DP:GL:GQ	0/1:39,34:71:-116.22,-21.39,-137.78:99
-chr1	4376133	rs349407	G	A	305.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.03;MQ0=1;OQ=1382.00;QD=18.43;SB=-530.55	GT:AD:DP:GL:GQ	0/1:31,44:71:-162.87,-21.39,-107.28:99
-chr1	4376945	rs10915530	C	T	589.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1129.31;QD=16.13;SB=-586.64	GT:AD:DP:GL:GQ	0/1:35,35:68:-136.71,-20.50,-105.26:99
-chr1	4377252	rs1490416	T	A	34.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.01;HRun=1;HaplotypeScore=4.80;MQ=59.18;MQ0=0;OQ=1402.77;QD=16.50;SB=-436.53	GT:AD:DP:GL:GQ	0/1:39,45:80:-167.66,-24.10,-131.13:99
-chr1	4377771	rs349409	C	T	337.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.15;MQ0=0;OQ=1097.95;QD=15.46;SB=-477.48	GT:AD:DP:GL:GQ	0/1:37,34:69:-133.86,-20.78,-131.05:99
-chr1	4377899	rs349410	C	A	42.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=4.55;MQ=59.19;MQ0=0;OQ=1054.50;QD=18.50;SB=-399.14	GT:AD:DP:GL:GQ	0/1:22,35:56:-125.60,-16.87,-75.99:99
-chr1	4377949	rs349411	C	T	2.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=11.72;MQ=58.87;MQ0=0;OQ=1481.01;QD=18.06;SB=-689.93	GT:AD:DP:GL:GQ	0/1:37,45:80:-175.49,-24.10,-130.86:99
-chr1	4377999	rs10915531	A	G	391.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.24;MQ0=0;OQ=1298.04;QD=16.23;SB=-576.28	GT:AD:DP:GL:GQ	0/1:36,44:80:-157.19,-24.10,-146.95:99
-chr1	4380137	rs493178	G	C	0.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.09;MQ=57.06;MQ0=0;OQ=874.81;QD=23.64;SB=-165.59	GT:AD:DP:GL:GQ	0/1:11,26:34:-101.01,-10.25,-40.96:99
-chr1	4380197	.	G	A	21.03	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=23.38;MQ=29.95;MQ0=2;QD=0.68;SB=41.12	GT:AD:DP:GL:GQ	0/1:26,5:22:-12.01,-6.63,-63.36:53.84
-chr1	4380201	rs59237016	A	T	117.83	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=21.39;MQ=30.09;MQ0=2;QD=4.36;SB=-11.73	GT:AD:DP:GL:GQ	0/1:19,6:13:-24.36,-9.29,-27.60:99
-chr1	4380203	.	A	G	41.11	LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=24.37;MQ=28.28;MQ0=2;QD=1.64;SB=-10.00	GT:AD:DP:GL:GQ	0/1:17,7:10:-10.41,-3.01,-27.49:73.95
-chr1	4380215	.	G	A	523.36	SnpCluster	AC=2;AF=1.00;AN=2;DP=19;Dels=0.05;HRun=0;HaplotypeScore=13.20;MQ=29.01;MQ0=2;QD=27.55;SB=-164.67	GT:AD:DP:GL:GQ	1/1:1,17:14:-55.92,-4.22,-0.00:42.14
-chr1	4380217	rs60888156	G	A	452.59	SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.05;HRun=0;HaplotypeScore=13.68;MQ=29.01;MQ0=2;QD=23.82;SB=-163.66	GT:AD:DP:GL:GQ	1/1:4,14:14:-51.77,-4.22,-2.97:12.46
-chr1	4380219	.	G	A	274.46	SnpCluster	AC=1;AF=0.50;AN=2;DP=17;Dels=0.06;HRun=0;HaplotypeScore=11.89;MQ=29.85;MQ0=1;QD=16.14;SB=-148.61	GT:AD:DP:GL:GQ	0/1:5,11:13:-34.65,-3.92,-13.88:99
-chr1	4380249	.	G	A	49.25	LowQual	AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.42;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,3:2:-8.33,-0.60,-0.00:6.02
-chr1	4380271	rs6697112	G	A	9.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=37.32;MQ0=0;OQ=124.22;QD=24.84;SB=-44.55	GT:AD:DP:GL:GQ	1/1:1,4:4:-15.96,-1.21,-0.00:12.04
-chr1	4380311	rs1309838	C	A	157.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=54.85;MQ0=0;OQ=623.10;QD=14.84;SB=-208.87	GT:AD:DP:GL:GQ	0/1:19,23:41:-77.95,-12.35,-68.48:99
-chr1	4380330	rs1309839	C	T	0.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=7.73;MQ=55.45;MQ0=0;OQ=843.65;QD=20.09;SB=-255.33	GT:AD:DP:GL:GQ	0/1:15,27:37:-98.80,-11.15,-35.58:99
-chr1	4380929	.	T	C	25.32	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=2;HaplotypeScore=5.44;MQ=59.32;MQ0=0;QD=0.37;SB=122.43	GT:AD:DP:GL:GQ	0/1:48,20:54:-22.08,-16.27,-188.06:58.14
-chr1	4380941	rs349386	C	T	474.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.84;MQ0=0;OQ=1352.78;QD=17.80;SB=-554.75	GT:AD:DP:GL:GQ	0/1:36,40:74:-160.85,-22.29,-128.59:99
-chr1	4381075	rs4654432	C	T	88.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=1.63;MQ=60.32;MQ0=0;OQ=870.11;QD=12.80;SB=-258.77	GT:AD:DP:GL:GQ	0/1:40,28:66:-110.19,-19.90,-123.57:99
-chr1	4381353	rs35799150	A	G	389.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=820.10;QD=12.06;SB=-192.18	GT:AD:DP:GL:GQ	0/1:39,29:68:-105.78,-20.48,-159.19:99
-chr1	4381492	rs4654433	G	A	604.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1070.93;QD=15.98;SB=-493.09	GT:AD:DP:GL:GQ	0/1:35,32:67:-130.57,-20.19,-112.83:99
-chr1	4382470	rs737324	G	C	535.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1310.24;QD=17.47;SB=-409.80	GT:AD:DP:GL:GQ	0/1:38,37:74:-156.61,-22.31,-151.67:99
-chr1	4382624	rs349385	A	G	200.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=56.49;MQ0=0;OQ=1553.01;QD=28.76;SB=-619.97	GT:AD:DP:GL:GQ	1/1:0,53:51:-158.94,-15.39,-0.06:99
-chr1	4383263	rs41266223	T	C	212.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=57.69;MQ0=0;OQ=666.08;QD=11.29;SB=-355.38	GT:AD:DP:GL:GQ	0/1:32,27:53:-85.86,-15.97,-114.12:99
-chr1	4385955	rs4654537	A	G	109.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=60.00;MQ0=0;OQ=187.72;QD=8.16;SB=-92.99	GT:AD:DP:GL:GQ	0/1:12,10:21:-28.39,-6.33,-46.97:99
-chr1	4386470	rs1762818	A	G	620.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=2262.65;QD=34.81;SB=-1121.77	GT:AD:DP:GL:GQ	1/1:0,65:63:-229.87,-18.98,-0.02:99
-chr1	4386565	rs2035009	T	C	346.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=58.05;MQ0=0;OQ=655.98;QD=10.93;SB=-329.97	GT:AD:DP:GL:GQ	0/1:30,30:56:-85.78,-16.89,-109.09:99
-chr1	4386918	rs2035008	T	A	56.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.25;MQ=55.07;MQ0=0;OQ=728.43;QD=12.14;SB=-228.91	GT:AD:DP:GL:GQ	0/1:33,27:58:-93.60,-17.47,-122.91:99
-chr1	4387800	.	G	A	279.77	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1023.92;QD=16.25;SB=-391.36	GT:AD:DP:GL:GQ	0/1:32,31:61:-124.06,-18.39,-99.73:99
-chr1	4388151	rs4654542	C	T	244.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=60.00;MQ0=0;OQ=1264.25;QD=16.63;SB=-528.76	GT:AD:DP:GL:GQ	0/1:37,39:75:-152.31,-22.60,-121.60:99
-chr1	4388316	rs4654434	G	A	492.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.13;QD=14.54;SB=-490.97	GT:AD:DP:GL:GQ	0/1:40,32:72:-129.68,-21.69,-147.17:99
-chr1	4388691	rs6667927	C	T	322.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.79;MQ0=0;OQ=1604.10;QD=18.23;SB=-806.38	GT:AD:DP:GL:GQ	0/1:41,47:88:-190.20,-26.51,-149.18:99
-chr1	4388839	rs6658372	G	A	449.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.10;MQ0=0;OQ=954.40;QD=14.24;SB=-360.06	GT:AD:DP:GL:GQ	0/1:36,31:66:-118.61,-19.88,-128.27:99
-chr1	4389258	rs6678792	T	C	469.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.45;MQ0=0;OQ=1167.87;QD=15.37;SB=-534.97	GT:AD:DP:GL:GQ	0/1:37,39:76:-142.96,-22.89,-149.63:99
-chr1	4389389	rs10915533	G	A	316.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=59.63;MQ0=0;OQ=829.91;QD=13.39;SB=-417.75	GT:AD:DP:GL:GQ	0/1:33,29:58:-103.75,-17.48,-109.80:99
-chr1	4389459	rs995749	T	C	99.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.02;MQ=59.19;MQ0=0;OQ=673.64;QD=11.82;SB=-297.62	GT:AD:DP:GL:GQ	0/1:29,28:55:-87.23,-16.58,-114.38:99
-chr1	4390198	rs6676603	A	T	439.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.38;MQ0=0;OQ=1300.48;QD=17.57;SB=-634.13	GT:AD:DP:GL:GQ	0/1:32,42:73:-155.32,-21.99,-116.56:99
-chr1	4390481	rs12128251	T	C	259.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.96;MQ0=0;OQ=632.69;QD=11.94;SB=-295.21	GT:AD:DP:GL:GQ	0/1:28,25:50:-81.62,-15.07,-105.90:99
-chr1	4391861	rs2007533	T	A	193.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=57.74;MQ0=0;OQ=586.86;QD=11.51;SB=-140.76	GT:AD:DP:GL:GQ	0/1:30,21:48:-76.43,-14.46,-99.70:99
-chr1	4391958	rs1809702	T	C	301.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1033.40;QD=12.45;SB=-514.71	GT:AD:DP:GL:GQ	0/1:39,44:81:-131.04,-24.42,-155.02:99
-chr1	4392226	rs736265	G	A	87.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=4.07;MQ=59.56;MQ0=0;OQ=793.67;QD=14.97;SB=-313.81	GT:AD:DP:GL:GQ	0/1:27,26:51:-98.01,-15.36,-98.57:99
-chr1	4393075	rs1556691	A	G	599.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=937.52;QD=14.88;SB=-473.07	GT:AD:DP:GL:GQ	0/1:29,34:61:-115.41,-18.38,-116.29:99
-chr1	4393225	rs4654435	T	C	403.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=690.21;QD=11.50;SB=-328.14	GT:AD:DP:GL:GQ	0/1:28,31:55:-88.89,-16.58,-104.73:99
-chr1	4394358	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=18;HaplotypeScore=18.20;MQ=57.05;MQ0=0;OQ=138.13;QD=2.76;SB=68.21	GT:AD:DP:GL:GQ	0/1:39,11:43:-30.06,-12.96,-119.55:99
-chr1	4394377	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=18;HaplotypeScore=17.15;MQ=55.75;MQ0=0;OQ=145.86;QD=2.75;SB=25.24	GT:AD:DP:GL:GQ	0/1:40,13:43:-30.82,-12.95,-126.23:99
-chr1	4394834	rs12072315	G	A	483.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=835.16;QD=15.47;SB=-392.90	GT:AD:DP:GL:GQ	0/1:29,25:53:-102.78,-15.98,-90.62:99
-chr1	4394951	rs7546444	A	G	181.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.12;MQ0=0;OQ=846.04;QD=12.26;SB=-340.27	GT:AD:DP:GL:GQ	0/1:38,31:68:-108.38,-20.49,-147.54:99
-chr1	4395538	rs1591426	T	C	726.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=2474.70;QD=34.37;SB=-1102.69	GT:AD:DP:GL:GQ	1/1:0,72:71:-251.09,-21.39,-0.04:99
-chr1	4395562	rs1591425	A	G	113.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.25;MQ0=0;OQ=1914.52;QD=29.01;SB=-807.30	GT:AD:DP:GL:GQ	1/1:0,66:62:-195.10,-18.70,-0.06:99
-chr1	4396040	rs10915536	C	T	108.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.40;MQ0=0;OQ=3075.21;QD=39.94;SB=-1236.02	GT:AD:DP:GL:GQ	1/1:0,77:77:-311.12,-23.19,-0.02:99
-chr1	4396189	rs1762813	C	T	709.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.85;MQ0=0;OQ=1988.33;QD=37.52;SB=-957.81	GT:AD:DP:GL:GQ	1/1:0,52:51:-202.43,-15.36,-0.01:99
-chr1	4396377	rs1674876	G	A	690.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=3414.62;QD=39.70;SB=-1526.04	GT:AD:DP:GL:GQ	1/1:0,86:85:-340.46,-25.61,-0.02:99
-chr1	4396770	rs1335365	G	A	180.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=3218.44;QD=38.31;SB=-1546.06	GT:AD:DP:GL:GQ	1/1:0,84:82:-325.46,-24.71,-0.03:99
-chr1	4396978	rs6660514	C	T	529.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2569.74;QD=40.15;SB=-881.18	GT:AD:DP:GL:GQ	1/1:0,64:63:-260.57,-18.97,-0.01:99
-chr1	4396990	rs1335363	G	A	705.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=2655.20;QD=39.05;SB=-1068.35	GT:AD:DP:GL:GQ	1/1:0,68:67:-269.12,-20.18,-0.02:99
-chr1	4397408	rs35211041	C	G	282.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.56;MQ0=0;OQ=845.74;QD=15.96;SB=-404.93	GT:AD:DP:GL:GQ	0/1:28,25:51:-103.22,-15.37,-116.49:99
-chr1	4397651	rs1234932	T	C	32.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=59.08;MQ0=0;OQ=2038.22;QD=30.88;SB=-895.04	GT:AD:DP:GL:GQ	1/1:0,66:64:-207.46,-19.30,-0.06:99
-chr1	4399691	rs780572	T	C	25.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=3.98;MQ=59.66;MQ0=0;OQ=2164.78;QD=32.31;SB=-610.95	GT:AD:DP:GL:GQ	1/1:0,67:65:-220.10,-19.59,-0.04:99
-chr1	4400105	rs12727067	C	T	348.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=3168.12;QD=39.11;SB=-1535.71	GT:AD:DP:GL:GQ	1/1:0,81:79:-320.41,-23.80,-0.02:99
-chr1	4400296	rs12731060	C	T	672.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2631.07;QD=38.69;SB=-901.20	GT:AD:DP:GL:GQ	1/1:0,68:67:-266.72,-20.19,-0.02:99
-chr1	4401014	rs6674190	C	T	89.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.77;MQ0=0;OQ=3223.06;QD=39.79;SB=-1621.16	GT:AD:DP:GL:GQ	1/1:0,81:80:-325.90,-24.10,-0.02:99
-chr1	4401844	rs780573	A	G	655.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2538.38;QD=30.96;SB=-1020.34	GT:AD:DP:GL:GQ	1/1:0,82:80:-257.49,-24.12,-0.07:99
-chr1	4403585	rs780581	T	C	628.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=2729.37;QD=35.91;SB=-1251.85	GT:AD:DP:GL:GQ	1/1:0,76:75:-276.54,-22.59,-0.02:99
-chr1	4405826	rs780587	T	C	579.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1799.99;QD=35.29;SB=-764.96	GT:AD:DP:GL:GQ	1/1:0,51:50:-183.60,-15.06,-0.02:99
-chr1	4406185	rs780588	T	G	731.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=2276.92;QD=35.03;SB=-1150.64	GT:AD:DP:GL:GQ	1/1:0,65:65:-231.29,-19.58,-0.02:99
-chr1	4407102	rs780589	G	T	206.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.17;MQ0=0;OQ=2615.53;QD=35.83;SB=-1329.09	GT:AD:DP:GL:GQ	1/1:0,73:72:-265.16,-21.68,-0.02:99
-chr1	4407119	rs12032561	A	G	117.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.23;MQ0=0;OQ=2421.51;QD=30.65;SB=-1099.12	GT:AD:DP:GL:GQ	1/1:0,79:76:-245.80,-22.92,-0.06:99
-chr1	4407230	rs780590	C	A	140.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=2388.18;QD=35.64;SB=-981.59	GT:AD:DP:GL:GQ	1/1:0,67:66:-242.42,-19.88,-0.02:99
-chr1	4407326	rs780591	G	C	50.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.66;MQ0=0;OQ=2352.09;QD=42.77;SB=-1101.12	GT:AD:DP:GL:GQ	1/1:0,54:54:-238.81,-16.27,-0.01:99
-chr1	4407520	rs780592	G	A	361.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3300.47;QD=41.26;SB=-1496.40	GT:AD:DP:GL:GQ	1/1:0,80:80:-329.05,-24.10,-0.02:99
-chr1	4407623	rs780594	T	C	139.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=59.52;MQ0=0;OQ=2627.95;QD=34.13;SB=-1058.85	GT:AD:DP:GL:GQ	1/1:0,77:75:-266.41,-22.59,-0.03:99
-chr1	4408032	rs705684	C	T	627.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2940.63;QD=39.21;SB=-1334.78	GT:AD:DP:GL:GQ	1/1:0,75:74:-297.67,-22.29,-0.02:99
-chr1	4408272	rs780595	C	G	8.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=58.81;MQ0=0;OQ=2333.53;QD=42.43;SB=-1051.66	GT:AD:DP:GL:GQ	1/1:0,55:54:-236.95,-16.27,-0.02:99
-chr1	4408429	rs2054268	A	G	302.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.14;MQ0=0;OQ=2648.73;QD=34.85;SB=-1019.36	GT:AD:DP:GL:GQ	1/1:0,76:74:-268.49,-22.29,-0.03:99
-chr1	4408966	rs780596	C	G	540.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=3023.42;QD=42.58;SB=-1306.69	GT:AD:DP:GL:GQ	1/1:0,71:71:-305.95,-21.40,-0.02:99
-chr1	4409197	rs2054269	G	A	716.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=2812.55;QD=39.06;SB=-1393.37	GT:AD:DP:GL:GQ	1/1:0,72:71:-284.86,-21.39,-0.02:99
-chr1	4409239	rs2054270	C	A	370.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=2523.69;QD=36.05;SB=-1226.28	GT:AD:DP:GL:GQ	1/1:0,70:69:-255.97,-20.78,-0.02:99
-chr1	4411281	rs922114	C	T	206.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=60.00;MQ0=0;OQ=2458.23;QD=37.82;SB=-1122.24	GT:AD:DP:GL:GQ	1/1:0,65:63:-249.43,-18.99,-0.03:99
-chr1	4411941	rs56397589	A	G	10.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=772.90;QD=13.56;SB=-158.90	GT:AD:DP:GL:GQ	0/1:30,27:56:-97.44,-16.87,-122.46:99
-chr1	4412859	.	G	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=17.52;MQ=58.30;MQ0=0;OQ=443.68;QD=5.55;SB=107.30	GT:AD:DP:GL:GQ	0/1:54,26:67:-67.84,-20.19,-156.44:99
-chr1	4413809	rs780599	T	C	203.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=933.92;QD=15.06;SB=-130.24	GT:AD:DP:GL:GQ	0/1:31,31:62:-115.35,-18.67,-127.44:99
-chr1	4413942	rs1235308	A	G	208.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.56;MQ0=0;OQ=574.66;QD=10.84;SB=-295.15	GT:AD:DP:GL:GQ	0/1:24,29:45:-74.32,-13.57,-86.44:99
-chr1	4413949	rs12135334	A	G	227.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=600.78;QD=11.13;SB=-278.65	GT:AD:DP:GL:GQ	0/1:25,29:50:-78.44,-15.07,-99.43:99
-chr1	4414313	rs11584026	G	A	462.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.70;MQ0=0;OQ=1258.44;QD=16.56;SB=-579.09	GT:AD:DP:GL:GQ	0/1:37,39:74:-151.43,-22.31,-123.49:99
-chr1	4415137	rs1213919	T	C	340.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.64;MQ0=0;OQ=1036.94;QD=16.20;SB=-428.11	GT:AD:DP:GL:GQ	0/1:27,37:63:-125.96,-18.98,-110.60:99
-chr1	4415275	rs6426411	G	A	271.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.51;MQ=58.90;MQ0=0;OQ=891.44;QD=15.11;SB=-416.76	GT:AD:DP:GL:GQ	0/1:31,28:59:-110.20,-17.77,-112.97:99
-chr1	4415367	rs6663198	A	C	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=21.51;MQ=59.22;MQ0=0;OQ=1036.43;QD=12.49;SB=-473.70	GT:AD:DP:GL:GQ	0/1:44,39:81:-131.33,-24.40,-153.13:99
-chr1	4416433	rs12131294	C	T	93.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=59.15;MQ0=0;OQ=414.02;QD=9.20;SB=-113.50	GT:AD:DP:GL:GQ	0/1:24,20:37:-55.83,-11.15,-84.17:99
-chr1	4416884	.	G	A	3.05	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.94;MQ=57.87;MQ0=0;OQ=823.53;QD=14.97;SB=-276.27	GT:AD:DP:GL:GQ	0/1:30,25:53:-101.62,-15.98,-87.09:99
-chr1	4417194	rs7550318	A	T	249.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=57.79;MQ0=0;OQ=1140.48;QD=17.28;SB=-502.48	GT:AD:DP:GL:GQ	0/1:29,37:65:-136.91,-19.58,-108.54:99
-chr1	4417494	.	G	A	25.73	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=20;HaplotypeScore=6.20;MQ=50.61;MQ0=1;QD=0.42;SB=98.27	GT:AD:DP:GL:GQ	0/1:53,9:50:-20.92,-15.07,-146.64:58.56
-chr1	4417741	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=20;HaplotypeScore=20.09;MQ=49.19;MQ0=1;OQ=84.58;QD=2.17;SB=26.11	GT:AD:DP:GL:GQ	0/1:26,12:27:-19.88,-8.14,-73.60:99
-chr1	4417905	rs642409	A	G	618.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.41;MQ0=0;OQ=2544.54;QD=34.39;SB=-1201.82	GT:AD:DP:GL:GQ	1/1:0,74:71:-258.06,-21.38,-0.02:99
-chr1	4418004	rs10127576	A	G	16.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=57.57;MQ0=1;OQ=493.53;QD=8.97;SB=-221.25	GT:AD:DP:GL:GQ	0/1:34,21:50:-67.70,-15.07,-117.20:99
-chr1	4420145	rs6426412	G	T	345.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.50;MQ0=0;OQ=1296.90;QD=17.29;SB=-663.60	GT:AD:DP:GL:GQ	0/1:33,42:75:-155.57,-22.59,-114.39:99
-chr1	4420362	.	C	T	102.52	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=60.52;MQ0=0;OQ=920.19;QD=15.34;SB=-456.47	GT:AD:DP:GL:GQ	0/1:27,31:53:-111.28,-15.98,-79.42:99
-chr1	4421024	rs12137057	A	C	291.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=701.05;QD=10.62;SB=-364.06	GT:AD:DP:GL:GQ	0/1:39,27:63:-92.36,-18.97,-137.12:99
-chr1	4421180	rs61771168	T	G	222.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.81;MQ=59.49;MQ0=0;OQ=588.51;QD=13.08;SB=-310.47	GT:AD:DP:GL:GQ	0/1:23,22:43:-75.09,-12.95,-79.35:99
-chr1	4421771	.	C	T	52.82	PASS	AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=58.00;MQ0=0;OQ=457.94;QD=13.08;SB=-230.51	GT:AD:DP:GL:GQ	0/1:18,17:32:-58.72,-9.64,-61.49:99
-chr1	4422658	.	C	T	17.02	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=3.11;MQ=59.25;MQ0=0;OQ=990.31;QD=15.97;SB=-404.43	GT:AD:DP:GL:GQ	0/1:32,30:60:-120.40,-18.09,-95.94:99
-chr1	4423184	.	G	A	28.31	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=59.25;MQ0=0;OQ=1264.58;QD=20.40;SB=-650.72	GT:AD:DP:GL:GQ	0/1:26,36:62:-148.42,-18.68,-94.18:99
-chr1	4423217	rs664520	C	T	648.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1886.50;QD=38.50;SB=-821.33	GT:AD:DP:GL:GQ	1/1:0,49:49:-192.25,-14.76,-0.02:99
-chr1	4423270	rs17453664	G	A	225.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=58.29;MQ0=0;OQ=839.10;QD=16.14;SB=-245.23	GT:AD:DP:GL:GQ	0/1:25,27:50:-102.26,-15.06,-88.51:99
-chr1	4424136	.	C	G	13.14	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.07;MQ=59.20;MQ0=0;OQ=717.79;QD=15.27;SB=-220.02	GT:AD:DP:GL:GQ	0/1:26,21:46:-88.93,-13.87,-108.02:99
-chr1	4424195	rs16839046	G	A	266.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=59.35;MQ0=0;OQ=1078.45;QD=16.85;SB=-521.17	GT:AD:DP:GL:GQ	0/1:30,33:62:-129.81,-18.69,-96.72:99
-chr1	4424280	rs17419859	G	A	351.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.18;MQ0=0;OQ=665.56;QD=13.05;SB=-350.50	GT:AD:DP:GL:GQ	0/1:25,26:46:-83.71,-13.87,-77.13:99
-chr1	4424589	rs681175	T	C	281.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1804.45;QD=35.38;SB=-864.37	GT:AD:DP:GL:GQ	1/1:0,51:50:-184.04,-15.06,-0.01:99
-chr1	4426611	rs16839061	C	T	6.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=8.78;MQ=59.11;MQ0=0;OQ=724.58;QD=13.42;SB=-330.47	GT:AD:DP:GL:GQ	0/1:31,23:51:-91.11,-15.37,-92.01:99
-chr1	4427201	rs350167	T	C	190.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=59.66;MQ0=0;OQ=925.11;QD=16.82;SB=-378.98	GT:AD:DP:GL:GQ	0/1:23,32:53:-111.76,-15.96,-93.83:99
-chr1	4427323	.	G	A	294.49	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=680.55;QD=13.09;SB=-356.53	GT:AD:DP:GL:GQ	0/1:28,24:44:-84.60,-13.26,-76.63:99
-chr1	4433698	.	G	A	123.19	PASS	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.52;MQ0=0;OQ=1403.52;QD=17.99;SB=-721.04	GT:AD:DP:GL:GQ	0/1:36,42:75:-166.24,-22.60,-109.14:99
-chr1	4433807	.	T	G	23.74	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=3;HaplotypeScore=5.51;MQ=60.00;MQ0=0;QD=0.37;SB=80.27	GT:AD:DP:GL:GQ	0/1:45,20:51:-21.03,-15.37,-149.91:56.55
-chr1	4434327	rs645724	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=38.18;MQ=55.12;MQ0=0;OQ=2008.88;QD=24.50;SB=-765.25	GT:AD:DP:GL:GQ	0/1:13,69:74:-226.47,-22.30,-33.80:99
-chr1	4434328	rs55641638	T	A	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=5;HaplotypeScore=34.59;MQ=55.12;MQ0=0;OQ=2483.75;QD=30.29;SB=-1104.11	GT:AD:DP:GL:GQ	1/1:7,75:79:-274.28,-23.80,-22.35:14.43
-chr1	4434380	rs350168	C	T	706.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=2402.65;QD=38.14;SB=-988.02	GT:AD:DP:GL:GQ	1/1:0,63:61:-243.87,-18.38,-0.02:99
-chr1	4434761	.	C	A	101.78	PASS	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.39;MQ0=0;OQ=1132.04;QD=16.65;SB=-530.30	GT:AD:DP:GL:GQ	0/1:30,38:67:-136.67,-20.18,-105.81:99
-chr1	4435588	rs350169	T	A	602.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1092.18;QD=14.76;SB=-420.48	GT:AD:DP:GL:GQ	0/1:38,36:74:-134.79,-22.29,-147.43:99
-chr1	4439106	rs610189	T	C	76.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.49;MQ0=0;OQ=3044.46;QD=31.07;SB=-1448.66	GT:AD:DP:GL:GQ	1/1:0,98:95:-308.11,-28.64,-0.07:99
-chr1	4440903	rs13376654	C	A	79.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.21;MQ=58.73;MQ0=0;OQ=748.18;QD=13.60;SB=-293.00	GT:AD:DP:GL:GQ	0/1:29,26:54:-94.37,-16.27,-89.76:99
-chr1	4440904	rs638289	A	G	184.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=59.14;MQ0=0;OQ=1717.40;QD=31.80;SB=-743.85	GT:AD:DP:GL:GQ	1/1:0,54:53:-175.37,-15.98,-0.04:99
-chr1	4441250	rs11799990	A	C	16.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.98;MQ=58.47;MQ0=0;OQ=285.71;QD=5.19;SB=-147.75	GT:AD:DP:GL:GQ	0/1:37,17:50:-46.92,-15.06,-127.84:99
-chr1	4441285	rs6426418	T	C	92.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.50;MQ=58.52;MQ0=0;OQ=434.66;QD=7.63;SB=-199.21	GT:AD:DP:GL:GQ	0/1:38,19:55:-63.32,-16.57,-152.10:99
-chr1	4441304	rs16839089	G	A	505.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=685.41;QD=10.71;SB=-336.42	GT:AD:DP:GL:GQ	0/1:40,24:63:-90.81,-18.98,-145.42:99
-chr1	4441520	.	C	T	159.13	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.36;MQ=59.58;MQ0=0;OQ=767.39;QD=13.95;SB=-405.80	GT:AD:DP:GL:GQ	0/1:29,25:52:-95.70,-15.68,-88.39:99
-chr1	4441584	rs28597953	G	C	102.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.54;MQ0=0;OQ=377.89;QD=7.56;SB=-189.56	GT:AD:DP:GL:GQ	0/1:35,14:50:-59.58,-18.50,-155.34:99
-chr1	4441595	rs12057544	C	T	296.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=442.52;QD=10.06;SB=-117.50	GT:AD:DP:GL:GQ	0/1:29,15:44:-60.79,-13.25,-105.58:99
-chr1	4441615	rs12094629	G	A	446.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=438.29;QD=12.17;SB=-145.60	GT:AD:DP:GL:GQ	0/1:21,15:35:-57.67,-10.56,-64.23:99
-chr1	4442760	rs705686	T	G	190.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.65;MQ0=0;OQ=1305.06;QD=29.00;SB=-525.86	GT:AD:DP:GL:GQ	1/1:0,45:42:-134.13,-12.66,-0.04:99
-chr1	4443102	rs16839093	T	A	368.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=60.00;MQ0=0;OQ=943.42;QD=16.85;SB=-414.85	GT:AD:DP:GL:GQ	0/1:25,31:55:-114.19,-16.57,-93.32:99
-chr1	4443523	rs6656245	A	G	229.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=4.49;MQ=59.68;MQ0=0;OQ=985.54;QD=13.50;SB=-516.93	GT:AD:DP:GL:GQ	0/1:35,37:70:-125.21,-23.37,-142.93:99
-chr1	4444038	rs350170	T	C	370.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=854.91;QD=14.49;SB=-264.93	GT:AD:DP:GL:GQ	0/1:30,29:59:-106.55,-17.78,-120.47:99
-chr1	4444166	.	C	T	124.24	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.74;MQ0=0;OQ=1098.39;QD=15.05;SB=-487.09	GT:AD:DP:GL:GQ	0/1:39,34:70:-134.21,-21.09,-126.03:99
-chr1	4446069	rs16839101	C	T	439.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.34;MQ0=0;OQ=969.43;QD=15.39;SB=-381.11	GT:AD:DP:GL:GQ	0/1:31,32:61:-118.60,-18.38,-109.31:99
-chr1	4448313	rs705687	A	G	587.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.53;MQ0=0;OQ=1218.14;QD=32.06;SB=-513.41	GT:AD:DP:GL:GQ	1/1:0,38:37:-125.42,-11.15,-0.02:99
-chr1	4448490	rs10799234	G	A	167.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=924.80;QD=18.50;SB=-481.51	GT:AD:DP:GL:GQ	0/1:22,28:50:-110.83,-15.07,-72.35:99
-chr1	4449095	.	G	T	15.09	PASS	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.46;MQ0=0;OQ=820.94;QD=19.09;SB=-383.80	GT:AD:DP:GL:GQ	0/1:15,28:42:-98.03,-12.65,-50.79:99
-chr1	4449190	.	G	A	102.60	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=1775.95;QD=21.93;SB=-864.43	GT:AD:DP:GL:GQ	0/1:30,51:79:-204.67,-23.80,-104.40:99
-chr1	4449240	rs705690	G	A	133.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.24;MQ0=0;OQ=3632.63;QD=39.92;SB=-1598.65	GT:AD:DP:GL:GQ	1/1:0,91:90:-362.26,-27.11,-0.03:99
-chr1	4449262	rs780606	A	G	76.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=59.06;MQ0=0;OQ=718.78;QD=9.71;SB=-329.85	GT:AD:DP:GL:GQ	0/1:44,30:73:-97.16,-22.00,-175.35:99
-chr1	4449723	.	G	A	148.11	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=59.52;MQ0=0;OQ=713.60;QD=14.87;SB=-335.48	GT:AD:DP:GL:GQ	0/1:25,23:48:-89.11,-14.47,-81.14:99
-chr1	4449964	rs706145	G	A	636.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2653.69;QD=37.38;SB=-1188.98	GT:AD:DP:GL:GQ	1/1:0,71:69:-268.98,-20.79,-0.03:99
-chr1	4452662	rs1878052	G	A	714.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2298.20;QD=38.95;SB=-1111.02	GT:AD:DP:GL:GQ	1/1:0,59:59:-233.42,-17.78,-0.02:99
-chr1	4454614	.	A	C	20.74	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=601.74;QD=13.68;SB=-220.89	GT:AD:DP:GL:GQ	0/1:20,24:43:-76.41,-12.95,-71.27:99
-chr1	4455561	rs10737412	T	A	735.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2244.31;QD=37.41;SB=-1132.68	GT:AD:DP:GL:GQ	1/1:0,60:60:-228.03,-18.07,-0.02:99
-chr1	4455707	rs4654547	C	T	580.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=1;OQ=2435.91;QD=38.67;SB=-681.41	GT:AD:DP:GL:GQ	1/1:0,63:61:-247.19,-18.38,-0.02:99
-chr1	4456823	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=121.08;MQ=43.96;MQ0=0;OQ=445.21;QD=5.86;SB=-205.75	GT:AD:DP:GL:GQ	0/1:54,22:71:-69.19,-21.39,-207.74:99
-chr1	4456825	rs61765158	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=133.78;MQ=43.18;MQ0=0;OQ=324.30;QD=4.44;SB=-88.42	GT:AD:DP:GL:GQ	0/1:59,14:70:-56.80,-21.09,-201.65:99
-chr1	4456850	rs780601	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=50.11;MQ=42.32;MQ0=0;OQ=775.14;QD=10.77;SB=-395.42	GT:AD:DP:GL:GQ	0/1:41,31:67:-100.98,-20.18,-144.33:99
-chr1	4457263	rs780603	T	C	535.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1544.09;QD=29.13;SB=-491.17	GT:AD:DP:GL:GQ	1/1:0,53:48:-158.03,-14.47,-0.03:99
-chr1	4457873	rs9659744	G	A	216.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=58.81;MQ0=0;OQ=722.66;QD=13.14;SB=-250.79	GT:AD:DP:GL:GQ	0/1:29,25:52:-94.30,-18.75,-103.70:99
-chr1	4457887	rs12029583	T	C	182.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=58.88;MQ0=0;OQ=815.22;QD=14.06;SB=-229.41	GT:AD:DP:GL:GQ	0/1:25,33:54:-101.08,-16.28,-89.40:99
-chr1	4458652	rs10915548	G	A	313.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=58.63;MQ0=0;OQ=1202.04;QD=18.21;SB=-612.14	GT:AD:DP:GL:GQ	0/1:31,35:64:-142.78,-19.29,-94.64:99
-chr1	4458793	rs609506	T	C	135.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2002.23;QD=32.82;SB=-965.38	GT:AD:DP:GL:GQ	1/1:0,61:57:-203.83,-17.17,-0.03:99
-chr1	4458832	rs13374152	G	A	510.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.65;MQ0=0;OQ=1323.30;QD=19.75;SB=-559.77	GT:AD:DP:GL:GQ	0/1:28,39:65:-155.19,-19.58,-97.96:99
-chr1	4459077	rs10799235	G	C	517.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2392.46;QD=41.97;SB=-1062.67	GT:AD:DP:GL:GQ	1/1:0,57:55:-242.85,-16.57,-0.02:99
-chr1	4459761	rs4654438	T	C	731.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.40;MQ0=0;OQ=2338.83;QD=34.91;SB=-1062.10	GT:AD:DP:GL:GQ	1/1:0,67:66:-237.49,-19.88,-0.02:99
-chr1	4460253	.	G	A	71.25	PASS	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=54.34;MQ0=0;OQ=761.29;QD=16.20;SB=-383.16	GT:AD:DP:GL:GQ	0/1:23,24:45:-92.98,-13.56,-67.37:99
-chr1	4460265	rs9660574	G	A	698.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.97;MQ0=0;OQ=1971.68;QD=38.66;SB=-993.84	GT:AD:DP:GL:GQ	1/1:0,51:50:-200.77,-15.06,-0.01:99
-chr1	4460731	rs675509	A	G	75.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.19;MQ0=0;OQ=1733.09;QD=33.33;SB=-850.97	GT:AD:DP:GL:GQ	1/1:0,52:50:-176.92,-15.06,-0.02:99
-chr1	4460821	rs675641	C	T	619.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2267.76;QD=39.10;SB=-1112.00	GT:AD:DP:GL:GQ	1/1:0,58:57:-230.38,-17.17,-0.02:99
-chr1	4462336	rs4654548	G	A	293.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.55;MQ0=0;OQ=1820.62;QD=35.70;SB=-883.64	GT:AD:DP:GL:GQ	1/1:0,51:47:-185.66,-14.16,-0.02:99
-chr1	4462612	rs661886	C	G	122.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1803.84;QD=41.95;SB=-867.51	GT:AD:DP:GL:GQ	1/1:0,43:43:-183.98,-12.96,-0.01:99
-chr1	4462757	rs597453	T	C	1.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.36;MQ=60.00;MQ0=0;OQ=1873.91;QD=29.28;SB=-570.21	GT:AD:DP:GL:GQ	1/1:0,64:56:-191.00,-16.87,-0.03:99
-chr1	4463867	rs10799237	G	A	181.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.13;MQ0=0;OQ=2001.42;QD=37.76;SB=-711.98	GT:AD:DP:GL:GQ	1/1:0,53:51:-203.74,-15.36,-0.01:99
-chr1	4464187	.	T	C	30.12	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=59.33;MQ0=0;OQ=552.68;QD=8.91;SB=-289.28	GT:AD:DP:GL:GQ	0/1:39,23:60:-76.63,-18.08,-155.34:99
-chr1	4465057	rs4654549	G	A	100.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=3.11;MQ=59.46;MQ0=0;OQ=1572.23;QD=20.42;SB=-717.81	GT:AD:DP:GL:GQ	0/1:31,46:75:-183.10,-22.59,-108.27:99
-chr1	4465240	rs4654439	A	G	186.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.65;MQ0=0;OQ=1824.70;QD=28.07;SB=-920.11	GT:AD:DP:GL:GQ	1/1:1,64:61:-189.47,-18.40,-3.41:99
-chr1	4465350	rs4654550	C	T	464.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.14;MQ0=0;OQ=1183.55;QD=15.57;SB=-491.13	GT:AD:DP:GL:GQ	0/1:39,37:73:-143.65,-22.01,-117.80:99
-chr1	4465703	rs16839157	C	G	292.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.46;MQ0=0;OQ=1332.22;QD=15.49;SB=-637.02	GT:AD:DP:GL:GQ	0/1:48,38:85:-162.12,-25.61,-205.23:99
-chr1	4465766	rs10753381	C	T	668.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2452.18;QD=39.55;SB=-960.97	GT:AD:DP:GL:GQ	1/1:0,62:62:-248.82,-18.68,-0.02:99
-chr1	4465913	rs10753382	A	C	344.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=42.45;MQ0=0;OQ=1152.30;QD=15.16;SB=-375.76	GT:AD:DP:GL:GQ	0/1:35,41:75:-141.10,-22.59,-129.43:99
-chr1	4465925	rs4654440	A	G	314.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.24;MQ0=0;OQ=2545.78;QD=35.36;SB=-1008.34	GT:AD:DP:GL:GQ	1/1:0,72:72:-258.19,-21.69,-0.03:99
-chr1	4466035	rs4654551	T	C	137.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.71;MQ0=0;OQ=2345.07;QD=29.31;SB=-919.32	GT:AD:DP:GL:GQ	1/1:0,80:75:-238.17,-22.62,-0.07:99
-chr1	4466375	rs4654441	A	G	153.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.97;MQ=59.14;MQ0=0;OQ=1252.72;QD=16.48;SB=-599.98	GT:AD:DP:GL:GQ	0/1:32,44:75:-151.15,-22.60,-128.71:99
-chr1	4466539	.	G	C	13.68	PASS	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.10;MQ=60.00;MQ0=0;OQ=1133.87;QD=19.22;SB=-442.73	GT:AD:DP:GL:GQ	0/1:26,33:58:-134.16,-17.49,-113.78:99
-chr1	4466591	rs7537577	T	C	558.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1692.69;QD=36.01;SB=-710.63	GT:AD:DP:GL:GQ	1/1:0,47:47:-172.87,-14.16,-0.01:99
-chr1	4466655	rs1870509	A	G	172.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=58.79;MQ0=0;OQ=1784.46;QD=27.04;SB=-725.30	GT:AD:DP:GL:GQ	1/1:0,66:58:-182.10,-17.50,-0.07:99
-chr1	4467025	rs1018306	G	A	522.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2397.83;QD=37.47;SB=-678.32	GT:AD:DP:GL:GQ	1/1:0,64:61:-243.39,-18.38,-0.02:99
-chr1	4467405	.	G	A	173.51	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1037.40;QD=16.73;SB=-505.13	GT:AD:DP:GL:GQ	0/1:31,31:60:-125.11,-18.08,-96.58:99
-chr1	4467882	rs10799238	G	A	201.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.23;MQ0=0;OQ=2039.74;QD=37.09;SB=-730.98	GT:AD:DP:GL:GQ	1/1:0,54:52:-207.58,-15.67,-0.02:99
-chr1	4468054	rs10799239	G	T	526.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.10;MQ0=0;OQ=2381.50;QD=35.54;SB=-1199.06	GT:AD:DP:GL:GQ	1/1:0,67:66:-241.76,-19.88,-0.02:99
-chr1	4468702	rs780570	T	C	301.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.66;MQ0=0;OQ=692.07;QD=31.46;SB=-209.70	GT:AD:DP:GL:GQ	1/1:0,22:21:-72.80,-6.33,-0.01:63.17
-chr1	4468728	.	G	A	3.90	PASS	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=52.20;MQ0=0;OQ=192.92;QD=6.65;SB=-94.59	GT:AD:DP:GL:GQ	0/1:18,10:25:-30.11,-7.53,-60.00:99
-chr1	4468760	rs60725706	C	T	2.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=47.80;MQ0=0;OQ=892.66;QD=25.50;SB=-420.32	GT:AD:DP:GL:GQ	1/1:1,34:26:-92.87,-7.84,-0.02:78.22
-chr1	4468793	.	C	T	155.10	SnpCluster	AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=28.66;MQ=43.47;MQ0=0;QD=3.45;SB=-75.82	GT:AD:DP:GL:GQ	0/1:34,11:31:-28.13,-9.34,-89.19:99
-chr1	4468798	rs57105176	C	T	210.28	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=33.72;MQ=43.23;MQ0=0;QD=4.38;SB=-105.47	GT:AD:DP:GL:GQ	0/1:33,15:33:-34.25,-9.94,-88.69:99
-chr1	4468800	.	C	T	23.55	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=2;HaplotypeScore=34.30;MQ=43.63;MQ0=0;QD=0.48;SB=32.09	GT:AD:DP:GL:GQ	0/1:44,5:35:-16.18,-10.54,-113.19:56.36
-chr1	4468801	.	T	C	10.10	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=35.27;MQ=44.04;MQ0=0;QD=0.21;SB=32.13	GT:AD:DP:GL:GQ	0/1:43,5:35:-14.79,-10.54,-128.12:42.49
-chr1	4469243	rs12031045	G	A	324.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=623.89;QD=15.22;SB=-230.72	GT:AD:DP:GL:GQ	0/1:20,21:41:-78.04,-12.36,-70.49:99
-chr1	4469296	rs780569	T	A	228.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.28;MQ0=0;OQ=1316.01;QD=34.63;SB=-627.73	GT:AD:DP:GL:GQ	1/1:0,38:37:-135.20,-11.15,-0.01:99
-chr1	4469318	rs12035160	A	T	129.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.81;MQ0=0;OQ=613.76;QD=19.18;SB=-234.94	GT:AD:DP:GL:GQ	0/1:11,21:31:-74.00,-9.34,-42.52:99
-chr1	4469407	rs10799241	A	G	224.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=57.87;MQ0=0;OQ=407.85;QD=8.87;SB=-207.21	GT:AD:DP:GL:GQ	0/1:29,17:45:-57.62,-13.55,-119.36:99
-chr1	4469520	rs16839168	G	A	432.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=846.65;QD=16.28;SB=-413.43	GT:AD:DP:GL:GQ	0/1:26,26:51:-103.31,-15.37,-89.05:99
-chr1	4469555	rs16839171	G	T	425.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=647.76;QD=12.70;SB=-289.64	GT:AD:DP:GL:GQ	0/1:27,24:51:-83.43,-15.37,-93.72:99
-chr1	4469694	rs780568	A	G	87.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=1.60;MQ=59.63;MQ0=0;OQ=1699.95;QD=33.33;SB=-755.94	GT:AD:DP:GL:GQ	1/1:0,51:49:-173.60,-14.76,-0.02:99
-chr1	4470136	rs16839175	T	C	275.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.63;MQ0=0;OQ=746.25;QD=11.85;SB=-286.15	GT:AD:DP:GL:GQ	0/1:31,32:61:-96.29,-18.39,-125.52:99
-chr1	4470246	rs1612698	A	G	417.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.34;MQ=60.15;MQ0=0;OQ=917.82;QD=12.40;SB=-358.93	GT:AD:DP:GL:GQ	0/1:42,32:74:-117.36,-22.29,-169.05:99
-chr1	4470842	rs4654552	C	T	182.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.85;MQ=59.68;MQ0=0;OQ=1084.53;QD=15.28;SB=-349.06	GT:AD:DP:GL:GQ	0/1:37,34:71:-133.13,-21.39,-131.43:99
-chr1	4471600	rs1710415	A	G	89.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.45;MQ0=0;OQ=1235.30;QD=29.41;SB=-309.47	GT:AD:DP:GL:GQ	1/1:0,42:39:-127.15,-11.76,-0.03:99
-chr1	4471806	rs1762825	T	A	126.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.16;MQ0=0;OQ=1997.53;QD=36.32;SB=-643.98	GT:AD:DP:GL:GQ	1/1:0,55:54:-203.35,-16.27,-0.02:99
-chr1	4471883	rs10915549	G	A	333.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.45;MQ0=0;OQ=443.28;QD=10.55;SB=-159.64	GT:AD:DP:GL:GQ	0/1:26,16:40:-59.67,-12.06,-79.56:99
-chr1	4472000	rs4654442	G	A	195.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.37;MQ0=0;OQ=2467.21;QD=37.38;SB=-970.01	GT:AD:DP:GL:GQ	1/1:0,66:62:-250.32,-18.68,-0.02:99
-chr1	4472928	rs4568797	G	T	198.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=59.01;MQ0=0;OQ=1306.78;QD=17.19;SB=-394.04	GT:AD:DP:GL:GQ	0/1:30,46:73:-155.95,-21.99,-98.20:99
-chr1	4472959	rs4480324	A	G	92.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.63;MQ0=0;OQ=1914.93;QD=30.40;SB=-560.92	GT:AD:DP:GL:GQ	1/1:0,63:60:-195.13,-18.10,-0.06:99
-chr1	4472994	rs4323680	T	C	685.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1931.20;QD=32.73;SB=-824.33	GT:AD:DP:GL:GQ	1/1:0,59:55:-196.72,-16.57,-0.02:99
-chr1	4473017	rs4437847	T	C	44.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1770.27;QD=28.55;SB=-781.74	GT:AD:DP:GL:GQ	1/1:0,62:55:-180.66,-16.58,-0.05:99
-chr1	4473102	rs4442344	T	C	686.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1772.96;QD=35.46;SB=-792.00	GT:AD:DP:GL:GQ	1/1:0,50:50:-180.90,-15.06,-0.02:99
-chr1	4473320	rs1710418	A	G	44.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1771.10;QD=32.20;SB=-713.21	GT:AD:DP:GL:GQ	1/1:0,54:51:-180.72,-15.36,-0.02:99
-chr1	4473327	rs1762828	G	A	169.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.60;MQ0=0;OQ=2054.72;QD=36.05;SB=-823.34	GT:AD:DP:GL:GQ	1/1:0,57:53:-209.08,-15.97,-0.02:99
-chr1	4473546	rs1710419	C	A	168.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=57.84;MQ0=0;OQ=1495.45;QD=32.51;SB=-770.46	GT:AD:DP:GL:GQ	1/1:0,46:43:-153.15,-12.95,-0.02:99
-chr1	4473664	rs1710420	C	T	149.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=59.20;MQ0=0;OQ=902.97;QD=15.57;SB=-230.52	GT:AD:DP:GL:GQ	0/1:30,28:57:-110.76,-17.18,-94.35:99
-chr1	4473849	rs1710421	C	T	247.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=2607.62;QD=37.79;SB=-1041.32	GT:AD:DP:GL:GQ	1/1:0,69:66:-264.37,-19.88,-0.02:99
-chr1	4473977	rs1710422	C	T	77.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.90;MQ0=0;OQ=2084.84;QD=37.91;SB=-795.07	GT:AD:DP:GL:GQ	1/1:0,55:54:-212.09,-16.27,-0.02:99
-chr1	4473997	rs1710423	T	C	135.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.07;MQ0=0;OQ=1147.64;QD=25.50;SB=-601.59	GT:AD:DP:GL:GQ	1/1:0,45:37:-118.39,-11.16,-0.04:99
-chr1	4474861	rs1710424	A	G	675.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=2263.90;QD=31.89;SB=-1103.74	GT:AD:DP:GL:GQ	1/1:0,71:67:-230.02,-20.19,-0.04:99
-chr1	4475148	rs12036337	G	A	158.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=56.87;MQ0=1;OQ=1002.66;QD=14.75;SB=-286.76	GT:AD:DP:GL:GQ	0/1:34,34:59:-121.33,-17.78,-94.02:99
-chr1	4475283	.	G	A	82.68	PASS	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=59.35;MQ0=0;OQ=845.94;QD=13.22;SB=-362.87	GT:AD:DP:GL:GQ	0/1:34,30:60:-105.97,-18.09,-111.99:99
-chr1	4475382	rs10915550	C	T	345.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.10;MQ0=0;OQ=927.67;QD=14.96;SB=-380.90	GT:AD:DP:GL:GQ	0/1:33,29:62:-114.73,-18.68,-118.48:99
-chr1	4476131	rs10737413	C	T	15.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1742.86;QD=37.08;SB=-655.67	GT:AD:DP:GL:GQ	1/1:0,47:45:-177.88,-13.56,-0.01:99
-chr1	4476657	rs1710430	C	G	535.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2311.95;QD=41.28;SB=-1026.21	GT:AD:DP:GL:GQ	1/1:0,56:54:-234.80,-16.27,-0.02:99
-chr1	4476980	rs4654443	C	T	562.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1325.65;QD=15.60;SB=-630.22	GT:AD:DP:GL:GQ	0/1:45,40:85:-161.45,-25.60,-165.34:99
-chr1	4477487	rs12033789	G	T	214.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=905.30;QD=15.34;SB=-363.43	GT:AD:DP:GL:GQ	0/1:29,30:59:-111.58,-17.77,-100.35:99
-chr1	4477488	rs12036603	C	T	258.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=969.57;QD=16.16;SB=-419.81	GT:AD:DP:GL:GQ	0/1:30,30:59:-118.02,-17.78,-101.27:99
-chr1	4478406	rs596607	G	A	55.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.40;MQ0=0;OQ=1761.44;QD=22.88;SB=-768.34	GT:AD:DP:GL:GQ	0/1:27,50:75:-202.03,-22.60,-83.51:99
-chr1	4478558	rs12039806	T	A	70.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=6.67;MQ=59.12;MQ0=0;OQ=1156.91;QD=14.64;SB=-441.48	GT:AD:DP:GL:GQ	0/1:42,37:77:-142.17,-23.19,-150.58:99
-chr1	4478614	rs12039814	T	C	10.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=7.09;MQ=59.66;MQ0=0;OQ=671.25;QD=10.02;SB=-294.21	GT:AD:DP:GL:GQ	0/1:37,30:64:-89.71,-19.30,-136.10:99
-chr1	4478650	rs12038994	A	T	269.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=1147.45;QD=17.39;SB=-509.94	GT:AD:DP:GL:GQ	0/1:28,38:64:-137.31,-19.28,-105.10:99
-chr1	4478709	.	A	C	2.11	PASS	AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=7.65;MQ=58.73;MQ0=0;OQ=1101.58;QD=15.09;SB=-425.69	GT:AD:DP:GL:GQ	0/1:30,42:69:-134.23,-20.79,-106.44:99
-chr1	4478753	rs16839198	G	T	52.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=7.25;MQ=58.23;MQ0=0;OQ=906.23;QD=13.73;SB=-344.31	GT:AD:DP:GL:GQ	0/1:32,33:64:-113.20,-19.29,-98.09:99
-chr1	4478891	.	A	G	89.93	PASS	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=59.39;MQ0=0;OQ=917.93;QD=13.50;SB=-396.16	GT:AD:DP:GL:GQ	0/1:36,32:68:-115.57,-20.49,-141.62:99
-chr1	4478991	rs12039070	A	G	301.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=3.59;MQ=59.71;MQ0=0;OQ=1280.19;QD=16.00;SB=-441.58	GT:AD:DP:GL:GQ	0/1:37,43:80:-155.40,-24.10,-149.81:99
-chr1	4479035	rs12034930	G	A	326.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.68;MQ0=0;OQ=1133.14;QD=15.74;SB=-491.00	GT:AD:DP:GL:GQ	0/1:34,37:69:-137.39,-20.79,-119.61:99
-chr1	4479073	rs12039100	A	G	27.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=3.20;MQ=58.95;MQ0=0;OQ=915.49;QD=13.87;SB=-279.55	GT:AD:DP:GL:GQ	0/1:35,31:66:-114.72,-19.89,-140.84:99
-chr1	4479099	rs12039101	A	G	318.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=59.02;MQ0=0;OQ=1020.75;QD=14.38;SB=-348.94	GT:AD:DP:GL:GQ	0/1:36,35:70:-126.45,-21.09,-134.68:99
-chr1	4479118	rs1229148	A	G	277.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.11;MQ0=0;OQ=784.46;QD=10.75;SB=-374.59	GT:AD:DP:GL:GQ	0/1:37,36:67:-101.94,-20.21,-133.99:99
-chr1	4479593	rs12035830	G	A	298.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=59.59;MQ0=0;OQ=906.38;QD=16.19;SB=-375.12	GT:AD:DP:GL:GQ	0/1:28,28:56:-110.79,-16.87,-99.66:99
-chr1	4479841	rs13375249	G	C	20.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=1.63;MQ=59.73;MQ0=0;OQ=1230.24;QD=17.57;SB=-290.56	GT:AD:DP:GL:GQ	0/1:33,37:66:-146.20,-19.90,-135.57:99
-chr1	4479995	rs13375764	T	C	66.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=4.40;MQ=59.54;MQ0=0;OQ=574.33;QD=11.49;SB=-245.91	GT:AD:DP:GL:GQ	0/1:28,22:47:-74.88,-14.16,-104.49:99
-chr1	4480068	rs56226943	T	C	40.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=59.62;MQ0=0;OQ=881.12;QD=14.44;SB=-433.94	GT:AD:DP:GL:GQ	0/1:29,32:60:-109.48,-18.08,-115.28:99
-chr1	4480417	.	C	T	49.35	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=55.69;MQ0=0;OQ=1159.90;QD=16.81;SB=-282.22	GT:AD:DP:GL:GQ	0/1:33,36:66:-139.16,-19.89,-99.45:99
-chr1	4480560	rs61765366	A	G	285.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.94;MQ0=0;OQ=701.52;QD=11.89;SB=-268.60	GT:AD:DP:GL:GQ	0/1:29,30:57:-90.62,-17.18,-111.39:99
-chr1	4480691	rs61765367	A	G	0.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=57.81;MQ0=0;OQ=122.26;QD=1.63;SB=-4.55	GT:AD:DP:GL:GQ	0/1:63,11:59:-33.30,-17.79,-184.25:99
-chr1	4480787	rs61765379	A	G	0.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=7.68;MQ=56.41;MQ0=0;OQ=64.97;QD=0.82;SB=-50.25	GT:AD:DP:GL:GQ	0/1:64,12:67:-29.98,-20.20,-222.76:97.81
-chr1	4480849	rs549627	C	T	251.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=56.04;MQ0=0;OQ=1162.07;QD=16.37;SB=-467.11	GT:AD:DP:GL:GQ	0/1:33,37:67:-139.69,-20.20,-99.87:99
-chr1	4480920	rs548786	G	A	173	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=56.79;MQ0=1;OQ=670.11;QD=12.41;SB=-198.20	GT:AD:DP:GL:GQ	0/1:30,24:48:-84.77,-14.47,-84.01:99
-chr1	4481090	rs12039682	C	T	474.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.78;MQ0=0;OQ=980.72;QD=14.21;SB=-480.03	GT:AD:DP:GL:GQ	0/1:39,30:68:-121.84,-20.48,-138.54:99
-chr1	4481198	rs12039710	C	A	19.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=3;HaplotypeScore=2.99;MQ=59.79;MQ0=0;OQ=1468.40;QD=16.69;SB=-755.87	GT:AD:DP:GL:GQ	0/1:41,47:88:-176.63,-26.50,-144.72:99
-chr1	4481445	rs608203	T	C	400.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=60.00;MQ0=0;OQ=763.64;QD=11.93;SB=-242.90	GT:AD:DP:GL:GQ	0/1:33,31:64:-98.94,-19.29,-134.86:99
-chr1	4481949	rs518456	T	G	602.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1221.17;QD=15.26;SB=-525.73	GT:AD:DP:GL:GQ	0/1:37,43:77:-148.59,-23.19,-127.99:99
-chr1	4481956	rs57010025	C	T	238.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.40;MQ0=0;OQ=1419.96;QD=18.44;SB=-598.08	GT:AD:DP:GL:GQ	0/1:35,42:76:-168.18,-22.90,-116.42:99
-chr1	4482059	rs10489135	T	C	436.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.51;MQ0=0;OQ=1051.73;QD=13.84;SB=-549.55	GT:AD:DP:GL:GQ	0/1:39,37:73:-130.44,-21.99,-146.62:99
-chr1	4482139	rs57559146	A	C	431.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=970.54;QD=17.33;SB=-397.86	GT:AD:DP:GL:GQ	0/1:23,33:54:-116.60,-16.26,-81.57:99
-chr1	4482422	rs60071491	T	C	92.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=56.24;MQ0=0;OQ=1374.62;QD=16.76;SB=-668.88	GT:AD:DP:GL:GQ	0/1:37,45:82:-165.44,-24.69,-153.42:99
-chr1	4482693	rs4112336	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=102.81;MQ=56.77;MQ0=0;OQ=769.43;QD=9.27;SB=-197.80	GT:AD:DP:GL:GQ	0/1:55,28:82:-104.92,-24.70,-193.00:99
-chr1	4482708	.	C	A	39.18	Indel;LowQual	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=48.79;MQ=55.68;MQ0=0;QD=0.43;SB=-10.83	GT:AD:DP:GL:GQ	0/1:82,10:90:-34.30,-27.10,-291.82:72.01
-chr1	4482756	rs1229150	T	G	280.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=57.57;MQ0=0;OQ=1600.43;QD=18.83;SB=-735.72	GT:AD:DP:GL:GQ	0/1:32,53:82:-188.02,-24.70,-112.53:99
-chr1	4482784	rs1229151	A	G	1304.96	Indel	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=53.27;MQ0=0;QD=17.88;SB=-660.04	GT:AD:DP:GL:GQ	0/1:30,43:72:-155.47,-21.69,-120.71:99
-chr1	4482854	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=78.29;MQ=48.56;MQ0=0;OQ=195.41;QD=2.87;SB=-84.58	GT:AD:DP:GL:GQ	0/1:55,13:66:-42.70,-19.88,-199.63:99
-chr1	4482959	rs2097536	C	T	73.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.49;MQ0=0;OQ=999.17;QD=22.20;SB=-274.28	GT:AD:DP:GL:GQ	0/1:16,29:44:-116.46,-13.25,-55.39:99
-chr1	4486372	rs12040164	C	T	326.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=59.42;MQ0=0;OQ=1051.54;QD=14.60;SB=-388.33	GT:AD:DP:GL:GQ	0/1:40,32:72:-130.14,-21.70,-132.54:99
-chr1	4487829	rs241237	C	T	194.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.46;MQ0=0;OQ=801.99;QD=18.65;SB=-287.22	GT:AD:DP:GL:GQ	0/1:18,25:42:-96.14,-12.66,-58.53:99
-chr1	4488590	.	G	A	17.21	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.83;QD=22.78;SB=-295.25	GT:AD:DP:GL:GQ	0/1:15,31:44:-121.33,-13.26,-41.74:99
-chr1	4489266	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=19.48;MQ=53.94;MQ0=1;OQ=546.80;QD=8.68;SB=-157.24	GT:AD:DP:GL:GQ	0/1:31,26:42:-73.40,-15.44,-84.22:99
-chr1	4489270	rs241234	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=25.61;MQ=53.85;MQ0=1;OQ=785.85;QD=12.28;SB=-389.60	GT:AD:DP:GL:GQ	0/1:33,31:57:-99.04,-17.17,-115.38:99
-chr1	4490410	rs241233	T	C	169.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.70;MQ=59.74;MQ0=0;OQ=1074.01;QD=14.92;SB=-553.96	GT:AD:DP:GL:GQ	0/1:36,36:72:-132.37,-21.68,-149.45:99
-chr1	4490829	rs241232	G	A	84.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.60;MQ0=0;OQ=913.96;QD=19.45;SB=-389.16	GT:AD:DP:GL:GQ	0/1:20,27:47:-108.84,-14.16,-68.00:99
-chr1	4492019	.	C	T	107.27	PASS	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.07;MQ0=0;OQ=862.99;QD=13.28;SB=-457.42	GT:AD:DP:GL:GQ	0/1:38,27:64:-108.86,-19.28,-134.13:99
-chr1	4492104	rs241229	G	A	148.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=59.63;MQ0=0;OQ=584.46;QD=9.28;SB=-212.39	GT:AD:DP:GL:GQ	0/1:43,20:63:-80.71,-18.98,-155.69:99
-chr1	4494463	rs537398	T	C	597.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=930.45;QD=15.51;SB=-426.29	GT:AD:DP:GL:GQ	0/1:29,31:60:-114.40,-18.07,-118.90:99
-chr1	4494858	rs34231005	T	G	11.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=4;HaplotypeScore=0.14;MQ=59.76;MQ0=0;OQ=881.39;QD=11.30;SB=-322.46	GT:AD:DP:GL:GQ	0/1:45,33:76:-114.31,-22.89,-158.76:99
-chr1	4495171	rs509960	T	C	253.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.40;MQ=60.00;MQ0=0;OQ=1172.46;QD=18.04;SB=-611.00	GT:AD:DP:GL:GQ	0/1:27,38:65:-140.10,-19.58,-110.54:99
-chr1	4495869	.	C	T	861.60	Indel	AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=1;HaplotypeScore=22.99;MQ=51.44;MQ0=0;QD=11.64;SB=-342.41	GT:AD:DP:GL:GQ	0/1:44,27:74:-110.83,-21.38,-161.62:99
-chr1	4495871	.	C	A	736.52	Indel	AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=0;HaplotypeScore=22.99;MQ=51.44;MQ0=0;QD=9.95;SB=-304.20	GT:AD:DP:GL:GQ	0/1:44,27:74:-98.32,-21.38,-161.31:99
-chr1	4496138	rs10915553	T	C	458.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.54;MQ0=0;OQ=880.60;QD=11.90;SB=-349.17	GT:AD:DP:GL:GQ	0/1:42,32:72:-113.03,-21.69,-158.51:99
-chr1	4496148	rs10915554	G	A	271.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=55.61;MQ0=0;OQ=1132.53;QD=15.10;SB=-504.97	GT:AD:DP:GL:GQ	0/1:40,35:73:-138.53,-22.00,-129.42:99
-chr1	4496394	rs12084169	C	T	196.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=59.54;MQ0=0;OQ=1321.84;QD=16.12;SB=-685.73	GT:AD:DP:GL:GQ	0/1:41,41:80:-159.57,-24.10,-141.56:99
-chr1	4496424	rs12086217	A	G	463.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.43;MQ0=0;OQ=859.99;QD=13.23;SB=-378.26	GT:AD:DP:GL:GQ	0/1:34,31:65:-108.86,-19.58,-137.17:99
-chr1	4496942	rs623217	G	C	175.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=59.66;MQ0=0;OQ=1355.72;QD=19.94;SB=-471.80	GT:AD:DP:GL:GQ	0/1:31,37:66:-158.75,-19.89,-127.17:99
-chr1	4496949	rs472113	G	A	230.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.66;MQ0=0;OQ=1272.49;QD=18.99;SB=-462.43	GT:AD:DP:GL:GQ	0/1:30,37:67:-150.71,-20.18,-109.30:99
-chr1	4497460	rs556890	A	G	2.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=9.81;MQ=58.48;MQ0=0;OQ=661.76;QD=14.39;SB=-333.32	GT:AD:DP:GL:GQ	0/1:21,24:43:-82.42,-12.96,-78.26:99
-chr1	4497578	.	G	A	145.29	PASS	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=55.81;MQ0=2;OQ=939.73;QD=13.42;SB=-372.83	GT:AD:DP:GL:GQ	0/1:38,32:59:-115.04,-17.78,-100.90:99
-chr1	4497715	rs609304	T	C	122.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=597.13;QD=11.71;SB=-145.28	GT:AD:DP:GL:GQ	0/1:26,25:50:-78.07,-15.08,-99.80:99
-chr1	4497726	rs554335	A	T	316.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=640.98;QD=12.57;SB=-272.29	GT:AD:DP:GL:GQ	0/1:29,22:51:-82.74,-15.36,-107.67:99
-chr1	4497802	rs16838465	A	G	196.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.68;MQ0=0;OQ=953.26;QD=13.06;SB=-260.95	GT:AD:DP:GL:GQ	0/1:33,40:71:-120.01,-21.40,-135.23:99
-chr1	4497821	rs553435	A	G	265.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=3.67;MQ=59.70;MQ0=0;OQ=1049.73;QD=13.63;SB=-281.63	GT:AD:DP:GL:GQ	0/1:34,43:75:-130.87,-22.61,-136.05:99
-chr1	4497861	rs608492	G	C	466.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.05;MQ0=0;OQ=1478.41;QD=20.82;SB=-714.38	GT:AD:DP:GL:GQ	0/1:30,41:69:-171.91,-20.79,-131.74:99
-chr1	4497881	rs12726510	T	C	431.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=56.08;MQ0=0;OQ=981.66;QD=11.69;SB=-387.89	GT:AD:DP:GL:GQ	0/1:41,43:78:-124.95,-23.50,-161.69:99
-chr1	4497887	rs12752601	C	A	191.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=56.08;MQ0=0;OQ=1107.25;QD=13.18;SB=-552.73	GT:AD:DP:GL:GQ	0/1:44,40:81:-138.40,-24.39,-157.12:99
-chr1	4497950	rs12737521	G	A	266.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.10;MQ0=0;OQ=874.33;QD=12.67;SB=-378.16	GT:AD:DP:GL:GQ	0/1:41,28:69:-111.51,-20.80,-136.23:99
-chr1	4498077	rs551359	A	G	240.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=59.32;MQ0=0;OQ=1496.06;QD=16.81;SB=-547.59	GT:AD:DP:GL:GQ	0/1:39,50:88:-179.39,-26.50,-159.21:99
-chr1	4498168	rs495682	T	C	312.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=1219.53;QD=14.52;SB=-615.78	GT:AD:DP:GL:GQ	0/1:41,43:83:-150.24,-25.00,-166.52:99
-chr1	4498170	rs596848	G	A	305.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.72;MQ0=0;OQ=1391.50;QD=16.77;SB=-693.72	GT:AD:DP:GL:GQ	0/1:40,43:81:-166.83,-24.40,-145.63:99
-chr1	4498284	rs596360	G	A	603.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=984.96;QD=14.92;SB=-509.05	GT:AD:DP:GL:GQ	0/1:36,30:66:-121.68,-19.90,-113.72:99
-chr1	4498314	rs494638	T	C	459.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.34;MQ0=0;OQ=1145.34;QD=15.69;SB=-585.28	GT:AD:DP:GL:GQ	0/1:33,40:71:-139.20,-21.39,-128.86:99
-chr1	4498825	rs489371	A	G	35.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=4.84;MQ=56.29;MQ0=0;OQ=1173.41;QD=12.62;SB=-564.58	GT:AD:DP:GL:GQ	0/1:51,42:90:-147.73,-27.11,-207.42:99
-chr1	4498854	rs489316	A	G	383.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=53.44;MQ0=0;OQ=1022.72;QD=11.24;SB=-456.67	GT:AD:DP:GL:GQ	0/1:50,41:90:-132.68,-27.12,-202.80:99
-chr1	4499103	rs592726	C	T	522.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=1251.74;QD=14.06;SB=-614.59	GT:AD:DP:GL:GQ	0/1:50,39:87:-154.68,-26.22,-160.76:99
-chr1	4499256	rs6673713	A	T	601.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=969.14;QD=15.38;SB=-478.55	GT:AD:DP:GL:GQ	0/1:32,31:63:-119.17,-18.97,-123.21:99
-chr1	4499545	rs6677142	T	C	474.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=56.97;MQ0=0;OQ=1056.33;QD=15.77;SB=-489.28	GT:AD:DP:GL:GQ	0/1:31,36:67:-129.10,-20.18,-124.32:99
-chr1	4499557	rs10158638	A	G	600.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.01;MQ0=0;OQ=954.47;QD=14.46;SB=-498.28	GT:AD:DP:GL:GQ	0/1:33,33:66:-118.61,-19.88,-133.94:99
-chr1	4499695	rs28694108	C	T	122.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=60.16;MQ0=0;OQ=1387.28;QD=20.11;SB=-460.49	GT:AD:DP:GL:GQ	0/1:27,42:67:-162.21,-20.20,-83.84:99
-chr1	4499852	rs569392	T	C	181.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=59.40;MQ0=0;OQ=1301.88;QD=15.50;SB=-652.84	GT:AD:DP:GL:GQ	0/1:40,44:84:-158.78,-25.30,-162.80:99
-chr1	4499866	rs638811	G	A	371.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.47;MQ0=0;OQ=1161.22;QD=14.70;SB=-516.05	GT:AD:DP:GL:GQ	0/1:40,38:72:-141.11,-21.71,-113.94:99
-chr1	4500093	rs627374	C	A	201.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=56.24;MQ0=0;OQ=1409.06;QD=17.18;SB=-575.67	GT:AD:DP:GL:GQ	0/1:36,45:77:-170.76,-26.57,-102.66:99
-chr1	4500144	rs1612095	G	C	191.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=58.14;MQ0=0;OQ=1652.98;QD=16.87;SB=-714.30	GT:AD:DP:GL:GQ	0/1:51,47:96:-197.51,-28.93,-219.71:99
-chr1	4500181	rs1612008	C	T	343.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.55;MQ0=0;OQ=1543.90;QD=16.78;SB=-630.74	GT:AD:DP:GL:GQ	0/1:42,49:86:-183.59,-25.91,-132.31:99
-chr1	4500274	rs544513	A	G	399.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=703.77;QD=11.00;SB=-261.96	GT:AD:DP:GL:GQ	0/1:33,31:62:-92.35,-18.69,-134.62:99
-chr1	4500351	rs543653	T	G	570.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=699.52;QD=12.27;SB=-362.58	GT:AD:DP:GL:GQ	0/1:31,26:56:-90.10,-16.87,-111.77:99
-chr1	4500481	rs542688	C	G	360.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.76;MQ0=0;OQ=1267.59;QD=16.05;SB=-449.73	GT:AD:DP:GL:GQ	0/1:41,38:77:-153.25,-23.20,-181.78:99
-chr1	4500512	rs625627	C	T	286.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.08;MQ0=0;OQ=914.91;QD=12.89;SB=-281.75	GT:AD:DP:GL:GQ	0/1:39,32:67:-114.97,-20.19,-123.19:99
-chr1	4500529	rs541929	A	G	325.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.16;MQ0=0;OQ=945.37;QD=12.28;SB=-290.30	GT:AD:DP:GL:GQ	0/1:42,34:76:-120.71,-22.89,-170.67:99
-chr1	4500606	rs10915556	C	T	355.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1316.31;QD=19.65;SB=-489.56	GT:AD:DP:GL:GQ	0/1:29,38:66:-154.80,-19.88,-102.91:99
-chr1	4500644	rs2051642	G	T	498.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1142.97;QD=16.33;SB=-501.30	GT:AD:DP:GL:GQ	0/1:32,38:70:-138.67,-21.09,-110.82:99
-chr1	4500677	rs2051641	C	T	126.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=60.00;MQ0=0;OQ=1424.93;QD=18.04;SB=-396.12	GT:AD:DP:GL:GQ	0/1:37,42:79:-169.57,-23.79,-134.20:99
-chr1	4500995	rs694361	G	A	987.12	Indel	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=10;HaplotypeScore=19.73;MQ=59.67;MQ0=0;QD=14.31;SB=-451.85	GT:AD:DP:GL:GQ	0/1:36,33:64:-121.28,-19.29,-109.34:99
-chr1	4501161	rs10915557	A	C	322.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=772.74;QD=13.80;SB=-198.82	GT:AD:DP:GL:GQ	0/1:27,28:54:-96.83,-16.27,-94.26:99
-chr1	4501182	rs10915558	G	T	398.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=829.24;QD=13.16;SB=-280.30	GT:AD:DP:GL:GQ	0/1:32,31:61:-104.58,-18.38,-107.72:99
-chr1	4501418	rs988089	G	T	231.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.83;MQ0=0;OQ=785.83;QD=14.29;SB=-379.13	GT:AD:DP:GL:GQ	0/1:28,27:55:-98.43,-16.57,-95.26:99
-chr1	4501445	rs988088	G	A	287.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.35;MQ0=0;OQ=635.25;QD=14.77;SB=-270.30	GT:AD:DP:GL:GQ	0/1:21,22:39:-78.57,-11.76,-58.80:99
-chr1	4501584	rs1988134	A	T	372.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.72;MQ0=0;OQ=1235.61;QD=14.89;SB=-511.29	GT:AD:DP:GL:GQ	0/1:43,40:83:-151.84,-25.00,-162.60:99
-chr1	4501936	rs508056	T	C	0.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.01;HRun=1;HaplotypeScore=15.97;MQ=59.84;MQ0=0;OQ=1145.11;QD=15.07;SB=-479.27	GT:AD:DP:GL:GQ	0/1:36,39:76:-140.39,-22.59,-147.97:99
-chr1	4501948	rs594535	A	T	38.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.01;HRun=0;HaplotypeScore=7.00;MQ=59.51;MQ0=0;OQ=1283.54;QD=17.83;SB=-623.13	GT:AD:DP:GL:GQ	0/1:31,40:72:-153.02,-21.38,-116.42:99
-chr1	4502177	rs640624	T	C	14.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=7.76;MQ=59.57;MQ0=0;OQ=1108.01;QD=16.29;SB=-573.02	GT:AD:DP:GL:GQ	0/1:30,38:66:-133.97,-19.88,-116.04:99
-chr1	4502677	.	A	G	145.65	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.30;MQ0=0;OQ=805.91;QD=12.21;SB=-395.14	GT:AD:DP:GL:GQ	0/1:37,29:66:-103.76,-19.88,-150.61:99
-chr1	4502871	rs2411775	C	T	188.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.39;MQ0=0;OQ=1230.48;QD=17.83;SB=-330.32	GT:AD:DP:GL:GQ	0/1:32,36:67:-146.52,-20.19,-100.70:99
-chr1	4503184	rs694935	T	A	28.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=2.73;MQ=59.33;MQ0=0;OQ=840.35;QD=13.55;SB=-222.90	GT:AD:DP:GL:GQ	0/1:31,31:58:-104.80,-17.48,-105.42:99
-chr1	4503230	rs694967	T	G	352.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=57.78;MQ0=0;OQ=1098.27;QD=15.25;SB=-535.44	GT:AD:DP:GL:GQ	0/1:33,39:72:-134.80,-21.69,-119.88:99
-chr1	4503601	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=106.52;MQ=39.06;MQ0=0;OQ=897.90;QD=7.48;SB=-269.21	GT:AD:DP:GL:GQ	0/1:86,34:118:-128.61,-35.54,-314.22:99
-chr1	4503616	.	T	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=1;HaplotypeScore=12.83;MQ=37.47;MQ0=0;OQ=467.51;QD=3.41;SB=-122.22	GT:AD:DP:GL:GQ	0/1:111,26:134:-90.40,-40.36,-439.82:99
-chr1	4503623	rs241214	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=0;HaplotypeScore=94.05;MQ=37.91;MQ0=0;OQ=4273.01;QD=28.87;SB=-1538.72	GT:AD:DP:GL:GQ	0/1:32,114:147:-426.30,-51.49,-123.04:99
-chr1	4503639	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=260.99;MQ=37.36;MQ0=0;OQ=1166.38;QD=7.34;SB=-484.60	GT:AD:DP:GL:GQ	0/1:114,44:124:-157.27,-37.35,-295.16:99
-chr1	4503657	rs12754029	A	C	1394.26	DPFilter;Indel	AC=1;AF=0.50;AN=2;DB;DP=153;Dels=0.00;HRun=1;HaplotypeScore=166.14;MQ=39.29;MQ0=0;QD=9.11;SB=-599.12	GT:AD:DP:GL:GQ	0/1:73,77:122:-190.87,-48.16,-269.49:99
-chr1	4503674	rs61111938	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=147;Dels=0.00;HRun=0;HaplotypeScore=137.11;MQ=42.18;MQ0=0;OQ=392.40;QD=2.67;SB=-58.59	GT:AD:DP:GL:GQ	0/1:124,23:123:-79.58,-37.06,-405.54:99
-chr1	4503686	rs61202630	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.03;HRun=0;HaplotypeScore=163.66;MQ=45.68;MQ0=0;OQ=981.22;QD=7.91;SB=-498.66	GT:AD:DP:GL:GQ	0/1:79,40:116:-138.71,-37.31,-281.28:99
-chr1	4503715	.	T	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=16.61;MQ=53.48;MQ0=0;OQ=158.20;QD=1.86;SB=-90.66	GT:AD:DP:GL:GQ	0/1:72,13:84:-44.41,-25.30,-293.89:99
-chr1	4503964	rs241215	T	A	444.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=54.88;MQ0=0;OQ=1312.48;QD=17.50;SB=-618.08	GT:AD:DP:GL:GQ	0/1:34,41:75:-157.12,-22.59,-129.67:99
-chr1	4504029	rs241216	G	A	155.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=59.43;MQ0=0;OQ=1251.65;QD=17.15;SB=-469.46	GT:AD:DP:GL:GQ	0/1:35,38:70:-149.55,-21.10,-107.16:99
-chr1	4504349	rs241217	C	G	275.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1603.60;QD=22.59;SB=-778.42	GT:AD:DP:GL:GQ	0/1:29,42:71:-185.04,-21.39,-125.25:99
-chr1	4505282	rs241218	T	C	43.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=7.22;MQ=59.15;MQ0=0;OQ=812.13;QD=11.44;SB=-395.26	GT:AD:DP:GL:GQ	0/1:37,34:67:-104.70,-20.20,-130.72:99
-chr1	4506052	rs241219	T	C	334.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=59.17;MQ0=0;OQ=741.75;QD=13.25;SB=-389.65	GT:AD:DP:GL:GQ	0/1:27,29:55:-94.04,-16.58,-103.55:99
-chr1	4508064	rs241220	G	A	334	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=1163.49;QD=17.37;SB=-431.97	GT:AD:DP:GL:GQ	0/1:32,35:66:-139.53,-19.90,-98.33:99
-chr1	4508910	rs241221	T	C	373.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.20;MQ0=0;OQ=874.89;QD=15.08;SB=-418.55	GT:AD:DP:GL:GQ	0/1:25,33:55:-107.34,-16.57,-97.13:99
-chr1	4509116	rs241222	G	C	267.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=59.18;MQ0=0;OQ=1337.43;QD=18.07;SB=-676.08	GT:AD:DP:GL:GQ	0/1:37,37:72:-158.72,-21.69,-154.68:99
-chr1	4510110	rs241244	A	T	180.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.78;MQ=60.38;MQ0=0;OQ=930.99;QD=16.33;SB=-387.46	GT:AD:DP:GL:GQ	0/1:27,30:57:-113.55,-17.17,-101.72:99
-chr1	4510493	rs241245	T	C	361.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=851.20;QD=14.43;SB=-421.93	GT:AD:DP:GL:GQ	0/1:29,30:57:-105.58,-17.17,-107.45:99
-chr1	4510920	rs241246	T	C	463.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.63;MQ0=0;OQ=864.46;QD=13.94;SB=-382.19	GT:AD:DP:GL:GQ	0/1:32,30:62:-108.40,-18.67,-129.80:99
-chr1	4510938	rs241247	G	T	223.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=59.71;MQ0=0;OQ=1111.82;QD=14.07;SB=-561.61	GT:AD:DP:GL:GQ	0/1:42,37:78:-137.96,-23.49,-147.67:99
-chr1	4511101	rs241248	G	A	90.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=4.65;MQ=58.90;MQ0=0;OQ=1137.70;QD=15.80;SB=-412.89	GT:AD:DP:GL:GQ	0/1:38,34:72:-138.74,-21.69,-139.14:99
-chr1	4512226	rs241249	C	A	118.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=2704.76;QD=36.06;SB=-1203.75	GT:AD:DP:GL:GQ	1/1:0,75:73:-274.08,-21.98,-0.01:99
-chr1	4512612	rs12117466	C	T	434.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1595.86;QD=21.57;SB=-705.78	GT:AD:DP:GL:GQ	0/1:28,46:74:-185.16,-22.29,-104.90:99
-chr1	4512789	rs2222050	C	G	399.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.66;MQ0=0;OQ=560.26;QD=12.18;SB=-284.90	GT:AD:DP:GL:GQ	0/1:29,17:46:-73.17,-13.86,-129.73:99
-chr1	4512997	.	G	C	109.15	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.26;MQ0=0;OQ=1039.37;QD=14.64;SB=-540.64	GT:AD:DP:GL:GQ	0/1:41,30:70:-128.31,-21.09,-176.73:99
-chr1	4513093	rs241250	C	T	592.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=2215.68;QD=40.29;SB=-1120.49	GT:AD:DP:GL:GQ	1/1:0,55:55:-225.17,-16.57,-0.01:99
-chr1	4513279	rs241251	T	C	191.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=56.17;MQ0=0;OQ=859.05;QD=12.10;SB=-428.93	GT:AD:DP:GL:GQ	0/1:40,31:71:-110.57,-21.39,-162.21:99
-chr1	4513371	rs241252	G	A	678.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2454.05;QD=39.58;SB=-997.85	GT:AD:DP:GL:GQ	1/1:0,61:61:-249.00,-18.37,-0.01:99
-chr1	4513556	rs56948682	G	C	523.60	Indel	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=3.31;MQ=55.31;MQ0=0;QD=11.90;SB=-218.66	GT:AD:DP:GL:GQ	0/1:25,19:40:-67.72,-12.07,-92.30:99
-chr1	4513868	rs241254	G	A	271.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=58.71;MQ0=0;OQ=649.43;QD=12.03;SB=-239.26	GT:AD:DP:GL:GQ	0/1:28,25:50:-83.30,-15.07,-98.60:99
-chr1	4513881	rs241255	G	C	176.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=58.80;MQ0=0;OQ=2370.20;QD=40.87;SB=-1167.06	GT:AD:DP:GL:GQ	1/1:0,58:55:-240.62,-16.57,-0.01:99
-chr1	4514372	rs241256	C	T	582.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=913.61;QD=13.44;SB=-345.84	GT:AD:DP:GL:GQ	0/1:39,29:68:-115.13,-20.48,-142.92:99
-chr1	4514476	rs6426419	T	A	347.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.60;MQ0=0;OQ=541.18;QD=9.33;SB=-252.68	GT:AD:DP:GL:GQ	0/1:37,21:57:-74.57,-17.17,-137.52:99
-chr1	4514682	rs241257	C	T	286.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2358.24;QD=39.97;SB=-1174.07	GT:AD:DP:GL:GQ	1/1:0,59:59:-239.42,-17.77,-0.01:99
-chr1	4514873	rs171319	C	T	380.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.42;MQ0=0;OQ=1086.37;QD=13.58;SB=-534.53	GT:AD:DP:GL:GQ	0/1:46,34:78:-135.44,-23.52,-140.72:99
-chr1	4515369	rs241258	G	A	48.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=47.21;MQ0=0;OQ=749.09;QD=17.42;SB=-181.27	GT:AD:DP:GL:GQ	0/1:20,23:42:-90.85,-12.66,-63.49:99
-chr1	4515444	rs241259	C	G	22.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=50.43;MQ0=0;OQ=2118.85;QD=40.75;SB=-972.73	GT:AD:DP:GL:GQ	1/1:0,52:49:-215.48,-14.76,-0.01:99
-chr1	4515588	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=15;HaplotypeScore=4.97;MQ=51.27;MQ0=0;OQ=250.35;QD=4.47;SB=56.21	GT:AD:DP:GL:GQ	0/1:42,14:49:-43.09,-14.77,-129.95:99
-chr1	4515926	rs241260	C	G	33.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=55.21;MQ0=0;OQ=3292.12;QD=42.21;SB=-1616.25	GT:AD:DP:GL:GQ	1/1:0,78:75:-328.21,-22.60,-0.02:99
-chr1	4515962	rs241261	T	C	602.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=2469.23;QD=29.75;SB=-1091.36	GT:AD:DP:GL:GQ	1/1:0,83:79:-250.58,-23.83,-0.08:99
-chr1	4516659	rs241262	T	G	634.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2557.93;QD=35.53;SB=-1149.62	GT:AD:DP:GL:GQ	1/1:0,72:72:-259.40,-21.69,-0.02:99
-chr1	4517716	rs10799244	T	C	405.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.15;MQ0=0;OQ=1346.22;QD=18.96;SB=-628.34	GT:AD:DP:GL:GQ	0/1:27,44:70:-158.99,-21.09,-107.87:99
-chr1	4518111	rs6685798	G	A	309.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.32;MQ0=0;OQ=1238.56;QD=18.21;SB=-627.62	GT:AD:DP:GL:GQ	0/1:30,37:65:-146.72,-19.58,-98.24:99
-chr1	4518139	rs916408	T	C	232.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.86;MQ=59.63;MQ0=0;OQ=609.90;QD=9.84;SB=-241.88	GT:AD:DP:GL:GQ	0/1:34,28:60:-82.36,-18.09,-138.61:99
-chr1	4518389	rs916407	C	A	294.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.44;MQ0=0;OQ=593.42;QD=10.99;SB=-258.24	GT:AD:DP:GL:GQ	0/1:32,22:53:-78.59,-15.97,-110.59:99
-chr1	4518393	rs916406	T	C	102.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.50;MQ0=0;OQ=426.60;QD=7.62;SB=-216.22	GT:AD:DP:GL:GQ	0/1:34,22:50:-61.02,-15.07,-122.30:99
-chr1	4518582	rs241263	T	C	395.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2663.66;QD=36.49;SB=-1355.60	GT:AD:DP:GL:GQ	1/1:0,73:73:-269.97,-21.98,-0.02:99
-chr1	4518898	rs241264	C	T	593.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3315.63;QD=40.93;SB=-1267.69	GT:AD:DP:GL:GQ	1/1:0,81:81:-330.56,-24.40,-0.02:99
-chr1	4519253	rs241265	G	T	396.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=442.53;QD=9.42;SB=-108.63	GT:AD:DP:GL:GQ	0/1:30,17:47:-61.69,-14.15,-109.08:99
-chr1	4520150	rs241266	G	A	572.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1309.70;QD=16.79;SB=-634.24	GT:AD:DP:GL:GQ	0/1:38,40:77:-157.45,-23.20,-135.23:99
-chr1	4520783	rs10915560	T	C	479.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=617.89;QD=10.13;SB=-279.12	GT:AD:DP:GL:GQ	0/1:36,25:60:-83.15,-18.08,-142.30:99
-chr1	4520856	rs12120353	C	A	156.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=694.57;QD=12.19;SB=-303.22	GT:AD:DP:GL:GQ	0/1:32,25:54:-89.01,-16.27,-103.65:99
-chr1	4521323	rs241267	C	T	378.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.60;MQ0=0;OQ=620.84;QD=13.21;SB=-243.25	GT:AD:DP:GL:GQ	0/1:25,22:45:-78.94,-13.58,-74.16:99
-chr1	4521646	rs12748186	C	T	419.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=983.89;QD=18.92;SB=-364.52	GT:AD:DP:GL:GQ	0/1:23,29:52:-117.34,-15.67,-75.86:99
-chr1	4522500	rs241268	A	G	490.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1548.29;QD=30.97;SB=-704.61	GT:AD:DP:GL:GQ	1/1:0,50:49:-158.46,-14.78,-0.04:99
-chr1	4523101	.	G	T	20.08	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=16;HaplotypeScore=10.17;MQ=50.32;MQ0=0;QD=0.35;SB=50.87	GT:AD:DP:GL:GQ	0/1:48,10:42:-17.95,-12.66,-121.78:52.87
-chr1	4523283	rs241269	C	T	335.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=806.86;QD=12.81;SB=-308.31	GT:AD:DP:GL:GQ	0/1:36,27:61:-102.37,-18.40,-111.88:99
-chr1	4523749	rs55956326	C	T	46.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=776.69;QD=17.65;SB=-140.14	GT:AD:DP:GL:GQ	0/1:21,23:44:-94.21,-13.26,-66.49:99
-chr1	4524365	rs497517	C	A	203.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=57.23;MQ0=0;OQ=2311.84;QD=35.57;SB=-943.65	GT:AD:DP:GL:GQ	1/1:0,65:64:-234.79,-19.27,-0.02:99
-chr1	4524639	rs190250	T	C	96.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.62;MQ0=1;OQ=1410.76;QD=28.22;SB=-520.24	GT:AD:DP:GL:GQ	1/1:1,49:43:-144.69,-12.96,-0.03:99
-chr1	4525049	rs241270	T	A	128.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=57.31;MQ0=0;OQ=2756.56;QD=35.80;SB=-964.62	GT:AD:DP:GL:GQ	1/1:0,76:75:-279.26,-22.59,-0.02:99
-chr1	4525775	.	C	T	82.15	PASS	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=60.00;MQ0=0;OQ=631.76;QD=12.39;SB=-287.21	GT:AD:DP:GL:GQ	0/1:28,23:47:-80.62,-14.16,-88.43:99
-chr1	4526115	rs241271	T	C	508.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1796.29;QD=29.45;SB=-877.68	GT:AD:DP:GL:GQ	1/1:0,61:57:-183.26,-17.19,-0.05:99
-chr1	4526127	rs241272	T	G	620.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=2425.30;QD=34.16;SB=-1142.12	GT:AD:DP:GL:GQ	1/1:0,71:70:-246.14,-21.08,-0.02:99
-chr1	4526146	rs1515670	A	G	180.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.98;MQ=58.96;MQ0=0;OQ=860.15;QD=12.84;SB=-436.91	GT:AD:DP:GL:GQ	0/1:37,30:66:-109.18,-19.88,-145.10:99
-chr1	4526937	rs241273	A	C	421.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1105.42;QD=16.02;SB=-515.69	GT:AD:DP:GL:GQ	0/1:31,38:69:-134.61,-20.78,-114.90:99
-chr1	4527342	rs241274	A	C	51.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1996.50;QD=32.20;SB=-821.03	GT:AD:DP:GL:GQ	1/1:0,62:58:-203.26,-17.47,-0.02:99
-chr1	4527839	rs241275	A	G	555.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=2594.28;QD=29.48;SB=-1228.48	GT:AD:DP:GL:GQ	1/1:0,88:82:-263.09,-24.73,-0.08:99
-chr1	4528191	rs28665533	G	A	434.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1407.19;QD=19.02;SB=-661.67	GT:AD:DP:GL:GQ	0/1:32,42:74:-166.29,-22.29,-115.61:99
-chr1	4528559	rs241276	C	T	153.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.22;MQ=59.30;MQ0=0;OQ=909.72;QD=13.78;SB=-324.82	GT:AD:DP:GL:GQ	0/1:37,29:65:-113.86,-19.61,-110.36:99
-chr1	4529046	rs241277	A	C	117.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=2.18;MQ=60.00;MQ0=0;OQ=2433.72;QD=33.34;SB=-1159.13	GT:AD:DP:GL:GQ	1/1:0,73:69:-246.98,-20.78,-0.02:99
-chr1	4529268	rs241278	T	C	273.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.43;MQ=59.61;MQ0=0;OQ=2074.79;QD=35.17;SB=-848.12	GT:AD:DP:GL:GQ	1/1:0,59:58:-211.08,-17.47,-0.02:99
-chr1	4530244	rs7531281	A	C	607.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2071.97;QD=33.42;SB=-943.11	GT:AD:DP:GL:GQ	1/1:0,62:60:-210.80,-18.07,-0.02:99
-chr1	4530343	rs7526879	C	T	127.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.29;MQ0=0;OQ=2841.32;QD=39.46;SB=-1410.68	GT:AD:DP:GL:GQ	1/1:0,72:71:-287.74,-21.39,-0.02:99
-chr1	4531126	rs241212	G	T	328.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.37;MQ0=0;OQ=847.33;QD=14.36;SB=-341.38	GT:AD:DP:GL:GQ	0/1:30,29:58:-105.49,-17.47,-104.18:99
-chr1	4531264	rs55850443	C	A	105.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=3.29;MQ=59.66;MQ0=0;OQ=907.20;QD=13.54;SB=-364.99	GT:AD:DP:GL:GQ	0/1:34,33:65:-113.58,-19.58,-115.11:99
-chr1	4532420	rs980092	A	G	568.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2136.98;QD=31.43;SB=-1016.73	GT:AD:DP:GL:GQ	1/1:0,68:67:-217.34,-20.21,-0.06:99
-chr1	4532678	rs34339970	T	C	238.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=59.68;MQ0=0;OQ=686.96;QD=9.41;SB=-234.24	GT:AD:DP:GL:GQ	0/1:42,31:70:-93.08,-21.10,-159.73:99
-chr1	4532688	rs171317	C	A	295.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.69;MQ0=0;OQ=2546.98;QD=34.42;SB=-1274.23	GT:AD:DP:GL:GQ	1/1:0,74:71:-258.31,-21.38,-0.02:99
-chr1	4532830	rs35748829	C	T	224.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.37;MQ0=0;OQ=1280.71;QD=19.40;SB=-516.15	GT:AD:DP:GL:GQ	0/1:29,37:64:-150.64,-19.29,-86.56:99
-chr1	4532839	rs35106071	C	T	30.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=59.31;MQ0=0;OQ=1092.68;QD=17.91;SB=-426.77	GT:AD:DP:GL:GQ	0/1:29,32:61:-130.92,-18.37,-105.58:99
-chr1	4533414	rs6673089	G	A	59.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.78;MQ=59.66;MQ0=0;OQ=1175.25;QD=17.54;SB=-391.70	GT:AD:DP:GL:GQ	0/1:31,35:66:-140.69,-19.88,-114.80:99
-chr1	4533499	rs6426421	C	T	279.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=56.21;MQ0=0;OQ=3052.51;QD=38.64;SB=-1294.73	GT:AD:DP:GL:GQ	1/1:0,79:78:-308.86,-23.50,-0.03:99
-chr1	4533545	rs7527742	G	A	582.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.29;MQ0=0;OQ=1245.18;QD=15.19;SB=-388.08	GT:AD:DP:GL:GQ	0/1:45,37:81:-152.20,-24.40,-157.64:99
-chr1	4533745	rs241208	T	C	151.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.23;MQ0=0;OQ=641.89;QD=11.07;SB=-289.57	GT:AD:DP:GL:GQ	0/1:35,23:57:-84.64,-17.17,-139.99:99
-chr1	4533782	rs17344823	A	T	343.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.31;MQ0=0;OQ=1106.34;QD=17.56;SB=-567.72	GT:AD:DP:GL:GQ	0/1:26,37:60:-131.99,-18.07,-92.40:99
-chr1	4533944	rs241207	T	G	366.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.27;MQ0=0;OQ=1080.62;QD=29.21;SB=-322.00	GT:AD:DP:GL:GQ	1/1:0,37:32:-111.66,-9.64,-0.02:96.25
-chr1	4534250	rs11584033	T	C	380.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=58.88;MQ0=0;OQ=947.57;QD=16.34;SB=-494.15	GT:AD:DP:GL:GQ	0/1:26,32:58:-115.51,-17.47,-106.56:99
-chr1	4534838	rs1541318	A	G	459.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1096.76;QD=16.87;SB=-540.58	GT:AD:DP:GL:GQ	0/1:28,37:65:-132.54,-19.58,-112.37:99
-chr1	4535109	rs2411777	C	T	151.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.69;MQ0=0;OQ=1491.80;QD=20.16;SB=-710.25	GT:AD:DP:GL:GQ	0/1:30,44:73:-174.45,-21.99,-106.04:99
-chr1	4536054	rs10799246	T	A	279.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=56.28;MQ0=1;OQ=1123.37;QD=19.37;SB=-579.73	GT:AD:DP:GL:GQ	0/1:23,35:56:-132.49,-16.87,-78.58:99
-chr1	4536627	rs1157688	T	C	729.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2286.18;QD=34.64;SB=-1059.42	GT:AD:DP:GL:GQ	1/1:1,65:64:-232.22,-19.28,-0.02:99
-chr1	4537253	rs12746043	A	G	196.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.75;MQ0=0;OQ=742.34;QD=10.03;SB=-306.91	GT:AD:DP:GL:GQ	0/1:43,31:74:-99.82,-22.30,-175.74:99
-chr1	4537334	rs12073968	A	T	357.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1269.08;QD=15.67;SB=-567.67	GT:AD:DP:GL:GQ	0/1:40,41:80:-154.29,-24.09,-150.38:99
-chr1	4537921	rs12724503	G	A	310.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=60.00;MQ0=0;OQ=1523.81;QD=15.09;SB=-617.07	GT:AD:DP:GL:GQ	0/1:55,46:100:-185.79,-30.12,-188.53:99
-chr1	4538097	rs4654561	G	A	508.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=3756.30;QD=39.96;SB=-1777.79	GT:AD:DP:GL:GQ	1/1:0,92:93:-374.63,-34.91,-7.66:99
-chr1	4538181	rs4654562	G	A	215.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=59.13;MQ0=0;OQ=1260.80;QD=15.19;SB=-602.60	GT:AD:DP:GL:GQ	0/1:45,38:82:-154.08,-24.71,-143.05:99
-chr1	4538603	rs4654563	G	A	371.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1202.15;QD=16.03;SB=-528.76	GT:AD:DP:GL:GQ	0/1:39,36:74:-145.80,-22.30,-125.85:99
-chr1	4538973	rs7543382	T	C	333.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=59.17;MQ0=0;OQ=1070.40;QD=14.66;SB=-356.54	GT:AD:DP:GL:GQ	0/1:37,36:73:-132.31,-21.99,-147.75:99
-chr1	4539030	rs7540656	A	G	325.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.39;MQ0=0;OQ=796.84;QD=11.72;SB=-299.04	GT:AD:DP:GL:GQ	0/1:36,32:68:-103.46,-20.49,-144.09:99
-chr1	4540675	rs1963269	C	G	227.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.54;MQ0=0;OQ=1695.02;QD=16.62;SB=-763.36	GT:AD:DP:GL:GQ	0/1:55,47:97:-202.01,-29.22,-223.35:99
-chr1	4540762	rs1024139	T	C	542	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.15;MQ0=0;OQ=842.09;QD=11.70;SB=-437.91	GT:AD:DP:GL:GQ	0/1:42,30:72:-109.18,-21.69,-170.21:99
-chr1	4541602	rs241225	G	A	260.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.63;MQ0=0;OQ=2333.57;QD=37.04;SB=-1016.38	GT:AD:DP:GL:GQ	1/1:0,63:59:-236.96,-17.77,-0.01:99
-chr1	4541659	rs241224	G	T	284.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.28;MQ0=0;OQ=2085.58;QD=35.96;SB=-859.24	GT:AD:DP:GL:GQ	1/1:0,58:57:-212.16,-17.17,-0.02:99
-chr1	4541986	rs61765446	G	A	358.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=942.30;QD=14.28;SB=-483.10	GT:AD:DP:GL:GQ	0/1:37,29:65:-117.11,-19.59,-114.27:99
-chr1	4542017	rs241223	C	T	513.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2827.32;QD=39.82;SB=-1402.70	GT:AD:DP:GL:GQ	1/1:0,71:71:-286.34,-21.39,-0.02:99
-chr1	4542337	rs184781	C	T	269.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=2680.27;QD=40.00;SB=-1072.41	GT:AD:DP:GL:GQ	1/1:0,67:66:-271.63,-19.88,-0.01:99
-chr1	4542995	.	A	T	0.76	PASS	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=53.06;MQ0=0;OQ=196.97;QD=3.28;SB=-90.71	GT:AD:DP:GL:GQ	0/1:48,11:53:-38.95,-15.97,-156.27:99
-chr1	4543292	rs2078573	A	C	86.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=6.05;MQ=56.75;MQ0=0;OQ=1341.41;QD=16.77;SB=-537.82	GT:AD:DP:GL:GQ	0/1:31,48:77:-160.62,-23.19,-115.03:99
-chr1	4543548	rs515279	T	C	17.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.29;MQ0=0;OQ=1923.64;QD=29.59;SB=-45.69	GT:AD:DP:GL:GQ	1/1:0,65:64:-196.03,-19.32,-0.08:99
-chr1	4543717	rs587108	T	G	137.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=716.08;QD=34.10;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,21:21:-75.20,-6.33,-0.01:63.19
-chr1	4543945	rs588347	C	T	45.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=256.94;QD=10.71;SB=-10.00	GT:AD:DP:GL:GQ	0/1:15,9:24:-36.21,-7.23,-52.03:99
-chr1	4544067	rs588861	G	A	43.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=54.12;MQ0=0;OQ=1783.57;QD=37.95;SB=-560.73	GT:AD:DP:GL:GQ	1/1:0,47:45:-181.96,-13.56,-0.01:99
-chr1	4544173	rs488684	T	A	310.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.99;MQ0=0;OQ=2644.21;QD=36.73;SB=-1277.61	GT:AD:DP:GL:GQ	1/1:0,72:70:-268.02,-21.08,-0.01:99
-chr1	4545564	rs616180	T	G	115.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=58.74;MQ0=0;OQ=2469.47;QD=35.28;SB=-1055.12	GT:AD:DP:GL:GQ	1/1:0,70:69:-250.55,-20.78,-0.02:99
-chr1	4545738	rs617046	T	C	49.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1303.79;QD=31.80;SB=-288.55	GT:AD:DP:GL:GQ	1/1:0,41:40:-133.99,-12.05,-0.02:99
-chr1	4545788	rs57374319	C	T	229.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=594.52;QD=13.51;SB=-275.28	GT:AD:DP:GL:GQ	0/1:24,20:43:-75.69,-12.95,-87.49:99
-chr1	4545807	rs563158	G	C	408.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2250.93;QD=42.47;SB=-845.32	GT:AD:DP:GL:GQ	1/1:0,53:52:-228.70,-15.67,-0.02:99
-chr1	4545915	rs617610	A	G	103.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.73;MQ0=0;OQ=1514.17;QD=27.53;SB=-766.72	GT:AD:DP:GL:GQ	1/1:0,55:49:-155.05,-14.78,-0.05:99
-chr1	4545933	rs561468	C	A	155.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=1902.16;QD=32.24;SB=-898.65	GT:AD:DP:GL:GQ	1/1:0,59:54:-193.82,-16.27,-0.02:99
-chr1	4546125	rs538655	G	A	601.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=2022.14;QD=38.15;SB=-935.74	GT:AD:DP:GL:GQ	1/1:0,53:52:-205.82,-15.67,-0.02:99
-chr1	4546239	rs619364	G	A	445.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=837.24;QD=13.95;SB=-392.12	GT:AD:DP:GL:GQ	0/1:34,26:60:-105.08,-18.07,-121.77:99
-chr1	4546345	rs536749	A	G	482	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1853.11;QD=30.38;SB=-858.57	GT:AD:DP:GL:GQ	1/1:0,61:58:-188.95,-17.49,-0.05:99
-chr1	4546432	rs4654446	C	T	238.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=59.28;MQ0=0;OQ=947.38;QD=16.33;SB=-474.49	GT:AD:DP:GL:GQ	0/1:28,30:56:-114.89,-16.87,-97.02:99
-chr1	4546657	rs562787	A	G	229.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1701.20;QD=30.38;SB=-810.66	GT:AD:DP:GL:GQ	1/1:0,56:54:-173.76,-16.29,-0.05:99
-chr1	4546823	rs532259	C	T	169.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.40;MQ0=0;OQ=2521.38;QD=40.67;SB=-1140.51	GT:AD:DP:GL:GQ	1/1:0,62:62:-255.74,-18.67,-0.01:99
-chr1	4547018	rs559200	G	C	1813.47	Indel	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.18;MQ0=0;QD=40.30;SB=-734.75	GT:AD:DP:GL:GQ	1/1:0,44:43:-184.95,-12.96,-0.01:99
-chr1	4547035	rs6691728	C	T	1783.47	Indel	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.64;MQ0=0;QD=39.63;SB=-856.02	GT:AD:DP:GL:GQ	1/1:0,45:45:-181.94,-13.55,-0.01:99
-chr1	4547069	rs558411	G	C	0.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=0.63;MQ=58.20;MQ0=0;OQ=1617.71;QD=41.48;SB=-687.82	GT:AD:DP:GL:GQ	1/1:0,39:38:-165.37,-11.45,-0.01:99
-chr1	4547307	rs634075	C	T	118.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=59.44;MQ0=0;OQ=1786.25;QD=34.35;SB=-705.43	GT:AD:DP:GL:GQ	1/1:0,51:47:-182.23,-14.17,-0.02:99
-chr1	4547329	rs644647	C	A	608.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1779.42;QD=34.89;SB=-902.65	GT:AD:DP:GL:GQ	1/1:0,51:50:-181.54,-15.06,-0.02:99
-chr1	4547506	rs2674014	C	T	604.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=3048.33;QD=39.08;SB=-1465.48	GT:AD:DP:GL:GQ	1/1:0,78:77:-308.44,-23.20,-0.02:99
-chr1	4548034	rs669252	A	G	36.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.78;MQ0=0;OQ=2568.64;QD=30.58;SB=-1254.84	GT:AD:DP:GL:GQ	1/1:0,84:80:-260.52,-24.13,-0.08:99
-chr1	4548229	rs527146	C	T	195.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.54;MQ0=0;OQ=2361.57;QD=37.49;SB=-975.04	GT:AD:DP:GL:GQ	1/1:2,61:63:-246.39,-18.98,-6.65:99
-chr1	4548230	rs553803	A	G	202.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.54;MQ0=0;OQ=2093.62;QD=33.23;SB=-906.61	GT:AD:DP:GL:GQ	1/1:2,61:63:-221.00,-18.97,-8.05:99
-chr1	4548433	rs504274	C	T	6.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=4;HaplotypeScore=2.30;MQ=59.56;MQ0=0;OQ=3385.81;QD=39.83;SB=-1431.01	GT:AD:DP:GL:GQ	1/1:0,85:84:-337.58,-25.30,-0.02:99
-chr1	4548537	rs916404	A	G	176.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=59.60;MQ0=0;OQ=1563.60;QD=27.43;SB=-730.94	GT:AD:DP:GL:GQ	1/1:0,57:51:-160.00,-15.38,-0.05:99
-chr1	4548552	rs1811133	G	A	623.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2054.70;QD=38.77;SB=-776.53	GT:AD:DP:GL:GQ	1/1:0,53:52:-209.07,-15.66,-0.01:99
-chr1	4548640	rs10915566	C	T	338.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=59.67;MQ0=0;OQ=1058.12;QD=15.12;SB=-552.39	GT:AD:DP:GL:GQ	0/1:37,33:67:-129.29,-20.20,-113.66:99
-chr1	4548685	rs2176113	C	T	467.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1206.49;QD=16.76;SB=-424.43	GT:AD:DP:GL:GQ	0/1:37,35:72:-145.62,-21.68,-138.53:99
-chr1	4548689	rs549918	C	T	547.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2745.70;QD=39.22;SB=-872.18	GT:AD:DP:GL:GQ	1/1:0,70:69:-278.17,-20.79,-0.02:99
-chr1	4548722	rs549150	C	T	597.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=3119.07;QD=40.51;SB=-1266.19	GT:AD:DP:GL:GQ	1/1:0,77:77:-315.51,-23.19,-0.01:99
-chr1	4548785	rs548958	A	C	587.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=3225.28;QD=33.25;SB=-1553.11	GT:AD:DP:GL:GQ	1/1:0,97:93:-326.16,-28.01,-0.03:99
-chr1	4548901	rs683704	G	A	493.67	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2363.22;QD=39.39;SB=-1015.37	GT:AD:DP:GL:GQ	1/1:0,60:60:-239.92,-18.08,-0.02:99
-chr1	4549335	rs572875	G	A	610.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.57;MQ0=0;OQ=2583.49;QD=39.75;SB=-1223.62	GT:AD:DP:GL:GQ	1/1:0,65:64:-261.95,-19.28,-0.01:99
-chr1	4549598	rs520532	C	T	634.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=1;OQ=2560.49;QD=37.65;SB=-1198.62	GT:AD:DP:GL:GQ	1/1:0,68:66:-259.66,-19.89,-0.02:99
-chr1	4550061	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=20;HaplotypeScore=23.52;MQ=43.78;MQ0=0;OQ=658.49;QD=6.86;SB=83.26	GT:AD:DP:GL:GQ	0/1:53,43:71:-90.53,-21.40,-163.68:99
-chr1	4550163	rs189538	T	C	1.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=4.99;MQ=53.64;MQ0=0;OQ=1059.98;QD=26.50;SB=-540.85	GT:AD:DP:GL:GQ	1/1:0,40:35:-109.62,-10.56,-0.04:99
-chr1	4550501	rs10915567	A	T	204.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.86;MQ0=0;OQ=971.67;QD=17.35;SB=-337.66	GT:AD:DP:GL:GQ	0/1:25,31:54:-116.71,-16.26,-86.04:99
-chr1	4550640	rs241213	G	A	356.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2857.67;QD=40.25;SB=-1367.83	GT:AD:DP:GL:GQ	1/1:0,71:71:-289.37,-21.39,-0.02:99
-chr1	4550851	rs164775	A	G	34.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.34;MQ=59.24;MQ0=0;OQ=775.11;QD=14.09;SB=-373.36	GT:AD:DP:GL:GQ	0/1:28,27:55:-97.36,-16.57,-110.68:99
-chr1	4551064	rs12079284	G	A	324.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=59.55;MQ0=0;OQ=1490.67;QD=17.96;SB=-575.98	GT:AD:DP:GL:GQ	0/1:39,44:83:-177.35,-25.00,-139.24:99
-chr1	4551090	rs164774	A	C	75.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.47;MQ0=0;OQ=2365.79;QD=33.80;SB=-1092.51	GT:AD:DP:GL:GQ	1/1:0,70:67:-240.18,-20.18,-0.02:99
-chr1	4551865	rs10489134	G	C	328.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.44;MQ0=0;OQ=1198.12;QD=16.19;SB=-348.77	GT:AD:DP:GL:GQ	0/1:36,38:72:-144.81,-21.71,-156.52:99
-chr1	4552887	rs7554766	G	A	776.54	Indel	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;QD=12.13;SB=-327.33	GT:AD:DP:GL:GQ	0/1:39,25:57:-98.11,-17.17,-116.23:99
-chr1	4552953	rs7518655	C	T	177.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.86;MQ=58.99;MQ0=0;OQ=677.30;QD=14.72;SB=-320.35	GT:AD:DP:GL:GQ	0/1:23,23:43:-83.97,-12.96,-72.15:99
-chr1	4553124	rs7518781	C	A	341.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.31;MQ0=0;OQ=849.36;QD=13.92;SB=-331.16	GT:AD:DP:GL:GQ	0/1:30,31:56:-105.09,-16.87,-90.31:99
-chr1	4553830	rs164770	A	G	0.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=7.02;MQ=59.30;MQ0=0;OQ=1972.78;QD=32.88;SB=-746.94	GT:AD:DP:GL:GQ	1/1:2,57:55:-200.88,-16.57,-0.02:99
-chr1	4554084	rs61767667	T	A	362.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=502.84;QD=10.48;SB=-173.16	GT:AD:DP:GL:GQ	0/1:30,18:48:-68.02,-14.46,-113.49:99
-chr1	4554189	rs61767668	G	A	492.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=958.92;QD=14.31;SB=-387.15	GT:AD:DP:GL:GQ	0/1:38,29:66:-119.06,-19.89,-123.05:99
-chr1	4555833	rs540572	C	A	391.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=602.48;QD=12.30;SB=-99.63	GT:AD:DP:GL:GQ	0/1:24,25:46:-77.39,-13.85,-83.99:99
-chr1	4556007	rs6426423	C	A	388.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.29;MQ0=0;OQ=809.24;QD=15.27;SB=-378.16	GT:AD:DP:GL:GQ	0/1:24,29:51:-99.57,-15.36,-78.05:99
-chr1	4556396	rs531363	C	T	270.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=785.64;QD=14.03;SB=-358.40	GT:AD:DP:GL:GQ	0/1:30,26:54:-98.13,-16.29,-91.52:99
-chr1	4556558	rs129794	G	A	506.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=510.17;QD=11.09;SB=-262.22	GT:AD:DP:GL:GQ	0/1:29,17:46:-68.16,-13.86,-103.52:99
-chr1	4556721	rs10799248	G	A	151.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=483.34;QD=15.10;SB=-178.66	GT:AD:DP:GL:GQ	0/1:17,15:30:-60.66,-9.04,-48.95:99
-chr1	4556909	rs526695	T	C	306.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=58.98;MQ0=0;OQ=2857.53;QD=34.85;SB=-1208.70	GT:AD:DP:GL:GQ	1/1:0,82:80:-289.36,-24.10,-0.02:99
-chr1	4556982	rs516947	G	A	448.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=2681.00;QD=38.86;SB=-634.83	GT:AD:DP:GL:GQ	1/1:0,69:67:-271.71,-20.19,-0.02:99
-chr1	4556992	rs516977	A	G	448.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1828.72;QD=29.03;SB=-545.85	GT:AD:DP:GL:GQ	1/1:0,63:60:-186.53,-18.11,-0.07:99
-chr1	4557030	rs517092	A	C	349.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1428.85;QD=26.46;SB=-498.86	GT:AD:DP:GL:GQ	1/1:0,54:46:-146.51,-13.87,-0.04:99
-chr1	4557056	rs524982	C	T	158.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.64;MQ0=0;OQ=2000.95;QD=38.48;SB=-916.28	GT:AD:DP:GL:GQ	1/1:0,52:51:-203.70,-15.37,-0.02:99
-chr1	4557155	rs651695	A	T	85.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=2.39;MQ=59.42;MQ0=0;OQ=1262.50;QD=15.98;SB=-615.05	GT:AD:DP:GL:GQ	0/1:40,39:78:-153.02,-23.49,-149.00:99
-chr1	4557694	rs653988	C	T	110.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.82;MQ0=0;OQ=2793.65;QD=39.91;SB=-1109.49	GT:AD:DP:GL:GQ	1/1:0,70:70:-282.97,-21.09,-0.02:99
-chr1	4558171	rs549239	T	C	727.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.17;MQ0=0;OQ=2944.97;QD=35.06;SB=-1221.82	GT:AD:DP:GL:GQ	1/1:0,84:83:-298.11,-25.00,-0.03:99
-chr1	4558199	rs12726702	T	A	2233	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=6;HaplotypeScore=61.64;MQ=53.38;MQ0=0;QD=26.58;SB=-718.98	GT:AD:DP:GL:GQ	0/1:14,70:81:-250.99,-24.40,-50.82:99
-chr1	4558206	rs549087	T	A	2870.37	Indel;SnpCluster	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.01;HRun=6;HaplotypeScore=46.58;MQ=52.93;MQ0=0;QD=35.88;SB=-1138.04	GT:AD:DP:GL:GQ	1/1:0,79:79:-290.65,-23.50,-0.03:99
-chr1	4558209	rs28687799	A	T	819.27	Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=4;HaplotypeScore=29.81;MQ=52.84;MQ0=0;QD=10.37;SB=-175.59	GT:AD:DP:GL:GQ	0/1:49,30:77:-108.41,-23.20,-171.08:99
-chr1	4558214	rs59930628	A	T	84.16	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.03;HRun=4;HaplotypeScore=38.67;MQ=53.63;MQ0=0;QD=1.09;SB=56.66	GT:AD:DP:GL:GQ	0/1:66,9:73:-33.09,-21.39,-235.05:99
-chr1	4558250	rs666799	A	C	496.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.14;MQ0=0;OQ=2047.56;QD=34.70;SB=-847.08	GT:AD:DP:GL:GQ	1/1:0,59:58:-208.36,-17.47,-0.02:99
-chr1	4558398	rs12567277	C	T	337.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.53;MQ0=0;OQ=912.06;QD=18.61;SB=-436.84	GT:AD:DP:GL:GQ	0/1:22,27:48:-108.95,-14.46,-68.62:99
-chr1	4558676	rs553691	C	T	200.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.21;MQ0=0;OQ=1974.68;QD=37.26;SB=-1009.66	GT:AD:DP:GL:GQ	1/1:0,53:52:-201.08,-15.67,-0.02:99
-chr1	4560412	rs589176	A	G	118.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=58.87;MQ0=0;OQ=545.72;QD=13.31;SB=-145.53	GT:AD:DP:GL:GQ	0/1:20,21:40:-69.91,-12.06,-74.33:99
-chr1	4561004	rs602244	T	C	195.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=59.64;MQ0=0;OQ=1077.64;QD=16.84;SB=-452.16	GT:AD:DP:GL:GQ	0/1:26,38:63:-130.03,-18.98,-104.11:99
-chr1	4561499	rs604465	G	A	250.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.13;MQ0=0;OQ=735.55;QD=15.32;SB=-280.30	GT:AD:DP:GL:GQ	0/1:25,23:45:-90.40,-13.56,-80.37:99
-chr1	4561737	rs563481	C	T	22.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=747.56;QD=17.80;SB=-287.30	GT:AD:DP:GL:GQ	0/1:20,22:42:-90.69,-12.65,-73.13:99
-chr1	4562268	rs537761	C	A	317.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=820.87;QD=16.75;SB=-394.13	GT:AD:DP:GL:GQ	0/1:21,28:48:-99.83,-14.46,-74.67:99
-chr1	4562392	rs618751	G	A	349.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=60.00;MQ0=0;OQ=1032.44;QD=14.14;SB=-366.34	GT:AD:DP:GL:GQ	0/1:41,32:73:-128.52,-21.99,-148.49:99
-chr1	4562641	rs534159	C	T	355.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=808.69;QD=13.71;SB=-376.39	GT:AD:DP:GL:GQ	0/1:33,26:58:-101.65,-17.50,-100.37:99
-chr1	4565129	rs241243	A	G	370.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=694.01;QD=8.07;SB=-138.39	GT:AD:DP:GL:GQ	0/1:53,33:82:-97.39,-24.71,-212.58:99
-chr1	4565904	rs10915569	C	A	242.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.39;MQ0=0;OQ=1490.43;QD=19.61;SB=-754.94	GT:AD:DP:GL:GQ	0/1:27,49:74:-174.61,-22.29,-94.95:99
-chr1	4566354	rs164780	C	G	240.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=59.64;MQ0=0;OQ=2456.30;QD=38.38;SB=-1204.26	GT:AD:DP:GL:GQ	1/1:0,64:63:-249.27,-19.01,-0.05:99
-chr1	4566679	rs151716	A	G	365.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.43;MQ0=0;OQ=771.72;QD=11.87;SB=-373.98	GT:AD:DP:GL:GQ	0/1:33,32:64:-99.75,-19.29,-131.65:99
-chr1	4567238	rs4654450	G	A	244.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=59.42;MQ0=0;OQ=1219.09;QD=16.93;SB=-598.62	GT:AD:DP:GL:GQ	0/1:35,37:71:-146.59,-21.39,-121.89:99
-chr1	4567954	rs151715	A	G	136	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.44;MQ0=0;OQ=821.52;QD=10.95;SB=-417.84	GT:AD:DP:GL:GQ	0/1:41,34:74:-107.74,-22.30,-168.10:99
-chr1	4568017	rs241242	G	T	115.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=60.00;MQ0=0;OQ=1682.11;QD=33.64;SB=-638.02	GT:AD:DP:GL:GQ	1/1:0,49:48:-171.82,-14.46,-0.02:99
-chr1	4568283	rs11590266	A	G	358.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=59.56;MQ0=0;OQ=565.36;QD=10.87;SB=-241.59	GT:AD:DP:GL:GQ	0/1:27,24:51:-77.60,-17.78,-112.88:99
-chr1	4571271	rs164779	C	G	314.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.44;MQ0=0;OQ=1283.51;QD=17.11;SB=-664.28	GT:AD:DP:GL:GQ	0/1:38,37:72:-153.33,-21.69,-161.13:99
-chr1	4571572	.	C	T	90.66	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.56;MQ0=0;OQ=626.01;QD=12.04;SB=-331.33	GT:AD:DP:GL:GQ	0/1:32,20:47:-80.06,-14.17,-86.19:99
-chr1	4572354	rs164778	T	C	225.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1559.84;QD=35.45;SB=-660.32	GT:AD:DP:GL:GQ	1/1:0,44:44:-159.58,-13.25,-0.01:99
-chr1	4572615	rs6703429	T	C	577.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=862.43;QD=13.07;SB=-402.26	GT:AD:DP:GL:GQ	0/1:35,31:65:-109.11,-19.58,-142.67:99
-chr1	4574299	.	C	A	554.66	Indel	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.59;MQ0=0;QD=10.47;SB=-260.28	GT:AD:DP:GL:GQ	0/1:31,22:48:-73.21,-14.46,-96.27:99
-chr1	4576029	rs164776	C	T	259.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.56;MQ0=0;OQ=893.05;QD=17.17;SB=-421.82	GT:AD:DP:GL:GQ	0/1:24,28:50:-107.66,-15.07,-72.44:99
-chr1	4576797	rs2411886	G	C	186.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=59.03;MQ0=0;OQ=1978.62;QD=41.22;SB=-1006.27	GT:AD:DP:GL:GQ	1/1:0,47:46:-201.46,-13.86,-0.01:99
-chr1	4576947	rs2411887	C	T	275.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.35;MQ0=0;OQ=1931.75;QD=37.88;SB=-945.28	GT:AD:DP:GL:GQ	1/1:0,51:50:-196.78,-15.07,-0.02:99
-chr1	4577395	rs4403602	C	G	245.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.46;MQ0=0;OQ=1536.03;QD=35.72;SB=-775.22	GT:AD:DP:GL:GQ	1/1:0,43:41:-157.23,-12.38,-0.05:99
-chr1	4577589	rs7554628	T	C	1.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=57.95;MQ0=0;OQ=730.12;QD=22.82;SB=-185.76	GT:AD:DP:GL:GQ	1/1:0,31:25:-79.87,-10.17,-3.27:69.05
-chr1	4577983	rs7555011	T	C	161.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.09;MQ0=0;OQ=1457.56;QD=28.58;SB=-435.18	GT:AD:DP:GL:GQ	1/1:0,51:47:-149.39,-14.18,-0.05:99
-chr1	4578231	rs35259920	T	A	832.15	Indel	AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;QD=28.69;SB=-10.00	GT:AD:DP:GL:GQ	1/1:1,28:26:-86.82,-7.84,-0.02:78.19
-chr1	4578361	rs7554792	A	C	303.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.92;MQ0=0;OQ=236.46;QD=26.27;SB=-138.00	GT:AD:DP:GL:GQ	1/1:0,9:8:-27.23,-2.41,-0.00:24.06
-chr1	4578400	.	A	T	84.19	Indel	AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=46.65;MQ0=0;QD=6.01;SB=-42.96	GT:AD:DP:GL:GQ	0/1:10,4:13:-15.62,-3.92,-34.97:99
-chr1	4579811	rs1905304	C	A	19.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=58.10;MQ0=0;OQ=2321.72;QD=36.28;SB=-1110.43	GT:AD:DP:GL:GQ	1/1:0,64:63:-235.77,-18.97,-0.01:99
-chr1	4580559	rs56945522	G	A	92.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=61.48;MQ0=0;OQ=2293.20;QD=38.87;SB=-907.71	GT:AD:DP:GL:GQ	1/1:0,59:58:-232.92,-17.48,-0.02:99
-chr1	4581964	rs6668002	T	C	241.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=2274.26;QD=30.73;SB=-1092.12	GT:AD:DP:GL:GQ	1/1:0,73:71:-231.07,-21.41,-0.06:99
-chr1	4583570	rs1573748	A	G	1957.91	Indel	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.66;MQ=60.10;MQ0=0;QD=31.08;SB=-816.28	GT:AD:DP:GL:GQ	1/1:0,63:58:-199.41,-17.48,-0.04:99
-chr1	4584109	rs6657421	G	A	130.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.13;MQ0=0;OQ=1834.09;QD=38.21;SB=-703.35	GT:AD:DP:GL:GQ	1/1:0,48:47:-187.01,-14.16,-0.01:99
-chr1	4584165	rs6674936	T	C	66.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=59.25;MQ0=0;OQ=1819.57;QD=32.49;SB=-925.04	GT:AD:DP:GL:GQ	1/1:0,56:51:-185.56,-15.36,-0.01:99
-chr1	4585082	rs1107467	G	A	137.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1423.05;QD=35.58;SB=-452.60	GT:AD:DP:GL:GQ	1/1:0,39:38:-145.91,-11.45,-0.02:99
-chr1	4585332	rs1483199	A	G	386.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2234.69;QD=31.04;SB=-675.88	GT:AD:DP:GL:GQ	1/1:0,72:67:-227.10,-20.19,-0.04:99
-chr1	4585508	rs875808	G	A	162.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.39;MQ=60.00;MQ0=0;OQ=2216.84;QD=38.89;SB=-1106.64	GT:AD:DP:GL:GQ	1/1:0,57:57:-225.29,-17.17,-0.02:99
-chr1	4585532	rs875807	A	G	300.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.66;MQ0=0;OQ=1870.43;QD=34.01;SB=-960.39	GT:AD:DP:GL:GQ	1/1:0,55:53:-190.65,-15.97,-0.02:99
-chr1	4585731	rs875806	G	C	165.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2133.21;QD=42.66;SB=-847.32	GT:AD:DP:GL:GQ	1/1:0,50:49:-216.92,-14.76,-0.01:99
-chr1	4586501	rs56028718	G	A	84.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.59;MQ0=0;OQ=1260.05;QD=18.53;SB=-634.67	GT:AD:DP:GL:GQ	0/1:31,37:66:-149.17,-19.88,-106.57:99
-chr1	4587142	rs2269620	C	T	114.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.59;MQ0=0;OQ=2196.52;QD=39.22;SB=-630.34	GT:AD:DP:GL:GQ	1/1:0,56:56:-223.26,-16.87,-0.02:99
-chr1	4587674	rs4654576	A	C	214.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=886.13;QD=32.82;SB=-420.04	GT:AD:DP:GL:GQ	1/1:0,27:26:-92.21,-7.83,-0.01:78.22
-chr1	4587807	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=2;HaplotypeScore=15.00;MQ=58.93;MQ0=0;OQ=113.78;QD=1.87;SB=74.25	GT:AD:DP:GL:GQ	0/1:34,27:42:-27.32,-12.66,-112.79:99
-chr1	4587893	rs6662425	C	G	115.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.36;MQ0=0;OQ=2651.42;QD=40.79;SB=-1007.19	GT:AD:DP:GL:GQ	1/1:0,65:61:-268.75,-18.38,-0.02:99
-chr1	4588021	rs6426430	G	T	639.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1436.10;QD=35.90;SB=-672.10	GT:AD:DP:GL:GQ	1/1:0,40:40:-147.21,-12.05,-0.01:99
-chr1	4590753	rs7527078	C	T	465.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.20;MQ0=0;OQ=2043.97;QD=40.08;SB=-576.76	GT:AD:DP:GL:GQ	1/1:0,51:50:-207.99,-15.06,-0.01:99
-chr1	4591042	rs4654577	A	G	251.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=58.37;MQ0=0;OQ=1466.76;QD=34.11;SB=-679.59	GT:AD:DP:GL:GQ	1/1:0,43:43:-150.28,-12.96,-0.02:99
-chr1	4592515	.	G	C	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=48.08;MQ0=6;OQ=54.55;QD=1.03;SB=38.38	GT:AD:DP:GL:GQ	0/1:45,8:39:-20.50,-11.76,-139.98:87.39
-chr1	4592571	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=14.42;MQ=41.26;MQ0=11;OQ=65.05;QD=1.07;SB=-23.62	GT:AD:DP:GL:GQ	0/1:49,12:36:-20.65,-10.86,-123.87:97.89
-chr1	4592585	.	G	C	20.06	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.14;MQ=40.25;MQ0=10;QD=0.33;SB=-5.33	GT:AD:DP:GL:GQ	0/1:54,7:37:-16.45,-11.17,-134.84:52.86
-chr1	4592620	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=15.36;MQ=35.46;MQ0=10;OQ=92.00;QD=1.46;SB=0.26	GT:AD:DP:GL:GQ	0/1:54,9:42:-25.15,-12.66,-150.31:99
-chr1	4592627	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=16.06;MQ=35.72;MQ0=7;OQ=153.87;QD=2.75;SB=-54.16	GT:AD:DP:GL:GQ	0/1:46,10:37:-29.82,-11.15,-128.78:99
-chr1	4592634	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=17.36;MQ=35.58;MQ0=7;OQ=255.85;QD=4.57;SB=-124.48	GT:AD:DP:GL:GQ	0/1:41,15:33:-38.82,-9.95,-100.95:99
-chr1	4592642	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=28.60;MQ=35.10;MQ0=5;OQ=106.45;QD=2.01;SB=3.57	GT:AD:DP:GL:GQ	0/1:41,12:38:-25.38,-11.45,-106.45:99
-chr1	4592649	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=27.47;MQ=35.61;MQ0=5;OQ=241.86;QD=4.65;SB=-127.53	GT:AD:DP:GL:GQ	0/1:36,16:37:-38.62,-11.15,-91.45:99
-chr1	4592656	.	C	A	10.05	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=32.68;MQ=34.61;MQ0=6;QD=0.18;SB=-22.79	GT:AD:DP:GL:GQ	0/1:46,10:31:-13.58,-9.34,-92.74:42.43
-chr1	4592670	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=26.44;MQ=31.55;MQ0=8;OQ=92.67;QD=1.54;SB=-36.78	GT:AD:DP:GL:GQ	0/1:47,13:38:-24.00,-11.45,-105.70:99
-chr1	4592691	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=17.99;MQ=28.93;MQ0=15;OQ=182.04;QD=2.64;SB=-62.36	GT:AD:DP:GL:GQ	0/1:58,11:38:-32.95,-11.46,-95.16:99
-chr1	4592711	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=17.40;MQ=30.26;MQ0=13;OQ=418.56;QD=8.21;SB=-184.24	GT:AD:DP:GL:GQ	0/1:21,29:22:-51.78,-6.64,-35.47:99
-chr1	4592725	rs7533445	C	G	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=21.58;MQ=31.66;MQ0=7;OQ=325.36;QD=9.30;SB=-162.82	GT:AD:DP:GL:GQ	0/1:18,17:13:-39.75,-3.93,-11.50:75.69
-chr1	4592733	.	C	A	17.31	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=13.87;MQ=30.28;MQ0=8;QD=0.56;SB=5.02	GT:AD:DP:GL:GQ	0/1:27,3:12:-8.63,-3.62,-27.94:50.06
-chr1	4592740	rs7537972	A	C	0.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=10.05;MQ=27.67;MQ0=11;OQ=104.80;QD=3.38;SB=-67.99	GT:AD:DP:GL:GQ	0/1:22,9:8:-16.18,-2.41,-9.32:69.09
-chr1	4592747	rs7537975	A	C	18.33	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=8.21;MQ=28.35;MQ0=11;QD=0.76;SB=-7.00	GT:AD:DP:GL:GQ	0/1:17,7:4:-6.32,-1.21,-6.24:50.29
-chr1	4592767	rs7533530	C	G	42.27	HARD_TO_VALIDATE;LowQual	AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=11.04;MQ=30.06;MQ0=7;QD=3.02;SB=-43.89	GT:AD:DP:GL:GQ	1/1:8,5:2:-7.64,-0.61,-0.00:6.02
-chr1	4592837	.	C	G	13.29	LowQual	AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=1;HaplotypeScore=4.96;MQ=12.04;MQ0=3;QD=2.66;SB=-10.00	GT:AD:DP:GL:GQ	0/1:4,1:1:-4.59,-0.30,-0.00:1.76
-chr1	4592901	.	T	C	5.07	PASS	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=42.32;MQ0=2;OQ=126.93;QD=6.35;SB=-77.93	GT:AD:DP:GL:GQ	0/1:9,11:15:-20.50,-4.52,-36.40:99
-chr1	4592906	.	T	C	0.11	PASS	AC=2;AF=1.00;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=41.84;MQ0=3;OQ=578.85;QD=25.17;SB=-157.83	GT:AD:DP:GL:GQ	1/1:0,23:17:-61.47,-5.12,-0.00:51.15
-chr1	4592960	.	G	C	0.12	PASS	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=41.92;MQ0=6;OQ=217.66;QD=2.79;SB=-81.57	GT:AD:DP:GL:GQ	0/1:56,22:47:-39.23,-14.18,-153.65:99
-chr1	4592971	.	T	C	18.17	PASS	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=41.63;MQ0=7;OQ=666.60;QD=8.55;SB=-228.49	GT:AD:DP:GL:GQ	0/1:28,48:45:-83.52,-13.57,-69.37:99
-chr1	4592996	.	A	C	48.48	HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=40.87;MQ0=9;QD=0.70;SB=-26.49	GT:AD:DP:GL:GQ	0/1:54,15:47:-22.29,-14.16,-139.10:81.32
-chr1	4593024	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=14.22;MQ=41.13;MQ0=10;OQ=73.34;QD=1.41;SB=-39.79	GT:AD:DP:GL:GQ	0/1:35,17:30:-19.66,-9.04,-83.95:99
-chr1	4593037	.	G	C	11.64	DPFilter;HARD_TO_VALIDATE;LowQual	AC=1;AF=0.50;AN=2;DP=41;Dels=0.02;HRun=0;HaplotypeScore=21.01;MQ=42.10;MQ0=8;QD=0.28;SB=26.12	GT:AD:DP:GL:GQ	0/1:33,7:20:-10.45,-6.03,-72.33:44.16
-chr1	4593066	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=16.64;MQ=38.83;MQ0=9;OQ=95.97;QD=2.23;SB=-64.04	GT:AD:DP:GL:GQ	0/1:31,12:22:-19.51,-6.63,-53.44:99
-chr1	4593072	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=12.35;MQ=36.60;MQ0=11;OQ=58.68;QD=1.25;SB=-50.80	GT:AD:DP:GL:GQ	0/1:40,7:24:-16.40,-7.25,-78.79:91.52
-chr1	4593128	.	G	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=42.60;MQ0=10;OQ=87.22;QD=1.86;SB=11.06	GT:AD:DP:GL:GQ	0/1:39,8:24:-19.25,-7.24,-80.14:99
-chr1	4593184	.	G	C	48.23	LowQual	AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=50.03;MQ0=1;QD=1.51;SB=-24.84	GT:AD:DP:GL:GQ	0/1:27,5:22:-14.75,-6.64,-72.91:81.07
-chr1	4593205	.	G	C	35.18	LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.11;MQ=47.39;MQ0=4;QD=0.88;SB=-15.82	GT:AD:DP:GL:GQ	0/1:35,5:30:-15.86,-9.06,-106.35:68.02
-chr1	4593241	rs12752874	A	C	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=43.47;MQ0=5;OQ=55.07;QD=1.28;SB=-27.98	GT:AD:DP:GL:GQ	0/1:30,13:26:-16.62,-7.83,-74.90:87.90
-chr1	4594330	rs34642555	G	A	223.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.30;MQ=59.56;MQ0=0;OQ=741.34;QD=13.99;SB=-378.39	GT:AD:DP:GL:GQ	0/1:29,24:52:-93.10,-15.68,-88.17:99
-chr1	4599106	rs10753383	T	G	347.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.01;MQ0=0;OQ=412.58;QD=12.50;SB=-151.92	GT:AD:DP:GL:GQ	0/1:17,16:32:-54.18,-9.64,-62.40:99
-chr1	4599463	rs7513957	G	C	46.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=1.18;MQ=57.56;MQ0=0;OQ=399.60;QD=12.11;SB=-196.33	GT:AD:DP:GL:GQ	0/1:20,13:31:-52.60,-9.35,-73.06:99
-chr1	4600658	rs12122002	G	A	36.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=2.74;MQ=58.47;MQ0=0;OQ=1298.26;QD=21.28;SB=-656.75	GT:AD:DP:GL:GQ	0/1:24,37:59:-150.88,-17.77,-80.26:99
-chr1	4601609	rs55711858	A	G	373.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=1068.23;QD=10.68;SB=-465.77	GT:AD:DP:GL:GQ	0/1:56,44:100:-140.25,-30.14,-225.51:99
-chr1	4601750	rs2411891	G	A	156.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1085.67;QD=16.96;SB=-561.13	GT:AD:DP:GL:GQ	0/1:31,33:63:-130.83,-18.98,-106.71:99
-chr1	4602156	rs61764994	A	G	74.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=60.00;MQ0=0;OQ=509.21;QD=7.60;SB=-244.13	GT:AD:DP:GL:GQ	0/1:40,27:63:-73.19,-18.99,-161.05:99
-chr1	4602810	rs61764995	C	T	382.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=850.22;QD=17.35;SB=-339.44	GT:AD:DP:GL:GQ	0/1:22,27:48:-102.77,-14.46,-79.78:99
-chr1	4602966	rs34993795	C	T	235.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=59.03;MQ0=0;OQ=1118.32;QD=16.69;SB=-465.43	GT:AD:DP:GL:GQ	0/1:34,33:66:-135.00,-19.88,-119.08:99
-chr1	4604462	rs2035452	C	G	271.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=397.56;QD=15.29;SB=-96.30	GT:AD:DP:GL:GQ	0/1:14,12:25:-50.58,-7.54,-52.60:99
-chr1	4606381	rs10915576	T	C	220.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=882.56;QD=16.97;SB=-410.32	GT:AD:DP:GL:GQ	0/1:21,31:51:-106.90,-15.36,-86.72:99
-chr1	4606615	rs12125737	C	T	418.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.71;MQ0=0;OQ=1209.07;QD=18.60;SB=-598.14	GT:AD:DP:GL:GQ	0/1:29,36:62:-142.87,-18.68,-88.99:99
-chr1	4607135	rs12122921	G	A	2.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=10.90;MQ=57.40;MQ0=0;OQ=881.42;QD=13.16;SB=-408.91	GT:AD:DP:GL:GQ	0/1:36,31:56:-108.31,-16.88,-93.30:99
-chr1	4607451	rs28759408	G	T	57.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=5.28;MQ=57.88;MQ0=1;OQ=710.71;QD=10.45;SB=-279.36	GT:AD:DP:GL:GQ	0/1:39,29:61:-92.73,-18.38,-123.60:99
-chr1	4608914	rs7535194	C	A	224.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=57.78;MQ0=0;OQ=1544.72;QD=16.26;SB=-662.45	GT:AD:DP:GL:GQ	0/1:44,51:95:-186.37,-28.61,-160.23:99
-chr1	4609123	.	C	T	10.31	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=56.96;MQ0=2;QD=0.17;SB=19.65	GT:AD:DP:GL:GQ	0/1:53,6:55:-20.84,-16.57,-182.90:42.72
-chr1	4609208	rs7539862	A	C	150.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=258.18;QD=5.87;SB=-149.80	GT:AD:DP:GL:GQ	0/1:32,12:43:-42.05,-12.95,-117.22:99
-chr1	4609234	.	G	A	18.35	LowQual	AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.99;MQ=56.87;MQ0=1;QD=0.46;SB=-22.94	GT:AD:DP:GL:GQ	0/1:35,5:36:-15.96,-10.84,-114.15:51.13
-chr1	4609248	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=35.67;MQ=56.49;MQ0=1;OQ=135.28;QD=2.42;SB=50.20	GT:AD:DP:GL:GQ	0/1:46,10:51:-32.18,-15.36,-170.39:99
-chr1	4609249	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=97.70;MQ=56.55;MQ0=1;OQ=82.36;QD=1.44;SB=50.16	GT:AD:DP:GL:GQ	0/1:47,10:52:-27.18,-15.66,-163.18:99
-chr1	4609260	rs61764999	C	T	6.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=5.81;MQ=56.56;MQ0=1;OQ=641.66;QD=10.03;SB=-130.56	GT:AD:DP:GL:GQ	0/1:42,22:63:-86.43,-18.98,-148.93:99
-chr1	4609527	rs4654581	C	G	33.46	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=59.43;MQ0=0;QD=0.67;SB=28.36	GT:AD:DP:GL:GQ	0/1:45,5:49:-21.39,-14.76,-192.44:66.29
-chr1	4610341	rs10799250	T	C	191.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.62;MQ0=0;OQ=886.46;QD=10.43;SB=-400.18	GT:AD:DP:GL:GQ	0/1:51,34:83:-116.93,-25.00,-199.77:99
-chr1	4610346	rs10915577	A	G	286.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.62;MQ0=0;OQ=927.42;QD=11.04;SB=-372.61	GT:AD:DP:GL:GQ	0/1:50,34:82:-120.73,-24.70,-201.64:99
-chr1	4611161	rs12405862	C	T	55.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.70;MQ=59.65;MQ0=0;OQ=705.61;QD=13.31;SB=-372.08	GT:AD:DP:GL:GQ	0/1:30,23:53:-89.81,-15.97,-107.55:99
-chr1	4612905	rs1466520	A	G	508.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=1092.36;QD=32.13;SB=-567.90	GT:AD:DP:GL:GQ	1/1:0,34:32:-112.83,-9.64,-0.01:96.28
-chr1	4613357	rs4144451	T	C	2.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=378.96;QD=8.81;SB=-197.21	GT:AD:DP:GL:GQ	0/1:27,16:40:-53.24,-12.06,-95.58:99
-chr1	4616788	rs12127797	G	C	214.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.57;MQ=59.39;MQ0=0;OQ=1251.84;QD=16.47;SB=-458.74	GT:AD:DP:GL:GQ	0/1:41,34:72:-150.17,-21.70,-159.82:99
-chr1	4619890	rs7544371	G	A	283.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=1234.26;QD=22.04;SB=-596.70	GT:AD:DP:GL:GQ	0/1:21,35:56:-143.59,-16.88,-63.94:99
-chr1	4621067	rs6426432	G	C	375.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=60.00;MQ0=0;OQ=975.42;QD=15.73;SB=-398.88	GT:AD:DP:GL:GQ	0/1:35,27:62:-119.51,-18.68,-150.23:99
-chr1	4621285	rs6658403	C	T	186.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.63;MQ0=0;OQ=651.01;QD=10.50;SB=-348.83	GT:AD:DP:GL:GQ	0/1:39,23:60:-86.46,-18.07,-139.05:99
-chr1	4622291	rs2035454	A	G	361.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.15;MQ0=0;OQ=932.32;QD=13.13;SB=-403.21	GT:AD:DP:GL:GQ	0/1:39,32:70:-117.60,-21.09,-152.00:99
-chr1	4622303	rs1531830	T	C	306.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.12;MQ0=0;OQ=753.21;QD=10.92;SB=-275.11	GT:AD:DP:GL:GQ	0/1:39,30:68:-99.09,-20.49,-155.18:99
-chr1	4623109	rs10799251	G	A	463.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=863.86;QD=15.43;SB=-362.38	GT:AD:DP:GL:GQ	0/1:30,26:56:-106.54,-16.87,-110.57:99
-chr1	4623282	rs10799252	G	C	114.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=53.79;MQ0=0;OQ=899.36;QD=20.92;SB=-445.94	GT:AD:DP:GL:GQ	0/1:17,26:42:-105.88,-12.66,-71.37:99
-chr1	4623298	rs10799253	T	C	313.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=52.77;MQ0=0;OQ=616.14;QD=14.00;SB=-298.33	GT:AD:DP:GL:GQ	0/1:18,26:39:-76.66,-11.76,-55.81:99
-chr1	4623777	rs10915578	A	G	84.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.82;MQ=58.86;MQ0=0;OQ=552.36;QD=9.69;SB=-296.32	GT:AD:DP:GL:GQ	0/1:35,22:57:-75.70,-17.18,-138.68:99
-chr1	4623873	rs10915579	T	C	271.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=57.84;MQ0=0;OQ=661.07;QD=10.17;SB=-259.38	GT:AD:DP:GL:GQ	0/1:40,25:64:-88.68,-19.29,-154.96:99
-chr1	4624091	rs12135245	G	C	41.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=1.89;MQ=59.70;MQ0=0;OQ=1186.96;QD=19.14;SB=-476.78	GT:AD:DP:GL:GQ	0/1:28,34:59:-139.77,-17.79,-108.63:99
-chr1	4624130	rs12140542	T	C	140.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=59.74;MQ0=0;OQ=656.89;QD=9.12;SB=-348.92	GT:AD:DP:GL:GQ	0/1:43,29:71:-90.37,-21.40,-172.64:99
-chr1	4624492	rs2035455	C	T	468.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=702.27;QD=12.54;SB=-335.31	GT:AD:DP:GL:GQ	0/1:34,22:55:-90.09,-16.58,-106.86:99
-chr1	4624817	rs17421247	C	T	331.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=59.65;MQ0=0;OQ=1014.16;QD=15.37;SB=-402.77	GT:AD:DP:GL:GQ	0/1:35,31:64:-123.99,-19.29,-104.67:99
-chr1	4626224	rs10915580	G	C	281.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.07;MQ0=0;OQ=1106.61;QD=18.14;SB=-348.42	GT:AD:DP:GL:GQ	0/1:31,30:61:-132.34,-18.40,-124.48:99
-chr1	4626314	rs12567266	T	C	443.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.48;MQ0=0;OQ=855.53;QD=18.20;SB=-345.35	GT:AD:DP:GL:GQ	0/1:19,28:47:-102.99,-14.16,-75.71:99
-chr1	4626341	rs12752003	A	G	152.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=47.43;MQ0=0;OQ=459.90;QD=12.10;SB=-75.78	GT:AD:DP:GL:GQ	0/1:17,21:35:-59.82,-10.55,-67.90:99
-chr1	4626392	rs12565906	G	A	175.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=51.30;MQ0=0;OQ=647.78;QD=15.42;SB=-283.17	GT:AD:DP:GL:GQ	0/1:21,21:41:-80.41,-12.35,-73.25:99
-chr1	4626545	rs12137938	T	C	1.78	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=6.74;MQ=54.18;MQ0=1;OQ=220.73;QD=6.49;SB=-111.61	GT:AD:DP:GL:GQ	0/1:20,14:29:-34.11,-8.75,-66.24:99
-chr1	4626759	rs10799254	A	G	12.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=7.18;MQ=56.44;MQ0=0;OQ=516.47;QD=13.59;SB=-271.00	GT:AD:DP:GL:GQ	0/1:15,23:33:-64.88,-9.95,-53.03:99
-chr1	4626886	rs12137092	A	G	70.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=50.68;MQ0=3;OQ=425.89;QD=8.19;SB=-166.49	GT:AD:DP:GL:GQ	0/1:30,22:47:-60.04,-14.17,-111.36:99
-chr1	4627103	rs6663166	A	G	61.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.88;MQ0=0;OQ=507.83;QD=9.40;SB=-149.43	GT:AD:DP:GL:GQ	0/1:33,21:53:-70.04,-15.97,-130.76:99
-chr1	4627150	rs12138132	T	C	261.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.66;MQ0=0;OQ=429.65;QD=7.81;SB=-213.21	GT:AD:DP:GL:GQ	0/1:37,18:55:-62.82,-16.57,-149.18:99
-chr1	4627390	rs12133670	G	A	454.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.64;MQ0=0;OQ=810.38;QD=15.58;SB=-415.38	GT:AD:DP:GL:GQ	0/1:28,24:51:-99.69,-15.36,-91.80:99
-chr1	4628089	rs12133909	G	T	196.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=59.88;MQ0=0;OQ=673.35;QD=10.52;SB=-318.02	GT:AD:DP:GL:GQ	0/1:40,24:62:-89.30,-18.68,-116.17:99
-chr1	4628258	rs6703379	G	A	0.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=13.50;MQ=55.99;MQ0=1;OQ=611.30;QD=11.32;SB=-213.68	GT:AD:DP:GL:GQ	0/1:33,21:47:-78.59,-14.17,-86.02:99
-chr1	4628265	rs6672122	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.04;HRun=0;HaplotypeScore=25.47;MQ=56.13;MQ0=1;OQ=602.93;QD=10.77;SB=-162.48	GT:AD:DP:GL:GQ	0/1:29,25:52:-78.65,-15.07,-102.50:99
-chr1	4628677	rs6703802	G	A	334.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=937.15;QD=18.02;SB=-393.92	GT:AD:DP:GL:GQ	0/1:24,28:51:-112.37,-15.37,-73.40:99
-chr1	4630143	rs4654582	T	A	2.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=58.22;MQ0=0;OQ=526.78;QD=10.54;SB=-97.11	GT:AD:DP:GL:GQ	0/1:25,22:38:-67.41,-11.45,-72.86:99
-chr1	4630312	rs4654583	T	C	361.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1108.52;QD=16.07;SB=-319.34	GT:AD:DP:GL:GQ	0/1:31,38:68:-134.62,-20.48,-127.03:99
-chr1	4630977	rs12141394	A	G	593.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.47;MQ0=0;OQ=900.99;QD=13.45;SB=-440.92	GT:AD:DP:GL:GQ	0/1:31,36:65:-112.97,-19.59,-120.61:99
-chr1	4631016	rs12139858	C	T	367.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=891.25;QD=15.37;SB=-441.97	GT:AD:DP:GL:GQ	0/1:31,27:57:-109.59,-17.18,-94.97:99
-chr1	4631110	rs12141432	A	G	226.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=58.67;MQ0=0;OQ=787.70;QD=12.50;SB=-349.34	GT:AD:DP:GL:GQ	0/1:35,28:62:-100.73,-18.67,-138.62:99
-chr1	4631448	rs4144452	A	G	502.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=648.74;QD=10.64;SB=-332.00	GT:AD:DP:GL:GQ	0/1:33,28:59:-85.94,-17.78,-131.20:99
-chr1	4631992	rs12138000	G	A	396.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=1014.12;QD=15.85;SB=-413.79	GT:AD:DP:GL:GQ	0/1:32,32:63:-123.69,-18.99,-104.09:99
-chr1	4632333	rs1564667	A	G	289.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=656.79;QD=8.64;SB=-323.90	GT:AD:DP:GL:GQ	0/1:44,32:72:-90.67,-21.71,-171.92:99
-chr1	4633099	rs4654585	T	C	336.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.88;MQ=59.60;MQ0=0;OQ=968.60;QD=16.70;SB=-498.14	GT:AD:DP:GL:GQ	0/1:26,32:58:-117.61,-17.47,-104.79:99
-chr1	4633208	rs4654586	T	A	613.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2145.98;QD=37.00;SB=-956.61	GT:AD:DP:GL:GQ	1/1:0,58:58:-218.20,-17.47,-0.01:99
-chr1	4633215	rs4654455	T	C	484.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1991.47;QD=34.94;SB=-790.66	GT:AD:DP:GL:GQ	1/1:0,57:56:-202.75,-16.87,-0.02:99
-chr1	4636316	rs10915584	G	T	377.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=59.34;MQ0=0;OQ=844.77;QD=13.41;SB=-404.78	GT:AD:DP:GL:GQ	0/1:32,31:58:-105.23,-17.47,-102.72:99
-chr1	4637265	.	T	C	225.79	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=776.05;QD=14.64;SB=-255.94	GT:AD:DP:GL:GQ	0/1:26,27:53:-96.86,-15.97,-103.32:99
-chr1	4638345	.	G	A	67.79	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=991.16;QD=18.70;SB=-412.80	GT:AD:DP:GL:GQ	0/1:24,29:51:-117.77,-15.37,-70.20:99
-chr1	4642883	rs2859392	C	G	348.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=59.71;MQ0=0;OQ=833.93;QD=12.83;SB=-304.28	GT:AD:DP:GL:GQ	0/1:37,28:61:-105.07,-18.39,-160.99:99
-chr1	4643564	rs763238	C	T	66.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.77;MQ0=0;OQ=1042.05;QD=19.66;SB=-208.90	GT:AD:DP:GL:GQ	0/1:21,32:50:-122.56,-15.07,-63.38:99
-chr1	4644154	rs4993529	C	T	334.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=60.00;MQ0=0;OQ=1314.27;QD=19.62;SB=-670.69	GT:AD:DP:GL:GQ	0/1:27,40:65:-154.30,-19.59,-85.13:99
-chr1	4646074	rs242043	T	C	1.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=13.28;MQ=59.47;MQ0=0;OQ=1026.27;QD=14.45;SB=-395.20	GT:AD:DP:GL:GQ	0/1:34,37:70:-127.00,-21.09,-134.39:99
-chr1	4646297	rs61765026	G	A	183.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=1519.28;QD=17.87;SB=-749.72	GT:AD:DP:GL:GQ	0/1:39,46:84:-180.53,-25.32,-123.19:99
-chr1	4646496	rs10915587	C	T	288.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.87;MQ=60.00;MQ0=0;OQ=1042.81;QD=16.04;SB=-490.54	GT:AD:DP:GL:GQ	0/1:32,33:64:-126.86,-19.30,-98.43:99
-chr1	4646880	rs17344953	G	A	102.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=5.33;MQ=59.62;MQ0=0;OQ=1025.96;QD=17.10;SB=-396.44	GT:AD:DP:GL:GQ	0/1:26,33:55:-122.45,-16.57,-85.52:99
-chr1	4647597	rs12747700	G	A	323.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.29;MQ0=0;OQ=999.88;QD=16.95;SB=-503.14	GT:AD:DP:GL:GQ	0/1:28,31:57:-120.45,-17.18,-86.54:99
-chr1	4648034	rs6684528	G	T	259.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.52;MQ0=0;OQ=808.60;QD=16.85;SB=-296.69	GT:AD:DP:GL:GQ	0/1:20,28:48:-98.60,-14.46,-70.03:99
-chr1	4648165	rs1076944	G	T	243.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=58.38;MQ0=0;OQ=602.15;QD=11.58;SB=-146.14	GT:AD:DP:GL:GQ	0/1:27,25:49:-78.26,-14.76,-94.92:99
-chr1	4648936	rs4092257	G	A	283.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=57.56;MQ0=0;OQ=450.85;QD=13.66;SB=-204.90	GT:AD:DP:GL:GQ	0/1:17,16:32:-58.02,-9.65,-54.32:99
-chr1	4649873	rs187148	C	G	93.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=59.76;MQ0=0;OQ=296.24;QD=8.98;SB=-132.74	GT:AD:DP:GL:GQ	0/1:22,11:31:-42.26,-9.35,-85.65:99
-chr1	4651624	.	C	A	146.63	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=797.72;QD=17.34;SB=-280.69	GT:AD:DP:GL:GQ	0/1:17,29:42:-95.71,-12.66,-50.88:99
-chr1	4652138	rs171380	A	G	10.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=58.45;MQ0=0;OQ=324.85;QD=10.83;SB=-162.34	GT:AD:DP:GL:GQ	0/1:14,16:28:-44.21,-8.45,-55.22:99
-chr1	4653917	rs7525374	A	G	301.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=624.45;QD=13.58;SB=-244.30	GT:AD:DP:GL:GQ	0/1:21,25:46:-79.59,-13.86,-85.75:99
-chr1	4653963	rs7528195	T	C	276.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.00;MQ0=0;OQ=479.46;QD=11.42;SB=-265.36	GT:AD:DP:GL:GQ	0/1:21,21:39:-62.99,-11.76,-78.32:99
-chr1	4654404	rs1076945	C	T	142.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=58.13;MQ0=0;OQ=818.85;QD=13.65;SB=-233.53	GT:AD:DP:GL:GQ	0/1:33,27:59:-102.95,-17.78,-107.70:99
-chr1	4655581	.	C	T	85.40	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.44;MQ0=0;OQ=1224.61;QD=16.55;SB=-495.16	GT:AD:DP:GL:GQ	0/1:36,38:73:-147.75,-22.00,-119.12:99
-chr1	4656328	rs10915588	T	C	75.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=629.83;QD=11.88;SB=-281.45	GT:AD:DP:GL:GQ	0/1:30,23:52:-81.93,-15.66,-115.22:99
-chr1	4656461	rs3886389	A	G	234.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.53;MQ0=0;OQ=467.67;QD=9.54;SB=-232.27	GT:AD:DP:GL:GQ	0/1:28,21:49:-64.82,-14.77,-113.76:99
-chr1	4657736	rs6669203	T	C	161.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=58.29;MQ0=0;OQ=397.97;QD=9.71;SB=-145.57	GT:AD:DP:GL:GQ	0/1:23,18:37:-54.24,-11.16,-78.29:99
-chr1	4658187	rs12121882	C	T	363.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=849.30;QD=18.07;SB=-359.52	GT:AD:DP:GL:GQ	0/1:21,26:46:-102.08,-13.87,-62.23:99
-chr1	4659178	rs242054	A	G	123.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=57.49;MQ0=0;OQ=1370.79;QD=30.46;SB=-653.90	GT:AD:DP:GL:GQ	1/1:0,45:44:-140.71,-13.27,-0.04:99
-chr1	4660176	rs61765031	A	G	230.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=59.01;MQ0=0;OQ=811.95;QD=12.30;SB=-390.16	GT:AD:DP:GL:GQ	0/1:34,31:61:-102.85,-18.37,-129.51:99
-chr1	4663049	rs6686733	T	C	216.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=4.72;MQ=59.04;MQ0=0;OQ=1082.32;QD=15.92;SB=-503.34	GT:AD:DP:GL:GQ	0/1:29,39:64:-130.80,-19.28,-107.21:99
-chr1	4663261	rs6681520	C	T	227.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1006.77;QD=22.88;SB=-416.49	GT:AD:DP:GL:GQ	0/1:15,29:43:-116.92,-12.96,-47.72:99
-chr1	4665250	rs12131565	A	G	49.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=2.95;MQ=47.43;MQ0=2;OQ=1030.19;QD=13.38;SB=-443.10	GT:AD:DP:GL:GQ	0/1:41,36:75:-128.89,-22.59,-163.25:99
-chr1	4665448	rs10915590	T	C	343.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.85;MQ0=0;OQ=469.57;QD=9.58;SB=-224.22	GT:AD:DP:GL:GQ	0/1:29,20:48:-64.71,-14.47,-110.90:99
-chr1	4665815	rs10915592	T	C	6.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=940.71;QD=17.75;SB=-259.53	GT:AD:DP:GL:GQ	0/1:21,32:50:-112.42,-15.06,-71.48:99
-chr1	4667613	rs2101196	A	G	254.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.34;MQ=56.97;MQ0=0;OQ=1013.81;QD=15.13;SB=-354.95	GT:AD:DP:GL:GQ	0/1:32,35:65:-124.25,-19.58,-123.74:99
-chr1	4667836	.	T	C	82.17	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=758.61;QD=12.24;SB=-402.64	GT:AD:DP:GL:GQ	0/1:31,31:61:-97.53,-18.39,-127.98:99
-chr1	4667882	rs2086718	C	T	43.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.02;HRun=0;HaplotypeScore=5.21;MQ=57.79;MQ0=0;OQ=518.41;QD=9.43;SB=-229.72	GT:AD:DP:GL:GQ	0/1:31,22:40:-66.89,-11.76,-68.62:99
-chr1	4667894	.	G	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=12;HaplotypeScore=6.56;MQ=55.45;MQ0=0;OQ=63.00;QD=0.98;SB=-8.73	GT:AD:DP:GL:GQ	0/1:54,10:56:-26.47,-16.89,-148.75:95.84
-chr1	4668291	rs6670802	G	A	143.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=56.73;MQ0=0;OQ=372.96;QD=8.29;SB=-147.60	GT:AD:DP:GL:GQ	0/1:28,16:38:-52.04,-11.46,-80.12:99
-chr1	4668400	rs6688423	T	C	371.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=710.41;QD=13.16;SB=-359.33	GT:AD:DP:GL:GQ	0/1:26,28:52:-89.99,-15.67,-104.81:99
-chr1	4668882	.	T	C	49.86	LowQual	AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=9.17;MQ=57.66;MQ0=0;QD=2.49;SB=-0.98	GT:AD:DP:GL:GQ	0/1:11,9:11:-11.59,-3.32,-24.54:82.70
-chr1	4669925	rs12760917	T	C	439.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=917.38;QD=14.11;SB=-279.27	GT:AD:DP:GL:GQ	0/1:29,36:64:-114.31,-19.29,-115.57:99
-chr1	4670306	rs4654594	T	C	240.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=58.06;MQ0=0;OQ=1070.08;QD=17.54;SB=-482.88	GT:AD:DP:GL:GQ	0/1:21,40:58:-127.77,-17.48,-76.71:99
-chr1	4670764	rs1483197	T	C	225.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=58.29;MQ0=0;OQ=709.74;QD=13.65;SB=-285.29	GT:AD:DP:GL:GQ	0/1:22,29:49:-89.03,-14.77,-80.10:99
-chr1	4670879	.	G	T	21.82	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=722.25;QD=15.70;SB=-186.19	GT:AD:DP:GL:GQ	0/1:22,24:42:-88.16,-12.65,-60.03:99
-chr1	4671525	rs989309	G	C	65.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=2.50;MQ=60.00;MQ0=0;OQ=327.78;QD=9.93;SB=-148.55	GT:AD:DP:GL:GQ	0/1:21,12:30:-45.12,-9.05,-74.66:99
-chr1	4671555	rs989310	G	C	120.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=521.90;QD=14.11;SB=-193.59	GT:AD:DP:GL:GQ	0/1:21,16:35:-66.02,-10.55,-86.58:99
-chr1	4671913	rs1061968	T	C	32.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.55;MQ0=0;OQ=101.72;QD=6.36;SB=-10.00	GT:AD:DP:GL:GQ	0/1:10,6:16:-18.28,-4.82,-40.28:99
-chr1	4672577	rs242056	G	A	47.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.45;MQ0=0;OQ=1114.83;QD=37.16;SB=-369.99	GT:AD:DP:GL:GQ	1/1:0,30:28:-115.07,-8.43,-0.01:84.28
-chr1	4673126	rs2071999	A	C	360.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=60.00;MQ0=0;OQ=766.03;QD=12.77;SB=-408.20	GT:AD:DP:GL:GQ	0/1:27,33:59:-97.67,-17.78,-97.47:99
-chr1	4673232	rs56401224	C	G	273.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.62;MQ=59.63;MQ0=0;OQ=825.52;QD=16.51;SB=-362.08	GT:AD:DP:GL:GQ	0/1:25,25:46:-99.70,-13.86,-96.30:99
-chr1	4673712	rs242057	G	A	40.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=3;HaplotypeScore=2.46;MQ=59.65;MQ0=0;OQ=947.24;QD=14.35;SB=-485.02	GT:AD:DP:GL:GQ	0/1:36,30:63:-116.99,-18.98,-120.15:99
-chr1	4674298	rs242058	T	C	345.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=778.59;QD=15.27;SB=-272.44	GT:AD:DP:GL:GQ	0/1:23,28:50:-96.21,-15.07,-89.60:99
-chr1	4676145	rs4654595	A	C	407.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2257.07;QD=35.83;SB=-1055.12	GT:AD:DP:GL:GQ	1/1:0,63:63:-229.31,-18.97,-0.02:99
-chr1	4676402	rs4654596	G	A	207.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.44;MQ0=0;OQ=2768.52;QD=37.41;SB=-1042.40	GT:AD:DP:GL:GQ	1/1:0,74:71:-280.46,-21.39,-0.02:99
-chr1	4678092	rs3766959	C	T	358.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.73;MQ0=0;OQ=1524.54;QD=23.10;SB=-743.34	GT:AD:DP:GL:GQ	0/1:22,44:65:-175.33,-19.59,-68.56:99
-chr1	4679148	rs242040	A	G	228.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=60.00;MQ0=0;OQ=836.32;QD=13.07;SB=-312.23	GT:AD:DP:GL:GQ	0/1:34,30:63:-105.89,-18.98,-137.28:99
-chr1	4679557	rs242041	G	C	23.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=1.52;MQ=58.81;MQ0=0;OQ=500.09;QD=9.81;SB=-250.11	GT:AD:DP:GL:GQ	0/1:32,19:47:-67.48,-14.18,-123.03:99
-chr1	4681011	rs3820251	C	T	321.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.05;MQ0=0;OQ=1264.98;QD=15.06;SB=-599.08	GT:AD:DP:GL:GQ	0/1:45,39:83:-154.80,-25.02,-140.75:99
-chr1	4683002	rs12566272	G	A	75.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.06;MQ=59.60;MQ0=0;OQ=811.79;QD=14.00;SB=-379.10	GT:AD:DP:GL:GQ	0/1:30,28:55:-101.04,-16.58,-98.62:99
-chr1	4683215	rs12085854	C	T	250.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.71;MQ0=0;OQ=595.12;QD=16.53;SB=-237.77	GT:AD:DP:GL:GQ	0/1:12,24:28:-71.24,-8.44,-31.48:99
-chr1	4684416	rs3820252	C	T	67.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=59.16;MQ0=0;OQ=1099.71;QD=21.99;SB=-407.20	GT:AD:DP:GL:GQ	0/1:18,32:50:-128.32,-15.07,-57.31:99
-chr1	4684710	rs4554693	C	T	27.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.03;MQ=59.86;MQ0=0;OQ=1309.90;QD=22.98;SB=-464.01	GT:AD:DP:GL:GQ	0/1:20,37:57:-151.45,-17.18,-62.35:99
-chr1	4685955	rs11586740	G	T	36.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=7.65;MQ=60.00;MQ0=0;OQ=1269.15;QD=17.39;SB=-560.71	GT:AD:DP:GL:GQ	0/1:30,43:69:-150.98,-20.79,-94.07:99
-chr1	4686129	.	A	G	0.31	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.20;MQ0=0;OQ=188.73;QD=3.63;SB=-3.68	GT:AD:DP:GL:GQ	0/1:41,11:52:-37.84,-15.68,-155.85:99
-chr1	4686130	.	G	C	4.40	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.20;MQ0=0;OQ=258.95;QD=4.98;SB=-16.68	GT:AD:DP:GL:GQ	0/1:42,10:52:-44.85,-15.67,-182.52:99
-chr1	4686979	rs242044	A	G	24.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=59.56;MQ0=0;OQ=1479.37;QD=27.91;SB=-538.14	GT:AD:DP:GL:GQ	1/1:0,52:45:-151.55,-13.56,-0.03:99
-chr1	4687176	rs242045	T	C	255.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1371.92;QD=34.30;SB=-697.63	GT:AD:DP:GL:GQ	1/1:0,40:40:-140.79,-12.05,-0.02:99
-chr1	4687868	rs242047	A	C	103.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.65;MQ=59.62;MQ0=0;OQ=770.92;QD=12.85;SB=-248.85	GT:AD:DP:GL:GQ	0/1:32,28:59:-98.15,-17.77,-114.07:99
-chr1	4688746	rs242048	A	G	112.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.36;MQ0=0;OQ=768.10;QD=21.34;SB=-331.78	GT:AD:DP:GL:GQ	1/1:0,36:26:-80.42,-7.84,-0.03:78.16
-chr1	4688889	rs242049	T	G	239.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=60.00;MQ0=0;OQ=1481.34;QD=32.92;SB=-635.03	GT:AD:DP:GL:GQ	1/1:0,45:44:-151.74,-13.26,-0.02:99
-chr1	4695274	rs446529	T	C	363.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=55.31;MQ0=0;OQ=516.35;QD=9.93;SB=-227.25	GT:AD:DP:GL:GQ	0/1:29,23:50:-69.99,-15.07,-114.97:99
-chr1	4695606	rs648712	C	T	1.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=10.04;MQ=47.15;MQ0=0;OQ=816.40;QD=17.01;SB=-434.45	GT:AD:DP:GL:GQ	0/1:23,25:46:-98.78,-13.86,-79.74:99
-chr1	4695607	.	T	G	0.18	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=11.01;MQ=47.15;MQ0=0;OQ=688.64;QD=14.35;SB=-357.86	GT:AD:DP:GL:GQ	0/1:23,25:47:-86.31,-14.16,-83.32:99
-chr1	4695638	rs432330	T	A	460.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.80;MQ0=0;OQ=772.11;QD=15.14;SB=-337.40	GT:AD:DP:GL:GQ	0/1:24,27:50:-95.56,-15.06,-90.18:99
-chr1	4695654	rs449261	T	C	245.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.57;MQ=53.57;MQ0=0;OQ=702.97;QD=13.52;SB=-345.62	GT:AD:DP:GL:GQ	0/1:26,26:49:-88.35,-14.77,-92.65:99
-chr1	4695676	rs435239	G	C	185.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=57.17;MQ0=0;OQ=826.31;QD=16.53;SB=-414.36	GT:AD:DP:GL:GQ	0/1:24,26:47:-100.09,-14.18,-90.75:99
-chr1	4695734	rs416953	T	C	152.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.13;MQ0=0;OQ=882.63;QD=16.65;SB=-283.45	GT:AD:DP:GL:GQ	0/1:22,31:50:-106.61,-15.06,-78.94:99
-chr1	4696083	rs383650	C	G	345.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.10;MQ0=0;OQ=1382.15;QD=17.95;SB=-715.96	GT:AD:DP:GL:GQ	0/1:38,39:75:-164.11,-22.61,-152.21:99
-chr1	4696156	rs436132	G	C	8.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1112.40;QD=19.86;SB=-564.68	GT:AD:DP:GL:GQ	0/1:25,31:56:-131.40,-16.88,-111.00:99
-chr1	4696361	.	A	C	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=2;HaplotypeScore=10.18;MQ=60.26;MQ0=0;OQ=143.73;QD=2.08;SB=104.31	GT:AD:DP:GL:GQ	0/1:45,24:52:-33.32,-15.67,-137.68:99
-chr1	4696418	rs392630	A	G	270.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.71;MQ0=0;OQ=1265.58;QD=13.76;SB=-582.79	GT:AD:DP:GL:GQ	0/1:45,47:87:-156.05,-26.21,-176.07:99
-chr1	4697358	rs544738	C	A	298.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=59.01;MQ0=0;OQ=538.34;QD=14.17;SB=-233.94	GT:AD:DP:GL:GQ	0/1:19,19:37:-68.26,-11.15,-60.83:99
-chr1	4697618	rs445060	G	A	155.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=59.60;MQ0=0;OQ=740.87;QD=12.77;SB=-313.26	GT:AD:DP:GL:GQ	0/1:32,26:54:-93.63,-16.26,-111.70:99
-chr1	4698713	rs578528	A	G	87.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.36;MQ0=0;OQ=385.70;QD=10.71;SB=-193.63	GT:AD:DP:GL:GQ	0/1:21,15:36:-52.70,-10.85,-81.97:99
-chr1	4699130	rs449181	G	A	397.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.84;MQ=59.67;MQ0=0;OQ=927.44;QD=16.56;SB=-380.14	GT:AD:DP:GL:GQ	0/1:27,29:54:-112.30,-16.28,-85.10:99
-chr1	4700289	rs13376290	T	G	0.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=4;HaplotypeScore=0.10;MQ=48.01;MQ0=0;OQ=193.53;QD=7.44;SB=-0.43	GT:AD:DP:GL:GQ	0/1:15,11:24:-29.87,-7.23,-54.19:99
-chr1	4700426	.	C	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=2;HaplotypeScore=11.52;MQ=48.42;MQ0=0;OQ=136.63;QD=5.25;SB=-6.99	GT:AD:DP:GL:GQ	0/1:7,19:10:-19.97,-3.02,-19.59:99
-chr1	4700705	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=20;HaplotypeScore=32.92;MQ=48.95;MQ0=0;OQ=199.23;QD=3.83;SB=71.25	GT:AD:DP:GL:GQ	0/1:35,17:41:-35.56,-12.35,-113.25:99
-chr1	4700881	rs529853	G	C	174.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=53.91;MQ0=0;OQ=810.63;QD=16.54;SB=-402.70	GT:AD:DP:GL:GQ	0/1:22,27:47:-98.53,-14.18,-93.65:99
-chr1	4701141	rs381339	T	C	9.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=2.72;MQ=59.22;MQ0=0;OQ=750.05;QD=11.54;SB=-112.61	GT:AD:DP:GL:GQ	0/1:29,33:53:-94.27,-15.98,-96.69:99
-chr1	4701497	rs382623	T	C	282.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.48;MQ0=0;OQ=1093.69;QD=13.50;SB=-513.56	GT:AD:DP:GL:GQ	0/1:38,43:80:-136.77,-24.11,-153.00:99
-chr1	4701516	rs382646	T	C	490.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1091.01;QD=14.36;SB=-413.27	GT:AD:DP:GL:GQ	0/1:38,38:75:-134.98,-22.59,-157.29:99
-chr1	4701783	rs392620	C	T	260.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=59.38;MQ0=0;OQ=1111.05;QD=15.01;SB=-420.88	GT:AD:DP:GL:GQ	0/1:41,33:73:-136.38,-21.99,-143.11:99
-chr1	4702373	rs448741	C	T	315.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=1161.48;QD=16.83;SB=-516.10	GT:AD:DP:GL:GQ	0/1:33,36:68:-139.92,-20.49,-116.50:99
-chr1	4702588	rs431966	C	G	301.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.74;MQ0=0;OQ=1167.37;QD=16.21;SB=-392.89	GT:AD:DP:GL:GQ	0/1:35,37:71:-141.44,-21.42,-151.57:99
-chr1	4703125	rs367673	G	C	285.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.24;MQ0=0;OQ=1282.03;QD=21.02;SB=-602.59	GT:AD:DP:GL:GQ	0/1:26,35:61:-149.87,-18.38,-114.22:99
-chr1	4703446	rs540299	A	G	321.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.10;MQ0=0;OQ=1141.42;QD=14.82;SB=-449.59	GT:AD:DP:GL:GQ	0/1:36,41:75:-140.02,-22.60,-142.02:99
-chr1	4703496	rs648346	G	A	131.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.29;MQ0=0;OQ=1435.37;QD=17.50;SB=-321.28	GT:AD:DP:GL:GQ	0/1:40,42:79:-170.63,-23.81,-120.02:99
-chr1	4703694	rs393976	G	A	298.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.30;MQ0=0;OQ=1022.50;QD=17.04;SB=-396.14	GT:AD:DP:GL:GQ	0/1:30,30:58:-123.01,-17.47,-100.86:99
-chr1	4704145	rs375781	T	C	253.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=57.53;MQ0=0;OQ=380.91;QD=10.02;SB=-211.48	GT:AD:DP:GL:GQ	0/1:19,19:35:-51.92,-10.55,-74.06:99
-chr1	4704212	rs406065	A	T	598.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.74;MQ0=0;OQ=1026.86;QD=14.88;SB=-405.55	GT:AD:DP:GL:GQ	0/1:35,34:69:-126.75,-20.78,-135.77:99
-chr1	4704412	rs396199	G	A	86.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=59.62;MQ0=0;OQ=915.71;QD=18.69;SB=-324.82	GT:AD:DP:GL:GQ	0/1:21,28:47:-109.02,-14.16,-69.65:99
-chr1	4704606	rs413178	A	G	154.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=56.43;MQ0=0;OQ=958.14;QD=15.45;SB=-233.27	GT:AD:DP:GL:GQ	0/1:25,37:59:-116.89,-17.79,-90.61:99
-chr1	4704966	rs414176	A	C	426.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=751.31;QD=11.93;SB=-297.47	GT:AD:DP:GL:GQ	0/1:31,32:62:-97.10,-18.68,-109.53:99
-chr1	4705294	rs371605	A	G	188.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=59.55;MQ0=0;OQ=418.07;QD=8.20;SB=-210.35	GT:AD:DP:GL:GQ	0/1:28,23:46:-58.96,-13.87,-104.25:99
-chr1	4705534	rs409048	T	C	345.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.35;MQ0=0;OQ=802.66;QD=12.54;SB=-363.20	GT:AD:DP:GL:GQ	0/1:35,29:64:-102.83,-19.28,-139.39:99
-chr1	4706241	rs368808	A	G	17.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=4.09;MQ=59.49;MQ0=0;OQ=756.36;QD=9.22;SB=-230.86	GT:AD:DP:GL:GQ	0/1:48,34:80:-103.04,-24.12,-189.26:99
-chr1	4707706	rs368940	A	G	105.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=599.08;QD=17.12;SB=-212.56	GT:AD:DP:GL:GQ	0/1:14,21:35:-73.73,-10.54,-57.28:99
-chr1	4707911	.	C	A	31.90	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=13;HaplotypeScore=26.77;MQ=58.47;MQ0=0;QD=0.52;SB=52.91	GT:AD:DP:GL:GQ	0/1:52,9:48:-20.93,-14.46,-146.08:64.73
-chr1	4708314	rs2802721	G	A	450.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.44;MQ0=0;OQ=981.54;QD=15.34;SB=-489.03	GT:AD:DP:GL:GQ	0/1:28,36:59:-119.22,-17.78,-99.55:99
-chr1	4708405	rs394808	C	A	233.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=56.69;MQ0=0;OQ=782.76;QD=14.77;SB=-324.34	GT:AD:DP:GL:GQ	0/1:26,27:51:-96.92,-15.37,-78.87:99
-chr1	4708536	rs395145	C	T	383.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1269.10;QD=19.83;SB=-521.54	GT:AD:DP:GL:GQ	0/1:25,39:63:-149.18,-18.98,-84.36:99
-chr1	4708674	rs4654602	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=69.80;MQ=46.48;MQ0=0;OQ=293.59;QD=4.19;SB=-93.14	GT:AD:DP:GL:GQ	0/1:56,14:66:-52.53,-19.89,-198.60:99
-chr1	4708678	rs406913	A	G	32.76	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=20.07;MQ=45.13;MQ0=0;QD=0.48;SB=9.87	GT:AD:DP:GL:GQ	0/1:59,9:58:-24.04,-17.48,-194.48:65.59
-chr1	4708830	rs433427	A	G	13.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=6.55;MQ=59.08;MQ0=0;OQ=748.71;QD=10.55;SB=-350.04	GT:AD:DP:GL:GQ	0/1:40,31:70:-99.25,-21.09,-163.31:99
-chr1	4708980	rs2802720	C	T	373.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=55.41;MQ0=0;OQ=1008.97;QD=15.29;SB=-359.05	GT:AD:DP:GL:GQ	0/1:35,31:66:-124.06,-19.88,-124.56:99
-chr1	4710412	rs364642	C	T	180.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=58.91;MQ0=0;OQ=814.43;QD=13.57;SB=-402.86	GT:AD:DP:GL:GQ	0/1:32,28:58:-102.20,-17.48,-113.74:99
-chr1	4712675	rs381240	A	G	265.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=57.93;MQ0=0;OQ=805.26;QD=10.19;SB=-382.86	GT:AD:DP:GL:GQ	0/1:44,35:76:-106.72,-22.91,-172.59:99
-chr1	4712931	rs448221	T	C	105.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=56.15;MQ0=0;OQ=384.09;QD=10.38;SB=-115.63	GT:AD:DP:GL:GQ	0/1:18,19:34:-51.95,-10.25,-67.62:99
-chr1	4712934	rs431884	C	T	132.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=56.04;MQ0=0;OQ=441.73;QD=12.27;SB=-157.22	GT:AD:DP:GL:GQ	0/1:18,18:33:-57.41,-9.95,-59.19:99
-chr1	4712975	rs380239	A	G	454.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=55.78;MQ0=0;OQ=728.95;QD=12.57;SB=-369.58	GT:AD:DP:GL:GQ	0/1:31,26:56:-93.05,-16.87,-121.44:99
-chr1	4713977	rs434474	A	T	435.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.38;MQ0=0;OQ=788.95;QD=11.78;SB=-384.44	GT:AD:DP:GL:GQ	0/1:40,27:64:-101.46,-19.28,-136.23:99
-chr1	4714260	rs428001	G	A	188.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=394.17;QD=7.58;SB=-208.83	GT:AD:DP:GL:GQ	0/1:37,15:47:-56.86,-14.16,-117.42:99
-chr1	4714368	rs413383	G	C	359.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=902.57;QD=15.56;SB=-389.66	GT:AD:DP:GL:GQ	0/1:30,28:56:-110.43,-16.89,-123.48:99
-chr1	4714807	rs401110	C	T	341.51	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=642.13;QD=13.96;SB=-230.50	GT:AD:DP:GL:GQ	0/1:24,21:44:-80.76,-13.26,-78.68:99
-chr1	4715337	rs434504	G	A	250	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.39;MQ0=0;OQ=582.19;QD=15.32;SB=-195.19	GT:AD:DP:GL:GQ	0/1:19,19:36:-72.35,-10.85,-57.76:99
-chr1	4718265	rs423796	G	A	245.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.44;MQ0=0;OQ=1032.37;QD=16.92;SB=-496.08	GT:AD:DP:GL:GQ	0/1:28,33:59:-124.29,-17.77,-98.91:99
-chr1	4718977	rs41511844	A	C	15.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=807.51;QD=16.48;SB=-276.90	GT:AD:DP:GL:GQ	0/1:21,28:49:-98.80,-14.76,-77.17:99
-chr1	4719527	rs523141	G	A	331.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.63;MQ0=1;OQ=362.25;QD=9.29;SB=-60.24	GT:AD:DP:GL:GQ	0/1:25,14:36:-50.35,-10.84,-83.10:99
-chr1	4719663	rs368420	T	C	450.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=60.00;MQ0=0;OQ=1132.30;QD=16.90;SB=-528.33	GT:AD:DP:GL:GQ	0/1:29,38:66:-136.39,-19.88,-119.33:99
-chr1	4720200	rs34125417	T	A	155.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=59.59;MQ0=0;OQ=796.97;QD=13.51;SB=-224.76	GT:AD:DP:GL:GQ	0/1:29,29:54:-99.25,-16.27,-103.01:99
-chr1	4720659	rs397559	C	T	380.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.71;MQ0=0;OQ=1207.74;QD=18.87;SB=-534.79	GT:AD:DP:GL:GQ	0/1:27,37:63:-143.05,-18.99,-86.17:99
-chr1	4721157	rs443850	C	T	216.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.76;MQ=59.51;MQ0=0;OQ=1138.02;QD=14.97;SB=-525.69	GT:AD:DP:GL:GQ	0/1:42,34:73:-139.07,-21.99,-142.33:99
-chr1	4721448	rs9426481	G	T	366.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=988.26;QD=14.53;SB=-519.87	GT:AD:DP:GL:GQ	0/1:35,33:67:-122.29,-20.18,-120.50:99
-chr1	4722600	rs742245	A	C	591.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1064.86;QD=15.00;SB=-554.90	GT:AD:DP:GL:GQ	0/1:34,37:68:-130.25,-20.48,-117.18:99
-chr1	4722971	rs760815	C	A	224.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.29;MQ0=0;OQ=950.16;QD=16.10;SB=-349.23	GT:AD:DP:GL:GQ	0/1:26,33:58:-115.77,-17.47,-92.37:99
-chr1	4723061	rs2743978	G	A	259.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=829.12;QD=15.07;SB=-390.87	GT:AD:DP:GL:GQ	0/1:28,27:53:-102.17,-15.97,-92.75:99
-chr1	4723683	rs411832	G	C	0.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.02;HRun=0;HaplotypeScore=12.73;MQ=59.54;MQ0=0;OQ=809.82;QD=16.20;SB=-394.90	GT:AD:DP:GL:GQ	0/1:25,24:48:-98.44,-14.17,-99.99:99
-chr1	4723923	rs425005	C	A	167.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.70;MQ0=0;OQ=997.52;QD=16.09;SB=-361.25	GT:AD:DP:GL:GQ	0/1:28,34:61:-121.41,-18.38,-98.67:99
-chr1	4724602	rs424723	C	T	274.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.39;MQ0=0;OQ=1215.08;QD=19.92;SB=-584.11	GT:AD:DP:GL:GQ	0/1:24,36:58:-142.27,-17.47,-75.15:99
-chr1	4725012	rs2743979	G	A	336.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.68;MQ0=0;OQ=1008.07;QD=17.38;SB=-481.48	GT:AD:DP:GL:GQ	0/1:28,30:57:-121.27,-17.17,-91.06:99
-chr1	4725752	rs57646199	C	T	319.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1002.06;QD=17.89;SB=-467.46	GT:AD:DP:GL:GQ	0/1:26,30:56:-120.36,-16.87,-93.54:99
-chr1	4725910	rs2802717	C	T	220.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.68;MQ0=0;OQ=1230.52;QD=17.09;SB=-300.80	GT:AD:DP:GL:GQ	0/1:35,36:70:-147.42,-21.09,-124.52:99
-chr1	4725964	rs2802716	C	A	41.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=0.93;MQ=59.48;MQ0=0;OQ=1484.28;QD=18.55;SB=-734.49	GT:AD:DP:GL:GQ	0/1:32,48:80:-175.81,-24.10,-113.80:99
-chr1	4726365	rs9426502	G	A	127.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=1140.71;QD=16.53;SB=-410.70	GT:AD:DP:GL:GQ	0/1:35,34:69:-138.14,-20.78,-128.81:99
-chr1	4726520	rs2743980	G	A	355.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.68;MQ0=0;OQ=913.23;QD=12.68;SB=-432.39	GT:AD:DP:GL:GQ	0/1:43,29:72:-116.30,-21.69,-156.11:99
-chr1	4726900	rs7548728	G	A	477.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=780.16;QD=13.69;SB=-340.47	GT:AD:DP:GL:GQ	0/1:32,25:55:-97.88,-16.58,-97.83:99
-chr1	4727923	rs426095	G	A	378.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.64;MQ0=0;OQ=878.95;QD=13.73;SB=-378.83	GT:AD:DP:GL:GQ	0/1:36,28:61:-109.56,-18.38,-120.39:99
-chr1	4728243	rs396629	C	T	353.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.62;MQ0=0;OQ=1145.27;QD=18.77;SB=-564.43	GT:AD:DP:GL:GQ	0/1:27,34:61:-136.20,-18.39,-85.13:99
-chr1	4728440	.	G	A	47.68	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=58.84;MQ0=0;OQ=1100.89;QD=19.66;SB=-554.66	GT:AD:DP:GL:GQ	0/1:23,33:56:-130.25,-16.88,-72.13:99
-chr1	4730266	rs410413	T	C	266.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=57.84;MQ0=0;OQ=500.27;QD=10.01;SB=-265.95	GT:AD:DP:GL:GQ	0/1:25,25:45:-66.88,-13.57,-94.91:99
-chr1	4730269	rs410414	T	C	250.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.08;MQ0=0;OQ=462.87;QD=9.85;SB=-198.61	GT:AD:DP:GL:GQ	0/1:25,22:45:-63.14,-13.57,-96.77:99
-chr1	4730645	rs395467	A	G	11.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=4.91;MQ=52.28;MQ0=0;OQ=653.20;QD=9.90;SB=-279.13	GT:AD:DP:GL:GQ	0/1:38,27:64:-87.89,-19.29,-148.52:99
-chr1	4730689	rs9426503	G	C	129.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.89;MQ=56.81;MQ0=0;OQ=1027.62;QD=14.27;SB=-322.37	GT:AD:DP:GL:GQ	0/1:41,31:67:-126.24,-20.20,-160.02:99
-chr1	4730760	rs9426483	C	T	334.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=58.90;MQ0=0;OQ=750.53;QD=13.65;SB=-332.36	GT:AD:DP:GL:GQ	0/1:31,24:54:-94.60,-16.27,-107.97:99
-chr1	4730936	rs423285	C	T	421.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=56.95;MQ0=0;OQ=670.76;QD=11.37;SB=-300.79	GT:AD:DP:GL:GQ	0/1:33,25:55:-86.95,-16.59,-101.75:99
-chr1	4730990	rs395508	G	A	57.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=59.27;MQ0=0;OQ=529.54;QD=9.29;SB=-260.10	GT:AD:DP:GL:GQ	0/1:38,19:53:-72.20,-15.97,-127.10:99
-chr1	4731053	rs418045	T	C	525.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=529.19;QD=11.50;SB=-290.44	GT:AD:DP:GL:GQ	0/1:26,20:45:-69.76,-13.55,-105.89:99
-chr1	4731180	rs396112	G	A	318.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=740.76;QD=17.64;SB=-379.17	GT:AD:DP:GL:GQ	0/1:19,23:39:-89.12,-11.76,-51.25:99
-chr1	4731341	rs406847	A	G	411.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.80;MQ0=0;OQ=513.60;QD=14.67;SB=-259.91	GT:AD:DP:GL:GQ	0/1:17,18:35:-65.19,-10.54,-67.57:99
-chr1	4731471	rs428580	C	T	186.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=867.64;QD=20.18;SB=-459.01	GT:AD:DP:GL:GQ	0/1:17,26:42:-102.70,-12.65,-55.85:99
-chr1	4731684	rs407301	C	T	107.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=57.23;MQ0=0;OQ=697.47;QD=20.51;SB=-327.88	GT:AD:DP:GL:GQ	0/1:12,22:33:-82.98,-9.95,-39.91:99
-chr1	4732014	.	T	A	875.95	Indel	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=12.12;MQ=51.16;MQ0=0;QD=14.13;SB=-350.44	GT:AD:DP:GL:GQ	0/1:31,31:60:-108.95,-18.08,-110.80:99
-chr1	4732015	.	T	A	970.99	Indel	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=9;HaplotypeScore=12.28;MQ=51.00;MQ0=0;QD=15.92;SB=-364.45	GT:AD:DP:GL:GQ	0/1:29,32:58:-117.85,-17.47,-98.32:99
-chr1	4733241	rs414434	G	C	239.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1334.69;QD=20.22;SB=-556.62	GT:AD:DP:GL:GQ	0/1:28,38:63:-155.75,-19.00,-107.17:99
-chr1	4734056	rs9426504	G	A	5.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=4;HaplotypeScore=2.44;MQ=58.18;MQ0=0;OQ=895.74;QD=16.59;SB=-312.82	GT:AD:DP:GL:GQ	0/1:25,29:51:-108.23,-15.38,-75.31:99
-chr1	4734062	rs451162	G	C	249.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=58.57;MQ0=0;OQ=977.80;QD=18.80;SB=-417.05	GT:AD:DP:GL:GQ	0/1:24,28:49:-115.83,-14.77,-93.28:99
-chr1	4734089	rs388631	T	C	200.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=59.01;MQ0=0;OQ=598.20;QD=12.73;SB=-188.41	GT:AD:DP:GL:GQ	0/1:21,25:44:-76.37,-13.27,-78.74:99
-chr1	4734466	rs389959	T	C	132.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=323.31;QD=6.22;SB=-138.87	GT:AD:DP:GL:GQ	0/1:33,18:48:-50.08,-14.47,-128.38:99
-chr1	4734711	rs397852	T	C	337.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=458.03;QD=9.35;SB=-228.25	GT:AD:DP:GL:GQ	0/1:29,20:49:-63.86,-14.77,-115.16:99
-chr1	4735235	rs399377	T	C	222.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=339.75;QD=9.71;SB=-124.62	GT:AD:DP:GL:GQ	0/1:21,14:33:-47.20,-9.94,-76.89:99
-chr1	4735981	rs394594	A	G	305.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=773.72;QD=10.46;SB=-332.92	GT:AD:DP:GL:GQ	0/1:41,33:73:-102.66,-22.01,-163.48:99
-chr1	4738101	rs414909	C	T	441.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1084.42;QD=16.19;SB=-452.94	GT:AD:DP:GL:GQ	0/1:35,32:67:-131.91,-20.18,-129.56:99
-chr1	4738908	rs381304	A	G	65.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=2.37;MQ=58.77;MQ0=0;OQ=1458.03;QD=16.76;SB=-529.55	GT:AD:DP:GL:GQ	0/1:36,51:84:-174.40,-25.31,-140.93:99
-chr1	4739028	rs392984	T	C	105.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=58.80;MQ0=0;OQ=588.16;QD=10.14;SB=-181.39	GT:AD:DP:GL:GQ	0/1:30,28:53:-78.07,-15.97,-115.29:99
-chr1	4739512	rs2802719	A	G	384.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=757.23;QD=14.85;SB=-244.45	GT:AD:DP:GL:GQ	0/1:23,28:48:-93.47,-14.47,-78.98:99
-chr1	4739710	rs2802718	G	C	11.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=56.67;MQ0=0;OQ=1199.49;QD=18.74;SB=-370.48	GT:AD:DP:GL:GQ	0/1:31,33:60:-141.32,-18.09,-113.09:99
-chr1	4740018	rs7544523	T	C	161.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=58.16;MQ0=0;OQ=429.98;QD=11.94;SB=-175.51	GT:AD:DP:GL:GQ	0/1:18,18:35:-56.83,-10.55,-68.38:99
-chr1	4744236	rs9426506	C	T	327.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.29;MQ=58.57;MQ0=0;OQ=856.13;QD=13.81;SB=-428.92	GT:AD:DP:GL:GQ	0/1:35,27:62:-107.57,-18.68,-125.85:99
-chr1	4744972	rs9426484	G	A	347.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.65;MQ0=0;OQ=799.48;QD=12.30;SB=-407.88	GT:AD:DP:GL:GQ	0/1:38,27:60:-101.32,-18.09,-111.41:99
-chr1	4745752	rs6426434	G	A	271.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=60.00;MQ0=0;OQ=1169.68;QD=19.49;SB=-538.80	GT:AD:DP:GL:GQ	0/1:24,36:57:-137.43,-17.18,-72.34:99
-chr1	4747705	rs4654460	G	A	332.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=755.91;QD=18.90;SB=-379.91	GT:AD:DP:GL:GQ	0/1:17,23:38:-90.34,-11.46,-46.09:99
-chr1	4748668	rs12133924	A	G	455.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1019.13;QD=13.07;SB=-468.04	GT:AD:DP:GL:GQ	0/1:42,36:77:-128.39,-23.20,-162.75:99
-chr1	4748969	rs6701069	A	G	376.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.72;MQ0=0;OQ=1003.27;QD=12.39;SB=-469.20	GT:AD:DP:GL:GQ	0/1:46,35:80:-127.71,-24.10,-182.44:99
-chr1	4749244	rs2235438	T	C	581.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=891.88;QD=13.12;SB=-467.00	GT:AD:DP:GL:GQ	0/1:32,36:65:-112.06,-19.59,-124.79:99
-chr1	4750683	rs909757	T	C	410.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.22;MQ0=0;OQ=683.00;QD=11.78;SB=-347.56	GT:AD:DP:GL:GQ	0/1:31,27:55:-88.15,-16.57,-119.32:99
-chr1	4751405	rs17345239	T	G	179.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=774.24;QD=13.12;SB=-344.85	GT:AD:DP:GL:GQ	0/1:30,29:56:-97.57,-16.87,-106.85:99
-chr1	4753272	rs742246	A	C	355.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=617.26;QD=14.03;SB=-196.34	GT:AD:DP:GL:GQ	0/1:21,23:43:-77.96,-12.95,-77.17:99
-chr1	4753548	rs932350	T	C	408.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.22;MQ0=0;OQ=924.37;QD=14.22;SB=-295.30	GT:AD:DP:GL:GQ	0/1:29,36:64:-115.01,-19.29,-116.32:99
-chr1	4753607	rs12082538	G	C	138.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.84;MQ=60.48;MQ0=0;OQ=606.35;QD=13.47;SB=-132.52	GT:AD:DP:GL:GQ	0/1:25,20:43:-76.88,-12.96,-107.57:99
-chr1	4753770	rs7519688	C	T	2.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=5.33;MQ=59.09;MQ0=0;OQ=802.41;QD=15.73;SB=-282.79	GT:AD:DP:GL:GQ	0/1:25,26:48:-97.99,-14.47,-73.03:99
-chr1	4755384	rs727906	C	T	371.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=60.00;MQ0=0;OQ=954.50;QD=12.40;SB=-422.82	GT:AD:DP:GL:GQ	0/1:47,30:76:-121.64,-22.91,-153.23:99
-chr1	4756029	rs2411946	T	A	426.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.59;MQ0=0;OQ=610.43;QD=13.57;SB=-308.69	GT:AD:DP:GL:GQ	0/1:23,22:44:-77.58,-13.26,-87.22:99
-chr1	4756791	rs760816	A	G	307.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=60.00;MQ0=0;OQ=644.43;QD=11.51;SB=-270.35	GT:AD:DP:GL:GQ	0/1:29,27:54:-84.00,-16.27,-113.95:99
-chr1	4758251	.	A	G	4.99	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=59.34;MQ0=1;OQ=796.90;QD=10.77;SB=-383.18	GT:AD:DP:GL:GQ	0/1:42,32:64:-102.26,-19.28,-139.02:99
-chr1	4758268	rs4654606	T	G	84.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.06;MQ=59.35;MQ0=0;OQ=681.65;QD=10.65;SB=-311.85	GT:AD:DP:GL:GQ	0/1:38,26:61:-89.83,-18.38,-124.54:99
-chr1	4759471	rs2142949	C	T	488.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=986.38;QD=17.01;SB=-326.41	GT:AD:DP:GL:GQ	0/1:27,31:57:-119.09,-17.17,-96.06:99
-chr1	4761020	rs4654607	C	T	187.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1317.32;QD=16.67;SB=-650.17	GT:AD:DP:GL:GQ	0/1:40,39:77:-158.21,-23.19,-137.71:99
-chr1	4763236	rs2064168	C	T	278.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1185.65;QD=19.12;SB=-513.73	GT:AD:DP:GL:GQ	0/1:25,37:60:-139.92,-18.08,-90.33:99
-chr1	4763773	rs760817	T	C	455.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.11;MQ0=0;OQ=932.67;QD=12.78;SB=-440.55	GT:AD:DP:GL:GQ	0/1:40,33:73:-118.54,-21.99,-163.26:99
-chr1	4764845	rs10915606	A	G	585.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1075.05;QD=14.15;SB=-528.93	GT:AD:DP:GL:GQ	0/1:37,39:74:-133.08,-22.29,-148.56:99
-chr1	4765718	rs10429868	G	A	452.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1155.78;QD=15.62;SB=-602.60	GT:AD:DP:GL:GQ	0/1:39,35:74:-141.15,-22.29,-141.78:99
-chr1	4766001	rs12022466	T	A	597.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1259.06;QD=15.94;SB=-558.66	GT:AD:DP:GL:GQ	0/1:39,40:79:-152.98,-23.79,-151.51:99
-chr1	4766045	.	G	A	13.96	PASS	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1207.52;QD=14.55;SB=-582.08	GT:AD:DP:GL:GQ	0/1:47,36:81:-148.43,-24.40,-164.42:99
-chr1	4766280	rs12752806	G	T	477.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.50;MQ0=0;OQ=1250.24;QD=15.06;SB=-480.84	GT:AD:DP:GL:GQ	0/1:42,41:81:-152.70,-24.39,-146.62:99
-chr1	4767409	rs7534770	A	T	437.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1042.20;QD=14.28;SB=-531.39	GT:AD:DP:GL:GQ	0/1:39,34:72:-129.19,-21.69,-145.29:99
-chr1	4767544	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=6;HaplotypeScore=47.32;MQ=56.17;MQ0=2;OQ=190.67;QD=2.98;SB=86.31	GT:AD:DP:GL:GQ	0/1:48,16:57:-39.52,-17.17,-173.24:99
-chr1	4769118	rs10915610	A	C	208.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.78;MQ=58.87;MQ0=0;OQ=1164.63;QD=14.93;SB=-551.67	GT:AD:DP:GL:GQ	0/1:37,39:77:-145.10,-25.36,-142.76:99
-chr1	4770972	.	C	A	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=2;HaplotypeScore=8.28;MQ=56.35;MQ0=0;OQ=111.37;QD=1.89;SB=65.23	GT:AD:DP:GL:GQ	0/1:35,24:40:-26.47,-12.05,-113.84:99
-chr1	4771531	rs1118009	A	G	323.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=56.74;MQ0=0;OQ=1333.25;QD=15.32;SB=-605.42	GT:AD:DP:GL:GQ	0/1:38,49:86:-162.53,-25.92,-151.96:99
-chr1	4771617	rs1118010	C	T	407.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1431.00;QD=18.58;SB=-550.33	GT:AD:DP:GL:GQ	0/1:34,43:77:-169.58,-23.20,-123.43:99
-chr1	4772431	rs10799262	G	A	68.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.76;MQ0=0;OQ=1610.76;QD=20.65;SB=-755.30	GT:AD:DP:GL:GQ	0/1:32,46:78:-187.86,-23.50,-115.14:99
-chr1	4772511	rs10915611	C	T	585.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1219.72;QD=17.42;SB=-547.54	GT:AD:DP:GL:GQ	0/1:34,36:70:-146.34,-21.08,-121.82:99
-chr1	4772916	rs10915612	A	G	195.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.68;MQ0=0;OQ=1058.43;QD=15.80;SB=-539.98	GT:AD:DP:GL:GQ	0/1:30,37:67:-129.31,-20.19,-122.36:99
-chr1	4773270	rs7540367	G	A	242.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.44;MQ0=0;OQ=792.22;QD=13.66;SB=-213.92	GT:AD:DP:GL:GQ	0/1:33,25:57:-99.68,-17.18,-105.56:99
-chr1	4773658	.	G	A	112.25	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.50;MQ0=0;OQ=985.30;QD=17.59;SB=-495.06	GT:AD:DP:GL:GQ	0/1:26,30:55:-118.38,-16.57,-94.83:99
-chr1	4773754	rs12120205	T	A	372.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1585.82;QD=16.18;SB=-556.42	GT:AD:DP:GL:GQ	0/1:49,49:98:-191.38,-29.51,-188.67:99
-chr1	4774287	rs10799263	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=7;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1045.47;QD=15.84;SB=-449.52	GT:AD:DP:GL:GQ	0/1:30,36:65:-127.41,-19.58,-109.32:99
-chr1	4774365	rs10915613	G	A	361.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1223.17;QD=16.31;SB=-630.64	GT:AD:DP:GL:GQ	0/1:38,37:73:-147.61,-22.01,-118.37:99
-chr1	4776755	rs12145180	C	G	356.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=59.64;MQ0=0;OQ=975.57;QD=15.24;SB=-415.28	GT:AD:DP:GL:GQ	0/1:32,32:62:-119.54,-18.70,-139.99:99
-chr1	4776903	rs10915615	C	A	330.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.69;MQ0=0;OQ=909.18;QD=12.12;SB=-404.10	GT:AD:DP:GL:GQ	0/1:43,32:72:-115.90,-21.70,-128.82:99
-chr1	4777460	rs12118812	T	G	167.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=842.15;QD=11.86;SB=-431.75	GT:AD:DP:GL:GQ	0/1:41,30:70:-108.58,-21.08,-144.58:99
-chr1	4777525	rs12118818	T	G	101.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=1.33;MQ=59.72;MQ0=0;OQ=940.16;QD=13.63;SB=-473.22	GT:AD:DP:GL:GQ	0/1:36,33:67:-117.48,-20.18,-125.31:99
-chr1	4777535	rs12143219	G	T	70.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=4;HaplotypeScore=0.27;MQ=60.00;MQ0=0;OQ=1005.40;QD=15.47;SB=-447.46	GT:AD:DP:GL:GQ	0/1:32,33:65:-123.40,-19.58,-114.32:99
-chr1	4778731	rs1120120	C	T	347.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=59.78;MQ0=0;OQ=1277.01;QD=15.02;SB=-471.94	GT:AD:DP:GL:GQ	0/1:47,38:84:-156.28,-25.30,-171.76:99
-chr1	4780340	rs10915616	C	T	196.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=881.43;QD=16.95;SB=-113.96	GT:AD:DP:GL:GQ	0/1:26,26:52:-107.09,-15.66,-92.07:99
-chr1	4780435	rs12121890	T	C	347.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.73;MQ0=0;OQ=1105.50;QD=16.26;SB=-426.60	GT:AD:DP:GL:GQ	0/1:30,38:67:-134.02,-20.18,-117.11:99
-chr1	4781127	rs12122126	T	C	314.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.69;MQ0=0;OQ=674.99;QD=13.50;SB=-298.62	GT:AD:DP:GL:GQ	0/1:26,24:49:-85.54,-14.76,-106.72:99
-chr1	4781899	rs12117810	G	A	242.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.88;MQ0=0;OQ=1031.36;QD=17.78;SB=-437.45	GT:AD:DP:GL:GQ	0/1:28,30:56:-123.30,-16.88,-83.86:99
-chr1	4782182	rs10915619	A	T	438.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.65;MQ0=0;OQ=1009.97;QD=12.47;SB=-431.43	GT:AD:DP:GL:GQ	0/1:47,34:80:-128.38,-24.10,-172.98:99
-chr1	4782516	rs1883345	G	A	146.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.45;MQ0=0;OQ=906.47;QD=11.93;SB=-338.27	GT:AD:DP:GL:GQ	0/1:44,32:71:-115.32,-21.39,-152.63:99
-chr1	4782885	rs1883346	T	A	397.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=58.75;MQ0=0;OQ=1064.02;QD=14.99;SB=-456.50	GT:AD:DP:GL:GQ	0/1:37,34:70:-130.77,-21.08,-141.61:99
-chr1	4782955	rs1883347	T	C	221.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.24;MQ=59.50;MQ0=0;OQ=856.09;QD=11.57;SB=-450.96	GT:AD:DP:GL:GQ	0/1:43,30:73:-110.88,-21.99,-176.74:99
-chr1	4783491	rs4654610	T	C	960.35	Indel	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=11.46;MQ=47.61;MQ0=0;QD=14.12;SB=-407.25	GT:AD:DP:GL:GQ	0/1:31,37:63:-118.30,-18.98,-112.03:99
-chr1	4793106	rs61766789	G	A	240.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=58.98;MQ0=1;OQ=1230.74;QD=17.33;SB=-554.58	GT:AD:DP:GL:GQ	0/1:35,36:69:-147.14,-20.78,-120.71:99
-chr1	4794663	.	C	T	274.23	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=833.44;QD=12.63;SB=-440.37	GT:AD:DP:GL:GQ	0/1:40,26:66:-106.51,-19.88,-144.25:99
-chr1	4794952	rs12074481	C	A	271.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=57.82;MQ0=0;OQ=1066.30;QD=15.02;SB=-452.97	GT:AD:DP:GL:GQ	0/1:33,38:69:-130.70,-20.79,-110.83:99
-chr1	4798693	rs7522386	A	G	341.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=58.39;MQ0=0;OQ=1056.56;QD=15.77;SB=-495.12	GT:AD:DP:GL:GQ	0/1:31,36:65:-128.52,-19.58,-122.92:99
-chr1	4801597	rs7527319	C	A	582.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=923.07;QD=13.78;SB=-344.17	GT:AD:DP:GL:GQ	0/1:34,33:66:-115.47,-19.88,-121.89:99
-chr1	4806096	rs7547779	T	C	457.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.53;MQ0=0;OQ=897.02;QD=13.39;SB=-364.21	GT:AD:DP:GL:GQ	0/1:34,33:65:-112.57,-19.58,-135.93:99
-chr1	4807563	rs11582327	T	C	467.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=911.00;QD=13.40;SB=-422.86	GT:AD:DP:GL:GQ	0/1:32,36:67:-114.58,-20.19,-127.73:99
-chr1	4807672	rs7536960	T	C	326.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=720.71;QD=12.64;SB=-286.29	GT:AD:DP:GL:GQ	0/1:27,30:55:-91.93,-16.58,-105.91:99
-chr1	4808516	rs6669130	G	A	323.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=59.98;MQ0=0;OQ=1529.46;QD=17.58;SB=-724.76	GT:AD:DP:GL:GQ	0/1:42,45:83:-181.23,-25.00,-146.35:99
-chr1	4808719	.	T	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=2;HaplotypeScore=4.69;MQ=58.91;MQ0=0;OQ=57.76;QD=0.90;SB=95.29	GT:AD:DP:GL:GQ	0/1:40,24:48:-23.52,-14.46,-139.84:90.60
-chr1	4808761	rs6683849	A	G	156.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=737.58;QD=13.17;SB=-272.54	GT:AD:DP:GL:GQ	0/1:30,26:56:-93.91,-16.87,-119.65:99
-chr1	4808953	rs12725011	G	A	96.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=1.25;MQ=59.67;MQ0=0;OQ=1362.18;QD=19.46;SB=-645.68	GT:AD:DP:GL:GQ	0/1:29,41:69:-160.29,-20.79,-101.64:99
-chr1	4808976	rs11582462	A	G	74	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=3.61;MQ=59.32;MQ0=0;OQ=923.86;QD=13.59;SB=-481.59	GT:AD:DP:GL:GQ	0/1:33,35:64:-114.94,-19.28,-135.51:99
-chr1	4809567	rs11582936	A	C	302.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.67;MQ0=0;OQ=605.80;QD=10.63;SB=-281.94	GT:AD:DP:GL:GQ	0/1:26,30:52:-79.53,-15.67,-97.13:99
-chr1	4809668	rs7543326	T	C	173.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=1.68;MQ=59.71;MQ0=0;OQ=1092.10;QD=13.82;SB=-474.60	GT:AD:DP:GL:GQ	0/1:37,42:79:-136.31,-23.81,-148.02:99
-chr1	4811032	rs6693945	T	C	292.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.41;MQ0=0;OQ=916.53;QD=14.55;SB=-321.25	GT:AD:DP:GL:GQ	0/1:30,31:62:-117.13,-22.19,-125.33:99
-chr1	4811983	rs2209167	G	A	414.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.70;MQ0=0;OQ=1021.76;QD=13.10;SB=-414.40	GT:AD:DP:GL:GQ	0/1:45,33:75:-128.08,-22.62,-135.03:99
-chr1	4813003	rs6426439	C	T	133.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=3.37;MQ=59.50;MQ0=0;OQ=1367.37;QD=18.48;SB=-705.27	GT:AD:DP:GL:GQ	0/1:34,40:72:-161.71,-21.69,-122.06:99
-chr1	4813419	rs1886113	T	G	294.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=612.34;QD=12.76;SB=-248.40	GT:AD:DP:GL:GQ	0/1:25,23:47:-78.67,-14.15,-95.57:99
-chr1	4813733	rs10915628	T	C	146.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=870.49;QD=12.26;SB=-270.52	GT:AD:DP:GL:GQ	0/1:41,30:71:-111.72,-21.39,-167.00:99
-chr1	4813800	rs10915631	C	T	467.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=1109.44;QD=15.20;SB=-509.01	GT:AD:DP:GL:GQ	0/1:39,34:73:-136.22,-21.99,-139.36:99
-chr1	4813826	rs10799266	A	G	440.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=1025.69;QD=13.50;SB=-528.56	GT:AD:DP:GL:GQ	0/1:40,36:76:-128.75,-22.90,-159.57:99
-chr1	4814770	rs6426440	C	A	361.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=964.05;QD=12.68;SB=-378.13	GT:AD:DP:GL:GQ	0/1:42,34:76:-122.59,-22.91,-131.06:99
-chr1	4814802	rs6426441	A	T	191.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=59.57;MQ0=0;OQ=882.35;QD=13.17;SB=-416.80	GT:AD:DP:GL:GQ	0/1:37,30:65:-111.10,-19.58,-134.21:99
-chr1	4815146	rs2411949	G	T	0.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=15.15;MQ=59.31;MQ0=0;OQ=1233.12;QD=16.23;SB=-582.79	GT:AD:DP:GL:GQ	0/1:35,40:72:-148.29,-21.69,-101.37:99
-chr1	4815330	rs6658680	A	G	154.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=57.17;MQ0=0;OQ=454.29;QD=9.09;SB=-126.50	GT:AD:DP:GL:GQ	0/1:29,21:47:-62.88,-14.17,-108.85:99
-chr1	4815340	rs6692964	G	T	169.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=56.50;MQ0=0;OQ=607.11;QD=11.90;SB=-203.41	GT:AD:DP:GL:GQ	0/1:29,22:51:-79.35,-15.36,-103.70:99
-chr1	4815344	rs6692966	G	A	446.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.57;MQ0=0;OQ=669.90;QD=12.88;SB=-297.81	GT:AD:DP:GL:GQ	0/1:28,24:50:-85.35,-15.08,-90.67:99
-chr1	4815634	rs2147028	C	A	82.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=1.79;MQ=59.43;MQ0=0;OQ=1001.39;QD=15.41;SB=-277.32	GT:AD:DP:GL:GQ	0/1:32,33:62:-122.10,-18.67,-102.09:99
-chr1	4815904	rs2209166	G	A	117.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1754.50;QD=22.21;SB=-892.01	GT:AD:DP:GL:GQ	0/1:28,51:79:-202.53,-23.80,-99.82:99
-chr1	4816064	rs6693706	G	T	446.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.64;MQ0=0;OQ=733.52;QD=14.11;SB=-350.37	GT:AD:DP:GL:GQ	0/1:26,26:52:-92.30,-15.67,-93.55:99
-chr1	4816465	rs1535736	C	T	112.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1112.33;QD=17.38;SB=-338.80	GT:AD:DP:GL:GQ	0/1:31,33:64:-133.80,-19.28,-110.54:99
-chr1	4816766	rs1535734	A	G	420.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=908.64;QD=12.62;SB=-359.52	GT:AD:DP:GL:GQ	0/1:39,33:70:-115.23,-21.09,-156.36:99
-chr1	4817101	rs6693352	A	G	227.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.68;MQ0=0;OQ=949.71;QD=13.19;SB=-443.55	GT:AD:DP:GL:GQ	0/1:38,34:70:-119.35,-21.09,-147.05:99
-chr1	4817128	rs2898848	G	A	216.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1195.65;QD=16.61;SB=-558.57	GT:AD:DP:GL:GQ	0/1:36,36:72:-144.54,-21.69,-131.83:99
-chr1	4817320	rs2209165	C	T	145.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.39;MQ0=0;OQ=1415.52;QD=20.82;SB=-731.10	GT:AD:DP:GL:GQ	0/1:27,41:68:-165.32,-20.49,-90.68:99
-chr1	4817405	rs2209164	A	G	118.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.63;MQ0=0;OQ=527.84;QD=8.51;SB=-187.44	GT:AD:DP:GL:GQ	0/1:40,22:60:-74.14,-18.07,-157.62:99
-chr1	4817514	rs2209163	G	A	238.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.72;MQ0=0;OQ=933.49;QD=13.93;SB=-217.50	GT:AD:DP:GL:GQ	0/1:38,29:66:-116.53,-19.90,-117.09:99
-chr1	4817749	rs3938469	A	G	107.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=486.41;QD=8.11;SB=-117.18	GT:AD:DP:GL:GQ	0/1:41,19:60:-70.00,-18.07,-168.54:99
-chr1	4817969	rs2093769	G	A	229.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=59.44;MQ0=0;OQ=1190.09;QD=14.51;SB=-381.33	GT:AD:DP:GL:GQ	0/1:44,38:79:-146.09,-23.80,-153.77:99
-chr1	4818044	rs2093768	A	G	314.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.33;MQ0=0;OQ=811.36;QD=13.09;SB=-280.55	GT:AD:DP:GL:GQ	0/1:29,33:61:-102.81,-18.39,-114.06:99
-chr1	4818509	rs10159142	G	A	308.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=58.95;MQ0=0;OQ=899.59;QD=15.51;SB=-448.42	GT:AD:DP:GL:GQ	0/1:30,28:58:-110.72,-17.47,-107.08:99
-chr1	4818666	rs10799268	T	C	278.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.42;MQ0=0;OQ=887.47;QD=13.87;SB=-404.24	GT:AD:DP:GL:GQ	0/1:33,31:62:-110.70,-18.67,-130.15:99
-chr1	4818872	rs10753387	T	C	88.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=55.54;MQ0=0;OQ=718.25;QD=13.30;SB=-324.13	GT:AD:DP:GL:GQ	0/1:25,29:53:-91.08,-15.98,-99.45:99
-chr1	4819100	rs10753388	G	A	0.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=17.64;MQ=55.33;MQ0=0;OQ=1324.27;QD=17.66;SB=-679.33	GT:AD:DP:GL:GQ	0/1:36,39:70:-156.80,-21.09,-111.06:99
-chr1	4819163	rs10753389	A	G	70.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=49.63;MQ0=1;OQ=764.05;QD=12.53;SB=-256.89	GT:AD:DP:GL:GQ	0/1:33,28:59:-97.46,-17.77,-133.52:99
-chr1	4819348	rs10915632	G	A	8.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=2;HaplotypeScore=6.46;MQ=58.48;MQ0=0;OQ=1415.77;QD=15.91;SB=-658.28	GT:AD:DP:GL:GQ	0/1:47,42:87:-171.06,-26.20,-164.95:99
-chr1	4819622	rs10799269	C	G	347.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.05;MQ0=0;OQ=934.79;QD=12.98;SB=-429.59	GT:AD:DP:GL:GQ	0/1:41,31:69:-117.56,-20.80,-181.53:99
-chr1	4819655	rs10799270	G	A	353.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.56;MQ0=0;OQ=1064.88;QD=14.39;SB=-436.38	GT:AD:DP:GL:GQ	0/1:41,33:74:-132.06,-22.29,-148.73:99
-chr1	4819737	rs2147027	T	C	200.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.22;MQ=55.94;MQ0=0;OQ=778.52;QD=14.69;SB=-321.29	GT:AD:DP:GL:GQ	0/1:25,28:51:-96.50,-15.36,-95.69:99
-chr1	4820060	rs2181701	T	C	0.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=52.25;MQ0=0;OQ=485.51;QD=9.52;SB=-244.48	GT:AD:DP:GL:GQ	0/1:29,22:49:-66.61,-14.77,-110.48:99
-chr1	4820091	rs4265399	G	A	243.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.14;MQ0=0;OQ=512.92;QD=10.06;SB=-45.99	GT:AD:DP:GL:GQ	0/1:32,19:48:-69.05,-14.48,-96.83:99
-chr1	4820096	rs2181700	T	G	75.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=50.99;MQ0=0;OQ=433.90;QD=8.34;SB=-40.01	GT:AD:DP:GL:GQ	0/1:33,19:51:-62.03,-15.36,-122.01:99
-chr1	4820154	rs9725470	C	T	281.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.90;MQ0=2;OQ=495.62;QD=9.01;SB=-102.52	GT:AD:DP:GL:GQ	0/1:37,18:51:-68.22,-15.38,-108.69:99
-chr1	4820216	rs9726479	T	G	79.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=1.15;MQ=45.62;MQ0=0;OQ=697.41;QD=12.24;SB=-299.44	GT:AD:DP:GL:GQ	0/1:30,27:55:-89.59,-16.56,-110.14:99
-chr1	4820227	rs9725796	C	A	40.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.33;MQ=47.59;MQ0=0;OQ=717.90;QD=11.58;SB=-300.16	GT:AD:DP:GL:GQ	0/1:34,28:59:-92.84,-17.77,-118.69:99
-chr1	4820388	rs9726805	T	C	201.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=51.02;MQ0=0;OQ=985.45;QD=12.17;SB=-457.03	GT:AD:DP:GL:GQ	0/1:42,39:76:-124.72,-22.89,-168.04:99
-chr1	4820748	.	A	G	1.13	PASS	AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=35.53;MQ0=6;OQ=268.28;QD=5.37;SB=-1.83	GT:AD:DP:GL:GQ	0/1:28,21:34:-40.35,-10.24,-88.65:99
-chr1	4820850	.	T	C	0.21	PASS	AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=43.66;MQ0=1;OQ=84.14;QD=3.12;SB=-53.32	GT:AD:DP:GL:GQ	0/1:14,12:16:-16.52,-4.83,-39.77:99
-chr1	4820858	.	G	A	0.93	PASS	AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=4.23;MQ=41.11;MQ0=1;OQ=153.45;QD=5.29;SB=-40.65	GT:AD:DP:GL:GQ	0/1:13,15:17:-23.75,-5.12,-38.01:99
-chr1	4820952	rs61766808	C	T	152.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=38.70;MQ0=1;OQ=409.25;QD=9.09;SB=-225.93	GT:AD:DP:GL:GQ	0/1:30,15:42:-56.86,-12.66,-95.36:99
-chr1	4821240	rs9726227	C	T	470.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=37.63;MQ0=1;OQ=887.90;QD=12.87;SB=-408.68	GT:AD:DP:GL:GQ	0/1:36,33:62:-110.75,-18.67,-130.57:99
-chr1	4821376	rs9726241	C	A	8.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=39.07;MQ0=5;OQ=305.92;QD=4.86;SB=-1.55	GT:AD:DP:GL:GQ	0/1:37,26:47:-48.04,-14.16,-121.88:99
-chr1	4821609	rs9726885	A	C	47.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=36.89;MQ0=14;OQ=448.17;QD=5.67;SB=-207.28	GT:AD:DP:GL:GQ	0/1:47,32:61:-66.47,-18.37,-159.23:99
-chr1	4821773	rs9726925	A	G	101.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=38.22;MQ0=2;OQ=859.75;QD=9.35;SB=-417.48	GT:AD:DP:GL:GQ	0/1:47,45:74:-111.55,-22.29,-173.37:99
-chr1	4821818	rs12135318	C	A	320.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=44.85;MQ0=0;OQ=1111.50;QD=12.21;SB=-470.83	GT:AD:DP:GL:GQ	0/1:41,50:79:-138.22,-23.79,-149.34:99
-chr1	4821875	rs10915634	A	G	55.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=46.72;MQ0=5;OQ=657.16;QD=7.64;SB=-166.48	GT:AD:DP:GL:GQ	0/1:46,40:75:-91.61,-22.61,-188.45:99
-chr1	4822060	rs7411909	A	G	472.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.58;MQ0=0;OQ=844.08;QD=14.07;SB=-331.93	GT:AD:DP:GL:GQ	0/1:31,29:60:-105.77,-18.08,-125.13:99
-chr1	4822115	rs4617370	G	A	221.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=59.00;MQ0=0;OQ=1387.37;QD=17.13;SB=-675.38	GT:AD:DP:GL:GQ	0/1:40,41:81:-166.44,-24.42,-127.76:99
-chr1	4822681	rs6660173	C	T	0.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.01;HRun=3;HaplotypeScore=10.96;MQ=52.45;MQ0=0;OQ=1014.70;QD=13.71;SB=-426.92	GT:AD:DP:GL:GQ	0/1:42,31:73:-126.44,-21.69,-150.88:99
-chr1	4822687	rs6660177	C	A	163.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=52.56;MQ0=0;OQ=900.97;QD=12.01;SB=-430.11	GT:AD:DP:GL:GQ	0/1:44,31:74:-115.67,-22.28,-156.45:99
-chr1	4822710	rs6668068	T	C	72.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=2.96;MQ=50.82;MQ0=0;OQ=906.69;QD=11.78;SB=-477.93	GT:AD:DP:GL:GQ	0/1:44,33:75:-116.54,-22.59,-176.01:99
-chr1	4822958	rs6665282	A	G	464.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.16;MQ0=0;OQ=785.44;QD=13.78;SB=-331.28	GT:AD:DP:GL:GQ	0/1:30,27:57:-99.00,-17.17,-122.67:99
-chr1	4823049	rs6665388	A	G	56.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=2.47;MQ=55.61;MQ0=0;OQ=907.22;QD=12.60;SB=-445.14	GT:AD:DP:GL:GQ	0/1:36,36:67:-114.19,-20.18,-139.94:99
-chr1	4823137	rs12087020	A	G	358.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.38;MQ0=0;OQ=1125.73;QD=15.86;SB=-588.93	GT:AD:DP:GL:GQ	0/1:32,39:69:-136.64,-20.78,-130.19:99
-chr1	4823207	rs10915638	C	T	285.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=57.74;MQ0=0;OQ=1338.14;QD=15.93;SB=-487.03	GT:AD:DP:GL:GQ	0/1:44,40:82:-161.79,-24.70,-152.84:99
-chr1	4823247	rs10915639	C	T	70.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=3;HaplotypeScore=1.40;MQ=59.24;MQ0=0;OQ=1272.31;QD=17.19;SB=-602.12	GT:AD:DP:GL:GQ	0/1:37,37:73:-152.51,-22.00,-119.03:99
-chr1	4823334	rs10915640	G	T	485.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.40;MQ0=0;OQ=978.54;QD=13.05;SB=-397.99	GT:AD:DP:GL:GQ	0/1:40,35:71:-122.52,-21.38,-136.84:99
-chr1	4823422	rs10915641	G	A	453.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.14;MQ0=3;OQ=955.26;QD=11.79;SB=-332.42	GT:AD:DP:GL:GQ	0/1:46,35:73:-120.80,-21.99,-150.35:99
-chr1	4824006	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=60;Dels=0.03;HRun=20;HaplotypeScore=17.44;MQ=44.47;MQ0=0;OQ=216.45;QD=3.61;SB=56.16	GT:AD:DP:GL:GQ	0/1:34,24:43:-37.29,-12.36,-108.08:99
-chr1	4824255	rs6656943	G	A	241.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=48.13;MQ0=0;OQ=486.99;QD=9.37;SB=-207.48	GT:AD:DP:GL:GQ	0/1:29,22:45:-65.55,-13.57,-87.60:99
-chr1	4824523	rs6674586	T	A	163.54	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=48.28;MQ0=0;OQ=656.95;QD=12.17;SB=-109.40	GT:AD:DP:GL:GQ	0/1:27,27:47:-83.14,-14.16,-95.96:99
-chr1	4824573	rs6674680	T	C	13.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=52.32;MQ0=0;OQ=270.57;QD=5.11;SB=-156.88	GT:AD:DP:GL:GQ	0/1:35,18:46:-44.20,-13.86,-137.80:99
-chr1	4824574	.	G	A	7.24	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=52.42;MQ0=0;OQ=361.86;QD=6.83;SB=-143.57	GT:AD:DP:GL:GQ	0/1:34,19:46:-53.32,-13.85,-117.68:99
-chr1	4824682	rs12135493	G	A	249.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=51.42;MQ0=1;OQ=988.12;QD=12.83;SB=-444.35	GT:AD:DP:GL:GQ	0/1:44,32:73:-124.08,-21.99,-153.59:99
-chr1	4824703	rs6671779	A	G	149.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.56;MQ=45.45;MQ0=6;OQ=857.95;QD=10.46;SB=-366.21	GT:AD:DP:GL:GQ	0/1:48,33:70:-110.16,-21.08,-158.61:99
-chr1	4824716	rs6674795	T	A	84.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=5.06;MQ=43.80;MQ0=7;OQ=985.67;QD=11.60;SB=-441.50	GT:AD:DP:GL:GQ	0/1:51,34:73:-123.84,-21.98,-157.76:99
-chr1	4824850	rs36062377	G	T	24.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.62;MQ=51.81;MQ0=1;OQ=1235.06;QD=17.15;SB=-475.54	GT:AD:DP:GL:GQ	0/1:30,42:67:-146.97,-20.18,-98.26:99
-chr1	4825033	rs7529540	T	C	245.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.74;MQ0=8;OQ=558.43;QD=7.55;SB=-301.05	GT:AD:DP:GL:GQ	0/1:47,27:63:-78.11,-18.99,-158.23:99
-chr1	4825352	rs4559467	G	A	108.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.62;MQ=48.67;MQ0=0;OQ=560.80;QD=11.22;SB=-300.78	GT:AD:DP:GL:GQ	0/1:27,20:40:-71.42,-12.05,-75.01:99
-chr1	4825513	rs4638087	G	C	326.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1176.04;QD=19.60;SB=-421.03	GT:AD:DP:GL:GQ	0/1:27,33:59:-138.66,-17.78,-117.95:99
-chr1	4825553	rs4551566	C	G	30.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.33;MQ0=0;OQ=1250.51;QD=22.33;SB=-448.38	GT:AD:DP:GL:GQ	0/1:22,34:55:-144.91,-16.57,-96.90:99
-chr1	4826034	rs7529926	A	G	223.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.60;MQ0=0;OQ=1139.50;QD=13.57;SB=-533.50	GT:AD:DP:GL:GQ	0/1:44,39:83:-142.23,-25.00,-178.33:99
-chr1	4826162	rs7525613	C	T	13.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=59.36;MQ0=1;OQ=993.15;QD=10.80;SB=-409.28	GT:AD:DP:GL:GQ	0/1:59,33:90:-129.72,-27.12,-195.16:99
-chr1	4826345	rs2104305	G	T	184.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=57.85;MQ0=1;OQ=505.67;QD=12.64;SB=-209.45	GT:AD:DP:GL:GQ	0/1:21,19:39:-65.60,-11.75,-75.98:99
-chr1	4826423	rs2093767	G	A	138.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=58.83;MQ0=0;OQ=815.33;QD=15.68;SB=-288.73	GT:AD:DP:GL:GQ	0/1:27,25:52:-100.48,-15.67,-95.85:99
-chr1	4826585	rs2093766	C	T	86.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.52;MQ0=0;OQ=705.53;QD=13.07;SB=-332.40	GT:AD:DP:GL:GQ	0/1:31,23:54:-90.10,-16.27,-110.86:99
-chr1	4826810	rs10915643	T	G	203.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.12;MQ0=0;OQ=525.52;QD=11.94;SB=-258.86	GT:AD:DP:GL:GQ	0/1:23,21:42:-68.49,-12.65,-82.71:99
-chr1	4827586	rs55916988	A	T	25.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=889.58;QD=14.35;SB=-432.48	GT:AD:DP:GL:GQ	0/1:33,29:62:-110.92,-18.68,-123.75:99
-chr1	4827658	rs10915644	C	T	105.99	PASS	AC=1;AF=0.50;AN=2;DB;DP=104;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=60.00;MQ0=0;OQ=1865.95;QD=17.94;SB=-912.01	GT:AD:DP:GL:GQ	0/1:46,58:101:-220.30,-30.43,-168.62:99
-chr1	4828047	rs10915645	G	T	162.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.35;MQ0=0;OQ=1117.38;QD=13.97;SB=-570.65	GT:AD:DP:GL:GQ	0/1:41,39:77:-138.21,-23.19,-142.58:99
-chr1	4828218	rs10915646	T	C	280.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=59.65;MQ0=0;OQ=827.35;QD=15.32;SB=-429.21	GT:AD:DP:GL:GQ	0/1:26,28:54:-102.28,-16.26,-103.92:99
-chr1	4829521	rs7525315	A	G	34.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=437.24;QD=11.82;SB=-193.62	GT:AD:DP:GL:GQ	0/1:19,18:35:-57.55,-10.55,-75.26:99
-chr1	4829549	rs7511935	G	C	92.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=60.00;MQ0=0;OQ=512.56;QD=13.85;SB=-232.38	GT:AD:DP:GL:GQ	0/1:19,18:33:-64.49,-9.95,-73.26:99
-chr1	4829662	rs7512035	G	A	4.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=9.93;MQ=58.76;MQ0=0;OQ=838.03;QD=17.10;SB=-374.88	GT:AD:DP:GL:GQ	0/1:21,27:46:-104.45,-17.36,-74.24:99
-chr1	4830041	rs1886112	T	C	323.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.39;MQ0=0;OQ=754.42;QD=11.79;SB=-313.28	GT:AD:DP:GL:GQ	0/1:35,29:61:-97.11,-18.38,-135.74:99
-chr1	4830111	rs2411950	A	G	299.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=59.44;MQ0=0;OQ=788.01;QD=11.76;SB=-302.20	GT:AD:DP:GL:GQ	0/1:34,33:66:-101.98,-19.90,-134.57:99
-chr1	4831214	rs11588518	A	G	386.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=58.39;MQ0=0;OQ=816.62;QD=14.85;SB=-422.33	GT:AD:DP:GL:GQ	0/1:26,29:53:-100.91,-15.96,-102.18:99
-chr1	4832304	rs10915647	T	G	357.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=59.21;MQ0=0;OQ=992.87;QD=12.89;SB=-411.65	GT:AD:DP:GL:GQ	0/1:36,41:75:-125.17,-22.60,-131.25:99
-chr1	4833095	rs10489136	G	A	381.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=597.16;QD=11.94;SB=-271.12	GT:AD:DP:GL:GQ	0/1:30,20:49:-77.76,-14.76,-108.40:99
-chr1	4833385	rs11809159	G	A	313.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.57;MQ0=0;OQ=671.57;QD=12.44;SB=-350.34	GT:AD:DP:GL:GQ	0/1:33,21:52:-86.11,-15.67,-111.35:99
-chr1	4834568	rs12691490	G	A	57.53	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=59.19;MQ0=0;OQ=1072.80;QD=14.30;SB=-179.14	GT:AD:DP:GL:GQ	0/1:41,34:74:-132.86,-22.29,-148.17:99
-chr1	4834712	rs11810903	C	T	299.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.50;MQ0=0;OQ=847.25;QD=15.99;SB=-334.31	GT:AD:DP:GL:GQ	0/1:27,26:50:-103.07,-15.06,-90.22:99
-chr1	4835505	.	G	A	70.11	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.18;MQ0=2;OQ=1406.02;QD=19.00;SB=-566.58	GT:AD:DP:GL:GQ	0/1:33,41:71:-165.27,-21.39,-109.48:99
-chr1	4835574	rs60862815	A	G	389.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.44;MQ0=0;OQ=1406.97;QD=14.66;SB=-683.24	GT:AD:DP:GL:GQ	0/1:48,48:95:-172.59,-28.61,-196.25:99
-chr1	4835660	.	A	G	23.51	PASS	AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.01;MQ0=0;OQ=1833.96;QD=19.10;SB=-522.87	GT:AD:DP:GL:GQ	0/1:39,57:96:-215.59,-28.91,-159.74:99
-chr1	4837550	rs35283465	T	G	356.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1133.74;QD=16.67;SB=-504.82	GT:AD:DP:GL:GQ	0/1:30,38:68:-137.14,-20.48,-110.12:99
-chr1	4837913	rs10753390	T	C	137.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=2.60;MQ=60.00;MQ0=0;OQ=941.83;QD=14.72;SB=-459.61	GT:AD:DP:GL:GQ	0/1:30,34:62:-116.15,-18.68,-119.75:99
-chr1	4839426	rs942248	G	A	447.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=60.00;MQ0=0;OQ=1139.23;QD=16.75;SB=-553.39	GT:AD:DP:GL:GQ	0/1:34,34:68:-137.70,-20.50,-108.59:99
-chr1	4841270	rs10915651	A	G	240.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=57.66;MQ0=0;OQ=816.55;QD=11.66;SB=-378.12	GT:AD:DP:GL:GQ	0/1:39,31:68:-105.42,-20.48,-155.28:99
-chr1	4841714	rs4654463	A	C	478.61	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=555.94;QD=9.75;SB=-254.73	GT:AD:DP:GL:GQ	0/1:35,22:56:-75.74,-16.86,-132.35:99
-chr1	4844074	rs10733017	T	C	2.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=11.82;MQ=59.63;MQ0=0;OQ=699.51;QD=11.10;SB=-327.09	GT:AD:DP:GL:GQ	0/1:36,27:62:-91.91,-18.68,-144.88:99
-chr1	4844167	rs11576728	C	A	571.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=1050.49;QD=13.64;SB=-532.68	GT:AD:DP:GL:GQ	0/1:42,35:77:-131.52,-23.19,-153.03:99
-chr1	4844702	rs7543026	G	A	584.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.93;MQ0=0;OQ=948.11;QD=15.54;SB=-391.87	GT:AD:DP:GL:GQ	0/1:33,28:60:-116.18,-18.08,-104.09:99
-chr1	4845341	rs6658585	A	C	76.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=59.18;MQ0=0;OQ=1071.52;QD=16.74;SB=-367.56	GT:AD:DP:GL:GQ	0/1:26,38:62:-129.11,-18.67,-97.88:99
-chr1	4845498	rs12057393	G	A	364.71	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=12;HaplotypeScore=3.79;MQ=47.74;MQ0=0;QD=4.19;SB=-24.81	GT:AD:DP:GL:GQ	0/1:67,20:77:-62.95,-23.20,-211.18:99
-chr1	4845501	.	G	A	272.57	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=2;HaplotypeScore=5.43;MQ=47.58;MQ0=0;QD=3.17;SB=59.32	GT:AD:DP:GL:GQ	0/1:69,17:79:-54.34,-23.80,-226.78:99
-chr1	4845504	.	G	A	237.01	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=2;HaplotypeScore=5.58;MQ=47.42;MQ0=0;QD=2.79;SB=100.89	GT:AD:DP:GL:GQ	0/1:69,16:79:-50.79,-23.80,-233.92:99
-chr1	4846112	rs34320332	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=25.56;MQ=59.10;MQ0=1;OQ=980.42;QD=12.41;SB=-508.92	GT:AD:DP:GL:GQ	0/1:43,36:73:-123.31,-21.99,-148.19:99
-chr1	4846138	rs4141866	T	G	321.22	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1084.74;QD=12.91;SB=-515.88	GT:AD:DP:GL:GQ	0/1:44,39:81:-136.16,-24.40,-149.14:99
-chr1	4846537	rs2224810	C	T	118.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=60.00;MQ0=0;OQ=819.69;QD=11.71;SB=-407.37	GT:AD:DP:GL:GQ	0/1:43,26:69:-109.19,-23.93,-141.50:99
-chr1	4846628	rs2209160	C	T	102.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=6.02;MQ=59.71;MQ0=0;OQ=1103.05;QD=13.96;SB=-498.70	GT:AD:DP:GL:GQ	0/1:45,34:78:-137.10,-23.51,-139.74:99
-chr1	4847013	rs4654617	G	A	341.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.65;MQ=60.12;MQ0=0;OQ=1328.73;QD=14.44;SB=-558.05	GT:AD:DP:GL:GQ	0/1:51,41:91:-163.57,-27.42,-178.46:99
-chr1	4847234	rs4654618	G	A	257.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.79;MQ0=0;OQ=1473.23;QD=16.93;SB=-644.65	GT:AD:DP:GL:GQ	0/1:44,43:86:-176.51,-25.90,-155.83:99
-chr1	4847304	rs11576619	A	C	410.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1115.68;QD=12.54;SB=-555.85	GT:AD:DP:GL:GQ	0/1:50,39:89:-141.65,-26.80,-188.69:99
-chr1	4848245	rs10915655	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.04;HRun=13;HaplotypeScore=40.55;MQ=53.84;MQ0=0;OQ=783.98;QD=11.53;SB=-399.49	GT:AD:DP:GL:GQ	0/1:35,30:57:-98.55,-16.87,-112.34:99
-chr1	4848259	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=13;HaplotypeScore=8.75;MQ=53.39;MQ0=0;OQ=145.61;QD=2.24;SB=43.71	GT:AD:DP:GL:GQ	0/1:50,15:51:-33.22,-15.38,-143.27:99
-chr1	4848272	rs59534952	C	T	83.18	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.85;MQ=55.61;MQ0=0;OQ=567.99;QD=11.83;SB=-226.73	GT:AD:DP:GL:GQ	0/1:29,19:46:-73.94,-13.86,-98.14:99
-chr1	4849613	rs2224809	G	T	40.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=59.05;MQ0=0;OQ=753.24;QD=11.77;SB=-371.10	GT:AD:DP:GL:GQ	0/1:36,28:62:-97.28,-18.68,-118.15:99
-chr1	4851425	rs4654464	C	A	99.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=3;HaplotypeScore=1.30;MQ=59.74;MQ0=0;OQ=1201.43;QD=13.50;SB=-585.67	GT:AD:DP:GL:GQ	0/1:47,42:87:-149.63,-26.21,-164.62:99
-chr1	4851649	rs1544062	A	C	506.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=1031.53;QD=11.21;SB=-464.74	GT:AD:DP:GL:GQ	0/1:52,40:90:-133.54,-27.11,-194.44:99
-chr1	4852648	rs6664880	A	G	404.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=757.37;QD=15.15;SB=-338.35	GT:AD:DP:GL:GQ	0/1:21,29:49:-93.79,-14.77,-78.78:99
-chr1	4853388	rs16839786	G	T	224.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=53.58;MQ0=0;OQ=920.28;QD=16.43;SB=-211.55	GT:AD:DP:GL:GQ	0/1:26,30:55:-111.88,-16.57,-81.39:99
-chr1	4853673	rs61764897	T	A	731.06	Indel	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.62;MQ0=0;QD=11.25;SB=-257.66	GT:AD:DP:GL:GQ	0/1:39,26:64:-95.67,-19.28,-148.40:99
-chr1	4854729	rs11578197	G	A	258.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.65;MQ0=0;OQ=1050.33;QD=16.16;SB=-476.48	GT:AD:DP:GL:GQ	0/1:33,32:63:-127.30,-18.99,-107.48:99
-chr1	4855018	rs16839789	C	T	363.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.33;MQ0=0;OQ=1117.05;QD=14.70;SB=-538.76	GT:AD:DP:GL:GQ	0/1:39,37:73:-136.99,-22.00,-128.05:99
-chr1	4855722	rs6426446	C	T	346.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.43;MQ0=0;OQ=1302.13;QD=17.84;SB=-634.73	GT:AD:DP:GL:GQ	0/1:34,39:71:-154.89,-21.40,-105.41:99
-chr1	4855930	rs6426447	T	C	166.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.78;MQ0=0;OQ=489.14;QD=8.58;SB=-219.87	GT:AD:DP:GL:GQ	0/1:31,26:53:-68.18,-15.98,-120.90:99
-chr1	4856415	rs7547152	G	C	495.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=942.12;QD=15.20;SB=-441.90	GT:AD:DP:GL:GQ	0/1:35,27:61:-115.88,-18.38,-149.41:99
-chr1	4857229	rs58851741	C	T	459.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=966.78;QD=16.67;SB=-403.91	GT:AD:DP:GL:GQ	0/1:27,31:57:-117.15,-17.19,-83.93:99
-chr1	4857438	rs6663654	A	G	150.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=59.66;MQ0=0;OQ=1188.14;QD=17.73;SB=-597.99	GT:AD:DP:GL:GQ	0/1:26,41:63:-141.07,-18.98,-97.28:99
-chr1	4857938	rs4654466	T	G	14.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=2.02;MQ=60.00;MQ0=0;OQ=2439.19;QD=33.41;SB=-1032.90	GT:AD:DP:GL:GQ	1/1:0,73:72:-247.54,-21.70,-0.04:99
-chr1	4857962	rs4654620	T	C	617.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2216.51;QD=34.63;SB=-1013.85	GT:AD:DP:GL:GQ	1/1:0,64:63:-225.26,-18.98,-0.03:99
-chr1	4858133	rs12026056	C	T	160.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1391.17;QD=19.32;SB=-472.46	GT:AD:DP:GL:GQ	0/1:31,41:70:-163.49,-21.09,-105.37:99
-chr1	4858331	rs2411952	T	G	714.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2714.55;QD=33.93;SB=-941.23	GT:AD:DP:GL:GQ	1/1:0,80:78:-275.06,-23.49,-0.02:99
-chr1	4858799	rs10915656	A	G	325.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=541.63;QD=8.88;SB=-253.33	GT:AD:DP:GL:GQ	0/1:37,24:61:-75.83,-18.39,-146.51:99
-chr1	4859646	rs2031246	A	G	219.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.68;MQ0=0;OQ=1950.88;QD=29.12;SB=-966.30	GT:AD:DP:GL:GQ	1/1:0,67:62:-198.73,-18.70,-0.06:99
-chr1	4859671	.	T	C	13.11	PASS	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.64;MQ=59.06;MQ0=0;OQ=883.63;QD=12.81;SB=-329.17	GT:AD:DP:GL:GQ	0/1:37,32:67:-111.83,-20.19,-139.59:99
-chr1	4859954	rs34895557	G	T	206.38	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.25;MQ=59.24;MQ0=0;OQ=744.21;QD=13.53;SB=-251.43	GT:AD:DP:GL:GQ	0/1:28,27:52:-93.37,-15.67,-91.09:99
-chr1	4860771	rs1998542	A	G	287.69	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=1092.68;QD=14.57;SB=-569.57	GT:AD:DP:GL:GQ	0/1:37,38:74:-134.84,-22.29,-148.74:99
-chr1	4861394	rs12564397	A	T	437.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1000.40;QD=17.86;SB=-441.86	GT:AD:DP:GL:GQ	0/1:25,31:56:-120.19,-16.87,-93.72:99
-chr1	4861557	rs35411636	G	A	169.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.72;MQ0=0;OQ=1208.45;QD=18.04;SB=-440.97	GT:AD:DP:GL:GQ	0/1:30,37:64:-143.41,-19.28,-105.19:99
-chr1	4863429	.	C	T	229.25	PASS	AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1493.09;QD=17.36;SB=-728.57	GT:AD:DP:GL:GQ	0/1:41,45:85:-178.20,-25.60,-151.88:99
-chr1	4863497	rs7524606	G	A	427.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=60.00;MQ0=0;OQ=1511.71;QD=17.58;SB=-634.67	GT:AD:DP:GL:GQ	0/1:42,44:85:-180.06,-25.60,-147.35:99
-chr1	4863865	rs1980722	C	T	503.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3056.08;QD=40.21;SB=-645.86	GT:AD:DP:GL:GQ	1/1:0,76:76:-309.21,-22.89,-0.02:99
-chr1	4864428	rs11580747	G	C	245.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=59.63;MQ0=0;OQ=942.97;QD=14.97;SB=-334.34	GT:AD:DP:GL:GQ	0/1:36,27:61:-115.96,-18.38,-154.60:99
-chr1	4865012	rs17345545	A	C	595.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1349.09;QD=16.06;SB=-446.78	GT:AD:DP:GL:GQ	0/1:36,48:82:-162.89,-24.70,-132.81:99
-chr1	4865105	rs57839229	A	T	93.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.14;MQ=59.34;MQ0=0;OQ=1132.50;QD=17.98;SB=-522.98	GT:AD:DP:GL:GQ	0/1:27,36:62:-135.21,-18.67,-99.92:99
-chr1	4865351	rs4654467	A	G	16.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.01;HRun=0;HaplotypeScore=4.70;MQ=59.78;MQ0=0;OQ=2675.08;QD=31.11;SB=-1049.26	GT:AD:DP:GL:GQ	1/1:0,84:83:-271.15,-24.72,-0.06:99
-chr1	4866087	rs10915662	A	T	363.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.38;MQ0=0;OQ=1323.19;QD=19.75;SB=-593.71	GT:AD:DP:GL:GQ	0/1:27,40:67:-155.78,-20.18,-103.30:99
-chr1	4866400	rs12064982	G	A	103.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=60.00;MQ0=0;OQ=973.54;QD=18.03;SB=-247.54	GT:AD:DP:GL:GQ	0/1:25,29:53:-116.61,-15.97,-79.83:99
-chr1	4866918	rs12031154	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=24.82;MQ=54.18;MQ0=0;OQ=935.81;QD=11.27;SB=-380.06	GT:AD:DP:GL:GQ	0/1:43,40:73:-118.86,-22.00,-142.88:99
-chr1	4866921	rs12026933	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.03;HRun=18;HaplotypeScore=19.70;MQ=54.46;MQ0=0;OQ=1554.81;QD=17.87;SB=-743.33	GT:AD:DP:GL:GQ	0/1:33,51:81:-182.28,-23.51,-100.13:99
-chr1	4867019	rs11803696	A	G	583.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1173.47;QD=12.90;SB=-430.96	GT:AD:DP:GL:GQ	0/1:48,43:89:-147.44,-26.81,-193.48:99
-chr1	4867070	rs6672145	C	T	154.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=58.49;MQ0=0;OQ=2949.30;QD=37.81;SB=-1148.66	GT:AD:DP:GL:GQ	1/1:0,78:74:-298.53,-22.29,-0.02:99
-chr1	4867333	rs10737414	C	T	577.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=3774.90;QD=40.59;SB=-1090.96	GT:AD:DP:GL:GQ	1/1:0,93:91:-376.49,-27.41,-0.02:99
-chr1	4867363	rs7533707	A	T	409.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=3186.97;QD=36.63;SB=-1277.61	GT:AD:DP:GL:GQ	1/1:0,87:84:-322.30,-25.30,-0.02:99
-chr1	4867599	rs7520488	G	C	176.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.17;MQ=58.98;MQ0=0;OQ=1260.85;QD=19.70;SB=-431.87	GT:AD:DP:GL:GQ	0/1:29,35:63:-148.35,-18.98,-119.77:99
-chr1	4867836	rs10753391	C	T	252.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=58.82;MQ0=0;OQ=2192.96;QD=37.17;SB=-1090.48	GT:AD:DP:GL:GQ	1/1:0,58:57:-222.90,-17.17,-0.02:99
-chr1	4869610	rs10753392	A	G	2.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=12.66;MQ=58.15;MQ0=0;OQ=2566.56;QD=33.77;SB=-1061.07	GT:AD:DP:GL:GQ	1/1:1,75:72:-260.27,-21.69,-0.02:99
-chr1	4869715	rs10753393	A	G	57.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=55.52;MQ0=0;OQ=2164.34;QD=32.79;SB=-1098.81	GT:AD:DP:GL:GQ	1/1:0,66:62:-220.05,-18.68,-0.03:99
-chr1	4869773	rs10737415	G	A	79.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=59.56;MQ0=0;OQ=867.20;QD=16.36;SB=-154.19	GT:AD:DP:GL:GQ	0/1:24,29:51:-105.37,-15.37,-83.26:99
-chr1	4869802	rs10753394	T	C	256.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=60.00;MQ0=0;OQ=1715.99;QD=30.64;SB=-772.60	GT:AD:DP:GL:GQ	1/1:0,56:56:-175.25,-16.90,-0.06:99
-chr1	4869982	rs10915666	G	A	210.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.75;MQ0=0;OQ=1883.17;QD=36.21;SB=-696.34	GT:AD:DP:GL:GQ	1/1:0,50:49:-191.92,-14.76,-0.02:99
-chr1	4870346	rs6675549	G	A	170.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.29;MQ=57.91;MQ0=0;OQ=1211.32;QD=19.23;SB=-547.10	GT:AD:DP:GL:GQ	0/1:28,35:62:-143.11,-18.69,-84.61:99
-chr1	4870866	rs60530383	A	G	40.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=2.54;MQ=60.00;MQ0=0;OQ=824.16;QD=14.46;SB=-305.38	GT:AD:DP:GL:GQ	0/1:28,29:56:-102.57,-16.87,-109.85:99
-chr1	4871367	rs12034557	C	T	506.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1054.17;QD=18.82;SB=-458.82	GT:AD:DP:GL:GQ	0/1:25,31:55:-125.27,-16.57,-85.80:99
-chr1	4871442	rs11584441	T	G	5.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=1.95;MQ=57.60;MQ0=1;OQ=392.05;QD=7.00;SB=-149.17	GT:AD:DP:GL:GQ	0/1:35,21:54:-58.76,-16.27,-123.74:99
-chr1	4871485	rs12034590	C	T	165.34	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.35;MQ0=0;OQ=1273.44;QD=19.90;SB=-540.59	GT:AD:DP:GL:GQ	0/1:26,38:62:-149.30,-18.68,-91.11:99
-chr1	4871683	rs10915667	G	A	252.09	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=59.56;MQ0=0;OQ=868.47;QD=16.70;SB=-440.82	GT:AD:DP:GL:GQ	0/1:26,26:50:-105.19,-15.06,-84.43:99
-chr1	4872046	rs41524347	T	G	240.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=531.74;QD=7.28;SB=-248.55	GT:AD:DP:GL:GQ	0/1:47,26:72:-78.15,-21.69,-181.81:99
-chr1	4872269	rs7549400	A	G	96.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=58.82;MQ0=1;OQ=894.68;QD=13.76;SB=-387.61	GT:AD:DP:GL:GQ	0/1:34,31:64:-112.04,-19.29,-126.05:99
-chr1	4872967	rs11805753	C	T	385.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.68;MQ0=0;OQ=1214.98;QD=17.11;SB=-484.47	GT:AD:DP:GL:GQ	0/1:35,36:70:-145.88,-21.10,-111.38:99
-chr1	4873161	rs10915668	C	T	676.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2872.25;QD=39.89;SB=-1024.38	GT:AD:DP:GL:GQ	1/1:0,72:72:-290.83,-21.69,-0.02:99
-chr1	4874423	rs10915669	T	C	15.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=59.06;MQ0=0;OQ=1979.91;QD=28.69;SB=-648.94	GT:AD:DP:GL:GQ	1/1:0,69:62:-201.63,-18.69,-0.05:99
-chr1	4875425	rs10157835	A	G	332.29	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.11;MQ0=0;OQ=1038.14;QD=16.48;SB=-539.00	GT:AD:DP:GL:GQ	0/1:28,35:63:-126.07,-18.98,-114.44:99
-chr1	4877097	rs12565275	C	G	395.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.57;MQ0=0;OQ=611.15;QD=11.32;SB=-239.42	GT:AD:DP:GL:GQ	0/1:33,21:54:-80.69,-16.29,-144.98:99
-chr1	4877956	rs2898849	G	C	124.47	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=59.05;MQ0=0;OQ=3110.04;QD=42.60;SB=-1016.57	GT:AD:DP:GL:GQ	1/1:0,72:72:-314.62,-21.70,-0.03:99
-chr1	4878047	rs12564793	G	C	328.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.70;MQ0=0;OQ=765.57;QD=12.15;SB=-303.80	GT:AD:DP:GL:GQ	0/1:37,26:61:-98.24,-18.40,-159.57:99
-chr1	4880219	rs11585512	A	G	134.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=59.43;MQ0=0;OQ=632.04;QD=9.58;SB=-314.90	GT:AD:DP:GL:GQ	0/1:35,31:61:-84.88,-18.39,-132.31:99
-chr1	4880279	rs11583660	G	A	590.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.47;MQ0=0;OQ=976.49;QD=13.95;SB=-412.71	GT:AD:DP:GL:GQ	0/1:40,30:69:-121.72,-20.78,-142.93:99
-chr1	4880552	rs12035499	G	A	202.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=1072.23;QD=21.02;SB=-458.86	GT:AD:DP:GL:GQ	0/1:20,31:50:-125.57,-15.06,-66.05:99
-chr1	4881363	rs942245	A	G	135.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2549.24;QD=35.41;SB=-1267.52	GT:AD:DP:GL:GQ	1/1:0,72:71:-258.53,-21.38,-0.02:99
-chr1	4882246	rs6698453	G	A	17.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=1152.61;QD=20.22;SB=-564.76	GT:AD:DP:GL:GQ	0/1:24,33:57:-135.71,-17.17,-88.68:99
-chr1	4883339	rs12043326	T	C	559.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=840.35;QD=11.84;SB=-378.86	GT:AD:DP:GL:GQ	0/1:36,35:67:-107.51,-20.19,-138.68:99
-chr1	4883603	rs10915672	C	A	302.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=917.14;QD=15.81;SB=-477.86	GT:AD:DP:GL:GQ	0/1:28,30:58:-112.47,-17.47,-92.34:99
-chr1	4883658	rs4141867	T	C	369.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=1888.75;QD=33.14;SB=-779.12	GT:AD:DP:GL:GQ	1/1:0,57:54:-192.48,-16.27,-0.02:99
-chr1	4883885	rs6702564	G	A	362.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1074.71;QD=17.62;SB=-363.86	GT:AD:DP:GL:GQ	0/1:29,32:61:-129.13,-18.37,-105.65:99
-chr1	4884232	rs1535733	T	C	178.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.20;MQ0=1;OQ=1010.15;QD=15.08;SB=-514.02	GT:AD:DP:GL:GQ	0/1:32,35:66:-124.18,-19.88,-130.89:99
-chr1	4884527	rs6666792	C	A	73.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=1017.13;QD=16.14;SB=-354.42	GT:AD:DP:GL:GQ	0/1:29,34:62:-123.67,-18.68,-100.25:99
-chr1	4884742	rs2093765	A	G	735.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2661.52;QD=35.97;SB=-1066.10	GT:AD:DP:GL:GQ	1/1:0,74:74:-269.76,-22.29,-0.02:99
-chr1	4885223	rs6667433	C	T	727.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1991.58;QD=36.21;SB=-991.61	GT:AD:DP:GL:GQ	1/1:1,54:54:-205.04,-16.28,-2.29:99
-chr1	4885428	rs10753395	A	C	505.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.54;MQ0=0;OQ=2504.61;QD=34.79;SB=-1254.33	GT:AD:DP:GL:GQ	1/1:0,72:71:-254.07,-21.38,-0.02:99
-chr1	4885629	rs10915675	C	T	373.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=59.20;MQ0=0;OQ=841.96;QD=14.52;SB=-410.79	GT:AD:DP:GL:GQ	0/1:31,27:56:-104.36,-16.88,-95.31:99
-chr1	4886330	rs2411956	G	T	352.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.52;MQ=59.33;MQ0=0;OQ=915.03;QD=14.76;SB=-419.13	GT:AD:DP:GL:GQ	0/1:29,33:59:-112.57,-17.78,-93.60:99
-chr1	4886464	rs2898852	G	A	427.35	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.69;MQ0=0;OQ=1311.14;QD=17.48;SB=-649.71	GT:AD:DP:GL:GQ	0/1:36,39:74:-156.69,-22.29,-124.22:99
-chr1	4887284	rs6666453	T	G	591.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=819.61;QD=13.22;SB=-407.64	GT:AD:DP:GL:GQ	0/1:31,31:61:-103.62,-18.37,-115.39:99
-chr1	4887891	rs61271613	G	A	361.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.32;MQ0=0;OQ=1029.14;QD=15.13;SB=-413.79	GT:AD:DP:GL:GQ	0/1:37,31:68:-126.69,-20.50,-120.37:99
-chr1	4887923	rs12567162	A	C	597.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1047.19;QD=16.36;SB=-475.28	GT:AD:DP:GL:GQ	0/1:27,37:63:-126.98,-18.97,-102.36:99
-chr1	4888122	rs11584727	G	A	343.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.62;MQ0=0;OQ=960.03;QD=15.74;SB=-414.74	GT:AD:DP:GL:GQ	0/1:31,30:58:-116.76,-17.47,-107.44:99
-chr1	4888166	rs10799275	T	C	449.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=759.70;QD=14.07;SB=-405.31	GT:AD:DP:GL:GQ	0/1:28,26:54:-95.52,-16.26,-116.08:99
-chr1	4888741	rs6667349	A	G	162.92	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=1.54;MQ=60.00;MQ0=0;OQ=906.44;QD=15.63;SB=-403.28	GT:AD:DP:GL:GQ	0/1:26,32:57:-111.10,-17.17,-105.01:99
-chr1	4891078	rs10915677	A	C	501.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=791.64;QD=10.84;SB=-393.76	GT:AD:DP:GL:GQ	0/1:42,31:72:-104.14,-21.69,-153.97:99
-chr1	4891278	rs10753396	A	G	48.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=59.27;MQ0=0;OQ=705.13;QD=13.83;SB=-249.29	GT:AD:DP:GL:GQ	0/1:25,26:49:-88.56,-14.77,-92.96:99
-chr1	4892541	rs6675977	C	T	304.31	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.24;MQ0=0;OQ=854.23;QD=15.53;SB=-341.48	GT:AD:DP:GL:GQ	0/1:29,26:53:-104.68,-15.97,-89.47:99
-chr1	4893597	rs9426511	G	A	254.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=59.63;MQ0=0;OQ=950.24;QD=15.08;SB=-473.01	GT:AD:DP:GL:GQ	0/1:32,31:60:-116.38,-18.07,-112.58:99
-chr1	4894312	rs12409253	G	A	317.80	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.37;MQ0=0;OQ=1178.40;QD=17.85;SB=-478.44	GT:AD:DP:GL:GQ	0/1:31,35:66:-141.01,-19.88,-111.62:99
-chr1	4894801	rs12044092	G	A	352.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.46;MQ0=0;OQ=1019.91;QD=14.36;SB=-390.41	GT:AD:DP:GL:GQ	0/1:36,34:67:-125.46,-20.19,-124.85:99
-chr1	4894886	rs12049256	T	C	300.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=59.40;MQ0=0;OQ=829.82;QD=11.85;SB=-433.52	GT:AD:DP:GL:GQ	0/1:40,30:69:-107.05,-20.79,-158.76:99
-chr1	4895006	rs11588368	G	A	587.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=820.91;QD=16.10;SB=-424.82	GT:AD:DP:GL:GQ	0/1:26,25:51:-100.74,-15.37,-86.84:99
-chr1	4895035	rs11591047	T	C	208.88	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=456.13;QD=9.70;SB=-221.38	GT:AD:DP:GL:GQ	0/1:26,21:45:-62.46,-13.57,-101.40:99
-chr1	4895453	rs10915681	C	A	168.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=58.81;MQ0=0;OQ=612.66;QD=11.14;SB=-214.30	GT:AD:DP:GL:GQ	0/1:31,24:51:-79.91,-15.36,-100.29:99
-chr1	4895802	rs10915682	G	C	444.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.75;MQ0=0;OQ=770.78;QD=14.82;SB=-369.80	GT:AD:DP:GL:GQ	0/1:29,22:52:-98.80,-18.44,-131.37:99
-chr1	4896045	rs10915683	A	G	284.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.68;MQ0=0;OQ=528.33;QD=8.95;SB=-128.57	GT:AD:DP:GL:GQ	0/1:38,21:56:-72.98,-16.87,-140.47:99
-chr1	4896086	rs4654470	A	G	55.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.44;MQ=59.62;MQ0=0;OQ=494.74;QD=8.11;SB=-214.66	GT:AD:DP:GL:GQ	0/1:40,20:59:-73.24,-20.48,-157.99:99
-chr1	4896521	rs12037632	T	C	412.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.62;MQ0=0;OQ=681.99;QD=11.18;SB=-282.28	GT:AD:DP:GL:GQ	0/1:32,29:59:-89.26,-17.78,-128.31:99
-chr1	4896528	.	C	T	86.04	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=59.65;MQ0=0;OQ=946.41;QD=14.34;SB=-376.12	GT:AD:DP:GL:GQ	0/1:36,30:66:-117.81,-19.89,-127.23:99
-chr1	4896632	rs12040043	G	A	26.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=5.45;MQ=59.30;MQ0=0;OQ=1274.10;QD=19.30;SB=-654.71	GT:AD:DP:GL:GQ	0/1:28,38:65:-150.27,-19.58,-99.74:99
-chr1	4897223	rs9426467	A	G	376.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=1052.07;QD=15.47;SB=-512.94	GT:AD:DP:GL:GQ	0/1:31,37:66:-128.37,-19.88,-120.24:99
-chr1	4897430	.	C	G	135.89	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1675.35;QD=20.68;SB=-845.32	GT:AD:DP:GL:GQ	0/1:35,46:79:-194.65,-23.83,-135.28:99
-chr1	4898245	rs9426468	A	G	643.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=1735.77;QD=32.14;SB=-669.84	GT:AD:DP:GL:GQ	1/1:0,54:54:-177.21,-16.28,-0.04:99
-chr1	4899159	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=3;HaplotypeScore=6.05;MQ=46.85;MQ0=0;OQ=120.33;QD=2.27;SB=65.24	GT:AD:DP:GL:GQ	0/1:32,21:41:-27.68,-12.36,-128.17:99
-chr1	4899332	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=18.81;MQ=41.26;MQ0=0;OQ=75.19;QD=0.84;SB=83.30	GT:AD:DP:GL:GQ	0/1:74,15:82:-35.50,-24.70,-289.36:99
-chr1	4899338	rs61764934	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=1;HaplotypeScore=53.72;MQ=39.00;MQ0=0;OQ=98.84;QD=0.96;SB=80.29	GT:AD:DP:GL:GQ	0/1:81,22:86:-39.08,-25.91,-300.72:99
-chr1	4899353	.	A	G	53.98	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=1;HaplotypeScore=114.06;MQ=38.02;MQ0=0;QD=0.50;SB=80.29	GT:AD:DP:GL:GQ	0/1:92,15:73:-30.68,-22.00,-253.39:86.82
-chr1	4899362	.	C	T	241.59	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=82.55;MQ=36.98;MQ0=0;QD=2.20;SB=83.28	GT:AD:DP:GL:GQ	0/1:96,14:84:-52.74,-25.30,-256.82:99
-chr1	4899363	.	A	G	254.83	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=89.52;MQ=36.48;MQ0=0;QD=2.38;SB=77.27	GT:AD:DP:GL:GQ	0/1:93,14:79:-52.57,-23.80,-259.03:99
-chr1	4899383	.	A	G	183.41	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=35.87;MQ=33.65;MQ0=0;QD=1.73;SB=12.92	GT:AD:DP:GL:GQ	0/1:63,43:62:-40.31,-18.69,-193.47:99
-chr1	4899387	.	G	A	263.62	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=43.90;MQ=33.13;MQ0=0;QD=2.66;SB=77.22	GT:AD:DP:GL:GQ	0/1:87,12:64:-48.92,-19.28,-184.60:99
-chr1	4899389	.	C	T	535.44	SnpCluster	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=33.38;MQ0=0;QD=5.76;SB=-42.73	GT:AD:DP:GL:GQ	0/1:50,43:64:-76.11,-19.28,-160.16:99
-chr1	4899390	.	A	G	274.25	SnpCluster	AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=32.97;MQ0=0;QD=2.98;SB=-22.76	GT:AD:DP:GL:GQ	0/1:49,43:57:-47.88,-17.17,-174.44:99
-chr1	4899396	.	A	G	365.84	SnpCluster	AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=32.55;MQ0=0;QD=4.02;SB=-65.46	GT:AD:DP:GL:GQ	0/1:57,34:58:-57.34,-17.48,-166.05:99
-chr1	4899406	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=33.13;MQ=34.08;MQ0=0;OQ=385.33;QD=4.76;SB=65.23	GT:AD:DP:GL:GQ	0/1:64,17:63:-60.79,-18.98,-180.67:99
-chr1	4899410	.	A	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=33.12;MQ=33.37;MQ0=0;OQ=280.21;QD=3.64;SB=-127.85	GT:AD:DP:GL:GQ	0/1:61,16:68:-51.79,-20.49,-213.95:99
-chr1	4899418	rs61764937	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=24.96;MQ=35.60;MQ0=0;OQ=416.78;QD=5.56;SB=-32.80	GT:AD:DP:GL:GQ	0/1:58,17:68:-65.44,-20.48,-183.51:99
-chr1	4899454	.	A	G	399.94	SnpCluster	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=32.10;MQ=40.74;MQ0=0;QD=4.49;SB=-98.78	GT:AD:DP:GL:GQ	0/1:68,21:81:-67.68,-24.40,-246.97:99
-chr1	4899458	.	A	G	39.06	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=68.26;MQ=40.42;MQ0=0;QD=0.40;SB=83.30	GT:AD:DP:GL:GQ	0/1:88,9:79:-30.98,-23.79,-291.61:71.90
-chr1	4899460	.	A	G	118.03	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=72.96;MQ=40.46;MQ0=0;QD=1.18;SB=77.27	GT:AD:DP:GL:GQ	0/1:89,11:76:-37.98,-22.90,-265.09:99
-chr1	4899462	.	C	T	72.49	SnpCluster	AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=1;HaplotypeScore=75.80;MQ=40.64;MQ0=0;QD=0.70;SB=-1.28	GT:AD:DP:GL:GQ	0/1:95,8:73:-32.52,-21.98,-238.14:99
-chr1	4899467	.	A	G	135.65	SnpCluster	AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=98.40;MQ=41.18;MQ0=0;QD=1.23;SB=-29.35	GT:AD:DP:GL:GQ	0/1:96,14:86:-42.76,-25.91,-295.60:99
-chr1	4899468	rs12745382	A	T	958.03	SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.00;HRun=0;HaplotypeScore=107.35;MQ=41.23;MQ0=0;QD=8.71;SB=-316.45	GT:AD:DP:GL:GQ	0/1:64,46:95:-127.70,-28.61,-236.36:99
-chr1	4899487	rs12745394	A	G	720.77	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=218;Dels=0.00;HRun=0;HaplotypeScore=160.10;MQ=38.29;MQ0=1;QD=3.31;SB=-244.39	GT:AD:DP:GL:GQ	0/1:161,57:163:-124.48,-49.12,-501.88:99
-chr1	4899493	.	T	C	260.40	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=303.17;MQ=38.85;MQ0=1;QD=1.05;SB=56.79	GT:AD:DP:GL:GQ	0/1:215,32:203:-90.48,-61.15,-713.61:99
-chr1	4899494	.	G	A	174.70	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=310.33;MQ=39.06;MQ0=1;QD=0.69;SB=21.87	GT:AD:DP:GL:GQ	0/1:226,26:203:-81.91,-61.15,-646.58:99
-chr1	4899498	.	A	G	872.52	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=250.40;MQ=38.78;MQ0=1;QD=3.46;SB=78.26	GT:AD:DP:GL:GQ	0/1:199,53:211:-154.09,-63.56,-686.66:99
-chr1	4899500	rs12724550	G	A	2189.95	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=250;Dels=0.00;HRun=0;HaplotypeScore=245.89;MQ=38.85;MQ0=1;QD=8.76;SB=-1087.26	GT:AD:DP:GL:GQ	0/1:149,76:205:-341.91,-119.63,-478.96:99
-chr1	4899501	.	T	G	179.31	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=1;HaplotypeScore=255.20;MQ=39.12;MQ0=1;QD=0.71;SB=215.88	GT:AD:DP:GL:GQ	0/1:226,25:204:-82.66,-61.45,-660.80:99
-chr1	4899507	.	A	G	466.12	DPFilter;Indel;SnpCluster	AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=0;HaplotypeScore=236.48;MQ=39.39;MQ0=1;QD=1.84;SB=155.66	GT:AD:DP:GL:GQ	0/1:206,47:211:-113.47,-63.57,-712.04:99
-chr1	4899538	.	A	G	1219.52	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=176.47;MQ=39.21;MQ0=0;QD=4.73;SB=-218.54	GT:AD:DP:GL:GQ	0/1:190,68:212:-189.10,-63.86,-642.45:99
-chr1	4899540	.	A	G	894.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=255;Dels=0.00;HRun=0;HaplotypeScore=176.74;MQ=39.03;MQ0=0;QD=3.51;SB=-184.63	GT:AD:DP:GL:GQ	0/1:181,72:195:-154.12,-61.41,-609.10:99
-chr1	4899547	rs61764939	G	A	1318.72	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DB;DP=260;Dels=0.00;HRun=0;HaplotypeScore=220.06;MQ=39.48;MQ0=0;QD=5.07;SB=-35.22	GT:AD:DP:GL:GQ	0/1:180,80:174:-187.61,-52.45,-416.57:99
-chr1	4899554	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=215.32;MQ=39.44;MQ0=0;OQ=71.48;QD=0.28;SB=245.79	GT:AD:DP:GL:GQ	0/1:233,19:178:-64.05,-53.62,-575.35:99
-chr1	4899560	.	A	G	527.43	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=0;HaplotypeScore=182.32;MQ=39.84;MQ0=0;QD=2.16;SB=62.05	GT:AD:DP:GL:GQ	0/1:191,43:207:-132.12,-76.10,-688.26:99
-chr1	4899566	.	C	T	228.85	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=0;HaplotypeScore=151.86;MQ=39.79;MQ0=0;QD=0.99;SB=29.83	GT:AD:DP:GL:GQ	0/1:207,23:173:-78.29,-52.12,-551.64:99
-chr1	4899567	.	A	G	591.79	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=146.70;MQ=39.85;MQ0=0;QD=2.64;SB=-287.04	GT:AD:DP:GL:GQ	0/1:172,52:165:-112.16,-49.70,-538.18:99
-chr1	4899578	.	G	A	586.91	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=1;HaplotypeScore=122.95;MQ=41.57;MQ0=0;QD=3.51;SB=-235.54	GT:AD:DP:GL:GQ	0/1:137,30:123:-99.03,-37.05,-345.51:99
-chr1	4899580	.	G	A	442.86	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=0;HaplotypeScore=120.46;MQ=41.82;MQ0=0;QD=2.75;SB=-225.49	GT:AD:DP:GL:GQ	0/1:135,26:120:-83.72,-36.15,-349.19:99
-chr1	4899586	.	T	C	690.02	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=129.55;MQ=42.82;MQ0=0;QD=4.63;SB=-75.61	GT:AD:DP:GL:GQ	0/1:103,46:129:-111.14,-38.86,-403.04:99
-chr1	4899587	.	G	A	484.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=116.82;MQ=42.67;MQ0=0;QD=3.32;SB=137.44	GT:AD:DP:GL:GQ	0/1:119,26:124:-89.06,-37.35,-358.44:99
-chr1	4899593	.	C	T	11.57	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=60.92;MQ=43.18;MQ0=0;QD=0.10;SB=158.52	GT:AD:DP:GL:GQ	0/1:100,17:99:-34.23,-29.82,-323.42:44.09
-chr1	4899594	.	A	G	11.09	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=60.92;MQ=43.00;MQ0=0;QD=0.10;SB=173.58	GT:AD:DP:GL:GQ	0/1:99,17:103:-35.39,-31.03,-369.44:43.58
-chr1	4899610	.	C	T	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.15;MQ=43.55;MQ0=0;OQ=197.17;QD=2.22;SB=-29.37	GT:AD:DP:GL:GQ	0/1:75,14:86:-48.93,-25.93,-238.79:99
-chr1	4899946	rs4654471	T	C	43.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=5.91;MQ=59.14;MQ0=0;OQ=975.13;QD=18.06;SB=-440.01	GT:AD:DP:GL:GQ	0/1:20,34:52:-116.46,-15.67,-76.61:99
-chr1	4902227	rs7555212	C	T	596.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=2926.83;QD=40.65;SB=-1218.62	GT:AD:DP:GL:GQ	1/1:0,72:72:-296.28,-21.69,-0.02:99
-chr1	4902317	rs6426367	G	T	224.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=59.74;MQ0=0;OQ=3145.50;QD=36.16;SB=-1581.61	GT:AD:DP:GL:GQ	1/1:0,87:85:-318.15,-25.60,-0.02:99
-chr1	4902486	rs6426368	C	T	717.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2201.20;QD=38.62;SB=-1092.00	GT:AD:DP:GL:GQ	1/1:0,57:56:-223.72,-16.87,-0.02:99
-chr1	4902573	rs6669905	T	C	700.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=2165.11;QD=36.09;SB=-859.36	GT:AD:DP:GL:GQ	1/1:0,60:59:-220.11,-17.77,-0.01:99
-chr1	4903007	rs6678838	G	T	279.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=56.35;MQ0=0;OQ=1768.51;QD=34.01;SB=-813.84	GT:AD:DP:GL:GQ	1/1:0,52:50:-180.45,-15.06,-0.02:99
-chr1	4903027	rs12142452	G	T	0	FDRtranche2.00to10.00+	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.05;HRun=16;HaplotypeScore=13.19;MQ=49.10;MQ0=0;OQ=2384.03;QD=31.37;SB=-1040.48	GT:AD:DP:GL:GQ	1/1:0,72:70:-242.01,-20.48,-0.02:99
-chr1	4903364	rs9286971	G	A	258.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=52.70;MQ0=0;OQ=2159.66;QD=37.89;SB=-926.32	GT:AD:DP:GL:GQ	1/1:0,57:54:-219.56,-16.27,-0.01:99
-chr1	4904108	rs10799141	A	G	488.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=2393.63;QD=33.71;SB=-1173.70	GT:AD:DP:GL:GQ	1/1:0,71:69:-242.98,-20.79,-0.03:99
-chr1	4904115	rs10753341	C	T	707.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.70;MQ0=0;OQ=2995.63;QD=39.42;SB=-1442.45	GT:AD:DP:GL:GQ	1/1:0,76:76:-303.17,-22.90,-0.02:99
-chr1	4904188	rs10753342	G	A	611.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3529.10;QD=39.65;SB=-1221.14	GT:AD:DP:GL:GQ	1/1:0,89:89:-351.91,-26.82,-0.03:99
-chr1	4905340	rs7531490	A	G	249.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.93;MQ0=0;OQ=2004.17;QD=30.83;SB=-867.03	GT:AD:DP:GL:GQ	1/1:0,65:64:-204.06,-19.31,-0.06:99
-chr1	4905635	rs7534281	T	C	82.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=59.65;MQ0=0;OQ=2315.03;QD=35.08;SB=-1175.74	GT:AD:DP:GL:GQ	1/1:0,66:65:-235.11,-19.58,-0.02:99
-chr1	4905656	rs7542048	G	A	139.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.63;MQ0=0;OQ=2472.89;QD=39.25;SB=-1234.03	GT:AD:DP:GL:GQ	1/1:0,62:62:-250.89,-18.68,-0.02:99
-chr1	4906196	rs6426371	T	C	169.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.85;MQ0=0;OQ=1914.58;QD=30.88;SB=-835.64	GT:AD:DP:GL:GQ	1/1:0,62:59:-195.09,-17.79,-0.04:99
-chr1	4906502	rs6426372	G	C	538.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=3170.49;QD=42.84;SB=-1473.31	GT:AD:DP:GL:GQ	1/1:0,73:73:-320.65,-21.99,-0.02:99
-chr1	4907095	rs10915296	T	C	149.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.07;MQ=58.97;MQ0=0;OQ=3030.02;QD=34.83;SB=-1495.63	GT:AD:DP:GL:GQ	1/1:0,87:84:-306.61,-25.30,-0.03:99
-chr1	4907407	rs6702058	C	T	201.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.72;MQ0=0;OQ=3144.08;QD=38.34;SB=-1502.68	GT:AD:DP:GL:GQ	1/1:0,81:79:-318.01,-23.80,-0.02:99
-chr1	4907813	rs6677619	G	T	634.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2646.47;QD=36.25;SB=-1071.58	GT:AD:DP:GL:GQ	1/1:0,73:72:-268.25,-21.68,-0.02:99
-chr1	4909109	rs7413385	A	G	73.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.33;MQ0=0;OQ=950.25;QD=33.94;SB=-350.81	GT:AD:DP:GL:GQ	1/1:0,28:27:-98.62,-8.13,-0.01:81.24
-chr1	4909713	rs7413847	A	G	78.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=58.99;MQ0=0;OQ=2491.44;QD=34.13;SB=-1130.80	GT:AD:DP:GL:GQ	1/1:0,72:69:-252.75,-20.78,-0.02:99
-chr1	4909933	rs7411727	C	T	614.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2836.35;QD=38.85;SB=-1407.70	GT:AD:DP:GL:GQ	1/1:0,73:71:-287.24,-21.39,-0.02:99
-chr1	4910002	rs10915297	T	C	288.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.37;MQ0=0;OQ=2563.56;QD=35.12;SB=-1064.10	GT:AD:DP:GL:GQ	1/1:0,73:72:-259.97,-21.69,-0.02:99
-chr1	4910067	rs10799142	G	A	129.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.55;MQ0=0;OQ=2372.23;QD=38.89;SB=-1035.39	GT:AD:DP:GL:GQ	1/1:0,61:60:-240.82,-18.08,-0.02:99
-chr1	4910738	rs6426373	T	C	29.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=4;HaplotypeScore=1.33;MQ=59.62;MQ0=0;OQ=2095.65;QD=34.35;SB=-1007.72	GT:AD:DP:GL:GQ	1/1:0,61:59:-213.17,-17.77,-0.02:99
-chr1	4910848	rs6664358	C	T	341.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=2577.25;QD=39.65;SB=-933.73	GT:AD:DP:GL:GQ	1/1:0,65:64:-261.33,-19.28,-0.02:99
-chr1	4911242	rs9426489	G	T	99.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=59.58;MQ0=0;OQ=1563.55;QD=28.43;SB=-641.98	GT:AD:DP:GL:GQ	1/1:2,53:45:-159.96,-13.56,-0.02:99
-chr1	4911262	rs9426490	A	G	133.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=1.03;MQ=60.00;MQ0=0;OQ=2076.79;QD=34.05;SB=-972.82	GT:AD:DP:GL:GQ	1/1:0,61:59:-211.29,-17.77,-0.02:99
-chr1	4911898	rs7522655	C	T	592.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2724.61;QD=40.67;SB=-1189.07	GT:AD:DP:GL:GQ	1/1:0,67:67:-276.06,-20.18,-0.01:99
-chr1	4911961	rs7544541	G	A	150.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=59.39;MQ0=0;OQ=2947.98;QD=38.79;SB=-1404.70	GT:AD:DP:GL:GQ	1/1:1,75:74:-298.40,-22.29,-0.02:99
-chr1	4911968	rs7544542	G	A	170.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.72;MQ0=0;OQ=3112.64;QD=37.96;SB=-1553.08	GT:AD:DP:GL:GQ	1/1:0,82:78:-314.87,-23.50,-0.02:99
-chr1	4912150	rs9426469	G	A	193	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.69;MQ0=0;OQ=2864.62;QD=38.19;SB=-1302.32	GT:AD:DP:GL:GQ	1/1:0,75:72:-290.07,-21.69,-0.02:99
-chr1	4913505	rs9426491	A	G	394.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=3121.73;QD=35.88;SB=-1295.55	GT:AD:DP:GL:GQ	1/1:0,87:85:-315.78,-25.60,-0.02:99
-chr1	4914443	rs6692780	T	C	192.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=59.62;MQ0=0;OQ=3691.18;QD=35.84;SB=-1586.36	GT:AD:DP:GL:GQ	1/1:1,102:102:-368.12,-30.72,-0.04:99
-chr1	4914588	rs6701289	G	A	24.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=1.20;MQ=58.58;MQ0=0;OQ=3206.41;QD=40.08;SB=-1396.85	GT:AD:DP:GL:GQ	1/1:0,80:78:-324.24,-23.49,-0.01:99
-chr1	4915327	rs6693486	A	T	79.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=59.04;MQ0=0;OQ=2495.92;QD=36.70;SB=-983.49	GT:AD:DP:GL:GQ	1/1:0,68:67:-253.20,-20.19,-0.02:99
-chr1	4915704	rs6656223	G	A	492.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1843.82;QD=39.23;SB=-720.96	GT:AD:DP:GL:GQ	1/1:0,47:46:-187.98,-13.86,-0.01:99
-chr1	4917206	rs12098076	G	A	321.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.37;MQ0=0;OQ=1024.17;QD=17.36;SB=-411.74	GT:AD:DP:GL:GQ	0/1:27,32:58:-123.18,-17.47,-93.16:99
-chr1	4918178	rs9426470	C	A	210.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2272.14;QD=33.41;SB=-999.37	GT:AD:DP:GL:GQ	1/1:0,68:66:-230.83,-19.89,-0.03:99
-chr1	4918637	rs6696925	G	C	480.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1020.90;QD=16.74;SB=-452.39	GT:AD:DP:GL:GQ	0/1:33,28:59:-123.15,-17.78,-134.82:99
-chr1	4920934	rs7546019	A	G	7.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=55.17;MQ0=0;OQ=1312.69;QD=25.74;SB=-576.91	GT:AD:DP:GL:GQ	1/1:0,51:42:-134.90,-12.67,-0.04:99
-chr1	4920939	rs10799143	A	G	1.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=9.55;MQ=55.37;MQ0=0;OQ=685.84;QD=14.29;SB=-109.82	GT:AD:DP:GL:GQ	1/1:0,38:24:-75.74,-10.17,-3.57:66.02
-chr1	4920972	rs10753343	C	T	150.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.67;MQ0=0;OQ=1219.60;QD=34.85;SB=-488.14	GT:AD:DP:GL:GQ	1/1:0,34:33:-125.56,-9.95,-0.02:99
-chr1	4921030	rs10799144	A	G	161.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=58.57;MQ0=0;OQ=1984.77;QD=33.64;SB=-769.10	GT:AD:DP:GL:GQ	1/1:0,59:57:-202.08,-17.17,-0.02:99
-chr1	4921060	rs10799145	T	G	245.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=58.90;MQ0=0;OQ=1759.60;QD=29.82;SB=-867.69	GT:AD:DP:GL:GQ	1/1:0,59:58:-179.61,-17.49,-0.06:99
-chr1	4921319	.	C	T	71.66	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=56.87;MQ0=0;OQ=1537.50;QD=20.78;SB=-754.34	GT:AD:DP:GL:GQ	0/1:29,45:71:-178.43,-21.40,-86.91:99
-chr1	4921542	.	G	A	297.10	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=827.15;QD=15.32;SB=-385.90	GT:AD:DP:GL:GQ	0/1:29,25:54:-102.27,-16.28,-92.99:99
-chr1	4921651	.	A	G	14.60	PASS	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=59.42;MQ0=0;OQ=1167.54;QD=16.22;SB=-587.69	GT:AD:DP:GL:GQ	0/1:31,41:71:-141.43,-21.39,-125.09:99
-chr1	4921748	.	T	C	1.07	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=7.77;MQ=59.39;MQ0=0;OQ=610.60;QD=12.72;SB=-231.30	GT:AD:DP:GL:GQ	0/1:26,22:47:-78.51,-14.17,-96.88:99
-chr1	4921801	.	A	G	290.73	PASS	AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=740.93;QD=13.98;SB=-339.17	GT:AD:DP:GL:GQ	0/1:24,29:53:-93.36,-15.98,-94.97:99
-chr1	4921915	rs12118118	A	G	141.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.65;MQ0=0;OQ=641.25;QD=9.87;SB=-176.55	GT:AD:DP:GL:GQ	0/1:39,26:63:-86.39,-18.98,-152.81:99
-chr1	4922627	rs12119864	T	C	423.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=58.63;MQ0=0;OQ=1289.06;QD=15.17;SB=-556.56	GT:AD:DP:GL:GQ	0/1:33,52:81:-156.60,-24.41,-132.69:99
-chr1	4923016	rs6426374	A	G	591.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=2408.23;QD=29.37;SB=-1057.43	GT:AD:DP:GL:GQ	1/1:0,82:76:-244.48,-22.92,-0.07:99
-chr1	4923151	.	C	T	132.84	PASS	AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=908.76;QD=16.23;SB=-453.45	GT:AD:DP:GL:GQ	0/1:28,28:56:-111.04,-16.88,-89.80:99
-chr1	4923249	.	A	G	76.65	PASS	AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.95;MQ0=0;OQ=491.85;QD=11.18;SB=-227.32	GT:AD:DP:GL:GQ	0/1:25,19:38:-63.92,-11.45,-77.07:99
-chr1	4923272	.	A	G	41.93	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.16;MQ0=0;OQ=549.57;QD=9.99;SB=-300.17	GT:AD:DP:GL:GQ	0/1:32,23:55:-74.82,-16.58,-127.48:99
-chr1	4923290	rs6702660	A	G	624.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1543.54;QD=30.27;SB=-737.76	GT:AD:DP:GL:GQ	1/1:0,51:50:-157.99,-15.08,-0.05:99
-chr1	4923916	.	G	A	53.20	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=57.14;MQ0=0;OQ=1330.08;QD=17.97;SB=-412.89	GT:AD:DP:GL:GQ	0/1:35,39:72:-157.99,-21.70,-107.79:99
-chr1	4923977	.	T	C	92.93	PASS	AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.31;MQ0=0;OQ=878.08;QD=13.94;SB=-397.92	GT:AD:DP:GL:GQ	0/1:29,34:62:-109.78,-18.69,-109.67:99
-chr1	4924245	rs7523398	G	T	624.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.01;HRun=0;HaplotypeScore=0.00;MQ=52.50;MQ0=0;OQ=2976.14;QD=35.01;SB=-1222.44	GT:AD:DP:GL:GQ	1/1:0,84:82:-301.22,-24.40,-0.02:99
-chr1	4924289	.	C	T	145.80	Indel	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=20.35;MQ=47.42;MQ0=2;QD=1.80;SB=-17.33	GT:AD:DP:GL:GQ	0/1:69,12:76:-40.75,-22.89,-240.21:99
-chr1	4924318	.	A	G	303.69	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.53;MQ0=0;OQ=1150.10;QD=15.13;SB=-395.92	GT:AD:DP:GL:GQ	0/1:29,47:72:-140.00,-21.70,-115.03:99
-chr1	4924353	.	A	G	6.39	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.52;MQ=59.31;MQ0=0;OQ=1199.85;QD=16.00;SB=-524.06	GT:AD:DP:GL:GQ	0/1:32,42:73:-145.26,-21.99,-127.06:99
-chr1	4924370	.	T	G	76.39	PASS	AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=60.52;MQ0=0;OQ=1415.60;QD=18.15;SB=-500.81	GT:AD:DP:GL:GQ	0/1:31,47:78:-168.34,-23.49,-113.39:99
-chr1	4924651	rs140619	A	C	98.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.45;MQ=58.44;MQ0=0;OQ=1008.29;QD=14.00;SB=-504.32	GT:AD:DP:GL:GQ	0/1:36,36:69:-124.90,-20.78,-122.36:99
-chr1	4924659	rs140620	C	G	66.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=3.55;MQ=58.47;MQ0=0;OQ=1278.05;QD=17.51;SB=-626.38	GT:AD:DP:GL:GQ	0/1:37,36:72:-152.80,-21.71,-149.62:99
-chr1	4924842	rs3101217	G	A	427.04	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=60.00;MQ0=0;OQ=946.64;QD=12.46;SB=-438.36	GT:AD:DP:GL:GQ	0/1:44,31:68:-118.44,-20.49,-128.20:99
-chr1	4924889	rs3101218	G	C	576.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1334.27;QD=16.68;SB=-624.99	GT:AD:DP:GL:GQ	0/1:41,39:77:-159.91,-23.20,-177.20:99
-chr1	4924920	rs3101219	T	C	593.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1041.98;QD=16.28;SB=-455.18	GT:AD:DP:GL:GQ	0/1:28,36:64:-126.76,-19.28,-110.51:99
-chr1	4924999	rs3101220	G	C	298.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.20;MQ0=0;OQ=811.79;QD=14.00;SB=-233.01	GT:AD:DP:GL:GQ	0/1:32,26:57:-101.64,-17.18,-138.57:99
-chr1	4925039	rs3128678	A	G	0.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=4;HaplotypeScore=3.38;MQ=59.22;MQ0=0;OQ=1744.26;QD=32.30;SB=-816.04	GT:AD:DP:GL:GQ	1/1:0,54:50:-178.03,-15.06,-0.02:99
-chr1	4925077	rs3101221	C	A	25.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.44;MQ=58.58;MQ0=0;OQ=647.61;QD=11.56;SB=-325.00	GT:AD:DP:GL:GQ	0/1:30,26:49:-82.82,-14.77,-78.79:99
-chr1	4925169	rs3128679	A	G	107.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=535.15;QD=8.92;SB=-144.42	GT:AD:DP:GL:GQ	0/1:36,24:59:-74.58,-17.78,-140.21:99
-chr1	4925429	rs3128680	G	A	469.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=766.43;QD=14.46;SB=-348.86	GT:AD:DP:GL:GQ	0/1:29,24:53:-95.89,-15.97,-104.44:99
-chr1	4925430	rs3101222	C	G	427.23	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=771.83;QD=15.13;SB=-299.97	GT:AD:DP:GL:GQ	0/1:28,23:50:-95.55,-15.08,-110.57:99
-chr1	4925635	rs3101223	A	G	252.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.74;MQ0=0;OQ=1091.51;QD=12.26;SB=-378.11	GT:AD:DP:GL:GQ	0/1:48,41:87:-138.64,-26.21,-194.64:99
-chr1	4926101	rs3128681	G	A	350.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.68;MQ0=0;OQ=1174.87;QD=16.55;SB=-610.10	GT:AD:DP:GL:GQ	0/1:35,35:70:-141.86,-21.09,-114.49:99
-chr1	4926299	rs1017724	C	T	190.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1174.58;QD=15.06;SB=-383.10	GT:AD:DP:GL:GQ	0/1:41,37:77:-143.94,-23.19,-149.98:99
-chr1	4926372	rs1017726	A	G	298.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=887.74;QD=17.07;SB=-423.28	GT:AD:DP:GL:GQ	0/1:22,30:52:-107.72,-15.67,-84.02:99
-chr1	4926476	rs3128682	A	G	470.65	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=981.70;QD=13.27;SB=-502.91	GT:AD:DP:GL:GQ	0/1:33,41:71:-122.87,-21.41,-123.57:99
-chr1	4926532	rs3128683	G	T	372.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.69;MQ0=0;OQ=1069.82;QD=14.26;SB=-471.94	GT:AD:DP:GL:GQ	0/1:37,38:72:-131.95,-21.69,-128.03:99
-chr1	4926586	rs34841047	T	C	307.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.74;MQ0=0;OQ=1407.30;QD=15.64;SB=-662.64	GT:AD:DP:GL:GQ	0/1:42,48:89:-170.82,-26.81,-167.25:99
-chr1	4926613	rs7547938	A	C	101.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.79;MQ0=0;OQ=2670.20;QD=30.00;SB=-1246.34	GT:AD:DP:GL:GQ	1/1:1,88:87:-270.68,-26.22,-0.07:99
-chr1	4926617	.	G	A	38.65	PASS	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.78;MQ0=0;OQ=1691.34;QD=19.90;SB=-782.69	GT:AD:DP:GL:GQ	0/1:36,49:84:-197.72,-25.30,-133.23:99
-chr1	4926705	rs10799146	C	G	149.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.64;MQ0=0;OQ=2201.93;QD=42.34;SB=-980.37	GT:AD:DP:GL:GQ	1/1:0,52:52:-223.80,-15.67,-0.02:99
-chr1	4926719	.	T	C	99.55	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.60;MQ0=0;OQ=721.00;QD=12.65;SB=-331.93	GT:AD:DP:GL:GQ	0/1:26,31:55:-91.96,-16.58,-103.71:99
-chr1	4926770	.	T	G	92.62	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=58.93;MQ0=0;OQ=842.91;QD=13.82;SB=-346.83	GT:AD:DP:GL:GQ	0/1:28,33:58:-105.05,-17.47,-101.93:99
-chr1	4926781	rs10915300	G	A	186.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=58.91;MQ0=0;OQ=2257.64;QD=37.63;SB=-1055.32	GT:AD:DP:GL:GQ	1/1:0,60:57:-229.37,-17.17,-0.02:99
-chr1	4927339	rs6426375	C	A	293.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.63;MQ0=0;OQ=1104.83;QD=17.54;SB=-437.22	GT:AD:DP:GL:GQ	0/1:25,38:59:-131.54,-17.77,-79.77:99
-chr1	4927361	rs12122012	G	C	449.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=855.62;QD=14.50;SB=-302.94	GT:AD:DP:GL:GQ	0/1:34,25:57:-106.02,-17.18,-140.73:99
-chr1	4927449	rs12129823	C	A	265.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=58.95;MQ0=0;OQ=867.88;QD=14.00;SB=-380.76	GT:AD:DP:GL:GQ	0/1:32,30:60:-108.15,-18.08,-97.33:99
-chr1	4927847	rs12122183	G	A	490.19	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1239.90;QD=16.31;SB=-577.98	GT:AD:DP:GL:GQ	0/1:38,38:75:-149.87,-22.60,-137.70:99
-chr1	4928324	rs10799147	T	G	316.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.64;MQ0=0;OQ=672.70;QD=12.94;SB=-277.80	GT:AD:DP:GL:GQ	0/1:27,25:51:-85.91,-15.36,-101.41:99
-chr1	4928782	.	A	T	20.70	PASS	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.98;MQ0=0;OQ=748.61;QD=18.26;SB=-256.98	GT:AD:DP:GL:GQ	0/1:17,24:41:-90.49,-12.35,-66.37:99
-chr1	4930115	rs10799148	T	G	517.72	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2291.16;QD=34.71;SB=-1027.09	GT:AD:DP:GL:GQ	1/1:0,66:65:-232.72,-19.58,-0.02:99
-chr1	4930427	rs34645017	G	C	291.45	PASS	AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=722.42;QD=16.05;SB=-202.61	GT:AD:DP:GL:GQ	0/1:25,20:45:-89.08,-13.56,-109.77:99
-chr1	4930735	rs11578909	A	G	280.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.36;MQ0=0;OQ=698.77;QD=12.05;SB=-374.99	GT:AD:DP:GL:GQ	0/1:29,28:57:-90.34,-17.18,-117.72:99
-chr1	4931239	rs10799149	G	A	641.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=2438.74;QD=39.98;SB=-916.20	GT:AD:DP:GL:GQ	1/1:0,61:60:-247.47,-18.07,-0.01:99
-chr1	4931421	rs7518523	A	G	261.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.88;MQ0=0;OQ=2083.34;QD=31.09;SB=-1042.40	GT:AD:DP:GL:GQ	1/1:0,67:65:-211.96,-19.60,-0.05:99
-chr1	4931997	rs10753344	T	C	618.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2888.62;QD=33.98;SB=-1001.71	GT:AD:DP:GL:GQ	1/1:0,85:82:-292.48,-24.71,-0.04:99
-chr1	4932316	rs12127329	G	A	183.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=2411.54;QD=39.53;SB=-1136.02	GT:AD:DP:GL:GQ	1/1:0,61:61:-244.76,-18.38,-0.02:99
-chr1	4932881	rs11585724	C	T	291.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.24;MQ0=0;OQ=985.86;QD=16.16;SB=-484.11	GT:AD:DP:GL:GQ	0/1:30,31:59:-119.65,-17.78,-92.67:99
-chr1	4932899	rs56016205	G	C	205.73	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=58.78;MQ0=0;OQ=942.89;QD=16.54;SB=-283.52	GT:AD:DP:GL:GQ	0/1:30,27:56:-114.45,-16.88,-128.26:99
-chr1	4933102	rs56190527	G	A	17.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=7.39;MQ=59.07;MQ0=0;OQ=754.79;QD=15.10;SB=-398.92	GT:AD:DP:GL:GQ	0/1:26,24:48:-93.22,-14.46,-90.86:99
-chr1	4933190	rs56216708	T	C	104.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.13;MQ0=0;OQ=1884.00;QD=35.55;SB=-879.00	GT:AD:DP:GL:GQ	1/1:0,53:53:-192.00,-15.97,-0.02:99
-chr1	4933296	.	G	A	768.22	SnpCluster	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.45;MQ0=0;QD=12.59;SB=-376.12	GT:AD:DP:GL:GQ	0/1:35,26:58:-97.59,-17.48,-110.76:99
-chr1	4933297	.	C	T	815.45	SnpCluster	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.45;MQ0=0;QD=13.37;SB=-431.91	GT:AD:DP:GL:GQ	0/1:35,26:61:-103.20,-18.37,-126.35:99
-chr1	4933303	.	G	A	803.12	SnpCluster	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.37;MQ0=0;QD=13.39;SB=-365.85	GT:AD:DP:GL:GQ	0/1:35,25:58:-101.08,-17.48,-105.94:99
-chr1	4933521	rs7535462	G	A	371.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1957.02;QD=39.14;SB=-986.02	GT:AD:DP:GL:GQ	1/1:0,50:49:-199.30,-14.76,-0.01:99
-chr1	4933673	.	C	G	6.69	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=58.23;MQ0=0;OQ=1494.10;QD=22.64;SB=-505.26	GT:AD:DP:GL:GQ	0/1:26,40:63:-171.68,-18.99,-100.63:99
-chr1	4934014	rs12128545	G	A	43.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.66;MQ0=0;OQ=1421.27;QD=20.90;SB=-664.71	GT:AD:DP:GL:GQ	0/1:27,41:67:-165.59,-20.18,-95.71:99
-chr1	4934078	rs12136209	C	G	149.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.61;MQ=60.00;MQ0=0;OQ=1636.42;QD=21.82;SB=-832.32	GT:AD:DP:GL:GQ	0/1:31,44:75:-189.53,-22.60,-132.33:99
-chr1	4934416	rs12126894	T	G	441.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.57;MQ0=0;OQ=586.00;QD=11.49;SB=-304.83	GT:AD:DP:GL:GQ	0/1:29,22:51:-77.25,-15.36,-105.02:99
-chr1	4935048	rs10915303	A	G	334.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=51.50;MQ0=0;OQ=770.15;QD=12.84;SB=-364.97	GT:AD:DP:GL:GQ	0/1:27,33:52:-95.98,-15.68,-87.76:99
-chr1	4935474	rs34001007	G	A	343.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=962.36;QD=16.88;SB=-495.13	GT:AD:DP:GL:GQ	0/1:27,30:56:-116.40,-16.88,-86.00:99
-chr1	4935789	rs12128035	T	C	226.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=58.94;MQ0=0;OQ=796.37;QD=12.64;SB=-306.28	GT:AD:DP:GL:GQ	0/1:34,29:62:-101.60,-18.68,-137.85:99
-chr1	4936034	rs6689050	G	C	388.76	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1874.06;QD=42.59;SB=-652.91	GT:AD:DP:GL:GQ	1/1:0,44:44:-191.00,-13.26,-0.01:99
-chr1	4936094	rs12757902	G	A	302.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.62;MQ0=0;OQ=578.28;QD=11.80;SB=-268.20	GT:AD:DP:GL:GQ	0/1:27,21:43:-74.09,-12.98,-70.80:99
-chr1	4936362	rs12126016	G	T	367.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.41;MQ0=0;OQ=1064.42;QD=14.99;SB=-543.63	GT:AD:DP:GL:GQ	0/1:34,37:71:-131.11,-21.39,-120.19:99
-chr1	4936409	rs11581023	G	A	329.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=58.70;MQ0=0;OQ=1088.63;QD=16.49;SB=-413.38	GT:AD:DP:GL:GQ	0/1:32,34:63:-131.13,-18.99,-102.39:99
-chr1	4936482	rs12122541	A	G	353.13	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.04;MQ0=0;OQ=684.77;QD=12.45;SB=-247.32	GT:AD:DP:GL:GQ	0/1:27,28:52:-87.43,-15.67,-100.04:99
-chr1	4936602	rs11584985	C	T	191.63	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=59.29;MQ0=0;OQ=1088.30;QD=18.45;SB=-387.41	GT:AD:DP:GL:GQ	0/1:25,34:57:-129.30,-17.18,-77.34:99
-chr1	4936637	rs898335	T	G	589.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2347.69;QD=35.57;SB=-808.10	GT:AD:DP:GL:GQ	1/1:0,66:66:-238.37,-19.88,-0.02:99
-chr1	4937911	rs12739724	G	A	135.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=59.34;MQ0=0;OQ=1173.07;QD=20.58;SB=-518.55	GT:AD:DP:GL:GQ	0/1:24,33:57:-137.76,-17.17,-89.96:99
-chr1	4937953	rs6666618	A	C	126.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=60.00;MQ0=0;OQ=1008.55;QD=15.28;SB=-391.76	GT:AD:DP:GL:GQ	0/1:30,36:65:-123.72,-19.58,-111.64:99
-chr1	4939240	rs1841241	A	G	358.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.68;MQ0=0;OQ=900.69;QD=12.34;SB=-390.90	GT:AD:DP:GL:GQ	0/1:37,36:72:-115.05,-21.70,-146.81:99
-chr1	4939654	rs6660626	C	G	245.03	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.55;MQ0=0;OQ=1495.04;QD=18.01;SB=-651.03	GT:AD:DP:GL:GQ	0/1:41,42:81:-177.21,-24.42,-163.44:99
-chr1	4940611	.	A	G	75.27	PASS	AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.50;MQ0=0;OQ=761.25;QD=16.55;SB=-322.41	GT:AD:DP:GL:GQ	0/1:18,28:44:-92.67,-13.26,-69.31:99
-chr1	4941180	rs12138041	C	G	147.56	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.43;MQ0=0;OQ=1446.36;QD=22.25;SB=-675.09	GT:AD:DP:GL:GQ	0/1:27,38:64:-167.20,-19.28,-114.12:99
-chr1	4941754	rs6426376	A	C	0.05	FDRtranche0.10to1.00	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=6;HaplotypeScore=1.65;MQ=58.89;MQ0=0;OQ=2125.54;QD=33.74;SB=-942.08	GT:AD:DP:GL:GQ	1/1:0,63:61:-216.16,-18.37,-0.02:99
-chr1	4942581	.	C	G	69.18	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.19;MQ0=0;OQ=1081.86;QD=18.98;SB=-432.32	GT:AD:DP:GL:GQ	0/1:28,29:57:-128.65,-17.18,-121.65:99
-chr1	4942801	rs12132419	G	A	594.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1256.99;QD=16.76;SB=-497.49	GT:AD:DP:GL:GQ	0/1:35,40:73:-150.98,-21.99,-126.45:99
-chr1	4943594	rs1563791	C	A	403.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.68;MQ0=0;OQ=828.65;QD=15.63;SB=-357.20	GT:AD:DP:GL:GQ	0/1:25,28:53:-102.11,-15.96,-89.65:99
-chr1	4943942	rs10737391	T	A	518.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=2837.87;QD=37.84;SB=-993.50	GT:AD:DP:GL:GQ	1/1:0,75:74:-287.39,-22.29,-0.02:99
-chr1	4943949	rs6674570	C	G	129.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=3029.36;QD=43.28;SB=-1059.65	GT:AD:DP:GL:GQ	1/1:0,70:69:-306.54,-20.79,-0.02:99
-chr1	4943976	rs6689766	T	C	365.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=56.77;MQ0=0;OQ=827.54;QD=14.03;SB=-391.26	GT:AD:DP:GL:GQ	0/1:29,30:57:-103.21,-17.17,-110.62:99
-chr1	4943997	rs6698166	G	T	369.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.73;MQ0=0;OQ=860.15;QD=13.87;SB=-411.14	GT:AD:DP:GL:GQ	0/1:31,31:60:-107.37,-18.08,-104.72:99
-chr1	4943998	rs6698167	G	A	353.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.73;MQ0=0;OQ=1051.24;QD=16.96;SB=-519.06	GT:AD:DP:GL:GQ	0/1:30,32:61:-126.79,-18.38,-103.11:99
-chr1	4944360	rs12131010	A	G	342.06	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.85;MQ0=0;OQ=760.68;QD=9.88;SB=-317.87	GT:AD:DP:GL:GQ	0/1:43,34:75:-101.96,-22.60,-172.57:99
-chr1	4944890	rs1106586	G	A	276.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.59;MQ0=0;OQ=802.40;QD=14.33;SB=-392.78	GT:AD:DP:GL:GQ	0/1:30,26:55:-100.10,-16.58,-95.63:99
-chr1	4945646	rs898336	G	C	25.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.72;MQ0=0;OQ=4154.41;QD=43.28;SB=-1921.01	GT:AD:DP:GL:GQ	1/1:0,96:94:-414.44,-28.32,-0.03:99
-chr1	4945654	rs7417805	T	C	207.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=101;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.30;MQ0=0;OQ=3685.03;QD=36.49;SB=-1843.78	GT:AD:DP:GL:GQ	1/1:0,101:100:-367.50,-30.12,-0.02:99
-chr1	4946090	rs12046931	C	T	231	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=56.28;MQ0=0;OQ=1030.23;QD=13.56;SB=-511.04	GT:AD:DP:GL:GQ	0/1:44,32:74:-128.62,-22.31,-131.20:99
-chr1	4946898	rs6679312	A	G	627.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=2846.93;QD=36.04;SB=-1277.52	GT:AD:DP:GL:GQ	1/1:0,79:79:-288.30,-23.79,-0.02:99
-chr1	4947277	.	A	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.31;MQ=58.55;MQ0=0;OQ=58.76;QD=0.92;SB=83.26	GT:AD:DP:GL:GQ	0/1:39,25:47:-23.33,-14.17,-133.19:91.60
-chr1	4947969	rs716671	G	T	362.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=59.37;MQ0=0;OQ=959.61;QD=14.54;SB=-385.78	GT:AD:DP:GL:GQ	0/1:32,34:63:-118.22,-18.98,-106.13:99
-chr1	4948484	rs7541612	T	C	301.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.16;MQ0=0;OQ=2459.32;QD=34.16;SB=-1006.88	GT:AD:DP:GL:GQ	1/1:0,72:70:-249.54,-21.08,-0.02:99
-chr1	4948794	rs10737392	A	C	185.94	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2094.20;QD=29.50;SB=-992.36	GT:AD:DP:GL:GQ	1/1:0,71:69:-213.07,-20.80,-0.07:99
-chr1	4951092	rs12725971	A	G	439.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.52;MQ0=0;OQ=1026.84;QD=13.16;SB=-423.90	GT:AD:DP:GL:GQ	0/1:43,35:78:-129.46,-23.49,-174.67:99
-chr1	4951570	rs6683624	C	T	353.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=59.06;MQ0=0;OQ=1065.83;QD=15.45;SB=-486.02	GT:AD:DP:GL:GQ	0/1:35,34:67:-130.05,-20.19,-121.88:99
-chr1	4953123	rs7418901	T	C	620.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2650.80;QD=31.56;SB=-1309.87	GT:AD:DP:GL:GQ	1/1:0,84:83:-268.73,-25.03,-0.06:99
-chr1	4955464	rs1459754	T	C	197.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.56;MQ0=0;OQ=2710.14;QD=31.88;SB=-1351.75	GT:AD:DP:GL:GQ	1/1:0,85:84:-274.67,-25.33,-0.07:99
-chr1	4956424	rs12566071	T	C	456.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.68;MQ0=0;OQ=1092.05;QD=27.30;SB=-412.16	GT:AD:DP:GL:GQ	1/1:0,40:36:-112.83,-10.86,-0.04:99
-chr1	4956725	rs12047194	C	T	71.14	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=60.00;MQ0=0;OQ=1049.88;QD=16.93;SB=-178.21	GT:AD:DP:GL:GQ	0/1:29,33:61:-126.65,-18.37,-103.04:99
-chr1	4957085	.	G	A	6.71	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.62;MQ0=0;OQ=1318.00;QD=21.61;SB=-441.83	GT:AD:DP:GL:GQ	0/1:23,38:60:-153.16,-18.08,-75.01:99
-chr1	4957708	rs9701766	C	T	287.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.24;MQ0=0;OQ=1921.26;QD=34.93;SB=-917.67	GT:AD:DP:GL:GQ	1/1:0,55:50:-195.73,-15.07,-0.02:99
-chr1	4957732	rs12134477	T	G	328.37	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=59.35;MQ0=0;OQ=737.05;QD=11.52;SB=-389.76	GT:AD:DP:GL:GQ	0/1:34,30:62:-95.67,-18.68,-123.44:99
-chr1	4960336	rs9286972	T	C	80.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=3;HaplotypeScore=0.87;MQ=59.38;MQ0=0;OQ=2352.51;QD=35.11;SB=-877.01	GT:AD:DP:GL:GQ	1/1:0,67:65:-238.86,-19.58,-0.02:99
-chr1	4960363	rs9286973	A	G	217.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=58.74;MQ0=0;OQ=2328.65;QD=33.27;SB=-776.20	GT:AD:DP:GL:GQ	1/1:0,68:66:-236.47,-19.88,-0.02:99
-chr1	4960544	rs10158116	T	C	435.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=930.68;QD=33.24;SB=-423.17	GT:AD:DP:GL:GQ	1/1:0,28:27:-96.66,-8.13,-0.01:81.23
-chr1	4961077	rs1380469	C	T	600.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3571.25;QD=40.58;SB=-1432.72	GT:AD:DP:GL:GQ	1/1:0,88:87:-356.13,-26.20,-0.02:99
-chr1	4961379	rs10158288	T	C	503.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2541.28;QD=30.99;SB=-793.00	GT:AD:DP:GL:GQ	1/1:0,82:80:-257.79,-24.13,-0.07:99
-chr1	4963153	rs10915307	G	A	69.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=1.45;MQ=59.07;MQ0=0;OQ=713.61;QD=14.27;SB=-252.29	GT:AD:DP:GL:GQ	0/1:25,25:45:-88.21,-13.57,-68.76:99
-chr1	4964065	rs10737393	G	C	566.31	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1749.68;QD=40.69;SB=-797.25	GT:AD:DP:GL:GQ	1/1:0,43:42:-178.57,-12.66,-0.02:99
-chr1	4964532	rs28667637	T	C	501.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1316.20;QD=16.05;SB=-509.69	GT:AD:DP:GL:GQ	0/1:33,49:82:-159.62,-24.71,-131.78:99
-chr1	4964976	rs12027167	C	T	376.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.50;MQ0=0;OQ=1085.57;QD=14.47;SB=-544.31	GT:AD:DP:GL:GQ	0/1:42,33:75:-134.44,-22.60,-148.57:99
-chr1	4965052	rs28444318	G	A	401.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=1204.51;QD=18.82;SB=-457.96	GT:AD:DP:GL:GQ	0/1:28,36:62:-142.42,-18.68,-88.92:99
-chr1	4965449	rs10915308	C	T	686.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2543.15;QD=38.53;SB=-937.28	GT:AD:DP:GL:GQ	1/1:0,66:64:-257.91,-19.28,-0.02:99
-chr1	4965556	rs12123277	C	A	350.21	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=722.36;QD=9.63;SB=-338.31	GT:AD:DP:GL:GQ	0/1:48,27:74:-97.81,-22.29,-174.39:99
-chr1	4965577	rs1380470	A	G	738.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2392.77;QD=36.25;SB=-1196.76	GT:AD:DP:GL:GQ	1/1:0,66:66:-242.88,-19.88,-0.01:99
-chr1	4965710	rs10915309	G	A	204.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.60;MQ0=0;OQ=2319.12;QD=39.98;SB=-986.30	GT:AD:DP:GL:GQ	1/1:0,58:58:-235.51,-17.47,-0.02:99
-chr1	4968070	rs10915310	A	G	390.05	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.15;MQ0=0;OQ=1179.59;QD=14.39;SB=-449.76	GT:AD:DP:GL:GQ	0/1:38,44:81:-145.65,-24.41,-157.59:99
-chr1	4968105	rs10799151	A	G	154.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.73;MQ=58.89;MQ0=0;OQ=1031.60;QD=12.74;SB=-406.80	GT:AD:DP:GL:GQ	0/1:40,41:78:-129.95,-23.51,-157.15:99
-chr1	4968710	.	C	G	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=53.48;MQ0=0;OQ=64.03;QD=1.56;SB=-49.12	GT:AD:DP:GL:GQ	0/1:36,5:37:-20.84,-11.15,-143.24:96.86
-chr1	4968815	rs10915311	A	C	217.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.03;MQ0=0;OQ=2004.53;QD=29.92;SB=-920.78	GT:AD:DP:GL:GQ	1/1:0,66:64:-204.09,-19.29,-0.06:99
-chr1	4969030	rs34951087	G	T	218.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.09;MQ0=0;OQ=572.86;QD=11.23;SB=-277.34	GT:AD:DP:GL:GQ	0/1:30,21:51:-75.93,-15.36,-106.99:99
-chr1	4970267	rs10915312	A	G	154.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=58.90;MQ0=0;OQ=985.64;QD=12.32;SB=-409.96	GT:AD:DP:GL:GQ	0/1:41,39:79:-125.65,-23.81,-166.76:99
-chr1	4970523	rs12045336	A	G	132	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.57;MQ=59.62;MQ0=0;OQ=1080.57;QD=17.71;SB=-383.65	GT:AD:DP:GL:GQ	0/1:25,36:60:-129.41,-18.07,-101.07:99
-chr1	4971344	.	A	C	49.60	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=45.73;MQ=55.38;MQ0=0;QD=0.57;SB=95.30	GT:AD:DP:GL:GQ	0/1:77,10:78:-31.75,-23.50,-240.44:82.44
-chr1	4972155	rs1870516	C	T	119.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=2;HaplotypeScore=2.64;MQ=59.76;MQ0=0;OQ=1584.03;QD=16.67;SB=-599.54	GT:AD:DP:GL:GQ	0/1:49,46:91:-189.10,-27.42,-151.90:99
-chr1	4972838	rs1459756	T	C	570.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=978.37;QD=13.22;SB=-505.27	GT:AD:DP:GL:GQ	0/1:38,36:72:-122.81,-21.69,-153.16:99
-chr1	4972952	rs9286975	G	A	397.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2673.75;QD=39.91;SB=-1305.72	GT:AD:DP:GL:GQ	1/1:0,67:67:-270.98,-20.18,-0.02:99
-chr1	4973015	rs9662653	T	A	589.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=1272.49;QD=16.74;SB=-576.01	GT:AD:DP:GL:GQ	0/1:36,40:76:-153.42,-22.89,-135.61:99
-chr1	4973096	rs9701780	T	C	360.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.34;MQ0=0;OQ=907.74;QD=12.97;SB=-427.52	GT:AD:DP:GL:GQ	0/1:38,32:70:-115.14,-21.08,-154.90:99
-chr1	4973099	rs1459757	A	G	435.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.36;MQ0=0;OQ=906.72;QD=12.59;SB=-477.95	GT:AD:DP:GL:GQ	0/1:40,32:72:-115.64,-21.69,-161.61:99
-chr1	4973396	rs10753346	T	C	325.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.65;MQ0=0;OQ=745.38;QD=11.29;SB=-293.22	GT:AD:DP:GL:GQ	0/1:39,27:65:-97.40,-19.58,-152.44:99
-chr1	4973518	rs10799152	A	C	461.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.77;MQ0=0;OQ=1062.89;QD=13.29;SB=-461.68	GT:AD:DP:GL:GQ	0/1:43,37:80:-133.67,-24.09,-159.84:99
-chr1	4974497	rs35292186	A	G	69.66	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.78;MQ0=0;OQ=1148.97;QD=13.84;SB=-573.87	GT:AD:DP:GL:GQ	0/1:43,40:81:-142.58,-24.40,-174.12:99
-chr1	4976182	rs10915314	G	C	291.75	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=1306.22;QD=17.65;SB=-415.30	GT:AD:DP:GL:GQ	0/1:38,36:73:-155.90,-22.00,-163.97:99
-chr1	4977412	rs12047764	T	C	324.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=712.65;QD=11.49;SB=-368.84	GT:AD:DP:GL:GQ	0/1:33,29:62:-93.24,-18.69,-135.85:99
-chr1	4978209	rs10915315	A	G	314.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.17;MQ0=0;OQ=593.55;QD=8.73;SB=-263.22	GT:AD:DP:GL:GQ	0/1:42,26:67:-82.83,-20.19,-168.85:99
-chr1	4978799	rs10915316	T	C	253.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=59.03;MQ0=0;OQ=793.88;QD=11.03;SB=-421.21	GT:AD:DP:GL:GQ	0/1:40,31:69:-103.46,-20.78,-159.70:99
-chr1	4980236	.	G	A	100.41	PASS	AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=1786.33;QD=21.02;SB=-886.64	GT:AD:DP:GL:GQ	0/1:34,51:83:-206.92,-25.00,-119.27:99
-chr1	4980926	rs10915317	T	C	438.47	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.66;MQ0=0;OQ=838.53;QD=12.33;SB=-314.09	GT:AD:DP:GL:GQ	0/1:34,34:67:-107.33,-20.19,-138.42:99
-chr1	4981033	rs898337	G	A	348.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.70;MQ0=0;OQ=1302.29;QD=16.91;SB=-502.50	GT:AD:DP:GL:GQ	0/1:36,41:75:-156.11,-22.60,-126.45:99
-chr1	4981597	rs7516703	C	T	165.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=60.19;MQ0=0;OQ=561.42;QD=9.85;SB=-184.86	GT:AD:DP:GL:GQ	0/1:36,21:54:-75.71,-16.28,-112.37:99
-chr1	4982000	rs10799153	A	G	596.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=1157.46;QD=16.30;SB=-464.59	GT:AD:DP:GL:GQ	0/1:32,39:71:-140.42,-21.40,-120.74:99
-chr1	4983908	.	G	A	17.79	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=16;HaplotypeScore=7.18;MQ=55.71;MQ0=0;QD=0.27;SB=86.25	GT:AD:DP:GL:GQ	0/1:51,16:49:-19.83,-14.77,-145.36:50.55
-chr1	4985809	rs9439574	C	T	11.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=1576.28;QD=19.70;SB=-625.03	GT:AD:DP:GL:GQ	0/1:34,46:79:-184.71,-23.79,-124.63:99
-chr1	4985815	rs9439575	A	G	487	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1410.52;QD=17.20;SB=-545.94	GT:AD:DP:GL:GQ	0/1:36,46:82:-169.04,-24.70,-144.72:99
-chr1	4986567	rs10218468	A	C	245.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=789.54;QD=11.78;SB=-394.67	GT:AD:DP:GL:GQ	0/1:34,33:66:-102.12,-19.88,-128.07:99
-chr1	4987124	rs10442625	A	G	373.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.63;MQ0=0;OQ=720.29;QD=11.43;SB=-219.26	GT:AD:DP:GL:GQ	0/1:37,26:62:-93.99,-18.68,-145.68:99
-chr1	4988477	rs2169089	A	G	373.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.69;MQ0=0;OQ=1114.19;QD=14.86;SB=-356.97	GT:AD:DP:GL:GQ	0/1:29,45:72:-136.41,-21.71,-118.67:99
-chr1	4988875	rs716112	A	G	453.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=842.62;QD=12.58;SB=-426.87	GT:AD:DP:GL:GQ	0/1:33,34:66:-107.44,-19.90,-129.75:99
-chr1	4990575	rs1459764	C	T	573.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=1234.93;QD=15.63;SB=-612.07	GT:AD:DP:GL:GQ	0/1:42,37:78:-150.28,-23.50,-132.81:99
-chr1	4990857	rs9439507	A	G	285	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.35;MQ0=0;OQ=2461.09;QD=34.66;SB=-1130.69	GT:AD:DP:GL:GQ	1/1:0,71:71:-249.72,-21.39,-0.03:99
-chr1	4991092	rs10442626	G	C	211.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.60;MQ0=0;OQ=718.97;QD=12.61;SB=-159.21	GT:AD:DP:GL:GQ	0/1:31,26:54:-91.46,-16.28,-132.88:99
-chr1	4991687	rs4949164	A	G	470.49	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1103.70;QD=13.80;SB=-401.93	GT:AD:DP:GL:GQ	0/1:38,42:79:-137.46,-23.80,-155.83:99
-chr1	4993546	rs7533014	T	C	526.25	PASS	AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1036.32;QD=11.39;SB=-442.91	GT:AD:DP:GL:GQ	0/1:49,42:90:-134.04,-27.12,-197.59:99
-chr1	4993852	rs11580542	A	G	170.64	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=650.23;QD=9.56;SB=-317.81	GT:AD:DP:GL:GQ	0/1:43,25:66:-88.19,-19.88,-168.41:99
-chr1	4994065	.	C	T	20.53	PASS	AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1330.95;QD=18.75;SB=-592.09	GT:AD:DP:GL:GQ	0/1:33,38:71:-157.76,-21.38,-120.30:99
-chr1	4994295	rs6693990	G	A	335.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=57.88;MQ0=0;OQ=1019.69;QD=16.19;SB=-465.42	GT:AD:DP:GL:GQ	0/1:31,32:60:-123.32,-18.07,-111.15:99
-chr1	4994563	rs1459763	A	G	13.43	PASS	AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=5.21;MQ=58.04;MQ0=0;OQ=377.66;QD=9.21;SB=-181.57	GT:AD:DP:GL:GQ	0/1:25,16:38:-52.50,-11.45,-93.25:99
-chr1	4995722	rs1459762	C	T	513.24	PASS	AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=1249.58;QD=19.22;SB=-511.06	GT:AD:DP:GL:GQ	0/1:27,38:64:-147.53,-19.29,-84.78:99
-chr1	4996533	.	T	G	102.56	PASS	AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.08;MQ0=0;OQ=597.86;QD=9.80;SB=-320.69	GT:AD:DP:GL:GQ	0/1:35,26:61:-81.45,-18.38,-132.05:99
-chr1	4999697	.	C	G	5.71	PASS	AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.53;MQ0=0;OQ=2076.06;QD=23.59;SB=-758.01	GT:AD:DP:GL:GQ	0/1:34,54:87:-237.12,-26.23,-133.95:99
-chr1	4999785	.	A	G	153.89	PASS	AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=59.42;MQ0=0;OQ=950.41;QD=13.20;SB=-485.20	GT:AD:DP:GL:GQ	0/1:39,33:71:-119.71,-21.39,-153.18:99
-chr1	5000124	rs35565495	A	G	217.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=57.68;MQ0=0;OQ=905.68;QD=12.41;SB=-443.62	GT:AD:DP:GL:GQ	0/1:40,33:73:-115.85,-22.00,-156.82:99
-chr1	5000551	rs1459761	A	G	316.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=59.68;MQ0=0;OQ=1082.64;QD=18.35;SB=-522.18	GT:AD:DP:GL:GQ	0/1:24,35:59:-129.32,-17.77,-97.53:99
-chr1	5002004	rs12403444	A	G	454.86	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.69;MQ0=0;OQ=1008.17;QD=13.62;SB=-385.25	GT:AD:DP:GL:GQ	0/1:38,36:71:-125.49,-21.39,-141.83:99
-chr1	5002384	rs12403749	A	G	334.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.18;MQ0=0;OQ=762.42;QD=12.92;SB=-306.27	GT:AD:DP:GL:GQ	0/1:32,27:59:-97.30,-17.77,-132.93:99
-chr1	5002965	rs55998096	C	T	265.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1237.12;QD=16.95;SB=-623.66	GT:AD:DP:GL:GQ	0/1:35,38:72:-148.68,-21.69,-128.69:99
-chr1	5003908	rs1459759	T	G	287.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.68;MQ0=0;OQ=1018.83;QD=14.15;SB=-495.74	GT:AD:DP:GL:GQ	0/1:34,38:70:-126.25,-21.08,-125.30:99
-chr1	5004548	.	C	T	0.18	PASS	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=4;HaplotypeScore=0.97;MQ=55.65;MQ0=0;OQ=1952.83;QD=19.15;SB=-933.54	GT:AD:DP:GL:GQ	0/1:44,58:102:-229.30,-30.73,-156.88:99
-chr1	5004874	rs55883351	G	A	211.60	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=41.17;MQ0=0;OQ=1434.24;QD=17.49;SB=-707.75	GT:AD:DP:GL:GQ	0/1:39,43:79:-170.52,-23.81,-118.83:99
-chr1	5005796	.	T	G	22.56	PASS	AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=52.68;MQ0=0;OQ=1101.12;QD=15.73;SB=-417.74	GT:AD:DP:GL:GQ	0/1:29,41:66:-133.27,-19.88,-106.95:99
-chr1	5005889	rs10737394	A	G	342.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.43;MQ0=0;OQ=434.38;QD=9.05;SB=-233.28	GT:AD:DP:GL:GQ	0/1:27,21:46:-60.59,-13.87,-106.69:99
-chr1	5006532	rs10799156	G	C	195.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=38.14;MQ0=9;OQ=508.53;QD=10.38;SB=-226.35	GT:AD:DP:GL:GQ	0/1:19,30:34:-64.39,-10.25,-81.21:99
-chr1	5007005	rs6603829	T	C	0.07	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=16.12;MQ=27.87;MQ0=17;OQ=171.08;QD=2.19;SB=-108.70	GT:AD:DP:GL:GQ	0/1:51,27:35:-30.94,-10.55,-97.26:99
-chr1	5007006	rs6603830	G	A	0.04	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=18.32;MQ=27.85;MQ0=18;OQ=165.82;QD=2.13;SB=-81.55	GT:AD:DP:GL:GQ	0/1:59,19:36:-30.72,-10.85,-97.29:99
-chr1	5007287	.	C	G	0.46	PASS	AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=8.19;MQ=48.27;MQ0=4;OQ=754.87;QD=14.52;SB=-244.08	GT:AD:DP:GL:GQ	0/1:26,25:44:-92.04,-13.27,-89.64:99
-chr1	5007421	.	A	G	0.01	FDRtranche2.00to10.00	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=5.43;MQ=22.24;MQ0=26;OQ=110.20;QD=1.12;SB=7.49	GT:AD:DP:GL:GQ	0/1:85,12:42:-26.95,-12.65,-140.65:99
-chr1	5007424	.	G	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=2;HaplotypeScore=3.53;MQ=23.00;MQ0=24;OQ=143.47;QD=1.54;SB=3.27	GT:AD:DP:GL:GQ	0/1:81,12:42:-30.29,-12.66,-152.47:99
-chr1	5011084	.	C	G	46.29	PASS	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=45.50;MQ0=2;OQ=1885.25;QD=20.27;SB=-717.97	GT:AD:DP:GL:GQ	0/1:41,52:88:-218.32,-26.51,-163.98:99
-chr1	5011731	.	C	T	18.24	PASS	AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=54.65;MQ0=1;OQ=1577.37;QD=18.13;SB=-623.62	GT:AD:DP:GL:GQ	0/1:41,46:86:-186.92,-25.90,-147.64:99
-chr1	5012084	rs10915327	C	T	347.57	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=48.94;MQ0=2;OQ=1240.99;QD=17.24;SB=-606.09	GT:AD:DP:GL:GQ	0/1:32,40:68:-147.88,-20.49,-101.20:99
-chr1	5012508	.	G	A	165.62	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=34.81;MQ0=2;OQ=954.73;QD=16.75;SB=-470.48	GT:AD:DP:GL:GQ	0/1:23,33:48:-113.23,-14.48,-57.23:99
-chr1	5014453	.	C	A	65.76	PASS	AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=59.79;MQ0=0;OQ=1613.72;QD=18.13;SB=-734.55	GT:AD:DP:GL:GQ	0/1:38,51:88:-191.16,-26.50,-131.97:99
-chr1	5016018	.	T	G	165.96	PASS	AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=1295.09;QD=17.50;SB=-624.73	GT:AD:DP:GL:GQ	0/1:31,43:74:-155.08,-22.29,-116.52:99
-chr1	5018516	rs4262591	A	T	76.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=59.27;MQ0=0;OQ=1137.62;QD=12.78;SB=-520.24	GT:AD:DP:GL:GQ	0/1:50,39:87:-143.25,-26.20,-190.22:99
-chr1	5020923	rs970119	A	C	493.82	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=718.78;QD=10.27;SB=-241.77	GT:AD:DP:GL:GQ	0/1:40,30:69:-95.95,-20.78,-149.31:99
-chr1	5023267	.	C	G	91.77	PASS	AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=800.92;QD=19.07;SB=-315.01	GT:AD:DP:GL:GQ	0/1:20,22:41:-95.73,-12.36,-81.61:99
-chr1	5024719	rs1563792	G	A	196.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.54;MQ0=0;OQ=1348.55;QD=16.45;SB=-599.05	GT:AD:DP:GL:GQ	0/1:42,40:80:-162.25,-24.11,-132.60:99
-chr1	5027451	rs56184292	G	T	6.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=4;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1415.10;QD=15.05;SB=-721.57	GT:AD:DP:GL:GQ	0/1:44,49:93:-172.81,-28.02,-154.91:99
-chr1	5029434	rs2061494	T	A	49.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.72;MQ0=0;OQ=1567.79;QD=19.36;SB=-635.43	GT:AD:DP:GL:GQ	0/1:33,47:79:-183.86,-23.79,-122.93:99
-chr1	5029438	rs2061493	T	A	66.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.72;MQ0=0;OQ=1477.11;QD=18.24;SB=-663.80	GT:AD:DP:GL:GQ	0/1:33,48:80:-175.09,-24.10,-128.48:99
-chr1	5029774	rs55724572	C	A	223.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.17;MQ0=0;OQ=1394.44;QD=13.81;SB=-671.07	GT:AD:DP:GL:GQ	0/1:55,46:101:-173.14,-30.41,-200.20:99
-chr1	5029802	rs56297253	G	A	420.62	PASS	AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.18;MQ0=0;OQ=1452.74;QD=14.24;SB=-632.72	GT:AD:DP:GL:GQ	0/1:58,44:100:-178.69,-30.14,-182.65:99
-chr1	5030141	rs1459758	C	G	545.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2835.80;QD=42.33;SB=-1264.90	GT:AD:DP:GL:GQ	1/1:0,67:65:-287.18,-19.58,-0.01:99
-chr1	5032542	rs977665	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=14;HaplotypeScore=4.90;MQ=58.74;MQ0=0;OQ=53.47;QD=0.58;SB=128.44	GT:AD:DP:GL:GQ	0/1:77,15:69:-29.43,-20.80,-218.90:86.30
-chr1	5036504	rs922123	T	C	526.95	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.12;MQ0=0;OQ=805.20;QD=10.88;SB=-361.22	GT:AD:DP:GL:GQ	0/1:44,30:74:-106.10,-22.29,-176.34:99
-chr1	5036703	rs55875722	T	A	259.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.65;MQ0=0;OQ=1241.65;QD=18.81;SB=-625.13	GT:AD:DP:GL:GQ	0/1:28,38:64:-146.72,-19.28,-96.42:99
-chr1	5036704	rs922124	T	A	61.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.67;MQ0=0;OQ=2561.19;QD=37.12;SB=-1099.66	GT:AD:DP:GL:GQ	1/1:0,69:68:-259.72,-20.48,-0.02:99
-chr1	5036974	rs56077964	G	A	617	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2268.61;QD=38.45;SB=-1080.42	GT:AD:DP:GL:GQ	1/1:0,59:56:-230.46,-16.87,-0.01:99
-chr1	5039060	rs56186517	C	T	567.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=3555.73;QD=39.95;SB=-1607.16	GT:AD:DP:GL:GQ	1/1:0,89:87:-354.57,-26.20,-0.02:99
-chr1	5039732	rs56347558	T	C	203.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.06;MQ0=0;OQ=2530.73;QD=34.20;SB=-928.36	GT:AD:DP:GL:GQ	1/1:0,73:71:-256.68,-21.39,-0.02:99
-chr1	5040152	rs3128686	G	T	232.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.70;MQ0=0;OQ=2534.37;QD=32.49;SB=-1255.28	GT:AD:DP:GL:GQ	1/1:1,77:71:-257.05,-21.39,-0.03:99
-chr1	5040933	rs12045197	A	T	91.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=44.79;MQ0=0;OQ=1582.06;QD=35.96;SB=-689.38	GT:AD:DP:GL:GQ	1/1:0,44:44:-161.81,-13.26,-0.02:99
-chr1	5041153	rs3128687	G	T	199.02	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=55.94;MQ0=0;OQ=2861.17;QD=36.22;SB=-1432.06	GT:AD:DP:GL:GQ	1/1:0,79:77:-289.72,-23.19,-0.02:99
-chr1	5041314	rs3128688	A	T	418.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.72;MQ0=0;OQ=2724.95;QD=37.85;SB=-1190.46	GT:AD:DP:GL:GQ	1/1:0,72:72:-276.10,-21.69,-0.02:99
-chr1	5041500	rs3128689	C	A	313.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=59.77;MQ0=0;OQ=2974.21;QD=36.27;SB=-1175.38	GT:AD:DP:GL:GQ	1/1:0,82:81:-301.03,-24.39,-0.02:99
-chr1	5042266	rs10915339	G	A	611.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=2730.95;QD=39.01;SB=-1105.02	GT:AD:DP:GL:GQ	1/1:0,70:70:-276.70,-21.09,-0.02:99
-chr1	5042286	rs10915340	T	C	619.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2323.00;QD=35.20;SB=-939.39	GT:AD:DP:GL:GQ	1/1:0,65:65:-235.90,-19.58,-0.02:99
-chr1	5042412	rs10915341	T	G	227.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.39;MQ0=0;OQ=2175.06;QD=35.66;SB=-984.12	GT:AD:DP:GL:GQ	1/1:0,61:61:-221.11,-18.37,-0.01:99
-chr1	5042489	rs12029437	C	G	85.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=2.70;MQ=59.16;MQ0=0;OQ=2913.26;QD=40.46;SB=-1456.73	GT:AD:DP:GL:GQ	1/1:0,72:69:-294.94,-20.80,-0.03:99
-chr1	5042644	rs12047111	A	G	505.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1237.53;QD=28.78;SB=-430.81	GT:AD:DP:GL:GQ	1/1:0,43:41:-127.38,-12.37,-0.05:99
-chr1	5042678	rs2334263	T	C	624.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=1911.69;QD=29.87;SB=-888.47	GT:AD:DP:GL:GQ	1/1:0,64:60:-194.81,-18.10,-0.06:99
-chr1	5043104	rs10799159	C	A	257.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.14;MQ0=0;OQ=3046.41;QD=35.84;SB=-1505.91	GT:AD:DP:GL:GQ	1/1:0,85:84:-308.25,-25.30,-0.02:99
-chr1	5043177	rs10799160	G	A	205.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.29;MQ0=0;OQ=2756.78;QD=37.25;SB=-1155.91	GT:AD:DP:GL:GQ	1/1:1,72:71:-282.75,-21.39,-3.49:99
-chr1	5043218	rs10799161	A	C	127.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.10;MQ0=0;OQ=2285.87;QD=29.69;SB=-810.83	GT:AD:DP:GL:GQ	1/1:0,77:71:-232.22,-21.39,-0.05:99
-chr1	5048318	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=4;HaplotypeScore=11.35;MQ=48.17;MQ0=0;OQ=57.54;QD=0.83;SB=77.27	GT:AD:DP:GL:GQ	0/1:47,22:47:-23.20,-14.17,-150.00:90.38
-chr1	5048545	rs10915343	T	C	699.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.89;MQ0=0;OQ=1690.53;QD=34.50;SB=-831.35	GT:AD:DP:GL:GQ	1/1:0,49:48:-172.65,-14.46,-0.01:99
-chr1	5050626	rs3101213	A	G	203.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=59.71;MQ0=0;OQ=2864.75;QD=36.26;SB=-1335.60	GT:AD:DP:GL:GQ	1/1:0,79:79:-290.08,-23.79,-0.02:99
-chr1	5051336	rs2199215	T	C	701.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2974.37;QD=35.84;SB=-1419.92	GT:AD:DP:GL:GQ	1/1:0,83:83:-301.05,-25.00,-0.02:99
-chr1	5052019	rs12121092	G	T	639.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2775.75;QD=36.52;SB=-1128.45	GT:AD:DP:GL:GQ	1/1:0,76:76:-281.18,-22.89,-0.02:99
-chr1	5057740	rs55852005	G	A	37.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=1.46;MQ=59.22;MQ0=0;OQ=1090.29;QD=18.48;SB=-513.03	GT:AD:DP:GL:GQ	0/1:26,33:57:-129.48,-17.17,-87.67:99
-chr1	5058085	rs4949171	C	T	168.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=59.33;MQ0=0;OQ=2116.23;QD=37.79;SB=-957.98	GT:AD:DP:GL:GQ	1/1:0,56:55:-215.23,-16.58,-0.02:99
-chr1	5058717	rs9803863	G	A	206.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.13;MQ0=0;OQ=2766.44;QD=39.52;SB=-1272.71	GT:AD:DP:GL:GQ	1/1:0,69:70:-283.01,-23.72,-2.78:99
-chr1	5059210	rs982156	T	C	60.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.49;MQ=59.24;MQ0=0;OQ=1823.01;QD=33.15;SB=-568.39	GT:AD:DP:GL:GQ	1/1:0,55:54:-185.91,-16.27,-0.03:99
-chr1	5060220	rs992597	C	T	157.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.01;MQ0=0;OQ=2915.53;QD=38.36;SB=-981.32	GT:AD:DP:GL:GQ	1/1:0,76:74:-295.16,-22.30,-0.02:99
-chr1	5060522	rs2242157	G	T	298.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.45;MQ0=0;OQ=2405.81;QD=35.38;SB=-942.03	GT:AD:DP:GL:GQ	1/1:0,68:68:-244.19,-20.49,-0.03:99
-chr1	5060591	rs1459766	T	G	395.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=2600.59;QD=35.14;SB=-1143.14	GT:AD:DP:GL:GQ	1/1:0,74:73:-263.67,-21.99,-0.02:99
-chr1	5061734	rs9439532	C	T	112.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=59.34;MQ0=0;OQ=2118.20;QD=37.16;SB=-1042.39	GT:AD:DP:GL:GQ	1/1:0,57:54:-215.42,-16.27,-0.02:99
-chr1	5062366	rs6683881	C	T	35.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=1.70;MQ=59.80;MQ0=0;OQ=3619.28;QD=39.77;SB=-1734.02	GT:AD:DP:GL:GQ	1/1:0,91:89:-360.93,-26.81,-0.02:99
-chr1	5062541	rs4949170	A	G	156.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.71;MQ0=0;OQ=2632.93;QD=33.33;SB=-1332.58	GT:AD:DP:GL:GQ	1/1:0,79:75:-266.90,-22.59,-0.03:99
-chr1	5062567	rs4949169	A	T	172.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.68;MQ0=0;OQ=2759.54;QD=37.80;SB=-995.13	GT:AD:DP:GL:GQ	1/1:0,73:72:-279.55,-21.68,-0.01:99
-chr1	5063485	rs9439576	C	G	98.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.17;MQ0=0;OQ=3111.26;QD=39.89;SB=-1145.60	GT:AD:DP:GL:GQ	1/1:0,77:71:-314.73,-21.39,-0.02:99
-chr1	5063671	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=26.54;MQ=57.06;MQ0=0;OQ=128.17;QD=2.14;SB=77.28	GT:AD:DP:GL:GQ	0/1:38,22:39:-27.89,-11.79,-122.93:99
-chr1	5064284	rs2169090	T	C	707.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=3152.45;QD=35.42;SB=-1370.23	GT:AD:DP:GL:GQ	1/1:0,89:88:-318.85,-26.50,-0.02:99
-chr1	5066340	rs57000660	A	G	484.39	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=766.60;QD=12.99;SB=-402.18	GT:AD:DP:GL:GQ	0/1:32,27:59:-97.71,-17.77,-131.87:99
-chr1	5066393	rs1037809	C	T	706.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3074.28;QD=39.41;SB=-1449.38	GT:AD:DP:GL:GQ	1/1:0,78:78:-311.04,-23.50,-0.02:99
-chr1	5068397	rs6659363	G	C	337.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.22;MQ0=0;OQ=768.71;QD=14.24;SB=-229.04	GT:AD:DP:GL:GQ	0/1:31,23:53:-96.12,-15.97,-137.34:99
-chr1	5068500	rs12124337	A	C	365.74	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=1243.29;QD=15.94;SB=-471.71	GT:AD:DP:GL:GQ	0/1:35,43:77:-150.81,-23.19,-127.77:99
-chr1	5068523	rs10733013	C	T	471.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1107.71;QD=14.39;SB=-422.79	GT:AD:DP:GL:GQ	0/1:43,34:75:-136.66,-22.60,-133.09:99
-chr1	5069554	rs2722789	G	A	592.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1009.56;QD=14.02;SB=-503.00	GT:AD:DP:GL:GQ	0/1:41,31:72:-125.95,-21.71,-131.55:99
-chr1	5070551	rs4949160	A	T	476.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=1068.05;QD=14.83;SB=-488.53	GT:AD:DP:GL:GQ	0/1:37,35:71:-131.47,-21.38,-142.74:99
-chr1	5071819	.	G	A	258.71	PASS	AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1213.24;QD=16.18;SB=-353.81	GT:AD:DP:GL:GQ	0/1:39,36:75:-147.20,-22.59,-142.20:99
-chr1	5071854	.	T	A	81.17	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1149.23;QD=14.19;SB=-304.96	GT:AD:DP:GL:GQ	0/1:43,38:80:-142.31,-24.10,-164.66:99
-chr1	5072229	.	G	A	304.80	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=81;Dels=0.01;HRun=0;HaplotypeScore=64.90;MQ=44.02;MQ0=0;QD=3.76;SB=86.27	GT:AD:DP:GL:GQ	0/1:66,14:79:-57.26,-23.50,-230.57:99
-chr1	5072230	.	C	G	37.37	DPFilter;LowQual;SnpCluster	AC=1;AF=0.50;AN=2;DP=83;Dels=0.01;HRun=2;HaplotypeScore=55.89;MQ=43.72;MQ0=0;QD=0.45;SB=80.30	GT:AD:DP:GL:GQ	0/1:67,6:72:-38.59,-31.57,-277.78:70.20
-chr1	5072236	.	A	G	214.30	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=80;Dels=0.08;HRun=2;HaplotypeScore=77.80;MQ=44.49;MQ0=0;QD=2.68;SB=83.29	GT:AD:DP:GL:GQ	0/1:56,12:72:-66.82,-42.10,-235.08:99
-chr1	5072261	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=81;Dels=0.05;HRun=0;HaplotypeScore=73.45;MQ=43.15;MQ0=0;OQ=399.38;QD=4.93;SB=83.29	GT:AD:DP:GL:GQ	0/1:51,25:67:-62.51,-19.29,-172.53:99
-chr1	5072278	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=86;Dels=0.01;HRun=1;HaplotypeScore=43.28;MQ=42.83;MQ0=0;OQ=260.49;QD=3.03;SB=63.28	GT:AD:DP:GL:GQ	0/1:59,19:75:-74.72,-45.39,-204.92:99
-chr1	5072305	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=82;Dels=0.04;HRun=0;HaplotypeScore=77.14;MQ=40.79;MQ0=0;OQ=744.26;QD=9.08;SB=-270.19	GT:AD:DP:GL:GQ	0/1:44,35:70:-97.91,-20.20,-140.23:99
-chr1	5072314	.	C	A	26.92	LowQual	AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=53.92;MQ=40.19;MQ0=0;QD=0.34;SB=-28.60	GT:AD:DP:GL:GQ	0/1:60,11:56:-29.71,-23.73,-169.35:59.74
-chr1	5072329	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=71;Dels=0.01;HRun=0;HaplotypeScore=74.94;MQ=38.44;MQ0=0;OQ=775.14;QD=10.92;SB=-292.22	GT:AD:DP:GL:GQ	0/1:41,28:64:-99.78,-18.98,-129.83:99
-chr1	5072338	.	C	G	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=63;Dels=0.02;HRun=2;HaplotypeScore=51.40;MQ=37.08;MQ0=0;OQ=162.47;QD=2.58;SB=101.36	GT:AD:DP:GL:GQ	0/1:48,8:57:-50.13,-30.60,-201.42:99
-chr1	5072354	.	A	G	70.72	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=68;Dels=0.01;HRun=3;HaplotypeScore=80.87;MQ=34.07;MQ0=1;QD=1.04;SB=50.19	GT:AD:DP:GL:GQ	0/1:55,12:60:-28.14,-17.78,-195.72:99
-chr1	5072357	.	A	G	633.36	SnpCluster	AC=1;AF=0.50;AN=2;DP=67;Dels=0.01;HRun=1;HaplotypeScore=71.93;MQ=33.53;MQ0=1;QD=9.45;SB=-235.45	GT:AD:DP:GL:GQ	0/1:28,25:61:-115.70,-49.08,-135.16:99
-chr1	5072359	.	A	C	486.53	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=0;HaplotypeScore=52.12;MQ=33.41;MQ0=1;QD=7.05;SB=62.18	GT:AD:DP:GL:GQ	0/1:42,24:63:-73.40,-21.46,-136.62:99
-chr1	5072383	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=82.78;MQ=35.86;MQ0=1;OQ=50.85;QD=0.50;SB=43.30	GT:AD:DP:GL:GQ	0/1:88,10:72:-37.48,-29.11,-217.86:83.68
-chr1	5072395	.	C	A	570.19	SnpCluster	AC=1;AF=0.50;AN=2;DP=99;Dels=0.02;HRun=1;HaplotypeScore=88.86;MQ=38.13;MQ0=1;QD=5.76;SB=-12.89	GT:AD:DP:GL:GQ	0/1:64,28:75:-96.04,-35.74,-177.41:99
-chr1	5072402	.	A	G	56.63	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=3;HaplotypeScore=106.83;MQ=38.72;MQ0=1;QD=0.58;SB=77.28	GT:AD:DP:GL:GQ	0/1:88,10:70:-30.04,-21.10,-237.13:89.47
-chr1	5072405	.	G	T	211.27	DPFilter;SnpCluster	AC=1;AF=0.50;AN=2;DP=95;Dels=0.03;HRun=0;HaplotypeScore=106.15;MQ=39.10;MQ0=1;QD=2.22;SB=86.26	GT:AD:DP:GL:GQ	0/1:74,17:80:-48.52,-24.11,-223.42:99
-chr1	5072419	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=52.76;MQ=39.26;MQ0=1;OQ=413.09;QD=4.44;SB=8.43	GT:AD:DP:GL:GQ	0/1:71,20:77:-71.28,-26.69,-194.57:99
-chr1	5072442	.	A	G	31.37	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=2;HaplotypeScore=72.31;MQ=41.30;MQ0=0;QD=0.48;SB=47.17	GT:AD:DP:GL:GQ	0/1:57,8:62:-25.11,-18.69,-212.28:64.20
-chr1	5073664	rs2611423	C	A	218.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2432.37;QD=35.25;SB=-1208.34	GT:AD:DP:GL:GQ	1/1:0,69:67:-246.84,-20.18,-0.02:99
-chr1	5073938	rs2611424	A	G	134.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.25;MQ0=0;OQ=2912.91;QD=35.96;SB=-1287.55	GT:AD:DP:GL:GQ	1/1:0,81:80:-294.90,-24.09,-0.02:99
-chr1	5074030	rs2611425	C	T	598.88	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.51;MQ0=0;OQ=2372.22;QD=38.89;SB=-1023.68	GT:AD:DP:GL:GQ	1/1:0,61:60:-240.82,-18.07,-0.01:99
-chr1	5074510	rs9439534	C	T	637.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.93;MQ0=0;OQ=2321.21;QD=36.27;SB=-1159.05	GT:AD:DP:GL:GQ	1/1:0,64:59:-235.72,-17.77,-0.02:99
-chr1	5074638	rs57003830	G	C	372.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=43.54;MQ0=4;OQ=1370.10;QD=15.75;SB=-494.22	GT:AD:DP:GL:GQ	0/1:45,42:79:-164.10,-23.81,-179.75:99
-chr1	5075049	rs9439577	C	T	95.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=38.28;MQ0=7;OQ=1971.59;QD=31.30;SB=-484.14	GT:AD:DP:GL:GQ	1/1:0,62:51:-200.77,-15.37,-0.03:99
-chr1	5075121	rs9439535	A	G	238.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.82;MQ0=4;OQ=1529.43;QD=28.32;SB=-495.19	GT:AD:DP:GL:GQ	1/1:0,54:47:-156.56,-14.17,-0.03:99
-chr1	5075150	rs9439578	T	G	135.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=50.05;MQ0=3;OQ=2063.78;QD=31.75;SB=-748.06	GT:AD:DP:GL:GQ	1/1:0,65:60:-209.99,-18.08,-0.02:99
-chr1	5075197	rs10915347	C	T	55.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=47.56;MQ0=6;OQ=2171.81;QD=32.91;SB=-915.72	GT:AD:DP:GL:GQ	1/1:0,65:56:-220.79,-16.88,-0.02:99
-chr1	5075319	rs28828787	G	A	102.87	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=26.02;MQ0=15;OQ=432.78;QD=8.32;SB=-48.66	GT:AD:DP:GL:GQ	0/1:29,23:28:-55.00,-8.44,-46.26:99
-chr1	5075370	rs10799164	C	T	16.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=20.22;MQ0=13;OQ=746.84;QD=17.78;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,40:19:-78.27,-5.72,-0.00:57.19
-chr1	5075558	rs10799165	C	T	9.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=9.90;MQ=22.74;MQ0=30;OQ=955.91;QD=12.58;SB=-324.43	GT:AD:DP:GL:GQ	1/1:31,45:25:-99.18,-7.53,-0.01:75.24
-chr1	5075601	rs10753349	C	T	1.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=10.53;MQ=14.77;MQ0=51;OQ=525.81;QD=6.49;SB=-249.33	GT:AD:DP:GL:GQ	1/1:43,38:14:-56.17,-4.22,-0.00:42.14
-chr1	5075696	rs4949168	A	G	0.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=5.94;MQ=11.29;MQ0=39;OQ=183.21;QD=2.91;SB=-118.05	GT:AD:DP:GL:GQ	1/1:33,30:6:-21.89,-1.81,-0.00:18.06
-chr1	5075699	rs10799166	G	C	0.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=5.78;MQ=10.86;MQ0=38;OQ=173.64;QD=2.85;SB=-103.85	GT:AD:DP:GL:GQ	1/1:32,29:5:-20.93,-1.51,-0.00:15.05
-chr1	5075751	rs4949159	C	A	0.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=9.84;MQ=21.77;MQ0=1;OQ=523.96;QD=14.55;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,33:15:-55.98,-4.52,-0.00:45.14
-chr1	5075757	rs4949167	T	C	1.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=5.17;MQ=21.64;MQ0=3;OQ=605.43;QD=14.41;SB=-10.00	GT:AD:DP:GL:GQ	1/1:7,35:18:-64.13,-5.42,-0.00:54.16
-chr1	5076314	rs9439579	C	G	74.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.92;MQ=43.71;MQ0=2;OQ=2095.83;QD=33.80;SB=-956.72	GT:AD:DP:GL:GQ	1/1:3,59:49:-213.18,-14.76,-0.01:99
-chr1	5076393	rs10915349	G	A	1.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=47.36;MQ0=1;OQ=1988.87;QD=34.29;SB=-955.74	GT:AD:DP:GL:GQ	1/1:1,57:52:-202.50,-15.68,-0.03:99
-chr1	5076841	rs10799167	C	T	211.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.50;MQ0=4;OQ=2210.86;QD=35.66;SB=-962.98	GT:AD:DP:GL:GQ	1/1:1,61:56:-224.69,-16.87,-0.02:99
-chr1	5077036	rs10799168	A	G	167.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=21.14;MQ0=7;OQ=400.64;QD=14.84;SB=-196.71	GT:AD:DP:GL:GQ	1/1:8,19:13:-43.66,-3.92,-0.01:39.11
-chr1	5077055	rs7414866	A	G	123.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=21.33;MQ0=4;OQ=281.43;QD=13.40;SB=-64.87	GT:AD:DP:GL:GQ	1/1:4,17:10:-31.74,-3.02,-0.01:30.04
-chr1	5077077	rs7412613	C	T	3.36	PASS	AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=1.37;MQ=22.40;MQ0=3;OQ=333.18;QD=18.51;SB=-10.00	GT:AD:DP:GL:GQ	1/1:2,15:9:-36.90,-2.71,-0.00:27.09
-chr1	5077090	.	C	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=4.92;MQ=29.30;MQ0=3;OQ=51.83;QD=1.85;SB=-3.99	GT:AD:DP:GL:GQ	0/1:19,9:11:-11.79,-3.32,-22.43:84.66
-chr1	5077136	rs55919453	T	G	371.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.18;MQ0=2;OQ=1590.74;QD=31.81;SB=-546.07	GT:AD:DP:GL:GQ	1/1:0,50:44:-162.67,-13.25,-0.01:99
-chr1	5077346	rs28778348	C	A	55.21	PASS	AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.70;MQ0=2;OQ=838.40;QD=27.95;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,29:24:-87.43,-7.23,-0.01:72.21
-chr1	5077349	rs28898289	T	G	16.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.06;MQ0=2;OQ=780.24;QD=25.17;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,31:23:-81.62,-6.93,-0.01:69.20
-chr1	5077435	rs7415381	A	T	121.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=26.22;MQ0=5;OQ=1349.62;QD=28.72;SB=-637.67	GT:AD:DP:GL:GQ	1/1:0,47:37:-138.56,-11.15,-0.01:99
-chr1	5077528	rs56184987	T	C	231.69	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.13;MQ0=2;OQ=814.91;QD=18.95;SB=-252.77	GT:AD:DP:GL:GQ	1/1:0,43:27:-85.10,-8.15,-0.03:81.19
-chr1	5077549	rs55934905	G	A	0.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=23.80;MQ0=7;OQ=1118.88;QD=22.38;SB=-246.01	GT:AD:DP:GL:GQ	1/1:0,50:29:-115.48,-8.74,-0.01:87.28
-chr1	5077770	rs60669416	C	A	584.28	Indel	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=10;HaplotypeScore=19.78;MQ=46.83;MQ0=2;QD=11.69;SB=-270.35	GT:AD:DP:GL:GQ	0/1:25,24:45:-75.27,-13.56,-79.00:99
-chr1	5077806	rs2334261	C	T	3.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.02;HRun=2;HaplotypeScore=6.33;MQ=31.47;MQ0=13;OQ=1098.90;QD=20.35;SB=-473.36	GT:AD:DP:GL:GQ	1/1:5,48:29:-113.48,-8.43,-0.01:84.27
-chr1	5077915	rs11582268	A	T	437.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.80;MQ0=5;OQ=869.48;QD=19.32;SB=-460.68	GT:AD:DP:GL:GQ	1/1:0,44:25:-90.55,-7.54,-0.02:75.21
-chr1	5078308	rs12043988	C	A	291.59	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=47.74;MQ0=0;OQ=2467.70;QD=37.39;SB=-935.67	GT:AD:DP:GL:GQ	1/1:0,66:65:-250.36,-19.57,-0.01:99
-chr1	5078509	rs9439503	T	C	20.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=38.39;MQ0=4;OQ=1877.97;QD=28.03;SB=-657.32	GT:AD:DP:GL:GQ	1/1:1,66:53:-191.40,-15.96,-0.02:99
-chr1	5078532	rs9439504	C	G	494.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.41;MQ0=3;OQ=2205.88;QD=36.16;SB=-588.53	GT:AD:DP:GL:GQ	1/1:0,61:50:-224.18,-15.06,-0.01:99
-chr1	5078612	rs10915350	C	T	169.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=47.49;MQ0=1;OQ=2196.12;QD=36.60;SB=-847.62	GT:AD:DP:GL:GQ	1/1:1,58:57:-223.22,-17.18,-0.02:99
-chr1	5079390	rs10799170	A	C	350.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.35;MQ0=0;OQ=2787.95;QD=35.29;SB=-1421.63	GT:AD:DP:GL:GQ	1/1:0,79:78:-282.40,-23.49,-0.02:99
-chr1	5079434	rs10915352	G	T	571.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.02;MQ0=0;OQ=3162.32;QD=36.77;SB=-1557.78	GT:AD:DP:GL:GQ	1/1:0,86:86:-319.84,-25.90,-0.02:99
-chr1	5079595	rs10915353	G	C	43.37	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=2638.35;QD=40.59;SB=-999.16	GT:AD:DP:GL:GQ	1/1:0,65:61:-267.45,-18.39,-0.03:99
-chr1	5079666	rs6701939	T	C	563.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2172.86;QD=35.05;SB=-713.27	GT:AD:DP:GL:GQ	1/1:0,62:60:-220.89,-18.07,-0.02:99
-chr1	5080376	.	C	T	202.08	PASS	AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.09;MQ0=0;OQ=426.51;QD=11.22;SB=-188.16	GT:AD:DP:GL:GQ	0/1:24,14:37:-57.08,-11.15,-81.03:99
-chr1	5080399	.	C	A	264.12	DPFilter;Indel	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=20;HaplotypeScore=11.69;MQ=57.12;MQ0=0;QD=4.63;SB=53.19	GT:AD:DP:GL:GQ	0/1:38,19:40:-41.75,-12.05,-100.11:99
-chr1	5080680	rs10753350	A	G	105.81	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.32;MQ0=0;OQ=1525.28;QD=28.25;SB=-610.83	GT:AD:DP:GL:GQ	1/1:0,54:51:-156.18,-15.39,-0.07:99
-chr1	5080690	rs10753351	A	C	1.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=2.95;MQ=55.25;MQ0=0;OQ=2140.46;QD=31.48;SB=-1004.07	GT:AD:DP:GL:GQ	1/1:0,68:63:-217.66,-18.98,-0.03:99
-chr1	5081475	rs10737396	T	C	76.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.91;MQ=60.00;MQ0=0;OQ=2367.06;QD=33.34;SB=-935.73	GT:AD:DP:GL:GQ	1/1:0,71:67:-240.32,-20.19,-0.03:99
-chr1	5081878	rs2722794	T	G	569.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.93;MQ0=0;OQ=2825.92;QD=34.89;SB=-1425.62	GT:AD:DP:GL:GQ	1/1:0,81:79:-286.20,-23.79,-0.02:99
-chr1	5081972	rs2611426	T	A	81.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.88;MQ=59.18;MQ0=0;OQ=2310.37;QD=35.01;SB=-624.95	GT:AD:DP:GL:GQ	1/1:0,66:62:-234.64,-18.68,-0.02:99
-chr1	5083407	rs2045587	A	G	34.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=1821.48;QD=33.73;SB=-913.93	GT:AD:DP:GL:GQ	1/1:0,54:52:-185.75,-15.67,-0.02:99
-chr1	5083733	rs4313443	C	T	652.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2295.78;QD=39.58;SB=-913.70	GT:AD:DP:GL:GQ	1/1:0,58:58:-233.18,-17.47,-0.01:99
-chr1	5083785	rs4356099	G	A	29.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=1676.22;QD=38.98;SB=-527.70	GT:AD:DP:GL:GQ	1/1:0,43:43:-171.22,-12.96,-0.02:99
-chr1	5083937	rs2722793	G	T	729.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2771.95;QD=36.96;SB=-1328.90	GT:AD:DP:GL:GQ	1/1:0,75:75:-280.80,-22.59,-0.02:99
-chr1	5084549	rs10753352	G	C	80.52	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.74;MQ0=0;OQ=3116.41;QD=42.69;SB=-1439.29	GT:AD:DP:GL:GQ	1/1:0,73:73:-315.25,-22.00,-0.03:99
-chr1	5085006	rs2722792	C	A	486.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=3029.86;QD=36.95;SB=-1518.84	GT:AD:DP:GL:GQ	1/1:0,82:81:-306.59,-24.39,-0.02:99
-chr1	5085686	rs2611419	A	C	735.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2513.45;QD=35.40;SB=-1104.10	GT:AD:DP:GL:GQ	1/1:0,71:71:-254.95,-21.38,-0.02:99
-chr1	5087139	rs2611420	C	G	615.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3365.59;QD=43.15;SB=-1251.98	GT:AD:DP:GL:GQ	1/1:0,78:76:-335.56,-22.90,-0.03:99
-chr1	5087240	rs2611421	C	T	489.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=3117.95;QD=41.03;SB=-1433.39	GT:AD:DP:GL:GQ	1/1:0,76:76:-315.39,-22.89,-0.01:99
-chr1	5087511	rs2722791	G	A	190.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=59.73;MQ0=0;OQ=3174.39;QD=37.35;SB=-1593.03	GT:AD:DP:GL:GQ	1/1:0,85:81:-321.05,-24.40,-0.02:99
-chr1	5088299	rs2611422	C	T	24.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.01;HRun=4;HaplotypeScore=1.63;MQ=59.49;MQ0=0;OQ=3139.82;QD=38.29;SB=-1155.06	GT:AD:DP:GL:GQ	1/1:0,81:82:-317.60,-24.41,-0.03:99
-chr1	5088851	rs898338	G	T	586.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1967.21;QD=32.25;SB=-901.77	GT:AD:DP:GL:GQ	1/1:0,61:55:-200.32,-16.57,-0.02:99
-chr1	5091688	rs11588537	G	C	0.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.02;MQ=59.44;MQ0=0;OQ=1667.23;QD=40.66;SB=-503.13	GT:AD:DP:GL:GQ	1/1:0,41:41:-170.32,-12.36,-0.02:99
-chr1	5092085	rs4245628	G	A	151.82	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.41;MQ0=0;OQ=3066.13;QD=39.31;SB=-1187.61	GT:AD:DP:GL:GQ	1/1:0,78:77:-310.22,-23.19,-0.02:99
-chr1	5092563	rs6671889	C	A	625.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=3060.89;QD=36.88;SB=-1358.20	GT:AD:DP:GL:GQ	1/1:0,83:82:-309.69,-24.69,-0.01:99
-chr1	5092609	rs4949165	G	C	633.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=3087.67;QD=42.88;SB=-1533.25	GT:AD:DP:GL:GQ	1/1:0,72:72:-312.37,-21.69,-0.02:99
-chr1	5092886	rs10492923	A	G	560.12	PASS	AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=897.90;QD=12.47;SB=-469.86	GT:AD:DP:GL:GQ	0/1:34,38:69:-113.87,-20.80,-132.03:99
-chr1	5093533	rs9439505	C	T	206.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=59.13;MQ0=0;OQ=1236.94;QD=16.49;SB=-238.14	GT:AD:DP:GL:GQ	0/1:38,37:73:-148.98,-22.00,-117.20:99
-chr1	5093841	rs12143009	G	A	1328.69	Indel	AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=3;HaplotypeScore=2.85;MQ=59.81;MQ0=1;QD=15.27;SB=-676.33	GT:AD:DP:GL:GQ	0/1:46,41:84:-161.46,-25.31,-156.05:99
-chr1	5094064	rs16840020	C	T	380.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.40;MQ0=0;OQ=843.58;QD=13.61;SB=-387.37	GT:AD:DP:GL:GQ	0/1:36,26:61:-106.01,-18.37,-128.57:99
-chr1	5094308	rs9439536	C	G	94.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=57.94;MQ0=0;OQ=2369.61;QD=43.08;SB=-1192.92	GT:AD:DP:GL:GQ	1/1:0,55:55:-240.56,-16.57,-0.02:99
-chr1	5094675	rs9439537	G	A	205.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=56.69;MQ0=0;OQ=2327.54;QD=36.95;SB=-997.02	GT:AD:DP:GL:GQ	1/1:0,63:59:-236.35,-17.77,-0.02:99
-chr1	5095027	rs10737397	A	C	379.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.02;HRun=2;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1853.36;QD=34.97;SB=-880.10	GT:AD:DP:GL:GQ	1/1:0,52:52:-188.93,-15.66,-0.01:99
-chr1	5095151	rs10915359	A	G	343.67	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=1130.12;QD=15.92;SB=-404.21	GT:AD:DP:GL:GQ	0/1:33,38:69:-137.08,-20.78,-130.21:99
-chr1	5095177	rs12122020	C	T	430.32	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1196.16;QD=13.91;SB=-341.80	GT:AD:DP:GL:GQ	0/1:49,37:84:-148.20,-25.30,-177.14:99
-chr1	5095231	rs10492925	T	C	590.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1272.89;QD=14.98;SB=-556.65	GT:AD:DP:GL:GQ	0/1:35,50:83:-155.59,-25.02,-138.70:99
-chr1	5095242	rs12045223	A	T	548.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1555.76;QD=18.52;SB=-658.48	GT:AD:DP:GL:GQ	0/1:35,49:82:-183.56,-24.70,-128.89:99
-chr1	5096599	rs9439506	A	G	501.16	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=607.79;QD=10.30;SB=-265.38	GT:AD:DP:GL:GQ	0/1:36,23:58:-81.54,-17.47,-140.55:99
-chr1	5097069	.	C	T	27.83	PASS	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=280.61;QD=35.08;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:8:-31.64,-2.41,-0.00:24.08
-chr1	5097076	.	C	A	58.51	PASS	AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=242.27;QD=30.28;SB=-10.00	GT:AD:DP:GL:GQ	1/1:0,8:8:-27.81,-2.41,-0.00:24.07
-chr1	5097414	rs34593428	C	T	209.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=915.00;QD=14.52;SB=-282.17	GT:AD:DP:GL:GQ	0/1:34,29:62:-113.46,-18.67,-123.11:99
-chr1	5097811	rs10799172	T	C	730.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2361.85;QD=34.73;SB=-1109.84	GT:AD:DP:GL:GQ	1/1:0,68:67:-239.79,-20.18,-0.02:99
-chr1	5097837	rs10799173	C	T	610.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=2894.02;QD=39.64;SB=-1458.48	GT:AD:DP:GL:GQ	1/1:0,73:72:-293.00,-21.69,-0.02:99
-chr1	5098649	rs16840051	C	T	466.71	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.76;MQ0=0;OQ=1115.98;QD=14.31;SB=-521.66	GT:AD:DP:GL:GQ	0/1:43,35:76:-137.77,-22.89,-150.84:99
-chr1	5099594	rs61576661	T	C	2.98	PASS	AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.02;HRun=0;HaplotypeScore=9.91;MQ=59.43;MQ0=0;OQ=660.15;QD=12.23;SB=-250.93	GT:AD:DP:GL:GQ	0/1:29,24:54:-85.27,-15.97,-115.92:99
-chr1	5100592	rs6681359	C	T	709.39	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=3001.23;QD=40.02;SB=-1288.71	GT:AD:DP:GL:GQ	1/1:0,75:75:-303.72,-22.59,-0.02:99
-chr1	5102008	rs7543139	A	C	24.50	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=8.00;MQ=58.40;MQ0=0;OQ=1023.25;QD=14.62;SB=-311.81	GT:AD:DP:GL:GQ	0/1:35,35:67:-125.80,-20.19,-114.71:99
-chr1	5102179	rs16840055	A	G	103.26	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.41;MQ0=0;OQ=1029.92;QD=14.51;SB=-438.97	GT:AD:DP:GL:GQ	0/1:36,35:69:-127.06,-20.79,-136.54:99
-chr1	5103146	rs4484964	T	C	669.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=2031.10;QD=32.24;SB=-774.73	GT:AD:DP:GL:GQ	1/1:0,63:62:-206.74,-18.69,-0.04:99
-chr1	5103788	.	G	T	167.53	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.70;MQ0=0;OQ=1064.37;QD=14.00;SB=-541.64	GT:AD:DP:GL:GQ	0/1:38,38:74:-132.01,-22.29,-131.40:99
-chr1	5106305	rs9439509	G	A	600.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=2218.17;QD=38.92;SB=-991.33	GT:AD:DP:GL:GQ	1/1:0,57:57:-225.42,-17.18,-0.02:99
-chr1	5106499	rs4345839	A	G	149.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=59.43;MQ0=0;OQ=2177.60;QD=33.50;SB=-1108.75	GT:AD:DP:GL:GQ	1/1:0,64:62:-221.38,-18.68,-0.03:99
-chr1	5107407	rs4584438	T	G	105.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=2390.91;QD=33.67;SB=-961.60	GT:AD:DP:GL:GQ	1/1:0,70:70:-246.35,-24.25,-3.68:99
-chr1	5107616	rs4543848	T	C	111.63	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=59.72;MQ0=0;OQ=2325.30;QD=34.71;SB=-962.92	GT:AD:DP:GL:GQ	1/1:0,67:66:-236.14,-19.88,-0.02:99
-chr1	5107713	.	A	C	103.40	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1036.38;QD=12.79;SB=-351.52	GT:AD:DP:GL:GQ	0/1:44,37:81:-131.32,-24.40,-159.14:99
-chr1	5109104	rs12025231	C	T	369.55	PASS	AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=60.00;MQ0=0;OQ=1428.81;QD=14.73;SB=-339.81	GT:AD:DP:GL:GQ	0/1:53,44:96:-175.10,-28.94,-171.50:99
-chr1	5109781	rs9439510	C	G	474.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3322.39;QD=44.30;SB=-1477.33	GT:AD:DP:GL:GQ	1/1:0,75:75:-331.24,-22.59,-0.02:99
-chr1	5109984	rs12121369	C	A	599.91	PASS	AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1366.71;QD=15.89;SB=-516.80	GT:AD:DP:GL:GQ	0/1:40,46:85:-165.55,-25.60,-144.36:99
-chr1	5110261	rs7538704	G	C	501.84	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1089.65;QD=15.35;SB=-449.75	GT:AD:DP:GL:GQ	0/1:33,38:67:-132.47,-20.22,-140.33:99
-chr1	5110586	rs4462197	C	T	256.57	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2327.86;QD=37.55;SB=-1085.00	GT:AD:DP:GL:GQ	1/1:0,62:59:-236.39,-17.78,-0.02:99
-chr1	5110994	rs10753353	T	C	229.27	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.74;MQ0=0;OQ=2543.07;QD=35.32;SB=-1168.48	GT:AD:DP:GL:GQ	1/1:0,72:71:-257.91,-21.39,-0.02:99
-chr1	5111198	rs12027352	C	T	56.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=3.00;MQ=59.50;MQ0=0;OQ=1422.29;QD=15.29;SB=-680.29	GT:AD:DP:GL:GQ	0/1:47,46:88:-172.02,-26.51,-161.50:99
-chr1	5111405	rs4314925	G	A	196.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.36;MQ0=0;OQ=2517.06;QD=38.72;SB=-1234.63	GT:AD:DP:GL:GQ	1/1:0,65:64:-255.31,-19.28,-0.02:99
-chr1	5112055	rs12145645	G	A	578.52	PASS	AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1010.93;QD=13.66;SB=-362.83	GT:AD:DP:GL:GQ	0/1:42,32:72:-126.06,-21.69,-149.75:99
-chr1	5112088	rs61762208	G	A	38.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=2;HaplotypeScore=1.85;MQ=59.44;MQ0=0;OQ=1643.08;QD=19.80;SB=-651.68	GT:AD:DP:GL:GQ	0/1:37,46:82:-192.29,-24.70,-131.13:99
-chr1	5112135	rs12741116	A	G	713.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2397.16;QD=35.25;SB=-898.68	GT:AD:DP:GL:GQ	1/1:0,68:67:-243.32,-20.18,-0.02:99
-chr1	5113244	rs4600091	T	C	489.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2494.81;QD=29.70;SB=-1138.12	GT:AD:DP:GL:GQ	1/1:0,84:79:-253.13,-23.82,-0.07:99
-chr1	5113507	rs10753354	C	G	401.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2295.20;QD=42.50;SB=-1097.09	GT:AD:DP:GL:GQ	1/1:0,54:54:-233.13,-16.28,-0.02:99
-chr1	5113815	rs6698288	G	A	330.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2134.65;QD=39.53;SB=-887.16	GT:AD:DP:GL:GQ	1/1:0,54:54:-217.07,-16.27,-0.02:99
-chr1	5114383	rs7517431	C	G	606.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=920.14;QD=14.61;SB=-463.75	GT:AD:DP:GL:GQ	0/1:36,27:62:-113.98,-18.68,-155.27:99
-chr1	5114445	rs7517449	C	T	297.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2115.05;QD=38.46;SB=-1037.87	GT:AD:DP:GL:GQ	1/1:0,55:54:-215.11,-16.27,-0.02:99
-chr1	5114723	rs10915361	C	T	120.85	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.02;MQ=58.20;MQ0=0;OQ=931.19;QD=19.81;SB=-478.50	GT:AD:DP:GL:GQ	0/1:19,28:46:-110.26,-13.86,-62.96:99
-chr1	5115596	rs9439538	T	C	593.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1568.48;QD=30.16;SB=-606.93	GT:AD:DP:GL:GQ	1/1:0,52:50:-160.48,-15.08,-0.04:99
-chr1	5115679	rs12021698	A	T	372.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.37;MQ0=0;OQ=887.17;QD=15.04;SB=-310.70	GT:AD:DP:GL:GQ	0/1:30,29:59:-109.77,-17.77,-114.78:99
-chr1	5115822	rs56173770	C	G	132.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1600.81;QD=26.68;SB=-808.51	GT:AD:DP:GL:GQ	0/1:19,41:59:-181.14,-17.77,-78.42:99
-chr1	5115851	rs9439539	T	A	636.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2566.28;QD=37.74;SB=-1304.50	GT:AD:DP:GL:GQ	1/1:0,68:67:-260.22,-20.18,-0.01:99
-chr1	5117179	rs5009987	A	G	1517.20	Indel	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=20.42;MQ=58.93;MQ0=0;QD=27.59;SB=-603.23	GT:AD:DP:GL:GQ	1/1:2,53:53:-162.87,-15.98,-7.57:84.15
-chr1	5117504	rs10799174	G	A	14.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=8.52;MQ=58.73;MQ0=0;OQ=1003.11;QD=18.24;SB=-483.50	GT:AD:DP:GL:GQ	0/1:24,31:52:-119.27,-15.67,-72.69:99
-chr1	5117533	rs6672724	C	T	186.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.63;MQ0=0;OQ=1901.56;QD=37.29;SB=-943.75	GT:AD:DP:GL:GQ	1/1:0,51:50:-193.77,-15.07,-0.02:99
-chr1	5118461	rs9439511	C	T	378.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=58.91;MQ0=0;OQ=1153.56;QD=14.98;SB=-536.73	GT:AD:DP:GL:GQ	0/1:42,35:77:-141.84,-23.20,-148.03:99
-chr1	5119340	rs12401983	G	A	186.94	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=52.79;MQ0=0;OQ=1320.64;QD=16.93;SB=-541.57	GT:AD:DP:GL:GQ	0/1:37,40:76:-158.24,-22.89,-135.98:99
-chr1	5119644	rs55835407	G	A	140.46	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=42.95;MQ0=4;OQ=797.21;QD=12.86;SB=-199.88	GT:AD:DP:GL:GQ	0/1:35,27:56:-99.88,-16.88,-103.36:99
-chr1	5119704	rs56293801	T	C	75.11	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=42.91;MQ0=1;OQ=434.63;QD=8.36;SB=-212.22	GT:AD:DP:GL:GQ	0/1:32,20:46:-60.61,-13.87,-109.45:99
-chr1	5119914	rs12097824	T	C	114	PASS	AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=39.01;MQ0=0;OQ=589.79;QD=9.51;SB=-187.41	GT:AD:DP:GL:GQ	0/1:33,29:57:-79.44,-17.18,-127.34:99
-chr1	5120013	rs56126017	C	G	210.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=35.32;MQ0=0;OQ=1020.64;QD=14.38;SB=-272.51	GT:AD:DP:GL:GQ	0/1:43,28:70:-126.44,-21.09,-178.51:99
-chr1	5120085	.	G	A	0.02	FDRtranche1.00to2.00	AC=1;AF=0.50;AN=2;DP=101;Dels=0.01;HRun=0;HaplotypeScore=11.89;MQ=34.93;MQ0=0;OQ=541.17;QD=5.36;SB=13.62	GT:AD:DP:GL:GQ	0/1:77,23:97:-86.32,-28.91,-276.66:99
-chr1	5120089	.	T	A	0.03	FDRtranche0.10to1.00	AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=10.97;MQ=34.87;MQ0=0;OQ=894.55;QD=8.77;SB=-13.59	GT:AD:DP:GL:GQ	0/1:68,34:99:-122.56,-29.82,-255.26:99
-chr1	5120116	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=117;Dels=0.02;HRun=0;HaplotypeScore=143.29;MQ=34.92;MQ0=0;OQ=962.81;QD=8.23;SB=-91.05	GT:AD:DP:GL:GQ	0/1:76,37:114:-138.10,-38.53,-297.11:99
-chr1	5120146	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=141;Dels=0.01;HRun=0;HaplotypeScore=240.33;MQ=33.11;MQ0=0;OQ=492.54;QD=3.49;SB=14.98	GT:AD:DP:GL:GQ	0/1:116,23:120:-88.08,-35.54,-336.13:99
-chr1	5120150	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=150;Dels=0.03;HRun=0;HaplotypeScore=253.70;MQ=32.31;MQ0=0;OQ=526.30;QD=3.51;SB=-209.96	GT:AD:DP:GL:GQ	0/1:122,23:125:-96.24,-40.33,-348.30:99
-chr1	5120166	rs61762214	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.02;HRun=0;HaplotypeScore=340.16;MQ=31.74;MQ0=0;OQ=707.91;QD=4.19;SB=-238.38	GT:AD:DP:GL:GQ	0/1:128,38:158:-120.76,-46.69,-441.60:99
-chr1	5120182	.	T	C	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=0;HaplotypeScore=247.34;MQ=30.32;MQ0=1;OQ=181.12;QD=1.06;SB=99.79	GT:AD:DP:GL:GQ	0/1:146,25:160:-69.62,-48.22,-544.70:99
-chr1	5120218	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=296.87;MQ=30.08;MQ0=1;OQ=467.02;QD=2.51;SB=-243.49	GT:AD:DP:GL:GQ	0/1:160,26:175:-102.70,-52.71,-541.07:99
-chr1	5120238	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=187;Dels=0.01;HRun=0;HaplotypeScore=156.33;MQ=31.62;MQ0=1;OQ=98.86;QD=0.53;SB=35.37	GT:AD:DP:GL:GQ	0/1:164,15:172:-86.49,-73.32,-562.87:99
-chr1	5120240	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=184;Dels=0.01;HRun=0;HaplotypeScore=148.66;MQ=31.61;MQ0=1;OQ=319.23;QD=1.73;SB=30.34	GT:AD:DP:GL:GQ	0/1:160,22:170:-85.81,-50.61,-526.60:99
-chr1	5120250	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=149.91;MQ=33.54;MQ0=1;OQ=262.42;QD=1.60;SB=170.48	GT:AD:DP:GL:GQ	0/1:144,20:159:-77.42,-47.90,-500.91:99
-chr1	5120252	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=0;HaplotypeScore=134.92;MQ=34.14;MQ0=1;OQ=1590.07;QD=10.46;SB=-170.99	GT:AD:DP:GL:GQ	0/1:98,53:143:-208.80,-46.51,-329.18:99
-chr1	5121185	.	T	C	32.44	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.52;MQ0=0;OQ=529.93;QD=11.04;SB=-169.50	GT:AD:DP:GL:GQ	0/1:26,22:46:-70.14,-13.86,-100.33:99
-chr1	5122129	rs10915363	G	C	183.28	PASS	AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.47;MQ0=0;OQ=1248.82;QD=17.84;SB=-543.72	GT:AD:DP:GL:GQ	0/1:31,39:66:-148.06,-19.89,-135.32:99
-chr1	5122156	rs10915364	G	C	495.83	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1017.04;QD=16.14;SB=-464.81	GT:AD:DP:GL:GQ	0/1:31,32:62:-123.68,-18.70,-134.13:99
-chr1	5122248	rs11804873	C	T	62.77	PASS	AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.39;MQ0=0;OQ=700.13;QD=18.42;SB=-213.90	GT:AD:DP:GL:GQ	0/1:16,22:37:-84.44,-11.15,-55.54:99
-chr1	5122456	rs10915365	C	T	167.44	PASS	AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=59.52;MQ0=0;OQ=504.80;QD=12.94;SB=-201.18	GT:AD:DP:GL:GQ	0/1:22,17:38:-65.21,-11.45,-78.02:99
-chr1	5122978	rs12024162	T	C	1.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=6.85;MQ=58.05;MQ0=0;OQ=2287.65;QD=35.19;SB=-898.04	GT:AD:DP:GL:GQ	1/1:1,64:63:-232.37,-18.97,-0.02:99
-chr1	5123042	rs12026730	G	A	134.42	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=56.89;MQ0=0;OQ=1205.15;QD=19.76;SB=-414.94	GT:AD:DP:GL:GQ	0/1:25,36:58:-141.29,-17.49,-70.06:99
-chr1	5123330	rs9439540	C	A	63.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.37;MQ0=0;OQ=975.37;QD=16.53;SB=-180.54	GT:AD:DP:GL:GQ	0/1:27,32:57:-117.99,-17.17,-89.17:99
-chr1	5124476	rs17366543	A	G	248.41	PASS	AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=919.81;QD=12.26;SB=-428.10	GT:AD:DP:GL:GQ	0/1:42,33:74:-117.56,-22.29,-166.31:99
-chr1	5126548	rs6690311	A	G	73.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.31;MQ=60.00;MQ0=0;OQ=1952.07;QD=34.25;SB=-789.11	GT:AD:DP:GL:GQ	1/1:0,56:56:-198.81,-16.87,-0.02:99
-chr1	5126612	rs6675995	G	A	137.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.05;MQ=59.06;MQ0=0;OQ=2638.82;QD=38.24;SB=-1319.37	GT:AD:DP:GL:GQ	1/1:0,69:67:-267.49,-20.19,-0.02:99
-chr1	5126665	rs10799176	G	A	160.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.11;MQ0=0;OQ=2842.19;QD=38.93;SB=-1393.38	GT:AD:DP:GL:GQ	1/1:0,73:72:-287.83,-21.69,-0.02:99
-chr1	5126844	rs6685929	C	T	627.62	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2295.72;QD=37.63;SB=-1082.35	GT:AD:DP:GL:GQ	1/1:0,61:59:-233.18,-17.78,-0.02:99
-chr1	5126974	.	G	T	128.27	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.02;MQ0=0;OQ=1169.78;QD=18.87;SB=-560.81	GT:AD:DP:GL:GQ	0/1:24,38:60:-138.33,-18.07,-79.90:99
-chr1	5129269	rs11583683	C	T	146.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2126.34;QD=37.30;SB=-795.34	GT:AD:DP:GL:GQ	1/1:0,57:56:-216.24,-16.88,-0.02:99
-chr1	5129679	rs6603817	A	G	112.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.96;MQ0=0;OQ=1509.76;QD=32.82;SB=-474.53	GT:AD:DP:GL:GQ	1/1:0,46:43:-154.58,-12.95,-0.01:99
-chr1	5130606	rs4076635	G	A	636.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2562.75;QD=38.25;SB=-1303.24	GT:AD:DP:GL:GQ	1/1:0,67:65:-259.88,-19.58,-0.02:99
-chr1	5131752	rs4394703	C	A	307.05	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.90;MQ0=0;OQ=2017.11;QD=34.19;SB=-1012.79	GT:AD:DP:GL:GQ	1/1:0,58:57:-208.21,-19.84,-2.91:99
-chr1	5132477	rs6692740	A	G	667.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2294.64;QD=31.43;SB=-1053.29	GT:AD:DP:GL:GQ	1/1:0,73:71:-233.10,-21.41,-0.05:99
-chr1	5133851	rs10492928	G	T	624.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=2734.91;QD=36.47;SB=-1337.92	GT:AD:DP:GL:GQ	1/1:0,75:75:-277.10,-22.59,-0.02:99
-chr1	5134195	rs7545119	C	A	288.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=59.11;MQ0=0;OQ=2691.33;QD=34.50;SB=-1000.80	GT:AD:DP:GL:GQ	1/1:0,78:75:-272.75,-22.59,-0.03:99
-chr1	5135504	rs10915369	C	T	488.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=1900.03;QD=39.58;SB=-759.52	GT:AD:DP:GL:GQ	1/1:0,48:48:-193.60,-14.46,-0.01:99
-chr1	5135682	rs11583044	G	A	156.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=56.88;MQ0=0;OQ=1535.65;QD=34.90;SB=-689.33	GT:AD:DP:GL:GQ	1/1:0,44:41:-157.17,-12.36,-0.02:99
-chr1	5135692	rs10915370	C	T	137.61	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.35;MQ0=0;OQ=2137.06;QD=38.16;SB=-962.28	GT:AD:DP:GL:GQ	1/1:0,56:55:-217.31,-16.57,-0.02:99
-chr1	5138733	rs10915371	G	A	186.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.20;MQ0=0;OQ=3762.30;QD=40.02;SB=-1754.36	GT:AD:DP:GL:GQ	1/1:0,94:93:-375.23,-28.01,-0.02:99
-chr1	5139307	rs9439541	A	T	634.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3003.64;QD=37.55;SB=-1255.20	GT:AD:DP:GL:GQ	1/1:0,80:79:-303.97,-23.79,-0.02:99
-chr1	5139791	rs6603818	C	T	714.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2781.44;QD=39.73;SB=-1291.72	GT:AD:DP:GL:GQ	1/1:0,70:70:-281.75,-21.09,-0.02:99
-chr1	5140071	rs7547229	C	T	724.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3128.00;QD=38.62;SB=-1344.39	GT:AD:DP:GL:GQ	1/1:0,81:78:-316.40,-23.49,-0.02:99
-chr1	5140234	.	A	C	162.19	PASS	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=858.81;QD=15.61;SB=-394.78	GT:AD:DP:GL:GQ	0/1:24,31:53:-105.13,-15.96,-88.06:99
-chr1	5141171	rs6688418	G	A	695.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2832.24;QD=40.46;SB=-1208.37	GT:AD:DP:GL:GQ	1/1:0,70:70:-286.82,-21.08,-0.01:99
-chr1	5141665	.	C	T	43.31	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.95;MQ0=0;OQ=985.11;QD=18.24;SB=-409.92	GT:AD:DP:GL:GQ	0/1:25,29:53:-117.76,-15.96,-94.79:99
-chr1	5141935	rs6701052	C	T	100.43	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.66;MQ=49.80;MQ0=8;OQ=1859.57;QD=32.06;SB=-869.02	GT:AD:DP:GL:GQ	1/1:8,50:47:-189.55,-14.16,-0.01:99
-chr1	5142041	rs12072516	A	T	329.01	PASS	AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.00;MQ0=0;OQ=266.78;QD=9.53;SB=-152.82	GT:AD:DP:GL:GQ	0/1:16,12:25:-37.49,-7.53,-57.93:99
-chr1	5142287	rs9286978	G	A	22.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.68;MQ0=8;OQ=873.11;QD=24.95;SB=-85.33	GT:AD:DP:GL:GQ	1/1:3,32:23:-90.90,-6.93,-0.01:69.22
-chr1	5143205	rs6664086	T	C	86.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=58.49;MQ0=0;OQ=2734.43;QD=33.76;SB=-1255.67	GT:AD:DP:GL:GQ	1/1:1,80:78:-277.05,-23.49,-0.03:99
-chr1	5144621	rs6603819	C	A	635.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2574.32;QD=36.78;SB=-1238.13	GT:AD:DP:GL:GQ	1/1:0,70:70:-261.03,-21.08,-0.02:99
-chr1	5146701	rs6669501	C	T	700.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=3011.38;QD=38.61;SB=-1500.64	GT:AD:DP:GL:GQ	1/1:0,78:76:-304.75,-22.90,-0.03:99
-chr1	5146942	rs10492930	A	G	610.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2413.30;QD=30.17;SB=-1138.47	GT:AD:DP:GL:GQ	1/1:0,79:77:-244.99,-23.23,-0.08:99
-chr1	5147215	rs10492931	G	A	723.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2807.87;QD=39.00;SB=-1216.01	GT:AD:DP:GL:GQ	1/1:0,72:71:-284.39,-21.39,-0.02:99
-chr1	5148161	.	G	A	24.17	PASS	AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.39;MQ0=0;OQ=1450.62;QD=19.09;SB=-417.73	GT:AD:DP:GL:GQ	0/1:33,43:74:-170.64,-22.29,-112.74:99
-chr1	5148401	rs6665697	T	C	269.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.48;MQ0=0;OQ=2231.09;QD=30.99;SB=-952.42	GT:AD:DP:GL:GQ	1/1:0,72:70:-226.75,-21.11,-0.06:99
-chr1	5150357	rs10915375	A	G	529.20	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=1555.45;QD=31.74;SB=-790.64	GT:AD:DP:GL:GQ	1/1:0,49:49:-159.17,-14.78,-0.04:99
-chr1	5150590	.	G	T	11.56	DPFilter;LowQual	AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=20;HaplotypeScore=36.67;MQ=54.55;MQ0=0;QD=0.17;SB=69.39	GT:AD:DP:GL:GQ	0/1:49,15:42:-26.08,-21.67,-128.29:44.08
-chr1	5150765	rs9439543	T	C	624.17	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2519.73;QD=35.49;SB=-971.41	GT:AD:DP:GL:GQ	1/1:0,71:70:-255.58,-21.09,-0.03:99
-chr1	5150768	rs9439544	C	T	629.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=2827.18;QD=38.21;SB=-1183.08	GT:AD:DP:GL:GQ	1/1:0,74:71:-286.33,-21.39,-0.02:99
-chr1	5150948	rs11583754	A	G	125.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=56.88;MQ0=0;OQ=1724.72;QD=34.49;SB=-813.67	GT:AD:DP:GL:GQ	1/1:0,50:49:-176.07,-14.76,-0.02:99
-chr1	5153524	rs7536712	T	C	117.29	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=59.77;MQ0=0;OQ=2818.40;QD=35.23;SB=-1399.67	GT:AD:DP:GL:GQ	1/1:1,78:79:-289.59,-27.33,-4.17:99
-chr1	5155164	rs2722780	G	T	611.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2724.16;QD=35.38;SB=-1305.24	GT:AD:DP:GL:GQ	1/1:0,77:77:-276.03,-23.20,-0.03:99
-chr1	5155635	rs2018394	C	G	496.66	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.82;MQ0=0;OQ=3565.75;QD=43.48;SB=-1230.53	GT:AD:DP:GL:GQ	1/1:0,82:80:-355.57,-24.10,-0.02:99
-chr1	5156126	rs2679215	G	C	570.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2670.60;QD=41.73;SB=-1328.91	GT:AD:DP:GL:GQ	1/1:0,64:63:-270.67,-18.98,-0.02:99
-chr1	5156634	rs1320179	T	A	161.58	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.60;MQ0=0;OQ=1611.01;QD=34.28;SB=-497.40	GT:AD:DP:GL:GQ	1/1:0,47:44:-164.71,-13.26,-0.02:99
-chr1	5157054	.	G	A	104.21	PASS	AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=58.03;MQ0=0;OQ=746.35;QD=13.09;SB=-370.87	GT:AD:DP:GL:GQ	0/1:33,24:57:-95.09,-17.17,-121.22:99
-chr1	5157089	rs2722781	C	T	248.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.68;MQ0=0;OQ=2013.78;QD=38.00;SB=-852.01	GT:AD:DP:GL:GQ	1/1:0,53:51:-204.98,-15.36,-0.01:99
-chr1	5158014	rs2679216	A	G	582.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=2870.64;QD=35.01;SB=-1392.56	GT:AD:DP:GL:GQ	1/1:0,82:80:-290.67,-24.10,-0.03:99
-chr1	5158416	rs2722782	T	C	292.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.74;MQ0=0;OQ=2481.35;QD=34.95;SB=-1226.71	GT:AD:DP:GL:GQ	1/1:0,71:71:-251.75,-21.39,-0.03:99
-chr1	5158842	rs2679217	A	C	278.49	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2099.17;QD=33.86;SB=-765.90	GT:AD:DP:GL:GQ	1/1:0,62:61:-213.53,-18.38,-0.03:99
-chr1	5160232	rs2722783	T	C	124.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.02;MQ0=0;OQ=2420.10;QD=34.09;SB=-1200.16	GT:AD:DP:GL:GQ	1/1:1,69:68:-249.06,-23.31,-3.46:99
-chr1	5162761	rs2679218	T	C	309.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.65;MQ0=0;OQ=2240.61;QD=34.47;SB=-957.91	GT:AD:DP:GL:GQ	1/1:0,65:65:-227.67,-19.58,-0.02:99
-chr1	5164088	rs2722786	A	G	678.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2134.58;QD=34.99;SB=-757.97	GT:AD:DP:GL:GQ	1/1:0,61:60:-217.06,-18.07,-0.02:99
-chr1	5164377	rs2722787	T	C	664.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1994.32;QD=31.16;SB=-946.38	GT:AD:DP:GL:GQ	1/1:0,64:63:-203.07,-19.00,-0.06:99
-chr1	5164508	.	G	A	21.64	PASS	AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1023.93;QD=15.51;SB=-404.39	GT:AD:DP:GL:GQ	0/1:35,31:64:-124.97,-19.29,-108.14:99
-chr1	5165252	rs2679219	A	G	545.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2430.87;QD=31.16;SB=-1145.16	GT:AD:DP:GL:GQ	1/1:0,78:76:-246.73,-22.91,-0.06:99
-chr1	5165298	rs2722788	C	T	111.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.52;MQ0=0;OQ=3387.05;QD=38.93;SB=-1669.69	GT:AD:DP:GL:GQ	1/1:0,87:85:-337.71,-25.61,-0.03:99
-chr1	5166378	rs2722790	C	T	150.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.01;MQ0=0;OQ=2739.21;QD=39.13;SB=-1381.68	GT:AD:DP:GL:GQ	1/1:0,70:69:-277.52,-20.79,-0.02:99
-chr1	5170379	.	C	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=20;HaplotypeScore=3.49;MQ=51.63;MQ0=1;OQ=52.88;QD=0.64;SB=122.38	GT:AD:DP:GL:GQ	0/1:61,22:64:-27.86,-19.28,-197.27:85.72
-chr1	5172063	rs56164612	G	A	177.93	PASS	AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.16;MQ0=0;OQ=776.89;QD=15.54;SB=-274.16	GT:AD:DP:GL:GQ	0/1:24,26:48:-95.43,-14.46,-86.73:99
-chr1	5191577	rs471824	A	G	242.55	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=1721.79;QD=27.77;SB=-749.45	GT:AD:DP:GL:GQ	1/1:1,61:57:-179.88,-17.20,-4.11:99
-chr1	5191739	rs632051	C	A	18.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=4.23;MQ=58.83;MQ0=0;OQ=3137.26;QD=37.35;SB=-891.27	GT:AD:DP:GL:GQ	1/1:0,84:83:-317.33,-25.00,-0.02:99
-chr1	5193545	rs566114	T	G	200.45	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2400.30;QD=34.29;SB=-1100.14	GT:AD:DP:GL:GQ	1/1:0,70:68:-243.64,-20.48,-0.02:99
-chr1	5194097	rs56295354	C	T	367.36	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.98;MQ0=0;OQ=896.66;QD=14.01;SB=-471.46	GT:AD:DP:GL:GQ	0/1:34,30:62:-111.63,-18.68,-121.51:99
-chr1	5195036	rs677735	A	G	310.10	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.68;MQ0=0;OQ=2493.12;QD=34.15;SB=-981.71	GT:AD:DP:GL:GQ	1/1:0,73:71:-252.92,-21.39,-0.03:99
-chr1	5195467	rs2986186	T	A	311.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2846.52;QD=37.45;SB=-1332.00	GT:AD:DP:GL:GQ	1/1:0,76:75:-288.25,-22.59,-0.02:99
-chr1	5196704	rs2353169	T	C	724.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=2499.39;QD=34.71;SB=-983.95	GT:AD:DP:GL:GQ	1/1:0,72:72:-253.55,-21.69,-0.02:99
-chr1	5197705	rs473104	A	G	598.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2654.56;QD=34.93;SB=-1319.89	GT:AD:DP:GL:GQ	1/1:0,76:74:-269.06,-22.29,-0.02:99
-chr1	5197747	rs586165	T	C	721.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2710.69;QD=35.20;SB=-1278.13	GT:AD:DP:GL:GQ	1/1:0,77:76:-274.68,-22.89,-0.03:99
-chr1	5198145	rs584402	C	T	717.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2714.09;QD=39.33;SB=-1353.02	GT:AD:DP:GL:GQ	1/1:0,69:69:-275.01,-20.79,-0.02:99
-chr1	5198627	rs679712	T	A	207.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.36;MQ0=0;OQ=2332.10;QD=35.88;SB=-1044.59	GT:AD:DP:GL:GQ	1/1:0,65:63:-236.81,-18.97,-0.02:99
-chr1	5198919	rs551536	T	C	66.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.68;MQ0=0;OQ=2254.50;QD=31.75;SB=-1121.22	GT:AD:DP:GL:GQ	1/1:0,71:70:-229.09,-21.11,-0.06:99
-chr1	5198972	rs551376	G	A	527.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2736.21;QD=38.54;SB=-1372.67	GT:AD:DP:GL:GQ	1/1:0,71:69:-277.22,-20.79,-0.02:99
-chr1	5199041	rs550558	G	A	271.08	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.75;MQ0=0;OQ=2982.88;QD=39.25;SB=-1518.69	GT:AD:DP:GL:GQ	1/1:0,75:75:-301.89,-22.59,-0.02:99
-chr1	5199083	rs549773	C	A	400.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2265.19;QD=35.39;SB=-1149.37	GT:AD:DP:GL:GQ	1/1:0,64:63:-230.13,-18.98,-0.02:99
-chr1	5199801	rs663998	C	G	667.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=1;OQ=2933.78;QD=41.91;SB=-1382.38	GT:AD:DP:GL:GQ	1/1:0,70:68:-296.98,-20.49,-0.02:99
-chr1	5199984	rs663142	G	T	300.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.88;MQ0=0;OQ=2524.52;QD=34.58;SB=-1263.12	GT:AD:DP:GL:GQ	1/1:0,73:71:-256.06,-21.39,-0.02:99
-chr1	5200020	rs663106	T	C	288.64	PASS	AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=2324.56;QD=29.06;SB=-1068.20	GT:AD:DP:GL:GQ	1/1:0,80:72:-236.10,-21.71,-0.06:99
-chr1	5201096	rs35339923	C	T	25.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.27;MQ0=0;OQ=2513.57;QD=39.90;SB=-919.70	GT:AD:DP:GL:GQ	1/1:0,63:63:-254.96,-18.98,-0.02:99
-chr1	5201932	rs611422	T	C	369.89	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2205.79;QD=33.94;SB=-980.06	GT:AD:DP:GL:GQ	1/1:0,65:62:-224.19,-18.68,-0.02:99
-chr1	5201978	rs534321	A	C	83.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.68;MQ0=0;OQ=2498.46;QD=34.23;SB=-901.19	GT:AD:DP:GL:GQ	1/1:0,73:73:-253.46,-21.99,-0.03:99
-chr1	5202029	rs534188	C	T	644.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=2223.00;QD=39.70;SB=-899.19	GT:AD:DP:GL:GQ	1/1:0,56:56:-225.90,-16.87,-0.02:99
-chr1	5202175	rs12125575	G	A	578.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.13;MQ0=0;OQ=1740.25;QD=37.03;SB=-800.07	GT:AD:DP:GL:GQ	1/1:0,47:44:-177.62,-13.25,-0.01:99
-chr1	5202200	rs610133	T	C	141.51	PASS	AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=49.73;MQ0=0;OQ=1399.83;QD=30.43;SB=-711.63	GT:AD:DP:GL:GQ	1/1:0,46:41:-143.59,-12.36,-0.02:99
-chr1	5202222	rs511282	G	T	609.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=50.02;MQ0=0;OQ=2299.71;QD=34.32;SB=-1138.31	GT:AD:DP:GL:GQ	1/1:0,67:64:-233.58,-19.28,-0.02:99
-chr1	5202265	rs599481	G	T	595.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.58;MQ0=0;OQ=2113.87;QD=33.55;SB=-993.43	GT:AD:DP:GL:GQ	1/1:0,63:58:-214.99,-17.47,-0.02:99
-chr1	5202388	rs12066405	A	G	127.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=51.98;MQ0=0;OQ=2322.85;QD=33.66;SB=-1080.10	GT:AD:DP:GL:GQ	1/1:0,69:65:-235.89,-19.58,-0.02:99
-chr1	5202422	.	T	G	419.39	Indel	AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=66.39;MQ=43.53;MQ0=0;QD=7.23;SB=-202.77	GT:AD:DP:GL:GQ	0/1:38,20:51:-60.59,-15.36,-121.07:99
-chr1	5202441	rs12071111	G	A	97.09	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=40.65;MQ0=0;OQ=1838.51;QD=34.69;SB=-927.74	GT:AD:DP:GL:GQ	1/1:1,52:48:-187.45,-14.46,-0.02:99
-chr1	5202467	rs12067585	T	G	27.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.10;MQ=52.14;MQ0=0;OQ=1141.50;QD=32.61;SB=-417.26	GT:AD:DP:GL:GQ	1/1:0,35:33:-117.74,-9.94,-0.01:99
-chr1	5202510	rs10915390	T	C	6.38	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=45.77;MQ0=0;OQ=1492.54;QD=28.70;SB=-582.99	GT:AD:DP:GL:GQ	1/1:0,52:46:-152.88,-13.87,-0.04:99
-chr1	5202536	rs10915391	A	G	576.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.09;MQ0=0;OQ=1719.08;QD=33.06;SB=-769.98	GT:AD:DP:GL:GQ	1/1:0,52:48:-175.51,-14.46,-0.01:99
-chr1	5202563	.	A	G	1303.98	SnpCluster	AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=5.87;MQ=34.10;MQ0=0;QD=25.08;SB=-434.46	GT:AD:DP:GL:GQ	1/1:0,52:39:-134.00,-11.75,-0.02:99
-chr1	5202564	.	T	C	1560.70	SnpCluster	AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=5.87;MQ=34.10;MQ0=0;QD=30.01;SB=-450.83	GT:AD:DP:GL:GQ	1/1:1,51:44:-159.67,-13.26,-0.02:99
-chr1	5202566	.	C	T	1713.62	SnpCluster	AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=34.87;MQ0=0;QD=32.95;SB=-454.10	GT:AD:DP:GL:GQ	1/1:0,51:43:-174.96,-12.95,-0.01:99
-chr1	5202576	rs12134110	C	T	0.75	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.13;MQ=37.89;MQ0=0;OQ=1873.93;QD=33.46;SB=-544.73	GT:AD:DP:GL:GQ	1/1:1,55:47:-190.99,-14.16,-0.01:99
-chr1	5202767	rs2986185	A	G	288.60	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=54.20;MQ0=0;OQ=2264.33;QD=34.84;SB=-1153.44	GT:AD:DP:GL:GQ	1/1:0,65:64:-230.04,-19.28,-0.02:99
-chr1	5202796	rs2945617	T	C	352.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.10;MQ0=0;OQ=1791.40;QD=27.99;SB=-839.97	GT:AD:DP:GL:GQ	1/1:0,64:58:-182.79,-17.50,-0.06:99
-chr1	5202844	rs2986184	C	G	260.78	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.86;MQ0=0;OQ=2380.85;QD=40.35;SB=-1080.09	GT:AD:DP:GL:GQ	1/1:0,59:56:-241.69,-16.88,-0.02:99
-chr1	5202908	.	C	T	49.09	PASS	AC=2;AF=1.00;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=56.41;MQ0=0;OQ=1679.71;QD=37.33;SB=-834.36	GT:AD:DP:GL:GQ	1/1:0,45:42:-171.56,-12.65,-0.01:99
-chr1	5203231	rs480807	G	A	112.83	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.13;MQ0=0;OQ=2991.96;QD=39.89;SB=-1079.44	GT:AD:DP:GL:GQ	1/1:0,75:75:-302.81,-22.60,-0.03:99
-chr1	5203306	rs6687834	C	T	621.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3055.40;QD=39.68;SB=-1315.34	GT:AD:DP:GL:GQ	1/1:0,77:77:-309.15,-23.20,-0.02:99
-chr1	5203354	rs584498	C	T	147.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=2983.67;QD=38.25;SB=-1435.37	GT:AD:DP:GL:GQ	1/1:0,78:75:-301.97,-22.59,-0.02:99
-chr1	5203671	rs582779	C	A	167.92	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=2146.95;QD=35.78;SB=-804.85	GT:AD:DP:GL:GQ	1/1:0,60:60:-218.30,-18.08,-0.02:99
-chr1	5203886	rs474456	G	C	148.15	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.48;MQ=58.03;MQ0=0;OQ=2254.35;QD=39.55;SB=-1087.49	GT:AD:DP:GL:GQ	1/1:0,57:55:-229.05,-16.59,-0.04:99
-chr1	5203943	rs473685	T	C	568.01	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.84;MQ0=0;OQ=1941.75;QD=35.30;SB=-734.93	GT:AD:DP:GL:GQ	1/1:0,55:55:-197.78,-16.57,-0.02:99
-chr1	5204037	rs472768	C	A	257.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=53.49;MQ0=0;OQ=2116.13;QD=35.87;SB=-808.86	GT:AD:DP:GL:GQ	1/1:0,59:58:-215.21,-17.47,-0.01:99
-chr1	5204179	rs561169	C	T	180.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.63;MQ0=0;OQ=1666.79;QD=32.68;SB=-839.97	GT:AD:DP:GL:GQ	1/1:0,51:44:-170.29,-13.26,-0.02:99
-chr1	5204268	rs677650	G	C	32.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=41.36;MQ0=0;OQ=1911.63;QD=39.01;SB=-915.40	GT:AD:DP:GL:GQ	1/1:0,49:46:-194.77,-13.87,-0.02:99
-chr1	5204556	rs676589	T	A	738.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.27;MQ0=0;OQ=2559.35;QD=36.56;SB=-1189.80	GT:AD:DP:GL:GQ	1/1:0,70:69:-259.54,-20.78,-0.02:99
-chr1	5204733	rs675738	T	C	27.97	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.20;MQ=59.17;MQ0=0;OQ=1658.38;QD=29.61;SB=-662.81	GT:AD:DP:GL:GQ	1/1:0,56:52:-169.47,-15.68,-0.05:99
-chr1	5204883	rs9439546	G	A	532.03	PASS	AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2940.91;QD=38.70;SB=-1192.36	GT:AD:DP:GL:GQ	1/1:0,76:75:-297.70,-22.60,-0.03:99
-chr1	5204955	rs674820	A	G	79.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=59.62;MQ0=0;OQ=2113.60;QD=34.65;SB=-990.71	GT:AD:DP:GL:GQ	1/1:0,61:60:-214.97,-18.07,-0.02:99
-chr1	5204998	rs674421	C	T	11.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=4.18;MQ=59.19;MQ0=0;OQ=2200.64;QD=38.61;SB=-746.99	GT:AD:DP:GL:GQ	1/1:0,57:55:-223.66,-16.57,-0.01:99
-chr1	5205224	rs673451	T	G	405.18	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=1733.87;QD=28.90;SB=-756.83	GT:AD:DP:GL:GQ	1/1:0,60:55:-177.02,-16.58,-0.05:99
-chr1	5206120	rs56397638	C	T	43.03	Indel;LowQual	AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=48.93;MQ0=0;QD=2.39;SB=-0.99	GT:AD:DP:GL:GQ	0/1:15,3:17:-12.71,-5.12,-48.36:75.87
-chr1	5206410	.	T	C	0.40	PASS	AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=56.77;MQ0=0;OQ=1364.10;QD=34.98;SB=-316.12	GT:AD:DP:GL:GQ	1/1:0,39:38:-140.01,-11.45,-0.01:99
-chr1	5206681	rs12121640	A	C	71.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.51;MQ0=0;OQ=1679.67;QD=32.93;SB=-387.04	GT:AD:DP:GL:GQ	1/1:0,51:47:-171.57,-14.16,-0.01:99
-chr1	5206700	rs12125074	G	A	98.48	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.12;MQ0=0;OQ=2000.17;QD=37.74;SB=-489.65	GT:AD:DP:GL:GQ	1/1:0,53:50:-203.61,-15.06,-0.01:99
-chr1	5208394	rs7549686	T	C	327.06	PASS	AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3436.97;QD=36.56;SB=-1599.67	GT:AD:DP:GL:GQ	1/1:0,94:93:-342.70,-28.01,-0.02:99
-chr1	5209527	rs12135834	C	T	124.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=2736.25;QD=39.66;SB=-1253.04	GT:AD:DP:GL:GQ	1/1:0,69:68:-277.22,-20.48,-0.01:99
-chr1	5209757	rs12128282	G	A	708.74	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2355.65;QD=38.62;SB=-1039.67	GT:AD:DP:GL:GQ	1/1:0,61:59:-239.17,-17.77,-0.02:99
-chr1	5210118	rs4465222	T	C	132.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.97;MQ0=0;OQ=1268.12;QD=28.18;SB=-489.53	GT:AD:DP:GL:GQ	1/1:0,45:42:-130.45,-12.68,-0.06:99
-chr1	5210152	rs4465223	T	C	176.23	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=1621.75;QD=29.49;SB=-654.28	GT:AD:DP:GL:GQ	1/1:0,55:51:-165.81,-15.38,-0.05:99
-chr1	5210469	rs6686714	G	T	712.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1971.04;QD=35.20;SB=-893.62	GT:AD:DP:GL:GQ	1/1:0,56:56:-200.71,-16.87,-0.02:99
-chr1	5211244	rs6603825	T	C	594.56	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2173.03;QD=35.62;SB=-828.31	GT:AD:DP:GL:GQ	1/1:0,61:60:-220.91,-18.07,-0.02:99
-chr1	5211435	.	C	T	25.65	PASS	AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=59.65;MQ0=0;OQ=960.07;QD=17.78;SB=-418.78	GT:AD:DP:GL:GQ	0/1:25,29:53:-115.26,-15.97,-85.03:99
-chr1	5212025	rs4475768	T	G	354.90	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=695.32;QD=14.19;SB=-234.36	GT:AD:DP:GL:GQ	0/1:24,25:49:-87.57,-14.76,-89.97:99
-chr1	5212226	rs494046	T	C	148.80	PASS	AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=2779.20;QD=29.88;SB=-1328.52	GT:AD:DP:GL:GQ	1/1:0,93:88:-281.58,-26.54,-0.08:99
-chr1	5213428	.	A	G	11.97	PASS	AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=58.55;MQ0=0;OQ=408.80;QD=8.52;SB=-93.78	GT:AD:DP:GL:GQ	0/1:27,21:44:-57.43,-13.27,-96.36:99
-chr1	5213524	.	T	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=71.93;MQ=50.54;MQ0=0;OQ=502.87;QD=9.14;SB=-189.21	GT:AD:DP:GL:GQ	0/1:37,18:47:-67.73,-14.16,-102.82:99
-chr1	5213770	rs6658152	C	T	45.87	PASS	AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1572.39;QD=38.35;SB=-554.31	GT:AD:DP:GL:GQ	1/1:0,41:41:-160.84,-12.35,-0.02:99
-chr1	5215271	.	A	G	38.30	PASS	AC=2;AF=1.00;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.60;MQ0=0;OQ=1692.08;QD=29.17;SB=-770.59	GT:AD:DP:GL:GQ	1/1:0,57:55:-172.85,-16.59,-0.06:99
-chr1	5217813	.	G	C	1.18	PASS	AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=9.11;MQ=58.35;MQ0=1;OQ=1164.43;QD=14.38;SB=-426.29	GT:AD:DP:GL:GQ	0/1:49,32:77:-142.93,-23.20,-194.98:99
-chr1	5217931	rs4847582	C	G	145.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.66;MQ0=0;OQ=1509.42;QD=22.20;SB=-480.86	GT:AD:DP:GL:GQ	0/1:26,42:66:-174.11,-19.89,-110.01:99
-chr1	5218042	rs4847581	A	T	229.68	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=560.70;QD=9.19;SB=-151.08	GT:AD:DP:GL:GQ	0/1:39,22:59:-77.12,-17.77,-150.88:99
-chr1	5218412	rs12089315	C	T	695.85	PASS	AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2655.40;QD=40.23;SB=-1167.53	GT:AD:DP:GL:GQ	1/1:0,66:65:-269.14,-19.58,-0.01:99
-chr1	5218922	rs55929300	C	T	250.89	PASS	AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=58.35;MQ0=0;OQ=749.84;QD=14.42;SB=-372.87	GT:AD:DP:GL:GQ	0/1:29,23:51:-93.64,-15.37,-91.04:99
-chr1	5218923	rs2945619	A	G	55.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.25;MQ=58.42;MQ0=0;OQ=1817.82;QD=33.66;SB=-828.90	GT:AD:DP:GL:GQ	1/1:0,54:53:-185.39,-15.97,-0.03:99
-chr1	5219162	.	C	T	26.36	PASS	AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=59.78;MQ0=0;OQ=1260.89;QD=15.01;SB=-475.42	GT:AD:DP:GL:GQ	0/1:46,38:84:-154.67,-25.30,-167.04:99
-chr1	5220394	rs632798	A	G	319.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1931.82;QD=32.74;SB=-775.98	GT:AD:DP:GL:GQ	1/1:0,59:54:-196.78,-16.27,-0.02:99
-chr1	5221239	rs11584035	A	G	510.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2162.59;QD=34.33;SB=-1003.74	GT:AD:DP:GL:GQ	1/1:0,63:61:-219.86,-18.37,-0.02:99
-chr1	5221301	rs11585734	G	C	28.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.47;MQ0=0;OQ=2416.76;QD=43.16;SB=-843.33	GT:AD:DP:GL:GQ	1/1:0,56:55:-245.27,-16.57,-0.01:99
-chr1	5221482	rs34835703	A	T	2939.50	Indel	AC=2;AF=1.00;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=3.98;MQ=58.65;MQ0=0;QD=31.95;SB=-1078.25	GT:AD:DP:GL:GQ	1/1:2,89:87:-306.96,-29.45,-9.42:99
-chr1	5221725	.	G	A	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=60;Dels=0.03;HRun=18;HaplotypeScore=39.80;MQ=52.31;MQ0=0;OQ=152.15;QD=2.54;SB=47.14	GT:AD:DP:GL:GQ	0/1:40,18:43:-30.85,-12.35,-114.35:99
-chr1	5222078	rs972257	T	A	639.98	PASS	AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.18;MQ0=0;OQ=3168.88;QD=37.28;SB=-1120.55	GT:AD:DP:GL:GQ	1/1:0,85:85:-320.49,-25.60,-0.02:99
-chr1	5222126	rs972256	A	G	626.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=2639.54;QD=35.19;SB=-1126.78	GT:AD:DP:GL:GQ	1/1:0,75:75:-267.56,-22.59,-0.03:99
-chr1	5224091	rs499416	T	C	297.77	PASS	AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.44;MQ0=0;OQ=2957.76;QD=36.07;SB=-1259.50	GT:AD:DP:GL:GQ	1/1:0,82:82:-299.39,-24.70,-0.03:99
-chr1	5224457	rs681122	A	G	116.50	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.67;MQ0=0;OQ=2663.18;QD=31.70;SB=-1024.35	GT:AD:DP:GL:GQ	1/1:0,84:81:-269.96,-24.42,-0.06:99
-chr1	5224547	rs503246	T	C	2.42	PASS	AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=6.13;MQ=59.67;MQ0=0;OQ=2425.86;QD=34.66;SB=-1136.77	GT:AD:DP:GL:GQ	1/1:0,69:69:-249.69,-23.90,-3.52:99
-chr1	5224600	rs504015	G	A	107.71	PASS	AC=2;AF=1.00;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.36;MQ0=0;OQ=3623.40;QD=38.14;SB=-1734.33	GT:AD:DP:GL:GQ	1/1:1,94:92:-361.34,-27.72,-0.04:99
-chr1	5225244	rs34916930	A	G	210.97	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=59.23;MQ0=0;OQ=766.73;QD=12.78;SB=-281.64	GT:AD:DP:GL:GQ	0/1:31,29:57:-97.13,-17.17,-122.94:99
-chr1	5225286	rs1614164	A	G	116.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.11;MQ0=0;OQ=1503.00;QD=28.90;SB=-584.52	GT:AD:DP:GL:GQ	1/1:0,52:49:-153.94,-14.79,-0.06:99
-chr1	5225305	rs531507	T	C	127.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=59.05;MQ0=0;OQ=1485.28;QD=30.31;SB=-700.80	GT:AD:DP:GL:GQ	1/1:0,49:47:-152.15,-14.18,-0.04:99
-chr1	5225319	rs531541	G	A	341.76	PASS	AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=776.62;QD=15.85;SB=-311.30	GT:AD:DP:GL:GQ	0/1:25,24:46:-94.81,-13.86,-73.71:99
-chr1	5225584	rs12139398	G	T	64.15	PASS	AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=2.68;MQ=59.09;MQ0=0;OQ=1255.53;QD=16.52;SB=-636.75	GT:AD:DP:GL:GQ	0/1:35,41:76:-151.73,-22.89,-120.82:99
-chr1	5225784	rs648378	G	A	217.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=3051.49;QD=38.63;SB=-1366.03	GT:AD:DP:GL:GQ	1/1:0,79:77:-308.76,-23.20,-0.02:99
-chr1	5225910	rs536995	T	C	659.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2238.13;QD=31.52;SB=-1141.80	GT:AD:DP:GL:GQ	1/1:0,71:69:-227.45,-20.80,-0.05:99
-chr1	5226194	rs646542	C	A	53.96	PASS	AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.51;MQ=59.52;MQ0=0;OQ=616.21;QD=12.84;SB=-186.21	GT:AD:DP:GL:GQ	0/1:25,23:46:-78.77,-13.86,-80.93:99
-chr1	5227007	rs17422703	C	T	447.59	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=653.00;QD=13.89;SB=-346.50	GT:AD:DP:GL:GQ	0/1:27,20:47:-82.75,-14.17,-88.07:99
-chr1	5227141	rs479689	T	C	634.35	PASS	AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2577.54;QD=35.80;SB=-1149.80	GT:AD:DP:GL:GQ	1/1:0,72:72:-261.36,-21.69,-0.02:99
-chr1	5227198	rs631837	T	G	470.17	PASS	AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1038.21;QD=12.98;SB=-481.28	GT:AD:DP:GL:GQ	0/1:42,38:78:-130.60,-23.49,-142.85:99
-chr1	5227509	rs2945620	A	G	463.41	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=1887.53;QD=34.95;SB=-718.20	GT:AD:DP:GL:GQ	1/1:0,54:53:-192.35,-15.96,-0.02:99
-chr1	5227512	rs2986190	C	G	581.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=2178.35;QD=38.90;SB=-696.39	GT:AD:DP:GL:GQ	1/1:0,56:54:-221.45,-16.29,-0.03:99
-chr1	5227592	rs484203	C	G	505.04	PASS	AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=1740.53;QD=36.26;SB=-435.04	GT:AD:DP:GL:GQ	1/1:0,48:44:-177.67,-13.27,-0.03:99
-chr1	5227620	rs2945621	C	T	184.65	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.52;MQ0=0;OQ=2108.36;QD=38.33;SB=-729.97	GT:AD:DP:GL:GQ	1/1:0,54:54:-216.99,-18.70,-2.57:99
-chr1	5228455	rs605572	G	A	158.70	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.08;MQ0=0;OQ=2364.59;QD=38.76;SB=-1049.40	GT:AD:DP:GL:GQ	1/1:0,61:59:-240.06,-17.77,-0.01:99
-chr1	5228485	rs547366	A	G	151.91	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=59.32;MQ0=0;OQ=1644.48;QD=29.90;SB=-746.94	GT:AD:DP:GL:GQ	1/1:0,55:53:-168.09,-15.99,-0.05:99
-chr1	5228494	rs547375	T	C	432.28	PASS	AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=1148.89;QD=28.72;SB=-518.83	GT:AD:DP:GL:GQ	1/1:0,40:38:-118.51,-11.46,-0.04:99
-chr1	5228675	rs549178	A	C	608.96	PASS	AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1844.59;QD=34.16;SB=-895.07	GT:AD:DP:GL:GQ	1/1:0,54:53:-188.06,-15.96,-0.02:99
-chr1	5229041	rs552154	A	G	144.86	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.33;MQ0=0;OQ=2394.34;QD=35.74;SB=-1030.76	GT:AD:DP:GL:GQ	1/1:0,67:67:-243.04,-20.18,-0.02:99
-chr1	5229075	rs694316	A	G	16.95	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.71;MQ=58.29;MQ0=0;OQ=1696.38;QD=32.62;SB=-808.31	GT:AD:DP:GL:GQ	1/1:0,52:49:-173.25,-14.76,-0.02:99
-chr1	5229079	rs574063	A	C	47.22	PASS	AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.27;MQ=58.29;MQ0=0;OQ=1690.52;QD=32.51;SB=-775.03	GT:AD:DP:GL:GQ	1/1:0,52:50:-172.66,-15.06,-0.02:99
-chr1	5229195	rs2986189	T	C	594.24	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1695.13;QD=33.24;SB=-849.99	GT:AD:DP:GL:GQ	1/1:0,50:49:-173.12,-14.76,-0.02:99
-chr1	5229410	rs590229	A	G	533.32	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=1626.39;QD=32.53;SB=-702.18	GT:AD:DP:GL:GQ	1/1:0,50:47:-166.24,-14.16,-0.02:99
-chr1	5229454	rs576935	T	C	291.30	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2227.88;QD=34.81;SB=-1091.09	GT:AD:DP:GL:GQ	1/1:0,64:63:-226.40,-18.98,-0.03:99
-chr1	5229643	rs589314	C	T	702.68	PASS	AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3349.31;QD=39.87;SB=-1157.05	GT:AD:DP:GL:GQ	1/1:0,84:83:-333.93,-25.00,-0.02:99
-chr1	5229725	rs579467	T	C	242.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=59.13;MQ0=0;OQ=1575.01;QD=29.72;SB=-809.29	GT:AD:DP:GL:GQ	1/1:0,53:51:-161.14,-15.39,-0.05:99
-chr1	5229840	rs580404	G	A	618.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=2841.67;QD=38.93;SB=-1151.68	GT:AD:DP:GL:GQ	1/1:0,73:73:-287.78,-22.00,-0.03:99
-chr1	5229963	rs587619	A	G	627.90	PASS	AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1527.65;QD=31.18;SB=-661.80	GT:AD:DP:GL:GQ	1/1:0,49:48:-156.40,-14.48,-0.05:99
-chr1	5230068	rs684796	A	G	654.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1910.04;QD=31.31;SB=-776.75	GT:AD:DP:GL:GQ	1/1:0,61:59:-194.63,-17.79,-0.04:99
-chr1	5230099	rs493993	T	C	52.25	PASS	AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.40;MQ=60.00;MQ0=0;OQ=1531.39;QD=30.03;SB=-555.88	GT:AD:DP:GL:GQ	1/1:0,51:49:-156.77,-14.78,-0.05:99
-chr1	5230146	rs494138	C	T	565.44	PASS	AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1901.52;QD=38.03;SB=-812.08	GT:AD:DP:GL:GQ	1/1:0,50:49:-193.76,-14.77,-0.02:99
-chr1	5230400	rs683361	C	T	576.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2445.96;QD=38.22;SB=-885.63	GT:AD:DP:GL:GQ	1/1:0,64:64:-248.21,-19.29,-0.03:99
-chr1	5230419	rs683326	A	C	444.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2097.81;QD=32.78;SB=-733.04	GT:AD:DP:GL:GQ	1/1:0,64:59:-213.39,-17.77,-0.02:99
-chr1	5230522	rs497780	C	T	280.11	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=59.44;MQ0=0;OQ=2456.36;QD=36.66;SB=-1135.53	GT:AD:DP:GL:GQ	1/1:0,66:64:-249.25,-19.29,-0.03:99
-chr1	5230617	rs682425	A	C	128.19	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=2329.64;QD=34.26;SB=-803.08	GT:AD:DP:GL:GQ	1/1:1,67:66:-236.57,-19.88,-0.02:99
-chr1	5230727	rs499639	G	A	152.07	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.28;MQ0=0;OQ=1710.74;QD=26.73;SB=-582.87	GT:AD:DP:GL:GQ	1/1:0,37:64:-256.74,-99.73,-82.08:99
-chr1	5230993	rs17423021	C	T	275.08	PASS	AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=870.39;QD=18.52;SB=-403.16	GT:AD:DP:GL:GQ	0/1:21,26:47:-104.48,-14.16,-73.19:99
-chr1	5231281	rs695100	T	C	614.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1962.66;QD=33.84;SB=-961.65	GT:AD:DP:GL:GQ	1/1:0,58:57:-199.88,-17.17,-0.03:99
-chr1	5231434	rs2860250	T	G	608.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1940.74;QD=34.66;SB=-919.09	GT:AD:DP:GL:GQ	1/1:0,56:55:-197.68,-16.57,-0.02:99
-chr1	5231440	rs2353173	G	T	713.73	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2174.12;QD=33.45;SB=-1013.52	GT:AD:DP:GL:GQ	1/1:0,65:62:-221.02,-18.68,-0.02:99
-chr1	5231533	rs4290073	G	A	106.58	PASS	AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1041.27;QD=12.86;SB=-342.41	GT:AD:DP:GL:GQ	0/1:49,32:81:-131.81,-24.39,-179.39:99
-chr1	5231729	rs2945622	G	A	619.13	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2286.02;QD=38.75;SB=-1132.51	GT:AD:DP:GL:GQ	1/1:0,59:57:-232.20,-17.17,-0.01:99
-chr1	5231775	rs4633300	T	C	80.14	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=2.27;MQ=58.86;MQ0=0;OQ=2147.74;QD=35.21;SB=-1067.79	GT:AD:DP:GL:GQ	1/1:0,61:61:-218.38,-18.38,-0.02:99
-chr1	5231808	rs10799186	T	C	608.79	PASS	AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=2059.90;QD=33.22;SB=-1027.00	GT:AD:DP:GL:GQ	1/1:0,62:60:-209.61,-18.08,-0.04:99
-chr1	5231809	rs10799187	G	C	596.93	PASS	AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2598.74;QD=40.61;SB=-1318.71	GT:AD:DP:GL:GQ	1/1:0,64:61:-263.48,-18.38,-0.02:99
-chr1	5231833	rs530731	G	C	494.40	PASS	AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2447.16;QD=42.19;SB=-1018.28	GT:AD:DP:GL:GQ	1/1:0,58:58:-248.32,-17.48,-0.02:99
-chr1	5231988	rs614111	C	A	590.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1949.76;QD=35.45;SB=-809.87	GT:AD:DP:GL:GQ	1/1:0,55:54:-198.57,-16.26,-0.01:99
-chr1	5231995	rs614102	A	G	590.99	PASS	AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2129.07;QD=36.09;SB=-828.32	GT:AD:DP:GL:GQ	1/1:0,59:59:-216.51,-17.77,-0.02:99
-chr1	5232537	rs558175	T	A	537.54	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2470.42;QD=36.33;SB=-1158.53	GT:AD:DP:GL:GQ	1/1:0,68:67:-250.65,-20.18,-0.02:99
-chr1	5232779	rs560794	T	A	637.12	PASS	AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2459.58;QD=36.17;SB=-1165.07	GT:AD:DP:GL:GQ	1/1:0,68:66:-249.56,-19.88,-0.02:99
-chr1	5232782	rs600322	G	A	160.84	PASS	AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=2495.29;QD=38.39;SB=-1228.15	GT:AD:DP:GL:GQ	1/1:0,65:64:-253.13,-19.28,-0.02:99
-chr1	5232864	rs599884	A	G	212.34	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.42;MQ0=0;OQ=2139.99;QD=35.08;SB=-951.99	GT:AD:DP:GL:GQ	1/1:0,61:60:-217.60,-18.07,-0.02:99
-chr1	5233339	rs598031	G	A	300.26	PASS	AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.38;MQ0=0;OQ=2603.20;QD=38.85;SB=-1265.68	GT:AD:DP:GL:GQ	1/1:0,66:66:-263.92,-19.88,-0.02:99
-chr1	5233376	rs587228	C	T	292.53	PASS	AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=2392.78;QD=39.88;SB=-1196.59	GT:AD:DP:GL:GQ	1/1:0,60:60:-242.88,-18.07,-0.02:99
-chr1	5233377	rs476866	A	G	630.33	PASS	AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=2129.35;QD=34.91;SB=-1082.46	GT:AD:DP:GL:GQ	1/1:0,61:60:-216.54,-18.07,-0.02:99
-chr1	5233422	rs476993	T	C	95.16	PASS	AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.92;MQ0=0;OQ=1891.61;QD=33.78;SB=-702.84	GT:AD:DP:GL:GQ	1/1:1,55:55:-192.78,-16.58,-0.03:99
-chr1	5233779	rs56260836	C	T	250.27	PASS	AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=59.69;MQ0=0;OQ=907.86;QD=15.13;SB=-369.08	GT:AD:DP:GL:GQ	0/1:31,29:57:-111.25,-17.18,-100.79:99
-chr1	5234072	rs504647	G	A	600.46	PASS	AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2853.54;QD=40.19;SB=-1415.37	GT:AD:DP:GL:GQ	1/1:0,71:71:-288.96,-21.39,-0.02:99
-chr1	5234128	rs7551166	T	C	37.81	PASS	AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=4.51;MQ=60.00;MQ0=0;OQ=837.05;QD=13.29;SB=-326.85	GT:AD:DP:GL:GQ	0/1:34,29:63:-105.96,-18.97,-138.54:99
-chr1	5234274	rs583170	C	A	510.70	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1124.36;QD=17.57;SB=-381.75	GT:AD:DP:GL:GQ	0/1:28,36:64:-134.99,-19.28,-100.59:99
-chr1	5234483	rs12746195	G	T	448	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=907.18;QD=14.87;SB=-443.17	GT:AD:DP:GL:GQ	0/1:30,31:60:-112.07,-18.07,-106.20:99
-chr1	5234497	rs12732868	T	G	365.79	PASS	AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=60.00;MQ0=0;OQ=834.65;QD=13.04;SB=-431.76	GT:AD:DP:GL:GQ	0/1:33,31:62:-105.43,-18.68,-118.96:99
-chr1	5234595	rs12747559	C	T	411.30	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.66;MQ0=0;OQ=1103.55;QD=16.23;SB=-461.98	GT:AD:DP:GL:GQ	0/1:32,36:64:-132.93,-19.29,-98.65:99
-chr1	5234628	rs12746515	G	A	395.10	PASS	AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.70;MQ0=0;OQ=1407.50;QD=18.04;SB=-722.08	GT:AD:DP:GL:GQ	0/1:37,41:75:-166.64,-22.60,-112.02:99
-chr1	5234751	rs12747870	C	T	314.20	PASS	AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.17;MQ0=0;OQ=991.08;QD=14.57;SB=-434.89	GT:AD:DP:GL:GQ	0/1:38,30:67:-122.57,-20.18,-136.08:99
-chr1	5234796	rs12729227	A	T	285.02	PASS	AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=58.68;MQ0=0;OQ=635.81;QD=9.49;SB=-240.21	GT:AD:DP:GL:GQ	0/1:44,23:66:-86.75,-19.88,-161.14:99
-chr1	5234855	rs12746867	G	A	137.48	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.48;MQ=58.86;MQ0=0;OQ=803.94;QD=13.18;SB=-392.38	GT:AD:DP:GL:GQ	0/1:35,26:59:-101.45,-17.77,-122.51:99
-chr1	5234867	rs12729373	A	G	399.72	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=739.47;QD=12.12;SB=-312.22	GT:AD:DP:GL:GQ	0/1:35,26:61:-95.60,-18.37,-142.14:99
-chr1	5235030	rs55729623	C	G	87.40	PASS	AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.84;MQ=59.98;MQ0=0;OQ=961.43;QD=16.30;SB=-383.64	GT:AD:DP:GL:GQ	0/1:26,33:53:-115.42,-16.00,-99.45:99
-chr1	5235034	.	G	A	5.72	PASS	AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=59.98;MQ0=0;OQ=618.09;QD=9.97;SB=-190.00	GT:AD:DP:GL:GQ	0/1:34,27:51:-82.91,-17.82,-96.99:99
-chr1	5235136	rs17457156	T	C	138.33	PASS	AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.24;MQ0=0;OQ=556.94;QD=9.13;SB=-82.80	GT:AD:DP:GL:GQ	0/1:34,26:58:-79.46,-20.48,-139.05:99
diff --git a/src/test/resources/htsjdk/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf b/src/test/resources/htsjdk/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf
deleted file mode 100644
index b96f648..0000000
--- a/src/test/resources/htsjdk/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf
+++ /dev/null
@@ -1,249 +0,0 @@
-##fileformat=VCFv4.1
-##FILTER=<ID=TruthSensitivityTranche98.50to98.80,Description="Truth sensitivity tranche level at VSQ Lod: -0.1106 <= x < 0.6654">
-##FILTER=<ID=TruthSensitivityTranche98.80to98.90,Description="Truth sensitivity tranche level at VSQ Lod: -0.4426 <= x < -0.1106">
-##FILTER=<ID=TruthSensitivityTranche98.90to99.00,Description="Truth sensitivity tranche level at VSQ Lod: -0.8793 <= x < -0.4426">
-##FILTER=<ID=TruthSensitivityTranche99.00to99.30,Description="Truth sensitivity tranche level at VSQ Lod: -2.6664 <= x < -0.8793">
-##FILTER=<ID=TruthSensitivityTranche99.30to99.50,Description="Truth sensitivity tranche level at VSQ Lod: -5.2612 <= x < -2.6664">
-##FILTER=<ID=TruthSensitivityTranche99.50to99.90,Description="Truth sensitivity tranche level at VSQ Lod: -65.3589 <= x < -5.2612">
-##FILTER=<ID=TruthSensitivityTranche99.90to100.00+,Description="Truth sensitivity tranche level at VQS Lod < -6678.5611">
-##FILTER=<ID=TruthSensitivityTranche99.90to100.00,Description="Truth sensitivity tranche level at VSQ Lod: -6678.5611 <= x < -65.3589">
-##FILTER=<ID=Indel_QD,Description="x">
-##FILTER=<ID=Indel_FS,Description="x">
-##FILTER=<ID=Indel_ReadPosRankSum,Description="x">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
-##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
-##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##INFO=<ID=HM3,Number=0,Type=Flag,Description="HM3 Membership">
-##INFO=<ID=GS,Number=0,Type=Flag,Description="In gold-standard indel set">
-##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
-##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
-##INFO=<ID=NDA,Number=1,Type=Integer,Description="Number of alternate alleles discovered (but not necessarily genotyped) at this site">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	HG00096	HG00100	HG00101	HG00102	HG00103	HG00107	HG00108	HG00109	HG00110	HG00111	HG00113	HG00114	HG00116	HG00117	HG00119	HG00120	HG00121	HG00123	HG00124	HG00125	HG00127	HG00131	HG00133	HG00136	HG00137	HG00138	HG00139	HG00140	HG00145	HG00146	HG00154	HG00155	HG00157	HG00158	HG00159	HG00160	HG00171	HG00174	HG00176	HG00178	HG00181	HG00182	HG00183	HG00185	HG00186	HG00187	HG00188	HG00189	HG00190	HG00232	HG00233	HG00236	HG00237	HG00238	HG00239	HG0024 [...]
-1	30548	.	T	G	134.71	TruthSensitivityTranche99.50to99.90	AC=14;AF=0.583;AN=24;BaseQRankSum=-2.141;DP=128;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1517;InbreedingCoeff=0.3252;MQ=3.02;MQ0=1125;MQRankSum=0.529;NDA=2;QD=2.07;ReadPosRankSum=0.244;SB=33.48;VQSLOD=-7.1701;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	. [...]
-1	69270	.	A	G	12343.52	TruthSensitivityTranche99.30to99.50	AC=311;AF=0.7199;AN=432;BaseQRankSum=-14.987;DP=9872;DS;Dels=0.00;FS=9.231;HRun=0;HaplotypeScore=0.0867;InbreedingCoeff=0.2338;MQ=6.11;MQ0=13219;MQRankSum=15.096;NDA=1;QD=1.38;ReadPosRankSum=3.099;SB=-194.48;VQSLOD=-5.1809;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	1/1:0,1:6:17.92:136,18,0	./.	./.	./.	./.	./.	./.	1/1:43,17:60:2.99:24,3,0	./.	./.	./.	./.	./.	./.	1/1:46,14:60:3:29,3,0	./ [...]
-1	69428	rs140739101	T	G	1587.10	TruthSensitivityTranche99.30to99.50	AC=30;AF=0.0333;AN=902;BaseQRankSum=3.267;DB;DP=50533;DS;Dels=0.00;FS=98.109;HRun=0;HaplotypeScore=0.1382;InbreedingCoeff=0.1235;MQ=17.74;MQ0=2178;MQRankSum=0.762;NDA=2;QD=1.07;ReadPosRankSum=1.621;SB=-348.91;VQSLOD=-4.2588;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:92:99:0,276,2454	./.	0/0:1,0:100:99:0,300,2568	0/0:1,0:127:99:0,379,2880	./.	./.	./.	./.	0/0:1,0:90:99:0,269,2131	./ [...]
-1	69453	rs142004627	G	A	917.27	TruthSensitivityTranche99.50to99.90	AC=11;AF=0.0127;AN=868;BaseQRankSum=4.298;DB;DP=51456;DS;Dels=0.00;FS=8.058;HRun=2;HaplotypeScore=0.2298;InbreedingCoeff=0.2958;MQ=21.21;MQ0=143;MQRankSum=5.921;NDA=2;QD=3.03;ReadPosRankSum=2.490;SB=-5.66;VQSLOD=-5.8496;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:117:99:0,351,3121	./.	0/0:1,0:110:99:0,330,2825	0/0:1,0:127:99:0,379,2880	./.	./.	./.	./.	0/0:1,0:111:99:0,332,2629	./.	. [...]
-1	69486	.	C	T	411.09	PASS	AC=1;AF=0.0011;AN=870;BaseQRankSum=3.271;DP=47045;DS;Dels=0.00;FS=18.777;HRun=0;HaplotypeScore=0.1619;InbreedingCoeff=-0.0068;MQ=18.73;MQ0=630;MQRankSum=3.678;NDA=2;QD=6.85;ReadPosRankSum=-0.995;SB=-160.62;VQSLOD=4.1085;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:72:99:0,216,1921	./.	0/0:1,0:79:99:0,237,2029	0/0:1,0:125:99:0,373,2834	./.	./.	./.	./.	0/0:1,0:69:99:0,206,1634	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:51:99:0,153,1208	./ [...]
-1	69496	rs150690004	G	A	770.17	TruthSensitivityTranche99.30to99.50	AC=4;AF=0.0046;AN=866;BaseQRankSum=7.303;DB;DP=45079;DS;Dels=0.00;FS=43.681;HRun=0;HaplotypeScore=0.3031;InbreedingCoeff=0.0441;MQ=18.29;MQ0=527;MQRankSum=6.120;NDA=2;QD=3.63;ReadPosRankSum=-1.444;SB=-136.96;VQSLOD=-3.7330;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:75:99:0,225,2001	./.	0/0:1,0:68:99:0,204,1746	0/0:1,0:122:99:0,364,2766	./.	./.	./.	./.	0/0:1,0:72:99:0,215,1705	./.	. [...]
-1	69511	rs75062661	A	G	625265.62	TruthSensitivityTranche99.30to99.50	AC=856;AF=0.8753;AN=978;BaseQRankSum=13.271;DB;DP=32369;DS;Dels=0.00;FS=45.494;HRun=0;HaplotypeScore=1.1421;InbreedingCoeff=0.5380;MQ=26.49;MQ0=1627;MQRankSum=-18.719;NDA=1;QD=19.82;ReadPosRankSum=-20.606;SB=-54909.34;VQSLOD=-3.2503;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	1/1:0,40:40:65.91:557,66,0	./.	./.	./.	./.	./.	./.	1/1:0,1:43:99:1147,129,0	./.	1/1:0,1:45:99:1156,135,0	1/1:0,1:106:99:2404,317,0	./.	./.	1/1 [...]
-1	69534	rs190717287	T	C	1060.12	PASS	AC=1;AF=0.0012;AN=854;BaseQRankSum=-0.841;DB;DP=43078;DS;Dels=0.00;FS=13.161;HRun=0;HaplotypeScore=0.3320;InbreedingCoeff=0.0940;MQ=27.32;MQ0=107;MQRankSum=3.045;NDA=1;QD=9.14;ReadPosRankSum=-2.118;SB=-601.36;VQSLOD=1.3414;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:1:3:0,3,25	0/0:1,0:87:99:0,261,2321	./.	0/0:1,0:84:99:0,252,2157	0/0:1,0:127:99:0,379,2880	./.	./.	0/0:1,0:92:99:0,275,2086	./.	0/0:1,0:69:99:0,206,1634	./.	. [...]
-1	69541	.	A	G	578.88	PASS	AC=1;AF=0.0012;AN=842;BaseQRankSum=1.875;DP=44707;DS;Dels=0.00;FS=9.702;HRun=1;HaplotypeScore=0.5109;InbreedingCoeff=-0.0048;MQ=28.52;MQ0=97;MQRankSum=4.954;NDA=1;QD=9.65;ReadPosRankSum=-1.290;SB=-236.37;VQSLOD=1.9979;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:1:3:0,3,25	0/0:1,0:104:99:0,312,2774	./.	0/0:1,0:93:99:0,279,2388	0/0:1,0:127:99:0,379,2880	./.	./.	0/0:1,0:100:99:0,299,2267	./.	0/0:1,0:74:99:0,221,1752	./.	./.	./.	./.	0/0 [...]
-1	69552	rs55874132	G	C	263.21	TruthSensitivityTranche99.50to99.90	AC=6;AF=0.0071;AN=850;BaseQRankSum=8.467;DB;DP=46741;DS;Dels=0.00;FS=10.412;HRun=1;HaplotypeScore=0.4375;InbreedingCoeff=0.2845;MQ=29.45;MQ0=385;MQRankSum=-5.514;NDA=3;QD=0.76;ReadPosRankSum=2.727;SB=-97.77;VQSLOD=-6.2296;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:126:99:0,378,3361	./.	0/0:1,0:108:99:0,324,2774	0/0:1,0:127:99:0,379,2880	./.	./.	0/0:1,0:121:99:0,361,2744	./.	0/0:1,0: [...]
-1	69590	rs141776804	T	A	1446.08	PASS	AC=2;AF=0.0025;AN=812;BaseQRankSum=7.910;DB;DP=46586;DS;Dels=0.00;FS=21.176;HRun=0;HaplotypeScore=0.1456;InbreedingCoeff=-0.0051;MQ=23.73;MQ0=398;MQRankSum=8.485;NDA=2;QD=12.05;ReadPosRankSum=-0.293;SB=-322.53;VQSLOD=4.4644;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:127:99:0,381,3388	./.	0/0:1,0:113:99:0,339,2902	0/0:1,0:127:99:0,379,2880	./.	./.	0/0:1,0:115:99:0,343,2608	./.	0/0:1,0:102:99:0,305,2416	./.	./.	./.	./. [...]
-1	69610	.	C	T	5334.77	TruthSensitivityTranche98.50to98.80	AC=8;AF=0.0100;AN=798;BaseQRankSum=7.126;DP=42498;DS;Dels=0.00;FS=113.646;HRun=2;HaplotypeScore=0.2518;InbreedingCoeff=0.1087;MQ=18.02;MQ0=795;MQRankSum=9.147;NDA=2;QD=10.95;ReadPosRankSum=0.353;SB=-1272.01;VQSLOD=0.5990;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:126:99:0,378,3361	./.	0/0:1,0:71:99:0,213,1823	0/0:1,0:127:99:0,379,2880	./.	./.	0/0:1,0:60:99:0,179,1360	./.	0/0:1,0:79:99:0,236 [...]
-1	69635	.	G	C	436.15	TruthSensitivityTranche99.00to99.30	AC=2;AF=0.0025;AN=786;BaseQRankSum=4.897;DP=29728;DS;Dels=0.00;FS=33.653;HRun=0;HaplotypeScore=0.1175;InbreedingCoeff=-0.0021;MQ=14.85;MQ0=1329;MQRankSum=4.000;NDA=2;QD=3.63;ReadPosRankSum=-1.651;SB=-67.21;VQSLOD=-1.5278;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	0/0:1,0:78:99:0,234,2081	./.	0/0:1,0:46:99:0,138,1181	0/0:1,0:84:99:0,251,1905	./.	./.	0/0:1,0:27:80.65:0,81,612	./.	0/0:1,0:44:99:0,132,1 [...]
-1	69761	.	A	T	1569.63	TruthSensitivityTranche99.50to99.90	AC=27;AF=0.0456;AN=592;BaseQRankSum=7.371;DP=12118;DS;Dels=0.00;FS=3.078;HRun=1;HaplotypeScore=0.1168;InbreedingCoeff=0.2584;MQ=7.44;MQ0=9258;MQRankSum=1.639;NDA=1;QD=1.32;ReadPosRankSum=-0.593;SB=-284.93;VQSLOD=-6.9729;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	0/0:60,0:60:3.01:0,3,33	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	0/0:59,0:59:3.01:0,3,35	./.	./.	./.	./.	./.	./.	./.	./ [...]
-1	69768	.	G	A	35.11	TruthSensitivityTranche99.50to99.90	AC=1;AF=0.0018;AN=542;BaseQRankSum=-0.998;DP=10681;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1003;InbreedingCoeff=-0.0401;MQ=7.20;MQ0=8425;MQRankSum=1.077;NDA=2;QD=0.59;ReadPosRankSum=0.705;SB=6.12;VQSLOD=-5.9391;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	0/0:56,0:58:3.01:0,3,33	./.	0/0:60,0:60:5.98:0,6,47	./.	./.	./.	./.	./.	./.	./.	0/0:57,0:57:2.99:0,3,24	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./. [...]
-1	69897	.	T	C	7903.18	TruthSensitivityTranche99.50to99.90	AC=286;AF=0.7814;AN=366;BaseQRankSum=-9.712;DP=10240;DS;Dels=0.00;FS=25.753;HRun=1;HaplotypeScore=0.0844;InbreedingCoeff=0.2102;MQ=4.12;MQ0=18120;MQRankSum=0.310;NDA=2;QD=0.92;ReadPosRankSum=-1.611;SB=-1453.42;VQSLOD=-6.8807;culprit=MQ;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	1/1:47,13:60:6.01:61,6,0	./.	./.	./.	./.	1/1:47,11:60:6.02:67,6,0	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	0/1:50,10:60:17.70:18,0 [...]
-1	69968	.	A	G	791.92	TruthSensitivityTranche99.30to99.50	AC=1;AF=0.017;AN=60;BaseQRankSum=-11.568;DP=1640;DS;Dels=0.00;FS=34.482;HRun=1;HaplotypeScore=1.1879;InbreedingCoeff=0.0932;MQ=5.09;MQ0=5066;MQRankSum=6.823;NDA=1;QD=2.10;ReadPosRankSum=-2.491;SB=9.08;VQSLOD=-5.0926;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./.	./. [...]
-1	861275	.	C	T	712.37	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-6.156;DP=66811;DS;Dels=0.00;FS=1.596;HRun=0;HaplotypeScore=0.0247;InbreedingCoeff=-0.0020;MQ=99.25;MQ0=0;MQRankSum=-0.645;NDA=2;QD=11.87;ReadPosRankSum=0.200;SB=-29.28;VQSLOD=9.3500;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:16:48.16:0,48,617	0/0:1,0:47:99:0,141,1738	0/0:1,0:24:72.24:0,72,976	0/0:1,0:23:69.23:0,69,904	0/0:1,0:26:78.25:0,78,1022	0/0:1,0:15:45.15:0,45,579	0/0:1,0:54:99:0,163,2123	0/0:1,0:39:99:0,117,1504	0 [...]
-1	861292	rs191719684	C	G	2773.34	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=9.193;DB;DP=77017;DS;Dels=0.00;FS=29.431;HRun=0;HaplotypeScore=0.0441;InbreedingCoeff=-0.0075;MQ=99.59;MQ0=0;MQRankSum=-2.334;NDA=1;QD=17.78;ReadPosRankSum=-7.928;SB=-762.60;VQSLOD=7.8330;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:15:45.15:0,45,626	0/0:1,0:52:99:0,156,1965	0/0:1,0:30:90.29:0,90,1179	0/0:1,0:22:66.21:0,66,832	0/0:1,0:23:69.23:0,69,948	0/0:1,0:17:51.17:0,51,668	0/0:1,0:61:99:0,184,2353	0/0:1,0:47 [...]
-1	861315	.	G	A	804.13	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-3.203;DP=93850;DS;Dels=0.00;FS=2.143;HRun=2;HaplotypeScore=0.0258;InbreedingCoeff=0.0526;MQ=106.02;MQ0=0;MQRankSum=-0.749;NDA=2;QD=11.83;ReadPosRankSum=-5.734;SB=-124.66;VQSLOD=8.0060;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:23:69.23:0,69,948	0/0:1,0:71:99:0,214,2739	0/0:1,0:34:99:0,102,1402	0/0:1,0:27:81.27:0,81,1080	0/0:1,0:32:96.32:0,96,1319	0/0:1,0:22:66.22:0,66,907	0/0:1,0:69:99:0,208,2713	0/0:1,0:79:99:0,238,3160 [...]
-1	865488	.	A	G	73.43	PASS	AC=1;AF=0.00044;AN=2280;BaseQRankSum=-4.715;DP=7112;Dels=0.00;FS=10.595;HRun=0;HaplotypeScore=0.1452;InbreedingCoeff=-0.0539;MQ=56.39;MQ0=9;MQRankSum=2.252;NDA=3;QD=4.08;ReadPosRankSum=2.565;SB=167.99;VQSLOD=1.5041;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,113	0/0:1,0:5:15.05:0,15,176	0/0:1,0:1:3.01:0,3,32	0/0:1,0:1:3.01:0,3,43	./.	0/0:1,0:6:18.06:0,18,236	0/0:1,0:11:33.09:0,33,368	0/0:1,0:5:15.05:0,15,176	0/0:1,0:10:30.09:0,30,344	0/0:15,0:16:45. [...]
-1	865545	.	G	A	1164.45	PASS	AC=8;AF=0.00345;AN=2320;BaseQRankSum=4.406;DP=10672;Dels=0.01;FS=1.961;HRun=0;HaplotypeScore=0.3451;InbreedingCoeff=0.0083;MQ=60.80;MQ0=0;MQRankSum=3.214;NDA=3;QD=10.21;ReadPosRankSum=1.571;SB=-334.48;VQSLOD=5.0597;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,44	0/0:1,0:7:21.06:0,21,234	0/0:1,0:2:6.02:0,6,65	./.	0/0:1,0:2:6.02:0,6,74	0/0:1,0:5:15.05:0,15,181	0/0:1,0:9:27.07:0,27,284	0/0:10,0:10:30.07:0,30,316	0/0:20,0:20:54.10:0,54,548	0/0:1,0:22:6 [...]
-1	865555	.	CAA	C	306.78	PASS	AC=1;AF=0.00044;AN=2284;BaseQRankSum=2.577;DP=11180;FS=1.510;HRun=2;HaplotypeScore=2.5729;InbreedingCoeff=-0.0068;MQ=59.09;MQ0=0;MQRankSum=-0.815;NDA=1;QD=12.78;ReadPosRankSum=2.203;SB=-142.21;set=variant2	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,35	0/0:1,0:1:30.10:0,30,554	0/0:1,0:1:12.04:0,12,222	./.	0/0:1,0:1:6.02:0,6,111	0/0:1,0:1:9.03:0,9,105	0/0:1,0:1:33.11:0,33,610	0/0:13,0:13:39.13:0,39,714	0/0:16,0:17:48.09:0,48,477	0/0:1,0:1:72.21:0,72,841	0/0:1,0:1:36.12: [...]
-1	865584	rs148711625	G	A	1556.12	PASS	AC=23;AF=0.00981;AN=2344;BaseQRankSum=6.903;DB;DP=13266;Dels=0.00;FS=7.807;HRun=0;HaplotypeScore=0.2911;InbreedingCoeff=0.0420;MQ=85.22;MQ0=0;MQRankSum=-2.022;NDA=2;QD=7.20;ReadPosRankSum=0.021;SB=-697.54;VQSLOD=6.6472;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,151	0/0:1,0:11:33.10:0,33,378	0/0:1,0:4:12.03:0,12,137	0/0:1,0:1:3.01:0,3,34	0/0:1,0:3:9.01:0,9,86	0/0:1,0:2:6.02:0,6,81	0/0:15,0:15:45.09:0,45,465	0/0:1,0:20:60.11:0,60,592	0/ [...]
-1	865590	.	TGAA	T	420.06	PASS	AC=8;AF=0.00371;AN=2154;BaseQRankSum=4.148;DP=14777;FS=4.898;HRun=0;HaplotypeScore=1.3770;InbreedingCoeff=0.1502;MQ=59.07;MQ0=0;MQRankSum=-1.698;NDA=1;QD=4.88;ReadPosRankSum=1.330;SB=-207.49;set=variant2	GT:AD:DP:GQ:PL	0/0:1,0:1:12.04:0,12,234	0/0:13,0:14:38.96:0,39,714	0/0:1,0:1:18.06:0,18,351	0/0:1,0:1:6.02:0,6,117	0/0:1,0:1:6.02:0,6,117	0/0:1,0:1:12.04:0,12,234	0/0:1,0:1:48.16:0,48,935	0/0:1,0:1:66.23:0,66,1286	0/0:1,0:1:51.17:0,51,994	0/0:1,0:1:93.32:0,9 [...]
-1	865628	rs41285790	G	A	712.88	PASS	AC=5;AF=0.00212;AN=2364;BaseQRankSum=-6.081;DB;DP=19203;Dels=0.00;FS=8.074;HRun=0;HaplotypeScore=0.1985;InbreedingCoeff=-0.0157;MQ=80.97;MQ0=0;MQRankSum=0.054;NDA=3;QD=9.77;ReadPosRankSum=1.468;SB=-453.03;VQSLOD=7.7994;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:5:15.05:0,15,211	0/0:1,0:12:36.12:0,36,472	0/0:1,0:10:30.10:0,30,418	0/0:1,0:4:12.04:0,12,167	0/0:1,0:5:15.05:0,15,211	0/0:1,0:6:18.06:0,18,240	0/0:1,0:19:57.19:0,57,747	0/0:1,0: [...]
-1	865662	rs140751899	G	A	266.89	PASS	AC=1;AF=0.00042;AN=2360;BaseQRankSum=1.888;DB;DP=18955;Dels=0.00;FS=0.901;HRun=0;HaplotypeScore=0.3354;InbreedingCoeff=-0.0112;MQ=87.09;MQ0=0;MQRankSum=-0.394;NDA=2;QD=15.70;ReadPosRankSum=1.293;SB=-178.31;VQSLOD=5.8247;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:2:6.02:0,6,79	0/0:10,0:10:27.08:0,27,329	0/0:1,0:9:27.08:0,27,325	0/0:1,0:4:12.04:0,12,167	0/0:1,0:5:15.05:0,15,185	0/0:1,0:10:30.10:0,30,393	0/0:1,0:17:51.13:0,51,552	0/0:21,0:21:54.13:0,5 [...]
-1	865694	rs9988179	C	T	37822.02	PASS	AC=163;AF=0.06907;AN=2360;BaseQRankSum=-24.328;DB;DP=17686;Dels=0.00;FS=7.432;HRun=0;HaplotypeScore=0.3198;InbreedingCoeff=0.1408;MQ=96.52;MQ0=0;MQRankSum=-19.190;NDA=2;QD=14.08;ReadPosRankSum=12.504;SB=-16300.11;VQSLOD=4.8864;culprit=MQRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,43	0/0:10,0:10:30.09:0,30,383	0/0:1,0:9:27.09:0,27,354	0/0:1,0:2:6.02:0,6,82	0/0:1,0:5:15.05:0,15,200	0/0:1,0:10:30.10:0,30,400	0/0:15,0:15:45.14:0,45,581	0/0:21,0: [...]
-1	865700	rs116730894	C	T	481.79	PASS	AC=6;AF=0.00254;AN=2362;BaseQRankSum=4.072;DB;DP=18291;Dels=0.00;FS=9.754;HRun=0;HaplotypeScore=0.3041;InbreedingCoeff=-0.0084;MQ=98.45;MQ0=0;MQRankSum=-1.215;NDA=2;QD=5.35;ReadPosRankSum=4.084;SB=-203.52;VQSLOD=5.3964;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,42	0/0:1,0:11:33.09:0,33,357	0/0:1,0:9:27.09:0,27,340	0/0:1,0:2:6.01:0,6,63	0/0:1,0:6:18.05:0,18,195	0/0:1,0:9:27.08:0,27,325	0/0:1,0:16:48.10:0,48,489	0/0:19,1:20:20.99:0,21,517	 [...]
-1	865703	.	A	G	163.63	PASS	AC=1;AF=0.00042;AN=2362;BaseQRankSum=1.433;DP=18039;Dels=0.00;FS=7.294;HRun=0;HaplotypeScore=0.2834;InbreedingCoeff=-0.0062;MQ=101.88;MQ0=0;MQRankSum=-2.745;NDA=2;QD=7.44;ReadPosRankSum=1.383;SB=-11.29;VQSLOD=6.5947;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,44	0/0:1,0:10:30.09:0,30,361	0/0:1,0:7:21.07:0,21,270	0/0:1,0:3:9.03:0,9,118	0/0:1,0:5:15.05:0,15,189	0/0:1,0:8:24.08:0,24,315	0/0:1,0:16:48.14:0,48,550	0/0:20,0:20:57.16:0,57,659	0/0:1,0:21:6 [...]
-1	865705	rs146331776	C	T	702.79	PASS	AC=3;AF=0.00127;AN=2362;BaseQRankSum=-1.590;DB;DP=18114;Dels=0.00;FS=1.450;HRun=1;HaplotypeScore=0.1918;InbreedingCoeff=-0.0069;MQ=114.11;MQ0=0;MQRankSum=-2.223;NDA=1;QD=12.12;ReadPosRankSum=2.604;SB=-274.99;VQSLOD=10.4126;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,44	0/0:1,0:9:27.09:0,27,354	0/0:1,0:8:24.07:0,24,289	0/0:1,0:3:9.03:0,9,130	0/0:1,0:5:15.05:0,15,193	0/0:1,0:7:21.07:0,21,280	0/0:1,0:16:48.16:0,48,640	0/0:20,0:20:60.20:0,60, [...]
-1	865734	.	G	A	169.67	PASS	AC=3;AF=0.00127;AN=2358;BaseQRankSum=0.374;DP=14856;Dels=0.00;FS=7.082;HRun=0;HaplotypeScore=0.4461;InbreedingCoeff=-0.0084;MQ=111.38;MQ0=0;MQRankSum=-3.095;NDA=2;QD=4.35;ReadPosRankSum=0.739;SB=-81.83;VQSLOD=2.8904;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,116	0/0:1,0:6:18.06:0,18,222	0/0:1,0:6:18.06:0,18,236	0/0:1,0:2:6.02:0,6,76	0/0:4,0:4:12.04:0,12,161	0/0:1,0:8:24.08:0,24,315	0/0:1,0:12:36.11:0,36,423	0/0:1,0:17:51.15:0,51,599	0/0:1,0:14:42. [...]
-1	865738	rs139570490	A	G	759.55	PASS	AC=7;AF=0.00297;AN=2358;BaseQRankSum=-6.135;DB;DP=14584;Dels=0.00;FS=1.427;HRun=2;HaplotypeScore=0.5151;InbreedingCoeff=-0.0114;MQ=107.81;MQ0=0;MQRankSum=-1.690;NDA=2;QD=5.17;ReadPosRankSum=1.621;SB=-116.80;VQSLOD=4.7433;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:2:6.02:0,6,86	0/0:1,0:5:15.05:0,15,197	0/0:1,0:8:24.08:0,24,309	0/0:1,0:2:6.02:0,6,80	0/0:4,0:4:12.03:0,12,159	0/0:1,0:8:24.08:0,24,330	0/0:1,0:13:39.12:0,39,470	0/0:1,0:16:48.15:0,48,605	 [...]
-1	866371	.	G	A	754.09	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-4.668;DP=56995;DS;Dels=0.00;FS=1.962;HRun=0;HaplotypeScore=0.0603;InbreedingCoeff=0.0004;MQ=107.06;MQ0=0;MQRankSum=0.276;NDA=1;QD=12.57;ReadPosRankSum=1.709;SB=-179.27;VQSLOD=9.8408;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:16:48.16:0,48,640	0/0:1,0:58:99:0,175,2145	0/0:1,0:34:99:0,102,1337	0/0:1,0:22:66.22:0,66,894	0/0:1,0:22:66.22:0,66,907	0/0:1,0:19:57.18:0,57,733	0/0:1,0:35:99:0,105,1350	0/0:1,0:35:99:0,105,1350	0/0 [...]
-1	866422	rs139210662	C	T	4684.05	PASS	AC=9;AF=0.00381;AN=2364;BaseQRankSum=-2.726;DB;DP=71761;DS;Dels=0.00;FS=14.683;HRun=1;HaplotypeScore=0.0292;InbreedingCoeff=-0.0036;MQ=110.95;MQ0=0;MQRankSum=0.583;NDA=1;QD=11.05;ReadPosRankSum=-12.658;SB=-1793.78;VQSLOD=9.8690;culprit=HaplotypeScore;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:23:69.23:0,69,960	0/0:1,0:72:99:0,217,2662	0/0:1,0:41:99:0,123,1666	0/0:1,0:30:90.29:0,90,1179	0/0:1,0:29:87.29:0,87,1211	0/0:1,0:32:96.32:0,96,1301	0/0:1,0:42:99:0,126 [...]
-1	866511	.	C	T	17440.60	TruthSensitivityTranche99.50to99.90	AC=345;AF=0.14594;AN=2364;BaseQRankSum=-48.478;DP=36139;DS;Dels=0.00;FS=176.546;HRun=1;HaplotypeScore=8.8600;InbreedingCoeff=-0.1516;MQ=61.44;MQ0=0;MQRankSum=45.670;NDA=1;QD=1.68;ReadPosRankSum=-3.663;SB=-4951.45;VQSLOD=-8.9666;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/1:8,1:9:2.54:3,0,297	0/0:13,1:14:5.68:0,6,398	0/1:16,3:19:24.70:25,0,488	0/0:14,0:14:42.12:0,42,537	0/1:8,2:10:12.74:13,0,265	0/1:7,1:8:12.90:13,0,258	0/1:31, [...]
-1	866517	rs181051588	C	G	1192.57	TruthSensitivityTranche99.50to99.90	AC=2;AF=0.00085;AN=2364;BaseQRankSum=0.101;DB;DP=34481;DS;Dels=0.00;FS=14.537;HRun=0;HaplotypeScore=7.9209;InbreedingCoeff=-0.0076;MQ=61.58;MQ0=0;MQRankSum=3.405;NDA=3;QD=17.28;ReadPosRankSum=1.770;SB=-56.16;VQSLOD=-7.8406;culprit=HaplotypeScore;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:7,0:7:21.07:0,21,272	0/0:16,0:16:45.11:0,45,510	0/0:16,0:16:45.14:0,45,594	0/0:11,0:11:33.08:0,33,407	0/0:7,0:7:18.04:0,18,232	0/0:8,0:8:18. [...]
-1	871129	.	C	T	2363.53	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=1.324;DP=88230;DS;Dels=0.00;FS=133.740;HRun=4;HaplotypeScore=0.1585;InbreedingCoeff=-0.0070;MQ=121.02;MQ0=0;MQRankSum=-4.492;NDA=2;QD=10.55;ReadPosRankSum=-5.079;SB=-1103.64;VQSLOD=4.1810;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:29:87.29:0,87,1196	0/0:1,0:101:99:0,304,3735	0/0:1,0:65:99:0,196,2404	0/0:1,0:48:99:0,144,1852	0/0:1,0:57:99:0,172,2199	0/0:1,0:42:99:0,126,1620	0/0:1,0:42:99:0,126,1587	0/0:1,0:33:99:0,99,1192 [...]
-1	871171	.	A	G	688.12	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-4.336;DP=86111;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0614;InbreedingCoeff=-0.0005;MQ=140.67;MQ0=0;MQRankSum=-4.594;NDA=1;QD=11.86;ReadPosRankSum=-2.707;SB=-280.00;VQSLOD=10.0930;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:34:99:0,102,1312	0/0:1,0:84:99:0,253,2886	0/0:1,0:68:99:0,205,2457	0/0:1,0:34:99:0,102,1285	0/0:1,0:56:99:0,169,2160	0/0:1,0:44:99:0,132,1590	0/0:1,0:53:99:0,159,1722	0/0:1,0:42:99:0,126,1443	0/0 [...]
-1	871173	rs141982349	C	T	380.08	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=1.317;DB;DP=94636;DS;Dels=0.00;FS=14.305;HRun=0;HaplotypeScore=0.0522;InbreedingCoeff=-0.0006;MQ=140.91;MQ0=0;MQRankSum=-3.379;NDA=1;QD=8.09;ReadPosRankSum=-0.692;SB=-152.07;VQSLOD=8.2214;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:37:99:0,111,1545	0/0:1,0:101:99:0,304,3735	0/0:1,0:76:99:0,229,2932	0/0:1,0:34:99:0,102,1382	0/0:1,0:63:99:0,190,2598	0/0:1,0:51:99:0,154,2040	0/0:1,0:60:99:0,181,2168	0/0:1,0:46:99:0, [...]
-1	871176	.	C	T	806.96	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-2.225;DP=94503;DS;Dels=0.00;FS=48.943;HRun=1;HaplotypeScore=0.0532;InbreedingCoeff=0.0054;MQ=138.21;MQ0=0;MQRankSum=-3.509;NDA=1;QD=13.45;ReadPosRankSum=-1.802;SB=-219.67;VQSLOD=7.9297;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:36:99:0,108,1503	0/0:1,0:98:99:0,295,3781	0/0:1,0:76:99:0,229,2988	0/0:1,0:35:99:0,105,1423	0/0:1,0:60:99:0,181,2474	0/0:1,0:52:99:0,157,2114	0/0:1,0:58:99:0,175,2237	0/0:1,0:46:99:0,138,1739	0/0: [...]
-1	871193	.	G	C	517.25	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=6.508;DP=88429;Dels=0.00;FS=19.613;HRun=2;HaplotypeScore=0.0196;InbreedingCoeff=-0.0023;MQ=115.20;MQ0=0;MQRankSum=0.185;NDA=2;QD=12.93;ReadPosRankSum=-4.480;SB=-44.96;VQSLOD=9.6679;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:31:93.30:0,93,1196	0/0:1,0:76:99:0,229,2611	0/0:1,0:59:99:0,178,2230	0/0:1,0:28:84.27:0,84,1080	0/0:1,0:50:99:0,150,1890	0/0:1,0:48:99:0,144,1814	0/0:1,0:76:99:0,229,2470	0/0:1,0:53:99:0,159,1722	0/0:1 [...]
-1	871215	rs28419423	C	T,G	147999.05	PASS	AC=1,167;AF=0.00042,0.07064;AN=2364;BaseQRankSum=31.541;DB;DP=81904;DS;Dels=0.00;FS=22.522;HaplotypeScore=0.2500;InbreedingCoeff=0.1555;MQ=77.03;MQ0=0;MQRankSum=-0.797;NDA=2;QD=17.13;ReadPosRankSum=-12.413;SB=-59334.05;VQSLOD=6.2098;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0,0:29:87.27:0,87,1072,87,1072,1072	0/0:1,0,0:68:99:0,205,2274,205,2274,2274	0/0:1,0,0:54:99:0,162,1904,162,1904,1904	0/0:1,0,0:25:75.23:0,75,903,75,903,903	0/0:1,0,0:43:99:0 [...]
-1	871219	.	C	T	658.03	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-8.262;DP=79865;DS;Dels=0.00;FS=5.928;HRun=0;HaplotypeScore=0.2739;InbreedingCoeff=0.0029;MQ=79.21;MQ0=0;MQRankSum=0.013;NDA=2;QD=12.19;ReadPosRankSum=3.190;SB=-201.44;VQSLOD=6.5830;culprit=ReadPosRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:25:75.25:0,75,1044	0/0:1,0:62:99:0,187,2392	0/0:1,0:57:99:0,172,2317	0/0:1,0:31:93.31:0,93,1240	0/0:1,0:45:99:0,135,1829	0/0:1,0:35:99:0,105,1423	0/0:1,0:74:99:0,223,2855	0/0:1,0:50:99:0,1 [...]
-1	871229	rs149944086	G	C	2312.78	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=7.026;DB;DP=74122;DS;Dels=0.00;FS=13.320;HRun=2;HaplotypeScore=0.0998;InbreedingCoeff=0.0017;MQ=121.47;MQ0=0;MQRankSum=-1.538;NDA=1;QD=16.17;ReadPosRankSum=-5.261;SB=-80.66;VQSLOD=9.8454;culprit=ReadPosRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:19:57.19:0,57,817	0/0:1,0:52:99:0,156,1965	0/0:1,0:54:99:0,163,2083	0/0:1,0:27:81.26:0,81,1020	0/0:1,0:40:99:0,120,1573	0/0:1,0:37:99:0,111,1398	0/0:1,0:69:99:0,208,2493	0/ [...]
-1	871239	rs147616064	C	T	1622.57	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=-1.538;DB;DP=64080;DS;Dels=0.00;FS=8.450;HRun=2;HaplotypeScore=0.0688;InbreedingCoeff=-0.0023;MQ=123.57;MQ0=0;MQRankSum=-3.198;NDA=1;QD=12.20;ReadPosRankSum=-6.659;SB=-61.38;VQSLOD=10.3368;culprit=ReadPosRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:17:51.17:0,51,741	0/0:1,0:49:99:0,147,1852	0/0:1,0:44:99:0,132,1814	0/0:1,0:28:84.27:0,84,1101	0/0:1,0:41:99:0,123,1690	0/0:1,0:34:99:0,102,1402	0/0:1,0:60:99:0,181,2268	 [...]
-1	871269	.	A	C	891.84	TruthSensitivityTranche98.90to99.00	AC=125;AF=0.05288;AN=2364;BaseQRankSum=-18.250;DP=18591;DS;Dels=0.00;FS=167.133;HRun=3;HaplotypeScore=0.5054;InbreedingCoeff=-0.0534;MQ=78.80;MQ0=1;MQRankSum=-7.666;NDA=2;QD=0.38;ReadPosRankSum=-8.894;SB=259.41;VQSLOD=-0.6803;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:4:12.03:0,12,134	0/1:12,6:19:0.08:0,0,313	0/0:1,0:20:60.15:0,60,631	0/0:1,0:12:36.09:0,36,379	0/0:1,0:14:42.11:0,42,455	0/0:1,0:20:60.16:0,60,650	0/0:1,0:14 [...]
-1	874402	.	C	G	370.61	PASS	AC=2;AF=0.00085;AN=2360;BaseQRankSum=1.038;DP=17471;Dels=0.00;FS=7.836;HRun=0;HaplotypeScore=0.2022;InbreedingCoeff=-0.0141;MQ=90.39;MQ0=0;MQRankSum=-1.296;NDA=2;QD=13.24;ReadPosRankSum=1.474;SB=-203.51;VQSLOD=7.7578;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,129	0/0:1,0:5:15.05:0,15,189	0/0:1,0:5:15.05:0,15,189	0/0:1,0:3:9.03:0,9,120	0/0:1,0:4:12.04:0,12,165	0/0:1,0:4:12.04:0,12,165	0/0:24,0:24:63.20:0,63,834	0/0:1,0:26:78.25:0,78,96 [...]
-1	874455	.	C	T	174.37	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-1.679;DP=25006;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1837;InbreedingCoeff=0.1880;MQ=80.95;MQ0=0;MQRankSum=0.149;NDA=2;QD=7.93;ReadPosRankSum=0.492;SB=-20.23;VQSLOD=2.7845;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,169	0/0:1,0:12:36.11:0,36,423	0/0:1,0:6:18.06:0,18,236	0/0:1,0:3:9.03:0,9,124	0/0:1,0:4:12.04:0,12,154	0/0:1,0:9:27.07:0,27,292	0/0:1,0:27:81.20:0,81,852	0/0:1,0:27:81.18:0,81,826	0/0:1,0:26:7 [...]
-1	874456	rs149677938	G	A	109.49	PASS	AC=5;AF=0.00212;AN=2364;BaseQRankSum=-2.689;DB;DP=23505;Dels=0.00;FS=7.650;HRun=0;HaplotypeScore=0.1763;InbreedingCoeff=-0.0082;MQ=81.74;MQ0=0;MQRankSum=0.806;NDA=2;QD=2.81;ReadPosRankSum=-0.807;SB=-63.07;VQSLOD=3.1368;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,148	0/0:1,0:9:27.09:0,27,340	0/0:1,0:6:18.05:0,18,201	0/0:1,0:3:9.03:0,9,108	0/0:1,0:4:12.03:0,12,126	0/0:1,0:8:24.07:0,24,267	0/0:1,0:22:66.21:0,66,814	0/0:1,0:27:81.26:0,81,10 [...]
-1	874497	.	G	A	382.09	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-0.925;DP=20918;Dels=0.00;FS=1.007;HRun=2;HaplotypeScore=0.1533;InbreedingCoeff=0.0337;MQ=84.31;MQ0=0;MQRankSum=0.187;NDA=1;QD=10.61;ReadPosRankSum=0.632;SB=-103.25;VQSLOD=6.2214;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:7:21.07:0,21,265	0/0:11,0:11:30.09:0,30,374	0/0:1,0:6:18.06:0,18,236	0/0:1,0:6:18.06:0,18,217	0/0:1,0:5:15.04:0,15,167	0/0:10,0:10:30.08:0,30,366	0/0:1,0:12:36.11:0,36,434	0/0:1,0:29:87.27:0,87,1048	0/0: [...]
-1	874528	rs72902595	C	T	306.67	PASS	AC=3;AF=0.00128;AN=2350;BaseQRankSum=3.514;DB;DP=14636;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1887;InbreedingCoeff=0.0081;MQ=90.63;MQ0=0;MQRankSum=2.214;NDA=3;QD=6.81;ReadPosRankSum=0.056;SB=13.52;VQSLOD=6.5618;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,340	0/0:1,0:7:21.06:0,21,227	0/0:1,0:4:12.04:0,12,141	0/0:1,0:7:21.07:0,21,259	0/0:1,0:5:15.05:0,15,197	0/0:1,0:8:24.08:0,24,302	0/0:1,0:12:36.10:0,36,401	0/0:1,0:15:45.13:0,45,515	0 [...]
-1	874550	.	G	C	934.68	PASS	AC=2;AF=0.00085;AN=2346;BaseQRankSum=-5.107;DP=12802;Dels=0.00;FS=1.439;HRun=0;HaplotypeScore=0.3224;InbreedingCoeff=0.0260;MQ=92.33;MQ0=0;MQRankSum=-2.528;NDA=2;QD=13.55;ReadPosRankSum=1.865;SB=-312.37;VQSLOD=6.0299;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:8:24.08:0,24,330	0/0:1,0:6:18.06:0,18,222	0/0:1,0:6:18.06:0,18,227	0/0:1,0:9:27.09:0,27,366	0/0:1,0:4:12.04:0,12,157	0/0:1,0:9:27.09:0,27,366	0/0:1,0:9:27.09:0,27,347	0/0:1,0:12:36.11:0,36,444	0/0:1,0:1 [...]
-1	874553	.	G	T	129.66	PASS	AC=2;AF=0.00085;AN=2354;BaseQRankSum=-4.133;DP=12404;Dels=0.00;FS=1.033;HRun=0;HaplotypeScore=0.2865;InbreedingCoeff=-0.0172;MQ=93.26;MQ0=0;MQRankSum=-2.976;NDA=2;QD=4.80;ReadPosRankSum=0.626;SB=-59.70;VQSLOD=5.4149;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,366	0/0:1,0:4:12.04:0,12,151	0/0:1,0:4:12.04:0,12,151	0/0:1,0:9:27.09:0,27,366	0/0:1,0:5:15.05:0,15,197	0/0:1,0:11:33.11:0,33,432	0/0:1,0:11:33.10:0,33,397	0/0:1,0:11:33.10:0,33,397	0/0:1,0: [...]
-1	874657	.	G	A	70.31	PASS	AC=4;AF=0.00169;AN=2362;BaseQRankSum=-0.218;DP=15640;Dels=0.00;FS=14.687;HRun=0;HaplotypeScore=0.2464;InbreedingCoeff=-0.0179;MQ=67.20;MQ0=0;MQRankSum=1.359;NDA=2;QD=3.06;ReadPosRankSum=0.088;SB=-35.40;VQSLOD=1.7943;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,169	0/0:1,0:7:21.07:0,21,265	0/0:1,0:5:15.05:0,15,193	0/0:1,0:11:33.11:0,33,416	0/0:1,0:8:24.08:0,24,302	0/0:1,0:15:45.15:0,45,579	0/0:17,0:17:45.14:0,45,580	0/0:11,0:11:33.09:0,33,410	0/0:16 [...]
-1	874665	rs74047413	G	A	5723.97	PASS	AC=34;AF=0.01438;AN=2364;BaseQRankSum=-11.637;DB;DP=16240;Dels=0.00;FS=4.664;HRun=0;HaplotypeScore=0.2594;InbreedingCoeff=0.0425;MQ=63.94;MQ0=0;MQRankSum=5.366;NDA=3;QD=13.34;ReadPosRankSum=4.040;SB=-1184.77;VQSLOD=6.6070;culprit=MQRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:7:21.07:0,21,275	0/0:1,0:10:30.09:0,30,370	0/0:1,0:5:15.05:0,15,200	0/0:1,0:9:27.09:0,27,354	0/0:1,0:9:27.09:0,27,376	0/0:1,0:10:30.10:0,30,400	0/0:18,0:18:54.17:0,54,684	0/0:1,0:1 [...]
-1	874671	rs148995812	G	T	143.17	TruthSensitivityTranche98.50to98.80	AC=6;AF=0.00254;AN=2364;BaseQRankSum=3.015;DB;DP=17331;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.2863;InbreedingCoeff=0.0404;MQ=62.93;MQ0=0;MQRankSum=2.341;NDA=2;QD=2.98;ReadPosRankSum=1.335;SB=-77.93;VQSLOD=0.5677;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:7:21.06:0,21,253	0/0:1,0:11:33.10:0,33,378	0/0:1,0:4:12.03:0,12,137	0/0:1,0:10:30.09:0,30,344	0/0:1,0:11:33.10:0,33,407	0/0:1,0:9:27.07:0,27,301	0/0:21,0:21 [...]
-1	874697	.	C	G	101.09	PASS	AC=1;AF=0.00042;AN=2362;BaseQRankSum=-3.035;DP=22197;Dels=0.00;FS=1.736;HRun=2;HaplotypeScore=0.2393;InbreedingCoeff=-0.0038;MQ=69.05;MQ0=0;MQRankSum=1.459;NDA=3;QD=7.78;ReadPosRankSum=-0.481;SB=9.66;VQSLOD=6.3479;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:11:33.11:0,33,440	0/0:1,0:15:45.14:0,45,542	0/0:1,0:5:15.05:0,15,203	0/0:1,0:12:36.12:0,36,463	0/0:11,0:12:33.09:0,33,421	0/0:1,0:14:42.14:0,42,560	0/0:1,0:17:51.13:0,51,552	0/0:1,0:13:39.11:0,39,435	0/0:1 [...]
-1	874706	.	A	G	221.68	PASS	AC=1;AF=0.00042;AN=2362;BaseQRankSum=-3.691;DP=23040;Dels=0.00;FS=1.035;HRun=0;HaplotypeScore=0.2004;InbreedingCoeff=-0.0039;MQ=72.95;MQ0=0;MQRankSum=2.395;NDA=3;QD=7.39;ReadPosRankSum=0.700;SB=-109.35;VQSLOD=6.6840;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,371	0/0:1,0:18:54.16:0,54,618	0/0:1,0:7:21.07:0,21,285	0/0:12,0:12:30.10:0,30,407	0/0:12,0:12:36.11:0,36,474	0/0:1,0:13:39.13:0,39,528	0/0:1,0:19:57.17:0,57,653	0/0:15,0:15:45.12:0,45,501	0/ [...]
-1	874714	.	C	T	172.67	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=0.061;DP=25875;Dels=0.00;FS=16.702;HRun=0;HaplotypeScore=0.1731;InbreedingCoeff=0.0793;MQ=74.76;MQ0=0;MQRankSum=1.555;NDA=2;QD=4.43;ReadPosRankSum=0.171;SB=-21.70;VQSLOD=1.9941;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,371	0/0:1,0:18:54.17:0,54,650	0/0:1,0:8:24.08:0,24,325	0/0:12,0:12:27.09:0,27,381	0/0:1,0:11:33.11:0,33,447	0/0:1,0:19:57.19:0,57,760	0/0:1,0:25:75.20:0,75,812	0/0:17,0:17:51.13:0,51,574	0/0:1 [...]
-1	874731	.	G	A	145.27	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=0.058;DP=24162;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.1869;InbreedingCoeff=-0.0043;MQ=75.55;MQ0=0;MQRankSum=2.984;NDA=2;QD=10.38;ReadPosRankSum=-0.451;SB=-101.06;VQSLOD=7.0812;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,380	0/0:1,0:12:36.12:0,36,472	0/0:1,0:8:24.08:0,24,320	0/0:1,0:12:36.12:0,36,472	0/0:1,0:10:30.10:0,30,393	0/0:1,0:21:63.21:0,63,840	0/0:1,0:20:60.19:0,60,772	0/0:1,0:14:42.13:0,42,529	0/0: [...]
-1	874734	rs145967298	C	T	2081.74	PASS	AC=8;AF=0.00338;AN=2364;BaseQRankSum=-1.345;DB;DP=23140;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.2038;InbreedingCoeff=-0.0083;MQ=76.87;MQ0=0;MQRankSum=5.345;NDA=2;QD=9.51;ReadPosRankSum=4.296;SB=-1122.28;VQSLOD=7.9095;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,354	0/0:1,0:10:30.09:0,30,353	0/0:1,0:7:21.07:0,21,265	0/0:1,0:11:33.11:0,33,432	0/0:1,0:8:24.07:0,24,282	0/0:1,0:18:54.17:0,54,650	0/0:1,0:17:51.13:0,51,552	0/0:1,0:10:30.07: [...]
-1	874762	rs139437968	C	T	651.40	PASS	AC=8;AF=0.00338;AN=2364;BaseQRankSum=-0.183;DB;DP=25970;Dels=0.00;FS=2.823;HRun=0;HaplotypeScore=0.2432;InbreedingCoeff=-0.0132;MQ=87.02;MQ0=0;MQRankSum=1.762;NDA=3;QD=5.62;ReadPosRankSum=0.858;SB=-307.51;VQSLOD=6.1742;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:12:36.12:0,36,501	0/0:1,0:12:36.11:0,36,444	0/0:1,0:15:45.15:0,45,579	0/0:1,0:19:57.19:0,57,772	0/0:1,0:11:33.11:0,33,424	0/0:1,0:25:75.24:0,75,964	0/0:1,0:18:54.16:0,54,635	0/0:1,0:13:39.11 [...]
-1	874779	rs141207077	C	T	277.66	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=-2.449;DB;DP=26201;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.5481;InbreedingCoeff=0.0139;MQ=74.98;MQ0=2;MQRankSum=-2.236;NDA=2;QD=7.93;ReadPosRankSum=0.678;SB=-141.68;VQSLOD=5.2534;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:13:39.13:0,39,528	0/0:1,0:12:36.11:0,36,444	0/0:1,0:21:63.21:0,63,840	0/0:1,0:23:69.23:0,69,920	0/0:1,0:15:45.15:0,45,618	0/0:1,0:28:84.28:0,84,1120	0/0:1,0:17:51.16:0,51,629	0/0:1,0:10:3 [...]
-1	874809	.	G	C	241.96	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=-4.215;DP=29065;DS;Dels=0.00;FS=2.562;HRun=1;HaplotypeScore=0.7328;InbreedingCoeff=-0.0131;MQ=59.07;MQ0=7;MQRankSum=1.382;NDA=3;QD=8.07;ReadPosRankSum=-1.689;SB=-71.04;VQSLOD=4.3569;culprit=HaplotypeScore;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:18:54.18:0,54,732	0/0:1,0:16:48.16:0,48,629	0/0:1,0:29:87.29:0,87,1160	0/0:1,0:27:81.27:0,81,1113	0/0:1,0:21:63.21:0,63,866	0/0:1,0:27:81.27:0,81,1097	0/0:1,0:14:42.13:0,42,518	0/0:1,0:8:2 [...]
-1	874816	.	C	CT	13059.48	PASS	AC=80;AF=0.03393;AN=2358;BaseQRankSum=-0.835;DP=28085;FS=73.108;GS;HRun=1;HaplotypeScore=4.8051;InbreedingCoeff=0.0220;MQ=55.70;MQ0=12;MQRankSum=3.256;NDA=1;QD=8.23;ReadPosRankSum=17.642;SB=-5804.39;set=variant2	GT:AD:DP:GQ:PL	0/0:1,0:1:57.19:0,57,845	0/0:1,0:1:57.19:0,57,845	0/0:1,0:1:87.29:0,87,1289	0/0:1,0:1:78.26:0,78,1156	0/0:1,0:1:66.22:0,66,978	0/0:1,0:1:87.29:0,87,1289	0/0:1,0:1:42.14:0,42,622	0/0:1,0:1:18.06:0,18,267	0/0:1,0:1:30.08:0,30,336	0/0:1,0 [...]
-1	874826	.	A	C	73.70	TruthSensitivityTranche99.00to99.30	AC=42;AF=0.01780;AN=2360;BaseQRankSum=-24.430;DP=21024;DS;Dels=0.00;FS=339.345;HRun=2;HaplotypeScore=0.9175;InbreedingCoeff=-0.0037;MQ=55.96;MQ0=9;MQRankSum=-2.079;NDA=2;QD=0.11;ReadPosRankSum=-6.577;SB=-243.62;VQSLOD=-1.9473;culprit=HaplotypeScore;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:21:63.20:0,63,810	0/0:1,0:16:48.13:0,48,535	0/0:1,0:26:78.25:0,78,983	0/0:1,0:20:60.20:0,60,800	0/0:1,0:21:63.21:0,63,854	0/0:1,0:31:93.30:0,93,1 [...]
-1	874829	.	T	C	182.51	TruthSensitivityTranche99.30to99.50	AC=71;AF=0.03003;AN=2364;BaseQRankSum=-21.015;DP=23962;DS;Dels=0.00;FS=486.019;HRun=4;HaplotypeScore=0.8899;InbreedingCoeff=-0.0423;MQ=55.61;MQ0=12;MQRankSum=4.332;NDA=1;QD=0.24;ReadPosRankSum=-19.215;SB=-390.43;VQSLOD=-3.1119;culprit=HaplotypeScore;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:21:63.21:0,63,826	0/0:1,0:14:42.13:0,42,518	0/0:1,0:27:81.26:0,81,1061	0/0:1,0:22:66.22:0,66,894	0/0:1,0:23:69.23:0,69,904	0/0:1,0:32:96.31:0,9 [...]
-1	874840	.	G	A	76.39	TruthSensitivityTranche99.30to99.50	AC=4;AF=0.00169;AN=2364;BaseQRankSum=0.194;DP=25677;DS;Dels=0.00;FS=36.775;HRun=0;HaplotypeScore=0.4616;InbreedingCoeff=0.0506;MQ=54.52;MQ0=17;MQRankSum=1.004;NDA=3;QD=1.41;ReadPosRankSum=-4.415;SB=-198.08;VQSLOD=-4.2627;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:16:48.15:0,48,605	0/0:20,0:20:54.15:0,54,656	0/0:1,0:27:81.25:0,81,998	0/0:1,0:22:66.20:0,66,795	0/0:1,0:22:66.21:0,66,832	0/0:1,0:29:87.28:0,87,1119	0/0:1,0:12:3 [...]
-1	874864	rs141512630	CT	C	14962.48	PASS	AC=120;AF=0.05376;AN=2232;BaseQRankSum=7.876;DB;DP=19575;DS;FS=29.806;HRun=1;HaplotypeScore=3.1953;InbreedingCoeff=-0.0547;MQ=55.23;MQ0=13;MQRankSum=3.370;NDA=1;QD=5.75;ReadPosRankSum=8.496;SB=-5595.81;set=variant2	GT:AD:DP:GQ:PL	0/0:1,0:1:42.14:0,42,636	0/0:1,0:1:27.09:0,27,409	0/0:1,0:1:54.18:0,54,818	0/0:1,0:1:48.16:0,48,727	0/0:1,0:1:48.16:0,48,727	0/0:1,0:1:75.25:0,75,1136	0/0:1,0:1:27.04:0,27,260	0/0:1,0:1:24.05:0,24,239	0/0:1,0:1:27.06:0,27, [...]
-1	874875	.	A	C	125.15	TruthSensitivityTranche99.00to99.30	AC=62;AF=0.02654;AN=2336;BaseQRankSum=-25.364;DP=13447;DS;Dels=0.00;FS=290.321;HRun=2;HaplotypeScore=0.9392;InbreedingCoeff=-0.0357;MQ=62.88;MQ0=9;MQRankSum=-2.359;NDA=3;QD=0.20;ReadPosRankSum=-3.012;SB=-138.79;VQSLOD=-1.6402;culprit=HaplotypeScore;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:13:39.12:0,39,470	0/0:1,0:3:9.03:0,9,111	0/0:1,0:14:42.13:0,42,494	0/0:1,0:13:39.12:0,39,470	0/0:1,0:12:36.12:0,36,472	0/0:1,0:18:54.17:0,54,694 [...]
-1	874878	.	T	C	2347.07	TruthSensitivityTranche99.50to99.90	AC=177;AF=0.07526;AN=2352;BaseQRankSum=-27.911;DP=15608;DS;Dels=0.00;FS=812.634;HRun=4;HaplotypeScore=0.4553;InbreedingCoeff=-0.0682;MQ=62.83;MQ0=10;MQRankSum=-1.551;NDA=3;QD=1.03;ReadPosRankSum=-24.080;SB=275.16;VQSLOD=-5.8489;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:14:42.13:0,42,506	0/0:1,0:2:6.02:0,6,76	0/0:1,0:15:45.14:0,45,567	0/0:1,0:12:36.11:0,36,454	0/0:1,0:15:45.14:0,45,567	0/0:1,0:19:57.18:0,57,718	0/1:8,1:9 [...]
-1	874880	.	C	T	106.84	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=-1.422;DP=21057;DS;Dels=0.00;FS=3.970;HRun=0;HaplotypeScore=0.4635;InbreedingCoeff=-0.0128;MQ=62.21;MQ0=9;MQRankSum=0.305;NDA=2;QD=3.96;ReadPosRankSum=1.493;SB=-59.85;VQSLOD=2.2323;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:15:45.15:0,45,610	0/0:1,0:9:27.09:0,27,347	0/0:1,0:18:54.18:0,54,720	0/0:1,0:15:45.15:0,45,626	0/0:1,0:19:57.19:0,57,802	0/0:1,0:23:69.23:0,69,960	0/0:11,0:11:33.10:0,33,407	0/0:12,0:12:36.12:0,36,467	 [...]
-1	876484	rs118109273	C	T	4116.34	PASS	AC=42;AF=0.01825;AN=2302;BaseQRankSum=-4.436;DB;DP=8391;Dels=0.00;FS=33.016;HRun=0;HaplotypeScore=0.2452;InbreedingCoeff=0.0391;MQ=62.83;MQ0=0;MQRankSum=7.010;NDA=2;QD=13.50;ReadPosRankSum=2.029;SB=-1128.61;VQSLOD=5.1912;culprit=MQRankSum;set=variant	GT:AD:DP:GQ:PL	./.	0/0:1,0:3:9.02:0,9,92	0/0:1,0:3:9.02:0,9,100	0/0:1,0:5:15.05:0,15,197	0/0:1,0:5:15.05:0,15,200	0/0:1,0:3:9.03:0,9,120	0/0:1,0:4:12.04:0,12,154	0/0:11,0:11:27.08:0,27,323	0/0:4,0:4:12.0 [...]
-1	876499	rs4372192	A	G	305633.12	PASS	AC=2123;AF=0.91667;AN=2316;BaseQRankSum=22.009;DB;DP=9687;Dels=0.01;FS=13.883;HRun=6;HaplotypeScore=0.3271;InbreedingCoeff=0.0020;MQ=62.35;MQ0=0;MQRankSum=-2.556;NDA=3;QD=31.33;ReadPosRankSum=-0.328;SB=-23736.25;VQSLOD=4.8712;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	1/1:0,1:1:3.01:38,3,0	1/1:0,1:6:18.06:227,18,0	1/1:0,1:3:9.03:116,9,0	1/1:0,1:5:15.05:189,15,0	1/1:0,1:4:12.04:171,12,0	1/1:0,1:2:6.02:81,6,0	1/1:0,1:7:21.07:270,21,0	1/1:0,12:12:36.08:436,3 [...]
-1	876659	.	C	T	66.95	PASS	AC=1;AF=0.00043;AN=2322;BaseQRankSum=-0.742;DP=8862;Dels=0.00;FS=9.438;HRun=0;HaplotypeScore=0.1758;InbreedingCoeff=-0.0314;MQ=60.48;MQ0=0;MQRankSum=2.146;NDA=2;QD=9.56;ReadPosRankSum=-0.520;SB=7.07;VQSLOD=5.9783;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,41	0/0:8,0:8:18.03:0,18,209	0/0:1,0:2:6.02:0,6,84	0/0:6,0:6:18.06:0,18,237	0/0:1,0:3:9.03:0,9,118	0/0:1,0:2:6.02:0,6,84	0/0:8,0:8:24.08:0,24,307	0/0:1,0:4:12.04:0,12,145	0/0:1,0:5:15. [...]
-1	876698	.	G	C	162.37	TruthSensitivityTranche99.00to99.30	AC=54;AF=0.02432;AN=2220;BaseQRankSum=-14.750;DP=5641;Dels=0.00;FS=79.866;HRun=1;HaplotypeScore=0.2141;InbreedingCoeff=-0.0605;MQ=65.04;MQ0=0;MQRankSum=0.487;NDA=3;QD=0.51;ReadPosRankSum=-10.460;SB=485.51;VQSLOD=-1.5866;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,41	0/0:1,0:2:6.02:0,6,79	./.	0/0:1,0:3:9.03:0,9,124	0/0:1,0:1:3.01:0,3,42	0/0:1,0:1:3.01:0,3,32	0/0:6,0:6:15.03:0,15,163	0/0:1,0:3:9.03:0,9,108	0/0:1,0 [...]
-1	877498	.	T	C	103.49	PASS	AC=2;AF=0.00100;AN=1992;BaseQRankSum=2.365;DP=3395;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0945;InbreedingCoeff=-0.0948;MQ=67.96;MQ0=0;MQRankSum=0.630;NDA=1;QD=6.09;ReadPosRankSum=-0.641;SB=-3.03;VQSLOD=4.2876;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,41	0/0:1,0:3:9.03:0,9,106	0/0:1,0:4:12.04:0,12,154	0/0:1,0:1:3.01:0,3,41	./.	0/0:1,0:5:15.05:0,15,203	0/0:3,0:3:9.02:0,9,94	./.	0/0:1,0:1:3.01:0,3,34	0/0:1,0:5:15.04:0,15,158	0/0:2,0:2:6.01:0,6,6 [...]
-1	877583	.	C	T	209.17	PASS	AC=2;AF=0.00090;AN=2230;BaseQRankSum=-2.524;DP=7189;Dels=0.00;FS=2.392;HRun=1;HaplotypeScore=0.1395;InbreedingCoeff=-0.0604;MQ=69.85;MQ0=0;MQRankSum=0.660;NDA=2;QD=6.34;ReadPosRankSum=-0.548;SB=-111.73;VQSLOD=4.9268;culprit=FS;set=variant	GT:AD:DP:GQ:PL	./.	0/0:1,0:5:15.05:0,15,193	0/0:1,0:2:6.02:0,6,84	0/0:1,0:3:9.03:0,9,125	./.	0/0:1,0:6:18.06:0,18,236	0/0:1,0:1:3:0,3,28	0/0:1,0:3:9.03:0,9,113	0/0:2,0:2:6.02:0,6,79	0/0:1,0:9:27.09:0,27,354	0/0:3,0:3:9.03:0,9, [...]
-1	877608	.	C	G	100.84	PASS	AC=3;AF=0.00138;AN=2176;BaseQRankSum=-1.905;DP=5927;Dels=0.00;FS=4.496;HRun=0;HaplotypeScore=0.1522;InbreedingCoeff=-0.0542;MQ=64.62;MQ0=0;MQRankSum=0.399;NDA=2;QD=6.72;ReadPosRankSum=-0.563;SB=-42.63;VQSLOD=4.7731;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:1:3.01:0,3,31	0/0:1,0:3:9.03:0,9,113	0/0:1,0:1:3.01:0,3,44	0/0:1,0:3:9.03:0,9,116	./.	0/0:1,0:5:15.05:0,15,197	./.	0/0:1,0:1:3.01:0,3,37	0/0:2,0:2:6.02:0,6,75	0/0:1,0:6:18.06:0,18,217	0/0:1,0:3:9.02:0,9,1 [...]
-1	877677	.	G	C	349.09	TruthSensitivityTranche99.00to99.30	AC=69;AF=0.03770;AN=1830;BaseQRankSum=-9.318;DP=2433;Dels=0.00;FS=448.822;HRun=1;HaplotypeScore=0.0879;InbreedingCoeff=-0.0760;MQ=59.92;MQ0=0;MQRankSum=0.100;NDA=3;QD=1.71;ReadPosRankSum=-8.632;SB=-143.52;VQSLOD=-1.8166;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	./.	./.	0/0:1,0:2:6.02:0,6,86	0/0:1,0:1:3.01:0,3,35	./.	0/0:1,0:2:6.02:0,6,77	0/0:1,0:1:3.01:0,3,39	0/0:1,0:1:2.99:0,3,23	./.	0/0:1,0:1:3.01:0,3,39	0/0:1,0:2:6.02:0,6,72	 [...]
-1	877782	rs79037098	C	G	4781.10	PASS	AC=124;AF=0.07159;AN=1732;BaseQRankSum=-4.447;DB;DP=2110;Dels=0.00;FS=3.255;HRun=0;HaplotypeScore=0.0938;InbreedingCoeff=0.0287;MQ=60.89;MQ0=0;MQRankSum=2.952;NDA=2;QD=17.45;ReadPosRankSum=-3.028;SB=-1408.28;VQSLOD=6.6300;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,120	./.	0/0:1,0:2:6.02:0,6,76	./.	0/0:1,0:2:6.02:0,6,88	0/0:1,0:1:3.01:0,3,36	0/0:1,0:1:3.01:0,3,36	0/0:1,0:1:3.01:0,3,37	0/0:1,0:1:3.01:0,3,38	0/0:1,0:1:3.01:0,3,40	0/0:1,0:1: [...]
-1	877822	.	A	T	78.78	PASS	AC=1;AF=0.00055;AN=1804;BaseQRankSum=-0.199;DP=2323;Dels=0.00;FS=2.331;HRun=1;HaplotypeScore=0.0436;InbreedingCoeff=-0.1067;MQ=58.62;MQ0=0;MQRankSum=2.403;NDA=1;QD=8.75;ReadPosRankSum=-2.072;SB=13.26;VQSLOD=3.3162;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:2:6.02:0,6,80	./.	0/0:1,0:1:3.01:0,3,36	./.	0/0:1,0:1:3.01:0,3,41	./.	0/0:1,0:3:9.02:0,9,92	./.	0/0:1,0:3:9.02:0,9,100	0/0:1,0:1:3.01:0,3,32	0/0:1,0:1:3.01:0,3,30	./.	0/0:1,0:3:9.02:0,9,100	0/0:1,0:1:3.01:0 [...]
-1	877831	rs6672356	T	C	82507.77	PASS	AC=1802;AF=1.00000;AN=1802;BaseQRankSum=-0.472;DB;DP=2494;Dels=0.00;FS=0.000;HRun=2;HaplotypeScore=0.0398;InbreedingCoeff=-0.0821;MQ=58.21;MQ0=0;MQRankSum=2.333;NDA=2;QD=33.07;ReadPosRankSum=1.161;SB=-3183.71;VQSLOD=1.4957;culprit=FS;set=variant	GT:AD:DP:GQ:PL	1/1:0,1:2:6.02:69,6,0	./.	1/1:0,1:1:3.01:30,3,0	./.	1/1:0,1:1:3.01:44,3,0	./.	1/1:0,1:3:9.02:100,9,0	./.	1/1:0,1:3:9.02:92,9,0	1/1:0,1:2:6.01:61,6,0	1/1:0,1:2:6.01:55,6,0	./.	1/1:0,1:4:12.04:148 [...]
-1	878008	.	C	T	138.93	PASS	AC=5;AF=0.0063;AN=792;BaseQRankSum=0.007;DP=887;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0558;InbreedingCoeff=-0.0914;MQ=58.35;MQ0=0;MQRankSum=1.574;NDA=2;QD=11.58;ReadPosRankSum=-1.392;SB=5.36;VQSLOD=3.3594;culprit=FS;set=variant	GT:AD:DP:GQ:PL	./.	./.	./.	./.	0/0:1,0:1:3.01:0,3,42	./.	0/0:1,0:1:3.01:0,3,31	./.	./.	./.	./.	./.	./.	0/0:1,0:1:3.01:0,3,39	0/0:1,0:1:3.01:0,3,33	0/0:1,0:1:3.01:0,3,32	./.	0/0:1,0:3:9.02:0,9,100	0/0:1,0:1:3.01:0,3,32	./.	./.	0/0:1, [...]
-1	878254	.	C	T	85.52	PASS	AC=8;AF=0.00352;AN=2272;BaseQRankSum=-5.177;DP=5745;Dels=0.00;FS=5.964;HRun=1;HaplotypeScore=0.1128;InbreedingCoeff=-0.0572;MQ=80.88;MQ0=0;MQRankSum=1.091;NDA=1;QD=1.50;ReadPosRankSum=-0.781;SB=-70.68;VQSLOD=1.6977;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,129	0/0:1,0:8:24.08:0,24,309	0/0:1,0:3:9.03:0,9,124	0/0:1,0:1:3.01:0,3,33	0/0:1,0:5:15.05:0,15,206	0/0:1,0:4:12.04:0,12,145	0/0:1,0:5:15.05:0,15,200	0/0:1,0:2:6.02:0,6,81	0/0:1,0:6:18.06:0,18,22 [...]
-1	878296	rs72902601	C	G	223.90	PASS	AC=5;AF=0.00217;AN=2306;BaseQRankSum=0.013;DB;DP=6410;Dels=0.00;FS=2.317;HRun=1;HaplotypeScore=0.1647;InbreedingCoeff=-0.0498;MQ=84.45;MQ0=1;MQRankSum=-1.556;NDA=3;QD=7.72;ReadPosRankSum=-0.819;SB=29.78;VQSLOD=6.1512;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:2:6.02:0,6,85	0/0:1,0:7:21.06:0,21,240	0/0:1,0:3:9.03:0,9,122	0/0:1,0:3:9.03:0,9,130	0/0:1,0:4:12.04:0,12,154	0/0:6,0:6:18.06:0,18,225	0/0:1,0:7:21.06:0,21,240	0/0:1,0:4:12.03:0,12,130	0/0:7,0: [...]
-1	878310	.	T	C	230.22	PASS	AC=6;AF=0.00259;AN=2314;BaseQRankSum=2.438;DP=6355;Dels=0.00;FS=7.487;HRun=0;HaplotypeScore=0.2096;InbreedingCoeff=-0.0279;MQ=75.89;MQ0=1;MQRankSum=-0.662;NDA=3;QD=6.40;ReadPosRankSum=0.464;SB=24.62;VQSLOD=6.3399;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:2:6.02:0,6,77	0/0:1,0:4:12.04:0,12,148	0/0:1,0:4:12.04:0,12,148	0/0:1,0:3:9.03:0,9,122	0/0:1,0:2:6.02:0,6,80	0/0:1,0:5:15.05:0,15,193	0/0:6,0:6:18.04:0,18,193	0/0:1,0:5:15.04:0,15,167	0/0:7,0:8 [...]
-1	878314	rs142558220	G	C	6737.16	PASS	AC=100;AF=0.04314;AN=2318;BaseQRankSum=4.429;DB;DP=6404;Dels=0.00;FS=33.002;HRun=0;HaplotypeScore=0.2219;InbreedingCoeff=0.0422;MQ=74.44;MQ0=0;MQRankSum=1.067;NDA=3;QD=14.58;ReadPosRankSum=-0.369;SB=-1736.03;VQSLOD=6.0058;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,120	0/0:1,0:3:9.03:0,9,113	0/0:1,0:4:12.04:0,12,151	0/0:1,0:3:9.03:0,9,127	0/0:1,0:2:6.02:0,6,86	0/0:1,0:7:21.07:0,21,280	0/1:5,1:6:21.95:22,0,170	0/0:1,0:5:15.05:0,15,193	0/0 [...]
-1	878325	rs114478480	C	T	1290.92	PASS	AC=22;AF=0.00954;AN=2306;BaseQRankSum=0.807;DB;DP=6480;Dels=0.00;FS=8.079;HRun=0;HaplotypeScore=0.2133;InbreedingCoeff=0.0090;MQ=69.57;MQ0=1;MQRankSum=1.550;NDA=3;QD=12.29;ReadPosRankSum=-0.505;SB=-430.52;VQSLOD=8.1094;culprit=ReadPosRankSum;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,175	0/0:1,0:5:15.05:0,15,185	0/0:1,0:3:9.02:0,9,100	0/0:1,0:3:9.03:0,9,103	0/0:1,0:2:6.02:0,6,82	0/0:1,0:9:27.09:0,27,347	0/0:6,0:6:18.05:0,18,217	0/0:1,0:5:15.05:0 [...]
-1	878331	rs148327885	C	T	903.80	PASS	AC=21;AF=0.00898;AN=2338;BaseQRankSum=-0.474;DB;DP=6742;Dels=0.00;FS=1.328;HRun=0;HaplotypeScore=0.1838;InbreedingCoeff=0.0444;MQ=66.59;MQ0=1;MQRankSum=2.307;NDA=2;QD=9.22;ReadPosRankSum=-0.761;SB=-342.88;VQSLOD=6.5208;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,172	0/0:1,0:6:18.05:0,18,201	0/0:1,0:4:12.03:0,12,122	0/0:1,0:4:12.04:0,12,160	0/0:1,0:1:3.01:0,3,42	0/0:1,0:8:24.08:0,24,315	0/0:1,0:7:21.06:0,21,234	0/0:1,0:7:21.06:0,21,247	0 [...]
-1	878408	rs190069697	C	T	254.67	PASS	AC=1;AF=0.00043;AN=2350;BaseQRankSum=0.190;DB;DP=11638;Dels=0.00;FS=1.390;HRun=0;HaplotypeScore=0.1533;InbreedingCoeff=-0.0243;MQ=73.35;MQ0=0;MQRankSum=0.575;NDA=2;QD=18.19;ReadPosRankSum=-0.629;SB=-67.06;VQSLOD=6.0781;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:8:24.08:0,24,341	0/0:1,0:11:33.10:0,33,407	0/0:1,0:7:21.07:0,21,275	0/0:1,0:7:21.07:0,21,285	0/0:1,0:5:15.05:0,15,217	0/0:1,0:4:12.04:0,12,154	0/0:1,0:5:15.04:0,15,167	0/0:1,0:4 [...]
-1	878425	.	C	T	197.84	PASS	AC=2;AF=0.00085;AN=2356;BaseQRankSum=-0.512;DP=14003;Dels=0.00;FS=6.800;HRun=1;HaplotypeScore=0.1841;InbreedingCoeff=-0.0220;MQ=72.36;MQ0=0;MQRankSum=1.181;NDA=1;QD=6.00;ReadPosRankSum=-0.215;SB=-124.40;VQSLOD=6.3903;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:10:30.10:0,30,426	0/0:1,0:16:48.15:0,48,605	0/0:1,0:9:27.09:0,27,354	0/0:1,0:7:21.07:0,21,296	0/0:1,0:7:21.07:0,21,292	0/0:1,0:4:12.04:0,12,157	0/0:1,0:4:12.04:0,12,151	0/0:1,0:5:15.05:0,15 [...]
-1	878474	rs183873661	C	T	444.43	PASS	AC=3;AF=0.00127;AN=2362;BaseQRankSum=-5.768;DB;DP=14280;Dels=0.00;FS=0.762;HRun=0;HaplotypeScore=0.1971;InbreedingCoeff=-0.0172;MQ=70.51;MQ0=0;MQRankSum=0.190;NDA=2;QD=8.55;ReadPosRankSum=-0.720;SB=-178.80;VQSLOD=6.7250;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:14:42.14:0,42,585	0/0:1,0:12:36.12:0,36,472	0/0:1,0:12:36.11:0,36,454	0/0:1,0:8:24.08:0,24,338	0/0:1,0:12:36.12:0,36,501	0/0:1,0:3:9.03:0,9,120	0/0:10,0:10:27.09:0,27,350	0/0:1,0:7:21.07:0, [...]
-1	878644	.	G	A	226.03	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=-0.122;DP=25048;Dels=0.00;FS=35.316;HRun=0;HaplotypeScore=0.2952;InbreedingCoeff=-0.0072;MQ=95.60;MQ0=0;MQRankSum=-1.258;NDA=3;QD=5.95;ReadPosRankSum=-0.227;SB=-12.93;VQSLOD=4.1589;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:10:30.10:0,30,393	0/0:19,0:19:51.15:0,51,625	0/0:1,0:14:42.14:0,42,550	0/0:1,0:10:30.10:0,30,400	0/0:1,0:7:21.07:0,21,289	0/0:1,0:5:15.05:0,15,200	0/0:1,0:21:63.19:0,63,759	0/0:15,0:15:45.13:0,45,541	0 [...]
-1	878653	rs112422281	A	G	1095.87	PASS	AC=3;AF=0.00127;AN=2364;BaseQRankSum=4.441;DB;DP=24856;Dels=0.00;FS=13.604;HRun=0;HaplotypeScore=0.3227;InbreedingCoeff=-0.0071;MQ=93.11;MQ0=0;MQRankSum=-1.791;NDA=3;QD=14.81;ReadPosRankSum=0.465;SB=-472.43;VQSLOD=6.0957;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:10:30.10:0,30,386	0/0:16,0:16:45.12:0,45,527	0/0:1,0:13:39.13:0,39,501	0/0:1,0:11:33.11:0,33,432	0/0:1,0:8:24.08:0,24,330	0/0:6,0:6:18.06:0,18,236	0/0:1,0:23:69.18:0,69,747	0/0:15,0:15:45 [...]
-1	878656	.	G	T	144.02	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-2.854;DP=25563;Dels=0.00;FS=13.254;HRun=0;HaplotypeScore=0.3242;InbreedingCoeff=-0.0067;MQ=92.49;MQ0=0;MQRankSum=-1.134;NDA=2;QD=11.08;ReadPosRankSum=0.196;SB=-122.31;VQSLOD=6.2398;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:12:36.12:0,36,488	0/0:14,0:14:42.13:0,42,529	0/0:1,0:13:39.13:0,39,501	0/0:1,0:12:36.12:0,36,472	0/0:1,0:6:18.06:0,18,256	0/0:6,0:6:18.06:0,18,241	0/0:1,0:24:72.23:0,72,887	0/0:1,0:17:51.16:0,51,629	0 [...]
-1	878667	.	G	T	1244.61	PASS	AC=7;AF=0.00296;AN=2364;BaseQRankSum=-5.435;DP=24575;DS;Dels=0.00;FS=6.041;HRun=0;HaplotypeScore=0.4616;InbreedingCoeff=-0.0092;MQ=80.88;MQ0=0;MQRankSum=-0.829;NDA=2;QD=7.83;ReadPosRankSum=1.618;SB=-336.26;VQSLOD=5.6715;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:13:39.13:0,39,520	0/0:1,0:6:18.06:0,18,227	0/0:1,0:13:39.12:0,39,491	0/0:1,0:11:33.10:0,33,407	0/0:1,0:8:24.08:0,24,325	0/0:1,0:7:21.07:0,21,270	0/0:1,0:22:66.20:0,66,795	0/0:1,0:14:42.13:0,42,506	0 [...]
-1	878676	.	C	T	261.55	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-0.205;DP=28225;DS;Dels=0.00;FS=16.457;HRun=0;HaplotypeScore=0.7222;InbreedingCoeff=0.0256;MQ=64.88;MQ0=0;MQRankSum=0.709;NDA=3;QD=6.38;ReadPosRankSum=1.287;SB=6.14;VQSLOD=4.2567;culprit=HaplotypeScore;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:9:27.09:0,27,376	0/0:1,0:15:45.14:0,45,555	0/0:1,0:13:39.13:0,39,501	0/0:1,0:8:24.08:0,24,325	0/0:1,0:10:30.10:0,30,400	0/0:1,0:7:21.07:0,21,292	0/0:1,0:27:81.25:0,81,975	0/0:1,0:16:48.15:0,4 [...]
-1	878709	rs144453653	C	T	1463.13	PASS	AC=4;AF=0.00169;AN=2364;BaseQRankSum=4.545;DB;DP=30772;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.3157;InbreedingCoeff=0.0230;MQ=67.14;MQ0=0;MQRankSum=-0.925;NDA=2;QD=12.51;ReadPosRankSum=1.283;SB=-583.42;VQSLOD=5.4027;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:12,0:12:36.10:0,36,450	0/0:1,0:21:63.19:0,63,759	0/0:1,0:12:36.11:0,36,434	0/0:1,0:11:33.11:0,33,432	0/0:10,0:10:30.08:0,30,361	0/0:1,0:6:18.06:0,18,222	0/0:1,0:20:60.13:0,60,612	0/0:1,0:12:36. [...]
-1	878733	.	G	C	722.67	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=1.196;DP=32483;DS;Dels=0.00;FS=34.785;HRun=0;HaplotypeScore=0.2590;InbreedingCoeff=-0.0142;MQ=69.62;MQ0=0;MQRankSum=0.581;NDA=3;QD=12.04;ReadPosRankSum=0.190;SB=-171.66;VQSLOD=5.0944;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:15:45.15:0,45,626	0/0:1,0:28:84.27:0,84,1058	0/0:1,0:15:45.15:0,45,626	0/0:1,0:11:33.11:0,33,469	0/0:1,0:12:36.12:0,36,512	0/0:1,0:7:21.07:0,21,292	0/0:12,0:12:36.06:0,36,424	0/0:7,0:7:1 [...]
-1	878744	rs138897766	G	C	2107.39	PASS	AC=12;AF=0.00508;AN=2364;BaseQRankSum=3.699;DB;DP=30261;Dels=0.00;FS=16.835;HRun=0;HaplotypeScore=0.2378;InbreedingCoeff=-0.0201;MQ=72.93;MQ0=0;MQRankSum=0.368;NDA=3;QD=11.33;ReadPosRankSum=2.206;SB=-927.16;VQSLOD=6.3975;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:14:42.14:0,42,569	0/0:1,0:29:87.26:0,87,1022	0/0:1,0:16:48.16:0,48,640	0/0:1,0:10:30.10:0,30,422	0/0:1,0:15:45.15:0,45,618	0/0:1,0:6:18.06:0,18,236	0/0:10,0:10:30.09:0,30,374 [...]
-1	878745	rs72902602	A	C	541.13	PASS	AC=4;AF=0.00169;AN=2364;BaseQRankSum=-1.730;DB;DP=29217;Dels=0.00;FS=10.700;HRun=0;HaplotypeScore=0.2345;InbreedingCoeff=-0.0177;MQ=73.36;MQ0=0;MQRankSum=0.644;NDA=2;QD=6.85;ReadPosRankSum=0.092;SB=-308.42;VQSLOD=6.3536;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:14:42.14:0,42,577	0/0:1,0:25:75.23:0,75,903	0/0:1,0:14:42.14:0,42,560	0/0:1,0:10:30.10:0,30,418	0/0:1,0:15:45.15:0,45,618	0/0:1,0:5:15.05:0,15,189	0/0:10,0:10:30.06:0,30,350	0/0 [...]
-1	878761	rs35755565	A	AG	448.05	Indel_QD	AC=31;AF=0.01414;AN=2192;BaseQRankSum=3.442;DB;DP=27061;FS=7.246;HRun=7;HaplotypeScore=1.4391;InbreedingCoeff=0.3349;MQ=58.25;MQ0=0;MQRankSum=6.157;NDA=1;QD=1.23;ReadPosRankSum=-1.898;SB=-185.86;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:1:30.08:0,30,337	0/0:1,0:1:60.17:0,60,674	0/0:1,0:1:48.14:0,48,539	0/0:1,0:1:27.08:0,27,303	0/0:1,0:1:39.11:0,39,438	0/0:1,0:1:9.03:0,9,101	0/0:1,0:1:36.10:0,36,404	0/0:3,0:4:11.62:0,12,111	0/0:1,0:1:9.03:0,9,101	0/ [...]
-1	878764	rs180779437	G	C	570.53	PASS	AC=3;AF=0.00127;AN=2362;BaseQRankSum=-1.458;DB;DP=27180;DS;Dels=0.00;FS=0.795;HRun=0;HaplotypeScore=0.3066;InbreedingCoeff=-0.0155;MQ=77.01;MQ0=0;MQRankSum=0.624;NDA=2;QD=11.64;ReadPosRankSum=-0.346;SB=-233.86;VQSLOD=6.0170;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:13:39.13:0,39,528	0/0:1,0:23:69.22:0,69,869	0/0:1,0:15:45.15:0,45,610	0/0:1,0:11:33.11:0,33,447	0/0:1,0:12:36.12:0,36,507	0/0:1,0:5:15.05:0,15,193	0/0:1,0:12:36.11:0,36,423	0/0:4,0:4:12 [...]
-1	878769	.	C	G	669.72	PASS	AC=7;AF=0.00297;AN=2360;BaseQRankSum=-0.891;DP=22087;DS;Dels=0.00;FS=10.150;HRun=7;HaplotypeScore=0.3096;InbreedingCoeff=-0.0231;MQ=78.30;MQ0=0;MQRankSum=0.594;NDA=2;QD=4.59;ReadPosRankSum=-2.948;SB=-264.19;VQSLOD=4.1677;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:11:33.11:0,33,432	0/0:1,0:18:54.17:0,54,666	0/0:1,0:14:42.14:0,42,560	0/0:1,0:10:30.09:0,30,370	0/0:1,0:12:36.12:0,36,501	0/0:1,0:5:15.05:0,15,189	0/0:1,0:9:27.09:0,27,340	0/0:4,0:4:12. [...]
-1	878784	rs142929357	C	G	2333.96	PASS	AC=19;AF=0.00806;AN=2358;BaseQRankSum=7.682;DB;DP=21995;Dels=0.00;FS=26.129;HRun=4;HaplotypeScore=0.2483;InbreedingCoeff=0.0072;MQ=77.12;MQ0=0;MQRankSum=-0.127;NDA=3;QD=11.06;ReadPosRankSum=-5.854;SB=-1081.78;VQSLOD=6.0573;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:8:24.07:0,24,275	0/0:1,0:13:39.11:0,39,447	0/0:1,0:13:39.12:0,39,458	0/0:1,0:7:21.06:0,21,240	0/0:1,0:11:33.11:0,33,424	0/0:1,0:5:15.05:0,15,185	0/0:1,0:8:24.04:0,24,237	0/0:2,0:2:6.01: [...]
-1	878785	rs187587205	G	A	154.05	PASS	AC=5;AF=0.00212;AN=2358;BaseQRankSum=1.056;DB;DP=22546;Dels=0.00;FS=1.420;HRun=0;HaplotypeScore=0.2441;InbreedingCoeff=-0.0016;MQ=76.46;MQ0=0;MQRankSum=1.130;NDA=3;QD=2.80;ReadPosRankSum=-0.329;SB=9.86;VQSLOD=2.3244;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:10:30.10:0,30,386	0/0:1,0:15:45.14:0,45,567	0/0:1,0:15:45.15:0,45,600	0/0:1,0:9:27.09:0,27,340	0/0:1,0:12:36.12:0,36,472	0/0:1,0:6:18.06:0,18,253	0/0:1,0:9:27.08:0,27,309	0/0:2,0:2:6.02:0,6,74	 [...]
-1	878809	rs191952374	C	T	2379.47	PASS	AC=12;AF=0.00509;AN=2358;BaseQRankSum=-7.158;DB;DP=18026;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.0596;InbreedingCoeff=-0.0001;MQ=83.71;MQ0=0;MQRankSum=5.459;NDA=1;QD=13.22;ReadPosRankSum=1.015;SB=-226.93;VQSLOD=8.2616;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:7:21.07:0,21,301	0/0:1,0:15:45.14:0,45,567	0/0:1,0:14:42.13:0,42,529	0/0:1,0:9:27.09:0,27,354	0/0:1,0:9:27.09:0,27,354	0/0:1,0:8:24.08:0,24,341	0/0:1,0:6:18.06:0,18,231	0/0:4,0:4:12.03:0, [...]
-1	879045	.	C	T	310.80	PASS	AC=10;AF=0.00423;AN=2362;BaseQRankSum=1.692;DP=12971;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.3476;InbreedingCoeff=-0.0250;MQ=70.55;MQ0=0;MQRankSum=-0.063;NDA=3;QD=2.66;ReadPosRankSum=0.103;SB=-95.32;VQSLOD=1.6109;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:8:24.08:0,24,320	0/0:1,0:5:15.05:0,15,189	0/0:1,0:7:21.07:0,21,259	0/0:1,0:8:24.08:0,24,302	0/0:11,0:11:33.11:0,33,476	0/0:1,0:7:21.07:0,21,275	0/0:1,0:15:45.14:0,45,529	0/0:8,0:8:24.06:0,24,287	0/0:1,0: [...]
-1	879060	rs186768085	C	T	178.33	PASS	AC=2;AF=0.00085;AN=2362;BaseQRankSum=-2.758;DB;DP=14742;Dels=0.00;FS=16.111;HRun=0;HaplotypeScore=0.3498;InbreedingCoeff=-0.0180;MQ=70.61;MQ0=0;MQRankSum=0.836;NDA=2;QD=3.72;ReadPosRankSum=0.265;SB=-103.55;VQSLOD=2.0271;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:7:21.07:0,21,275	0/0:1,0:4:12.04:0,12,148	0/0:1,0:6:18.06:0,18,253	0/0:1,0:7:21.07:0,21,280	0/0:13,0:13:39.13:0,39,549	0/0:1,0:10:30.10:0,30,412	0/0:1,0:12:36.11:0,36,434	0/0:1 [...]
-1	879090	.	C	A	1219.01	TruthSensitivityTranche99.30to99.50	AC=2;AF=0.00085;AN=2364;BaseQRankSum=-27.199;DP=18527;Dels=0.02;FS=56.628;HRun=1;HaplotypeScore=0.8406;InbreedingCoeff=0.1134;MQ=61.65;MQ0=0;MQRankSum=11.240;NDA=3;QD=1.39;ReadPosRankSum=1.781;SB=-327.63;VQSLOD=-4.1026;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:3:9.03:0,9,131	0/0:11,0:11:30.08:0,30,368	0/0:1,0:11:33.11:0,33,416	0/0:1,0:7:21.07:0,21,292	0/0:1,0:14:42.14:0,42,560	0/0:1,0:12:36.12:0,36,472	0/0:1,0:6:18.06:0 [...]
-1	879095	.	G	A	231.79	TruthSensitivityTranche98.50to98.80	AC=3;AF=0.00127;AN=2364;BaseQRankSum=-9.250;DP=19365;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.8663;InbreedingCoeff=-0.0143;MQ=60.09;MQ0=0;MQRankSum=1.310;NDA=3;QD=2.90;ReadPosRankSum=-0.443;SB=-73.14;VQSLOD=0.1700;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:4:12.04:0,12,172	0/0:13,0:13:36.11:0,36,451	0/0:1,0:11:33.11:0,33,454	0/0:1,0:8:24.08:0,24,320	0/0:1,0:14:42.14:0,42,591	0/0:1,0:15:45.15:0,45,600	0/0:1,0:6:18.06:0,1 [...]
-1	879108	.	A	C	2045.21	TruthSensitivityTranche99.50to99.90	AC=174;AF=0.07360;AN=2364;BaseQRankSum=-22.465;DP=20020;Dels=0.00;FS=3200.000;HRun=3;HaplotypeScore=0.6535;InbreedingCoeff=-0.0715;MQ=59.51;MQ0=2;MQRankSum=2.710;NDA=2;QD=0.79;ReadPosRankSum=-21.990;SB=-568.80;VQSLOD=-65.2733;culprit=FS;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:7:21.07:0,21,285	0/0:1,0:9:27.08:0,27,309	0/0:1,0:12:36.11:0,36,454	0/0:1,0:7:21.07:0,21,285	0/0:1,0:15:45.14:0,45,567	0/0:1,0:13:39.12:0,39,481	0/1:5,2:7: [...]
-1	879115	.	C	G	98.78	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=0.335;DP=28840;DS;Dels=0.00;FS=1.686;HRun=0;HaplotypeScore=0.4535;InbreedingCoeff=-0.0059;MQ=59.65;MQ0=2;MQRankSum=-1.112;NDA=2;QD=5.81;ReadPosRankSum=1.173;SB=-52.08;VQSLOD=4.2445;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:11:33.11:0,33,459	0/0:1,0:20:60.19:0,60,740	0/0:15,0:15:45.15:0,45,613	0/0:1,0:7:21.07:0,21,289	0/0:1,0:14:42.14:0,42,577	0/0:1,0:17:51.17:0,51,701	0/0:9,0:9:27.08:0,27,336	0/0:1,0:10:30.10:0,30,386	0/0 [...]
-1	879135	rs149790558	C	T	710.99	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=1.067;DB;DP=33389;Dels=0.00;FS=4.041;HRun=1;HaplotypeScore=0.2819;InbreedingCoeff=-0.0065;MQ=65.56;MQ0=0;MQRankSum=-0.395;NDA=2;QD=9.61;ReadPosRankSum=0.089;SB=-349.93;VQSLOD=6.0187;culprit=MQ;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:17:51.17:0,51,731	0/0:1,0:24:72.23:0,72,907	0/0:1,0:16:48.16:0,48,650	0/0:1,0:10:30.10:0,30,393	0/0:1,0:15:45.15:0,45,618	0/0:1,0:20:60.20:0,60,835	0/0:1,0:15:45.15:0,45,590	0/0:15,0:15:42.1 [...]
-1	879142	rs148506094	C	G	986.92	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=5.008;DB;DP=34146;Dels=0.00;FS=52.989;HRun=0;HaplotypeScore=0.2258;InbreedingCoeff=0.0374;MQ=69.31;MQ0=0;MQRankSum=-1.263;NDA=1;QD=13.71;ReadPosRankSum=1.568;SB=-27.67;VQSLOD=4.0467;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:17:51.17:0,51,718	0/0:1,0:22:66.21:0,66,849	0/0:1,0:18:54.18:0,54,708	0/0:1,0:11:33.11:0,33,459	0/0:1,0:18:54.18:0,54,708	0/0:1,0:19:57.19:0,57,783	0/0:1,0:17:51.16:0,51,656	0/0:16,0:16:48.1 [...]
-1	879145	rs146548754	A	C	921.44	PASS	AC=2;AF=0.00085;AN=2364;BaseQRankSum=4.040;DB;DP=35077;Dels=0.00;FS=79.622;HRun=1;HaplotypeScore=0.2058;InbreedingCoeff=0.0239;MQ=71.45;MQ0=0;MQRankSum=-0.552;NDA=2;QD=12.80;ReadPosRankSum=1.074;SB=4.65;VQSLOD=3.8967;culprit=FS;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:20:60.20:0,60,835	0/0:1,0:27:81.25:0,81,998	0/0:1,0:19:57.19:0,57,793	0/0:1,0:12:36.12:0,36,501	0/0:1,0:17:51.17:0,51,691	0/0:1,0:22:66.22:0,66,907	0/0:1,0:19:57.17:0,57,653	0/0:1,0:16:48.14:0 [...]
-1	879203	.	A	C	100.14	PASS	AC=1;AF=0.00042;AN=2364;BaseQRankSum=-1.334;DP=34081;Dels=0.00;FS=11.356;HRun=0;HaplotypeScore=0.2129;InbreedingCoeff=-0.0083;MQ=77.56;MQ0=0;MQRankSum=-0.721;NDA=1;QD=6.26;ReadPosRankSum=0.498;SB=-58.31;VQSLOD=6.5553;culprit=QD;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:13:39.13:0,39,511	0/0:1,0:34:99:0,102,1199	0/0:1,0:29:87.28:0,87,1119	0/0:1,0:14:42.14:0,42,585	0/0:1,0:24:72.24:0,72,990	0/0:1,0:26:78.25:0,78,983	0/0:1,0:17:51.15:0,51,599	0/0:1,0:9:27.09:0,27,340	0/0 [...]
-1	879257	.	C	T	66.87	TruthSensitivityTranche98.50to98.80	AC=4;AF=0.00169;AN=2364;BaseQRankSum=-0.888;DP=41699;Dels=0.00;FS=1.728;HRun=0;HaplotypeScore=0.2694;InbreedingCoeff=0.0216;MQ=68.26;MQ0=0;MQRankSum=3.451;NDA=3;QD=1.39;ReadPosRankSum=0.465;SB=-95.37;VQSLOD=0.1895;culprit=QD;set=FilteredInAll	GT:AD:DP:GQ:PL	0/0:1,0:34:99:0,102,1312	0/0:1,0:36:99:0,108,1204	0/0:1,0:40:99:0,120,1479	0/0:1,0:23:69.22:0,69,887	0/0:1,0:29:87.28:0,87,1140	0/0:1,0:31:93.30:0,93,1172	0/0:1,0:5:15.05:0,15,1 [...]
-1	879276	rs115454328	A	G	5560.08	PASS	AC=15;AF=0.00635;AN=2364;BaseQRankSum=5.676;DB;DP=43812;DS;Dels=0.00;FS=9.312;HRun=0;HaplotypeScore=0.1675;InbreedingCoeff=-0.0144;MQ=62.93;MQ0=0;MQRankSum=3.476;NDA=1;QD=11.91;ReadPosRankSum=-1.874;SB=-2673.29;VQSLOD=6.6274;culprit=InbreedingCoeff;set=variant	GT:AD:DP:GQ:PL	0/0:1,0:36:99:0,108,1463	0/0:1,0:41:99:0,123,1445	0/0:1,0:37:99:0,111,1480	0/0:1,0:25:75.25:0,75,1044	0/0:1,0:35:99:0,105,1462	0/0:1,0:29:87.28:0,87,1119	0/0:7,0:7:21.06:0,21,241 [...]
-1	879317	rs7523549	C	T	82570.47	PASS	AC=186;AF=0.07868;AN=2364;BaseQRankSum=2.488;DB;DP=36267;DS;Dels=0.00;FS=14.862;HM3;HRun=0;HaplotypeScore=0.3150;InbreedingCoeff=0.1203;MQ=61.86;MQ0=0;MQRankSum=7.931;NDA=2;QD=17.21;ReadPosRankSum=3.682;SB=-25054.87;VQSLOD=6.5687;culprit=MQRankSum;set=variant	GT:AD:DP:GQ:PL	0/1:19,17:36:99:558,0,622	0/0:1,0:30:90.27:0,90,1058	0/0:1,0:35:99:0,105,1350	0/0:1,0:26:78.25:0,78,983	0/0:1,0:23:69.22:0,69,887	0/0:1,0:28:84.27:0,84,1080	0/0:1,0:12:36.11:0,36,4 [...]
diff --git a/src/test/resources/htsjdk/variant/VCF4HeaderTest.vcf b/src/test/resources/htsjdk/variant/VCF4HeaderTest.vcf
deleted file mode 100644
index 9af0cb3..0000000
--- a/src/test/resources/htsjdk/variant/VCF4HeaderTest.vcf
+++ /dev/null
@@ -1,42 +0,0 @@
-##fileformat=VCFv4.0
-##FILTER=<ID=ABFilter,Description="AB  0.75 && DP  40">
-##FILTER=<ID=DPFilter,Description="DP  120 || SB  -0.10">
-##FILTER=<ID=FDRtranche0.00to0.10,Description="FDR tranche level at qual 0.06">
-##FILTER=<ID=FDRtranche0.10to1.00,Description="FDR tranche level at qual 0.03">
-##FILTER=<ID=FDRtranche1.00to2.00,Description="FDR tranche level at qual 0.02">
-##FILTER=<ID=FDRtranche2.00to10.00+,Description="FDR tranche level at qual > 0.06">
-##FILTER=<ID=FDRtranche2.00to10.00,Description="FDR tranche level at qual unknown">
-##FILTER=<ID=HARD_TO_VALIDATE,Description="MQ0 = 4 && ((MQ0 / (1.0 * DP))  0.1)">
-##FILTER=<ID=Indel,Description="Overlaps a user-input mask">
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=LowQual,Description="QUAL  50.0">
-##FILTER=<ID=ANNOTATION,Description="ANNOTATION != \"NA\" || ANNOTATION <= 0.01">
-##FILTER=<ID=ANNOTATION2,Description="ANNOTATION with quote \" that is unmatched but escaped">
-##FILTER=<ID=SnpCluster,Description="SNPs found in clusters">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth (only filtered reads used for calling)">
-##FORMAT=<ID=GL,Number=3,Type=Float,Description="Log-scaled likelihoods for AA,AB,BB genotypes where A=ref and B=alt; not applicable if site is not biallelic">
-##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##INFO=<ID=AC,Number=.,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with two (and only two) segregating haplotypes">
-##INFO=<ID=EscapingQuote,Number=1,Type=Float,Description="This description has an escaped \" quote in it">
-##INFO=<ID=EscapingBackslash,Number=1,Type=Float,Description="This description has an escaped \\ backslash in it">
-##INFO=<ID=EscapingNonQuoteOrBackslash,Number=1,Type=Float,Description="This other value has a \n newline in it">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=OQ,Number=1,Type=Float,Description="The original variant quality score">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-23/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-24/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-5/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessi [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf, mask,Bed,wgs.v9/HiSeq.WGS.cleaned.indels.10.mask] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.in [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf err=null outerr=null filterZeroMappingQualityReads=false dow [...]
-##source=VariantOptimizer
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	
-chr1	109	.	A	T	0	FDRtranche2.00to10.00+	AC=1;AF=0.50;AN=2;DP=1019;Dels=0.00;HRun=0;HaplotypeScore=686.65;MQ=19.20;MQ0=288;OQ=2175.54;QD=2.13;SB=-1042.18	GT:AD:DP:GL:GQ	0/1:610,327:308:-316.30,-95.47,-803.03:99
diff --git a/src/test/resources/htsjdk/variant/VQSR.mixedTest.recal b/src/test/resources/htsjdk/variant/VQSR.mixedTest.recal
deleted file mode 100644
index 37b8274..0000000
--- a/src/test/resources/htsjdk/variant/VQSR.mixedTest.recal
+++ /dev/null
@@ -1,32 +0,0 @@
-##fileformat=VCFv4.1
-##INFO=<ID=END,Number=1,Type=Integer,Description="x">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	
-20	1000177	.	N	<VQSR>	.	.	END=1000177;VQSLOD=-1.2345;culprit=FS
-20	1000177	.	N	<VQSR>	.	.	END=1000178;VQSLOD=-1.2377;culprit=HaplotypeScore
-20	1000382	.	N	<VQSR>	.	.	END=1000386;VQSLOD=-0.5534;culprit=HaplotypeScore
-20	1000382	.	N	<VQSR>	.	.	END=1000382;VQSLOD=-0.5678;culprit=FS
-20	1000442	.	N	<VQSR>	.	.	END=1000446;VQSLOD=3.5923;culprit=QD
diff --git a/src/test/resources/htsjdk/variant/breakpoint.vcf b/src/test/resources/htsjdk/variant/breakpoint.vcf
deleted file mode 100644
index ced1e3e..0000000
--- a/src/test/resources/htsjdk/variant/breakpoint.vcf
+++ /dev/null
@@ -1,6 +0,0 @@
-##fileformat=VCFv4.1
-##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
-##contig=<ID=chr12,length=133851895>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO
-chr12	203475	.	T	t[chr12:203540[	36	.	SVTYPE=BND
-chr12	203475	.	T	T[chr12:203540[	36	.	SVTYPE=BND
diff --git a/src/test/resources/htsjdk/variant/dbsnp_135.b37.1000.vcf b/src/test/resources/htsjdk/variant/dbsnp_135.b37.1000.vcf
deleted file mode 100644
index 948e8a3..0000000
--- a/src/test/resources/htsjdk/variant/dbsnp_135.b37.1000.vcf
+++ /dev/null
@@ -1,249 +0,0 @@
-##fileformat=VCFv4.1
-##FILTER=<ID=NC,Description="Inconsistent Genotype Submission For At Least One Sample">
-##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=ASP,Number=0,Type=Flag,Description="Is Assembly specific. This is set if the variant only maps to one assembly">
-##INFO=<ID=ASS,Number=0,Type=Flag,Description="In acceptor splice site FxnCode = 73">
-##INFO=<ID=CDA,Number=0,Type=Flag,Description="Variation is interrogated in a clinical diagnostic assay">
-##INFO=<ID=CFL,Number=0,Type=Flag,Description="Has Assembly conflict. This is for weight 1 and 2 variant that maps to different chromosomes on different assemblies.">
-##INFO=<ID=CLN,Number=0,Type=Flag,Description="Variant is Clinical(LSDB,OMIM,TPA,Diagnostic)">
-##INFO=<ID=DSS,Number=0,Type=Flag,Description="In donor splice-site FxnCode = 75">
-##INFO=<ID=G5,Number=0,Type=Flag,Description=">5% minor allele frequency in 1+ populations">
-##INFO=<ID=G5A,Number=0,Type=Flag,Description=">5% minor allele frequency in each and all populations">
-##INFO=<ID=GCF,Number=0,Type=Flag,Description="Has Genotype Conflict Same (rs, ind), different genotype.  N/N is not included.">
-##INFO=<ID=GENEINFO,Number=1,Type=String,Description="Pairs each of gene symbol:gene id.  The gene symbol and id are delimited by a colon (:) and each pair is delimited by a vertical bar (|)">
-##INFO=<ID=GMAF,Number=1,Type=Float,Description="Global Minor Allele Frequency [0, 0.5]; global population is 1000GenomesProject phase 1 genotype data from 629 individuals, released in the 08-04-2010 dataset">
-##INFO=<ID=GNO,Number=0,Type=Flag,Description="Genotypes available. The variant has individual genotype (in SubInd table).">
-##INFO=<ID=HD,Number=0,Type=Flag,Description="Marker is on high density genotyping kit (50K density or greater).  The variant may have phenotype associations present in dbGaP.">
-##INFO=<ID=INT,Number=0,Type=Flag,Description="In Intron FxnCode = 6">
-##INFO=<ID=KGPROD,Number=0,Type=Flag,Description="1000 Genome production phase">
-##INFO=<ID=KGPilot1,Number=0,Type=Flag,Description="1000 Genome discovery(pilot1) 2009">
-##INFO=<ID=KGPilot123,Number=0,Type=Flag,Description="1000 Genome discovery all pilots 2010(1,2,3)">
-##INFO=<ID=KGVAL,Number=0,Type=Flag,Description="1000 Genome validated by second method">
-##INFO=<ID=LSD,Number=0,Type=Flag,Description="Submitted from a locus-specific database">
-##INFO=<ID=MTP,Number=0,Type=Flag,Description="Microattribution/third-party annotation(TPA:GWAS,PAGE)">
-##INFO=<ID=MUT,Number=0,Type=Flag,Description="Is mutation (journal citation, explicit fact): a low frequency variation that is cited in journal and other reputable sources">
-##INFO=<ID=NOC,Number=0,Type=Flag,Description="Contig allele not present in variant allele list. The reference sequence allele at the mapped position is not present in the variant allele list, adjusted for orientation.">
-##INFO=<ID=NOV,Number=0,Type=Flag,Description="Rs cluster has non-overlapping allele sets. True when rs set has more than 2 alleles from different submissions and these sets share no alleles in common.">
-##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
-##INFO=<ID=NSF,Number=0,Type=Flag,Description="Has non-synonymous frameshift A coding region variation where one allele in the set changes all downstream amino acids. FxnClass = 44">
-##INFO=<ID=NSM,Number=0,Type=Flag,Description="Has non-synonymous missense A coding region variation where one allele in the set changes protein peptide. FxnClass = 42">
-##INFO=<ID=NSN,Number=0,Type=Flag,Description="Has non-synonymous nonsense A coding region variation where one allele in the set changes to STOP codon (TER). FxnClass = 41">
-##INFO=<ID=OM,Number=0,Type=Flag,Description="Has OMIM/OMIA">
-##INFO=<ID=OTH,Number=0,Type=Flag,Description="Has other variant with exactly the same set of mapped positions on NCBI refernce assembly.">
-##INFO=<ID=PH1,Number=0,Type=Flag,Description="Phase 1 genotyped: filtered, non-redundant">
-##INFO=<ID=PH2,Number=0,Type=Flag,Description="Phase 2 genotyped: filtered, non-redundant">
-##INFO=<ID=PH3,Number=0,Type=Flag,Description="Phase 3 genotyped: filtered, non-redundant">
-##INFO=<ID=PM,Number=0,Type=Flag,Description="Variant is Precious(Clinical,Pubmed Cited)">
-##INFO=<ID=PMC,Number=0,Type=Flag,Description="Links exist to PubMed Central article">
-##INFO=<ID=R3,Number=0,Type=Flag,Description="In 3' gene region FxnCode = 13">
-##INFO=<ID=R5,Number=0,Type=Flag,Description="In 5' gene region FxnCode = 15">
-##INFO=<ID=REF,Number=0,Type=Flag,Description="Has reference A coding region variation where one allele in the set is identical to the reference sequence. FxnCode = 8">
-##INFO=<ID=RSPOS,Number=1,Type=Integer,Description="Chr position reported in dbSNP">
-##INFO=<ID=RV,Number=0,Type=Flag,Description="RS orientation is reversed">
-##INFO=<ID=S3D,Number=0,Type=Flag,Description="Has 3D structure - SNP3D table">
-##INFO=<ID=SAO,Number=1,Type=Integer,Description="Variant Allele Origin: 0 - unspecified, 1 - Germline, 2 - Somatic, 3 - Both">
-##INFO=<ID=SCS,Number=1,Type=Integer,Description="Variant Clinical Significance, 0 - unknown, 1 - untested, 2 - non-pathogenic, 3 - probable-non-pathogenic, 4 - probable-pathogenic, 5 - pathogenic, 6 - drug-response, 7 - histocompatibility, 255 - other">
-##INFO=<ID=SLO,Number=0,Type=Flag,Description="Has SubmitterLinkOut - From SNP->SubSNP->Batch.link_out">
-##INFO=<ID=SSR,Number=1,Type=Integer,Description="Variant Suspect Reason Code, 0 - unspecified, 1 - Paralog, 2 - byEST, 3 - Para_EST, 4 - oldAlign, 5 - other">
-##INFO=<ID=SYN,Number=0,Type=Flag,Description="Has synonymous A coding region variation where one allele in the set does not change the encoded amino acid. FxnCode = 3">
-##INFO=<ID=TPA,Number=0,Type=Flag,Description="Provisional Third Party Annotation(TPA) (currently rs from PHARMGKB who will give phenotype data)">
-##INFO=<ID=U3,Number=0,Type=Flag,Description="In 3' UTR Location is in an untranslated region (UTR). FxnCode = 53">
-##INFO=<ID=U5,Number=0,Type=Flag,Description="In 5' UTR Location is in an untranslated region (UTR). FxnCode = 55">
-##INFO=<ID=VC,Number=1,Type=String,Description="Variation Class">
-##INFO=<ID=VLD,Number=0,Type=Flag,Description="Is Validated.  This bit is set if the variant has 2+ minor allele count based on frequency or genotype data.">
-##INFO=<ID=VP,Number=1,Type=String,Description="Variation Property">
-##INFO=<ID=WGT,Number=1,Type=Integer,Description="Weight, 00 - unmapped, 1 - weight 1, 2 - weight 2, 3 - weight 3 or more">
-##INFO=<ID=WTD,Number=0,Type=Flag,Description="Is Withdrawn by submitter If one member ss is withdrawn by submitter, then this bit is set.  If all member ss' are withdrawn, then the rs is deleted to SNPHistory">
-##INFO=<ID=dbSNPBuildID,Number=1,Type=Integer,Description="First dbSNP Build for RS">
-##LeftAlignVariants="analysis_type=LeftAlignVariants input_file=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities= [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##dbSNP_BUILD_ID=135
-##fileDate=20111104
-##phasing=partial
-##reference=GRCh37.3
-##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
-##source=dbSNP
-##variationPropertyDocumentationUrl=ftp://ftp.ncbi.nlm.nih.gov/snp/specs/dbSNP_BitField_latest.pdf	
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	
-1	10144	rs144773400	TA	T	.	PASS	ASP;RSPOS=10145;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10228	rs143255646	TA	T	.	PASS	ASP;RSPOS=10229;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10234	rs145599635	C	T	.	PASS	ASP;RSPOS=10234;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	10248	rs148908337	A	T	.	PASS	ASP;RSPOS=10248;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	10254	rs140194106	TA	T	.	PASS	ASP;RSPOS=10255;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10291	rs145427775	C	T	.	PASS	ASP;RSPOS=10291;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	10327	rs112750067	T	C	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10327;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=132
-1	10329	rs150969722	AC	A	.	PASS	ASP;RSPOS=10330;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10351	rs145072688	CTA	C,CA	.	PASS	ASP;RSPOS=10352;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10382	rs147093981	AAC	A,AC	.	PASS	ASP;RSPOS=10383;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10433	rs56289060	A	AC	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10433;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=129
-1	10439	rs112766696	AC	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;GNO;RSPOS=10440;SAO=0;SLO;SSR=0;VC=DIV;VP=050100000004000100000200;WGT=0;dbSNPBuildID=132
-1	10439	rs138941843	AC	A	.	PASS	ASP;RSPOS=10440;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1	10440	rs112155239	C	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10440;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=132
-1	10492	rs55998931	C	T	.	PASS	ASP;GENEINFO=LOC100652771:100652771;GMAF=0.0617001828153565;RSPOS=10492;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040000000100;WGT=0;dbSNPBuildID=129
-1	10519	rs62636508	G	C	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10519;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=129
-1	10583	rs58108140	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;GMAF=0.270566727605119;KGPilot123;RSPOS=10583;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040010000100;WGT=0;dbSNPBuildID=129
-1	10611	rs189107123	C	G	.	PASS	KGPilot123;RSPOS=10611;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	10828	rs10218492	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10828;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=119
-1	10904	rs10218493	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;GNO;RSPOS=10904;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=119
-1	10927	rs10218527	A	G	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10927;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=119
-1	10938	rs28853987	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=10938;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1	11014	rs28484712	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=11014;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1	11022	rs28775022	G	A	.	PASS	ASP;GENEINFO=LOC100652771:100652771;RSPOS=11022;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1	11081	rs10218495	G	T	.	PASS	CFL;GENEINFO=LOC100652771:100652771;GNO;RSPOS=11081;SAO=0;SSR=0;VC=SNV;VP=050000000008000100000100;WGT=0;dbSNPBuildID=119
-1	11863	rs187669455	C	A	.	PASS	RSPOS=11863;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=135
-1	13302	rs180734498	C	T	.	PASS	KGPilot123;RSPOS=13302;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	13327	rs144762171	G	C	.	PASS	ASP;KGPilot123;RSPOS=13327;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	13684	rs71260404	C	T	.	PASS	GENEINFO=LOC100652771:100652771;GNO;RSPOS=13684;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1	13980	rs151276478	T	C	.	PASS	ASP;KGPilot123;RSPOS=13980;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	14889	rs142444908	G	A	.	PASS	ASP;RSPOS=14889;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	14907	rs79585140	A	G	.	PASS	GNO;RSPOS=14907;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1	14930	rs75454623	A	G	.	PASS	GNO;RSPOS=14930;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1	14976	rs71252251	G	A	.	PASS	ASP;GNO;RSPOS=14976;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000004000100000100;WGT=0;dbSNPBuildID=130
-1	15061	rs71268703	T	TG	.	PASS	ASP;GNO;RSPOS=15061;RV;SAO=0;SLO;SSR=0;VC=DIV;VP=050100000004000100000200;WGT=0;dbSNPBuildID=130
-1	15118	rs71252250	A	G	.	PASS	ASP;GNO;RSPOS=15118;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000004000100000100;WGT=0;dbSNPBuildID=130
-1	15211	rs144718396	T	G	.	PASS	ASP;RSPOS=15211;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	15211	rs78601809	T	G	.	PASS	ASP;GNO;RSPOS=15211;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1	16257	rs78588380	G	C	.	PASS	ASP;GNO;RSPOS=16257;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=131
-1	16378	rs148220436	T	C	.	PASS	ASP;RSPOS=16378;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	16495	rs141130360	G	C	.	PASS	ASP;RSPOS=16495;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	16497	rs150723783	A	G	.	PASS	ASP;RSPOS=16497;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	17519	rs192890528	G	T	.	PASS	RSPOS=17519;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=135
-1	19226	rs138930629	T	A	.	PASS	ASP;RSPOS=19226;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	20141	rs56336884	G	A	.	PASS	HD;RSPOS=20141;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000400000100;WGT=0;dbSNPBuildID=129
-1	20144	rs143346096	G	A	.	PASS	ASP;RSPOS=20144;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	20206	rs71262675	C	T	.	PASS	GNO;RSPOS=20206;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1	20245	rs71262674	G	A	.	PASS	GMAF=0.256398537477148;GNO;RSPOS=20245;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1	20304	rs71262673	G	C	.	PASS	GMAF=0.338208409506399;GNO;RSPOS=20304;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1	26999	rs147506580	A	G	.	PASS	ASP;RSPOS=26999;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	29436	rs2462493	G	A	.	PASS	GNO;RSPOS=29436;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=100
-1	30923	rs140337953	G	T	.	PASS	ASP;KGPilot123;RSPOS=30923;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	33487	rs77459554	C	T	.	PASS	ASP;GNO;RSPOS=33487;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=131
-1	33495	rs75468675	C	T	.	PASS	ASP;GNO;RSPOS=33495;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1	33505	rs75627161	T	C	.	PASS	ASP;GNO;RSPOS=33505;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1	33508	rs75609629	A	T	.	PASS	ASP;GNO;RSPOS=33508;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1	33521	rs76098219	T	A	.	PASS	GNO;RSPOS=33521;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1	33593	rs557585	G	A	.	PASS	RSPOS=33593;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=83
-1	33648	rs62028204	G	T	.	PASS	RSPOS=33648;RV;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=129
-1	33656	rs113821789	T	C	.	PASS	RSPOS=33656;RV;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=132
-1	51476	rs187298206	T	C	.	PASS	KGPilot123;RSPOS=51476;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	51479	rs116400033	T	A	.	PASS	ASP;G5;G5A;GMAF=0.113802559414991;KGPilot123;RSPOS=51479;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004070010000100;WGT=0;dbSNPBuildID=132
-1	51803	rs62637812	T	C	.	PASS	GMAF=0.468921389396709;RSPOS=51803;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040000000100;WGT=0;dbSNPBuildID=129
-1	51898	rs76402894	C	A	.	PASS	GMAF=0.0731261425959781;GNO;RSPOS=51898;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=131
-1	51914	rs190452223	T	G	.	PASS	KGPilot123;RSPOS=51914;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	51928	rs78732933	G	A	.	PASS	GNO;RSPOS=51928;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=131
-1	51935	rs181754315	C	T	.	PASS	KGPilot123;RSPOS=51935;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	51954	rs185832753	G	C	.	PASS	KGPilot123;RSPOS=51954;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	52058	rs62637813	G	C	.	PASS	GMAF=0.0342778793418647;KGPilot123;RSPOS=52058;SAO=0;SSR=1;VC=SNV;VLD;VP=050000000000040010000140;WGT=0;dbSNPBuildID=129
-1	52144	rs190291950	T	A	.	PASS	KGPilot123;RSPOS=52144;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	52238	rs150021059	T	G	.	PASS	ASP;KGPilot123;RSPOS=52238;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	54353	rs140052487	C	A	.	PASS	ASP;KGPilot123;RSPOS=54353;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	54421	rs146477069	A	G	.	PASS	ASP;KGPilot123;RSPOS=54421;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	54490	rs141149254	G	A	.	PASS	ASP;KGPilot123;RSPOS=54490;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	54676	rs2462492	C	T	.	PASS	ASP;GMAF=0.191956124314442;GNO;HD;KGPilot123;RSPOS=54676;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040510000100;WGT=0;dbSNPBuildID=100
-1	54753	rs143174675	T	G	.	PASS	ASP;KGPilot123;RSPOS=54753;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	54788	rs59861892	CC	C,CCT	.	PASS	ASP;RSPOS=54789;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=129
-1	54795	rs58014817	T	A	.	PASS	ASP;RSPOS=54795;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=129
-1	55164	rs3091274	C	A	.	PASS	G5;G5A;GMAF=0.145338208409506;GNO;KGPilot123;RSPOS=55164;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000030110000100;WGT=0;dbSNPBuildID=103
-1	55299	rs10399749	C	T	.	PASS	G5;G5A;GMAF=0.278793418647166;GNO;KGPilot123;PH2;RSPOS=55299;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000030112000100;WGT=0;dbSNPBuildID=119
-1	55302	rs3091273	C	T	.	PASS	RSPOS=55302;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=103
-1	55313	rs182462964	A	T	.	PASS	KGPilot123;RSPOS=55313;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55322	rs3107974	C	T	.	PASS	RSPOS=55322;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=103
-1	55326	rs3107975	T	C	.	PASS	GNO;HD;KGPilot123;RSPOS=55326;SAO=0;SSR=0;VC=SNV;VP=050000000000000510000100;WGT=0;dbSNPBuildID=103
-1	55330	rs185215913	G	A	.	PASS	KGPilot123;RSPOS=55330;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55367	rs190850374	G	A	.	PASS	KGPilot123;RSPOS=55367;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55388	rs182711216	C	T	.	PASS	KGPilot123;RSPOS=55388;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55394	rs2949420	T	A	.	PASS	GNO;KGPilot123;PH2;RSPOS=55394;SAO=0;SSR=0;VC=SNV;VP=050000000000000112000100;WGT=0;dbSNPBuildID=101
-1	55416	rs193242050	G	A	.	PASS	KGPilot123;RSPOS=55416;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55427	rs183189405	T	C	.	PASS	KGPilot123;RSPOS=55427;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55545	rs28396308	C	T	.	PASS	GNO;RSPOS=55545;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=125
-1	55816	rs187434873	G	A	.	PASS	KGPilot123;RSPOS=55816;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55850	rs191890754	C	G	.	PASS	KGPilot123;RSPOS=55850;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	55852	rs184233019	G	C	.	PASS	KGPilot123;RSPOS=55852;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	56644	rs143342222	A	C	.	PASS	ASP;KGPilot123;RSPOS=56644;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1	57952	rs189727433	A	C	.	PASS	KGPilot123;RSPOS=57952;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1	58771	rs140128481	T	C	.	PASS	ASP;RSPOS=58771;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1	58814	rs114420996	G	A	.	PASS	ASP;G5;GMAF=0.0982632541133455;KGPilot123;RSPOS=58814;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004050010000100;WGT=0;dbSNPBuildID=132
-1	59040	rs149755937	T	C	.	PASS	ASP;KGPilot123;RSPOS=59040;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
diff --git a/src/test/resources/htsjdk/variant/diagnosis_targets_testfile.vcf b/src/test/resources/htsjdk/variant/diagnosis_targets_testfile.vcf
deleted file mode 100644
index fbe8d1e..0000000
--- a/src/test/resources/htsjdk/variant/diagnosis_targets_testfile.vcf
+++ /dev/null
@@ -1,117 +0,0 @@
-##fileformat=VCFv4.1
-##DiagnoseTargets="analysis_type=DiagnoseTargets input_file=[/humgen/gsa-hpprojects/GATK/data/Validation_Data/CEUTrio.HiSeq.b37.chr20.10_11mb.bam] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/humgen/gsa-hpprojects/GATK/data/Validation_Data/DT-itest.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/1kg [...]
-##FILTER=<ID=BAD_MATE,Description="the reads are not properly mated, suggesting mapping errors">
-##FILTER=<ID=COVERAGE_GAPS,Description="absolutely no coverage was observed at a locus, regardless of the filtering parameters">
-##FILTER=<ID=EXCESSIVE_COVERAGE,Description="more than -maxDepth read at the locus, indicating some sort of mapping problem">
-##FILTER=<ID=LOW_COVERAGE,Description="there were less than min. depth bases at the locus, after applying filters">
-##FILTER=<ID=LOW_MEDIAN_DEPTH,Description="interval has insufficient median depth across samples">
-##FILTER=<ID=NO_READS,Description="there are no reads contained in the interval">
-##FILTER=<ID=PASS,Description="the base satisfied the min. depth for calling but had less than maxDepth to avoid having EXCESSIVE_COVERAGE">
-##FILTER=<ID=POOR_QUALITY,Description="more than --maxFractionOfReadsWithLowMAPQ at the locus, indicating a poor mapping quality of the reads">
-##FILTER=<ID=REF_N,Description="the reference base was an N, which is not considered callable the GATK">
-##FORMAT=<ID=AVG_INTERVAL_DP,Number=1,Type=Float,Description="Average depth across the interval. Sum of the depth in a loci divided by interval size.">
-##FORMAT=<ID=FT,Number=1,Type=String,Description="Genotype-level filter">
-##FORMAT=<ID=MED,Number=1,Type=Float,Description="Median of depth distribution.">
-##FORMAT=<ID=Q1,Number=1,Type=Float,Description="Lower Quartile of depth distribution.">
-##FORMAT=<ID=Q3,Number=1,Type=Float,Description="Upper Quartile of depth Distribution.">
-##INFO=<ID="Diagnose Targets",Number=0,Type=Flag,Description="DiagnoseTargets mode">
-##INFO=<ID=AVG_INTERVAL_DP,Number=1,Type=Float,Description="Average depth across the interval. Sum of the depth in a loci divided by interval size.">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	NA12891	NA12892
-20	10000023	.	T	<DT>	.	PASS	AVG_INTERVAL_DP=206.11;END=10001189	AVG_INTERVAL_DP:MED:Q1:Q3	68.95:69.00:57.50:80.00	67.11:69.00:54.00:80.00	70.05:74.00:58.00:81.00
-20	10002751	.	T	<DT>	.	PASS	AVG_INTERVAL_DP=198.60;END=10021423	AVG_INTERVAL_DP:MED:Q1:Q3	69.75:74.00:61.00:81.00	64.78:69.00:56.00:78.00	64.07:66.00:56.00:77.00
-20	10094508	.	A	<DT>	.	PASS	AVG_INTERVAL_DP=217.07;END=10096841	AVG_INTERVAL_DP:MED:Q1:Q3	76.65:75.00:69.00:83.00	71.52:73.00:65.00:80.00	68.90:69.00:63.00:75.00
-20	10098364	.	G	<DT>	.	LOW_COVERAGE;LOW_MEDIAN_DEPTH	AVG_INTERVAL_DP=5.49;END=10098654	AVG_INTERVAL_DP:FT:MED:Q1:Q3	0.766:LOW_COVERAGE:1.00:1.00:1.00	0.880:COVERAGE_GAPS;LOW_COVERAGE:1.00:0.00:1.00	3.85:LOW_COVERAGE:2.00:2.00:6.00
-20	10153007	.	G	<DT>	.	PASS	AVG_INTERVAL_DP=61.42;END=10153151	AVG_INTERVAL_DP:MED:Q1:Q3	25.07:24.00:19.00:29.00	16.37:15.00:11.00:25.00	19.99:17.00:14.00:27.00
-20	10199324	.	T	<DT>	.	LOW_COVERAGE;LOW_MEDIAN_DEPTH	AVG_INTERVAL_DP=28.87;END=10199468	AVG_INTERVAL_DP:FT:MED:Q1:Q3	5.12:LOW_COVERAGE:3.00:1.00:7.00	9.19:LOW_COVERAGE:9.00:4.00:13.00	14.56:PASS:14.00:10.00:19.00
-20	10267798	.	T	<DT>	.	PASS	AVG_INTERVAL_DP=79.25;END=10268380	AVG_INTERVAL_DP:MED:Q1:Q3	32.66:29.00:20.00:50.00	22.02:19.00:11.00:37.00	24.57:21.00:10.00:39.00
-20	10375592	.	G	<DT>	.	LOW_MEDIAN_DEPTH	AVG_INTERVAL_DP=18.73;END=10376174	AVG_INTERVAL_DP:FT:MED:Q1:Q3	8.29:PASS:8.00:2.00:14.00	5.42:PASS:5.00:3.00:7.00	5.02:POOR_QUALITY:4.00:2.00:7.00
-20	10528943	.	T	<DT>	.	PASS	AVG_INTERVAL_DP=206.86;END=10566288	AVG_INTERVAL_DP:MED:Q1:Q3	72.22:72.00:64.00:81.00	66.76:68.00:59.00:76.00	67.89:69.00:59.00:78.00
-20	10655065	.	T	<DT>	.	LOW_COVERAGE;LOW_MEDIAN_DEPTH	AVG_INTERVAL_DP=9.86;END=10655136	AVG_INTERVAL_DP:FT:MED:Q1:Q3	0.931:COVERAGE_GAPS;LOW_COVERAGE:1.00:0.00:1.00	3.01:LOW_COVERAGE:3.00:2.00:3.50	5.92:PASS:6.00:5.00:7.00
-20	10958482	.	C	<DT>	.	PASS	AVG_INTERVAL_DP=93.29;END=10958626	AVG_INTERVAL_DP:MED:Q1:Q3	22.12:19.00:15.00:28.00	32.63:34.00:28.00:37.00	38.53:37.00:34.00:41.00
-20	10999884	.	A	<DT>	.	COVERAGE_GAPS	AVG_INTERVAL_DP=125.93;END=11000174	AVG_INTERVAL_DP:FT:MED:Q1:Q3	44.32:COVERAGE_GAPS:61.00:0.00:74.00	41.63:COVERAGE_GAPS:47.00:0.00:68.00	39.98:COVERAGE_GAPS:48.00:0.00:70.00
diff --git a/src/test/resources/htsjdk/variant/ex2.bgzf.bcf.csi b/src/test/resources/htsjdk/variant/ex2.bgzf.bcf.csi
deleted file mode 100755
index 722375b..0000000
Binary files a/src/test/resources/htsjdk/variant/ex2.bgzf.bcf.csi and /dev/null differ
diff --git a/src/test/resources/htsjdk/variant/ex2.vcf b/src/test/resources/htsjdk/variant/ex2.vcf
deleted file mode 100644
index 17b1896..0000000
--- a/src/test/resources/htsjdk/variant/ex2.vcf
+++ /dev/null
@@ -1,23 +0,0 @@
-##fileformat=VCFv4.1
-##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
-##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens">
-##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
-##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
-##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
-##INFO=<ID=HOMSEQ,Number=.,Type=String>
-##FILTER=<ID=q10,Description="Quality below 10">
-##FILTER=<ID=s50,Description="Less than 50% of samples have data">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
-##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
-##FORMAT=<ID=CNL,Number=.,Type=Integer>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA00001	NA00002	NA00003
-20	14370	rs6054257	G	A	29.1	.	NS=3;DP=14;AF=0.5;HOMSEQ;DB	GT:GQ:DP:HQ:CNL	0|0:48:1:25,30:10,20	1|0:48:8:49,51:.	./.:43:5:.,.:1
-20	17330	.	T	A	.	q10;s50	NS=3;DP=11;AF=0.017;H2	GT:GQ:DP:HQ	0|0:49:3:58,50	0|1:3:5:65,3	0/0:41:3:4,5
-20	1110696	rs6040355	A	G,T	67	PASS	NS=2;DP=10;AF=0.333,0.667;AA=T;DB	GT:GQ:DP:HQ	1|2:21:6:23,27	2|1:2:0:18,2	2/2:35:4:10,20
-20	1230237	.	T	.	47	PASS	NS=3;DP=13;AA=T	GT:GQ:DP:HQ	0|0:54:7:56,60	0|0:48:4:51,51	./.
-20	1234567	microsat1	GTC	G,GTCT	50	PASS	NS=3;DP=9;AA=G	GT:GQ:DP	0/1:35:4	0/2:17:2	1/1:40:3
diff --git a/src/test/resources/htsjdk/variant/serialization_test.bcf b/src/test/resources/htsjdk/variant/serialization_test.bcf
deleted file mode 100644
index 8c84efb..0000000
Binary files a/src/test/resources/htsjdk/variant/serialization_test.bcf and /dev/null differ
diff --git a/src/test/resources/htsjdk/variant/serialization_test.bcf.idx b/src/test/resources/htsjdk/variant/serialization_test.bcf.idx
deleted file mode 100644
index 4d6699e..0000000
Binary files a/src/test/resources/htsjdk/variant/serialization_test.bcf.idx and /dev/null differ
diff --git a/src/test/resources/htsjdk/variant/structuralvariants.vcf b/src/test/resources/htsjdk/variant/structuralvariants.vcf
deleted file mode 100644
index 5ffad2f..0000000
--- a/src/test/resources/htsjdk/variant/structuralvariants.vcf
+++ /dev/null
@@ -1,22 +0,0 @@
-##fileformat=VCFv4.2
-##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
-##INFO=<ID=END_CHR,Number=A,Type=String,Description="End chromosome of the variant described in this record">
-##INFO=<ID=IMPRECISE,Number=0,Type=Flag,Description="Imprecise structural variation">
-##INFO=<ID=SVLEN,Number=A,Type=Integer,Description="Difference in length between REF and ALT alleles">
-##INFO=<ID=SVTYPE,Number=A,Type=String,Description="Type of structural variant">
-##INFO=<ID=STRAND_1,Number=1,Type=String,Description="Strand Orientation of SV Start">
-##INFO=<ID=STRAND_2,Number=1,Type=String,Description="Strand Orientation of SV End">
-##INFO=<ID=METHOD,Number=1,Type=String,Description="SV Caller used to predict">
-##INFO=<ID=DP,Number=1,Type=String,Description="combined depth across samples">
-##ALT=<ID=DEL,Description="Deletion">
-##ALT=<ID=DUP,Description="Duplication">
-##ALT=<ID=INS,Description="Insertion of novel sequence">
-##ALT=<ID=INV,Description="Inversion">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=AO,Number=1,Type=Integer,Description="Alternate Allele Observations">
-##contig=<ID=1,length=14640000>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	SAMPLE1
-1	20	.	N	<DUP>	1	.	IMPRECISE;SVTYPE=DUP;END=4641652;END_CHR=1;STRAND_1=-;STRAND_2=+;SVLEN=4641632;METHOD=LUMPY;DP=90	GT:AO	1/1:90
-1	33	.	N	<DUP>	1	.	IMPRECISE;SVTYPE=DUP;END=2640388;END_CHR=1;STRAND_1=-;STRAND_2=+;SVLEN=2640355;METHOD=LUMPY;DP=3	GT:AO	1/1:3
-1	70	.	N	<DEL>	1	.	IMPRECISE;SVTYPE=DEL;END=4641583;END_CHR=1;STRAND_1=+;STRAND_2=-;SVLEN=-4641513;METHOD=LUMPY;DP=1	GT:AO	1/1:1
-1	101	.	N	<INV>	1	.	IMPRECISE;SVTYPE=INV;END=1988714;END_CHR=1;STRAND_1=-;STRAND_2=-;SVLEN=1988613;METHOD=LUMPY;DP=2	GT:AO	1/1:2
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.dict b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.dict
deleted file mode 100644
index 8dd3e5b..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD	VN:1.0	SO:unsorted
- at SQ	SN:chrM	LN:16571	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb
- at SQ	SN:chr20	LN:1000000	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:b4eac854d70893986ac578c53c2324f1
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta.fai b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta.fai
deleted file mode 100644
index 04a438b..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/Homo_sapiens_assembly18.trimmed.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chrM	16571	6	60	61
-chr20	1000000	16861	60	61
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/ScreenSamReads.100.input.sam b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/ScreenSamReads.100.input.sam
deleted file mode 100644
index daff721..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/ScreenSamReads.100.input.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:Pf3D7_01	LN:643292	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:6a7e6510bdae0ad38e8bc3aa1adf537f	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_02	LN:947102	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d34154a67b6b8e10d2d7aea3c83e09e7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_03	LN:1060087	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:468c14169020248f4e41799de3a4bef5	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_04	LN:1204112	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:9b74fcd8d379f3763a31050acf098f3a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_05	LN:1343552	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:3d84171954a6768f2a9d93796fe58d9a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_06	LN:1418244	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d2f87cf0c3570ae0da5dfd71bd4c506a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_07	LN:1501717	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:493245de8db9737efb5ce128e6b65661	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_08	LN:1419563	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:1878bd1367b051daff937555e44f41b7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_09	LN:1541723	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:87f4b581b5db461261b36b5344fe9df4	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_10	LN:1687655	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:a13945591ca5a84710655be93c75d623	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_11	LN:2038337	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:909466c6a0faec815f63b21047beea15	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_12	LN:2271478	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:c4427f71425a56c2e6325089b6bc2b7d	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_13	LN:2895605	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:5c761a4674f0363bb789b5a982952bfc	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_14	LN:3291871	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:03d21468ae712ffe4f1c62d54e4c2e2a	SP:Plasmodium falciparum
- at SQ	SN:M76611	LN:5967	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ae96d861208f8c5912393e1441319d64	SP:Plasmodium falciparum
- at SQ	SN:PFC10_API_IRAB	LN:34242	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ea11bbb35c7871b0b47bde08f4e62f59	SP:Plasmodium falciparum
- at RG	ID:61PA6.3	PL:illumina	PU:61PA6AAXX100630.3	LB:Solexa-32208	DT:2010-06-30T00:00:00-0400	SM:Pla HS 07560	CN:BI
- at PG	ID:bwa	PN:bwa	VN:0.5.9-tpx	CL:bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falciparum_3D7.2.sai illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.2.fastq.gz; bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falc [...]
-61PA6AAXX100630:3:100:10921:6024	589	*	0	0	*	*	0	0	AATTCGCCAGACGAGGGGGCCTTTGTCTGTCTTATCGGCTACATGGGAGGCTGGGGCGGGATAGATGC	####################################################################	RG:Z:61PA6.3
-61PA6AAXX100630:3:100:10921:6024	653	*	0	0	*	*	0	0	GCAGCAGCATGGTCTTGGCTCACTGCATCCTATTTCTCCACGTTGCCAGCATTTCTCCAGCCTCAGCC	><//-?,-'=A*558 at -)A9A###############################################	RG:Z:61PA6.3
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/empty.interval_list b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/empty.interval_list
deleted file mode 100644
index 88411fa..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/empty.interval_list
+++ /dev/null
@@ -1,4 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	1	1	+	empty
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.dict b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.dict
deleted file mode 100644
index e30d415..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf
deleted file mode 100644
index 39bed22..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf
+++ /dev/null
@@ -1,53 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
-##CombineVariants="analysis_type=CombineVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
-##FORMAT=<ID=AD,Number=.,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
-##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
-##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
-##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
-##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
-##INFO=<ID=BaseQRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities">
-##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
-##INFO=<ID=DS,Number=0,Type=Flag,Description="Were any of the samples downsampled?">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##INFO=<ID=HaplotypeScore,Number=1,Type=Float,Description="Consistency of the site with at most two segregating haplotypes">
-##INFO=<ID=InbreedingCoeff,Number=1,Type=Float,Description="Inbreeding coefficient as estimated from the genotype likelihoods per-sample when compared against the Hardy-Weinberg expectation">
-##INFO=<ID=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##INFO=<ID=MQ,Number=1,Type=Float,Description="RMS Mapping Quality">
-##INFO=<ID=MQ0,Number=1,Type=Integer,Description="Total Mapping Quality Zero Reads">
-##INFO=<ID=MQRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##PhaseByTransmission="analysis_type=PhaseByTransmission input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	NA12878	NA12891	NA12892
-1	8216712	rs11121115	A	G	1540.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:23,28:51:99:681,0,668:127	0/1:16,18:34:99:338,0,244:127	0/1:24,22:46:99:560,0,323:127
-1	17032814	rs2773183	T	C	2828.26	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-1	17032818	rs2773183	T	C	2828.26	FILTER	AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0/1:63,59:122:99:1434,0,1831:127	0/1:53,56:109:99:910,0,871:127	0/1:61,30:91:99:523,0,1257:127
-2	1143476	rs4998209	C	T	1483.26	PASS	AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore	GT:AD:DP:GQ:PL:TP	0|0:66,0:66:99:0,178,2264:127	0|1:33,38:71:99:844,0,1024:127	0|1:26,26:52:99:678,0,719:127
-2	9240279	rs56249990	A	G	3978.01	PASS	AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS	GT:AD:DP:GQ:PL:TP	0|1:33,42:75:99:1400,0,1031:127	0|0:67,0:67:99:0,178,2277:127	1|1:0,71:71:99:2578,199,0:127
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf.idx b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf.idx
deleted file mode 100644
index f3ca0f9..0000000
Binary files a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1.vcf.idx and /dev/null differ
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1_comp.interval_list b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1_comp.interval_list
deleted file mode 100644
index c482660..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test1_comp.interval_list
+++ /dev/null
@@ -1,8 +0,0 @@
- at SQ	SN:1	LN:249250621
- at SQ	SN:2	LN:243199373
- at SQ	SN:3	LN:198022430
-1	1	1	+	interval-1
-1	1	2	+	interval-2
-1	3	300	+	interval-3
-2	25	64	+	interval-4
-3	10000000	10000001	+	interval-5
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test2_comp.interval_list b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test2_comp.interval_list
deleted file mode 100644
index b6106fb..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test2_comp.interval_list
+++ /dev/null
@@ -1,7 +0,0 @@
- at SQ	SN:chrM	LN:16571	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:d2ed829b8a1628d16cbeee88e88e39eb
- at SQ	SN:chr20	LN:1000000	UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta	M5:b4eac854d70893986ac578c53c2324f1
-chr20	1	1	+	interval-1
-chr20	1	2	+	interval-2
-chr20	3	300	+	interval-3
-chrM	25	64	+	interval-4
-chrM	1000	1001	+	interval-5
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test3_comp.interval_list b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test3_comp.interval_list
deleted file mode 100644
index f2e4b6e..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test3_comp.interval_list
+++ /dev/null
@@ -1,24 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:Pf3D7_01	LN:643292	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:6a7e6510bdae0ad38e8bc3aa1adf537f	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_02	LN:947102	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d34154a67b6b8e10d2d7aea3c83e09e7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_03	LN:1060087	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:468c14169020248f4e41799de3a4bef5	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_04	LN:1204112	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:9b74fcd8d379f3763a31050acf098f3a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_05	LN:1343552	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:3d84171954a6768f2a9d93796fe58d9a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_06	LN:1418244	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d2f87cf0c3570ae0da5dfd71bd4c506a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_07	LN:1501717	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:493245de8db9737efb5ce128e6b65661	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_08	LN:1419563	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:1878bd1367b051daff937555e44f41b7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_09	LN:1541723	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:87f4b581b5db461261b36b5344fe9df4	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_10	LN:1687655	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:a13945591ca5a84710655be93c75d623	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_11	LN:2038337	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:909466c6a0faec815f63b21047beea15	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_12	LN:2271478	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:c4427f71425a56c2e6325089b6bc2b7d	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_13	LN:2895605	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:5c761a4674f0363bb789b5a982952bfc	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_14	LN:3291871	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:03d21468ae712ffe4f1c62d54e4c2e2a	SP:Plasmodium falciparum
- at SQ	SN:M76611	LN:5967	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ae96d861208f8c5912393e1441319d64	SP:Plasmodium falciparum
- at SQ	SN:PFC10_API_IRAB	LN:34242	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ea11bbb35c7871b0b47bde08f4e62f59	SP:Plasmodium falciparum
- at RG	ID:61PA6.3	PL:illumina	PU:61PA6AAXX100630.3	LB:Solexa-32208	DT:2010-06-30T00:00:00-0400	SM:Pla HS 07560	CN:BI
- at PG	ID:bwa	PN:bwa	VN:0.5.9-tpx	CL:bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falciparum_3D7.2.sai illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.2.fastq.gz; bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falc [...]
-Pf3D7_05	1	1	+	interval-1
-Pf3D7_05	1	2	+	interval-2
-Pf3D7_05	3	300	+	interval-3
-Pf3D7_09	25	64	+	interval-4
-Pf3D7_09	1000	1001	+	interval-5
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test4_comp.interval_list b/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test4_comp.interval_list
deleted file mode 100644
index 6c13c83..0000000
--- a/src/test/resources/htsjdk/variant/utils/SamSequenceDictionaryExtractor/test4_comp.interval_list
+++ /dev/null
@@ -1,25 +0,0 @@
- at HD	VN:1.0	SO:queryname
- at SQ	SN:Pf3D7_01	LN:643292	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:6a7e6510bdae0ad38e8bc3aa1adf537f	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_02	LN:947102	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d34154a67b6b8e10d2d7aea3c83e09e7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_03	LN:1060087	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:468c14169020248f4e41799de3a4bef5	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_04	LN:1204112	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:9b74fcd8d379f3763a31050acf098f3a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_05	LN:1343552	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:3d84171954a6768f2a9d93796fe58d9a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_06	LN:1418244	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:d2f87cf0c3570ae0da5dfd71bd4c506a	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_07	LN:1501717	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:493245de8db9737efb5ce128e6b65661	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_08	LN:1419563	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:1878bd1367b051daff937555e44f41b7	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_09	LN:1541723	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:87f4b581b5db461261b36b5344fe9df4	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_10	LN:1687655	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:a13945591ca5a84710655be93c75d623	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_11	LN:2038337	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:909466c6a0faec815f63b21047beea15	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_12	LN:2271478	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:c4427f71425a56c2e6325089b6bc2b7d	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_13	LN:2895605	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:5c761a4674f0363bb789b5a982952bfc	SP:Plasmodium falciparum
- at SQ	SN:Pf3D7_14	LN:3291871	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:03d21468ae712ffe4f1c62d54e4c2e2a	SP:Plasmodium falciparum
- at SQ	SN:M76611	LN:5967	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ae96d861208f8c5912393e1441319d64	SP:Plasmodium falciparum
- at SQ	SN:PFC10_API_IRAB	LN:34242	UR:/seq/references/Plasmodium_falciparum_3D7/v3/Plasmodium_falciparum_3D7.fasta	AS:n/a	M5:ea11bbb35c7871b0b47bde08f4e62f59	SP:Plasmodium falciparum
- at RG	ID:61PA6.3	PL:illumina	PU:61PA6AAXX100630.3	LB:Solexa-32208	DT:2010-06-30T00:00:00-0400	SM:Pla HS 07560	CN:BI
- at PG	ID:bwa	PN:bwa	VN:0.5.9-tpx	CL:bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falciparum_3D7.2.sai illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.2.fastq.gz; bwa aln Plasmodium_falciparum_3D7.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f illuminaReadGroupBamScreening.C342.61PA6AAXX100630.3.tagged_908.BI4502710.positive.Plasmodium_falc [...]
-Pf3D7_05	1	1	+	interval-1
-Pf3D7_05	1	2	+	interval-2
-Pf3D7_05	3	300	+	interval-3
-Pf3D7_09	25	64	+	interval-4
-Pf3D7_09	1000	1000	+	interval-5
-Pf3D7_11	1	2038337	+	interval-6
\ No newline at end of file
diff --git a/src/test/resources/htsjdk/variant/variantFilter01.js b/src/test/resources/htsjdk/variant/variantFilter01.js
deleted file mode 100644
index 0036477..0000000
--- a/src/test/resources/htsjdk/variant/variantFilter01.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/** get variant having position%2==0 */
-variant.getStart()%2 == 0;
diff --git a/src/test/resources/htsjdk/variant/variantFilter02.js b/src/test/resources/htsjdk/variant/variantFilter02.js
deleted file mode 100644
index c102d25..0000000
--- a/src/test/resources/htsjdk/variant/variantFilter02.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/** prints a VARIATION if two samples at least have a DP>100 */ 
-function myfilterFunction(thevariant)
-    {
-    var samples=header.genotypeSamples;
-    var countOkDp=0;
-
-
-    for(var i=0; i< samples.size();++i)
-        {
-        var sampleName=samples.get(i);
-        if(! variant.hasGenotype(sampleName)) continue;
-        var genotype = thevariant.genotypes.get(sampleName);
-        if( ! genotype.hasDP()) continue;
-        var dp= genotype.getDP();
-        if(dp > 100 ) countOkDp++;
-        }
-    return (countOkDp>2)
-    }
-
-myfilterFunction(variant)
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
deleted file mode 100755
index 03cee57..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
deleted file mode 100755
index 44ba163..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
deleted file mode 100755
index da640ff..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
deleted file mode 100755
index 400a7ea..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
deleted file mode 100755
index 963d78a..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
deleted file mode 100755
index 9f410af..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
deleted file mode 100755
index 0250bba..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
deleted file mode 100755
index 46d3ed8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
deleted file mode 100755
index f5d00e9..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
deleted file mode 100755
index db03e1d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
deleted file mode 100755
index 396e1df..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
deleted file mode 100755
index f21fc9f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
deleted file mode 100755
index 4306d65..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
deleted file mode 100755
index f6dc157..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
deleted file mode 100755
index 4b98ef8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
deleted file mode 100755
index f6b49fc..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
deleted file mode 100755
index 221e4b2..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
deleted file mode 100755
index 6495d0f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
deleted file mode 100755
index ef053f0..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
deleted file mode 100755
index 64e4b04..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
deleted file mode 100755
index 88839a6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
deleted file mode 100755
index 7cc94c6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
deleted file mode 100755
index b57af2a..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
deleted file mode 100755
index 90346a3..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
deleted file mode 100755
index 150eb2f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
deleted file mode 100755
index 505eea4..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
deleted file mode 100755
index 05d283f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
deleted file mode 100755
index d2f8d41..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
deleted file mode 100755
index 47f4750..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
deleted file mode 100755
index 95dbd0b..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
deleted file mode 100755
index 15c69cb..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
deleted file mode 100755
index 132eb40..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
deleted file mode 100755
index 3e662d9..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
deleted file mode 100755
index 205eacc..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
deleted file mode 100755
index 48d48d5..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
deleted file mode 100755
index f8a314e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
deleted file mode 100755
index 72eb66c..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
deleted file mode 100755
index c590afb..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
deleted file mode 100755
index bfd64e9..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
deleted file mode 100755
index 82d9967..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
deleted file mode 100755
index 2daedc8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
deleted file mode 100755
index 2d1d4c0..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
deleted file mode 100755
index 243835d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
deleted file mode 100755
index 299ed20..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
deleted file mode 100755
index 44b0539..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
deleted file mode 100755
index 15e1360..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
deleted file mode 100755
index 5602b08..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
deleted file mode 100755
index c009189..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
deleted file mode 100755
index 3f9112d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
deleted file mode 100755
index 5292115..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
deleted file mode 100755
index 3e5f293..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
deleted file mode 100755
index fb99bc5..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
deleted file mode 100755
index befaf8f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
deleted file mode 100755
index 473910d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
deleted file mode 100755
index fac5bec..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
deleted file mode 100755
index 7f15c76..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
deleted file mode 100755
index 86e2353..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
deleted file mode 100755
index 9831410..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
deleted file mode 100755
index bad6be4..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
deleted file mode 100755
index 3c2a372..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
deleted file mode 100755
index a90bc53..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
deleted file mode 100755
index 21b83c8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
deleted file mode 100755
index 59c7d45..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
deleted file mode 100755
index 80caafc..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
deleted file mode 100755
index 461909d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
deleted file mode 100755
index 43b8d87..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
deleted file mode 100755
index 6f939c0..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs b/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs
deleted file mode 100755
index 7d39855..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
deleted file mode 100755
index 34c6790..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
deleted file mode 100755
index ebd3bd6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
deleted file mode 100755
index 30a011e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
deleted file mode 100755
index c210e60..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
deleted file mode 100755
index 545a11a..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
deleted file mode 100755
index 2fef451..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
deleted file mode 100755
index dea83d8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
deleted file mode 100755
index 87a0a75..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
deleted file mode 100755
index fbc27ca..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
deleted file mode 100755
index acb84a8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
deleted file mode 100755
index c7a8aa6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
deleted file mode 100755
index 9c55e8e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
deleted file mode 100755
index 16dc356..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
deleted file mode 100755
index d79c014..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
deleted file mode 100755
index b7acb77..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
deleted file mode 100755
index c4a16a3..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
deleted file mode 100755
index dffddf8..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
deleted file mode 100755
index 33009f6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
deleted file mode 100755
index e41df54..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
deleted file mode 100755
index c1674bf..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
deleted file mode 100755
index ddf2c63..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
deleted file mode 100755
index 2e5753f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
deleted file mode 100755
index 52f8f1f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
deleted file mode 100755
index 096299b..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
deleted file mode 100755
index 154911e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
deleted file mode 100755
index 2fadbf9..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
deleted file mode 100755
index 26ffd9b..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
deleted file mode 100755
index 6bb899a..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
deleted file mode 100755
index 9ef653f..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
deleted file mode 100755
index e5dc298..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
deleted file mode 100755
index 3a990cf..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
deleted file mode 100755
index d4c7ec2..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
deleted file mode 100755
index 5ae5305..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
deleted file mode 100755
index 6ec1b8c..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
deleted file mode 100755
index 1b3bc23..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
deleted file mode 100755
index b91ab3d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
deleted file mode 100755
index 72f026e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
deleted file mode 100755
index f84ee35..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
deleted file mode 100755
index 28af6d0..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
deleted file mode 100755
index c668327..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
deleted file mode 100755
index 70827f0..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
deleted file mode 100755
index bad8f53..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
deleted file mode 100755
index ec3a7fa..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
deleted file mode 100755
index 1820ae6..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
deleted file mode 100755
index e20873b..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
deleted file mode 100755
index a9d9fa5..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
deleted file mode 100755
index df8caba..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
deleted file mode 100755
index e5d4067..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
deleted file mode 100755
index c3f88ca..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
deleted file mode 100755
index 35ca65b..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
deleted file mode 100755
index dcc1994..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
deleted file mode 100755
index 76d360e..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
deleted file mode 100755
index c0b65db..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
deleted file mode 100755
index 2458983..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
deleted file mode 100755
index 6d5d107..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
deleted file mode 100755
index f248e20..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
deleted file mode 100755
index 7e21656..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
deleted file mode 100755
index 359ff7d..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
deleted file mode 100755
index 0ad05bc..0000000
Binary files a/src/test/resources/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter and /dev/null differ
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
deleted file mode 100644
index f36c12a..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.ACAGGTAT	LB:LN_ACAGGTAT	SM:SA_ACAGGTAT	CN:BI
-HiMom:1:1101:1236:2121	77	*	0	0	*	*	0	0	.GGTGCTTCATATCCCTCTAGAGGA	#1=BDDFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1236:2121	141	*	0	0	*	*	0	0	TTGCGCTTACTTTGTAGCCTTCATC	CCCFFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1341:2116	77	*	0	0	*	*	0	0	.AGAAGCCCCAGGAGGAAGACAGTC	#1=DDFFFHHHHHHHJIIJJJJJGI	RG:Z:HiMom.1
-HiMom:1:1201:1341:2116	141	*	0	0	*	*	0	0	ATAACAGCGAGACTGGCAACTTAAA	#########################	RG:Z:HiMom.1
-HiMom:1:2101:1063:2206	77	*	0	0	*	*	0	0	TCCTATTCGCCTACACAATTCTCCG	CCCFFFFFHHHHHJJJJJJJHJJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1063:2206	141	*	0	0	*	*	0	0	.TGCTAGGATGAGGATGGATAGTAA	#1=DDDFFHHHHHJHIIJHIIIHHJ	RG:Z:HiMom.1
-HiMom:1:2101:1325:2083	77	*	0	0	*	*	0	0	.CAGAAGAAAGGGCCTTGTCGGAGG	#1=DDDDDHHFHDGI at EEHG:?FA8	RG:Z:HiMom.1
-HiMom:1:2101:1325:2083	141	*	0	0	*	*	0	0	TGTGCTCTTCCGATCTGGAGAAAAA	#########################	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
deleted file mode 100644
index e457cdd..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.ACAGTTGA	LB:LN_ACAGTTGA	SM:SA_ACAGTTGA	CN:BI
-HiMom:1:2101:1048:2238	77	*	0	0	*	*	0	0	.CTGCCGTGTCCTGACTTCTGGAAT	#1:B?ADDACF<DCG;EG<FHH at CE	RG:Z:HiMom.1
-HiMom:1:2101:1048:2238	141	*	0	0	*	*	0	0	.GTCACATCGTTGAAGCACTGGATC	#11ADDDB<CFFHCHGDBHGIIIII	RG:Z:HiMom.1
-HiMom:1:2101:1216:2193	77	*	0	0	*	*	0	0	TTTTCTTGGCCTCTGTTTTTTTTTT	BCCFDFFFHHFFHJIGIJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1216:2193	141	*	0	0	*	*	0	0	AGGCATGACACTGCATTTTAAATAC	@@@DDDDDHFFHHGGDFHFHIIHGG	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
deleted file mode 100644
index 9b6932a..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.ACTAAGAC	LB:LN_ACTAAGAC	SM:SA_ACTAAGAC	CN:BI
-HiMom:1:1101:1259:2152	77	*	0	0	*	*	0	0	CACCTATAATCCCAGCTACTCCAGA	CCCFFFFFHHHHHJJJJJJIJJJIJ	RG:Z:HiMom.1
-HiMom:1:1101:1259:2152	141	*	0	0	*	*	0	0	ATTTTTATATTTTTTTAGACATAGG	CCCFFFFFGHHHHJJJJIGIIJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1261:2127	589	*	0	0	*	*	0	0	.TGAAATCTGGATAGGCTGGAGTTA	#0-@@@###################	RG:Z:HiMom.1
-HiMom:1:1101:1261:2127	653	*	0	0	*	*	0	0	TTTTTTTTTTTTTTTTTTTTTTTTT	CCCFFFFFHGHHHJJIFDDDDDDDD	RG:Z:HiMom.1
-HiMom:1:2101:1021:2209	77	*	0	0	*	*	0	0	.GGCCCCACCCTCCTCCAGCACGTC	#1=DDFFFHHHHHJJJJJJHIIHFH	RG:Z:HiMom.1
-HiMom:1:2101:1021:2209	141	*	0	0	*	*	0	0	..GGAAGGCTGCTAGCTGGCCAGAG	##08@>??@@??@?????????>?@	RG:Z:HiMom.1
-HiMom:1:2101:1262:2128	589	*	0	0	*	*	0	0	AGCAGAAGGGCAAAAGCTGGCTTGA	9;<@:@###################	RG:Z:HiMom.1
-HiMom:1:2101:1262:2128	653	*	0	0	*	*	0	0	TCTTGTGGTAACTTTTCTGACACCT	-(---9@;@?:8>?4:>?@######	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
deleted file mode 100644
index 3797f98..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.AGGTCGCA	LB:LN_AGGTCGCA	SM:SA_AGGTCGCA	CN:BI
-HiMom:1:1101:1150:2228	77	*	0	0	*	*	0	0	GCTACTCAGTAGACAGTCCCACCCT	@@CADDDDFCFHHIIIIGGIIGGGI	RG:Z:HiMom.1
-HiMom:1:1101:1150:2228	141	*	0	0	*	*	0	0	ATGGGAGGCGATTCCTAGGGGGTTG	8?=DD8;@BH6DHD<FGGGEIGHIG	RG:Z:HiMom.1
-HiMom:1:1101:1491:2120	77	*	0	0	*	*	0	0	.GGCAGGTGCCCCCACTTGACTCTC	#1?DFFFFGHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1491:2120	141	*	0	0	*	*	0	0	GGCCAGGCTGAACTTCTGAGCTGCT	CCCFFFFFHHHGHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1190:2194	77	*	0	0	*	*	0	0	AACCTGGCGCTAAACCATTCGTAGA	CCCFFFFFHHHHHJJJJJJJJIJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1190:2194	141	*	0	0	*	*	0	0	ACAAACCCTTGTGTCGAGGGCTGAC	CCCFFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1188:2195	77	*	0	0	*	*	0	0	TTAGACCGTCGTGAGACAGGTTAGT	@CCFFFFFHHHHHJJJJJIIEHIJH	RG:Z:HiMom.1
-HiMom:1:2101:1188:2195	141	*	0	0	*	*	0	0	GCACATACACCAAATGTCTGAACCT	CCCFFFFFHHHHHJJJHIJJJJJJJ	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam
deleted file mode 100644
index 36d2d52..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.ATTATCAA	LB:LN_ATTATCAA	SM:SA_ATTATCAA	CN:BI
-HiMom:1:1101:1100:2207	77	*	0	0	*	*	0	0	ACGACAGACGTTCTTTCTTTGCTGC	CCCFFFFFHHFHHJIJJJJJHIJJH	RG:Z:HiMom.1
-HiMom:1:1101:1100:2207	141	*	0	0	*	*	0	0	AGGCT............G.......	#########################	RG:Z:HiMom.1
-HiMom:1:1101:1157:2135	77	*	0	0	*	*	0	0	.GGACATTGTAATCATTTCTTACAA	#1=DD?DDHHHHHGGHIIIIIIIII	RG:Z:HiMom.1
-HiMom:1:1101:1157:2135	141	*	0	0	*	*	0	0	TTTAAAGTCTTAATCAAAGATGATA	CCCFFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1269:2170	77	*	0	0	*	*	0	0	ACAGTGTGGGAGGCAGACGAAGAGA	@@@DDDDDFA:C at EGA?FD<FFHII	RG:Z:HiMom.1
-HiMom:1:1101:1269:2170	141	*	0	0	*	*	0	0	TTCCAAGCCTGTGCTTTAAGGAAAA	@@<ADBDBDF8DDCFH at GIE@@GGH	RG:Z:HiMom.1
-HiMom:1:1201:1018:2217	589	*	0	0	*	*	0	0	.TTTCTCTGGGCGCAAAGATGTTCA	#07;8=8<<99(:=@@/@7>>6=?>	RG:Z:HiMom.1
-HiMom:1:1201:1018:2217	653	*	0	0	*	*	0	0	.........................	#########################	RG:Z:HiMom.1	XN:i:1
-HiMom:1:1201:1118:2198	77	*	0	0	*	*	0	0	CAAGTGTACAGGATTAGACTGGGTT	BCCFDEBDHHHHHIJJJGIIIJJGH	RG:Z:HiMom.1
-HiMom:1:1201:1118:2198	141	*	0	0	*	*	0	0	AATAAACTTTATTAAAGCAGTTAAA	C at CFFFFFHDHHHGIIIJJJIJJJJ	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam
deleted file mode 100644
index d598919..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.CAATAGTC	LB:LN_CAATAGTC	SM:SA_CAATAGTC	CN:BI
-HiMom:1:1101:1316:2126	77	*	0	0	*	*	0	0	.AAAAAAAAAAAAAAAAAAAAAAAA	#1BDFFFFHHHHHJJJJFDDDDDDD	RG:Z:HiMom.1	XN:i:1
-HiMom:1:1101:1316:2126	141	*	0	0	*	*	0	0	TCTTTTTTTTTTTTTTTTTTTTTTT	CCCFFFFFHHHHHJJJJHFDDDDDD	RG:Z:HiMom.1
-HiMom:1:1101:1399:2128	77	*	0	0	*	*	0	0	.TGCCCTTCGTCCTGGGAAACGGGG	#1BDFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1399:2128	141	*	0	0	*	*	0	0	ACAAACCCTTGTGTCGAGGGCTGAC	CCCFFFFFHHHHHIJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1054:2151	77	*	0	0	*	*	0	0	.TAGTGCTGGGCACTAAGTAATACC	#4=DDDFFHHHHHJJJJJHIJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1054:2151	141	*	0	0	*	*	0	0	GTCAGGCACTGAGAATATATGGGTG	CBCFFFFFHHHHHJJJJJJJJJJEG	RG:Z:HiMom.1
-HiMom:1:1201:1345:2181	77	*	0	0	*	*	0	0	GGATAATCCTATTTATTACCTCAGA	BBBDDFFFHHHHHJJJJJJJJJIJJ	RG:Z:HiMom.1
-HiMom:1:1201:1345:2181	141	*	0	0	*	*	0	0	ATACGGATGTGTTTAGGAGTGGGAC	CCCFFFFFHHHHHIIJJHJFHIJIJ	RG:Z:HiMom.1
-HiMom:1:1201:1392:2184	77	*	0	0	*	*	0	0	TTTCAGATTGGTCATTGTTAGTGTA	??@BDDDEHBHADHHIIEHDHFHFF	RG:Z:HiMom.1
-HiMom:1:1201:1392:2184	141	*	0	0	*	*	0	0	ATCTTTATTCATTTGTATGATCTTA	@@BFFFFFHFFHFHIHIIJIJJJJI	RG:Z:HiMom.1
-HiMom:1:2101:1172:2152	589	*	0	0	*	*	0	0	AACACGGACAAAGGAGTCTAACACG	<<<??8@@#################	RG:Z:HiMom.1
-HiMom:1:2101:1172:2152	653	*	0	0	*	*	0	0	ATCGTTTCTGGGGACTAGTGAGGCG	#########################	RG:Z:HiMom.1
-HiMom:1:2101:1491:2093	77	*	0	0	*	*	0	0	.CTATGCCGATCGGGTGTCCGCACT	#1=DDDDDHHFHHIIEHHHBGHGII	RG:Z:HiMom.1
-HiMom:1:2101:1491:2093	141	*	0	0	*	*	0	0	AGAGACGGGGTCTCGCTATGTTGCC	BCCDFFFFHHHHHJIIJJJJIJIJJ	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
deleted file mode 100644
index e42e715..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.CAGCGGTA	LB:LN_CAGCGGTA	SM:SA_CAGCGGTA	CN:BI
-HiMom:1:1101:1420:2213	77	*	0	0	*	*	0	0	TACCTGGTTGATCCTGCCAGTAGCA	@@CFFFFDDHHGHJGGHIJJIHGBH	RG:Z:HiMom.1
-HiMom:1:1101:1420:2213	141	*	0	0	*	*	0	0	TTCACTGTACCGGCCGTGCGTACTT	@CCFFFFDHHHFGIJJJJJJGHIGG	RG:Z:HiMom.1
-HiMom:1:1201:1364:2113	77	*	0	0	*	*	0	0	.CACTCATTTTCTTATGTGGGATAT	#1=DDFDFHHHHHIJJIFHIIHHHI	RG:Z:HiMom.1
-HiMom:1:1201:1364:2113	141	*	0	0	*	*	0	0	TAAAGAGAGCCAGTGGAGTTACGAC	#########################	RG:Z:HiMom.1
-HiMom:1:2101:1072:2170	77	*	0	0	*	*	0	0	ATCACCGCACTCATTTCCCGCTTCC	CCCFFFFFHHHACEEGHIIBHIIII	RG:Z:HiMom.1
-HiMom:1:2101:1072:2170	141	*	0	0	*	*	0	0	.GGGGAGACAGAGAGGATCAGAAGT	#4=BDDFDHHDFHEGFEGGIJIIIG	RG:Z:HiMom.1
-HiMom:1:2101:1123:2095	77	*	0	0	*	*	0	0	.TGGACAACATGTTCGAGAGCTACA	#1=BBDDDFFFFDGFGIG?F;HHFI	RG:Z:HiMom.1
-HiMom:1:2101:1123:2095	141	*	0	0	*	*	0	0	TCCGCCTCCAGCTTCAGCTTCTCCT	@@@FDDFFHHHHHJHGGJIJJJEHH	RG:Z:HiMom.1
-HiMom:1:2101:1151:2236	589	*	0	0	*	*	0	0	TTAAAGAGGTTCAGGGATGCAGAGT	#########################	RG:Z:HiMom.1
-HiMom:1:2101:1151:2236	653	*	0	0	*	*	0	0	TTTGAAGCCTCTTTATCCTTGGCAT	#########################	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam
deleted file mode 100644
index dc2b3bf..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.CGCTATGT	LB:LN_CGCTATGT	SM:SA_CGCTATGT	CN:BI
-HiMom:1:1101:1291:2150	77	*	0	0	*	*	0	0	CGTGGGGAACCTGGCGCTAAACCAT	@BBFFFFFHHHHHJJJJIJJJJJIJ	RG:Z:HiMom.1
-HiMom:1:1101:1291:2150	141	*	0	0	*	*	0	0	ACAAACCCTTGTGTCGAGGGCTGAC	CCCFFFFFHHFHHIJJJIIIGIJIJ	RG:Z:HiMom.1
-HiMom:1:1101:1314:2233	77	*	0	0	*	*	0	0	GTTTATTGGGGCATTCCTTATCCCA	@??DDDDBDHF>FCHGGGBFAAED9	RG:Z:HiMom.1
-HiMom:1:1101:1314:2233	141	*	0	0	*	*	0	0	AGGAAAGTTGGGCTGACCTGACAGA	@@<DDD;=FBFADBCGDEH?F;FCG	RG:Z:HiMom.1
-HiMom:1:1101:1441:2148	77	*	0	0	*	*	0	0	ACTTTCACCGCTACACGACCGGGGG	CCCFFFFFHGFFHIIFIHJIGGII>	RG:Z:HiMom.1
-HiMom:1:1101:1441:2148	141	*	0	0	*	*	0	0	TTTTGGCTCTAGAGGGGGTAGAGGG	CCCFFFFFHHDFBHIIJJ1?FGHIJ	RG:Z:HiMom.1
-HiMom:1:1201:1043:2246	77	*	0	0	*	*	0	0	.TTCTCGGCTGTCATGTGCAACATT	#1=DDBDFHHHDFFBHGHGHIIJEH	RG:Z:HiMom.1
-HiMom:1:1201:1043:2246	141	*	0	0	*	*	0	0	.GCATCATTTC..GCTTCTCTCTGT	#0;@@??@=@>##22=;@??><@??	RG:Z:HiMom.1
-HiMom:1:1201:1134:2144	77	*	0	0	*	*	0	0	TGCCAGGAAGTGTTTTTTCTGGGTC	@CCFFEFFHHFFFGIJJJJJJJJGH	RG:Z:HiMom.1
-HiMom:1:1201:1134:2144	141	*	0	0	*	*	0	0	AGTGTGAGTAATGGTTGAGAGGTGG	B@?DDDFFFHHGHJHHGFIHHIFGI	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam
deleted file mode 100644
index 2ee594d..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam
+++ /dev/null
@@ -1,14 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.CTGTAATC	LB:LN_CTGTAATC	SM:SA_CTGTAATC	CN:BI
-HiMom:1:1101:1403:2194	77	*	0	0	*	*	0	0	CTAAACAGAGAGAAGGTTTCTCTTT	CCCFFFFFHHHHHJJJFHIJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1101:1403:2194	141	*	0	0	*	*	0	0	ACATGGTGAAACCCTGTCTCTACTA	CCCFFFDDHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1045:2105	589	*	0	0	*	*	0	0	.TAAAGAGAAATCAAGAATACTATT	#-4@?(@)@@###############	RG:Z:HiMom.1
-HiMom:1:1201:1045:2105	653	*	0	0	*	*	0	0	.TTTTTTTTTT..TTTTTTTTTTTT	#0;@@@@@@@?##0:????????=<	RG:Z:HiMom.1
-HiMom:1:1201:1483:2126	589	*	0	0	*	*	0	0	.TGATAAGGTGTTGCTATGTTACCC	#1:D?DDDDA??2:<CC4:AEDF>?	RG:Z:HiMom.1
-HiMom:1:1201:1483:2126	653	*	0	0	*	*	0	0	GCATGCAGCTGGGTGCTGTGATGCA	@@@DDDBB<DD8F<<CGG?AA?A<F	RG:Z:HiMom.1
-HiMom:1:2101:1011:2102	77	*	0	0	*	*	0	0	.AAACAAAACTGTAGAACTGTGTAT	#1=DDFFFHHHHHJJIJJJIHHHJJ	RG:Z:HiMom.1
-HiMom:1:2101:1011:2102	141	*	0	0	*	*	0	0	.....TCACACATAATTTTAAAATT	#####22@?@@??@@@@@??@@@@@	RG:Z:HiMom.1
-HiMom:1:2101:1245:2154	77	*	0	0	*	*	0	0	TCGTTAAGTATATTCTTAGGTATTT	CCCFFDFFFHFHHIIJJJJJFJJJI	RG:Z:HiMom.1
-HiMom:1:2101:1245:2154	141	*	0	0	*	*	0	0	ACCAATCAGTAGCACCACTATACAC	CCCFFFFFHHHHHJJJJJJIJJJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1386:2105	77	*	0	0	*	*	0	0	.TACTAAAGAAAAAGTTGAAGAACT	#1=DDDFFHHHHHJJGHIJJJJIJJ	RG:Z:HiMom.1
-HiMom:1:2101:1386:2105	141	*	0	0	*	*	0	0	AGGAATTATTCTTCTGCCATAAGGT	B@@DDFFFHGFHHIJJJJJGIGIJH	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam
deleted file mode 100644
index 7fbc0a2..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.GACCAGGA	LB:LN_GACCAGGA	SM:SA_GACCAGGA	CN:BI
-HiMom:1:1101:1089:2172	77	*	0	0	*	*	0	0	TTCCAGCATGCGGTTTAAGTAGGAT	@CCFDFDBDFBF:<CEBHAFHHICH	RG:Z:HiMom.1
-HiMom:1:1101:1089:2172	141	*	0	0	*	*	0	0	TCCGG....................	:<<??####################	RG:Z:HiMom.1
-HiMom:1:1101:1347:2149	77	*	0	0	*	*	0	0	GAGCAGATCGGAAGAGCACAGATCG	@@@FFDDDHHHHHIJJBGGHJIHEG	RG:Z:HiMom.1
-HiMom:1:1101:1347:2149	141	*	0	0	*	*	0	0	GCTCTTCCGATCTGTGCTCTTCCGA	CCCFFFFFDFHHFIJDGIGGHGIGH	RG:Z:HiMom.1
-HiMom:1:1201:1095:2146	77	*	0	0	*	*	0	0	GCTGAGTCATGTAGTAAGCCTGTGC	BB at FDDDFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1095:2146	141	*	0	0	*	*	0	0	ACTGACAACACCAAATGCTGCTAAG	CCCFFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1123:2161	589	*	0	0	*	*	0	0	CACTAACTCCTGACCTCAAATAATC	?7?=DD?DD+CDBE>E at EEF@+<CF	RG:Z:HiMom.1
-HiMom:1:1201:1123:2161	653	*	0	0	*	*	0	0	CGTGTGCTCTTCCGATCTGCATACA	===AAAA8AAAA<AAA)@CBA9>A#	RG:Z:HiMom.1
-HiMom:1:1201:1439:2156	77	*	0	0	*	*	0	0	AGCCGCGAGGTGCTGGCGGACTTCC	:;1BDDDAA88A<?<E1C:D#####	RG:Z:HiMom.1
-HiMom:1:1201:1439:2156	141	*	0	0	*	*	0	0	GGAGATTATTTGCCTTGAAGTAAGC	-;(22<>>@>8@>8;@#########	RG:Z:HiMom.1
-HiMom:1:2101:1207:2084	589	*	0	0	*	*	0	0	.TAGATGACCAAAACTTGCAGGGCA	#1:A<?@A+7A=?CBCCBCCBAAAA	RG:Z:HiMom.1
-HiMom:1:2101:1207:2084	653	*	0	0	*	*	0	0	TCACCACTCTTCTGGGCATCCCCTG	@@@DDEDFHHHHHIJIHHGHGGJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1312:2105	77	*	0	0	*	*	0	0	.TTCCCTCAGGATAGCTGGCGCTCT	#1=DDFFFGHGHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:2101:1312:2105	141	*	0	0	*	*	0	0	GTTGAGAATAGGTTGAGATCGTTTC	@CCFFFDFHHFHDHIJJJJJJJIJJ	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
deleted file mode 100644
index 60aa17e..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.GCCGTCGA	LB:LN_GCCGTCGA	SM:SA_GCCGTCGA	CN:BI
-HiMom:1:1101:1111:2148	77	*	0	0	*	*	0	0	GTGGAGACCACCTCCGAGGCCTTGT	BBCFFFFFHHHHHJJJIJJJJJJJI	RG:Z:HiMom.1
-HiMom:1:1101:1111:2148	141	*	0	0	*	*	0	0	GCGAA.A..........GGACGAC.	#########################	RG:Z:HiMom.1
-HiMom:1:1101:1221:2143	77	*	0	0	*	*	0	0	TTTGGTGGAAATTTTTTGTTATGAT	CCCFFBDBHFD?FBFHIIGGIC at EF	RG:Z:HiMom.1
-HiMom:1:1101:1221:2143	141	*	0	0	*	*	0	0	CAATTGAATGTCTGCACAGCCGCTT	@@@FFFFDHHHHHJJJIIIJGHIJJ	RG:Z:HiMom.1
-HiMom:1:1101:1327:2200	589	*	0	0	*	*	0	0	AGGGGGATCCGCCGGGGGACCACAA	#########################	RG:Z:HiMom.1
-HiMom:1:1101:1327:2200	653	*	0	0	*	*	0	0	GTCATCTGGGCTGTCGACAGGTGTC	@B at FFFFFHHHHGIJJJJJJIFHHI	RG:Z:HiMom.1
-HiMom:1:2101:1122:2136	77	*	0	0	*	*	0	0	GTAGGCGCTCAGCAAATACTTGTCG	@@@DDDD8?<CACEHHBBHDAAFH@	RG:Z:HiMom.1
-HiMom:1:2101:1122:2136	141	*	0	0	*	*	0	0	CTTGCCAGCCTGCAGGCCCCGCGGC	???BBAABDD?DDIID)A:3<EADD	RG:Z:HiMom.1
-HiMom:1:2101:1459:2083	77	*	0	0	*	*	0	0	.CACACGCCACACGGAGCACACTTT	#4=DDFFFHHHHHJJJJJJJJIIJJ	RG:Z:HiMom.1
-HiMom:1:2101:1459:2083	141	*	0	0	*	*	0	0	ATTTCACCAAAATAATCAGAAGGCC	CCCFFFFDBHGHHIGGIJFJJGGFH	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
deleted file mode 100644
index 9cdc1b4..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.GCCTAGCC	LB:LN_GCCTAGCC	SM:SA_GCCTAGCC	CN:BI
-HiMom:1:1101:1165:2239	77	*	0	0	*	*	0	0	GGCGGAGGCAGCATTTCAGCTGTGA	CCCFFDFFHHHHHIJJIGHHHJHHF	RG:Z:HiMom.1
-HiMom:1:1101:1165:2239	141	*	0	0	*	*	0	0	ATGGAAGTCGAGACAGAAGTGAGAA	#########################	RG:Z:HiMom.1
-HiMom:1:1101:1290:2225	77	*	0	0	*	*	0	0	CTTGGGCGCATGGTGAGGGAGGGAG	@@@FFDDFHDFH??CBEBHHIGDCD	RG:Z:HiMom.1
-HiMom:1:1101:1290:2225	141	*	0	0	*	*	0	0	TCAGTTCACTGGCAAAGACAGTCAC	C@@FBEDDFHFHGIIICEHGDHBHE	RG:Z:HiMom.1
-HiMom:1:1201:1280:2179	77	*	0	0	*	*	0	0	TTCAAGGAATCGTCCTGCCTCAGCC	BCCFFFFFHHHHHJJJJJJJJJJJJ	RG:Z:HiMom.1
-HiMom:1:1201:1280:2179	141	*	0	0	*	*	0	0	GAGGACTGCTTGAGTCCAGGAGTTC	@@BFFDEFGHHHHIFGCHIJJJGGI	RG:Z:HiMom.1
-HiMom:1:1201:1300:2137	77	*	0	0	*	*	0	0	.TGTAATCCCAGCTCTCAGGGAGGC	#1=ADDDDDDDBBA?@AE?E at FE8;	RG:Z:HiMom.1
-HiMom:1:1201:1300:2137	141	*	0	0	*	*	0	0	GCTCTTCCGATCTTTTTTTTAATTT	@@?DDDDDFDHADEHGIGGED3?FD	RG:Z:HiMom.1
-HiMom:1:2101:1023:2237	589	*	0	0	*	*	0	0	.TAAACAGCTTCTGCACAGCCAAAG	#00@@?>=39>9;<412@?######	RG:Z:HiMom.1
-HiMom:1:2101:1023:2237	653	*	0	0	*	*	0	0	..TTTGTTTGAGTTCCTTGTAGATT	##0:=@?>?@???@:>?@??>?;?<	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/N.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/N.sam
deleted file mode 100644
index 5cc7ccf..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/N.sam
+++ /dev/null
@@ -1,34 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.N	LB:LN_N	SM:SA_N	CN:BI
-HiMom:1:1101:1031:2224	589	*	0	0	*	*	0	0	.AATA............T.......	#0;@@####################	BC:Z:NNNNNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1031:2224	653	*	0	0	*	*	0	0	.........................	#########################	BC:Z:NNNNNNNN	RG:Z:HiMom.1	XN:i:1
-HiMom:1:1101:1039:2147	589	*	0	0	*	*	0	0	.CCAA.G..GG....ATGTAA....	#4;@@#4##2<####43@@@@####	BC:Z:NNNNNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1039:2147	653	*	0	0	*	*	0	0	.........................	#########################	BC:Z:NNNNNNNN	RG:Z:HiMom.1	XN:i:1
-HiMom:1:1101:1046:2175	589	*	0	0	*	*	0	0	.TGCC.G.GTT.CG.GGTCTT....	#4;@@####################	BC:Z:NNNNNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1046:2175	653	*	0	0	*	*	0	0	..GGA....................	#########################	BC:Z:NNNNNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1047:2122	589	*	0	0	*	*	0	0	.CTAA.G.ACT.TG.GTGTGC....	#0;@@#4#3@@#3@#2<@@@@####	BC:Z:NNNANNNN	RG:Z:HiMom.1
-HiMom:1:1101:1047:2122	653	*	0	0	*	*	0	0	..TCA....................	#########################	BC:Z:NNNANNNN	RG:Z:HiMom.1
-HiMom:1:1101:1048:2197	589	*	0	0	*	*	0	0	.CTCC.G.TCA.CA.GTGGAG....	#0;?@####################	BC:Z:NNNCNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1048:2197	653	*	0	0	*	*	0	0	..GTG....................	#########################	BC:Z:NNNCNNNN	RG:Z:HiMom.1
-HiMom:1:1101:1065:2193	77	*	0	0	*	*	0	0	GAAGTACGCCCTGCCCCTGGTT.GC	?@@DAADAHHFHBEBEGGHG?####	BC:Z:GAACGATN	RG:Z:HiMom.1
-HiMom:1:1101:1065:2193	141	*	0	0	*	*	0	0	.CTTG....................	#########################	BC:Z:GAACGATN	RG:Z:HiMom.1
-HiMom:1:1101:1162:2207	589	*	0	0	*	*	0	0	ACCTTGAGGAGAACATAAGAGCAAA	#########################	BC:Z:ACAAAATT	RG:Z:HiMom.1
-HiMom:1:1101:1162:2207	653	*	0	0	*	*	0	0	TAAAACTGGGGAAGTTAGAGGAATG	#########################	BC:Z:ACAAAATT	RG:Z:HiMom.1
-HiMom:1:1201:1159:2179	589	*	0	0	*	*	0	0	GTTAGCACAGATATTGGATGAGTGA	#########################	BC:Z:AAAAAAAA	RG:Z:HiMom.1
-HiMom:1:1201:1159:2179	653	*	0	0	*	*	0	0	TTTTTTTTTATTTTTCTAAATACTT	===AA####################	BC:Z:AAAAAAAA	RG:Z:HiMom.1
-HiMom:1:1201:1414:2174	589	*	0	0	*	*	0	0	GCCAAAAAAAAGAACCAGCCCAAGG	#########################	BC:Z:AGAAAAGA	RG:Z:HiMom.1
-HiMom:1:1201:1414:2174	653	*	0	0	*	*	0	0	TTTTTTTTTTTTTTTTTTTTTTTTT	@;@1BDADF????FFEB>B6=BBBB	BC:Z:AGAAAAGA	RG:Z:HiMom.1
-HiMom:1:2101:1040:2208	589	*	0	0	*	*	0	0	.ATGCCCACCTCCCTCCTACGCACC	#########################	BC:Z:ACGAAATC	RG:Z:HiMom.1
-HiMom:1:2101:1040:2208	653	*	0	0	*	*	0	0	.CTGATAGTCACTGAAATGAATTCA	#-0=>(2 at .22@@############	BC:Z:ACGAAATC	RG:Z:HiMom.1
-HiMom:1:2101:1059:2083	77	*	0	0	*	*	0	0	.AAGAGGGGTCAAGAGTTAAACTTA	#1=DDFFFHFHHGIGHGHJJJJJJI	BC:Z:TACCGTCT	RG:Z:HiMom.1
-HiMom:1:2101:1059:2083	141	*	0	0	*	*	0	0	.GAATGTCTTAGAAGGATGCTTCTC	#1=BDDDEHHGHHJJJJJIJJIIJJ	BC:Z:TACCGTCT	RG:Z:HiMom.1
-HiMom:1:2101:1143:2137	77	*	0	0	*	*	0	0	ATGCAGCAGCTGCCACGGAGCACCA	CC at FFDFDFHFHHGIDHEHIGJJJJ	BC:Z:TCCGTCTA	RG:Z:HiMom.1
-HiMom:1:2101:1143:2137	141	*	0	0	*	*	0	0	GCTCTTCAGATCTAGGGGGAACAGC	@@@DD?=DCAFFFHIIDG:EFHIII	BC:Z:TCCGTCTA	RG:Z:HiMom.1
-HiMom:1:2101:1151:2182	589	*	0	0	*	*	0	0	TTGTTTTGGCTTATAATGACAAGAA	;;8-2).2())(<6=@8;?4??>>?	BC:Z:GAAAAAAA	RG:Z:HiMom.1
-HiMom:1:2101:1151:2182	653	*	0	0	*	*	0	0	TTTTTTTTTTTTTTTTTTTTTTTTA	9<<?@?@;5=?##############	BC:Z:GAAAAAAA	RG:Z:HiMom.1
-HiMom:1:2101:1215:2110	77	*	0	0	*	*	0	0	.AATATAATTTGGAGACCCTTTGTT	#1=DDDDDEDDDDIDDBB3ABAB##	BC:Z:AAAAGAAG	RG:Z:HiMom.1
-HiMom:1:2101:1215:2110	141	*	0	0	*	*	0	0	ATCTTTCCCCCATTAAGAACAGCAA	#########################	BC:Z:AAAAGAAG	RG:Z:HiMom.1
-HiMom:1:2101:1285:2105	589	*	0	0	*	*	0	0	.GCGGGGAGCCGGGCGTGGAATGCG	#########################	BC:Z:TATCTCGG	RG:Z:HiMom.1
-HiMom:1:2101:1285:2105	653	*	0	0	*	*	0	0	TGTCTATATCAACCAACACCTCTTC	-(0(():94:9:???##########	BC:Z:TATCTCGG	RG:Z:HiMom.1
-HiMom:1:2101:1450:2134	77	*	0	0	*	*	0	0	AGCACGCTGCCGCGGGACCTGCCCA	?@@AD at DDHFH?DGIIIIG at FGFBF	BC:Z:ACCAGTTG	RG:Z:HiMom.1
-HiMom:1:2101:1450:2134	141	*	0	0	*	*	0	0	ACAAACCCTTGTGTCGAGGGCTGAC	CC at FDFDFFDFHFGIIE1CGGHBGE	BC:Z:ACCAGTTG	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
deleted file mode 100644
index cf5b43d..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.TGCAAGTA	LB:LN_TGCAAGTA	SM:SA_TGCAAGTA	CN:BI
-HiMom:1:1101:1242:2170	77	*	0	0	*	*	0	0	ATGGCAGGGCAGAGTTCTGATGAGT	CCCFFFFFHHGGGIFHEIIGIIII?	RG:Z:HiMom.1
-HiMom:1:1101:1242:2170	141	*	0	0	*	*	0	0	GGAAGGAAAAGAAGCACAAGTACAT	@@@DFDFFHHHGHHGIIGJJEHHIG	RG:Z:HiMom.1
-HiMom:1:2101:1163:2222	77	*	0	0	*	*	0	0	GAGCAGGCAAGGAGGACTTCTTGTT	CCCFFFFFGHHHHJJHHIJJJJJIJ	RG:Z:HiMom.1
-HiMom:1:2101:1163:2222	141	*	0	0	*	*	0	0	GAGCGATAATGGTTCTTTTCCTCAC	@@@DFFFFHHHHHJJJJJJJIJJJJ	RG:Z:HiMom.1
diff --git a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam b/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam
deleted file mode 100644
index 5574342..0000000
--- a/src/test/resources/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD	VN:1.5	SO:queryname
- at RG	ID:HiMom.1	PL:illumina	PU:HiMom.1.TGTAATCA	LB:LN_TGTAATCA	SM:SA_TGTAATCA	CN:BI
-HiMom:1:1101:1419:2119	77	*	0	0	*	*	0	0	.ATGACTATGGTAACTGAAAGAAAA	#1:A1BDADBFFDFIIIEEHECACF	RG:Z:HiMom.1
-HiMom:1:1101:1419:2119	141	*	0	0	*	*	0	0	ACTTTCCTTTTTTGTTTTACTTTAA	#########################	RG:Z:HiMom.1
-HiMom:1:1201:1208:2132	77	*	0	0	*	*	0	0	.CCTCAATGAGCGGCACTATGGGGG	#1=DDFFFHHHHGJJIJJGHIJGIJ	RG:Z:HiMom.1
-HiMom:1:1201:1208:2132	141	*	0	0	*	*	0	0	CTGTAGAAAGGATGGTCGGGCTCCA	@@CDFFFFGHFHHJIJJGJIBHJJG	RG:Z:HiMom.1
-HiMom:1:1201:1344:2147	77	*	0	0	*	*	0	0	TATCCTCCCTACTATGCCTAGAAGG	=?@DADEFHBHDFG>EFGDHGFGHD	RG:Z:HiMom.1
-HiMom:1:1201:1344:2147	141	*	0	0	*	*	0	0	ACGATTAGTTTTAGCATTGGAGTAG	@<??DDDDFHHHFGGHHIIIGGAGH	RG:Z:HiMom.1
diff --git a/src/test/resources/testng.xml b/src/test/resources/testng.xml
deleted file mode 100644
index 724ee35..0000000
--- a/src/test/resources/testng.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-
-<suite name="HTSJDK" verbose="2" parallel="methods" thread-count="8" data-provider-thread-count="8">
-
-    <test name="samtools">
-        <packages>
-            <package name="htsjdk.samtools"/>
-        </packages>
-    </test>
-    <test name="tribble">
-        <packages>
-            <package name="htsjdk.tribble"/>
-        </packages>
-    </test>
-    <test name="variant">
-        <packages>
-            <package name="htsjdk.variant"/>
-        </packages>
-    </test>
-</suite>
\ No newline at end of file
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..9f6464b
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,66 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+by_default: runtests
+
+TOP ?= $(abspath ..)
+MODULE = test
+
+include $(TOP)/build/Makefile.shell
+
+include $(TOP)/build/Makefile.config
+
+#-------------------------------------------------------------------------------
+# default
+#
+SUBDIRS =    \
+	fastq-loader    \
+	vcf-loader      \
+	kget            \
+	general-loader  \
+	vschema         \
+	align-info      \
+	align-cache     \
+	vdb-dump        \
+	vdb-validate    \
+	kar             \
+	copycat         \
+	fastdump        \
+	vdb-copy        \
+	qual-recalib-stat \
+	sra-pileup      \
+	srapath         \
+	fuse            \
+
+# under construction
+#    ngs-pileup      \
+
+# common targets for non-leaf Makefiles; must follow a definition of SUBDIRS
+include $(TOP)/build/Makefile.targets
+
+$(SUBDIRS):
+	@ $(MAKE) -C $@
+
+.PHONY: default $(SUBDIRS)
+
diff --git a/test/align-cache/CSRA_file b/test/align-cache/CSRA_file
new file mode 100644
index 0000000..18e06d2
Binary files /dev/null and b/test/align-cache/CSRA_file differ
diff --git a/test/align-cache/Makefile b/test/align-cache/Makefile
new file mode 100644
index 0000000..1b55d73
--- /dev/null
+++ b/test/align-cache/Makefile
@@ -0,0 +1,60 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/align-cache
+
+TEST_TOOLS = \
+
+ALL_TOOLS = \
+	$(TEST_TOOLS) \
+
+include $(TOP)/build/Makefile.env
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# align-cache tool tests
+#
+runtests: align-cache
+
+
+align-cache: $(BINDIR)/align-cache
+	@ rm -rf CSRA_file.cache
+	@ echo "vdb/schema/paths = \"$(VDB_INCDIR)\"" > tmp.kfg
+	@ export VDB_CONFIG=`pwd`; $(BINDIR)/align-cache -t 10 --min-cache-count 1 CSRA_file CSRA_file.cache
+	@ $(BINDIR)/vdb-validate CSRA_file.cache/ 2>&1 | grep --quiet "is consistent"
+	@ rm tmp.kfg
+	@ rm -rf CSRA_file.cache
+	
+vg: $(BINDIR)/align-cache
+	valgrind --ncbi --suppressions=$(SRCDIR)/valgrind.suppress $(BINDIR)/align-cache -t 10 --min-cache-count 1 CSRA_file CSRA_file.cache
diff --git a/test/align-cache/valgrind.suppress b/test/align-cache/valgrind.suppress
new file mode 100644
index 0000000..002d332
--- /dev/null
+++ b/test/align-cache/valgrind.suppress
@@ -0,0 +1,6 @@
+{
+   vt_cache
+   Memcheck:Leak
+   fun:calloc
+   fun:_ZN3ngs7Resolve*
+}
diff --git a/test/align-info/Makefile b/test/align-info/Makefile
new file mode 100644
index 0000000..3266e05
--- /dev/null
+++ b/test/align-info/Makefile
@@ -0,0 +1,48 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/align-info
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# runtests
+runtests: cmdline
+
+cmdline:
+	# make sure -h does not crash
+	$(BINDIR)/align-info -h 
\ No newline at end of file
diff --git a/test/copycat/Makefile b/test/copycat/Makefile
new file mode 100644
index 0000000..3f4ed99
--- /dev/null
+++ b/test/copycat/Makefile
@@ -0,0 +1,60 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/copycat
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+ifeq (1,$(HAVE_MAGIC))
+runtests: copy
+else
+runtests:
+	@ echo "NOTE - copycat tests are skipped:"          \
+		"copycat was not built"
+	@ echo "because it requires our internal library 'libkff'" \
+		"which requires 'libmagic' and its development headers."
+endif
+
+copy: 
+	@ echo "Starting copycat tests..."
+	@ rm -rf actual
+	@ $(BINDIR)/copycat -h >/dev/null
+	@ export PATH=$(BINDIR):$$PATH; vdb-config | grep bin; copycat ./input/1.xml actual/ >/dev/null && diff ./input/1.xml actual/1.xml 
+	@ rm -rf actual
diff --git a/test/copycat/input/1.xml b/test/copycat/input/1.xml
new file mode 100644
index 0000000..cc70b4f
--- /dev/null
+++ b/test/copycat/input/1.xml
@@ -0,0 +1,5 @@
+<ROOT version="2.6.2">
+  <archive id="1" path="1.tar" name="1.tar" size="10240" mtime="2016-04-07T21:06:20Z" filetype="Archive/TapeArchive" md5="41fbc9b272d12c815c8a4c301a354b95"  crc32="d7b8fc09">
+    <file id="2" path="1.tar/1" name="1" size="25" lines="4" mtime="2016-04-07T19:47:13Z" filetype="Unknown/Unknown" md5="293363f5942f2ca7e4d0a1aa9ffda34f"  offset="512"/>
+  </archive>
+</ROOT>
diff --git a/test/fastdump/Makefile b/test/fastdump/Makefile
new file mode 100644
index 0000000..ea3d1d0
--- /dev/null
+++ b/test/fastdump/Makefile
@@ -0,0 +1,53 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/fastdump
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+.PHONY: $(TEST_TOOLS)
+
+slowtests: fastdump1 fastdump2
+
+ACC = SRR341578
+SCRATCH = /tmp/$(shell whoami)/
+THREADS = 4
+
+fastdump1: prepare $(BINDIR)/fastdump $(BINDIR)/vdb-dump
+	@ mkdir -p $(SCRATCH)
+	@./test_no_1.sh $(ACC) $(SCRATCH) $(THREADS) $(BINDIR)
+
+fastdump2: $(BINDIR)/fastdump $(BINDIR)/vdb-dump
+	@ mkdir -p $(SCRATCH)
+	@./test_no_2.sh $(ACC) $(SCRATCH) $(THREADS) $(BINDIR)
+
+prepare:
+	@ export BINDIR=$(BINDIR) ; export VDB_INCDIR=$(VDB_INCDIR) ; \
+        ./copy-default-kfg.sh
diff --git a/test/fastdump/copy-default-kfg.sh b/test/fastdump/copy-default-kfg.sh
new file mode 100755
index 0000000..ad11d52
--- /dev/null
+++ b/test/fastdump/copy-default-kfg.sh
@@ -0,0 +1,12 @@
+# make sure we can find remote repository if site repository does not exist
+
+${BINDIR}/vdb-config -on repository/site/main/tracearc/root
+if [ "$?" != 0 ] ; then
+    if [ -f   ${BINDIR}/../../../../../../../ncbi-vdb/libs/kfg/default.kfg ]
+    then
+        cp -v ${BINDIR}/../../../../../../../ncbi-vdb/libs/kfg/default.kfg \
+                                                    ${BINDIR}/ncbi
+    else
+        cp -v ${VDB_INCDIR}/../libs/kfg/default.kfg ${BINDIR}/ncbi
+    fi
+fi
diff --git a/test/fastdump/test_no_1.sh b/test/fastdump/test_no_1.sh
new file mode 100755
index 0000000..25f5f12
--- /dev/null
+++ b/test/fastdump/test_no_1.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+ACC="$1"
+SCRATCH="$2"
+THREADS="$3"
+BINDIR="$4"
+
+echo ""
+echo "===== TESTING FASTDUMP: TEST #1 ( output-type = SPOT_ID,READ,SPOT_GROUP )=="
+echo "accession       : $ACC"
+echo "scratch-space at: $SCRATCH"
+echo "parallel threads: $THREADS"
+echo "binaries in     : $BINDIR"
+echo ""
+
+FASTDUMP_OUT="$SCRATCH$ACC.fastdump.txt"
+VDB_DUMP_OUT="$SCRATCH$ACC.vdb_dump.txt"
+
+clear_files()
+{
+    CMD="rm -rf $FASTDUMP_OUT $VDB_DUMP_OUT"
+    $CMD 2>&1 > /dev/null
+}
+
+clear_files
+
+#produce the output using the lookup-file
+CMD="$BINDIR/fastdump $ACC -t $SCRATCH -f special -o $FASTDUMP_OUT -e $THREADS -p"
+echo "$CMD"
+$CMD
+rc=$?; if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+
+#produce the same output using vdb-dump with internal schema-joins
+CMD="$BINDIR/vdb-dump $ACC -C SPOT_ID,READ,SPOT_GROUP -f tab"
+echo "$CMD"
+$CMD > $VDB_DUMP_OUT
+rc=$?; if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+
+#verify that the output of fastdump via vdb-dump
+CMD="diff $FASTDUMP_OUT $VDB_DUMP_OUT"
+echo "$CMD"
+$CMD 2>&1 > /dev/null
+rc=$?;
+if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+if [[ $rc == 0 ]]; then echo ">>>SUCCESS!"; fi
+
+clear_files
+
+exit $rc
diff --git a/test/fastdump/test_no_2.sh b/test/fastdump/test_no_2.sh
new file mode 100755
index 0000000..48495de
--- /dev/null
+++ b/test/fastdump/test_no_2.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+ACC="$1"
+SCRATCH="$2"
+THREADS="$3"
+BINDIR="$4"
+
+echo ""
+echo "===== TESTING FASTDUMP: TEST #2 ( output-type = FASTQ )===================="
+echo "accession       : $ACC"
+echo "scratch-space at: $SCRATCH"
+echo "parallel threads: $THREADS"
+echo "binaries in     : $BINDIR"
+echo ""
+
+FASTDUMP_OUT="$SCRATCH$ACC.fastdump.txt"
+VDB_DUMP_OUT="$SCRATCH$ACC.vdb_dump.txt"
+
+clear_files()
+{
+    CMD="rm -rf $FASTDUMP_OUT $VDB_DUMP_OUT"
+    $CMD 2>&1 > /dev/null
+}
+
+clear_files
+
+#produce the output using the lookup-file
+CMD="$BINDIR/fastdump $ACC -t $SCRATCH -f fastq -o $FASTDUMP_OUT -e $THREADS -p"
+echo "$CMD"
+$CMD
+rc=$?; if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+
+#produce the same output using vdb-dump with internal schema-joins
+CMD="$BINDIR/vdb-dump $ACC -f fastq"
+echo "$CMD"
+$CMD > $VDB_DUMP_OUT
+rc=$?; if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+
+#verify that the output of fastdump via vdb-dump
+CMD="diff $FASTDUMP_OUT $VDB_DUMP_OUT"
+echo "$CMD"
+$CMD 2>&1 > /dev/null
+rc=$?;
+if [[ $rc != 0 ]]; then echo "$CMD failed"; exit $rc; fi
+if [[ $rc == 0 ]]; then echo ">>>SUCCESS!"; fi
+
+clear_files
+
+exit $rc
diff --git a/test/fastq-loader/.gitignore b/test/fastq-loader/.gitignore
new file mode 100644
index 0000000..508061b
--- /dev/null
+++ b/test/fastq-loader/.gitignore
@@ -0,0 +1 @@
+actual
diff --git a/test/fastq-loader/Makefile b/test/fastq-loader/Makefile
new file mode 100644
index 0000000..2cbdd84
--- /dev/null
+++ b/test/fastq-loader/Makefile
@@ -0,0 +1,217 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+#TODO: transfer slowtests/big_loads (see CVS)
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/fastq-loader
+
+TEST_TOOLS = \
+	wb-test-fastq \
+	test-fastq-loader
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+FASTQ_TEST_SRC = \
+	wb-test-fastq
+
+FASTQ_TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_TEST_SRC))
+
+FASTQ_TEST_LIB = \
+	-skapp \
+	-sktst \
+	-sfastqloader \
+	-sload \
+	-sncbi-wvdb \
+
+$(TEST_BINDIR)/wb-test-fastq: $(FASTQ_TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(FASTQ_TEST_LIB)
+
+wb: wb-test-fastq
+	$(TEST_BINDIR)/wb-test-fastq  2>&1
+
+#-------------------------------------------------------------------------------
+# test-fastqtest-loader
+#
+FASTQTEST_LOADER_SRC = \
+	test-fastq-loader
+
+FASTQTEST_LOADER_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQTEST_LOADER_SRC))
+
+$(TEST_BINDIR)/test-fastq-loader: $(FASTQTEST_LOADER_OBJ)
+	$(LP) --exe -o $@ $^ $(FASTQ_TEST_LIB)
+
+tfl:
+	$(MAKE) -C $(OBJDIR) -f $(SRCDIR)/Makefile test-fastq-loader
+	$(TEST_BINDIR)/test-fastq-loader
+
+.PHONY: test-fastq-loader
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+runtests: set_schema smalltests
+	rm -v tmp.kfg
+
+set_schema:
+	echo "vdb/schema/paths = \"$(VDB_INCDIR)\"" > tmp.kfg
+
+SMALLRUN = @ export NCBI_SETTINGS=/ ; export VDB_CONFIG=`pwd` ; \
+	$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)
+smalltests: $(TEST_TOOLS)
+	-rm -rf $(SRCDIR)/actual
+#   Small tests
+#   Input:
+#       Quality encoding: phred/logodds, ascii/decimal
+#           1.1 phred 33
+	$(SMALLRUN) 1.1 0 $(SRCDIR)/input/1.1.fastq --quality PHRED_33
+#           1.2 phred 64
+	$(SMALLRUN) 1.2 0 $(SRCDIR)/input/1.2.fastq --quality PHRED_64
+#           1.3 phred 33, decimal qualities
+	$(SMALLRUN) 1.3 3 $(SRCDIR)/input/1.3.fastq --quality PHRED_33
+#           1.4 logodds 64
+	$(SMALLRUN) 1.4 0 $(SRCDIR)/input/1.4.fastq --quality LOGODDS
+#
+#       Single input file
+#           2.1 reads only, basespace
+	$(SMALLRUN) 2.1 0 $(SRCDIR)/input/2.1.fastq --quality PHRED_33
+#           2.1.1 reads only, colorspace
+	$(SMALLRUN) 2.1.1 0 $(SRCDIR)/input/2.1.1.fastq --quality PHRED_33
+#           2.2 qualities only
+	@#-$(SMALLRUN) 2.2 0 $(SRCDIR)/input/2.2.fastq --quality PHRED_33
+#           2.3 reads+qualities, qualities before reads
+	@#-$(SMALLRUN) 2.3 0 $(SRCDIR)/input/2.3.fastq --quality PHRED_33
+#           2.4 reads+qualities, reads before qualities
+	@#-$(SMALLRUN) 2.4 0 $(SRCDIR)/input/2.4.fastq --quality PHRED_33
+#           2.5 reads+qualities, paired up
+	$(SMALLRUN) 2.5 0 $(SRCDIR)/input/2.5.fastq --quality PHRED_33
+#           2.6 spot assembly
+	$(SMALLRUN) 2.6 0 $(SRCDIR)/input/2.6.fastq --quality PHRED_33
+#           2.7 spot assembly, read numbers not specified
+	$(SMALLRUN) 2.7 0 $(SRCDIR)/input/2.7.fastq --quality PHRED_33
+#           2.8 handling of N in reads, ALTREAD is a static column
+#           TODO; investigate intermittent failure (FIXED_SPOT_LEN == 0, not 3)
+	@#-$(SMALLRUN) 2.8 0 $(SRCDIR)/input/2.8.fastq --quality PHRED_33
+#           2.8.1 handling of N in reads, ALTREAD is a physical column
+	$(SMALLRUN) 2.8.1 0 $(SRCDIR)/input/2.8.1.fastq --quality PHRED_33
+#           2.9 mismatching length of sequence and quality (qualities shorter)
+	$(SMALLRUN) 2.9 3 $(SRCDIR)/input/2.9.fastq --quality PHRED_33
+#           2.9.1 mismatching length of sequence and quality (qualities longer)
+	$(SMALLRUN) 2.9.1 3 $(SRCDIR)/input/2.9.1.fastq --quality PHRED_33
+#
+#       Multiple files
+#           3.1 reads+qualities together
+	$(SMALLRUN) 3.1 0 $(SRCDIR)/input/3.1a.fastq $(SRCDIR)/input/3.1b.fastq --quality PHRED_33
+#           3.2 qualities separately from reads, reads file comes first
+	@#-$(SMALLRUN) 3.2 0 $(SRCDIR)/input/3.2a.fastq $(SRCDIR)/input/3.2b.fastq --quality PHRED_33
+#           3.3 qualities separately from reads, qualities file comes first (reject?)
+	@#-$(SMALLRUN) 3.3 0 $(SRCDIR)/input/3.3a.fastq $(SRCDIR)/input/3.3b.fastq --quality PHRED_33
+#           3.4 default read number
+#	$(SMALLRUN) 3.4 0 -r 1 $(SRCDIR)/input/3.4a.fastq -r 2 $(SRCDIR)/input/3.4b.fastq --quality PHRED_33
+#
+#   Command line options:
+#           4.1 --tmpfs             temporary files created at the specified location
+	@echo "running 4.1"; export NCBI_SETTINGS=/; export VDB_CONFIG=`pwd`; \
+	 export LD_LIBRARY_PATH=$(LIBDIR);$(BINDIR)/latf-load \
+	 $(SRCDIR)/input/4.fastq --tmpfs $(SRCDIR)/actual/ -v \
+	 -o actual/4.1.obj --quality PHRED_33 \
+	 | grep "Path for scratch files: $(SRCDIR)/actual/" >/dev/null
+#           4.2 --qual-quant        quality values are quantized as specified
+	$(SMALLRUN) 4.2 0 $(SRCDIR)/input/4.fastq --qual-quant 1:10,10:20,20:30,30:- --quality PHRED_33
+#           4.3 --cache-size        handled correctly
+	@echo "running 4.3"; export NCBI_SETTINGS=/; export VDB_CONFIG=`pwd`; \
+	 export LD_LIBRARY_PATH=$(LIBDIR); \
+	 $(BINDIR)/latf-load $(SRCDIR)/input/4.fastq --cache-size 10 -v \
+     -o actual/4.1.obj --quality PHRED_33 \
+     | grep "Cache size: 10M" >/dev/null
+#           4.3.1 --cache-size      rejected if invalid
+	$(SMALLRUN) 4.3.1 3 $(SRCDIR)/input/4.fastq --cache-size BIG --quality PHRED_33
+#           4.4 --max-rec-count     stops at the specified record #
+	$(SMALLRUN) 4.4 0 $(SRCDIR)/input/4.4.fastq --max-rec-count 3 --quality PHRED_33
+#           4.5 --max-err-count     stops after the specified # of errors
+	$(SMALLRUN) 4.5 3 $(SRCDIR)/input/4.5.fastq --max-err-count 2 --quality PHRED_33
+#           4.5.1 --max-err-pct     fails if % of error records is too high
+	$(SMALLRUN) 4.5.1 3 $(SRCDIR)/input/4.5.1.fastq --quality PHRED_33  --max-err-count 10 --max-err-pct 20
+#           4.6 --platform          saves correct value in the PLATFORM column
+	$(SMALLRUN) 4.6 0 $(SRCDIR)/input/4.fastq -p LS454 --quality PHRED_33
+#           4.6.1 --platform        rejects invalid values
+	$(SMALLRUN) 4.6.1 3 $(SRCDIR)/input/4.fastq -p SOMETHINGELSE --quality PHRED_33
+#           4.7 input file missing
+	$(SMALLRUN) 4.7 3 $(SRCDIR)/input/not_there --quality PHRED_33
+#   Gzipped input
+	$(SMALLRUN) 5.0 0 $(SRCDIR)/input/5.0.fastq.gz --quality PHRED_33
+#   Misparsed quality
+	$(SMALLRUN) 6.0 0 $(SRCDIR)/input/6.0.fastq --quality PHRED_33
+#   PACBIO fastq
+	$(SMALLRUN) 7.1 0 $(SRCDIR)/input/7.1.fastq --platform=PACBIO --quality PHRED_33
+	$(SMALLRUN) 7.2 0 $(SRCDIR)/input/7.2.fastq --platform=PACBIO --quality PHRED_33
+	$(SMALLRUN) 7.3 0 $(SRCDIR)/input/7.3.fastq --platform=PACBIO --quality PHRED_33
+#   secondary read numbers other than 3
+	$(SMALLRUN) 8.0 0 $(SRCDIR)/input/8.0.fastq --quality PHRED_33
+#   reject inconsistent secondary read numbers
+	$(SMALLRUN) 8.1 3 $(SRCDIR)/input/8.1.fastq --quality PHRED_33
+#   newest Illumina tag line variation ("_" instead of " /")
+	$(SMALLRUN) 9.0 0 $(SRCDIR)/input/9.0.fastq --quality PHRED_33
+#   accepting ascii quality values up to 126
+	$(SMALLRUN) 10.0 0 $(SRCDIR)/input/10.0.fastq --quality PHRED_33
+    # 2-file fasta, tag line Run.Spot.Read
+	$(SMALLRUN) 11.0 0 $(SRCDIR)/input/11.0.1.fasta $(SRCDIR)/input/11.0.2.fasta --quality PHRED_33
+    # 2-file fastq, tag line Run.Spot.Read
+	$(SMALLRUN) 11.1 0 $(SRCDIR)/input/11.1.1.fastq $(SRCDIR)/input/11.1.2.fastq --quality PHRED_33
+    # Illumina, ignore barcodes
+	$(SMALLRUN) 12.0 0 $(SRCDIR)/input/12.0.fastq --quality PHRED_33 --ignore-illumina-tags
+    # Illumina, use barcodes as spotgroups
+	$(SMALLRUN) 12.1 0 $(SRCDIR)/input/12.1.fastq --quality PHRED_33
+    # Illumina, use barcodes as spotgroups, alternative format
+	$(SMALLRUN) 12.2 0 $(SRCDIR)/input/12.2.fastq --quality PHRED_33
+    # Consume our own dog food (13.0.fastq created by fastq-dump )
+	$(SMALLRUN) 13.0 0 $(SRCDIR)/input/13.0.fastq --quality PHRED_33
+    # Consume our own dog food (13.1.fastq created by fastq-dump -F )
+	$(SMALLRUN) 13.1 0 $(SRCDIR)/input/13.1.fastq --quality PHRED_33
+    # SRA-2932: 30 is the preferred value for qualities when reading FASTA
+	$(SMALLRUN) 14.0 0 $(SRCDIR)/input/14.0.fasta $(SRCDIR)/input/14.0.fasta --quality PHRED_33
+	rm -rf $(SRCDIR)/actual
+    # VDB-3154: buffer insufficient
+	$(SMALLRUN) 15.0 0 $(SRCDIR)/input/15.0.fastq --quality PHRED_33
+
+onetest:
+	rm -rf $(SRCDIR)/actual
+    # VDB-3154: buffer insufficient
+	$(SMALLRUN) 15.0 0 $(SRCDIR)/input/15.0.fastq --quality PHRED_33
+
diff --git a/test/fastq-loader/expected/1.1.stdout b/test/fastq-loader/expected/1.1.stdout
new file mode 100644
index 0000000..f4f8914
--- /dev/null
+++ b/test/fastq-loader/expected/1.1.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 36
+   BIO_BASE_COUNT: 36
+   CMP_BASE_COUNT: 36
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 5, 13, 27, 22, 22, 19, 22, 23, 23, 23, 24, 24, 24, 23, 22, 22, 21, 22, 22, 21, 25, 24, 24, 22, 24, 22, 19, 18, 20, 19, 22, 22, 19, 22, 22, 24
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 0
+         READ_SEG: [0, 36], [36, 0]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/1.2.stdout b/test/fastq-loader/expected/1.2.stdout
new file mode 100644
index 0000000..f5940fb
--- /dev/null
+++ b/test/fastq-loader/expected/1.2.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 36
+   BIO_BASE_COUNT: 36
+   CMP_BASE_COUNT: 36
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 16, 25, 25, 22, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 0
+         READ_SEG: [0, 36], [36, 0]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/1.3.stderr b/test/fastq-loader/expected/1.3.stderr
new file mode 100644
index 0000000..a40494f
--- /dev/null
+++ b/test/fastq-loader/expected/1.3.stderr
@@ -0,0 +1,4 @@
+latf-load err: file="1.3.fastq"
+latf-load err:Invalid quality value (' '=32, position 2): for Phred33, valid range is from 33 to 126.
+latf-load err: format unsupported while parsing file - accession="obj" errors="1" status="failure"
+latf-load err: format unsupported while parsing file - load failed
diff --git a/test/fastq-loader/expected/1.3.stdout b/test/fastq-loader/expected/1.3.stdout
new file mode 100644
index 0000000..896a550
--- /dev/null
+++ b/test/fastq-loader/expected/1.3.stdout
@@ -0,0 +1,27 @@
+     ALIGNMENT_COUNT: 0, 0
+          BASE_COUNT: 36
+      BIO_BASE_COUNT: 36
+      CMP_BASE_COUNT: 36
+            CMP_READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+        COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+              CS_KEY: TT
+           CS_NATIVE: false
+         MAX_SPOT_ID: 1
+         MIN_SPOT_ID: 1
+                NAME: 1
+            PLATFORM: SRA_PLATFORM_UNDEFINED
+PRIMARY_ALIGNMENT_ID: 0, 0
+             QUALITY: 8, 9, 10, 11, 12, 13, 14, 15, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 7, 8, 9, 10, 11, 12, 13
+           RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+            READ_LEN: 36, 0
+            READ_SEG: [0, 36], [36, 0]
+          READ_START: 0, 36
+           READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD, SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+          SIGNAL_LEN: 0
+          SPOT_COUNT: 1
+          SPOT_GROUP: 
+             SPOT_ID: 1
+          TMP_KEY_ID: 0
+          TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/1.4.stdout b/test/fastq-loader/expected/1.4.stdout
new file mode 100755
index 0000000..d8883a4
--- /dev/null
+++ b/test/fastq-loader/expected/1.4.stdout
@@ -0,0 +1,90 @@
+       BASE_COUNT: 216
+   BIO_BASE_COUNT: 216
+   CMP_BASE_COUNT: 216
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 131033233331013023032230132132312301331032212003012030012223002013323212
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 72
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 34, 36, 40, 40, 40, 40, 40, 40, 5, 40, 8, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 33, 40, 40, 40, 40, 40, 40, 40, 13, 40, 40, 40, 12, 40, 40, 40, 40, 40, 1, 40, 40, 3, 40
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GCAATAGCGCGTTGCCTAATCTAACGACGATGATTGATGGCTCAGGGCCAGGCCCAGAGCCCTTGCGATCAG
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 36
+         READ_SEG: [0, 36], [36, 36]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 72
+         TRIM_LEN: 72
+       TRIM_START: 0
+
+       BASE_COUNT: 216
+   BIO_BASE_COUNT: 216
+   CMP_BASE_COUNT: 216
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 110003323031230312213200233330230230030231233302133312123321320321233203
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 72
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 40, 40, 40, 40, 40, 14, 24, 40, 40, 9, 2, 4, 40, 32, 12, 40, 13, 3, 3, 2, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 34, 40, 11, 40, 40, 40, 40, 40, 40, 40, 5
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTTTTATCGGCAGCCGTCTGCTTTCGCGCCTAAGCCTAAGCAGCGCCTGCGCAGTCGCTGCTTAGTCGCTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 36
+         READ_SEG: [0, 36], [36, 36]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 72
+         TRIM_LEN: 72
+       TRIM_START: 0
+
+       BASE_COUNT: 216
+   BIO_BASE_COUNT: 216
+   CMP_BASE_COUNT: 216
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 122312131322312131021100002130102223101233212132311133020101010332200312
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 72
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 24, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 15, 21, 40, 40, 40, 40, 40, 40, 40, 10, 40, 27, 40
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GAGCAGTACGAGCAGTACCTGTTTTTCATTGGAGATGGTCGCTGACGATGTGCGGAACCAACCGCTCCCGTC
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 36
+         READ_SEG: [0, 36], [36, 36]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 3
+         SPOT_LEN: 72
+         TRIM_LEN: 72
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/10.0.stdout b/test/fastq-loader/expected/10.0.stdout
new file mode 100644
index 0000000..5b0db4e
--- /dev/null
+++ b/test/fastq-loader/expected/10.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 21
+   BIO_BASE_COUNT: 21
+   CMP_BASE_COUNT: 21
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 21
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 65, 65, 93, 68, 68, 68, 68, 68, 70, 70, 70, 66, 70, 72, 72, 71, 71, 66, 68, 70, 70
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 0
+         READ_SEG: [0, 21], [21, 0]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 21
+         TRIM_LEN: 21
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/11.0.stdout b/test/fastq-loader/expected/11.0.stdout
new file mode 100644
index 0000000..2ecc0d6
--- /dev/null
+++ b/test/fastq-loader/expected/11.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 152
+   BIO_BASE_COUNT: 152
+   CMP_BASE_COUNT: 152
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 12231033031122330010100000000000000000000000000203301033111000111011021301111301123113320231133000013123101102202202000000000000001300011000033112330033
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 152
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 3 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GAGCAATAATGTCTATTTGGTTTTTTTTTTTTTTTTTTTTTTTTTTTCCGCCAATACACCCCACAACAAGTAACACGCCACTACATAGGATGTATTTTTGCAGCAACAAGAAGAAGGGGGGGGGGGGGGGTAAAACAAAAATACAGCGGGCG
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 76, 76
+         READ_SEG: [0, 76], [76, 76]
+       READ_START: 0, 76
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 152
+         TRIM_LEN: 152
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/11.1.stdout b/test/fastq-loader/expected/11.1.stdout
new file mode 100644
index 0000000..bfaeb2a
--- /dev/null
+++ b/test/fastq-loader/expected/11.1.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 202
+   BIO_BASE_COUNT: 202
+   CMP_BASE_COUNT: 202
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 0300232002130023102002201303012112133111010333330332133032020333303000312301230003311300303300333003003002320021300231020022013030121121331110103333303321330320203333030003123012300033113003033003330030
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 202
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 34, 34, 34, 37, 37, 37, 37, 37, 39, 39, 38, 39, 38, 41, 41, 41, 41, 41, 41, 41, 40, 40, 41, 41, 38, 41, 41, 40, 41, 38, 40, 39, 39, 40, 41, 37, 33, 39, 38, 40, 40, 41, 38, 37, 36, 31, 33, 39, 40, 40, 36, 34, 36, 39, 40, 40, 38, 40, 38, 40, 39, 39, 40, 40, 41, 40, 40, 40, 41, 38, 36, 36, 34, 39, 39, 37, 31, 36, 38, 39, 38, 35, 39, 38, 36, 39, 37, 36, 36, 39, 39, 37, 37, 37, 35, 37, 37, 37, 36, 36, 31, 34, 34, 34, 37, 37, 37, 37, 37, 39, 39, 38, 39, 38, 41, 41, 41, 41, 4 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: TAAAGCTTTCATTTCGTTCCCTCCATTAACTGTCATACACCAATATATTATCATAATCCTTATATTAAAATGATTGATTTTATGTAAATTATTTATAAATTTAAAGCTTTCATTTCGTTCCCTCCATTAACTGTCATACACCAATATATTATCATAATCCTTATATTAAAATGATTGATTTTATGTAAATTATTTATAAATT
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 101, 101
+         READ_SEG: [0, 101], [101, 101]
+       READ_START: 0, 101
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 202
+         TRIM_LEN: 202
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/12.0.stdout b/test/fastq-loader/expected/12.0.stdout
new file mode 100644
index 0000000..9ac9d1f
--- /dev/null
+++ b/test/fastq-loader/expected/12.0.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 42
+   BIO_BASE_COUNT: 42
+   CMP_BASE_COUNT: 42
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 21
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 65, 65, 93, 68, 68, 68, 68, 68, 70, 70, 70, 66, 70, 72, 72, 71, 71, 66, 68, 70, 70
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 0
+         READ_SEG: [0, 21], [21, 0]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 21
+         TRIM_LEN: 21
+       TRIM_START: 0
+
+       BASE_COUNT: 42
+   BIO_BASE_COUNT: 42
+   CMP_BASE_COUNT: 42
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 21
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 65, 65, 93, 68, 68, 68, 68, 68, 70, 70, 70, 66, 70, 72, 72, 71, 71, 66, 68, 70, 70
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 0
+         READ_SEG: [0, 21], [21, 0]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 21
+         TRIM_LEN: 21
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/12.1.stdout b/test/fastq-loader/expected/12.1.stdout
new file mode 100644
index 0000000..37ace54
--- /dev/null
+++ b/test/fastq-loader/expected/12.1.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 42
+   BIO_BASE_COUNT: 42
+   CMP_BASE_COUNT: 42
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 21
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 65, 65, 93, 68, 68, 68, 68, 68, 70, 70, 70, 66, 70, 72, 72, 71, 71, 66, 68, 70, 70
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 0
+         READ_SEG: [0, 21], [21, 0]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: SG1
+          SPOT_ID: 1
+         SPOT_LEN: 21
+         TRIM_LEN: 21
+       TRIM_START: 0
+
+       BASE_COUNT: 42
+   BIO_BASE_COUNT: 42
+   CMP_BASE_COUNT: 42
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 21
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 65, 65, 93, 68, 68, 68, 68, 68, 70, 70, 70, 66, 70, 72, 72, 71, 71, 66, 68, 70, 70
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 0
+         READ_SEG: [0, 21], [21, 0]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: SG2
+          SPOT_ID: 2
+         SPOT_LEN: 21
+         TRIM_LEN: 21
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/12.2.stdout b/test/fastq-loader/expected/12.2.stdout
new file mode 100644
index 0000000..e3207c8
--- /dev/null
+++ b/test/fastq-loader/expected/12.2.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 42
+   BIO_BASE_COUNT: 42
+   CMP_BASE_COUNT: 42
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 202311120113300010103202311120113300010103
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 42
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CCTACACTTGTATTTTGGTTACCTACACTTGTATTTTGGTTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 21, 21
+         READ_SEG: [0, 21], [21, 21]
+       READ_START: 0, 21
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: ATCACG
+          SPOT_ID: 1
+         SPOT_LEN: 42
+         TRIM_LEN: 42
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/13.0.stdout b/test/fastq-loader/expected/13.0.stdout
new file mode 100644
index 0000000..1f4dc2b
--- /dev/null
+++ b/test/fastq-loader/expected/13.0.stdout
@@ -0,0 +1,90 @@
+       BASE_COUNT: 798
+   BIO_BASE_COUNT: 798
+   CMP_BASE_COUNT: 798
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 02123011032113003322110220022200103231333121221313323333221121030210103010021013001013213022003000313012103130101022120231301120133013301021030022010303311212103020322101303323213222201312030133023222030132201031220213011122033133303021323002311003110321203331102202000203
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 28, 28, 28, 28, 36, 28, 28, 37, 29, 28, 28, 28, 27, 36, 30, 8, 27, 28, 26, 28, 26, 37, 28, 27, 39, 33, 13, 28, 24, 39, 33, 13, 33, 24, 22, 28, 27, 28, 28, 28, 26, 28, 28, 27, 26, 28, 28, 28, 28, 28, 28, 27, 27, 28, 28, 28, 28, 28, 27, 28, 27, 35, 26, 33, 26, 27, 31, 24, 35, 28, 33, 26, 34, 29, 9, 27, 31, 22, 27, 34, 30, 9, 33, 25, 25, 26, 25, 25, 34, 27, 26, 37, 33, 16, 38, 34, 22, 8, 24, 26, 33, 25, 27, 26, 35, 28, 26, 27, 34, 28, 34, 28, 33, 26, 27, 27, 27, 30, 21, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGCCACCGACATTTATCTGTTCTTTCTCCCAATCGTATACTGAGTACGCTATATCTGTCAATTCAACCGGTTTCAACGGGTTGCTGCCTCCCGGGGCATTGACCGTAACCAAGACTTCGTAACAGGTATTGCGGTTCAATTTCTTGGCCGCACTGACCGGAATCTGGTAATAGCTGCTCTCCATGAATTGCGGATCTCCGGTAGAACCGTCTTCATTGTGAGGCGTATAATTCATCGGGATGTTTACAATCAGGCGCACCTCCTTTTCCG
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 272
+         READ_SEG: [0, 272]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 272
+         TRIM_LEN: 272
+       TRIM_START: 0
+
+       BASE_COUNT: 798
+   BIO_BASE_COUNT: 798
+   CMP_BASE_COUNT: 798
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 0212133120302031103223023130302333331100230101211112020102102023030100111020031210320003031033121131131213113211032000132301322100113002211313331220312000132031302330330022331330202022022002211001010221301221321323012311302113311332101033223110202203011220212312
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 28, 28, 26, 26, 28, 28, 28, 26, 35, 26, 34, 25, 30, 20, 28, 25, 37, 29, 27, 28, 28, 37, 29, 27, 28, 28, 36, 27, 37, 29, 27, 27, 28, 28, 28, 28, 28, 41, 35, 16, 26, 37, 28, 36, 28, 26, 25, 27, 28, 28, 28, 36, 28, 36, 27, 36, 27, 27, 34, 24, 33, 23, 28, 31, 21, 37, 28, 40, 33, 14, 28, 25, 34, 27, 36, 31, 12, 25, 25, 25, 34, 27, 26, 37, 33, 20, 5, 33, 25, 21, 29, 21, 27, 27, 22, 25, 27, 28, 27, 28, 28, 28, 27, 27, 26, 26, 28, 28, 27, 27, 26, 34, 28, 28, 37, 34, 20, 6, 23, [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGTATGAATTCCGTGGCTCGGATGCCGGATATATGTTTCGGTTGACACAGGAACCTGGAAGCCGGTTTGTGGAAATGACCGAAAATTACCGCAGTGCACGTCATGTAGTGGCTTTTGCTAACGAGTTTGTAAAGACATGCGCAGAATGAAAACGAATGCCTATTATTTCTATGCGGAAGGAGGAGGGAGTGGGTTGGAGTAACTCATCATCGGTCGTGCCTGTATGTATCAACCGCTCGTGGAAGAATTGTCTTCAGCAG
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 262
+         READ_SEG: [0, 262]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 262
+         TRIM_LEN: 262
+       TRIM_START: 0
+
+       BASE_COUNT: 798
+   BIO_BASE_COUNT: 798
+   CMP_BASE_COUNT: 798
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 021223230310323132313220212100222021223323122220130103132133332013121323122301300232301313201211100211212211223032322123003120303302023102030103111320011332210331020023130202021223113011030132013220123232330313100113321033223312011032123131023010313100003120312200
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 28, 28, 27, 28, 28, 26, 27, 37, 29, 28, 35, 26, 28, 26, 28, 20, 28, 28, 24, 27, 27, 27, 37, 29, 27, 28, 28, 41, 35, 16, 28, 28, 37, 28, 28, 28, 28, 28, 26, 27, 27, 27, 28, 28, 28, 28, 37, 29, 27, 37, 28, 37, 28, 27, 28, 28, 28, 28, 28, 27, 28, 28, 34, 27, 27, 27, 27, 27, 27, 26, 26, 27, 27, 26, 27, 34, 27, 26, 37, 33, 17, 27, 25, 27, 34, 27, 23, 27, 27, 27, 34, 27, 27, 26, 25, 28, 37, 33, 16, 27, 27, 27, 25, 27, 27, 27, 28, 26, 28, 27, 35, 28, 27, 28, 27, 27, 26, 28, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGATCGGCAATCGTAGCATCTTCAGTTTCTCCTGAGCGATGAGAGGTAACCGTAGTATATCCATGACGATGAGCCATTTCGATTGCATCCAGTGTTTCACTGAGTGAGCCGATCTGATTTACTTAATAAGGATGGAATTGGCACATCCCACGCTCAATACCTTTCGTAAGGAAGTCTACATTGTTAACGAACGAGGTCGATCGCCGTACCCACGCTGGCGAGCGTCCACCGACTACGTTCGGTTACGTTTTTACTTACTCCC
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 264
+         READ_SEG: [0, 264]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 3
+         SPOT_LEN: 264
+         TRIM_LEN: 264
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/13.1.stdout b/test/fastq-loader/expected/13.1.stdout
new file mode 100644
index 0000000..fda3e5c
--- /dev/null
+++ b/test/fastq-loader/expected/13.1.stdout
@@ -0,0 +1,90 @@
+       BASE_COUNT: 605
+   BIO_BASE_COUNT: 605
+   CMP_BASE_COUNT: 605
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 021210023002012331130011033133230233111022331010003110311021202310200113011320222330110103222021332332130211230321222111331011200023320310203112311200023320.
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 28, 27, 25, 22, 37, 30, 8, 24, 37, 30, 8, 29, 18, 27, 28, 27, 28, 28, 28, 37, 30, 9, 27, 35, 25, 27, 27, 27, 28, 27, 25, 37, 29, 28, 27, 28, 28, 25, 35, 26, 28, 28, 26, 28, 35, 26, 43, 36, 23, 11, 19, 24, 36, 27, 28, 28, 36, 28, 28, 26, 36, 28, 28, 28, 36, 27, 37, 31, 10, 28, 28, 36, 27, 28, 28, 27, 35, 28, 27, 23, 27, 28, 34, 26, 26, 32, 24, 31, 22, 26, 27, 24, 29, 21, 27, 27, 28, 28, 28, 27, 28, 27, 27, 32, 25, 23, 27, 25, 26, 34, 27, 27, 28, 27, 26, 27, 27, 27, 24,  [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGTTTCGGGAACTATGTAAACAATACGCTAAGCGTGTTCTATGGTTTTACAATGTTCAGGATGGAAACATTGTAGGAGATAACAACCGAGAAGTATCGCTGCCTGTCGGCTGAGACACGCAACAGGGGATAGGCAAGGCACTACAGGGGATAGGN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 157
+         READ_SEG: [0, 157]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 157
+         TRIM_LEN: 157
+       TRIM_START: 0
+
+       BASE_COUNT: 605
+   BIO_BASE_COUNT: 605
+   CMP_BASE_COUNT: 605
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 0212323113012102000312333011322331202002303323200230312320022301013000022123103113311011103312010311102202032031113210221021002200300012000033000001020130200232210123131000123113210202302102001012123321013310300302131332122130023313123321320021112313200221112022201330102030312122
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 27, 28, 19, 24, 28, 25, 28, 27, 28, 35, 26, 28, 28, 37, 28, 41, 34, 19, 4, 24, 28, 28, 28, 28, 36, 27, 28, 28, 27, 24, 28, 28, 28, 26, 36, 28, 39, 33, 13, 27, 35, 26, 28, 28, 28, 28, 36, 29, 7, 27, 35, 25, 27, 28, 27, 28, 37, 30, 9, 28, 27, 35, 26, 36, 27, 28, 44, 36, 24, 13, 3, 28, 27, 27, 26, 24, 33, 26, 25, 27, 27, 26, 26, 27, 31, 24, 26, 25, 31, 24, 28, 23, 28, 29, 20, 34, 28, 27, 25, 23, 34, 27, 28, 29, 21, 31, 23, 28, 28, 20, 27, 27, 27, 27, 28, 27, 35, 28, 27, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGCTACATTGACCTTTTACTATAACATCTATGAAGGGATTATCGAAAGCCGTCGAAAGATTGGTAAAAAGACTACCGTGCGTGGTGTTATGAACCGTGTTCTTCCGAATGTGCTGGAGTTCAAAGAAATTTTGAAAAATAAAAAACCTTGCCTTTCGAGTTGATGCAAAACTACATCAAGGATTCAAGGGTTGACTATCAACGCAATTTAAGTACGCTGAGTAAAGCGTACTATCATCCCTGTGATGCTTTCTGTGAAGAGGTATTGGAATTACTGAG
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 280
+         READ_SEG: [0, 280]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 280
+         TRIM_LEN: 280
+       TRIM_START: 0
+
+       BASE_COUNT: 605
+   BIO_BASE_COUNT: 605
+   CMP_BASE_COUNT: 605
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 02120000213300010201113302312032021013211123101211131013113313011230110302210130301112310031321011330113021333300113020302202122211133101120002332031020311111200023320.
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 28, 28, 27, 43, 36, 23, 12, 1, 28, 27, 24, 40, 34, 18, 1, 33, 23, 32, 22, 26, 28, 28, 28, 36, 27, 28, 28, 28, 36, 27, 27, 27, 16, 26, 29, 18, 26, 27, 27, 28, 28, 28, 28, 28, 36, 28, 28, 28, 28, 28, 28, 28, 36, 28, 28, 28, 28, 28, 28, 28, 28, 36, 27, 28, 28, 28, 35, 25, 28, 33, 26, 34, 27, 28, 28, 34, 27, 28, 34, 27, 34, 27, 27, 28, 28, 28, 27, 35, 30, 10, 27, 27, 28, 27, 33, 25, 27, 28, 27, 33, 25, 27, 28, 33, 26, 28, 27, 28, 27, 28, 35, 30, 11, 28, 27, 34, 26, 32, 25, [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCAGGGGGACGCCCCAAGGTGTATTCGTCCGAAGTTGCTGTGATGGTCACATGGTACATACGGTGATTGTTAAGACCATTAACACTACCCGTAGTTGTATTGTAAGTATATTTGTAAGGCCTCCTGAGACACGCAACAGGGGATAGGCAAGGCACACAGGGGATAGGN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 168
+         READ_SEG: [0, 168]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 3
+         SPOT_LEN: 168
+         TRIM_LEN: 168
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/14.0.stdout b/test/fastq-loader/expected/14.0.stdout
new file mode 100755
index 0000000..822f5e1
--- /dev/null
+++ b/test/fastq-loader/expected/14.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 76
+   BIO_BASE_COUNT: 76
+   CMP_BASE_COUNT: 76
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 1223103303112233001010000000000000000000000000020330103311100011101102130111
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 76
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GAGCAATAATGTCTATTTGGTTTTTTTTTTTTTTTTTTTTTTTTTTTCCGCCAATACACCCCACAACAAGTAACAC
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 76, 0
+         READ_SEG: [0, 76], [76, 0]
+       READ_START: 0, 76
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 76
+         TRIM_LEN: 76
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/15.0.stderr b/test/fastq-loader/expected/15.0.stderr
new file mode 100644
index 0000000..1087173
--- /dev/null
+++ b/test/fastq-loader/expected/15.0.stderr
@@ -0,0 +1 @@
+2016-09-08T19:48:43 vdb-dump.2.7 int: libs/vdb/cast.c:127:cast_num: range excessive while type-casting type within virtual database module - VCursorCellData( col:READ_SEG at row #1 ) failed
diff --git a/test/fastq-loader/expected/15.0.stdout b/test/fastq-loader/expected/15.0.stdout
new file mode 100644
index 0000000..9c47605
--- /dev/null
+++ b/test/fastq-loader/expected/15.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 169455
+   BIO_BASE_COUNT: 169455
+   CMP_BASE_COUNT: 169455
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 12222001333333303313222232200300220131231220012123002222123332333312333100300130333312213233133331322220002333312213230013330222231233031312231233223333323002222233123122133330333312333333310132332201223333101213331233310001222222331222310030013331003002232200120222202333333132231101333302220133312212233331221323332333100132313221022222310131001333333122210131322322322322013233323333331233303333122221322102213333333100122223102333312213030333100133333330333312211001232 [...]
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 169455
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 7, 7, 8, 8, 7, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 7, 8, 5, 4, 4, 4, 5, 4, 4, 4, 6, 5, 4, 4, 5, 6, 6, 4, 5, 4, 5, 5, 6, 7, 7, 6, 4, 6, 4, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 5, 6, 5, 5, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 6, 5, 4, 5, 5, 4, [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GAGAGGGTATATATAATACGAGAGCTCCCGGGAGGTACTACTCCCAGTCGGGAGAGTCGCGATATACTATACCCGGGTAATATACTCATCGCATATACGAGAGGGGATATACTCATCGGGTATAAGAGATGATAATGCAGATGATAGATATATCGGGAGAGATACTACTCATATAATATACTATATATACCATCGCTCCAGATATACCAGTATACTATACCCCAGAGAGATACTCTACCCGGGTATACCCGGGAGCTCCCAGGAGAGGATATATACGAGCACCATATAAGAGGTATACTCAGATATACTCATCGCGATATGGGTAGCATCTGGAGAGATGGTACCCATATATACTCTGGTACGAGCTCGAGCTCCATCGCGATATATACTATAATATACTCTCATCTGGAGTATATATACCCAGAGATGGATATACTCATTAATATGGGTATATATAATATACTCACCCAGCT [...]
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 169455
+         READ_SEG: 
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 169455
+         TRIM_LEN: 169455
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.1.1.stdout b/test/fastq-loader/expected/2.1.1.stdout
new file mode 100644
index 0000000..a79501e
--- /dev/null
+++ b/test/fastq-loader/expected/2.1.1.stdout
@@ -0,0 +1,44 @@
+       BASE_COUNT: 12
+   BIO_BASE_COUNT: 12
+   CMP_BASE_COUNT: 12
+       CMP_CSREAD: 123123
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CS_KEY: TT
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0, 0, 0, 0, 0, 0
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 6, 0
+       READ_START: 0, 6
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+       TRIM_START: 0
+
+       BASE_COUNT: 12
+   BIO_BASE_COUNT: 12
+   CMP_BASE_COUNT: 12
+       CMP_CSREAD: 123123
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CS_KEY: GT
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0, 0, 0, 0, 0, 0
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 6, 0
+       READ_START: 0, 6
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.1.stdout b/test/fastq-loader/expected/2.1.stdout
new file mode 100644
index 0000000..1d2f84a
--- /dev/null
+++ b/test/fastq-loader/expected/2.1.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 148
+   BIO_BASE_COUNT: 148
+   CMP_BASE_COUNT: 148
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 01020330101302022131302322022022032222311023120230220132002100031300203330
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 74
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: TGGAATAACCATTCCTCATGCCTAGAAGAAGAATCTCTACAAGCAGGATTCTTGCTTTCAAAATGCCCTTATAA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 74, 0
+         READ_SEG: [0, 74], [74, 0]
+       READ_START: 0, 74
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 74
+         TRIM_LEN: 74
+       TRIM_START: 0
+
+       BASE_COUNT: 148
+   BIO_BASE_COUNT: 148
+   CMP_BASE_COUNT: 148
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 00131012333231011230202133203233112022003112203010033321302212200030111213
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 74
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: TTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTA
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 74, 0
+         READ_SEG: [0, 74], [74, 0]
+       READ_START: 0, 74
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 74
+         TRIM_LEN: 74
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.5.stdout b/test/fastq-loader/expected/2.5.stdout
new file mode 100644
index 0000000..908eb8a
--- /dev/null
+++ b/test/fastq-loader/expected/2.5.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 66
+   BIO_BASE_COUNT: 66
+   CMP_BASE_COUNT: 66
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 301212321010213302323201331023331
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 33
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AACTGATCAACCTGCGGATCGAACGCAAGCGCA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 33
+         READ_SEG: [0, 33]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 33
+         TRIM_LEN: 33
+       TRIM_START: 0
+
+       BASE_COUNT: 66
+   BIO_BASE_COUNT: 66
+   CMP_BASE_COUNT: 66
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 311203221313213231002230003322030
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 33
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 33
+         READ_SEG: [0, 33]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 33
+         TRIM_LEN: 33
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.6.stdout b/test/fastq-loader/expected/2.6.stdout
new file mode 100644
index 0000000..44db5d1
--- /dev/null
+++ b/test/fastq-loader/expected/2.6.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 66
+   BIO_BASE_COUNT: 66
+   CMP_BASE_COUNT: 66
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 301212321010213302323201331023331311203221313213231002230003322030
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 66
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: AACTGATCAACCTGCGGATCGAACGCAAGCGCAACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 33, 33
+         READ_SEG: [0, 33], [33, 33]
+       READ_START: 0, 33
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 66
+         TRIM_LEN: 66
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.7.stdout b/test/fastq-loader/expected/2.7.stdout
new file mode 100644
index 0000000..d91d929
--- /dev/null
+++ b/test/fastq-loader/expected/2.7.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 33
+   BIO_BASE_COUNT: 33
+   CMP_BASE_COUNT: 33
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 301212321010213302323201331023331
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 33
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AACTGATCAACCTGCGGATCGAACGCAAGCGCA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 33
+         READ_SEG: [0, 33]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 33
+         TRIM_LEN: 33
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.8.1.stdout b/test/fastq-loader/expected/2.8.1.stdout
new file mode 100644
index 0000000..b35248d
--- /dev/null
+++ b/test/fastq-loader/expected/2.8.1.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 6
+   BIO_BASE_COUNT: 6
+   CMP_BASE_COUNT: 6
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: ..3
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 3
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: NTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 3
+         READ_SEG: [0, 3]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 3
+         TRIM_LEN: 3
+       TRIM_START: 0
+
+       BASE_COUNT: 6
+   BIO_BASE_COUNT: 6
+   CMP_BASE_COUNT: 6
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: ...
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 3
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: NNT
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 3
+         READ_SEG: [0, 3]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 3
+         TRIM_LEN: 3
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.8.stdout b/test/fastq-loader/expected/2.8.stdout
new file mode 100644
index 0000000..51253cd
--- /dev/null
+++ b/test/fastq-loader/expected/2.8.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 6
+   BIO_BASE_COUNT: 6
+   CMP_BASE_COUNT: 6
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: ..3
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 3
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: NTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 3
+         READ_SEG: [0, 3]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 3
+         TRIM_LEN: 3
+       TRIM_START: 0
+
+       BASE_COUNT: 6
+   BIO_BASE_COUNT: 6
+   CMP_BASE_COUNT: 6
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: ..3
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 3
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 30
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: NTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 3
+         READ_SEG: [0, 3]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 3
+         TRIM_LEN: 3
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/2.9.1.stderr b/test/fastq-loader/expected/2.9.1.stderr
new file mode 100644
index 0000000..59530c2
--- /dev/null
+++ b/test/fastq-loader/expected/2.9.1.stderr
@@ -0,0 +1,5 @@
+latf-load err: data inconsistent while reading data within alignment module - Spot 'BILLIEHOLIDAY': length of original quality does not match sequence
+latf-load err: data inconsistent while reading data within alignment module - ArchiveFile: SequenceGetQuality failed
+latf-load warn: The file contained no records that were processed.
+latf-load err: data empty while reading file within alignment module - accession="obj" errors="1" status="failure"
+latf-load err: data empty while reading file within alignment module - load failed
diff --git a/test/fastq-loader/expected/2.9.stderr b/test/fastq-loader/expected/2.9.stderr
new file mode 100644
index 0000000..59530c2
--- /dev/null
+++ b/test/fastq-loader/expected/2.9.stderr
@@ -0,0 +1,5 @@
+latf-load err: data inconsistent while reading data within alignment module - Spot 'BILLIEHOLIDAY': length of original quality does not match sequence
+latf-load err: data inconsistent while reading data within alignment module - ArchiveFile: SequenceGetQuality failed
+latf-load warn: The file contained no records that were processed.
+latf-load err: data empty while reading file within alignment module - accession="obj" errors="1" status="failure"
+latf-load err: data empty while reading file within alignment module - load failed
diff --git a/test/fastq-loader/expected/3.1.stdout b/test/fastq-loader/expected/3.1.stdout
new file mode 100644
index 0000000..fb87b02
--- /dev/null
+++ b/test/fastq-loader/expected/3.1.stdout
@@ -0,0 +1,120 @@
+       BASE_COUNT: 144
+   BIO_BASE_COUNT: 144
+   CMP_BASE_COUNT: 144
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 4
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 36
+         READ_SEG: [0, 36]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 4
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
+       BASE_COUNT: 144
+   BIO_BASE_COUNT: 144
+   CMP_BASE_COUNT: 144
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 122311322021001....32101321......2..
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 4
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GAGCACGAGGACCCANNNATCAACGACNANNNGANN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 36
+         READ_SEG: [0, 36]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 4
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
+       BASE_COUNT: 144
+   BIO_BASE_COUNT: 144
+   CMP_BASE_COUNT: 144
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 312102231132..2..00....12...........
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 4
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ACTGGAGCACGANAGNCCCNCNACTNANANCNGNNN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 36
+         READ_SEG: [0, 36]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 4
+       SPOT_GROUP: 
+          SPOT_ID: 3
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
+       BASE_COUNT: 144
+   BIO_BASE_COUNT: 144
+   CMP_BASE_COUNT: 144
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 221022311322201....30030211......3..
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 4
+      MIN_SPOT_ID: 1
+             NAME: 4
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: CTGGAGCACGAGAACNCNGCCCGGACANANGNGCNN
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 36
+         READ_SEG: [0, 36]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 4
+       SPOT_GROUP: 
+          SPOT_ID: 4
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/4.2.stdout b/test/fastq-loader/expected/4.2.stdout
new file mode 100644
index 0000000..b4814b9
--- /dev/null
+++ b/test/fastq-loader/expected/4.2.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 36
+   BIO_BASE_COUNT: 36
+   CMP_BASE_COUNT: 36
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 1, 10, 20, 20, 20, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 10, 10, 20, 10, 20, 20, 10, 20, 20, 20
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 0
+         READ_SEG: [0, 36], [36, 0]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/4.3.1.stderr b/test/fastq-loader/expected/4.3.1.stderr
new file mode 100644
index 0000000..1268b1a
--- /dev/null
+++ b/test/fastq-loader/expected/4.3.1.stderr
@@ -0,0 +1,14 @@
+Usage:
+	latf-load [options] <fastq-file> ...
+
+Summary:
+	Load FASTQ formatted data files
+
+Example:
+	latf-load -p 454 -o SRZ123456 123456-1.fastq 123456-2.fastq
+
+
+Use option --help for more information.
+
+latf-load err: param incorrect while accessing argument list within application support module - accession="obj" errors="0" status="failure"
+latf-load err: param incorrect while accessing argument list within application support module - load failed
diff --git a/test/fastq-loader/expected/4.4.stdout b/test/fastq-loader/expected/4.4.stdout
new file mode 100644
index 0000000..94fbeb5
--- /dev/null
+++ b/test/fastq-loader/expected/4.4.stdout
@@ -0,0 +1,66 @@
+       BASE_COUNT: 105
+   BIO_BASE_COUNT: 105
+   CMP_BASE_COUNT: 105
+       CMP_CSREAD: 12312312312312312312312312312312312
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CS_KEY: GT
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 35, 0
+       READ_START: 0, 35
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 1
+       TRIM_START: 0
+
+       BASE_COUNT: 105
+   BIO_BASE_COUNT: 105
+   CMP_BASE_COUNT: 105
+       CMP_CSREAD: 12312312312312312312312312312312312
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CS_KEY: GT
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 35, 0
+       READ_START: 0, 35
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 2
+       TRIM_START: 0
+
+       BASE_COUNT: 105
+   BIO_BASE_COUNT: 105
+   CMP_BASE_COUNT: 105
+       CMP_CSREAD: 12312312312312312312312312312312312
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CS_KEY: GT
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 3
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 35, 0
+       READ_START: 0, 35
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SPOT_COUNT: 3
+       SPOT_GROUP: 
+          SPOT_ID: 3
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/4.5.1.stderr b/test/fastq-loader/expected/4.5.1.stderr
new file mode 100644
index 0000000..0cb8caf
--- /dev/null
+++ b/test/fastq-loader/expected/4.5.1.stderr
@@ -0,0 +1,8 @@
+latf-load warn: file="4.5.1.fastq"
+latf-load warn:syntax error, unexpected fqASCQUAL, expecting fqBASESEQ or fqCOLORSEQ
+latf-load warn: file="4.5.1.fastq"
+latf-load warn:syntax error, unexpected fqASCQUAL, expecting fqBASESEQ or fqCOLORSEQ
+latf-load err: data invalid while closing table - Too many bad records: records: 5, bad records: 2, bad records percentage: 0.40, allowed percentage: 0.20
+latf-load warn: path not found while removing directory within database module - table CS_SEQUENCE failed to drop temporary column 'TMP_KEY_ID'
+latf-load err: data invalid while closing table - accession="obj" errors="2" status="failure"
+latf-load err: data invalid while closing table - load failed
diff --git a/test/fastq-loader/expected/4.5.stderr b/test/fastq-loader/expected/4.5.stderr
new file mode 100644
index 0000000..99a8e64
--- /dev/null
+++ b/test/fastq-loader/expected/4.5.stderr
@@ -0,0 +1,9 @@
+latf-load warn: file="4.5.fastq"
+latf-load warn:syntax error, unexpected fqASCQUAL, expecting fqBASESEQ or fqCOLORSEQ
+latf-load warn: file="4.5.fastq"
+latf-load warn:syntax error, unexpected fqASCQUAL, expecting fqBASESEQ or fqCOLORSEQ
+latf-load warn: file="4.5.fastq"
+latf-load warn:syntax error, unexpected fqASCQUAL, expecting fqBASESEQ or fqCOLORSEQ
+latf-load err: error excessive while reading file within alignment module - Number of errors 3 exceeds limit of 2: Exiting
+latf-load err: error excessive while reading file within alignment module - accession="obj" errors="3" status="failure"
+latf-load err: error excessive while reading file within alignment module - load failed
diff --git a/test/fastq-loader/expected/4.6.1.stderr b/test/fastq-loader/expected/4.6.1.stderr
new file mode 100644
index 0000000..1f17349
--- /dev/null
+++ b/test/fastq-loader/expected/4.6.1.stderr
@@ -0,0 +1,3 @@
+latf-load err: param incorrect while accessing argument list within application support module - Invalid platform SOMETHINGELSE
+latf-load err: param incorrect while accessing argument list within application support module - accession="obj" errors="0" status="failure"
+latf-load err: param incorrect while accessing argument list within application support module - load failed
diff --git a/test/fastq-loader/expected/4.6.stdout b/test/fastq-loader/expected/4.6.stdout
new file mode 100644
index 0000000..e23aa0e
--- /dev/null
+++ b/test/fastq-loader/expected/4.6.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 36
+   BIO_BASE_COUNT: 36
+   CMP_BASE_COUNT: 36
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_454
+          QUALITY: 5, 13, 27, 22, 22, 19, 22, 23, 23, 23, 24, 24, 24, 23, 22, 22, 21, 22, 22, 21, 25, 24, 24, 22, 24, 22, 19, 18, 20, 19, 22, 22, 19, 22, 22, 24
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 0
+         READ_SEG: [0, 36], [36, 0]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/4.7.stderr b/test/fastq-loader/expected/4.7.stderr
new file mode 100644
index 0000000..e89fee5
--- /dev/null
+++ b/test/fastq-loader/expected/4.7.stderr
@@ -0,0 +1,2 @@
+latf-load err: path not found while accessing directory within file system module - accession="obj" errors="0" status="failure"
+latf-load err: path not found while accessing directory within file system module - load failed
diff --git a/test/fastq-loader/expected/5.0.stdout b/test/fastq-loader/expected/5.0.stdout
new file mode 100644
index 0000000..f4f8914
--- /dev/null
+++ b/test/fastq-loader/expected/5.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 36
+   BIO_BASE_COUNT: 36
+   CMP_BASE_COUNT: 36
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 112332022230202..1120022110..03..0..
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 36
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 5, 13, 27, 22, 22, 19, 22, 23, 23, 23, 24, 24, 24, 23, 22, 22, 21, 22, 22, 21, 25, 24, 24, 22, 24, 22, 19, 18, 20, 19, 22, 22, 19, 22, 22, 24
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 36, 0
+         READ_SEG: [0, 36], [36, 0]
+       READ_START: 0, 36
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 36
+         TRIM_LEN: 36
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/6.0.stdout b/test/fastq-loader/expected/6.0.stdout
new file mode 100644
index 0000000..f2a589b
--- /dev/null
+++ b/test/fastq-loader/expected/6.0.stdout
@@ -0,0 +1,390 @@
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 33333113001122113112313102030222133122230321033330003303123012303302102200033003011212211003120000330322030230111230023000331031322331013122211000001112132020113221212022310122001303300031130003321103303120130022220212122000003122200012300330033000311110001103033003330301230033021210033003
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 23, 24, 25, 39, 39, 32, 25, 14, 16, 16, 24, 17, 35, 34, 39, 39, 40, 40, 36, 40, 40, 40, 40, 38, 38, 38, 38, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 24, 20, 20, 20, 18, 32, 23, 27, 36, 39, 39, 38, 40, 40, 40, 40, 38, 36, 36, 32, 39, 35, 26, 22, 16, 16, 16, 16, 26, 14, 14, 14, 32, 32, 35, 33, 38, 40, 40, 40, 40, 36, 35, 35, 34, 34, 25, 25, 25, 25, 25, 40, 22, 22, 35, 40, 39, 39, 40, 40, 40, 35, 35, 35, 38, 40, 35, 20, 20, 21, 28, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ATATACATTTGTCTGTACAGCATGGAATTCTCATACTCTAATCAATATAAAATAATGATTGATTATTCAAGAAAATAAATTGTCAGACAAATGAAAAATAATCTTAAGCCACAGCCCTAAAATACCGTAGATACCATGAGACAAAAAACACTGCTTCCACGAGTCAGGAGCAACTCCCATTATTTTACATTTTATCACCGCCGTCCATTTCTCTTCAGTCTTTTTTACTCTTTTGATTTATTTATTTTACACAAAACAATTATTTATAATTGATTTATTCAGTTTATTTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 290
+         READ_SEG: [0, 290]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 290
+         TRIM_LEN: 290
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 0120230102202301112310113213110012202220220222322023022130220320202112303211020022210222022022021121310130201332031103210011302222010211021210231301020303202212303210211330322111311122200220131133120121202301320220120112212332211222121001
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 37, 37, 36, 36, 36, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 39, 37, 26, 26, 26, 39, 39, 39, 39, 39, 39, 31, 31, 31, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 35, 37, 35, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 35, 35, 30, 25, 25, 24, 24, 33, 20, 21, 21, 25, 28, 32, 33, 35, 35, 35, 35, 35, 35, 30, 30, 30, 35, 35, 32, 28, 28, 25, 25, 25, 25, 25, 24, 27, 28, 28, 29, 29, 28, 30, 27, 1 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TGAAGCCAAGAAGCCACAGCAACATCATGTTTGAGGAGAAGAAGAGCTCCTAAGACGGAGGCTTCCTGTCGGCTGTTCCCTCTGGAGAAGAAGAAGTGACGTTGCCTTGCGAATGTTAGTTTGTAAGAGAACCTGTTCAGTTCGTAACCTTAATCCTCAGCCGACCTGTATTAGACACGTGTCTCCCTCCATGTATGAACTGAAGCCATCCTCCAGGTGAGTCGCTCACTCTGACCCA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 238
+         READ_SEG: [0, 238]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 238
+         TRIM_LEN: 238
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: .
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 3
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: N
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 1
+         READ_SEG: [0, 1]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 3
+         SPOT_LEN: 1
+         TRIM_LEN: 1
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 3233002222000311131011112200120012023120111002313221303322200232101021320113203131113033111022010111033201333100123131330333103123103222323120100123231
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 4
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 39, 40, 40, 28, 28, 28, 36, 33, 39, 29, 29, 29, 29, 36, 36, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 36, 33, 33, 32, 35, 38, 38, 38, 27, 27, 29, 32, 32, 32, 32, 32, 35, 35, 36, 36, 39, 39, 39, 39, 40, 40, 40, 36, 35, 37, 37, 40, 40, 40, 36, 36, 3 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AGCGGGAGAGGGGCACATGGTGTGAGGGTCCCAGGATGAACACCCTACGAGTAATAGAGGGATCAACCTGCTTGTAGGCATGTGCCGCACAAGAACCACAATAGGTATACCCAGCATGCGGCGCAATGATGGCTCTAGCAGGTTTGATCGT
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 151
+         READ_SEG: [0, 151]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 4
+         SPOT_LEN: 151
+         TRIM_LEN: 151
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 20223123320211200021310032023022113211020213231200100101020333313100120232001001121212120333033312111130201212320110020211321111111011101012102302211312210301021213112121103330001222301133102212210100011002111030120223123001130013200000..0000213
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 5
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 26, 26, 26, 26, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 35, 26, 26, 26, 39, 40, 40, 40, 40, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 26, 26, 26, 26, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 4 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: CCTCGTCGCTTCACTTTTCATGGGCTTCGGAGTGCTGTTCCTGCTACTTTGGGTTGGAATATACGTTTGAAGCTTTGGGTGACTGACTTATAATATGACACATTCCAGTCGAACAAAGGACATCACACACAACACCAACTGGATTCTGTACTCAATTGGACTGCACTGACAATATTTTGAGATTGTATGGAGTCTGGTTTTGTTTCACAATTGAAGATGATTTGTAAACGAAAAAANAAAAAGTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 245
+         READ_SEG: [0, 245]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 5
+         SPOT_LEN: 245
+         TRIM_LEN: 245
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: .
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 6
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 0
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: N
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 1
+         READ_SEG: [0, 1]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 6
+         SPOT_LEN: 1
+         TRIM_LEN: 1
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 223200321003103331210230003113330102230133303001022311100130130130131100321130133000012310133313120110010203102331310332111310031021031232200102023210011110102223120033232133321130013221231231102322000101220220002200102131111102333001221113300123201102323233323230223032203330223213323101
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 7
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 39, 39, 39, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 34, 34, 34, 34, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 39, 21, 21, 21, 21, 21, 35, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 38, 38, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: CTAGGGCTGGGCAATATGACCTAAAATGTATAACCTCGGTATAATTTGGAGCACAAACGGTAACGGTACAAATCACGGTATTTTTGATGGTATACGTCCACCCAAGGCAAGCGTACCGCTGTGCAAATGGACCGTCGAGGGTTCCTAGTTTGTGTTGGAGATGAAATAGCTGCGCTGTAAACGAGTCGTCGTGGATCTTTTGGTCTTCTTTTCTTTGGACGTGTGTTCGCGGGTCTGTGCGGGTCGAACAAGCTAGCGCTAGCCTCGGCTCCGCGGAGCTGCGATGGT
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 288
+         READ_SEG: [0, 288]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 7
+         SPOT_LEN: 288
+         TRIM_LEN: 288
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 312332130330013213131311103130100220330003132112211210312031220331223032033112121022101200020112122023001312220111111111111111111111111111232
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 8
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 39, 39, 40, 40, 40, 40, 40, 40, 40, 39, 39, 38, 37, 35, 35, 35, 35, 32, 32, 21, 21, 18, 25, 24, 32, 33, 24, 25, 25, 26, 35, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 35, 35, 37, 37, 37, 37, 35, 35, 35, 37, 37, 37, 37, 37, 37, 37, 35, 33, 32, 32, 32, 32, 32, 27, 23, 16, 16, 16, 16, 19, 19, 32, 32, 32, 30, 32, 32, 33, 37, 37, 37, 35, 35, 35, 35, 35, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 3 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ACTATCATTATTTGCTGCATGCACAATGCCAAAGAATAAAATGCTGTCTGTCAATGAATGAGGCGTCTAATCCGCACTGACCTCAACTTTTCCACTGAGGATTTGCAGAGGTGTGTGTGTGTGTGTGTGTGTGTGTGTCGA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 141
+         READ_SEG: [0, 141]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 8
+         SPOT_LEN: 141
+         TRIM_LEN: 141
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 3
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 9
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 14
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: A
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 1
+         READ_SEG: [0, 1]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 9
+         SPOT_LEN: 1
+         TRIM_LEN: 1
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 1113102220321220323011002113132101023311102023132320203003331103221213312231022232120110210122020113123200020011332122312101301202210221013202122020003213210102101021102012100330320023102103000110102300112013212333113010003103101221222211022111033003
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 10
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 21, 21, 21, 33, 37, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 35, 35, 35, 34, 37, 33, 31, 30, 29, 29, 19, 17, 17, 17, 13, 13, 13, 14, 12, 19, 18, 22, 22, 25, 24, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GTGCAAGAGGCTGAGGCTAACAAAGTGCATCAACCTATGTGGAAGCATCGAAGGCCCGCGTGGCTCAGTATGAGCAAGAGCTGAACAAGTTGAGGAACATGATCCCCTTTGTATCAGATGACCATTGAAGACCTCAACGAAGTCTTCCCCGACGACCAAGTTGGACAAGGTCAAATAATCCCTACCTGGCCCCACCAAGCCCACTTGCTGATATGTAACCCCGTTACCAGACTCTCACCTCACAATAAAT
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 250
+         READ_SEG: [0, 250]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 10
+         SPOT_LEN: 250
+         TRIM_LEN: 250
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 33311333221321211222302103222110103211322212002132122301203222112123122333113
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 11
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 39, 34, 34, 38, 38, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 38, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ATACATATCTGCTGACAGAGCCTGGCTCTGTTGGCTGTAGAGTCCCTGCTGAGCCAGGCTCTGTCAGCAGATATGTA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 77
+         READ_SEG: [0, 77]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 11
+         SPOT_LEN: 77
+         TRIM_LEN: 77
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 303
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 12
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 16, 16, 16
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AAT
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 3
+         READ_SEG: [0, 3]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 12
+         SPOT_LEN: 3
+         TRIM_LEN: 3
+       TRIM_START: 0
+
+       BASE_COUNT: 1992
+   BIO_BASE_COUNT: 1992
+   CMP_BASE_COUNT: 1992
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 020211001202210203122201033110123121112132313130203112333120312022111011200121221103112021111111201133110022130210220230010312320130210113221001212321320221111102202100010312200222312330200030233002201312320012211123133221111221031312122131320310320002113131112033112211322122113000202200102031111120000233
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 13
+      MIN_SPOT_ID: 1
+             NAME: 13
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 40, 40, 40, 40, 26, 21, 21, 21, 30, 30, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 3 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: TCCTGTTTGAAGACCTTACTCTTGGCGTGGTCGTCACAGTAGCATGCCTTACAGCGCAGGCAGGAGTGTTGTCCCAGTCTGTTACAGGACACACACTTGTATGTTTCTGCCTGGAGGATTTGGCAGCTTGCCTGGTGCTCAAACTGATCATCCTCACACAAGAAGTTTTGGCAGAAAGAGCAGCGGAAAATTCGCCCTCCATGATCCCAGACACTACGCTCACACTCAATGCAGTCTGCATCCGTTAGGGGACATGCACAGGCGTGAGTGCTCAGACATTTTCCTCCCAAGGCACACAGGGGGATA
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 306
+         READ_SEG: [0, 306]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 13
+       SPOT_GROUP: 
+          SPOT_ID: 13
+         SPOT_LEN: 306
+         TRIM_LEN: 306
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/7.1.stdout b/test/fastq-loader/expected/7.1.stdout
new file mode 100644
index 0000000..a4158cd
--- /dev/null
+++ b/test/fastq-loader/expected/7.1.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 1025
+   BIO_BASE_COUNT: 1025
+   CMP_BASE_COUNT: 1025
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 32221001232021032212221120133210330331132030111131310212320130231200330232013203300231032110333113001122130311333232301021300200321100002110112231020013122132303310001331220213313321330223331101002002230033013230020231000320033101332123232101011000130130302310102031031213302310210102212222023123212031111210200121222111301020122122023130022031231211000203330131110310000200100212313123101330333110220231213313002301111130012202000333020020223303121301310203312033023110303 [...]
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 43, 43, 71, 69, 29, 29, 29, 29, 58, 58, 39, 39, 67, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 45, 43, 47, 47, 71, 71, 71, 38, 38, 71, 45, 45, 71, 69, 69, 71, 71, 50, 50, 22, 22, 22, 62, 62, 70, 71, 60, 60, 71, 71, 52, 52, 71, 71, 50, 50, 50, 67, 64, 38, 38, 71, 57, 57, 57, 57, 71, 71, 71, 71, 39, 39, 39, 46, 48, 71, 71, 42, 42, 42, 43, 52, 52, 71, 71, 68, 18, 54, 54, 56, 39, 39, 52, 71, 71, 71, 71, 71, 57, 57, 71, 71, 42, 41, 6, 65, 36, 36, 65, 34, 34, 61, 70, 57, 42, 57 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AGAGTTTGATCCTGGCTCAGAGTGAACGCTGGCGGCGTGCTTAACACATGCAAGTCGAACGGATGAAATAAGCTTGCTTATTTCGTTAGTGGCGCACGGGTGAGTAATGTATAGCTAACCTGCCCTTTAGTGGGGGACAACAGATGGAAACGTCTGCTAATACCCCATACTCCTGCGTATCATAAGATATGTTGGGAAAGATTTATTGCTAAAGGATGGGGCTTTATGGTATCAGCTAGTTGGTGGGGTAACGGCCTACCAAGGCAATGACGCCTACCTGGTTCTGAGAGGATGATCAGGCACACTGGAAACTGAGACACGGTTCCAGACTCCTACGGGAGGCAGCAGTGGGGAATATTGCACAATGGGGGAAACCCTGATGCAGCAACGCCGCGTGGAGGATGACGCATTTCGGTGTGTAAACTCCTTTTATAAGGGAAGATAATGACGGTACCTTATGAATAAGCACCGGC [...]
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 507
+         READ_SEG: [0, 507]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 507
+         TRIM_LEN: 507
+       TRIM_START: 0
+
+       BASE_COUNT: 1025
+   BIO_BASE_COUNT: 1025
+   CMP_BASE_COUNT: 1025
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 32221001232021032212021320133210330133132030111131310212320132221322231020312100202300020312003220322002110332013001122130133311001301021302331020020203323022300200121002213031302033303311211202123313103200132110300133220301130133202310210033312001303232321010112223301123001101020332132310013010301221222200332013012111121020121222111301201221220231302203123121100020333013331031003101002121331231033103331122112022201000230232313002322211033010002022000002213013100102202 [...]
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 71, 68, 68, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 48, 48, 71, 70, 70, 71, 71, 71, 71, 71, 71, 71, 51, 51, 71, 71, 63, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 62, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 67, 67, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 21, 21, 21, 21, 23, 71, 71, 71, 53, 53, 53, 71, 71, 71, 71, 71, 71, 53, 53, 53, 71, 71, 59, 59, 71, 71, 71, 71, 71, 28, 28, 28, 71, 71, 71, 7 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: AGAGTTTGATCCTGGCTCAGGACGAACGCTGGCGGTATGCTTAACACATGCAAGTCGAACGAGACGAGATGGAATGACCCTTCGGGGAATGAAATCTTAGAAAGTGGCGAACGGGTGAGTAACGCGTGGGTAACCTGCCTATGGAAAGGAATAGCCTCGGGAAACTGGGAGTAATGCCTTATAATACAGTGAAGTCGCATGGCTTTGCTGTTAAACGCTCCGGTGCCATAGGATGGACCCGCGTCCCATTAGCTAGTTGGTGAGATAACAGCCCACCAAGGCGACGATGGGTAACCGGTCTGAGAGGGCGAACGGTCACACTGGAACTGAGACACGGTCCAGACTCCTACGGAGGCAGCAGTGGGGAATATTGCGCAATGGGCAACCCTGACGCAGCAATACCGCGTGAGTGAAGAGGTTTTCGGATCGTAAAGCTCTGTTATTGGGGAAGAAAAAAGACGGTACCCAAGAAG [...]
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 518
+         READ_SEG: [0, 518]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 518
+         TRIM_LEN: 518
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/7.2.stdout b/test/fastq-loader/expected/7.2.stdout
new file mode 100644
index 0000000..a7a4eff
--- /dev/null
+++ b/test/fastq-loader/expected/7.2.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 1033
+   BIO_BASE_COUNT: 1033
+   CMP_BASE_COUNT: 1033
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 3320110002200110011000000000002310000002200001111110022000011110002112000000110330330022003213300111110000001001320011111100000110000013211101113301100110000012311110110110001110010123000000110000001100011000001110111
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 6, 0, 4, 0, 4, 2, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 5, 0, 0, 1, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 5, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 5, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 1, 0, 0, 2, 8, 0, 1, 0, 0, 4, 0, 0, [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: ATCCACCCCTCCCACCCACCCCCCCCCCCCTACCCCCCCTCCCCCACACACCCTCCCCCACACCCCTGTCCCCCCCACCGCCGCCCTCCCGACGCCCACACAAAAAAACCCATCCCACACACCCCCCACCCCCCATCACAACACGCCACCCACCCCCCAGCACACCACCACCCCACAAACCAGCCCCCCCACCCCCCCACCCCACCCCCCACAACAC
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 217
+         READ_SEG: [0, 217]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 217
+         TRIM_LEN: 217
+       TRIM_START: 0
+
+       BASE_COUNT: 1033
+   BIO_BASE_COUNT: 1033
+   CMP_BASE_COUNT: 1033
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 20111100001100101000113030000101011011011010001110003333000110000111100011113301100330110033011101330003213332001001100033330011010100110110003211100110000033110110000000333311033001100011100132133010122010100000000033011001230330000000110123000001100033003223003213030113333003311000123033000012300000000000001111100001010100100011000011001010001101100133011010000110000111010000000111010101000110011011010112201100003300001010003210000101100013311110111000133011000321111 [...]
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 4, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 5, 0, 0, 0, 3, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 5, 4, 3, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 4, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 4, 0, 2, 0, 0, 3, 3, 2, 0, 3, 3, 0, 0, 0, 1, 2, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 5, 0, 0, [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: CCACACCCCCACCCAACCCCACGGCCCCCAACCACCACCACCAAAACACCCCGCGCCCCACCCCCACACCCCACACGCCACCCGCCACCCGCCACAACGCCCCGACGCGAAACCCACCCCGCGCCCACCAACCCACCACCCCGACACCCACCCCCCGCACCACCCCCCCCGCGCACCGCCCACCCCACAAACGACGCCAACTCCAACCCCCCCCCCGCCACCCAGCCGCCCCCCCCACCAGCCCCCCACCCCGCCCGAGCCCGACGGCCACGCGCCCGCACCCCAGCCGCCCCCAGCCCCCCCCCCCCCCACACAAAAACCAACCCAAAACAAAAACAAACCAAAACAACAAACGCCACCAAAAACAAAAACACCAAAAAAAACACCAACCAAAACAAACAACAACCACTCCACCCCCGCCCCCAACCCCGACCCCCAACAAAACGCACACCACAAAACGCCACCCCGACACA [...]
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 816
+         READ_SEG: [0, 816]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 816
+         TRIM_LEN: 816
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/7.3.stdout b/test/fastq-loader/expected/7.3.stdout
new file mode 100644
index 0000000..f51b1a6
--- /dev/null
+++ b/test/fastq-loader/expected/7.3.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 1076
+   BIO_BASE_COUNT: 1076
+   CMP_BASE_COUNT: 1076
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 1013222012202312332112220332021212330330022330222013211133333202123102303221202133123222223222022210102222002332020301202110230033301121323222230022311123012302231012212200232222323231012221211111011221332310
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GGTAGAGGTCTTCGTCGCTGTCTCCGCTTCAGTCGCCGCCCTCGCCTCTTGCTGTGCGCGCTTCAGCAAGCCGAGTCCTGCGTCGAGAGATCTCCTCTGGTTCTCTTTCGCTTCCGGTCCTGTTCGGGCGCCACTGCTAGAGATTTCTACACTAACTAAGATGGTCTGAGGGATCTCTAGCTACCAGAGTCACACAACAGACGCTACC
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 208
+         READ_SEG: [0, 208]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 208
+         TRIM_LEN: 208
+       TRIM_START: 0
+
+       BASE_COUNT: 1076
+   BIO_BASE_COUNT: 1076
+   CMP_BASE_COUNT: 1076
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 10021022333303332130220223031222201202222233333322222203300211203322000303033331121333021322123333320232202222131131321312123123331222322023211331233111222311133230222233230101320032111111110130220223302220223212202211222203102222000213332203303332121120201210321221233033211132123133333333303312110333333333332110233311312220332203333303003003331231323222103032103322203231220233221230331212222320013222013022231203300101312232120101101330101303120220231200112201331312003 [...]
+           CS_KEY: T
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 0
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_PACBIO_SMRT
+          QUALITY: 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS
+             READ: GGGACCTCGCGCCGCGACGGAGGAGCCGTCTCTTGAAGAGAGCGCGCGAGAGAGGCGGGACAGGCGAGGGGCCGGCGCGTGACGCGGACGAGTCGCGCGAAGCTCCTCTCATGTACGACGTCAGCAGCGCAGAGCTCCTAGTGCGTCGCACAGAGCACATAGCCTCTCGCTAACCATCCCGACACACACAACGGAGGAGCGGAGAAGATCAGAAGACAGAGAATGGAGAGGGGACGCGAGGCGGCGCTGACAGGAACTGGCTGAGTCGCCGCTGTGCTGATGCGCGCGCGCCGCAGTGGCGCGCGCGCGCTGTTCGCGTGCAGAGGCGAGGCGCGCCGGGCCCGCGTCGTAGCTCTGGCCGACCGCTCTTAGCAGAAGCGAGTCGGCGTCAGAGATCCCATCTCCATTCTCGTCCGCCCAACGTCTAGTCCAACAACGCCAACGGCAGGAGGATGAAACAGAACGCATGAAAT [...]
+      READ_FILTER: SRA_READ_FILTER_PASS
+         READ_LEN: 868
+         READ_SEG: [0, 868]
+       READ_START: 0
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: 
+          SPOT_ID: 2
+         SPOT_LEN: 868
+         TRIM_LEN: 868
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/8.0.stdout b/test/fastq-loader/expected/8.0.stdout
new file mode 100644
index 0000000..44db5d1
--- /dev/null
+++ b/test/fastq-loader/expected/8.0.stdout
@@ -0,0 +1,30 @@
+       BASE_COUNT: 66
+   BIO_BASE_COUNT: 66
+   CMP_BASE_COUNT: 66
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 301212321010213302323201331023331311203221313213231002230003322030
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 66
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 1
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: AACTGATCAACCTGCGGATCGAACGCAAGCGCAACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 33, 33
+         READ_SEG: [0, 33], [33, 33]
+       READ_START: 0, 33
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 1
+       SPOT_GROUP: 
+          SPOT_ID: 1
+         SPOT_LEN: 66
+         TRIM_LEN: 66
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/expected/8.1.stderr b/test/fastq-loader/expected/8.1.stderr
new file mode 100644
index 0000000..3a036e1
--- /dev/null
+++ b/test/fastq-loader/expected/8.1.stderr
@@ -0,0 +1,5 @@
+latf-load err: file="8.1.fastq"
+latf-load err:Inconsistent secondary read number: previously used 3, now seen 2
+latf-load warn: path not found while removing directory within database module - table SEQUENCE failed to drop temporary column 'TMP_KEY_ID'
+latf-load err: format unsupported while parsing file - accession="obj" errors="1" status="failure"
+latf-load err: format unsupported while parsing file - load failed
diff --git a/test/fastq-loader/expected/9.0.stdout b/test/fastq-loader/expected/9.0.stdout
new file mode 100644
index 0000000..498100c
--- /dev/null
+++ b/test/fastq-loader/expected/9.0.stdout
@@ -0,0 +1,60 @@
+       BASE_COUNT: 404
+   BIO_BASE_COUNT: 404
+   CMP_BASE_COUNT: 404
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 2230120003312333000101101303001013310103223001100120023010030322210223120322311200013213102011200203322132132213111122002212110220112212323122012213221002021302221333210033032200312330210133320301210321
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 202
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 1
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 30, 30, 27, 35, 26, 35, 35, 35, 37, 32, 34, 23, 11, 34, 25, 34, 37, 38, 40, 33, 38, 10, 34, 34, 8, 18, 27, 34, 37, 39, 29, 34, 16, 9, 25, 36, 37, 35, 33, 34, 30, 9, 16, 33, 38, 37, 15, 33, 37, 31, 9, 24, 35, 34, 29, 33, 8, 30, 30, 34, 34, 33, 34, 25, 35, 22, 23, 19, 31, 28, 37, 36, 36, 31, 36, 32, 25, 8, 22, 8, 8, 28, 30, 24, 30, 22, 31, 31, 33, 34, 25, 29, 26, 26, 18, 28, 31, 33, 33, 33, 33, 31, 33, 31, 37, 30, 35, 32, 36, 39, 39, 19, 34, 27, 32, 34, 25, 36, 36, 39, 2 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: CTAACTTTTATGATATTTTGGTGGTAATTTGGTATGGTTAGATTTGTTTGAAAGCCAAATTAGAGTTCTACTTAGATGTCCCCATCATGGAACAGGGAATACTGCTGCTCATGTGTCTTTCTGACAAGAACAGACTAGCAGAACTCATCTGGGAAGTAAGAGTATAGTTTATTAGAAATGATAAGTTGCGCTTAACTGGCTG
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 101, 101
+         READ_SEG: [0, 101], [101, 101]
+       READ_START: 0, 101
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: GATCAG
+          SPOT_ID: 1
+         SPOT_LEN: 202
+         TRIM_LEN: 202
+       TRIM_START: 0
+
+       BASE_COUNT: 404
+   BIO_BASE_COUNT: 404
+   CMP_BASE_COUNT: 404
+CMP_LINKAGE_GROUP: 
+     COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+           CSREAD: 1131131133323131133030331132231121330123331222003300110002133123111202120023213022003330321020211202111300303030011213303300332202121220032020312021032011103132222220220023012002233111002332013120311030
+           CS_KEY: TT
+        CS_NATIVE: false
+   FIXED_SPOT_LEN: 202
+    LINKAGE_GROUP: 
+      MAX_SPOT_ID: 2
+      MIN_SPOT_ID: 1
+             NAME: 2
+         PLATFORM: SRA_PLATFORM_UNDEFINED
+          QUALITY: 33, 33, 31, 35, 37, 37, 37, 37, 38, 39, 38, 39, 39, 40, 40, 39, 37, 39, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 40, 38, 40, 41, 41, 39, 39, 40, 41, 41, 37, 36, 40, 39, 40, 37, 40, 37, 34, 35, 36, 38, 39, 40, 40, 41, 40, 41, 40, 41, 37, 38, 40, 40, 37, 40, 39, 38, 40, 40, 41, 41, 38, 40, 40, 41, 41, 40, 40, 38, 41, 40, 40, 40, 38, 38, 36, 39, 40, 41, 39, 39, 39, 37, 39, 38, 39, 37, 37, 37, 37, 37, 37, 31, 33, 34, 37, 37, 37, 37, 37, 39, 39, 39, 39, 39, 39, 40, 38, 38, 4 [...]
+        RD_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+             READ: GTACATGTATAGCATGTATTAATACATCTACAGTATTGATATGAGAAATAAACAAAAGTATGATGTGAAGTCCCTAGTAAGAAATATTAGTTCCTGTCCTGGTAAATTAATTTGTCATAATAAATAGAAGTCAGAAATCCTTACTTCAATCCACAATGCTCTCTCCTCCCTAACTTTCTATGTGGGATAGGTACTTACAATT
+      READ_FILTER: SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS
+         READ_LEN: 101, 101
+         READ_SEG: [0, 101], [101, 101]
+       READ_START: 0, 101
+        READ_TYPE: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_BIOLOGICAL
+       SIGNAL_LEN: 0
+       SPOT_COUNT: 2
+       SPOT_GROUP: GATCAG
+          SPOT_ID: 2
+         SPOT_LEN: 202
+         TRIM_LEN: 202
+       TRIM_START: 0
+
diff --git a/test/fastq-loader/input/1.1.fastq b/test/fastq-loader/input/1.1.fastq
new file mode 100644
index 0000000..069381b
--- /dev/null
+++ b/test/fastq-loader/input/1.1.fastq
@@ -0,0 +1,5 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+&.<77478889998776776:997974354774779
+
diff --git a/test/fastq-loader/input/1.2.fastq b/test/fastq-loader/input/1.2.fastq
new file mode 100644
index 0000000..9f7e6b7
--- /dev/null
+++ b/test/fastq-loader/input/1.2.fastq
@@ -0,0 +1,5 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+YYYYYYYYYYYYYYYYPYYVYYYYYYYYYYYYYYYY
+
diff --git a/test/fastq-loader/input/1.3.fastq b/test/fastq-loader/input/1.3.fastq
new file mode 100644
index 0000000..39145e2
--- /dev/null
+++ b/test/fastq-loader/input/1.3.fastq
@@ -0,0 +1,5 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+41 42 43 44 45 46 47 48 49 40 41 42 43 44 45 46 47 48 49 40 41 42 43 44 45 46 47 48 49 40 41 42 43 44 45 46
+
diff --git a/test/fastq-loader/input/1.4.fastq b/test/fastq-loader/input/1.4.fastq
new file mode 100644
index 0000000..371fc95
--- /dev/null
+++ b/test/fastq-loader/input/1.4.fastq
@@ -0,0 +1,24 @@
+ at ID57_120908_30E4FAAXX:3:1:1772:953/1
+GCAATAGCGCGTTGCCTAATCTAACGACGATGATTG
++ID57_120908_30E4FAAXX:3:1:1772:953
+hhhhhhhhhhhhhhhhhhhhhhbdhhhhhhDhGhhh
+ at ID57_120908_30E4FAAXX:3:1:1772:953/2
+ATGGCTCAGGGCCAGGCCCAGAGCCCTTGCGATCAG
++ID57_120908_30E4FAAXX:3:1:1772:953
+hhhhhhhhhhhhhahhhhhhhMhhhLhhhhh<hh at h
+ at ID57_120908_30E4FAAXX:3:1:1590:999/1
+GTTTTATCGGCAGCCGTCTGCTTTCGCGCCTAAGCC
++ID57_120908_30E4FAAXX:3:1:1590:999
+hhhhhhhhhhhhh[hhhhhNXhhH=Ah`LhM??>hB
+ at ID57_120908_30E4FAAXX:3:1:1590:999/2
+TAAGCAGCGCCTGCGCAGTCGCTGCTTAGTCGCTTA
++ID57_120908_30E4FAAXX:3:1:1590:999
+hhhhhhhhhhhhhhhhhhhhhhhhhbhKhhhhhhhC
+ at ID57_120908_30E4FAAXX:3:1:1701:982/1
+GAGCAGTACGAGCAGTACCTGTTTTTCATTGGAGAT
++ID57_120908_30E4FAAXX:3:1:1701:982
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhXhhh
+ at ID57_120908_30E4FAAXX:3:1:1701:982/2
+GGTCGCTGACGATGTGCGGAACCAACCGCTCCCGTC
++ID57_120908_30E4FAAXX:3:1:1701:982
+hhhhhhhhhhhhhhhhhhhhhhhOUhhhhhhhIh[h
diff --git a/test/fastq-loader/input/10.0.fastq b/test/fastq-loader/input/10.0.fastq
new file mode 100644
index 0000000..e7efa74
--- /dev/null
+++ b/test/fastq-loader/input/10.0.fastq
@@ -0,0 +1,4 @@
+ at HWI-ST1374:1:1101:1161:2060#0/1
+CCTACACTTGTATTTTGGTTA
++HWI-ST1374:1:1101:1161:2060#0/1
+bb~eeeeegggcgiihhcegg
diff --git a/test/fastq-loader/input/11.0.1.fasta b/test/fastq-loader/input/11.0.1.fasta
new file mode 100644
index 0000000..67e5df2
--- /dev/null
+++ b/test/fastq-loader/input/11.0.1.fasta
@@ -0,0 +1,2 @@
+ at SRR390728.1.1
+GAGCAATAATGTCTATTTGGTTTTTTTTTTTTTTTTTTTTTTTTTTTCCGCCAATACACCCCACAACAAGTAACAC
diff --git a/test/fastq-loader/input/11.0.2.fasta b/test/fastq-loader/input/11.0.2.fasta
new file mode 100644
index 0000000..45efbc3
--- /dev/null
+++ b/test/fastq-loader/input/11.0.2.fasta
@@ -0,0 +1,2 @@
+ at SRR390728.1.2
+GCCACTACATAGGATGTATTTTTGCAGCAACAAGAAGAAGGGGGGGGGGGGGGGTAAAACAAAAATACAGCGGGCG
diff --git a/test/fastq-loader/input/11.1.1.fastq b/test/fastq-loader/input/11.1.1.fastq
new file mode 100644
index 0000000..316d9b6
--- /dev/null
+++ b/test/fastq-loader/input/11.1.1.fastq
@@ -0,0 +1,4 @@
+ at SRR493912.15083.1 15083 length=101
+TAAAGCTTTCATTTCGTTCCCTCCATTAACTGTCATACACCAATATATTATCATAATCCTTATATTAAAATGATTGATTTTATGTAAATTATTTATAAATT
++SRR493912.15083.1 15083 length=101
+CCCFFFFFHHGHGJJJJJJJIIJJGJJIJGIHHIJFBHGIIJGFE at BHIIECEHIIGIGIHHIIJIIIJGEECHHF@EGHGDHGEHFEEHHFFFDFFFEE@
\ No newline at end of file
diff --git a/test/fastq-loader/input/11.1.2.fastq b/test/fastq-loader/input/11.1.2.fastq
new file mode 100644
index 0000000..a95e6a4
--- /dev/null
+++ b/test/fastq-loader/input/11.1.2.fastq
@@ -0,0 +1,4 @@
+ at SRR493912.15083.2 15083 length=101
+TAAAGCTTTCATTTCGTTCCCTCCATTAACTGTCATACACCAATATATTATCATAATCCTTATATTAAAATGATTGATTTTATGTAAATTATTTATAAATT
++SRR493912.15083.2 15083 length=101
+CCCFFFFFHHGHGJJJJJJJIIJJGJJIJGIHHIJFBHGIIJGFE at BHIIECEHIIGIGIHHIIJIIIJGEECHHF@EGHGDHGEHFEEHHFFFDFFFEE@
\ No newline at end of file
diff --git a/test/fastq-loader/input/12.0.fastq b/test/fastq-loader/input/12.0.fastq
new file mode 100644
index 0000000..b716dab
--- /dev/null
+++ b/test/fastq-loader/input/12.0.fastq
@@ -0,0 +1,8 @@
+ at HWI-ST1374:1:1101:1161:2060#SG1/1
+CCTACACTTGTATTTTGGTTA
++HWI-ST1374:1:1101:1161:2060#SG1/1
+bb~eeeeegggcgiihhcegg
+ at HWI-ST1375:1:1101:1161:2060#SG2/1
+CCTACACTTGTATTTTGGTTA
++HWI-ST1375:1:1101:1161:2060#SG2/1
+bb~eeeeegggcgiihhcegg
diff --git a/test/fastq-loader/input/12.1.fastq b/test/fastq-loader/input/12.1.fastq
new file mode 100644
index 0000000..b716dab
--- /dev/null
+++ b/test/fastq-loader/input/12.1.fastq
@@ -0,0 +1,8 @@
+ at HWI-ST1374:1:1101:1161:2060#SG1/1
+CCTACACTTGTATTTTGGTTA
++HWI-ST1374:1:1101:1161:2060#SG1/1
+bb~eeeeegggcgiihhcegg
+ at HWI-ST1375:1:1101:1161:2060#SG2/1
+CCTACACTTGTATTTTGGTTA
++HWI-ST1375:1:1101:1161:2060#SG2/1
+bb~eeeeegggcgiihhcegg
diff --git a/test/fastq-loader/input/12.2.fastq b/test/fastq-loader/input/12.2.fastq
new file mode 100644
index 0000000..c040978
--- /dev/null
+++ b/test/fastq-loader/input/12.2.fastq
@@ -0,0 +1,4 @@
+ at HWI-ST1234:33:D1019ACXX:2:1101:1415:2223/1 1:N:0:ATCACG
+CCTACACTTGTATTTTGGTTA
+ at HWI-ST1234:33:D1019ACXX:2:1101:1415:2223/2 2:N:0:ATCACG
+CCTACACTTGTATTTTGGTTA
diff --git a/test/fastq-loader/input/13.0.fastq b/test/fastq-loader/input/13.0.fastq
new file mode 100644
index 0000000..e6b5a3c
--- /dev/null
+++ b/test/fastq-loader/input/13.0.fastq
@@ -0,0 +1,12 @@
+ at SRR000123.10 EXRHO8E16JXOK2 length=272
+TCAGCCACCGACATTTATCTGTTCTTTCTCCCAATCGTATACTGAGTACGCTATATCTGTCAATTCAACCGGTTTCAACGGGTTGCTGCCTCCCGGGGCATTGACCGTAACCAAGACTTCGTAACAGGTATTGCGGTTCAATTTCTTGGCCGCACTGACCGGAATCTGGTAATAGCTGCTCTCCATGAATTGCGGATCTCCGGTAGAACCGTCTTCATTGTGAGGCGTATAATTCATCGGGATGTTTACAATCAGGCGCACCTCCTTTTCCG
++SRR000123.10 EXRHO8E16JXOK2 length=272
+====E==F>===<E?)<=;=;F=<HB.=9HB.B97=<===;==<;======<<=====<=<D;B;<@9D=B;C>*<@7<C?*B::;::C<;FB1GC7)9;B:<;D=;<C=C=B;<<<?6<=<A9;=@7=<A99=D=C<<B;@;$;C=@8 at 88=<;;<:C=B=C==<<C=;C==<<=<<<;==D====C<C=;<C==<;;D=D=9==C<C=;=;B;<;@8=;<<B;==<<<C<C<<<:=FB2<;<FB198B;9<;B;<;==C=<C<GC6(B;1
+ at SRR000123.11 EXRHO8E16JR2D4 length=262
+TCAGTATGAATTCCGTGGCTCGGATGCCGGATATATGTTTCGGTTGACACAGGAACCTGGAAGCCGGTTTGTGGAAATGACCGAAAATTACCGCAGTGCACGTCATGTAGTGGCTTTTGCTAACGAGTTTGTAAAGACATGCGCAGAATGAAAACGAATGCCTATTATTTCTATGCGGAAGGAGGAGGGAGTGGGTTGGAGTAACTCATCATCGGTCGTGCCTGTATGTATCAACCGCTCGTGGAAGAATTGTCTTCAGCAG
++SRR000123.11 EXRHO8E16JR2D4 length=262
+==;;===;D;C:?5=:F><==F><==E<F><<=====JD1;F=E=;:<===E=E<E<<C9B8=@6F=IB/=:C<E at -:::C<;FB5&B:6>6<<7:<=<===<<;;==<<;C==FC5'820>59969C>*=2?;#;54222254<:C;=7EA2"95<3<8B;<;C=4FB2<4<<8;B<=5@;2@;<FB2;9<@<&C=@;<78C=<874;18<;C=27(4,9/:<5<99<3==:0C=<852<:B:>67C<:0:(=?6:7<442
+ at SRR000123.12 EXRHO8E16JYG2J length=264
+TCAGATCGGCAATCGTAGCATCTTCAGTTTCTCCTGAGCGATGAGAGGTAACCGTAGTATATCCATGACGATGAGCCATTTCGATTGCATCCAGTGTTTCACTGAGTGAGCCGATCTGATTTACTTAATAAGGATGGAATTGGCACATCCCACGCTCAATACCTTTCGTAAGGAAGTCTACATTGTTAACGAACGAGGTCGATCGCCGTACCCACGCTGGCGAGCGTCCACCGACTACGTTCGGTTACGTTTTTACTTACTCCC
++SRR000123.12 EXRHO8E16JYG2J length=264
+==<==;<F>=D;=;=5==9<<<F><==JD1==F=====;<<<====F><F=F=<=====<==C<<<<<<;;<<;<C<;FB2<:<C<8<<<C<<;:=FB1<<<:<<<=;=<D=<=<<;=<FB1;=@;;2=B:9/=6;2;2C<?6:999<A=(:)<5<:@8;2B;@;%9=.@;A9A<(5:2<98B=07-8.<:C=7&2B:;<8<<;:B<(<=@;$9-<=<@8<5:<73<C=8C=<<*=<<9A<:C=D=3(2GC8-"94C<569EA.
diff --git a/test/fastq-loader/input/13.1.fastq b/test/fastq-loader/input/13.1.fastq
new file mode 100644
index 0000000..213002e
--- /dev/null
+++ b/test/fastq-loader/input/13.1.fastq
@@ -0,0 +1,12 @@
+ at EXRHO8E16JTGUV
+TCAGTTTCGGGAACTATGTAAACAATACGCTAAGCGTGTTCTATGGTTTTACAATGTTCAGGATGGAAACATTGTAGGAGATAACAACCGAGAAGTATCGCTGCCTGTCGGCTGAGACACGCAACAGGGGATAGGCAAGGCACTACAGGGGATAGGN
++EXRHO8E16JTGUV
+=<:7F?)9F?)>3<=<===F?*<D:<<<=<:F>=<==:D;==;=D;LE8,49E<==E==;E===E<F at +==E<==<D=<8<=C;;A9 at 7;<9>6<<===<=<<A:8<:;C<<=<;<<<9<:=B;88GC6(6<<C==C=C=<=<&<9=GC7):<<B:!
+ at EXRHO8E16JU4WU
+TCAGCTACATTGACCTTTTACTATAACATCTATGAAGGGATTATCGAAAGCCGTCGAAAGATTGGTAAAAAGACTACCGTGCGTGGTGTTATGAACCGTGTTCTTCCGAATGTGCTGGAGTTCAAAGAAATTTTGAAAAATAAAAAACCTTGCCTTTCGAGTTGATGCAAAACTACATCAAGGATTCAAGGGTTGACTATCAACGCAATTTAAGTACGCTGAGTAAAGCGTACTATCATCCCTGTGATGCTTTCTGTGAAGAGGTATTGGAATTACTGAG
++EXRHO8E16JU4WU
+<=49=:=<=D;==F=JC4%9====E<==<9===;E=HB.<D;====E>(<D:<=<=F?*=<D;E<=ME9.$=<<;9B;:<<;;<@9;:@9=8=>5C=<:8C<=>6 at 8==5<<<<=<D=<9D=;FB1;B>)GC7)<HD9/%<HC92+$@:C==C=FB18<=;D==<:<=HD8,3<=<<<<C<D=<C=;C=FB1C=;:<;;<<D=;<:@8FA/C=<<<<=:<:=<9FB2<<<;;;;=<<<<FB0<<<<<==;FB19:<<=C=9:C<29C=C<C<C<<<8<4<
+ at EXRHO8E16JVI1Y
+TCAGGGGGACGCCCCAAGGTGTATTCGTCCGAAGTTGCTGTGATGGTCACATGGTACATACGGTGATTGTTAAGACCATTAACACTACCCGTAGTTGTATTGTAAGTATATTTGTAAGGCCTCCTGAGACACGCAACAGGGGATAGGCAAGGCACACAGGGGATAGGN
++EXRHO8E16JVI1Y
+==<LE8-"=<9IC3"B8A7;===E<===E<<<1;>3;<<=====E=======E========E<===D:=B;C<==C<=C<C<<===<D?+<<=<B:<=<B:<=B;=<=<=D?,=<C;A:B:<?7==<=<<<==<D=<=GC6(:<=C=<C=D===<===HD8+<;=C=!
diff --git a/test/fastq-loader/input/14.0.fasta b/test/fastq-loader/input/14.0.fasta
new file mode 100644
index 0000000..67e5df2
--- /dev/null
+++ b/test/fastq-loader/input/14.0.fasta
@@ -0,0 +1,2 @@
+ at SRR390728.1.1
+GAGCAATAATGTCTATTTGGTTTTTTTTTTTTTTTTTTTTTTTTTTTCCGCCAATACACCCCACAACAAGTAACAC
diff --git a/test/fastq-loader/input/15.0.fastq b/test/fastq-loader/input/15.0.fastq
new file mode 100755
index 0000000..14e9753
--- /dev/null
+++ b/test/fastq-loader/input/15.0.fastq
@@ -0,0 +1,4 @@
+ at acec18be-55b3-42d3-afde-bb1eb13197f2_Basecall_2D_2d
+GAGAGGGTATATATAATACGAGAGCTCCCGGGAGGTACTACTCCCAGTCGGGAGAGTCGCGATATACTATACCCGGGTAATATACTCATCGCATATACGAGAGGGGATATACTCATCGGGTATAAGAGATGATAATGCAGATGATAGATATATCGGGAGAGATACTACTCATATAATATACTATATATACCATCGCTCCAGATATACCAGTATACTATACCCCAGAGAGATACTCTACCCGGGTATACCCGGGAGCTCCCAGGAGAGGATATATACGAGCACCATATAAGAGGTATACTCAGATATACTCATCGCGATATGGGTAGCATCTGGAGAGATGGTACCCATATATACTCTGGTACGAGCTCGAGCTCCATCGCGATATATACTATAATATACTCTCATCTGGAGTATATATACCCAGAGATGGATATACTCATTAATATGGGTATATATAATATACTCACCCAGCTCTACCCGGGTACCGAGAGC [...]
++
+(())(%(%%%%%%%%'%&%%%&%%%%()&%%%&%%%'&%%&''%&%&&'(('%'%%&%&%&%%%%%%%%&%%&%&'&&%%%&%&%%%&%%&%&%&%&%&%%%&&&%%%%%%&&&%%%%%%%%%%&%&%%&%%%%&&&&&%&&&&&&%&&&&&'&%&&%%&%%&%&&&'()''(((&&&&&%'('+*+)*)&&&'%&%&&%%'((%&(&&%%%%%&&'&&))))'%%%&%&&&&%'%%&&'%%%%%%%&%''&&%%%%%%%&&&&&&&&&%&%&%&%%%%%&%%%%%%%&&&&%%&%&%&%&&&%&%&%&&&&%&%%%%%&((&%%&%&&%&&&&%&%&&%%%%%%%%%%%%%%%&%&&'%%%%&%&%&%%%%%%&%%%&%%%%%%%%%%%%%%%%%%%%%%%&%%&&%%%%&&&&'&&&&%&%%%%%%%%%&%&%%%%%%%%%&%&%%%%%%&%&&%%&%%%&&%%%%%%&%%%%&%'%&'%%%%&&%&%&& [...]
diff --git a/test/fastq-loader/input/2.1.1.fastq b/test/fastq-loader/input/2.1.1.fastq
new file mode 100644
index 0000000..ba0f52e
--- /dev/null
+++ b/test/fastq-loader/input/2.1.1.fastq
@@ -0,0 +1,5 @@
+ at R16:8:1:0:875#0/1
+T123123
+ at R16:8:1:0:14#0/1
+G123123
+
diff --git a/test/fastq-loader/input/2.1.fastq b/test/fastq-loader/input/2.1.fastq
new file mode 100644
index 0000000..d3cc85b
--- /dev/null
+++ b/test/fastq-loader/input/2.1.fastq
@@ -0,0 +1,4 @@
+ at R16:8:1:0:875#0/1
+TGGAATAACCATTCCTCATGCCTAGAAGAAGAATCTCTACAAGCAGGATTCTTGCTTTCAAAATGCCCTTATAA
+ at R16:8:1:0:14#0/1
+TTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAGTA
diff --git a/test/fastq-loader/input/2.2.fastq b/test/fastq-loader/input/2.2.fastq
new file mode 100644
index 0000000..9f59a38
--- /dev/null
+++ b/test/fastq-loader/input/2.2.fastq
@@ -0,0 +1,4 @@
+>HWI-EAS6_4_FC2010T:1:1:80:366
+BBBBBBBBBBBBBBBBBBBB
+>HWI-EAS6_4_FC2010T:1:1:212:230
+CCCCCCCCCCCCCCCCCCCC
\ No newline at end of file
diff --git a/test/fastq-loader/input/2.3.fastq b/test/fastq-loader/input/2.3.fastq
new file mode 100644
index 0000000..878d296
--- /dev/null
+++ b/test/fastq-loader/input/2.3.fastq
@@ -0,0 +1,8 @@
+>HWI-EAS6_4_FC2010T:1:1:80:366
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+>HWI-EAS6_4_FC2010T:1:1:212:230
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+>HWI-EAS6_4_FC2010T:1:1:80:366
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
+>HWI-EAS6_4_FC2010T:1:1:212:230
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
\ No newline at end of file
diff --git a/test/fastq-loader/input/2.4.fastq b/test/fastq-loader/input/2.4.fastq
new file mode 100644
index 0000000..13816d0
--- /dev/null
+++ b/test/fastq-loader/input/2.4.fastq
@@ -0,0 +1,8 @@
+>HWI-EAS6_4_FC2010T:1:1:80:366
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
+>HWI-EAS6_4_FC2010T:1:1:212:230
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
+>HWI-EAS6_4_FC2010T:1:1:80:366
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+>HWI-EAS6_4_FC2010T:1:1:212:230
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
diff --git a/test/fastq-loader/input/2.5.fastq b/test/fastq-loader/input/2.5.fastq
new file mode 100644
index 0000000..28c749a
--- /dev/null
+++ b/test/fastq-loader/input/2.5.fastq
@@ -0,0 +1,9 @@
+ at HWI-EAS6_4_FC2010T:1:1:80:366
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_4_FC2010T:1:1:80:366
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+ at HWI-EAS6_4_FC2010T:1:1:212:230
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_4_FC2010T:1:1:212:230
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+
diff --git a/test/fastq-loader/input/2.6.fastq b/test/fastq-loader/input/2.6.fastq
new file mode 100644
index 0000000..ee402b2
--- /dev/null
+++ b/test/fastq-loader/input/2.6.fastq
@@ -0,0 +1,9 @@
+ at HWI-EAS6_4_FC2010T:1:1:80:366/1
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_4_FC2010T:1:1:80:366
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+ at HWI-EAS6_4_FC2010T:1:1:80:366/2
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_4_FC2010T:1:1:212:230
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
diff --git a/test/fastq-loader/input/2.7.fastq b/test/fastq-loader/input/2.7.fastq
new file mode 100644
index 0000000..70c76bc
--- /dev/null
+++ b/test/fastq-loader/input/2.7.fastq
@@ -0,0 +1,8 @@
+ at HWI-EAS6_4_FC2010T:1:1:80:366
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_4_FC2010T:1:1:80:366
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ at HWI-EAS6_4_FC2010T:1:1:80:366
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_4_FC2010T:1:1:212:230
+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
diff --git a/test/fastq-loader/input/2.8.1.fastq b/test/fastq-loader/input/2.8.1.fastq
new file mode 100644
index 0000000..2a1cc02
--- /dev/null
+++ b/test/fastq-loader/input/2.8.1.fastq
@@ -0,0 +1,4 @@
+ at GG3IVWD03HJRKK
+NTA
+ at GG3IVWD03HJRKZ
+NNT
diff --git a/test/fastq-loader/input/2.8.fastq b/test/fastq-loader/input/2.8.fastq
new file mode 100644
index 0000000..1384e06
--- /dev/null
+++ b/test/fastq-loader/input/2.8.fastq
@@ -0,0 +1,4 @@
+ at GG3IVWD03HJRKK
+NTA
+ at GG3IVWD03HJRKZ
+NTA
diff --git a/test/fastq-loader/input/2.9.1.fastq b/test/fastq-loader/input/2.9.1.fastq
new file mode 100644
index 0000000..36abd6f
--- /dev/null
+++ b/test/fastq-loader/input/2.9.1.fastq
@@ -0,0 +1,4 @@
+ at BILLIEHOLIDAY
+GTCG
++BILLIEHOLIDAY
+&.&.&.&.
diff --git a/test/fastq-loader/input/2.9.fastq b/test/fastq-loader/input/2.9.fastq
new file mode 100644
index 0000000..b4c6e95
--- /dev/null
+++ b/test/fastq-loader/input/2.9.fastq
@@ -0,0 +1,4 @@
+ at BILLIEHOLIDAY
+GTCG
++BILLIEHOLIDAY
+&.
diff --git a/test/fastq-loader/input/3.1a.fastq b/test/fastq-loader/input/3.1a.fastq
new file mode 100644
index 0000000..260fcb8
--- /dev/null
+++ b/test/fastq-loader/input/3.1a.fastq
@@ -0,0 +1,8 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+GAGCACGAGGACCCANNNATCAACGACNANNNGANN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
diff --git a/test/fastq-loader/input/3.1b.fastq b/test/fastq-loader/input/3.1b.fastq
new file mode 100644
index 0000000..2d0d2b9
--- /dev/null
+++ b/test/fastq-loader/input/3.1b.fastq
@@ -0,0 +1,9 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+ACTGGAGCACGANAGNCCCNCNACTNANANCNGNNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+CTGGAGCACGAGAACNCNGCCCGGACANANGNGCNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
+
diff --git a/test/fastq-loader/input/3.2a.fastq b/test/fastq-loader/input/3.2a.fastq
new file mode 100644
index 0000000..1c6c81d
--- /dev/null
+++ b/test/fastq-loader/input/3.2a.fastq
@@ -0,0 +1,8 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+ACTGGAGCACGANAGNCCCNCNACTNANANCNGNNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+CTGGAGCACGAGAACNCNGCCCGGACANANGNGCNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+GAGCACGAGGACCCANNNATCAACGACNANNNGANN
diff --git a/test/fastq-loader/input/3.2b.fastq b/test/fastq-loader/input/3.2b.fastq
new file mode 100644
index 0000000..166cc59
--- /dev/null
+++ b/test/fastq-loader/input/3.2b.fastq
@@ -0,0 +1,8 @@
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+40 40 40 40 40 27 40 40 12 8 5 6 -5 -3 0 -5 -4 0 4 -5 7 -5 7 1 0 -5 -0 -5 -1 -5 -0 -5 7 -5 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+40 40 40 40 40 40 40 23 40 40 9 22 -2 14 9 -5 7 -5 0 -2 3 9 -1 0 7 3 0 -5 8 -5 -3 -5 10 2 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+40 3 1 22 17 18 34 8 13 21 -3 7 5 0 -0 -5 1 -0 7 3 2 -3 -3 3 -1 -1 4 -5 5 -2 -2 -5 -0 -1 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+40 40 40 40 40 40 40 22 33 40 16 29 4 -1 1 -5 -5 -5 7 -3 1 -1 -1 6 -1 14 -1 -5 -2 -5 -5 -5 6 -1 -5 -5
diff --git a/test/fastq-loader/input/3.3a.fastq b/test/fastq-loader/input/3.3a.fastq
new file mode 100644
index 0000000..166cc59
--- /dev/null
+++ b/test/fastq-loader/input/3.3a.fastq
@@ -0,0 +1,8 @@
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+40 40 40 40 40 27 40 40 12 8 5 6 -5 -3 0 -5 -4 0 4 -5 7 -5 7 1 0 -5 -0 -5 -1 -5 -0 -5 7 -5 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+40 40 40 40 40 40 40 23 40 40 9 22 -2 14 9 -5 7 -5 0 -2 3 9 -1 0 7 3 0 -5 8 -5 -3 -5 10 2 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+40 3 1 22 17 18 34 8 13 21 -3 7 5 0 -0 -5 1 -0 7 3 2 -3 -3 3 -1 -1 4 -5 5 -2 -2 -5 -0 -1 -5 -5
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+40 40 40 40 40 40 40 22 33 40 16 29 4 -1 1 -5 -5 -5 7 -3 1 -1 -1 6 -1 14 -1 -5 -2 -5 -5 -5 6 -1 -5 -5
diff --git a/test/fastq-loader/input/3.3b.fastq b/test/fastq-loader/input/3.3b.fastq
new file mode 100644
index 0000000..1c6c81d
--- /dev/null
+++ b/test/fastq-loader/input/3.3b.fastq
@@ -0,0 +1,8 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:212:211
+ACTGGAGCACGANAGNCCCNCNACTNANANCNGNNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:182:340
+CTGGAGCACGAGAACNCNGCCCGGACANANGNGCNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:118:250
+GAGCACGAGGACCCANNNATCAACGACNANNNGANN
diff --git a/test/fastq-loader/input/4.4.fastq b/test/fastq-loader/input/4.4.fastq
new file mode 100644
index 0000000..f53b4ad
--- /dev/null
+++ b/test/fastq-loader/input/4.4.fastq
@@ -0,0 +1,13 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC21F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC22F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC23F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC24F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC25F3DAAXX:8:2:342:540/1
+G12312312312312312312312312312312312
+
diff --git a/test/fastq-loader/input/4.5.1.fastq b/test/fastq-loader/input/4.5.1.fastq
new file mode 100644
index 0000000..2c5c331
--- /dev/null
+++ b/test/fastq-loader/input/4.5.1.fastq
@@ -0,0 +1,10 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX
+G12312312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC21F3DAAXX
+G12112312312312312312 312312312312312
+ at BILLIEHOLIDAY_1_FC22F3DAAXX
+G1232231231231231231 2312312312312312
+ at BILLIEHOLIDAY_1_FC23F3DAAXX
+G12313312312312312312312312312312312
+ at BILLIEHOLIDAY_1_FC24F3DAAXX
+G12312112312312312312312312312312312
diff --git a/test/fastq-loader/input/4.5.fastq b/test/fastq-loader/input/4.5.fastq
new file mode 100644
index 0000000..3781903
--- /dev/null
+++ b/test/fastq-loader/input/4.5.fastq
@@ -0,0 +1,10 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G1231231231231231 2312312312312312312
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G12112312312312312 312312312312312312
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G123223123123123123 12312312312312312
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G1231331231231231231 2312312312312312
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+G12312112312312312312 312312312312312
diff --git a/test/fastq-loader/input/4.fastq b/test/fastq-loader/input/4.fastq
new file mode 100644
index 0000000..069381b
--- /dev/null
+++ b/test/fastq-loader/input/4.fastq
@@ -0,0 +1,5 @@
+ at BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540/1
+GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN
++BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540
+&.<77478889998776776:997974354774779
+
diff --git a/test/fastq-loader/input/5.0.fastq.gz b/test/fastq-loader/input/5.0.fastq.gz
new file mode 100644
index 0000000..7c236e5
Binary files /dev/null and b/test/fastq-loader/input/5.0.fastq.gz differ
diff --git a/test/fastq-loader/input/6.0.fastq b/test/fastq-loader/input/6.0.fastq
new file mode 100644
index 0000000..1a065e7
--- /dev/null
+++ b/test/fastq-loader/input/6.0.fastq
@@ -0,0 +1,52 @@
+ at GG3IVWD03HJRKK length=290 xy=2978_1730 region=3 run=R_2010_05_11_11_15_22_
+ATATACATTTGTCTGTACAGCATGGAATTCTCATACTCTAATCAATATAAAATAATGATTGATTATTCAAGAAAATAAATTGTCAGACAAATGAAAAATAATCTTAAGCCACAGCCCTAAAATACCGTAGATACCATGAGACAAAAAACACTGCTTCCACGAGTCAGGAGCAACTCCCATTATTTTACATTTTATCACCGCCGTCCATTTCTCTTCAGTCTTTTTTACTCTTTTGATTTATTTATTTTACACAAAACAATTATTTATAATTGATTTATTCAGTTTATTTA
++
+89:HHA:/1192DCHHIIEIIIIGGGGIIIIIIIIIIIIIIIIIIIA95553A8<EHHGIIIIGEEAHD;71111;///AADBGIIIIEDDCC:::::I77DIHHIIIDDDGID556===@@H?IIIIIIIIIIIIIIIIII669997B2BBIIIIIIIIIIIIIIIIIII;;;;;;HIIIE;;;;IDA444482DE>>@<?IGHHI>>>B>IIIGGGGG677722HI1=53117;@B=;//1=8;=:DDCD>>@@G<;>>=BBEIIIIDABB=>9;00750,,,51411
+ at GG3IVWD03GMLDS length=238 xy=2600_2350 region=3 run=R_2010_05_11_11_15_22_
+TGAAGCCAAGAAGCCACAGCAACATCATGTTTGAGGAGAAGAAGAGCTCCTAAGACGGAGGCTTCCTGTCGGCTGTTCCCTCTGGAGAAGAAGAAGTGACGTTGCCTTGCGAATGTTAGTTTGTAAGAGAACCTGTTCAGTTCGTAACCTTAATCCTCAGCCGACCTGTATTAGACACGTGTCTCCCTCCATGTATGAACTGAAGCCATCCTCCAGGTGAGTCGCTCACTCTGACCCA
++
+FFEEEFFFFFFIIIIIIIHF;;;HHHHHH@@@IIIIIIIIIIIIIIIIIDFDFFFFFFFFFFFFFFFFFFFFFFFDD?::99B566:=ABDDDDDD???DDA==:::::9<==>>=?<111187>><<<=>>899>>>900048888<<<<@<888<<<?AA8555::DAAADDDFFFDCCFFFFFC<99<?FFFFDDDACCFD???AADA???AAADFDDDDDDBBB??==772212
+ at GG3IVWD03GFQBB length=1 xy=2522_1637 region=3 run=R_2010_05_11_11_15_22_
+N
++
+!
+ at GG3IVWD03F2Q8L length=151 xy=2374_2515 region=3 run=R_2010_05_11_11_15_22_
+AGCGGGAGAGGGGCACATGGTGTGAGGGTCCCAGGATGAACACCCTACGAGTAATAGAGGGATCAACCTGCTTGTAGGCATGTGCCGCACAAGAACCACAATAGGTATACCCAGCATGCGGCGCAATGATGGCTCTAGCAGGTTTGATCGT
++
+HII===EBH>>>>EEIIIIIIIIIIHHHIHHHIIIIIIIIIIHHHIIIIIIIIIIIIIHHHIIIIIIIIIIIIIIIIIIIIIEBBADGGG<<>AAAAADDEEHHHHIIIEDFFIIIEEEEIGBB===BIIIGED==AAA?/////2:=::8
+ at GG3IVWD03G7J0C length=245 xy=2839_1402 region=3 run=R_2010_05_11_11_15_22_
+CCTCGTCGCTTCACTTTTCATGGGCTTCGGAGTGCTGTTCCTGCTACTTTGGGTTGGAATATACGTTTGAAGCTTTGGGTGACTGACTTATAATATGACACATTCCAGTCGAACAAAGGACATCACACACAACACCAACTGGATTCTGTACTCAATTGGACTGCACTGACAATATTTTGAGATTGTATGGAGTCTGGTTTTGTTTCACAATTGAAGATGATTTGTAAACGAAAAAANAAAAAGTA
++
+IIIIIIIIIIIIII;;;;IIIHHHIIIIIIIIIIIIIIIIIIIIIIIHHHHHHIIIIIIIIIIID;;;HIIIIHHHHHHIIIIIIIIIIIIIIIIIIIIIII;;;;IIIIIIIIHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICCCCIIIIIIIIIIIIIIH@@BBIIIIIIIIDC>>==FB=22---0/,--5=B==@@@EIIEDDD>>>9122229666624!/3333IH8
+ at GG3IVWD03G2V2N length=1 xy=2786_0845 region=3 run=R_2010_05_11_11_15_22_
+N
++
+!
+ at GG3IVWD03HKKWM length=288 xy=2987_2884 region=3 run=R_2010_05_11_11_15_22_
+CTAGGGCTGGGCAATATGACCTAAAATGTATAACCTCGGTATAATTTGGAGCACAAACGGTAACGGTACAAATCACGGTATTTTTGATGGTATACGTCCACCCAAGGCAAGCGTACCGCTGTGCAAATGGACCGTCGAGGGTTCCTAGTTTGTGTTGGAGATGAAATAGCTGCGCTGTAAACGAGTCGTCGTGGATCTTTTGGTCTTCTTTTCTTTGGACGTGTGTTCGCGGGTCTGTGCGGGTCGAACAAGCTAGCGCTAGCCTCGGCTCCGCGGAGCTGCGATGGT
++
+IIIHHHIIHHHIIIIIIIIIIICCCCIIIIIIIIIIIIIIIIIIHHHIIIIIIIHHHIIIIIIIIIIIIHHHIIIIIIIH66666DHIIIIIIIIIIIIIGGGIIIIIIIIIIIIIIIIIIIIIHHHIIIIIIIIIHH;;;??HHIIIHHHIIIIIIIIIIII???IIIIIIIIIIIIHHHIIIIIIIIIIIIIIID><97<95B=52////8///@@EIIIIIIIIIIIHHHIIIIIH??;;;HIIIIIIIIIIIIIIIIIIIIHHHHHHIIIIIIIIIIIIIIIII
+ at GG3IVWD03G0YS1 length=141 xy=2764_1187 region=3 run=R_2010_05_11_11_15_22_
+ACTATCATTATTTGCTGCATGCACAATGCCAAAGAATAAAATGCTGTCTGTCAATGAATGAGGCGTCTAATCCGCACTGACCTCAACTTTTCCACTGAGGATTTGCAGAGGTGTGTGTGTGTGTGTGTGTGTGTGTGTCGA
++
+FFFFFFFFFFFHHIIIIIIIHHGFDDDDAA663:9AB9::;DFFFFFFFFFFFFFFFFFFFCDDFFFFDDDFFFFFFFDBAAAAA<8111144AAA?AABFFFDDDDDFFFFFFFFFFFFFFFFFFFFFFDBA??=6643/
+ at GG3IVWD03FQOVY length=1 xy=2237_0748 region=3 run=R_2010_05_11_11_15_22_
+A
++
+/
+ at GG3IVWD03HD8KU length=250 xy=2915_1884 region=3 run=R_2010_05_11_11_15_22_
+GTGCAAGAGGCTGAGGCTAACAAAGTGCATCAACCTATGTGGAAGCATCGAAGGCCCGCGTGGCTCAGTATGAGCAAGAGCTGAACAAGTTGAGGAACATGATCCCCTTTGTATCAGATGACCATTGAAGACCTCAACGAAGTCTTCCCCGACGACCAAGTTGGACAAGGTCAAATAATCCCTACCTGGCCCCACCAAGCCCACTTGCTGATATGTAACCCCGTTACCAGACTCTCACCTCACAATAAAT
++
+FFFFFFFFFFFIIIIIIIIHH666BFHIIIIIIIIIIIIIIIIIIIIIIIIIFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDCFB@?>>4222.../-4377:9777996664223266:666<:333779;222244.3322667;;../426;;44...4//<66357//366.0..415;;=66440449999:?<==AAA7766@>41//14=998=?A at A:9:<>>A;;84
+ at GG3IVWD03GXKBC length=77 xy=2725_2182 region=3 run=R_2010_05_11_11_15_22_
+ATACATATCTGCTGACAGAGCCTGGCTCTGTTGGCTGTAGAGTCCCTGCTGAGCCAGGCTCTGTCAGCAGATATGTA
++
+IIIIIIIIIIIIIIIIIIIHHHHCCGGIIIIIIIIIIIIIIIIHHGHHIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+ at GG3IVWD03HIDOA length=3 xy=2962_2600 region=3 run=R_2010_05_11_11_15_22_
+AAT
++
+111
+ at GG3IVWD03HB687 length=306 xy=2892_1065 region=3 run=R_2010_05_11_11_15_22_
+TCCTGTTTGAAGACCTTACTCTTGGCGTGGTCGTCACAGTAGCATGCCTTACAGCGCAGGCAGGAGTGTTGTCCCAGTCTGTTACAGGACACACACTTGTATGTTTCTGCCTGGAGGATTTGGCAGCTTGCCTGGTGCTCAAACTGATCATCCTCACACAAGAAGTTTTGGCAGAAAGAGCAGCGGAAAATTCGCCCTCCATGATCCCAGACACTACGCTCACACTCAATGCAGTCTGCATCCGTTAGGGGACATGCACAGGCGTGAGTGCTCAGACATTTTCCTCCCAAGGCACACAGGGGGATA
++
+IIII;666??HIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHIIIIIIIIIIIIIIIIIIIIIHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHIIIIIIIIIIIIHHHIIIIIIIIIIIIIIIIIIIHHHIIIHHHIHHHHHIIIIIIIIIICCBBIIIII;;;E<EAGGI=;4442@@HE774=7:EEEE?455IIIIIIIIIIIIIIIIIIDCCDDIIIIIIIIIIIIIIIH??>>?DIIIIIIIC????HIIIEA?AB=;=;00--..-333....:=;;;8---//;53
diff --git a/test/fastq-loader/input/7.1.fastq b/test/fastq-loader/input/7.1.fastq
new file mode 100644
index 0000000..d79f3ec
--- /dev/null
+++ b/test/fastq-loader/input/7.1.fastq
@@ -0,0 +1,9 @@
+ at m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19/ccs
+AGAGTTTGATCCTGGCTCAGAGTGAACGCTGGCGGCGTGCTTAACACATGCAAGTCGAACGGATGAAATAAGCTTGCTTATTTCGTTAGTGGCGCACGGGTGAGTAATGTATAGCTAACCTGCCCTTTAGTGGGGGACAACAGATGGAAACGTCTGCTAATACCCCATACTCCTGCGTATCATAAGATATGTTGGGAAAGATTTATTGCTAAAGGATGGGGCTTTATGGTATCAGCTAGTTGGTGGGGTAACGGCCTACCAAGGCAATGACGCCTACCTGGTTCTGAGAGGATGATCAGGCACACTGGAAACTGAGACACGGTTCCAGACTCCTACGGGAGGCAGCAGTGGGGAATATTGCACAATGGGGGAAACCCTGATGCAGCAACGCCGCGTGGAGGATGACGCATTTCGGTGTGTAAACTCCTTTTATAAGGGAAGATAATGACGGTACCTTATGAATAAGCACCGGCTAACTCCGTGTCAGCAGCC [...]
++m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19/ccs
+LLhf>>>>[[HHdggghhhhhhhNLPPhhhGGhNNhffhhSS777__gh]]hhUUhhSSSdaGGhZZZZhhhhHHHOQhhKKKLUUhhe3WWYHHUhhhhhZZhhKJ'bEEbCC^gZKZdhhMMM,,,,^fVVAIV]]=<=hhhNNhXXX at hhhEE]_OOOC8988VhHhXEEE_ffQQgeZZHFHUUTThOO222222_aafdhWWW^^hhRHHHh++++hFFF[hUU??BBhcaabhOOMMLNNNNRggXTTUdeh^hbcQTOOffhLLh55bXUXbII%%Whh]]hXUP\hg99hee..cgghhh111\hhhhggG99@,,\_ddKKQPYYhhhhh=67bbgHHahCCCC>??g111hhh\\\88888DFFEQQWW??Xf]EE888[$$IbecceJJfT`hXJR>>WWWYh^gOMRE>>>?hfb>>>>>hVV&&&eehhg^^^hQOTKhUT[LhhhhKZZKKK--SR&&c=111hdEdWWhcdDEdO9+ [...]
+ at m121205_055009_42163_c100416332550000001523041801151327_s1_p0/25/ccs
+AGAGTTTGATCCTGGCTCAGGACGAACGCTGGCGGTATGCTTAACACATGCAAGTCGAACGAGACGAGATGGAATGACCCTTCGGGGAATGAAATCTTAGAAAGTGGCGAACGGGTGAGTAACGCGTGGGTAACCTGCCTATGGAAAGGAATAGCCTCGGGAAACTGGGAGTAATGCCTTATAATACAGTGAAGTCGCATGGCTTTGCTGTTAAACGCTCCGGTGCCATAGGATGGACCCGCGTCCCATTAGCTAGTTGGTGAGATAACAGCCCACCAAGGCGACGATGGGTAACCGGTCTGAGAGGGCGAACGGTCACACTGGAACTGAGACACGGTCCAGACTCCTACGGAGGCAGCAGTGGGGAATATTGCGCAATGGGCAACCCTGACGCAGCAATACCGCGTGAGTGAAGAGGTTTTCGGATCGTAAAGCTCTGTTATTGGGGAAGAAAAAAGACGGTACCCAAGAAGAAAGTCCCGGCTAACTACG [...]
++m121205_055009_42163_c100416332550000001523041801151327_s1_p0/25/ccs
+heehhhhhhhhhhffhhhhhhhhhhhhhhhQQhgghhhhhhhTThh`hhhhhhhhhhhh_hhhhhhhhhhddhhhhhhhhhhh66668hhhVVVhhhhhhVVVhh\\hhhhh===hhhhhhhhhhhhhbfhhhhhhh333hhhhhhhddhhhhhggghhhhhhhhhZZZhhhhhhh;;ffhhhhhhhhhhh+$%%hhhhhffh]]]]hhhhhhhhhZZggghhhh__ghhgghhhhhdddhZZh999hhhh^^hhh__fghhhhhhhhhhhKKKd00cc==hhhhhhhbbbhhheehehhhhhhhHHHehhhhhhhhhfhhhhUhhhhhhhhhhe??hbbchhhhhhhhh333^^ffhhhhh////gghh44hhhhhhh....ggVVUhhhhhhhYMNchhhbedhhhhhhh==a'&0CCCChhhhhehh]]]]hhhhhggghhFFFFhh^HHHHHHhhMMghhMMMNNhddhDDDhgAAAQQ``hhhhhhh [...]
+
diff --git a/test/fastq-loader/input/7.2.fastq b/test/fastq-loader/input/7.2.fastq
new file mode 100644
index 0000000..6f07408
--- /dev/null
+++ b/test/fastq-loader/input/7.2.fastq
@@ -0,0 +1,8 @@
+ at m101111_134728_richard_c000027022550000000115022502211150_s1_p0/1
+ATCCACCCCTCCCACCCACCCCCCCCCCCCTACCCCCCCTCCCCCACACACCCTCCCCCACACCCCTGTCCCCCCCACCGCCGCCCTCCCGACGCCCACACAAAAAAACCCATCCCACACACCCCCCACCCCCCATCACAACACGCCACCCACCCCCCAGCACACCACCACCCCACAAACCAGCCCCCCCACCCCCCCACCCCACCCCCCACAACAC
++
+'!%!%#!!!!!!%"!!!$"!!!!!!!!!!#""!!!!$!!!#!!!!!!!!!!!!!!$#!"!!!!!!!!!!$'!!!#"!!!!!&!!"$!!!$!!!!!%!!&!!!!!!!!$!!&!%!"!!!!!!&!!$!!#!!!!$!!!!!&!!!!&!!"!!#)!"!!%!!!!!"%!!!"!"!"!!&!)!!#!!!!"$!!!!&!!%!!"!'!!!!$"!!"$!!!!!!!!"
+ at m101111_134728_richard_c000027022550000000115022502211150_s1_p0/2
+CCACACCCCCACCCAACCCCACGGCCCCCAACCACCACCACCAAAACACCCCGCGCCCCACCCCCACACCCCACACGCCACCCGCCACCCGCCACAACGCCCCGACGCGAAACCCACCCCGCGCCCACCAACCCACCACCCCGACACCCACCCCCCGCACCACCCCCCCCGCGCACCGCCCACCCCACAAACGACGCCAACTCCAACCCCCCCCCCGCCACCCAGCCGCCCCCCCCACCAGCCCCCCACCCCGCCCGAGCCCGACGGCCACGCGCCCGCACCCCAGCCGCCCCCAGCCCCCCCCCCCCCCACACAAAAACCAACCCAAAACAAAAACAAACCAAAACAACAAACGCCACCAAAAACAAAAACACCAAAAAAAACACCAACCAAAACAAACAACAACCACTCCACCCCCGCCCCCAACCCCGACCCCCAACAAAACGCACACCACAAAACGCCACCCCGACACACCACGCGCAGCCCCACACA [...]
++
+#!!$!"!!!!!""#!%!#!!!!!$!!!!&!!!$!%$!!!#!!!!!!!"&%$!!!#"!!!!!!%#!"!!!!!!!!!!!!!!!!!!!!!!!&!!'!!!"!!#!!""##!!"!!!!!!#!!!#%!#!!$$#!$$!!!"#"!!$!!!!!!!!#!!!!!$&!!&!$"!!!(!!!!"!!!!!!!!!!"#!!(&!!!!&!'$!!!!$%!!!!!!!!!!!!!!!!!!!!!!!'!!!!!!!!"!!!!#&!!!!!!!!!!!!!!&!#!!!!!!!!!!!"!!!"!$!!#!"!'%!#(!!%!#"!$!'!!!!!"!$""#!!!!"!!!%!!!!!%%!#!!!!$#!!!$!!!"!!!!!!$!!$!!!#"!!!!!!!"!!!!!!!!!!!!!!!!!!!!!#!!!"!!!$!!#"'!"!"'%!!!!!!!#!&!"!!!!!)!!!!!"**!!#!!!!&!!#!!!!"!#!!!!!!!!!!!%%!!!"!!!!(!!!!!!!!!!!!!%!#!!#&'!& [...]
diff --git a/test/fastq-loader/input/7.3.fastq b/test/fastq-loader/input/7.3.fastq
new file mode 100644
index 0000000..2b47bed
--- /dev/null
+++ b/test/fastq-loader/input/7.3.fastq
@@ -0,0 +1,8 @@
+ at m101210_094054_00126_c000028442550000000115022402181134_s1_p0/2 ccs
+GGTAGAGGTCTTCGTCGCTGTCTCCGCTTCAGTCGCCGCCCTCGCCTCTTGCTGTGCGCGCTTCAGCAAGCCGAGTCCTGCGTCGAGAGATCTCCTCTGGTTCTCTTTCGCTTCCGGTCCTGTTCGGGCGCCACTGCTAGAGATTTCTACACTAACTAAGATGGTCTGAGGGATCTCTAGCTACCAGAGTCACACAACAGACGCTACC
++m101210_094054_00126_c000028442550000000115022402181134_s1_p0/2 ccs
+5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
+ at m101210_094054_00126_c000028442550000000115022402181134_s1_p0/3 ccs
+GGGACCTCGCGCCGCGACGGAGGAGCCGTCTCTTGAAGAGAGCGCGCGAGAGAGGCGGGACAGGCGAGGGGCCGGCGCGTGACGCGGACGAGTCGCGCGAAGCTCCTCTCATGTACGACGTCAGCAGCGCAGAGCTCCTAGTGCGTCGCACAGAGCACATAGCCTCTCGCTAACCATCCCGACACACACAACGGAGGAGCGGAGAAGATCAGAAGACAGAGAATGGAGAGGGGACGCGAGGCGGCGCTGACAGGAACTGGCTGAGTCGCCGCTGTGCTGATGCGCGCGCGCCGCAGTGGCGCGCGCGCGCTGTTCGCGTGCAGAGGCGAGGCGCGCCGGGCCCGCGTCGTAGCTCTGGCCGACCGCTCTTAGCAGAAGCGAGTCGGCGTCAGAGATCCCATCTCCATTCTCGTCCGCCCAACGTCTAGTCCAACAACGCCAACGGCAGGAGGATGAAACAGAACGCATGAAATGATCGCGTGATGCGGACGA [...]
++m101210_094054_00126_c000028442550000000115022402181134_s1_p0/3 ccs
+555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 [...]
diff --git a/test/fastq-loader/input/8.0.fastq b/test/fastq-loader/input/8.0.fastq
new file mode 100644
index 0000000..2e3c64e
--- /dev/null
+++ b/test/fastq-loader/input/8.0.fastq
@@ -0,0 +1,9 @@
+ at HWI-EAS6_4_FC2010T:1:1:80:366/1
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_4_FC2010T:1:1:80:366
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+ at HWI-EAS6_4_FC2010T:1:1:80:366/3
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_4_FC2010T:1:1:212:230
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
diff --git a/test/fastq-loader/input/8.1.fastq b/test/fastq-loader/input/8.1.fastq
new file mode 100644
index 0000000..92c872b
--- /dev/null
+++ b/test/fastq-loader/input/8.1.fastq
@@ -0,0 +1,17 @@
+ at HWI-EAS6_4_FC2010T:1:1:80:366/1
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_4_FC2010T:1:1:80:366
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+ at HWI-EAS6_4_FC2010T:1:1:80:366/3
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_4_FC2010T:1:1:212:230
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ at HWI-EAS6_5_FC2010T:1:1:80:366/1
+AACTGATCAACCTGCGGATCGAACGCAAGCGCA
++HWI-EAS6_5_FC2010T:1:1:80:366
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+ at HWI-EAS6_5_FC2010T:1:1:80:366/2
+ACAGGCTCATGCTGCTACCCTCGGGGCGAGGCC
++HWI-EAS6_5_FC2010T:1:1:212:230
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
diff --git a/test/fastq-loader/input/9.0.fastq b/test/fastq-loader/input/9.0.fastq
new file mode 100644
index 0000000..5e3ded4
--- /dev/null
+++ b/test/fastq-loader/input/9.0.fastq
@@ -0,0 +1,16 @@
+ at DG7PMJN1:293:D12THACXX:2:1101:1161:1968_1:N:0:GATCAG
+CTAACTTTTATGATATTTTGGTGGTAATTTGGTATGGTTAGATTTGTTTGAAAGCCAAATTAGAGTTCTACTTAGATGTCCCCATCATGGAACAGGGAATA
++
+??<D;DDDFAC8,C:CFGIBG+CC)3<CFH>C1*:EFDBC?*1BGF0BF@*9DC>B)??CCBC:D784@=FEE at EA:)7))=?9?7@@BC:>;;3=@BBBB
+ at DG7PMJN1:293:D12THACXX:2:1101:1275:1946_1:N:0:GATCAG
+GTACATGTATAGCATGTATTAATACATCTACAGTATTGATATGAGAAATAAACAAAAGTATGATGTGAAGTCCCTAGTAAGAAATATTAGTTCCTGTCCTG
++
+BB at DFFFFGHGHHIIHFHIIIJJJJJJJIGIJJHHIJJFEIHIFIFCDEGHIIJIJIJFGIIFIHGIIJJGIIJJIIGJIIIGGEHIJHHHFHGHFFFFFF
+ at DG7PMJN1:293:D12THACXX:2:1101:1161:1968_2:N:0:GATCAG
+CTGCTGCTCATGTGTCTTTCTGACAAGAACAGACTAGCAGAACTCATCTGGGAAGTAAGAGTATAGTTTATTAGAAATGATAAGTTGCGCTTAACTGGCTG
++
+ at B@F?DAEHH4C<AC:EEH>CIFHIGGG>EGGHCFEGGGGCEGHIJJGGGGEBGIHG>?FHB<E<C at EGGGEGIF>HAGGEFCHH?E3593>@ACCDCBC?
+ at DG7PMJN1:293:D12THACXX:2:1101:1275:1946_2:N:0:GATCAG
+GTAAATTAATTTGTCATAATAAATAGAAGTCAGAAATCCTTACTTCAATCCACAATGCTCTCTCCTCCCTAACTTTCTATGTGGGATAGGTACTTACAATT
++
+ at BCFFFFFHHHHHHIGGIIJJIIJJIJIJHGIHIIIJGGHIGHIIJJIJGIIJJJJJJJJJJIJGIJJIJIHJJJJJJIJIEHGHCEFDFFFEEFEEEDDD
diff --git a/test/fastq-loader/runtestcase.sh b/test/fastq-loader/runtestcase.sh
new file mode 100755
index 0000000..d5e4a98
--- /dev/null
+++ b/test/fastq-loader/runtestcase.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# $1 - path to vdb tools (fastq-load.3, vdb-dump)
+# $2 - work directory (expected results under expected/, actual results and temporaries created under actual/)
+# $3 - test case ID
+# $3 - expected result code from fastq-load.3
+# $4, $5, ... - command line options for fastq-load.3 
+#
+# return codes:
+# 0 - passed
+# 1 - coud not create temp dir
+# 2 - unexpected return code from fastq-load.3 
+# 3 - vdb-dump failed on the output of fastq-load.3
+# 4 - outputs differ
+
+BINDIR=$1
+WORKDIR=$2
+CASEID=$3
+RC=$4
+shift 4
+CMDLINE=$*
+
+DUMP="$BINDIR/vdb-dump"
+LOAD="$BINDIR/latf-load"
+TEMPDIR=$WORKDIR/actual/$CASEID
+
+echo "running $CASEID"
+
+mkdir -p $TEMPDIR
+rm -rf $TEMPDIR/*
+if [ "$?" != "0" ] ; then
+    exit 1
+fi
+export LD_LIBRARY_PATH=$BINDIR/../lib; 
+
+#CMD="$LOAD $CMDLINE -o $TEMPDIR/obj --no-user-settings 1>$TEMPDIR/load.stdout 2>$TEMPDIR/load.stderr"
+CMD="$LOAD $CMDLINE -o $TEMPDIR/obj 1>$TEMPDIR/load.stdout 2>$TEMPDIR/load.stderr"
+#    echo $CMD
+eval $CMD
+rc="$?"
+if [ "$rc" != "$RC" ] ; then
+    echo "$LOAD returned $rc, expected $RC"
+    echo "command executed:"
+    echo $CMD
+    cat $TEMPDIR/load.stderr
+    exit 2
+fi
+
+if [ "$rc" == "0" ] ; then
+    CMD="$DUMP $TEMPDIR/obj 1>$TEMPDIR/dump.stdout 2>$TEMPDIR/dump.stderr"
+    eval $CMD
+    rc="$?"
+    if [ "$rc" != "0" ] ; then
+        echo "command executed:"
+        echo $CMD
+        cat $TEMPDIR/dump.stderr
+        exit 3
+    fi
+    diff $WORKDIR/expected/$CASEID.stdout $TEMPDIR/dump.stdout >$TEMPDIR/diff
+    rc="$?"
+else # load failed as expected
+    # remove timestamps
+    sed -i -e 's/^....-..-..T..:..:.. //g' $TEMPDIR/load.stderr
+    # remove pathnames
+    sed -i -e 's=/.*/==g' $TEMPDIR/load.stderr
+    # remove source locations
+    sed -i -e 's=: .*:[0-9]*:[^ ]*:=:=g' $TEMPDIR/load.stderr
+    # remove version number
+    sed -i -e 's=latf-load\(\.[0-9]*\)*=latf-load=g' $TEMPDIR/load.stderr
+    diff $WORKDIR/expected/$CASEID.stderr $TEMPDIR/load.stderr >$TEMPDIR/diff
+    rc="$?"
+fi
+if [ "$rc" != "0" ] ; then
+    cat $TEMPDIR/diff
+    echo "command executed:"
+    echo $CMD
+    exit 4
+fi    
+
+#rm -rf $TEMPDIR
+
+exit 0
diff --git a/test/fastq-loader/test-fastq-loader.cpp b/test/fastq-loader/test-fastq-loader.cpp
new file mode 100644
index 0000000..82e0dca
--- /dev/null
+++ b/test/fastq-loader/test-fastq-loader.cpp
@@ -0,0 +1,229 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Long-running tests for ReaderFile-related interfaces
+*/
+
+#include <cstring>
+#include <ctime>
+
+#include <ktst/unit_test.hpp>
+
+#include <klib/out.h>
+
+#include <kapp/args.h>
+
+#include <kfs/directory.h>
+#include <kfs/impl.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/schema.h>
+
+extern "C" {
+#include <loader/common-reader.h>
+#include <loader/common-writer.h>
+#include <loader/sequence-writer.h>
+#include <loader/alignment-writer.h>
+#include "../../tools/fastq-loader/fastq-reader.h"
+#include "../../tools/fastq-loader/fastq-parse.h"
+}
+
+using namespace std;
+using namespace ncbi::NK;
+
+TEST_SUITE(LoaderFastqTestSuite);
+
+///////////////////////////////////////////////// tests for loading FASTQ files
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+class TempFileFixture
+{
+public:
+    static const string TempDir;
+    static const string SchemaPath;
+    static const string DbType;
+
+public:
+    TempFileFixture() 
+    :   wd(0), rf(0)
+    {
+        if ( KDirectoryNativeDir ( & wd ) != 0 )
+            FAIL("KDirectoryNativeDir failed");
+            
+        if ( VDBManagerMakeUpdate ( & mgr, wd ) != 0)
+            FAIL("VDBManagerMakeUpdate failed");
+            
+        if ( VDBManagerMakeSchema ( mgr, & schema ) != 0 )
+            FAIL("VDBManagerMakeSchema failed");
+        if ( VSchemaParseFile( schema, SchemaPath.c_str() ) != 0 )
+            FAIL("VSchemaParseFile failed");
+        
+        if ( KDirectoryCreateDir_v1 ( wd, 0775, kcmOpen | kcmInit | kcmCreate, TempDir.c_str() ) != 0 )        
+            FAIL("KDirectoryOpenDirUpdate_v1 failed");
+    }
+    ~TempFileFixture() 
+    {
+        if ( rf != 0 && ReaderFileRelease( rf ) != 0)
+            FAIL("ReaderFileRelease failed");
+     
+        if ( schema && VSchemaRelease(schema) != 0 )
+            FAIL("VSchemaRelease failed");            
+        if ( db && VDatabaseRelease(db) != 0 )
+            FAIL("VDatabaseRelease failed");
+        if ( mgr && VDBManagerRelease(mgr) != 0 )
+            FAIL("VDBManagerRelease failed");
+            
+        if ( wd && ! filename.empty() && KDirectoryRemove(wd, true, filename.c_str()) != 0 )
+            FAIL("KDirectoryRemove on input failed");
+
+        if ( wd && ! dbName.empty() )
+        {   // sometimes it takes several attempts to remove a non-empty dir
+            while (KDirectoryRemove(wd, true, dbName.c_str()) != 0);
+        }
+        if ( wd )
+        {   // sometimes it takes several attempts to remove a non-empty dir
+            while (KDirectoryRemove(wd, true, TempDir.c_str()) != 0);
+        }
+             
+        if ( wd && KDirectoryRelease ( wd ) != 0 )
+            FAIL("KDirectoryRelease failed");
+    }
+    rc_t CreateFile(const char* p_filename, const char* contents)
+    {   // create and open for read
+        KFile* file;
+        filename=p_filename;
+        rc_t rc=KDirectoryCreateFile(wd, &file, true, 0664, kcmInit, p_filename);
+        if (rc == 0)
+        {
+            size_t num_writ=0;
+            rc=KFileWrite(file, 0, contents, strlen(contents), &num_writ);
+            if (rc == 0)
+            {
+                rc=KFileRelease(file);
+            }
+            else
+            {
+                KFileRelease(file);
+            }
+            file=0;
+        }
+        return FastqReaderFileMake(&rf, wd, p_filename, FASTQphred33, 0, false);
+    }
+
+    KDirectory* wd;
+    string filename;
+    const ReaderFile* rf;
+    VDBManager* mgr;
+    VSchema *schema;
+    VDatabase* db;
+    string dbName;
+};
+const string TempFileFixture::TempDir = "./tmp";
+const string TempFileFixture::SchemaPath = "align/align.vschema";
+const string TempFileFixture::DbType = "NCBI:align:db:alignment_unsorted";
+
+///////////////////////////////////////////////// FASTQ-based tests for CommonWriter 
+FIXTURE_TEST_CASE(CommonWriterOneFile, TempFileFixture)
+{   // source: SRR006565
+    CreateFile(GetName(), 
+                "@G15-D_3_1_903_603_0.81\n"
+                "GATTGTAGGGAGTAGGGTACAATACAGTCTGGTCTC\n"
+                "+G15-D_3_1_903_603_0.81\n"
+                "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\n");
+
+    dbName = string(GetName())+".db";
+    KDirectoryRemove(wd, true, dbName.c_str());
+    REQUIRE_RC(VDBManagerCreateDB(mgr, &db, schema, DbType.c_str(), kcmInit + kcmMD5, dbName.c_str()));
+
+    CommonWriterSettings settings;
+    memset(&settings, 0, sizeof(settings));
+    settings.numfiles = 1;
+    settings.tmpfs = TempDir.c_str();
+    
+    CommonWriter cw;
+    REQUIRE_RC(CommonWriterInit( &cw, mgr, db, &settings ));
+     
+    REQUIRE_RC(CommonWriterArchive( &cw, rf ));
+    REQUIRE_RC(CommonWriterComplete( &cw, false, 0 ));
+
+    REQUIRE_RC(CommonWriterWhack( &cw ));
+    
+    //TODO: open and validate database 
+}
+
+//////////////////////////////////////////// Main
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+extern "C"
+{
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+
+const char UsageDefaultName[] = "test-fastq-loader";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ( "Usage:\n" "\t%s [options] -o path\n\n", progname );
+}
+
+rc_t CC Usage( const Args* args )
+{
+    return 0;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    KConfigDisableUserSettings();
+
+    KDirectory * native = NULL;	
+    rc_t rc = KDirectoryNativeDir( &native);
+
+    const KDirectory * dir = NULL;	
+    if (rc == 0)
+        rc = KDirectoryOpenDirRead ( native, &dir, false, "." );
+    KConfig * cfg = NULL;
+    if (rc == 0)
+        rc = KConfigMake ( &cfg, dir ) ;
+    if (rc == 0)
+        rc=LoaderFastqTestSuite(argc, argv);
+
+    KConfigRelease(cfg);
+    KDirectoryRelease(dir);
+    KDirectoryRelease(native);
+
+    return rc;
+}
+
+}
+
diff --git a/test/fastq-loader/wb-test-fastq.cpp b/test/fastq-loader/wb-test-fastq.cpp
new file mode 100644
index 0000000..1f526b8
--- /dev/null
+++ b/test/fastq-loader/wb-test-fastq.cpp
@@ -0,0 +1,1384 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Unit tests for FASTQ loader
+*/
+#include <ktst/unit_test.hpp> 
+#include <klib/rc.h>
+#include <loader/common-writer.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include "../../tools/fastq-loader/fastq-parse.h"
+#include "../../tools/fastq-loader/fastq-tokens.h"
+#include "../../tools/fastq-loader/fastq-reader.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <cstring>
+#include <stdexcept> 
+#include <list>
+
+using namespace std;
+
+TEST_SUITE(FastqLoaderWbTestSuite);
+
+//////////////////////////////////////////// tests for flex-generated scanner
+
+
+// test fixture for scanner tests
+class FastqScanFixture
+{
+public:
+    FastqScanFixture() 
+    {
+        pb.self = this;
+        pb.input = Input;
+        consumed = 0;
+    }
+    ~FastqScanFixture() 
+    {
+        FASTQScan_yylex_destroy(&pb);
+        if (pb.record != 0)
+        {
+            KDataBufferWhack( & pb.record->source );
+            free(pb.record);
+        }
+    }
+    void InitScan(const char* p_input, bool trace=false)
+    {
+        input = p_input;
+        FASTQScan_yylex_init(&pb, trace);
+        pb.record = (FastqRecord*)calloc(sizeof(FastqRecord), 1);
+        KDataBufferMakeBytes ( & pb.record->source, 0 );
+        FASTQ_ParseBlockInit ( &pb );
+    }
+    int Scan()
+    {
+        int tokenId=FASTQ_lex(&sym, pb.scanner);
+        if (tokenId != 0)
+        {
+            tokenText=string(TokenTextPtr(&pb, &sym), sym.tokenLength);
+        }
+        else
+        {
+            tokenText.clear();
+        }
+        
+        return tokenId;
+    }
+    static size_t CC Input(FASTQParseBlock* sb, char* buf, size_t max_size)
+    {
+        FastqScanFixture* self = (FastqScanFixture*)sb->self;
+        if (self->input.size() < self->consumed)
+            return 0;
+
+        size_t to_copy = min(self->input.size() - self->consumed, max_size);
+        if (to_copy == 0)
+            return 0;
+
+        memmove(buf, self->input.c_str(), to_copy);
+        if (to_copy < max_size && buf[to_copy-1] != '\n')
+        {
+            buf[to_copy] = '\n';
+            ++to_copy;
+        }
+        self->consumed += to_copy;
+        return to_copy;
+    }
+
+    string input;
+    size_t consumed;
+    FASTQParseBlock pb;
+    FASTQToken sym;
+    string tokenText;
+};
+
+FIXTURE_TEST_CASE(EmptyInput, FastqScanFixture)
+{   
+    InitScan("");
+    REQUIRE_EQUAL(Scan(), 0);
+}
+#define REQUIRE_TOKEN(tok)              REQUIRE_EQUAL((int)tok, Scan());
+#define REQUIRE_TOKEN_TEXT(tok, text)   REQUIRE_TOKEN(tok); REQUIRE_EQ(tokenText, string(text));
+
+#define REQUIRE_TOKEN_COORD(tok, text, line, col)  \
+    REQUIRE_TOKEN_TEXT(tok, text); \
+    REQUIRE_EQ(pb.lastToken->line_no, (size_t)line); \
+    REQUIRE_EQ(pb.lastToken->column_no, (size_t)col);
+
+FIXTURE_TEST_CASE(TagLine1, FastqScanFixture)
+{   
+    InitScan("@HWUSI-EAS499_1:1:3:9:1822\n");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN_COORD(fqALPHANUM, "HWUSI-EAS499", 1, 2);
+    REQUIRE_TOKEN('_');
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "1");
+    REQUIRE_TOKEN_TEXT(fqCOORDS, ":1:3:9:1822");
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN(0); 
+}
+
+FIXTURE_TEST_CASE(SequenceQuality, FastqScanFixture)
+{   
+    InitScan("@8\n" "GATC\n" "+8:1:46:673\n" "!**'\n");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "8"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_COORD(fqBASESEQ, "GATC", 2, 1); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN('+'); 
+    REQUIRE_TOKEN_TEXT(fqTOKEN,  "8:1:46:673"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_TEXT(fqASCQUAL, "!**'"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+}
+
+FIXTURE_TEST_CASE(QualityOnly, FastqScanFixture)
+{   
+    InitScan(">8\n" "\x7F!**'\n");
+    REQUIRE_TOKEN('>'); 
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "8"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_TEXT(fqASCQUAL, "\x7F!**'"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN(0); 
+}
+
+FIXTURE_TEST_CASE(NoEOL_InQuality, FastqScanFixture)
+{   
+    InitScan("@8\n" "GATC\n" "+\n" "!**'");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "8"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_TEXT(fqBASESEQ, "GATC"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN('+'); 
+    REQUIRE_TOKEN(fqENDLINE); 
+
+    REQUIRE_TOKEN_TEXT(fqASCQUAL, "!**'"); 
+    REQUIRE_TOKEN(fqENDLINE); /* this is auto-inserted by FastqScanFixture::Input() */ 
+    REQUIRE_TOKEN(0); 
+}
+
+FIXTURE_TEST_CASE(CRnoLF, FastqScanFixture)
+{   
+    InitScan("@8\r", 0);
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "8"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+}
+
+FIXTURE_TEST_CASE(CommaSeparatedQuality3, FastqScanFixture)
+{   
+    InitScan("@8\n" "GATC\n" "+\n" "0047044004,046,,4000,04444000,--,6-\n");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN_TEXT(fqNUMBER, "8"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_TEXT(fqBASESEQ, "GATC"); 
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN('+'); 
+    REQUIRE_TOKEN(fqENDLINE); 
+
+    REQUIRE_TOKEN_TEXT(fqASCQUAL, "0047044004,046,,4000,04444000,--,6-"); 
+    REQUIRE_EQUAL(Scan(), (int)fqENDLINE);
+    REQUIRE_EQUAL(Scan(), 0);
+}
+
+FIXTURE_TEST_CASE(WsBeforeEol, FastqScanFixture)
+{   
+    InitScan("@ \n");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_EQUAL(Scan(), 0);
+}
+
+FIXTURE_TEST_CASE(SkipToEol, FastqScanFixture)
+{   
+    InitScan("@ kjalkjaldkj \nGATC\n");
+    REQUIRE_TOKEN('@');
+    FASTQScan_skip_to_eol(&pb);
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_TOKEN_TEXT(fqBASESEQ, "GATC"); // back to normal
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_EQUAL(Scan(), 0);
+}
+
+FIXTURE_TEST_CASE(InlineBaseSequence, FastqScanFixture)
+{   
+    InitScan("@:GATC.NNNN\n");
+    REQUIRE_TOKEN('@');
+    REQUIRE_TOKEN(':');
+    FASTQScan_inline_sequence(&pb);
+    REQUIRE_TOKEN_TEXT(fqBASESEQ, "GATC.NNNN");
+    REQUIRE_TOKEN(fqENDLINE); 
+    REQUIRE_EQUAL(Scan(), 0);
+}
+
+///////////////////////////////////////////////// Fastq Parser test fixture
+class ParserFixture
+{
+public:
+    ParserFixture()
+    {
+        pb.record = 0;
+    }
+    ~ParserFixture()
+    {
+        FASTQScan_yylex_destroy(&pb);
+        if (pb.record != 0)
+        {
+            KDataBufferWhack( & pb.record->source );
+            free(pb.record);
+        }    
+    }
+    
+    bool Parse(bool traceLex = false)
+    {
+        pb.self = this;
+        pb.input = Input;    
+        pb.qualityFormat = FASTQphred33;
+        pb.defaultReadNumber = 9;
+        pb.secondaryReadNumber = 0;
+        pb.ignoreSpotGroups = false;
+        
+        if (FASTQScan_yylex_init(& pb, traceLex) != 0)
+            FAIL("ParserFixture::ParserFixture: FASTQScan_yylex_init failed");
+    
+        pb.record = (FastqRecord*)calloc(1, sizeof(FastqRecord));
+        if (pb.record == 0)
+            FAIL("ParserFixture::ParserFixture: malloc failed");
+        KDataBufferMakeBytes ( & pb.record->source, 0 );
+            
+        //FASTQ_debug = 1;
+        FASTQ_ParseBlockInit ( &pb );
+        return FASTQ_parse( &pb ) == 1 && pb.record->rej == 0;
+    }
+    
+    void AddBuffer(const string& p_text)
+    {
+        buffers.push_back(p_text);
+    }
+    
+    static size_t CC Input(struct FASTQParseBlock* sb, char* buf, size_t max_size)
+    {
+        ParserFixture* self = (ParserFixture*)sb->self;
+        if (self->buffers.empty())
+            return 0;
+        
+        string s = self->buffers.front();
+        self->buffers.pop_front();
+        memmove(buf, s.c_str(), s.size()); // ignore max_size for our short test lines
+        return s.size();
+    }
+    
+    list<string> buffers;
+    FASTQParseBlock pb;
+};
+
+FIXTURE_TEST_CASE(BufferBreakInTag, ParserFixture)
+{   
+    AddBuffer("@HWI-ST226:170:AB075UABXX:3:1101:10089:7031 ");
+    AddBuffer("1:N:0:GCCAAT\n"
+              "TACA\n"
+              "+\n"
+              "GEGE\n");
+    REQUIRE(Parse());
+    REQUIRE_EQ(1, (int)pb.record->seq.readnumber);
+}
+
+///////////////////////////////////////////////// FastqReader test fixture
+
+class LoaderFixture
+{
+public:
+    LoaderFixture() 
+    :   wd(0), rf(0), 
+        record(0), seq(0), reject(0), 
+        read(0), readLength(0), 
+        name(0), length(0), 
+        errorText(0), errorLine(0), column(0), 
+        quality(0), qualityAsciiOffset(0), qualityType(-1),
+        qualityFormat(FASTQphred33), defaultReadNumber(0), 
+        ignoreSpotGroups(false)
+    {
+        if ( KDirectoryNativeDir ( & wd ) != 0 )
+            FAIL("KDirectoryNativeDir failed");
+    }
+    ~LoaderFixture() 
+    {
+        delete [] read;
+
+        if (seq != 0 && SequenceRelease(seq) != 0)
+            FAIL("SequenceRelease failed");
+
+        if (record != 0 && RecordRelease(record) != 0)
+            FAIL("RecordRelease failed");
+
+        if (reject != 0 && RejectedRelease(reject) != 0)
+            FAIL("RejectedRelease failed");
+
+        if ( rf != 0 && ReaderFileRelease( rf ) != 0)
+            FAIL("ReaderFileRelease failed");
+
+        if ( !filename.empty() && KDirectoryRemove(wd, true, filename.c_str()) != 0)
+            FAIL("KDirectoryRemove failed");
+
+        if ( KDirectoryRelease ( wd ) != 0 )
+            FAIL("KDirectoryRelease failed");
+
+        FASTQ_debug = 0;
+    }
+    rc_t CreateFile(const char* p_filename, const char* contents)
+    {   // create and open for read
+        KFile* file;
+        filename=p_filename;
+        rc_t rc=KDirectoryCreateFile(wd, &file, true, 0664, kcmInit, p_filename);
+        if (rc == 0)
+        {
+            size_t num_writ=0;
+            rc=KFileWrite(file, 0, contents, strlen(contents), &num_writ);
+            if (rc == 0)
+            {
+                rc=KFileRelease(file);
+            }
+            else
+            {
+                KFileRelease(file);
+            }
+            file=0;
+        }
+        return FastqReaderFileMake(&rf, wd, p_filename, qualityFormat, defaultReadNumber, ignoreSpotGroups);
+    }
+    void CreateFileGetRecord(const char* fileName, const char* contents)
+    {
+        if (record != 0 && RecordRelease(record) != 0)
+            throw logic_error("CreateFileGetRecord: RecordRelease failed");
+
+        if (CreateFile(fileName, contents) != 0)
+            throw logic_error("CreateFileGetRecord: CreateFile failed");
+
+        if (ReaderFileGetRecord(rf, &record) != 0 || record == 0)
+            throw logic_error("CreateFileGetRecord: ReaderFileGetRecord failed");
+    }
+    bool GetRecord()
+    {
+        if (rf == 0)
+            return false;
+
+        if (record != 0 && RecordRelease(record) != 0)
+            return false;
+        if (reject != 0 && RejectedRelease(reject) != 0)
+            return false;
+        reject = 0;
+        if (seq != 0 && SequenceRelease(seq) != 0)
+            return false;
+        seq = 0;
+
+        return ReaderFileGetRecord(rf, &record) == 0;
+    }
+
+    bool GetRejected()
+    {
+        if (reject != 0 && RejectedRelease(reject) != 0)
+            throw logic_error("GetRejected: RejectedRelease failed");
+        if (record == 0)
+            throw logic_error("GetRejected: record == 0");
+        if (RecordGetRejected(record, &reject) != 0)
+            throw logic_error("GetRejected: RecordGetRejected failed");
+        if (reject == 0)
+            return false;
+        if (RejectedGetError(reject, &errorText, &errorLine, &column, &fatal) != 0)
+            throw logic_error("IsFatal: RejectedGetError failed");
+        return true;
+    }
+    
+    bool CreateFileGetSequence(const char* name, const char* contents)
+    {
+        if (CreateFile(name, contents) != 0)
+            throw logic_error("CreateFileGetSequence: CreateFile failed");
+
+        if (!GetRecord() || record == 0)
+            throw logic_error("CreateFileGetSequence: GetRecord failed");
+
+        if (GetRejected())
+            throw logic_error(string("CreateFileGetSequence: record rejected, ")+string(errorText));
+            
+        if (RecordGetSequence(record, &seq) != 0)
+            throw logic_error("CreateFileGetSequence: RecordGetSequence failed:");
+
+        return seq != 0;
+    }
+
+    bool MakeReadBuffer()
+    {
+        if (SequenceGetReadLength(seq, &readLength) != 0 || readLength == 0)
+            return false;
+
+        delete [] read;
+        read = new char[readLength];
+        return true;
+    }
+
+    void BisonDebugOn()
+    {
+        FASTQ_debug = 1;
+    }
+
+    KDirectory* wd;
+    string filename;
+    const ReaderFile* rf;
+    const Record* record;
+    const Sequence* seq;
+    const Rejected* reject;
+
+    char* read;
+    uint32_t readLength;
+
+    const char* name;
+    size_t length;
+
+    const char* errorText;
+    uint64_t errorLine;
+    uint64_t column;
+    bool fatal;
+    const void* errorData;
+
+    const int8_t* quality;
+    uint8_t qualityAsciiOffset;
+    int qualityType;
+
+    enum FASTQQualityFormat qualityFormat;
+    int8_t defaultReadNumber;
+    bool ignoreSpotGroups;
+};
+
+///////////////////////////////////////////////// FASTQ test cases
+FIXTURE_TEST_CASE(EmptyFile, LoaderFixture)
+{
+    REQUIRE_RC(CreateFile(GetName(), ""));
+    REQUIRE_EQ( string(ReaderFileGetPathname(rf)), string(GetName()) );  
+    REQUIRE(GetRecord());  
+    REQUIRE_NULL(record);
+}
+
+FIXTURE_TEST_CASE(EndLines, LoaderFixture)
+{
+    REQUIRE_RC(CreateFile(GetName(), "\n\n"));
+    REQUIRE_EQ( string(ReaderFileGetPathname(rf)), string(GetName()) );  
+    REQUIRE(GetRecord());  
+    REQUIRE_NULL(record);
+}
+ 
+//////////////////// syntax errors and recovery
+const string SyntaxError("syntax error");
+FIXTURE_TEST_CASE(SyntaxError1, LoaderFixture)
+{
+    string input="qqq abcd";
+
+    CreateFileGetRecord(GetName(), input.c_str());
+
+    REQUIRE(GetRejected());
+    REQUIRE(!fatal);
+    REQUIRE_NOT_NULL(errorText);
+    REQUIRE_EQ(SyntaxError, string (errorText).substr(0, SyntaxError.size()));
+    REQUIRE_EQ(errorLine, (uint64_t)1); 
+    REQUIRE_EQ(column, (uint64_t)4);
+    
+    const void* data;
+    REQUIRE_RC(RejectedGetData(reject, &data, &length));
+    REQUIRE_NOT_NULL(data);
+    REQUIRE_EQ(input, string((const char*)data, length));
+}
+
+FIXTURE_TEST_CASE(SyntaxError2, LoaderFixture)
+{
+    #define input "qqq abcd"
+    CreateFileGetRecord(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" input );
+    REQUIRE(GetRecord());
+
+    REQUIRE(GetRejected());
+    REQUIRE(!fatal);
+    REQUIRE_NOT_NULL(errorText);
+    REQUIRE_EQ(SyntaxError, string (errorText).substr(0, SyntaxError.size()));
+    REQUIRE_EQ(errorLine, (uint64_t)5); 
+    REQUIRE_EQ(column, (uint64_t)4);
+
+    const void* data;
+    REQUIRE_RC(RejectedGetData(reject, &data, &length));
+    REQUIRE_EQ(string(input), string((const char*)data, length));
+
+    
+    #undef input
+}
+
+FIXTURE_TEST_CASE(RecoveryFromErrorAtTopLevel, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "qqq abcd\n" "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n");
+    REQUIRE(GetRejected());
+
+    REQUIRE(GetRecord());    
+    REQUIRE_NOT_NULL(record);
+
+    REQUIRE_RC(RecordGetSequence(record, &seq));
+    REQUIRE_NOT_NULL(seq);
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("SEQ_ID1"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(RecoveryFromErrorInHeader, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "@SEQ_ID1^\n" "GATT\n" "+\n" "!''*\n" "@SEQ_ID2\n" "GATT\n" "+\n" "!''*\n");
+    REQUIRE(GetRejected());
+
+    REQUIRE(GetRecord());    
+    REQUIRE_NOT_NULL(record);
+
+    REQUIRE_RC(RecordGetSequence(record, &seq));
+    REQUIRE_NOT_NULL(seq);
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("SEQ_ID2"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(RecoveryFromErrorInRead, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "@SEQ_ID1\n" "G^ATT\n" "+\n" "!''*\n" "@SEQ_ID2\n" "GATT\n" "+\n" "!''*\n");
+    REQUIRE(GetRejected());
+
+    REQUIRE(GetRecord());    
+    REQUIRE_NOT_NULL(record);
+
+    REQUIRE_RC(RecordGetSequence(record, &seq));
+    REQUIRE_NOT_NULL(seq);
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("SEQ_ID2"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(RecoveryFromErrorInQuality, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "\n" "@SEQ_ID2\n" "GATT\n" "+\n" "!''*\n");
+    REQUIRE(GetRejected());
+
+    REQUIRE(GetRecord());    
+    REQUIRE_NOT_NULL(record);
+
+    REQUIRE_RC(RecordGetSequence(record, &seq));
+    REQUIRE_NOT_NULL(seq);
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("SEQ_ID2"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(ErrorLineNumber, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), 
+        "@HWI-ST959:56:D0AW4ACXX:8:2108:6958:112042 1:Y:0#\n"
+        "ATT\n");
+    REQUIRE(GetRejected());
+    REQUIRE_EQ(SyntaxError, string (errorText).substr(0, SyntaxError.size()));
+    REQUIRE_EQ(errorLine, (uint64_t)1); 
+    REQUIRE_EQ(column, (uint64_t)49);
+}
+
+//////////////////// tag line parsing
+#define TEST_TAGLINE(line)\
+    CreateFileGetRecord(GetName(), line "\n" "GATT\n" "+\n" "!''*\n");\
+    REQUIRE(! GetRejected()); /* no error */ \
+    REQUIRE(GetRecord()); /* parsing done */ \
+    REQUIRE_NULL(record); /* input consumed */
+
+FIXTURE_TEST_CASE(Tag1,   LoaderFixture)  { TEST_TAGLINE("@HWUSI-EAS499:1:3:9:1822"); }
+FIXTURE_TEST_CASE(Tag2_1, LoaderFixture)  { TEST_TAGLINE("@HWUSI-EAS499:1:3:9:1822:.2"); }
+FIXTURE_TEST_CASE(Tag2_2, LoaderFixture)  { TEST_TAGLINE("@HWUSI-EAS499:1:3:9:1822:1.2"); }
+FIXTURE_TEST_CASE(Tag3,   LoaderFixture)  { TEST_TAGLINE("@BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540"); }
+FIXTURE_TEST_CASE(Tag4,   LoaderFixture)  { TEST_TAGLINE("@BILLIEHOLIDAY_1_FC200TYAAXX_3_1_751_675"); }
+FIXTURE_TEST_CASE(Tag5,   LoaderFixture)  { TEST_TAGLINE("@HWUSI-EAS499:1:3:9:1822#0/1"); }
+FIXTURE_TEST_CASE(Tag6,   LoaderFixture)  { TEST_TAGLINE("@1:3:9:1822:33.44"); }
+FIXTURE_TEST_CASE(Tag7,   LoaderFixture)  { TEST_TAGLINE("@1:3:9:1822#1/2"); }
+FIXTURE_TEST_CASE(Tag8,   LoaderFixture)  { TEST_TAGLINE("@HWUSI-EAS499:1:3:9:1822#CAT/1"); }
+FIXTURE_TEST_CASE(Tag9,   LoaderFixture)  { TEST_TAGLINE("@ERBRDQF01EGP9U"); }
+FIXTURE_TEST_CASE(Tag10,  LoaderFixture)  { TEST_TAGLINE("@ID57_120908_30E4FAAXX:3:1:1772:953.1"); }
+FIXTURE_TEST_CASE(Tag11,  LoaderFixture)  { TEST_TAGLINE(">ID57_120908_30E4FAAXX:3:1:1772:953"); }
+FIXTURE_TEST_CASE(Tag12,  LoaderFixture)  { TEST_TAGLINE("@741:6:1:1204:10747"); }
+FIXTURE_TEST_CASE(Tag13,  LoaderFixture)  { TEST_TAGLINE("@741:6:1:1204:10747/1"); }
+FIXTURE_TEST_CASE(Tag14,  LoaderFixture)  { TEST_TAGLINE("@SNPSTER4_246_30GCDAAXX_PE:1:1:3:896/1 run=090102_SNPSTER4_0246_30GCDAAXX_PE"); }
+FIXTURE_TEST_CASE(Tag15,  LoaderFixture)  { TEST_TAGLINE("@G15-D_3_1_903_603_0.81"); }
+
+//////////////////// building Sequence objects
+FIXTURE_TEST_CASE(NotRejected, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "@HWUSI-EAS499:1:3:9:1822:1.2\n" "GATT\n" "+\n" "!''*\n");
+    reject = (const Rejected*)1;
+    REQUIRE_RC(RecordGetRejected(record, &reject));
+    REQUIRE_NULL(reject);
+}
+
+FIXTURE_TEST_CASE(SequenceNoAlignment, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), "@HWUSI-EAS499:1:3:9:1822:1.2\n" "GATT\n" "+\n" "!''*\n");
+
+    const Alignment* align;
+    REQUIRE_RC(RecordGetAlignment(record, &align));
+    REQUIRE_NULL(align);
+
+    REQUIRE_RC(RecordGetSequence(record, &seq));
+    REQUIRE_NOT_NULL(seq);
+}
+
+FIXTURE_TEST_CASE(TestSequenceGetReadLength, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" ));
+    REQUIRE_RC(SequenceGetReadLength(seq, &readLength));
+    REQUIRE_EQ(readLength, 4u);
+}
+
+FIXTURE_TEST_CASE(TestSequenceGetRead, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" ));
+    REQUIRE(MakeReadBuffer());
+    REQUIRE_RC(SequenceGetRead(seq, read));
+    REQUIRE_EQ(string(read, readLength), string("GATT"));
+}
+
+FIXTURE_TEST_CASE(TestSequenceGetRead2, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" ));
+    REQUIRE(MakeReadBuffer());
+
+    // normal
+    REQUIRE_RC(SequenceGetRead2(seq, read, 0, 2));
+    REQUIRE_EQ(string(read, 2), string("GA"));
+
+    // stop out of range
+    REQUIRE_RC_FAIL(SequenceGetRead2(seq, read, 2, 6));
+
+    // start out of range
+    REQUIRE_RC_FAIL(SequenceGetRead2(seq, read, 20, 1));
+}
+
+FIXTURE_TEST_CASE(SequenceGetQuality33, LoaderFixture)
+{
+    qualityFormat = FASTQphred33;
+    
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" ));
+    
+    REQUIRE_RC(SequenceGetQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    REQUIRE_NOT_NULL(quality);
+    uint32_t l;
+    REQUIRE_RC(SequenceGetReadLength(seq, &l));
+    REQUIRE_EQ(qualityAsciiOffset, (uint8_t)33);
+    REQUIRE_EQ(qualityType, (int)QT_Phred);
+    REQUIRE_EQ(quality[0],  (int8_t)'!');
+}
+
+FIXTURE_TEST_CASE(SequenceGetQuality64, LoaderFixture)
+{
+    qualityFormat = FASTQphred64;
+    
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" "BBCC\n" ));
+    
+    REQUIRE_RC(SequenceGetQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    REQUIRE_NOT_NULL(quality);
+    uint32_t l;
+    REQUIRE_RC(SequenceGetReadLength(seq, &l));
+    REQUIRE_EQ(qualityAsciiOffset, (uint8_t)64);
+    REQUIRE_EQ(qualityType, (int)QT_Phred);
+    REQUIRE_EQ(quality[0],  (int8_t)'B');
+}
+
+FIXTURE_TEST_CASE(SequenceGetQualityLogOdds, LoaderFixture)
+{
+    qualityFormat = FASTQlogodds;
+    
+    REQUIRE(CreateFileGetSequence(GetName(), "@SEQ_ID1\n" "GATT\n" "+\n" ";>@H\n" ));
+    
+    REQUIRE_RC(SequenceGetQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    REQUIRE_NOT_NULL(quality);
+    uint32_t l;
+    REQUIRE_RC(SequenceGetReadLength(seq, &l));
+    REQUIRE_EQ(qualityAsciiOffset, (uint8_t)64);
+    REQUIRE_EQ(qualityType, (int)QT_LogOdds);
+    REQUIRE_EQ(quality[0],  (int8_t)';');
+}
+
+FIXTURE_TEST_CASE(SequenceBaseSpace, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@q\n" "GATC\n" "+\n" "!''*\n" ));
+    REQUIRE(!SequenceIsColorSpace(seq));
+    char k;
+    REQUIRE_RC(SequenceGetCSKey(seq, &k)); // RC is 0 but k is undefined
+}
+
+FIXTURE_TEST_CASE(SequenceColorSpace, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@q\n" "G123\n" "+\n" "!''*\n" ));
+    REQUIRE(SequenceIsColorSpace(seq));
+
+    char k;
+    REQUIRE_RC(SequenceGetCSKey(seq, &k));
+    REQUIRE_EQ(k, 'G');
+    
+    uint32_t l;
+    REQUIRE_RC(SequenceGetReadLength(seq, &l));
+    REQUIRE_EQ(l, (uint32_t)0);
+    REQUIRE_RC(SequenceGetCSReadLength(seq, &l));
+    REQUIRE_EQ(l, (uint32_t)3);
+    
+    delete [] read;
+    read = new char[l];
+    REQUIRE_RC(SequenceGetCSRead(seq, read));
+    REQUIRE_EQ(string(read, l), string("123"));
+    
+    REQUIRE_RC(SequenceGetCSQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    REQUIRE_NOT_NULL(quality);
+    REQUIRE_EQ(qualityType, (int)QT_Phred);
+    REQUIRE_EQ(qualityAsciiOffset,   (uint8_t)33);
+    REQUIRE_EQ(quality[0],  (int8_t)'\'');
+    REQUIRE_EQ(quality[1],  (int8_t)'\'');
+    REQUIRE_EQ(quality[2],  (int8_t)'*' );
+}
+
+FIXTURE_TEST_CASE(SequenceGetOrientationIsReverse, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@q\n" "G123\n" "+\n" "!''*\n" ));
+    REQUIRE_EQ(SequenceGetOrientationSelf(seq), (int)ReadOrientationUnknown);
+    REQUIRE_EQ(SequenceGetOrientationMate(seq), (int)ReadOrientationUnknown);
+}
+
+//  Read Number
+FIXTURE_TEST_CASE(ReadNumber, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWUSI-EAS499:1:3:9:1822#0/1\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(SequenceIsFirst(seq));
+    REQUIRE(!SequenceIsSecond(seq));
+}
+FIXTURE_TEST_CASE(ReadNumberMissing, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWUSI-EAS499:1:3:9:1822\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(!SequenceIsFirst(seq));
+    REQUIRE(!SequenceIsSecond(seq));
+}
+FIXTURE_TEST_CASE(ReadNumberDefault, LoaderFixture)
+{
+    defaultReadNumber = 2;
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWUSI-EAS499:1:3:9:1822\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(!SequenceIsFirst(seq));
+    REQUIRE(SequenceIsSecond(seq));
+}
+FIXTURE_TEST_CASE(ReadNumberOverride, LoaderFixture)
+{
+    defaultReadNumber = 1;
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWUSI-EAS499:1:3:9:1822/2\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(!SequenceIsFirst(seq));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE(RunSpotRead, LoaderFixture)
+{
+    defaultReadNumber = 1;
+    REQUIRE(CreateFileGetSequence(GetName(), "@SRR390728.1.2\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE(RunSpotRead_withTail, LoaderFixture)
+{
+    defaultReadNumber = 1;
+    REQUIRE(CreateFileGetSequence(GetName(), "@SRR390728.1.2 123\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE(RunSpotNothing, LoaderFixture)
+{
+    defaultReadNumber = 1;
+    REQUIRE(CreateFileGetSequence(GetName(), "@SRR390728.1\n" "GATT\n" "+\n" "!''*\n"));
+}
+
+// Components of Illumina tag lines:
+// @HWUSI-EAS499:1:3:9:1822#0/1"
+// spot-name HWUSI-EAS499:1:3:9:1822    tag line up to and including coordinates
+// spot-group "0"                       token following '#'
+// read-number "1"                      1 or 2 following '/'
+
+// not implemented for now:
+// run-group HWUSI-EAS499               tag line up to and excluding coordinates
+// coords [ 1 3 9 182 ]                  
+// fmt-name HWUSI-EAS499:1:3:$X:$Y
+
+FIXTURE_TEST_CASE(SequenceGetSpotNameIllumina, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWUSI-EAS499:1:3:9:1822#0/1\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWUSI-EAS499:1:3:9:1822"), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroupIllumina, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@1:3:9:1822#CAT/1\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("CAT"), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroupIllumina_Ignored, LoaderFixture)
+{
+    ignoreSpotGroups = true;
+    REQUIRE(CreateFileGetSequence(GetName(), "@1:3:9:1822#CAT/1\n" "GATT\n" "+\n" "!''*\n"));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string(""), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroup_Empty, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        ">HWI-EAS6_4_FC2010T:1:1:80:366\n" 
+        "GATT\n" 
+        "+\n" 
+        "!''*\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string(""), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(!SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroup_Zero, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        ">HWI-EAS6_4_FC2010T:1:1:80:366#0\n" 
+        "GATT\n" 
+        "+\n" 
+        "!''*\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string(""), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(!SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroupBarcode, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@HWI-ST1234:33:D1019ACXX:2:1101:1415:2223/1 1:N:0:ATCACG\nATCG\n"));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("ATCACG"), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(SequenceIsFirst(seq));
+}
+
+FIXTURE_TEST_CASE(SequenceGetSpotGroupUnderscore, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), "@FCA5PJ4:1:1101:14707:1407#GTAGTCGC_AGCTCGGT/1\nATCG\n"));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("GTAGTCGC_AGCTCGGT"), string(name, length));
+    REQUIRE(!SequenceIsSecond(seq));
+    REQUIRE(SequenceIsFirst(seq));
+}
+
+
+#define TEST_PAIRED(line, paired)\
+    REQUIRE(CreateFileGetSequence(GetName(), line "\n" "GATT\n" "+\n" "!''*\n"));\
+    if (paired)\
+        REQUIRE(SequenceWasPaired(seq));\
+    else\
+        REQUIRE(!SequenceWasPaired(seq));
+
+FIXTURE_TEST_CASE(SequenceWasPaired1, LoaderFixture) { TEST_PAIRED("@HWUSI-EAS499:1:3:9:1822",         false); }
+FIXTURE_TEST_CASE(SequenceWasPaired2, LoaderFixture) { TEST_PAIRED("@HWUSI-EAS499:1:3:9:1822#0/0",     false); }
+FIXTURE_TEST_CASE(SequenceWasPaired3, LoaderFixture) { TEST_PAIRED("@HWUSI-EAS499:1:3:9:1822#0/1",     true); }
+FIXTURE_TEST_CASE(SequenceWasPaired4, LoaderFixture) { TEST_PAIRED("@HWUSI-EAS499:1:3:9:1822#CAT/1",   true); }
+FIXTURE_TEST_CASE(SequenceWasPaired5, LoaderFixture) { TEST_PAIRED("@HWUSI-EAS499:1:3:9:1822/2",       true); }
+
+FIXTURE_TEST_CASE(SequenceGetSpotNameOneLine, LoaderFixture)
+{   // source: SRR014283
+    REQUIRE(CreateFileGetSequence(GetName(), "USI-EAS50_1:6:1:392:881:GCT:!!!")); 
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("USI-EAS50_1:6:1:392:881"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(SequenceGetNameNumeric, LoaderFixture)
+{   // source: SRR094419
+    qualityFormat = FASTQphred64;
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@741:6:1:1204:10747/1\n"
+        "GTCGTTGTCCCGCTCCTCATATTCNNNNNNNNNNNN\n"
+        "+\n"
+        "bbbbbbbbbbbbbbbbbbbb````BBBBBBBBBBBB\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("741:6:1:1204:10747"), string(name, length));
+}
+
+//////////////////// parsing Quality lines
+
+FIXTURE_TEST_CASE(GtStartsQualityOnly, LoaderFixture)
+{   // source: XXX001656
+    CreateFileGetRecord(GetName(), 
+        ">HWI-EAS6_4_FC2010T:1:1:80:366\n"
+        "!!\n"
+        ">HWI-EAS6_4_FC2010T:1:1:80:366\n"
+        "!!\n"
+        );
+    REQUIRE(GetRejected());
+    REQUIRE(!fatal);
+}
+
+FIXTURE_TEST_CASE(OneLineRead, LoaderFixture)
+{   
+// source: SRR016872
+    CreateFileGetRecord(GetName(), "USI-EAS50_1:6:1:392:881:GCTC:!!!!\n"); 
+    REQUIRE(!GetRejected());
+}
+
+FIXTURE_TEST_CASE(ForcePhredOffset, LoaderFixture)
+{   // quality line looks like it may be Phred64, but we know we are dealing with Phred33 
+// source: SRR014126
+    qualityFormat = FASTQphred33;
+    CreateFileGetSequence(GetName(), 
+        "@R16:8:1:19:1012#0/2\n"
+        "TTAAATGACTCTTTAAAAAACACAACATACATTGATATATTTATTCCTAGATATTTGCTTATAAGACTCTAATCA\n"
+        "+\n"
+        "BCCBBBACBBCCCCBCCCCCCCCCCBCBCCCABBBBBBCCBBCBBCCBBCBCCCABBCAAABC at CCCAB@CBACC\n"
+    );
+    REQUIRE_RC(SequenceGetQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    REQUIRE_NOT_NULL(quality);
+    REQUIRE_EQ(qualityType, (int)QT_Phred);
+    REQUIRE_EQ(qualityAsciiOffset,  (uint8_t)33);
+    REQUIRE_EQ(quality[0],    (int8_t)'B');
+}
+
+// Illumina spot names
+FIXTURE_TEST_CASE(IlluminaCasava_1_8, LoaderFixture)
+{ // source: SAMN01860354.fastq
+    REQUIRE(CreateFileGetSequence(GetName(), 
+                "@HWI-ST273:315:C0LKAACXX:7:1101:1487:2221 2:Y:0:GGCTAC\n"
+                "AACA\n+\n$.%0\n"
+    ));
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST273:315:C0LKAACXX:7:1101:1487:2221"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+    REQUIRE(SequenceIsLowQuality(seq));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("GGCTAC"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(IlluminaCasava_1_8_SpotGroupNumber, LoaderFixture)
+{ // source: SAMN01860354.fastq
+    REQUIRE(CreateFileGetSequence(GetName(), 
+                "@HWI-ST273:315:C0LKAACXX:7:1101:1487:2221 2:Y:0:1\n"
+                "AACA\n+\n$.%0\n"
+    ));
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST273:315:C0LKAACXX:7:1101:1487:2221"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+    REQUIRE(SequenceIsLowQuality(seq));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("1"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(IlluminaCasava_1_8_SpotGroup_MoreMadness, LoaderFixture)
+{ // source: SRR1106612
+    REQUIRE(CreateFileGetSequence(GetName(), 
+                "@HWI-ST808:130:H0B8YADXX:1:1101:1914:2223 1:N:0:NNNNNN.GGTCCA.AAAA\n"
+                "AACA\n+\n$.%0\n"
+    ));
+
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string("NNNNNN.GGTCCA.AAAA"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(IlluminaCasava_1_8_EmptyTag, LoaderFixture)
+{ 
+    REQUIRE(CreateFileGetSequence(GetName(), 
+                "@HWI-ST959:56:D0AW4ACXX:8:1101:1233:2026 2:N:0:\n"
+                "AACA\n+\n$.%0\n"
+
+    ));
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST959:56:D0AW4ACXX:8:1101:1233:2026"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+    REQUIRE(! SequenceIsLowQuality(seq));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string(), string(name, length));
+}
+
+FIXTURE_TEST_CASE(Illumina_NegativeCoords, LoaderFixture)
+{ 
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HWUSI-EAS1679-0005:4:113:4454:-51#0\n"
+        "AACA\n+\n$.%0\n"
+    ));
+
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWUSI-EAS1679-0005:4:113:4454:-51"), string(name, length));
+    REQUIRE_RC(SequenceGetSpotGroup(seq, &name, &length));
+    REQUIRE_EQ(string(""), string(name, length));
+}
+
+FIXTURE_TEST_CASE(Illumina_Underscore, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@DG7PMJN1:293:D12THACXX:2:1101:1161:1968_2:N:0:GATCAG\n"
+        "AGAGTTTGAT\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("DG7PMJN1:293:D12THACXX:2:1101:1161:1968"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE(Illumina_IdentifierAtFront, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@QSEQ161.65 DBV2SVN1:1:1101:1474:2213#0/1\n"
+        "AGAGTTTGAT\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("DBV2SVN1:1:1101:1474:2213"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(Illumina_SpaceAndIdentifierAtFront, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@ QSEQ161 EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG\n"
+        "AGAGTTTGAT\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("EAS139:136:FC706VJ:2:2104:15343:197393"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(SRR1778155 , LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@2-796964       M01929:5:000000000-A46YE:1:1108:16489:18207 1:N:0:2     orig_bc=TATCGGGA        new_bc=TATCGGGA   bc_diffs=0\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("M01929:5:000000000-A46YE:1:1108:16489:18207"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(SRA192487, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HWI-ST1234:33:D1019ACXX:2:1101:1415:2223/1 1:N:0:ATCACG\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST1234:33:D1019ACXX:2:1101:1415:2223"), string(name, length));
+}
+
+//////////////////// odd syntax cases
+FIXTURE_TEST_CASE(NoEolAtEof, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), 
+        "@SEQ_ID1\n" "GATT\n" "+\n" "!''*\n" 
+        "@SEQ_ID2\n" "GATT\n" "+\n" "!''*"
+    );
+    REQUIRE_NOT_NULL(record);
+    REQUIRE(! GetRejected());
+
+    REQUIRE(GetRecord());    
+    REQUIRE(! GetRejected());
+    REQUIRE_NOT_NULL(record);
+} 
+ 
+FIXTURE_TEST_CASE(GtStartsReadOnly, LoaderFixture)
+{   // source: XXX001656
+    CreateFileGetRecord(GetName(), 
+        ">q\n"
+        "AAC\n"
+        ">q\n"
+        "ACA\n"
+    );   
+    REQUIRE(!GetRejected());
+}
+
+//////////////////// detecting older formats
+
+FIXTURE_TEST_CASE(Quality33TooLow, LoaderFixture)
+{   // negative qualities are not allowed for Phred33
+// source: SRR016872
+    qualityFormat = FASTQphred33;
+    CreateFileGetRecord(GetName(), 
+            "@HWI-EAS102_1_30LWPAAXX:5:1:1792:566\n"
+            "GAAACCCCCTATTAGANNNNCNNNNCNATCATGTCA\n"
+            "+HWI-EAS102_1_30LWPAAXX:5:1:1792:566\n"
+            "II IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\n"
+    );
+    REQUIRE(GetRejected());
+    REQUIRE(fatal);
+}
+
+FIXTURE_TEST_CASE(Quality64TooLow, LoaderFixture)
+{   // negative qualities are not allowed for Phred64
+// source: SRR016872
+    qualityFormat = FASTQphred64;
+    CreateFileGetRecord(GetName(), 
+            "@HWI-EAS102_1_30LWPAAXX:5:1:1511:102\n"
+            "GGGGTTAGTGGCAGGGGGGGGGTCTCGGGGGGGGGG\n" 
+            "+HWI-EAS102_1_30LWPAAXX:5:1:1511:102\n"
+            "IIIIIIIIIIIIIIIIII;IIIIIIIIIIIIIIIII\n"
+        );
+    REQUIRE(GetRejected());
+    REQUIRE(fatal);
+}
+
+FIXTURE_TEST_CASE(QualityLogoddsTooLow, LoaderFixture)
+{   // qualities under 59 are not allowed for LogOdds
+    qualityFormat = FASTQlogodds;
+    CreateFileGetRecord(GetName(), 
+            "@HWI-EAS102_1_30LWPAAXX:5:1:1511:102\n"
+            "GGGGTTAGTGGCAGGGGGGGGGTCTCGGGGGGGGGG\n" 
+            "+HWI-EAS102_1_30LWPAAXX:5:1:1511:102\n"
+            "I:IIIIIIIIIIIIIIII;IIIIIIIIIIIIIIIII\n" // ':' = 58
+        );
+    REQUIRE(GetRejected());
+    REQUIRE(fatal);
+}
+
+FIXTURE_TEST_CASE(DecimalQualityRejected, LoaderFixture)
+{
+    CreateFileGetRecord(GetName(), 
+        "@BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540\n"
+        "GTCGCTTCTCGGAAGNGTGAAAGACAANAATNTTNN\n"
+        "+BILLIEHOLIDAY_1_FC20F3DAAXX:8:2:342:540\n"
+        "40 3 1 22 17 18 34 8 13 21 3 7 5 0 0 5 1 0 7 3 2 3 3 3 1 1 4 5 5 2 2 5 0 1 5 5\n"
+    );
+    REQUIRE(GetRejected());
+    REQUIRE(fatal);
+}
+
+////////////////// detecting alternative formats
+FIXTURE_TEST_CASE(PacbioRaw, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19\n"
+        "AGAGTTTGAT\n"
+        "+m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19\n"
+        "LLhf>>>>[[\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19"), string(name, length));
+}
+FIXTURE_TEST_CASE(PacbioCcs, LoaderFixture)
+{
+    defaultReadNumber = -1;
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19/ccs\n"
+        "AGAGTTTGAT\n"
+        "+m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19/ccs\n"
+        "LLhf>>>>[[\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("m121205_055009_42163_c100416332550000001523041801151327_s1_p0/19/ccs"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(PacbioNoReadNumbers, LoaderFixture)
+{
+    defaultReadNumber = -1;
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m121205_055009_42163_c100416332550000001523041801151327_s1_p0/1\n"
+        "AGAGTTTGAT\n"
+        "+m121205_055009_42163_c100416332550000001523041801151327_s1_p0/1\n"
+        "LLhf>>>>[[\n"
+    ));
+    REQUIRE(!SequenceIsFirst(seq));
+    REQUIRE(!SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE(PacbioWsCcs, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m101210_094054_00126_c000028442550000000115022402181134_s1_p0/2 ccs\n"
+        "AGAGTTTGAT\n"
+        "+m101210_094054_00126_c000028442550000000115022402181134_s1_p0/2 ccs\n"
+        "LLhf>>>>[[\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("m101210_094054_00126_c000028442550000000115022402181134_s1_p0/2"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(PacbioError, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m130727_021351_42150_c100538232550000001823086511101336_s1_p0/53/0_106\n"
+        "TTTTTCCAAAAAAGGAGACGTAAACATTTCTTAACTTGCCAGCACTCTAATTCCAAAATCAAGTCGCATTTCTGACATTGCGGTAAGATTGTGCAATATCATATCT\n"
+        "+\n"
+        ")*'&*'+*(*+#-,-/'+-)+,'-./+*+.()*()*,$#,)'+**%+'*/,+(/,,*,'/&,+--%.-.*),,+.,,.'./%-/,/(.%.,*(.+/-/(../.&'#\n"
+    ));
+}
+
+FIXTURE_TEST_CASE(NotPairedRead_Error, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HWI-ST226:170:AB075UABXX:3:1101:10089:7031 1:N:0:GCCAAT\n"
+        "TACA\n"
+    ));
+    REQUIRE(SequenceIsFirst(seq));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST226:170:AB075UABXX:3:1101:10089:7031"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(NoFragmentInfo_Error, LoaderFixture)
+{
+    defaultReadNumber = -1;
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@m130727_021351_42150_c100538232550000001823086511101336_s1_p0/283/0_9315\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("m130727_021351_42150_c100538232550000001823086511101336_s1_p0/283/0_9315"), string(name, length));
+}
+
+FIXTURE_TEST_CASE(NoColonAtTheEnd_Error, LoaderFixture)
+{
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HET-141-007:154:C391TACXX:6:2316:3220:70828 1:N:0\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE(SequenceIsFirst(seq));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HET-141-007:154:C391TACXX:6:2316:3220:70828"), string(name, length));
+}
+
+FIXTURE_TEST_CASE ( MissingRead, LoaderFixture )
+{ // source: SRR529889
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@GG3IVWD03HIDOA length=3 xy=2962_2600 region=3 run=R_2010_05_11_11_15_22_\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("GG3IVWD03HIDOA"), string(name, length));
+}
+
+FIXTURE_TEST_CASE ( UnexpectedEOLreported, LoaderFixture )
+{ // source: SRR1915965
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HWI-ST1106:381:D1CDRACXX:8:1101:10000:110594\t2\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST1106:381:D1CDRACXX:8:1101:10000:110594"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE ( AnotherUnexpectedEOLreported, LoaderFixture )
+{ // source: SRR1686805 
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@HWI-ST225:626:C2Y82ACXX:3:1304:7988:75799_2\n"
+        "AACA\n+\n$.%0\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("HWI-ST225:626:C2Y82ACXX:3:1304:7988:75799"), string(name, length));
+    REQUIRE(SequenceIsSecond(seq));
+}
+
+FIXTURE_TEST_CASE ( FastqDumpOutput, LoaderFixture )
+{ // VDB-2835 source: fastq-dump SRR000123 
+    REQUIRE(CreateFileGetSequence(GetName(), 
+        "@SRR000123.1 EXRHO8E16JTGUV length=157\n"
+        "TCAGTTTCGGGAACTATGTAAACAATACGCTAAGCGTGTTCTATGGTTTTACAATGTTCAGGATGGAAACATTGTAGGAGATAACAACCGAGAAGTATCGCTGCCTGTCGGCTGAGACACGCAACAGGGGATAGGCAAGGCACTACAGGGGATAGGN\n"
+        "+SRR000123.1 EXRHO8E16JTGUV length=157\n"
+        "=<:7F?)9F?)>3<=<===F?*<D:<<<=<:F>=<==:D;==;=D;LE8,49E<==E==;E===E<F at +==E<==<D=<8<=C;;A9 at 7;<9>6<<===<=<<A:8<:;C<<=<;<<<9<:=B;88GC6(6<<C==C=C=<=<&<9=GC7):<<B:!\n"
+    ));
+    REQUIRE_RC(SequenceGetSpotName(seq, &name, &length));
+    REQUIRE_EQ(string("SRR000123.1"), string(name, length));
+}
+
+
+// FIXTURE_TEST_CASE(Pacbio, LoaderFixture)
+// { 
+    // REQUIRE(CreateFileGetSequence(GetName(), 
+                // "@m120419_100821_42161_c100329130310000001523018509161273_s1_p0/11/2511_3149\n"
+                // "CTGCTTCTCCTGCTCTTCCTACTGTCCTCTCCCTGCTGTCGCTTCGCCCC\n"
+                // "TCGGTGGAGGCCGCGTTTGAGCGGCCGGTGTCCGCTGC\n"
+                // "+\n"
+                // "+*.,+*(,$+-.)**('#%*',*.*&,.(,$',,,($.,)#.-.-%'*#%\n"
+                // ",../*+*!.%!!-!/-&(.+.!.'!!//,/)!//!*-'\n"
+    // ));
+
+    // REQUIRE_RC(SequenceGetReadLength(seq, &readLength));
+    // REQUIRE_EQ(readLength, 88u);
+    // REQUIRE(MakeReadBuffer());
+    // REQUIRE_RC(SequenceGetRead(seq, read));
+    // REQUIRE_EQ(string(read, readLength), string("CTGCTTCTCCTGCTCTTCCTACTGTCCTCTCCCTGCTGTCGCTTCGCCCCTCGGTGGAGGCCGCGTTTGAGCGGCCGGTGTCCGCTGC"));
+
+    // REQUIRE_RC(SequenceGetQuality(seq, &quality, &qualityAsciiOffset, &qualityType));
+    // REQUIRE_NOT_NULL(quality);
+    // REQUIRE_EQ(qualityType, (int)QT_Phred);
+    // REQUIRE_EQ((unsigned int)qualityAsciiOffset,  (unsigned int)phredOffset);
+    // REQUIRE_EQ(quality[0],  (int8_t)'+');
+    // REQUIRE_EQ(quality[87], (int8_t)'\'');
+// }
+
+// @ERBRDQF01EGP9U
+// spot-name 
+// spot-group 
+// read-number 
+// run-group 
+// coords 
+// fmt-name 
+
+//////////////////////////////////////////// Main
+extern "C"
+{
+
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "wb-test-fastq";
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    KConfigDisableUserSettings();
+    rc_t rc=FastqLoaderWbTestSuite(argc, argv);
+    return rc;
+}
+
+}  
diff --git a/test/fuse/Makefile b/test/fuse/Makefile
new file mode 100644
index 0000000..d674e68
--- /dev/null
+++ b/test/fuse/Makefile
@@ -0,0 +1,79 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+runtests:
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/fuse
+
+TEST_TOOLS =
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# remote-fuser-test
+#
+REMOTE_FUSER_TEST_SRC = \
+	remote-fuser-test   \
+	utils
+
+REMOTE_FUSER_TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(REMOTE_FUSER_TEST_SRC))
+    
+REMOTE_FUSER_TEST_LIB =   \
+	-sncbi-vdb-static   \
+	-skapp
+
+$(TEST_BINDIR)/remote-fuser-test: $(REMOTE_FUSER_TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(REMOTE_FUSER_TEST_LIB)
+
+#-------------------------------------------------------------------------------
+# slowtests: match output vs sra-pileup
+#
+
+ifeq (linux,$(BUILD_OS))
+    ifneq (Ubuntu,$(OS_DISTRIBUTOR))
+slowtests: run-test
+
+run-test: $(TEST_BINDIR)/remote-fuser-test
+	@$(SRCDIR)/remote_fuser_test.sh standard 180 $(TARGDIR)/bin
+
+    else
+slowtests:
+    endif
+else
+slowtests:
+endif
+
+.PHONY: run-test
diff --git a/test/fuse/cfg/standard.cfg b/test/fuse/cfg/standard.cfg
new file mode 100644
index 0000000..02888a4
--- /dev/null
+++ b/test/fuse/cfg/standard.cfg
@@ -0,0 +1,26 @@
+###############################################################
+## Config file for remote_fuser_test.sh script
+## That is standard 'long' running test config file 
+###############################################################    
+
+##  The test directory the directory where test will take place
+##  It is all in one directory.
+##
+
+TEST_DIR="/panfs/pan1/trace_work/teamcity-tests/remote-fuser"
+
+##  This is an URL to XML file with mount information
+##
+
+XML_URL="http://ftp-trace.ncbi.nlm.nih.gov/blast/db/cloud/LATEST/fuse.xml"
+
+##  This vairable is optional. You may uncommet it if You need
+##  to restrict used disk space by amount of GYGA BYTES.
+##
+
+# MAX_DISK_SPACE_GIG=100
+
+## This variable is a mail list to report a problem
+##
+
+MAIL_LIST="iskhakof"
diff --git a/test/fuse/kart-util.sh b/test/fuse/kart-util.sh
new file mode 100755
index 0000000..ebb067d
--- /dev/null
+++ b/test/fuse/kart-util.sh
@@ -0,0 +1,166 @@
+#!/bin/bash
+
+P_NM=`basename $0`
+
+E_TAG="--extract"
+C_TAG="--create"
+
+usage () 
+{
+    cat << EOF
+
+That utility will create kart file or extract data from it.
+
+Syntax: $P_NM action source [ destination ]
+
+Where:
+
+         action - one of two "$E_TAG" or "$C_TAG"
+         source - source text or cart file
+    destination - destination text or cart file. Optional parameter.
+                  if it is omitted, script will add or cut ".krt" 
+                  from source file.
+
+EOF
+
+}
+
+####
+####
+## Parsing Args
+##
+ACT_P=""
+EXT_P="_do_extract"
+CRE_P="_do_create"
+
+SRC_F=""
+SRC_S=0
+
+DST_F=""
+DST_S=0
+
+if [ $# -ne 2 -a $# -ne 3 ]
+then
+    echo ERROR: invalid arguments passed
+    usage
+    exit 1
+fi
+
+case $1 in
+    $E_TAG)
+        ACT_P=$EXT_P
+        ;;
+    $C_TAG)
+        ACT_P=$CRE_P
+        ;;
+    *)
+        echo ERROR: invalid action parameter passed
+        usage
+        exit 1
+        ;;
+esac
+
+SRC_F=$2
+SRC_S=`stat -c "%s" $SRC_F 2>/dev/null`
+if [ $? -ne 0 ]
+then
+    echo ERROR: can not stat file \'$SRC_F\'
+    exit 1
+fi
+
+DST_F=$3
+
+####
+####
+## Processing
+##
+
+MAGIC="ncbikart"
+
+_do_extract ()
+{
+    if [ -z "$SRC_F" ]
+    then
+        echo "ERROR: undefined 'source' file"
+        exit 1
+    fi
+
+    if [ -z "$DST_F" ]
+    then
+        DST_F=`dirname $SRC_F`/`basename $SRC_F .krt`.txt
+    fi
+
+    cat <<EOF
+Extracting kart information
+from: $SRC_F
+  to: $DST_F
+EOF
+    if [ -f "$DST_F" ]
+    then
+        echo "Removing baaad file '$DST_F'"
+        rm -f $DST_F
+        if [ $? -ne 0 ]
+        then
+            echo "ERROR: Can not remove file '$DST_F'"
+            exit 1
+        fi
+    fi
+
+    tail -c $(( $SRC_S - ${#MAGIC} )) $SRC_F | gunzip -c >$DST_F
+
+        ## There are header and footer, so ... simple check
+    LIN_Q=`cat $DST_F | wc -l`
+    if [ "$LIN_Q" -lt 2 ]
+    then
+        echo "WARNING: Invalid kart file format"
+    else
+        echo "EXTRACTED: $(( $LIN_Q - 1 )) entries"
+    fi
+}
+
+_do_create ()
+{
+    if [ -z "$SRC_F" ]
+    then
+        echo "ERROR: undefined 'source' file"
+        exit 1
+    fi
+
+    if [ -z "$DST_F" ]
+    then
+        DST_F=`dirname $SRC_F`/`basename $SRC_F .txt`.krt
+    fi
+
+    cat <<EOF
+Creating kart file
+from: $SRC_F
+  to: $DST_F
+EOF
+    if [ -f "$DST_F" ]
+    then
+        echo "Removing baaad file '$DST_F'"
+        rm -f $DST_F
+        if [ $? -ne 0 ]
+        then
+            echo "ERROR: Can not remove file '$DST_F'"
+            exit 1
+        fi
+    fi
+
+    echo -n $MAGIC > $DST_F
+    cat $SRC_F | gzip -c >> $DST_F
+}
+
+####
+####
+## Actrual processing is here
+##
+
+eval $ACT_P
+
+if [ $? -ne 0 ]
+then
+    echo "ERROR: something come wrong :("
+fi
+
+echo "DONE OK"
diff --git a/test/fuse/remote-fuser-test.c b/test/fuse/remote-fuser-test.c
new file mode 100644
index 0000000..7233dc2
--- /dev/null
+++ b/test/fuse/remote-fuser-test.c
@@ -0,0 +1,794 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "remote-fuser-test.vers.h" /* VDB_PASSWD_VERS */
+
+#include <sysalloc.h>
+#include <kapp/main.h> /* KMain */
+
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <kproc/lock.h>
+#include <kproc/thread.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+// #include "mutli.h"
+#include "utils.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <sys/time.h>
+#include <signal.h> 
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*  Single File Test
+ */
+struct _SFTest {
+    const char * path;
+    uint64_t size;
+};
+
+static
+rc_t CC
+_SFTestDispose ( const struct _SFTest * self )
+{
+    struct _SFTest * Test = ( struct _SFTest * ) self;
+
+    if ( Test != NULL ) {
+        if ( Test -> path != NULL ) {
+            free ( ( char * ) Test -> path );
+
+            Test -> path = NULL;
+        }
+
+        Test -> size = 0;
+
+        free ( Test );
+    }
+
+    return 0;
+}   /* _SFTestDispose () */
+
+static
+rc_t CC
+_SFTestMake ( const struct _SFTest ** Test, const char * Path )
+{
+    rc_t RCt;
+    struct _SFTest * Ret;
+    struct KDirectory * Dir;
+    uint32_t PathType;
+    uint64_t Size;
+
+    RCt = 0;
+    Ret = NULL;
+    Dir = NULL;
+    PathType = kptNotFound;
+    Size = 0;
+
+    if ( Test != NULL ) {
+        * Test = NULL;
+    }
+
+    if ( Test == NULL || Path == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+        /* First we shoud check that file exist
+         */
+    RCt = KDirectoryNativeDir ( & Dir );
+    if ( RCt == 0 ) {
+        PathType = KDirectoryPathType ( Dir, Path );
+        if ( PathType == kptFile ) {
+            RCt = KDirectoryFileSize ( Dir, & Size, Path );
+            if ( Size == 0 ) {
+                return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+            }
+        }
+        else {
+            return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+        }
+        KDirectoryRelease ( Dir );
+    }
+
+    if ( RCt == 0 ) {
+        Ret = calloc ( 1, sizeof ( struct _SFTest ) );
+        if ( Ret == NULL ) {
+            RCt = RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+        }
+        else {
+            Ret -> path = string_dup_measure ( Path, NULL );
+            if ( Ret -> path == NULL ) {
+                RCt = RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+            }
+            else {
+                Ret -> size = Size;
+
+                * Test = Ret;
+            }
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * Test = NULL;
+
+        _SFTestDispose ( Ret );
+    }
+
+    return RCt;
+}   /* _SFTestMake () */
+
+/*  I am pushed to write that test fast, so nothing special. Just
+ *  reading 32M blocks at random offset
+ */
+static
+rc_t CC
+_SFTestNewJob (
+                struct _SFTest * self,
+                int Iteration,
+                const char ** Name,
+                uint64_t * Offset,
+                size_t * Size
+)
+{
+    rc_t RCt;
+    size_t BS;
+    uint64_t Oko;
+
+    RCt = 0;
+    BS = 33554432;
+    Oko = 0;
+
+    if ( Name != NULL ) {
+        * Name = NULL;
+    }
+
+    if ( Offset != NULL ) {
+        * Offset = 0;
+    }
+
+    if ( Size != NULL ) {
+        * Size = 0;
+    }
+
+    if ( self == NULL || Name == NULL || Offset == NULL || Size == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    * Name = self -> path;
+
+    if ( self -> size < BS ) {
+        * Offset = 0;
+        * Size = self -> size;
+    }
+    else {
+        Oko = ( uint64_t ) ( self -> size / BS );
+        * Offset = ( rand () % Oko ) * BS;
+        * Size = BS;
+
+        if ( self -> size <= * Offset + BS ) {
+            * Size = self -> size - * Offset;
+        }
+    }
+
+    return RCt;
+}   /* _SFTestNewJob () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*  Multiply Files Test
+ */
+struct _MFTest {
+    const struct _SFTest ** files;
+    size_t files_qty;
+};
+
+static
+rc_t CC
+_MFTestDispose ( const struct _MFTest * self )
+{
+    size_t llp;
+    struct _MFTest * Test;
+
+    llp = 0;
+    Test = ( struct _MFTest * ) self;
+
+    if ( Test != NULL ) {
+        if ( Test -> files != NULL ) {
+            for ( llp = 0; llp < Test -> files_qty; llp ++ ) {
+                _SFTestDispose ( self -> files [ llp ] );
+            }
+
+            free ( Test -> files );
+        }
+
+        Test -> files = NULL;
+        Test -> files_qty = 0;
+
+        free ( Test );
+    }
+
+    return 0;
+}   /* _MFTestDispose () */
+
+static rc_t CC _MFTestLoadEntries (
+                                struct _MFTest * self,
+                                const char * Path
+                                );
+
+static
+rc_t CC
+_MFTestMake ( const struct _MFTest ** Test, const char * Path )
+{
+    rc_t RCt;
+    struct _MFTest * Ret;
+
+    RCt = 0;
+    Ret = NULL;
+
+    if ( Test != NULL ) {
+        * Test = NULL;
+    }
+
+    if ( Test == NULL || Path == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    Ret = calloc ( 1, sizeof ( struct _MFTest ) );
+    if ( Ret == NULL ) {
+        RCt = RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+    }
+    else {
+        RCt = _MFTestLoadEntries ( Ret, Path );
+        if ( RCt == 0 ) {
+            * Test = Ret;
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * Test = NULL;
+
+        _MFTestDispose ( Ret );
+    }
+
+    return RCt;
+}   /* _MFTestMake () */
+
+static
+rc_t CC
+_ReadAll ( const char * Path, char ** Buf, size_t * BufSize )
+{
+    rc_t RCt;
+    const struct KFile * File;
+    struct KDirectory * Dir;
+    char * RetBuf;
+    size_t Size, NumRead;
+
+    RCt = 0;
+    File = NULL;
+    Dir = NULL;
+    RetBuf = NULL;
+    Size = 0;
+    NumRead = 0;
+
+    RCt = KDirectoryNativeDir ( & Dir );
+    if ( RCt == 0 ) {
+        RCt = KDirectoryFileSize ( Dir, & Size, Path );
+        if ( RCt == 0 ) {
+            if ( Size == 0 ) {
+                return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+            }
+            else {
+                RetBuf = calloc ( Size, sizeof ( char ) );
+                if ( RetBuf == NULL ) {
+                    return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+                }
+                else {
+                    RCt = KDirectoryOpenFileRead ( Dir, & File, Path );
+                    if ( RCt == 0 ) {
+                        RCt = KFileReadAll (
+                                            File,
+                                            0,
+                                            RetBuf,
+                                            Size,
+                                            & NumRead
+                                            );
+                        if ( RCt == 0 ) {
+                            * Buf = RetBuf;
+                            * BufSize = Size;
+                        }
+                    }
+                }
+            }
+        }
+
+        KDirectoryRelease ( Dir );
+    }
+
+    if ( RCt != 0 ) {
+        Buf = NULL;
+        BufSize = 0;
+
+        if ( RetBuf != NULL ) {
+            free ( RetBuf );
+        }
+    }
+
+    return RCt;
+}   /* _ReadAll () */
+
+static
+rc_t CC
+_PaarseEntries ( struct _MFTest * self, char * Buf, size_t BufSize )
+{
+    rc_t RCt;
+    size_t NumLines;
+    const struct _SFTest ** Tests;
+    char * pS, * pE, * pC;
+    size_t llp;
+    const struct _SFTest * Test;
+
+    RCt = 0;
+    NumLines = 0;
+    Tests = 0;
+    pS = pE = pC = NULL;
+    llp = 0;
+    Test = NULL;
+
+    if ( self == NULL || Buf == NULL || BufSize == 0 ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+        /*  Fist we are going through buffer trying to define amount
+         *  of lines
+         */
+    pS = pC = Buf;
+    pE = pS + BufSize;
+
+    while ( pC < pE ) {
+
+        if ( * pC == '\n' ) {
+            * pC = 0;
+            NumLines ++;
+            pS = pC + 1;
+        }
+
+        pC ++;
+    }
+
+    if ( pS < pC ) {
+        * pC = 0;       /* Ha-ha, will write zero beyond boundary */
+        NumLines ++;
+    }
+
+    if ( NumLines == 0 ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    Tests = calloc ( NumLines, sizeof ( struct _SFTest * ) );
+    if ( Tests == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+    }
+
+        /* Here we are doing another pass to fill a foo
+         */
+    pS = pC = Buf;
+    pE = pS + BufSize;
+    llp = 0;
+    Test = 0;
+
+    while ( pC < pE ) {
+
+        if ( * pC == 0 ) {
+            RCt = _SFTestMake ( & Test, pS );
+            if ( RCt != 0 ) {
+                break;
+            }
+
+            Tests [ llp ] = Test;
+
+            llp ++;
+            pS = pC + 1;
+        }
+
+        pC ++;
+    }
+
+    if ( RCt == 0 ) {
+        if ( pS < pC ) {
+            RCt = _SFTestMake ( & Test, pS );
+            if ( RCt == 0 ) {
+                Tests [ llp ] = Test;
+            } 
+        }
+    }
+
+    if ( RCt == 0 ) {
+        self -> files = Tests;
+        self -> files_qty = NumLines;
+    }
+    else {
+        self -> files = NULL;
+        self -> files_qty = 0;
+
+        if ( Tests != NULL ) {
+            for ( llp = 0; llp < NumLines; llp ++ ) {
+                _SFTestDispose ( Tests [ llp ] );
+            }
+        }
+    }
+
+    return RCt;
+}   /* _PaarseEntries () */
+
+rc_t CC
+_MFTestLoadEntries ( struct _MFTest * self, const char * Path )
+{
+    rc_t RCt;
+    char * Buf;
+    size_t BufSize;
+
+    RCt = 0;
+    Buf = NULL;
+    BufSize = 0;
+
+    if ( self == NULL || Path == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    RCt = _ReadAll ( Path, & Buf, & BufSize );
+    if ( RCt == 0 ) {
+        RCt = _PaarseEntries ( self, Buf, BufSize );
+
+        free ( Buf );
+    }
+
+    return RCt;
+}   /* _MFTestLoadEntries () */
+
+/*  I am pushed to write that test fast, so nothing special. Just
+ *  reading 32M blocks at random offset from random files
+ */
+static
+rc_t CC
+_MFTestNewJob (
+                struct _MFTest * self,
+                int Iteration,
+                const char ** Name,
+                uint64_t * Offset,
+                size_t * Size
+)
+{
+    rc_t RCt;
+    size_t BS;
+    uint64_t Oko;
+    const struct _SFTest * Test;
+
+    RCt = 0;
+    BS = 33554432;
+    Oko = 0;
+    Test = NULL;
+
+    if ( Name != NULL ) {
+        * Name = NULL;
+    }
+
+    if ( Offset != NULL ) {
+        * Offset = 0;
+    }
+
+    if ( Size != NULL ) {
+        * Size = 0;
+    }
+
+    if ( self == NULL || Name == NULL || Offset == NULL || Size == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+        /*  First we are going to choose righ path
+         */
+    Test = self -> files [ rand () % self -> files_qty ];
+
+    * Name = Test -> path;
+
+    if ( Test -> size < BS ) {
+        * Offset = 0;
+        * Size = Test -> size;
+    }
+    else {
+        Oko = ( uint64_t ) ( Test -> size / BS );
+        * Offset = ( rand () % Oko ) * BS;
+        * Size = BS;
+
+        if ( Test -> size <= * Offset + BS ) {
+            * Size = Test -> size - * Offset;
+        }
+    }
+
+    return RCt;
+}   /* _MFTestNewJob () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+static
+rc_t run_many_files ( int NumThr, int TumeRun, const char * Path )
+{
+    rc_t RCt;
+    const struct _MFTest * Test;
+    const struct XTasker * Tasker;
+
+    RCt = 0;
+    Test = NULL;
+    Tasker = NULL;
+
+    RCt = _MFTestMake ( & Test, Path );
+    if ( RCt == 0 ) {
+
+        RCt = XTaskerMake (
+                        & Tasker,
+                        NumThr,
+                        ( void * ) Test,
+                        ( Job4Task ) _MFTestNewJob 
+                        );
+        if ( RCt == 0 ) {
+
+            printf (
+                    "Run test in [%d] threads on [%lu] files\n",
+                    NumThr,
+                    Test -> files_qty
+                    );
+
+            XTaskerRun ( Tasker, TumeRun * 60 );
+
+            XTaskerDispose ( Tasker );
+        }
+
+        _MFTestDispose ( Test );
+    }
+
+    return RCt;
+}   /* run_many_files () */
+
+static
+rc_t run_single_file ( int NumThr, int TumeRun, const char * Path )
+{
+    rc_t RCt;
+    const struct _SFTest * Test;
+    const struct XTasker * Tasker;
+
+    RCt = 0;
+    Test = NULL;
+    Tasker = NULL;
+
+    RCt = _SFTestMake ( & Test, Path );
+    if ( RCt == 0 ) {
+
+        RCt = XTaskerMake (
+                        & Tasker,
+                        NumThr,
+                        ( void * ) Test,
+                        ( Job4Task ) _SFTestNewJob 
+                        );
+        if ( RCt == 0 ) {
+            printf (
+                    "Run test in [%d] threads on [single] file\n",
+                    NumThr
+                    );
+
+            XTaskerRun ( Tasker, TumeRun * 60 );
+
+            XTaskerDispose ( Tasker );
+        }
+
+        _SFTestDispose ( Test );
+    }
+
+    return RCt;
+}   /* run_single_file () */
+
+/******************************************************************************/
+
+static
+rc_t run ( int NumThr, int TumeRun, const char * Path, bool IsList )
+{
+    rc_t RCt = 0;
+
+    if ( IsList ) {
+        /* Here we are reading list */
+        RCt = run_many_files ( NumThr, TumeRun, Path );
+    }
+    else {
+        RCt = run_single_file ( NumThr, TumeRun, Path );
+        /* This is a single file case */
+    }
+
+
+    return RCt;
+}
+
+ver_t CC KAppVersion(void) { return REMOTE_FUSER_TEST_VERS; }
+
+/*  Here I will temporarily parce arguments, and will attach
+ *  toolkit ones later ... test program :)
+ */
+#define MAX_PATH_SIZE 1234
+
+char ProgramName [ MAX_PATH_SIZE ];
+
+const static char * NumThrTag = "-t";
+const static char * NumThrDsc = "num_threads";
+#define NUM_THR_DEF 16
+static int NumThr = NUM_THR_DEF;
+
+static char * RunTimeTag = "-r";
+static char * RunTimeDsc = "run_time";
+#define RUN_TIME_DEF 180
+static int RunTime = RUN_TIME_DEF;
+
+static char * ListTag    = "-l";
+bool          PathIsList = false;
+
+char FilePath [ MAX_PATH_SIZE ];
+
+static
+void
+RightUsage()
+{
+    printf ( "\nThat program will test 'remote-fuser' application. It implements two types\n" );
+    printf ( "of test : multiply access to single file and multiply acces to many files\n" );
+    printf ( "\n" );
+    printf ( "Ussage: %s [ %s %s ] [ %s %s ] [%s] path\n\n",
+                            ProgramName, NumThrTag, NumThrDsc,
+                            RunTimeTag, RunTimeDsc, ListTag
+                            );
+    printf ( "Where:\n\n" );
+    printf ( "%s - num threads to run, optional, default %d\n", NumThrDsc, NUM_THR_DEF );
+    printf ( "   %s - time minutes to run, optional, default %d\n", RunTimeDsc, RUN_TIME_DEF );
+    printf ( "         %s - flag that show that path is a list file for multiply access test\n", ListTag );
+    printf ( "       path - path to file ( single or list )\n" );
+    printf ( "\n" );
+}   /* RightUsage() */
+
+static
+bool
+ParseArgs ( int argc, char ** argv )
+{
+    const char * PPU;
+    int llp;
+
+    PPU = NULL;
+    llp = 0;
+
+    PPU = strrchr ( * argv, '/' );
+    if ( PPU == NULL ) {
+        PPU = * argv;
+    }
+    strcpy ( ProgramName, PPU );
+
+    * FilePath = 0;
+
+    for ( llp = 1; llp < argc; llp ++ ) {
+
+        PPU = argv [ llp ];
+        if ( * PPU == '-' ) {
+
+            if ( strcmp ( NumThrTag, PPU ) == 0 ) {
+                if ( argc - 1 <= llp ) {
+                    printf ( "ERROR : parameter [%s] requests an argument\n", NumThrTag );
+                    return false;
+                }
+
+                llp ++;
+                if ( ( NumThr = atol ( argv [ llp ] ) ) == 0 ) {
+                    printf ( "ERROR : invalid parameter [%s] value [%s]\n", NumThrTag, argv [ llp ] );
+                }
+
+                continue;
+            }
+
+            if ( strcmp ( RunTimeTag, PPU ) == 0 ) {
+                if ( argc - 1 <= llp ) {
+                    printf ( "ERROR : parameter [%s] requests an argument\n", RunTimeTag );
+                    return false;
+                }
+
+                llp ++;
+                if ( ( RunTime = atol ( argv [ llp ] ) ) == 0 ) {
+                    printf ( "ERROR : invalid parameter [%s] value [%s]\n", RunTimeTag, argv [ llp ] );
+                }
+
+                continue;
+            }
+
+            if ( strcmp ( ListTag, PPU ) == 0 ) {
+                PathIsList = true;
+
+                continue;
+            }
+
+            printf ( "ERROR : unknown parameter [%s]\n", PPU );
+            return false;
+        }
+        else {
+            strcpy ( FilePath, PPU );
+            break;
+        }
+    }
+
+    if ( * FilePath == 0 ) {
+        printf ( "ERROR : no path passed\n" );
+        return false;
+    }
+
+    if ( 48 <= NumThr ) {
+        printf ( "ERROR : invalide amount of threads passed [%d], should be less than 48\n", NumThr );
+        return false;
+    }
+
+    if ( RunTime < 2 ) {
+        printf ( "ERROR : invalide amount of run time passed [%d], should be greater than 2\n", RunTime );
+        return false;
+    }
+
+    return true;
+}   /* ParseArgs() */
+
+
+const char UsageDefaultName[] = "Henri Fuseli";
+rc_t CC UsageSummary (const char* progname) { return 0; }
+rc_t CC Usage ( const Args * args ) { return 0; }
+
+rc_t CC KMain(int argc, char *argv[]) {
+
+
+    if ( ! ParseArgs ( argc, argv ) ) {
+        RightUsage();
+        return 1;
+    }
+
+    if ( signal ( SIGINT, XTaskerSigIntHandler ) == SIG_ERR ) {
+        printf ( "Can not instal signal handlers\n" );
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+    }
+
+    return run ( NumThr, RunTime, FilePath, PathIsList );
+}
diff --git a/test/fuse/remote-fuser-test.vers b/test/fuse/remote-fuser-test.vers
new file mode 100644
index 0000000..8acdd82
--- /dev/null
+++ b/test/fuse/remote-fuser-test.vers
@@ -0,0 +1 @@
+0.0.1
diff --git a/test/fuse/remote-fuser-test.vers.h b/test/fuse/remote-fuser-test.vers.h
new file mode 100644
index 0000000..625fe28
--- /dev/null
+++ b/test/fuse/remote-fuser-test.vers.h
@@ -0,0 +1 @@
+#define REMOTE_FUSER_TEST_VERS 0x00000001
diff --git a/test/fuse/remote_fuser_clean.sh b/test/fuse/remote_fuser_clean.sh
new file mode 100755
index 0000000..e54550e
--- /dev/null
+++ b/test/fuse/remote_fuser_clean.sh
@@ -0,0 +1,404 @@
+#!/bin/bash
+
+ulimit -c unlimited
+
+#####################################################################
+## Lyrics:
+##
+## The goal of that script is to clean data leftovers, run away fuser
+## processes, and report if here is any problem
+##
+## That script has one parameter :
+## 
+##      config_name : it will try to find configuration file
+##                    cfg/config_name.cfg ( optional )
+##                    default config name is 'standard'
+##
+#####################################################################
+
+##  Where we are, who we are?
+##
+SCR_DIR=`dirname $0`
+SCR_DIR=`cd $SCR_DIR; pwd`
+
+SCR_NAME=`basename $0`
+SCR_SNAME=`basename $0 .sh`
+
+##  Loading common things to live
+##
+CMN_SCR="$SCR_DIR/remote_fuser_common.sh"
+if [ ! -f "$CMN_SCR" ]
+then
+    echo "ERROR: Can not stat script '$CMN_SCR' ... exiting"
+    exit 1
+fi
+
+. $CMN_SCR
+
+#####################################################################
+##
+## Simple setup : directory
+##
+## TEST_DIR ---/ USER ---/ HOST ---/ PID ---/ cache_dir /
+##                 |-/ logs           |-/ mount_point /
+##                 |-/ bin            |-/ tmp_dir /
+##                 |-/ depot          |-/ status_file
+##
+## depot - directory with test binaries, just a history
+## bin - test binaries in work
+## status_file - says a lot ... but heart-bot
+##
+## It is checking USER/HOST directory for PID and clean unused.
+## If there is a process which is unable to kill, it will be reported
+## to MAIL_LIST from config file
+##
+#####################################################################
+
+##  Config file
+##
+CFG_DIR=$SCR_DIR/cfg
+if [ ! -d "$CFG_DIR" ]
+then
+    _err_exit "Can not stat directory '$CFG_DIR'"
+fi
+
+####
+##  Here the usage and Arguments processing
+#
+CFG_NAME_DEF="standard"
+CFG_NAME=$CFG_NAME_DEF
+
+usage ( )
+{
+    cat >&2 <<EOF
+
+This script will remove unused test data for remote_fuser utility. 
+
+Syntax is :
+
+    $SCR_NAME [ config_name ]
+
+Where :
+
+         config_name - name of config to use. 
+                       String. Optional. Default "$CFG_NAME_DEF"
+
+EOF
+}
+
+case $# in
+    0)
+        ;;
+    1)
+        CFG_NAME=$1
+        ;;
+    *)
+        usage
+        _err_exit Invalid parameters
+        ;;
+esac
+
+##  Checking arguments
+##
+CFG_FILE=$CFG_DIR/${CFG_NAME}.cfg
+if [ ! -f "$CFG_FILE" ]
+then
+    _err_exit "Can not stat config file with name '$CFG_NAME'"
+fi
+
+####
+##  Loading fonfig file
+#
+. $CFG_FILE
+if [ $? -ne 0 ]
+then
+    _err_exit "Can not load config file '$CFG_NAME'"
+fi
+
+####
+##  Checking config file data and prepareing environment
+#
+if [ -z "$TEST_DIR" ]
+then
+    _err_exit "Config does not have definition for variable TEST_DIR"
+fi
+
+if [ ! -d "$TEST_DIR" ]
+then
+    _err_exit "Can not stat directory '$TEST_DIR'"
+fi
+
+###
+### Prefixes U_(ser), H_(ost), P_(rocess), F_(inal) - is what we use
+###
+
+_assign_create_dir ()
+{
+    if [ $# -ne 2 ]
+    then
+        _err_exit "_assign_create_dir(): requires two arguments"
+    fi
+
+    DVAL=$1
+    if [ ! -d "$DVAL" ]
+    then
+        _msg "Creating directory '$DVAL'"
+        _exec mkdir $DVAL
+        _exec chmod ugoa+rwx $DVAL
+    fi
+
+    DVAL=`cd $DVAL; pwd`
+
+    eval "$2=$DVAL"
+}
+
+###
+## There are logs, bin and depot on user level of test direcotry
+#
+_assign_create_dir $TEST_DIR/$DAS_USER U_TEST_DIR
+_assign_create_dir $U_TEST_DIR/$DAS_HOST H_TEST_DIR
+
+_assign_create_dir $U_TEST_DIR/log   F_LOG_DIR
+
+F_VALID="cache mount status.file temp"
+U_VALID="bin depot log"
+
+##  Here we are logging and execing
+##
+F_TIME_STAMP=`date +%Y-%m-%d_%H-%M-%S`
+F_LOG_FILE=$F_LOG_DIR/${SCR_SNAME}.log.${DAS_CTX}.${F_TIME_STAMP}
+echo Log file: $F_LOG_FILE
+
+exec >$F_LOG_FILE 2>&1
+
+## One more time for log file
+##
+_print_env $@
+
+####
+### OLD LOGS
+##
+#
+_bump
+_msg OLD LOGS
+
+##  Here we are clearing old logs
+##
+DAYS_KEEP_LOG=10
+
+SEC_IN_DAY=$(( 60 * 60 * 24 ))
+NOW_DAY=$(( `date +%s` / $SEC_IN_DAY ))
+
+check_remove ()
+{
+    F2R=$1
+
+    if [ -n "$F2R" ]
+    then
+        FILE_DAY=$(( `stat --print="%X" $F2R` / $SEC_IN_DAY ))
+        DALT=$(( $NOW_DAY - $FILE_DAY ))
+        if [ $DAYS_KEEP_LOG -le $DALT ]
+        then
+            _msg Log file is $DALT days old, removing \'$F2R\'
+            rm -f $F2R
+            if [ $? -ne 0 ]
+            then
+                _wrn Can not remove file \'$F2R\'
+            fi
+        fi
+    fi
+}
+
+clear_old_logs ()
+{
+    _msg Cleaning old logs ...
+
+    for i in `ls $F_LOG_DIR 2>/dev/null`
+    do
+        check_remove $F_LOG_DIR/$i
+    done
+}
+
+clear_old_logs
+
+_msg OLD LOGS DONE
+
+####
+### OLD FUSES
+##
+#
+_bump
+_msg OLD FUSES
+
+_remove_dir ()
+{
+    D2R=$1
+
+    if [ -d "$D2R" ]
+    then
+        _exec_plain rm -rf $D2R
+        if [ $? -ne 0 ]
+        then
+            _msg Failed to remove directory $D2R
+            sleep 3
+            _exec_plain rm -rf $D2R
+            if [ $? -ne 0 ]
+            then
+                INVALID_FUSES[${#INVALID_FUSES[*]}]="CAN NOT REMOVE: $D2R"
+            fi
+        fi
+    fi
+}
+
+_clean_data_for_pid ()
+{
+    DPD=$1
+
+    _msg "<=================================>"
+    _msg Cleaning data for PID = $DPD
+
+    F_TEST_DIR=$H_TEST_DIR/$DPD
+
+    ## First we are trying to read data from status file
+    ##
+
+    unset F_PID
+    unset F_MNT
+    ST_FL=$F_TEST_DIR/status.file
+    if [ -f $ST_FL ]
+    then
+        _load_fuser_params $ST_FL F_PID F_MNT
+    else
+        F_MNT=$F_TEST_DIR/mount
+    fi
+
+    if [ -n "$F_PID" ]
+    then
+        _shutdown_fuser $F_PID $F_MNT
+        if [ $? -ne 0 ]
+        then
+            ## Failed to shutdown
+            INVALID_FUSES[${#INVALID_FUSES[*]}]="STIL RUN: PID=$F_PID MPOINT=$F_MNT"
+        else
+            _remove_dir $F_TEST_DIR
+        fi
+    else
+        _check_dir_mounted $F_MNT
+        if [ $? -eq 0 ]
+        then
+            /bin/fusermount -u $F_MNT
+
+            _check_dir_mounted $F_MNT
+            if [ $? -eq 0 ]
+            then
+                INVALID_FUSES[${#INVALID_FUSES[*]}]="STIL RUN: MPOINT=$F_MNT"
+            else
+                _remove_dir $F_TEST_DIR
+            fi
+        else
+            _remove_dir $F_TEST_DIR
+        fi
+    fi
+}
+
+_clean_test_data ()
+{
+    DPD=$1
+
+    ps -p $DPD > /dev/null 2>&1
+    if [ $? -eq 0 ]
+    then
+        _msg Process with PID = $DPD is still running
+        return
+    fi
+
+    _clean_data_for_pid $DPD
+}
+
+for i in ` ls $H_TEST_DIR 2>/dev/null `
+do
+    _clean_test_data $i
+done
+
+####
+### SANITY CHECK
+##
+#
+_bump
+_msg SANITY CHECK
+
+_check_sanity ()
+{
+    N2C=$1
+
+    for i in $U_VALID
+    do
+        if [ "$i" == "$N2C" ]
+        then
+            return 0
+        fi
+    done
+
+    /usr/bin/nslookup $N2C >/dev/null 2>&1
+    if [ $? -eq 0 ]
+    then
+        return 0
+    fi
+
+    return 1
+}
+
+_check_sanity_remove ()
+{
+    SDR=$1
+
+    ENT=$U_TEST_DIR/$SDR
+
+    _check_sanity $SDR
+    if [ $? -eq 0 ]
+    then
+        _msg LEGIT: $ENT
+    else
+        _msg REMOVING: $ENT
+        _exec_plain rm -rf $ENT
+        if [ $? -ne 0 ]
+        then
+            _msg Failed to remove $ENT
+            sleep 3
+            _msg Another attempt to remove $ENT
+            _exec_plain rm -rf $ENT
+            if [ $? -ne 0 ]
+            then
+                INVALID_FUSES[${#INVALID_FUSES[*]}]="CAN NOT REMOVE: $ENT"
+            fi
+        fi
+    fi
+}
+
+for i in ` ls $U_TEST_DIR 2>/dev/null `
+do
+    _check_sanity_remove $i
+done
+
+####
+### REPORTING EXITING
+##
+#
+_bump
+_msg CLEANING COMPLETED
+
+PQT=${#INVALID_FUSES[*]}
+
+_msg FOUND $PQT PROBLEMS
+
+if [ $PQT -ne 0 ]
+then
+    CNT=0
+    while [ $CNT -lt $PQT ]
+    do
+        CNT=$(( $CNT + 1 ))
+        _msg "  $CNT: ${INVALID_FUSES[$CNT]}"
+    done
+fi 
+
+_msg BYE ...
diff --git a/test/fuse/remote_fuser_common.sh b/test/fuse/remote_fuser_common.sh
new file mode 100644
index 0000000..0cff2bc
--- /dev/null
+++ b/test/fuse/remote_fuser_common.sh
@@ -0,0 +1,282 @@
+#!/bin/bash
+
+ulimit -c unlimited
+
+#####################################################################
+## That file contains common methods and variables for remote-fuser
+## test scripts
+#####################################################################
+
+###
+## Some impoertants
+#
+DAS_PID=$$
+
+DAS_HOST=$HOSTNAME
+if [ -z "$DAS_HOST" ]
+then
+    DAS_HOST=`hostname 2>/dev/null`
+    if [ -z "$DAS_HOST" ]
+    then
+        DAS_HOST="unknown-host"
+    fi
+fi
+
+DAS_USER=$USER
+if [ -z "$DAS_USER" ]
+then
+    DAS_USER=`id -n -u`
+    if [ -z "$DAS_USER" ]
+    then
+        DAS_USER="unknown-user"
+    fi
+fi
+
+DAS_CTX=${DAS_HOST}.${DAS_PID}
+
+DAS_TSTAMP=`date +%Y-%m-%d_%H-%M-%S`
+
+####
+##  Environment: Jy's a mal naaier maar ek hou van jou baie
+#
+
+_print_env ()
+{
+    for i in @ DAS_PID USER REMOTE_USER DAS_USER HOME HOST HOSTNAME DAS_HOST HOSTTYPE
+    do
+        echo "[$i] [${!i}]"
+    done
+    echo "[groups] [`groups`]"
+}
+
+_print_env $@
+
+####
+##  Some interesting stuff
+#
+
+_bump ()
+{
+    echo ""
+    echo "####################################################################"
+    echo "####################################################################"
+    echo "##"
+    echo "## `date`"
+    echo "##"
+    echo "####################################################################"
+}
+
+_msg ( )
+{
+    echo "INF[$SCR_SNAME][`date +%Y-%m-%d_%H:%M:%S`] $@"
+}
+
+_wrn ( )
+{
+    echo "WRN[$SCR_SNAME][`date +%Y-%m-%d_%H:%M:%S`] $@" >&2
+}
+
+_err ( )
+{
+    echo "ERR[$SCR_SNAME][`date +%Y-%m-%d_%H:%M:%S`] $@" >&2
+}
+
+_err_exit ( )
+{
+    _err $@
+    _err Exiting ...
+    exit 1
+}
+
+_exec_plain ()
+{
+    CDM="$@"
+    _msg "## $CDM"
+    eval "$CDM"
+
+    return $?
+}
+
+_exec ()
+{
+    CDM="$@"
+    _msg "## $CDM"
+    eval "$CDM"
+    if [ $? -ne 0 ]
+    then
+        _err_exit "FAILED: $CDM"
+    fi
+}
+
+## Syntax : _assign_create_dir path_to_dir VARIABLE_NAME_TO_ASSIGN
+##
+_assign_create_dir ()
+{
+    if [ $# -ne 2 ]
+    then
+        _err_exit "_assign_create_dir(): requires two arguments"
+    fi
+
+    DVAL=$1
+    if [ ! -d "$DVAL" ]
+    then
+        _msg "Creating directory '$DVAL'"
+        _exec mkdir $DVAL
+        _exec chmod ugoa+rwx $DVAL
+    fi
+
+    DVAL=`cd $DVAL; pwd`
+
+    eval "$2=$DVAL"
+}
+
+## Here we are checking that two pathes points to the same directory
+##
+_same_dir ()
+{
+    if [ $# -ne 2 ]
+    then
+        _err_exit "_same_dir(): requires two arguments"
+    fi
+
+    N1=`basename $1`
+    N2=`basename $2`
+    if [ "$N1" == "$N2" ]
+    then
+        N1=`dirname $1`
+        N2=`dirname $2`
+        if [ "$N1" -ef "$N2" ]
+        then
+            return 0
+        fi
+    fi
+
+    return 1
+}
+
+## Checking that path is in mtab, returns 0 if dir mounted and used
+## Syntax: _check_dir_mounted path_to_dir
+##
+_check_dir_mounted ()
+{
+        ## We are simple not check an mount directory.
+    for i in `mount | awk ' { print $3 } ' `
+    do
+        _same_dir $1 $i
+        if [ $? -eq 0 ]
+        then
+            _msg "Mount point is in use '$1'"
+            return 0
+        fi
+    done
+
+    _msg "Mount point is not in use '$1'"
+    return 1
+}
+
+###
+##  Various FUSE checks
+#
+
+##  Stores fuser PID and MountPoint to file
+##  Syntax: _store_fuser_params path PID MOUNT_POINT
+_store_fuser_params ()
+{
+    cat>$1 <<EOF
+pid = $2
+mount_point = $3
+EOF
+}
+
+##  Read fuser PID and MountPoint from file
+##  Syntax: _load_fuser_params path PID MOUNT_POINT
+_load_fuser_params ()
+{
+    RPD=`grep pid $1 | tail -n 1 | sed "s#=# #1" | awk ' { print int ( $2 ); } ' `
+    RMP=`grep mount_point $1 | tail -n 1 | sed "s#=# #1" | awk ' { print $2; } ' `
+    eval "$2=$RPD"
+    eval "$3=$RMP"
+}
+
+##  Check that there is a process with such a PID or mount in use
+##  Syntax: _is_fuser_run FUSE_PID MOUNT_POINT
+##
+_is_fuser_run ()
+{
+    FUP=$1
+    if [ -n "$FUP" ]
+    then
+        ps -p $FUP >/dev/null 2>&1
+        if [ $? -eq 0 ]
+        then
+            _wrn PROCESS WITH PID = $FUP EXISTS
+            return 0
+        fi
+    fi
+
+    MOP=$2
+    _check_dir_mounted $MOP
+    if [ $? -eq 0 ]
+    then
+        _wrn MOUNT to \'$MOP\' STILL EXISTS
+        return 0
+    fi
+
+    return 1
+}
+
+##  Shutdown fuser. Returns 0 if it is success
+##  Syntax: _shutdown_fuser PID MOUNT_POINT
+##  
+_shutdown_fuser ()
+{
+    _err Shutdown FUSER and exit
+        ##  Check if there is still mount
+        ##
+
+    MPO=$2
+    _check_dir_mounted $MPO
+    if [ $? -eq 0 ]
+    then
+        /bin/fusermount -u $MPO
+    fi
+
+    sleep 1
+
+        ##  Check that process is still in the memory
+        ##
+    FPI=$1
+    if [ -n "$FPI" ]
+    then
+        ps -p $FPI >/dev/null 2>&1
+        if [ $? -eq 0 ]
+        then
+            _err Killing FUSER process $FPI mounted on $MPO
+            kill -9 $FPI
+        fi
+    fi
+
+    sleep 3
+
+    if [ -n "$FPI" ]
+    then
+        ps -p $FPI >/dev/null 2>&1
+        if [ $? -eq 0 ]
+        then
+            _err Failed to shutdown FUSER process $FPI mounted on $MPO
+            return 1
+        fi
+    fi
+
+    _check_dir_mounted $MPO
+    if [ $? -eq 0 ]
+    then
+        _err Failed to shutdown FUSER process $FPI mounted on $MPO
+        return 1
+    fi
+
+    _err FUSER process $FPI was shut down
+
+    return 0
+}
+
diff --git a/test/fuse/remote_fuser_test.sh b/test/fuse/remote_fuser_test.sh
new file mode 100755
index 0000000..21af667
--- /dev/null
+++ b/test/fuse/remote_fuser_test.sh
@@ -0,0 +1,516 @@
+#!/bin/bash
+
+ulimit -c unlimited
+
+#####################################################################
+## Lyrics:
+##
+## That script has three parameters:
+## 
+##      config_name : it will try to find configuration file
+##                    cfg/config_name.cfg ( optional )
+##                    default config name is 'standard'
+##     time_minutes : run time of script in minutes ( optional )
+##                    default time is 180 minutes
+##    bin_directory : place where binary files like remote-fuser
+##                    etc are located ( mandatory )
+##
+#####################################################################
+
+##  Where we are, who we are?
+##
+SCR_DIR=`dirname $0`
+SCR_DIR=`cd $SCR_DIR; pwd`
+
+SCR_NAME=`basename $0`
+SCR_SNAME=`basename $0 .sh`
+
+##  Loading common things to live
+##
+CMN_SCR="$SCR_DIR/remote_fuser_common.sh"
+if [ ! -f "$CMN_SCR" ]
+then
+    echo "ERROR: Can not stat script '$CMN_SCR' ... exiting"
+    exit 1
+fi
+
+. $CMN_SCR
+
+#####################################################################
+##
+## Simple setup : directory
+##
+## TEST_DIR ---/ USER ---/ HOST ---/ PID ---/ cache_dir /
+##                 |-/ logs           |-/ mount_point /
+##                 |-/ bin            |-/ tmp_dir /
+##                 |-/ depot          |-/ status_file
+##
+## depot - directory with test binaries, just a history
+## bin - test binaries in work
+## status_file - says a lot ... but heart-bot
+##
+#####################################################################
+
+##  Config file
+##
+CFG_DIR=$SCR_DIR/cfg
+if [ ! -d "$CFG_DIR" ]
+then
+    _err_exit "Can not stat directory '$CFG_DIR'"
+fi
+
+####
+##  Here the usage and Arguments processing
+#
+CFG_NAME_DEF="standard"
+CFG_NAME=$CFG_NAME_DEF
+
+RUN_TIME_DEF=180
+RUN_TIME=$RUN_TIME_DEF
+
+BIN_DIR=""
+
+usage ( )
+{
+    cat >&2 <<EOF
+
+This script will test remote_fuser utility. 
+
+Syntax is :
+
+    $SCR_NAME [ config_name ] [ run_time ] binary_directory
+
+Where :
+
+         config_name - name of config to use. 
+                       String. Optional. Default "$CFG_NAME_DEF"
+            run_time - time to run script.
+                       Integer. Optional. Default "$RUN_TIME_DEF"
+    binary_directory - directory which contains executables, like
+                       remote-fuser, remote-fuser-reader, etc
+
+EOF
+}
+
+_qualify ()
+{
+    VAL=$1
+
+    if [ -z "$VAL" ]
+    then
+        _err_exit "qualify(): missed parameter"
+    fi
+
+##  Simple, if it is number, it is time, overwise it is config name
+##
+    if [[ $VAL != *[!0-9]* ]]
+    then
+        RUN_TIME=$VAL
+    else
+        CFG_NAME=$VAL
+    fi
+}
+
+case $# in
+    3)
+        _qualify $1
+        _qualify $2
+        BIN_DIR=$3
+        ;;
+    2)
+        _qualify $1
+        BIN_DIR=$2
+        ;;
+    1)
+        BIN_DIR=$1
+        ;;
+    *)
+        usage
+        _err_exit Invalid parameters
+        ;;
+esac
+
+##  Checking arguments
+##
+CFG_FILE=$CFG_DIR/${CFG_NAME}.cfg
+if [ ! -f "$CFG_FILE" ]
+then
+    _err_exit "Can not stat config file with name '$CFG_NAME'"
+fi
+
+##  Checking RUN_TIME ... it should not be less than 3 minutes
+##
+if [ $RUN_TIME -le 3 ]
+then
+    _err_exit "Run time parameter should be greater than 3 minutes"
+fi
+
+##  Checking BIN_DIR and binaries
+##
+if [ ! -d "$BIN_DIR" ]
+then
+    _err_exit "Can not stat BIN_DIR directory '$BIN_DIR'"
+fi
+
+BIN_DIR=$BIN_DIR/../bin
+if [ ! -d "$BIN_DIR" ]
+then
+    _err_exit "Can not stat BIN_DIR directory '$BIN_DIR'"
+fi
+BIN_DIR=`cd $BIN_DIR; pwd`
+
+TESTBIN_DIR=$BIN_DIR/../test-bin
+if [ ! -d "$TESTBIN_DIR" ]
+then
+    _err_exit "Can not stat TESTBIN_DIR directory '$TESTBIN_DIR'"
+fi
+TESTBIN_DIR=`cd $TESTBIN_DIR; pwd`
+
+####
+##  Loading fonfig file
+#
+. $CFG_FILE
+if [ $? -ne 0 ]
+then
+    _err_exit "Can not load config file '$CFG_NAME'"
+fi
+
+####
+##  Checking config file data and prepareing environment
+#
+if [ -z "$TEST_DIR" ]
+then
+    _err_exit "Config does not have definition for variable TEST_DIR"
+fi
+
+if [ ! -d "$TEST_DIR" ]
+then
+    _err_exit "Can not stat directory '$TEST_DIR'"
+fi
+
+###
+### Prefixes U_(ser), H_(ost), P_(rocess), F_(inal) - is what we use
+###
+
+_assign_create_dir $TEST_DIR/$DAS_USER U_TEST_DIR
+_assign_create_dir $U_TEST_DIR/$DAS_HOST H_TEST_DIR
+_assign_create_dir $H_TEST_DIR/$DAS_PID P_TEST_DIR
+
+###
+## There are logs, bin and depot on user level of test direcotry
+#
+_assign_create_dir $U_TEST_DIR/bin   F_BIN_DIR
+_assign_create_dir $U_TEST_DIR/depot F_DEPOT_DIR
+_assign_create_dir $U_TEST_DIR/log   F_LOG_DIR
+
+###
+## There are cache, mount and temp on process level of test direcotry
+#
+_assign_create_dir $P_TEST_DIR/cache F_CACHE_DIR
+_assign_create_dir $P_TEST_DIR/mount F_MOUNT_DIR
+_assign_create_dir $P_TEST_DIR/temp  F_TEMP_DIR
+
+F_STATUS_FILE=$P_TEST_DIR/status.file
+
+##  Checking mounts and old logs are moved to outside script
+##
+
+##  Here we are logging and execing
+##
+F_LOG_FILE=$F_LOG_DIR/${SCR_SNAME}.log.${DAS_CTX}.${DAS_TSTAMP}
+echo Log file: $F_LOG_FILE
+
+exec >$F_LOG_FILE 2>&1
+
+## One more time for log file
+##
+_print_env $@
+
+## Cleaning old data
+##
+_bump
+_msg Cleaning old data
+
+CLN_CMD="$SCR_DIR/remote_fuser_clean.sh"
+if [ -f "$CLN_CMD" ]
+then
+    nohup $CLN_CMD $CFG_NAME &
+fi
+
+## Here we are copying binaries
+##
+_copy_assign_app ()
+{
+    if [ $# -ne 3 ]
+    then
+        _err_exit "_copy_assign_app(): requires two arguments"
+    fi
+
+    SRC=$1/$2
+    if [ ! -x "$SRC" ]
+    then
+        _err_exit "_copy_assign_app(): can not stat file '$SRC'"
+    fi
+
+    LNK=$F_BIN_DIR/$2
+
+    eval cmp $SRC $LNK
+    if [ $? -ne 0 ]
+    then
+        DST=$F_DEPOT_DIR/${2}.${DAS_TSTAMP}
+        _exec cp -p $SRC $DST
+        _exec rm -f $LNK
+        _exec ln -s $DST $LNK
+    fi
+
+    eval "$3=$LNK"
+}
+
+_copy_assign_app $BIN_DIR remote-fuser REMOTE_FUSER_APP
+_copy_assign_app $TESTBIN_DIR remote-fuser-test REMOTE_FUSER_TEST_APP
+
+###
+##  Here we are checking and pre-processing XML file
+#
+if [ -z "$XML_URL" ]
+then
+    _err_exit "Config does not have definition for variable XML_URL"
+fi
+
+eval HEAD "$XML_URL" >/dev/null
+if [ $? -ne 0 ]
+then
+    _err_exit "Can not stat XML file from '$XML_URL'"
+fi
+
+F_FUSE_XML=$F_TEMP_DIR/FUSE.xml.${DAS_CTX}.${DAS_TSTAMP}
+eval GET "$XML_URL" >$F_FUSE_XML
+if [ $? -ne 0 ]
+then
+    _err_exit "Can not download XML file from '$XML_URL'"
+fi
+
+###
+##  Here we are starting FUSER
+#
+_msg Starting Fuse
+
+FUSER_LOG=$F_LOG_DIR/remote-fuser.log.${DAS_CTX}.${DAS_TSTAMP}
+FUSER_CMD="$REMOTE_FUSER_APP -d -x $XML_URL -m $F_MOUNT_DIR -e $F_CACHE_DIR -L 5 -B 4 -o kernel_cache"
+
+_msg "## $FUSER_CMD"
+$FUSER_CMD >$FUSER_LOG 2>&1 &
+FUSER_PID=$!
+
+## Because!
+
+_store_fuser_params $F_STATUS_FILE $FUSER_PID $F_MOUNT_DIR
+
+_clear_data ()
+{
+    _msg "Removing test data"
+
+    _exec_plain rm -rf $P_TEST_DIR
+    if [ $? -ne 0 ]
+    then
+        _err "Can not remove test data"
+
+        sleep 2
+
+        _msg "Removing test data attempt 2"
+
+        _exec_plain rm -rf $P_TEST_DIR
+        if [ $? -ne 0 ]
+        then
+            _err "Can not remove test data"
+            return 1
+        fi
+    fi
+
+    _msg "Test data removed"
+}
+
+_stop_fuser ()
+{
+    _msg "Stopping Fuse"
+    MCD="$REMOTE_FUSER_APP -u -m $F_MOUNT_DIR"
+    _msg "## $MCD"
+    $MCD
+
+    sleep 100
+
+    _is_fuser_run $FUSER_PID $F_MOUNT_DIR
+    if [ $? -eq 0 ]
+    then
+        _shutdown_fuser $FUSER_PID $F_MOUNT_DIR
+    fi
+
+    _clear_data
+}
+
+_test_failed ()
+{
+    _err "TEST FAILED: $@"
+
+    _stop_fuser
+
+    _err_exit 
+}
+
+##  Here we should wait a some time and check that mount is success
+##  The mount is success if there is record in mtab and some files
+##  appeared in mount directory
+##
+for i in All the way home from Baltimore "(C)" Talking Heads THE_END
+do
+    case $i in
+        THE_END)
+            _err Can not start fuser
+            _shutdown_fuser $FUSER_PID $F_MOUNT_DIR
+            ;;
+        *)
+            echo -n "$i "
+            sleep 1
+            _check_dir_mounted $F_MOUNT_DIR
+            if [ $? -eq 0 ]
+            then
+                echo ...
+                break
+            fi
+            ;;
+    esac
+done
+
+#####################################################################
+#####################################################################
+#####
+### First test is checking that file downloads full and correctly
+#
+
+_bump
+_msg TEST 1: Downloading single file
+
+## First we are trying to choose not big file to download
+##
+LINF=` grep "<File" $F_FUSE_XML | sed "s#name=##1" | sed "s#size=##1" | sed "s#path=##1" | sed "s#\"##g" | awk ' { print $2 " " $3 " " $4 } ' | sort -n -k 2 | awk ' BEGIN { SZ=0; NM=""; UR="" } { if ( SZ < 100000 ) { if ( SZ < int ( $2 ) ) { SZ = int ( $2 ); NM = $1; UR = $3 } } } END { print NM " " SZ " "  UR } ' `
+if [ -z "$LINF" ]
+then
+    _test_failed "Invalid XML file '$F_FUSE_XML'"
+fi
+
+REMOTE_URL=`echo $LINF | awk ' { print $3 } ' `
+LOCAL_FILE=`echo $LINF | awk ' { print $1 } ' `
+TEMP_FILE=$F_TEMP_DIR/${LOCAL_FILE}.${DAS_CTX}.${DAS_TSTAMP}
+
+## Downloading copy of proxied file
+##
+_msg "Downloading file '$REMOTE_URL'"
+eval GET "$REMOTE_URL" >$TEMP_FILE
+if [ $? -ne 0 ]
+then
+    _test_failed "Can not load remote file '$REMOTE_URL'"
+fi
+
+## Compareing downloaded file with file proxied by FUSE
+##
+_msg "Compareing downloaded file '$REMOTE_URL' with $F_MOUNT_DIR/$LOCAL_FILE"
+eval cmp $TEMP_FILE $F_MOUNT_DIR/$LOCAL_FILE
+if [ $? -ne 0 ]
+then
+    _test_failed "Invalid file content '$F_MOUNT_DIR/$LOCAL_FILE'"
+fi
+
+## Checking CACHE directory, cuz here should be only one file,
+## without ".cache" extention
+##
+RCA_DIR=$F_CACHE_DIR/.cache
+FILES=(`ls $RCA_DIR`)
+if [ ${#FILES[@]} -ne 1 ]
+then
+    ls $RCA_DIR >&2
+    _test_failed "Invalid content of cache directory '$RCA_DIR'"
+fi
+
+if [[ "${FILES[0]}" == *.cache ]]
+then
+    ls $RCA_DIR >&2
+    _test_failed "Partially downloaded file at '$RCA_DIR'"
+fi
+
+_msg TEST 1: Passed
+
+#####################################################################
+#####################################################################
+#####
+### Second multithread access to singe file
+#
+
+_bump
+_msg TEST 2: Multithread acces to single file
+
+R_TM=2
+N_THR=30
+
+## First we should choose file big enough for a test ...
+## couple hundred megs is OK
+##
+
+for i in `ls $F_MOUNT_DIR`
+do
+    if [ `stat --print="%s" $F_MOUNT_DIR/$i` -gt 200000000 ]
+    then
+        FILE_NAME=$i
+        break
+    fi
+done
+
+if [ -z "$FILE_NAME" ]
+then
+    _test_failed "Can not find file with suitable size"
+fi
+
+TEST_CMD="$REMOTE_FUSER_TEST_APP -t $N_THR -r $R_TM $F_MOUNT_DIR/$FILE_NAME"
+_msg "## $TEST_CMD"
+eval "$TEST_CMD"
+if [ $? -ne 0 ]
+then
+    _test_failed "Single file test failed"
+fi
+
+_msg TEST 2: Passed
+
+#####################################################################
+#####################################################################
+#####
+### Second multithread access to set of files
+#
+
+_bump
+_msg TEST 3: Multithread acces to set of files
+
+## First we should create list of files with limitation
+##
+
+LIST_FILE=$F_TEMP_DIR/listfile.${DAS_CTX}.$DAS_TSTAMP
+for i in `ls $F_MOUNT_DIR`
+do
+    echo $F_MOUNT_DIR/$i >>$LIST_FILE
+done
+
+TEST_CMD="$REMOTE_FUSER_TEST_APP -t $N_THR -r $RUN_TIME -l $LIST_FILE"
+_msg "## $TEST_CMD"
+eval "$TEST_CMD"
+if [ $? -ne 0 ]
+then
+    _test_failed "Multiply files test failed"
+fi
+
+
+_msg TEST 3: Passed
+
+#####
+### Here we are stopping fuser
+#
+_stop_fuser
+
+_msg TEST PASSED!
diff --git a/test/fuse/utils.c b/test/fuse/utils.c
new file mode 100644
index 0000000..e1f2873
--- /dev/null
+++ b/test/fuse/utils.c
@@ -0,0 +1,867 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kproc/lock.h>
+#include <kproc/thread.h>
+
+#include <atomic32.h>
+
+#include "utils.h"
+
+#include <sysalloc.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <signal.h>
+
+ /*))))
+   |||| XStats implementation
+   ((((*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*))
+ || XTmXXXX stuff
+((*/
+
+/*)))
+ ///  Mesuring time in ... microzecoidz from :
+ \\\     # date -d @1380000000
+ ///     Tue Sep 24 01:20:00 EDT 2013
+(((*/
+const uint64_t _DateFrom = 1380000000;
+const uint64_t _DateCoeff = 1000000;
+
+uint64_t CC
+XTmNow ()
+{
+    struct timeval TV;
+    uint64_t RetVal;
+
+    gettimeofday ( & TV, NULL );
+    RetVal = ( ( TV.tv_sec - _DateFrom ) * _DateCoeff ) + TV.tv_usec;
+
+
+    return RetVal;
+}   /* XTmNow () */
+
+/*))
+ || XStats struct
+((*/
+struct XStats {
+    struct KLock * mutabor;
+
+    uint64_t start_time;    /* Time of starting stat */
+
+    uint64_t qty;           /* all Reads Qty */
+    uint64_t err_qty;       /* bad Reads Qty */
+    uint64_t time;          /* Time of Reads cumulative */
+    uint64_t size;          /* all Reads Qty */
+};
+
+static rc_t CC _XStatsReset_NoLock ( const struct XStats * self );
+
+rc_t CC
+XStatsDispose ( const struct XStats * self )
+{
+    struct XStats * Stats = ( struct XStats * ) self;
+
+    if ( Stats != NULL ) {
+        if ( Stats -> mutabor != NULL ) {
+            KLockRelease ( Stats -> mutabor );
+            Stats -> mutabor = NULL;
+        }
+
+        _XStatsReset_NoLock ( self );
+
+        free ( Stats );
+    }
+
+    return 0;
+}   /* XStatDispose () */
+
+rc_t CC
+XStatsMake ( const struct XStats ** Stats )
+{
+    rc_t RCt;
+    struct XStats * Ret;
+
+    RCt = 0;
+    Ret = NULL;
+
+    if ( Stats != NULL ) {
+        * Stats = NULL;
+    }
+
+    Ret = calloc ( 1, sizeof ( struct XStats ) );
+    if ( Ret == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+    }
+    else {
+        RCt = KLockMake ( & ( Ret -> mutabor ) );
+        if ( RCt == 0 ) {
+            RCt = XStatsReset ( Ret );
+            if ( RCt == 0 ) {
+                * Stats = ( const struct XStats * ) Ret;
+            }
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * Stats = NULL;
+
+        if ( Ret != NULL ) {
+            XStatsDispose ( Ret );
+        }
+    }
+
+    return RCt;
+}   /* XStatMake () */
+
+static
+rc_t CC
+_XStatsReset_NoLock ( const struct XStats * self )
+{
+    struct XStats * Stats = ( struct XStats * ) self;
+
+    if ( Stats != NULL ) {
+        Stats -> start_time = XTmNow ();
+
+        Stats -> qty = 0;
+        Stats -> err_qty = 0;
+        Stats -> time = 0;
+        Stats -> size = 0;
+    }
+
+    return 0;
+}   /* _XStatsReset_NoLock () */
+
+rc_t CC
+XStatsReset ( const struct XStats * self )
+{
+    rc_t RCt = 0;
+
+    if ( self != NULL ) {
+        RCt = KLockAcquire ( self -> mutabor );
+        if ( RCt == 0 ) {
+            RCt = _XStatsReset_NoLock ( self );
+            KLockUnlock ( self -> mutabor );
+        }
+    }
+
+    return RCt;
+}   /* XStatReset () */
+
+rc_t CC
+XStatsGood ( const struct XStats * self, uint64_t Size, uint64_t Time )
+{
+    rc_t RCt;
+    struct XStats * Stats;
+
+    RCt = 0;
+    Stats = ( struct XStats * ) self;
+
+    if ( Stats != NULL ) {
+        RCt = KLockAcquire ( Stats -> mutabor );
+        if ( RCt == 0 ) {
+            Stats -> qty ++;
+            Stats -> time += Time;
+            Stats -> size += Size;
+
+            KLockUnlock ( Stats -> mutabor );
+        }
+    }
+
+    return RCt;
+}   /* XStatDispose () */
+
+rc_t CC
+XStatsBad ( const struct XStats * self )
+{
+    rc_t RCt;
+    struct XStats * Stats;
+
+    RCt = 0;
+    Stats = ( struct XStats * ) self;
+
+    if ( Stats != NULL ) {
+        RCt = KLockAcquire ( Stats -> mutabor );
+        if ( RCt == 0 ) {
+            Stats -> err_qty ++;
+
+            KLockUnlock ( Stats -> mutabor );
+        }
+    }
+
+    return RCt;
+}   /* XStatDispose () */
+
+rc_t CC
+XStatsReport ( const struct XStats * self )
+{
+    rc_t RCt;
+    uint64_t Per;
+    uint64_t Tim;
+
+    RCt = 0;
+    Per = 0;
+    Tim = 0;
+
+    if ( self != NULL ) {
+        RCt = KLockAcquire ( self -> mutabor );
+        if ( RCt == 0 ) {
+            printf ( "<<== Read Stats\n" );
+            printf ( "  READ QTY : %lu\n", self -> qty );
+            Per = self -> qty == 0 ? 0 : ( ( int ) ( ( ( float ) self -> err_qty * 100.0f ) / ( float ) ( self -> qty ) ) );
+            printf ( "    ERRORS : %lu [%lu%%]\n", self -> err_qty, Per );
+            Tim = ( XTmNow () - self -> start_time ) / 1000000;
+            printf ( "      TIME : %lu sec\n", Tim );
+            printf ( "  ACC TIME : %lu sec\n", self -> time / 1000000 );
+            printf ( " READ SIZE : %lu but\n", self -> size );
+
+            Per = self -> time == 0 ? 0 : ( self -> size / Tim ) ;
+            printf ( " THOUGHOUT : %lu bit per sec\n", Per );
+
+            KLockUnlock ( self -> mutabor );
+        }
+    }
+
+    return RCt;
+}   /* XStatDispose () */
+
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+struct XTasker;
+
+struct XTask {
+    const struct XTasker * tasker;
+
+    struct KThread * thread;
+
+    size_t task_no;
+
+    size_t buffer_size;
+    char * buffer;
+};
+
+struct XTasker {
+    size_t task_qty;
+    const struct XTask ** tasks;
+
+    atomic32_t iteration;
+    atomic32_t is_run;
+    atomic32_t is_done;
+
+    uint64_t stop_at;
+
+    const struct XStats * stat;
+
+    void * job_4_task_data;
+    Job4Task job_4_task;
+};
+
+rc_t CC _TaskStop ( const struct XTask * self );
+
+static
+rc_t CC
+_TaskDispose ( const struct XTask * self )
+{
+    struct XTask * Task = ( struct XTask * ) self;
+
+    if ( Task != NULL ) {
+        if ( Task -> thread != NULL ) {
+            _TaskStop ( Task );
+        }
+
+        Task -> task_no = 0;
+
+        Task -> buffer_size = 0;
+        if ( Task -> buffer != NULL ) {
+            free ( Task -> buffer );
+            Task -> buffer = NULL;
+        }
+
+        Task -> tasker = NULL;
+    }
+
+    return 0;
+}   /* _TaskDispose () */
+
+static
+rc_t CC
+_TaskMake (
+        const struct XTask ** Task,
+        const struct XTasker * Tasker,
+        size_t TaskNo
+)
+{
+    rc_t RCt;
+    struct XTask * Ret;
+
+    RCt = 0;
+    Ret = NULL;
+
+    if ( * Task != NULL ) {
+        * Task = NULL;
+    }
+
+    if ( Tasker == NULL || Task == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    Ret = calloc ( 1, sizeof ( struct XTask ) );
+    if ( Ret == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+    }
+    else {
+        Ret -> tasker = Tasker;
+        Ret -> task_no = TaskNo;
+
+        * Task = ( const struct XTask * ) Ret;
+    }
+
+    if ( RCt != 0 ) {
+        * Task = NULL;
+
+        if ( Ret != NULL ) {
+            _TaskDispose ( Ret );
+        }
+    }
+
+    return RCt;
+}   /* _TaskMake () */
+
+static
+rc_t CC
+_TaskRealloc ( const struct XTask * self, size_t BufferSize )
+{
+    struct XTask * Task = ( struct XTask * ) self;
+
+    if ( Task -> buffer_size < BufferSize ) {
+        if ( Task -> buffer != 0 ) {
+            free ( Task -> buffer );
+
+            Task -> buffer = NULL;
+            Task -> buffer_size = 0;
+        }
+
+        Task -> buffer_size = ( ( BufferSize / 1024 ) + 1 ) * 1024;
+        Task -> buffer = calloc (
+                                Task -> buffer_size,
+                                sizeof ( char )
+                                );
+        if ( Task -> buffer == NULL ) {
+            return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+        }
+    }
+
+    return 0;
+}   /* _TaskRealloc () */
+
+
+static
+rc_t CC
+_TaskRead ( const struct XTask * self )
+{
+    rc_t RCt;
+    const char * Name;
+    uint64_t Offset;
+    size_t Size, NumRead;
+    struct KDirectory * Directory;
+    const struct KFile * File;
+    uint64_t Time;
+
+    RCt = 0;
+    Name = NULL;
+    Offset = 0;
+    Size = NumRead = 0;
+    Directory = NULL;
+    File = NULL;
+    Time = 0;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( self -> tasker == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    RCt = XTaskerNewJob ( self -> tasker, & Name, & Offset, & Size );
+    if ( RCt == 0 ) {
+        if ( Name != NULL ) {
+            RCt = _TaskRealloc ( self, Size );
+            if ( RCt == 0 ) {
+                RCt = KDirectoryNativeDir ( & Directory );
+                if ( RCt == 0 ) {
+                    RCt = KDirectoryOpenFileRead (
+                                                Directory,
+                                                & File,
+                                                Name
+                                                );
+                    if ( RCt == 0 ) {
+                        Time = XTmNow ();
+
+                        RCt = KFileReadAll (
+                                            File,
+                                            Offset,
+                                            self -> buffer,
+                                            Size,
+                                            & NumRead
+                                            );
+                        if ( RCt == 0 ) {
+                            XStatsGood (
+                                        self -> tasker -> stat,
+                                        NumRead,
+                                        ( XTmNow () - Time )
+                                        );
+                        }
+                        else {
+                            XStatsBad ( self -> tasker -> stat );
+                        }
+
+                        KFileRelease ( File );
+                    }
+                    KDirectoryRelease ( Directory );
+                }
+            }
+        }
+    }
+
+    return RCt;
+}   /* _TaskRead () */
+
+static
+bool CC
+_TaskDone ( const struct XTask * self )
+{
+    if ( self != NULL ) {
+        return XTaskerIsDoneSet ( self -> tasker );
+    }
+
+    return true;
+}   /* _TaskDone () */
+
+static
+rc_t CC
+_TaskThreadProc ( const struct KThread * Thread, void * Data )
+{
+    rc_t RCt;
+    struct XTask * Task;
+
+    RCt = 0;
+    Task = ( struct XTask * ) Data;
+
+    if ( Thread == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( Data == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    while ( true ) {
+        /* We are ignoring the return code, cuz there is statistic */
+        /* RCt = */
+        _TaskRead ( Task );
+
+        if ( _TaskDone ( Task ) ) {
+            break;
+        }
+    }
+
+    atomic32_dec ( ( atomic32_t * ) & ( Task -> tasker -> is_run ) );
+
+    return RCt;
+}   /* _TaskThreadProc () */
+
+static
+rc_t CC
+_TaskRun ( const struct XTask * self )
+{
+    struct XTask * Task = ( struct XTask * ) self;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( self -> tasker == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    if ( self -> thread != NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    atomic32_read_and_add (
+                ( atomic32_t * ) & ( Task -> tasker -> is_run ), 1
+                );
+
+    return KThreadMake ( & ( Task -> thread ), _TaskThreadProc, Task );
+}   /* _TaskRun () */
+
+rc_t CC
+_TaskStop ( const struct XTask * self )
+{
+    rc_t RCt;
+    struct XTask * Task;
+
+    RCt = 0;
+    Task = ( struct XTask * ) self;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    KThreadCancel ( Task -> thread );
+    KThreadWait ( Task -> thread, NULL );
+    KThreadRelease ( Task -> thread );
+
+    Task -> thread = NULL;
+
+    return RCt;
+}   /* TaskStop () */
+
+rc_t CC
+XTaskerDispose ( const struct XTasker * self )
+{
+    struct XTasker * Tasker;
+    size_t llp;
+
+    Tasker = ( struct XTasker * ) self;
+    llp = 0;
+
+    if ( Tasker != NULL ) {
+        if ( Tasker -> stat != NULL ) {
+            XStatsDispose ( Tasker -> stat );
+            Tasker -> stat = NULL;
+        }
+
+        if ( Tasker -> tasks != NULL ) {
+            for ( llp = 0; llp < Tasker -> task_qty; llp ++ ) {
+                if ( Tasker -> tasks [ llp ] != NULL ) {
+                    _TaskDispose ( Tasker -> tasks [ llp ] );
+                    Tasker -> tasks [ llp ] = NULL;
+                }
+            }
+        }
+        Tasker -> tasks = NULL;
+        Tasker -> task_qty = 0;
+
+        atomic32_set ( & ( Tasker -> iteration ), 0 );
+        atomic32_set ( & ( Tasker -> is_run ), 0 );
+        atomic32_set ( & ( Tasker -> is_done ), 0 );
+
+        Tasker -> stop_at = 0;
+
+        Tasker -> job_4_task_data = NULL;
+        Tasker -> job_4_task = NULL;
+
+        free ( Tasker );
+    }
+
+    return 0;
+}   /* XTaskerDispose () */
+
+/* JOJOBA here will be variable part */
+rc_t CC
+XTaskerMake (
+            const struct XTasker ** Tasker,
+            size_t NumThreads,
+            void * Data,
+            Job4Task Jobber
+)
+{
+    rc_t RCt;
+    struct XTasker * Ret;
+    size_t llp;
+
+    RCt = 0;
+    Ret = NULL;
+    llp = 0;
+
+    if ( Tasker != NULL ) {
+        * Tasker = NULL;
+    }
+
+    if ( Tasker == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( Jobber == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( NumThreads == 0 ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    Ret = calloc ( 1, sizeof ( struct XTasker ) );
+    if ( Ret == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+    }
+    else {
+        Ret -> tasks = calloc ( NumThreads, sizeof ( struct XTask * ) );
+        if ( Ret -> tasks == NULL ) {
+            RCt = RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcExhausted );
+        }
+        else {
+            if ( RCt == 0 ) {
+                Ret -> task_qty = NumThreads;
+                for ( llp = 0; llp < NumThreads; llp ++ ) {
+                    RCt = _TaskMake ( Ret -> tasks + llp, Ret, llp );
+                    if ( RCt != 0 ) {
+                        break;
+                    }
+                }
+                if ( RCt == 0 ) {
+                    RCt = XStatsMake ( & ( Ret -> stat ) );
+                    if ( RCt == 0 ) { 
+                        atomic32_set ( & ( Ret -> iteration ), 0 );
+                        atomic32_set ( & ( Ret -> is_run ), 0 );
+                        atomic32_set ( & ( Ret -> is_done ), 0 );
+                        Ret -> stop_at = 0;
+                        Ret -> job_4_task_data = Data;
+                        Ret -> job_4_task = Jobber;
+
+                        * Tasker = Ret;
+                    }
+                }
+            }
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * Tasker = NULL;
+
+        if ( Ret != NULL ) {
+            XTaskerDispose ( Ret );
+        }
+    }
+
+    return RCt;
+}   /* XTaskerMake () */
+
+rc_t CC
+XTaskerRun ( const struct XTasker * self, size_t Seconds )
+{
+    rc_t RCt;
+    size_t llp;
+
+    RCt = 0;
+    llp = 0;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    if ( self -> tasks == NULL || self -> task_qty == 0 ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcInvalid );
+    }
+
+    ( ( struct XTasker * ) self ) -> stop_at =
+                                    XTmNow () + ( Seconds * 1000000 );
+
+    for ( llp = 0; llp < self -> task_qty; llp ++ ) {
+        if ( self -> tasks [ llp ] != NULL ) {
+            RCt = _TaskRun ( self -> tasks [ llp ] );
+        }
+
+        if ( RCt != 0 ) {
+            break;
+        }
+    }
+
+    RCt = XTaskerWait ( self );
+
+    return RCt;
+}   /* XTaskerRun () */
+
+bool CC
+XTaskerIsRunning ( const struct XTasker * self )
+{
+    if ( self != NULL ) {
+        return atomic32_read ( & ( self -> is_run ) ) != 0;
+    }
+
+    return false;
+}   /* XTaskerIsRunning () */
+
+rc_t CC
+XTaskerNewJob (
+            const struct XTasker * self,
+            const char ** FileName,
+            uint64_t * Offset,
+            size_t * Size
+)
+{
+    int Iteration = 0;
+
+    if ( FileName != NULL ) {
+        * FileName = NULL;
+    }
+
+    if ( Offset != NULL ) {
+        * Offset = 0;
+    }
+
+    if ( Size != NULL ) {
+        * Size = 0;
+    }
+
+    if ( self == NULL || FileName == NULL || Offset == NULL || Size == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    Iteration = atomic32_read_and_add (
+                            ( atomic32_t * ) & ( self -> iteration ),
+                            1
+                            );
+
+    if ( XTaskerIsDoneSet ( self ) ) {
+        return 0;
+    }
+
+    return self -> job_4_task (
+                            self -> job_4_task_data,
+                            Iteration,
+                            FileName,
+                            Offset,
+                            Size
+                            );
+}   /* XTaskerNewJob () */
+
+rc_t CC
+XTaskerSetDone ( const struct XTasker * self )
+{
+    if ( self == NULL ) {
+        return RC ( rcExe, rcNoTarg, rcProcessing, rcParam, rcNull );
+    }
+
+    atomic32_set ( ( atomic32_t * ) & ( self -> is_done ), 1 );
+
+    return 0;
+}   /* XTaskerSetDone () */
+
+bool CC
+XTaskerIsDoneSet ( const struct XTasker * self )
+{
+    if ( self != NULL ) {
+        return atomic32_read ( & ( self -> is_done ) ) != 0;
+    }
+
+    return false;
+}   /* XTaskerIsDoneSet () */
+
+bool CC
+XTaskerIsDone ( const struct XTasker * self )
+{
+    return XTaskerIsDoneSet ( self ) && ! XTaskerIsRunning ( self );
+}   /* XTaskerIsDone () */
+
+static bool _sSigIntHandled = false;
+
+void CC
+XTaskerSigIntHandler ( int SigNo )
+{
+    if ( SigNo == SIGINT ) {
+        printf ( "SIGINT handled, ignored, but we will exit\n" );
+
+        _sSigIntHandled = true;
+    }
+}   /* XTaskerSigIntHandler () */
+
+rc_t CC
+XTaskerWait ( const struct XTasker * self )
+{
+    uint64_t Next = 0; 
+    uint64_t Now = 0; 
+    size_t llp = 0;
+    uint64_t Pardon = 600 * 1000000;
+    struct timespec t_spec;
+    struct timespec t_rem;
+
+    t_spec . tv_sec = 0;
+    t_spec . tv_nsec = 100000;
+
+    t_rem . tv_sec = 0;
+    t_rem . tv_nsec = 0;
+
+    if ( XTaskerIsRunning ( self ) ) {
+        Next = XTmNow () + Pardon;
+
+        while ( true ) {
+            nanosleep ( & t_spec, & t_rem );
+
+            if ( _sSigIntHandled ) {
+                XTaskerSetDone ( self );
+            }
+
+            Now = XTmNow ();
+
+            if ( self -> stop_at < Now ) {
+                if ( ! XTaskerIsDoneSet ( self ) ) {
+                    XTaskerSetDone ( self );
+                }
+            }
+
+            if ( XTaskerIsDone ( self ) ) {
+                break;
+            }
+
+            if ( Next < Now ) {
+                Next += Pardon;
+
+                XStatsReport ( self -> stat );
+            }
+        }
+
+        XStatsReport ( self -> stat );
+
+        for ( llp = 0; llp < self -> task_qty; llp ++ ) {
+            if ( self -> tasks [ llp ] != NULL ) {
+                _TaskStop ( self -> tasks [ llp ] );
+            }
+        }
+    }
+
+    return 0;
+}   /* XTaskerWait () */
diff --git a/test/fuse/utils.h b/test/fuse/utils.h
new file mode 100644
index 0000000..dd477a0
--- /dev/null
+++ b/test/fuse/utils.h
@@ -0,0 +1,120 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _utils_h_
+#define _utils_h_
+
+#include <xfs/xfs-defs.h>
+
+#ifdef __cplusplus 
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/**
+ ** Lyrics:
+ ** That file contains stupid things
+ **
+ **/
+
+/*) Fowards, and others
+ (*/
+
+/*) Something about time im MicroSeconds
+ (*/
+uint64_t CC XTmNow ( );
+
+/*) Statistics module
+ (*/
+struct XStats;
+
+rc_t CC XStatsMake ( const struct XStats ** Stats );
+rc_t CC XStatsDispose ( const struct XStats * self );
+
+rc_t CC XStatsReset ( const struct XStats * self );
+
+rc_t CC XStatsGood (
+                    const struct XStats * self,
+                    uint64_t Size,
+                    uint64_t Time
+                    );
+
+rc_t CC XStatsBad ( const struct XStats * self );
+
+rc_t CC XStatsReport ( const struct XStats * self ); 
+
+/*) Tasks
+ (*/
+struct XTasker;
+
+    /*  Supposed to return NULL Name and 0 RC if there are no
+     *  tasks anymore
+     */
+typedef rc_t ( CC * Job4Task ) (
+                            void * Data,
+                            int Iteration,
+                            const char ** Name,
+                            uint64_t * Offset,
+                            size_t * Size
+                            );
+
+rc_t CC XTaskerMake (
+                    const struct XTasker ** Tasker,
+                    size_t NumThreads,
+                    void * Data,
+                    Job4Task Jobber
+                    );
+rc_t CC XTaskerDispose ( const struct XTasker * self );
+
+rc_t CC XTaskerRun ( const struct XTasker * self, size_t Seconds );
+bool CC XTaskerIsRunning ( const struct XTasker * self );
+
+    /* We suppose if FileName returned as NULL, there are no new jobs
+     */
+rc_t CC XTaskerNewJob (
+                    const struct XTasker * self,
+                    const char ** FileName,
+                    uint64_t * Offset,
+                    size_t * Size
+                    );
+
+rc_t CC XTaskerSetDone ( const struct XTasker * self );
+bool CC XTaskerIsDoneSet ( const struct XTasker * self );
+bool CC XTaskerIsDone ( const struct XTasker * self );
+
+rc_t CC XTaskerWait ( const struct XTasker * self );
+
+void CC XTaskerSigIntHandler ( int SigNo );
+
+#ifdef __cplusplus 
+}
+#endif /* __cplusplus */
+
+#endif /* _utils_h_ */
diff --git a/test/general-loader/.gitignore b/test/general-loader/.gitignore
new file mode 100644
index 0000000..08ce4e2
--- /dev/null
+++ b/test/general-loader/.gitignore
@@ -0,0 +1,2 @@
+db
+*.gw
diff --git a/test/general-loader/Makefile b/test/general-loader/Makefile
new file mode 100644
index 0000000..7098d66
--- /dev/null
+++ b/test/general-loader/Makefile
@@ -0,0 +1,187 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+	@ rm tmp.kfg
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/general-loader
+
+TEST_TOOLS = \
+    test-general-loader \
+	test-general-writer \
+	test-gw-dumper
+
+ALL_TOOLS = \
+	$(TEST_TOOLS) \
+
+include $(TOP)/build/Makefile.env
+
+$(shell echo "vdb/schema/paths = \"$(VDB_INCDIR)\"" > tmp.kfg)
+VDB_CONFIG = $(shell pwd)
+
+INCDIRS += -I$(TOP)/tools/general-loader
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# test-general-loader
+#
+TEST_GEN_LOAD_SRC = \
+	test-general-loader \
+    testsource
+
+TEST_GEN_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_GEN_LOAD_SRC))
+
+TEST_GEN_LOAD_LIB =   \
+	-sncbi-wvdb-static  \
+    -sload              \
+	-skapp              \
+    -sktst              \
+
+$(TEST_BINDIR)/test-general-loader: $(TEST_GEN_LOAD_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_GEN_LOAD_LIB)
+
+gen_load: test-general-loader
+	$(TEST_BINDIR)/test-general-loader
+
+#-------------------------------------------------------------------------------
+# test-general-writer
+#
+TEST_GEN_WRITE_SRC = \
+	test-general-writer
+
+TEST_GEN_WRITE_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_GEN_WRITE_SRC))
+
+TEST_GEN_WRITE_LIB =   \
+    -L$(LIBDIR) \
+    -sgeneral-writer
+
+
+$(TEST_BINDIR)/test-general-writer: $(TEST_GEN_WRITE_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_GEN_WRITE_LIB)
+
+runtests:$(TEST_TOOLS) #piped-load-tests
+
+piped-load-tests: $(ALL_TOOLS)
+	-$(TEST_BINDIR)/test-general-writer | $(BINDIR)/general-loader -L=info
+	-$(BINDIR)/vdb-dump -T table1 remote_db
+	rm -rf remote_db
+
+#-------------------------------------------------------------------------------
+# test-gw-dumper
+#
+TEST_GW_DUMP_SRC = \
+	test-gw-dumper
+
+TEST_GW_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_GW_DUMP_SRC))
+
+TEST_GW_DUMP_LIB =   \
+	-sgeneral-writer  \
+
+$(TEST_BINDIR)/test-gw-dumper: $(TEST_GW_DUMP_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_GW_DUMP_LIB)
+
+gw_dump: test-gw-dumper
+	$(TEST_BINDIR)/$^
+
+#-------------------------------------------------------------------------------
+# general-loader tool tests
+#
+runtests: setup tool-tests 
+
+setup:
+	@ mkdir -p db
+
+$(TEST_BINDIR)/makeinputs: makeinputs.cpp
+	@# generate numbered input streams for tool tests
+	$(CXX) makeinputs.cpp testsource.cpp -o $(TEST_BINDIR)/makeinputs -I$(INCDIRS) -L$(VDB_LIBDIR) -lncbi-vdb-static
+
+tool-tests: $(TEST_BINDIR)/makeinputs
+	@mkdir -p input && $(TEST_BINDIR)/makeinputs && rm $(TEST_BINDIR)/makeinputs
+	@#    
+	@# basic, unpacked
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 1 0 -I=$(VDB_INCDIR)
+	@#    
+	@# basic, packed
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 1packed 0 -I=$(VDB_INCDIR)
+	@#    
+	@# target db override 
+	@# use 1.gl which specifies the target as actual/1/db, and override that to where the script expects to see the result
+	@cp input/1.gl input/1override.gl && $(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 1override 0 "-I=$(VDB_INCDIR) --target actual/1override/db"
+	@# same with the storthand option
+	@cp input/1.gl input/1override.gl && $(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 1override 0 "-I=$(VDB_INCDIR) -T actual/1override/db"
+	@#    
+	@# error message event, unpacked
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 2 3 "-I=$(VDB_INCDIR) -L=err"
+	@#    
+	@# error message event, packed
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 2packed 3 "-I=$(VDB_INCDIR) -L=err"
+	@#    
+	@# empty default values, unpacked
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 3 0 -I=$(VDB_INCDIR)
+	@#    
+	@# empty default values, packed
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 3packed 0 -I=$(VDB_INCDIR)
+	@#    
+	@# move ahead event, unpacked
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 4 0 -I=$(VDB_INCDIR)
+	@#    
+	@# move ahead event, packed
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 4packed 0 -I=$(VDB_INCDIR)
+	@#    
+	@# integer compression (packed only)
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) vdb-dump $(SRCDIR) 5packed 0 "-L=info -I=$(VDB_INCDIR)"
+	@#    
+	@# software name in the metadata, unpacked   
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) kdbmeta $(SRCDIR) 6 0 "-L=info -I=$(VDB_INCDIR)" SOFTWARE/formatter
+	@#    
+	@# software name in the metadata, packed   
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) kdbmeta $(SRCDIR) 6packed 0 "-L=info -I=$(VDB_INCDIR)" SOFTWARE/formatter
+	@#    
+	@rm -rf input/*.gl actual/*
+
+one-tool: $(TEST_BINDIR)/makeinputs
+	@mkdir -p input && $(TEST_BINDIR)/makeinputs && rm $(TEST_BINDIR)/makeinputs
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) kdbmeta $(SRCDIR) 6 0 "-L=info -I=$(VDB_INCDIR)" SOFTWARE/formatter
+
+
+#-------------------------------------------------------------------------------
+# general-loader tool tests
+#
+slowtests: #piped-dump
+
+piped-dump: $(BINDIR)/pileup-stats test-general-loader
+	#$(BINDIR)/pileup-stats SRR1063272 | $(BINDIR)/general-loader #-L=info
+	$(BINDIR)/pileup-stats SRR1232302 | $(BINDIR)/general-loader -L=info
+
diff --git a/test/general-loader/expected/1.stdout b/test/general-loader/expected/1.stdout
new file mode 100644
index 0000000..cd95218
--- /dev/null
+++ b/test/general-loader/expected/1.stdout
@@ -0,0 +1,75 @@
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first value
+     SPOT_ID: 1
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 2
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 3
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second value
+     SPOT_ID: 4
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second default
+     SPOT_ID: 5
+  TRIM_START: 0
+
diff --git a/test/general-loader/expected/1override.stdout b/test/general-loader/expected/1override.stdout
new file mode 100644
index 0000000..cd95218
--- /dev/null
+++ b/test/general-loader/expected/1override.stdout
@@ -0,0 +1,75 @@
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first value
+     SPOT_ID: 1
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 2
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 3
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second value
+     SPOT_ID: 4
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second default
+     SPOT_ID: 5
+  TRIM_START: 0
+
diff --git a/test/general-loader/expected/1packed.stdout b/test/general-loader/expected/1packed.stdout
new file mode 100644
index 0000000..cd95218
--- /dev/null
+++ b/test/general-loader/expected/1packed.stdout
@@ -0,0 +1,75 @@
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first value
+     SPOT_ID: 1
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 2
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: first default
+     SPOT_ID: 3
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second value
+     SPOT_ID: 4
+  TRIM_START: 0
+
+COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+      CS_KEY: T
+   CS_NATIVE: false
+       LABEL: reference
+   LABEL_LEN: 9
+ LABEL_START: 0
+ MIN_SPOT_ID: 1
+   RD_FILTER: SRA_READ_FILTER_PASS
+ READ_FILTER: SRA_READ_FILTER_PASS
+  READ_START: 0
+   READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+  SPOT_GROUP: second default
+     SPOT_ID: 5
+  TRIM_START: 0
+
diff --git a/test/general-loader/expected/2.stderr b/test/general-loader/expected/2.stderr
new file mode 100644
index 0000000..6b1684e
--- /dev/null
+++ b/test/general-loader/expected/2.stderr
@@ -0,0 +1,2 @@
+general-loader err: general-loader: error "something is wrong"
+general-loader err: error exists while reading file - load failed
diff --git a/test/general-loader/expected/2packed.stderr b/test/general-loader/expected/2packed.stderr
new file mode 100644
index 0000000..6b1684e
--- /dev/null
+++ b/test/general-loader/expected/2packed.stderr
@@ -0,0 +1,2 @@
+general-loader err: general-loader: error "something is wrong"
+general-loader err: error exists while reading file - load failed
diff --git a/test/general-loader/expected/3.stdout b/test/general-loader/expected/3.stdout
new file mode 100644
index 0000000..3481de0
--- /dev/null
+++ b/test/general-loader/expected/3.stdout
@@ -0,0 +1,16 @@
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 1
+           TRIM_START: 0
+
diff --git a/test/general-loader/expected/3packed.stdout b/test/general-loader/expected/3packed.stdout
new file mode 100644
index 0000000..3481de0
--- /dev/null
+++ b/test/general-loader/expected/3packed.stdout
@@ -0,0 +1,16 @@
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 1
+           TRIM_START: 0
+
diff --git a/test/general-loader/expected/4.stdout b/test/general-loader/expected/4.stdout
new file mode 100644
index 0000000..c05dd30
--- /dev/null
+++ b/test/general-loader/expected/4.stdout
@@ -0,0 +1,160 @@
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 1
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 2
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 3
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 4
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 5
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 100
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 6
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 7
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 8
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 9
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 10
+           TRIM_START: 0
+
diff --git a/test/general-loader/expected/4packed.stdout b/test/general-loader/expected/4packed.stdout
new file mode 100644
index 0000000..c05dd30
--- /dev/null
+++ b/test/general-loader/expected/4packed.stdout
@@ -0,0 +1,160 @@
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 1
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 2
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 3
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 4
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 5
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 100
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 6
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 7
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 8
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 9
+           TRIM_START: 0
+
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 10
+           TRIM_START: 0
+
diff --git a/test/general-loader/expected/5packed.stdout b/test/general-loader/expected/5packed.stdout
new file mode 100644
index 0000000..d8acc2e
--- /dev/null
+++ b/test/general-loader/expected/5packed.stdout
@@ -0,0 +1,16 @@
+         COLOR_MATRIX: 0, 1, 2, 3, 4, 1, 0, 3, 2, 4, 2, 3, 0, 1, 4, 3, 2, 1, 0, 4, 4, 4, 4, 4, 4
+               CS_KEY: T
+            CS_NATIVE: false
+                LABEL: reference
+            LABEL_LEN: 9
+          LABEL_START: 0
+          MIN_SPOT_ID: 1
+PRIMARY_ALIGNMENT_IDS: 1085102592571150095
+            RD_FILTER: SRA_READ_FILTER_PASS
+          READ_FILTER: SRA_READ_FILTER_PASS
+           READ_START: 0
+            READ_TYPE: SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD
+           SPOT_GROUP: 
+              SPOT_ID: 1
+           TRIM_START: 0
+
diff --git a/test/general-loader/expected/6.stdout b/test/general-loader/expected/6.stdout
new file mode 100644
index 0000000..b8bf71a
--- /dev/null
+++ b/test/general-loader/expected/6.stdout
@@ -0,0 +1 @@
+<formatter name="some software" vers="9.8.7654"/>
diff --git a/test/general-loader/expected/6packed.stdout b/test/general-loader/expected/6packed.stdout
new file mode 100644
index 0000000..b8bf71a
--- /dev/null
+++ b/test/general-loader/expected/6packed.stdout
@@ -0,0 +1 @@
+<formatter name="some software" vers="9.8.7654"/>
diff --git a/test/general-loader/input/column01 b/test/general-loader/input/column01
new file mode 100644
index 0000000..c5ed0f9
--- /dev/null
+++ b/test/general-loader/input/column01
@@ -0,0 +1,2 @@
+First test sentence
+Second sentence to test the stream
diff --git a/test/general-loader/input/column02 b/test/general-loader/input/column02
new file mode 100644
index 0000000..c5ed0f9
--- /dev/null
+++ b/test/general-loader/input/column02
@@ -0,0 +1,2 @@
+First test sentence
+Second sentence to test the stream
diff --git a/test/general-loader/makeinputs.cpp b/test/general-loader/makeinputs.cpp
new file mode 100644
index 0000000..c9d739a
--- /dev/null
+++ b/test/general-loader/makeinputs.cpp
@@ -0,0 +1,226 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Unit tests for General Loader
+*/
+#include "testsource.hpp"
+
+#include "../../tools/general-loader/utf8-like-int-codec.c"
+
+using namespace std;
+
+const char* tableName = "REFERENCE";
+const char* asciiColumnName = "SPOT_GROUP";
+const char* i64ColumnName = "PRIMARY_ALIGNMENT_IDS";
+const char* u32ColumnName = "SPOT_ID";
+
+
+static
+string
+DatabasePath ( const string& p_caseId, bool p_packed )
+{
+    string caseId = p_caseId;
+    if ( p_packed )
+    {
+        caseId += "packed";
+    }
+    return string ( "actual/" ) + caseId + "/db";
+}
+  
+static
+string
+OutputPath ( const string& p_caseId, bool p_packed )
+{
+    string caseId = p_caseId;
+    if ( p_packed )
+    {
+        caseId += "packed";
+    }
+    return string ( "input/" ) + caseId + ".gl";
+}
+
+void
+OneTableOneColumnWithDefaults( const string& p_caseId, bool p_packed )
+{   // default values changed mid-data
+    TestSource source;
+    TestSource::packed = p_packed;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . NewTableEvent ( 1, tableName ); 
+    source . NewColumnEvent ( 1, 1, asciiColumnName, 8 );
+    source . OpenStreamEvent();
+    
+    string value1 = "first value";
+    source . CellDataEvent( 1, value1 );
+    source . NextRowEvent ( 1 );
+    
+    string default1 = "first default";
+    source . CellDefaultEvent( 1, default1 );
+    source . NextRowEvent ( 1 );
+    
+    source . NextRowEvent ( 1 );
+    
+    string value2 = "second value";
+    source . CellDefaultEvent( 1, value2 );
+    source . NextRowEvent ( 1 );
+    
+    string default2 = "second default";
+    source . CellDefaultEvent( 1, default2 );
+    source . NextRowEvent ( 1 );
+    
+    source . CloseStreamEvent();
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+void
+ErrorMessage( const string& p_caseId, bool p_packed )
+{   
+    TestSource source;
+    TestSource::packed = p_packed;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . NewTableEvent ( 1, tableName ); 
+    source . NewColumnEvent ( 1, 1, asciiColumnName, 8 );
+    source . OpenStreamEvent();
+    
+    source . ErrorMessageEvent( "something is wrong" );
+    
+    source . CloseStreamEvent();
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+void
+EmptyDefaultValue( const string& p_caseId, bool p_packed )
+{   
+    TestSource source;
+    TestSource::packed = p_packed;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . NewTableEvent ( 1, tableName ); 
+    source . NewColumnEvent ( 1, 1, i64ColumnName, 64 );
+    source . OpenStreamEvent();
+    
+    source . CellEmptyDefaultEvent( 1 );
+    source . NextRowEvent ( 1 );
+    
+    source . CloseStreamEvent();
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+void
+MoveAhead( const string& p_caseId, bool p_packed )
+{   
+    TestSource source;
+    TestSource::packed = p_packed;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . NewTableEvent ( 1, tableName ); 
+    source . NewColumnEvent ( 1, 1, i64ColumnName, 64 );
+    source . OpenStreamEvent();
+    
+    source . CellEmptyDefaultEvent( 1 );
+    source . MoveAheadEvent ( 1, 5 );
+    
+    source . CellDataEvent( 1, (int64_t)100 );
+    source . MoveAheadEvent ( 1, 5 );
+    
+    // expected: 5 empty cells, 100, 4 empty cells
+    source . CloseStreamEvent();
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+void
+IntegerCompression( const string& p_caseId, bool p_packed )
+{   
+    if ( !p_packed )
+    {   // Integer compression is used in packed mode only
+        return;
+    }
+    
+    TestSource source;
+    TestSource::packed = true;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . NewTableEvent ( 1, tableName ); 
+    source . NewColumnEvent ( 1, 1, i64ColumnName, 64, true );
+    source . OpenStreamEvent();
+    
+    uint8_t buf[128];
+    int bytes = encode_uint64 ( 0x0F0F0F0F0F0F0F0FLL, buf, buf + sizeof buf );
+    source . CellDataEventRaw ( 1, 1, buf, bytes );
+    source . NextRowEvent ( 1 );
+    
+    source . CloseStreamEvent();
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+void
+SoftwareIdString( const string& p_caseId, bool p_packed )
+{   // Software identification string in metadata
+    TestSource source;
+    TestSource::packed = true;
+    
+    source . SchemaEvent ( "align/align.vschema", "NCBI:align:db:alignment_sorted" );
+    source . DatabaseEvent ( DatabasePath ( p_caseId, p_packed ) );
+    
+    source . SoftwareNameEvent ( string ( "some software" ), string ( "9.8.7654" ) );
+    
+    source . OpenStreamEvent();
+    source . CloseStreamEvent();
+    
+    source . SaveBuffer ( OutputPath ( p_caseId, p_packed ) . c_str ()  );
+}
+
+int main()
+{
+    for (bool packed = false; ; packed = true )
+    {
+        OneTableOneColumnWithDefaults( "1", packed );
+        ErrorMessage( "2", packed );
+        EmptyDefaultValue( "3", packed );
+        MoveAhead( "4", packed );
+        IntegerCompression( "5", packed );
+        SoftwareIdString( "6", packed );
+        
+        if ( packed )
+        {
+            break;
+        }
+    }
+    
+    return 0;
+}
diff --git a/test/general-loader/runtestcase.sh b/test/general-loader/runtestcase.sh
new file mode 100755
index 0000000..6f2a6f8
--- /dev/null
+++ b/test/general-loader/runtestcase.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# $1 - path to sra-tools executables (general-loader, vdb-dump)
+# $2 - name of the dumper executable (vdb-dump, kdbmeta etc.)
+# $3 - work directory (expected results under expected/, actual results and temporaries created under actual/)
+# $4 - test case ID (expect a file input/$3.gl to exist)
+# $5 - expected return code
+# $6 - command line options for general-loader
+# $7 - command line options for dumper
+#
+# return codes:
+# 0 - passed
+# 1 - could not create temp dir
+# 2 - unexpected return code from general-loader
+# 3 - vdb-dump failed on the output of general-loader
+# 4 - outputs differ
+
+BINDIR=$1
+DUMPER=$2
+WORKDIR=$3
+CASEID=$4
+RC=$5
+LOAD_OPTIONS=$6
+DUMP_OPTIONS=$7
+
+DUMP="$BINDIR/$DUMPER"
+LOAD="$BINDIR/general-loader"
+TEMPDIR=$WORKDIR/actual/$CASEID
+
+echo "running test case $CASEID"
+
+mkdir -p $TEMPDIR
+if [ "$?" != "0" ] ; then
+    echo "cannot create "
+    exit 1
+fi
+rm -rf $TEMPDIR/*
+
+CMD="cat input/$CASEID.gl | $LOAD $LOAD_OPTIONS 1>$TEMPDIR/load.stdout 2>$TEMPDIR/load.stderr"
+#echo $CMD
+eval $CMD
+rc="$?"
+if [ "$rc" != "$RC" ] ; then
+    echo "$LOAD returned $rc, expected $RC"
+    echo "command executed:"
+    echo $CMD
+    cat $TEMPDIR/load.stderr
+    exit 2
+fi
+
+if [ "$rc" == "0" ] ; then
+    CMD="$DUMP $TEMPDIR/db $DUMP_OPTIONS 1>$TEMPDIR/dump.stdout 2>$TEMPDIR/dump.stderr"
+    #echo $CMD
+    eval $CMD || ( echo "$CMD" && exit 3 )
+    
+    # remove timestamps, date from metadata
+    sed -i -e 's/<timestamp>.*<\/timestamp>/<timestamp\/>/g' $TEMPDIR/dump.stdout
+    sed -i -e 's/date=".*" name/date="" name/g' $TEMPDIR/dump.stdout
+    
+    diff $WORKDIR/expected/$CASEID.stdout $TEMPDIR/dump.stdout >$TEMPDIR/diff
+    rc="$?"
+else
+    # remove timestamps
+    sed -i -e 's/^....-..-..T..:..:.. //g' $TEMPDIR/load.stderr
+    # remove pathnames
+    sed -i -e 's=/.*/==g' $TEMPDIR/load.stderr
+    # remove source locations
+    sed -i -e 's=: .*:[0-9]*:[^ ]*:=:=g' $TEMPDIR/load.stderr
+    # remove version number
+    sed -i -e 's=general-loader\(\.[0-9]*\)*=general-loader=g' $TEMPDIR/load.stderr
+    diff $WORKDIR/expected/$CASEID.stderr $TEMPDIR/load.stderr >$TEMPDIR/diff
+    rc="$?"
+fi
+
+if [ "$rc" != "0" ] ; then
+    cat $TEMPDIR/diff
+    echo "command executed:"
+    echo $CMD
+    exit 4
+fi    
+
+rm -rf $TEMPDIR
+
+exit 0
diff --git a/test/general-loader/schema/.gitignore b/test/general-loader/schema/.gitignore
new file mode 100644
index 0000000..4063701
--- /dev/null
+++ b/test/general-loader/schema/.gitignore
@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore
diff --git a/test/general-loader/test-general-loader.cpp b/test/general-loader/test-general-loader.cpp
new file mode 100644
index 0000000..8b42714
--- /dev/null
+++ b/test/general-loader/test-general-loader.cpp
@@ -0,0 +1,1683 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Unit tests for General Loader
+*/
+
+#include "../../tools/general-loader/general-loader.cpp"
+#include "../../tools/general-loader/database-loader.cpp"
+#include "../../tools/general-loader/protocol-parser.cpp"
+#include "../../tools/general-loader/utf8-like-int-codec.c"
+
+#include <ktst/unit_test.hpp>
+
+#include <sysalloc.h>
+
+#include <klib/printf.h>
+#include <klib/debug.h>
+
+#include <kns/adapt.h>
+
+#include <kfs/nullfile.h>
+#include <kfs/file.h>
+#include <kfs/ramfile.h>
+
+#include <kdb/table.h>
+
+#include <kfg/config.h> // KConfigPrint
+
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <vfs/manager.h>
+
+#include <vdb/vdb-priv.h>
+
+#include <time.h>
+#include <cstring>
+#include <stdexcept>
+#include <map>
+#include <fstream>
+#include <cstdio>
+
+#include "testsource.hpp"
+
+using namespace std;
+using namespace ncbi::NK;
+
+static KLogLevel l = 4;
+static rc_t argsHandler(int argc, char* argv[]) {
+    Args* args = NULL;
+    rc_t rc = ArgsMakeAndHandle(&args, argc, argv, 0, NULL, 0);
+    ArgsWhack(args);
+    KLogLevel lv = KLogLevelGet();
+    if (lv != 4) {
+        l = lv;
+    }
+    return rc;
+}
+TEST_SUITE_WITH_ARGS_HANDLER(GeneralLoaderTestSuite, argsHandler);
+
+const string ScratchDir         = "./db/";
+const string DefaultSchema      = ScratchDir + "default.vschema";
+
+const string DefaultSchemaText  =
+    "table table1 #1.0.0 { column ascii columnAscii; column U32 columnU32; column bool columnBool; };\n"
+    "table table2 #1.0.0 { column I64 columnI64; column U8 columnU8; };\n"
+    "database root_database #1 { table table1 #1 TABLE1; table table2 #1 TABLE2; };\n";
+
+const string DefaultDatabase    = "root_database";
+
+const string DefaultTable       = "TABLE1";
+const string Table2             = "TABLE2";
+
+const string DefaultColumn      = "columnAscii";
+const string U32Column          = "columnU32";
+const string BoolColumn         = "columnBool";
+const string I64Column          = "columnI64";
+const string U8Column           = "columnU8";
+
+static
+void
+ClearScratchDir ()
+{
+    KDirectory* wd;
+    KDirectoryNativeDir ( & wd );
+    KDirectoryClearDir ( wd, true, ScratchDir . c_str() );
+    KDirectoryRelease ( wd );
+}
+
+
+class GeneralLoaderFixture
+{
+public:
+    static const uint32_t DefaultTableId = 100;
+
+    static const uint32_t DefaultColumnId = 1;
+    static const uint32_t Column16Id = 16;
+    static const uint32_t Column32Id = 32;
+    static const uint32_t Column64Id = 64;
+
+    static std::string argv0;
+
+public:
+    GeneralLoaderFixture()
+    :   m_db ( 0 ),
+        m_cursor ( 0 ),
+        m_wd ( 0 )
+    {
+        THROW_ON_RC ( KDirectoryNativeDir ( & m_wd ) );
+
+        CreateFile ( DefaultSchema, DefaultSchemaText );
+    }
+    ~GeneralLoaderFixture()
+    {
+        RemoveDatabase();
+        if (l == 4) {
+            KLogLevelSet ( klogFatal );
+        }
+        KDirectoryRelease ( m_wd );
+        if ( ! m_tempSchemaFile . empty() )
+        {
+            remove ( m_tempSchemaFile . c_str() );
+        }
+    }
+
+    GeneralLoader* MakeLoader ( const struct KFile * p_input )
+    {
+        struct KStream * inStream;
+        THROW_ON_RC ( KStreamFromKFilePair ( & inStream, p_input, 0 ) );
+
+        GeneralLoader* ret = new GeneralLoader ( argv0, * inStream );
+        ret -> AddSchemaIncludePath ( ScratchDir );
+
+        THROW_ON_RC ( KStreamRelease ( inStream ) );
+        THROW_ON_RC ( KFileRelease ( p_input ) );
+
+        return ret;
+    }
+    bool RunLoader ( GeneralLoader& p_loader, rc_t p_rc )
+    {
+        rc_t rc = p_loader.Run();
+        if ( rc == p_rc )
+        {
+            return true;
+        }
+
+        char buf[1024];
+        string_printf ( buf, sizeof buf, NULL, "Expected rc='%R', actual='%R'", p_rc, rc );
+        cerr << buf << endl;
+        return false;
+    }
+
+    bool Run ( const struct KFile * p_input, rc_t p_rc )
+    {
+        struct KStream* inStream;
+        THROW_ON_RC ( KStreamFromKFilePair ( & inStream, p_input, 0 ) );
+
+        GeneralLoader gl ( argv0, *inStream );
+        gl . AddSchemaIncludePath ( ScratchDir );
+
+        rc_t rc = gl.Run();
+        bool ret;
+        if ( GetRCObject ( rc ) == GetRCObject ( p_rc ) &&
+             GetRCState ( rc ) == GetRCState ( p_rc ) )
+        {
+            ret = true;
+        }
+        else
+        {
+            char buf[1024];
+            string_printf ( buf, sizeof buf, NULL, "Expected rc='%R', actual='%R'", p_rc, rc );
+            cerr << buf << endl;
+            ret = false;
+        }
+
+        THROW_ON_RC ( KStreamRelease ( inStream ) );
+        THROW_ON_RC ( KFileRelease ( p_input ) );
+
+        return ret;
+    }
+
+    void RemoveDatabase()
+    {
+        CloseDatabase();
+        if ( ! m_source . GetDatabaseName() . empty () )
+        {
+            KDirectoryRemove ( m_wd, true, m_source . GetDatabaseName() . c_str() );
+        }
+    }
+
+    void OpenDatabase( const char* p_dbNameOverride = 0 )
+    {
+        CloseDatabase();
+
+        VDBManager * vdb;
+        THROW_ON_RC ( VDBManagerMakeUpdate ( & vdb, NULL ) );
+
+        try
+        {
+            THROW_ON_RC ( VDBManagerOpenDBUpdate ( vdb, &m_db, NULL, p_dbNameOverride != 0 ? p_dbNameOverride : m_source . GetDatabaseName() . c_str() ) );
+        }
+        catch(...)
+        {
+            VDBManagerRelease ( vdb );
+            throw;
+        }
+
+        THROW_ON_RC ( VDBManagerRelease ( vdb ) );
+    }
+    void CloseDatabase()
+    {
+        if ( m_db != 0 )
+        {
+            VDatabaseRelease ( m_db );
+            m_db = 0;
+        }
+        if ( m_cursor != 0 )
+        {
+            VCursorRelease ( m_cursor );
+            m_cursor = 0;
+        }
+    }
+
+    void SetUpStream( const string& p_dbName, const string& p_schema = DefaultSchema, const string& p_schemaName = DefaultDatabase )
+    {
+        m_source . SchemaEvent ( p_schema, p_schemaName );
+        string dbName = ScratchDir + p_dbName;
+        if ( m_source.packed )
+        {
+            dbName += "-packed";
+        }
+        m_source . DatabaseEvent ( dbName );
+    }
+    void SetUpStream_OneTable( const string& p_dbName )
+    {
+        SetUpStream( p_dbName );
+        m_source . NewTableEvent ( DefaultTableId, DefaultTable );
+    }
+    void OpenStream_OneTableOneColumn ( const string& p_dbName )
+    {
+        SetUpStream_OneTable( p_dbName );
+        m_source . NewColumnEvent ( DefaultColumnId, DefaultTableId, DefaultColumn, 8 );
+        m_source . OpenStreamEvent();
+    }
+
+    bool SetUpForIntegerCompression( const string& p_dbName )
+    {
+        if ( ! TestSource::packed )
+            return false; // integer compaction is used in packed mode only
+
+        m_tempSchemaFile = ScratchDir + string ( p_dbName ) + ".vschema";
+        string schemaText =
+                "table table1 #1.0.0\n"
+                "{\n"
+                "    column U16 column16;\n"
+                "    column U32 column32;\n"
+                "    column U64 column64;\n"
+                "};\n"
+                "database database1 #1\n"
+                "{\n"
+                "    table table1 #1 TABLE1;\n"
+                "};\n"
+            ;
+        CreateFile ( m_tempSchemaFile, schemaText );
+        SetUpStream ( p_dbName, m_tempSchemaFile, "database1" );
+
+        m_source . NewTableEvent ( DefaultTableId, "TABLE1" );
+
+        m_source . NewColumnEvent ( Column16Id, DefaultTableId, "column16", 16, true );
+        m_source . NewColumnEvent ( Column32Id, DefaultTableId, "column32", 32, true );
+        m_source . NewColumnEvent ( Column64Id, DefaultTableId, "column64", 64, true );
+
+        return true;
+    }
+
+    void OpenCursor( const string& p_table, const string& p_column )
+    {
+        OpenDatabase();
+        const VTable * tbl;
+        THROW_ON_RC ( VDatabaseOpenTableRead ( m_db, &tbl, p_table.c_str() ) );
+        try
+        {
+            THROW_ON_RC ( VTableCreateCursorRead ( tbl, & m_cursor ) );
+
+            uint32_t idx;
+            THROW_ON_RC ( VCursorAddColumn ( m_cursor, &idx, p_column.c_str() ) );
+            THROW_ON_RC ( VCursorOpen ( m_cursor ) );
+            THROW_ON_RC ( VTableRelease ( tbl ) );
+        }
+        catch (...)
+        {
+            VTableRelease ( tbl );
+            throw;
+        }
+    }
+
+    template < typename T > T GetValue ( const string& p_table, const string& p_column, uint64_t p_row )
+    {
+        OpenCursor( p_table, p_column );
+        THROW_ON_RC ( VCursorSetRowId ( m_cursor, p_row ) );
+        THROW_ON_RC ( VCursorOpenRow ( m_cursor ) );
+
+        T ret;
+        uint32_t num_read;
+        THROW_ON_RC ( VCursorRead ( m_cursor, 1, 8 * sizeof ( T ), &ret, 1, &num_read ) );
+        THROW_ON_RC ( VCursorCloseRow ( m_cursor ) );
+        return ret;
+    }
+
+    template < typename T > bool IsNullValue ( const string& p_table, const string& p_column, uint64_t p_row )
+    {
+        OpenCursor( p_table, p_column );
+        THROW_ON_RC ( VCursorSetRowId ( m_cursor, p_row ) );
+        THROW_ON_RC ( VCursorOpenRow ( m_cursor ) );
+
+        T ret;
+        uint32_t num_read;
+        THROW_ON_RC ( VCursorRead ( m_cursor, 1, 8 * sizeof ( T ), &ret, 1, &num_read ) );
+        THROW_ON_RC ( VCursorCloseRow ( m_cursor ) );
+        return num_read == 0;
+    }
+
+    template < typename T > T GetValueWithIndex ( const string& p_table, const string& p_column, uint64_t p_row, uint32_t p_count, size_t p_index )
+    {
+        OpenCursor( p_table, p_column );
+        THROW_ON_RC ( VCursorSetRowId ( m_cursor, p_row ) );
+        THROW_ON_RC ( VCursorOpenRow ( m_cursor ) );
+
+        assert(1024 >= p_count);
+        T ret [ 1024 ];
+
+        uint32_t num_read;
+        THROW_ON_RC ( VCursorRead ( m_cursor, 1, (uint32_t) ( 8 * sizeof ( T ) ), &ret, p_count, &num_read ) );
+        THROW_ON_RC ( VCursorCloseRow ( m_cursor ) );
+        return ret [  p_index ];
+    }
+
+    void FullLog()
+    {
+        KLogLevelSet ( klogInfo );
+    }
+
+    void CreateFile ( const string& p_name, const string& p_content )
+    {
+        ofstream out( p_name . c_str() );
+        out << p_content;
+    }
+
+    std::string GetDbMetadataAttr ( const std::string& p_node, const std::string& p_attr )
+    {
+        const KMetadata *meta;
+        THROW_ON_RC ( VDatabaseOpenMetadataRead ( m_db, &meta ) );
+
+        const KMDataNode *node;
+        THROW_ON_RC ( KMetadataOpenNodeRead ( meta, &node, p_node.c_str() ) );
+
+        size_t num_read;
+        char attr [ 256 ];
+        THROW_ON_RC ( KMDataNodeReadAttr ( node, p_attr.c_str(), attr, sizeof attr, & num_read ) );
+        THROW_ON_RC ( KMDataNodeRelease ( node ) );
+        THROW_ON_RC ( KMetadataRelease ( meta ) );
+        return string ( attr, num_read );
+    }
+
+    std::string GetMetadata ( const KMetadata* p_meta, const std::string& p_node )
+    {
+        const KMDataNode *node;
+        THROW_ON_RC ( KMetadataOpenNodeRead ( p_meta, &node, p_node.c_str() ) );
+
+        size_t num_read;
+        char buf[ 256 ];
+
+        THROW_ON_RC ( KMDataNodeReadCString ( node, buf, sizeof buf, &num_read ) );
+
+        THROW_ON_RC ( KMDataNodeRelease ( node ) );
+        return string ( buf, num_read );
+
+    }
+    std::string GetDbMetadata ( VDatabase* p_db, const std::string& p_node )
+    {
+        const KMetadata *meta;
+        THROW_ON_RC ( VDatabaseOpenMetadataRead ( p_db, &meta ) );
+        string ret = GetMetadata ( meta, p_node );
+        THROW_ON_RC ( KMetadataRelease ( meta ) );
+        return ret;
+    }
+
+    TestSource      m_source;
+    VDatabase *     m_db;
+    const VCursor * m_cursor;
+    KDirectory*     m_wd;
+    string          m_tempSchemaFile;
+	string			m_ScratchDir;
+};
+
+template<> std::string GeneralLoaderFixture::GetValue ( const string& p_table, const string& p_column, uint64_t p_row )
+{
+    OpenCursor( p_table, p_column );
+    THROW_ON_RC ( VCursorSetRowId ( m_cursor, p_row ) );
+    THROW_ON_RC ( VCursorOpenRow ( m_cursor ) );
+
+    char buf[1024];
+    uint32_t num_read;
+    THROW_ON_RC ( VCursorRead ( m_cursor, 1, 8, &buf, sizeof buf, &num_read ) );
+    THROW_ON_RC ( VCursorCloseRow ( m_cursor ) );
+    return string ( buf, num_read );
+}
+
+std::string GeneralLoaderFixture :: argv0;
+
+FIXTURE_TEST_CASE ( EmptyInput, GeneralLoaderFixture )
+{
+    const struct KFile * input;
+    REQUIRE_RC ( KFileMakeNullRead ( & input ) );
+    REQUIRE ( Run ( input, SILENT_RC ( rcNS, rcFile, rcReading, rcTransfer, rcIncomplete ) ) );
+}
+
+FIXTURE_TEST_CASE ( ShortInput, GeneralLoaderFixture )
+{
+    char buffer[10];
+    const struct KFile * input;
+    REQUIRE_RC ( KRamFileMakeRead ( & input, buffer, sizeof buffer ) );
+
+    REQUIRE ( Run ( input, SILENT_RC ( rcNS, rcFile, rcReading, rcTransfer, rcIncomplete ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadSignature, GeneralLoaderFixture )
+{
+    TestSource ts ( "badsigna" );
+    REQUIRE ( Run (  ts . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcHeader, rcCorrupt ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadEndianness, GeneralLoaderFixture )
+{
+    TestSource ts ( GeneralLoaderSignatureString, 3 );
+    REQUIRE ( Run ( ts . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcFormat, rcInvalid) ) );
+}
+
+FIXTURE_TEST_CASE ( ReverseEndianness, GeneralLoaderFixture )
+{
+    TestSource ts ( GeneralLoaderSignatureString, GW_REVERSE_ENDIAN );
+    REQUIRE ( Run ( ts . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcFormat, rcUnsupported ) ) );
+}
+
+FIXTURE_TEST_CASE ( LaterVersion, GeneralLoaderFixture )
+{
+    TestSource ts ( GeneralLoaderSignatureString, GW_GOOD_ENDIAN, GW_CURRENT_VERSION + 1 );
+    REQUIRE ( Run ( ts . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcHeader, rcBadVersion ) ) );
+}
+
+//TODO: MakeTruncatedSource (stop in the middle of an event)
+
+
+FIXTURE_TEST_CASE ( BadSchemaFileName, GeneralLoaderFixture )
+{
+    m_source . SchemaEvent ( "this file should not exist", "someSchemaName" );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadSchemaFileName_Long, GeneralLoaderFixture )
+{
+    m_source . SchemaEvent ( string ( GeneralLoader :: MaxPackedString + 1, 'x' ), "someSchemaName" );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadSchemaName, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName(), "align/align.vschema", "bad schema name" );
+    m_source . OpenStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadSchemaName_Long, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName(), "align/align.vschema", string ( GeneralLoader :: MaxPackedString + 1, 'x' ) );
+    m_source . OpenStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadTableName, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( 1, "nosuchtable" );
+    m_source . OpenStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadTableName_Long, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( 1, string ( GeneralLoader :: MaxPackedString + 1, 'x' ) );
+    m_source . OpenStreamEvent();
+
+    // the expected return code is different here due to VDB's internal limitation on 256 characters in a table name
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcDB,rcDirectory,rcResolving,rcPath,rcExcessive ) ) );
+}
+
+FIXTURE_TEST_CASE ( DuplicateTableId, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( 1, DefaultTable );
+    m_source . NewTableEvent ( 1, "differentTable" ); // same Id
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcTable, rcExists ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadColumnName, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( DefaultTableId, DefaultTable );
+    m_source . NewColumnEvent ( 1, DefaultTableId, "nosuchcolumn", 8 );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcCursor, rcUpdating, rcColumn, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( BadTableId, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( 1, DefaultTable );
+    m_source . NewColumnEvent ( 1, 2, DefaultColumn, 8 );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcTable, rcInvalid ) ) );
+}
+
+FIXTURE_TEST_CASE ( DuplicateColumnName, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, DefaultTableId, DefaultColumn, 8 );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcCursor, rcUpdating, rcColumn, rcExists ) ) );
+}
+
+FIXTURE_TEST_CASE ( DuplicateColumnId, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 1, DefaultTableId, "NAME", 8 );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcColumn, rcExists ) ) );
+}
+
+FIXTURE_TEST_CASE ( NoOpenStreamEvent, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcNS, rcFile, rcReading, rcTransfer, rcIncomplete ) ) );
+}
+
+FIXTURE_TEST_CASE ( NoCloseStreamEvent, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . OpenStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcNS, rcFile, rcReading, rcTransfer, rcIncomplete ) ) );
+}
+
+FIXTURE_TEST_CASE ( NoColumns, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // make sure database exists and is valid
+    OpenDatabase (); // did not throw => opened successfully
+}
+
+//Testing integration of software name and version input
+FIXTURE_TEST_CASE ( SoftwareName, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    const string SoftwareName = "softwarename";
+    const string Version = "2.1.1";
+    m_source . SoftwareNameEvent ( SoftwareName, Version );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate metadata
+    OpenDatabase ();
+    REQUIRE_EQ ( SoftwareName,  GetDbMetadataAttr ( "SOFTWARE/formatter", "name" ) );
+    REQUIRE_EQ ( Version,       GetDbMetadataAttr ( "SOFTWARE/formatter", "vers" ) );
+
+    // extract the program name from path the same way it's done in ncbi-vdb/libs/kapp/loader-meta.c:KLoaderMeta_Write
+    {
+        const char* tool_name = strrchr(argv0.c_str(), '/');
+        const char* r = strrchr(argv0.c_str(), '\\');
+        if( tool_name != NULL && r != NULL && tool_name < r ) {
+            tool_name = r;
+        }
+        if( tool_name++ == NULL) {
+            tool_name = argv0.c_str();
+        }
+
+        REQUIRE_EQ ( string ( tool_name ), GetDbMetadataAttr ( "SOFTWARE/loader", "name" ) );
+    }
+
+    REQUIRE_EQ ( string ( __DATE__), GetDbMetadataAttr ( "SOFTWARE/loader", "date" ) );
+    {
+        char buf[265];
+        string_printf ( buf, sizeof buf, NULL, "%V", KAppVersion() ); // same format as in ncbi-vdb/libs/kapp/loader-meta.c:MakeVersion()
+        REQUIRE_EQ ( string ( buf ), GetDbMetadataAttr ( "SOFTWARE/loader", "vers" ) );
+    }
+}
+
+FIXTURE_TEST_CASE ( SoftwareName_BadVersion, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    const string SoftwareName = "softwarename";
+    const string Version = "2.1..1"; // improperly formatted
+    m_source . SoftwareNameEvent ( SoftwareName, Version );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcDatabase, rcCreating, rcMessage, rcBadVersion ) ) );
+}
+
+FIXTURE_TEST_CASE ( DBAddDatabase, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database database0 #1 { table table1 #1 TABLE1; } ;"
+                    "database root_database #1 { database database0 #1 SUBDB; } ;"
+                 )
+    );
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddDatabaseEvent ( 1, 0, "SUBDB", "subdb", kcmCreate );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate database
+    OpenDatabase ();
+    VDatabase * subDb;
+    REQUIRE_RC ( VDatabaseOpenDBUpdate ( m_db, & subDb, "subdb" ) );
+    REQUIRE_RC ( VDatabaseRelease ( subDb ) );
+}
+
+FIXTURE_TEST_CASE ( DBAddSubDatabase, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database database0 #1 { table table1 #1 TABLE1; } ;"
+                    "database database1 #1 { database database0 #1 SUBSUBDB; } ;"
+                    "database root_database #1 { database database1 #1 SUBDB; } ;"
+                 )
+    );
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddDatabaseEvent ( 1, 0, "SUBDB", "subdb", kcmCreate );
+    m_source . DBAddDatabaseEvent ( 2, 1, "SUBSUBDB", "subsubdb", kcmCreate );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate database
+    OpenDatabase ();
+    VDatabase * subDb;
+    REQUIRE_RC ( VDatabaseOpenDBUpdate ( m_db, & subDb, "subdb" ) );
+    VDatabase * subSubDb;
+    REQUIRE_RC ( VDatabaseOpenDBUpdate ( subDb, & subSubDb, "subsubdb" ) );
+    REQUIRE_RC ( VDatabaseRelease ( subSubDb ) );
+    REQUIRE_RC ( VDatabaseRelease ( subDb ) );
+}
+
+FIXTURE_TEST_CASE ( DBAddTable, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database root_database #1 { table table1 #1 TABLE1; } ;"
+                 )
+    );
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddTableEvent ( 1, 0, "TABLE1", "tbl", kcmCreate );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate database
+    OpenDatabase ();
+    const VTable *tbl;
+    REQUIRE_RC ( VDatabaseOpenTableRead ( m_db, & tbl, "tbl" ) );
+    REQUIRE_RC ( VTableRelease ( tbl ) );
+}
+
+FIXTURE_TEST_CASE ( DBAddTableToSubDb, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database database0 #1 { table table1 #1 TABLE1; } ;"
+                    "database root_database #1 { database database0 #1 SUBDB; } ;"
+                 )
+    );
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddDatabaseEvent ( 2, 0, "SUBDB", "subdb", kcmCreate );
+    m_source . DBAddTableEvent ( 1, 2, "TABLE1", "tbl", kcmCreate );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate database
+    OpenDatabase ();
+    {
+        VDatabase * subDb;
+        REQUIRE_RC ( VDatabaseOpenDBUpdate ( m_db, & subDb, "subdb" ) );
+        const VTable *tbl;
+        REQUIRE_RC ( VDatabaseOpenTableRead ( subDb, & tbl, "tbl" ) );
+        REQUIRE_RC ( VTableRelease ( tbl ) );
+        REQUIRE_RC ( VDatabaseRelease ( subDb ) );
+    }
+}
+
+FIXTURE_TEST_CASE ( DBMetadataNode, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    const string key = "dbmetadatanode";
+    const string value = "1a2b3c4d";
+    m_source . OpenStreamEvent();
+    m_source . DBMetadataNodeEvent ( 0, key, value );
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    OpenDatabase ();
+    REQUIRE_EQ ( value, GetDbMetadata( m_db, key ) );
+}
+
+FIXTURE_TEST_CASE ( SubDBMetadataNode, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database database0 #1 { table table1 #1 TABLE1; } ;"
+                    "database root_database #1 { database database0 #1 SUBDB; } ;"
+                 )
+    );
+    const uint32_t subDbId = 2;
+    const string key = "subdbmetadatanode";
+    const string value = "1a2b3c4dsub";
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddDatabaseEvent ( subDbId, 0, "SUBDB", "subdb", kcmCreate );
+    m_source . DBAddTableEvent ( 1, subDbId, "TABLE1", "tbl", kcmCreate );
+    m_source . OpenStreamEvent();
+    m_source . DBMetadataNodeEvent ( subDbId, key, value );
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    OpenDatabase ();
+    {
+        VDatabase * subDb;
+        REQUIRE_RC ( VDatabaseOpenDBUpdate ( m_db, & subDb, "subdb" ) );
+        REQUIRE_EQ ( value, GetDbMetadata( subDb, key ) );
+        REQUIRE_RC ( VDatabaseRelease ( subDb ) );
+    }
+}
+
+FIXTURE_TEST_CASE ( TblMetadataNode, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database root_database #1 { table table1 #1 TABLE1; } ;"
+                 )
+    );
+
+    const char* tblName = "tbl";
+    const uint32_t tblId = 2;
+    const string key = "tblmetadatanode";
+    const string value = "tbl1a2b3c4d";
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddTableEvent ( tblId, 0, "TABLE1", tblName, kcmCreate );
+
+    m_source . OpenStreamEvent();
+    m_source . TblMetadataNodeEvent ( tblId, key, value);
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate database
+    OpenDatabase ();
+    {
+        const VTable *tbl;
+        REQUIRE_RC ( VDatabaseOpenTableRead ( m_db, & tbl, tblName ) );
+
+        {
+            const KMetadata *meta;
+            REQUIRE_RC ( VTableOpenMetadataRead ( tbl, &meta ) );
+            REQUIRE_EQ ( value, GetMetadata ( meta,  key) );
+            REQUIRE_RC ( KMetadataRelease ( meta ) );
+        }
+        REQUIRE_RC ( VTableRelease ( tbl ) );
+    }
+}
+
+FIXTURE_TEST_CASE ( ColMetadataNode, GeneralLoaderFixture )
+{
+    string schemaFile = ScratchDir + GetName() + ".vschema";
+    CreateFile ( schemaFile,
+                 string (
+                    "table table1 #1.0.0 { column ascii column1; };"
+                    "database root_database #1 { table table1 #1 TABLE1; } ;"
+                 )
+    );
+
+    const char* tblName = "tbl";
+    const uint32_t tblId = 2;
+    const char* colName = "column1";
+    const uint32_t colId = 5;
+    const string NodeName   = "colmetadatanode";
+    const string NodeValue  = "1a2b3c4d";
+
+    SetUpStream ( GetName(), schemaFile, "root_database");
+
+    m_source . DBAddTableEvent ( tblId, 0, "TABLE1", tblName, kcmCreate | kcmMD5 );
+    m_source . NewColumnEvent ( colId, tblId, colName, 8 );
+
+    m_source . OpenStreamEvent();
+    m_source . ColMetadataNodeEvent ( colId, NodeName, NodeValue );
+    // need at least 2 rows with different value in order for the column to become physical, otherwise column's metadata will not be stored
+    m_source . CellDataEvent( colId, string("blah1") );
+    m_source . NextRowEvent ( tblId );
+    m_source . CellDataEvent( colId, string("brh2") );
+    m_source . NextRowEvent ( tblId );
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    // validate metadata
+    OpenDatabase ();
+    {
+        const VTable *tbl;
+        REQUIRE_RC ( VDatabaseOpenTableRead ( m_db, & tbl, tblName ) );
+
+        {
+            const KTable* ktbl;
+            REQUIRE_RC ( VTableOpenKTableRead ( tbl, & ktbl ) );
+            {
+                const KColumn* col;
+                REQUIRE_RC ( KTableOpenColumnRead ( ktbl, & col, colName ) );
+                {
+                    const KMetadata *meta;
+                    REQUIRE_RC ( KColumnOpenMetadataRead ( col, &meta ) );
+
+                    REQUIRE_EQ ( NodeValue, GetMetadata ( meta, NodeName ) );
+
+                    REQUIRE_RC ( KMetadataRelease ( meta ) );
+                }
+                REQUIRE_RC ( KColumnRelease ( col ) );
+            }
+            REQUIRE_RC ( KTableRelease ( ktbl ) );
+        }
+        REQUIRE_RC ( VTableRelease ( tbl ) );
+    }
+}
+
+FIXTURE_TEST_CASE ( NoData, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . NewTableEvent ( 2, DefaultTable ); // ids do not have to be consecutive
+    m_source . NewColumnEvent ( 222, 2, DefaultColumn, 8 );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_THROW ( OpenCursor( DefaultTable, DefaultColumn ) );
+}
+
+FIXTURE_TEST_CASE ( Chunk_BadColumnId, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    m_source . CellDataEvent( /*bad*/2, string("blah") );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( WriteNoCommit, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value = "a single character string cell";
+    m_source . CellDataEvent( DefaultColumnId, value );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_THROW ( OpenCursor( DefaultTable, DefaultColumn ) );
+}
+
+FIXTURE_TEST_CASE ( CommitBadTableId, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    m_source . NextRowEvent ( /*bad*/2 );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcExe, rcFile, rcReading, rcTable, rcNotFound ) ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnOneCellOneChunk, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value = "a single character string cell";
+    m_source . CellDataEvent( DefaultColumnId, value );
+    m_source . NextRowEvent ( DefaultTableId );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnOneCellOneChunk_Long, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value ( GeneralLoader :: MaxPackedString + 1, 'x' );
+    m_source . CellDataEvent( DefaultColumnId, value );
+    m_source . NextRowEvent ( DefaultTableId );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnOneCellManyChunks, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value1 = "first";
+    m_source . CellDataEvent( DefaultColumnId, value1 );
+    string value2 = "second!";
+    m_source . CellDataEvent( DefaultColumnId, value2 );
+    string value3 = "third!!!";
+    m_source . CellDataEvent( DefaultColumnId, value3 );
+    m_source . NextRowEvent ( DefaultTableId );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1 + value2 + value3, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( IntegerCompression_MinimumCompression, GeneralLoaderFixture )
+{
+    if ( ! SetUpForIntegerCompression ( GetName() ) )
+        return;
+
+    // no compression ( adds 1 byte per value )
+    const uint16_t u16value = 0x3456;
+    const uint32_t u32value = 0x789abcde;
+    const uint64_t u64value = 0x0F0F0F0F0F0F0F0FLL;
+
+    m_source . OpenStreamEvent();
+
+    uint8_t buf[128];
+
+    int bytes = encode_uint16 ( u16value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 3, bytes );
+    m_source . CellDataEventRaw ( Column16Id, 1, buf, bytes );
+
+    bytes = encode_uint32 ( u32value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 5, bytes );
+    m_source . CellDataEventRaw ( Column32Id, 1, buf, bytes );
+
+    bytes = encode_uint64 ( u64value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 9, bytes );
+    m_source . CellDataEventRaw ( Column64Id, 1, buf, bytes );
+
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( u16value, GetValue<uint16_t> ( "TABLE1", "column16", 1 ) );
+    REQUIRE_EQ ( u32value, GetValue<uint32_t> ( "TABLE1", "column32", 1 ) );
+    REQUIRE_EQ ( u64value, GetValue<uint64_t> ( "TABLE1", "column64", 1 ) );
+}
+
+FIXTURE_TEST_CASE ( IntegerCompression_MaximumCompression, GeneralLoaderFixture )
+{
+    if ( ! SetUpForIntegerCompression ( GetName() ) )
+        return;
+
+    // induce maximum compression ( 1 byte per value <= 0x7F )
+    const uint16_t u16value = 0;
+    const uint32_t u32value = 2;
+    const uint64_t u64value = 0x7F;
+
+    m_source . OpenStreamEvent();
+
+    uint8_t buf[128];
+
+    int bytes = encode_uint16 ( u16value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 1, bytes );
+    m_source . CellDataEventRaw ( Column16Id, 1, buf, bytes );
+
+    bytes = encode_uint32 ( u32value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 1, bytes );
+    m_source . CellDataEventRaw ( Column32Id, 1, buf, bytes );
+
+    bytes = encode_uint64 ( u64value, buf, buf + sizeof buf );
+    REQUIRE_EQ ( 1, bytes );
+    m_source . CellDataEventRaw ( Column64Id, 1, buf, bytes );
+
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( u16value, GetValue<uint16_t> ( "TABLE1", "column16", 1 ) );
+    REQUIRE_EQ ( u32value, GetValue<uint32_t> ( "TABLE1", "column32", 1 ) );
+    REQUIRE_EQ ( u64value, GetValue<uint64_t> ( "TABLE1", "column64", 1 ) );
+}
+
+FIXTURE_TEST_CASE ( IntegerCompression_MultipleValues, GeneralLoaderFixture )
+{
+    if ( ! SetUpForIntegerCompression ( GetName() ) )
+        return;
+
+    // induce maximum compression ( 1 byte per value <= 0x7F )
+    const uint16_t u16value1 = 0x0001;              const uint16_t u16value2 = 0x0002;
+    const uint32_t u32value1 = 0x00000003;          const uint32_t u32value2 = 0x00000004;
+    const uint64_t u64value1 = 0x0000000000000006;  const uint64_t u64value2 = 0x0000000000000007;
+
+    m_source . OpenStreamEvent();
+
+    uint8_t buf[128];
+
+    {
+        int bytesTotal = 0;
+        int bytes = encode_uint16 ( u16value1, buf, buf + sizeof buf );
+        bytesTotal += bytes;
+        bytes = encode_uint16 ( u16value2, buf + bytesTotal, buf + sizeof buf );
+        bytesTotal += bytes;
+        REQUIRE_EQ ( 2, bytesTotal );
+        m_source . CellDataEventRaw ( Column16Id, 2, buf, bytesTotal );
+    }
+
+    {
+        int bytesTotal = 0;
+        int bytes = encode_uint32 ( u32value1, buf, buf + sizeof buf );
+        bytesTotal += bytes;
+        bytes = encode_uint32 ( u32value2, buf + bytesTotal, buf + sizeof buf );
+        bytesTotal += bytes;
+        REQUIRE_EQ ( 2, bytesTotal );
+        m_source . CellDataEventRaw ( Column32Id, 2, buf, bytesTotal );
+    }
+
+    {
+        int bytesTotal = 0;
+        int bytes = encode_uint64 ( u64value1, buf, buf + sizeof buf );
+        bytesTotal += bytes;
+        bytes = encode_uint64 ( u64value2, buf + bytesTotal, buf + sizeof buf );
+        bytesTotal += bytes;
+        REQUIRE_EQ ( 2, bytesTotal );
+        m_source . CellDataEventRaw ( Column64Id, 2, buf, bytesTotal );
+    }
+
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( u16value1, GetValueWithIndex<uint16_t> ( "TABLE1", "column16", 1, 2, 0 ) );
+    REQUIRE_EQ ( u16value2, GetValueWithIndex<uint16_t> ( "TABLE1", "column16", 1, 2, 1 ) );
+    REQUIRE_EQ ( u32value1, GetValueWithIndex<uint32_t> ( "TABLE1", "column32", 1, 2, 0 ) );
+    REQUIRE_EQ ( u32value2, GetValueWithIndex<uint32_t> ( "TABLE1", "column32", 1, 2, 1 ) );
+    REQUIRE_EQ ( u64value1, GetValueWithIndex<uint64_t> ( "TABLE1", "column64", 1, 2, 0 ) );
+    REQUIRE_EQ ( u64value2, GetValueWithIndex<uint64_t> ( "TABLE1", "column64", 1, 2, 1 ) );
+}
+
+// default values
+
+FIXTURE_TEST_CASE ( OneColumnDefaultNoWrite, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value = "this be my default";
+    m_source . CellDefaultEvent( DefaultColumnId, value );
+    // no WriteEvent
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnDefaultNoWrite_Long, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value ( GeneralLoader :: MaxPackedString + 1, 'x' );
+    m_source . CellDefaultEvent( DefaultColumnId, value );
+    // no WriteEvent
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( MoveAhead, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value = "this be my default";
+    m_source . CellDefaultEvent( DefaultColumnId, value );
+    m_source . MoveAheadEvent ( DefaultTableId, 3 );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 2 ) );
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 3 ) );
+    REQUIRE_THROW ( GetValue<string> ( DefaultTable, DefaultColumn, 4 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnDefaultOverwite, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string valueDflt = "this be my default";
+    m_source . CellDefaultEvent( DefaultColumnId, valueDflt );
+    string value = "not the default";
+    m_source . CellDataEvent( DefaultColumnId, value );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnChangeDefault, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value1 = "this be my first default";
+    m_source . CellDefaultEvent( DefaultColumnId, value1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    string value2 = "and this be my second default";
+    m_source . CellDefaultEvent( DefaultColumnId, value2 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1, GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( value2, GetValue<string> ( DefaultTable, DefaultColumn, 2 ) );
+}
+
+FIXTURE_TEST_CASE ( OneColumnDataAndDefaultsMixed, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    string value1 = "first value";
+    m_source . CellDataEvent( DefaultColumnId, value1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    string default1 = "first default";
+    m_source . CellDefaultEvent( DefaultColumnId, default1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    string value2 = "second value";
+    m_source . CellDefaultEvent( DefaultColumnId, value2 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    string default2 = "second default";
+    m_source . CellDefaultEvent( DefaultColumnId, default2 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1,    GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( default1,  GetValue<string> ( DefaultTable, DefaultColumn, 2 ) );
+    REQUIRE_EQ ( default1,  GetValue<string> ( DefaultTable, DefaultColumn, 3 ) );
+    REQUIRE_EQ ( value2,    GetValue<string> ( DefaultTable, DefaultColumn, 4 ) );
+    REQUIRE_EQ ( default2,  GetValue<string> ( DefaultTable, DefaultColumn, 5 ) );
+}
+
+FIXTURE_TEST_CASE ( TwoColumnsFullRow, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, DefaultTableId, U32Column, 32 );
+    m_source . OpenStreamEvent();
+
+    string value1 = "value1";
+    m_source . CellDataEvent( 1, value1 );
+    uint32_t value2 = 12345;
+    m_source . CellDataEvent( 2, value2 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1,    GetValue<string>    ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( value2,    GetValue<uint32_t>  ( DefaultTable, U32Column, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( TwoColumnsIncompleteRow, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, DefaultTableId, U32Column, 32 );
+    m_source . OpenStreamEvent();
+
+    string value1 = "value1";
+    m_source . CellDataEvent( 1, value1 );
+    // no CellData for column 2
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), SILENT_RC ( rcVDB, rcColumn, rcClosing, rcRow, rcIncomplete) ) );
+}
+
+FIXTURE_TEST_CASE ( TwoColumnsPartialRowWithDefaults, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, DefaultTableId, U32Column, 32 );
+    m_source . OpenStreamEvent();
+
+    string value1 = "value1";
+    m_source . CellDataEvent( 1, value1 );
+    uint32_t value2 = 12345;
+    m_source . CellDefaultEvent( 2, value2 );
+    // no Data Event for column2
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1,    GetValue<string>    ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( value2,    GetValue<uint32_t>  ( DefaultTable, U32Column, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( TwoColumnsPartialRowWithDefaultsAndOverride, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+
+    m_source . NewColumnEvent ( 1, DefaultTableId, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, DefaultTableId, U32Column, 32 );
+    m_source . NewColumnEvent ( 3, DefaultTableId, BoolColumn, 8 );
+    m_source . OpenStreamEvent();
+
+    string value1 = "value1";
+    m_source . CellDataEvent( 1, value1 );
+    uint32_t value2 = 12345;
+    m_source . CellDefaultEvent( 2, value2 );
+    m_source . CellDefaultEvent( 3, false );
+    bool value3 = true;
+    m_source . CellDataEvent( 3, true ); // override default
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( value1,    GetValue<string>    ( DefaultTable, DefaultColumn, 1 ) );       // explicit
+    REQUIRE_EQ ( value2,    GetValue<uint32_t>  ( DefaultTable, U32Column, 1 ) );    // default
+    REQUIRE_EQ ( value3,    GetValue<bool>      ( DefaultTable, BoolColumn, 1 ) );   // not the default
+}
+
+FIXTURE_TEST_CASE ( EmptyDefault_String, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+
+    m_source . OpenStreamEvent();
+
+    m_source . CellEmptyDefaultEvent( 1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( string(), GetValue<string> ( DefaultTable, DefaultColumn, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( EmptyDefault_Int, GeneralLoaderFixture )
+{
+    SetUpStream_OneTable ( GetName() );
+
+    m_source . NewColumnEvent ( 1, DefaultTableId, U32Column, 32 );
+    m_source . OpenStreamEvent();
+
+    m_source . CellEmptyDefaultEvent( 1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE ( IsNullValue<uint32_t> ( DefaultTable, U32Column, 1 ) );
+}
+
+FIXTURE_TEST_CASE ( MultipleTables_Multiple_Columns_MultipleRows, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+
+    m_source . NewTableEvent ( 100, DefaultTable );
+    m_source . NewColumnEvent ( 1, 100, DefaultColumn, 8 );
+    m_source . NewColumnEvent ( 2, 100, U32Column, 32 );
+
+    m_source . NewTableEvent ( 200, Table2 );
+    m_source . NewColumnEvent ( 3, 200, I64Column, 64 );
+    m_source . NewColumnEvent ( 4, 200, U8Column, 8 );
+
+    m_source . OpenStreamEvent();
+
+        string t1c1v1 = "t1c1v1";
+        m_source . CellDataEvent( 1, t1c1v1 );
+        uint32_t t1c2v1 = 121;
+        m_source . CellDataEvent( 2, t1c2v1 );
+    m_source . NextRowEvent ( 100 );
+
+        int64_t t2c1v1 = 211;
+        m_source . CellDataEvent( 3, t2c1v1 );
+        uint8_t t2c2v1 = 221;
+        m_source . CellDataEvent( 4, t2c2v1 );
+    m_source . NextRowEvent ( 200 );
+
+        string t1c1v2 = "t1c1v2";
+        m_source . CellDataEvent( 1, t1c1v2 );
+        uint32_t t1c2v2 = 122;
+        m_source . CellDataEvent( 2, t1c2v2 );
+    m_source . NextRowEvent ( 100 );
+
+        int64_t t2c1v2 = 212;
+        m_source . CellDataEvent( 3, t2c1v2 );
+        uint8_t t2c2v2 = 222;
+        m_source . CellDataEvent( 4, t2c2v2 );
+    m_source . NextRowEvent ( 200 );
+
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+
+    REQUIRE_EQ ( t1c1v1,    GetValue<string>    ( DefaultTable, DefaultColumn, 1 ) );
+    REQUIRE_EQ ( t1c2v1,    GetValue<uint32_t>  ( DefaultTable, U32Column, 1 ) );
+    REQUIRE_EQ ( t2c1v1,    GetValue<int64_t>   ( Table2, I64Column, 1 ) );
+    REQUIRE_EQ ( t2c2v1,    GetValue<uint8_t>   ( Table2, U8Column, 1 ) );
+
+    REQUIRE_EQ ( t1c1v2,    GetValue<string>    ( DefaultTable, DefaultColumn, 2 ) );
+    REQUIRE_EQ ( t1c2v2,    GetValue<uint32_t>  ( DefaultTable, U32Column, 2 ) );
+    REQUIRE_EQ ( t2c1v2,    GetValue<int64_t>   ( Table2, I64Column, 2 ) );
+    REQUIRE_EQ ( t2c2v2,    GetValue<uint8_t>   ( Table2, U8Column, 2 ) );
+}
+
+FIXTURE_TEST_CASE ( AdditionalSchemaIncludePaths_Single, GeneralLoaderFixture )
+{
+    string schemaPath = "schema";
+    string includeName = string ( GetName() ) + ".inc.vschema";
+    string schemaIncludeFile = schemaPath + "/" + includeName;
+    CreateFile ( schemaIncludeFile, "table table1 #1.0.0 { column ascii column1; };" );
+    string schemaFile = string ( GetName() ) + ".vschema";
+    CreateFile ( schemaFile, string ( "include '" ) + includeName + "'; database database1 #1 { table table1 #1 TABLE1; } ;" );
+
+    SetUpStream ( GetName(), schemaFile, "database1" );
+
+    const char* table1 = "TABLE1";
+    const char* column1 = "column1";
+    m_source . NewTableEvent ( DefaultTableId, table1 );
+    m_source . NewColumnEvent ( DefaultColumnId, DefaultTableId, column1, 8 );
+    m_source . OpenStreamEvent();
+
+    string t1c1v1 = "t1c1v1";
+    m_source . CellDataEvent( DefaultColumnId, t1c1v1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        gl -> AddSchemaIncludePath ( schemaPath );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( t1c1v1, GetValue<string> ( table1, column1, 1 ) );
+
+    remove ( schemaIncludeFile . c_str() );
+    remove ( schemaFile . c_str() );
+}
+
+FIXTURE_TEST_CASE ( AdditionalSchemaIncludePaths_Multiple, GeneralLoaderFixture )
+{
+    string schemaPath = "schema";
+    string includeName = string ( GetName() ) + ".inc.vschema";
+    string schemaIncludeFile = schemaPath + "/" + includeName;
+    CreateFile ( schemaIncludeFile, "table table1 #1.0.0 { column ascii column1; };" );
+    string schemaFile = string ( GetName() ) + ".vschema";
+    CreateFile ( schemaFile, string ( "include '" ) + includeName + "'; database database1 #1 { table table1 #1 TABLE1; } ;" );
+
+    SetUpStream ( GetName(), schemaFile, "database1" );
+
+    const char* table1 = "TABLE1";
+    const char* column1 = "column1";
+    m_source . NewTableEvent ( DefaultTableId, table1 );
+    m_source . NewColumnEvent ( DefaultColumnId, DefaultTableId, column1, 8 );
+    m_source . OpenStreamEvent();
+
+    string t1c1v1 = "t1c1v1";
+    m_source . CellDataEvent( DefaultColumnId, t1c1v1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        gl -> AddSchemaIncludePath ( "path1" );
+        gl -> AddSchemaIncludePath ( string ( "path2:" ) + schemaPath + ":path3" );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( t1c1v1, GetValue<string> ( table1, column1, 1 ) );
+
+    remove ( schemaIncludeFile . c_str() );
+    remove ( schemaFile . c_str() );
+}
+
+FIXTURE_TEST_CASE ( AdditionalSchemaFiles_Single, GeneralLoaderFixture )
+{
+    string schemaPath = "schema";
+    string schemaFile = schemaPath + "/" + GetName() + ".vschema";
+    CreateFile ( schemaFile, "table table1 #1.0.0 { column ascii column1; }; database database1 #1 { table table1 #1 TABLE1; };" );
+
+    // here we specify a schema that does not exist but it's OK as long as we add a good schema later
+    SetUpStream ( GetName(), "does not exist", "database1" );
+
+    const char* table1 = "TABLE1";
+    const char* column1 = "column1";
+    m_source . NewTableEvent ( DefaultTableId, table1 );
+    m_source . NewColumnEvent ( DefaultColumnId, DefaultTableId, column1, 8 );
+    m_source . OpenStreamEvent();
+
+    string t1c1v1 = "t1c1v1";
+    m_source . CellDataEvent( DefaultColumnId, t1c1v1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        gl -> AddSchemaFile ( schemaFile );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( t1c1v1, GetValue<string> ( table1, column1, 1 ) );
+
+    remove ( schemaFile . c_str() );
+}
+
+FIXTURE_TEST_CASE ( AdditionalSchemaFiles_Multiple, GeneralLoaderFixture )
+{
+    string schemaPath = "schema";
+    string schemaFile1 = schemaPath + "/" + GetName() + "1.vschema";
+    CreateFile ( schemaFile1, "table table1 #1.0.0 { column ascii column1; };" );
+    string schemaFile2 = schemaPath + "/" + GetName() + "2.vschema";
+    CreateFile ( schemaFile2, "database database1 #1 { table table1 #1 TABLE1; };" ); // this file uses table1 defined in schemaFile1
+
+    string dbFile = string ( GetName() ) + ".db";
+
+    // here we specify a schema that does not exist but it's OK as long as we add a good schema later
+    m_source . SchemaEvent ( "does not exist", "database1" );
+    m_source . DatabaseEvent ( dbFile );
+
+    const char* table1 = "TABLE1";
+    const char* column1 = "column1";
+    m_source . NewTableEvent ( DefaultTableId, table1 );
+    m_source . NewColumnEvent ( DefaultColumnId, DefaultTableId, column1, 8 );
+    m_source . OpenStreamEvent();
+
+    string t1c1v1 = "t1c1v1";
+    m_source . CellDataEvent( DefaultColumnId, t1c1v1 );
+    m_source . NextRowEvent ( DefaultTableId  );
+    m_source . CloseStreamEvent();
+
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        gl -> AddSchemaFile ( schemaFile1 + ":garbage.vschema:" + schemaFile2 ); // some are good
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_EQ ( t1c1v1, GetValue<string> ( table1, column1, 1 ) );
+
+    remove ( schemaFile1 . c_str() );
+    remove ( schemaFile2 . c_str() );
+}
+
+FIXTURE_TEST_CASE ( ErrorMessage, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+    m_source . OpenStreamEvent();
+    m_source . ErrorMessageEvent ( "error message" );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), RC ( rcExe, rcFile, rcReading, rcError, rcExists ) ) );
+}
+
+FIXTURE_TEST_CASE ( ErrorMessage_Long, GeneralLoaderFixture )
+{
+    OpenStream_OneTableOneColumn ( GetName() );
+    m_source . OpenStreamEvent();
+    m_source . ErrorMessageEvent ( string ( 257, 'x' ) );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), RC ( rcExe, rcFile, rcReading, rcError, rcExists ) ) );
+}
+
+FIXTURE_TEST_CASE ( LogMessage, GeneralLoaderFixture )
+{
+//FullLog();
+// uncomment the line above to see the message on stdout, eg:
+// 2016-01-05T18:45:01 test-general-loader.1 info: general-loader: log from front-end-app: "some log message"
+
+    OpenStream_OneTableOneColumn ( GetName() );
+    const string SoftwareName = "front-end-app";
+    const string Version = "2.1.1";
+    m_source . SoftwareNameEvent ( SoftwareName, Version );
+    m_source . OpenStreamEvent();
+    m_source . LogMessageEvent ( "some log message" );
+    m_source . CloseStreamEvent();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+}
+
+
+FIXTURE_TEST_CASE ( ProgressMessage, GeneralLoaderFixture )
+{
+    // timestamp
+    time_t timestamp = time ( NULL );
+
+    OpenStream_OneTableOneColumn ( GetName() );
+    m_source . OpenStreamEvent ();
+    m_source . ProgMessageEvent ( 123, "progress message", timestamp, 2, 45 );
+    m_source . CloseStreamEvent ();
+
+    REQUIRE ( Run ( m_source . MakeSource (), 0 ) );
+}
+
+
+FIXTURE_TEST_CASE ( TargetOverride, GeneralLoaderFixture )
+{
+    SetUpStream ( GetName() );
+    m_source . OpenStreamEvent();
+    m_source . CloseStreamEvent();
+
+    string newTarget = string ( GetName() ) + "_override";
+    {
+        GeneralLoader* gl = MakeLoader ( m_source . MakeSource () );
+        gl -> SetTargetOverride ( newTarget );
+        REQUIRE ( RunLoader ( *gl, 0 ) );
+        delete gl;
+    } // make sure loader is destroyed (= db closed) before we reopen the database for verification
+
+    REQUIRE_THROW ( OpenDatabase() );       // the db from the instruction stream was not created
+    OpenDatabase ( newTarget . c_str() );   // did not throw => overridden target db opened successfully
+
+    // clean up
+    CloseDatabase();
+    KDirectoryRemove ( m_wd, true, newTarget . c_str() );
+}
+
+//////////////////////////////////////////// Main
+extern "C"
+{
+
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "test-general-loader";
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+//    TestEnv::verbosity = LogLevel::e_all;
+    KConfigDisableUserSettings();
+
+    ClearScratchDir();
+
+    GeneralLoaderFixture :: argv0 = argv[0];
+
+    TestSource::packed = false;
+    cerr << "Unpacked protocol: ";
+    rc_t rc = GeneralLoaderTestSuite(argc, argv);
+    if ( rc == 0 )
+    {
+        ClearScratchDir();
+
+        TestSource::packed = true;
+        cerr << "Packed protocol: ";
+        rc = GeneralLoaderTestSuite(argc, argv);
+    }
+
+    ClearScratchDir();
+
+    return rc;
+}
+
+}
+
diff --git a/test/general-loader/test-general-writer.cpp b/test/general-loader/test-general-writer.cpp
new file mode 100644
index 0000000..902b2eb
--- /dev/null
+++ b/test/general-loader/test-general-writer.cpp
@@ -0,0 +1,341 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "../../tools/general-loader/general-writer.hpp"
+
+#include <iostream>
+#include <string>
+#include <fstream>
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+
+namespace ncbi
+{
+    
+    GeneralWriter * testCreateGw ( const char * out_path, const char * schema_path, const char * software_name, const char * version )
+    {
+        GeneralWriter * ret;
+        if ( out_path == 0 )
+        {
+            // use stdout
+            ret = new GeneralWriter ( 1 );
+        }
+        else
+        {   
+            // use a file
+            ret = new GeneralWriter ( out_path );
+        }
+        
+        ret -> setRemotePath ( schema_path );
+        ret -> useSchema ( schema_path, std :: string ( "general_writer:test:db" ) );
+        ret -> setSoftwareName ( software_name, version );
+        
+        return ret;
+    }
+
+    int testAddTable ( GeneralWriter *gw )
+    {  
+        return gw -> addTable ( std :: string ( "table1" ) );
+    }
+
+    void testAddColumn ( GeneralWriter *gw, int table_id, const char *column_names [], int column_count, int *stream_ids )
+    {
+        for ( int i = 0; i < column_count; ++ i )
+        {
+            const char *name = column_names [ i ];
+            stream_ids [ i ] = gw -> addColumn ( table_id, name, 8, 0 ); // all columns are ascii for now
+        }
+    }
+
+    void testDBAddDatabase ( GeneralWriter *gw, const char *mbr_name, const char *db_name, uint8_t create_mode )
+    {
+        gw -> dbAddDatabase ( 0, mbr_name, db_name, create_mode );
+    }
+
+    void testDBAddTable ( GeneralWriter *gw, const char *mbr_name, const char *table_name, uint8_t create_mode )
+    {
+        gw -> dbAddDatabase ( 0, mbr_name, table_name, create_mode );
+    }
+
+    void testOpen ( GeneralWriter *gw )
+    {
+        gw -> open ();
+    }
+
+    void testColumnDefault ( GeneralWriter *gw, int stream_id )
+    {
+        const char *data = "some string as data";
+        gw -> columnDefault ( stream_id, 8, data, strlen ( data ) ); 
+    }
+
+    void testWrite ( GeneralWriter *gw, int table_id, int *stream_ids, int column_count, const char *file_names [] )
+    {
+        FILE **columns = ( FILE ** ) calloc ( column_count, sizeof *columns );
+        if ( columns == NULL )
+            throw "Failed to allocate memory";
+
+        char buffer [ 4096 ];
+        size_t buff_size = sizeof buffer;
+
+        // Populate array of file pointers
+        for ( int i = 0; i < column_count; ++ i )
+        { 
+            const char *name = file_names [ i ];
+            FILE *column = fopen ( name, "r" );
+            
+            if ( column == NULL )
+                throw "Error opening file";
+            
+            columns [ i ] = column;
+            
+            column = 0;
+        }
+        
+        // open the stream
+        gw -> open ();
+        
+        // set default values for each column
+        for ( int i = 0; i < column_count; ++ i )
+            gw -> columnDefault ( stream_ids [ i ], 8, "EOF", strlen ( "EOF" ) );
+
+        while ( 1 )
+        {
+            bool validColumn = false;
+            // write one line from each column
+            for ( int i = 0; i < column_count; ++ i )
+            {
+                // Skip any NULL entries in the FILE array
+                if ( columns [ i ] == NULL )
+                    continue;
+                
+                FILE *column = columns [ i ];
+                
+                if ( fgets ( buffer, buff_size, column ) ==  NULL )
+                {
+                    if ( ferror ( column ) )
+                    {
+                        fclose ( column );
+                        throw "Error reading from file";
+                    }
+                    
+                    // Found EOF while reading cell data
+                    // close FILE and set array pointer to NULL
+                    fclose ( column );
+                    column = 0;
+                    columns [ i ] = 0;
+                    continue;
+                }
+                
+                // found valid data, write line and go to next column
+                int elem_count = strlen ( ( const char * ) buffer );
+
+                // ensure there are no new lines at the end of the string
+                for ( int j = elem_count - 1; j >= 0; -- j )
+                {
+                    if ( buffer [ j ] == '\n' )
+                        -- elem_count;
+                }
+
+                gw -> write ( stream_ids [ i ], 8, buffer, elem_count );
+                validColumn = true;
+            }
+            
+            if ( ! validColumn )
+                break;
+
+            // go to the next row
+            gw -> nextRow ( table_id );
+        }
+        free ( columns );
+    }
+
+    void testAddDBMetadataNode ( GeneralWriter *gw, const char * node, const char *value )
+    {
+        gw -> setDBMetadataNode ( 0, node, value );
+    }
+
+    void testAddTblMetadataNode ( GeneralWriter *gw, const char * node, const char *value )
+    {
+        gw -> setTblMetadataNode ( 1, node, value );
+    }
+
+    void testAddColMetadataNode ( GeneralWriter *gw, const char * node, const char *value )
+    {
+        gw -> setColMetadataNode ( 1, node, value );
+    }
+
+    void testProgMsg ( GeneralWriter *gw, const char *name, 
+                       uint32_t version, uint64_t done, uint64_t total )
+    {
+        gw -> progMsg ( name, version, done, total );
+    }
+
+    void testEndStream ( GeneralWriter *gw )
+    {
+        gw -> endStream ();
+        
+        try
+        {
+            std :: cerr << "Attempting add table after endStream" << std :: endl;            
+            gw -> addTable ( "table1" );
+        }
+        catch ( const char x [] )
+        {
+            std :: cerr << x << std :: endl;
+            std :: cerr << "addTable correctly failed" << std :: endl;
+        }
+    }
+
+    void runTest ( int column_count, const char * columns [], const char *outfile, const char * schema_path )
+    {
+        GeneralWriter *gw;
+        try
+        {
+            const char * column_names [ column_count ];
+
+            for ( int i = 0; i < column_count ; ++ i )
+                column_names [ i ] = columns [ i ];
+
+            gw = testCreateGw ( outfile, schema_path, "softwarename", "2" );
+            std :: cerr << "CreateGw Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+                        
+            int table_id = testAddTable ( gw );
+            std :: cerr << "addTable Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            int stream_ids [ column_count ];
+            testAddColumn ( gw, table_id, column_names, column_count, stream_ids ); 
+            std :: cerr << "addColumn Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testDBAddDatabase ( gw, "member_name", "db_name", 1 );
+            std :: cerr << "dbAddDatabase Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testDBAddTable ( gw, "member_name", "table_name", 1 );
+            std :: cerr << "dbAddTable Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testWrite ( gw, table_id, stream_ids, column_count, column_names );
+            std :: cerr << "write Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testAddDBMetadataNode ( gw, "db_metadata_node", "01a2b3c4d" );
+            std :: cerr << "setDBMetadataNode Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+            testAddTblMetadataNode ( gw, "tbl_metadata_node", "01a2b3c4d" );
+            std :: cerr << "setTblMetadataNode Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+            testAddColMetadataNode ( gw, "col_metadata_node", "01a2b3c4d" );
+            std :: cerr << "setColMetadataNode Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testProgMsg ( gw, "name", 1, 54768, 64000 );
+            std :: cerr << "setProgMsg Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+            testEndStream ( gw );
+            std :: cerr << "endStream Success" << std :: endl;
+            std :: cerr << "---------------------------------" << std :: endl;
+
+        }
+        catch ( ... )
+        {
+            delete gw;
+            throw;
+        }
+        delete gw;
+    }
+}
+
+const char * getArg ( const char*  &arg, int & i, int argc, char * argv [] )
+{
+    if ( arg [ 1 ] != 0 )
+    {
+        const char * next = arg + 1;
+        arg = "\0";
+        return next;
+    }
+    
+    if ( ++ i == argc )
+        throw "Missing argument";
+    
+    return argv [ i ];
+}
+
+int main ( int argc, char * argv [] )
+{
+    int status = 1;
+    
+    try
+    {
+
+        const char *outfile = "./db/";
+        const char *schema_path = "./test-general-writer.vschema";
+        int num_columns = 0;
+    
+        for ( int i = 1; i < argc; ++ i )
+        {
+            const char * arg = argv [ i ];
+            if ( arg [ 0 ] != '-' )
+            {
+                // have an input column
+                argv [ num_columns ++ ] = ( char* ) arg;
+            }
+            else do switch ( ( ++ arg ) [ 0 ] )
+            {
+                case 'o':
+                    outfile = getArg ( arg, i, argc, argv );
+                    break;
+                case 's':
+                    schema_path = getArg ( arg, i, argc, argv );
+                default:
+                    throw "Invalid argument";
+            }
+            while ( arg [ 1 ] != 0 );
+        }
+        
+        if ( num_columns == 0 )
+        {
+            const char * columns [ 2 ] = { "input/column01", "input/column02" };
+            ncbi :: runTest ( 2, columns, outfile, schema_path );
+        }
+        else
+        {
+            ncbi :: runTest ( num_columns, ( const char ** ) argv, outfile, schema_path );
+        }
+        
+        status = 0;
+    }
+    catch ( const char x [] )
+    {
+        std :: cerr << x << std :: endl;
+    }
+    
+    return status;
+}
diff --git a/test/general-loader/test-gw-dumper.cpp b/test/general-loader/test-gw-dumper.cpp
new file mode 100644
index 0000000..6a6347d
--- /dev/null
+++ b/test/general-loader/test-gw-dumper.cpp
@@ -0,0 +1,80 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _cpp_gw_dumper_test_
+#define _cpp_gw_dumper_test_
+
+#ifndef _hpp_general_writer_
+#include "general-writer.hpp"
+#endif
+
+#include <kfs/defs.h>
+
+namespace ncbi
+{
+    static
+    void run ()
+    {
+        GeneralWriter gw ( "test-gw-dumper.gw" );
+
+        gw . setRemotePath ( "remote-path" );
+        gw . setSoftwareName ( "gw-dumper-test", "0.9.0" );
+        gw . useSchema ( "schemafile.vschema", "db_spec.schema" );
+
+        int db_id = gw . dbAddDatabase ( 0, "db1", "db1", kcmCreate );
+        gw . setDBMetadataNode ( db_id, "node/path", "value01" );
+
+        int tbl_id = gw . dbAddTable ( db_id, "tbl1", "tbl1", kcmCreate );
+        gw . setTblMetadataNode ( tbl_id, "tbl/path", "value01" );
+
+        int col_id = gw . addColumn ( tbl_id, "col1", 64, 0 );
+        gw . setColMetadataNode ( col_id, "col/path", "value01" );
+
+        tbl_id = gw . addTable ( "tbl2" );
+        gw . setTblMetadataNode ( tbl_id, "tbl2/path", "value02" );
+    }
+}
+
+
+int main ( int argc, char * argv [] )
+{
+    try
+    {
+        ncbi :: run ();
+    }
+    catch ( const char x [] )
+    {
+        std :: cerr << "caught exception: " << x << '\n';
+    }
+    catch ( ... )
+    {
+        std :: cerr << "caught exception\n";
+    }
+
+    return 0;
+}
+
+#endif //_cpp_gw_dumper_test_
diff --git a/test/general-loader/testsource.cpp b/test/general-loader/testsource.cpp
new file mode 100644
index 0000000..ccbeae5
--- /dev/null
+++ b/test/general-loader/testsource.cpp
@@ -0,0 +1,758 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Test stream creation class for unit-testing General Loader
+*/
+
+#include "testsource.hpp"
+
+#include "../../tools/general-loader/general-loader.hpp"
+
+#include <kfs/ramfile.h>
+
+#include <sysalloc.h>
+
+#include <cstring>
+
+#include <stdexcept> 
+
+using namespace std;
+using namespace ncbi;
+
+/////////////////////////////////////////////// TestSource::Buffer
+
+TestSource::Buffer::Buffer ( const string& p_signature, uint32_t p_endness, uint32_t p_version, bool p_packing )
+:   m_buffer ( 0 ), m_bufSize ( 0 )
+{
+    init ( m_header );
+    strncpy ( m_header . dad . signature, p_signature . c_str(), sizeof m_header . dad . signature );
+    m_header . dad . endian   = p_endness;
+    m_header . dad . version  = p_version;
+    m_header . packing = p_packing ? 1 : 0;
+    
+    Write ( & m_header, m_header . dad . hdr_size ); 
+}
+    
+TestSource::Buffer::~Buffer ()
+{
+    free ( m_buffer );
+}
+
+void 
+TestSource::Buffer::Save ( std::ostream& p_out ) const 
+{ 
+    p_out . write ( m_buffer, m_bufSize ); 
+}
+    
+void 
+TestSource::Buffer::Write ( const void * p_data, size_t p_size )
+{
+    m_buffer = ( char * ) realloc ( m_buffer, m_bufSize + p_size );
+    if ( m_buffer == 0 )
+        throw logic_error ( "TestSource::Buffer::Write: realloc failed" );
+        
+    memmove ( m_buffer + m_bufSize, p_data, p_size );
+    m_bufSize += p_size;
+}
+
+void 
+TestSource::Buffer::Pad ( size_t p_alignment )
+{
+    size_t newSize = ( m_bufSize + p_alignment - 1 ) / p_alignment;
+    newSize *= p_alignment;
+    if ( m_bufSize != newSize ) 
+    {
+        m_buffer = ( char * ) realloc ( m_buffer, newSize );
+        if ( m_buffer == 0 )
+            throw logic_error ( "TestSource::Buffer::Write: realloc failed" );
+        memset ( m_buffer + m_bufSize, 0, newSize - m_bufSize );
+        m_bufSize = newSize;
+    }
+}
+
+void  
+TestSource::Buffer::Write ( const TestSource::Event& p_event )
+{
+    if ( m_header . packing )
+    {
+        WritePacked ( p_event );
+    }
+    else
+    {
+        WriteUnpacked ( p_event );
+    }
+}
+
+void    
+TestSource::Buffer::WriteUnpacked ( const TestSource::Event& p_event )
+{
+    Pad ();
+    switch ( p_event . m_event )
+    {
+    case evt_use_schema:
+    case evt_software_name:
+    case evt_db_metadata_node:
+    case evt_tbl_metadata_node:
+    case evt_col_metadata_node:
+        {   
+            gw_2string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_size1 ( hdr, p_event . m_str1 . size() );
+            set_size2 ( hdr, p_event . m_str2 . size() );
+            
+            Write ( & hdr, sizeof hdr ); 
+            Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+            Write ( p_event . m_str2 . c_str(), p_event . m_str2 . size() ); 
+        }
+        break;
+        
+    case evt_remote_path:
+    case evt_new_table:
+    case evt_logmsg:
+    case evt_errmsg:
+        {   
+            gw_1string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_size ( hdr, p_event . m_str1 . size () );
+            
+            Write ( & hdr, sizeof hdr ); 
+            Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        }
+        break;
+    case evt_progmsg:
+        gw_status_evt_v1 hdr;
+        init ( hdr, p_event . m_id1 , evt_progmsg );
+        set_version ( hdr, p_event . m_uint32_2 );
+        set_timestamp ( hdr, p_event . m_uint32 );
+        set_pid ( hdr, p_event . m_id1 );
+        set_size ( hdr, p_event . m_str1 . size () );
+        set_percent ( hdr, p_event . m_uint32_3 );
+
+        Write ( &hdr . dad, sizeof hdr );
+        Write ( p_event . m_str1 . c_str (), p_event . m_str1 . size () );
+
+        break;
+        
+    case evt_new_column :
+        {
+            gw_column_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_table_id ( hdr, p_event . m_id2 );
+            set_elem_bits ( hdr, p_event . m_uint32 );
+            set_name_size ( hdr, p_event . m_str1 . size () );
+            
+            Write ( & hdr, sizeof hdr );
+            Write ( p_event . m_str1 . c_str (), p_event . m_str1 . size () );
+        }
+        break;
+        
+    case evt_add_mbr_db:
+    case evt_add_mbr_tbl:
+    {
+        gw_add_mbr_evt_v1 hdr;
+        init ( hdr, p_event . m_id1, p_event . m_event );
+
+        set_db_id ( hdr, p_event . m_id2 );
+        set_size1 ( hdr, p_event . m_str1 . size() );
+        set_size2 ( hdr, p_event . m_str2 . size() );
+        set_create_mode ( hdr, p_event . m_uint8 );
+            
+        Write ( & hdr, sizeof hdr );
+        Write ( p_event . m_str1 . data (), p_event . m_str1 . size () );
+        Write ( p_event . m_str2 . data (), p_event . m_str2 . size () );
+        
+    }
+    break;
+
+    case evt_open_stream:
+    case evt_end_stream:
+        {
+            gw_evt_hdr_v1 hdr;
+            init ( hdr, 0, p_event . m_event );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+
+    case evt_cell_data :
+    case evt_cell_default :
+        {
+            gw_data_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_elem_count ( hdr, p_event . m_uint32 );
+            
+            Write ( & hdr, sizeof hdr );
+            Write ( p_event . m_val . data(), p_event . m_val . size() );
+        }
+        break;
+        
+    case evt_next_row:
+    case evt_empty_default :
+        {
+            gw_evt_hdr_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+        
+    case evt_move_ahead:
+        {
+            gw_move_ahead_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_nrows ( hdr, p_event . m_uint64 );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+        
+    default:
+        throw logic_error ( "TestSource::Buffer::WriteUnpacked: event not implemented" );
+    }
+}
+    
+void    
+TestSource::Buffer::WritePacked ( const TestSource::Event& p_event )
+{
+    switch ( p_event . m_event )
+    {
+    case evt_use_schema:
+    case evt_software_name:
+    case evt_db_metadata_node:
+    case evt_tbl_metadata_node:
+    case evt_col_metadata_node:
+        if ( p_event . m_str1 . size () <= GeneralLoader :: MaxPackedString && p_event . m_str2 . size () <= GeneralLoader :: MaxPackedString )
+        {   
+            gwp_2string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+        
+            set_size1 ( hdr, p_event . m_str1 . size() );
+            set_size2 ( hdr, p_event . m_str2 . size() );
+
+            Write ( & hdr, sizeof hdr ); 
+        }
+        else
+        {   
+            gwp_2string_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_use_schema2 );
+        
+            set_size1 ( hdr, p_event . m_str1 . size() );
+            set_size2 ( hdr, p_event . m_str2 . size() );
+
+            Write ( & hdr, sizeof hdr ); 
+        }
+        Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        Write ( p_event . m_str2 . c_str(), p_event . m_str2 . size() ); 
+        break;
+        
+    //TODO: the following 3 cases are almost identical - refactor
+    case evt_remote_path:
+        if ( p_event . m_str1 . size () <= GeneralLoader :: MaxPackedString )
+        {   
+            gwp_1string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_remote_path );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        else
+        {
+            gwp_1string_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_remote_path2 );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        break;
+    case evt_new_table:
+        if ( p_event . m_str1 . size () <= GeneralLoader :: MaxPackedString )
+        {   
+            gwp_1string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_new_table );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        else
+        {
+            gwp_1string_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_new_table2 );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        break;
+    case evt_logmsg:
+        {
+            gwp_1string_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        break;
+    case evt_errmsg:
+        if ( p_event . m_str1 . size () <= GeneralLoader :: MaxPackedString )
+        {   
+            gwp_1string_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_errmsg );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        else
+        {
+            gwp_1string_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_errmsg2 );
+            set_size ( hdr, p_event . m_str1 . size () );
+            Write ( & hdr, sizeof hdr ); 
+        }
+        Write ( p_event . m_str1 . c_str(), p_event . m_str1 . size() ); 
+        break;
+    case evt_progmsg:
+        gwp_status_evt_v1 hdr;
+        init ( hdr, p_event . m_id1 , evt_progmsg );
+        set_version ( hdr, p_event . m_uint32_2 );
+        set_timestamp ( hdr, p_event . m_uint32 );
+        set_pid ( hdr, ( uint16_t ) p_event . m_id1 );
+        set_size ( hdr, p_event . m_str1 . size () );
+        set_percent ( hdr, ( uint8_t ) p_event . m_uint32_3 );
+
+        Write ( &hdr . dad, sizeof hdr );
+        Write ( p_event . m_str1 . c_str (), p_event . m_str1 . size () );
+        break;
+    case evt_new_column :
+        {
+            gwp_column_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_table_id ( hdr, p_event . m_id2 );
+            set_elem_bits ( hdr, p_event . m_uint32 );
+            hdr . flag_bits = p_event . m_uint8;
+            set_name_size ( hdr, p_event . m_str1 . size () );
+            
+            Write ( & hdr, sizeof hdr );
+            Write ( p_event . m_str1 . c_str (), p_event . m_str1 . size () );
+        }
+        break;
+
+    case evt_add_mbr_db:
+    case evt_add_mbr_tbl:
+    {
+        gwp_add_mbr_evt_v1 hdr;
+        init ( hdr, p_event . m_id1, p_event . m_event );
+
+        set_db_id ( hdr, p_event . m_id2 );
+        set_size1 ( hdr, p_event . m_str1 . size() );
+        set_size2 ( hdr, p_event . m_str2 . size() );
+        set_create_mode ( hdr, p_event . m_uint8 );
+            
+        Write ( & hdr, sizeof hdr );
+        Write ( p_event . m_str1 . data (), p_event . m_str1 . size () );
+        Write ( p_event . m_str2 . data (), p_event . m_str2 . size () );
+        
+    }
+    break;
+        
+    case evt_open_stream:
+    case evt_end_stream:
+        {
+            gwp_evt_hdr_v1 hdr;
+            init ( hdr, 0, p_event . m_event );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+
+    case evt_cell_data :
+        if ( p_event . m_val . size () <= GeneralLoader :: MaxPackedString )
+        {
+            gwp_data_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_cell_data );
+            // in the packed message, we specify the number of bytes in the cell
+            set_size ( hdr, p_event . m_val . size() ); 
+            
+            Write ( & hdr, sizeof hdr );
+        }
+        else
+        {
+            gwp_data_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_cell_data2 );
+            // in the packed message, we specify the number of bytes in the cell
+            set_size ( hdr, p_event . m_val . size() ); 
+            
+            Write ( & hdr, sizeof hdr );
+        }
+        Write ( p_event . m_val . data(), p_event . m_val . size() );
+        break;
+    case evt_cell_default :
+        if ( p_event . m_val . size () <= GeneralLoader :: MaxPackedString )
+        {
+            gwp_data_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_cell_default ); //TODO: this is the only difference from evt_cell_data - refactor
+            // in the packed message, we specify the number of bytes in the cell
+            set_size ( hdr, p_event . m_val . size() ); 
+            
+            Write ( & hdr, sizeof hdr );
+        }
+        else
+        {
+            gwp_data_evt_U16_v1 hdr;
+            init ( hdr, p_event . m_id1, evt_cell_default2 ); //TODO: this is the only difference from evt_cell_data - refactor
+            // in the packed message, we specify the number of bytes in the cell
+            set_size ( hdr, p_event . m_val . size() ); 
+            
+            Write ( & hdr, sizeof hdr );
+        }
+        Write ( p_event . m_val . data(), p_event . m_val . size() );
+        break;
+        
+    case evt_next_row:
+    case evt_empty_default :
+        {
+            gwp_evt_hdr_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+        
+    case evt_move_ahead:
+        {
+            gwp_move_ahead_evt_v1 hdr;
+            init ( hdr, p_event . m_id1, p_event . m_event );
+            set_nrows ( hdr, p_event . m_uint64 );
+            Write ( & hdr, sizeof hdr );
+        }
+        break;
+        
+    default:
+        throw logic_error ( "TestSource::Buffer::WritePacked: event not implemented" );
+    }
+}
+
+/////////////////////////////////////// TestSource
+
+bool TestSource::packed = false;
+
+TestSource::TestSource ( const string& p_signature, uint32_t p_endness, uint32_t p_version )
+:   m_buffer ( new Buffer ( p_signature, p_endness, p_version, packed ) )
+{
+}
+
+TestSource::~TestSource()
+{
+    delete m_buffer;
+}
+
+const struct KFile * 
+TestSource::MakeSource ()
+{
+    const struct KFile * ret;
+    if ( KRamFileMakeRead ( & ret, 
+                            const_cast < char* > ( m_buffer -> GetData() ), 
+                            m_buffer -> GetSize() ) != 0 
+         || ret == 0 )
+        throw logic_error ( "TestSource::MakeSource KRamFileMakeRead failed" );
+        
+    return ret;
+}
+
+void 
+TestSource::SchemaEvent ( const std::string& p_schemaFile, const std::string& p_schemaName )
+{
+    m_buffer -> Write ( Event ( evt_use_schema, p_schemaFile, p_schemaName ) );
+}
+
+void 
+TestSource::DatabaseEvent ( const std::string& p_databaseName )
+{
+    m_buffer -> Write ( Event ( evt_remote_path, p_databaseName ) );
+    m_database = p_databaseName;
+}
+
+void 
+TestSource::SoftwareNameEvent ( const std::string& p_softwareName, const std::string& p_version )
+{
+    m_buffer -> Write ( Event ( evt_software_name, p_softwareName, p_version ) );
+}
+
+void
+TestSource::DBMetadataNodeEvent ( ObjectId p_id, const std::string& p_metadataNode, const std::string& p_value )
+{
+    m_buffer -> Write ( Event ( evt_db_metadata_node, p_id, p_metadataNode, p_value ) );
+}
+
+void
+TestSource::TblMetadataNodeEvent ( TableId p_id, const std::string& p_metadataNode, const std::string& p_value )
+{
+    m_buffer -> Write ( Event ( evt_tbl_metadata_node, p_id, p_metadataNode, p_value ) );
+}
+
+void
+TestSource::ColMetadataNodeEvent ( ColumnId p_id, const std::string& p_metadataNode, const std::string& p_value )
+{
+    m_buffer -> Write ( Event ( evt_col_metadata_node, p_id, p_metadataNode, p_value ) );
+}
+
+void 
+TestSource::NewTableEvent ( TableId p_id, const std::string& p_table )
+{
+    m_buffer -> Write ( Event ( evt_new_table, p_id, p_table ) );
+}
+
+void 
+TestSource::NewColumnEvent ( ColumnId p_columnId, TableId p_tableId, const std::string& p_column, uint32_t p_elemBits, bool p_compresssed )
+{
+    m_buffer -> Write ( Event ( evt_new_column, p_columnId, p_tableId, p_column, p_elemBits, p_compresssed ? 1 : 0 ) );
+}
+
+void
+TestSource::DBAddDatabaseEvent ( int p_db_id, int p_parent_id, const std :: string &p_mbr_name, const std :: string &p_db_name, uint8_t p_create_mode )
+{
+    m_buffer -> Write ( Event ( evt_add_mbr_db, p_db_id, p_parent_id, p_mbr_name, p_db_name, p_create_mode ) );
+}
+
+void
+TestSource::DBAddTableEvent ( int p_tbl_id, int p_db_id, const std :: string &p_mbr_name, const  std :: string &p_table_name, uint8_t p_create_mode )
+{
+    m_buffer -> Write ( Event ( evt_add_mbr_tbl, p_tbl_id, p_db_id, p_mbr_name, p_table_name, p_create_mode ) );
+}
+    
+void 
+TestSource::OpenStreamEvent ()
+{
+    m_buffer -> Write ( Event ( evt_open_stream ) );
+}
+
+void 
+TestSource::CloseStreamEvent ()
+{
+    m_buffer -> Write ( Event ( evt_end_stream ) );
+}
+
+void 
+TestSource::NextRowEvent ( TableId p_id )
+{
+    m_buffer -> Write ( Event ( evt_next_row, p_id ) );
+}
+
+void 
+TestSource::MoveAheadEvent ( TableId p_id, uint64_t p_count )
+{
+    m_buffer -> Write ( Event ( evt_move_ahead, p_id, p_count ) );
+}
+
+template<> void TestSource::CellDataEvent ( ColumnId p_columnId, string p_value )
+{
+    m_buffer -> Write ( Event ( evt_cell_data, p_columnId, ( uint32_t ) p_value . size(), ( uint32_t ) p_value . size(), p_value . c_str() ) );
+}
+
+void 
+TestSource::CellDefaultEvent ( ColumnId p_columnId, const string& p_value )
+{
+    m_buffer -> Write ( Event ( p_value . size() == 0 ? evt_empty_default : evt_cell_default,
+                                p_columnId, 
+                                ( uint32_t ) p_value . size(), 
+                                ( uint32_t ) p_value . size(), 
+                                p_value . c_str() ) );
+}
+
+void 
+TestSource::CellEmptyDefaultEvent ( ColumnId p_columnId )
+{
+    m_buffer -> Write ( Event ( evt_empty_default, p_columnId, 0, 0, 0 ) );
+}
+
+void 
+TestSource::CellDefaultEvent ( ColumnId p_columnId, uint32_t p_value )
+{
+    m_buffer -> Write ( Event ( evt_cell_default, p_columnId, 1,  sizeof p_value, (const void*)&p_value ) );
+}
+void 
+TestSource::CellDefaultEvent ( ColumnId p_columnId, bool p_value )
+{
+    m_buffer -> Write ( Event ( evt_cell_default, p_columnId, 1, sizeof p_value, (const void*)&p_value ) );
+}
+
+void 
+TestSource::ErrorMessageEvent ( const string& p_msg )
+{
+    m_buffer -> Write ( Event ( evt_errmsg, p_msg ) );
+}
+
+void 
+TestSource::LogMessageEvent ( const string& p_msg )
+{
+    m_buffer -> Write ( Event ( evt_logmsg, p_msg ) );
+}
+
+void
+TestSource::ProgMessageEvent ( ProcessId p_pid, const std :: string& p_name, uint32_t p_timestamp, uint32_t p_version, uint32_t p_percent )
+{
+    m_buffer -> Write ( Event ( evt_progmsg, p_pid, p_name, p_timestamp, p_version, p_percent ) );
+}
+
+
+void 
+TestSource::SaveBuffer ( const char* p_filename ) const
+{
+    ofstream out ( p_filename );
+    m_buffer -> Save ( out );
+}
+
+TestSource::Event::Event ( gw_evt_id p_event )
+:   m_event ( p_event ),
+    m_id1 ( 0 ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 )
+{
+}
+        
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1 )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1, uint64_t p_uint64 )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( p_uint64 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_id2, const std::string& p_str, uint32_t p_uint32, uint8_t p_uint8 )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( p_id2 ),
+    m_uint8 ( p_uint8 ),
+    m_uint32 ( p_uint32 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id, const std::string& p_str1 )
+:   m_event ( p_event ),
+    m_id1 ( p_id ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, const std::string& p_str1 )
+:   m_event ( p_event ),
+    m_id1 ( 0 ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, const std::string& p_str1, const std::string& p_str2 )
+:   m_event ( p_event ),
+    m_id1 ( 0 ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 ),
+    m_str2 ( p_str2 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id, const std::string& p_str1, const std::string& p_str2 )
+:   m_event ( p_event ),
+    m_id1 ( p_id ),
+    m_id2 ( 0 ),
+    m_uint8 ( 0 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 ),
+    m_str2 ( p_str2 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_elem_count, uint32_t p_val_bytes, const void* p_val )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( 0 ),
+    m_uint32 ( p_elem_count ),
+    m_uint64 ( 0 )
+{
+    const char* v = ( const char* ) p_val;
+    for ( size_t i = 0; i != p_val_bytes; ++i )
+    {
+        m_val . push_back ( v [ i ] );
+    }
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1, const std::string& p_str1, const std::string& p_str2, uint8_t p_uint8 )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( 0 ),
+    m_uint8 ( p_uint8 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 ),
+    m_str2 ( p_str2 )
+{
+}
+
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_pid, const std :: string& p_name, uint32_t p_timestamp, uint32_t p_version, uint32_t p_percent )
+:  m_event ( p_event ),
+   m_id1 ( p_pid ),
+   m_id2 ( 0 ),
+   m_uint8 ( 0 ),
+   m_uint32 ( p_timestamp ),
+   m_uint32_2 ( p_version ),
+   m_uint32_3 ( p_percent ),
+   m_str1 ( p_name )
+{
+}
+TestSource::Event::Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_id2, const std::string& p_str1, const std::string& p_str2, uint8_t p_uint8 )
+:   m_event ( p_event ),
+    m_id1 ( p_id1 ),
+    m_id2 ( p_id2 ),
+    m_uint8 ( p_uint8 ),
+    m_uint32 ( 0 ),
+    m_uint64 ( 0 ),
+    m_str1 ( p_str1 ),
+    m_str2 ( p_str2 )
+{
+}
+
+
+TestSource::Event::~Event()
+{
+}
diff --git a/test/general-loader/testsource.hpp b/test/general-loader/testsource.hpp
new file mode 100644
index 0000000..b6c3694
--- /dev/null
+++ b/test/general-loader/testsource.hpp
@@ -0,0 +1,177 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _sra_tools_test_hpp_testsource
+#define _sra_tools_test_hpp_testsource
+
+/**
+* Test stream creation class for unit-testing General Loader
+*/
+
+#include <sysalloc.h>
+
+#include <kfc/defs.h>
+
+#include <kfs/file.h>
+
+#include "../../tools/general-loader/general-writer.h"
+
+#include <string>
+#include <vector>
+#include <fstream>
+
+class TestSource
+{
+public:
+    typedef uint32_t TableId;
+    typedef uint32_t ColumnId;
+    typedef uint32_t ObjectId;
+    typedef uint32_t ProcessId;
+    
+public:
+    static bool packed;
+
+public:
+    TestSource( const std:: string& p_signature = GW_SIGNATURE, 
+                uint32_t p_endness = GW_GOOD_ENDIAN, 
+                uint32_t p_version  = GW_CURRENT_VERSION );
+    
+    ~TestSource();
+    
+    const std::string & GetDatabaseName() { return m_database; }
+
+    const struct KFile * MakeSource ();
+    
+    void SchemaEvent ( const std::string& p_schemaFile, const std::string& p_schemaName );
+    void DatabaseEvent ( const std::string& p_databaseName );
+    void SoftwareNameEvent ( const std::string& p_softwareName, const std::string& p_version );
+    
+    void DBMetadataNodeEvent  ( ObjectId p_id, const std::string& p_metadataNode, const std::string& p_value );
+    void TblMetadataNodeEvent ( TableId p_id, const std::string& p_metadataNode, const std::string& p_value );
+    void ColMetadataNodeEvent ( ColumnId p_id, const std::string& p_metadataNode, const std::string& p_value );
+    
+    void NewTableEvent ( TableId p_id, const std::string& p_table );
+    void NewColumnEvent ( ColumnId p_columnId, TableId p_tableId, 
+                          const std::string& p_column, uint32_t p_elemBits, bool p_compresssed = false );
+                          
+    void DBAddDatabaseEvent ( int p_db_id, int p_parent_id, const std :: string &p_mbr_name, 
+                              const std :: string &p_db_name, uint8_t p_create_mode );
+    void DBAddTableEvent ( int ptbl_id, int p_db_id, const std :: string &p_mbr_name, 
+                           const std :: string &p_table_name, uint8_t p_create_mode );
+                           
+    void OpenStreamEvent ();
+    void CloseStreamEvent ();
+    void NextRowEvent ( TableId p_id );
+    void MoveAheadEvent ( TableId p_id, uint64_t p_count );
+    void CellDefaultEvent ( ColumnId p_columnId, const std :: string& p_value );
+    void CellDefaultEvent ( ColumnId p_columnId, uint32_t p_value );
+    void CellDefaultEvent ( ColumnId p_columnId, bool p_value );
+    void CellEmptyDefaultEvent ( ColumnId p_columnId );
+
+    void ErrorMessageEvent ( const std :: string& p_msg );
+    void LogMessageEvent ( const std :: string& p_msg );
+    void ProgMessageEvent ( ProcessId p_pid, const std :: string& p_name, uint32_t p_timestamp, uint32_t p_version, uint32_t p_percent );
+    
+    template < typename T > void CellDataEvent ( ColumnId p_columnId, T p_value )
+    {
+        m_buffer -> Write ( Event ( evt_cell_data, p_columnId, 1, sizeof p_value, (const void*)&p_value ) );
+    }   // see below for specialization for std::string (follows the class definition)
+   
+    // use this to capture stream contents to be used in cmdline tests
+    void SaveBuffer ( const char* p_filename ) const;
+    
+    void CellDataEventRaw ( ColumnId p_columnId, uint32_t p_elemCount, const void* p_value, uint32_t p_size )
+    {
+        m_buffer -> Write ( Event ( evt_cell_data, p_columnId, p_elemCount, p_size, p_value ) );
+    }   
+
+private:    
+    struct Event 
+    {
+        Event ( gw_evt_id p_event );
+        Event ( gw_evt_id p_event, const std::string& p_str1 );
+        Event ( gw_evt_id p_event, const std::string& p_str1, const std::string& p_str2 );
+        Event ( gw_evt_id p_event, uint32_t p_id1 );
+        Event ( gw_evt_id p_event, uint32_t p_id1, uint64_t p_uint64 );
+        Event ( gw_evt_id p_event, uint32_t p_id1, const std::string& p_str1 );
+        Event ( gw_evt_id p_event, uint32_t p_id, const std::string& p_str1, const std::string& p_str2 );
+        Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_elem_count, uint32_t p_val_bytes, const void* p_val );
+        Event ( gw_evt_id p_event, uint32_t p_id1, const std::string& p_str1, const std::string& p_str2, uint8_t p_uint8 );
+        Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_id2, const std::string& p_str, uint32_t p_uint32, uint8_t p_uint8 );
+        Event ( gw_evt_id p_event, uint32_t p_pid, const std :: string& p_name, uint32_t p_timestamp, uint32_t p_version, uint32_t percent );
+        Event ( gw_evt_id p_event, uint32_t p_id1, uint32_t p_id2, const std::string& p_str1, const std::string& p_str2, uint8_t p_uint8 );
+        
+        ~Event();
+        
+        gw_evt_id               m_event;
+        uint32_t                m_id1;
+        uint32_t                m_id2;
+        
+        uint8_t                 m_uint8;
+        uint32_t                m_uint32;
+        uint32_t                m_uint32_2;
+        uint32_t                m_uint32_3;
+        uint64_t                m_uint64;
+        
+        std :: string           m_str1;
+        std :: string           m_str2;
+        std :: vector < char >  m_val;
+    };
+    
+    class Buffer
+    {
+    public:
+        Buffer(const std :: string& p_signature, uint32_t p_endness, uint32_t p_version, bool p_packing);
+        ~Buffer();
+
+        void Write ( const Event& );
+        
+        void Save ( std::ostream& p_out ) const;
+        
+        const char* GetData()   { return m_buffer; }
+        size_t GetSize() const  { return m_bufSize; }
+        
+    private:    
+        void WritePacked ( const Event& );
+        void WriteUnpacked ( const Event& );
+        
+        void Write( const void * p_data, size_t p_size );
+        void Pad ( size_t p_alignment = 4 );
+        
+        char*   m_buffer;
+        size_t  m_bufSize;
+        
+        gw_header_v1 m_header;
+    };
+
+    std :: string m_database;
+    
+    Buffer*         m_buffer;
+};
+
+template<> void TestSource::CellDataEvent ( ColumnId p_columnId, std :: string p_value );
+
+#endif
diff --git a/test/kar/Makefile b/test/kar/Makefile
new file mode 100644
index 0000000..1745dfc
--- /dev/null
+++ b/test/kar/Makefile
@@ -0,0 +1,56 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/kar
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+runtests: kar_test 
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+kar_test: kar-test.sh
+	@ echo "Starting kar tests..."
+	@ bash kar-test.sh $(BINDIR)/kar
+
+kar:
+	rm -rf actual
+	mkdir -p actual
+	$(BINDIR)/kar -c actual/1.0.kar -d input/1.0; $(BINDIR)/kar -t actual/1.0.kar >actual/1.0.stdout; diff expected/1.0.stdout actual/1.0.stdout
+	rm -rf actual
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/kar
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
diff --git a/test/kar/acc.txt b/test/kar/acc.txt
new file mode 100644
index 0000000..5c539f2
--- /dev/null
+++ b/test/kar/acc.txt
@@ -0,0 +1,756 @@
+-454-sff-load(0.0.0)-T,SRR170845,T,454
+-454-sff-load(1.2.0)-T,ERR023140,T,454
+-454-sff-load(1.2.1)-T,SRR059129,T,454
+-454-sff-loader2(1.0.0)-T,SRR054445,T,454
+-ABSOLID-abi-load(1.0.0)-T,ERR023201,T,ABSOLID
+-ABSOLID-srf-load(1.0.20)-T,SRR064942,T,ABSOLID
+-ABSOLID-srf-load.1.2.7(1.2.7)-T,SRR064943,T,ABSOLID
+#all runs of this type are private: -ABSOLID-srf-loader(1.0.0)-T,ERR001624,T,ABSOLID
+-ABSOLID-srf-loader(1.0.16)-T,SRR022546,T,ABSOLID
+-ABSOLID-srf-loader(1.0.17)-T,SRR035261,T,ABSOLID
+-ABSOLID-srf-loader(1.0.18)-T,SRR037487,T,ABSOLID
+-ABSOLID-srf-loader(1.0.19)-T,SRR042790,T,ABSOLID
+-ILLUMINA-fastq-load(1.0.20)-T,DRR000720,T,ILLUMINA
+-ILLUMINA-fastq-load(1.2.12)-T,SRR116859,T,ILLUMINA
+-ILLUMINA-fastq-load(1.2.5)-T,SRR061422,T,ILLUMINA
+-ILLUMINA-fastq-load(1.2.6)-T,SRR070223,T,ILLUMINA
+-ILLUMINA-fastq-load(1.2.9)-T,SRR097428,T,ILLUMINA
+-ILLUMINA-fastq-load.1.2.5(0.0.0)-T,SRR060117,T,ILLUMINA
+#all runs of this type are private: -ILLUMINA-fastq-loader(1.0.18)-T,SRR035374,T,ILLUMINA
+-ILLUMINA-fastq-loader(1.0.19)-T,SRR042491,T,ILLUMINA
+-ILLUMINA-srf-load(1.0.0)-T,ERR029415,T,ILLUMINA
+-ILLUMINA-srf-load(1.2.12)-T,SRR111945,T,ILLUMINA
+-ILLUMINA-srf-load(1.2.8)-T,SRR074886,T,ILLUMINA
+-ILLUMINA-srf-load(1.2.9)-T,SRR139156,T,ILLUMINA
+-ILLUMINA-srf-loader(1.0.0)-T,ERR006438,T,ILLUMINA
+NCBI:SRA:ABI:tbl:v2#1-ABSOLID-abi-load(2.0.10)-T,SRR111922,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1-ABSOLID-abi-load(2.0.4)-T,ERR030907,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.3-ABSOLID-abi-load(2.1.6)-T,ERR057556,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.3-ABSOLID-srf-load(2.1.6)-T,SRR350985,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-(0.0.0)-T,SRR217435,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(1.0.0)-T,ERR029930,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(1.0.20)-T,SRR089693,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.10)-T,SRR192558,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.12)-T,ERR042390,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.13)-T,SRR204407,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.14)-T,SRR316179,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.4)-T,ERR034127,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.7)-T,SRR171266,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.0.8)-T,SRR122308,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.10)-T,SRR445714,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.11)-T,SRR449301,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.12)-T,SRR492068,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.13)-T,SRR500516,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.14)-T,SRR525280,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.16)-T,SRR527583,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.17)-T,ERR182858,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.18)-T,ERR015491,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.2)-T,DRR001233,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.7)-T,DRR001804,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.8)-T,ERR071081,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.1.9)-T,ERR147439,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.2.0)-T,ERR202403,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.2.2)-T,ERR426402,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.2.3)-T,SRR806209,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.3.1)-T,DRR017925,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.3.2)-T,ERR329996,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.3.3)-T,ERR321058,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.3.4)-T,ERR660625,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.3.5)-T,DRR031434,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load(2.4.2)-T,ERR964674,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.3.5(2.3.5)-T,SRR1574808,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.0(2.4.0)-T,SRR1584376,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.1(2.4.1)-T,SRR1611170,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.2(2.4.2)-T,SRR1752098,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.3(2.4.3)-T,SRR1792532,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.4(2.4.4)-T,SRR1826150,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.4.5(2.4.5)-T,SRR2009387,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.5.0(2.5.0)-T,SRR2032161,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.5.1(2.5.1)-T,SRR2009469,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-load.2.5.2(2.5.2)-T,SRR2604583,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.11)-T,SRR017232,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.12)-T,SRR017902,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.14)-T,SRR019624,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.16)-T,SRR029494,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.17)-T,SRR033650,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-abi-loader(1.0.19)-T,DRR000425,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(1.0.0)-T,ERR022067,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(1.0.20)-T,SRR066817,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(1.2.12)-T,SRR111917,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(1.2.8)-T,SRR072241,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(1.2.9)-T,SRR172826,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.10)-T,SRR190574,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.14)-T,SRR308194,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.2)-T,SRR057562,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.5)-T,SRR057563,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.8)-T,SRR171679,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.0.9)-T,SRR173012,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.10)-T,SRR444082,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.12)-T,SRR452972,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.14)-T,SRR515191,T,ABSOLID
+#all runs of this type are private: NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.16)-T,ERR031050,T,ABSOLID
+#all runs of this type are private: NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.17)-T,ERR031052,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.18)-T,SRR578343,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.7)-T,SRR360387,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.8)-T,SRR389180,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.1.9)-T,ERR136940,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.2.2)-T,ERR271693,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.2.3)-T,SRR797892,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.3.2)-T,ERR107277,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load(2.3.3)-T,ERR032981,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load.1.2.7(1.2.7)-T,SRR064941,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-load.2.3.5(2.3.5)-T,ERR034813,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.0)-T,ERR002797,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.12)-T,SRR017528,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.14)-T,SRR016407,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.15)-T,SRR023628,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.16)-T,SRR027914,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.17)-T,SRR036757,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.18)-T,SRR037163,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.19)-T,SRR049684,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.5)-T,SRR013122,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.7)-T,SRR014962,T,ABSOLID
+NCBI:SRA:ABI:tbl:v2#1.0.4-ABSOLID-srf-loader(1.0.9)-T,SRR011686,T,ABSOLID
+NCBI:SRA:CG:tbl:fastq#1-COMPLETE_GENOMICS-(0.0.0)-T,SRR072706,T,COMPLETE_GENOMICS
+NCBI:SRA:Helicos:tbl:v2#1-HELICOS-helicos-load(2.0.2)-T,SRR020175,T,HELICOS
+#all runs of this type are private: NCBI:SRA:Helicos:tbl:v2#1-HELICOS-helicos-load(2.0.4)-T,DRR000947,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.3-HELICOS-helicos-load(2.1.6)-T,SRR346126,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.10)-T,SRR182422,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.13)-T,SRR203495,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.14)-T,SRR316183,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.2)-T,SRR051918,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.4)-T,DRR000965,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.6)-T,SRR099372,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.0.7)-T,SRR133639,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.10)-T,SRR442058,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.12)-T,SRR452966,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.14)-T,SRR514051,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.17)-T,SRR543533,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.18)-T,SRR621477,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.7)-T,DRR002075,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.1.8)-T,SRR389805,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.2.3)-T,SRR643530,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.3.1)-T,DRR013752,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.3.2)-T,SRR1002954,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.3.3)-T,SRR1041831,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.3.4)-T,SRR1143403,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load(2.3.5)-T,DRR018325,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load.2.3.5(2.3.5)-T,SRR1557952,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load.2.4.2(2.4.2)-T,SRR1732726,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load.2.4.3(2.4.3)-T,SRR1776516,T,HELICOS
+NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load.2.4.4(2.4.4)-T,SRR1810117,T,HELICOS
+#all runs of this type are private: NCBI:SRA:Helicos:tbl:v2#1.0.4-HELICOS-helicos-load.2.5.2(2.5.2)-T,SRR2123712,T,HELICOS
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-(0.0.0)-T,ERR037327,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.10)-T,SRR061126,T,ILLUMINA
+#all runs of this type are private:NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.13)-T,SRR207070,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.14)-T,SRR222486,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.15)-T,SRR222563,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.16)-T,SRR222544,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.7)-T,SRR166829,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-fastq-load(2.0.9)-T,SRR112725,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-illumina-load(2.0.10)-T,SRR112722,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-illumina-load(2.0.13)-T,SRR074174,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-illumina-load(2.0.15)-T,SRR074176,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-illumina-load(2.0.8)-T,SRR074172,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-srf-load(2.0.10)-T,SRR189815,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-srf-load(2.0.14)-T,SRR315558,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-srf-load(2.0.2)-T,SRR090423,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1-ILLUMINA-srf-load(2.0.7)-T,SRR112721,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1-UNDEFINED-(0.0.0)-T,ERR005089,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.2-ILLUMINA-fastq-load(2.1.0)-T,SRR341919,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1.0.2-ILLUMINA-srf-load(2.1.2)-T,SRR329669,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.3-ILLUMINA-fastq-load(2.1.3)-T,ERR022479,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.3-ILLUMINA-fastq-load(2.1.6)-T,ERR056367,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.3-ILLUMINA-illumina-load(2.1.6)-T,SRR353581,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.3-ILLUMINA-srf-load(2.1.6)-T,ERR055396,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.3-UNDEFINED-(0.0.0)-T,ERR056977,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-(0.0.0)-T,ERR039506,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.0.0)-T,ERR022980,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.0.20)-T,DRR000719,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.2.12)-T,SRR122250,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.2.5)-T,DRR000599,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.2.6)-T,DRR000600,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(1.2.9)-T,DRR000183,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.10)-T,SRR203064,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.12)-T,ERR016388,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.13)-T,SRR210917,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.14)-T,SRR223486,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.15)-T,SRR222572,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.16)-T,SRR316687,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.2)-T,SRR100283,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.5)-T,SRR149193,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.7)-T,SRR171281,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.8)-T,SRR172867,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.0.9)-T,SRR173087,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.0)-T,SRR342601,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.10)-T,SRR413527,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.11)-T,DRR000184,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.12)-T,SRR449307,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.13)-T,DRR002381,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.14)-T,SRR500734,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.15)-T,SRR524806,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.17)-T,DRR002425,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.18)-T,ERR197925,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.19)-T,SRR636603,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.2)-T,SRR329488,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.6)-T,SRR352029,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.7)-T,DRR002161,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.8)-T,ERR069563,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.1.9)-T,ERR161565,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.2.0)-T,ERR209685,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.2.1)-T,SRR642751,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.2.2)-T,ERR431471,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.2.3)-T,ERR062333,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.3.1)-T,DRR016800,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.3.2)-T,ERR234231,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.3.3)-T,ERR348421,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.3.4)-T,ERR665060,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.3.5)-T,DRR046906,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load(2.4.2)-T,ERR995409,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.2.3(2.2.3)-T,SRR2054695,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.3.4(2.3.4)-T,SRR976375,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.3.5(2.3.5)-T,SRR1576091,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.0(2.4.0)-T,SRR1593278,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.1(2.4.1)-T,SRR1612549,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.2(2.4.2)-T,SRR1633898,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.2-2(2.4.2)-T,SRR1757773,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.3(2.4.3)-T,SRR1796487,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.4(2.4.4)-T,SRR1873559,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.4.5(2.4.5)-T,SRR2015829,T,ILLUMINA
+#all runs of this type are private (12551 runs!) : NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.5.0(2.5.0)-T,ERR668737,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.5.1(2.5.1)-T,ERR943220,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-load.2.5.2(2.5.2)-T,ERR966616,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.0)-T,ERR012002,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.10)-T,SRR016855,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.14)-T,DRR000030,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.15)-T,DRR000092,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.16)-T,DRR000116,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.17)-T,DRR000149,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.18)-T,DRR000348,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.19)-T,DRR000431,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.6)-T,SRR016113,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.7)-T,SRR016404,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.8)-T,SRR016673,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-fastq-loader(1.0.9)-T,SRR016689,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(1.0.20)-T,SRR059729,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.10)-T,SRR196233,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.12)-T,DRR001166,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.13)-T,SRR210843,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.15)-T,SRR315151,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.5)-T,SRR068545,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.0.7)-T,SRR094665,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.10)-T,SRR446875,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.12)-T,SRR490661,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.13)-T,SRR500487,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.14)-T,SRR521268,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.16)-T,SRR526944,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.17)-T,SRR546125,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.18)-T,ERR011433,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.2)-T,SRR343009,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.7)-T,SRR364792,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.8)-T,SRR400034,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.1.9)-T,SRR402371,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.2.3)-T,SRR807436,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.3.2)-T,ERR029142,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.3.3)-T,SRR1043688,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.3.4)-T,SRR1168348,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load(2.3.5)-T,SRR1200459,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.3.5(2.3.5)-T,SRR1573735,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.0(2.4.0)-T,SRR1585483,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.1(2.4.1)-T,SRR1610241,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.2(2.4.2)-T,SRR1743391,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.3(2.4.3)-T,SRR1793912,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.4(2.4.4)-T,SRR1848960,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.4.5(2.4.5)-T,SRR1999299,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.5.0(2.5.0)-T,SRR2002782,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.5.1(2.5.1)-T,SRR2080517,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-load.2.5.2(2.5.2)-T,SRR2571529,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-loader(1.0.16)-T,DRR000086,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-loader(1.0.17)-T,SRR036730,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-loader(1.0.18)-T,DRR000357,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-illumina-loader(1.0.19)-T,DRR000385,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(1.0.0)-T,ERR029908,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(1.0.20)-T,DRR000852,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(1.2.12)-T,SRR122317,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(1.2.8)-T,SRR074903,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(1.2.9)-T,SRR172842,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.10)-T,SRR201982,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.12)-T,ERR043309,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.13)-T,SRR210866,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.14)-T,SRR316174,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.2)-T,SRR097423,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.4)-T,ERR034168,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.5)-T,SRR097541,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.7)-T,SRR103712,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.8)-T,SRR172843,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.0.9)-T,SRR125283,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.10)-T,SRR447701,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.11)-T,SRR449319,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.12)-T,SRR492480,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.13)-T,SRR499899,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.14)-T,ERR027766,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.16)-T,ERR030402,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.17)-T,SRR539338,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.18)-T,ERR039256,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.2)-T,SRR342314,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.7)-T,DRR002371,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.8)-T,SRR400432,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.1.9)-T,ERR159680,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.2.2)-T,ERR091574,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.2.3)-T,ERR174377,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.3.1)-T,DRR016723,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.3.2)-T,ERR009051,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.3.3)-T,ERR032238,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.3.4)-T,ERR034047,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load(2.3.5)-T,DRR034607,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load.2.3.5(2.3.5)-T,SRR1572157,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load.2.4.2(2.4.2)-T,SRR1618793,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-load.2.4.5(2.4.5)-T,SRR1916926,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.0)-T,ERR012497,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.10)-T,SRR017210,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.11)-T,SRR017391,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.12)-T,SRR018036,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.14)-T,SRR019655,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.15)-T,SRR026434,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.16)-T,SRR029673,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.17)-T,SRR035652,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.18)-T,SRR037496,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.19)-T,DRR000437,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.8)-T,SRR016773,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-ILLUMINA-srf-loader(1.0.9)-T,SRR016774,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-UNDEFINED-(0.0.0)-T,ERR558193,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:phred:v2#1.0.4-UNDEFINED--(0.0.0)-T,ERR997444,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-(0.0.0)-T,ERR029914,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.10)-T,SRR197986,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.12)-T,DRR001464,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.13)-T,SRR211280,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.14)-T,SRR218100,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.16)-T,SRR316299,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.2)-T,SRR122262,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.5)-T,SRR124179,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.7)-T,SRR171600,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.8)-T,SRR171660,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-ILLUMINA-fastq-load(2.0.9)-T,SRR133640,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1-UNDEFINED-(0.0.0)-T,ERR005103,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.1-ILLUMINA-(0.0.0)-T,SRR189060,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.2-ILLUMINA-fastq-load(2.0.16)-T,SRR316298,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.2-ILLUMINA-fastq-load(2.1.0)-T,SRR342244,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.2-ILLUMINA-fastq-load(2.1.2)-T,SRR328463,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.3-ILLUMINA-fastq-load(2.1.6)-T,ERR035782,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.3-UNDEFINED-(0.0.0)-T,ERR054653,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-(0.0.0)-T,SRR333073,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.0.10)-T,SRR188204,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.0.16)-T,SRR290598,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.0.8)-T,SRR124187,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.10)-T,SRR408990,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.11)-T,SRR447749,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.12)-T,SRR449290,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.13)-T,SRR458497,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.14)-T,SRR499708,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.15)-T,SRR520470,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.18)-T,DRR003752,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.19)-T,SRR628281,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.6)-T,SRR346717,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.7)-T,SRR364492,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.8)-T,SRR400044,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.1.9)-T,SRR403299,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.2.1)-T,SRR642643,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.2.2)-T,ERR364417,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.2.3)-T,SRR770352,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.3.2)-T,SRR943042,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.3.3)-T,SRR1028161,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.3.4)-T,ERR455050,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load(2.3.5)-T,SRR1168260,T,ILLUMINA
+#all runs of this type are private: NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-ILLUMINA-fastq-load.2.3.5(2.3.5)-T,SRR1564142,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.0.4-UNDEFINED-(0.0.0)-T,ERR246328,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:q1:v2#1.1-ILLUMINA-fastq-load.2.5.2(2.5.2)-T,SRR2351394,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q1:v2#1.1-UNDEFINED--(0.0.0)-T,ERR932647,T,UNDEFINED
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-illumina-load(2.0.10)-T,SRR191722,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-illumina-load(2.0.12)-T,SRR203399,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-illumina-load(2.0.13)-T,SRR203398,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.10)-T,SRR191899,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.12)-T,ERR029934,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.13)-T,SRR210919,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.14)-T,SRR314702,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.2)-T,SRR088665,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1-ILLUMINA-srf-load(2.0.8)-T,SRR030701,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.2-ILLUMINA-srf-load(2.1.2)-T,SRR340085,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.3-ILLUMINA-illumina-load(2.1.6)-T,SRR349671,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.3-ILLUMINA-srf-load(2.1.6)-T,SRR352226,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.10)-T,SRR448116,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.12)-T,SRR488773,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.13)-T,SRR493780,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.17)-T,SRR535749,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.7)-T,SRR358621,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.1.9)-T,SRR398608,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.3.2)-T,SRR922614,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.3.3)-T,SRR954969,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load(2.3.4)-T,SRR1146683,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-illumina-load.2.3.5(2.3.5)-T,SRR1407910,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.10)-T,SRR413422,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.12)-T,SRR452497,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.14)-T,SRR515921,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.17)-T,SRR546566,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.18)-T,ERR009041,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.7)-T,DRR001883,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.8)-T,SRR398639,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.1.9)-T,SRR402916,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.2.3)-T,SRR770571,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.3.2)-T,ERR009036,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load(2.3.4)-T,ERR008638,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.0.4-ILLUMINA-srf-load.2.3.5(2.3.5)-T,SRR029224,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.1-ILLUMINA-illumina-load.2.5.2(2.5.2)-T,SRR2162766,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:q4:v2#1.1-ILLUMINA-srf-load.2.5.0(2.5.0)-T,SRR1920251,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:v2#1.0.4-ILLUMINA-(0.0.0)-T,SRR000842,T,ILLUMINA
+NCBI:SRA:Illumina:tbl:v2#1.0.4-ILLUMINA-srf-loader(1.0.0)-T,ERR008867,T,ILLUMINA
+NCBI:SRA:IonTorrent:tbl:v2#1.0.2-ION_TORRENT-sff-load(2.1.0)-T,SRR329501,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.1.13)-T,SRR490154,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.1.15)-T,SRR518512,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.1.17)-T,SRR522850,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.1.18)-T,DRR003960,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.1.19)-T,SRR630872,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.2.3)-T,SRR802359,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.3.1)-T,DRR017979,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.3.2)-T,SRR988538,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.3.3)-T,SRR1043572,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.3.4)-T,SRR1171639,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.3.5)-T,DRR034561,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load(2.4.2)-T,ERR979094,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.3.5(2.3.5)-T,SRR1569014,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.4.0(2.4.0)-T,SRR1586608,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.4.1(2.4.1)-T,SRR1609129,T,ION_TORRENT
+#all runs of this type are private: NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.4.2-2(2.4.2)-T,SRR1737219,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.4.4(2.4.4)-T,SRR1836013,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.4.5(2.4.5)-T,SRR1954993,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-fastq-load.2.5.2(2.5.2)-T,SRR2218460,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.10)-T,SRR446826,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.12)-T,SRR488826,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.13)-T,SRR495202,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.17)-T,DRR003303,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.18)-T,ERR161543,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.7)-T,SRR329497,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.8)-T,SRR389194,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.1.9)-T,SRR402854,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.2.2)-T,ERR319091,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.2.3)-T,SRR788730,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.3.1)-T,DRR017924,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.3.2)-T,SRR1002633,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.3.3)-T,SRR1043577,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.3.4)-T,ERR574422,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.3.5)-T,DRR044367,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load(2.4.2)-T,ERR866477,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.3.5(2.3.5)-T,SRR1575317,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.4.2(2.4.2)-T,SRR1748018,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.4.3(2.4.3)-T,SRR1796210,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.4.4(2.4.4)-T,SRR1818320,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.4.5(2.4.5)-T,SRR2014557,T,ION_TORRENT
+NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.5.1(2.5.1)-T,SRR2069650,T,ION_TORRENT
+#all runs of this type are private: NCBI:SRA:IonTorrent:tbl:v2#1.0.3-ION_TORRENT-sff-load.2.5.2(2.5.2)-T,SRR2529521,T,ION_TORRENT
+NCBI:SRA:Nanopore:db#1-OXFORD_NANOPORE-general-loader(2.5.4)-D,ERR968961,D,OXFORD_NANOPORE
+NCBI:SRA:PacBio:smrt:db#1-PACBIO_SMRT-(0.0.0)-D,SRR353493,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1-PACBIO_SMRT-pacbio-load(2.1.8)-D,SRR387217,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.10)-D,SRR448138,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.12)-D,SRR458511,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.13)-D,SRR500650,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.14)-D,SRR517973,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.17)-D,SRR534091,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.18)-D,ERR160066,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.8)-D,SRR389290,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.1.9)-D,SRR387289,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.2.3)-D,SRR811963,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.3.2)-D,SRR1003009,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.3.3)-D,SRR1003644,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load(2.3.5)-D,DRR034928,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.3.5(2.3.5)-D,SRR1514774,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.4.1(2.4.1)-D,SRR1754811,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.4.3(2.4.3)-D,ERR599182,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.4.4(2.4.4)-D,ERR772474,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.4.5(2.4.5)-D,ERR871715,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.5.0(2.5.0)-D,ERR904395,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.5.1(2.5.1)-D,ERR956962,D,PACBIO_SMRT
+NCBI:SRA:PacBio:smrt:db#1.0.1-PACBIO_SMRT-pacbio-load.2.5.2(2.5.2)-D,ERR976792,D,PACBIO_SMRT
+NCBI:SRA:_454_:tbl:v2#1-454-sff-load(2.0.10)-T,SRR201949,T,454
+NCBI:SRA:_454_:tbl:v2#1-454-sff-load(2.0.13)-T,SRR210878,T,454
+NCBI:SRA:_454_:tbl:v2#1-454-sff-load(2.0.14)-T,SRR292210,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.5-454-sff-load(2.1.2)-T,SRR333138,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.6-454-fastq-load(2.1.6)-T,ERR039829,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.6-454-sff-load(2.1.0)-T,SRR353543,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.6-454-sff-load(2.1.6)-T,DRR001607,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-(0.0.0)-T,DRR000345,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.10)-T,SRR189081,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.13)-T,SRR208304,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.16)-T,SRR307780,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.2)-T,SRR124144,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.5)-T,SRR099221,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.7)-T,SRR134394,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.8)-T,SRR171665,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.0.9)-T,SRR176508,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.10)-T,SRR408050,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.11)-T,SRR446299,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.13)-T,SRR491408,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.14)-T,SRR498453,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.15)-T,SRR520997,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.17)-T,SRR527811,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.18)-T,ERR171548,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.19)-T,SRR633538,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.2)-T,SRR326939,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.7)-T,SRR385745,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.8)-T,SRR397936,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.1.9)-T,SRR403902,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.2.0)-T,ERR204765,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.2.2)-T,ERR327894,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.2.3)-T,SRR822313,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.3.1)-T,DRR016801,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.3.2)-T,SRR1002600,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.3.3)-T,SRR1043059,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.3.4)-T,SRR1171851,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.3.5)-T,DRR046617,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load(2.4.2)-T,ERR978987,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.3.5(2.3.5)-T,SRR1574968,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.0(2.4.0)-T,SRR1592904,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.1(2.4.1)-T,SRR1612401,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.2(2.4.2)-T,SRR1619688,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.2-2(2.4.2)-T,SRR1752133,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.3(2.4.3)-T,SRR1752124,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.4(2.4.4)-T,SRR1806724,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.4.5(2.4.5)-T,SRR2009611,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.5.0(2.5.0)-T,SRR2048979,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.5.1(2.5.1)-T,SRR2057819,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-fastq-load.2.5.2(2.5.2)-T,SRR2581216,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(0.0.0)-T,DRR000586,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(1.2.0)-T,ERR015938,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(1.2.1)-T,SRR059268,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.10)-T,SRR202954,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.12)-T,DRR001557,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.13)-T,SRR212417,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.14)-T,SRR316686,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.3)-T,SRR149178,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.4)-T,SRR142729,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.5)-T,SRR156345,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.7)-T,SRR167727,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.8)-T,SRR171298,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.0.9)-T,SRR174891,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.0)-T,DRR002366,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.10)-T,SRR448936,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.11)-T,SRR449080,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.12)-T,SRR492852,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.13)-T,SRR500658,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.14)-T,SRR525235,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.16)-T,DRR002386,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.17)-T,ERR198676,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.18)-T,SRR636596,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.2)-T,DRR001368,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.6)-T,SRR350327,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.7)-T,DRR001728,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.8)-T,SRR400435,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.1.9)-T,SRR404102,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.2.0)-T,ERR209054,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.2.2)-T,ERR430966,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.2.3)-T,ERR023134,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.3.1)-T,DRR016802,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.3.2)-T,ERR344830,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.3.3)-T,ERR139684,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.3.4)-T,ERR664799,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.3.5)-T,DRR046428,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load(2.4.2)-T,ERR995354,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.3.5(2.3.5)-T,SRR1575394,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.0(2.4.0)-T,SRR1592716,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.1(2.4.1)-T,SRR1611914,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.2(2.4.2)-T,SRR1752597,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.3(2.4.3)-T,SRR1793659,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.4(2.4.4)-T,SRR1839343,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.4.5(2.4.5)-T,ERR768594,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.5.0(2.5.0)-T,ERR768593,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.5.1(2.5.1)-T,SRR2097334,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-load.2.5.2(2.5.2)-T,ERR768591,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-loader(1.0.18)-T,SRR031989,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-loader2(1.0.0)-T,DRR000421,T,454
+NCBI:SRA:_454_:tbl:v2#1.0.7-454-sff-loader2(1.2.1)-T,SRR053769,T,454
+NCBI:align:db:alignment_evidence_sorted#1-orm-cg-load(2.2.0)-D,SRR576646,D,orm,NC_000002.11:20001-20011
+#all runs of this type are private: NCBI:align:db:alignment_evidence_sorted#1-orm-cg-load(2.2.1)-D,SRR576697,D,orm,NC_000001.10:15001-15011
+NCBI:align:db:alignment_evidence_sorted#1-orm-cg-load(2.3.1)-D,SRR834935,D,orm,NC_000001.10:15001-15011
+NCBI:align:db:alignment_evidence_sorted#1-orm-cg-load(2.3.2)-D,SRR849254,D,orm,NC_000004.11:20001-20011
+NCBI:align:db:alignment_evidence_sorted#1.0.1-orm-cg-load(2.3.1)-D,SRR800317,D,orm,NC_000005.9:20001-20011
+NCBI:align:db:alignment_evidence_sorted#1.0.1-orm-cg-load.2.3.5(2.3.5)-D,SRR1186270,D,orm,NC_000001.10:15001-15011
+#all runs of this type are private: NCBI:align:db:alignment_evidence_sorted#1.2-COMPLETE_GENOMICS-cg-load.2.4.5-5(2.4.5)-D,SRR1745774,D,COMPLETE_GENOMICS,NC_000006.11:150001-150011
+#all runs of this type are private: NCBI:align:db:alignment_evidence_sorted#1.2-COMPLETE_GENOMICS-cg-load.2.5.0(2.5.0)-D,SRR2048475,D,COMPLETE_GENOMICS,chr19:60062-60099
+#all runs of this type are private: NCBI:align:db:alignment_evidence_sorted#1.2-COMPLETE_GENOMICS-cg-load.2.5.1(2.5.1)-D,SRR2070515,D,COMPLETE_GENOMICS,NC_000001.10:25001-25011
+NCBI:align:db:alignment_sorted#1.1-ILLUMINA-bam-load(2.1.13)-D,SRR403996,D,ILLUMINA,supercontig_1.1:1-5000
+NCBI:align:db:alignment_sorted#1.1-ILLUMINA-bam-load(2.1.14)-D,SRR497603,D,ILLUMINA,gi|51973633|gb|CP000001.1|:250001-250010
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.10)-D,SRR403878,D,UNDEFINED,AE003852.1:2454-2463
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.11)-D,SRR448741,D,UNDEFINED,1:121485001-121485010
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.13)-D,SRR489721,D,UNDEFINED,chr1:3516602-3525782
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.14)-D,SRR413284,D,UNDEFINED,FLT3_NM_004119.2:2366-2433
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.8)-D,SRR389317,D,UNDEFINED,NC_000001.10:30001-35000
+NCBI:align:db:alignment_sorted#1.1-UNDEFINED-bam-load(2.1.9)-D,SRR399287,D,UNDEFINED,1:152185501-152185510
+NCBI:align:db:alignment_sorted#1.2-ABSOLID-bam-load(2.1.22)-D,SRR620424,D,ABSOLID,chr5:23562556-23562566
+NCBI:align:db:alignment_sorted#1.2-ABSOLID-bam-load(2.2.3)-D,ERR069107,D,ABSOLID,chr1:121185001-121185010
+NCBI:align:db:alignment_sorted#1.2-COMPLETE_GENOMICS-bam-load(2.1.22)-D,SRR556761,D,COMPLETE_GENOMICS,CM000663.1:15001-15011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.16)-D,SRR501069,D,ILLUMINA,gi|169794206|ref|NC_010410.1|:15001-20000
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.17)-D,SRR522246,D,ILLUMINA,0:5001-5011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.18)-D,SRR515196,D,ILLUMINA,MITO:1-5000
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.19)-D,SRR514629,D,ILLUMINA,scaffold00001:15001-20000
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.20)-D,SRR536876,D,ILLUMINA,NC_000001.10:152280001-152280011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.21)-D,SRR514297,D,ILLUMINA,AE014134.5:5001-5011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.1.22)-D,ERR208922,D,ILLUMINA,NC_000001.10:565001-570000
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.2.1)-D,SRR643441,D,ILLUMINA,ecoli_K12_MG12655:10001-10011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-bam-load(2.2.3)-D,SRR515556,D,ILLUMINA,Contig7124:10001-10011
+NCBI:align:db:alignment_sorted#1.2-ILLUMINA-latf-load(2.3.1)-D,SRR749062,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2-ION_TORRENT-bam-load(2.1.17)-D,SRR515965,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.2-ION_TORRENT-bam-load(2.1.22)-D,SRR620446,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.16)-D,SRR408241,D,UNDEFINED,P_bra_lrc182:5001-5011
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.17)-D,SRR521953,D,UNDEFINED,NC_000001.9:1560001-1565000
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.18)-D,SRR497623,D,UNDEFINED,AL111168.1:220001-225000
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.19)-D,SRR543323,D,UNDEFINED,NC_000067.5:103410001-103415000
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.20)-D,SRR527121,D,UNDEFINED,NC_000067.5:3190001-3190011
+#all runs in this class produce a core-dump: NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.21)-D,SRR547593,D,UNDEFINED
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.1.22)-D,ERR194152,D,UNDEFINED,NC_001807.4:1-11
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.2.1)-D,SRR643698,D,UNDEFINED,supercontig_1.1:5001-5011
+NCBI:align:db:alignment_sorted#1.2-UNDEFINED-bam-load(2.2.3)-D,ERR194157,D,UNDEFINED,J01415.2:1-11
+NCBI:align:db:alignment_sorted#1.2.1-454-latf-load(2.3.1)-D,SRR617107,D,454
+NCBI:align:db:alignment_sorted#1.2.1-454-latf-load(2.3.2)-D,ERR169857,D,454
+NCBI:align:db:alignment_sorted#1.2.1-454-latf-load(2.3.3)-D,SRR1022493,D,454
+NCBI:align:db:alignment_sorted#1.2.1-454-latf-load.2.3.4(2.3.4)-D,SRR1138226,D,454
+NCBI:align:db:alignment_sorted#1.2.1-454-latf-load.2.3.5(2.3.5)-D,ERR346690,D,454
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-bam-load(2.2.3)-D,SRR767813,D,ABSOLID,AF034253.1:1-5000
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-bam-load(2.3.2)-D,ERR303572,D,ABSOLID,CM000664.1:73675001-73675011
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-bam-load(2.3.3)-D,ERR301268,D,ABSOLID,NC_000002.10:91680001-91680011
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-bam-load.2.3.5(2.3.5)-D,SRR1213182,D,ABSOLID,CM000663.1:10001-15000
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-bam-load.2.3.6(2.3.6)-D,SRR1572146,D,ABSOLID,chr1:11767-14445
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-latf-load(2.3.1)-D,SRR801846,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-latf-load(2.3.2)-D,SRR987600,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-latf-load(2.3.3)-D,SRR975539,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-latf-load.2.3.4(2.3.4)-D,SRR1170761,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.2.1-ABSOLID-latf-load.2.3.5(2.3.5)-D,SRR1525616,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.2.1-CAPILLARY-latf-load.2.3.5(2.3.5)-D,SRR1537526,D,CAPILLARY
+NCBI:align:db:alignment_sorted#1.2.1-COMPLETE_GENOMICS-bam-load.2.3.5(2.3.5)-D,SRR1238554,D,COMPLETE_GENOMICS,NC_000001.10:15001-15011
+NCBI:align:db:alignment_sorted#1.2.1-HELICOS-latf-load.2.3.5(2.3.5)-D,SRR1217244,D,HELICOS
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load(2.2.3)-D,SRR1604786,D,ILLUMINA,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load(2.3.1)-D,DRR013124,D,ILLUMINA,4-1/1:3650001-3650011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load(2.3.2)-D,SRR1607286,D,ILLUMINA,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load(2.3.3)-D,ERR366772,D,ILLUMINA,NC_005089.1:10001-10011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load.2.3.3(2.3.3)-D,SRR1043724,D,ILLUMINA,JA2010_JC_00014:1-11
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load.2.3.4(2.3.4)-D,ERR420434,D,ILLUMINA,NC_003197.1:5001-5011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load.2.3.5(2.3.5)-D,ERR583001,D,ILLUMINA,NC_000067.6:7775001-7780000
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-bam-load.2.3.6(2.3.6)-D,SRR1556219,D,ILLUMINA,CM000663.1:15001-15011
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load(2.3.1)-D,SRR816291,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load(2.3.2)-D,ERR318157,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load(2.3.3)-D,SRR1041633,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load.2.3.3(2.3.3)-D,SRR1043950,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load.2.3.4(2.3.4)-D,SRR1171738,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ILLUMINA-latf-load.2.3.5(2.3.5)-D,SRR1575336,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.2.1-ION_TORRENT-bam-load(2.3.2)-D,ERR303537,D,ION_TORRENT,CM000671.1:32630001-32630011
+NCBI:align:db:alignment_sorted#1.2.1-ION_TORRENT-bam-load.2.3.4(2.3.4)-D,SRR1153486,D,ION_TORRENT,22:1-1935
+NCBI:align:db:alignment_sorted#1.2.1-ION_TORRENT-bam-load.2.3.5(2.3.5)-D,SRR1536244,D,ION_TORRENT,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.2.1-ION_TORRENT-latf-load(2.3.2)-D,SRR851864,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.2.1-ION_TORRENT-latf-load.2.3.5(2.3.5)-D,SRR1299024,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-bam-load.2.3.4(2.3.4)-D,SRR1141473,D,PACBIO_SMRT,Pf3D7_03_v3:220001-225000
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-bam-load.2.3.5(2.3.5)-D,SRR1195987,D,PACBIO_SMRT,Pf3D7_03_v3:220001-225000
+#all runs of this type are private: NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load(2.3.1)-D,SRR816121,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load(2.3.2)-D,SRR942732,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load(2.3.3)-D,SRR999223,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load.2.3.3(2.3.3)-D,SRR1006673,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load.2.3.4(2.3.4)-D,SRR1168957,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.2.1-PACBIO_SMRT-latf-load.2.3.5(2.3.5)-D,SRR1564130,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.5.4(2.5.4)-D,SRR820132,D,UNDEFINED,chr9:118398-123961
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load(2.2.3)-D,SRR806708,D,UNDEFINED,chr1:10001-10002
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load(2.3.2)-D,ERR318663,D,UNDEFINED,CM000663.1:85001-85011
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load(2.3.3)-D,ERR231644,D,UNDEFINED,NC_000067.6:33855001-33855011
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load(2.3.5)-D,DRR027738,D,UNDEFINED,AF125673r4000:1-2
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load.2.3.3(2.3.3)-D,SRR1041911,D,UNDEFINED,NC_000079.5:63110001-63115000
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load.2.3.4(2.3.4)-D,ERR419241,D,UNDEFINED,BX571856.1:1-11
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load.2.3.5(2.3.5)-D,ERR571749,D,UNDEFINED,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-bam-load.2.3.6(2.3.6)-D,ERR571748,D,UNDEFINED,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-latf-load(2.3.1)-D,DRR017561,D,UNDEFINED
+NCBI:align:db:alignment_sorted#1.2.1-UNDEFINED-latf-load(2.3.5)-D,DRR047105,D,UNDEFINED
+#all runs of this type are private: NCBI:align:db:alignment_sorted#1.3-454-bam-load.2.5.1(2.5.1)-D,SRR2430743,D,454,ENSMUST00000179481:1-11
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.0(2.4.0)-D,SRR1578536,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.2(2.4.2)-D,SRR1630887,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.2-2(2.4.2)-D,SRR1756068,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.3(2.4.3)-D,ERR673991,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.4(2.4.4)-D,ERR673994,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.4.5(2.4.5)-D,SRR2011241,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.5.0(2.5.0)-D,SRR2054761,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.5.1(2.5.1)-D,ERR924522,D,454
+NCBI:align:db:alignment_sorted#1.3-454-latf-load.2.5.2(2.5.2)-D,ERR752925,D,454
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.4.0.1(2.4.0)-D,ERR634919,D,ABSOLID,NC_000001.9:725001-730000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.4.2(2.4.2)-D,SRR1772144,D,ABSOLID,chr1:600001-605000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.4.3-1(2.4.3)-D,ERR661176,D,ABSOLID,CM000663.1:10001-15000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.4.5(2.4.5)-D,ERR747955,D,ABSOLID,CM000663.1:10001-15000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.5.0(2.5.0)-D,ERR732600,D,ABSOLID,chr1:14535-20000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.5.1(2.5.1)-D,ERR946955,D,ABSOLID,CM000666.1:114275001-114275011
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-bam-load.2.5.2(2.5.2)-D,SRR2102318,D,ABSOLID,NC_000001.10:25001-30000
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-latf-load.2.4.2-2(2.4.2)-D,SRR1743390,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-latf-load.2.4.3(2.4.3)-D,SRR1761345,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-latf-load.2.4.4(2.4.4)-D,SRR1813463,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-latf-load.2.4.5(2.4.5)-D,SRR1952625,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.3-ABSOLID-latf-load.2.5.2(2.5.2)-D,SRR2179730,D,ABSOLID
+NCBI:align:db:alignment_sorted#1.3-CAPILLARY-latf-load.2.4.4(2.4.4)-D,SRR1811472,D,CAPILLARY
+NCBI:align:db:alignment_sorted#1.3-CAPILLARY-latf-load.2.4.5(2.4.5)-D,ERR673293,D,CAPILLARY
+NCBI:align:db:alignment_sorted#1.3-CAPILLARY-latf-load.2.5.1(2.5.1)-D,SRR2064214,D,CAPILLARY
+NCBI:align:db:alignment_sorted#1.3-CAPILLARY-latf-load.2.5.2(2.5.2)-D,ERR738697,D,CAPILLARY
+NCBI:align:db:alignment_sorted#1.3-COMPLETE_GENOMICS-bam-load.2.5.0(2.5.0)-D,SRR1772964,D,COMPLETE_GENOMICS,CM000663.1:20001-20011
+NCBI:align:db:alignment_sorted#1.3-COMPLETE_GENOMICS-bam-load.2.5.1(2.5.1)-D,SRR1772963,D,COMPLETE_GENOMICS,NC_000001.10:20001-20011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.3.6(2.3.6)-D,SRR1576042,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.0(2.4.0)-D,SRR1576253,D,ILLUMINA,CM000663.1:10001-15000
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.0.1(2.4.0)-D,ERR637305,D,ILLUMINA,NC_004325.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.1(2.4.1)-D,ERR654280,D,ILLUMINA,AE005674.2:1-11
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.2(2.4.2)-D,ERR714615,D,ILLUMINA,FM211187.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.3(2.4.3)-D,SRR1764942,D,ILLUMINA,CM000663.1:16255001-16255011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.3-1(2.4.3)-D,SRR1779286,D,ILLUMINA,CM000663.1:169380001-169380011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.4(2.4.4)-D,SRR1735564,D,ILLUMINA,R00000039:1-100
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.4.5(2.4.5)-D,SRR1561427,D,ILLUMINA,NW_006881719.1:135001-135011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.5.0(2.5.0)-D,SRR1596219,D,ILLUMINA,CM000663.1:16890001-16890011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.5.1(2.5.1)-D,ERR976755,D,ILLUMINA,NC_004325.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-bam-load.2.5.2(2.5.2)-D,SRR2089355,D,ILLUMINA,NC_000001.10:16255001-16255011
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.3.5(2.3.5)-D,SRR1576132,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.0(2.4.0)-D,SRR1593262,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.1(2.4.1)-D,SRR1612367,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.2(2.4.2)-D,ERR579200,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.2-2(2.4.2)-D,ERR637413,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.3(2.4.3)-D,SRR1796498,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.4(2.4.4)-D,ERR665272,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.4.5(2.4.5)-D,SRR2015928,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.5.0(2.5.0)-D,ERR566218,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.5.1(2.5.1)-D,ERR929452,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ILLUMINA-latf-load.2.5.2(2.5.2)-D,SRR2628530,D,ILLUMINA
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.0(2.4.0)-D,SRR1581222,D,ION_TORRENT,CM000663.1:43810001-43815000
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.0.1(2.4.0)-D,SRR1582621,D,ION_TORRENT,CM000663.1:4610001-4615000
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.2(2.4.2)-D,SRR1710770,D,ION_TORRENT,NC_011993.1:50001-50011
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.3-1(2.4.3)-D,ERR654234,D,ION_TORRENT,CM000663.1:196945001-196950000
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.4(2.4.4)-D,ERR654241,D,ION_TORRENT,CM000663.1:196945001-196950000
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.4.5(2.4.5)-D,SRR1979203,D,ION_TORRENT,CM000673.1:62285001-62285011
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.5.0(2.5.0)-D,SRR2054919,D,ION_TORRENT,NC_002695.1:1-11
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.5.1(2.5.1)-D,ERR868268,D,ION_TORRENT,CM000663.1:152280001-152280011
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-bam-load.2.5.2(2.5.2)-D,ERR875288,D,ION_TORRENT,NM_017436.4:1-2106
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.4.2(2.4.2)-D,SRR1611625,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.4.2-2(2.4.2)-D,SRR1745247,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.4.3(2.4.3)-D,ERR653335,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.4.4(2.4.4)-D,SRR1867944,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.4.5(2.4.5)-D,SRR2014707,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.5.0(2.5.0)-D,ERR792549,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.5.1(2.5.1)-D,ERR849661,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-ION_TORRENT-latf-load.2.5.2(2.5.2)-D,ERR906384,D,ION_TORRENT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.4.1(2.4.1)-D,SRR1609768,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.4.2-2(2.4.2)-D,SRR1722569,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.4.3(2.4.3)-D,SRR1793660,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.4.4(2.4.4)-D,SRR1823957,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.4.5(2.4.5)-D,SRR1980665,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.5.0(2.5.0)-D,SRR2049159,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.5.1(2.5.1)-D,SRR2084063,D,PACBIO_SMRT
+NCBI:align:db:alignment_sorted#1.3-PACBIO_SMRT-latf-load.2.5.2(2.5.2)-D,SRR2560504,D,PACBIO_SMRT
+#all runs of this type are private: NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.3.6(2.3.6)-D,SRR1575026,D,UNDEFINED,NC_000086.6:166650001-166650011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.0(2.4.0)-D,ERR577497,D,UNDEFINED,CM000663.1:10001-15000
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.0.1(2.4.0)-D,ERR577494,D,UNDEFINED,J01415.2:10001-10011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.1(2.4.1)-D,ERR653156,D,UNDEFINED,FR878060.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.2(2.4.2)-D,ERR694485,D,UNDEFINED,NC_000017.9:1-5000
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.3(2.4.3)-D,SRR1758433,D,UNDEFINED,NC_000067.5:4800001-4800011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.3-1(2.4.3)-D,SRR1842828,D,UNDEFINED,NODE_1000157_length_958_cov_43.022964:118-612
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.4(2.4.4)-D,ERR769899,D,UNDEFINED,MT:1000-9000
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.4.5(2.4.5)-D,ERR769886,D,UNDEFINED,NC_012920.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.5.0(2.5.0)-D,ERR726972,D,UNDEFINED,NC_001133.8:5001-5011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.5.1(2.5.1)-D,ERR922054,D,UNDEFINED,NC_012920.1:5001-5011
+NCBI:align:db:alignment_sorted#1.3-UNDEFINED-bam-load.2.5.2(2.5.2)-D,ERR957001,D,UNDEFINED,NC_003197.1:1-11
+NCBI:align:db:alignment_unsorted#1.2-ILLUMINA-bam-load(2.2.2)-D,ERR221380,D,ILLUMINA,AL111168.1:1-5000
+NCBI:align:db:alignment_unsorted#1.2-ILLUMINA-bam-load(2.3.4)-D,ERR449385,D,ILLUMINA
+NCBI:align:db:alignment_unsorted#1.2.1-ILLUMINA-bam-load(2.3.4)-D,ERR570054,D,ILLUMINA
diff --git a/test/kar/expected/1.0.stdout b/test/kar/expected/1.0.stdout
new file mode 100644
index 0000000..a06c00e
--- /dev/null
+++ b/test/kar/expected/1.0.stdout
@@ -0,0 +1,35 @@
+1.md5
+col
+col/sub1
+col/sub1/idx
+col/sub1/idx0
+col/sub1/idx1
+col/sub1/idx2
+col/sub1/idx3
+idx
+idx/4a
+idx/4b
+idx/sub
+idx/sub/4c
+idx/sub/4d
+md
+md/cur
+md5
+sub1
+sub1/col
+sub1/col/sub1
+sub1/col/sub1/idx
+sub1/col/sub1/idx0
+sub1/col/sub1/idx1
+sub1/col/sub1/idx2
+sub1/col/sub1/idx3
+sub1/md
+sub1/md/cur
+sub1/sub2
+sub1/sub2/col
+sub1/sub2/col/sub1
+sub1/sub2/col/sub1/idx
+sub1/sub2/col/sub1/idx0
+sub1/sub2/col/sub1/idx1
+sub1/sub2/col/sub1/idx2
+sub1/sub2/col/sub1/idx3
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/1.md5
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/1.md5
diff --git a/src/test/java/htsjdk/samtools/apps/.gitignore b/test/kar/input/1.0/col/sub1/idx
similarity index 100%
rename from src/test/java/htsjdk/samtools/apps/.gitignore
rename to test/kar/input/1.0/col/sub1/idx
diff --git a/src/test/java/htsjdk/samtools/fastq/.gitignore b/test/kar/input/1.0/col/sub1/idx0
similarity index 100%
rename from src/test/java/htsjdk/samtools/fastq/.gitignore
rename to test/kar/input/1.0/col/sub1/idx0
diff --git a/src/test/java/htsjdk/tribble/source/.gitignore b/test/kar/input/1.0/col/sub1/idx1
similarity index 100%
rename from src/test/java/htsjdk/tribble/source/.gitignore
rename to test/kar/input/1.0/col/sub1/idx1
diff --git a/src/test/resources/htsjdk/samtools/cram/xx#blank.sam b/test/kar/input/1.0/col/sub1/idx2
similarity index 100%
rename from src/test/resources/htsjdk/samtools/cram/xx#blank.sam
rename to test/kar/input/1.0/col/sub1/idx2
diff --git a/src/test/resources/htsjdk/samtools/io/empty.txt b/test/kar/input/1.0/col/sub1/idx3
similarity index 100%
rename from src/test/resources/htsjdk/samtools/io/empty.txt
rename to test/kar/input/1.0/col/sub1/idx3
diff --git a/src/test/resources/htsjdk/tribble/tmp/.gitignore b/test/kar/input/1.0/idx/4a
similarity index 100%
rename from src/test/resources/htsjdk/tribble/tmp/.gitignore
rename to test/kar/input/1.0/idx/4a
diff --git a/src/test/resources/tribble/tmp/.gitignore b/test/kar/input/1.0/idx/4b
similarity index 100%
rename from src/test/resources/tribble/tmp/.gitignore
rename to test/kar/input/1.0/idx/4b
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/idx/sub/4c
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/idx/sub/4c
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/idx/sub/4d
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/idx/sub/4d
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/md/cur
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/md/cur
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/md5
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/md5
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/col/sub1/idx
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/col/sub1/idx
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/col/sub1/idx0
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/col/sub1/idx0
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/col/sub1/idx1
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/col/sub1/idx1
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/col/sub1/idx2
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/col/sub1/idx2
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/col/sub1/idx3
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/col/sub1/idx3
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/md/cur
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/md/cur
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/sub2/col/sub1/idx
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/sub2/col/sub1/idx
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/sub2/col/sub1/idx0
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/sub2/col/sub1/idx0
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/sub2/col/sub1/idx1
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/sub2/col/sub1/idx1
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/sub2/col/sub1/idx2
similarity index 100%
copy from src/main/java/htsjdk/tribble/util/ftp/.gitignore
copy to test/kar/input/1.0/sub1/sub2/col/sub1/idx2
diff --git a/src/main/java/htsjdk/tribble/util/ftp/.gitignore b/test/kar/input/1.0/sub1/sub2/col/sub1/idx3
similarity index 100%
rename from src/main/java/htsjdk/tribble/util/ftp/.gitignore
rename to test/kar/input/1.0/sub1/sub2/col/sub1/idx3
diff --git a/test/kar/kar-srr-test.sh b/test/kar/kar-srr-test.sh
new file mode 100755
index 0000000..3693944
--- /dev/null
+++ b/test/kar/kar-srr-test.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+KAR=kar
+[ $# -ge 1 ] && KAR="$1"
+
+ACCLIST="acc.txt"
+acc="tmp"
+
+cleanup ()
+{
+    chmod -R +w $acc*
+    rm -rf $acc* *-dump.txt
+}
+
+trap 'echo " quitting $acc test" && cleanup && exit 1' 2
+
+for acc in `shuf -n 1 $ACCLIST | cut -d',' -f2`
+do
+    # extract an SRR with the new tool
+    echo "extracting $acc"
+    if ! kar -x `srapath $acc` -d $acc
+    then
+        STATUS=$?
+        echo "new KAR failed to extract an exisiting SRR file"
+        cleanup
+        exit $STATUS
+    fi
+    
+    # re-kar the exracted SRR to run VDB-DUMP
+    echo "archiving $acc"
+    if ! kar -c $acc.sra -d $acc
+    then
+        STATUS=$?
+        echo "new KAR to create archive with previously extracted SRR file"
+        cleanup
+        exit $STATUS
+    fi
+
+    # vdb-dump the new archive and compare outputs from the old SRR archive
+    echo "starting dumps"
+    vdb-dump $acc.sra > new-$acc-dump.txt
+    echo "   finished dumping new-$acc-dump.txt"
+    vdb-dump `srapath $acc` > old-$acc-dump.txt
+    echo "   finished dumping old-$acc-dump.txt"
+    
+    echo "comparing new-$acc-dump.txt and old-$acc-dump.txt"
+    if ! diff new-$acc-dump.txt old-$acc-dump.txt
+    then
+        STATUS=$?
+        echo "vdb-dump differs in new archive"
+        cleanup
+        exit $STATUS
+    fi
+
+    cleanup
+done
+
+exit $STATUS
diff --git a/test/kar/kar-test.sh b/test/kar/kar-test.sh
new file mode 100755
index 0000000..b407a46
--- /dev/null
+++ b/test/kar/kar-test.sh
@@ -0,0 +1,400 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+RESULT="result"
+ARCHIVE="newkar.kar"
+INPUT="source"
+OUTPUT="output"
+
+
+KAR=kar
+[ $# -ge 1 ] && KAR="$1"
+
+UNAME=$(uname -s)
+case $UNAME in
+    (Linux)
+        OS=linux
+        ;;
+    (Darwin)
+        OS=mac
+        MD5TOOL=/sbin/md5
+        ;;
+    (*)
+        echo "unsupported platform: $UNAME"
+        exit 1
+        ;;
+esac
+
+
+OLDKAR=/net/snowman/vol/projects/trace_software/vdb/$OS/debug/x86_64/bin/kar.2.6.3
+if [ ! -x $OLDKAR ]
+then
+    OLDKAR=/panfs/traces01.be-md.ncbi.nlm.nih.gov/trace_software/vdb/vdb-versions/2.6.3/$OS/debug/x86_64/bin/kar.2.6.3
+fi
+
+cleanup ()
+{
+    rm -rf $ARCHIVE $ARCHIVE.md5 $RESULT/* $RESULT
+
+}
+
+test_create ()
+{
+    echo "Testing create mode..."
+    if ! $KAR -c $ARCHIVE -d $INPUT
+    then
+        echo "KAR create operation failed"
+        cleanup
+        exit 1
+    fi
+
+    echo "   Testing create mode with existing archive..."
+    if $KAR -c $ARCHIVE -d $INPUT 2> /dev/null
+    then
+        echo "KAR create operation with existing archive failed to produce an error"
+        cleanup
+        exit 1
+    fi
+}
+
+test_create_options ()
+{
+    echo "   Testing force: -f create mode..."
+    if ! $KAR -f -c $ARCHIVE -d $INPUT
+    then
+        echo "KAR force create operation failed"
+        cleanup
+        exit 1
+    fi
+    
+    echo "   Testing option variation --create ..."
+    if ! $KAR -f --create $ARCHIVE -d $INPUT
+    then
+        echo "KAR create operation failed"
+        cleanup
+        exit 1
+    fi
+    
+    echo "   Testing option variation --directory ..."
+    if ! $KAR -f --create $ARCHIVE --directory $INPUT
+    then
+        echo "KAR create operation failed"
+        cleanup
+        exit 1
+    fi
+    
+    echo "   Testing option variation --force ..."
+    if ! $KAR --force --create $ARCHIVE --directory $INPUT
+    then
+        echo "KAR create operation failed"
+        cleanup
+        exit 1
+    fi
+
+    echo "   Testing md5: --md5 mode..."
+    if ! $KAR --md5 -f -c $ARCHIVE -d $INPUT
+    then
+        echo "KAR md5 operation failed"
+        exit 1
+    else
+        case $UNAME in
+            (Linux)
+                if ! md5sum -c $ARCHIVE.md5 > /dev/null
+                then
+                    echo "md5sum check failed with status $?"
+                    cleanup
+                    exit 1
+                fi
+                ;;
+            (Darwin)
+                if [ ! -x $MD5TOOL ]
+                then
+                    echo "could not locate executable md5 tool"
+                elif ! MD5=$($MD5TOOL $ARCHIVE | cut -f4 -d' ')
+                then
+                    echo "md5 failed with status $?"
+                    cleanup
+                    exit 1
+                else
+                    MY_MD5=$(cut -f1 -d' ' $ARCHIVE.md5)
+                    if [ "$MD5" != "$MY_MD5" ]
+                    then
+                        echo "$ARCHIVE: FAILED"
+                        cleanup
+                        exit 1
+                    fi
+                fi
+                ;;
+            (*)
+                echo unknown platform
+                cleanup
+                exit 1
+                ;;
+        esac
+    fi
+}
+
+test_list ()
+{
+    echo "Testing test mode..."    
+    if ! $KAR -t $ARCHIVE > /dev/null
+    then
+        STATUS=$?
+        echo "KAR listing failed"
+        cleanup
+        exit 1
+    fi
+
+    echo "   Testing option variation --test ..."
+    if ! $KAR --test $ARCHIVE > /dev/null
+    then
+        STATUS=$?
+        echo "KAR listing failed"
+        cleanup
+        exit 1
+    fi
+}
+
+test_list_options ()
+{
+    echo "   Testing longlist: -l mode..."
+    if ! $KAR -l -t $ARCHIVE > /dev/null
+    then
+        STATUS=$?
+        echo "KAR long listing failed"
+        cleanup
+        exit 1
+    fi
+}
+
+test_extract ()
+{
+    echo "Testing extract mode..."   
+    DIR="extracted"
+    if ! $KAR -x $ARCHIVE -d $DIR
+    then
+        STATUS=$?
+        echo "KAR extraction failed"
+        cleanup
+        exit 1
+    fi
+
+    rm -rf $DIR
+
+    echo "   Testing extract mode --extract..."   
+    DIR="extracted"
+    if ! $KAR --extract $ARCHIVE -d $DIR
+    then
+        STATUS=$?
+        echo "KAR extraction failed"
+        cleanup 
+        exit 1
+    fi
+
+    rm -rf $DIR
+}
+
+
+# create archive with new tool
+# test and extract with legacy
+test_cNew_txOld_cmp ()
+{
+    echo "Testing new archive - list and extract with old..."
+
+    mkdir $RESULT
+
+    $KAR -f -c $ARCHIVE -d $INPUT
+    
+    if ! $OLDKAR -t $ARCHIVE > $RESULT/olist.txt
+    then
+        STATUS=$?
+        echo "      legacy-KAR could not test the archive...failed"
+        cleanup
+        exit 1
+    fi
+
+    if ! $OLDKAR -l -t $ARCHIVE > $RESULT/ollist.txt
+    then
+        STATUS=$?
+        echo "      legacy-KAR could not test the archive with longlist...failed"
+        cleanup
+        exit 1
+    fi
+
+    if ! $OLDKAR -x $ARCHIVE -d $RESULT/o_extracted
+    then
+        STATUS=$?
+        echo "      legacy-KAR could not extract the archive...failed"
+        cleanup
+        exit 1
+    fi
+
+
+    #start comparing outputs
+    echo "   Comparing list outputs..."
+    $KAR -t $ARCHIVE > $RESULT/nlist.txt
+    if ! diff -w $RESULT/olist.txt $RESULT/nlist.txt > $RESULT/diff.txt
+    then
+        STATUS=$?
+        echo "      KAR listing differs from legacy...test failed"
+        cat $RESULT/diff.txt
+        cleanup
+        exit 1
+    fi
+
+    # there is no purpose in testing long list mode. 
+    # most of the differences are an attempt to correct errors in the old tool
+
+    echo "   Comparing extracted archives..."
+    $KAR -x $ARCHIVE -d $RESULT/n_extracted
+    if ! diff -q -r $RESULT/o_extracted $RESULT/n_extracted 2> $RESULT/diff.txt
+    then
+        grep -v "alias" $RESULT/diff.txt > $RESULT/tmp; mv $RESULT/tmp $RESULT/diff.txt 
+
+        if [ -s $RESULT/diff.txt ] 
+        then
+            STATUS=$?
+            echo "      KAR extracting content differs from legacy...test failed"
+            cat $RESULT/diff.txt
+            cleanup
+            exit 1
+        fi
+    fi
+
+    chmod -R +w $RESULT/o_extracted
+    cleanup
+}
+
+
+
+test_cOld_txNew_cmp ()
+{
+    echo "Testing legacy archive - list and extract with new..."
+    SS="simple_source"
+
+    mkdir $RESULT
+
+    # create new source and remove aliases legacy kar doesnt handle
+    cp -r $INPUT $SS
+    rm -rf $SS/alias_subdir $SS/local_f_subdir_alias
+
+    $OLDKAR -f -c $ARCHIVE -d $SS
+    
+    if ! $KAR -t $ARCHIVE > $RESULT/nlist.txt
+    then
+        STATUS=$?
+        echo "      KAR could not test the archive...failed"
+        rm -rf $SS
+        cleanup
+        exit 1
+    fi
+
+    if ! $KAR -l -t $ARCHIVE > $RESULT/nllist.txt
+    then
+        STATUS=$?
+        echo "      KAR could not test the archive with longlist...failed"
+        rm -rf $SS
+        cleanup
+        exit 1
+    fi
+
+    if ! $KAR -x $ARCHIVE -d $RESULT/n_extracted
+    then
+        STATUS=$?
+        echo "      KAR could not extract the archive...failed"
+        rm -rf $SS
+        cleanup
+        exit 1
+    fi
+
+
+    #start comparing outputs
+    echo "   Comparing list outputs..."
+    $OLDKAR -t $ARCHIVE > $RESULT/olist.txt
+    if ! diff -w $RESULT/nlist.txt $RESULT/olist.txt > $RESULT/diff.txt
+    then
+        STATUS=$?
+        echo "      KAR listing differs from legacy...test failed"
+        cat $RESULT/diff.txt
+        cleanup
+        exit 1
+    fi
+
+    # there is no purpose in testing long list mode. 
+    # most of the differences are an attempt to correct errors in the old tool
+
+    echo "   Comparing extracted archives..."
+    $OLDKAR -x $ARCHIVE -d $RESULT/o_extracted
+    if ! diff -q -r $RESULT/n_extracted $RESULT/o_extracted 2> $RESULT/diff.txt
+    then
+        grep -v "alias" $RESULT/diff.txt > $RESULT/tmp; mv $RESULT/tmp $RESULT/diff.txt 
+
+        if [ -s $RESULT/diff.txt ] 
+        then
+            STATUS=$?
+            echo "      KAR extracting content differs from legacy...test failed"
+            cat $RESULT/diff.txt
+            cleanup
+            exit 1
+        fi
+    fi
+
+    chmod -R +w $RESULT/o_extracted
+    rm -rf $SS
+    cleanup
+}
+
+
+run_basic ()
+{
+    test_create
+    test_create_options
+    test_list
+    test_list_options
+    test_extract
+}
+
+run_compare ()
+{
+    if [ -x $OLDKAR ]
+    then
+        test_cNew_txOld_cmp
+        test_cOld_txNew_cmp
+    else
+        echo "could not locate old kar tool to run comparisons"
+    fi
+}
+
+
+# run the script
+run_basic
+run_compare
+
+
+cleanup
+
+
+exit 0
\ No newline at end of file
diff --git a/test/kar/old-kar b/test/kar/old-kar
new file mode 120000
index 0000000..950a1d6
--- /dev/null
+++ b/test/kar/old-kar
@@ -0,0 +1 @@
+/net/snowman/vol/projects/trace_software/vdb/linux/debug/x86_64/bin/kar
\ No newline at end of file
diff --git a/test/kar/source/alias_subdir/d1/subdir_f_alias b/test/kar/source/alias_subdir/d1/subdir_f_alias
new file mode 120000
index 0000000..1180d4b
--- /dev/null
+++ b/test/kar/source/alias_subdir/d1/subdir_f_alias
@@ -0,0 +1 @@
+../../f1
\ No newline at end of file
diff --git a/test/kar/source/alias_subdir/f1 b/test/kar/source/alias_subdir/f1
new file mode 100644
index 0000000..6e9849c
--- /dev/null
+++ b/test/kar/source/alias_subdir/f1
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi
diff --git a/test/kar/source/d1/d1f1 b/test/kar/source/d1/d1f1
new file mode 100644
index 0000000..6e9849c
--- /dev/null
+++ b/test/kar/source/d1/d1f1
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi
diff --git a/test/kar/source/d1/d1f2 b/test/kar/source/d1/d1f2
new file mode 100644
index 0000000..74647a2
--- /dev/null
+++ b/test/kar/source/d1/d1f2
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/d1/d1f3 b/test/kar/source/d1/d1f3
new file mode 100644
index 0000000..883bdf7
--- /dev/null
+++ b/test/kar/source/d1/d1f3
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/d2/d1/d2f1 b/test/kar/source/d2/d1/d2f1
new file mode 100644
index 0000000..6e9849c
--- /dev/null
+++ b/test/kar/source/d2/d1/d2f1
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi
diff --git a/test/kar/source/d2/d1/d2f2 b/test/kar/source/d2/d1/d2f2
new file mode 100644
index 0000000..74647a2
--- /dev/null
+++ b/test/kar/source/d2/d1/d2f2
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/d2/d1/d2f3 b/test/kar/source/d2/d1/d2f3
new file mode 100644
index 0000000..883bdf7
--- /dev/null
+++ b/test/kar/source/d2/d1/d2f3
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/d3/d2/d1/d3f1 b/test/kar/source/d3/d2/d1/d3f1
new file mode 100644
index 0000000..6e9849c
--- /dev/null
+++ b/test/kar/source/d3/d2/d1/d3f1
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi
diff --git a/test/kar/source/d3/d2/d1/d3f2 b/test/kar/source/d3/d2/d1/d3f2
new file mode 100644
index 0000000..74647a2
--- /dev/null
+++ b/test/kar/source/d3/d2/d1/d3f2
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/d3/d2/d1/d3f3 b/test/kar/source/d3/d2/d1/d3f3
new file mode 100644
index 0000000..883bdf7
--- /dev/null
+++ b/test/kar/source/d3/d2/d1/d3f3
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/f1 b/test/kar/source/f1
new file mode 100644
index 0000000..6e9849c
--- /dev/null
+++ b/test/kar/source/f1
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi
diff --git a/test/kar/source/f2 b/test/kar/source/f2
new file mode 100644
index 0000000..74647a2
--- /dev/null
+++ b/test/kar/source/f2
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/f3 b/test/kar/source/f3
new file mode 100644
index 0000000..883bdf7
--- /dev/null
+++ b/test/kar/source/f3
@@ -0,0 +1 @@
+sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd vi sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v sdfkjas;dfl lkajsdf ;lkajsd fajsd kjaskdjhf aisdhc askjdc lakscsc lshdiasbcasbhd v
diff --git a/test/kar/source/local_d_alias b/test/kar/source/local_d_alias
new file mode 120000
index 0000000..562890b
--- /dev/null
+++ b/test/kar/source/local_d_alias
@@ -0,0 +1 @@
+d1
\ No newline at end of file
diff --git a/test/kar/source/local_f_alias b/test/kar/source/local_f_alias
new file mode 120000
index 0000000..9dd7ac9
--- /dev/null
+++ b/test/kar/source/local_f_alias
@@ -0,0 +1 @@
+f1
\ No newline at end of file
diff --git a/test/kar/source/local_f_subdir_alias b/test/kar/source/local_f_subdir_alias
new file mode 120000
index 0000000..b555588
--- /dev/null
+++ b/test/kar/source/local_f_subdir_alias
@@ -0,0 +1 @@
+alias_subdir/f1
\ No newline at end of file
diff --git a/test/kget/.gitignore b/test/kget/.gitignore
new file mode 100644
index 0000000..d64c8f0
--- /dev/null
+++ b/test/kget/.gitignore
@@ -0,0 +1,3 @@
+*.sra
+*.dat
+*.cachetee
\ No newline at end of file
diff --git a/test/kget/Makefile b/test/kget/Makefile
new file mode 100644
index 0000000..c7b8daa
--- /dev/null
+++ b/test/kget/Makefile
@@ -0,0 +1,66 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/kget
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+.PHONY: $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# runtests: 
+#
+runtests: download
+
+download:
+	export PATH=$(BINDIR):$$PATH; export VDB_CONFIG=`pwd` ; \
+		python test_kget.py # expect rc = 0 
+
+#-------------------------------------------------------------------------------
+# slowtests: match output vs wget
+#
+
+slowtests: diff-vs-wget
+
+ACCESSION = SRR072810
+URL = http://sra-download.ncbi.nlm.nih.gov/srapub/$(ACCESSION)
+
+clean:
+	rm -f $(ACCESSION)*
+
+diff-vs-wget: clean
+	$(BINDIR)/kget --reliable -c ./$(ACCESSION).cachetee $(URL) $(ACCESSION).dat --progress
+	wget --no-check-certificate $(URL)
+	diff ./$(ACCESSION) ./$(ACCESSION).dat
+	#diff $(ACCESSION).sra ./$(ACCESSION).cachetee
+	rm -f $(ACCESSION)*
+
+
+.PHONY: 
diff --git a/test/kget/resolver.kfg b/test/kget/resolver.kfg
new file mode 100644
index 0000000..e3ecd77
--- /dev/null
+++ b/test/kget/resolver.kfg
@@ -0,0 +1 @@
+/repository/remote/main/CGI/resolver-cgi = "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi"
diff --git a/test/kget/test_kget.py b/test/kget/test_kget.py
new file mode 100644
index 0000000..64080b4
--- /dev/null
+++ b/test/kget/test_kget.py
@@ -0,0 +1,175 @@
+import os
+import sys
+import subprocess
+import hashlib
+import datetime
+
+'''---------------------------------------------------------------------
+    calls "vdb-dump ACCESSION --info"
+    extracts from the output the line that starts with "remote : ...."
+    returns the remote url or None
+---------------------------------------------------------------------'''
+def get_remote_url( acc ):
+    cmd = "vdb-dump %s --info"%( acc )
+    try:
+        lines = subprocess.check_output( cmd, shell = True ).split( "\n" )
+        for line in lines:
+            try:
+                colon = line.index( ":" )
+                if line[ :colon ].strip() == "remote" :
+                    url = line[ colon+1: ].strip()
+                    if url.startswith( "http:" ) or url.startswith( "https:" ) :
+                        return url
+            except:
+                pass
+        for line in lines:
+            try:
+                colon = line.index( ":" )
+                if line[ :colon ].strip() == "path" :
+                    url = line[ colon+1: ].strip()
+                    if url.startswith( "http:" ) or url.startswith( "https:" ) :
+                        return url
+            except:
+                pass
+    except:
+        pass
+    return None
+
+'''---------------------------------------------------------------------
+    calls "kget URL --show-size"
+    extracts from the output the line that starts with "file-size : ...."
+    returns the value as int or 0
+---------------------------------------------------------------------'''
+def kget_remote_size( url ): 
+    cmd = "kget %s --show-size"%( url )
+    try:
+        lines = subprocess.check_output( cmd, shell = True ).split( "\n" )
+        for line in lines:
+            try:
+                eq = line.index( "=" )
+                if line[ :eq ].strip() == "file-size" :
+                    return int( line[ eq+1: ].strip() )
+            except:
+                pass
+    except:
+        pass
+    return 0
+
+'''---------------------------------------------------------------------
+    helper functions to create a md5 or sha256 hash from a file
+    ( this way we do not depend on the existence of a md5sum-binary )
+---------------------------------------------------------------------'''
+def hashfile( afile, hasher, blocksize=65536 ) :
+    buf = afile.read( blocksize )
+    while len( buf ) > 0 :
+        hasher.update( buf )
+        buf = afile.read( blocksize )
+    return hasher.hexdigest()
+
+def md5( fname ) :
+    return hashfile( open( fname, 'rb' ), hashlib.md5() )
+
+def sha256( fname ) :
+    return hashfile( open( fname, 'rb' ), hashlib.sha256() )
+
+    
+'''---------------------------------------------------------------------
+    calls "kget URL"
+---------------------------------------------------------------------'''
+def kget_download_partial( url, acc ):
+    try:
+        os.remove( acc )
+    except:
+        pass
+
+    cmd = "kget %s"%( url )
+    try:
+        subprocess.check_output( cmd, shell = True )
+        return md5( acc )
+    except:
+        return None
+
+'''---------------------------------------------------------------------
+    calls "kget URL --full"
+---------------------------------------------------------------------'''
+def kget_download_full( url, acc ):
+    try:
+        os.remove( acc )
+    except:
+        pass
+    cmd = "kget %s --full"%( url )
+    try:
+        subprocess.check_output( cmd, shell = True )
+        return md5( acc )
+    except:
+        return None
+
+
+'''---------------------------------------------------------------------
+    the expected values
+---------------------------------------------------------------------'''
+ACC = "NC_011748.1"
+EXP_SIZE = 1313197
+EXP_MD5 = "2656bc178743c5e32bf0594246300dd6"
+
+
+'''---------------------------------------------------------------------
+    main...
+---------------------------------------------------------------------'''
+print "-" * 80
+print "we test download of accession '%s'"%( ACC )
+
+URL = get_remote_url( ACC )
+if URL == None :
+    print "cannot resolve accession '%s'"%( ACC )
+    sys.exit( -1 )
+
+print "'%s' is resolved into '%s'"%( ACC, URL )
+
+remote_size = kget_remote_size( URL )
+if remote_size != EXP_SIZE :
+    print "size (%d) differs from expected size(%d)"%( remote_size, EXP_SIZE )
+    sys.exit( -1 )
+else :
+    print "size as expected = %d"%( remote_size )
+
+t_start = datetime.datetime.now()
+remote_md5 = kget_download_partial( URL, ACC )
+t_partial = datetime.datetime.now() - t_start;
+if remote_md5 == None :
+    print "error downloading '%s'"%( URL )
+    sys.exit( -1 )
+
+if remote_md5 != EXP_MD5 :
+    print "md5 diff: expected (%s) vs remote (%s)"%( EXP_MD5, remote_md5 )
+    sys.exit( -1 )
+else :
+    print "partial donwload ok in %d ms"%( t_partial.microseconds)
+
+t_start = datetime.datetime.now()
+remote_md5 = kget_download_full( URL, ACC )
+t_full = datetime.datetime.now() - t_start;
+if remote_md5 == None :
+    print "error downloading '%s'"%( URL )
+    sys.exit( -1 )
+
+if remote_md5 != EXP_MD5 :
+    print "md5 diff: expected (%s) vs remote (%s)"%( EXP_MD5, remote_md5 )
+    sys.exit( -1 )
+else :
+    print "full donwload ok in %d ms"%( t_full.microseconds )
+
+'''---------------------------------------------------------------------
+if t_full >= t_partial :
+    print "timing problem: full download should be faster than partial download"
+    sys.exit( -1 )
+else :
+    print "timing ok: full download is faster than partial download"
+---------------------------------------------------------------------'''
+
+try:
+    os.remove( ACC )
+except:
+    pass
+
+print "-" * 80
diff --git a/test/network-test/Makefile b/test/network-test/Makefile
new file mode 100644
index 0000000..ec2dc9f
--- /dev/null
+++ b/test/network-test/Makefile
@@ -0,0 +1,99 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = test/network-test
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	network-test
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# TOOL_SRC
+#
+TOOL_SRC = \
+	network-testing \
+	network-test
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-skapp \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/network-test: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(TOOL_LIB)
diff --git a/test/network-test/analyze_strace_log.py b/test/network-test/analyze_strace_log.py
new file mode 100755
index 0000000..1db5c23
--- /dev/null
+++ b/test/network-test/analyze_strace_log.py
@@ -0,0 +1,128 @@
+import os, sys
+
+def extract_port( value ) :
+    res = 0
+    open_par = value.find( '(' )
+    close_par = value.rfind( ')' )
+    if close_par > open_par :
+        try :
+            res = int( value[ open_par + 1 : close_par ] )
+        except :
+            self.socket = 0
+    
+class logline :
+    def __init__( self, line, line_nr ) :
+        self.line = line
+        self.line_nr = line_nr
+        self.valid = 0
+        a = line.strip().split( "=" )
+        if len( a ) > 1 :
+            try :
+                b = a[ len( a ) - 1 ].strip().split( " " )
+                self.result = int( b[ 0 ].strip() )
+                open_par = line.find( '(' )
+                if open_par > 0 :
+                    self.name = line[ 0 : open_par ]
+                    close_par = line.rfind( ')' )
+                    if close_par > open_par :
+                        tmp = line[ open_par + 1 : close_par ].split( "," )
+                        self.params = [ ( x.strip() ) for x in tmp ]
+                        if len( self.params ) > 0 :
+                            try :
+                                self.socket = int( self.params[ 0 ] )
+                            except :
+                                self.socket = 0
+                            self.valid = 1
+            except :
+                pass
+
+    def __str__( self ) :
+        if self.valid > 0 :
+            return "#%d : valid %d, name '%s', result %d, socket %d"%( self.line_nr, self.valid, self.name, self.result, self.socket )
+        return "#%d invalid: '%s'"%( self.line )
+    
+class connection :
+    def __init__( self, socket ) :
+        self.socket = socket
+        self.status = 0
+        self.receive_lines = 0
+        self.send_lines = 0
+        print "open socket #%d"%( socket )
+        
+    def handle( self, ll ) :
+        if ll.name == 'connect' :
+            self.connect( ll )
+        elif ll.name == 'sendto' :
+            self.sendto( ll )
+        elif ll.name == 'recvfrom' :
+            self.recvfrom( ll )
+        elif ll.name == 'shutdown' :
+            self.shutdown( ll )
+
+    def connect( self, ll ) :
+        print "#%d connect: '%s'"%( self.socket, ll.params )
+        
+    def sendto( self, ll ) :
+        if self.send_lines == 0 :
+            print "#%d send: '%s'"%( self.socket, ll.params[ 1 ] )
+        self.send_lines += 1
+        
+    def recvfrom( self, ll ) :
+        if self.receive_lines == 0 :
+            print "#%d receive: '%s'"%( self.socket, ll.params[ 1 ] )
+        self.receive_lines += 1
+
+    def shutdown( self, ll ) :
+        self.status = -1
+        
+
+def make_connection( line ) :
+    res = None
+    rest_of_line = line[6:]
+    a = rest_of_line.strip().split( "=" )
+    b = a[ 0 ].strip()[1:-1].split( "," )
+    socket_id = int( a[ 1 ].strip() )
+    if b[ 0 ] == 'PF_INET' :
+        res = connection( int( a[ 1 ].strip() ) )
+    return res
+
+def extract_id( line ) :
+    res = line.find( '(' )
+    if res < 0 :
+        return res
+    comma = line.find( ',' )
+    if comma < 0 :
+        return comma
+    tmp = line[ res + 1 : comma ]
+    return int( tmp.strip() )
+
+
+def analyze( logfilename ) :
+    print "analyzing file: '" + logfilename + "'"
+    connections = {}
+    f = open( logfilename )
+    line_nr = 0
+    for line in iter( f ) :
+        ll = logline( line, line_nr )
+        if ll.valid > 0 :
+            if ll.name == 'socket' :
+                if ll.params[ 0 ] == 'PF_INET' :
+                    s = ll.result
+                    connections[ s ] = connection( s )
+            else :
+                try :
+                    s = connections[ ll.socket ]
+                    s.handle( ll )
+                    if s.status < 0 :
+                        del connections[ ll.socket ]
+                        print "closed #%d"%( ll.socket )
+                except :
+                    pass
+        line_nr += 1
+    f.close
+
+if __name__ == '__main__':
+    if len( sys.argv ) > 1 :
+        analyze( sys.argv[ 1 ] )
+    else :
+        analyze( 'strace.log' )
diff --git a/test/network-test/network-test.c b/test/network-test/network-test.c
new file mode 100644
index 0000000..a6c02ce
--- /dev/null
+++ b/test/network-test/network-test.c
@@ -0,0 +1,105 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "network-test.vers.h"
+
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <kfs/file.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+
+#include "network-testing.h"
+
+const char UsageDefaultName[] = "network-test";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg( "\nUsage:\n %s [accession]\n\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+	
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return NETWORK_TEST_VERS;
+}
+
+static rc_t CC write_to_FILE ( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet ( write_to_FILE, stdout );
+    if ( rc == 0 )
+	{
+		if ( argc < 2 )
+			rc = perfrom_network_test( "SRR000001" );
+		else
+			rc = perfrom_network_test( argv[ 1 ] );
+	}
+    return rc;
+}
+
diff --git a/test/network-test/network-test.vers b/test/network-test/network-test.vers
new file mode 100644
index 0000000..3eefcb9
--- /dev/null
+++ b/test/network-test/network-test.vers
@@ -0,0 +1 @@
+1.0.0
diff --git a/test/network-test/network-testing.c b/test/network-test/network-testing.c
new file mode 100644
index 0000000..44651cf
--- /dev/null
+++ b/test/network-test/network-testing.c
@@ -0,0 +1,436 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+#include <klib/time.h>
+
+#include <kns/manager.h>
+#include <kns/kns-mgr-priv.h> /* KNSManagerMakeReliableHttpFile */
+#include <kns/endpoint.h>
+#include <kns/http.h>
+#include <kns/stream.h>
+
+#include <kfs/file.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+static rc_t ipv4_endpoint_to_string( char * buffer, size_t buflen, KEndPoint * ep )
+{
+	uint32_t b[4];
+	b[0] = ( ep->u.ipv4.addr & 0xFF000000 ) >> 24;
+	b[1] = ( ep->u.ipv4.addr & 0xFF0000 ) >> 16;
+	b[2] = ( ep->u.ipv4.addr & 0xFF00 ) >> 8;
+	b[3] = ( ep->u.ipv4.addr & 0xFF );
+	return string_printf( buffer, buflen, NULL, "ipv4: %d.%d.%d.%d : %d",
+						   b[0], b[1], b[2], b[3], ep->u.ipv4.port );
+}
+
+static rc_t ipv6_endpoint_to_string( char * buffer, size_t buflen, KEndPoint * ep )
+{
+	uint32_t b[8];
+	b[0] = ( ep->u.ipv6.addr[ 0  ] << 8 ) | ep->u.ipv6.addr[ 1  ];
+	b[1] = ( ep->u.ipv6.addr[ 2  ] << 8 ) | ep->u.ipv6.addr[ 3  ];
+	b[2] = ( ep->u.ipv6.addr[ 4  ] << 8 ) | ep->u.ipv6.addr[ 5  ];
+	b[3] = ( ep->u.ipv6.addr[ 6  ] << 8 ) | ep->u.ipv6.addr[ 7  ];
+	b[4] = ( ep->u.ipv6.addr[ 8  ] << 8 ) | ep->u.ipv6.addr[ 9  ];
+	b[5] = ( ep->u.ipv6.addr[ 10 ] << 8 ) | ep->u.ipv6.addr[ 11 ];
+	b[6] = ( ep->u.ipv6.addr[ 12 ] << 8 ) | ep->u.ipv6.addr[ 13 ];
+	b[7] = ( ep->u.ipv6.addr[ 14 ] << 8 ) | ep->u.ipv6.addr[ 15 ];
+	return string_printf( buffer, buflen, NULL, "ipv6: %.04X:%.04X:%.04X:%.04X:%.04X:%.04X:%.04X:%.04X: :%d", 
+						   b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], ep->u.ipv6.port );
+}
+
+static rc_t ipc_endpoint_to_string( char * buffer, size_t buflen, KEndPoint * ep )
+{
+	return string_printf( buffer, buflen, NULL, "ipc: %s", ep->u.ipc_name );
+}
+
+static rc_t endpoint_to_string( char * buffer, size_t buflen, KEndPoint * ep )
+{
+	rc_t rc;
+	switch( ep->type )
+	{
+		case epIPV4 : rc = ipv4_endpoint_to_string( buffer, buflen, ep ); break;
+		case epIPV6 : rc = ipv6_endpoint_to_string( buffer, buflen, ep ); break;
+		case epIPC  : rc = ipc_endpoint_to_string( buffer, buflen, ep ); break;
+		default     : rc = string_printf( buffer, buflen, NULL, "unknown endpoint-tyep %d", ep->type ); break;
+	}
+	return rc;
+}
+
+static rc_t perfrom_dns_test( KNSManager const * kns_mgr, const char * domain, uint16_t port )
+{
+	rc_t rc;
+	KEndPoint ep;
+	String s_domain;
+
+	KTimeMs_t start_time = KTimeMsStamp();
+	StringInitCString( &s_domain, domain );
+	rc = KNSManagerInitDNSEndpoint( kns_mgr, &ep, &s_domain, port );
+	if ( rc != 0 )
+		pLogErr( klogErr, rc, "cannot init endpoint for $(URL):$(PORT)", "URL=%s,PORT=%d", domain, port );
+	else
+	{
+		char s_endpoint[ 1024 ];
+		rc = endpoint_to_string( s_endpoint, sizeof s_endpoint, &ep );
+		KOutMsg( "\nendpoint for %s:%d is: '%s'\n", domain, port, s_endpoint );
+	}
+	KOutMsg( "in %d milliseconds\n", KTimeMsStamp() - start_time );
+	
+	return rc;
+}
+
+
+static rc_t read_stream_into_databuffer( KStream * stream, KDataBuffer * databuffer )
+{
+	rc_t rc;
+	
+	size_t total = 0;
+	KDataBufferMakeBytes( databuffer, 4096 );
+	while ( 1 )
+	{
+		size_t num_read;
+		uint8_t * base;
+		uint64_t avail = databuffer->elem_count - total;
+		if ( avail < 256 )
+		{
+			rc = KDataBufferResize( databuffer, databuffer->elem_count + 4096 );
+			if ( rc != 0 )
+			{
+				LogErr( klogErr, rc, "CGI: KDataBufferResize failed" );
+				break;
+			}
+		}
+		
+		base = databuffer->base;
+		rc = KStreamRead( stream, & base [ total ], ( size_t ) databuffer->elem_count - total, &num_read );
+		if ( rc != 0 )
+		{
+			/* TBD - look more closely at rc */
+			if ( num_read > 0 )
+			{
+				LogErr( klogErr, rc, "CGI: KStreamRead failed" );
+				rc = 0;
+			}
+			else
+				break;
+		}
+
+		if ( num_read == 0 )
+			break;
+
+		total += num_read;
+	}
+
+	if ( rc == 0 )
+		databuffer->elem_count = total;
+	return rc;
+}
+
+
+static rc_t call_cgi( KNSManager const * kns_mgr, const char * cgi_url, uint32_t ver_major, uint32_t ver_minor,
+			   const char * protocol, const char * acc, KDataBuffer * databuffer )
+{
+	KHttpRequest * req;
+	rc_t rc = KNSManagerMakeReliableClientRequest( kns_mgr, &req, 0x01000000, NULL, cgi_url );
+	if ( rc != 0 )
+		pLogErr( klogErr, rc, "CGI: cannot make ReliableClientRequest $(URL)", "URL=%s", cgi_url );
+	else
+	{
+        rc = KHttpRequestAddPostParam( req, "version=%u.%u", ver_major, ver_minor );
+		if ( rc != 0 )
+			pLogErr( klogErr, rc, "CGI: KHttpRequestAddPostParam version=$(V1).$(V2) failed", "V1=%d,V2=%d", ver_major, ver_minor );
+		
+		if ( rc == 0 )
+		{
+			rc = KHttpRequestAddPostParam( req, "acc=%s", acc );
+			if ( rc != 0 )
+				pLogErr( klogErr, rc, "CGI: KHttpRequestAddPostParam acc=$(ACC) failed", "ACC=%s", acc );
+		}
+		
+		if ( rc == 0 )
+		{
+			rc = KHttpRequestAddPostParam ( req, "accept-proto=%s", protocol );
+			if ( rc != 0 )
+				pLogErr( klogErr, rc, "CGI: KHttpRequestAddPostParam accept-proto=$(PROTO) failed", "PROTO=%s", protocol );
+		}
+
+        if ( rc == 0 )
+        {
+            KHttpResult *rslt;
+            rc = KHttpRequestPOST( req, &rslt );
+			if ( rc != 0 )
+				LogErr( klogErr, rc, "CGI: KHttpRequestPOST failed" );
+			else
+			{
+                uint32_t code;
+                rc = KHttpResultStatus ( rslt, &code, NULL, 0, NULL );
+				if ( rc != 0 )
+					LogErr( klogErr, rc, "CGI: KHttpResultStatus failed" );
+				else
+				{
+					if ( code != 200 )
+						pLogErr( klogErr, rc, "CGI: unexpected result-code of $(RESCODE)", "RESCODE=%d", code );
+					else
+					{
+						KStream *response;
+						
+						rc = KHttpResultGetInputStream ( rslt, &response );
+						if ( rc != 0 )
+							LogErr( klogErr, rc, "CGI: KHttpResultGetInputStream failed" );
+						else
+						{
+							rc = read_stream_into_databuffer( response, databuffer );
+							KStreamRelease ( response );
+						}
+					}
+				}
+				KHttpResultRelease ( rslt );
+			}
+		}
+		KHttpRequestRelease ( req );
+	}
+	return rc;
+}
+
+
+static rc_t perform_cgi_test( KNSManager const * kns_mgr, const char * acc )
+{
+	rc_t rc;
+	KDataBuffer databuffer;
+	KTimeMs_t start_time = KTimeMsStamp();
+
+	memset( &databuffer, 0, sizeof databuffer );
+	rc = call_cgi( kns_mgr, "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi", 1, 1, "http,https", acc, &databuffer );
+	if ( rc == 0 )
+	{
+	    const char *start = ( const void* ) databuffer.base;
+		size_t size = KDataBufferBytes( &databuffer );
+		KOutMsg( "\nCGI: Response = %.*s\n", size, start );
+	}
+	KOutMsg( "in %d milliseconds\n\n", KTimeMsStamp() - start_time );
+	
+	return rc;
+}
+
+
+static rc_t print_vpath( const char * prefix, const VPath * vpath, char * buffer, size_t buflen )
+{
+	const String * s_path;
+	rc_t rc = VPathMakeString( vpath, &s_path );
+	if ( rc != 0 )
+		pLogErr( klogErr, rc, "VPathMakeString() for $(PREFIX) failed", "PREFIX=%s", prefix );
+	else
+	{
+		KOutMsg( "resolved (%s) : %S\n", prefix, s_path );
+		if ( buffer != NULL && buflen > 0 )
+			string_printf( buffer, buflen, NULL, "%S", s_path );
+		StringWhack( s_path );
+	}
+	return rc;
+}
+
+
+static rc_t perform_resolve_test( const char * acc, char * buffer, size_t buflen )
+{
+    VFSManager * vfs_mgr;
+    rc_t rc = VFSManagerMake( &vfs_mgr );
+	if ( rc != 0 )
+		LogErr( klogErr, rc, "VFSManagerMake failed" );
+    else
+    {
+        VResolver * resolver;
+        rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+		if ( rc != 0 )
+			LogErr( klogErr, rc, "VFSManagerGetResolver failed" );
+        else
+        {
+            VPath * query_path;
+            rc = VFSManagerMakePath( vfs_mgr, &query_path, "ncbi-acc:%s", acc );
+			if ( rc != 0 )
+				LogErr( klogErr, rc, "VFSManagerMakePath failed" );
+            else
+            {
+                const VPath * local = NULL;
+                const VPath * remote = NULL;
+				const VPath * cache = NULL;
+				
+				KTimeMs_t start_time = KTimeMsStamp();
+				
+				rc = VResolverQuery( resolver, 0, query_path, &local, NULL, NULL );
+				if ( rc != 0 )
+					LogErr( klogErr, rc, "VResolverQuery (local) failed" );
+                else
+                {
+					rc = print_vpath( "local ", local, NULL, 0 );
+					VPathRelease ( local );
+                }
+				rc = VResolverQuery( resolver, 0, query_path, NULL, &remote, &cache );
+				if ( rc != 0 )
+					LogErr( klogErr, rc, "VResolverQuery (remote/cache) failed" );
+                else
+				{
+					if ( remote != NULL )
+					{
+						rc = print_vpath( "remote", remote, buffer, buflen );
+						VPathRelease ( remote );
+					}
+					if ( rc == 0 && cache != NULL )
+					{
+						rc = print_vpath( "cache ", cache, NULL, 0 );
+						VPathRelease ( cache );
+					}
+				}
+		
+				KOutMsg( "in %d milliseconds\n", KTimeMsStamp() - start_time );
+                VPathRelease ( query_path );
+            }
+            VResolverRelease( resolver );
+        }
+        VFSManagerRelease ( vfs_mgr );
+    }
+	return rc;
+}
+
+
+static rc_t read_blocks( const KFile * remote_file, uint32_t block_count, uint64_t * total )
+{
+	rc_t rc = 0;
+	size_t block_size = 1024 * 1024 * 32;
+	
+	*total = 0;
+	uint8_t * block = malloc( block_size );
+	if ( block == NULL )
+	{
+		rc = RC( rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted );
+		LogErr( klogErr, rc, "allocation of block failed" );
+	}
+	else
+	{
+		uint32_t i;
+		uint64_t pos = 0;
+		for ( i = 0; rc == 0 && i < block_count; ++i )
+		{
+			size_t num_read;
+			rc = KFileReadAll( remote_file, pos, block, block_size, &num_read );
+			if ( rc != 0 )
+				pLogErr( klogErr, rc, "KFileReadAll() at '$(POS)' failed", "POS=%ld", pos );
+			else
+				pos += num_read;
+		}
+		*total = pos;
+		free( (void *) block );
+	}
+	return rc;
+}
+
+static rc_t perform_read_test( KNSManager const * kns_mgr, const char * remote_path )
+{
+	
+	const KFile * remote_file;
+	KTimeMs_t start_time = KTimeMsStamp();
+	rc_t rc = KNSManagerMakeHttpFile ( kns_mgr, &remote_file, NULL, 0x0101, "%s", remote_path );
+	if ( rc != 0 )
+		pLogErr( klogErr, rc, "KNSManagerMakeHttpFile() '$(FILENAME)' failed", "FILENAME=%s", remote_path );
+	else
+	{
+		uint64_t total;
+		KOutMsg( "\n'%s' opened\nin %d milliseconds\n", remote_path, KTimeMsStamp() - start_time );
+		start_time = KTimeMsStamp();
+		rc = read_blocks( remote_file, 10, &total );
+		KOutMsg( "total of %ld bytes read in %d milliseconds\n\n", total, KTimeMsStamp() - start_time );
+		KFileRelease( remote_file );
+	}
+	return rc;
+}
+
+rc_t perfrom_network_test( const char * acc )
+{
+	KNSManager * kns_mgr;
+	rc_t rc =  KNSManagerMake( &kns_mgr );
+	if ( rc != 0 )
+		LogErr( klogErr, rc, "cannot make KNS-Manager" );
+	else
+	{
+		if ( KNSManagerGetHTTPProxyEnabled( kns_mgr ) )
+		{
+			KOutMsg( "\nKNSManager: proxy enabled\n" );
+			{
+				const String * proxy;
+				rc = KNSManagerGetHTTPProxyPath( kns_mgr, &proxy );
+				if ( rc != 0 )
+					LogErr( klogErr, rc, "cannot request proxy-path from KNS-Manager" );
+				else
+					KOutMsg( "KNSManager: proxy at : %S\n", proxy );
+			}
+		}
+		else
+			KOutMsg( "\nKNSManager: proxy disabled\n" );
+			
+		if ( rc == 0 )
+		{
+			const char * user_agent;
+			rc = KNSManagerGetUserAgent( &user_agent );
+			if ( rc != 0 )
+				LogErr( klogErr, rc, "cannot request user-agent from KNS-Manager" );
+			else
+				KOutMsg( "KNSManager: user-agent = '%s'\n", user_agent );
+		}
+
+		if ( rc == 0 )
+			rc = perfrom_dns_test( kns_mgr, "www.ncbi.nlm.nih.gov", 80 );
+
+		if ( rc == 0 )
+			rc = perform_cgi_test( kns_mgr, acc );
+
+		if ( rc == 0 )
+		{
+			char remote_path[ 4096 ];
+			remote_path[ 0 ] = 0;
+			rc = perform_resolve_test( acc, remote_path, sizeof remote_path );
+			if ( rc == 0 && remote_path[ 0 ] != 0 )
+				rc = perform_read_test( kns_mgr, remote_path );
+		}
+			
+		KNSManagerRelease( kns_mgr );
+	}
+	return rc;
+}
diff --git a/test/network-test/network-testing.h b/test/network-test/network-testing.h
new file mode 100644
index 0000000..00cacd8
--- /dev/null
+++ b/test/network-test/network-testing.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_network_testing_
+#define _h_network_testing_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+
+rc_t perfrom_network_test( const char * acc );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/test/ngs-pileup/Makefile b/test/ngs-pileup/Makefile
new file mode 100644
index 0000000..03ab186
--- /dev/null
+++ b/test/ngs-pileup/Makefile
@@ -0,0 +1,137 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/ngs-pileup
+
+TEST_TOOLS = \
+    test-ngs-pileup
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# test-ngs-pileup
+#
+TEST_NGS_PILEUP_SRC = \
+	test-ngs-pileup 
+
+TEST_NGS_PILEUP_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_NGS_PILEUP_SRC))
+    
+TEST_NGS_PILEUP_LIB =   \
+	-sngs-c++           \
+	-sncbi-ngs-c++      \
+	-sncbi-vdb-static   \
+	-skapp              \
+    -sktst              \
+
+$(TEST_BINDIR)/test-ngs-pileup: $(TEST_NGS_PILEUP_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_NGS_PILEUP_LIB)
+
+#-------------------------------------------------------------------------------
+# slowtests: match output vs sra-pileup
+#
+
+slowtests: diff-vs-sra-pileup
+
+diff-vs-sra-pileup:
+	-@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 1.0 SRR833251
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 2.0 SRR1166393
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 3.0 ERR334733                # ILLUMINA
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 4.0 SRR1068006
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 5.0 SRR619510                # ABSOLID REF_ROWS=36172
+	-@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 6.0 SRR1251988               # SEC_ROWS=198
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 7.0 SRR1186012               # ION_TORRENT
+	-@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 8.1 SRR556739 -r chrY # COMPLETE_GENOMICS
+	-@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 8.2 SRR556739 -r chrM # COMPLETE_GENOMICS, circular reference
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 9.0 SRR341578 -r NC_011752.1         #:19900-20022
+
+onediff:
+	@ ./runtestcase.sh $(BINDIR) $(SRCDIR) 9.1 SRR341578 -r NC_011752.1:19900-20022
+
+#alignment selection:
+#TODO: multiple references in one accession
+#TODO: multiple accessions with overlapping alignments
+#TODO: filter by reference (-r ref) using canonic name
+#TODO: filter by reference (-r ref) using common name 
+#TODO: filter by multiple references (-r ref1 -r ref2)
+#TODO: filter by position on the reference (-r ref:from-to)
+#TODO: filter by multiple positions on the same reference (-r ref:from1-to1 -r ref:from2-to2)
+#TODO: primary alignment table only (-t p)
+#TODO: secondary alignment table only (-t s)
+#TODO: evidence  table only (-t e)
+#TODO: include duplicates (-d 1)
+#TODO: do not include duplicates (-d 0) NB: broken in sra-pileup
+#TODO: minimum mapq value (-q min)
+
+#output control:
+#TODO: omit qualities (-n)
+
+#output file control:
+#TODO: redirect output to a file (-o)
+#TODO: bzip2 output (--bzip2)
+#TODO: gzip output (--gzip)
+
+# hidden options:
+#TODO: output alignment information (-i)
+# any more?
+
+#not sure if these are needed:
+#  -p|--spotgroups <spotgroups-modes>  divide by spotgroups 
+#  -e|--seqname                     use original seq-name 
+#  --minmismatch                    min percent of mismatches used in function 
+#                                   mismatch, default is 5% 
+#  --merge-dist                     If adjacent slices are closer than this,  
+#                                   they are merged and skiplist is created.  
+#                                   a value of zero disables the feature, 
+#                                   default is 10000 
+#  --function ref                   list references 
+#  --function ref-ex                list references coverage 
+#  --function count                 sort pileup with counters 
+#  --function stat                  strand/tlen statistic 
+#  --function mismatch              only lines with mismatch 
+#  --function index                 list deletion counts 
+#  --function varcount              variation counters:  ref-name, ref-pos, 
+#                                   ref-base, coverage,  mismatch A, mismatch C, 
+#                                   mismatch G, mismatch T, deletes, inserts, ins 
+#                                   after A, ins after C, ins after G, ins 
+#                                   after T 
+#  --function deletes               list deletions greater then 20 
+#
+#Grouping of accessions into artificial spotgroups:
+#  sra-pileup SRRXXXXXX=a SRRYYYYYY=b SRRZZZZZZ=a
+
+
+
+.PHONY: diff-vs-sra-pileup
diff --git a/test/ngs-pileup/runtestcase.sh b/test/ngs-pileup/runtestcase.sh
new file mode 100755
index 0000000..b28c39b
--- /dev/null
+++ b/test/ngs-pileup/runtestcase.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# $1 - path to sra tools (sra-pileup, ngs-pileup)
+# $2 - work directory (actual results and temporaries created under actual/)
+# $3 - test case ID
+# $4, $5, ... - command line options for pileup programs 
+#
+# return codes:
+# 0 - passed
+# 1 - could not create temp dir
+# 2 - unexpected return code from sra-pileup 
+# 3 - unexpected return code from ngs-pileup 
+# 4 - outputs differ
+
+BINDIR=$1
+WORKDIR=$2
+CASEID=$3
+shift 3
+CMDLINE=$*
+
+SRA_PILEUP="$BINDIR/sra-pileup"
+NGS_PILEUP="$BINDIR/ngs-pileup"
+TEMPDIR=$WORKDIR/actual/$CASEID
+
+printf "running $CASEID: "
+
+mkdir -p $TEMPDIR
+rm -rf $TEMPDIR/*
+if [ "$?" != "0" ] ; then
+    exit 1
+fi
+
+CMD="$SRA_PILEUP $CMDLINE 1>$TEMPDIR/sra.stdout.tmp 2>$TEMPDIR/sra.stderr"
+printf "sra... "
+eval "$CMD"
+if [ "$?" != "0" ] ; then
+    echo "SRA pileup failed. Command executed:"
+    echo $CMD
+    cat $TEMPDIR/sra.stderr
+    exit 2
+fi    
+cut -f 1,2,4 $TEMPDIR/sra.stdout.tmp >$TEMPDIR/sra.stdout 
+   
+CMD="$NGS_PILEUP $CMDLINE 1>$TEMPDIR/ngs.stdout 2>$TEMPDIR/ngs.stderr"
+printf "ngs... "
+eval "$CMD"
+if [ "$?" != "0" ] ; then
+    echo "NGS pileup failed. Command executed:"
+    echo $CMD
+    cat $TEMPDIR/ngs.stderr
+    exit 3
+fi    
+
+printf "diff... "
+diff $TEMPDIR/sra.stdout $TEMPDIR/ngs.stdout >$TEMPDIR/diff
+if [ "$?" != "0" ] ; then
+    cat $TEMPDIR/diff
+    echo "command executed:"
+    echo $CMD
+    exit 4
+fi    
+
+printf "done\n"
+rm -rf $TEMPDIR
+
+exit 0
diff --git a/test/ngs-pileup/test-ngs-pileup.cpp b/test/ngs-pileup/test-ngs-pileup.cpp
new file mode 100644
index 0000000..0711d84
--- /dev/null
+++ b/test/ngs-pileup/test-ngs-pileup.cpp
@@ -0,0 +1,177 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Unit tests for NGS Pileup
+*/
+
+#include <ktst/unit_test.hpp> 
+
+#include <sysalloc.h>
+
+#include <sstream>
+
+#include "../../tools/ngs-pileup/ngs-pileup.cpp"
+
+using namespace std;
+using namespace ncbi::NK;
+
+TEST_SUITE(NgsPileupTestSuite);
+
+class NGSPileupFixture
+{
+public:
+    NGSPileupFixture()
+    {
+        ps . output = & m_str; 
+    }
+    
+    string Run()
+    {
+        NGS_Pileup ( ps ) . Run ();
+        return m_str . str ();
+    }
+    
+    ostringstream m_str;
+    NGS_Pileup::Settings ps;
+};
+
+FIXTURE_TEST_CASE ( NoInput, NGSPileupFixture )
+{
+    Run ();
+    REQUIRE_EQ ( string(), m_str . str() );
+}
+
+FIXTURE_TEST_CASE ( BadInput, NGSPileupFixture )
+{
+    ps . AddInput ( "blah" );
+    REQUIRE_THROW ( Run() );
+    REQUIRE_EQ ( string(), m_str . str() );
+}
+
+FIXTURE_TEST_CASE ( Basic, NGSPileupFixture )
+{
+    ps . AddInput ( "SRR833251" ); // a small accession with primary and secondary alignments
+    string expectedStart = "gi|169794206|ref|NC_010410.1|\t19376\t1\n"; //TODO: expand when pileup prints out more data
+    REQUIRE_EQ ( expectedStart, Run () . substr ( 0, expectedStart . length () ) );
+}
+
+FIXTURE_TEST_CASE ( SingleReference_ByCommonName, NGSPileupFixture )
+{
+    ps . AddInput ( "ERR247027" ); 
+    ps . AddReference ( "Pf3D7_13" );  
+    string expectedStart = "AL844509.2\t1212494\t1"; //TODO: expand when pileup prints out more data
+    string actual = Run ();
+    REQUIRE_EQ ( expectedStart, actual . substr ( 0, expectedStart . length () ) );
+}
+
+FIXTURE_TEST_CASE ( SingleReference_ByCanonicalName, NGSPileupFixture )
+{
+    ps . AddInput ( "ERR247027" ); 
+    ps . AddReference ( "AL844509.2" );  
+    string expectedStart = "AL844509.2\t1212494\t1"; //TODO: expand when pileup prints out more data
+    REQUIRE_EQ ( expectedStart, Run () . substr ( 0, expectedStart . length () ) );
+}
+
+FIXTURE_TEST_CASE ( SingleReference_Slice, NGSPileupFixture )
+{
+    ps . AddInput ( "ERR247027" ); 
+    ps . AddReferenceSlice ( "AL844509.2", 1212492, 3 );  
+    string expected = 
+        "AL844509.2\t1212494\t1\n" /* this position is 1-based */
+        "AL844509.2\t1212495\t1\n";
+        //TODO: expand when pileup prints out more data
+    REQUIRE_EQ ( expected, Run () );
+}
+
+#if 0
+FIXTURE_TEST_CASE ( MultipleReferences, NGSPileupFixture )
+{   
+    ps . AddInput ( "SRR1068024" ); // 38 references
+    const string ref1 = "0000000.72b.NC2_17738";
+    const string ref2 = "0000000.72b.NC2_14823"; // this one should come first in the output 
+    ps . AddReference ( ref1 );
+    ps . AddReference ( ref2 ); 
+    string expectedStart = ref2 + "\t1\t1"; 
+    
+    string res = Run();
+
+    REQUIRE_EQ ( expectedStart, res . substr ( 0, expectedStart . length () ) );
+    REQUIRE_NE ( string :: npos, res. find ( ref2 ) ); 
+}
+
+FIXTURE_TEST_CASE ( MultipleInputs, NGSPileupFixture )
+{   // ERR334733 ERR334777 align against the same reference, ERR334733's position comes first so it has to 
+    // be the first on the output regardless of order of accessions on the command line
+    ps . AddInput ( "ERR334777" ); 
+    ps . AddInput ( "ERR334733" ); 
+    string expectedStart = "FN433596.1\t805952\t1"; // comes from ERR334733
+    string res = Run();
+    REQUIRE_EQ ( expectedStart, res . substr ( 0, expectedStart . length () ) );
+    REQUIRE_NE ( string :: npos, res. find ( "2424446" ) ); // one of the positions from ERR334777
+}
+
+FIXTURE_TEST_CASE ( AllReferencses, NGSPileupFixture )
+{
+    ps . AddInput ( "SRR341578" ); 
+    string expectedStart = "NC_011748.1\t1\t1"; 
+    REQUIRE_EQ ( expectedStart, Run () . substr ( 0, expectedStart . length () ) );
+}
+
+//TODO: multiple input overlapping
+#endif
+//////////////////////////////////////////// Main
+extern "C"
+{
+
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "test-ngs-pileup";
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    KConfigDisableUserSettings();
+    rc_t rc=NgsPileupTestSuite(argc, argv);
+    return rc;
+}
+
+}  
+
diff --git a/test/pileup-stats/Makefile b/test/pileup-stats/Makefile
new file mode 100644
index 0000000..cd8b3f6
--- /dev/null
+++ b/test/pileup-stats/Makefile
@@ -0,0 +1,66 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/pileup-stats
+
+TEST_TOOLS = \
+
+ALL_TOOLS = \
+	$(TEST_TOOLS) \
+
+include $(TOP)/build/Makefile.env
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+runtests: pileup-stats ignore-args
+
+#-------------------------------------------------------------------------------
+# pileup-stats tool tests
+#
+
+pileup-stats: $(BINDIR)/pileup-stats
+	@ # The line below is the test for --version output. Yes, this is ridiculous to make tests like this (especially the one depending on the path to the sources of the binary being tested) but Anatoly insisted on it here: VDB-2837
+	@ $(BINDIR)/pileup-stats -V | sed -e 's/\([1-9][0-9]*\)\.0\.0/\1/' -e 's/\([1-9][0-9]*\.[1-9][0-9]*\)\.0/\1/' -e 's/\([1-9][0-9]*\.[0-9][0-9]*\.[1-9][0-9]*\)/\1/' | grep --quiet "$(shell head -n 1 $(TOP)/tools/pileup-stats/pileup-stats.vers)[^0-9\.]"
+
+slowtests: optional-column-ref-offset-type
+
+optional-column-ref-offset-type:
+	@ $(BINDIR)/pileup-stats --align-category primary ERR085308 >/dev/null
+
+vg: $(BINDIR)/pileup-stats
+	@ # TODO: a better command line options should be chosen to test for memory leaks
+	valgrind --ncbi --suppressions=$(SRCDIR)/valgrind.suppress $(BINDIR)/pileup-stats -V
+
+ignore-args: test-ignore-args.sh
+	@ echo "starting test-ignore-args..."
+	@ bash test-ignore-args.sh
\ No newline at end of file
diff --git a/test/pileup-stats/test-ignore-args.sh b/test/pileup-stats/test-ignore-args.sh
new file mode 100644
index 0000000..364a860
--- /dev/null
+++ b/test/pileup-stats/test-ignore-args.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+test_ignore_args ()
+{
+    if ! pileup-stats -L 1 2> /dev/null
+    then
+        echo $?...test failed on option -L
+    fi
+
+    if ! pileup-stats -z ignore.txt 2> /dev/null
+    then
+        echo $?...test failed on option -z
+    fi
+
+    if ! pileup-stats --log-level 1 2> /dev/null
+    then
+        echo $?...test failed on option --log-level
+    fi
+
+    if ! pileup-stats --xml-log ignore.txt 2> /dev/null
+    then
+        echo $?...test failed on option --xml-log
+    fi
+
+    if ! pileup-stats --xml-log-fd ignore.txt 2> /dev/null
+    then
+        echo $?...test failed on option --xml-log-fd
+    fi
+}
+
+test_ignore_args
\ No newline at end of file
diff --git a/test/pileup-stats/valgrind.suppress b/test/pileup-stats/valgrind.suppress
new file mode 100644
index 0000000..002d332
--- /dev/null
+++ b/test/pileup-stats/valgrind.suppress
@@ -0,0 +1,6 @@
+{
+   vt_cache
+   Memcheck:Leak
+   fun:calloc
+   fun:_ZN3ngs7Resolve*
+}
diff --git a/test/qual-recalib-stat/Makefile b/test/qual-recalib-stat/Makefile
new file mode 100644
index 0000000..64df55b
--- /dev/null
+++ b/test/qual-recalib-stat/Makefile
@@ -0,0 +1,49 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/qual-recalib-stat
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+runtests: check_exit_code
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+
+check_exit_code:
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/qual-recalib-stat
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
diff --git a/test/samline/Makefile b/test/samline/Makefile
new file mode 100644
index 0000000..414b84d
--- /dev/null
+++ b/test/samline/Makefile
@@ -0,0 +1,115 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = test/samline
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	samline \
+	sampart
+    
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+CMN_LIBS = \
+	-skapp \
+	-sncbi-vdb \
+	-lm
+
+#-------------------------------------------------------------------------------
+# SAMLINE
+#
+SAMLINE_SRC = \
+	refbases \
+	cigar \
+	alig-gen
+
+SAMLINE_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMLINE_SRC))
+
+$(BINDIR)/samline: $(SAMLINE_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(CMN_LIBS)
+
+#-------------------------------------------------------------------------------
+# SAMPART
+#
+SAMPART_SRC = \
+	refbases \
+	cigar \
+	sampart
+
+SAMPART_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMPART_SRC))
+
+$(BINDIR)/sampart: $(SAMPART_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(CMN_LIBS)
diff --git a/test/samline/alig-gen.c b/test/samline/alig-gen.c
new file mode 100644
index 0000000..66845c5
--- /dev/null
+++ b/test/samline/alig-gen.c
@@ -0,0 +1,656 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "samline.vers.h"
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "refbases.h"
+#include "cigar.h"
+
+#define DFLT_REFNAME        "NC_011752.1"
+#define DFLT_REFPOS         10000
+#define DFLT_CIGAR          "50M"
+#define DFLT_INSBASES       "ACGTACGTACGT"
+#define DFLT_MAPQ           20
+#define DFLT_QNAME          "1"
+#define DFLT_TLEN           0
+
+static const char * refname_usage[]        = { "the ref-seq-id to use 'NC_011752.1'", NULL };
+static const char * refalias_usage[]       = { "the alias to be written out like 'c1'", NULL };
+static const char * refpos_usage[]         = { "the position on the reference 0-based", NULL };
+static const char * cigar_usage[]          = { "the cigar-string to use", NULL };
+static const char * insbases_usage[]       = { "what bases to insert ( if needed )", NULL };
+static const char * mapq_usage[]           = { "what mapq to use", NULL };
+static const char * reverse_usage[]        = { "alignment is reverse", NULL };
+static const char * qname_usage[]          = { "query template name", NULL };
+static const char * sec_usage[]            = { "secondary alignment", NULL };
+static const char * bad_usage[]            = { "did not pass quality control", NULL };
+static const char * dup_usage[]            = { "is PCR or optical duplicate", NULL };
+static const char * prop_usage[]           = { "each fragment is properly aligned", NULL };
+static const char * first_usage[]          = { "fragment is first", NULL };
+static const char * last_usage[]           = { "fragment is last", NULL };
+static const char * show_usage[]           = { "show details of calculations", NULL };
+static const char * ref_usage[]            = { "return only refbases (set cigar to 100M for len=100)", NULL };
+static const char * flags_usage[]          = { "decode decimal flags-value", NULL };
+static const char * header_usage[]         = { "produce header", NULL };
+static const char * config_usage[]         = { "procuce config-file", NULL };
+static const char * mdtag_usage[]          = { "procuce md-tag", NULL };
+
+#define OPTION_REFNAME        "refname"
+#define OPTION_REFALIAS       "refalias"
+#define OPTION_REFPOS         "refpos"
+#define OPTION_CIGAR          "cigar"
+#define OPTION_INSBASES       "insbases"
+#define OPTION_MAPQ           "mapq"
+#define OPTION_REVERSE        "reverse"
+#define OPTION_QNAME          "qname"
+#define OPTION_SEC            "secondary"
+#define OPTION_BAD            "bad"
+#define OPTION_DUP            "duplicate"
+#define OPTION_PROP           "proper"
+#define OPTION_FIRST          "first"
+#define OPTION_LAST           "last"
+#define OPTION_SHOW           "show"
+#define OPTION_REF            "ref"
+#define OPTION_FLAGS          "flags"
+#define OPTION_HEADER         "header"
+#define OPTION_CONFIG         "config"
+#define OPTION_MDTAG          "mdtag"
+
+#define ALIAS_REFNAME        "r"
+#define ALIAS_REFALIAS       "b"
+#define ALIAS_REFPOS         "p"
+#define ALIAS_CIGAR          "c"
+#define ALIAS_INSBASES       "i"
+#define ALIAS_MAPQ           "m"
+#define ALIAS_REVERSE        "e"
+#define ALIAS_SEC            "2"
+#define ALIAS_BAD            "a"
+#define ALIAS_DUP            "u"
+#define ALIAS_PROP           "o"
+#define ALIAS_SHOW           "s"
+#define ALIAS_REF            "f"
+#define ALIAS_FLAGS          "l"
+#define ALIAS_HEADER         "d"
+#define ALIAS_CONFIG         "n"
+#define ALIAS_MDTAG          "t"
+
+OptDef Options[] =
+{
+    { OPTION_REFNAME,   ALIAS_REFNAME,  NULL, refname_usage,   2,    true,     false },
+    { OPTION_REFALIAS,  ALIAS_REFALIAS, NULL, refalias_usage,  2,    true,     false },
+    { OPTION_REFPOS,    ALIAS_REFPOS,   NULL, refpos_usage,    2,    true,     false },
+    { OPTION_CIGAR,     ALIAS_CIGAR,    NULL, cigar_usage,     2,    true,     false },
+    { OPTION_INSBASES,  ALIAS_INSBASES, NULL, insbases_usage,  1,    true,     false },
+    { OPTION_MAPQ,      ALIAS_MAPQ,     NULL, mapq_usage,      2,    true,     false },
+    { OPTION_REVERSE,   ALIAS_REVERSE,  NULL, reverse_usage,   1,    false,    false },
+    { OPTION_QNAME,     NULL,           NULL, qname_usage,     2,    true,     false },
+    { OPTION_SEC,       ALIAS_SEC,      NULL, sec_usage,       2,    true,     false },
+    { OPTION_BAD,       ALIAS_BAD,      NULL, bad_usage,       2,    true,     false },
+    { OPTION_DUP,       ALIAS_DUP,      NULL, dup_usage,       2,    true,     false },
+    { OPTION_PROP,      ALIAS_PROP,     NULL, prop_usage,      2,    true,     false },
+    { OPTION_FIRST,     NULL,           NULL, first_usage,     2,    true,     false },
+    { OPTION_LAST,      NULL,           NULL, last_usage,      2,    true,     false },
+    { OPTION_SHOW,      ALIAS_SHOW,     NULL, show_usage,      1,    false,    false },
+    { OPTION_REF,       ALIAS_REF,      NULL, ref_usage,       1,    false,    false },
+    { OPTION_FLAGS,     ALIAS_FLAGS,    NULL, flags_usage,     1,    true,     false },
+    { OPTION_HEADER,    ALIAS_HEADER,   NULL, header_usage,    1,    false,    false },
+    { OPTION_CONFIG,    ALIAS_CONFIG,   NULL, config_usage,    1,    true,     false },
+    { OPTION_MDTAG,     ALIAS_MDTAG,    NULL, mdtag_usage,     1,    false,    false }        
+};
+
+const char UsageDefaultName[] = "samline";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg( "\nUsage:\n %s [options]\n\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    int i, n_options;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+    KOutMsg ( "Options:\n" );
+
+    n_options = sizeof Options / sizeof Options[ 0 ];
+    for ( i = 0; i < n_options; ++i )
+    {
+        OptDef * o = &Options[ i ];
+        HelpOptionLine( o->aliases, o->name, NULL, o->help );
+    }
+
+    KOutMsg ( "\n" );
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return SAMLINE_VERS;
+}
+
+
+static const char * get_str_option( const Args * args, const char * name, uint32_t idx, const char * dflt )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( ( rc == 0 )&&( count > idx ) )
+    {
+        const char * res = NULL;
+        ArgsOptionValue( args, name, idx, (const void **)&res );
+        return res;
+    }
+    else
+        return dflt;
+}
+
+
+static uint32_t get_uint32_option( const Args * args, const char * name, uint32_t idx, const uint32_t dflt )
+{
+    const char * s = get_str_option( args, name, idx, NULL );
+    if ( s == NULL )
+        return dflt;
+    return atoi( s );
+}
+
+static uint32_t get_bool_option( const Args * args, const char * name )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    return ( rc == 0 && count > 0 );
+}
+
+typedef struct alignment
+{
+    const char * qname;
+    const char * refname;
+    const char * refalias;
+    const char * cigar_str;
+    const char * refbases;
+    char read[ 4096 ];
+    char sam[ 4096 ];
+    
+    int reverse, secondary, bad, dup, prop, first, last;
+
+    uint32_t refpos, mapq, bases_in_ref, reflen;    
+    
+    struct cigar_t * cigar;
+} alignment;
+
+typedef struct gen_context
+{
+    const char * insbases;
+    const char * config;
+    uint32_t flags, header;
+    int32_t tlen;
+    
+    alignment alig[ 2 ];
+} gen_context;
+
+
+static rc_t CC write_to_FILE ( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+static size_t random_string( char * buffer, size_t buflen, const char * char_set, size_t length )
+{
+    size_t res = 0;
+    if ( buffer != NULL && buflen > 0 )
+    {
+        const char dflt_charset[] = "0123456789"
+                                    "abcdefghijklmnopqrstuvwxyz"
+                                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        const char * cs = ( char_set == NULL ) ? dflt_charset : char_set;
+        size_t charset_len = strlen( cs ) - 1;
+        while ( res < length && res < ( buflen - 1 ) )
+        {
+            size_t rand_idx = ( double ) rand() / RAND_MAX * charset_len;
+            buffer[ res++ ] = cs[ rand_idx ];
+        }
+        buffer[ res ] = 0;
+    }
+    return res;
+}
+
+
+static size_t random_quality( char * buffer, size_t buflen, size_t length )
+{
+    const char qualities[] = "!\"#$%&'()*+,-./0123456789:;<=>?"
+                             "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+                             "`abcdefghijklmnopqrstuvwxyz{|}~";
+    return random_string( buffer, buflen, qualities, length );
+}
+
+static uint32_t sam_flags( const alignment * alig, const alignment * other, int first, int last )
+{
+    uint32_t res = 0;
+    if ( first || last ) res |= 0x01;                            /* multiple fragments */
+    if ( alig->prop != 0 ) res |= 0x02;                        /* each fragment properly aligned */
+    if ( alig->refpos == 0 ) res |= 0x04;                         /* this fragment is unmapped */
+    if ( other != NULL && other->refpos == 0 ) res |= 0x08;     /* next fragment is unmapped */
+    if ( alig->reverse ) res |= 0x10;                            /* this fragment is reversed */
+    if ( other != NULL && other->reverse ) res |= 0x20;         /* next fragment is reversed */
+    if ( first ) res |= 0x40;                                    /* this is the first fragment */
+    if ( last ) res |= 0x80;                                     /* this is the last fragment */
+    if ( alig->secondary != 0 ) res |= 0x100;                    /* this is a secondary alignment */    
+    if ( alig->bad != 0 ) res |= 0x200;                         /* this is did not pass quality controls */    
+    if ( alig->dup != 0 ) res |= 0x400;                        /* this is PCR or optical duplicate */    
+    return res;
+}
+
+
+static size_t produce_sam( char * buffer, size_t buflen,
+                           const gen_context * gctx, const alignment * alig, const alignment * other )
+{
+    size_t res = 0;
+    if ( buffer != NULL ) buffer[ 0 ] = 0;
+    
+    if ( buffer != NULL && gctx != NULL && alig != NULL )
+    {
+        char merged_cigar_str[ 4096 ];
+        char quality[ 4096 ];
+        int first = 0;
+        int last = 0;
+        const char * r_next = "*";
+        uint32_t r_pos = 0;
+        struct cigar_t * merged_cigar = merge_cigar_t( alig->cigar );
+
+        random_quality( quality, sizeof quality, cigar_t_readlen( merged_cigar ) )    ;
+        cigar_t_string( merged_cigar_str, sizeof merged_cigar_str, merged_cigar );
+        
+        if ( other != NULL && other->refname != NULL && other->refpos != 0 )
+        {
+            r_next = other->refalias == NULL ? other->refname : other->refalias;
+            first = ( alig->refpos < other->refpos );
+            last = !first;
+            r_pos = other->refpos;
+        }
+        else
+        {
+            first = alig->first;
+            last  = alig->last;
+        }
+
+        string_printf ( buffer, buflen, &res,
+                        "%s\t%d\t%s\t%d\t%d\t%s\t%s\t%d\t%d\t%s\t%s",
+                        alig->qname,
+                        sam_flags( alig, other, first, last ),
+                        alig->refalias == NULL ? alig->refname : alig->refalias,
+                        alig->refpos,
+                        alig->mapq,
+                        merged_cigar_str,
+                        r_next,
+                        r_pos,
+                        gctx->tlen,
+                        alig->read,
+                        quality );
+
+        free_cigar_t( merged_cigar );
+    }
+    return res;
+}
+
+static void show_alig_details( const alignment * alig )
+{
+    KOutMsg ( "QNAME    : %s\n", alig->qname );
+    KOutMsg ( "REFNAME  : %s\n", alig->refname );
+    KOutMsg ( "REFALIAS : %s\n", alig->refalias == NULL ? "n/a" : alig->refalias );
+    KOutMsg ( "REFPOS   : %d\n", alig->refpos );
+    KOutMsg ( "CIGAR    : %s\n", alig->cigar_str );
+    KOutMsg ( "MAPQ     : %d\n", alig->mapq );
+    KOutMsg ( "REVERSE  : %s\n", alig->reverse ? "YES" : "NO" );
+    KOutMsg ( "SECONDARY: %s\n", alig->secondary ? "YES" : "NO" );
+    KOutMsg ( "BAD      : %s\n", alig->bad ? "YES" : "NO" );
+    KOutMsg ( "DUPLICATE: %s\n", alig->dup ? "YES" : "NO" );
+    KOutMsg ( "PROPERLY : %s\n", alig->prop ? "YES" : "NO" );
+    KOutMsg ( "FIRST    : %s\n", alig->first ? "YES" : "NO" );
+    KOutMsg ( "LAST     : %s\n", alig->last ? "YES" : "NO" );    
+    KOutMsg ( "REFLEN   : %d\n", alig->reflen );
+    KOutMsg ( "READLEN  : %d\n", cigar_t_readlen( alig->cigar ) );    
+    KOutMsg ( "INSLEN   : %d\n", cigar_t_inslen( alig->cigar ) );
+    KOutMsg ( "REFBASES : %s\n", alig->refbases );
+    KOutMsg ( "READ     : %s\n", alig->read );
+    KOutMsg ( "SAM      : %s\n", alig->sam );
+    
+}
+
+static void show_details( const gen_context * gctx )
+{
+    KOutMsg ( "INSBASES : %s\n", gctx->insbases );
+    KOutMsg ( "TLEN     : %d\n", gctx->tlen );
+    KOutMsg ( "CONFIG   : %s\n", gctx->config );
+    if ( gctx->tlen != 0 )
+    {
+        KOutMsg ( "----- ALIGNMENT #1 -----\n" );
+        show_alig_details( &gctx->alig[ 0 ] );
+        KOutMsg ( "----- ALIGNMENT #2 -----\n" );
+        show_alig_details( &gctx->alig[ 1 ] );
+    }
+    else
+        show_alig_details( &gctx->alig[ 0 ] );
+}
+
+
+static void show_mdtag( const gen_context * gctx )
+{
+    struct cigar_t * cigar;
+    
+    KOutMsg ( "calculating MD-TAG:\n" );
+    KOutMsg ( "READ     : %s\n", gctx->alig[0].read );
+    KOutMsg ( "REFBASES : %s\n", gctx->alig[0].refbases );
+
+    cigar = make_cigar_t( gctx->alig[0].cigar_str );
+    if ( cigar != NULL )
+    {
+        struct cigar_t *merged_cigar = merge_cigar_t( cigar );
+        if ( merged_cigar != NULL )
+        {
+            char merged_cigar_str[ 4096 ];
+            char the_tag[ 4096 ];
+            
+            cigar_t_string( merged_cigar_str, sizeof merged_cigar_str, merged_cigar );
+            md_tag( the_tag, sizeof the_tag, merged_cigar, gctx->alig[0].read, gctx->alig[0].refbases );
+                
+            KOutMsg ( "CIGAR    : %s\n", merged_cigar_str );
+            KOutMsg ( "MD-TAG   : %s\n", the_tag );
+                
+            free_cigar_t( merged_cigar );
+        }
+        free_cigar_t( cigar );
+    }
+}
+
+static void explain_flags( const uint32_t flags )
+{
+    if ( ( flags & 0x01 ) == 0x01 )
+        KOutMsg ( "0x001 ... multiple fragments\n" );
+    if ( ( flags & 0x02 ) == 0x02 )
+        KOutMsg ( "0x002 ... each fragment properly aligned\n" );
+    if ( ( flags & 0x04 ) == 0x04 )
+        KOutMsg ( "0x004 ... this fragment is unmapped\n" );
+    if ( ( flags & 0x08 ) == 0x08 )
+        KOutMsg ( "0x008 ... next fragment is unmapped\n" );
+    if ( ( flags & 0x10 ) == 0x10 )
+        KOutMsg ( "0x010 ... this fragment is reversed\n" );
+    if ( ( flags & 0x20 ) == 0x20 )
+        KOutMsg ( "0x020 ... next fragment is reversed\n" );
+    if ( ( flags & 0x40 ) == 0x40 )
+        KOutMsg ( "0x040 ... this is the first fragment\n" );
+    if ( ( flags & 0x80 ) == 0x80 )
+        KOutMsg ( "0x080 ... this is the last fragment\n" );
+    if ( ( flags & 0x100 ) == 0x100 )
+        KOutMsg ( "0x100 ... this is a secondary alignment\n" );
+    if ( ( flags & 0x200 ) == 0x200 )
+        KOutMsg ( "0x200 ... this is did not pass quality controls\n" );
+    if ( ( flags & 0x400 ) == 0x400 )
+        KOutMsg ( "0x400 ... this is PCR or optical duplicate\n" );
+}
+
+
+static size_t write_config_line( KFile * dst, size_t at, const char * alias, const char * canonical )
+{
+    size_t num_in_buffer, res = 0;
+    char buffer[ 4096 ];
+    rc_t rc = string_printf ( buffer, sizeof buffer, &num_in_buffer, "%s\t%s\n", alias, canonical );
+    if ( rc == 0 )
+    {
+        size_t written_to_file;
+        rc = KFileWriteAll ( dst, at, buffer, num_in_buffer, &written_to_file );
+        if ( rc == 0 )
+            res = at + written_to_file;
+    }
+    return res;
+}
+
+
+static void write_config_file( const char * filename, const alignment * alig0, const alignment * alig1 )
+{
+    KDirectory *dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc == 0 )
+    {
+        KFile * dst;
+        rc = KDirectoryCreateFile ( dir, &dst, false, 0664, kcmInit, filename );
+        if ( rc == 0 )
+        {
+            size_t pos = 0;
+            const char * alias0 = NULL;
+            const char * alias1 = NULL;
+            const char * canonical0 = NULL;
+            const char * canonical1 = NULL;
+
+            if ( alig0 != 0 )
+            {
+                canonical0 = alig0->refname == NULL ? DFLT_REFNAME : alig0->refname;
+                alias0 = alig0->refalias == NULL ? canonical0 : alig0->refalias;
+            }
+
+            if ( alig1 != 0 )
+            {
+                canonical1 = alig1->refname == NULL ? DFLT_REFNAME : alig1->refname;
+                alias1 = alig1->refalias == NULL ? canonical1 : alig1->refalias;
+            }
+
+            pos = write_config_line( dst, pos, alias0, canonical0 );
+            if ( ( strcmp( alias0, alias1 ) != 0 ) )
+                write_config_line( dst, pos, alias1, canonical1 );
+            
+            KFileRelease( dst );            
+        }
+        KDirectoryRelease( dir );
+    }
+}
+
+
+static void generate_alignment( const gen_context * gctx )
+{
+    /* write reference names into config-file for bam-load */
+    if ( gctx->config != NULL )
+        write_config_file( gctx->config, &gctx->alig[ 0 ], &gctx->alig[ 1 ] );
+    
+    /* procude SAM-header on stdout */
+    if ( gctx->header )
+    {
+        const char * refname0 = gctx->alig[ 0 ].refalias;
+        const char * refname1 = gctx->alig[ 1 ].refalias;
+        int bases_in_ref0 = gctx->alig[ 0 ].bases_in_ref;
+
+        if ( refname0 == NULL ) refname0 = gctx->alig[ 0 ].refname;
+        if ( refname1 == NULL ) refname1 = gctx->alig[ 1 ].refname;
+        
+        KOutMsg( "@HD\tVN:1.3\n" );
+        KOutMsg( "@SQ\tSN:%s\tAS:%s\tLN:%d\n", refname0, refname0, bases_in_ref0 );
+        if ( refname1 != NULL && ( strcmp( refname0, refname1 ) != 0 ) )
+        {
+            int bases_in_ref1 = gctx->alig[ 1 ].bases_in_ref;
+            KOutMsg( "@SQ\tSN:%s\tAS:%s\tLN:%d\n", refname1, refname1, bases_in_ref1 );
+        }
+    }
+
+    /* produces SAM-line for 1st alignment */
+    KOutMsg( "%s\n", gctx->alig[ 0 ].sam );
+    
+    /* produces SAM-line for 2nd alignment ( mate ) */
+    if ( gctx->tlen != 0 )
+        KOutMsg( "%s\n", gctx->alig[ 1 ].sam );
+}
+
+
+static void read_alig_context( Args * args, alignment * alig, uint32_t idx )
+{
+    alig->qname     = get_str_option( args, OPTION_QNAME,       idx,    idx == 0 ? "1" : "2" );
+    alig->refname   = get_str_option( args, OPTION_REFNAME,     idx,    idx == 0 ? DFLT_REFNAME : NULL );
+    alig->refalias  = get_str_option( args, OPTION_REFALIAS,    idx,    NULL );
+    alig->refpos    = get_uint32_option( args, OPTION_REFPOS,   idx,    idx == 0 ? DFLT_REFPOS : 0 );
+    alig->cigar_str = get_str_option( args, OPTION_CIGAR,       idx,    DFLT_CIGAR );
+    alig->mapq      = get_uint32_option( args, OPTION_MAPQ,     idx,    DFLT_MAPQ );
+    
+    alig->reverse   = get_uint32_option( args, OPTION_REVERSE,  idx,    0 );
+    alig->secondary = get_uint32_option( args, OPTION_SEC,      idx,    0 );
+    alig->bad       = get_uint32_option( args, OPTION_BAD,      idx,    0 );
+    alig->dup       = get_uint32_option( args, OPTION_DUP,      idx,    0 );
+    alig->prop      = get_uint32_option( args, OPTION_PROP,     idx,    0 );
+    alig->first     = get_uint32_option( args, OPTION_FIRST,    idx,    0 );
+    alig->last      = get_uint32_option( args, OPTION_LAST,     idx,    0 );
+    
+    /* precalculate values need in all functions */
+    alig->cigar     = make_cigar_t( alig->cigar_str );
+    alig->reflen    = cigar_t_reflen( alig->cigar );
+}
+
+static void release_alig( alignment * alig )
+{
+    if ( alig->refbases != NULL ) free( ( void* ) alig->refbases );
+    free_cigar_t( alig->cigar );
+}
+
+static void read_context( Args * args, gen_context * gctx )
+{
+    alignment *alig0, *alig1;
+
+    gctx->insbases  = get_str_option( args, OPTION_INSBASES,  0,   DFLT_INSBASES );
+    gctx->flags     = get_uint32_option( args, OPTION_FLAGS,  0,   0 );
+    gctx->header    = get_bool_option( args, OPTION_HEADER );
+    gctx->config    = get_str_option( args, OPTION_CONFIG,    0,   NULL );
+    gctx->tlen       = 0;
+    
+    read_alig_context( args, &gctx->alig[ 0 ], 0 );
+    read_alig_context( args, &gctx->alig[ 1 ], 1 );
+
+    alig0 = &gctx->alig[ 0 ];
+    alig1 = &gctx->alig[ 1 ];
+    
+    if ( gctx->alig[ 1 ].refpos > 0 )
+    {
+        if ( gctx->alig[ 1 ].refname == NULL )
+            gctx->alig[ 1 ].refname = gctx->alig[ 0 ].refname;
+        if ( gctx->alig[ 1 ].refalias == NULL )
+            gctx->alig[ 1 ].refalias = gctx->alig[ 0 ].refalias;
+
+        uint32_t end = alig1->refpos + alig1->reflen;
+        gctx->tlen = ( end - alig0->refpos );
+        
+        alig0->refbases = read_refbases( alig0->refname, alig0->refpos, alig0->reflen, &alig0->bases_in_ref );
+        alig1->refbases = read_refbases( alig1->refname, alig1->refpos, alig1->reflen, &alig1->bases_in_ref );
+
+        cigar_t_2_read( alig0->read, sizeof alig0->read, alig0->cigar, alig0->refbases, gctx->insbases );
+        cigar_t_2_read( alig1->read, sizeof alig1->read, alig1->cigar, alig1->refbases, gctx->insbases );
+        
+        produce_sam( alig0->sam, sizeof alig0->sam, gctx, alig0, alig1 );
+        produce_sam( alig1->sam, sizeof alig1->sam, gctx, alig1, alig0 );
+    }
+    else
+    {
+        alig0->refbases = read_refbases( alig0->refname, alig0->refpos, alig0->reflen, &alig0->bases_in_ref );
+        alig1->refbases = NULL;
+        alig1->bases_in_ref    = 0;
+        
+        cigar_t_2_read( alig0->read, sizeof alig0->read, alig0->cigar, alig0->refbases, gctx->insbases );
+        alig1->read[ 0 ] = 0;
+        
+        produce_sam( alig0->sam, sizeof alig0->sam, gctx, alig0, alig1 );
+        alig1->sam[ 0 ] = 0;
+    }
+}
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet ( write_to_FILE, stdout );
+    if ( rc == 0 )
+    {
+        Args * args;
+
+        int n_options = sizeof Options / sizeof Options[ 0 ];
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1,  Options, n_options );
+        if ( rc == 0 )
+        {
+            gen_context gctx;
+            
+            read_context( args, &gctx );
+            
+            if ( get_bool_option( args, OPTION_SHOW ) )
+                show_details( &gctx );
+            else if ( get_bool_option( args, OPTION_REF ) )
+                KOutMsg ( "%s\n", gctx.alig[ 0 ].refbases );
+            else if ( get_bool_option( args, OPTION_MDTAG ) )
+                show_mdtag( &gctx );
+            else if ( gctx.flags > 0 )
+                explain_flags( gctx.flags );
+            else
+                generate_alignment( &gctx );
+
+            release_alig( &gctx.alig[ 0 ] );
+            if ( gctx.tlen != 0 )
+                release_alig( &gctx.alig[ 1 ] );
+            
+            ArgsWhack( args );
+        }
+    }
+    return rc;
+}
+
diff --git a/test/samline/bx_tag_test.py b/test/samline/bx_tag_test.py
new file mode 100755
index 0000000..3448d52
--- /dev/null
+++ b/test/samline/bx_tag_test.py
@@ -0,0 +1,27 @@
+#!/opt/python-all/bin/python
+from sam import *
+
+REF   = "NC_011752.1"
+ALIAS = "c1"
+CSRA1 = "X.CSRA"
+
+def load( L ) :
+    R1 = bam_load( L, CSRA1, "--make-spots-with-secondary -E0 -Q0" )
+    print "bam-load = %d"%( R1 )
+
+def load_and_print( L ) :
+    load( L )
+    sam_dump( CSRA1 )
+
+
+def test1() :
+    A1 = make_prim( "A1", 0, REF, ALIAS, 17000, 20, "60M" )
+    A2 = make_prim( "A2", 0, REF, ALIAS, 12500, 20, "50M" )
+    A1.pair_with( A2 )
+
+    A1.set_tags( "BX:Z:i_am_a_BX_tag" )
+    
+    load_and_print( [ A1, A2 ] )
+
+
+test1()
diff --git a/test/samline/ca_test.py b/test/samline/ca_test.py
new file mode 100755
index 0000000..c8e30e3
--- /dev/null
+++ b/test/samline/ca_test.py
@@ -0,0 +1,80 @@
+#!/opt/python-all/bin/python
+from sam import *
+
+def dump( acc ) :
+    print "%s.SEQ"%(acc)
+    vdb_dump( acc, "-C SPOT_ID,READ -l0 -f tab" )
+    print "%s.PRIM"%( acc )
+    vdb_dump( acc, "-T PRIMARY_ALIGNMENT -C ALIGN_ID,READ -l0, -f tab" )
+    print "%s.SEC"%( acc )
+    vdb_dump( acc, "-T SECONDARY_ALIGNMENT -C ALIGN_ID,READ -l0 -f tab" )
+
+REF   = "NC_011752.1"
+ALIAS = "c1"
+CSRA1 = "AFTER_BAM_LOAD.CSRA"
+CSRA2 = "AFTER_SRA_SORT.CSRA"
+
+def load_sort( L ) :
+    R1 = bam_load( L, CSRA1, "--make-spots-with-secondary -L 3 -E0 -Q0" )
+    if R1 == 1 :
+        print "bam-load = OK"
+        R2 = sra_sort( CSRA1, CSRA2 )
+        if R2 == 1 :
+            print "sra-sort = OK"
+        else :
+            print "sra-sort = FAILED"
+    else :
+        print "bam-load = FAILED"
+        
+def load_sort_print( L ) :
+    load_sort( L )
+    dump( CSRA1 )
+    dump( CSRA2 )
+
+
+def test1() :
+    print "test #1 --------------------------------------------------"
+    print "...having a single recondary alignmnet without a primary it belongs to"
+    A1 = make_prim( "A1", 0, REF, ALIAS, 17000, 20, "60M" )
+    A2 = make_prim( "A2", 0, REF, ALIAS, 12500, 20, "50M" )
+    A1.pair_with( A2 )
+
+    A3 = make_prim( "A3", 0, REF, ALIAS, 33000, 20, "60M" )
+    U1 = make_unaligned( "U1", 0, "ACTTTAGTAAGGGGTTNN" )
+
+    A4 = make_sec( "A4", 0, REF, ALIAS, 19000, 20, "60M" )
+    A4.link_to( A1 )
+
+    A5 = make_sec( "A5", 0, REF, ALIAS, 22000, 20, "30M" )
+    
+    load_sort_print( [ A1, A2, A3, A4, U1, A5 ] )
+
+# the resulting X.CSRA and S.CSRA produce errors in seq_restore_read_impl2
+def test2() :
+    print "test #2 --------------------------------------------------"
+    print "...having a pair of a prim. and a sec. alignment"
+    print "= SEQUENCE-table cannot reconstruct READ"
+    A1 = make_prim( "A1", 0, REF, ALIAS, 17000, 20, "60M" )
+    A2 = make_sec( "A2", 0, REF, ALIAS, 12500, 20, "50M" )
+    A1.pair_with( A2 )
+
+    load_sort_print( [ A1, A2 ] )
+
+# the resulting X.CSRA produces errors in seq_restore_read_impl2
+# but S.CSRA sefaults in vdb-dump!
+def test3() :
+    print "test #3 --------------------------------------------------"
+    A1 = make_prim( "A1", 0, REF, ALIAS, 1000, 20, "53M" )
+    A2 = make_sec( "A2", 0, REF, ALIAS, 3500, 20, "50M" )
+    A1.pair_with( A2 )
+
+    A3 = make_sec( "A3", 0, REF, ALIAS, 6800, 20, "55M" )
+    A3.flags |= FLAG_NEXT_UNMAPPED
+
+    load_sort_print( [ A3, A1, A2 ] )
+
+
+test1()
+test2()
+test3()
+
diff --git a/test/samline/cigar.c b/test/samline/cigar.c
new file mode 100644
index 0000000..6193699
--- /dev/null
+++ b/test/samline/cigar.c
@@ -0,0 +1,446 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/printf.h>
+#include <klib/out.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "cigar.h"
+
+struct cigar_t
+{
+    char * op;
+    int * count;
+    size_t size, length;
+};
+
+
+static void init_cigar_t( struct cigar_t * c, size_t size )
+{
+    if ( c != NULL )
+    {
+        c->size = 0;
+        c->length = 0;
+        c->op = malloc( sizeof( c->op[ 0 ] ) * size );
+        if ( c->op != NULL )
+        {
+            c->count = malloc( sizeof( c->count[ 0 ] ) * size );
+            if ( c->count != NULL )
+                c->size = size;
+            else
+                free( ( void * ) c->op );
+        }
+    }
+}
+
+
+static void resize_cigar_t( struct cigar_t * c, size_t new_size )
+{
+    if ( c != NULL )
+    {
+        if ( c->size == 0 )
+            init_cigar_t( c, new_size );
+        else if ( c->size < new_size )
+        {
+            char * temp_op = c->op;
+            c->op = realloc( c->op, sizeof( c->op[ 0 ] ) * new_size );
+            if ( c->op != NULL )
+            {
+                int * temp_count = c->count;
+                c->count = realloc( c->count, sizeof( c->count[ 0 ] ) * new_size );
+                if ( c->count != NULL )
+                    c->size = new_size;
+                else
+                    c->count = temp_count;
+            }
+            else
+                c->op = temp_op;
+        }
+    }
+}
+
+static void append_to_cigar_t( struct cigar_t * c, char op, int count )
+{
+    if ( c->length < c->size )
+    {
+        c->op[ c->length ] = op;
+        c->count[ c->length ++ ] = count;
+    }
+}
+
+void parse_cigar_t( struct cigar_t * c, const char * cigar_str )
+{
+    if ( c != NULL && cigar_str != NULL && cigar_str[ 0 ] != 0 )
+    {
+        resize_cigar_t( c, strlen( cigar_str ) );
+        if ( c->size > 0 )
+        {
+            int count = 0;
+            while ( *cigar_str != 0 && c->length < c->size )
+            {
+                if ( isdigit( *cigar_str ) )
+                {
+                    count = ( count * 10 ) + ( *cigar_str - '0' );
+                }
+                else
+                {
+                    if ( count == 0 ) count = 1;
+                    append_to_cigar_t( c, *cigar_str, count );
+                    count = 0;
+                }
+                cigar_str++;
+            }
+        }
+    }
+}
+
+
+struct cigar_t * make_cigar_t( const char * cigar_str )
+{
+    struct cigar_t * res = malloc( sizeof * res );
+    if ( res != NULL )
+    {
+        size_t size;
+        if ( cigar_str != NULL && cigar_str[ 0 ] != 0 )
+            size = strlen( cigar_str );
+        else
+            size = 1024;
+        init_cigar_t( res, size );
+        if ( res->size == size )
+            parse_cigar_t( res, cigar_str );
+    }
+    return res;
+}
+
+
+void free_cigar_t( struct cigar_t * c )
+{
+    if ( c != NULL )
+    {
+        if ( c->op != NULL )
+        {
+            free( ( void * ) c->op );
+            c->op = NULL;
+        }
+        if ( c->count != NULL )
+        {
+            free( ( void * ) c->count );
+            c->count = NULL;
+        }
+        free( ( void * ) c );
+    }
+}
+
+
+int cigar_t_reflen( const struct cigar_t * c )
+{
+    int res = 0;
+    if ( c != NULL )
+    {
+        int i;
+        for ( i = 0; i < c->length; ++i )
+        {
+            switch( c->op[ i ] )
+            {
+                case 'A'    : res += c->count[ i ]; break;
+                case 'C'    : res += c->count[ i ]; break;
+                case 'G'    : res += c->count[ i ]; break;
+                case 'T'    : res += c->count[ i ]; break;
+
+                case 'D'    : res += c->count[ i ]; break;
+                case 'M'    : res += c->count[ i ]; break;            
+            }
+        }
+    }
+    return res;
+}
+
+
+int cigar_t_readlen( const struct cigar_t * c )
+{
+    int res = 0;
+    if ( c != NULL )
+    {
+        int i;
+        for ( i = 0; i < c->length; ++i )
+        {
+            if ( c->op[ i ] != 'D' )
+                res += c->count[ i ];
+        }
+    }
+    return res;
+}
+
+
+int cigar_t_inslen( const struct cigar_t * c )
+{
+    int res = 0;
+    if ( c != NULL )
+    {
+        int i;
+        for ( i = 0; i < c->length; ++i )
+        {
+            if ( c->op[ i ] == 'I' )
+                res += c->count[ i ];
+        }
+    }
+    return res;
+}
+
+
+size_t cigar_t_string( char * buffer, size_t buf_len, const struct cigar_t * c )
+{
+    size_t res = 0;
+    if ( buffer != NULL && buf_len > 0 && c != NULL && c->length > 0 )
+    {
+        int i;
+        for ( i = 0; i < c->length && res < buf_len; ++i )
+        {
+            size_t num_writ;
+            string_printf( &buffer[ res ], buf_len - res, &num_writ,
+                        "%d%c", c->count[ i ], c->op[ i ] );
+            res += num_writ;
+        }
+        if ( res < buf_len )
+            buffer[ res ] = 0;
+    }
+    return res;
+}
+
+
+void debug_cigar_t( const struct cigar_t * c )
+{
+    if ( c != NULL )
+    {
+        int i;
+        for ( i = 0; i < c->length; ++i )
+            KOutMsg( "c[%d]: %d x %c\n", i, c->count[ i ], c->op[ i ] );
+    }
+}
+
+static int can_merge( char op1, char op2 )
+{
+    char mop1 = op1;
+    char mop2 = op2;
+    if ( mop1 == 'A' || mop1 == 'C' || mop1 == 'G' || mop1 == 'T' )
+        mop1 = 'M';
+    if ( mop2 == 'A' || mop2 == 'C' || mop2 == 'G' || mop2 == 'T' )
+        mop2 = 'M';
+    return ( mop1 == mop2 );
+}
+
+
+struct cigar_t * merge_cigar_t( const struct cigar_t * c )
+{
+    struct cigar_t * res = NULL;
+    if ( c != NULL && c -> length > 0 )
+    {
+        res = malloc( sizeof * res );
+        if ( res != NULL )
+        {
+            init_cigar_t( res, c->size );
+            if ( res->size == c->size )
+            {
+                int i, last;
+                append_to_cigar_t( res, c->op[ 0 ], c->count[ 0 ] );
+                for ( i = 1; i < c->length; ++i )
+                {
+                    last = res->length - 1;
+                    if ( can_merge( c->op[ i ], res->op[ last ] ) )
+                    {
+                        res->count[ last ] += c->count[ i ];
+                        res->op[ last ] = 'M';
+                    }
+                    else
+                        append_to_cigar_t( res, c->op[ i ], c->count[ i ] );    
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+static void append_base( char * buffer, size_t buf_len, size_t * buf_idx, int count, char c )
+{
+    int i;
+    for ( i = 0; i < count && *buf_idx < buf_len; ++i )
+        buffer[ (*buf_idx)++ ] = c;
+}
+
+static void append_bases( char * buffer, size_t buf_len, size_t * buf_idx, int count,
+                          const char * src, int src_len, int *src_idx )
+{
+    int i;
+    for ( i = 0; i < count && *buf_idx < buf_len && *src_idx < src_len; ++i )
+        buffer[ (*buf_idx)++ ] = src[ (*src_idx)++ ];
+}
+
+
+size_t cigar_t_2_read( char * buffer, size_t buf_len,
+                       const struct cigar_t * c, const char * ref_bases, const char * ins_bases )
+{
+    size_t res = 0;
+    if ( buffer != NULL && buf_len > 0 && c != NULL )
+    {
+        int readlen = cigar_t_readlen( c );
+        if ( readlen > 0 )
+        {
+            int needed_ref_bases = cigar_t_reflen( c );
+            int available_ref_bases = ref_bases != NULL ? strlen( ref_bases ) : 0;
+            if ( available_ref_bases >= needed_ref_bases )
+            {
+                int needed_ins_bases = cigar_t_inslen( c );
+                int available_ins_bases = ins_bases != NULL ? strlen( ins_bases ) : 0;    
+                if ( available_ins_bases >= needed_ins_bases )
+                {
+                    int ref_idx = 0;
+                    int ins_idx = 0;
+                    int cigar_idx;
+                    for ( cigar_idx = 0; cigar_idx < c->length; ++cigar_idx )
+                    {
+                        int count = c->count[ cigar_idx ];
+                        switch ( c->op[ cigar_idx ] )
+                        {
+                            case 'A' : append_base( buffer, buf_len, &res, count, 'A' );
+                                        ref_idx += count;
+                                        break;
+
+                            case 'C' : append_base( buffer, buf_len, &res, count, 'C' );
+                                        ref_idx += count;
+                                        break;
+
+                            case 'G' : append_base( buffer, buf_len, &res, count, 'G' );
+                                        ref_idx += count;                                                
+                                        break;
+
+                            case 'T' : append_base( buffer, buf_len, &res, count, 'T' );
+                                        ref_idx += count;                                                
+                                        break;
+
+                            case 'D' : ref_idx += count;
+                                        break;
+                            
+                            case 'I' : append_bases( buffer, buf_len, &res, count,
+                                                      ins_bases, available_ins_bases, &ins_idx );
+                                        break;
+
+                            case 'M' : append_bases( buffer, buf_len, &res, count,
+                                                      ref_bases, available_ref_bases, &ref_idx );
+                                        break;
+                        }
+                    }
+                    if ( res < buf_len )
+                        buffer[ res ] = 0;
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+static void print_matchcount( char * buffer, size_t buf_len, size_t *buf_idx, int *match_count )
+{
+    size_t num_writ;
+    string_printf( &buffer[ *buf_idx ], buf_len - *buf_idx, &num_writ,    "%d", *match_count );
+    *match_count = 0;
+    *buf_idx += num_writ;
+}
+
+static void md_delete( char * buffer, size_t buf_len, size_t *buf_idx, int count, int *match_count,
+                        const char * reference, int *ref_idx )
+{
+    if ( *match_count > 0 )
+        print_matchcount( buffer, buf_len, buf_idx, match_count );
+        
+    if ( *buf_idx + count + 1 < buf_len )
+    {
+        int i;
+        buffer[ (*buf_idx)++ ] = '^';
+        for ( i = 0; i < count; ++i )
+            buffer[ (*buf_idx)++ ] = reference[ (*ref_idx)++ ];
+    }
+}
+
+static void md_match( char * buffer, size_t buf_len, size_t *buf_idx, int count, int *match_count,
+                      const char * read, int *read_idx, const char *reference, int *ref_idx )
+{
+    int i;
+    for ( i = 0; i < count; ++i )
+    {
+        if ( read[ (*read_idx)++ ] == reference[ *ref_idx ] )
+        {
+            (*match_count)++;
+        }
+        else
+        {
+            print_matchcount( buffer, buf_len, buf_idx, match_count );
+            if ( *buf_idx < buf_len )
+                buffer[ (*buf_idx)++ ] = reference[ *ref_idx ];
+        }
+        (*ref_idx)++;
+    }
+}
+
+size_t md_tag( char * buffer, size_t buf_len,
+               const struct cigar_t * c, const char * read, const char * reference )
+{
+    size_t res = 0;
+    if ( buffer != NULL && buf_len > 0 && c != NULL )
+    {
+        int read_idx = 0;
+        int ref_idx = 0;
+        int match_count = 0;
+        int cigar_idx;
+        for ( cigar_idx = 0; cigar_idx < c->length; ++cigar_idx )
+        {
+            int count = c->count[ cigar_idx ];
+            switch ( c->op[ cigar_idx ] )
+            {
+                case 'D' :     md_delete( buffer, buf_len, &res, count, &match_count,    
+                                       reference, &ref_idx );
+                            break;
+                
+                case 'I' : read_idx += count; break;
+
+                case 'M' : md_match( buffer, buf_len, &res, count, &match_count,
+                                      read, &read_idx, reference, &ref_idx );
+                            break;
+            }
+        }
+        if ( match_count > 0 )
+            print_matchcount( buffer, buf_len, &res, &match_count );
+            
+        if ( res < buf_len )
+            buffer[ res ] = 0;
+    }
+    return res;
+}
diff --git a/test/samline/cigar.h b/test/samline/cigar.h
new file mode 100644
index 0000000..75bb6a8
--- /dev/null
+++ b/test/samline/cigar.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cigar_
+#define _h_cigar_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct cigar_t;
+
+struct cigar_t * make_cigar_t( const char * cigar_str );
+void free_cigar_t( struct cigar_t * c );
+
+int cigar_t_reflen( const struct cigar_t * c );
+int cigar_t_readlen( const struct cigar_t * c );
+int cigar_t_inslen( const struct cigar_t * c );
+
+size_t cigar_t_string( char * buffer, size_t buf_len, const struct cigar_t * c );
+
+struct cigar_t * merge_cigar_t( const struct cigar_t * c );
+
+size_t md_tag( char * buffer, size_t buf_len,
+               const struct cigar_t * c, const char * read, const char * reference );
+
+void debug_cigar_t( const struct cigar_t * c );
+
+size_t cigar_t_2_read( char * buffer, size_t buf_len,
+                       const struct cigar_t * c, const char * ref_bases, const char * ins_bases );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/test/samline/example.sh b/test/samline/example.sh
new file mode 100755
index 0000000..4c385f3
--- /dev/null
+++ b/test/samline/example.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+execute()
+{
+    echo "------------------------------------------------------"
+    echo $1
+    eval $1
+    echo "."
+}
+
+# call: produce_SAM "$CONFIG" "$SAMFILE"
+produce_SAM()
+{
+    SAMLINE_BINARY="samline"
+    REFNAME="NC_011752.1"
+    REFPOS1=1000
+    REFPOS2=3500
+    CIGAR1="30MAAA20M"
+    CIGAR2="50M2D10M"
+    execute "$SAMLINE_BINARY -r $REFNAME -p $REFPOS1 -p $REFPOS2 -c $CIGAR1 -c $CIGAR2 -n $1 -d > $2"
+}
+
+# call: convert_SAM_to_BAM "$SAMFILE" "$BAMFILE"
+convert_SAM_to_BAM()
+{
+    SAMTOOLS_BINARY="/netopt/ncbi_tools64/samtools/bin/samtools"
+    execute "$SAMTOOLS_BINARY view -bS $1 > $2"
+}
+
+# call: load_BAM_to_CSRA "$CONFIG" "$BAMFILE" "$TEMP_DIR"
+load_BAM_to_CSRA()
+{
+    BAMLOAD_BINARY="bam-load"
+    execute "$BAMLOAD_BINARY -L 3 -o $3 -k $1 -E0 -Q0 $2"
+}
+
+# call: load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+load_SAM_to_CSRA()
+{
+    BAMLOAD_BINARY="bam-load"
+    execute "cat $2 | $BAMLOAD_BINARY -L 3 -o $3 -k $1 -E0 -Q0 /dev/stdin"
+}
+
+# call: kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+kar_CSRA()
+{
+    KAR_BINARY="kar"
+    execute "$KAR_BINARY --create $1 -d $2 -f"
+}
+
+SAMFILE="temp.SAM"
+CONFIG="temp.kfg"
+TEMP_DIR="temp_csra"
+FINAL_CSRA="test.csra"
+
+produce_SAM "$CONFIG" "$SAMFILE"
+load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+
+execute "rm -rf $TEMP_DIR $SAMFILE $CONFIG"
+execute "vdb-dump $FINAL_CSRA --info"
diff --git a/test/samline/refbases.c b/test/samline/refbases.c
new file mode 100644
index 0000000..0ec7052
--- /dev/null
+++ b/test/samline/refbases.c
@@ -0,0 +1,184 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+
+#include <vdb/manager.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <string.h>
+
+#include "refbases.h"
+
+static uint32_t read_uint32( const VCursor * cur, uint32_t col_idx )
+{
+    uint32_t elem_bits, boff, row_len;
+    const uint32_t * value;
+    rc_t rc = VCursorCellDataDirect ( cur, 1, col_idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc == 0 )
+        return *value;
+    return 0;
+}
+
+static uint32_t read_buffer( const VCursor * cur, char * buffer, int64_t row_id,
+                             uint32_t offset, size_t buflen, uint32_t col_idx )
+{
+    uint32_t elem_bits, boff, row_len, res = 0;
+    const char * value;
+    rc_t rc = VCursorCellDataDirect ( cur, row_id, col_idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc == 0 && row_len > offset )
+    {
+        res = ( row_len - offset );
+        if ( res > buflen ) res = buflen;
+        memmove ( buffer, &value[ offset ], res );
+    }
+    return res;
+}
+
+
+static uint32_t read_bases( const VCursor * cur, char * buffer, uint32_t ref_pos_1_based, 
+                            uint32_t ref_len, uint32_t col_idx, uint32_t max_seq_len )
+{
+    uint32_t res = 0, n_read = 1;
+    uint32_t row_id = ( ( ref_pos_1_based - 1 ) / max_seq_len ) + 1;
+    uint32_t offset = ( ref_pos_1_based - 1 ) - ( ( row_id - 1 ) * max_seq_len );
+    size_t buflen = ref_len;
+    while ( res < ref_len && n_read > 0 )
+    {
+        n_read = read_buffer( cur, &buffer[ res ], row_id++, offset, buflen, col_idx );
+        res += n_read;
+        buflen -= n_read;
+        offset = 0;
+    }
+    return res;
+}
+
+
+char * read_refbases( const char * refname, uint32_t ref_pos_1_based, uint32_t ref_len, uint32_t * bases_in_ref )
+{
+    char * res = NULL;
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc == 0 )
+    {
+        const VDBManager * mgr;
+        rc = VDBManagerMakeRead ( &mgr, dir );
+        if ( rc == 0 )
+        {
+            const VTable * tab;
+            rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", refname );
+            if ( rc == 0 )
+            {
+                const VCursor * cur;
+                rc = VTableCreateCursorRead( tab, &cur );
+                if ( rc == 0 )
+                {
+                    uint32_t base_count_idx, read_idx, max_seq_len_idx;
+                    rc = VCursorAddColumn( cur, &base_count_idx, "BASE_COUNT" );
+                    if ( rc == 0 )
+                    {
+                        rc = VCursorAddColumn( cur, &read_idx, "READ" );
+                        if ( rc == 0 )
+                        {
+                            rc = VCursorAddColumn( cur, &max_seq_len_idx, "MAX_SEQ_LEN" );
+                            if ( rc == 0 )
+                            {
+                                rc = VCursorOpen ( cur );
+                                if ( rc == 0 )
+                                {
+                                    uint32_t base_count = read_uint32( cur, base_count_idx );
+                                    if ( bases_in_ref != NULL )
+                                        *bases_in_ref = base_count;
+                                    uint32_t max_seq_len = read_uint32( cur, max_seq_len_idx );
+                                    if ( base_count > ( ref_pos_1_based + ref_len ) && max_seq_len > 0 )
+                                    {
+                                        res = malloc( ref_len + 1 );
+                                        if ( res != NULL )
+                                        {
+                                            uint32_t n_read = read_bases( cur, res, ref_pos_1_based,
+                                                                          ref_len, read_idx, max_seq_len );
+                                            res[ n_read ] = 0;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    VCursorRelease( cur );
+                }
+                VTableRelease( tab );
+            }
+            VDBManagerRelease( mgr );
+        }
+        KDirectoryRelease( dir );
+    }
+    return res;
+}
+
+
+uint32_t ref_len( const char * refname )
+{
+    uint32_t res = 0;
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc == 0 )
+    {
+        const VDBManager * mgr;
+        rc = VDBManagerMakeRead ( &mgr, dir );
+        if ( rc == 0 )
+        {
+            const VTable * tab;
+            rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", refname );
+            if ( rc == 0 )
+            {
+                const VCursor * cur;
+                rc = VTableCreateCursorRead( tab, &cur );
+                if ( rc == 0 )
+                {
+                    uint32_t base_count_idx;
+                    rc = VCursorAddColumn( cur, &base_count_idx, "BASE_COUNT" );
+                    if ( rc == 0 )
+                    {
+                        rc = VCursorOpen ( cur );
+                        if ( rc == 0 )
+                            res = read_uint32( cur, base_count_idx );
+                    }
+                    VCursorRelease( cur );
+                }
+                VTableRelease( tab );
+            }
+            VDBManagerRelease( mgr );
+        }
+        KDirectoryRelease( dir );
+    }
+    return res;
+}
diff --git a/test/samline/refbases.h b/test/samline/refbases.h
new file mode 100644
index 0000000..e229559
--- /dev/null
+++ b/test/samline/refbases.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_refbases_
+#define _h_refbases_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char * read_refbases( const char * refname, uint32_t ref_pos_1_based,
+                      uint32_t ref_len, uint32_t * bases_in_ref );
+                      
+uint32_t ref_len( const char * refname );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/test/samline/reject_multi_refnames.sh b/test/samline/reject_multi_refnames.sh
new file mode 100755
index 0000000..bd554e2
--- /dev/null
+++ b/test/samline/reject_multi_refnames.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+execute()
+{
+    echo "------------------------------------------------------"
+    echo $1
+    eval $1
+    echo "."
+}
+
+# call: produce_SAM "$SAMFILE" "$CONFIG"
+produce_SAM()
+{
+    SAMLINE_BINARY="samline"
+    
+    OUTFILE=$1
+    CONFIG=$2
+
+    REFNAME="NC_011752.1"
+    REFALIAS0="c1"
+    REFALIAS1="c2"
+    REFPOS0=1000
+    REFPOS1=3500
+    CIGAR0="50M"
+    CIGAR1="50M"
+    
+    ALIG0="-r $REFNAME -b $REFALIAS0 -p $REFPOS0 -c $CIGAR0"
+    ALIG1="-r $REFNAME -b $REFALIAS1 -p $REFPOS1 -c $CIGAR1"
+    #ALIG0="-r $REFNAME -p $REFPOS0 -c $CIGAR0"
+    #ALIG1="-r $REFNAME -p $REFPOS1 -c $CIGAR1"
+    WRITE_CONFIG="-n $CONFIG"
+    WRITE_HDR="-d" 
+    
+    execute "$SAMLINE_BINARY $ALIG0 $ALIG1 $WRITE_HDR $WRITE_CONFIG > $OUTFILE"
+}
+
+# call: load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+load_SAM_to_CSRA()
+{
+    BAMLOAD_BINARY="bam-load"
+    execute "cat $2 | $BAMLOAD_BINARY -L 5 -o $3 -k $1 -E0 -Q0 /dev/stdin" # --allow-multi-map"
+}
+
+# call: kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+kar_CSRA()
+{
+    KAR_BINARY="kar"
+    execute "$KAR_BINARY --create $1 -d $2 -f"
+}
+
+PREFIX="RMF"
+SAMFILE="${PREFIX}.SAM"
+CONFIG="${PREFIX}.kfg"
+TEMP_DIR="${PREFIX}_csra"
+FINAL_CSRA="${PREFIX}.csra"
+
+#produce_SAM "$SAMFILE" "$CONFIG"
+#execute "rm -rf $TEMP_DIR"
+load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+#kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+#execute "rm -rf $TEMP_DIR"
+#execute "vdb-dump $FINAL_CSRA --info"
\ No newline at end of file
diff --git a/test/samline/sam.py b/test/samline/sam.py
new file mode 100644
index 0000000..67d7284
--- /dev/null
+++ b/test/samline/sam.py
@@ -0,0 +1,339 @@
+import subprocess
+import os
+import shutil
+
+'''---------------------------------------------------------------
+helper function: generate READ from cigar,refname,refpos
+---------------------------------------------------------------'''
+def cigar2read( cigar, pos, ref ):
+    cmd = "sampart -f read -c %s -p %d -r %s"%( cigar, pos, ref )
+    return subprocess.check_output( cmd, shell = True )
+
+'''---------------------------------------------------------------
+helper function: generate random QUALITY of given length
+---------------------------------------------------------------'''
+def rnd_qual( l ):
+    cmd = "sampart -f qual -l %d -s 7"%( l )
+    return subprocess.check_output( cmd, shell = True )
+
+'''---------------------------------------------------------------
+helper function: transform cigar with given inserts into
+a 'clean' cigar, bam-load does accept
+---------------------------------------------------------------'''
+def merge_cigar( cigar ):
+    cmd = "sampart -f cigar -c %s"%( cigar )
+    return subprocess.check_output( cmd, shell = True )
+
+'''---------------------------------------------------------------
+helper function: to get length of a reference ( from the RefSeq-Acc )
+---------------------------------------------------------------'''
+def ref_len( ref ):
+    cmd = "sampart -f rlen -r %s"%( ref )
+    return int( subprocess.check_output( cmd, shell = True ) )
+
+'''---------------------------------------------------------------
+helper function: remove a file, without error if it does not exist
+---------------------------------------------------------------'''
+def rm_file( filename ) :
+    try:
+        os.remove( filename )
+    except:
+        pass
+
+'''---------------------------------------------------------------
+helper function: remove a direcotry, without error if it does not exist
+---------------------------------------------------------------'''
+def rm_dir( dirname ) :
+    try:
+        shutil.rmtree( dirname, ignore_errors=True )
+    except:
+        pass
+
+def load_file( filename ) :
+    if os.path.isfile( filename ) :
+        with open( filename, "r" ) as the_file:
+            return the_file.read()
+    return ""
+
+def print_file( filename ) :
+    s = load_file( filename )
+    if len( s ) > 0 :
+        print s
+
+def print_txt( txt ) :
+    if len( txt ) > 0 :
+        print txt
+
+def print_txt_list( list ) :
+    for a in list :
+        print_txt( a )
+
+'''===============================================================
+preform a bam-load on a python-list of SAM-objects
+    will create temporary files and directory ( x.sam, x.kfg, x_csra )
+    writes the content of the python-list into x.sam
+    writes a config file into x.kfg
+    performs bam-load, and prints it's output
+    kar's the created directory into the given output-file
+    can be asked to keep the temporary files
+    list ........ list of SAM-objects
+    output....... name of cSRA-file to be created
+    params....... parameters passed into bam-load
+    keep_files... False/True for debugging temp. files
+==============================================================='''
+def bam_load( list, output, params, keep_files = False ) :
+    res = 0
+    txt1=""
+    txt2=""
+    try :
+        rm_dir( "x_csra" )
+        rm_file( output )
+        rm_file( "err.txt" )
+        save_sam( list, "x.sam" )
+        save_config( list, "x.kfg" )
+        cmd = "bam-load %s -o x_csra -k x.kfg x.sam 2>err.txt"%( params )
+        txt1 = subprocess.check_output( cmd, shell=True )
+        cmd = "kar --create %s -d x_csra -f 2>err.txt"%( output )
+        txt2 = subprocess.check_output( cmd, shell=True )
+        if not keep_files :
+            rm_dir( "x_csra" )
+            rm_file( "x.sam" )
+            rm_file( "x.kfg" )
+        res = 1
+    except :
+        pass
+    print_txt_list( [ load_file( "err.txt" ), txt1, txt2 ] )
+    rm_file( "err.txt" )
+    return res
+
+
+'''===============================================================
+preform a sra-sort on a given cSRA-file
+    will create a temporary directory ( x_csra )
+    performs sra-sort, and prints it's output
+    kar's the created directory into the given output-file
+    can be asked to keep the temporary files
+    list ........ list of SAM-objects
+    output....... name of cSRA-file to be created
+    params....... parameters passed into bam-load
+    keep_files... False/True for debugging temp. files
+==============================================================='''
+def sra_sort( input, output, params = "", keep_files = False ) :
+    res = 0
+    txt1 = ""
+    txt2 = ""
+    try :
+        rm_dir( "s_csra" )
+        rm_file( output )
+        rm_file( "err.txt" )
+        cmd = "sra-sort %s s_csra -f %s 2>err.txt"%( input, params )
+        txt1 = subprocess.check_output( cmd, shell=True )
+        cmd = "kar --create %s -d s_csra -f 2>err.txt"%( output )
+        txt2 = subprocess.check_output( cmd, shell=True )
+        if not keep_files :
+            rm_dir( "s_csra" )
+        res = 1
+    except :
+        pass
+    print_txt_list( [ load_file( "err.txt" ), txt1, txt2 ] )
+    rm_file( "err.txt" )
+    return res
+
+
+def vdb_dump( accession, params = "" ) :
+    try :
+        cmd = "vdb-dump %s %s"%( accession, params )
+        txt = subprocess.check_output( cmd, stderr=subprocess.STDOUT, shell=True )
+        print txt
+        return 1
+    except :
+        pass
+    return 0
+
+def sam_dump( accession, params = "" ) :
+    try :
+        cmd = "sam-dump %s %s"%( accession, params )
+        txt = subprocess.check_output( cmd, stderr=subprocess.STDOUT, shell=True )
+        print txt
+        return 1
+    except :
+        pass
+    return 0
+
+'''===============================================================
+all 11 different SAM-Flags
+==============================================================='''
+FLAG_MULTI = 0x01
+FLAG_PROPPER = 0x02
+FLAG_UNMAPPED = 0x04
+FLAG_NEXT_UNMAPPED = 0x08
+FLAG_REVERSED = 0x010
+FLAG_NEXT_REVERSED = 0x020
+FLAG_FIRST = 0x040
+FLAG_LAST = 0x080
+FLAG_SECONDARY = 0x0100
+FLAG_BAD = 0x0200
+FLAG_PCR = 0x0400
+
+
+'''===============================================================
+    make a primary SAM-alignment
+==============================================================='''
+def make_prim( qname, flags, refname, refalias, pos, mapq, cigar, rnxt = "*", pnxt = "0" ) :
+    return SAM( qname, flags | FLAG_PROPPER, refname, refalias, pos, mapq, merge_cigar( cigar ), 
+        cigar2read( cigar, pos, refname ), rnxt, pnxt )
+
+
+'''===============================================================
+    make a secondary SAM-alignment
+==============================================================='''
+def make_sec( qname, flags, refname, refalias, pos, mapq, cigar, rnxt = "*", pnxt = "0" ) :
+    return SAM( qname, flags | FLAG_SECONDARY, refname, refalias, pos, mapq, merge_cigar( cigar ), 
+        cigar2read( cigar, pos, refname ), rnxt, pnxt )
+
+
+'''===============================================================
+    make a unaligned SAM
+==============================================================='''
+def make_unaligned( qname, flags, seq ) :
+    return SAM( qname, flags | FLAG_UNMAPPED, "-", "-", 0, 255, "*", seq, "-", 0 )
+
+
+'''---------------------------------------------------------------
+helper function: walk the list of SAM-objects, create a dictionary
+    key: refalias, value: refname
+    ( used in extract_headers and produce_config )
+---------------------------------------------------------------'''
+def make_refdict( list ) :
+    res = {}
+    for a in list :
+        res[ a.refalias ] = a.refname
+    return res
+
+'''---------------------------------------------------------------
+helper function: create SAM-headers from a list of SAM-objects
+    as a list of strings
+    used in print_sam and save_sam
+---------------------------------------------------------------'''
+def extract_headers( list ) :
+    reflist = make_refdict( list )
+    res = [ "@HD\tVN:1.3" ]
+    for k, v in reflist.items():
+        l = ref_len( v )
+        res.append( "@SQ\tSN:%s\tAS:%s\tLN:%d"%( k, k, l ) )
+    return res
+
+'''---------------------------------------------------------------
+helper function: create a config-file for bam-load out of
+    a list of SAM-objects
+    used in save_config
+---------------------------------------------------------------'''
+def produce_config( list ) :
+    reflist = make_refdict( list )
+    res = []
+    for k, v in reflist.items():
+        if k != "*" and k != "-" :
+            res.append( "%s\t%s"%( k, v ) )
+    return res
+
+'''---------------------------------------------------------------
+helper function: save config file created from list of SAM-objects
+    used in bam_load
+---------------------------------------------------------------'''
+def save_config( list, filename ) :
+    with open( filename, "w" ) as f:
+        for s in produce_config( list ) :
+            f.write( "%s\n"%( s ) )
+
+'''---------------------------------------------------------------
+helper function: prints a list of SAM-objects
+---------------------------------------------------------------'''
+def print_sam( list ):
+    for s in extract_headers( list ) :
+        print s
+    for s in list :
+        print s
+
+'''---------------------------------------------------------------
+helper function: save a list of SAM-objects as file
+    used in bam_load
+---------------------------------------------------------------'''
+def save_sam( list, filename ) :
+    with open( filename, "w" ) as f:
+        for s in extract_headers( list ) :
+            f.write( "%s\n"%( s ) )
+        for s in list :
+            f.write( "%s\n"%( s ) )
+
+'''===============================================================
+    SAM-object
+==============================================================='''
+class SAM:
+
+    def __init__( self, qname, flags, refname, refalias, pos, mapq, cigar, seq, rnxt, pnxt, tags="" ) :
+        self.qname = qname
+        self.flags = flags
+        self.refname = refname        
+        self.refalias = refalias
+        self.pos = pos
+        self.mapq = mapq
+        self.cigar = cigar
+        self.seq = seq
+        self.qual = rnd_qual( len( self.seq ) )
+        self.nxt_ref = rnxt
+        self.nxt_pos = pnxt
+        self.tlen = 0
+        self.tags = tags
+
+    def __str__( self ):
+        if len( self.tags ) > 0 :
+            return "%s\t%d\t%s\t%s\t%d\t%s\t%s\t%s\t%d\t%s\t%s\t%s"%( self.qname,
+                self.flags, self.refalias, self.pos, self.mapq, self.cigar, self.nxt_ref,
+                self.nxt_pos, self.tlen, self.seq, self.qual, self.tags )
+        else :
+            return "%s\t%d\t%s\t%s\t%d\t%s\t%s\t%s\t%d\t%s\t%s"%( self.qname,
+                self.flags, self.refalias, self.pos, self.mapq, self.cigar, self.nxt_ref,
+                self.nxt_pos, self.tlen, self.seq, self.qual )
+
+    def set_flag( self, flagbit, state ) :
+        if state :
+            self.flags |= flagbit
+        else :
+            self.flags &= ~flagbit
+
+    def set_tags( self, tag ) :
+        self.tags = tag
+
+    def add_tag( self, tag ) :
+        if len( self.tags ) > 0 :
+            self.tags += ";"
+            self.tags += tag
+        else :
+            self.tags = tag
+
+    def pair_with( self, other ) :
+        self.nxt_ref = other.refalias
+        self.nxt_pos = other.pos
+        other.nxt_ref = self.refalias
+        other.nxt_pos = self.pos
+        self.flags |= FLAG_MULTI
+        other.flags |= FLAG_MULTI
+        self.set_flag( FLAG_FIRST, True )
+        other.set_flag( FLAG_FIRST, False )
+        self.set_flag( FLAG_LAST, False )
+        other.set_flag( FLAG_LAST, True )
+        self.set_flag( FLAG_NEXT_UNMAPPED, other.flags & FLAG_UNMAPPED )
+        self.set_flag( FLAG_NEXT_REVERSED, other.flags & FLAG_REVERSED )
+        other.set_flag( FLAG_NEXT_UNMAPPED, self.flags & FLAG_UNMAPPED )
+        other.set_flag( FLAG_NEXT_REVERSED, self.flags & FLAG_REVERSED )
+        other.qname = self.qname
+
+    def link_to( self, other ) :
+        self.flags |= FLAG_MULTI
+        self.set_flag( FLAG_FIRST, other.flags & FLAG_FIRST )
+        self.set_flag( FLAG_LAST, other.flags & FLAG_LAST )
+        self.set_flag( FLAG_NEXT_UNMAPPED, other.flags & FLAG_UNMAPPED )
+        self.set_flag( FLAG_NEXT_REVERSED, other.flags & FLAG_REVERSED )
+        self.nxt_ref = other.refalias
+        self.nxt_pos = other.pos
+        self.qname = other.qname
diff --git a/test/samline/samline.vers b/test/samline/samline.vers
new file mode 100644
index 0000000..3eefcb9
--- /dev/null
+++ b/test/samline/samline.vers
@@ -0,0 +1 @@
+1.0.0
diff --git a/test/samline/sampart.c b/test/samline/sampart.c
new file mode 100644
index 0000000..e07c3f5
--- /dev/null
+++ b/test/samline/sampart.c
@@ -0,0 +1,304 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "sampart.vers.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "refbases.h"
+#include "cigar.h"
+
+#define DFLT_FUNCTION       "read"
+#define DFLT_REFNAME        "NC_011752.1"
+#define DFLT_REFPOS         10000
+#define DFLT_CIGAR          "50M"
+#define DFLT_INSBASES       "ACGTACGTACGT"
+#define DFLT_LEN            50
+#define DFLT_SEED           7
+
+static const char * function_usage[]       = { "which function to execute ( read, qual, cigar, rlen )", NULL };
+static const char * refname_usage[]        = { "the ref-seq-id to use 'NC_011752.1'", NULL };
+static const char * refpos_usage[]         = { "the position on the reference 0-based", NULL };
+static const char * cigar_usage[]          = { "the cigar-string to use", NULL };
+static const char * insbases_usage[]       = { "what bases to insert ( if needed )", NULL };
+static const char * len_usage[]            = { "length of random quality", NULL };
+static const char * seed_usage[]           = { "seed for random", NULL };
+
+#define OPTION_FUNCTION       "function"
+#define OPTION_REFNAME        "refname"
+#define OPTION_REFPOS         "refpos"
+#define OPTION_CIGAR          "cigar"
+#define OPTION_INSBASES       "insbases"
+#define OPTION_LEN            "len"
+#define OPTION_SEED           "seed"
+
+#define ALIAS_FUNCTION       "f"
+#define ALIAS_REFNAME        "r"
+#define ALIAS_REFPOS         "p"
+#define ALIAS_CIGAR          "c"
+#define ALIAS_INSBASES       "i"
+#define ALIAS_LEN            "l"
+#define ALIAS_SEED           "s"
+
+OptDef Options[] =
+{
+    { OPTION_FUNCTION,  ALIAS_FUNCTION, NULL, function_usage,  1,    true,     false },
+    { OPTION_REFNAME,   ALIAS_REFNAME,  NULL, refname_usage,   1,    true,     false },
+    { OPTION_REFPOS,    ALIAS_REFPOS,   NULL, refpos_usage,    1,    true,     false },
+    { OPTION_CIGAR,     ALIAS_CIGAR,    NULL, cigar_usage,     1,    true,     false },
+    { OPTION_INSBASES,  ALIAS_INSBASES, NULL, insbases_usage,  1,    true,     false },
+    { OPTION_LEN,       ALIAS_LEN,      NULL, len_usage,       1,    true,     false },
+    { OPTION_SEED,      ALIAS_SEED,     NULL, seed_usage,      1,    true,     false }
+};
+
+const char UsageDefaultName[] = "sampart";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg( "\nUsage:\n %s [options]\n\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    int i, n_options;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+    KOutMsg ( "Options:\n" );
+
+    n_options = sizeof Options / sizeof Options[ 0 ];
+    for ( i = 0; i < n_options; ++i )
+    {
+        OptDef * o = &Options[ i ];
+        HelpOptionLine( o->aliases, o->name, NULL, o->help );
+    }
+
+    KOutMsg ( "\n" );
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return SAMPART_VERS;
+}
+
+static const char * get_str_option( const Args * args, const char * name, uint32_t idx, const char * dflt )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( ( rc == 0 )&&( count > idx ) )
+    {
+        const char * res = NULL;
+        ArgsOptionValue( args, name, idx, (const void **)&res );
+        return res;
+    }
+    else
+        return dflt;
+}
+
+static uint32_t get_uint32_option( const Args * args, const char * name, uint32_t idx, const uint32_t dflt )
+{
+    const char * s = get_str_option( args, name, idx, NULL );
+    if ( s == NULL )
+        return dflt;
+    return atoi( s );
+}
+
+static rc_t CC write_to_FILE ( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+static rc_t make_read( const Args * args )
+{
+    rc_t rc = 0;
+    const char * cigar_str = get_str_option( args, OPTION_CIGAR, 0, DFLT_CIGAR );
+    struct cigar_t * cigar = make_cigar_t( cigar_str );
+    if ( cigar != NULL )
+    {
+        uint32_t reflen        = cigar_t_reflen( cigar );
+        uint32_t refpos        = get_uint32_option( args, OPTION_REFPOS, 0, DFLT_REFPOS );
+        const char * refname   = get_str_option( args, OPTION_REFNAME, 0, DFLT_REFNAME );
+        const char * refbases  = read_refbases( refname, refpos, reflen, NULL );
+        if ( refbases != NULL )
+        {
+            int read_len = cigar_t_readlen( cigar );
+            char * buffer = malloc( read_len + 1 );
+            if ( buffer != NULL )
+            {
+                const char * ins_bases  = get_str_option( args, OPTION_INSBASES, 0, DFLT_INSBASES );
+                cigar_t_2_read( buffer, read_len + 1, cigar, refbases, ins_bases );
+                rc = KOutMsg( "%s", buffer );
+                free( buffer );
+            }
+            free( ( void * )refbases );
+        }
+        free_cigar_t( cigar );
+    }
+    return rc;
+}
+
+
+static size_t random_string( char * buffer, size_t buflen, const char * char_set, size_t length )
+{
+    size_t res = 0;
+    if ( buffer != NULL && buflen > 0 )
+    {
+        const char dflt_charset[] = "0123456789"
+                                    "abcdefghijklmnopqrstuvwxyz"
+                                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        const char * cs = ( char_set == NULL ) ? dflt_charset : char_set;
+        size_t charset_len = strlen( cs ) - 1;
+        while ( res < length && res < ( buflen - 1 ) )
+        {
+            size_t rand_idx = ( double ) rand() / RAND_MAX * charset_len;
+            buffer[ res++ ] = cs[ rand_idx ];
+        }
+        buffer[ res ] = 0;
+    }
+    return res;
+}
+
+
+static size_t random_quality( char * buffer, size_t buflen, size_t length )
+{
+    const char qualities[] = "!\"#$%&'()*+,-./0123456789:;<=>?"
+                             "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+                             "`abcdefghijklmnopqrstuvwxyz{|}~";
+    return random_string( buffer, buflen, qualities, length );
+}
+
+
+static rc_t make_quality( const Args * args )
+{
+    rc_t rc = 0;
+    uint32_t len  = get_uint32_option( args, OPTION_LEN, 0, DFLT_LEN );
+    uint32_t seed = get_uint32_option( args, OPTION_SEED, 0, DFLT_SEED );
+    char * buffer = malloc( len + 1 );
+    if ( buffer != NULL )
+    {
+        if ( seed > 0 ) srand( seed );
+        random_quality( buffer, len + 1, len );
+        rc = KOutMsg( "%s", buffer );
+        free( buffer );
+    }
+    return rc;
+}
+
+static rc_t make_cigar( const Args * args )
+{
+    rc_t rc = 0;
+    const char * cigar_str = get_str_option( args, OPTION_CIGAR, 0, DFLT_CIGAR );
+    struct cigar_t * cigar = make_cigar_t( cigar_str );
+    if ( cigar != NULL )
+    {
+        char buffer[ 4096 ];
+        struct cigar_t * merged_cigar = merge_cigar_t( cigar );
+        cigar_t_string( buffer, sizeof buffer, merged_cigar );
+        rc = KOutMsg( "%s", buffer );
+        free_cigar_t( merged_cigar );
+        free_cigar_t( cigar );
+    }
+    return rc;
+}
+
+static rc_t get_ref_len( const Args * args )
+{
+    rc_t rc = 0;
+    const char * refname = get_str_option( args, OPTION_REFNAME, 0, DFLT_REFNAME );
+    if ( refname != NULL )
+        rc = KOutMsg( "%d", ref_len( refname ) );
+    return rc;
+}
+
+static const char function_read[] = "read";
+static const char function_qual[] = "qual";
+static const char function_cigar[] = "cigar";
+static const char function_rlen[] = "rlen";
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet ( write_to_FILE, stdout );
+    if ( rc == 0 )
+    {
+        Args * args;
+
+        int n_options = sizeof Options / sizeof Options[ 0 ];
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1,  Options, n_options );
+        if ( rc == 0 )
+        {
+            const char * function = get_str_option( args, OPTION_FUNCTION, 0, DFLT_FUNCTION );
+
+            if ( 0 == strcase_cmp ( function, string_size( function ), function_read, 4, 4 ) )
+                rc = make_read( args );
+            else if ( 0 == strcase_cmp ( function, string_size( function ), function_qual, 4, 4 ) )
+                rc = make_quality( args );
+            else if ( 0 == strcase_cmp ( function, string_size( function ), function_cigar, 5, 5 ) )
+                rc = make_cigar( args );
+            else if ( 0 == strcase_cmp ( function, string_size( function ), function_rlen, 4, 4 ) )
+                rc = get_ref_len( args );
+            else
+                rc = KOutMsg( "unknown function '%s'\n", function );
+            ArgsWhack( args );
+        }
+    }
+    return rc;
+}
diff --git a/test/samline/sampart.vers b/test/samline/sampart.vers
new file mode 100644
index 0000000..3eefcb9
--- /dev/null
+++ b/test/samline/sampart.vers
@@ -0,0 +1 @@
+1.0.0
diff --git a/test/samline/sec_align_problem.sh b/test/samline/sec_align_problem.sh
new file mode 100755
index 0000000..59f6be3
--- /dev/null
+++ b/test/samline/sec_align_problem.sh
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+execute()
+{
+    echo "------------------------------------------------------"
+    echo $1
+    eval $1
+    echo "."
+}
+
+# this will produce 2 files: 
+#   a) a config-file for bam-load with the used reference
+#   b) a SAM-file with header-line containing the lonely sec. alignment
+# call: produce_SAM "$CONFIG" "$SAMFILE"
+produce_SAM1()
+{
+    SAMLINE_BINARY="samline"
+    QNAME="--qname 1"
+    REFNAME="-r NC_011752.1"
+    REFPOS="-p 6800"
+    CIGAR="-c 55M"
+    SECONDARY="-2 1"
+    #FIRST="--first 1"
+    WITH_HEADERS="-d"
+    CREATE_CONFIG="-n $1"
+    execute "$SAMLINE_BINARY $QNAME $REFNAME $REFPOS $CIGAR $SECONDARY $FIRST $WITH_HEADERS $CREATE_CONFIG > $2"
+}
+
+# this will produce 1 file with these 2 primary mates
+# call: produce_SAM "$SAMFILE"
+produce_SAM2()
+{
+    SAMLINE_BINARY="samline"
+    QNAME="--qname 2"
+    REFNAME="-r NC_011752.1"
+    REFPOS1="-p 1000"
+    REFPOS2="-p 3500"
+    CIGAR1="-c 30MAAA20M"
+    CIGAR2="-c 50M2D10M"
+    SEC1="-2 0"
+    SEC2="-2 1"
+    execute "$SAMLINE_BINARY $QNAME $REFNAME $REFPOS1 $REFPOS2 $CIGAR1 $CIGAR2 $SEC1 $SEC2 >> $1"
+}
+
+# call: load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+load_SAM_to_CSRA()
+{
+    BAMLOAD_BINARY="bam-load"
+    execute "cat $2 | $BAMLOAD_BINARY --make-spots-with-secondary -L 3 -o $3 -k $1 -E0 -Q0 /dev/stdin"
+}
+
+# call: kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+kar_CSRA()
+{
+    KAR_BINARY="kar"
+    execute "$KAR_BINARY --create $1 -d $2 -f"
+}
+
+SAMFILE="p1.SAM"
+CONFIG="p1.cfg"
+TEMP_DIR="p1_csra"
+FINAL_CSRA="p1.csra"
+TEMP_SORTED_CSRA="p2_csra"
+SORTED_CSRA="p2.csra"
+
+produce_SAM1 "$CONFIG" "$SAMFILE"
+produce_SAM2 "$SAMFILE"
+load_SAM_to_CSRA "$CONFIG" "$SAMFILE" "$TEMP_DIR"
+kar_CSRA "$FINAL_CSRA" "$TEMP_DIR"
+#execute "vdb-dump $FINAL_CSRA --info"
+#execute "sra-stat $FINAL_CSRA"
+execute "sra-sort $FINAL_CSRA $TEMP_SORTED_CSRA -f"
+kar_CSRA "$SORTED_CSRA" "$TEMP_SORTED_CSRA"
+#execute "vdb-dump $SORTED_CSRA --info"
+#execute "sra-stat $SORTED_CSRA"
+#execute "rm -rf $TEMP_DIR $TEMP_SORTED_CSRA $SAMFILE $CONFIG"
diff --git a/test/sra-pileup/Makefile b/test/sra-pileup/Makefile
new file mode 100644
index 0000000..4ad3ec3
--- /dev/null
+++ b/test/sra-pileup/Makefile
@@ -0,0 +1,49 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/sra-pileup
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+runtests: check_exit_code
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+
+check_exit_code:
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/sra-pileup
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
diff --git a/test/srapath/Makefile b/test/srapath/Makefile
new file mode 100644
index 0000000..5402a5e
--- /dev/null
+++ b/test/srapath/Makefile
@@ -0,0 +1,49 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/srapath
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+runtests: check_exit_code
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+
+check_exit_code:
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/srapath
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
diff --git a/test/tarballs/build.xml b/test/tarballs/build.xml
new file mode 100644
index 0000000..ffe59c7
--- /dev/null
+++ b/test/tarballs/build.xml
@@ -0,0 +1,27 @@
+<project>
+    <property name="sourcename" value="sratoolkit.current-win64.zip" />
+    <property name="url" value="http://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/" />
+    <property name="workdir" value=".\temp" />
+    <property name="targetname" value="current-win64" />
+    
+    <target name="tarballs">
+        <delete dir="${workdir}" failonerror="false"/>
+        <mkdir dir="${workdir}"/>
+        <get src="${url}/${sourcename}" dest="${workdir}/${sourcename}" />
+        <unzip src="${workdir}/${sourcename}" dest="${workdir}" />
+        <delete dir="${workdir}/${sourcename}" />
+        <dirset id="tgt" dir="${workdir}" includes="*-win64"/>
+        <property name="target" refid="tgt"/>
+        <move file="${workdir}/${target}" tofile="${workdir}/${targetname}"/>
+        
+        <echo message="Target directory is ${workdir}/${targetname}"/>
+        
+        <exec executable="cmd" failonerror="true" >
+            <arg value="/c"/>
+            <arg value="test-tarballs.bat"/>
+            <arg value="${workdir}\${targetname}\bin"/>
+        </exec>
+        
+        <delete dir="${workdir}" failonerror="false"/>
+    </target>
+</project>
diff --git a/test/tarballs/test-tarballs.bat b/test/tarballs/test-tarballs.bat
new file mode 100644
index 0000000..8cffe29
--- /dev/null
+++ b/test/tarballs/test-tarballs.bat
@@ -0,0 +1,42 @@
+:: ===========================================================================
+::
+::                            PUBLIC DOMAIN NOTICE
+::               National Center for Biotechnology Information
+::
+::  This software/database is a "United States Government Work" under the
+::  terms of the United States Copyright Act.  It was written as part of
+::  the author's official duties as a United States Government employee and
+::  thus cannot be copyrighted.  This software/database is freely available
+::  to the public for use. The National Library of Medicine and the U.S.
+::  Government have not placed any restriction on its use or reproduction.
+::
+::  Although all reasonable efforts have been taken to ensure the accuracy
+::  and reliability of the software and data, the NLM and the U.S.
+::  Government do not and cannot warrant the performance or results that
+::  may be obtained by using this software or data. The NLM and the U.S.
+::  Government disclaim all warranties, express or implied, including
+::  warranties of performance, merchantability or fitness for any particular
+::  purpose.
+::
+::  Please cite the author in any work or product based on this material.
+::
+:: ===========================================================================
+
+echo on
+Setlocal
+Setlocal EnableDelayedExpansion
+
+set TOOLS=abi-dump align-info cache-mgr fastq-dump illumina-dump kar kdbmeta latf-load prefetch rcexplain sam-dump sff-dump ^
+          sra-pileup sra-stat srapath test-sra vdb-config vdb-copy vdb-decrypt vdb-dump vdb-encrypt vdb-lock ^
+          vdb-unlock vdb-validate
+rem Temporarily removed from 2.8.0 due to an HTTPS bug in C++Toolkit. To be restored later
+rem blastn_vdb tblastn_vdb
+
+:: vdb-passwd is obsolete but still in the package
+
+set FAILED=
+
+for %%t in ( %TOOLS% ) do ( echo | set /p=%%t & %1\%%t -h >NUL & ( if errorlevel 1 ( echo | set /p=failed! & set FAILED=!FAILED! %%t ) ) & echo. )
+
+if "%FAILED%" NEQ "" ( echo. & echo FAILED: %FAILED% & exit /b 1 )
+
diff --git a/test/tarballs/test-tarballs.sh b/test/tarballs/test-tarballs.sh
new file mode 100755
index 0000000..9cd2fc4
--- /dev/null
+++ b/test/tarballs/test-tarballs.sh
@@ -0,0 +1,97 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+#
+#  Download and test SRA Toolkit tarballs (see VDB-1345)
+#  Errors are reported to the specified email
+#
+# Parameters:
+# $1 - working dir (will contain a copy of the latest md5sum.txt file)
+#
+# return codes:
+# 0 - tests passed
+# 1 - wget failed
+# 2 - gunzip failed
+# 3 - tar failed
+# 4 - one of the tools failed
+
+WORKDIR=$1
+if [ "${WORKDIR}" == "" ]
+then
+    WORKDIR="./temp"
+fi
+
+TOOLS="abi-dump abi-load align-info bam-load blastn_vdb cache-mgr cg-load fastq-dump fastq-load helicos-load illumina-dump \
+illumina-load kar kdbmeta latf-load prefetch rcexplain sam-dump sff-dump sff-load sra-pileup \
+sra-sort sra-stat srapath srf-load tblastn_vdb test-sra vdb-config vdb-copy vdb-decrypt vdb-dump vdb-encrypt vdb-lock \
+vdb-unlock vdb-validate"
+
+# vdb-passwd is obsolete but still in the package
+
+case $(uname) in
+Linux)
+    python -mplatform | grep Ubuntu && OS=ubuntu64 || OS=centos_linux64
+    TOOLS="${TOOLS} pacbio-load remote-fuser"
+    ;;
+Darwin)
+    OS=mac64
+    ;;
+esac
+
+TARBALLS_URL=http://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/
+TARGET=sratoolkit.current-${OS}
+
+mkdir -p ${WORKDIR}
+cd ${WORKDIR}
+
+wget --no-check-certificate ${TARBALLS_URL}${TARGET}.tar.gz || exit 1
+gunzip -f ${TARGET}.tar.gz || exit 2
+PACKAGE=$(tar tf ${TARGET}.tar | head -n 1)
+rm -rf ${PACKAGE}
+tar xvf ${TARGET}.tar || exit 3
+
+FAILED=""
+for tool in ${TOOLS} 
+do
+    echo $tool
+    ${PACKAGE}/bin/$tool -h 
+    if [ "$?" != "0" ]
+    then
+        echo "$(pwd)/${PACKAGE}/bin/$tool failed" 
+        FAILED="${FAILED} $tool" 
+    fi
+done
+
+if [ "${FAILED}" != "" ]
+then
+    echo "The following tools failed: ${FAILED}"
+    exit 4
+fi
+
+rm -rf ${PACKAGE} ${TARGET}.tar
+cd -
+
+
+
diff --git a/test/vcf-loader/Makefile b/test/vcf-loader/Makefile
new file mode 100644
index 0000000..aaf8fcf
--- /dev/null
+++ b/test/vcf-loader/Makefile
@@ -0,0 +1,76 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+	@ rm tmp.kfg
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/vcf-loader
+
+TEST_TOOLS = \
+    test-vcf-loader 
+
+include $(TOP)/build/Makefile.env
+
+
+$(shell echo "vdb/schema/paths = \"$(VDB_INCDIR)\"" > tmp.kfg)
+
+# make sure runs are not cached in the user repository when running tests
+ifeq ($(wildcard ../../../asm-trace),)
+	ifeq (,$(VDB_CONFIG))
+		VDB_CONFIG = $(shell pwd)
+	endif
+endif
+
+ifeq (,$(VDB_CONFIG))
+	VDB_CONFIG = $(shell pwd)
+endif
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+INCDIRS += -I$(TOP)/tools/vcf-loader
+
+VCF_TEST_SRC = \
+	test-vcf-loader
+
+VCF_TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(VCF_TEST_SRC))
+
+VCF_TEST_LIB = \
+	-skapp \
+	-sktst \
+	-sncbi-wvdb \
+    -svcfloader 
+
+$(TEST_BINDIR)/test-vcf-loader: $(VCF_TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(VCF_TEST_LIB)
diff --git a/test/vcf-loader/only-remote-repository.kfg b/test/vcf-loader/only-remote-repository.kfg
new file mode 100644
index 0000000..2e7ef51
--- /dev/null
+++ b/test/vcf-loader/only-remote-repository.kfg
@@ -0,0 +1,2 @@
+/repository/remote/main/CGI/resolver-cgi = "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi"
+/repository/user/main/public/cache-enabled = "false"
diff --git a/test/vcf-loader/test-vcf-loader.cpp b/test/vcf-loader/test-vcf-loader.cpp
new file mode 100644
index 0000000..d7afaed
--- /dev/null
+++ b/test/vcf-loader/test-vcf-loader.cpp
@@ -0,0 +1,862 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* tests for VCF reader
+*/
+
+#include <ktst/unit_test.hpp>
+
+#include <klib/out.h>
+#include <klib/namelist.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-reference.h>
+
+#include <sysalloc.h>
+#include <stdexcept>
+#include <sstream>
+#include <memory.h>
+
+extern "C" {
+#include "../../tools/vcf-loader/vcf-grammar.h"
+#include "../../tools/vcf-loader/vcf-parse.h"
+#include "../../tools/vcf-loader/vcf-reader.h"
+#include "../../tools/vcf-loader/vcf-database.h"
+}
+
+using namespace std;
+using namespace ncbi::NK;
+
+TEST_SUITE(VcfLoaderTestSuite);
+
+// test fixture for scanner tests
+class VcfScanFixture
+{
+public:
+    VcfScanFixture() 
+    : consumed(0)
+    {
+        pb.self = this;
+        pb.input = Input;
+    }
+    ~VcfScanFixture() 
+    {
+        VCFScan_yylex_destroy(&pb);
+    }
+    void InitScan(const char* p_input, bool trace=false)
+    {
+        input = p_input;
+        VCFScan_yylex_init(&pb, trace);
+    }
+    int Scan()
+    {
+        int tokenId=VCF_lex(&sym, pb.scanner);
+        
+        if (tokenId != 0)
+            tokenText=string(input.c_str() + sym.tokenStart, sym.tokenLength);
+            
+        return tokenId;
+    }
+    static size_t CC Input(VCFParseBlock* sb, char* buf, size_t max_size)
+    {
+        VcfScanFixture* self = (VcfScanFixture*)sb->self;
+        if (self->input.size() < self->consumed)
+            return 0;
+
+        size_t to_copy = min(self->input.size() - self->consumed, max_size);
+        if (to_copy == 0)
+            return 0;
+
+        memmove(buf, self->input.c_str(), to_copy);
+        if (to_copy < max_size && buf[to_copy-1] != '\n')
+        {
+            buf[to_copy] = '\n';
+            ++to_copy;
+        }
+        self->consumed += to_copy;
+        return to_copy;
+    }
+
+    string input;
+    size_t consumed;
+    VCFParseBlock pb;
+    VCFToken sym;
+    string tokenText;
+};
+
+#define REQUIRE_TOKEN(tok)              REQUIRE_EQUAL(Scan(), (int)tok);
+#define REQUIRE_TOKEN_TEXT(tok, text)   REQUIRE_TOKEN(tok); REQUIRE_EQ(tokenText, string(text));
+
+#define REQUIRE_TOKEN_COORD(tok, text, line, col)  \
+    REQUIRE_TOKEN_TEXT(tok, text); \
+    REQUIRE_EQ(pb.lastToken->line_no, (size_t)line); \
+    REQUIRE_EQ(pb.lastToken->column_no, (size_t)col);
+
+FIXTURE_TEST_CASE(EmptyInput, VcfScanFixture)
+{   
+    InitScan("");
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(MetaLineSimple, VcfScanFixture)
+{   
+    InitScan("##fileformat=VCFv4.1\n");
+    REQUIRE_TOKEN_TEXT(vcfMETAKEY_FORMAT, "fileformat"); 
+    REQUIRE_TOKEN_TEXT('=', "="); 
+    REQUIRE_TOKEN_TEXT(vcfMETAVALUE, "VCFv4.1"); 
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(MetaLineComposite, VcfScanFixture)
+{   
+    InitScan("##fileformat=<key1=val1,key2=val2>\n");
+    REQUIRE_TOKEN_TEXT(vcfMETAKEY, "fileformat"); 
+    REQUIRE_TOKEN_TEXT('=', "="); 
+    REQUIRE_TOKEN_TEXT('<', "<"); 
+    REQUIRE_TOKEN_TEXT(vcfMETAKEY, "key1"); 
+    REQUIRE_TOKEN_TEXT('=', "="); 
+    REQUIRE_TOKEN_TEXT(vcfMETAVALUE, "val1"); 
+    REQUIRE_TOKEN_TEXT(',', ","); 
+    REQUIRE_TOKEN_TEXT(vcfMETAKEY, "key2"); 
+    REQUIRE_TOKEN_TEXT('=', "="); 
+    REQUIRE_TOKEN_TEXT(vcfMETAVALUE, "val2"); 
+    REQUIRE_TOKEN_TEXT('>', ">"); 
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(HeaderLine, VcfScanFixture)
+{   
+    InitScan("#CHROM\tPOS\n");
+    REQUIRE_TOKEN_TEXT(vcfHEADERITEM, "CHROM");
+    REQUIRE_TOKEN_TEXT(vcfHEADERITEM, "POS");
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(DataItems, VcfScanFixture)
+{   
+    InitScan("20\tNS=3;DP=14;AF=0.5;DB;H2\n");
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "20"); 
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "NS=3;DP=14;AF=0.5;DB;H2"); 
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(DataLine_TrailingTab, VcfScanFixture)
+{   
+    InitScan("20\tNS=3;DP=14;AF=0.5;DB;H2\t\n");
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "20"); 
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "NS=3;DP=14;AF=0.5;DB;H2"); 
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+FIXTURE_TEST_CASE(DataLine_EOF, VcfScanFixture)
+{   
+    InitScan("20\tNS=3;DP=14;AF=0.5;DB;H2");
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "20"); 
+    REQUIRE_TOKEN_TEXT(vcfDATAITEM, "NS=3;DP=14;AF=0.5;DB;H2"); 
+    REQUIRE_TOKEN(vcfENDLINE);
+    REQUIRE_TOKEN(0); 
+}
+
+// parser tests
+
+class VcfParseFixture 
+{
+public:
+    VcfParseFixture()
+    : expectError(false)
+    {
+        pb.self = this;
+        pb.input = Input;
+        pb.error = Error;
+        pb.metaLine = AddMetaLine;
+        pb.openMetaLine = OpenMetaLine;
+        pb.closeMetaLine = CloseMetaLine;
+        pb.keyValue = KeyValue;
+        pb.headerItem = HeaderItem;
+        pb.openDataLine = OpenDataLine;
+        pb.dataItem = DataItem;
+        pb.closeDataLine = CloseDataLine;
+    }
+    ~VcfParseFixture()
+    {
+        VCFScan_yylex_destroy(&pb);
+    }
+    
+protected:
+    static size_t Input(VCFParseBlock* pb, char* buf, size_t max_size)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        self.input.read(buf, max_size);
+        return self.input.gcount();
+    }
+    static void Error(VCFParseBlock* pb, const char* message)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        if (!self.expectError)
+            throw logic_error(string("VcfParseFixture::Error:") + message);
+    }
+    
+    string TokenToString(const VCFToken& t)
+    {
+        return string(input.str().c_str() + t.tokenStart, t.tokenLength);
+    }
+    
+    static void AddMetaLine(VCFParseBlock* pb, VCFToken* key, VCFToken* value)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        MetaLine::value_type p;
+        p.first = self.TokenToString(*key);
+        if (value)
+            p.second = self.TokenToString(*value);
+        MetaLine ml;
+        ml.push_back(p);
+        self.meta.push_back(ml);
+    }
+    static void OpenMetaLine(VCFParseBlock* pb, VCFToken* key)
+    {
+        AddMetaLine(pb, key, NULL);
+    }
+    static void CloseMetaLine(VCFParseBlock* pb)
+    {
+    }
+    static void KeyValue(VCFParseBlock* pb, VCFToken* key, VCFToken* value)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        MetaLine::value_type p;
+        p.first  = self.TokenToString(*key);
+        p.second = self.TokenToString(*value);
+
+        self.meta.back().push_back(p);
+    }
+    static void HeaderItem(VCFParseBlock* pb, VCFToken* value)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        self.header.push_back(self.TokenToString(*value));
+    }
+    static void OpenDataLine(VCFParseBlock* pb)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        self.data.push_back(DataLine());
+    }
+    static void DataItem(VCFParseBlock* pb, VCFToken* value)
+    {
+        VcfParseFixture& self = *reinterpret_cast<VcfParseFixture*>(pb->self);
+        self.data.back().push_back(self.TokenToString(*value));
+    }
+    static void CloseDataLine(VCFParseBlock* pb)
+    {
+    }
+    
+    void InitScan(const char* p_input, bool trace=false)
+    {
+        input.str(p_input);
+        VCFScan_yylex_init(&pb, trace);
+    }
+    
+public:
+    VCFParseBlock pb;
+    
+    istringstream input;
+    
+    typedef vector<pair<string, string> > MetaLine;
+    vector<MetaLine> meta;    
+    
+    vector<string> header;  // all tokens from the header line
+    
+    typedef vector<string> DataLine;
+    vector<DataLine> data; 
+    
+    bool expectError;
+};
+
+// parser tests
+FIXTURE_TEST_CASE(EmptyFile, VcfParseFixture)
+{
+    InitScan("");
+    expectError = true;
+    REQUIRE_EQ( VCF_parse(&pb), 0 ); // EOF
+}
+
+// meta lines 
+FIXTURE_TEST_CASE(FormatLineOnly, VcfParseFixture)
+{
+    InitScan("##fileformat=VCFv4.0\n"
+             "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+             "1\t2827693\t.\tCCGTC\tC\t.\tPASS\tSVTYPE=DEL\n");
+    REQUIRE_EQ( VCF_parse(&pb), 1 );
+    REQUIRE_EQ( meta.size(), (size_t)1 ); 
+    REQUIRE_EQ( meta[0].size(), (size_t)1 ); 
+    REQUIRE_EQ( meta[0][0].first,   string("fileformat") ); 
+    REQUIRE_EQ( meta[0][0].second,  string("VCFv4.0") ); 
+}
+
+FIXTURE_TEST_CASE(MetaLines, VcfParseFixture)
+{
+    InitScan("##fileformat=VCFv4.0\n"
+             "##fileDate=20090805\n"
+             "##source=myImputationProgramV3.1\n"
+             "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+             "1\t2827693\t.\tCCGTC\tC\t.\tPASS\tSVTYPE=DEL\n");
+    REQUIRE_EQ( VCF_parse(&pb), 1 ); // EOF
+    REQUIRE_EQ( meta.size(), (size_t)3 ); 
+
+    REQUIRE_EQ( meta[0].size(), (size_t)1 ); 
+    REQUIRE_EQ( meta[0][0].first,   string("fileformat") ); 
+    REQUIRE_EQ( meta[0][0].second,  string("VCFv4.0") ); 
+    
+    REQUIRE_EQ( meta[1].size(), (size_t)1 ); 
+    REQUIRE_EQ( meta[1][0].first,   string("fileDate") ); 
+    REQUIRE_EQ( meta[1][0].second,  string("20090805") ); 
+
+    REQUIRE_EQ( meta[2].size(), (size_t)1 ); 
+    REQUIRE_EQ( meta[2][0].first,   string("source") ); 
+    REQUIRE_EQ( meta[2][0].second,  string("myImputationProgramV3.1") ); 
+}
+
+FIXTURE_TEST_CASE(Header, VcfParseFixture)
+{
+    InitScan("##fileformat=VCFv4.0\n"
+             "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+             "1\t2827693\t.\tCCGTC\tC\t.\tPASS\tSVTYPE=DEL\n");
+    REQUIRE_EQ( VCF_parse(&pb), 1 ); 
+    REQUIRE_EQ( header.size(), (size_t)8 ); 
+    REQUIRE_EQ( header[0], string("CHROM") );
+    REQUIRE_EQ( header[1], string("POS") );
+    REQUIRE_EQ( header[2], string("ID") );
+    REQUIRE_EQ( header[3], string("REF") );
+    REQUIRE_EQ( header[4], string("ALT") );
+    REQUIRE_EQ( header[5], string("QUAL") );
+    REQUIRE_EQ( header[6], string("FILTER") );
+    REQUIRE_EQ( header[7], string("INFO") );
+}
+
+FIXTURE_TEST_CASE(MetaHeaderData, VcfParseFixture)
+{
+    InitScan(
+        "##fileformat=VCFv4.0\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tNA00001\n"
+        "1\t2827693\t.\tCCGTC\tC\t.\tPASS\tSVTYPE=DEL;END=2827680;BKPTID=Pindel_LCS_D1099159;HOMLEN=1;HOMSEQ=C;SVLEN=-66\tGT:GQ\t1/1:13.9\n");
+    REQUIRE_EQ( VCF_parse(&pb), 1 ); 
+    REQUIRE_EQ( data.size(), (size_t)1 ); 
+    
+    REQUIRE_EQ( data[0].size(), (size_t)10 ); 
+    REQUIRE_EQ( data[0][0], string("1") ); 
+    REQUIRE_EQ( data[0][1], string("2827693") ); 
+    REQUIRE_EQ( data[0][2], string(".") ); 
+    REQUIRE_EQ( data[0][3], string("CCGTC") ); 
+}
+
+FIXTURE_TEST_CASE(InfoLine, VcfParseFixture)
+{
+    InitScan("##fileformat=VCFv4.0\n"
+             "##INFO=<ID=DP,Number=1,Type=Integer,Description=\"Total Depth\">\n"
+             "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tNA00001\n"
+             "1\t2827693\t.\tCCGTC\tC\t.\tPASS\tSVTYPE=DEL\n");
+        
+    REQUIRE_EQ( VCF_parse(&pb), 1 ); 
+    REQUIRE_EQ( meta.size(), (size_t)2 ); 
+    REQUIRE_EQ( meta[1].size(), (size_t)5 ); 
+    MetaLine& ml = meta[1];
+    REQUIRE_EQ( ml[0].first,   string("INFO") ); 
+    REQUIRE_EQ( ml[0].second,  string() ); 
+    REQUIRE_EQ( ml[1].first,   string("ID") ); 
+    REQUIRE_EQ( ml[1].second,  string("DP") ); 
+    REQUIRE_EQ( ml[2].first,   string("Number") ); 
+    REQUIRE_EQ( ml[2].second,  string("1") ); 
+    REQUIRE_EQ( ml[3].first,   string("Type") ); 
+    REQUIRE_EQ( ml[3].second,  string("Integer") ); 
+    REQUIRE_EQ( ml[4].first,   string("Description") ); 
+    REQUIRE_EQ( ml[4].second,  string("\"Total Depth\"") ); 
+}
+
+
+// data lines 
+FIXTURE_TEST_CASE(MultiipleDataLines, VcfParseFixture)
+{
+    InitScan(
+        "##fileformat=VCFv4.0\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tNA00001\n"
+        "1\t2827693\n"
+        "2\t3\n");
+    REQUIRE_EQ( VCF_parse(&pb), 1 ); 
+    REQUIRE_EQ( data.size(), (size_t)2 ); 
+    
+    REQUIRE_EQ( data[0].size(), (size_t)2 ); 
+    REQUIRE_EQ( data[0][0], string("1") ); 
+    REQUIRE_EQ( data[0][1], string("2827693") ); 
+
+    REQUIRE_EQ( data[1].size(), (size_t)2 ); 
+    REQUIRE_EQ( data[1][0], string("2") ); 
+    REQUIRE_EQ( data[1][1], string("3") ); 
+}
+
+// VcfReader
+
+class VcfReaderFixture
+{
+public:
+    VcfReaderFixture()
+    : reader(0), messages(0), messageCount(0)
+    {
+        if (KDirectoryNativeDir(&wd) != 0)
+            throw logic_error(string("VcfReaderFixture: KDirectoryNativeDir failed"));
+            
+        if (VcfReaderMake((const VcfReader**)&reader) != 0)
+            throw logic_error(string("VcfReaderFixture: VcfReaderMake failed"));
+    }
+    ~VcfReaderFixture()
+    {
+        KDirectoryRemove(wd, true, filename.c_str());
+            
+        if (reader != 0 && VcfReaderWhack(reader) != 0)
+            throw logic_error(string("~VcfReaderFixture: VcfReaderWhack failed"));
+            
+        if (KDirectoryRelease(wd) != 0)
+            throw logic_error(string("~VcfReaderFixture: KDirectoryRelease failed"));
+    }
+    
+    rc_t CreateFile(const char* p_filename, const char* contents)
+    {   
+        KDirectoryRemove(wd, true, p_filename);
+        
+        filename = p_filename;
+        
+        KFile* file;
+        rc_t rc = KDirectoryCreateFile(wd, &file, true, 0664, kcmInit, p_filename);
+        if (rc == 0)
+        {
+            size_t num_writ=0;
+            rc = KFileWrite(file, 0, contents, strlen(contents), &num_writ);
+            if (rc == 0)
+                rc = KFileRelease(file);
+            else
+                KFileRelease(file);
+        }
+        return rc;
+    }
+    
+    rc_t ParseFile(const char* p_filename)
+    {
+        messages = 0;
+        messageCount = 0;
+        
+        KFile* file;
+        rc_t rc = KDirectoryOpenFileRead(wd, (const KFile**)&file, p_filename);
+        if (rc == 0)
+        {   
+            rc = VcfReaderParse(reader, file, &messages);
+            if (messages != NULL)
+            {
+                rc_t rc2 = VNameListCount(messages, &messageCount);
+                if (rc == 0)
+                    rc = rc2;
+            }
+            
+            if (rc == 0)
+                rc = KFileRelease(file);
+            else
+                KFileRelease(file);
+        }
+        return rc;
+    }
+    
+    KDirectory* wd;
+    VcfReader *reader;
+    string filename;
+    const struct VNamelist* messages;
+    uint32_t messageCount;
+};
+
+FIXTURE_TEST_CASE(VcfReader_EmptyFile, VcfReaderFixture)
+{
+    REQUIRE_RC(CreateFile(GetName(), "")); 
+    REQUIRE_RC_FAIL(ParseFile(GetName())); 
+    REQUIRE_NOT_NULL(messages);
+    REQUIRE_EQ(1u, messageCount);
+    const char* msg;
+    REQUIRE_RC(VNameListGet ( messages, 0, &msg ));
+    REQUIRE_EQ(string("Empty file"), string(msg)); 
+}
+
+static string StringToSTL(const String& str)
+{
+    return string(str.addr, str.len);
+}
+
+FIXTURE_TEST_CASE(VcfReader_Parse, VcfReaderFixture)
+{   
+    REQUIRE_RC(CreateFile(GetName(), 
+        // this is taken from the spec:
+        //  http://www.1000genomes.org/wiki/analysis/variant-call-format/vcf-variant-call-format-version-42 
+        "##fileformat=VCFv4.2\n"
+        "##fileDate=20090805\n"
+        "##source=myImputationProgramV3.1\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+        "20\t14370\trs6054257\tG\tA\t29\tPASS\tNS=3;DP=14;AF=0.5;DB;H2\n"
+        "20\t17330\t.\tT\tA\t3\tq10\tNS=3;DP=11;AF=0.017\n"
+        ));
+    REQUIRE_RC(ParseFile(GetName())); 
+        
+    uint32_t count;
+    REQUIRE_RC(VcfReaderGetDataLineCount(reader, &count));
+    REQUIRE_EQ(2u, count);
+    
+    const VcfDataLine* line;
+    REQUIRE_RC(VcfReaderGetDataLine(reader, 0, &line));
+    REQUIRE_NOT_NULL(line);
+    REQUIRE_EQ(string("20"),        StringToSTL(line->chromosome));
+    REQUIRE_EQ(14370u,              line->position);   
+    REQUIRE_EQ(string("rs6054257"), StringToSTL(line->id));
+    REQUIRE_EQ(string("G"),         StringToSTL(line->refBases));
+    REQUIRE_EQ(string("A"),         StringToSTL(line->altBases));
+    REQUIRE_EQ(29u,                 (unsigned int)line->quality);   
+    REQUIRE_EQ(string("PASS"),      StringToSTL(line->filter));
+    REQUIRE_EQ(string("NS=3;DP=14;AF=0.5;DB;H2"), StringToSTL(line->info));
+    
+    REQUIRE_RC(VcfReaderGetDataLine(reader, 1, &line));
+    REQUIRE_NOT_NULL(line);
+    REQUIRE_EQ(string("20"),    StringToSTL(line->chromosome));
+    REQUIRE_EQ(17330u,          line->position);   
+    REQUIRE_EQ(string("."),     StringToSTL(line->id));
+    REQUIRE_EQ(string("T"),     StringToSTL(line->refBases));
+    REQUIRE_EQ(string("A"),     StringToSTL(line->altBases));
+    REQUIRE_EQ(3u,              (unsigned int)line->quality);   
+    REQUIRE_EQ(string("q10"),   StringToSTL(line->filter));
+    REQUIRE_EQ(string("NS=3;DP=11;AF=0.017"), StringToSTL(line->info));
+
+    REQUIRE_RC(VcfReaderGetDataLine(reader, 2, &line));
+    REQUIRE_NULL(line);
+}
+
+FIXTURE_TEST_CASE(VcfReader_Parse_GenotypeFields, VcfReaderFixture)
+{   
+    REQUIRE_RC(CreateFile(GetName(), 
+        "##fileformat=VCFv4.2\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+        "20\t14370\trs6054257\tG\tA\t29\tPASS\tNS=3;DP=14;AF=0.5;DB;H2\tblah1\t2blah\tetc...\n"
+        ));
+    REQUIRE_RC(ParseFile(GetName())); 
+        
+    const VcfDataLine* line;
+    REQUIRE_RC(VcfReaderGetDataLine(reader, 0, &line));
+    REQUIRE_NOT_NULL(line);
+    
+    uint32_t fieldCount;
+    REQUIRE_RC( VNameListCount(line->genotypeFields, &fieldCount) );    
+    REQUIRE_EQ(3u, fieldCount);
+    
+    const char* name;
+    
+    REQUIRE_RC(VNameListGet ( line->genotypeFields, 0, &name ));
+    REQUIRE_NOT_NULL(name);
+    REQUIRE_EQ(string("blah1"), string(name));
+    
+    REQUIRE_RC(VNameListGet ( line->genotypeFields, 1, &name ));
+    REQUIRE_NOT_NULL(name);
+    REQUIRE_EQ(string("2blah"), string(name));
+
+    REQUIRE_RC(VNameListGet ( line->genotypeFields, 2, &name ));
+    REQUIRE_NOT_NULL(name);
+    REQUIRE_EQ(string("etc..."), string(name));
+}
+
+FIXTURE_TEST_CASE(VcfReader_Parse_Errors, VcfReaderFixture)
+{   
+    REQUIRE_RC(CreateFile(GetName(), 
+        "##fileformat=VCFv4.2\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+        "20\t14370\trs6054257\tG\tA\t1000\tPASS\tNS=3;DP=14;AF=0.5;DB;H2\tblah1\t2blah\tetc...\n"
+        "20\t14370\trs6054257\tG\tA\t10\tPASS\n"
+        )); // 1. 1000 is too much for a quality
+            // 2. not all mandatory fields present
+    REQUIRE_RC_FAIL(ParseFile(GetName())); 
+    REQUIRE_EQ(2u, messageCount);
+    const char* msg;
+    REQUIRE_RC(VNameListGet ( messages, 0, &msg ));
+    REQUIRE_EQ(string("line 3 column 24: invalid numeric value for 'quality'"), string(msg));
+    REQUIRE_RC(VNameListGet ( messages, 1, &msg ));
+    REQUIRE_EQ(string("line 4 column 31: one or more of the 8 mandatory columns are missing"), string(msg));
+}
+
+// VcfDatabase
+class VcfDatabaseFixture : public VcfReaderFixture
+{
+public:
+    VcfDatabaseFixture()
+    {
+        if (VDBManagerMakeUpdate(&m_vdbMgr, wd) != 0)
+            throw logic_error(string("VcfDatabaseFixture(): VDBManagerMakeUpdate failed"));
+    }
+    ~VcfDatabaseFixture()
+    {
+        if (VDBManagerRelease(m_vdbMgr) != 0)
+            throw logic_error(string("~VcfDatabaseFixture: VDBManagerRelease failed"));
+    }
+    
+    void Setup(const string& p_caseName)
+    {
+        m_dbName = p_caseName+".db";
+        m_cfgName = p_caseName+".cfg";
+        
+        KDirectoryRemove(wd, true, m_dbName.c_str());
+        
+        if (VDBManagerMakeSchema(m_vdbMgr, &m_schema) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Setup: VDBManagerMakeSchema failed"));
+        
+        if (VSchemaParseText ( m_schema, "vcf_schema", schema_text, string_measure(schema_text, NULL) ) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Setup: VSchemaParseText failed"));
+
+        if (VDBManagerCreateDB(m_vdbMgr, &m_db, m_schema, "vcf", kcmCreate | kcmMD5, m_dbName.c_str()) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Setup: VDBManagerCreateDB failed"));
+        
+        if (CreateFile(m_cfgName.c_str(), "20	CM000682.1"))
+            throw logic_error(string("VcfDatabaseFixture::Setup: CreateFile failed"));
+    }
+    void Teardown()
+    {
+        if (VDatabaseRelease(m_db) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Teardown: VDatabaseRelease failed"));
+        if (VSchemaRelease(m_schema) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Teardown: VSchemaRelease failed"));
+        // this remove fails on Windows for unexplained reasons ("access denied" to <dbname>/tbl/REFERENCE/col), so ignore the result:
+        KDirectoryRemove(wd, true, m_dbName.c_str());
+        if (KDirectoryRemove(wd, true, m_cfgName.c_str()) != 0)
+            throw logic_error(string("VcfDatabaseFixture::Teardown: KDirectoryRemove(m_cfgName) failed"));
+    }
+    
+protected:
+    static const char schema_text[];
+    static const uint32_t basesPerRow = 5000;
+    
+    VDBManager* m_vdbMgr;
+    VSchema* m_schema;
+    VDatabase* m_db;
+    string m_cfgName;
+    string m_dbName;
+};
+
+const char VcfDatabaseFixture::schema_text[] =
+"version 1; "
+
+"include 'align/align.vschema';"
+
+" table variant #1 { "
+"     extern    column U32 ref_id = .ref_id;"
+"     physical  column U32 .ref_id = ref_id;"
+
+"     extern    column U32 position = .position;"
+"     physical  column U32 .position = position;"
+
+"     extern    column U32 length = .length;"
+"     physical  column U32 .length = length;"
+
+"     extern    column ascii sequence = .sequence;"
+"     physical  column ascii .sequence = sequence;"
+
+" };"
+
+" table variant_phase #1 { "
+"     extern    column U32 variant_id = .variant_id;"
+"     physical  column U32 .variant_id = variant_id;"
+
+"     extern    column U32 phase = .phase;"
+"     physical  column U32 .phase = phase;"
+" };"
+
+" table alignment #1 { "
+"     extern    column U32 align_id = .align_id;"
+"     physical  column U32 .align_id = align_id;"
+
+"     extern    column U32 ref_id = .ref_id;"
+"     physical  column U32 .ref_id = ref_id;"
+
+"     extern    column U32 position = .position;"
+"     physical  column U32 .position = position;"
+
+"     extern    column U32 phase = .phase;"
+"     physical  column U32 .phase = phase;"
+
+"     extern    column ascii cigar = .cigar;"
+"     physical  column ascii .cigar = cigar;"
+
+"     extern    column ascii mismatch = .mismatch;"
+"     physical  column ascii .mismatch = mismatch;"
+
+" };"
+
+"database vcf #1 { "
+"    table NCBI:align:tbl:reference #2  REFERENCE;"
+"    table variant #1                   VARIANT;"
+"    table variant_phase #1             VARIANT_PHASE;"
+"    table alignment #1                 ALIGNMENT;"
+"};";
+
+FIXTURE_TEST_CASE(VcfDatabase_GetReference, VcfDatabaseFixture)
+{
+    // this would be better done as a unit test on the ReferenceSeq interface
+    // (there is no appropriate suite for that at this point)
+    Setup(GetName());
+    const ReferenceMgr* refMgr;
+    REQUIRE_RC(ReferenceMgr_Make(&refMgr, m_db, m_vdbMgr, 0, m_cfgName.c_str(), NULL, 0, 0, 0));
+    const ReferenceSeq* seq;
+    bool dummy1 = false;
+    bool dummy2 = false;
+    REQUIRE_RC(ReferenceMgr_GetSeq(refMgr, &seq, "20", &dummy1, false, &dummy2));
+    
+    INSDC_coord_zero coord = 14370;
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    uint64_t global_ref_start;
+    REQUIRE_RC(ReferenceSeq_TranslateOffset_int(seq, coord, &ref_id, &ref_start, &global_ref_start));
+    REQUIRE_EQ(ref_id, (int64_t)(1 + coord / basesPerRow));
+    REQUIRE_EQ(ref_start, (INSDC_coord_zero)(coord % basesPerRow));
+    REQUIRE_EQ(global_ref_start, (uint64_t)coord);
+
+    REQUIRE_RC(ReferenceSeq_Release(seq));
+    REQUIRE_RC(ReferenceMgr_Release(refMgr, true, NULL, false, NULL));
+    Teardown();
+}
+
+FIXTURE_TEST_CASE(VcfDatabaseBasic, VcfDatabaseFixture)
+{
+    Setup(GetName());
+
+    REQUIRE_RC(CreateFile(GetName(), 
+        // this is taken from the spec:
+        //  http://www.1000genomes.org/wiki/analysis/variant-call-format/vcf-variant-call-format-version-42 
+        "##fileformat=VCFv4.2\n"
+        "##fileDate=20090805\n"
+        "##source=myImputationProgramV3.1\n"
+        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"
+        "20\t14370\trs6054257\tG\tCCCC\t29\tPASS\tNS=3;DP=14;AF=0.5;DB;H2\n"
+        "20\t17330\t.\tT\tA\t3\tq10\tNS=3;DP=11;AF=0.017\n"
+        ));
+    REQUIRE_RC(ParseFile(GetName())); 
+
+    REQUIRE_RC(VcfDatabaseSave(reader, m_cfgName.c_str(), m_db));
+
+    // verify
+    const VTable *tbl;
+    REQUIRE_RC(VDBManagerOpenTableRead(m_vdbMgr, &tbl, m_schema, (m_dbName+"/tbl/VARIANT").c_str()));
+    VCursor *cur;
+    REQUIRE_RC(VTableCreateCursorRead( tbl, (const VCursor**)&cur ));
+    
+    uint32_t ref_id_idx, position_idx, length_idx, sequence_idx;
+    REQUIRE_RC(VCursorAddColumn( cur, &ref_id_idx, "ref_id" ));
+    REQUIRE_RC(VCursorAddColumn( cur, &position_idx, "position" ));
+    REQUIRE_RC(VCursorAddColumn( cur, &length_idx, "length" ));
+    REQUIRE_RC(VCursorAddColumn( cur, &sequence_idx, "sequence" ));    
+    
+    REQUIRE_RC(VCursorOpen( cur ));
+    
+    char buf[256];
+    uint32_t row_len;
+    const uint32_t elemBits = 8;
+
+    int64_t rowId = 1;
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 1, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(8u, row_len);
+    REQUIRE_EQ(3u, *(uint32_t*)buf);
+    
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 2, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(sizeof(INSDC_coord_zero), (size_t)row_len);
+    REQUIRE_EQ((INSDC_coord_zero)(14370u % basesPerRow), *(INSDC_coord_zero*)buf);
+    
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 3, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(sizeof(uint32_t), (size_t)row_len);
+    REQUIRE_EQ(4u, *(uint32_t*)buf);
+
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 4, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(4u, row_len);
+    REQUIRE_EQ(string(buf, 4), string("CCCC"));
+
+    rowId = 2;
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 1, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(8u, row_len);
+    REQUIRE_EQ(4u, *(uint32_t*)buf);
+    
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 2, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(sizeof(INSDC_coord_zero), (size_t)row_len);
+    REQUIRE_EQ((INSDC_coord_zero)(17330u % basesPerRow), *(INSDC_coord_zero*)buf);
+    
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 3, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(sizeof(uint32_t), (size_t)row_len);
+    REQUIRE_EQ(1u, *(uint32_t*)buf);
+
+    REQUIRE_RC(VCursorReadDirect(cur, rowId, 4, elemBits, buf, sizeof(buf), &row_len ));    
+    REQUIRE_EQ(1u, row_len);
+    REQUIRE_EQ(string(buf, 1), string("A"));
+
+    rowId = 3;
+    REQUIRE_RC_FAIL(VCursorReadDirect(cur, rowId, 1, elemBits, buf, sizeof(buf), &row_len ));    
+    
+    REQUIRE_RC(VCursorRelease(cur));
+    REQUIRE_RC(VTableRelease(tbl));
+    Teardown();
+}
+
+//////////////////////////////////////////// Main
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+extern "C"
+{
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+
+const char UsageDefaultName[] = "vcf-loader-test";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ( "Usage:\n" "\t%s [options] -o path\n\n", progname );
+}
+
+rc_t CC Usage( const Args* args )
+{
+    return 0;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    KConfigDisableUserSettings();
+    
+    rc_t rc = VcfLoaderTestSuite(argc, argv);
+    return rc;
+}
+
+}
+
diff --git a/test/vdb-copy/Makefile b/test/vdb-copy/Makefile
new file mode 100644
index 0000000..6e52fe4
--- /dev/null
+++ b/test/vdb-copy/Makefile
@@ -0,0 +1,49 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/vdb-copy
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+runtests: check_exit_code
+
+#-------------------------------------------------------------------------------
+# scripted tests
+#
+
+check_exit_code:
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/vdb-copy
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
diff --git a/test/vdb-dump/Makefile b/test/vdb-dump/Makefile
new file mode 100644
index 0000000..5449f2c
--- /dev/null
+++ b/test/vdb-dump/Makefile
@@ -0,0 +1,104 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/vdb-dump
+
+TEST_TOOLS =
+
+include $(TOP)/build/Makefile.env
+
+EXT_TOOLS = \
+	vdb-dump-makedb
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TEST_TOOLS)
+
+runtests: vdb-dump
+
+#-------------------------------------------------------------------------------
+# vdb-dump-makedb
+# Create test databases
+MAKEDB_SRC = \
+	makedb
+
+MAKEDB_OBJ = \
+	$(addsuffix .$(OBJX),$(MAKEDB_SRC))
+
+MAKEDB_LIB = \
+	-skapp \
+	-sktst \
+	-sncbi-wvdb \
+
+$(BINDIR)/vdb-dump-makedb: $(MAKEDB_OBJ)
+	$(LP) --exe -o $@ $^ $(MAKEDB_LIB)
+
+makedb:
+	@ cd $(SRCDIR); rm -rf data; mkdir -p data; $(BINDIR)/vdb-dump-makedb
+
+#-------------------------------------------------------------------------------
+# run tests for vdb-dump
+vdb-dump: makedb
+	@ rm -rf actual
+	@ mkdir -p actual
+	@ echo "testing vdb-dump..."
+	@ # output format
+	@ $(BINDIR)/vdb-dump SRR056386 -R 1 -C READ -f tab >actual/1.0.stdout && diff expected/1.0.stdout actual/1.0.stdout
+	@ $(BINDIR)/vdb-dump SRR056386 -R 1 -C READ -f tab -I >actual/1.1.stdout && diff expected/1.1.stdout actual/1.1.stdout
+	@ # nested databases
+	@ $(BINDIR)/vdb-dump -E data/NestedDatabase >actual/2.0.stdout && diff expected/2.0.stdout actual/2.0.stdout
+	@ $(BINDIR)/vdb-dump -T SUBDB_1.SUBSUBDB_1.TABLE1 data/NestedDatabase >actual/2.1.stdout && diff expected/2.1.stdout actual/2.1.stdout
+	@ $(BINDIR)/vdb-dump -T SUBDB_1.SUBSUBDB_2.TABLE2 data/NestedDatabase >actual/2.2.stdout && diff expected/2.2.stdout actual/2.2.stdout
+	@ rm -rf actual
+	@ rm -rf data
+	@ python $(TOP)/build/check-exit-code.py $(BINDIR)/vdb-dump
+	@ echo "...all tests passed"
+
+.PHONY: kar
+
diff --git a/test/vdb-dump/expected/1.0.stdout b/test/vdb-dump/expected/1.0.stdout
new file mode 100644
index 0000000..8645a27
--- /dev/null
+++ b/test/vdb-dump/expected/1.0.stdout
@@ -0,0 +1 @@
+TCAGAATTACTTGAGGCTGCACACCATTCAAGTTGTCATGAGACACGTCATCAAGAGGCACTTCCACGTCGACATCTGCGGCAGTCTAACCGTCTGTATTAATGTTGTAATTACTTTCCATTTACTGATTTGATGTTAAAACAAATTTAATTAATTTATAACAATTTAACTTAAATCCTTCTTAATCTCTTTAAATGAACTGAGGGGGTTTTGGGGGTTTTTGGGGTTTTTGGGGGTTTTTGGGGGTCGTGCCACGCTTACCGTACATCCGCCTTGGCCTGAGACTGCCAAAGGGCACCACAGGGGGGGGATTAAGGGGN
diff --git a/test/vdb-dump/expected/1.1.stdout b/test/vdb-dump/expected/1.1.stdout
new file mode 100644
index 0000000..77cc039
--- /dev/null
+++ b/test/vdb-dump/expected/1.1.stdout
@@ -0,0 +1 @@
+1	TCAGAATTACTTGAGGCTGCACACCATTCAAGTTGTCATGAGACACGTCATCAAGAGGCACTTCCACGTCGACATCTGCGGCAGTCTAACCGTCTGTATTAATGTTGTAATTACTTTCCATTTACTGATTTGATGTTAAAACAAATTTAATTAATTTATAACAATTTAACTTAAATCCTTCTTAATCTCTTTAAATGAACTGAGGGGGTTTTGGGGGTTTTTGGGGTTTTTGGGGGTTTTTGGGGGTCGTGCCACGCTTACCGTACATCCGCCTTGGCCTGAGACTGCCAAAGGGCACCACAGGGGGGGGATTAAGGGGN
diff --git a/test/vdb-dump/expected/2.0.stdout b/test/vdb-dump/expected/2.0.stdout
new file mode 100644
index 0000000..96d6437
--- /dev/null
+++ b/test/vdb-dump/expected/2.0.stdout
@@ -0,0 +1,15 @@
+enumerating the tables of database 'data/NestedDatabase'
+db  : SUBDB_1
+   db  : SUBSUBDB_1
+      tbl : TABLE1
+   db  : SUBSUBDB_2
+      tbl : TABLE2
+   tbl : TABLE1
+db  : SUBDB_2
+   db  : SUBSUBDB_1
+      tbl : TABLE1
+   db  : SUBSUBDB_2
+      tbl : TABLE2
+   tbl : TABLE2
+tbl : TABLE1
+tbl : TABLE2
diff --git a/test/vdb-dump/expected/2.1.stdout b/test/vdb-dump/expected/2.1.stdout
new file mode 100644
index 0000000..aacb50a
--- /dev/null
+++ b/test/vdb-dump/expected/2.1.stdout
@@ -0,0 +1,4 @@
+col: 1-1/1
+
+col: 1-1/2
+
diff --git a/test/vdb-dump/expected/2.2.stdout b/test/vdb-dump/expected/2.2.stdout
new file mode 100644
index 0000000..0114a14
--- /dev/null
+++ b/test/vdb-dump/expected/2.2.stdout
@@ -0,0 +1,4 @@
+col: 2-2/1
+
+col: 2-2/2
+
diff --git a/test/vdb-dump/makedb.cpp b/test/vdb-dump/makedb.cpp
new file mode 100644
index 0000000..d32998b
--- /dev/null
+++ b/test/vdb-dump/makedb.cpp
@@ -0,0 +1,229 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/**
+* Create test databases for vdb-dump
+*/
+
+#include <fstream>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+using namespace std;
+
+#define CHECK_RC(call) { rc_t rc = call; if ( rc != 0 ) return rc; }
+
+rc_t
+AddRow ( VCursor* p_curs, int64_t p_rowId, uint32_t p_colIdx, const string& p_value )
+{
+    CHECK_RC ( VCursorSetRowId ( p_curs, p_rowId ) );
+    CHECK_RC ( VCursorOpenRow ( p_curs ) );
+    CHECK_RC ( VCursorWrite ( p_curs, p_colIdx, 8, p_value.c_str(), 0, p_value.size() ) );
+    CHECK_RC ( VCursorCommitRow ( p_curs ) );
+    CHECK_RC ( VCursorCloseRow ( p_curs ) );
+    CHECK_RC ( VCursorCommit ( p_curs ) );
+    return 0;
+}
+
+rc_t
+NestedDatabase()
+{
+    const string ScratchDir         = "./data/";
+    const string DefaultSchemaText  =
+        "table table1 #1.0.0 { column ascii col; };\n"
+        "table table2 #1.0.0 { column ascii col; };\n"
+
+        "database database1_1 #1 { table table1 #1 TABLE1; };\n"
+        "database database1_2 #1 { table table2 #1 TABLE2; };\n"
+
+        "database database1 #1\n"
+        "{\n"
+        " database database1_1 #1 SUBSUBDB_1;\n"
+        " database database1_2 #1 SUBSUBDB_2;\n"
+        " table table1 #1 TABLE1;\n"
+        "};\n"
+
+        "database database2 #1\n"
+        "{\n"
+        " database database1_1 #1 SUBSUBDB_1;\n"
+        " database database1_2 #1 SUBSUBDB_2;\n"
+        " table table2 #1 TABLE2;\n"
+        "};\n"
+
+        "database root_database #1\n"
+        "{\n"
+        " database database1 #1 SUBDB_1;\n"
+        " database database2 #1 SUBDB_2;\n"
+        " table table1 #1 TABLE1;\n"
+        " table table2 #1 TABLE2;\n"
+        " };\n"
+    ;
+    const string DefaultDatabase    = "root_database";
+
+    VDBManager* mgr;
+    CHECK_RC ( VDBManagerMakeUpdate ( & mgr, NULL ) );
+    VSchema* schema;
+    CHECK_RC ( VDBManagerMakeSchema ( mgr, & schema ) );
+    CHECK_RC ( VSchemaParseText ( schema, NULL, DefaultSchemaText.c_str(), DefaultSchemaText.size() ) );
+
+    VDatabase* db;
+    CHECK_RC ( VDBManagerCreateDB ( mgr,
+                                    & db,
+                                    schema,
+                                    DefaultDatabase . c_str(),
+                                    kcmInit + kcmMD5,
+                                    "%s",
+                                    ( ScratchDir + "NestedDatabase" ) . c_str() ) );
+
+    {   // SUBDB_1
+        VDatabase *db1;
+        CHECK_RC ( VDatabaseCreateDB ( db, & db1, "SUBDB_1", kcmInit + kcmMD5, "SUBDB_1" ) );
+        {   // SUBSUBDB_1
+            VDatabase *db1_1;
+            CHECK_RC ( VDatabaseCreateDB ( db1, & db1_1, "SUBSUBDB_1", kcmInit + kcmMD5, "SUBSUBDB_1" ) );
+            {   // TABLE1
+                VTable *tab;
+                CHECK_RC ( VDatabaseCreateTable ( db1_1, & tab, "TABLE1", kcmInit + kcmMD5, "TABLE1" ) );
+                VCursor *curs;
+                CHECK_RC ( VTableCreateCursorWrite ( tab, & curs, kcmInsert ) ) ;
+                uint32_t idx;
+                CHECK_RC ( VCursorAddColumn ( curs, & idx, "col" ) );
+                CHECK_RC ( VCursorOpen ( curs ) );
+                CHECK_RC ( AddRow ( curs, 1, idx, "1-1/1" ) );
+                CHECK_RC ( AddRow ( curs, 2, idx, "1-1/2" ) );
+                CHECK_RC ( VCursorRelease ( curs ) );
+                CHECK_RC ( VTableRelease ( tab ) );
+            }
+            CHECK_RC ( VDatabaseRelease ( db1_1 ) );
+        }
+        {   // SUBSUBDB_2
+            VDatabase *db1_2;
+            CHECK_RC ( VDatabaseCreateDB ( db1, & db1_2, "SUBSUBDB_2", kcmInit + kcmMD5, "SUBSUBDB_2" ) );
+            {   // TABLE2
+                VTable *tab;
+                CHECK_RC ( VDatabaseCreateTable ( db1_2, & tab, "TABLE2", kcmInit + kcmMD5, "TABLE2" ) );
+                VCursor *curs;
+                CHECK_RC ( VTableCreateCursorWrite ( tab, & curs, kcmInsert ) ) ;
+                uint32_t idx;
+                CHECK_RC ( VCursorAddColumn ( curs, & idx, "col" ) );
+                CHECK_RC ( VCursorOpen ( curs ) );
+                CHECK_RC ( AddRow ( curs, 1, idx, "2-2/1" ) );
+                CHECK_RC ( AddRow ( curs, 2, idx, "2-2/2" ) );
+                CHECK_RC ( VCursorRelease ( curs ) );
+                CHECK_RC ( VTableRelease ( tab ) );
+            }
+            CHECK_RC ( VDatabaseRelease ( db1_2 ) );
+        }
+        {   // TABLE1
+            VTable *tab;
+            CHECK_RC ( VDatabaseCreateTable ( db1, & tab, "TABLE1", kcmInit + kcmMD5, "TABLE1" ) );
+            CHECK_RC ( VTableRelease ( tab ) );
+        }
+        CHECK_RC ( VDatabaseRelease ( db1 ) );
+    }
+    {   // SUBDB_2
+        VDatabase *db2;
+        CHECK_RC ( VDatabaseCreateDB ( db, & db2, "SUBDB_2", kcmInit + kcmMD5, "SUBDB_2" ) );
+        {   // SUBSUBDB_1
+            VDatabase *db2_1;
+            CHECK_RC ( VDatabaseCreateDB ( db2, & db2_1, "SUBSUBDB_1", kcmInit + kcmMD5, "SUBSUBDB_1" ) );
+            {   // TABLE1
+                VTable *tab;
+                CHECK_RC ( VDatabaseCreateTable ( db2_1, & tab, "TABLE1", kcmInit + kcmMD5, "TABLE1" ) );
+                CHECK_RC ( VTableRelease ( tab ) );
+            }
+            CHECK_RC ( VDatabaseRelease ( db2_1 ) );
+        }
+        {   // SUBSUBDB_2
+            VDatabase *db2_2;
+            CHECK_RC ( VDatabaseCreateDB ( db2, & db2_2, "SUBSUBDB_2", kcmInit + kcmMD5, "SUBSUBDB_2" ) );
+            {   // TABLE2
+                VTable *tab;
+                CHECK_RC ( VDatabaseCreateTable ( db2_2, & tab, "TABLE2", kcmInit + kcmMD5, "TABLE2" ) );
+                CHECK_RC ( VTableRelease ( tab ) );
+            }
+            CHECK_RC ( VDatabaseRelease ( db2_2 ) );
+        }
+        {   // TABLE2
+            VTable *tab;
+            CHECK_RC ( VDatabaseCreateTable ( db2, & tab, "TABLE2", kcmInit + kcmMD5, "TABLE2" ) );
+            CHECK_RC ( VTableRelease ( tab ) );
+        }
+        CHECK_RC ( VDatabaseRelease ( db2 ) );
+    }
+
+    {   // TABLE1
+        VTable *tab;
+        CHECK_RC ( VDatabaseCreateTable ( db, & tab, "TABLE1", kcmInit + kcmMD5, "TABLE1" ) );
+        CHECK_RC ( VTableRelease ( tab ) );
+    }
+    {   // TABLE2
+        VTable *tab;
+        CHECK_RC ( VDatabaseCreateTable ( db, & tab, "TABLE2", kcmInit + kcmMD5, "TABLE2" ) );
+        CHECK_RC ( VTableRelease ( tab ) );
+    }
+
+    CHECK_RC ( VSchemaRelease ( schema ) );
+    CHECK_RC ( VDatabaseRelease ( db ) );
+    CHECK_RC ( VDBManagerRelease ( mgr ) );
+    return 0;
+}
+
+//////////////////////////////////////////// Main
+extern "C"
+{
+
+#include <kapp/args.h>
+#include <kfg/config.h>
+
+ver_t CC KAppVersion ( void )
+{
+    return 0x1000000;
+}
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "makedb";
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    KConfigDisableUserSettings();
+
+    return NestedDatabase();
+}
+
+}
diff --git a/test/vdb-validate/Makefile b/test/vdb-validate/Makefile
new file mode 100644
index 0000000..934a9f2
--- /dev/null
+++ b/test/vdb-validate/Makefile
@@ -0,0 +1,66 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/vdb-validate
+
+TEST_TOOLS = \
+
+ALL_TOOLS = \
+	$(TEST_TOOLS) \
+
+include $(TOP)/build/Makefile.env
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: $(TEST_TOOLS)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# ref-variation tool tests
+#
+runtests: vdb-validate
+
+vdb-validate: $(BINDIR)/vdb-validate
+	@ echo "Starting vdb-validate tests..."
+	@ rm -rf actual/
+	@ mkdir actual/
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_len_mismatch.csra" no_sdc_checks 0
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_tmp_mismatch.csra --sdc:rows 100%" sdc_tmp_mismatch 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_pa_longer.csra --sdc:rows 100%" sdc_pa_longer_1 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_pa_longer.csra --sdc:rows 100% --sdc:plen_thold 50%" sdc_pa_longer_2 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_pa_longer.csra --sdc:rows 100% --sdc:plen_thold 51%" sdc_pa_longer_3 0
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_len_mismatch.csra --sdc:rows 100% --sdc:plen_thold 1%" sdc_len_mismatch_1 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_len_mismatch.csra --sdc:rows 100% --sdc:plen_thold 100%" sdc_len_mismatch_2 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_seq_cmp_read_len_corrupt.csra --sdc:seq-rows 100%" sdc_seq_cmp_read_len_corrupt 3
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/sdc_seq_cmp_read_len_fixed.csra --sdc:seq-rows 100%" sdc_seq_cmp_read_len_fixed 0
+	@ ./runtestcase.sh "$(BINDIR)/vdb-validate db/blob-row-gap.kar" ROW_GAP 0
+	@ echo "All vdb-validate tests succeed"
+	@ rm -rf actual/
+
diff --git a/test/vdb-validate/db/blob-row-gap.kar b/test/vdb-validate/db/blob-row-gap.kar
new file mode 100644
index 0000000..9b6bdd8
Binary files /dev/null and b/test/vdb-validate/db/blob-row-gap.kar differ
diff --git a/test/vdb-validate/db/sdc_len_mismatch.csra b/test/vdb-validate/db/sdc_len_mismatch.csra
new file mode 100644
index 0000000..52afee0
Binary files /dev/null and b/test/vdb-validate/db/sdc_len_mismatch.csra differ
diff --git a/test/vdb-validate/db/sdc_pa_longer.csra b/test/vdb-validate/db/sdc_pa_longer.csra
new file mode 100644
index 0000000..3e767a5
Binary files /dev/null and b/test/vdb-validate/db/sdc_pa_longer.csra differ
diff --git a/test/vdb-validate/db/sdc_seq_cmp_read_len_corrupt.csra b/test/vdb-validate/db/sdc_seq_cmp_read_len_corrupt.csra
new file mode 100644
index 0000000..e26e354
Binary files /dev/null and b/test/vdb-validate/db/sdc_seq_cmp_read_len_corrupt.csra differ
diff --git a/test/vdb-validate/db/sdc_seq_cmp_read_len_fixed.csra b/test/vdb-validate/db/sdc_seq_cmp_read_len_fixed.csra
new file mode 100644
index 0000000..0810af0
Binary files /dev/null and b/test/vdb-validate/db/sdc_seq_cmp_read_len_fixed.csra differ
diff --git a/test/vdb-validate/db/sdc_tmp_mismatch.csra b/test/vdb-validate/db/sdc_tmp_mismatch.csra
new file mode 100644
index 0000000..a34c387
Binary files /dev/null and b/test/vdb-validate/db/sdc_tmp_mismatch.csra differ
diff --git a/test/vdb-validate/expected/ROW_GAP b/test/vdb-validate/expected/ROW_GAP
new file mode 100644
index 0000000..17532f7
--- /dev/null
+++ b/test/vdb-validate/expected/ROW_GAP
@@ -0,0 +1,42 @@
+info: Database 'blob-row-gap.kar' metadata: md5 ok
+info: Table 'FEATURE' metadata: md5 ok
+info: Column 'FEAT_TYPE': checksums ok
+info: Column 'LOC_LEN': checksums ok
+info: Column 'LOC_ROW_ID': checksums ok
+info: Column 'LOC_SEQ_TYPE': checksums ok
+info: Column 'LOC_START': checksums ok
+info: Column 'LOC_STRAND': checksums ok
+info: Column 'PRODUCT_LEN': checksums ok
+info: Column 'PRODUCT_ROW_ID': checksums ok
+info: Column 'PRODUCT_SEQ_TYPE': checksums ok
+info: Column 'PRODUCT_START': checksums ok
+info: Column 'SEQ_FEAT': checksums ok
+info: Table 'GI_IDX' metadata: md5 ok
+info: Column 'NUC_ROW_ID': checksums ok
+info: Column 'PROT_ROW_ID': checksums ok
+info: Table 'PROTEIN' metadata: md5 ok
+info: Column 'DESCR': checksums ok
+info: Column 'FEAT_PRODUCT_ROW_ID': checksums ok
+info: Column 'FEAT_ROW_END': checksums ok
+info: Column 'FEAT_ROW_START': checksums ok
+info: Column 'GI': checksums ok
+info: Column 'HASH': checksums ok
+info: Column 'PROTEIN': checksums ok
+info: Column 'PROTEIN_LEN': checksums ok
+info: Column 'PROTEIN_NAME': checksums ok
+info: Column 'TITLE': checksums ok
+info: Table 'PROT_ACC_IDX' metadata: md5 ok
+info: Column 'PROTEIN_ROW_ID': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'ALTREAD': checksums ok
+info: Column 'CLIP_LEN': checksums ok
+info: Column 'CONTIG_NAME': checksums ok
+info: Column 'DESCR': checksums ok
+info: Column 'FEAT_ROW_END': checksums ok
+info: Column 'FEAT_ROW_START': checksums ok
+info: Column 'GI': checksums ok
+info: Column 'HASH': checksums ok
+info: Column 'PROT_COUNT': checksums ok
+info: Column 'READ': checksums ok
+info: Column 'TITLE': checksums ok
+info: Database 'blob-row-gap.kar' is consistent
diff --git a/test/vdb-validate/expected/no_sdc_checks b/test/vdb-validate/expected/no_sdc_checks
new file mode 100644
index 0000000..53e5c2c
--- /dev/null
+++ b/test/vdb-validate/expected/no_sdc_checks
@@ -0,0 +1,23 @@
+info: Database 'sdc_len_mismatch.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CGRAPH_MISMATCHES': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_len_mismatch.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_len_mismatch.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+info: Database 'sdc_len_mismatch.csra' is consistent
diff --git a/test/vdb-validate/expected/sdc_len_mismatch_1 b/test/vdb-validate/expected/sdc_len_mismatch_1
new file mode 100644
index 0000000..7ae23b4
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_len_mismatch_1
@@ -0,0 +1,24 @@
+info: Database 'sdc_len_mismatch.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CGRAPH_MISMATCHES': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_len_mismatch.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_len_mismatch.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+err: data inconsistent while validating database - Database 'db/sdc_len_mismatch.csra': Limit violation (pa_longer_sa): there are at least 1 alignments where HAS_REF_OFFSET column is longer in PRIMARY_ALIGNMENT than in SECONDARY_ALIGNMENT
+err: data inconsistent while validating database - Database 'sdc_len_mismatch.csra' check failed
diff --git a/test/vdb-validate/expected/sdc_len_mismatch_2 b/test/vdb-validate/expected/sdc_len_mismatch_2
new file mode 100644
index 0000000..313eb27
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_len_mismatch_2
@@ -0,0 +1,24 @@
+info: Database 'sdc_len_mismatch.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CGRAPH_MISMATCHES': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_len_mismatch.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_len_mismatch.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+err: data inconsistent while validating database - Database 'db/sdc_len_mismatch.csra': PRIMARY_ALIGNMENT:2 HAS_REF_OFFSET length (23) less than SECONDARY_ALIGNMENT:2 HAS_REF_OFFSET length (52)
+err: data inconsistent while validating database - Database 'sdc_len_mismatch.csra' check failed
diff --git a/test/vdb-validate/expected/sdc_pa_longer_1 b/test/vdb-validate/expected/sdc_pa_longer_1
new file mode 100644
index 0000000..ecd7ac8
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_pa_longer_1
@@ -0,0 +1,26 @@
+info: Database 'sdc_pa_longer.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Column 'TMP_HAS_MISMATCH': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_pa_longer.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_pa_longer.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+err: data inconsistent while validating database - Database 'db/sdc_pa_longer.csra': Limit violation (pa_longer_sa): there are at least 1 alignments where HAS_REF_OFFSET column is longer in PRIMARY_ALIGNMENT than in SECONDARY_ALIGNMENT
+err: data inconsistent while validating database - Database 'sdc_pa_longer.csra' check failed
diff --git a/test/vdb-validate/expected/sdc_pa_longer_2 b/test/vdb-validate/expected/sdc_pa_longer_2
new file mode 100644
index 0000000..ecd7ac8
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_pa_longer_2
@@ -0,0 +1,26 @@
+info: Database 'sdc_pa_longer.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Column 'TMP_HAS_MISMATCH': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_pa_longer.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_pa_longer.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+err: data inconsistent while validating database - Database 'db/sdc_pa_longer.csra': Limit violation (pa_longer_sa): there are at least 1 alignments where HAS_REF_OFFSET column is longer in PRIMARY_ALIGNMENT than in SECONDARY_ALIGNMENT
+err: data inconsistent while validating database - Database 'sdc_pa_longer.csra' check failed
diff --git a/test/vdb-validate/expected/sdc_pa_longer_3 b/test/vdb-validate/expected/sdc_pa_longer_3
new file mode 100644
index 0000000..d2d2288
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_pa_longer_3
@@ -0,0 +1,26 @@
+info: Database 'sdc_pa_longer.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Column 'TMP_HAS_MISMATCH': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Database 'db/sdc_pa_longer.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_pa_longer.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+info: Database 'db/sdc_pa_longer.csra': SEQUENCE and SECONDARY_ALIGNMENT tables data integrity checks ok
+info: Database 'sdc_pa_longer.csra' is consistent
diff --git a/test/vdb-validate/expected/sdc_seq_cmp_read_len_corrupt b/test/vdb-validate/expected/sdc_seq_cmp_read_len_corrupt
new file mode 100644
index 0000000..8cd413b
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_seq_cmp_read_len_corrupt
@@ -0,0 +1,44 @@
+info: Database 'sdc_seq_cmp_read_len_corrupt.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'GLOBAL_REF_START': checksums ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'MISMATCH': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'REF_ORIENTATION': checksums ok
+info: Column 'SEQ_READ_ID': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CGRAPH_MISMATCHES': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'OVERLAP_REF_POS': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'GLOBAL_REF_START': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'MATE_REF_ORIENTATION': checksums ok
+info: Column 'MATE_REF_POS': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'REF_ORIENTATION': checksums ok
+info: Column 'SEQ_READ_ID': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Column 'TEMPLATE_LEN': checksums ok
+info: Column 'TMP_HAS_MISMATCH': checksums ok
+info: Column 'TMP_MISMATCH': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'CMP_READ': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Column 'READ_START': checksums ok
+info: Column 'READ_TYPE': checksums ok
+info: Column 'SPOT_GROUP': checksums ok
+info: Database 'db/sdc_seq_cmp_read_len_corrupt.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_seq_cmp_read_len_corrupt.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+warn: Database 'db/sdc_seq_cmp_read_len_corrupt.csra' has secondary alignments without primary
+err: data inconsistent while validating database - Database 'db/sdc_seq_cmp_read_len_corrupt.csra': SEQUENCE:1 CMP_READ length (75) does not match sum of unaligned READ_LEN values (150)
+err: data inconsistent while validating database - Database 'sdc_seq_cmp_read_len_corrupt.csra' check failed
diff --git a/test/vdb-validate/expected/sdc_seq_cmp_read_len_fixed b/test/vdb-validate/expected/sdc_seq_cmp_read_len_fixed
new file mode 100644
index 0000000..98afa93
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_seq_cmp_read_len_fixed
@@ -0,0 +1,43 @@
+info: Database 'sdc_seq_cmp_read_len_fixed.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Column 'GLOBAL_REF_START': checksums ok
+info: Column 'HAS_MISMATCH': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'MISMATCH': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'REF_ORIENTATION': checksums ok
+info: Column 'SEQ_READ_ID': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CGRAPH_MISMATCHES': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Column 'GLOBAL_REF_START': checksums ok
+info: Column 'HAS_REF_OFFSET': checksums ok
+info: Column 'MATE_REF_ORIENTATION': checksums ok
+info: Column 'MATE_REF_POS': checksums ok
+info: Column 'REF_LEN': checksums ok
+info: Column 'REF_ORIENTATION': checksums ok
+info: Column 'SEQ_READ_ID': checksums ok
+info: Column 'SEQ_SPOT_ID': checksums ok
+info: Column 'TEMPLATE_LEN': checksums ok
+info: Column 'TMP_HAS_MISMATCH': checksums ok
+info: Column 'TMP_MISMATCH': checksums ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Column 'CMP_READ': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_ID': checksums ok
+info: Column 'QUALITY': checksums ok
+info: Column 'READ_LEN': checksums ok
+info: Column 'READ_START': checksums ok
+info: Column 'READ_TYPE': checksums ok
+info: Column 'SPOT_GROUP': checksums ok
+info: Database 'db/sdc_seq_cmp_read_len_fixed.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_seq_cmp_read_len_fixed.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+warn: Database 'db/sdc_seq_cmp_read_len_fixed.csra' has secondary alignments without primary
+info: Database 'db/sdc_seq_cmp_read_len_fixed.csra': SEQUENCE and SECONDARY_ALIGNMENT tables data integrity checks ok
+info: Database 'sdc_seq_cmp_read_len_fixed.csra' is consistent
diff --git a/test/vdb-validate/expected/sdc_tmp_mismatch b/test/vdb-validate/expected/sdc_tmp_mismatch
new file mode 100644
index 0000000..5893d4e
--- /dev/null
+++ b/test/vdb-validate/expected/sdc_tmp_mismatch
@@ -0,0 +1,16 @@
+info: Database 'sdc_tmp_mismatch.csra' metadata: md5 ok
+info: Table 'PRIMARY_ALIGNMENT' metadata: md5 ok
+info: Table 'REFERENCE' metadata: md5 ok
+info: Column 'CGRAPH_HIGH': checksums ok
+info: Column 'CS_KEY': checksums ok
+info: Column 'OVERLAP_REF_POS': checksums ok
+info: Column 'PRIMARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SECONDARY_ALIGNMENT_IDS': checksums ok
+info: Column 'SEQ_LEN': checksums ok
+info: Column 'SEQ_START': checksums ok
+info: Table 'SECONDARY_ALIGNMENT' metadata: md5 ok
+info: Table 'SEQUENCE' metadata: md5 ok
+info: Database 'db/sdc_tmp_mismatch.csra': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok
+info: Database 'db/sdc_tmp_mismatch.csra': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok
+err: data inconsistent while validating database - Database 'db/sdc_tmp_mismatch.csra': SECONDARY_ALIGNMENT:1 TMP_MISMATCH column contains '='
+err: data inconsistent while validating database - Database 'sdc_tmp_mismatch.csra' check failed
diff --git a/test/vdb-validate/runtestcase.sh b/test/vdb-validate/runtestcase.sh
new file mode 100755
index 0000000..84ba505
--- /dev/null
+++ b/test/vdb-validate/runtestcase.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+TEST_CMD=$1
+CASEID=$2
+RC=$3
+
+CMD="$TEST_CMD > \"actual/$CASEID.tmp\" 2>&1"
+#echo $CMD
+eval $CMD
+rc="$?"
+
+if [ "$rc" != "$RC" ] ; then
+    echo "command \"$TEST_CMD\" returned $rc, expected $RC"
+    echo "command executed:"
+    echo $CMD
+
+	echo "command output:"
+    cat actual/$CASEID.tmp
+    exit 2
+fi
+
+# remove first two columns from output: datetime and progname 
+cat "actual/$CASEID.tmp" | awk '{if(substr($2,1,12) == "vdb-validate"){$2=$1="";} print $0}' > "actual/$CASEID"
+rm "actual/$CASEID.tmp"
+
+# remove trailing white spaces
+sed -i -e 's/^[ \t]*//g' "actual/$CASEID"
+# remove file names and line numbers
+sed -i -e 's/: .*:[0-9]*:[^ ]*:/:/g' "actual/$CASEID"
+
+diff expected/$CASEID actual/$CASEID
+rc="$?"
+
+if [ "$rc" != "0" ] ; then
+    exit 3
+fi
+
diff --git a/test/vschema/Makefile b/test/vschema/Makefile
new file mode 100644
index 0000000..ca9aaf9
--- /dev/null
+++ b/test/vschema/Makefile
@@ -0,0 +1,120 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: runtests
+	@ rm tmp.kfg
+
+TOP ?= $(abspath ../..)
+
+MODULE = test/vschema
+
+include $(TOP)/build/Makefile.env
+
+$(shell echo "vdb/schema/paths = \"$(VDB_INCDIR)\"" > tmp.kfg)
+
+clean: stdclean
+
+#-------------------------------------------------------------------------------
+# bio-end schema tests
+#
+runtests: \
+	bio-end-tests \
+    idx-text-tests
+
+#-------------------------------------------------------------------------------
+# bio-end-tests
+#
+TEST_BIO_END_MAKEINPUTS_SRC = \
+	bio-end/makeinputs
+
+TEST_BIO_END_MAKEINPUTS_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_BIO_END_MAKEINPUTS_SRC))
+
+TEST_BIO_END_MAKEINPUTS_LIB =   \
+	-L$(LIBDIR) \
+	-sgeneral-writer
+
+
+bio-end-makeinputs: $(TEST_BIO_END_MAKEINPUTS_OBJ)
+	$(LP) --exe -o ./bio-end-makeinputs $^ $(TEST_BIO_END_MAKEINPUTS_LIB)
+	@rm bio-end-makeinputs.exe.d $(TEST_BIO_END_MAKEINPUTS_OBJ)
+
+bio-end-tests: bio-end-makeinputs
+	@mkdir -p $(SRCDIR)/bio-end/input && ./bio-end-makeinputs && rm ./bio-end-makeinputs
+	@# test cases
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/bio-end bio-end excl-1 0 n
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/bio-end bio-end excl-2 0 n
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/bio-end bio-end excl-3 0 n
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/bio-end bio-end excl-4 0 n
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/bio-end bio-end incl-1 0 n
+	@rm -f $(SRCDIR)/bio-end/input/*.gl
+	@echo "bio-end tests executed successfuly"
+
+#-------------------------------------------------------------------------------
+# idx-text-tests
+#
+TEST_IDX_TEXT_MAKEINPUTS_SRC = \
+	idx-text/makeinputs
+
+TEST_IDX_TEXT_MAKEINPUTS_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_IDX_TEXT_MAKEINPUTS_SRC))
+
+TEST_IDX_TEXT_MAKEINPUTS_LIB =   \
+	-L$(LIBDIR) \
+	-sgeneral-writer
+
+idx-text-makeinputs: $(TEST_IDX_TEXT_MAKEINPUTS_OBJ)
+	$(LP) --exe -o ./idx-text-makeinputs $^ $(TEST_IDX_TEXT_MAKEINPUTS_LIB)
+	@rm idx-text-makeinputs.exe.d $(TEST_IDX_TEXT_MAKEINPUTS_OBJ)
+
+
+TEST_IDX_TEXT_CHECKLOOKUP_SRC = \
+	idx-text/checklookup
+
+TEST_IDX_TEXT_CHECKLOOKUP_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_IDX_TEXT_CHECKLOOKUP_SRC))
+
+TEST_IDX_TEXT_CHECKLOOKUP_LIB =   \
+	-L$(LIBDIR) \
+	-sncbi-vdb
+
+idx-text-checklookup: $(TEST_IDX_TEXT_CHECKLOOKUP_OBJ)
+	$(LP) --exe -o ./idx-text-checklookup $^ $(TEST_IDX_TEXT_CHECKLOOKUP_LIB)
+	@rm idx-text-checklookup.exe.d $(TEST_IDX_TEXT_CHECKLOOKUP_OBJ)
+
+
+idx-text-tests: idx-text-makeinputs idx-text-checklookup
+	@mkdir -p $(SRCDIR)/idx-text/input && ./idx-text-makeinputs && rm ./idx-text-makeinputs
+	@# test cases
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text ci-1 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text ci-2 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text ci-3 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text ci-4 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text ci-5 0 n
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text cs-1 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text cs-2 0 y ./idx-text-checklookup
+	@$(SRCDIR)/runtestcase.sh $(BINDIR) $(SRCDIR)/idx-text idx-text cs-3 0 n
+	@rm -f ./idx-text-checklookup
+	@rm -f $(SRCDIR)/idx-text/input/*.gl
+	@echo "idx-text tests executed successfuly"
diff --git a/test/vschema/bio-end/bio-end-excl.vschema b/test/vschema/bio-end/bio-end-excl.vschema
new file mode 100644
index 0000000..3e91875
--- /dev/null
+++ b/test/vschema/bio-end/bio-end-excl.vschema
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+include 'insdc/insdc.vschema';
+include 'insdc/sra.vschema';
+include 'ncbi/sra.vschema';
+
+table bio_end:test:table1 #1
+{
+    column INSDC:coord:zero             out_read_start;
+    column INSDC:coord:len              out_read_len;
+    column INSDC:SRA:xread_type         out_read_type;
+
+    readonly column INSDC:coord:zero    bio_end
+        = NCBI:SRA:bio_end < false > ( out_read_start, out_read_type, out_read_len );
+}
+
+database bio_end:test:database1 #1
+{
+    table bio_end:test:table1 #1 table1;
+}
diff --git a/test/vschema/bio-end/bio-end-incl.vschema b/test/vschema/bio-end/bio-end-incl.vschema
new file mode 100644
index 0000000..c071196
--- /dev/null
+++ b/test/vschema/bio-end/bio-end-incl.vschema
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+include 'insdc/insdc.vschema';
+include 'insdc/sra.vschema';
+include 'ncbi/sra.vschema';
+
+table bio_end:test:table1 #1
+{
+    column INSDC:coord:zero             out_read_start;
+    column INSDC:coord:len              out_read_len;
+    column INSDC:SRA:xread_type         out_read_type;
+
+    readonly column INSDC:coord:zero    bio_end
+        = NCBI:SRA:bio_end < true > ( out_read_start, out_read_type, out_read_len );
+}
+
+database bio_end:test:database1 #1
+{
+    table bio_end:test:table1 #1 table1;
+}
diff --git a/test/vschema/bio-end/expected/excl-1.stdout b/test/vschema/bio-end/expected/excl-1.stdout
new file mode 100644
index 0000000..702409a
--- /dev/null
+++ b/test/vschema/bio-end/expected/excl-1.stdout
@@ -0,0 +1,5 @@
+       bio_end: 12
+  out_read_len: 4, 4, 4
+out_read_start: 0, 4, 8
+ out_read_type: SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL
+
diff --git a/test/vschema/bio-end/expected/excl-2.stdout b/test/vschema/bio-end/expected/excl-2.stdout
new file mode 100644
index 0000000..2667e5c
--- /dev/null
+++ b/test/vschema/bio-end/expected/excl-2.stdout
@@ -0,0 +1,5 @@
+       bio_end: 8
+  out_read_len: 4, 4, 4
+out_read_start: 0, 4, 8
+ out_read_type: SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+
diff --git a/test/vschema/bio-end/expected/excl-3.stdout b/test/vschema/bio-end/expected/excl-3.stdout
new file mode 100644
index 0000000..b428943
--- /dev/null
+++ b/test/vschema/bio-end/expected/excl-3.stdout
@@ -0,0 +1,5 @@
+       bio_end: 8
+  out_read_len: 4, 4, 4, 0, 0
+out_read_start: 0, 4, 8, 12, 12
+ out_read_type: SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+
diff --git a/test/vschema/bio-end/expected/excl-4.stdout b/test/vschema/bio-end/expected/excl-4.stdout
new file mode 100644
index 0000000..43e18a6
--- /dev/null
+++ b/test/vschema/bio-end/expected/excl-4.stdout
@@ -0,0 +1,5 @@
+       bio_end: 13
+  out_read_len: 4, 4, 4, 1, 0
+out_read_start: 0, 4, 8, 12, 13
+ out_read_type: SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+
diff --git a/test/vschema/bio-end/expected/incl-1.stdout b/test/vschema/bio-end/expected/incl-1.stdout
new file mode 100644
index 0000000..6ec1b01
--- /dev/null
+++ b/test/vschema/bio-end/expected/incl-1.stdout
@@ -0,0 +1,5 @@
+       bio_end: 7
+  out_read_len: 4, 4, 4
+out_read_start: 0, 4, 8
+ out_read_type: SRA_READ_TYPE_TECHNICAL, SRA_READ_TYPE_BIOLOGICAL, SRA_READ_TYPE_TECHNICAL
+
diff --git a/test/vschema/bio-end/makeinputs.cpp b/test/vschema/bio-end/makeinputs.cpp
new file mode 100644
index 0000000..bb34391
--- /dev/null
+++ b/test/vschema/bio-end/makeinputs.cpp
@@ -0,0 +1,129 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/**
+ * Unit tests for Bio-end function
+ */
+#include "../../../tools/general-loader/general-writer.hpp"
+
+#define TEST_SUITE "bio-end"
+
+using namespace ncbi;
+
+const char* tableName = "table1";
+
+void run( const char * p_caseId, bool inclusive, const int32_t coord_start[], const int32_t coord_len[], const int8_t coord_type[], int segments_number )
+{
+    std::string output_path = std::string ( TEST_SUITE "/input/" ) + p_caseId + ".gl";
+    std::string db_path = std::string ( TEST_SUITE "/actual/" ) + p_caseId + "/db";
+    std::string schema_path = inclusive ? TEST_SUITE "/bio-end-incl.vschema" : TEST_SUITE "/bio-end-excl.vschema";
+    
+    GeneralWriter *gw;
+    try
+    {
+        gw = new GeneralWriter ( output_path );
+        
+        gw -> setRemotePath ( db_path );
+        gw -> useSchema ( schema_path, "bio_end:test:database1" );
+        
+        int table_id = gw -> addTable ( tableName );
+        int column_read_start_id = gw -> addIntegerColumn ( table_id, "out_read_start", 32 );
+        int column_read_len_id = gw -> addIntegerColumn ( table_id, "out_read_len", 32 );
+        int column_read_type_id = gw -> addIntegerColumn ( table_id, "out_read_type", 8 );
+        
+        gw -> open ();
+        
+        
+#define write(column_id, column_bits, data) gw -> write ( column_id, column_bits, &data[0], segments_number );
+        write ( column_read_start_id, 32, coord_start );
+        write ( column_read_len_id, 32, coord_len );
+        write ( column_read_type_id, 8, coord_type );
+#undef write
+        
+        gw -> nextRow(table_id);
+        
+        gw -> endStream ();
+        
+        delete gw;
+        
+    }
+    catch ( ... )
+    {
+        delete gw;
+        throw;
+    }
+}
+
+int main()
+{
+    {
+        int32_t coord_start[]   = {0, 4, 8};
+        int32_t coord_len[]     = {4, 4, 4};
+        int8_t  coord_type[]    = {1, 0, 1};
+        const char * test_case_id = "excl-1";
+        bool inclusive = false;
+        
+        run( test_case_id, inclusive, coord_start, coord_len, coord_type, sizeof coord_type / sizeof coord_type[0] );
+    }
+    {
+        int32_t coord_start[]   = {0, 4, 8};
+        int32_t coord_len[]     = {4, 4, 4};
+        int8_t  coord_type[]    = {0, 1, 0};
+        const char * test_case_id = "excl-2";
+        bool inclusive = false;
+        
+        run( test_case_id, inclusive, coord_start, coord_len, coord_type, sizeof coord_type / sizeof coord_type[0] );
+    }
+    {
+        int32_t coord_start[]   = {0, 4, 8, 12, 12};
+        int32_t coord_len[]     = {4, 4, 4, 0,  0};
+        int8_t  coord_type[]    = {0, 1, 0, 1,  0};
+        const char * test_case_id = "excl-3";
+        bool inclusive = false;
+        
+        run( test_case_id, inclusive, coord_start, coord_len, coord_type, sizeof coord_type / sizeof coord_type[0] );
+    }
+    {
+        int32_t coord_start[]   = {0, 4, 8, 12, 13};
+        int32_t coord_len[]     = {4, 4, 4, 1,  0};
+        int8_t  coord_type[]    = {0, 1, 0, 1,  0};
+        const char * test_case_id = "excl-4";
+        bool inclusive = false;
+        
+        run( test_case_id, inclusive, coord_start, coord_len, coord_type, sizeof coord_type / sizeof coord_type[0] );
+    }
+    {
+        int32_t coord_start[]   = {0, 4, 8};
+        int32_t coord_len[]     = {4, 4, 4};
+        int8_t  coord_type[]    = {0, 1, 0};
+        const char * test_case_id = "incl-1";
+        bool inclusive = true;
+        
+        run( test_case_id, inclusive, coord_start, coord_len, coord_type, sizeof coord_type / sizeof coord_type[0] );
+    }
+    
+    return 0;
+}
diff --git a/test/vschema/idx-text/checklookup.cpp b/test/vschema/idx-text/checklookup.cpp
new file mode 100644
index 0000000..7d6a877
--- /dev/null
+++ b/test/vschema/idx-text/checklookup.cpp
@@ -0,0 +1,335 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/**
+ * Perform checks of function idx:text:lookup on created databases,
+ * because it requires passing parameter through cursor parameter QUERY_NAME
+ */
+
+#include <klib/log.h>
+#include <klib/writer.h>
+#include <kfs/directory.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <iostream>
+#include <map>
+
+#define TEST_SUITE "idx-text"
+#define TABLE_NAME "table1"
+
+struct RowRange {
+    int64_t start_id;
+    int64_t stop_id;
+};
+
+struct TestCase {
+    const char* path;
+    std::map<std::string, RowRange> key_ranges;
+};
+
+static std::map<std::string, TestCase> test_cases;
+static const char* test_case_name;
+
+rc_t runChecks(const TestCase& test_case, const VCursor * cursor, uint32_t name_idx, uint32_t name_range_idx)
+{
+    rc_t rc;
+    int64_t first_id;
+    uint64_t count_id;
+    
+    rc = VCursorIdRange( cursor, name_idx, &first_id, &count_id );
+    if (rc != 0)
+    {
+        LOGERR( klogInt, rc, "VCursorIdRange() failed" );
+        return rc;
+    }
+    
+    for (uint64_t row_id = first_id; row_id < first_id + count_id; ++row_id)
+    {
+        const char * name = NULL;
+        uint32_t name_len;
+        RowRange *row_range;
+        
+        rc = VCursorCellDataDirect( cursor, row_id, name_idx, NULL, (void const **)&name, NULL, &name_len );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+            return rc;
+        }
+        
+        if ( name_len == 0 )
+            continue;
+
+        rc = VCursorParamsSet( ( struct VCursorParams const * )cursor, "QUERY_NAME", "%.*s", name_len, name );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorParamsSet() failed" );
+            return rc;
+        }
+        
+        rc = VCursorCellDataDirect( cursor, row_id, name_range_idx, NULL, (void const **)&row_range, NULL, NULL );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+            return rc;
+        }
+        
+        std::string name_str(name, name_len);
+        
+        if (test_case.key_ranges.find(name_str) == test_case.key_ranges.end())
+        {
+            PLOGMSG( klogInt, (klogErr, "Unexpected name '$(NAME)' in test case '$(TC_NAME)'", "TC_NAME=%s,NAME=%s", test_case_name, name_str.c_str()) );
+            return 1;
+        }
+        
+        RowRange row_range_exp = test_case.key_ranges.find(name_str)->second;
+        if (row_range->start_id != row_range_exp.start_id || row_range->stop_id != row_range_exp.stop_id)
+        {
+            PLOGMSG( klogInt, (klogErr, "Row range for name '$(NAME)' in test case '$(TC_NAME)' does not match. Expected: $(EXP_S)-$(EXP_F), actual: $(ACT_S)-$(ACT_F)",
+                               "TC_NAME=%s,NAME=%s,EXP_S=%ld,EXP_F=%ld,ACT_S=%ld,ACT_F=%ld",
+                               test_case_name, name_str.c_str(), row_range_exp.start_id, row_range_exp.stop_id, row_range->start_id, row_range->stop_id) );
+            return 1;
+        }
+    }
+    
+    return rc;
+}
+
+rc_t run(const TestCase& test_case)
+{
+    rc_t rc;
+    KDirectory * cur_dir;
+    const VDBManager * manager;
+    const VDatabase * database;
+    const VTable * table;
+    const VCursor * cursor;
+    uint32_t name_idx;
+    uint32_t name_range_idx;
+    
+    rc = KDirectoryNativeDir( &cur_dir );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+    else
+    {
+        rc = VDBManagerMakeRead ( &manager, cur_dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+        else
+        {
+            rc = VDBManagerOpenDBRead( manager, &database, NULL, "%s", test_case.path );
+            if (rc != 0)
+                LOGERR( klogInt, rc, "VDBManagerOpenDBRead() failed" );
+            else
+            {
+                rc = VDatabaseOpenTableRead( database, &table, "%s", TABLE_NAME );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "VDatabaseOpenTableRead() failed" );
+                else
+                {
+                    rc = VTableCreateCursorRead( table, &cursor );
+                    if ( rc != 0 )
+                        LOGERR( klogInt, rc, "VTableCreateCursorRead() failed" );
+                    else
+                    {
+                        /* add columns to cursor */
+                        rc = VCursorAddColumn( cursor, &name_idx, "(utf8)NAME" );
+                        if ( rc != 0 )
+                            LOGERR( klogInt, rc, "VCursorAddColumn() failed" );
+                        else
+                        {
+                            rc = VCursorAddColumn( cursor, &name_range_idx, "NAME_RANGE" );
+                            if ( rc != 0 )
+                                LOGERR( klogInt, rc, "VCursorAddColumn() failed" );
+                            else
+                            {
+                                rc = VCursorOpen( cursor );
+                                if (rc != 0)
+                                    LOGERR( klogInt, rc, "VCursorOpen() failed" );
+                                else
+                                    rc = runChecks( test_case, cursor, name_idx, name_range_idx );
+                            }
+                        }
+                        VCursorRelease( cursor );
+                    }
+                    VTableRelease( table );
+                }
+                VDatabaseRelease( database );
+            }
+            
+            VDBManagerRelease( manager );
+        }
+        KDirectoryRelease( cur_dir );
+    }
+    return rc;
+}
+
+/* New test cases should go here */
+void initTestCases()
+{
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {2, 5};
+            key_ranges["a"] = range;
+            key_ranges["A"] = range;
+        }
+        {
+            RowRange range = {7, 7};
+            key_ranges["b"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/ci-1/db", key_ranges };
+        test_cases["ci-1"] = tc;
+    }
+    
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {1, 5};
+            key_ranges["abcdefghi"] = range;
+            key_ranges["abcdefGHI"] = range;
+            key_ranges["ABcdefghi"] = range;
+        }
+        {
+            RowRange range = {6, 6};
+            key_ranges["ABcdefghi1234567890"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/ci-2/db", key_ranges };
+        test_cases["ci-2"] = tc;
+    }
+    
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {1, 4};
+            key_ranges["abcdefghi"] = range;
+            key_ranges["abcdefGHI"] = range;
+            key_ranges["ABcdefghi"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/ci-3/db", key_ranges };
+        test_cases["ci-3"] = tc;
+    }
+    
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {1, 4};
+            key_ranges["abcdefghi"] = range;
+            key_ranges["abcdefGHI"] = range;
+            key_ranges["ABcdefghi"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/ci-4/db", key_ranges };
+        test_cases["ci-4"] = tc;
+    }
+    
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {1, 3};
+            key_ranges["abcdefghi"] = range;
+        }
+        
+        {
+            RowRange range = {4, 4};
+            key_ranges["abcdefGHI"] = range;
+        }
+        
+        {
+            RowRange range = {5, 5};
+            key_ranges["ABcdefghi"] = range;
+        }
+        
+        {
+            RowRange range = {6, 6};
+            key_ranges["ABcdefghi1234567890"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/cs-1/db", key_ranges };
+        test_cases["cs-1"] = tc;
+    }
+    
+    {
+        std::map<std::string, RowRange> key_ranges;
+        {
+            RowRange range = {1, 3};
+            key_ranges["abcdefghi"] = range;
+        }
+        
+        {
+            RowRange range = {4, 4};
+            key_ranges["abcdefGHI"] = range;
+        }
+        
+        {
+            RowRange range = {5, 5};
+            key_ranges["ABcdefghi"] = range;
+        }
+        
+        {
+            RowRange range = {6, 6};
+            key_ranges["ABcdefghi1234567890"] = range;
+        }
+        
+        TestCase tc = { TEST_SUITE "/actual/cs-2/db", key_ranges };
+        test_cases["cs-2"] = tc;
+    }
+}
+
+int main(int argc, const char* argv[])
+{
+    /* init logging */
+    KLogLibHandlerSetStdErr();
+    KLogHandlerSetStdErr();
+    KWrtInit("checklookup", 0);
+    
+    initTestCases();
+    
+    if (argc < 2)
+    {
+        std::cerr << "Please specify test case name" << std::endl;
+        return 1;
+    }
+    
+    test_case_name = argv[1];
+    if (test_cases.find(test_case_name) == test_cases.end())
+    {
+        std::cerr << "Unknown test case name: " << test_case_name << std::endl;
+        return 2;
+    }
+    
+    rc_t rc = run(test_cases[test_case_name]);
+    if (rc != 0)
+        return 3;
+    
+    std::cout << "Success" << std::endl;
+    return 0;
+}
diff --git a/test/vschema/idx-text/expected/ci-1.stdout b/test/vschema/idx-text/expected/ci-1.stdout
new file mode 100644
index 0000000..0f8a271
--- /dev/null
+++ b/test/vschema/idx-text/expected/ci-1.stdout
@@ -0,0 +1,21 @@
+      NAME: 
+NAME_RANGE: 
+
+      NAME: a
+NAME_RANGE: 
+
+      NAME: a
+NAME_RANGE: 
+
+      NAME: a
+NAME_RANGE: 
+
+      NAME: A
+NAME_RANGE: 
+
+      NAME: 
+NAME_RANGE: 
+
+      NAME: b
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/ci-2.stdout b/test/vschema/idx-text/expected/ci-2.stdout
new file mode 100644
index 0000000..cbeb94d
--- /dev/null
+++ b/test/vschema/idx-text/expected/ci-2.stdout
@@ -0,0 +1,18 @@
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefGHI
+NAME_RANGE: 
+
+      NAME: ABcdefghi
+NAME_RANGE: 
+
+      NAME: ABcdefghi1234567890
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/ci-3.stdout b/test/vschema/idx-text/expected/ci-3.stdout
new file mode 100644
index 0000000..fa546e0
--- /dev/null
+++ b/test/vschema/idx-text/expected/ci-3.stdout
@@ -0,0 +1,12 @@
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefGHI
+NAME_RANGE: 
+
+      NAME: ABcdefghi
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/ci-4.stdout b/test/vschema/idx-text/expected/ci-4.stdout
new file mode 100644
index 0000000..fa546e0
--- /dev/null
+++ b/test/vschema/idx-text/expected/ci-4.stdout
@@ -0,0 +1,12 @@
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefGHI
+NAME_RANGE: 
+
+      NAME: ABcdefghi
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/ci-5.stdout b/test/vschema/idx-text/expected/ci-5.stdout
new file mode 100644
index 0000000..dfb77ec
--- /dev/null
+++ b/test/vschema/idx-text/expected/ci-5.stdout
@@ -0,0 +1,15 @@
+      NAME: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+NAME_RANGE: 
+
+      NAME: Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+NAME_RANGE: 
+
+      NAME: 
+NAME_RANGE: 
+
+      NAME: aaa
+NAME_RANGE: 
+
+      NAME: 
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/cs-1.stdout b/test/vschema/idx-text/expected/cs-1.stdout
new file mode 100644
index 0000000..cbeb94d
--- /dev/null
+++ b/test/vschema/idx-text/expected/cs-1.stdout
@@ -0,0 +1,18 @@
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefGHI
+NAME_RANGE: 
+
+      NAME: ABcdefghi
+NAME_RANGE: 
+
+      NAME: ABcdefghi1234567890
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/cs-2.stdout b/test/vschema/idx-text/expected/cs-2.stdout
new file mode 100644
index 0000000..cbeb94d
--- /dev/null
+++ b/test/vschema/idx-text/expected/cs-2.stdout
@@ -0,0 +1,18 @@
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefghi
+NAME_RANGE: 
+
+      NAME: abcdefGHI
+NAME_RANGE: 
+
+      NAME: ABcdefghi
+NAME_RANGE: 
+
+      NAME: ABcdefghi1234567890
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/expected/cs-3.stdout b/test/vschema/idx-text/expected/cs-3.stdout
new file mode 100644
index 0000000..a0dea33
--- /dev/null
+++ b/test/vschema/idx-text/expected/cs-3.stdout
@@ -0,0 +1,18 @@
+      NAME: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+NAME_RANGE: 
+
+      NAME: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+NAME_RANGE: 
+
+      NAME: Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+NAME_RANGE: 
+
+      NAME: 
+NAME_RANGE: 
+
+      NAME: aaa
+NAME_RANGE: 
+
+      NAME: 
+NAME_RANGE: 
+
diff --git a/test/vschema/idx-text/idx-text.vschema b/test/vschema/idx-text/idx-text.vschema
new file mode 100644
index 0000000..7ec91c5
--- /dev/null
+++ b/test/vschema/idx-text/idx-text.vschema
@@ -0,0 +1,105 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+version 1;
+
+include 'vdb/vdb.vschema';
+
+/* ======= case insensitive - lower ======= */
+table idx_text:ci_lower:test:table #1
+{
+    extern column utf8  NAME = out_name_utf8;
+    physical utf8 .NAME = idx:text:insert  < 'i_name', CASE_INSENSITIVE_LOWER > ( NAME );
+
+    utf8 out_name_utf8 = idx:text:project < 'i_name', CASE_INSENSITIVE_LOWER > ( .NAME );
+
+    // Mechanism to seach for NAME
+    readonly column vdb:row_id_range NAME_RANGE
+        = idx:text:lookup < 'i_name', 'QUERY_NAME', CASE_INSENSITIVE_LOWER > ();
+}
+
+database idx_text:ci_lower:test:database #1
+{
+    table idx_text:ci_lower:test:table #1 table1;
+}
+
+/* ======= case insensitive - upper ======= */
+table idx_text:ci_upper:test:table #1
+{
+    extern column utf8  NAME = out_name_utf8;
+    physical utf8 .NAME = idx:text:insert  < 'i_name', CASE_INSENSITIVE_UPPER > ( NAME );
+
+    utf8 out_name_utf8 = idx:text:project < 'i_name', CASE_INSENSITIVE_UPPER > ( .NAME );
+
+    // Mechanism to seach for NAME
+    readonly column vdb:row_id_range NAME_RANGE
+        = idx:text:lookup < 'i_name', 'QUERY_NAME', CASE_INSENSITIVE_UPPER > ();
+}
+
+database idx_text:ci_upper:test:database #1
+{
+    table idx_text:ci_upper:test:table #1 table1;
+}
+
+/* ======= case sensitive ======= */
+table idx_text:cs:test:table #1
+{
+    extern column utf8  NAME = out_name_utf8;
+    physical utf8 .NAME = idx:text:insert  < 'i_name', CASE_SENSITIVE > ( NAME );
+
+    utf8 out_name_utf8 = idx:text:project < 'i_name', CASE_SENSITIVE > ( .NAME );
+
+    ascii out_name = cast ( out_name_utf8 );
+
+    // Mechanism to seach for NAME
+    readonly column vdb:row_id_range NAME_RANGE
+        = idx:text:lookup < 'i_name', 'QUERY_NAME', CASE_SENSITIVE > ();
+}
+
+database idx_text:cs:test:database #1
+{
+    table idx_text:cs:test:table #1 table1;
+}
+
+/* ======= default: case sensitive ======= */
+table idx_text:default_cs:test:table #1
+{
+    extern column utf8  NAME = out_name_utf8;
+    physical utf8 .NAME = idx:text:insert  < 'i_name' > ( NAME );
+
+    utf8 out_name_utf8 = idx:text:project < 'i_name' > ( .NAME );
+
+    ascii out_name = cast ( out_name_utf8 );
+
+    // Mechanism to seach for NAME
+    readonly column vdb:row_id_range NAME_RANGE
+        = idx:text:lookup < 'i_name', 'QUERY_NAME' > ();
+}
+
+database idx_text:default_cs:test:database #1
+{
+    table idx_text:default_cs:test:table #1 table1;
+}
\ No newline at end of file
diff --git a/test/vschema/idx-text/makeinputs.cpp b/test/vschema/idx-text/makeinputs.cpp
new file mode 100644
index 0000000..50ebe97
--- /dev/null
+++ b/test/vschema/idx-text/makeinputs.cpp
@@ -0,0 +1,182 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/**
+ * Unit tests for text index functionality
+ */
+#include "../../../tools/general-loader/general-writer.hpp"
+
+#include <string>
+
+#define TEST_SUITE "idx-text"
+
+using namespace ncbi;
+
+const char* tableName = "table1";
+
+enum TestCaseType
+{
+    caseInsensitiveLower,
+    caseInsensitiveUpper,
+    caseSensitive,
+    defaultCaseSensitive
+};
+
+void run( const char * p_caseId, TestCaseType test_case_type, const std::string names[], int names_len )
+{
+    std::string output_path = std::string ( TEST_SUITE "/input/" ) + p_caseId + ".gl";
+    std::string db_path = std::string ( TEST_SUITE "/actual/" ) + p_caseId + "/db";
+    std::string schema_path = TEST_SUITE "/idx-text.vschema";
+    
+    GeneralWriter *gw;
+    try
+    {
+        const char* db_schema;
+        switch (test_case_type) {
+            case caseInsensitiveLower:
+                db_schema = "idx_text:ci_lower:test:database";
+                break;
+            case caseInsensitiveUpper:
+                db_schema = "idx_text:ci_upper:test:database";
+                break;
+            case caseSensitive:
+                db_schema = "idx_text:cs:test:database";
+                break;
+            case defaultCaseSensitive:
+                db_schema = "idx_text:default_cs:test:database";
+                break;
+            default:
+                assert(false);
+        }
+        gw = new GeneralWriter ( output_path );
+        
+        gw -> setRemotePath ( db_path );
+        gw -> useSchema ( schema_path, db_schema );
+        
+        int table_id = gw -> addTable ( tableName );
+        int column_name_id = gw -> addColumn ( table_id, "NAME", 8 );
+        
+        gw -> open ();
+        
+        for (int i = 0; i < names_len; ++i)
+        {
+            if ( names[i].size() > 0 )
+                gw -> write ( column_name_id, 8, names[i].c_str(), names[i].size() );
+            else
+                gw -> columnDefault ( column_name_id, 8, names[i].c_str(), names[i].size() );
+            
+            gw -> nextRow(table_id);
+        }
+        
+        gw -> endStream ();
+        
+        delete gw;
+        
+    }
+    catch ( ... )
+    {
+        delete gw;
+        throw;
+    }
+}
+
+int main()
+{
+    {
+        std::string names[]   = {"", "a", "a", "a", "A", "", "b"};
+        const char * test_case_id = "ci-1";
+        
+        run( test_case_id, caseInsensitiveLower, names, sizeof names / sizeof names[0] );
+    }
+
+    {
+        std::string names[]   = {"abcdefghi", "abcdefghi", "abcdefghi", "abcdefGHI", "ABcdefghi", "ABcdefghi1234567890"};
+        const char * test_case_id = "ci-2";
+        
+        run( test_case_id, caseInsensitiveLower, names, sizeof names / sizeof names[0] );
+    }
+    
+    {
+        std::string names[]   = {"abcdefghi", "abcdefghi", "abcdefGHI", "ABcdefghi"};
+        const char * test_case_id = "ci-3";
+        
+        run( test_case_id, caseInsensitiveLower, names, sizeof names / sizeof names[0] );
+    }
+    
+    {
+        std::string names[]   = {"abcdefghi", "abcdefghi", "abcdefGHI", "ABcdefghi"};
+        const char * test_case_id = "ci-4";
+        
+        run( test_case_id, caseInsensitiveUpper, names, sizeof names / sizeof names[0] );
+    }
+    
+    {
+        std::string names[]   = {
+            // very long name - 1025 characters
+            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+            "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+            "",
+            "aaa",
+            ""
+        };
+        const char * test_case_id = "ci-5";
+
+        run( test_case_id, caseInsensitiveLower, names, sizeof names / sizeof names[0] );
+    }
+
+    {
+        std::string names[]   = {"abcdefghi", "abcdefghi", "abcdefghi", "abcdefGHI", "ABcdefghi", "ABcdefghi1234567890"};
+        const char * test_case_id = "cs-1";
+        
+        run( test_case_id, caseSensitive, names, sizeof names / sizeof names[0] );
+    }
+    
+    {
+        std::string names[]   = {"abcdefghi", "abcdefghi", "abcdefghi", "abcdefGHI", "ABcdefghi", "ABcdefghi1234567890"};
+        const char * test_case_id = "cs-2";
+        
+        run( test_case_id, defaultCaseSensitive, names, sizeof names / sizeof names[0] );
+    }
+    
+    {
+        std::string names[]   = {
+            // very long name - 1024 characters
+            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+            // very long name - 1023 characters
+            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+            // very long name - 1025 characters
+	        "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [...]
+            "",
+            "aaa",
+            ""
+        };
+        const char * test_case_id = "cs-3";
+
+        run( test_case_id, caseSensitive, names, sizeof names / sizeof names[0] );
+    }
+
+    return 0;
+}
diff --git a/test/vschema/runtestcase.sh b/test/vschema/runtestcase.sh
new file mode 100755
index 0000000..dd41aee
--- /dev/null
+++ b/test/vschema/runtestcase.sh
@@ -0,0 +1,126 @@
+#!/bin/bash
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#echo "$0 $*"
+
+# $1 - path to sra-tools executables (general-loader, vdb-dump)
+# $2 - work directory (expected results under expected/, actual results and temporaries created under actual/)
+# $3 - test case ID (expect a file input/$3.gl to exist)
+# $4 - expected return coode
+# $5, $6, ... - command line options for general-loader
+#
+# return codes:
+# 0 - passed
+# 1 - could not create temp dir
+# 2 - unexpected return code from general-loader
+# 3 - vdb-dump failed on the output of general-loader
+# 4 - outputs differ
+
+BINDIR=$1
+WORKDIR=$2
+SUITEID=$3
+CASEID=$4
+RC=$5
+EXTRA_CHECKER_PRESENT=$6
+if [ "$EXTRA_CHECKER_PRESENT" == "y" ] ; then
+    EXTRA_CHECKER=$7
+    shift 7
+else
+    EXTRA_CHECKER=
+    shift 6
+fi
+CMDLINE=$*
+
+DUMP="$BINDIR/vdb-dump"
+LOAD="$BINDIR/general-loader"
+TEMPDIR=$WORKDIR/actual/$CASEID
+
+echo "running test $SUITEID:$CASEID"
+
+mkdir -p $TEMPDIR
+rm -rf $TEMPDIR/*
+if [ "$?" != "0" ] ; then
+    exit 1
+fi
+
+CMD="export VDB_CONFIG=`pwd`; cat $SUITEID/input/$CASEID.gl | $LOAD $CMDLINE 1>$TEMPDIR/load.stdout 2>$TEMPDIR/load.stderr"
+#echo $CMD
+eval $CMD
+rc="$?"
+if [ "$rc" != "$RC" ] ; then
+    echo "$LOAD returned $rc, expected $RC"
+    echo "command executed:"
+    echo $CMD
+
+    cat $TEMPDIR/load.stdout
+    cat $TEMPDIR/load.stderr
+    exit 2
+fi
+
+if [ "$rc" == "0" ] ; then
+    CMD="$DUMP $TEMPDIR/db 1>$TEMPDIR/dump.stdout 2>$TEMPDIR/dump.stderr"
+    #echo $CMD
+    eval $CMD || exit 3
+    diff $WORKDIR/expected/$CASEID.stdout $TEMPDIR/dump.stdout >$TEMPDIR/diff
+    rc="$?"
+else    
+    # remove timestamps
+    sed -i -e 's/^....-..-..T..:..:.. //g' $TEMPDIR/load.stderr
+    # remove pathnames
+    sed -i -e 's=/.*/==g' $TEMPDIR/load.stderr
+    # remove source locations
+    sed -i -e 's=: .*:[0-9]*:[^ ]*:=:=g' $TEMPDIR/load.stderr
+    # remove version number
+    sed -i -e 's=latf-load\(\.[0-9]*\)*=latf-load=g' $TEMPDIR/load.stderr
+    diff $WORKDIR/expected/$CASEID.stderr $TEMPDIR/load.stderr >$TEMPDIR/diff
+    rc="$?"
+fi
+
+if [ "$rc" != "0" ] ; then
+    echo "command executed:"
+    echo $CMD
+
+    cat $TEMPDIR/diff
+    exit 4
+fi    
+
+if [ "$EXTRA_CHECKER_PRESENT" == "y" ] ; then
+    CMD="$EXTRA_CHECKER $CASEID 1>$TEMPDIR/extra_checker.stdout 2>$TEMPDIR/extra_checker.stderr"
+    eval $CMD
+    rc="$?"
+
+    if [ "$rc" != "0" ] ; then
+        echo "command executed:"
+        echo $CMD
+
+        cat $TEMPDIR/extra_checker.stdout
+        cat $TEMPDIR/extra_checker.stderr
+
+        exit 5
+    fi
+fi
+
+rm -rf $TEMPDIR
+
+exit 0
diff --git a/tools/.gitignore b/tools/.gitignore
new file mode 100644
index 0000000..f523b36
--- /dev/null
+++ b/tools/.gitignore
@@ -0,0 +1,6 @@
+pileupcomp
+avg-qual
+sra-rewrite
+core.*
+gmon.out
+
diff --git a/tools/Makefile b/tools/Makefile
new file mode 100644
index 0000000..8c67e95
--- /dev/null
+++ b/tools/Makefile
@@ -0,0 +1,91 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+by_default: default
+
+TOP ?= $(abspath ..)
+MODULE = tools
+
+include $(TOP)/build/Makefile.shell
+
+include $(TOP)/build/Makefile.config
+
+#-------------------------------------------------------------------------------
+# default
+#
+SUBDIRS =             \
+	util              \
+	align-cache       \
+	kar               \
+	kqsh              \
+	vdb-dump          \
+	sra-dump          \
+	sra-pileup        \
+	bam-loader        \
+	fastq-loader      \
+	srapath           \
+	sra-stat          \
+	vdb-copy          \
+	rd-filter-redact  \
+	vdb-config        \
+	align-info        \
+	qual-recalib-stat \
+	prefetch          \
+	vdb-decrypt       \
+	vdb-validate      \
+	sra-sort          \
+	cache-mgr         \
+	vcf-loader        \
+	copycat           \
+	sra-load          \
+	ccextract         \
+	pacbio-load       \
+	fuse              \
+	vdb-diff          \
+	kget              \
+	ngs-pileup        \
+	general-loader    \
+	fastdump          \
+
+ifneq (win,$(BUILD_OS))
+ifneq (rwin,$(BUILD_OS))
+	SUBDIRS += cg-load pileup-stats
+endif
+endif
+
+# common targets for non-leaf Makefiles; must follow a definition of SUBDIRS
+include $(TOP)/build/Makefile.targets
+
+$(SUBDIRS):
+	@ $(MAKE) -C $@
+
+.PHONY: default $(SUBDIRS)
+
+#-------------------------------------------------------------------------------
+# pass-through
+#
+out debug profile release GCC ICC VC++:
+	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env $@
+
+.PHONY: out debug profile release GCC ICC VC++
diff --git a/tools/align-cache/Makefile b/tools/align-cache/Makefile
new file mode 100644
index 0000000..bc0a781
--- /dev/null
+++ b/tools/align-cache/Makefile
@@ -0,0 +1,78 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/align-cache
+
+INT_TOOLS = 
+
+EXT_TOOLS = \
+	align-cache
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# align-cache
+#
+ALIGN_CACHE_SRC = \
+	align-cache \
+	helper
+
+ALIGN_CACHE_OBJ = \
+	$(addsuffix .$(OBJX),$(ALIGN_CACHE_SRC))
+
+ALIGN_CACHE_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-sm \
+	-sload
+
+$(BINDIR)/align-cache: $(ALIGN_CACHE_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(ALIGN_CACHE_LIB)
diff --git a/tools/align-cache/align-cache.cpp b/tools/align-cache/align-cache.cpp
new file mode 100644
index 0000000..c988f27
--- /dev/null
+++ b/tools/align-cache/align-cache.cpp
@@ -0,0 +1,552 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "helper.h"
+
+#include <stdio.h>
+#include <iostream>
+
+#include <kapp/main.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+
+namespace AlignCache
+{
+    struct Params
+    {
+        // Command line Params:
+        char const* dbPathSrc;
+        char const* dbPathDst;
+        
+        // Command line options
+        int64_t     id_spread_threshold;
+        size_t      cursor_cache_size;
+        size_t      min_cache_count;
+
+        // Internal parameters
+        bool cache_alignment_count;
+    } g_Params =
+    {
+        // Command line Params:
+        "",
+        "",
+        // Command line options
+        50000,
+#if _ARCH_BITS == 64
+        16UL << 30,  // 16 GB
+#else
+        1024UL << 20, // 1 GB
+#endif
+        100000,
+        // Internal parameters
+        true
+    };
+
+    char const OPTION_ID_SPREAD_THRESHOLD[] = "threshold";
+    char const ALIAS_ID_SPREAD_THRESHOLD[]  = "t";
+    char const* USAGE_ID_SPREAD_THRESHOLD[]  = { "cache PRIMARY_ALIGNMENT records with difference between values of ALIGN_ID and MATE_ALIGN_ID >= the value of 'threshold' option", NULL };
+
+    char const OPTION_CURSOR_CACHE_SIZE[] = "cursor-cache";
+    //char const ALIAS_CURSOR_CACHE_SIZE[]  = "c";
+    char const* USAGE_CURSOR_CACHE_SIZE[]  = { "the size of the read cursor in Megabytes", NULL };
+
+    char const OPTION_MIN_CACHE_COUNT[] = "min-cache-count";
+    //char const ALIAS_MIN_CACHE_COUNT[]  = "";
+    char const* USAGE_MIN_CACHE_COUNT[]  = { "if the number of primary alignment ids in the src db selected for caching is less than <min-cache-count>, the cache db will not be created at all", NULL };
+
+    ::OptDef Options[] =
+    {
+        { OPTION_ID_SPREAD_THRESHOLD, ALIAS_ID_SPREAD_THRESHOLD, NULL, USAGE_ID_SPREAD_THRESHOLD, 1, true, false },
+        { OPTION_CURSOR_CACHE_SIZE, NULL, NULL, USAGE_CURSOR_CACHE_SIZE, 1, true, false },
+        { OPTION_MIN_CACHE_COUNT, NULL, NULL, USAGE_MIN_CACHE_COUNT, 1, true, false },
+    };
+
+    struct PrimaryAlignmentData
+    {
+        uint64_t                    prev_key;
+        VDBObjects::CVCursor const* pCursorPA;
+        uint32_t const*             pColumnIndex;
+        uint32_t const*             pColumnIndexCache;
+        size_t const                column_count;
+        VDBObjects::CVCursor*       pCursorPACache;
+        //size_t                      count;
+        //size_t const                total_count;
+        KApp::CProgressBar*         pProgressBar;
+    };
+
+    //size_t print_percent ( size_t count, size_t total_count )
+    //{
+    //    size_t const total_points = 10000;
+    //    if ( total_count >= total_points && !(count % (total_count / total_points)) )
+    //    {
+    //        size_t points = (size_t)(total_points*count/total_count);
+    //        std::cout
+    //            << (100*points/total_points)
+    //            << "."
+    //            << ( 1000*points/total_points % 10 )
+    //            << ( 10000*points/total_points % 10 )
+    //            << "% ("
+    //            << count
+    //            << "/"
+    //            << total_count
+    //            << ")"
+    //            << std::endl;
+    //        return points;
+    //    }
+    //    else
+    //        return 0;
+    //}
+
+    template <typename T>
+    void copy_single_int_field (
+        VDBObjects::CVCursor const& curFrom,
+        VDBObjects::CVCursor& curTo,
+        int64_t row_id,
+        uint32_t column_index_from,
+        uint32_t column_index_to
+        )
+    {
+        T val;
+        curFrom.ReadItems ( row_id, column_index_from, & val, sizeof (T) );
+        curTo.Write ( column_index_to, & val, 1 );
+    }
+
+    void copy_str_field (
+        VDBObjects::CVCursor const& curFrom,
+        VDBObjects::CVCursor& curTo,
+        int64_t row_id,
+        uint32_t column_index_from,
+        uint32_t column_index_to
+        )
+    {
+        char val[4096];
+        uint32_t item_count = curFrom.ReadItems ( row_id, column_index_from, val, sizeof (val) );
+        curTo.Write ( column_index_to, val, item_count );
+    }
+
+
+    rc_t KVectorCallbackPrimaryAlignment ( uint64_t key, bool value, void *user_data )
+    {
+        if ( ::Quitting() )
+        {
+            LOGMSG ( klogWarn, "Interrupted" );
+            return 1;
+        }
+
+        assert ( value );
+        PrimaryAlignmentData* p = (PrimaryAlignmentData*)user_data;
+        int64_t prev_row_id = (int64_t)p->prev_key;
+        int64_t row_id = (int64_t)key;
+        VDBObjects::CVCursor& cur_cache = *p->pCursorPACache;
+        
+        p->pProgressBar->Process ( 1, false );
+
+        //++p->count;
+        //print_percent (p->count, p->total_count);
+
+        // Filling gaps between actually cached rows with zero-length records
+        if ( p->prev_key )
+        {
+            if ( row_id - prev_row_id > 1)
+            {
+                cur_cache.OpenRow ();
+                cur_cache.CommitRow ();
+                if (row_id - prev_row_id > 2)
+                    cur_cache.RepeatRow ( row_id - prev_row_id - 2 ); // -2 due to the first zero-row has been written in the previous line
+                cur_cache.CloseRow ();
+            }
+        }
+
+        // Caching (copying) actual record from PRIMARY_ALIGNMENT table
+        {
+            // The very first visit - need to set starting row_id
+            if ( p->prev_key == 0 )
+                cur_cache.SetRowId ( row_id );
+
+            VDBObjects::CVCursor const& cur_pa = *p->pCursorPA;
+            uint32_t const* ColIndexPA = p->pColumnIndex;
+            uint32_t const* ColIndexCache = p->pColumnIndexCache;
+
+            cur_cache.OpenRow ();
+
+            // MATE_ALIGN_ID
+            size_t column_index = 0;
+            copy_single_int_field <int64_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // SAM_FLAGS
+            ++ column_index;
+            copy_single_int_field <uint32_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // TEMPLATE_LEN
+            ++ column_index;
+            copy_single_int_field <int32_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // MATE_REF_NAME
+            ++ column_index;
+            copy_str_field (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // MATE_REF_POS
+            ++ column_index;
+            copy_single_int_field <uint32_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // SAM_QUALITY
+            ++ column_index;
+            copy_str_field (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // RD_FILTER
+            ++ column_index;
+            copy_single_int_field <uint8_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            // SPOT_GROUP
+            ++ column_index;
+            copy_str_field (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+
+            if ( g_Params.cache_alignment_count )
+            {
+                // ALIGNMENT_COUNT
+                ++ column_index;
+                copy_single_int_field <uint8_t> (cur_pa, cur_cache, row_id, ColIndexPA[column_index], ColIndexCache[column_index] );
+            }
+
+            cur_cache.CommitRow ();
+            cur_cache.CloseRow ();
+
+            p->prev_key = key;
+        }
+
+        return 0;
+    }
+
+    bool ProcessSequenceRow ( int64_t idRow, VDBObjects::CVCursor const& cursor, KLib::CKVector& vect, uint32_t idxCol )
+    {
+        int64_t buf[3]; // TODO: find out the real type of this array
+        uint32_t items_read_count = cursor.ReadItems ( idRow, idxCol, buf, countof(buf) );
+        if ( items_read_count == 2 )
+        {
+            int64_t id1 = buf[0];
+            int64_t id2 = buf[1];
+            int64_t diff = id1 >= id2 ? id1 - id2 : id2 - id1;
+
+            if (id1 && id2 && diff > g_Params.id_spread_threshold)
+            {
+                vect.SetBool(id1, true);
+                vect.SetBool(id2, true);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    size_t FillKVectorWithAlignIDs (VDBObjects::CVDatabase const& vdb, size_t cache_size, KLib::CKVector& vect )
+    {
+        char const* ColumnNamesSequence[] =
+        {
+            "PRIMARY_ALIGNMENT_ID"
+        };
+        uint32_t ColumnIndexSequence [ countof (ColumnNamesSequence) ];
+
+        VDBObjects::CVTable table = vdb.OpenTable("SEQUENCE");
+
+        VDBObjects::CVCursor cursor = table.CreateCursorRead ( cache_size );
+        cursor.InitColumnIndex (ColumnNamesSequence, ColumnIndexSequence, countof(ColumnNamesSequence), false);
+        cursor.Open();
+
+        int64_t idRow = 0;
+        uint64_t nRowCount = 0;
+        size_t count = 0;
+
+        cursor.GetIdRange (idRow, nRowCount);
+
+        for (; (uint64_t)idRow < nRowCount; ++idRow )
+        {
+            if ( ::Quitting() )
+            {
+                LOGMSG ( klogWarn, "Interrupted" );
+                return 0;
+            }
+
+            if ( ProcessSequenceRow (idRow, cursor, vect, ColumnIndexSequence[0]) )
+                ++count;
+        }
+
+        return count;
+    }
+
+    void CachePrimaryAlignment (VDBObjects::CVDBManager& mgr, VDBObjects::CVDatabase const& vdb, size_t cache_size, KLib::CKVector const& vect, size_t vect_size, KApp::CProgressBar& progress_bar)
+    {
+        // Defining the set of columns to be copied from PRIMARY_ALIGNMENT table
+        // to the new cache table
+        // ALIGNMENT_COUNT is the optional column, it must be at the end of this array
+#define DECLARE_PA_COLUMNS( arrName, column_suffix ) char const* arrName[] =\
+        {\
+            "MATE_ALIGN_ID"     column_suffix,\
+            "SAM_FLAGS"         column_suffix,\
+            "TEMPLATE_LEN"      column_suffix,\
+            "MATE_REF_NAME"     column_suffix,\
+            "MATE_REF_POS"      column_suffix,\
+            "SAM_QUALITY"       column_suffix,\
+            "RD_FILTER"         column_suffix,\
+            "SPOT_GROUP"        column_suffix,\
+            "ALIGNMENT_COUNT"   column_suffix\
+        }
+
+        DECLARE_PA_COLUMNS (ColumnNamesPrimaryAlignment, "");
+        DECLARE_PA_COLUMNS (ColumnNamesPrimaryAlignmentCache, "_CACHE");
+#undef DECLARE_PA_COLUMNS
+
+        uint32_t ColumnIndexPrimaryAlignment [ countof (ColumnNamesPrimaryAlignment) ];
+        uint32_t ColumnIndexPrimaryAlignmentCache [ countof (ColumnNamesPrimaryAlignmentCache) ];
+
+        // Openning cursor to iterate through PRIMARY_ALIGNMENT table
+        VDBObjects::CVTable tablePA = vdb.OpenTable("PRIMARY_ALIGNMENT");
+        VDBObjects::CVCursor cursorPA = tablePA.CreateCursorRead ( cache_size );
+        cursorPA.PermitPostOpenAdd();
+        cursorPA.InitColumnIndex ( ColumnNamesPrimaryAlignment, ColumnIndexPrimaryAlignment, countof(ColumnNamesPrimaryAlignment) - 1, false );
+        cursorPA.Open();
+
+        // Check if we can read ALIGNMENT_COUNT parameter
+        try
+        {
+            cursorPA.InitColumnIndex(
+                ColumnNamesPrimaryAlignment + countof(ColumnNamesPrimaryAlignment) - 1,
+                ColumnIndexPrimaryAlignment + countof(ColumnIndexPrimaryAlignment) - 1,
+                1, false
+            );
+        }
+        catch (Utils::CErrorMsg const& e)
+        {
+            if (e.getRC() == RC ( rcVDB, rcCursor, rcUpdating, rcColumn, rcNotFound ) )
+                g_Params.cache_alignment_count = false;
+            else
+                throw;
+        }
+
+        // Creating new cache table (with the same name - PRIMARY_ALIGNMENT but in the separate DB file)
+        char const schema_path[] = "align/mate-cache.vschema";
+
+        VDBObjects::CVSchema schema = mgr.MakeSchema ();
+        schema.VSchemaParseFile ( schema_path );
+        char szCacheDBName[256] = "";
+        string_printf (szCacheDBName, countof (szCacheDBName), NULL, "%s", g_Params.dbPathDst );
+        VDBObjects::CVDatabase dbCache = mgr.CreateDB ( schema, "NCBI:align:db:mate_cache #1", kcmParents | kcmInit | kcmMD5, szCacheDBName );
+        VDBObjects::CVTable tableCache = dbCache.CreateTable ( "PRIMARY_ALIGNMENT" );
+
+        VDBObjects::CVCursor cursorCache = tableCache.CreateCursorWrite ( kcmInsert );
+        cursorCache.InitColumnIndex ( ColumnNamesPrimaryAlignmentCache, ColumnIndexPrimaryAlignmentCache, countof (ColumnNamesPrimaryAlignmentCache) - (size_t) (!g_Params.cache_alignment_count), true );
+        cursorCache.Open ();
+
+        //PrimaryAlignmentData data = { 0, &cursorPA, ColumnIndexPrimaryAlignment, ColumnIndexPrimaryAlignmentCache, countof (ColumnNamesPrimaryAlignment), &cursorCache, 0, vect_size };
+        progress_bar.Append (vect_size);
+        PrimaryAlignmentData data =
+        {
+            0,
+            &cursorPA,
+            ColumnIndexPrimaryAlignment,
+            ColumnIndexPrimaryAlignmentCache,
+            countof (ColumnNamesPrimaryAlignment),
+            &cursorCache,
+            &progress_bar
+        };
+
+        // process each saved primary_alignment_id
+        vect.VisitBool ( KVectorCallbackPrimaryAlignment, & data );
+        cursorCache.Commit ();
+    }
+
+    int create_cache_db_impl()
+    {
+        // Adding 0% mark at the very beginning of the program
+        KApp::CProgressBar progress_bar(1);
+        progress_bar.Process ( 0, true );
+
+        VDBObjects::CVDBManager mgr;
+        mgr.Make();
+
+        VDBObjects::CVDatabase vdb = mgr.OpenDB (g_Params.dbPathSrc);
+
+        // Scan SEQUENCE table to find mate_alignment_ids that have to be cached
+        KLib::CKVector vect;
+        size_t count = FillKVectorWithAlignIDs ( vdb, g_Params.cursor_cache_size, vect );
+
+        if ( count*2 >= g_Params.min_cache_count )
+        {
+            // For each id in vect cache the PRIMARY_ALIGNMENT record
+            CachePrimaryAlignment ( mgr, vdb, g_Params.cursor_cache_size, vect, count*2, progress_bar );
+        }
+        else
+        {
+            if ( ::Quitting() == 0 )
+            {
+                PLOGMSG ( klogWarn,
+                    ( klogWarn, 
+                    "The cache db will not be created because there is not "
+                    "enough records to cache: $(COUNT) is found and minimum $(MIN_COUNT) is required. "
+                    "The minimum required number can be changed via $(OPTION_MIN_CACHE_COUNT) parameter.",
+                    "COUNT=%zu,MIN_COUNT=%zu,OPTION_MIN_CACHE_COUNT=%s",
+                    count*2, g_Params.min_cache_count, OPTION_MIN_CACHE_COUNT
+                    ));
+            }
+        }
+
+        mgr.Release (); // should not be necessary - destructor should do job
+        return 0;
+    }
+
+    // interpret exception processed by Utils::HandleException:
+    // filter out some errors like invalid db - users don't want to
+    // see such errors as actual errors
+    int InterpretException ( int64_t rcCodeUtil, bool bSilent, char const* szErrDesc )
+    {
+        if ( rcCodeUtil == Utils::rcUnknown ||
+             rcCodeUtil == Utils::rcErrorStdExc ||
+             rcCodeUtil == Utils::rcInvalid)
+        {
+            if ( ! bSilent )
+                LOGMSG ( klogErr, szErrDesc );
+
+            return 3;
+        }
+        else if (rcCodeUtil == SILENT_RC( rcDB,rcMgr,rcOpening,rcDatabase,rcIncorrect ) ||
+            rcCodeUtil == SILENT_RC( rcVFS,rcTree,rcResolving,rcPath,rcNotFound ))
+        {
+            if ( ! bSilent )
+                LOGMSG ( klogWarn, szErrDesc );
+            return 0;
+        }
+        else
+        {
+            if ( ! bSilent )
+                LOGMSG ( klogErr, szErrDesc );
+            return 3;
+        }
+    }
+
+    int create_cache_db_impl_safe ()
+    {
+        try
+        {
+            return create_cache_db_impl ();
+        }
+        catch (...)
+        {
+            char szErrDesc [512];
+            int64_t rc = Utils::HandleException ( true, szErrDesc, countof(szErrDesc) );
+            return InterpretException ( rc, false, szErrDesc );
+        }
+    }
+
+    int create_cache_db (int argc, char** argv)
+    {
+        try
+        {
+            KApp::CArgs args (argc, argv, Options, countof (Options), ::XMLLogger_Args, ::XMLLogger_ArgsQty);
+            KApp::CXMLLogger xml_logger ( args );
+            uint32_t param_count = args.GetParamCount ();
+            if ( param_count != 2 )
+            {
+                MiniUsage (args.GetArgs());
+                return 0;
+            }
+
+            g_Params.dbPathSrc = args.GetParamValue (0);
+            g_Params.dbPathDst = args.GetParamValue (1);
+
+            if (args.GetOptionCount (OPTION_ID_SPREAD_THRESHOLD))
+                g_Params.id_spread_threshold = args.GetOptionValueUInt<int64_t> ( OPTION_ID_SPREAD_THRESHOLD, 0 );
+
+            if (args.GetOptionCount (OPTION_CURSOR_CACHE_SIZE))
+                g_Params.cursor_cache_size = 1024*1024 * args.GetOptionValueUInt<size_t> ( OPTION_CURSOR_CACHE_SIZE, 0 );
+
+            if (args.GetOptionCount (OPTION_MIN_CACHE_COUNT))
+                g_Params.min_cache_count = args.GetOptionValueUInt <size_t> ( OPTION_MIN_CACHE_COUNT, 0 );
+
+            return create_cache_db_impl_safe ();
+        }
+        catch (...) // here we handle only exceptions in CArgs or CXMLLogger
+        {
+            return Utils::HandleException ( false, NULL, 0 );
+        }
+    }
+}
+
+
+extern "C"
+{
+    const char UsageDefaultName[] = "align-cache";
+    rc_t CC UsageSummary (const char * progname)
+    {
+        printf (
+        "Usage:\n"
+        "  %s [options] <src-db-path> <new-cache-db-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Create a cache file for given database <src-db-path>\n"
+        "  PRIMARY_ALIGNMENT table and save it into <new-cache-db-path>\n"
+        "\n", progname);
+        return 0;
+    }
+    const char* param_usage_src[] = { "Path to the database", NULL };
+    const char* param_usage_dst[] = { "Path to the new cache database to be created", NULL };
+    rc_t CC Usage (::Args const* args)
+    {
+        rc_t rc = 0;
+        const char* progname = UsageDefaultName;
+        const char* fullpath = UsageDefaultName;
+
+        if (args == NULL)
+            rc = RC(rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
+        else
+            rc = ArgsProgram(args, &fullpath, &progname);
+
+        UsageSummary (progname);
+
+        printf("Parameters:\n");
+
+        HelpParamLine ("src-db-path", param_usage_src);
+        HelpParamLine ("new-cache-db-path", param_usage_dst);
+
+        printf ("\nOptions:\n");
+
+        HelpOptionLine (AlignCache::ALIAS_ID_SPREAD_THRESHOLD, AlignCache::OPTION_ID_SPREAD_THRESHOLD, "value", AlignCache::USAGE_ID_SPREAD_THRESHOLD);
+        HelpOptionLine (NULL, AlignCache::OPTION_CURSOR_CACHE_SIZE, "value in MB", AlignCache::USAGE_CURSOR_CACHE_SIZE);
+        HelpOptionLine (NULL, AlignCache::OPTION_MIN_CACHE_COUNT, "count", AlignCache::USAGE_MIN_CACHE_COUNT);
+        XMLLogger_Usage();
+
+        printf ("\n");
+
+        HelpOptionsStandard ();
+
+        HelpVersion (fullpath, KAppVersion());
+
+        return rc;
+    }
+
+    rc_t CC KMain(int argc, char* argv[])
+    {
+        return AlignCache::create_cache_db (argc, argv);
+    }
+}
diff --git a/tools/align-cache/helper.cpp b/tools/align-cache/helper.cpp
new file mode 100644
index 0000000..1b02c48
--- /dev/null
+++ b/tools/align-cache/helper.cpp
@@ -0,0 +1,923 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+// helper.cpp
+
+#include "helper.h"
+
+#include <algorithm>
+#include <stdio.h>
+#include <iostream>
+
+#include <vdb/vdb-priv.h>
+#include <klib/rc.h>
+
+#ifdef _WIN32
+#pragma warning (disable:4503)
+#endif
+
+// TODO: remove printfs
+namespace KLib
+{
+    CKVector::CKVector() : m_pSelf(NULL)
+    {
+        Make();
+    }
+
+    CKVector::~CKVector()
+    {
+        Release();
+    }
+
+    void CKVector::Make()
+    {
+        if (m_pSelf)
+            throw Utils::CErrorMsg (0, "Duplicated call to KVectorMake");
+
+        rc_t rc = ::KVectorMake(&m_pSelf);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "KVectorMake");
+#if DEBUG_PRINT != 0
+        printf("Created KVector %p\n", m_pSelf);
+#endif
+    }
+
+    void CKVector::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing KVector %p\n", m_pSelf);
+#endif
+            ::KVectorRelease(m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+    size_t const RECORD_SIZE_IN_BITS = 2;
+    uint64_t const BIT_SET_MASK = 0x2;
+    uint64_t const BIT_VALUE_MASK = 0x1;
+    uint64_t const BIT_RECORD_MASK = BIT_SET_MASK | BIT_VALUE_MASK;
+
+    void CKVector::SetBool(uint64_t key, bool value)
+    {
+#if USING_UINT64_BITMAP == 1
+        uint64_t stored_bits = 0;
+        uint64_t key_qword = key / 64;
+        uint64_t key_bit = key % 64;
+        rc_t rc = ::KVectorGetU64 ( m_pSelf, key_qword, &stored_bits );
+        bool first_time = rc == RC ( rcCont, rcVector, rcAccessing, rcItem, rcNotFound ); // 0x1e615458
+        if ( !first_time && rc )
+            throw Utils::CErrorMsg(rc, "KVectorGetU64");
+
+        uint64_t new_bit = (uint64_t)value << key_bit;
+        uint64_t stored_bit = (uint64_t)1 << key_bit & stored_bits;
+
+        if ( first_time || new_bit != stored_bit )
+        {
+            if ( new_bit )
+                stored_bits |= new_bit;
+            else
+                stored_bits &= ~new_bit;
+
+            rc_t rc = ::KVectorSetU64 ( m_pSelf, key_qword, stored_bits );
+            if (rc)
+                throw Utils::CErrorMsg(rc, "KVectorSetU64");
+        }
+#elif USING_UINT64_BITMAP == 2
+        uint64_t stored_bits = 0;
+        uint64_t key_qword = key / (sizeof(stored_bits) * 8 / RECORD_SIZE_IN_BITS);
+        uint64_t bit_offset_in_qword = (key % (sizeof(stored_bits) * 8 / RECORD_SIZE_IN_BITS)) * RECORD_SIZE_IN_BITS;
+        rc_t rc = ::KVectorGetU64 ( m_pSelf, key_qword, &stored_bits );
+        bool first_time = rc == RC ( rcCont, rcVector, rcAccessing, rcItem, rcNotFound ); // 0x1e615458;
+        if ( !first_time && rc )
+            throw Utils::CErrorMsg(rc, "KVectorGetU64");
+
+        uint64_t new_bit_record = (BIT_SET_MASK | (uint64_t)value) << bit_offset_in_qword;
+        uint64_t stored_bit_record = (uint64_t)BIT_RECORD_MASK << bit_offset_in_qword & stored_bits;
+
+        if ( first_time || new_bit_record != stored_bit_record )
+        {
+            stored_bits &= ~((uint64_t)BIT_RECORD_MASK << bit_offset_in_qword); // clear stored record to assign a new value by bitwise OR
+            stored_bits |= new_bit_record;
+
+            rc_t rc = ::KVectorSetU64 ( m_pSelf, key_qword, stored_bits );
+            if (rc)
+                throw Utils::CErrorMsg(rc, "KVectorSetU64");
+        }
+#else
+
+        rc_t rc = ::KVectorSetBool ( m_pSelf, key, value );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "KVectorSetBool");
+#endif
+    }
+
+    struct UserDataU64toBool
+    {
+        rc_t ( * f ) ( uint64_t key, bool value, void *user_data );
+        void* user_data;
+    };
+#if USING_UINT64_BITMAP == 1
+    rc_t VisitU64toBoolAdapter ( uint64_t key, uint64_t value, void *user_data )
+    {
+        rc_t ( * bool_callback ) ( uint64_t key, bool value, void *user_data );
+        bool_callback = ((UserDataU64toBool*) user_data) -> f;
+        void* original_user_data = ((UserDataU64toBool*) user_data) -> user_data;
+
+        rc_t rc = 0;
+        for ( size_t i = 0; i < sizeof (value) * 8; ++i )
+        {
+            rc = bool_callback ( key * 64 + i, (bool) ((uint64_t)1 << i & value), original_user_data );
+            if ( rc )
+                return rc;
+        }
+        return rc;
+    }
+#elif USING_UINT64_BITMAP == 2
+    rc_t VisitU64toBoolAdapter ( uint64_t key, uint64_t value, void *user_data )
+    {
+        rc_t ( * bool_callback ) ( uint64_t key, bool value, void *user_data );
+        bool_callback = ((UserDataU64toBool*) user_data) -> f;
+        void* original_user_data = ((UserDataU64toBool*) user_data) -> user_data;
+
+        rc_t rc = 0;
+        for ( size_t i = 0; i < sizeof (value) * 8 / RECORD_SIZE_IN_BITS; ++i )
+        {
+            uint64_t key_bool = key * sizeof(value) * 8 / RECORD_SIZE_IN_BITS + i;
+            uint64_t record = value >> i * RECORD_SIZE_IN_BITS & BIT_RECORD_MASK;
+            if ( record & BIT_SET_MASK )
+            {
+                rc = bool_callback ( key_bool, (bool) (record & BIT_VALUE_MASK), original_user_data );
+                if ( rc )
+                    return rc;
+            }
+        }
+        return rc;
+    }
+#endif
+
+    void CKVector::VisitBool(rc_t ( * f ) ( uint64_t key, bool value, void *user_data ), void *user_data) const
+    {
+#if USING_UINT64_BITMAP == 1
+        UserDataU64toBool user_data_adapter = { f, user_data };
+        ::KVectorVisitU64 ( m_pSelf, false, VisitU64toBoolAdapter, &user_data_adapter );
+#elif USING_UINT64_BITMAP == 2
+        UserDataU64toBool user_data_adapter = { f, user_data };
+        ::KVectorVisitU64 ( m_pSelf, false, VisitU64toBoolAdapter, &user_data_adapter );
+#else
+        ::KVectorVisitBool ( m_pSelf, false, f, user_data );
+#endif
+    }
+}
+
+///////////////////////////////////////////////////////////////
+
+namespace VDBObjects
+{
+    CVCursor::CVCursor() : m_pSelf(NULL)
+    {}
+
+    CVCursor::~CVCursor()
+    {
+        Release();
+    }
+
+    CVCursor::CVCursor(CVCursor const& x)
+    {
+        Clone(x);
+    }
+
+    CVCursor& CVCursor::operator=(CVCursor const& x)
+    {
+        if (m_pSelf)
+            Release();
+
+        Clone(x);
+        return *this;
+    }
+
+    void CVCursor::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing VCursor %p\n", m_pSelf);
+#endif
+            ::VCursorRelease(m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+    void CVCursor::Clone(CVCursor const& x)
+    {
+        m_pSelf = x.m_pSelf;
+        ::VCursorAddRef ( m_pSelf );
+#if DEBUG_PRINT != 0
+        printf ("CLONING VCursor %p\n", m_pSelf);
+#endif
+    }
+
+    void CVCursor::Open() const
+    {
+        rc_t rc = ::VCursorOpen(m_pSelf);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorOpen");
+    }
+
+    void CVCursor::PermitPostOpenAdd() const
+    {
+        rc_t rc = ::VCursorPermitPostOpenAdd ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorPermitPostOpenAdd");
+    }
+
+    void CVCursor::InitColumnIndex(char const* const* ColumnNames, uint32_t* pColumnIndex, size_t nCount, bool set_default)
+    {
+        for (size_t i = 0; i < nCount; ++i)
+        {
+            rc_t rc = ::VCursorAddColumn(m_pSelf, & pColumnIndex[i], ColumnNames[i] );
+            if (rc)
+                throw Utils::CErrorMsg(rc, "VCursorAddColumn - [%s]", ColumnNames[i]);
+
+            if ( set_default )
+            {
+                VTypedecl type;
+                VTypedesc desc;
+                uint32_t idx = pColumnIndex[i];
+
+                rc = ::VCursorDatatype ( m_pSelf, idx, & type, & desc );
+                if (rc)
+                    throw Utils::CErrorMsg(rc, "VCursorDatatype (column idx=%u [%s])", idx, ColumnNames[i]);
+
+                uint32_t elem_bits = ::VTypedescSizeof ( & desc );
+                if (rc)
+                    throw Utils::CErrorMsg(rc, "VTypedescSizeof (column idx=%u [%s])", idx, ColumnNames[i]);
+                rc = ::VCursorDefault ( m_pSelf, idx, elem_bits, "", 0, 0 );
+                if (rc)
+                    throw Utils::CErrorMsg(rc, "VCursorDefault (column idx=%u [%s])", idx, ColumnNames[i]);
+            }
+        }
+    }
+
+    void CVCursor::GetIdRange(int64_t& idFirstRow, uint64_t& nRowCount) const
+    {
+        rc_t rc = ::VCursorIdRange(m_pSelf, 0, &idFirstRow, &nRowCount);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorIdRange");
+    }
+
+    int64_t CVCursor::GetRowId () const
+    {
+        int64_t row_id;
+        rc_t rc = ::VCursorRowId ( m_pSelf, & row_id );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorRowId");
+
+        return row_id;
+    }
+
+    void CVCursor::SetRowId (int64_t row_id) const
+    {
+        rc_t rc = ::VCursorSetRowId ( m_pSelf, row_id );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorSetRowId (%ld)", row_id);
+    }
+
+    void CVCursor::OpenRow () const
+    {
+        rc_t rc = ::VCursorOpenRow ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorOpenRow");
+    }
+
+    void CVCursor::CommitRow ()
+    {
+        rc_t rc = ::VCursorCommitRow ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorCommitRow");
+    }
+
+    void CVCursor::RepeatRow ( uint64_t count )
+    {
+        rc_t rc = ::VCursorRepeatRow ( m_pSelf, count );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorRepeatRow (%lu)", count);
+    }
+
+    void CVCursor::CloseRow () const
+    {
+        rc_t rc = ::VCursorCloseRow ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorCloseRow");
+    }
+
+    void CVCursor::Commit ()
+    {
+        rc_t rc = ::VCursorCommit ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VCursorCommit");
+    }
+
+///////////////////////////////////////////////////////////////////////////////////
+
+    CVTable::CVTable() : m_pSelf(NULL)
+    {
+    }
+    
+    CVTable::~CVTable()
+    {
+        Release();
+    }
+
+    CVTable::CVTable(CVTable const& x)
+    {
+        Clone(x);
+    }
+
+    CVTable& CVTable::operator=(CVTable const& x)
+    {
+        if (m_pSelf)
+            Release();
+
+        Clone(x);
+        return *this;
+    }
+
+    void CVTable::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing VTable %p\n", m_pSelf);
+#endif
+            ::VTableRelease(m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+    void CVTable::Clone(CVTable const& x)
+    {
+        m_pSelf = x.m_pSelf;
+        ::VTableAddRef ( m_pSelf );
+#if DEBUG_PRINT != 0
+        printf ("CLONING VTable %p\n", m_pSelf);
+#endif
+    }
+
+    CVCursor CVTable::CreateCursorRead ( size_t cache_size ) const
+    {
+        CVCursor cursor;
+        rc_t rc = ::VTableCreateCachedCursorRead(m_pSelf, const_cast<VCursor const**>(& cursor.m_pSelf), cache_size);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VTableCreateCachedCursorRead (%zu)", cache_size);
+
+#if DEBUG_PRINT != 0
+        printf("Created cursor (rd) %p\n", cursor.m_pSelf);
+#endif
+        return cursor;
+    }
+
+    CVCursor CVTable::CreateCursorWrite (::KCreateMode mode)
+    {
+        CVCursor cursor;
+        rc_t rc = ::VTableCreateCursorWrite ( m_pSelf, & cursor.m_pSelf, mode );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VTableCreateCursorWrite");
+
+#if DEBUG_PRINT != 0
+        printf("Created cursor (wr) %p\n", cursor.m_pSelf);
+#endif
+        return cursor;
+    }
+
+//////////////////////////////////////////////////////////////////////
+
+    CVDatabase::CVDatabase() : m_pSelf(NULL)
+    {}
+
+    CVDatabase::~CVDatabase()
+    {
+        Release();
+    }
+
+    CVDatabase::CVDatabase(CVDatabase const& x)
+    {
+        Clone(x);
+    }
+
+    CVDatabase& CVDatabase::operator=(CVDatabase const& x)
+    {
+        if (m_pSelf)
+            Release();
+
+        Clone(x);
+        return *this;
+    }
+
+    void CVDatabase::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing VDatabase %p\n", m_pSelf);
+#endif
+            ::VDatabaseRelease(m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+    void CVDatabase::Clone(CVDatabase const& x)
+    {
+        m_pSelf = x.m_pSelf;
+        ::VDatabaseAddRef ( m_pSelf );
+#if DEBUG_PRINT != 0
+        printf ("CLONING VDatabase %p\n", m_pSelf);
+#endif
+    }
+
+    CVTable CVDatabase::OpenTable(char const* pszTableName) const
+    {
+        CVTable table;
+        rc_t rc = ::VDatabaseOpenTableRead(m_pSelf, const_cast<VTable const**>(& table.m_pSelf), pszTableName);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDatabaseOpenTableRead (%s)", pszTableName);
+
+#if DEBUG_PRINT != 0
+        printf("Opened table %p (%s)\n", table.m_pSelf, pszTableName);
+#endif
+        return table;
+    }
+
+    CVTable CVDatabase::CreateTable ( char const* pszTableName )
+    {
+        CVTable table;
+        //rc_t rc = ::VDatabaseCreateTableDefault ( m_pSelf, & table.m_pSelf, pszTableName, pszTableName );
+        rc_t rc = ::VDatabaseCreateTableByMask ( m_pSelf, & table.m_pSelf, pszTableName, 0, 0, pszTableName );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDatabaseCreateTableDefault (%s)", pszTableName);
+
+#if DEBUG_PRINT != 0
+        printf("Created table %p (%s)\n", table.m_pSelf, pszTableName);
+#endif
+        return table;
+    }
+
+    void CVDatabase::ColumnCreateParams ( ::KCreateMode cmode, ::KChecksum checksum, size_t pgsize )
+    {
+        rc_t rc = ::VDatabaseColumnCreateParams ( m_pSelf, cmode, checksum, pgsize );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDatabaseColumnCreateParams");
+    }
+
+//////////////////////////////////////////////////////////////////////
+
+    CVSchema::CVSchema() : m_pSelf (NULL)
+    {
+    }
+    CVSchema::~CVSchema()
+    {
+        Release();
+    }
+
+    CVSchema::CVSchema(CVSchema const& x)
+    {
+        Clone (x);
+    }
+
+    CVSchema& CVSchema::operator=(CVSchema const& x)
+    {
+        Clone (x);
+        return *this;
+    }
+
+    void CVSchema::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing VSchema %p\n", m_pSelf);
+#endif
+            ::VSchemaRelease ( m_pSelf );
+            m_pSelf = NULL;
+        }
+    }
+
+    void CVSchema::Clone ( CVSchema const& x )
+    {
+        if (false && m_pSelf)
+        {
+            assert(0);
+            Release();
+        }
+        m_pSelf = x.m_pSelf;
+        ::VSchemaAddRef ( m_pSelf );
+#if DEBUG_PRINT != 0
+        printf ("CLONING VSchema %p\n", m_pSelf);
+#endif
+    }
+    
+    void CVSchema::VSchemaParseFile ( char const* pszFilePath )
+    {
+        rc_t rc = ::VSchemaParseFile ( m_pSelf, pszFilePath );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VSchemaParseFile (%s)", pszFilePath);
+    }
+
+//////////////////////////////////////////////////////////////////////
+
+    CVDBManager::CVDBManager() : m_pSelf(NULL)
+    {}
+
+    CVDBManager::~CVDBManager()
+    {
+        Release();
+    }
+
+    void CVDBManager::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing VDBManager %p\n", m_pSelf);
+#endif
+            ::VDBManagerRelease(m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+#if MANAGER_WRITABLE != 0
+    void CVDBManager::Make()
+    {
+        assert(m_pSelf == NULL);
+        if (m_pSelf)
+            throw Utils::CErrorMsg(0, "Double call to VDBManagerMakeUpdate");
+
+        rc_t rc = ::VDBManagerMakeUpdate ( & m_pSelf, NULL );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerMakeUpdate");
+
+	    /*rc = VDBManagerDisablePagemapThread ( m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerDisablePagemapThread");*/
+
+#if DEBUG_PRINT != 0
+        printf("Created VDBManager (wr) %p\n", m_pSelf);
+#endif
+    }
+#else
+    void CVDBManager::Make()
+    {
+        assert(m_pSelf == NULL);
+        if (m_pSelf)
+            throw Utils::CErrorMsg(0, "Double call to VDBManagerMakeRead");
+
+        rc_t rc = ::VDBManagerMakeRead(const_cast<VDBManager const**>(&m_pSelf), NULL);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerMakeRead");
+
+#if DEBUG_PRINT != 0
+        printf("Created VDBManager (rd) %p\n", m_pSelf);
+#endif
+    }
+#endif
+
+    CVDatabase CVDBManager::OpenDB(char const* pszDBName) const
+    {
+        CVDatabase vdb;
+        rc_t rc = ::VDBManagerOpenDBRead(m_pSelf, const_cast<VDatabase const**>(& vdb.m_pSelf), NULL, pszDBName);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerOpenDBRead (%s)", pszDBName);
+
+#if DEBUG_PRINT != 0
+        printf("Opened database %p (%s)\n", vdb.m_pSelf, pszDBName);
+#endif
+        return vdb;
+    }
+#if MANAGER_WRITABLE != 0
+    CVDatabase CVDBManager::CreateDB ( CVSchema const& schema, char const* pszTypeDesc, ::KCreateMode cmode, char const* pszPath )
+    {
+        CVDatabase vdb;
+        rc_t rc = ::VDBManagerCreateDB ( m_pSelf, & vdb.m_pSelf, schema.m_pSelf, pszTypeDesc, cmode, pszPath );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerCreateDB (%s)", pszPath);
+
+#if DEBUG_PRINT != 0
+        printf("Created database %p (%s)\n", vdb.m_pSelf, pszPath);
+#endif
+        // set creation mode of objects ( tables, columns, etc. ) to
+        // create new or re-initialize existing, plus attach md5 checksums
+        // to all files.
+        // set blob creation mode to record 32-bit CRC within blob
+        // continue to use default page size...
+        vdb.ColumnCreateParams ( kcmInit | kcmMD5, kcsCRC32, 0 );
+        return vdb;
+    }
+#endif
+
+    CVSchema CVDBManager::MakeSchema () const
+    {
+        CVSchema schema;
+        rc_t rc = ::VDBManagerMakeSchema ( m_pSelf, & schema.m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "VDBManagerMakeSchema");
+
+#if DEBUG_PRINT != 0
+        printf("Created Schema %p\n", schema.m_pSelf);
+#endif
+        return schema;
+    }
+}
+
+namespace KApp
+{
+    CArgs::CArgs (int argc, char** argv, ::OptDef const* pOptions, size_t option_count)
+        : m_pSelf(NULL)
+    {
+        MakeAndHandle ( argc, argv, pOptions, option_count );
+    }
+
+    CArgs::CArgs (int argc, char** argv, ::OptDef const* pOptions1, size_t option_count1, ::OptDef const* pOptions2, size_t option_count2)
+        : m_pSelf(NULL)
+    {
+        MakeAndHandle ( argc, argv, pOptions1, option_count1, pOptions2, option_count2 );
+    }
+
+    CArgs::~CArgs()
+    {
+        Release();
+    }
+
+    void CArgs::MakeAndHandle (int argc, char** argv, ::OptDef const* pOptions, size_t option_count)
+    {
+        if (m_pSelf)
+            throw Utils::CErrorMsg (0, "Duplicated call to ArgsMakeAndHandle");
+
+        rc_t rc = ::ArgsMakeAndHandle (&m_pSelf, argc, argv, 1, pOptions, option_count);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsMakeAndHandle");
+#if DEBUG_PRINT != 0
+        printf("Created Args %p\n", m_pSelf);
+#endif
+    }
+    void CArgs::MakeAndHandle ( int argc, char** argv, ::OptDef const* pOptions1, size_t option_count1, ::OptDef const* pOptions2, size_t option_count2 )
+    {
+        if (m_pSelf)
+            throw Utils::CErrorMsg (0, "Duplicated call to ArgsMakeAndHandle");
+
+        rc_t rc = ::ArgsMakeAndHandle (&m_pSelf, argc, argv, 2, pOptions1, option_count1, pOptions2, option_count2);
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsMakeAndHandle(2)");
+#if DEBUG_PRINT != 0
+        printf("Created Args(2) %p\n", m_pSelf);
+#endif
+    }
+
+    void CArgs::Release()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing Args %p\n", m_pSelf);
+#endif
+            ::ArgsRelease (m_pSelf);
+            m_pSelf = NULL;
+        }
+    }
+
+    ::Args const* CArgs::GetArgs () const
+    {
+        return m_pSelf;
+    }
+
+    uint32_t CArgs::GetParamCount () const
+    {
+        uint32_t ret = 0;
+        rc_t rc = ::ArgsParamCount ( m_pSelf, &ret );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsParamCount");
+
+        return ret;
+    }
+
+    char const* CArgs::GetParamValue ( uint32_t iteration ) const
+    {
+        void const* ret = NULL;
+        rc_t rc = ::ArgsParamValue ( m_pSelf, iteration, & ret );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsParamValue");
+
+        return static_cast <char const*> (ret);
+    }
+
+    uint32_t CArgs::GetOptionCount ( char const* option_name ) const
+    {
+        uint32_t ret = 0;
+        rc_t rc = ::ArgsOptionCount ( m_pSelf, option_name, &ret );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsOptionCount (%s)", option_name);
+
+        return ret;
+    }
+
+    char const* CArgs::GetOptionValue ( char const* option_name, uint32_t iteration ) const
+    {
+        void const* ret = NULL;
+        rc_t rc = ::ArgsOptionValue ( m_pSelf, option_name, iteration, & ret );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "ArgsOptionValue (%s)", option_name);
+
+        return static_cast <char const*> (ret);
+    }
+
+////////////////////////////////
+
+    CProgressBar::CProgressBar ( uint64_t size )
+    {
+        Make ( size );
+    }
+
+    CProgressBar::~CProgressBar ()
+    {
+        Release ();
+    }
+
+    void CProgressBar::Make ( uint64_t size )
+    {
+        rc_t rc = ::KLoadProgressbar_Make ( &m_pSelf, size );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "KLoadProgressbar_Make");
+#if DEBUG_PRINT != 0
+        printf ( "Created ProgressBar %p\n", m_pSelf );
+#endif
+    }
+    void CProgressBar::Release ()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing ProgressBar %p\n", m_pSelf);
+#endif
+            ::KLoadProgressbar_Release ( m_pSelf, true );
+            m_pSelf = NULL;
+        }
+    }
+
+    void CProgressBar::Append ( uint64_t chunk )
+    {
+        rc_t rc = ::KLoadProgressbar_Append ( m_pSelf, chunk );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "KLoadProgressbar_Append");
+    }
+
+    void CProgressBar::Process ( uint64_t chunk, bool force_report )
+    {
+        rc_t rc = ::KLoadProgressbar_Process ( m_pSelf, chunk, force_report );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "KLoadProgressbar_Process");
+    }
+
+///////////////////////////////////////////
+    CXMLLogger::CXMLLogger ( CArgs const& args )
+    {
+        Make ( args );
+    }
+
+    CXMLLogger::~CXMLLogger ()
+    {
+        Release ();
+    }
+
+    void CXMLLogger::Make ( CArgs const& args )
+    {
+        rc_t rc = ::XMLLogger_Make ( &m_pSelf, NULL, args.m_pSelf );
+        if (rc)
+            throw Utils::CErrorMsg(rc, "XMLLogger_Make");
+#if DEBUG_PRINT != 0
+        printf ( "Created XMLLogger %p\n", m_pSelf );
+#endif
+    }
+
+    void CXMLLogger::Release ()
+    {
+        if (m_pSelf)
+        {
+#if DEBUG_PRINT != 0
+            printf("Releasing XMLLogger %p\n", m_pSelf);
+#endif
+            ::XMLLogger_Release ( m_pSelf );
+            m_pSelf = NULL;
+        }
+    }
+}
+
+namespace Utils
+{
+    CErrorMsg::CErrorMsg(rc_t rc, char const* fmt_str, ...)
+        : m_rc(rc)
+    {
+        va_list args;
+        va_start(args, fmt_str);
+        string_vprintf (m_szDescr, countof(m_szDescr), NULL, fmt_str, args);
+        va_end(args);
+    }
+
+    rc_t CErrorMsg::getRC() const
+    {
+        return m_rc;
+    }
+    char const* CErrorMsg::what() const throw()
+    {
+        return m_szDescr;
+    }
+
+    int64_t HandleException ( bool bSilent, char* pErrDesc, size_t sizeErrDesc )
+    {
+        try
+        {
+            throw;
+        }
+        catch (Utils::CErrorMsg const& e)
+        {
+            char szBufErr[512];
+            if ( pErrDesc == NULL )
+            {
+                pErrDesc = szBufErr;
+                sizeErrDesc = countof(szBufErr);
+            }
+            size_t rc = e.getRC();
+            rc_t res;
+            if (rc != 0)
+                res = string_printf(pErrDesc, sizeErrDesc, NULL, "%s failed with code 0x%08x (%u) [%R]", e.what(), rc, rc, rc);
+            else
+                res = string_printf(pErrDesc, sizeErrDesc, NULL, "%s", e.what());
+            if (res == rcBuffer || res == rcInsufficient)
+                pErrDesc [sizeErrDesc - 1] = '\0';
+
+            if ( ! bSilent )
+                LOGMSG ( klogErr, pErrDesc );
+
+            return rc;
+        }
+        catch (std::exception const& e)
+        {
+            char szBufErr[512];
+            if ( pErrDesc == NULL )
+            {
+                pErrDesc = szBufErr;
+                sizeErrDesc = countof(szBufErr);
+            }
+            rc_t res = string_printf(pErrDesc, sizeErrDesc, NULL, "std::exception: %s", e.what());
+            if (res == rcBuffer || res == rcInsufficient)
+                pErrDesc [sizeErrDesc - 1] = '\0';
+
+            if ( ! bSilent )
+                LOGMSG ( klogErr, pErrDesc );
+
+            return Utils::rcErrorStdExc;
+        }
+        catch (...)
+        {
+            char szBufErr[512];
+            if ( pErrDesc == NULL )
+            {
+                pErrDesc = szBufErr;
+                sizeErrDesc = countof(szBufErr);
+            }
+            rc_t res = string_printf(pErrDesc, sizeErrDesc, NULL, "Unexpected exception occured");
+            if (res == rcBuffer || res == rcInsufficient)
+                pErrDesc [sizeErrDesc - 1] = '\0';
+            
+            if ( ! bSilent )
+                LOGMSG ( klogErr, pErrDesc );
+
+            return Utils::rcUnknown;
+        }
+
+        assert ( false );
+        return Utils::rcInvalid; // this shall never be reached
+    }
+}
diff --git a/tools/align-cache/helper.h b/tools/align-cache/helper.h
new file mode 100644
index 0000000..1fe213f
--- /dev/null
+++ b/tools/align-cache/helper.h
@@ -0,0 +1,390 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+// helper.h
+#include <exception>
+#include <string.h>
+
+#include <stdint.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/printf.h>
+#include <klib/vector.h>
+#include <kapp/args.h>
+#include <kapp/progressbar.h>
+#include <kapp/log-xml.h>
+
+
+#ifndef countof
+#define countof(arr) (sizeof(arr)/sizeof(arr[0]))
+#endif
+
+#ifdef _WIN32
+#pragma warning (disable:4503)
+#endif
+
+#define USING_UINT64_BITMAP 0
+#define MANAGER_WRITABLE 1
+#define DEBUG_PRINT 0
+
+namespace KLib
+{
+    class CKVector
+    {
+    public:
+        CKVector();
+        CKVector (CKVector const& x);
+        CKVector& operator= (CKVector const& x);
+        ~CKVector();
+
+        void SetBool (uint64_t key, bool value);
+        void VisitBool (rc_t ( * f ) ( uint64_t key, bool value, void *user_data ), void *user_data) const;
+
+    private:
+        void Make();
+        void Release();
+
+        ::KVector* m_pSelf;
+    };
+}
+
+namespace Utils
+{
+    class CErrorMsg : public std::exception
+    {
+    public:
+        CErrorMsg(rc_t rc, char const* fmt_str, ...);
+
+        rc_t getRC() const;
+        virtual char const* what() const throw();
+
+    private:
+        char m_szDescr[256];
+        rc_t m_rc;
+    };
+
+    template <typename T> T atoi_t ( char const* str_val )
+    {
+        if ( str_val [0] == '\0' )
+            throw Utils::CErrorMsg(0, "atoi_t: invalid input string (empty)");
+
+        size_t i = 0;
+        char sign = '+';
+        if ( str_val[0] == '-' || str_val[0] == '+' )
+        {
+            ++i;
+            sign = str_val[0];
+        }
+
+        T ret = 0;
+        for (; str_val[i] != '\0'; ++i )
+        {
+            if ( str_val[i] < '0' || str_val[i] > '9' )
+                throw Utils::CErrorMsg(0, "atoi_t: invalid input string \"%s\" (invalid character: '%c' at pos=%zu)", str_val, str_val[i], i+1);
+            ret = ret*10 + str_val[i] - '0';
+        }
+
+        return sign == '-' ? -ret : ret;
+    }
+
+    template <typename T> T atou_t ( char const* str_val )
+    {
+        if ( str_val [0] == '\0' )
+            throw Utils::CErrorMsg(0, "atou_t: invalid input string (empty)");
+
+        T ret = 0;
+        for ( size_t i = 0; str_val[i] != '\0'; ++i )
+        {
+            if ( str_val[i] < '0' || str_val[i] > '9' )
+                throw Utils::CErrorMsg(0, "atoi_t: invalid input string \"%s\" (invalid character: '%c' at pos=%zu)", str_val, str_val[i], i+1);
+            ret = ret*10 + str_val[i] - '0';
+        }
+
+        return ret;
+    }
+
+    enum ErrorHandlerCode
+    {
+        rcUnknown     = -2,
+        rcErrorStdExc = -1,
+        rcInvalid     = -99
+        // value > 0 means rc_t returned from a VDB-function
+        // zero shall not be returned
+    };
+
+    // This function must be called inside catch block only
+    // if bSilent == true then produce no output, only return ErrorHandlerCode
+    // pErrDesc and sizeErrDesc - the buffer to write error description to (NULL - OK)
+    int64_t HandleException ( bool bSilent, char* pErrDesc, size_t sizeErrDesc );
+}
+
+namespace VDBObjects
+{
+    /* functor to remove trailing '\n' from char reads */
+    template<typename T> class CPostReadAction
+    {
+        T* m_pBuf;
+        uint32_t m_nCount;
+    public:
+        CPostReadAction(T* pBuf, uint32_t nCount) : m_pBuf(pBuf), m_nCount(nCount) {}
+        void operator()() const;
+    };
+    template<typename T> inline void CPostReadAction<T>::operator()() const {}
+    template<> inline void CPostReadAction<char>::operator()() const { m_pBuf[m_nCount] = '\0'; }
+    template<> inline void CPostReadAction<unsigned char>::operator()() const { m_pBuf[m_nCount] = '\0'; }
+
+    class CVCursor;
+    class CVTable;
+    class CVDatabase;
+    class CVSchema;
+
+/////////////////////////////////////////////////////////////////////////////////
+
+    class CVDBManager
+    {
+    public:
+        CVDBManager();
+        ~CVDBManager();
+        CVDBManager(CVDBManager const& x);
+        CVDBManager& operator=(CVDBManager const& x);
+
+        void Make();
+        void Release();
+        CVDatabase OpenDB ( char const* pszDBName ) const;
+        CVDatabase CreateDB ( CVSchema const& schema, char const* pszTypeDesc, ::KCreateMode cmode, char const* pszPath );
+        CVSchema MakeSchema () const;
+
+    private:
+        ::VDBManager* m_pSelf;
+    };
+
+/////////////////////////////////////////////////////////////////////////////////
+
+    class CVSchema
+    {
+    public:
+        friend CVSchema CVDBManager::MakeSchema () const;
+        friend CVDatabase CVDBManager::CreateDB ( CVSchema const& schema, char const* pszTypeDesc, ::KCreateMode cmode, char const* pszPath );
+
+        CVSchema();
+        ~CVSchema();
+        CVSchema(CVSchema const& x);
+        CVSchema& operator=(CVSchema const& x);
+
+        void Make();
+        void Release();
+        void VSchemaParseFile(char const* pszFilePath);
+
+    private:
+        void Clone ( CVSchema const& x );
+        ::VSchema* m_pSelf;
+    };
+
+/////////////////////////////////////////////////////////////////////////////////
+
+    class CVDatabase
+    {
+    public:
+        friend CVDatabase CVDBManager::OpenDB ( char const* pszDBName ) const;
+        friend CVDatabase CVDBManager::CreateDB ( CVSchema const& schema, char const* pszTypeDesc, ::KCreateMode cmode, char const* pszPath );
+
+        CVDatabase();
+        ~CVDatabase();
+        CVDatabase(CVDatabase const& x);
+        CVDatabase& operator=(CVDatabase const& x);
+
+        void Release();
+        CVTable OpenTable ( char const* pszTableName ) const;
+        CVTable CreateTable ( char const* pszTableName );
+        void ColumnCreateParams ( ::KCreateMode cmode, ::KChecksum checksum, size_t pgsize );
+
+    private:
+        void Clone(CVDatabase const& x);
+        ::VDatabase* m_pSelf;
+    };
+
+//////////////////////////////////////////////////////////////
+
+    class CVTable
+    {
+    public:
+        friend CVTable CVDatabase::OpenTable(char const* pszTableName) const;
+        friend CVTable CVDatabase::CreateTable ( char const* pszTableName );
+
+        CVTable();
+        ~CVTable();
+        CVTable(CVTable const& x);
+        CVTable& operator=(CVTable const& x);
+
+        void Release();
+        CVCursor CreateCursorRead ( size_t cache_size ) const;
+        CVCursor CreateCursorWrite ( ::KCreateMode mode );
+
+    private:
+        void Clone(CVTable const& x);
+        ::VTable* m_pSelf;
+    };
+
+////////////////////////////////////////////////////////////////////////////
+
+    class CVCursor
+    {
+    public:
+        friend CVCursor CVTable::CreateCursorRead ( size_t cache_size ) const;
+        friend CVCursor CVTable::CreateCursorWrite (::KCreateMode mode);
+
+        CVCursor();
+        ~CVCursor();
+        CVCursor(CVCursor const& x);
+        CVCursor& operator=(CVCursor const& x);
+
+        void Release();
+        void PermitPostOpenAdd() const;
+#if MANAGER_WRITABLE != 0
+        void InitColumnIndex(char const* const* ColumnNames, uint32_t* pColumnIndex, size_t nCount, bool set_default);
+#else
+        void InitColumnIndex(char const* const* ColumnNames, uint32_t* pColumnIndex, size_t nCount);
+#endif
+        void Open() const;
+        void GetIdRange(int64_t& idFirstRow, uint64_t& nRowCount) const;
+
+        template <typename T> uint32_t ReadItems (int64_t idRow, uint32_t idxCol, T* pBuf, uint32_t nBufLen) const
+        {
+            uint32_t nItemsRead = 0;
+
+            rc_t rc = ::VCursorReadDirect(m_pSelf, idRow, idxCol, 8*sizeof(T), pBuf, nBufLen, &nItemsRead);
+            if (rc)
+                throw Utils::CErrorMsg(rc, "VCursorReadDirect: row_id=%ld, idxCol=%u", idRow, idxCol);
+
+            //CPostReadAction<T>(pBuf, nItemsRead)();
+
+            return nItemsRead;
+        }
+
+        template <typename T> void Write (uint32_t idxCol, T const* pBuf, uint64_t count)
+        {
+            rc_t rc = ::VCursorWrite ( m_pSelf, idxCol, 8 * sizeof(T), pBuf, 0, count );
+            if (rc)
+                throw Utils::CErrorMsg(rc, "VCursorWrite: idxCol=%u", idxCol);
+        }
+
+        int64_t GetRowId () const;
+        void SetRowId (int64_t row_id) const;
+        void OpenRow () const;
+        void CommitRow ();
+        void RepeatRow ( uint64_t count );
+        void CloseRow () const;
+        void Commit ();
+
+    private:
+        void Clone(CVCursor const& x);
+        ::VCursor* m_pSelf;
+    };
+}
+
+///////////////////////
+
+namespace KApp
+{
+    class CArgs;
+    class CXMLLogger
+    {
+    public:
+        CXMLLogger ( CArgs const& args );
+        CXMLLogger (CXMLLogger const& x);
+        CXMLLogger& operator= (CXMLLogger const& x);
+        ~CXMLLogger ();
+
+        void Make ( CArgs const& args );
+
+    private:
+        void Release ();
+
+        XMLLogger const* m_pSelf;
+    };
+
+/////////////////////////////////////////
+
+    class CArgs
+    {
+    public:
+        friend void CXMLLogger::Make ( CArgs const& args );
+
+        CArgs ( int argc, char** argv, ::OptDef const* pOptions, size_t option_count );
+        CArgs ( int argc, char** argv, ::OptDef const* pOptions1, size_t option_count1, ::OptDef const* pOptions2, size_t option_count2 );
+        CArgs ( CArgs const& x );
+        CArgs& operator= ( CArgs const& x );
+        ~CArgs ();
+
+        ::Args const* GetArgs () const;
+        uint32_t GetParamCount () const;
+        char const* GetParamValue ( uint32_t iteration ) const;
+        uint32_t GetOptionCount ( char const* option_name ) const;
+        char const* GetOptionValue ( char const* option_name, uint32_t iteration ) const;
+
+        template <typename T> T GetOptionValueInt ( char const* option_name, uint32_t iteration ) const
+        {
+            char const* str_val = GetOptionValue ( option_name, iteration );
+            return Utils::atoi_t <T> ( str_val );
+        }
+        template <typename T> T GetOptionValueUInt ( char const* option_name, uint32_t iteration ) const
+        {
+            char const* str_val = GetOptionValue ( option_name, iteration );
+            return Utils::atou_t <T> ( str_val );
+        }
+
+    private:
+
+        void MakeAndHandle ( int argc, char** argv, ::OptDef const* pOptions, size_t option_count );
+        // TODO: it's better to make ::ArgsMakeAndHandle be able to take va_list
+        void MakeAndHandle ( int argc, char** argv, ::OptDef const* pOptions1, size_t option_count1, ::OptDef const* pOptions2, size_t option_count2 );
+        void Release ();
+
+        ::Args* m_pSelf;
+    };
+
+    class CProgressBar
+    {
+    public:
+        CProgressBar ( uint64_t size );
+        CProgressBar ( CProgressBar const& x );
+        CProgressBar& operator= ( CProgressBar const& x );
+        ~CProgressBar ();
+
+        void Append ( uint64_t chunk );
+        void Process ( uint64_t chunk, bool force_report );
+
+    private:
+        void Make ( uint64_t size );
+        void Release ();
+
+        KLoadProgressbar const* m_pSelf;
+    };
+}
diff --git a/tools/align-info/Makefile b/tools/align-info/Makefile
new file mode 100644
index 0000000..b6d9fcd
--- /dev/null
+++ b/tools/align-info/Makefile
@@ -0,0 +1,76 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/align-info
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	align-info
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# align-info
+#
+ALIGN_INFO_SRC = \
+	align-info
+
+ALIGN_INFO_OBJ = \
+	$(addsuffix .$(OBJX),$(ALIGN_INFO_SRC))
+
+ALIGN_INFO_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/align-info: $(ALIGN_INFO_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(ALIGN_INFO_LIB)
diff --git a/tools/align-info/align-info.c b/tools/align-info/align-info.c
new file mode 100644
index 0000000..bba4cc1
--- /dev/null
+++ b/tools/align-info/align-info.c
@@ -0,0 +1,571 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/table.h> /* VTable */
+#include <vdb/schema.h> /* VSchema */
+#include <vdb/cursor.h> /* VCursor */
+#include <vdb/vdb-priv.h> /* VDBManagerOpenKDBManagerRead */
+
+#include <kapp/main.h>
+
+#include <kfg/config.h> /* KConfig */
+
+#include <kdb/manager.h> /* KDBManagerRelease */
+#include <kdb/namelist.h> /* KMDataNodeListChild */
+#include <kdb/meta.h> /* KMetadata */
+
+#include <klib/container.h> /* BSTree */
+#include <klib/sort.h> /* ksort */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/log.h> /* LOGERR */
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h> /* RC */
+
+#include <assert.h>
+#include <stdio.h> /* sscanf */
+#include <stdlib.h> /* free */
+#include <string.h> /* strcmp */
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
+#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+typedef struct Params {
+    const char* dbPath;
+
+    bool paramBamHeader;
+    bool paramQuality;
+    bool paramRef;
+
+    bool paramHeaders;
+} Params;
+
+#define ALIAS_ALL    "a"
+#define OPTION_ALL   "all"
+static const char* USAGE_ALL[] = { "print all information", NULL };
+
+#define ALIAS_BAM    "b"
+#define OPTION_BAM   "bam"
+static const char* USAGE_BAM[] = { "print bam header (if present)", NULL };
+
+#define ALIAS_QUA    "Q"
+#define OPTION_QUA   "qual"
+static const char* USAGE_QUA[]
+                       = { "print quality statistics (if present)", NULL };
+
+#define ALIAS_REF    "r"
+#define OPTION_REF   "ref"
+static const char* USAGE_REF[] = { "print refseq information [default]", NULL };
+
+#define ALIAS_HEA   "H"
+#define OPTION_HEA  "headers"
+static const char* USAGE_HEA[] = { "print headers for output blocks", NULL };
+
+OptDef Options[] =
+{
+      { OPTION_ALL, ALIAS_ALL, NULL, USAGE_ALL, 1, false, false }
+    , { OPTION_BAM, ALIAS_BAM, NULL, USAGE_BAM, 1, false, false }
+    , { OPTION_QUA, ALIAS_QUA, NULL, USAGE_QUA, 1, false, false }
+    , { OPTION_REF, ALIAS_REF, NULL, USAGE_REF, 1, false, false }
+    , { OPTION_HEA, ALIAS_HEA, NULL, USAGE_HEA, 1, false, false }
+};
+
+rc_t CC UsageSummary (const char * progname) {
+    return KOutMsg (
+        "Usage:\n"
+        "  %s [options] <db-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Print database alignment information\n"
+        "\n", progname);
+ }
+
+static const char* param_usage[] = { "Path to the database", NULL };
+
+rc_t CC Usage(const Args* args) { 
+    rc_t rc = 0 ;
+
+    const char* progname = UsageDefaultName;
+    const char* fullpath = UsageDefaultName;
+
+    if (args == NULL)
+    {    rc = RC(rcExe, rcArgv, rcAccessing, rcSelf, rcNull); }
+    else
+    {    rc = ArgsProgram(args, &fullpath, &progname); }
+
+    UsageSummary(progname);
+
+    KOutMsg("Parameters:\n");
+
+    HelpParamLine ("db-path", param_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_ALL, OPTION_ALL, NULL, USAGE_ALL);
+    HelpOptionLine (ALIAS_REF, OPTION_REF, NULL, USAGE_REF);
+    HelpOptionLine (ALIAS_BAM, OPTION_BAM, NULL, USAGE_BAM);
+    HelpOptionLine (ALIAS_QUA, OPTION_QUA, NULL, USAGE_QUA);
+    HelpOptionLine (ALIAS_HEA, OPTION_HEA, NULL, USAGE_HEA);
+
+    KOutMsg ("\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+const char UsageDefaultName[] = "align-info";
+
+static rc_t bam_header(const VDatabase* db) {
+    rc_t rc = 0;
+    const char path[] = "BAM_HEADER";
+    const KMetadata* meta = NULL;
+    const KMDataNode* node = NULL;
+    char* buffer = NULL;
+    assert(db);
+    if (rc == 0) {
+        rc = VDatabaseOpenMetadataRead(db, &meta);
+        DISP_RC(rc, "while calling VDatabaseOpenMetadataRead");
+    }
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", path);
+        if (GetRCState(rc) == rcNotFound)
+        {   rc = 0; }
+        else {
+            DISP_RC2(rc, path, "while calling KMetadataOpenNodeRead");
+            if (rc == 0) {
+                int i = 0;
+                size_t bsize = 0;
+                size_t size = 1024;
+                for (i = 0; i < 2; ++i) {
+                    free(buffer);
+                    bsize = size + 1;
+                    buffer = malloc(bsize);
+                    if (buffer == NULL) {
+                        rc = RC(rcExe, rcStorage, rcAllocating,
+                            rcMemory, rcExhausted);
+                    }
+                    else {
+                        rc = KMDataNodeReadCString(node, buffer, bsize, &size);
+                        if (rc == 0) {
+                            break;
+                        }
+                        else if (i == 0
+                            && GetRCObject(rc) == (enum RCObject)rcBuffer
+                            && GetRCState (rc) ==          rcInsufficient)
+                        {
+                            rc = 0;
+                        }
+                    }
+                    DISP_RC2(rc, path, "while calling KMDataNodeReadCString");
+                }
+            }
+        }
+    }
+    if (rc == 0 && buffer)
+    {   OUTMSG(("BAM_HEADER: {\n%s}\n\n", buffer)); }
+    DESTRUCT(KMDataNode, node);
+    DESTRUCT(KMetadata, meta);
+    free(buffer);
+    return rc;
+}
+
+static int64_t CC sort_callback(const void* p1, const void* p2, void* data) {
+    int i1 = *(int*) p1;
+    int i2 = *(int*) p2;
+    return i1 - i2;
+}
+static rc_t qual_stats(const Params* prm, const VDatabase* db) {
+    rc_t rc = 0;
+    const char tblName[] = "SEQUENCE";
+    const VTable* tbl = NULL;
+    const KMetadata* meta = NULL;
+    const KMDataNode* node = NULL;
+    assert(prm && db);
+    if (rc == 0) {
+        rc = VDatabaseOpenTableRead(db, &tbl, "%s", tblName);
+        DISP_RC2(rc, tblName, "while calling VDatabaseOpenTableRead");
+    }
+    if (rc == 0) {
+        rc = VTableOpenMetadataRead(tbl, &meta);
+        DISP_RC2(rc, tblName, "while calling VTableOpenMetadataRead");
+    }
+    if (rc == 0) {
+        bool found = false;
+        const char path[] = "STATS/QUALITY";
+        rc = KMetadataOpenNodeRead(meta, &node, path);
+        if (rc == 0)
+        {   found = true; }
+        else if (GetRCState(rc) == rcNotFound)
+        {   rc = 0; }
+        DISP_RC2(rc, path, "while calling KMetadataOpenNodeRead");
+        if (found) {
+            uint32_t i = 0;
+            int nbr = 0;
+            uint32_t count = 0;
+            KNamelist* names = NULL;
+            int* quals = NULL;
+            if (rc == 0) {
+                rc = KMDataNodeListChild(node, &names);
+                DISP_RC2(rc, path, "while calling KMDataNodeListChild");
+            }
+            if (rc == 0) {
+                rc = KNamelistCount(names, &count);
+                DISP_RC2(rc, path, "while calling KNamelistCount");
+                if (rc == 0 && count > 0) {
+                    quals = calloc(count, sizeof *quals);
+                    if (quals == NULL) {
+                        rc = RC(rcExe,
+                            rcStorage, rcAllocating, rcMemory, rcExhausted);
+                    }
+                }
+            }
+            for (i = 0; i < count && rc == 0; ++i) {
+             /* uint64_t u = 0;
+                const KMDataNode* n = NULL; */
+                const char* nodeName = NULL;
+                const char* name = NULL;
+                rc = KNamelistGet(names, i, &nodeName);
+                DISP_RC2(rc, path, "while calling KNamelistGet");
+                if (rc)
+                {   break; }
+                name = nodeName;
+             /* rc = KMDataNodeOpenNodeRead(node, &n, name);
+                DISP_RC(rc, name);
+                if (rc == 0) {
+                    rc = KMDataNodeReadAsU64(n, &u);
+                    DISP_RC(rc, name);
+                } */
+                if (rc == 0) {
+                    char* c = strchr(name, '_');
+                    if (c != NULL && *(c + 1) != '\0') {
+                        name = c + 1;
+                        if (sscanf(name, "%d", &quals[i]) != 1) {
+                            rc = RC(rcExe,
+                                rcNode, rcParsing, rcName, rcUnexpected);
+                            PLOGERR(klogInt,
+                                (klogInt, rc, "$(name)", "name=%s", nodeName));
+                        }
+                    }
+                    /* OUTMSG(("QUALITY %s %lu\n", name, u)); */
+                }
+             /* DESTRUCT(KMDataNode, n); */
+            }
+            if (rc == 0 && count > 0)
+            {   ksort(quals, count, sizeof *quals, sort_callback, NULL); }
+
+            if (rc == 0) {
+                if (prm->paramHeaders) {
+                    OUTMSG(("Quality statistics - rows per value\n"));
+                    OUTMSG(("Quality values:"));
+                    for (i = 0; i <= 40; ++i) {
+                        OUTMSG(("\t%d", i));
+                    }
+                    OUTMSG(("\n"));
+                }
+                OUTMSG(("%s", prm->dbPath));
+            }
+
+            for (i = 0, nbr = 0; i < count && rc == 0; ++i, ++nbr) {
+                uint64_t u = 0;
+                char name[64];
+                const KMDataNode* n = NULL;
+                sprintf(name, "PHRED_%d", quals[i]);
+                rc = KMDataNodeOpenNodeRead(node, &n, "%s", name);
+                DISP_RC(rc, name);
+                if (rc == 0) {
+                    rc = KMDataNodeReadAsU64(n, &u);
+                    DISP_RC(rc, name);
+                    if (rc == 0) {
+                        while (nbr < quals[i]) {
+                            OUTMSG(("\t0"));
+                            ++nbr;
+                        }
+                        OUTMSG(("\t%lu", u));
+                    /*  OUTMSG(("QUALITY %d %lu\n", quals[i], u)); */
+                    }
+                }
+                DESTRUCT(KMDataNode, n);
+            }
+            while (rc == 0 && nbr <= 40) {
+                OUTMSG(("\t0"));
+                nbr++;
+            }
+            if (rc == 0) {
+                OUTMSG(("\n"));
+            }
+            DESTRUCT(KNamelist, names);
+        }
+    }
+    DESTRUCT(KMDataNode, node);
+    DESTRUCT(KMetadata, meta);
+    DESTRUCT(VTable, tbl);
+    return rc;
+}
+
+static rc_t align_info(const Params* prm) {
+    rc_t rc = 0;
+
+    const VDatabase* db = NULL;
+    const VDBManager* mgr = NULL;
+    const KDBManager *kmgr = NULL;
+    VSchema* schema = NULL;
+    bool is_db = false;
+
+    if (prm == NULL)
+    {   return RC(rcExe, rcQuery, rcExecuting, rcParam, rcNull); }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeRead(&mgr, NULL);
+        DISP_RC(rc, "while calling VDBManagerMakeRead");
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerOpenKDBManagerRead(mgr, &kmgr);
+        DISP_RC(rc, "while calling VDBManagerOpenKDBManagerRead");
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeSRASchema(mgr, &schema);
+        DISP_RC(rc, "while calling VDBManagerMakeSRASchema");
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerOpenDBRead(mgr, &db, schema, "%s", prm->dbPath);
+        if (rc == 0) {
+            is_db = true;
+        }
+        else if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+            PLOGMSG(klogWarn, (klogWarn,
+                "'$(path)' is not a database", "path=%s", prm->dbPath));
+            rc = 0;
+        }
+        else {
+            PLOGERR(klogErr,
+                (klogErr, rc, "$(path)", "path=%s", prm->dbPath));
+        }
+    }
+
+    if (is_db) {
+        if (rc == 0) {
+            if (prm->paramRef) {
+                const VDBDependencies* dep = NULL;
+                uint32_t count = 0;
+                int i = 0;
+                if (prm->paramHeaders) {
+                    OUTMSG(("Alignments:\n"));
+                }
+                rc = VDatabaseListDependencies(db, &dep, false);
+                DISP_RC2(rc, prm->dbPath,
+                    "while calling VDatabaseListDependencies");
+                if (rc == 0) {
+                    rc = VDBDependenciesCount(dep, &count);
+                    DISP_RC2(rc, prm->dbPath,
+                        "while calling VDBDependenciesCount");
+                }
+                for (i = 0; i < count && rc == 0; ++i) {
+                    bool circular = false;
+                    const char* name = NULL;
+                    const char* path = NULL;
+                    const char* remote = NULL;
+                    bool local = false;
+                    const char* seqId = NULL;
+                    rc = VDBDependenciesCircular(dep, &circular, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesCircular");
+                        break;
+                    }
+                    rc = VDBDependenciesName(dep, &name, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesName");
+                        break;
+                    }
+                    rc = VDBDependenciesPath(dep, &path, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesPath");
+                        break;
+                    }
+                    rc = VDBDependenciesLocal(dep, &local, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesLocal");
+                        break;
+                    }
+                    rc = VDBDependenciesSeqId(dep, &seqId, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesSeqId");
+                        break;
+                    }
+                    rc = VDBDependenciesPathRemote(dep, &remote, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesRemote");
+                        break;
+                    }
+                    OUTMSG(("%s,%s,%s,%s", seqId, name,
+                        (circular ? "true" : "false"),
+                        (local ? "local" : "remote")));
+                    if (path && path[0]) {
+                        OUTMSG((":%s", path));
+                    }
+                    else if (remote && remote[0]) {
+                        OUTMSG(("::%s", remote));
+                    }
+                    OUTMSG(("\n"));
+                }
+                DESTRUCT(VDBDependencies, dep);
+                if (prm->paramHeaders) {
+                    OUTMSG(("\n"));
+                }
+            }
+
+            if (prm->paramBamHeader) {
+                rc_t rc3 = bam_header(db);
+                if (rc3 != 0 && rc == 0)
+                {   rc = rc3; }
+            }
+
+            if (prm->paramQuality) {
+                rc_t rc3 = qual_stats(prm, db);
+                if (rc3 != 0 && rc == 0)
+                {   rc = rc3; }
+            }
+        }
+
+    }
+
+    DESTRUCT(VSchema, schema);
+    DESTRUCT(KDBManager, kmgr);
+    DESTRUCT(VDBManager, mgr);
+    DESTRUCT(VDatabase, db);
+
+    return rc;
+}
+
+rc_t CC KMain(int argc, char* argv[]) {
+    rc_t rc = 0;
+    Args* args = NULL;
+
+    Params prm;
+    memset(&prm, 0, sizeof prm);
+
+    do {
+        uint32_t pcount = 0;
+
+        rc = ArgsMakeAndHandle(&args, argc, argv, 1,
+            Options, sizeof Options / sizeof (OptDef));
+        if (rc) {
+            LOGERR(klogErr, rc, "While calling ArgsMakeAndHandle");
+            break;
+        }
+        rc = ArgsParamCount(args, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "While calling ArgsParamCount");
+            break;
+        }
+        if (pcount < 1) {
+            MiniUsage(args);
+            DESTRUCT(Args, args);
+            exit(1);
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many database parameters");
+            break;
+        }
+        rc = ArgsParamValue(args, 0, (const void **)&prm.dbPath);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure retrieving database name");
+            break;
+        }
+
+        rc = ArgsOptionCount (args, OPTION_ALL, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument");
+            break;
+        }
+        if (pcount)
+        {   prm.paramBamHeader = prm.paramQuality = prm.paramRef = true; }
+
+        rc = ArgsOptionCount (args, OPTION_BAM, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_BAM "' argument");
+            break;
+        }
+        if (pcount)
+        {   prm.paramBamHeader = true; }
+
+        rc = ArgsOptionCount (args, OPTION_QUA, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_QUA "' argument");
+            break;
+        }
+        if (pcount)
+        {   prm.paramQuality = true; }
+
+        rc = ArgsOptionCount (args, OPTION_REF, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_REF "' argument");
+            break;
+        }
+        if (pcount)
+        {   prm.paramRef = true; }
+
+        if (!prm.paramBamHeader && !prm.paramQuality && !prm.paramRef)
+        {   prm.paramRef = true; }
+
+        rc = ArgsOptionCount (args, OPTION_HEA, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_HEA "' argument");
+            break;
+        }
+        if (pcount) {
+            prm.paramHeaders = true;
+        }
+    } while (false);
+
+    if (rc == 0)
+    {   rc = align_info(&prm); }
+
+    DESTRUCT(Args, args);
+    return rc;
+}
+
+/************************************* EOF ************************************/
diff --git a/tools/bam-loader/Globals.h b/tools/bam-loader/Globals.h
new file mode 100644
index 0000000..6031eaf
--- /dev/null
+++ b/tools/bam-loader/Globals.h
@@ -0,0 +1,93 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+enum LoaderModes {
+    mode_Archive,
+    mode_Remap
+};
+
+typedef struct globals
+{
+    char const *inpath;
+    char const *outpath;
+    char const *outname;
+    char const *firstOut;
+    char const *tmpfs;
+    
+    struct KFile *noMatchLog;
+    
+    char const *schemaPath;
+    char const *schemaIncludePath;
+    
+    char const *refXRefPath;
+    
+    char const *QualQuantizer;
+    
+    char const *refFilter;
+
+    char const** refFiles; /* NULL-terminated array pointing to argv */
+    
+    char const *headerText;
+    
+    uint64_t maxAlignCount;
+    size_t cache_size;
+
+    unsigned errCount;
+    unsigned maxErrCount;
+    unsigned maxWarnCount_NoMatch;
+    unsigned maxWarnCount_DupConflict;
+    unsigned pid;
+    unsigned minMatchCount; /* minimum number of matches to count as an alignment */
+    int minMapQual;
+    enum LoaderModes mode;
+    enum LoaderModes globalMode;
+    uint32_t maxSeqLen;
+    bool omit_aligned_reads;
+    bool omit_reference_reads;
+    bool no_real_output;
+    bool expectUnsorted;
+    bool requireSorted;
+    bool noVerifyReferences;
+    bool onlyVerifyReferences;
+    bool useQUAL;
+    bool limit2config;
+    bool editAlignedQual;
+    bool keepMismatchQual;
+    bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+    bool acceptNoMatch; /* accept without any matching bases */
+    bool noSpotAssembly;
+    uint8_t alignedQualValue;
+    bool allUnaligned; /* treat all records as unaligned */
+    bool noColorSpace;
+    bool noSecondary;
+    bool hasTI;
+    bool acceptHardClip;
+    bool allowMultiMapping; /* allow multiple reference names to map to the same real reference */
+    bool assembleWithSecondary;
+    bool deferSecondary;
+} Globals;
+
+extern Globals G;
diff --git a/tools/bam-loader/KFileHelper.c b/tools/bam-loader/KFileHelper.c
new file mode 100644
index 0000000..b9c65c0
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.c
@@ -0,0 +1,142 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KFileHelper.h"
+#include <string.h>
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm) {
+    unsigned i;
+    unsigned n;
+    int ch;
+    rc_t rc;
+    
+    do {
+        if (strm->cur != strm->inbuf) {
+            ch = strm->buf[strm->cur];
+            
+            if (ch == '\r' || ch == '\n')
+                ++strm->cur;
+            else
+                break;
+        }
+        else {
+            size_t numread;
+            
+            rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+            if (rc) return -1;
+            
+            strm->cur = 0;
+            strm->inbuf = numread;
+            strm->fpos += numread;
+            if (numread == 0) {
+                *nread = 0;
+                return 0;
+            }
+        }
+    } while (1);
+    
+    for (n = 0, i = offset; ; ++i, ++n) {
+        if (strm->cur != strm->inbuf) {
+            ch = strm->buf[strm->cur++];
+        }
+        else {
+            size_t numread;
+            
+            rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+            if (rc) return rc;
+            
+            strm->cur = 0;
+            strm->inbuf = numread;
+            if (numread == 0) break;
+            strm->fpos += numread;
+            ch = strm->buf[strm->cur++];
+        }
+        if (ch == '\r' || ch == '\n') break;
+        if (i >= buf->elem_count) {
+            rc = KDataBufferResize(buf, buf->elem_count ? buf->elem_count * 2 : 1024);
+            if (rc) return rc;
+        }
+        ((char *)buf->base)[i] = ch;
+    }
+    *nread = n;
+    return 0;
+}
+
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...) {
+    va_list va;
+    rc_t rc;
+
+    memset(rslt, 0, sizeof(rslt) - sizeof(rslt->buf));
+
+    va_start(va, fileName);
+    rc = KDirectoryVOpenFileRead(directory, &rslt->kfp, fileName, va);
+    va_end(va);
+    
+    return rc;
+}
+
+rc_t BufferedKFileClose(BufferedKFile *strm) {
+    return KFileRelease(strm->kfp);
+}
+
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...) {
+    BufferedKFile strm;
+    rc_t rc;
+    unsigned line = 0;
+
+    memset(&strm, 0, sizeof(strm) - sizeof(strm.buf));
+    {
+        va_list va;
+
+        va_start(va, fileName);
+        rc = KDirectoryVOpenFileRead(dir, &strm.kfp, fileName, va);
+        va_end(va);
+    }
+    if (rc == 0) {
+        unsigned offset = 0;
+        unsigned i;
+        
+        while ((rc = BufferedKFileGets(dst, offset, &i, &strm)) == 0 && i) {
+            offset += i;
+            if (offset + 1 >= dst->elem_count) {
+                rc = KDataBufferResize(dst, offset + 1);
+                if (rc)
+                    break;
+            }
+            ((char *)dst->base)[offset++] = '\0';
+            ++line;
+        }
+        BufferedKFileClose(&strm);
+        if (rc == 0)
+            rc = KDataBufferResize(dst, offset);
+    }
+    if (rc != 0) {
+        KDataBufferResize(dst, 0);
+        line = 0;
+    }
+    if (lineCount) *lineCount = line;
+    return rc;
+}
diff --git a/tools/bam-loader/KFileHelper.h b/tools/bam-loader/KFileHelper.h
new file mode 100644
index 0000000..4551952
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_KFILEHELPER_H_
+#define BAM_LOAD_KFILEHELPER_H_ 1
+#include <klib/data-buffer.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+typedef struct BufferedKFile BufferedKFile;
+
+#define KFILE_BUF_SIZE (4096)
+struct BufferedKFile {
+    uint64_t fpos;
+    const KFile *kfp;
+    unsigned inbuf;
+    unsigned cur;
+    char buf[KFILE_BUF_SIZE];
+};
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm);
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...);
+rc_t BufferedKFileClose(BufferedKFile *strm);
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...);
+#endif
diff --git a/tools/bam-loader/KVPFile.c b/tools/bam-loader/KVPFile.c
new file mode 100644
index 0000000..1ab2326
--- /dev/null
+++ b/tools/bam-loader/KVPFile.c
@@ -0,0 +1,355 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KVPFile.h"
+
+#include <kfs/file.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define USE_KDB_BTREE 1
+
+#if USE_KDB_BTREE
+#include <kdb/btree.h>
+#else
+#include "hashtable.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
+
+
+#if USE_KDB_BTREE
+
+/* going to make an index with:                                                                        
+ *  a) backing file                                                                                     
+ *  b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere             
+ *  c) page cache - need cache limit in bytes                                                           
+ *  d) 2 chunked value streams - need key chunking and value chunking                                   
+ *  e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.              
+ *     the "matched-count" parameter is useful for trie traversal, but this will be built-in            
+ */
+rc_t KVPFileMake ( KVPFile **rslt, KFile *file, size_t climit,
+    size_t kchunk_size, size_t vchunk_size,
+    size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+    KVPFileCompareFunc cmp )
+{
+    return KBTreeMakeUpdate ( ( KBTree** ) rslt, file, climit, false, kbtOpaqueKey,
+        kchunk_size, vchunk_size, min_ksize, max_ksize, min_vsize, max_vsize, cmp );
+}
+
+
+/* this whacker works fine
+ */
+rc_t KVPFileWhack ( KVPFile *xself, bool commit )
+{
+    KBTree *self = ( KBTree* ) xself;
+
+    rc_t rc = 0;
+
+    if ( self != NULL )
+    {
+        /* drop the backing file unless commiting */
+        if ( ! commit )
+            rc = KBTreeDropBacking ( self );
+
+        /* drop the b-tree */
+        rc = KBTreeRelease ( self );
+    }
+
+    return rc;
+}
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self )
+{
+    KBTreeValueWhack ( self );
+}
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes )
+{
+    return KBTreeValueAccessRead ( self, mem, bytes );
+}
+
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes )
+{
+    return KBTreeValueAccessUpdate ( self, mem, bytes );
+}
+
+
+/* find will not modify the index in any way
+ *  returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ *  this is done
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize )
+{
+    return KBTreeFind ( ( const KBTree* ) self, val, key, ksize );
+}
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+                          bool *was_inserted, size_t alloc_size,
+                          const void *key, size_t ksize )
+{
+    return KBTreeEntry ( ( KBTree* ) self, val, was_inserted, alloc_size, key, ksize );
+}
+
+rc_t KVPFileForEach ( const KVPFile *self,
+                      void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+                      void *ctx )
+{
+    return KBTreeForEach((KBTree *)self, 0, f, ctx);
+}
+
+
+#else
+typedef struct KTempMMap {
+    void *base;
+    size_t sz;
+    int fd;
+    unsigned elemsize;
+    unsigned fileNo;
+} KTempMMap;
+
+static rc_t KTempMMapMake(KTempMMap *rslt, size_t initSize, size_t elemSize)
+{
+    char fname[4096];
+    
+    memset(rslt, 0, sizeof(*rslt));
+    rslt->elemsize = elemSize;
+    
+    sprintf(fname, "/tmp/kvp.%u.XXXXXX", getpid());
+    rslt->fd = mkstemp(fname);
+    if (rslt->fd < 0) {
+        perror(fname);
+        return RC(rcApp, rcFile, rcCreating, rcFile, rcUnknown);
+    }    
+    unlink(fname);
+
+    if (ftruncate(rslt->fd, initSize * elemSize) != 0)
+        return RC(rcApp, rcFile, rcResizing, rcFile, rcUnknown);
+    
+    rslt->sz = initSize;
+    
+    rslt->base = mmap(0, initSize * elemSize, PROT_READ | PROT_WRITE, MAP_SHARED, rslt->fd, 0);
+    if (rslt->base == MAP_FAILED)
+        return RC(rcApp, rcMemMap, rcCreating, rcMemory, rcInsufficient);
+    
+    return 0;
+}
+
+static rc_t KTempMMapWhack(KTempMMap *self)
+{
+    close(self->fd);
+    madvise(self->base, self->sz, MADV_DONTNEED);
+    munmap(self->base, self->sz);
+    return 0;
+}
+
+static void *KTempMMapPointer(KTempMMap *self, size_t offset, size_t count)
+{
+    void *temp;
+    size_t newsz;
+    
+    if (offset + count <= self->sz)
+        return &((uint8_t *)self->base)[offset * self->elemsize];
+
+    newsz = self->sz;
+    while (newsz < offset + count)
+        newsz <<= 1;
+    
+    if (ftruncate(self->fd, newsz * self->elemsize) != 0)
+        return NULL;
+
+    temp = mmap(0, newsz * self->elemsize, PROT_READ | PROT_WRITE, MAP_SHARED, self->fd, 0);
+    if (temp == MAP_FAILED)
+        return NULL;
+    
+    munmap(self->base, self->sz);
+    self->base = temp;
+    self->sz = newsz;
+    
+    return &((uint8_t *)self->base)[offset * self->elemsize];
+}
+
+typedef struct key_t {
+    uint8_t len;
+    char key[255];
+} my_key_t;
+
+struct KVPFile {
+    HashTable *ht;
+    size_t next_obj;
+    KTempMMap keys;
+    KTempMMap values;
+};
+
+typedef struct KVPValueImpl KVPValueImpl;
+struct KVPValueImpl
+{
+    KVPFile * file;
+    size_t offset;
+    size_t size;
+};
+
+static int KeyComp(const void *id, const void *key, uint32_t len, void *ctx)
+{
+    KVPFile *self = ctx;
+    const my_key_t *test = KTempMMapPointer(&self->keys, (intptr_t)id, 1);
+    int r = memcmp(test->key, key, test->len < len ? test->len : len);
+    if (r == 0)
+        r = test->len - len;
+    return r;
+}
+
+rc_t KVPFileMake(KVPFile **rslt,
+                 KFile *file,
+                 size_t climit,
+                 size_t kchunk_size, size_t vchunk_size,
+                 size_t min_ksize, size_t max_ksize,
+                 size_t min_vsize, size_t max_vsize,
+                 KVPFileCompareFunc cmp
+                 )
+{
+    rc_t rc;
+    KVPFile *self = calloc(1, sizeof(*self));
+    
+    if (self == NULL)
+        return RC(rcApp, rcMemMap, rcAllocating, rcMemory, rcExhausted);
+    
+    rc = KTempMMapMake(&self->keys, 256, sizeof(my_key_t));
+    if (rc == 0) {
+        rc = KTempMMapMake(&self->values, 256, max_vsize);
+        if (rc == 0) {
+            rc = HashTableMake(&self->ht, 256, KeyComp, self);
+            if (rc == 0) {
+                *rslt = self;
+                return 0;
+            }
+            KTempMMapWhack(&self->values);
+        }
+        KTempMMapWhack(&self->keys);
+    }
+    free(self);
+    return rc;
+}
+
+rc_t KVPFileWhack(KVPFile *self, bool commit)
+{
+    if (self) {
+        KTempMMapWhack(&self->values);
+        KTempMMapWhack(&self->keys);
+        HashTableWhack(self->ht, 0, 0);
+        free(self);
+    }
+    return 0;
+}
+
+rc_t KVPFileFind(const KVPFile *self, KVPValue *xval, const void *key, size_t ksize)
+{
+    KVPValueImpl *val = ( KVPValueImpl* ) xval;
+    const HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+    if (HashTableIteratorHasValue(&iter)) {
+        val->file = (void *)self;
+        val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+        val->size = 1;
+        return 0;
+    }
+    return RC(rcApp, rcMemMap, rcReading, rcId, rcNotFound);
+}
+
+rc_t KVPFileFindOrInsert(KVPFile *self, KVPValue *xval,
+                         bool *was_inserted, size_t alloc_size,
+                         const void *key, size_t ksize
+                         )
+{
+    KVPValueImpl *val = ( KVPValueImpl* ) xval;
+    HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+    
+    if (HashTableIteratorHasValue(&iter)) {
+        val->file = (void *)self;
+        val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+        val->size = 1;
+        *was_inserted = false;
+        return 0;
+    }
+    else {
+        size_t new_id = self->next_obj++;
+        my_key_t *new_key = KTempMMapPointer(&self->keys, new_id, 1);
+        
+        new_key->len = ksize;
+        memmove(new_key->key, key, ksize);
+        
+        *was_inserted = true;
+        val->file = (void *)self;
+        val->offset = new_id;
+        val->size = 1;
+        HashTableIteratorSetValue(&iter, (void *)(val->offset));
+    }
+    return 0;
+}
+
+static rc_t KVPValueAccess(const KVPValueImpl *value, void **mem, size_t *bytes)
+{
+    KVPFile *self = value->file;
+    void *temp = KTempMMapPointer(&self->values, value->offset, value->size);
+    
+    if (temp != NULL) {
+        *bytes = self->values.elemsize * value->size;
+        *mem = temp;
+        return 0;
+    }
+    *bytes = 0;
+    *mem = NULL;
+    return RC(rcApp, rcMemMap, rcReading, rcMemory, rcNotFound);
+}
+
+rc_t KVPValueAccessRead(const KVPValue *self, const void **mem, size_t *bytes)
+{
+    return KVPValueAccess((const KVPValueImpl*)self, (void **)mem, bytes);
+}
+
+rc_t KVPValueAccessUpdate(KVPValue *self, void **mem, size_t *bytes)
+{
+    return KVPValueAccess((KVPValueImpl*)self, mem, bytes);
+}
+
+void KVPValueWhack(KVPValue *self)
+{
+}
+
+#endif /* USE_KDB_BTREE */
diff --git a/tools/bam-loader/KVPFile.h b/tools/bam-loader/KVPFile.h
new file mode 100644
index 0000000..01de157
--- /dev/null
+++ b/tools/bam-loader/KVPFile.h
@@ -0,0 +1,164 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_KVPFile_
+#define _h_KVPFile_
+
+#ifndef _h_kdb_btree_
+#include <kdb/btree.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* this can be made to work as we go forward
+ */
+typedef struct KVPFile KVPFile;
+
+
+/* generic comparison function
+ *  size_t indicates bytes
+ */
+typedef KBTreeCompareFunc KVPFileCompareFunc;
+
+
+/* going to make an index with:                                                                        
+ *  a) backing file                                                                                     
+ *  b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere             
+ *  c) page cache - need cache limit in bytes                                                           
+ *  d) 2 chunked value streams - need key chunking and value chunking                                   
+ *  e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.              
+ *     the "matched-count" parameter is useful for trie traversal, but this will be built-in            
+ *                                                                                                      
+ *  "rslt" [ OUT ] - return of Ken's object                                                             
+ *                                                                                                      
+ *  "file" [ IN ] - open file with read/write permissions.                                              
+ *   NB - a reference will be attached to this file, so you still own it                                
+ *                                                                                                      
+ *  "climit" [ IN ] - cache limit in bytes. the internal page cache will                                
+ *   retain UP TO ( but not exceeding ) the limit specified. for 32K pages,                             
+ *   this means than the byte values 0..0x7FFF will result in NO CACHE.                                 
+ *   internally, this limit is converted to a page count by simple division,                            
+ *   i.e. cpage-limit = climit / PGSIZE.                                                                
+ *                                                                                                      
+ *  "kchunk_size" [ IN ] and "vchunk_size" [ IN ] - the "chunking" ( alignment )                        
+ *   factor for storing keys and values, respectively. rounded up to the nearest                        
+ *   power of 2 that will hold the bytes specified.                                                     
+ *                                                                                                      
+ *  "min_ksize" [ IN ] and "max_ksize" [ IN ] - specifies the allowed key sizes. if                     
+ *   unknown, a min of 1 and a max of ~ ( size_t ) 0 will allow for any size. if fixed,                 
+ *   min_ksize == max_ksize will indicate this, and the size will be used exactly as                    
+ *   chunking factor ( see "kchunk_size" above ).                                                       
+ *                                                                                                      
+ *  "min_vsize" [ IN ] and "max_vsize" [ IN ] - specifies allowed value sizes. see above.               
+ *                                                                                                      
+ *  "cmp" [ IN ] - comparison callback function for opaque keys. later, we'll want to                   
+ *   make use of key type knowledge to improve traversal ( callbacks are expensive ), but               
+ *   for now, we can treat them as opaque.                                                              
+ */
+rc_t KVPFileMake ( KVPFile **rslt, struct KFile *file, size_t climit,
+                  size_t kchunk_size, size_t vchunk_size,
+                  size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+                  KVPFileCompareFunc cmp );
+
+
+
+/* this whacker works fine
+ *
+ * "commit" [ IN ] - if false, tells the underlying pagefile
+ *  to forget its backing before whacking the cache.
+ */
+rc_t KVPFileWhack ( KVPFile *self, bool commit );
+
+
+/* results point directly into pages, and thus require a reference
+ * I'm going to invent a structure to use and some functions - the
+ * structure itself may change, but we should be able to make it work
+ *
+ * it will be an defined structure, although it may be defined simply as
+ * an array of 3 size_t to make it opaque. if it were made an allocation,
+ * then we'd have to have a special allocator in order to keep the noise
+ * down. maybe that's the way to go, but it means more code. for now,...
+ */
+typedef struct KBTreeValue KVPValue;
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self );
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes );
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes );
+
+
+/* find will not modify the index in any way
+ *  returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ *  this is done
+ *
+ *  "val" [ OUT ] - pointer to an uninitialized block that will contain
+ *   information on how to access data within a page. note that the value
+ *   is "live", and if accessed for update will cause the page to be modified.
+ *   it is not clear whether this is desired or side-effect behavior, so I'm
+ *   leaving it alone for now.
+ *
+ *  "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize );
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ *
+ *  "val" [ OUT ] - pointer to uninitialized block that will contain value data.
+ *   since the intention is to modify the value, access to val will most certainly
+ *   be via "KVPValueAccessUpdate" which will dirty the page regardless.
+ *
+ *  "was_inserted" [ OUT ] - if true, the returned value was the result of an
+ *   insertion and can be guaranteed to be all 0 bits. otherwise, the returned
+ *   value will be whatever was there previously.
+ *
+ *  "alloc_size" [ IN ] - the number of value bytes to allocate upon insertion,
+ *   i.e. if the key was not found. this value must agree with the limits specified
+ *   in Make.
+ *
+ *  "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+                          bool *was_inserted, size_t alloc_size,
+                          const void *key, size_t ksize );
+
+rc_t KVPFileForEach ( const KVPFile *self,
+    void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+    void *ctx);
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_KVPFile_ */
diff --git a/tools/bam-loader/Makefile b/tools/bam-loader/Makefile
new file mode 100644
index 0000000..deb525a
--- /dev/null
+++ b/tools/bam-loader/Makefile
@@ -0,0 +1,111 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/bam-loader
+
+INT_TOOLS = \
+	samview
+
+EXT_TOOLS = \
+	bam-load 
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (win,$(OS))
+all std:
+	@ echo "not building bam-load under Windows"
+else
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+endif
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# bam-load
+#
+BAMLOAD_SRC = \
+	bam-loader \
+	bam \
+	alignment-writer \
+	reference-writer \
+	sequence-writer \
+	loader-imp \
+	mem-bank \
+	low-match-count
+
+BAMLOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(BAMLOAD_SRC))
+
+BAMLOAD_LIB = \
+	-lkapp \
+	-stk-version \
+	-lload \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/bam-load: $(BAMLOAD_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(BAMLOAD_LIB)
+
+
+#-------------------------------------------------------------------------------
+# samview
+#
+SAMVIEW_SRC = \
+	bam \
+	samview
+
+SAMVIEW_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMVIEW_SRC))
+
+SAMVIEW_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/samview: $(SAMVIEW_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SAMVIEW_LIB)
+
diff --git a/tools/bam-loader/alignment-writer.c b/tools/bam-loader/alignment-writer.c
new file mode 100644
index 0000000..6e93b7f
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.c
@@ -0,0 +1,267 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <sysalloc.h>
+#include <klib/out.h>
+
+#include <vdb/vdb-priv.h>
+
+#include "alignment-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+enum e_tables {
+    tblPrimary,
+    tblSecondary,
+    tblN
+};
+
+struct s_alignment {
+    VDatabase *db;
+    TableWriterAlgn const *tbl[tblN];
+    int64_t rowId;
+    int st;
+};
+
+Alignment *AlignmentMake(VDatabase *db) {
+    Alignment *self = calloc(1, sizeof(*self));
+    
+    if (self) {
+        self->db = db;
+        VDatabaseAddRef(self->db);
+    }
+    return self;
+}
+
+static rc_t SetColumnDefaults(TableWriterAlgn const *tbl)
+{
+    return 0;
+}
+
+static rc_t WritePrimaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    if (self->tbl[tblPrimary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblPrimary], self->db,
+                                       ewalgn_tabletype_PrimaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblPrimary]);
+        if (rc)
+            return rc;
+    }
+    return TableWriterAlgn_Write(self->tbl[tblPrimary], &data->data, &data->alignId);
+}
+
+static rc_t WriteSecondaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    if (self->tbl[tblSecondary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblSecondary], self->db,
+                                       ewalgn_tabletype_SecondaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblSecondary]);
+        if (rc)
+            return rc;
+    }
+#if 1
+    /* try to make consistent with cg-load */
+    if (data->mate_ref_pos == 0) {
+        data->data.mate_ref_orientation.elements = 0;
+    }
+#endif
+    return TableWriterAlgn_Write(self->tbl[tblSecondary], &data->data, &data->alignId);
+}
+
+rc_t AlignmentWriteRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    return data->isPrimary ? WritePrimaryRecord(self, data) : WriteSecondaryRecord(self, data);
+}
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *const self)
+{
+    return 0;
+}
+
+rc_t AlignmentGetSpotKey(Alignment *const self, uint64_t * keyId)
+{
+    rc_t rc;
+    
+    switch (self->st) {
+    case 0:
+        if (self->tbl[tblPrimary]) {
+            rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblPrimary]);
+            if (rc)
+                break;
+        }
+        self->rowId = 0;
+        ++self->st;
+    case 1:
+        if (self->tbl[tblPrimary]) {
+            rc = TableWriterAlgn_TmpKey(self->tbl[tblPrimary], ++self->rowId, keyId);
+            if (rc == 0)
+                break;
+            ++self->st;
+            if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow || self->tbl[tblSecondary] == NULL)
+                break;
+        }
+        else
+            ++self->st;
+    case 2:
+        rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblSecondary]);
+        if (rc)
+            break;
+        self->rowId = 0;
+        ++self->st;
+    case 3:
+        rc = TableWriterAlgn_TmpKey(self->tbl[tblSecondary], ++self->rowId, keyId);
+        if (rc == 0)
+            break;
+        if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow)
+            break;
+        ++self->st;
+        break;
+    default:
+        rc = RC(rcAlign, rcTable, rcUpdating, rcError, rcIgnored);
+        break;
+    }
+    return rc;
+}
+
+rc_t AlignmentWriteSpotId(Alignment * const self, int64_t const spotId)
+{
+    switch (self->st) {
+    case 1:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblPrimary], self->rowId, spotId);
+    case 3:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblSecondary], self->rowId, spotId);
+    default:
+        return RC(rcAlign, rcTable, rcUpdating, rcSelf, rcInconsistent);
+    }
+}
+
+rc_t AlignmentWhack(Alignment * const self, bool const commit) 
+{
+    rc_t const rc = self->tbl[tblPrimary] ? TableWriterAlgn_Whack(self->tbl[tblPrimary], commit, NULL) : 0;
+    rc_t const rc2 = self->tbl[tblSecondary] ? TableWriterAlgn_Whack(self->tbl[tblSecondary], commit | (rc == 0), NULL) : 0;
+
+    VDatabaseRelease(self->db);
+    free(self);
+    return rc ? rc : rc2;
+}
+
+static size_t LayoutStorage(void *const buffer, unsigned const readlen,
+                            void const **const p_ref_offset,
+                            void const **const p_ref_offset_type,
+                            void const **const p_mismatch,
+                            void const **const p_has_ref_offset,
+                            void const **const p_has_mismatch
+                            )
+{
+    int32_t *const ref_offset = buffer;
+    uint8_t *const ref_offset_type = (uint8_t *)&ref_offset[readlen];
+    char *const mismatch = (char *)&ref_offset_type[readlen];
+    bool *const has_ref_offset = (bool *)&mismatch[readlen];
+    bool *const has_mismatch   = (bool *)&has_ref_offset[readlen];
+    void *const endp = &has_mismatch[readlen];
+
+    if (p_ref_offset     ) *p_ref_offset      = ref_offset;
+    if (p_ref_offset_type) *p_ref_offset_type = ref_offset_type;
+    if (p_mismatch       ) *p_mismatch        = mismatch;
+    if (p_has_ref_offset ) *p_has_ref_offset  = has_ref_offset;
+    if (p_has_mismatch   ) *p_has_mismatch    = has_mismatch;
+    
+    return (char const *)endp - (char const *)buffer;
+}
+
+rc_t AlignmentRecordInit(AlignmentRecord *const self, unsigned const readlen)
+{
+    KDataBuffer buffer = self->buffer;
+
+    buffer.elem_bits = 8;
+    {
+        size_t const need = LayoutStorage(0, readlen, 0, 0, 0, 0, 0);
+        rc_t const rc = KDataBufferResize(&buffer, need);
+        if (rc) return rc;
+    }
+    memset(self, 0, sizeof(*self));
+    self->buffer = buffer;
+    
+    self->data.seq_read_id.buffer = &self->read_id;
+    self->data.seq_read_id.elements = 1;
+    self->data.ref_id.buffer = &self->ref_id;
+    self->data.ref_id.elements = 1;
+    if (G.expectUnsorted) {
+        self->data.ref_start.buffer = &self->ref_start;
+        self->data.ref_start.elements = 1;
+    }
+    else {
+        self->data.global_ref_start.buffer = &self->global_ref_start;
+        self->data.global_ref_start.elements = 1;
+    }
+    self->data.ref_orientation.buffer = &self->ref_orientation;
+    self->data.ref_orientation.elements = 1;
+    self->data.mapq.buffer = &self->mapq;
+    self->data.mapq.elements = 1;
+    self->data.tmp_key_id.buffer = &self->tmp_key_id;
+    self->data.tmp_key_id.elements = 1;
+    
+    self->data.read_start.buffer = &self->read_start;
+    self->data.read_start.elements = 1;
+    self->data.read_len.buffer = &self->read_len;
+    self->data.read_len.elements = 1;
+    
+    self->data.mate_ref_orientation.buffer = &self->mate_ref_orientation;
+    self->data.mate_ref_orientation.elements = 1;
+    self->data.mate_ref_id.buffer = &self->mate_ref_id;
+    self->data.mate_ref_id.elements = 1;
+    self->data.mate_ref_pos.buffer = &self->mate_ref_pos;
+    self->data.mate_ref_pos.elements = 1;
+    self->data.mate_align_id.buffer = &self->mate_align_id;
+    self->data.mate_align_id.elements = 1;
+    self->data.template_len.buffer = &self->template_len;
+    self->data.template_len.elements = 1;
+
+    LayoutStorage(buffer.base, readlen,
+                  &self->data.ref_offset.buffer,
+                  &self->data.ref_offset_type.buffer,
+                  &self->data.mismatch.buffer,
+                  &self->data.has_ref_offset.buffer,
+                  &self->data.has_mismatch.buffer);
+
+    self->data.has_mismatch.elements = readlen;
+    self->data.has_ref_offset.elements = readlen;
+    
+    return 0;
+}
diff --git a/tools/bam-loader/alignment-writer.h b/tools/bam-loader/alignment-writer.h
new file mode 100644
index 0000000..bdbfcfa
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.h
@@ -0,0 +1,101 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ALIGNMENT_WRITER_H_
+#define BAM_LOAD_ALIGNMENT_WRITER_H_ 1
+
+#include <klib/data-buffer.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <insdc/insdc.h>
+
+#include <align/writer-alignment.h>
+
+typedef struct s_alignment Alignment;
+typedef struct AlignmentRecord AlignmentRecord;
+
+struct AlignmentRecord {
+    KDataBuffer buffer;
+    TableWriterAlgnData data;
+    int64_t alignId;
+    bool isPrimary;
+
+    INSDC_coord_one read_id;
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    uint64_t global_ref_start;
+    bool ref_orientation;
+    uint32_t mapq;
+    uint64_t tmp_key_id;
+
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+
+    bool mate_ref_orientation;
+    int64_t mate_ref_id;
+    INSDC_coord_zero mate_ref_pos;
+    int64_t mate_align_id;
+    int32_t template_len;
+};
+
+#define AR_REF_ID(X) ((X).ref_id)
+#define AR_REF_START(X) ((X).global_ref_start)
+#define AR_REF_LEN(X) ((X).ref_len)
+#define AR_REF_ORIENT(X) ((X).ref_orientation)
+#define AR_READNO(X) ((X).read_id)
+#define AR_MAPQ(X) ((X).mapq)
+#define AR_KEY(X) ((X).tmp_key_id)
+
+#define AR_BASECOUNT(X) ((X).data.has_mismatch.elements)
+#define AR_HAS_MISMATCH(X) ((bool *)((X).data.has_mismatch.buffer))
+#define AR_HAS_OFFSET(X) ((bool *)((X).data.has_ref_offset.buffer))
+
+#define AR_NUM_MISMATCH(X) ((X).data.mismatch.elements)
+#define AR_MISMATCH(X) ((char *)((X).data.mismatch.buffer))
+
+#define AR_NUM_OFFSET(X) ((X).data.ref_offset.elements)
+#define AR_OFFSET(X) ((INSDC_coord_zero *)((X).data.ref_offset.buffer))
+#define AR_OFFSET_TYPE(X) ((uint8_t *)((X).data.ref_offset_type.buffer))
+
+#define AR_LINKAGE_GROUP(X) ((X).data.linkageGroup)
+
+Alignment *AlignmentMake(VDatabase *db);
+
+rc_t AlignmentWriteRecord(Alignment *self, AlignmentRecord *data);
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *self);
+
+rc_t AlignmentGetSpotKey(Alignment *self, uint64_t *keyId);
+
+rc_t AlignmentWriteSpotId(Alignment *self, int64_t spotId);
+
+rc_t AlignmentWhack(Alignment *self, bool commit);
+
+rc_t AlignmentRecordInit(AlignmentRecord *self, unsigned readlen);
+
+#endif
diff --git a/tools/bam-loader/analysis.c b/tools/bam-loader/analysis.c
new file mode 100644
index 0000000..2fa0168
--- /dev/null
+++ b/tools/bam-loader/analysis.c
@@ -0,0 +1,157 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include "KFileHelper.h"
+#include "analysis.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static rc_t ParseAnalysis(Analysis *rslt, unsigned lines, char *src) {
+    unsigned i;
+    
+    rslt->N = lines;
+    memset(&rslt->line[0], 0, lines * sizeof(rslt->line[0]));
+    
+    for (i = 0; i != lines; ++i) {
+        char *endp;
+        char *tab;
+        
+        endp = strchr(src, 0);
+        assert(endp);
+        
+        rslt->line[i].name = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        rslt->line[i].refID = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        
+        rslt->line[i].bamFile = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        rslt->line[i].asoFile = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        tab[0] = '\0';
+        
+        src = endp + 1;
+    }
+    for (i = 0; i != lines; ++i) {
+        if (rslt->line[i].name == NULL ||
+            rslt->line[i].refID == NULL ||
+            rslt->line[i].bamFile == NULL ||
+            rslt->line[i].asoFile == NULL
+            )
+        {
+            return RC(rcApp, rcFile, rcReading, rcData, rcCorrupt);
+        }
+    }
+    return 0;
+}
+
+static int CC CompAnalysisLineBamFile(const void *A, const void *B, void *ignore) {
+    const AnalysisLine *a = A;
+    const AnalysisLine *b = B;
+    int rslt = strcmp(a->bamFile, b->bamFile);
+    
+    if (rslt == 0)
+        rslt = strcmp(a->name, b->name);
+    return rslt;
+}
+
+const char *AnalysisNextBAMFile(const char *last) {
+    unsigned i;
+    if (last == NULL) {
+        return G.analysis->line[0].bamFile;
+    }
+    for (i = 1; i < G.analysis->N; ++i) {
+        if (strcmp(last, G.analysis->line[i].bamFile) > 0) {
+            return G.analysis->line[i].bamFile;
+        }
+    }
+    return NULL;
+}
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name) {
+    unsigned i;
+    
+    for (i = 0; i != G.analysis->N; ++i) {
+        if (strcmp(bamFile, G.analysis->line[i].bamFile) == 0 &&
+            strcmp(name, G.analysis->line[i].name) == 0
+            )
+        {
+            return &G.analysis->line[i];
+        }
+    }
+    return NULL;
+}
+
+rc_t LoadAnalysis(const char *fileName) {
+    rc_t rc;
+    KDataBuffer buf;
+    uint64_t lines;
+    
+    memset(&buf, 0, sizeof(buf));
+    buf.elem_bits = 8;
+    
+    rc = LoadFile(&buf, &lines, G.inDir, fileName);
+    if (rc == 0) {
+        if (lines > 0 && buf.elem_count > 0) {
+            G.analysis = malloc(sizeof(*G.analysis) + (lines - 1) * sizeof(G.analysis->line[0]) + buf.elem_count);
+            if (G.analysis)
+                memmove(&G.analysis->line[lines], buf.base, buf.elem_count);
+            else
+                rc = RC(rcApp, rcFile, rcReading, rcMemory, rcExhausted);
+        }
+        else
+            rc = RC(rcApp, rcFile, rcReading, rcData, rcEmpty);
+    }
+    KDataBufferWhack(&buf);
+    if (rc == 0) {
+        rc = ParseAnalysis(G.analysis, lines, (char *)&G.analysis->line[lines]);
+    }
+    return rc;
+}
+
diff --git a/tools/bam-loader/analysis.h b/tools/bam-loader/analysis.h
new file mode 100644
index 0000000..766a652
--- /dev/null
+++ b/tools/bam-loader/analysis.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ANALYSIS_H_
+#define BAM_LOAD_ANALYSIS_H_ 1
+#include <klib/rc.h>
+
+typedef struct s_analysis_line {
+    const char *name;
+    const char *refID;
+    const char *bamFile;
+    const char *asoFile;
+    uint64_t    startPos;
+} AnalysisLine;
+
+typedef struct s_analysis {
+    unsigned N;
+    AnalysisLine line[1];
+} Analysis;
+
+const char *AnalysisNextBAMFile(const char *last);
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name);
+
+rc_t LoadAnalysis(const char *fileName);
+#endif
diff --git a/tools/bam-loader/bam-alignment.h b/tools/bam-loader/bam-alignment.h
new file mode 100644
index 0000000..14aae6d
--- /dev/null
+++ b/tools/bam-loader/bam-alignment.h
@@ -0,0 +1,74 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct bam_alignment_s {
+    uint8_t rID[4];
+    uint8_t pos[4];
+    uint8_t read_name_len;
+    uint8_t mapQual;
+    uint8_t bin[2];
+    uint8_t n_cigars[2];
+    uint8_t flags[2];
+    uint8_t read_len[4];
+    uint8_t mate_rID[4];
+    uint8_t mate_pos[4];
+    uint8_t ins_size[4];
+    char read_name[1 /* read_name_len */];
+/* if you change length of read_name,
+ * adjust calculation of offsets in BAM_AlignmentSetOffsets */
+/*  uint32_t cigar[n_cigars];
+ *  uint8_t seq[(read_len + 1) / 2];
+ *  uint8_t qual[read_len];
+ *  uint8_t extra[...];
+ */
+};
+
+typedef union bam_alignment_u {
+    struct bam_alignment_s cooked;
+    uint8_t raw[sizeof(struct bam_alignment_s)];
+} bam_alignment;
+
+struct offset_size_s {
+    unsigned offset;
+    unsigned size; /* this is the total length of the tag; length of data is size - 3 */
+};
+
+struct BAM_Alignment {
+    struct BAM_File *parent;
+    bam_alignment const *data;
+    uint8_t *storage;
+
+	uint64_t keyId;
+	bool wasInserted;
+
+    unsigned datasize;
+    unsigned cigar;
+    unsigned seq;
+    unsigned qual;
+    unsigned numExtra;
+    unsigned hasColor;
+    struct offset_size_s extra[1];
+};
diff --git a/tools/bam-loader/bam-loader.c b/tools/bam-loader/bam-loader.c
new file mode 100644
index 0000000..fdb95d4
--- /dev/null
+++ b/tools/bam-loader/bam-loader.c
@@ -0,0 +1,1270 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "Globals.h"
+#include "loader-imp.h"
+
+/*: ARGS
+Summary:
+	Load a BAM formatted data file
+
+Usage:
+    --help                          display this text and quit
+    --version                       display the version string and quit
+    [global-options] [options] <file...> [ --remap [options] <file>... ]...
+
+//:global-options
+Global Options:
+
+* options effecting logging
+  log-level <level>                 logging level values: [fatal|sys|int|err|warn|info|0-5] default: info
+  xml-log <filename>                produce an XML-formatted log file
+
+* options effecting performance optimisation
+  tmpfs <directory>                 where to store temparary files, default: '/tmp'
+  cache-size <mbytes>               the limit in MB for temparary files
+
+* options effecting error limits
+  max-err-count <number>            the maximum number of errors to ignore
+  max-warning-dup-flag <count>      the limit for number of duplicate flag mismatch warnings
+
+//:options
+Options:
+  output <name>                     name of the output, required
+  config <file>                     reference configuration file (See Configuration)
+  header <file>                     file containing the SAM header
+  remap                             special option to enable processing sets of remapped files. remap MUST be given between each set, all regular options can be respecified, in fact the output must be unique for each set. This is for when a set of reads are aligned multiple times, for example against different reference builds or with different aligners. This mode ensures that spot ids are the same across the several outputs.
+
+Debugging Options:
+  only-verify                       exit after verifying existence of references
+  max-rec-count <number>            exit after processing this many records (per file)
+  nomatch-log <path>                log alignments with no matching bases
+
+Filtering Options:
+  minimum-match <number>            minimum number of matches for an alignment
+  no-secondary                      ignore alignments marked as secondary
+  accept-dups                       accept spots with inconsistent PCR duplicate flags
+  accept-nomatch                    accept alignments with no matching bases
+  ref-config                        limit processing to references in the config file, ignoring all others
+  ref-filter <name>                 limit processing to the given reference, ignoring all others
+  min-mapq <number>                 filter secondary alignments by minimum mapping quality
+
+Rare or Esoteric Options:
+  input <directory>                 where to find fasta files
+  ref-file <file>                   fasta file with references
+  unsorted                          expect unsorted input (requires more memory)
+  sorted                            require sorted input
+  TI                                look for trace id optional tag
+  unaligned <file>                  file without aligned reads
+
+Deprecated Options:
+  use-OQ                            use OQ option column for quality values instead of QUAL
+  no-verify                         skip verify existence of references from the BAM file
+  accept-hard-clip                  allow hard clipping in CIGAR
+  allow-multi-map                   allow the same reference to be mapped to multiple names in the input files
+  edit-aligned-qual <number>        convert quality at aligned positions to this value
+  cs                                turn on awareness of colorspace
+  qual-quant                        quality scores quantization level
+  keep-mismatch-qual                don't quantized quality at mismatched positions
+
+
+Example:
+    bam-load -o /tmp/SRZ123456 -k analysis.bam.cfg 123456.bam
+*/
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_config[] = "config";
+static char const option_min_mapq[] = "min-mapq";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_unsorted[] = "unsorted";
+static char const option_sorted[] = "sorted";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_no_verify[] = "no-verify";
+static char const option_only_verify[] = "only-verify";
+static char const option_use_qual[] = "use-QUAL";
+static char const option_ref_filter[] = "ref-filter";
+static char const option_ref_config[] = "ref-config";
+static char const option_edit_aligned_qual[] = "edit-aligned-qual";
+static char const option_unaligned[] = "unaligned";
+static char const option_accept_dup[] = "accept-dups";
+static char const option_accept_nomatch[] = "accept-nomatch";
+static char const option_nomatch_log[] = "nomatch-log";
+static char const option_keep_mismatch_qual[] = "keep-mismatch-qual";
+static char const option_min_match[] = "minimum-match";
+static char const option_header[] = "header";
+static char const option_no_cs[] = "no-cs";
+static char const option_no_secondary[] = "no-secondary";
+static char const option_ref_file[] = "ref-file";
+static char const option_TI[] = "TI";
+static char const option_max_warn_dup_flag[] = "max-warning-dup-flag";
+static char const option_accept_hard_clip[] = "accept-hard-clip";
+static char const option_allow_multi_map[] = "allow-multi-map";
+static char const option_allow_secondary[] = "make-spots-with-secondary";
+static char const option_defer_secondary[] = "defer-secondary";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_CONFIG option_config
+#define OPTION_MINMAPQ option_min_mapq
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_UNALIGNED option_unaligned
+#define OPTION_ACCEPT_DUP option_accept_dup
+#define OPTION_ACCEPT_NOMATCH option_accept_nomatch
+#define OPTION_NOMATCH_LOG option_nomatch_log
+#define OPTION_MIN_MATCH option_min_match
+#define OPTION_HEADER option_header
+#define OPTION_NO_CS option_no_cs
+#define OPTION_NO_SECONDARY option_no_secondary
+#define OPTION_REF_FILE option_ref_file
+#define OPTION_TI option_TI
+#define OPTION_MAX_WARN_DUP_FLAG option_max_warn_dup_flag
+#define OPTION_ACCEPT_HARD_CLIP option_accept_hard_clip
+#define OPTION_ALLOW_MULTI_MAP option_allow_multi_map
+#define OPTION_ALLOW_SECONDARY option_allow_secondary
+#define OPTION_DEFER_SECONDARY option_defer_secondary
+
+#define ALIAS_INPUT  "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_CONFIG "k"
+#define ALIAS_MINMAPQ "q"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_UNALIGNED "u"
+#define ALIAS_ACCEPT_DUP "d"
+#define ALIAS_NO_SECONDARY "P"
+#define ALIAS_REF_FILE "r"
+
+static
+char const * input_usage[] = 
+{
+    "Path where to get fasta files from.",
+    NULL
+};
+
+static
+char const * output_usage[] = 
+{
+    "Path and Name of the output database.",
+    NULL
+};
+
+static
+char const * tmpfs_usage[] = 
+{
+    "Path to be used for scratch files.",
+    NULL
+};
+
+static
+char const * config_usage[] = 
+{
+    "Path to configuration file:",
+    "maps the input BAM file's reference names to the equivalent GenBank accession.",
+    "It is a tab-delimited text file with unix line endings (\\n - LF) with the following fields in this order:",
+    "#1 reference name as it occurs in the BAM file's SN field of @SQ header record;",
+    "#2 INSDC reference ID",
+    NULL
+};
+
+static
+char const * min_mapq_usage[] = 
+{
+    "Filter secondary alignments by minimum mapping quality.",
+    NULL
+};
+
+static
+char const * qcomp_usage[] = 
+{
+    "Quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1) (nb. the endpoint is exclusive).",
+    NULL
+};
+
+static
+char const * unsorted_usage[] = 
+{
+    "Tell the loader to expect unsorted input (requires more memory)",
+    NULL
+};
+
+static
+char const * sorted_usage[] =
+{
+    "Tell the loader to require sorted input",
+    NULL
+};
+
+static
+char const * cache_size_usage[] = 
+{
+    "Set the cache size in MB for the temporary indices",
+    NULL
+};
+
+static
+char const * mrc_usage[] = 
+{
+    "Set the maximum number of records to process from the BAM file",
+    NULL
+};
+
+static
+char const * mec_usage[] = 
+{
+    "Set the maximum number of errors to ignore from the BAM file",
+    NULL
+};
+
+static
+char const * no_verify_usage[] = 
+{
+    "Skip verify existence of references from the BAM file",
+    NULL
+};
+
+static
+char const * only_verify_usage[] = 
+{
+    "Exit after verifying existence of references from the BAM file",
+    NULL
+};
+
+static
+char const * use_QUAL_usage[] = 
+{
+    "use QUAL column for quality values (default is to use OQ if it is available)",
+    NULL
+};
+
+static
+char const * use_ref_filter[] = 
+{
+    "Only process alignments to the given reference",
+    NULL
+};
+
+static
+char const * use_ref_config[] = 
+{
+    "Only process alignments to references in the config file",
+    NULL
+};
+
+static
+char const * use_edit_aligned_qual[] = 
+{
+    "Convert quality at aligned positions to this value",
+    NULL
+};
+
+static
+char const * use_keep_mismatch_qual[] = 
+{
+    "Don't quantized quality at mismatched positions",
+    NULL
+};
+
+static
+char const * use_unaligned[] = 
+{
+    "Specify file without aligned reads",
+    NULL
+};
+
+static
+char const * use_accept_dups[] = 
+{
+    "Accept spots inconsistent PCR duplicate flags",
+    NULL
+};
+
+static
+char const * use_accept_nomatch[] = 
+{
+    "Accept alignments with no matching bases",
+    NULL
+};
+
+static
+char const * use_nomatch_log[] = 
+{
+    "Where to write info for alignments with no matching bases",
+    NULL
+};
+
+static
+char const * use_min_match[] = 
+{
+    "minimum number of matches for an alignment",
+    NULL
+};
+
+static
+char const * use_header[] = 
+{
+    "path to a file containing the SAM header to store in the resulting cSRA, recommended in case of multiple input BAMs",
+    NULL
+};
+
+static
+char const * use_no_cs[] = 
+{
+    "turn off awareness of colorspace",
+    NULL
+};
+
+static
+char const * use_no_secondary[] = 
+{
+    "ignore alignments marked as secondary",
+    NULL
+};
+
+static
+char const * use_ref_file[] = 
+{
+    "path to a fasta file with references",
+    NULL
+};
+
+static
+char const * use_TI[] = 
+{
+    "for trace alignments",
+    NULL
+};
+
+static
+char const * use_max_dup_warnings[] = 
+{
+    "set limit for number of duplicate flag mismatch warnings",
+    NULL
+};
+
+static
+char const * use_accept_hard_clip[] = 
+{
+    "accept hard clipping in CIGAR",
+    NULL
+};
+
+static
+char const * use_allow_multi_map[] =
+{
+    "allow the same reference to be mapped to multiple names in the input files",
+    "(default is disallow, old behaviors was to allow it)",
+    NULL
+};
+
+static
+char const * use_allow_secondary[] =
+{
+    "use secondary alignments for constructing spots",
+    NULL
+};
+
+static
+char const * use_defer_secondary[] =
+{
+    "defer processing of secondary alignments until the end of the file",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */
+    { OPTION_INPUT, ALIAS_INPUT,  NULL,  input_usage, 1, true,  false },
+    { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true,  true },
+    { OPTION_CONFIG, ALIAS_CONFIG,  NULL,  config_usage, 1, true, false },
+    { OPTION_HEADER, NULL, NULL, use_header, 1, true, false },
+    { OPTION_TMPFS, ALIAS_TMPFS, NULL, tmpfs_usage, 1, true,  false },
+    { OPTION_UNALIGNED, ALIAS_UNALIGNED, NULL, use_unaligned, 256, true, false },
+    { OPTION_ACCEPT_DUP, ALIAS_ACCEPT_DUP, NULL, use_accept_dups, 1, false, false },
+    { OPTION_ACCEPT_NOMATCH, NULL, NULL, use_accept_nomatch, 1, false, false },
+    { OPTION_NOMATCH_LOG, NULL, NULL, use_nomatch_log, 1, true, false },
+    { OPTION_QCOMP, ALIAS_QCOMP, NULL, qcomp_usage, 1, true,  false },
+    { OPTION_MINMAPQ, ALIAS_MINMAPQ, NULL, min_mapq_usage, 1, true,  false },
+    { OPTION_CACHE_SIZE, NULL, NULL, cache_size_usage, 1, true,  false },
+    { OPTION_NO_CS, NULL, NULL, use_no_cs, 1, false,  false },
+    { OPTION_MIN_MATCH, NULL, NULL, use_min_match, 1, true, false },
+    { OPTION_NO_SECONDARY, ALIAS_NO_SECONDARY, NULL, use_no_secondary, 1, false, false },
+    { option_unsorted, NULL, NULL, unsorted_usage, 1, false,  false },
+    { option_sorted, NULL, NULL, sorted_usage, 1, false,  false },
+    { option_no_verify, NULL, NULL, no_verify_usage, 1, false,  false },
+    { option_only_verify, NULL, NULL, only_verify_usage, 1, false,  false },
+    { option_use_qual, NULL, NULL, use_QUAL_usage, 1, false,  false },
+    { option_ref_config, NULL, NULL, use_ref_config, 1, false,  false },
+    { option_ref_filter, NULL, NULL, use_ref_filter, 1, true,  false },
+    { option_edit_aligned_qual, NULL, NULL, use_edit_aligned_qual, 1, true, false },
+    { option_keep_mismatch_qual, NULL, NULL, use_keep_mismatch_qual, 1, false,  false },
+    { OPTION_MAX_REC_COUNT, NULL, NULL, mrc_usage, 1, true,  false },
+    { OPTION_MAX_ERR_COUNT, ALIAS_MAX_ERR_COUNT, NULL, mec_usage, 1, true,  false },
+    { OPTION_REF_FILE, ALIAS_REF_FILE, NULL, use_ref_file, 0, true, false },
+    { OPTION_TI, NULL, NULL, use_TI, 1, false, false },
+    { OPTION_MAX_WARN_DUP_FLAG, NULL, NULL, use_max_dup_warnings, 1, true, false },
+    { OPTION_ACCEPT_HARD_CLIP, NULL, NULL, use_accept_hard_clip, 1, false, false },
+    { OPTION_ALLOW_MULTI_MAP, NULL, NULL, use_allow_multi_map, 1, false, false },
+    { OPTION_ALLOW_SECONDARY, NULL, NULL, use_allow_secondary, 1, false, false },
+    { OPTION_DEFER_SECONDARY, NULL, NULL, use_defer_secondary, 1, false, false }
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path",				/* input */
+    "path",				/* output */
+    "path-to-file",		/* config */
+    "path-to-file",		/* header */
+    "path",				/* tmpfs */
+    "path-to-file",		/* unaligned */
+    NULL,				/* accept dups */
+    NULL,				/* accept no-match */
+    "path-to-file",		/* no-match log */
+    "level",			/* quality compression */
+    "phred-score",		/* min. mapq */
+    "mbytes",			/* cache size */
+    NULL,				/* no colorspace */
+    "count",			/* min. match count */
+    NULL,				/* no secondary */
+    NULL,				/* unsorted */
+    NULL,				/* sorted */
+    NULL,				/* no verify ref's */
+    NULL,				/* quit after verify ref's */
+    NULL,				/* force QUAL */
+    NULL,				/* ref's from config */
+    "name",				/* only this ref */
+    "new-value",		/* value for aligned qualities */
+    NULL,				/* no quantize mismatch qualities */
+    "number",			/* max. record count to process */
+    "number",			/* max. error count */
+    "path-to-file",		/* reference fasta file */
+    NULL,				/* use XT->TI */
+    "count",			/* max. duplicate warning count */
+    NULL,				/* allow hard clipping */
+    NULL,				/* allow multimapping */
+    NULL,				/* allow secondary */
+    NULL				/* defer secondary */
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] <bam-file>\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad a BAM formatted data file\n"
+        "\n"
+        "Example:\n"
+        "\t%s -o /tmp/SRZ123456 -k analysis.bam.cfg 123456.bam\n"
+        "\n"
+        ,progname, progname);
+}
+
+char const UsageDefaultName[] = "bam-load";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    int i;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    for(i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+Globals G;
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+    G.pid = getpid();
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+    size_t const plen = strlen(path);
+    bool const hasBase = base && base[0];
+    bool const isBareName = strchr(path, '/') == NULL;
+    
+    if (isBareName && hasBase) {
+        if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+            return 0;
+    }
+    else if (plen < sz) {
+        strncpy(rslt, path, sz);
+        return 0;
+    }
+    {
+        rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+        (void)LOGERR(klogErr, rc, "The path to the file is too long");
+        return rc;
+    }
+}
+
+static rc_t OpenFile(KFile const **kf, char const path[], char const base[])
+{
+    char fname[4096];
+    rc_t rc = PathWithBasePath(fname, sizeof(fname), path, base);
+    
+    if (rc == 0) {
+        KDirectory *dir;
+        
+        rc = KDirectoryNativeDir(&dir);
+        if (rc == 0) {
+            rc = KDirectoryOpenFileRead(dir, kf, "%s", fname);
+            KDirectoryRelease(dir);
+        }
+    }
+    return rc;
+}
+
+static rc_t LoadHeader(char const **rslt, char const path[], char const base[])
+{
+    KFile const *kf;
+    rc_t rc = OpenFile(&kf, path, base);
+    
+    *rslt = NULL;
+    if (rc == 0) {
+        uint64_t fsize;
+        rc = KFileSize(kf, &fsize);
+        if (rc == 0) {
+            char *fdata = malloc(fsize+1);
+            
+            if (fdata) {
+                size_t nread;
+                rc = KFileRead(kf, 0, fdata, fsize, &nread);
+                if (rc == 0) {
+                    if (nread) {
+                        fdata[nread] = '\0';
+                        *rslt = fdata;
+                    }
+                    else {
+                        free(fdata);
+                        rc = RC(rcApp, rcArgv, rcAccessing, rcFile, rcEmpty);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' is empty", "file=%s", path));
+                    }
+                }
+                else {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+                }
+            }
+            else {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+            }
+        }
+        KFileRelease(kf);
+    }
+    else {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open file '$(file)'", "file=%s", path));
+    }
+    return rc;
+}
+
+static rc_t main_help_vers(int argc, char * argv[])
+{
+    Args *args = NULL;
+    rc_t const rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+        sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+    ArgsWhack(args);
+    return rc;
+}
+
+static rc_t getArgValue(Args *const args, char const *name, int index, char const **result)
+{
+    void const *value;
+    rc_t const rc = ArgsOptionValue(args, name, index, &value);
+    if (rc) return rc;
+    free((void *)*result);
+    *result = strdup(value);
+    assert(*result);
+    return 0;
+}
+
+static rc_t main_1(int argc, char *argv[], bool const continuing, unsigned const load)
+{
+    Args *args;
+    rc_t rc;
+    unsigned n_aligned = 0;
+    unsigned n_unalgnd = 0;
+    char *aligned[256];
+    char *unalgnd[256];
+    char *name_buffer = NULL;
+    unsigned next_name = 0;
+    unsigned nbsz = 0;
+    char const *value;
+    char *dummy;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof(Options)/sizeof(Options[0]));
+    while (rc == 0) {
+        uint32_t pcount;
+
+        rc = ArgsOptionCount(args, option_only_verify, &pcount);
+        if (rc)
+            break;
+        G.onlyVerifyReferences |= (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_no_verify, &pcount);
+        if (rc)
+            break;
+        G.noVerifyReferences |= (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_use_qual, &pcount);
+        if (rc)
+            break;
+        G.useQUAL |= (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_ref_config, &pcount);
+        if (rc)
+            break;
+        G.limit2config |= (pcount > 0);
+        
+        rc = ArgsOptionCount(args, OPTION_REF_FILE, &pcount);
+        if (rc)
+            break;
+        if (pcount && G.refFiles) {
+            int i;
+
+            for (i = 0; G.refFiles[i]; ++i)
+                free((void *)G.refFiles[i]);
+            free((void *)G.refFiles);
+        }
+        G.refFiles = calloc(pcount + 1, sizeof(*(G.refFiles)));
+        if (!G.refFiles) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        while(pcount-- > 0) {
+            rc = getArgValue(args, OPTION_REF_FILE, pcount, &G.refFiles[pcount]);
+            if (rc)
+                break;
+        }
+
+        rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, OPTION_TMPFS, 0, &G.tmpfs);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_INPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, OPTION_INPUT, 0, &G.inpath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single input parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, option_ref_filter, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, option_ref_filter, 0, &G.refFilter);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CONFIG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, OPTION_CONFIG, 0, &G.refXRefPath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single input parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, OPTION_OUTPUT, 0, &G.outpath);
+            if (rc)
+                break;
+            if (load == 0) {
+                G.firstOut = strdup(G.outpath);
+            }
+            value = strrchr(G.outpath, '/');
+            G.outname = value ? (value + 1) : G.outpath;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        else if (!G.onlyVerifyReferences) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            OUTMSG (("Output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MINMAPQ, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue(args, OPTION_MINMAPQ, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.minMapQual = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = getArgValue(args, OPTION_QCOMP, 0, &G.QualQuantizer);
+            if (rc)
+                break;
+        }
+
+        rc = ArgsOptionCount (args, option_edit_aligned_qual, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, option_edit_aligned_qual, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.alignedQualValue = strtoul(value, &dummy, 0);
+            if (G.alignedQualValue == 0) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("edit-aligned-qual: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+            G.editAlignedQual = true;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+            if (G.cache_size == 0) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("cache-size: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_WARN_DUP_FLAG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_WARN_DUP_FLAG, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxWarnCount_DupConflict = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, option_unsorted, &pcount);
+        if (rc)
+            break;
+        G.expectUnsorted |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, option_sorted, &pcount);
+        if (rc)
+            break;
+        G.requireSorted |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxAlignCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxErrCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MIN_MATCH, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MIN_MATCH, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.minMatchCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_DUP, &pcount);
+        if (rc)
+            break;
+        G.acceptBadDups |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_NOMATCH, &pcount);
+        if (rc)
+            break;
+        G.acceptNoMatch |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, option_keep_mismatch_qual, &pcount);
+        if (rc)
+            break;
+        G.keepMismatchQual |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_NO_CS, &pcount);
+        if (rc)
+            break;
+        G.noColorSpace |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_NO_SECONDARY, &pcount);
+        if (rc)
+            break;
+        G.noSecondary |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_TI, &pcount);
+        if (rc)
+            break;
+        G.hasTI |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_HARD_CLIP, &pcount);
+        if (rc)
+            break;
+        G.acceptHardClip |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_ALLOW_MULTI_MAP, &pcount);
+        if (rc)
+            break;
+        G.allowMultiMapping |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_ALLOW_SECONDARY, &pcount);
+        if (rc)
+            break;
+        G.assembleWithSecondary |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_DEFER_SECONDARY, &pcount);
+        if (rc)
+            break;
+        G.deferSecondary |= (pcount > 0);
+        
+        rc = ArgsOptionCount (args, OPTION_NOMATCH_LOG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            KDirectory *dir;
+            
+            rc = ArgsOptionValue (args, OPTION_NOMATCH_LOG, 0, (const void **)&value);
+            if (rc) break;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc) break;
+            rc = KDirectoryCreateFile(dir, &G.noMatchLog, 0, 0664, kcmInit, "%s", value);
+            KDirectoryRelease(dir);
+            if (rc) break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_HEADER, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1) {
+            rc = ArgsOptionValue (args, OPTION_HEADER, 0, (const void **)&value);
+            if (rc) break;
+            free((void *)G.headerText);
+            rc = LoadHeader(&G.headerText, value, G.inpath);
+            if (rc) break;
+        }
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc) break;
+        if (pcount == 0)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            MiniUsage (args);
+            break;
+        }
+        else if (pcount > sizeof(aligned)/sizeof(aligned[0])) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+                        "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(aligned)/sizeof(aligned[0]))));
+            break;
+        }
+        else {
+            unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, (const void **)&value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            nbsz = need;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+        if (rc)
+            break;
+        if (pcount > 0)
+        {
+            unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, (const void **)&value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            if (rc) break;
+            nbsz += need;
+        }
+        
+        name_buffer = malloc(nbsz);
+        if (name_buffer == NULL) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, (const void **)&value);
+                if (rc) break;
+                
+                unalgnd[n_unalgnd++] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+            if (rc) break;
+        }
+        else
+            break;
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, (const void **)&value);
+                if (rc) break;
+                
+                aligned[n_aligned++] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+        }
+        else
+            break;
+
+        rc = run(argv[0], n_aligned, (char const **)aligned, n_unalgnd, (char const **)unalgnd, continuing);
+        break;
+    }
+    free(name_buffer);
+
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+                "severity=total,status=failure,accession=%s,errors=%u", G.outname, G.errCount));
+    } else {
+        (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s,errors=%u", G.outname, G.errCount));
+    }
+    ArgsWhack(args);
+    return rc;
+}
+
+static void cleanupGlobal(void)
+{
+    if (G.refFiles) {
+        int i;
+
+        for (i = 0; G.refFiles[i]; ++i)
+            free((void *)G.refFiles[i]);
+        free((void *)G.refFiles);
+    }
+    free((void *)G.tmpfs);
+    free((void *)G.inpath);
+    free((void *)G.refFilter);
+    free((void *)G.refXRefPath);
+    free((void *)G.outpath);
+    free((void *)G.firstOut);
+    free((void *)G.headerText);
+    free((void *)G.QualQuantizer);
+    free((void *)G.schemaPath);
+}
+
+static int find_arg(char const *const *const query, int const first, int const argc, char **const argv)
+{
+    int i;
+
+    for (i = first; i < argc; ++i) {
+        int j;
+
+        for (j = 0; query[j] != NULL; ++j) {
+            if (strcmp(argv[i], query[j]) == 0)
+                return i;
+        }
+    }
+    return 0;
+}
+
+static bool has_arg(char const *const *const query, int const argc, char **const argv)
+{
+    return find_arg(query, 1, argc, argv) > 0;
+}
+
+static const char *logger_options[] = { "--xml-log-fd", "--xml-log", "-z" };
+static XMLLogger const *make_logger(int *argc, char *argv[])
+{
+    XMLLogger const *rslt = NULL;
+    char *argf[4];
+    int i;
+
+    argf[0] = argv[0];
+    argf[1] = NULL;
+    argf[2] = NULL;
+    argf[3] = NULL;
+
+    for (i = 1; i < *argc; ++i) {
+        int remove = 0;
+
+        if (strcmp(argv[i], logger_options[2]) == 0) {
+            argf[1] = argv[i];
+            argf[2] = argv[i + 1];
+            remove = 2;
+        }
+        else {
+            int j;
+
+            for (j = 0; j < 2; ++j) {
+                if (strstr(argv[i], logger_options[j]) == argv[i]) {
+                    int const n = strlen(logger_options[j]);
+
+                    if (argv[i][n] == '\0') {
+                        argf[1] = argv[i];
+                        argf[2] = argv[i + 1];
+                        remove = 2;
+                    }
+                    else if (argv[i][n] == '=') {
+                        argv[i][n] = '\0';
+                        argf[1] = argv[i];
+                        argf[2] = argv[i] + n + 1;
+                        remove = 1;
+                    }
+                    break;
+                }
+            }
+        }
+        if (argf[1] != NULL) {
+            Args *args = NULL;
+
+            ArgsMakeAndHandle(&args, 3, argf, 1, XMLLogger_Args, XMLLogger_ArgsQty);
+            if (args) {
+                XMLLogger_Make(&rslt, NULL, args);
+                ArgsWhack(args);
+            }
+        }
+        if (remove) {
+            *argc -= remove;
+            memmove(argv + i, argv + i + remove, (*argc + 1) * sizeof(argv[0]));
+            break;
+        }
+    }
+    return rslt;
+}
+
+rc_t CC KMain(int argc, char *argv[])
+{
+    static const char *help[] = { "--help", "-h", "-?", NULL };
+    static const char *vers[] = { "--version", "-V", NULL };
+
+    bool const has_help = has_arg(help, argc, argv);
+    bool const has_vers = has_arg(vers, argc, argv);
+    XMLLogger const *logger = NULL;
+    int argfirst = 0;
+    int arglast = 0;
+    rc_t rc = 0;
+    unsigned load = 0;
+
+    if (has_help) {
+        argc = 2;
+        argv[1] = "--help";
+        return main_help_vers(argc, argv);
+    }
+    if (has_vers) {
+        argc = 2;
+        argv[1] = "--version";
+        return main_help_vers(argc, argv);
+    }
+
+    logger = make_logger(&argc, argv);
+
+    memset(&G, 0, sizeof(G));
+    G.mode = mode_Archive;
+    G.globalMode = mode_Archive;
+    G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+    G.schemaPath = strdup(SCHEMAFILE);
+    G.omit_aligned_reads = true;
+    G.omit_reference_reads = true;
+    G.minMapQual = 0; /* accept all */
+    G.tmpfs = strdup("/tmp");
+    G.cache_size = ((size_t)16) << 30;
+    G.maxErrCount = 1000;
+    G.minMatchCount = 10;
+    
+    set_pid();
+
+    for (arglast = 1; arglast < argc; ++arglast) {
+        if (strcmp(argv[arglast], "--remap") == 0) {
+            argv[arglast] = argv[0];
+            G.globalMode = mode_Remap;
+            rc = main_1(arglast - argfirst, argv + argfirst, true, load);
+            if (rc)
+                break;
+            G.mode = mode_Remap;
+            argfirst = arglast;
+            ++load;
+        }
+    }
+    rc = main_1(arglast - argfirst, argv + argfirst, false, load);
+    XMLLogger_Release(logger);
+    cleanupGlobal();
+    return rc;
+}
diff --git a/tools/bam-loader/bam-priv.h b/tools/bam-loader/bam-priv.h
new file mode 100644
index 0000000..c813922
--- /dev/null
+++ b/tools/bam-loader/bam-priv.h
@@ -0,0 +1,196 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "bam.h"
+#include "bam-alignment.h"
+
+typedef struct BAMIndex BAMIndex;
+typedef struct BufferedFile BufferedFile;
+typedef struct SAMFile SAMFile;
+typedef struct BGZFile BGZFile;
+
+#define ZLIB_BLOCK_SIZE  (64u * 1024u)
+#define RGLR_BUFFER_SIZE (16u * ZLIB_BLOCK_SIZE)
+#define PIPE_BUFFER_SIZE (4096u)
+
+typedef uint8_t zlib_block_t[ZLIB_BLOCK_SIZE];
+
+typedef struct RawFile_vt_s {
+    rc_t (*FileRead)(void *, zlib_block_t, unsigned *);
+    uint64_t (*FileGetPos)(void const *);
+    float (*FileProPos)(void const *);
+    uint64_t (*FileGetSize)(void const *);
+    rc_t (*FileSetPos)(void *, uint64_t);
+    void (*FileWhack)(void *);
+} RawFile_vt;
+
+/* MARK: SAMFile */
+
+struct BufferedFile {
+    KFile const *kf;
+    void *buf;
+    uint64_t fmax;      /* file size if known or 0 */
+    uint64_t fpos;      /* position in file of first byte in buffer */
+    size_t bpos;        /* position in buffer of read head */
+    size_t bmax;        /* number of valid bytes in buffer */
+    size_t size;        /* maximum number of that can be read into buffer */
+};
+
+struct SAMFile {
+    BufferedFile file;
+    int putback;
+    rc_t last;
+};
+
+struct BGZFile {
+    BufferedFile file;
+    z_stream zs;
+};
+
+struct BAM_File {
+    union {
+        BGZFile bam;
+        SAMFile sam;
+    } file;
+    RawFile_vt vt;
+
+    KFile *defer;
+    
+    BAMRefSeq *refSeq;          /* pointers into headerData1 except name points into headerData2 */ 
+    BAMReadGroup *readGroup;    /* pointers into headerData1 */
+    char const *version;
+    char const *header;
+    void *headerData1;          /* gets used for refSeq and readGroup */
+    void *headerData2;          /* gets used for refSeq */
+    BAM_Alignment *nocopy;       /* used to hold current record for BAM_FileRead2 */
+
+    uint64_t fpos_cur;
+    uint64_t deferPos;
+    
+    unsigned refSeqs;
+    unsigned readGroups;
+    unsigned bufSize;           /* current size of uncompressed buffer */
+    unsigned bufCurrent;        /* location in uncompressed buffer of read head */
+    bool eof;
+    bool isSAM;
+    zlib_block_t buffer;        /* uncompressed buffer */
+};
+
+#define CG_NUM_SEGS 4
+
+#ifdef __GNUC__
+static inline int getRefSeqId(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getPosition(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getReadNameLength(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getBin(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getMapQual(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getCigarCount(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getFlags(BAM_Alignment const *) __attribute__((always_inline));
+static inline unsigned getReadLen(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getMateRefSeqId(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getMatePos(BAM_Alignment const *) __attribute__((always_inline));
+static inline int getInsertSize(BAM_Alignment const *) __attribute__((always_inline));
+static inline char const *getReadName(BAM_Alignment const *) __attribute__((always_inline));
+static inline void const *getCigarBase(BAM_Alignment const *) __attribute__((always_inline));
+static inline uint16_t LE2HUI16(void const *) __attribute__((always_inline));
+static inline uint32_t LE2HUI32(void const *) __attribute__((always_inline));
+static inline uint64_t LE2HUI64(void const *) __attribute__((always_inline));
+static inline  int16_t  LE2HI16(void const *) __attribute__((always_inline));
+static inline  int32_t  LE2HI32(void const *) __attribute__((always_inline));
+static inline  int64_t  LE2HI64(void const *) __attribute__((always_inline));
+#endif /* __GNUC__ */
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+static inline uint16_t LE2HUI16(void const *X) { uint16_t y; memmove(&y, X, sizeof(y)); return y; }
+static inline uint32_t LE2HUI32(void const *X) { uint32_t y; memmove(&y, X, sizeof(y)); return y; }
+static inline uint64_t LE2HUI64(void const *X) { uint64_t y; memmove(&y, X, sizeof(y)); return y; }
+static inline  int16_t  LE2HI16(void const *X) {  int16_t y; memmove(&y, X, sizeof(y)); return y; }
+static inline  int32_t  LE2HI32(void const *X) {  int32_t y; memmove(&y, X, sizeof(y)); return y; }
+static inline  int64_t  LE2HI64(void const *X) {  int64_t y; memmove(&y, X, sizeof(y)); return y; }
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+static inline uint16_t LE2HUI16(void const *X) { uint16_t y; memmove(&y, X, sizeof(y)); return (uint16_t)bswap_16(y); }
+static inline uint32_t LE2HUI32(void const *X) { uint32_t y; memmove(&y, X, sizeof(y)); return (uint32_t)bswap_32(y); }
+static inline uint64_t LE2HUI64(void const *X) { uint64_t y; memmove(&y, X, sizeof(y)); return (uint64_t)bswap_64(y); }
+static inline  int16_t  LE2HI16(void const *X) {  int16_t y; memmove(&y, X, sizeof(y)); return ( int16_t)bswap_16(y); }
+static inline  int32_t  LE2HI32(void const *X) {  int32_t y; memmove(&y, X, sizeof(y)); return ( int32_t)bswap_32(y); }
+static inline  int64_t  LE2HI64(void const *X) {  int64_t y; memmove(&y, X, sizeof(y)); return ( int64_t)bswap_64(y); }
+#endif
+
+static inline int getRefSeqId(BAM_Alignment const *const self) {
+    return LE2HI32(self->data->cooked.rID);
+}
+
+static inline int getPosition(BAM_Alignment const *const self) {
+    return LE2HI32(self->data->cooked.pos);
+}
+
+static inline int getReadNameLength(BAM_Alignment const *const self) {
+    return self->data->cooked.read_name_len;
+}
+
+static inline int getBin(BAM_Alignment const *const self) {
+    return LE2HUI16(self->data->cooked.bin);
+}
+
+static inline int getMapQual(BAM_Alignment const *const self) {
+    return self->data->cooked.mapQual;
+}
+
+static inline int getCigarCount(BAM_Alignment const *const self) {
+    return LE2HUI16(self->data->cooked.n_cigars);
+}
+
+static inline int getFlags(BAM_Alignment const *const self) {
+    return LE2HUI16(self->data->cooked.flags);
+}
+
+static inline unsigned getReadLen(BAM_Alignment const *const self) {
+    return LE2HUI32(self->data->cooked.read_len);
+}
+
+static inline int getMateRefSeqId(BAM_Alignment const *const self) {
+    return LE2HI32(self->data->cooked.mate_rID);
+}
+
+static inline int getMatePos(BAM_Alignment const *const self) {
+    return LE2HI32(self->data->cooked.mate_pos);
+}
+
+static inline int getInsertSize(BAM_Alignment const *const self) {
+    return LE2HI32(self->data->cooked.ins_size);
+}
+
+static inline char const *getReadName(BAM_Alignment const *const self) {
+    return &self->data->cooked.read_name[0];
+}
+
+static inline void const *getCigarBase(BAM_Alignment const *const self)
+{
+    return &self->data->raw[self->cigar];
+}
+
+static bool BAM_AlignmentShouldDefer(BAM_Alignment const *);
diff --git a/tools/bam-loader/bam-reader.c b/tools/bam-loader/bam-reader.c
new file mode 100644
index 0000000..ca397e9
--- /dev/null
+++ b/tools/bam-loader/bam-reader.c
@@ -0,0 +1,1104 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+ 
+typedef struct BamReaderFile    BamReaderFile;
+typedef struct BamRecord        BamRecord;
+typedef struct BamSequence      BamSequence;
+typedef struct BamAlignment     BamAlignment;
+typedef struct BamCGData        BamCGData;
+typedef struct BamReferenceInfo BamReferenceInfo;
+
+#define READERFILE_IMPL     BamReaderFile
+#define RECORD_IMPL         BamRecord
+#define SEQUENCE_IMPL       BamSequence
+#define ALIGNMENT_IMPL      BamAlignment
+#define CGDATA_IMPL         BamCGData
+#define REFERENCEINFO_IMPL  BamReferenceInfo
+
+#include "bam-reader.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <loader/common-reader-priv.h>
+
+struct BamSequence
+{
+    Sequence    dadSeq;
+    Alignment   dadAlign;
+    CGData      dadCG;
+    KRefcount   refcount;
+    
+    const BAMAlignment* bam;    
+    uint16_t flags;
+};
+
+struct BamRecord
+{
+    Record  dad;
+
+    BamSequence seq;
+    Rejected*   rej; 
+};
+/*TODO: remove when done refactoring */
+const BAMAlignment *ToBamAlignment(const Record* record)
+{
+   assert(record);
+   return ((const BamRecord*)record)->seq.bam;
+}
+
+static rc_t BamSequenceInit(BamSequence* self);
+
+/*--------------------------------------------------------------------------
+ * BamRecord
+ */
+static rc_t BamRecordAddRef   ( const BamRecord* self );
+static rc_t BamRecordRelease  ( const BamRecord* self );
+static rc_t BamRecordGetSequence  ( const BamRecord* self, const Sequence** result);
+static rc_t BamRecordGetAlignment ( const BamRecord* self, const Alignment** result);
+static rc_t BamRecordGetRejected  ( const BamRecord* self, const Rejected** result);
+
+static Record_vt_v1 BamRecord_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    BamRecordAddRef,
+    BamRecordRelease,
+    BamRecordGetSequence,
+    BamRecordGetAlignment,
+    BamRecordGetRejected,
+    /* end minor version == 0 */
+};
+
+static rc_t CC BamRecordInit ( BamRecord* self )
+{
+    assert(self);
+    self->dad.vt.v1 = & BamRecord_vt; 
+    self->rej = 0;
+    return BamSequenceInit(& self->seq);
+}
+
+static rc_t BamRecordWhack( const BamRecord* self )
+{
+    rc_t rc = 0;
+    assert(self);
+    
+    rc = BAMAlignmentRelease(self->seq.bam);
+
+    if (rc != 0)
+        RejectedRelease(self->rej);
+    else
+        rc = RejectedRelease(self->rej);
+
+    free ( (BamRecord*) self );
+    
+    return rc;
+}
+
+static rc_t BamRecordAddRef( const BamRecord* self )
+{
+    assert(self);
+    KRefcountAdd( & self->seq.refcount, "BamRecord" );
+    /* TODO: handle rc from KRefcountAdd */
+    return 0;
+}
+
+static rc_t BamRecordRelease( const BamRecord* cself )
+{
+    if ( cself != NULL )
+    {
+        BamRecord *self = ( BamRecord* ) cself;
+        switch ( KRefcountDrop ( & self ->seq.refcount, "BamRecord" ) )
+        {
+        case krefWhack:
+            BamRecordWhack( self );
+            break;
+        default:
+            /* TODO: handle other values */
+            break;
+        }
+    }
+    return 0;
+}
+
+static rc_t BamRecordGetSequence( const BamRecord* self, const Sequence** result )
+{
+    rc_t rc = 0;
+    assert(result);
+    rc = BamRecordAddRef(self);
+    if (rc == 0)
+        *result = (const Sequence*) & self->seq;
+    else
+        *result = 0;
+    return rc;
+}
+
+static rc_t BamRecordGetAlignment( const BamRecord* self, const Alignment** result)
+{
+    rc_t rc = 0;
+    assert(result);
+
+    /* do not allow access is flagged as unmapped*/
+    if ((self->seq.flags & BAMFlags_SelfIsUnmapped) != 0)
+        *result = 0;
+    else
+    {
+        rc = BamRecordAddRef(self);
+        if (rc == 0)
+            *result = (const Alignment*) & self->seq.dadAlign;
+        else
+            *result = 0;
+    }
+    return rc;
+}
+
+static rc_t BamRecordGetRejected( const BamRecord* self, const Rejected** result)
+{
+    rc_t rc = 0;
+    assert(result);
+    *result = 0;
+    if (self->rej != 0)
+    {
+        rc = RejectedAddRef(self->rej);
+        if (rc == 0)
+            *result = self->rej;
+    }
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * BamSequence forwards
+ */
+static rc_t BamSequenceAddRef                   ( const BamSequence* self );
+static rc_t BamSequenceRelease                  ( const BamSequence* self );
+static rc_t BamSequenceGetReadLength            ( const BamSequence *self, uint32_t *length );
+static rc_t BamSequenceGetRead                  ( const BamSequence *self, char *sequence );
+static rc_t BamSequenceGetRead2                 ( const BamSequence *self, char *sequence, uint32_t start, uint32_t stop );
+static rc_t BamSequenceGetQuality               ( const BamSequence *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static rc_t BamSequenceGetSpotGroup             ( const BamSequence *self, const char **name, size_t *length );
+static rc_t BamSequenceGetSpotName              ( const BamSequence *self, const char **name, size_t *length );
+static bool BamSequenceIsColorSpace             ( const BamSequence *self );
+static rc_t BamSequenceGetCSKey                 ( const BamSequence *self, char cskey[1] );
+static rc_t BamSequenceGetCSReadLength          ( const BamSequence *self, uint32_t *length );
+static rc_t BamSequenceGetCSRead                ( const BamSequence *self, char *sequence );
+static rc_t BamSequenceGetCSQuality             ( const BamSequence *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static bool BamSequenceRecordWasPaired          ( const BamSequence *self );
+static int  BamSequenceRecordOrientationSelf    ( const BamSequence *self );
+static int  BamSequenceRecordOrientationMate    ( const BamSequence *self );
+static bool BamSequenceRecordIsFirst            ( const BamSequence *self );
+static bool BamSequenceRecordIsSecond           ( const BamSequence *self );
+static bool BamSequenceRecordIsDuplicate        ( const BamSequence *self );
+static bool BamSequenceIsLowQuality             ( const BamSequence *self ); 
+static rc_t BamSequenceGetTI                    ( const BamSequence *self, uint64_t *ti );
+
+/*--------------------------------------------------------------------------
+ * BamCGData
+ */
+
+static rc_t BamCGDataAddRef         ( const BamCGData* self );
+static rc_t BamCGDataRelease        ( const BamCGData* self );
+static rc_t BamCGDataGetSeqQual     ( const BamCGData* self, char sequence[/* 35 */], uint8_t quality[/* 35 */] );
+static rc_t BamCGDataGetCigar       ( const BamCGData* self, uint32_t *cigar, uint32_t cig_max, uint32_t *cig_act );
+static rc_t BamCGDataGetAlignGroup  ( const BamCGData* self, char buffer[], size_t max_size, size_t *act_size );
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+                              char buffer[],
+                              size_t max_size,
+                              size_t *act_size );
+
+static CGData_vt_v1 BamCGData_vt = {
+    1, 0, 
+    /* start minor version == 0 */
+    BamCGDataAddRef,
+    BamCGDataRelease,
+    
+    BamCGDataGetSeqQual,
+    BamCGDataGetCigar,
+    BamCGDataGetAlignGroup
+    /* end minor version == 0 */
+};
+
+static const BamSequence*
+BamCGDataToSequence(const BamCGData* cg) 
+{
+    return ( const BamSequence * ) ( (uint8_t*)cg- offsetof ( BamSequence, dadCG) );
+}
+
+static rc_t BamCGDataAddRef  ( const BamCGData* self )
+{
+    return BamSequenceAddRef(BamCGDataToSequence(self));
+}
+
+static rc_t BamCGDataRelease ( const BamCGData* self )
+{
+    return BamSequenceRelease(BamCGDataToSequence(self));
+}
+
+static rc_t BamCGDataGetSeqQual ( const BamCGData* self, char sequence[/* 35 */], uint8_t quality[/* 35 */] )
+{
+    return BAMAlignmentGetCGSeqQual(BamCGDataToSequence(self)->bam, sequence, quality);
+}
+
+static rc_t BamCGDataGetCigar ( const BamCGData* self, uint32_t *cigar, uint32_t cig_max, uint32_t *cig_act )
+{
+    return BAMAlignmentGetCGCigar(BamCGDataToSequence(self)->bam, cigar, cig_max, cig_act);
+}
+
+static rc_t BamCGDataGetAlignGroup ( const BamCGData* self, char buffer[], size_t max_size, size_t *act_size )
+{
+    return BAMAlignmentGetCGAlignGroup(BamCGDataToSequence(self)->bam, buffer, max_size, act_size);
+}
+
+/*--------------------------------------------------------------------------
+ * BamAlignment
+ */
+
+static rc_t BamAlignmentAddRef  ( const BamAlignment* self );
+static rc_t BamAlignmentRelease ( const BamAlignment* self );
+
+static rc_t BamAlignmentGetRefSeqId         ( const BamAlignment *self, int32_t *refSeqId );
+static rc_t BamAlignmentGetMateRefSeqId     ( const BamAlignment *self, int32_t *refSeqId );
+static rc_t BamAlignmentGetPosition         ( const BamAlignment *self, int64_t *pos );
+static rc_t BamAlignmentGetMatePosition     ( const BamAlignment *self, int64_t *pos );
+static rc_t BamAlignmentGetMapQuality       ( const BamAlignment *self, uint8_t *qual );
+static rc_t BamAlignmentGetAlignmentDetail  ( const BamAlignment *self, AlignmentDetail *rslt, uint32_t count, uint32_t *actual, int32_t *firstMatch, int32_t *lastMatch );
+static rc_t BamAlignmentGetAlignOpCount     ( const BamAlignment *self, uint32_t *n );
+static rc_t BamAlignmentGetInsertSize       ( const BamAlignment *self, int64_t *size );
+static rc_t BamAlignmentGetCGData           ( const BamAlignment *self, const CGData** cg);
+static rc_t BamAlignmentGetBAMCigar         ( const BamAlignment *self, uint32_t const **rslt, uint32_t *length );
+static bool BamAlignmentIsSecondary         ( const BamAlignment *self );
+
+static Alignment_vt_v1 BamAlignment_vt = {
+    1, 0, 
+    /* start minor version == 0 */
+    BamAlignmentAddRef,
+    BamAlignmentRelease,
+    BamAlignmentGetRefSeqId,
+    BamAlignmentGetMateRefSeqId,
+    BamAlignmentGetPosition,
+    BamAlignmentGetMatePosition,
+    BamAlignmentGetMapQuality,
+    BamAlignmentGetAlignmentDetail,
+    BamAlignmentGetAlignOpCount,
+    BamAlignmentGetInsertSize,
+    BamAlignmentGetCGData,
+    BamAlignmentGetBAMCigar,
+    BamAlignmentIsSecondary,
+    /* end minor version == 0 */
+};
+
+static const BamSequence*
+BamAlignmentToSequence(const BamAlignment* align) 
+{
+    return ( const BamSequence * ) ( (uint8_t*)align - offsetof ( BamSequence, dadAlign ) );
+}
+
+static rc_t BamAlignmentAddRef  ( const BamAlignment* self )
+{
+    return BamSequenceAddRef(BamAlignmentToSequence(self));
+}
+
+static rc_t BamAlignmentRelease ( const BamAlignment* self )
+{
+    return BamSequenceRelease(BamAlignmentToSequence(self));
+}
+
+static rc_t BamAlignmentGetRefSeqId        ( const BamAlignment *self, int32_t *refSeqId )
+{
+    return BAMAlignmentGetRefSeqId(BamAlignmentToSequence(self)->bam, refSeqId);
+}
+
+static rc_t BamAlignmentGetMateRefSeqId    ( const BamAlignment *self, int32_t *refSeqId )
+{
+    return BAMAlignmentGetMateRefSeqId(BamAlignmentToSequence(self)->bam, refSeqId);
+}
+
+static rc_t BamAlignmentGetPosition        ( const BamAlignment *self, int64_t *pos )
+{
+    return BAMAlignmentGetPosition(BamAlignmentToSequence(self)->bam, pos);
+}
+
+static rc_t BamAlignmentGetMatePosition     ( const BamAlignment *self, int64_t *pos )
+{
+    return BAMAlignmentGetMatePosition(BamAlignmentToSequence(self)->bam, pos);
+}
+
+static rc_t BamAlignmentGetMapQuality      ( const BamAlignment *self, uint8_t *qual )
+{
+    return BAMAlignmentGetMapQuality(BamAlignmentToSequence(self)->bam, qual);
+}
+
+static rc_t BamAlignmentGetAlignmentDetail ( const BamAlignment *self, AlignmentDetail *rslt, uint32_t count, uint32_t *actual, int32_t *firstMatch, int32_t *lastMatch )
+{
+    return BAMAlignmentGetAlignmentDetail ( BamAlignmentToSequence(self)->bam, (BAMAlignmentDetail*)rslt, count, actual, firstMatch, lastMatch );
+}
+
+static rc_t BamAlignmentGetAlignOpCount    ( const BamAlignment *self, uint32_t *n )
+{
+    return BAMAlignmentGetCigarCount ( BamAlignmentToSequence(self)->bam, n );
+}
+
+static rc_t BamAlignmentGetInsertSize      ( const BamAlignment *self, int64_t *size )
+{
+    return BAMAlignmentGetInsertSize ( BamAlignmentToSequence(self)->bam, size );
+}
+
+static rc_t BamAlignmentGetCGData ( const BamAlignment *self, const CGData** cg)
+{
+    rc_t rc = 0;
+    if (BAMAlignmentHasCGData(BamAlignmentToSequence(self)->bam))
+    {
+        rc_t rc = BamAlignmentAddRef(self);
+        if (rc == 0)
+            *cg = (const CGData*) & BamAlignmentToSequence(self)->dadCG;
+        else
+            *cg = 0;
+    }
+    else
+        *cg = 0;
+    return rc;
+}
+
+static rc_t BamAlignmentGetBAMCigar        ( const BamAlignment *self, uint32_t const **rslt, uint32_t *length )
+{
+    return BAMAlignmentGetRawCigar(BamAlignmentToSequence(self)->bam, rslt, length);
+}
+
+static bool BamAlignmentIsSecondary( const BamAlignment *self )
+{
+    return (BamAlignmentToSequence(self)->flags & BAMFlags_IsNotPrimary) != 0;
+}
+
+/*--------------------------------------------------------------------------
+ * BamSequence 
+ */
+
+static Sequence_vt_v1 BamSequence_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    BamSequenceAddRef,
+    BamSequenceRelease,
+    BamSequenceGetReadLength,
+    BamSequenceGetRead,  
+    BamSequenceGetRead2,
+    BamSequenceGetQuality,
+    BamSequenceGetSpotGroup,
+    BamSequenceGetSpotName, 
+    BamSequenceIsColorSpace,
+    BamSequenceGetCSKey,
+    BamSequenceGetCSReadLength,
+    BamSequenceGetCSRead,
+    BamSequenceGetCSQuality,
+    BamSequenceRecordWasPaired,
+    BamSequenceRecordOrientationSelf,
+    BamSequenceRecordOrientationMate,
+    BamSequenceRecordIsFirst,
+    BamSequenceRecordIsSecond,
+    BamSequenceRecordIsDuplicate,
+    BamSequenceIsLowQuality,
+    BamSequenceGetTI,
+    /* end minor version == 0 */
+};
+
+static
+rc_t
+BamSequenceInit(BamSequence* self)
+{
+    self->dadSeq.vt.v1 = & BamSequence_vt;
+    self->dadAlign.vt.v1 = & BamAlignment_vt;
+    self->dadCG.vt.v1 = & BamCGData_vt;
+    KRefcountInit ( & self -> refcount, 1, "BamSequence", "BamSequenceInit", "");
+    self->bam= 0;
+    self->flags = 0;
+
+    return 0;
+}
+
+static const BamRecord*
+BamSequenceToRecord(const BamSequence* seq) 
+{
+    return ( const BamRecord * ) ( (uint8_t*)seq - offsetof ( BamRecord, seq ) );
+}
+
+static rc_t BamSequenceAddRef( const BamSequence* self )
+{
+    switch (KRefcountAdd( & self->refcount, "BamSequence" ))
+    {
+    case krefLimit:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRange, rcExcessive );
+    case krefNegative:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRefcount, rcInvalid );
+    }
+    return 0;
+}
+
+static rc_t BamSequenceRelease( const BamSequence* self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "BamSequence" ) )
+        {
+        case krefWhack:
+            return BamRecordWhack ( BamSequenceToRecord(self) );
+
+        case krefNegative:
+            return RC ( RC_MODULE, rcData, rcDestroying, rcSelf, rcDestroyed );
+        }
+    }
+
+    return 0;
+
+}
+
+static rc_t BamSequenceGetReadLength ( const BamSequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(self->bam);
+    return BAMAlignmentGetReadLength(self->bam, length);
+}
+
+static rc_t BamSequenceGetRead ( const BamSequence *self, char *sequence )
+{
+    assert(self);
+    assert(self->bam);
+    assert(sequence);
+    return BAMAlignmentGetSequence(self->bam, sequence);
+}
+
+static rc_t BamSequenceGetRead2 ( const BamSequence *self, char *sequence, uint32_t start, uint32_t stop )
+{
+    assert(self);
+    assert(self->bam);
+    assert(sequence);
+    return BAMAlignmentGetSequence2(self->bam, sequence, start, stop);
+}
+
+static rc_t BamSequenceGetQuality ( const BamSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(self->bam);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    {
+        rc_t rc = BAMAlignmentGetQuality2(self->bam, (const uint8_t **)quality, offset);
+        if (rc != 0)
+        {
+            *quality = NULL;
+            *offset = 0;
+            *qualType = 0;
+        }
+        else
+            *qualType = QT_Phred;
+        return rc;
+    }
+}
+
+static rc_t BamSequenceGetSpotGroup ( const BamSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(self->bam);
+    assert(name);
+    {
+        rc_t rc = BAMAlignmentGetReadGroupName ( self->bam, name );
+        if (rc != 0)
+        {
+            *name = NULL;
+            *length = 0;
+        }
+        else
+            *length = string_size(*name);
+        return rc;
+    }
+}
+
+static rc_t BamSequenceGetSpotName ( const BamSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(self->bam);
+    assert(name);
+    {
+        rc_t rc = BAMAlignmentGetReadName ( self->bam, name );
+        if (rc != 0)
+        {
+            *name = NULL;
+            *length = 0;
+        }
+        else
+            *length = string_size(*name);
+        return rc;
+    }
+}
+
+static bool BamSequenceIsColorSpace ( const BamSequence *self )
+{
+    assert(self);
+    assert(self->bam);
+    return BAMAlignmentHasColorSpace(self->bam);
+}
+
+static rc_t BamSequenceGetCSKey ( const BamSequence *self, char cskey[1] )
+{
+    assert(self);
+    assert(self->bam);
+    return BAMAlignmentGetCSKey(self->bam, cskey);
+}
+
+static rc_t BamSequenceGetCSReadLength     ( const BamSequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(self->bam);
+    assert(length);
+    return BAMAlignmentGetCSSeqLen(self->bam, length);
+}
+
+static rc_t BamSequenceGetCSRead ( const BamSequence *self, char *sequence )
+{
+    assert(self);
+    assert(self->bam);
+    assert(sequence);
+    {
+        uint32_t length;
+        rc_t rc = BAMAlignmentGetCSSeqLen(self->bam, &length);
+        return rc ? rc : BAMAlignmentGetCSSequence(self->bam, sequence, length);
+    }
+}
+
+static rc_t BamSequenceGetCSQuality ( const BamSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(self->bam);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    {
+        rc_t rc = BAMAlignmentGetCSQuality(self->bam, (const uint8_t **)quality, offset);
+        if (rc != 0)
+        {
+            *quality = NULL;
+            *offset = 0;
+            *qualType = 0;
+        }
+        else
+            *qualType = QT_Phred;
+        return rc;
+    }
+}
+
+static bool BamSequenceRecordWasPaired ( const BamSequence *self )
+{
+    return self->flags & BAMFlags_WasPaired;
+}
+
+static int BamSequenceRecordOrientationSelf ( const BamSequence *self )
+{
+    return (self->flags & BAMFlags_SelfIsReverse) ? ReadOrientationReverse : ReadOrientationForward;
+}
+
+static int BamSequenceRecordOrientationMate ( const BamSequence *self )
+{
+    return (self->flags & BAMFlags_MateIsReverse) ? ReadOrientationReverse : ReadOrientationForward;;
+}
+
+static bool BamSequenceRecordIsFirst ( const BamSequence *self )
+{
+    return self->flags & BAMFlags_IsFirst;
+}
+
+static bool BamSequenceRecordIsSecond ( const BamSequence *self )
+{
+    return self->flags & BAMFlags_IsSecond;
+}
+
+static bool BamSequenceRecordIsDuplicate ( const BamSequence *self )
+{
+    return self->flags & BAMFlags_IsDuplicate;
+}
+
+static bool BamSequenceIsLowQuality ( const BamSequence *self )
+{
+    return self->flags & BAMFlags_IsLowQuality;
+}
+
+static rc_t BamSequenceGetTI ( const BamSequence *self, uint64_t *ti )
+{
+    return BAMAlignmentGetTI(self->bam, ti);
+}
+
+ /*--------------------------------------------------------------------------
+ * BamReferenceInfo forwards
+ */
+static rc_t BamReferenceAddRef                  ( const BamReferenceInfo* self );
+static rc_t BamReferenceRelease                 ( const BamReferenceInfo* self );
+static rc_t BamReferenceInfoGetRefSeqCount      ( const BamReferenceInfo* self, uint32_t* count );
+static rc_t BamReferenceInfoGetRefSeq           ( const BamReferenceInfo* self, uint32_t n, ReferenceSequence* result );
+static rc_t BamReferenceInfoGetReadGroupCount   ( const BamReferenceInfo* self, uint32_t* count );
+static rc_t BamReferenceInfoGetReadGroup        ( const BamReferenceInfo* self, unsigned n, ReadGroup* result );
+static rc_t BamReferenceInfoGetReadGroupByName  ( const BamReferenceInfo* self, const char* name, ReadGroup* result );
+
+static ReferenceInfo_vt_v1 BamReferenceInfo_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    BamReferenceAddRef,
+    BamReferenceRelease,
+    BamReferenceInfoGetRefSeqCount,
+    BamReferenceInfoGetRefSeq,
+    BamReferenceInfoGetReadGroupCount,
+    BamReferenceInfoGetReadGroup,
+    BamReferenceInfoGetReadGroupByName,
+    /* end minor version == 0 */
+};
+
+/*--------------------------------------------------------------------------
+ * BamReaderFile
+ */
+static rc_t BamReaderFileWhack                      ( BamReaderFile* self );
+static rc_t BamReaderFileGetRecord                  ( const BamReaderFile *self, const Record** result );
+static float BamReaderFileGetProportionalPosition   ( const BamReaderFile *self );
+static rc_t BamReaderFileGetReferenceInfo           ( const BamReaderFile *self, const ReferenceInfo** result );
+
+static ReaderFile_vt_v1 BamReaderFile_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    BamReaderFileWhack,
+    BamReaderFileGetRecord,
+    BamReaderFileGetProportionalPosition,
+    BamReaderFileGetReferenceInfo,
+    /* end minor version == 0 */
+};
+
+struct BamReaderFile
+{
+    ReaderFile dad;
+    ReferenceInfo refInfo;
+    
+    const BAMFile* reader;
+};
+
+const BAMFile* ToBam(const ReaderFile* reader)
+{
+   assert(reader);
+   return ((const BamReaderFile*)reader)->reader;
+}
+
+float BamReaderFileGetProportionalPosition ( const BamReaderFile *f )
+{
+    BamReaderFile* self = (BamReaderFile*) f;
+    return BAMFileGetProportionalPosition(self->reader);
+} 
+
+rc_t BamReaderFileGetReferenceInfo ( const BamReaderFile *self, const ReferenceInfo** result )
+{
+    *result = & self->refInfo;
+    return ReaderFileAddRef( & self->dad );
+}
+
+rc_t BamReaderFileWhack( BamReaderFile* f )
+{
+    BamReaderFile* self = (BamReaderFile*) f;
+    
+    BAMFileRelease(self->reader);
+    
+    free ( (void*)self->dad.pathname );
+    free ( self );
+    
+    return 0;   
+}
+
+rc_t BamReaderFileGetRecord ( const BamReaderFile *f, const Record** result )
+{
+    rc_t rc;
+    BamReaderFile* self = (BamReaderFile*) f;
+
+    BamRecord* record = (BamRecord*)malloc(sizeof(BamRecord));
+    if (record == NULL)
+    {
+        rc = RC ( RC_MODULE, rcData, rcAllocating, rcMemory, rcExhausted );
+        return 0;
+    }
+    rc = BamRecordInit(record);
+    if (rc != 0)
+    {
+        free(record);
+        return rc;
+    }
+    
+    rc = BAMFileRead2(self->reader, &record->seq.bam);
+    if (rc)
+    {
+        if (GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+        {   /* end of input */
+            rc = 0; 
+        }
+        *result = 0;
+        BamRecordRelease(record);
+    }    
+    else
+    {
+        *result = (const Record*)record;
+        BAMAlignmentGetFlags(record->seq.bam, &record->seq.flags);
+    }
+        
+    return rc;
+}
+
+rc_t CC BamReaderFileMake( const ReaderFile **reader, char const headerText[], char const path[])
+{
+    rc_t rc;
+    BamReaderFile* self = (BamReaderFile*) malloc ( sizeof * self );
+    if ( self == NULL )
+    {
+        rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+        *reader = 0;
+    }
+    else
+    {
+        rc = ReaderFileInit ( self );
+        self->dad.vt.v1 = & BamReaderFile_vt;
+        self->refInfo.vt.v1 = & BamReferenceInfo_vt;
+
+        self->dad.pathname = string_dup(path, strlen(path)+1);
+        if ( self->dad.pathname == NULL )
+        {
+            rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+        }
+        
+        rc = BAMFileMakeWithHeader ( &self->reader, headerText, "%s", self->dad.pathname );
+        
+        if (rc != 0)
+        {
+            BamReaderFileWhack( self );
+            *reader = 0;
+        }
+        else
+        {
+            *reader = (const ReaderFile *) self;
+        }
+    }
+ 
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * BamReferenceInfo
+ */
+static const BamReaderFile*
+BamRefInfoToReader(const BamReferenceInfo* ref) 
+{
+    return ( const BamReaderFile * ) ( (uint8_t*)ref - offsetof ( BamReaderFile, refInfo ) );
+}
+
+rc_t BamReferenceAddRef ( const BamReferenceInfo* self )
+{
+    return ReaderFileAddRef( & BamRefInfoToReader(self)->dad );
+}
+
+rc_t BamReferenceRelease ( const BamReferenceInfo* self )
+{
+    return ReaderFileRelease ( & BamRefInfoToReader(self)->dad );
+}
+
+rc_t BamReferenceInfoGetRefSeqCount ( const BamReferenceInfo* self, uint32_t* count )
+{
+    return BAMFileGetRefSeqCount( BamRefInfoToReader(self)->reader, count );
+}
+
+rc_t BamReferenceInfoGetRefSeq ( const BamReferenceInfo *self, uint32_t n, ReferenceSequence *result )
+{
+    const BAMRefSeq *refSeq;
+    rc_t rc = BAMFileGetRefSeq( BamRefInfoToReader(self)->reader, n, &refSeq );
+    if (rc != 0 || refSeq == NULL)
+    {
+        return RC ( RC_MODULE, rcHeader, rcAccessing, rcParam, rcOutofrange );
+    }
+    
+    result->length = refSeq->length;
+    result->name = refSeq->name;
+    result->checksum = refSeq->checksum;
+    
+    return 0;
+}
+
+rc_t BamReferenceInfoGetReadGroupCount ( const BamReferenceInfo *self, uint32_t *count )
+{
+    return BAMFileGetReadGroupCount ( BamRefInfoToReader(self)->reader, count );
+}
+
+rc_t BamReferenceInfoGetReadGroup ( const BamReferenceInfo *self, unsigned n, ReadGroup* result )
+{
+    const BAMReadGroup *rg;
+    rc_t rc = BAMFileGetReadGroup( BamRefInfoToReader(self)->reader, n, &rg );
+    if (rc != 0 || rg == NULL)
+    {
+        return RC ( RC_MODULE, rcHeader, rcAccessing, rcParam, rcOutofrange );
+    }
+        
+    result->name = rg->name;
+    result->platform = rg->platform;
+    
+    return 0;
+}
+
+rc_t BamReferenceInfoGetReadGroupByName ( const BamReferenceInfo *self, const char *name, ReadGroup *result )
+{
+    const BAMReadGroup *rg;
+    rc_t rc = BAMFileGetReadGroupByName( BamRefInfoToReader(self)->reader, name, &rg );
+    if (rc != 0 || rg == NULL)
+    {
+        return RC ( RC_MODULE, rcHeader, rcAccessing, rcParam, rcOutofrange );
+    }
+    
+    result->name = rg->name;
+    result->platform = rg->platform;
+    
+    return 0;
+}
+
+
+
+
+
+ 
+#ifdef TENTATIVE 
+/**************************** future parsing-on-a-thread code *****************************************/
+
+#include "bam-reader.h"
+
+#include <atomic32.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <klib/rc.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+#include <kproc/thread.h>
+
+#define BUFFER_COUNT (3)
+
+struct BAMReader
+{
+    atomic32_t refcount;
+    const BAMFile* file;
+    
+    KLock *lock;
+    KCondition *have_data;
+    KCondition *need_data;
+    KThread *th;
+
+    const BAMAlignment* que[BUFFER_COUNT];
+    unsigned volatile nque;
+    rc_t volatile rc;
+    
+    bool eof;
+};
+
+static rc_t BAMReaderThreadMain(KThread const *const th, void *const vp);
+
+#define END_OF_DATA RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound)
+
+rc_t BAMReaderMake( const BAMReader **result,
+                    char const headerText[],
+                    char const path[] )
+{
+    rc_t rc;
+    BAMReader *self = malloc(sizeof(BAMReader));
+    if ( self == NULL )
+    {
+        *result = NULL;
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    else
+    {
+        atomic32_set( & self->refcount, 1 );
+        rc = BAMFileMakeWithHeader( & self->file, headerText, "%s", path);
+        if ( rc != 0 )
+        {
+            free(self);
+            *result = 0;
+        }
+        else
+            *result = self;
+    }
+    
+    self->nque = 0;
+    self->rc = 0;
+    self->eof = false;
+    
+    rc = KLockMake(&self->lock);
+    if (rc == 0) 
+    {
+        rc = KConditionMake(&self->have_data);
+        if (rc == 0) 
+        {
+            rc = KConditionMake(&self->need_data);
+            if (rc == 0) 
+            {
+                rc = KThreadMake(&self->th, BAMReaderThreadMain, self);
+                if (rc == 0) 
+                    return 0;
+                KConditionRelease(self->need_data);
+            }
+            KConditionRelease(self->have_data);
+        }
+        KLockRelease(self->lock);
+    }
+    
+    return rc;
+}           
+
+static void BAMReaderWhack(BAMReader *const self)
+{
+    KThreadCancel(self->th);
+    KThreadWait(self->th, NULL);
+    BAMFileRelease(self->file);
+    KConditionRelease(self->need_data);
+    KConditionRelease(self->have_data);
+    KLockRelease(self->lock);
+    KThreadRelease(self->th);
+}
+        
+
+/* AddRef
+ * Release
+ */
+rc_t BAMReaderAddRef ( const BAMReader *self )
+{
+    if (self != NULL)
+        atomic32_inc(&((BAMReader *)self)->refcount);
+    return 0;
+}
+
+rc_t BAMReaderRelease ( const BAMReader *cself )
+{
+    BAMReader *self = (BAMReader *)cself;
+    
+    if (cself != NULL) 
+    {
+        if (atomic32_dec_and_test(&self->refcount)) 
+        {
+            BAMReaderWhack(self);
+            free(self);
+        }
+    }
+    return 0;
+}
+
+/* GetBAMFile
+ */
+const BAMFile* BAMReaderGetBAMFile ( const BAMReader *self )
+{
+    if (self == NULL)
+        return NULL;
+    return self->file;
+}
+
+static rc_t BAMReaderThreadMain(KThread const *const th, void *const vp)
+{
+    BAMReader *const self = (BAMReader *)vp;
+    rc_t rc = 0;
+    const BAMAlignment* rec;
+    
+    KLockAcquire(self->lock);
+    do 
+    {
+        while (self->nque == BUFFER_COUNT)
+            KConditionWait(self->need_data, self->lock);
+
+        {
+            rc = BAMFileRead( self->file, &rec);
+            if (rc == END_OF_DATA)
+            {
+                rec = NULL;
+                rc = 0;
+            }
+            else if (rc)
+                break;
+
+            self->que[self->nque] = rec;
+            ++self->nque;
+            KConditionSignal(self->have_data);
+        }
+    }
+    while (rec);
+    self->rc = rc;
+    KLockUnlock(self->lock);
+    return 0;
+}
+
+/* Read
+ *  read an aligment
+ *
+ *  "result" [ OUT ] - return param for BAMAlignment object
+ *   must be released with BAMAlignmentRelease
+ *
+ *  returns RC(..., ..., ..., rcRow, rcNotFound) at end
+ */
+rc_t BAMReaderRead ( const BAMReader *cself, const BAMAlignment **result )
+{
+    rc_t rc;
+    BAMReader *self = (BAMReader *)cself;
+    
+    if (self == NULL)
+        return RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
+    if (self->eof)
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+        
+    KLockAcquire(self->lock);
+    if ((rc = self->rc) == 0) 
+    {
+        while (self->nque == 0 && (rc = self->rc) == 0)
+            KConditionWait(self->have_data, self->lock);
+        if (rc == 0) 
+        {
+            *result = self->que[0];
+            
+            if (*result) 
+            {
+                --self->nque;
+                memmove(&self->que[0], &self->que[1], self->nque * sizeof(self->que[0]));
+                KConditionSignal(self->need_data);
+            }
+            else 
+            {
+                self->eof = true;
+                rc = END_OF_DATA;
+            }
+        }
+    }
+    KLockUnlock(self->lock);
+
+    return rc;
+}
+
+#endif
+
+
diff --git a/tools/bam-loader/bam-reader.h b/tools/bam-loader/bam-reader.h
new file mode 100644
index 0000000..5247563
--- /dev/null
+++ b/tools/bam-loader/bam-reader.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_bam_reader_
+#define _h_bam_reader_
+
+#include <klib/rc.h>
+#include <kfs/directory.h>
+
+#include <align/extern.h>
+#include <align/bam.h>
+
+#include <loader/common-reader-priv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t CC BamReaderFileMake( const ReaderFile **self, char const headerText[], char const path[] );
+
+/* temporary crutches for refactoring: */
+const BAMFile* ToBam(const ReaderFile *self); 
+const BAMAlignment *ToBamAlignment(const Record* record);
+
+#if 0
+#ifdef TENTATIVE
+/*--------------------------------------------------------------------------
+ * BAMReader, a parsing thread adapter for BAMFile.
+ * Creates a thread that does reading and parsing of BAM files, provides access to parsed data one record at a time. 
+ */
+typedef struct BAMReader BAMReader;
+
+rc_t BAMReaderMake( const BAMReader **result,
+                    char const headerText[],
+                    char const path[] );
+
+/* AddRef
+ * Release
+ */
+rc_t BAMReaderAddRef ( const BAMReader *self );
+rc_t AMReaderRelease ( const BAMReader *self );
+
+/* GetBAMFile
+ */
+const BAMFile* BAMReaderGetBAMFile ( const BAMReader *self );
+
+/* Read
+ *  read an aligment
+ *
+ *  "result" [ OUT ] - return param for BAMAlignment object
+ *   must be released with BAMAlignmentRelease
+ *
+ *  returns RC(..., ..., ..., rcRow, rcNotFound) at end
+ */
+rc_t BAMReaderRead ( const BAMReader *self, const BAMAlignment **result );
+
+#else /*TENTATIVE*/
+
+/* use BAMFile directly, as in the earlier version */
+typedef struct BAMFile BAMReader;
+
+#define BAMReaderMake 			BAMFileMakeWithHeader
+#define BAMReaderAddRef 		BAMFileAddRef
+#define BAMReaderRelease 		BAMFileRelease
+#define BAMReaderGetBAMFile(p) 	(p)
+#define BAMReaderRead 			BAMFileRead
+
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_bam_reader_ */
diff --git a/tools/bam-loader/bam.c b/tools/bam-loader/bam.c
new file mode 100644
index 0000000..559a0ff
--- /dev/null
+++ b/tools/bam-loader/bam.c
@@ -0,0 +1,4113 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/defs.h>
+#include <klib/debug.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/refcount.h>
+#include <sysalloc.h>
+
+#include <atomic32.h>
+#include <strtol.h>
+
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/kfs-priv.h>
+
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <assert.h>
+#if 1
+/*_DEBUGGING*/
+#include <stdio.h>
+#include <os-native.h>
+#endif
+
+#include <endian.h>
+#include <byteswap.h>
+
+#include <zlib.h>
+
+#include "bam-priv.h"
+
+static rc_t BufferedFileRead(BufferedFile *const self)
+{
+    uint64_t const fpos = self->fpos + self->bmax;
+    rc_t const rc = KFileRead(self->kf, fpos, self->buf, self->size, &self->bmax);
+    if (rc) {
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Error %R read %u bytes from SAM/BAM file at position %lu\n", rc, self->bmax, fpos));
+        return rc;
+    }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Read %u bytes from SAM/BAM file at position %lu\n", self->bmax, fpos));
+    self->fpos = fpos;
+    self->bpos = 0;
+    return 0;
+}
+
+static rc_t BufferedFileInit(BufferedFile *const self, KFile const *const kf)
+{
+    rc_t const rc = KFileSize(kf, &self->fmax);
+    if (rc || self->fmax == 0) {
+        self->fmax = 0;
+        self->size = PIPE_BUFFER_SIZE;
+    }
+    else
+        self->size = self->fmax < RGLR_BUFFER_SIZE ? self->fmax : RGLR_BUFFER_SIZE;
+
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("File size is %lu; Read buffer is %lu\n", self->fmax, self->size));
+    self->buf = malloc(self->size);
+    self->fpos = 0;
+    self->bpos = 0;
+    self->bmax = 0;
+    self->kf = kf;
+    KFileAddRef(kf);
+
+    return self->buf != NULL ? 0 : RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+}
+
+static void BufferedFileWhack(BufferedFile *const self)
+{
+    KFileRelease(self->kf);
+    free(self->buf);
+}
+
+static uint64_t BufferedFileGetPos(BufferedFile const *const self)
+{
+    return self->fpos + self->bpos;
+}
+
+static float BufferedFileProPos(BufferedFile const *const self)
+{
+    return self->fmax == 0 ? -1.0 : (BufferedFileGetPos(self) / (double)self->fmax);
+}
+
+static rc_t BufferedFileSetPos(BufferedFile *const self, uint64_t const pos)
+{
+    if (pos >= self->fpos && pos < self->fpos + self->bmax) {
+        self->bpos = (size_t)(pos - self->fpos);
+    }
+    else if (pos < self->fmax) {
+        self->fpos = pos;
+        self->bpos = 0;
+        self->bmax = 0;
+    }
+    else
+        return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
+    return 0;
+}
+
+static uint64_t BufferedFileGetSize(BufferedFile const *const self)
+{
+    return self->fmax;
+}
+
+static int SAMFileRead1(SAMFile *const self)
+{
+    if (self->putback < 0) {
+        if (self->file.bpos == self->file.bmax) {
+            rc_t const rc = BufferedFileRead(&self->file);
+            
+            self->last = rc;
+            if (rc || self->file.bmax == 0) return -1;
+        }
+        return ((char const *)self->file.buf)[self->file.bpos++];
+    }
+    else {
+        int const x = self->putback;
+        self->putback = -1;
+        return x;
+    }
+}
+
+static rc_t SAMFileLastError(SAMFile const *const self)
+{
+    return self->last ? self->last : SILENT_RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+}
+
+static void SAMFilePutBack(SAMFile *const self, int ch)
+{
+    if (self->file.bpos > 0)
+        --self->file.bpos;
+    else
+        self->putback = ch;
+}
+
+static rc_t SAMFileInit(SAMFile *self, RawFile_vt *vt)
+{
+    static RawFile_vt const my_vt = {
+        (rc_t (*)(void *, zlib_block_t, unsigned *))NULL,
+        (uint64_t (*)(void const *))BufferedFileGetPos,
+        (float (*)(void const *))BufferedFileProPos,
+        (uint64_t (*)(void const *))BufferedFileGetSize,
+        (rc_t (*)(void *, uint64_t))BufferedFileSetPos,
+        (void (*)(void *))NULL
+    };
+    
+    self->putback = -1;
+    self->last = 0;
+    *vt = my_vt;
+    
+    return 0;
+}
+
+/* MARK: BGZFile *** Start *** */
+
+#define VALIDATE_BGZF_HEADER 1
+#if (ZLIB_VERNUM < 0x1230)
+#undef VALIDATE_BGZF_HEADER
+#warning "zlib too old, inflateGetHeader not available, not validating BGZF headers"
+#else
+#endif
+
+static rc_t BGZFileGetMoreBytes(BGZFile *self)
+{
+    rc_t const rc = BufferedFileRead(&self->file);
+    if (rc)
+        return rc;
+    
+    if (self->file.bmax == 0)
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+
+    self->zs.avail_in = (uInt)(self->file.bmax);
+    self->zs.next_in = (Bytef *)self->file.buf;
+    
+    return 0;
+}
+
+static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, unsigned *pNumRead)
+{
+#if VALIDATE_BGZF_HEADER
+    uint8_t extra[256];
+    gz_header head;
+#endif
+    rc_t rc = 0;
+    unsigned loops;
+    int zr;
+    
+    *pNumRead = 0;
+    if (self->file.bmax == 0 || self->zs.avail_in == 0) {
+        rc = BGZFileGetMoreBytes(self);
+        if (rc)
+            return rc;
+    }
+
+#if VALIDATE_BGZF_HEADER
+    memset(&head, 0, sizeof(head));
+    head.extra = extra;
+    head.extra_max = sizeof(extra);
+    
+    zr = inflateGetHeader(&self->zs, &head);
+    assert(zr == Z_OK);
+#endif
+    
+    self->zs.next_out = (Bytef *)dst;
+    self->zs.avail_out = sizeof(zlib_block_t);
+
+    for (loops = 0; loops != 2; ++loops) {
+        {
+            uLong const initial = self->zs.total_in;
+            
+            zr = inflate(&self->zs, Z_FINISH);
+            {
+                uLong const final = self->zs.total_in;
+                uLong const len = final - initial;
+                
+                self->file.bpos += len;
+            }
+        }
+        assert(self->zs.avail_in == self->file.bmax - self->file.bpos);
+        
+        switch (zr) {
+        case Z_OK:
+        case Z_BUF_ERROR:
+            rc = BGZFileGetMoreBytes(self);
+            if ( rc != 0 )
+            {
+                if ((int)GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient)
+                {
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("EOF in Zlib block after %lu bytes\n", self->file.fpos + self->file.bpos));
+                    rc = RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
+                }
+                return rc;
+            }
+            break;
+        case Z_STREAM_END:
+            DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Zlib block size (before/after): %u/%u\n", self->zs.total_in, self->zs.total_out));
+#if VALIDATE_BGZF_HEADER
+            if (head.done) {
+                unsigned const extra_len = head.extra_len;
+                unsigned i;
+                unsigned bsize = 0;
+                
+                DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra length: %u\n", extra_len));
+                for (i = 0; i < extra_len; ) {
+                    uint8_t const si1 = extra[i + 0];
+                    uint8_t const si2 = extra[i + 1];
+                    unsigned const slen = LE2HUI16(&extra[i + 2]);
+                    
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra: %c%c(%u)\n", si1, si2, slen));
+                    if (si1 == 'B' && si2 == 'C') {
+                        bsize = 1 + LE2HUI16(&extra[i + 4]);
+                        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC: bsize %u\n", bsize));
+                        break;
+                    }
+                    i += slen + 4;
+                }
+                if (bsize == 0 || bsize != self->zs.total_in) {
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC not found\n"));
+                    rc = RC(rcAlign, rcFile, rcReading, rcFormat, rcInvalid); /* not BGZF */
+                }
+            }
+            else {
+                DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header not found\n"));
+                rc = RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
+            }
+#endif
+            *pNumRead = (unsigned)self->zs.total_out; /* <= 64k */
+            zr = inflateReset(&self->zs);
+            assert(zr == Z_OK);
+            return rc;
+        default:
+            DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Unexpected Zlib result %i: %s\n", zr, self->zs.msg ? self->zs.msg : "unknown"));
+            return RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
+        }
+    }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Failed reading BAM file after %lu bytes\n", self->file.fpos + self->file.bpos));
+    return RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
+}
+
+static void BGZFileWhack(BGZFile *self)
+{
+    inflateEnd(&self->zs);
+}
+
+static rc_t BGZFileInit(BGZFile *const self, RawFile_vt *const vt)
+{
+    int i;
+    static RawFile_vt const my_vt = {
+        (rc_t (*)(void *, zlib_block_t, unsigned *))BGZFileRead,
+        (uint64_t (*)(void const *))BufferedFileGetPos,
+        (float (*)(void const *))BufferedFileProPos,
+        (uint64_t (*)(void const *))BufferedFileGetSize,
+        (rc_t (*)(void *, uint64_t))BufferedFileSetPos,
+        (void (*)(void *))BGZFileWhack
+    };
+    
+    *vt = my_vt;
+
+    i = inflateInit2(&self->zs, MAX_WBITS + 16); /* max + enable gzip headers */
+    switch (i) {
+    case Z_OK:
+        break;
+    case Z_MEM_ERROR:
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    default:
+        return RC(rcAlign, rcFile, rcConstructing, rcNoObj, rcUnexpected);
+    }
+    
+    return 0;
+}
+
+static const char cigarChars[] = {
+    ct_Match,
+    ct_Insert,
+    ct_Delete,
+    ct_Skip,
+    ct_SoftClip,
+    ct_HardClip,
+    ct_Padded,
+    ct_Equal,
+    ct_NotEqual
+    /* ct_Overlap must not appear in actual BAM file */
+};
+
+static inline int opt_tag_cmp(char const a[2], char const b[2])
+{
+    int const d0 = (int)a[0] - (int)b[0];
+    return d0 ? d0 : ((int)a[1] - (int)b[1]);
+}
+
+static int64_t OptTag_sort(void const *A, void const *B, void *ctx)
+{
+    BAM_Alignment const *const self = ctx;
+    unsigned const a_off = ((struct offset_size_s const *)A)->offset;
+    unsigned const b_off = ((struct offset_size_s const *)B)->offset;
+    char const *const a = (char const *)&self->data->raw[a_off];
+    char const *const b = (char const *)&self->data->raw[b_off];
+    int const diff = opt_tag_cmp(a, b);
+    
+    if ( diff != 0 )
+        return diff;
+    else if ( a < b )
+        return -1;
+    else
+        return a > b;
+}
+
+/* find the first occurence of tag OR if tag doesn't exist, where it should have been. */
+static unsigned tag_search(BAM_Alignment const *const self, char const tag[2])
+{
+    unsigned f = 0;
+    unsigned e = self->numExtra;
+    
+    while (f < e) {
+        unsigned const m = f + ((e - f) >> 1);
+        char const *const mtag = (char const *)&self->data->raw[self->extra[m].offset];
+        int const d = opt_tag_cmp(tag, mtag);
+        
+        if (d > 0)
+            f = m + 1;
+        else
+            e = m;
+    }
+    return f;
+}
+
+static unsigned tag_count(BAM_Alignment const *const self,
+                              char const tag[2],
+                              unsigned const at)
+{
+    unsigned n;
+    
+    for (n = 0; n + at < self->numExtra; ++n) {
+        if (opt_tag_cmp(tag, (char const *)&self->data->raw[self->extra[n + at].offset]) != 0)
+            break;
+    }
+    return n;
+}
+
+static unsigned Modulus(int i, unsigned N)
+{
+    while (i < 0)
+        i += N;
+    return i % N;
+}
+
+static struct offset_size_s const *getTag(BAM_Alignment const *const self,
+                                          char const tag[2],
+                                          int const which)
+{
+    unsigned const fnd = tag_search(self, tag);
+    unsigned const run = tag_count(self, tag, fnd);
+    return run > 0 ? &self->extra[fnd + Modulus(which, run)] : NULL;
+}
+
+static struct offset_size_s const *get_CS_info(BAM_Alignment const *cself)
+{
+    return getTag(cself, "CS", 0);
+}
+
+static struct offset_size_s const *get_CQ_info(BAM_Alignment const *cself)
+{
+    return getTag(cself, "CQ", 0);
+}
+
+static char const *get_RG(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "RG", 0);
+    return (char const *)((x != NULL && cself->data->raw[x->offset + 2] == 'Z') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_CS(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = get_CS_info(cself);
+    return (char const *)((x != NULL && cself->data->raw[x->offset + 2] == 'Z') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static uint8_t const *get_CQ(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = get_CQ_info(cself);
+    return (uint8_t const *)((x != NULL && cself->data->raw[x->offset + 2] == 'Z') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_OQ_info(BAM_Alignment const *cself)
+{
+    return getTag(cself, "OQ", 0);
+}
+
+static uint8_t const *get_OQ(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = get_OQ_info(cself);
+    return (uint8_t const *)((x != NULL && cself->data->raw[x->offset + 2] == 'Z') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_XT(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "XT", 0);
+    return (char const *)((x != NULL && cself->data->raw[x->offset + 2] == 'Z') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static uint8_t const *get_XS(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "XS", -1); /* want last one */
+    return (uint8_t const *)((x != NULL && cself->data->raw[x->offset + 2] == 'A') ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_CG_ZA_info(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "ZA", 0);
+    return x;
+}
+
+static struct offset_size_s const *get_CG_ZI_info(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "ZI", 0);
+    return x;
+}
+
+static struct offset_size_s const *get_CG_GC_info(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "GC", 0);
+    return x;
+}
+
+static struct offset_size_s const *get_CG_GS_info(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "GS", 0);
+    return x;
+}
+
+static struct offset_size_s const *get_CG_GQ_info(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "GQ", 0);
+    return x;
+}
+
+static char const *get_BX(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "BX", 0);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_CB(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "CB", 0);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_UB(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "UB", 0);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_BC(BAM_Alignment const *cself)
+{
+    struct offset_size_s const *const x = getTag(cself, "BC", 0);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+/* MARK: BAM_File Reading functions */
+
+/* returns (rcData, rcInsufficient) if eof */
+static rc_t BAM_FileFillBuffer(BAM_File *self)
+{
+    rc_t const rc = self->vt.FileRead(&self->file, self->buffer, &self->bufSize);
+    if (rc)
+        return rc;
+    if (self->bufSize == 0 || self->bufSize <= self->bufCurrent)
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+    return 0;
+}
+
+static rc_t BAM_FileReadn(BAM_File *self, const unsigned len, uint8_t dst[/* len */]) {
+    rc_t rc;
+    unsigned cur;
+    unsigned n = 0;
+    
+    if (len == 0)
+        return 0;
+    
+    for (cur = 0; ; cur += n) {
+        if (self->bufSize > self->bufCurrent) {
+            n = self->bufSize - self->bufCurrent;
+            if (cur + n > len)
+                n = len - cur;
+            memmove(&dst[cur], &self->buffer[self->bufCurrent], n);
+            self->bufCurrent += n;
+        }
+        if (self->bufCurrent != self->bufSize && self->bufSize != 0)
+            return 0;
+        if (self->bufSize != 0) {
+            /* a seek has not just been done so update the file position.
+             * if we didn't and a request for the position is made before the
+             * next read, we will not have the position of the next read.
+             *
+             * if a seek had just been done then
+             *    self->fpos_cur == BGZFileGetPos(&self->file)
+             * is already true.
+             */
+            self->fpos_cur = self->vt.FileGetPos(&self->file);
+            self->bufCurrent = 0;
+            self->bufSize = 0;
+            if (cur + n == len)
+                return 0;
+        }
+
+        rc = BAM_FileFillBuffer(self);
+        if (rc)
+            return rc;
+    }
+}
+
+static void const *BAM_FilePeek(BAM_File const *const self, unsigned const offset)
+{
+    return &self->buffer[self->bufCurrent + offset];
+}
+
+static unsigned BAM_FileMaxPeek(BAM_File const *self)
+{
+    return self->bufSize > self->bufCurrent ? self->bufSize - self->bufCurrent : 0;
+}
+
+static int32_t BAM_FilePeekI32(BAM_File *self)
+{
+    return LE2HI32(BAM_FilePeek(self, 0));
+}
+
+static rc_t BAM_FileReadI32(BAM_File *self, int32_t *rhs)
+{
+    uint8_t buf[sizeof(int32_t)];
+    rc_t rc = BAM_FileReadn(self, sizeof(int32_t), buf);
+    
+    if (rc == 0)
+        *rhs = LE2HI32(buf);
+    return rc;
+}
+
+/* MARK: BAM File header parsing functions */
+
+static unsigned ParseHD(char const **rslt, unsigned const hlen, char hdata[])
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
+
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return 0;
+            ++st;
+            break;
+        case 2:
+            if (cc != ':')
+                continue;
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                hdata[i] = '\0';
+                
+                if (strcmp(&hdata[tag], "VN") == 0)
+                    *rslt = &hdata[value];
+                
+                ++st;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                return i;
+            tag = i;
+            st = 1;
+            break;
+        }
+    }
+    return st == 4 ? i : 0;
+}
+
+static unsigned ParseSQ(BAMRefSeq *rs, unsigned const hlen, char hdata[])
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return 0;
+            ++st;
+            break;
+        case 2:
+#define HACKAMATIC 1
+#if HACKAMATIC
+            if (cc != ':') {
+                if (i + 1 >= hlen || hdata[i+1] != ':')
+                    return 0;
+                else
+                    ++i;
+            }
+#else
+            if (cc != ':')
+                continue;
+#endif
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                unsigned j;
+                
+                hdata[i] = '\0';
+                
+                while (value < i && isspace(hdata[value]))
+                    ++value;
+                for (j = i; value < j && isspace(hdata[j - 1]); )
+                    hdata[--j] = '\0';
+                
+                if (strcmp(&hdata[tag], "SN") == 0)
+                    rs->name = &hdata[value];
+                else if (strcmp(&hdata[tag], "LN") == 0)
+                    rs->length = strtou64(&hdata[value], NULL, 10);
+                else if (strcmp(&hdata[tag], "AS") == 0)
+                    rs->assemblyId = &hdata[value];
+#if HACKAMATIC
+                else if (strcmp(&hdata[tag], "M5") == 0 || strcmp(&hdata[tag], "MD5") == 0)
+#else
+                else if (strcmp(&hdata[tag], "M5") == 0)
+#endif
+#undef HACKAMATIC
+                {
+                    unsigned len = j - value;
+                    
+                    if ((hdata[value] == '\'' || hdata[value] == '"') && hdata[value + len - 1] == hdata[value]) {
+                        ++value;
+                        len -= 2;
+                    }
+                    if (len == 32) {
+                        rs->checksum = &rs->checksum_array[0];
+                        for (j = 0; j != 16; ++j) {
+                            int const ch1 = toupper(hdata[value + j * 2 + 0]);
+                            int const ch2 = toupper(hdata[value + j * 2 + 1]);
+                            
+                            if (isxdigit(ch1) && isxdigit(ch2)) {
+                                rs->checksum_array[j] =
+                                    ((ch1 > '9' ? (ch1 - ('A' - 10)) : (ch1 - '0')) << 4) +
+                                     (ch2 > '9' ? (ch2 - ('A' - 10)) : (ch2 - '0'));
+                            }
+                            else {
+                                rs->checksum = NULL;
+                                break;
+                            }
+                        }
+                    }
+                }
+                else if (strcmp(&hdata[tag], "UR") == 0)
+                    rs->uri = &hdata[value];
+                else if (strcmp(&hdata[tag], "SP") == 0)
+                    rs->species = &hdata[value];
+                
+                ++st;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                return i;
+            tag = i;
+            st = 1;
+            break;
+        }
+    }
+    return st == 4 ? i : 0;
+}
+
+static unsigned ParseRG(BAMReadGroup *dst, unsigned const hlen, char hdata[])
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return 0;
+            ++st;
+            break;
+        case 2:
+            if (cc != ':')
+                continue;
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                unsigned j = i;
+
+                hdata[i] = '\0';
+
+                while (value < i && isspace(hdata[value]))
+                    ++value;
+                while (value < j && isspace(hdata[j - 1]))
+                    hdata[--j] = '\0';
+                
+                if ((hdata[value] == '\"' || hdata[value] == '\'') && hdata[value] == hdata[j - 1]) {
+                    ++value;
+                    hdata[j - 1] = '\0';
+                }
+                if (strcmp(&hdata[tag], "ID") == 0)
+                    dst->name = &hdata[value];
+                else if (strcmp(&hdata[tag], "SM") == 0)
+                    dst->sample = &hdata[value];
+                else if (strcmp(&hdata[tag], "LB") == 0)
+                    dst->library = &hdata[value];
+                else if (strcmp(&hdata[tag], "DS") == 0)
+                    dst->description = &hdata[value];
+                else if (strcmp(&hdata[tag], "PU") == 0)
+                    dst->unit = &hdata[value];
+                else if (strcmp(&hdata[tag], "PI") == 0)
+                    dst->insertSize = &hdata[value];
+                else if (strcmp(&hdata[tag], "CN") == 0)
+                    dst->center = &hdata[value];
+                else if (strcmp(&hdata[tag], "DT") == 0)
+                    dst->runDate = &hdata[value];
+                else if (strcmp(&hdata[tag], "PL") == 0)
+                    dst->platform = &hdata[value];
+                
+                ++st;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                return i;
+            tag = i;
+            st = 1;
+            break;
+        }
+    }
+    return st == 4 ? i : 0;
+}
+
+static bool ParseHeader(BAM_File *self, char hdata[], size_t hlen) {
+    unsigned rg = 0;
+    unsigned sq = 0;
+    unsigned i;
+    unsigned tag;
+    int st = 0;
+    int ws = 1;
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            if (cc == '@')
+                ++st;
+            else
+                return false;
+            break;
+        case 1:
+            if (isspace(cc))
+                return false;
+            tag = i;
+            ++st;
+            break;
+        case 2:
+            if (isspace(cc)) {
+                hdata[i] = '\0';
+                if (i - tag == 2) {
+                    if (strcmp(&hdata[tag], "HD") == 0) {
+                        unsigned const used = ParseHD(&self->version, hlen - i - 1, &hdata[i + 1]);
+                        if (used == 0) return false;
+                        i += used;
+                        st = 0;
+                        break;
+                    }
+                    if (strcmp(&hdata[tag], "SQ") == 0) {
+                        unsigned const used = ParseSQ(&self->refSeq[sq++], hlen - i - 1, &hdata[i + 1]);
+                        if (used == 0) return false;
+                        i += used;
+                        st = 0;
+                        break;
+                    }
+                    if (strcmp(&hdata[tag], "RG") == 0) {
+                        unsigned const used = ParseRG(&self->readGroup[rg++], hlen - i - 1, &hdata[i + 1]);
+                        if (used == 0) return false;
+                        i += used;
+                        st = 0;
+                        break;
+                    }
+                }
+                if (st == 2) {
+                    ++st;
+                    ws = 0;
+                }
+            }
+            else if (i - tag > 2)
+                ++st;
+            break;
+        case 3:
+            if (cc == '\r' || cc == '\n') {
+                st = 0;
+                ws = 1;
+            }
+            break;
+        }
+    }
+    return true;
+}
+
+static int64_t comp_ReadGroup(const void *A, const void *B, void *ignored) {
+    BAMReadGroup const *const a = A;
+    BAMReadGroup const *const b = B;
+
+    /* make null names sort to the bottom */
+    if (a->name == NULL || b->name == NULL)
+        return 0;
+    if (a->name == NULL)
+        return 1;
+    if (b->name == NULL)
+        return -1;
+    
+    /* make empty names sort to the bottom */
+    if (a->name[0] == '\0' || b->name[0] == '\0')
+        return 0;
+    if (a->name[0] == '\0')
+        return 1;
+    if (b->name[0] == '\0')
+        return -1;
+    
+    return strcmp(a->name, b->name);
+}
+
+static int64_t comp_RefSeqName(const void *A, const void *B, void *ignored) {
+    BAMRefSeq const *const a = A;
+    BAMRefSeq const *const b = B;
+    
+    /* make null names sort to the bottom */
+    if (a->name == NULL || b->name == NULL)
+        return 0;
+    if (a->name == NULL)
+        return 1;
+    if (b->name == NULL)
+        return -1;
+    
+    /* make empty names sort to the bottom */
+    if (a->name[0] == '\0' || b->name[0] == '\0')
+        return 0;
+    if (a->name[0] == '\0')
+        return 1;
+    if (b->name[0] == '\0')
+        return -1;
+    {
+        int const cmp = strcmp(a->name, b->name);
+        return cmp != 0 ? cmp : (int64_t)a->id - (int64_t)b->id;
+    }
+}
+
+static unsigned MeasureHeader(unsigned *RG, unsigned *SQ, char const text[])
+{
+    unsigned size;
+    unsigned cur = 0;
+
+    for (size = 0; ; ++size) {
+        int const ch = text[size];
+
+        if (ch == '\0')
+            return size;
+        if (ch == '\n') {
+            cur = 0;
+            continue;
+        }
+        if (++cur == 3) {
+            if (text[size - 1] == 'R' && ch == 'G') {
+                ++*RG;
+                continue;
+            }
+            if (text[size - 1] == 'S' && ch == 'Q') {
+                ++*SQ;
+                continue;
+            }
+        }
+    }
+}
+
+static rc_t ProcessHeaderText(BAM_File *self, char const text[], bool makeCopy)
+{
+    unsigned RG = 0;
+    unsigned SQ = 0;
+    unsigned const size = MeasureHeader(&RG, &SQ, text);
+    unsigned i;
+
+    if (SQ) {
+        self->refSeq = calloc(SQ, sizeof(self->refSeq[0]));
+        if (self->refSeq == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    self->refSeqs = SQ;
+
+    if (RG) {
+        self->readGroup = calloc(RG, sizeof(self->readGroup[0]));
+        if (self->readGroup == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    self->readGroups = RG;
+
+    if (makeCopy) {
+        void *const tmp = malloc(size + 1);
+        if (tmp == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+        self->header = tmp;  /* a const copy of the original */
+        memmove(tmp, text, size + 1);
+    }
+    else
+        self->header = text;
+    {
+    char *const copy = malloc(size + 1); /* an editable copy */
+    if (copy == NULL)
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    self->headerData1 = copy; /* so it's not leaked */
+    memmove(copy, text, size + 1);
+    
+    {
+    bool const parsed = ParseHeader(self, copy, size);
+    if (!parsed)
+        return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+    }
+    }
+    for (i = 0; i < self->readGroups; ++i)
+        self->readGroup[i].id = i;
+    
+    ksort(self->readGroup, self->readGroups, sizeof(self->readGroup[0]), comp_ReadGroup, NULL);
+    
+    /* remove read groups with missing and empty names */
+    for (i = self->readGroups; i != 0; ) {
+        BAMReadGroup const *const rg = &self->readGroup[--i];
+        char const *const name = rg->name;
+        if (name == NULL || name[0] == '\0') {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Read Group #$(rg) is missing ID in SAM header", "rg=%i", (int)rg->id));
+            --self->readGroups;
+        }
+    }
+    
+    /* check for duplicate read groups names */
+    for (i = 1; i < self->readGroups; ++i) {
+        BAMReadGroup const *const a = &self->readGroup[i - 1];
+        BAMReadGroup const *const b = &self->readGroup[i - 0];
+        
+        if (strcmp(a->name, b->name) == 0) {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Read Groups #$(r1) and #$(r2) have the same ID '$(id)' in SAM header",
+                                     "r1=%i,r2=%i,id=%s", (int)a->id, (int)b->id, a->name));
+        }
+    }
+
+    /* these id's are temporary, for reporting only
+     * in BAM, they'll get the id from the second part of the header
+     * in SAM, they'll get reassigned in alphabetical order
+     */
+    for (i = 0; i < self->refSeqs; ++i)
+        self->refSeq[i].id = i;
+    
+    ksort(self->refSeq, self->refSeqs, sizeof(self->refSeq[0]), comp_RefSeqName, NULL);
+    
+    /* remove references with missing and empty names */
+    for (i = self->refSeqs; i != 0; ) {
+        BAMRefSeq const *const ref = &self->refSeq[--i];
+        char const *const name = ref->name;
+        if (name == NULL || name[0] == '\0') {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Reference #$(rg) is missing name in SAM header", "rg=%i", (int)ref->id));
+            --self->refSeqs;
+        }
+    }
+    
+    /* check for and remove duplicate reference names */
+    for (i = self->refSeqs; i > 1; --i) {
+        BAMRefSeq *const a = &self->refSeq[i - 2];
+        BAMRefSeq *const b = &self->refSeq[i - 1];
+        
+        if (strcmp(a->name, b->name) == 0) {
+            (void)PLOGMSG(klogWarn, (klogWarn, "References #$(r1) and #$(r2) have the same name '$(id)' in SAM header",
+                                     "r1=%i,r2=%i,id=%s", (int)a->id, (int)b->id, a->name));
+            memmove(a, b, (self->refSeqs - i + 1) * sizeof(self->refSeq[0]));
+            --self->refSeqs;
+        }
+    }
+    
+    /* check for zero-length references */
+    for (i = 0; i != self->refSeqs; ++i) {
+        BAMRefSeq const *const rs = &self->refSeq[i];
+        
+        if (rs->length == 0)
+            (void)PLOGMSG(klogWarn, (klogWarn, "Reference '$(ref)' has zero length", "ref=%s", rs->name));
+    }
+
+    return 0;
+}
+
+static rc_t ReadMagic(BAM_File *self)
+{
+    uint8_t sig[4];
+    rc_t rc = BAM_FileReadn(self, 4, sig);
+    
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM signature: '%c%c%c' %u\n", sig[0], sig[1], sig[2], sig[3]));
+    if (rc == 0 && (sig[0] != 'B' || sig[1] != 'A' || sig[2] != 'M' || sig[3] != 1))
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcBadVersion);
+    return rc;
+}
+
+static rc_t ReadHeaders(BAM_File *self,
+                        char **headerText, size_t *headerTextLen,
+                        char **refData, unsigned *numrefs)
+{
+    unsigned hlen;
+    char *htxt = NULL;
+    unsigned nrefs;
+    char *rdat = NULL;
+    unsigned rdsz;
+    unsigned rdms;
+    unsigned i;
+    int32_t i32;
+    rc_t rc = BAM_FileReadI32(self, &i32);
+    
+    if (rc) return rc;
+
+    if (i32 < 0) {
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+        goto BAILOUT;
+    }
+    hlen = i32;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header text size: %u\n", hlen));
+
+    htxt = malloc(hlen + 1);
+    if (htxt == NULL) {
+        rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+        goto BAILOUT;
+    }
+    
+    rc = BAM_FileReadn(self, hlen, (uint8_t *)htxt); if (rc) goto BAILOUT;
+    htxt[hlen] = '\0';
+
+    rc = BAM_FileReadI32(self, &i32); if (rc) goto BAILOUT;
+    if (i32 < 0) {
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+        goto BAILOUT;
+    }
+    nrefs = i32;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference count: %u\n", nrefs));
+    if (nrefs) {
+        rdms = nrefs * 16;
+        if (rdms < 4096)
+            rdms = 4096;
+        rdat = malloc(rdms);
+        if (rdat == NULL) {
+            rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+            goto BAILOUT;
+        }
+        for (i = rdsz = 0; i < nrefs; ++i) {
+            rc = BAM_FileReadI32(self, &i32); if (rc) goto BAILOUT;
+            if (i32 <= 0) {
+                rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+                goto BAILOUT;
+            }
+            if (rdsz + i32 + 8 > rdms) {
+                void *tmp;
+                
+                do { rdms <<= 1; } while (rdsz + i32 + 8 > rdms);
+                tmp = realloc(rdat, rdms);
+                if (tmp == NULL) {
+                    rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+                    goto BAILOUT;
+                }
+                rdat = tmp;
+            }
+            memmove(rdat + rdsz, &i32, 4);
+            rdsz += 4;
+            rc = BAM_FileReadn(self, i32, (uint8_t *)&rdat[rdsz]); if (rc) goto BAILOUT;
+            rdsz += i32;
+            rc = BAM_FileReadI32(self, &i32); if (rc) goto BAILOUT;
+            memmove(rdat + rdsz, &i32, 4);
+            rdsz += 4;
+        }
+    }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference size: %u\n", rdsz));
+    
+    *headerText = htxt;
+    *headerTextLen = hlen;
+    *refData = rdat;
+    *numrefs = nrefs;
+    return 0;
+    
+BAILOUT:
+    if (htxt)
+        free(htxt);
+    if (rdat)
+        free(rdat);
+    
+    return rc;
+}
+
+static unsigned FindRefSeqByName(char const name[], bool match, unsigned const N, BAMRefSeq const refSeq[])
+{
+    unsigned f = 0;
+    unsigned e = N;
+        
+    while (f < e) {
+        unsigned const m = f + ((e - f) >> 1);
+        int const cmp = strcmp(name, refSeq[m].name);
+            
+        if (cmp < 0)
+            e = m;
+        else if (cmp > 0)
+            f = m + 1;
+        else
+            return m;
+    }
+    return match ? N : f;
+}
+
+static void FindAndSetupRefSeq(BAMRefSeq *rs, unsigned const refSeqs, BAMRefSeq const refSeq[])
+{
+    unsigned const fnd = FindRefSeqByName(rs->name, true, refSeqs, refSeq);
+    if (fnd != refSeqs) {
+        rs->assemblyId = refSeq[fnd].assemblyId;
+        rs->uri = refSeq[fnd].uri;
+        rs->species = refSeq[fnd].species;
+        if (refSeq[fnd].checksum) {
+            rs->checksum = &rs->checksum_array[0];
+            memmove(rs->checksum_array, refSeq[fnd].checksum_array, 16);
+        }
+        else
+            rs->checksum = NULL;
+    }
+}
+
+static rc_t ProcessBAMHeader(BAM_File *self, char const headerText[])
+{
+    unsigned i;
+    unsigned cp;
+    char *htxt;
+    char *rdat;
+    size_t hlen;
+    unsigned nrefs;
+    BAMRefSeq *refSeq;
+    rc_t rc = ReadMagic(self);
+
+    if (rc) return rc;
+
+    rc = ReadHeaders(self, &htxt, &hlen, &rdat, &nrefs);
+    if (rc) return rc;
+    
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Data records start at: %lu+%u\n", self->fpos_cur, self->bufCurrent));
+
+    if (nrefs) {
+        refSeq = calloc(nrefs, sizeof(self->refSeq[0]));
+        if (refSeq == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+
+    if (headerText) {
+        free(htxt);
+        rc = ProcessHeaderText(self, headerText, true);
+    }
+    else
+        rc = ProcessHeaderText(self, htxt, false);
+
+    if (rc) return rc;
+        
+    for (i = cp = 0; i < nrefs; ++i) {
+        unsigned const nlen = LE2HUI32(rdat + cp);
+        char *const name = rdat + cp + 4;
+        unsigned const rlen = LE2HUI32(rdat + cp + nlen + 4);
+        
+        cp += nlen + 8;
+        name[nlen] = '\0';
+
+        refSeq[i].id = i;
+        refSeq[i].name = name;
+        refSeq[i].length = rlen;
+        FindAndSetupRefSeq(&refSeq[i], self->refSeqs, self->refSeq);
+    }
+    free(self->refSeq);
+    self->refSeq = refSeq;
+    self->refSeqs = nrefs;
+    self->headerData2 = rdat; /* so it's not leaked */
+    
+    return 0;
+}
+
+static rc_t ProcessSAMHeader(BAM_File *self, char const substitute[])
+{
+    SAMFile *const file = &self->file.sam;
+    size_t headerSize = 0;
+    char *headerText = NULL;
+    rc_t rc;
+    int st = 0;
+    
+    for ( ; ; ) {
+        void *const tmp = headerText;
+        int const ch = SAMFileRead1(file);
+        
+        if (ch == -1)
+            return SAMFileLastError(file);
+        
+        if (st == 0) {
+            if (ch != '@') {
+                SAMFilePutBack(file, ch);
+                break;
+            }
+            st = 1;
+        }
+        headerText = realloc(headerText, headerSize + 2);
+        if (headerText == NULL) {
+            free(tmp);
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+        }
+        headerText[headerSize++] = ch;
+        headerText[headerSize] = '\0';
+        if (ch == '\n')
+            st = 0;
+    }
+
+    if (substitute)
+        rc = ProcessHeaderText(self, substitute, true);
+    else if (headerText)
+        rc = ProcessHeaderText(self, headerText, false);
+    else {
+        rc = RC(rcAlign, rcFile, rcConstructing, rcHeader, rcNotFound);
+        (void)LOGERR(klogErr, rc, "SAM header required");
+    }
+    if (rc == 0) {
+        unsigned i;
+
+        for (i = 0; i < self->refSeqs; ++i)
+            self->refSeq[i].id = i;
+    }
+    return rc;
+}
+
+/* MARK: BAM File destructor */
+
+static void BAM_FileWhack(BAM_File *self) {
+    if (self->refSeqs > 0 && self->refSeq)
+        free(self->refSeq);
+    if (self->readGroup)
+        free(self->readGroup);
+    if (self->header)
+        free((void *)self->header);
+    if (self->headerData1)
+        free((void *)self->headerData1);
+    if (self->headerData2)
+        free((void *)self->headerData2);
+    if (self->nocopy)
+        free(self->nocopy);
+    if (self->vt.FileWhack)
+        self->vt.FileWhack(&self->file);
+    KFileRelease(self->defer);
+    BufferedFileWhack(&self->file.bam.file);
+}
+
+/* MARK: BAM File constructors */
+
+/* file is retained */
+static rc_t BAM_FileMakeWithKFileAndHeader(BAM_File **cself,
+                                           KFile const *file,
+                                           char const *headerText)
+{
+    BAM_File *self = calloc(1, sizeof(*self));
+    rc_t rc;
+    
+    if (self == NULL)
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    
+    rc = BufferedFileInit(&self->file.bam.file, file);
+    if (rc) {
+        free(self);
+        return rc;
+    }
+    
+    rc = BGZFileInit(&self->file.bam, &self->vt);
+    if (rc == 0) {
+        rc = ProcessBAMHeader(self, headerText);
+        if (rc == 0) {
+            *cself = self;
+            return 0;
+        }
+    }
+    BGZFileWhack(&self->file.bam);
+
+    self->file.sam.file.bpos = 0;
+    rc = SAMFileInit(&self->file.sam, &self->vt);
+    if (rc == 0) {
+        self->isSAM = true;
+        rc = ProcessSAMHeader(self, headerText);
+        if (rc == 0) {
+            *cself = self;
+            return 0;
+        }
+    }
+    BufferedFileWhack(&self->file.sam.file);
+    free(self);
+
+    return rc;
+}
+
+rc_t BAM_FileMake(const BAM_File **cself,
+                  KFile *defer,
+                  char const headerText[],
+                  char const path[], ... )
+{
+    KDirectory *dir;
+    va_list args;
+    rc_t rc;
+    const KFile *kf;
+    
+    if (cself == NULL)
+        return RC(rcAlign, rcFile, rcOpening, rcParam, rcNull);
+    *cself = NULL;
+
+    if (strcmp(path, "/dev/stdin") == 0) {
+        rc = KFileMakeStdIn(&kf);
+    }
+    else {
+        rc = KDirectoryNativeDir(&dir);
+        if (rc) return rc;
+        va_start(args, path);
+        rc = KDirectoryVOpenFileRead(dir, &kf, path, args);
+        va_end(args);
+        KDirectoryRelease(dir);
+    }
+    if (rc == 0) {
+        BAM_File *self = NULL;
+        rc = BAM_FileMakeWithKFileAndHeader(&self, kf, headerText);
+        if (rc == 0) {
+            assert(self != NULL);
+            KFileAddRef(defer);
+            self->defer = defer;
+        }
+        *cself = self;
+        KFileRelease(kf);
+    }
+    return rc;
+}
+
+/* MARK: BAM File ref-counting */
+
+rc_t BAM_FileAddRef(const BAM_File *cself) {
+    return 0;
+}
+
+rc_t BAM_FileRelease(const BAM_File *cself) {
+    BAM_File *self = (BAM_File *)cself;
+    
+    if (cself != NULL) {
+        BAM_FileWhack(self);
+        free(self);
+    }
+    return 0;
+}
+
+/* MARK: BAM File positioning */
+
+float BAM_FileGetProportionalPosition(const BAM_File *self)
+{
+    return self->vt.FileProPos(&self->file);
+}
+
+rc_t BAM_FileGetPosition(const BAM_File *self, BAM_FilePosition *pos) {
+    *pos = (self->fpos_cur << 16) | self->bufCurrent;
+    return 0;
+}
+
+static void BAM_FileAdvance(BAM_File *const self, unsigned distance)
+{
+    self->bufCurrent += distance;
+    if (self->bufCurrent == self->bufSize) {
+        self->fpos_cur = self->vt.FileGetPos(&self->file);
+        self->bufCurrent = 0;
+        self->bufSize = 0;
+    }
+}
+
+/* MARK: BAM Alignment contruction */
+
+static int TagTypeSize(int const type)
+{
+    switch (type) {
+        case dt_ASCII:      /* A */
+        case dt_INT8:       /* c */
+        case dt_UINT8:      /* C */
+            return 1;
+
+        case dt_INT16:      /* s */
+        case dt_UINT16:     /* S */
+            return 2;
+
+        case dt_INT:        /* i */
+        case dt_UINT:       /* I */
+        case dt_FLOAT32:    /* f */
+            return 4;
+#if 0
+        case dt_FLOAT64:    /* d */
+            return 8;
+#endif
+        case dt_CSTRING:    /* Z */
+        case dt_HEXSTRING:  /* H */
+            return -'S';
+
+        case dt_NUM_ARRAY:  /* B */
+            return -'A';
+    }
+    return 0;
+}
+
+static void ColorCheck(BAM_Alignment *const self, char const tag[2], unsigned const len)
+{
+    if (tag[0] == 'C' && len != 0) {
+        int const ch = tag[1];
+        int const flag = ch == 'Q' ? 2 : ch == 'S' ? 1 : 0;
+        
+        if (flag)
+            self->hasColor ^= (len << 2) | flag;
+    }
+}
+
+static rc_t ParseOptData(BAM_Alignment *const self, size_t const maxsize,
+                         size_t const xtra, size_t const datasize)
+{
+    size_t const maxExtra = (maxsize - (sizeof(*self) - sizeof(self->extra))) / sizeof(self->extra[0]);
+    char const *const base = (char const *)self->data->raw;
+    unsigned i = 0;
+    unsigned len;
+    unsigned offset;
+    
+    self->numExtra = 0;
+    for (len = 0, offset = (unsigned)xtra; offset < datasize; offset += len) {
+        int const valuelen1 = TagTypeSize(base[offset + 2]);
+        unsigned valuelen;
+        
+        if (valuelen1 < 0) {
+            char const *const value = &base[offset + 3];
+            
+            if (-valuelen1 == 'S') {
+                valuelen = 0;
+                while (value[valuelen] != '\0') {
+                    ++valuelen;
+                    if (offset + valuelen >= datasize) {
+                        rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                        return rc;
+                    }
+                }
+                ColorCheck(self, base + offset, valuelen);
+                ++valuelen;
+            }
+            else {
+                int const elem_size = TagTypeSize(value[0]);
+                
+                assert(-valuelen1 == 'A');
+                if (elem_size <= 0) {
+                    rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+                    return rc;
+                }
+                else {
+                    int const elem_count = LE2HI32(&value[1]);
+                    
+                    valuelen = elem_size * elem_count + 1 + 4;
+                    if (offset + valuelen >= datasize) {
+                        rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                        return rc;
+                    }
+                }
+            }
+        }
+        else if (valuelen1 == 0) {
+            rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+            return rc;
+        }
+        else
+            valuelen = valuelen1;
+        
+        len = valuelen + 3;
+        if (i < maxExtra) {
+            self->extra[i].offset = offset;
+            self->extra[i].size   = len;
+        }
+        ++i;
+    }
+    self->numExtra = i;
+    if (2 <= i && i <= maxExtra)
+        ksort(self->extra, i, sizeof(self->extra[0]), OptTag_sort, self);
+
+    return 0;
+}
+
+static rc_t ParseOptDataLog(BAM_Alignment *const self, unsigned const maxsize,
+                            unsigned const xtra, unsigned const datasize)
+{
+    unsigned const maxExtra = (maxsize - (sizeof(*self) - sizeof(self->extra))) / sizeof(self->extra[0]);
+    char const *const base = (char const *)self->data->raw;
+    unsigned i = 0;
+    unsigned len;
+    unsigned offset;
+    
+    self->numExtra = 0;
+    for (len = 0, offset = (unsigned)xtra; offset < datasize; offset += len) {
+        int const type = base[offset + 2];
+        int const valuelen1 = TagTypeSize(type);
+        unsigned valuelen;
+        
+        if (valuelen1 > 0)
+            valuelen = valuelen1;
+        else if (valuelen1 < 0) {
+            char const *const value = &base[offset + 3];
+            
+            if (-valuelen1 == 'S') {
+                valuelen = 0;
+                while (value[valuelen] != '\0') {
+                    ++valuelen;
+                    if (offset + valuelen >= datasize) {
+                        rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                        (void)LOGERR(klogErr, rc,
+                                     "Parsing BAM optional fields: "
+                                     "unterminated string");
+                        return rc;
+                    }
+                }
+                ColorCheck(self, base + offset, valuelen);
+                ++valuelen;
+            }
+            else {
+                int const elem_type = value[0];
+                int const elem_size = TagTypeSize(elem_type);
+                
+                assert(-valuelen1 == 'A');
+                if (elem_size <= 0) {
+                    rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+                    (void)LOGERR(klogErr, rc,
+                                 "Parsing BAM optional fields: "
+                                 "unknown array type");
+                    return rc;
+                }
+                else {
+                    int const elem_count = LE2HI32(&value[1]);
+                    
+                    valuelen = elem_size * elem_count + 1 + 4;
+                    if (offset + valuelen >= datasize) {
+                        rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                        (void)LOGERR(klogErr, rc,
+                                     "Parsing BAM optional fields: "
+                                     "array too big");
+                        return rc;
+                    }
+                }
+            }
+        }
+        else {
+            rc_t const rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+            (void)LOGERR(klogErr, rc,
+                                    "Parsing BAM optional fields: "
+                                    "unknown type");
+            return rc;
+        }
+        
+        len = valuelen + 3;
+        if (i < maxExtra) {
+            self->extra[i].offset = offset;
+            self->extra[i].size   = len;
+        }
+        ++i;
+    }
+    self->numExtra = i;
+    if (2 <= i && i <= maxExtra)
+        ksort(self->extra, i, sizeof(self->extra[0]), OptTag_sort, self);
+    
+    return 0;
+}
+
+static unsigned BAM_AlignmentSize(unsigned const max_extra_tags)
+{
+    BAM_Alignment const *const y = NULL;
+    
+    return sizeof(*y) + (max_extra_tags ? max_extra_tags - 1 : 0) * sizeof(y->extra);
+}
+
+static unsigned BAM_AlignmentSetOffsets(BAM_Alignment *const self)
+{
+    unsigned const nameLen = getReadNameLength(self);
+    unsigned const cigCnt  = getCigarCount(self);
+    unsigned const readLen = getReadLen(self);
+    unsigned const cigar   = (unsigned)(&((struct bam_alignment_s const *)NULL)->read_name[nameLen] - (const char *)NULL);
+    unsigned const seq     = cigar + 4 * cigCnt;
+    unsigned const qual    = seq + (readLen + 1) / 2;
+    unsigned const xtra    = qual + readLen;
+    
+    self->cigar = cigar;
+    self->seq   = seq;
+    self->qual  = qual;
+    
+    return xtra;
+}
+
+static bool BAM_AlignmentInit(BAM_Alignment *const self, unsigned const maxsize,
+                             unsigned const datasize, void const *const data)
+{
+    memset(self, 0, sizeof(*self));
+    self->data = data;
+    self->datasize = datasize;
+    {
+        unsigned const xtra = BAM_AlignmentSetOffsets(self);
+        
+        if (   datasize >= xtra
+            && datasize >= self->cigar
+            && datasize >= self->seq
+            && datasize >= self->qual)
+        {
+            rc_t const rc = ParseOptData(self, maxsize, xtra, datasize);
+
+            if (rc == 0)
+                return true;
+        }
+        return false;
+    }
+}
+
+static void BAM_AlignmentDebugPrint(BAM_Alignment const *const self)
+{
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("{"
+                                                    "\"BAM record\": "
+                                                    "{ "
+                                                        "\"size\": %u, "
+                                                        "\"name length\": %u, "
+                                                        "\"cigar count\": %u, "
+                                                        "\"read length\": %u, "
+                                                        "\"extra count\": %u "
+                                                    "}"
+                                                "}\n",
+                                                (unsigned)self->datasize,
+                                                (unsigned)getReadNameLength(self),
+                                                (unsigned)getCigarCount(self),
+                                                (unsigned)getReadLen(self),
+                                                (unsigned)self->numExtra));
+}
+
+static bool BAM_AlignmentInitLog(BAM_Alignment *const self, unsigned const maxsize,
+                                unsigned const datasize, void const *const data)
+{
+    memset(self, 0, sizeof(*self));
+    self->data = data;
+    self->datasize = datasize;
+    {
+        unsigned const xtra = BAM_AlignmentSetOffsets(self);
+        
+        if (   datasize >= xtra
+            && datasize >= self->cigar
+            && datasize >= self->seq
+            && datasize >= self->qual)
+        {
+            rc_t const rc = ParseOptDataLog(self, maxsize, xtra, datasize);
+            
+            if (rc == 0) {
+                BAM_AlignmentDebugPrint(self);
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+static void BAM_AlignmentLogParseError(BAM_Alignment const *self)
+{
+    char const *const reason = self->cigar > self->datasize ? "BAM Record CIGAR too long"
+                             : self->seq   > self->datasize ? "BAM Record SEQ too long"
+                             : self->qual  > self->datasize ? "BAM Record QUAL too long"
+                             : self->qual + getReadLen(self) > self->datasize ? "BAM Record EXTRA too long"
+                             : "BAM Record EXTRA parsing failure";
+    
+    LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), reason);
+}
+
+/* MARK: BAM Alignment readers */
+
+/* returns
+ *  (rcAlign, rcFile, rcReading, rcBuffer, rcNotAvailable)
+ * or
+ *  (rcAlign, rcFile, rcReading, rcBuffer, rcInsufficient)
+ * if should read with copy
+ */
+static
+rc_t BAM_FileReadNoCopy(BAM_File *const self, unsigned actsize[], BAM_Alignment rhs[],
+                       unsigned const maxsize)
+{
+    unsigned const maxPeek = BAM_FileMaxPeek(self);
+    bool isgood;
+
+    *actsize = 0;
+    
+    if (maxPeek == 0) {
+        rc_t const rc = BAM_FileFillBuffer(self);
+
+        if (rc == 0)
+            return BAM_FileReadNoCopy(self, actsize, rhs, maxsize);
+
+        if ((int)GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient)
+        {
+            self->eof = true;
+            return SILENT_RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
+        }
+        return rc;
+    }
+    if (maxPeek < 4)
+        return SILENT_RC(rcAlign, rcFile, rcReading, rcBuffer, rcNotAvailable);
+    else {
+        int32_t const i32 = BAM_FilePeekI32(self);
+
+        if (i32 <= 0)
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        
+        if (maxPeek < i32 + 4)
+        return SILENT_RC(rcAlign, rcFile, rcReading, rcBuffer, rcNotAvailable);
+
+        isgood = BAM_AlignmentInitLog(rhs, maxsize, i32, BAM_FilePeek(self, 4));
+        rhs[0].parent = self;
+    }
+    *actsize = BAM_AlignmentSize(rhs[0].numExtra);
+    if (isgood && *actsize > maxsize)
+        return SILENT_RC(rcAlign, rcFile, rcReading, rcBuffer, rcInsufficient);
+
+    BAM_FileAdvance(self, 4 + rhs->datasize);
+    return isgood ? 0 : RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
+}
+
+static
+unsigned BAM_AlignmentSizeFromData(unsigned const datasize, void const *data)
+{
+    BAM_Alignment temp;
+    
+    BAM_AlignmentInit(&temp, sizeof(temp), datasize, data);
+    
+    return BAM_AlignmentSize(temp.numExtra);
+}
+
+static bool BAM_AlignmentIsEmpty(BAM_Alignment const *const self)
+{
+    if (getReadNameLength(self) == 0)
+        return true;
+    if (getReadName(self)[0] == '\0')
+        return true;
+    if (self->hasColor == 3)
+        return false;
+    if (getReadLen(self) != 0)
+        return false;
+    if (getCigarCount(self) != 0)
+        return false;
+    return true;
+}
+
+static
+rc_t BAM_FileReadCopy(BAM_File *const self, BAM_Alignment const *rslt[], bool const log)
+{
+    void *storage;
+    void const *data;
+    unsigned datasize;
+    rc_t rc;
+    
+    rslt[0] = NULL;
+    {
+        int32_t i32;
+
+        rc = BAM_FileReadI32(self, &i32);
+        if ( rc != 0 )
+        {
+            if ((int)GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient)
+            {
+                self->eof = true;
+                rc = SILENT_RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
+            }
+            return rc;
+        }
+        if (i32 <= 0)
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        
+        datasize = i32;
+    }
+    if (BAM_FileMaxPeek(self) < datasize) {
+        data = storage = malloc(datasize);
+        if (storage == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+        
+        rc = BAM_FileReadn(self, datasize, storage);
+    }
+    else {
+        storage = NULL;
+        data = (bam_alignment *)&self->buffer[self->bufCurrent];
+        
+        BAM_FileAdvance(self, datasize);
+    }
+    if (rc == 0) {
+        unsigned const rsltsize = BAM_AlignmentSizeFromData(datasize, data);
+        BAM_Alignment *const y = malloc(rsltsize);
+
+        if (y) {
+            if ((log ? BAM_AlignmentInitLog : BAM_AlignmentInit)(y, rsltsize, datasize, data)) {
+                if (storage != NULL)
+                    y->storage = storage;
+
+                y->parent = self;
+                rslt[0] = y;
+
+                if (BAM_AlignmentIsEmpty(y))
+                    return RC(rcAlign, rcFile, rcReading, rcRow, rcEmpty);
+                return 0;
+            }
+            rc = RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
+            free(y);
+        }
+        else
+            rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+    }
+    free(storage);
+
+    return rc;
+}
+
+/* MARK: SAM code */
+
+static void SAM2BAM_ConvertShort(void *const Dst, int value)
+{
+    uint8_t *const dst = Dst;
+    dst[0] = (uint8_t)(value >> 0);
+    dst[1] = (uint8_t)(value >> 8);
+}
+
+static void SAM2BAM_ConvertInt(void *const Dst, int value)
+{
+    uint8_t *const dst = Dst;
+    dst[0] = (uint8_t)(value >>  0);
+    dst[1] = (uint8_t)(value >>  8);
+    dst[2] = (uint8_t)(value >> 16);
+    dst[3] = (uint8_t)(value >> 24);
+}
+
+static int SAM2BAM_CIGAR_OpCount(char const cigar[])
+{
+    unsigned i;
+    unsigned n = 0;
+    int st = 0;
+    
+    if (cigar[0] == '*' && cigar[1] == '\0')
+        return 0;
+    
+    for (i = 0; ; ++i) {
+        int const ch = cigar[i];
+        
+        if (ch == '\0')
+            break;
+
+        if (st == 0) {
+            if (!isdigit(ch))
+                return -1;
+            st = 1;
+        }
+        else if (!isdigit(ch)) {
+            ++n;
+            st = 0;
+        }
+    }
+    return st == 0 ? n : -1;
+}
+
+static int SAM2BAM_ConvertCIGAR1(uint8_t dst[4], char const value[])
+{
+    int len = 0;
+    int code = 0;
+    unsigned i = 0;
+    
+    if (value[0] == '\0')
+        return 0;
+    
+    for ( ; ; ) {
+        int const ch = value[i++];
+        
+        if (!isdigit(ch)) {
+            switch (ch) {
+            case 'M':
+                code = 0;
+                break;
+            case 'I':
+                code = 1;
+                break;
+            case 'D':
+                code = 2;
+                break;
+            case 'N':
+                code = 3;
+                break;
+            case 'S':
+                code = 4;
+                break;
+            case 'H':
+                code = 5;
+                break;
+            case 'P':
+                code = 6;
+                break;
+            case '=':
+                code = 7;
+                break;
+            case 'X':
+                code = 8;
+                break;
+            default:
+                return -1;
+            }
+            break;
+        }
+        len = (len * 10) + (ch - '0');
+        if (len >= (1 << 24))
+            return -2;
+    }
+    SAM2BAM_ConvertInt(dst, (len << 4) | code);
+    return i;
+}
+
+static rc_t SAM2BAM_ConvertCIGAR(unsigned const insize, void /* inout */ *const data, void const *const endp)
+{
+    char *const value = data;
+    uint8_t *const dst = (void *)(value + insize);
+    unsigned j = 0;
+    unsigned i;
+
+    for (i = 0; i < insize; ++j) {
+        if ((void const *)(dst + j * 4 + 4) >= endp)
+            return RC(rcAlign, rcFile, rcReading, rcBuffer, rcInsufficient);
+        {
+        int const k = SAM2BAM_ConvertCIGAR1(dst + j * 4, value + i);
+        if (k > 0)
+            i += k;
+        else
+            return k == 0 ? 0 : RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        }
+    }
+    memmove(data, dst, 4 * j);
+    return 0;
+}
+
+static int SAM2BAM_ConvertBase(int base)
+{
+    static char const tr[] = {
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,0x0, -1, -1,
+        -1,0x1,0xE,0x2,0xD, -1, -1,0x4,0xB, -1, -1,0xC, -1,0x3,0xF, -1,
+        -1, -1,0x5,0x6,0x8, -1,0x7,0x9, -1,0xA, -1, -1, -1, -1, -1, -1,
+        -1,0x1,0xE,0x2,0xD, -1, -1,0x4,0xB, -1, -1,0xC, -1,0x3,0xF, -1,
+        -1, -1,0x5,0x6,0x8, -1,0x7,0x9, -1,0xA, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+    };
+    return tr[base];
+}
+
+static rc_t SAM2BAM_ConvertSEQ(unsigned const insize, void /* inout */ *const data, void const *const endp)
+{
+    char const *const value = data;
+    uint8_t *const dst = data;
+    unsigned const n = insize & ~((unsigned)1);
+    unsigned j = 0;
+    unsigned i;
+
+    for (i = 0; i < n; i += 2, ++j) {
+        int const hi = SAM2BAM_ConvertBase(value[i + 0]);
+        int const lo = SAM2BAM_ConvertBase(value[i + 1]);
+        
+        if (hi < 0 || lo < 0)
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+
+        dst[j] = (hi << 4) | lo;
+    }
+    if (n != insize) {
+        int const hi = SAM2BAM_ConvertBase(value[n]);
+        int const lo = 0;
+        
+        if (hi < 0 || lo < 0)
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        
+        dst[j] = (hi << 4) | lo;
+    }
+    return 0;
+}
+
+static rc_t SAM2BAM_ConvertQUAL(unsigned const insize, void /* inout */ *const data, void const *const endp)
+{
+    char const *const value = data;
+    uint8_t *const dst = data;
+    unsigned i;
+
+    for (i = 0; i < insize; ++i) {
+        int const ch = value[i];
+        
+        if (ch < '!' || ch > '~')
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        dst[i] = ch - 33;
+    }
+    return 0;
+}
+
+static int SAM2BAM_ScanValue(void *const dst, char const *src, bool isFloat, bool isArray)
+{
+    int i = 0;
+    int sgn = 0;
+    uint64_t mantissa = 0;
+    int shift = 0;
+    int exponent = 0;
+    int st = 0;
+
+    if (isArray) {
+        int const ch = src[i++];
+        if (ch != ',')
+            return -1;
+    }
+    for ( ; ; ++i) {
+        int const ch = src[i];
+        int const value = ch - '0';
+
+        if (ch == '\0')
+            break;
+        if (isArray && ch == ',')
+            break;
+        switch (st) {
+        case 0:
+            ++st;
+            if (ch == '-') {
+                sgn = -1;
+                break;
+            }
+            else if (ch == '+') {
+                sgn = 1;
+                break;
+            }
+            /* fallthrough; */
+        case 1:
+            if (ch == '.') {
+                st = 2;
+                break;
+            }
+            if (ch == 'e' || ch == 'E') {
+                st = 3;
+                break;
+            }
+            if (value < 0 || value > 9)
+                return -1;
+            mantissa = mantissa * 10 + value;
+            break;
+        case 2:
+            if (ch == 'e' || ch == 'E') {
+                st = 3;
+                break;
+            }
+            if (value < 0 || value > 9)
+                return -1;
+            mantissa = mantissa * 10 + value;
+            ++shift;
+            break;
+        case 3:
+            ++st;
+            if (ch == '-') {
+                ++st;
+                break;
+            }
+            else if (ch == '+') {
+                break;
+            }
+            /* fallthrough; */
+        case 4:
+            if (value < 0 || value > 9)
+                return -1;
+            exponent = exponent * 10 + value;
+            break;
+        case 5:
+            if (value < 0 || value > 9)
+                return -1;
+            exponent = exponent * 10 - value;
+            break;
+        }
+    }
+    {
+        double const value = mantissa * pow(10, exponent - shift) * (sgn ? sgn : 1);
+        union { int i; float f; } x;
+        if (isFloat)
+            x.f = value;
+        else
+            x.i = floor(value);
+        SAM2BAM_ConvertInt(dst, x.i);
+    }
+    return i;
+}
+
+static int SAM2BAM_ConvertEXTRA(unsigned const insize, void /* inout */ *const data, void const *const endp)
+{
+    if (insize < 5) /* XX:T:\0 */
+        return -1;
+    {
+        char const *const src = data;
+
+        if (src[2] != ':' || src[4] != ':')
+            return -3;
+        {
+            int const type = src[3];
+            char *const dst = data;
+
+            dst[2] = type;
+
+            switch (type) {
+            case 'A':
+                dst[3] = src[5];
+                return 4;
+            case 'H':
+            case 'Z':
+                memmove(dst + 3, src + 5, insize - 5);
+                dst[insize - 2] = '\0';
+                return insize - 1;
+            case 'i':
+            case 'f': {
+                if ((void const *)&dst[7] >= endp)
+                    return -2;
+                {
+                    int const n = SAM2BAM_ScanValue(&dst[3], src + 5, type == 'f', false);
+                    return (n < 0 || n + 5 != insize) ? -4 : 7;
+                }
+            }
+            case 'B':
+                break;
+            default:
+                return -3;
+            }
+
+            if (insize < 8) /* XX:B:T,x\0 */
+                return -1;
+
+            switch (src[5]) {
+            case 'c':
+            case 'C':
+            case 's':
+            case 'S':
+            case 'i':
+            case 'I':
+            case 'f':
+                break;
+            default:
+                return -3;
+            }
+            {
+                uint8_t *const scratch = (void *)(src + insize);
+                int const subtype = src[5] == 'f' ? 'f' : 'i';
+                unsigned i;
+                unsigned j;
+
+                dst[3] = subtype;
+                for (i = 6, j = 0; i < insize; ++j) {
+                    if ((void const *)(scratch + 4 * j + 4) >= endp)
+                        return -2;
+                    {
+                        int const n = SAM2BAM_ScanValue(scratch + 4 * j, src + i, subtype == 'f', true);
+                        if (n < 0)
+                            return -4;
+                        i += n;
+                    }
+                }
+                SAM2BAM_ConvertInt(&dst[4], j);
+                memmove(&dst[8], scratch, 4 * j);
+                return 8 + 4 * j;
+            }
+        }
+    }
+}
+
+static rc_t BAM_FileReadSAM(BAM_File *const self, BAM_Alignment const **const rslt)
+{
+    void const *const endp = self->buffer + sizeof(self->buffer);
+    struct bam_alignment_s *raw = (void *)self->buffer;
+    struct {
+        int namelen;
+        int FLAG;
+        int RNAME;
+        int POS;
+        int MAPQ;
+        int cigars;
+        int RNEXT;
+        int PNEXT;
+        int TLEN;
+        
+        int readlen;
+        
+        char *QNAME;
+        uint32_t *CIGAR; /* probably not aligned */
+        uint8_t *SEQ;
+        uint8_t *QUAL;
+        char *EXTRA;
+    } temp;
+    unsigned field = 1;
+    char *scratch = &raw->read_name[0];
+    int *intScratch = NULL;
+    int sgn = 1;
+    unsigned i = 0;
+
+    memset(raw, 0, sizeof(*raw));
+    memset(&temp, 0, sizeof(temp));
+    temp.QNAME = scratch;
+    
+    for ( ; ; ) {
+        int const ch = SAMFileRead1(&self->file.sam);
+        if (ch < 0) {
+            rc_t const rc = SAMFileLastError(&self->file.sam);
+            return (i == 0 && field == 1 && (rc == 0 || GetRCState(rc) == rcInsufficient)) ? SILENT_RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound) : rc;
+        }
+        if ((void const *)&scratch[i] >= endp)
+            return RC(rcAlign, rcFile, rcReading, rcBuffer, rcInsufficient);
+
+        if (ch == '\n' && i > 0 && scratch[i - 1] == '\r') {
+            /* handle \r\n line endings */
+            --i;
+        }
+        if (!(ch == '\t' || ch == '\n')) {
+            if (field != 0) {
+                if (intScratch == NULL) {
+                    scratch[i] = ch;
+                }
+                else {
+                    int const value = ch - '0';
+                    if (ch == '-' && i == 0) {
+                        sgn = -1;
+                    }
+                    else if (ch == '-' && i == 0) {
+                        sgn = 1;
+                    }
+                    else {
+                        if (value < 0 || value > 9) {
+                            LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error parsing integer field");
+                            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                        }
+                        *intScratch = *intScratch * 10 + value * sgn;
+                    }
+                }
+            }
+            ++i;
+            continue;
+        }
+        if (intScratch == NULL)
+            scratch[i] = '\0';
+        else {
+            intScratch = NULL;
+            sgn = 1;
+        }
+        switch (field) {
+            case 0:
+                if (ch == '\n')
+                    return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                break;
+            case 1:
+                if (i == 1 && scratch[0] == '*') {
+                    temp.namelen = 0;
+                }
+                else {
+                    temp.namelen = i + 1; /* includes NULL terminator */
+                    scratch += i + 1;     /* don't want to overwrite it */
+                    if (temp.namelen > 255) {
+                        LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error QNAME is too long");
+                        field = 0;
+                    }
+                }
+                temp.CIGAR = (void *)scratch;
+                intScratch = &temp.FLAG;
+                break;
+            case 2:
+                break;
+            case 3:
+                if (i == 1 && scratch[0] == '*')
+                    temp.RNAME = -1;
+                else {
+                    unsigned const id = FindRefSeqByName(scratch, true, self->refSeqs, self->refSeq);
+                    if (id < self->refSeqs)
+                        temp.RNAME = id;
+                    else {
+                        LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record missing reference");
+                        field = 0;
+                    }
+                }
+                intScratch = &temp.POS;
+                break;
+            case 4:
+                intScratch = &temp.MAPQ;
+                break;
+            case 5:
+                if (temp.MAPQ > 255) {
+                    LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error MAPQ > 255");
+                    field = 0;
+                }
+                break;
+            case 6:
+                temp.cigars = SAM2BAM_CIGAR_OpCount(scratch);
+                if (temp.cigars < 0) {
+                    LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error parsing CIGAR");
+                    field = 0;
+                }
+                else if (temp.cigars > 0) {
+                    scratch += 4 * temp.cigars;
+                    temp.SEQ = (uint8_t *)scratch;
+                    {
+                        rc_t const rc = SAM2BAM_ConvertCIGAR(i, temp.CIGAR, endp);
+                        if (rc) {
+                            LOGERR(klogErr, rc, "SAM Record error parsing CIGAR");
+                            field = 0;
+                        }
+                    }
+                }
+                else
+                    temp.SEQ = (uint8_t *)scratch;
+                break;
+            case 7:
+                if (i == 1 && scratch[0] == '*')
+                    temp.RNEXT = -1;
+                else if (i == 1 && scratch[0] == '=')
+                    temp.RNEXT = temp.RNAME;
+                else {
+                    unsigned const id = FindRefSeqByName(scratch, true, self->refSeqs, self->refSeq);
+                    if (id < self->refSeqs)
+                        temp.RNEXT = id;
+                    else {
+                        LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record missing reference");
+                        field = 0;
+                    }
+                }
+                intScratch = &temp.PNEXT;
+                break;
+            case 8:
+                intScratch = &temp.TLEN;
+                break;
+            case 9:
+                break;
+            case 10:
+                if (i == 1 && scratch[0] == '*')
+                    temp.readlen = 0;
+                else {
+                    temp.readlen = i;
+                    scratch += (temp.readlen + 1) / 2;
+                    temp.QUAL = (uint8_t *)scratch;
+                    {
+                        rc_t const rc = SAM2BAM_ConvertSEQ(i, temp.SEQ, endp);
+                        if (rc) {
+                            LOGERR(klogErr, rc, "SAM Record error converting SEQ");
+                            field = 0;
+                        }
+                    }
+                }
+                break;
+            case 11:
+                if (temp.readlen == 0)
+                    break;
+                if (i == 1 && scratch[0] == '*')
+                    memset(temp.QUAL, 0xFF, temp.readlen);
+                else if (i == temp.readlen) {
+                    rc_t const rc = SAM2BAM_ConvertQUAL(i, temp.QUAL, endp);
+                    if (rc) {
+                        LOGERR(klogErr, rc, "SAM Record error converting QUAL");
+                        field = 0;
+                    }
+                }
+                else {
+                    LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error length of SEQ != length of QUAL");
+                    field = 0;
+                }
+                scratch += temp.readlen;
+                break;
+            default:
+            {
+                int const n = SAM2BAM_ConvertEXTRA(i, scratch, endp);
+                if (n < 0) {
+                    LOGERR(klogErr, RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid), "SAM Record error parsing optional field");
+                    field = 0;
+                }
+                else {
+                    if (n == 0)
+                        --field;
+                    else
+                        scratch += n;
+                }
+                break;
+            }
+        }
+        if (ch == '\n') {
+            if (field < 11) {
+                rc_t const rc = RC(rcAlign, rcFile, rcReading, rcRow, rcTooShort);
+                LOGERR(klogErr, rc, "SAM Record error too few fields");
+                return rc;
+            }
+            break;
+        }
+        i = 0;
+        if (field > 0)
+            ++field;
+    }
+
+    SAM2BAM_ConvertInt(raw->rID, temp.RNAME);
+    SAM2BAM_ConvertInt(raw->pos, temp.POS - 1);
+    raw->read_name_len = temp.namelen;
+    raw->mapQual = temp.MAPQ;
+    SAM2BAM_ConvertShort(raw->n_cigars, temp.cigars);
+    SAM2BAM_ConvertShort(raw->flags, temp.FLAG);
+    SAM2BAM_ConvertInt(raw->read_len, temp.readlen);
+    SAM2BAM_ConvertInt(raw->mate_rID, temp.RNEXT);
+    SAM2BAM_ConvertInt(raw->mate_pos, temp.PNEXT - 1);
+    SAM2BAM_ConvertInt(raw->ins_size, temp.TLEN);
+    {    
+        unsigned const datasize = (char *)scratch - (char *)self->buffer;
+        unsigned const rsltsize = BAM_AlignmentSizeFromData(datasize, self->buffer);
+        BAM_Alignment *const y = malloc(rsltsize);
+    
+        if (y == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+        if (BAM_AlignmentInitLog(y, rsltsize, datasize, self->buffer)) {
+            y->parent = self;
+            rslt[0] = y;
+        
+            if (BAM_AlignmentIsEmpty(y))
+                return RC(rcAlign, rcFile, rcReading, rcRow, rcEmpty);
+            return 0;
+        }
+        free(y);
+    }
+    return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
+}
+
+static rc_t read2(BAM_File *const self, BAM_Alignment const **const rhs)
+{
+    unsigned actsize = 0;
+    rc_t rc;
+    
+    if (self->bufCurrent >= self->bufSize && self->eof)
+        return SILENT_RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
+
+    if (self->isSAM) {
+        rc = BAM_FileReadSAM(self, rhs);
+        if (rc != 0 && GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+            self->eof = true;
+        return rc;
+    }
+    if (self->nocopy == NULL) {
+        size_t const size = 64u * 1024u;
+        void *const temp = malloc(size);
+
+        if (temp == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+        self->nocopy = temp;
+    }
+
+    rc = BAM_FileReadNoCopy(self, &actsize, self->nocopy, 64u * 1024u);
+    if (rc == 0) {
+        *rhs = self->nocopy;
+        if (BAM_AlignmentIsEmpty(self->nocopy)) {
+            rc = RC(rcAlign, rcFile, rcReading, rcRow, rcEmpty);
+            LOGERR(klogWarn, rc, "BAM Record contains no alignment or sequence data");
+        }
+    }
+    else if ((int)GetRCObject(rc) == rcBuffer && GetRCState(rc) == rcInsufficient)
+    {
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+    }
+    else if ((int)GetRCObject(rc) == rcBuffer && GetRCState(rc) == rcNotAvailable)
+    {
+        rc = BAM_FileReadCopy(self, rhs, true);
+    }
+    else if ((int)GetRCObject(rc) == rcRow && GetRCState(rc) == rcInvalid) {
+        BAM_AlignmentLogParseError(self->nocopy);
+    }
+    return rc;
+}
+
+static rc_t readDefer(BAM_File *const self, BAM_Alignment const **const rslt)
+{
+    uint32_t datasize = 0;
+    size_t nread = 0;
+    rc_t rc = 0;
+
+    rc = KFileReadAll(self->defer, self->deferPos, &datasize, 4, &nread);
+    if (rc) return rc;
+    if (nread == 0) {
+        KFileRelease(self->defer);
+        self->defer = NULL;
+        return SILENT_RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
+    }
+    assert(nread == 4);
+    assert(datasize < 64u * 1024u);
+    if (self->nocopy == NULL) {
+        size_t const size = 64u * 1024u;
+        void *const temp = malloc(size);
+
+        if (temp == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+        self->nocopy = temp;
+    }
+
+    rc = KFileReadAll(self->defer, self->deferPos + 4, self->buffer, datasize, &nread);
+    if (rc) return rc;
+    assert(nread == datasize);
+    self->deferPos += 4 + datasize;
+    
+    BAM_AlignmentInitLog(self->nocopy, 64u * 1024u, datasize, self->buffer);
+    self->nocopy->parent = self;
+    *rslt = self->nocopy;
+    if (BAM_AlignmentIsEmpty(self->nocopy)) {
+        rc = RC(rcAlign, rcFile, rcReading, rcRow, rcEmpty);
+        LOGERR(klogWarn, rc, "BAM Record contains no alignment or sequence data");
+    }
+    return rc;
+}
+
+static rc_t writeExactly(KFile *const f, uint64_t const pos, void const *const data, size_t const size) {
+    char const *const p = (char const *)data;
+    size_t written = 0;
+
+    while (written < size) {
+        size_t num_writ = 0;
+        rc_t const rc = KFileWrite(f, pos + written, p + written, size - written, &num_writ);
+        if (rc) return rc;
+        written += num_writ;
+    }
+    return 0;
+}
+
+static rc_t writeDefer(BAM_File *const self, BAM_Alignment const *const algn)
+{
+    rc_t rc = 0;
+
+    rc = writeExactly(self->defer, self->deferPos, &algn->datasize, 4);
+    if (rc) return rc;
+    rc = writeExactly(self->defer, self->deferPos + 4, algn->data, algn->datasize);
+    if (rc) return rc;
+    self->deferPos += 4 + algn->datasize;
+    return 0;
+}
+
+rc_t BAM_FileRead2(const BAM_File *cself, const BAM_Alignment **rhs)
+{
+    BAM_File *const self = (BAM_File *)cself;
+    
+    if (self == NULL || rhs == NULL)
+        return RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
+    
+    *rhs = NULL;
+
+    if (self->eof && self->defer != NULL) {
+        return readDefer(self, rhs);
+    }
+    for ( ; ; ) {
+        rc_t const rc = read2(self, rhs);
+        if (rc != 0) {
+            if (self->eof && self->defer != NULL) {
+                self->deferPos = 0;
+                return readDefer(self, rhs);
+            }
+            return rc;
+        }
+        if (self->defer && BAM_AlignmentShouldDefer(*rhs)) {
+            rc_t const rc = writeDefer(self, *rhs);
+            if (rc) return rc;
+        }
+        else
+            break;
+    }
+    return 0;
+}
+
+rc_t BAM_FileRead(const BAM_File *cself, const BAM_Alignment **rhs)
+{
+    assert(!"deprecated");
+    abort();
+}
+
+/* MARK: BAM File header info accessor */
+
+rc_t BAM_FileGetRefSeqById(const BAM_File *cself, int32_t id, const BAMRefSeq **rhs)
+{
+    *rhs = NULL;
+    if (id >= 0 && id < cself->refSeqs)
+        *rhs = &cself->refSeq[id];
+    return 0;
+}
+
+rc_t BAM_FileGetReadGroupByName(const BAM_File *cself, const char *name, const BAMReadGroup **rhs)
+{
+    BAMReadGroup rg;
+    
+    *rhs = NULL;
+
+    rg.name = name;
+    if (rg.name != NULL)
+        *rhs = kbsearch(&rg, cself->readGroup, cself->readGroups, sizeof(rg), comp_ReadGroup, NULL);
+
+    return 0;
+}
+
+rc_t BAM_FileGetRefSeqCount(const BAM_File *cself, unsigned *rhs)
+{
+    *rhs = cself->refSeqs;
+    return 0;
+}
+
+rc_t BAM_FileGetRefSeq(const BAM_File *cself, unsigned i, const BAMRefSeq **rhs)
+{
+    *rhs = NULL;
+    if (i < cself->refSeqs)
+        *rhs = &cself->refSeq[i];
+    return 0;
+}
+
+rc_t BAM_FileGetReadGroupCount(const BAM_File *cself, unsigned *rhs)
+{
+    *rhs = cself->readGroups;
+    return 0;
+}
+
+rc_t BAM_FileGetReadGroup(const BAM_File *cself, unsigned i, const BAMReadGroup **rhs)
+{
+    *rhs = NULL;
+    if (i < cself->readGroups)
+        *rhs = &cself->readGroup[i];
+    return 0;
+}
+
+rc_t BAM_FileGetHeaderText(BAM_File const *cself, char const **header, size_t *header_len)
+{
+    *header = cself->header;
+    *header_len = *header ? string_size( *header ) : 0;
+    return 0;
+}
+
+/* MARK: BAM Alignment destructor */
+
+static rc_t BAM_AlignmentWhack(BAM_Alignment *self)
+{
+    if (self != self->parent->nocopy) {
+        free(self->storage);
+        free(self);
+    }
+    return 0;
+}
+
+/* MARK: BAM Alignment ref-counting */
+
+rc_t BAM_AlignmentAddRef(const BAM_Alignment *cself)
+{
+    return 0;
+}
+
+rc_t BAM_AlignmentRelease(const BAM_Alignment *cself)
+{
+    BAM_AlignmentWhack((BAM_Alignment *)cself);
+
+    return 0;
+}
+
+rc_t BAM_AlignmentCopy(const BAM_Alignment *self, BAM_Alignment **rslt)
+{
+    unsigned const rsltsize = BAM_AlignmentSize(self->numExtra);
+    unsigned const padded = (rsltsize + 15UL) & ~15UL;
+    void *const tmp = malloc(padded + self->datasize);
+    void *const tmp2 = &((char *)tmp)[padded];
+
+    assert(tmp != NULL);
+    if (tmp == NULL) {
+        LOGMSG(klogFatal, "OUT OF MEMORY");
+        abort();
+    }
+    memmove(tmp, self, rsltsize);
+    memmove(tmp2, self->data, self->datasize);
+    *rslt = tmp;
+    (**rslt).data = tmp2;
+    (**rslt).storage = NULL;
+
+    return 0;
+}
+
+static bool BAM_AlignmentShouldDefer(BAM_Alignment const *const self)
+{
+    int const flags = getFlags(self);
+    if (flags & BAMFlags_SelfIsUnmapped)
+        return false;
+    if (flags & BAMFlags_IsNotPrimary)
+        return true;
+    if (flags & BAMFlags_IsSupplemental)
+        return true;
+    return false;
+}
+
+#if 0
+uint16_t BAM_AlignmentIffyFields(const BAM_Alignment *self)
+{
+}
+
+uint16_t BAM_AlignmentBadFields(const BAM_Alignment *self)
+{
+}
+#endif
+
+/* MARK: BAM Alignment accessors */
+
+static uint32_t BAM_AlignmentGetCigarElement(const BAM_Alignment *self, unsigned i)
+{
+    return LE2HUI32(&((uint8_t const *)getCigarBase(self))[i * 4]);
+}
+
+rc_t BAM_AlignmentGetRefSeqId(const BAM_Alignment *cself, int32_t *rhs)
+{
+    *rhs = getRefSeqId(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetPosition(const BAM_Alignment *cself, int64_t *rhs)
+{
+    *rhs = getPosition(cself);
+    return 0;
+}
+
+bool BAM_AlignmentIsMapped(const BAM_Alignment *cself)
+{
+    if (((getFlags(cself) & BAMFlags_SelfIsUnmapped) == 0) && getRefSeqId(cself) >= 0 && getPosition(cself) >= 0)
+        return true;
+    return false;
+}
+
+/* static bool BAM_AlignmentIsMateMapped(const BAM_Alignment *cself)
+{
+    if (((getFlags(cself) & BAMFlags_MateIsUnmapped) == 0) && getMateRefSeqId(cself) >= 0 && getMatePos(cself) >= 0)
+        return true;
+    return false;
+} */
+
+rc_t BAM_AlignmentGetAlignmentDetail(
+                                                  const BAM_Alignment *self,
+                                                  BAM_AlignmentDetail *rslt, uint32_t count, uint32_t *actual,
+                                                  int32_t *pfirst, int32_t *plast
+                                                  )
+{
+    unsigned i;
+    unsigned ccnt; /* cigar count */
+    int32_t  gpos; /* refSeq pos in global coordinates */
+    unsigned rpos; /* read pos (always local coordinates) */
+    uint32_t rlen; /* read length */
+    int32_t first = -1;
+    int32_t last = -1;
+
+    if (!self)
+        return RC(rcAlign, rcFile, rcReading, rcSelf, rcNull);
+
+    rlen = getReadLen(self);
+    ccnt = getCigarCount(self);
+    gpos = getPosition(self);
+    
+    if (gpos < 0)
+        ccnt = 0;
+    
+    if (actual)
+        *actual = ccnt;
+    
+    if (pfirst)
+        *pfirst = -1;
+
+    if (plast)
+        *plast = -1;
+
+    if (ccnt == 0)
+        return 0;
+    
+    if (rslt == NULL) {
+        if (actual == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
+        count = 0;
+    }
+    
+    if (count < ccnt)
+        return RC(rcAlign, rcFile, rcReading, rcBuffer, rcInsufficient);
+        
+    for (rpos = 0, i = 0; i != ccnt; ++i) {
+        uint32_t len = BAM_AlignmentGetCigarElement(self, i);
+        int op = len & 0x0F;
+        
+        if (op > sizeof(cigarChars))
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        
+        op = cigarChars[op];
+        len >>= 4;
+        
+        rslt[i].refSeq_pos = gpos;
+        rslt[i].read_pos = rpos;
+        rslt[i].length = len;
+        rslt[i].type = (BAMCigarType)op;
+        
+        switch ((BAMCigarType)op) {
+        case ct_Match:
+        case ct_Equal:
+            if (first == -1)
+                first = i;
+            last = i;
+            gpos += len;
+            rpos += len;
+            break;
+        case ct_Insert:
+        case ct_SoftClip:
+            gpos += len;
+            break;
+        case ct_Delete:
+        case ct_Skip:
+            rpos += len;
+            break;
+        case ct_HardClip:
+        case ct_Padded:
+            rslt[i].refSeq_pos = -1;
+            rslt[i].read_pos = -1;
+            break;
+        default:
+            break;
+        }
+        
+        if (rslt[i].read_pos > rlen)
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+    }
+    if (pfirst)
+        *pfirst = first;
+    
+    if (plast)
+        *plast = last;
+    
+    return 0;
+}
+
+static
+unsigned ReferenceLengthFromCIGAR(const BAM_Alignment *self)
+{
+    unsigned i;
+    unsigned n = getCigarCount(self);
+    unsigned y;
+    
+    for (i = 0, y = 0; i != n; ++i) {
+        uint32_t const len = BAM_AlignmentGetCigarElement(self, i);
+        
+        switch (cigarChars[len & 0x0F]) {
+        case ct_Match:
+        case ct_Equal:
+        case ct_NotEqual:
+        case ct_Delete:
+        case ct_Skip:
+            y += len >> 4;
+            break;
+        default:
+            break;
+        }
+    }
+    return y;
+}
+
+static unsigned SequenceLengthFromCIGAR(const BAM_Alignment *self)
+{
+    unsigned i;
+    unsigned n = getCigarCount(self);
+    unsigned y;
+    
+    for (i = 0, y = 0; i != n; ++i) {
+        uint32_t const len = BAM_AlignmentGetCigarElement(self, i);
+        
+        switch (cigarChars[len & 0x0F]) {
+        case ct_Match:
+        case ct_Equal:
+        case ct_NotEqual:
+        case ct_Insert:
+        case ct_SoftClip:
+            y += len >> 4;
+            break;
+        default:
+            break;
+        }
+    }
+    return y;
+}
+
+rc_t BAM_AlignmentGetPosition2(const BAM_Alignment *cself, int64_t *rhs, uint32_t *length)
+{
+    *rhs = getPosition(cself);
+    if (*rhs >= 0)
+        *length = ReferenceLengthFromCIGAR(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetReadGroupName(const BAM_Alignment *cself, const char **rhs)
+{
+    *rhs = get_RG(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetReadName(const BAM_Alignment *cself, const char **rhs)
+{
+    *rhs = getReadName(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetReadName2(const BAM_Alignment *cself, const char **rhs, size_t *length)
+{
+    *length = getReadNameLength(cself) - 1;
+    *rhs = getReadName(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetReadName3(const BAM_Alignment *cself, const char **rhs, size_t *length)
+{
+    char const *const name = getReadName(cself);
+    size_t len = getReadNameLength(cself);
+    size_t i;
+    
+    for (i = len; i; ) {
+        int const ch = name[--i];
+        
+        if (ch == '/') {
+            len = i;
+            break;
+        }
+        if (!isdigit(ch))
+            break;
+    }
+    *rhs = name;
+    *length = len;
+
+    return 0;
+}
+
+rc_t BAM_AlignmentGetFlags(const BAM_Alignment *cself, uint16_t *rhs)
+{
+    *rhs = getFlags(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetMapQuality(const BAM_Alignment *cself, uint8_t *rhs)
+{
+    *rhs = getMapQual(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetCigarCount(const BAM_Alignment *cself, unsigned *rhs)
+{
+    *rhs = getCigarCount(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetRawCigar(const BAM_Alignment *cself, uint32_t const *rslt[], uint32_t *length)
+{
+    *rslt = getCigarBase(cself);
+    *length = getCigarCount(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetCigar(const BAM_Alignment *cself, uint32_t i, BAMCigarType *type, uint32_t *length)
+{
+    uint32_t x;
+    
+    if (i >= getCigarCount(cself))
+        return RC(rcAlign, rcFile, rcReading, rcParam, rcInvalid);
+
+    x = BAM_AlignmentGetCigarElement(cself, i);
+    *type = (BAMCigarType)(cigarChars[x & 0x0F]);
+    *length = x >> 4;
+    return 0;
+}
+
+rc_t BAM_AlignmentGetReadLength(const BAM_Alignment *cself, uint32_t *rhs)
+{
+    *rhs = getReadLen(cself);
+    return 0;
+}
+
+static int get1Base(BAM_Alignment const *const self, unsigned const i)
+{
+/*
+ *   =    A    C    M    G    R    S    V    T    W    Y    H    K    D    B    N
+ * 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
+ * 1111 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 0000
+ *   N    T    G    K    C    Y    S    B    A    W    R    D    M    H    V    =
+ */
+    static const char  tr[16] = "=ACMGRSVTWYHKDBN";
+/*  static const char ctr[16] = "=TGKCYSBAWRDMHVN"; */
+    uint8_t const *const seq = &self->data->raw[self->seq];
+    unsigned const b4na2 = seq[i >> 1];
+    unsigned const b4na = (i & 1) == 0 ? (b4na2 >> 4) : (b4na2 & 0x0F);
+    
+    return tr[b4na];
+}
+
+static int get1Qual(BAM_Alignment const *const self, unsigned const i)
+{
+    uint8_t const *const src = &self->data->raw[self->qual];
+    
+    return src[i];
+}
+
+rc_t BAM_AlignmentGetSequence2(const BAM_Alignment *cself, char *rhs, uint32_t start, uint32_t stop)
+{
+    unsigned const n = getReadLen(cself);
+    unsigned si, di;
+    
+    if (stop == 0 || stop > n)
+        stop = n;
+    
+    for (di = 0, si = start; si != stop; ++si, ++di) {
+        rhs[di] = get1Base(cself, si);
+    }
+    return 0;
+}
+
+rc_t BAM_AlignmentGetSequence(const BAM_Alignment *cself, char *rhs)
+{
+    return BAM_AlignmentGetSequence2(cself, rhs, 0, 0);
+}
+
+bool BAM_AlignmentHasColorSpace(BAM_Alignment const *cself)
+{
+    return get_CS(cself) != NULL;
+}
+
+rc_t BAM_AlignmentGetCSKey(BAM_Alignment const *cself, char rhs[1])
+{
+    char const *const vCS = get_CS(cself);
+    
+    if (vCS)
+        rhs[0] = vCS[0];
+    return 0;
+}
+
+rc_t BAM_AlignmentGetCSSeqLen(BAM_Alignment const *cself, uint32_t *rhs)
+{
+    struct offset_size_s const *const vCS = get_CS_info(cself);
+    
+    *rhs = vCS ? vCS->size - 5 : 0;
+    return 0;
+}
+
+rc_t BAM_AlignmentGetCSSequence(BAM_Alignment const *cself, char rhs[], uint32_t seqlen)
+{
+    char const *const vCS = get_CS(cself);
+    
+    if (vCS) {
+        unsigned i;
+        
+        for (i = 0;i != seqlen; ++i) {
+            char const ch = vCS[i+1];
+            
+            rhs[i] = (ch == '4') ? '.' : ch;
+        }
+    }
+    return 0;
+}
+
+rc_t BAM_AlignmentGetQuality(const BAM_Alignment *cself, const uint8_t **rhs)
+{
+    *rhs = &cself->data->raw[cself->qual];
+    return 0;
+}
+
+rc_t BAM_AlignmentGetQuality2(BAM_Alignment const *cself, uint8_t const **rhs, uint8_t *offset)
+{
+    uint8_t const *const OQ = get_OQ(cself);
+    
+    if (OQ) {
+        struct offset_size_s const *const oq = get_OQ_info(cself);
+        
+        if (oq->size - 4 == getReadLen(cself)) {
+            *offset = 33;
+            *rhs = OQ;
+        }
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+    }
+    else {
+        *offset = 0;
+        *rhs = &cself->data->raw[cself->qual];
+    }
+    return 0;
+}
+
+rc_t BAM_AlignmentGetCSQuality(BAM_Alignment const *cself, uint8_t const **rhs, uint8_t *offset)
+{
+    struct offset_size_s const *const cs = get_CS_info(cself);
+    struct offset_size_s const *const cq = get_CQ_info(cself);
+    uint8_t const *const CQ = get_CQ(cself);
+    
+    if (cs && cq && CQ) {
+        if (cs->size == cq->size) {
+            *offset = 33;
+            *rhs = CQ + 1;
+            return 0;
+        }
+        if (cs->size == cq->size + 1) {
+            *offset = 33;
+            *rhs = CQ;
+            return 0;
+        }
+        return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+    }
+    *offset = 0;
+    *rhs = &cself->data->raw[cself->qual];
+    return 0;
+}
+
+rc_t BAM_AlignmentGetMateRefSeqId(const BAM_Alignment *cself, int32_t *rhs)
+{
+    *rhs = getMateRefSeqId(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetMatePosition(const BAM_Alignment *cself, int64_t *rhs)
+{
+    *rhs = getMatePos(cself);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetInsertSize(const BAM_Alignment *cself, int64_t *rhs)
+{
+    *rhs = getInsertSize(cself);
+    return 0;
+}
+
+static int FormatOptData(BAM_Alignment const *const self,
+                         size_t const maxsize,
+                         char buffer[])
+{
+    char const *const base = (char const *)&self->data->raw[self->qual + getReadLen(self)];
+    unsigned i;
+    unsigned offset;
+    unsigned cur = 0;
+    int j;
+    
+    for (i = 0, offset = 0; i < self->numExtra; ++i) {
+        int type;
+        union { float f; uint32_t i; } fi;
+        
+        if (cur + 7 > maxsize)
+            return -1;
+        buffer[cur++] = '\t';
+        buffer[cur++] = base[offset++];
+        buffer[cur++] = base[offset++];
+        buffer[cur++] = ':';
+        type = base[offset++];
+
+        switch (type) {
+            case dt_ASCII:      /* A */
+                buffer[cur++] = 'A';
+                buffer[cur++] = ':';
+                buffer[cur++] = base[offset++];
+                break;
+
+            case dt_INT8:       /* c */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)*((int8_t const *)(base + offset)));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 1;
+                break;
+
+            case dt_UINT8:      /* C */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%u", (unsigned)*((uint8_t const *)(base + offset)));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 1;
+                break;
+                
+            case dt_INT16:      /* s */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)LE2HI16(base + offset));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 2;
+                break;
+
+            case dt_UINT16:     /* S */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%u", (unsigned)LE2HUI16(base + offset));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 2;
+                break;
+                
+            case dt_INT:        /* i */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)LE2HI32(base + offset));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 4;
+                break;
+
+            case dt_UINT:       /* I */
+                buffer[cur++] = 'i';
+                buffer[cur++] = ':';
+                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)LE2HI32(base + offset));
+                if ((cur += j) >= maxsize)
+                    return -1;
+                offset += 4;
+                break;
+
+            case dt_FLOAT32:    /* f */
+                buffer[cur++] = 'f';
+                buffer[cur++] = ':';
+                fi.i = LE2HUI32(base + offset);
+                j = snprintf(buffer + cur, maxsize - cur, "%f", fi.f);
+                if ((cur += j) >= maxsize)
+                    return -1;
+                while (buffer[cur - 1] == '0')
+                    --cur;
+                if (buffer[cur - 1] == '.')
+                    --cur;
+                offset += 4;
+                break;
+
+            case dt_HEXSTRING:  /* H */
+            case dt_CSTRING:    /* Z */
+                buffer[cur++] = type == dt_CSTRING ? 'Z' : 'H';
+                buffer[cur++] = ':';
+                for ( ; ; ) {
+                    int const ch = base[offset++];
+                    
+                    if (ch == '\0')
+                        break;
+                    if (cur >= maxsize)
+                        return -1;
+                    buffer[cur++] = ch;
+                }
+                break;
+
+            case dt_NUM_ARRAY:  /* B */
+                buffer[cur++] = 'B';
+                buffer[cur++] = ':';
+                {
+                    int const elemtype = base[offset++];
+                    unsigned const elemcount = LE2HUI32(base + offset);
+                    unsigned k;
+
+                    if (cur + 2 >= maxsize)
+                        return -1;
+                    buffer[cur++] = elemtype;
+                    offset += 4;
+                    for (k = 0; k < elemcount; ++k) {
+                        buffer[cur++] = ',';
+                        switch (elemtype) {
+                            case dt_INT8:
+                                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)*((int8_t const *)(base + offset)));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 1;
+                                break;
+                                
+                            case dt_UINT8:
+                                j = snprintf(buffer + cur, maxsize - cur, "%u", (unsigned)*((uint8_t const *)(base + offset)));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 1;
+                                break;
+                                
+                            case dt_INT16:
+                                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)LE2HI16(base + offset));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 2;
+                                break;
+                                
+                            case dt_UINT16:
+                                j = snprintf(buffer + cur, maxsize - cur, "%u", (unsigned)LE2HUI16(base + offset));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 2;
+                                break;
+                                
+                            case dt_INT:
+                                j = snprintf(buffer + cur, maxsize - cur, "%i", (int)LE2HI32(base + offset));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 4;
+                                break;
+                                
+                            case dt_UINT:
+                                j = snprintf(buffer + cur, maxsize - cur, "%u", (unsigned)LE2HUI32(base + offset));
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                offset += 4;
+                                break;
+                                
+                            case dt_FLOAT32:
+                                fi.i = LE2HUI32(base + offset);
+                                j = snprintf(buffer + cur, maxsize - cur, "%f", fi.f);
+                                if ((cur += j) >= maxsize)
+                                    return -1;
+                                while (buffer[cur - 1] == '0')
+                                    --cur;
+                                if (buffer[cur - 1] == '.')
+                                    --cur;
+                                offset += 4;
+                                break;
+
+                            default:
+                                return -1;
+                                break;
+                        }
+                    }
+                }
+                break;
+
+            default:
+                return -1;
+                break;
+        }
+    }
+    return cur;
+}
+
+static rc_t FormatSAM(BAM_Alignment const *self,
+                      size_t *const actsize,
+                      size_t const maxsize,
+                      char *const buffer)
+{
+    int i = 0;
+    size_t cur = 0;
+    unsigned j;
+    int const refSeqId = getRefSeqId(self);
+    int const refPos = getPosition(self);
+    unsigned const cigCount = getCigarCount(self);
+    uint32_t const *const cigar = getCigarBase(self);
+    int const mateRefSeqId = getMateRefSeqId(self);
+    int const mateRefPos = getMatePos(self);
+    unsigned const readlen = getReadLen(self);
+
+    i = snprintf(&buffer[cur], maxsize - cur,
+                 "%s\t%i\t%s\t%i\t%i\t",
+                 getReadName(self),
+                 getFlags(self),
+                 refSeqId < 0 ? "*" : self->parent->refSeq[refSeqId].name,
+                 refPos < 0 ? 0 : refPos + 1,
+                 getMapQual(self)
+                 );
+    if ((cur += i) > maxsize)
+        return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+
+    if (cigCount > 0) {
+        for (j = 0; j < cigCount; ++j) {
+            uint32_t const el = cigar[j];
+            BAMCigarType const type = (BAMCigarType)(cigarChars[el & 0x0F]);
+            unsigned const length = el >> 4;
+
+            i = snprintf(&buffer[cur], maxsize - cur, "%u%c", length, type);
+            if ((cur += i) > maxsize)
+                return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+        }
+    }
+    else {
+        if ((cur + 1) > maxsize)
+            return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+        buffer[cur++] = '*';
+    }
+    i = snprintf(&buffer[cur], maxsize - cur,
+                 "\t%s\t%i\t%i\t",
+                 mateRefSeqId < 0 ? "*" : mateRefSeqId == refSeqId ? "=" : self->parent->refSeq[mateRefSeqId].name,
+                 mateRefPos < 0 ? 0 : mateRefPos + 1,
+                 getInsertSize(self)
+                 );
+    if ((cur += i) > maxsize)
+        return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+    if (readlen) {
+        uint8_t const *const qual = &self->data->raw[self->qual];
+        
+        if (cur + 2 * readlen + 1 > maxsize)
+            return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+        BAM_AlignmentGetSequence(self, &buffer[cur]);
+        cur += readlen;
+        buffer[cur] = '\t';
+        ++cur;
+        
+        for (j = 0; j < readlen; ++j) {
+            if (qual[j] != 0xFF)
+                goto HAS_QUAL;
+        }
+        if (1) {
+            buffer[cur++] = '*';
+        }
+        else {
+    HAS_QUAL:
+            for (j = 0; j < readlen; ++j)
+                buffer[cur++] = qual[j] + 33;
+        }
+    }
+    else {
+        i = snprintf(&buffer[cur], maxsize - cur, "*\t*");
+        if ((cur += i) > maxsize)
+            return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+    }
+    i = FormatOptData(self, maxsize - cur, &buffer[cur]);
+    if (i < 0)
+        return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+    if ((cur += i) + 2 > maxsize)
+        return RC(rcAlign, rcRow, rcReading, rcData, rcExcessive);
+    buffer[cur++] = '\n';
+    buffer[cur] = '\0';
+    *actsize = cur;
+
+    return 0;
+}
+
+#define FORMAT_SAM_SCRATCH_SIZE ((size_t)(64u * 1024u))
+static rc_t FormatSAMBuffer(BAM_Alignment const *self,
+                            size_t actSize[],
+                            size_t const maxsize,
+                            char *const buffer)
+{
+    char scratch[FORMAT_SAM_SCRATCH_SIZE];
+    size_t actsize = 0;
+    rc_t const rc = FormatSAM(self, &actsize, FORMAT_SAM_SCRATCH_SIZE, scratch);
+
+    actSize[0] = actsize;
+    if (rc) return rc;
+    
+    if (actsize > maxsize)
+        return RC(rcAlign, rcReading, rcRow, rcBuffer, rcInsufficient);
+
+    memmove(buffer, scratch, actsize);
+    return 0;
+}
+
+rc_t BAM_AlignmentFormatSAM(BAM_Alignment const *self,
+                                         size_t *const actSize,
+                                         size_t const maxsize,
+                                         char *const buffer)
+{
+    if (self == NULL)
+        return RC(rcAlign, rcReading, rcRow, rcSelf, rcNull);
+    if (buffer == NULL)
+        return RC(rcAlign, rcReading, rcRow, rcParam, rcNull);
+    else {
+        size_t actsize = 0;
+        rc_t const rc = (maxsize < FORMAT_SAM_SCRATCH_SIZE ? FormatSAMBuffer : FormatSAM)(self, &actsize, maxsize, buffer);
+
+        if (actSize)
+            *actSize = actsize;
+        return rc;
+    }
+}
+
+typedef struct OptForEach_ctx_s {
+    BAMOptData *val;
+    BAMOptData **alloced;
+    size_t valsize;
+    rc_t rc;
+    BAMOptionalDataFunction user_f;
+    void *user_ctx;
+} OptForEach_ctx_t;
+
+static bool i_OptDataForEach(BAM_Alignment const *cself, void *Ctx, char const tag[2], BAMOptDataValueType type, unsigned count, void const *value, unsigned size)
+{
+    OptForEach_ctx_t *ctx = (OptForEach_ctx_t *)Ctx;
+    size_t const need = (size_t)&((BAMOptData const *)NULL)->u.f64[(count * size + sizeof(double) - 1)/sizeof(double)];
+    
+    if (need > ctx->valsize) {
+        void *const temp = realloc(ctx->alloced, need);
+        if (temp == NULL) {
+            ctx->rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+            return true;
+        }
+        *ctx->alloced = ctx->val = temp;
+        ctx->valsize = need;
+    }
+    ctx->val->type = type;
+    ctx->val->element_count = (type == dt_CSTRING || type == dt_HEXSTRING) ? size - 1 : count;
+    
+    memmove(ctx->val->u.u8, value, size * count);
+#if __BYTE_ORDER == __BIG_ENDIAN
+    {{
+        unsigned di;
+        uint32_t elem_count = ctx->val->element_count;
+        
+        switch (size) {
+        case 2:
+            for (di = 0; di != elem_count; ++di)
+                ctx->val->u.u16[di] = LE2HUI16(&ctx->val->u.u16[di]);
+            break;
+        case 4:
+            for (di = 0; di != elem_count; ++di)
+                ctx->val->u.u32[di] = LE2HUI32(&ctx->val->u.u32[di]);
+            break;
+        case 8:
+            for (di = 0; di != elem_count; ++di)
+                ctx->val->u.u64[di] = LE2HUI64(&ctx->val->u.u64[di]);
+            break;
+        }
+    }}
+#endif
+    ctx->rc = ctx->user_f(ctx->user_ctx, tag, ctx->val);
+    return ctx->rc != 0;
+}
+
+rc_t BAM_AlignmentOptDataForEach(const BAM_Alignment *cself, void *user_ctx, BAMOptionalDataFunction f)
+{
+    union u {
+        BAMOptData value;
+        uint8_t storage[4096];
+    } value_auto;
+    OptForEach_ctx_t ctx;
+    rc_t rc = 0;
+    unsigned i;
+    
+    ctx.val = &value_auto.value;
+    ctx.alloced = NULL;
+    ctx.valsize = sizeof(value_auto);
+    ctx.rc = 0;
+    ctx.user_f = f;
+    ctx.user_ctx = user_ctx;
+    
+    for (i = 0; i != cself->numExtra; ++i) {
+        char const *const tag = (char const *)&cself->data->raw[cself->extra[i].offset];
+        uint8_t type = tag[2];
+        uint8_t const *const vp = (uint8_t const *)&tag[3];
+        unsigned len = cself->extra[i].size - 3;
+        unsigned size = cself->extra[i].size - 3;
+        unsigned count = 1;
+        unsigned offset = 0;
+        
+        if (type == dt_NUM_ARRAY) {
+            unsigned elem_size = 0;
+            uint32_t elem_count = 0;
+            
+            offset = len = 5;
+            switch (vp[0]) {
+            case dt_INT8:
+            case dt_UINT8:
+                elem_size = 1;
+                break;
+            case dt_INT16:
+            case dt_UINT16:
+                elem_size = 2;
+                break;
+            case dt_FLOAT32:
+            case dt_INT:
+            case dt_UINT:
+                elem_size = 4;
+                break;
+#if 0
+            case dt_FLOAT64:
+                elem_size = 8;
+                break;
+#endif
+            default:
+                rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+                break;
+            }
+            if (rc)
+                break;
+            elem_count = LE2HUI32(&vp[1]);
+            len += elem_size * elem_count;
+            type = vp[0];
+            count = elem_count;
+            size = elem_size;
+            break;
+        }
+        if (i_OptDataForEach(cself, &ctx, tag, type, count, &vp[offset], size))
+            break;
+    }
+    rc = rc ? rc : ctx.rc;
+    if (ctx.alloced)
+        free(ctx.alloced);
+    return rc;
+}
+
+/* MARK: Complete Genomics stuff */
+
+bool BAM_AlignmentHasCGData(BAM_Alignment const *self)
+{
+    return get_CG_GC_info(self) && get_CG_GS_info(self) && get_CG_GQ_info(self);
+}
+
+rc_t BAM_AlignmentCGReadLength(BAM_Alignment const *self, uint32_t *readlen)
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    struct offset_size_s const *const GSi = get_CG_GS_info(self);
+    struct offset_size_s const *const GQi = get_CG_GQ_info(self);
+    
+    if (GCi && GSi && GQi) {
+        char const *GS = (char const *)&self->data->raw[GSi->offset + 3];
+        char const *GQ = (char const *)&self->data->raw[GQi->offset + 3];
+        char const *GC = (char const *)&self->data->raw[GCi->offset + 3];
+        unsigned oplen = 0;
+        unsigned i;
+        unsigned di = 0;
+        unsigned si = 0;
+        
+        for (i = 0; ; ++i) {
+            int const ch = GC[i];
+            
+            if (ch == '\0')
+                break;
+            if (isdigit(ch)) {
+                oplen = oplen * 10 + (ch - '0');
+            }
+            else if (ch != 'S' && ch != 'G')
+                return RC(rcAlign, rcRow, rcReading, rcData, rcUnexpected);
+            else {
+                unsigned const jmax = (ch == 'G') ? (oplen * 2) : oplen;
+                unsigned j;
+                
+                if (ch == 'S') {
+                    ;
+                }
+                else {
+                    for (j = 0; j < jmax; ++j) {
+                        int const base = *GS++;
+                        int const qual = *GQ++;
+                        
+                        switch (base) {
+                            case 'A':
+                            case 'C':
+                            case 'M':
+                            case 'G':
+                            case 'R':
+                            case 'S':
+                            case 'V':
+                            case 'T':
+                            case 'W':
+                            case 'Y':
+                            case 'H':
+                            case 'K':
+                            case 'D':
+                            case 'B':
+                            case 'N':
+                                break;
+                            default:
+                                return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+                        }
+                        if (qual < 33)
+                            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+                    }
+                }
+                si += oplen;
+                di += jmax;
+                oplen = 0;
+            }
+        }
+        if (*GS != '\0' || *GQ != '\0' || si != getReadLen(self))
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        
+        *readlen = di;
+        return 0;
+    }
+    return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+static unsigned BAM_AlignmentParseCGTag(BAM_Alignment const *self, size_t const max_cg_segs, unsigned cg_segs[/* max_cg_segs */])
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    char const *cur = (char const *)&self->data->raw[GCi->offset + 3];
+    unsigned i = 0;
+    int last_op = 0;
+
+    memset(cg_segs, 0, max_cg_segs * sizeof(cg_segs[0]));
+    
+    while (*cur != '\0' && i < max_cg_segs) {
+        char *endp;
+        unsigned const op_len = (unsigned)strtol(cur, &endp, 10);
+        int const op = *endp;
+        
+        cur = endp + 1;
+        if (op == last_op)
+            cg_segs[i - 1] += op_len;
+        else
+            cg_segs[i++] = op_len;
+        last_op = op;
+    }
+    return i;
+}
+
+static
+rc_t ExtractInt32(BAM_Alignment const *self, int32_t *result,
+                  struct offset_size_s const *const tag)
+{
+    int64_t y;
+    int const type = self->data->raw[tag->offset + 2];
+    void const *const pvalue = &self->data->raw[tag->offset + 3];
+    
+    switch (type) {
+    case 'c':
+        if (tag->size == 4)
+            y = *((int8_t const *)pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'C':
+        if (tag->size == 4)
+            y = *((uint8_t const *)pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 's':
+        if (tag->size == 5)
+            y = LE2HI16(pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'S':
+        if (tag->size == 5)
+            y = LE2HUI16(pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'i':
+        if (tag->size == 7)
+            y = LE2HI32(pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'I':
+        if (tag->size == 7)
+            y = LE2HUI32(pvalue);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    default:
+        return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+    }
+    if (INT32_MIN <= y && y <= INT32_MAX) {
+        *result = (int32_t)y;
+        return 0;
+    }
+    return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+}
+
+rc_t BAM_AlignmentGetCGAlignGroup(BAM_Alignment const *self,
+                                    char buffer[],
+                                    size_t max_size,
+                                    size_t *act_size)
+{
+    struct offset_size_s const *const ZA = get_CG_ZA_info(self);
+    struct offset_size_s const *const ZI = get_CG_ZI_info(self);
+    
+    if (ZA && ZI) {
+        rc_t rc;
+        int32_t za;
+        int32_t zi;
+        
+        rc = ExtractInt32(self, &za, ZA); if (rc) return rc;
+        rc = ExtractInt32(self, &zi, ZI); if (rc) return rc;
+        return string_printf(buffer, max_size, act_size, "%i_%i", zi, za);
+    }
+    return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+rc_t BAM_AlignmentGetCGSeqQual(BAM_Alignment const *self,
+                                 char sequence[],
+                                 uint8_t quality[])
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    struct offset_size_s const *const GSi = get_CG_GS_info(self);
+    struct offset_size_s const *const GQi = get_CG_GQ_info(self);
+    
+    if (GCi && GSi && GQi) {
+        char const *GS = (char const *)&self->data->raw[GSi->offset + 3];
+        char const *GQ = (char const *)&self->data->raw[GQi->offset + 3];
+        char const *GC = (char const *)&self->data->raw[GCi->offset + 3];
+        unsigned oplen = 0;
+        unsigned di = 0;
+        unsigned si = 0;
+        
+        for ( ; ; ) {
+            int const ch = *GC++;
+
+            if (ch == '\0')
+                break;
+            if (isdigit(ch)) {
+                oplen = oplen * 10 + (ch - '0');
+                continue;
+            }
+            if (ch == 'S') {
+                unsigned i;
+                
+                for (i = 0; i < oplen; ++i, ++di, ++si) {
+                    unsigned const base = get1Base(self, si);
+                    unsigned const qual = get1Qual(self, si);
+                    
+                    sequence[di] = base;
+                    quality [di] = qual;
+                }
+            }
+            else {
+                unsigned i;
+                
+                for (i = 0; i < oplen * 2; ++i, ++di) {
+                    unsigned const base = *GS++;
+                    unsigned const qual = *GQ++ - 33;
+                    
+                    sequence[di] = base;
+                    quality [di] = qual;
+                }
+                si += oplen;
+            }
+            oplen = 0;
+        }
+        return 0;
+    }
+    return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+
+static unsigned splice(uint32_t cigar[], unsigned n, unsigned at, unsigned out, unsigned in, uint32_t const new_values[/* in */])
+{
+    assert(at + out <= n);
+    memmove(&cigar[at + in], &cigar[at + out], (n - at - out) * 4);
+    if (in)
+        memmove(&cigar[at], new_values, in * 4);
+    return n + in - out;
+}
+
+#define OPCODE_2_FIX (0xF)
+
+static unsigned insert_B(unsigned const T, unsigned const G, unsigned const n, uint32_t cigar[/* n */])
+{
+    unsigned i;
+    unsigned pos;
+    
+    for (pos = i = 0; i < n; ++i) {
+        int const opcode = cigar[i] & 0xF;
+        
+        switch (opcode) {
+        case 0:
+        case 1:
+        case 4:
+        case 7:
+        case 8:
+            {{
+                unsigned const len = cigar[i] >> 4;
+                unsigned const nxt = pos + len;
+                
+                if (pos <= T && T <= nxt) {
+                    unsigned const l = T - pos;
+                    unsigned const r = len - l;
+                    uint32_t op[4];
+                    
+                    op[0] = (l << 4) | opcode;
+                    op[1] = (G << 4) | 9; /* B */
+                    op[2] = (G << 4) | 0; /* M this is not backwards */
+                    op[3] = (r << 4) | opcode;
+                    
+                    return splice(cigar, n, i, 1,
+                                   4 - (l == 0 ? 1 : 0) - (r == 0 ? 1 : 0),
+                                  op + (l == 0 ? 1 : 0));
+                }
+                pos = nxt;
+            }}
+            break;
+        default:
+            break;
+        }
+    }
+    return n;
+}
+
+static unsigned canonicalize(uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    
+    /* remove zero-length and P operations */
+    for (i = n; i > 0; ) {
+        --i;
+        if (cigar[i] >> 4 == 0 || (cigar[i] & 0xF) == 6)
+            n = splice(cigar, n, i, 1, 0, NULL);
+    }
+    /* merge adjacent operations of the same type */
+    for (i = 1; i < n; ) {
+        unsigned const opL = cigar[i-1] & 0xF;
+        unsigned const opI = cigar[ i ] & 0xF;
+        
+        if (opI == opL) {
+            unsigned const oplen = (cigar[i] >> 4) + (cigar[i-1] >> 4);
+            uint32_t const op = (oplen << 4) | opI;
+
+            n = splice(cigar, n, i-1, 2, 1, &op);
+        }
+        else
+            ++i;
+    }
+    return n;
+}
+
+static unsigned GetCGCigar(BAM_Alignment const *self, unsigned const N, uint32_t cigar[/* N */])
+{
+    unsigned i;
+    unsigned S;
+    unsigned n = getCigarCount(self);
+    unsigned seg[64];
+    unsigned const segs = BAM_AlignmentParseCGTag(self, sizeof(seg)/sizeof(seg[0]), seg);
+    unsigned const gaps = (segs - 1) >> 1;
+    
+    if (2 * gaps + 1 != segs)
+        return RC(rcAlign, rcRow, rcReading, rcData, rcUnexpected);
+    
+    if (N < n + 2 * gaps)
+        return RC(rcAlign, rcRow, rcReading, rcBuffer, rcInsufficient);
+    
+    memmove(cigar, getCigarBase(self), n * 4);
+
+    if (n > 1)
+        n = canonicalize(cigar, n); /* just in case */
+    
+    for (i = 0, S = 0; i < gaps; ++i) {
+        unsigned const s = seg[2 * i + 0];
+        unsigned const g = seg[2 * i + 1];
+
+        S += s + g;
+        if (g > 0)
+            n = insert_B(S, g, n, cigar);
+        S += g;
+    }
+    return n;
+}
+
+rc_t BAM_AlignmentGetCGCigar(BAM_Alignment const *self,
+                               uint32_t *cigar,
+                               uint32_t cig_max,
+                               uint32_t *cig_act)
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    
+    *cig_act = 0;
+    
+    if (GCi) {
+        *cig_act = GetCGCigar(self, cig_max, cigar);
+        return 0;
+    }
+    return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+/* MARK: end CG stuff */
+
+rc_t BAM_AlignmentGetTI(BAM_Alignment const *self, uint64_t *ti)
+{
+    char const *const TI = get_XT(self);
+    long long unsigned temp;
+    
+    if (TI && sscanf(TI, "ti|%llu", &temp) == 1) {
+        *ti = (uint64_t)temp;
+        return 0;
+    }
+    return SILENT_RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+rc_t BAM_AlignmentGetRNAStrand(BAM_Alignment const *const self, uint8_t *const rslt)
+{
+    if (rslt) {
+        uint8_t const *const XS = get_XS(self);
+        
+	    *rslt = XS ? XS[0] : ' ';
+    }
+    return 0;
+}
+
+rc_t BAM_AlignmentGetLinkageGroup(BAM_Alignment const *const self,
+                                  char const **const BX,
+                                  char const **const CB,
+                                  char const **const UB)
+{
+    *BX = get_BX(self);
+    *CB = get_CB(self);
+    *UB = get_UB(self);
+    return 0;
+}
+
+rc_t BAM_AlignmentGetBarCode(BAM_Alignment const *self,
+                                  char const **const BC)
+{
+    *BC = get_BC(self);
+    return 0;
+}
diff --git a/tools/bam-loader/bam.h b/tools/bam-loader/bam.h
new file mode 100644
index 0000000..d088d6d
--- /dev/null
+++ b/tools/bam-loader/bam.h
@@ -0,0 +1,597 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/*--------------------------------------------------------------------------
+ * BAM_Alignment
+ */
+typedef struct BAM_Alignment BAM_Alignment;
+
+/* AddRef
+ * Release
+ */
+rc_t BAM_AlignmentAddRef ( const BAM_Alignment *self );
+rc_t BAM_AlignmentRelease ( const BAM_Alignment *self );
+
+rc_t BAM_AlignmentCopy(const BAM_Alignment *self, BAM_Alignment **rslt);
+
+/* GetReadLength
+ *  get the sequence length
+ *  i.e. the number of elements of both sequence and quality
+ *
+ *  "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t BAM_AlignmentGetReadLength ( const BAM_Alignment *self, uint32_t *length );
+
+
+/* GetSequence
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t BAM_AlignmentGetSequence ( const BAM_Alignment *self, char *sequence );
+
+/* GetSequence2
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ *
+ *  "start" [ IN ] and "stop" [ IN ] - zero-based coordinates, half-closed interval
+ */
+rc_t BAM_AlignmentGetSequence2 ( const BAM_Alignment *self, char *sequence, uint32_t start, uint32_t stop);
+
+    
+/* GetQuality
+ *  get the raw quality data [0..ReadLength)
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the BAM_Alignment
+ */
+rc_t BAM_AlignmentGetQuality ( const BAM_Alignment *self, const uint8_t **quality );
+
+/* GetQuality2
+ *  get the raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the BAM_Alignment
+ */
+rc_t BAM_AlignmentGetQuality2(const BAM_Alignment *self, const uint8_t **quality, uint8_t *offset);
+
+/* GetRefSeqId
+ *  get id of reference sequence
+ *  pass result into BAM_FileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if set as invalid within BAM ( rc may be zero )
+ */
+rc_t BAM_AlignmentGetRefSeqId ( const BAM_Alignment *self, int32_t *refSeqId );
+
+/* GetMateRefSeqId
+ *  get id of mate's reference sequence
+ *  pass result into BAM_FileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if invalid
+ */
+rc_t BAM_AlignmentGetMateRefSeqId ( const BAM_Alignment *self, int32_t *refSeqId );
+
+
+/* GetPosition
+ *  get the aligned position on the ref. seq.
+ *
+ *  "n" [ IN ] - zero-based position index for cases of multiple alignments
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t BAM_AlignmentGetPosition ( const BAM_Alignment *self, int64_t *pos );
+    
+/* GetPosition2
+ *  get the aligned start position on the ref. seq.
+ *  get the aligned length on the ref. seq.
+ *
+ *  "n" [ IN ] - zero-based position index for cases of multiple alignments
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ *
+ *  "length" [ OUT ] - length of alignment on reference sequence
+ *  returns 0 if invalid
+ */
+rc_t BAM_AlignmentGetPosition2 ( const BAM_Alignment *self, int64_t *pos, uint32_t *length );
+    
+
+/* GetMatePosition
+ *  starting coordinate of mate's alignment on ref. seq.
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t BAM_AlignmentGetMatePosition ( const BAM_Alignment *self, int64_t *pos );
+
+
+/* IsMapped
+ *  is the alignment mapped to something
+ */
+bool BAM_AlignmentIsMapped ( const BAM_Alignment *self );
+
+
+/* GetReadGroupName
+ *  get the name of the read group (i.e. accession)
+ *  pass result into BAM_FileGetReadGroupByName to get the Read Group record
+ *
+ *  "name" [ OUT ] - return param for NUL-terminated read group name
+ *   held internally, validity is guaranteed for the life of the BAM_Alignment
+ */
+rc_t BAM_AlignmentGetReadGroupName ( const BAM_Alignment *self, const char **name );
+
+
+/* GetReadName
+ *  get the read name (i.e. spot name)
+ * GetReadName2
+ *  get the read name and length in bytes
+ *
+ *  "name" [ OUT ] - return param for NUL-terminated read name
+ *   held internally, validity is guaranteed for the life of the BAM_Alignment
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ *   excluding terminating NUL.
+ */
+rc_t BAM_AlignmentGetReadName ( const BAM_Alignment *self, const char **name );
+rc_t BAM_AlignmentGetReadName2 ( const BAM_Alignment *self, const char **name, size_t *length );
+    
+    
+/* GetReadName3
+ *  get the read name and length in bytes
+ *  applies fixups to name
+ *
+ *  "name" [ OUT ] - return param for read name
+ *   held internally, validity is guaranteed for the life of the BAM_Alignment
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t BAM_AlignmentGetReadName3 ( const BAM_Alignment *self, const char **name, size_t *length );
+
+/* HasColorSpace
+ *  Does the alignment have colorspace info
+ */
+bool BAM_AlignmentHasColorSpace ( const BAM_Alignment *self );
+
+/* GetCSKey
+ *  get the colorspace key
+ *
+ *  "cskey" [ OUT ] - return param 
+ */
+rc_t BAM_AlignmentGetCSKey ( const BAM_Alignment *self, char cskey[1] );
+
+rc_t BAM_AlignmentGetCSSeqLen ( const BAM_Alignment *self, uint32_t *seqLen );
+/* GetCSSequence
+ *  get the colorspace sequence data [0..seqLen)
+ *  caller provides buffer of seqLen bytes
+ *
+ *  "csseq" [ OUT ] - pointer to a buffer of at least seqLen bytes
+ *  "seqLen" [ IN ] - length of sequence from BAM_AlignmentGetCSSeqLen
+ */
+rc_t BAM_AlignmentGetCSSequence ( const BAM_Alignment *self, char *csseq, uint32_t seqLen );
+
+rc_t BAM_AlignmentGetCSQuality(BAM_Alignment const *cself, uint8_t const **quality, uint8_t *offset);
+
+
+/* GetFlags
+ *  return the raw "flags" bitmap word
+ *
+ *  "flags" [ OUT ] - return parameter for bitmap word
+ */
+enum BAMFlags
+{
+    BAMFlags_bit_WasPaired = 0,  /* was paired when sequenced */
+    BAMFlags_bit_IsMappedAsPair,
+    BAMFlags_bit_SelfIsUnmapped,
+    BAMFlags_bit_MateIsUnmapped,
+    BAMFlags_bit_SelfIsReverse,
+    BAMFlags_bit_MateIsReverse,
+    BAMFlags_bit_IsFirst,        /* and mate exists */
+    BAMFlags_bit_IsSecond,       /* and mate exists */
+    BAMFlags_bit_IsNotPrimary,   /* a read having split hits may have multiple primary alignments */
+    BAMFlags_bit_IsLowQuality,   /* fails platform/vendor quality checks */
+    BAMFlags_bit_IsDuplicate,    /* PCR or optical dup */
+    BAMFlags_bit_IsSupplemental,
+    
+    BAMFlags_WasPaired      = (1 << BAMFlags_bit_WasPaired),
+    BAMFlags_IsMappedAsPair	= (1 << BAMFlags_bit_IsMappedAsPair),
+    BAMFlags_SelfIsUnmapped	= (1 << BAMFlags_bit_SelfIsUnmapped),
+    BAMFlags_MateIsUnmapped	= (1 << BAMFlags_bit_MateIsUnmapped),
+    BAMFlags_SelfIsReverse  = (1 << BAMFlags_bit_SelfIsReverse),
+    BAMFlags_MateIsReverse  = (1 << BAMFlags_bit_MateIsReverse),
+    BAMFlags_IsFirst        = (1 << BAMFlags_bit_IsFirst),
+    BAMFlags_IsSecond       = (1 << BAMFlags_bit_IsSecond),
+    BAMFlags_IsNotPrimary   = (1 << BAMFlags_bit_IsNotPrimary),
+    BAMFlags_IsLowQuality   = (1 << BAMFlags_bit_IsLowQuality),
+    BAMFlags_IsDuplicate    = (1 << BAMFlags_bit_IsDuplicate),
+    BAMFlags_IsSupplemental = (1 << BAMFlags_bit_IsSupplemental)
+};
+
+rc_t BAM_AlignmentGetFlags ( const BAM_Alignment *self, uint16_t *flags );
+
+
+/* GetMapQuality
+ *  return the quality score of mapping
+ *
+ *  "qual" [ OUT ] - return param for quality score
+ */
+rc_t BAM_AlignmentGetMapQuality ( const BAM_Alignment *self, uint8_t *qual );
+
+
+/* GetAlignmentDetail
+ *  get the alignment details
+ *
+ *  "rslt" [ OUT, NULL OKAY ] and "count" [ IN ] - array to hold detail records
+ *
+ *  "actual" [ OUT, NULL OKAY ] - number of elements written to "rslt"
+ *   required if "rslt" is not NULL
+ *
+ *  "firstMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the first match to the refSeq
+ *   or < 0 if invalid
+ *
+ *  "lastMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the last match to the refSeq
+ *   or < 0 if invalid
+ */
+typedef uint32_t BAMCigarType;
+enum BAMCigarTypes
+{
+    ct_Match    = 'M', /* 0 */
+    ct_Insert   = 'I', /* 1 */
+    ct_Delete   = 'D', /* 2 */
+    ct_Skip     = 'N', /* 3 */
+    ct_SoftClip = 'S', /* 4 */
+    ct_HardClip = 'H', /* 5 */
+    ct_Padded   = 'P', /* 6 */
+    ct_Equal    = '=', /* 7 */
+    ct_NotEqual = 'X', /* 8 */
+    ct_Overlap  = 'B' /* Complete Genomics extension */
+};
+
+typedef struct BAM_AlignmentDetail BAM_AlignmentDetail;
+struct BAM_AlignmentDetail
+{
+    int64_t refSeq_pos; /* position on refSeq where this alignment region starts or -1 if NA */
+    int32_t read_pos;   /* position on read where this alignment region starts or -1 if NA */
+    uint32_t length;    /* length of alignment region */
+    BAMCigarType type;  /* type of alignment */
+};
+
+rc_t BAM_AlignmentGetAlignmentDetail ( const BAM_Alignment *self,
+    BAM_AlignmentDetail *rslt, uint32_t count, uint32_t *actual,
+    int32_t *firstMatch, int32_t *lastMatch );
+
+
+/* GetCigarCount
+ *  the number of CIGAR elements
+ *  a CIGAR element consists of the pair of matching op code and op length
+ *
+ *  "n" [ OUT ] - return param for cigar count
+ */
+rc_t BAM_AlignmentGetCigarCount ( const BAM_Alignment *self, uint32_t *n );
+
+
+rc_t BAM_AlignmentGetRawCigar(const BAM_Alignment *cself, uint32_t const **rslt, uint32_t *length);
+
+/* GetCigar
+ *  get CIGAR element n [0..GetCigarCount)
+ */
+rc_t BAM_AlignmentGetCigar ( const BAM_Alignment *self,
+    uint32_t n, BAMCigarType *type, uint32_t *length );
+
+
+/* GetInsertSize
+ *  distance in bases to start of mate's alignment on ref. seq.
+ *
+ *  "size" [ OUT ] - >0 for first in pair, <0 for second
+ */
+rc_t BAM_AlignmentGetInsertSize ( const BAM_Alignment *self, int64_t *size );
+
+rc_t BAM_AlignmentFormatSAM(const BAM_Alignment *self,
+                            size_t *actsize,
+                            size_t maxsize,
+                            char *buffer);
+
+/* OptDataForEach
+ *  DANGER
+ *  these optional fields are the weakest part of BAM.
+ *
+ *  It is probably best to not use this info.
+ *  You can't count on them being there.
+ *  Moreover, you might need to interpret the types correctly.
+ */
+typedef uint32_t BAMOptDataValueType;
+enum BAMOptDataValueTypes
+{
+    dt_CSTRING = 'Z',
+    dt_INT8 = 'c',
+    dt_UINT8 = 'C',
+    dt_INT16 = 's',     
+    dt_UINT16 = 'S',    
+    dt_INT = 'i',
+    dt_UINT = 'I',
+    dt_FLOAT32 = 'f',
+#if 0
+    dt_FLOAT64 = 'd', /* removed? not in Dec 19 2013 version of SAMv1.pdf */
+#endif
+    dt_ASCII = 'A',
+    dt_HEXSTRING = 'H',
+    dt_NUM_ARRAY = 'B'
+};
+
+#define OPT_TAG_X "X?" /* end user data */
+#define OPT_TAG_Y "Y?" /* end user data */
+#define OPT_TAG_Z "Z?" /* end user data */
+
+#define OPT_TAG_ReadGroup   "RG" /* Read Group; same as BAM_AlignmentGetReadGroupName */
+#define OPT_TAG_Library     "LB" /* LIbrary; also BAMReadGroup */
+#define OPT_TAG_Unit        "PU" /* Platform specific Unit; also BAMReadGroup */
+#define OPT_TAG_Program     "PG" /* Alignment software name */
+#define OPT_TAG_AlignScore  "AS" /* Alignment Score (MapQuality?) */
+#define OPT_TAG_SecQual     "SQ" /* second called base:2 and quality:6; length == ReadLength? warning */
+#define OPT_TAG_MateMapQual "MQ" /* map Quality of mate */
+#define OPT_TAG_NumMismatch "NM" /* Number of Mismatches */
+#define OPT_TAG_Hits0       "H0" /* Number of perfect hits */
+#define OPT_TAG_Hits1       "H1" /* Number of off-by-one */
+#define OPT_TAG_Hits2       "H2" /* Number of off-by-two */
+#define OPT_TAG_CondQual    "UQ" /* conditional Quality of read */
+#define OPT_TAG_CondQPair   "PQ" /* conditional Quality of pair */
+#define OPT_TAG_ReadHits    "NH" /* Number of times this read (spot) aligns */
+#define OPT_TAG_ReadHits2   "IH" /* Number of times this read (spot) aligns that are in this file */
+#define OPT_TAG_HitIndex    "HI" /* n-th hit for this read in this file */
+#define OPT_TAG_Match2      "MD" /* another sort of matching string like CIGAR but different? */
+#define OPT_TAG_ColorKey    "CS" /* primer and first color */
+#define OPT_TAG_ColorQual   "CQ" /* quality of above */
+#define OPT_TAG_ColorMisses "CM" /* Number of color-space Mismatches */
+#define OPT_TAG_SeqOverlap  "GS" 
+#define OPT_TAG_QualOverlap "GQ" 
+#define OPT_TAG_OverlapDesc "GC"
+#define OPT_TAG_MateSeq     "R2" /* sequence of the mate */
+#define OPT_TAG_MateQual    "Q2" /* quality scores of the mate */
+#define OPT_TAG_OtherQual   "S2"
+#define OPT_TAG_NextHitRef  "CC" /* Reference name of the next hit */
+#define OPT_TAG_NextHitPos  "CP" /* coordinate of the next hit */
+#define OPT_TAG_SingleMapQ  "SM" /* quality of mapping as if not paired */
+#define OPT_TAG_AM          "AM"
+#define OPT_TAG_MAQFlag     "MQ"
+
+
+struct BAMOptData
+{
+    BAMOptDataValueType type;
+    uint32_t element_count;
+    union {
+        int8_t i8[8];
+        uint8_t u8[8];
+        int16_t i16[4];
+        uint16_t u16[4];
+        int32_t i32[2];
+        uint32_t u32[2];
+        int64_t i64[2];
+        uint64_t u64[2];
+        float f32[2];
+        double f64[1];
+        char asciiz[8];
+    } u;
+};
+
+typedef struct BAMOptData BAMOptData;
+
+typedef rc_t ( * BAMOptionalDataFunction )
+    ( void *ctx, const char tag[2], const BAMOptData *value );
+
+rc_t BAM_AlignmentOptDataForEach
+    ( const BAM_Alignment *self, void *ctx, BAMOptionalDataFunction callback );
+
+    
+bool BAM_AlignmentHasCGData(BAM_Alignment const *self);
+
+rc_t BAM_AlignmentCGReadLength(BAM_Alignment const *self, uint32_t *readlen);
+
+rc_t BAM_AlignmentGetCGSeqQual(BAM_Alignment const *self,
+                                 char sequence[],
+                                 uint8_t quality[]);
+
+rc_t BAM_AlignmentGetCGCigar(BAM_Alignment const *self,
+                               uint32_t *cigar,
+                               uint32_t cig_max,
+                               uint32_t *cig_act);
+    
+rc_t BAM_AlignmentGetTI(BAM_Alignment const *self, uint64_t *ti);
+
+/* strand = '+', '-', or ' ' */
+rc_t BAM_AlignmentGetRNAStrand(BAM_Alignment const *self, uint8_t *strand);
+
+rc_t BAM_AlignmentGetCGAlignGroup(BAM_Alignment const *self,
+                                              char buffer[],
+                                              size_t max_size,
+                                              size_t *act_size);
+
+rc_t BAM_AlignmentGetLinkageGroup(BAM_Alignment const *self,
+                                  char const ** BX,
+                                  char const ** CB,
+                                  char const ** UB);
+    
+rc_t BAM_AlignmentGetBarCode(BAM_Alignment const *self,
+                                  char const **BC);
+
+    
+/*--------------------------------------------------------------------------
+ * BAM_File
+ */
+typedef struct BAM_File BAM_File;
+
+typedef struct BAMRefSeq BAMRefSeq;
+struct BAMRefSeq
+{
+    uint64_t length;
+    const char *name; /* not null unique */
+    const char *assemblyId;
+    const uint8_t *checksum;
+    const char *uri;
+    const char *species;
+    uint32_t id;
+    uint8_t checksum_array[16];
+};
+
+typedef struct BAMReadGroup BAMReadGroup;
+struct BAMReadGroup
+{
+    const char *name; /* not null unique, accession e.g. SRR001138 */
+    const char *sample; /* not null */
+    const char *library;
+    const char *description;
+    const char *unit; /* platform specific identifier, e.g. BI.080214_SL-XAJ_0001_FC2044KAAXX.7 */
+    const char *insertSize;
+    const char *center; /* e.g. BI */
+    const char *runDate;
+    const char *platform; /* e.g. ILLUMINA */
+    uint32_t id;
+};
+
+
+/* 64-bit structure stored as an integer
+ * The high-order 48 bits store the position in the file at which a 
+ * compressed block starts.  The low-order 16 bits store the position
+ * in the decompressed block at which a record starts.  This is the
+ * way that positions are represented in BAM indices.
+ */
+typedef uint64_t BAM_FilePosition;
+
+
+/* Make
+ *  open the BAM file specified by path
+ *
+ *  "path" [ IN ] - NUL terminated string or format
+ */
+rc_t BAM_FileMake(const BAM_File **result,
+                  KFile *defer,
+                  char const headerText[],
+                  char const path[], ... );
+
+/* AddRef
+ * Release
+ */
+rc_t BAM_FileAddRef ( const BAM_File *self );
+rc_t BAM_FileRelease ( const BAM_File *self );
+
+
+/* GetPosition
+ *  get the position of the about-to-be read alignment
+ *  this position can be stored
+ *  this position can be passed into SetPosition to seek to the same alignment
+ *
+ *  "pos" [ OUT ] - return parameter for position
+ */
+rc_t BAM_FileGetPosition ( const BAM_File *self, BAM_FilePosition *pos );
+
+
+/* GetProportionalPosition
+ *  get the aproximate proportional position in the input file
+ *  this is intended to be useful for computing progress
+ *
+ * NB - does not return rc_t
+ */
+float BAM_FileGetProportionalPosition ( const BAM_File *self );
+
+    
+/* Read
+ *  read an aligment
+ *
+ *  "result" [ OUT ] - return param for BAM_Alignment object
+ *   must be released with BAM_AlignmentRelease, is invalidated or contents
+ *   change on next call to BAM_FileRead2. Unlike with BAM_FileRead, no attempt is
+ *   made to preserve this object.
+ *
+ *  returns:
+ *    RC(..., ..., ..., rcRow, rcNotFound) at end
+ *    RC(..., ..., ..., rcRow, rcInvalid) and RC(..., ..., ..., rcRow, rcEmpty)
+ *      are not fatal and are resumable
+ *
+ *  tries to use static buffers and will log messages about parsing errors
+ */
+rc_t BAM_FileRead2 ( const BAM_File *self, const BAM_Alignment **result );
+
+
+/* GetRefSeqCount
+ *  get the number of Reference Sequences refered to in the header
+ *  this is not necessarily the number of Reference Sequences referenced
+ *  by the alignments
+ */
+rc_t BAM_FileGetRefSeqCount ( const BAM_File *self, uint32_t *count );
+
+
+/* GetRefSeq
+ *  get the n'th Ref. Seq. where n is [0..RefSeqCount)
+ *  the resulting pointer is static-like; it is freed when the BAM_File is.
+ *  IOW, it is good for precisely at long as the BAM_File is.
+ */
+rc_t BAM_FileGetRefSeq ( const BAM_File *self, uint32_t n, const BAMRefSeq **result );
+
+
+/* GetRefSeqById
+ *  get a Ref. Seq. by its id
+ *  the resulting pointer is static-like; it is freed when the BAM_File is.
+ *  IOW, it is good for precisely at long as the BAM_File is.
+ */
+rc_t BAM_FileGetRefSeqById ( const BAM_File *self, int32_t id, const BAMRefSeq **result );
+
+
+/* GetReadGroupCount
+ *  get the number of Read Groups (accessions, etc.) refered to in the header
+ *  this is not necessarily the number of Read Groups referenced
+ *  by the alignments
+ */
+rc_t BAM_FileGetReadGroupCount ( const BAM_File *self, uint32_t *count );
+
+/* GetReadGroup
+ *  get the n'th Read Group where n is [0..ReadGroupCount)
+ *  the resulting pointer is static-like; it is freed when the BAM_File is.
+ *  IOW, it is good for precisely at long as the BAM_File is.
+ */
+rc_t BAM_FileGetReadGroup ( const BAM_File *self, unsigned n, const BAMReadGroup **result );
+    
+/* GetHeaderText
+ *  get the text of the BAM header file
+ *  the resulting pointer is static-like; it is freed when the BAM_File is.
+ *  IOW, it is good for precisely at long as the BAM_File is.
+ */
+rc_t BAM_FileGetHeaderText(BAM_File const *cself, char const **header, size_t *header_len);
+    
+
+/* GetReadGroupByName
+ *  get a Read Group by its name
+ *  the resulting pointer is static-like; it is freed when the BAM_File is.
+ *  IOW, it is good for precisely at long as the BAM_File is.
+ */
+rc_t BAM_FileGetReadGroupByName ( const BAM_File *self,
+    const char *name, const BAMReadGroup **result );
diff --git a/tools/bam-loader/config-file.cpp b/tools/bam-loader/config-file.cpp
new file mode 100644
index 0000000..9eca698
--- /dev/null
+++ b/tools/bam-loader/config-file.cpp
@@ -0,0 +1,195 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "config-file.hpp"
+#include <string>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <cctype>
+#include <sstream>
+
+/*
+ * Config file:
+ *  The config file consists of lines containing whitespace (ASCII 9 or 32)
+ *  seperated fields.  The fields are:
+ *      NAME (unique)
+ *      SEQID
+ *      extra (optional)
+ */
+
+/// reads a line with leading and trailing whitespace trimmed;
+/// ignores lines consisting entirely of whitespace;
+static std::string const getline(std::istream &is)
+{
+    std::string line("");
+    auto ws = true;
+    size_t len = 0;
+    
+    for ( ; ; ) {
+        auto const ch = is.get();
+        if (ch < 0)
+            break;
+        if (ws && isspace(ch))
+            continue;
+        
+        if (ch == '\n' || ch == '\r')
+            break;
+        
+        ws = false;
+        line.push_back(ch);
+        if (!isspace(ch))
+            len = line.size();
+    }
+    line.erase(len);
+    
+    return line;
+}
+
+template <typename T>
+struct Range {
+    T start, end;
+    
+    Range(T const init) : start(init), end(init) {}
+    T const size() const {
+        return start < end ? (end - start) : 0;
+    }
+};
+
+struct Parse {
+    Range<std::string::size_type> name;
+    Range<std::string::size_type> seqid;
+    Range<std::string::size_type> extra;
+    
+    Parse()
+    : name(std::string::npos)
+    , seqid(std::string::npos)
+    , extra(std::string::npos)
+    {}
+    bool good() const {
+        return name.size() > 0 && seqid.size() > 0;
+    }
+};
+
+static Parse parseLine(std::string const &in) {
+    static std::string const whitespace(" \t");
+    Parse rslt;
+
+    if (in[0] != '#') {
+        rslt.name.start = 0;
+
+        rslt.name.end = in.find_first_of(whitespace);
+        if (rslt.name.end != std::string::npos) {
+            rslt.seqid.start = in.find_first_not_of(whitespace, rslt.name.end);
+            if (rslt.seqid.start != std::string::npos) {
+                rslt.seqid.end = in.find_first_of(whitespace, rslt.seqid.start);
+                if (rslt.seqid.end == std::string::npos)
+                    rslt.seqid.end = in.size();
+                else {
+                    rslt.extra.start = in.find_first_not_of(whitespace, rslt.seqid.end);
+                    rslt.extra.end = in.size();
+                }
+            }
+        }
+    }
+    
+    return rslt;
+}
+
+static ConfigFile::Line makeLine(std::string const &in, Parse const &parse) {
+    ConfigFile::Line rslt;
+    
+    rslt.NAME = in.substr(parse.name.start, parse.name.size());
+    rslt.SEQID = in.substr(parse.seqid.start, parse.seqid.size());
+    if (parse.extra.size() > 0)
+        rslt.EXTRA = in.substr(parse.extra.start, parse.extra.size());
+    else
+        rslt.EXTRA = "";
+    
+    return rslt;
+}
+
+static ConfigFile::Unparsed makeUnparsed(unsigned const lineno, std::string const &line) {
+    ConfigFile::Unparsed rslt;
+    
+    rslt.lineno = lineno;
+    rslt.line = line;
+    
+    return rslt;
+}
+
+ConfigFile::ConfigFile(std::istream &is) {
+    unsigned lineno = 0;
+    
+    while (is.good()) {
+        auto const in = getline(is);
+        if (in.size() == 0) {
+            break;
+        }
+        ++lineno;
+
+        auto const parse = parseLine(in);
+        if (parse.good())
+            lines.push_back(makeLine(in, parse));
+        else
+            unparsed.push_back(makeUnparsed(lineno, in));
+    }
+    if (is.eof())
+        msg = "no errors";
+    else
+        msg = "error reading input";
+    
+    std::ostringstream oss;
+    oss << msg << "; lines read: " << lineno;
+    msg = oss.str();
+}
+
+ConfigFile ConfigFile::load(std::string const &filename) {
+    std::ifstream ifs(filename);
+
+    return ifs.is_open() ? ConfigFile::load(ifs) : ConfigFile();
+}
+
+void ConfigFile::printDescription(std::ostream &os, bool const detail) const {
+    os << "Loaded " << lines.size() << " records" << std::endl;
+    if (detail) {
+        for (auto i = lines.begin(); i != lines.end(); ++i)
+            os << i->NAME << '\t' << i->SEQID << '\t' << i->EXTRA << std::endl;
+    }
+    os << "Unparsed lines: " << unparsed.size() << std::endl;
+    if (detail) {
+        for (auto i = unparsed.begin(); i != unparsed.end(); ++i)
+            os << i->lineno << '\t' << i->line << std::endl;
+    }
+    os << msg << std::endl;
+}
+
+#ifdef TESTING
+int main(int argc, char *argv[]) {
+    auto const config = argc > 1 ? ConfigFile::load(argv[1]) : ConfigFile::load(std::cin);
+    
+    config.printDescription(std::cout, true);
+}
+#endif
diff --git a/tools/bam-loader/config-file.hpp b/tools/bam-loader/config-file.hpp
new file mode 100644
index 0000000..dbb15f4
--- /dev/null
+++ b/tools/bam-loader/config-file.hpp
@@ -0,0 +1,65 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include <string>
+#include <vector>
+#include <iostream>
+
+/*
+ * Config file:
+ *  The config file consists of lines containing whitespace (ASCII 9 or 32)
+ *  seperated fields.  The fields are:
+ *      NAME (unique)
+ *      SEQID
+ *      extra (optional)
+ */
+
+class ConfigFile {
+    ConfigFile() {}
+    ConfigFile(std::istream &is);
+public:
+    struct Line {
+        std::string NAME;
+        std::string SEQID;
+        std::string EXTRA;
+    };
+    struct Unparsed {
+        unsigned lineno;
+        std::string line;
+    };
+    
+    std::vector<Line const> lines;
+    std::vector<Unparsed const> unparsed;
+    std::string msg;
+
+    ~ConfigFile() {}
+    
+    void printDescription(std::ostream &, bool detail = false) const;
+
+    static ConfigFile load(std::istream &is) {
+        return ConfigFile(is);
+    }
+    static ConfigFile load(std::string const &filename);
+};
diff --git a/tools/bam-loader/fasta-file.cpp b/tools/bam-loader/fasta-file.cpp
new file mode 100644
index 0000000..013cee8
--- /dev/null
+++ b/tools/bam-loader/fasta-file.cpp
@@ -0,0 +1,257 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "fasta-file.hpp"
+#include <string>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <cctype>
+
+/*
+ * Fasta files:
+ *  Fasta file consists of one of more sequences.  A sequence in a fasta file
+ *  consists of a seqid line followed by lines containing the bases of the
+ *  sequence.  A seqid line starts with '>' and the next word (whitespace
+ *  delimited) is the seqid.
+ */
+
+struct tmpSequence {
+    std::string SEQID;
+    std::string SEQID_LINE;
+    size_t data_start;
+    unsigned data_size;
+    bool hadErrors;
+};
+
+/// reads a line with leading and trailing whitespace trimmed;
+/// ignores lines consisting entirely of whitespace;
+static std::string const getline(std::istream &is)
+{
+    std::string line("");
+    auto ws = true;
+    size_t len = 0;
+    
+    for ( ; ; ) {
+        auto const ch = is.get();
+        if (ch < 0)
+            break;
+        if (ws && isspace(ch))
+            continue;
+        
+        if (ch == '\n' || ch == '\r')
+            break;
+        
+        ws = false;
+        line.push_back(ch);
+        if (!isspace(ch))
+            len = line.size();
+    }
+    line.erase(len);
+    
+    return line;
+}
+
+static bool cleanCopyFastaSequence(char *const dst,
+                                   char const *const src,
+                                   unsigned const len)
+{
+    static char const tr[] = {
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','.',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ','A','B','C','D',' ',' ','G','H',' ',' ','K',' ','M','N',' ',
+        ' ',' ','R','S','T',' ','V','W','N','Y',' ',' ',' ',' ',' ',' ',
+        ' ','A','B','C','D',' ',' ','G','H',' ',' ','K',' ','M','N',' ',
+        ' ',' ','R','S','T',' ','V','W','N','Y',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+        ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+    };
+
+    auto hadErrors = false;
+
+    for (unsigned i = 0; i < len; ++i) {
+        int const ch = src[i]; // .ACMGRSVTWYHKDBN and lower case
+
+        if (ch != ' ')
+            dst[i] = ch;
+        else {
+            dst[i] = 'N';
+            hadErrors = true;
+        }
+    }
+
+    return hadErrors;
+}
+
+static bool readFile(std::istream &is,
+                     char *&data,
+                     size_t &size,
+                     size_t &limit,
+                     std::vector<tmpSequence> &sequences
+                     )
+{
+    static std::string const whitespace("\t ");
+    tmpSequence sequence;
+    auto st = 0;
+
+    for ( ; ; ) {
+        auto line = getline(is);
+
+        switch (st) {
+            case 1:
+                if (line[0] == '>') {
+                    auto const seqidstart = line.find_first_not_of(whitespace, 1);
+
+                    if (seqidstart != std::string::npos) {
+                        sequence.SEQID_LINE.push_back(' ');
+                        sequence.SEQID_LINE.append(line, seqidstart, std::string::npos);
+                    }
+                    break;
+                }
+                ++st;
+                /* fallthrough */
+            case 2:
+                if (line[0] == '>' || line.size() == 0) {
+                    sequences.push_back(sequence);
+                    st = 0;
+                    /* fallthrough */
+                }
+                else {
+                    auto const start = line.find_first_not_of(whitespace);
+                    auto const len = line.size() - start;
+
+                    if (size + len > limit) {
+                        do { limit <<= 1; } while (size + len > limit);
+                        auto const tmp = realloc(reinterpret_cast<void *>(data), limit);
+
+                        if (!tmp) throw std::bad_alloc();
+                        data = reinterpret_cast<char *>(tmp);
+                    }
+
+                    sequence.hadErrors |= cleanCopyFastaSequence(data + size, line.data() + start, len);
+                    size += len;
+                    sequence.data_size += len;
+                    break;
+                }
+            case 0:
+                if (line.size() == 0)
+                    return true;
+
+                if (line[0] == '>') {
+                    auto const seqidstart = line.find_first_not_of(whitespace, 1);
+                    if (seqidstart != std::string::npos) {
+                        auto const seqidend = line.find_first_of(whitespace, seqidstart);
+
+                        sequence.SEQID_LINE = std::string(line, seqidstart);
+                        sequence.SEQID = std::string(line, seqidstart, seqidend - seqidstart);
+                        sequence.data_start = size;
+                        sequence.data_size = 0;
+                        sequence.hadErrors = false;
+                        ++st;
+                        break;
+                    }
+                }
+            default:
+                return false;
+        }
+    }
+}
+
+FastaFile::FastaFile(std::istream &is) : data(nullptr)
+{
+    std::vector<tmpSequence> tmp;
+    size_t limit = 1024u * 1024u;
+    size_t size = 0;
+    auto data = reinterpret_cast<char *>(malloc(limit));
+
+    if (!data)
+        throw std::bad_alloc();
+    
+    if (readFile(is, data, size, limit, tmp) && is.eof()) {
+        this->data = realloc(reinterpret_cast<void *>(data), size);
+        if (!this->data) throw std::bad_alloc();
+
+        for (auto i = tmp.begin(); i != tmp.end(); ++i) {
+            Sequence seq;
+
+            seq.SEQID = i->SEQID;
+            seq.SEQID_LINE = i->SEQID_LINE;
+            seq.data = data + i->data_start;
+            seq.length = i->data_size;
+            seq.hadErrors = i->hadErrors;
+
+            sequences.push_back(seq);
+        }
+    }
+    else {
+        free(data);
+    }
+}
+
+FastaFile FastaFile::load(std::string const filename)
+{
+    std::ifstream ifs(filename);
+
+    return ifs.is_open() ? FastaFile::load(ifs) : FastaFile();
+}
+
+#ifdef TESTING
+void wait(std::string const &msg = "Waiting") {
+    std::string s;
+    
+    std::cout << msg << "... [Press enter]" << std::endl;
+    std::getline(std::cin, s);
+}
+
+void test(std::string const &filename) {
+    auto const test = FastaFile::load(filename);
+    
+    std::cout << "Loaded " << test.sequences.size() << " sequences" << std::endl;
+    
+    size_t total = 0;
+    for (auto i = test.sequences.begin(); i != test.sequences.end(); ++i)
+        total += i->length;
+    
+    std::cout << "Loaded " << total << " bases" << std::endl;
+    
+//    wait("Run leaks");
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc > 1) {
+        test(argv[1]);
+    }
+//    wait("Run leaks again");
+}
+#endif
diff --git a/tools/bam-loader/fasta-file.hpp b/tools/bam-loader/fasta-file.hpp
new file mode 100644
index 0000000..543c4b0
--- /dev/null
+++ b/tools/bam-loader/fasta-file.hpp
@@ -0,0 +1,63 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <string>
+#include <vector>
+#include <iostream>
+
+/*
+ * Fasta files:
+ *  Fasta file consists of one of more sequences.  A sequence in a fasta file
+ *  consists of a seqid line followed by lines containing the bases of the
+ *  sequence.  A seqid line starts with '>' and the next word (whitespace
+ *  delimited) is the seqid.
+ */
+
+class FastaFile {
+    FastaFile() : data(NULL) {}
+    FastaFile(std::istream &is);
+
+    void *data;
+public:
+    struct Sequence {
+        std::string SEQID;
+        std::string SEQID_LINE;
+        char const *data;
+        unsigned length;
+        bool hadErrors; // erroneous base values are replaced with N
+    };
+
+    std::vector<Sequence const> sequences;
+
+    ~FastaFile() {
+        free(data);
+        data = nullptr;
+    }
+
+    static FastaFile load(std::istream &is) {
+        return FastaFile(is);
+    }
+    static FastaFile load(std::string const filename);
+};
diff --git a/tools/bam-loader/hashtable.c b/tools/bam-loader/hashtable.c
new file mode 100644
index 0000000..ee8f8e6
--- /dev/null
+++ b/tools/bam-loader/hashtable.c
@@ -0,0 +1,878 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+#endif
+
+#include "hashtable.h"
+
+typedef struct HTBucket HTBucket;
+typedef struct HTEntry HTEntry;
+
+#define HASH_TABLE_ENTRIES_MAX (0x80000)
+#define HASH_TABLE_PREALLOC_MAX 1
+
+struct HTEntry {
+    const void *payload;
+    uint32_t hashValue;
+};
+
+struct HTBucket {
+    HTBucket *overflow;
+    uint32_t used;      /* one bit per entry */
+    HTEntry entry[32];
+};
+
+struct HashTable {
+    size_t hashMask;    /* the "size" of the table is hashMask + 1 */
+    size_t entryCount;  /* total number of entries in table */
+
+    HashTableKeyCompFunc comp_func;
+    const void *ctx;
+    
+#if HASH_TABLE_PREALLOC_MAX
+    HTBucket table[HASH_TABLE_ENTRIES_MAX];
+#else
+    HTBucket *table;
+#endif
+};
+
+typedef struct HashTableRealIterator {
+    HashTable *table;
+    HTBucket *bucket;
+    uint32_t slot;
+    uint32_t hashValue;
+} HashTableRealIterator;
+
+typedef union HashTableImplIterator {
+    HashTableRealIterator real;
+    HashTableIterator user;
+} HashTableImplIterator;
+
+static unsigned FirstSet(unsigned bits)
+{
+    assert(bits != 0);
+    if ((bits & 0xFFFF) != 0) {
+        if ((bits & 0xFF) != 0) {
+            if ((bits & 0xF) != 0) {
+                if ((bits & 0x3) != 0) {
+                    if ((bits & 0x1) != 0)
+                        return 0;
+                    else
+                        return 1;
+                }
+                else if ((bits & 0x4) != 0)
+                    return 2;
+                else
+                    return 3;
+            }
+            else if ((bits & 0x30) != 0) {
+                if ((bits & 0x10) != 0)
+                    return 4;
+                else
+                    return 5;
+            }
+            else if ((bits & 0x40) != 0)
+                return 6;
+            else
+                return 7;
+        }
+        else if ((bits & 0xF00) != 0) {
+            if ((bits & 0x300) != 0) {
+                if ((bits & 0x100) != 0)
+                    return 8;
+                else
+                    return 9;
+            }
+            else if ((bits & 0x400) != 0)
+                return 10;
+            else
+                return 11;
+        }
+        else if ((bits & 0x3000) != 0) {
+            if ((bits & 0x1000) != 0)
+                return 12;
+            else
+                return 13;
+        }
+        else if ((bits & 0x4000) != 0)
+            return 14;
+        else
+            return 15; 
+    }
+    else if ((bits & 0xFF0000) != 0) {
+        if ((bits & 0xF0000) != 0) {
+            if ((bits & 0x30000) != 0) {
+                if ((bits & 0x10000) != 0)
+                    return 16;
+                else
+                    return 17;
+            }
+            else if ((bits & 0x40000) != 0)
+                return 18;
+            else
+                return 19;
+        }
+        else if ((bits & 0x300000) != 0) {
+            if ((bits & 0x100000) != 0)
+                return 20;
+            else
+                return 21;
+        }
+        else if ((bits & 0x400000) != 0)
+            return 22;
+        else
+            return 23;
+    }
+    else if ((bits & 0xF000000) != 0) {
+        if ((bits & 0x3000000) != 0) {
+            if ((bits & 0x1000000) != 0)
+                return 24;
+            else
+                return 25;
+        }
+        else if ((bits & 0x4000000) != 0)
+            return 26;
+        else
+            return 27;
+    }
+    else if ((bits & 0x30000000) != 0) {
+        if ((bits & 0x10000000) != 0)
+            return 28;
+        else
+            return 29;
+    }
+    else if ((bits & 0x40000000) != 0)
+        return 30;
+    else
+        return 31;
+    
+}
+
+static rc_t HTBucketNextOpenSlot(HTBucket *self, HTBucket **rslt, unsigned *slot)
+{
+    while (self->used == 0xFFFFFFFF) {
+        if (self->overflow != NULL) {
+            self = self->overflow;
+            continue;
+        }
+        self->overflow = malloc(sizeof(*self->overflow));
+        if (self->overflow == NULL)
+            return RC(rcCont, rcBuffer, rcAllocating, rcMemory, rcExhausted);
+        self->overflow->overflow = NULL;
+        self->overflow->used = 0;
+        *rslt = self->overflow;
+        *slot = 0;
+        return 0;
+    }
+    *rslt = self;
+    *slot = FirstSet(~self->used);
+    
+    return 0;
+}
+
+static rc_t HTBucketInsert(HTBucket *self, const HTEntry *entry)
+{
+    HTBucket *found;
+    unsigned slot;
+    rc_t rc = HTBucketNextOpenSlot(self, &found, &slot);
+    
+    if (rc)
+        return rc;
+    found->used |= (1 << slot);
+    found->entry[slot] = *entry;
+    return 0;
+}
+
+static bool HTBucketFreeSlot(HTBucket *self, unsigned slot)
+{
+    unsigned i;
+    
+    self->used &= ~(1 << slot);
+#if _DEBUGGING
+    self->entry[slot].payload = NULL;
+#endif
+    if (self->overflow == NULL)
+        return true;
+    
+    /* pull something out of the overflow */
+    i = FirstSet(self->overflow->used);
+    self->entry[slot] = self->overflow->entry[i];
+    self->used |= (1 << slot);
+    HTBucketFreeSlot(self->overflow, i);
+    if (self->overflow->used == 0) {
+        free(self->overflow);
+        self->overflow = NULL;
+    }
+    return false;
+}
+
+static void HTBucketForEach(const HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            if ((bits & 1) == 0)
+                continue;
+            fn((void *)self->entry[i].payload, ctx);
+        }
+        self = self->overflow;
+    } while (self != NULL);
+}
+
+static bool HTBucketDoUntil(const HTBucket *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            if ((bits & 1) == 0)
+                continue;
+            if (fn((void *)self->entry[i].payload, ctx))
+                return true;
+        }
+        self = self->overflow;
+    } while (self != NULL);
+    return false;
+}
+
+static bool HTBucketValidate(const HTBucket *self, uint32_t hash, uint32_t mask)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            const HTEntry *entry = &self->entry[i];
+            bool is_free = (bits & 1) == 0;
+#if _DEBUGGING
+            bool is_null = entry->payload == NULL;
+            
+            if (is_free != is_null)
+                return true;
+#endif
+            if (is_free)
+                continue;
+            if ((entry->hashValue & mask) != hash)
+                return true;
+        }
+        if (self->overflow && self->overflow->used == 0)
+            return true;
+        self = self->overflow;
+    } while (self != NULL);
+    return false;
+}
+
+static void HTBucketWhack(HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    uint32_t bits;
+    unsigned i;
+    
+    if (self->overflow) {
+        HTBucketWhack(self->overflow, fn, ctx);
+        free(self->overflow);
+    }
+    for (i = 0, bits = self->used; i != 32 && bits != 0 && fn; ++i, bits >>= 1) {
+        if ((bits & 1) == 0)
+            continue;
+        fn((void *)self->entry[i].payload, ctx);
+    }
+}
+
+static uint32_t GetHashValue(const uint8_t *key, unsigned len)
+{
+    /*
+     * My basic hash function is Pearson's hash.
+     * The tables below contain each value between 0 and 255 inclusive, in
+     * random order.  The tables were generated with the following perl script.
+     *
+     *   #!perl -w
+     *   my @x = (0 .. 255); # each value between 0 and 255 inclusive
+     *   foreach (0 .. 10000) { # randomize the order
+     *       my $i = $_ % 256;                    # a sequential index
+     *       my $r = rand(256);                   # a random index
+     *       ($x[$i], $x[$r]) = ($x[$r], $x[$i]); # swap x[i] and x[r]
+     *   }
+     *   print join(', ', map { sprintf '%3u', $_; } @x);
+     *
+     * You can generate lots of different 8-bit hash functions this way.
+     *
+     * I generate four 8-bit hashes and combine them to make a 32-bit one.
+     * Even though I may not use all bits for the hash (e.g. the limit on the
+     * table's size is much less than UINT32_MAX), computing and storing the
+     * full hash reduces the number of string compares I have to do when buckets
+     * have lots of items in them.
+     */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    static const uint8_t T2[] = {
+        119, 174,  44, 225,  94, 226, 141, 197,  35, 241, 179, 154,  26, 161, 129,  10,
+        104,  53,  97,  12, 243,  80,  51, 123, 185,  13,  66, 214, 114,  17,  74, 165,
+        110, 143, 170, 222, 242,  73,  40, 101,  56, 163,  68,  86, 198,   9,  21,  90,
+          8,   1, 146, 121, 103,  70,   5, 160, 149,  50, 145, 236, 100,  75, 148,  58,
+         55,  15,  33, 131, 127, 186,   6, 109, 115,   2, 108,  52, 209, 128, 208,  47,
+        220, 173,  45,  72, 156, 212, 152, 102,  77,  36, 134, 137, 162,  54, 235, 167,
+         28, 255, 155, 240, 135, 176, 246, 244,  22, 157,  20, 224, 210, 192,  71, 140,
+         14, 211, 251, 204,  30, 213, 132, 248, 178, 187, 142,  62, 215, 106, 229, 125,
+         41, 216,  49,  29,  98,  32,  18, 237,  79, 206,  63, 227,  25,  99, 150, 223,
+        171, 118,   4, 139,  81,   0, 133,  95, 188, 120,  27, 124,  61, 195, 231, 207,
+         31, 202,  91, 252,  46,  39, 250, 144, 238, 254, 219, 200, 130, 201,  48, 107,
+        205, 177,  88,  16, 147, 221, 164, 184,  89,  67, 190,  11, 175,  42, 136, 189,
+        245, 117,  83,   3, 180, 172,  76,  43, 183,  84, 218, 169, 253, 159, 196,  59,
+        193, 249, 181, 116, 153,  24,  87, 239, 138, 199, 111,  82,  69, 105,  78, 151,
+        122, 168, 126,  85, 228, 233,  34, 113, 194, 191,  19, 230, 182,  96, 217,  38,
+        234, 232,  92,  23,  57, 203,  65,  60,  64,  37, 158, 247,  93, 166, 112,   7
+    };
+    static const uint8_t T3[] = {
+        103,  33, 228,  32, 183, 231, 139,  60,  67,  80, 184, 100,  70,  19,  14,  58,
+        104,  48, 140,  10,  91, 137,  31,  96, 102, 180,  77, 121, 251, 167,  37, 206,
+         79, 151, 109,  15,  92, 174, 108,  16,  95, 145,  18, 236,  49, 177, 135,   0,
+        165,  86,  83, 107, 144,  44,  27, 116, 168, 193, 119, 230,  56,  97, 138, 149,
+        132,  21, 176,  39, 205,  12,  69, 179, 210,  25, 213, 194, 239, 209, 248,  28,
+         93,  38, 224,  66, 105, 160,  40,  17,  23, 129, 212,   8, 178, 118, 163,  73,
+          3,  63,  57,  94, 254, 186, 131, 166,  61, 191, 133, 192,  78, 114, 250, 200,
+        222, 136, 188, 204, 101,  11, 247, 146, 142, 152, 171, 157, 110, 141, 199,  29,
+        147,  88, 211, 240, 164, 196, 189,  50,  65, 112, 219, 237, 197, 115, 126, 154,
+        246, 170, 227, 235,  42, 148,  84, 201, 242,  85,  35,   6, 173, 122, 215, 218,
+         75,  82,   1, 169, 143, 195,  51, 155,  54,   9,  71,  24,  53,   7,  47, 229,
+        158,  26, 245,  89, 150, 181, 255, 249, 221, 217, 223,  76,  90,  36, 216, 130,
+        220, 125, 182,  55, 202, 234, 203, 123,  34, 172,  74,  30,   4, 241, 162, 233,
+         64,  62, 127,  20,  52, 106, 190, 253, 185, 111, 232,   2, 187,  13,  68, 117,
+        128,  98, 208,  41, 159,  46, 207, 244, 226,  22, 252, 214,   5, 243,  99, 113,
+        120, 225, 175, 124, 134, 161, 156,  45,  72,  87,  43,  59, 198, 153, 238,  81
+    };
+    static const uint8_t T4[] = {
+        103, 124,  53, 254,  91, 106, 131,  69, 158,  23, 249, 171, 241,  30, 194, 217,
+         64, 123, 129, 118,  35,  16, 209, 190, 155, 104, 148, 163,  78, 188, 174, 245,
+        218, 125, 210, 250, 107, 212, 117,  17, 109,  44,  71,  38, 253, 177,  11, 114,
+         60, 192, 133, 219,  97, 246,  41, 228, 127, 151,  62, 213, 224, 234, 138, 162,
+         31, 110, 222, 141,  25, 135,  18,  49, 132, 242, 203, 207,  68, 130, 116,  59,
+         63,  67, 169, 147,  94,   0, 134,  77,  51, 128, 247,  21,  88, 145, 122,  19,
+         40,  58,   9,  39, 252,   8, 156, 126, 146,  80, 159, 201, 186, 175,  74,  89,
+         54, 173, 208,  86, 239,   6,  61, 139,  66,  87, 150, 231,  82,  42, 197, 202,
+        199, 196, 121, 112, 161,  99,  90, 144, 105, 195, 255,  27,   3, 216, 187, 172,
+         12,   4, 221, 182, 215, 214,  76,  98,  15,  33,  47, 200, 113, 140, 227, 191,
+        100,  24, 251, 185, 152, 237, 235,  92,  96,   1, 193,   2, 154,  72, 198, 223,
+         28,  46,  13,  56, 153, 232, 233, 143, 108, 184,  43, 119,  84, 189, 120, 211,
+         10, 164,  73, 230, 149, 238,  20,  37,  95, 166, 240,  29, 204, 167, 243, 236,
+         45, 170, 220,   5,   7,  50, 160,  83, 157,  22, 168, 111,  55, 137, 206,  36,
+         85, 180,  79, 142, 102, 181,  14, 115,  57,  34,  75, 244, 248,  48,  93, 183,
+        229, 101, 205,  70, 226, 225, 165, 176, 136, 179,  52,  32,  26,  81,  65, 178
+    };
+    unsigned h1 = 0;
+    unsigned h2 = 0;
+    unsigned h3 = 0;
+    unsigned h4 = 0;
+    unsigned i;
+    
+    for (i = 0; i != len; ++i) {
+        uint8_t ch = key[i];
+        h1 = T1[h1 ^ ch];
+        h2 = T2[h2 ^ ch];
+        h3 = T3[h3 ^ ch];
+        h4 = T4[h4 ^ ch];
+    }
+    
+    return (h4 << 24) | (h3 << 16) | (h2 << 8) | h1;
+}
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *ctx)
+{
+    HashTable *self;
+    unsigned i;
+
+    *rslt = NULL;
+    
+    if (initialSize == 0)
+        initialSize = 2;
+    else {
+        uint32_t m;
+        
+        for (m = 2; m < initialSize; m <<= 1)
+            ;
+        initialSize = m;
+        
+        if (initialSize > HASH_TABLE_ENTRIES_MAX)
+            initialSize = HASH_TABLE_ENTRIES_MAX;
+    }
+    
+    self = malloc(sizeof(*self));
+    if (self == NULL)
+        return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+    
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    self->table = malloc(initialSize * sizeof(self->table[0]));
+    if (self == NULL) {
+        free(self);
+        return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+    }
+#endif
+    
+    for (i = 0; i != initialSize; ++i) {
+        self->table[i].used = 0;
+        self->table[i].overflow = NULL;
+    }
+    
+    self->hashMask = initialSize - 1;
+    self->entryCount = 0;
+    
+    self->comp_func = kf;
+    self->ctx = ctx;
+
+    *rslt = self;
+    
+    return 0;
+}
+
+static bool HashTableValidate(const HashTable *self)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        if (HTBucketValidate(&self->table[i], i, self->hashMask))
+            return true;
+    }
+    return false;
+}
+
+static rc_t HashTableExpand(HashTable *self)
+{
+    const uint32_t mask = (self->hashMask << 1) | 1;
+    size_t size;
+    unsigned i;
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    HTBucket *temp;
+#endif
+    
+    /* the table must be smaller than the limit */
+    if (self->hashMask >= HASH_TABLE_ENTRIES_MAX - 1)
+        return 0;
+    
+    size = self->hashMask + 1;
+    
+    /* the density of used slots needs to be high enough */
+    if (self->entryCount * 4 < size * 3 * 32)
+        return 0;
+    
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    temp = realloc(self->table, size * 2);
+    if (temp == NULL)
+        return RC(rcCont, rcTable, rcResizing, rcMemory, rcExhausted);
+    self->table = temp;
+#endif
+    
+    /* move any items that should be moved
+     * to the new buckets (about half should)
+     */
+    for (i = 0; i != size; ++i) {
+        HTBucket *bucket = &self->table[i];
+        HTBucket *other  = &self->table[i + size];
+        
+        other->overflow = NULL;
+        other->used = 0;
+        do {
+            unsigned j;
+            uint32_t bits = bucket->used;
+            
+            for (j = 0; j != 32 && bits != 0; ++j, bits >>= 1) {
+                /* slot j occupied? */
+                if ((bits & 1) != 0) {
+                    HTEntry *entry = &bucket->entry[j];
+                    
+                    assert((entry->hashValue & self->hashMask) == i);
+                    
+                    while ((entry->hashValue & mask) != i) {
+                        rc_t rc;
+
+                        /* move to new bucket */
+                        assert((entry->hashValue & mask) == i + size);
+                        
+                        rc = HTBucketInsert(other, entry);
+                        if (rc) return rc;
+                        if (HTBucketFreeSlot(bucket, j))
+                            break;
+                        
+                        /* FreeSlot decided to reuse the slot
+                         * for something from the overflow,
+                         * so process the new thing
+                         */
+                        assert((entry->hashValue & self->hashMask) == i);
+                    }
+                }
+            }
+            bucket = bucket->overflow;
+        } while (bucket);
+    }
+    self->hashMask = mask;
+#if 0
+    HashTableValidate(self);
+#endif    
+    return 0;
+}
+
+static rc_t HashTableShrink(HashTable *self)
+{
+    const uint32_t mask = self->hashMask >> 1;
+    size_t size;
+    unsigned i;
+    unsigned j;
+    
+    if (self->hashMask > 255)
+        return 0;
+    
+    size = self->hashMask + 1;
+    
+    if (self->entryCount * 4 >= size * 3 * 32)
+        return 0;
+    
+    for (j = 0, i = mask + 1; i != size; ++i, ++j) {
+        HTBucket *bucket = &self->table[i];
+        HTBucket *other  = &self->table[j];
+        
+        do {
+            unsigned k;
+            uint32_t bits = bucket->used;
+            
+            for (k = 0; k != 32 && bits != 0; ++k, bits >>= 1) {
+                if ((bits & 1) != 0) {
+                    rc_t rc;
+                    HTEntry *entry = &bucket->entry[k];
+                    
+                    assert((entry->hashValue & self->hashMask) == i);
+                    assert((entry->hashValue & mask) == j);
+                        
+                    rc = HTBucketInsert(other, entry);
+                    if (rc) return rc;
+                }
+            }
+            bucket = bucket->overflow;
+        } while (bucket);
+    }
+    self->hashMask = mask;
+#if 0
+    HashTableValidate(self);
+#endif    
+    return 0;
+}
+
+static bool HashTableFindSlot(const HashTable *self,
+                              const void *key,
+                              uint32_t key_len,
+                              HashTableRealIterator *iter
+                              )
+{
+    uint32_t h = GetHashValue(key, key_len);
+    const HTBucket *bucket = &self->table[h & self->hashMask];
+    const HTBucket *open_bucket = NULL;
+    int slot = 0;
+    
+    iter->hashValue = h;
+    do {
+        unsigned i;
+        uint32_t bits = bucket->used;
+        
+        for (i = 0; i != 32 && (bits != 0 || open_bucket == NULL); ++i, bits >>= 1) {
+            if ((bits & 1) == 0) {
+                if (open_bucket == NULL) {
+                    open_bucket = bucket;
+                    slot = i;
+                }
+                continue;
+            }
+            if (bucket->entry[i].hashValue != h)
+                continue;
+            if (self->comp_func(bucket->entry[i].payload, key, key_len, (void *)self->ctx) != 0)
+                continue;
+            
+            iter->bucket = (HTBucket *)bucket;
+            iter->slot = i;
+            return true;
+        }
+        if (bucket->overflow == NULL)
+            break;
+        bucket = bucket->overflow;
+    } while (1);
+    if (open_bucket == NULL) {
+        iter->bucket = (HTBucket *)bucket;
+        iter->slot = 32;
+    }
+    else {
+        iter->bucket = (HTBucket *)open_bucket;
+        iter->slot = slot;
+    }
+
+    return false;
+}
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length)
+{
+    HashTableImplIterator rslt;
+    
+    rslt.real.table = self;
+    HashTableFindSlot(self, key, key_length, &rslt.real);
+    
+    return rslt.user;
+}
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter,
+                        HashTableFreeFunc whack, void *ctx)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    uint32_t hv;
+    
+    assert(i->table == self);
+    if (i->slot > 32)
+        return;
+    if ((i->bucket->used & (1 << i->slot)) == 0)
+        return;
+    
+    hv = i->hashValue;
+    assert(hv == i->bucket->entry[i->slot].hashValue);
+    
+    if (whack)
+        whack((void *)i->bucket->entry[i->slot].payload, ctx);
+    
+    HTBucketFreeSlot(i->bucket, i->slot);
+    if (i->bucket->used == 0) {
+        HTBucket *parent = &self->table[hv & self->hashMask];
+        
+        if (i->bucket != parent) {
+            while (parent->overflow != i->bucket)
+                parent = parent->overflow;
+            assert(parent->overflow == i->bucket);
+            assert(i->bucket->overflow == NULL);
+            parent->overflow = NULL;
+            free(i->bucket);
+        }
+    }
+    --self->entryCount;
+}
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        HTBucketForEach(&self->table[i], fn, ctx);
+    }
+}
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        if (HTBucketDoUntil(&self->table[i], fn, ctx))
+            return true;
+    }
+    return false;
+}
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *ctx)
+{
+    unsigned i;
+    
+    if (self) {
+        for (i = 0; i != self->hashMask + 1; ++i)
+            HTBucketWhack(&self->table[i], fn, ctx);
+#if HASH_TABLE_PREALLOC_MAX
+#else
+        free(self->table);
+#endif
+        free(self);
+    }
+}
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    
+    if (i->slot < 32 && (i->bucket->used & (1 << i->slot)) != 0)
+        return true;
+    return false;
+}
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    return i->bucket->entry[i->slot].payload;
+}
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value)
+{
+    HashTableRealIterator *i = &((HashTableImplIterator *)iter)->real;
+    HashTable *self = i->table;
+    
+    if (i->slot >= 32) {
+        rc_t rc;
+        
+        assert(i->bucket->used == 0xFFFFFFFF);
+        rc = HashTableExpand(self);
+        if (rc)
+            return rc;
+        rc = HTBucketNextOpenSlot(&self->table[i->hashValue & self->hashMask], &i->bucket, &i->slot);
+        if (rc)
+            return rc;
+    }
+    assert((i->bucket->used & (1 << i->slot)) == 0);
+    i->bucket->entry[i->slot].hashValue = i->hashValue;
+    i->bucket->entry[i->slot].payload = value;
+    i->bucket->used |= (1 << i->slot);
+    ++self->entryCount;
+    return 0;
+}
+
+#define TESTING 0
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+
+struct pstring {
+    uint8_t len;
+    char str[255];
+};
+
+static int comp_func(const void *Obj, const void *key, uint32_t len, void *ignore)
+{
+    const struct pstring *obj = Obj;
+    return obj->len == len ? memcmp(obj->str, key, len) : obj->len - len;
+}
+
+static void print_key(void *Obj, void *ignore)
+{
+    const struct pstring *obj = Obj;
+    
+    printf("%s\n", obj->str);
+    return;
+}
+
+static struct pstring **LoadTestData(unsigned *count) {
+    FILE *fp = fopen("spot_name.txt", "r");
+    unsigned N = 0;
+    unsigned bytes = 0;
+    struct pstring **rslt;
+    
+    *count = 0;
+    if (fp == NULL) {
+        perror("failed to open test data file");
+        return NULL;
+    }
+    do {
+        char buf[256];
+        int i = fscanf(fp, " %256s ", buf);
+        if (i != 1)
+            break;
+        ++N;
+        bytes += strlen(buf);
+    } while (1);
+    rewind(fp);
+    
+    rslt = malloc(N * (sizeof(*rslt) + 2) + bytes);
+    if (rslt) {
+        unsigned i;
+        char *cp = (char *)&rslt[N];
+        
+        for (i = 0; i != N; ++i) {
+            rslt[i] = (struct pstring *)cp;
+            fscanf(fp, " %s ", rslt[i]->str);
+            rslt[i]->len = strlen(rslt[i]->str);
+            cp += rslt[i]->len + 2;
+        }
+        *count = N;
+    }
+    fclose(fp);
+    return rslt;
+}
+
+bool is_not_consistent(void *payload, void *context)
+{
+    return payload == NULL;
+}
+
+void test(void) {
+    HashTable *ht;
+    struct pstring **testdata;
+    unsigned N;
+    unsigned i;
+    
+    srand(time(0));
+    
+    testdata = LoadTestData(&N);
+   
+    if (HashTableMake(&ht, 0, comp_func, 0) != 0)
+        return;
+    
+    for (i = 0; i != N; ++i) {
+        const struct pstring *val = testdata[i % N];
+        HashTableIterator iter = HashTableLookup(ht, val->str, val->len);
+        
+        if (HashTableIteratorHasValue(&iter)) {
+            HashTableRemove(ht, &iter, 0, 0);
+        }
+        else {
+            HashTableIteratorSetValue(&iter, val);
+        }
+    }
+#if 1
+    HashTableValidate(ht);
+#else
+    HashTableForEach(ht, print_key, 0);
+#endif
+    HashTableWhack(ht, 0, 0);
+}
+#endif
+
diff --git a/tools/bam-loader/hashtable.h b/tools/bam-loader/hashtable.h
new file mode 100644
index 0000000..e77ee9c
--- /dev/null
+++ b/tools/bam-loader/hashtable.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct HashTable HashTable;
+typedef struct HashTableIterator HashTableIterator;
+
+typedef int (*HashTableKeyCompFunc)(const void *value, const void *key, uint32_t key_length, void *context);
+typedef void (*HashTableFreeFunc)(void *value, void *context);
+
+struct HashTableIterator {
+    const void *root;
+    const void *bucket;
+    uint64_t id;
+};
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *context);
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *value, void *context), void *context);
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *value, void *context), void *context);
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length);
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *context);
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter, HashTableFreeFunc whack, void *context);
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter);
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter);
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value);
diff --git a/tools/bam-loader/loader-imp.c b/tools/bam-loader/loader-imp.c
new file mode 100644
index 0000000..46b46d7
--- /dev/null
+++ b/tools/bam-loader/loader-imp.c
@@ -0,0 +1,3130 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/* #include "bam-load.vers.h" */
+
+#include <klib/callconv.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/sort.h>
+#include <klib/printf.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kdb/btree.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/align.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-file.h>
+#include <kapp/loader-meta.h>
+#include <kapp/log-xml.h>
+#include <kapp/progressbar.h>
+
+#include <kproc/queue.h>
+#include <kproc/thread.h>
+#include <kproc/timeout.h>
+#include <os-native.h>
+
+#include <sysalloc.h>
+#include <atomic32.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+#include <time.h>
+#include <zlib.h>
+#include "bam.h"
+#include "bam-alignment.h"
+#include "Globals.h"
+#include "sequence-writer.h"
+#include "reference-writer.h"
+#include "alignment-writer.h"
+#include "mem-bank.h"
+#include "low-match-count.h"
+
+#define NUM_ID_SPACES (256u)
+
+#define MMA_NUM_CHUNKS_BITS (20u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+
+typedef struct {
+    int fd;
+    size_t elemSize;
+    off_t fsize;
+    uint8_t *current;
+    struct mma_map_s {
+        struct mma_submap_s {
+            uint8_t *base;
+        } submap[MMA_SUBCHUNK_COUNT];
+    } map[NUM_ID_SPACES];
+} MMArray;
+
+typedef struct {
+    uint32_t primaryId[2];
+    uint32_t spotId;
+    uint32_t fragmentId;
+	uint8_t  fragment_len[2]; /*** lowest byte of fragment length to prevent different sizes of primary and secondary alignments **/
+    uint8_t  platform;
+    uint8_t  pId_ext[2];
+    uint8_t  spotId_ext;
+    uint8_t  alignmentCount[2]; /* 0..254; 254: saturated max; 255: special meaning "too many" */
+    uint8_t  unmated: 1,
+             pcr_dup: 1,
+             unaligned_1: 1,
+             unaligned_2: 1,
+             hardclipped: 1,
+			 primary_is_set: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_P_ID(O,N,V) do { int64_t tv = (V); (O).primaryId[N] = (uint32_t)tv; (O).pId_ext[N] = tv >> 32; } while(0);
+#define CTX_VALUE_GET_P_ID(O,N) ((((int64_t)((O).pId_ext[N])) << 32) | (O).primaryId[N])
+
+#define CTX_VALUE_SET_S_ID(O,V) do { int64_t tv = (V); (O).spotId = (uint32_t)tv; (O).spotId_ext = tv >> 32; } while(0);
+#define CTX_VALUE_GET_S_ID(O) ((((int64_t)(O).spotId_ext) << 32) | (O).spotId)
+
+typedef struct FragmentInfo {
+    uint64_t ti;
+    uint32_t readlen;
+    uint8_t  aligned;
+    uint8_t  is_bad;
+    uint8_t  orientation;
+    uint8_t  readNo;
+    uint8_t  sglen;
+    uint8_t  lglen;
+    uint8_t  cskey;
+} FragmentInfo;
+
+typedef struct KeyToID {
+    KBTree *key2id[NUM_ID_SPACES];
+    char *key2id_names;
+
+    uint32_t idCount[NUM_ID_SPACES];
+    uint32_t key2id_hash[NUM_ID_SPACES];
+
+    unsigned key2id_max;
+    unsigned key2id_name_max;
+    unsigned key2id_name_alloc;
+    unsigned key2id_count;
+
+    unsigned key2id_name[NUM_ID_SPACES];
+    /* this array is kept in name order */
+    /* this maps the names to key2id and idCount */
+    unsigned key2id_oid[NUM_ID_SPACES];
+} KeyToID;
+
+typedef struct context_t {
+    KeyToID keyToID;
+    const KLoadProgressbar *progress[4];
+    MMArray *id2value;
+    MemBank *frags;
+    int64_t spotId;
+    int64_t primaryId;
+    int64_t secondId;
+    uint64_t alignCount;
+
+    unsigned pass;
+    bool isColorSpace;
+} context_t;
+
+static char const *Print_ctx_value_t(ctx_value_t const *const self)
+{
+    static char buffer[16384];
+    rc_t rc = string_printf(buffer, sizeof(buffer), NULL, "pid: { %lu, %lu }, sid: %lu, fid: %u, alc: { %u, %u }, flg: %x", CTX_VALUE_GET_P_ID(*self, 0), CTX_VALUE_GET_P_ID(*self, 1), CTX_VALUE_GET_S_ID(*self), self->fragmentId, self->alignmentCount[0], self->alignmentCount[1], *(self->alignmentCount + sizeof(self->alignmentCount)/sizeof(self->alignmentCount[0])));
+
+    if (rc)
+        return 0;
+    return buffer;
+}
+
+static rc_t MMArrayMake(MMArray **rslt, int fd, uint32_t elemSize)
+{
+    MMArray *const self = calloc(1, sizeof(*self));
+
+    if (self == NULL)
+        return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+    self->elemSize = (elemSize + 3) & ~(3u); /** align to 4 byte **/
+    self->fd = fd;
+    *rslt = self;
+    return 0;
+}
+
+#define PERF 0
+#define PROT 0
+
+static rc_t MMArrayGet(MMArray *const self, void **const value, uint64_t const element)
+{
+    size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+    unsigned const bin_no = element >> 32;
+    unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+    unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+    if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+        return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+
+    if (self->map[bin_no].submap[subbin].base == NULL) {
+        off_t const cur_fsize = self->fsize;
+        off_t const new_fsize = cur_fsize + chunk;
+
+        if (ftruncate(self->fd, new_fsize) != 0)
+            return RC(rcExe, rcFile, rcResizing, rcSize, rcExcessive);
+        else {
+            void *const base = mmap(NULL, chunk, PROT_READ|PROT_WRITE,
+                                    MAP_FILE|MAP_SHARED, self->fd, cur_fsize);
+
+            self->fsize = new_fsize;
+            if (base == MAP_FAILED) {
+                PLOGMSG(klogErr, (klogErr, "Failed to construct map for bin $(bin), subbin $(subbin)", "bin=%u,subbin=%u", bin_no, subbin));
+                return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+            }
+            else {
+#if PERF
+                static unsigned mapcount = 0;
+
+                (void)PLOGMSG(klogInfo, (klogInfo, "Number of mmaps: $(cnt)", "cnt=%u", ++mapcount));
+#endif
+                self->map[bin_no].submap[subbin].base = base;
+            }
+        }
+    }
+    uint8_t *const next = self->map[bin_no].submap[subbin].base;
+#if PROT
+    if (next != self->current) {
+        void *const current = self->current;
+
+        if (current)
+            mprotect(current, chunk, PROT_NONE);
+
+        mprotect(self->current = next, chunk, PROT_READ|PROT_WRITE);
+    }
+#endif
+    *value = &next[(size_t)in_bin * self->elemSize];
+    return 0;
+}
+
+static rc_t MMArrayGetRead(MMArray *const self, void const **const value, uint64_t const element)
+{
+    unsigned const bin_no = element >> 32;
+    unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+    unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+    if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+        return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+
+    if (self->map[bin_no].submap[subbin].base == NULL)
+        return RC(rcExe, rcMemMap, rcReading, rcId, rcInvalid);
+
+    uint8_t *const next = self->map[bin_no].submap[subbin].base;
+#if PROT
+    size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+    if (next != self->current) {
+        void *const current = self->current;
+
+        if (current)
+            mprotect(current, chunk, PROT_NONE);
+
+        mprotect(self->current = next, chunk, PROT_READ);
+    }
+#endif
+    *value = &next[(size_t)in_bin * self->elemSize];
+    return 0;
+}
+
+static void MMArrayLock(MMArray *const self)
+{
+#if PROT
+    size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+    void *const current = self->current;
+
+    self->current = NULL;
+    if (current)
+        mprotect(current, chunk, PROT_NONE);
+#endif
+}
+
+static void MMArrayClear(MMArray *self)
+{
+    size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+    unsigned i;
+
+    for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+        unsigned j;
+
+        for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+            if (self->map[i].submap[j].base) {
+#if PROT
+                mprotect(self->map[i].submap[j].base, chunk, PROT_READ|PROT_WRITE);
+#endif
+            	memset(self->map[i].submap[j].base, 0, chunk);
+#if PROT
+                mprotect(self->map[i].submap[j].base, chunk, PROT_NONE);
+#endif
+            }
+        }
+    }
+#if PROT
+    self->current = NULL;
+#endif
+}
+
+static void MMArrayWhack(MMArray *self)
+{
+    size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+    unsigned i;
+
+    for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+        unsigned j;
+
+        for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+            if (self->map[i].submap[j].base)
+            	munmap(self->map[i].submap[j].base, chunk);
+        }
+    }
+    close(self->fd);
+    free(self);
+}
+
+static rc_t OpenKBTree(KBTree **const rslt, unsigned n, unsigned max)
+{
+    size_t const cacheSize = (((G.cache_size - (G.cache_size / 2) - (G.cache_size / 8)) / max)
+                            + 0xFFFFF) & ~((size_t)0xFFFFF);
+    KFile *file = NULL;
+    KDirectory *dir;
+    char fname[4096];
+    rc_t rc;
+
+    rc = KDirectoryNativeDir(&dir);
+    if (rc)
+        return rc;
+
+    rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", G.tmpfs, G.pid, n); if (rc) return rc;
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, "%s", fname);
+    KDirectoryRemove(dir, 0, "%s", fname);
+    KDirectoryRelease(dir);
+    if (rc == 0) {
+        rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+                              false, kbtOpaqueKey,
+                              1, 255, sizeof ( uint32_t ),
+                              NULL
+                              );
+        KFileRelease(file);
+#if PERF
+        if (rc == 0) {
+            static unsigned treecount = 0;
+
+            (void)PLOGMSG(klogInfo, (klogInfo, "Number of trees: $(cnt)", "cnt=%u", ++treecount));
+        }
+#endif
+    }
+    return rc;
+}
+
+static rc_t GetKeyIDOld(KeyToID *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+    unsigned const keylen = strlen(key);
+    rc_t rc;
+    uint64_t tmpKey;
+
+    if (ctx->key2id_count == 0) {
+        rc = OpenKBTree(&ctx->key2id[0], 1, 1);
+        if (rc) return rc;
+        ctx->key2id_count = 1;
+    }
+    if (memcmp(key, name, keylen) == 0) {
+        /* qname starts with read group; no append */
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+    }
+    else {
+        char sbuf[4096];
+        char *buf = sbuf;
+        char *hbuf = NULL;
+        size_t bsize = sizeof(sbuf);
+        size_t actsize;
+
+        if (keylen + namelen + 2 > bsize) {
+            hbuf = malloc(bsize = keylen + namelen + 2);
+            if (hbuf == NULL)
+                return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+            buf = hbuf;
+        }
+        rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+        if (hbuf)
+            free(hbuf);
+    }
+    if (rc == 0) {
+        *rslt = tmpKey;
+        if (*wasInserted)
+            ++ctx->idCount[0];
+    }
+    return rc;
+}
+
+static unsigned HashKey(void const *const key, unsigned const keylen)
+{
+#if 0
+    /* There is nothing special about this hash. It was randomly generated. */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    unsigned h = 0x55;
+    unsigned i = keylen;
+
+    do { h = T1[h ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+    for (i = 0; i != keylen; ++i)
+        h = T1[h ^ ((uint8_t const *)key)[i]];
+
+    return h;
+#else
+    /* FNV-1a hash with folding */
+    uint64_t h = 0xcbf29ce484222325;
+    unsigned i;
+
+    for (i = 0; i < keylen; ++i) {
+        uint8_t const octet = ((uint8_t const *)key)[i];
+        h = (h ^ octet) * 0x100000001b3ull;
+    }
+    return ((uint32_t)(h ^ (h >> 32))) % NUM_ID_SPACES;
+#endif
+}
+
+#define USE_ILLUMINA_NAMING_CORRECTION 1
+
+static size_t GetFixedNameLength(char const name[], size_t const namelen)
+{
+#if USE_ILLUMINA_NAMING_CORRECTION
+    /*** Check for possible fixes to illumina names ****/
+    size_t newlen=namelen;
+    /*** First get rid of possible "/1" "/2" "/3" at the end - violates SAM spec **/
+    if(newlen > 2  && name[newlen-2] == '/' &&  (name[newlen-1] == '1' || name[newlen-1] == '2' || name[newlen-1] == '3')){
+        newlen -=2;
+    }
+    if(newlen > 2 && name[newlen-2] == '#' &&  (name[newlen-1] == '0')){ /*** Now, find "#0" ***/
+        newlen -=2;
+    } else if(newlen>10){ /*** find #ACGT ***/
+        int i=newlen;
+        for(i--;i>4;i--){ /*** stopping at 4 since the rest of record should still contain :x:y ***/
+            char a=toupper(name[i]);
+            if(a != 'A' && a != 'C' && a !='G' && a !='T'){
+                break;
+            }
+        }
+        if (name[i] == '#'){
+            switch (newlen-i) { /** allowed values for illumina barcodes :5,6,8 **/
+                case 5:
+                case 6:
+                case 8:
+                    newlen=i;
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+    if(newlen < namelen){ /*** check for :x:y at the end now - to make sure it is illumina **/
+        int i=newlen;
+        for(i--;i>0 && isdigit(name[i]);i--){}
+        if(name[i]==':'){
+            for(i--;i>0 && isdigit(name[i]);i--){}
+            if(name[i]==':' && newlen > 0){ /*** some name before :x:y should still exist **/
+                /*** looks like illumina ***/
+                return newlen;
+            }
+        }
+    }
+#endif
+    return namelen;
+}
+
+static
+rc_t GetKeyID(KeyToID *const ctx,
+              uint64_t *const rslt,
+              bool *const wasInserted,
+              char const key[],
+              char const name[],
+              size_t const o_namelen)
+{
+    size_t const namelen = GetFixedNameLength(name, o_namelen);
+
+    if (ctx->key2id_max == 1)
+        return GetKeyIDOld(ctx, rslt, wasInserted, key, name, namelen);
+    else {
+        unsigned const keylen = strlen(key);
+        unsigned const h = HashKey(key, keylen);
+        unsigned f;
+        unsigned e = ctx->key2id_count;
+        uint64_t tmpKey;
+
+        *rslt = 0;
+        {{
+            uint32_t const bucket_value = ctx->key2id_hash[h];
+            unsigned const n  = (uint8_t) bucket_value;
+            unsigned const i1 = (uint8_t)(bucket_value >>  8);
+            unsigned const i2 = (uint8_t)(bucket_value >> 16);
+            unsigned const i3 = (uint8_t)(bucket_value >> 24);
+
+            if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+                f = i1;
+                /*
+                ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+                 */
+                goto GET_ID;
+            }
+            if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+                f = i2;
+                ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+                goto GET_ID;
+            }
+            if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+                f = i3;
+                ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+                goto GET_ID;
+            }
+        }}
+        f = 0;
+        while (f < e) {
+            unsigned const m = (f + e) / 2;
+            unsigned const oid = ctx->key2id_oid[m];
+            int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+
+            if (diff < 0)
+                e = m;
+            else if (diff > 0)
+                f = m + 1;
+            else {
+                f = oid;
+                goto GET_ID;
+            }
+        }
+        if (ctx->key2id_count < ctx->key2id_max) {
+            unsigned const name_max = ctx->key2id_name_max + keylen + 1;
+            KBTree *tree;
+            rc_t rc = OpenKBTree(&tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+
+            if (rc) return rc;
+
+            if (ctx->key2id_name_alloc < name_max) {
+                unsigned alloc = ctx->key2id_name_alloc;
+                void *tmp;
+
+                if (alloc == 0)
+                    alloc = 4096;
+                while (alloc < name_max)
+                    alloc <<= 1;
+                tmp = realloc(ctx->key2id_names, alloc);
+                if (tmp == NULL)
+                    return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+                ctx->key2id_names = tmp;
+                ctx->key2id_name_alloc = alloc;
+            }
+            if (f < ctx->key2id_count) {
+                memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+            }
+            ctx->key2id_oid[f] = ctx->key2id_count;
+            ++ctx->key2id_count;
+            f = ctx->key2id_oid[f];
+            ctx->key2id_name[f] = ctx->key2id_name_max;
+            ctx->key2id_name_max = name_max;
+
+            memmove(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+            ctx->key2id[f] = tree;
+            ctx->idCount[f] = 0;
+            if ((uint8_t)ctx->key2id_hash[h] < 3) {
+                unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n;
+            }
+            else {
+                /* the hash function isn't working too well
+                 * keep the 3 mru
+                 */
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3;
+            }
+        GET_ID:
+            tmpKey = ctx->idCount[f];
+            rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+            if (rc == 0) {
+                *rslt = (((uint64_t)f) << 32) | tmpKey;
+                if (*wasInserted)
+                    ++ctx->idCount[f];
+                assert(tmpKey < ctx->idCount[f]);
+            }
+            return rc;
+        }
+        (void)PLOGMSG(klogErr, (klogErr, "too many read groups: max is $(max)", "max=%d", (int)ctx->key2id_count, (int)ctx->key2id_max));
+        return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+    }
+}
+
+static rc_t OpenMMapFile(context_t *const ctx, KDirectory *const dir)
+{
+    int fd;
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", G.tmpfs, G.pid);
+
+    if (rc)
+        return rc;
+
+    fd = open(fname, O_RDWR|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR);
+    if (fd < 0)
+        return RC(rcExe, rcFile, rcCreating, rcFile, rcNotFound);
+    unlink(fname);
+    return MMArrayMake(&ctx->id2value, fd, sizeof(ctx_value_t));
+}
+
+static rc_t TmpfsDirectory(KDirectory **const rslt)
+{
+    KDirectory *dir;
+    rc_t rc = KDirectoryNativeDir(&dir);
+    if (rc == 0) {
+        rc = KDirectoryOpenDirUpdate(dir, rslt, false, "%s", G.tmpfs);
+        KDirectoryRelease(dir);
+    }
+    return rc;
+}
+
+static rc_t SetupContext(context_t *ctx, unsigned numfiles)
+{
+    rc_t rc = 0;
+
+    // memset(ctx, 0, sizeof(*ctx));
+
+    if (G.mode == mode_Archive) {
+        KDirectory *dir;
+        size_t fragSize[2];
+
+        fragSize[1] = (G.cache_size / 8);
+        fragSize[0] = fragSize[1] * 4;
+
+        rc = TmpfsDirectory(&dir);
+        if (rc == 0)
+            rc = OpenMMapFile(ctx, dir);
+        if (rc == 0)
+            rc = MemBankMake(&ctx->frags, dir, G.pid, fragSize);
+        KDirectoryRelease(dir);
+    }
+    else if (G.mode == mode_Remap) {
+        KeyToID const save1 = ctx->keyToID;
+        MMArray *const save2 = ctx->id2value;
+        int64_t const save3 = ctx->spotId;
+
+        memset(ctx, 0, sizeof(*ctx));
+        ctx->keyToID = save1;
+        ctx->id2value = save2;
+        ctx->spotId = save3;
+    }
+
+    rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+    rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+    rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+    rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+
+    KLoadProgressbar_Append(ctx->progress[0], 100 * numfiles);
+
+    return rc;
+}
+
+static void ContextReleaseMemBank(context_t *ctx)
+{
+    MemBankRelease(ctx->frags);
+    ctx->frags = NULL;
+}
+
+static void ContextRelease(context_t *ctx, bool continuing)
+{
+    KLoadProgressbar_Release(ctx->progress[0], true);
+    KLoadProgressbar_Release(ctx->progress[1], true);
+    KLoadProgressbar_Release(ctx->progress[2], true);
+    KLoadProgressbar_Release(ctx->progress[3], true);
+    if (!continuing)
+        MMArrayWhack(ctx->id2value);
+    else
+        MMArrayClear(ctx->id2value);
+}
+
+static
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R)
+{
+    if (R) {
+        unsigned i;
+        unsigned j;
+
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = S[j];
+    }
+    else
+        memmove(D, S, L);
+}
+
+static
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+    static INSDC_dna_text const compl[] = {
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 , '.',  0 ,
+        '0', '1', '2', '3',  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C',
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 ,
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C',
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 ,
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
+    };
+    if (R) {
+        unsigned i;
+        unsigned j;
+
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = compl[((uint8_t const *)S)[j]];
+    }
+    else
+        memmove(D, S, L);
+}
+
+static KFile *MakeDeferralFile() {
+    if (G.deferSecondary) {
+        char template[4096];
+        int fd;
+        KFile *f;
+        KDirectory *d;
+        size_t nwrit;
+
+        KDirectoryNativeDir(&d);
+        string_printf(template, sizeof(template), &nwrit, "%s/defer.XXXXXX", G.tmpfs);
+        fd = mkstemp(template);
+        KDirectoryOpenFileWrite(d, &f, true, template);
+        close(fd);
+        unlink(template);
+        return f;
+    }
+    return NULL;
+}
+
+static rc_t OpenBAM(const BAM_File **bam, VDatabase *db, const char bamFile[])
+{
+    rc_t rc = 0;
+
+    if (strcmp(bamFile, "/dev/stdin") == 0) {
+        rc = BAM_FileMake(bam, MakeDeferralFile(), G.headerText, "/dev/stdin");
+    }
+    else {
+        rc = BAM_FileMake(bam, MakeDeferralFile(), G.headerText, "%s", bamFile);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open '$(file)'", "file=%s", bamFile));
+    }
+    else if (db) {
+        KMetadata *dbmeta;
+
+        rc = VDatabaseOpenMetadataUpdate(db, &dbmeta);
+        if (rc == 0) {
+            KMDataNode *node;
+
+            rc = KMetadataOpenNodeUpdate(dbmeta, &node, "BAM_HEADER");
+            KMetadataRelease(dbmeta);
+            if (rc == 0) {
+                char const *header;
+                size_t size;
+
+                rc = BAM_FileGetHeaderText(*bam, &header, &size);
+                if (rc == 0) {
+                    rc = KMDataNodeWrite(node, header, size);
+                }
+                KMDataNodeRelease(node);
+            }
+        }
+    }
+
+    return rc;
+}
+
+static rc_t VerifyReferences(BAM_File const *bam, Reference const *ref)
+{
+    rc_t rc = 0;
+    uint32_t n;
+    unsigned i;
+
+    BAM_FileGetRefSeqCount(bam, &n);
+    for (i = 0; i != n; ++i) {
+        BAMRefSeq const *refSeq;
+
+        BAM_FileGetRefSeq(bam, i, &refSeq);
+        if (G.refFilter && strcmp(refSeq->name, G.refFilter) != 0)
+            continue;
+
+        rc = ReferenceVerify(ref, refSeq->name, refSeq->length, refSeq->checksum);
+        if (rc) {
+            if (GetRCObject(rc) == rcChecksum && GetRCState(rc) == rcUnequal) {
+#if NCBI
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); checksums do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+#endif
+            }
+            else if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcUnequal) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); lengths do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcEmpty) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); fasta file is empty", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else if (GetRCObject(rc) == rcId && GetRCState(rc) == rcNotFound) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); no match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else {
+                (void)PLOGERR(klogWarn, (klogWarn, rc, "Reference: '$(name)', Length: $(len); error", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+        }
+        else if (G.onlyVerifyReferences) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Reference: '$(name)', Length: $(len); match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+        }
+    }
+    return 0;
+}
+
+static uint8_t GetMapQ(BAM_Alignment const *rec)
+{
+    uint8_t mapQ;
+
+    BAM_AlignmentGetMapQuality(rec, &mapQ);
+    return mapQ;
+}
+
+static bool EditAlignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+    unsigned i;
+    bool changed = false;
+
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q_0 = qual[i];
+        uint8_t const q_1= hasMismatch[i] ? G.alignedQualValue : q_0;
+        
+        if (q_0 != q_1) {
+            changed = true;
+            break;
+        }
+    }
+    if (!changed)
+        return false;
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q_0 = qual[i];
+        uint8_t const q_1= hasMismatch[i] ? G.alignedQualValue : q_0;
+
+        qual[i] = q_1;
+    }
+    return true;
+}
+
+static bool EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+    unsigned i;
+    bool changed = false;
+
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q_0 = qual[i];
+        uint8_t const q_1 = (q_0 & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+        
+        if (q_0 != q_1) {
+            changed = true;
+            break;
+        }
+    }
+    if (!changed)
+        return false;
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q_0 = qual[i];
+        uint8_t const q_1 = (q_0 & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+
+        qual[i] = q_1;
+    }
+    return true;
+}
+
+static bool platform_cmp(char const platform[], char const test[])
+{
+    unsigned i;
+
+    for (i = 0; ; ++i) {
+        int ch1 = test[i];
+        int ch2 = toupper(platform[i]);
+
+        if (ch1 != ch2)
+            break;
+        if (ch1 == 0)
+            return true;
+    }
+    return false;
+}
+
+static
+INSDC_SRA_platform_id GetINSDCPlatform(BAM_File const *bam, char const name[]) {
+    if (name) {
+        BAMReadGroup const *rg;
+
+        BAM_FileGetReadGroupByName(bam, name, &rg);
+        if (rg && rg->platform) {
+            switch (toupper(rg->platform[0])) {
+            case 'C':
+                if (platform_cmp(rg->platform, "COMPLETE GENOMICS"))
+                    return SRA_PLATFORM_COMPLETE_GENOMICS;
+                if (platform_cmp(rg->platform, "CAPILLARY"))
+                    return SRA_PLATFORM_CAPILLARY;
+                break;
+            case 'H':
+                if (platform_cmp(rg->platform, "HELICOS"))
+                    return SRA_PLATFORM_HELICOS;
+                break;
+            case 'I':
+                if (platform_cmp(rg->platform, "ILLUMINA"))
+                    return SRA_PLATFORM_ILLUMINA;
+                if (platform_cmp(rg->platform, "IONTORRENT"))
+                    return SRA_PLATFORM_ION_TORRENT;
+                break;
+            case 'L':
+                if (platform_cmp(rg->platform, "LS454"))
+                    return SRA_PLATFORM_454;
+                break;
+            case 'N':
+                if (platform_cmp(name, "NANOPORE"))
+                    return SRA_PLATFORM_OXFORD_NANOPORE;
+                break;
+            case 'O':
+                if (platform_cmp(name, "OXFORD_NANOPORE"))
+                    return SRA_PLATFORM_OXFORD_NANOPORE;
+                break;
+            case 'P':
+                if (platform_cmp(rg->platform, "PACBIO"))
+                    return SRA_PLATFORM_PACBIO_SMRT;
+                break;
+            case 'S':
+                if (platform_cmp(rg->platform, "SOLID"))
+                    return SRA_PLATFORM_ABSOLID;
+                if (platform_cmp(name, "SANGER"))
+                    return SRA_PLATFORM_CAPILLARY;
+                break;
+            default:
+                break;
+            }
+        }
+    }
+    return SRA_PLATFORM_UNDEFINED;
+}
+
+static
+rc_t CheckLimitAndLogError(void)
+{
+    unsigned const count = ++G.errCount;
+
+    if (G.maxErrCount > 0 && count > G.maxErrCount) {
+        (void)PLOGERR(klogErr, (klogErr, SILENT_RC(rcAlign, rcFile, rcReading, rcError, rcExcessive), "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%u,max=%u", count, G.maxErrCount));
+        return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+    }
+    return 0;
+}
+
+static
+void RecordNoMatch(char const readName[], char const refName[], uint32_t const refPos)
+{
+    if (G.noMatchLog) {
+        static uint64_t lpos = 0;
+        char logbuf[256];
+        size_t len;
+
+        if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+            KFileWrite(G.noMatchLog, lpos, logbuf, len, NULL);
+            lpos += len;
+        }
+    }
+}
+
+static LowMatchCounter *lmc = NULL;
+
+static
+rc_t LogNoMatch(char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+    rc_t const rc = CheckLimitAndLogError();
+    static unsigned count = 0;
+
+    if (lmc == NULL)
+        lmc = LowMatchCounterMake();
+    assert(lmc != NULL);
+    LowMatchCounterAdd(lmc, refName);
+
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGMSG(klogErr, (klogErr, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+        return rc;
+    }
+    if (G.maxWarnCount_NoMatch == 0 || count < G.maxWarnCount_NoMatch)
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    return 0;
+}
+
+struct rlmc_context {
+    KMDataNode *node;
+    unsigned node_number;
+    rc_t rc;
+};
+
+static void RecordLowMatchCount(void *Ctx, char const name[], unsigned const count)
+{
+    struct rlmc_context *const ctx = Ctx;
+
+    if (ctx->rc == 0) {
+        KMDataNode *sub = NULL;
+
+        ctx->rc = KMDataNodeOpenNodeUpdate(ctx->node, &sub, "LOW_MATCH_COUNT_%u", ++ctx->node_number);
+        if (ctx->rc == 0) {
+            uint32_t const count_temp = count;
+            ctx->rc = KMDataNodeWriteAttr(sub, "REFNAME", name);
+            if (ctx->rc == 0)
+                ctx->rc = KMDataNodeWriteB32(sub, &count_temp);
+            
+            KMDataNodeRelease(sub);
+        }
+    }
+}
+
+static rc_t RecordLowMatchCounts(KMDataNode *const node)
+{
+    struct rlmc_context ctx;
+
+    assert(lmc != NULL);
+    if (node) {
+        ctx.node = node;
+        ctx.node_number = 0;
+        ctx.rc = 0;
+
+        LowMatchCounterEach(lmc, &ctx, RecordLowMatchCount);
+    }
+    return ctx.rc;
+}
+
+static
+rc_t LogDupConflict(char const readName[])
+{
+    rc_t const rc = CheckLimitAndLogError();
+    static unsigned count = 0;
+
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGERR(klogWarn, (klogWarn, SILENT_RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    }
+    else if (G.maxWarnCount_DupConflict == 0 || count < G.maxWarnCount_DupConflict)
+        (void)PLOGERR(klogWarn, (klogWarn, SILENT_RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    return rc;
+}
+
+static char const *const CHANGED[] = {
+    "FLAG changed",
+    "QUAL changed",
+    "SEQ changed",
+    "record made unaligned",
+    "record made unfragmented",
+    "mate alignment lost",
+    "record discarded",
+    "reference name changed",
+    "CIGAR changed"
+};
+
+#define FLAG_CHANGED (0)
+#define QUAL_CHANGED (1)
+#define SEQ_CHANGED (2)
+#define MAKE_UNALIGNED (3)
+#define MAKE_UNFRAGMENTED (4)
+#define MATE_LOST (5)
+#define DISCARDED (6)
+#define REF_NAME_CHANGED (7)
+#define CIGAR_CHANGED (8)
+
+static char const *const REASONS[] = {
+/* FLAG changed */
+    "0x400 and 0x200 both set",                 /*  0 */
+    "conflicting PCR Dup flags",                /*  1 */
+    "primary alignment already exists",         /*  2 */
+    "was already recorded as unaligned",        /*  3 */
+/* QUAL changed */
+    "original quality used",                    /*  4 */
+    "unaligned colorspace",                     /*  5 */
+    "aligned bases",                            /*  6 */
+    "unaligned bases",                          /*  7 */
+    "reversed",                                 /*  8 */
+/* unaligned */
+    "low MAPQ",                                 /*  9 */
+    "low match count",                          /* 10 */
+    "missing alignment info",                   /* 11 */
+    "missing reference position",               /* 12 */
+    "invalid alignment info",                   /* 13 */
+    "invalid reference position",               /* 14 */
+    "invalid reference",                        /* 15 */
+    "unaligned reference",                      /* 16 */
+    "unknown reference",                        /* 17 */
+    "hard-clipped colorspace",                  /* 18 */
+/* unfragmented */
+    "missing fragment info",                    /* 19 */
+    "too many fragments",                       /* 20 */
+/* mate info lost */
+    "invalid mate reference",                   /* 21 */
+    "missing mate alignment info",              /* 22 */
+    "unknown mate reference",                   /* 23 */
+/* discarded */
+    "conflicting PCR duplicate",                /* 24 */
+    "conflicting fragment info",                /* 25 */
+    "reference is skipped",                     /* 26 */
+/* reference name changed */
+    "reference was named more than once",       /* 27 */
+/* CIGAR changed */
+    "alignment overhanging end of reference",   /* 28 */
+/* discarded */
+    "hard-clipped secondary alignment",         /* 29 */
+    "low-matching secondary alignment",         /* 30 */
+};
+
+static struct {
+    unsigned what, why;
+} const CHANGES[] = {
+    {FLAG_CHANGED,  0},
+    {FLAG_CHANGED,  1},
+    {FLAG_CHANGED,  2},
+    {FLAG_CHANGED,  3},
+    {QUAL_CHANGED,  4},
+    {QUAL_CHANGED,  5},
+    {QUAL_CHANGED,  6},
+    {QUAL_CHANGED,  7},
+    {QUAL_CHANGED,  8},
+    {SEQ_CHANGED,  8},
+    {MAKE_UNALIGNED,  9},
+    {MAKE_UNALIGNED, 10},
+    {MAKE_UNALIGNED, 11},
+    {MAKE_UNALIGNED, 12},
+    {MAKE_UNALIGNED, 13},
+    {MAKE_UNALIGNED, 14},
+    {MAKE_UNALIGNED, 15},
+    {MAKE_UNALIGNED, 16},
+    {MAKE_UNALIGNED, 17},
+    {MAKE_UNALIGNED, 18},
+    {MAKE_UNFRAGMENTED, 19},
+    {MAKE_UNFRAGMENTED, 20},
+    {MATE_LOST, 21},
+    {MATE_LOST, 22},
+    {MATE_LOST, 23},
+    {DISCARDED, 24},
+    {DISCARDED, 25},
+    {DISCARDED, 26},
+    {DISCARDED, 17},
+    {REF_NAME_CHANGED, 27},
+    {CIGAR_CHANGED, 28},
+    {DISCARDED, 29},
+    {DISCARDED, 30},
+};
+
+#define NUMBER_OF_CHANGES ((unsigned)(sizeof(CHANGES)/sizeof(CHANGES[0])))
+static unsigned change_counter[NUMBER_OF_CHANGES];
+
+static void LOG_CHANGE(unsigned const change)
+{
+    ++change_counter[change];
+}
+
+static void PrintChangeReport(void)
+{
+    unsigned i;
+
+    for (i = 0; i != NUMBER_OF_CHANGES; ++i) {
+        if (change_counter[i] > 0) {
+            char const *const what = CHANGED[CHANGES[i].what];
+            char const *const why  = REASONS[CHANGES[i].why];
+
+            PLOGMSG(klogInfo, (klogInfo, "$(what) $(times) times because $(reason)", "what=%s,reason=%s,times=%u", what, why, change_counter[i]));
+        }
+    }
+}
+
+static rc_t RecordChange(KMDataNode *const node,
+                         char const node_name[],
+                         unsigned const node_number,
+                         char const what[],
+                         char const why[],
+                         unsigned const count)
+{
+    KMDataNode *sub = NULL;
+    rc_t const rc_sub = KMDataNodeOpenNodeUpdate(node, &sub, "%s_%u", node_name, node_number);
+
+    if (rc_sub) return rc_sub;
+    {
+        uint32_t const count_temp = count;
+        rc_t const rc_attr1 = KMDataNodeWriteAttr(sub, "change", what);
+        rc_t const rc_attr2 = KMDataNodeWriteAttr(sub, "reason", why);
+        rc_t const rc_value = KMDataNodeWriteB32(sub, &count_temp);
+        
+        KMDataNodeRelease(sub);
+        if (rc_attr1) return rc_attr1;
+        if (rc_attr2) return rc_attr2;
+        if (rc_value) return rc_value;
+        
+        return 0;
+    }
+}
+
+static rc_t RecordChanges(KMDataNode *const node, char const name[])
+{
+    if (node) {
+        unsigned i;
+        unsigned j = 0;
+
+        for (i = 0; i != NUMBER_OF_CHANGES; ++i) {
+            if (change_counter[i] > 0) {
+                char const *const what = CHANGED[CHANGES[i].what];
+                char const *const why  = REASONS[CHANGES[i].why];
+                rc_t const rc = RecordChange(node, name, ++j, what, why, change_counter[i]);
+
+                if (rc) return rc;
+            }
+        }
+    }
+    return 0;
+}
+
+#define FLAG_CHANGED_400_AND_200   do { LOG_CHANGE( 0); } while(0)
+#define FLAG_CHANGED_PCR_DUP       do { LOG_CHANGE( 1); } while(0)
+#define FLAG_CHANGED_PRIMARY_DUP   do { LOG_CHANGE( 2); } while(0)
+#define FLAG_CHANGED_WAS_UNALIGNED do { LOG_CHANGE( 3); } while(0)
+#define QUAL_CHANGED_OQ            do { LOG_CHANGE( 4); } while(0)
+#define QUAL_CHANGED_UNALIGNED_CS  do { LOG_CHANGE( 5); } while(0)
+#define QUAL_CHANGED_ALIGNED_EDIT  do { LOG_CHANGE( 6); } while(0)
+#define QUAL_CHANGED_UNALIGN_EDIT  do { LOG_CHANGE( 7); } while(0)
+#define QUAL_CHANGED_REVERSED      do { LOG_CHANGE( 8); } while(0)
+#define SEQ__CHANGED_REV_COMP      do { LOG_CHANGE( 9); } while(0)
+#define UNALIGNED_LOW_MAPQ         do { LOG_CHANGE(10); } while(0)
+#define UNALIGNED_LOW_MATCH_COUNT  do { LOG_CHANGE(11); } while(0)
+#define UNALIGNED_MISSING_INFO     do { LOG_CHANGE(12); } while(0)
+#define UNALIGNED_MISSING_REF_POS  do { LOG_CHANGE(13); } while(0)
+#define UNALIGNED_INVALID_INFO     do { LOG_CHANGE(14); } while(0)
+#define UNALIGNED_INVALID_REF_POS  do { LOG_CHANGE(15); } while(0)
+#define UNALIGNED_INVALID_REF      do { LOG_CHANGE(16); } while(0)
+#define UNALIGNED_UNALIGNED_REF    do { LOG_CHANGE(17); } while(0)
+#define UNALIGNED_UNKNOWN_REF      do { LOG_CHANGE(18); } while(0)
+#define UNALIGNED_HARD_CLIPPED_CS  do { LOG_CHANGE(19); } while(0)
+#define UNFRAGMENT_MISSING_INFO    do { LOG_CHANGE(20); } while(0)
+#define UNFRAGMENT_TOO_MANY        do { LOG_CHANGE(21); } while(0)
+#define MATE_INFO_LOST_INVALID     do { LOG_CHANGE(22); } while(0)
+#define MATE_INFO_LOST_MISSING     do { LOG_CHANGE(23); } while(0)
+#define MATE_INFO_LOST_UNKNOWN_REF do { LOG_CHANGE(24); } while(0)
+#define DISCARD_PCR_DUP            do { LOG_CHANGE(25); } while(0)
+#define DISCARD_BAD_FRAGMENT_INFO  do { LOG_CHANGE(26); } while(0)
+#define DISCARD_SKIP_REFERENCE     do { LOG_CHANGE(27); } while(0)
+#define DISCARD_UNKNOWN_REFERENCE  do { LOG_CHANGE(28); } while(0)
+#define RENAMED_REFERENCE          do { LOG_CHANGE(29); } while(0)
+#define OVERHANGING_ALIGNMENT      do { LOG_CHANGE(30); } while(0)
+#define DISCARD_HARDCLIP_SECONDARY do { LOG_CHANGE(31); } while(0)
+#define DISCARD_BAD_SECONDARY      do { LOG_CHANGE(32); } while(0)
+
+static bool isHardClipped(unsigned const ops, uint32_t const cigar[/* ops */])
+{
+    unsigned i;
+
+    for (i = 0; i < ops; ++i) {
+        uint32_t const op = cigar[i];
+        int const code = op & 0x0F;
+
+        if (code == 5)
+            return true;
+    }
+    return false;
+}
+
+static rc_t FixOverhangingAlignment(KDataBuffer *cigBuf, uint32_t *opCount, uint32_t refPos, uint32_t refLen, uint32_t readlen)
+{
+    uint32_t const *cigar = cigBuf->base;
+    int refend = refPos;
+    int seqpos = 0;
+    unsigned i;
+
+    for (i = 0; i < *opCount; ++i) {
+        uint32_t const op = cigar[i];
+        int const len = op >> 4;
+        int const code = op & 0x0F;
+
+        switch (code) {
+        case 0: /* M */
+        case 7: /* = */
+        case 8: /* X */
+            seqpos += len;
+            refend += len;
+            break;
+        case 2: /* D */
+        case 3: /* N */
+            refend += len;
+            break;
+        case 1: /* I */
+        case 4: /* S */
+        case 9: /* B */
+            seqpos += len;
+        default:
+            break;
+        }
+        if (refend > refLen) {
+            int const chop = refend - refLen;
+            int const newlen = len - chop;
+            int const left = seqpos - chop;
+            if (left * 2 > readlen) {
+                int const clip = readlen - left;
+                rc_t rc;
+
+                *opCount = i + 2;
+                rc = KDataBufferResize(cigBuf, *opCount);
+                if (rc) return rc;
+                ((uint32_t *)cigBuf->base)[i  ] = (newlen << 4) | code;
+                ((uint32_t *)cigBuf->base)[i+1] = (clip << 4) | 4;
+                OVERHANGING_ALIGNMENT;
+                break;
+            }
+        }
+    }
+    return 0;
+}
+
+static context_t GlobalContext;
+static timeout_t bamq_tm;
+static KQueue *bamq;
+static KThread *bamread_thread;
+
+static rc_t run_bamread_thread(const KThread *self, void *const file)
+{
+    rc_t rc = 0;
+    size_t NR = 0;
+
+    while (rc == 0) {
+        BAM_Alignment const *crec = NULL;
+        BAM_Alignment *rec = NULL;
+
+        ++NR;
+        rc = BAM_FileRead2(file, &crec);
+        if ((int)GetRCObject(rc) == rcRow && (int)GetRCState(rc) == rcEmpty) {
+            rc = CheckLimitAndLogError();
+            continue;
+        }
+        if ((int)GetRCObject(rc) == rcRow && (int)GetRCState(rc) == rcNotFound) {
+            /* EOF */
+            rc = 0;
+            --NR;
+            break;
+        }
+        if (rc) break;
+        rc = BAM_AlignmentCopy(crec, &rec);
+        BAM_AlignmentRelease(crec);
+        if (rc) break;
+
+        {
+            static char const dummy[] = "";
+            char const *spotGroup;
+            char const *name;
+            size_t namelen;
+
+            BAM_AlignmentGetReadName2(rec, &name, &namelen);
+            BAM_AlignmentGetReadGroupName(rec, &spotGroup);
+            rc = GetKeyID(&GlobalContext.keyToID, &rec->keyId, &rec->wasInserted, spotGroup ? spotGroup : dummy, name, namelen);
+            if (rc) break;
+        }
+
+        for ( ; ; ) {
+            rc = KQueuePush(bamq, rec, &bamq_tm);
+            if (rc == 0 || (int)GetRCObject(rc) != rcTimeout)
+                break;
+        }
+    }
+    KQueueSeal(bamq);
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "bamread_thread done");
+    }
+    else {
+        (void)PLOGMSG(klogInfo, (klogInfo, "bamread_thread done; read $(NR) records", "NR=%lu", NR));
+    }
+    return rc;
+}
+
+/* call on main thread only */
+static BAM_Alignment const *getNextRecord(BAM_File const *const bam, rc_t *const rc)
+{
+    if (bamq == NULL) {
+        TimeoutInit(&bamq_tm, 10000); /* 10 seconds */
+        *rc = KQueueMake(&bamq, 4096);
+        if (*rc) return NULL;
+        *rc = KThreadMake(&bamread_thread, run_bamread_thread, (void *)bam);
+        if (*rc) {
+            KQueueRelease(bamq);
+            bamq = NULL;
+            return NULL;
+        }
+    }
+    while (*rc == 0 && (*rc = Quitting()) == 0) {
+        BAM_Alignment const *rec = NULL;
+
+        *rc = KQueuePop(bamq, (void **)&rec, &bamq_tm);
+        if (*rc == 0)
+            return rec; /* this is the normal return */
+
+        if ((int)GetRCObject(*rc) == rcTimeout)
+            *rc = 0;
+        else {
+            if ((int)GetRCObject(*rc) == rcData && (int)GetRCState(*rc) == rcDone)
+                (void)LOGMSG(klogDebug, "KQueuePop Done");
+            else
+                (void)PLOGERR(klogWarn, (klogWarn, *rc, "KQueuePop Error", NULL));
+        }
+    }
+	KQueueSeal(bamq);
+    {
+        rc_t rc2 = 0;
+        KThreadWait(bamread_thread, &rc2);
+        if (rc2 != 0)
+            *rc = rc2;
+    }
+    KThreadRelease(bamread_thread);
+    bamread_thread = NULL;
+	KQueueRelease(bamq);
+    bamq = NULL;
+    return NULL;
+}
+
+static void getSpotGroup(BAM_Alignment const *const rec, char spotGroup[])
+{
+    char const *rgname;
+
+    BAM_AlignmentGetReadGroupName(rec, &rgname);
+    if (rgname)
+        strcpy(spotGroup, rgname);
+    else
+        spotGroup[0] = '\0';
+}
+
+static char const *getLinkageGroup(BAM_Alignment const *const rec)
+{
+    static char linkageGroup[1024];
+    char const *BX = NULL;
+    char const *CB = NULL;
+    char const *UB = NULL;
+
+    linkageGroup[0] = '\0';
+    BAM_AlignmentGetLinkageGroup(rec, &BX, &CB, &UB);
+    if (BX == NULL) {
+        if (CB != NULL && UB != NULL) {
+            unsigned const cblen = strlen(CB);
+            unsigned const ublen = strlen(UB);
+            if (cblen + ublen + 8 < sizeof(linkageGroup)) {
+                memmove(&linkageGroup[        0], "CB:", 3);
+                memmove(&linkageGroup[        3], CB, cblen);
+                memmove(&linkageGroup[cblen + 3], "|UB:", 4);
+                memmove(&linkageGroup[cblen + 7], UB, ublen + 1);
+            }
+        }
+    }
+    else {
+        unsigned const bxlen = strlen(BX);
+        if (bxlen + 1 < sizeof(linkageGroup))
+            memmove(linkageGroup, BX, bxlen + 1);
+    }
+    return linkageGroup;
+}
+
+static rc_t ProcessBAM(char const bamFile[], context_t *ctx, VDatabase *db,
+                        /* data outputs */
+                       Reference *ref, Sequence *seq, Alignment *align,
+                       /* output parameters */
+                       bool *had_alignments, bool *had_sequences)
+{
+    const BAM_File *bam;
+    const BAM_Alignment *rec;
+    KDataBuffer buf;
+    KDataBuffer fragBuf;
+    KDataBuffer cigBuf;
+    rc_t rc;
+    int32_t lastRefSeqId = -1;
+    bool wasRenamed = false;
+    size_t rsize;
+    uint64_t keyId = 0;
+    uint64_t reccount = 0;
+    char spotGroup[512];
+    size_t namelen;
+    float progress = 0.0;
+    unsigned warned = 0;
+    long     fcountBoth=0;
+    long     fcountOne=0;
+    int skipRefSeqID = -1;
+    int unmapRefSeqId = -1;
+    uint64_t recordsRead = 0;
+    uint64_t recordsProcessed = 0;
+    uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 0x400 and 0x200 ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+    bool isColorSpace = false;
+    bool isNotColorSpace = G.noColorSpace;
+    char alignGroup[32];
+    size_t alignGroupLen;
+    AlignmentRecord data;
+    KDataBuffer seqBuffer;
+    KDataBuffer qualBuffer;
+    SequenceRecord srec;
+    SequenceRecordStorage srecStorage;
+
+    /* setting up buffers */
+    memset(&data, 0, sizeof(data));
+    memset(&srec, 0, sizeof(srec));
+
+    srec.ti             = srecStorage.ti;
+    srec.readStart      = srecStorage.readStart;
+    srec.readLen        = srecStorage.readLen;
+    srec.orientation    = srecStorage.orientation;
+    srec.is_bad         = srecStorage.is_bad;
+    srec.alignmentCount = srecStorage.alignmentCount;
+    srec.aligned        = srecStorage.aligned;
+    srec.cskey          = srecStorage. cskey;
+
+    rc = OpenBAM(&bam, db, bamFile);
+    if (rc) return rc;
+    if (!G.noVerifyReferences && ref != NULL) {
+        rc = VerifyReferences(bam, ref);
+        if (G.onlyVerifyReferences) {
+            BAM_FileRelease(bam);
+            return rc;
+        }
+    }
+    if (ctx->keyToID.key2id_max == 0) {
+        uint32_t rgcount;
+        unsigned rgi;
+        
+        BAM_FileGetReadGroupCount(bam, &rgcount);
+        if (rgcount > (sizeof(ctx->keyToID.key2id)/sizeof(ctx->keyToID.key2id[0]) - 1))
+            ctx->keyToID.key2id_max = 1;
+        else
+            ctx->keyToID.key2id_max = sizeof(ctx->keyToID.key2id)/sizeof(ctx->keyToID.key2id[0]);
+
+        for (rgi = 0; rgi != rgcount; ++rgi) {
+            BAMReadGroup const *rg;
+
+            BAM_FileGetReadGroup(bam, rgi, &rg);
+            if (rg && rg->platform && platform_cmp(rg->platform, "CAPILLARY")) {
+                G.hasTI = true;
+                break;
+            }
+        }
+    }
+
+    /* setting up more buffers */
+    rc = KDataBufferMake(&cigBuf, 32, 0);
+    if (rc)
+        return rc;
+
+    rc = KDataBufferMake(&fragBuf, 8, 1024);
+    if (rc)
+        return rc;
+
+    rc = KDataBufferMake(&buf, 16, 0);
+    if (rc)
+        return rc;
+
+    rc = KDataBufferMake(&seqBuffer, 8, 4096);
+    if (rc)
+        return rc;
+
+    rc = KDataBufferMake(&qualBuffer, 8, 4096);
+    if (rc)
+        return rc;
+
+    if (rc == 0) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", bamFile));
+    }
+
+    while ((rec = getNextRecord(bam, &rc)) != NULL) {
+        bool aligned;
+        uint32_t readlen;
+        uint16_t flags;
+        int64_t rpos=0;
+        char *seqDNA;
+        const BAMRefSeq *refSeq;
+        ctx_value_t *value;
+        bool wasInserted;
+        int32_t refSeqId=-1;
+        uint8_t *qual;
+        bool mated;
+        const char *name;
+        char cskey = 0;
+        bool originally_aligned;
+        bool isPrimary;
+        uint32_t opCount;
+        bool hasCG = false;
+        uint64_t ti = 0;
+        uint32_t csSeqLen = 0;
+        int lpad = 0;
+        int rpad = 0;
+        bool hardclipped = false;
+        bool revcmp = false;
+        unsigned readNo = 0;
+        bool wasPromoted = false;
+        char const *barCode = NULL;
+        char const *linkageGroup;
+
+        ++recordsRead;
+        
+        BAM_AlignmentGetReadName2(rec, &name, &namelen);
+
+        keyId = rec->keyId;
+        wasInserted = rec->wasInserted;
+
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+            goto LOOP_END;
+        }
+
+        {
+            float const new_value = BAM_FileGetProportionalPosition(bam) * 100.0;
+            float const delta = new_value - progress;
+            if (delta > 1.0) {
+                KLoadProgressbar_Process(ctx->progress[0], delta, false);
+                progress = new_value;
+            }
+        }
+
+        BAM_AlignmentGetBarCode(rec, &barCode);
+        linkageGroup = getLinkageGroup(rec);
+
+        if (!G.noColorSpace) {
+            if (BAM_AlignmentHasColorSpace(rec)) {
+                if (isNotColorSpace) {
+MIXED_BASE_AND_COLOR:
+                    rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", bamFile));
+                    goto LOOP_END;
+                }
+                /* COLORSPACE is disabled!
+                 * ctx->isColorSpace = isColorSpace = true; */
+            }
+            else if (isColorSpace)
+                goto MIXED_BASE_AND_COLOR;
+            else
+                isNotColorSpace = true;
+        }
+        BAM_AlignmentGetFlags(rec, &flags);
+
+        originally_aligned = (flags & BAMFlags_SelfIsUnmapped) == 0;
+        aligned = originally_aligned;
+
+        mated = false;
+        if (flags & BAMFlags_WasPaired) {
+            if ((flags & BAMFlags_IsFirst) != 0)
+                readNo |= 1;
+            if ((flags & BAMFlags_IsSecond) != 0)
+                readNo |= 2;
+            switch (readNo) {
+            case 1:
+            case 2:
+                mated = true;
+                break;
+            case 0:
+                if ((warned & 1) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots without fragment info have been encountered");
+                    warned |= 1;
+                }
+                UNFRAGMENT_MISSING_INFO;
+                break;
+            case 3:
+                if ((warned & 2) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots with more than two fragments have been encountered");
+                    warned |= 2;
+                }
+                UNFRAGMENT_TOO_MANY;
+                break;
+            }
+        }
+        if (!mated)
+            readNo = 1;
+
+        isPrimary = (flags & (BAMFlags_IsNotPrimary|BAMFlags_IsSupplemental)) == 0 ? true : false;
+        if (G.deferSecondary && !isPrimary && aligned && CTX_VALUE_GET_P_ID(*value, readNo - 1) == 0) {
+            /* promote to primary alignment */
+            isPrimary = true;
+            wasPromoted = true;
+        }
+
+        getSpotGroup(rec, spotGroup);
+        if (wasInserted) {
+            if (G.mode == mode_Remap) {
+                (void)PLOGERR(klogErr, (klogErr, rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)' is a new spot, not a remapping",
+                                         "name=%s", name));
+                goto LOOP_END;
+            }
+            /* first time spot is seen                    */
+            /* need to make sure that every goto LOOP_END */
+            /* above this point is with rc != 0           */
+            /* else this structure won't get initialized  */
+            memset(value, 0, sizeof(*value));
+            value->unmated = !mated;
+            if (isPrimary || G.assembleWithSecondary || G.deferSecondary) {
+                value->pcr_dup = (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;
+                value->platform = GetINSDCPlatform(bam, spotGroup);
+                value->primary_is_set = 1;
+            }
+        }
+        if (!isPrimary && G.noSecondary)
+            goto LOOP_END;
+
+        rc = BAM_AlignmentCGReadLength(rec, &readlen);
+        if (rc != 0 && GetRCState(rc) != rcNotFound) {
+            (void)LOGERR(klogErr, rc, "Invalid CG data");
+            goto LOOP_END;
+        }
+        if (rc == 0) {
+            hasCG = true;
+            BAM_AlignmentGetCigarCount(rec, &opCount);
+            rc = KDataBufferResize(&cigBuf, opCount * 2 + 5);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                goto LOOP_END;
+            }
+            rc = AlignmentRecordInit(&data, readlen);
+            if (rc == 0)
+                rc = KDataBufferResize(&buf, readlen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+
+            seqDNA = buf.base;
+            qual = (uint8_t *)&seqDNA[readlen];
+
+            rc = BAM_AlignmentGetCGSeqQual(rec, seqDNA, qual);
+            if (rc == 0) {
+                rc = BAM_AlignmentGetCGCigar(rec, cigBuf.base, cigBuf.elem_count, &opCount);
+            }
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to read CG data");
+                goto LOOP_END;
+            }
+            data.data.align_group.elements = 0;
+            data.data.align_group.buffer = alignGroup;
+            if (BAM_AlignmentGetCGAlignGroup(rec, alignGroup, sizeof(alignGroup), &alignGroupLen) == 0)
+                data.data.align_group.elements = alignGroupLen;
+        }
+        else {
+            /* normal flow i.e. NOT CG */
+            uint32_t const *tmp;
+
+            /* resize buffers */
+            BAM_AlignmentGetReadLength(rec, &readlen);
+            BAM_AlignmentGetRawCigar(rec, &tmp, &opCount);
+            rc = KDataBufferResize(&cigBuf, opCount);
+            assert(rc == 0);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                goto LOOP_END;
+            }
+            memmove(cigBuf.base, tmp, opCount * sizeof(uint32_t));
+
+            hardclipped = isHardClipped(opCount, cigBuf.base);
+            if (hardclipped) {
+                if (isPrimary && !wasPromoted) {
+                    /* when we promote a secondary to primary and it is hardclipped, we want to "fix" it */
+                    if (!G.acceptHardClip) {
+                        rc = RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains hard clipped primary alignments", "file=%s", bamFile));
+                        goto LOOP_END;
+                    }
+                }
+                else if (!G.acceptHardClip) { /* convert to soft clip */
+                    uint32_t *const cigar = cigBuf.base;
+                    uint32_t const lOp = cigar[0];
+                    uint32_t const rOp = cigar[opCount - 1];
+
+                    lpad = (lOp & 0xF) == 5 ? (lOp >> 4) : 0;
+                    rpad = (rOp & 0xF) == 5 ? (rOp >> 4) : 0;
+
+                    if (lpad + rpad == 0) {
+                        rc = RC(rcApp, rcFile, rcReading, rcData, rcInvalid);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains invalid CIGAR", "file=%s", bamFile));
+                        goto LOOP_END;
+                    }
+                    if (lpad != 0) {
+                        uint32_t const new_lOp = (((uint32_t)lpad) << 4) | 4;
+                        cigar[0] = new_lOp;
+                    }
+                    if (rpad != 0) {
+                        uint32_t const new_rOp = (((uint32_t)rpad) << 4) | 4;
+                        cigar[opCount - 1] = new_rOp;
+                    }
+                }
+            }
+
+            if (G.deferSecondary && !isPrimary) {
+                /*** try to see if hard-clipped secondary alignment can be salvaged **/
+                if (readlen + lpad + rpad < 256 && readlen + lpad + rpad < value->fragment_len[readNo - 1]) {
+                    rc = KDataBufferResize(&cigBuf, opCount + 1);
+                    assert(rc == 0);
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                        goto LOOP_END;
+                    }
+                    if (rpad > 0 && lpad == 0) {
+                        uint32_t *const cigar = cigBuf.base;
+                        lpad =  value->fragment_len[readNo - 1] - readlen - rpad;
+                        memmove(cigar + 1, cigar, opCount * sizeof(*cigar));
+                        cigar[0] = (uint32_t)((lpad << 4) | 4);
+                    }
+                    else {
+                        uint32_t *const cigar = cigBuf.base;
+                        rpad += value->fragment_len[readNo - 1] - readlen - lpad;
+                        cigar[opCount] = (uint32_t)((rpad << 4) | 4);
+                    }
+                    opCount++;
+                }
+            }
+            rc = AlignmentRecordInit(&data, readlen + lpad + rpad);
+            assert(rc == 0);
+            if (rc == 0)
+                rc = KDataBufferResize(&buf, readlen + lpad + rpad);
+            assert(rc == 0);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+
+            seqDNA = buf.base;
+            qual = (uint8_t *)&seqDNA[(readlen | csSeqLen) + lpad + rpad];
+            memset(seqDNA, 'N', (readlen | csSeqLen) + lpad + rpad);
+            memset(qual, 0, (readlen | csSeqLen) + lpad + rpad);
+
+            BAM_AlignmentGetSequence(rec, seqDNA + lpad);
+            if (G.useQUAL) {
+                uint8_t const *squal;
+
+                BAM_AlignmentGetQuality(rec, &squal);
+                memmove(qual + lpad, squal, readlen);
+            }
+            else {
+                uint8_t const *squal;
+                uint8_t qoffset = 0;
+                unsigned i;
+
+                rc = BAM_AlignmentGetQuality2(rec, &squal, &qoffset);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+                    goto LOOP_END;
+                }
+                if (qoffset) {
+                    for (i = 0; i != readlen; ++i)
+                        qual[i + lpad] = squal[i] - qoffset;
+                    QUAL_CHANGED_OQ;
+                }
+                else
+                    memmove(qual + lpad, squal, readlen);
+            }
+            readlen = readlen + lpad + rpad;
+            data.data.align_group.elements = 0;
+            data.data.align_group.buffer = alignGroup;
+        }
+        if (G.hasTI) {
+            rc = BAM_AlignmentGetTI(rec, &ti);
+            if (rc)
+                ti = 0;
+            rc = 0;
+        }
+
+        rc = KDataBufferResize(&seqBuffer, readlen);
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+            goto LOOP_END;
+        }
+        rc = KDataBufferResize(&qualBuffer, readlen);
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+            goto LOOP_END;
+        }
+        AR_REF_ORIENT(data) = (flags & BAMFlags_SelfIsReverse) == 0 ? false : true;
+
+        rpos = -1;
+        if (aligned) {
+            BAM_AlignmentGetPosition(rec, &rpos);
+            BAM_AlignmentGetRefSeqId(rec, &refSeqId);
+            if (refSeqId != lastRefSeqId) {
+                refSeq = NULL;
+                BAM_FileGetRefSeqById(bam, refSeqId, &refSeq);
+            }
+        }
+
+        revcmp = (isColorSpace && !aligned) ? false : AR_REF_ORIENT(data);
+        (void)PLOGMSG(klogDebug, (klogDebug, "Read '$(name)' is $(or) at $(ref):$(pos)", "name=%s,or=%s,ref=%s,pos=%i", name, revcmp ? "reverse" : "forward", refSeq ? refSeq->name : "(none)", rpos));
+        COPY_READ(seqBuffer.base, seqDNA, readlen, revcmp);
+        COPY_QUAL(qualBuffer.base, qual, readlen, revcmp);
+
+        AR_MAPQ(data) = GetMapQ(rec);
+        if (!isPrimary && AR_MAPQ(data) < G.minMapQual)
+            goto LOOP_END;
+
+        if (aligned && align == NULL) {
+            rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+            (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains aligned records", "file=%s", bamFile));
+            goto LOOP_END;
+        }
+        while (aligned) {
+            if (rpos >= 0 && refSeqId >= 0) {
+                if (refSeqId == skipRefSeqID) {
+                    DISCARD_SKIP_REFERENCE;
+                    goto LOOP_END;
+                }
+                if (refSeqId == unmapRefSeqId) {
+                    aligned = false;
+                    UNALIGNED_UNALIGNED_REF;
+                    break;
+                }
+                unmapRefSeqId = -1;
+                if (refSeq == NULL) {
+                    rc = SILENT_RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "File '$(file)': Spot '$(name)' refers to an unknown Reference number $(refSeqId)", "file=%s,refSeqId=%i,name=%s", bamFile, (int)refSeqId, name));
+                    rc = CheckLimitAndLogError();
+                    DISCARD_UNKNOWN_REFERENCE;
+                    goto LOOP_END;
+                }
+                else {
+                    bool shouldUnmap = false;
+
+                    if (G.refFilter && strcmp(G.refFilter, refSeq->name) != 0) {
+                        (void)PLOGMSG(klogInfo, (klogInfo, "Skipping Reference '$(name)'", "name=%s", refSeq->name));
+                        skipRefSeqID = refSeqId;
+                        DISCARD_SKIP_REFERENCE;
+                        goto LOOP_END;
+                    }
+
+                    rc = ReferenceSetFile(ref, refSeq->name, refSeq->length, refSeq->checksum, &shouldUnmap, &wasRenamed);
+                    if (rc == 0) {
+                        lastRefSeqId = refSeqId;
+                        if (shouldUnmap) {
+                            aligned = false;
+                            unmapRefSeqId = refSeqId;
+                            UNALIGNED_UNALIGNED_REF;
+                        }
+                        break;
+                    }
+                    if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+                        int const level = G.limit2config ? klogWarn : klogErr;
+
+                        (void)PLOGMSG(level, (level, "Could not find a Reference to match { name: '$(name)', length: $(rlen) }", "name=%s,rlen=%u", refSeq->name, (unsigned)refSeq->length));
+                    }
+                    else if (!G.limit2config)
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)': Spot '$(sname)' refers to an unknown Reference '$(rname)'", "file=%s,rname=%s,sname=%s", bamFile, refSeq->name, name));
+                    if (G.limit2config) {
+                        rc = 0;
+                        UNALIGNED_UNKNOWN_REF;
+                    }
+                    goto LOOP_END;
+                }
+            }
+            else if (refSeqId < 0) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference id = $(id) is invalid", "name=%.*s,id=%i", namelen, name, refSeqId));
+                if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+                UNALIGNED_INVALID_REF;
+            }
+            else {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference position = $(pos) is invalid", "name=%.*s,pos=%i", namelen, name, rpos));
+                if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+                UNALIGNED_INVALID_REF_POS;
+            }
+
+            aligned = false;
+        }
+        if (!aligned && (G.refFilter != NULL || G.limit2config)) {
+            assert(!"this shouldn't happen");
+            goto LOOP_END;
+        }
+
+        AR_KEY(data) = keyId;
+        AR_READNO(data) = readNo;
+
+        if (wasInserted) {
+        }
+        else if (isPrimary || G.assembleWithSecondary || G.deferSecondary) {
+            /* other times */
+            int o_pcr_dup = value->pcr_dup;
+            int const n_pcr_dup = (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;
+
+            if (!value->primary_is_set) {
+                o_pcr_dup = n_pcr_dup;
+                value->primary_is_set = 1;
+            }
+
+            value->pcr_dup = o_pcr_dup & n_pcr_dup;
+            if (o_pcr_dup != (o_pcr_dup & n_pcr_dup)) {
+                FLAG_CHANGED_PCR_DUP;
+            }
+            if (mated && value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, SILENT_RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen without mate info, now has mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError();
+                DISCARD_BAD_FRAGMENT_INFO;
+                goto LOOP_END;
+            }
+            else if (!mated && !value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, SILENT_RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen with mate info, now has no mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError();
+                DISCARD_BAD_FRAGMENT_INFO;
+                goto LOOP_END;
+            }
+        }
+        if (isPrimary) {
+            switch (readNo) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) != 0) {
+                    isPrimary = false;
+                    FLAG_CHANGED_PRIMARY_DUP;
+                }
+                else if (aligned && value->unaligned_1) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 1 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    isPrimary = false;
+                    FLAG_CHANGED_WAS_UNALIGNED;
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) != 0) {
+                    isPrimary = false;
+                    FLAG_CHANGED_PRIMARY_DUP;
+                }
+                else if (aligned && value->unaligned_2) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 2 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    isPrimary = false;
+                    FLAG_CHANGED_WAS_UNALIGNED;
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        if (hardclipped) {
+            value->hardclipped = 1;
+        }
+#if 0 /** EY TO REVIEW **/
+        if (!isPrimary && value->hardclipped) {
+            DISCARD_HARDCLIP_SECONDARY;
+            goto LOOP_END;
+        }
+#endif
+
+        /* input is clean */
+        ++recordsProcessed;
+
+        data.isPrimary = isPrimary;
+        if (aligned) {
+            uint32_t matches = 0;
+            uint32_t misses = 0;
+            uint8_t rna_orient = ' ';
+
+            FixOverhangingAlignment(&cigBuf, &opCount, rpos, refSeq->length, readlen);
+            BAM_AlignmentGetRNAStrand(rec, &rna_orient);
+            {
+                int const intronType = rna_orient == '+' ? NCBI_align_ro_intron_plus :
+                                       rna_orient == '-' ? NCBI_align_ro_intron_minus :
+                                                   hasCG ? NCBI_align_ro_complete_genomics :
+                                                           NCBI_align_ro_intron_unknown;
+                rc = ReferenceRead(ref, &data, rpos, cigBuf.base, opCount, seqDNA, readlen, intronType, &matches, &misses);
+            }
+            if (rc == 0) {
+                int const i = readNo - 1;
+                int const clipped_rl = readlen < 255 ? readlen : 255;
+                if (i >= 0 && i < 2) {
+                    int const rl = value->fragment_len[i];
+
+                    if (rl == 0)
+                        value->fragment_len[i] = clipped_rl;
+                    else if (rl != clipped_rl) {
+                        if (isPrimary) {
+                            rc = RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Primary alignment for '$(name)' has different length ($(len)) than previously recorded secondary alignment. Try to defer secondary alignment processing.",
+                                                    "name=%s,len=%d", name, readlen));
+                        }
+                        else {
+                            rc = SILENT_RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+                            (void)PLOGERR(klogWarn, (klogWarn, rc, "Secondary alignment for '$(name)' has different length ($(len)) than previously recorded primary alignment; discarding secondary alignment.",
+                                                     "name=%s,len=%d", name, readlen));
+                            DISCARD_BAD_SECONDARY;
+                            rc = CheckLimitAndLogError();
+                        }
+                        goto LOOP_END;
+                    }
+                }
+            }
+            if (rc == 0 && (matches < G.minMatchCount || (matches == 0 && !G.acceptNoMatch))) {
+                if (isPrimary) {
+                    if (misses > matches) {
+                        RecordNoMatch(name, refSeq->name, rpos);
+                        rc = LogNoMatch(name, refSeq->name, (unsigned)rpos, (unsigned)matches);
+                        if (rc)
+                            goto LOOP_END;
+                    }
+                }
+                else {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos); discarding secondary alignment",
+                                             "name=%s,ref=%s,pos=%u,count=%u", name, refSeq->name, (unsigned)rpos, (unsigned)matches));
+                    DISCARD_BAD_SECONDARY;
+                    rc = 0;
+                    goto LOOP_END;
+                }
+            }
+            if (rc) {
+                aligned = false;
+
+                if (((int)GetRCObject(rc)) == ((int)rcData) && GetRCState(rc) == rcNotAvailable) {
+                    /* because of code above converting hard clips to soft clips, this should be unreachable */
+                    abort();
+                }
+                else if (((int)GetRCObject(rc)) == ((int)rcData)) {
+                    UNALIGNED_INVALID_INFO;
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    /* Data errors may get reset; alignment will be unmapped at any rate */
+                    rc = CheckLimitAndLogError();
+                }
+                else {
+                    UNALIGNED_INVALID_REF_POS;
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': error reading reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    rc = CheckLimitAndLogError();
+                }
+                if (rc) goto LOOP_END;
+            }
+        }
+
+        if (!aligned && isPrimary) {
+            switch (readNo) {
+            case 1:
+                value->unaligned_1 = 1;
+                break;
+            case 2:
+                value->unaligned_2 = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        if (isPrimary) {
+            switch (readNo) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 0, data.alignId);
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 1, data.alignId);
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        if (G.mode == mode_Archive)
+            goto WRITE_SEQUENCE;
+        else
+            goto WRITE_ALIGNMENT;
+        if (0) {
+WRITE_SEQUENCE:
+            if (barCode) {
+                if (spotGroup[0] != '\0' && value->platform == SRA_PLATFORM_UNDEFINED) {
+                    /* don't use bar code */
+                }
+                else {
+                    unsigned const sglen = strlen(barCode);
+                    if (sglen + 1 < sizeof(spotGroup))
+                        memmove(spotGroup, barCode, sglen + 1);
+                }
+            }
+            if (mated) {
+                int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+                uint32_t const fragmentId = value->fragmentId;
+                bool const spotHasBeenWritten = (spotId != 0);
+                bool const spotHasFragmentInfo = (fragmentId != 0);
+                bool const spotIsFirstSeen = (spotHasBeenWritten || spotHasFragmentInfo) ? false : true;
+
+                if (spotHasBeenWritten) {
+                    /* do nothing */
+                }
+                else if (spotIsFirstSeen) {
+                    /* start spot assembly */
+                    unsigned sz;
+                    FragmentInfo fi;
+                    int32_t mate_refSeqId = -1;
+                    int64_t pnext = 0;
+
+                    if (!isPrimary) {
+                        if ( (!G.assembleWithSecondary || hardclipped) && !G.deferSecondary ) { 
+                            goto WRITE_ALIGNMENT;
+                        }
+                        (void)PLOGMSG(klogDebug, (klogDebug, "Spot '$(name)' (id $(id)) is being constructed from secondary alignment information", "id=%lx,name=%s", keyId, name));
+                    }
+                    memset(&fi, 0, sizeof(fi));
+
+                    fi.aligned = isPrimary ? aligned : 0;
+                    fi.ti = ti;
+                    fi.orientation = AR_REF_ORIENT(data);
+                    fi.readNo = readNo;
+                    fi.sglen = strlen(spotGroup);
+                    fi.lglen = strlen(linkageGroup);
+
+                    fi.readlen = readlen;
+                    fi.cskey = cskey;
+                    fi.is_bad = (flags & BAMFlags_IsLowQuality) != 0;
+                    sz = sizeof(fi) + 2*fi.readlen + fi.sglen + fi.lglen;
+                    if (align) {
+                        BAM_AlignmentGetMateRefSeqId(rec, &mate_refSeqId);
+                        BAM_AlignmentGetMatePosition(rec, &pnext);
+                    }
+                    if(align && mate_refSeqId == refSeqId && pnext > 0 && pnext!=rpos /*** weird case in some bams**/){
+                        rc = MemBankAlloc(ctx->frags, &value->fragmentId, sz, 0, false);
+                        fcountBoth++;
+                    } else {
+                        rc = MemBankAlloc(ctx->frags, &value->fragmentId, sz, 0, true);
+                        fcountOne++;
+                    }
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "KMemBankAlloc failed");
+                        goto LOOP_END;
+                    }
+                    /*printf("IN:%10d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+                    
+                    rc = KDataBufferResize(&fragBuf, sz);
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "Failed to resize fragment buffer");
+                        goto LOOP_END;
+                    }
+                    {{
+                        uint8_t *dst = (uint8_t*) fragBuf.base;
+                        
+                        memmove(dst,&fi,sizeof(fi));
+                        dst += sizeof(fi);
+                        memmove(dst, seqBuffer.base, readlen);
+                        dst += readlen;
+                        memmove(dst, qualBuffer.base, readlen);
+                        dst += fi.readlen;
+                        memmove(dst, spotGroup, fi.sglen);
+                        dst += fi.sglen;
+                        memmove(dst, linkageGroup, fi.lglen);
+                        dst += fi.lglen;
+                    }}
+                    rc = MemBankWrite(ctx->frags, value->fragmentId, 0, fragBuf.base, sz, &rsize);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankWrite failed writing fragment $(id)", "id=%u", value->fragmentId));
+                        goto LOOP_END;
+                    }
+                    if (revcmp) {
+                        QUAL_CHANGED_REVERSED;
+                        SEQ__CHANGED_REV_COMP;
+                    }
+                }
+                else if (spotHasFragmentInfo) {
+                    /* continue spot assembly */
+                    FragmentInfo *fip;
+                    {
+                        size_t size1;
+                        size_t size2;
+                        
+                        rc = MemBankSize(ctx->frags, fragmentId, &size1);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankSize failed on fragment $(id)", "id=%u", fragmentId));
+                            goto LOOP_END;
+                        }
+                        
+                        rc = KDataBufferResize(&fragBuf, size1);
+                        fip = (FragmentInfo *)fragBuf.base;
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+                            goto LOOP_END;
+                        }
+                        
+                        rc = MemBankRead(ctx->frags, fragmentId, 0, fragBuf.base, size1, &size2);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankRead failed on fragment $(id)", "id=%u", fragmentId));
+                            goto LOOP_END;
+                        }
+                        assert(size1 == size2);
+                    }
+                    if (readNo == fip->readNo) {
+                        /* is a repeat of the same read; do nothing */
+                    }
+                    else {
+                        /* mate found; finish spot assembly */
+                        unsigned read1 = 0;
+                        unsigned read2 = 1;
+                        char const *const seq1 = (void *)&fip[1];
+                        char const *const qual1 = (void *)(seq1 + fip->readlen);
+                        char const *const sg1 = (void *)(qual1 + fip->readlen);
+                        char const *const bx1 = (void *)(sg1 + fip->sglen);
+
+                        if (!isPrimary) {
+                            if ((!G.assembleWithSecondary || hardclipped) && !G.deferSecondary ) {
+                                goto WRITE_ALIGNMENT;
+                            }
+                            (void)PLOGMSG(klogDebug, (klogDebug, "Spot '$(name)' (id $(id)) is being constructed from secondary alignment information", "id=%lx,name=%s", keyId, name));
+                        }
+                        rc = KDataBufferResize(&seqBuffer, readlen + fip->readlen);
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                            goto LOOP_END;
+                        }
+                        rc = KDataBufferResize(&qualBuffer, readlen + fip->readlen);
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                            goto LOOP_END;
+                        }
+                        if (readNo < fip->readNo) {
+                            read1 = 1;
+                            read2 = 0;
+                        }
+
+                        memset(&srecStorage, 0, sizeof(srecStorage));
+                        srec.numreads = 2;
+                        srec.readLen[read1] = fip->readlen;
+                        srec.readLen[read2] = readlen;
+                        srec.readStart[1] = srec.readLen[0];
+                        {
+                            char const *const s1 = seq1;
+                            char const *const s2 = seqBuffer.base;
+                            char *const d = seqBuffer.base;
+                            char *const d1 = d + srec.readStart[read1];
+                            char *const d2 = d + srec.readStart[read2];
+
+                            srec.seq = seqBuffer.base;
+                            if (d2 != s2) {
+                                memmove(d2, s2, readlen);
+                            }
+                            memmove(d1, s1, fip->readlen);
+                        }
+                        {
+                            char const *const s1 = qual1;
+                            char const *const s2 = qualBuffer.base;
+                            char *const d = qualBuffer.base;
+                            char *const d1 = d + srec.readStart[read1];
+                            char *const d2 = d + srec.readStart[read2];
+
+                            srec.qual = qualBuffer.base;
+                            if (d2 != s2) {
+                                memmove(d2, s2, readlen);
+                            }
+                            memmove(d1, s1, fip->readlen);
+                        }
+
+                        srec.ti[read1] = fip->ti;
+                        srec.ti[read2] = ti;
+
+                        srec.aligned[read1] = fip->aligned;
+                        srec.aligned[read2] = isPrimary ? aligned : 0;
+
+                        srec.is_bad[read1] = fip->is_bad;
+                        srec.is_bad[read2] = (flags & BAMFlags_IsLowQuality) != 0;
+
+                        srec.orientation[read1] = fip->orientation;
+                        srec.orientation[read2] = AR_REF_ORIENT(data);
+
+                        srec.cskey[read1] = fip->cskey;
+                        srec.cskey[read2] = cskey;
+
+                        srec.keyId = keyId;
+
+                        srec.spotGroup = sg1;
+                        srec.spotGroupLen = fip->sglen;
+
+                        srec.linkageGroup = bx1;
+                        srec.linkageGroupLen = fip->lglen;
+
+                        srec.seq = seqBuffer.base;
+                        srec.qual = qualBuffer.base;
+
+                        rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                            goto LOOP_END;
+                        }
+                        CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                        if(fragmentId & 1){
+                            fcountOne--;
+                        } else {
+                            fcountBoth--;
+                        }
+                        /*	printf("OUT:%9d\tcnt2=%ld\tcnt1=%ld\n",fragmentId,fcountBoth,fcountOne);*/
+                        rc = MemBankFree(ctx->frags, fragmentId);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankFree failed on fragment $(id)", "id=%u", fragmentId));
+                            goto LOOP_END;
+                        }
+                        value->fragmentId = 0;
+                        if (revcmp) {
+                            QUAL_CHANGED_REVERSED;
+                            SEQ__CHANGED_REV_COMP;
+                        }
+                        if (value->pcr_dup && (srec.is_bad[0] || srec.is_bad[1])) {
+                            FLAG_CHANGED_400_AND_200;
+                            filterFlagConflictRecords++;
+                            if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                            }
+                            else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                            }
+                        }
+                    }
+                }
+                else {
+                    (void)PLOGMSG(klogErr, (klogErr, "Spot '$(name)' has caused the loader to enter an illogical state", "name=%s", name));
+                    assert("this should never happen");
+                }
+            }
+            else if (CTX_VALUE_GET_S_ID(*value) == 0) {
+                /* new unmated fragment - no spot assembly */
+                if (!isPrimary) {
+                    if ((!G.assembleWithSecondary || hardclipped) && !G.deferSecondary ) {
+                        goto WRITE_ALIGNMENT;
+                    }
+                    (void)PLOGMSG(klogDebug, (klogDebug, "Spot '$(name)' (id $(id)) is being constructed from secondary alignment information", "id=%lx,name=%s", keyId, name));
+                }
+                memset(&srecStorage, 0, sizeof(srecStorage));
+                srec.numreads = 1;
+
+                srec.readLen[0] = readlen;
+                srec.ti[0] = ti;
+                srec.aligned[0] = isPrimary ? aligned : 0;
+                srec.is_bad[0] = (flags & BAMFlags_IsLowQuality) != 0;
+                srec.orientation[0] = AR_REF_ORIENT(data);
+                srec.cskey[0] = cskey;
+
+                srec.keyId = keyId;
+
+                srec.spotGroup = spotGroup;
+                srec.spotGroupLen = strlen(spotGroup);
+
+                srec.linkageGroup = linkageGroup;
+                srec.linkageGroupLen = strlen(linkageGroup);
+
+                srec.seq = seqBuffer.base;
+                srec.qual = qualBuffer.base;
+
+                rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "SequenceWriteRecord failed", ""));
+                    goto LOOP_END;
+                }
+                CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                value->fragmentId = 0;
+                if (value->pcr_dup && srec.is_bad[0]) {
+                    FLAG_CHANGED_400_AND_200;
+                    filterFlagConflictRecords++;
+                    if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+                        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                    }
+                    else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+                        (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                    }
+                }
+                if (revcmp) {
+                    QUAL_CHANGED_REVERSED;
+                    SEQ__CHANGED_REV_COMP;
+                }
+            }
+        }
+WRITE_ALIGNMENT:
+        if (aligned) {
+            if (mated && !isPrimary) {
+                int32_t bam_mrid;
+                int64_t mpos;
+                int64_t mrid = 0;
+                int64_t tlen;
+
+                BAM_AlignmentGetMatePosition(rec, &mpos);
+                BAM_AlignmentGetMateRefSeqId(rec, &bam_mrid);
+                BAM_AlignmentGetInsertSize(rec, &tlen);
+
+                if (mpos >= 0 && bam_mrid >= 0 && tlen != 0) {
+                    BAMRefSeq const *mref;
+
+                    BAM_FileGetRefSeq(bam, bam_mrid, &mref);
+                    if (mref) {
+                        rc_t rc_temp = ReferenceGet1stRow(ref, &mrid, mref->name);
+                        if (rc_temp == 0) {
+                            data.mate_ref_pos = mpos;
+                            data.template_len = tlen;
+                            data.mate_ref_orientation = (flags & BAMFlags_MateIsReverse) ? 1 : 0;
+                        }
+                        else {
+                            (void)PLOGERR(klogWarn, (klogWarn, rc_temp, "Failed to get refID for $(name)", "name=%s", mref->name));
+                            MATE_INFO_LOST_UNKNOWN_REF;
+                        }
+                        data.mate_ref_id = mrid;
+                    }
+                    else {
+                        MATE_INFO_LOST_INVALID;
+                    }
+                }
+                else if (mpos >= 0 || bam_mrid >= 0 || tlen != 0) {
+                    MATE_INFO_LOST_MISSING;
+                }
+            }
+
+            if (wasRenamed) {
+                RENAMED_REFERENCE;
+            }
+            if (value->alignmentCount[readNo - 1] < 254)
+                ++value->alignmentCount[readNo - 1];
+            ++ctx->alignCount;
+
+            assert(keyId >> 32 < ctx->keyToID.key2id_count);
+            assert((uint32_t)keyId < ctx->keyToID.idCount[keyId >> 32]);
+
+            if (linkageGroup[0] != '\0') {
+                AR_LINKAGE_GROUP(data).elements = strlen(linkageGroup);
+                AR_LINKAGE_GROUP(data).buffer = linkageGroup;
+            }
+
+            rc = AlignmentWriteRecord(align, &data);
+            if (rc == 0) {
+                if (!isPrimary)
+                    data.alignId = ++ctx->secondId;
+
+                rc = ReferenceAddAlignId(ref, data.alignId, isPrimary);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "ReferenceAddAlignId failed", ""));
+                }
+                else {
+                    *had_alignments = true;
+                }
+            }
+            else {
+                (void)PLOGERR(klogErr, (klogErr, rc, "AlignmentWriteRecord failed", ""));
+            }
+        }
+        /**************************************************************/
+
+    LOOP_END:
+        BAM_AlignmentRelease(rec);
+        ++reccount;
+        if (G.maxAlignCount > 0 && reccount >= G.maxAlignCount)
+            break;
+        if (rc == 0)
+            *had_sequences = true;
+    }
+    if (rc) {
+        if (   (GetRCModule(rc) == rcCont && (int)GetRCObject(rc) == rcData && GetRCState(rc) == rcDone)
+            || (GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound))
+        {
+            (void)PLOGMSG(klogInfo, (klogInfo, "EOF '$(file)'; processed $(proc)", "file=%s,read=%lu,proc=%lu", bamFile, (unsigned long)recordsRead, (unsigned long)recordsProcessed));
+            rc = 0;
+        }
+        else {
+            (void)PLOGERR(klogInfo, (klogInfo, rc, "Error '$(file)'; read $(read); processed $(proc)", "file=%s,read=%lu,proc=%lu", bamFile, (unsigned long)recordsRead, (unsigned long)recordsProcessed));
+        }
+    }
+    if (filterFlagConflictRecords > 0) {
+        (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+    }
+    if (rc == 0 && recordsProcessed == 0) {
+        (void)LOGMSG(klogWarn, (G.limit2config || G.refFilter != NULL) ?
+                     "All records from the file were filtered out" :
+                     "The file contained no records that were processed.");
+        rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+    }
+
+    BAM_FileRelease(bam);
+    MMArrayLock(ctx->id2value);
+    KDataBufferWhack(&buf);
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&cigBuf);
+    KDataBufferWhack(&data.buffer);
+    return rc;
+}
+
+static rc_t WriteSoloFragments(context_t *ctx, Sequence *seq)
+{
+    uint32_t i;
+    unsigned j;
+    uint64_t idCount = 0;
+    rc_t rc;
+    KDataBuffer fragBuf;
+    SequenceRecordStorage srecStorage;
+    SequenceRecord srec;
+
+    ++ctx->pass;
+    memset(&srec, 0, sizeof(srec));
+
+    srec.ti             = srecStorage.ti;
+    srec.readStart      = srecStorage.readStart;
+    srec.readLen        = srecStorage.readLen;
+    srec.orientation    = srecStorage.orientation;
+    srec.is_bad         = srecStorage.is_bad;
+    srec.alignmentCount = srecStorage.alignmentCount;
+    srec.aligned        = srecStorage.aligned;
+    srec.cskey          = srecStorage. cskey;
+
+    rc = KDataBufferMake(&fragBuf, 8, 0);
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+        return rc;
+    }
+    for (idCount = 0, j = 0; j < ctx->keyToID.key2id_count; ++j) {
+        idCount += ctx->keyToID.idCount[j];
+    }
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], idCount);
+
+    for (idCount = 0, j = 0; j < ctx->keyToID.key2id_count; ++j) {
+        for (i = 0; i != ctx->keyToID.idCount[j]; ++i, ++idCount) {
+            uint64_t const keyId = ((uint64_t)j << 32) | i;
+            ctx_value_t *value;
+            size_t rsize;
+            size_t sz;
+            char const *src;
+            FragmentInfo const *fip;
+
+            rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+            if (rc)
+                break;
+            KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+            if (value->fragmentId == 0)
+                continue;
+
+            rc = MemBankSize(ctx->frags, value->fragmentId, &sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankSize failed");
+                break;
+            }
+            rc = KDataBufferResize(&fragBuf, (size_t)sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+                break;
+            }
+            rc = MemBankRead(ctx->frags, value->fragmentId, 0, fragBuf.base, sz, &rsize);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankRead failed");
+                break;
+            }
+            assert( rsize == sz );
+
+            fip = fragBuf.base;
+            src = (char const *)&fip[1];
+
+            memset(&srecStorage, 0, sizeof(srecStorage));
+            if (value->unmated) {
+                srec.numreads = 1;
+                srec.readLen[0] = fip->readlen;
+                srec.ti[0] = fip->ti;
+                srec.aligned[0] = fip->aligned;
+                srec.is_bad[0] = fip->is_bad;
+                srec.orientation[0] = fip->orientation;
+                srec.cskey[0] = fip->cskey;
+            }
+            else {
+                unsigned const read = ((fip->aligned && CTX_VALUE_GET_P_ID(*value, 0) == 0) || value->unaligned_2) ? 1 : 0;
+
+                srec.numreads = 2;
+                srec.readLen[read] = fip->readlen;
+                srec.readStart[1] = srec.readLen[0];
+                srec.ti[read] = fip->ti;
+                srec.aligned[read] = fip->aligned;
+                srec.is_bad[read] = fip->is_bad;
+                srec.orientation[read] = fip->orientation;
+                srec.cskey[0] = srec.cskey[1] = 'N';
+                srec.cskey[read] = fip->cskey;
+            }
+            srec.seq = (char *)src;
+            srec.qual = (uint8_t *)(src + fip->readlen);
+            srec.spotGroup = (char *)(src + 2 * fip->readlen);
+            srec.spotGroupLen = fip->sglen;
+            srec.linkageGroup = (char *)(src + 2 * fip->readlen * fip->sglen);
+            srec.linkageGroupLen = fip->lglen;
+            srec.keyId = keyId;
+            rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, value->pcr_dup, value->platform);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                break;
+            }
+            /*rc = KMemBankFree(frags, id);*/
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+        }
+    }
+    MMArrayLock(ctx->id2value);
+    KDataBufferWhack(&fragBuf);
+    return rc;
+}
+
+static rc_t SequenceUpdateAlignInfo(context_t *ctx, Sequence *seq)
+{
+    rc_t rc = 0;
+    uint64_t row;
+    uint64_t keyId;
+
+    ++ctx->pass;
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->spotId + 1);
+
+    for (row = 1; row <= ctx->spotId; ++row) {
+        ctx_value_t *value;
+
+        rc = SequenceReadKey(seq, row, &keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to get key for row $(row)", "row=%u", (unsigned)row));
+            break;
+        }
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read info for row $(row), index $(idx)", "row=%u,idx=%u", (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        if (G.mode == mode_Remap) {
+            CTX_VALUE_SET_S_ID(*value, row);
+        }
+        if (row != CTX_VALUE_GET_S_ID(*value)) {
+            rc = RC(rcApp, rcTable, rcWriting, rcData, rcUnexpected);
+            (void)PLOGMSG(klogErr, (klogErr, "Unexpected spot id $(spotId) for row $(row), index $(idx)", "spotId=%u,row=%u,idx=%u", (unsigned)CTX_VALUE_GET_S_ID(*value), (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        {{
+            int64_t primaryId[2];
+            int const logLevel = klogWarn; /*G.assembleWithSecondary ? klogWarn : klogErr;*/
+
+            primaryId[0] = CTX_VALUE_GET_P_ID(*value, 0);
+            primaryId[1] = CTX_VALUE_GET_P_ID(*value, 1);
+
+            if (primaryId[0] == 0 && value->alignmentCount[0] != 0) {
+                rc = RC(rcApp, rcTable, rcWriting, rcConstraint, rcViolated);
+                (void)PLOGERR(logLevel, (logLevel, rc, "Spot id $(id) read 1 never had a primary alignment", "id=%lx", keyId));
+            }
+            if (!value->unmated && primaryId[1] == 0 && value->alignmentCount[1] != 0) {
+                rc = RC(rcApp, rcTable, rcWriting, rcConstraint, rcViolated);
+                (void)PLOGERR(logLevel, (logLevel, rc, "Spot id $(id) read 2 never had a primary alignment", "id=%lx", keyId));
+            }
+            if (rc != 0 && logLevel == klogErr)
+                break;
+
+            rc = SequenceUpdateAlignData(seq, row, value->unmated ? 1 : 2,
+                                         primaryId,
+                                         value->alignmentCount);
+        }}
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "Failed updating Alignment data in sequence table");
+            break;
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    MMArrayLock(ctx->id2value);
+    return rc;
+}
+
+static rc_t AlignmentUpdateSpotInfo(context_t *ctx, Alignment *align)
+{
+    rc_t rc;
+    uint64_t keyId;
+
+    ++ctx->pass;
+
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->alignCount);
+
+    rc = AlignmentStartUpdatingSpotIds(align);
+    while (rc == 0 && (rc = Quitting()) == 0) {
+        ctx_value_t *value;
+
+        rc = AlignmentGetSpotKey(align, &keyId);
+        if (rc) {
+            if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                rc = 0;
+            break;
+        }
+        assert(keyId >> 32 < ctx->keyToID.key2id_count);
+        assert((uint32_t)keyId < ctx->keyToID.idCount[keyId >> 32]);
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc == 0) {
+            int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+
+            if (spotId == 0) {
+                rc = RC(rcApp, rcTable, rcWriting, rcConstraint, rcViolated);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(id)' was never assigned a spot id, probably has no primary alignments", "id=%lx", keyId));
+                break;
+            }
+            rc = AlignmentWriteSpotId(align, spotId);
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    MMArrayLock(ctx->id2value);
+    return rc;
+}
+
+
+static rc_t ArchiveBAM(VDBManager *mgr, VDatabase *db,
+                       unsigned bamFiles, char const *bamFile[],
+                       unsigned seqFiles, char const *seqFile[],
+                       bool *has_alignments,
+                       bool continuing)
+{
+    rc_t rc = 0;
+    rc_t rc2;
+    Reference ref;
+    Sequence seq;
+    Alignment *align;
+    static context_t *ctx = &GlobalContext;
+    bool has_sequences = false;
+    unsigned i;
+
+    *has_alignments = false;
+    rc = ReferenceInit(&ref, mgr, db);
+    if (rc)
+        return rc;
+
+    if (G.onlyVerifyReferences) {
+        for (i = 0; i < bamFiles && rc == 0; ++i) {
+            rc = ProcessBAM(bamFile[i], NULL, db, &ref, NULL, NULL, NULL, NULL);
+        }
+        ReferenceWhack(&ref, false);
+        return rc;
+    }
+    SequenceInit(&seq, db);
+    align = AlignmentMake(db);
+
+    rc = SetupContext(ctx, bamFiles + seqFiles);
+    if (rc)
+        return rc;
+
+    ctx->pass = 1;
+    for (i = 0; i < bamFiles && rc == 0; ++i) {
+        bool this_has_alignments = false;
+        bool this_has_sequences = false;
+
+        rc = ProcessBAM(bamFile[i], ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+        *has_alignments |= this_has_alignments;
+        has_sequences |= this_has_sequences;
+    }
+    for (i = 0; i < seqFiles && rc == 0; ++i) {
+        bool this_has_alignments = false;
+        bool this_has_sequences = false;
+
+        rc = ProcessBAM(seqFile[i], ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+        *has_alignments |= this_has_alignments;
+        has_sequences |= this_has_sequences;
+    }
+    if (!continuing) {
+/*** No longer need memory for key2id ***/
+        for (i = 0; i != ctx->keyToID.key2id_count; ++i) {
+            KBTreeDropBacking(ctx->keyToID.key2id[i]);
+            KBTreeRelease(ctx->keyToID.key2id[i]);
+            ctx->keyToID.key2id[i] = NULL;
+        }
+        free(ctx->keyToID.key2id_names);
+        ctx->keyToID.key2id_names = NULL;
+/*******************/
+    }
+
+    if (has_sequences) {
+        if (rc == 0 && (rc = Quitting()) == 0) {
+            if (G.mode == mode_Archive) {
+                (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+                rc = WriteSoloFragments(ctx, &seq);
+                ContextReleaseMemBank(ctx);
+            }
+            if (rc == 0) {
+                rc = SequenceDoneWriting(&seq);
+                if (rc == 0) {
+                    (void)LOGMSG(klogInfo, "Updating sequence alignment info");
+                    rc = SequenceUpdateAlignInfo(ctx, &seq);
+                }
+            }
+        }
+    }
+
+    if (*has_alignments && rc == 0 && (rc = Quitting()) == 0) {
+        (void)LOGMSG(klogInfo, "Writing alignment spot ids");
+        rc = AlignmentUpdateSpotInfo(ctx, align);
+    }
+    rc2 = AlignmentWhack(align, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+    if (rc == 0)
+        rc = rc2;
+
+    rc2 = ReferenceWhack(&ref, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+    if (rc == 0)
+        rc = rc2;
+
+    SequenceWhack(&seq, rc == 0);
+
+    ContextRelease(ctx, continuing);
+
+    if (rc == 0) {
+        (void)LOGMSG(klogInfo, "Successfully loaded all files");
+    }
+    return rc;
+}
+
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+    KMDataNode *node;
+    rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+
+    if (rc == 0) {
+        rc = KLoaderMeta_Write(node, progName, __DATE__, "BAM", KAppVersion());
+        KMDataNodeRelease(node);
+    }
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+    }
+    return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+    KDirectory *p;
+    rc_t rc = KDirectoryNativeDir(&p);
+
+    if (rc == 0) {
+        rc = KDirectoryOpenDirUpdate(p, dir, false, "%s", path);
+        KDirectoryRelease(p);
+    }
+    return rc;
+}
+
+static
+rc_t ConvertDatabaseToUnmapped(VDatabase *db)
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+    if (rc == 0)
+    {
+        VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+        VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+        VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+        VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");
+        rc = VTableRelease(tbl);
+    }
+    return rc;
+}
+
+rc_t run(char const progName[],
+         unsigned bamFiles, char const *bamFile[],
+         unsigned seqFiles, char const *seqFile[],
+         bool continuing)
+{
+    VDBManager *mgr;
+    rc_t rc;
+    rc_t rc2;
+    char const *db_type = G.expectUnsorted ? "NCBI:align:db:alignment_unsorted" : "NCBI:align:db:alignment_sorted";
+
+    rc = VDBManagerMakeUpdate(&mgr, NULL);
+    if (rc) {
+        (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+    }
+    else {
+        bool has_alignments = false;
+
+        /* VDBManagerDisableFlushThread(mgr); */
+        rc = VDBManagerDisablePagemapThread(mgr);
+        if (rc == 0)
+        {
+            if (G.onlyVerifyReferences) {
+                rc = ArchiveBAM(mgr, NULL, bamFiles, bamFile, 0, NULL, &has_alignments, continuing);
+            }
+            else {
+                VSchema *schema;
+
+                rc = VDBManagerMakeSchema(mgr, &schema);
+                if (rc) {
+                    (void)LOGERR (klogErr, rc, "failed to create schema");
+                }
+                else {
+                    (void)(rc = VSchemaAddIncludePath(schema, "%s", G.schemaIncludePath));
+                    rc = VSchemaParseFile(schema, "%s", G.schemaPath);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G.schemaPath));
+                    }
+                    else {
+                        VDatabase *db;
+
+                        rc = VDBManagerCreateDB(mgr, &db, schema, db_type,
+                                                kcmInit + kcmMD5, "%s", G.outpath);
+                        VSchemaRelease(schema);
+                        if (rc == 0) {
+                            rc = ArchiveBAM(mgr, db, bamFiles, bamFile, seqFiles, seqFile, &has_alignments, continuing);
+                            if (rc == 0)
+                                PrintChangeReport();
+                            if (rc == 0 && !has_alignments) {
+                                rc = ConvertDatabaseToUnmapped(db);
+                            }
+                            else if (rc == 0 && lmc != NULL) {
+                                VTable *tbl = NULL;
+                                KTable *ktbl = NULL;
+                                KMetadata *meta = NULL;
+                                KMDataNode *node = NULL;
+
+                                VDatabaseOpenTableUpdate(db, &tbl, "REFERENCE");
+                                VTableOpenKTableUpdate(tbl, &ktbl);
+                                VTableRelease(tbl);
+
+                                KTableOpenMetadataUpdate(ktbl, &meta);
+                                KTableRelease(ktbl);
+
+                                KMetadataOpenNodeUpdate(meta, &node, "LOW_MATCH_COUNT");
+                                KMetadataRelease(meta);
+
+                                RecordLowMatchCounts(node);
+
+                                KMDataNodeRelease(node);
+
+                                LowMatchCounterFree(lmc);
+                                lmc = NULL;
+                            }
+                            VDatabaseRelease(db);
+
+                            if (rc == 0 && G.globalMode == mode_Remap && !continuing) {
+                                VTable *tbl = NULL;
+
+                                VDBManagerOpenDBUpdate(mgr, &db, NULL, G.firstOut);
+                                VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+                                VDatabaseRelease(db);
+                                VTableDropColumn(tbl, "TMP_KEY_ID");
+                                VTableDropColumn(tbl, "READ");
+                                VTableDropColumn(tbl, "ALTREAD");
+                                VTableRelease(tbl);
+                            }
+
+                            if (rc == 0) {
+                                KMetadata *meta = NULL;
+
+                                {
+                                    KDBManager *kmgr = NULL;
+
+                                    rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+                                    if (rc == 0) {
+                                        KDatabase *kdb;
+
+                                        rc = KDBManagerOpenDBUpdate(kmgr, &kdb, "%s", G.outpath);
+                                        if (rc == 0) {
+                                            rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+                                            KDatabaseRelease(kdb);
+                                        }
+                                        KDBManagerRelease(kmgr);
+                                    }
+                                }
+                                if (rc == 0) {
+                                    rc = WriteLoaderSignature(meta, progName);
+                                    if (rc == 0) {
+                                        KMDataNode *changes = NULL;
+                                        
+                                        rc = KMetadataOpenNodeUpdate(meta, &changes, "CHANGES");
+                                        if (rc == 0)
+                                            RecordChanges(changes, "CHANGE");
+                                        KMDataNodeRelease(changes);
+                                    }
+                                    KMetadataRelease(meta);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        rc2 = VDBManagerRelease(mgr);
+        if (rc2)
+            (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/bam-loader/loader-imp.h b/tools/bam-loader/loader-imp.h
new file mode 100644
index 0000000..d90625f
--- /dev/null
+++ b/tools/bam-loader/loader-imp.h
@@ -0,0 +1,30 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+rc_t run(char const argv0[],
+         unsigned countAligned, char const *bamFile[],
+         unsigned countUnaligned, char const *unaligned[],
+         bool continuing);
diff --git a/tools/bam-loader/low-match-count.cpp b/tools/bam-loader/low-match-count.cpp
new file mode 100644
index 0000000..48f9f44
--- /dev/null
+++ b/tools/bam-loader/low-match-count.cpp
@@ -0,0 +1,72 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+extern "C" {
+#include "low-match-count.h"
+}
+
+#include <map>
+#include <string>
+
+struct LowMatchCounter {
+    typedef unsigned counter_t;
+    typedef std::map<std::string, counter_t> map_t;
+
+    map_t counter;
+
+    void add(std::string const &name) {
+        ++counter[name];
+    }
+
+    void each(void *ctx, callback_f callback) const {
+        map_t::const_iterator i;
+
+        for (i = counter.begin(); i != counter.end(); ++i) {
+            char const *const name = i->first.c_str();
+            callback(ctx, name, i->second);
+        }
+    }
+};
+
+extern "C" {
+
+LowMatchCounter *LowMatchCounterMake() {
+    return new LowMatchCounter;
+}
+
+void LowMatchCounterAdd(LowMatchCounter *const self, char const *const name) {
+    self->add(name);
+}
+
+void LowMatchCounterEach(LowMatchCounter const *const self, void *callback_ctx, callback_f callback) {
+    self->each(callback_ctx, callback);
+}
+
+void LowMatchCounterFree(LowMatchCounter *const self) {
+    delete self;
+}
+
+}
diff --git a/tools/bam-loader/low-match-count.h b/tools/bam-loader/low-match-count.h
new file mode 100644
index 0000000..76b9b85
--- /dev/null
+++ b/tools/bam-loader/low-match-count.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef void (*callback_f)(void *ctx, char const *name, unsigned count);
+typedef struct LowMatchCounter LowMatchCounter;
+
+LowMatchCounter *LowMatchCounterMake();
+void LowMatchCounterAdd(LowMatchCounter *, char const *);
+void LowMatchCounterEach(LowMatchCounter const *, void *, callback_f);
+void LowMatchCounterFree(LowMatchCounter *);
diff --git a/tools/bam-loader/mate-distance-stats.cpp b/tools/bam-loader/mate-distance-stats.cpp
new file mode 100644
index 0000000..f732370
--- /dev/null
+++ b/tools/bam-loader/mate-distance-stats.cpp
@@ -0,0 +1,23 @@
+#include "mate-distance-stats.hpp"
+#include <vector>
+#include <algorithm>
+
+unsigned MateDistanceStats::NthMostFrequent(unsigned N, distance_t result[N]) const
+{
+    typedef std::vector<map_t::const_iterator> vector_t;
+    unsigned const n = map.size() < N ? map.size() : N;
+    vector_t v;
+    
+    v.reserve(map.size());
+    for (map_t::const_iterator i = map.cbegin(); i != map.cend(); ++i) {
+        v.push_back(i);
+    }
+    std::stable_sort(v.begin(), v.end(), compare_count_descending);
+    std::sort(v.begin(), v.begin() + n, compare_distance); // unique key therefore regular sort is stable
+    
+    vector_t::const_iterator j = v.cbegin();
+    for (unsigned i = 0; i != n; ++i, ++j) {
+        result[i] = (*j)->first;
+    }
+    return n;
+}
diff --git a/tools/bam-loader/mate-distance-stats.hpp b/tools/bam-loader/mate-distance-stats.hpp
new file mode 100644
index 0000000..87f50ad
--- /dev/null
+++ b/tools/bam-loader/mate-distance-stats.hpp
@@ -0,0 +1,20 @@
+#include <map>
+
+class MateDistanceStats {
+public:
+    typedef unsigned long distance_t;
+    typedef unsigned long long count_t;
+private:
+    typedef std::map<distance_t, count_t> map_t;
+    map_t map;
+    static bool compare_count_descending(map_t::const_iterator a, map_t::const_iterator b) {
+        return b->second < a->second;
+    }
+    static bool compare_distance(map_t::const_iterator a, map_t::const_iterator b) {
+        return a->first < b->first;
+    }
+public:
+    MateDistanceStats() {}
+    void Count(distance_t const &d) { ++map[d]; }
+    unsigned NthMostFrequent(unsigned N, distance_t result[N]) const;
+};
diff --git a/tools/bam-loader/mem-bank.cpp b/tools/bam-loader/mem-bank.cpp
new file mode 100644
index 0000000..75d8eda
--- /dev/null
+++ b/tools/bam-loader/mem-bank.cpp
@@ -0,0 +1,477 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+
+extern "C" {
+#include "mem-bank.h"
+}
+
+#define USE_KMEMBANK 0
+
+#if USE_KMEMBANK
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/pagefile.h>
+#include <kfs/pmem.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+
+#define FRAG_CHUNK_SIZE (128)
+
+struct MemBank {
+    KMemBank *fragsOne;
+    KMemBank *fragsBoth;
+};
+
+static rc_t OpenMBankFile(KMemBank **const mbank, KDirectory *const dir, int const pid, char const *const suffix, size_t const climit)
+{
+    KFile *file = NULL;
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "frag_data%s.%u", suffix, pid);
+    
+    if (rc)
+        return rc;
+    
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, "%s", fname);
+    KDirectoryRemove(dir, 0, "%s", fname);
+    if (rc == 0) {
+        KPageFile *backing;
+        
+        rc = KPageFileMakeUpdate(&backing, file, climit, false);
+        KFileRelease(file);
+        if (rc == 0) {
+            rc = KMemBankMake(mbank, FRAG_CHUNK_SIZE, 0, backing);
+            KPageFileRelease(backing);
+        }
+    }
+    return rc;
+}
+
+static rc_t MemBank_Make(MemBank **rslt, KDirectory *const dir, int const pid, size_t const climits[2])
+{
+    KMemBank *fragsOne;
+    
+    rc_t rc = OpenMBankFile(&fragsOne, dir, pid, "One", climits[0]);
+    if (rc == 0) {
+        KMemBank *fragsBoth;
+        
+        rc = OpenMBankFile(&fragsBoth, dir, pid, "Both", climits[1]);
+        
+        if (rc == 0) {
+            MemBank *const self = reinterpret_cast<MemBank *>(malloc(sizeof(self)));
+
+            if (self) {
+                self->fragsOne = fragsOne;
+                self->fragsBoth = fragsBoth;
+
+                *rslt = self;
+                return 0;
+            }
+            rc = RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
+            KMemBankRelease(fragsBoth);
+        }
+        KMemBankRelease(fragsOne);
+    }
+    return rc;
+}
+
+void MemBank_Release(MemBank *const self)
+{
+    KMemBankRelease(self->fragsBoth);
+    KMemBankRelease(self->fragsOne);
+    free(self);
+}
+
+rc_t MemBank_Alloc(MemBank *const self, uint32_t *const Id, size_t const size, bool const clear, bool const longlived)
+{
+    uint64_t id = 0;
+    KMemBank *const mbank = longlived ? self->fragsOne : self->fragsBoth;
+    rc_t rc = KMemBankAlloc(mbank, &id, size, clear);
+    uint32_t const id_out = (uint32_t)((id << 1) + (longlived ? 1 : 0));
+
+    if ((uint64_t)id_out != ((id << 1) + (longlived ? 1 : 0))) {
+        PLOGMSG(klogFatal, (klogFatal, "membank '$(which)': id space overflow", longlived ? "fragsOne" : "fragsBoth"));
+        abort();
+    }
+    Id[0] = id_out;
+    return rc;
+}
+
+rc_t MemBank_Write(MemBank *const self, uint32_t const id, uint64_t const pos, void const *const buffer, size_t const size, size_t *const num_writ)
+{
+    uint64_t const myId = id >> 1;
+    bool const longlived = (id & 1) ? true : false;
+    KMemBank *const mbank = longlived ? self->fragsOne : self->fragsBoth;
+    
+    return KMemBankWrite(mbank, myId, pos, buffer, size, num_writ);
+}
+
+rc_t MemBank_Size(MemBank const *const self, uint32_t const id, size_t *const rslt)
+{
+    uint64_t const myId = id >> 1;
+    bool const longlived = (id & 1) ? true : false;
+    KMemBank const *const mbank = longlived ? self->fragsOne : self->fragsBoth;
+    uint64_t size;
+    rc_t const rc = KMemBankSize(mbank, myId, &size);
+    
+    *rslt = size;
+    return rc;
+}
+
+rc_t MemBank_Read(MemBank const *const self, uint32_t const id, uint64_t const pos, void *const buffer, size_t const bsize, size_t *const num_read)
+{
+    uint64_t const myId = id >> 1;
+    bool const longlived = (id & 1) ? true : false;
+    KMemBank *const mbank = longlived ? self->fragsOne : self->fragsBoth;
+
+    return KMemBankRead(mbank, myId, pos, buffer, bsize, num_read);
+}
+
+rc_t MemBank_Free(MemBank *const self, uint32_t const id)
+{
+    uint64_t const myId = id >> 1;
+    bool const longlived = (id & 1) ? true : false;
+    KMemBank *const mbank = longlived ? self->fragsOne : self->fragsBoth;
+
+    return KMemBankFree(mbank, myId);
+}
+
+#else
+
+#include <map>
+#include <set>
+#include <vector>
+#include <iostream>
+#include <stdexcept>
+#include <algorithm>
+
+class pmem
+{
+    struct allocation {
+        void *memory;
+        size_t size;
+        
+        allocation(int = 0) : memory(0), size(0) {}
+    };
+    typedef std::map<uint32_t, struct allocation> my_map_t;
+    typedef std::set<uint32_t> my_set_t;
+    my_map_t in_use;
+    my_set_t no_use;
+    my_map_t::size_type max_in_use;
+    my_set_t::size_type max_no_use;
+    my_map_t::size_type total_allocs;
+    my_map_t::size_type total_frees;
+    
+    void *get(uint32_t const id) const
+    {
+        my_map_t::const_iterator const i = in_use.find(id);
+        
+        if (i == in_use.end())
+            throw std::runtime_error("attempt to access invalid id");
+        
+        return i->second.memory;
+    }
+public:
+    pmem(int = 0)
+    : max_in_use(0)
+    , max_no_use(0)
+    , total_allocs(0)
+    , total_frees(0)
+    {}
+    ~pmem() {
+        my_map_t::iterator i;
+        
+        for (i = in_use.begin(); i != in_use.end(); ++i) {
+            free(i->second.memory);
+            ++total_frees;
+        }
+#if 0
+        std::cerr << "max. used: " << max_in_use << std::endl;
+        std::cerr << "max. free: " << max_no_use << std::endl;
+        std::cerr << "num alloc: " << total_allocs << std::endl;
+        std::cerr << "num frees: " << total_frees << std::endl;
+#endif
+    }
+    
+    void Write(uint32_t id, size_t const offset, size_t const size, void const *const data) const
+    {
+        if (offset + size <= this->Size(id)) {
+            char *dst = reinterpret_cast<char *>(get(id)) + offset;
+            char const *src = reinterpret_cast<char const *>(data);
+            
+            std::copy(src, src + size, dst);
+            return;
+        }
+        throw std::runtime_error("attempt to write more than was allocated");
+    }
+    uint32_t Alloc(size_t const size, bool const clear = true)
+    {
+        my_map_t::key_type new_key;
+        
+        if (no_use.begin() == no_use.end()) {
+            my_map_t::size_type const new_id = in_use.size() + 1;
+
+            if (max_in_use < new_id)
+                max_in_use = new_id;
+            
+            new_key = (my_map_t::key_type)new_id;
+            if (new_key < new_id)
+                throw std::runtime_error("pmem overflow");
+        }
+        else {
+            my_set_t::const_iterator const j = no_use.begin();
+            
+            new_key = *j;
+            no_use.erase(j);
+        }
+        my_map_t::iterator const i = in_use.insert(my_map_t::value_type(new_key, 0)).first;
+        
+        void *const alloc = calloc(1, size);
+        if (alloc) {
+            i->second.memory = alloc;
+            i->second.size = size;
+            
+            ++total_allocs;
+            return i->first;
+        }
+        throw std::bad_alloc();
+    }
+    void Free(uint32_t const id)
+    {
+        my_map_t::iterator const i = in_use.find(id);
+        
+        if (i == in_use.end())
+            throw std::runtime_error("attempt to free invalid id");
+        
+        void *const alloc = i->second.memory;
+
+        no_use.insert(id);
+        if (max_no_use < no_use.size())
+            max_no_use = no_use.size();
+
+        in_use.erase(i);
+        free(alloc);
+        ++total_frees;
+    }
+    size_t Size(uint32_t const id) const
+    {
+        my_map_t::const_iterator const i = in_use.find(id);
+        
+        if (i == in_use.end())
+            throw std::runtime_error("attempt to access invalid or freed id");
+        
+        return i->second.size;
+    }
+    void const *Read(uint32_t const id) const
+    {
+        return get(id);
+    }
+};
+
+rc_t MemBank_Make(MemBank **bank, struct KDirectory * = 0, int = 0, size_t const * = 0)
+{
+    try {
+        pmem *const rslt = new pmem;
+        
+        *bank = reinterpret_cast<MemBank *>(rslt);
+        return 0;
+    }
+    catch (std::bad_alloc const &e) {
+        return RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    catch (std::exception const &e) {
+        std::cout << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+
+void MemBank_Release(MemBank *const self)
+{
+    delete reinterpret_cast<pmem *>(self);
+}
+
+rc_t MemBank_Alloc(MemBank *const Self, uint32_t *const id, size_t const bytes, bool const clear, bool const longlived)
+{
+    try {
+        pmem *const self = reinterpret_cast<pmem *>(Self);
+        
+        *id = self->Alloc(bytes, clear);
+        return 0;
+    }
+    catch (std::bad_alloc const &e) {
+        return RC(rcApp, rcFile, rcAllocating, rcMemory, rcExhausted);
+    }
+    catch (std::exception const &e) {
+        std::cerr << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+
+rc_t MemBank_Write(MemBank *const Self, uint32_t const id, uint64_t const pos, void const *const buffer, size_t const bsize, size_t *const num_writ)
+{
+    try {
+        pmem *const self = reinterpret_cast<pmem *>(Self);
+        
+        *num_writ = 0;
+
+        size_t const size = self->Size((uint32_t)id);
+        
+        if (pos >= size)
+            return 0;
+        
+        size_t const actsize = (bsize + pos > size) ? (size - pos) : size;
+        
+        *num_writ = actsize;
+        self->Write(id, pos, actsize, buffer);
+        
+        return 0;
+    }
+    catch (std::exception const &e) {
+        std::cerr << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+
+rc_t MemBank_Size(MemBank const *const Self, uint32_t const id, size_t *const size)
+{
+    try {
+        pmem const *const self = reinterpret_cast<pmem const *>(Self);
+        
+        *size = self->Size(id);
+        return 0;
+    }
+    catch (std::exception const &e) {
+        std::cerr << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+
+rc_t MemBank_Read(MemBank const *const Self, uint32_t const id, uint64_t const pos, void *const buffer, size_t const bsize, size_t *const num_read)
+{
+    try {
+        pmem const *const self = reinterpret_cast<pmem const *>(Self);
+        
+        *num_read = 0;
+        
+        size_t const size = self->Size(id);
+        char const *data = reinterpret_cast<char const *>(self->Read(id)) + pos;
+        
+        if (pos >= size)
+            return 0;
+        
+        size_t const actsize = (bsize + pos > size) ? (size - pos) : size;
+        
+        *num_read = actsize;
+        
+        char *dst = reinterpret_cast<char *>(buffer);
+        std::copy(data, data + actsize, dst);
+        
+        return 0;
+    }
+    catch (std::exception const &e) {
+        std::cerr << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+
+rc_t MemBank_Free(MemBank *const Self, uint32_t const id)
+{
+    try {
+        pmem *const self = reinterpret_cast<pmem *>(Self);
+        
+        self->Free(id);
+        return 0;
+    }
+    catch (std::exception const &e) {
+        std::cerr << e.what() << std::endl;
+        abort();
+    }
+    catch (...) {
+        std::cout << "this is bad!" << std::endl;
+        abort();
+    }
+}
+#endif
+
+extern "C" {
+    rc_t MemBankMake(MemBank **bank, struct KDirectory *dir, int pid, size_t const climits[2])
+    {
+      return MemBank_Make(bank, dir, pid, climits);
+    }
+    
+    void MemBankRelease(MemBank *const self)
+    {
+        MemBank_Release(self);
+    }
+    
+    rc_t MemBankAlloc(MemBank *const Self, uint32_t *const id, size_t const bytes, bool const clear, bool const longlived)
+    {
+        return MemBank_Alloc(Self, id, bytes, clear, longlived);
+    }
+    
+    rc_t MemBankWrite(MemBank *const Self, uint32_t const id, uint64_t const pos, void const *const buffer, size_t const bsize, size_t *const num_writ)
+    {
+        return MemBank_Write(Self, id, pos, buffer, bsize, num_writ);
+    }
+    
+    rc_t MemBankSize(MemBank const *const Self, uint32_t const id, size_t *const size)
+    {
+        return MemBank_Size(Self, id, size);
+    }
+    
+    rc_t MemBankRead(MemBank const *const Self, uint32_t const id, uint64_t const pos, void *const buffer, size_t const bsize, size_t *const num_read)
+    {
+        return MemBank_Read(Self, id, pos, buffer, bsize, num_read);
+    }
+    
+    rc_t MemBankFree(MemBank *const Self, uint32_t const id)
+    {
+        return MemBank_Free(Self, id);
+    }
+}
+
diff --git a/tools/bam-loader/mem-bank.h b/tools/bam-loader/mem-bank.h
new file mode 100644
index 0000000..6d9257a
--- /dev/null
+++ b/tools/bam-loader/mem-bank.h
@@ -0,0 +1,41 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MemBank MemBank;
+
+rc_t MemBankMake(MemBank **rslt, struct KDirectory *dir, int pid, size_t const climits[2]);
+
+void MemBankRelease(MemBank *self);
+
+rc_t MemBankAlloc(MemBank *self, uint32_t *id, size_t size, bool clear, bool longlived);
+
+rc_t MemBankWrite(MemBank *self, uint32_t id, uint64_t pos, void const *buffer, size_t size, size_t *num_writ);
+
+rc_t MemBankSize(MemBank const *self, uint32_t id, size_t *rslt);
+
+rc_t MemBankRead(MemBank const *self, uint32_t id, uint64_t pos, void *buffer, size_t bsize, size_t *num_read);
+
+rc_t MemBankFree(MemBank *self, uint32_t id);
diff --git a/tools/bam-loader/quality-quantizer.cpp b/tools/bam-loader/quality-quantizer.cpp
new file mode 100644
index 0000000..5a3eea8
--- /dev/null
+++ b/tools/bam-loader/quality-quantizer.cpp
@@ -0,0 +1,107 @@
+#include "quality-quantizer.hpp"
+#include <cctype>
+
+static void setLookupTable(int tbl[256], int const value, unsigned const start = 0, unsigned const end = 256)
+{
+    for (unsigned i = start; i < end; ++i) {
+        tbl[i] = value;
+    }
+}
+
+static void clearLookupTable(int tbl[256])
+{
+    setLookupTable(tbl, -1);
+}
+
+static bool initLookupTable(int tbl[256], char const quant[])
+{
+    unsigned i = 0;
+    unsigned limit = 0;
+    int value = -1;
+    int ws = 1;
+    int st = 0;
+    
+    clearLookupTable(tbl);
+    for (unsigned cur = 0; quant[cur] != 0; ++cur) {
+        int const ch = quant[cur];
+        
+        if (ws) {
+            if (isspace(ch))
+                continue;
+            ws = false;
+        }
+        switch (st) {
+        case 0:
+            if (isdigit(ch)) {
+                value = (value * 10) + ch - '0';
+                break;
+            }
+            else if (isspace(ch)) {
+                ++st;
+                ws = true;
+                break;
+            }
+            ++st;
+            /* no break */
+        case 1:
+            if (ch != ':')
+                return false;
+            ws = true;
+            ++st;
+            break;
+        case 2:
+            if (isdigit(ch)) {
+                limit  = (limit * 10) + ch - '0';
+                break;
+            }
+            else if (isspace(ch)) {
+                ++st;
+                ws = true;
+                break;
+            }
+            else if (ch == '-' && limit == 0) {
+                setLookupTable(tbl, value, i);
+                return true;
+            }
+            ++st;
+            /* no break */
+        case 3:
+            if (ch != ',')
+                return false;
+            ws = true;
+            st = 0;
+            if (i > limit)
+                return false;
+            setLookupTable(tbl, value, i, limit);
+            i = limit;
+            limit = value = 0;
+            break;
+        }
+    }
+    if (st == 0) {
+        switch (value) {
+        case 0:
+            for (unsigned i = 0; i < 256; ++i) {
+                tbl[i] = i;
+            }
+            return true;
+        case 1:
+            setLookupTable(tbl,  1,  0, 10);
+            setLookupTable(tbl, 10, 10, 20);
+            setLookupTable(tbl, 20, 20, 30);
+            setLookupTable(tbl, 30, 30);
+            return true;
+        case 2:
+            setLookupTable(tbl,  1,  0, 30);
+            setLookupTable(tbl, 30, 30);
+            return true;
+        }
+    }
+    return false;
+}
+
+QualityQuantizer::QualityQuantizer(char const spec[])
+{
+    if (!initLookupTable(lookup, spec))
+        clearLookupTable(lookup);
+}
diff --git a/tools/bam-loader/quality-quantizer.hpp b/tools/bam-loader/quality-quantizer.hpp
new file mode 100644
index 0000000..1135a13
--- /dev/null
+++ b/tools/bam-loader/quality-quantizer.hpp
@@ -0,0 +1,10 @@
+#include <cstdint>
+
+class QualityQuantizer {
+    int lookup[256];
+public:
+    QualityQuantizer(char const spec[]);
+    int quantize(int const value) const {
+        return (0 <= value && value < 256) ? lookup[value] : -1;
+    }
+};
diff --git a/tools/bam-loader/reference-writer.c b/tools/bam-loader/reference-writer.c
new file mode 100644
index 0000000..c35ebd6
--- /dev/null
+++ b/tools/bam-loader/reference-writer.c
@@ -0,0 +1,615 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <kapp/main.h> /* for Quitting */
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-refseq.h>
+
+#include "reference-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#define SORTED_OPEN_TABLE_LIMIT (2)
+/*#define SORTED_CACHE_SIZE ((2 * 1024 * 1024)/(SORTED_OPEN_TABLE_LIMIT)) TODO: use line below until switch to unsorted is fixed */
+#define SORTED_CACHE_SIZE (350 * 1024 * 1024)
+
+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+#define UNSORTED_OPEN_TABLE_LIMIT (8)
+#define UNSORTED_CACHE_SIZE ((1024 * 1024 * 1024)/(UNSORTED_OPEN_TABLE_LIMIT))
+#else
+#define UNSORTED_OPEN_TABLE_LIMIT (255)
+#define UNSORTED_CACHE_SIZE (350 * 1024 * 1024)
+#endif
+
+#if _DEBUGGING
+#define DUMP_CONFIG 1
+#endif
+
+struct overlap_s {
+    uint32_t min; /* minimum start pos of any alignment that ends in this chunk */
+    uint32_t max; /* maximum end pos of any alignment that starts before this chunk and ends in this chunk */
+};
+
+struct s_reference_info {
+    unsigned name;          /* offset of start of name in ref_names */
+    unsigned id;
+    unsigned lastOffset;
+};
+
+extern void ReferenceMgr_DumpConfig(ReferenceMgr const *const self);
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db)
+{
+    rc_t rc;
+    size_t const cache = G.expectUnsorted ? UNSORTED_CACHE_SIZE : SORTED_CACHE_SIZE;
+    unsigned const open_count = G.expectUnsorted ? UNSORTED_OPEN_TABLE_LIMIT : SORTED_OPEN_TABLE_LIMIT;
+    
+    memset(self, 0, sizeof(*self));
+    
+    self->coverage.elem_bits = self->mismatches.elem_bits = self->indels.elem_bits = 32;
+    self->pri_align.elem_bits = self->sec_align.elem_bits = 64;
+    self->pri_overlap.elem_bits = self->sec_overlap.elem_bits = sizeof(struct overlap_s) * 8;
+    self->ref_names.elem_bits = 8;
+    self->ref_info.elem_bits = 8 * sizeof(struct s_reference_info);
+    
+    rc = ReferenceMgr_Make(&self->mgr, db, mgr, ewrefmgr_co_Coverage,
+                           G.refXRefPath, G.inpath,
+                           G.maxSeqLen, cache, open_count);
+    if (rc == 0) {
+        unsigned i;
+        
+        for (i = 0; G.refFiles[i]; ++i) {
+            rc = ReferenceMgr_FastaPath(self->mgr, G.refFiles[i]);
+            if (rc) {
+                (void)PLOGERR(klogWarn, (klogWarn, rc, "fasta file '$(file)'", "file=%s", G.refFiles[i]));
+                break;
+            }
+        }
+#if DUMP_CONFIG
+        if (rc == 0) {
+            ReferenceMgr_DumpConfig(self->mgr);
+        }
+#endif
+    }
+    return rc;
+}
+
+static
+rc_t Unsorted(Reference *self) {
+    if (G.requireSorted) {
+        rc_t const rc = RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+        (void)LOGERR(klogWarn, rc, "Alignments are unsorted");
+        return rc;
+    }
+    /* do not ever change this message */
+    (void)LOGMSG(klogWarn, "Alignments are unsorted");
+
+    self->out_of_order = true;
+    
+    ReferenceMgr_SetCache(self->mgr, UNSORTED_CACHE_SIZE, UNSORTED_OPEN_TABLE_LIMIT);
+    
+    KDataBufferWhack(&self->sec_align);
+    KDataBufferWhack(&self->pri_align);
+    KDataBufferWhack(&self->mismatches);
+    KDataBufferWhack(&self->indels);
+    KDataBufferWhack(&self->coverage);
+    KDataBufferWhack(&self->pri_overlap);
+    KDataBufferWhack(&self->sec_overlap);
+
+    return 0;
+}
+
+#define BAIL_ON_FAIL(STMT) do { rc_t const rc__ = (STMT); if (rc__) return rc__; } while(0)
+
+static rc_t FlushBuffers(Reference *self, unsigned upto, bool full, bool final)
+{
+    if (!self->out_of_order && upto > 0) {
+        unsigned offset = 0;
+        unsigned *const miss = (unsigned *)self->mismatches.base;
+        unsigned *const indel = (unsigned *)self->indels.base;
+        unsigned *const cov = (unsigned *)self->coverage.base;
+        struct overlap_s *const pri_overlap = (struct overlap_s *)self->pri_overlap.base;
+        struct overlap_s *const sec_overlap = (struct overlap_s *)self->sec_overlap.base;
+        unsigned chunk = 0;
+        
+        while ((self->curPos + offset + (full ? 0 : G.maxSeqLen)) <= upto) {
+            ReferenceSeqCoverage data;
+            unsigned const curPos = self->curPos + offset;
+            unsigned const n = self->endPos > (curPos + G.maxSeqLen) ?
+                               G.maxSeqLen : (self->endPos - curPos);
+            unsigned const m = curPos + n > upto ? upto - curPos : n;
+            unsigned i;
+            unsigned hi;
+            unsigned lo;
+            
+            if (n == 0) break;
+            
+            memset(&data, 0, sizeof(data));
+            
+            data.ids[ewrefcov_primary_table].elements = self->pri_align.elem_count;
+            data.ids[ewrefcov_primary_table].buffer = self->pri_align.base;
+            data.overlap_ref_pos[ewrefcov_primary_table] = pri_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_primary_table] = pri_overlap[chunk].max ? pri_overlap[chunk].max - curPos : 0;
+            
+            data.ids[ewrefcov_secondary_table].elements = self->sec_align.elem_count;
+            data.ids[ewrefcov_secondary_table].buffer = self->sec_align.base;
+            data.overlap_ref_pos[ewrefcov_secondary_table] = sec_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_secondary_table] = sec_overlap[chunk].max ? sec_overlap[chunk].max - curPos : 0;
+            
+            for (hi = 0, lo = UINT_MAX, i = 0; i != m; ++i) {
+                unsigned const coverage = cov[offset + i];
+                
+                if (hi < coverage)
+                    hi = coverage;
+                if (lo > coverage)
+                    lo = coverage;
+            }
+            data.low  = lo > 255 ? 255 : lo;
+            data.high = hi > 255 ? 255 : hi;
+            
+            for (i = 0; i != m; ++i)
+                data.mismatches += miss[offset + i];
+
+            for (i = 0; i != m; ++i)
+                data.indels += indel[offset + i];
+            
+            {
+                rc_t rc = ReferenceSeq_AddCoverage(self->rseq, curPos, &data);
+                
+                if (rc) {
+                    return Unsorted(self);
+                }
+            }
+            
+            KDataBufferResize(&self->pri_align, 0);
+            KDataBufferResize(&self->sec_align, 0);
+            offset += n;
+            ++chunk;
+        }
+        if (!final && offset > 0) {
+            unsigned const newChunkCount = (unsigned)self->pri_overlap.elem_count - chunk;
+            unsigned const newBaseCount = self->endPos - self->curPos - offset;
+            
+            memmove(self->pri_overlap.base, pri_overlap + chunk, newChunkCount * sizeof(pri_overlap[0]));
+            memmove(self->sec_overlap.base, sec_overlap + chunk, newChunkCount * sizeof(sec_overlap[0]));
+            memmove(self->mismatches.base, miss + offset, newBaseCount * sizeof(miss[0]));
+            memmove(self->indels.base, indel + offset, newBaseCount * sizeof(indel[0]));
+            memmove(self->coverage.base, cov + offset, newBaseCount * sizeof(cov[0]));
+
+            KDataBufferResize(&self->pri_overlap, newChunkCount);
+            KDataBufferResize(&self->sec_overlap, newChunkCount);
+            
+            self->curPos += offset;
+        }
+    }
+    return 0;
+}
+
+static int str__cmp(char const A[], char const B[])
+{
+    unsigned i;
+    
+    for (i = 0; ; ++i) {
+        int const a = A[i];
+        int const b = B[i];
+        
+        if (a != b)
+            return a - b;
+        if (a == 0)
+            return 0;
+    }
+}
+
+static int str__equal(char const A[], char const B[])
+{
+    unsigned i;
+    
+    for (i = 0; ; ++i) {
+        int const a = A[i];
+        int const b = B[i];
+        
+        if (a != b)
+            return 0;
+        if (a == 0)
+            return 1;
+    }
+}
+
+static unsigned str__len(char const A[])
+{
+    unsigned i;
+    
+    for (i = 0; ; ++i) {
+        int const a = A[i];
+        
+        if (a == 0)
+            return i;
+    }
+}
+
+static unsigned bsearch_name(char const qry[], char const names[],
+                             unsigned const count,
+                             struct s_reference_info const refInfo[],
+                             int found[])
+{
+    unsigned f = 0;
+    unsigned e = count;
+    
+    while (f < e) {
+        unsigned const m = f + ((e - f) >> 1);
+        char const *const name = &names[refInfo[m].name];
+        int const diff = str__cmp(qry, name);
+        
+        if (diff < 0)
+            e = m;
+        else if (diff > 0)
+            f = m + 1;
+        else {
+            found[0] = 1;
+            return m;
+        }
+    }
+    return f;
+}
+
+static struct s_reference_info s_reference_info_make(unsigned const name, unsigned const id)
+{
+    struct s_reference_info rslt;
+    
+    rslt.name = name;
+    rslt.id = id;
+    rslt.lastOffset = 0;
+    
+    return rslt;
+}
+
+static unsigned GetLastOffset(Reference const *const self)
+{
+    if (self->last_id < self->ref_info.elem_count) {
+        struct s_reference_info const *const refInfoBase = self->ref_info.base;
+        return refInfoBase[self->last_id].lastOffset;
+    }
+    return 0;
+}
+
+static void SetLastOffset(Reference *const self, unsigned const newValue)
+{
+    if (self->last_id < self->ref_info.elem_count) {
+        struct s_reference_info *const refInfoBase = self->ref_info.base;
+        refInfoBase[self->last_id].lastOffset = newValue;
+    }
+}
+
+rc_t ReferenceSetFile(Reference *const self, char const id[],
+                      uint64_t const length, uint8_t const md5[16],
+                      bool *const shouldUnmap,
+                      bool *const wasRenamed)
+{
+    ReferenceSeq const *rseq;
+    int found = 0;
+    unsigned at = 0;
+
+    if (self->last_id < self->ref_info.elem_count) {
+        struct s_reference_info const *const refInfoBase = self->ref_info.base;
+        struct s_reference_info const refInfo = refInfoBase[self->last_id];
+        char const *const nameBase = self->ref_names.base;
+        char const *const last = nameBase + refInfo.id;
+        
+        if (str__equal(id, last)) {
+            return 0;
+        }
+    }
+
+    BAIL_ON_FAIL(FlushBuffers(self, self->length, true, true));
+    BAIL_ON_FAIL(ReferenceMgr_GetSeq(self->mgr, &rseq, id, shouldUnmap, G.allowMultiMapping, wasRenamed));
+    
+    self->rseq = rseq;
+
+    at = bsearch_name(id, self->ref_names.base, self->ref_info.elem_count, self->ref_info.base, &found);
+    if (!found) {
+        unsigned const len = str__len(id);
+        unsigned const name_at = self->ref_names.elem_count;
+        unsigned const id_at = name_at;
+        struct s_reference_info const new_elem = s_reference_info_make(name_at, id_at);
+        rc_t const rc = KDataBufferResize(&self->ref_names, name_at + len + 1);
+        
+        if (rc)
+            return rc;
+        else {
+            unsigned const count = (unsigned)self->ref_info.elem_count;
+            rc_t const rc = KDataBufferResize(&self->ref_info, count + 1);
+            struct s_reference_info *const refInfoBase = self->ref_info.base;
+            
+            if (rc)
+                return rc;
+            
+            memmove(((char *)self->ref_names.base) + name_at, id, len + 1);
+            memmove(refInfoBase + at + 1, refInfoBase + at, (count - at) * sizeof(*refInfoBase));
+            refInfoBase[at] = new_elem;
+        }
+        (void)PLOGMSG(klogInfo, (klogInfo, "Processing Reference '$(id)'", "id=%s", id));
+        if (*wasRenamed) {
+            char const *actid = NULL;
+            ReferenceSeq_GetID(rseq, &actid);
+            (void)PLOGMSG(klogInfo, (klogInfo, "Reference '$(id)' was renamed to '$(actid)'", "id=%s,actid=%s", id, actid));
+        }
+    }
+    else if (!self->out_of_order)
+        Unsorted(self);
+        
+    self->last_id = at;
+    self->curPos = self->endPos = 0;
+    self->length = (unsigned)length;
+    KDataBufferResize(&self->pri_overlap, 0);
+    KDataBufferResize(&self->sec_overlap, 0);
+
+    return 0;
+}
+
+rc_t ReferenceVerify(Reference const *const self,
+                     char const id[],
+                     uint64_t const length,
+                     uint8_t const md5[16])
+{
+    bool wasRenamed = false;
+    return ReferenceMgr_Verify(self->mgr, id, (unsigned)length, md5, G.allowMultiMapping, &wasRenamed);
+}
+
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[])
+{
+    ReferenceSeq const *rseq;
+    bool shouldUnmap = false;
+    bool wasRenamed = false;
+    rc_t rc = ReferenceMgr_GetSeq(self->mgr, &rseq, refName, &shouldUnmap, G.allowMultiMapping, &wasRenamed);
+
+    if( rc == 0 ) {
+        rc = ReferenceSeq_Get1stRow(rseq, refID);
+        ReferenceSeq_Release(rseq);
+    }
+    return rc;
+}
+
+static
+rc_t ReferenceAddCoverage(Reference *const self,
+                          unsigned const refStart,
+                          unsigned const refLength,
+                          uint32_t const mismatches,
+                          uint32_t const indels,
+                          bool const isPrimary
+                          )
+{
+    unsigned const refEnd = refStart + refLength;
+
+    if (refEnd > self->endPos || self->endPos == 0) {
+        unsigned const t1 = refEnd + (G.maxSeqLen - 1);
+        unsigned const adjust = t1 % G.maxSeqLen;
+        unsigned const t2 = t1 - adjust;
+        unsigned const newEndPos = t2 != 0 ? t2 : G.maxSeqLen;
+        unsigned const baseCount = self->endPos - self->curPos;
+        unsigned const newBaseCount = newEndPos - self->curPos;
+
+        BAIL_ON_FAIL(KDataBufferResize(&self->coverage, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->mismatches, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->indels, newBaseCount));
+        
+        memset(&((unsigned *)self->coverage.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->mismatches.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->indels.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        self->endPos = newEndPos;
+    }
+    if ((refEnd - self->curPos) / G.maxSeqLen >= self->pri_overlap.elem_count) {
+        unsigned const chunks = (refEnd - self->curPos) / G.maxSeqLen + 1;
+        unsigned const end = (unsigned)self->pri_overlap.elem_count;
+        
+        BAIL_ON_FAIL(KDataBufferResize(&self->pri_overlap, chunks));
+        BAIL_ON_FAIL(KDataBufferResize(&self->sec_overlap, chunks));
+        
+        memset(&((struct overlap_s *)self->pri_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+        memset(&((struct overlap_s *)self->sec_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+    }
+    BAIL_ON_FAIL(FlushBuffers(self, refStart, false, false));
+    if (!self->out_of_order) {
+        unsigned const startBase = refStart - self->curPos;
+        unsigned const endChunk = (startBase + refLength) / G.maxSeqLen;
+        KDataBuffer *const overlapBuffer = isPrimary ? &self->pri_overlap : &self->sec_overlap;
+        unsigned *const cov = &((unsigned *)self->coverage.base)[startBase];
+        unsigned i;
+        
+        ((unsigned *)self->mismatches.base)[startBase] += mismatches;
+        ((unsigned *)self->indels.base)[startBase] += indels;
+        
+        if (((struct overlap_s *)overlapBuffer->base)[endChunk].min == 0 || 
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min > refStart)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min = refStart;
+        }
+        if (endChunk != 0 &&
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max < refStart + refLength)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max = refStart + refLength;
+        }
+        
+        for (i = 0; i != refLength; ++i) {
+            if (cov[i] < UINT_MAX)
+                ++cov[i];
+        }
+    }
+    return 0;
+}
+
+static void GetCounts(AlignmentRecord const *data, unsigned const seqLen,
+                      unsigned *const nMatch,
+                      unsigned *const nMiss,
+                      unsigned *const nIndels)
+{
+    bool const *const has_mismatch = data->data.has_mismatch.buffer;
+    bool const *const has_offset = data->data.has_ref_offset.buffer;
+    int32_t const *const ref_offset = data->data.ref_offset.buffer;
+    uint8_t const *const ref_offset_type = data->data.ref_offset_type.buffer;
+    unsigned misses = 0;
+    unsigned matchs = 0;
+    unsigned insert = 0;
+    unsigned delete = 0;
+    unsigned j = 0;
+    unsigned i;
+    
+    for (i = 0; i < seqLen; ) {
+        if (has_offset[i]) {
+            int const offs = ref_offset[j];
+            int const type = ref_offset_type[j];
+            
+            ++j;
+            if (type == 0) {
+                if (offs < 0)
+                    ++insert;
+                else
+                    ++delete;
+            }
+            if (offs < 0) {
+                i += (unsigned)(-offs);
+                continue;
+            }
+        }
+        if (has_mismatch[i])
+            ++misses;
+        else
+            ++matchs;
+        ++i;
+    }
+    *nMatch = matchs;
+    *nMiss  = misses;
+    *nIndels = insert + delete;
+}
+
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+                   uint32_t const rawCigar[], uint32_t const cigCount,
+                   char const seqDNA[], uint32_t const seqLen,
+                   uint8_t rna_orient, uint32_t *matches, uint32_t *misses)
+{
+    unsigned nmis = 0;
+    unsigned nmatch = 0;
+    unsigned indels = 0;
+       
+    *matches = 0;
+    BAIL_ON_FAIL(ReferenceSeq_Compress(self->rseq,
+                                       (G.acceptHardClip ? ewrefmgr_co_AcceptHardClip : 0) + ewrefmgr_cmp_Binary,
+                                       (INSDC_coord_len)pos,
+                                       seqDNA, seqLen,
+                                       rawCigar, cigCount,
+                                       0, NULL, 0, 0, NULL, 0,
+                                       rna_orient,
+                                       &data->data));
+
+    GetCounts(data, seqLen, &nmatch, &nmis, &indels);
+    *matches = nmatch;
+	*misses  = nmis;
+/* removed before more comlete implementation - EY 
+    if (!G.acceptNoMatch && data->data.ref_len == 0)
+        return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+***********************/
+    
+    if (!self->out_of_order && pos < GetLastOffset(self)) {
+        return Unsorted(self);
+    }
+    if (!self->out_of_order) {
+        SetLastOffset(self, data->data.effective_offset);
+        
+        /* if (G.acceptNoMatch || nmatch >= G.minMatchCount)    --- removed before more comlete implementation - EY ***/
+            return ReferenceAddCoverage(self, data->data.effective_offset,
+                                        data->data.ref_len, nmis, indels,
+                                        data->isPrimary);
+       /* else return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated); --- removed before more comlete implementation - EY ***/
+    }
+    return 0;
+}
+
+static rc_t IdVecAppend(KDataBuffer *vec, uint64_t id)
+{
+    uint64_t const end = vec->elem_count;
+    
+    BAIL_ON_FAIL(KDataBufferResize(vec, end + 1));
+    ((uint64_t *)vec->base)[end] = id;
+    return 0;
+}
+
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         )
+{
+    if (self->out_of_order)
+        return 0;
+    return IdVecAppend(is_primary ? &self->pri_align : &self->sec_align, align_id);
+}
+
+rc_t ReferenceWhack(Reference *self, bool commit)
+{
+    rc_t rc = 0;
+    
+    if (self) {
+#if DUMP_CONFIG
+        if (self->mgr)
+            ReferenceMgr_DumpConfig(self->mgr);
+#endif
+        if (commit) {
+            rc = FlushBuffers(self, self->length, true, true);
+            if (rc != 0)
+                commit = false;
+        }
+        KDataBufferWhack(&self->sec_align);
+        KDataBufferWhack(&self->pri_align);
+        KDataBufferWhack(&self->mismatches);
+        KDataBufferWhack(&self->indels);
+        KDataBufferWhack(&self->coverage);
+        KDataBufferWhack(&self->pri_overlap);
+        KDataBufferWhack(&self->sec_overlap);
+        KDataBufferWhack(&self->ref_names);
+        KDataBufferWhack(&self->ref_info);
+        if (self->rseq)
+            rc = ReferenceSeq_Release(self->rseq);
+        if (self->out_of_order) {
+            (void)LOGMSG(klogInfo, "Starting coverage calculation");
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, true, Quitting);
+        }
+        else {
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, false, Quitting);
+        }
+    }
+    return rc;
+}
diff --git a/tools/bam-loader/reference-writer.h b/tools/bam-loader/reference-writer.h
new file mode 100644
index 0000000..2946c82
--- /dev/null
+++ b/tools/bam-loader/reference-writer.h
@@ -0,0 +1,76 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_REFERENCE_WRITER_H_
+#define BAM_LOAD_REFERENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <klib/data-buffer.h>
+
+#include <align/writer-reference.h>
+#include "alignment-writer.h"
+
+typedef struct s_reference {
+    const ReferenceMgr *mgr;
+    const ReferenceSeq *rseq;
+    int64_t lastRefId;
+    unsigned curPos;
+    unsigned endPos;
+    unsigned length;
+    unsigned last_id;            /* == ref_info.elem_count if no last id */
+
+    KDataBuffer coverage;
+    KDataBuffer mismatches;
+    KDataBuffer indels;
+    KDataBuffer pri_align;
+    KDataBuffer sec_align;
+    KDataBuffer pri_overlap;
+    KDataBuffer sec_overlap;
+    KDataBuffer ref_names;
+    KDataBuffer ref_info;
+
+    bool out_of_order;
+} Reference;
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db);
+rc_t ReferenceSetFile(Reference *self, char const id[],
+                      uint64_t length, uint8_t const md5[16],
+                      bool *shouldUnmap,
+                      bool *wasRenamed);
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[]);
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         );
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t pos,
+                   uint32_t const rawCigar[], uint32_t cigCount,
+                   char const seqDNA[], uint32_t seqLen,
+                   uint8_t rna_orient, uint32_t *matches, uint32_t *misses);
+rc_t ReferenceWhack(Reference *self, bool commit);
+
+#endif
diff --git a/tools/bam-loader/samview.c b/tools/bam-loader/samview.c
new file mode 100644
index 0000000..44fed67
--- /dev/null
+++ b/tools/bam-loader/samview.c
@@ -0,0 +1,104 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "bam.h"
+
+#include <klib/rc.h>
+
+static void writeHeader(BAM_File const *const bam)
+{
+    char const *header = NULL;
+    size_t hsize = 0;
+
+    BAM_FileGetHeaderText(bam, &header, &hsize);
+    fwrite(header, 1, hsize, stdout);
+}
+
+static rc_t writeSAM(BAM_Alignment const *const rec)
+{
+    static char buffer[64*1024];
+    size_t actsize = 0;
+    rc_t const rc = BAM_AlignmentFormatSAM(rec, &actsize, sizeof(buffer), buffer);
+
+    if (rc == 0)
+        fwrite(buffer, 1, actsize, stdout);
+
+    return rc;
+}
+
+static
+void samview(char const path[])
+{
+    BAM_File const *bam = NULL;
+    rc_t rc = BAM_FileMake(&bam, NULL, NULL, path);
+
+    if (rc == 0) {
+        BAM_Alignment const *rec = NULL;
+
+        writeHeader(bam);
+        while ((rc = BAM_FileRead2(bam, &rec)) == 0) {
+            rc_t const rc2 = writeSAM(rec);
+            BAM_AlignmentRelease(rec);
+            if (rc2)
+                break;
+        }
+        BAM_FileRelease(bam);
+        if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+            rc = 0;
+    }
+    if (rc)
+        LOGERR(klogWarn, rc, "Final RC");
+}
+
+rc_t CC UsageSummary(char const *name)
+{
+    return 0;
+}
+
+rc_t CC Usage(Args const *args)
+{
+    return 0;
+}
+
+rc_t CC KMain(int argc, char *argv[])
+{
+    if (argc == 1) {
+        samview("/dev/stdin");
+        return 0;
+    }
+    while (--argc) {
+        samview(*++argv);
+    }
+    return 0;
+}
diff --git a/tools/bam-loader/sequence-writer.c b/tools/bam-loader/sequence-writer.c
new file mode 100644
index 0000000..b951290
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.c
@@ -0,0 +1,497 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include "Globals.h"
+#include <align/writer-sequence.h>
+#include "sequence-writer.h"
+
+/* MARK: Sequence Object */
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db) {
+    memset(self, 0, sizeof(*self));
+    self->db = db;
+    VDatabaseAddRef(db);
+    return self;
+}
+
+static rc_t getTable(Sequence *self, bool color)
+{
+    int const options = (color ? ewseq_co_ColorSpace : 0)
+                      | (G.hasTI ? ewseq_co_TI : 0)
+                      | (G.globalMode == mode_Remap ? (ewseq_co_SaveRead | ewseq_co_KeepKey) : 0)
+                      | ewseq_co_NoLabelData
+                      | ewseq_co_SpotGroup;
+
+    if (self->tbl) return 0;
+
+    return TableWriterSeq_Make(&self->tbl, self->db,
+                               options,
+                               G.QualQuantizer);
+}
+
+static rc_t writeRecordX(Sequence *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform
+                         )
+{
+    rc_t rc = 0;
+    uint8_t nreads = rec->numreads;
+    unsigned i;
+    unsigned seqLen;
+    int64_t dummyRowId;
+
+    uint8_t readInfo[4096];
+    void *h_readInfo = NULL;
+
+    INSDC_coord_zero *readStart = (void *)readInfo;
+    INSDC_coord_len *readLen;
+    uint8_t *alcnt;
+    INSDC_SRA_xread_type *readType;
+    INSDC_SRA_read_filter *readFilter;
+    bool *mask = NULL;
+    size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+                          + sizeof(readStart[0]) + sizeof(readLen[0])
+                          + sizeof(readFilter[0]);
+
+    TableWriterSeqData data;
+
+    assert(G.mode == mode_Archive);
+
+    for (i = seqLen = 0; i != nreads; ++i) {
+        seqLen += rec->readLen[i];
+    }
+
+    if (nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+    {
+        h_readInfo = malloc(nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]));
+        if (h_readInfo == NULL)
+            return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+        readStart = h_readInfo;
+    }
+    readLen = (INSDC_coord_len *)&readStart[nreads];
+    alcnt = (uint8_t *)&readLen[nreads];
+    readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+    readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+
+    if (G.keepMismatchQual) {
+        mask = (bool *)&readFilter[nreads];
+
+        for (i = 0; i != seqLen; ++i) {
+            mask[i] = (rec->qual[i] & 0x80) != 0;
+        }
+    }
+
+    for (i = 0; i != nreads; ++i) {
+        int const count = rec->aligned[i] ? 1 : 0;
+        int const len = rec->readLen[i];
+        int const start = rec->readStart[i];
+        int const type = len == 0 ? SRA_READ_TYPE_TECHNICAL : SRA_READ_TYPE_BIOLOGICAL;
+        int const dir = len == 0 ? 0 : rec->orientation[i] ? SRA_READ_TYPE_REVERSE : SRA_READ_TYPE_FORWARD;
+        int const filter = isDup ? SRA_READ_FILTER_CRITERIA : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+
+        alcnt[i] = count;
+        readLen[i] = len;
+        readStart[i] = start;
+        readType[i] = type | dir;
+        readFilter[i] = filter;
+    }
+
+    memset(&data, 0, sizeof(data));
+
+    data.sequence.buffer = rec->seq;
+    data.sequence.elements = seqLen;
+
+    data.quality.buffer = rec->qual;
+    data.quality.elements = seqLen;
+
+    if (G.keepMismatchQual) {
+        data.no_quantize_mask.buffer = mask;
+        data.no_quantize_mask.elements = seqLen;
+    }
+
+    data.alignment_count.buffer = alcnt;
+    data.alignment_count.elements = nreads;
+
+    data.nreads = nreads;
+
+    data.read_type.buffer = readType;
+    data.read_type.elements = nreads;
+
+    data.read_start.buffer = readStart;
+    data.read_start.elements = nreads;
+
+    data.read_len.buffer = readLen;
+    data.read_len.elements = nreads;
+
+    data.tmp_key_id = rec->keyId;
+
+    data.spot_group.buffer = rec->spotGroup;
+    data.spot_group.elements = rec->spotGroupLen;
+
+    data.cskey.buffer = rec->cskey;
+    data.cskey.elements = nreads;
+
+    data.read_filter.buffer = readFilter;
+    data.read_filter.elements = nreads;
+
+    data.platform.buffer = &platform;
+    data.platform.elements = 1;
+
+    data.ti.buffer = rec->ti;
+    data.ti.elements = nreads;
+
+    if (!G.no_real_output) {
+        rc = getTable(self, color);
+        if (rc == 0) {
+            rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+        }
+    }
+
+    if (h_readInfo)
+        free(h_readInfo);
+
+    return rc;
+}
+
+static unsigned totalSequenceLength(SequenceRecord const *const rec)
+{
+    unsigned const nreads = rec->numreads;
+    unsigned rslt = 0;
+    unsigned i;
+
+    for (i = 0; i < nreads; ++i)
+        rslt += rec->readLen[i];
+
+    return rslt;
+}
+
+static rc_t writeRecord2(Sequence *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform
+                         )
+{
+    INSDC_SRA_xread_type readType[2];
+    INSDC_SRA_read_filter readFilter[2];
+    uint8_t alcnt[2];
+
+    rc_t rc = 0;
+    unsigned const nreads = rec->numreads;
+    unsigned const seqLen = totalSequenceLength(rec);
+    unsigned i;
+    bool fullyUnaligned = true;
+
+    TableWriterSeqData data;
+
+    assert(G.mode == mode_Archive);
+
+    for (i = 0; i != nreads; ++i) {
+        int const count = rec->aligned[i] ? 1 : 0;
+        int const len = rec->readLen[i];
+        int const type = len == 0 ? SRA_READ_TYPE_TECHNICAL : SRA_READ_TYPE_BIOLOGICAL;
+        int const dir = len == 0 ? 0 : rec->orientation[i] ? SRA_READ_TYPE_REVERSE : SRA_READ_TYPE_FORWARD;
+        int const filter = isDup ? SRA_READ_FILTER_CRITERIA : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+
+        if (rec->aligned[i])
+            fullyUnaligned = false;
+        alcnt[i] = count;
+        readType[i] = type | dir;
+        readFilter[i] = filter;
+    }
+
+    memset(&data, 0, sizeof(data));
+
+    data.sequence.buffer = rec->seq;
+    data.sequence.elements = seqLen;
+
+    data.quality.buffer = rec->qual;
+    data.quality.elements = seqLen;
+
+    data.alignment_count.buffer = alcnt;
+    data.alignment_count.elements = nreads;
+
+    data.nreads = nreads;
+
+    data.read_type.buffer = readType;
+    data.read_type.elements = nreads;
+
+    data.read_start.buffer = rec->readStart;
+    data.read_start.elements = nreads;
+
+    data.read_len.buffer = rec->readLen;
+    data.read_len.elements = nreads;
+
+    data.tmp_key_id = rec->keyId;
+
+    data.spot_group.buffer = rec->spotGroup;
+    data.spot_group.elements = rec->spotGroupLen;
+
+    data.cskey.buffer = rec->cskey;
+    data.cskey.elements = nreads;
+
+    data.read_filter.buffer = readFilter;
+    data.read_filter.elements = nreads;
+
+    data.platform.buffer = &platform;
+    data.platform.elements = 1;
+
+    data.ti.buffer = rec->ti;
+    data.ti.elements = nreads;
+
+    if (fullyUnaligned && rec->linkageGroup && rec->linkageGroupLen > 0) {
+        data.linkageGroup.buffer = rec->linkageGroup;
+        data.linkageGroup.elements = rec->linkageGroupLen;
+    }
+    if (!G.no_real_output) {
+        rc = getTable(self, color);
+        if (rc == 0) {
+            int64_t dummyRowId;
+            rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+        }
+    }
+
+    return rc;
+}
+
+rc_t SequenceWriteRecord(Sequence *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform
+                         )
+{
+    if (rec->numreads <= 2 && !G.keepMismatchQual) {
+        return writeRecord2(self, rec, color, isDup, platform);
+    }
+    else {
+        return writeRecordX(self, rec, color, isDup, platform);
+    }
+}
+
+static rc_t ReadSequenceData(TableWriterSeqData *const data, VCursor const *const curs, int64_t const row, uint32_t const colId[])
+{
+    int i;
+    
+    memset(data, 0, sizeof(*data));
+    
+    for (i = 0; i <= 8; ++i) {
+        uint32_t elem_bits = 0;
+        uint32_t row_len = 0;
+        uint32_t boff = 0;
+        void const *base = NULL;
+        rc_t const rc = VCursorCellDataDirect(curs, row, colId[i], &elem_bits, &base, &boff, &row_len);
+        if (rc == 0) {
+            TableWriterData *tdata = NULL;
+            
+            switch (i) {
+                case 0:
+                    assert(elem_bits == sizeof(data->tmp_key_id) * 8);
+                    assert(row_len == 1);
+                    memmove(&data->tmp_key_id, base, sizeof(data->tmp_key_id));
+                    break;
+                case 1:
+                    tdata = &data->sequence;
+                    break;
+                case 2:
+                    tdata = &data->quality;
+                    break;
+                case 3:
+                    tdata = &data->read_type;
+                    break;
+                case 4:
+                    tdata = &data->read_start;
+                    break;
+                case 5:
+                    tdata = &data->read_len;
+                    break;
+                case 6:
+                    tdata = &data->spot_group;
+                    break;
+                case 7:
+                    tdata = &data->read_filter;
+                    break;
+                case 8:
+                    tdata = &data->platform;
+                    break;
+                default:
+                    assert(!"reachable");
+                    break;
+            }
+            if (tdata) {
+                tdata->buffer = base;
+                tdata->elements = row_len;
+            }
+        }
+        else
+            return rc;
+    }
+    return 0;
+}
+
+rc_t SequenceDoneWriting(Sequence *self)
+{
+    if (G.mode == mode_Remap) {
+        /* copy the SEQUENCE table from the first output */
+        VDBManager *mgr = NULL;
+        rc_t rc;
+        
+        getTable(self, false);
+
+        rc = VDatabaseOpenManagerUpdate(self->db, &mgr);
+        assert(rc == 0);
+        
+        if (rc == 0) {
+            VDatabase const *db = NULL;
+            
+            rc = VDBManagerOpenDBRead(mgr, &db, NULL, G.firstOut);
+            assert(rc == 0);
+            
+            VDBManagerRelease(mgr);
+            if (rc == 0) {
+                VTable const *tbl = NULL;
+                
+                rc = VDatabaseOpenTableRead(db, &tbl, "SEQUENCE");
+                assert(rc == 0);
+                VDatabaseRelease(db);
+                if (rc == 0) {
+                    VCursor const *curs = NULL;
+                    rc = VTableCreateCursorRead(tbl, &curs);
+                    assert(rc == 0);
+                    VTableRelease(tbl);
+                    if (rc == 0) {
+                        uint32_t colId[9];
+                        
+                        rc = VCursorAddColumn(curs, &colId[0], "TMP_KEY_ID");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[1], "(INSDC:dna:text)READ");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[2], "QUALITY");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[3], "READ_TYPE");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[4], "READ_START");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[5], "READ_LEN");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[6], "SPOT_GROUP");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[7], "READ_FILTER");
+                        assert(rc == 0);
+                        rc = VCursorAddColumn(curs, &colId[8], "PLATFORM");
+                        assert(rc == 0);
+                        if (rc == 0) {
+                            rc = VCursorOpen(curs);
+                            assert(rc == 0);
+                            if (rc == 0) {
+                                int64_t first;
+                                uint64_t count;
+                                uint64_t row;
+                                TableWriterSeqData data;
+                                
+                                rc = VCursorIdRange(curs, colId[0], &first, &count);
+                                assert(rc == 0);
+                                for (row = 0; row < count; ++row) {
+                                    int64_t dummyRowId = 0;
+                                    
+                                    rc = ReadSequenceData(&data, curs, row+first, colId);
+                                    assert(rc == 0);
+                                    if (rc) return rc;
+
+                                    data.nreads = data.read_start.elements;
+
+                                    rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+                                    assert(rc == 0);
+                                    if (rc) return rc;
+                                }
+                            }
+                        }
+                        VCursorRelease(curs);
+                    }
+                }
+            }
+        }
+    }
+    return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const Sequence *cself, int64_t row, uint64_t *keyId)
+{
+    return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t rowId, unsigned nreads,
+                             int64_t const primeId[/* nreads */],
+                             uint8_t const algnCnt[/* nreads */])
+{
+    TableWriterData data[2];
+    
+    data[0].buffer = primeId; data[0].elements = nreads;
+    data[1].buffer = algnCnt; data[1].elements = nreads;
+
+    return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(Sequence *self, bool commit) {
+    uint64_t dummyRows;
+    
+    if (self->tbl == NULL)
+        return;
+    
+    (void)TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+    if (G.mode == mode_Remap) {
+        /* This only happens for the second and subsequent loads.
+         * Cleaning up the first load is handled by the bam-load itself
+         * when everything is done.
+         */
+        VTable *tbl = NULL;
+        rc_t rc = VDatabaseOpenTableUpdate(self->db, &tbl, "SEQUENCE");
+        assert(rc == 0);
+        VTableDropColumn(tbl, "TMP_KEY_ID");
+        VTableDropColumn(tbl, "READ");
+        VTableRelease(tbl);
+    }
+    VDatabaseRelease(self->db);
+}
diff --git a/tools/bam-loader/sequence-writer.h b/tools/bam-loader/sequence-writer.h
new file mode 100644
index 0000000..a847db8
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.h
@@ -0,0 +1,89 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+    char *seq;
+    uint8_t *qual;
+    uint32_t *readStart;
+    uint32_t *readLen;
+    uint8_t *orientation;
+    uint8_t *is_bad;
+    uint8_t *alignmentCount;
+    char const *spotGroup;
+    char const *linkageGroup;
+    bool *aligned;
+    char *cskey;
+    uint64_t *ti;
+    uint64_t keyId;
+    unsigned spotGroupLen;
+    unsigned linkageGroupLen;
+    unsigned numreads;
+} SequenceRecord;
+
+typedef struct s_sequence_record_storage {
+    uint64_t ti[2];
+    uint32_t readStart[2];
+    uint32_t readLen[2];
+    uint8_t orientation[2];
+    uint8_t is_bad[2];
+    uint8_t alignmentCount[2];
+    bool aligned[2];
+    char cskey[2];
+} SequenceRecordStorage;
+
+typedef struct s_sequence {
+    VDatabase *db;
+    struct TableWriterSeq const *tbl;
+} Sequence;
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(Sequence *self, SequenceRecord const *rec,
+                         bool color, bool isDup, INSDC_SRA_platform_id platform);
+
+rc_t SequenceDoneWriting(Sequence *self);
+rc_t SequenceReadKey(const Sequence *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t row, unsigned nreads,
+                             const int64_t primeId[/* nreads */],
+                             const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(Sequence *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/tools/cache-mgr/Makefile b/tools/cache-mgr/Makefile
new file mode 100644
index 0000000..1a0d8dd
--- /dev/null
+++ b/tools/cache-mgr/Makefile
@@ -0,0 +1,76 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/cache-mgr
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	cache-mgr
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# cache-mgr
+#
+TOOL_SRC = \
+	cache-mgr
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/cache-mgr: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TOOL_LIB)
+
diff --git a/tools/cache-mgr/cache-mgr.c b/tools/cache-mgr/cache-mgr.c
new file mode 100644
index 0000000..7d33977
--- /dev/null
+++ b/tools/cache-mgr/cache-mgr.c
@@ -0,0 +1,1415 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+
+#include <kfg/config.h>
+#include <kfg/repository.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+#include <kfs/defs.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <strtol.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static const char * report_usage[]  = { "report objects in cache", NULL };
+static const char * rreport_usage[] = { "report status of repositories", NULL };
+static const char * unlock_usage[]  = { "remove lock-files", NULL };
+static const char * clear_usage[]   = { "clear cache", NULL };
+static const char * enable_usage[]  = { "enable repository [user/site/rem]", NULL };
+static const char * disable_usage[] = { "disable repository [user/site/rem]", NULL };
+static const char * detail_usage[]  = { "show detailed report", NULL };
+static const char * tstzero_usage[] = { "test for zero blocks (for report function)", NULL };
+static const char * urname_usage[]  = { "restrict to this user-repository", NULL };
+static const char * max_rem_usage[] = { "remove until reached that many bytes", NULL };
+static const char * rem_dir_usage[] = { "remove directories, not only files", NULL };
+
+#define OPTION_CREPORT  "report"
+#define ALIAS_CREPORT   "r"
+
+#define OPTION_UNLOCK   "unlock"
+#define ALIAS_UNLOCK    "u"
+
+#define OPTION_CLEAR    "clear"
+#define ALIAS_CLEAR     "c"
+
+#define OPTION_ENABLE   "enable"
+#define ALIAS_ENABLE    "e"
+
+#define OPTION_DISABLE  "disable"
+#define ALIAS_DISABLE   "d"
+
+#define OPTION_RREPORT  "rep-report"
+#define ALIAS_RREPORT   "o"
+
+#define OPTION_DETAIL   "details"
+#define ALIAS_DETAIL    "t"
+
+#define OPTION_URNAME   "user-repo-name"
+#define ALIAS_URNAME    "p"
+
+#define OPTION_MAXREM   "max-remove"
+#define ALIAS_MAXREM    "m"
+
+#define OPTION_REMDIR   "remove-dirs"
+#define ALIAS_REMDIR    "i"
+
+#define OPTION_TSTZERO  "test-zero"
+#define ALIAS_TSTZERO   "z"
+
+OptDef ToolOptions[] =
+{
+    { OPTION_CREPORT,   ALIAS_CREPORT,  NULL,   report_usage,   1,  false,  false },
+    { OPTION_RREPORT,   ALIAS_RREPORT,  NULL,   rreport_usage,  1,  false,  false },
+    { OPTION_DETAIL,    ALIAS_DETAIL,   NULL,   detail_usage,   1,  false,  false },
+    { OPTION_TSTZERO,   ALIAS_TSTZERO,  NULL,   tstzero_usage,  1,  false,  false },    
+    { OPTION_UNLOCK,    ALIAS_UNLOCK,   NULL,   unlock_usage,   1,  false,  false },
+    { OPTION_CLEAR,     ALIAS_CLEAR,    NULL,   clear_usage,    1,  false,  false },
+    { OPTION_MAXREM,    ALIAS_MAXREM,   NULL,   max_rem_usage,  1,  true,   false },
+    { OPTION_REMDIR,    ALIAS_REMDIR,   NULL,   rem_dir_usage,  1,  false,  false },
+    { OPTION_ENABLE,    ALIAS_ENABLE,   NULL,   enable_usage,   1,  true,   false },
+    { OPTION_DISABLE,   ALIAS_DISABLE,  NULL,   disable_usage,  1,  true,   false },
+    { OPTION_URNAME,    ALIAS_URNAME,   NULL,   urname_usage,   1,  true,   false }
+};
+
+const char UsageDefaultName[] = "cache-mgr";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [path_to_cache] options\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+        if ( rc != 0 )
+            progname = fullpath = UsageDefaultName;
+
+        rc = UsageSummary ( progname );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "UsageSummary() failed in $(func)", "func=%s", __func__ ) );
+
+        }
+        else
+            rc = KOutMsg ( "Options:\n" );
+
+        if ( rc == 0 )
+        {
+            uint32_t idx, count = sizeof ToolOptions / sizeof ToolOptions [ 0 ];
+            for ( idx = 0; idx < count; ++idx )
+            {
+                OptDef * o = &ToolOptions[ idx ];
+                HelpOptionLine ( o->aliases, o->name, NULL, o->help );
+            }
+        }
+
+        if ( rc == 0 )
+            rc = KOutMsg ( "\n" );
+
+        if ( rc == 0 )
+        {
+            HelpOptionsStandard ();
+            HelpVersion ( fullpath, KAppVersion() );
+        }
+    }
+    return rc;
+}
+
+typedef enum tool_main_function
+{
+    tf_report,
+    tf_rreport,
+    tf_unlock,
+    tf_clear,
+    tf_enable,
+    tf_disable,
+    tf_unknown
+} tool_main_function;
+
+
+typedef struct tool_options
+{
+    uint64_t max_remove;
+
+    VNamelist * paths;
+    const char * user_repo_name;
+
+    uint32_t path_count;
+    tool_main_function main_function;
+    KRepCategory category;
+
+    bool detailed;
+    bool tstzero;
+    bool remove_dirs;
+} tool_options;
+
+
+static rc_t init_tool_options( tool_options * options )
+{
+    rc_t rc = VNamelistMake ( &options->paths, 5 );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "VNamelistMake() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else
+    {
+        options->path_count = 0;
+        options->main_function = tf_unknown;
+        options->user_repo_name = NULL;
+        options->max_remove = 0;
+    }
+    return rc;
+}
+
+
+static rc_t clear_tool_options( tool_options * options )
+{
+    rc_t rc = VNamelistRelease ( options->paths );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "VNamelistRelease() failed in $(func)", "func=%s", __func__ ) );
+    }
+
+    if ( options->user_repo_name != NULL )
+    {
+        free( (void*) options->user_repo_name );
+        options->user_repo_name = NULL;
+    }
+    return rc;
+}
+
+
+static bool get_bool_option( const Args * args, const char * name )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "ArgsOptionCount() failed in $(func)", "func=%s", __func__ ) );
+        return false;
+    }
+    return ( count > 0 );
+}
+
+
+static bool string_cmp_1( const char * s1, const char * s2 )
+{
+    int cmp = string_cmp( s1, string_size( s1 ), s2, string_size( s2 ), -1 );
+    return ( cmp == 0 );
+}
+
+
+static KRepCategory get_repo_select( const Args * args, const char * name )
+{
+    KRepCategory res = krepBadCategory;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "ArgsOptionCount() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else if ( count > 0 )
+    {
+        const char * s = NULL;
+        rc = ArgsOptionValue( args, name, 0, (const void **)&s );
+        if ( rc == 0 && s != NULL )
+        {
+            if ( string_cmp_1 ( s, "user" ) )
+                res = krepUserCategory;
+            else if ( string_cmp_1 ( s, "site" ) )
+                res = krepSiteCategory;
+            else if ( string_cmp_1 ( s, "rem" ) )
+                res = krepRemoteCategory;
+        }
+    }
+    return res;
+}
+
+
+static rc_t get_user_repo_name( const Args * args, const char ** name )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPTION_URNAME, &count );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "ArgsOptionCount( $(option) ) failed in $(func)", "option=%s,func=%s", OPTION_URNAME, __func__ ) );
+    }
+    else if ( count > 0 )
+    {
+        const char * s = NULL;
+        rc = ArgsOptionValue( args, OPTION_URNAME, 0, (const void **)&s );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "ArgsOptionValue( $(option), 0 ) failed in $(func)", "option=%s,func=%s", OPTION_URNAME, __func__ ) );
+        }
+        else if ( s != NULL )
+            *name = string_dup_measure ( s, NULL );
+    }
+    return rc;
+}
+
+
+static rc_t get_max_remove( const Args * args, uint64_t * max_rem )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPTION_MAXREM, &count );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "ArgsOptionCount( $(option) ) failed in $(func)", "option=%s,func=%s", OPTION_MAXREM, __func__ ) );
+    }
+    else if ( count > 0 )
+    {
+        const char * s = NULL;
+        rc = ArgsOptionValue( args, OPTION_MAXREM, 0, (const void **)&s );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "ArgsOptionValue( $(option), 0 ) failed in $(func)", "option=%s,func=%s", OPTION_MAXREM, __func__ ) );
+        }
+        else if ( s != NULL )
+        {
+            char *endp;
+            *max_rem = strtou64( s, &endp, 10 );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t add_tool_options_path( tool_options * options, const char * path )
+{
+    rc_t rc = VNamelistAppend ( options->paths, path );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "VNamelistAppend( $(name) ) failed in $(func)", "name=%s, func=%s", path, __func__ ) );
+    }
+    if ( rc == 0 )
+        options->path_count++;
+    return rc;
+}
+
+
+static rc_t get_tool_options( Args * args, tool_options * options )
+{
+    uint32_t idx, count;
+
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "ArgsParamCount() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else if ( count > 0 )
+    {
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *value = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&value );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "ArgsParamValue( $(idx) ) failed in $(func)", "idx=%d,func=%s", idx, __func__ ) );
+            }
+            else if ( value != NULL )
+                rc = add_tool_options_path( options, value );
+        }
+    }
+
+    options->main_function = tf_unknown;
+    options->detailed = get_bool_option( args, OPTION_DETAIL );
+    options->tstzero = get_bool_option( args, OPTION_TSTZERO );
+    options->remove_dirs = get_bool_option( args, OPTION_REMDIR );
+
+    if ( get_bool_option( args, OPTION_CREPORT ) )
+        options->main_function = tf_report;
+    else if ( get_bool_option( args, OPTION_RREPORT ) )
+        options->main_function = tf_rreport;
+    else if ( get_bool_option( args, OPTION_UNLOCK ) )
+        options->main_function = tf_unlock;
+    else if ( get_bool_option( args, OPTION_CLEAR ) )
+        options->main_function = tf_clear;
+    else
+    {
+        options->category = get_repo_select( args, OPTION_ENABLE );
+        if ( options->category != krepBadCategory )
+            options->main_function = tf_enable;
+
+        if ( options->category == krepBadCategory )
+        {
+            options->category = get_repo_select( args, OPTION_DISABLE );
+            if ( options->category != krepBadCategory )
+                options->main_function = tf_disable;
+        }
+    }
+
+    if ( rc == 0 )
+        rc = get_user_repo_name( args, &options->user_repo_name );
+    if ( rc == 0 )
+        rc = get_max_remove( args, &options->max_remove );
+    return rc;
+}
+
+
+typedef struct visit_ctx
+{
+    KDirectory * dir;
+    KConfig * cfg;
+    const KRepositoryMgr * repo_mgr;
+
+    const tool_options * options;
+    const char * path;
+    void * data;
+    uint32_t path_type;
+    bool terminate;
+} visit_ctx;
+
+
+typedef rc_t ( *on_path_t )( visit_ctx * obj );
+
+
+static rc_t foreach_path_obj( visit_ctx * ctx, on_path_t func )
+{
+    rc_t rc = 0;
+    ctx->path_type = ( KDirectoryPathType ( ctx->dir, "%s", ctx->path ) & ~ kptAlias );
+    if ( ctx->path_type == kptDir )
+    {
+        KNamelist * path_objects;
+        rc = KDirectoryList ( ctx->dir, &path_objects, NULL, NULL, "%s", ctx->path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KDirectoryList( $(path) ) failed in $(func)", "path=%s,func=%s", ctx->path, __func__ ) );
+        }
+        else
+        {
+            uint32_t idx, count;
+            rc = KNamelistCount ( path_objects, &count );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KNamelistCount() failed in $(func)", "func=%s", __func__ ) );
+            }
+            for ( idx = 0; idx < count && rc == 0 && !ctx->terminate; ++idx )
+            {
+                const char * obj_name = NULL;
+                rc = KNamelistGet ( path_objects, idx, &obj_name );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc,
+                             "KNamelistGet( $(idx) ) failed in $(func)", "idx=%d,func=%s", idx, __func__ ) );
+                }
+                else if ( obj_name != NULL )
+                {
+                    char obj_path[ 4096 ];
+                    rc = KDirectoryResolvePath ( ctx->dir, true, obj_path, sizeof obj_path, "%s/%s", ctx->path, obj_name );
+                    if ( rc != 0 )
+                    {
+                        PLOGERR( klogErr, ( klogErr, rc,
+                                 "KDirectoryResolvePath( $(path) ) failed in $(func)", "path=%s,func=%s", ctx->path, __func__ ) );
+                    }
+                    else
+                    {
+                        visit_ctx octx;
+                        octx.dir = ctx->dir;
+                        octx.options = ctx->options;
+                        octx.path = obj_path;
+                        octx.data = ctx->data;
+                        octx.path_type = ( KDirectoryPathType ( ctx->dir, "%s", obj_path ) & ~ kptAlias );
+                        if ( octx.path_type == kptDir )
+                        {
+                            rc = foreach_path_obj( &octx, func );   /* recursion !!! */
+                        }
+                        else if ( octx.path_type == kptFile )
+                        {
+                            rc = func( &octx );
+                        }
+                    }
+                }
+            }
+
+            {
+                rc_t rc2 = KNamelistRelease ( path_objects );
+                if ( rc2 != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc2,
+                             "KNamelistRelease() failed in $(func)", "func=%s", __func__ ) );
+                }
+            }
+        }
+    }
+    if ( rc == 0 && ( ctx->path_type == kptDir || ctx->path_type == kptFile ) && !ctx->terminate )
+    {
+        /* at the very end of it, call the function for the path itself */
+        rc = func( ctx );
+    }
+    return rc;
+}
+
+
+static rc_t foreach_path( visit_ctx * octx, on_path_t func )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    octx->terminate = false;
+    for ( idx = 0; idx < octx->options->path_count && rc == 0 && !octx->terminate; ++idx )
+    {
+        rc = VNameListGet ( octx->options->paths, idx, &octx->path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "VNameListGet( $(idx) ) failed in $(func)", "idx=%u,func=%s", idx, __func__ ) );
+        }
+        else if ( octx->path != NULL )
+        {
+            rc = foreach_path_obj( octx, func );
+        }
+    }
+    return rc;
+}
+
+
+static bool string_ends_in( const char * str, const char * end )
+{
+    bool res = false;
+    if ( str != NULL && end != NULL )
+    {
+        uint32_t l_str = string_len( str, string_size( str ) );
+        uint32_t l_end = string_len( end, string_size( end ) );
+        if ( l_str >= l_end && l_end > 0 )
+        {
+            const char * p = str + ( l_str - l_end );
+            res = ( string_cmp ( p, l_end, end, l_end, l_end ) == 0 );
+        }
+    }
+    return res;
+}
+
+
+/***************************************************************************************************************/
+
+typedef struct report_data
+{
+    uint32_t partial_count;
+    uint32_t full_count;
+    uint32_t lock_count;
+    uint64_t file_size;
+    uint64_t used_file_size;
+} report_data;
+
+
+static rc_t on_report_cache_file( visit_ctx * obj )
+{
+    rc_t rc = 0;
+    uint64_t file_size = 0;
+    uint64_t used_size = 0;
+    uint64_t checked_blocks = 0;
+    uint64_t empty_blocks = 0;
+    float completeness = 0.0;
+    
+    bool locked = false;
+    report_data * data = obj->data;
+
+    data->partial_count++;
+    rc = KDirectoryFileSize ( obj->dir, &file_size, "%s", obj->path );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KDirectoryFileSize( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+    }
+    else
+    {
+        struct KFile const *f;
+
+        data->file_size += file_size;
+        rc = KDirectoryOpenFileRead ( obj->dir, &f, "%s", obj->path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KDirectoryOpenFileRead( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+        }
+        else
+        {
+            rc = GetCacheCompleteness( f, &completeness, &used_size ); /* libs/kfs/cacheteefile.c */
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "GetCacheCompleteness( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+            }
+            else
+            {
+                data->used_file_size += used_size;
+            }
+            
+            if ( rc == 0 && obj->options->tstzero )
+            {
+                rc = Has_Cache_Zero_Blocks( f, &checked_blocks, &empty_blocks ); /* libs/kfs/cacheteefile.c */
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc,
+                             "Has_Cache_Zero_Blocks( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+                }
+            }
+            
+            KFileRelease( f );
+        }
+    }
+    if ( rc == 0 )
+    {
+        uint32_t pt = ( KDirectoryPathType ( obj->dir, "%s.lock", obj->path ) & ~ kptAlias );
+        locked = ( pt == kptFile );
+    }
+
+    if ( rc == 0 && obj->options->detailed )
+    {
+        if ( locked )
+            rc = KOutMsg( "%s complete by %.02f %% [%,lu of %,lu]bytes locked\n",
+                          obj->path, completeness, used_size, file_size );
+        else
+            rc = KOutMsg( "%s complete by %.02f %% [%,lu of %,lu]bytes\n",
+                          obj->path, completeness, used_size, file_size );
+    }
+    
+    if ( rc == 0 && obj->options->tstzero )
+    {
+        rc = KOutMsg( "%s has %lu blocks set in bitmap where %lu are empty\n",
+                          obj->path, checked_blocks, empty_blocks );
+    }
+    
+    return rc;
+}
+
+
+static rc_t on_report_full_file( visit_ctx * obj )
+{
+    rc_t rc = 0;
+    uint64_t file_size = 0;
+    report_data * data = obj->data;
+
+    data->full_count++;
+    rc = KDirectoryFileSize ( obj->dir, &file_size, "%s", obj->path );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KDirectoryFileSize( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+    }
+    else
+    {
+        data->file_size += file_size;
+        data->used_file_size += file_size;
+        if ( obj->options->detailed )
+            rc = KOutMsg( "%s complete file of %,lu bytes\n", obj->path, file_size );
+    }
+    return rc;
+}
+
+
+static rc_t on_report_path( visit_ctx * obj )
+{
+    rc_t rc = 0;
+    if ( obj->path_type == kptFile )
+    {
+        report_data * data = obj->data;
+        if ( string_ends_in( obj->path, ".cache" ) )
+        {
+            rc = on_report_cache_file( obj );
+        }
+        else if ( string_ends_in( obj->path, ".lock" ) )
+        {
+            data->lock_count ++;
+        }
+        else if ( string_ends_in( obj->path, ".sra" ) )
+        {
+            rc = on_report_full_file( obj );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_report( visit_ctx * octx )
+{
+    rc_t rc = 0;
+    report_data data;
+
+    memset( &data, 0, sizeof data );
+    octx->data = &data;
+
+    if ( octx->options->detailed )
+        rc = KOutMsg( "\n-----------------------------------\n" );
+    if ( rc == 0 )
+        rc = foreach_path( octx, on_report_path );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "-----------------------------------\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u cached file(s)\n", data.partial_count );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u complete file(s)\n", data.full_count );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,lu bytes in cached files\n", data.file_size );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,lu bytes used in cached files\n", data.used_file_size );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u lock files\n", data.lock_count );
+
+    return rc;
+}
+
+
+/***************************************************************************************************************/
+typedef rc_t ( CC * get_repo_cb )( const KRepositoryMgr *self, KRepositoryVector *repos );
+
+const char MAIN_CAT_USER[] = "user";
+const char MAIN_CAT_SITE[] = "site";
+const char MAIN_CAT_REMOTE[] = "remote";
+
+const char SUB_CAT_UNKNOWN[] = "unknown";
+const char SUB_CAT_MAIN[] = "main";
+const char SUB_CAT_AUX[]  = "aux";
+const char SUB_CAT_PROT[] = "protected";
+
+
+static rc_t report_repo( visit_ctx * octx, KRepCategory category )
+{
+    rc_t rc, rc1;
+    KRepositoryVector repos;
+    const char * hint;
+
+    VectorInit ( &repos, 0, 5 );
+
+    switch ( category )
+    {
+        case krepUserCategory   : hint = MAIN_CAT_USER;
+                                   rc = KRepositoryMgrUserRepositories( octx->repo_mgr, &repos );
+                                   break;
+
+        case krepSiteCategory   : hint = MAIN_CAT_SITE;
+                                   rc = KRepositoryMgrSiteRepositories( octx->repo_mgr, &repos );
+                                   break;
+
+        case krepRemoteCategory : hint = MAIN_CAT_REMOTE;
+                                   rc = KRepositoryMgrRemoteRepositories( octx->repo_mgr, &repos );
+                                   break;
+    }
+
+    if ( rc != 0 )
+    {
+        if ( rc == SILENT_RC( rcKFG, rcNode, rcOpening, rcPath, rcNotFound ) )
+        {
+            KOutMsg("\n%s:\n", hint);
+            KOutMsg("\tnot found in configuration\n");
+            rc = 0;
+        }
+        else
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                 "KRepositoryMgr<$(hint)>repositories() failed in $(func)",
+                 "hint=%s,func=%s", hint, __func__ ) );
+        }
+    }
+    else
+    {
+        uint32_t idx;
+        bool disabled = KRepositoryMgrCategoryDisabled ( octx->repo_mgr, category );
+
+        rc = KOutMsg( "\n%s:\n", hint );
+        if ( rc == 0 && disabled )
+            rc = KOutMsg( "\tglobally disabled\n" );
+
+        for ( idx = 0; idx < VectorLength( &repos ) && rc == 0; ++idx )
+        {
+            const KRepository *repo = VectorGet( &repos, idx );
+            if ( repo != NULL )
+            {
+                char repo_name[ 1024 ];
+                rc = KRepositoryDisplayName ( repo, repo_name, sizeof repo_name, NULL );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc,
+                             "KRepositoryName() for $(hint) failed in $(func)", "hint=%s,func=%s", hint, __func__ ) );
+                }
+                else
+                {
+                    KRepSubCategory sub_cat = KRepositorySubCategory ( repo );
+                    bool disabled = KRepositoryDisabled ( repo );
+                    bool cache_enabled = KRepositoryCacheEnabled ( repo );
+                    const char * sub_cat_ptr = SUB_CAT_UNKNOWN;
+                    switch( sub_cat )
+                    {
+                        case krepMainSubCategory        : sub_cat_ptr = SUB_CAT_MAIN; break;
+                        case krepAuxSubCategory         : sub_cat_ptr = SUB_CAT_AUX; break;
+                        case krepProtectedSubCategory   : sub_cat_ptr = SUB_CAT_PROT; break;
+                        default                         : sub_cat_ptr = SUB_CAT_UNKNOWN; break;
+                    }
+
+                    rc = KOutMsg( "\t%s.%s: %s, cache-%s",
+                            sub_cat_ptr, repo_name,
+                            ( disabled ? "disabled" : "enabled" ),
+                            ( cache_enabled ? "enabled" : "disabled" ) );
+                    if ( rc == 0 )
+                    {
+                        if ( octx->options->detailed )
+                        {
+                            /* it is OK if we cannot find the root of a repository... */
+                            char where[ 4096 ];
+                            rc1 = KRepositoryRoot ( repo, where, sizeof where, NULL );
+                            if ( rc1 == 0 )
+                                rc = KOutMsg( ", at %s", where );
+                            else
+                            {
+                                rc1 = KRepositoryResolver ( repo, where, sizeof where, NULL );
+                                if ( rc1 == 0 )
+                                    rc = KOutMsg( ", at %s", where );
+                            }
+                        }
+                                            }
+                    if ( rc == 0 )
+                        rc = KOutMsg( "\n" );
+                }
+            }
+        }
+    }
+    {
+        rc1 = KRepositoryVectorWhack ( &repos );
+        if ( rc1 != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc1,
+                     "KRepositoryVectorWhack() for $(hint) failed in $(func)", "hint=%s,func=%s", hint, __func__ ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_rreport( visit_ctx * octx )
+{
+    rc_t rc = report_repo( octx, krepUserCategory );
+
+    if ( rc == 0 )
+        rc = report_repo( octx, krepSiteCategory );
+
+    if ( rc == 0 )
+        rc = report_repo( octx, krepRemoteCategory );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    return rc;
+}
+
+
+/***************************************************************************************************************/
+
+
+typedef struct unlock_data
+{
+    uint32_t lock_count;
+} unlock_data;
+
+
+static rc_t on_unlock_path( visit_ctx * obj )
+{
+    rc_t rc = 0;
+    if ( obj->path_type == kptFile && string_ends_in( obj->path, ".lock" ) )
+    {
+        unlock_data * data = obj->data;
+        rc = KDirectoryRemove ( obj->dir, false, "%s", obj->path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KDirectoryRemove( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+        }
+        else
+        {
+            data->lock_count++;
+            rc = KOutMsg( "%s deleted\n", obj->path );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_unlock( visit_ctx * octx )
+{
+    rc_t rc = 0;
+    unlock_data data;
+
+    memset( &data, 0, sizeof data );
+    octx->data = &data;
+    if ( rc == 0 )
+        rc = foreach_path( octx, on_unlock_path );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "-----------------------------------\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u lock-files removed\n", data.lock_count );
+
+    return rc;
+}
+
+
+/***************************************************************************************************************/
+
+
+typedef struct clear_data
+{
+    uint32_t removed_files;
+    uint32_t removed_directories;
+    uint64_t removed_size;
+} clear_data;
+
+
+static rc_t on_clear_path( visit_ctx * obj )
+{
+    rc_t rc = 0;
+    clear_data * data = obj->data;
+
+    /* the caller is written to first hit the files/subdirs, then the directory that contains them */
+    if ( obj->path_type == kptDir )
+    {
+        if ( obj->options->remove_dirs )
+        {
+            rc = KDirectoryRemove ( obj->dir, false, "%s", obj->path );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KDirectoryRemove( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+            }
+            else
+                data->removed_directories++;
+        }
+    }
+    else if ( obj->path_type == kptFile )
+    {
+        uint64_t file_size;
+        rc = KDirectoryFileSize ( obj->dir, &file_size, "%s", obj->path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KDirectoryFileSize( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+        }
+        else
+        {
+            rc = KDirectoryRemove ( obj->dir, false, "%s", obj->path );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KDirectoryRemove( $(path) ) failed in $(func)", "path=%s,func=%s", obj->path, __func__ ) );
+            }
+            else
+            {
+                if ( obj->options->detailed )
+                    rc = KOutMsg( "FILE: '%s' removed (%,lu bytes)\n", obj->path, file_size );
+                data->removed_files++;
+                data->removed_size += file_size;
+                if ( obj->options->max_remove > 0 && data->removed_size >= obj->options->max_remove )
+                {
+                    obj->terminate = true;
+                    KOutMsg( "the maximum of %,lu bytes to be removed is reached now\n", obj->options->max_remove );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_clear( visit_ctx * octx )
+{
+    rc_t rc = 0;
+    clear_data data;
+
+    memset( &data, 0, sizeof data );
+    octx->data = &data;
+
+    if ( octx->options->max_remove > 0 )
+        rc = KOutMsg( "removing max %,u bytes\n", octx->options->max_remove );
+    if ( rc == 0 )
+        rc = foreach_path( octx, on_clear_path );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "-----------------------------------\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u files removed\n", data.removed_files );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,u directories removed\n", data.removed_directories );
+    if ( rc == 0 )
+        rc = KOutMsg( "%,lu bytes removed\n", data.removed_size );
+
+    return rc;
+}
+
+
+/***************************************************************************************************************/
+
+/*
+static rc_t enable_disable_repo( bool disabled, get_repo_cb getter, const char * hint )
+{
+    KConfig * cfg;
+    rc_t rc = KConfigMake ( &cfg, NULL );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KConfigMake() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else
+    {
+        const KRepositoryMgr *repo_mgr;
+        rc = KConfigMakeRepositoryMgrRead ( cfg, &repo_mgr );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KConfigMakeRepositoryMgrRead() failed in $(func)", "func=%s", __func__ ) );
+        }
+        else
+        {
+            uint32_t idx;
+            KRepositoryVector repos;
+            VectorInit ( &repos, 0, 5 );
+            rc = getter ( repo_mgr, &repos );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KRepositoryMgr<$(hint)>repositories() failed in $(func)", "hint=%s,func=%s", hint, __func__ ) );
+            }
+            for ( idx = 0; idx < VectorLength( &repos ) && rc == 0; ++idx )
+            {
+                const KRepository *repo = VectorGet( &repos, idx );
+                if ( repo != NULL )
+                {
+                    rc = KRepositorySetDisabled ( repo, disabled );
+                    if ( rc != 0 )
+                    {
+                        PLOGERR( klogErr, ( klogErr, rc,
+                                 "KRepositorySetDisabled() failed in $(func)", "func=%s", __func__ ) );
+                    }
+                }
+            }
+            if ( rc == 0 )
+            {
+                if ( disabled )
+                    KOutMsg( "%s repositories disabled\n", hint );
+                else
+                    KOutMsg( "%s repositories enabled\n", hint );
+            }
+            {
+                rc_t rc2 = KRepositoryVectorWhack ( &repos );
+                if ( rc2 != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc2,
+                             "KRepositoryVectorWhack() failed in $(func)", "func=%s", __func__ ) );
+                }
+                rc2 = KRepositoryMgrRelease ( repo_mgr );
+                if ( rc2 != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc2,
+                             "KRepositoryMgrRelease() failed in $(func)", "func=%s", __func__ ) );
+                }
+
+            }
+        }
+
+        {
+            rc_t rc2 = KConfigRelease ( cfg );
+            if ( rc2 != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc2,
+                         "KConfigRelease() failed in $(func)", "func=%s", __func__ ) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t enable_disable_user_repo( bool disabled )
+{
+    return enable_disable_repo( disabled, KRepositoryMgrUserRepositories, "user" );
+}
+
+
+static rc_t enable_disable_site_repo( bool disabled )
+{
+    return enable_disable_repo( disabled, KRepositoryMgrSiteRepositories, "site" );
+}
+
+
+static rc_t enable_disable_remote_repo( bool disabled )
+{
+    return enable_disable_repo( disabled, KRepositoryMgrRemoteRepositories, "remote" );
+}
+*/
+
+/***************************************************************************************************************/
+
+
+static rc_t perform_set_disable( visit_ctx * octx, bool disabled )
+{
+    rc_t rc;
+    if ( octx->options->category == krepBadCategory )
+        rc = KOutMsg( "enable unknown category\n" );
+    else
+    {
+        rc = KRepositoryMgrCategorySetDisabled ( octx->repo_mgr, octx->options->category, disabled );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KRepositoryMgrCategorySetDisabled() failed in $(func)", "func=%s", __func__ ) );
+        }
+        else
+        {
+            rc = KConfigCommit ( octx->cfg );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KConfigCommit() failed in $(func)", "func=%s", __func__ ) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/***************************************************************************************************************/
+
+
+static rc_t perform( tool_options * options, Args * args )
+{
+    visit_ctx octx;
+    rc_t rc2, rc = KDirectoryNativeDir( &octx.dir );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KDirectoryNativeDir() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else
+    {
+        rc = KConfigMake ( &octx.cfg, NULL );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KConfigMake() failed in $(func)", "func=%s", __func__ ) );
+        }
+        else
+        {
+            rc = KConfigMakeRepositoryMgrRead ( octx.cfg, &octx.repo_mgr );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc,
+                         "KConfigMakeRepositoryMgrRead() failed in $(func)", "func=%s", __func__ ) );
+            }
+            else
+            {
+                octx.options = options;
+                octx.data = NULL;
+                switch( options->main_function )
+                {
+                    case tf_report  : rc = perform_report( &octx ); break;
+                    case tf_rreport : rc = perform_rreport( &octx ); break;
+                    case tf_unlock  : rc = perform_unlock( &octx ); break;
+                    case tf_clear   : rc = perform_clear( &octx ); break;
+                    case tf_enable  : rc = perform_set_disable( &octx, false ); break;
+                    case tf_disable : rc = perform_set_disable( &octx, true ); break;
+                    case tf_unknown : rc = Usage( args ); break;
+                }
+
+                rc2 = KRepositoryMgrRelease ( octx.repo_mgr );
+                if ( rc2 != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc2,
+                             "KRepositoryMgrRelease() failed in $(func)", "func=%s", __func__ ) );
+                }
+            }
+
+            rc2 = KConfigRelease ( octx.cfg );
+            if ( rc2 != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc2,
+                         "KConfigRelease() failed in $(func)", "func=%s", __func__ ) );
+            }
+        }
+
+        rc2 = KDirectoryRelease( octx.dir );
+        if ( rc2 != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc2,
+                     "KDirectoryRelease() failed in $(func)", "func=%s", __func__ ) );
+        }
+    }
+    return rc;
+}
+
+
+/***************************************************************************
+    Main:
+***************************************************************************/
+
+static rc_t CC on_history_path( const String * part, void *data )
+{
+    tool_options * options = data;
+    rc_t rc = add_tool_options_path( options, part->addr );
+    if ( options -> detailed )
+        KOutMsg( "source: %S\n", part );
+    return rc;
+}
+
+static rc_t get_cache_path_from_repo_mgr( tool_options * options )
+{
+    KConfig * cfg;
+    rc_t rc = KConfigMake ( &cfg, NULL );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KConfigMake() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else
+    {
+        const KRepositoryMgr *repo_mgr;
+        rc = KConfigMakeRepositoryMgrRead ( cfg, &repo_mgr );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "KConfigMakeRepositoryMgrRead() failed in $(func)", "func=%s", __func__ ) );
+        }
+        else
+        {
+            KRepositoryVector repos;
+            VectorInit ( &repos, 0, 5 );
+            rc = KRepositoryMgrUserRepositories ( repo_mgr, &repos );
+            if ( rc != 0 )
+            {
+                rc = 0; /* we do not have a user-repository, but that is OK, the caller will display the lack of it ... */
+            }
+            else
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < VectorLength( &repos ) && rc == 0; ++idx )
+                {
+                    bool add = true;
+                    KRepository * repo = VectorGet ( &repos, idx );
+                    if ( repo != NULL )
+                    {
+                        if ( options->user_repo_name != NULL )
+                        {
+                            char name[ 1024 ];
+                            rc = KRepositoryName( repo, name, sizeof name, NULL );
+                            if ( rc != 0 )
+                            {
+                                PLOGERR( klogErr, ( klogErr, rc,
+                                         "KRepositoryName( for repo # $(idx) ) failed in $(func)", "idx=%u,func=%s", idx, __func__ ) );
+                            }
+                            else
+                                add = string_cmp_1( options->user_repo_name, name );
+                        }
+                        if ( add )
+                        {
+                            rc_t rc1;
+                            char path[ 4096 ];
+                            size_t path_size;
+                            rc = KRepositoryRoot ( repo, path, sizeof path, &path_size );
+                            if ( rc != 0 )
+                            {
+                                PLOGERR( klogErr, ( klogErr, rc,
+                                         "KRepositoryRoot( for repo # $(idx) ) failed in $(func)", "idx=%u,func=%s", idx, __func__ ) );
+                            }
+                            else
+                            {
+                                path[ path_size ] = 0;
+                                rc = add_tool_options_path( options, path );
+                                if ( options->detailed )
+                                    KOutMsg( "source: %s\n", path );
+                            }
+                            rc1 = KRepositoryRootHistory ( repo, path, sizeof path, &path_size );
+                            if ( rc1 == 0 ) /* it is not an error if we have no repository-root */
+                            {
+                                path[ path_size ] = 0;
+                                foreach_Str_part( path, ':', on_history_path, options );
+                            }
+                        }
+                    }
+                }
+                {
+                    rc_t rc2 = KRepositoryVectorWhack ( &repos );
+                    if ( rc2 != 0 )
+                    {
+                        PLOGERR( klogErr, ( klogErr, rc2,
+                                 "KRepositoryVectorWhack() failed in $(func)", "func=%s", __func__ ) );
+                    }
+                }
+            }
+            {
+                rc_t rc2 = KRepositoryMgrRelease ( repo_mgr );
+                if ( rc2 != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc2,
+                             "KRepositoryMgrRelease() failed in $(func)", "func=%s", __func__ ) );
+                }
+            }
+        }
+        {
+            rc_t rc2 = KConfigRelease ( cfg );
+            if ( rc2 != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc2,
+                         "KConfigRelease() failed in $(func)", "func=%s", __func__ ) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t CC write_to_FILE ( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );    /* hardcoded value for stdout == 1 */
+    if ( * num_writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+static rc_t explain_no_cache_found ( void )
+{
+    rc_t rc = KOutMsg( "this tool was not able to find the location of the cache\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "solution A : specify the cache-path at the commandline like 'cache-mgr ~/my_cache -r'\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "solution B : fix your broken configuration-setup ( use vdb-config )\n" );
+    return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet ( write_to_FILE, stdout );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc,
+                 "KOutHandlerSet() failed in $(func)", "func=%s", __func__ ) );
+    }
+    else
+    {
+        Args * args;
+        rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+                                 ToolOptions, sizeof ToolOptions / sizeof ToolOptions [ 0 ] );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc,
+                     "ArgsMakeAndHandle() failed in $(func)", "func=%s", __func__ ) );
+        }
+        else
+        {
+            tool_options options;
+            rc = init_tool_options( &options );
+            if ( rc == 0 )
+            {
+                rc = get_tool_options( args, &options );
+                if ( rc == 0 )
+                {
+                    bool cache_paths_needed = false;
+                    switch( options.main_function )
+                    {
+                        case tf_report  : ;
+                        case tf_unlock  : ;
+                        case tf_clear   : cache_paths_needed = true; break;
+                        case tf_rreport : ;
+                        case tf_enable  : ;
+                        case tf_disable : ;
+                        case tf_unknown : ; break;
+                    }
+
+                    if ( options.path_count == 0 && cache_paths_needed )
+                        rc = get_cache_path_from_repo_mgr( &options );
+
+                    if ( rc == 0 )
+                    {
+                        if ( options.path_count == 0 && cache_paths_needed )
+                        {
+                            rc = explain_no_cache_found ();
+                        }
+                        else
+                            rc = perform( &options, args );
+                    }
+                }
+                clear_tool_options( &options );
+            }
+        }
+        {
+            rc_t rc2 = ArgsWhack ( args );
+            if ( rc2 != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc2,
+                         "ArgsWhack() failed in $(func)", "func=%s", __func__ ) );
+            }
+        }
+    }
+
+    return rc;
+}
+
diff --git a/tools/ccextract/Makefile b/tools/ccextract/Makefile
new file mode 100644
index 0000000..d5eb330
--- /dev/null
+++ b/tools/ccextract/Makefile
@@ -0,0 +1,90 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/ccextract
+
+INT_TOOLS =
+
+EXT_TOOLS = ccextract
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (1,$(HAVE_XML2))
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built:"                          \
+	       "It requires our internal library 'libkxml'"             \
+	       "which requires 'libxml2' and its development headers."
+endif
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# ccextract
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+CCEXTRACT_SRC = \
+	ccextract
+
+CCEXTRACT_OBJ = \
+	$(addsuffix .$(OBJX),$(CCEXTRACT_SRC))
+
+CCEXTRACT_LIB = \
+	-lkapp \
+	-stk-version \
+    -lkxfs \
+    -lkxml \
+	-sncbi-vdb
+
+$(BINDIR)/ccextract: $(CCEXTRACT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(CCEXTRACT_LIB)
diff --git a/tools/ccextract/ccextract.c b/tools/ccextract/ccextract.c
new file mode 100644
index 0000000..6cc7e27
--- /dev/null
+++ b/tools/ccextract/ccextract.c
@@ -0,0 +1,1272 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/manager-priv.h>
+#include <vfs/path-priv.h>
+#include <kxml/xml.h>
+#include <kfs/defs.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/nullfile.h>
+#include <kfs/teefile.h>
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <kapp/args.h>
+#include <kapp/main.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+/*
+ * some program globals
+ */
+const char * program_name = "ccextract"; /* default it but try to set it */
+const char * full_path = "ccextract"; /* default it but try to set it */
+
+
+#define OPTION_XML     "copycat-xml"
+#define OPTION_FORCE   "force"
+#define OPTION_DIR     "directory"
+
+#define ALIAS_XML     "x"
+#define ALIAS_FORCE   "f"
+#define ALIAS_DIR     "d"
+
+
+static
+const char * xml_usage[] = 
+{ "XML generated by 'copycat''", NULL };
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+static
+const char * dir_usage[] = 
+{ "location of output dbase directory", NULL };
+
+const char UsageDefaultName [] = "ccextract";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] [-d|--directory <directory>] -x|--copycat-xml <XML-file>\\\n"
+        "          source-archive | [path [...]]"
+        "\n"
+        "Summary:\n"
+        "  Copies files and/or directories, creating a catalog of the copied files.\n",
+        progname);
+}
+
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+const char * first_usage[] = 
+{
+    "The path to a archive file ",
+    NULL
+};
+
+static
+const char * second_usage[] = 
+{
+    "A file by path or ID to extract",
+    "If none are given all files are extracted",
+    NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("source-file-path", first_usage);
+    HelpParamLine ("extract-path", second_usage);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine (ALIAS_XML, OPTION_XML, "XML-file", xml_usage);
+    HelpOptionLine (ALIAS_DIR, OPTION_DIR, "directoy-path", dir_usage);
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+
+    HelpOptionsStandard ();
+/*                     1         2         3         4         5         6         7         8 */
+/*            12345678901234567890123456789012345678901234567890123456789012345678901234567890 */
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_XML,   ALIAS_XML,   NULL, xml_usage,   1, true,  true },
+    { OPTION_DIR,   ALIAS_DIR,   NULL, dir_usage,   1, true,  false },
+    { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 0, false, false }
+};
+
+
+/*  ----------------------------------------------------------------------
+ */
+static struct
+{
+    const char       * dirstr;
+    VPath            * dirpath;
+    KDirectory       * dir;           /* extraction target directory */
+
+    const char       * xmlstr;
+    VPath            * xmlpath;
+    const KFile      * xml;
+
+    const char       * arcstr;
+
+    /* root directory for XFS is archive as a directory but located below the archive */
+    const char       * rootstr;
+    const KDirectory * root;
+
+    /* base is the directory made from the archive - xtoc/xfs is a bit incoherent here */
+    const char       * basestr;
+    VPath            * basepath;
+    const KDirectory * base;
+
+
+    VFSManager * vfsmgr;
+
+    Vector       pathstr;
+    Vector       pathvpath;
+    BSTree       pathtree;
+
+
+
+
+    KFile *      null;
+
+
+
+
+    bool         force;
+    uint32_t     cm;
+} options;
+
+
+/*  ----------------------------------------------------------------------
+ */
+typedef struct extnode
+{
+    BSTNode       node;
+    const VPath * path;
+    uint64_t      offset;
+} extnode;
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t extnode_make (extnode ** new_node, const VPath * path, uint64_t offset)
+{
+    rc_t rc;
+
+    if (new_node == NULL)
+    {
+        rc = RC (rcExe, rcTree, rcConstructing, rcParam, rcNull);
+        LOGERR (klogInt, rc, "missing new_node for making node");
+    }
+    else
+    {
+        *new_node = NULL;
+
+        if (path == NULL)
+        {
+            rc = RC (rcExe, rcTree, rcConstructing, rcParam, rcNull);
+            LOGERR (klogInt, rc, "missing path for making node");
+        }
+        else if (path == NULL)
+        {
+            rc = RC (rcExe, rcTree, rcConstructing, rcParam, rcNull);
+            LOGERR (klogInt, rc, "missing path for making node");
+        }
+        else
+        {
+            extnode * node;
+
+            node = malloc (sizeof *node);
+            if (node == NULL)
+            {
+                rc = RC (rcExe, rcTree, rcConstructing, rcMemory, rcExhausted);
+                LOGERR (klogFatal, rc, "unable to get memory to make a VPath node");
+            }
+            else
+            {
+                rc = VPathAddRef (path);
+                if (rc == 0)
+                {
+                    node->path = path;
+                    node->offset = offset;
+                    *new_node = node;
+                    return 0;
+                }
+                free (node);
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+void CC extnode_whack (BSTNode * n, void * data)
+{
+    if (n)
+    {
+        VPathRelease (((extnode*)n)->path);
+        free (n);
+    }
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+int64_t CC extnode_sort (const BSTNode * item, const BSTNode * n)
+{
+    const extnode * l;
+    const extnode * r;
+    int64_t       ii;
+
+    l = (const extnode *)item;
+    r = (const extnode *)n;
+
+    if (l->offset < r->offset)
+        ii = -1;
+
+    else if (l->offset > r->offset)
+        ii = 1;
+
+    else
+    {
+        size_t lz;
+        size_t rz;
+        char lbuff [8192];
+        char rbuff [8192];
+        rc_t lrc;
+        rc_t rrc;
+
+        lrc = VPathReadPath (l->path, lbuff, sizeof (lbuff), &lz);
+        if (lrc)
+        {
+            LOGERR (klogInt, lrc, "failed to etract item path");
+            lz = 0;
+        }
+
+        rrc = VPathReadPath (r->path, rbuff, sizeof (rbuff), &rz);
+        if (lrc)
+        {
+            LOGERR (klogInt, rrc, "failed to etract node path");
+            rz = 0;
+        }
+
+        ii = string_cmp (lbuff, lz, rbuff, rz, lz + rz);
+    }
+    return ii;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+typedef struct rc_data
+{
+    rc_t rc;
+} rc_data;
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+bool CC extract_one (BSTNode * n, void * data_)
+{
+    extnode * node;
+    rc_data * data = data_;
+    rc_t rc;
+    size_t z;
+    char buff [8193];
+
+    assert (n);
+    assert (data);
+
+    node = (extnode*)n;
+
+    rc = VPathReadPath (node->path, buff, sizeof (buff) - 1, &z);
+    if (rc)
+        LOGERR (klogErr, rc, "error pulling path for an extraction");
+    else
+    {
+        const KFile * sfile;
+
+        buff[z] = '\0';
+
+/*
+ * use base unless we have to revert to root.
+ * base allows more control over options like password where the outside
+ * archive might have a different password than an inner file
+ */
+#if 1 
+        rc = VFSManagerOpenFileReadDirectoryRelative (options.vfsmgr, options.base,
+                                                          &sfile, node->path);
+#else
+        rc = VFSManagerOpenFileReadDirectoryRelative (options.vfsmgr, options.root,
+                                                      &sfile, node->path);
+#endif
+        if (rc)
+            LOGERR (klogErr, rc, "error opening file within the archive");
+        else
+        {
+            KFile * dfile;
+
+/*             KOutMsg ("%s: %s %x\n", __func__, node->path, options.cm); */
+            rc = KDirectoryCreateFile (options.dir, &dfile, false, 0640, options.cm, "%s", buff);
+            if (rc)
+                PLOGERR (klogErr, (klogErr, rc, "failed to create file '$(P)'", "P=%s", buff));
+            else
+            {
+                const KFile * teefile;
+
+                rc = KFileMakeTeeRead (&teefile, sfile, dfile);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc, "failed pipefitting file '$(P)'", "P=%s", buff));
+                else
+                {
+                    KFileAddRef (sfile);
+                    KFileAddRef (dfile);
+                    rc = KFileRelease (teefile);
+                    if (rc)
+                    PLOGERR (klogErr, (klogErr, rc, "failed copying file '$(P)'", "P=%s", buff));
+                }
+            }
+            KFileRelease (sfile);
+        }
+        KFileRelease (sfile);
+    }
+    data->rc = rc;
+    return (rc != 0);
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t extract ()
+{
+    rc_data data;
+    bool failed;
+
+    /* done sequentially - this will cause back ups on reads if both
+     * containers and their contents are extracted
+     *
+     * we are also using a DoUntil approach that quits at the first failed
+     * extract
+     */
+    failed = BSTreeDoUntil (&options.pathtree, false, extract_one, &data);
+    
+    if (failed)
+        LOGERR (klogErr, data.rc, "failure extracting a file");
+
+    return data.rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+#if 0
+static
+int CC sort_pathpath_cmp (const void ** litem, const void ** ritem, void * data)
+{
+    uint64_t lloc, rloc;
+
+    {
+        const VPath * lpath;
+        size_t z;
+        rc_t rc;
+        char pbuff [8192];
+
+        lpath = *litem;
+
+        rc = VPathReadPath (lpath, pbuff, sizeof pbuff, &z);
+        if (rc == 0)
+        {
+            switch (KDirectoryPathType (options.base, "%s", pbuff))
+            {
+            default:
+                lloc = 0;
+                break;
+            case kptFile:
+                rc = KDirectoryFileLocator (options.base, &lloc, "%s", pbuff);
+                break;
+            }
+            if (rc == 0)
+            {
+                const VPath * rpath;
+
+                rpath = *ritem;
+                rc = VPathReadPath (rpath, pbuff, sizeof pbuff, &z);
+                if (rc == 0)
+                {
+                    switch (KDirectoryPathType (options.base, "%s", pbuff))
+                    {
+                    default:
+                        rloc = 0;
+                        break;
+                    case kptFile:
+                        rc = KDirectoryFileLocator (options.base, &rloc, "%s", pbuff);
+                        break;
+                    }
+                }
+            }
+        }
+        if (rc) /* surrender */
+            lloc = rloc = 0;
+    }
+    
+    {
+        int cmp;
+
+        if (lloc < rloc)
+            cmp = -1;
+        else if (lloc > rloc)
+            cmp = 1;
+        else
+        {
+            assert (lloc == rloc);
+            cmp = 0;
+        };
+
+        return cmp;
+    }
+}
+#endif
+
+
+#if 0
+/*  ----------------------------------------------------------------------
+ */
+static
+bool CC build_tree_add (void * _item, void * _data)
+{
+    build_tree_data * data = _data;
+    return false;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t build_tree ()
+{
+    
+    rc_t rc;
+    rc_data data;
+    bool did_until = false;
+
+    BSTreeInit (&options.pathtree);
+
+    VectorDoUntil (options.pathpath, false, build_tree_add, &data);
+}
+#endif
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t insert_path (const VPath * vpath, uint64_t offset)
+{
+    extnode * node;
+    rc_t rc;
+
+    rc = extnode_make (&node, vpath, offset);
+    if (rc == 0)
+    {
+        rc = BSTreeInsert (&options.pathtree, &node->node, extnode_sort);
+        if (rc)
+            LOGERR (klogInt, rc, "error inserting tree node");
+        else
+            return 0;
+
+        extnode_whack (&node->node, NULL);
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ */
+static
+rc_t walk_path_file (char * path, size_t z, uint64_t * offset, KPathType kpt)
+{
+    uint64_t this_offset;
+    char * pc;
+    rc_t rc;
+
+    assert (path);
+    assert (offset);
+
+    this_offset = 0;
+    rc = 0;
+    if (kpt == kptFile)
+    {
+        rc = KDirectoryFileLocator (options.base, &this_offset, "%s", path);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "failure walking path '$(P)'",
+                      "P=%s", path));
+    }
+    if (rc == 0)
+    {
+        pc = string_rchr (path, z, '/');
+        if (pc)
+        {
+            uint64_t that_offset;
+            KPathType lkpt;
+
+            *pc = '\0';
+            lkpt = KDirectoryPathType (options.base, "%s", path);
+
+            switch (lkpt)
+            {
+            default:
+                rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+                break;
+            case kptNotFound:
+            case kptZombieFile:
+                rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcNotFound);
+                break;
+
+            case kptBadPath:
+                rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+                break;
+
+            case kptFile:
+            case kptDir:
+                /* we should always hit here */
+                rc = walk_path_file (path, z, &that_offset, lkpt);
+                if (rc == 0)
+                {
+                    this_offset += that_offset;
+                }
+                break;
+
+            case kptCharDev:
+            case kptBlockDev:
+            case kptFIFO:
+                rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcIncorrect);
+                break;
+            }
+            *pc = '/';
+        }
+    }
+    *offset = this_offset;
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t walk_path_tree (char * path, size_t z)
+{
+    return 0;
+}
+
+
+/*  ----------------------------------------------------------------------
+ * signature is because this is called by VectorDoUntil
+ */
+static
+void CC handle_path (void * item_, void * data_)
+{
+    if ((item_ != NULL) && (data_ != NULL))
+    {
+        VPath * vpath = item_;
+        rc_data * data = data_;
+        size_t z;
+        rc_t rc;
+        char pbuff [8193];
+/*         char tbuff [8193]; */
+
+        if (data->rc)
+            return;
+
+        /* -1 saves room for a guaranteed NUL */
+        rc = VPathReadPath (vpath, pbuff, sizeof (pbuff) - 1, &z);
+        if (rc)
+            LOGERR (klogErr, rc, "failed to pull path out of VPath");
+
+        else if (z)
+        {
+            KPathType kpt;
+
+            /* force a NUL just in case: we saved room for it */
+            pbuff[z] = '\0';
+
+            /* what type of path is this? */
+            kpt = KDirectoryPathType (options.base, "%s", pbuff);
+
+#if 0
+/* ain't doing this now, and may never because of the root versus base problems */
+            /* dereference links until we're done */
+            while (kpt & kptAlias)
+            {
+                rc = KDirectoryResolveAlias (options.base, true,
+                                             tbuff, sizeof tbuff, "%s", pbuff);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "error resolving path '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+                }
+                else
+                {
+                    memmove (tbuff, pbuff, sizeof pbuff);
+                    z = string_size (pbuff);
+                    kpt = KDirectoryPathType (options.root, "%s", pbuff);
+                }
+            }
+#endif
+            /* if we didn't crash this path dereferecing it. */
+            if (rc == 0)
+            {
+                if (kpt & kptAlias)
+                    kpt = kptAlias;
+
+                switch (kpt)
+                {
+                default:
+                    rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "unknown problem with path '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+                case kptNotFound:
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "path is a not found in archive '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+
+                case kptZombieFile:
+                    rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcNotFound);
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "path is a not in archive but should be '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+
+                case kptBadPath:
+                    rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "unusable path form '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+
+                case kptFile:
+                {
+                    uint64_t offset = 0;
+                    rc = walk_path_file (pbuff, z, &offset, kptFile);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "couldn't walk path '$(P)'",
+                                  "P=%s", pbuff));
+                    else
+                    {
+                        rc = insert_path (vpath, offset);
+                        if (rc)
+                            PLOGERR (klogErr,
+                                     (klogErr, rc, "couldn't sort path '$(P)'",
+                                      "P=%s", pbuff));
+                    }
+                    break;
+                }
+                case kptDir:
+                    rc = walk_path_tree (pbuff, z);
+                    break;
+
+                case kptCharDev:
+                case kptBlockDev:
+                case kptFIFO:
+                case kptAlias:
+                    rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcIncorrect);
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "unusable path target type '$(P)'",
+                              "P=%s", pbuff));
+                    break;
+                }
+            }
+        }
+        data->rc = rc;
+    }
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t build_tree_then_run ()
+{
+    rc_data data;
+
+    data.rc = 0;
+
+    BSTreeInit (&options.pathtree);
+
+    VectorForEach (&options.pathvpath, false, handle_path, &data);
+
+    if (data.rc == 0)
+        data.rc = extract();
+
+    BSTreeWhack (&options.pathtree, extnode_whack, NULL);
+    
+    return data.rc;
+}
+
+/*  ----------------------------------------------------------------------
+ */
+static
+void CC build_vpath_one (void * item, void * data)
+{
+    const char * path;
+    rc_data * prc;
+
+    path = item;
+    prc = data;
+
+    if (prc->rc == 0)
+    {
+        static const char ccid [] = "copycat-id:";
+        const size_t cz = sizeof (ccid) - 1;
+        size_t pz;
+        const char * hier;
+        const char * ppath;
+        VPath * vpath;
+        rc_t rc;
+        char vbuff [8193];
+
+        rc = 0;
+        ppath = path;
+        pz = string_size (path);
+        hier = string_chr (path, pz, ':');
+
+        if ((hier != NULL) &&
+            (0 == string_cmp (path, (hier+1) - path, ccid, cz /*sizeof (ccid) - 1*/, cz)))
+        {
+            static const char nfile[] = "ncbi-file:";
+            char * qmark;
+            size_t s, r/*, q */;
+            char ibuff [8192];
+            char rbuff [8192];
+
+            ++hier;
+            s = hier - path;
+            r = string_copy (ibuff, sizeof (ibuff), hier, pz - s);
+
+            qmark = string_chr (ibuff, r, '?');
+            if (qmark == NULL) /* this is more future with parts */
+                qmark = string_chr (ibuff, r, '#');
+
+            if (qmark != NULL)
+                *qmark = '\0';
+
+            rc = KDirectoryResolveAlias (options.root, true, rbuff, sizeof (rbuff), "%s", ibuff);
+
+            if (rc)
+                PLOGERR (klogErr, (klogErr, rc, "error resolving file id '$(I)", "I=%s", ibuff));
+
+            else 
+            {
+                char * slash;
+                size_t z;
+
+                slash = string_chr (rbuff+1, sizeof (rbuff), '/');
+                if (slash == NULL)
+                    /* we won't extract the root */
+                    return;
+
+                ++slash;
+
+                z = string_size (slash);
+                if (z == 0)
+                    return;
+
+                if (qmark)
+                {
+                    s = string_copy (vbuff, sizeof (vbuff), nfile, sizeof (nfile));
+                    r = string_copy (vbuff + s, sizeof (vbuff) - s, slash, z);
+                    /*q = */string_copy (vbuff + s + r, (sizeof (vbuff) - s) - r, qmark, pz - (qmark - path));
+                }
+                else
+                {
+                    s = string_copy (vbuff, sizeof (vbuff), slash, z);
+                }
+                ppath = vbuff;
+            }
+        }
+
+        if (rc == 0)
+        {
+            rc = VFSManagerMakePath (options.vfsmgr, &vpath, "%s", ppath);
+            if (rc)
+                ;
+            else
+            {
+                rc = VectorAppend (&options.pathvpath, NULL, vpath);
+                if (rc)
+                {
+                    VPathRelease (vpath);
+                }
+            }
+        }
+        
+        prc->rc = rc;
+    }
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+void CC build_vpath_whack (void * item, void * data)
+{
+    VPath * p;
+
+    p = item;
+
+    VPathRelease ( p );
+}
+
+/*  ----------------------------------------------------------------------
+ * pull paramstring 1-N and comnvert then to internal VPaths
+ */
+static
+rc_t build_vpath_then_run ()
+{
+    rc_data data;
+
+    data.rc = 0;
+
+    VectorInit (&options.pathvpath, 0, VectorLength (&options.pathstr));
+
+    VectorForEach (&options.pathstr, false, build_vpath_one, &data);
+
+    if (data.rc == 0)
+        build_tree_then_run();
+
+    VectorWhack (&options.pathvpath, build_vpath_whack, NULL);
+
+    return data.rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ * SCHEME:PATH/FILE?QUERY
+ *
+ * form_one is just a file
+ * form_two is just a path and a file (can ignore scheme until more schemes supported)
+ * form_three is all parts except path present which for here acts like form_one
+ * form_four is all four parts
+ *
+ * path is the directory path leading to root
+ * root will be the directory containing the archive
+ * base will be the archive as a directory
+ */
+static
+rc_t open_root_then_run ()
+{
+    static const char dot[] = ".";
+    char         rootstr [8192];
+    char         basestr [8192];
+    const char * colon;
+    rc_t rc;
+
+    colon = strchr (options.arcstr, ':');
+    if (colon == NULL) /* no scheme so it has to be a plain path */
+    {
+        char * last_slash;
+
+        strcpy (basestr, options.arcstr);
+        last_slash = strrchr (basestr, '/');
+
+        if (last_slash == NULL) /* in this directory */
+        {
+            options.rootstr = dot;
+            options.basestr = options.arcstr;
+            /* done */
+        }
+        else
+        {
+            *last_slash = '\0';
+            options.rootstr = basestr;
+            options.basestr = last_slash + 1;
+            /* done */
+        }
+    }
+    else
+    {
+        char * end_of_root;
+        char * last_slash;
+
+        strcpy (rootstr, colon+1);
+
+        end_of_root = strchr (rootstr, '?');
+
+        if (end_of_root == NULL)
+            end_of_root = strchr (rootstr, '#');
+
+        if (end_of_root)
+            *end_of_root = '\0';
+
+        options.rootstr = rootstr;
+
+        last_slash = strchr (rootstr, '/');
+        if (last_slash == NULL)
+        {
+            /* no path */
+            options.rootstr = dot;
+            options.basestr = options.arcstr;
+            /* done */
+        }
+        else
+        {
+            size_t x,z;
+
+            *last_slash = '\0';
+            options.rootstr = rootstr;
+
+            /* scheme */
+            z = string_size (rootstr);
+
+            x = string_copy (basestr, sizeof (basestr), options.arcstr, (colon + 1) - options.arcstr);
+            strcpy (basestr + x, options.arcstr + x + z + 1);
+            options.basestr = basestr;
+            /* done */
+        }
+    }
+    {
+        KDirectory * cwd;
+
+        rc = VFSManagerGetCWD (options.vfsmgr, &cwd);
+        if (rc)
+            ;
+        else
+        {
+            rc = KDirectoryOpenXTocDirRead (cwd, &options.root, true,
+                                            options.xml, "%s", options.rootstr);
+            if (rc)
+                PLOGERR (klogErr, (klogErr, rc,
+                                   "failed to open XFS from '$(P)' using '$(P)'",
+                                   "P=%s", options.basestr, options.xmlstr));
+            else
+            {
+                rc = VFSManagerMakePath (options.vfsmgr, &options.basepath, "%s", options.basestr);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc,
+                                       "failed to make vpath from '$(P)'",
+                                       "P=%s", options.basestr));
+                else
+                {
+                    rc = VFSManagerOpenDirectoryRead (options.vfsmgr,
+                                                      &options.base,
+                                                      options.basepath);
+                    if (rc == 0)
+                    {
+                        rc = build_vpath_then_run ();
+
+                        KDirectoryRelease (options.base);
+                    }
+                    KDirectoryRelease (options.root);
+                }
+                VPathRelease (options.basepath);
+            }
+            KDirectoryRelease (cwd);
+        }
+    }
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t open_xml_then_run()
+{
+    rc_t rc;
+
+    rc = VFSManagerMakePath (options.vfsmgr, &options.xmlpath, "%s", options.xmlstr);
+    if (rc)
+        PLOGERR (klogInt,
+                 (klogInt, rc, "failed to create path for '$(P)'",
+                  "P=%s", options.xmlstr));
+    else
+    {
+        rc = VFSManagerOpenFileRead (options.vfsmgr, &options.xml, options.xmlpath);
+        if (rc)
+            LOGERR (klogErr, rc, "Failed to open output directoryCopycat XML file");
+        else
+        {
+            rc = open_root_then_run ();
+        }
+        VPathRelease (options.xmlpath);
+    }
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t open_dir_then_run()
+{
+    rc_t rc;
+
+    rc = VFSManagerMakePath (options.vfsmgr, &options.dirpath, "%s", options.dirstr);
+    if (rc)
+        PLOGERR (klogInt,
+                 (klogInt, rc, "failed to create path for '$(P)'",
+                  "P=%s", options.dirstr));
+    else
+    {
+        rc = VFSManagerOpenDirectoryUpdate (options.vfsmgr, &options.dir, options.dirpath);
+        if (rc)
+            LOGERR (klogErr, rc, "Failed to open output directory");
+        else
+        {
+            rc = open_xml_then_run();
+            KDirectoryRelease (options.dir);
+        }
+        VPathRelease (options.dirpath);
+    }
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ */
+static
+rc_t open_mgr_then_run()
+{
+    rc_t rc;
+
+    rc = VFSManagerMake (&options.vfsmgr);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to create VFS manager");
+    else
+    {
+        rc = open_dir_then_run ();
+    }
+    return rc;
+}
+
+
+/*  ----------------------------------------------------------------------
+ * KMain
+ *
+ * Figure out what is on the command line
+ */
+rc_t KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc == 0)
+    {
+        /* use do {} while; for easy outs */
+        do
+        {
+            const char * pc;
+            uint32_t pcount;
+
+            rc = ArgsProgram (args, &full_path, &program_name);
+            if (rc)
+            {
+                PLOGERR (klogFatal,
+                         (klogFatal, rc,  "failed to set name to $'(N)'",
+                          "N=%s", program_name));
+                break;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, "failed to check force option");
+                break;
+            }
+            if (pcount)
+            {
+                options.force = true;
+                options.cm = kcmParents | kcmInit;
+            }
+            else
+            {
+                options.force = true;
+                options.cm = kcmParents | kcmCreate;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_XML, &pcount);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, "failed to check XML option");
+                break;
+            }
+            if (pcount)
+            {
+                rc = ArgsOptionValue (args, OPTION_XML, 0, (const void **)&options.xmlstr);
+                if (rc)
+                {
+                    LOGERR (klogFatal, rc, "failed to get XML value");
+                    break;
+                }
+            }
+            else
+            {
+                rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcNull);
+                LOGERR (klogFatal, rc, "missing required copycat-xml option");
+                MiniUsage(args);
+                break;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_DIR, &pcount);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, "failed to check directory option");
+                break;
+            }
+            if (pcount)
+            {
+                rc = ArgsOptionValue (args, OPTION_DIR, 0, (const void **)&options.dirstr);
+                if (rc)
+                {
+                    LOGERR (klogFatal, rc, "failed to get directory value");
+                    break;
+                }
+            }
+            else
+            {
+                options.dirstr = ".";
+            }
+
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, "failed to count parameters");
+                break;
+            }
+            if (pcount == 0)
+            {
+                rc = RC ( rcExe, rcArgv, rcReading, rcParam, rcInsufficient );
+                LOGERR (klogFatal, rc, "Missing archive parameter");
+                MiniUsage (args);
+                break;
+            }
+
+            {
+                uint32_t block;
+
+                block = 1;
+                if (pcount > 2)
+                    block = pcount - 1;
+
+                VectorInit (&options.pathstr, 0, block);
+            }
+
+            rc = ArgsParamValue (args, 0, (const void **)&options.arcstr);
+            if (rc)
+                LOGERR (klogFatal, rc, "failed to retrieve archive parameter");
+            else
+            {
+                if (pcount == 1)
+                {
+                    rc = VectorAppend (&options.pathstr, NULL, ".");
+                    if (rc)
+                        LOGERR (klogFatal, rc, "failed to set default path parameter");
+                }
+                else
+                {
+                    uint32_t ix;
+
+                    for (ix = 1; ix < pcount; ++ix)
+                    {
+                        rc = ArgsParamValue (args, ix, (const void **)&pc);
+                        if (rc)
+                        {
+                            PLOGERR (klogFatal, 
+                                     (klogFatal, rc, "unable to extract path parameter '$(K)",
+                                      "K=%u", ix));
+                            break;
+                        }
+                        rc = VectorAppend (&options.pathstr, NULL, pc);
+                        if (rc)
+                        {
+                            PLOGERR (klogFatal, 
+                                     (klogFatal, rc, "failed to add path '$(P)' to list",
+                                      "P=%s", pc));
+                            break;
+                        }
+                    }
+                }
+            }
+            if (rc == 0)
+                open_mgr_then_run();
+
+            VectorWhack (&options.pathstr, NULL, NULL);
+
+        } while (0);
+        ArgsWhack (args);
+    }                
+    return rc;
+}
diff --git a/tools/cg-load/.gitignore b/tools/cg-load/.gitignore
new file mode 100644
index 0000000..718f861
--- /dev/null
+++ b/tools/cg-load/.gitignore
@@ -0,0 +1,2 @@
+*.vers.h
+*.sh
diff --git a/tools/cg-load/Makefile b/tools/cg-load/Makefile
new file mode 100644
index 0000000..a564fee
--- /dev/null
+++ b/tools/cg-load/Makefile
@@ -0,0 +1,97 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/cg-load
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	cg-load
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# cg-load
+#
+CGLOAD_SRC = \
+	cg-load \
+	factory-evidence-intervals \
+	factory-evidence-dnbs \
+	factory-mappings \
+	factory-reads \
+	factory-tag-lfr \
+	f1_3 \
+	f1_5 \
+	f1_7 \
+	f2_0 \
+	f2_2 \
+	f2_4 \
+	f2_5 \
+	file \
+	file-version-factory \
+	formats \
+	writer-algn \
+	writer-evidence-dnbs \
+	writer-evidence-intervals \
+	writer-seq \
+
+CGLOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(CGLOAD_SRC))
+
+CGLOAD_LIB = \
+	-lkapp \
+	-stk-version \
+	-lload \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/cg-load: $(CGLOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(CGLOAD_LIB)
+
diff --git a/tools/cg-load/cg-load.c b/tools/cg-load/cg-load.c
new file mode 100644
index 0000000..357de1c
--- /dev/null
+++ b/tools/cg-load/cg-load.c
@@ -0,0 +1,1270 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "debug.h" /* DEBUG_MSG */
+#include "file.h" /* FGroupMAP_LoadReads */
+#include "formats.h" /* get_cg_reads_ngaps */
+
+#include <kapp/log-xml.h> /* XMLLogger */
+#include <kapp/loader-meta.h> /* KLoaderMeta_Write */
+#include <kapp/main.h> /* KAppVersion */
+
+#include <kdb/manager.h> /* kptDatabase */
+#include <kdb/meta.h> /* KMetadata */
+
+#include <kfs/arc.h> /* KDirectoryOpenArcDirRead */
+#include <kfs/tar.h> /* KArcParseTAR */
+
+#include <klib/out.h> /* OUTMSG */
+#include <klib/printf.h> /* string_printf */
+#include <klib/status.h> /* STSMSG */
+
+#include <vdb/schema.h> /* VDBManagerMakeSchema */
+
+#include <sysalloc.h> /* malloc */
+
+#include <assert.h>
+#include <errno.h>
+
+typedef struct SParam_struct
+{
+    const char* argv0;
+
+    KDirectory* input_dir;
+    const KDirectory *map_dir;
+    const KDirectory *asm_dir;
+    KDirectory* output_dir;
+
+    const char* map_path;
+    const char* asm_path;
+    const char* schema;
+    const char* refseqcfg;
+    const char* refseqpath;
+    const char* library;
+    char const** refFiles; /* NULL-terminated array pointing to argv */
+    /* mostly for debugging */
+    uint32_t refseq_chunk;
+    const char* out;
+    uint32_t force;
+    uint32_t force_refw;
+    uint32_t force_readw;
+    uint32_t no_read_ahead;
+    const char* qual_quant;
+    uint32_t no_spot_group;
+    uint32_t min_mapq;
+    uint32_t single_mate;
+    uint32_t cluster_size;
+    uint32_t load_other_evidence;
+
+    uint32_t read_len;
+} SParam;
+
+typedef struct DB_Handle_struct {
+    VDBManager* mgr;
+    VSchema* schema;
+    VDatabase* db;
+    const ReferenceMgr* rmgr;
+    const CGWriterSeq* wseq;
+    TReadsData* reads;
+    const CGWriterAlgn* walgn;
+    TMappingsData* mappings;
+    const CGWriterEvdInt* wev_int;
+    TEvidenceIntervalsData* ev_int;
+    const CGWriterEvdDnbs* wev_dnb;
+    TEvidenceDnbsData* ev_dnb;
+} DB_Handle;
+
+static
+rc_t DB_Init(const SParam* p, DB_Handle* h)
+{
+    rc_t rc;
+
+    if( (rc = VDBManagerMakeUpdate(&h->mgr, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create VDB Manager");
+
+    }
+    else if( (rc = VDBManagerMakeSchema(h->mgr, &h->schema)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create schema");
+
+    }
+    else if( (rc = VSchemaParseFile(h->schema, "%s", p->schema)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file '$(schema)'", PLOG_S(schema), p->schema));
+
+    }
+    else if( (rc = VDBManagerCreateDB(h->mgr, &h->db, h->schema, "NCBI:align:db:alignment_evidence",
+                                        p->force ? kcmInit : kcmCreate, p->out)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to create database at '$(path)'", PLOG_S(path), p->out));
+
+    }
+    else if( (rc = ReferenceMgr_Make(&h->rmgr, h->db, h->mgr, (p->force_refw ? ewrefmgr_co_allREADs : 0),
+                        p->refseqcfg, p->refseqpath, p->refseq_chunk, 350 * 1024 * 1024, 0)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create reference manager");
+
+    }
+    else if( (rc = CGWriterAlgn_Make(&h->walgn, &h->mappings, h->db, h->rmgr, p->min_mapq, p->single_mate, p->cluster_size)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create alignment writer");
+
+    }
+    else if ((rc = CGWriterSeq_Make(&h->wseq, &h->reads, h->db,
+            (p->force_readw ? ewseq_co_SaveRead : 0) |
+                (p->no_spot_group ? 0 : ewseq_co_SpotGroup), p->qual_quant,
+            p->read_len))
+        != 0)
+    {
+        LOGERR(klogErr, rc, "failed to create sequence writer");
+
+    } else if( p->asm_path && (rc = CGWriterEvdInt_Make(&h->wev_int, &h->ev_int, h->db, h->rmgr, 0)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create evidence intervals writer");
+    }
+    else if (p->asm_path
+        && (rc = CGWriterEvdDnbs_Make
+            (&h->wev_dnb, &h->ev_dnb, h->db, h->rmgr, 0, p->read_len)) != 0)
+    {
+        LOGERR(klogErr, rc, "failed to create evidence dnbs writer");
+    }
+    else {
+        const char** r = p->refFiles;
+        while( rc == 0 && *r != NULL ) {
+            if( (rc = ReferenceMgr_FastaPath(h->rmgr, *r++)) != 0 ) {
+                PLOGERR(klogInfo, (klogInfo, rc, "fasta file '$(file)'", "file=%s", r[-1]));
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t DB_Fini(const SParam* p, DB_Handle* h, bool drop)
+{
+    rc_t rc = 0, rc2;
+
+    /* THIS FUNCTION MAKES NO ATTEMPT TO PRESERVE INITIAL ERROR CODES
+       EACH SUCCESSIVE ERROR OVERWRITES THE PREVIOUS CODE */
+    if( h != NULL ) {
+        PLOGMSG(klogInfo, (klogInfo, "DB_Fini was called with drop=$(drop)",
+            "drop=%s", drop ? "true" : "false"));
+
+        PLOGMSG(klogInfo, (klogInfo, "Fini SEQUENCE", "severity=status"));
+        if( (rc2 = CGWriterSeq_Whack(h->wseq, !drop, NULL)) != 0) {
+            LOGERR(klogErr, rc2, "Failed SEQUENCE release");
+            if (!drop) {
+                drop = true;
+                rc = rc2;
+            }
+        }
+        h->wseq = NULL;
+        h->reads = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini (PRI&SEC)_ALIGNMENT", "severity=status"));
+        if( (rc2 = CGWriterAlgn_Whack(h->walgn, !drop, NULL, NULL)) != 0) {
+            LOGERR(klogErr, rc2, "Failed (PRI&SEC)_ALIGNMENT release");
+            if (!drop) {
+                drop = true;
+                rc = rc2;
+            }
+        }
+        h->walgn = NULL;
+        h->mappings = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_INTERVAL", "severity=status"));
+        if( (rc2 = CGWriterEvdInt_Whack(h->wev_int, !drop, NULL)) != 0) {
+            LOGERR(klogErr, rc2, "Failed EVIDENCE_INTERVAL release");
+            if (!drop) {
+                drop = true;
+                rc = rc2;
+            }
+        }
+        h->wev_int = NULL;
+        h->ev_int = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_ALIGNMENT", "severity=status"));
+        if( (rc2 = CGWriterEvdDnbs_Whack(h->wev_dnb, !drop, NULL)) != 0) {
+            LOGERR(klogErr, rc2, "Failed EVIDENCE_ALIGNMENT release");
+            if (!drop) {
+                drop = true;
+                rc = rc2;
+            }
+        }
+        h->wev_dnb = NULL;
+        h->ev_dnb = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini calculating reference coverage", "severity=status"));
+        if( (rc2 = ReferenceMgr_Release
+            (h->rmgr, !drop, NULL, drop ? false : true, Quitting)) != 0)
+        {
+            LOGERR(klogErr, rc2, "Failed calculating reference coverage");
+            if (!drop) {
+                drop = true;
+                rc = rc2;
+            }
+        }
+        h->rmgr = NULL;
+        if( rc == 0 )
+        {
+            KMetadata* meta;
+            if( (rc = VDatabaseOpenMetadataUpdate(h->db, &meta)) == 0 ) {
+                KMDataNode *node;
+                if( (rc = KMetadataOpenNodeUpdate(meta, &node, "/")) == 0 ) {
+                    if( (rc = KLoaderMeta_Write(node, p->argv0, __DATE__, "Complete Genomics", KAppVersion())) != 0 ) {
+                        LOGERR(klogErr, rc, "Cannot update loader meta");
+                    }
+                    KMDataNodeRelease(node);
+                }
+                KMetadataRelease(meta);
+            }
+        }
+        PLOGERR(klogInfo, (klogInfo, rc, "Fini VDatabaseRelease", "severity=status"));
+        VDatabaseRelease(h->db);
+        h->db = NULL;
+        VSchemaRelease(h->schema);
+        h->schema = NULL;
+        if( drop || rc != 0 ) {
+            rc2 = VDBManagerDrop(h->mgr, kptDatabase, "%s", p->out);
+            /*if( GetRCState(rc2) == rcNotFound ) {
+                // WHAT WOULD BE THE POINT OF RESETTING "rc" TO ZERO?
+                rc = 0;
+            } else*/ if( rc2 != 0 ) {
+                if ( rc == 0 )
+                    rc = rc2;
+                PLOGERR(klogErr, (klogErr, rc2, "cannot drop db at '$(path)'", PLOG_S(path), p->out));
+            }
+        }
+        VDBManagerRelease(h->mgr);
+        h->mgr = NULL;
+    }
+    return rc;
+}
+
+typedef struct FGroupKey_struct {
+    CG_EFileType type;
+    const CGFIELD_ASSEMBLY_ID_TYPE* assembly_id;
+    union {
+        struct {
+            const CGFIELD_SLIDE_TYPE* slide;
+            const CGFIELD_LANE_TYPE* lane;
+            const CGFIELD_BATCH_FILE_NUMBER_TYPE* batch_file_number;
+        } map;
+        struct {
+            const CGFIELD_SAMPLE_TYPE* sample;
+            const CGFIELD_CHROMOSOME_TYPE* chromosome;
+        } asmb;
+    } u;
+} FGroupKey;
+
+static
+rc_t CC FGroupKey_Make(FGroupKey* key,
+    const CGLoaderFile* file, const SParam* param)
+{
+    rc_t rc = 0;
+    CG_EFileType ftype;
+
+    if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+        switch(ftype) {
+            case cg_eFileType_READS:
+            case cg_eFileType_MAPPINGS:
+            case cg_eFileType_TAG_LFR:
+                key->type = cg_eFileType_READS;
+                if ((rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+                    (rc = CGLoaderFile_GetSlide(file, &key->u.map.slide)) == 0 &&
+                    (rc = CGLoaderFile_GetLane(file, &key->u.map.lane)) == 0)
+                {
+                    rc = CGLoaderFile_GetBatchFileNumber(file,
+                        &key->u.map.batch_file_number);
+                }
+                break;
+            case cg_eFileType_EVIDENCE_INTERVALS:
+            case cg_eFileType_EVIDENCE_DNBS:
+                if( param->asm_path != NULL ) {
+                    /* do not pick up ASM files if not requested */
+                    key->type = cg_eFileType_EVIDENCE_INTERVALS;
+                    if( (rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+                        (rc = CGLoaderFile_GetSample(file, &key->u.asmb.sample)) == 0 ) {
+                        rc = CGLoaderFile_GetChromosome(file, &key->u.asmb.chromosome);
+                    }
+                    break;
+                }
+            default:
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcIgnored);
+                break;
+        }
+    }
+    return rc;
+}
+static
+rc_t CC FGroupKey_Validate(const FGroupKey* key)
+{
+    rc_t rc = 0;
+    DEBUG_MSG(5, ("KEY: "));
+    switch( key->type ) {
+        case cg_eFileType_READS:
+            DEBUG_MSG(5, ("%s:%s:%s:%04u", key->assembly_id, key->u.map.slide, key->u.map.lane, key->u.map.batch_file_number));
+            if( !key->assembly_id || !key->u.map.slide || !key->u.map.lane || !key->u.map.batch_file_number ) {
+                rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+            }
+            break;
+        case cg_eFileType_EVIDENCE_INTERVALS:
+            DEBUG_MSG(5, ("%s:%s:%s", key->assembly_id, key->u.asmb.sample, key->u.asmb.chromosome));
+            if( !key->assembly_id || !key->u.asmb.sample || !key->u.asmb.chromosome ) {
+                rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+            }
+            break;
+        default:
+            DEBUG_MSG(5, ("CORRUPT!!"));
+            rc = RC(rcExe, rcQueue, rcValidating, rcId, rcWrongType);
+            break;
+    }
+    return rc;
+}
+
+typedef struct FGroupMAP_struct {
+    BSTNode dad;
+    FGroupKey key;
+    const CGLoaderFile* seq;
+    const CGLoaderFile* align;
+    const CGLoaderFile* tagLfr;
+} FGroupMAP;
+
+static
+void FGroupMAP_CloseFiles(FGroupMAP *g)
+{
+    CGLoaderFile_Close(g->seq);
+    CGLoaderFile_Close(g->align);
+    CGLoaderFile_Close(g->tagLfr);
+}
+
+static void CC FGroupMAP_Whack(BSTNode *node, void *data) {
+    FGroupMAP* n = (FGroupMAP*)node;
+
+    CGLoaderFile_Release(n->seq   , false);
+    CGLoaderFile_Release(n->align , false);
+    CGLoaderFile_Release(n->tagLfr, false);
+
+    free(node);
+}
+
+static
+int64_t CC FGroupMAP_Cmp( const void *item, const BSTNode *node )
+{
+    const FGroupKey* i = (const FGroupKey*)item;
+    const FGroupMAP* n = (const FGroupMAP*)node;
+
+    int64_t r = strcmp(i->assembly_id, n->key.assembly_id);
+    if( r == 0 ) {
+        if( i->type == n->key.type ) {
+            switch( i->type ) {
+                case cg_eFileType_READS:
+                    if( (r = strcmp(i->u.map.slide, n->key.u.map.slide)) == 0 ) {
+                        if( (r = strcmp(i->u.map.lane, n->key.u.map.lane)) == 0 ) {
+                            r = (int64_t)(*(i->u.map.batch_file_number)) - (int64_t)(*(n->key.u.map.batch_file_number));
+                        }
+                    }
+                    break;
+                case cg_eFileType_EVIDENCE_INTERVALS:
+                    if( (r = strcmp(i->u.asmb.sample, n->key.u.asmb.sample)) == 0 ) {
+                        r = strcmp(i->u.asmb.chromosome, n->key.u.asmb.chromosome);
+                    }
+                    break;
+                default:
+                    r = -1;
+                    break;
+            }
+        } else {
+            r = -1;
+        }
+    }
+    return r;
+}
+
+static
+int64_t CC FGroupMAP_Sort( const BSTNode *item, const BSTNode *n )
+{
+    return FGroupMAP_Cmp(&((const FGroupMAP*)item)->key, n);
+}
+
+typedef struct FGroupMAP_FindData_struct {
+    FGroupKey key;
+    int64_t rowid;
+} FGroupMAP_FindData;
+
+static
+bool CC FGroupMAP_FindRowId( BSTNode *node, void *data )
+{
+    FGroupMAP_FindData* d = (FGroupMAP_FindData*)data;
+    const FGroupMAP* n = (const FGroupMAP*)node;
+
+    if( FGroupMAP_Cmp(&d->key, node) == 0 ) {
+        if( CGLoaderFile_GetStartRow(n->seq, &d->rowid) == 0 ) {
+            return true;
+        }
+    }
+    return false;
+}
+
+static
+rc_t CC FGroupMAP_Set(FGroupMAP* g, const CGLoaderFile* file)
+{
+    rc_t rc = 0;
+    CG_EFileType ftype;
+
+    if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+        if( g->key.type == cg_eFileType_READS ) {
+            if( ftype == cg_eFileType_READS ) {
+                if( g->seq == NULL ) {
+                    g->seq = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else if( ftype == cg_eFileType_MAPPINGS ) {
+                if( g->align == NULL ) {
+                    g->align = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            }
+            else if (ftype == cg_eFileType_TAG_LFR) {
+                if (g->tagLfr == NULL) {
+                    g->tagLfr = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else {
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+            }
+        } else if( g->key.type == cg_eFileType_EVIDENCE_INTERVALS ) {
+            if( ftype == cg_eFileType_EVIDENCE_INTERVALS ) {
+                if( g->seq != NULL ) {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                } else {
+                    g->seq = file;
+                }
+            } else if( ftype == cg_eFileType_EVIDENCE_DNBS ) {
+                if( g->align == NULL ) {
+                    g->align = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else {
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+            }
+        } else {
+            rc = RC(rcExe, rcQueue, rcInserting, rcType, rcUnexpected);
+        }
+    }
+    return rc;
+}
+
+static
+void CC FGroupMAP_Validate( BSTNode *n, void *data )
+{
+    const FGroupMAP* g = (const FGroupMAP*)n;
+    rc_t rc = 0, *rc_out = (rc_t*)data;
+    const char* rnm = NULL, *mnm = NULL;
+
+    rc = FGroupKey_Validate(&g->key);
+    if( g->seq != NULL ) {
+        CGLoaderFile_Filename(g->seq, &rnm);
+        rnm = rnm ? strrchr(rnm, '/') : rnm;
+        DEBUG_MSG(5, (" READS(%s)", rnm));
+    }
+    if( g->align ) {
+        CGLoaderFile_Filename(g->align, &mnm);
+        mnm = mnm ? strrchr(mnm, '/') : mnm;
+        DEBUG_MSG(5, (" MAPPINGS(%s)", mnm));
+    }
+    if (g->tagLfr != NULL) {
+        CGLoaderFile_Filename(g->tagLfr, &mnm);
+        mnm = mnm ? strrchr(mnm, '/') : mnm;
+        DEBUG_MSG(5, (" TAG_LFR(%s)", mnm));
+    }
+    DEBUG_MSG(5, ("\n"));
+    if( rc == 0 && g->seq == NULL ) {
+        rc = RC(rcExe, rcQueue, rcValidating, rcItem, rcIncomplete);
+    }
+
+    /* THIS USED TO WIPE OUT THE "rc" ON EACH ENTRY */
+    if( rc != 0)  {
+        PLOGERR(klogErr, (klogErr, rc,  "file pair $(f1)[mandatory], $(f2)[optional]", PLOG_2(PLOG_S(f1),PLOG_S(f2)), rnm, mnm));
+        if ( * rc_out == 0 )
+            *rc_out = rc;
+#if 0
+    } else {
+        *rc_out = RC(0, 0, 0, 0, 0);
+#endif
+    }
+}
+
+typedef struct DirVisit_Data_Struct {
+    const SParam* param;
+    BSTree* tree;
+    const KDirectory* dir;
+    uint32_t format_version;
+} DirVisit_Data;
+
+/* you cannot addref to this dir object cause it's created on stack silently */
+static
+rc_t CC DirVisitor(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+    rc_t rc = 0;
+    DirVisit_Data* d = (DirVisit_Data*)data;
+
+    assert(d);
+
+    if( (type & ~kptAlias) == kptFile ) {
+        if (strcmp(&name[strlen(name) - 4], ".tsv") == 0 ||
+            strcmp(&name[strlen(name) - 8], ".tsv.bz2") == 0 ||
+            strcmp(&name[strlen(name) - 7], ".tsv.gz") == 0)
+        {
+            char buf[4096] = "";
+            const CGLoaderFile* file = NULL;
+            FGroupKey key;
+            if( (rc = KDirectoryResolvePath(dir, true, buf, sizeof(buf), "%s", name)) == 0 &&
+                (rc = CGLoaderFile_Make(&file, d->dir, buf, NULL, !d->param->no_read_ahead)) == 0 &&
+                (rc = FGroupKey_Make(&key, file, d->param)) == 0 )
+            {
+                FGroupMAP* found = (FGroupMAP*)BSTreeFind(d->tree, &key, FGroupMAP_Cmp);
+
+                assert(file && file->cg_file);
+                if (file->cg_file->type == cg_eFileType_READS ||
+                    file->cg_file->type == cg_eFileType_MAPPINGS)
+                {
+                    if (d->format_version == 0) {
+                        d->format_version = file->cg_file->format_version;
+                    }
+                    else if (d->format_version != file->cg_file->format_version)
+                    {
+                        rc = RC(rcExe, rcFile, rcInserting,
+                            rcData, rcInconsistent);
+                        PLOGERR(klogErr, (klogErr, rc, "READS or MAPPINGS "
+                            "format_version mismatch: $(o) vs. $(n)",
+                            "o=%d,n=%d",
+                            d->format_version, file->cg_file->format_version));
+                    }
+                }
+
+                if (rc == 0) {
+                    if (d->param != NULL && ! d->param->load_other_evidence &&
+                        strstr(buf, "/EVIDENCE") != NULL &&
+                        strstr(buf, "/EVIDENCE/") == NULL)
+                    {
+                        DEBUG_MSG(5, ("file %s recognized as %s: ignored\n",
+                            name, buf));
+                        rc = CGLoaderFile_Release(file, true);
+                        file = NULL;
+                    }
+                    else {
+                        DEBUG_MSG(5, ("file %s recognized as %s\n", name, buf));
+                        if (found != NULL) {
+                            rc = FGroupMAP_Set(found, file);
+                        }
+                        else {
+                            FGroupMAP* x = calloc(1, sizeof(*x));
+                            if (x == NULL) {
+                                rc = RC(rcExe,
+                                    rcFile, rcInserting, rcMemory, rcExhausted);
+                            }
+                            else {
+                                memmove(&x->key, &key, sizeof(key));
+                                if ((rc = FGroupMAP_Set(x, file)) == 0) {
+                                    rc = BSTreeInsertUnique(d->tree,
+                                        &x->dad, NULL, FGroupMAP_Sort);
+                                }
+                            }
+                        }
+                    }
+                }
+            } else if( GetRCObject(rc) == rcItem && GetRCState(rc) == rcIgnored ) {
+                DEBUG_MSG(5, ("file %s ignored\n", name));
+                rc = CGLoaderFile_Release(file, true);
+                file = NULL;
+            }
+            if( rc != 0 && file != NULL ) {
+                CGLoaderFile_LOG(file, klogErr, rc, NULL, NULL);
+                CGLoaderFile_Release(file, true);
+            }
+        } else if( strcmp(&name[strlen(name) - 4], ".tar") == 0 ) {
+            const KDirectory* tmp = d->dir;
+            if( (rc = KDirectoryOpenArcDirRead(dir, &d->dir, true, name, tocKFile, KArcParseTAR, NULL, NULL)) == 0 ) {
+                rc = KDirectoryVisit(d->dir, true, DirVisitor, d, ".");
+                KDirectoryRelease(d->dir);
+            }
+            d->dir = tmp;
+        }
+    }
+    return rc;
+}
+
+typedef struct FGroupMAP_LoadData_struct {
+    rc_t rc;
+    const SParam* param;
+    DB_Handle db;
+    const BSTree* reads;
+} FGroupMAP_LoadData;
+
+typedef enum {
+    eCtxRead,
+    eCtxLfr,
+    eCtxMapping
+} TCtx;
+static bool _FGroupMAPDone(FGroupMAP *self, TCtx ctx, FGroupMAP_LoadData* d) {
+    /* (rcData rcDone) is always set on reads file EOF */
+    bool eofLfr = true;
+    bool eofMapping = true;
+    assert(self && d);
+    if (d->rc == 0 ||
+        GetRCState(d->rc) != rcDone || GetRCObject(d->rc) != (enum RCObject)rcData)
+    {
+        return false;
+    }
+    d->rc = 0;
+    if (d->rc == 0 && self->tagLfr != NULL) {
+        d->rc = CGLoaderFile_IsEof(self->tagLfr, &eofLfr);
+    }
+    if (d->rc == 0 && self->align != NULL) {
+        d->rc = CGLoaderFile_IsEof(self->align, &eofMapping);
+    }
+    if (d->rc == 0) {
+        switch (ctx) {
+            case eCtxRead:
+                if (!eofLfr) {
+                    /* not EOF */
+                    d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+                    CGLoaderFile_LOG(self->align, klogErr, d->rc,
+                        "extra tag LFRs, possible that corresponding "
+                        "reads file is truncated", NULL);
+                }
+                else if (!eofMapping) {
+                    /* not EOF */
+                    d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+                    CGLoaderFile_LOG(self->align, klogErr, d->rc,
+                        "extra mappings, possible that corresponding "
+                        "reads file is truncated", NULL);
+                }
+                break;
+            case eCtxLfr:
+            case eCtxMapping:
+                d->rc = RC(rcExe, rcFile, rcReading, rcCondition, rcInvalid);
+                break;
+            default:
+                assert(0);
+                break;
+        }
+    }
+    if (d->rc == 0) {
+        /* mappings and lfr file EOF detected ok */
+        DEBUG_MSG(5, (" done\n", FGroupKey_Validate(&self->key)));
+    }
+    return true;
+}
+
+bool CC FGroupMAP_LoadReads( BSTNode *node, void *data )
+{
+    TCtx ctx = eCtxRead;
+    FGroupMAP* n = (FGroupMAP*)node;
+    FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+    bool done = false;
+
+    DEBUG_MSG(5, (" started\n", FGroupKey_Validate(&n->key)));
+    while (!done && d->rc == 0) {
+        ctx = eCtxRead;
+        d->rc = CGLoaderFile_GetRead(n->seq, d->db.reads);
+        if (d->rc == 0 && n->tagLfr != NULL) {
+            ctx = eCtxLfr;
+            d->rc = CGLoaderFile_GetTagLfr(n->tagLfr, d->db.reads);
+        }
+        if (d->rc == 0) {
+            if ((d->db.reads->flags
+                   & (cg_eLeftHalfDnbNoMatches | cg_eLeftHalfDnbMapOverflow))
+                &&
+                (d->db.reads->flags
+                   & (cg_eRightHalfDnbNoMatches | cg_eRightHalfDnbMapOverflow)))
+            {
+                d->db.mappings->map_qty = 0;
+            } else {
+                ctx = eCtxMapping;
+                d->rc = CGLoaderFile_GetMapping(n->align, d->db.mappings);
+            }
+/* alignment written 1st than sequence -> primary_alignment_id must be set!! */
+            if (d->rc == 0 &&
+                (d->rc = CGWriterAlgn_Write(d->db.walgn, d->db.reads)) == 0)
+            {
+                d->rc = CGWriterSeq_Write(d->db.wseq);
+            }
+        }
+        done = _FGroupMAPDone(n, ctx, d);
+        d->rc = d->rc ? d->rc : Quitting();
+    }
+    if( d->rc != 0 ) {
+        CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+        CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+    }
+
+    FGroupMAP_CloseFiles(n);
+    return d->rc != 0;
+}
+
+bool CC FGroupMAP_LoadEvidence( BSTNode *node, void *data )
+{
+    FGroupMAP* n = (FGroupMAP*)node;
+    FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+    DEBUG_MSG(5, ("' started\n", FGroupKey_Validate(&n->key)));
+     while( d->rc == 0 ) {
+        if( (d->rc = CGLoaderFile_GetEvidenceIntervals(n->seq, d->db.ev_int)) == 0 ) {
+            int64_t evint_rowid;
+            if( n->align != NULL ) {
+                d->rc = CGLoaderFile_GetEvidenceDnbs(n->align, d->db.ev_int->interval_id, d->db.ev_dnb);
+            } else {
+		d->db.ev_dnb->qty = 0; /***weird, but the easiest place to fix ***/
+	    }
+            /* interval written 1st than dnbs which uses interval as reference */
+            if( d->rc == 0 ) {
+                d->rc = CGWriterEvdInt_Write(d->db.wev_int, d->db.ev_dnb, &evint_rowid);
+            }
+            if( d->rc == 0 && n->align != NULL ) {
+                /* attach dnbs to reads */
+                uint16_t i;
+                FGroupMAP_FindData found;
+
+                found.key.type = cg_eFileType_READS;
+                d->rc = CGLoaderFile_GetAssemblyId(n->align, &found.key.assembly_id);
+                for(i = 0; d->rc == 0 && i < d->db.ev_dnb->qty; i++) {
+                    found.key.u.map.slide = d->db.ev_dnb->dnbs[i].slide;
+                    found.key.u.map.lane = d->db.ev_dnb->dnbs[i].lane;
+                    found.key.u.map.batch_file_number = &d->db.ev_dnb->dnbs[i].file_num_in_lane;
+                    if( BSTreeDoUntil(d->reads, false, FGroupMAP_FindRowId, &found) ) {
+                        d->rc = CGWriterEvdDnbs_SetSEQ(d->db.wev_dnb, i, found.rowid);
+                    } else {
+                        d->rc = RC(rcExe, rcFile, rcWriting, rcData, rcInconsistent);
+                    }
+                }
+            }
+            if( d->rc == 0 && n->align != NULL ) {
+                d->rc = CGWriterEvdDnbs_Write(d->db.wev_dnb, d->db.ev_int, evint_rowid);
+            }
+        }
+        if( GetRCState(d->rc) == rcDone && GetRCObject(d->rc) == (enum RCObject)rcData ) {
+            bool eof = false;
+            d->rc = 0;
+            if( n->align == NULL || ((d->rc = CGLoaderFile_IsEof(n->align, &eof)) == 0 && eof) ) {
+                /* dnbs file EOF detected ok */
+                DEBUG_MSG(5, ("' done\n", FGroupKey_Validate(&n->key)));
+                break;
+            } else if( d->rc == 0 ) {
+                /* not EOF */
+                d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+                CGLoaderFile_LOG(n->align, klogErr, d->rc,
+                    "extra dnbs, possible that corresponding intervals file is truncated", NULL);
+            }
+        }
+        d->rc = d->rc ? d->rc : Quitting();
+    }
+    if( d->rc != 0 ) {
+        CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+        CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+    }
+    FGroupMAP_CloseFiles(n);
+    return d->rc != 0;
+}
+
+
+static const char * lib_dst = "extra/library";
+
+static rc_t copy_library( const KDirectory * src_dir, KDirectory * dst_dir,
+                          const char * in_path, const char * out_path )
+{
+    rc_t rc;
+    size_t l = string_size( out_path ) + string_size( lib_dst ) + 2;
+    char * dst = malloc( l );
+    if ( dst == NULL )
+        rc = RC( rcExe, rcFile, rcCopying, rcMemory, rcExhausted );
+    else
+    {
+        size_t written;
+        rc = string_printf( dst, l, &written, "%s/%s", out_path, lib_dst );
+        if ( rc == 0 )
+            rc = KDirectoryCopy( src_dir, dst_dir, true, in_path, dst );
+        free( dst );
+    }
+    return rc;
+}
+
+
+static rc_t open_dir_or_tar( const KDirectory *dir, const KDirectory **sub, const char * name )
+{
+    rc_t rc1, rc2;
+    rc1 = KDirectoryOpenDirRead( dir, sub, true, "%s", name );
+    if ( rc1 != 0 )
+    {
+        rc2 = KDirectoryOpenTarArchiveRead( dir, sub, true, "%s", name );
+        if ( rc2 == 0 )
+            rc1 = rc2;
+    }
+    return rc1;
+}
+
+static rc_t Load( SParam* param )
+{
+    rc_t rc = 0, rc1 = 0;
+    BSTree slides, evidence;
+    
+
+    param->map_dir = NULL;
+    param->asm_dir = NULL;
+    param->output_dir = ( KDirectory * )param->input_dir;
+    BSTreeInit( &slides );
+    BSTreeInit( &evidence );
+
+    rc = open_dir_or_tar( param->input_dir, &param->map_dir, param->map_path );
+    if ( rc == 0 )
+    {
+        DirVisit_Data dv;
+
+        dv.param = param;
+        dv.tree = &slides;
+        dv.dir = param->map_dir;
+        dv.format_version = 0;
+        rc = KDirectoryVisit( param->map_dir, true, DirVisitor, &dv, NULL );
+        if ( rc == 0 )
+        {
+            if ( param->asm_path != NULL )
+            {
+                rc_t rc2 = open_dir_or_tar( param->input_dir, &param->asm_dir, param->asm_path );
+                if ( rc2 == 0 )
+                {
+                    dv.tree = &evidence;
+                    dv.dir = param->asm_dir;
+                    rc = KDirectoryVisit( param->asm_dir, true, DirVisitor, &dv, NULL );
+                }
+            }
+
+            if (rc == 0) {
+                param->read_len = get_cg_read_len(dv.format_version);
+            }
+
+            if ( rc == 0 )
+            {
+                /* SHOULD HAVE A BSTreeEmpty FUNCTION OR SOMETHING...
+                   MAKE ONE HERE - WITH KNOWLEDGE THAT TREE IS NOT NULL: */
+#ifndef BSTreeEmpty
+#define BSTreeEmpty( bst ) \
+    ( ( bst ) -> root == NULL )
+#endif
+                if ( BSTreeEmpty ( & slides ) && BSTreeEmpty ( & evidence ) )
+                    rc = RC( rcExe, rcFile, rcReading, rcData, rcInsufficient );
+                else
+                {
+                    /* CORRECTED SETTING OF "rc" IN "FGroupMAP_Validate" */
+                    assert ( rc == 0 );
+                    BSTreeForEach( &slides, false, FGroupMAP_Validate, &rc );
+                    BSTreeForEach( &evidence, false, FGroupMAP_Validate, &rc );
+                }
+
+                if ( rc == 0 )
+                {
+                    FGroupMAP_LoadData data;
+
+                    PLOGMSG( klogInfo, ( klogInfo, "file set validation complete", "severity=status" ) );
+                    memset( &data, 0, sizeof( data ) );
+                    data.rc = 0;
+                    data.param = param;
+                    data.reads = &slides;
+                    rc = DB_Init( param, &data.db );
+                    if ( rc == 0 )
+                    {
+                        BSTreeDoUntil( &slides, false, FGroupMAP_LoadReads, &data );
+                        rc = data.rc;
+                        if ( rc == 0 )
+                        {
+                            PLOGMSG( klogInfo, ( klogInfo, "MAP loaded", "severity=status" ) );
+                            BSTreeDoUntil( &evidence, false, FGroupMAP_LoadEvidence, &data );
+                            rc = data.rc;
+                            if ( rc == 0 )
+                                PLOGMSG( klogInfo, ( klogInfo, "ASM loaded", "severity=status" ) );
+                        }
+                    }
+                    rc1 = DB_Fini( param, &data.db, rc != 0 );
+                    if ( rc == 0 )
+                        rc = rc1;
+                }
+            }
+        }
+
+        /* copy the extra library ( file or recursive directory ) */
+        if ( rc == 0 && param->library != NULL )
+        {
+            const KDirectory *lib_src;
+            rc = open_dir_or_tar( param->input_dir, &lib_src, param->library );
+            if ( rc == 0 )
+            {
+                rc = copy_library( param->input_dir, param->output_dir,
+                                   param->library, param->out );
+                if ( rc == 0 )
+                    STSMSG( 0, ( "extra lib copied" ) );
+                else
+                    LOGERR( klogErr, rc, "failed to copy extra library" );
+                KDirectoryRelease( lib_src );
+            }
+/*
+            else
+            {
+                rc = copy_library( param->input_dir, param->output_dir,
+                                   ".", param->out );
+                if ( rc == 0 )
+                    STSMSG( 0, ( "extra lib copied" ) );
+                else
+                    LOGERR( klogErr, rc, "failed to copy extra library" );
+            }
+*/
+        }
+        KDirectoryRelease( param->map_dir );
+        KDirectoryRelease( param->asm_dir );
+    }
+    BSTreeWhack( &slides, FGroupMAP_Whack, NULL );
+    BSTreeWhack( &evidence, FGroupMAP_Whack, NULL );
+    return rc;
+}
+
+const char* map_usage[] = {"MAP input directory path containing files", NULL};
+const char* asm_usage[] = {"ASM input directory path containing files", NULL};
+const char* load_extra_evidence_usage[]
+    = { "load extra evidence files", NULL};
+const char* schema_usage[] = {"database schema file name", NULL};
+const char* output_usage[] = {"output database path", NULL};
+const char* force_usage[] = {"force output overwrite", NULL};
+const char* refseqcfg_usage[] = {"path to a file with reference-to-accession list", NULL};
+const char* refseqpath_usage[] = {"path to a directory with reference sequences in fasta", NULL};
+const char* refseqchunk_usage[] = {NULL, "hidden param to override REFERENCE table seq chunk size for testing", NULL};
+const char* reffile_usage[] = {"path to fasta file with references", NULL};
+const char* forceref_usage[] = {"force reference sequence write", NULL};
+const char* forceread_usage[] = {"force reads write", NULL};
+const char* qualquant_usage[] = {"quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1)", NULL};
+const char* nospotgroup_usage[] = {"do not write source file key to SPOT_GROUP column", NULL};
+const char* min_mapq_usage[] = {"filter secondary mappings by minimum weight (phred)", NULL};
+const char* no_secondary_usage[] = {"preserve only one mapping per half-DNB based on weight", NULL};
+const char* single_mate_usage[] = {"if secondary mates have duplicates preserve only one in each pair based on weight", NULL};
+const char* cluster_size_usage[] = {"defines cluster window on the reference, records only 1 placement from given cluster size; default is zero which means ignore", NULL};
+const char* no_read_ahead_usage[] = {"disable input files threaded caching", NULL};
+const char* library_usage[] = {"copy extra file/directory into output", NULL};
+
+/* this enum must have same order as MainArgs array below */
+enum OptDefIndex {
+    eopt_MapInput = 0,
+    eopt_AsmInput,
+    eopt_LoadExtraEvidence,
+    eopt_Schema,
+    eopt_RefSeqConfig,
+    eopt_RefSeqPath,
+    eopt_RefSeqChunk,
+    eopt_RefFile,
+    eopt_Output,
+    eopt_Force,
+    eopt_ForceRef,
+    eopt_ForceRead,
+    eopt_QualQuantization,
+    eopt_NoSpotGroup,
+    eopt_MinMapQ,
+    eopt_No2nd_ary,
+    eopt_SingleMate,
+    eopt_ClusterSize,
+    eopt_noReadAhead,
+    eopt_Library
+};
+
+OptDef MainArgs[] =
+{
+    /* if you change order in this array, rearrange enum above accordingly! */
+    { "map",              "m",  NULL, map_usage,            1, true,  true  },
+    { "asm",              "a",  NULL, asm_usage,            1, true,  false },
+    { "load-extra-evidence", NULL, NULL,
+                                 load_extra_evidence_usage, 1, false, false },
+    { "schema",           "s",  NULL, schema_usage,         1, true,  false },
+    { "refseq-config",    "k",  NULL, refseqcfg_usage,      1, true,  false },
+    { "refseq-path",      "i",  NULL, refseqpath_usage,     1, true,  false },
+    { "refseq-chunk",     "C",  NULL, refseqchunk_usage,    1, true,  false },
+    { "ref-file",         "r",  NULL, reffile_usage,        1, true,  false },
+    { "output",           "o",  NULL, output_usage,         1, true,  true  },
+    { "force",            "f",  NULL, force_usage,          1, false, false },
+    { "write-reference",  "g",  NULL, forceref_usage,       1, false, false },
+    { "write-read",       "w",  NULL, forceread_usage,      1, false, false },
+    { "qual-quant",       "Q",  NULL, qualquant_usage,      1, true,  false },
+    { "no-spotgroup",     "G",  NULL, nospotgroup_usage,    1, false, false },
+    { "min-mapq",         "q",  NULL, min_mapq_usage,       1, true,  false },
+    { "no-secondary",     "P",  NULL, no_secondary_usage,   1, false, false },
+    { "single-mate",      NULL, NULL, single_mate_usage,    1, false, false },
+    { "cluster-size",     NULL, NULL, cluster_size_usage,   1, true,  false },
+    { "input-no-threads", "t",  NULL, no_read_ahead_usage,  1, false, false },
+    { "library",          "l",  NULL, library_usage,        1, true,  false }
+};
+const size_t MainArgsQty = sizeof(MainArgs) / sizeof(MainArgs[0]);
+
+rc_t UsageSummary (char const * progname)
+{
+    OUTMSG((
+        "Usage:\n"
+        "\t%s [options] -m map-dir -o path-to-run\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad a Complete Genomics formatted data files\n"
+        "\n"
+        "Example:\n"
+        "\t%s -m build36/MAP -o /tmp/SRZ123456\n"
+        "\n"
+        ,progname, progname));
+    return 0;
+}
+
+char const UsageDefaultName[] = "cg-load";
+
+rc_t CC Usage( const Args* args )
+{
+    rc_t rc;
+    int i;
+    const char* progname = UsageDefaultName;
+    const char* fullname = UsageDefaultName;
+
+    rc = ArgsProgram(args, &fullname, &progname);
+
+    UsageSummary(progname);
+
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( !MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullname, KAppVersion());
+    return rc;
+}
+
+rc_t CC KMain( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+    const char* errmsg = NULL, *refseq_chunk = NULL, *min_mapq = NULL, *cluster_size = NULL;
+    const XMLLogger* xml_logger = NULL;
+    SParam params;
+    memset(&params, 0, sizeof(params));
+    params.schema = "align/align.vschema";
+
+    params.argv0 = argv[0];
+    
+    if( (rc = ArgsMakeAndHandle(&args, argc, argv, 2, MainArgs, MainArgsQty, XMLLogger_Args, XMLLogger_ArgsQty)) == 0 ) {
+        uint32_t count;
+        if( (rc = ArgsParamCount (args, &count)) != 0 || count != 0 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            ArgsParamValue(args, 0, (const void **)&errmsg);
+        
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Output].name, &count)) != 0 || count != 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_Output].name;
+        } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_Output].name, 0, (const void **)&params.out)) != 0 ) {
+            errmsg = MainArgs[eopt_Output].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MapInput].name, &count)) != 0 || count != 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_MapInput].name;
+        } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_MapInput].name, 0, (const void **)&params.map_path)) != 0 ) {
+            errmsg = MainArgs[eopt_MapInput].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Schema].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_Schema].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Schema].name, 0, (const void **)&params.schema)) != 0 ) {
+            errmsg = MainArgs[eopt_Schema].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_AsmInput].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_AsmInput].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_AsmInput].name, 0, (const void **)&params.asm_path)) != 0 ) {
+            errmsg = MainArgs[eopt_AsmInput].name;
+
+        }
+        else if ((rc = ArgsOptionCount(args,
+            MainArgs[eopt_LoadExtraEvidence].name,
+            &params.load_other_evidence)) != 0 )
+        {
+            errmsg = MainArgs[eopt_LoadExtraEvidence].name;
+
+        }
+        else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqConfig].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqConfig].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqConfig].name, 0, (const void **)&params.refseqcfg)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqConfig].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqPath].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqPath].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqPath].name, 0, (const void **)&params.refseqpath)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqPath].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Library].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_Library].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Library].name, 0, (const void **)&params.library)) != 0 ) {
+            errmsg = MainArgs[eopt_Library].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqChunk].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqChunk].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqChunk].name, 0, (const void **)&refseq_chunk)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqChunk].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Force].name, &params.force)) != 0 ) {
+            errmsg = MainArgs[eopt_Force].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRef].name, &params.force_refw)) != 0 ) {
+            errmsg = MainArgs[eopt_ForceRef].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRead].name, &params.force_readw)) != 0 ) {
+            errmsg = MainArgs[eopt_ForceRead].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_noReadAhead].name, &params.no_read_ahead)) != 0 ) {
+            errmsg = MainArgs[eopt_noReadAhead].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_NoSpotGroup].name, &params.no_spot_group)) != 0 ) {
+            errmsg = MainArgs[eopt_NoSpotGroup].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_No2nd_ary].name, &params.min_mapq)) != 0 ) {
+            errmsg = MainArgs[eopt_No2nd_ary].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_QualQuantization].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_QualQuantization].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_QualQuantization].name, 0, (const void **)&params.qual_quant)) != 0 ) {
+            errmsg = MainArgs[eopt_QualQuantization].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MinMapQ].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_MinMapQ].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_MinMapQ].name, 0, (const void **)&min_mapq)) != 0 ) {
+            errmsg = MainArgs[eopt_MinMapQ].name;
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ClusterSize].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_ClusterSize].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_ClusterSize].name, 0, (const void **)&cluster_size)) != 0 ) {
+            errmsg = MainArgs[eopt_ClusterSize].name;
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_SingleMate].name, &params.single_mate)) != 0 ) {
+            errmsg = MainArgs[eopt_SingleMate].name;
+
+        } else {
+            do {
+                long val = 0;
+                char* end = NULL;
+                uint32_t count;
+
+                if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefFile].name, &count)) != 0 ) {
+                    break;
+                } else {
+                    params.refFiles = calloc(count + 1, sizeof(*(params.refFiles)));
+                    if( params.refFiles == NULL ) {
+                        rc = RC(rcApp, rcArgv, rcReading, rcMemory, rcExhausted);
+                        break;
+                    }
+                    while(rc == 0 && count-- > 0) {
+                        rc = ArgsOptionValue(args, MainArgs[eopt_RefFile].name, count, (const void **)&params.refFiles[count]);
+                    }
+                }
+
+                if( refseq_chunk != NULL ) {
+                    errno = 0;
+                    val = strtol(refseq_chunk, &end, 10);
+                    if( errno != 0 || refseq_chunk == end || *end != '\0' || val < 0 || val > UINT32_MAX ) {
+                        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                        break;
+                    }
+                    params.refseq_chunk = val;
+                }
+                if( params.min_mapq > 0 ) {
+                    params.min_mapq = ~0;
+                } else if( min_mapq != NULL ) {
+                    errno = 0;
+                    val = strtol(min_mapq, &end, 10);
+                    if( errno != 0 || min_mapq == end || *end != '\0' || val < 0 || val > 255 ) {
+                        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                        break;
+                    }
+                    params.min_mapq = val;
+                }
+
+                if ( cluster_size )
+                    params.cluster_size = atoi( cluster_size );
+                else
+                    params.cluster_size = 0;
+
+                rc = KDirectoryNativeDir( &params.input_dir );
+                if ( rc != 0 )
+                    errmsg = "current directory";
+                else
+                {
+                    rc = XMLLogger_Make( &xml_logger, params.input_dir, args );
+                    if ( rc != 0 )
+                        errmsg = "XML logging";
+                    else
+                        rc = Load( &params );
+                }
+            } while( false );
+            KDirectoryRelease( params.input_dir );
+
+            free(params.refFiles);
+            params.refFiles = NULL;
+        }
+    }
+    /* find accession as last part of path for internal XML logging */
+    refseq_chunk = params.out ? strrchr(params.out, '/') : "/???";
+    if( refseq_chunk ++ == NULL )
+        refseq_chunk = params.out;
+
+    if( argc < 2 )
+        MiniUsage(args);
+    else if( rc != 0 )
+    {
+        if( errmsg )
+        {
+            MiniUsage(args);
+            LOGERR(klogErr, rc, errmsg);
+        }
+        else
+        {
+            PLOGERR(klogErr, (klogErr, rc, "load failed: $(accession)",
+                   "severity=total,status=failure,accession=%s", refseq_chunk));
+        }
+    }
+    else
+    {
+        PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s", refseq_chunk));
+    }
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/cg-load/debug.h b/tools/cg-load/debug.h
new file mode 100644
index 0000000..2d732c4
--- /dev/null
+++ b/tools/cg-load/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_debug_h_
+#define _tools_cg_load_debug_h_
+
+#include <klib/debug.h>
+
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_cg_load_debug_h_ */
diff --git a/tools/cg-load/defs.h b/tools/cg-load/defs.h
new file mode 100644
index 0000000..d470e96
--- /dev/null
+++ b/tools/cg-load/defs.h
@@ -0,0 +1,163 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_defs_h_
+#define _tools_cg_load_defs_h_
+
+
+#include <stdint.h> /* uint64_t */
+
+
+#define CG_FORMAT_2_5 0x02050000
+
+
+/* buffers and sizes */
+
+/*
+#define CG_CHROMOSOME_NAME (8) make if fit NC_003977 */
+#define CG_CHROMOSOME_NAME (10)
+
+#define CG_SLIDE (32)
+#define CG_LANE (8)
+
+#define CG_READS_NREADS (2)
+
+#define CG_READS15_SPOT_LEN 70
+#define CG_READS25_SPOT_LEN 60
+
+#define CG_READS15_NGAPS 3
+#define CG_READS25_NGAPS 2
+
+#define CG_MAPPINGS_MAX (2048)
+#define CG_EVDNC_PLOIDY (3)
+#define CG_EVDNC_INTERVALID_LEN (32)
+#define CG_EVDNC_SPOT_LEN (10 * 1024)
+#define CG_TAG_LFR_DATA_LEN (10)
+
+/* CG_EVDNC_ALLELE_NUM is 3 in v.1.5; 4 in v.2 */
+#define CG_EVDNC_ALLELE_NUM (4)
+
+#define CG_EVDNC_ALLELE_LEN (10 * 1024)
+#define CG_EVDNC_ALLELE_CIGAR_LEN (10 * 1024)
+
+typedef char CGFIELD_LIBRARY_TYPE;
+typedef char CGFIELD_SAMPLE_TYPE;
+typedef char CGFIELD_SLIDE_TYPE;
+typedef char CGFIELD_LANE_TYPE;
+typedef char CGFIELD_CHROMOSOME_TYPE;
+typedef char CGFIELD_ASSEMBLY_ID_TYPE;
+typedef char CGFIELD_SOFTWARE_VERSION_TYPE;
+typedef char CGFIELD_DBSNP_BUILD_TYPE;
+typedef char CGFIELD_COSMIC_TYPE;
+typedef char CGFIELD_PFAM_DATE_TYPE;
+typedef char CGFIELD_MIRBASE_VERSION_TYPE;
+typedef char CGFIELD_DGV_VERSION_TYPE;
+typedef char CGFIELD_GENERATED_AT_TYPE;
+typedef char CGFIELD_GENERATED_BY_TYPE;
+typedef char CGFIELD_GENE_ANNOTATIONS_TYPE;
+typedef char CGFIELD_GENOME_REFERENCE_TYPE;
+typedef uint32_t CGFIELD_BATCH_FILE_NUMBER_TYPE;
+typedef uint64_t CGFIELD_BATCH_OFFSET_TYPE;
+typedef uint32_t CGFIELD_FIELD_SIZE_TYPE;
+typedef uint32_t CGFIELD_MAX_PLOIDY_TYPE;
+typedef uint16_t CGFIELD_WINDOW_SHIFT_TYPE;
+typedef uint16_t CGFIELD_WINDOW_WIDTH_TYPE;
+typedef uint16_t CGFIELD_NUMBER_LEVELS_TYPE;
+typedef uint16_t CGFIELD_MEAN_LEVEL_X_TYPE;
+typedef uint16_t CGFIELD_WELL_ID;
+
+/******************************************************************************/
+
+typedef enum CG_EFileType_enum {
+    cg_eFileType_Unknown = 0,
+    cg_eFileType_READS = 1,
+    cg_eFileType_MAPPINGS,
+    cg_eFileType_LIB_DNB,
+    cg_eFileType_LIB_MATE_GAPS,
+    cg_eFileType_LIB_SEQDEP_GAPS,
+    cg_eFileType_REFMETRICS,
+    cg_eFileType_IDENTIFIER_MAPPING,
+    cg_eFileType_DBSNP_TO_CGI,
+    cg_eFileType_GENE_ANNOTATION,
+    cg_eFileType_SUMMARY_REPORT,
+    cg_eFileType_VAR_ANNOTATION,
+    cg_eFileType_GENE_VAR_SUMMARY_REPORT,
+    cg_eFileType_EVIDENCE_CORRELATION,
+    cg_eFileType_EVIDENCE_DNBS,
+    cg_eFileType_EVIDENCE_INTERVALS,
+    cg_eFileType_COVERAGE_DISTRIBUTION,
+    cg_eFileType_COVERAGE_BY_GC,
+    cg_eFileType_DEPTH_OF_COVERAGE,
+    cg_eFileType_INDEL_LENGTH_CODING,
+    cg_eFileType_INDEL_LENGTH,
+    cg_eFileType_SUBSTITUTION_LENGTH_CODING,
+    cg_eFileType_SUBSTITUTION_LENGTH,
+    cg_eFileType_CNV_SEGMENTS,
+    cg_eFileType_TUMOR_CNV_SEGMENTS,
+    cg_eFileType_CNV_DETAILS_SCORES,
+    cg_eFileType_TUMOR_DETAILS_SCORES,
+    cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS,
+    cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS,
+    cg_eFileType_JUNCTIONS,
+    cg_eFileType_JUNCTION_DNBS,
+    cg_eFileType_SV_EVENTS,
+    cg_eFileType_VAR_OLPL,
+    cg_eFileType_MEI,
+    cg_eFileType_TUMOR_CNV_DETAILS,
+    cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS,
+    cg_eFileType_COVERAGE_DISTRIBUTION_CODING,
+    cg_eFileType_COVERAGE_BY_GC_CODING,
+    cg_eFileType_LIB_SMALL_GAPS_ROLLUP,
+    cg_eFileType_DIPLOID_SOMATIC_CNV_DETAIL_SCORES,
+
+    cg_eFileType_TAG_LFR,
+    cg_eFileType_Last
+} CG_EFileType;
+
+typedef enum {
+    cg_eLibraryType_Unknown,
+    cg_eLibraryType_PureLFR,
+    cg_eLibraryType_MixedLFR,
+    cg_eLibraryType_MixedSTD,
+    cg_eLibraryType_Standard,
+} CG_ELibraryType;
+
+typedef enum CG_EMappingsFlags_enum {
+    cg_eLastDNBRecord = 0x01,
+    cg_eLeftHalfDnbMap = 0x00,
+    cg_eRightHalfDnbMap = 0x02,
+    cg_eFwdDnbStrand = 0x00,
+    cg_eRevDnbStrand = 0x04
+} CG_EMappingsFlags;
+
+typedef enum CG_EReadsFlags_enum {
+    cg_eLeftHalfDnbNoMatches = 0x01,
+    cg_eLeftHalfDnbMapOverflow = 0x02,
+    cg_eRightHalfDnbNoMatches = 0x04,
+    cg_eRightHalfDnbMapOverflow = 0x08
+} CG_EReadsFlags;
+
+
+#endif /* _tools_cg_load_defs_h_ */
diff --git a/tools/cg-load/f1_3.c b/tools/cg-load/f1_3.c
new file mode 100644
index 0000000..3b0d400
--- /dev/null
+++ b/tools/cg-load/f1_3.c
@@ -0,0 +1,77 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads13_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings13_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs13_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals13_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV_DETAIL_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL }, /*VDB-1404*/
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    /* undocumented */
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL }
+    
+};
+
+rc_t CGFile13_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f1_5.c b/tools/cg-load/f1_5.c
new file mode 100644
index 0000000..3a0dab8
--- /dev/null
+++ b/tools/cg-load/f1_5.c
@@ -0,0 +1,78 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-evidence-dnbs.h"
+#include "factory-evidence-intervals.h"
+#include "factory-mappings.h"
+#include "factory-reads.h"
+#include "factory-tag-lfr.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads15_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings15_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs15_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals15_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    /* undocumented */
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    
+    { "TAG_LFR", cg_eFileType_TAG_LFR, CGTagLfr15_Make },    
+};
+
+rc_t CGFile15_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f1_7.c b/tools/cg-load/f1_7.c
new file mode 100644
index 0000000..1970d79
--- /dev/null
+++ b/tools/cg-load/f1_7.c
@@ -0,0 +1,97 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+
+#include "factory-reads.h"              /* CGReads15_Make */
+#include "factory-mappings.h"           /* CGMappings15_Make */
+#include "factory-evidence-intervals.h" /* CGEvidenceIntervals15_Make */
+#include "factory-evidence-dnbs.h"      /* CGEvidenceDnbs15_Make */
+#include "factory-tag-lfr.h"            /* CGTagLfr15_Make */
+
+
+#include "file.h" /* CGFileType */
+
+
+/* File format v1.7
+   Software    v1.12
+#FORMAT_VERSION 1.7  */
+
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads15_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings15_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs15_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals15_Make },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    { "VAR-OLPL"     , cg_eFileType_VAR_OLPL, NULL },
+    { "MEI"          , cg_eFileType_MEI     , NULL },
+
+    { "COVERAGE-BY-GC"       , cg_eFileType_COVERAGE_BY_GC       , NULL },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+
+    /* semi-documented:
+       mentioned in "Data File Formats.File format v1.7.Software v1.12 */
+    { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC       , NULL },
+    { "COVERAGE-DISTRIBUTION-CODING",
+                               cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+
+    /* undocumented */
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    
+    { "TAG_LFR", cg_eFileType_TAG_LFR, CGTagLfr15_Make },    
+};
+
+
+rc_t CGFile17_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f2_0.c b/tools/cg-load/f2_0.c
new file mode 100644
index 0000000..ca5b938
--- /dev/null
+++ b/tools/cg-load/f2_0.c
@@ -0,0 +1,98 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-evidence-dnbs.h"
+#include "factory-evidence-intervals.h"
+#include "factory-mappings.h"
+#include "factory-reads.h"
+#include "factory-tag-lfr.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads20_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings20_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs20_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals20_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    { "MEI", cg_eFileType_MEI, NULL },    
+    /* from the documentation */
+    { "TUMOR-CNV-DETAILS", cg_eFileType_TUMOR_CNV_DETAILS, NULL },
+    { "DIPLOID-SOMATIC-CNV-SEGMENTS",
+        cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "COVERAGE-DISTRIBUTION-CODING",
+        cg_eFileType_COVERAGE_DISTRIBUTION_CODING, NULL },
+    { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC_CODING, NULL },
+    { "LIB-SMALL-GAPS-ROLLUP", cg_eFileType_LIB_SMALL_GAPS_ROLLUP, NULL },
+
+    { "TAG_LFR", cg_eFileType_TAG_LFR, CGTagLfr15_Make },    
+
+    /* VDB-1383 */
+    { "NONDIPLOID-SOMATIC-CNV-SEGMENTS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-DETAILS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS, NULL },
+    { "DIPLOID-SOMATIC-CNV-DETAIL-SCORES",
+                 cg_eFileType_DIPLOID_SOMATIC_CNV_DETAIL_SCORES, NULL },
+};
+
+rc_t CGFile20_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f2_2.c b/tools/cg-load/f2_2.c
new file mode 100644
index 0000000..774f36f
--- /dev/null
+++ b/tools/cg-load/f2_2.c
@@ -0,0 +1,98 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-evidence-dnbs.h"
+#include "factory-evidence-intervals.h"
+#include "factory-mappings.h"
+#include "factory-reads.h"
+#include "factory-tag-lfr.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads22_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings22_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "IDENTIFIER-MAPPING", cg_eFileType_IDENTIFIER_MAPPING, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs22_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals22_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-SEGMENTS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-DETAILS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    { "MEI", cg_eFileType_MEI, NULL },
+    /* from Standard Sequencing Service Data File Formats file test */
+    { "TUMOR-CNV-DETAILS", cg_eFileType_TUMOR_CNV_DETAILS, NULL },
+    { "DIPLOID-SOMATIC-CNV-SEGMENTS",
+                cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "COVERAGE-DISTRIBUTION-CODING",
+                cg_eFileType_COVERAGE_DISTRIBUTION_CODING, NULL },
+    { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC_CODING, NULL },
+    { "LIB-SMALL-GAPS-ROLLUP", cg_eFileType_LIB_SMALL_GAPS_ROLLUP, NULL },
+    /* from Cancer Sequencing Service Data File Formats file test */
+    { "DIPLOID-SOMATIC-CNV-DETAILSCORES",
+                cg_eFileType_DIPLOID_SOMATIC_CNV_DETAIL_SCORES, NULL },
+
+    { "TAG_LFR", cg_eFileType_TAG_LFR, CGTagLfr15_Make },    
+};
+
+rc_t CGFile22_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f2_4.c b/tools/cg-load/f2_4.c
new file mode 100644
index 0000000..6036f6f
--- /dev/null
+++ b/tools/cg-load/f2_4.c
@@ -0,0 +1,33 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-file.h" /* CGFile22_Make */
+#include "file.h" /* CGFileType */
+
+rc_t CGFile24_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGFile22_Make ( self, type, file );
+}
diff --git a/tools/cg-load/f2_5.c b/tools/cg-load/f2_5.c
new file mode 100644
index 0000000..48c414d
--- /dev/null
+++ b/tools/cg-load/f2_5.c
@@ -0,0 +1,98 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-evidence-dnbs.h"
+#include "factory-evidence-intervals.h"
+#include "factory-mappings.h"
+#include "factory-reads.h"
+#include "factory-tag-lfr.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS"                  , cg_eFileType_READS,        CGReads25_Make },
+    { "MAPPINGS"               , cg_eFileType_MAPPINGS,     CGMappings25_Make },
+    { "LIB-DNB"                , cg_eFileType_LIB_DNB,                   NULL },
+    { "LIB-MATE-GAPS"          , cg_eFileType_LIB_MATE_GAPS,             NULL },
+    { "LIB-SEQDEP-GAPS"        , cg_eFileType_LIB_SEQDEP_GAPS,           NULL },
+    { "REFMETRICS"             , cg_eFileType_REFMETRICS,                NULL },
+    { "IDENTIFIER-MAPPING"     , cg_eFileType_IDENTIFIER_MAPPING,        NULL },
+    { "DBSNP-TO-CGI"           , cg_eFileType_DBSNP_TO_CGI,              NULL },
+    { "GENE-ANNOTATION"        , cg_eFileType_GENE_ANNOTATION,           NULL },
+    { "SUMMARY-REPORT"         , cg_eFileType_SUMMARY_REPORT,            NULL },
+    { "VAR-ANNOTATION"         , cg_eFileType_VAR_ANNOTATION,            NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT,   NULL },
+    { "EVIDENCE-CORRELATION"   , cg_eFileType_EVIDENCE_CORRELATION,      NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs25_Make },
+    { "EVIDENCE-INTERVALS"    , cg_eFileType_EVIDENCE_INTERVALS,
+                                                   CGEvidenceIntervals25_Make },
+    { "COVERAGE-DISTRIBUTION" , cg_eFileType_COVERAGE_DISTRIBUTION,      NULL },
+    { "COVERAGE-BY-GC"        , cg_eFileType_COVERAGE_BY_GC,             NULL },
+    { "DEPTH-OF-COVERAGE"     , cg_eFileType_DEPTH_OF_COVERAGE,          NULL },
+    { "INDEL-LENGTH-CODING"   , cg_eFileType_INDEL_LENGTH_CODING,        NULL },
+    { "INDEL-LENGTH"          , cg_eFileType_INDEL_LENGTH,               NULL },
+    { "SUBSTITUTION-LENGTH-CODING"
+                              , cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH"   , cg_eFileType_SUBSTITUTION_LENGTH,        NULL },
+    { "CNV_SEGMENTS"          , cg_eFileType_CNV_SEGMENTS,               NULL },
+    { "CNV-SEGMENTS"          , cg_eFileType_CNV_SEGMENTS,               NULL },
+    { "TUMOR_CNV_SEGMENTS"    , cg_eFileType_TUMOR_CNV_SEGMENTS,         NULL },
+    { "TUMOR-CNV-SEGMENTS"    , cg_eFileType_TUMOR_CNV_SEGMENTS,         NULL },
+    { "CNV_DETAILS_SCORES"    , cg_eFileType_CNV_DETAILS_SCORES,         NULL },
+    { "CNV-DETAILS-SCORES"    , cg_eFileType_CNV_DETAILS_SCORES,         NULL },
+    { "CNV-DETAIL-SCORES"     , cg_eFileType_CNV_DETAILS_SCORES,         NULL },
+    { "TUMOR_DETAILS_SCORES"  , cg_eFileType_TUMOR_DETAILS_SCORES,       NULL },
+    { "TUMOR-DETAILS-SCORES"  , cg_eFileType_TUMOR_DETAILS_SCORES,       NULL },
+    { "NONDIPLOID-SOMATIC-CNV-SEGMENTS",
+                           cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-DETAILS",
+                           cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS,  NULL },
+    { "JUNCTIONS"        , cg_eFileType_JUNCTIONS,                       NULL },
+    { "JUNCTION-DNBS"    , cg_eFileType_JUNCTION_DNBS,                   NULL },
+    { "SV-EVENTS"        , cg_eFileType_SV_EVENTS,                       NULL },
+    { "VAR-OLPL"         , cg_eFileType_VAR_OLPL,                        NULL },
+    { "MEI"              , cg_eFileType_MEI,                             NULL },
+    /* from Standard Sequencing Service Data File Formats file test */
+    { "TUMOR-CNV-DETAILS", cg_eFileType_TUMOR_CNV_DETAILS,               NULL },
+    { "DIPLOID-SOMATIC-CNV-SEGMENTS"
+                         , cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS,    NULL },
+    { "COVERAGE-DISTRIBUTION-CODING"
+                            , cg_eFileType_COVERAGE_DISTRIBUTION_CODING, NULL },
+    { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC_CODING,       NULL },
+    { "LIB-SMALL-GAPS-ROLLUP", cg_eFileType_LIB_SMALL_GAPS_ROLLUP,       NULL },
+    /* from Cancer Sequencing Service Data File Formats file test */
+    { "DIPLOID-SOMATIC-CNV-DETAILSCORES"
+                       , cg_eFileType_DIPLOID_SOMATIC_CNV_DETAIL_SCORES, NULL },
+
+    { "TAG_LFR"        , cg_eFileType_TAG_LFR,                CGTagLfr25_Make },
+};
+
+rc_t CGFile25_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/factory-cmn.h b/tools/cg-load/factory-cmn.h
new file mode 100644
index 0000000..61b97cb
--- /dev/null
+++ b/tools/cg-load/factory-cmn.h
@@ -0,0 +1,57 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_cmh_h_
+#define _tools_cg_load_factory_cmh_h_
+
+#include <klib/defs.h>
+#include "defs.h"
+
+typedef CGFIELD_LIBRARY_TYPE CGFIELD15_LIBRARY[32];
+typedef CGFIELD_SAMPLE_TYPE CGFIELD15_SAMPLE[32];
+typedef CGFIELD_SLIDE_TYPE CGFIELD15_SLIDE[CG_SLIDE];
+typedef CGFIELD_LANE_TYPE CGFIELD15_LANE[CG_LANE];
+typedef CGFIELD_CHROMOSOME_TYPE CGFIELD15_CHROMOSOME[CG_CHROMOSOME_NAME];
+typedef CGFIELD_ASSEMBLY_ID_TYPE CGFIELD15_ASSEMBLY_ID[50];
+typedef CGFIELD_SOFTWARE_VERSION_TYPE CGFIELD15_SOFTWARE_VERSION[38];
+typedef CGFIELD_DBSNP_BUILD_TYPE CGFIELD15_DBSNP_BUILD[8];
+typedef CGFIELD_COSMIC_TYPE CGFIELD15_COSMIC[8];
+typedef CGFIELD_PFAM_DATE_TYPE CGFIELD15_PFAM_DATE[16];
+typedef CGFIELD_MIRBASE_VERSION_TYPE CGFIELD15_MIRBASE_VERSION[8];
+typedef CGFIELD_DGV_VERSION_TYPE CGFIELD15_DGV_VERSION[16];
+typedef CGFIELD_GENERATED_AT_TYPE CGFIELD15_GENERATED_AT[32];
+typedef CGFIELD_GENERATED_BY_TYPE CGFIELD15_GENERATED_BY[32];
+typedef CGFIELD_GENE_ANNOTATIONS_TYPE CGFIELD15_GENE_ANNOTATIONS[16];
+typedef CGFIELD_GENOME_REFERENCE_TYPE CGFIELD15_GENOME_REFERENCE[16];
+typedef CGFIELD_BATCH_FILE_NUMBER_TYPE CGFIELD15_BATCH_FILE_NUMBER;
+typedef CGFIELD_BATCH_OFFSET_TYPE CGFIELD15_BATCH_OFFSET;
+typedef CGFIELD_FIELD_SIZE_TYPE CGFIELD15_FIELD_SIZE;
+typedef CGFIELD_MAX_PLOIDY_TYPE CGFIELD15_MAX_PLOIDY;
+typedef CGFIELD_WINDOW_SHIFT_TYPE CGFIELD15_WINDOW_SHIFT;
+typedef CGFIELD_WINDOW_WIDTH_TYPE CGFIELD15_WINDOW_WIDTH;
+typedef CGFIELD_NUMBER_LEVELS_TYPE CGFIELD15_NUMBER_LEVELS;
+typedef CGFIELD_MEAN_LEVEL_X_TYPE CGFIELD15_MEAN_LEVEL_X;
+
+#endif /* _tools_cg_load_factory_cmh_h_ */
diff --git a/tools/cg-load/factory-evidence-dnbs.c b/tools/cg-load/factory-evidence-dnbs.c
new file mode 100644
index 0000000..0f5065e
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.c
@@ -0,0 +1,625 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "debug.h"
+
+#include "factory-cmn.h"
+#include "factory-evidence-dnbs.h"
+
+typedef struct CGEvidenceDnbs15 CGEvidenceDnbs15;
+#define CGFILETYPE_IMPL CGEvidenceDnbs15
+#include "file.h"
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct CGEvidenceDnbs15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_CHROMOSOME chromosome;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGEvidenceDnbs15_Release(const CGEvidenceDnbs15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Header(const CGEvidenceDnbs15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static rc_t CC CGEvidenceDnbs25_Header(
+    const CGEvidenceDnbs15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+
+    /* from SRA-2617 files */
+    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
+    }
+    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
+    }
+    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
+    }
+
+    /* From Table 1: Header Metadata Present in all Data Files */
+    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
+    }
+    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
+    }
+    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
+    }
+
+    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->assembly_id, sizeof(self->assembly_id));
+    }
+    else if (strncmp("CHROMOSOME\t", buf, slen = 11) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->chromosome, sizeof(self->chromosome));
+    }
+    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_at, sizeof(self->generated_at));
+    }
+    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_by, sizeof(self->generated_by));
+    }
+    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->sample, sizeof(self->sample));
+    }
+    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->software_version, sizeof(self->software_version));
+    }
+    else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+
+    return rc;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetAssemblyId(const CGEvidenceDnbs15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetSample(const CGEvidenceDnbs15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    if( cself->sample[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *sample = cself->sample;
+    return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetChromosome(const CGEvidenceDnbs15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    if( cself->chromosome[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *chromosome = cself->chromosome;
+    return 0;
+}
+
+static rc_t CC CGEvidenceDnbs_Read(
+    const CGEvidenceDnbs15* cself, const char* interval_id,
+    TEvidenceDnbsData* data, int score_allele_num)
+{
+    rc_t rc = 0;
+    TEvidenceDnbsData_dnb* m = NULL;
+    static TEvidenceDnbsData_dnb next_rec;
+    static char next_interval_id[32] = "";
+
+    /* local copy of unused TEvidenceDnbsData_dnb struct elements */
+    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    INSDC_coord_zero mate_offset_in_reference;
+    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    uint16_t score_allele[4] = {0, 0, 0, 0}; /* v1.5 has ScoreAllele[012]; v2.0 - [0123] */
+    char qual[CG_EVDNC_SPOT_LEN];
+
+    strcpy(data->interval_id, interval_id);
+    data->qty = 0;
+    /* already read one rec for this interval_id */
+    if( next_interval_id[0] != '\0' ) {
+        if( strcmp(next_interval_id, interval_id) != 0 ) {
+            /* nothing todo since next interval id is different */
+            return rc;
+        }
+        m = &data->dnbs[data->qty++];
+        memmove(m, &next_rec, sizeof(next_rec));
+        DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                        "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n",
+            data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+            m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+            m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+            m->mapping_quality, m->read_len, m->read));
+    }
+    do {
+        int i = 0;
+        char tmp[2];
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            next_interval_id[0] = '\0';
+            break; /* EOF */
+        }
+        if( data->qty >= data->max_qty ) {
+            TEvidenceDnbsData_dnb* x;
+            data->max_qty += 100;
+            x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty);
+            if( x == NULL ) {
+                rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted);
+                break;
+            }
+            data->dnbs = x;
+        }
+        m = &data->dnbs[data->qty++];
+
+        /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->slide, sizeof(m->slide));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->lane, sizeof(m->lane));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u32(b, p - b, &m->file_num_in_lane);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->allele_index);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != 'L' && tmp[0] != 'R' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->side = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != '+' && tmp[0] != '-' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->strand = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_allele);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment));
+        m->allele_alignment_length = p - b;
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &mate_offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->mapping_quality = tmp[0];
+        for (i = 0; i < score_allele_num; ++i) {
+            CG_LINE_NEXT_FIELD(b, len, p);
+            rc = str2u16(b, p - b, &score_allele[i]);
+	    if(rc){
+		score_allele[i] =0;
+		rc =0;
+	    }
+        }
+        CG_LINE_NEXT_FIELD(b, len, p);
+        m->read_len = p - b;
+        rc = str2buf(b, m->read_len, m->read, sizeof(m->read));
+        CG_LINE_LAST_FIELD(b, len, p);
+        if( m->read_len != p - b ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent);
+        } else {
+            rc = str2buf(b, p - b, qual, sizeof(qual));
+        }
+        ((CGEvidenceDnbs15*)cself)->records++;
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            if (score_allele_num == 3) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual));
+            }
+            else if (score_allele_num == 4) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual));
+            }
+            else { assert(0); }
+        }
+        CG_LINE_END();
+        if( next_interval_id[0] == '\0' ) {
+            break;
+        }
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            /* next record is from next interval, remeber it and stop */
+            memmove(&next_rec, m, sizeof(next_rec));
+            data->qty--;
+            break;
+        }
+    } while( rc == 0 );
+    return rc;
+}
+
+static rc_t CC CGEvidenceDnbs25_Read(const CGEvidenceDnbs15 *cself,
+     const char *interval_id, TEvidenceDnbsData *data)
+{
+    const int score_allele_num = 4;
+    rc_t rc = 0;
+    TEvidenceDnbsData_dnb* m = NULL;
+    static TEvidenceDnbsData_dnb next_rec;
+    static char next_interval_id[32] = "";
+
+    /* local copy of unused TEvidenceDnbsData_dnb struct elements */
+    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    INSDC_coord_zero mate_offset_in_reference;
+    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    uint16_t score_allele[4] = {0, 0, 0, 0}; /* v >= 2.0 has ScoreAllele[0-3] */
+    char qual[CG_EVDNC_SPOT_LEN];
+
+    bool lfr = false;
+    assert(cself->file->cg_file);
+    lfr = cself->file->cg_file->libraryType == cg_eLibraryType_PureLFR;
+
+    strcpy(data->interval_id, interval_id);
+    data->qty = 0;
+    /* already read one rec for this interval_id */
+    if( next_interval_id[0] != '\0' ) {
+        if( strcmp(next_interval_id, interval_id) != 0 ) {
+            /* nothing todo since next interval id is different */
+            return rc;
+        }
+        m = &data->dnbs[data->qty++];
+        memmove(m, &next_rec, sizeof(next_rec));
+        DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                        "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n",
+            data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+            m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+            m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+            m->mapping_quality, m->read_len, m->read));
+    }
+    do {
+        int i = 0;
+        char tmp[2];
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            next_interval_id[0] = '\0';
+            break; /* EOF */
+        }
+        if( data->qty >= data->max_qty ) {
+            TEvidenceDnbsData_dnb* x;
+            data->max_qty += 100;
+            x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty);
+            if( x == NULL ) {
+                rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted);
+                break;
+            }
+            data->dnbs = x;
+        }
+        m = &data->dnbs[data->qty++];
+
+        /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->slide, sizeof(m->slide));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->lane, sizeof(m->lane));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u32(b, p - b, &m->file_num_in_lane);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->allele_index);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != 'L' && tmp[0] != 'R' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->side = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != '+' && tmp[0] != '-' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->strand = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_allele);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment));
+        m->allele_alignment_length = p - b;
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &mate_offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->mapping_quality = tmp[0];
+        for (i = 0; i < score_allele_num; ++i) {
+            CG_LINE_NEXT_FIELD(b, len, p);
+            rc = str2u16(b, p - b, &score_allele[i]);
+	        if (rc != 0) {
+		        score_allele[i] = 0;
+		        rc = 0;
+	        }
+        }
+        CG_LINE_NEXT_FIELD(b, len, p);
+        m->read_len = p - b;
+        rc = str2buf(b, m->read_len, m->read, sizeof(m->read));
+
+        /* Scores */
+        if (lfr) {
+            CG_LINE_NEXT_FIELD(b, len, p);
+        }
+        else {
+            CG_LINE_LAST_FIELD(b, len, p);
+        }
+        if (m->read_len != p - b) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent);
+        }
+        else {
+            rc = str2buf(b, p - b, qual, sizeof(qual));
+        }
+
+        if (lfr) {
+         /* Standard Sequencing Service Data File Formats (File format v2.5)
+            states that Scores is the last column in evidenceDnbs file
+            but in 2.5 submission mentioned in SRA-2617
+            there are additionally wellId and wellScore columns.
+            #LIBRARY_TYPE is Pure LFR for this submission. */
+
+            /* wellId */
+            CG_LINE_NEXT_FIELD(b, len, p);
+            rc = str2u16(b, p - b, &m->wellId);
+            if (rc == 0 && (m->wellId < 0 || m->wellId > 384)) {
+                rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+            }
+
+            /* wellScore */
+            CG_LINE_LAST_FIELD(b, len, p);
+        }
+
+        ((CGEvidenceDnbs15*)cself)->records++;
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            if (score_allele_num == 3) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual));
+            }
+            else if (score_allele_num == 4) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual));
+            }
+            else { assert(0); }
+        }
+        CG_LINE_END();
+        if( next_interval_id[0] == '\0' ) {
+            break;
+        }
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            /* next record is from next interval, remeber it and stop */
+            memmove(&next_rec, m, sizeof(next_rec));
+            data->qty--;
+            break;
+        }
+    } while( rc == 0 );
+    return rc;
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{   return CGEvidenceDnbs_Read(self, interval_id, data, 3); }
+
+static
+rc_t CC CGEvidenceDnbs20_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{   return CGEvidenceDnbs_Read(self, interval_id, data, 4); }
+
+static const CGFileType_vt CGEvidenceDnbs15_vt =
+{
+    CGEvidenceDnbs15_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_Read,
+    NULL, /* tag_lfr */
+    CGEvidenceDnbs15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_GetSample,
+    CGEvidenceDnbs15_GetChromosome,
+    CGEvidenceDnbs15_Release
+};
+
+static const CGFileType_vt CGEvidenceDnbs20_vt =
+{
+    CGEvidenceDnbs15_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs20_Read,
+    NULL, /* tag_lfr */
+    CGEvidenceDnbs15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_GetSample,
+    CGEvidenceDnbs15_GetChromosome,
+    CGEvidenceDnbs15_Release
+};
+
+static const CGFileType_vt CGEvidenceDnbs25_vt = {
+    CGEvidenceDnbs25_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs25_Read,
+    NULL, /* tag_lfr */
+    CGEvidenceDnbs15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_GetSample,
+    CGEvidenceDnbs15_GetChromosome,
+    CGEvidenceDnbs15_Release
+};
+
+static
+rc_t CC CGEvidenceDnbs_Make(const CGFileType** cself, const CGLoaderFile* file,
+                              const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGEvidenceDnbs15* obj = NULL;
+
+    assert(vt);
+
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_EVIDENCE_DNBS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGEvidenceDnbs15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGEvidenceDnbs15_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs15_vt); }
+
+rc_t CC CGEvidenceDnbs13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs15_Make(self, file); }
+
+rc_t CC CGEvidenceDnbs20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
+
+rc_t CC CGEvidenceDnbs22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
+
+rc_t CC CGEvidenceDnbs25_Make(const CGFileType** self, const CGLoaderFile* file)
+{
+    return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs25_vt);
+}
diff --git a/tools/cg-load/factory-evidence-dnbs.h b/tools/cg-load/factory-evidence-dnbs.h
new file mode 100644
index 0000000..1fa0194
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_dnbs_h_
+#define _tools_cg_load_factory_evidence_dnbs_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGEvidenceDnbs13_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs15_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs20_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs22_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs25_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+
+
+#endif /* _tools_cg_load_factory_evidence_dnbs_h_ */
diff --git a/tools/cg-load/factory-evidence-intervals.c b/tools/cg-load/factory-evidence-intervals.c
new file mode 100644
index 0000000..339a02d
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.c
@@ -0,0 +1,396 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "debug.h"
+#include "factory-cmn.h"
+#include "factory-evidence-intervals.h"
+
+typedef struct CGEvidenceIntervals15 CGEvidenceIntervals15;
+#define CGFILETYPE_IMPL CGEvidenceIntervals15
+#include "file.h"
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct CGEvidenceIntervals15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_CHROMOSOME chromosome;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGEvidenceIntervals15_Header(const CGEvidenceIntervals15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static rc_t CC CGEvidenceIntervals25_Header(const CGEvidenceIntervals15* cself,
+    const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen = 0;
+    CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+
+    /* from SRA-2617 files */
+    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
+    }
+    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
+    }
+    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
+    }
+
+    /* From Table 1: Header Metadata Present in all Data Files */
+    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
+    }
+    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
+    }
+    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
+    }
+
+    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->assembly_id, sizeof(self->assembly_id));
+    }
+    else if (strncmp("CHROMOSOME\t", buf, slen = 11) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->chromosome, sizeof(self->chromosome));
+    }
+    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_at, sizeof(self->generated_at));
+    }
+    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_by, sizeof(self->generated_by));
+    }
+    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->sample, sizeof(self->sample));
+    }
+    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->software_version, sizeof(self->software_version));
+    }
+    else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+
+    return rc;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetAssemblyId(const CGEvidenceIntervals15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetSample(const CGEvidenceIntervals15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    if( cself->sample[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *sample = cself->sample;
+    return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetChromosome(const CGEvidenceIntervals15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    if( cself->chromosome[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *chromosome = cself->chromosome;
+    return 0;
+}
+
+static
+rc_t CC CGEvidenceIntervals15_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->offset);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u32(b, p - b, &data->length);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u16(b, p - b, &data->ploidy);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->score);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+    data->allele_length[0] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+    data->allele_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+    data->allele_length[2] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+    data->allele_alignment_length[1] = p - b;
+    CG_LINE_LAST_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+    data->allele_alignment_length[2] = p - b;
+    ((CGEvidenceIntervals15*)cself)->records++;
+    DEBUG_MSG(10, ("evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+        data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+        data->allele_indexes, data->score, data->allele[0], data->allele[1], data->allele[2],
+        data->allele_alignment[1], data->allele_alignment[2]));
+    CG_LINE_END();
+    return rc;
+}
+
+static
+rc_t CC CGEvidenceIntervals20_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->offset);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u32(b, p - b, &data->length);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u16(b, p - b, &data->ploidy);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->scoreVAF);
+    data->score = data->scoreVAF; /***TODO: do we need re-calculation? ***/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->scoreEAF);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+    data->allele_length[0] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+    data->allele_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+    data->allele_length[2] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[3], sizeof(data->allele[3]));
+    data->allele_length[3] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+    data->allele_alignment_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+    data->allele_alignment_length[2] = p - b;
+    CG_LINE_LAST_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[3], sizeof(data->allele_alignment[3]));
+    data->allele_alignment_length[3] = p - b;
+    ((CGEvidenceIntervals15*)cself)->records++;
+    DEBUG_MSG(10, (
+        "evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+        data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+        data->allele_indexes, data->scoreVAF, data->scoreEAF,
+        data->allele[0], data->allele[1], data->allele[2], data->allele[3],
+        data->allele_alignment[1], data->allele_alignment[2], data->allele_alignment[3]));
+    CG_LINE_END();
+    return rc;
+}
+
+static
+void CC CGEvidenceIntervals15_Release(const CGEvidenceIntervals15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static const CGFileType_vt CGEvidenceIntervals15_vt =
+{
+    CGEvidenceIntervals15_Header,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_Read,
+    NULL,
+    NULL, /* tag_lfr */
+    CGEvidenceIntervals15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_GetSample,
+    CGEvidenceIntervals15_GetChromosome,
+    CGEvidenceIntervals15_Release
+};
+
+static const CGFileType_vt CGEvidenceIntervals20_vt =
+{
+    CGEvidenceIntervals15_Header,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals20_Read,
+    NULL,
+    NULL, /* tag_lfr */
+    CGEvidenceIntervals15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_GetSample,
+    CGEvidenceIntervals15_GetChromosome,
+    CGEvidenceIntervals15_Release
+};
+
+static const CGFileType_vt CGEvidenceIntervals25_vt = {
+    CGEvidenceIntervals25_Header,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals20_Read,
+    NULL,
+    NULL, /* tag_lfr */
+    CGEvidenceIntervals15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_GetSample,
+    CGEvidenceIntervals15_GetChromosome,
+    CGEvidenceIntervals15_Release
+};
+
+static
+rc_t CGEvidenceIntervals_Make(const CGFileType** cself, const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGEvidenceIntervals15* obj = NULL;
+
+    assert(vt);
+
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    if( rc == 0 ) {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_EVIDENCE_INTERVALS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGEvidenceIntervals15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CGEvidenceIntervals15_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals15_vt); }
+
+rc_t CGEvidenceIntervals13_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals15_Make(self, file); }
+
+rc_t CGEvidenceIntervals20_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals20_vt); }
+
+rc_t CGEvidenceIntervals22_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals20_Make(self, file); }
+
+rc_t CGEvidenceIntervals25_Make(const CGFileType **self,
+    const CGLoaderFile *file)
+{
+    return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals25_vt);
+}
diff --git a/tools/cg-load/factory-evidence-intervals.h b/tools/cg-load/factory-evidence-intervals.h
new file mode 100644
index 0000000..4f781f1
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_intervals_h_
+#define _tools_cg_load_factory_evidence_intervals_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGEvidenceIntervals13_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals15_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals20_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals22_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals25_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+
+
+#endif /* _tools_cg_load_factory_evidence_intervals_h_ */
diff --git a/tools/cg-load/factory-file.h b/tools/cg-load/factory-file.h
new file mode 100644
index 0000000..43fbbcb
--- /dev/null
+++ b/tools/cg-load/factory-file.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_file_h_
+#define _tools_cg_load_factory_file_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGFile13_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile15_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile17_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile20_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile22_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile24_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile25_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_file_h_ */
diff --git a/tools/cg-load/factory-mappings.c b/tools/cg-load/factory-mappings.c
new file mode 100644
index 0000000..8434c84
--- /dev/null
+++ b/tools/cg-load/factory-mappings.c
@@ -0,0 +1,539 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+
+#include "debug.h"
+#include "factory-cmn.h"
+#include "factory-mappings.h"
+
+typedef struct CGMappings15 CGMappings15;
+#define CGFILETYPE_IMPL CGMappings15
+#include "file.h"
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+
+struct CGMappings15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_LANE lane;
+    CGFIELD15_LIBRARY library;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SLIDE slide;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGMappings15_Release(const CGMappings15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGMappings15* self = (CGMappings15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGMappings15_Header(const CGMappings15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGMappings15* self = (CGMappings15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if( self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static rc_t CC CGMappings25_Header(const CGMappings15* cself,
+    const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen = 0;
+    CGMappings15* self = (CGMappings15*)cself;
+
+    /* from SRA-2617 files */
+    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
+    }
+    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
+    }
+    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
+    }
+
+    /* From Table 1: Header Metadata Present in all Data Files */
+    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
+    }
+    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
+    }
+    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
+    }
+
+    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->assembly_id, sizeof(self->assembly_id));
+    }
+    else if (strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if (self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    }
+    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_at, sizeof(self->generated_at));
+    }
+    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_by, sizeof(self->generated_by));
+    }
+    else if (strncmp("LANE\t", buf, slen = 5) == 0) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    }
+    else if (strncmp("LIBRARY\t", buf, slen = 8) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->library, sizeof(self->library));
+    }
+    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->sample, sizeof(self->sample));
+    }
+    else if (strncmp("SLIDE\t", buf, slen = 6) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->slide, sizeof(self->slide));
+    }
+    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->software_version, sizeof(self->software_version));
+    }
+    else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+
+    return rc;
+}
+
+static
+rc_t CGMappings15_GetAssemblyId(const CGMappings15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetSlide(const CGMappings15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    if( cself->slide[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *slide = cself->slide;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetLane(const CGMappings15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    if( cself->lane[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *lane = cself->lane;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetBatchFileNumber(const CGMappings15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    *batch_file_number = &cself->batch_file_number;
+    return 0;
+}
+
+static
+rc_t CC CGMappings15_Read(const CGMappings15* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+    TMappingsData_map* m = NULL;
+
+    data->map_qty = 0;
+    do {
+        char tmp[2];
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+            break;
+        }
+        m = &data->map[data->map_qty];
+        m->saved = false;
+        /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->flags);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[0]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[1]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[2]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->weight = tmp[0];
+        CG_LINE_LAST_FIELD(b, len, p);
+        if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+        } else if( m->flags > 7 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+        }
+        ((CGMappings15*)cself)->records++;
+        DEBUG_MSG(10, ("mappings %4u:  %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\n",
+                        data->map_qty - 1, m->flags, m->chr, m->offset,
+                        m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate));
+        CG_LINE_END();
+    } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = data->map_qty;
+        
+        for (i = 0; i != n && rc == 0; ++i) {
+            unsigned const mate = data->map[i].mate;
+            
+            if (mate > n)
+                data->map[i].mate = i;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t CC CGMappings22_Read(const CGMappings15* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+    TMappingsData_map* m = NULL;
+
+    data->map_qty = 0;
+    do {
+        char tmp[2];
+        char armWeight = '\0';
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+            break;
+        }
+        m = &data->map[data->map_qty];
+        m->saved = false;
+        /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->flags);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[0]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[1]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[2]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->weight = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+        } else if( m->flags > 7 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+        }
+        CG_LINE_LAST_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if (tmp[0] < 33 || tmp[0] > 126)
+        {   rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); }
+        armWeight = tmp[0]; /* ignore armWeight */
+        ((CGMappings15*)cself)->records++;
+        DEBUG_MSG(10, ("mappings %4u:  %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\t%c\n",
+            data->map_qty - 1, m->flags, m->chr, m->offset,
+            m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate, armWeight));
+        armWeight += 0; /* shut up used variable warning in release build */
+        CG_LINE_END();
+    } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = data->map_qty;
+        
+        for (i = 0; i != n && rc == 0; ++i) {
+            unsigned const mate = data->map[i].mate;
+            
+            if (mate > n)
+                data->map[i].mate = n;
+        }
+    }
+    return rc;
+}
+
+static rc_t CC CGMappings25_Read(
+    const CGMappings15 *cself, TMappingsData *data)
+{
+    rc_t rc = 0;
+    TMappingsData_map* m = NULL;
+
+    assert(cself);
+
+    data->map_qty = 0;
+    do {
+        char tmp[2];
+        char armWeight = '\0';
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+            break;
+        }
+        m = &data->map[data->map_qty];
+        m->saved = false;
+        /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->flags);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[0]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[1]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[2]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->weight = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+        } else if( m->flags > 7 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+        }
+        CG_LINE_LAST_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if (rc == 0 && (tmp[0] < 33 || tmp[0] > 126)) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        armWeight = tmp[0]; /* ignore armWeight */
+        ((CGMappings15*)cself)->records++;
+        DEBUG_MSG(10, ("mappings %4u:  %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\t%c\n",
+            data->map_qty - 1, m->flags, m->chr, m->offset,
+            m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate, armWeight));
+        armWeight += 0; /* shut up used variable warning in release build */
+
+        if (rc == 0) {
+            assert(m->gap[2] == 0);
+            if (m->gap[2] != 0) {
+                rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+            }
+            if (m->flags & cg_eRevDnbStrand) {
+                assert(m->gap[0] == -1);
+                if (m->gap[0] != -1) {
+                    rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+                }
+            }
+            else {
+                assert(m->gap[1] == -1);
+                if (m->gap[1] != -1) {
+                    rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+                }
+            }
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Bad gap value in mapping file (File format >= v2.5)");
+            }
+        }
+
+        CG_LINE_END();
+    } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = data->map_qty;
+        
+        for (i = 0; i != n && rc == 0; ++i) {
+            unsigned const mate = data->map[i].mate;
+            
+            if (mate > n)
+                data->map[i].mate = n;
+        }
+    }
+    return rc;
+}
+
+static const CGFileType_vt CGMappings15_vt =
+{
+    CGMappings15_Header,
+    NULL,
+    NULL,
+    CGMappings15_Read,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    CGMappings15_GetAssemblyId,
+    CGMappings15_GetSlide,
+    CGMappings15_GetLane,
+    CGMappings15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGMappings15_Release
+};
+
+static const CGFileType_vt CGMappings22_vt =
+{
+    CGMappings15_Header,
+    NULL,
+    NULL,
+    CGMappings22_Read,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    CGMappings15_GetAssemblyId,
+    CGMappings15_GetSlide,
+    CGMappings15_GetLane,
+    CGMappings15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGMappings15_Release
+};
+
+static const CGFileType_vt CGMappings25_vt = {
+    CGMappings25_Header,
+    NULL,
+    NULL,
+    CGMappings25_Read,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    CGMappings15_GetAssemblyId,
+    CGMappings15_GetSlide,
+    CGMappings15_GetLane,
+    CGMappings15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGMappings15_Release
+};
+
+static
+rc_t CC CGMappings_Make(const CGFileType** cself,
+    const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGMappings15* obj = NULL;
+    
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_MAPPINGS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGMappings15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGMappings15_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings_Make(self, file, &CGMappings15_vt); }
+
+rc_t CC CGMappings13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings_Make(self, file, &CGMappings22_vt); }
+
+rc_t CC CGMappings25_Make(const CGFileType **self, const CGLoaderFile *file)
+{
+    return CGMappings_Make(self, file, &CGMappings25_vt);
+}
diff --git a/tools/cg-load/factory-mappings.h b/tools/cg-load/factory-mappings.h
new file mode 100644
index 0000000..428352b
--- /dev/null
+++ b/tools/cg-load/factory-mappings.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_mappings_h_
+#define _tools_cg_load_factory_mappings_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGMappings13_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings15_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings20_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings22_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings25_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+
+
+#endif /* _tools_cg_load_factory_mappings_h_ */
diff --git a/tools/cg-load/factory-reads.c b/tools/cg-load/factory-reads.c
new file mode 100644
index 0000000..be194e5
--- /dev/null
+++ b/tools/cg-load/factory-reads.c
@@ -0,0 +1,448 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "debug.h"
+#include "factory-cmn.h"
+#include "factory-reads.h"
+
+typedef struct CGReads15 CGReads15;
+#define CGFILETYPE_IMPL CGReads15
+#include "file.h"
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+struct CGReads15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    int64_t start_rowid;
+    char spot_group[512];
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+    CGFIELD15_BATCH_OFFSET batch_offset;
+    CGFIELD15_FIELD_SIZE field_size;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_LANE lane;
+    CGFIELD15_LIBRARY library;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SLIDE slide;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGReads15_Header(const CGReads15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGReads15* self = (CGReads15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if( self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) {
+        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+    } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->field_size);
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static rc_t CC CGReads25_Header(const CGReads15* cself,
+    const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen = 0;
+    CGReads15* self = (CGReads15*)cself;
+
+    /* from SRA-2617 files */
+    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
+    }
+    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
+    }
+    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
+    }
+
+    /* From Table 1: Header Metadata Present in all Data Files */
+    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
+    }
+    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
+    }
+    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
+    }
+
+    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->assembly_id, sizeof(self->assembly_id));
+    }
+    else if (strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if (self->batch_file_number < 1) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    }
+    else if (strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0) {
+        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+    }
+    else if (strncmp("FIELD_SIZE\t", buf, slen = 11) == 0) {
+        rc = str2u32(&buf[slen], len - slen, &self->field_size);
+    }
+    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_at, sizeof(self->generated_at));
+    }
+    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_by, sizeof(self->generated_by));
+    }
+    else if (strncmp("LANE\t", buf, slen = 5) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->lane, sizeof(self->lane));
+    }
+    else if (strncmp("LIBRARY\t", buf, slen = 8) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->library, sizeof(self->library));
+    }
+    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->sample, sizeof(self->sample));
+    }
+    else if (strncmp("SLIDE\t", buf, slen = 6) == 0) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    }
+    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->software_version, sizeof(self->software_version));
+    }
+    else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+
+    return rc;
+}
+
+static
+rc_t CGReads15_GetAssemblyId(const CGReads15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetSlide(const CGReads15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    if( cself->slide[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *slide = cself->slide;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetLane(const CGReads15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    if( cself->lane[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *lane = cself->lane;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetBatchFileNumber(const CGReads15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    *batch_file_number = &cself->batch_file_number;
+    return 0;
+}
+
+
+static rc_t CC CGReads15_Read(const CGReads15* cself, TReadsData* data) {
+    rc_t rc = 0;
+
+    if (cself->start_rowid == 0) {
+        ((CGReads15*)cself)->start_rowid = data->rowid;
+    }
+    CG_LINE_START(cself->file, b, len, p);
+    if (b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("reads: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if ((rc = str2u16(b, p - b, &data->flags)) != 0) {
+    }
+    else if (data->flags > 10) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+    }
+    else if ((data->flags & 0x03) == 3 || (data->flags & 0x07) == 7) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    CG_LINE_NEXT_FIELD(b, len, p);
+    data->seq.sequence.elements = p - b;
+    if (data->seq.sequence.elements != CG_READS15_SPOT_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    else {
+        rc = str2buf(b, data->seq.sequence.elements,
+            data->read, sizeof(data->read));
+        /* clear cache, set in algnment writer */
+        data->reverse[0] = '\0';
+        data->reverse[CG_READS15_SPOT_LEN / 2] = '\0';
+    }
+    CG_LINE_LAST_FIELD(b, len, p);
+    data->seq.quality.elements = p - b;
+    if (data->seq.quality.elements != CG_READS15_SPOT_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    else {
+        rc = str2buf(b, data->seq.quality.elements,
+            data->qual, sizeof(data->qual));
+    }
+    data->seq.spot_len = CG_READS15_SPOT_LEN;
+
+    data->reads_format = 0x01050000;
+
+    if (cself->records == 0) {
+        size_t w;
+        
+#if 0
+    rc = string_printf(((CGReads15*)cself)->spot_group,
+        sizeof(cself->spot_group), &w, "%s:%s:%s:%04u", cself->assembly_id,
+        cself->slide, cself->lane, cself->batch_file_number);
+#else
+        rc = string_printf(((CGReads15*)cself)->spot_group,
+            sizeof(cself->spot_group), &w, "%s-%s", cself->slide, cself->lane);
+#endif
+        data->seq.spot_group.buffer = cself->spot_group;
+        data->seq.spot_group.elements = w;
+    }
+    ((CGReads15*)cself)->records++;
+    DEBUG_MSG(10,
+        ("reads:  %u\t'%s'\t'%s'\n", data->flags, data->read, data->qual));
+    CG_LINE_END();
+
+    return rc;
+}
+
+static rc_t CC CGReads25_Read(const CGReads15* cself, TReadsData* data) {
+    rc_t rc = 0;
+
+    if (cself->start_rowid == 0) {
+        ((CGReads15*)cself)->start_rowid = data->rowid;
+    }
+    CG_LINE_START(cself->file, b, len, p);
+    if (b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("reads: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if ((rc = str2u16(b, p - b, &data->flags)) != 0) {
+    }
+    else if (data->flags > 10) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+    }
+    else if ((data->flags & 0x03) == 3 || (data->flags & 0x07) == 7) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    CG_LINE_NEXT_FIELD(b, len, p);
+    data->seq.sequence.elements = p - b;
+    if (data->seq.sequence.elements != CG_READS25_SPOT_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    else {
+        rc = str2buf(b, data->seq.sequence.elements,
+            data->read, sizeof(data->read));
+        /* clear cache, set in algnment writer */
+        data->reverse[0] = '\0';
+        data->reverse[CG_READS25_SPOT_LEN / 2] = '\0';
+    }
+    CG_LINE_LAST_FIELD(b, len, p);
+    data->seq.quality.elements = p - b;
+    if (data->seq.quality.elements != CG_READS25_SPOT_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    else {
+        rc = str2buf(b, data->seq.quality.elements,
+            data->qual, sizeof(data->qual));
+    }
+    data->seq.spot_len = CG_READS25_SPOT_LEN;
+
+    data->reads_format = 0x02050000;
+
+    if (cself->records == 0) {
+        size_t w;
+        
+        rc = string_printf(((CGReads15*)cself)->spot_group,
+            sizeof(cself->spot_group), &w, "%s-%s", cself->slide, cself->lane);
+        data->seq.spot_group.buffer = cself->spot_group;
+        data->seq.spot_group.elements = w;
+    }
+    ((CGReads15*)cself)->records++;
+    DEBUG_MSG(10,
+        ("reads:  %u\t'%s'\t'%s'\n", data->flags, data->read, data->qual));
+    CG_LINE_END();
+
+    return rc;
+}
+
+
+static
+rc_t CGReads15_GetStartRow(const CGReads15* cself, int64_t* rowid)
+{
+    *rowid = cself->start_rowid;
+    return 0;
+}
+
+static
+void CC CGReads15_Release(const CGReads15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGReads15* self = (CGReads15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static const CGFileType_vt CGReads15_vt =
+{
+    CGReads15_Header,
+    CGReads15_Read,
+    CGReads15_GetStartRow,
+    NULL,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    CGReads15_GetAssemblyId,
+    CGReads15_GetSlide,
+    CGReads15_GetLane,
+    CGReads15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGReads15_Release
+};
+
+static const CGFileType_vt CGReads25_vt = {
+    CGReads25_Header,
+    CGReads25_Read,
+    CGReads15_GetStartRow,
+    NULL,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    CGReads15_GetAssemblyId,
+    CGReads15_GetSlide,
+    CGReads15_GetLane,
+    CGReads15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGReads15_Release
+};
+
+static rc_t CC CGReads_Make(const CGFileType** cself,
+    const CGLoaderFile* file, const CGFileType_vt *vt)
+{
+    rc_t rc = 0;
+    CGReads15* obj = NULL;
+    
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    if( rc == 0 ) {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_READS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGReads15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGReads15_Make(const CGFileType** cself, const CGLoaderFile* file)
+{
+    return CGReads_Make(cself, file, &CGReads15_vt);
+}
+
+rc_t CC CGReads13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
+
+rc_t CC CGReads20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
+
+rc_t CC CGReads22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
+
+rc_t CC CGReads25_Make(const CGFileType **self, const CGLoaderFile *file) {
+    return CGReads_Make(self, file, &CGReads25_vt);
+}
diff --git a/tools/cg-load/factory-reads.h b/tools/cg-load/factory-reads.h
new file mode 100644
index 0000000..84bde21
--- /dev/null
+++ b/tools/cg-load/factory-reads.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_reads_h_
+#define _tools_cg_load_factory_reads_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGReads13_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads15_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads20_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads22_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads25_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+
+
+#endif /* _tools_cg_load_factory_reads_h_ */
diff --git a/tools/cg-load/factory-tag-lfr.c b/tools/cg-load/factory-tag-lfr.c
new file mode 100644
index 0000000..c986f64
--- /dev/null
+++ b/tools/cg-load/factory-tag-lfr.c
@@ -0,0 +1,376 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "debug.h"
+#include "factory-cmn.h"
+#include "factory-tag-lfr.h"
+
+typedef struct CGTagLfr CGTagLfr;
+#define CGFILETYPE_IMPL CGTagLfr
+#include "file.h"
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+struct CGTagLfr {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    int64_t start_rowid;
+    char spot_group[512];
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+    CGFIELD15_BATCH_OFFSET batch_offset;
+    CGFIELD15_FIELD_SIZE field_size;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_LANE lane;
+    CGFIELD15_LIBRARY library;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SLIDE slide;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+    CGFIELD_WELL_ID wellId;
+};
+
+
+static rc_t CC CGTagLfr15_Header(const CGTagLfr* cself,
+    const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGTagLfr* self = (CGTagLfr*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if( self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) {
+        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+    } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->field_size);
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static rc_t CC CGTagLfr25_Header(const CGTagLfr* cself,
+    const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGTagLfr* self = (CGTagLfr*)cself;
+
+    /* from SRA-2617 files */
+    if      (strncmp("APPROVAL\t", buf, slen = 9) == 0) {
+    }
+    else if (strncmp("TITLE\t", buf, slen = 6) == 0) {
+    }
+    else if (strncmp("ADDRESS\t", buf, slen = 8) == 0) {
+    }
+
+    /* From Table 1: Header Metadata Present in all Data Files */
+    else if (strncmp("CUSTOMER_SAMPLE_ID\t", buf, slen = 19) == 0) {
+    }
+    else if (strncmp("SAMPLE_SOURCE\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("REPORTED_GENDER\t", buf, slen = 16) == 0) {
+    }
+    else if (strncmp("CALLED_GENDER\t", buf, slen = 14) == 0) {
+    }
+    else if (strncmp("TUMOR_STATUS\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_TYPE\t", buf, slen = 13) == 0) {
+    }
+    else if (strncmp("LIBRARY_SOURCE\t", buf, slen = 13) == 0) {
+    }
+
+    else if (strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->assembly_id, sizeof(self->assembly_id));
+    }
+    else if (strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if (self->batch_file_number < 1) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    }
+    else if (strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0) {
+        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+    }
+    else if (strncmp("FIELD_SIZE\t", buf, slen = 11) == 0) {
+        rc = str2u32(&buf[slen], len - slen, &self->field_size);
+    }
+    else if (strncmp("GENERATED_AT\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_at, sizeof(self->generated_at));
+    }
+    else if (strncmp("GENERATED_BY\t", buf, slen = 13) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->generated_by, sizeof(self->generated_by));
+    }
+    else if (strncmp("LANE\t", buf, slen = 5) == 0) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    }
+    else if (strncmp("LIBRARY\t", buf, slen = 8) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->library, sizeof(self->library));
+    }
+    else if (strncmp("SAMPLE\t", buf, slen = 7) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->sample, sizeof(self->sample));
+    }
+    else if (strncmp("SLIDE\t", buf, slen = 6) == 0) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    }
+    else if (strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0) {
+        rc = str2buf(&buf[slen], len - slen,
+            self->software_version, sizeof(self->software_version));
+    }
+    else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+
+    return rc;
+}
+
+
+static rc_t CGTagLfr15_GetAssemblyId(const CGTagLfr* cself,
+    const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static rc_t CGTagLfr15_GetSlide(const CGTagLfr* cself,
+    const CGFIELD_SLIDE_TYPE** slide)
+{
+    if( cself->slide[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *slide = cself->slide;
+    return 0;
+}
+
+static rc_t CGTagLfr15_GetLane(const CGTagLfr* cself,
+    const CGFIELD_LANE_TYPE** lane)
+{
+    if( cself->lane[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *lane = cself->lane;
+    return 0;
+}
+
+static rc_t CGTagLfr15_GetBatchFileNumber(const CGTagLfr* cself,
+    const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    *batch_file_number = &cself->batch_file_number;
+    return 0;
+}
+
+static rc_t CGTagLfr15_GetStartRow(
+    const CGTagLfr* cself, int64_t* rowid)
+{
+    *rowid = cself->start_rowid;
+    return 0;
+}
+
+static rc_t CC CGTagLfr15_GetTagLfr(
+    const CGFILETYPE_IMPL* cself, TReadsData* data)
+{
+    rc_t rc = 0;
+    uint16_t wellScore = 0;
+    if( cself->start_rowid == 0 ) {
+        ((CGTagLfr*)cself)->start_rowid = data->rowid;
+    }
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+        break;
+    }
+    /* reads */
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if (p - b != CG_TAG_LFR_DATA_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    /* scores */
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if (p - b != CG_TAG_LFR_DATA_LEN) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+
+    /* wellId */
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if ((rc = str2u16(b, p - b, &((CGTagLfr*)cself)->wellId)) != 0) {
+    }
+    else if (cself->wellId < 0 || cself->wellId > 384) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+    }
+
+    /* wellScore */
+    CG_LINE_LAST_FIELD(b, len, p);
+    rc = str2u16(b, p - b, &wellScore);
+
+    if (rc == 0) {
+        size_t w = 0;
+        if (cself->wellId != 0) {
+            rc = string_printf(((CGTagLfr*)cself)->spot_group,
+                sizeof(cself->spot_group), &w, "%s-%s#%03d",
+                cself->slide, cself->lane, cself->wellId);
+        }
+        else {
+            rc = string_printf(((CGTagLfr*)cself)->spot_group,
+                sizeof(cself->spot_group), &w, "%s-%s",
+                cself->slide, cself->lane);
+        }
+        data->seq.spot_group.buffer = cself->spot_group;
+        data->seq.spot_group.elements = w;
+    }
+
+    ((CGTagLfr*)cself)->records++;
+
+    DEBUG_MSG(10, ("tag-lfr:  '%.*s'\t%d\n",
+        (int32_t)data->seq.spot_group.elements, data->seq.spot_group.buffer, 
+        cself->wellId));
+
+    CG_LINE_END();
+
+    return rc;
+}
+
+static
+void CC CGTagLfr15_Release(const CGTagLfr* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGTagLfr* self = (CGTagLfr*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static const CGFileType_vt CGTagLfr15_vt =
+{
+    CGTagLfr15_Header,
+    NULL,
+    CGTagLfr15_GetStartRow,
+    NULL,
+    NULL,
+    NULL,
+    CGTagLfr15_GetTagLfr, /* tag_lfr */
+    CGTagLfr15_GetAssemblyId,
+    CGTagLfr15_GetSlide,
+    CGTagLfr15_GetLane,
+    CGTagLfr15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGTagLfr15_Release
+};
+
+static const CGFileType_vt CGTagLfr25_vt =
+{
+    CGTagLfr25_Header,
+    NULL,
+    CGTagLfr15_GetStartRow,
+    NULL,
+    NULL,
+    NULL,
+    CGTagLfr15_GetTagLfr, /* tag_lfr */
+    CGTagLfr15_GetAssemblyId,
+    CGTagLfr15_GetSlide,
+    CGTagLfr15_GetLane,
+    CGTagLfr15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGTagLfr15_Release
+};
+
+static rc_t CC CGTagLfr_Make(const CGFileType **cself,
+    const CGLoaderFile *file, const CGFileType_vt *vt)
+{
+    rc_t rc = 0;
+    CGTagLfr* obj = NULL;
+    
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    if( rc == 0 ) {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_TAG_LFR;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGTagLfr15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGTagLfr15_Make(const CGFileType **cself,
+    const CGLoaderFile *file)
+{
+    return CGTagLfr_Make(cself, file, &CGTagLfr15_vt);
+}
+
+rc_t CC CGTagLfr25_Make(const CGFileType **cself,
+    const CGLoaderFile *file)
+{
+    return CGTagLfr_Make(cself, file, &CGTagLfr25_vt);
+}
diff --git a/tools/cg-load/factory-tag-lfr.h b/tools/cg-load/factory-tag-lfr.h
new file mode 100644
index 0000000..95a706e
--- /dev/null
+++ b/tools/cg-load/factory-tag-lfr.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_tag_lfr_h_
+#define _tools_cg_load_factory_tag_lfr_h_
+
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGTagLfr15_Make(const struct CGFileType** self,
+                      const struct CGLoaderFile* file);
+rc_t CC CGTagLfr25_Make(const struct CGFileType** self,
+                      const struct CGLoaderFile* file);
+
+
+#endif /* _tools_cg_load_factory_tag_lfr_h_ */
diff --git a/tools/cg-load/file-version-factory.c b/tools/cg-load/file-version-factory.c
new file mode 100644
index 0000000..d5637bd
--- /dev/null
+++ b/tools/cg-load/file-version-factory.c
@@ -0,0 +1,165 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-file.h" /* CGFile15_Make ... */
+
+typedef struct CGIgnored CGIgnored;
+#define CGFILETYPE_IMPL CGIgnored
+#include "file.h" /* CGLoaderFile */
+
+#include <sysalloc.h>
+
+#include <assert.h>
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+    uint32_t FORMAT_VERSION, const char* TYPE)
+{
+    assert(self && !self->cg_file);
+
+    switch (FORMAT_VERSION) {
+        case 0x01030000:
+            return CGFile13_Make(&self->cg_file, TYPE, self);
+        case 0x01050000:
+        case 0x01060000:
+            return CGFile15_Make(&self->cg_file, TYPE, self);
+        case 0x01070000:
+            return CGFile17_Make(&self->cg_file, TYPE, self);
+        case 0x02000000:
+            return CGFile20_Make(&self->cg_file, TYPE, self);
+        case 0x02020000:
+            return CGFile22_Make(&self->cg_file, TYPE, self);
+        case 0x02040000:
+            return CGFile24_Make(&self->cg_file, TYPE, self);
+        case 0x02050000:
+            return CGFile25_Make(&self->cg_file, TYPE, self);
+        default: {
+            const char* name = NULL;
+            rc_t rc = CGLoaderFile_Filename(self, &name);
+            if (rc != 0 || name == NULL)
+            {   name = " | UNKNOWN | "; }
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcBadVersion);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Unexpected #FORMAT_VERSION value '$(FORMAT_VERSION)' "
+                "in CG file '$(name)'",
+                "FORMAT_VERSION=%X,name=%s", FORMAT_VERSION, name));
+            return rc;
+        }
+    }
+}
+
+struct CGIgnored {
+    CGFileType dad;
+};
+
+static
+void CC CGIgnored_Release(const CGIgnored* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGIgnored* self = (CGIgnored*)cself;
+        if( records != NULL ) {
+            *records = 0;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGIgnored_Header(const CGIgnored* cself,
+    const char* buf, const size_t len)
+{
+    return 0;
+}
+
+static const CGFileType_vt CGIgnored_vt =
+{
+    CGIgnored_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL, /* tag_lfr */
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGIgnored_Release
+};
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+    const CGFileTypeFactory* factory, size_t factories,
+    const CGFileType** ftype)
+{
+    rc_t rc = 0;
+    CGIgnored* obj = NULL;
+    uint32_t i;
+
+    if (self == NULL || type == NULL ||
+        factory == NULL || factories == 0 || ftype == NULL)
+    {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    else {
+        *ftype = NULL;
+
+        for (i = 0; i < factories; ++i) {
+            if (strcmp(type, factory[i].name) == 0) {
+                if (factory[i].make != NULL) {
+                    return factory[i].make(ftype, self);
+                } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+                    rc = RC(rcRuntime,
+                        rcFile, rcConstructing, rcMemory, rcExhausted);
+                } else {
+                    obj->dad.vt = &CGIgnored_vt;
+                    obj->dad.type = factory[i].type;
+                }
+                break;
+            }
+        }
+
+        if( obj == NULL ) {
+            const char* name = NULL;
+            rc = CGLoaderFile_Filename(self, &name);
+            if (rc != 0 || name == NULL)
+            {   name = " | UNKNOWN | "; }
+
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcUnrecognized);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Unexpected header #TYPE value '$(TYPE)' in CG file '$(name)'",
+                "TYPE=%s,name=%s", type, name));
+        }
+    }
+
+    if( rc == 0 ) {
+        *ftype = &obj->dad;
+    }
+    else {
+        CGIgnored_Release(obj, NULL);
+    }
+
+    return rc;
+}
diff --git a/tools/cg-load/file.c b/tools/cg-load/file.c
new file mode 100644
index 0000000..1fcecff
--- /dev/null
+++ b/tools/cg-load/file.c
@@ -0,0 +1,516 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+
+#include "debug.h"
+#include "defs.h"
+#include "factory-file.h"
+#include "file.h"
+
+#include <kapp/loader-file.h>
+
+#include <kfs/directory.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/status.h>
+
+#include <strtol.h>
+#include <sysalloc.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof)
+{
+    return KLoaderFile_IsEof(cself ? cself->file : NULL, eof);
+}
+
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself)
+{
+    const char* nm;
+
+    if( KLoaderFile_FullName(cself ? cself->file : NULL, &nm) == 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "File $(file) done", "severity=status,file=%s", nm));
+    }
+    return KLoaderFile_Close(cself ? cself->file : NULL);
+}
+
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line)
+{
+    return KLoaderFile_Line(cself ? cself->file : NULL, line);
+}
+
+
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself,
+    const void** buffer, size_t* length)
+{
+    return KLoaderFile_Readline(cself ? cself->file : NULL, buffer, length);
+}
+
+rc_t CGLoaderFile_Filename(
+    const CGLoaderFile* cself, const char** name)
+{
+    return KLoaderFile_Name(cself ? cself->file : NULL, name);
+}
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl,
+    rc_t rc, const char *msg, const char *fmt, ...)
+{
+    if( cself != NULL ) {
+        va_list args;
+        va_start(args, fmt);
+        rc = KLoaderFile_VLOG(cself->file, lvl, rc, msg, fmt, args);
+        va_end(args);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored)
+{
+    rc_t rc = 0;
+
+    if( cself ) {
+        CGLoaderFile* self = (CGLoaderFile*)cself;
+        /* may return md5 check error here */
+        if( self->cg_file && self->cg_file->vt->destroy ) {
+            uint64_t recs = 0;
+            self->cg_file->vt->destroy(self->cg_file, &recs);
+            if( rc == 0 && !ignored ) {
+                const char* name = NULL;
+                CGLoaderFile_Filename(cself, &name);
+                STSMSG(0, ("file %s %lu records", name, recs));
+            }
+        }
+        rc = KLoaderFile_Release(self->file, ignored);
+        free(self);
+    }
+    return rc;
+}
+
+static rc_t parse_version(const char* buf, size_t len, uint32_t* v) {
+    rc_t rc = 0;
+    int i = 0;
+    int64_t q;
+    char* end = (char*)buf;
+    const size_t sz = sizeof(*v) / sizeof(char);
+
+    *v = 0;
+    do {
+        if( i == sz ) {
+            rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+        } else {
+            q = strtoi64(end, &end, 10);
+            if( q < 0 || q > 255 ) {
+                rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+            } else if( *end == '.' ) {
+                end++;
+            } else if( end - buf < len ) {
+                rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+            }
+            *v = *v | ((uint8_t)q << ((sz - ++i) * 8));
+        }
+    } while( rc == 0 && end - buf < len);
+    return rc;
+}
+
+static
+rc_t _CGLoaderFileParseLibraryType(const CGLoaderFile *self,
+    const char *buf, size_t len, uint32_t *t)
+{
+    char libraryType[64] = "";
+    rc_t rc = str2buf(buf, len, libraryType, sizeof(libraryType));
+    if (rc != 0) {
+        return rc;
+    }
+    assert(t);
+    /* From Standard Sequencing Service Data File Formats. File format v2.5 */
+    switch (libraryType[0]) {
+        case 'P': {
+            const char n[] = "PureLFR" ; /* From File format v2.5  */
+            const char s[] = "Pure LFR"; /* From submission in SRA-2617 */
+            if (string_cmp(n, sizeof n - 1, libraryType,
+                    string_measure(libraryType, NULL), sizeof n - 1) == 0
+              ||string_cmp(s, sizeof s - 1, libraryType,
+                    string_measure(libraryType, NULL), sizeof s - 1) == 0)
+            {
+                *t = cg_eLibraryType_PureLFR;
+            }
+            else {
+                rc = RC(rcRuntime, rcFile, rcConstructing,
+                    rcData, rcUnrecognized);
+            }
+            break;
+        }
+        case 'M': {
+            const char l[] = "Mixed-LFR";
+            const char s[] = "Mixed-STD";
+            if (string_cmp(l, sizeof l - 1, libraryType,
+                string_measure(libraryType, NULL), sizeof l - 1) == 0)
+            {
+                *t = cg_eLibraryType_MixedLFR;
+            }
+            else if (string_cmp(s, sizeof s - 1, libraryType,
+                string_measure(libraryType, NULL), sizeof s - 1) == 0)
+            {
+                *t = cg_eLibraryType_MixedSTD;
+            }
+            else {
+                rc = RC(rcRuntime, rcFile, rcConstructing,
+                    rcData, rcUnrecognized);
+            }
+            break;
+        }
+        case 'S': {
+            const char a[] = "Standard";
+            if (string_cmp(a, sizeof a - 1, libraryType,
+                string_measure(libraryType, NULL), sizeof a - 1) == 0)
+            {
+                *t = cg_eLibraryType_Standard;
+            }
+            else {
+                rc = RC(rcRuntime, rcFile, rcConstructing,
+                    rcData, rcUnrecognized);
+            }
+            break;
+        }
+        default:
+            rc = RC(rcRuntime, rcFile, rcConstructing,
+                rcData, rcUnrecognized);
+            break;
+    }
+    if (rc != 0) {
+        CGLoaderFile_LOG(self, klogErr, rc,
+            "unexpected LIBRARY_TYPE value <$(t)>", "t=%s", libraryType);
+    }
+    return rc;
+}
+
+static
+rc_t CGLoaderFile_header(const CGLoaderFile* cself)
+{
+    rc_t rc = 0;
+
+    if( cself->cg_file == NULL ) {
+        CGLoaderFile* self = (CGLoaderFile*)cself;
+        const char* buf;
+        size_t len;
+        uint32_t fver = 0;
+        char type[64] = "";
+        uint32_t libraryType = cg_eLibraryType_Unknown;
+
+        do {
+            if ((rc = CGLoaderFile_Readline(self, (const void**)&buf, &len))
+                == 0)
+            {
+                if( buf == NULL ) {
+                    rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+                } else if( len == 0 ) {
+                    /* empty line: skip */
+                } else if( buf[0] == '>' ) {
+                    /* start of records */
+                    break;
+                }
+                else if( buf[0] == '#' ) {
+                    len--; buf++;
+                    if      (strncmp("FORMAT_VERSION\t", buf, 15) == 0) {
+                        rc = parse_version(&buf[15], len - 15, &fver);
+                    }
+                    else if (strncmp("LIBRARY_TYPE\t", buf, 13) == 0) {
+                        rc = _CGLoaderFileParseLibraryType(cself,
+                            &buf[13], len - 13, &libraryType);
+                    }
+                    else if (strncmp("TYPE\t", buf, 5) == 0) {
+                        rc = str2buf(&buf[5], len - 5, type, sizeof(type));
+                    }
+                }
+                else {
+                    rc = RC(rcRuntime, rcFile, rcConstructing,
+                        rcData, rcUnrecognized);
+                }
+            }
+        } while (rc == 0 && self->cg_file == NULL);
+
+        if (rc == 0) {
+            rc = CGLoaderFile_CreateCGFile(self, fver, type);
+
+            if( rc == 0 ) {
+                CGFileType* f = (CGFileType*)self->cg_file;
+                f->format_version = fver;
+                f->libraryType    = libraryType;
+
+                if (f->type == cg_eFileType_Unknown ||
+                    !f->vt || !f->vt->header)
+                {
+                    rc = RC(rcRuntime, rcFile, rcConstructing,
+                        rcInterface, rcIncomplete);
+                }
+            }
+            if( rc == 0 ) {
+                /* we need to restart file for loading all header by sub class */
+                KLoaderFile_Reset(self->file);
+            }
+            while (rc == 0) {
+                if( (rc = CGLoaderFile_Readline(self, (const void**)&buf, &len)) == 0 ) {
+                    if( buf == NULL ) {
+                        rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+                    } else if( len == 0 ) {
+                        /* empty line: skip */
+                    } else if( buf[0] == '>' ) {
+                        /* start of records */
+                        break;
+                    } else if( buf[0] == '#' ) {
+                        if( strncmp("FORMAT_VERSION\t", &buf[1], 15) != 0 && strncmp("TYPE\t", &buf[1], 5) != 0 ) {
+                            rc = cself->cg_file->vt->header(cself->cg_file, &buf[1], len - 1);
+                        }
+                    } else {
+                        rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcUnrecognized);
+                    }
+                }
+            }
+        }
+        /* close file after file is processed, but stay at data start */
+        KLoaderFile_SetReadAhead(self->file, self->read_ahead);
+        KLoaderFile_Close(self->file);
+    }
+
+    return rc;
+}
+
+rc_t CGLoaderFile_Make(const CGLoaderFile** cself, const KDirectory* dir, const char* filename,
+                       const uint8_t* md5_digest, bool read_ahead)
+{
+    rc_t rc = 0;
+    CGLoaderFile* obj = NULL;
+
+    if( cself == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcSelf, rcNull);
+    } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+    } else if( (rc = KLoaderFile_Make(&obj->file, dir, filename, md5_digest, false)) == 0 ) {
+        obj->read_ahead = read_ahead;
+    }
+    if( rc == 0 ) {
+        *cself = obj;
+    } else {
+        CGLoaderFile_Release(obj, true);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || type == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcClassifying, rcParam, rcNull);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        *type = cself->cg_file->type;
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_READS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->reads == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->reads(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetTagLfr(const CGLoaderFile* cself, TReadsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_TAG_LFR ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->tag_lfr == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->tag_lfr(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || rowid == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_READS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->get_start_row == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->get_start_row(cself->cg_file, rowid);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_MAPPINGS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->mappings == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->mappings(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_INTERVALS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->evidence_intervals == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->evidence_intervals(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || interval_id == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_DNBS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->evidence_dnbs == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->evidence_dnbs(cself->cg_file, interval_id, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || assembly_id == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->assembly_id == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->assembly_id(cself->cg_file, assembly_id);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || slide == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->slide == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->slide(cself->cg_file, slide);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || lane == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->lane == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->lane(cself->cg_file, lane);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || batch_file_number == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->batch_file_number == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->batch_file_number(cself->cg_file, batch_file_number);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || sample == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->sample == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->sample(cself->cg_file, sample);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || chromosome == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->chromosome == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->chromosome(cself->cg_file, chromosome);
+    }
+    return rc;
+}
diff --git a/tools/cg-load/file.h b/tools/cg-load/file.h
new file mode 100644
index 0000000..c3eea89
--- /dev/null
+++ b/tools/cg-load/file.h
@@ -0,0 +1,334 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_file_h_
+#define _tools_cg_load_file_h_
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include "defs.h"
+#include "writer-seq.h"
+#include "writer-algn.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <strtol.h>
+
+
+/* some usefull utils */
+/* strchr but in fixed size buffer (not asciiZ!) */
+static __inline__ const char* str_chr(const char* str, const size_t len, char sep)
+{
+    const char* end = str + len;
+    while( str < end ) {
+        if( *str == sep ) {
+            break;
+        }
+        str++;
+    }
+    return str == end ? NULL : str;
+}
+
+static __inline__
+rc_t str2buf(const char* str, const size_t len, char* buf, const size_t buf_sz)
+{
+    if( buf_sz <= len ) {
+        rc_t rc = RC(rcRuntime, rcString, rcCopying, rcBuffer, rcInsufficient);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,  "'$(str)': $(sz) <= $(len)",
+                "str=%.*s,sz=%lu,len=%lu", len, str, buf_sz, len));
+        }
+        return rc;
+    }
+    memmove(buf, str, len);
+    buf[len] = '\0';
+    return 0;
+}
+
+static __inline__
+rc_t str2unsigned(const char* str, const size_t len, uint64_t max, uint64_t* value)
+{
+    char* end;
+    int64_t q;
+
+    if( len == 0 ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+    }
+    q = strtou64(str, &end, 10);
+    if( end - str != len ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+    }
+    if( q < 0 || ( uint64_t ) q > max ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+    }
+    *value = q;
+    return 0;
+}
+static __inline__
+rc_t str2u64(const char* str, const size_t len, uint64_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, -1, &q)) == 0 ) {
+        *value = q;
+    }
+    return rc;
+}
+
+static __inline__
+rc_t str2signed(const char* str, const size_t len, int64_t min, int64_t max, int64_t* value)
+{
+    char* end;
+    int64_t q;
+
+    if( len == 0 ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+    }
+    q = strtoi64(str, &end, 10);
+    if( end - str != len ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+    }
+    if( q < min || q > max ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+    }
+    *value = q;
+    return 0;
+}
+static __inline__
+rc_t str2i64(const char* str, const size_t len, int64_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+#if _ARCH_BITS == 32
+    if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL, &q)) == 0 ) {
+        *value = q;
+    }
+#else
+    if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFL, 0x7FFFFFFFFFFFFFFFL, &q)) == 0 ) {
+        *value = q;
+    }
+#endif
+    return rc;
+}
+static __inline__
+rc_t str2i32(const char* str, const size_t len, int32_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+    if( (rc = str2signed(str, len, -0x7FFFFFFF - 1, 0x7FFFFFFF, &q)) == 0 ) {
+        *value = ( int32_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2u32(const char* str, const size_t len, uint32_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, 0xFFFFFFFF, &q)) == 0 ) {
+        *value = ( uint32_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2i16(const char* str, const size_t len, int16_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+    if( (rc = str2signed(str, len, -0x7FFF - 1, 0x7FFF, &q)) == 0 ) {
+        *value = ( int16_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2u16(const char* str, const size_t len, uint16_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, 0xFFFF, &q)) == 0 ) {
+        *value = ( uint16_t ) q;
+    }
+    return rc;
+}
+#define CG_LINE_START(file, buf, len, res) \
+    do { \
+        const char* buf, *res; \
+        size_t len; \
+        if( (rc = CGLoaderFile_Readline(file, (const void**)&buf, &len)) != 0 ) { \
+            break; \
+        } \
+        res = buf - 1;
+
+#define CG_LINE_NEXT_FIELD(buf, len, res) \
+    if( rc != 0 ) { \
+        break; \
+    } else { \
+        len -= ++res - buf; \
+        buf = res; \
+        if( (res = str_chr(buf, len, '\t')) == NULL ) { \
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+            break; \
+        } \
+    }
+
+#define CG_LINE_LAST_FIELD(buf, len, res) \
+    if( rc != 0 ) { \
+        break; \
+    } else { \
+        len -= ++res - buf; \
+        buf = res; \
+        res = buf + len; \
+        if( str_chr(buf, len, '\t') != NULL ) { \
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+            break; \
+        } \
+    }
+
+#define CG_LINE_END() \
+    } while(false)
+
+#ifndef CGFILETYPE_IMPL
+#define CGFILETYPE_IMPL CGFileType
+#endif
+
+typedef struct CGFileType CGFileType;
+
+typedef struct CGFileType_vt_struct {
+    rc_t ( CC *header ) (const CGFILETYPE_IMPL* self, const char* buf, const size_t len);
+
+    rc_t ( CC *reads ) (const CGFILETYPE_IMPL* cself, TReadsData* data);
+    rc_t ( CC *get_start_row ) (const CGFILETYPE_IMPL* cself, int64_t* rowid);
+    rc_t ( CC *mappings ) (const CGFILETYPE_IMPL* cself, TMappingsData* data);
+    rc_t ( CC *evidence_intervals )(const CGFILETYPE_IMPL* cself, TEvidenceIntervalsData* data);
+    rc_t ( CC *evidence_dnbs )(const CGFILETYPE_IMPL* cself, const char* interval_id, TEvidenceDnbsData* data);
+    rc_t ( CC *tag_lfr )(const CGFILETYPE_IMPL* cself, TReadsData* data);
+
+    rc_t ( CC *assembly_id) (const CGFILETYPE_IMPL* self, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+    rc_t ( CC *slide) (const CGFILETYPE_IMPL* self, const CGFIELD_SLIDE_TYPE** slide);
+    rc_t ( CC *lane) (const CGFILETYPE_IMPL* self, const CGFIELD_LANE_TYPE** lane);
+    rc_t ( CC *batch_file_number) (const CGFILETYPE_IMPL* self, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+    rc_t ( CC *sample) (const CGFILETYPE_IMPL* self, const CGFIELD_SAMPLE_TYPE** sample);
+    rc_t ( CC *chromosome) (const CGFILETYPE_IMPL* self, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+    void ( CC *destroy ) (const CGFILETYPE_IMPL* self, uint64_t* records);
+} CGFileType_vt;
+
+struct CGFileType {
+    uint32_t format_version;
+    CG_EFileType type;
+    CG_ELibraryType libraryType;
+    const CGFileType_vt* vt;
+};
+
+typedef struct CGLoaderFile
+{
+    bool read_ahead;
+    const struct KLoaderFile *file;
+    const CGFileType* cg_file;
+} CGLoaderFile;
+
+typedef struct CGFileTypeFactory {
+    const char* name;
+    CG_EFileType type;
+    rc_t ( CC *make ) (const CGFileType** self, const CGLoaderFile* file);
+} CGFileTypeFactory;
+
+rc_t CGLoaderFile_Make(const CGLoaderFile **cself, const KDirectory* dir, const char* filename,
+                       const uint8_t* md5_digest, bool read_ahead);
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored);
+
+/* returns true if eof is reached and buffer is empty */
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof);
+
+/* closes the underlying file */
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself);
+
+/* returns current 1-based line number in file */
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line);
+
+rc_t CGLoaderFile_Filename(const CGLoaderFile *cself, const char** name);
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type);
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data);
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid);
+
+rc_t CGLoaderFile_GetTagLfr(const CGLoaderFile* cself, TReadsData* data);
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data);
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data);
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data);
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide);
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane);
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample);
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+
+/* Readline
+ *  makes next line from a file available in buffer.
+ *  eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
+ *  EOL symbol(s) never included in buffer length.
+ *  line is \0 terminated.
+ *  if there is no EOL at EOF - not an error.
+ *  fails if internal buffer is insufficient.
+ *  buffer is NULL on EOF
+ *  rc state of (rcString rcTooLong) means line was too long
+ *              you may copy line and readline again for the tail of the line
+ *
+ *  "buffer" [ OUT ] and "length" [ OUT ] - returned line and it's length
+ */
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself, const void** buffer, size_t* length);
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+    uint32_t FORMAT_VERSION, const char* TYPE);
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+    const CGFileTypeFactory* factory, size_t factories,
+    const CGFileType** ftype);
+
+#endif /* _tools_cg_load_file_h_ */
diff --git a/tools/cg-load/formats.c b/tools/cg-load/formats.c
new file mode 100644
index 0000000..e3808cc
--- /dev/null
+++ b/tools/cg-load/formats.c
@@ -0,0 +1,54 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "defs.h" /* CG_FORMAT_2_5 */
+#include "formats.h" /* get_cg_reads_ngaps */
+
+#include <assert.h>
+
+
+/* CG native format files have some changes since version 2.5 */
+
+
+uint32_t get_cg_reads_ngaps(uint32_t reads_format) {
+    assert(reads_format);
+
+    return reads_format < CG_FORMAT_2_5 ? 3 : 2;
+}
+
+/* IN FORMAT VERSION 2.5 SPOT LENGTH WAS CHANGES FROM 70 to 60 */
+uint32_t get_cg_read_len(uint32_t reads_format) {
+    uint32_t spot_len = CG_READS15_SPOT_LEN;
+
+    assert(reads_format);
+
+    if (reads_format >= CG_FORMAT_2_5) {
+        spot_len = CG_READS25_SPOT_LEN;
+    }
+
+    return spot_len / 2;
+}
diff --git a/tools/cg-load/formats.h b/tools/cg-load/formats.h
new file mode 100644
index 0000000..d378442
--- /dev/null
+++ b/tools/cg-load/formats.h
@@ -0,0 +1,41 @@
+#ifndef _tools_cg_load_formats_h_
+#define _tools_cg_load_formats_h_
+
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include <stdint.h> /* uint32_t */
+
+
+/* CG native format files have some changes since version 2.5 */
+
+
+uint32_t get_cg_reads_ngaps(uint32_t reads_format);
+uint32_t get_cg_read_len   (uint32_t reads_format);
+
+
+#endif /* _tools_cg_load_formats_h_ */
diff --git a/tools/cg-load/writer-algn.c b/tools/cg-load/writer-algn.c
new file mode 100644
index 0000000..4015250
--- /dev/null
+++ b/tools/cg-load/writer-algn.c
@@ -0,0 +1,825 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "debug.h" /* DEBUG_MSG */
+#include "defs.h" /* cg_eRightHalfDnbMap */
+#include "formats.h" /* get_cg_reads_ngaps */
+#include "writer-algn.h" /* CGWriterAlgn */
+
+#include <align/align.h> /* NCBI_align_ro_complete_genomics */
+#include <align/dna-reverse-cmpl.h> /* DNAReverseCompliment */
+
+#include <klib/log.h> /* PLOGERR */
+#include <klib/rc.h>
+#include <klib/sort.h> /* ksort */
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <math.h> /* pow */
+#include <string.h> /* strcmp */
+
+
+typedef struct CGWriterAlgn_match_struct {
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+    bool has_ref_offset[CG_READS15_SPOT_LEN];
+    int32_t ref_offset[CG_READS15_SPOT_LEN];
+    uint8_t ref_offset_type[CG_READS15_SPOT_LEN];
+    bool has_mismatch[CG_READS15_SPOT_LEN];
+    char mismatch[CG_READS15_SPOT_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    /* fill oud here */
+    int64_t seq_spot_id;
+    INSDC_coord_one seq_read_id;
+    bool ref_orientation;
+    uint32_t mapq;
+    /* used only only in secondary */
+    bool mate_ref_orientation;
+    int64_t mate_ref_id;
+    INSDC_coord_zero mate_ref_pos;
+    INSDC_coord_zero template_len;
+    INSDC_coord_len ref_len;
+} CGWriterAlgn_match;
+
+struct CGWriterAlgn {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* primary;
+    const TableWriterAlgn* secondary;
+    TableWriterAlgnData algn[CG_MAPPINGS_MAX];
+    CGWriterAlgn_match match[CG_MAPPINGS_MAX];
+    TMappingsData data;
+    uint32_t min_mapq;
+    bool single_mate;
+    uint64_t forced_pairs_cnt;
+    uint64_t dropped_mates_cnt;
+};
+    
+
+static uint32_t global_cluster_size;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+                       uint32_t min_mapq, bool single_mate, uint32_t cluster_size)
+{
+    rc_t rc = 0;
+    CGWriterAlgn* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->primary, db,
+                            ewalgn_tabletype_PrimaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ){
+            LOGERR(klogErr, rc, "primary alignment table");
+        } else if( (rc = TableWriterAlgn_Make(&self->secondary, db,
+                            ewalgn_tabletype_SecondaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ) {
+            LOGERR(klogErr, rc, "secondary alignment table");
+        } else {
+            int i;
+            /* interconnect buffers */
+            for(i = 0; i < CG_MAPPINGS_MAX; i++) {
+                self->algn[i].seq_spot_id.buffer = &self->match[i].seq_spot_id;
+                self->algn[i].seq_spot_id.elements = 1;
+                
+                self->algn[i].seq_read_id.buffer = &self->match[i].seq_read_id;
+                self->algn[i].seq_read_id.elements = 1;
+
+                self->algn[i].read_start.buffer = &self->match[i].read_start;
+                
+                self->algn[i].read_len.buffer = &self->match[i].read_len;
+                
+                self->algn[i].has_ref_offset.buffer = self->match[i].has_ref_offset;
+                
+                self->algn[i].ref_offset.buffer = self->match[i].ref_offset;
+                
+                self->algn[i].ref_offset_type.buffer = self->match[i].ref_offset_type;
+                
+                self->algn[i].ref_id.buffer = &self->match[i].ref_id;
+                
+                self->algn[i].ref_start.buffer = &self->match[i].ref_start;
+                
+                self->algn[i].has_mismatch.buffer = self->match[i].has_mismatch;
+                
+                self->algn[i].mismatch.buffer = self->match[i].mismatch;
+                
+                self->algn[i].ref_orientation.buffer = &self->match[i].ref_orientation;
+                self->algn[i].ref_orientation.elements = 1;
+                
+                self->algn[i].mapq.buffer = &self->match[i].mapq;
+                self->algn[i].mapq.elements = 1;
+                
+                self->algn[i].mate_ref_orientation.buffer = &self->match[i].mate_ref_orientation;
+                self->algn[i].mate_ref_orientation.elements = 1;
+                
+                self->algn[i].mate_ref_id.buffer = &self->match[i].mate_ref_id;
+                self->algn[i].mate_ref_id.elements = 1;
+                
+                self->algn[i].mate_ref_pos.buffer = &self->match[i].mate_ref_pos;
+                self->algn[i].mate_ref_pos.elements = 1;
+                
+                self->algn[i].template_len.buffer = &self->match[i].template_len;
+                self->algn[i].template_len.elements = 1;
+            }
+            self->rmgr = rmgr;
+            self->min_mapq = min_mapq;
+            self->single_mate = single_mate;
+            global_cluster_size = cluster_size;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterAlgn_Whack(self, false, NULL, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterAlgn* self = (CGWriterAlgn*)cself;
+        rc_t rc1 = TableWriterAlgn_Whack(cself->primary, commit, rows_1st);
+        rc_t rc2 = TableWriterAlgn_Whack(cself->secondary, commit, rows_2nd);
+        if( self->forced_pairs_cnt > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(forced_pairs_cnt) forced pairs to PRIMARY", "forced_pairs_cnt=%lu", self->forced_pairs_cnt));
+        }
+        if( self->dropped_mates_cnt > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(dropped_mates_cnt) dropped duplicate mates in SECONDARY", "dropped_mates_cnt=%lu", self->dropped_mates_cnt));
+        }
+        rc = rc1 ? rc1 : rc2;
+        free(self);
+    }
+    return rc;
+}
+
+static
+rc_t CGWriterAlgn_Save(CGWriterAlgn *const self,
+                       TReadsData *const rd,
+                       TableWriterAlgn const *const writer,
+                       uint32_t const mate,
+                       int64_t *const rowid)
+{
+    rc_t rc = 0;
+    TMappingsData_map *const map = &self->data.map[mate];
+
+    if( !map->saved ) {
+        CGWriterAlgn_match *const match = &self->match[mate];
+        TableWriterAlgnData *const algn = &self->algn[mate];
+
+        uint32_t g = 0;
+
+        uint32_t* cigar = NULL;
+        uint32_t left_cigar15 []={  5 << 4, 0, 10 << 4, 0, 10 << 4, 0,10 << 4 };
+        uint32_t right_cigar15[]={ 10 << 4, 0, 10 << 4, 0, 10 << 4, 0, 5 << 4 };
+        uint32_t left_cigar25 []={ 10 << 4, 0, 10 << 4, 0, 10 << 4, 0, 0 };
+        uint32_t right_cigar25[]={ 10 << 4, 0, 10 << 4, 0, 10 << 4, 0, 0 };
+        uint32_t *left_cigar  = NULL;
+        uint32_t *right_cigar = NULL;
+        uint32_t cg_reads_ngaps = 0;
+
+        const char *read = NULL;
+        uint32_t read_len = 0;
+
+        assert(rd);
+
+        cg_reads_ngaps = get_cg_reads_ngaps(rd->reads_format);
+
+        read_len = rd->seq.spot_len / 2;
+        if (cg_reads_ngaps == 3) {
+            left_cigar  = left_cigar15;
+            right_cigar = right_cigar15;
+        }
+        else if (cg_reads_ngaps == 2) {
+            left_cigar  = left_cigar25;
+            right_cigar = right_cigar25;
+        }
+        else {
+            assert(0);
+        }
+
+        if (match->seq_read_id == 2) {
+            read = &((const char*)(rd->seq.sequence.buffer))[read_len];
+            cigar = right_cigar;
+            g = read_len;
+        }
+        else {
+            read = rd->seq.sequence.buffer;
+            cigar = left_cigar;
+            g = 0;
+        }
+        if (match->ref_orientation) {
+            if( rd->reverse[g] == '\0' ) {
+                if( (rc = DNAReverseCompliment(read, &rd->reverse[g], read_len)) != 0) {
+                    return rc;
+                }
+                DEBUG_MSG(10, ("'%.*s' -> cg_eRevDnbStrand: '%.*s'\n", read_len, read, read_len, &rd->reverse[g]));
+            }
+            read = &rd->reverse[g];
+            cigar = (cigar == left_cigar) ? right_cigar : left_cigar;
+        }
+        for(g = 0; g < cg_reads_ngaps; g++) {
+            if( map->gap[g] > 0 ) {
+                cigar[g * 2 + 1] = (map->gap[g] << 4) | 3; /* 'xN' */
+            } else if( map->gap[g] < 0 ) {
+                cigar[g * 2 + 1] = (-map->gap[g] << 4) | 9; /* 'xB' */
+            } else {
+                cigar[g * 2 + 1] = 0; /* '0M' */
+            }
+        }
+        algn->ploidy = 0;
+        if( (rc = ReferenceMgr_Compress(self->rmgr, ewrefmgr_cmp_Binary,
+                    map->chr, map->offset, read, read_len, cigar, 7, 0, NULL, 0, 0, NULL, 0, NCBI_align_ro_complete_genomics, algn)) != 0 ) {
+            PLOGERR(klogErr, (klogErr, rc, "compression failed $(id) $(o)",
+                    PLOG_2(PLOG_S(id),PLOG_I32(o)), map->chr, map->offset));
+        }
+        else {
+#if 1
+            /* this is to try represent these alignments as unmated to match cgatools
+             * axf uses the row length of MATE_REF_ORIENTATION as the indicator of 
+             * mate presence
+             */
+            unsigned const save = algn->mate_ref_orientation.elements;
+            
+            if (map->mate == mate)
+                algn->mate_ref_orientation.elements = 0;
+            
+            rc = TableWriterAlgn_Write(writer, algn, rowid);
+            
+            if (map->mate == mate)
+                algn->mate_ref_orientation.elements = save;
+#else
+            rc = TableWriterAlgn_Write(writer, algn, rowid);
+#endif
+            map->saved = true;
+        }
+    }
+
+    return rc;
+}
+
+#if 1
+static
+double JointQ(double const Q1, double const Q2)
+{
+    double const P1 =   1.0 - pow(10.0, Q1/-10.0);  /* prob that  1  is not incorrect */
+    double const P2 =   1.0 - pow(10.0, Q2/-10.0);  /* prob that  2  is not incorrect */
+    double const Pj =   1.0 - P1*P2;                /* prob that 1+2   is   incorrect */
+    double const Q  = -10.0 * log10(Pj);
+    
+    return Q;
+}
+
+static
+unsigned FindBestPair(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    double maxq;
+    unsigned best = N;
+    
+    /* pick best of the reciprocal pairs */
+    for (i = 0, maxq = -1.0; i != N; ++i) {
+        unsigned const mate = data->map[i].mate;
+        bool const is_left = (data->map[i].flags & cg_eRightHalfDnbMap) == 0;
+        
+        if (mate < N && mate != i && data->map[mate].mate == i && is_left) {
+            double const Q1 = (int)data->map[i].weight - 33;
+            double const Q2 = (int)data->map[mate].weight - 33;
+            double const q = JointQ(Q1, Q2);
+
+            assert(Q1 >= 0);
+            assert(Q2 >= 0);
+            assert(q >= 0);
+            if (maxq < q) {
+                maxq = q;
+                best = i;
+            }
+        }
+    }
+    if (best < N)
+        return best;
+    
+    /* no reciprocal pairs, pick best of any pair */
+    for (i = 0, maxq = 0.0; i != N; ++i) {
+        unsigned const mate = data->map[i].mate;
+        if (mate < N && mate != i) {
+            double const Q1 = (int)data->map[i].weight - 33;
+            double const Q2 = (int)data->map[mate].weight - 33;
+            double const q = JointQ(Q1, Q2);
+            
+            assert(Q1 >= 0);
+            assert(Q2 >= 0);
+            assert(q >= 0);
+            if (maxq < q) {
+                maxq = q;
+                best = i;
+            }
+        }
+    }
+    if (best == N) {
+        /* no pair with a joint Q > 0; pick best mapping */
+        for (i = 0, maxq = 0.0; i != N; ++i) {
+            unsigned const mate = data->map[i].mate;
+            if (mate < N && mate != i) {
+                double const q = (int)data->map[i].weight - 33;
+                
+                if (maxq < q) {
+                    maxq = q;
+                    best = i;
+                }
+            }
+        }
+        if (best == N) {
+            /* no mapping with Q > 0; pick first */
+            for (i = 0, maxq = 0.0; i != N; ++i) {
+                unsigned const mate = data->map[i].mate;
+                if (mate < N && mate != i) {
+                    best = i;
+                    break;
+                }
+            }
+            if (best == N) {
+                /* give up */
+                return N;
+            }
+        }
+    }
+    {
+        /* make the pair reciprocal */
+        unsigned const mate = data->map[best].mate;
+        
+        if (mate < N) {
+            data->map[mate].mate = best;
+            return (data->map[best].flags & cg_eRightHalfDnbMap) ? mate : best;
+        }
+        return N;
+    }
+}
+
+static
+unsigned FindBestLeft(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    unsigned best;
+    int maxq;
+    
+    for (best = N, maxq = -1, i = 0; i != N; ++i) {
+        int const q = (int)data->map[i].weight;
+        
+        if ((data->map[i].flags & cg_eRightHalfDnbMap) == 0 && maxq < q) {
+            maxq = q;
+            best = i;
+        }
+    }
+    return best;
+}
+
+static
+unsigned FindBestRight(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    unsigned best;
+    int maxq;
+    
+    for (best = N, maxq = -1, i = 0; i != N; ++i) {
+        int const q = (int)data->map[i].weight;
+        
+        if ((data->map[i].flags & cg_eRightHalfDnbMap) != 0 && maxq < q) {
+            maxq = q;
+            best = i;
+        }
+    }
+    return best;
+}
+
+static
+bool check_in_cluster(TMappingsData_map const *const a, TMappingsData_map const *const b)
+{
+	if (   (a->flags & cg_eRightHalfDnbMap) == (b->flags & cg_eRightHalfDnbMap)
+        && (strcmp(a->chr, b->chr) == 0)
+        && abs((int)a->offset - (int)b->offset) <= global_cluster_size)
+    {
+        return true;
+	}
+	return false;
+}
+
+static
+int64_t clustering_sort_cb(void const *const A, void const *const B, void *const ctx)
+{
+    TMappingsData const *const data = (TMappingsData const *)ctx;
+    unsigned const ia = *(unsigned const *)A;
+    unsigned const ib = *(unsigned const *)B;
+    TMappingsData_map const *const a = &data->map[ia];
+    TMappingsData_map const *const b = &data->map[ib];
+    int64_t res;
+    unsigned j = 0;
+    
+	res = (int64_t)(a->flags & cg_eRightHalfDnbMap) - (int64_t)(b->flags & cg_eRightHalfDnbMap); /**** separate by DNP side ***/
+	if (res) return res;
+    
+    res = strcmp(a->chr, b->chr); /* same chromosome ? **/
+	if (res) return res;
+    
+	res = (a->offset - b->offset) / (global_cluster_size + 1); /***  is it within the range ***/
+	if (res) return res;
+    
+	/**cluster is defined here; now pick the winner **/
+	res = (int64_t)a->saved - (int64_t)b->saved; /*** if already saved **/
+	if (res) return -res;
+    
+	res = (int64_t)a->weight - (int64_t)b->weight; /*** has  higher score **/
+	if (res) return -res;
+
+    res = 0;
+    assert(data->cg_reads_ngaps);
+    for (j = 0; j != data->cg_reads_ngaps; ++j) {
+        res += (int64_t)(a->gap[j]) - (int64_t)(b->gap[j]);
+    } /** has lower projection on the reference **/
+
+    return res;
+}
+
+static
+void cluster_mates(TMappingsData *const data)
+{
+    unsigned index[CG_MAPPINGS_MAX];
+    unsigned i;
+    unsigned j;
+    
+    for (i = 0; i != data->map_qty; ++i)
+        index[i] = i;
+    
+    ksort(index, data->map_qty, sizeof(index[0]), clustering_sort_cb, data);
+    for (i = 0, j = 1; j != data->map_qty; ++j) {
+        unsigned const ii = index[i];
+        unsigned const ij = index[j];
+        TMappingsData_map *const a = &data->map[ij];
+        TMappingsData_map const *const b = &data->map[ii];
+        
+        if (check_in_cluster(a, b)) {
+            unsigned const a_mate = a->mate;
+            unsigned const b_mate = b->mate;
+            
+            if (   a_mate == ij /** remove singletons **/
+                || a_mate == b_mate) /** or cluster originator has the same mate **/
+            {
+                a->saved = true;
+                DEBUG_MSG(10, ("mapping %u was dropped as a part of cluster at mapping %u\n", ij, ii));
+            }
+        }
+        else
+            i = j;
+    }
+}
+
+static
+INSDC_coord_zero template_length(unsigned const self_left,
+                                 unsigned const mate_left,
+                                 unsigned const self_len,
+                                 unsigned const mate_len,
+                                 unsigned const read_id)
+{
+    /* adapted from libs/axf/template_len.c */
+    unsigned const self_right = self_left + self_len;
+    unsigned const mate_right = mate_left + mate_len;
+    unsigned const  leftmost  = (self_left  < mate_left ) ? self_left  : mate_left;
+    unsigned const rightmost  = (self_right > mate_right) ? self_right : mate_right;
+    unsigned const tlen = rightmost - leftmost;
+    
+    /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+    if (   (self_left <= mate_left && self_right >= mate_right)     /* mate fully contained within self or */
+        || (mate_left <= self_left && mate_right >= self_right))    /* self fully contained within mate; */
+    {
+        if (self_left < mate_left || (read_id == 1 && self_left == mate_left))
+            return (INSDC_coord_zero)tlen;
+        else
+            return -(INSDC_coord_zero)tlen;
+    }
+    else if (   (self_right == mate_right && mate_left == leftmost) /* both are rightmost, but mate is leftmost */
+             ||  self_right == rightmost)
+    {
+        return -(INSDC_coord_zero)tlen;
+    }
+    else
+        return (INSDC_coord_zero)tlen;
+}
+
+static
+rc_t CGWriterAlgn_Write_int(CGWriterAlgn *const self, TReadsData *const read)
+{
+    TMappingsData *const data = &self->data;
+    unsigned const N = data->map_qty;
+    rc_t rc = 0;
+
+    if (N != 0) {
+        unsigned left_prime = N;
+        unsigned right_prime = N;
+        unsigned i;
+        unsigned countLeft  = 0;
+        unsigned countRight = 0;
+
+        assert(read);
+
+        data->cg_reads_ngaps = get_cg_reads_ngaps(read->reads_format);
+        assert(data->cg_reads_ngaps);
+
+        for (i = 0; i != N; ++i) {
+            char const *const refname = data->map[i].chr;
+            unsigned j;
+            INSDC_coord_len reflen = read->seq.spot_len / 2;
+            ReferenceSeq const *rseq;
+            bool shouldUnmap = false;
+            bool wasRenamed = false;
+            
+            memset(&self->match[i], 0, sizeof(self->match[i]));
+            
+            rc = ReferenceMgr_GetSeq(self->rmgr, &rseq, refname, &shouldUnmap, true, &wasRenamed);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed accessing Reference '$(ref)'", "ref=%s", refname));
+                break;
+            }
+            assert(shouldUnmap == false);
+            rc = ReferenceSeq_Get1stRow(rseq, &self->match[i].ref_id); /* if the above worked, this is infallible */
+            assert(rc == 0);
+            ReferenceSeq_Release(rseq);
+            
+            for (j = 0; j != data->cg_reads_ngaps; ++j) {
+                reflen += data->map[i].gap[j];
+            }
+            
+            self->match[i].seq_spot_id = read->rowid;
+            self->match[i].mapq = data->map[i].weight - 33;
+            self->match[i].ref_orientation = (data->map[i].flags & cg_eRevDnbStrand) ? true : false;
+            self->match[i].ref_len = reflen;
+            
+            if (data->map[i].flags & cg_eRightHalfDnbMap) {
+                self->match[i].seq_read_id = 2;
+                ++countRight;
+            }
+            else {
+                self->match[i].seq_read_id = 1;
+                ++countLeft;
+            }
+        }
+
+        if (countLeft > 0 && countRight > 0) {
+            left_prime = FindBestPair(data);
+            if (left_prime < N) {
+                right_prime = data->map[left_prime].mate;
+            }
+            else { /* force the pairing */
+                left_prime = FindBestLeft(data);
+                right_prime = FindBestRight(data);
+                data->map[left_prime].mate = right_prime;
+                data->map[right_prime].mate = left_prime;
+            }
+            for (i = 0; i != N; ++i) {
+                unsigned const mate = data->map[i].mate;
+                
+                if (mate < N && mate != i) {
+                    INSDC_coord_zero const tlen = (self->match[i].ref_id == self->match[mate].ref_id)
+                                                ? template_length(data->map[i].offset,
+                                                                  data->map[mate].offset,
+                                                                  self->match[i].ref_len,
+                                                                  self->match[mate].ref_len,
+                                                                  self->match[i].seq_read_id)
+                                                : 0;
+
+                    self->match[i].mate_ref_id = self->match[mate].ref_id;
+                    self->match[i].mate_ref_orientation = self->match[mate].ref_orientation;
+                    self->match[i].mate_ref_pos = data->map[mate].offset;
+                    self->match[i].template_len = tlen;
+                }
+            }
+        }
+        else if (countLeft > 0) {
+            left_prime = FindBestLeft(data);
+        }
+        else {
+            assert(countRight > 0);
+            right_prime = FindBestRight(data);
+        }
+        
+        read->align_count[0] = countLeft  < 254 ? countLeft  : 255;
+        read->align_count[1] = countRight < 254 ? countRight : 255;
+        if (rc == 0 && left_prime < N) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, left_prime,
+                                   &read->prim_algn_id[0]);
+            read->prim_is_reverse[0] = self->match[left_prime].ref_orientation;
+            data->map[left_prime].saved = 1;
+        }
+        if (rc == 0 && right_prime < N) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, right_prime,
+                                   &read->prim_algn_id[1]);
+            read->prim_is_reverse[1] = self->match[right_prime].ref_orientation;
+            data->map[right_prime].saved = 1;
+        }
+        if (global_cluster_size > 0 && data->map_qty > 1 + (left_prime < N ? 1 : 0) + (right_prime < N ? 1 : 0)) {
+            cluster_mates(data);
+        }
+        for (i = 0; i != N && rc == 0; ++i) {
+            if (data->map[i].saved || self->match[i].mapq < self->min_mapq)
+                continue;
+            rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+        }
+    }
+    return rc;
+}
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+    assert(cself != NULL);
+    assert(read != NULL);
+    assert(read->seq.sequence.buffer != NULL
+        && read->seq.sequence.elements == read->seq.spot_len
+        && (read->seq.sequence.elements == CG_READS15_SPOT_LEN ||
+            read->seq.sequence.elements == CG_READS25_SPOT_LEN));
+    
+    memset(read->prim_algn_id, 0, sizeof(read->prim_algn_id));
+    memset(read->align_count, 0, sizeof(read->align_count));
+    memset(read->prim_is_reverse, 0, sizeof(read->prim_is_reverse));
+    
+    return CGWriterAlgn_Write_int((CGWriterAlgn *)cself, read);
+}
+
+#else
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+    if( cself->data.map_qty != 0 ) {
+        /* primary is-found indicator: weights are ASCII-33 so they can't be 0 if found */
+        uint8_t left_weight = 0, right_weight = 0, pair_weight = 0;
+        uint32_t i, left_prim = 0, right_prim = 0, paired = 0;
+
+        CGWriterAlgn* self = (CGWriterAlgn*)cself;
+        TMappingsData* data = &self->data;
+
+        /* find best left, right and pair */
+        for(i = 0; i < data->map_qty; i++) {
+            int k = (data->map[i].flags & cg_eRightHalfDnbMap) ? 1 : 0;
+            if( read->align_count[k] < 254 ) {
+                read->align_count[k]++;
+            }
+            if( k == 0 ) {
+                if( left_weight < data->map[i].weight ) {
+                    left_prim = i;
+                    left_weight = data->map[i].weight;
+                }
+            } else {
+                if( right_weight < data->map[i].weight ) {
+                    right_prim = i;
+                    right_weight = data->map[i].weight;
+                }
+            }
+            if( i != data->map[i].mate && pair_weight < data->map[i].weight ) {
+                if( data->map[i].mate < data->map_qty ) {
+                    /* note pair's left mate id */
+                    paired = k == 0 ? i : data->map[i].mate;
+                    pair_weight = data->map[i].weight;
+                } else {
+                    /* fail safe in case mate id is out of map boundaries */
+                    data->map[i].mate = i;
+                }
+            }
+        }
+        /* choose primary pair */
+        if( left_weight > right_weight && data->map[left_prim].mate != left_prim ) {
+            /* left is better and has a mate -> choose left pair */
+            right_prim = data->map[left_prim].mate;
+            right_weight = data->map[right_prim].weight;
+        } else if( right_weight > left_weight && data->map[right_prim].mate != right_prim ) {
+            /* right is better and has a mate -> choose right pair */
+            left_prim = data->map[right_prim].mate;
+            left_weight = data->map[left_prim].weight;
+        } else if( pair_weight > 0 ) {
+            /* use paired as primary */
+            left_prim = paired;
+            left_weight = data->map[left_prim].weight;
+            right_prim = data->map[left_prim].mate;
+            right_weight = data->map[right_prim].weight;
+        } else if( left_weight > 0 && right_weight > 0 ) {
+            /* force best left and right to be mates */
+            data->map[left_prim].mate = right_prim;
+            data->map[right_prim].mate = left_prim;
+            self->forced_pairs_cnt++;
+            DEBUG_MSG(10, ("forced pair: %u %u\n", left_prim, right_prim));
+        }
+#if _DEBUGGING
+        DEBUG_MSG(10, ("alignment_count [%hu,%hu]", read->align_count[0], read->align_count[1]));
+        DEBUG_MSG(10, (" left primary: "));
+        if( left_weight > 0 ) {
+            DEBUG_MSG(10, ("weight %hu [%c], id %u", left_weight, left_weight, left_prim));
+        } else {
+            DEBUG_MSG(10, ("none"));
+        }
+        DEBUG_MSG(10, ("; right primary: "));
+        if( right_weight > 0 ) {
+            DEBUG_MSG(10, ("weight %hu [%c], id %u", right_weight, right_weight, right_prim));
+        } else {
+            DEBUG_MSG(10, ("none"));
+        }
+        DEBUG_MSG(10, ("\n"));
+#endif
+        assert((left_weight == 0 && read->align_count[0] == 0) || (left_weight > 0 && read->align_count[0] > 0));
+        assert((right_weight == 0 && read->align_count[1] == 0) || (right_weight > 0 && read->align_count[1] > 0));
+
+        /* write left primary */
+        if( rc == 0 && left_weight > 0 ) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, left_prim, &read->prim_algn_id[0]);
+            read->prim_is_reverse[0] = cself->match[left_prim].ref_orientation;
+        }
+        /* write right primary */
+        if( rc == 0 && right_weight > 0 ) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, right_prim, &read->prim_algn_id[1]);
+            read->prim_is_reverse[1] = cself->match[right_prim].ref_orientation;
+        }
+        DEBUG_MSG(10, ("prim_algn_rowid [%li,%li], ", read->prim_algn_id[0], read->prim_algn_id[1]));
+        DEBUG_MSG(10, ("prim_is_reverse [%hu,%hu]\n", read->prim_is_reverse[0], read->prim_is_reverse[1]));
+        if( rc == 0 ) {
+            /* others go to secondary */
+            int64_t row;
+            
+            rc = TableWriterAlgn_GetNextRowId(cself->secondary, &row);
+            if( global_cluster_size > 0  && data->map_qty > 1) {
+                cluster_mates(data);
+            }
+            if( cself->single_mate ) {
+                /* we need to re-mate in case original mate's weight is lower */
+                for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+                    if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+                        uint32_t mate = data->map[i].mate;
+                        if( mate != i && data->map[mate].mate != i ) {
+                            self->dropped_mates_cnt++;
+                            if( data->map[data->map[mate].mate].weight < data->map[i].weight ) {
+                                /* do not save my mate's mate */
+                                DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", data->map[mate].mate, mate));
+                                data->map[data->map[mate].mate].saved = true;
+                                /* repoint mate to me */
+                                data->map[mate].mate = i;
+                            } else {
+                                /* do not save me */
+                                DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", i, mate));
+                                data->map[i].saved = true;
+                            }
+                        }
+                    }
+                }
+            }
+            for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+                if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+                    uint32_t mate = data->map[i].mate;
+                    /* no mate or mate is under-weigth */
+                    if( mate == i || data->map[mate].weight < cself->min_mapq ||
+                       /* or mate was saved in primary */
+                       (left_weight > 0 && mate == left_prim) || (right_weight > 0 && mate == right_prim) ) {
+                        self->match[i].mate_align_id = 0;
+                        rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+                        row++;
+                    } else {
+                        self->match[mate].mate_align_id = row++;
+                        self->match[i].mate_align_id = row++;
+                        if( (rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL)) == 0 ) {
+                            rc = CGWriterAlgn_Save(self, read, self->secondary, mate, NULL);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+#endif
diff --git a/tools/cg-load/writer-algn.h b/tools/cg-load/writer-algn.h
new file mode 100644
index 0000000..b852c4d
--- /dev/null
+++ b/tools/cg-load/writer-algn.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_algn_h_
+#define _tools_cg_load_writer_algn_h_
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+#include "writer-seq.h"
+
+typedef struct TMappingsData_map_struct {
+    bool saved;
+    uint16_t flags;
+    char chr[CG_CHROMOSOME_NAME];
+    INSDC_coord_zero offset;
+    int16_t gap[CG_READS15_NGAPS];
+    uint8_t weight;
+    uint32_t mate;
+} TMappingsData_map;
+
+typedef struct TMappingsData_struct {
+    uint16_t map_qty;
+    TMappingsData_map map[CG_MAPPINGS_MAX];
+    uint32_t cg_reads_ngaps;
+} TMappingsData;
+
+typedef struct CGWriterAlgn CGWriterAlgn;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+                       uint32_t min_mapq, bool single_mate, uint32_t cluster_size);
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd);
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read);
+
+#endif /* _tools_cg_load_writer_algn_h_ */
diff --git a/tools/cg-load/writer-evidence-dnbs.c b/tools/cg-load/writer-evidence-dnbs.c
new file mode 100644
index 0000000..81d538f
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.c
@@ -0,0 +1,246 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-evidence-dnbs.h"
+#include "writer-evidence-intervals.h"
+
+#include <align/align.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/writer-alignment.h>
+
+#include <insdc/insdc.h>
+
+#include <kfs/file.h>
+
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct CGWriterEvdDnb_match_struct {
+
+    int64_t seq_spot_id;
+    INSDC_coord_one seq_read_id;
+
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+    bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+    int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+    uint8_t ref_offset_type[CG_EVDNC_ALLELE_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+    char mismatch[CG_EVDNC_ALLELE_LEN];
+
+    bool ref_orientation;
+    uint32_t ref_ploidy;
+    uint32_t mapq;
+
+} CGWriterEvdDnb_match;
+
+struct CGWriterEvdDnbs {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* writer;
+
+    TableWriterAlgnData algn;
+    CGWriterEvdDnb_match match;
+    
+    TEvidenceDnbsData data;
+
+    uint64_t bad_allele_index;
+    uint32_t read_len;
+};
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs **cself,
+    TEvidenceDnbsData **data, VDatabase *db, const ReferenceMgr *rmgr,
+    const uint32_t options, uint32_t read_len)
+{
+    rc_t rc = 0;
+    CGWriterEvdDnbs* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceAlignment, ewalgn_co_SEQ_SPOT_ID)) == 0 ) {
+            self->algn.seq_spot_id.buffer = &self->match.seq_spot_id;
+            self->algn.seq_spot_id.elements = 1;
+            self->algn.seq_read_id.buffer = &self->match.seq_read_id;
+            self->algn.seq_read_id.elements = 1;
+
+            self->algn.read_start.buffer = &self->match.read_start;
+            self->algn.read_len.buffer = &self->match.read_len;
+            self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+            self->algn.ref_offset.buffer = self->match.ref_offset;
+            self->algn.ref_offset_type.buffer = self->match.ref_offset_type;
+            self->algn.ref_id.buffer = &self->match.ref_id;
+            self->algn.ref_id.elements = 1;
+            self->algn.ref_start.buffer = &self->match.ref_start;
+            self->algn.ref_start.elements = 1;
+            self->algn.has_mismatch.buffer = self->match.has_mismatch;
+            self->algn.mismatch.buffer = self->match.mismatch;
+            self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+            self->algn.ref_orientation.elements = 1;
+            self->algn.ref_ploidy.buffer = &self->match.ref_ploidy;
+            self->algn.ref_ploidy.elements = 1;
+            self->algn.mapq.buffer = &self->match.mapq;
+            self->algn.mapq.elements = 1;
+            self->rmgr = rmgr;
+
+            /* set to 1st row for evidence_interval to collect ids */
+            self->data.last_rowid = 1;
+
+            self->read_len = read_len;
+
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterEvdDnbs_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterEvdDnbs* self = (CGWriterEvdDnbs*)cself;
+        if( self->bad_allele_index > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(bad_allele_index) bad allele_indexes in evidence dnbs",
+                    "bad_allele_index=%lu", self->bad_allele_index));
+        }
+        rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+        free(self->data.dnbs);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st)
+{
+    rc_t rc = 0;
+    CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+    assert(cself != NULL);
+
+    self->data.dnbs[dnb].seq_spot_id = seq_spot_id_1st + self->data.dnbs[dnb].dnb_offset_in_lane_file;
+
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const TEvidenceIntervalsData* ref, int64_t ref_rowid)
+{
+    rc_t rc = 0;
+    uint16_t i;
+    int64_t last_rowid;
+    CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+    assert(cself != NULL);
+    assert(ref != NULL);
+
+    for(i = 0; rc == 0 && i < cself->data.qty; i++) {
+
+        /* align against allele */
+        uint16_t ai = cself->data.dnbs[i].allele_index;
+        self->match.ref_ploidy = ref->allele_indexes_to_read_number[ai];
+        if( self->match.ref_ploidy == 0 ) {
+            DEBUG_MSG(3, ("bad allele_index for interval %s %s[%hu]\n", cself->data.dnbs[i].chr, cself->data.interval_id, i + 1));
+            self->bad_allele_index++;
+            continue;
+        }
+        else {
+            const char *read = NULL;
+            char reversed[CG_READS15_SPOT_LEN] = "";
+            uint32_t read_len = cself->read_len;
+
+            assert(read_len == CG_READS15_SPOT_LEN / 2
+                || read_len == CG_READS25_SPOT_LEN / 2);
+
+            if( cself->data.dnbs[i].side == 'L' ) {
+                self->match.seq_read_id = 1;
+                read = cself->data.dnbs[i].read;
+            } else {
+                self->match.seq_read_id = 2;
+                read = &cself->data.dnbs[i].read[read_len];
+            }
+            if( cself->data.dnbs[i].strand == '-' ) {
+                if( (rc = DNAReverseCompliment(read, reversed, read_len)) != 0 ) {
+                    break;
+                }
+                read = reversed;
+                self->match.ref_orientation = true;
+            } else {
+                self->match.ref_orientation = false;
+            }
+            self->algn.ploidy = 0;
+            if( (rc = ReferenceMgr_Compress(cself->rmgr, 0, cself->data.dnbs[i].chr,
+                                            cself->data.dnbs[i].offset_in_reference, read, read_len,
+                                            cself->data.dnbs[i].allele_alignment, cself->data.dnbs[i].allele_alignment_length,
+                                            ref->offset,
+                                            ref->allele[ai], ref->allele_length[ai],
+					    cself->data.dnbs[i].offset_in_allele,
+                                            ref->allele_alignment[ai], ref->allele_alignment_length[ai],
+                                            NCBI_align_ro_complete_genomics, &self->algn)) == 0 ) {
+                self->match.mapq = cself->data.dnbs[i].mapping_quality - 33;
+                /* pointer to SEQUENCE table spot and read */
+                self->match.seq_spot_id = cself->data.dnbs[i].seq_spot_id;
+                self->match.ref_id = ref_rowid;
+                self->match.ref_start = cself->data.dnbs[i].offset_in_allele;
+                DEBUG_MSG(3, ("REF_ID: %li, REF_START: %i, REF_PLOIDY: %hu\n",
+                    self->match.ref_id, self->match.ref_start, self->match.ref_ploidy));
+                rc = TableWriterAlgn_Write(cself->writer, &self->algn, &last_rowid);
+		if( rc == 0 && self->data.last_rowid++ != last_rowid ) {
+		    rc = RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent);
+		}
+            } else if( GetRCObject(rc) == rcOffset && GetRCState(rc) == rcOutofrange ) {
+                PLOGERR(klogErr, (klogErr, rc, "evidence dnb for $(chr) interval $(interval) OffsetInReference $(offset) skipped",
+                    "chr=%s,interval=%s,offset=%i", ref->chr, ref->interval_id, cself->data.dnbs[i].offset_in_reference));
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/cg-load/writer-evidence-dnbs.h b/tools/cg-load/writer-evidence-dnbs.h
new file mode 100644
index 0000000..f0c17af
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.h
@@ -0,0 +1,97 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_dnbs_h_
+#define _tools_cg_load_writer_evidence_dnbs_h_
+
+
+#include "defs.h"
+#include "factory-cmn.h"
+
+#include <insdc/insdc.h>
+
+#include <sra/sradb.h>
+
+#include <vdb/database.h>
+
+
+struct ReferenceMgr;
+
+
+typedef struct TEvidenceDnbsData_dnb_struct {
+
+    /* translated:
+       slide+lane+file_num_in_lane+dnb_offset_in_lane_file --> SEQ_SPOT_ID */
+    int64_t seq_spot_id;
+
+    char chr[CG_CHROMOSOME_NAME];
+    char slide[CG_SLIDE];
+    char lane[CG_LANE];
+    CGFIELD15_BATCH_FILE_NUMBER file_num_in_lane;
+    uint64_t dnb_offset_in_lane_file; /* zero-based */
+    uint16_t allele_index;
+    char side;
+    char strand;
+    INSDC_coord_zero offset_in_allele;
+    char allele_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    /* strlen for allele_alignment[] buffer */
+    size_t allele_alignment_length;
+    uint8_t mapping_quality;
+    INSDC_coord_zero offset_in_reference;
+    /* moved into reading function since it is not used after reading anyway
+    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    INSDC_coord_zero mate_offset_in_reference;
+    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    uint16_t score_allele[3];*/
+    char read[CG_EVDNC_SPOT_LEN];
+    size_t read_len;
+    /*char qual[CG_EVDNC_SPOT_LEN];
+    */
+    CGFIELD_WELL_ID wellId;
+} TEvidenceDnbsData_dnb;
+
+typedef struct TEvidenceDnbsData {
+    char interval_id[CG_EVDNC_INTERVALID_LEN];
+    uint16_t qty;
+    uint16_t max_qty;
+    TEvidenceDnbsData_dnb* dnbs;
+    int64_t last_rowid; /* last used rowid in this table */
+} TEvidenceDnbsData;
+
+typedef struct CGWriterEvdDnbs CGWriterEvdDnbs;
+
+struct TEvidenceIntervalsData;
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs **cself,
+    TEvidenceDnbsData **data, VDatabase *db, const struct ReferenceMgr *rmgr,
+    const uint32_t options, uint32_t read_len);
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st);
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const struct TEvidenceIntervalsData* ref, int64_t ref_rowid);
+
+#endif /* _tools_cg_load_writer_evidence_dnbs_h_ */
diff --git a/tools/cg-load/writer-evidence-intervals.c b/tools/cg-load/writer-evidence-intervals.c
new file mode 100644
index 0000000..e5efd8f
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.c
@@ -0,0 +1,263 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "debug.h"
+#include "defs.h"
+#include "file.h"
+#include "writer-evidence-dnbs.h"
+#include "writer-evidence-intervals.h"
+
+#include <align/align.h>
+
+#include <kfs/file.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+
+#include <vdb/table.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct CGWriterEvdInt_match_struct {
+
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start[CG_EVDNC_PLOIDY];
+    INSDC_coord_len read_len[CG_EVDNC_PLOIDY];
+    bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+    int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+    uint8_t ref_offset_type[CG_EVDNC_ALLELE_LEN];
+    bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+    char mismatch[CG_EVDNC_ALLELE_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    bool ref_orientation;
+    uint32_t mapq;
+
+} CGWriterEvdInt_match;
+
+struct CGWriterEvdInt {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* writer;
+    TableWriterAlgnData algn;
+    TEvidenceIntervalsData data;
+    CGWriterEvdInt_match match;
+    int64_t* dnbs_ids;
+    uint64_t dnbs_ids_max;
+};
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+                         VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options)
+{
+    rc_t rc = 0;
+    CGWriterEvdInt* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceInterval, 0)) == 0 ) {
+            self->algn.read_start.buffer = &self->match.read_start;
+            self->algn.read_len.buffer = &self->match.read_len;
+            self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+            self->algn.ref_offset.buffer = self->match.ref_offset;
+            self->algn.ref_offset_type.buffer = self->match.ref_offset_type;
+            self->algn.has_mismatch.buffer = self->match.has_mismatch;
+            self->algn.mismatch.buffer = self->match.mismatch;
+            self->algn.ref_id.buffer = &self->match.ref_id;
+            self->algn.ref_id.elements = 1;
+            self->algn.ref_start.buffer = &self->match.ref_start;
+            self->algn.ref_start.elements = 1;
+            self->match.ref_orientation = false;
+            self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+            self->algn.ref_orientation.elements = 1;
+            self->algn.mapq.buffer = &self->match.mapq;
+            self->algn.mapq.elements = 1;
+            self->algn.alingment_ids.buffer = self->dnbs_ids;
+            self->rmgr = rmgr;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterEvdInt_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+        rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+        free(self->dnbs_ids);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const TEvidenceDnbsData* dnbs, int64_t* rowid)
+{
+    rc_t rc = 0;
+    CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+    
+    assert(cself != NULL);
+
+    memset(self->data.allele_indexes_to_read_number, 0, sizeof(self->data.allele_indexes_to_read_number));
+    if( self->data.ploidy == 1 ) {
+
+        uint32_t i = self->data.allele_indexes[0] - '0';
+
+        if( self->data.allele_indexes[1] != '\0' || i > 2 ) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else if( self->data.allele_alignment_length[i] == 0 ) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+        } else {
+            if( i == 0 ) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i], self->data.allele_length[i],
+                                           self->data.allele_alignment[i], self->data.allele_alignment_length[i],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+                self->data.allele_indexes_to_read_number[i] = 1; /* 1st read */
+            }
+        }
+
+    } else if( self->data.ploidy == 2 ) {  /** possibilities: 0;1 1;2 and 1;1 - single ploidy but recorded as dual **/
+        uint32_t i1 = self->data.allele_indexes[0] - '0';
+        uint32_t i2 = self->data.allele_indexes[2] - '0';
+
+        if( self->data.allele_indexes[1] != ';' || self->data.allele_indexes[3] != '\0' || i1 > 2 || i2 > 2) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else {
+            if( i1 == 0 || i2 == 0 ) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 ) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+                                           self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+                self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+            }
+            if( rc == 0 ) {
+		if ( i2 != i1 ) {
+			rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+                                           self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+			self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+		} else {
+			self->data.ploidy = 1;
+		}
+            }
+        }
+
+    }  else if( self->data.ploidy == 3 ) { /** possibilities: 0;1;2 1;2;3 **/
+        uint32_t i1 = self->data.allele_indexes[0] - '0';
+        uint32_t i2 = self->data.allele_indexes[2] - '0';
+        uint32_t i3 = self->data.allele_indexes[4] - '0';
+
+
+        if( self->data.allele_indexes[1] != ';'  || self->data.allele_indexes[3] != ';' || self->data.allele_indexes[5] != '\0' || i1 > 3 || i2 > 3 || i3 > 3) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else {
+            if( i1 == 0 || i2 == 0 || i3 == 0) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 || self->data.allele_alignment_length[i3]==0) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+                                           self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+                self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+            }
+            if( rc == 0 ) {
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+                                           self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+                self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+            }
+            if( rc == 0 ) {
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i3], self->data.allele_length[i3],
+                                           self->data.allele_alignment[i3], self->data.allele_alignment_length[i3],
+                                           0, NULL, 0, 0, NULL, 0, NCBI_align_ro_intron_unknown, &self->algn);
+                self->data.allele_indexes_to_read_number[i3] = 3; /* 3rd read */
+            }
+        }
+
+    } else {
+        rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcUnrecognized);
+    }
+    if( rc == 0 ) { /*** a bit careful here - were are predicting what EvidenceDnb writer will do ***/
+	uint32_t i,valid_qty;
+	for(valid_qty = i = 0;i< dnbs->qty;i++){
+		if(self->data.allele_indexes_to_read_number[dnbs->dnbs[i].allele_index] > 0){
+			valid_qty++;
+		}
+	}
+        if( self->dnbs_ids_max < valid_qty ) {
+            void* p = realloc(self->dnbs_ids, sizeof(*(self->dnbs_ids)) * valid_qty);
+            if( p == NULL ) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcMemory, rcExhausted);
+            } else {
+                self->dnbs_ids = p;
+                self->dnbs_ids_max = valid_qty;
+                self->algn.alingment_ids.buffer = self->dnbs_ids;
+            }
+        }
+        if( rc == 0 ) {
+            self->algn.alingment_ids.elements = valid_qty;
+	    for(i=0;i<valid_qty;i++){
+		self->dnbs_ids[i] = dnbs->last_rowid + i;
+            }
+        }
+    }
+    if( rc == 0 ) {
+        self->match.mapq = self->data.score;
+        rc = TableWriterAlgn_Write(self->writer, &self->algn, rowid);
+    }
+    return rc;
+}
diff --git a/tools/cg-load/writer-evidence-intervals.h b/tools/cg-load/writer-evidence-intervals.h
new file mode 100644
index 0000000..7a8f586
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_intervals
+#define _tools_cg_load_writer_evidence_intervals
+
+#include <vdb/database.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+
+#include "defs.h"
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+typedef struct TEvidenceIntervalsData {
+    char interval_id[CG_EVDNC_INTERVALID_LEN];
+    char chr[CG_CHROMOSOME_NAME];
+    INSDC_coord_zero offset;
+    INSDC_coord_len length;
+    uint16_t ploidy;
+    char allele_indexes[16];
+    /* translation from allele_indexes into read id for use in dnbs */
+    uint8_t allele_indexes_to_read_number[CG_EVDNC_ALLELE_NUM];
+    int32_t score;
+    int32_t scoreVAF;
+    int32_t scoreEAF;
+    char allele[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_LEN];
+    /* strlen for allele[3][] buffers */
+    size_t allele_length[CG_EVDNC_ALLELE_NUM];
+    char allele_alignment[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_CIGAR_LEN];
+    /* strlen for allele_alignment[3][] buffers */
+    size_t allele_alignment_length[CG_EVDNC_ALLELE_NUM];
+} TEvidenceIntervalsData;
+
+typedef struct CGWriterEvdInt CGWriterEvdInt;
+
+struct TEvidenceDnbsData;
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+                         VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options);
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const struct TEvidenceDnbsData* dnbs, int64_t* rowid);
+
+#endif /* _tools_cg_load_writer_evidence_intervals */
diff --git a/tools/cg-load/writer-seq.c b/tools/cg-load/writer-seq.c
new file mode 100644
index 0000000..c936fbc
--- /dev/null
+++ b/tools/cg-load/writer-seq.c
@@ -0,0 +1,155 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-seq.h"
+
+#include <insdc/insdc.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+const INSDC_SRA_platform_id DFTL_platform = SRA_PLATFORM_COMPLETE_GENOMICS;
+const char DFTL_label[] = "LeftRight";
+const INSDC_coord_zero DFTL_label_start[CG_READS_NREADS] = {0, 4};
+const INSDC_coord_len DFTL_label_len[CG_READS_NREADS] =    {4, 5};
+
+INSDC_coord_zero DFTL_read_start[CG_READS_NREADS] =  {0, 35};
+INSDC_coord_len  DFTL_read_len  [CG_READS_NREADS] = {35, 35};
+
+const INSDC_SRA_read_filter DFTL_read_filter[CG_READS_NREADS] =  {SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS};
+
+struct CGWriterSeq {
+    const TableWriterSeq* base;
+    TReadsData data;
+};
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself,
+    TReadsData** data, VDatabase* db, const uint32_t options,
+    const char* quality_quantization, uint32_t read_len)
+{
+    rc_t rc = 0;
+    CGWriterSeq* self;
+
+    assert(read_len == CG_READS15_SPOT_LEN / 2
+        || read_len == CG_READS25_SPOT_LEN / 2);
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        TableWriterData p;
+        p.buffer = &DFTL_platform;
+        p.elements = 1;
+        if( (rc = TableWriterSeq_Make(&self->base, db, options | ewseq_co_AlignData | ewseq_co_SpotGroup, quality_quantization)) != 0 ) {
+            LOGERR(klogErr, rc, "sequence table");
+        }
+        else if ((rc =
+            TableWriteSeq_WriteDefault(self->base, ewseq_cn_PLATFORM, &p)) == 0)
+        {
+            int i = 0;
+            for (i = 0; i < CG_READS_NREADS; ++i) {
+                DFTL_read_len[i] = read_len;
+            }
+            DFTL_read_start[1] = read_len;
+
+            /* attach data pointer to data */
+            self->data.seq.nreads = CG_READS_NREADS;
+            self->data.seq.alignment_count.buffer = self->data.align_count;
+            self->data.seq.alignment_count.elements = CG_READS_NREADS;
+            self->data.seq.primary_alignment_id.buffer = self->data.prim_algn_id;
+            self->data.seq.primary_alignment_id.elements = CG_READS_NREADS;
+            self->data.seq.sequence.buffer = self->data.read;
+            self->data.seq.quality.buffer = self->data.qual;
+            self->data.seq.label.buffer = DFTL_label;
+            self->data.seq.label.elements = sizeof(DFTL_label) - 1;
+            self->data.seq.label_start.buffer = DFTL_label_start;
+            self->data.seq.label_start.elements = CG_READS_NREADS;
+            self->data.seq.label_len.buffer = DFTL_label_len;
+            self->data.seq.label_len.elements = CG_READS_NREADS;
+            self->data.seq.read_type.buffer = self->data.read_type;
+            self->data.seq.read_type.elements = CG_READS_NREADS;
+            self->data.seq.read_start.buffer = DFTL_read_start;
+            self->data.seq.read_start.elements = CG_READS_NREADS;
+            self->data.seq.read_len.buffer = DFTL_read_len;
+            self->data.seq.read_len.elements = CG_READS_NREADS;
+            self->data.seq.read_filter.buffer = DFTL_read_filter;
+            self->data.seq.read_filter.elements = CG_READS_NREADS;
+
+            /* set to 1st row for aligment to refer */
+            self->data.rowid = 1;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterSeq_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterSeq* self = (CGWriterSeq*)cself;
+        rc = TableWriterSeq_Whack(cself->base, commit, rows);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself)
+{
+    uint64_t i;
+    int64_t r;
+    rc_t rc;
+    INSDC_quality_phred* b;
+    CGWriterSeq* self = (CGWriterSeq*)cself;
+
+    assert(cself != NULL);
+
+    b = (INSDC_quality_phred*)(self->data.seq.quality.buffer);
+    for(i = 0; i < cself->data.seq.quality.elements; i++ ) {
+        b[i] -= 33;
+    }
+    for(i = 0; i < CG_READS_NREADS; i++) {
+        self->data.read_type[i] = SRA_READ_TYPE_BIOLOGICAL |
+            (cself->data.prim_is_reverse[i] ? SRA_READ_TYPE_REVERSE : SRA_READ_TYPE_FORWARD);
+    }
+    rc = TableWriterSeq_Write(cself->base, &cself->data.seq, &r);
+    return rc ? rc : (self->data.rowid++ == r ? 0 : RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent));
+}
diff --git a/tools/cg-load/writer-seq.h b/tools/cg-load/writer-seq.h
new file mode 100644
index 0000000..5cc899e
--- /dev/null
+++ b/tools/cg-load/writer-seq.h
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_seq_h_
+#define _tools_cg_load_writer_seq_h_
+
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <sra/sradb.h>
+#include <align/writer-sequence.h>
+
+typedef struct TReadsData_struct {
+    uint32_t reads_format;
+
+    uint16_t flags;
+    char read[CG_READS15_SPOT_LEN + 1];
+    char qual[CG_READS15_SPOT_LEN + 1];
+
+    /* reverse read cache by half-dnb */
+    INSDC_dna_text reverse[CG_READS15_SPOT_LEN];
+
+    TableWriterSeqData seq;
+    int64_t rowid;
+    uint8_t align_count[CG_READS_NREADS];
+    int64_t prim_algn_id[CG_READS_NREADS];
+    bool prim_is_reverse[CG_READS_NREADS];
+    SRAReadTypes read_type[CG_READS_NREADS];
+} TReadsData;
+
+typedef struct CGWriterSeq CGWriterSeq;
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself,
+    TReadsData** data, VDatabase* db, const uint32_t options,
+    const char* quality_quantization, uint32_t read_len);
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself);
+
+#endif /* _tools_cg_load_writer_seq_h_ */
diff --git a/tools/copycat/Makefile b/tools/copycat/Makefile
new file mode 100644
index 0000000..985c064
--- /dev/null
+++ b/tools/copycat/Makefile
@@ -0,0 +1,100 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/copycat
+
+INT_TOOLS =
+
+EXT_TOOLS = copycat
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (1,$(HAVE_MAGIC))
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built:"                          \
+	       "It requires our internal library 'libkff'"              \
+	       "which requires 'libmagic' and its development headers."
+endif
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# copycat
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+COPYCAT_SRC = \
+	copycat \
+	ccfileformat \
+	cccat \
+	cctree \
+	cctree-dump \
+	cctar  \
+	ccsra \
+	ccsubchunk \
+	ccfile
+
+COPYCAT_OBJ = \
+	$(addsuffix .$(OBJX),$(COPYCAT_SRC))
+
+COPYCAT_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+	-skff \
+	-smagic-static
+
+
+$(BINDIR)/copycat: $(COPYCAT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(COPYCAT_LIB)
+	@ cp $(SRCDIR)/magic $(BINDIR)
diff --git a/tools/copycat/ccbuffer.c b/tools/copycat/ccbuffer.c
new file mode 100644
index 0000000..b628c2b
--- /dev/null
+++ b/tools/copycat/ccbuffer.c
@@ -0,0 +1,153 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <assert.h>
+#include <atomic.h>
+#include <stdlib.h>
+
+
+/* #include <os-native.h> */
+
+/* #include <klib/rc.h> */
+/* #include <kapp/main.h> */
+/* #include <kcont/queue.h> */
+
+#include "copycat-priv.h"
+
+/* ==========
+ * Buffer is a generic buffer to be used to pass data between co-routines or 
+ * threads.
+ */
+struct Buffer
+{
+    /* standard SRA tool kit type reference counter: zero when free and 
+     * in the queue of the BufferMgr */
+    atomic32_t	refcount;
+    /* keep track of manager - by adding a reference when allocated it keeps
+     * the manager alive long enough to free all buffers */
+    BufferMgr *	mgr;
+    /* how large is the payload for the buffer */
+    size_t	payload_size;
+    /* how large is the content of the payload? */
+    size_t	payload_content;
+    /* the payload of the packet is the rest of the packet (and not normally 
+     * a single byte) */
+    char	payload [1];
+};
+
+/* ----------
+ * Constructor/initializer for a buffer: called only from a BufferMgr
+ * Return: rc_t
+ *  buff          pointer to a pointer to hold a reference to the new Buffer
+ *  payload_size  how large to make the data portion of the Buffer
+ *  mgr           a reference back to the manager that will control this buffer
+ */
+rc_t BufferMake (Buffer ** buff, size_t payload_size, BufferMgr * mgr)
+{
+    Buffer * self = NULL;
+    rc_t rc = 0;
+
+    assert (mgr != NULL);
+
+    self = malloc (payload_size + sizeof (Buffer) - 1);
+    if (self == NULL)
+    {
+	rc = RC (rcExe, rcBuffer, rcAllocating, rcMemory, rcExhausted);
+    }
+    else
+    {
+	/* non-standard for SRA Toolkit; refcount is 0 while not allocated */
+	atomic32_set (&self->refcount, 0);
+	self->mgr = mgr;
+	self->payload_size = payload_size;
+	self->payload_content = 0;
+    }
+    *buff = self;
+    return rc;
+}
+
+rc_t BufferAddRef (const Buffer * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((Buffer*)self)->refcount);
+    return 0;
+}
+
+rc_t BufferRelease (const Buffer * cself)
+{
+    Buffer * self = (Buffer *)cself;
+    rc_t rc = 0;
+
+    if (self != NULL)
+    {
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    if (self->mgr == NULL)
+		free (self);
+	    else
+	    {
+		/* refcount reaching 0 means to put back in the free_q for the BufferMgr */
+		rc = BufferMgrPutBuffer (self->mgr, self, NULL);
+
+		/* if failed return ownership to last releaser */
+		if (rc != 0)
+		    atomic32_set (&self->refcount, 1);
+	    }
+	}
+    }
+    return rc;
+}
+
+size_t BufferPayloadGetSize (const Buffer * self)
+{
+    assert (self != NULL);
+    return self->payload_size;
+}
+size_t BufferContentGetSize (const Buffer * self)
+{
+    assert (self != NULL);
+    return self->payload_content;
+}
+rc_t BufferContentSetSize (Buffer * self, size_t z)
+{
+    rc_t rc = 0;
+    assert (self != NULL);
+    assert (z <= self->payload_size);
+    self->payload_content = z;
+    return rc;
+}
+/* is it too redundant to have a read and write version? */
+const void * BufferPayload (const Buffer * self)
+{
+    assert (self != NULL);
+    return (const void*)self->payload;
+}
+void * BufferPayloadWrite (Buffer * self)
+{
+    assert (self != NULL);
+    return (void*)self->payload;
+}
+
diff --git a/tools/copycat/ccbuffermgr.c b/tools/copycat/ccbuffermgr.c
new file mode 100644
index 0000000..8323929
--- /dev/null
+++ b/tools/copycat/ccbuffermgr.c
@@ -0,0 +1,234 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <assert.h>
+
+#include <atomic.h>
+/* #include <os-native.h> */
+
+/* #include <klib/rc.h> */
+/* #include <kapp/main.h> */
+#include <kcont/queue.h>
+#include <kapp/log.h>
+
+#include "copycat-priv.h"
+
+/* ==========
+ * BufferMgr
+ */
+struct BufferMgr
+{
+    atomic32_t	refcount;
+    uint32_t	timeout;
+    KQueue *	free_q;
+};
+
+
+/* Standard SRA type constructor:
+ * construction of the manager also creates the buffers per specification in the parameters
+ *  buffmgr    where to put a reference to the new BufferMgr
+ *  buffcount  how many Buffers to make as well
+ *  buffsize   how large a payload is desired for the Buffers
+ *  timeout    number of milliseconds of wait time for the operations for this BufferMgr
+ */
+rc_t BufferMgrMake (BufferMgr ** buffmgr, uint32_t buffcount, size_t buffsize, uint32_t timeout)
+{
+    rc_t rc = 0;
+    BufferMgr * self;
+
+    *buffmgr = NULL;
+    self = malloc ( sizeof * self );
+
+    if ( self == NULL)
+    {
+	rc = RC (rcExe, rcBuffer, rcAllocating, rcMemory, rcExhausted);
+	LOGERR (klogErr, rc, "BufferMgrMake: error allocating for buffer manager");
+    }
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	self->timeout = timeout; /* default timeout */
+	rc = KQueueMake (&self->free_q, buffcount);
+
+	if (rc != 0)
+	    LOGERR (klogErr, rc, "BufferMgrMake: error making KQueue");
+	else
+	{
+	    uint32_t ix;
+	    union
+	    {
+		Buffer * b;
+		void * v;
+	    } bp;
+	    timeout_t tm;
+
+	    for (ix = 0; ix < buffcount; ++ix)
+	    {
+		bp.v = NULL;
+		rc = TimeoutInit (&tm, timeout);
+
+		if (rc == 0)
+		{
+		    rc = BufferMake (&bp.b, buffsize, self);
+		    if (rc == 0)
+		    {
+			rc = KQueuePush (self->free_q, bp.v, &tm);
+			if (rc != 0)
+			    free (bp.v);
+		    }
+		    if (rc != 0)
+			break;
+		}
+	    }
+	    if (ix == buffcount)
+	    {
+		atomic32_set (&self->refcount, 1);
+		*buffmgr = self;
+		return 0;
+	    }
+	    else
+	    {
+		/* failure so undo all */
+		rc_t rc_sub = 0;
+
+		while (rc_sub)
+		{
+		    rc_sub = TimeoutInit (&tm, timeout);
+		    if (rc_sub == 0)
+		    {
+			rc_sub = KQueuePop (self->free_q, &bp.v, &tm);
+			if (rc_sub == 0)
+			    if (bp.v != NULL)
+				free (bp.v);
+		    }
+		}
+	    }	
+	    KQueueRelease (self->free_q);
+	}
+	free (self);
+    }
+    return rc;
+}
+
+rc_t BufferMgrAddRef (const BufferMgr * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((BufferMgr*)self)->refcount);
+    return 0;
+}
+
+rc_t BufferMgrRelease (BufferMgr *self)
+{
+    rc_t rc = 0;
+    void * bp;
+    timeout_t tm;
+    if ( self != NULL )
+    {
+        if ( atomic32_dec_and_test (&self->refcount))
+        {
+	    /* release all allocated buffers here */
+	    while (rc)
+	    {
+		rc = TimeoutInit (&tm, self->timeout);
+		if (rc == 0)
+		{
+		    rc = KQueuePop (self->free_q, &bp, &tm);
+		    if (rc == 0)
+			if (bp != NULL)
+			    free (bp);
+		}
+	    }
+	    if (rc == 0)
+		free (self);
+        }
+    }
+    return rc;
+}
+rc_t BufferMgrPutBuffer (BufferMgr * self, Buffer * buff, timeout_t * tm)
+{
+    rc_t rc = 0;
+    timeout_t t;
+
+    assert (self != NULL);
+    assert (buff != NULL);
+
+    if (tm == NULL)
+    {
+	tm = &t;
+	rc = TimeoutInit (tm, self->timeout);
+    }
+
+    if (rc == 0)
+    {
+	rc = KQueuePush (self->free_q, buff, tm);
+	if (rc == 0)
+	{
+	    /* take ownership of the buffer removing keep alive reference */
+	    BufferMgrRelease (self);
+	}
+    }
+    if (rc != 0)
+	/* assign ownership back to the caller */
+	BufferAddRef(buff);
+
+    return rc;
+}
+rc_t BufferMgrGetBuffer (BufferMgr * self, Buffer ** buff, timeout_t * tm)
+{
+    rc_t rc = 0, orc;
+    timeout_t t;
+    void * bp;
+
+    assert (self != NULL);
+    assert (buff != NULL);
+
+    if (tm == NULL)
+    {
+	tm = &t;
+	rc = TimeoutInit (tm, self->timeout);
+    }
+
+    if (rc == 0)
+    {
+	*buff = NULL;
+
+	rc = KQueuePop (self->free_q, &bp, tm);
+	if (rc == 0)
+	{
+	    /* add a keep alive reference to the buffer */
+	    rc = BufferMgrAddRef (self);
+            if (rc)
+                LOGERR (klogInt, rc, "Error adding reference to buffer manager");
+            else
+                *buff = bp;
+
+	    rc = BufferAddRef(*buff);
+            if (orc)
+                LOGERR (klogInt, rc, "Error adding reference to a buffer");
+	}
+    }
+    return rc;
+}
diff --git a/tools/copycat/ccbufferq.c b/tools/copycat/ccbufferq.c
new file mode 100644
index 0000000..0d3b4cb
--- /dev/null
+++ b/tools/copycat/ccbufferq.c
@@ -0,0 +1,175 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <assert.h>
+
+#include <atomic.h>
+#include <os-native.h>
+
+#include <klib/rc.h>
+#include <kapp/log.h>
+#include <kcont/queue.h>
+
+#include "copycat-priv.h"
+
+
+
+struct BufferQ
+{
+    atomic32_t	refcount;	/* how many references to this object */
+    uint32_t	timeout;	/* default timeout in millisecs */
+    KQueue *	q;		/* The underlying thread safe queue */
+};
+
+rc_t BufferQAddRef (const BufferQ * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((BufferQ*)self)->refcount);
+    return 0;
+}
+
+rc_t BufferQRelease (const BufferQ *cself)
+{
+    BufferQ * self  = (BufferQ*)cself;
+    rc_t rc = 0;
+    if ( self != NULL )
+    {
+        if ( atomic32_dec_and_test (&self->refcount))
+        {
+	    const Buffer * b;
+	    while (rc == 0)
+	    {
+		rc = BufferQPopBuffer (self, &b, NULL);
+		BufferRelease (b);
+	    }
+/* this might need rework especially if KQueue changes */
+	    if ((GetRCState(rc) == rcExhausted) && (GetRCObject(rc) == rcTimeout))
+		rc = 0;
+	    if (rc == 0)
+	    {
+		rc = KQueueRelease (self->q);
+		if (rc == 0)
+		{
+		    free (self);
+		    return 0;
+		}
+	    }
+	    atomic32_inc (&((BufferQ*)self)->refcount);
+        }
+    }
+    return rc;
+}
+
+
+rc_t BufferQMake (BufferQ ** q, uint32_t timeout, uint32_t length)
+{
+    rc_t rc = 0;
+    BufferQ * self;
+
+    assert (q != NULL);
+
+    self = malloc (sizeof * self);
+    if (self == NULL)
+	rc = RC (rcExe, rcQueue, rcAllocating, rcMemory, rcExhausted);
+    else
+    {
+	rc = KQueueMake (&self->q, length);
+	if (rc == 0)
+	{
+	    self->timeout = timeout;
+	    atomic32_set (&self->refcount, 1);
+	    *q = self;
+	}
+    }
+
+    return rc;
+}
+
+rc_t BufferQPushBuffer (BufferQ * self, const Buffer * buff, timeout_t * tm)
+{
+    rc_t rc = 0;
+    timeout_t t;
+
+    assert (self != NULL);
+    assert (buff != NULL);
+
+    if (tm == NULL)	/* do we need the default timeout? */
+    {
+	tm = &t;
+	rc = TimeoutInit (tm, self->timeout);
+    }
+
+    if (rc == 0)
+    {
+	rc = KQueuePush (self->q, buff, tm);
+	if (rc == 0)
+	{
+	    /* share ownership of the buffer removing keep alive reference */
+	    rc = BufferAddRef (buff);
+	}
+    }
+
+    return rc;
+}
+rc_t BufferQPopBuffer (BufferQ * self, const Buffer ** buff, timeout_t * tm)
+{
+    rc_t rc = 0;
+    timeout_t t;
+    void * p;
+    LOGMSG (klogDebug10, "BufferQPopBuffer");
+    assert (self != NULL);
+    assert (buff != NULL);
+
+    if (tm == NULL)
+    {
+	LOGMSG (klogDebug10, "BufferQPopBuffer tm was NULL");
+	tm = &t;
+	rc = TimeoutInit (tm, self->timeout);
+    }
+
+    if (rc == 0)
+    {
+	LOGMSG (klogDebug10, "BufferQPopBuffer call KQueuePop");
+	rc = KQueuePop (self->q, &p, tm);
+	PLOGMSG (klogDebug10, "BufferQPopBuffer back from KQueuePop $(rc)", PLOG_U32(rc), rc);
+	if (rc == 0)
+	    *buff = p;
+	else
+	{
+	    *buff = NULL;
+	}
+    }
+    LOGMSG (klogDebug10, "leave BufferQPopBuffer");
+    return rc;
+}
+rc_t BufferQSeal (BufferQ * self)
+{
+    return KQueueSeal (self->q);
+}
+bool BufferQSealed (BufferQ *self)
+{
+    return KQueueSealed (self->q);
+}
diff --git a/tools/copycat/cccat.c b/tools/copycat/cccat.c
new file mode 100644
index 0000000..64cd32e
--- /dev/null
+++ b/tools/copycat/cccat.c
@@ -0,0 +1,1797 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "copycat-priv.h"
+#include "cctree-priv.h"
+
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include <krypto/wgaencrypt.h>
+#include <kfs/kfs-priv.h>
+#include <kfs/file.h>
+#include <kfs/teefile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+#include <kfs/md5.h>
+#include <kfs/countfile.h>
+#include <kfs/readheadfile.h>
+#include <kfs/buffile.h>
+#include <kfs/crc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* make it last include */
+#include "debug.h"
+
+#define EXAMINE_KAR_FILES 0
+#define DECRYPT_FAIL_AS_PLAIN_FILE 0
+/* the readhead file isn't working yet */
+#define USE_KBUFFILE 1
+
+static
+const VPath * src_path = NULL;
+
+static
+const VPath * dst_path = NULL;
+
+static
+bool do_encrypt = false;
+static
+bool do_decrypt = false;
+static
+bool wga_pw_read = false;
+static
+bool src_pw_read = false;
+static
+bool dst_pw_read = false;
+
+static
+char wga_pwd [256];
+static
+char src_pwd [256];
+static
+char dst_pwd [256];
+
+static
+size_t wga_pwd_sz;
+static
+size_t src_pwd_sz;
+static
+size_t dst_pwd_sz;
+
+static
+KKey src_key;
+
+static
+KKey dst_key;
+
+static
+KDirectory * cwd = NULL;
+
+
+static
+rc_t get_password (const VPath * path, char * pw, size_t pwz, size_t * num_read, KKey * key, bool * read)
+{
+    const KFile * pwfile;
+    size_t z;
+    rc_t rc;
+    char obuff [8096];
+
+    if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+    {
+        if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+            rc = KDirectoryOpenFileRead (cwd, &pwfile, "%s", obuff);
+
+        else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+            rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+        else
+            rc = RC (rcExe, rcPath, rcAccessing, rcParam, rcUnsupported);
+        if (rc == 0)
+        {
+            rc = KFileRead (pwfile, 0, pw, pwz, num_read);
+
+            if (rc == 0)
+            {
+                char * pc;
+
+                if (*num_read < pwz)
+                    pw[*num_read] = '\0';
+
+                pc = string_chr (pw, *num_read, '\r');
+                if (pc)
+                {
+                    *pc = '\0';
+                    *num_read = pc - pw;
+                }
+
+                pc = string_chr (pw, *num_read, '\n');
+                if (pc)
+                {
+                    *pc = '\0';
+                    *num_read = pc - pw;
+                }
+
+                *read = true;
+                rc = KKeyInitRead (key, kkeyAES128, pw, *num_read);
+            }
+
+            KFileRelease (pwfile);
+        }
+    }
+    else
+        rc = RC (rcExe, rcPath, rcAccessing, rcFunction, rcNotFound);
+    return rc;
+}
+
+
+static
+rc_t wga_password (const VPath * path, char * pw, size_t pwz, size_t * num_read, bool * read)
+{
+    const KFile * pwfile;
+    size_t z;
+    rc_t rc;
+    char obuff [8096];
+
+    if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+    {
+        if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+            rc = KDirectoryOpenFileRead (cwd, &pwfile, "%s", obuff);
+
+        else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+            rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+        else
+            rc = RC (rcExe, rcPath, rcAccessing, rcParam, rcUnsupported);
+        if (rc == 0)
+        {
+            rc = KFileRead (pwfile, 0, pw, pwz, num_read);
+
+            if (rc == 0)
+            {
+                char * pc;
+
+                if (*num_read < pwz)
+                    pw[*num_read] = '\0';
+
+                pc = string_chr (pw, *num_read, '\r');
+                if (pc)
+                {
+                    *pc = '\0';
+                    *num_read = pc - pw;
+                }
+
+                pc = string_chr (pw, *num_read, '\n');
+                if (pc)
+                {
+                    *pc = '\0';
+                    *num_read = pc - pw;
+                }
+
+                *read = true;
+            }
+
+            KFileRelease (pwfile);
+        }
+    }
+    else
+        rc = RC (rcExe, rcPath, rcAccessing, rcFunction, rcNotFound);
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * copycat
+ */
+static
+rc_t ccat_cache ( CCCachedFileNode **np, const KFile *sf,
+                  enum CCType ntype, CCFileNode *node, const char *name )
+{
+    rc_t rc;
+    KFile *out;
+
+    /* create path */
+    char path [ 256 ];
+    int len = snprintf ( path, sizeof path, "%s", name );
+
+    DEBUG_STATUS (("%s: name '%s'\n", __func__, name));
+
+    if ( len < 0 || len >= sizeof path )
+        return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+
+    /* look for a name that has not yet been written */
+    if ( CCTreeFind ( ctree, path ) != NULL )
+    {
+        uint32_t i;
+        const char *ext = strrchr ( name, '.' );
+        if ( ext != NULL )
+        {
+            for ( i = 2; ; ++ i )
+            {
+                len = snprintf ( path, sizeof path, "%.*s-%u%s", ( int ) ( ext - name ), name, i, ext );
+                if ( len < 0 || len >= sizeof path )
+                    return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+                if ( CCTreeFind ( ctree, path ) == NULL )
+                    break;
+            }
+        }
+        else
+        {
+            for ( i = 2; ; ++ i )
+            {
+                len = snprintf ( path, sizeof path, "%s-%u", name, i );
+                if ( len < 0 || len >= sizeof path )
+                    return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+                if ( CCTreeFind ( ctree, path ) == NULL )
+                    break;
+            }
+        }
+    }
+
+    /* create an output file */
+    rc = KDirectoryCreateFile ( cdir, & out, false, 0640, cm, "%s", path );
+    if ( rc != 0 && GetRCState ( rc ) == rcUnauthorized )
+    {
+        /* respond to a file that has no write privs */
+        uint32_t access;
+        rc_t rc2 = KDirectoryAccess ( cdir, & access, "%s", path );
+        if ( rc2 == 0 )
+        {
+            rc2 = KDirectorySetAccess ( cdir, false, 0640, 0777, "%s", path );
+            if ( rc2 == 0 )
+            {
+                rc = KDirectoryCreateFile ( cdir, & out, false, 0640, cm, "%s", path );
+                if ( rc != 0 )
+                    KDirectorySetAccess ( cdir, false, access, 0777, "%s", path );
+            }
+        }
+    }
+
+    if ( rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to create cached file '$(path)'", "path=%s", path ));
+    else
+    {
+        const KFile *tee;
+        rc = KFileMakeTeeRead ( & tee, sf, out );
+        if ( rc != 0 )
+            PLOGERR ( klogInt,  (klogInt, rc, "failed to create cache tee file on '$(path)'", "path=%s", path ));
+        else
+        {
+            KFileAddRef ( sf );
+            KFileAddRef ( out );
+            rc = KFileRelease ( tee );
+            if ( rc != 0 )
+                PLOGERR ( klogInt,  (klogInt, rc, "failed to close cache tee file on '$(path)'", "path=%s", path ));
+        }
+
+        KFileRelease ( out );
+
+        if ( rc == 0 )
+        {
+            rc = CCCachedFileNodeMake ( np, path, ntype, node );
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to create cached file node" );
+            else
+            {
+                rc = KDirectorySetAccess ( cdir, false, 0440, 0777, "%s", path );
+
+                /* create named entry in ctree */
+                rc = CCTreeInsert ( ctree, 0, ccFile, NULL, path );
+                if ( rc != 0 )
+                    LOGERR ( klogInt, rc, "failed to record cached file" );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+static
+rc_t ccat_extract_path (char * path, size_t pathz, const char * name)
+{
+    rc_t rc = 0;
+    int len;
+
+    DEBUG_STATUS (("%s: name '%s'\n", __func__, name));
+
+    if (extract_dir)
+        len = snprintf ( path, pathz, "%s%s", epath, name );
+    else
+        len = snprintf ( path, pathz, "%s", name );
+    DEBUG_STATUS (("%s: path '%s'\n",__func__, path));
+
+    if ( len < 0 || len >= pathz )
+        return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+
+    /* look for a name that has not yet been written */
+    if ( CCTreeFind ( etree, path ) != NULL )
+    {
+        uint32_t i;
+        const char *ext = strrchr ( name, '.' );
+        if ( ext != NULL )
+        {
+            for ( i = 2; ; ++ i )
+            {
+                len = snprintf ( path, pathz, "%.*s-%u%s", ( int ) ( ext - name ), name, i, ext );
+                if ( len < 0 || len >= pathz )
+                    return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+                if ( CCTreeFind ( etree, path ) == NULL )
+                    break;
+            }
+        }
+        else
+        {
+            for ( i = 2; ; ++ i )
+            {
+                len = snprintf ( path, pathz, "%s-%u", name, i );
+                if ( len < 0 || len >= pathz )
+                    return RC ( rcExe, rcFile, rcWriting, rcPath, rcExcessive );
+                if ( CCTreeFind ( etree, path ) == NULL )
+                    break;
+            }
+        }
+    }
+    DEBUG_STATUS (("%s: rc '%u(%R)' path '%s'\n",__func__, rc, rc, path));
+    return rc;
+}
+
+
+static
+rc_t ccat_extract (const KFile *sf, const char * path)
+{
+    rc_t rc;
+    KFile *out;
+
+    rc = KDirectoryCreateFile ( edir, & out, false, 0640, cm, "%s", path );
+    if ( rc != 0 && GetRCState ( rc ) == rcUnauthorized )
+    {
+        /* respond to a file that has no write privs */
+        uint32_t access;
+        rc_t rc2 = KDirectoryAccess ( edir, & access, "%s", path );
+        if ( rc2 == 0 )
+        {
+            rc2 = KDirectorySetAccess ( edir, false, 0640, 0777, "%s", path );
+            if ( rc2 == 0 )
+            {
+                rc = KDirectoryCreateFile ( edir, & out, false, 0640, cm, "%s", path );
+                DBG_KFILE(("%s: called KDirectoryCreateFile rc %R path %s\n",__func__,rc,path));
+                DBG_KFile(out);
+                if ( rc != 0 )
+                    KDirectorySetAccess ( edir, false, access, 0777, "%s", path );
+            }
+        }
+    }
+    if ( rc != 0 )
+        PLOGERR ( klogErr,
+                  ( klogErr, rc,
+                    "failed to create extracted file '$(path)'",
+                    "path=%s", path ));
+    else
+    {
+        const KFile *tee;
+        rc = KFileMakeTeeRead ( & tee, sf, out );
+        DBG_KFILE(("%s: called KFileMakeTeeRead rc %R \n",__func__,rc));
+        DBG_KFile(tee);
+        if ( rc != 0 )
+            PLOGERR ( klogInt,  ( klogInt, rc, "failed to create extract tee file on '$(path)'", "path=%s", path ));
+        else
+        {
+            KFileAddRef ( sf );
+            KFileAddRef ( out );
+            rc = KFileRelease ( tee );
+            if ( rc != 0 )
+                PLOGERR (klogInt,
+                         (klogInt, rc,
+                          "failed to close extract tee file on '$(path)'",
+                          "path=%s", path));
+            else if (!xml_dir)
+            {
+                CCCachedFileNode * np;
+
+                rc = CCCachedFileNodeMake (&np, path, ccCached, NULL );
+                if ( rc != 0 )
+                    LOGERR ( klogInt, rc, "failed to create cached extract file node" );
+                else
+                {
+                    rc = CCTreeInsert (etree, 0, ccFile, NULL, path);
+                    if ( rc != 0 )
+                        LOGERR ( klogInt, rc, "failed to record cached extract file" );
+                }
+            }
+        }
+        KFileRelease ( out );
+    }
+
+    return rc;
+}
+
+static
+rc_t ccat_arc ( CCContainerNode **np, const KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name, uint32_t type_id )
+{
+    rc_t rc /*, orc */;
+
+    /* ensure we handle this type of archive */
+    switch ( type_id )
+    {
+    case ccfftaSra:
+#if ! EXAMINE_KAR_FILES
+        * np = NULL;
+        return 0;
+#endif
+    case ccfftaHD5:
+        * np = NULL;
+        return 0;
+    case ccfftaTar:
+        break;
+    default:
+        /* don't recognize archive format - treat as a normal file */
+        PLOGMSG ( klogWarn, ( klogWarn, "archive '$(name)' type '$(ftype)' will not be analyzed: "
+                              "unknown format", "name=%s,ftype=%s", name, node -> ftype ));
+        * np = NULL;
+        return 0;
+    }
+
+    /* create container node */
+    rc = CCContainerNodeMake ( np, ntype, node );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to create container node" );
+    else
+    {
+        CCContainerNode *cont = * np;
+
+        /* orc = 0; */
+        switch ( type_id )
+        {
+        case ccfftaTar:
+            /* orc = */ ccat_tar ( cont, sf, name );
+            break;
+        case ccfftaSra:
+            /* orc = */ ccat_sra (cont, sf, name);
+            break;
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t ccat_enc ( CCContainerNode **np, const KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name,
+                uint32_t type_id )
+{
+    rc_t rc = 0;
+    const KFile *df;
+    uint64_t expected = SIZE_UNKNOWN;      /* assume we won't know */
+
+    switch ( type_id )
+    {
+    case ccffteNCBI:
+        if (!src_pw_read)
+        {
+            rc = get_password (src_path, src_pwd, sizeof src_pwd, &src_pwd_sz, &src_key, &src_pw_read);
+            if (rc)
+            {
+            validate_instead:
+                rc = KFileAddRef (sf);
+                if (rc == 0)
+                {
+                    PLOGMSG ( klogWarn, ( klogWarn, "file '$(name)' type '$(ftype)' will be validated but not be decoded: "
+                                          "no password given", "name=%s,ftype=%s", name, node -> ftype ));
+                    /* can't decompress it - treat it as a normal file */
+                    rc = KEncFileValidate (sf);
+                    if (rc)
+                    {
+                        memmove (node->ftype + sizeof "Errored" - 1, node->ftype, strlen (node->ftype));
+                        memmove (node->ftype, "Errored", sizeof "Errored" - 1);
+                    }
+                    * np = NULL;
+                    return 0;
+                }
+                return rc;
+            }
+        }
+        rc = KEncFileMakeRead (&df, sf, &src_key);
+        if (rc)
+            goto validate_instead;
+        break;
+
+    case ccffteWGA:
+        if (!wga_pw_read)
+            rc = wga_password (src_path, wga_pwd, sizeof wga_pwd, &wga_pwd_sz, &wga_pw_read);
+        if (rc == 0)
+        {
+            rc = KFileMakeWGAEncRead (&df, sf, wga_pwd, wga_pwd_sz);
+            break;
+        }
+        /* can't decompress it - treat it as a normal file */
+        PLOGMSG ( klogWarn, ( klogWarn, "file '$(name)' type '$(ftype)' will not be decoded: "
+                              "no password given", "name=%s,ftype=%s", name, node -> ftype ));
+        * np = NULL;
+        return 0;
+        
+    default:
+        /* can't decrypt it - treat it as a normal file */
+        PLOGMSG ( klogWarn, ( klogWarn, "file '$(name)' type '$(ftype)' will not be decoded: "
+                              "unknown encoding format", "name=%s,ftype=%s", name, node -> ftype ));
+        * np = NULL;
+        return 0;
+    }
+
+    if ( rc != 0 )
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to decode file '$(path)'", "path=%s", name ));
+    else
+    {
+        rc = CCContainerNodeMake ( np, ntype, node );
+        if ( rc != 0 )
+            LOGERR ( klogInt, rc, "failed to create container node" );
+        else
+        {
+            CCContainerNode *cont = * np;
+            CCFileNode *nnode;
+
+            /* now create a new contained file node */
+            rc = CCFileNodeMake ( & nnode, expected );
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to create contained file node" );
+            else
+            {
+                int len;
+                char newname [ 256 ];
+
+                /* invent a new name for file */
+                const char *ext = strrchr ( name, '.' );
+                if ( ext == NULL )
+                    len = snprintf ( newname, sizeof newname, "%s", name );
+                else
+                    len = snprintf ( newname, sizeof newname, "%.*s", ( int ) ( ext - name ), name );
+
+                if ( len < 0 || len >= sizeof newname )
+                {
+                    rc = RC ( rcExe, rcNode, rcConstructing, rcName, rcExcessive );
+                    LOGERR ( klogErr, rc, "failed to create contained file node" );
+                }
+                else
+                {
+                    void * save;
+                    const KFile * cf;
+                    /* rc_t krc; */
+
+                    copycat_log_set (&node->logs, &save);
+
+                    rc = CCFileMakeRead (&cf, df, &node->rc);
+                    if (rc == 0)
+                    {
+                        /* recurse with buffer on decoding */
+                        /* krc = */ ccat_buf ( & cont -> sub, cf, mtime,
+                                         ccContFile, nnode, newname);
+
+                        KFileRelease (cf);
+                        /* if successful, "node" ( allocated locally above )
+                           will have been entered into "cont->sub" */
+                    }
+
+                    copycat_log_set (&save, NULL);
+                }
+            }
+        }
+
+        KFileRelease ( df );
+    }
+
+    return rc;
+}
+
+static
+rc_t ccat_cmp ( CCContainerNode **np, const KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name, uint32_t type_id )
+{
+    const KFile *zf;    
+    /* use a variable incase we ever get a compression that can be queried 
+     * about file size */
+    uint64_t expected = SIZE_UNKNOWN;
+    rc_t rc;
+
+    switch ( type_id )
+    {
+
+    case ccfftcGzip:
+        /* this code attaches a new reference to "sf" */
+        rc = KFileMakeGzipForRead ( & zf, sf );
+        break;
+    case ccfftcBzip2:
+        /* this code attaches a new reference to "sf" */
+        rc = KFileMakeBzip2ForRead ( & zf, sf );
+        break;
+    default:
+        /* can't decompress it - treat it as a normal file */
+        PLOGMSG ( klogWarn, ( klogWarn, "file '$(name)' type '$(ftype)' will not be decompressed: "
+                              "unknown compression format", "name=%s,ftype=%s", name, node -> ftype ));
+        * np = NULL;
+        return 0;
+    }
+
+    if ( rc != 0 )
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to decompress file '$(path)'", "path=%s", name ));
+    else
+    {
+        rc = CCContainerNodeMake ( np, ntype, node );
+        if ( rc != 0 )
+            LOGERR ( klogInt, rc, "failed to create container node" );
+        else
+        {
+            CCContainerNode *cont = * np;
+            CCFileNode *nnode;
+
+            /* now create a new contained file node */
+            rc = CCFileNodeMake ( & nnode, expected );
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to create contained file node" );
+            else
+            {
+                int len;
+                char newname [ 256 ];
+
+                /* invent a new name for file */
+                const char *ext = strrchr ( name, '.' );
+                if ( ext == NULL )
+                    len = snprintf ( newname, sizeof newname, "%s", name );
+                else if ( strcasecmp ( ext, ".tgz" ) == 0 )
+                    len = snprintf ( newname, sizeof newname, "%.*s.tar", ( int ) ( ext - name ), name );
+                else
+                    len = snprintf ( newname, sizeof newname, "%.*s", ( int ) ( ext - name ), name );
+
+                if ( len < 0 || len >= sizeof newname )
+                {
+                    rc = RC ( rcExe, rcNode, rcConstructing, rcName, rcExcessive );
+                    LOGERR ( klogErr, rc, "failed to create contained file node" );
+                }
+                else
+                {
+                    void * save;
+                    const KFile * cf;
+                    /* rc_t krc; */
+
+                    copycat_log_set (&nnode->logs, &save);
+
+                    rc = CCFileMakeRead (&cf, zf, &node->rc);
+                    if (rc == 0)
+                    {
+                        /* recurse with buffer on decompression */
+                        /* krc = */ ccat_buf (& cont -> sub, cf, mtime,
+                                        ccContFile, nnode, newname);
+
+                        KFileRelease (cf);
+                        /* if successful, "node" ( allocated locally above )
+                           will have been entered into "cont->sub" */
+                    }
+
+                    copycat_log_set (save, NULL);
+                }
+            }
+        }
+
+        KFileRelease ( zf );
+    }
+
+    return rc;
+}
+
+static
+rc_t ccat_path_append (const char * name)
+{
+    size_t z;
+    z = string_size (name);
+    DEBUG_STATUS (("%s:in epath %s name %s z %zu \n",__func__, epath, name, z));
+    if (ehere + z + 1 >= epath + sizeof (epath))
+        return RC (rcExe, rcNoTarg, rcConcatenating, rcBuffer, rcTooShort);
+    memmove(ehere, name, z);
+    ehere += z;
+    *ehere++ = '/';
+    *ehere = '\0';
+    DEBUG_STATUS (("%s: out name %s epath %s\n",__func__,name, epath));
+    return 0;
+}
+
+static
+rc_t ccat_main ( CCTree *tree, const KFile *sf, KTime_t mtime,
+                 enum CCType ntype, CCFileNode *node, const char *name )
+{
+    /* the pointer e_go_back allows us to remove additions to the stored
+     * path built up as we descend into deeper container/archive/directories */
+    char * e_go_back = ehere;
+
+    /* determine file type based upon contents and name */
+    uint32_t type_id, class_id;
+/*     rc_t orc; */
+    rc_t rc = CCFileFormatGetType ( filefmt, sf, name,
+                                    node -> ftype, sizeof node -> ftype, & type_id, & class_id );
+
+    DEBUG_STATUS (("%s: name '%s' type '%s'\n",__func__,name,node->ftype));
+
+    if ( rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to determine type of file '$(path)'", "path=%s", name ));
+    else
+    {
+        /* file could be a container */
+        CCContainerNode *cont;
+        CCCachedFileNode *cfile;
+
+        /* assume this node will get name */
+        void *entry = node;
+
+        bool xml_insert = false;
+        bool tee_done = false;
+        /* create path */
+        const char * basename;
+        char path [ 8192 + 256 ];
+
+        if ((basename = strrchr (name, '/')) != NULL)
+            ++basename;
+        else
+            basename = name;
+
+
+        /* look for special files */
+        switch ( class_id )
+        {
+        case ccffcEncoded:
+            rc = ccat_path_append (name);
+            if (rc == 0)
+            {
+                rc = ccat_enc ( & cont, sf, mtime, ntype, node, basename, type_id );
+                if ( rc == 0 && cont != NULL )
+                {
+                    ntype = ccContainer;
+                    entry = cont;
+                }
+            }
+            ehere = e_go_back;
+            *ehere = '\0';
+            break;
+        case ccffcCompressed:
+            rc = ccat_path_append (name);
+            if (rc == 0)
+            {
+                rc = ccat_cmp ( & cont, sf, mtime, ntype, node, basename, type_id );
+                if ( rc == 0 && cont != NULL )
+                {
+                    ntype = ccContainer;
+                    entry = cont;
+                }
+            }
+            ehere = e_go_back;
+            *ehere = '\0';
+            break;
+        case ccffcArchive:
+            rc = ccat_path_append (name);
+            if (rc == 0)
+            {
+                rc = ccat_arc ( & cont, sf, mtime, ntype, node, basename, type_id );
+                if ( rc == 0 && cont != NULL )
+                {
+                    ntype = ccArchive;
+                    entry = cont;
+                }
+            }
+            ehere = e_go_back;
+            *ehere = '\0';
+            break;
+        case ccffcCached:
+            if ( cdir != NULL )
+            {
+                rc = ccat_cache ( & cfile, sf, ntype, node, basename );
+                if ( rc == 0 && cont != NULL )
+                {
+                    tee_done = true;
+                    ntype = ccCached;
+                    entry = cfile;
+                }
+            }
+            /* fall through */
+        default:
+            rc = ccat_extract_path (path, sizeof path, name);
+            DEBUG_STATUS (("%s: extract_path '%s'\n",__func__,path));
+            if ((edir != NULL) && (! tee_done))
+            {
+                rc = ccat_extract (sf, path);
+                if (rc == 0)
+                    tee_done = true;
+            }
+            if (rc == 0)
+            {
+                xml_insert = true;
+            }
+            if (!tee_done)
+            {
+                const KFile * cf;
+
+                rc = CCFileMakeRead (&cf, sf, &node->rc);
+                if (rc == 0)
+                {
+                    const KFile * tee;
+
+                    rc = KFileMakeTeeRead (&tee, cf, fnull);
+                    if (rc == 0)
+                    {
+                        rc = KFileAddRef (fnull);
+
+                        KFileRelease (tee);
+                    }
+                }
+            }
+            break;
+        }
+
+        /* create entry into tree */
+        if ( rc == 0 )
+        {
+            if (! xml_dir)
+            {
+                DEBUG_STATUS (("%s: ready to insert '%s'\n",__func__,name));
+                rc = CCTreeInsert ( tree, mtime, ntype, entry, name );
+                /* if we are extracting create a name node with other information being incorrect */
+                if (edir != NULL)
+                {
+                }
+            }
+            else if (xml_insert)
+            {
+                DEBUG_STATUS (("%s: ready to insert '%s' for '%s'\n",__func__,path, name));
+                rc = CCTreeInsert (etree, mtime, ntype, entry, path);
+            }
+
+            if ( rc != 0 )
+                PLOGERR (klogInt,  (klogInt, rc,
+                                    "failed to enter node '$(name)'",
+                                    "name=%s", name ));
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t ccat_sz ( CCTree *tree, const KFile *sf, KTime_t mtime,
+               enum CCType ntype, CCFileNode *node, const char *name )
+{
+    /* create a counting file to fill out its size */
+    const KFile *sz;
+    rc_t rc, orc;
+
+    rc = KFileMakeCounterRead ( & sz, sf, & node -> size, & node -> lines, true );
+
+
+    if ( rc != 0 )
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to create counting wrapper for '$(path)'", "path=%s", name ));
+    else
+    {
+        /* give the wrapper its own reference
+           rather than taking the one we gave it */
+        rc = KFileAddRef ( sf );
+        if (rc)
+            PLOGERR (klogInt, 
+                     (klogInt, rc, "Error in reference counting for '$(path)'", "path=%s", name ));
+        else
+            /* the main catalog function */
+            rc = ccat_main ( tree, sz, mtime, ntype, node, name );
+
+        /* release the sizer */
+        orc = KFileRelease ( sz );
+        if (orc)
+        {
+            PLOGERR (klogInt, 
+                     (klogInt, orc, "Error in closing byte counting for '$(path)'", "path=%s", name ));
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+
+    return rc;
+}
+
+rc_t ccat_md5 ( CCTree *tree, const KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name )
+{
+    /* all files have an MD5 hash for identification.
+       the following code is for expediency.
+       we already have a formatter for output,
+       and to reuse it we simply pipe its output
+       to /dev/null, so to speak */
+    KMD5SumFmt *fmt;
+    rc_t rc, orc;
+
+    /* NEW - there are some cases where md5sums would not be useful
+       and only take up CPU power. */
+    if ( no_md5 )
+        return ccat_sz ( tree, sf, mtime, ntype, node, name );
+
+    /* normal md5 path */
+    rc = KMD5SumFmtMakeUpdate ( & fmt, fnull );
+    if ( rc != 0 )
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to create md5sum formatter for '$(path)'", "path=%s", name ));
+    else
+    {
+        const KFile *md5;
+
+        /* give another fnull reference to formatter */
+        rc = KFileAddRef ( fnull );
+        if (rc)
+            LOGERR (klogInt, rc, "Error referencing MD5 format file");
+        else
+        {
+
+            /* this is the wrapper that calculates MD5 */
+            rc = KFileMakeNewMD5Read ( & md5, sf, fmt, name );
+            if ( rc != 0 )
+                PLOGERR ( klogInt,  (klogInt, rc, "failed to create md5 wrapper for '$(path)'", "path=%s", name ));
+            else
+            {
+                /* give the wrapper its own reference
+                   rather than taking the one we gave it */
+                rc = KFileAddRef ( sf );
+                if (rc)
+                    PLOGERR (klogInt,
+                             (klogInt, rc,
+                              "failure in reference counting file for '$(path)'",
+                              "path=%s", name ));
+                else
+                {
+                    /* continue on to obtaining file size */
+                    rc = ccat_sz ( tree, md5, mtime, ntype, node, name );
+
+                    /* this will drop the MD5 calculator, but not
+                       its source file, and cause the digest to be
+                       written to its formatter */
+                    orc = KFileRelease ( md5 );
+                    if (orc)
+                    {
+                        PLOGERR (klogInt,
+                                 (klogInt, rc,
+                                  "failure in release reference counting file for '$(path)'",
+                                  "path=%s", name ));
+                        if (rc == 0)
+                            rc = orc;
+                    }
+
+                    /* if there were no errors, read the MD5 from formatter.
+                       this must be done AFTER releasing the MD5 file,
+                       or nothing will ever get written */
+                    if ( rc == 0 )
+                    {
+                        bool bin;
+                        rc = KMD5SumFmtFind ( fmt, name, node -> _md5, & bin );
+                    }
+                }
+            }
+        }
+
+        /* dump the formatter, but not fnull */
+        orc = KMD5SumFmtRelease ( fmt );
+        if (orc)
+        {
+            PLOGERR (klogInt,
+                     (klogInt, rc,
+                      "failure in releasing  MD5 format file for '$(path)'",
+                      "path=%s", name ));
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+
+    return rc;
+}
+
+/* buffered recursion entrypoint */
+rc_t ccat_buf ( CCTree *tree, const KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name )
+{
+    /* create a buffered file to counter random access */
+    const KFile *buf;
+    rc_t rc, orc;
+
+#if USE_KBUFFILE
+    rc = KBufFileMakeRead (&buf, sf, 2 * 32 * 1024);
+#else
+    rc = KFileMakeReadHead (&buf, sf, 4096);
+#endif
+    if ( rc != 0 )
+        PLOGERR ( klogInt,  (klogInt, rc,
+                             "failed to create buffer for '$(path)'",
+                             "path=%s", name ));
+    else
+    {
+        /* skip ccat */
+        rc = ccat_md5 ( tree, buf, mtime, ntype, node, name );
+
+        /* release the buffer */
+        orc = KFileRelease ( buf );
+        if (orc)
+        {
+            PLOGERR (klogInt, (klogInt, orc, "Error closing buffer for '$(path)'", "path=%s", name ));
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+    return rc;
+}
+
+
+typedef struct copycat_pb
+{
+    CCTree * tree;
+    const KFile * sf;
+    KFile * df;
+    KTime_t mtime;
+    enum CCType ntype;
+    CCFileNode * node;
+    const char * name;
+} copycat_pb;
+
+
+rc_t copycat_add_tee (const copycat_pb * ppb)
+{
+    const KFile * tee;
+    rc_t rc, orc;
+
+    rc = KFileMakeTeeRead (&tee, ppb->sf, ppb->df);
+    if (rc)
+        PLOGERR (klogInt,  
+                 (klogInt, rc, "failed to create encrypter for '$(path)'",
+                  "path=%s", ppb->name ));
+    else
+    {
+        rc = KFileAddRef (ppb->df);
+        if (rc)
+            LOGERR (klogInt, rc, "Reference counting error");
+        else
+        {
+            rc = KFileAddRef (ppb->sf);
+            if (rc)
+                LOGERR (klogInt, rc, "Reference counting error");
+            else
+            {
+                orc = ccat_md5 (ppb->tree, tee, ppb->mtime, ppb->ntype, ppb->node, ppb->name);
+
+                /* report? */
+                orc = KFileRelease (tee);
+                if (orc)
+                    PLOGERR (klogInt, 
+                             (klogInt, orc,
+                              "Error in closing byte counting for '$(path)'",
+                              "path=%s", ppb->name ));
+
+/*                 orc = KFileRelease (ppb->sf); */
+/*                 if (orc) */
+/*                     PLOGERR (klogInt,  */
+/*                              (klogInt, orc, */
+/*                               "Error in closing byte counting of tee source for '$(path)'", */
+/*                               "path=%s", ppb->name )); */
+            }
+/*             orc = KFileRelease (ppb->df); */
+/*             if (orc) */
+/*                 PLOGERR (klogInt,  */
+/*                          (klogInt, orc, */
+/*                           "Error in closing byte counting of tee destination for '$(path)'", */
+/*                           "path=%s", ppb->name )); */
+        }       
+    }
+    return rc;
+}
+
+
+static
+rc_t copycat_add_node (const copycat_pb * ppb)
+{
+    rc_t rc;
+
+    rc = ccat_path_append (ppb->name);
+    if (rc == 0)
+    {
+        CCContainerNode *cont;
+
+        /* make a container node for the encrypted output file */
+        rc = CCContainerNodeMake (&cont, ccFile, ppb->node);
+        if (rc)
+        {
+            PLOGERR (klogInt,
+                     (klogInt, rc, "error creating container node for '$(path)'",
+                      "path=%s", ppb->name));
+        }
+        else
+        {
+            copycat_pb pb = *ppb;
+            uint64_t expected = /*(ppb->node->expected != SIZE_UNKNOWN)
+                                  ? ppb->node->expected :*/ SIZE_UNKNOWN;
+            pb.tree = &cont->sub;
+
+            /* this will be the node for the unencrypted version of the output file */
+            rc = CCFileNodeMake (&pb.node, expected );
+            if (rc)
+                LOGERR (klogInt, rc, "failed to create contained node");
+            else
+            {
+                void * save;
+                size_t len;
+                size_t elen;
+                size_t clen;
+                rc_t orc;
+                char name [ 1024 ];
+
+                len = strlen (pb.name);
+                elen = strlen (ncbi_encryption_extension);
+                clen = len - elen;
+
+                /* 
+                 *if the name had .ncbi_enc at the end remove it
+                 * for the inner node.
+                 */
+                if (strcmp (ncbi_encryption_extension, pb.name + clen) == 0)
+                {
+                    memmove (name, pb.name, clen);
+                    name[clen] = '\0';
+                }
+                /*
+                 * if it did not, prepend '.' to the name
+                 */
+                else
+                {
+                    name[0] = '.';
+                    if (len > sizeof name - 2)
+                        len = sizeof name - 2;
+                    strncpy (name+1, pb.name, len);
+                    name[len+1] = '\0';
+                }
+                pb.name = name;
+
+                copycat_log_set (&pb.node->logs, &save);
+
+                rc = copycat_add_tee (&pb);
+
+                copycat_log_set (save, NULL);
+
+                orc = CCTreeInsert (ppb->tree, ppb->mtime, ccContainer, cont, ppb->name);
+
+                if (rc == 0)
+                    rc = orc;
+            }
+        }
+    }
+    return rc;
+}
+
+/* -----
+ * copycat_add_enc
+ *
+ * add an encryptor to the copy chain
+ */
+rc_t copycat_add_enc (const copycat_pb * ppb)
+{
+    copycat_pb pb = *ppb;
+    rc_t rc = 0;
+
+    if (!dst_pw_read)
+        rc = get_password (dst_path, dst_pwd, sizeof dst_pwd, &dst_pwd_sz, &dst_key, &dst_pw_read);
+    if (rc)
+        return rc;
+
+    rc = KEncFileMakeWrite (&pb.df, ppb->df, &dst_key);
+    if (rc)
+        PLOGERR (klogInt,
+                 (klogInt, rc, "failed to create encrypter for '$(path)'",
+                  "path=%s", pb.name ));
+    else
+    {
+        strncpy (pb.node->ftype, "Encoded/NCBI", sizeof pb.node->ftype);
+
+
+        /* add the container to the cataloging tree */
+        rc = copycat_add_node (&pb);
+        if (rc == 0)
+        {
+            rc = KFileRelease (pb.df);
+            if (rc)
+            {
+                PLOGERR (klogInt, 
+                         (klogInt, rc,
+                          "Error in closing byte counting for '$(path)'",
+                          "path=%s", pb.name ));
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* -----
+ * copycat_add_sz
+ *
+ * if we are encrypting the output we need to do an actual byte count across the
+ * write side of the encryption so we add a filter into the copy chain.  If we
+ * are not encrypting we do this calculation in the ccat chain for the outside file
+ * and never reach this function.
+ */
+rc_t copycat_add_sz (const copycat_pb * ppb)
+{
+    /* create a counting file to fill out its size */
+    copycat_pb pb = *ppb;
+    rc_t rc, orc;
+
+    rc = KFileMakeCounterWrite (&pb.df, ppb->df, &pb.node->size, &pb.node->lines, true);
+    if (rc)
+        PLOGERR (klogInt,
+                 (klogInt, rc,
+                  "failed to create counting wrapper for '$(path)'",
+                  "path=%s", pb.name ));
+    else
+    {
+        /* give the wrapper its own reference
+           rather than taking the one we gave it */
+        rc = KFileAddRef ( ppb->df );
+        if (rc)
+            PLOGERR (klogInt, 
+                     (klogInt, rc, "Error in reference counting for '$(path)'",
+                      "path=%s", pb.name));
+        else
+            rc = copycat_add_enc (&pb);
+
+        /* release the sizer */
+        orc = KFileRelease (pb.df);
+        if (orc)
+        {
+            PLOGERR (klogInt, 
+                     (klogInt, orc, "Error in closing byte counting "
+                      "(probable read error) for '$(path)'", "path=%s",
+                      pb.name ));
+            /* a failure in the counter destructor might mean a failure
+             * in the copy so return the error */
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+
+    return rc;
+}
+
+
+/* -----
+ * copycat_add_md5
+ *
+ * if we are encrypting the output we need to do an md5 calculation across the
+ * write side of the encryption so we add a filter into the copy chain.  If we
+ * are not encrypting we do the md5 calculation in the ccat chain for the outside file
+ * and never reach this function.
+ */
+rc_t copycat_add_md5 (const copycat_pb * ppb)
+{
+    /* all files have an MD5 hash for identification.
+       the following code is for expediency.
+       we already have a formatter for output,
+       and to reuse it we simply pipe its output
+       to /dev/null, so to speak */
+    KMD5SumFmt *fmt;
+    rc_t rc;
+
+    if ( no_md5 )
+        return copycat_add_sz (ppb);
+
+    rc = KMD5SumFmtMakeUpdate (&fmt, fnull);
+    if ( rc != 0 )
+        PLOGERR (klogInt,
+                 (klogInt, rc,
+                  "failed to create md5sum formatter for '$(path)'",
+                  "path=%s", ppb->name ));
+    else
+    {
+        rc_t orc;
+        /* give another fnull reference to formatter */
+        rc = KFileAddRef (fnull);
+        if (rc)
+            LOGERR (klogInt, rc, "Error referencing MD5 format file");
+        else
+        {
+            copycat_pb pb = *ppb;
+
+            /* this is the wrapper that calculates MD5 */
+            rc = KMD5FileMakeWrite ((struct KMD5File**)&pb.df, ppb->df, fmt, ppb->name );
+            if ( rc != 0 )
+                PLOGERR (klogInt,
+                         (klogInt, rc,
+                          "failed to create md5 wrapper for '$(path)'",
+                          "path=%s", ppb->name ));
+            else
+            {
+                /* give the wrapper its own reference
+                   rather than taking the one we gave it */
+                rc = KFileAddRef (ppb->df);
+                if (rc)
+                    PLOGERR (klogInt,
+                             (klogInt, rc,
+                              "failure in reference counting file for '$(path)'",
+                              "path=%s", ppb->name ));
+                else
+                    /* continue on to obtaining file size */
+                    rc = copycat_add_sz (&pb);
+
+                /* this will drop the MD5 calculator, but not
+                   its source file, and cause the digest to be
+                   written to its formatter */
+                orc = KFileRelease (pb.df);
+                if (orc)
+                {
+                    PLOGERR (klogInt,
+                             (klogInt, orc,
+                              "failure in releasing md5 calculation file for '$(path)'",
+                              "path=%s", ppb->name ));
+                }
+
+                /* if there were no errors, read the MD5 from formatter.
+                   this must be done AFTER releasing the MD5 file,
+                   or nothing will ever get written */
+                if (orc == 0)
+                {
+                    bool bin;
+                    orc = KMD5SumFmtFind (fmt, ppb->name, ppb->node->_md5, &bin);
+                    if (orc)
+                        PLOGERR (klogWarn,
+                                 (klogWarn, orc,
+                                  "Error in obtaining the MD5 for '$(path)'",
+                                  "path=%s", pb.name));
+                }
+            }
+        }
+
+        /* dump the formatter, but not fnull */
+        orc = KMD5SumFmtRelease (fmt);
+        if (orc)
+        {
+            PLOGERR (klogInt,
+                     (klogInt, rc,
+                      "failure in releasing  MD5 format file for '$(path)'",
+                      "path=%s", ppb->name ));
+            /* we can 'forget' this error after logging it */
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+
+    return rc;
+}
+
+/* -----
+ * copycat_add_crc
+ *
+ * this is the first function in building the write side of the copy chain
+ *
+ * We calculate a crc on the outgoing file and none of the interior files
+ * and we do that at this point in the chain regardless of whether we will
+ * encrypt the outgoing file.
+ *
+ * We'll add the crc calculator to the write side stream and then decide
+ * whether to add an encryptor into the chain.  We add one to the write side
+ * of the chain if we have an encrypting password or jump to finishing the
+ * copy chain if we do not
+ */
+rc_t copycat_add_crc (const  copycat_pb * ppb)
+{
+    /* external files have a CRC32 checksum
+       the following code is for expediency.
+       we already have a formatter for output,
+       and to reuse it we simply pipe its output
+       to /dev/null, so to speak */
+    rc_t rc;
+    KCRC32SumFmt * fmt; 
+
+    rc = KCRC32SumFmtMakeUpdate ( &fmt, fnull );
+    if ( rc != 0 )
+        PLOGERR (klogInt,
+                 (klogInt, rc,
+                  "failed to create crc32sum formatter for '$(path)'",
+                  "path=%s", ppb->name ));
+    else
+    {
+        rc_t orc = 0;
+
+        /* give another fnull reference to formatter */
+        rc = KFileAddRef ( fnull );
+        if (rc)
+            PLOGERR (klogInt,
+                     (klogInt, rc, 
+                      "error in reference counting crc formatter fnull for '$(path)'",
+                      "path=%s", ppb->name ));
+        else
+        {
+            copycat_pb pb = *ppb;
+
+            /* this is the wrapper that calculates CRC32 */
+            rc = KCRC32FileMakeWrite ( (KCRC32File**)&pb.df, ppb->df, fmt, ppb->name );
+            if ( rc != 0 )
+                PLOGERR (klogInt,
+                         (klogInt, rc,
+                          "failed to create crc32 wrapper for '$(path)'",
+                          "path=%s", ppb->name ));
+            else
+            {
+                /* give the wrapper its own reference
+                   rather than taking the one we gave it */
+                rc = KFileAddRef (ppb->df);
+                if (rc)
+                    PLOGERR (klogInt,
+                             (klogInt, rc, 
+                              "error in reference counting file for '$(path)'",
+                              "path=%s", ppb->name ));
+                else if (do_encrypt)
+                {
+                    /* add in the size of the enc header */
+                    if (pb.node->expected != SIZE_UNKNOWN)
+                    {
+                        uint64_t temp;
+
+                        temp = pb.node->expected; /* current expected count */
+
+                        temp += (ENC_DATA_BLOCK_SIZE - 1); /* add enough to fill last block */
+                        temp /= ENC_DATA_BLOCK_SIZE; /* how many blocks */
+                        temp *= sizeof (KEncFileBlock); /* size of encrypted blocks */
+                        temp += sizeof (KEncFileHeader) + sizeof (KEncFileFooter);
+                        pb.node->expected = temp;
+                    }
+                    rc = copycat_add_md5 (&pb);
+                }
+                else
+                    rc = copycat_add_tee (&pb);
+
+                /* this will drop the CRC calculator, but not
+                   its source file, and cause the CRC to be
+                   written to its formatter */
+                orc = KFileRelease (pb.df);
+                if (orc)
+                {
+                    LOGERR (klogErr, orc, "Failed to close out crc calculator");
+                    /* an error here implies an error in the copy so report it */
+                    rc = orc;
+                }
+            }
+            /* if there were no errors, read the CRC from formatter.
+               this must be done AFTER releasing the CRC file,
+               or nothing will ever get written */
+            if ( rc == 0 )
+            {
+                bool bin;
+                orc = KCRC32SumFmtFind ( fmt, ppb->name, &pb.node->crc32, &bin );
+                if (orc)
+                    PLOGERR (klogWarn,
+                             (klogWarn, orc,
+                              "Failed to obtain the CRC for '$(path)'",
+                              "path=%s", pb.name));
+                /* an error here isn't an error in copy */
+            }
+        }
+        /* dump the formatter, but not fnull */
+        orc = KCRC32SumFmtRelease ( fmt );
+        if (orc)
+            LOGERR (klogWarn, orc, "Failed to close off CRC storage");
+        /* this error we do not need to track */
+        if (rc == 0)
+            rc = orc;
+    }
+    return rc;
+}
+
+
+/* -----
+ * copycat_add_buf2
+ *
+ * This function adds buffering to the outermostDecrypted file read so that we
+ * can read the first portion of the file for file type analysis and then
+ * re-read it for cataloging.
+ *
+ * At this point the only file type analysis needed is to determine
+ * whether we have in incoming encrypted file We've already checked for
+ * the existence of the key or we wouldn't get here.
+ */
+rc_t copycat_add_buf2 (const copycat_pb * ppb)
+{
+    copycat_pb pb = *ppb;
+    rc_t rc = 0;
+
+    /* create a buffered file to allow re-reading of the first 128 bytes
+     * a tad overkill */
+#if USE_KBUFFILE
+    rc = KBufFileMakeRead (&pb.sf, ppb->sf, 2*32*1024);
+#else
+    rc = KFileMakeReadHead (&pb.sf, ppb->sf, 4*1024);
+#endif
+    if (rc)
+    {
+        PLOGERR (klogInt,  
+                 (klogInt, rc,
+                  "failed to create buffer for '$(path)'",
+                  "path=%s", pb.name ));
+    }
+    else
+    {
+        rc_t orc;
+
+        rc = copycat_add_crc (&pb);
+
+        orc = KFileRelease (pb.sf);
+        if (orc)
+            PLOGERR (klogInt,  
+                     (klogInt, orc,
+                      "failed to read buffer for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    return rc;
+}
+
+
+/* -----
+ * copycat_add_dec
+ *
+ * add a decryption to the read side of the copy chain.
+ * no other decisions made here
+ */
+rc_t copycat_add_dec_ncbi (const copycat_pb * ppb)
+{
+    copycat_pb pb = *ppb;
+    rc_t rc = 0;
+
+    if (!src_pw_read)
+        rc = get_password (src_path, src_pwd, sizeof src_pwd, &src_pwd_sz, &src_key, &src_pw_read);
+
+    if (rc == 0)
+    {
+        rc = KEncFileMakeRead (&pb.sf, ppb->sf, &src_key);
+        if (rc)
+            PLOGERR (klogInt,  
+                     (klogInt, rc,
+                      "failed to create decrypter for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    if (rc == 0)
+    {
+        rc_t orc;
+
+        /* this decryption won't know its output size until it gets there */
+        pb.node->expected = SIZE_UNKNOWN;
+        rc = copycat_add_buf2 (&pb);
+        orc = KFileRelease (pb.sf);
+        if (orc)
+            PLOGERR (klogInt,  
+                     (klogInt, orc,
+                      "failed to close decrypter for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    return rc;
+}
+
+rc_t copycat_add_dec_wga (const copycat_pb * ppb)
+{
+    copycat_pb pb = *ppb;
+    rc_t rc = 0;
+
+    if (!src_pw_read)
+        rc = wga_password (src_path, src_pwd, sizeof src_pwd, &src_pwd_sz, &src_pw_read);
+
+    if (rc == 0)
+    {
+        rc = KFileMakeWGAEncRead (&pb.sf, ppb->sf, src_pwd, src_pwd_sz);
+        if (rc)
+            PLOGERR (klogInt,  
+                     (klogInt, rc,
+                      "failed to create decrypter for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    if (rc == 0)
+    {
+        rc_t orc;
+
+        if (pb.node->expected != SIZE_UNKNOWN)
+            pb.node->expected -= 128; /* subtract off the size of the WGA header */
+        rc = copycat_add_buf2 (&pb);
+        orc = KFileRelease (pb.sf);
+        if (orc)
+            PLOGERR (klogInt,  
+                     (klogInt, orc,
+                      "failed to close decrypter for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    return rc;
+}
+
+/* -----
+ * copycat_add_dec
+ *
+ * At this point the only file type analysis needed is to determine
+ * whether we have in incoming encrypted file We've already checked for
+ * the existence of the key or we wouldn't get here.
+ */
+rc_t copycat_add_dec (const copycat_pb * ppb)
+{
+    copycat_pb pb = *ppb;
+    rc_t rc = 0;
+    size_t num_read;
+    uint8_t buff [128];
+
+    rc = KFileReadAll (pb.sf, 0, buff, sizeof buff, &num_read);
+    if (rc)
+        PLOGERR (klogInt,  
+                 (klogInt, rc,
+                  "failed to read buffer for '$(path)'",
+                  "path=%s", pb.name ));
+    else
+    {
+        rc_t orc;
+
+        /* 
+         * if we have an encrypted file add decryption to the chain
+         * if not jump sraight to the write side of the chain
+         */
+        if (CCFileFormatIsNCBIEncrypted (buff))
+            rc = copycat_add_dec_ncbi (&pb);
+        else if (KFileIsWGAEnc (buff, num_read) == 0)
+            rc = copycat_add_dec_wga (&pb);
+        else
+            rc = copycat_add_crc (&pb);
+
+        orc = KFileRelease (pb.sf);
+        if (orc)
+            PLOGERR (klogInt,  
+                     (klogInt, orc,
+                      "failed to read buffer for '$(path)'",
+                      "path=%s", pb.name ));
+    }
+    return rc;
+}
+
+
+/* -----
+ * copycat
+ *
+ * The copycat function is the actual copy and catalog function.
+ * All before this function is called is building toward this.
+ *
+ * The functions prefixed copycat_add_ are functions used in building the 
+ * chain of KFS and other filters for doing the copy function.  Some 
+ * cataloging is included where the output file is encoded and to
+ * generate the CRC unique to the outer file in the catalog.
+ * The ccat_add_ functions are filters toward the leafs in the catlog 
+ * portion of the program.
+ *
+ * Much of this could be inlined but the indention creep across the screen
+ * and the handling of levels of indention would get intense.  Also some
+ * filters are skipped which also would have made it more unweildy to 
+ * write and maintain.
+ *
+ * In this function we build a node for cataloging the outermost layer of
+ * the output file which may differ from the file as read here if a
+ * decryption and/or encryption is added.
+ *
+ * We then
+ */
+rc_t copycat (CCTree *tree, KTime_t mtime, KDirectory * _cwd,
+              const VPath * src, const KFile *sf,
+              const VPath * dst,  KFile *df,
+              const char *spath, const char *name,
+              uint64_t expected, bool _do_decrypt, bool _do_encrypt)
+{
+    void * save;
+    copycat_pb pb;
+    rc_t rc;
+
+    DEBUG_STATUS (("%s: copy file %s\n",__func__, spath));
+
+    cwd = _cwd;
+    src_path = src;
+    dst_path = dst;
+
+    src_pw_read = false;
+
+    do_decrypt = _do_decrypt;
+    do_encrypt = _do_encrypt;
+
+    /* -----
+     * Create a cataloging node for the outer most file as written
+     */
+    rc = CCFileNodeMake ( &pb.node, expected );
+    if (rc)
+    {
+        LOGERR ( klogInt, rc, "failed to allocate file node" );
+        return rc;
+    }
+
+    pb.tree = tree;
+    pb.mtime = mtime;
+    pb.ntype = ccFile;
+    pb.name = name;
+
+
+    copycat_log_set (&pb.node->logs, &save);
+
+    if (out_block)
+    {
+        rc = KBufWriteFileMakeWrite (&pb.df, df, out_block);
+        if (rc)
+        {
+            PLOGERR (klogInt,  
+                     (klogInt, rc,
+                      "failed to create buffer for '$(path)'",
+                      "path=%s", pb.name ));
+            return rc;
+        }
+    }
+    else
+    {
+        pb.df = df;
+    }
+
+    if (in_block)
+    {
+        rc = KBufReadFileMakeRead (&pb.sf, sf, in_block);
+    }
+    else
+    {
+#if USE_KBUFFILE
+        rc = KBufFileMakeRead (&pb.sf, sf, 2*32*1024);
+#else
+        rc = KFileMakeReadHead (&pb.sf, sf, 4*1024);
+#endif
+    }
+    if (rc)
+    {
+        PLOGERR (klogInt,  
+                 (klogInt, rc,
+                  "failed to create buffer for '$(path)'",
+                  "path=%s", spath ));
+        return rc;
+    }
+    else
+    {
+        /* 
+         * if we have a decryption password prepare a decryption read path
+         * if not jump to preparing the write path
+         */
+        rc = do_decrypt
+            ? copycat_add_dec (&pb)
+            : copycat_add_crc (&pb);
+    }
+    copycat_log_set (save, NULL);
+
+    return rc;
+}
diff --git a/tools/copycat/cccopier.c b/tools/copycat/cccopier.c
new file mode 100644
index 0000000..07c6a21
--- /dev/null
+++ b/tools/copycat/cccopier.c
@@ -0,0 +1,217 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <atomic.h>
+
+#include <kapp/main.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kapp/log.h>
+
+#include "copycat-priv.h"
+
+
+struct Copier
+{
+    atomic32_t refcount;
+    BufferQ * q;	/* input q for buffers to copy to file */
+    KFile * f;		/* output file (actually a KMD5File) */
+    uint64_t o;		/* how far into the output file are we */
+};
+
+
+rc_t CopierRelease (const Copier * cself)
+{
+    rc_t rc = 0;
+    Copier * self = (Copier*)cself;
+
+    if (self != NULL)
+    {
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    rc = KFileRelease (self->f);
+	    if (rc == 0)
+	    {
+		rc = BufferQRelease (self->q);
+		if (rc == 0)
+		{
+		    free (self);
+		}
+	    }
+	}
+    }
+    return rc;
+}
+
+rc_t CopierAddRef (const Copier * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((Copier*)self)->refcount);
+    return 0;
+}
+
+static
+rc_t CopierMakeF (Copier * cp, KDirectory * dir, const char * path)
+{
+    rc_t rc, orc;
+    KFile * fm;
+
+    rc = KDirectoryCreateFile (dir, &fm, true, 0666, kcmCreate|kcmParents,
+				"%s.md5", path);
+    if (rc == 0)
+    {
+	KMD5SumFmt * md5f;
+	rc = KMD5SumFmtMakeUpdate (&md5f, fm);
+	if (rc == 0)
+	{
+	    KFile * f;
+	    rc = KDirectoryCreateFile (dir, &f, false, 0666, kcmCreate, 
+                                    "%s", path);
+	    if (rc == 0)
+	    {
+		KMD5File * fmd5;
+		rc = KMD5FileMakeWrite (&fmd5, f, md5f, path);
+		if (rc == 0)
+		{
+		    cp->f = KMD5FileToKFile (fmd5);
+		    orc = KMD5SumFmtRelease (md5f);
+                    if (orc)
+                        LOGERR (klogInt, orc, "Failure releasing MD5 format");
+		    cp->o = 0; /* start of file */
+		    return rc;
+		}
+		orc = KFileRelease (f);
+                if (orc)
+                    LOGERR (klogInt, orc, "Failure releasing Copier file");
+	    }
+	    orc = KMD5SumFmtRelease (md5f);
+            if (orc)
+                LOGERR (klogInt, orc, "Failure releasing MD5 format");
+	}
+	orc = KFileRelease (fm);
+        if (orc)
+            LOGERR (klogInt, orc, "Failure releasing MD5SUM file");
+    }
+    return rc;
+}
+
+rc_t CopierMake (Copier ** c, KDirectory * dir, const char * path, uint32_t timeout, uint32_t length)
+{
+    rc_t rc = 0, orc;
+    Copier * self;
+
+    self = malloc (sizeof *self);
+    if (self == NULL)
+    {
+	rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+    }
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	self->f = NULL;
+	self->q = NULL;
+	rc = CopierMakeF (self, dir, path);
+	if (rc == 0)
+	{
+	    rc = BufferQMake (&self->q, timeout, length);
+	    if (rc == 0)
+	    {
+		*c = self;
+		atomic32_set (&self->refcount, 1);
+		return rc;
+	    }	    
+	}
+	orc = CopierRelease (self);
+        if (orc)
+            LOGERR (klogInt, orc, "Error releasing Copier");
+    }
+    return rc;
+}
+
+rc_t CopierDoOne (Copier * self)
+{
+    rc_t rc = 0;
+    const Buffer * b;
+
+    LOGMSG (klogDebug10, "CopierDoOne");
+    rc = Quitting();
+    if (rc == 0)
+    {
+	LOGMSG (klogDebug10, "call BufferQPopBuffer");
+	rc = BufferQPopBuffer (self->q, &b, NULL);
+	if (rc == 0)
+	{
+	    size_t w;
+	    size_t z;
+	    LOGMSG (klogDebug10, "call BufferContentGetSize");
+	    z = BufferContentGetSize (b);
+	    rc = KFileWrite (self->f, self->o, b, z, &w);
+	    self->o += w;
+	    if (w != z)
+		rc = RC (rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete);
+	    else
+		rc = BufferRelease (b);
+	}
+	/* ow this is ugly! */
+	/* is the rc a "exhausted" on a timeout? */
+	else if ((GetRCObject(rc) == rcTimeout) && (GetRCState(rc) == rcExhausted))
+	{
+	    rc = 0;
+	    LOGMSG (klogDebug10, "CopierDoOne timeout");
+	    /* if so is the queue also sealed? */
+	    if (BufferQSealed (self->q) == true)
+	    {
+		LOGMSG (klogDebug10, "CopierDoOne sealed");
+		/* if both then we are done and so signal */
+		rc = KFileRelease (self->f);
+		PLOGMSG (klogDebug10, "CopierDoOne back from KFileRelease $(rc)",PLOG_U32(rc),rc);
+		if (rc == 0)
+		{
+		    self->f = NULL;
+		    rc = BufferQRelease (self->q);
+		    if (rc == 0)
+		    {
+			self->q = NULL;
+			rc = RC (rcExe, rcNoTarg, rcCopying, rcNoTarg, rcDone );
+		    }
+		}
+	    }
+	}
+	else
+	    LOGMSG (klogDebug10, "CopierDoOne pop failure");
+
+    }
+    else
+	LOGMSG (klogDebug10, "CopierDoOne: quitting");
+    return rc;
+}
+
+BufferQ * CopierGetQ (Copier *self)
+{
+    return (self->q);
+}
+
diff --git a/tools/copycat/cccopy.c b/tools/copycat/cccopy.c
new file mode 100644
index 0000000..b46f241
--- /dev/null
+++ b/tools/copycat/cccopy.c
@@ -0,0 +1,347 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <assert.h>
+#include <atomic.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <kapp/log.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kfs/teefile.h>
+#include "copycat.h"
+
+
+/* ======================================================================
+ * CCCopy does up the copy portion of the copycat tool's functionality
+ * and sets up CCCat that does the Catalog portion.
+ */
+struct CCCopy
+{
+    atomic32_t refcount;
+    const KDirectory * in;
+    KDirectory * out;
+    KDirectory * xml;
+    KMD5SumFmt * md5;
+    CCFileFormat * ff;
+    CCTree * tree;
+    uint32_t	timeout;
+    bool force;
+    char path[4096];
+};
+
+rc_t CCCopyAddRef (const CCCopy * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((CCCopy*)self)->refcount);
+    return 0;
+}
+
+rc_t CCCopyRelease (const CCCopy * cself)
+{
+    CCCopy * self = (CCCopy *)cself;
+    rc_t rc = 0;
+    LOGMSG (klogDebug9, "Enter: CCCopyRelease");
+
+    if (self != NULL)
+    {
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    KDirectoryRelease (self->in);
+	    KDirectoryRelease (self->out);
+	    KDirectoryRelease (self->xml);
+	    KMD5SumFmtRelease (self->md5);
+	    CCFileFormatRelease (self->ff);
+	    free (self);
+	}
+    }
+    return rc;
+}
+
+rc_t CCCopyMake (CCCopy ** p, const KDirectory * in,  KDirectory * out, 
+		  KDirectory * xml, bool force, KMD5SumFmt * md5,
+		  CCFileFormat * ff, CCTree * tree, const char * path)
+{
+    rc_t rc;
+    size_t pathlen;
+    CCCopy * self;
+    char relpath [4096];
+
+    assert (in != NULL);
+    assert (out != NULL);
+    assert (xml != NULL);
+    assert (path != NULL);
+
+    rc = KDirectoryResolvePath (in, false, relpath, sizeof relpath, "%s", path);
+    if (rc != 0)
+    {
+	pLOGERR (klogErr, rc, "unable to resolve path $(P)", PLOG_S(P), path);
+	return rc;
+    }
+    if ((relpath[0] == '.') && (relpath[1] == '.') && (relpath[2] == '/'))
+    {
+	rc = RC (rcExe, rcDirectory, rcResolving, rcPath, rcOutOfKDirectory);
+	pLOGERR (klogErr, rc, "Path must resolve to current directory or subdirectories $(P)",
+		 PLOG_S(P), relpath);
+	return rc;
+    }
+
+    pathlen = strlen(relpath);
+    self = malloc (sizeof (*self) - sizeof (*self->path) + pathlen + 1);
+    if (self == NULL)
+	rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	KDirectoryAddRef (in);
+	KDirectoryAddRef (out);
+	KDirectoryAddRef (xml);
+	KMD5SumFmtAddRef (md5);
+	CCFileFormatAddRef (ff);
+	self->in = in;
+	self->out = out;
+	self->xml = xml;
+	self->force = force;
+	self->md5 = md5;
+	self->ff = ff;
+	self->tree = tree;
+	memmove (self->path, relpath, pathlen+1);
+	*p = self;
+    }
+    return rc;
+}
+static
+rc_t CCCopyDoFile (CCCopy * self)
+{
+    const KFile * original;
+    rc_t rc = 0;
+    enum KCreateMode mode;
+    
+    PLOGMSG (klogDebug9, "CCCopyDoFile $(f)", PLOG_S(f), self->path);
+
+    if (! self->force)
+    {
+	/* if not forced replace mode we fail on existing file */
+	mode = kcmCreate;
+    }
+    else
+    {
+	uint32_t tt;
+
+	tt = KDirectoryPathType (self->out, "%s", self->path);
+	switch (tt)
+	{
+	default:
+	    PLOGMSG (klogWarn, "File exists and will be replaced in output directory $(f)",
+		     PLOG_S(f), self->path);
+	    break;
+	    /* if the path to the file or the file do not exist no warning */
+	case kptNotFound:
+	case kptBadPath:
+	    break;
+	}
+	tt = KDirectoryPathType (self->xml, "%s", self->path);
+	switch (tt)
+	{
+	default:
+	    PLOGMSG (klogWarn, "File exists and might be replaced in xml directory $(f)",
+		     PLOG_S(f), self->path);
+	    break;
+	    /* if the path to the file or the file do not exist no warning */
+	case kptNotFound:
+	case kptBadPath:
+	    break;
+	}
+
+	/* forced mode we create with init instead of create forcing a delete/create effect */
+	mode = kcmInit;
+    }
+
+    /* open original source for read */
+    rc = KDirectoryOpenFileRead (self->in, &original, "%s", self->path);
+    if (rc == 0)
+    {
+	KFile * copy;
+
+	/* create copy output for write */
+	rc = KDirectoryCreateFile (self->out, &copy, false, 0644, mode|kcmParents,
+                                "%s", self->path);
+	if (rc == 0)
+	{
+	    KFile * fm;
+
+	    /* create parallel <path>.md5 */
+	    rc = KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5",
+				       self->path);
+	    if (rc == 0)
+	    {
+		KMD5SumFmt * md5f;
+
+		/* make the .md5 an MD5 sum format file */
+		rc = KMD5SumFmtMakeUpdate (&md5f, fm);
+		if (rc == 0)
+		{
+		    union u
+		    {
+			KFile * kf;
+			KMD5File * mf;
+		    } outf;
+
+		    /* combine the copy and MD5 file into our special KFile */
+		    rc = KMD5FileMakeWrite (&outf.mf, copy, md5f, self->path);
+		    if (rc == 0)
+		    {
+			const KFile * inf;
+
+			/* release this outside reference to the MD5SumFMT leaving
+			 * only the one internal to the KMD5File */
+			KMD5SumFmtRelease (md5f);
+
+			/* create the KTeeFile that copies reads from the
+			 * original as writes to the copy.  Reads will be
+			 * made by the cataloging process */
+			rc = KFileMakeTeeRead (&inf, original, outf.kf);
+			if (rc == 0)
+			{
+			    CCCat * po;
+			    KTime_t mtime;
+
+			    /* try to get a modification time for this pathname */
+			    rc = KDirectoryDate (self->in, &mtime, "%s", self->path);
+			    if (rc != 0)
+				mtime = 0;	/* default to ? 0? */
+
+			    /* create the cataloger giving it the infile which
+			     * is the KTeeFile, Indirectory, the XML directory,
+			     * and the original path for the file */
+
+			    rc = CCCatMake (&po, self->in, self->xml, inf, self->md5,
+					    self->ff, mtime, self->tree, false, 0, self->path);
+			    if (rc == 0)
+			    {
+				/* do the catalog (and thus copy) */
+				rc = CCCatDo(po);
+				/* release the cataloger object */
+				CCCatRelease (po);
+			    }
+			    else
+				pLOGERR (klogDebug6, rc, "failure in CCCatMake $(P)",
+				     PLOG_S(P), self->path);
+			    /* release the infile which will complete a  copy 
+			     * regardless of the state of the cataloger */
+			    KFileRelease (inf);
+/* 			    return rc; */
+			}
+			else
+			{
+			    KFileRelease (outf.kf);
+			    KFileRelease (original);
+			    pLOGERR (klogDebug4, rc, "failure with kfilemaketeeread $(P)",
+				     PLOG_S(P), self->path);
+			} /* rc = KFileMakeTeeRead (&inf, original, outf.kf);*/
+		    }
+		    else
+		    {
+			KFileRelease (copy);
+			KMD5SumFmtRelease (md5f);
+			pLOGERR (klogDebug4, rc, "failure with KMD5FileMakeWrite $(P)",
+				 PLOG_S(P), self->path);
+		    } /* KMD5FileMakeWrite (&outf.mf, copy, md5f, self->path); */
+		} /* KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5", */
+		else
+		    pLOGERR (klogDebug4, rc, "failure with KMD5SumFmtMakeUpdate $(P)",
+			     PLOG_S(P), self->path);
+
+		KFileRelease (fm);
+	    } /* KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5", */
+	    else
+		pLOGERR (klogDebug4, rc, "failure with KDirectoryCreateFile $(P).md5",
+			 PLOG_S(P), self->path);
+	    KFileRelease (copy);
+	} /* rc = KDirectoryVCreateFile (self->out, &copy, false, 0644, mode|kcmParents, */
+	else
+	    pLOGERR (klogDebug4, rc, "failure with KDirectoryVCreateFile $(P)",
+		     PLOG_S(P), self->path);
+	KFileRelease (original);
+    } /* rc = KDirectoryVOpenFileRead (self->in, &original, self->path, NULL); */
+    else
+	pLOGERR (klogDebug4, rc, "failure with KDirectoryVOpenFileRead $(pP)",
+		 PLOG_S(P), self->path);
+    return rc;
+}
+
+static
+rc_t CCCopyDoDirectory (CCCopy * self)
+{
+    rc_t rc = 0;
+    PLOGMSG (klogInfo, "CCCopyDoDirectory $(d)", PLOG_S(d), self->path);
+
+    rc = RC (rcExe, rcDirectory, rcCopying, rcParam, rcUnsupported);
+    return rc;
+}
+rc_t CCCopyDo (CCCopy * self)
+{
+    rc_t rc = 0;
+    enum KPathType type;
+
+    assert (self != NULL);
+    assert (self->path != NULL);
+
+    type = KDirectoryPathType (self->in, "%s", self->path);
+    switch (type & ~kptAlias)
+    {
+    case kptNotFound:
+	rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcNotFound);
+	break;
+    default:
+    case kptBadPath:
+	rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+	break;
+    case kptFile:
+	rc = CCCopyDoFile (self);
+	break;
+    case kptDir:
+#if 0
+	rc = CCCopyDoDirectory (self);
+#else
+	rc = PLOGMSG (klogInfo, "Ignoring directory $(p)",PLOG_S(p),self->path);
+#endif
+	break;
+    case kptCharDev:
+	rc = PLOGMSG (klogInfo, "Ignoring kptCharDev $(p)",PLOG_S(p),self->path);
+	break;
+    case kptBlockDev:
+	rc = PLOGMSG (klogInfo, "Ignoring kptBlockDev $(p)",PLOG_S(p),self->path);
+	break;
+    case kptFIFO:
+	rc = PLOGMSG (klogInfo, "Ignoring kptFIFO $(p)",PLOG_S(p),self->path);
+	break;
+    }
+    return rc;
+}
+
diff --git a/tools/copycat/ccfile.c b/tools/copycat/ccfile.c
new file mode 100644
index 0000000..22ea5ee
--- /dev/null
+++ b/tools/copycat/ccfile.c
@@ -0,0 +1,271 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kfs/countfile.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+/* ======================================================================
+ * CCFile
+ */
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+typedef struct CCFile CCFile;
+#define KFILE_IMPL struct CCFile
+#include <kfs/impl.h>
+
+
+/*-----------------------------------------------------------------------
+ * CCFile
+ */
+struct CCFile
+{
+    KFile	dad;
+    KFile *	original;
+    rc_t *      prc;
+};
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC CCFileDestroy (CCFile *self)
+{
+    rc_t rc = KFileRelease (self->original);
+    free (self);
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * bytes could not be counted if memory mapped so this is disallowed
+ */
+
+static
+struct KSysFile *CC CCFileGetSysFile (const CCFile *self, uint64_t *offset)
+{
+    return KFileGetSysFile (self->original, offset);
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC CCFileRandomAccess (const CCFile *self)
+{
+    assert (self != NULL);
+    assert (self->original != NULL);
+    return KFileRandomAccess (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC CCFileType (const CCFile *self)
+{
+    return KFileType (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC CCFileSize (const CCFile *self, uint64_t *size)
+{
+    return KFileSize (self->original, size);
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC CCFileSetSize (CCFile *self, uint64_t size)
+{
+    return KFileSetSize (self->original, size);
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t CC CCFileRead	(const CCFile *self,
+                         uint64_t pos,
+                         void *buffer,
+                         size_t bsize,
+                         size_t *num_read)
+{
+    rc_t	rc;
+    
+    rc = KFileRead (self->original, pos, buffer, bsize, num_read);
+    if (*self->prc == 0)
+        *((CCFile*)self)->prc = rc;
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ */
+static
+rc_t CC CCFileWrite (CCFile *self, uint64_t pos,
+                     const void *buffer, size_t bsize,
+                     size_t *num_writ)
+{
+    rc_t rc;
+
+    rc = KFileWrite (self->original, pos, buffer, bsize, num_writ);
+    if (*self->prc == 0)
+        *self->prc = rc;
+    return rc;
+}
+
+static const KFile_vt_v1 vtCCFile =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    CCFileDestroy,
+    CCFileGetSysFile,
+    CCFileRandomAccess,
+    CCFileSize,
+    CCFileSetSize,
+    CCFileRead,
+    CCFileWrite,
+
+    /* 1.1 */
+    CCFileType
+};
+
+/* ----------------------------------------------------------------------
+ * CCFileMake
+ *  create a new file object
+ */
+
+static
+rc_t CCFileMake (CCFile ** pself,
+                 KFile * original,
+                 rc_t * prc)
+{
+    CCFile * self;
+    rc_t rc;
+    /* needs to be better */
+    assert (pself);
+    assert (original);
+    assert (prc);
+
+    self = malloc (sizeof (CCFile));
+    if (self == NULL)	/* allocation failed */
+    {
+	/* fail */
+	rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    else
+    {
+	rc = KFileInit (&self->dad,			/* initialize base class */
+			(const KFile_vt*)&vtCCFile,/* VTable for CCFile */
+            "CCFile", "no-name",
+			original->read_enabled,
+			original->write_enabled);
+	if (rc == 0)
+	{
+            rc = KFileAddRef (original);
+            if (rc == 0)
+            {
+                self->original = original;
+                self->prc = prc;
+                *pself = self;
+                return *prc = 0;
+            }
+	}
+	/* fail */
+	free (self);
+    }
+    *pself = NULL;
+    *prc = rc;
+    return rc;
+}
+
+LIB_EXPORT rc_t CC CCFileMakeRead (const KFile ** self, const KFile * original,
+                                   rc_t * prc)
+{
+    return CCFileMake ((CCFile **)self, (KFile*)original, prc);
+}
+LIB_EXPORT rc_t CC CCFileMakeUpdate (KFile ** self, KFile * original,
+                                     rc_t * prc)
+{
+    return CCFileMake ((CCFile **)self, (KFile*)original, prc);
+}
+LIB_EXPORT rc_t CC CCFileMakeWrite (KFile ** self, KFile * original,
+                                    rc_t * prc)
+{
+    return CCFileMake ((CCFile **)self, (KFile*)original, prc);
+}
+
+/* end of file countfile.c */
+
diff --git a/tools/copycat/ccfileformat.c b/tools/copycat/ccfileformat.c
new file mode 100644
index 0000000..58ca4db
--- /dev/null
+++ b/tools/copycat/ccfileformat.c
@@ -0,0 +1,405 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <klib/rc.h>
+#include <klib/debug.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <kfs/fileformat.h>
+#include <kfs/ffext.h>
+#include <kfs/ffmagic.h>
+#include <krypto/wgaencrypt.h>
+#include <kfg/config.h>
+#include <atomic32.h>
+#include <stddef.h>
+#include "copycat-priv.h"
+#include "debug.h"
+
+bool CCFileFormatIsNCBIEncrypted ( void  * buffer )
+{
+    static const char file_sig[] = "NCBInenc";
+
+    return (memcmp (buffer, file_sig, sizeof file_sig - 1) == 0);
+}
+bool CCFileFormatIsKar ( void  * buffer )
+{
+    static const char file_sig[] = "NCBI.sra";
+
+    return (memcmp (buffer, file_sig, sizeof file_sig - 1) == 0);
+}
+
+
+
+
+CCFileFormat *filefmt;
+
+/* ======================================================================
+ * Process does up the copy portion of the copycat tool's functionality
+ * and sets up ProcessOne that does the Catalog portion.
+ */
+struct CCFileFormat
+{
+    KFileFormat * magic;
+    KFileFormat * ext;
+    atomic32_t	  refcount;
+};
+
+static const char magictable [] = 
+{
+    "Generic Format for Sequence Data (SRF)\tSequenceReadFormat\n"
+    "GNU tar archive\tTapeArchive\n"
+    "POSIX tar archive\tTapeArchive\n"
+    "POSIX tar archive (GNU)\tTapeArchive\n"
+    "Standard Flowgram Format (SFF)\tStandardFlowgramFormat\n"
+    "NCBI kar sequence read archive\tSequenceReadArchive\n"
+    "tar archive\tTapeArchive\n"
+    "XML document text\tExtensibleMarkupLanguage\n"
+    "bzip2 compressed data\tBzip\n"
+    "Zip archive data\tWinZip\n"
+    "gzip compressed data\tGnuZip\n"
+};
+static const char exttable [] = 
+{
+    "Unknown\tUnknown\n"
+    "bam\tBinaryAlignmentMap\n"
+    "bz2\tBzip\n"
+    "gz\tGnuZip\n"
+    "tgz\tGnuZip\n"
+    "sff\tStandardFlowgramFormat\n"
+    "sra\tSequenceReadArchive\n"
+    "srf\tSequenceReadFormat\n"
+    "tar\tTapeArchive\n"
+    "xml\tExtensibleMarkupLanguage\n"
+    "h5\tHD5\n"
+};
+
+static const char classtable [] = 
+{
+    "Archive\n"
+    "Cached\n"
+    "Compressed\n"
+    "Read\n"
+};
+    
+static const char formattable [] = 
+{
+    "BinaryAlignmentMap\tRead\n"
+    "Bzip\tCompressed\n"
+    "GnuZip\tCompressed\n"
+    "WinZip\tRead\n"
+    "ExtensibleMarkupLanguage\tCached\n"
+    "SequenceReadFormat\tRead\n"
+    "SequenceReadArchive\tArchive\n"
+    "StandardFlowgramFormat\tRead\n"
+    "TapeArchive\tArchive\n"
+    "HD5\tArchive\n"
+};
+
+static const char magicpath [] = "/usr/share/misc/magic";
+
+rc_t CCFileFormatAddRef (const CCFileFormat * self)
+{
+    if (self != NULL)
+        atomic32_inc (&((CCFileFormat*)self)->refcount);
+    return 0;
+}
+
+rc_t CCFileFormatRelease (const CCFileFormat * cself)
+{
+    rc_t rc = 0;
+    CCFileFormat *self;
+
+    self = (CCFileFormat *)cself; /* mutable field is ref count */
+    if (self != NULL)
+    {
+        if (atomic32_dec_and_test (&self->refcount))
+        {
+            DEBUG_STATUS(("%s call KFileFormatRelease for extentions\n", __func__));
+            rc = KFileFormatRelease (self->ext);
+            if (rc == 0)
+            {
+                DEBUG_STATUS(("%s call KFileFormatRelease for magic\n", __func__));
+                rc = KFileFormatRelease (self->magic);
+                if (rc == 0)
+                {
+                    free (self);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t CCFileFormatMake (CCFileFormat ** p)
+{
+    rc_t rc;
+    CCFileFormat * self;
+
+    DEBUG_ENTRY();
+
+    self = malloc (sizeof *self);
+
+    if (self == NULL)
+    {
+        rc = RC (rcExe, rcFileFormat, rcCreating, rcMemory, rcExhausted);
+    }
+    else
+    {
+        /* magic file has to be located next to the executable */
+        KConfig* kfg;
+        rc = KConfigMake ( &kfg, NULL );
+        if ( rc == 0 )
+        {
+            String* bindir;
+            rc = KConfigReadString ( kfg, "vdb/lib/paths/kfg", &bindir );
+            KConfigRelease ( kfg );
+            if ( rc == 0 )
+            {
+                char magicpath[1024];
+                size_t num_writ;
+                rc = string_printf ( magicpath, sizeof ( magicpath ), &num_writ, "%S/magic", bindir );
+                StringWhack ( bindir );
+                if ( rc == 0 )
+                {
+                    rc = KExtFileFormatMake (&self->ext, exttable, sizeof (exttable) - 1,
+                                             formattable, sizeof (formattable) - 1);
+                    if (rc == 0)
+                    {
+                        rc = KMagicFileFormatMake (&self->magic, magicpath, magictable,
+                                                   sizeof (magictable) - 1, 
+                                                   formattable, sizeof (formattable) - 1);
+                        if (rc == 0)
+                        {
+                            atomic32_set (&self->refcount , 1);
+                            *p = self;
+                            return 0;
+                        }
+                    }
+                }
+            }
+        }
+        free (self);
+    }
+    *p = NULL;
+    return rc;
+}
+
+rc_t CCFileFormatGetType (const CCFileFormat * self, const KFile * file,
+     const char * path, char * buffer, size_t buffsize, uint32_t * ptype, uint32_t * pclass)
+{
+    static const char u_u[] = "Unknown/Unknown";
+    rc_t rc, orc;
+
+    int ret;
+    size_t mtz;
+    size_t etz;
+    size_t num_read;
+    KFileFormatType mtype;
+    KFileFormatType etype;
+    KFileFormatClass mclass;
+    KFileFormatClass eclass;
+    char	mclassbuf	[256];
+    char	mtypebuf	[256];
+    char	eclassbuf	[256];
+    char	etypebuf	[256];
+    uint8_t	preread	[8192];
+
+    DEBUG_ENTRY();
+    DEBUG_STATUS(("%s: getting type for (%s)\n",__func__,path));
+
+    /* initially assume that we don't know the type or class
+     * these are just treated as files with no special processing
+     * more than we that we don't know the type or class */
+
+    *pclass = *ptype = 0;
+    strncpy (buffer, u_u, buffsize);
+    buffer[buffsize-1] = '\0'; /* in case we got truncated in the copy above */
+
+    orc = KFileRead (file, 0, preread, sizeof (preread), &num_read);
+    if (orc == 0)
+    {
+        if (CCFileFormatIsKar (preread))
+        {
+            *pclass = ccffcArchive;
+            *ptype = ccfftaSra;
+            strncpy (buffer, "Archive/SequenceReadArchive", buffsize);
+            return 0;
+        }
+        if (CCFileFormatIsNCBIEncrypted (preread))
+        {
+            *pclass = ccffcEncoded;
+            *ptype = ccffteNCBI;
+            strncpy (buffer, "Encoded/NCBI", buffsize);
+            return 0;
+        }
+        /* Sorta kinda hack to see if the file is WGA encrypted 
+         * We short cut the other stuff if it is WGA encoded
+         */
+        if (KFileIsWGAEnc (preread, num_read) == 0)
+        {
+            *pclass = ccffcEncoded;
+            *ptype = ccffteWGA;
+            strncpy (buffer, "Encoded/WGA", buffsize);
+            return 0;
+        }
+        
+
+        rc = KFileFormatGetTypePath (self->ext, NULL, path, &etype, &eclass,
+                                 etypebuf, sizeof (etypebuf), &etz);
+        if (rc == 0)
+        {
+
+            rc = KFileFormatGetTypeBuff (self->magic, preread, num_read, &mtype, 
+                                         &mclass, mtypebuf, sizeof (mtypebuf), &mtz);
+            if (rc == 0)
+            {
+                rc = KFileFormatGetClassDescr (self->ext, eclass, eclassbuf, sizeof (eclassbuf));
+                if (rc == 0)
+                {
+                    rc = KFileFormatGetClassDescr (self->magic, mclass, mclassbuf, sizeof (mclassbuf));
+                    if (rc == 0)
+                    {
+                        DEBUG_STATUS(("%s: (%s) %s/%s<=%s/%s\n", __func__,
+                                      path, mclassbuf, mtypebuf, eclassbuf, etypebuf));
+
+                        /* first handle known special cases */
+                        if ((strcmp("WinZip", mtypebuf) == 0) &&
+                            (strcmp("GnuZip", etypebuf) == 0))
+                        {
+                            /* we've gotten in too many Zip files with extension gz */
+                            PLOGMSG (klogWarn, 
+                                     (klogWarn, "File '$(path)' is in unzupported winzip/pkzip format",
+                                      "path=%s", path));
+                        }
+                        else if (!strcmp("BinaryAlignmentMap", etypebuf) && !strcmp ("GnuZip", mtypebuf))
+                        {
+				/*** bam files have gnuzip magic, we need to treat them as data files ***/
+				strcpy (mclassbuf, eclassbuf );
+				strcpy (mtypebuf, etypebuf);
+				mtype = etype;
+                                mclass = eclass;
+			}
+                        else if ((strcmp("SequenceReadArchive", etypebuf) == 0) &&
+                                 (strcmp("Unknown", mtypebuf) == 0))
+                        {
+                            /* magic might not detect SRA/KAR files yet */
+                            DEBUG_STATUS(("%s: (%s) %s/%s<=%s/%s\n", __func__,
+                                          path, mclassbuf, mtypebuf, eclassbuf, etypebuf));
+                            strcpy (mclassbuf, eclassbuf);
+                            strcpy (mtypebuf, etypebuf);
+                            mtype = etype;
+                            mclass = eclass;
+                        }
+                        else if ((strcmp("HD5", etypebuf) == 0) &&
+                                 (strcmp("Unknown", mtypebuf) == 0))
+                        {
+                            DEBUG_STATUS(("%s:5 (%s) %s/%s<=%s/%s\n", __func__,
+                                          path, mclassbuf, mtypebuf, eclassbuf, etypebuf));
+                            strcpy (mclassbuf, eclassbuf);
+                            strcpy (mtypebuf, etypebuf);
+                            mtype = etype;
+                            mclass = eclass;
+                        }
+
+                        /* now that we've fixed a few cases use the magic derived
+                         * class and type as the extensions could be wrong and can
+                         * cause failures */
+                        if (strcmp ("Archive", mclassbuf) == 0)
+                        {       
+                            *pclass = ccffcArchive;
+                            if (strcmp ("TapeArchive", mtypebuf) == 0)
+                                *ptype = ccfftaTar;
+                            else if (strcmp ("SequenceReadArchive", mtypebuf) == 0)
+                                *ptype = ccfftaSra;
+                        }
+                        else if (strcmp("Compressed", mclassbuf) == 0)
+                        {
+                            *pclass = ccffcCompressed;
+                            if (strcmp ("Bzip", mtypebuf) == 0)
+                            {
+                                *ptype = ccfftcBzip2;
+                                if ( no_bzip2 )
+                                    * pclass = *ptype = 0;
+                            }
+                            else if (strcmp ("GnuZip", mtypebuf) == 0)
+                                *ptype = ccfftcGzip;
+                        }
+
+                        /* Hmmm... we are using extension to determine XML though
+                         * Probably okay */
+                        else if (strcmp ("Cached", eclassbuf) == 0)
+                        {
+                            *pclass = ccffcCached;
+                            if (strcmp ("ExtensibleMarkupLanguage", etypebuf) == 0)
+                                *ptype = ccfftxXML;
+                            strcpy (mclassbuf, eclassbuf);
+                            strcpy (mtypebuf, etypebuf);
+
+                        }
+
+                        /* build the eventual filetype string - vaguely mime type like */
+#if 1
+                        ret = snprintf (buffer, buffsize, "%s/%s", mclassbuf, mtypebuf);
+                        if (ret >= buffsize)
+                        {
+                            ret = buffsize-1;
+                            buffer[buffsize-1] = '\0';
+                        }
+                        
+#else
+                        ecz = strlen (eclassbuf);
+                        num_read = (ecz < buffsize) ? ecz : buffsize;
+                        strncpy (buffer, eclassbuf, buffsize);
+                        if (num_read >= (buffsize-2))
+                            buffer [num_read] = '\0';
+                        else
+                        {
+                            buffer [num_read++] = '/';
+                            strncpy (buffer+num_read, etypebuf, 
+                                     buffsize - num_read);
+                        }
+                        buffer[buffsize-1] = '\0';
+                        /* 			    buffer [num_read++] = '/'; */
+#endif
+                    }
+                }
+            }
+        }
+        if (rc)
+        {
+            *pclass = *ptype = 0;
+            strncpy (buffer, u_u, buffsize);
+            buffer[buffsize-1] = '\0'; /* in case we got truncated in the copy above */
+        }
+    }
+    return orc;
+}
diff --git a/tools/copycat/ccproc.c b/tools/copycat/ccproc.c
new file mode 100644
index 0000000..0e29bc6
--- /dev/null
+++ b/tools/copycat/ccproc.c
@@ -0,0 +1,319 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <assert.h>
+#include <atomic.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <kapp/log.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kfs/teefile.h>
+#include "copycat.h"
+
+
+/* ======================================================================
+ * Process does up the copy portion of the copycat tool's functionality
+ * and sets up ProcessOne that does the Catalog portion.
+ */
+struct Process
+{
+    atomic32_t refcount;
+    const KDirectory * in;
+    KDirectory * out;
+    KDirectory * xml;
+    KMD5SumFmt * md5;
+    CCFileFormat * ff;
+    uint32_t	timeout;
+    bool force;
+    char path[4096];
+};
+
+rc_t ProcessAddRef (const Process * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((Process*)self)->refcount);
+    return 0;
+}
+
+rc_t ProcessRelease (const Process * cself)
+{
+    Process * self = (Process *)cself;
+    rc_t rc = 0;
+    LOGMSG (klogDebug10, "Enter: ProcessRelease");
+
+    if (self != NULL)
+    {
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    KDirectoryRelease (self->in);
+	    KDirectoryRelease (self->out);
+	    KDirectoryRelease (self->xml);
+	    KMD5SumFmtRelease (self->md5);
+	    CCFileFormatRelease (self->ff);
+	    free (self);
+	}
+    }
+    return rc;
+}
+
+rc_t ProcessMake (Process ** p, const KDirectory * in,  KDirectory * out, 
+		  KDirectory * xml, bool force, KMD5SumFmt * md5,
+		  CCFileFormat * ff, const char * path)
+{
+    rc_t rc;
+    size_t pathlen;
+    Process * self;
+    char relpath [4096];
+
+    assert (in != NULL);
+    assert (out != NULL);
+    assert (xml != NULL);
+    assert (path != NULL);
+
+    rc = KDirectoryResolvePath (in, false, relpath, sizeof relpath, "%s", path);
+    if (rc != 0)
+    {
+	pLOGERR (klogErr, rc, "unable to resolve path $(P)", PLOG_S(P), path);
+	return rc;
+    }
+    if ((relpath[0] == '.') && (relpath[1] == '.') && (relpath[2] == '/'))
+    {
+	rc = RC (rcExe, rcDirectory, rcResolving, rcPath, rcOutOfKDirectory);
+	pLOGERR (klogErr, rc, "Path must resolve to current directory or subdirectories $(P)",
+		 PLOG_S(P), relpath);
+	return rc;
+    }
+
+    pathlen = strlen(relpath);
+    self = malloc (sizeof (*self) - sizeof (*self->path) + pathlen + 1);
+    if (self == NULL)
+	rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	KDirectoryAddRef (in);
+	KDirectoryAddRef (out);
+	KDirectoryAddRef (xml);
+	KMD5SumFmtAddRef (md5);
+	CCFileFormatAddRef (ff);
+	self->in = in;
+	self->out = out;
+	self->xml = xml;
+	self->force = force;
+	self->md5 = md5;
+	self->ff = ff;
+	memmove (self->path, relpath, pathlen+1);
+	*p = self;
+    }
+    return rc;
+}
+static
+rc_t ProcessDoFile (Process * self)
+{
+    const KFile * original;
+    rc_t rc = 0;
+    enum KCreateMode mode;
+    
+    PLOGMSG (klogDebug10, "ProcessDoFile $(f)", PLOG_S(f), self->path);
+
+
+    if (! self->force)
+    {
+	/* if not forced replace mode we fail on existing file */
+	mode = kcmCreate;
+    }
+    else
+    {
+	uint32_t tt;
+
+	tt = KDirectoryPathType (self->out, "%s", self->path);
+	switch (tt)
+	{
+	default:
+	    PLOGMSG (klogWarn, "File exists and will be replaced in output directory $(f)",
+		     PLOG_S(f), self->path);
+	    break;
+	    /* if the path to the file or the file do not exist no warning */
+	case kptNotFound:
+	case kptBadPath:
+	    break;
+	}
+	tt = KDirectoryPathType (self->xml, "%s", self->path);
+	switch (tt)
+	{
+	default:
+	    PLOGMSG (klogWarn, "File exists and might be replaced in xml directory $(f)",
+		     PLOG_S(f), self->path);
+	    break;
+	    /* if the path to the file or the file do not exist no warning */
+	case kptNotFound:
+	case kptBadPath:
+	    break;
+	}
+
+	/* forced mode we create with init instead of create forcing a delete/create effect */
+	mode = kcmInit;
+    }
+
+    /* open originial source for read */
+    rc = KDirectoryOpenFileRead (self->in, &original, "%s", self->path);
+    if (rc == 0)
+    {
+	KFile * copy;
+
+	/* create copy output for write */
+	rc = KDirectoryCreateFile (self->out, &copy, false, 0644, mode|kcmParents,
+                               "%s", self->path);
+	if (rc == 0)
+	{
+	    KFile * fm;
+
+	    /* create parallel <path>.md5 */
+	    rc = KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5",
+				       self->path);
+	    if (rc == 0)
+	    {
+		KMD5SumFmt * md5f;
+
+		/* make the .md5 an MD5 sum format file */
+		rc = KMD5SumFmtMakeUpdate (&md5f, fm);
+		if (rc == 0)
+		{
+		    union u
+		    {
+			KFile * kf;
+			KMD5File * mf;
+		    } outf;
+
+		    /* combine the copy and MD5 file into our special KFile */
+		    rc = KMD5FileMakeWrite (&outf.mf, copy, md5f, self->path);
+		    if (rc == 0)
+		    {
+			const KFile * inf;
+
+			/* release this outside reference to the MD5SumFMT leaving
+			 * only the one internal to the KMD5File */
+			KMD5SumFmtRelease (md5f);
+
+			/* create the KTeeFile that copies reads from the
+			 * original as writes to the copy.  Reads will be
+			 * made by the cataloging process */
+			rc = KFileMakeTeeRead (&inf, original, outf.kf);
+			if (rc == 0)
+			{
+			    ProcessOne * po;
+
+			    /* create the cataloger giving it the infile which
+			     * is the KTeeFile, Indirectory, the XML directory,
+			     * and the original path for the file */
+			    rc = ProcessOneMake (&po, self->in, self->xml, inf,
+						 self->md5, self->ff, self->path);
+			    if (rc == 0)
+			    {
+				/* do the catalog (and thus copy) */
+				rc = ProcessOneDo(po);
+				/* release the cataloger object */
+				ProcessOneRelease (po);
+			    }
+			    /* release the infile which will complete a  copy 
+			     * regardless of the state of the cataloger */
+			    KFileRelease (inf);
+/* 			    return rc; */
+			}
+			else
+			{
+			    KFileRelease (outf.kf);
+			    KFileRelease (original);
+			} /* rc = KFileMakeTeeRead (&inf, original, outf.kf);*/
+		    }
+		    else
+		    {
+			KFileRelease (copy);
+			KMD5SumFmtRelease (md5f);
+		    } /* KMD5FileMakeWrite (&outf.mf, copy, md5f, self->path); */
+		} /* KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5", */
+		KFileRelease (fm);
+	    } /* KDirectoryCreateFile (self->out, &fm, true, 0644, mode, "%s.md5", */
+	    KFileRelease (copy);
+	} /* rc = KDirectoryVCreateFile (self->out, &copy, false, 0644, mode|kcmParents, */
+	KFileRelease (original);
+    } /* rc = KDirectoryVOpenFileRead (self->in, &original, self->path, NULL); */
+    return rc;
+}
+
+static
+rc_t ProcessDoDirectory (Process * self)
+{
+    rc_t rc = 0;
+    PLOGMSG (klogInfo, "ProcessDoDirectory $(d)", PLOG_S(d), self->path);
+
+    rc = RC (rcExe, rcDirectory, rcCopying, rcParam, rcUnsupported);
+    return rc;
+}
+rc_t ProcessDo (Process * self)
+{
+    rc_t rc = 0;
+    enum KPathType type;
+
+    assert (self != NULL);
+    assert (self->path != NULL);
+
+    type = KDirectoryPathType (self->in, "%s", self->path);
+    switch (type & ~kptAlias)
+    {
+    case kptNotFound:
+	rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcNotFound);
+	break;
+    default:
+    case kptBadPath:
+	rc = RC (rcExe, rcPath, rcAccessing, rcPath, rcInvalid);
+	break;
+    case kptFile:
+	rc = ProcessDoFile (self);
+	break;
+    case kptDir:
+#if 0
+	rc = ProcessDoDirectory (self);
+#else
+	rc = PLOGMSG (klogInfo, "Ignoring directory $(p)",PLOG_S(p),self->path);
+#endif
+	break;
+    case kptCharDev:
+	rc = PLOGMSG (klogInfo, "Ignoring kptCharDev $(p)",PLOG_S(p),self->path);
+	break;
+    case kptBlockDev:
+	rc = PLOGMSG (klogInfo, "Ignoring kptBlockDev $(p)",PLOG_S(p),self->path);
+	break;
+    case kptFIFO:
+	rc = PLOGMSG (klogInfo, "Ignoring kptFIFO $(p)",PLOG_S(p),self->path);
+	break;
+    }
+    return rc;
+}
+
diff --git a/tools/copycat/ccprocone.c b/tools/copycat/ccprocone.c
new file mode 100644
index 0000000..24a7bfd
--- /dev/null
+++ b/tools/copycat/ccprocone.c
@@ -0,0 +1,217 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <assert.h>
+#include <atomic.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <kapp/log.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kfs/teefile.h>
+#include <kfs/buffile.h>
+/* #include <klib/rc.h> */
+
+#include "copycat.h"
+
+/* ==========
+ * Process is a generic buffer to be used to pass data between co-routines or 
+ * threads.
+ */
+
+struct ProcessOne
+{
+    atomic32_t	refcount;	/* how many references to this object */
+    const KDirectory * dir;
+    KDirectory * xml;
+    const KFile * file;
+    CCFileFormat * ff;
+    KMD5SumFmt *md5;
+    char path [4096];
+};
+
+rc_t ProcessOneMake (ProcessOne ** ppo, const KDirectory * dir, KDirectory * xml,
+		     const KFile * file, KMD5SumFmt *md5, CCFileFormat * ff,
+		     const char * path)
+{
+    ProcessOne * self;
+    rc_t rc = 0;
+    size_t pathlen;
+
+    PLOGMSG (klogDebug10, "ProcessOneMake $(f)", PLOG_S(f), path);
+    /* legit seeming inputs? these could be replaced with RC returns */
+    assert (ppo != NULL);
+    assert (file != NULL);
+    assert (path != NULL);
+
+    /* allocate the object */
+    pathlen = strlen (path);
+    self = malloc (sizeof (*self) - sizeof(self->path) + pathlen + 1);
+    if (self == NULL)
+    {
+	rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+    }
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	KDirectoryAddRef (dir);
+	KDirectoryAddRef (xml);
+	KMD5SumFmtAddRef (md5);
+	CCFileFormatAddRef (ff);
+	KFileAddRef (file);
+	self->dir = dir;
+	self->xml = xml;
+	self->md5 = md5;
+	self->file = file;
+	self->ff = ff;
+	memmove (self->path, path, pathlen);
+	self->path[pathlen] = '\0';
+	rc = 0;
+    }
+    *ppo = self;
+    return rc;
+}
+
+rc_t ProcessOneAddRef (const ProcessOne * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((ProcessOne*)self)->refcount);
+    return 0;
+}
+rc_t ProcessOneRelease (const ProcessOne * cself)
+{
+    ProcessOne * self = (ProcessOne *)cself;
+    rc_t rc = 0;
+
+    if (self != NULL)
+    {
+	PLOGMSG (klogDebug10, "ProcessOneRelease $(f)", PLOG_S(f), self->path);
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    KDirectoryRelease (self->dir);
+	    KDirectoryRelease (self->xml);
+	    KMD5SumFmtRelease (self->md5);
+	    CCFileFormatRelease (self->ff);
+	    KFileRelease (self->file);
+	    free (self);
+	}
+    }
+    return rc;
+}
+const char * typeToString (enum KPathType type)
+{
+    switch (type)
+    {
+    default:
+	return "bad-KPathType";
+    case kptNotFound:
+	return "not-found";
+    case kptBadPath:
+	return "bad-path";
+    case kptFile:
+	return "file";
+    case kptDir:
+	return "directory";
+    case kptCharDev:
+	return "character-device";
+    case kptBlockDev:
+	return "block-device";
+    case kptFIFO:
+	return "fifo";
+    case kptAlias|kptNotFound:
+	return "link-to-not-found";
+    case kptAlias|kptBadPath:
+	return "link-to-bad-path";
+    case kptAlias|kptFile:
+	return "link-to-file";
+    case kptAlias|kptDir:
+	return "link-to-directory";
+    case kptAlias|kptCharDev:
+	return "link-to-character-device";
+    case kptAlias|kptBlockDev:
+	return "link-to-block-device";
+    case kptAlias|kptFIFO:
+	return "link-to-fifo";
+    }
+}
+rc_t ProcessOneDoFile (ProcessOne * self)
+{
+    rc_t rc = 0;
+    KFile * mfile;
+    
+    PLOGMSG (klogInfo, "ProcessOneDoFile: $(F)", PLOG_S(F), self->path);
+
+
+    rc = KFileMakeNewMD5Read (&mfile, self->file, self->md5, self->path);
+    if (rc == 0)
+    {
+	const KFile * bfile;
+	rc = KFileMakeBuf (&bfile, mfile, 64*1024);
+	if (rc == 0)
+	{
+	    /* add more here */
+
+	    KFileRelease (bfile);
+	}
+	else
+	{
+	    pLOGERR (klogErr, rc, "Failure to initiate buffer $(F)", PLOG_S(F), self->path);
+	    KFileRelease (mfile);
+	}
+    }
+    else
+	pLOGERR (klogErr, rc, "Failure to initiate MD5 summing $(F)", PLOG_S(F), self->path);
+
+    return rc;
+}
+rc_t ProcessOneDo (ProcessOne * self)
+{
+    static const char F[] = PLOG_2(PLOG_S(p),PLOG_S(t));
+    enum KPathType type;
+    rc_t rc = 0;
+    
+    type = KDirectoryPathType (self->dir, "%s", self->path);
+
+    switch (type)
+    {
+    case kptFile:
+	rc = ProcessOneDoFile (self);
+ 	break;
+/*     case kptDir: */
+/* 	break; */
+/*     case kptAlias|kptFile: */
+/* 	break; */
+/*     case kptAlias|kptDir: */
+/* 	break; */
+    default:
+	PLOGMSG (klogInfo, "+ Skipping $(p) of type $(t)", F, self->path, typeToString(type));
+	break;
+    }
+    return rc;
+}
diff --git a/tools/copycat/ccread.c b/tools/copycat/ccread.c
new file mode 100644
index 0000000..fedaef7
--- /dev/null
+++ b/tools/copycat/ccread.c
@@ -0,0 +1,302 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <assert.h>
+#include <atomic.h>
+#include <kapp/main.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kapp/log.h>
+#include "copycat-priv.h"
+
+
+struct Reader
+{
+    atomic32_t refcount;
+    const KFile * f;	/* input file */
+    uint64_t o;		/* how far into the input file are we */
+    BufferQ * out;	/* two output queues to copy everything read */
+    BufferQ * xml;
+    BufferMgr * mgr;	/* a manager for allocating a throttling buffer set */
+};
+
+rc_t ReaderRelease (const Reader * cself)
+{
+    rc_t rc = 0;
+    Reader * self = (Reader*)cself;
+
+    if (self != NULL)
+    {
+	if (atomic32_dec_and_test (&self->refcount))
+	{
+	    /* might already have been released */
+	    rc = KFileRelease (self->f);
+	    if (rc == 0)
+	    {
+		rc = BufferQRelease (self->out);
+		if (rc == 0)
+		{
+		    rc = BufferQRelease (self->xml);
+		    if (rc == 0)
+		    {
+			rc = BufferMgrRelease (self->mgr);
+			if (rc == 0)
+			    free (self);
+			else
+			    atomic32_set (&self->refcount, 1);
+		    }
+		}
+	    }
+	}
+    }
+    return rc;
+}
+
+rc_t ReaderAddRef (const Reader * self)
+{
+    if (self != NULL)
+	atomic32_inc (&((Reader*)self)->refcount);
+    return 0;
+}
+
+rc_t ReaderMake (Reader ** r, const KDirectory * d, const char * path, Copier * p,
+		 Cataloger * g, uint32_t c, uint32_t z, uint32_t t)
+{
+    rc_t rc = 0;
+    Reader * self;
+
+    self = malloc (sizeof * self);
+    if (self == NULL)
+    {
+	rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+	LOGERR (klogErr, rc, "ReaderMake: error allocating Reader");
+    }
+    else
+    {
+	atomic32_set (&self->refcount, 1);
+	self->o = 0;
+
+	rc = KDirectoryOpenFileRead (d, &self->f, "%s", path);
+	if (rc != 0)
+	{
+	    pLOGERR (klogErr, rc,
+		     "ReaderMake: error open file for read $(f)",
+		     PLOG_S(f), path);
+	}
+	else
+	{
+	    self->out = CopierGetQ(p);
+	    if (self->out == NULL)
+	    {
+		rc = RC (rcExe, rcNoTarg, rcAccessing, rcBuffer, rcCorrupt);
+		LOGERR (klogErr, rc, "ReaderMake: corrupt Copier queue");
+	    }
+	    else
+	    {
+		rc = BufferQAddRef (self->out);
+		if (rc == 0)
+		{
+		    self->xml = CatalogerGetQ(g);
+		    if (self->xml == NULL)
+		    {
+			rc = RC (rcExe, rcNoTarg, rcCreating, rcQueue, rcCorrupt);
+			LOGERR (klogErr, rc, "ReaderMake: corrupt Cataloger queue");
+		    }
+		    else
+		    {
+			rc = BufferQAddRef (self->xml);
+			if (rc == 0)
+			{
+			    rc = BufferMgrMake (&self->mgr, c, z, t);
+			    if (rc == 0)
+			    {
+				atomic32_set (&self->refcount, 1);
+				*r = self;
+				return 0;
+			    }
+			    LOGERR (klogErr, rc, "ReaderMake: error creating buffer manager");
+			    BufferQRelease (self->xml);
+			}
+			LOGERR (klogErr, rc, "ReaderMake: error setting reference to xml queue");
+		    }
+		    LOGERR (klogErr, rc, "ReaderMake: error setting reference to xml queue");
+		    BufferQRelease (self->out);
+		}
+		LOGERR (klogErr, rc, "ReaderMake: error setting reference to out queue");
+	    }
+	    KFileRelease (self->f);
+	}
+	free (self);
+    }
+    return rc;
+}
+
+rc_t ReaderDoOne (Reader * self)
+{
+    rc_t rc = 0;
+
+    assert (self != NULL);
+    assert (self->mgr != NULL);
+
+    rc = Quitting();
+    if (rc == 0)
+    {
+	Buffer * b = NULL;
+
+	rc = BufferMgrGetBuffer (self->mgr, &b, NULL);
+	if (rc != 0)
+	{
+	    /* -----
+	     * if we couldn't get a buffer because we timeout, we don't want to
+	     * signal a failure, so reset the rc and exit with no error
+	     */
+	    if ((GetRCState(rc) == rcExhausted) && (GetRCObject(rc) == rcTimeout))
+	    {
+		rc = 0;
+		LOGMSG (klogInfo,
+			"ReaderDoOne: timeout getting a buffer");
+	    }
+	    else
+		LOGERR (klogErr, rc,
+			"ReaderDoOne: error getting a buffer");
+
+	}
+	else
+	{
+	    size_t t;
+	    size_t r;
+	    char * p;
+
+	    /* -----
+	     * get the limits/values of the buffer we got
+	     */
+	    t = BufferPayloadGetSize (b);
+	    p = BufferPayloadWrite (b);
+	    assert (t > 0);
+	    assert (b != NULL);
+	    
+	    /* attempt to read from the file */
+	    rc = KFileRead (self->f, self->o, p, t, &r);
+	    if (rc == 0)
+	    {
+		PLOGMSG (klogDebug10, 
+			 "ReaderDoOne: back from KFileRead $(z)",
+			 PLOG_U32(z),
+			 r);
+		/* if we have a read of some length send it to our two 
+		 * processor friends: copy and catalog
+		 */
+		if (r != 0)
+		{
+		    self->o += r;
+		    rc = BufferContentSetSize (b, r);
+		    if (rc == 0)
+		    {
+			rc = BufferQPushBuffer (self->out, b, NULL);
+			if (rc == 0)
+			{
+			    rc = BufferQPushBuffer (self->xml, b, NULL);
+			    if (rc != 0)
+				LOGERR (klogErr, rc,
+					"ReaderDoOne: Failure to send bugger to xml queue");
+			}
+			else
+			    LOGERR (klogErr, rc,
+				    "ReaderDoOne: Failure to send bugger to out queue");
+		    }
+		    else
+			LOGERR (klogErr, rc,
+				"ReaderDoOne: Failure to set size of buffer");
+		}
+		/* if we had a successful read of 'nothing' we are at end of file */
+		else
+		{
+		    /* drop the file */
+		    rc = KFileRelease (self->f);
+		    if (rc == 0)
+		    {
+			self->f = NULL;
+			/* seal off and release the two queues */
+			rc = BufferQSeal (self->out);
+			if (rc == 0)
+			{
+			    rc = BufferQRelease (self->out);
+			    if (rc == 0)
+			    {
+				self->out = NULL;
+				rc = BufferQSeal (self->xml);
+				if (rc == 0)
+				{
+				    rc = BufferQRelease (self->xml);
+				    if (rc == 0)
+				    {
+					self->xml = NULL;
+					rc = BufferMgrRelease (self->mgr);
+					if (rc == 0)
+					{
+					    self->mgr = NULL;
+					    rc = RC (rcExe, rcProcess, rcReading, rcThread, rcDone);
+					}
+					else
+					    LOGERR (klogErr, rc,
+						    "ReaderDoOne: Failure to release buffer manager");
+				    }
+				    else
+					LOGERR (klogErr, rc,
+						"ReaderDoOne: Failure to release buffer xml queue");
+				}
+				else
+				    LOGERR (klogErr, rc,
+					    "ReaderDoOne: Failure to seal buffer xml queue");
+			    }
+			    else
+				LOGERR (klogErr, rc,
+					"ReaderDoOne: Failure to release buffer out queue");
+			}
+			else
+			    LOGERR (klogErr, rc,
+				    "ReaderDoOne: Failure to seal buffer out queue");
+		    }
+		    else
+			LOGMSG (klogErr,
+				"ReaderDoOne: Failure to close input file");
+		}
+	    }
+	    else
+		LOGERR (klogErr, rc,
+			"ReaderDoOne: file read error");
+	    BufferRelease (b);
+	}
+    }
+    else
+    {
+	LOGMSG (klogInt, "ReaderDoOne: Reader quitting");
+    }
+    return rc;
+}
+
+
diff --git a/tools/copycat/ccsra.c b/tools/copycat/ccsra.c
new file mode 100644
index 0000000..4c1b022
--- /dev/null
+++ b/tools/copycat/ccsra.c
@@ -0,0 +1,1239 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "copycat-priv.h"
+
+#include <klib/rc.h>
+#include <kfs/arc.h>
+#include <kfs/sra.h>
+#include <kfs/toc.h>
+#include <kfs/file.h>
+#include <kfs/subfile.h>
+#include <klib/namelist.h>
+#include <klib/vector.h>
+#include <klib/status.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+typedef struct CCNodeSraDir CCNodeSraDir;
+#define KDIR_IMPL struct CCNodeSraDir
+#include <kfs/impl.h>
+
+/* must be after kfs/impl */
+#include "debug.h"
+
+struct CCNodeSraDir
+{
+    KDirectory dad;
+    const KFile * file;
+    const char * dir_name;
+    const char * sub_name;
+    size_t name_size;
+
+};
+
+static bool CCNodeSraDirLegalPath (const CCNodeSraDir * self, const char * path)
+{
+    if (*path == '/')
+        return (strncmp (self->sub_name, path+1, self->name_size + 1) == 0);
+    else
+        return (strncmp (self->sub_name, path, self->name_size + 1) == 0);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirDestroy
+ */
+static rc_t CC CCNodeSraDirDestroy (CCNodeSraDir *self)
+{
+    if (self)
+    {
+        KFileRelease (self->file);
+        free (self);
+    }
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirList
+ *  create a directory listing
+ *
+ *  "list" [ OUT ] - return parameter for list object
+ *
+ *  "path" [ IN, NULL OKAY ] - optional parameter for target
+ *  directory. if NULL, interpreted to mean "."
+ */
+static
+rc_t CC CCNodeSraDirList (const CCNodeSraDir *self,
+                          KNamelist **listp,
+                          bool (CC* f) (const KDirectory *dir, const char *name, void *data),
+                          void *data,
+                          const char *path,
+                          va_list args)
+{
+    assert (0);
+
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirVisit
+ *  visit each path under designated directory,
+ *  recursively if so indicated
+ *
+ *  "recurse" [ IN ] - if non-zero, recursively visit sub-directories
+ *
+ *  "f" [ IN ] and "data" [ IN, OPAQUE ] - function to execute
+ *  on each path. receives a base directory and relative path
+ *  for each entry, where each path is also given the leaf name
+ *  for convenience. if "f" returns non-zero, the iteration will
+ *  terminate and that value will be returned. NB - "dir" will not
+ *  be the same as "self".
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native character set
+ */
+static 
+rc_t CC CCNodeSraDirVisit (const CCNodeSraDir *self, 
+                           bool recurse,
+                           rc_t (CC* f) (const KDirectory *, uint32_t, const char *, void *), 
+                           void *data,
+                           const char *path,
+                           va_list args)
+{
+    assert (0);
+
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirVisitUpdate
+ */
+static rc_t CC CCNodeSraDirVisitUpdate (CCNodeSraDir *self,
+                                        bool recurse,
+                                        rc_t (CC*f) (KDirectory *,uint32_t,const char *,void *),
+                                        void *data,
+                                        const char *path,
+                                        va_list args)
+{
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirPathType
+ *  returns a KPathType
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native character set
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static uint32_t CC CCNodeSraDirPathType (const CCNodeSraDir *self, const char *path, va_list args)
+{
+    if (CCNodeSraDirLegalPath (self, path))
+        return kptFile;
+    return kptNotFound;
+}
+
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirRelativePath
+ *  makes "path" relative to "root"
+ *  both "root" and "path" MUST be absolute
+ *  both "root" and "path" MUST be canonical, i.e. have no "//", "/./" or "/../" sequences
+ */
+/*
+static
+rc_t CCNodeSraDirRelativePath (const CCNodeSraDir *self, enum RCContext ctx,
+                               const char *root, char *path, size_t path_max)
+{
+    assert (0);
+    return 0;
+}
+*/
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirResolvePath
+ *
+ *  resolves path to an absolute or directory-relative path
+ *
+ * [IN]  const CCNodeSraDir *self		Objected oriented self
+ * [IN]	 bool 		absolute	if non-zero, always give a path starting
+ *  					with '/'. NB - if the directory is 
+ *					chroot'd, the absolute path
+ *					will still be relative to directory root.
+ * [OUT] char *		resolved	buffer for NUL terminated result path in 
+ *					directory-native character set
+ * [IN]	 size_t		rsize		limiting size of resolved buffer
+ * [IN]  const char *	path		NUL terminated string in directory-native
+ *					character set denoting target path. 
+ *					NB - need not exist.
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC CCNodeSraDirResolvePath (const CCNodeSraDir *self,
+                                        bool absolute,
+                                        char *resolved,
+                                        size_t rsize,
+                                        const char *path_fmt,
+                                        va_list args)
+{
+    char path[4096];
+    int size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( size < 0 || size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+    if (absolute && (path[0] != '/'))
+    {
+        string_printf (resolved, rsize, NULL, "/%s", path);
+    }       
+    else
+        string_copy (resolved, rsize, path, self->name_size+1);
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirResolveAlias
+ *  resolves an alias path to its immediate target
+ *  NB - the resolved path may be yet another alias
+ *
+ *  "alias" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting an object presumed to be an alias.
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - buffer for
+ *  NUL terminated result path in directory-native character set
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC CCNodeSraDirResolveAlias (const CCNodeSraDir * self, 
+                                         bool absolute,
+                                         char * resolved,
+                                         size_t rsize,
+                                         const char *alias,
+                                         va_list args)
+{
+    assert (0);
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirRename
+ *  rename an object accessible from directory, replacing
+ *  any existing target object of the same type
+ *
+ *  "from" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting existing object
+ *
+ *  "to" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting existing object
+ */
+static
+rc_t CC CCNodeSraDirRename (CCNodeSraDir *self, bool force, const char *from, const char *to)
+{
+    assert (self != NULL);
+    assert (from != NULL);
+    assert (to != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirRemove
+ *  remove an accessible object from its directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "force" [ IN ] - if non-zero and target is a directory,
+ *  remove recursively
+ */
+static
+rc_t CC CCNodeSraDirRemove (CCNodeSraDir *self, bool force, const char *path, va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirClearDir
+ *  remove all directory contents
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "force" [ IN ] - if non-zero and directory entry is a
+ *  sub-directory, remove recursively
+ */
+static
+rc_t CC CCNodeSraDirClearDir (CCNodeSraDir *self, bool force, const char *path, va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirAccess
+ *  get access to object
+ *
+ *  "access" [ OUT ] - return parameter for Unix access mode
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC CCNodeSraDirVAccess (const CCNodeSraDir *self,
+                                    uint32_t *access,
+                                    const char *path,
+                                    va_list args)
+{
+    assert (self != NULL);
+    assert (access != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcReading, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirSetAccess
+ *  set access to object a la Unix "chmod"
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "access" [ IN ] and "mask" [ IN ] - definition of change
+ *  where "access" contains new bit values and "mask defines
+ *  which bits should be changed.
+ *
+ *  "recurse" [ IN ] - if non zero and "path" is a directory,
+ *  apply changes recursively.
+ */
+static rc_t CC CCNodeSraDirSetAccess (CCNodeSraDir *self,
+                                      bool recurse,
+                                      uint32_t access,
+                                      uint32_t mask,
+                                      const char *path,
+                                      va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+
+static	rc_t CC CCNodeSraDirVDate (const CCNodeSraDir *self,
+                                   KTime_t *date,
+                                   const char *path,
+                                   va_list args)
+{
+    assert (self != NULL);
+    assert (date != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcReading, rcSelf, rcUnsupported);
+}
+static	rc_t CC CCNodeSraDirSetDate		(CCNodeSraDir *self,
+                                                 bool recurse,
+                                                 KTime_t date,
+                                                 const char *path,
+                                                 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+static
+struct KSysDir *CC CCNodeSraDirGetSysDir ( const CCNodeSraDir *self )
+{
+    return NULL;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirCreateAlias
+ *  creates a path alias according to create mode
+ *
+ *  "targ" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "alias" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target alias
+ *
+ *  "access" [ IN ] - standard Unix directory access mode
+ *  used when "mode" has kcmParents set and alias path does
+ *  not exist.
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC CCNodeSraDirCreateAlias (CCNodeSraDir *self,
+                                 uint32_t access,
+                                 KCreateMode mode,
+                                 const char *targ,
+                                 const char *alias)
+{
+    assert (self != NULL);
+    assert (targ != NULL);
+    assert (alias != NULL);
+
+    return RC (rcFS, rcNoTarg, rcCreating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirOpenFileRead
+ *  opens an existing file with read-only access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC CCNodeSraDirOpenFileRead	(const CCNodeSraDir *self,
+					 const KFile **f,
+					 const char *path_fmt,
+					 va_list args)
+{
+    rc_t	rc;
+    char path[4096];
+    int size;
+
+    assert (self != NULL);
+    assert (f != NULL);
+    assert (path_fmt != NULL);
+
+    size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( size < 0 || size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+
+    if (CCNodeSraDirLegalPath (self, path))
+    {
+        rc = KFileAddRef (self->file);
+        if (rc == 0)
+        {
+            *f = self->file;
+            return 0;
+        }
+        return rc;
+    }
+    else
+        rc = RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcNotFound);
+    *f = NULL;
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirOpenFileWrite
+ *  opens an existing file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "update" [ IN ] - if non-zero, open in read/write mode
+ *  otherwise, open in write-only mode
+ */
+static
+rc_t CC CCNodeSraDirOpenFileWrite	(CCNodeSraDir *self,
+					 KFile **f,
+					 bool update,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcCreating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirCreateFile
+ *  opens a file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "update" [ IN ] - if non-zero, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC CCNodeSraDirCreateFile	(CCNodeSraDir *self,
+                                 KFile **f,
+                                 bool update,
+                                 uint32_t access,
+                                 KCreateMode cmode,
+                                 const char *path,
+                                 va_list args)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcCreating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirFileLocator
+ *  returns locator in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "locator" [ OUT ] - return parameter for file locator
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC CCNodeSraDirFileLocator		(const CCNodeSraDir *self,
+					 uint64_t *locator,
+					 const char *path_fmt,
+					 va_list args)
+{
+    char path[4096];
+    int size;
+
+    assert (self != NULL);
+    assert (locator != NULL);
+    assert (path_fmt != NULL);
+
+    size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( size < 0 || size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+
+    *locator = 0;       /* undefined for this situation */
+    if (CCNodeSraDirLegalPath (self, path))
+        return 0;
+    return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcNotFound);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirFileSize
+ *  returns size in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC CCNodeSraDirFileSize		(const CCNodeSraDir *self,
+					 uint64_t *size,
+					 const char *path_fmt,
+					 va_list args)
+{
+    char path[4096];
+    int path_size;
+
+    assert (self != NULL);
+    assert (size != NULL);
+    assert (path_fmt != NULL);
+
+    path_size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( path_size < 0 || path_size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+
+    if (CCNodeSraDirLegalPath (self, path))
+        return (KFileSize (self->file, size)); /* we have to assume physical and logical size are the same */
+
+    *size = 0;
+    return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcNotFound);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirFileSize
+ *  returns size in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC CCNodeSraDirFilePhysicalSize (const CCNodeSraDir *self,
+                                      uint64_t *size,
+                                      const char *path_fmt,
+                                      va_list args)
+{
+    char path[4096];
+    int path_size;
+
+    assert (self != NULL);
+    assert (size != NULL);
+    assert (path_fmt != NULL);
+
+    path_size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( path_size < 0 || path_size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+
+    if (CCNodeSraDirLegalPath (self, path))
+        return (KFileSize (self->file, size)); /* we have to assume physical and logical size are the same */
+
+    *size = 0;
+    return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcNotFound);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirSetFileSize
+ *  sets size in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC CCNodeSraDirSetFileSize	(CCNodeSraDir *self,
+                                 uint64_t size,
+                                 const char *path,
+                                 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcWriting, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirOpenDirRead
+ *
+ *  opens a sub-directory
+ *
+ * [IN]  const CCNodeSraDir *	self	Object Oriented C CCNodeSraDir self
+ * [OUT] const KDirectory **	subp	Where to put the new KDirectory/CCNodeSraDir
+ * [IN]  bool			chroot	Create a chroot cage for this new subdirectory
+ * [IN]  const char *		path	Path to the directory to open
+ * [IN]  va_list		args	So far the only use of args is possible additions to path
+ */
+static 
+rc_t CC CCNodeSraDirOpenDirRead	(const CCNodeSraDir *self,
+                                 const KDirectory **subp,
+                                 bool chroot,
+                                 const char *path,
+                                 va_list args)
+{
+    assert (self != NULL);
+    assert (subp != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcReading, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirOpenDirUpdate
+ *  opens a sub-directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "chroot" [ IN ] - if non-zero, the new directory becomes
+ *  chroot'd and will interpret paths beginning with '/'
+ *  relative to itself.
+ */
+static
+rc_t CC CCNodeSraDirOpenDirUpdate	(CCNodeSraDir *self,
+					 KDirectory ** subp, 
+					 bool chroot, 
+					 const char *path, 
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (subp != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirCreateDir
+ *  create a sub-directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "access" [ IN ] - standard Unix directory permissions
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC CCNodeSraDirCreateDir	(CCNodeSraDir *self,
+                                 uint32_t access,
+                                 KCreateMode mode,
+                                 const char *path,
+                                 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcNoTarg, rcCreating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirDestroyFile
+ */
+static
+rc_t CC CCNodeSraDirDestroyFile	(CCNodeSraDir *self,
+                                 KFile * f)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+
+    return RC (rcFS, rcNoTarg, rcDestroying, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * CCNodeSraDirFileContiguous
+ *  
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "contiguous" [ OUT ] - return parameter for file status
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC CCNodeSraDirFileContiguous (const CCNodeSraDir *self,
+                                    bool * contiguous,
+                                    const char *path_fmt,
+                                    va_list args)
+{
+    char path[4096];
+    int size;
+
+    assert (self);
+    assert (contiguous);
+    assert (path_fmt);
+
+    size = args ?
+        vsnprintf ( path, sizeof path, path_fmt, args ) :
+        snprintf  ( path, sizeof path, "%s", path_fmt );
+    if ( size < 0 || size >= (int) sizeof path )
+        return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcExcessive );
+
+    if (CCNodeSraDirLegalPath (self, path))
+    {
+        *contiguous = true;
+        return 0;
+    }
+    *contiguous = false;
+    return RC (rcFS, rcNoTarg, rcAccessing, rcPath, rcNotFound);
+}
+
+
+static KDirectory_vt_v1 CCNodeSraDir_vt = 
+{
+    /* version 1.0 */
+    1, 3,
+
+    /* start minor version 0 methods*/
+    CCNodeSraDirDestroy,
+    CCNodeSraDirList,
+    CCNodeSraDirVisit,
+    CCNodeSraDirVisitUpdate,
+    CCNodeSraDirPathType,
+    CCNodeSraDirResolvePath,
+    CCNodeSraDirResolveAlias,
+    CCNodeSraDirRename,
+    CCNodeSraDirRemove,
+    CCNodeSraDirClearDir,
+    CCNodeSraDirVAccess,
+    CCNodeSraDirSetAccess,
+    CCNodeSraDirCreateAlias,
+    CCNodeSraDirOpenFileRead,
+    CCNodeSraDirOpenFileWrite,
+    CCNodeSraDirCreateFile,
+    CCNodeSraDirFileSize,
+    CCNodeSraDirSetFileSize,
+    CCNodeSraDirOpenDirRead,
+    CCNodeSraDirOpenDirUpdate,
+    CCNodeSraDirCreateDir,
+    CCNodeSraDirDestroyFile,
+    /* end minor version 0 methods*/
+    /* start minor version 1 methods*/
+    CCNodeSraDirVDate,
+    CCNodeSraDirSetDate,
+    CCNodeSraDirGetSysDir,
+    /* end minor version 2 methods*/
+    CCNodeSraDirFileLocator,
+    /* end minor version 2 methods*/
+    /* end minor version 3 methods*/
+    CCNodeSraDirFilePhysicalSize,
+    CCNodeSraDirFileContiguous
+    /* end minor version 3 methods*/
+};
+static const char root_name[] = "/";
+static
+rc_t KDirectoryMakeSraNodeDir (const KDirectory ** pself, const KFile * file,
+                               const char * name)
+{
+    CCNodeSraDir * self;
+    size_t name_size;
+    rc_t rc;
+
+    assert (pself);
+
+    name_size = string_size (name);
+    self = malloc (sizeof (*self) + name_size + 1);
+    if (self == NULL)
+        rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+    else
+    {
+        rc = KFileAddRef (file);
+        if (rc == 0)
+        {
+            rc_t orc;
+            self->file = file;
+            self->dir_name = root_name;
+            self->sub_name = (const char *)(self+1);
+            self->name_size = name_size;
+            strcpy ((char*)self->sub_name, name);
+            rc = KDirectoryInit (&self->dad, (const KDirectory_vt*)&CCNodeSraDir_vt,
+                                 "CCSraNodeDir", root_name, false);
+            if (rc == 0)
+            {
+                *pself = &self->dad;
+                return 0;
+            }
+            orc = KFileRelease (file);
+            if (orc)
+            {
+                PLOGERR (klogErr,
+                         (klogErr, orc,
+                          "Error releaseing sub file '$(F) in a KAR archive",
+                          "F=%s", name));
+                if (rc == 0)
+                    rc = orc;
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct list_item
+{
+    KPathType      type;
+    uint32_t       access;
+    uint64_t       size;
+    uint64_t       loc;
+    KTime_t        mtime;
+    char *         path;
+    char *         link;
+
+} list_item;
+
+static
+void CC list_item_whack (void * item, void * data)
+{
+    free (item);
+}
+static
+int64_t CC list_item_cmp (const void * item, const void * n)
+{
+    const list_item * l = item;
+    const list_item * r = n;
+
+/* a bit of a hack to get around issue with CCTree
+ * it has to have a directory say "dir" inserted before
+ * a file within it say dir/file
+ */
+
+    /* dirs before others */
+    if ((l->type == kptDir) && (r->type != kptDir))
+        return -1;
+    if ((r->type == kptDir) && (l->type != kptDir))
+        return 1;
+    
+    /* then by location */
+    if (l->loc > r->loc)
+        return 1;
+    if (l->loc < r->loc)
+        return -1;
+
+    /* if a file is zero sized, but it before a non-zero sized file */
+    if ((l->size == 0) && (r->size > 0))
+        return -1;
+    if ((r->size == 0) && (l->size > 0))
+        return 1;
+
+    /* if type is the same, location is the same and size is the same
+     * go alphabetically.  This puts dirs before sub dirs since
+     * strcmp says "dir" comes before "dir/dir"
+     */
+    return (strcmp (l->path, r->path));
+}
+
+
+typedef struct list_adata
+{
+    Vector list;
+    Vector sort;
+    bool has_zombies;
+} list_adata;
+
+
+static rc_t list_adata_init (list_adata * self)
+{
+    VectorInit (&self->list, 0, 512);
+    VectorInit (&self->sort, 0, 512);
+    self->has_zombies = false;
+    return 0;
+}
+
+
+static void list_adata_whack (list_adata * self)
+{
+    VectorWhack (&self->list, NULL, NULL);
+    VectorWhack (&self->sort, list_item_whack, NULL);
+}
+
+
+/* filter will let us add the add to and extract by name things to kar */
+static
+rc_t step_through_dir (const KDirectory * dir, const char * path,
+                       rc_t (*action)(const KDirectory *, const char *, void *),
+                       void * adata)
+{
+    rc_t rc;
+    KNamelist * names;
+
+    STSMSG (4, ("step_through_dir %s\n", path));
+
+    rc = KDirectoryList (dir, &names, NULL, NULL, "%s", path);
+    if (rc == 0)
+    {
+        uint32_t limit;
+        rc = KNamelistCount (names, &limit);
+        if (rc == 0)
+        {
+            uint32_t idx;
+            size_t pathlen;
+
+            pathlen = strlen(path);
+            for (idx = 0; (rc == 0) && (idx < limit); idx ++)
+            {
+                const char * name;
+                rc = KNamelistGet (names, idx, &name);
+                if (rc == 0)
+                {
+                    size_t namelen = strlen (name);
+                    size_t new_pathlen = pathlen + 1 + namelen;
+                    char * new_path = malloc (new_pathlen + 1);
+
+                    if (new_path != NULL)
+                    {
+                        char * recur_path;
+                        if (pathlen == 0)
+                        {
+                            memmove (new_path, name, namelen);
+                            new_path[namelen] = '\0';
+                        }
+                        else
+                        {
+                            memmove (new_path, path, pathlen);
+                            new_path[pathlen] = '/';
+                            memmove (new_path + pathlen + 1, name, namelen);
+                            new_path[pathlen+1+namelen] = '\0';
+                        }
+                        recur_path = malloc (pathlen + 1 + namelen + 1);
+                        if (recur_path != NULL)
+                        {
+                            rc = KDirectoryResolvePath (dir, false, recur_path,
+                                                         pathlen + 1 + namelen + 1,
+                                                         "%s", new_path);
+
+                            if (rc == 0)
+                                rc = action (dir, recur_path, adata);
+
+                            free (recur_path);
+                        }
+                        free (new_path);
+                    }
+                }
+            }
+        }
+        KNamelistRelease (names);
+    }
+    return rc;
+}
+static
+rc_t list_action (const KDirectory * dir, const char * path, void * _adata)
+{
+    rc_t           rc = 0;
+    list_adata *   data = _adata;
+    list_item *    item = NULL;
+    KPathType      type  = KDirectoryPathType (dir, "%s", path);
+    size_t         pathlen = strlen (path);
+    size_t         linklen = 0;
+    char           link [2 * 4096]; /* we'll truncate? */
+
+    if (type & kptAlias)
+    {
+        rc = KDirectoryVResolveAlias (dir, false, link, sizeof (link),
+                                      path, NULL);
+        if (rc == 0)
+            linklen = strlen (link);
+    }
+
+    if (rc == 0)
+    {
+        item = calloc (sizeof (*item) + pathlen + linklen + 2, 1); /* usually one too many */
+        if (item == NULL)
+        {
+            rc = RC (rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted);
+        }
+        else
+        {
+            do
+            {
+                item->path = (char *)(item+1);
+                strcpy (item->path, path);
+                item->type = type;
+                rc = KDirectoryAccess (dir, &item->access, "%s", path);
+                if (rc) break;
+
+                rc = KDirectoryDate (dir, &item->mtime, "%s", path);
+                if (rc) break;
+
+                if (type & kptAlias)
+                {
+                    item->link = item->path + pathlen + 1;
+                    strcpy (item->link, link);
+                }
+                else switch (type & ~kptAlias)
+                {
+                case kptNotFound:
+                    rc = RC (rcExe, rcDirectory, rcAccessing, rcPath, rcNotFound);
+                    break;
+                case kptBadPath:
+                    rc = RC (rcExe, rcDirectory, rcAccessing, rcPath, rcInvalid);
+                    break;
+                case kptZombieFile:
+                    data->has_zombies = true;
+                case kptFile:
+                    rc = KDirectoryFileSize (dir, &item->size, "%s", path);
+                    if (rc == 0)
+                        rc = KDirectoryFileLocator (dir, &item->loc, "%s", path);
+                    DBGMSG (DBG_APP, 1, ("%s: found file %s size %lu at %lu\n",
+                                         __func__, item->path, item->size, item->loc));
+                    break;
+                case kptDir:
+                    DBGMSG (DBG_APP, 1, ("%s: found directory %s\n",
+                                         __func__, item->path));
+                    break;
+                default:
+                    DBGMSG (DBG_APP, 1, ("%s: found unknown %s\n",
+                                         __func__, item->path));
+                    break;
+                }
+            } while (0);
+        }
+    }
+    if (rc == 0)
+    {
+        VectorAppend (&data->list, NULL, item);
+        VectorInsert (&data->sort, item, NULL, list_item_cmp);
+
+        if (type == kptDir)
+            rc = step_through_dir (dir, path, list_action, data);
+    }
+    return rc;
+}
+
+
+typedef struct CCSra
+{
+    CCTree * tree;
+    const KDirectory * ndir;
+    const KDirectory * adir;
+    const KFile * file;
+} CCSra;
+
+
+static
+rc_t CCSraInit (CCSra ** pself, CCTree * tree, const KFile * sf, const char * name)
+{
+    CCSra * self;
+    rc_t rc;
+
+    assert (pself);
+    assert (sf);
+    assert (name);
+
+    self = malloc (sizeof (*self));
+    if (self == NULL)
+        rc = RC (rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted);
+    else
+    {
+        KFileAddRef (self->file = sf);
+
+        rc = KDirectoryMakeSraNodeDir (&self->ndir, sf, name);
+        if (rc == 0)
+        {
+            rc = KDirectoryOpenSraArchiveReadUnbounded (self->ndir, &self->adir, true, "%s", name);
+            if (rc == 0)
+            {
+                self->tree = tree;
+                *pself = self;
+                return 0;
+            }
+            KDirectoryRelease (self->ndir);
+        }
+        free (self);
+    }
+    return rc; /* error out */
+}
+
+static
+bool CC CCSraOneItem (void * item_, void * data_)
+{
+    CCSra * self = data_;
+    list_item * item = item_;
+    rc_t rc;
+
+    DBGMSG (DBG_APP, 1, ("%s: %s\n", __func__, item->path));
+
+
+    switch (item->type)
+    {
+    default:
+        DBGMSG (DBG_APP, 1, ("%s: item->type not processed (%d)\n", __func__, item->type));
+        rc = 0;
+        break;
+    case kptFile:
+    {
+        CCArcFileNode * node;
+        rc = CCArcFileNodeMake (&node, item->loc, item->size);
+        if (rc == 0)
+        {
+            const KFile * sfile;
+            rc = KFileMakeSubRead (&sfile, self->file, item->loc, item->size);
+            if (rc == 0)
+            {
+                void * save;
+
+                copycat_log_set (&node->dad.logs, &save);
+
+                rc = ccat_md5 (self->tree, sfile, item->mtime, ccArcFile, &node->dad,
+                               item->path);
+
+                copycat_log_set (save, NULL);
+
+                KFileRelease (sfile);
+            }
+        }
+        DBGMSG (DBG_APP, 1, ("%s: kptFile processed %lu at %lu\n", __func__, item->size, item->loc));
+        break;
+    }
+    case kptDir:
+    {
+        CCTree * node;
+        rc = CCTreeMake (&node);
+        if (rc == 0)
+        {
+            rc = CCTreeInsert (self->tree, item->mtime, ccDirectory, node, item->path);
+            DBGMSG (DBG_APP, 1, ("%s: insert directory %s\n", __func__, item->path));
+        }
+        break;
+    }
+    }
+    DBGMSG (DBG_APP, 1, ("%s: exiting rc (%R) (%d)\n", __func__, rc, (rc !=0)));
+    return (rc != 0);
+}
+
+static
+void CCSraWhack (CCSra * self)
+{
+    rc_t rc, orc;
+    rc = KDirectoryRelease (self->ndir);
+    orc = KDirectoryRelease (self->adir);
+    if (rc == 0)
+        rc = orc;
+    orc = KFileRelease (self->file);
+    if (rc == 0)
+        rc = orc;
+    if (rc)
+        LOGERR(klogWarn, rc, "error releaseing CCSra");
+    free (self);
+}
+rc_t ccat_sra ( CCContainerNode *np, const KFile *sf, const char *name )
+{
+    rc_t rc;
+    CCSra * sra;
+
+    rc = CCSraInit (&sra, &np->sub, sf, name);
+
+    if (rc == 0)
+    {
+        list_adata ldata;
+
+        list_adata_init (&ldata);
+        rc = step_through_dir (sra->adir, ".", list_action, &ldata);
+        if (rc == 0)
+        {
+            DBGMSG (DBG_APP, 1, ("Vector sizes list (%u) sort (%u)\n", 
+                                 VectorLength(&ldata.list),
+                                 VectorLength(&ldata.sort)));
+            VectorDoUntil (&ldata.sort, false, CCSraOneItem, sra);
+/*             VectorDoUntil (&ldata.list, false, CCSraOneItem, sra); */
+        }
+        list_adata_whack (&ldata);
+        CCSraWhack (sra);
+    }
+    DBGMSG (DBG_APP, 1, ("Done with %s\n", name));
+    return rc;
+}
+
diff --git a/tools/copycat/ccsubchunk.c b/tools/copycat/ccsubchunk.c
new file mode 100644
index 0000000..1a4ad38
--- /dev/null
+++ b/tools/copycat/ccsubchunk.c
@@ -0,0 +1,390 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kfs/subfile.h>
+#include <kfs/arc.h>	/* definition of chunks */
+#include "copycat-priv.h"
+/* ======================================================================
+ * KSubChunkedFile
+ *  a chunked file inside an archive not general purpose yet
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+#define KFILE_IMPL struct KSubChunkFile
+#include <kfs/impl.h>
+
+static rc_t KSubChunkFileDestroy (KSubChunkFile *self);
+static struct KSysFile *KSubChunkFileGetSysFile (const KSubChunkFile *self,
+					    uint64_t *offset);
+static rc_t KSubChunkFileRandomAccess (const KSubChunkFile *self);
+static uint32_t KSubChunkFileType (const KSubChunkFile *self);
+static rc_t KSubChunkFileSize (const KSubChunkFile *self, uint64_t *size);
+static rc_t KSubChunkFileSetSize (KSubChunkFile *self, uint64_t size);
+static rc_t KSubChunkFileRead (const KSubChunkFile *self, uint64_t pos,
+			  void *buffer, size_t bsize, size_t *num_read);
+static rc_t KSubChunkFileWrite (KSubChunkFile *self, uint64_t pos, const void *buffer,
+			   size_t size, size_t *num_writ);
+
+
+static const KFile_vt_v1 vtKSubChunkFile =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KSubChunkFileDestroy,
+    KSubChunkFileGetSysFile,
+    KSubChunkFileRandomAccess,
+    KSubChunkFileSize,
+    KSubChunkFileSetSize,
+    KSubChunkFileRead,
+    KSubChunkFileWrite,
+
+    /* 1.1 */
+    KSubChunkFileType
+};
+
+/*-----------------------------------------------------------------------
+ * KSubChunkFile
+ *  an archive file including tar and sra
+ */
+struct KSubChunkFile
+{
+    KFile		dad;
+    uint64_t		size;
+    const KFile *	original;
+    uint32_t		num_chunks;
+    const KTocChunk 	chunks [1];
+};
+
+/* ----------------------------------------------------------------------
+ * KSubChunkFileMake
+ *  create a new file object
+ */
+
+rc_t KFileMakeChunkRead (const struct KFile ** pself,
+			 const struct KFile * original,
+			 uint64_t size,
+			 uint32_t num_chunks,
+			 struct KTocChunk * chunks)
+{
+    rc_t	rc;
+    KSubChunkFile *	self;
+
+    /* -----
+     */
+    assert (pself != NULL);
+    assert (original != NULL);
+
+    *pself = NULL;
+    rc = 0;
+    /* -----
+     * get space for the object
+     */
+    self = malloc (sizeof (KSubChunkFile) + ((num_chunks-1) * sizeof (KTocChunk)));
+    if (self == NULL)	/* allocation failed */
+    {
+        /* fail */
+        rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    else
+    {
+        rc = KFileInit (&self->dad,				/* initialize base class */
+			(const KFile_vt*)&vtKSubChunkFile, 	/* VTable for KSubChunkFile */
+                    "KSubChunkFile", "no-name",
+                        true,false);				/* read allowed,write disallowed */
+	if (rc == 0)
+	{
+	    KFileAddRef (original);
+	    /* succeed */
+	    self->size = size;
+	    self->original = original;
+	    self->num_chunks = num_chunks;
+	    memmove ((struct KTocChunk*)self->chunks, chunks, num_chunks * sizeof (KTocChunk));
+	    *pself = &self->dad;
+	    return 0;
+	}
+	/* fail */
+	free (self);
+    }
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t KSubChunkFileDestroy (KSubChunkFile *self)
+{
+    assert (self != NULL);
+    KFileRelease (self->original);
+    free (self);
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * We cant allow memory mapping a tee file as the read?writes ar needed
+ * to trigger the writes to the copy KFile
+ */
+
+static
+struct KSysFile *KSubChunkFileGetSysFile (const KSubChunkFile *self, uint64_t *offset)
+{
+    /* parameters must be non-NULL */
+    assert (self != NULL);
+    assert (offset != NULL);
+
+    /* not implmenting at this time */
+    return NULL;
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ *
+ * Update needs to be able to seek both original and copy while read
+ * only needs to be able to seek the original.
+ */
+static
+rc_t KSubChunkFileRandomAccess (const KSubChunkFile *self)
+{
+    assert (self != NULL);
+    return KFileRandomAccess (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t KSubChunkFileType (const KSubChunkFile *self)
+{
+    return KFileType (self->original);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t KSubChunkFileSize (const KSubChunkFile *self, uint64_t *size)
+{
+    assert (self != NULL);
+    assert (size != NULL);
+
+    *size = self->size;
+
+    return 0;;
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t KSubChunkFileSetSize (KSubChunkFile *self, uint64_t size)
+{
+    return RC (rcFS, rcFile, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t	KSubChunkFileRead	(const KSubChunkFile *self,
+				 uint64_t pos,
+				 void *buffer,
+				 size_t bsize,
+				 size_t *num_read)
+{
+    size_t	count;		/* how many to read/write in an action */
+    uint8_t *	pbuff;		/* access the buffer as an array of bytes */
+    uint64_t	end;		/* this will be set to the end offset */
+    uint32_t	num_chunks;
+    const KTocChunk * pchunk;
+    rc_t	rc;		/* general purpose return from calls and pass along */
+
+    assert (self != NULL);
+    assert (buffer != NULL);
+    assert (num_read != NULL);
+    assert (bsize != 0);
+
+    /* -----
+     * assume no read/write will happen or rather start with having read none;
+     * this write could be superfluous but we need to prepare *num_read for += operations
+     */
+    *num_read = 0;
+
+    pbuff = buffer;
+    end = pos + bsize;	
+    num_chunks = self->num_chunks;
+    pchunk = self->chunks;
+
+    /* -----
+     * step through the chunks
+     */
+    for (rc = 0; (num_chunks) && (pos < end); --num_chunks, ++pchunk)
+    {
+	uint64_t 	cend;		/* end offset of this chunk */
+
+	/* -----
+	 * determine the end of this chunk
+	 */
+	cend = pchunk->logical_position + pchunk->size;
+
+	/* -----
+	 * if this chunk is entirely before the current position
+	 * we are looking for
+	 * skip to the next (if any) chunk
+	 */
+	if (pos > cend)
+	    continue;
+
+	/* -----
+	 * handle any needed zero fill section before the next chunk
+	 */
+	if (pos < pchunk->logical_position)
+	{
+	    /* -----
+	     * try to fake-read as many bytes of zero as possible
+	     * so start assuming you need enough zeros to reach the next chunk
+	     * but cut it back to the remaining requested if that was too many
+	     */
+	    count = pchunk->logical_position - pos;
+	    if (count > bsize)
+		count = bsize;
+
+	    /* fake read the zeros */
+	    memset (pbuff, 0, count);
+
+	    /* update tracking variables */
+	    pbuff += count;
+	    pos += count;
+	    *num_read += count;
+	}
+
+	/* -----
+	 * handle a chunk section
+	 *
+	 * if we are here, then we still have bytes to get and
+	 * pos >= pchunk_logical_position
+	 *
+	 * Get the most we can from this chunk.
+	 * If there are enough bytes in this chunk to finish the read: do so.
+	 * Else read through the end of the chunk
+	 */
+	count = (end <= cend) ? end - pos : cend - pos;
+
+	/* -----
+	 * a little tricky is we call by value the wanted count and the function
+	 * called will over write that with the actual read count
+	 */
+	rc = KFileRead (self->original, 
+			pchunk->source_position + (pchunk->logical_position - pos), 
+			pbuff, count, &count);
+
+	*num_read += count;
+	if (rc != 0)
+	{
+	    /* failure so abort */
+	    break;
+	}
+	pbuff += count;
+	pos += count;
+	*num_read += count;
+    }
+    /* -----
+     * If eveything so far is okay but we have more bytes to read
+     * yet no more chunks; then fill to the end with zeroes
+     */
+    if ((rc == 0) && (pos < end))
+    {
+	count = end - pos;
+	memset (pbuff, 0, count);
+	*num_read += count;
+    }
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t	KSubChunkFileWrite (KSubChunkFile *self, uint64_t pos,
+		       const void *buffer, size_t bsize,
+		       size_t *num_writ)
+{
+    assert (self != NULL);
+    assert (buffer != NULL);
+    assert (num_writ != NULL);
+
+    *num_writ = 0;
+    return RC (rcFS, rcFile, rcWriting, rcSelf, rcUnsupported);
+}
+
+/* end of file subfile.c */
+
diff --git a/tools/copycat/cctar.c b/tools/copycat/cctar.c
new file mode 100644
index 0000000..cedf6aa
--- /dev/null
+++ b/tools/copycat/cctar.c
@@ -0,0 +1,2199 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "copycat-priv.h"
+#include "debug.h"
+
+#include <klib/rc.h>
+#include <kfs/arc.h>
+#include <kfs/toc.h>
+#include <kfs/file.h>
+#include <kfs/subfile.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <os-native.h>
+
+#include <strtol.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* ======================================================================
+ *
+ * ======================================================================
+ */
+
+#define	OFFSET_OF(structure,member) ((size_t)((&(((structure*)0)->member))-(0)))
+#define PASTE_2(a,b)   a##b
+#define PASTE_3(a,b,c) a##b##c
+#define STRINGIFY(a)   #a
+#ifdef sun
+#undef sun
+#endif
+typedef struct sparse_data
+{
+    struct sparse_data*	next;
+    uint64_t		offset;
+    uint64_t		size;
+} sparse_data;
+
+typedef struct CCTar
+{
+    CCFileNode *        tar_node; /* so we can flag errors */
+    CCTree *		tree;
+    const KFile *	file;
+    const char *	name;
+    sparse_data * 	sparse_q;
+    struct KTocChunk *	chunks;		/* table of chunks: logical_position, source_position, size */
+    size_t		tar_length;	/* how long should the tar file for proper format */
+    size_t		buffer_length;	/* how long is the window into the buffer */
+    uint32_t		num_chunks;
+    uint64_t		position;	/* current position in the file */
+    uint64_t		position_new;	/* next current position in the file */
+    uint64_t		position_limit;	/* max_position read */
+
+    uint64_t            cursor;         /* where we are by parsing the tar */
+
+    bool		found_zero_block;
+    bool		found_second_zero_block;
+    uint8_t		buffer [8 * 1024];
+
+} CCTar;
+
+
+
+static
+rc_t CCTarMake (CCTar ** pself, CCTree * tree, const KFile * sf,
+                const char * name, CCFileNode * fnode)
+{
+    rc_t rc;
+    CCTar * self;
+
+    /* instead of setting individual fields to 9 allocate it as zeroed */
+    self = calloc (1, sizeof * self);
+    if (self == NULL)
+    {
+        rc = RC (rcExe, 0,0,rcMemory, rcExhausted);
+        PLOGERR (klogErr,
+                 (klogErr, rc,
+                  "No memory for tar parse object for $(P)", PLOG_S(P), name));
+        free (self);
+        *pself = NULL;
+        return rc;
+    }
+    self->tree = tree;
+    self->file = sf;
+    self->name = name;
+    self->tar_length = 1024; /* at init we expect at least two zero blocks */
+    *pself = self;
+    return 0;
+}
+
+
+static
+rc_t CCTarWhack (const CCTar * cself)
+{
+    free ((void*)cself); /* cast away const */
+    return 0;
+}
+
+
+/* ======================================================================
+ * Header format structures
+ *
+ * Tar (tape archiver) started possibly as a unix utility in BSD rivalling
+ * the cpio from the AT&T System III.  The exact derivation is unimportant
+ * and some names might be slightly misleading based on historical 
+ * inaccuracies but successful implmentation is not dependant on such 
+ * accuracy in historical trivia but rather on accuracy in technical details.
+ *
+ * Posix attempted to standardize the growingly divergent variants of tar
+ * but it has led to only slightly more standardized variants with vaguely
+ * compatible extensions.
+ *
+ * For the purposes of this implmentation we will refer to the known to the
+ * author versions of tar and include the tar like aspects of the posix pax 
+ * replacement for tar.
+ *
+ * Cpio support could be added if desired with only some difficulty.
+ *
+ * Supported known variants for this implmentation will be:
+ * 	V7 	- the oldest known common base defitions for a tar header
+ *		   block ( possibly from Unix V7?)
+ *    	POSIX	- Posix.1-1988 initial restandardization of a header block
+ *		  This versio introduced the ustar name for a tar header
+ *		  and includes that term as a "magic" constant.
+ *	PAX	- Posix.1.2001 headers for pax a tar derivative that us a
+ *		  peaceful attempt to unify the tar and cpio formats apparently.
+ *		  It isn't different than POSIX in the ustar block but instead
+ *		  is an introduction of two new values of a link field in the
+ *		  tar header that defines what comes next (see headers defined
+ *		  below).
+ *	SUN	- an extension to the POSIX tar header format from SunOS 5
+ *	STAR 85	- pre-POSIX extensions to tar from Heorg Schilling (ask him its
+ *		  the bestest most greatest tar until STAR94)
+ *	STAR 94	- A redo of star based on the POSIX ustar tar header.  A less
+ *		  broken than most implmentation of a POSIX/ustar tar header
+ *		  based tar. Schilling says its the only real implmentation of
+ *		  a ustar based tar but it isn't fully compliant by design.
+ *	GNU 89	- a selected variant of tar from FSF/GNU that is a broken 
+ *		  implementation of a POSIX/ustar header based tar.
+ *	GNU 01	- A slight redo of the FSF/GNU tar format.  There are actually
+ *		  evolving variants all of which are still somewhat broken
+ *		  implementations of a ustar based tar header format.
+ *
+ * Along with these variants of a tar/ustar semi-standard tar header there are
+ * other header blocks and other significant blocks that are also tracked in
+ * this implmentation of a tar reader.
+ *	ZERO BLOCK - a block of 512 zero bytes that is supposed to be padding at
+ *		  the end of a tar file to meet some super blocksize.  Based on
+ *		  where it fits in it would be found when looking for a header
+ *		  for the next file included in a tar archive.
+ *	RAW	- a convention to mean a header block of a type that has not been 
+ *		  determined.
+ */
+#define TYPES() \
+    type_(UNDEFINED) type_(ZERO_BLOCK) type_(CPIO) type_(V7) type_(POSIX) \
+        type_(SUN) type_(STAR_85) type_(STAR_94)  type_(GNU_89) type_(SPARSE)
+
+
+#define type_(e) PASTE_2(TAR_,e),
+
+typedef enum tar_header_type
+{
+    TYPES()
+    TAR_TYPE_COUNT
+} tar_header_type;
+
+#undef type_
+#define type_(e) STRINGIFY(e),
+static const char *	get_type_string(tar_header_type t)
+{
+    static const char * type_error = "Error";
+    static const char * type_strings[] = 
+        {
+            TYPES()
+        };
+    if ((t < 0) || (t >= TAR_TYPE_COUNT))
+	return type_error;
+    return type_strings[t];
+}
+#undef type_
+#undef TYPES
+
+
+/* =============================================================================
+ * Tar headers are almost ASCII based but definitely byte/octet based so all
+ * elements are best defined as arrays of char and use casts to signed and unsigned
+ * where appropriate in interpretation..
+ * 
+ * All Tar files or streams are divided into blocks of 512 bytes
+ * This is significant in the file data in that the last block 
+ * of a file is supposed to be padded with NUL to fill out a block
+ * and then be followed by two blocks of all NUL bytes.
+ * headers are also 512 bytes with various but fairly consistent 
+ * interpretations of what is where with in that block
+ *
+ * Most tar utilities further define super blocks consisting of a number of blocks
+ * typically 10 of them for a length of 5120 bytes.  This is irrelevant for this
+ * implmentation.  By definition a tar file ends with two "zero blocks" and enough
+ * more after that to fill one of these super blocks.  We ignore all aspects of 
+ * this.
+ */
+#define TAR_BLOCK_SIZE		(512)
+typedef char tar_raw_block [TAR_BLOCK_SIZE];
+#define BLOCKS_FOR_BYTES(byte_count)	((byte_count+TAR_BLOCK_SIZE-1)/TAR_BLOCK_SIZE)
+
+/* --------------------------------------------------------------------------------
+ * lengths of various tar header fields
+ */
+
+/* --------------------
+ * Tar file names are always 100 bytes long and include preceding 
+ * path names.  The utilities do not precluded paths that put the 
+ * files outside of the "base" where the tar file was created.
+ *
+ * To handle tar files made by older tar utilities if the last 
+ * character is '/' then the file should be assumed to be a directory.
+ *
+ * This 'type' is used for both the name of the object being archived
+ * and the link target if it is a hard or soft link.
+ */
+#define	TAR_NAME_LEN		(100)
+typedef char	tar_file_name	[TAR_NAME_LEN];
+
+/* --------------------
+ * Tar mode strings are always 8 bytes long.
+ *
+ * 9 file access permissions bits and three execution mode bits.
+ *
+ * Zero '0' not NUL pre-fill unused bytes.  a user permision of 0644 would be stored as
+ * "0000644" with a NUL terminator.
+ *
+ * The format is 7 octal ASCII bytes with only the last 4 being 
+ * significant.  That is the first three are always '0'.  The 8th 
+ * byte is NUL.
+ *
+ * Older utilities might put preceding ' ' characters or
+ * instead of pre-fill have post fill ' ' or NUL.
+ */
+#define TAR_MODE_LEN		(8)
+typedef char	tar_file_mode	[TAR_MODE_LEN];
+/* -----
+ * These are the bits if the mode is in binary (octal defines for ease of interpretation)
+ * they match the st_mode field from the stat()/fstat() struct stat.
+ *
+ * GNU tar puts the file type bits from the stat structure in the mode of the tar file.
+ * Other tar implmentations might as well though no where is this dktefined as required or
+ * recommended or even supported.
+ */
+#define	TAR_SUID_BIT	(04000)	/* set UID on execution */
+#define	TAR_GUID_BIT	(02000)	/* set GID on execution */
+#define	TAR_STICKY_BIT	(01000)	/* save text / sticky bit */
+/* file permissions */
+#define	TAR_MODE_OREAD	(00400)	/* read by owner */
+#define	TAR_MODE_OWRITE	(00200)	/* write by owner */
+#define	TAR_MODE_OEXEC	(00100)	/* execute by owner */
+#define	TAR_MODE_GREAD	(00040)	/* read by group */
+#define	TAR_MODE_GWRITE	(00020)	/* write by group */
+#define	TAR_MODE_GEXEC	(00010)	/* execute by group */
+#define	TAR_MODE_WREAD	(00004)	/* read by other */
+#define	TAR_MODE_WWRITE	(00002)	/* write by other */
+#define	TAR_MODE_WEXEC	(00001)	/* execute by other */
+
+/* -----
+ * These are the bits once converted into ASCII
+ * with in an ASCII byte these bits are actually usable so no conversion needed
+ * '0' = 0x30 / 060
+ * '1' = 0x31 / 061
+ * '2' = 0x32 / 062
+ * '3' = 0x33 / 063
+ * '4' = 0x34 / 064
+ * '5' = 0x35 / 065
+ * '6' = 0x36 / 066
+ * '7' = 0x37 / 067
+ */
+#define	TAR_MODE_READ		(0x01)
+#define	TAR_MODE_WRITE		(0x02)
+#define	TAR_MODE_EXEC		(0x04)
+#define TAR_MODE_STICKY		(0x01)
+#define TAR_MODE_GUID		(0x02)
+#define TAR_MODE_SUID		(0x04)
+#define	TAR_MODE_OWNER_BYTE	(6)
+#define	TAR_MODE_GROUP_BYTE	(5)
+#define	TAR_MODE_WORLD_BYTE	(4)
+#define	TAR_MODE_USER_BYTE	(3)
+#define	TAR_MODE_EXEC_BYTE	(2)
+
+/* --------------------
+ * Tar user (and group) numeric IDs are put into 8 bytes.
+ *
+ * There is a '0' prefill and as terminating NUL.
+ *
+ * Older utilities might put preceding ' ' characters or
+ * instead of pre-fill have post fill ' ' or NUL.
+ */
+#define TAR_ID_LEN		(8)
+typedef	char	tar_id		[TAR_ID_LEN];
+
+/* --------------------
+ * Tar file size elements are 12 bytes long with 11 used
+ * for octal characters making the maximum size of a file
+ * for pure classic or Posix tar limited to 8 GBytes.  
+ * Various tar utilities handle longer files in different
+ * ways if at all.
+ *
+ * A length of 100 bytes would be stored as "00000000144".
+ *
+ * Links and some other special values are archived with a
+ * length of zero and thus no data blocks.
+ *
+ * There is a '0' prefill and as terminating NUL.
+ *
+ * Older utilities might put preceding ' ' characters or
+ * instead of pre-fill have post fill ' ' or NUL.
+ *
+ * GNU tar implmentations use alternative intrpretatopms of
+ * this and possibly other fields using mime base 64 or
+ * base 256 (big endian nonstandard sized binary)
+ */
+#define	TAR_SIZE_LEN		(12)
+typedef char	tar_size	[TAR_SIZE_LEN];
+#define MAX_TAR_FILE_SIZE	(077777777777)
+
+/* --------------------
+ * Tar file modification/access/creation times are 12 bytes
+ * long.  This holds 11 octal ASCII digits representing the
+ * number of seconds since 01/01/1970 00:00 UTC.
+ *
+ * There is a '0' prefill and as terminating NUL.
+ *
+ * Older utilities might put preceding ' ' characters or
+ * instead of pre-fill have post fill ' ' or NUL.
+ */
+#define TAR_TIME_LEN		(12)
+typedef	char	tar_time	[TAR_TIME_LEN];
+
+/* --------------------
+ * Tar has a weak checksum protection of part of the tar header
+ * that is 8 bytes long and again uses 7 ASCII octal digits.
+ *
+ * There is a '0' prefill and as terminating NUL.
+ *
+ * Older utilities might put preceding ' ' characters or
+ * instead of pre-fill have post fill ' ' or NUL.
+ */
+#define TAR_CSUM_LEN		(8)
+typedef	char	tar_csum	[TAR_CSUM_LEN];
+#define	csum_blanks		("       ")
+
+/* --------------------
+ * The tar link is a single byte that expresses the type of file
+ * or special value represented by this entry.
+ */
+typedef	char	tar_link;
+
+#define LINKS()                   \
+    link_('\0',OLDNORMAL_FILE)    \
+    link_('0',NORMAL_FILE)        \
+    link_('1',HARD_LINK)          \
+    link_('2',SYMBOLIC_LINK)      \
+    link_('3',CHARACTER_SPECIAL)  \
+    link_('4',BLOCK_SPECIAL)      \
+    link_('5',DIRECTORY)          \
+    link_('6',FIFO)               \
+    link_('7',CONTIGUOUS_FILE)    \
+    link_('A',SOLARIS_ACL)        \
+    link_('D',GNU_DUMPDIR)        \
+    link_('E',SOLARIS_ACL_FILE)   \
+    link_('I',INODE_METADATA)     \
+    link_('K',NEXT_LONG_LINK)     \
+    link_('L',NEXT_LONG_NAME)     \
+    link_('M',MULTI_VOLUME)       \
+    link_('N',GNU1989_LONG_NAMES) \
+    link_('S',SPARSE)             \
+    link_('V',VOLUME_NAME)        \
+    link_('X',SUN_XHDR)           \
+    link_('g',PAX_GLOBAL_XHDR)    \
+    link_('x',PAX_XHDR)
+
+#define link_(v,n)      PASTE_2(LINK_,n) = v,
+
+enum e_tar_link
+{
+    LINKS()
+    LINK_TYPE_COUNT
+};
+#undef link_
+
+#define link_(v,n) {STRINGIFY(n), v},
+struct nv_pair
+{
+    const char * name;
+    tar_link  link;
+};
+static const char * get_link_string(tar_link l)
+{
+    static const struct nv_pair pairs[] = 
+        {
+            LINKS()
+            {NULL, 0}
+        };
+    unsigned int ix;
+
+    for (ix = 0; ix < LINK_TYPE_COUNT; ++ix)
+        if (pairs[ix].link == l)
+            return pairs[ix].name;
+    return "UNDEFINED";
+}
+#undef link_
+#undef LINKS
+
+
+/* --------------------
+ * The tar magic string is 6 bytes long.
+ */
+#define	TAR_MAGIC_LEN		(6)
+typedef char	tar_magic	[TAR_MAGIC_LEN];
+#define	POSIX_MAGIC_CONST	"ustar"		/* includes terminating NUL */
+
+/* --------------------
+ * The tar version string is two bytes long and uses both bytes
+ */
+#define	TAR_VERSION_LEN		(2)
+typedef	char	tar_version	[TAR_VERSION_LEN];
+#define	POSIX_VERSION_CONST	"00"		/* does not include terminating NUL */
+
+/* --------------------
+ * The Posix strong user/group name is 32 bytes long
+ */
+#define TAR_STRNAME_LEN		(32)
+typedef	char	tar_strname	[TAR_STRNAME_LEN];
+
+/* --------------------
+ * The dev? strings are 8 bytes long
+ */
+#define	TAR_DEV_LEN		(8)
+typedef	char	tar_dev		[TAR_DEV_LEN];
+
+/* --------------------
+ * Posix prefix is 155 bytes that can be put before the name to give a path of
+ * 255 bytes instad of the smaller limit of 99.
+ */
+#define	TAR_PREFIX_LEN		(155)
+typedef	char	tar_prefix	[TAR_PREFIX_LEN];
+
+/*
+ * Sun extensions
+ */
+
+/* --------------------
+ */
+typedef	char sun_extnum;
+#define	SUN_FULLSIZE_LEN	(10)
+typedef	char	sun_fullsize	[SUN_FULLSIZE_LEN];
+
+/* --------------------
+ * star extensions
+ *
+ * star85 is old star from 1985
+ */
+typedef	char	star85_version;
+#define	STAR85_FILETYPE_LEN	(8)
+typedef char	star85_filetype	[STAR85_FILETYPE_LEN];
+#define	STAR85_TYPE_LEN		(12)
+typedef	char	star85_type	[STAR85_TYPE_LEN];
+#define	STAR85_RDEV_LEN		(12)
+typedef	char	star85_rdev	[STAR85_RDEV_LEN];
+/* ignoring the 11 byte rdev with minor bits */
+#define	STAR85_UNAME_LEN	(16)
+typedef	char	star85_uname	[STAR85_UNAME_LEN];
+#define	STAR85_GNAME_LEN	(15)
+typedef	char	star85_gname	[STAR85_GNAME_LEN];
+#define	STAR_XMAGIC_LEN		(4)
+typedef	char	star_magic	[STAR_XMAGIC_LEN];
+#define	STAR_MAGIC_CONST	("tar")
+#define	NSTAR_PREFIX_LEN	(1)
+typedef	char	nstar_prefix	[NSTAR_PREFIX_LEN];
+
+/* --------------------
+ * gnu extensions
+ */
+#define	GNU89_MAGIC_LEN		(8)
+typedef	char	gnu89_magic	[GNU89_MAGIC_LEN];
+#define	GNU_89_MAGIC_CONST	"ustar  "		/* includes terminating NUL */
+#define	GNU_89_GNUMAGIC_CONST	"GNUtar "		/* includes terminating NUL */
+#define GNU89_LONGNAMES_LEN	(4)
+typedef char	gnu89_longnames	[GNU89_LONGNAMES_LEN];
+
+
+/* --------------------
+ * shared between the feuding star and gnu tar
+ */
+typedef	char	tar_isextended ;
+typedef struct	tar_sparse
+{
+    tar_size	offset;
+    tar_size	num_bytes;
+} tar_sparse;
+#define	GNU_SPARSES_IN_EXTRA_HEADER		(16)
+#define	GNU_SPARSES_IN_OLD_HEADER		(4)
+#define	GNU_SPARSES_IN_SPARSE_HEADER		(21)
+#define	STAR_SPARSES_IN_HEADER			(4)
+#define	STAR_SPARSES_IN_EXT_HEADER		(21)
+
+
+/* ----------------------------------------
+ * The various tar header formats
+ *
+ * Note that in all the tar, posix and pax formats the first 257 bytes are
+ * the same.  In all posix ad almost compliant formats the first
+ * 345 bytes are the same (except GNU 89).  It is abuse of the 155
+ * bytes of the prefix that make star and gnu truly not posix compliant
+ * Sun used the 12 bytes after the prefix so is still psox compliant.
+ */
+typedef	struct	tar_v7_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    /* end of header					// 257 */
+} tar_v7_header;
+
+typedef struct tar_posix_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    tar_magic		magic;				/* 257 */
+    tar_version		version;			/* 263 */
+    tar_strname		uname;				/* 265 */
+    tar_strname		gname;				/* 297 */
+    tar_dev		devmajor;			/* 329 */
+    tar_dev		devminor;			/* 337 */
+    tar_prefix		prefix;				/* 345 */
+    /* end of header					// 500 */
+} tar_posix_header, tar_pax_header;
+
+typedef struct tar_sun_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    tar_magic		magic;				/* 257 */
+    tar_version		version;			/* 263 */
+    tar_strname		uname;				/* 265 */
+    tar_strname		gname;				/* 297 */
+    tar_dev		devmajor;			/* 329 */
+    tar_dev		devminor;			/* 337 */
+    tar_prefix		prefix;				/* 345 */
+    sun_extnum		extnum;				/* 500 non-conformant */
+    sun_extnum		extcount;			/* 501 non-conformant */
+    sun_fullsize	fullsize;			/* 502 non-conformant */
+    /* end of header					// 512 non-conformant */
+} tar_sun_header;
+
+typedef struct tar_star_85_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    star85_version	starversion;			/* 257 non-conformant */
+    star85_filetype	starfiletype;			/* 258 internal type of file? non-conformant */
+    star85_type		startype;			/* 266 type of file (UNIX)? non-conformant */
+    star85_rdev		rdev;				/* 278 non-conformant */
+    tar_time		atime;				/* 290 non-conformant */
+    tar_time		ctime;				/* 302 non-conformant */
+    star85_uname	uname;				/* 314 non-conformant */
+    star85_gname	gname;				/* 330 non-conformant */
+    tar_prefix		prefix;				/* 345 non-conformant */
+    char		___fill0[8];			/* 500 non-conformant */
+    star_magic		xmagic;				/* 508 non-conformant */
+    /* end of header					// 512 non-conformant */
+} tar_star_85_header;
+typedef struct tar_star_94_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    tar_magic		magic;				/* 257 */
+    tar_version		version;			/* 263 */
+    tar_strname		uname;				/* 265 */
+    tar_strname		gname;				/* 297 */
+    tar_dev		devmajor;			/* 329 */
+    tar_dev		devminor;			/* 337 */
+    nstar_prefix	prefix;				/* 345 */
+    char		___fill0;			/* 346 */
+    char		___fill1[8];			/* 347 */
+    tar_isextended	isextended;			/* 355 non-conformant */
+    tar_sparse 		sparse[STAR_SPARSES_IN_HEADER];	/* 356 non-conformant */
+    tar_size		realsize;			/* 452 non-conformant */
+    tar_size		offset;				/* 464 non-conformant */
+    tar_time		atime;				/* 476 non-conformant */
+    tar_time		ctime;				/* 488 non-conformant */
+    char		___fill2[8];			/* 500 */
+    star_magic		xmagic;				/* 508 non-conformant */
+    /* end of header					// 512 */
+} tar_star_94_header;
+
+typedef struct tar_gnu_89_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    gnu89_magic		magic;				/* 257 non-conformant */
+    tar_strname		uname;				/* 265 */
+    tar_strname		gname;				/* 297 */
+    tar_dev		devmajor;			/* 329 */
+    tar_dev		devminor;			/* 337 */
+    tar_time		atime;				/* 345 non-conformant */
+    tar_time		ctime;				/* 357 non-conformant */
+    tar_size		offset;				/* 369 non-conformant */
+    gnu89_longnames	longnames;			/* 381 non-conformant */
+    char		___fill0[1];			/* 385 */
+    tar_sparse		sparse	[GNU_SPARSES_IN_OLD_HEADER];/* 386 optional sparse */
+    tar_isextended	isextended;			/* 482 non-conformant */
+    tar_size		realsize;			/* 483 non-conformant */
+    /* end of header					// 495 */
+} tar_gnu_89_header;
+
+typedef struct tar_gnu_99_header
+{
+    /* type		member name			 and offset */
+    tar_file_name	name;				/*   0 */
+    tar_file_mode	mode;				/* 100 */
+    tar_id		uid;				/* 108 */
+    tar_id		gid;				/* 116 */
+    tar_size		size;				/* 124 */
+    tar_time		mtime;				/* 136 */
+    tar_csum		csum;				/* 148 */
+    tar_link		link;				/* 156 */
+    tar_file_name	linkname;			/* 157 */
+    gnu89_magic		magic;				/* 257 non-conformant */
+    tar_strname		uname;				/* 265 */
+    tar_strname		gname;				/* 297 */
+    tar_dev		devmajor;			/* 329 */
+    tar_dev		devminor;			/* 337 */
+    tar_time		atime;				/* 345 non-conformant */
+    tar_time		ctime;				/* 357 non-conformant */
+    tar_size		offset;				/* 369 non-conformant */
+    gnu89_longnames	longnames;			/* 381 non-conformant */
+    char		___fill0[1];			/* 385 */
+    tar_sparse		sparse	[GNU_SPARSES_IN_OLD_HEADER];/* 386 non-conformant optional sparse */
+    tar_isextended	isextended;			/* 482 non-conformant */
+    tar_size		realsize;			/* 483 non-conformant */
+    /* end of header					// 495 */
+} tar_gnu_99_header;
+
+typedef struct tar_sparse_header
+{
+    /* type		member name			 and offset */
+    tar_sparse		sparse	[STAR_SPARSES_IN_EXT_HEADER];/* 0 */
+    tar_isextended	isextended;			/* 504 */
+} tar_sparse_header;					/* 505 end of header */
+
+typedef struct tar_cpio_header
+{
+    /* type		member name			 and offset */
+    char		magic		[6];		/*   0	must be "070707" */
+#define	TAR_CPIO_MAGIC_CONST ("070707")
+    char		dev		[6];		/*   6  (dev,ino) is unique for each file in archive */
+    char		ino		[6];		/*  12  see dev */
+    char		mode		[6];		/*  18 */
+    char		uid		[6];		/*  24 */
+    char		gif		[6];		/*  30 */
+    char		nlink		[6];		/*  36 */
+    char		rdev		[6];		/*  42 */
+    char		mtime		[11];		/*  48 */
+    char		namesize	[6];		/*  59 */
+    char		filesize	[6];		/*  65 */
+    char		buff		[1];		/*  71  name and file data */
+} tar_cpio_header;
+
+typedef union tar_header
+{
+    /* ----------
+     * The TAR header is to be zero filled by definition but some tar
+     * programs use ' ' instead.
+     *
+     * accept zeros ('0'), spaces (' ') or NULs (0x00) as equivalent where reasonable
+     *
+     * This name refers to the entire header as a single undifferentiated
+     * sequence of bytes.
+     */
+    tar_raw_block	raw;		/* tar block as an array of bytes: used for 0 blocks here */
+    tar_cpio_header	cpio;		/* cpio not really tar */
+    tar_v7_header	tar;		/* classic header back to the beginnings of memory */
+    tar_posix_header	posix;		/* ustar or Posix 1003.1 header */
+    tar_sun_header	suntar;		/* Sun Microsystems tar header */
+    tar_star_85_header	star_85;	/* star header from 1985 (pre-Posix) */
+    tar_star_94_header	star_94;	/* star header from 1994 (post-Posix) */
+    tar_gnu_89_header	gnu_89;		/* gnu header from circa 1989 (post-posix but broken) */
+    tar_gnu_99_header	gnu_99;         /* gnu header from ???? */
+    tar_sparse_header	sparse;		/* star / gnu extended sparses header */
+} tar_header;
+
+
+/* ======================================================================
+ * local module-wide function like macros
+ */
+/* -----
+ * offset of is the count of bytes between the base of a structure and 
+ * a particular member of that structure
+ */
+#define	OFFSET_OF(structure,member) ((size_t)((&(((structure*)0)->member))-(0)))
+
+
+/* ======================================================================
+ * compilation unit local functions
+ */
+
+/* ======================================================================
+ * return the RFC 2045 base 64 value for a byte character 
+ * -1 for any out of range
+ *
+ * base 64 uses A-Z as 0-25, a-z as 26-51, 0-9 as 52-61, + as 62 and / as 63
+ */
+static int64_t decode_base64char (uint8_t byte)
+{
+    /* 
+     * trade off of space for table versus time to upsize the return
+     * and reupsize where it is used
+     */
+    static const int8_t table[] = 
+	{
+	    /*
+	     * 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
+	     */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 00 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 10 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, /* 20 */
+	    52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1, /* 30 */
+	    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, /* 40 */
+	    15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, /* 50 */
+	    -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, /* 60 */
+	    41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1, /* 70 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 80 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 90 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* A0 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* B0 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* C0 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* D0 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* E0 */
+	    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1  /* F0 */
+	};
+    return table[byte];
+}
+
+
+/* ======================================================================
+ * return the RFC 2045 base 64 value of a string at <str> of length <len>
+ *
+ * Interpreted the specification to mean that you simply ignore any out
+ * of range characters.  They are not treated as bytes of 0 as that would
+ * mean a shift of earlier bytes.
+ *
+ * Each character is 6 bits of the final value.
+ */
+static int64_t decode_base64string (const uint8_t* str, size_t len)
+{
+    int64_t 	result = 0;
+    int64_t 	temp = 0;
+    size_t 	ix;
+
+    for (ix = 0; ix < len; ++ix)
+    {
+	if ((temp = decode_base64char(str[ix])) >= 0)
+	{
+	    result <<= 6; /* result *= 64 */
+	    result += temp;
+	}
+    }
+    return result;
+}
+
+
+/* ======================================================================
+ * tar_strtoll
+ *
+ * This function will convert a string in a tar header into a 64 signed
+ * integer.
+ *
+ * The original tar header used just octal numbers in ascii in fixed length
+ * fields.  As normal in the computer software world these "obviously plenty
+ * big" fields became way too small.
+ *
+ * GNU tar invented two approaches to make these numeric fields "bigger" but
+ * only prolonged the pain by squeezing the new numbers into the same fields.
+ *
+ * In the tar v7 and ustar based tar headers the fields are:
+ *	Name	Size	Octal Range	Interpretation
+ *	mode	8	0-2097151 	bit flags
+ *	uid	8	0-2097151
+ *	gid	8	0-2097151
+ *	size	12	0-8589934591	up to 8 Giga-Byte files
+ *	mtime	12	0-8589934591 	1970/01/01 00:00:00 GMT-2242/03/16 12:56:31 GMT
+ *	
+ *	atime	12	0-8589934591 	1970/01/01 00:00:00 GMT-2242/03/16 12:56:31 GMT
+ *	ctime	12	0-8589934591 	1970/01/01 00:00:00 GMT-2242/03/16 12:56:31 GMT
+ *
+ * GNU's first and already obsolete approach was to put Mime base-64 numbers
+ * With these the first byte is '+' or '-' to signal it isn't octal ASCII.
+ *
+ * GNU's second approach is base-256 which is a big endian binary string of lengths other
+ * than the 1, 2, 4 or 8 bytes of the standard integer types.  In this approach the first
+ * byte is either 0x80 for a positive number or 0xFF for a negative number.
+ */
+
+static int64_t tar_strtoll (const uint8_t * str, size_t len)
+{
+    int64_t	result = 0;
+    bool negative = false;
+    uint8_t temp_buff[24];	/* long enough to hold all octal bytes for 64 bit numbers */
+
+    /* -----
+     * force a NUL in case the source doesn't have one; this is for
+     * strtoll() on ASCII Octal
+     */
+    if ( len >= sizeof temp_buff )
+        len = sizeof temp_buff - 1;
+    memmove (temp_buff, str, len);
+    temp_buff[ len ] = 0x00;
+
+    /* -----
+     * Most are going to be simple ASCII octal using '0'-'7' with NUL terminator
+     * leading 0 is not required but of course is accepted to match tar 
+     * header specifications
+     */
+    if (((temp_buff[0] >= '0')&&(temp_buff[0] <= '7'))||(temp_buff[0] == ' '))
+    {
+        /* use stdlib strtoll - longest expected goes a few bits into the upper longword */
+        result = strtoi64((char*)temp_buff,NULL,8);
+    }
+    /* -----
+     * "base-256" well that is "binary" big endian of some length
+     *
+     * For fields longer than eight bytes upper bytes will shift out of 
+     * significance into the bit bucket.
+     */
+    else if ((temp_buff[0] == 0x80)||(temp_buff[0] == 0xFF)) /* from GNU tar */
+    {
+        unsigned int ix;
+        negative = (bool)((temp_buff[0] == 0xFF) ? true : false);
+        result = temp_buff[0] & 0x7F; /* toss first flag bit */
+        for (ix = 1; ix < len; ++ix)
+        {
+            result <<= 8; /* result *= 256; */
+            result += temp_buff[ix];
+        }
+        if (negative)
+            result = -result;
+    }
+    /* -----
+     * "base-64" an already dumped idea from GNU tar
+     */
+    else if ((temp_buff[0] == '+')||(temp_buff[0] == '-')) /* from GNU tar */
+    {
+        int64_t temp;
+        negative = (bool)((temp_buff[0] == '-') ? true : false);
+        temp = decode_base64string(temp_buff+1,len-1);
+        /* potential overflow */
+        result = negative ? -temp : temp;
+    }
+
+    /* -----
+     * look for an empty field of all NUL
+     */
+    else if (temp_buff[0] == 0x00)
+    {
+        unsigned int ix;
+        for (ix = 1; ix < len; ++ix)
+        {
+            if (temp_buff[ix] != 0x00)
+                goto fail;
+        }
+    }
+    /* -----
+     * no idea what it is then
+     */
+    else
+    {
+    fail:
+        result = 0; /* as good a guess as any */
+        PLOGMSG (klogErr, (klogErr, "unknown integer storage type $(B0)$(B1)$(B2)$(B3)$(B4)$(B5)$(B6)$(B7)",
+                           "B0=%c,B1=%c,B2=%c,B3=%c,B4=%c,B5=%c,B6=%c,B7=%c",
+                           temp_buff[0],temp_buff[1],temp_buff[2],temp_buff[3],
+                           temp_buff[4],temp_buff[5],temp_buff[6],temp_buff[7]));
+    }
+    return result;
+}
+
+
+
+/* ======================================================================
+ * tar_header_type
+ * determine most probable tar header block type
+ */
+static tar_header_type	what_header_type(const tar_header* header)
+{
+    /* -----
+     * we'll assume its bad until we find a better guess
+     */
+    tar_header_type type = TAR_UNDEFINED;
+
+    /* -----
+     * look for a cpio header though we aren't expecting to support it quite yet
+     */
+    if (strncmp(header->cpio.magic, TAR_CPIO_MAGIC_CONST, sizeof(header->cpio.magic)) == 0)
+    {
+	type = TAR_CPIO;
+    }
+    /* -----
+     * look for extended headers of some type
+     *
+     * look for posix based extensions as hopefully most likely
+     */
+    else if (strcmp(header->posix.magic, POSIX_MAGIC_CONST) == 0)
+    {
+	/* -----
+	 * we have a post posix standard tar header but we aren't done yet
+	 *
+	 * First we look for star extensions to the header
+	 */
+	if (strcmp(header->star_94.xmagic, STAR_MAGIC_CONST) == 0)
+	{
+
+	    /* -----
+	     * we have either an old or new star archive
+	     */
+	    if (strcmp(header->star_94.magic, POSIX_MAGIC_CONST) == 0)
+	    {
+		/* -----
+		 * we have a new star type archive
+		 */
+		type = TAR_STAR_94;
+	    }
+	    else
+	    {
+		/* -----
+		 * we have a old star type archive
+		 */
+		type = TAR_STAR_85;
+	    }
+	}
+	/* -----
+	 * Next we look for SunOS5 extensions to the header
+	 */
+	else if (header->suntar.extnum &&
+		 header->suntar.extcount &&
+		 header->suntar.fullsize)
+	{
+	    type = TAR_SUN;
+	}
+	/* -----
+	 * Else it seems to be the generic Posix tar header
+	 */
+	else
+	{
+	    type = TAR_POSIX;
+	}
+    }
+    /* -----
+     * Not a proper magic for a POSIX ustar header so look for the improper magic of GNU's tar
+     */
+    else if (strcmp(header->star_94.magic, GNU_89_MAGIC_CONST) == 0)
+    {
+	/* we have an old GNU not really posix compliant archive type */
+	type = TAR_GNU_89;
+    }
+    /* -----
+     * If there is anything else there we don't know what to do with it
+     */
+    else if (header->posix.magic[0] != 0)
+    {
+	/* -----
+	 * Log an anomaly showing what we found in the magic field
+	 */
+	char temp_str	[9];
+	memset(temp_str,0,sizeof(temp_str));
+	strncpy(temp_str,header->posix.magic,8);
+	type = TAR_UNDEFINED;
+    }
+    /* -----
+     * not knowing what we have lets see if it is a block of all zeroes
+     * knowing we can ignore it
+     */
+    else
+    {
+	/* -----
+	 * If this were a legitimate V7 (well just old style)
+	 * tar header the first character would be non-NUL
+	 * and the link would be on eof the old types
+	 */
+	if ((header->raw[0]>= ' ')&&(header->raw[0] <= '~'))
+	{
+	    switch (header->tar.link)
+	    {
+	    case LINK_OLDNORMAL_FILE:
+	    case LINK_NORMAL_FILE:
+	    case LINK_HARD_LINK:
+	    case LINK_SYMBOLIC_LINK:
+	    case LINK_CHARACTER_SPECIAL:
+	    case LINK_BLOCK_SPECIAL:
+	    case LINK_DIRECTORY:
+	    case LINK_FIFO:
+	    case LINK_CONTIGUOUS_FILE:
+		/* GNU TAR will do this to us */
+	    case LINK_NEXT_LONG_LINK:
+	    case LINK_NEXT_LONG_NAME:
+	    case LINK_GNU1989_LONG_NAMES:
+		type = TAR_V7;
+		break;
+	    default:
+		break;
+	    }
+	}
+	else
+	{
+	    /* -----
+	     * look for anything not zero
+	     */
+	    unsigned int ix;
+
+	    for (ix = 0; ix < sizeof(tar_header); ++ix)
+	    {
+		if (header->raw[ix])
+		{
+		    /* -----
+		     * non-zero so quit looking
+		     */
+		    break;
+		}
+	    }
+	    /* -----
+	     * if we got to the end we know they are all zero so say so
+	     */
+	    if (ix == sizeof(tar_header))
+	    {
+		type = TAR_ZERO_BLOCK;
+	    }
+	}
+    }
+    return type;
+}
+
+
+/* ======================================================================
+ */
+
+static rc_t	sparse_data_make (sparse_data ** new_item, uint64_t offset, uint64_t size)
+{
+    sparse_data * p;
+
+    p = malloc (sizeof (sparse_data));
+    if (p != NULL)
+    {
+	p->offset = offset;
+	p->size = size;
+	p->next = NULL;
+	*new_item = p;
+	return 0;
+    }
+    else
+	return -1;
+}
+
+static rc_t	sparse_data_push(sparse_data ** q, uint64_t offset, uint64_t size)
+{
+    if (q == NULL)
+    {
+	return -1;
+    }
+    else if (*q == NULL)
+    {
+	return sparse_data_make (q, offset, size);
+    }
+    else 
+    {
+	return sparse_data_push (&((*q)->next), offset, size);
+    }
+}
+
+static rc_t	sparse_data_pop (sparse_data ** q, sparse_data **item)
+{
+    if ((q == NULL) || (item == NULL))
+    {
+	return -1;
+    }
+    else
+    {
+	*item = *q;
+	*q = (*item)->next;
+	(*item)->next = NULL;
+	return 0;
+    }
+}
+
+static rc_t	sparse_data_kill (sparse_data ** q)
+{
+    if (q == NULL)
+    {
+	return -1;
+    }
+    if (*q == NULL)
+    {
+	return 0;
+    }
+    if ((*q)->next != NULL)
+    {
+	return sparse_data_kill(&(*q)->next);
+    }
+    free (*q);
+    *q = NULL;
+    return 0;
+}
+
+/* ======================================================================
+ * local module-wide variables (reduction in parameter pushing)
+ *
+ * Module shared variables; kinda like C++ class elements
+ */
+
+static rc_t make_chunk_list(CCTar * self, uint64_t file_offset)
+{
+    uint64_t		count = self->num_chunks;
+    uint64_t		source_position = file_offset;
+    uint64_t		ix;
+    sparse_data * 	psd;
+    rc_t		rc;
+
+    if (self->chunks)
+	free (self->chunks); /* shouldn't happen */
+    self->chunks = malloc( (size_t)( count * sizeof(KTocChunk) ) );
+    if (self->chunks == NULL)
+	return -1;
+
+
+    for (ix = 0; ix < count; ++ix)
+    {
+	rc = sparse_data_pop (&self->sparse_q, &psd);
+	if (rc != 0)
+	    return rc;
+	self->chunks[ix].logical_position = psd->offset;
+	self->chunks[ix].source_position = source_position;
+	self->chunks[ix].size = psd->size;
+	source_position += psd->size;
+	sparse_data_kill(&psd);
+    }
+    return 0;
+}
+
+static void whack_chunk_list(CCTar * self)
+{
+    free (self->chunks);
+    self->chunks = NULL;
+    self->num_chunks = 0;
+}
+
+#if HANDLING_EXTENDED_HEADERS
+/* ======================================================================
+ * mini class for handling pax/posix/ustar 
+ * extended headers and global extended headers
+ *
+ * Many of the values are included to get past range limits imposed by the ustar format
+ * particular for string length and charcter set or shortish integral values.  <ekyword>
+ * and <value> below are UTF-8.
+ *
+ * values in the header are string values written as with a 'printf' using the form
+ *	printf("%d %s=%s\n",<length>,<keyword>,<value>)
+ *
+ * <length> is described ambiguously as 
+ *	"The <length> field shall be the decimal length of the extended header record in octets,
+ *	 including the trailing <newline>."
+ * So does that include the length of <length>? or not?
+ *
+ * The field <keyword> is allowed in a pax Extended Header include but are not limited to
+ *	atime		time_t but with fractional seconds maybe
+ *	charset		enumeration list
+ *	comment		human readable comments
+ *	gid		integer gid allowing numbers greater than ustar limit of 2097151 (07777777)
+ *	gname		over rides xhdr gid and ustar gname and gid
+ *	linkpath
+ *	mtime		time_t but with franctional seconds maybe
+ *	path
+ *	realtime.<ANY>
+ *	security.<ANY>
+ *	size
+ *	uid		integer uid allowing numbers greater than ustar limit of 2097151 (07777777)
+ *	uname
+ * Any other keywords desired can be included but might not be meaningful to many applications.
+ * Keyword can have pretty much any character in it except '='.
+ *
+ * <value> is a UTF-8 string that ends with the '\n'.
+ * 
+ *
+ * charset is limited to (omit the quotation marks)
+ *      <value>			  Formal Standard
+ * "ISO-IR 646 1990"		ISO/IEC 646:1990
+ * "ISO-IR 8859 1 1998"		ISO/IEC 8859-1:1998
+ * "ISO-IR 8859 2 1999"		ISO/IEC 8859-2:1999
+ * "ISO-IR 8859 3 1999"		ISO/IEC 8859-3:1999
+ * "ISO-IR 8859 4 1998"		ISO/IEC 8859-4:1998
+ * "ISO-IR 8859 5 1999"		ISO/IEC 8859-5:1999
+ * "ISO-IR 8859 6 1999"		ISO/IEC 8859-6:1999
+ * "ISO-IR 8859 7 1987"		ISO/IEC 8859-7:1987
+ * "ISO-IR 8859 8 1999"		ISO/IEC 8859-8:1999
+ * "ISO-IR 8859 9 1999"		ISO/IEC 8859-9:1999
+ * "ISO-IR 8859 10 1998"	ISO/IEC 8859-10:1998
+ * "ISO-IR 8859 13 1998"	ISO/IEC 8859-13:1998
+ * "ISO-IR 8859 14 1998"	ISO/IEC 8859-14:1998
+ * "ISO-IR 8859 15 1999"	ISO/IEC 8859-15:1999
+ * "ISO-IR 10646 2000"		ISO/IEC 10646:2000
+ * "ISO-IR 10646 2000 UTF-8"	ISO/IEC 10646, UTF-8 encoding
+ * "BINARY"			None.
+ */
+typedef enum pax_charset
+{
+    PAX_CS_NOT_SPECIFIED,
+    PAX_CS_ISO_IR_646_1990,
+    PAX_CS_ISO_IR_8859_1_1998,
+    PAX_CS_ISO_IR_8859_2_1999,
+    PAX_CS_ISO_IR_8859_3_1999,
+    PAX_CS_ISO_IR_8859_4_1998,
+    PAX_CS_ISO_IR_8859_5_1999,
+    PAX_CS_ISO_IR_8859_6_1999,
+    PAX_CS_PAX_CS_ISO_IR_8859_7_1997,
+    PAX_CS_ISO_IR_8859_8_1999,
+    PAX_CS_ISO_IR_8859_9_1999,
+    PAX_CS_ISO_IR_8859_10_1998,
+    PAX_CS_ISO_IR_8859_13_1998,
+    PAX_CS_ISO_IR_8859_14_1998,
+    PAX_CS_ISO_IR_8859_15_1998,
+    PAX_CS_ISO_IR_1064_2000,
+    PAX_CS_ISO_IR_1064_2000_UTF_8,
+    PAX_CS_BINARY
+} pax_charset;
+
+static const char * pax_charset_strings[] = 
+{
+    "Not Specified",
+    "ISO-IR 646 1990",
+    "ISO-IR 8859 1 1998",
+    "ISO-IR 8859 2 1999",
+    "ISO-IR 8859 3 1999",
+    "ISO-IR 8859 4 1998",
+    "ISO-IR 8859 5 1999",
+    "ISO-IR 8859 6 1999",
+    "ISO-IR 8859 7 1987",
+    "ISO-IR 8859 8 1999",
+    "ISO-IR 8859 9 1999",
+    "ISO-IR 8859 10 1998",
+    "ISO-IR 8859 13 1998",
+    "ISO-IR 8859 14 1998",
+    "ISO-IR 8859 15 1999",
+    "ISO-IR 10646 2000",
+    "ISO-IR 10646 2000 UTF-8",
+    "BINARY",
+    NULL
+};
+
+static pax_charset pax_xhdr_parse_charset_string(char*string)
+{
+    int ix;		/* index */
+    const char * ps;	/* pointer to string */
+
+    for (ps = pax_charset_strings[ix= 0]; ps; ps = pax_charset_strings[++ix])
+	if (strcmp(ps,string) == 0)
+	    return ix;
+    return PAX_CS_NOT_SPECIFIED;	/* matched none so set it to not specified */
+}
+
+typedef struct pax_xheader pax_xheader;
+struct pax_xheader
+{
+    char *	path;		/* supercedes .posix.name */
+    char *	linkpath;	/* supercedes .posix.linkname */
+    char *	uname;		/* user name supercedes .posix.uname uid and .posix.uid */
+    char *	gname;		/* group name supercedes .posix.gname gid and .posix.gid */
+    time_t	atime;		/* supercedes .posix.atime */
+    time_t	mtime;		/* supercedes .posix.mtime */
+    uid_t	uid;		/* supercedes .posix.uid */
+    gid_t	gid;		/* supercedes .posix.gname */
+    off_t	size;		/* supercedes .posix.size */
+    pax_charset	charset;	/* not supported by us? */
+};
+
+static pax_xheader *	pax_xhdr_create (void)
+{
+    pax_xheader * pxv = malloc (sizeof(pax_xheader));
+    memset (pxv,0,sizeof(pax_xheader));
+    return pxv;
+}
+
+static void	pax_xhdr_delete(pax_xheader * self)
+{
+    if (self->path)
+	free (self->path);
+    if (self->linkpath)
+	free (self->linkpath);
+    if (self->uname)
+	free (self->uname);
+    if (self->gname)
+	free (self->gname);
+    free (self);
+}
+
+static rc_t  pax_xhdr_set_general_string (char ** str, const char * val)
+{
+    size_t	len;	/* how much memory */
+    char      *	nl;	/* point to any new line in source */
+    rc_t	rc = 0;	/* return code; assume success */
+
+    if (*str)		/* if already set, free the old value */
+	free (*str);
+    nl = strchr (val, '\n');
+    if (nl)
+    {
+	len = nl - val + 1; /* +1 for NUL */
+    }
+    else
+    {
+	len = strlen (val) + 1;
+    }
+    *str = malloc (len);
+    if (*str)
+    {
+	strncpy (*str, val, len-1);
+	(*str)[len-1] = '\0'; /* if it was a '\n' terminated value this is needed not worth the check if needed */
+    }
+    else
+    {
+	rc = RC(rcFS/*?*/,rcAllocating,0/*?*/,rcNoObj/*?*/,rcNull); /* well its not 0 */
+    }
+    return rc;
+}
+
+/* ----------
+ * new_path points to a string that ends with either a '\n' or a NUL
+ */
+LIB_EXPORT rc_t CC pax_xhdr_set_path(pax_xheader * self, char * new_path)
+{
+    return pax_xhdr_set_general_string(&(self->path),new_path);
+}
+
+/* ----------
+ * new_path points to a string that ends with either a '\n' or a NUL
+ */
+LIB_EXPORT rc_t CC pax_xhdr_set_linkpath(pax_xheader * self, char * new_path)
+{
+    return pax_xhdr_set_general_string(&(self->linkpath),new_path);
+}
+
+/* ----------
+ * new_name points to a string that ends with either a '\n' or a NUL
+ */
+LIB_EXPORT rc_t CC pax_xhdr_set_uname(pax_xheader * self, char * new_name)
+{
+    return pax_xhdr_set_general_string(&(self->uname),new_name);
+}
+
+/* ----------
+ * new_name points to a string that ends with either a '\n' or a NUL
+ */
+LIB_EXPORT rc_t CC pax_xhdr_set_gname(pax_xheader * self, char * new_name)
+{
+    return pax_xhdr_set_general_string(&(self->gname),new_name);
+}
+
+LIB_EXPORT bool CC pax_xhdr_get_general_string (char**src, char**dst, size_t max)
+{
+    if (strlen(*src) > max-1)	/* fail if too big for target */
+    {
+	return false;
+    }
+    strcpy(*dst,*src);
+    return true;
+}
+
+LIB_EXPORT rc_t CC pax_xhdr_get_path(pax_xheader * self, char ** path, size_t max)
+{
+    return (pax_xhdr_get_general_string(&self->path,path,max))? 0 : ~0;
+}
+
+LIB_EXPORT rc_t CC pax_xhdr_get_linkpath(pax_xheader * self, char ** path, size_t max)
+{
+    return (pax_xhdr_get_general_string(&self->linkpath,path,max))? 0 : ~0;
+}
+
+LIB_EXPORT rc_t CC pax_xhdr_get_uname(pax_xheader * self, char ** name, size_t max)
+{
+    return (pax_xhdr_get_general_string(&self->uname,name,max))? 0 : ~0;
+}
+
+LIB_EXPORT rc_t CC pax_xhdr_get_gname(pax_xheader * self, char ** name, size_t max)
+{
+    return (pax_xhdr_get_general_string(&self->gname,name,max))? 0 : ~0;
+}
+
+/* ----------
+ * The mtime and atime <value> is defined as
+ *	The pax utility shall write an mtime record for each file in write
+ *	or copy modes if the file's modification time cannot be represented
+ *	exactly in the ustar header logical record described in ustar
+ *	Interchange Format. This can occur if the time is out of ustar range,
+ *	or if the file system of the underlying implementation supports
+ *	non-integer time granularities and the time is not an integer. All of
+ *	these time records shall be formatted as a decimal representation of
+ *	the time in seconds since the Epoch. If a period ( '.' ) decimal
+ *	point character is present, the digits to the right of the point shall
+ *	represent the units of a subsecond timing granularity, where the first
+ *	digit is tenths of a second and each subsequent digit is a tenth of
+ *	the previous digit. In read or copy mode, the pax utility shall
+ *	truncate the time of a file to the greatest value that is not greater
+ *	than the input header file time. In write or copy mode, the pax
+ *	utility shall output a time exactly if it can be represented exactly
+ *	as a decimal number, and otherwise shall generate only enough digits
+ *	so that the same time shall be recovered if the file is extracted on a
+ *	system whose underlying implementation supports the same time
+ *	granularity.
+ *
+ * So...
+ * Looks like for our purposes we ignore anything after a possible decimal
+ * point and just use the integer part of whatever is there and just not be
+ * to worried about it since we aren't creating any of this, just reading ie.
+ */
+static rc_t	pax_xhdr_set_general_time (const char * ts, time_t * tt)
+{
+    uint64_t temp = strtou64(ts,NULL,10); /* tosses decimal part for us */
+
+    if (temp)
+        *tt = (time_t)temp;
+    return temp ? 0 : ~0;
+}
+
+/* ======================================================================
+ * This is the data accumulated for each entry in a tar file.
+ */
+static struct	tar_entry_data
+{
+    /* -----
+     * We are not using linux (or other O/S specific) type here because the ranges
+     * for the system creating the archive might have larger types than the system
+     * we are running on.  We'll leave it to the outside caller of this program to
+     * "make it fit".
+     */
+
+    
+    entry_type	type;
+
+    char *	path;
+    char *	link;
+
+    uint64_t	size;
+    uint64_t	offset;
+
+    mode_t	mode;
+
+    char *	uname;
+    uid_t	uid;
+
+    char *	gname;
+    gid_t	gid;
+
+    time_t	mtime;
+    time_t	atime;
+    time_t	ctime;
+
+} tar_entry_data;
+#endif
+
+/* ======================================================================
+ *
+ * offset is the byte position within the tar file
+ * hard_limit is the byte position with in the tar file that is not mapped
+ *
+ * This is the ugliest function/method in the whole module.  The extensions
+ * to the tar header are not done in a consistent manner so convolutions
+ * have to be made to support all manner of extensions.
+ */
+static rc_t		process_one_entry		(CCTar * self)
+{
+    rc_t 		rc;
+    char		full_path	[4096];
+    char		full_link	[4096];
+    /* uint64_t		data_offset; */
+    uint64_t		data_position;
+    uint64_t		data_size;
+    int64_t		virtual_data_size;
+    tar_header_type	type;
+    tar_link		link;
+    time_t		mtime;
+    /* mode_t		mode; */
+    uint64_t		current_position;
+    union
+    {
+        const uint8_t *		b;
+        const tar_header *	h;
+    } 			current_header;
+    bool		done;
+    bool		gnu_sparse;
+/*     bool		found_zero_block; */
+
+    DEBUG_ENTRY();
+
+    rc = 0;
+    /* data_offset = */ data_position = virtual_data_size = data_size = 0;
+    type = TAR_UNDEFINED;
+    link = LINK_OLDNORMAL_FILE;
+    mtime = 0;
+    /* mode = 0; */
+    current_position = self->position;
+    done = false;
+    gnu_sparse = false;
+/*     found_zero_block = false; */
+
+    /* -----
+     * clear the full name and link name entries
+     */
+    memset(full_path,0,sizeof(full_path));
+    memset(full_link,0,sizeof(full_link));
+
+    /* -----
+     * set the header at the current TAR block.
+     * That is the map starts at position buffer_start and we are at 
+     * current_position into the file so we take the map as a pointer
+     * and add to it the difference between our current position and the map's
+     * initial position (first header is at map + 0 - 0)
+     */
+    current_header.b = self->buffer;
+
+    /* -----
+     * start processing
+     */
+    do
+    {
+        /* -----
+         * what we will do depends upon the type of this block
+         */
+        type = gnu_sparse ? TAR_SPARSE : what_header_type(current_header.h);
+        if (self->found_zero_block)
+	{
+	    if (self->found_second_zero_block == true)
+	    {
+		type = TAR_ZERO_BLOCK; /* skip anyway */
+	    }
+	    else if (type == TAR_ZERO_BLOCK)
+	    {
+		self->found_second_zero_block = true;
+	    }
+	    else
+	    {
+		rc = RC (rcExe, rcArc, rcParsing, rcFormat, rcUnexpected );
+
+		LOGERR (klogErr, rc,
+			"Found Extra Header after a block of zeros");
+
+                KOutMsg ("header '%lu' position '%lu' limit '%lu'\n", 
+                         self->position + (current_header.b - self->buffer)
+                         ,self->position, self-> position_limit);
+
+		return rc;
+	    }
+        }
+        switch (type)
+        {
+        case TAR_ZERO_BLOCK:
+            self->found_zero_block = true;
+            self->position_new += 512;
+            self->cursor = self->position_new;
+            done = true;
+            return 0;
+        case TAR_SPARSE:
+        {
+            /* -----
+             * If there is an extension header we'll have different work to do
+             */
+            int64_t  ix;
+            uint64_t of;
+            uint64_t sz;
+	    
+            for (ix = 0; ix< GNU_SPARSES_IN_EXTRA_HEADER; ++ix)
+            {
+                rc_t ret;
+                of = tar_strtoll((const uint8_t*)current_header.h->sparse.sparse[ix].offset,
+                                 TAR_SIZE_LEN);
+                sz = tar_strtoll((const uint8_t*)current_header.h->sparse.sparse[ix].num_bytes,
+                                 TAR_SIZE_LEN);
+                if (sz == 0)
+                {
+                    break;
+                }
+                ret = sparse_data_push (&self->sparse_q, of, sz);
+                if (ret)
+                {
+                    sparse_data_kill(&self->sparse_q);
+                    rc = RC (rcExe, rcArc, rcParsing, rcFormat, rcUnexpected );
+                    LOGERR (klogErr, rc, "Problems parsing sparse header");
+                    return rc;
+                }
+                ++self->num_chunks;
+            }
+        }
+        break;
+
+        default:
+            PLOGERR (klogErr,
+                     (klogErr, RC (rcFS, rcArc, rcParsing, rcFormat, rcUnknown),
+                      "unsupported header type $(type) $(string)",
+                      "type=%d,string=%s",
+                      type, get_type_string(type)));
+	    done = true;
+	    break;
+
+        case TAR_GNU_89:
+        case TAR_V7:
+ 	case TAR_POSIX:
+            /* -----
+             * almost anything we do will depend upon the size of the data for this block
+             *
+             * this will be wrong if we ever support cpio...
+             */
+            data_size = (tar_strtoll((uint8_t*)current_header.h->tar.size,TAR_SIZE_LEN));
+            mtime = (tar_strtoll((uint8_t*)current_header.h->tar.mtime,TAR_TIME_LEN));
+            /* mode = (tar_strtoll((uint8_t*)current_header.h->tar.mode,TAR_MODE_LEN)); */
+        }
+        /* -----
+         * Sometimes we are done just by identifying the header type.
+         * If so we break the loop here.
+         */
+        if (done)
+        {
+            /* -----
+             * point at the next header block
+             * Add the size of the header itself plus enough block sizes of data to cover
+             * any associated data.
+             */
+            size_t header_plus_data_block_size = (1+BLOCKS_FOR_BYTES(data_size))*TAR_BLOCK_SIZE;
+            current_position += header_plus_data_block_size;
+            current_header.b += header_plus_data_block_size;
+            break;
+        }
+
+        /* -----
+         * several extensions to USTAR/TAR format headers involve
+         * prepending another header type to give a name longer 
+         * than will fit in tthe header itself.  If we had one of
+         * those use that name.  But if the full path has not been
+         * set use the path from this header.
+         */
+        if (full_path[0] == 0) /* if full_path wasn't filled in by an 'L' long name */
+        {
+            /* -----
+             * if there is a prefix (POSIX style) use it
+             * copy the prefix and then concatenate the name field
+             */
+            if (current_header.h->posix.prefix[0])
+            {
+                /* -----
+                 * copy in the prefix, force a NUL just in case. then add a directory divider 
+                 */
+                strncpy(full_path,current_header.h->posix.prefix,TAR_PREFIX_LEN);
+                full_path[TAR_PREFIX_LEN] = 0x00;
+                strcat(full_path,"/");
+            }
+            strncat(full_path,current_header.h->tar.name,TAR_NAME_LEN);
+        }
+        link = current_header.h->tar.link;
+        switch (link)
+        {
+        case LINK_SPARSE:
+            /* -----
+             * If there is an extension header we'll have different work to do
+             */
+            if (current_header.h->gnu_89.isextended)
+            {
+                /* -----
+                 * If we have an extended header the following makes sure there is room
+                 */
+                if (current_position + (2 * sizeof(tar_header)) > self->position_limit)
+                {
+                    rc = RC (rcExe, rcArc, rcParsing, rcBuffer, rcTooShort);
+                    LOGERR (klogErr, rc, "Tar parsing buffer is too small to parse this file");
+                    return rc;
+                }
+                done = false;
+                gnu_sparse = true;	/* next block will be part of the header and not data */
+                data_position = current_position + 2 * sizeof(tar_header);
+            }
+            else
+            {
+                done = true;
+                gnu_sparse = false;
+                data_position = current_position + sizeof(tar_header);
+            }
+
+            done = (bool)! current_header.h->gnu_89.isextended;
+            {
+                int32_t ix;
+                rc_t	ret;
+
+                virtual_data_size = (tar_strtoll((uint8_t*)current_header.h->gnu_89.realsize,TAR_SIZE_LEN));
+
+                for (ix = 0; ix< GNU_SPARSES_IN_OLD_HEADER; ++ix)
+                {
+                    uint64_t sposition = tar_strtoll((const uint8_t*)current_header.h->gnu_89.sparse[ix].offset,
+                                                     TAR_SIZE_LEN);
+                    uint64_t ssize = tar_strtoll((const uint8_t*)current_header.h->gnu_89.sparse[ix].num_bytes,
+                                                 TAR_SIZE_LEN);
+                    if (ssize == 0)
+                    {
+                        break;
+                    }
+
+                    ret = sparse_data_push (&self->sparse_q, sposition, ssize);
+                    if (ret) 
+                    {
+                        sparse_data_kill(&self->sparse_q);
+                        LOGERR (klogErr, rc, "Error parsing in header sparse data");
+                        return rc;
+                    }
+                    ++self->num_chunks;
+                }
+            }
+            data_position = current_position + sizeof(tar_header);
+            break;
+
+        case LINK_OLDNORMAL_FILE:		/* deprecated normal file */
+            /* -----
+             * this should only happen with LINK_OLDNORMAL_FILE
+             *
+             * If the type is file but the last character in the path is "/"
+             * treat it as a directory instead
+             */
+            if (full_path[strlen(full_path)-2] == '\\')
+            {
+                link = LINK_DIRECTORY;
+            }
+            /* fall through */
+        case LINK_NORMAL_FILE:
+        case LINK_CONTIGUOUS_FILE:
+        case LINK_DIRECTORY:
+            data_position = current_position + sizeof(tar_header);
+            done = true;
+            break;
+
+        case LINK_HARD_LINK:
+        case LINK_SYMBOLIC_LINK:
+            if (full_link[0] == 0)
+            {
+                strncpy(full_link,current_header.h->tar.linkname,TAR_NAME_LEN);
+            }
+            done = true;
+            break;
+
+            /* ----------
+             * These types we ignore
+             */
+        case LINK_CHARACTER_SPECIAL:
+        case LINK_BLOCK_SPECIAL:
+        case LINK_FIFO:
+        case LINK_INODE_METADATA:
+            /* -----
+             * Nothing to be done
+             */
+            PLOGMSG (klogInfo,
+                     (klogInfo,
+                      "ignored link type ($(type)) $(typestring) at $(position)",
+                      "type=$%X,typestring=%s,position=%lld",
+                      (unsigned)(current_header.h->tar.link),
+                      get_link_string(current_header.h->tar.link),
+                      (uint64_t)(current_position)+(uint64_t)(OFFSET_OF(tar_v7_header,link)))); 
+            data_size = 0;
+            done = true;
+            break;
+
+	case LINK_PAX_GLOBAL_XHDR:
+	case LINK_GNU_DUMPDIR: /* we are just gonna ignore this and not treat it like LINK_DIRECTORY */
+	case LINK_SOLARIS_ACL_FILE:
+	case LINK_VOLUME_NAME:
+	case LINK_MULTI_VOLUME:
+            done = true;
+            break;
+
+	case LINK_SOLARIS_ACL:
+	case LINK_PAX_XHDR:	/* posix extended */
+	    break;
+
+        case LINK_NEXT_LONG_LINK:	/* long link name */
+            /* -----
+             * Long link name needs access now to its full set of data blocks, request a window shift 
+             * if it is not currently accessible
+             */
+            if (current_position + sizeof(tar_header) + data_size >  self->position_limit)
+            {
+                rc = RC (rcExe, rcArc, rcParsing, rcBuffer, rcTooShort);
+                LOGERR (klogErr, rc, "Tar parsing buffer is too small to parse this file");
+                return rc;
+            }
+
+            strncpy(full_link, (char*)(current_header.b + sizeof(tar_header)), data_size);
+            /* 	    (void)PLOGMSG ((klogDebug1,"Full linkpath is ($path)","path=%s",full_link)); */
+            break;
+        case LINK_NEXT_LONG_NAME:	/* long path name */
+            /* -----
+             * Long path name needs access now to its full set of data blocks, request a window shift 
+             * if it is not currently accessible
+             */
+            if (current_position + sizeof(tar_header) + data_size > self->position_limit)
+            {
+                rc = RC (rcExe, rcArc, rcParsing, rcBuffer, rcTooShort);
+                LOGERR (klogErr, rc, "Tar parsing buffer is too small to parse this file");
+                return rc;
+            }
+
+            strncpy(full_path, (char*)(current_header.b + sizeof(tar_header)), data_size);
+            break;
+        }
+	
+        /* -----
+         * move the current header position to past the data blocks
+         */
+        if (link == LINK_SPARSE)
+        {
+            current_position += sizeof (tar_header);
+            current_header.b += sizeof(tar_header);
+
+        }
+        else
+        {
+            current_position += sizeof (tar_header)+ ((data_size+TAR_BLOCK_SIZE-1)/TAR_BLOCK_SIZE)*TAR_BLOCK_SIZE;
+            current_header.b += sizeof(tar_header) + ((data_size+TAR_BLOCK_SIZE-1)/TAR_BLOCK_SIZE)*TAR_BLOCK_SIZE;
+        }
+        /* -----
+         * if that is past the currently available
+         * quit the parse of this entry asn ask for a window shift, yeah, we'll redo work
+         * but its far simpler code to just start over than track being in the middle
+         */
+        if ((!done) && (current_position >= self->position_limit))
+        {
+            rc = RC (rcExe, rcArc, rcParsing, rcBuffer, rcTooShort);
+            LOGERR (klogErr, rc, "Tar parsing buffer is too small to parse this file");
+            return rc;
+        }
+    } while (! done);
+
+    /* -----
+     * generate output for this entry
+     */
+    switch (type)
+    {
+    default:
+    case TAR_UNDEFINED:
+        rc = RC (rcFS, rcArc, rcParsing, rcData, rcUnsupported);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "Unhandled Header Block $(typeint)",
+                  "typeint=%u",type));
+        return rc;
+    case TAR_ZERO_BLOCK:
+        /* ignored */
+        break;
+
+    case TAR_CPIO:
+    case TAR_V7:
+    case TAR_POSIX:
+        /* case TAR_PAX: */
+    case TAR_SUN:
+    case TAR_STAR_85:
+    case TAR_STAR_94:
+    case TAR_GNU_89:
+        /*case TAR_GNU_01: */
+    case TAR_SPARSE:
+        /* -----
+         * TODO:
+         *	implement a header checksum routine call it here, and return -1 if the check sum fails
+         */
+        if (gnu_sparse)
+        {
+            link = LINK_SPARSE;	/* faking it for the next section */
+        }
+    
+        switch (link)
+        {
+        case LINK_OLDNORMAL_FILE:
+        case LINK_NORMAL_FILE:
+        case LINK_CONTIGUOUS_FILE:
+	{
+	    uint64_t start;
+	    CCArcFileNode * node;
+
+	    start = data_size ? data_position : 0;
+            /* 	    LOGMSG (klogDebug3, "KArcTOCCreateFile"); */
+            DEBUG_MSG (3, ("about to CreateFile '':$(linkint)\n",
+                      PLOG_2(PLOG_C(link),PLOG_X8(linkint)),
+                      link,link));
+            /* now create a new contained file node */
+            rc = CCArcFileNodeMake ( & node, start, data_size );
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to create contained file node" );
+            else
+            {
+		const KFile * sfile;
+		rc = KFileMakeSubRead (&sfile, self->file, start, data_size);
+		if (rc != 0)
+		    LOGERR ( klogInt, rc, "failed to create sub file reader" );
+		else
+		{
+                    void * save;
+                    rc_t orc;
+
+                    copycat_log_set (&node->dad.logs, &save);
+
+		    rc = ccat_md5 ( self->tree, sfile, mtime,
+                                    ccArcFile, &node->dad, full_path);
+
+                    copycat_log_set (save, NULL);
+
+		    orc = KFileRelease (sfile);
+                    if (orc)
+                    {
+                        PLOGERR (klogInt,
+                                 (klogInt, orc,
+                                  "Failure handling a file '$(F) inside of a tar file",
+                                  "F=%s", full_path));
+                        if (rc == 0)
+                            rc = orc;
+                    }
+
+                    self->cursor += node->dad.size;
+
+		}
+		/* if successful, "node" ( allocated locally above )
+		   will have been entered into "cont->sub" */
+	    }
+	    break;
+	}
+	case LINK_HARD_LINK:
+	{
+            DEBUG_MSG (3, ("KArcTOCCreateHardLink"));
+/* 	    rc_t CCTreeSymlink ( CCTree *self, const char *targ, const char *alias ); */
+ 	    rc = CCTreeLink (self->tree, mtime, full_link, full_path);
+	    break;
+	}
+	case LINK_SYMBOLIC_LINK:
+	{
+	    CCSymlinkNode * node;
+
+            DEBUG_MSG (3, ("KArcTOCCreateSoftLink"));
+
+            rc = CCSymlinkNodeMake (&node, full_link);
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to create sym link node" );
+	    if ( rc == 0 )
+	    {
+		rc = CCTreeInsert (self->tree, mtime, ccSymlink, node, full_path );
+		if ( rc != 0 )
+		    PLOGERR ( klogInt,  (klogInt, rc, "failed to enter node '$(name)'", "name=%s", full_path ));
+	    }
+	    break;
+	}
+/*
+static
+rc_t KSubChunkFileMake (KSubChunkFile ** pself,
+			const KFile * original,
+			uint64_t size,
+			uint32_t num_chunks)
+*/
+	case LINK_SPARSE:
+	{
+	    CChunkFileNode * node;
+
+            DEBUG_MSG (3, ("LINK_SPARSE KArcTOCCreateChunkedFile"));
+	    rc = CChunkFileNodeMake (&node, virtual_data_size);
+	    if (rc != 0)
+                LOGERR ( klogInt, rc, "failed to create contained chunked file node" );
+            else
+            {
+		const KFile * sfile;
+                void * save;
+
+                copycat_log_set (&node->dad.logs, &save);
+
+		make_chunk_list(self, data_position);
+		whack_chunk_list (self);
+		rc = KFileMakeChunkRead (&sfile, self->file, virtual_data_size, self->num_chunks, self->chunks);
+		if (rc != 0)
+		    LOGERR ( klogInt, rc, "failed to create sub chunk file reader" );
+		else
+		{
+		    rc = ccat_md5 ( self->tree, sfile, mtime,
+                                    ccChunkFile, &node->dad, full_path);
+		    KFileRelease (sfile);
+		}
+		/* if successful, "node" ( allocated locally above )
+		   will have been entered into "cont->sub" */
+
+                copycat_log_set (save, NULL);
+	    }
+	    break;
+	}
+	case LINK_CHARACTER_SPECIAL:
+	case LINK_BLOCK_SPECIAL:
+	case LINK_FIFO:
+	case LINK_VOLUME_NAME:
+	case LINK_SOLARIS_ACL:
+	case LINK_GNU_DUMPDIR:
+	case LINK_SUN_XHDR:
+	case LINK_INODE_METADATA:
+            DEBUG_MSG (1, ("Ignored Entry Type %: named %s",
+		      get_link_string(link),
+		      full_path));
+	    break;
+	case LINK_DIRECTORY:
+	{
+	    CCTree * node;
+            DEBUG_MSG (3, ("KArcTOCCreateDir"));
+
+	    rc = CCTreeMake (&node);
+	    if (rc != 0)
+		LOGERR (klogInt, rc, "failed to make directory node");
+	    else
+	    {
+		rc = CCTreeInsert (self->tree, mtime, ccDirectory, node, full_path);
+		if ( rc != 0 )
+		    PLOGERR ( klogInt,  (klogInt, rc, "failed to enter node '$(name)'", "name=%s", full_path ));
+	    }
+	    break;
+	}
+
+	default:
+	    PLOGMSG (klogInfo,
+		      (klogInfo,
+                       " type ($(type)) name ($(name() link ($(link)) size ($(size)) position ($(position))",
+                       "type=%s,name=%s,link=%s,size=%lld,position=%lld",
+                       get_type_string(type),
+                       full_path,
+                       full_link,
+                       data_size,
+                       data_position));
+	    break;
+	}
+	break;
+    }	
+    self->position_new = current_position;
+    return 0;
+}
+
+static
+rc_t CCTarFillBuffer (CCTar * self)
+{
+    rc_t rc;
+    size_t to_read;
+    size_t to_copy;
+    size_t read;
+    size_t copy_offset;
+
+    assert (self);
+    assert (self->position <= self->position_new);
+
+    /* bring in what we still need from what we already have */
+
+    /* if we are restarting beyond what is in the buffer */
+    if (self->position_new >= self->position_limit)
+    {
+        self->position_limit = self->position_new;
+        to_read = sizeof (self->buffer);
+        to_copy = 0;
+    }
+    /* else we are going to copy some then read some */
+    else
+    {
+        to_copy = self->position_limit - self->position_new;
+        to_read = sizeof (self->buffer) - to_copy;
+        copy_offset = self->position_new - self->position;
+        memmove (self->buffer, self->buffer + copy_offset, to_copy);
+    }
+
+
+    self->position = self->position_new;
+    self->buffer_length = to_copy;
+/*     memset (self->buffer + to_copy, 0, to_read); */
+    rc = KFileReadAll (self->file, self->position_limit, self->buffer + to_copy, to_read, &read);
+    if ((rc == 0) && (read != 0))
+    {
+        self->buffer_length += read;
+        self->position_limit += read;
+    }
+
+    return rc;
+}
+
+
+rc_t ccat_tar ( CCContainerNode *np, const KFile *sf, const char *name )
+{
+    rc_t rc;
+    CCTar * tar;
+    CCFileNode * fnode = np->entry; /* we want the base class FileNode only */
+
+    rc = CCTarMake (&tar, &np->sub, sf, name, fnode);
+    if (rc == 0)
+    {
+        do
+        {
+            rc = CCTarFillBuffer (tar);
+            if (rc != 0) /* this would be a hard 'system' error */
+                break;
+
+            if (tar->position == tar->position_limit) /* EOF */
+                break;
+
+            rc = process_one_entry (tar);
+            if (rc != 0)
+                break;
+
+        } while (!tar->found_second_zero_block);
+
+        /* tar file needs two 512 zero blocks at end
+         * it's a format error if not found */
+        if ( ! tar->found_second_zero_block )
+        {
+            rc_t lrc = RC (rcExe, rcArc, rcAccessing, rcFormat, rcTooShort);
+            fnode->err = true;
+            /* we won't fail copycat over this format error */
+            PLOGERR (klogErr,
+                     (klogErr, lrc,
+                      "tar file '$(F)' missing terminating zero blocks",
+                      "F=%s", name));
+        }
+
+        CCTarWhack (tar);
+    }
+    return rc;
+}
+
diff --git a/tools/copycat/cctree-dump.c b/tools/copycat/cctree-dump.c
new file mode 100644
index 0000000..8b752ab
--- /dev/null
+++ b/tools/copycat/cctree-dump.c
@@ -0,0 +1,1030 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cctree-priv.h"
+#include "copycat-priv.h"
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <kapp/main.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+
+
+/*--------------------------------------------------------------------------
+ * fowards
+ */
+static bool CCNameDump ( BSTNode *n, void *data );
+
+
+/*--------------------------------------------------------------------------
+ * CCDumper
+ */
+typedef struct CCDumper CCDumper;
+struct CCDumper
+{
+    rc_t ( * flush ) ( void*, const void*, size_t );
+    void *out;
+
+    const char *sep;
+
+#if ! STORE_ID_IN_NODE
+    uint32_t id;
+#endif
+    uint32_t indent;
+    rc_t rc;
+
+    size_t total;
+    char buffer [ 4096 ];
+};
+
+
+/* Init
+ *  sets up block
+ */
+static
+void CCDumperInit ( CCDumper *self,
+    rc_t ( * flush ) ( void *out, const void *buffer, size_t size ), void *out )
+{
+    self -> flush = flush;
+    self -> out = out;
+    self -> sep = "";
+#if ! STORE_ID_IN_NODE
+    self -> id = 0;
+#endif
+    self -> indent = 0;
+    self -> rc = 0;
+    self -> total = 0;
+}
+
+
+/* Flush
+ */
+static
+rc_t CCDumperFlush ( CCDumper *self )
+{
+    rc_t rc = ( * self -> flush ) ( self -> out, self -> buffer, self -> total );
+    if ( rc == 0 )
+        self -> total = 0;
+    return rc;
+}
+
+static
+rc_t CCDumperFlushLine ( CCDumper *self )
+{
+#if ! _DEBUGGING
+    if ( self -> total < sizeof self -> buffer / 2 )
+        return 0;
+#endif
+    return CCDumperFlush ( self );
+}
+
+
+/* Whack
+ *  flushes buffer if necessary
+ */
+static
+rc_t CCDumperWhack ( CCDumper *self )
+{
+    if ( self -> rc == 0 && self -> total != 0 )
+        return CCDumperFlush ( self );
+    return 0;
+}
+
+
+/* Write
+ *  writes data to buffer, flushes as necessary
+ */
+static
+rc_t CCDumperWrite ( CCDumper *self, const char *buffer, size_t size )
+{
+    rc_t rc;
+    size_t total, num_writ;
+
+    for ( rc = 0, total = 0; total < size; total += num_writ )
+    {
+        if ( self -> total == sizeof self -> buffer )
+        {
+            rc = CCDumperFlush ( self );
+            if ( rc != 0 )
+                break;
+        }
+
+        num_writ = size - total;
+        if ( num_writ > sizeof self -> buffer - self -> total )
+            num_writ = sizeof self -> buffer - self -> total;
+
+        memmove ( & self -> buffer [ self -> total ], & buffer [ total ], num_writ );
+        self -> total += num_writ;
+    }
+
+    return rc;
+}
+
+/* IndentLevel
+ *  increase or decrease indentation level
+ */
+static
+void CCDumperIncIndentLevel ( CCDumper *self )
+{
+    ++ self -> indent;
+}
+
+static
+void CCDumperDecIndentLevel ( CCDumper *self )
+{
+    if ( self -> indent > 0 )
+        -- self -> indent;
+}
+
+
+/* Indent
+ *  writes indentation spacing
+ */
+static
+rc_t CCDumperIndent ( CCDumper *self )
+{
+    rc_t rc;
+    uint32_t total, num_writ;
+
+    /* use 2 spaces per tab */
+    const char *tabs = "                                ";
+
+    for ( rc = 0, total = 0; total < self -> indent; total += num_writ )
+    {
+        num_writ = ( ( self -> indent - total - 1 ) & 0xF ) + 1;
+        rc = CCDumperWrite ( self, tabs, num_writ + num_writ );
+        if ( rc != 0 )
+            break;
+    }
+
+    return rc;
+}
+
+/* Sep
+ *  write separator string
+ */
+static
+rc_t CCDumperSep ( CCDumper *self )
+{
+    if ( self -> sep == NULL )
+        return 0;
+
+    return CCDumperWrite ( self, self -> sep, strlen ( self -> sep ) );
+}
+
+/* Print
+ *  \t - indent
+ *  \n - end of line
+ *  %d - integer
+ *  %u - unsigned
+ *  %ld - int64_t
+ *  %lu - uint64_t
+ *  %f - double
+ *  %s - null-terminated C-string
+ *  %p - separator
+ *  %S - String*
+ *  %I - unique id
+ *  %T - timestamp
+ *  %M - MD5 digest
+ *  %C - CRC32
+ *  %N - CCName*
+ *  %F - full CCName*
+ */
+static
+rc_t StringPrint ( const String *self, CCDumper *d )
+{
+/* BUFF_WARNING_TRACK has to be larger than all size differences
+ * between a special character and its encoding in XML
+ * 8 is big enough for all I know about when writing this with some
+ * safety margin
+ */
+#define BUFF_WARNING_TRACK 8
+#define BUFF_SIZE (256)
+#define REPLACE_COPY(C,S) \
+    case C: \
+        sp++;\
+        count--;\
+        memmove (bp,(S),sizeof(S)-1);\
+        bp += sizeof(S)-1;\
+        break
+
+    char buff [256 + 5];
+    char * bp;
+    const char * sp;
+    size_t count;
+    rc_t rc = 0;
+
+    /* start at the beginnings of the string and buffer */
+    sp = self->addr;
+    bp = buff;
+
+    count = self->size;
+
+    while (count > 0)
+    {
+        if ((bp - buff) > (BUFF_SIZE - BUFF_WARNING_TRACK))
+        {
+            rc = CCDumperWrite (d, buff, bp-buff);
+            if (rc)
+                return rc;
+            bp = buff;
+        }
+        switch (*sp)
+        {
+            /* just copy most characters */
+        default:
+            *bp++ = *sp++;
+            count --;
+            break;
+
+            REPLACE_COPY('<',"<");
+            REPLACE_COPY('>',">");
+            REPLACE_COPY('&',"&");
+            REPLACE_COPY('"',""");
+            REPLACE_COPY('\'',"'");
+
+        }
+    }
+    if (bp > buff)
+        rc = CCDumperWrite (d, buff, bp-buff);
+    return rc;
+
+}
+
+static
+rc_t CCNamePrint ( const CCName *self, CCDumper *d )
+{
+    return StringPrint ( & self -> name, d );
+}
+
+static
+rc_t CCNamePrintFull ( const CCName *self, CCDumper *d )
+{
+    if ( self -> dad != NULL )
+    {
+        rc_t rc = CCNamePrintFull ( self -> dad, d );
+        if ( rc == 0 )
+            rc = CCDumperWrite ( d, "/", 1 );
+        if ( rc != 0 )
+            return rc;
+    }
+    return CCNamePrint ( self, d );
+}
+
+static
+rc_t KTimePrint ( KTime_t self, CCDumper *d )
+{
+    int len;
+    char buffer [ 64 ];
+    time_t t = ( time_t ) self;
+
+    struct tm gmt;
+    gmtime_r ( & t, & gmt );
+    len = sprintf ( buffer, "%04d-%02d-%02dT%02d:%02d:%02dZ"
+                    , gmt . tm_year + 1900
+                    , gmt . tm_mon + 1
+                    , gmt . tm_mday
+                    , gmt . tm_hour
+                    , gmt . tm_min
+                    , gmt . tm_sec
+        );
+
+    return CCDumperWrite ( d, buffer, len );
+}
+
+static
+rc_t MD5Print ( const uint8_t *digest, CCDumper *d )
+{
+    int i, len;
+    char buff [ 36 ];
+
+    for ( i = len = 0; i < 16; ++ i )
+        len += sprintf ( & buff [ len ], "%02x", digest [ i ] );
+
+    return CCDumperWrite ( d, buff, 32 );
+}
+
+static
+rc_t CCDumperVPrint ( CCDumper *self, const char *fmt, va_list args )
+{
+    rc_t rc;
+    const char *start, *end;
+
+    for ( rc = 0, start = end = fmt; * end != 0; ++ end )
+    {
+        int len;
+        size_t size;
+        char buffer [ 256 ];
+
+        switch ( * end )
+        {
+        case '\t':
+            if ( end > start )
+                rc = CCDumperWrite ( self, start, end - start );
+            if ( rc == 0 )
+                rc = CCDumperIndent ( self );
+            start = end + 1;
+            break;
+        case '\n':
+            rc = CCDumperWrite ( self, start, end - start + 1 );
+            if ( rc == 0 )
+                rc = CCDumperFlushLine ( self );
+            start = end + 1;
+            break;
+        case '%':
+            if ( end > start )
+            {
+                rc = CCDumperWrite ( self, start, end - start );
+                if ( rc != 0 )
+                    break;
+            }
+            switch ( * ( ++ end ) )
+            {
+            case 'd':
+                len = sprintf ( buffer, "%d", va_arg ( args, int ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'u':
+                len = sprintf ( buffer, "%u", va_arg ( args, unsigned int ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'x':
+                len = sprintf ( buffer, "%x", va_arg ( args, unsigned int ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'f':
+                len = sprintf ( buffer, "%f", va_arg ( args, double ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'l':
+                switch ( * ( ++ end ) )
+                {
+                case 'd':
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%ld", va_arg ( args, int64_t ) );
+                    if ( rc == 0 )
+                        rc = CCDumperWrite ( self, buffer, size );
+                    break;
+                case 'u':
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%lu", va_arg ( args, uint64_t ) );
+                    if ( rc == 0 )
+                        rc = CCDumperWrite ( self, buffer, size );
+                    break;
+                }
+                break;
+            case 's':
+                len = sprintf ( buffer, "%s", va_arg ( args, const char* ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'p':
+                rc = CCDumperSep ( self );
+                break;
+            case 'S':
+                rc = StringPrint ( va_arg ( args, const String* ), self );
+                break;
+            case 'I':
+#if STORE_ID_IN_NODE
+                len = sprintf ( buffer, "%u", va_arg ( args, uint32_t ) );
+#else
+                len = sprintf ( buffer, "%u", ++ self -> id );
+#endif
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'T':
+                rc = KTimePrint ( va_arg ( args, KTime_t ), self );
+                break;
+            case 'M':
+                rc = MD5Print ( va_arg ( args, const uint8_t* ), self );
+                break;
+            case 'C':
+                len = sprintf ( buffer, "%08x", va_arg ( args, unsigned int ) );
+                rc = CCDumperWrite ( self, buffer, len );
+                break;
+            case 'N':
+                rc = CCNamePrint ( va_arg ( args, const CCName* ), self );
+                break;
+            case 'F':
+                rc = CCNamePrintFull ( va_arg ( args, const CCName* ), self );
+                break;
+            case '%':
+                rc = CCDumperWrite ( self, "%", 1 );
+                break;
+            }
+            start = end + 1;
+            break;
+        }
+
+        if ( rc != 0 )
+            break;
+    }
+
+    if ( rc == 0 && end > start )
+    {
+        rc = CCDumperWrite ( self, start, end - start );
+        if ( rc == 0 )
+            rc = CCDumperFlushLine ( self );
+    }
+
+    return rc;
+}
+
+static
+rc_t CCDumperPrint ( CCDumper *self, const char *fmt, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start ( args, fmt );
+    rc = CCDumperVPrint ( self, fmt, args );
+    va_end ( args );
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCFileNode
+ *  a node with a size and modification timestamp
+ *  has a file type determined by magic/etc.
+ *  has an md5 checksum
+ *
+ *  how would an access mode be used? access mode of a file is
+ *  whatever the filesystem says it is, and within an archive,
+ *  it's read-only based upon access mode of outer file...
+ */
+
+/* Dump
+ */
+static
+rc_t CCFileNodeDumpCmn ( const CCFileNode *self, const char *tag,
+    const CCName *name, const String *cached, CCDumper *d )
+{
+    rc_t rc = CCDumperPrint ( d,
+                              "\t<%s "             /* node class */
+                              "id=\"%I\" "         /* unique id  */
+                              "path=\"%F\" "       /* full path  */
+                              "name=\"%N\" "       /* node name  */
+                              , tag
+#if STORE_ID_IN_NODE
+                              , self -> id
+#endif
+                              , name
+                              , name );
+    if ( rc == 0 && cached != NULL )
+        rc = CCDumperPrint ( d,
+                             "cached=\"%S\" "     /* cached name */
+                             , cached );
+    if ( rc == 0 )
+        rc = CCDumperPrint ( d, 
+                             "size=\"%lu\" "
+                             , self->size );
+    if (( rc == 0 ) && ( self->size > 0 ) && ( self->lines != 0 ))
+        rc = CCDumperPrint ( d, 
+                             "lines=\"%lu\" "
+                             , self->lines );
+    if ( rc == 0 )
+        rc = CCDumperPrint ( d,
+                             "mtime=\"%T\" "      /* mod time   */
+                             , name -> mtime );
+    if ( rc == 0 )
+    {
+        if ( self -> rc )
+            rc = CCDumperPrint ( d,
+                                 "filetype=\"Errored%s\" "   /* file type  */
+                                 , self -> ftype );
+        else
+            rc = CCDumperPrint ( d,
+                                 "filetype=\"%s\" "   /* file type  */
+                                 , self -> ftype );
+    }
+    if ( rc == 0 && ! no_md5 )
+        rc = CCDumperPrint ( d,
+                             "md5=\"%M\" "         /* md5 digest */
+                             , self -> _md5 );
+
+    return rc;
+}
+
+typedef struct dump_log_data
+{
+    rc_t rc;
+    CCDumper * d;
+} dump_log_data;
+
+static
+rc_t CCNodeDumpLog ( void * n, CCDumper * d )
+{
+    String s;
+
+    StringInitCString (&s, n); /* cast after add gets past node */
+
+    return CCDumperPrint ( d, "\t<CCError>%S</CCError>\n", &s );
+}
+
+
+static
+rc_t CCFileNodeDump ( const CCFileNode *cself, const char *tag,
+    const CCName *name, const String *cached, CCDumper *d, bool close )
+{
+    rc_t rc;
+    bool trunc;
+    CCFileNode * self = (CCFileNode *)cself;
+
+    trunc = ((self->expected != SIZE_UNKNOWN) && 
+             (self->expected != self->size));
+
+    rc = CCFileNodeDumpCmn ( self, tag, name, cached, d );
+    if ( rc == 0 && self -> crc32 != 0 )
+        rc = CCDumperPrint ( d, " crc32=\"%C\"", self -> crc32 );
+    if ( rc == 0 )
+    {
+        if (self->err || trunc || (self->logs.head != NULL))
+        {
+            do
+            {
+                rc = CCDumperPrint (d, ">\n");
+                if (rc) break;
+
+                if (trunc)
+                {
+                    rc = CCDumperPrint (d, "\t<CCErrSize expected=\"%lu\">"
+                                        "Error in file size expected %lu but got %lu"
+                                        "</CCErrSize>\n", self->expected,
+                                        self->expected, self->size);
+                    if (rc) break;
+                }
+                
+                if (self->err)
+                {
+                    if (self->logs.head != NULL)
+                    {
+                        SLNode* log;
+
+                        while ((log = SLListPopHead (&self->logs)) != NULL)
+                        {
+                            CCNodeDumpLog (log+1, d);
+                            free (log);
+                        }
+                    }
+                    else
+                        rc = CCDumperPrint (d, "\t<CCErr>Not specified</CCErr>\n");
+                }
+                if (rc) break;
+
+                if (close)
+                    rc = CCDumperPrint (d, "\t</%s>\n", tag);
+            } while (0);
+        }
+        else if (close)
+            rc = CCDumperPrint (d, "/>\n");
+        else
+            rc = CCDumperPrint (d, ">\n");                
+    }
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * CCArcFileNode
+ *  a file with an offset into another file
+ */
+
+/* Dump
+ */
+static
+rc_t CCArcFileNodeDump ( const CCArcFileNode *cself, const char *tag,
+    const CCName *name, const String *cached, CCDumper *d, bool close )
+{
+    rc_t rc;
+    bool trunc;
+    CCArcFileNode * self = (CCArcFileNode *)cself;
+
+    trunc = ((self->dad.expected != SIZE_UNKNOWN) && 
+             (self->dad.expected != self->dad.size));
+
+    rc = CCFileNodeDumpCmn ( & self -> dad, tag, name, cached, d );
+    if ( rc == 0 )
+    {
+        if (!xml_dir)
+            rc = CCDumperPrint ( d, " offset=\"%lu\"", self->offset);
+        if (rc == 0) do
+        {
+            if (self->dad.err || trunc || (self->dad.logs.head != NULL))
+            {
+                rc = CCDumperPrint (d, ">\n");
+                if (rc) break;
+
+                if (trunc)
+                {
+                    rc = CCDumperPrint (d, "\t<CCErrSize expected=\"%lu\">"
+                                        "Error in file size expected %lu but got %lu"
+                                        "</CCErrSize>\n", self->dad.expected,
+                                        self->dad.expected, self->dad.size);
+                    if (rc) break;
+                }
+
+                if (self->dad.err)
+                {
+                    if (self->dad.logs.head != NULL)
+                    {
+                        SLNode* log;
+
+                        while ((log = SLListPopHead (&self->dad.logs)) != NULL)
+                        {
+                            CCNodeDumpLog (log+1, d);
+                            free (log);
+                        }
+                    }
+                    else
+                        rc = CCDumperPrint (d, "\t<CCErr>Not specified</CCErr>\n");
+                }
+                if (rc) break;
+
+                if (close)
+                    rc = CCDumperPrint (d, "\t</%s>\n", tag);
+            }
+            else if (close)
+                rc = CCDumperPrint (d, "/>\n");
+            else
+                rc = CCDumperPrint (d, ">\n");                
+        } while (0);
+    }
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CChunkFileNode
+ *  a file with one or more chunks (offset/size) into another file
+ */
+
+/* Dump
+ */
+static
+bool CChunkDump ( SLNode *n, void *data )
+{
+    CCDumper *d = data;
+    const CChunk *self = ( const CChunk* ) n;
+
+    d -> rc = CCDumperPrint ( d, "\t<chunk offset=\"%lu\" size=\"%lu\"/>\n",
+                              self -> offset, self -> size );
+
+    return ( d -> rc != 0 ) ? true : false;
+}
+
+static
+rc_t CChunkFileNodeDump ( const CChunkFileNode *self, const char *tag,
+    const CCName *name, const String *cached, CCDumper *d, bool close )
+{
+    rc_t rc = CCFileNodeDumpCmn ( & self -> dad, tag, name, cached, d );
+    if ( rc == 0 )
+        rc = CCDumperPrint ( d, " size=\"%lu\">\n", self -> dad . size );
+    CCDumperIncIndentLevel ( d );
+    if ( rc == 0 )
+    {
+        if ( SLListDoUntil ( & self -> chunks, CChunkDump, d ) )
+            rc = d -> rc;
+    }
+    CCDumperDecIndentLevel ( d );
+    if ( rc == 0 && close )
+        rc = CCDumperPrint ( d, "\t</%s>\n", tag );
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCCachedFileNode
+ *  a file wrapper with cached file name
+ */
+
+/* Dump
+ */
+#if 0 /* why is this commented out... */
+static
+rc_t CCCachedFileNodeDump ( const CCCachedFileNode *self,
+    const CCName *name, CCDumper *d )
+{
+    rc_t rc;
+    const void *entry = self -> entry;
+
+    switch ( self -> type )
+    {
+    case ccFile:
+    case ccContFile:
+        rc = CCFileNodeDump ( entry, "file", name, & self -> cached, d, true );
+        break;
+    case ccArcFile:
+        rc = CCArcFileNodeDump ( entry, "file", name, & self -> cached, d, true );
+        break;
+    case ccChunkFile:
+        rc = CChunkFileNodeDump ( entry, "file", name, & self -> cached, d, true );
+        break;
+    default:
+        rc = RC ( rcExe, rcTree, rcWriting, rcNode, rcUnrecognized );
+    }
+
+    return rc;
+}
+#endif
+
+/*--------------------------------------------------------------------------
+ * CCContainerNode
+ *  a container/archive file entry
+ *  a file with sub-entries
+ */
+
+/* Dump
+ */
+static
+rc_t CCContainerNodeDump ( const CCContainerNode *self, const char *node,
+    const CCName *name, CCDumper *d )
+{
+    rc_t rc;
+    const void *entry = self -> entry;
+
+    switch ( self -> type )
+    {
+    case ccFile:
+    case ccContFile:
+        rc = CCFileNodeDump ( entry, node, name, NULL, d, false );
+        break;
+    case ccArcFile:
+        rc = CCArcFileNodeDump ( entry, node, name, NULL, d, false );
+        break;
+    case ccChunkFile:
+        rc = CChunkFileNodeDump ( entry, node, name, NULL, d, false );
+        break;
+    default:
+        rc = RC ( rcExe, rcTree, rcWriting, rcNode, rcUnrecognized );
+    }
+
+    if ( rc != 0 )
+        return rc;
+
+    CCDumperIncIndentLevel ( d );
+
+    if ( BSTreeDoUntil ( & self -> sub, false, CCNameDump, d ) )
+        rc = d -> rc;
+
+    CCDumperDecIndentLevel ( d );
+
+    if ( rc == 0 )
+        rc = CCDumperPrint ( d, "\t</%s>\n", node );
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCSymlinkNode
+ *  a directory entry with a substitution path
+ */
+
+/* Dump
+ */
+static
+rc_t CCSymlinkNodeDump ( const CCSymlinkNode *self, const CCName *name, CCDumper *d, bool replaced )
+{
+    const char * tag = replaced ? "replaced-symlink" : "symlink";
+    return CCDumperPrint ( d, "\t<%s name=\"%N\" mtime=\"%T\">%S</%s>\n",
+                           tag, name, name -> mtime, & self -> path, tag );
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCTreeNode
+ *  doesn't actually exist, but is treated separately from tree
+ */
+
+/* Dump
+ */
+static
+rc_t CCTreeNodeDump ( const CCTree *self, const CCName *name, CCDumper *d, bool replaced )
+{
+    const char * tag = replaced ? "replaced-directory" : "directory";
+    rc_t rc = CCDumperPrint ( d, "\t<%s name=\"%N\" mtime=\"%T\">\n",
+                              tag, name, name -> mtime );
+
+    CCDumperIncIndentLevel ( d );
+
+    if ( rc == 0 && BSTreeDoUntil ( self, false, CCNameDump, d ) )
+        rc = d -> rc;
+
+    CCDumperDecIndentLevel ( d );
+
+    if ( rc == 0 )
+        rc = CCDumperPrint ( d, "\t</%s>\n", tag );
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCName
+ *  the main entrypoint
+ */
+
+/* Dump
+ */
+static
+bool CCNameDump ( BSTNode *n, void *data )
+{
+    CCDumper * d = data;
+    const CCName * self = (const CCName*)n;
+    void * entry = self->entry;
+    uint32_t type = self->type;
+    bool replaced = false;
+
+    if (type == ccReplaced)
+    {
+        const CCReplacedNode * node = entry;
+        type = node->type;
+        entry = node->entry;
+        replaced = true;
+    }
+
+    if (type == ccCached)
+    {
+        const CCCachedFileNode * node = entry;
+        type = node->type;
+        entry = node->entry;
+    }
+
+    if ( type == ccHardlink )
+    {
+        do
+        {
+            /* if for some reason the link is broken */
+            if ( self -> entry == NULL )
+                return false;
+            self = self -> entry;
+        }
+        while ( self -> type == ccHardlink );
+
+        entry = self -> entry;
+        type = self -> type;
+        self = ( const CCName* ) n;
+    }
+
+    switch ( type )
+    {
+    case ccFile:
+    case ccContFile:
+        d -> rc = CCFileNodeDump ( entry, replaced ? "replaced-file" : "file", self, NULL, d, true );
+        break;
+    case ccArcFile:
+        d -> rc = CCArcFileNodeDump ( entry, replaced ? "replaced-file" : "file", self, NULL, d, true );
+        break;
+    case ccChunkFile:
+        d -> rc = CChunkFileNodeDump ( entry, replaced ? "replaced-file" : "file", self, NULL, d, true );
+        break;
+    case ccContainer:
+        d -> rc = CCContainerNodeDump ( entry, replaced ? "replaced-container" : "container", self, d );
+        break;
+    case ccArchive:
+        d -> rc = CCContainerNodeDump ( entry, replaced ? "replaced-archive" : "archive", self, d );
+        break;
+    case ccSymlink:
+        d -> rc = CCSymlinkNodeDump ( entry, self, d, replaced );
+        break;
+    case ccDirectory:
+        d -> rc = CCTreeNodeDump ( entry, self, d, replaced );
+        break;
+    case ccCached:
+#if 0
+        d -> rc = CCCachedFileNodeDump ( entry, self, d );
+#else
+        d -> rc = RC ( rcExe, rcTree, rcWriting, rcNode, rcCorrupt );
+#endif
+        break;
+    default:
+        d -> rc = RC ( rcExe, rcTree, rcWriting, rcNode, rcUnrecognized );
+    }
+
+    return ( d -> rc != 0 ) ? true : false;
+}
+
+    
+
+/*--------------------------------------------------------------------------
+ * CCTree
+ *  a binary search tree with CCNodes
+ */
+
+/* Dump
+ *  dump tree using provided callback function
+ *
+ *  "write" [ IN, NULL OKAY ] and "out" [ IN, OPAQUE ] - callback function
+ *  for writing. if "write" is NULL, print to stdout.
+ */
+static
+rc_t CCTreeDumpInt2 ( const CCTree *self, CCDumper *d, SLList * logs )
+{
+    rc_t rc = 0;
+
+    /* print logs attached to this node */
+    if (logs->head != NULL)
+    {
+        SLNode * log;
+        while ((log = SLListPopHead (logs)) != NULL)
+        {
+            CCNodeDumpLog (log+1, d);
+            free (log);
+        }
+    }
+
+    CCDumperIncIndentLevel ( d );
+
+    if ( BSTreeDoUntil ( self, false, CCNameDump, d ) )
+        rc = d -> rc;
+
+    CCDumperDecIndentLevel ( d );
+    
+    return rc;
+}
+
+/* print root node and call out to print what that contains */
+static
+rc_t CCTreeDumpInt ( const CCTree *self, CCDumper *d, SLList * logs )
+{
+    ver_t v = KAppVersion ();
+    rc_t rc = CCDumperPrint ( d, "<ROOT version=\"%u.%u.%u\">\n",
+                              VersionGetMajor(v),
+                              VersionGetMinor(v),
+                              VersionGetRelease(v));
+    if ( rc == 0 )
+    {
+        rc = CCTreeDumpInt2 ( self, d, logs );
+
+        if ( rc == 0 )
+            CCDumperPrint ( d, "</ROOT>\n" );
+    }
+    return rc;
+}
+
+static
+rc_t write_FILE ( void *out, const void *buffer, size_t bytes )
+{
+    size_t num_writ;
+
+    if ( bytes == 0 )
+        return 0;
+
+    num_writ = fwrite ( buffer, 1, bytes, out );
+    if ( num_writ == bytes )
+        return 0;
+    if ( num_writ != 0 )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    if ( buffer == NULL )
+        return RC ( rcExe, rcFile, rcWriting, rcParam, rcNull );
+
+    return RC ( rcExe, rcFile, rcWriting, rcNoObj, rcUnknown );
+}
+
+rc_t CCTreeDump ( const CCTree *self,
+    rc_t ( * write ) ( void *out, const void *buffer, size_t bytes ),
+                  void *out, SLList * logs )
+{
+    rc_t rc, rc2;
+    CCDumper d;
+
+    if ( write == NULL )
+    {
+        write = write_FILE;
+        out = stdout;
+    }
+
+    CCDumperInit ( & d, write, out );
+
+    rc = CCTreeDumpInt ( self, & d, logs );
+
+    rc2 = CCDumperWhack ( & d );
+
+    return rc ? rc : rc2;
+}
diff --git a/tools/copycat/cctree-priv.h b/tools/copycat/cctree-priv.h
new file mode 100644
index 0000000..897576e
--- /dev/null
+++ b/tools/copycat/cctree-priv.h
@@ -0,0 +1,351 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cctree_priv_
+#define _h_cctree_priv_
+
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#define STORE_ID_IN_NODE 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef struct BSTree CCTree;
+typedef struct CCName CCName;
+
+
+/*--------------------------------------------------------------------------
+ * CCType
+ *  enum describing entry type
+ */
+enum CCType
+{
+    ccFile,
+    ccContFile,
+    ccArcFile,
+    ccChunkFile,
+    ccContainer,
+    ccArchive,
+    ccSymlink,
+    ccHardlink,
+    ccDirectory,
+    ccCached,
+    ccReplaced  /* a name attached to a replaced file (name twice in tar for example) */
+};
+
+
+/*--------------------------------------------------------------------------
+ * CCFileNode
+ *  a node with a size and modification timestamp
+ *  has a file type determined by magic/etc.
+ *  has an md5 checksum
+ *
+ *  how would an access mode be used? access mode of a file is
+ *  whatever the filesystem says it is, and within an archive,
+ *  it's read-only based upon access mode of outer file...
+ */
+typedef struct CCFileNode CCFileNode;
+struct CCFileNode
+{
+    uint64_t expected;  /* size expected (0 if not known) */
+/* #define SIZE_UNKNOWN    (UINT64_MAX) */
+#define SIZE_UNKNOWN    ((uint64_t)(int64_t)-1)
+    uint64_t size;      /* actual size */
+    uint64_t lines;     /* linecount if ASCII */
+    uint32_t crc32;
+#if STORE_ID_IN_NODE
+    uint32_t id;
+#endif
+    rc_t rc;
+    bool err;          /* errors found while reading/parsing */
+    char ftype [ 252 ];
+    uint8_t _md5 [ 32 ];
+    SLList logs;
+};
+
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CCFileNodeMake ( CCFileNode **n, uint64_t expected );
+
+/* Whack
+ */
+#define CCFileNodeWhack( self ) \
+    free ( self )
+
+
+/*--------------------------------------------------------------------------
+ * CCArcFileNode
+ *  a file with an offset into another file
+ */
+typedef struct CCArcFileNode CCArcFileNode;
+struct CCArcFileNode
+{
+    CCFileNode dad;
+    uint64_t offset;
+};
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CCArcFileNodeMake ( CCArcFileNode **n,
+    uint64_t offset, uint64_t size );
+
+/* Whack
+ */
+#define CCArcFileNodeWhack( self ) \
+    free ( self )
+
+
+/*--------------------------------------------------------------------------
+ * CChunkFileNode
+ *  a file with one or more chunks (offset/size) into another file
+ */
+typedef struct CChunk CChunk;
+struct CChunk
+{
+    SLNode n;
+    uint64_t offset;
+    uint64_t size;
+};
+
+typedef struct CChunkFileNode CChunkFileNode;
+struct CChunkFileNode
+{
+    CCFileNode dad;
+    SLList chunks;
+};
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CChunkFileNodeMake ( CChunkFileNode **n, uint64_t size );
+
+/* AddChunk
+ *  adds a chunk to the chunk file
+ */
+rc_t CChunkFileNodeAddChunk ( CChunkFileNode *self,
+    uint64_t offset, uint64_t size );
+
+/* Whack
+ */
+void CChunkFileNodeWhack ( CChunkFileNode *self );
+
+
+/*--------------------------------------------------------------------------
+ * CCCachedFileNode
+ *  a file wrapper with cached file name
+ */
+typedef struct CCCachedFileNode CCCachedFileNode;
+struct CCCachedFileNode
+{
+    /* cached name */
+    String cached;
+
+    /* container CCFileNode */
+    void *entry;
+    uint32_t type;
+};
+
+/* Make
+ *  creates a cached file wrapper
+ */
+rc_t CCCachedFileNodeMake ( CCCachedFileNode **n,
+    const char *path, enum CCType type, const void *entry );
+
+/* Whack
+ */
+void CCCachedFileNodeWhack ( CCCachedFileNode *self );
+
+
+/*--------------------------------------------------------------------------
+ * CCSymlinkNode
+ *  a directory entry with a substitution path
+ */
+typedef struct CCSymlinkNode CCSymlinkNode;
+struct CCSymlinkNode
+{
+    String path;
+};
+
+/* Make
+ *  creates a symlink object
+ */
+rc_t CCSymlinkNodeMake ( CCSymlinkNode **n, const char *path );
+
+/* Whack
+ */
+#define CCSymlinkNodeWhack( self ) \
+    free ( self )
+
+
+/*--------------------------------------------------------------------------
+ * CCTree
+ *  a binary search tree with CCNodes
+ */
+
+/* Make
+ *  make a root tree or sub-directory
+ */
+rc_t CCTreeMake ( CCTree **t );
+
+/* Insert
+ *  create an entry into a tree
+ *  parses path into required sub-directories
+ *
+ *  "mtime" [ IN ] - modification timestamp
+ *
+ *  "type" [ IN ] and "entry" [ IN ] - typed entry
+ *
+ *  "path" [ IN ] - vararg-style path of the entry, relative
+ *  to "self".
+ *
+ * NB - '..' is not allowed in this implementation.
+ */
+rc_t CCTreeInsert ( CCTree *self, KTime_t mtime,
+    enum CCType type, const void *entry, const char *path, ... );
+
+/* Find
+ *  find a named node
+ *  returns NULL if not found
+ */
+const CCName *CCTreeFind ( const CCTree *self, const char *path, ... );
+
+
+/* Link
+ *  create a symlink to existing node
+ */
+rc_t CCTreeLink ( CCTree *self, KTime_t mtime,
+    const char *targ, const char *alias );
+
+
+/* Whack
+ */
+void CCTreeWhack ( CCTree *self );
+
+/* Dump
+ *  dump tree using provided callback function
+ *
+ *  "write" [ IN, NULL OKAY ] and "out" [ IN, OPAQUE ] - callback function
+ *  for writing. if "write" is NULL, print to stdout.
+ */
+rc_t CCTreeDump ( const CCTree *self,
+                  rc_t ( * write ) ( void *out, const void *buffer, size_t bytes ),
+                  void *out, SLList * logs );
+
+
+/*--------------------------------------------------------------------------
+ * CCContainerNode
+ *  its entry is a container file, i.e. an archive or else processed
+ *  with some sort of envelope such as compression. its sub nodes
+ *  are the contents and have their own names.
+ */
+typedef struct CCContainerNode CCContainerNode;
+struct CCContainerNode
+{
+    /* contents */
+    CCTree sub;
+
+    /* container CCFileNode */
+    void *entry;
+    uint32_t type;
+};
+
+/* Make
+ *  creates an archive object
+ */
+rc_t CCContainerNodeMake ( CCContainerNode **n,
+    enum CCType type, const void *entry );
+
+/* Whack
+ */
+void CCContainerNodeWhack ( CCContainerNode *self );
+
+
+/*--------------------------------------------------------------------------
+ * CCReplacedNode
+ * its entry is any other type.  when a name shows up twice in a tar file
+ * the first version is replaced.
+ */
+typedef struct CCReplacedNode CCReplacedNode;
+struct CCReplacedNode
+{
+    /* container CCFileNode */
+    void *entry;
+    uint32_t type;
+};
+
+/* Make
+ */
+rc_t CCReplacedNodeMake ( CCReplacedNode **n,
+    enum CCType type, const void *entry );
+
+/* Whack
+ */
+void CCReplacedNodeWhack ( CCReplacedNode *self );
+
+
+
+/*--------------------------------------------------------------------------
+ * CCName
+ *  an entry name in a CCTree
+ */
+struct CCName
+{
+    BSTNode n;
+    CCName *dad;
+    KTime_t mtime;
+    void *entry;
+    String name;
+    uint32_t type;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_cctree_priv_ */
diff --git a/tools/copycat/cctree.c b/tools/copycat/cctree.c
new file mode 100644
index 0000000..f3bdaa2
--- /dev/null
+++ b/tools/copycat/cctree.c
@@ -0,0 +1,754 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "copycat-priv.h"
+#include "cctree-priv.h"
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * CCFileNode
+ *  a node with a size and modification timestamp
+ *  has a file type determined by magic/etc.
+ *  has an md5 checksum
+ *
+ *  how would an access mode be used? access mode of a file is
+ *  whatever the filesystem says it is, and within an archive,
+ *  it's read-only based upon access mode of outer file...
+ */
+
+static
+void CCFileNodeInit ( CCFileNode *self, uint64_t expected )
+{
+#if STORE_ID_IN_NODE
+    static uint32_t file_id;
+    self -> id = ++ file_id;
+#endif
+    self -> expected = expected;
+    self -> size = 0;   /* we learn this with the counter file */
+    self -> lines = 0;   /* we learn this with the counter file */
+    self -> crc32 = 0;
+    self -> rc = 0;
+    self -> err = false;
+    memset ( self -> ftype, 0, sizeof self -> ftype );
+    memset ( self -> _md5, 0, sizeof self -> _md5 );
+    SLListInit ( &self->logs );
+}
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CCFileNodeMake ( CCFileNode **np, uint64_t expected )
+{
+    CCFileNode *n = malloc ( sizeof * n );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    CCFileNodeInit ( n, expected );
+
+    * np = n;
+    return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * CCArcFileNode
+ *  a file with an offset into another file
+ */
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CCArcFileNodeMake ( CCArcFileNode **np,
+    uint64_t offset, uint64_t expected )
+{
+    CCArcFileNode *n = malloc ( sizeof * n );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    CCFileNodeInit ( & n -> dad, expected );
+    n -> offset = offset;
+
+    * np = n;
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CChunkFileNode
+ *  a file with one or more chunks (offset/size) into another file
+ */
+
+/* Whack
+ */
+static
+void CChunkWhack ( SLNode *n, void *ignore )
+{
+    free ( n );
+}
+
+void CChunkFileNodeWhack ( CChunkFileNode *self )
+{
+    if ( self != NULL )
+    {
+        SLListWhack ( & self -> chunks, CChunkWhack, NULL );
+        CCFileNodeWhack ( & self -> dad );
+    }
+}
+
+/* Make
+ *  creates an object with provided properties
+ *  md5 digest needs to be filled in afterward
+ */
+rc_t CChunkFileNodeMake ( CChunkFileNode **np, uint64_t expected )
+{
+    CChunkFileNode *n = malloc ( sizeof * n );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    CCFileNodeInit ( & n -> dad, expected );
+    SLListInit ( & n -> chunks );
+
+    * np = n;
+    return 0;
+}
+
+/* AddChunk
+ *  adds a chunk to the chunk file
+ */
+rc_t CChunkFileNodeAddChunk ( CChunkFileNode *self,
+    uint64_t offset, uint64_t size )
+{
+    CChunk *c = malloc ( sizeof * c );
+    if ( c == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    c -> offset = offset;
+    c -> size = size;
+
+    SLListPushTail ( & self -> chunks, & c -> n );
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCCachedFileNode
+ *  a file wrapper with cached file name
+ */
+
+/* Make
+ *  creates a cached file wrapper
+ */
+rc_t CCCachedFileNodeMake ( CCCachedFileNode **np, const char *path,
+    enum CCType type, const void *entry )
+{
+    CCCachedFileNode *n = malloc ( sizeof * n + strlen ( path ) + 1 );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    strcpy ( ( char* ) ( n + 1 ), path );
+    StringInitCString ( & n -> cached, ( char* ) ( n + 1 ) );
+    n -> entry = ( void* ) entry;
+    n -> type = type;
+
+    * np = n;
+    return 0;
+}
+
+/* Whack
+ */
+void CCCachedFileNodeWhack ( CCCachedFileNode *self )
+{
+    if ( self != NULL )
+    {
+        switch ( self -> type )
+        {
+        case ccFile:
+            CCFileNodeWhack ( self -> entry );
+            break;
+        case ccArcFile:
+            CCArcFileNodeWhack ( self -> entry );
+            break;
+        case ccChunkFile:
+            CChunkFileNodeWhack ( self -> entry );
+            break;
+        }
+        free ( self );
+    }
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCSymlinkNode
+ *  a directory entry with a substitution path
+ */
+
+/* Make
+ *  creates a symlink object
+ */
+rc_t CCSymlinkNodeMake ( CCSymlinkNode **np, const char *path )
+{
+    CCSymlinkNode *n = malloc ( sizeof * n + strlen ( path ) + 1 );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    strcpy ( ( char* ) ( n + 1 ), path );
+    StringInitCString ( & n -> path, ( char* ) ( n + 1 ) );
+
+    * np = n;
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCName
+ *  an entry name in a CCTree
+ */
+
+
+/* Whack
+ */
+static
+void CCNameWhack ( BSTNode *n, void *ignore )
+{
+    CCName *self = ( CCName* ) n;
+    if ( self -> entry != NULL ) switch ( self -> type )
+    {
+    case ccFile:
+    case ccContFile:
+        CCFileNodeWhack ( self -> entry );
+        break;
+    case ccArcFile:
+        CCArcFileNodeWhack ( self -> entry );
+        break;
+    case ccChunkFile:
+        CChunkFileNodeWhack ( self -> entry );
+        break;
+    case ccContainer:
+        CCContainerNodeWhack ( self -> entry );
+        break;
+    case ccSymlink:
+        CCSymlinkNodeWhack ( self -> entry );
+        break;
+    case ccHardlink:
+        break;
+    case ccDirectory:
+        CCTreeWhack ( self -> entry );
+        break;
+    }
+
+    free ( self );
+}
+
+
+/* Make
+ *  make a node name
+ */
+static
+rc_t CCNameMake ( CCName **np, KTime_t mtime, CCName *dad,
+    const String *name, enum CCType type, const void *entry )
+{
+    CCName *n = malloc ( sizeof * n + name -> size + 1 );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    string_copy ( ( char* ) ( n + 1 ), name -> size + 1, name -> addr, name -> size );
+    n -> mtime = mtime;
+    n -> dad = dad;
+    n -> entry = ( void* ) entry;
+    StringInit ( & n -> name, ( char* ) ( n + 1 ), name -> size, name -> len );
+    n -> type = ( uint32_t ) type;
+
+    * np = n;
+    return 0;
+}
+
+/* Cmp
+ * Sort
+ */
+static
+int64_t CCNameCmp ( const void *item, const BSTNode *n )
+{
+    const String *a = item;
+    const CCName *b = ( const CCName* ) n;
+    return StringCompare ( a, & b -> name );
+}
+
+static
+int64_t CCNameSort ( const BSTNode *item, const BSTNode *n )
+{
+    const CCName *a = ( const CCName* ) item;
+    const CCName *b = ( const CCName* ) n;
+    int64_t cmp = StringCompare ( & a -> name, & b -> name );
+    if (cmp != 0)
+        return cmp;
+#if 0
+    if (b->type == ccReplaced)
+        return 1;
+#endif
+    return 1; /* make new item always greater than existing n */
+}
+
+
+/*--------------------------------------------------------------------------
+ * CCContainerNode
+ *  an archive file entry
+ *  a file with a sub-directory
+ */
+
+
+/* Whack
+ */
+void CCContainerNodeWhack ( CCContainerNode *self )
+{
+    if ( self != NULL )
+    {
+        BSTreeWhack ( & self -> sub, CCNameWhack, NULL );
+        switch ( self -> type )
+        {
+        case ccFile:
+            CCFileNodeWhack ( self -> entry );
+            break;
+        case ccArcFile:
+            CCArcFileNodeWhack ( self -> entry );
+            break;
+        case ccChunkFile:
+            CChunkFileNodeWhack ( self -> entry );
+            break;
+        }
+        free ( self );
+    }
+}
+
+/* Make
+ *  creates an archive object
+ */
+rc_t CCContainerNodeMake ( CCContainerNode **np,
+    enum CCType type, const void *entry )
+{
+    CCContainerNode *n = malloc ( sizeof * n );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    BSTreeInit ( & n -> sub );
+    n -> entry = ( void* ) entry;
+    n -> type = ( uint32_t ) type;
+
+    * np = n;
+    return 0;
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * CCReplacedNode
+ *  an archive file entry
+ *  a file with a sub-directory
+ */
+
+
+/* Whack
+ */
+void CCReplacedNodeWhack ( CCReplacedNode *self )
+{
+    if ( self != NULL )
+    {
+        switch ( self -> type )
+        {
+        case ccFile:
+            CCFileNodeWhack ( self -> entry );
+            break;
+        case ccArcFile:
+            CCArcFileNodeWhack ( self -> entry );
+            break;
+        case ccChunkFile:
+            CChunkFileNodeWhack ( self -> entry );
+            break;
+        }
+        free ( self );
+    }
+}
+
+/* Make
+ *  creates an archive object
+ */
+rc_t CCReplacedNodeMake ( CCReplacedNode **np,
+    enum CCType type, const void *entry )
+{
+    CCReplacedNode *n = malloc ( sizeof * n );
+    if ( n == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    n -> entry = ( void* ) entry;
+    n -> type = ( uint32_t ) type;
+
+    * np = n;
+    return 0;
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * CCTree
+ *  a binary search tree with CCNodes
+ */
+
+
+/* Whack
+ */
+void CCTreeWhack ( CCTree *self )
+{
+    if ( self != NULL )
+    {
+        BSTreeWhack ( self, CCNameWhack, NULL );
+        free ( self );
+    }
+}
+
+
+/* Make
+ *  make a root tree or sub-directory
+ */
+rc_t CCTreeMake ( CCTree **tp )
+{
+    CCTree *t = malloc ( sizeof * t );
+    if ( t == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcMemory, rcExhausted );
+
+    BSTreeInit ( t );
+
+    * tp = t;
+    return 0;
+}
+
+
+/* Insert
+ *  create an entry into a tree
+ *  parses path into required sub-directories
+ */
+static
+void CCTreePatchSubdirPath ( BSTNode *n, void *data )
+{
+    CCName *sym = ( CCName* ) n;
+    sym -> dad = data;
+}
+
+static
+rc_t CCTreeVInsert ( CCTree *self, KTime_t mtime,
+    enum CCType type, const void *entry, const char *fmt, va_list args )
+{
+    rc_t rc;
+    size_t sz;
+    String name;
+    CCName *dad, *sym;
+
+    char path [ 4096 ];
+    int i, j, len = vsnprintf ( path, sizeof path, fmt, args );
+    if ( len < 0 || len >= sizeof path )
+        return RC ( rcExe, rcTree, rcInserting, rcPath, rcExcessive );
+
+    while ( len > 0 && path [ len - 1 ] == '/' )
+        path [ -- len ] = 0;
+
+    /* create/navigate path */
+    for ( dad = NULL, i = 0; i < len; i = j + 1 )
+    {
+        for ( j = i; j < len; ++ j )
+        {
+            if ( path [ j ] == '/' )
+            {
+                /* detect non-empty names */
+                sz = j - i;
+                if ( sz != 0 )
+                {
+                    CCTree *dir;
+
+                    /* ignore '.' */
+                    if ( sz == 1 && path [ i ] == '.' )
+                        break;
+
+                    /* '..' is not allowed */
+                    if ( sz == 2 && path [ i ] == '.' && path [ i + 1 ] == '.' )
+                        return RC ( rcExe, rcTree, rcInserting, rcPath, rcIncorrect );
+
+                    /* get name of directory */
+                    StringInit ( & name, & path [ i ], sz, string_len ( & path [ i ], sz ) );
+
+                    /* find existing */
+                    sym = ( CCName* ) BSTreeFind ( self, & name, CCNameCmp );
+
+                    /* handle a hard link */
+                    while ( sym != NULL && sym -> type == ccHardlink )
+                        sym = sym -> entry;
+
+                    /* should be a directory-ish thing */
+                    if ( sym != NULL )
+                    {
+                        switch ( sym -> type )
+                        {
+                        case ccContainer:
+                        case ccArchive:
+                            self = & ( ( CCContainerNode* ) sym -> entry ) -> sub;
+                            break;
+                        case ccDirectory:
+                            self = sym -> entry;
+                            break;
+                        default:
+                            return RC ( rcExe, rcTree, rcInserting, rcPath, rcIncorrect );
+                        }
+
+                        dad = sym;
+                        break;
+                    }
+
+                    /* create new sub-directory */
+                    rc = CCTreeMake ( & dir );
+                    if ( rc != 0 )
+                        return rc;
+
+                    /* create directory name */
+                    rc = CCNameMake ( & sym, mtime, dad, & name, ccDirectory, dir );
+                    if ( rc != 0 )
+                    {
+                        CCTreeWhack ( dir );
+                        return rc;
+                    }
+
+                    /* enter it into current directory
+                       don't need to validate it's unique */
+                    BSTreeInsert ( self, & sym -> n, CCNameSort );
+                    dad = sym;
+                    self = dir;
+                }
+                break;
+            }
+        }
+
+        if ( j == len )
+            break;
+    }
+
+    /* create entry name */
+    if ( i >= len )
+        return RC ( rcExe, rcTree, rcInserting, rcPath, rcIncorrect );
+    sz = len - i;
+    StringInit ( & name, & path [ i ], sz, string_len ( & path [ i ], sz ) );
+
+
+    /* create named entry */
+    rc = CCNameMake ( & sym, mtime, dad, & name, type, entry );
+    if ( rc == 0 )
+    {
+#if 0
+        /* enter it into tree */
+        rc = BSTreeInsertUnique ( self, & sym -> n, NULL, CCNameSort );
+        if ( rc != 0 )
+            free ( sym );
+#else
+        BSTNode * n = BSTreeFind (self, &sym->name, CCNameCmp);
+        if (n != NULL)
+        {
+            CCReplacedNode * rn;
+            CCName * nn = (CCName*)n;
+
+            switch (nn->type)
+            {
+            case ccDirectory:
+                if (sym->type == ccDirectory)
+                {
+                    /* better would be to capture directory traits then goto */
+                    nn->mtime = sym->mtime;
+
+                    /* we aren't yet handling a directory duplicate other than tar files */
+
+                    if (((CCContainerNode*)sym->entry)->sub.root != NULL)
+                        rc = RC (rcExe, rcTree, rcInserting, rcNode, rcIncorrect);
+
+                    goto skip_insert;
+                }
+            default:
+                rc = CCReplacedNodeMake (&rn, nn->type, nn->entry);
+                if (rc == 0)
+                {
+                    nn->type = ccReplaced;
+                    nn->entry = rn;
+                }
+            }
+        }
+        if (rc == 0)
+            rc = BSTreeInsert (self, &sym->n, CCNameSort);
+    skip_insert:
+        if (rc)
+            free (sym);
+#endif
+        /* if this guy has children, become dad */
+        else if ( entry != NULL ) switch ( type )
+        {
+        case ccContainer:
+        case ccArchive:
+            BSTreeForEach ( & ( ( CCContainerNode* ) entry ) -> sub, false, CCTreePatchSubdirPath, sym );
+            break;
+        case ccDirectory:
+            BSTreeForEach ( entry, false, CCTreePatchSubdirPath, sym );
+            break;
+	default: /* shushing warnings */
+	    break;
+        }
+    }
+
+    return rc;
+}
+
+rc_t CCTreeInsert ( CCTree *self, KTime_t mtime,
+    enum CCType type, const void *entry, const char *path, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start ( args, path );
+    rc = CCTreeVInsert ( self, mtime, type, entry, path, args );
+    va_end ( args );
+
+    return rc;
+}
+
+/* Find
+ *  find a named node
+ *  returns NULL if not found
+ */
+static
+const CCName *CCTreeVFind ( const CCTree *self, const char *fmt, va_list args )
+{
+    size_t sz;
+    String name;
+    CCName /* *dad, */ *sym;
+
+    char path [ 4096 ];
+    int i, j, len = vsnprintf ( path, sizeof path, fmt, args );
+    if ( len < 0 || len >= sizeof path )
+        return NULL;
+
+    while ( len > 0 && path [ len - 1 ] == '/' )
+        path [ -- len ] = 0;
+
+    /* create/navigate path */
+    for ( /* dad = NULL, */ i = 0; i < len; i = j + 1 )
+    {
+        for ( j = i; j < len; ++ j )
+        {
+            if ( path [ j ] == '/' )
+            {
+                /* detect non-empty names */
+                sz = j - i;
+                if ( sz != 0 )
+                {
+                    /* ignore '.' */
+                    if ( sz == 1 && path [ i ] == '.' )
+                        break;
+
+                    /* '..' is not allowed */
+                    if ( sz == 2 && path [ i ] == '.' && path [ i + 1 ] == '.' )
+                        return NULL;
+
+                    /* get name of directory */
+                    StringInit ( & name, & path [ i ], sz, string_len ( & path [ i ], sz ) );
+
+                    /* find existing */
+                    sym = ( CCName* ) BSTreeFind ( self, & name, CCNameCmp );
+
+                    /* handle hard-link */
+                    while ( sym != NULL && sym -> type == ccHardlink )
+                        sym = sym -> entry;
+
+                    /* handle not found */
+                    if ( sym == NULL )
+                        return NULL;
+
+                    /* loop or return the found object */
+                    switch ( sym -> type )
+                    {
+                    case ccContainer:
+                    case ccArchive:
+                        self = & ( ( CCContainerNode* ) sym -> entry ) -> sub;
+                        break;
+                    case ccDirectory:
+                        self = sym -> entry;
+                        break;
+                    default:
+                        return NULL;
+                    }
+                    
+                    /* dad = sym; */
+                    break;
+                }
+            }
+        }
+
+        if ( j == len )
+            break;
+    }
+
+    if ( i >= len )
+        return NULL;
+
+    sz = len - i;
+    StringInit ( & name, & path [ i ], sz, string_len ( & path [ i ], sz ) );
+    return ( const CCName* ) BSTreeFind ( self, & name, CCNameCmp );
+}
+
+
+const CCName *CCTreeFind ( const CCTree *self, const char *path, ... )
+{
+    va_list args;
+    const CCName *name;
+
+    va_start ( args, path );
+    name = CCTreeVFind ( self, path, args );
+    va_end ( args );
+
+    return name;
+}
+
+
+/* Link
+ *  create a symlink to existing node
+ */
+rc_t CCTreeLink ( CCTree *self, KTime_t mtime,
+    const char *targ, const char *alias )
+{
+    const CCName *orig = CCTreeFind ( self, targ );
+    if ( orig == NULL )
+        return RC ( rcExe, rcTree, rcInserting, rcPath, rcNotFound );
+
+    return CCTreeInsert ( self, mtime, ccHardlink, orig, alias );
+}
diff --git a/tools/copycat/copycat-priv.h b/tools/copycat/copycat-priv.h
new file mode 100644
index 0000000..77efc7c
--- /dev/null
+++ b/tools/copycat/copycat-priv.h
@@ -0,0 +1,229 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#ifndef _h_copycat_priv_
+#define _h_copycat_priv_
+
+#ifndef _h_cctree_priv_
+#include "cctree-priv.h"
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+    struct KFile;
+struct KTocChunk;
+
+/*--------------------------------------------------------------------------
+ * globals
+ */
+extern uint32_t in_block;
+extern uint32_t out_block;
+extern int verbose;             /* program-wide access to verbosity level */
+extern CCTree *ctree;           /* tree of nodes as seen while cataloging the input */
+extern CCTree *etree;           /* tree of nodes as extracted */
+extern KDirectory *cdir;        /* here we 'cache' XML files that get tweaked and passed to laoders */
+extern KDirectory *edir;        /* here we extract non container/archive files for use if we can't
+                                 * load without unpacking */ 
+extern bool extract_dir;        /* if set we are adding directories on extraction to match our 
+                                 * normal output XML */
+extern bool xml_dir;            /* if set we will output XML to match our extracted files not
+                                 * the original packed submission */
+extern bool no_bzip2;           /* if true, don't try to decompress bzipped files */
+extern bool no_md5;             /* if true, don't calculate md5 sums */
+extern char epath [8192];       /* we build a path down through containes/archives */
+extern char * ehere;            /* the pointer to the next character in epath during descent */
+extern KCreateMode cm;          
+extern struct KFile *fnull;     /* global reference to "/dev/null" or bit bucket KFile */
+
+extern void * dump_out;
+extern char ncbi_encryption_extension[];
+extern char wga_encryption_extension[];
+
+rc_t CC copycat_log_writer (void * self, const char * buffer, size_t buffer_size,
+                            size_t * num_writ);
+rc_t CC copycat_log_lib_writer  (void * self, const char * buffer, size_t buffer_size,
+                                 size_t * num_writ);
+
+/*--------------------------------------------------------------------------
+ * copycat
+ */
+typedef struct ccat_pb
+{
+    CCTree * tree;
+    const struct KFile * sf;
+    KTime_t mtime;
+    enum CCType ntype;
+    CCFileNode * node;
+    const char * name;
+} ccat_pb;
+
+/* ccat
+ *  non-buffered recursive entrypoint
+ *
+ *  "tree" [ IN ] - immediate parent of node
+ *
+ *  "src" [ IN ] - file to be analyzed
+ *
+ *  "mtime" [ IN ] - modification time of "src"
+ *
+ *  "ntype" [ IN ] and "node" [ IN ] - file node and type
+ *
+ *  "name" [ IN ] - file leaf name
+ *
+ * use this call if buffering of the parent provides buffering of the child
+ * such as archive formats with no compression such as kar or tar
+ */
+rc_t ccat_md5 ( CCTree *tree, const struct KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name );
+
+/* ccat_buf
+ *  buffered recursive entrypoint
+ *
+ *  "bsize" [ IN ] - requested buffer size
+ *
+ * use this call when recursing on a type where buffering of the parent won't 
+ * help such as decompression or decryption
+ */
+rc_t ccat_buf ( CCTree *tree, const struct KFile *sf, KTime_t mtime,
+                enum CCType ntype, CCFileNode *node, const char *name);
+
+
+/* -----
+ * copycat
+ *
+ * The copycat function is the actual copy and catalog function.
+ * All before this function is called is building toward this.
+ */
+struct VPath;
+rc_t copycat (CCTree *tree, KTime_t mtime, KDirectory * cwd,
+              const struct VPath * src, const struct KFile *sf, 
+              const struct VPath * dst, struct KFile *df,
+              const char *spath, const char *name, 
+              uint64_t expected_size, bool do_decrypt, bool do_encrypt);
+
+/*--------------------------------------------------------------------------
+ * CCFileFormat
+ */
+typedef struct CCFileFormat CCFileFormat;
+extern CCFileFormat *filefmt;
+
+typedef enum CCFileFormatClass
+{
+    ccffcError = -1,
+    ccffcUnknown,
+    ccffcCompressed,
+    ccffcArchive,
+    ccffcCached,
+    ccffcEncoded
+} CCFileFormatClass;
+
+typedef enum CCFileFormatTypeCompressed
+{
+    ccfftcError = -1,
+    ccfftcUnknown,
+    ccfftcGzip,
+    ccfftcBzip2,
+    ccfftcZip
+} CCFileFormatTypeCompressed;
+
+typedef enum CCFileFormatTypeArchive
+{
+    ccfftaError = -1,
+    ccfftaUnknown,
+    ccfftaTar,
+    ccfftaSra,
+    ccfftaHD5
+} CCFileFormatTypeArchive;
+
+typedef enum CCFileFormatTypeXML
+{
+    ccfftxError = -1,
+    ccfftxUnknown,
+    ccfftxXML
+} CCFileFormatTypeXML;
+
+typedef enum CCFileFormatTypeEncoded
+{
+    ccffteError = -1,
+    ccffteUnknown,
+    ccffteNCBIErrored,
+    ccffteNCBI,
+    ccffteWGAErrored,
+    ccffteWGA
+} CCFileFormatTypeEncoded;
+
+rc_t CCFileFormatMake ( CCFileFormat ** p );
+rc_t CCFileFormatRelease ( const CCFileFormat *self );
+rc_t CCFileFormatGetType ( const CCFileFormat *self, struct KFile const *file,
+    const char *path, char *buffer, size_t buffsize,
+    uint32_t *type, uint32_t *class );
+
+
+rc_t ccat_tar ( CCContainerNode *np, const struct KFile *sf, const char *name );
+rc_t ccat_sra ( CCContainerNode *np, const struct KFile *sf, const char *name );
+
+typedef struct KSubChunkFile KSubChunkFile;
+
+rc_t KFileMakeChunkRead (const struct KFile ** pself,
+			 const struct KFile * original,
+			 uint64_t size,
+			 uint32_t num_chunks,
+			 struct KTocChunk * chunks);
+
+bool CCFileFormatIsNCBIEncrypted ( void  * buffer );
+bool CCFileFormatIsWGAEncrypted ( void  * buffer );
+/*
+ * Use as DEBUG_STATUS(("format",arg,...))
+ */
+#define DEBUG_STATUS(msg)  DBGMSG(DBG_APP,1,msg)
+
+
+rc_t copycat_log_set (void * new, void ** prev);
+
+
+struct KFile;
+rc_t CC CCFileMakeRead (const struct KFile ** self,
+                        const struct KFile * original, rc_t * prc);
+rc_t CC CCFileMakeUpdate (struct KFile ** self,
+                          struct KFile * original, rc_t * prc);
+rc_t CC CCFileMakeWrite (struct KFile ** self,
+                         struct KFile * original, rc_t * prc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_copycat_priv_ */
diff --git a/tools/copycat/copycat.c b/tools/copycat/copycat.c
new file mode 100644
index 0000000..78e2771
--- /dev/null
+++ b/tools/copycat/copycat.c
@@ -0,0 +1,1251 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "copycat-priv.h"
+#include "cctree-priv.h"
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/nullfile.h>
+#include <kfs/crc.h>
+#include <klib/checksum.h>
+#include <klib/writer.h>
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/debug.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+
+#include <strtol.h>
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * some program globals
+ */
+const char * program_name = "copycat"; /* default it but try to set it */
+const char * full_path = "copycat"; /* default it but try to set it */
+int verbose = 0;
+KFile *fnull;
+
+/* cache information */
+CCTree *ctree;
+KDirectory *cdir;
+
+uint32_t in_block = 0;
+uint32_t out_block = 0;
+
+CCTree *etree;
+KDirectory * edir; /* extracted file base kdir */
+char epath[8192];
+char * ehere;
+bool xml_dir = false;
+bool extract_dir = false;
+bool no_bzip2 = false;
+bool no_md5 = false;
+void * dump_out;
+const char * xml_base = NULL;
+
+char ncbi_encryption_extension[] = ".nenc";
+char wga_encryption_extension[] = ".ncbi_enc";
+
+static
+KWrtWriter  log_writer;
+static
+KWrtWriter  log_lib_writer;
+static
+void * log_data;
+static
+void * log_lib_data;
+
+rc_t CC copycat_log_writer (void * self, const char * buffer, size_t buffer_size,
+                            size_t * num_writ)
+{
+    if (self)
+    {
+        void * bf = malloc (sizeof (SLNode) + buffer_size);
+        if (bf)
+        {
+            const char * ps, * pc;
+            size_t z;
+            ps = strchr (buffer, ' ');
+            if (ps)
+            {
+                ++ps;
+                pc = strchr (ps, '-');
+                if (pc == NULL)
+                    pc = strchr (ps, ':');
+                if (pc)
+                    pc = pc + 2;
+                else
+                    pc = ps;
+            }
+            else
+                pc = buffer;
+            z = buffer_size - (pc - buffer);
+            memmove ( (void*)(((SLNode*)bf)+1), pc, z);
+            ((char*)(((SLNode*)bf)+1))[z-1] = '\0';
+            SLListPushTail (self, bf);
+        }
+    }
+    return (log_writer != NULL)
+        ? log_writer (log_data, buffer, buffer_size, num_writ) : 0;
+}
+rc_t CC copycat_log_lib_writer  (void * self, const char * buffer, size_t buffer_size,
+                                 size_t * num_writ)
+{
+    if (self)
+    {
+        void * bf = malloc (sizeof (SLNode) + buffer_size);
+        if (bf)
+        {
+            const char * ps, * pc;
+            size_t z;
+            ps = strchr (buffer, ' ');
+            if (ps)
+            {
+                ++ps;
+                pc = strchr (ps, ':');
+                if (pc)
+                    pc = pc + 2;
+                else
+                    pc = ps;
+            }
+            else
+                pc = buffer;
+            z = buffer_size - (pc - buffer);
+            memmove ( (void*)(((SLNode*)bf)+1), pc, z);
+            ((char*)(((SLNode*)bf)+1))[z-1] = '\0';
+            SLListPushTail (self, bf);
+        }
+    }
+    return (log_lib_writer != NULL)
+        ? log_lib_writer (log_lib_data, buffer, buffer_size, num_writ) : 0;
+}
+
+static
+rc_t copycat_log_unset ()
+{
+    rc_t rc_l, rc_ll;
+
+    rc_l = KLogHandlerSet (log_writer, log_data);
+    rc_ll = KLogHandlerSet (log_lib_writer, log_lib_data);
+
+    return (rc_l != 0) ? rc_l : rc_ll;
+}
+
+rc_t copycat_log_set (void * new, void ** prev)
+{
+    rc_t rc;
+
+    if (prev)
+        *prev = KLogDataGet();
+
+    rc = KLogHandlerSet (copycat_log_writer, new);
+    if (rc == 0)
+        rc = KLogLibHandlerSet (copycat_log_lib_writer, new);
+
+    if (rc)
+        copycat_log_unset ();
+
+    return rc;
+}
+
+/* global create mode */
+KCreateMode cm = kcmParents | kcmCreate;
+
+#define OPTION_CACHE   "cache-dir"
+#define OPTION_FORCE   "force"
+#define OPTION_DEST    "output"
+#define OPTION_EXTRACT "extract"
+#define OPTION_EXTDIR  "extract-to-dir"
+#define OPTION_XMLDIR  "xml-dir"
+#define OPTION_DECPWD  "decryption-password"
+#define OPTION_ENCPWD  "encryption-password"
+#define OPTION_XMLBASE "xml-base-node"
+#define OPTION_INBLOCK "input-buffer"
+#define OPTION_OUTBLOCK "output-buffer"
+#define OPTION_NOBZIP2 "no-bzip2"
+#define OPTION_NOMD5   "no-md5"
+
+#define ALIAS_CACHE   "x"
+#define ALIAS_FORCE   "f"
+#define ALIAS_DEST    "o"
+#define ALIAS_EXTRACT "e"
+#define ALIAS_EXTDIR  "E"
+#define ALIAS_XMLDIR  "X"
+#define ALIAS_DECPWD  ""
+#define ALIAS_ENCPWD  ""
+#define ALIAS_XMLBASE ""
+#define ALIAS_INBLOCK ""
+#define ALIAS_OUTBLOCK ""
+#define ALIAS_NOBZIP2 ""
+#define ALIAS_NOMD5   ""
+
+
+
+static
+const char * extract_usage[] = 
+{ "location of extracted files", NULL };
+static
+const char * cache_usage[] = 
+{ "location of output cached files", NULL };
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+static
+const char * dest_usage[] = 
+{ "location of output", NULL };
+static
+const char * xmldir_usage[] = 
+{ "XML matches extracted files", NULL };
+static
+const char * extdir_usage[] = 
+{ "extracted directories match normal XML", NULL };
+static
+const char * xmlbase_usage[] = 
+{ "use this to base the XML not destination; can only be used with a single source", NULL };
+static
+const char * inblock_usage[] = 
+{ "system file reads are of blocks of this size", NULL };
+static
+const char * outblock_usage[] = 
+{ "system file writes are of blocks of this size", NULL };
+static
+const char * no_bzip2_usage[] = 
+{ "do not decompress files compressed with bzip2", NULL };
+const char * no_md5_usage[] = 
+{ "do not calculate md5 hashes", NULL };
+
+
+const char UsageDefaultName [] = "copycat";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] src-file dst-file\n"
+        "  %s [options] src-file [src-file...] dst-dir\n"
+        "  %s [options] -o dst-dir src-file [src-file...]\n"
+        "\n"
+        "Summary:\n"
+        "  Copies files and/or directories, creating a catalog of the copied files.\n",
+        progname, progname, progname);
+}
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    HelpOptionLine (ALIAS_CACHE, OPTION_CACHE, "dir-path", cache_usage);
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+    HelpOptionLine (ALIAS_DEST, OPTION_DEST, "file-path", dest_usage);
+    HelpOptionLine (ALIAS_EXTRACT, OPTION_EXTRACT, "dir-path", extract_usage);
+    HelpOptionLine (ALIAS_EXTDIR, OPTION_EXTDIR, NULL, extdir_usage);
+    HelpOptionLine (ALIAS_XMLDIR, OPTION_XMLDIR, NULL, xmldir_usage);
+    HelpOptionLine (ALIAS_INBLOCK, OPTION_INBLOCK, "size-in-KB", inblock_usage);
+    HelpOptionLine (ALIAS_OUTBLOCK,OPTION_OUTBLOCK, "size-in-KB", outblock_usage);
+    HelpOptionLine (ALIAS_NOBZIP2,OPTION_NOBZIP2, NULL, no_bzip2_usage);
+    HelpOptionLine (ALIAS_NOMD5,OPTION_NOMD5, NULL, no_md5_usage);
+    HelpOptionsStandard ();
+
+
+
+/*                     1         2         3         4         5         6         7         8 */
+/*            12345678901234567890123456789012345678901234567890123456789012345678901234567890 */
+    OUTMSG (("Use:\n"
+             " Copy and catalog:\n"
+             "  Some quick examples:\n"
+             "    %s dir/file.tar other-dir/file.tar\n"
+             "      copy file.tar from dir to other-dir and write the catalog to stdout\n"
+             "    %s dir/file.tar otherdir/\n"
+             "      the same\n", progname,progname));
+    OUTMSG (("    %s \"ncbi-file:dir/file.tar.nenc?encrypt&pwfile=pw other-dir.file.tar\n"
+             "      copy and decrypt file.tar.nenc from dir to other-dir and catalog\n"
+             "    %s dir/file.tar \"ncbi-file:other-dir/file.tar.nenc?encrypt&pwfile=pw\n"
+             "      copy and encrypt file.tar from dir to other-dir/file.tar.nenc and catalog\n"
+             "    %s \"ncbi-file:dir/file.tar.nenc?encrypt&pwfile=pw1 \\\n"
+             "                   \"ncbi-file:other-dir/file.tar.nenc?encrypt&pwfile=pw2\n"
+             "      copy the file as above while changing the encryption\n"
+             "\n", progname, progname, progname));
+    OUTMSG (("Use:\n"
+             "  Copy source file[s] to a destination file or directory.\n"
+             "  File names can either be typical path names or they can be URLs (IRLs) using\n"
+             "  the standard \"file\" or extended \"ncbi-file\" schemes.\n"
+             "  The catalog is XML output sent by default to stdout.\n"
+             "  As UTF-8 is accepted in the paths they are IRLs for International Resource\n"
+             "  Locators.\n"
+             "\n"));
+    OUTMSG (("  If the specified destination does not exist, there could be an ambiguity\n"
+             "  whether the destination is supposed to be a file or directory.  If the\n"
+             "  entered path ends in a '/' character or if there is more than one source\n"
+             "  it is assumed to mean a directory and is created as such.  If neither of\n"
+             "  of those apply it is assumed to be a file.\n"
+             "\n"));
+    OUTMSG (("  The sources or destination may also be special Unix devices:\n"
+             "    /dev/stdin is supported as a source.\n"
+             "    /dev/stdout and /dev/stderr is supported as a destination.\n"
+             "  Other file descriptor devices can be used in the form:\n"
+             "    /dev/fd/<fd-number>\n"));
+    OUTMSG (("  For example /dev/stdin is synonymous with /dev/fd/0 as a source.\n"
+             "  If /dev/stdout or /dev/fd/1 is used as the destination then the XML\n"
+             "  output is redirected to /dev/stderr (/dev/fd/2).\n"
+             "  Device /dev/null as the destination is treated as a file with only one\n"
+             "  source but as a directory if more than one source.  Using this device\n"
+             "  means no actual file will be copied but the cataloging will be done but\n"
+             "  " OPTION_XMLBASE " must be used.\n"
+             "\n"));
+    OUTMSG (("  These special devices can be entered using the URL (IRL) schemes if\n"
+             "  desired.  This allows the use of 'query' decorators.\n"
+             "  \n"));
+    OUTMSG (("  If a query is added to the URL it will need to be enclosed within '\"\'\n"
+             "  characters on a command line to prevent premature interpretation.\n"
+             "  The query for the 'ncbi-file' extension to the 'file' scheme allows\n"
+             "  encryption and decryption.  The supported query is introduced by the\n"
+             "  standard URI/IRI syntax of a '?' character with a '&' character\n"
+             "  separating individual query-entries.\n"
+             "\n"));
+    OUTMSG (("  The supported query entries are:\n"
+             "    'encrypt' or 'enc' to mean the input may be encrypted or the output\n"
+             "      will be encrypted,\n"
+             "    'pwfile=<path>' gives the path to file containing the password.\n"
+             "    'pwfd=<FD>' gives the numerical file descriptor from which to read\n"
+             "      the password,\n"
+             "\n"));
+    OUTMSG (("  In this program the encrypted input can apply to a file contained within\n"
+             "  the source rather than just the source file itself.  The tool is fully\n"
+             "  compatible with all versions of NCBI encryption.\n"
+             "\n"
+             "  If the output is to be encrypted only the newer FIPS compliant encryption\n"
+             "  will be used and applies to the whole file.\n"
+             "\n"));
+    OUTMSG (("NOTE: Not all combinations of URL specifications will work at this point.\n"
+             "\n"
+             "NOTE: using the same file descriptor for multiple sources or overlapping with\n"
+             "      stdin/stdout/stderr may cause undefined behavior including hanging the\n"
+             "      the program.\n"
+             "\n"));
+    OUTMSG (("  The '-x' option allows small files that are typed as eligible for\n"
+             "  caching to be copied to the cache directory provided. the directory\n"
+             "  will be created if necessary.\n"
+             "  the intent is to capture top-level files, such that files are copied\n"
+             "  into the flat cache directory without regard to where they were found\n"
+             "  in the input hierarchy. in the case of name conflict, output files will\n"
+             "  be renamed.\n"
+             "\n"));
+    OUTMSG (("  To prevent internal decompression of bzipped files, use the option\n"
+             "    '--no-bzip2'\n"
+             "\n"));
+    OUTMSG (("  To prevent calculation of MD5 hashes, use the option\n"
+             "    '--no-md5'\n"
+             "\n"));
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_EXTRACT, ALIAS_EXTRACT, NULL, extract_usage, 1, true,  false },
+    { OPTION_EXTDIR,  ALIAS_EXTDIR,  NULL, extdir_usage,  0, false, false },
+    { OPTION_XMLDIR,  ALIAS_XMLDIR,  NULL, xmldir_usage,  0, false, false },
+    { OPTION_CACHE,   ALIAS_CACHE,   NULL, cache_usage,   1, true,  false },
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, force_usage,   0, false, false },
+    { OPTION_DEST,    ALIAS_DEST,    NULL, dest_usage,    1, true,  false },
+    { OPTION_XMLBASE, ALIAS_XMLBASE, NULL, xmlbase_usage, 1, true,  false },
+    { OPTION_INBLOCK, ALIAS_OUTBLOCK,NULL, inblock_usage, 1, true,  false },
+    { OPTION_OUTBLOCK,ALIAS_OUTBLOCK,NULL, outblock_usage,1, true,  false },
+    { OPTION_NOBZIP2, ALIAS_NOBZIP2, NULL, no_bzip2_usage,0, false, false },
+    { OPTION_NOMD5,   ALIAS_NOMD5,   NULL, no_md5_usage,  0, false, false }
+};
+
+/* file2file
+ */
+static
+rc_t copycat_file2file (CCTree * tree,
+                        SLList * logs,
+                        VFSManager * mgr,
+                        VPath * _src,
+                        VPath * _dst,
+                        const char * leaf)
+{
+    size_t sz;
+    rc_t rc;
+    bool do_encrypt;
+    bool do_decrypt;
+    char spath [8192];
+
+    do_decrypt = (VPathOption (_src, vpopt_encrypted, spath, sizeof spath, &sz) == 0);
+    do_encrypt = (VPathOption (_dst, vpopt_encrypted, spath, sizeof spath, &sz) == 0);
+
+    /* we can't use the automagical nature of the VPath and its query part 
+     * because copycat needs to peek under the hood; but we want the automagical
+     * ability to handle it's path part.
+     */
+
+    rc = VPathReadPath (_src, spath, sizeof spath, &sz);
+    if (rc)
+        LOGERR (klogInt, rc, "error rereading built source path");
+    else
+    {
+        char dpath [8192];
+        size_t dz;
+
+        rc = VPathReadPath (_dst, dpath, sizeof dpath, &dz);
+        if (rc)
+            LOGERR (klogInt, rc, "error rereading built source path");
+        else
+        {
+            KDirectory * cwd;
+
+            rc = VFSManagerGetCWD (mgr, &cwd);
+            if (rc)
+                LOGERR (klogInt, rc, "error pulling directory out of manager");
+            else
+            {
+                KTime_t mtime = 0;
+                bool src_dev = false;
+                bool dst_dev = false;
+
+                if (strncmp (spath, "/dev/", sizeof "/dev/"-1) == 0)
+                {
+                    /* get date from file system
+                       [this won't be either the submitter original date
+                       nor the mod-date within the file system, unless
+                       the date gets reset...] */
+                    mtime = time (NULL);
+                    src_dev = true;
+                }
+                else
+                {
+                    rc = KDirectoryDate (cwd, &mtime, "%s", spath);
+                    if (rc)
+                    {
+                        PLOGERR (klogErr,
+                                 (klogErr, rc,
+                                  "failed to determine modtime for '$(path)' continuing", "path=%s", spath ));
+                        mtime = time (NULL);
+                        rc = 0;
+                    }
+                }
+                if (strncmp (dpath, "/dev/", sizeof "/dev/" - 1) == 0)
+                {
+                    if (strcmp(dpath, "/dev/stdout") == 0 ||
+                        strcmp(dpath, "/dev/fd/1") == 0)
+                    {
+                        dump_out = stderr;
+                    }
+                    dst_dev = true;
+
+                    if (src_dev && (xml_base == NULL))
+                    {
+                        rc = RC (rcExe, rcArgv, rcAccessing, rcParam, rcNull);
+                        LOGERR (klogErr, rc, "Must provide " OPTION_XMLBASE
+                                " when using a device stream as output");
+                    }
+                }
+                if (rc == 0)
+                {
+                    char * sleaf;
+                    char * dleaf;
+                    char * ext;
+                    VPath * src;
+                    size_t xz;
+                    char xpath [8192]; /* way over sized - its a leaf only */
+
+                    sleaf = strrchr (spath, '/');
+                    if (sleaf++ == NULL)
+                        sleaf = spath;
+
+                    dleaf = strrchr (dpath, '/');
+                    if (dleaf++ == NULL)
+                        dleaf = dpath;
+
+                    xz = strlen (leaf);
+                    memmove (xpath, leaf, xz + 1);
+
+                    /* if we are encrypting the output make sure we have an encryption
+                     * extension on the destination.
+                     */
+                    if (do_decrypt)
+                    {
+                        ext = strrchr (xpath, '.');
+                        if (ext == NULL)
+                            ext = xpath;
+                        if ((strcmp (ext, ncbi_encryption_extension) == 0) ||
+                            (strcmp (ext, wga_encryption_extension) == 0))
+                            *ext = '\0';
+                    }
+                    else
+                        ext = xpath + strlen (xpath);
+
+                    if (do_encrypt)
+                    {
+                        strcpy (ext, ncbi_encryption_extension);
+
+                        if (!dst_dev)
+                        {
+                            ext = strrchr (dleaf, '.');
+                            if (ext == NULL)
+                                ext = dleaf + strlen (dleaf);
+
+                            if (strcmp (ext, ncbi_encryption_extension) != 0)
+                                strcat (ext, ncbi_encryption_extension);
+                        }
+                    }
+
+                    rc = VFSManagerMakePath (mgr, &src, "%s", spath);
+                    if (rc)
+                        LOGERR (klogErr, rc, "error rebuilding source path");
+                    else
+                    {
+                        VPath * dst;
+
+                        rc = VFSManagerMakePath (mgr, &dst, "%s", dpath);
+                        if (rc)
+                            LOGERR (klogErr, rc, "error rebuilding source path");
+                        else
+                        {
+
+                            /* never allow overwrite of something already there */
+                            if (CCTreeFind (tree, xpath) != NULL ) /* dleaf? xpath? */
+                            {
+                                rc = RC ( rcExe, rcFile, rcCopying, rcPath, rcExists );
+                                PLOGERR ( klogInt,  (klogInt, rc, "will not overwrite "
+                                                     "just-created '$(path)'", "path=%s", xpath ));
+                            }
+                            else
+                            {
+                                const KFile * sf;
+
+                                rc = VFSManagerOpenFileRead (mgr, &sf, src);
+                                if (rc)
+                                    PLOGERR (klogFatal,
+                                             (klogFatal, rc,
+                                              "error opening input '$(P)'", "P=%s", spath));
+                                else
+                                {
+                                    uint64_t expected;
+
+                                    rc = KFileSize (sf, &expected);
+                                    if (rc)
+                                    {
+                                        if (GetRCState (rc) == rcUnsupported)
+                                        {
+                                            expected = rcUnsupported;
+                                            rc = 0;
+                                        }
+                                    }
+                                    if (rc == 0)
+                                    {
+                                        KFile * df;
+
+                                        rc = VFSManagerCreateFile (mgr, &df, false, 0640, cm, dst);
+                                        if (GetRCState (rc) == rcUnauthorized)
+                                        {
+                                            uint32_t access;
+                                            rc_t orc;
+
+                                            orc = KDirectoryAccess (cwd, &access, "%s", dpath);
+                                            if (orc == 0)
+                                            {
+                                                orc = KDirectorySetAccess (cwd, false, 0640, 0777, "%s", dpath);
+                                                if (orc == 0)
+                                                {
+                                                    rc = VFSManagerCreateFile (mgr, &df, false, 0640, cm, dst);
+                                                    if (rc)
+                                                        KDirectorySetAccess (cwd, false, access, 0777, "%s", dpath);
+                                                }
+                                            }
+                                        }
+                                        if (rc)
+                                            PLOGERR (klogErr,
+                                                     (klogErr, rc, "failed to creat destination file '$(path)'",
+                                                      "path=%s", dpath));
+                                        else
+                                        {
+                                            rc_t orc;
+
+                                            log_writer = KLogWriterGet();
+                                            log_lib_writer = KLogLibWriterGet();
+                                            log_data = KLogDataGet();
+                                            log_lib_data = KLogLibDataGet();
+
+                                            rc = copycat_log_set (logs, NULL);
+                                            if (rc == 0)
+                                            {
+                                                DEBUG_STATUS (("\n-----\n%s: call copycat (tree(%p), mtime(%lu),"
+                                                               " cwd(%p), _src(%p), sf(%p), _dst(%p), df(%p), "
+                                                               "spath(%s), leaf(%s), expected(%lu), do_decrypt(%d)"
+                                                               " do_encrypt(%d))\n\n", __func__,
+                                                               tree, mtime, cwd, _src, sf, _dst, df, spath,
+                                                               xpath, expected, do_decrypt, do_encrypt));
+                                                rc = copycat (tree, mtime, cwd, _src, sf, _dst, df, spath,
+                                                              xpath, expected, do_decrypt, do_encrypt);
+
+                                                orc = copycat_log_unset();
+                                            }
+
+                                            if (rc)
+                                                LOGERR (klogFatal, rc, "copycat function failed");
+                                            else
+                                                rc = orc;
+
+                                            KFileRelease (df);
+                                        }
+                                    }
+                                    KFileRelease (sf);
+                                }
+                            }
+                            VPathRelease (dst);
+                        }
+                        VPathRelease (src);
+                    }
+                }
+                KDirectoryRelease (cwd);
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* files2dir
+ */
+static
+rc_t copycat_files2dir (CCTree * tree, SLList * logs, VFSManager * mgr, Vector * v, VPath * dst)
+{
+    size_t dz;
+    uint32_t ix;
+    rc_t rc;
+    char dbuff [8192];
+
+    /* xml-base only works for a single file */
+    if ((VectorLength (v) > 1) && (xml_base != NULL))
+    {
+        rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcIncorrect);
+        LOGERR (klogErr, rc, "Can only use " OPTION_XMLBASE " with a single source file");
+        return rc;
+    }
+
+    /* get the path out of the destination VPath */
+    rc = VPathReadPath (dst, dbuff, sizeof dbuff, &dz);
+    if (rc)
+        return rc;
+
+    for (ix = 0; ix < VectorLength (v); ++ix)
+    {
+        VPath * new_dst;
+        VPath * src;
+        char * sleaf;
+        size_t sz;
+        char sbuff [8192];
+
+        src = (VPath*) VectorGet (v, ix);
+        if (src == NULL) /* warn? error? abort? */
+            continue;
+
+
+        rc = VPathReadPath (src, sbuff, sizeof sbuff, &sz);
+        if (rc)
+            return rc;
+
+        sleaf = strrchr (sbuff, '/');
+        if (sleaf++ == NULL)
+            sleaf = sbuff;
+
+        /* the special case destination is the null device which we treat 
+         * as if it was a directory at first and then as a file
+         */
+        if (strcmp (dbuff, "/dev/null") == 0)
+        {
+            rc = VPathAddRef (dst);
+            if (rc != 0)
+                break;
+            new_dst = dst;
+        }
+        else
+        {
+            DEBUG_STATUS(("%s: %s (%lu)\n", __func__, dbuff, dz));
+
+            /* fix up the destination path if it's missing a final '/'
+             * this is inside the loop because of the null device special case
+             */
+            if (dbuff [dz-1] != '/')
+            {
+                dbuff [dz++] = '/';
+                dbuff [dz] = '\0';
+            }
+
+            /* append source leaf to destination path */
+            string_copy (dbuff + dz, sizeof dbuff - dz, sleaf, strlen (sleaf));
+
+            DEBUG_STATUS(("%s: %s\n", __func__, dbuff));
+
+            /* make a new VPath - no URI stuff gets transferred here */
+            rc = VFSManagerMakePath (mgr, &new_dst, "%s", dbuff);
+            if (rc)
+                break;
+        }
+
+        /* do this one file copy and catalog now */
+        rc = copycat_file2file (tree, logs, mgr, src, new_dst, xml_base ? xml_base : sleaf);
+
+        VPathRelease (new_dst);
+    }
+    return rc;
+}
+
+
+/* run
+ *
+ * dest will be set if the -o option was used.
+ * 
+ */
+static
+rc_t copycat_run ( CCTree *tree, SLList * logs, VFSManager * mgr, 
+                   const char *cache, VPath * _dest, const char *extract, 
+                   Vector * v)
+{
+    rc_t rc;
+    int dest_type;
+    KDirectory * cwd;
+    VPath * dest;
+    size_t sz;
+    const char * pleaf;
+    char pbuff [4096];
+
+    /* =====
+     * directories aren't yet using the VFSManager to open them
+     * because we have to get more under the covers for our cataloging
+     */
+
+    rc = VFSManagerGetCWD (mgr, &cwd);
+    if (rc)
+        return rc;
+
+    /* if there's a cache path, create directory */
+    if ( cache != NULL )
+    {
+        rc = KDirectoryCreateDir ( cwd, 0775, kcmParents | kcmOpen, "%s", cache );
+        if ( rc == 0 )
+            rc = KDirectoryOpenDirUpdate ( cwd, & cdir, true, "%s", cache );
+        if ( rc != 0 )
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc, "failed to open cache directory '$(path)'",
+                      "path=%s", cache ));
+            return rc;
+        }
+    }
+    else
+        cdir = NULL;
+
+    /* if there's a extract path, create directory */
+    if ( extract != NULL )
+    {
+        rc = KDirectoryCreateDir (cwd, 0775, kcmParents | kcmOpen, "%s", extract);
+        if ( rc == 0 )
+            rc = KDirectoryOpenDirUpdate (cwd, & edir, true, "%s", extract);
+        if ( rc != 0 )
+        {
+            PLOGERR (klogErr, 
+                     (klogErr, rc,
+                      "failed to open extract directory '$(path)'",
+                      "path=%s", extract ));
+            return rc;
+        }
+    }
+    else
+        edir = NULL;
+
+    dest = _dest;
+    if (dest == NULL)
+    {
+        rc = VectorRemove (v, VectorLength(v) - 1, (void**)&dest);
+        if (rc)
+            return rc;
+    }
+
+    rc = VPathReadPath (dest, pbuff, sizeof pbuff, &sz);
+    if (rc)
+        return rc;
+
+    if (xml_base)
+        pleaf = xml_base;
+    else
+    {
+        pleaf = strrchr (pbuff, '/');
+        if (pleaf++ == NULL)
+            pleaf = pbuff;
+    }
+
+
+    /* check destination type */
+    dest_type = KDirectoryPathType (cwd, "%s", pbuff);
+    DEBUG_STATUS(("%s: checked destination type for '%s' got '%u'\n", __func__, pbuff, dest_type));
+    switch (dest_type & ~ kptAlias)
+    {
+    case kptNotFound:
+        /* this is the potentially ambiguous situation 
+         * if only two arguments and the last isn't definitively a directory 
+         * we assume its supposed to be a file.
+         *
+         * If the target does not exist but it's path ends in '/' or if
+         * there is more than one source we know it is supposed to be a 
+         * directory.
+         */
+        if ((pbuff[sz-1] != '/')
+/*              ((pbuff[sz-1] != '.') */
+
+
+
+/*              ( */
+/* )) */
+            && (VectorLength (v) == 1))
+        {
+            return copycat_file2file (tree, logs, mgr, VectorGet (v, 0), dest, pleaf);
+        }
+
+        /* create a directory at the given path */
+        rc = KDirectoryCreateDir ( cwd, 0775, kcmParents | kcmOpen, "%s", pbuff );
+        if ( rc != 0 )
+            return rc;
+
+        /* fall through */
+    case kptDir:
+        return copycat_files2dir (tree, logs, mgr, v, dest);
+
+
+    case kptCharDev:
+        /*
+         * special case NULL device can act like a directory here
+         * all other 'devices' we treat as a file
+         */
+        if ( strcmp ( pbuff, "/dev/null" ) == 0 )
+        {
+#if 0
+            if (VectorLength (v) > 1)
+#endif
+                return copycat_files2dir (tree, logs, mgr, v, dest);
+        }
+        /* fall through */
+    case kptBlockDev:
+    case kptFIFO:
+    case kptFile:
+        if (VectorLength (v) == 1)
+            return copycat_file2file (tree, logs, mgr, VectorGet (v, 0), dest, pleaf);
+
+        rc = RC (rcExe, rcDirectory, rcAccessing, rcPath, rcNotFound);
+        PLOGERR (klogFatal,
+                 (klogFatal, rc, "copying multiple files, but target argument "
+                  "[$(D)] is not a directory", "D=%s", pbuff));
+        return rc;
+    }
+
+    fprintf ( stderr, "%s: '%s': specified destination path is not a directory\n", program_name, pbuff );
+    return RC ( rcExe, rcDirectory, rcAccessing, rcPath, rcIncorrect );
+}
+/* dump
+ */
+static
+rc_t copycat_fwrite ( void *out, const void *buffer, size_t bytes )
+{
+    size_t writ = fwrite ( buffer, 1, bytes, out );
+    if ( writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+static
+rc_t copycat_dump ( const CCTree *tree, SLList * logs )
+{
+    return CCTreeDump ( tree, copycat_fwrite, dump_out, logs );
+}
+
+static
+void param_whack (void * path, void * ignored)
+{
+    (void)VPathRelease ((const VPath*)path);
+}
+
+/* KMain
+ */
+
+rc_t KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc, orc;
+
+    KStsHandlerSetStdErr();
+    KStsLibHandlerSetStdErr();
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc == 0)
+    {
+        /* CS-101: DO WHILE ( 0 ) LOOPS ARE CUTE FOR AVOIDING GOTO,
+           BUT IT MEANS YOU HAVE TO PUT ALL OF YOUR CLEANUP OUTSIDE
+           OF THE LOOP, IN ORDER TO BREAK OUT IN A NON-STRUCTURED WAY */
+        do
+        {
+            const char * dest;
+            const char * cache;
+            const char * extract = NULL;
+
+            uint32_t pcount;
+            CCTree * tree;
+            VFSManager * mgr = NULL;
+            VPath * dp = NULL;
+            Vector params = { NULL, 0, 0, 0};
+            uint32_t ix;
+
+            rc = ArgsProgram (args, &full_path, &program_name);
+            if (rc)
+                break;
+
+            extract_dir = false;
+            xml_dir = false;
+            memset (epath, 0, sizeof (epath));
+            ehere = epath;
+
+            rc = ArgsOptionCount (args, OPTION_CACHE, &pcount);
+            if (rc)
+                break;
+            if (pcount)
+            {
+                rc = ArgsOptionValue (args, OPTION_CACHE, 0, (const void **)&cache);
+                if (rc)
+                    break;
+            }
+            else
+                cache = NULL;
+
+            rc = ArgsOptionCount (args, OPTION_DEST, &pcount);
+            if (rc)
+                break;
+            if (pcount)
+            {
+                rc = ArgsOptionValue (args, OPTION_DEST, 0, (const void **)&dest);
+                if (rc)
+                    break;
+            }
+            else
+            {
+                dest = NULL;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_EXTRACT, &pcount);
+            if (rc)
+                break;
+            if (pcount)
+            {
+                rc = ArgsOptionValue (args, OPTION_EXTRACT, 0, (const void **)&extract);
+                if (rc)
+                    break;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_EXTDIR, &pcount);
+            if (rc)
+                break;
+            extract_dir = pcount > 0;
+
+            rc = ArgsOptionCount (args, OPTION_XMLDIR, &pcount);
+            if (rc)
+                break;
+            xml_dir = pcount > 0;
+
+            rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+            if (rc)
+                break;
+            if (pcount)
+                cm = kcmParents | kcmInit;
+
+            rc = ArgsOptionCount (args, OPTION_XMLBASE, &pcount);
+            if (pcount == 1)
+            {
+                rc = ArgsOptionValue (args, OPTION_XMLBASE, 0, (const void **)&xml_base);
+                if (rc)
+                    break;
+
+                /* we might want a few more checks here... */
+                if (strchr (xml_base, '/') != NULL)
+                {
+                    rc = RC (rcExe, rcArgv, rcAccessing, rcParam, rcInvalid);
+                    break;
+                }
+            }
+
+            rc = ArgsOptionCount (args, OPTION_INBLOCK, &pcount);
+            if (pcount == 1)
+            {
+                const char * start;
+                char * end;
+                uint32_t val;
+
+                rc = ArgsOptionValue (args, OPTION_INBLOCK, 0, (const void **)&start);
+                if (rc)
+                    break;
+
+                val = strtou32 (start, &end, 10);
+
+                if (*end != '\0')
+                {
+                    rc = RC (rcExe, rcArgv, rcAccessing, rcParam, rcInvalid);
+                    break;
+                }
+                in_block = val * 1024;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_OUTBLOCK, &pcount);
+            if (pcount == 1)
+            {
+                const char * start;
+                char * end;
+                uint32_t val;
+
+                rc = ArgsOptionValue (args, OPTION_OUTBLOCK, 0, (const void **)&start);
+                if (rc)
+                    break;
+
+                val = strtou32 (start, &end, 10);
+
+                if (*end != '\0')
+                {
+                    rc = RC (rcExe, rcArgv, rcAccessing, rcParam, rcInvalid);
+                    break;
+                }
+                out_block = val * 1024;
+            }
+
+            rc = ArgsOptionCount ( args, OPTION_NOBZIP2, & pcount );
+            if ( pcount > 0 )
+            {
+                no_bzip2 = true;
+            }
+
+            rc = ArgsOptionCount ( args, OPTION_NOMD5, & pcount );
+            if ( pcount > 0 )
+            {
+                no_md5 = true;
+            }
+
+            /* all parameters plus the possible dest option parameter */
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 0)
+            {
+                rc = RC ( rcExe, rcArgv, rcReading, rcParam, rcInsufficient );
+                MiniUsage (args);
+                break;
+            }
+
+            if ((dest == NULL) && (extract == NULL) && (pcount < 2))
+            {
+                rc = RC ( rcExe, rcArgv, rcReading, rcParam, rcInvalid );
+                if (pcount)
+                    LOGERR (klogFatal, rc, "missing source and destination arguments\n");
+                else
+                    LOGERR (klogFatal, rc, "missing destination argument[s]\n");
+                break;
+            }
+
+            VectorInit (&params, 0, 8); /* 8 is arbirary - seems long enough for no realloc */
+
+            rc = VFSManagerMake (&mgr);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc,
+                        "unable to build file system manager");
+                break;
+            }
+
+            for (ix = 0; ix < pcount; ++ix)
+            {
+                VPath * kp;
+                const char * pc;
+
+                rc = ArgsParamValue (args, ix, (const void **)&pc);
+                if (rc)
+                {
+                    LOGERR (klogFatal, rc, "unable to extract path parameter");
+                    break;
+                }
+
+                rc = VFSManagerMakePath (mgr, &kp, "%s", pc);
+                if (rc)
+                {
+                    LOGERR (klogFatal, rc, "unable to build path parameter");
+                    break;
+                }
+
+                rc = VectorSet (&params, ix, kp);
+                if (rc)
+                {
+                    LOGERR (klogFatal, rc, "unable to stow path parameter");
+                    break;
+                }
+            }
+            if (rc == 0)
+            {
+                if (dest)
+                {
+                    rc = VFSManagerMakePath (mgr, &dp, "%s", dest);
+                    if (rc)
+                    {
+                        LOGERR (klogFatal, rc, "unable to build dest parameter");
+                        break;
+                    }
+                }
+                DEBUG_STATUS(("%s: Create file tree\n", __func__));
+                rc = CCTreeMake (&tree);
+                if (rc)
+                {
+                    LOGERR ( klogInt, rc, "failed to create parse tree" );
+                }
+                else
+                {
+                    DEBUG_STATUS(("%s: Create cache file tree\n", __func__));
+
+                    rc = CCTreeMake (&ctree);
+                    if (rc)
+                    {
+                        LOGERR ( klogInt, rc, "failed to create cache tree" );
+                    }
+                    else
+                    {
+                        DEBUG_STATUS(("%s: Create extracted file tree\n",
+                                      __func__));
+
+                        rc = CCTreeMake (&etree);
+                        if (rc)
+                        {
+                            LOGERR ( klogInt, rc,
+                                     "failed to create extract tree" );
+                        }
+                        else
+                        {
+                            DEBUG_STATUS(("%s: Create  NULL output file\n",
+                                          __func__));
+                            rc = KFileMakeNullUpdate (&fnull);
+                            if (rc)
+                                LOGERR (klogInt, rc,
+                                        "failed to create null output");
+                            else
+                            {
+                                DEBUG_STATUS(("%s: Open File Format Tester\n",
+                                              __func__));
+
+                                rc = CCFileFormatMake ( & filefmt );
+                                if ( rc != 0 )
+                                    LOGERR (klogInt, rc,
+                                            "failed to create file format" );
+                                else
+                                {
+                                    SLList logs;
+
+                                    DEBUG_STATUS(("%s: Initialize CRC32\n",
+                                                  __func__));
+
+                                    SLListInit (&logs);
+                                    CRC32Init ();
+
+                                    DEBUG_STATUS(("%s: Copy and catalog\n",
+                                                  __func__));
+
+                                    dump_out = stdout; /* kludge */
+
+                                    rc = copycat_run (tree, &logs, mgr, cache,
+                                                      dp, extract, &params);
+                                    if ( rc == 0 )
+                                        rc = copycat_dump ( xml_dir ? etree : tree, &logs );
+                                    DEBUG_STATUS(("%s: Output XML\n", __func__));
+
+
+                                    CCFileFormatRelease ( filefmt );
+                                }
+
+                                DEBUG_STATUS(("%s: Release NULL output file\n", __func__));
+
+                                orc = KFileRelease ( fnull ), fnull = NULL;
+                                if (rc == 0)
+                                    rc = orc;
+                            } 
+                            DEBUG_STATUS(("%s: Whack extracted file tree;\n", __func__));
+                            CCTreeWhack (etree);
+                        }
+                        DEBUG_STATUS(("%s: Whack cache file tree;\n", __func__));
+                        CCTreeWhack (ctree);
+                    }
+                    DEBUG_STATUS(("%s: Whack file tree;\n", __func__));
+                    CCTreeWhack (tree);
+                }
+
+                VPathRelease (dp);
+            }
+            VFSManagerRelease (mgr);
+            VectorWhack (&params, param_whack, NULL);
+        } while (0);
+    }
+    ArgsWhack (args);
+    orc = KDirectoryRelease (cdir); /* class extren should be NULL if never used */
+    if (orc)
+    {
+        LOGERR (klogInt, rc, "Error shutting file system access");
+        if (rc == 0)
+            rc = orc;
+    }
+    DEBUG_STATUS(("%s: exit rc %R(%x);\n", __func__, rc, rc));
+    return rc;
+}
+
diff --git a/tools/copycat/debug.h b/tools/copycat/debug.h
new file mode 100644
index 0000000..b47d440
--- /dev/null
+++ b/tools/copycat/debug.h
@@ -0,0 +1,75 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#ifndef _h_copycat_debug_
+#define _h_copycat_debug_
+
+#include <klib/debug.h>
+
+#ifndef _h_kfs_impl_
+#include <kfs/impl.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+#define DEBUG_ENTRY() DEBUG_MSG(10,("Enter: %s\n", __func__))
+
+/*--------------------------------------------------------------------------
+ * application debug stuff
+ */
+
+/* redefine some application flags to be more specialized rather than just numbers */
+#define DBG_CC          DBG_APP
+#define DBG_CC_FILE     DBG_APP_1
+#define DBG_CC_CCTREE   DBG_APP_2
+
+#define DBG_KFILE(msg)  DBGMSG (DBG_CC, DBG_FLAG(DBG_CC_FILE), msg)
+
+#if _DEBUGGING
+#define DBG_KFile(p)    \
+    { DBG_KFILE(("%s: KFile * %p\n", __func__, (p)));   \
+        if (p) { \
+            DBG_KFILE(("  vt:            %p\n",(p)->vt)); \
+            DBG_KFILE(("  dir:            %p\n",(p)->dir)); \
+            DBG_KFILE(("  ref:           %u\n",*(unsigned*)&(p)->refcount));  \
+            DBG_KFILE(("  read_enabled:  %u\n",*(unsigned*)&(p)->read_enabled)); \
+            DBG_KFILE(("  write_enabled: %u\n",*(unsigned*)&(p)->write_enabled));}}
+#else
+#define DBG_KFile(p) 
+#endif
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_copycat_debug_ */
diff --git a/tools/copycat/magic b/tools/copycat/magic
new file mode 100644
index 0000000..1f6abea
--- /dev/null
+++ b/tools/copycat/magic
@@ -0,0 +1,18398 @@
+
+#------------------------------------------------------------------------------
+# $File: acorn,v 1.5 2009/09/19 16:28:07 christos Exp $
+# acorn:  file(1) magic for files found on Acorn systems
+#
+
+# RISC OS Chunk File Format
+# From RISC OS Programmer's Reference Manual, Appendix D
+# We guess the file type from the type of the first chunk.
+0	lelong		0xc3cbc6c5	RISC OS Chunk data
+>12	string		OBJ_		\b, AOF object
+>12	string		LIB_		\b, ALF library
+
+# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
+16	lelong		0xef000011	RISC OS AIF executable
+
+# RISC OS Draw files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0	string 		Draw		RISC OS Draw file data
+
+# RISC OS new format font files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0	string		FONT\0		RISC OS outline font data,
+>5	byte		x		version %d
+0	string		FONT\1		RISC OS 1bpp font data,
+>5	byte		x		version %d
+0	string		FONT\4		RISC OS 4bpp font data
+>5	byte		x		version %d
+
+# RISC OS Music files
+# From RISC OS Programmer's Reference Manual, Appendix E
+0	string		Maestro\r	RISC OS music file
+>8	byte		x		version %d
+
+>8	byte		x		type %d
+
+# Digital Symphony data files
+# From: Bernard Jungen (bern8817 at euphonynet.be)
+0		string	\x02\x01\x13\x13\x13\x01\x0d\x10	Digital Symphony sound sample (RISC OS),
+>8		byte	x	version %d,
+>9		pstring	x	named "%s",
+>(9.b+19)	byte	=0	8-bit logarithmic
+>(9.b+19)	byte	=1	LZW-compressed linear
+>(9.b+19)	byte	=2	8-bit linear signed
+>(9.b+19)	byte	=3	16-bit linear signed
+>(9.b+19)	byte	=4	SigmaDelta-compressed linear
+>(9.b+19)	byte	=5	SigmaDelta-compressed logarithmic
+>(9.b+19)	byte	>5	unknown format
+
+0	string	\x02\x01\x13\x13\x14\x12\x01\x0b	Digital Symphony song (RISC OS),
+>8	byte	x	version %d,
+>9	byte	=1	1 voice,
+>9	byte	!1	%d voices,
+>10	leshort	=1	1 track,
+>10	leshort	!1	%d tracks,
+>12	leshort	=1	1 pattern
+>12	leshort	!1	%d patterns
+
+0	string	\x02\x01\x13\x13\x10\x14\x12\x0e
+>9	byte	=0	Digital Symphony sequence (RISC OS),
+>>8	byte	x	version %d,
+>>10	byte	=1	1 line,
+>>10	byte	!1	%d lines,
+>>11	leshort	=1	1 position
+>>11	leshort	!1	%d positions
+>9	byte	=1	Digital Symphony pattern data (RISC OS),
+>>8	byte	x	version %d,
+>>10	leshort	=1	1 pattern
+>>10	leshort	!1	%d patterns
+
+#------------------------------------------------------------------------------
+# $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $
+# adi: file(1) magic for ADi's objects
+# From Gregory McGarry <g.mcgarry at ieee.org>
+#
+0	leshort		0x521c		COFF DSP21k
+>18	lelong		&02		executable,
+>18	lelong		^02
+>>18	lelong		&01		static object,
+>>18	lelong		^01		relocatable object,
+>18	lelong		&010		stripped
+>18	lelong		^010		not stripped
+
+#------------------------------------------------------------------------------
+# $File: adventure,v 1.10 2009/09/19 16:28:07 christos Exp $
+# adventure: file(1) magic for Adventure game files
+#
+# from Allen Garvin <earendil at faeryland.tamu-commerce.edu>
+# Edited by Dave Chapeskie <dchapes at ddm.on.ca> Jun 28, 1998
+# Edited by Chris Chittleborough <cchittleborough at yahoo.com.au>, March 2002
+#
+# ALAN
+# I assume there are other, lower versions, but these are the only ones I
+# saw in the archive.
+0	beshort	0x0206	ALAN game data
+>2	byte	<10	version 2.6%d
+
+
+# Infocom (see z-machine)
+#------------------------------------------------------------------------------
+# Z-machine:  file(1) magic for Z-machine binaries.
+#
+# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which
+# appears to be a version-0 Z-machine binary.
+#
+# The (false match) message is to correct that behavior.  Perhaps it is
+# not needed.
+#
+16	belong&0xfe00f0f0	0x3030	Infocom game data
+>0	ubyte			0	(false match)
+>0	ubyte			>0	(Z-machine %d,
+>>2	ubeshort		x	Release %d /
+>>18	string			>\0	Serial %.6s)
+
+#------------------------------------------------------------------------------
+# Glulx:  file(1) magic for Glulx binaries.
+#
+# I haven't checked for false matches yet.
+#
+0	string			Glul	Glulx game data
+>4	beshort			x	(Version %d
+>>6	byte			x	\b.%d
+>>8	byte			x	\b.%d)
+>36	string			Info	Compiled by Inform
+
+
+
+# For Quetzal and blorb magic see iff
+
+
+# TADS (Text Adventure Development System)
+#  All files are machine-independent (games compile to byte-code) and are tagged
+#  with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is
+#  on the way).
+#  Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
+0	string	TADS2\ bin	TADS
+>9	belong  !0x0A0D1A00	game data, CORRUPTED
+>9	belong	 0x0A0D1A00
+>>13	string	>\0		%s game data
+#  Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
+0	string	TADS2\ rsc	TADS
+>9	belong  !0x0A0D1A00	resource data, CORRUPTED
+>9	belong	 0x0A0D1A00
+>>13	string	>\0		%s resource data
+#  Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
+#  2-byte length N, the N-char name of the game file *without* a NUL (darn!),
+# "TADS2 save\n\r\032\0" and the interpreter version. 
+0	string	TADS2\ save/g	TADS
+>12	belong	!0x0A0D1A00	saved game data, CORRUPTED
+>12	belong	 0x0A0D1A00
+>>(16.s+32) string >\0		%s saved game data
+#  Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
+#  version.
+0	string	TADS2\ save	TADS
+>10	belong	!0x0A0D1A00	saved game data, CORRUPTED
+>10	belong	 0x0A0D1A00
+>>14	string	>\0		%s saved game data
+
+# Danny Milosavljevic <danny.milo at gmx.net>
+# this are adrift (adventure game standard) game files, extension .taf
+# depending on version magic continues with 0x93453E6139FA (V 4.0)
+# 0x9445376139FA (V 3.90)
+# 0x9445366139FA (V 3.80)
+# this is from source (http://www.adrift.org.uk/) and I have some taf
+# files, and checked them.
+#0	belong	0x3C423FC9
+#>4	belong	0x6A87C2CF	Adrift game file
+#!:mime	application/x-adrift
+
+#------------------------------------------------------------------------------
+# $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $
+# allegro:  file(1) magic for Allegro datafiles
+# Toby Deshane <hac at shoelace.digivill.net>
+#
+0 belong 0x736C6821   Allegro datafile (packed)
+0 belong 0x736C682E   Allegro datafile (not packed/autodetect)
+0 belong 0x736C682B   Allegro datafile (appended exe data)
+
+#------------------------------------------------------------------------------
+# $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $
+# alliant:  file(1) magic for Alliant FX series a.out files
+#
+# If the FX series is the one that had a processor with a 68K-derived
+# instruction set, the "short" should probably become "beshort" and the
+# "long" should probably become "belong".
+# If it's the i860-based one, they should probably become either the
+# big-endian or little-endian versions, depending on the mode they ran
+# the 860 in....
+#
+0	short		0420		0420 Alliant virtual executable
+>2	short		&0x0020		common library
+>16	long		>0		not stripped
+0	short		0421		0421 Alliant compact executable
+>2	short		&0x0020		common library
+>16	long		>0		not stripped
+
+#------------------------------------------------------------------------------
+# $File: alpha,v 1.7 2009/09/19 16:28:07 christos Exp $
+# alpha architecture description
+#
+
+0	leshort		0603		COFF format alpha
+>22	leshort&030000	!020000		executable
+>24	leshort		0410		pure
+>24	leshort		0413		paged
+>22	leshort&020000	!0		dynamically linked
+>16	lelong		!0		not stripped
+>16	lelong		0		stripped
+>22	leshort&030000	020000		shared library
+>24	leshort		0407		object
+>27	byte		x		- version %d
+>26	byte		x		.%d
+>28	byte		x		-%d
+
+# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike at opac.bl.uk>
+#
+# The actual magic number is just "Core", followed by a 2-byte version
+# number; however, treating any file that begins with "Core" as a Digital
+# UNIX core dump file may produce too many false hits, so we include one
+# byte of the version number as well; DU 5.0 appears only to be up to
+# version 2.
+#
+0	string		Core\001	Alpha COFF format core dump (Digital UNIX)
+>24	string		>\0		\b, from '%s'
+0	string		Core\002	Alpha COFF format core dump (Digital UNIX)
+>24	string		>\0		\b, from '%s'
+
+
+#------------------------------------------------------------------------------
+# $File: amanda,v 1.5 2009/09/19 16:28:07 christos Exp $
+# amanda:  file(1) magic for amanda file format
+#
+0	string	AMANDA:\ 		AMANDA 
+>8	string	TAPESTART\ DATE		tape header file,
+>>23	string	X
+>>>25	string	>\ 			Unused %s
+>>23	string	>\ 			DATE %s
+>8	string	FILE\ 			dump file,
+>>13	string	>\ 			DATE %s
+
+#------------------------------------------------------------------------------
+# $File: amigaos,v 1.14 2009/09/19 16:28:07 christos Exp $
+# amigaos:  file(1) magic for AmigaOS binary formats:
+
+#
+# From ignatios at cs.uni-bonn.de (Ignatios Souvatzis)
+#
+0	belong		0x000003fa	AmigaOS shared library
+0	belong		0x000003f3	AmigaOS loadseg()ble executable/binary
+0	belong		0x000003e7	AmigaOS object/library data
+#
+0	beshort		0xe310		Amiga Workbench
+>2	beshort		1		
+>>48	byte		1		disk icon
+>>48	byte		2		drawer icon
+>>48	byte		3		tool icon
+>>48	byte		4		project icon
+>>48	byte		5		garbage icon
+>>48	byte		6		device icon
+>>48	byte		7		kickstart icon
+>>48	byte		8		workbench application icon
+>2	beshort		>1		icon, vers. %d
+#
+# various sound formats from the Amiga
+# G=F6tz Waschk <waschk at informatik.uni-rostock.de>
+#
+0	string		FC14		Future Composer 1.4 Module sound file
+0	string		SMOD		Future Composer 1.3 Module sound file
+0	string		AON4artofnoise	Art Of Noise Module sound file
+1	string		MUGICIAN/SOFTEYES Mugician Module sound file
+58	string		SIDMON\ II\ -\ THE	Sidmon 2.0 Module sound file
+0	string		Synth4.0	Synthesis Module sound file
+0	string		ARP.		The Holy Noise Module sound file
+0	string		BeEp\0		JamCracker Module sound file
+0	string		COSO\0		Hippel-COSO Module sound file
+# Too simple (short, pure ASCII, deep), MPi
+#26	string		V.3		Brian Postma's Soundmon Module sound file v3
+#26	string		BPSM		Brian Postma's Soundmon Module sound file v3
+#26	string		V.2		Brian Postma's Soundmon Module sound file v2
+
+# The following are from: "Stefan A. Haubenthal" <polluks at web.de>
+0	beshort		0x0f00		AmigaOS bitmap font
+0	beshort		0x0f03		AmigaOS outline font
+0	belong		0x80001001	AmigaOS outline tag
+0	string		##\ version	catalog translation
+0	string		EMOD\0		Amiga E module
+8	string		ECXM\0		ECX module
+0	string/c	@database	AmigaGuide file
+
+# Amiga disk types
+# 
+0	string		RDSK		Rigid Disk Block
+>160	string		x		on %.24s
+0	string		DOS\0		Amiga DOS disk
+0	string		DOS\1		Amiga FFS disk
+0	string		DOS\2		Amiga Inter DOS disk
+0	string		DOS\3		Amiga Inter FFS disk
+0	string		DOS\4		Amiga Fastdir DOS disk
+0	string		DOS\5		Amiga Fastdir FFS disk
+0	string		KICK		Kickstart disk
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+0	string		LZX		LZX compressed archive (Amiga)
+
+
+#------------------------------------------------------------------------------
+# $File: animation,v 1.39 2009/09/27 19:02:12 christos Exp $
+# animation:  file(1) magic for animation/movie formats
+#
+# animation formats
+# MPEG, FLI, DL originally from vax at ccwf.cc.utexas.edu (VaX#n8)
+# FLC, SGI, Apple originally from Daniel Quinlan (quinlan at yggdrasil.com)
+
+# SGI and Apple formats
+0	string		MOVI		Silicon Graphics movie file
+!:mime	video/x-sgi-movie
+4       string          moov            Apple QuickTime
+!:mime	video/quicktime
+>12     string          mvhd            \b movie (fast start)
+>12     string          mdra            \b URL
+>12     string          cmov            \b movie (fast start, compressed header)
+>12     string          rmra            \b multiple URLs
+4       string          mdat            Apple QuickTime movie (unoptimized)
+!:mime	video/quicktime
+#4       string          wide            Apple QuickTime movie (unoptimized)
+#!:mime	video/quicktime
+#4       string          skip            Apple QuickTime movie (modified)
+#!:mime	video/quicktime
+#4       string          free            Apple QuickTime movie (modified)
+#!:mime	video/quicktime
+4       string          idsc            Apple QuickTime image (fast start)
+!:mime	image/x-quicktime
+#4       string          idat            Apple QuickTime image (unoptimized)
+#!:mime	image/x-quicktime
+4       string          pckg            Apple QuickTime compressed archive
+!:mime	application/x-quicktime-player
+4	string/W	jP		JPEG 2000 image
+!:mime	image/jp2
+4	string		ftyp		ISO Media
+>8	string		isom		\b, MPEG v4 system, version 1
+!:mime	video/mp4
+>8	string		iso2		\b, MPEG v4 system, part 12 revision
+>8	string		mp41		\b, MPEG v4 system, version 1
+!:mime	video/mp4
+>8	string		mp42		\b, MPEG v4 system, version 2
+!:mime	video/mp4
+>8	string		mp7t		\b, MPEG v4 system, MPEG v7 XML
+>8	string		mp7b		\b, MPEG v4 system, MPEG v7 binary XML
+>8	string/W	jp2		\b, JPEG 2000
+!:mime	image/jp2
+>8	string		3gp		\b, MPEG v4 system, 3GPP
+!:mime	video/3gpp
+>>11	byte		4		\b v4 (H.263/AMR GSM 6.10)
+>>11	byte		5		\b v5 (H.263/AMR GSM 6.10)
+>>11	byte		6		\b v6 (ITU H.264/AMR GSM 6.10)
+>8	string		mmp4		\b, MPEG v4 system, 3GPP Mobile
+!:mime	video/mp4
+>8	string		avc1		\b, MPEG v4 system, 3GPP JVT AVC
+!:mime	video/3gpp
+>8	string/W	M4A		\b, MPEG v4 system, iTunes AAC-LC
+!:mime	audio/mp4
+>8	string/W	M4V		\b, MPEG v4 system, iTunes AVC-LC
+!:mime	video/mp4
+>8	string/W	M4P		\b, MPEG v4 system, iTunes AES encrypted
+>8	string/W	M4B		\b, MPEG v4 system, iTunes bookmarked
+>8	string/W	qt		\b, Apple QuickTime movie
+!:mime	video/quicktime
+
+# MPEG sequences
+# Scans for all common MPEG header start codes
+0	 belong		    0x00000001     
+>4	 byte&0x1F	    0x07	   JVT NAL sequence, H.264 video
+>>5      byte               66             \b, baseline
+>>5      byte               77             \b, main
+>>5      byte               88             \b, extended
+>>7      byte               x              \b @ L %u
+0        belong&0xFFFFFF00  0x00000100     
+>3       byte               0xBA           MPEG sequence
+!:mime  video/mpeg
+>>4      byte               &0x40          \b, v2, program multiplex
+>>4      byte               ^0x40          \b, v1, system multiplex
+>3       byte               0xBB           MPEG sequence, v1/2, multiplex (missing pack header)
+>3       byte&0x1F          0x07           MPEG sequence, H.264 video
+>>4      byte               66             \b, baseline
+>>4      byte               77             \b, main
+>>4      byte               88             \b, extended
+>>6      byte               x              \b @ L %u
+>3       byte               0xB0           MPEG sequence, v4
+!:mime  video/mpeg4-generic
+>>5      belong             0x000001B5
+>>>9     byte               &0x80
+>>>>10   byte&0xF0          16             \b, video
+>>>>10   byte&0xF0          32             \b, still texture
+>>>>10   byte&0xF0          48             \b, mesh
+>>>>10   byte&0xF0          64             \b, face
+>>>9     byte&0xF8          8              \b, video
+>>>9     byte&0xF8          16             \b, still texture
+>>>9     byte&0xF8          24             \b, mesh
+>>>9     byte&0xF8          32             \b, face
+>>4      byte               1              \b, simple @ L1
+>>4      byte               2              \b, simple @ L2
+>>4      byte               3              \b, simple @ L3
+>>4      byte               4              \b, simple @ L0
+>>4      byte               17             \b, simple scalable @ L1
+>>4      byte               18             \b, simple scalable @ L2
+>>4      byte               33             \b, core @ L1
+>>4      byte               34             \b, core @ L2
+>>4      byte               50             \b, main @ L2
+>>4      byte               51             \b, main @ L3
+>>4      byte               53             \b, main @ L4
+>>4      byte               66             \b, n-bit @ L2
+>>4      byte               81             \b, scalable texture @ L1
+>>4      byte               97             \b, simple face animation @ L1
+>>4      byte               98             \b, simple face animation @ L2
+>>4      byte               99             \b, simple face basic animation @ L1
+>>4      byte               100            \b, simple face basic animation @ L2
+>>4      byte               113            \b, basic animation text @ L1
+>>4      byte               114            \b, basic animation text @ L2
+>>4      byte               129            \b, hybrid @ L1
+>>4      byte               130            \b, hybrid @ L2
+>>4      byte               145            \b, advanced RT simple @ L!
+>>4      byte               146            \b, advanced RT simple @ L2
+>>4      byte               147            \b, advanced RT simple @ L3
+>>4      byte               148            \b, advanced RT simple @ L4
+>>4      byte               161            \b, core scalable @ L1
+>>4      byte               162            \b, core scalable @ L2
+>>4      byte               163            \b, core scalable @ L3
+>>4      byte               177            \b, advanced coding efficiency @ L1
+>>4      byte               178            \b, advanced coding efficiency @ L2
+>>4      byte               179            \b, advanced coding efficiency @ L3
+>>4      byte               180            \b, advanced coding efficiency @ L4
+>>4      byte               193            \b, advanced core @ L1
+>>4      byte               194            \b, advanced core @ L2
+>>4      byte               209            \b, advanced scalable texture @ L1
+>>4      byte               210            \b, advanced scalable texture @ L2
+>>4      byte               211            \b, advanced scalable texture @ L3
+>>4      byte               225            \b, simple studio @ L1
+>>4      byte               226            \b, simple studio @ L2
+>>4      byte               227            \b, simple studio @ L3
+>>4      byte               228            \b, simple studio @ L4
+>>4      byte               229            \b, core studio @ L1
+>>4      byte               230            \b, core studio @ L2
+>>4      byte               231            \b, core studio @ L3
+>>4      byte               232            \b, core studio @ L4
+>>4      byte               240            \b, advanced simple @ L0
+>>4      byte               241            \b, advanced simple @ L1
+>>4      byte               242            \b, advanced simple @ L2
+>>4      byte               243            \b, advanced simple @ L3
+>>4      byte               244            \b, advanced simple @ L4
+>>4      byte               245            \b, advanced simple @ L5
+>>4      byte               247            \b, advanced simple @ L3b
+>>4      byte               248            \b, FGS @ L0
+>>4      byte               249            \b, FGS @ L1
+>>4      byte               250            \b, FGS @ L2
+>>4      byte               251            \b, FGS @ L3
+>>4      byte               252            \b, FGS @ L4
+>>4      byte               253            \b, FGS @ L5
+>3       byte               0xB5           MPEG sequence, v4
+>>4      byte               &0x80
+>>>5     byte&0xF0          16             \b, video (missing profile header)
+>>>5     byte&0xF0          32             \b, still texture (missing profile header)
+>>>5     byte&0xF0          48             \b, mesh (missing profile header)
+>>>5     byte&0xF0          64             \b, face (missing profile header)
+>>4      byte&0xF8          8              \b, video (missing profile header)
+>>4      byte&0xF8          16             \b, still texture (missing profile header)
+>>4      byte&0xF8          24             \b, mesh (missing profile header)
+>>4      byte&0xF8          32             \b, face (missing profile header)
+>3       byte               0xB3           MPEG sequence
+>>12     belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
+>>12     belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
+>>12     belong             0x000001B5     \b, v2,
+>>>16    byte&0x0F          1              \b HP
+>>>16    byte&0x0F          2              \b Spt
+>>>16    byte&0x0F          3              \b SNR
+>>>16    byte&0x0F          4              \b MP
+>>>16    byte&0x0F          5              \b SP
+>>>17    byte&0xF0          64             \b at HL
+>>>17    byte&0xF0          96             \b at H-14
+>>>17    byte&0xF0          128            \b at ML
+>>>17    byte&0xF0          160            \b at LL
+>>>17    byte               &0x08          \b progressive
+>>>17    byte               ^0x08          \b interlaced
+>>>17    byte&0x06          2              \b Y'CbCr 4:2:0 video
+>>>17    byte&0x06          4              \b Y'CbCr 4:2:2 video
+>>>17    byte&0x06          6              \b Y'CbCr 4:4:4 video
+>>11     byte               &0x02
+>>>75    byte               &0x01
+>>>>140  belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140  belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140  belong             0x000001B5     \b, v2,
+>>>>>144 byte&0x0F          1              \b HP
+>>>>>144 byte&0x0F          2              \b Spt
+>>>>>144 byte&0x0F          3              \b SNR
+>>>>>144 byte&0x0F          4              \b MP
+>>>>>144 byte&0x0F          5              \b SP
+>>>>>145 byte&0xF0          64             \b at HL
+>>>>>145 byte&0xF0          96             \b at H-14
+>>>>>145 byte&0xF0          128            \b at ML
+>>>>>145 byte&0xF0          160            \b at LL
+>>>>>145 byte               &0x08          \b progressive
+>>>>>145 byte               ^0x08          \b interlaced
+>>>>>145 byte&0x06          2              \b Y'CbCr 4:2:0 video
+>>>>>145 byte&0x06          4              \b Y'CbCr 4:2:2 video
+>>>>>145 byte&0x06          6              \b Y'CbCr 4:4:4 video
+>>76    belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
+>>76    belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
+>>76    belong             0x000001B5     \b, v2,
+>>>80   byte&0x0F          1              \b HP
+>>>80   byte&0x0F          2              \b Spt
+>>>80   byte&0x0F          3              \b SNR
+>>>80   byte&0x0F          4              \b MP
+>>>80   byte&0x0F          5              \b SP
+>>>81   byte&0xF0          64             \b at HL
+>>>81   byte&0xF0          96             \b at H-14
+>>>81   byte&0xF0          128            \b at ML
+>>>81   byte&0xF0          160            \b at LL
+>>>81   byte               &0x08          \b progressive
+>>>81   byte               ^0x08          \b interlaced
+>>>81   byte&0x06          2              \b Y'CbCr 4:2:0 video
+>>>81   byte&0x06          4              \b Y'CbCr 4:2:2 video
+>>>81   byte&0x06          6              \b Y'CbCr 4:4:4 video
+>>4      belong&0xFFFFFF00  0x78043800     \b, HD-TV 1920P
+>>>7     byte&0xF0          0x10           \b, 16:9
+>>4      belong&0xFFFFFF00  0x50002D00     \b, SD-TV 1280I
+>>>7     byte&0xF0          0x10           \b, 16:9
+>>4      belong&0xFFFFFF00  0x30024000     \b, PAL Capture
+>>>7     byte&0xF0          0x10           \b, 4:3
+>>4      beshort&0xFFF0     0x2C00         \b, 4CIF
+>>>5     beshort&0x0FFF     0x01E0         \b NTSC
+>>>5     beshort&0x0FFF     0x0240         \b PAL
+>>>7     byte&0xF0          0x20           \b, 4:3
+>>>7     byte&0xF0          0x30           \b, 16:9
+>>>7     byte&0xF0          0x40           \b, 11:5
+>>>7     byte&0xF0          0x80           \b, PAL 4:3
+>>>7     byte&0xF0          0xC0           \b, NTSC 4:3
+>>4      belong&0xFFFFFF00  0x2801E000     \b, LD-TV 640P
+>>>7     byte&0xF0          0x10           \b, 4:3
+>>4      belong&0xFFFFFF00  0x1400F000     \b, 320x240
+>>>7     byte&0xF0          0x10           \b, 4:3
+>>4      belong&0xFFFFFF00  0x0F00A000     \b, 240x160
+>>>7     byte&0xF0          0x10           \b, 4:3
+>>4      belong&0xFFFFFF00  0x0A007800     \b, 160x120
+>>>7     byte&0xF0          0x10           \b, 4:3
+>>4      beshort&0xFFF0     0x1600         \b, CIF
+>>>5     beshort&0x0FFF     0x00F0         \b NTSC
+>>>5     beshort&0x0FFF     0x0120         \b PAL
+>>>7     byte&0xF0          0x20           \b, 4:3
+>>>7     byte&0xF0          0x30           \b, 16:9
+>>>7     byte&0xF0          0x40           \b, 11:5
+>>>7     byte&0xF0          0x80           \b, PAL 4:3
+>>>7     byte&0xF0          0xC0           \b, NTSC 4:3
+>>>5     beshort&0x0FFF     0x0240         \b PAL 625
+>>>>7    byte&0xF0          0x20           \b, 4:3
+>>>>7    byte&0xF0          0x30           \b, 16:9
+>>>>7    byte&0xF0          0x40           \b, 11:5
+>>4      beshort&0xFFF0     0x2D00         \b, CCIR/ITU
+>>>5     beshort&0x0FFF     0x01E0         \b NTSC 525
+>>>5     beshort&0x0FFF     0x0240         \b PAL 625
+>>>7     byte&0xF0          0x20           \b, 4:3
+>>>7     byte&0xF0          0x30           \b, 16:9
+>>>7     byte&0xF0          0x40           \b, 11:5
+>>4      beshort&0xFFF0     0x1E00         \b, SVCD
+>>>5     beshort&0x0FFF     0x01E0         \b NTSC 525
+>>>5     beshort&0x0FFF     0x0240         \b PAL 625
+>>>7     byte&0xF0          0x20           \b, 4:3
+>>>7     byte&0xF0          0x30           \b, 16:9
+>>>7     byte&0xF0          0x40           \b, 11:5
+>>7      byte&0x0F          1              \b, 23.976 fps
+>>7      byte&0x0F          2              \b, 24 fps
+>>7      byte&0x0F          3              \b, 25 fps
+>>7      byte&0x0F          4              \b, 29.97 fps
+>>7      byte&0x0F          5              \b, 30 fps
+>>7      byte&0x0F          6              \b, 50 fps
+>>7      byte&0x0F          7              \b, 59.94 fps
+>>7      byte&0x0F          8              \b, 60 fps
+>>11     byte               &0x04          \b, Constrained
+
+# MPEG ADTS Audio (*.mpx/mxa/aac)
+# from dreesen at math.fu-berlin.de
+# modified to fully support MPEG ADTS
+
+# MP3, M1A
+# modified by Joerg Jenderek
+# GRR the original test are too common for many DOS files
+# so don't accept as MP3 until we've tested the rate
+0       beshort&0xFFFE  0xFFFA
+# rates
+>2      byte&0xF0       0x10           MPEG ADTS, layer III, v1,  32 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x20           MPEG ADTS, layer III, v1,  40 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x30           MPEG ADTS, layer III, v1,  48 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x40           MPEG ADTS, layer III, v1,  56 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x50           MPEG ADTS, layer III, v1,  64 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x60           MPEG ADTS, layer III, v1,  80 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x70           MPEG ADTS, layer III, v1,  96 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x80           MPEG ADTS, layer III, v1, 112 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0x90           MPEG ADTS, layer III, v1, 128 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0xA0           MPEG ADTS, layer III, v1, 160 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0xB0           MPEG ADTS, layer III, v1, 192 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0xC0           MPEG ADTS, layer III, v1, 224 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0xD0           MPEG ADTS, layer III, v1, 256 kbps
+!:mime	audio/mpeg
+>2      byte&0xF0       0xE0           MPEG ADTS, layer III, v1, 320 kbps
+!:mime	audio/mpeg
+# timing
+>2      byte&0x0C       0x00           \b, 44.1 kHz
+>2      byte&0x0C       0x04           \b, 48 kHz
+>2      byte&0x0C       0x08           \b, 32 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MP2, M1A
+0       beshort&0xFFFE  0xFFFC         MPEG ADTS, layer II, v1
+!:mime	audio/mpeg
+# rates
+>2      byte&0xF0       0x10           \b,  32 kbps
+>2      byte&0xF0       0x20           \b,  48 kbps
+>2      byte&0xF0       0x30           \b,  56 kbps
+>2      byte&0xF0       0x40           \b,  64 kbps
+>2      byte&0xF0       0x50           \b,  80 kbps
+>2      byte&0xF0       0x60           \b,  96 kbps
+>2      byte&0xF0       0x70           \b, 112 kbps
+>2      byte&0xF0       0x80           \b, 128 kbps
+>2      byte&0xF0       0x90           \b, 160 kbps
+>2      byte&0xF0       0xA0           \b, 192 kbps
+>2      byte&0xF0       0xB0           \b, 224 kbps
+>2      byte&0xF0       0xC0           \b, 256 kbps
+>2      byte&0xF0       0xD0           \b, 320 kbps
+>2      byte&0xF0       0xE0           \b, 384 kbps
+# timing
+>2      byte&0x0C       0x00           \b, 44.1 kHz
+>2      byte&0x0C       0x04           \b, 48 kHz
+>2      byte&0x0C       0x08           \b, 32 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MPA, M1A
+# updated by Joerg Jenderek
+# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448
+# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)
+# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries
+#0	beshort&0xFFFE		0xFFFE	
+#>2	ubyte&0xF0	>0x0F		
+#>>2	ubyte&0xF0	<0xE1		MPEG ADTS, layer I, v1
+## rate
+#>>>2      byte&0xF0       0x10           \b,  32 kbps
+#>>>2      byte&0xF0       0x20           \b,  64 kbps
+#>>>2      byte&0xF0       0x30           \b,  96 kbps
+#>>>2      byte&0xF0       0x40           \b, 128 kbps
+#>>>2      byte&0xF0       0x50           \b, 160 kbps
+#>>>2      byte&0xF0       0x60           \b, 192 kbps
+#>>>2      byte&0xF0       0x70           \b, 224 kbps
+#>>>2      byte&0xF0       0x80           \b, 256 kbps
+#>>>2      byte&0xF0       0x90           \b, 288 kbps
+#>>>2      byte&0xF0       0xA0           \b, 320 kbps
+#>>>2      byte&0xF0       0xB0           \b, 352 kbps
+#>>>2      byte&0xF0       0xC0           \b, 384 kbps
+#>>>2      byte&0xF0       0xD0           \b, 416 kbps
+#>>>2      byte&0xF0       0xE0           \b, 448 kbps
+## timing
+#>>>2      byte&0x0C       0x00           \b, 44.1 kHz
+#>>>2      byte&0x0C       0x04           \b, 48 kHz
+#>>>2      byte&0x0C       0x08           \b, 32 kHz
+## channels/options
+#>>>3      byte&0xC0       0x00           \b, Stereo
+#>>>3      byte&0xC0       0x40           \b, JntStereo
+#>>>3      byte&0xC0       0x80           \b, 2x Monaural
+#>>>3      byte&0xC0       0xC0           \b, Monaural
+##>1     byte            ^0x01          \b, Data Verify
+##>2     byte            &0x02          \b, Packet Pad
+##>2     byte            &0x01          \b, Custom Flag
+##>3     byte            &0x08          \b, Copyrighted
+##>3     byte            &0x04          \b, Original Source
+##>3     byte&0x03       1              \b, NR: 50/15 ms
+##>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MP3, M2A
+0       beshort&0xFFFE  0xFFF2         MPEG ADTS, layer III, v2
+!:mime	audio/mpeg
+# rate
+>2      byte&0xF0       0x10           \b,   8 kbps
+>2      byte&0xF0       0x20           \b,  16 kbps
+>2      byte&0xF0       0x30           \b,  24 kbps
+>2      byte&0xF0       0x40           \b,  32 kbps
+>2      byte&0xF0       0x50           \b,  40 kbps
+>2      byte&0xF0       0x60           \b,  48 kbps
+>2      byte&0xF0       0x70           \b,  56 kbps
+>2      byte&0xF0       0x80           \b,  64 kbps
+>2      byte&0xF0       0x90           \b,  80 kbps
+>2      byte&0xF0       0xA0           \b,  96 kbps
+>2      byte&0xF0       0xB0           \b, 112 kbps
+>2      byte&0xF0       0xC0           \b, 128 kbps
+>2      byte&0xF0       0xD0           \b, 144 kbps
+>2      byte&0xF0       0xE0           \b, 160 kbps
+# timing
+>2      byte&0x0C       0x00           \b, 22.05 kHz
+>2      byte&0x0C       0x04           \b, 24 kHz
+>2      byte&0x0C       0x08           \b, 16 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MP2, M2A
+0       beshort&0xFFFE  0xFFF4         MPEG ADTS, layer II, v2
+# rate 
+>2      byte&0xF0       0x10           \b,   8 kbps
+>2      byte&0xF0       0x20           \b,  16 kbps 
+>2      byte&0xF0       0x30           \b,  24 kbps
+>2      byte&0xF0       0x40           \b,  32 kbps
+>2      byte&0xF0       0x50           \b,  40 kbps
+>2      byte&0xF0       0x60           \b,  48 kbps
+>2      byte&0xF0       0x70           \b,  56 kbps
+>2      byte&0xF0       0x80           \b,  64 kbps
+>2      byte&0xF0       0x90           \b,  80 kbps
+>2      byte&0xF0       0xA0           \b,  96 kbps
+>2      byte&0xF0       0xB0           \b, 112 kbps
+>2      byte&0xF0       0xC0           \b, 128 kbps
+>2      byte&0xF0       0xD0           \b, 144 kbps
+>2      byte&0xF0       0xE0           \b, 160 kbps
+# timing
+>2      byte&0x0C       0x00           \b, 22.05 kHz
+>2      byte&0x0C       0x04           \b, 24 kHz
+>2      byte&0x0C       0x08           \b, 16 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MPA, M2A
+0       beshort&0xFFFE  0xFFF6         MPEG ADTS, layer I, v2
+!:mime	audio/mpeg
+# rate
+>2      byte&0xF0       0x10           \b,  32 kbps
+>2      byte&0xF0       0x20           \b,  48 kbps
+>2      byte&0xF0       0x30           \b,  56 kbps
+>2      byte&0xF0       0x40           \b,  64 kbps
+>2      byte&0xF0       0x50           \b,  80 kbps
+>2      byte&0xF0       0x60           \b,  96 kbps
+>2      byte&0xF0       0x70           \b, 112 kbps
+>2      byte&0xF0       0x80           \b, 128 kbps
+>2      byte&0xF0       0x90           \b, 144 kbps
+>2      byte&0xF0       0xA0           \b, 160 kbps
+>2      byte&0xF0       0xB0           \b, 176 kbps
+>2      byte&0xF0       0xC0           \b, 192 kbps
+>2      byte&0xF0       0xD0           \b, 224 kbps
+>2      byte&0xF0       0xE0           \b, 256 kbps
+# timing
+>2      byte&0x0C       0x00           \b, 22.05 kHz
+>2      byte&0x0C       0x04           \b, 24 kHz
+>2      byte&0x0C       0x08           \b, 16 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# MP3, M25A
+0       beshort&0xFFFE  0xFFE2         MPEG ADTS, layer III,  v2.5
+!:mime	audio/mpeg
+# rate  
+>2      byte&0xF0       0x10           \b,   8 kbps
+>2      byte&0xF0       0x20           \b,  16 kbps
+>2      byte&0xF0       0x30           \b,  24 kbps
+>2      byte&0xF0       0x40           \b,  32 kbps
+>2      byte&0xF0       0x50           \b,  40 kbps
+>2      byte&0xF0       0x60           \b,  48 kbps
+>2      byte&0xF0       0x70           \b,  56 kbps
+>2      byte&0xF0       0x80           \b,  64 kbps
+>2      byte&0xF0       0x90           \b,  80 kbps
+>2      byte&0xF0       0xA0           \b,  96 kbps
+>2      byte&0xF0       0xB0           \b, 112 kbps
+>2      byte&0xF0       0xC0           \b, 128 kbps
+>2      byte&0xF0       0xD0           \b, 144 kbps
+>2      byte&0xF0       0xE0           \b, 160 kbps
+# timing
+>2      byte&0x0C       0x00           \b, 11.025 kHz
+>2      byte&0x0C       0x04           \b, 12 kHz
+>2      byte&0x0C       0x08           \b, 8 kHz
+# channels/options
+>3      byte&0xC0       0x00           \b, Stereo
+>3      byte&0xC0       0x40           \b, JntStereo
+>3      byte&0xC0       0x80           \b, 2x Monaural
+>3      byte&0xC0       0xC0           \b, Monaural
+#>1     byte            ^0x01          \b, Data Verify
+#>2     byte            &0x02          \b, Packet Pad
+#>2     byte            &0x01          \b, Custom Flag
+#>3     byte            &0x08          \b, Copyrighted
+#>3     byte            &0x04          \b, Original Source
+#>3     byte&0x03       1              \b, NR: 50/15 ms
+#>3     byte&0x03       3              \b, NR: CCIT J.17
+
+# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
+
+# Stored AAC streams (instead of the MP4 format)
+0       string          ADIF           MPEG ADIF, AAC
+!:mime	audio/x-hx-aac-adif
+>4      byte            &0x80
+>>13    byte            &0x10          \b, VBR
+>>13    byte            ^0x10          \b, CBR
+>>16    byte&0x1E       0x02           \b, single stream
+>>16    byte&0x1E       0x04           \b, 2 streams
+>>16    byte&0x1E       0x06           \b, 3 streams
+>>16    byte            &0x08          \b, 4 or more streams
+>>16    byte            &0x10          \b, 8 or more streams
+>>4    byte            &0x80          \b, Copyrighted
+>>13   byte            &0x40          \b, Original Source
+>>13   byte            &0x20          \b, Home Flag
+>4      byte            ^0x80
+>>4     byte            &0x10          \b, VBR
+>>4     byte            ^0x10          \b, CBR
+>>7     byte&0x1E       0x02           \b, single stream
+>>7     byte&0x1E       0x04           \b, 2 streams
+>>7     byte&0x1E       0x06           \b, 3 streams
+>>7     byte            &0x08          \b, 4 or more streams
+>>7     byte            &0x10          \b, 8 or more streams
+>>4    byte            &0x40          \b, Original Stream(s)
+>>4    byte            &0x20          \b, Home Source
+
+# Live or stored single AAC stream (used with MPEG-2 systems)
+0       beshort&0xFFF6  0xFFF0         MPEG ADTS, AAC
+!:mime	audio/x-hx-aac-adts
+>1      byte            &0x08          \b, v2
+>1      byte            ^0x08          \b, v4
+# profile
+>>2     byte            &0xC0          \b LTP
+>2      byte&0xc0       0x00           \b Main
+>2      byte&0xc0       0x40           \b LC
+>2      byte&0xc0       0x80           \b SSR
+# timing
+>2      byte&0x3c       0x00           \b, 96 kHz
+>2      byte&0x3c       0x04           \b, 88.2 kHz
+>2      byte&0x3c       0x08           \b, 64 kHz
+>2      byte&0x3c       0x0c           \b, 48 kHz
+>2      byte&0x3c       0x10           \b, 44.1 kHz
+>2      byte&0x3c       0x14           \b, 32 kHz
+>2      byte&0x3c       0x18           \b, 24 kHz
+>2      byte&0x3c       0x1c           \b, 22.05 kHz
+>2      byte&0x3c       0x20           \b, 16 kHz
+>2      byte&0x3c       0x24           \b, 12 kHz
+>2      byte&0x3c       0x28           \b, 11.025 kHz
+>2      byte&0x3c       0x2c           \b, 8 kHz
+# channels
+>2      beshort&0x01c0  0x0040         \b, monaural
+>2      beshort&0x01c0  0x0080         \b, stereo
+>2      beshort&0x01c0  0x00c0         \b, stereo + center
+>2      beshort&0x01c0  0x0100         \b, stereo+center+LFE
+>2      beshort&0x01c0  0x0140         \b, surround
+>2      beshort&0x01c0  0x0180         \b, surround + LFE
+>2      beshort         &0x01C0        \b, surround + side
+#>1     byte            ^0x01           \b, Data Verify
+#>2     byte            &0x02           \b, Custom Flag
+#>3     byte            &0x20           \b, Original Stream
+#>3     byte            &0x10           \b, Home Source
+#>3     byte            &0x08           \b, Copyrighted
+
+# Live MPEG-4 audio streams (instead of RTP FlexMux)
+0       beshort&0xFFE0  0x56E0         MPEG-4 LOAS
+!:mime	audio/x-mp4a-latm
+#>1     beshort&0x1FFF  x              \b, %u byte packet
+>3      byte&0xE0       0x40
+>>4     byte&0x3C       0x04           \b, single stream
+>>4     byte&0x3C       0x08           \b, 2 streams
+>>4     byte&0x3C       0x0C           \b, 3 streams
+>>4     byte            &0x08          \b, 4 or more streams
+>>4     byte            &0x20          \b, 8 or more streams
+>3      byte&0xC0       0
+>>4     byte&0x78       0x08           \b, single stream
+>>4     byte&0x78       0x10           \b, 2 streams
+>>4     byte&0x78       0x18           \b, 3 streams
+>>4     byte            &0x20          \b, 4 or more streams
+>>4     byte            &0x40          \b, 8 or more streams
+# This magic isn't strong enough (matches plausible ISO-8859-1 text)
+#0       beshort         0x4DE1         MPEG-4 LO-EP audio stream
+#!:mime	audio/x-mp4a-latm
+
+# Summary: FLI animation format
+# Created by: Daniel Quinlan <quinlan at yggdrasil.com>
+# Modified by (1): Abel Cheung <abelcheung at gmail.com> (avoid over-generic detection)
+4	leshort		0xAF11
+# standard FLI always has 320x200 resolution and 8 bit color
+>8	leshort		320
+>>10	leshort		200
+>>>12	leshort		8			FLI animation, 320x200x8
+!:mime	video/x-fli
+>>>>6	leshort		x			\b, %d frames
+# frame speed is multiple of 1/70s
+>>>>16	leshort		x			\b, %d/70s per frame
+
+# Summary: FLC animation format
+# Created by: Daniel Quinlan <quinlan at yggdrasil.com>
+# Modified by (1): Abel Cheung <abelcheung at gmail.com> (avoid over-generic detection)
+4	leshort		0xAF12
+# standard FLC always use 8 bit color
+>12	leshort		8			FLC animation
+!:mime	video/x-flc
+>>8	leshort		x			\b, %d
+>>10	leshort		x			\bx%dx8
+>>6	uleshort	x			\b, %d frames
+>>16	uleshort	x			\b, %dms per frame
+
+# DL animation format
+# XXX - collision with most `mips' magic
+#
+# I couldn't find a real magic number for these, however, this
+# -appears- to work.  Note that it might catch other files, too, so be
+# careful!
+#
+# Note that title and author appear in the two 20-byte chunks
+# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
+# 255 (hex FF)!  The DL format is really bad.
+#
+#0	byte	1	DL version 1, medium format (160x100, 4 images/screen)
+#!:mime	video/x-unknown
+#>42	byte	x	- %d screens,
+#>43	byte	x	%d commands
+#0	byte	2	DL version 2
+#!:mime	video/x-unknown
+#>1	byte	1	- large format (320x200,1 image/screen),
+#>1	byte	2	- medium format (160x100,4 images/screen),
+#>1	byte	>2	- unknown format,
+#>42	byte	x	%d screens,
+#>43	byte	x	%d commands
+# Based on empirical evidence, DL version 3 have several nulls following the
+# \003.  Most of them start with non-null values at hex offset 0x34 or so.
+#0	string	\3\0\0\0\0\0\0\0\0\0\0\0	DL version 3
+
+# iso 13818 transport stream
+#
+# from Oskar Schirmer <schirmer at scara.com> Feb 3, 2001 (ISO 13818.1)
+# (the following is a little bit restrictive and works fine for a stream
+#  that starts with PAT properly. it won't work for stream data, that is
+#  cut from an input device data right in the middle, but this shouldn't
+#  disturb)
+# syncbyte      8 bit	0x47
+# error_ind     1 bit	-
+# payload_start 1 bit	1
+# priority      1 bit	-
+# PID          13 bit	0x0000
+# scrambling    2 bit	-
+# adaptfld_ctrl 2 bit	1 or 3
+# conti_count   4 bit	0
+0	belong&0xFF5FFF1F	0x47400010	MPEG transport stream data
+>188	byte			!0x47		CORRUPTED
+
+# DIF digital video file format <mpruett at sgi.com>
+0	belong&0xffffff00	0x1f070000      DIF
+>4	byte			&0x01		(DVCPRO) movie file
+>4	byte			^0x01		(DV) movie file
+>3	byte			&0x80		(PAL)
+>3	byte			^0x80		(NTSC)
+
+# Microsoft Advanced Streaming Format (ASF) <mpruett at sgi.com>
+0	belong			0x3026b275	Microsoft ASF
+!:mime  video/x-ms-asf
+
+# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
+0	string			\x8aMNG		MNG video data,
+!:mime	video/x-mng
+>4	belong			!0x0d0a1a0a	CORRUPTED,
+>4	belong			0x0d0a1a0a
+>>16    belong	x				%ld x
+>>20    belong	x				%ld
+
+# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
+0	string			\x8bJNG		JNG video data,
+!:mime	video/x-jng
+>4	belong			!0x0d0a1a0a	CORRUPTED,
+>4	belong			0x0d0a1a0a
+>>16    belong	x				%ld x
+>>20    belong	x				%ld
+
+# Vivo video (Wolfram Kleff)
+3	string		\x0D\x0AVersion:Vivo	Vivo video data
+
+# VRML (Virtual Reality Modelling Language)
+0       string/w        #VRML\ V1.0\ ascii	VRML 1 file
+!:mime	model/vrml
+0	string/w	#VRML\ V2.0\ utf8	ISO/IEC 14772 VRML 97 file
+!:mime	model/vrml
+
+# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]
+# From Michel Briand <michelbriand at free.fr>
+0	string		\<?xml\ version="
+!:strength +1
+>20	search/1000/cw  \<!DOCTYPE\ X3D		X3D (Extensible 3D) model xml text
+!:mime model/x3d
+
+#---------------------------------------------------------------------------
+# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
+# From Mark Sheppard <msheppard at climax.co.uk>, 2002-10-03
+#
+0	string		HVQM4		%s
+>6	string		>\0		v%s
+>0	byte		x		GameCube movie,
+>0x34	ubeshort	x		%d x
+>0x36	ubeshort	x		%d,
+>0x26	ubeshort	x		%dµs,
+>0x42	ubeshort	0		no audio
+>0x42	ubeshort	>0		%dHz audio
+
+# From: "Stefan A. Haubenthal" <polluks at web.de>
+0	string		DVDVIDEO-VTS	Video title set,
+>0x21	byte		x		v%x
+0	string		DVDVIDEO-VMG	Video manager,
+>0x21	byte		x		v%x
+
+# From: Behan Webster <behanw at websterwood.com>
+# NuppelVideo used by Mythtv (*.nuv)
+# Note: there are two identical stanzas here differing only in the
+# initial string matched. It used to be done with a regex, but we're
+# trying to get rid of those.
+0	string		NuppelVideo	MythTV NuppelVideo
+>12	string		x		v%s
+>20	lelong		x		(%d
+>24	lelong		x		\bx%d),
+>36	string		P		\bprogressive,
+>36	string		I		\binterlaced,
+>40	ledouble	x		\baspect:%.2f,
+>48	ledouble	x		\bfps:%.2f
+0	string		MythTV		MythTV NuppelVideo
+>12	string		x		v%s
+>20	lelong		x		(%d
+>24	lelong		x		\bx%d),
+>36	string		P		\bprogressive,
+>36	string		I		\binterlaced,
+>40	ledouble	x		\baspect:%.2f,
+>48	ledouble	x		\bfps:%.2f
+
+#						MPEG file
+# MPEG sequences
+# FIXME: This section is from the old magic.mime file and needs integrating with the rest
+0       belong             0x000001BA
+>4      byte               &0x40
+!:mime	video/mp2p
+>4      byte               ^0x40
+!:mime	video/mpeg
+0       belong             0x000001BB
+!:mime	video/mpeg
+0       belong             0x000001B0
+!:mime	video/mp4v-es
+0       belong             0x000001B5
+!:mime	video/mp4v-es
+0       belong             0x000001B3
+!:mime	video/mpv
+0       belong&0xFF5FFF1F  0x47400010
+!:mime	video/mp2t
+0       belong             0x00000001
+>4      byte&0x1F	   0x07
+!:mime	video/h264
+
+# Type: Bink Video
+# URL:  http://wiki.multimedia.cx/index.php?title=3DBink_Container
+# From: <hoehle at users.sourceforge.net>  2008-07-18
+0	string		BIK	Bink Video
+>3	regex		=[a-z]	rev.%s
+#>4	ulelong		x	size %d
+>20	ulelong		x	\b, %d
+>24	ulelong		x	\bx%d
+>8	ulelong		x	\b, %d frames
+>32	ulelong		x	at rate %d/
+>28	ulelong		>1	\b%d
+>40	ulelong		=0	\b, no audio
+>40	ulelong		!0	\b, %d audio track
+>>40	ulelong		!1	\bs
+# follow properties of the first audio track only
+>>48	uleshort	x	%dHz
+>>51	byte&0x20	0	mono
+>>51	byte&0x20	!0	stereo
+#>>51	byte&0x10	0	FFT
+#>>51	byte&0x10	!0	DCT
+
+#------------------------------------------------------------------------------
+# $File: apl,v 1.6 2009/09/19 16:28:07 christos Exp $
+# apl:  file(1) magic for APL (see also "pdp" and "vax" for other APL
+#       workspaces)
+#
+0	long		0100554		APL workspace (Ken's original?)
+
+#------------------------------------------------------------------------------
+# $File: apple,v 1.23 2009/09/19 16:28:08 christos Exp $
+# apple:  file(1) magic for Apple file formats
+#
+0	search/1	FiLeStArTfIlEsTaRt	binscii (apple ][) text
+0	string		\x0aGL			Binary II (apple ][) data
+0	string		\x76\xff		Squeezed (apple ][) data
+0	string		NuFile			NuFile archive (apple ][) data
+0	string		N\xf5F\xe9l\xe5		NuFile archive (apple ][) data
+0	belong		0x00051600		AppleSingle encoded Macintosh file
+0	belong		0x00051607		AppleDouble encoded Macintosh file
+
+# Type: Apple Emulator 2IMG format
+# From: Radek Vokal <rvokal at redhat.com>
+0	string		2IMG	Apple ][ 2IMG Disk Image
+>4	string		XGS!	\b, XGS
+>4	string		CTKG	\b, Catakig
+>4	string		ShIm	\b, Sheppy's ImageMaker
+>4	string		WOOF	\b, Sweet 16
+>4	string		B2TR	\b, Bernie ][ the Rescue
+>4	string		!nfc	\b, ASIMOV2
+>4	string		x	\b, Unknown Format
+>0xc	byte		00	\b, DOS 3.3 sector order
+>>0x10	byte		00	\b, Volume 254
+>>0x10	byte&0x7f	x	\b, Volume %u
+>0xc	byte		01	\b, ProDOS sector order
+>>0x14	short		x	\b, %u Blocks
+>0xc	byte		02	\b, NIB data
+
+# magic for Newton PDA package formats
+# from Ruda Moura <ruda at helllabs.org>
+0	string	package0	Newton package, NOS 1.x,
+>12	belong	&0x80000000	AutoRemove,
+>12	belong	&0x40000000	CopyProtect,
+>12	belong	&0x10000000	NoCompression,
+>12	belong	&0x04000000	Relocation,
+>12	belong	&0x02000000	UseFasterCompression,
+>16	belong	x		version %d
+
+0	string	package1	Newton package, NOS 2.x,
+>12	belong	&0x80000000	AutoRemove,
+>12	belong	&0x40000000	CopyProtect,
+>12	belong	&0x10000000	NoCompression,
+>12	belong	&0x04000000	Relocation,
+>12	belong	&0x02000000	UseFasterCompression,
+>16	belong	x		version %d
+
+0	string	package4	Newton package,
+>8	byte	8		NOS 1.x,
+>8	byte	9		NOS 2.x,
+>12	belong	&0x80000000	AutoRemove,
+>12	belong	&0x40000000	CopyProtect,
+>12	belong	&0x10000000	NoCompression,
+
+# The following entries for the Apple II are for files that have
+# been transferred as raw binary data from an Apple, without having
+# been encapsulated by any of the above archivers.
+#
+# In general, Apple II formats are hard to identify because Apple DOS
+# and especially Apple ProDOS have strong typing in the file system and
+# therefore programmers never felt much need to include type information
+# in the files themselves.
+#
+# Eric Fischer <enf at pobox.com>
+
+# AppleWorks word processor:
+#
+# This matches the standard tab stops for an AppleWorks file, but if
+# a file has a tab stop set in the first four columns this will fail.
+#
+# The "O" is really the magic number, but that's so common that it's
+# necessary to check the tab stops that follow it to avoid false positives.
+
+4       string          O====   AppleWorks word processor data
+>85     byte&0x01       >0      \b, zoomed
+>90     byte&0x01       >0      \b, paginated
+>92     byte&0x01       >0      \b, with mail merge
+#>91    byte            x       \b, left margin %d
+
+# AppleWorks database:
+#
+# This isn't really a magic number, but it's the closest thing to one
+# that I could find.  The 1 and 2 really mean "order in which you defined
+# categories" and "left to right, top to bottom," respectively; the D and R
+# mean that the cursor should move either down or right when you press Return.
+
+#30	string		\x01D	AppleWorks database data
+#30	string		\x02D	AppleWorks database data
+#30	string		\x01R	AppleWorks database data
+#30	string		\x02R	AppleWorks database data
+
+# AppleWorks spreadsheet:
+#
+# Likewise, this isn't really meant as a magic number.  The R or C means
+# row- or column-order recalculation; the A or M means automatic or manual
+# recalculation.
+
+#131	string		RA	AppleWorks spreadsheet data
+#131	string		RM	AppleWorks spreadsheet data
+#131	string		CA	AppleWorks spreadsheet data
+#131	string		CM	AppleWorks spreadsheet data
+
+# Applesoft BASIC:
+#
+# This is incredibly sloppy, but will be true if the program was
+# written at its usual memory location of 2048 and its first line
+# number is less than 256.  Yuck.
+
+0       belong&0xff00ff 0x80000 Applesoft BASIC program data
+#>2     leshort         x       \b, first line number %d
+
+# ORCA/EZ assembler:
+# 
+# This will not identify ORCA/M source files, since those have
+# some sort of date code instead of the two zero bytes at 6 and 7
+# XXX Conflicts with ELF
+#4       belong&0xff00ffff       0x01000000      ORCA/EZ assembler source data
+#>5      byte                    x               \b, build number %d
+
+# Broderbund Fantavision
+#
+# I don't know what these values really mean, but they seem to recur.
+# Will they cause too many conflicts?
+
+# Probably :-)
+#2	belong&0xFF00FF		0x040008	Fantavision movie data
+
+# Some attempts at images.
+#
+# These are actually just bit-for-bit dumps of the frame buffer, so
+# there's really no reasonably way to distinguish them except for their
+# address (if preserved) -- 8192 or 16384 -- and their length -- 8192
+# or, occasionally, 8184.
+#
+# Nevertheless this will manage to catch a lot of images that happen
+# to have a solid-colored line at the bottom of the screen.
+
+# GRR: Magic too weak
+#8144	string	\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F	Apple II image with white background
+#8144	string	\x55\x2A\x55\x2A\x55\x2A\x55\x2A	Apple II image with purple background
+#8144	string	\x2A\x55\x2A\x55\x2A\x55\x2A\x55	Apple II image with green background
+#8144	string	\xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA	Apple II image with blue background
+#8144	string	\xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5	Apple II image with orange background
+
+# Beagle Bros. Apple Mechanic fonts
+
+0	belong&0xFF00FFFF	0x6400D000	Apple Mechanic font
+
+# Apple Universal Disk Image Format (UDIF) - dmg files.
+# From Johan Gade.
+# These entries are disabled for now until we fix the following issues.
+#
+# Note there might be some problems with the "VAX COFF executable" 
+# entry. Note this entry should be placed before the mac filesystem section, 
+# particularly the "Apple Partition data" entry.
+#
+# The intended meaning of these tests is, that the file is only of the 
+# specified type if both of the lines are correct - i.e. if the first
+# line matches and the second doesn't then it is not of that type.
+#
+#0	long	0x7801730d
+#>4	long	0x62626060	UDIF read-only zlib-compressed image (UDZO)
+#
+# Note that this entry is recognized correctly by the "Apple Partition 
+# data" entry - however since this entry is more specific - this
+# information seems to be more useful.
+#0	long	0x45520200
+#>0x410	string	disk\ image	UDIF read/write image (UDRW)
+
+# From: Toby Peterson <toby at apple.com>
+0	string	bplist00	Apple binary property list
+
+# Apple binary property list (bplist)
+#  Assumes version bytes are hex.
+#  Provides content hints for version 0 files. Assumes that the root
+#  object is the first object (true for CoreFoundation implementation).
+# From: David Remahl <dremahl at apple.com>
+0		string	bplist
+>6		byte	x	\bCoreFoundation binary property list data, version 0x%c
+>>7		byte	x	\b%c
+>6		string		00		\b
+>>8		byte&0xF0	0x00	\b
+>>>8	byte&0x0F	0x00	\b, root type: null
+>>>8	byte&0x0F	0x08	\b, root type: false boolean
+>>>8	byte&0x0F	0x09	\b, root type: true boolean
+>>8		byte&0xF0	0x10	\b, root type: integer
+>>8		byte&0xF0	0x20	\b, root type: real
+>>8		byte&0xF0	0x30	\b, root type: date
+>>8		byte&0xF0	0x40    \b, root type: data
+>>8		byte&0xF0	0x50	\b, root type: ascii string
+>>8		byte&0xF0	0x60	\b, root type: unicode string
+>>8		byte&0xF0	0x80	\b, root type: uid (CORRUPT)
+>>8		byte&0xF0	0xa0	\b, root type: array
+>>8		byte&0xF0	0xd0	\b, root type: dictionary
+
+# Apple/NeXT typedstream data
+#  Serialization format used by NeXT and Apple for various
+#  purposes in YellowStep/Cocoa, including some nib files.
+# From: David Remahl <dremahl at apple.com>
+2		string		typedstream	NeXT/Apple typedstream data, big endian
+>0		byte		x		\b, version %hhd
+>0		byte		<5		\b
+>>13	byte		0x81	\b
+>>>14	ubeshort	x		\b, system %hd
+2		string		streamtyped NeXT/Apple typedstream data, little endian
+>0		byte		x		\b, version %hhd
+>0		byte		<5		\b
+>>13	byte		0x81	\b
+>>>14	uleshort	x		\b, system %hd
+
+#------------------------------------------------------------------------------
+# CAF: Apple CoreAudio File Format
+#
+# Container format for high-end audio purposes.
+# From: David Remahl <dremahl at apple.com>
+#
+0	string		caff		CoreAudio Format audio file
+>4	beshort		<10		version %d
+>6	beshort		x
+
+
+#------------------------------------------------------------------------------
+# Keychain database files
+0	string		kych		Mac OS X Keychain File
+
+#------------------------------------------------------------------------------
+# Code Signing related file types
+0	belong		0xfade0c00	Mac OS X Code Requirement
+>8	belong		1			(opExpr)
+>4	belong		x			- %d bytes
+
+0	belong		0xfade0c01	Mac OS X Code Requirement Set
+>8	belong		>1			containing %d items
+>4	belong		x			- %d bytes
+
+0	belong		0xfade0c02	Mac OS X Code Directory
+>8	belong		x			version %x
+>12	belong		>0			flags 0x%x
+>4	belong		x			- %d bytes
+
+0	belong		0xfade0cc0	Mac OS X Detached Code Signature (non-executable)
+>4	belong		x			- %d bytes
+
+0	belong		0xfade0cc1	Mac OS X Detached Code Signature
+>8	belong		>1			(%d elements)
+>4	belong		x			- %d bytes
+
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# .vdi
+4	string innotek\ VirtualBox\ Disk\ Image %s
+
+#------------------------------------------------------------------------------
+# $File: applix,v 1.5 2009/09/19 16:28:08 christos Exp $
+# applix:  file(1) magic for Applixware
+# From: Peter Soos <sp at osb.hu>
+#
+0	string		*BEGIN		Applixware
+>7	string		WORDS			Words Document
+>7	string		GRAPHICS		Graphic
+>7	string		RASTER			Bitmap
+>7	string		SPREADSHEETS		Spreadsheet
+>7	string		MACRO			Macro
+>7	string		BUILDER			Builder Object
+
+#------------------------------------------------------------------------------
+# $File: archive,v 1.55 2009/12/04 15:00:47 christos Exp $
+# archive:  file(1) magic for archive formats (see also "msdos" for self-
+#           extracting compressed archives)
+#
+# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
+# pre-POSIX "tar" archives are handled in the C code.
+
+# POSIX tar archives
+257	string		ustar\0		POSIX tar archive
+!:mime	application/x-tar # encoding: posix
+257	string		ustar\040\040\0	GNU tar archive
+!:mime	application/x-tar # encoding: gnu
+
+# cpio archives
+#
+# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
+# The idea is to indicate archives produced on machines with the same
+# byte order as the machine running "file" with "cpio archive", and
+# to indicate archives produced on machines with the opposite byte order
+# from the machine running "file" with "byte-swapped cpio archive".
+#
+# The SVR4 "cpio(4)" hints that there are additional formats, but they
+# are defined as "short"s; I think all the new formats are
+# character-header formats and thus are strings, not numbers.
+0	short		070707		cpio archive
+!:mime	application/x-cpio
+0	short		0143561		byte-swapped cpio archive
+!:mime	application/x-cpio # encoding: swapped
+0	string		070707		ASCII cpio archive (pre-SVR4 or odc)
+0	string		070701		ASCII cpio archive (SVR4 with no CRC)
+0	string		070702		ASCII cpio archive (SVR4 with CRC)
+
+# Debian package (needs to go before regular portable archives)
+#
+0	string		=!<arch>\ndebian
+!:mime	application/x-debian-package
+>8	string		debian-split	part of multipart Debian package
+>8	string		debian-binary	Debian binary package
+>8	string		!debian
+>68	string		>\0		(format %s)
+# These next two lines do not work, because a bzip2 Debian archive
+# still uses gzip for the control.tar (first in the archive).  Only
+# data.tar varies, and the location of its filename varies too.
+# file/libmagic does not current have support for ascii-string based
+# (offsets) as of 2005-09-15.
+#>81	string		bz2		\b, uses bzip2 compression
+#>84	string		gz		\b, uses gzip compression
+#>136	ledate		x		created: %s
+
+# other archives
+0	long		0177555		very old archive
+0	short		0177555		very old PDP-11 archive
+0	long		0177545		old archive
+0	short		0177545		old PDP-11 archive
+0	long		0100554		apl workspace
+0	string		=<ar>		archive
+!:mime	application/x-archive
+
+# MIPS archive (needs to go before regular portable archives)
+#
+0	string	=!<arch>\n__________E	MIPS archive
+>20	string	U			with MIPS Ucode members
+>21	string	L			with MIPSEL members
+>21	string	B			with MIPSEB members
+>19	string	L			and an EL hash table
+>19	string	B			and an EB hash table
+>22	string	X			-- out of date
+
+0	search/1	-h-		Software Tools format archive text
+
+#
+# XXX - why are there multiple <ar> thingies?  Note that 0x213c6172 is
+# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
+#
+# 0	string		=!<arch>		current ar archive
+# 0	long		0x213c6172	archive file
+#
+# and for SVR1 archives, we have:
+#
+# 0	string		\<ar>		System V Release 1 ar archive
+# 0	string		=<ar>		archive
+#
+# XXX - did Aegis really store shared libraries, breakpointed modules,
+# and absolute code program modules in the same format as new-style
+# "ar" archives?
+#
+0	string		=!<arch>		current ar archive
+!:mime	application/x-archive
+>8	string		__.SYMDEF	random library
+>0	belong		=65538		- pre SR9.5
+>0	belong		=65539		- post SR9.5
+>0	beshort		2		- object archive
+>0	beshort		3		- shared library module
+>0	beshort		4		- debug break-pointed module
+>0	beshort		5		- absolute code program module
+0	string		\<ar>		System V Release 1 ar archive
+0	string		=<ar>		archive
+#
+# XXX - from "vax", which appears to collect a bunch of byte-swapped
+# thingies, to help you recognize VAX files on big-endian machines;
+# with "leshort", "lelong", and "string", that's no longer necessary....
+#
+0	belong		0x65ff0000	VAX 3.0 archive
+0	belong		0x3c61723e	VAX 5.0 archive
+#
+0	long		0x213c6172	archive file
+0	lelong		0177555		very old VAX archive
+0	leshort		0177555		very old PDP-11 archive
+#
+# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
+# be a random library (it said 0xff65 rather than 0177545).
+#
+0	lelong		0177545		old VAX archive
+>8	string		__.SYMDEF	random library
+0	leshort		0177545		old PDP-11 archive
+>8	string		__.SYMDEF	random library
+#
+# From "pdp" (but why a 4-byte quantity?)
+#
+0	lelong		0x39bed		PDP-11 old archive
+0	lelong		0x39bee		PDP-11 4.0 archive
+
+# ARC archiver, from Daniel Quinlan (quinlan at yggdrasil.com)
+#
+# The first byte is the magic (0x1a), byte 2 is the compression type for
+# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
+# filename of the first file (null terminated).  Since some types collide
+# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
+# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.
+0	lelong&0x8080ffff	0x0000081a	ARC archive data, dynamic LZW
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000091a	ARC archive data, squashed
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000021a	ARC archive data, uncompressed
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000031a	ARC archive data, packed
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000041a	ARC archive data, squeezed
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000061a	ARC archive data, crunched
+!:mime	application/x-arc
+# [JW] stuff taken from idarc, obviously ARC successors:
+0	lelong&0x8080ffff	0x00000a1a	PAK archive data
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000141a	ARC+ archive data
+!:mime	application/x-arc
+0	lelong&0x8080ffff	0x0000481a	HYP archive data
+!:mime	application/x-arc
+
+# Acorn archive formats (Disaster prone simpleton, m91dps at ecs.ox.ac.uk)
+# I can't create either SPARK or ArcFS archives so I have not tested this stuff
+# [GRR:  the original entries collide with ARC, above; replaced with combined
+#  version (not tested)]
+#0	byte		0x1a		RISC OS archive (spark format)
+0	string		\032archive	RISC OS archive (ArcFS format)
+0       string          Archive\000     RISC OS archive (ArcFS format)
+
+# All these were taken from idarc, many could not be verified. Unfortunately,
+# there were many low-quality sigs, i.e. easy to trigger false positives.
+# Please notify me of any real-world fishy/ambiguous signatures and I'll try
+# to get my hands on the actual archiver and see if I find something better. [JW]
+# probably many can be enhanced by finding some 0-byte or control char near the start
+
+# idarc calls this Crush/Uncompressed... *shrug*
+0	string	CRUSH Crush archive data
+# Squeeze It (.sqz)
+0	string	HLSQZ Squeeze It archive data
+# SQWEZ
+0	string	SQWEZ SQWEZ archive data
+# HPack (.hpk)
+0	string	HPAK HPack archive data
+# HAP
+0	string	\x91\x33HF HAP archive data
+# MD/MDCD
+0	string	MDmd MDCD archive data
+# LIM
+0	string	LIM\x1a LIM archive data
+# SAR
+3	string	LH5 SAR archive data
+# BSArc/BS2
+0	string	\212\3SB \0 BSArc/BS2 archive data
+# MAR
+2	string	=-ah MAR archive data
+# ACB
+0	belong&0x00f800ff	0x00800000 ACB archive data
+# CPZ
+# TODO, this is what idarc says: 0	string	\0\0\0 CPZ archive data
+# JRC
+0	string	JRchive JRC archive data
+# Quantum
+0	string	DS\0 Quantum archive data
+# ReSOF
+0	string	PK\3\6 ReSOF archive data
+# QuArk
+0	string	7\4 QuArk archive data
+# YAC
+14	string	YC YAC archive data
+# X1
+0	string	X1 X1 archive data
+0	string	XhDr X1 archive data
+# CDC Codec (.dqt)
+0	belong&0xffffe000	0x76ff2000 CDC Codec archive data
+# AMGC
+0	string	\xad6" AMGC archive data
+# NuLIB
+0	string	NõFélå NuLIB archive data
+# PakLeo
+0	string	LEOLZW PAKLeo archive data
+# ChArc
+0	string	SChF ChArc archive data
+# PSA
+0	string	PSA PSA archive data
+# CrossePAC
+0	string	DSIGDCC CrossePAC archive data
+# Freeze
+0	string	\x1f\x9f\x4a\x10\x0a Freeze archive data
+# KBoom
+0	string	¨MP¨ KBoom archive data
+# NSQ, must go after CDC Codec
+0	string	\x76\xff NSQ archive data
+# DPA
+0	string	Dirk\ Paehl DPA archive data
+# BA
+# TODO: idarc says "bytes 0-2 == bytes 3-5"
+# TTComp
+0	string	\0\6 TTComp archive data
+# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
+0	string	ESP ESP archive data
+# ZPack
+0	string	\1ZPK\1 ZPack archive data
+# Sky
+0	string	\xbc\x40 Sky archive data
+# UFA
+0	string	UFA UFA archive data
+# Dry
+0	string	=-H2O DRY archive data
+# FoxSQZ
+0	string	FOXSQZ FoxSQZ archive data
+# AR7
+0	string	,AR7 AR7 archive data
+# PPMZ
+0	string	PPMZ PPMZ archive data
+# MS Compress
+4	string	\x88\xf0\x27 MS Compress archive data
+# updated by Joerg Jenderek
+>9	string	\0		
+>>0	string	KWAJ		
+>>>7	string	\321\003	MS Compress archive data
+>>>>14	ulong	>0		\b, original size: %ld bytes
+>>>>18		ubyte	>0x65  	
+>>>>>18		string	x    	\b, was %.8s
+>>>>>(10.b-4)	string	x    	\b.%.3s
+# MP3 (archiver, not lossy audio compression)
+0	string	MP3\x1a MP3-Archiver archive data
+# ZET
+0	string	OZÝ ZET archive data
+# TSComp
+0	string	\x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data
+# ARQ
+0	string	gW\4\1 ARQ archive data
+# Squash
+3	string	OctSqu Squash archive data
+# Terse
+0	string	\5\1\1\0 Terse archive data
+# PUCrunch
+0	string	\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data
+# UHarc
+0	string	UHA UHarc archive data
+# ABComp
+0	string	\2AB ABComp archive data
+0	string	\3AB2 ABComp archive data
+# CMP
+0	string	CO\0 CMP archive data
+# Splint
+0	string	\x93\xb9\x06 Splint archive data
+# InstallShield
+0	string	 \x13\x5d\x65\x8c InstallShield Z archive Data
+# Gather
+1	string	GTH Gather archive data
+# BOA
+0	string	BOA BOA archive data
+# RAX
+0	string	ULEB\xa RAX archive data
+# Xtreme
+0	string	ULEB\0 Xtreme archive data
+# Pack Magic
+0	string	@â\1\0 Pack Magic archive data
+# BTS
+0	belong&0xfeffffff	0x1a034465 BTS archive data
+# ELI 5750
+0	string	Ora\  ELI 5750 archive data
+# QFC
+0	string	\x1aFC\x1a QFC archive data
+0	string	\x1aQF\x1a QFC archive data
+# PRO-PACK
+0	string	RNC PRO-PACK archive data
+# 777
+0	string	777 777 archive data
+# LZS221
+0	string	sTaC LZS221 archive data
+# HPA
+0	string	HPA HPA archive data
+# Arhangel
+0	string	LG Arhangel archive data
+# EXP1, uses bzip2
+0	string	0123456789012345BZh EXP1 archive data
+# IMP
+0	string	IMP\xa IMP archive data
+# NRV
+0	string	\x00\x9E\x6E\x72\x76\xFF NRV archive data
+# Squish
+0	string	\x73\xb2\x90\xf4 Squish archive data
+# Par
+0	string	PHILIPP Par archive data
+0	string	PAR Par archive data
+# HIT
+0	string	UB HIT archive data
+# SBX
+0	belong&0xfffff000	0x53423000 SBX archive data
+# NaShrink
+0	string	NSK NaShrink archive data
+# SAPCAR
+0	string	#\ CAR\ archive\ header SAPCAR archive data
+0	string	CAR\ 2.00RG SAPCAR archive data
+# Disintegrator
+0	string	DST Disintegrator archive data
+# ASD
+0	string	ASD ASD archive data
+# InstallShield CAB
+0	string	ISc( InstallShield CAB
+# TOP4
+0	string	T4\x1a TOP4 archive data
+# BatComp left out: sig looks like COM executable
+# so TODO: get real 4dos batcomp file and find sig
+# BlakHole
+0	string	BH\5\7 BlakHole archive data
+# BIX
+0	string	BIX0 BIX archive data
+# ChiefLZA
+0	string	ChfLZ ChiefLZA archive data
+# Blink
+0	string	Blink Blink archive data
+# Logitech Compress
+0	string	\xda\xfa Logitech Compress archive data
+# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)
+1	string	(C)\ STEPANYUK ARS-Sfx archive data
+# AKT/AKT32
+0	string	AKT32 AKT32 archive data
+0	string	AKT AKT archive data
+# NPack
+0	string	MSTSM NPack archive data
+# PFT
+0	string	\0\x50\0\x14 PFT archive data
+# SemOne
+0	string	SEM SemOne archive data
+# PPMD
+0	string	\x8f\xaf\xac\x84 PPMD archive data
+# FIZ
+0	string	FIZ FIZ archive data
+# MSXiE
+0	belong&0xfffff0f0	0x4d530000 MSXiE archive data
+# DeepFreezer
+0	belong&0xfffffff0	0x797a3030 DeepFreezer archive data
+# DC
+0	string	=<DC- DC archive data
+# TPac
+0	string	\4TPAC\3 TPac archive data
+# Ai
+0	string	Ai\1\1\0 Ai archive data
+0	string	Ai\1\0\0 Ai archive data
+# Ai32
+0	string	Ai\2\0 Ai32 archive data
+0	string	Ai\2\1 Ai32 archive data
+# SBC
+0	string	SBC SBC archive data
+# Ybs
+0	string	YBS Ybs archive data
+# DitPack
+0	string	\x9e\0\0 DitPack archive data
+# DMS
+0	string	DMS! DMS archive data
+# EPC
+0	string	\x8f\xaf\xac\x8c EPC archive data
+# VSARC
+0	string	VS\x1a VSARC archive data
+# PDZ
+0	string	PDZ PDZ archive data
+# ReDuq
+0	string	rdqx ReDuq archive data
+# GCA
+0	string	GCAX GCA archive data
+# PPMN
+0	string	pN PPMN archive data
+# WinImage
+3	string	WINIMAGE WinImage archive data
+# Compressia
+0	string	CMP0CMP Compressia archive data
+# UHBC
+0	string	UHB UHBC archive data
+# WinHKI
+0	string	\x61\x5C\x04\x05 WinHKI archive data
+# WWPack data file
+0	string	WWP WWPack archive data
+# BSN (BSA, PTS-DOS)
+0	string	\xffBSG BSN archive data
+1	string	\xffBSG BSN archive data
+3	string	\xffBSG BSN archive data
+1	string	\0\xae\2 BSN archive data
+1	string	\0\xae\3 BSN archive data
+1	string	\0\xae\7 BSN archive data
+# AIN
+0	string	\x33\x18 AIN archive data
+0	string	\x33\x17 AIN archive data
+# XPA32
+0	string	xpa\0\1 XPA32 archive data
+# SZip (TODO: doesn't catch all versions)
+0	string	SZ\x0a\4 SZip archive data
+# XPack DiskImage
+0	string	jm XPack DiskImage archive data
+# XPack Data
+0	string	xpa XPack archive data
+# XPack Single Data
+0	string	Í\ jm XPack single archive data
+
+# TODO: missing due to unknown magic/magic at end of file:
+#DWC
+#ARG
+#ZAR
+#PC/3270
+#InstallIt
+#RKive
+#RK
+#XPack Diskimage
+
+# These were inspired by idarc, but actually verified
+# Dzip archiver (.dz)
+0	string	DZ Dzip archive data
+>2	byte	x \b, version %i
+>3	byte	x \b.%i
+# ZZip archiver (.zz)
+0	string	ZZ\ \0\0 ZZip archive data
+0	string	ZZ0 ZZip archive data
+# PAQ archiver (.paq)
+0	string	\xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data
+0	string	PAQ PAQ archive data
+>3	byte&0xf0	0x30
+>>3	byte	x (v%c)
+# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
+0xe	string	\x1aJar\x1b JAR (ARJ Software, Inc.) archive data
+0	string	JARCS JAR (ARJ Software, Inc.) archive data
+
+# ARJ archiver (jason at jarthur.Claremont.EDU)
+0	leshort		0xea60		ARJ archive data
+!:mime	application/x-arj
+>5	byte		x		\b, v%d,
+>8	byte		&0x04		multi-volume,
+>8	byte		&0x10		slash-switched,
+>8	byte		&0x20		backup,
+>34	string		x		original name: %s,
+>7	byte		0		os: MS-DOS
+>7	byte		1		os: PRIMOS
+>7	byte		2		os: Unix
+>7	byte		3		os: Amiga
+>7	byte		4		os: Macintosh
+>7	byte		5		os: OS/2
+>7	byte		6		os: Apple ][ GS
+>7	byte		7		os: Atari ST
+>7	byte		8		os: NeXT
+>7	byte		9		os: VAX/VMS
+>3	byte		>0		%d]
+# [JW] idarc says this is also possible
+2	leshort		0xea60		ARJ archive data
+
+# HA archiver (Greg Roelofs, newt at uchicago.edu)
+# This is a really bad format. A file containing HAWAII will match this...
+#0	string		HA		HA archive data,
+#>2	leshort		=1		1 file,
+#>2	leshort		>1		%u files,
+#>4	byte&0x0f	=0		first is type CPY
+#>4	byte&0x0f	=1		first is type ASC
+#>4	byte&0x0f	=2		first is type HSC
+#>4	byte&0x0f	=0x0e		first is type DIR
+#>4	byte&0x0f	=0x0f		first is type SPECIAL
+# suggestion: at least identify small archives (<1024 files)
+0  belong&0xffff00fc 0x48410000 HA archive data
+>2	leshort		=1		1 file,
+>2	leshort		>1		%u files,
+>4	byte&0x0f	=0		first is type CPY
+>4	byte&0x0f	=1		first is type ASC
+>4	byte&0x0f	=2		first is type HSC
+>4	byte&0x0f	=0x0e		first is type DIR
+>4	byte&0x0f	=0x0f		first is type SPECIAL
+
+# HPACK archiver (Peter Gutmann, pgut1 at cs.aukuni.ac.nz)
+0	string		HPAK		HPACK archive data
+
+# JAM Archive volume format, by Dmitry.Kohmanyuk at UA.net
+0	string		\351,\001JAM\ 		JAM archive,
+>7	string		>\0			version %.4s
+>0x26	byte		=0x27			-
+>>0x2b	string          >\0			label %.11s,
+>>0x27	lelong		x			serial %08x,
+>>0x36	string		>\0			fstype %.8s
+
+# LHARC/LHA archiver (Greg Roelofs, newt at uchicago.edu)
+2	string		-lh0-		LHarc 1.x/ARX archive data [lh0]
+!:mime	application/x-lharc
+2	string		-lh1-		LHarc 1.x/ARX archive data [lh1]
+!:mime	application/x-lharc
+2	string		-lz4-		LHarc 1.x archive data [lz4]
+!:mime	application/x-lharc
+2	string		-lz5-		LHarc 1.x archive data [lz5]
+!:mime	application/x-lharc
+#	[never seen any but the last; -lh4- reported in comp.compression:]
+2	string		-lzs-		LHa/LZS archive data [lzs]
+!:mime	application/x-lha
+2	string		-lh\40-		LHa 2.x? archive data [lh ]
+!:mime	application/x-lha
+2	string		-lhd-		LHa 2.x? archive data [lhd]
+!:mime	application/x-lha
+2	string		-lh2-		LHa 2.x? archive data [lh2]
+!:mime	application/x-lha
+2	string		-lh3-		LHa 2.x? archive data [lh3]
+!:mime	application/x-lha
+2	string		-lh4-		LHa (2.x) archive data [lh4]
+!:mime	application/x-lha
+2	string		-lh5-		LHa (2.x) archive data [lh5]
+!:mime	application/x-lha
+2	string		-lh6-		LHa (2.x) archive data [lh6]
+!:mime	application/x-lha
+2	string		-lh7-		LHa (2.x)/LHark archive data [lh7]
+!:mime	application/x-lha
+>20	byte		x		- header level %d
+# taken from idarc [JW]
+2   string      -lZ         PUT archive data
+2   string      -lz         LZS archive data 
+2   string      -sw1-       Swag archive data
+
+# RAR archiver (Greg Roelofs, newt at uchicago.edu)
+0	string		Rar!		RAR archive data,
+!:mime	application/x-rar
+>44	byte		x		v%0x,
+>10	byte		>0		flags:
+>>10	byte		&0x01		Archive volume,
+>>10	byte		&0x02		Commented,
+>>10	byte		&0x04		Locked,
+>>10	byte		&0x08		Solid,
+>>10	byte		&0x20		Authenticated,
+>35	byte		0		os: MS-DOS
+>35	byte		1		os: OS/2
+>35	byte		2		os: Win32
+>35	byte		3		os: Unix
+# some old version? idarc says:
+0   string      RE\x7e\x5e  RAR archive data
+
+# SQUISH archiver (Greg Roelofs, newt at uchicago.edu)
+0	string		SQSH		squished archive data (Acorn RISCOS)
+
+# UC2 archiver (Greg Roelofs, newt at uchicago.edu)
+# [JW] see exe section for self-extracting version
+0	string		UC2\x1a		UC2 archive data
+
+# PKZIP multi-volume archive
+0	string		PK\x07\x08PK\x03\x04	Zip multi-volume archive data, at least PKZIP v2.50 to extract
+!:mime	application/zip
+
+# ZIP archives (Greg Roelofs, c/o zip-bugs at wkuvx1.wku.edu)
+0	string		PK\003\004
+>30	ubelong		!0x6d696d65
+>>4	byte		0x00		Zip archive data
+!:mime	application/zip
+>>4	byte		0x09		Zip archive data, at least v0.9 to extract
+!:mime	application/zip
+>>4	byte		0x0a		Zip archive data, at least v1.0 to extract
+!:mime	application/zip
+>>4	byte		0x0b		Zip archive data, at least v1.1 to extract
+!:mime	application/zip
+>>0x161	string		WINZIP          Zip archive data, WinZIP self-extracting
+!:mime	application/zip
+>>4	byte		0x14		Zip archive data, at least v2.0 to extract
+!:mime	application/zip
+>>4     byte            0x2d            Zip64 archive data, at least v3.0 to extract
+!:mime  application/zip
+
+# OpenOffice.org / KOffice / StarOffice documents
+# Listed here because they ARE zip files
+#
+# From: Abel Cheung <abel at oaka.org>
+>30	string		mimetype
+
+# KOffice (1.2 or above) formats
+>>50	string	vnd.kde.		KOffice (>=1.2)
+>>>58	string	karbon			Karbon document
+>>>58	string	kchart			KChart document
+>>>58	string	kformula		KFormula document
+>>>58	string	kivio			Kivio document
+>>>58	string	kontour			Kontour document
+>>>58	string	kpresenter		KPresenter document
+>>>58	string	kspread			KSpread document
+>>>58	string	kword			KWord document
+
+# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)
+>>50	string	vnd.sun.xml.		OpenOffice.org 1.x
+>>>62	string	writer			Writer
+>>>>68	byte	!0x2e			document
+>>>>68	string	.template		template
+>>>>68	string	.global			global document
+>>>62	string	calc			Calc
+>>>>66	byte	!0x2e			spreadsheet
+>>>>66	string	.template		template
+>>>62	string	draw			Draw
+>>>>66	byte	!0x2e			document
+>>>>66	string	.template		template
+>>>62	string	impress			Impress
+>>>>69	byte	!0x2e			presentation
+>>>>69	string	.template		template
+>>>62	string	math			Math document
+>>>62	string	base			Database file
+
+# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)
+# http://lists.oasis-open.org/archives/office/200505/msg00006.html
+>>50	string	vnd.oasis.opendocument.	OpenDocument
+>>>73	string	text
+>>>>77	byte	!0x2d			Text
+!:mime	application/vnd.oasis.opendocument.text
+>>>>77	string	-template		Text Template
+!:mime	application/vnd.oasis.opendocument.text-template
+>>>>77	string	-web			HTML Document Template
+!:mime	application/vnd.oasis.opendocument.text-web
+>>>>77	string	-master			Master Document
+!:mime	application/vnd.oasis.opendocument.text-master
+>>>73	string	graphics
+>>>>81	byte	!0x2d			Drawing
+!:mime	application/vnd.oasis.opendocument.graphics
+>>>>81	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.graphics-template
+>>>73	string	presentation
+>>>>85	byte	!0x2d			Presentation
+!:mime	application/vnd.oasis.opendocument.presentation
+>>>>85	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.presentation-template
+>>>73	string	spreadsheet
+>>>>84	byte	!0x2d			Spreadsheet
+!:mime	application/vnd.oasis.opendocument.spreadsheet
+>>>>84	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.spreadsheet-template
+>>>73	string	chart
+>>>>78	byte	!0x2d			Chart
+!:mime	application/vnd.oasis.opendocument.chart
+>>>>78	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.chart-template
+>>>73	string	formula
+>>>>80	byte	!0x2d			Formula
+!:mime	application/vnd.oasis.opendocument.formula
+>>>>80	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.formula-template
+>>>73	string	database		Database
+!:mime	application/vnd.oasis.opendocument.database
+>>>73	string	image
+>>>>78	byte	!0x2d			Image
+!:mime	application/vnd.oasis.opendocument.image
+>>>>78	string	-template		Template
+!:mime	application/vnd.oasis.opendocument.image-template
+
+# Zoo archiver
+20	lelong		0xfdc4a7dc	Zoo archive data
+!:mime	application/x-zoo
+>4	byte		>48		\b, v%c.
+>>6	byte		>47		\b%c
+>>>7	byte		>47		\b%c
+>32	byte		>0		\b, modify: v%d
+>>33	byte		x		\b.%d+
+>42	lelong		0xfdc4a7dc	\b,
+>>70	byte		>0		extract: v%d
+>>>71	byte		x		\b.%d+
+
+# Shell archives
+10	string		#\ This\ is\ a\ shell\ archive	shell archive text
+!:mime	application/octet-stream
+
+#
+# LBR. NB: May conflict with the questionable 
+#          "binary Computer Graphics Metafile" format.
+#
+0       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
+#
+# PMA (CP/M derivative of LHA)
+#
+2       string          -pm0-           PMarc archive data [pm0]
+2       string          -pm1-           PMarc archive data [pm1]
+2       string          -pm2-           PMarc archive data [pm2]
+2       string          -pms-           PMarc SFX archive (CP/M, DOS)
+5       string          -pc1-           PopCom compressed executable (CP/M)
+
+# From Rafael Laboissiere <rafael at laboissiere.net>
+# The Project Revision Control System (see
+# http://prcs.sourceforge.net) generates a packaged project
+# file which is recognized by the following entry: 
+0	leshort		0xeb81	PRCS packaged project
+
+# Microsoft cabinets 
+# by David Necas (Yeti) <yeti at physics.muni.cz>
+#0	string	MSCF\0\0\0\0	Microsoft cabinet file data,
+#>25	byte	x		v%d
+#>24	byte	x		\b.%d
+# MPi: All CABs have version 1.3, so this is pointless.
+# Better magic in debian-additions.
+
+# GTKtalog catalogs 
+# by David Necas (Yeti) <yeti at physics.muni.cz>
+4	string	gtktalog\ 	GTKtalog catalog data,
+>13	string	3		version 3
+>>14	beshort	0x677a		(gzipped)
+>>14	beshort	!0x677a		(not gzipped)
+>13	string	>3		version %s
+
+############################################################################
+# Parity archive reconstruction file, the 'par' file format now used on Usenet.
+0       string          PAR\0	PARity archive data
+>48	leshort		=0	- Index file
+>48	leshort		>0	- file number %d
+
+# Felix von Leitner <felix-file at fefe.de>
+0	string	d8:announce	BitTorrent file
+!:mime	application/x-bittorrent
+
+# Atari MSA archive - Teemu Hukkanen <tjhukkan at iki.fi>
+0       beshort 0x0e0f          Atari MSA archive data
+>2      beshort x       	\b, %d sectors per track
+>4      beshort 0       	\b, 1 sided
+>4      beshort 1       	\b, 2 sided
+>6      beshort x       	\b, starting track: %d
+>8      beshort x       	\b, ending track: %d
+
+# Alternate ZIP string (amc at arwen.cs.berkeley.edu)
+0	string	PK00PK\003\004	Zip archive data
+
+# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
+# by Stefan `Sec` Zehl <sec at 42.org>
+7	string		**ACE**		ACE archive data
+>15	byte	>0		version %d
+>16	byte	=0x00		\b, from MS-DOS
+>16	byte	=0x01		\b, from OS/2
+>16	byte	=0x02		\b, from Win/32
+>16	byte	=0x03		\b, from Unix
+>16	byte	=0x04		\b, from MacOS
+>16	byte	=0x05		\b, from WinNT
+>16	byte	=0x06		\b, from Primos
+>16	byte	=0x07		\b, from AppleGS
+>16	byte	=0x08		\b, from Atari
+>16	byte	=0x09		\b, from Vax/VMS
+>16	byte	=0x0A		\b, from Amiga
+>16	byte	=0x0B		\b, from Next
+>14	byte	x		\b, version %d to extract
+>5	leshort &0x0080		\b, multiple volumes,
+>>17	byte	x		\b (part %d),
+>5	leshort &0x0002		\b, contains comment
+>5	leshort	&0x0200		\b, sfx
+>5	leshort	&0x0400		\b, small dictionary
+>5	leshort	&0x0800		\b, multi-volume
+>5	leshort	&0x1000		\b, contains AV-String
+>>30	string	\x16*UNREGISTERED\x20VERSION*	(unregistered)
+>5	leshort &0x2000		\b, with recovery record
+>5	leshort &0x4000		\b, locked
+>5	leshort &0x8000		\b, solid
+# Date in MS-DOS format (whatever that is)
+#>18	lelong	x		Created on
+
+# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
+# <doj at cubic.org>
+0x1A	string	sfArk		sfArk compressed Soundfont
+>0x15	string	2
+>>0x1	string	>\0		Version %s
+>>0x2A	string	>\0		: %s
+
+# DR-DOS 7.03 Packed File *.??_
+0	string	Packed\ File\ 	Personal NetWare Packed File
+>12	string	x    		\b, was "%.12s"
+
+# EET archive
+# From: Tilman Sauerbeck <tilman at code-monkey.de>
+0	belong	0x1ee7ff00	EET archive
+!:mime	application/x-eet
+
+# rzip archives
+0	string	RZIP		rzip compressed data
+>4	byte	x		- version %d
+>5	byte	x		\b.%d
+>6	belong	x		(%d bytes)
+
+# From: "Robert Dale" <robdale at gmail.com>
+0	belong	123		dar archive,
+>4	belong	x		label "%.8x
+>>8	belong	x		%.8x
+>>>12	beshort	x		%.4x"
+>14	byte	0x54		end slice
+>14	beshort	0x4e4e		multi-part
+>14	beshort	0x4e53		multi-part, with -S
+
+# Symbian installation files
+#  http://www.thouky.co.uk/software/psifs/sis.html
+#  http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf
+8	lelong	0x10000419	Symbian installation file
+!:mime	application/vnd.symbian.install
+>4	lelong	0x1000006D	(EPOC release 3/4/5)
+>4	lelong	0x10003A12	(EPOC release 6)
+0	lelong	0x10201A7A	Symbian installation file (Symbian OS 9.x)
+!:mime	x-epoc/x-sisx-app
+
+# From "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string	MPQ\032		MoPaQ (MPQ) archive
+
+# From: Dirk Jagdmann <doj at cubic.org>
+# xar archive format: http://code.google.com/p/xar/
+0	string	xar!		xar archive
+>6	beshort	x		- version %ld
+
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# .kgb
+0	string KGB_arch		KGB Archiver file
+>10	string x		with compression level %.1s
+
+# xar (eXtensible ARchiver) archive
+# From: "David Remahl" <dremahl at apple.com>
+0	string	xar!		xar archive
+#>4	beshort	x		header size %d
+>6	beshort	x		version %d,
+#>8	quad	x		compressed TOC: %d,
+#>16	quad	x		uncompressed TOC: %d,
+>24	belong	0		no checksum
+>24	belong	1		SHA-1 checksum
+>24	belong	2		MD5 checksum
+
+#------------------------------------------------------------------------------
+# $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $
+# asterix:  file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
+# strings as "long" - we assume they're just strings:
+# From: guy at netapp.com (Guy Harris)
+#
+0	string		*STA		Aster*x
+>7	string		WORD			Words Document
+>7	string		GRAP			Graphic
+>7	string		SPRE			Spreadsheet
+>7	string		MACR			Macro
+0	string		2278		Aster*x Version 2
+>29	byte		0x36			Words Document
+>29	byte		0x35			Graphic
+>29	byte		0x32			Spreadsheet
+>29	byte		0x38			Macro
+
+
+#------------------------------------------------------------------------------
+# $File: att3b,v 1.8 2009/09/19 16:28:08 christos Exp $
+# att3b:  file(1) magic for AT&T 3B machines
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+# 3B20
+#
+# The 3B20 conflicts with SCCS.
+#0	beshort		0550		3b20 COFF executable
+#>12	belong		>0		not stripped
+#>22	beshort		>0		- version %ld
+#0	beshort		0551		3b20 COFF executable (TV)
+#>12	belong		>0		not stripped
+#>22	beshort		>0		- version %ld
+#
+# WE32K
+#
+0	beshort		0560		WE32000 COFF
+>18	beshort		^00000020	object
+>18	beshort		&00000020	executable
+>12	belong		>0		not stripped
+>18	beshort		^00010000	N/A on 3b2/300 w/paging
+>18	beshort		&00020000	32100 required
+>18	beshort		&00040000	and MAU hardware required
+>20	beshort		0407		(impure)
+>20	beshort		0410		(pure)
+>20	beshort		0413		(demand paged)
+>20	beshort		0443		(target shared library)
+>22	beshort		>0		- version %ld
+0	beshort		0561		WE32000 COFF executable (TV)
+>12	belong		>0		not stripped
+#>18	beshort		&00020000	- 32100 required
+#>18	beshort		&00040000	and MAU hardware required
+#>22	beshort		>0		- version %ld
+#
+# core file for 3b2 
+0	string		\000\004\036\212\200	3b2 core file
+>364	string		>\0		of '%s'
+
+#------------------------------------------------------------------------------
+# $File: audio,v 1.59 2009/11/04 17:27:37 christos Exp $
+# audio:  file(1) magic for sound formats (see also "iff")
+#
+# Jan Nicolai Langfeldt (janl at ifi.uio.no), Dan Quinlan (quinlan at yggdrasil.com),
+# and others
+#
+
+# Sun/NeXT audio data
+0	string		.snd		Sun/NeXT audio data:
+>12	belong		1		8-bit ISDN mu-law,
+!:mime	audio/basic
+>12	belong		2		8-bit linear PCM [REF-PCM],
+!:mime	audio/basic
+>12	belong		3		16-bit linear PCM,
+!:mime	audio/basic
+>12	belong		4		24-bit linear PCM,
+!:mime	audio/basic
+>12	belong		5		32-bit linear PCM,
+!:mime	audio/basic
+>12	belong		6		32-bit IEEE floating point,
+!:mime	audio/basic
+>12	belong		7		64-bit IEEE floating point,
+!:mime	audio/basic
+>12	belong		8		Fragmented sample data,
+>12	belong		10		DSP program,
+>12	belong		11		8-bit fixed point,
+>12	belong		12		16-bit fixed point,
+>12	belong		13		24-bit fixed point,
+>12	belong		14		32-bit fixed point,
+>12	belong		18		16-bit linear with emphasis,
+>12	belong		19		16-bit linear compressed,
+>12	belong		20		16-bit linear with emphasis and compression,
+>12	belong		21		Music kit DSP commands,
+>12	belong		23		8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
+!:mime  audio/x-adpcm
+>12	belong		24		compressed (8-bit CCITT G.722 ADPCM)
+>12	belong		25		compressed (3-bit CCITT G.723.3 ADPCM),
+>12	belong		26		compressed (5-bit CCITT G.723.5 ADPCM),
+>12	belong		27		8-bit A-law (CCITT G.711),
+>20	belong		1		mono,
+>20	belong		2		stereo,
+>20	belong		4		quad,
+>16	belong		>0		%d Hz
+
+# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
+# that uses little-endian encoding and has a different magic number
+0	lelong		0x0064732E	DEC audio data:
+>12	lelong		1		8-bit ISDN mu-law,
+!:mime	audio/x-dec-basic
+>12	lelong		2		8-bit linear PCM [REF-PCM],
+!:mime	audio/x-dec-basic
+>12	lelong		3		16-bit linear PCM,
+!:mime	audio/x-dec-basic
+>12	lelong		4		24-bit linear PCM,
+!:mime	audio/x-dec-basic
+>12	lelong		5		32-bit linear PCM,
+!:mime	audio/x-dec-basic
+>12	lelong		6		32-bit IEEE floating point,
+!:mime	audio/x-dec-basic
+>12	lelong		7		64-bit IEEE floating point,
+!:mime	audio/x-dec-basic
+>12	belong		8		Fragmented sample data,
+>12	belong		10		DSP program,
+>12	belong		11		8-bit fixed point,
+>12	belong		12		16-bit fixed point,
+>12	belong		13		24-bit fixed point,
+>12	belong		14		32-bit fixed point,
+>12	belong		18		16-bit linear with emphasis,
+>12	belong		19		16-bit linear compressed,
+>12	belong		20		16-bit linear with emphasis and compression,
+>12	belong		21		Music kit DSP commands,
+>12	lelong		23		8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
+!:mime	audio/x-dec-basic
+>12	belong		24		compressed (8-bit CCITT G.722 ADPCM)
+>12	belong		25		compressed (3-bit CCITT G.723.3 ADPCM),
+>12	belong		26		compressed (5-bit CCITT G.723.5 ADPCM),
+>12	belong		27		8-bit A-law (CCITT G.711),
+>20	lelong		1		mono,
+>20	lelong		2		stereo,
+>20	lelong		4		quad,
+>16	lelong		>0		%d Hz
+
+# Creative Labs AUDIO stuff
+0	string	MThd			Standard MIDI data
+!:mime	audio/midi
+>8 	beshort	x			(format %d)
+>10	beshort	x			using %d track
+>10	beshort		>1		\bs
+>12	beshort&0x7fff	x		at 1/%d
+>12	beshort&0x8000	>0		SMPTE
+
+0	string	CTMF			Creative Music (CMF) data
+!:mime	audio/x-unknown
+0	string	SBI			SoundBlaster instrument data
+!:mime	audio/x-unknown
+0	string	Creative\ Voice\ File	Creative Labs voice data
+!:mime	audio/x-unknown
+# is this next line right?  it came this way...
+>19	byte	0x1A
+>23	byte	>0			- version %d
+>22	byte	>0			\b.%d
+
+# first entry is also the string "NTRK"
+0	belong		0x4e54524b	MultiTrack sound data
+>4	belong		x		- version %ld
+
+# Extended MOD format (*.emd) (Greg Roelofs, newt at uchicago.edu); NOT TESTED
+# [based on posting 940824 by "Dirk/Elastik", husberg at lehtori.cc.tut.fi]
+0	string		EMOD		Extended MOD sound data,
+>4	byte&0xf0	x		version %d
+>4	byte&0x0f	x		\b.%d,
+>45	byte		x		%d instruments
+>83	byte		0		(module)
+>83	byte		1		(song)
+
+# Real Audio (Magic .ra\0375)
+0	belong		0x2e7261fd	RealAudio sound file
+!:mime	audio/x-pn-realaudio
+0	string		.RMF		RealMedia file
+!:mime	application/vnd.rn-realmedia
+#video/x-pn-realvideo
+#video/vnd.rn-realvideo
+#application/vnd.rn-realmedia
+#	sigh, there are many mimes for that but the above are the most common.
+
+# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert at dialin.ind.net]
+# Oct 31, 1995
+# fixed by <doj at cubic.org> 2003-06-24
+# Too short...
+#0	string		MTM		MultiTracker Module sound file
+#0	string		if		Composer 669 Module sound data
+#0	string		JN		Composer 669 Module sound data (extended format)
+0	string		MAS_U		ULT(imate) Module sound data
+
+#0	string		FAR		Module sound data
+#>4	string		>\15		Title: "%s"
+
+0x2c	string		SCRM		ScreamTracker III Module sound data
+>0	string		>\0		Title: "%s"
+
+# Gravis UltraSound patches
+# From <ache at nagual.ru>
+
+0	string		GF1PATCH110\0ID#000002\0	GUS patch
+0	string		GF1PATCH100\0ID#000002\0	Old GUS	patch
+
+# mime types according to http://www.geocities.com/nevilo/mod.htm:
+#	audio/it	.it
+#	audio/x-zipped-it	.itz
+#	audio/xm	fasttracker modules
+#	audio/x-s3m	screamtracker modules
+#	audio/s3m	screamtracker modules
+#	audio/x-zipped-mod	mdz
+#	audio/mod	mod
+#	audio/x-mod	All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)
+
+#
+# Taken from loader code from mikmod version 2.14
+# by Steve McIntyre (stevem at chiark.greenend.org.uk)
+# <doj at cubic.org> added title printing on 2003-06-24
+0	string	MAS_UTrack_V00
+>14	string	>/0		ultratracker V1.%.1s module sound data
+!:mime	audio/x-mod
+#audio/x-tracker-module
+
+0	string	UN05		MikMod UNI format module sound data
+
+0	string	Extended\ Module: Fasttracker II module sound data
+!:mime	audio/x-mod
+#audio/x-tracker-module
+>17	string	>\0		Title: "%s"
+
+21	string/c	=!SCREAM!	Screamtracker 2 module sound data
+!:mime	audio/x-mod
+#audio/x-screamtracker-module
+21	string	BMOD2STM	Screamtracker 2 module sound data
+!:mime	audio/x-mod
+#audio/x-screamtracker-module
+1080	string	M.K.		4-channel Protracker module sound data
+!:mime	audio/x-mod
+#audio/x-protracker-module
+>0	string	>\0		Title: "%s"
+1080	string	M!K!		4-channel Protracker module sound data
+!:mime	audio/x-mod
+#audio/x-protracker-module
+>0	string	>\0		Title: "%s"
+1080	string	FLT4		4-channel Startracker module sound data
+!:mime	audio/x-mod
+#audio/x-startracker-module
+>0	string	>\0		Title: "%s"
+1080	string	FLT8		8-channel Startracker module sound data
+!:mime	audio/x-mod
+#audio/x-startracker-module
+>0	string	>\0		Title: "%s"
+1080	string	4CHN		4-channel Fasttracker module sound data
+!:mime	audio/x-mod
+#audio/x-fasttracker-module
+>0	string	>\0		Title: "%s"
+1080	string	6CHN		6-channel Fasttracker module sound data
+!:mime	audio/x-mod
+#audio/x-fasttracker-module
+>0	string	>\0		Title: "%s"
+1080	string	8CHN		8-channel Fasttracker module sound data
+!:mime	audio/x-mod
+#audio/x-fasttracker-module
+>0	string	>\0		Title: "%s"
+1080	string	CD81		8-channel Octalyser module sound data
+!:mime	audio/x-mod
+#audio/x-octalysertracker-module
+>0	string	>\0		Title: "%s"
+1080	string	OKTA		8-channel Octalyzer module sound data
+!:mime	audio/x-mod
+#audio/x-octalysertracker-module
+>0	string	>\0		Title: "%s"
+# Not good enough.
+#1082	string	CH
+#>1080	string	>/0		%.2s-channel Fasttracker "oktalyzer" module sound data
+1080	string	16CN		16-channel Taketracker module sound data
+!:mime	audio/x-mod
+#audio/x-taketracker-module
+>0	string	>\0		Title: "%s"
+1080	string	32CN		32-channel Taketracker module sound data
+!:mime	audio/x-mod
+#audio/x-taketracker-module
+>0	string	>\0		Title: "%s"
+
+# TOC sound files -Trevor Johnson <trevor at jpj.net>
+#
+0       string          TOC             TOC sound file
+
+# sidfiles <pooka at iki.fi>
+# added name,author,(c) and new RSID type by <doj at cubic.org> 2003-06-24
+0	string		SIDPLAY\ INFOFILE	Sidplay info file
+
+0	string		PSID			PlaySID v2.2+ (AMIGA) sidtune
+>4	beshort		>0			w/ header v%d,
+>14	beshort		=1			single song,
+>14	beshort		>1			%d songs,
+>16	beshort		>0			default song: %d
+>0x16	string		>\0			name: "%s"
+>0x36	string		>\0			author: "%s"
+>0x56	string		>\0			copyright: "%s"
+
+0	string		RSID			RSID sidtune PlaySID compatible
+>4	beshort		>0			w/ header v%d,
+>14	beshort		=1			single song,
+>14	beshort		>1			%d songs,
+>16	beshort		>0			default song: %d
+>0x16	string		>\0			name: "%s"
+>0x36	string		>\0			author: "%s"
+>0x56	string		>\0			copyright: "%s"
+
+# IRCAM <mpruett at sgi.com>
+# VAX and MIPS files are little-endian; Sun and NeXT are big-endian
+0	belong		0x64a30100		IRCAM file (VAX)
+0	belong		0x64a30200		IRCAM file (Sun)
+0	belong		0x64a30300		IRCAM file (MIPS little-endian)
+0	belong		0x64a30400		IRCAM file (NeXT)
+
+# NIST SPHERE <mpruett at sgi.com>
+0	string		NIST_1A\n\ \ \ 1024\n	NIST SPHERE file
+
+# Sample Vision <mpruett at sgi.com>
+0	string		SOUND\ SAMPLE\ DATA\ 	Sample Vision file
+
+# Audio Visual Research <tonigonenstein at users.sourceforge.net>
+0	string		2BIT			Audio Visual Research file,
+>12	beshort		=0			mono,
+>12	beshort		=-1			stereo,
+>14	beshort		x			%d bits
+>16	beshort		=0			unsigned,
+>16	beshort		=-1			signed,
+>22	belong&0x00ffffff	x		%d Hz,
+>18	beshort		=0			no loop,
+>18	beshort		=-1			loop,
+>21	ubyte		<128			note %d,
+>22	byte		=0			replay 5.485 KHz
+>22	byte		=1			replay 8.084 KHz
+>22	byte		=2			replay 10.971 KHz
+>22	byte		=3			replay 16.168 KHz
+>22	byte		=4			replay 21.942 KHz
+>22	byte		=5			replay 32.336 KHz
+>22	byte		=6			replay 43.885 KHz
+>22	byte		=7			replay 47.261 KHz
+
+# SGI SoundTrack <mpruett at sgi.com>
+0	string		_SGI_SoundTrack		SGI SoundTrack project file
+# ID3 version 2 tags <waschk at informatik.uni-rostock.de>
+0	string		ID3	Audio file with ID3 version 2
+>3	byte		x	\b.%d
+>4	byte		x	\b.%d
+>>5	byte		&0x80	\b, unsynchronized frames
+>>5	byte		&0x40	\b, extended header
+>>5	byte		&0x20	\b, experimental
+>>5	byte		&0x10	\b, footer present
+>(6.I)	indirect	x	\b, contains: 
+
+# NSF (NES sound file) magic
+0	string		NESM\x1a	NES Sound File
+>14	string		>\0		("%s" by
+>46	string		>\0		%s, copyright
+>78	string		>\0		%s),
+>5	byte		x		version %d,
+>6	byte		x		%d tracks,
+>122	byte&0x2	=1		dual PAL/NTSC
+>122	byte&0x1	=1		PAL
+>122	byte&0x1	=0		NTSC
+
+# Impulse tracker module (audio/x-it)
+0	string		IMPM		Impulse Tracker module sound data -
+!:mime	audio/x-mod
+>4	string		>\0		"%s"
+>40	leshort		!0		compatible w/ITv%x
+>42	leshort		!0		created w/ITv%x
+
+# Imago Orpheus module (audio/x-imf)
+60	string		IM10		Imago Orpheus module sound data -
+>0	string		>\0		"%s"
+
+# From <collver1 at attbi.com>
+# These are the /etc/magic entries to decode modules, instruments, and
+# samples in Impulse Tracker's native format.
+
+0	string		IMPS		Impulse Tracker Sample
+>18	byte		&2		16 bit
+>18	byte		^2		8 bit
+>18	byte		&4		stereo
+>18	byte		^4		mono
+0	string		IMPI		Impulse Tracker Instrument
+>28	leshort		!0		ITv%x
+>30	byte		!0		%d samples
+
+# Yamaha TX Wave:  file(1) magic for Yamaha TX Wave audio files
+# From <collver1 at attbi.com>
+0	string		LM8953		Yamaha TX Wave
+>22	byte		0x49		looped
+>22	byte		0xC9		non-looped
+>23	byte		1		33kHz
+>23	byte		2		50kHz
+>23	byte		3		16kHz
+
+# scream tracker:  file(1) magic for Scream Tracker sample files
+#
+# From <collver1 at attbi.com>
+76	string		SCRS		Scream Tracker Sample
+>0	byte		1		sample
+>0	byte		2		adlib melody
+>0	byte		>2		adlib drum
+>31	byte		&2		stereo
+>31	byte		^2		mono
+>31	byte		&4		16bit little endian
+>31	byte		^4		8bit
+>30	byte		0		unpacked
+>30	byte		1		packed
+
+# audio
+# From: Cory Dikkers <cdikkers at swbell.net>
+0	string		MMD0		MED music file, version 0
+0	string		MMD1		OctaMED Pro music file, version 1
+0	string		MMD3		OctaMED Soundstudio music file, version 3
+0	string		OctaMEDCmpr	OctaMED Soundstudio compressed file
+0	string		MED		MED_Song
+0	string		SymM		Symphonie SymMOD music file
+#
+0	string		THX		AHX version
+>3	byte		=0		1 module data
+>3	byte		=1		2 module data
+#
+0	string		OKTASONG	Oktalyzer module data
+#
+0	string		DIGI\ Booster\ module\0	%s
+>20	byte		>0		%c
+>>21	byte		>0		\b%c
+>>>22	byte		>0		\b%c
+>>>>23	byte		>0		\b%c
+>610	string		>\0		\b, "%s"
+#
+0	string		DBM0	   	DIGI Booster Pro Module
+>4	byte		>0		V%X.
+>>5	byte		x		\b%02X
+>16	string		>\0		\b, "%s"
+#
+0	string		FTMN		FaceTheMusic module
+>16	string		>\0d		\b, "%s"
+
+# From: <doj at cubic.org> 2003-06-24
+0	string		AMShdr\32	Velvet Studio AMS Module v2.2
+0	string		Extreme		Extreme Tracker AMS Module v1.3
+0	string		DDMF		Xtracker DMF Module
+>4	byte		x		v%i
+>0xD	string		>\0		Title: "%s"
+>0x2B	string		>\0		Composer: "%s"
+0	string		DSM\32		Dynamic Studio Module DSM
+0	string		SONG		DigiTrekker DTM Module
+0	string		DMDL		DigiTrakker MDL Module
+0	string		PSM\32		Protracker Studio PSM Module
+44	string		PTMF		Poly Tracker PTM Module
+>0	string		>\32		Title: "%s"
+0	string		MT20		MadTracker 2.0 Module MT2
+0	string		RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
+0	string		RTMM		RTM Module
+0x426	string		MaDoKaN96	XMS Adlib Module
+>0	string		>\0		Composer: "%s"
+0	string		AMF		AMF Module
+>4	string		>\0		Title: "%s"
+0	string		MODINFO1	Open Cubic Player Module Inforation MDZ
+0	string		Extended\40Instrument: Fast Tracker II Instrument
+
+# From: Takeshi Hamasaki <hma at syd.odn.ne.jp>
+# NOA Nancy Codec file
+0	string		\210NOA\015\012\032	NOA Nancy Codec Movie file
+# Yamaha SMAF format
+0	string		MMMD		Yamaha SMAF file
+# Sharp Jisaku Melody format for PDC
+0	string		\001Sharp\040JisakuMelody	SHARP Cell-Phone ringing Melody
+>20	string		Ver01.00	Ver. 1.00
+>>32	byte		x		, %d tracks
+
+# Free lossless audio codec <http://flac.sourceforge.net>
+# From: Przemyslaw Augustyniak <silvathraec at rpg.pl>
+0	string			fLaC		FLAC audio bitstream data
+!:mime	audio/x-flac
+>4	byte&0x7f		>0		\b, unknown version
+>4	byte&0x7f		0		\b
+# some common bits/sample values
+>>20	beshort&0x1f0		0x030		\b, 4 bit
+>>20	beshort&0x1f0		0x050		\b, 6 bit
+>>20	beshort&0x1f0		0x070		\b, 8 bit
+>>20	beshort&0x1f0		0x0b0		\b, 12 bit
+>>20	beshort&0x1f0		0x0f0		\b, 16 bit
+>>20	beshort&0x1f0		0x170		\b, 24 bit
+>>20	byte&0xe		0x0		\b, mono
+>>20	byte&0xe		0x2		\b, stereo
+>>20	byte&0xe		0x4		\b, 3 channels
+>>20	byte&0xe		0x6		\b, 4 channels
+>>20	byte&0xe		0x8		\b, 5 channels
+>>20	byte&0xe		0xa		\b, 6 channels
+>>20	byte&0xe		0xc		\b, 7 channels
+>>20	byte&0xe		0xe		\b, 8 channels
+# some common sample rates
+>>17	belong&0xfffff0		0x0ac440	\b, 44.1 kHz
+>>17	belong&0xfffff0		0x0bb800	\b, 48 kHz
+>>17	belong&0xfffff0		0x07d000	\b, 32 kHz
+>>17	belong&0xfffff0		0x056220	\b, 22.05 kHz
+>>17	belong&0xfffff0		0x05dc00	\b, 24 kHz
+>>17	belong&0xfffff0		0x03e800	\b, 16 kHz
+>>17	belong&0xfffff0		0x02b110	\b, 11.025 kHz
+>>17	belong&0xfffff0		0x02ee00	\b, 12 kHz
+>>17	belong&0xfffff0		0x01f400	\b, 8 kHz
+>>17	belong&0xfffff0		0x177000	\b, 96 kHz
+>>17	belong&0xfffff0		0x0fa000	\b, 64 kHz
+>>21	byte&0xf		>0		\b, >4G samples
+>>21	byte&0xf		0		\b
+>>>22	belong			>0		\b, %u samples
+>>>22	belong			0		\b, length unknown
+
+# (ISDN) VBOX voice message file (Wolfram Kleff)
+0       string          VBOX            VBOX voice message data
+
+# ReBorn Song Files (.rbs)
+# David J. Singer <doc at deadvirgins.org.uk>
+8       string          RB40             RBS Song file
+>29     string          ReBorn           created by ReBorn
+>37     string          Propellerhead    created by ReBirth
+
+# Synthesizer Generator and Kimwitu share their file format
+0	string		A#S#C#S#S#L#V#3	    Synthesizer Generator or Kimwitu data
+# Kimwitu++ uses a slightly different magic
+0	string		A#S#C#S#S#L#HUB	    Kimwitu++ data
+
+# From "Simon Hosie
+0       string  TFMX-SONG       TFMX module sound data
+
+# Monkey's Audio compressed audio format (.ape)
+# From danny.milo at gmx.net (Danny Milosavljevic)
+# New version from Abel Cheung <abel (@) oaka.org>
+0		string		MAC\040		Monkey's Audio compressed format
+>4		uleshort	>0x0F8B		version %d
+>>(0x08.l)	uleshort	=1000		with fast compression
+>>(0x08.l)	uleshort	=2000		with normal compression
+>>(0x08.l)	uleshort	=3000		with high compression
+>>(0x08.l)	uleshort	=4000		with extra high compression
+>>(0x08.l)	uleshort	=5000		with insane compression
+>>(0x08.l+18)	uleshort	=1		\b, mono
+>>(0x08.l+18)	uleshort	=2		\b, stereo
+>>(0x08.l+20)	ulelong		x		\b, sample rate %d
+>4		uleshort	<0x0F8C		version %d
+>>6		uleshort	=1000		with fast compression
+>>6		uleshort	=2000		with normal compression
+>>6		uleshort	=3000		with high compression
+>>6		uleshort	=4000		with extra high compression
+>>6		uleshort	=5000		with insane compression
+>>10		uleshort	=1		\b, mono
+>>10		uleshort	=2		\b, stereo
+>>12		ulelong		x		\b, sample rate %d
+
+# adlib sound files
+# From Gürkan Sengün <gurkan at linuks.mine.nu>, http://www.linuks.mine.nu
+0    	string		RAWADATA	RdosPlay RAW
+
+1068	string		RoR		AMUSIC Adlib Tracker
+
+0	string		JCH		EdLib
+
+0	string		mpu401tr	MPU-401 Trakker
+
+0	string		SAdT		Surprise! Adlib Tracker
+>4	byte		x		Version %d
+
+0	string		XAD!		eXotic ADlib
+
+0	string		ofTAZ!		eXtra Simple Music
+
+# Spectrum 128 tunes (.ay files).
+# From: Emanuel Haupt <ehaupt at critical.ch>
+0	string		ZXAYEMUL	Spectrum 128 tune
+
+0	string		\0BONK		BONK,
+#>5	byte		x		version %d
+>14	byte		x		%d channel(s),
+>15	byte		=1		lossless,
+>15	byte		=0		lossy,
+>16	byte		x		mid-side
+
+384	string		LockStream	LockStream Embedded file (mostly MP3 on old Nokia phones)
+
+# format VQF (proprietary codec for sound)
+# some infos on the header file available at :
+# http://www.twinvq.org/english/technology_format.html
+0	string		TWIN97012000	VQF data
+>27	short		0		\b, Mono
+>27	short		1		\b, Stereo
+>31	short 		>0		\b, %d kbit/s
+>35	short 		>0		\b, %d kHz
+
+# Nelson A. de Oliveira (naoliv at gmail.com)
+# .eqf
+0	string	Winamp\ EQ\ library\ file	%s
+# it will match only versions like v<digit>.<digit>
+# Since I saw only eqf files with version v1.1 I think that it's OK
+>23	string	x	\b%.4s
+# .preset
+0	string	[Equalizer\ preset]	XMMS equalizer preset
+# .m3u
+0	search/1	#EXTM3U 	M3U playlist text
+# .pls
+0	search/1	[playlist]	PLS playlist text
+# licq.conf
+1	string	[licq]			LICQ configuration file
+
+# Atari ST audio files by Dirk Jagdmann <doj at cubic.org>
+0	string		ICE!		SNDH Atari ST music
+0	string		SC68\ Music-file\ /\ (c)\ (BeN)jami	sc68 Atari ST music
+
+# musepak support From: "Jiri Pejchal" <jiri.pejchal at gmail.com>
+0       string          MP+     Musepack audio
+>3      byte            255     \b, SV pre8
+>3      byte&0xF        0x6     \b, SV 6
+>3      byte&0xF        0x8     \b, SV 8
+>3      byte&0xF        0x7     \b, SV 7
+>>3     byte&0xF0       0x0     \b.0
+>>3     byte&0xF0       0x10    \b.1
+>>3     byte&0xF0       240     \b.15
+>>10    byte&0xF0       0x0     \b, no profile
+>>10    byte&0xF0       0x10    \b, profile 'Unstable/Experimental'
+>>10    byte&0xF0       0x50    \b, quality 0
+>>10    byte&0xF0       0x60    \b, quality 1
+>>10    byte&0xF0       0x70    \b, quality 2 (Telephone)
+>>10    byte&0xF0       0x80    \b, quality 3 (Thumb)
+>>10    byte&0xF0       0x90    \b, quality 4 (Radio)
+>>10    byte&0xF0       0xA0    \b, quality 5 (Standard)
+>>10    byte&0xF0       0xB0    \b, quality 6 (Xtreme)
+>>10    byte&0xF0       0xC0    \b, quality 7 (Insane)
+>>10    byte&0xF0       0xD0    \b, quality 8 (BrainDead)
+>>10    byte&0xF0       0xE0    \b, quality 9
+>>10    byte&0xF0       0xF0    \b, quality 10
+>>27    byte            0x0     \b, Buschmann 1.7.0-9, Klemm 0.90-1.05
+>>27    byte            102     \b, Beta 1.02
+>>27    byte            104     \b, Beta 1.04
+>>27    byte            105     \b, Alpha 1.05
+>>27    byte            106     \b, Beta 1.06
+>>27    byte            110     \b, Release 1.1
+>>27    byte            111     \b, Alpha 1.11
+>>27    byte            112     \b, Beta 1.12
+>>27    byte            113     \b, Alpha 1.13
+>>27    byte            114     \b, Beta 1.14
+>>27    byte            115     \b, Alpha 1.15
+
+# IMY
+# from http://filext.com/detaillist.php?extdetail=IMY
+# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
+# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html
+# http://www.wx800.com/msg/download/irda/iMelody.pdf
+0	string	BEGIN:IMELODY	iMelody Ringtone Format
+
+# From: "Mateus Caruccio" <mateus at caruccio.com>
+# guitar pro v3,4,5 from http://filext.com/file-extension/gp3
+0	string	\030FICHIER\ GUITAR\ PRO\ v3.	Guitar Pro Ver. 3 Tablature
+
+# From: "Leslie P. Polzer" <leslie.polzer at gmx.net>
+60	string	SONG		SoundFX Module sound file
+
+# Type: Adaptive Multi-Rate Codec
+# URL:  http://filext.com/detaillist.php?extdetail=AMR
+# From: Russell Coker <russell at coker.com.au>
+0	string	#!AMR		Adaptive Multi-Rate Codec (GSM telephony)
+
+#----------------------------------------------------------------
+# $File: basis,v 1.4 2009/09/19 16:28:08 christos Exp $
+# basis: file(1) magic for BBx/Pro5-files
+#      Oliver Dammer <dammer at olida.de>	 2005/11/07
+# http://www.basis.com business-basic-files.
+#
+0	string		\074\074bbx\076\076	BBx
+>7	string		\000			indexed file
+>7	string		\001			serial file
+>7	string		\002			keyed file
+>>13	short		0			(sort)
+>7	string		\004			program
+>>18	byte		x			(LEVEL %d)
+>>>23	string		>\000			psaved
+>7	string		\006			mkeyed file
+>>13	short		0			(sort)
+>>8	string		\000			(mkey)
+
+#------------------------------------------------------------------------------
+# $File: bflt,v 1.4 2009/09/19 16:28:08 christos Exp $
+# bFLT: file(1) magic for BFLT uclinux binary files
+#
+# From Philippe De Muyter <phdm at macqel.be>
+#
+0	string		bFLT		BFLT executable
+>4	belong		x		- version %ld
+>4	belong		4
+>>36	belong&0x1	0x1		ram
+>>36	belong&0x2	0x2		gotpic
+>>36	belong&0x4	0x4		gzip
+>>36	belong&0x8	0x8		gzdata
+
+#------------------------------------------------------------------------------
+# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $
+# blender: file(1) magic for Blender 3D related files
+#
+# Native format rule v1.2. For questions use the developers list 
+# http://lists.blender.org/mailman/listinfo/bf-committers
+# GLOB chunk was moved near start and provides subversion info since 2.42 
+
+0		string	=BLENDER	Blender3D,
+>7		string	=_		saved as 32-bits
+>>8		string	=v		little endian
+>>>9		byte	x		with version %c.
+>>>10		byte	x		\b%c
+>>>11		byte	x		\b%c
+>>>0x40		string	=GLOB		\b.
+>>>>0x58	leshort	x		\b%.4d
+>>8		string	=V		big endian
+>>>9		byte	x		with version %c.
+>>>10		byte	x		\b%c
+>>>11		byte	x		\b%c
+>>>0x40		string	=GLOB		\b.
+>>>>0x58	beshort	x		\b%.4d
+>7		string	=-		saved as 64-bits
+>>8		string	=v		little endian
+>>9		byte	x		with version %c.
+>>10		byte	x		\b%c
+>>11		byte	x		\b%c
+>>0x44		string	=GLOB		\b.
+>>>0x60		leshort	x		\b%.4d
+>>8		string	=V		big endian
+>>>9		byte	x		with version %c.
+>>>10		byte	x		\b%c
+>>>11		byte	x		\b%c
+>>>0x44		string	=GLOB		\b.
+>>>>0x60	beshort	x		\b%.4d
+
+# Scripts that run in the embeded Python interpreter
+0		string	#!BPY		Blender3D BPython script
+
+#------------------------------------------------------------------------------
+# $File: blit,v 1.8 2009/09/19 16:28:08 christos Exp $
+# blit:  file(1) magic for 68K Blit stuff as seen from 680x0 machine
+#
+# Note that this 0407 conflicts with several other a.out formats...
+#
+# XXX - should this be redone with "be" and "le", so that it works on
+# little-endian machines as well?  If so, what's the deal with
+# "VAX-order" and "VAX-order2"?
+#
+#0	long		0407		68K Blit (standalone) executable
+#0	short		0407		VAX-order2 68K Blit (standalone) executable
+0	short		03401		VAX-order 68K Blit (standalone) executable
+0	long		0406		68k Blit mpx/mux executable
+0	short		0406		VAX-order2 68k Blit mpx/mux executable
+0	short		03001		VAX-order 68k Blit mpx/mux executable
+# Need more values for WE32 DMD executables.
+# Note that 0520 is the same as COFF
+#0	short		0520		tty630 layers executable
+
+#------------------------------------------------------------------------------
+# $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $
+# i80960 b.out objects and archives
+#
+0	long		0x10d		i960 b.out relocatable object
+>16	long		>0		not stripped
+#
+# b.out archive (hp-rt on i960)
+0	string		=!<bout>	b.out archive
+>8	string		__.SYMDEF	random library
+
+#------------------------------------------------------------------------------
+# $File: bsdi,v 1.5 2009/09/19 16:28:08 christos Exp $
+# bsdi:  file(1) magic for BSD/OS (from BSDI) objects
+#
+
+0	lelong		0314		386 compact demand paged pure executable
+>16	lelong		>0		not stripped
+>32	byte		0x6a		(uses shared libs)
+
+0	lelong		0407		386 executable
+>16	lelong		>0		not stripped
+>32	byte		0x6a		(uses shared libs)
+
+0	lelong		0410		386 pure executable
+>16	lelong		>0		not stripped
+>32	byte		0x6a		(uses shared libs)
+
+0	lelong		0413		386 demand paged pure executable
+>16	lelong		>0		not stripped
+>32	byte		0x6a		(uses shared libs)
+
+# same as in SunOS 4.x, except for static shared libraries
+0	belong&077777777	0600413		sparc demand paged
+>0	byte		&0x80
+>>20	belong		<4096		shared library
+>>20	belong		=4096		dynamically linked executable
+>>20	belong		>4096		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+>36	belong		0xb4100001	(uses shared libs)
+
+0	belong&077777777	0600410		sparc pure
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+>36	belong		0xb4100001	(uses shared libs)
+
+0	belong&077777777	0600407		sparc
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+>36	belong		0xb4100001	(uses shared libs)
+
+#------------------------------------------------------------------------------
+# $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $
+# BTSnoop:  file(1) magic for BTSnoop files
+#
+# From <marcel at holtmann.org>
+0	string		btsnoop\0		BTSnoop
+>8	belong		x			version %d,
+>12	belong		1001			Unencapsulated HCI
+>12	belong		1002			HCI UART (H4)
+>12	belong		1003			HCI BCSP
+>12	belong		1004			HCI Serial (H5)
+>>12	belong		x			type %d
+
+#------------------------------------------------------------------------------
+# $File: c-lang,v 1.14 2009/09/19 16:28:08 christos Exp $
+# c-lang:  file(1) magic for C programs (or REXX)
+#
+
+# XPM icons (Greg Roelofs, newt at uchicago.edu)
+# if you uncomment "/*" for C/REXX below, also uncomment this entry
+#0	string		/*\ XPM\ */	X pixmap image data
+#!:mime	image/x-xpmi
+
+# 3DS (3d Studio files) Conflicts with diff output 0x3d '='
+#16	beshort		0x3d3d		image/x-3ds
+
+# this first will upset you if you're a PL/1 shop...
+# in which case rm it; ascmagic will catch real C programs
+#0	search/1	/*		C or REXX program text
+#0	search/1	//		C++ program text
+
+# From: Mikhail Teterin <mi at aldan.algebra.com> 
+0	string		cscope		cscope reference data
+>7	string		x		version %.2s
+# We skip the path here, because it is often long (so file will
+# truncate it) and mostly redundant.
+# The inverted index functionality was added some time betwen
+# versions 11 and 15, so look for -q if version is above 14:
+>7	string		>14
+>>10	search/100	\ -q\ 		with inverted index
+>10	search/100	\ -c\ 		text (non-compressed)
+
+#------------------------------------------------------------------------------
+# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $
+# c64:  file(1) magic for various commodore 64 related files
+#
+# From: Dirk Jagdmann <doj at cubic.org>
+
+0x16500	belong		0x12014100	D64 Image
+0x16500	belong		0x12014180	D71 Image
+0x61800 belong		0x28034400	D81 Image
+0	string		C64\40CARTRIDGE	CCS C64 Emultar Cartridge Image
+0	belong		0x43154164	X64 Image
+
+0	string		GCR-1541	GCR Image
+>8	byte		x		version: %i
+>9	byte		x		tracks: %i
+
+9	string		PSUR		ARC archive (c64)
+2	string		-LH1-		LHA archive (c64)
+
+0	string		C64File		PC64 Emulator file
+>8	string		>\0		"%s"
+0	string		C64Image	PC64 Freezer Image
+
+0	beshort		0x38CD		C64 PCLink Image
+0	string		CBM\144\0\0	Power 64 C64 Emulator Snapshot
+
+0	belong		0xFF424CFF	WRAptor packer (c64)
+
+0	string		C64S\x20tape\x20file	T64 tape Image
+>32	leshort		x		Version:0x%x
+>36	leshort		!0		Entries:%i
+>40	string		x		Name:%.24s
+
+0	string		C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0	T64 tape Image
+>32	leshort		x		Version:0x%x
+>36	leshort		!0		Entries:%i
+>40	string		x		Name:%.24s
+
+0	string		C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0	T64 tape Image
+>32	leshort		x		Version:0x%x
+>36	leshort		!0		Entries:%i
+>40	string		x		Name:%.24s
+
+#------------------------------------------------------------------------------
+# $File: cad,v 1.9 2009/09/19 16:28:08 christos Exp $
+# autocad:  file(1) magic for cad files
+#
+
+# AutoCAD DWG versions R13/R14 (www.autodesk.com)
+# Written December 01, 2003 by Lester Hightower
+# Based on the DWG File Format Specifications at http://www.opendwg.org/
+0	string	       \101\103\061\060\061		   AutoCAD
+>5	string	       \062\000\000\000\000		   DWG ver. R13
+>5	string	       \064\000\000\000\000		   DWG ver. R14
+
+# Microstation DGN/CIT Files (www.bentley.com)
+# Last updated July 29, 2005 by Lester Hightower
+# DGN is the default file extension of Microstation/Intergraph CAD files.
+# CIT is the proprietary raster format (similar to TIFF) used to attach
+# raster underlays to Microstation DGN (vector) drawings.
+# 
+# http://www.wotsit.org/search.asp
+# http://filext.com/detaillist.php?extdetail=DGN
+# http://filext.com/detaillist.php?extdetail=CIT
+#
+# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
+# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
+# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
+# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
+0	string	\010\011\376			Microstation
+>3	string	\002
+>>30	string	\026\105			DGNFile
+>>30	string	\034\105			DGNFile
+>>30	string	\073\107			DGNFile
+>>30	string	\073\110			DGNFile
+>>30	string	\106\107			DGNFile
+>>30	string	\110\103			DGNFile
+>>30	string	\120\104			DGNFile
+>>30	string	\172\104			DGNFile
+>>30	string	\172\105			DGNFile
+>>30	string	\172\106			DGNFile
+>>30	string	\234\106			DGNFile
+>>30	string	\273\105			DGNFile
+>>30	string	\306\106			DGNFile
+>>30	string	\310\104			DGNFile
+>>30	string	\341\104			DGNFile
+>>30	string	\372\103			DGNFile
+>>30	string	\372\104			DGNFile
+>>30	string	\372\106			DGNFile
+>>30	string	\376\103			DGNFile
+>4	string	\030\000\000			CITFile
+>4	string	\030\000\003			CITFile
+
+# AutoCad, from Nahuel Greco
+# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)
+0	string AC1012	AutoCad (release 12)
+0	string AC1013	AutoCad (release 13)
+0	string AC1014	AutoCad (release 14)
+
+# CAD: file(1) magic for computer aided design files
+# Phillip Griffith <phillip dot griffith at gmail dot com>
+# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.
+#
+0	belong	0x08051700	Bentley/Intergraph MicroStation DGN cell library
+0	belong	0x0809fe02	Bentley/Intergraph MicroStation DGN vector CAD
+0	belong	0xc809fe02	Bentley/Intergraph MicroStation DGN vector CAD
+0	beshort	0x0809		Bentley/Intergraph MicroStation
+>0x02	byte	0xfe
+>>0x04	beshort	0x1800		CIT raster CAD
+0	string	AC1012		AutoDesk AutoCAD R13
+0	string	AC1014		AutoDesk AutoCAD R14 
+0	string	AC1015		AutoDesk AutoCAD R2000
+
+#------------------------------------------------------------------------------
+# $File: cafebabe,v 1.8 2009/09/19 16:28:08 christos Exp $
+# Cafe Babes unite!
+#
+# Since Java bytecode and Mach-O fat-files have the same magic number, the test
+# must be performed in the same "magic" sequence to get both right.  The long
+# at offset 4 in a mach-O fat file tells the number of architectures; the short at
+# offset 4 in a Java bytecode file is the JVM minor version and the
+# short at offset 6 is the JVM major version.  Since there are only 
+# only 18 labeled Mach-O architectures at current, and the first released 
+# Java class format was version 43.0, we can safely choose any number
+# between 18 and 39 to test the number of architectures against
+# (and use as a hack). Let's not use 18, because the Mach-O people
+# might add another one or two as time goes by...
+#
+0	belong		0xcafebabe
+!:mime	application/x-java-applet
+>4	belong		>30		compiled Java class data,
+>>6	beshort		x	        version %d.
+>>4	beshort		x       	\b%d
+# Which is which?
+#>>4	belong		0x032d		(Java 1.0)
+#>>4	belong		0x032d		(Java 1.1)
+>>4	belong		0x002e		(Java 1.2)
+>>4	belong		0x002f		(Java 1.3)
+>>4	belong		0x0030		(Java 1.4)
+>>4	belong		0x0031		(Java 1.5)
+>>4	belong		0x0032		(Java 1.6)
+
+
+0	belong		0xcafebabe
+>4	belong		1		Mach-O fat file with 1 architecture
+>4	belong		>1
+>>4	belong		<20		Mach-O fat file with %ld architectures
+
+0	belong		0xcafed00d	JAR compressed with pack200,
+>>5	byte		x		version %d.
+>>4	byte		x		\b%d
+!:mime	application/x-java-pack200
+
+#------------------------------------------------------------------------------
+# $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $
+# CDDB: file(1) magic for CDDB(tm) format CD text data files
+#
+# From <steve at gracenote.com>
+#
+# This is the /etc/magic entry to decode datafiles as used by
+# CDDB-enabled CD player applications.
+#
+
+0	search/1/w	#\040xmcd	CDDB(tm) format CD text data
+
+#------------------------------------------------------------------------------
+# $File: chord,v 1.4 2009/09/19 16:28:08 christos Exp $
+# chord: file(1) magic for Chord music sheet typesetting utility input files
+#
+# From Philippe De Muyter <phdm at macqel.be>
+# File format is actually free, but many distributed files begin with `{title'
+#
+0	string		{title		Chord text file
+
+
+#------------------------------------------------------------------------------
+# $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $
+# cisco:  file(1) magic for cisco Systems routers
+#
+# Most cisco file-formats are covered by the generic elf code
+#
+# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
+0	belong&0xffffff00	0x85011400  cisco IOS microcode
+>7	string		>\0		    for '%s'
+0	belong&0xffffff00	0x8501cb00  cisco IOS experimental microcode
+>7	string		>\0		    for '%s'
+
+#------------------------------------------------------------------------------
+# $File: citrus,v 1.4 2009/09/19 16:28:08 christos Exp $
+# citrus locale declaration
+#
+
+0	string		RuneCT		Citrus locale declaration for LC_CTYPE
+
+
+#------------------------------------------------------------------------------
+# $File: clarion,v 1.4 2009/09/19 16:28:08 christos Exp $
+# clarion:  file(1) magic for # Clarion Personal/Professional Developer
+# (v2 and above)
+# From: Julien Blache <jb at jblache.org>
+
+# Database files
+# signature
+0	leshort	0x3343	Clarion Developer (v2 and above) data file
+# attributes
+>2	leshort	&0x0001	\b, locked
+>2	leshort	&0x0004	\b, encrypted
+>2	leshort	&0x0008	\b, memo file exists
+>2	leshort	&0x0010	\b, compressed
+>2	leshort	&0x0040	\b, read only
+# number of records
+>5	lelong	x	\b, %ld records
+
+# Memo files
+0	leshort	0x334d	Clarion Developer (v2 and above) memo data
+
+# Key/Index files
+# No magic? :(
+
+# Help files
+0	leshort	0x49e0	Clarion Developer (v2 and above) help data
+
+#------------------------------------------------------------------------------
+# $File: claris,v 1.5 2009/09/19 16:28:08 christos Exp $
+# claris:  file(1) magic for claris
+# "H. Nanosecond" <aldomel at ix.netcom.com>
+# Claris Works a word processor, etc.
+# Version 3.0
+
+# .pct claris works clip art files
+#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
+#*
+#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
+#null to byte 1000 octal
+514	string	\377\377\377\377\000	Claris clip art?
+>0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0	yes.
+514	string	\377\377\377\377\001	Claris clip art?
+>0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0	yes.
+
+# Claris works files
+# .cwk
+0	string	\002\000\210\003\102\117\102\117\000\001\206 Claris works document
+# .plt
+0	string	\020\341\000\000\010\010	Claris Works pallete files .plt
+
+# .msp a dictionary file I am not sure about this I have only one .msp file
+0	string	\002\271\262\000\040\002\000\164	Claris works dictionary
+
+# .usp are user dictionary bits
+# I am not sure about a magic header:
+#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
+#        soh   S   p   f   8   U   D  sp   ^   S  cr  nl   p   o   d   i
+#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
+#          a   t   r   i   s   t  sp   ^   S  cr  nl   d   i   v  sp   #
+
+# .mth Thesaurus
+# starts with \0 but no magic header
+
+# .chy Hyphenation file
+# I am not sure: 000 210 034 000 000
+
+# other claris files
+#./windows/claris/useng.ndx: data
+#./windows/claris/xtndtran.l32: data
+#./windows/claris/xtndtran.lst: data
+#./windows/claris/clworks.lbl: data
+#./windows/claris/clworks.prf: data
+#./windows/claris/userd.spl: data
+
+#------------------------------------------------------------------------------
+# $File: clipper,v 1.6 2009/09/19 16:28:08 christos Exp $
+# clipper:  file(1) magic for Intergraph (formerly Fairchild) Clipper.
+#
+# XXX - what byte order does the Clipper use?
+#
+# XXX - what's the "!" stuff:
+#
+# >18	short		!074000,000000	C1 R1 
+# >18	short		!074000,004000	C2 R1
+# >18	short		!074000,010000	C3 R1
+# >18	short		!074000,074000	TEST
+#
+# I shall assume it's ANDing the field with the first value and
+# comparing it with the second, and rewrite it as:
+#
+# >18	short&074000	000000		C1 R1 
+# >18	short&074000	004000		C2 R1
+# >18	short&074000	010000		C3 R1
+# >18	short&074000	074000		TEST
+#
+# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
+# sort, nor does SunOS 4.x, so either it's something Intergraph added
+# in CLIX, or something AT&T added in SVR3.2 or later, or something
+# somebody else thought was a good idea; it's not documented in the
+# man page for this version of "magic", nor does it appear to be
+# implemented (at least not after I blew off the bogus code to turn
+# old-style "&"s into new-style "&"s, which just didn't work at all).
+#
+0	short		0575		CLIPPER COFF executable (VAX #)
+>20	short		0407		(impure)
+>20	short		0410		(5.2 compatible)
+>20	short		0411		(pure)
+>20	short		0413		(demand paged)
+>20	short		0443		(target shared library)
+>12	long		>0		not stripped
+>22	short		>0		- version %ld
+0	short		0577		CLIPPER COFF executable
+>18	short&074000	000000		C1 R1 
+>18	short&074000	004000		C2 R1
+>18	short&074000	010000		C3 R1
+>18	short&074000	074000		TEST
+>20	short		0407		(impure)
+>20	short		0410		(pure)
+>20	short		0411		(separate I&D)
+>20	short		0413		(paged)
+>20	short		0443		(target shared library)
+>12	long		>0		not stripped
+>22	short		>0		- version %ld
+>48	long&01		01		alignment trap enabled
+>52	byte		1		-Ctnc
+>52	byte		2		-Ctsw
+>52	byte		3		-Ctpw
+>52	byte		4		-Ctcb
+>53	byte		1		-Cdnc
+>53	byte		2		-Cdsw
+>53	byte		3		-Cdpw
+>53	byte		4		-Cdcb
+>54	byte		1		-Csnc
+>54	byte		2		-Cssw
+>54	byte		3		-Cspw
+>54	byte		4		-Cscb
+4	string		pipe		CLIPPER instruction trace
+4	string		prof		CLIPPER instruction profile
+
+#------------------------------------------------------------------------------
+# $File: commands,v 1.36 2010/01/24 18:41:11 christos Exp $
+# commands:  file(1) magic for various shells and interpreters
+#
+#0	string		:			shell archive or script for antique kernel text
+0	string/w	#!\ /bin/sh		POSIX shell script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /bin/csh		C shell script text executable
+!:mime	text/x-shellscript
+# korn shell magic, sent by George Wu, gwu at clyde.att.com
+0	string/w	#!\ /bin/ksh		Korn shell script text executable
+!:mime	text/x-shellscript
+0	string/w 	#!\ /bin/tcsh		Tenex C shell script text executable
+!:mime	text/x-shellscript
+0	string/w 	#!\ /usr/local/tcsh	Tenex C shell script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/local/bin/tcsh	Tenex C shell script text executable
+!:mime	text/x-shellscript
+
+#
+# zsh/ash/ae/nawk/gawk magic from cameron at cs.unsw.oz.au (Cameron Simpson)
+0	string/w	#!\ /bin/zsh		Paul Falstad's zsh script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/bin/zsh	Paul Falstad's zsh script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/local/bin/zsh	Paul Falstad's zsh script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/local/bin/ash	Neil Brown's ash script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/local/bin/ae	Neil Brown's ae script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /bin/nawk		new awk script text executable
+!:mime	text/x-nawk
+0	string/w	#!\ /usr/bin/nawk	new awk script text executable
+!:mime	text/x-nawk
+0	string/w	#!\ /usr/local/bin/nawk	new awk script text executable
+!:mime	text/x-nawk
+0	string/w	#!\ /bin/gawk		GNU awk script text executable
+!:mime	text/x-gawk
+0	string/w	#!\ /usr/bin/gawk	GNU awk script text executable
+!:mime	text/x-gawk
+0	string/w	#!\ /usr/local/bin/gawk	GNU awk script text executable
+!:mime	text/x-gawk
+#
+0	string/w	#!\ /bin/awk		awk script text executable
+!:mime	text/x-awk
+0	string/w	#!\ /usr/bin/awk	awk script text executable
+!:mime	text/x-awk
+# update to distinguish from *.vcf files
+# this is broken because postscript has /EBEGIN{ for example.
+#0	search/Ww	BEGIN {			awk script text
+
+# AT&T Bell Labs' Plan 9 shell
+0	string/w	#!\ /bin/rc	Plan 9 rc shell script text executable
+
+# bash shell magic, from Peter Tobias (tobias at server.et-inf.fho-emden.de)
+0	string/w	#!\ /bin/bash	Bourne-Again shell script text executable
+!:mime	text/x-shellscript
+0	string/w	#!\ /usr/local/bin/bash	Bourne-Again shell script text executable
+!:mime	text/x-shellscript
+
+# using env
+0	string/t		#!/usr/bin/env		a
+>15	string/t		>\0			%s script text executable
+0	string/t		#!\ /usr/bin/env	a
+>16	string/t		>\0			%s script text executable
+
+# PHP scripts
+# Ulf Harnhammar <ulfh at update.uu.se>
+0	search/1/c	=<?php			PHP script text
+!:mime	text/x-php
+0	search/1	=<?\n			PHP script text
+!:mime	text/x-php
+0	search/1	=<?\r			PHP script text
+!:mime	text/x-php
+0	search/1/w	#!\ /usr/local/bin/php	PHP script text executable
+!:mime	text/x-php
+0	search/1/w	#!\ /usr/bin/php	PHP script text executable
+!:mime	text/x-php
+
+0	string		Zend\x00		PHP script Zend Optimizer data
+
+0	string		$!			DCL command file
+
+#----------------------------------------------------------------------------
+# $File: communications,v 1.5 2009/09/19 16:28:08 christos Exp $
+# communication
+
+# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
+# It is used for conformance testing of communication protocols.
+# Added by W. Borgert <debacle at debian.org>.
+0	string		$Suite			TTCN Abstract Test Suite
+>&1	string		$SuiteId
+>>&1	string		>\n			%s
+>&2	string		$SuiteId
+>>&1	string		>\n			%s
+>&3	string		$SuiteId
+>>&1	string		>\n			%s
+
+# MSC (message sequence charts) are a formal description technique,
+# described in ITU-T Z.120, mainly used for communication protocols.
+# Added by W. Borgert <debacle at debian.org>.
+0	string		mscdocument	Message Sequence Chart (document)
+0	string		msc		Message Sequence Chart (chart)
+0	string		submsc		Message Sequence Chart (subchart)
+
+#------------------------------------------------------------------------------
+# $File: compress,v 1.42 2009/09/19 16:28:08 christos Exp $
+# compress:  file(1) magic for pure-compression formats (no archives)
+#
+# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
+#
+# Formats for various forms of compressed data
+# Formats for "compress" proper have been moved into "compress.c",
+# because it tries to uncompress it to figure out what's inside.
+
+# standard unix compress
+0	string		\037\235	compress'd data
+!:mime	application/x-compress
+!:apple	LZIVZIVU
+>2	byte&0x80	>0		block compressed
+>2	byte&0x1f	x		%d bits
+
+# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
+#   Edited by Chris Chittleborough <cchittleborough at yahoo.com.au>, March 2002
+#	* Original filename is only at offset 10 if "extra field" absent
+#	* Produce shorter output - notably, only report compression methods
+#	  other than 8 ("deflate", the only method defined in RFC 1952).
+0       string          \037\213        gzip compressed data
+!:mime	application/x-gzip
+>2	byte		<8		\b, reserved method
+>2	byte		>8		\b, unknown method
+>3	byte		&0x01		\b, ASCII
+>3	byte		&0x02		\b, has CRC
+>3	byte		&0x04		\b, extra field
+>3	byte&0xC	=0x08
+>>10	string		x		\b, was "%s"
+>3	byte		&0x10		\b, has comment
+>9	byte		=0x00		\b, from FAT filesystem (MS-DOS, OS/2, NT)
+>9	byte		=0x01		\b, from Amiga
+>9	byte		=0x02		\b, from VMS
+>9	byte		=0x03		\b, from Unix
+>9	byte		=0x04		\b, from VM/CMS
+>9	byte		=0x05		\b, from Atari
+>9	byte		=0x06		\b, from HPFS filesystem (OS/2, NT)
+>9	byte		=0x07		\b, from MacOS
+>9	byte		=0x08		\b, from Z-System
+>9	byte		=0x09		\b, from CP/M
+>9	byte		=0x0A		\b, from TOPS/20
+>9	byte		=0x0B		\b, from NTFS filesystem (NT)
+>9	byte		=0x0C		\b, from QDOS
+>9	byte		=0x0D		\b, from Acorn RISCOS
+>3	byte		&0x10		\b, comment
+>3	byte		&0x20		\b, encrypted
+>4	ledate		>0		\b, last modified: %s
+>8	byte		2		\b, max compression
+>8	byte		4		\b, max speed
+
+# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
+0	string		\037\036	packed data
+!:mime	application/octet-stream
+>2	belong		>1		\b, %d characters originally
+>2	belong		=1		\b, %d character originally
+#
+# This magic number is byte-order-independent.
+0	short		0x1f1f		old packed data
+!:mime	application/octet-stream
+
+# XXX - why *two* entries for "compacted data", one of which is
+# byte-order independent, and one of which is byte-order dependent?
+#
+0	short		0x1fff		compacted data
+!:mime	application/octet-stream
+# This string is valid for SunOS (BE) and a matching "short" is listed
+# in the Ultrix (LE) magic file.
+0	string		\377\037	compacted data
+!:mime	application/octet-stream
+0	short		0145405		huf output
+!:mime	application/octet-stream
+
+# bzip2
+0	string		BZh		bzip2 compressed data
+!:mime	application/x-bzip2
+>3	byte		>47		\b, block size = %c00k
+
+# lzip
+0	string		LZIP		lzip compressed data
+!:mime application/x-lzip
+>4	byte		x		\b, version: %d
+
+# squeeze and crunch
+# Michael Haardt <michael at cantor.informatik.rwth-aachen.de>
+0	beshort		0x76FF		squeezed data,
+>4	string		x		original name %s
+0	beshort		0x76FE		crunched data,
+>2	string		x		original name %s
+0	beshort		0x76FD		LZH compressed data,
+>2	string		x		original name %s
+
+# Freeze
+0	string		\037\237	frozen file 2.1
+0	string		\037\236	frozen file 1.0 (or gzip 0.5)
+
+# SCO compress -H (LZH)
+0	string		\037\240	SCO compress -H (LZH) data
+
+# European GSM 06.10 is a provisional standard for full-rate speech
+# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
+# excitation/long term prediction) coding at 13 kbit/s.
+#
+# There's only a magic nibble (4 bits); that nibble repeats every 33
+# bytes.  This isn't suited for use, but maybe we can use it someday.
+#
+# This will cause very short GSM files to be declared as data and
+# mismatches to be declared as data too!
+#0	byte&0xF0	0xd0		data
+#>33	byte&0xF0	0xd0
+#>66	byte&0xF0	0xd0
+#>99	byte&0xF0	0xd0
+#>132	byte&0xF0	0xd0		GSM 06.10 compressed audio
+
+# bzip	a block-sorting file compressor
+#	by Julian Seward <sewardj at cs.man.ac.uk> and others
+#
+#0	string		BZ		bzip compressed data
+#>2	byte		x		\b, version: %c
+#>3	string		=1		\b, compression block size 100k
+#>3	string		=2		\b, compression block size 200k
+#>3	string		=3		\b, compression block size 300k
+#>3	string		=4		\b, compression block size 400k
+#>3	string		=5		\b, compression block size 500k
+#>3	string		=6		\b, compression block size 600k
+#>3	string		=7		\b, compression block size 700k
+#>3	string		=8		\b, compression block size 800k
+#>3	string		=9		\b, compression block size 900k
+
+# lzop from <markus.oberhumer at jk.uni-linz.ac.at>
+0	string		\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a	lzop compressed data
+>9	beshort		<0x0940
+>>9	byte&0xf0	=0x00		- version 0.
+>>9	beshort&0x0fff	x		\b%03x,
+>>13	byte		1		LZO1X-1,
+>>13	byte		2		LZO1X-1(15),
+>>13	byte		3		LZO1X-999,
+## >>22	bedate		>0		last modified: %s,
+>>14	byte		=0x00		os: MS-DOS
+>>14	byte		=0x01		os: Amiga
+>>14	byte		=0x02		os: VMS
+>>14	byte		=0x03		os: Unix
+>>14	byte		=0x05		os: Atari
+>>14	byte		=0x06		os: OS/2
+>>14	byte		=0x07		os: MacOS
+>>14	byte		=0x0A		os: Tops/20
+>>14	byte		=0x0B		os: WinNT
+>>14	byte		=0x0E		os: Win32
+>9	beshort		>0x0939
+>>9	byte&0xf0	=0x00		- version 0.
+>>9	byte&0xf0	=0x10		- version 1.
+>>9	byte&0xf0	=0x20		- version 2.
+>>9	beshort&0x0fff	x		\b%03x,
+>>15	byte		1		LZO1X-1,
+>>15	byte		2		LZO1X-1(15),
+>>15	byte		3		LZO1X-999,
+## >>25	bedate		>0		last modified: %s,
+>>17	byte		=0x00		os: MS-DOS
+>>17	byte		=0x01		os: Amiga
+>>17	byte		=0x02		os: VMS
+>>17	byte		=0x03		os: Unix
+>>17	byte		=0x05		os: Atari
+>>17	byte		=0x06		os: OS/2
+>>17	byte		=0x07		os: MacOS
+>>17	byte		=0x0A		os: Tops/20
+>>17	byte		=0x0B		os: WinNT
+>>17	byte		=0x0E		os: Win32
+
+# 4.3BSD-Quasijarus Strong Compression
+# http://minnie.tuhs.org/Quasijarus/compress.html
+0	string		\037\241	Quasijarus strong compressed data
+
+# From: Cory Dikkers <cdikkers at swbell.net>
+0	string		XPKF		Amiga xpkf.library compressed data
+0	string		PP11		Power Packer 1.1 compressed data
+0	string		PP20		Power Packer 2.0 compressed data,
+>4	belong		0x09090909	fast compression
+>4	belong		0x090A0A0A	mediocre compression
+>4	belong		0x090A0B0B	good compression
+>4	belong		0x090A0C0C	very good compression
+>4	belong		0x090A0C0D	best compression
+
+# 7-zip archiver, from Thomas Klausner (wiz at danbala.tuwien.ac.at)
+# http://www.7-zip.org or DOC/7zFormat.txt 
+#
+0	string		7z\274\257\047\034	7-zip archive data,
+>6	byte		x			version %d
+>7	byte		x			\b.%d
+
+# Type: LZMA
+# URL:  http://www.7-zip.org/sdk.html
+# From: Robert Millan <rmh at aybabtu.com> and Reuben Thomas <rrt at sc3d.org>
+# Commented out because apparently not reliable (according to Debian
+# bug #364260)
+#0	string		]\000\000\200\000	LZMA compressed data
+
+# Type: LZMA
+0	lelong&0xffffff	=0x5d
+>12	leshort		=0xff			LZMA compressed data,
+>>5	lequad		=0xffffffffffffffff	streamed
+>>5	lequad		!0xffffffffffffffff	non-streamed, size %lld
+!:mime	application/x-lzma
+
+# http://tukaani.org/xz/xz-file-format.txt
+0	ustring		\xFD7zXZ\x00		xz compressed data
+!:mime	application/x-xz
+
+# AFX compressed files (Wolfram Kleff)
+2	string		-afx-		AFX compressed file data
+
+# Supplementary magic data for the file(1) command to support
+# rzip(1).  The format is described in magic(5).
+#
+# Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with
+# this file.
+#
+0	string		RZIP		rzip compressed data
+>4	byte		x		- version %d
+>5	byte		x		\b.%d
+>6	belong		x		(%d bytes)
+
+# Type: XZ
+# URL: http://tukaani.org/xz/
+0	string		\xfd\x37\x7a\x58\x5a\x00	XZ compressed data
+!:mime application/x-xz
+
+#------------------------------------------------------------------------------
+# $File: console,v 1.16 2009/09/19 16:28:08 christos Exp $
+# Console game magic
+# Toby Deshane <hac at shoelace.digivill.net>
+#    ines:  file(1) magic for Marat's iNES Nintendo Entertainment System
+#           ROM dump format
+
+0 string NES\032 iNES ROM dump,
+>4 byte  x     %dx16k PRG
+>5 byte  x     \b, %dx8k CHR
+>6 byte&0x01  =0x1  \b, [Vert.]
+>6 byte&0x01  =0x0  \b, [Horiz.]
+>6 byte&0x02  =0x2  \b, [SRAM]
+>6 byte&0x04  =0x4  \b, [Trainer]
+>6 byte&0x04  =0x8  \b, [4-Scr]
+
+#------------------------------------------------------------------------------
+# gameboy:  file(1) magic for the Nintendo (Color) Gameboy raw ROM format
+#
+0x104 belong 0xCEED6666 Gameboy ROM:
+>0x134 string >\0 "%.16s"
+>0x146 byte 0x03  \b,[SGB]
+>0x147 byte 0x00  \b, [ROM ONLY]
+>0x147 byte 0x01  \b, [ROM+MBC1]
+>0x147 byte 0x02  \b, [ROM+MBC1+RAM]
+>0x147 byte 0x03  \b, [ROM+MBC1+RAM+BATT]
+>0x147 byte 0x05  \b, [ROM+MBC2]
+>0x147 byte 0x06  \b, [ROM+MBC2+BATTERY]
+>0x147 byte 0x08  \b, [ROM+RAM]
+>0x147 byte 0x09  \b, [ROM+RAM+BATTERY]
+>0x147 byte 0x0B  \b, [ROM+MMM01]
+>0x147 byte 0x0C  \b, [ROM+MMM01+SRAM]
+>0x147 byte 0x0D  \b, [ROM+MMM01+SRAM+BATT]
+>0x147 byte 0x0F  \b, [ROM+MBC3+TIMER+BATT]
+>0x147 byte 0x10  \b, [ROM+MBC3+TIMER+RAM+BATT]
+>0x147 byte 0x11  \b, [ROM+MBC3]
+>0x147 byte 0x12  \b, [ROM+MBC3+RAM]
+>0x147 byte 0x13  \b, [ROM+MBC3+RAM+BATT]
+>0x147 byte 0x19  \b, [ROM+MBC5]
+>0x147 byte 0x1A  \b, [ROM+MBC5+RAM]
+>0x147 byte 0x1B  \b, [ROM+MBC5+RAM+BATT]
+>0x147 byte 0x1C  \b, [ROM+MBC5+RUMBLE]
+>0x147 byte 0x1D  \b, [ROM+MBC5+RUMBLE+SRAM]
+>0x147 byte 0x1E  \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
+>0x147 byte 0x1F  \b, [Pocket Camera]
+>0x147 byte 0xFD  \b, [Bandai TAMA5]
+>0x147 byte 0xFE  \b, [Hudson HuC-3]
+>0x147 byte 0xFF  \b, [Hudson HuC-1]
+
+>0x148 byte 0     \b, ROM: 256Kbit
+>0x148 byte 1     \b, ROM: 512Kbit
+>0x148 byte 2     \b, ROM: 1Mbit
+>0x148 byte 3     \b, ROM: 2Mbit
+>0x148 byte 4     \b, ROM: 4Mbit
+>0x148 byte 5     \b, ROM: 8Mbit
+>0x148 byte 6     \b, ROM: 16Mbit
+>0x148 byte 0x52  \b, ROM: 9Mbit
+>0x148 byte 0x53  \b, ROM: 10Mbit
+>0x148 byte 0x54  \b, ROM: 12Mbit
+
+>0x149 byte 1     \b, RAM: 16Kbit
+>0x149 byte 2     \b, RAM: 64Kbit
+>0x149 byte 3     \b, RAM: 128Kbit
+>0x149 byte 4     \b, RAM: 1Mbit
+
+#>0x14e long  x     \b, CRC: %x
+
+#------------------------------------------------------------------------------
+# genesis:  file(1) magic for the Sega MegaDrive/Genesis raw ROM format
+#
+0x100 string SEGA  Sega MegaDrive/Genesis raw ROM dump
+>0x120 string >\0 Name: "%.16s"
+>0x110 string >\0 %.16s
+>0x1B0 string RA with SRAM
+
+#------------------------------------------------------------------------------
+# genesis:  file(1) magic for the Super MegaDrive ROM dump format
+#
+0x280 string EAGN  Super MagicDrive ROM dump
+>0 byte x %dx16k blocks
+>2 byte 0 \b, last in series or standalone
+>2 byte >0 \b, split ROM
+>8 byte 0xAA
+>9 byte 0xBB
+
+#------------------------------------------------------------------------------
+# genesis:  file(1) alternate magic for the Super MegaDrive ROM dump format
+#
+0x280 string EAMG  Super MagicDrive ROM dump
+>0 byte x %dx16k blocks
+>2 byte x \b, last in series or standalone
+>8 byte 0xAA
+>9 byte 0xBB
+
+#------------------------------------------------------------------------------
+# smsgg:  file(1) magic for Sega Master System and Game Gear ROM dumps
+#
+# Does not detect all images.  Very preliminary guesswork.  Need more data
+# on format.
+#
+# FIXME: need a little more info...;P
+#
+#0 byte 0xF3
+#>1 byte 0xED  Sega Master System/Game Gear ROM dump
+#>1 byte 0x31  Sega Master System/Game Gear ROM dump
+#>1 byte 0xDB  Sega Master System/Game Gear ROM dump
+#>1 byte 0xAF  Sega Master System/Game Gear ROM dump
+#>1 byte 0xC3  Sega Master System/Game Gear ROM dump
+
+#------------------------------------------------------------------------------
+# dreamcast:  file(1) uncertain magic for the Sega Dreamcast VMU image format
+#
+0 belong 0x21068028   Sega Dreamcast VMU game image
+0 string LCDi         Dream Animator file
+
+#------------------------------------------------------------------------------
+# v64: file(1) uncertain magic for the V64 format N64 ROM dumps
+#
+0 belong 0x37804012    V64 Nintendo 64 ROM dump
+
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# Nintendo .nds
+192	string	\044\377\256Qi\232	Nintendo DS Game ROM Image
+# Nintendo .gba
+0	string	\056\000\000\352$\377\256Qi	Nintendo Game Boy Advance ROM Image
+
+#------------------------------------------------------------------------------
+# msx: file(1) magic for MSX game cartridge dumps
+# Too simple - MPi
+#0 beshort 0x4142 MSX game cartridge dump 
+
+#------------------------------------------------------------------------------
+# Sony Playstation executables (Adam Sjoegren <asjo at diku.dk>) :
+0	string	PS-X\ EXE	Sony Playstation executable
+#  Area:
+>113	string	x		(%s)
+
+#------------------------------------------------------------------------------
+# Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia at cc.hut.fi>)
+0       string          XBEH            XBE, Microsoft Xbox executable
+# probabilistic checks whether signed or not
+>0x0004 ulelong =0x0
+>>&2    ulelong =0x0
+>>>&2   ulelong =0x0  \b, not signed
+>0x0004 ulelong >0
+>>&2    ulelong >0
+>>>&2   ulelong >0    \b, signed
+# expect base address of 0x10000
+>0x0104               ulelong =0x10000
+>>(0x0118-0x0FF60)    ulelong&0x80000007  0x80000007 \b, all regions
+>>(0x0118-0x0FF60)    ulelong&0x80000007  !0x80000007
+>>>(0x0118-0x0FF60)   ulelong >0           (regions:
+>>>>(0x0118-0x0FF60)  ulelong &0x00000001  NA
+>>>>(0x0118-0x0FF60)  ulelong &0x00000002  Japan
+>>>>(0x0118-0x0FF60)  ulelong &0x00000004  Rest_of_World
+>>>>(0x0118-0x0FF60)  ulelong &0x80000000  Manufacturer
+>>>(0x0118-0x0FF60)   ulelong >0           \b)
+
+# --------------------------------
+# Microsoft Xbox data file formats
+0       string          XIP0            XIP, Microsoft Xbox data
+0       string          XTF0            XTF, Microsoft Xbox data
+
+# Atari Lynx cartridge dump (EXE/BLL header)
+# From: "Stefan A. Haubenthal" <polluks at web.de>
+
+0	beshort		0x8008		Lynx cartridge,
+>2	beshort		x		RAM start $%04x
+>6	string		BS93
+
+# Opera file system that is used on the 3DO console
+# From: Serge van den Boom <svdb at stack.nl>
+0	string		\x01ZZZZZ\x01	3DO "Opera" file system
+
+# From Gürkan Sengün <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+0	string		GBS		Nintendo Gameboy Music/Audio Data
+12	string		GameBoy\ Music\ Module	Nintendo Gameboy Music Module
+
+# Playstations Patch Files from: From: Thomas Klausner <tk at giga.or.at>
+0	string	PPF30			Playstation Patch File version 3.0
+>5	byte	0			\b, PPF 1.0 patch
+>5	byte	1			\b, PPF 2.0 patch
+>5	byte	2			\b, PPF 3.0 patch
+>>56	byte	0			\b, Imagetype BIN (any)
+>>56	byte	1			\b, Imagetype GI (PrimoDVD)
+>>57	byte	0			\b, Blockcheck disabled
+>>57	byte	1			\b, Blockcheck enabled
+>>58	byte	0			\b, Undo data not available
+>>58	byte	1			\b, Undo data available
+>6	string	x			\b, description: %s
+
+0	string	PPF20			Playstation Patch File version 2.0
+>5	byte	0			\b, PPF 1.0 patch
+>5	byte	1			\b, PPF 2.0 patch
+>>56	lelong	>0			\b, size of file to patch %d
+>6	string	x			\b, description: %s
+
+0	string	PPF10			Playstation Patch File version 1.0
+>5	byte	0			\b, Simple Encoding
+>6	string	x			\b, description: %s
+
+# From: Daniel Dawson <ddawson at icehouse.net>
+# SNES9x .smv "movie" file format.
+0		string		SMV\x1A	SNES9x input recording
+>0x4		lelong		x	\b, version %d
+# version 4 is latest so far 
+>0x4		lelong		<5
+>>0x8		ledate		x	\b, recorded at %s
+>>0xc		lelong		>0	\b, rerecorded %d times
+>>0x10		lelong		x	\b, %d frames long
+>>0x14		byte		>0	\b, data for controller(s):
+>>>0x14		byte		&0x1	#1
+>>>0x14		byte		&0x2	#2
+>>>0x14		byte		&0x4	#3
+>>>0x14		byte		&0x8	#4
+>>>0x14		byte		&0x10	#5
+>>0x15		byte		^0x1	\b, begins from snapshot
+>>0x15		byte		&0x1	\b, begins from reset
+>>0x15		byte		^0x2	\b, NTSC standard
+>>0x15		byte		&0x2	\b, PAL standard
+>>0x17		byte		&0x1    \b, settings:
+# WIP1Timing not used as of version 4
+>>>0x4		lelong		<4
+>>>>0x17	byte		&0x2	WIP1Timing
+>>>0x17		byte		&0x4	Left+Right
+>>>0x17		byte		&0x8	VolumeEnvX
+>>>0x17		byte		&0x10	FakeMute
+>>>0x17		byte		&0x20	SyncSound
+# New flag as of version 4
+>>>0x4		lelong		>3
+>>>>0x17	byte		&0x80	NoCPUShutdown
+>>0x4		lelong		<4
+>>>0x18		lelong		>0x23
+>>>>0x20	leshort		!0
+>>>>>0x20	lestring16	x	\b, metadata: "%s"
+>>0x4		lelong		>3
+>>>0x24		byte		>0	\b, port 1:
+>>>>0x24	byte		1	joypad
+>>>>0x24	byte		2	mouse
+>>>>0x24	byte		3	SuperScope
+>>>>0x24	byte		4	Justifier
+>>>>0x24	byte		5	multitap
+>>>0x24		byte		>0	\b, port 2:
+>>>>0x25	byte		1	joypad
+>>>>0x25	byte		2	mouse
+>>>>0x25	byte		3	SuperScope
+>>>>0x25	byte		4	Justifier
+>>>>0x25	byte		5	multitap
+>>>0x18		lelong		>0x43
+>>>>0x40	leshort		!0
+>>>>>0x40	lestring16	x	\b, metadata: "%s"
+>>0x17		byte		&0x40   \b, ROM:
+>>>(0x18.l-26)	lelong		x	CRC32 0x%08x
+>>>(0x18.l-23)	string		x	"%s"
+
+
+#------------------------------------------------------------------------------
+# $File: convex,v 1.7 2009/09/19 16:28:08 christos Exp $
+# convex:  file(1) magic for Convex boxes
+#
+# Convexes are big-endian.
+#
+# /*\
+#  * Below are the magic numbers and tests added for Convex.
+#  * Added at beginning, because they are expected to be used most.
+# \*/
+0	belong	0507	Convex old-style object
+>16	belong	>0	not stripped
+0	belong	0513	Convex old-style demand paged executable
+>16	belong	>0	not stripped
+0	belong	0515	Convex old-style pre-paged executable
+>16	belong	>0	not stripped
+0	belong	0517	Convex old-style pre-paged, non-swapped executable
+>16	belong	>0	not stripped
+0	belong	0x011257	Core file
+#
+# The following are a series of dump format magic numbers.  Each one
+# corresponds to a drastically different dump format.  The first on is
+# the original dump format on a 4.1 BSD or earlier file system.  The
+# second marks the change between the 4.1 file system and the 4.2 file
+# system.  The Third marks the changing of the block size from 1K
+# to 2K to be compatible with an IDC file system.  The fourth indicates
+# a dump that is dependent on Convex Storage Manager, because data in
+# secondary storage is not physically contained within the dump.
+# The restore program uses these number to determine how the data is
+# to be extracted.
+#
+24	belong	=60013	dump format, 4.2 or 4.3 BSD (IDC compatible)
+24	belong	=60014	dump format, Convex Storage Manager by-reference dump
+#
+# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
+# If there is no `=' sign, assume just checking for whether the bit is set?
+#
+0	belong	0601		Convex SOFF
+>88	belong&0x000f0000	=0x00000000	c1
+>88	belong			&0x00010000	c2
+>88	belong			&0x00020000	c2mp
+>88	belong			&0x00040000	parallel
+>88	belong			&0x00080000	intrinsic
+>88	belong			&0x00000001	demand paged
+>88	belong			&0x00000002	pre-paged
+>88	belong			&0x00000004	non-swapped
+>88	belong			&0x00000008	POSIX
+#
+>84	belong			&0x80000000	executable
+>84	belong			&0x40000000	object
+>84	belong&0x20000000	=0		not stripped
+>84	belong&0x18000000	=0x00000000	native fpmode
+>84	belong&0x18000000	=0x10000000	ieee fpmode
+>84	belong&0x18000000	=0x18000000	undefined fpmode
+#
+0	belong			0605		Convex SOFF core
+#
+0	belong			0607		Convex SOFF checkpoint
+>88	belong&0x000f0000	=0x00000000	c1
+>88	belong			&0x00010000	c2
+>88	belong			&0x00020000	c2mp
+>88	belong			&0x00040000	parallel
+>88	belong			&0x00080000	intrinsic
+>88	belong			&0x00000008	POSIX
+#
+>84	belong&0x18000000	=0x00000000	native fpmode
+>84	belong&0x18000000	=0x10000000	ieee fpmode
+>84	belong&0x18000000	=0x18000000	undefined fpmode
+
+#------------------------------------------------------------------------------
+# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $
+# cracklib:  file (1) magic for cracklib v2.7
+
+0	lelong	0x70775631	Cracklib password index, little endian
+>4	long	>0		(%i words)
+>4	long	0		("64-bit")
+>>8	long	>-1		(%i words)
+0	belong	0x70775631	Cracklib password index, big endian
+>4	belong	>-1		(%i words)
+# really bellong 0x0000000070775631
+0	search/1	\0\0\0\0pwV1	Cracklib password index, big endian ("64-bit")
+>12	belong	>0		(%i words)
+
+# ----------------------------------------------------------------------------
+# $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $
+# ctags:  file (1) magic for Exuberant Ctags files
+# From: Alexander Mai <mai at migdal.ikp.physik.tu-darmstadt.de>
+0	search/1	=!_TAG	Exuberant Ctags tag file text
+
+#------------------------------------------------------------------------------
+# $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $
+# dact:  file(1) magic for DACT compressed files
+#
+0	long		0x444354C3	DACT compressed data
+>4	byte		>-1		(version %i.
+>5	byte		>-1		$BS%i.
+>6	byte		>-1		$BS%i)
+>7	long		>0		$BS, original size: %i bytes
+>15	long		>30		$BS, block size: %i bytes
+
+#------------------------------------------------------------------------------
+# $File: database,v 1.24 2009/09/19 16:28:08 christos Exp $
+# database:  file(1) magic for various databases
+#
+# extracted from header/code files by Graeme Wilford (eep2gw at ee.surrey.ac.uk)
+#
+#
+# GDBM magic numbers
+#  Will be maintained as part of the GDBM distribution in the future.
+#  <downsj at teeny.org>
+0	belong	0x13579ace	GNU dbm 1.x or ndbm database, big endian
+!:mime	application/x-gdbm
+0	lelong	0x13579ace	GNU dbm 1.x or ndbm database, little endian
+!:mime	application/x-gdbm
+0	string	GDBM		GNU dbm 2.x database
+!:mime	application/x-gdbm
+#
+# Berkeley DB
+#
+# Ian Darwin's file /etc/magic files: big/little-endian version.
+#
+# Hash 1.85/1.86 databases store metadata in network byte order.
+# Btree 1.85/1.86 databases store the metadata in host byte order.
+# Hash and Btree 2.X and later databases store the metadata in host byte order.
+
+0	long	0x00061561	Berkeley DB
+!:mime	application/x-dbm
+>8	belong	4321
+>>4	belong	>2		1.86
+>>4	belong	<3		1.85
+>>4	belong	>0		(Hash, version %d, native byte-order)
+>8	belong	1234
+>>4	belong	>2		1.86
+>>4	belong	<3		1.85
+>>4	belong	>0		(Hash, version %d, little-endian)
+
+0	belong	0x00061561	Berkeley DB
+>8	belong	4321
+>>4	belong	>2		1.86
+>>4	belong	<3		1.85
+>>4	belong	>0		(Hash, version %d, big-endian)
+>8	belong	1234
+>>4	belong	>2		1.86
+>>4	belong	<3		1.85
+>>4	belong	>0		(Hash, version %d, native byte-order)
+
+0	long	0x00053162	Berkeley DB 1.85/1.86
+>4	long	>0		(Btree, version %d, native byte-order)
+0	belong	0x00053162	Berkeley DB 1.85/1.86
+>4	belong	>0		(Btree, version %d, big-endian)
+0	lelong	0x00053162	Berkeley DB 1.85/1.86
+>4	lelong	>0		(Btree, version %d, little-endian)
+
+12	long	0x00061561	Berkeley DB
+>16	long	>0		(Hash, version %d, native byte-order)
+12	belong	0x00061561	Berkeley DB
+>16	belong	>0		(Hash, version %d, big-endian)
+12	lelong	0x00061561	Berkeley DB
+>16	lelong	>0		(Hash, version %d, little-endian)
+
+12	long	0x00053162	Berkeley DB
+>16	long	>0		(Btree, version %d, native byte-order)
+12	belong	0x00053162	Berkeley DB
+>16	belong	>0		(Btree, version %d, big-endian)
+12	lelong	0x00053162	Berkeley DB
+>16	lelong	>0		(Btree, version %d, little-endian)
+
+12	long	0x00042253	Berkeley DB
+>16	long	>0		(Queue, version %d, native byte-order)
+12	belong	0x00042253	Berkeley DB
+>16	belong	>0		(Queue, version %d, big-endian)
+12	lelong	0x00042253	Berkeley DB
+>16	lelong	>0		(Queue, version %d, little-endian)
+
+# From Max Bowsher.
+12	long	0x00040988	Berkeley DB
+>16	long	>0		(Log, version %d, native byte-order)
+12	belong	0x00040988	Berkeley DB 
+>16	belong	>0		(Log, version %d, big-endian)
+12	lelong	0x00040988	Berkeley DB
+>16	lelong	>0		(Log, version %d, little-endian)
+
+#
+#
+# Round Robin Database Tool by Tobias Oetiker <oetiker at ee.ethz.ch>
+0	string/b	RRD\0		RRDTool DB
+>4	string/b	x		version %s
+#----------------------------------------------------------------------
+# ROOT: file(1) magic for ROOT databases
+#
+0       string  root\0  ROOT file
+>4      belong  x       Version %d
+>33     belong  x       (Compression: %d)
+
+# XXX: Weak magic.
+# Alex Ott <ott at jet.msk.su>
+## Paradox file formats
+#2	  leshort	0x0800	Paradox 
+#>0x39	  byte		3	v. 3.0 
+#>0x39	  byte		4	v. 3.5 
+#>0x39	  byte		9	v. 4.x 
+#>0x39	  byte		10	v. 5.x 
+#>0x39	  byte		11	v. 5.x 
+#>0x39	  byte		12	v. 7.x 
+#>>0x04	  byte		0	indexed .DB data file 
+#>>0x04	  byte		1	primary index .PX file 
+#>>0x04	  byte		2	non-indexed .DB data file 
+#>>0x04	  byte		3	non-incrementing secondary index .Xnn file 
+#>>0x04	  byte		4	secondary index .Ynn file 
+#>>0x04	  byte		5	incrementing secondary index .Xnn file 
+#>>0x04	  byte		6	non-incrementing secondary index .XGn file 
+#>>0x04	  byte		7	secondary index .YGn file 
+#>>>0x04	  byte		8	incrementing secondary index .XGn file 
+
+## XBase database files
+#0      byte       0x02	
+#>8     leshort	  >0
+#>>12   leshort    0	FoxBase 
+#!:mime	application/x-dbf
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x03	
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x04	
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	dBASE IV no memo file 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x05	
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	dBASE V no memo file 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x30
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	Visual FoxPro 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x43
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	FlagShip with memo var size 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x7b
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	dBASEIV with memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x83	
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	FoxBase+, dBaseIII+ with memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x8b
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	dBaseIV with memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0x8e	
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	dBaseIV with SQL Table 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0xb3
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	FlagShip with .dbt memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0      byte       0xf5
+#!:mime	application/x-dbf
+#>8     leshort	  >0
+#>>12   leshort    0	FoxPro with memo 
+#>>>0x04	lelong		0		(no records)
+#>>>0x04	lelong		>0		(%ld records)
+#
+#0	leshort		0x0006		DBase 3 index file
+
+# MS Access database
+4	string	Standard\ Jet\ DB	Microsoft Access Database
+!:mime	application/x-msaccess
+
+# TDB database from Samba et al - Martin Pool <mbp at samba.org>
+0	string	TDB\ file		TDB database
+>32	lelong	0x2601196D		version 6, little-endian
+>>36	lelong	x			hash size %d bytes
+
+# SE Linux policy database
+0       lelong  0xf97cff8c      SE Linux policy
+>16     lelong  x               v%d
+>20     lelong  1      MLS
+>24     lelong  x       %d symbols
+>28     lelong  x       %d ocons
+
+# ICE authority file data (Wolfram Kleff)
+2	string		ICE		ICE authority data
+
+# X11 Xauthority file (Wolfram Kleff)
+10	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+11	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+12	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+13	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+14	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+15	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+16	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+17	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+18	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
+
+# From: Maxime Henrion <mux at FreeBSD.org>
+# PostgreSQL's custom dump format, Maxime Henrion <mux at FreeBSD.org>
+0	string		PGDMP		PostgreSQL custom database dump
+>5	byte		x		- v%d
+>6	byte		x		\b.%d
+>5	beshort		<0x101		\b-0
+>5	beshort		>0x100
+>>7	byte		x		\b-%d
+
+# Type: Advanced Data Format (ADF) database
+# URL:  http://www.grc.nasa.gov/WWW/cgns/adf/
+# From: Nicolas Chauvat <nicolas.chauvat at logilab.fr>
+0	string	@(#)ADF\ Database	CGNS Advanced Data Format
+
+# Tokyo Cabinet magic data
+# http://tokyocabinet.sourceforge.net/index.html
+0	string		ToKyO\ CaBiNeT\n	Tokyo Cabinet
+>14	string		x			\b (%s)
+>32	byte		0			\b, Hash
+!:mime	application/x-tokyocabinet-hash
+>32	byte		1			\b, B+ tree
+!:mime	application/x-tokyocabinet-btree
+>32	byte		2			\b, Fixed-length
+!:mime	application/x-tokyocabinet-fixed
+>32	byte		3			\b, Table
+!:mime	application/x-tokyocabinet-table
+>33	byte		&1			\b, [open]
+>33	byte		&2			\b, [fatal]
+>34	byte		x			\b, apow=%d
+>35	byte		x			\b, fpow=%d
+>36	byte		&0x01			\b, [large]
+>36	byte		&0x02			\b, [deflate]
+>36	byte		&0x04			\b, [bzip]
+>36	byte		&0x08			\b, [tcbs]
+>36	byte		&0x10			\b, [excodec]
+>40	lequad		x			\b, bnum=%lld
+>48	lequad		x			\b, rnum=%lld
+>56	lequad		x			\b, fsiz=%lld
+
+#------------------------------------------------------------------------------
+# $File: diamond,v 1.7 2009/09/19 16:28:08 christos Exp $
+# diamond:  file(1) magic for Diamond system
+#
+# ... diamond is a multi-media mail and electronic conferencing system....
+#
+# XXX - I think it was either renamed Slate, or replaced by Slate....
+#
+#	The full deal is too long...
+#0	string	<list>\n<protocol\ bbn-multimedia-format>	Diamond Multimedia Document
+0	string	=<list>\n<protocol\ bbn-m	Diamond Multimedia Document
+
+#------------------------------------------------------------------------------
+# $File: diff,v 1.10 2009/09/19 16:28:08 christos Exp $
+# diff:  file(1) magic for diff(1) output
+#
+0	search/1	diff\ 		diff output text
+!:mime	text/x-diff
+0	search/1	***\ 		diff output text
+!:mime	text/x-diff
+0	search/1	Only\ in\ 	diff output text
+!:mime	text/x-diff
+0	search/1	Common\ subdirectories:\ 	diff output text
+!:mime	text/x-diff
+
+0	search/1	Index:		RCS/CVS diff output text
+!:mime	text/x-diff
+
+# bsdiff:  file(1) magic for bsdiff(1) output
+0	string		BSDIFF40	bsdiff(1) patch file
+
+# unified diff
+0	search/4096	---\ 
+>&0	search/1024 \n
+>>&0	search/1 +++\ 
+>>>&0	search/1024 \n
+>>>>&0	search/1 @@	unified diff output text
+!:mime	text/x-diff
+!:strength + 30
+#------------------------------------------------------------------------------
+# $File: digital,v 1.8 2009/09/19 16:28:08 christos Exp $
+#  Digital UNIX - Info
+#
+0	string	=!<arch>\n________64E	Alpha archive
+>22	string	X			-- out of date
+#
+# Alpha COFF Based Executables
+# The stripped stuff really needs to be an 8 byte (64 bit) compare,
+# but this works
+0	leshort		0x183		COFF format alpha
+>22	leshort&020000	&010000		sharable library,
+>22	leshort&020000	^010000		dynamically linked,
+>24	leshort		0410		pure
+>24	leshort		0413		demand paged
+>8	lelong		>0		executable or object module, not stripped
+>8	lelong		0
+>>12	lelong		0		executable or object module, stripped
+>>12	lelong		>0		executable or object module, not stripped
+>27     byte            >0              - version %d.
+>26     byte            >0              %d-
+>28     leshort         >0              %d
+#
+# The next is incomplete, we could tell more about this format,
+# but its not worth it.
+0	leshort		0x188	Alpha compressed COFF
+0	leshort		0x18f	Alpha u-code object
+#
+#
+# Some other interesting Digital formats,
+0	string	\377\377\177		ddis/ddif
+0	string	\377\377\174		ddis/dots archive
+0	string	\377\377\176		ddis/dtif table data
+0	string	\033c\033		LN03 output
+0	long	04553207		X image
+#
+0	string	=!<PDF>!\n		profiling data file
+#
+# Locale data tables (MIPS and Alpha).
+#
+0	short		0x0501		locale data table
+>6	short		0x24		for MIPS
+>6	short		0x40		for Alpha
+
+#------------------------------------------------------------------------------
+# $File: dolby,v 1.5 2009/09/19 16:28:08 christos Exp $
+# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka at gmx.at>
+# from http://www.atsc.org/standards/a_52a.pdf
+# corrections, additions, etc. are always welcome!
+#
+# syncword
+0       beshort         0x0b77  ATSC A/52 aka AC-3 aka Dolby Digital stream,
+# fscod
+>4      byte&0xc0       0x00    48 kHz,
+>4      byte&0xc0       0x40    44.1 kHz,
+>4      byte&0xc0       0x80    32 kHz,
+# is this one used for 96 kHz?
+>4      byte&0xc0       0xc0    reserved frequency,
+#
+>5	byte&7 = 0		\b, complete main (CM)
+>5	byte&7 = 1		\b, music and effects (ME)
+>5	byte&7 = 2		\b, visually impaired (VI)
+>5	byte&7 = 3		\b, hearing impaired (HI)
+>5	byte&7 = 4		\b, dialogue (D)
+>5	byte&7 = 5		\b, commentary (C)
+>5	byte&7 = 6		\b, emergency (E)
+# acmod
+>6      byte&0xe0       0x00    1+1 front,
+>6      byte&0xe0       0x20    1 front/0 rear,
+>6      byte&0xe0       0x40    2 front/0 rear,
+>6      byte&0xe0       0x60    3 front/0 rear,
+>6      byte&0xe0       0x80    2 front/1 rear,
+>6      byte&0xe0       0xa0    3 front/1 rear,
+>6      byte&0xe0       0xc0    2 front/2 rear,
+>6      byte&0xe0       0xe0    3 front/2 rear,
+# lfeon (these may be incorrect)
+>7      byte&0x40       0x00    LFE off,
+>7      byte&0x40       0x40    LFE on,
+#
+>4	byte&0x3e = 0x00	\b, 32 kbit/s
+>4	byte&0x3e = 0x02        \b, 40 kbit/s
+>4	byte&0x3e = 0x04        \b, 48 kbit/s
+>4	byte&0x3e = 0x06        \b, 56 kbit/s
+>4	byte&0x3e = 0x08        \b, 64 kbit/s
+>4	byte&0x3e = 0x0a        \b, 80 kbit/s
+>4	byte&0x3e = 0x0c        \b, 96 kbit/s
+>4	byte&0x3e = 0x0e        \b, 112 kbit/s
+>4	byte&0x3e = 0x10        \b, 128 kbit/s
+>4	byte&0x3e = 0x12        \b, 160 kbit/s
+>4	byte&0x3e = 0x14        \b, 192 kbit/s
+>4	byte&0x3e = 0x16        \b, 224 kbit/s
+>4	byte&0x3e = 0x18        \b, 256 kbit/s
+>4	byte&0x3e = 0x1a        \b, 320 kbit/s
+>4	byte&0x3e = 0x1c        \b, 384 kbit/s
+>4	byte&0x3e = 0x1e        \b, 448 kbit/s
+>4	byte&0x3e = 0x20        \b, 512 kbit/s
+>4	byte&0x3e = 0x22        \b, 576 kbit/s
+>4	byte&0x3e = 0x24        \b, 640 kbit/s
+# dsurmod (these may be incorrect)
+>6      beshort&0x0180  0x0000  Dolby Surround not indicated
+>6      beshort&0x0180  0x0080  not Dolby Surround encoded
+>6      beshort&0x0180  0x0100  Dolby Surround encoded
+>6      beshort&0x0180  0x0180  reserved Dolby Surround mode
+
+#------------------------------------------------------------------------------
+# $File: dump,v 1.11 2009/09/19 16:28:09 christos Exp $
+# dump:  file(1) magic for dump file format--for new and old dump filesystems
+#
+# We specify both byte orders in order to recognize byte-swapped dumps.
+#
+24	belong	60012		new-fs dump file (big endian),
+>4	bedate	x		Previous dump %s,
+>8	bedate	x		This dump %s,
+>12	belong	>0		Volume %ld,
+>692	belong	0		Level zero, type:
+>692	belong	>0		Level %d, type:
+>0	belong	1		tape header,
+>0	belong	2		beginning of file record,
+>0	belong	3		map of inodes on tape,
+>0	belong	4		continuation of file record,
+>0	belong	5		end of volume,
+>0	belong	6		map of inodes deleted,
+>0	belong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	belong	>0		Flags %x
+
+24	belong	60011		old-fs dump file (big endian),
+#>4	bedate	x		Previous dump %s,
+#>8	bedate	x		This dump %s,
+>12	belong	>0		Volume %ld,
+>692	belong	0		Level zero, type:
+>692	belong	>0		Level %d, type:
+>0	belong	1		tape header,
+>0	belong	2		beginning of file record,
+>0	belong	3		map of inodes on tape,
+>0	belong	4		continuation of file record,
+>0	belong	5		end of volume,
+>0	belong	6		map of inodes deleted,
+>0	belong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	belong	>0		Flags %x
+
+24	lelong	60012		new-fs dump file (little endian),
+>4	ledate	x		This dump %s,
+>8	ledate	x		Previous dump %s,
+>12	lelong	>0		Volume %ld,
+>692	lelong	0		Level zero, type:
+>692	lelong	>0		Level %d, type:
+>0	lelong	1		tape header,
+>0	lelong	2		beginning of file record,
+>0	lelong	3		map of inodes on tape,
+>0	lelong	4		continuation of file record,
+>0	lelong	5		end of volume,
+>0	lelong	6		map of inodes deleted,
+>0	lelong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	lelong	>0		Flags %x
+
+24	lelong	60011		old-fs dump file (little endian),
+#>4	ledate	x		Previous dump %s,
+#>8	ledate	x		This dump %s,
+>12	lelong	>0		Volume %ld,
+>692	lelong	0		Level zero, type:
+>692	lelong	>0		Level %d, type:
+>0	lelong	1		tape header,
+>0	lelong	2		beginning of file record,
+>0	lelong	3		map of inodes on tape,
+>0	lelong	4		continuation of file record,
+>0	lelong	5		end of volume,
+>0	lelong	6		map of inodes deleted,
+>0	lelong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	lelong	>0		Flags %x
+
+18	leshort	60011		old-fs dump file (16-bit, assuming PDP-11 endianness),
+>2	medate	x		Previous dump %s,
+>6	medate	x		This dump %s,
+>10	leshort	>0		Volume %ld,
+>0	leshort	1		tape header.
+>0	leshort	2		beginning of file record.
+>0	leshort	3		map of inodes on tape.
+>0	leshort	4		continuation of file record.
+>0	leshort	5		end of volume.
+>0	leshort	6		map of inodes deleted.
+>0	leshort	7		end of medium (for floppy).
+
+24	belong	0x19540119	new-fs dump file (ufs2, big endian),
+>896	beqdate	x		Previous dump %s,
+>904	beqdate	x		This dump %s,
+>12	belong	>0		Volume %ld,
+>692	belong	0		Level zero, type:
+>692	belong	>0		Level %d, type:
+>0	belong	1		tape header,
+>0	belong	2		beginning of file record,
+>0	belong	3		map of inodes on tape,
+>0	belong	4		continuation of file record,
+>0	belong	5		end of volume,
+>0	belong	6		map of inodes deleted,
+>0	belong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	belong	>0		Flags %x
+
+24	lelong	0x19540119	new-fs dump file (ufs2, little endian),
+>896	leqdate	x		This dump %s,
+>904	leqdate	x		Previous dump %s,
+>12	lelong	>0		Volume %ld,
+>692	lelong	0		Level zero, type:
+>692	lelong	>0		Level %d, type:
+>0	lelong	1		tape header,
+>0	lelong	2		beginning of file record,
+>0	lelong	3		map of inodes on tape,
+>0	lelong	4		continuation of file record,
+>0	lelong	5		end of volume,
+>0	lelong	6		map of inodes deleted,
+>0	lelong	7		end of medium (for floppy),
+>676	string	>\0		Label %s,
+>696	string	>\0		Filesystem %s,
+>760	string	>\0		Device %s,
+>824	string	>\0		Host %s,
+>888	lelong	>0		Flags %x
+
+#------------------------------------------------------------------------------
+# $File: dyadic,v 1.4 2009/09/19 16:28:09 christos Exp $
+# Dyadic: file(1) magic for Dyalog APL.
+#
+0 	byte	0xaa
+>1	byte	<4		Dyalog APL
+>>1	byte	0x00		incomplete workspace
+>>1	byte	0x01		component file
+>>1	byte	0x02		external variable
+>>1	byte	0x03		workspace
+>>2	byte	x		version %d
+>>3	byte	x		.%d
+
+#------------------------------------------------------------------------------
+# $File: editors,v 1.8 2009/09/19 16:28:09 christos Exp $
+# T602 editor documents 
+# by David Necas <yeti at physics.muni.cz>
+0	string	@CT\ 	T602 document data,
+>4	string	0	Kamenicky
+>4	string	1	CP 852
+>4	string	2	KOI8-CS
+>4	string	>2	unknown encoding
+
+# Vi IMproved Encrypted file 
+# by David Necas <yeti at physics.muni.cz>
+0	string	VimCrypt~	Vim encrypted file data
+# Vi IMproved Swap file
+# by Sven Wegener <swegener at gentoo.org>
+0	string	b0VIM\ 		Vim swap file
+>&0	string	>\0		\b, version %s
+
+#------------------------------------------------------------------------------
+# $File: efi,v 1.4 2009/09/19 16:28:09 christos Exp $
+# efi:  file(1) magic for Universal EFI binaries
+
+0	lelong	0x0ef1fab9
+>4	lelong	1		Universal EFI binary with 1 architecture
+>>&0	lelong	7		\b, i386
+>>&0	lelong	0x01000007	\b, x86_64
+>4	lelong	2		Universal EFI binary with 2 architectures
+>>&0	lelong	7		\b, i386
+>>&0	lelong	0x01000007	\b, x86_64
+>>&20	lelong	7		\b, i386
+>>&20	lelong	0x01000007	\b, x86_64
+>4	lelong	>2		Universal EFI binary with %ld architectures
+
+#------------------------------------------------------------------------------
+# $File: elf,v 1.53 2009/09/19 16:28:09 christos Exp $
+# elf:  file(1) magic for ELF executables
+#
+# We have to check the byte order flag to see what byte order all the
+# other stuff in the header is in.
+#
+# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
+#
+# Created by: unknown
+# Modified by (1): Daniel Quinlan <quinlan at yggdrasil.com>
+# Modified by (2): Peter Tobias <tobias at server.et-inf.fho-emden.de> (core support)
+# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk at ds9.au.s.shuttle.de> (fix of core support)
+# Modified by (4): <gerardo.cacciari at gmail.com> (VMS Itanium)
+# Modified by (5): Matthias Urlichs <smurf at debian.org> (Listing of many architectures)
+0	string		\177ELF		ELF
+>4	byte		0		invalid class
+>4	byte		1		32-bit
+>4	byte		2		64-bit
+>5	byte		0		invalid byte order
+>5	byte		1		LSB
+>>16	leshort		0		no file type,
+!:strength *2
+!:mime	application/octet-stream
+>>16	leshort		1		relocatable,
+!:mime	application/x-object
+>>16	leshort		2		executable,
+!:mime	application/x-executable
+>>16	leshort		3		shared object,
+!:mime	application/x-sharedlib
+>>16	leshort		4		core file
+!:mime	application/x-coredump
+# Core file detection is not reliable.
+#>>>(0x38+0xcc) string	>\0		of '%s'
+#>>>(0x38+0x10) lelong	>0		(signal %d),
+>>16	leshort		&0xff00		processor-specific,
+>>18	leshort		0		no machine,
+>>18	leshort		1		AT&T WE32100 - invalid byte order,
+>>18	leshort		2		SPARC - invalid byte order,
+>>18	leshort		3		Intel 80386,
+>>18	leshort		4		Motorola
+>>>36	lelong		&0x01000000	68000 - invalid byte order,
+>>>36	lelong		&0x00810000	CPU32 - invalid byte order,
+>>>36	lelong		0		68020 - invalid byte order,
+>>18	leshort		5		Motorola 88000 - invalid byte order,
+>>18	leshort		6		Intel 80486,
+>>18	leshort		7		Intel 80860,
+# The official e_machine number for MIPS is now #8, regardless of endianness.
+# The second number (#10) will be deprecated later. For now, we still
+# say something if #10 is encountered, but only gory details for #8.
+>>18	leshort		8		MIPS,
+>>>36	lelong		&0x20		N32
+>>18	leshort		10		MIPS,
+>>>36	lelong		&0x20		N32
+>>18	leshort		8
+# only for 32-bit
+>>>4	byte		1
+>>>>36  lelong&0xf0000000	0x00000000	MIPS-I
+>>>>36  lelong&0xf0000000	0x10000000	MIPS-II
+>>>>36  lelong&0xf0000000	0x20000000	MIPS-III
+>>>>36  lelong&0xf0000000	0x30000000	MIPS-IV
+>>>>36  lelong&0xf0000000	0x40000000	MIPS-V
+>>>>36  lelong&0xf0000000	0x50000000	MIPS32
+>>>>36  lelong&0xf0000000	0x60000000	MIPS64
+>>>>36  lelong&0xf0000000	0x70000000	MIPS32 rel2
+>>>>36  lelong&0xf0000000	0x80000000	MIPS64 rel2
+# only for 64-bit
+>>>4	byte		2
+>>>>48  lelong&0xf0000000	0x00000000	MIPS-I
+>>>>48  lelong&0xf0000000	0x10000000	MIPS-II
+>>>>48  lelong&0xf0000000	0x20000000	MIPS-III
+>>>>48  lelong&0xf0000000	0x30000000	MIPS-IV
+>>>>48  lelong&0xf0000000	0x40000000	MIPS-V
+>>>>48  lelong&0xf0000000	0x50000000	MIPS32
+>>>>48  lelong&0xf0000000	0x60000000	MIPS64
+>>>>48  lelong&0xf0000000	0x70000000	MIPS32 rel2
+>>>>48  lelong&0xf0000000	0x80000000	MIPS64 rel2
+>>18	leshort		9		Amdahl - invalid byte order,
+>>18	leshort		10		MIPS (deprecated),
+>>18	leshort		11		RS6000 - invalid byte order,
+>>18	leshort		15		PA-RISC - invalid byte order,
+>>>50	leshort		0x0214		2.0
+>>>48	leshort		&0x0008		(LP64),
+>>18	leshort		16		nCUBE,
+>>18	leshort		17		Fujitsu VPP500,
+>>18	leshort		18		SPARC32PLUS - invalid byte order,
+>>18	leshort		20		PowerPC,
+>>18	leshort		22		IBM S/390,
+>>18	leshort		36		NEC V800,
+>>18	leshort		37		Fujitsu FR20,
+>>18	leshort		38		TRW RH-32,
+>>18	leshort		39		Motorola RCE,
+>>18	leshort		40		ARM,
+>>18	leshort		41		Alpha,
+>>18	leshort		0xa390		IBM S/390 (obsolete),
+>>18	leshort		42		Renesas SH,
+>>18	leshort		43		SPARC V9 - invalid byte order,
+>>18	leshort		44		Siemens Tricore Embedded Processor,
+>>18	leshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
+>>18	leshort		46		Renesas H8/300,
+>>18	leshort		47		Renesas H8/300H,
+>>18	leshort		48		Renesas H8S,
+>>18	leshort		49		Renesas H8/500,
+>>18	leshort		50		IA-64,
+>>18	leshort		51		Stanford MIPS-X,
+>>18	leshort		52		Motorola Coldfire,
+>>18	leshort		53		Motorola M68HC12,
+>>18	leshort		54		Fujitsu MMA,
+>>18	leshort		55		Siemens PCP,
+>>18	leshort		56		Sony nCPU,
+>>18	leshort		57		Denso NDR1,
+>>18	leshort		58		Start*Core,
+>>18	leshort		59		Toyota ME16,
+>>18	leshort		60		ST100,
+>>18	leshort		61		Tinyj emb.,
+>>18	leshort		62		x86-64,
+>>18	leshort		63		Sony DSP,
+>>18	leshort		66		FX66,
+>>18	leshort		67		ST9+ 8/16 bit,
+>>18	leshort		68		ST7 8 bit,
+>>18	leshort		69		MC68HC16,
+>>18	leshort		70		MC68HC11,
+>>18	leshort		71		MC68HC08,
+>>18	leshort		72		MC68HC05,
+>>18	leshort		73		SGI SVx,
+>>18	leshort		74		ST19 8 bit,
+>>18	leshort		75		Digital VAX,
+>>18	leshort		76		Axis cris,
+>>18	leshort		77		Infineon 32-bit embedded,
+>>18	leshort		78		Element 14 64-bit DSP,
+>>18	leshort		79		LSI Logic 16-bit DSP,
+>>18	leshort		80		MMIX,
+>>18	leshort		81		Harvard machine-independent,
+>>18	leshort		82		SiTera Prism,
+>>18	leshort		83		Atmel AVR 8-bit,
+>>18	leshort		84		Fujitsu FR30,
+>>18	leshort		85		Mitsubishi D10V,
+>>18	leshort		86		Mitsubishi D30V,
+>>18	leshort		87		NEC v850,
+>>18	leshort		88		Renesas M32R,
+>>18	leshort		89		Matsushita MN10300,
+>>18	leshort		90		Matsushita MN10200,
+>>18	leshort		91		picoJava,
+>>18	leshort		92		OpenRISC,
+>>18	leshort		93		ARC Cores Tangent-A5,
+>>18	leshort		94		Tensilica Xtensa,
+>>18	leshort		97		NatSemi 32k,
+>>18	leshort		106		Analog Devices Blackfin,
+>>18	leshort		113		Altera Nios II,
+>>18	leshort		0xae		META,
+>>18	leshort		0x3426		OpenRISC (obsolete),
+>>18	leshort		0x8472		OpenRISC (obsolete),
+>>18	leshort		0x9026		Alpha (unofficial),
+>>20	lelong		0		invalid version
+>>20	lelong		1		version 1
+>>36	lelong		1		MathCoPro/FPU/MAU Required
+>5	byte		2		MSB
+>>16	beshort		0		no file type,
+!:mime	application/octet-stream
+>>16	beshort		1		relocatable,
+!:mime	application/x-object
+>>16	beshort		2		executable,
+!:mime	application/x-executable
+>>16	beshort		3		shared object,
+!:mime	application/x-sharedlib
+>>16	beshort		4		core file,
+!:mime	application/x-coredump
+#>>>(0x38+0xcc) string	>\0		of '%s'
+#>>>(0x38+0x10) belong	>0		(signal %d),
+>>16	beshort		&0xff00		processor-specific,
+>>18	beshort		0		no machine,
+>>18	beshort		1		AT&T WE32100,
+>>18	beshort		2		SPARC,
+>>18	beshort		3		Intel 80386 - invalid byte order,
+>>18	beshort		4		Motorola
+>>>36	belong		&0x01000000	68000,
+>>>36	belong		&0x00810000	CPU32,
+>>>36	belong		0		68020,
+>>18	beshort		5		Motorola 88000,
+>>18	beshort		6		Intel 80486 - invalid byte order,
+>>18	beshort		7		Intel 80860,
+# only for MIPS - see comment in little-endian section above.
+>>18	beshort		8		MIPS,
+>>>36	belong		&0x20		N32
+>>18	beshort		10		MIPS,
+>>>36	belong		&0x20		N32
+>>18	beshort		8
+# only for 32-bit
+>>>4	byte		1
+>>>>36  belong&0xf0000000	0x00000000	MIPS-I
+>>>>36  belong&0xf0000000	0x10000000	MIPS-II
+>>>>36  belong&0xf0000000	0x20000000	MIPS-III
+>>>>36  belong&0xf0000000	0x30000000	MIPS-IV
+>>>>36  belong&0xf0000000	0x40000000	MIPS-V
+>>>>36  belong&0xf0000000	0x50000000	MIPS32
+>>>>36  belong&0xf0000000	0x60000000	MIPS64
+>>>>36  belong&0xf0000000	0x70000000	MIPS32 rel2
+>>>>36  belong&0xf0000000	0x80000000	MIPS64 rel2
+# only for 64-bit
+>>>4	byte		2
+>>>>48	belong&0xf0000000	0x00000000	MIPS-I
+>>>>48	belong&0xf0000000	0x10000000	MIPS-II
+>>>>48	belong&0xf0000000	0x20000000	MIPS-III
+>>>>48	belong&0xf0000000	0x30000000	MIPS-IV
+>>>>48	belong&0xf0000000	0x40000000	MIPS-V
+>>>>48	belong&0xf0000000	0x50000000	MIPS32
+>>>>48	belong&0xf0000000	0x60000000	MIPS64
+>>>>48	belong&0xf0000000	0x70000000	MIPS32 rel2
+>>>>48	belong&0xf0000000	0x80000000	MIPS64 rel2
+>>18	beshort		9		Amdahl,
+>>18	beshort		10		MIPS (deprecated),
+>>18	beshort		11		RS6000,
+>>18	beshort		15		PA-RISC
+>>>50	beshort		0x0214		2.0
+>>>48	beshort		&0x0008		(LP64)
+>>18	beshort		16		nCUBE,
+>>18	beshort		17		Fujitsu VPP500,
+>>18	beshort		18		SPARC32PLUS,
+>>>36	belong&0xffff00	0x000100	V8+ Required,
+>>>36	belong&0xffff00	0x000200	Sun UltraSPARC1 Extensions Required,
+>>>36	belong&0xffff00	0x000400	HaL R1 Extensions Required,
+>>>36	belong&0xffff00	0x000800	Sun UltraSPARC3 Extensions Required,
+>>18	beshort		20		PowerPC or cisco 4500,
+>>18	beshort		21		64-bit PowerPC or cisco 7500,
+>>18	beshort		22		IBM S/390,
+>>18	beshort		23		Cell SPU,
+>>18	beshort		24		cisco SVIP,
+>>18	beshort		25		cisco 7200,
+>>18	beshort		36		NEC V800 or cisco 12000,
+>>18	beshort		37		Fujitsu FR20,
+>>18	beshort		38		TRW RH-32,
+>>18	beshort		39		Motorola RCE,
+>>18	beshort		40		ARM,
+>>18	beshort		41		Alpha,
+>>18	beshort		42		Renesas SH,
+>>18	beshort		43		SPARC V9,
+>>>48	belong&0xffff00	0x000200	Sun UltraSPARC1 Extensions Required,
+>>>48	belong&0xffff00	0x000400	HaL R1 Extensions Required,
+>>>48	belong&0xffff00	0x000800	Sun UltraSPARC3 Extensions Required,
+>>>48	belong&0x3	0		total store ordering,
+>>>48	belong&0x3	1		partial store ordering,
+>>>48	belong&0x3	2		relaxed memory ordering,
+>>18	beshort		44		Siemens Tricore Embedded Processor,
+>>18	beshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
+>>18	beshort		46		Renesas H8/300,
+>>18	beshort		47		Renesas H8/300H,
+>>18	beshort		48		Renesas H8S,
+>>18	beshort		49		Renesas H8/500,
+>>18	beshort		50		IA-64,
+>>18	beshort		51		Stanford MIPS-X,
+>>18	beshort		52		Motorola Coldfire,
+>>18	beshort		53		Motorola M68HC12,
+>>18	beshort		73		Cray NV1,
+>>18	beshort		75		Digital VAX,
+>>18	beshort		88		Renesas M32R,
+>>18	leshort		92		OpenRISC,
+>>18	leshort		0x3426		OpenRISC (obsolete),
+>>18	leshort		0x8472		OpenRISC (obsolete),
+>>18	beshort		94		Tensilica Xtensa,
+>>18	beshort		97		NatSemi 32k,
+>>18	beshort		0x18ad		AVR32 (unofficial),
+>>18	beshort		0x9026		Alpha (unofficial),
+>>18	beshort		0xa390		IBM S/390 (obsolete),
+>>20	belong		0		invalid version
+>>20	belong		1		version 1
+>>36	belong		1		MathCoPro/FPU/MAU Required
+# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
+# like proper ELF, but extracting the string had bad results.
+>4      byte            <0x80
+>>8	string		>\0		(%s)
+>8	string		\0
+>>7	byte		0		(SYSV)
+>>7	byte		1		(HP-UX)
+>>7	byte		2		(NetBSD)
+>>7	byte		3		(GNU/Linux)
+>>7	byte		4		(GNU/Hurd)
+>>7	byte		5		(86Open)
+>>7	byte		6		(Solaris)
+>>7	byte		7		(Monterey)
+>>7	byte		8		(IRIX)
+>>7	byte		9		(FreeBSD)
+>>7	byte		10		(Tru64)
+>>7	byte		11		(Novell Modesto)
+>>7	byte		12		(OpenBSD)
+>8      string          \2
+>>7     byte            13              (OpenVMS)
+>>7	byte		97		(ARM)
+>>7	byte		255		(embedded)
+
+#------------------------------------------------------------------------------
+# $File: encore,v 1.6 2009/09/19 16:28:09 christos Exp $
+# encore:  file(1) magic for Encore machines
+#
+# XXX - needs to have the byte order specified (NS32K was little-endian,
+# dunno whether they run the 88K in little-endian mode or not).
+#
+0	short		0x154		Encore
+>20	short		0x107		executable
+>20	short		0x108		pure executable
+>20	short		0x10b		demand-paged executable
+>20	short		0x10f		unsupported executable
+>12	long		>0		not stripped
+>22	short		>0		- version %ld
+>22	short		0		-
+#>4	date		x		stamp %s
+0	short		0x155		Encore unsupported executable
+>12	long		>0		not stripped
+>22	short		>0		- version %ld
+>22	short		0		-
+#>4	date		x		stamp %s
+
+#------------------------------------------------------------------------------
+# $File: epoc,v 1.7 2009/09/19 16:28:09 christos Exp $
+# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]
+# Stefan Praszalowicz <hpicollo at worldnet.fr> and Peter Breitenlohner <peb at mppmu.mpg.de>
+# Useful information for improving this file can be found at:
+# http://software.frodo.looijaard.name/psiconv/formats/Index.html
+#------------------------------------------------------------------------------
+0	lelong		0x10000037	Psion Series 5
+>4	lelong		0x10000039	font file
+>4	lelong		0x1000003A	printer driver
+>4	lelong		0x1000003B	clipboard
+>4	lelong		0x10000042	multi-bitmap image
+!:mime image/x-epoc-mbm
+>4	lelong		0x1000006A	application information file
+>4	lelong		0x1000006D
+>>8	lelong		0x1000007D	Sketch image
+!:mime image/x-epoc-sketch
+>>8	lelong		0x1000007E	voice note
+>>8	lelong		0x1000007F	Word file
+!:mime application/x-epoc-word
+>>8	lelong		0x10000085	OPL program (TextEd)
+!:mime application/x-epoc-opl
+>>8	lelong		0x10000088	Sheet file
+!:mime application/x-epoc-sheet
+>>8	lelong		0x100001C4	EasyFax initialisation file
+>4	lelong		0x10000073	OPO module
+!:mime application/x-epoc-opo
+>4	lelong		0x10000074	OPL application
+!:mime application/x-epoc-app
+>4	lelong		0x1000008A	exported multi-bitmap image
+
+0	lelong		0x10000041	Psion Series 5 ROM multi-bitmap image
+
+0	lelong		0x10000050	Psion Series 5
+>4	lelong		0x1000006D	database
+>4	lelong		0x100000E4	ini file
+
+0	lelong		0x10000079	Psion Series 5 binary:
+>4	lelong		0x00000000	DLL
+>4	lelong		0x10000049	comms hardware library
+>4	lelong		0x1000004A	comms protocol library
+>4	lelong		0x1000005D	OPX
+>4	lelong		0x1000006C	application
+>4	lelong		0x1000008D	DLL
+>4	lelong		0x100000AC	logical device driver
+>4	lelong		0x100000AD	physical device driver
+>4	lelong		0x100000E5	file transfer protocol
+>4	lelong		0x100000E5	file transfer protocol
+>4	lelong		0x10000140	printer definition
+>4	lelong		0x10000141	printer definition
+
+0	lelong		0x1000007A	Psion Series 5 executable
+
+#------------------------------------------------------------------------------
+# $File: erlang,v 1.5 2009/09/19 16:28:09 christos Exp $
+# erlang:  file(1) magic for Erlang JAM and BEAM files
+# URL:  http://www.erlang.org/faq/x779.html#AEN812
+
+# OTP R3-R4
+0	string	\0177BEAM!	Old Erlang BEAM file
+>6	short	>0		- version %d
+
+# OTP R5 and onwards
+0	string	FOR1
+>8	string	BEAM		Erlang BEAM file
+
+# 4.2 version may have a copyright notice!
+4	string	Tue\ Jan\ 22\ 14:32:44\ MET\ 1991	Erlang JAM file - version 4.2
+79	string	Tue\ Jan\ 22\ 14:32:44\ MET\ 1991	Erlang JAM file - version 4.2
+
+4	string	1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995	Erlang JAM file - version 4.3
+
+#------------------------------------------------------------------------------
+# $File: esri,v 1.4 2009/09/19 16:28:09 christos Exp $
+# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
+# Based on info from
+# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
+0	belong	9994	ESRI Shapefile
+>4	belong	=0
+>8	belong	=0
+>12	belong	=0
+>16	belong	=0
+>20	belong	=0
+>28	lelong	x	version %d
+>24	belong	x	length %d
+>32	lelong	=0	type Null Shape
+>32	lelong	=1	type Point
+>32	lelong	=3	type PolyLine
+>32	lelong	=5	type Polygon
+>32	lelong	=8	type MultiPoint
+>32	lelong	=11	type PointZ
+>32	lelong	=13	type PolyLineZ
+>32	lelong	=15	type PolygonZ
+>32	lelong	=18	type MultiPointZ
+>32	lelong	=21	type PointM
+>32	lelong	=23	type PolyLineM
+>32	lelong	=25	type PolygonM
+>32	lelong	=28	type MultiPointM
+>32	lelong	=31	type MultiPatch
+
+#------------------------------------------------------------------------------
+# $File: fcs,v 1.4 2009/09/19 16:28:09 christos Exp $
+# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
+# From Roger Leigh <roger at whinlatter.uklinux.net>
+0       string          FCS1.0          Flow Cytometry Standard (FCS) data, version 1.0
+0       string          FCS2.0          Flow Cytometry Standard (FCS) data, version 2.0
+0       string          FCS3.0          Flow Cytometry Standard (FCS) data, version 3.0
+
+
+#------------------------------------------------------------------------------
+# $File: filesystems,v 1.55 2010/01/16 17:45:12 chl Exp $
+# filesystems:  file(1) magic for different filesystems
+#
+0	string	\366\366\366\366	PC formatted floppy with no filesystem
+# Sun disk labels
+# From /usr/include/sun/dklabel.h:
+0774	beshort		0xdabe		
+# modified by Joerg Jenderek, because original test
+# succeeds for Cabinet archive dao360.dl_ with negative blocks
+>0770	long		>0		Sun disk label
+>>0	string		x		'%s
+>>>31	string		>\0		\b%s
+>>>>63	string		>\0		\b%s
+>>>>>95	string		>\0		\b%s
+>>0	string		x		\b'
+>>0734	short		>0		%d rpm,
+>>0736	short		>0		%d phys cys,
+>>0740	short		>0		%d alts/cyl,
+>>0746	short		>0		%d interleave,
+>>0750	short		>0		%d data cyls,
+>>0752	short		>0		%d alt cyls,
+>>0754	short		>0		%d heads/partition,
+>>0756	short		>0		%d sectors/track,
+>>0764	long		>0		start cyl %ld,
+>>0770	long		x		%ld blocks
+# Is there a boot block written 1 sector in?
+>512    belong&077777777	0600407	\b, boot block present
+# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc
+# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
+0		string	SBMBAKUP_	Smart Boot Manager backup file
+>9		string	x		\b, version %-5.5s
+>>14		string	=_		
+>>>15		string	x		%-.1s
+>>>>16		string	=_		\b.
+>>>>>17		string	x		\b%-.1s
+>>>>>>18	string	=_		\b.
+>>>>>>>19	string	x		\b%-.1s
+>>>22		ubyte	0		
+>>>>21		ubyte	x		\b, from drive 0x%x
+>>>22		ubyte	>0		
+>>>>21		string	x		\b, from drive %s
+
+# Joerg Jenderek
+# DOS Emulator image is 128 byte, null right padded header + harddisc image
+0	string	DOSEMU\0			
+>0x27E	leshort	0xAA55			
+#offset is 128
+>>19	ubyte	128			
+>>>(19.b-1)	ubyte	0x0	DOS Emulator image
+>>>>7	ulelong	>0		\b, %u heads
+>>>>11	ulelong	>0		\b, %d sectors/track
+>>>>15	ulelong	>0		\b, %d cylinders
+
+# updated by Joerg Jenderek at Sep 2007
+# only for sector sizes with 512 or more Bytes
+0x1FE	leshort	0xAA55			x86 boot sector
+# to do also for sectors < than 512 Bytes and some other files, GRR
+#30	search/481	\x55\xAA	x86 boot sector
+# not for BeOS floppy 1440k, MBRs
+#(11.s-2) uleshort	0xAA55		x86 boot sector
+>2	string	OSBS			\b, OS/BS MBR
+# J\xf6rg Jenderek <joerg dot jenderek at web dot de>
+>0x8C	string	Invalid\ partition\ table	\b, MS-DOS MBR
+# dr-dos with some upper-, lowercase variants
+>0x9D	string	Invalid\ partition\ table$	
+>>181	string	No\ Operating\ System$		
+>>>201	string	Operating\ System\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
+>0x9D	string	Invalid\ partition\ table$	
+>>181	string	No\ operating\ system$		
+>>>201	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
+>342	string	Invalid\ partition\ table$	
+>>366	string	No\ operating\ system$		
+>>>386	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, version 7.01 to 7.03
+>295	string	NEWLDR\0				
+>>302	string	Bad\ PT\ $				
+>>>310	string	No\ OS\ $				
+>>>>317	string	OS\ load\ err$				
+>>>>>329	string	Moved\ or\ missing\ IBMBIO.LDR\n\r	
+>>>>>>358	string	Press\ any\ key\ to\ continue.\n\r$	
+>>>>>>>387	string	Copyright\ (c)\ 1984,1998	
+>>>>>>>>411	string	Caldera\ Inc.\0		\b, DR-DOS MBR (IBMBIO.LDR)
+>0x10F	string	Ung\201ltige\ Partitionstabelle	\b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
+>>0x1B8	ubelong	>0				\b, Serial 0x%-.4x
+>0x8B	string	Ung\201ltige\ Partitionstabelle	\b, MS-DOS MBR, german version 5.00 to 4.00.950
+>271	string	Invalid\ partition\ table\0		
+>>295	string	Error\ loading\ operating\ system\0	
+>>>326	string	Missing\ operating\ system\0		\b, mbr
+#
+>139	string	Invalid\ partition\ table\0		
+>>163	string	Error\ loading\ operating\ system\0	
+>>>194	string	Missing\ operating\ system\0		\b, Microsoft Windows XP mbr
+# http://www.heise.de/ct/05/09/006/ page 184
+#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes
+>>>>0x1B8	ulelong	>0				\b,Serial 0x%-.4x
+>300	string	Invalid\ partition\ table\0	
+>>324	string	Error\ loading\ operating\ system\0
+>>>355	string	Missing\ operating\ system\0		\b, Microsoft Windows XP MBR
+#??>>>389	string	Invalid\ system\ disk		
+>>>>0x1B8	ulelong	>0				\b, Serial 0x%-.4x
+>300	string	Ung\201ltige\ Partitionstabelle
+#split string to avoid error: String too long
+>>328	string	Fehler\ beim\ Laden\ 	
+>>>346	string	des\ Betriebssystems	
+>>>>366	string	Betriebssystem\ nicht\ vorhanden	\b, Microsoft Windows XP MBR (german)
+>>>>>0x1B8	ulelong	>0				\b, Serial 0x%-.4x
+#>0x145	string	Default:\ F				\b, FREE-DOS MBR
+#>0x14B	string	Default:\ F				\b, FREE-DOS 1.0 MBR
+>0x145	search/7	Default:\ F			\b, FREE-DOS MBR
+#>>313		string	F0\ .\ .\ .			
+#>>>322		string	disk\ 1				
+#>>>>382	string	FAT3				
+>64	string	no\ active\ partition\ found	
+>>96	string	read\ error\ while\ reading\ drive	\b, FREE-DOS Beta 0.9 MBR
+# Ranish Partition Manager http://www.ranish.com/part/
+>387	search/4	\0\ Error!\r			
+>>378	search/7	Virus! 				
+>>>397	search/4	Booting\ 			
+>>>>408	search/4	HD1/\0	 			\b, Ranish MBR (
+>>>>>416	string	Writing\ changes...		\b2.37
+>>>>>>438	ubyte		x			\b,0x%x dots
+>>>>>>440	ubyte		>0			\b,virus check
+>>>>>>441	ubyte		>0			\b,partition %c
+#2.38,2.42,2.44
+>>>>>416	string	!Writing\ changes...		\b
+>>>>>>418	ubyte	1				\bvirus check,
+>>>>>>419	ubyte	x				\b0x%x seconds
+>>>>>>420	ubyte&0x0F	>0			\b,partition
+>>>>>>>420	ubyte&0x0F	<5			\b %x
+>>>>>>>420	ubyte&0x0F	0Xf			\b ask
+>>>>>420	ubyte		x			\b)
+#
+>271	string	Operating\ system\ loading 		
+>>296	string	error\r					\b, SYSLINUX MBR (2.10)
+# http://www.acronis.de/
+>362	string	MBR\ Error\ \0\r			
+>>376	string	ress\ any\ key\ to\ 			
+>>>392	string	boot\ from\ floppy...\0			\b, Acronis MBR
+# added by Joerg Jenderek
+# http://www.visopsys.org/
+# http://partitionlogic.org.uk/
+>309	string	No\ bootable\ partition\ found\r	
+>>339	string	I/O\ Error\ reading\ boot\ sector\r	\b, Visopsys MBR
+>349	string	No\ bootable\ partition\ found\r	
+>>379	string	I/O\ Error\ reading\ boot\ sector\r	\b, simple Visopsys MBR
+# bootloader, bootmanager
+>0x40	string	SBML				
+# label with 11 characters of FAT 12 bit filesystem
+>>43	string	SMART\ BTMGR			
+>>>430	string	SBMK\ Bad!\r			\b, Smart Boot Manager
+# OEM-ID not always "SBM"
+#>>>>3	strings	SBM				
+>>>>6	string	>\0                             \b, version %s
+>382	string	XOSLLOADXCF			\b, eXtended Operating System Loader
+>6	string	LILO				\b, LInux i386 boot LOader
+>>120	string	LILO				\b, version 22.3.4 SuSe
+>>172	string	LILO				\b, version 22.5.8 Debian
+# updated by Joerg Jenderek at Oct 2008
+# variables according to grub-0.97/stage1/stage1.S or
+# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
+# usual values are marked with comments to get only informations of strange GRUB loaders
+>342		search/60	\0Geom\0	
+#>0		ulelong		x		%x=0x009048EB ,	0x2a9048EB  0
+>>0x41		ubyte		<2		
+>>>0x3E		ubyte		>2		\b; GRand Unified Bootloader
+# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 
+>>>>0x3E	ubyte		x		\b, stage1 version 0x%x
+#If it is 0xFF, use a drive passed by BIOS
+>>>>0x40	ubyte		<0xFF		\b, boot drive 0x%x
+# in most case 0,1,0x2e for GRUB 0.5.95
+>>>>0x41	ubyte		>0		\b, LBA flag 0x%x
+>>>>0x42	uleshort	<0x8000		\b, stage2 address 0x%x
+#>>>>0x42	uleshort	=0x8000		\b, stage2 address 0x%x (usual)
+>>>>0x42	uleshort	>0x8000		\b, stage2 address 0x%x
+#>>>>0x44	ulelong		=1		\b, 1st sector stage2 0x%x (default)
+>>>>0x44	ulelong		>1		\b, 1st sector stage2 0x%x
+>>>>0x48	uleshort	<0x800		\b, stage2 segment 0x%x
+#>>>>0x48	uleshort	=0x800		\b, stage2 segment 0x%x (usual)
+>>>>0x48	uleshort	>0x800		\b, stage2 segment 0x%x
+>>>>402		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>394	string	stage1			\b, GRUB version 0.5.95
+>>>>382		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>376	string	GRUB\ \0		\b, GRUB version 0.93 or 1.94
+>>>>383		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>377	string	GRUB\ \0		\b, GRUB version 0.94
+>>>>385		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>379	string	GRUB\ \0		\b, GRUB version 0.95 or 0.96
+>>>>391		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>385	string	GRUB\ \0		\b, GRUB version 0.97
+#unkown version
+>>>343		string	Geom\0Read\0\ Error\0	
+>>>>321		string	Loading\ stage1.5	\b, GRUB version x.y
+>>>380		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>374		string	GRUB\ \0		\b, GRUB version n.m
+# http://syslinux.zytor.com/
+>478	string	Boot\ failed\r			
+>>495	string	LDLINUX\ SYS			\b, SYSLINUX bootloader (1.62)
+>480	string	Boot\ failed\r			
+>>495	string	LDLINUX\ SYS			\b, SYSLINUX bootloader (2.06 or 2.11)
+>484	string	Boot\ error\r			\b, SYSLINUX bootloader (3.11)
+>395	string	chksum\0\ ERROR!\0		\b, Gujin bootloader
+# http://www.bcdwb.de/bcdw/index_e.htm
+>3	string	BCDL				
+>>498	string	BCDL\ \ \ \ BIN			\b, Bootable CD Loader (1.50Z)
+# mbr partition table entries
+# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs
+>3			string		!MS
+>>3			string		!SYSLINUX
+>>>3			string		!MTOOL
+>>>>3			string		!NEWLDR
+>>>>>5			string		!DOS
+# not FAT (32 bit)
+>>>>>>82		string		!FAT32
+#not Linux kernel
+>>>>>>>514		string		!HdrS
+#not BeOS
+>>>>>>>>422		string		!Be\ Boot\ Loader
+# active flag 0 or 0x80 and type > 0
+>>>>>>>>>446		ubyte		<0x81	
+>>>>>>>>>>446		ubyte&0x7F	0	
+>>>>>>>>>>>450		ubyte		>0	\b; partition 1: ID=0x%x
+>>>>>>>>>>>>446		ubyte		0x80	\b, active
+>>>>>>>>>>>>447		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>448		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>448		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>454		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>458		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>462		ubyte		<0x81	
+>>>>>>>>>>462		ubyte&0x7F	0		
+>>>>>>>>>>>466		ubyte		>0	\b; partition 2: ID=0x%x
+>>>>>>>>>>>>462		ubyte		0x80	\b, active
+>>>>>>>>>>>>463		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>464		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>464		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>470		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>474		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>478		ubyte		<0x81		
+>>>>>>>>>>478		ubyte&0x7F	0		
+>>>>>>>>>>>482		ubyte		>0	\b; partition 3: ID=0x%x
+>>>>>>>>>>>>478		ubyte		0x80	\b, active
+>>>>>>>>>>>>479		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>480		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>481		ubyte		x	\b, start C2S: 0x%x
+#>>>>>>>>>>>>480		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>486		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>490		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>494		ubyte		<0x81	
+>>>>>>>>>>494		ubyte&0x7F	0		
+>>>>>>>>>>>498		ubyte		>0	\b; partition 4: ID=0x%x
+>>>>>>>>>>>>494		ubyte		0x80	\b, active
+>>>>>>>>>>>>495		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>496		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>496		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>502		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>506		ulelong		x	\b, %u sectors
+# mbr partition table entries end
+# http://www.acronis.de/
+#FAT label=ACRONIS\ SZ
+#OEM-ID=BOOTWIZ0
+>442	string	Non-system\ disk,\ 	
+>>459	string	press\ any\ key...\x7\0		\b, Acronis Startup Recovery Loader
+# DOS names like F11.SYS are 8 right space padded bytes+3 bytes
+>>>477		ubyte&0xDF	>0		
+>>>>477		string		x 		\b %-.3s
+>>>>>480	ubyte&0xDF	>0		
+>>>>>>480	string		x 		\b%-.5s
+>>>>485		ubyte&0xDF	>0		
+>>>>>485	string		x 		\b.%-.3s
+#
+>185	string	FDBOOT\ Version\ 			
+>>204	string	\rNo\ Systemdisk.\ 			
+>>>220	string	Booting\ from\ harddisk.\n\r		
+>>>245	string	Cannot\ load\ from\ harddisk.\n\r	
+>>>>273 string	Insert\ Systemdisk\ 			
+>>>>>291 string and\ press\ any\ key.\n\r		\b, FDBOOT harddisk Bootloader
+>>>>>>200 string	>\0                             \b, version %-3s
+>242	string	Bootsector\ from\ C.H.\ Hochst\204	
+>>278	string	No\ Systemdisk.\ 			
+>>>293	string	Booting\ from\ harddisk.\n\r		
+>>>441	string	Cannot\ load\ from\ harddisk.\n\r	
+>>>>469 string	Insert\ Systemdisk\ 			
+>>>>>487 string and\ press\ any\ key.\n\r		\b, WinImage harddisk Bootloader
+>>>>>>209 string	>\0                             \b, version %-4.4s
+>(1.b+2)	ubyte		0xe			
+>>(1.b+3)	ubyte		0x1f			
+>>>(1.b+4)	ubyte		0xbe			
+>>>>(1.b+5)	ubyte		0x77			
+>>>>(1.b+6)	ubyte		0x7c			
+>>>>>(1.b+7)	ubyte		0xac			
+>>>>>>(1.b+8)	ubyte		0x22			
+>>>>>>>(1.b+9)	ubyte		0xc0			
+>>>>>>>>(1.b+10)	ubyte	0x74			
+>>>>>>>>>(1.b+11)	ubyte	0xb			
+>>>>>>>>>>(1.b+12)	ubyte	0x56			
+>>>>>>>>>>(1.b+13)	ubyte	0xb4			\b, mkdosfs boot message display
+>214	string	Please\ try\ to\ install\ FreeDOS\ 	\b, DOS Emulator boot message display
+#>>244	string	from\ dosemu-freedos-*-bin.tgz\r	
+#>>>170	string	Sorry,\ could\ not\ load\ an\ 		
+#>>>>195	string	operating\ system.\r\n		
+#
+>103	string	This\ is\ not\ a\ bootable\ disk.\ 	
+>>132	string	Please\ insert\ a\ bootable\ 		
+>>>157	string	floppy\ and\r\n				
+>>>>169	string	press\ any\ key\ to\ try\ again...\r	\b, FREE-DOS message display
+#
+>66	string	Solaris\ Boot\ Sector    		
+>>99	string	Incomplete\ MDBoot\ load.		
+>>>89	string	Version 				\b, Sun Solaris Bootloader
+>>>>97	byte	x					version %c
+#
+>408	string	OS/2\ !!\ SYS01475\r\0			
+>>429	string	OS/2\ !!\ SYS02025\r\0			
+>>>450	string	OS/2\ !!\ SYS02027\r\0			
+>>>469	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp bootloader
+#
+>409	string	OS/2\ !!\ SYS01475\r\0			
+>>430	string	OS/2\ !!\ SYS02025\r\0			
+>>>451	string	OS/2\ !!\ SYS02027\r\0			
+>>>470	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp Bootloader
+>112		string	This\ disk\ is\ not\ bootable\r			
+>>142		string	If\ you\ wish\ to\ make\ it\ bootable		
+>>>176		string	run\ the\ DOS\ program\ SYS\  			
+>>>200		string	after\ the\r					
+>>>>216		string	system\ has\ been\ loaded\r\n			
+>>>>>242	string	Please\ insert\ a\ DOS\ diskette\ 		
+>>>>>271	string	into\r\n\ the\ drive\ and\ 			
+>>>>>>292	string	strike\ any\ key...\0		\b, IBM OS/2 Warp message display
+# XP
+>430	string	NTLDR\ is\ missing\xFF\r\n		
+>>449	string	Disk\ error\xFF\r\n			
+>>>462	string	Press\ any\ key\ to\ restart\r		\b, Microsoft Windows XP Bootloader
+# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+#
+>430	string	NTLDR\ nicht\ gefunden\xFF\r\n		
+>>453	string	Datentr\204gerfehler\xFF\r\n		
+>>>473	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (german)
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+# offset variant
+>>>>379	string	\0					
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+#
+>430	string	NTLDR\ fehlt\xFF\r\n			
+>>444	string	Datentr\204gerfehler\xFF\r\n		
+>>>464	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (2.german)
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+# variant
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+#
+>430	string	NTLDR\ fehlt\xFF\r\n			
+>>444	string	Medienfehler\xFF\r\n			
+>>>459	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (3.german)
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+# variant
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+>430	string	Datentr\204ger\ entfernen\xFF\r\n	
+>>454	string	Medienfehler\xFF\r\n			
+>>>469	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (4.german)
+>>>>379		string		\0			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+# variant
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+
+#>3	string	NTFS\ \ \ \ 				
+>389	string	Fehler\ beim\ Lesen\ 
+>>407	string	des\ Datentr\204gers
+>>>426	string	NTLDR\ fehlt				
+>>>>440	string	NTLDR\ ist\ komprimiert
+>>>>>464 string	Neustart\ mit\ Strg+Alt+Entf\r		\b, Microsoft Windows XP Bootloader NTFS (german)
+#>3	string	NTFS\ \ \ \ 				
+>313	string	A\ disk\ read\ error\ occurred.\r
+>>345	string	A\ kernel\ file\ is\ missing\ 	
+>>>370	string	from\ the\ disk.\r		
+>>>>484	string	NTLDR\ is\ compressed		
+>>>>>429 string	Insert\ a\ system\ diskette\ 	
+>>>>>>454 string and\ restart\r\nthe\ system.\r		\b, Microsoft Windows XP Bootloader NTFS
+# DOS loader variants different languages,offsets
+>472	ubyte&0xDF	>0
+>>389	string	Invalid\ system\ disk\xFF\r\n		
+>>>411	string	Disk\ I/O\ error			
+>>>>428	string	Replace\ the\ disk,\ and\ 		
+>>>>>455 string	press\ any\ key				\b, Microsoft Windows 98 Bootloader
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>>>479 string		x 			\b%-.1s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>390	string	Invalid\ system\ disk\xFF\r\n		
+>>>412	string	Disk\ I/O\ error\xFF\r\n		
+>>>>429	string	Replace\ the\ disk,\ and\ 		
+>>>>>451 string	then\ press\ any\ key\r			\b, Microsoft Windows 98 Bootloader
+>>388	string	Ungueltiges\ System\ \xFF\r\n		
+>>>410	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>427	string	Datentraeger\ wechseln\ und\ 		
+>>>>>453 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (german)
+#WINBOOT.SYS only not spaces (0xDF)
+>>>>>>497	ubyte&0xDF	>0			
+>>>>>>>497	string		x 			%-.5s
+>>>>>>>>502	ubyte&0xDF	>0			
+>>>>>>>>>502	string		x 			\b%-.1s
+>>>>>>>>>>503	ubyte&0xDF	>0			
+>>>>>>>>>>>503	string		x 			\b%-.1s
+>>>>>>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>>>>>>504 string		x 			\b%-.1s
+>>>>>>505	ubyte&0xDF	>0			
+>>>>>>>505	string		x 			\b.%-.3s
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			or
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>>>479 string		x 			\b%-.1s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>390	string	Ungueltiges\ System\ \xFF\r\n		
+>>>412	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>429	string	Datentraeger\ wechseln\ und\ 		
+>>>>>455 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (German)
+#WINBOOT.SYS only not spaces (0xDF)
+>>>>>>497	ubyte&0xDF	>0			
+>>>>>>>497	string		x 			%-.7s
+>>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>>504	string		x 			\b%-.1s
+>>>>>>505	ubyte&0xDF	>0			
+>>>>>>>505	string		x 			\b.%-.3s
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			or
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.6s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>389	string	Ungueltiges\ System\ \xFF\r\n		
+>>>411	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>428	string	Datentraeger\ wechseln\ und\ 		
+>>>>>454 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
+# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
+>>>>>>472	string		x 			%-.2s
+>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>479	string		x 			\b%-.1s
+>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>480	string		x 			\b.%-.3s
+>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>488	string		x 			\b%-.2s
+>>>>>>>>490	ubyte&0xDF	>0			
+>>>>>>>>>490	string		x 			\b%-.1s
+>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>491	string		x 			\b.%-.3s
+>479	ubyte&0xDF	>0
+>>416	string	Kein\ System\ oder\ 			
+>>>433	string	Laufwerksfehler				
+>>>>450	string	Wechseln\ und\ Taste\ dr\201cken	\b, Microsoft DOS Bootloader (german)
+#IO.SYS
+>>>>>479	string		x 			\b %-.2s
+>>>>>>481	ubyte&0xDF	>0			
+>>>>>>>481	string		x 			\b%-.6s
+>>>>>487	ubyte&0xDF	>0			
+>>>>>>487	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>490	ubyte&0xDF	>0			\b+
+>>>>>>>490	string		x 			\b%-.5s
+>>>>>>>>495	ubyte&0xDF	>0			
+>>>>>>>>>495	string		x 			\b%-.3s
+>>>>>>>498	ubyte&0xDF	>0			
+>>>>>>>>498	string		x 			\b.%-.3s
+#
+>376	search/41	Non-System\ disk\ or\ 		
+>>395	search/41	disk\ error\r			
+>>>407	search/41	Replace\ and\ 			
+>>>>419	search/41	press\ 				\b,
+>>>>419	search/41	strike\ 			\b, old
+>>>>426	search/41	any\ key\ when\ ready\r		MS or PC-DOS bootloader
+#449			Disk\ Boot\ failure\r		MS 3.21
+#466			Boot\ Failure\r			MS 3.30
+>>>>>468 search/18	\0				
+#IO.SYS,IBMBIO.COM
+>>>>>>&0	string		x 			\b %-.2s
+>>>>>>>&-20	ubyte&0xDF	>0			
+>>>>>>>>&-1	string		x 			\b%-.4s
+>>>>>>>>>&-16	ubyte&0xDF	>0			
+>>>>>>>>>>&-1	string		x 			\b%-.2s
+>>>>>>&8	ubyte&0xDF	>0			\b.
+>>>>>>>&-1	string		x 			\b%-.3s
+#MSDOS.SYS,IBMDOS.COM
+>>>>>>&11	ubyte&0xDF	>0			\b+
+>>>>>>>&-1	string		x 			\b%-.5s
+>>>>>>>>&-6	ubyte&0xDF	>0			
+>>>>>>>>>&-1	string		x 			\b%-.1s
+>>>>>>>>>>&-5	ubyte&0xDF	>0			
+>>>>>>>>>>>&-1	string		x 			\b%-.2s
+>>>>>>>&7	ubyte&0xDF	>0			\b.
+>>>>>>>>&-1	string		x 			\b%-.3s
+>441	string	Cannot\ load\ from\ harddisk.\n\r
+>>469	string	Insert\ Systemdisk\ 			
+>>>487	string	and\ press\ any\ key.\n\r		\b, MS (2.11) DOS bootloader
+#>43	string	\224R-LOADER\ \ SYS			=label					
+>54	string	SYS
+>>324	string	VASKK
+>>>495	string	NEWLDR\0				\b, DR-DOS Bootloader (LOADER.SYS)
+#
+>98	string	Press\ a\ key\ to\ retry\0\r		
+>>120	string	Cannot\ find\ file\ \0\r		
+>>>139	string	Disk\ read\ error\0\r			
+>>>>156	string	Loading\ ...\0				\b, DR-DOS (3.41) Bootloader
+#DRBIOS.SYS
+>>>>>44		ubyte&0xDF	>0			
+>>>>>>44	string		x			\b %-.6s
+>>>>>>>50	ubyte&0xDF	>0			
+>>>>>>>>50	string		x 			\b%-.2s
+>>>>>>52	ubyte&0xDF	>0			
+>>>>>>>52	string		x 			\b.%-.3s
+#
+>70	string	IBMBIO\ \ COM				
+>>472	string	Cannot\ load\ DOS!\ 			
+>>>489	string	Any\ key\ to\ retry			\b, DR-DOS Bootloader
+>>471	string	Cannot\ load\ DOS\ 			
+>>487	string	press\ key\ to\ retry			\b, Open-DOS Bootloader
+#??
+>444	string	KERNEL\ \ SYS					
+>>314	string	BOOT\ error!				\b, FREE-DOS Bootloader
+>499	string	KERNEL\ \ SYS				
+>>305	string	BOOT\ err!\0				\b, Free-DOS Bootloader
+>449	string	KERNEL\ \ SYS				
+>>319	string	BOOT\ error!				\b, FREE-DOS 0.5 Bootloader
+#
+>449	string	Loading\ FreeDOS			
+>>0x1AF		ulelong		>0			\b, FREE-DOS 0.95,1.0 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+#
+>331	string	Error!.0				\b, FREE-DOS 1.0 bootloader
+#
+>125	string	Loading\ FreeDOS...\r			
+>>311	string	BOOT\ error!\r				\b, FREE-DOS bootloader
+>>>441		ubyte&0xDF	>0			
+>>>>441		string		x 			\b %-.6s
+>>>>>447	ubyte&0xDF	>0			
+>>>>>>447	string		x 			\b%-.1s
+>>>>>>>448	ubyte&0xDF	>0			
+>>>>>>>>448	string		x 			\b%-.1s
+>>>>449		ubyte&0xDF	>0			
+>>>>>449	string		x 			\b.%-.3s
+>124	string	FreeDOS\0				
+>>331	string	\ err\0					\b, FREE-DOS BETa 0.9 Bootloader
+# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>>333	string	\ err\0					\b, FREE-DOS BEta 0.9 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>>334	string	\ err\0					\b, FREE-DOS Beta 0.9 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>336	string	Error!\ 				
+>>343	string	Hit\ a\ key\ to\ reboot.		\b, FREE-DOS Beta 0.9sr1 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+# added by Joerg Jenderek
+# http://www.visopsys.org/
+# http://partitionlogic.org.uk/
+# OEM-ID=Visopsys
+>478		ulelong	0					
+>>(1.b+326)	string	I/O\ Error\ reading\ 			
+>>>(1.b+344)	string	Visopsys\ loader\r			
+>>>>(1.b+361)	string	Press\ any\ key\ to\ continue.\r	\b, Visopsys loader
+# http://alexfru.chat.ru/epm.html#bootprog
+>494	ubyte	>0x4D					
+>>495	string	>E					
+>>>495	string	<S					
+#OEM-ID is not reliable
+>>>>3	string	BootProg				
+# It just looks for a program file name at the root directory
+# and loads corresponding file with following execution.
+# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
+>>>>499			ubyte&0xDF	>0		\b, COM/EXE Bootloader
+>>>>>499		string		x 		\b %-.1s
+>>>>>>500		ubyte&0xDF	>0		
+>>>>>>>500		string		x 		\b%-.1s
+>>>>>>>>501		ubyte&0xDF	>0		
+>>>>>>>>>501		string		x 		\b%-.1s
+>>>>>>>>>>502		ubyte&0xDF	>0		
+>>>>>>>>>>>502		string		x 		\b%-.1s
+>>>>>>>>>>>>503		ubyte&0xDF	>0		
+>>>>>>>>>>>>>503	string		x 		\b%-.1s
+>>>>>>>>>>>>>>504	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>504	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>505	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>505	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>>>506	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>>>506	string		x 		\b%-.1s
+#name extension
+>>>>>507		ubyte&0xDF	>0		\b.
+>>>>>>507		string		x 		\b%-.1s
+>>>>>>>508		ubyte&0xDF	>0		
+>>>>>>>>508		string		x 		\b%-.1s
+>>>>>>>>>509		ubyte&0xDF	>0		
+>>>>>>>>>>509		string		x 		\b%-.1s
+#If the boot sector fails to read any other sector,
+#it prints a very short message ("RE") to the screen and hangs the computer.
+#If the boot sector fails to find needed program in the root directory,
+#it also hangs with another message ("NF").
+>>>>>492		string		RENF		\b, FAT (12 bit)
+>>>>>495		string		RENF		\b, FAT (16 bit)
+# http://alexfru.chat.ru/epm.html#bootprog
+>494	ubyte	>0x4D					
+>>495	string	>E					
+>>>495	string	<S					
+#OEM-ID is not reliable
+>>>>3	string	BootProg				
+# It just looks for a program file name at the root directory
+# and loads corresponding file with following execution.
+# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
+>>>>499			ubyte&0xDF	>0		\b, COM/EXE Bootloader
+>>>>>499		string		x 		\b %-.1s
+>>>>>>500		ubyte&0xDF	>0		
+>>>>>>>500		string		x 		\b%-.1s
+>>>>>>>>501		ubyte&0xDF	>0		
+>>>>>>>>>501		string		x 		\b%-.1s
+>>>>>>>>>>502		ubyte&0xDF	>0		
+>>>>>>>>>>>502		string		x 		\b%-.1s
+>>>>>>>>>>>>503		ubyte&0xDF	>0		
+>>>>>>>>>>>>>503	string		x 		\b%-.1s
+>>>>>>>>>>>>>>504	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>504	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>505	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>505	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>>>506	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>>>506	string		x 		\b%-.1s
+#name extension
+>>>>>507		ubyte&0xDF	>0		\b.
+>>>>>>507		string		x 		\b%-.1s
+>>>>>>>508		ubyte&0xDF	>0		
+>>>>>>>>508		string		x 		\b%-.1s
+>>>>>>>>>509		ubyte&0xDF	>0		
+>>>>>>>>>>509		string		x 		\b%-.1s
+#If the boot sector fails to read any other sector,
+#it prints a very short message ("RE") to the screen and hangs the computer.
+#If the boot sector fails to find needed program in the root directory,
+#it also hangs with another message ("NF").
+>>>>>492		string		RENF		\b, FAT (12 bit)
+>>>>>495		string		RENF		\b, FAT (16 bit)
+# x86 bootloader end
+# updated by Joerg Jenderek at Sep 2007
+>3	ubyte	0			
+#no active flag
+>>446	ubyte	0			
+# partition 1 not empty
+>>>450	ubyte	>0			
+# partitions 3,4 empty
+>>>>482		ubyte	0			
+>>>>>498	ubyte	0			
+# partition 2 ID=0,5,15
+>>>>>>466	ubyte	<0x10			
+>>>>>>>466	ubyte	0x05			\b, extended partition table
+>>>>>>>466	ubyte	0x0F			\b, extended partition table (LBA)
+>>>>>>>466	ubyte	0x0			\b, extended partition table (last)	
+# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90
+# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD
+# older drives may use Near JuMP instruction E9 xx xx
+>0		lelong&0x009000EB	0x009000EB 
+>0		lelong&0x000000E9	0x000000E9 
+# minimal short forward jump found 03cx??
+# maximal short forward jump is 07fx
+>1		ubyte			<0xff	\b, code offset 0x%x
+# mtools-3.9.8/msdos.h
+# usual values are marked with comments to get only informations of strange FAT systems
+# valid sectorsize must be a power of 2 from 32 to 32768
+>>11		uleshort&0x000f	x		
+>>>11		uleshort	<32769		
+>>>>11		uleshort	>31		
+>>>>>21		ubyte&0xf0	0xF0		
+>>>>>>3		string		>\0		\b, OEM-ID "%8.8s"
+#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
+>>>>>>>8	string		IHC		\b cached by Windows 9M
+>>>>>>11	uleshort	>512		\b, Bytes/sector %u
+#>>>>>>11	uleshort	=512		\b, Bytes/sector %u=512 (usual)
+>>>>>>11	uleshort	<512		\b, Bytes/sector %u
+>>>>>>13	ubyte		>1		\b, sectors/cluster %u
+#>>>>>>13	ubyte		=1		\b, sectors/cluster %u (usual on Floppies)
+>>>>>>14	uleshort	>32		\b, reserved sectors %u
+#>>>>>>14	uleshort	=32		\b, reserved sectors %u (usual Fat32)
+#>>>>>>14	uleshort	>1		\b, reserved sectors %u
+#>>>>>>14	uleshort	=1		\b, reserved sectors %u (usual FAT12,FAT16)
+>>>>>>14	uleshort	<1		\b, reserved sectors %u
+>>>>>>16	ubyte		>2		\b, FATs %u
+#>>>>>>16	ubyte		=2		\b, FATs %u (usual)
+>>>>>>16	ubyte		=1		\b, FAT  %u
+>>>>>>16	ubyte		>0
+>>>>>>17	uleshort	>0		\b, root entries %u
+#>>>>>>17	uleshort	=0		\b, root entries %u=0 (usual Fat32)
+>>>>>>19	uleshort	>0		\b, sectors %u (volumes <=32 MB) 
+#>>>>>>19	uleshort	=0		\b, sectors %u=0 (usual Fat32)
+>>>>>>21	ubyte		>0xF0		\b, Media descriptor 0x%x
+#>>>>>>21	ubyte		=0xF0		\b, Media descriptor 0x%x (usual floppy)
+>>>>>>21	ubyte		<0xF0		\b, Media descriptor 0x%x
+>>>>>>22	uleshort	>0		\b, sectors/FAT %u
+#>>>>>>22	uleshort	=0		\b, sectors/FAT %u=0 (usual Fat32)
+>>>>>>26	ubyte		>2		\b, heads %u
+#>>>>>>26	ubyte		=2		\b, heads %u (usual floppy)
+>>>>>>26	ubyte		=1		\b, heads %u
+#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
+>>>>>>38	ubyte		!0x70		
+>>>>>>>28	ulelong		>0		\b, hidden sectors %u
+#>>>>>>>28	ulelong		=0		\b, hidden sectors %u (usual floppy)
+>>>>>>>32	ulelong		>0		\b, sectors %u (volumes > 32 MB) 
+#>>>>>>>32	ulelong		=0		\b, sectors %u (volumes > 32 MB)
+# FAT<32 specific 
+>>>>>>82	string		!FAT32
+#>>>>>>>36	ubyte		0x80		\b, physical drive 0x%x=0x80 (usual harddisk)
+#>>>>>>>36	ubyte		0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>36	ubyte		!0x80		
+>>>>>>>>36	ubyte		!0		\b, physical drive 0x%x
+>>>>>>>37	ubyte		>0		\b, reserved 0x%x
+#>>>>>>>37	ubyte		=0		\b, reserved 0x%x
+>>>>>>>38	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		=0x29
+>>>>>>>>39	ulelong		x		\b, serial number 0x%x
+>>>>>>>>43	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		=NO\ NAME	\b, unlabeled
+>>>>>>>54	string		FAT		\b, FAT
+>>>>>>>>54	string		FAT12		\b (12 bit)
+>>>>>>>>54	string		FAT16		\b (16 bit)
+# FAT32 specific
+>>>>>>82	string		FAT32		\b, FAT (32 bit)
+>>>>>>>36	ulelong		x		\b, sectors/FAT %u
+>>>>>>>40	uleshort	>0		\b, extension flags %u
+#>>>>>>>40	uleshort	=0		\b, extension flags %u
+>>>>>>>42	uleshort	>0		\b, fsVersion %u
+#>>>>>>>42	uleshort	=0		\b, fsVersion %u (usual)
+>>>>>>>44	ulelong		>2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=1		\b, rootdir cluster %u
+>>>>>>>48	uleshort	>1		\b, infoSector %u
+#>>>>>>>48	uleshort	=1		\b, infoSector %u (usual)
+>>>>>>>48	uleshort	<1		\b, infoSector %u
+>>>>>>>50	uleshort	>6		\b, Backup boot sector %u
+#>>>>>>>50	uleshort	=6		\b, Backup boot sector %u (usual) 
+>>>>>>>50	uleshort	<6		\b, Backup boot sector %u
+>>>>>>>54	ulelong		>0		\b, reserved1 0x%x
+>>>>>>>58	ulelong		>0		\b, reserved2 0x%x
+>>>>>>>62	ulelong		>0		\b, reserved3 0x%x
+# same structure as FAT1X 
+>>>>>>>64	ubyte		>0x80		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0x80		\b, physical drive 0x%x=80 (usual harddisk)
+>>>>>>>64	ubyte&0x7F	>0		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>65	ubyte		>0		\b, reserved 0x%x
+>>>>>>>66	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		=0x29
+>>>>>>>>67	ulelong		x		\b, serial number 0x%x
+>>>>>>>>71	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		=NO\ NAME	\b, unlabeled
+### FATs end
+>0x200	lelong	0x82564557		\b, BSD disklabel
+# FATX 
+0		string		FATX		FATX filesystem data
+
+
+# Minix filesystems - Juan Cespedes <cespedes at debian.org>
+0x410	leshort		0x137f
+!:strength / 2
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V1, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x137f
+!:strength / 2
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V1 (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x138f
+!:strength / 2
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V1, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x138f
+!:strength / 2
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V1, 30 char names (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x2468
+>0x402	beshort		< 100
+>>0x402	beshort		> -1		Minix filesystem, V2, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x2468
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V2 (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+
+0x410	leshort		0x2478
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V2, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x2478
+>0x402	beshort		< 100
+>0x402	beshort		> -1		Minix filesystem, V2, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x2478
+>0x402	beshort		!0		Minix filesystem, V2, 30 char names (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x4d5a
+>0x402	beshort		!0		Minix filesystem, V3, %d zones
+>0x1e	string		minix		\b, bootable
+
+# romfs filesystems - Juan Cespedes <cespedes at debian.org>
+0	string		-rom1fs-	romfs filesystem, version 1
+>8	belong	x			%d bytes,
+>16	string	x			named %s.
+
+# netboot image - Juan Cespedes <cespedes at debian.org>
+0	lelong		0x1b031336L	Netboot image,
+>4	lelong&0xFFFFFF00	0
+>>4	lelong&0x100	0x000		mode 2
+>>4	lelong&0x100	0x100		mode 3
+>4	lelong&0xFFFFFF00	!0	unknown mode
+
+0x18b	string	OS/2	OS/2 Boot Manager
+
+# updated by Joerg Jenderek at Oct 2008!!
+# http://syslinux.zytor.com/iso.php
+0	ulelong	0x7c40eafa		isolinux Loader
+# http://syslinux.zytor.com/pxe.php
+0	ulelong	0x007c05ea		pxelinux Loader
+0	ulelong	0x60669c66		pxelinux Loader
+
+# added by Joerg Jenderek
+# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
+# grub-1.94/kern/i386/pc/startup.S
+# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
+# usual values are marked with comments to get only informations of strange GRUB loaders
+0x200	uleshort		0x70EA		
+# found only version 3.{1,2}
+>0x206		ubeshort	>0x0300		
+# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
+>>0x212 	ubyte		>0x29		
+>>>0x213 	ubyte		>0x29		
+# not iso9660_stage1_5
+#>>>0	ulelong&0x00BE5652	0x00BE5652	
+>>>>0x213 	ubyte		>0x29		GRand Unified Bootloader
+# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
+>>>>0x217 	ubyte		0xFF		stage1_5
+>>>>0x217 	ubyte		<0xFF		stage2
+>>>>0x206	ubyte		x		\b version %u
+>>>>0x207	ubyte		x		\b.%u
+# module_size for 1.94
+>>>>0x208	ulelong		<0xffffff	\b, installed partition %u
+#>>>>0x208	ulelong		=0xffffff	\b, %u (default)
+>>>>0x208	ulelong		>0xffffff	\b, installed partition %u
+# GRUB 0.5.95 unofficial
+>>>>0x20C	ulelong&0x2E300000 0x2E300000	
+# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs
+>>>>>0x20C	ubyte		x		\b, identifier 0x%x
+#>>>>>0x20D	ubyte		=0		\b, LBA flag 0x%x (default)
+>>>>>0x20D	ubyte		>0		\b, LBA flag 0x%x
+# GRUB version as string
+>>>>>0x20E 	string		>\0		\b, GRUB version %-s
+# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
+>>>>>>0x215 	ulong		0xffffffff	
+>>>>>>>0x219 	string		>\0		\b, configuration file %-s
+>>>>>>0x215 	ulong		!0xffffffff	
+>>>>>>>0x215 	string		>\0		\b, configuration file %-s
+# newer GRUB versions
+>>>>0x20C	ulelong&0x2E300000 !0x2E300000	
+##>>>>>0x20C	ulelong		=0		\b, saved entry %d (usual)
+>>>>>0x20C	ulelong		>0		\b, saved entry %d
+# for 1.94 contains kernel image size
+# for 0.93,0.94,0.96,0.97
+# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs	6=vstafs	7=jfs	8=xfs	9=iso9660	a=ufs2	
+>>>>>0x210	ubyte		x		\b, identifier 0x%x
+# The flag for LBA forcing is in most cases 0
+#>>>>>0x211	ubyte		=0		\b, LBA flag 0x%x (default)
+>>>>>0x211	ubyte		>0		\b, LBA flag 0x%x
+# GRUB version as string
+>>>>>0x212 	string		>\0		\b, GRUB version %-s
+# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
+>>>>>0x217 	ulong		0xffffffff	
+>>>>>>0x21b 	string		>\0		\b, configuration file %-s
+>>>>>0x217 	ulong		!0xffffffff	
+>>>>>>0x217 	string		>\0		\b, configuration file %-s
+
+9564	lelong		0x00011954	Unix Fast File system [v1] (little-endian),
+>8404	string		x		last mounted on %s,
+#>9504	ledate		x		last checked at %s,
+>8224	ledate		x		last written at %s,
+>8401	byte		x		clean flag %d,
+>8228	lelong		x		number of blocks %d,
+>8232	lelong		x		number of data blocks %d,
+>8236	lelong		x		number of cylinder groups %d,
+>8240	lelong		x		block size %d,
+>8244	lelong		x		fragment size %d,
+>8252	lelong		x		minimum percentage of free blocks %d,
+>8256	lelong		x		rotational delay %dms,
+>8260	lelong		x		disk rotational speed %drps,
+>8320	lelong		0		TIME optimization
+>8320	lelong		1		SPACE optimization
+
+42332	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	leqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	lequad		x		number of blocks %lld,
+>&-288	lequad		x		number of data blocks %lld,
+>&-1332	lelong		x		number of cylinder groups %d,
+>&-1328	lelong		x		block size %d,
+>&-1324	lelong		x		fragment size %d,
+>&-180	lelong		x		average file size %d,
+>&-176	lelong		x		average number of files in dir %d,
+>&-272	lequad		x		pending blocks to free %lld,
+>&-264	lelong		x		pending inodes to free %ld,
+>&-664	lequad		x		system-wide uuid %0llx,
+>&-1316	lelong		x		minimum percentage of free blocks %d,
+>&-1248	lelong		0		TIME optimization
+>&-1248	lelong		1		SPACE optimization
+
+66908	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	leqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	lequad		x		number of blocks %lld,
+>&-288	lequad		x		number of data blocks %lld,
+>&-1332	lelong		x		number of cylinder groups %d,
+>&-1328	lelong		x		block size %d,
+>&-1324	lelong		x		fragment size %d,
+>&-180	lelong		x		average file size %d,
+>&-176	lelong		x		average number of files in dir %d,
+>&-272	lequad		x		pending blocks to free %lld,
+>&-264	lelong		x		pending inodes to free %ld,
+>&-664	lequad		x		system-wide uuid %0llx,
+>&-1316	lelong		x		minimum percentage of free blocks %d,
+>&-1248	lelong		0		TIME optimization
+>&-1248	lelong		1		SPACE optimization
+
+9564	belong		0x00011954	Unix Fast File system [v1] (big-endian),
+>7168   belong		0x4c41424c	Apple UFS Volume
+>>7186  string		x		named %s,
+>>7176  belong		x		volume label version %d,
+>>7180  bedate		x		created on %s,
+>8404	string		x		last mounted on %s,
+#>9504	bedate		x		last checked at %s,
+>8224	bedate		x		last written at %s,
+>8401	byte		x		clean flag %d,
+>8228	belong		x		number of blocks %d,
+>8232	belong		x		number of data blocks %d,
+>8236	belong		x		number of cylinder groups %d,
+>8240	belong		x		block size %d,
+>8244	belong		x		fragment size %d,
+>8252	belong		x		minimum percentage of free blocks %d,
+>8256	belong		x		rotational delay %dms,
+>8260	belong		x		disk rotational speed %drps,
+>8320	belong		0		TIME optimization
+>8320	belong		1		SPACE optimization
+
+42332	belong		0x19540119	Unix Fast File system [v2] (big-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	beqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	bequad		x		number of blocks %lld,
+>&-288	bequad		x		number of data blocks %lld,
+>&-1332	belong		x		number of cylinder groups %d,
+>&-1328	belong		x		block size %d,
+>&-1324	belong		x		fragment size %d,
+>&-180	belong		x		average file size %d,
+>&-176	belong		x		average number of files in dir %d,
+>&-272	bequad		x		pending blocks to free %lld,
+>&-264	belong		x		pending inodes to free %ld,
+>&-664	bequad		x		system-wide uuid %0llx,
+>&-1316	belong		x		minimum percentage of free blocks %d,
+>&-1248	belong		0		TIME optimization
+>&-1248	belong		1		SPACE optimization
+
+66908	belong		0x19540119	Unix Fast File system [v2] (big-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	beqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	bequad		x		number of blocks %lld,
+>&-288	bequad		x		number of data blocks %lld,
+>&-1332	belong		x		number of cylinder groups %d,
+>&-1328	belong		x		block size %d,
+>&-1324	belong		x		fragment size %d,
+>&-180	belong		x		average file size %d,
+>&-176	belong		x		average number of files in dir %d,
+>&-272	bequad		x		pending blocks to free %lld,
+>&-264	belong		x		pending inodes to free %ld,
+>&-664	bequad		x		system-wide uuid %0llx,
+>&-1316	belong		x		minimum percentage of free blocks %d,
+>&-1248	belong		0		TIME optimization
+>&-1248	belong		1		SPACE optimization
+
+# ext2/ext3 filesystems - Andreas Dilger <adilger at dilger.ca>
+# ext4 filesystem - Eric Sandeen <sandeen at sandeen.net>
+0x438   leshort         0xEF53          Linux
+>0x44c  lelong          x               rev %d
+>0x43e  leshort         x               \b.%d
+# No journal?  ext2
+>0x45c  lelong          ^0x0000004      ext2 filesystem data
+>>0x43a leshort         ^0x0000001      (mounted or unclean)
+# Has a journal?  ext3 or ext4
+>0x45c  lelong          &0x0000004
+#  and small INCOMPAT?
+>>0x460 lelong          <0x0000040
+#   and small RO_COMPAT?
+>>>0x464 lelong         <0x0000008      ext3 filesystem data
+#   else large RO_COMPAT?
+>>>0x464 lelong         >0x0000007      ext4 filesystem data
+#  else large INCOMPAT?
+>>0x460 lelong          >0x000003f      ext4 filesystem data
+# General flags for any ext* fs
+>0x460  lelong          &0x0000004      (needs journal recovery)
+>0x43a  leshort         &0x0000002      (errors)
+# INCOMPAT flags
+>0x460  lelong          &0x0000001      (compressed)
+#>0x460 lelong          &0x0000002      (filetype)
+#>0x460 lelong          &0x0000010      (meta bg)
+>0x460  lelong          &0x0000040      (extents)
+>0x460  lelong          &0x0000080      (64bit)
+#>0x460 lelong          &0x0000100      (mmp)
+#>0x460 lelong          &0x0000200      (flex bg)
+# RO_INCOMPAT flags
+#>0x464 lelong          &0x0000001      (sparse super)
+>0x464  lelong          &0x0000002      (large files)
+>0x464  lelong          &0x0000008      (huge files)
+#>0x464 lelong          &0x0000010      (gdt checksum)
+#>0x464 lelong          &0x0000020      (many subdirs)
+#>0x463 lelong          &0x0000040      (extra isize)
+
+# SGI disk labels - Nathan Scott <nathans at debian.org>
+0	belong		0x0BE5A941	SGI disk label (volume header)
+
+# SGI XFS filesystem - Nathan Scott <nathans at debian.org>
+0	belong		0x58465342	SGI XFS filesystem data
+>0x4	belong		x		(blksz %d,
+>0x68	beshort		x		inosz %d,
+>0x64	beshort		^0x2004		v1 dirs)
+>0x64	beshort		&0x2004		v2 dirs)
+
+############################################################################
+# Minix-ST kernel floppy
+0x800	belong		0x46fc2700	Atari-ST Minix kernel image
+>19	string		\240\5\371\5\0\011\0\2\0	\b, 720k floppy
+>19	string		\320\2\370\5\0\011\0\1\0	\b, 360k floppy
+
+############################################################################
+# Hmmm, is this a better way of detecting _standard_ floppy images ?
+19	string		\320\2\360\3\0\011\0\1\0	DOS floppy 360k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\240\5\371\3\0\011\0\2\0	DOS floppy 720k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\100\013\360\011\0\022\0\2\0	DOS floppy 1440k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+
+19	string		\240\5\371\5\0\011\0\2\0	DOS floppy 720k, IBM
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\100\013\371\5\0\011\0\2\0	DOS floppy 1440k, mkdosfs
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+
+19	string		\320\2\370\5\0\011\0\1\0	Atari-ST floppy 360k
+19	string		\240\5\371\5\0\011\0\2\0	Atari-ST floppy 720k
+
+#  Valid media descriptor bytes for MS-DOS:
+#
+#     Byte   Capacity   Media Size and Type
+#     -------------------------------------------------
+#
+#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector
+#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector
+#     F9     720K       3.5-inch, 2-sided, 9-sector
+#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector
+#     FD     360K       5.25-inch, 2-sided, 9-sector
+#     FF     320K       5.25-inch, 2-sided, 8-sector
+#     FC     180K       5.25-inch, 1-sided, 9-sector
+#     FE     160K       5.25-inch, 1-sided, 8-sector
+#     FE     250K       8-inch, 1-sided, single-density
+#     FD     500K       8-inch, 2-sided, single-density
+#     FE     1.2 MB     8-inch, 2-sided, double-density
+#     F8     -----      Fixed disk 
+#
+#     FC     xxxK       Apricot 70x1x9 boot disk.
+#
+# Originally a bitmap:
+#  xxxxxxx0	Not two sided
+#  xxxxxxx1	Double sided
+#  xxxxxx0x	Not 8 SPT
+#  xxxxxx1x	8 SPT
+#  xxxxx0xx	Not Removable drive
+#  xxxxx1xx	Removable drive
+#  11111xxx	Must be one.
+#
+# But now it's rather random:
+#  111111xx	Low density disk
+#        00	SS, Not 8 SPT
+#        01	DS, Not 8 SPT
+#        10	SS, 8 SPT
+#        11	DS, 8 SPT
+#
+#  11111001	Double density 3� floppy disk, high density 5�
+#  11110000	High density 3� floppy disk
+#  11111000	Hard disk any format
+#
+
+# CDROM Filesystems
+# Modified for UDF by gerardo.cacciari at gmail.com
+32769	string    CD001
+!:mime	application/x-iso9660-image
+>38913	string   !NSR0      ISO 9660 CD-ROM filesystem data
+>38913	string    NSR0      UDF filesystem data
+>>38917	string    1         (version 1.0)
+>>38917	string    2         (version 1.5)
+>>38917	string    3         (version 2.0)
+>>38917	byte     >0x33      (unknown version, ID 0x%X)
+>>38917	byte     <0x31      (unknown version, ID 0x%X)
+# "application id" which appears to be used as a volume label
+#>32808	string/T  >\0       '%s'
+>34816	string    \000CD001\001EL\ TORITO\ SPECIFICATION    (bootable)
+37633	string    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
+!:mime	application/x-iso9660-image
+32776	string    CDROM     High Sierra CD-ROM filesystem data
+
+# .cso files
+0    string    CISO	Compressed ISO CD image
+
+# cramfs filesystem - russell at coker.com.au
+0       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian
+>4      lelong  x size %lu
+>8      lelong  &1 version #2
+>8      lelong  &2 sorted_dirs
+>8      lelong  &4 hole_support
+>32     lelong  x CRC 0x%x,
+>36     lelong  x edition %lu,
+>40     lelong  x %lu blocks,
+>44     lelong  x %lu files
+
+0       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian
+>4      belong  x size %lu
+>8      belong  &1 version #2
+>8      belong  &2 sorted_dirs
+>8      belong  &4 hole_support
+>32     belong  x CRC 0x%x,
+>36     belong  x edition %lu,
+>40     belong  x %lu blocks,
+>44     belong  x %lu files
+
+# reiserfs - russell at coker.com.au
+0x10034		string	ReIsErFs	ReiserFS V3.5
+0x10034		string	ReIsEr2Fs	ReiserFS V3.6
+>0x1002c 	leshort	x		block size %d
+>0x10032	leshort	&2		(mounted or unclean)
+>0x10000	lelong	x		num blocks %d
+>0x10040	lelong	1		tea hash
+>0x10040	lelong	2		yura hash
+>0x10040	lelong	3		r5 hash
+
+# JFFS - russell at coker.com.au
+0	lelong	0x34383931	Linux Journalled Flash File system, little endian
+0	belong	0x34383931	Linux Journalled Flash File system, big endian
+
+# EST flat binary format (which isn't, but anyway)
+# From: Mark Brown <broonie at sirena.org.uk>
+0	string	ESTFBINR	EST flat binary
+
+# Aculab VoIP firmware
+# From: Mark Brown <broonie at sirena.org.uk>
+0	string	VoIP\ Startup\ and	Aculab VoIP firmware
+>35	string	x	format %s
+
+# From: Mark Brown <broonie at sirena.org.uk> [old]
+# From: Behan Webster <behanw at websterwood.com>
+0	belong	0x27051956	u-boot legacy uImage,
+>32	string	x		%s,
+>28	byte	0		Invalid os/
+>28	byte	1		OpenBSD/
+>28	byte	2		NetBSD/
+>28	byte	3		FreeBSD/
+>28	byte	4		4.4BSD/
+>28	byte	5		Linux/
+>28	byte	6		SVR4/
+>28	byte	7		Esix/
+>28	byte	8		Solaris/
+>28	byte	9		Irix/
+>28	byte	10		SCO/
+>28	byte	11		Dell/
+>28	byte	12		NCR/
+>28	byte	13		LynxOS/
+>28	byte	14		VxWorks/
+>28	byte	15		pSOS/
+>28	byte	16		QNX/
+>28	byte	17		Firmware/
+>28	byte	18		RTEMS/
+>28	byte	19		ARTOS/
+>28	byte	20		Unity OS/
+>28	byte	21		INTEGRITY/
+>29	byte	0		\bInvalid CPU,
+>29	byte	1		\bAlpha,
+>29	byte	2		\bARM,
+>29	byte	3		\bIntel x86,
+>29	byte	4		\bIA64,
+>29	byte	5		\bMIPS,
+>29	byte	6		\bMIPS 64-bit,
+>29	byte	7		\bPowerPC,
+>29	byte	8		\bIBM S390,
+>29	byte	9		\bSuperH,
+>29	byte	10		\bSparc,
+>29	byte	11		\bSparc 64-bit,
+>29	byte	12		\bM68K,
+>29	byte	13		\bNios-32,
+>29	byte	14		\bMicroBlaze,
+>29	byte	15		\bNios-II,
+>29	byte	16		\bBlackfin,
+>29	byte	17		\bAVR32,
+>29	byte	18		\bSTMicroelectronics ST200,
+>30	byte	0		Invalid Image
+>30	byte	1		Standalone Program
+>30	byte	2		OS Kernel Image
+>30	byte	3		RAMDisk Image
+>30	byte	4		Multi-File Image
+>30	byte	5		Firmware Image
+>30	byte	6		Script File
+>30	byte	7		Filesystem Image (any type)
+>30	byte	8		Binary Flat Device Tree BLOB
+>31	byte	0		(Not compressed),
+>31	byte	1		(gzip),
+>31	byte	2		(bzip2),
+>31	byte	3		(lzma),
+>12	belong	x		%d bytes,
+>8	bedate	x		%s,
+>16	belong	x		Load Address: 0x%08X,
+>20	belong	x		Entry Point: 0x%08X,
+>4	belong	x		Header CRC: 0x%08X,
+>24	belong	x		Data CRC: 0x%08X
+
+# JFFS2 file system
+0	leshort	0x1984		Linux old jffs2 filesystem data little endian
+0	leshort	0x1985		Linux jffs2 filesystem data little endian
+
+# Squashfs
+0	string	sqsh	Squashfs filesystem, big endian,
+>28	beshort	x	version %d.
+>30	beshort x	\b%d,
+>28	beshort <3
+>>8	belong	x	%d bytes,
+>28	beshort >2
+>>28 beshort <4
+>>>63	bequad x	%lld bytes,
+>>28 beshort >3
+>>>40	bequad x	%lld bytes,
+#>>67	belong	x	%d bytes,
+>4	belong	x	%d inodes,
+>28	beshort <2
+>>32	beshort	x	blocksize: %d bytes,
+>28	beshort >1
+>>28 beshort <4
+>>>51	belong	x	blocksize: %d bytes,
+>>28 beshort >3
+>>>12	belong	x	blocksize: %d bytes,
+>28 beshort <4
+>>39	bedate	x	created: %s
+>28 beshort >3
+>>8	bedate	x	created: %s
+0	string	hsqs	Squashfs filesystem, little endian,
+>28	leshort	x	version %d.
+>30	leshort	x	\b%d,
+>28	leshort <3
+>>8	lelong	x	%d bytes,
+>28	leshort >2
+>>28 leshort <4
+>>>63	lequad x	%lld bytes,
+>>28 leshort >3
+>>>40	lequad x	%lld bytes,
+#>>63	lelong	x	%d bytes,
+>4	lelong	x	%d inodes,
+>28	leshort <2
+>>32	leshort	x	blocksize: %d bytes,
+>28	leshort >1
+>>28 leshort <4
+>>>51	lelong	x	blocksize: %d bytes,
+>>28 leshort >3
+>>>12	lelong	x	blocksize: %d bytes,
+>28 leshort <4
+>>39	ledate	x	created: %s
+>28 leshort >3
+>>8	ledate	x	created: %s
+
+0	string		td\000		floppy image data (TeleDisk)
+
+# AFS Dump Magic
+# From: Ty Sarna <tsarna at sarna.org> 
+0       string                  \x01\xb3\xa1\x13\x22    AFS Dump
+>&0     belong                  x                       (v%d)
+>>&0    byte                    0x76
+>>>&0   belong                  x                       Vol %d,
+>>>>&0  byte                    0x6e
+>>>>>&0 string                  x                       %s
+>>>>>>&1        byte            0x74
+>>>>>>>&0       beshort         2
+>>>>>>>>&4      bedate          x                       on: %s
+>>>>>>>>&0      bedate          =0                      full dump
+>>>>>>>>&0      bedate          !0                      incremental since: %s
+
+#----------------------------------------------------------
+#delta ISO    Daniel Novotny (dnovotny at redhat.com)
+0	string  DISO	Delta ISO data
+>4	belong  x	version %d
+
+# VMS backup savesets - gerardo.cacciari at gmail.com
+#
+4            string  \x01\x00\x01\x00\x01\x00
+>(0.s+16)    string  \x01\x01
+>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data
+>>>40        lelong  x          (block size %d,
+>>>49        string  >\0        original name '%s',
+>>>2         short   1024       VAX generated)
+>>>2         short   2048       AXP generated)
+>>>2         short   4096       I64 generated)
+
+# Summary: Oracle Clustered Filesystem
+# Created by: Aaron Botsis <redhat at digitalmafia.org>
+8	string		OracleCFS	Oracle Clustered Filesystem,
+>4	long		x		rev %d
+>0	long		x		\b.%d,
+>560	string		x		label: %.64s,
+>136	string		x		mountpoint: %.128s
+
+# Summary: Oracle ASM tagged volume
+# Created by: Aaron Botsis <redhat at digitalmafia.org>
+32	string		ORCLDISK	Oracle ASM Volume,
+>40	string		x		Disk Name: %0.12s
+32	string		ORCLCLRD	Oracle ASM Volume (cleared),
+>40	string		x		Disk Name: %0.12s
+
+# Oracle Clustered Filesystem - Aaron Botsis <redhat at digitalmafia.org>
+8	string		OracleCFS	Oracle Clustered Filesystem,
+>4	long		x		rev %d
+>0	long		x		\b.%d,
+>560	string		x		label: %.64s,
+>136	string		x		mountpoint: %.128s
+
+# Oracle ASM tagged volume - Aaron Botsis <redhat at digitalmafia.org>
+32	string		ORCLDISK	Oracle ASM Volume,
+>40	string		x		Disk Name: %0.12s
+32	string		ORCLCLRD	Oracle ASM Volume (cleared),
+>40	string		x		Disk Name: %0.12s
+
+# Compaq/HP RILOE floppy image
+# From: Dirk Jagdmann <doj at cubic.org>
+0	string	CPQRFBLO	Compaq/HP RILOE floppy image
+
+#------------------------------------------------------------------------------
+# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari at gmail.com
+# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is
+# mapped to VBN 2 of [000000]INDEXF.SYS;1
+#
+1008    string          DECFILE11B      Files-11 On-Disk Structure
+>525    byte            x               Level %d
+>525    byte            x               (ODS-%d OpenVMS file system),
+>984    string          x               volume label is '%-12.12s'
+
+# From: Thomas Klausner <wiz at NetBSD.org>
+# http://filext.com/file-extension/DAA
+# describes the daa file format. The magic would be:
+0	string		DAA\x0\x0\x0\x0\x0	PowerISO Direct-Access-Archive
+
+# From Albert Cahalan <acahalan at gmail.com>
+# really le32 operation,destination,payloadsize (but quite predictable)
+# 01 00 00 00 00 00 00 c0 00 02 00 00
+0	string		\1\0\0\0\0\0\0\300\0\2\0\0	Marvell Libertas firmware
+
+# From Eric Sandeen
+# GFS2
+0x10000         belong          0x01161970      Linux
+>0x10018        belong          0x0000051d      GFS1 Filesystem
+>>0x10024        belong          x               (blocksize %d,
+>>0x10060        string          >\0             lockproto %s)
+>0x10018        belong          0x00000709      GFS2 Filesystem
+>>0x10024        belong          x               (blocksize %d,
+>>0x10060        string          >\0             lockproto %s)
+
+# BTRFS
+0x10040         string          _BHRfS_M        BTRFS Filesystem
+>0x1012b        string          >\0             (label "%s",
+>0x10090        lelong          x               sectorsize %d,
+>0x10094        lelong          x               nodesize %d,
+>0x10098        lelong          x               leafsize %d)
+
+
+# dvdisaster's .ecc
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string	*dvdisaster*	dvdisaster error correction file
+
+# xfs metadump image 
+# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
+# but can we do the << ?  For now it's always 512 (0x200) anyway.
+0	string XFSM
+>0x200	string XFSB	XFS filesystem metadump image
+
+
+#------------------------------------------------------------------------------
+# $File: filesystems,v 1.55 2010/01/16 17:45:12 chl Exp $
+# filesystems:  file(1) magic for different filesystems
+#
+0	string	\366\366\366\366	PC formatted floppy with no filesystem
+# Sun disk labels
+# From /usr/include/sun/dklabel.h:
+0774	beshort		0xdabe		
+# modified by Joerg Jenderek, because original test
+# succeeds for Cabinet archive dao360.dl_ with negative blocks
+>0770	long		>0		Sun disk label
+>>0	string		x		'%s
+>>>31	string		>\0		\b%s
+>>>>63	string		>\0		\b%s
+>>>>>95	string		>\0		\b%s
+>>0	string		x		\b'
+>>0734	short		>0		%d rpm,
+>>0736	short		>0		%d phys cys,
+>>0740	short		>0		%d alts/cyl,
+>>0746	short		>0		%d interleave,
+>>0750	short		>0		%d data cyls,
+>>0752	short		>0		%d alt cyls,
+>>0754	short		>0		%d heads/partition,
+>>0756	short		>0		%d sectors/track,
+>>0764	long		>0		start cyl %ld,
+>>0770	long		x		%ld blocks
+# Is there a boot block written 1 sector in?
+>512    belong&077777777	0600407	\b, boot block present
+# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc
+# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
+0		string	SBMBAKUP_	Smart Boot Manager backup file
+>9		string	x		\b, version %-5.5s
+>>14		string	=_		
+>>>15		string	x		%-.1s
+>>>>16		string	=_		\b.
+>>>>>17		string	x		\b%-.1s
+>>>>>>18	string	=_		\b.
+>>>>>>>19	string	x		\b%-.1s
+>>>22		ubyte	0		
+>>>>21		ubyte	x		\b, from drive 0x%x
+>>>22		ubyte	>0		
+>>>>21		string	x		\b, from drive %s
+
+# Joerg Jenderek
+# DOS Emulator image is 128 byte, null right padded header + harddisc image
+0	string	DOSEMU\0			
+>0x27E	leshort	0xAA55			
+#offset is 128
+>>19	ubyte	128			
+>>>(19.b-1)	ubyte	0x0	DOS Emulator image
+>>>>7	ulelong	>0		\b, %u heads
+>>>>11	ulelong	>0		\b, %d sectors/track
+>>>>15	ulelong	>0		\b, %d cylinders
+
+# updated by Joerg Jenderek at Sep 2007
+# only for sector sizes with 512 or more Bytes
+0x1FE	leshort	0xAA55			x86 boot sector
+# to do also for sectors < than 512 Bytes and some other files, GRR
+#30	search/481	\x55\xAA	x86 boot sector
+# not for BeOS floppy 1440k, MBRs
+#(11.s-2) uleshort	0xAA55		x86 boot sector
+>2	string	OSBS			\b, OS/BS MBR
+# J\xf6rg Jenderek <joerg dot jenderek at web dot de>
+>0x8C	string	Invalid\ partition\ table	\b, MS-DOS MBR
+# dr-dos with some upper-, lowercase variants
+>0x9D	string	Invalid\ partition\ table$	
+>>181	string	No\ Operating\ System$		
+>>>201	string	Operating\ System\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
+>0x9D	string	Invalid\ partition\ table$	
+>>181	string	No\ operating\ system$		
+>>>201	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
+>342	string	Invalid\ partition\ table$	
+>>366	string	No\ operating\ system$		
+>>>386	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, version 7.01 to 7.03
+>295	string	NEWLDR\0				
+>>302	string	Bad\ PT\ $				
+>>>310	string	No\ OS\ $				
+>>>>317	string	OS\ load\ err$				
+>>>>>329	string	Moved\ or\ missing\ IBMBIO.LDR\n\r	
+>>>>>>358	string	Press\ any\ key\ to\ continue.\n\r$	
+>>>>>>>387	string	Copyright\ (c)\ 1984,1998	
+>>>>>>>>411	string	Caldera\ Inc.\0		\b, DR-DOS MBR (IBMBIO.LDR)
+>0x10F	string	Ung\201ltige\ Partitionstabelle	\b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
+>>0x1B8	ubelong	>0				\b, Serial 0x%-.4x
+>0x8B	string	Ung\201ltige\ Partitionstabelle	\b, MS-DOS MBR, german version 5.00 to 4.00.950
+>271	string	Invalid\ partition\ table\0		
+>>295	string	Error\ loading\ operating\ system\0	
+>>>326	string	Missing\ operating\ system\0		\b, mbr
+#
+>139	string	Invalid\ partition\ table\0		
+>>163	string	Error\ loading\ operating\ system\0	
+>>>194	string	Missing\ operating\ system\0		\b, Microsoft Windows XP mbr
+# http://www.heise.de/ct/05/09/006/ page 184
+#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes
+>>>>0x1B8	ulelong	>0				\b,Serial 0x%-.4x
+>300	string	Invalid\ partition\ table\0	
+>>324	string	Error\ loading\ operating\ system\0
+>>>355	string	Missing\ operating\ system\0		\b, Microsoft Windows XP MBR
+#??>>>389	string	Invalid\ system\ disk		
+>>>>0x1B8	ulelong	>0				\b, Serial 0x%-.4x
+>300	string	Ung\201ltige\ Partitionstabelle
+#split string to avoid error: String too long
+>>328	string	Fehler\ beim\ Laden\ 	
+>>>346	string	des\ Betriebssystems	
+>>>>366	string	Betriebssystem\ nicht\ vorhanden	\b, Microsoft Windows XP MBR (german)
+>>>>>0x1B8	ulelong	>0				\b, Serial 0x%-.4x
+#>0x145	string	Default:\ F				\b, FREE-DOS MBR
+#>0x14B	string	Default:\ F				\b, FREE-DOS 1.0 MBR
+>0x145	search/7	Default:\ F			\b, FREE-DOS MBR
+#>>313		string	F0\ .\ .\ .			
+#>>>322		string	disk\ 1				
+#>>>>382	string	FAT3				
+>64	string	no\ active\ partition\ found	
+>>96	string	read\ error\ while\ reading\ drive	\b, FREE-DOS Beta 0.9 MBR
+# Ranish Partition Manager http://www.ranish.com/part/
+>387	search/4	\0\ Error!\r			
+>>378	search/7	Virus! 				
+>>>397	search/4	Booting\ 			
+>>>>408	search/4	HD1/\0	 			\b, Ranish MBR (
+>>>>>416	string	Writing\ changes...		\b2.37
+>>>>>>438	ubyte		x			\b,0x%x dots
+>>>>>>440	ubyte		>0			\b,virus check
+>>>>>>441	ubyte		>0			\b,partition %c
+#2.38,2.42,2.44
+>>>>>416	string	!Writing\ changes...		\b
+>>>>>>418	ubyte	1				\bvirus check,
+>>>>>>419	ubyte	x				\b0x%x seconds
+>>>>>>420	ubyte&0x0F	>0			\b,partition
+>>>>>>>420	ubyte&0x0F	<5			\b %x
+>>>>>>>420	ubyte&0x0F	0Xf			\b ask
+>>>>>420	ubyte		x			\b)
+#
+>271	string	Operating\ system\ loading 		
+>>296	string	error\r					\b, SYSLINUX MBR (2.10)
+# http://www.acronis.de/
+>362	string	MBR\ Error\ \0\r			
+>>376	string	ress\ any\ key\ to\ 			
+>>>392	string	boot\ from\ floppy...\0			\b, Acronis MBR
+# added by Joerg Jenderek
+# http://www.visopsys.org/
+# http://partitionlogic.org.uk/
+>309	string	No\ bootable\ partition\ found\r	
+>>339	string	I/O\ Error\ reading\ boot\ sector\r	\b, Visopsys MBR
+>349	string	No\ bootable\ partition\ found\r	
+>>379	string	I/O\ Error\ reading\ boot\ sector\r	\b, simple Visopsys MBR
+# bootloader, bootmanager
+>0x40	string	SBML				
+# label with 11 characters of FAT 12 bit filesystem
+>>43	string	SMART\ BTMGR			
+>>>430	string	SBMK\ Bad!\r			\b, Smart Boot Manager
+# OEM-ID not always "SBM"
+#>>>>3	strings	SBM				
+>>>>6	string	>\0                             \b, version %s
+>382	string	XOSLLOADXCF			\b, eXtended Operating System Loader
+>6	string	LILO				\b, LInux i386 boot LOader
+>>120	string	LILO				\b, version 22.3.4 SuSe
+>>172	string	LILO				\b, version 22.5.8 Debian
+# updated by Joerg Jenderek at Oct 2008
+# variables according to grub-0.97/stage1/stage1.S or
+# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
+# usual values are marked with comments to get only informations of strange GRUB loaders
+>342		search/60	\0Geom\0	
+#>0		ulelong		x		%x=0x009048EB ,	0x2a9048EB  0
+>>0x41		ubyte		<2		
+>>>0x3E		ubyte		>2		\b; GRand Unified Bootloader
+# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 
+>>>>0x3E	ubyte		x		\b, stage1 version 0x%x
+#If it is 0xFF, use a drive passed by BIOS
+>>>>0x40	ubyte		<0xFF		\b, boot drive 0x%x
+# in most case 0,1,0x2e for GRUB 0.5.95
+>>>>0x41	ubyte		>0		\b, LBA flag 0x%x
+>>>>0x42	uleshort	<0x8000		\b, stage2 address 0x%x
+#>>>>0x42	uleshort	=0x8000		\b, stage2 address 0x%x (usual)
+>>>>0x42	uleshort	>0x8000		\b, stage2 address 0x%x
+#>>>>0x44	ulelong		=1		\b, 1st sector stage2 0x%x (default)
+>>>>0x44	ulelong		>1		\b, 1st sector stage2 0x%x
+>>>>0x48	uleshort	<0x800		\b, stage2 segment 0x%x
+#>>>>0x48	uleshort	=0x800		\b, stage2 segment 0x%x (usual)
+>>>>0x48	uleshort	>0x800		\b, stage2 segment 0x%x
+>>>>402		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>394	string	stage1			\b, GRUB version 0.5.95
+>>>>382		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>376	string	GRUB\ \0		\b, GRUB version 0.93 or 1.94
+>>>>383		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>377	string	GRUB\ \0		\b, GRUB version 0.94
+>>>>385		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>379	string	GRUB\ \0		\b, GRUB version 0.95 or 0.96
+>>>>391		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>>385	string	GRUB\ \0		\b, GRUB version 0.97
+#unkown version
+>>>343		string	Geom\0Read\0\ Error\0	
+>>>>321		string	Loading\ stage1.5	\b, GRUB version x.y
+>>>380		string	Geom\0Hard\ Disk\0Read\0\ Error\0
+>>>>374		string	GRUB\ \0		\b, GRUB version n.m
+# http://syslinux.zytor.com/
+>478	string	Boot\ failed\r			
+>>495	string	LDLINUX\ SYS			\b, SYSLINUX bootloader (1.62)
+>480	string	Boot\ failed\r			
+>>495	string	LDLINUX\ SYS			\b, SYSLINUX bootloader (2.06 or 2.11)
+>484	string	Boot\ error\r			\b, SYSLINUX bootloader (3.11)
+>395	string	chksum\0\ ERROR!\0		\b, Gujin bootloader
+# http://www.bcdwb.de/bcdw/index_e.htm
+>3	string	BCDL				
+>>498	string	BCDL\ \ \ \ BIN			\b, Bootable CD Loader (1.50Z)
+# mbr partition table entries
+# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs
+>3			string		!MS
+>>3			string		!SYSLINUX
+>>>3			string		!MTOOL
+>>>>3			string		!NEWLDR
+>>>>>5			string		!DOS
+# not FAT (32 bit)
+>>>>>>82		string		!FAT32
+#not Linux kernel
+>>>>>>>514		string		!HdrS
+#not BeOS
+>>>>>>>>422		string		!Be\ Boot\ Loader
+# active flag 0 or 0x80 and type > 0
+>>>>>>>>>446		ubyte		<0x81	
+>>>>>>>>>>446		ubyte&0x7F	0	
+>>>>>>>>>>>450		ubyte		>0	\b; partition 1: ID=0x%x
+>>>>>>>>>>>>446		ubyte		0x80	\b, active
+>>>>>>>>>>>>447		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>448		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>448		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>454		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>458		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>462		ubyte		<0x81	
+>>>>>>>>>>462		ubyte&0x7F	0		
+>>>>>>>>>>>466		ubyte		>0	\b; partition 2: ID=0x%x
+>>>>>>>>>>>>462		ubyte		0x80	\b, active
+>>>>>>>>>>>>463		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>464		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>464		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>470		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>474		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>478		ubyte		<0x81		
+>>>>>>>>>>478		ubyte&0x7F	0		
+>>>>>>>>>>>482		ubyte		>0	\b; partition 3: ID=0x%x
+>>>>>>>>>>>>478		ubyte		0x80	\b, active
+>>>>>>>>>>>>479		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>480		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>481		ubyte		x	\b, start C2S: 0x%x
+#>>>>>>>>>>>>480		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>486		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>490		ulelong		x	\b, %u sectors
+#
+>>>>>>>>>494		ubyte		<0x81	
+>>>>>>>>>>494		ubyte&0x7F	0		
+>>>>>>>>>>>498		ubyte		>0	\b; partition 4: ID=0x%x
+>>>>>>>>>>>>494		ubyte		0x80	\b, active
+>>>>>>>>>>>>495		ubyte		x	\b, starthead %u
+#>>>>>>>>>>>>496		ubyte		x	\b, start C_S: 0x%x
+#>>>>>>>>>>>>496		ubeshort&1023	x	\b, startcylinder? %d
+>>>>>>>>>>>>502		ulelong		x	\b, startsector %u
+>>>>>>>>>>>>506		ulelong		x	\b, %u sectors
+# mbr partition table entries end
+# http://www.acronis.de/
+#FAT label=ACRONIS\ SZ
+#OEM-ID=BOOTWIZ0
+>442	string	Non-system\ disk,\ 	
+>>459	string	press\ any\ key...\x7\0		\b, Acronis Startup Recovery Loader
+# DOS names like F11.SYS are 8 right space padded bytes+3 bytes
+>>>477		ubyte&0xDF	>0		
+>>>>477		string		x 		\b %-.3s
+>>>>>480	ubyte&0xDF	>0		
+>>>>>>480	string		x 		\b%-.5s
+>>>>485		ubyte&0xDF	>0		
+>>>>>485	string		x 		\b.%-.3s
+#
+>185	string	FDBOOT\ Version\ 			
+>>204	string	\rNo\ Systemdisk.\ 			
+>>>220	string	Booting\ from\ harddisk.\n\r		
+>>>245	string	Cannot\ load\ from\ harddisk.\n\r	
+>>>>273 string	Insert\ Systemdisk\ 			
+>>>>>291 string and\ press\ any\ key.\n\r		\b, FDBOOT harddisk Bootloader
+>>>>>>200 string	>\0                             \b, version %-3s
+>242	string	Bootsector\ from\ C.H.\ Hochst\204	
+>>278	string	No\ Systemdisk.\ 			
+>>>293	string	Booting\ from\ harddisk.\n\r		
+>>>441	string	Cannot\ load\ from\ harddisk.\n\r	
+>>>>469 string	Insert\ Systemdisk\ 			
+>>>>>487 string and\ press\ any\ key.\n\r		\b, WinImage harddisk Bootloader
+>>>>>>209 string	>\0                             \b, version %-4.4s
+>(1.b+2)	ubyte		0xe			
+>>(1.b+3)	ubyte		0x1f			
+>>>(1.b+4)	ubyte		0xbe			
+>>>>(1.b+5)	ubyte		0x77			
+>>>>(1.b+6)	ubyte		0x7c			
+>>>>>(1.b+7)	ubyte		0xac			
+>>>>>>(1.b+8)	ubyte		0x22			
+>>>>>>>(1.b+9)	ubyte		0xc0			
+>>>>>>>>(1.b+10)	ubyte	0x74			
+>>>>>>>>>(1.b+11)	ubyte	0xb			
+>>>>>>>>>>(1.b+12)	ubyte	0x56			
+>>>>>>>>>>(1.b+13)	ubyte	0xb4			\b, mkdosfs boot message display
+>214	string	Please\ try\ to\ install\ FreeDOS\ 	\b, DOS Emulator boot message display
+#>>244	string	from\ dosemu-freedos-*-bin.tgz\r	
+#>>>170	string	Sorry,\ could\ not\ load\ an\ 		
+#>>>>195	string	operating\ system.\r\n		
+#
+>103	string	This\ is\ not\ a\ bootable\ disk.\ 	
+>>132	string	Please\ insert\ a\ bootable\ 		
+>>>157	string	floppy\ and\r\n				
+>>>>169	string	press\ any\ key\ to\ try\ again...\r	\b, FREE-DOS message display
+#
+>66	string	Solaris\ Boot\ Sector    		
+>>99	string	Incomplete\ MDBoot\ load.		
+>>>89	string	Version 				\b, Sun Solaris Bootloader
+>>>>97	byte	x					version %c
+#
+>408	string	OS/2\ !!\ SYS01475\r\0			
+>>429	string	OS/2\ !!\ SYS02025\r\0			
+>>>450	string	OS/2\ !!\ SYS02027\r\0			
+>>>469	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp bootloader
+#
+>409	string	OS/2\ !!\ SYS01475\r\0			
+>>430	string	OS/2\ !!\ SYS02025\r\0			
+>>>451	string	OS/2\ !!\ SYS02027\r\0			
+>>>470	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp Bootloader
+>112		string	This\ disk\ is\ not\ bootable\r			
+>>142		string	If\ you\ wish\ to\ make\ it\ bootable		
+>>>176		string	run\ the\ DOS\ program\ SYS\  			
+>>>200		string	after\ the\r					
+>>>>216		string	system\ has\ been\ loaded\r\n			
+>>>>>242	string	Please\ insert\ a\ DOS\ diskette\ 		
+>>>>>271	string	into\r\n\ the\ drive\ and\ 			
+>>>>>>292	string	strike\ any\ key...\0		\b, IBM OS/2 Warp message display
+# XP
+>430	string	NTLDR\ is\ missing\xFF\r\n		
+>>449	string	Disk\ error\xFF\r\n			
+>>>462	string	Press\ any\ key\ to\ restart\r		\b, Microsoft Windows XP Bootloader
+# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+#
+>430	string	NTLDR\ nicht\ gefunden\xFF\r\n		
+>>453	string	Datentr\204gerfehler\xFF\r\n		
+>>>473	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (german)
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+# offset variant
+>>>>379	string	\0					
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+#
+>430	string	NTLDR\ fehlt\xFF\r\n			
+>>444	string	Datentr\204gerfehler\xFF\r\n		
+>>>464	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (2.german)
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+# variant
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+#
+>430	string	NTLDR\ fehlt\xFF\r\n			
+>>444	string	Medienfehler\xFF\r\n			
+>>>459	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (3.german)
+>>>>371		ubyte		>0x20			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+# variant
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+>430	string	Datentr\204ger\ entfernen\xFF\r\n	
+>>454	string	Medienfehler\xFF\r\n			
+>>>469	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (4.german)
+>>>>379		string		\0			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+# variant
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+
+#>3	string	NTFS\ \ \ \ 				
+>389	string	Fehler\ beim\ Lesen\ 
+>>407	string	des\ Datentr\204gers
+>>>426	string	NTLDR\ fehlt				
+>>>>440	string	NTLDR\ ist\ komprimiert
+>>>>>464 string	Neustart\ mit\ Strg+Alt+Entf\r		\b, Microsoft Windows XP Bootloader NTFS (german)
+#>3	string	NTFS\ \ \ \ 				
+>313	string	A\ disk\ read\ error\ occurred.\r
+>>345	string	A\ kernel\ file\ is\ missing\ 	
+>>>370	string	from\ the\ disk.\r		
+>>>>484	string	NTLDR\ is\ compressed		
+>>>>>429 string	Insert\ a\ system\ diskette\ 	
+>>>>>>454 string and\ restart\r\nthe\ system.\r		\b, Microsoft Windows XP Bootloader NTFS
+# DOS loader variants different languages,offsets
+>472	ubyte&0xDF	>0
+>>389	string	Invalid\ system\ disk\xFF\r\n		
+>>>411	string	Disk\ I/O\ error			
+>>>>428	string	Replace\ the\ disk,\ and\ 		
+>>>>>455 string	press\ any\ key				\b, Microsoft Windows 98 Bootloader
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>>>479 string		x 			\b%-.1s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>390	string	Invalid\ system\ disk\xFF\r\n		
+>>>412	string	Disk\ I/O\ error\xFF\r\n		
+>>>>429	string	Replace\ the\ disk,\ and\ 		
+>>>>>451 string	then\ press\ any\ key\r			\b, Microsoft Windows 98 Bootloader
+>>388	string	Ungueltiges\ System\ \xFF\r\n		
+>>>410	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>427	string	Datentraeger\ wechseln\ und\ 		
+>>>>>453 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (german)
+#WINBOOT.SYS only not spaces (0xDF)
+>>>>>>497	ubyte&0xDF	>0			
+>>>>>>>497	string		x 			%-.5s
+>>>>>>>>502	ubyte&0xDF	>0			
+>>>>>>>>>502	string		x 			\b%-.1s
+>>>>>>>>>>503	ubyte&0xDF	>0			
+>>>>>>>>>>>503	string		x 			\b%-.1s
+>>>>>>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>>>>>>504 string		x 			\b%-.1s
+>>>>>>505	ubyte&0xDF	>0			
+>>>>>>>505	string		x 			\b.%-.3s
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			or
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>>>479 string		x 			\b%-.1s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>390	string	Ungueltiges\ System\ \xFF\r\n		
+>>>412	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>429	string	Datentraeger\ wechseln\ und\ 		
+>>>>>455 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (German)
+#WINBOOT.SYS only not spaces (0xDF)
+>>>>>>497	ubyte&0xDF	>0			
+>>>>>>>497	string		x 			%-.7s
+>>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>>504	string		x 			\b%-.1s
+>>>>>>505	ubyte&0xDF	>0			
+>>>>>>>505	string		x 			\b.%-.3s
+#IO.SYS
+>>>>>>472	ubyte&0xDF	>0			or
+>>>>>>>472	string		x 			\b %-.2s
+>>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>>474	string		x 			\b%-.6s
+>>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>>480	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>>>488	string		x 			\b%-.3s
+>>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>>491	string		x 			\b.%-.3s
+#
+>>389	string	Ungueltiges\ System\ \xFF\r\n		
+>>>411	string	E/A-Fehler\ \ \ \ \xFF\r\n		
+>>>>428	string	Datentraeger\ wechseln\ und\ 		
+>>>>>454 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
+# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
+>>>>>>472	string		x 			%-.2s
+>>>>>>>474	ubyte&0xDF	>0			
+>>>>>>>>474	string		x 			\b%-.5s
+>>>>>>>>479	ubyte&0xDF	>0			
+>>>>>>>>>479	string		x 			\b%-.1s
+>>>>>>480	ubyte&0xDF	>0			
+>>>>>>>480	string		x 			\b.%-.3s
+>>>>>>483	ubyte&0xDF	>0			\b+
+>>>>>>>483	string		x 			\b%-.5s
+>>>>>>>488	ubyte&0xDF	>0			
+>>>>>>>>488	string		x 			\b%-.2s
+>>>>>>>>490	ubyte&0xDF	>0			
+>>>>>>>>>490	string		x 			\b%-.1s
+>>>>>>>491	ubyte&0xDF	>0			
+>>>>>>>>491	string		x 			\b.%-.3s
+>479	ubyte&0xDF	>0
+>>416	string	Kein\ System\ oder\ 			
+>>>433	string	Laufwerksfehler				
+>>>>450	string	Wechseln\ und\ Taste\ dr\201cken	\b, Microsoft DOS Bootloader (german)
+#IO.SYS
+>>>>>479	string		x 			\b %-.2s
+>>>>>>481	ubyte&0xDF	>0			
+>>>>>>>481	string		x 			\b%-.6s
+>>>>>487	ubyte&0xDF	>0			
+>>>>>>487	string		x 			\b.%-.3s
+#MSDOS.SYS
+>>>>>>490	ubyte&0xDF	>0			\b+
+>>>>>>>490	string		x 			\b%-.5s
+>>>>>>>>495	ubyte&0xDF	>0			
+>>>>>>>>>495	string		x 			\b%-.3s
+>>>>>>>498	ubyte&0xDF	>0			
+>>>>>>>>498	string		x 			\b.%-.3s
+#
+>376	search/41	Non-System\ disk\ or\ 		
+>>395	search/41	disk\ error\r			
+>>>407	search/41	Replace\ and\ 			
+>>>>419	search/41	press\ 				\b,
+>>>>419	search/41	strike\ 			\b, old
+>>>>426	search/41	any\ key\ when\ ready\r		MS or PC-DOS bootloader
+#449			Disk\ Boot\ failure\r		MS 3.21
+#466			Boot\ Failure\r			MS 3.30
+>>>>>468 search/18	\0				
+#IO.SYS,IBMBIO.COM
+>>>>>>&0	string		x 			\b %-.2s
+>>>>>>>&-20	ubyte&0xDF	>0			
+>>>>>>>>&-1	string		x 			\b%-.4s
+>>>>>>>>>&-16	ubyte&0xDF	>0			
+>>>>>>>>>>&-1	string		x 			\b%-.2s
+>>>>>>&8	ubyte&0xDF	>0			\b.
+>>>>>>>&-1	string		x 			\b%-.3s
+#MSDOS.SYS,IBMDOS.COM
+>>>>>>&11	ubyte&0xDF	>0			\b+
+>>>>>>>&-1	string		x 			\b%-.5s
+>>>>>>>>&-6	ubyte&0xDF	>0			
+>>>>>>>>>&-1	string		x 			\b%-.1s
+>>>>>>>>>>&-5	ubyte&0xDF	>0			
+>>>>>>>>>>>&-1	string		x 			\b%-.2s
+>>>>>>>&7	ubyte&0xDF	>0			\b.
+>>>>>>>>&-1	string		x 			\b%-.3s
+>441	string	Cannot\ load\ from\ harddisk.\n\r
+>>469	string	Insert\ Systemdisk\ 			
+>>>487	string	and\ press\ any\ key.\n\r		\b, MS (2.11) DOS bootloader
+#>43	string	\224R-LOADER\ \ SYS			=label					
+>54	string	SYS
+>>324	string	VASKK
+>>>495	string	NEWLDR\0				\b, DR-DOS Bootloader (LOADER.SYS)
+#
+>98	string	Press\ a\ key\ to\ retry\0\r		
+>>120	string	Cannot\ find\ file\ \0\r		
+>>>139	string	Disk\ read\ error\0\r			
+>>>>156	string	Loading\ ...\0				\b, DR-DOS (3.41) Bootloader
+#DRBIOS.SYS
+>>>>>44		ubyte&0xDF	>0			
+>>>>>>44	string		x			\b %-.6s
+>>>>>>>50	ubyte&0xDF	>0			
+>>>>>>>>50	string		x 			\b%-.2s
+>>>>>>52	ubyte&0xDF	>0			
+>>>>>>>52	string		x 			\b.%-.3s
+#
+>70	string	IBMBIO\ \ COM				
+>>472	string	Cannot\ load\ DOS!\ 			
+>>>489	string	Any\ key\ to\ retry			\b, DR-DOS Bootloader
+>>471	string	Cannot\ load\ DOS\ 			
+>>487	string	press\ key\ to\ retry			\b, Open-DOS Bootloader
+#??
+>444	string	KERNEL\ \ SYS					
+>>314	string	BOOT\ error!				\b, FREE-DOS Bootloader
+>499	string	KERNEL\ \ SYS				
+>>305	string	BOOT\ err!\0				\b, Free-DOS Bootloader
+>449	string	KERNEL\ \ SYS				
+>>319	string	BOOT\ error!				\b, FREE-DOS 0.5 Bootloader
+#
+>449	string	Loading\ FreeDOS			
+>>0x1AF		ulelong		>0			\b, FREE-DOS 0.95,1.0 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+#
+>331	string	Error!.0				\b, FREE-DOS 1.0 bootloader
+#
+>125	string	Loading\ FreeDOS...\r			
+>>311	string	BOOT\ error!\r				\b, FREE-DOS bootloader
+>>>441		ubyte&0xDF	>0			
+>>>>441		string		x 			\b %-.6s
+>>>>>447	ubyte&0xDF	>0			
+>>>>>>447	string		x 			\b%-.1s
+>>>>>>>448	ubyte&0xDF	>0			
+>>>>>>>>448	string		x 			\b%-.1s
+>>>>449		ubyte&0xDF	>0			
+>>>>>449	string		x 			\b.%-.3s
+>124	string	FreeDOS\0				
+>>331	string	\ err\0					\b, FREE-DOS BETa 0.9 Bootloader
+# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>>333	string	\ err\0					\b, FREE-DOS BEta 0.9 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>>334	string	\ err\0					\b, FREE-DOS Beta 0.9 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+>336	string	Error!\ 				
+>>343	string	Hit\ a\ key\ to\ reboot.		\b, FREE-DOS Beta 0.9sr1 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+# added by Joerg Jenderek
+# http://www.visopsys.org/
+# http://partitionlogic.org.uk/
+# OEM-ID=Visopsys
+>478		ulelong	0					
+>>(1.b+326)	string	I/O\ Error\ reading\ 			
+>>>(1.b+344)	string	Visopsys\ loader\r			
+>>>>(1.b+361)	string	Press\ any\ key\ to\ continue.\r	\b, Visopsys loader
+# http://alexfru.chat.ru/epm.html#bootprog
+>494	ubyte	>0x4D					
+>>495	string	>E					
+>>>495	string	<S					
+#OEM-ID is not reliable
+>>>>3	string	BootProg				
+# It just looks for a program file name at the root directory
+# and loads corresponding file with following execution.
+# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
+>>>>499			ubyte&0xDF	>0		\b, COM/EXE Bootloader
+>>>>>499		string		x 		\b %-.1s
+>>>>>>500		ubyte&0xDF	>0		
+>>>>>>>500		string		x 		\b%-.1s
+>>>>>>>>501		ubyte&0xDF	>0		
+>>>>>>>>>501		string		x 		\b%-.1s
+>>>>>>>>>>502		ubyte&0xDF	>0		
+>>>>>>>>>>>502		string		x 		\b%-.1s
+>>>>>>>>>>>>503		ubyte&0xDF	>0		
+>>>>>>>>>>>>>503	string		x 		\b%-.1s
+>>>>>>>>>>>>>>504	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>504	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>505	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>505	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>>>506	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>>>506	string		x 		\b%-.1s
+#name extension
+>>>>>507		ubyte&0xDF	>0		\b.
+>>>>>>507		string		x 		\b%-.1s
+>>>>>>>508		ubyte&0xDF	>0		
+>>>>>>>>508		string		x 		\b%-.1s
+>>>>>>>>>509		ubyte&0xDF	>0		
+>>>>>>>>>>509		string		x 		\b%-.1s
+#If the boot sector fails to read any other sector,
+#it prints a very short message ("RE") to the screen and hangs the computer.
+#If the boot sector fails to find needed program in the root directory,
+#it also hangs with another message ("NF").
+>>>>>492		string		RENF		\b, FAT (12 bit)
+>>>>>495		string		RENF		\b, FAT (16 bit)
+# http://alexfru.chat.ru/epm.html#bootprog
+>494	ubyte	>0x4D					
+>>495	string	>E					
+>>>495	string	<S					
+#OEM-ID is not reliable
+>>>>3	string	BootProg				
+# It just looks for a program file name at the root directory
+# and loads corresponding file with following execution.
+# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
+>>>>499			ubyte&0xDF	>0		\b, COM/EXE Bootloader
+>>>>>499		string		x 		\b %-.1s
+>>>>>>500		ubyte&0xDF	>0		
+>>>>>>>500		string		x 		\b%-.1s
+>>>>>>>>501		ubyte&0xDF	>0		
+>>>>>>>>>501		string		x 		\b%-.1s
+>>>>>>>>>>502		ubyte&0xDF	>0		
+>>>>>>>>>>>502		string		x 		\b%-.1s
+>>>>>>>>>>>>503		ubyte&0xDF	>0		
+>>>>>>>>>>>>>503	string		x 		\b%-.1s
+>>>>>>>>>>>>>>504	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>504	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>505	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>505	string		x 		\b%-.1s
+>>>>>>>>>>>>>>>>>>506	ubyte&0xDF	>0		
+>>>>>>>>>>>>>>>>>>>506	string		x 		\b%-.1s
+#name extension
+>>>>>507		ubyte&0xDF	>0		\b.
+>>>>>>507		string		x 		\b%-.1s
+>>>>>>>508		ubyte&0xDF	>0		
+>>>>>>>>508		string		x 		\b%-.1s
+>>>>>>>>>509		ubyte&0xDF	>0		
+>>>>>>>>>>509		string		x 		\b%-.1s
+#If the boot sector fails to read any other sector,
+#it prints a very short message ("RE") to the screen and hangs the computer.
+#If the boot sector fails to find needed program in the root directory,
+#it also hangs with another message ("NF").
+>>>>>492		string		RENF		\b, FAT (12 bit)
+>>>>>495		string		RENF		\b, FAT (16 bit)
+# x86 bootloader end
+# updated by Joerg Jenderek at Sep 2007
+>3	ubyte	0			
+#no active flag
+>>446	ubyte	0			
+# partition 1 not empty
+>>>450	ubyte	>0			
+# partitions 3,4 empty
+>>>>482		ubyte	0			
+>>>>>498	ubyte	0			
+# partition 2 ID=0,5,15
+>>>>>>466	ubyte	<0x10			
+>>>>>>>466	ubyte	0x05			\b, extended partition table
+>>>>>>>466	ubyte	0x0F			\b, extended partition table (LBA)
+>>>>>>>466	ubyte	0x0			\b, extended partition table (last)	
+# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90
+# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD
+# older drives may use Near JuMP instruction E9 xx xx
+>0		lelong&0x009000EB	0x009000EB 
+>0		lelong&0x000000E9	0x000000E9 
+# minimal short forward jump found 03cx??
+# maximal short forward jump is 07fx
+>1		ubyte			<0xff	\b, code offset 0x%x
+# mtools-3.9.8/msdos.h
+# usual values are marked with comments to get only informations of strange FAT systems
+# valid sectorsize must be a power of 2 from 32 to 32768
+>>11		uleshort&0x000f	x		
+>>>11		uleshort	<32769		
+>>>>11		uleshort	>31		
+>>>>>21		ubyte&0xf0	0xF0		
+>>>>>>3		string		>\0		\b, OEM-ID "%8.8s"
+#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
+>>>>>>>8	string		IHC		\b cached by Windows 9M
+>>>>>>11	uleshort	>512		\b, Bytes/sector %u
+#>>>>>>11	uleshort	=512		\b, Bytes/sector %u=512 (usual)
+>>>>>>11	uleshort	<512		\b, Bytes/sector %u
+>>>>>>13	ubyte		>1		\b, sectors/cluster %u
+#>>>>>>13	ubyte		=1		\b, sectors/cluster %u (usual on Floppies)
+>>>>>>14	uleshort	>32		\b, reserved sectors %u
+#>>>>>>14	uleshort	=32		\b, reserved sectors %u (usual Fat32)
+#>>>>>>14	uleshort	>1		\b, reserved sectors %u
+#>>>>>>14	uleshort	=1		\b, reserved sectors %u (usual FAT12,FAT16)
+>>>>>>14	uleshort	<1		\b, reserved sectors %u
+>>>>>>16	ubyte		>2		\b, FATs %u
+#>>>>>>16	ubyte		=2		\b, FATs %u (usual)
+>>>>>>16	ubyte		=1		\b, FAT  %u
+>>>>>>16	ubyte		>0
+>>>>>>17	uleshort	>0		\b, root entries %u
+#>>>>>>17	uleshort	=0		\b, root entries %u=0 (usual Fat32)
+>>>>>>19	uleshort	>0		\b, sectors %u (volumes <=32 MB) 
+#>>>>>>19	uleshort	=0		\b, sectors %u=0 (usual Fat32)
+>>>>>>21	ubyte		>0xF0		\b, Media descriptor 0x%x
+#>>>>>>21	ubyte		=0xF0		\b, Media descriptor 0x%x (usual floppy)
+>>>>>>21	ubyte		<0xF0		\b, Media descriptor 0x%x
+>>>>>>22	uleshort	>0		\b, sectors/FAT %u
+#>>>>>>22	uleshort	=0		\b, sectors/FAT %u=0 (usual Fat32)
+>>>>>>26	ubyte		>2		\b, heads %u
+#>>>>>>26	ubyte		=2		\b, heads %u (usual floppy)
+>>>>>>26	ubyte		=1		\b, heads %u
+#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
+>>>>>>38	ubyte		!0x70		
+>>>>>>>28	ulelong		>0		\b, hidden sectors %u
+#>>>>>>>28	ulelong		=0		\b, hidden sectors %u (usual floppy)
+>>>>>>>32	ulelong		>0		\b, sectors %u (volumes > 32 MB) 
+#>>>>>>>32	ulelong		=0		\b, sectors %u (volumes > 32 MB)
+# FAT<32 specific 
+>>>>>>82	string		!FAT32
+#>>>>>>>36	ubyte		0x80		\b, physical drive 0x%x=0x80 (usual harddisk)
+#>>>>>>>36	ubyte		0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>36	ubyte		!0x80		
+>>>>>>>>36	ubyte		!0		\b, physical drive 0x%x
+>>>>>>>37	ubyte		>0		\b, reserved 0x%x
+#>>>>>>>37	ubyte		=0		\b, reserved 0x%x
+>>>>>>>38	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		=0x29
+>>>>>>>>39	ulelong		x		\b, serial number 0x%x
+>>>>>>>>43	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		=NO\ NAME	\b, unlabeled
+>>>>>>>54	string		FAT		\b, FAT
+>>>>>>>>54	string		FAT12		\b (12 bit)
+>>>>>>>>54	string		FAT16		\b (16 bit)
+# FAT32 specific
+>>>>>>82	string		FAT32		\b, FAT (32 bit)
+>>>>>>>36	ulelong		x		\b, sectors/FAT %u
+>>>>>>>40	uleshort	>0		\b, extension flags %u
+#>>>>>>>40	uleshort	=0		\b, extension flags %u
+>>>>>>>42	uleshort	>0		\b, fsVersion %u
+#>>>>>>>42	uleshort	=0		\b, fsVersion %u (usual)
+>>>>>>>44	ulelong		>2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=1		\b, rootdir cluster %u
+>>>>>>>48	uleshort	>1		\b, infoSector %u
+#>>>>>>>48	uleshort	=1		\b, infoSector %u (usual)
+>>>>>>>48	uleshort	<1		\b, infoSector %u
+>>>>>>>50	uleshort	>6		\b, Backup boot sector %u
+#>>>>>>>50	uleshort	=6		\b, Backup boot sector %u (usual) 
+>>>>>>>50	uleshort	<6		\b, Backup boot sector %u
+>>>>>>>54	ulelong		>0		\b, reserved1 0x%x
+>>>>>>>58	ulelong		>0		\b, reserved2 0x%x
+>>>>>>>62	ulelong		>0		\b, reserved3 0x%x
+# same structure as FAT1X 
+>>>>>>>64	ubyte		>0x80		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0x80		\b, physical drive 0x%x=80 (usual harddisk)
+>>>>>>>64	ubyte&0x7F	>0		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>65	ubyte		>0		\b, reserved 0x%x
+>>>>>>>66	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		=0x29
+>>>>>>>>67	ulelong		x		\b, serial number 0x%x
+>>>>>>>>71	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		=NO\ NAME	\b, unlabeled
+### FATs end
+>0x200	lelong	0x82564557		\b, BSD disklabel
+# FATX 
+0		string		FATX		FATX filesystem data
+
+
+# Minix filesystems - Juan Cespedes <cespedes at debian.org>
+0x410	leshort		0x137f
+!:strength / 2
+>0x402	beshort		< 100		Minix filesystem, V1, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x137f
+!:strength / 2
+>0x402	beshort		< 100		Minix filesystem, V1 (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x138f
+!:strength / 2
+>0x402	beshort		< 100		Minix filesystem, V1, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x138f
+!:strength / 2
+>0x402	beshort		< 100		Minix filesystem, V1, 30 char names (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x2468
+>0x402	beshort		< 100		Minix filesystem, V2, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x2468
+>0x402	beshort		< 100		Minix filesystem, V2 (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+
+0x410	leshort		0x2478
+>0x402	beshort		< 100		Minix filesystem, V2, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x2478
+>0x402	beshort		< 100		Minix filesystem, V2, 30 char names, %d zones
+>0x1e	string		minix		\b, bootable
+0x410	beshort		0x2478
+>0x402	beshort		!0		Minix filesystem, V2, 30 char names (big endian), %d zones
+>0x1e	string		minix		\b, bootable
+0x410	leshort		0x4d5a
+>0x402	beshort		!0		Minix filesystem, V3, %d zones
+>0x1e	string		minix		\b, bootable
+
+# romfs filesystems - Juan Cespedes <cespedes at debian.org>
+0	string		-rom1fs-	romfs filesystem, version 1
+>8	belong	x			%d bytes,
+>16	string	x			named %s.
+
+# netboot image - Juan Cespedes <cespedes at debian.org>
+0	lelong		0x1b031336L	Netboot image,
+>4	lelong&0xFFFFFF00	0
+>>4	lelong&0x100	0x000		mode 2
+>>4	lelong&0x100	0x100		mode 3
+>4	lelong&0xFFFFFF00	!0	unknown mode
+
+0x18b	string	OS/2	OS/2 Boot Manager
+
+# updated by Joerg Jenderek at Oct 2008!!
+# http://syslinux.zytor.com/iso.php
+0	ulelong	0x7c40eafa		isolinux Loader
+# http://syslinux.zytor.com/pxe.php
+0	ulelong	0x007c05ea		pxelinux Loader
+0	ulelong	0x60669c66		pxelinux Loader
+
+# added by Joerg Jenderek
+# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
+# grub-1.94/kern/i386/pc/startup.S
+# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
+# usual values are marked with comments to get only informations of strange GRUB loaders
+0x200	uleshort		0x70EA		
+# found only version 3.{1,2}
+>0x206		ubeshort	>0x0300		
+# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
+>>0x212 	ubyte		>0x29		
+>>>0x213 	ubyte		>0x29		
+# not iso9660_stage1_5
+#>>>0	ulelong&0x00BE5652	0x00BE5652	
+>>>>0x213 	ubyte		>0x29		GRand Unified Bootloader
+# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
+>>>>0x217 	ubyte		0xFF		stage1_5
+>>>>0x217 	ubyte		<0xFF		stage2
+>>>>0x206	ubyte		x		\b version %u
+>>>>0x207	ubyte		x		\b.%u
+# module_size for 1.94
+>>>>0x208	ulelong		<0xffffff	\b, installed partition %u
+#>>>>0x208	ulelong		=0xffffff	\b, %u (default)
+>>>>0x208	ulelong		>0xffffff	\b, installed partition %u
+# GRUB 0.5.95 unofficial
+>>>>0x20C	ulelong&0x2E300000 0x2E300000	
+# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs
+>>>>>0x20C	ubyte		x		\b, identifier 0x%x
+#>>>>>0x20D	ubyte		=0		\b, LBA flag 0x%x (default)
+>>>>>0x20D	ubyte		>0		\b, LBA flag 0x%x
+# GRUB version as string
+>>>>>0x20E 	string		>\0		\b, GRUB version %-s
+# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
+>>>>>>0x215 	ulong		0xffffffff	
+>>>>>>>0x219 	string		>\0		\b, configuration file %-s
+>>>>>>0x215 	ulong		!0xffffffff	
+>>>>>>>0x215 	string		>\0		\b, configuration file %-s
+# newer GRUB versions
+>>>>0x20C	ulelong&0x2E300000 !0x2E300000	
+##>>>>>0x20C	ulelong		=0		\b, saved entry %d (usual)
+>>>>>0x20C	ulelong		>0		\b, saved entry %d
+# for 1.94 contains kernel image size
+# for 0.93,0.94,0.96,0.97
+# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs	6=vstafs	7=jfs	8=xfs	9=iso9660	a=ufs2	
+>>>>>0x210	ubyte		x		\b, identifier 0x%x
+# The flag for LBA forcing is in most cases 0
+#>>>>>0x211	ubyte		=0		\b, LBA flag 0x%x (default)
+>>>>>0x211	ubyte		>0		\b, LBA flag 0x%x
+# GRUB version as string
+>>>>>0x212 	string		>\0		\b, GRUB version %-s
+# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
+>>>>>0x217 	ulong		0xffffffff	
+>>>>>>0x21b 	string		>\0		\b, configuration file %-s
+>>>>>0x217 	ulong		!0xffffffff	
+>>>>>>0x217 	string		>\0		\b, configuration file %-s
+
+9564	lelong		0x00011954	Unix Fast File system [v1] (little-endian),
+>8404	string		x		last mounted on %s,
+#>9504	ledate		x		last checked at %s,
+>8224	ledate		x		last written at %s,
+>8401	byte		x		clean flag %d,
+>8228	lelong		x		number of blocks %d,
+>8232	lelong		x		number of data blocks %d,
+>8236	lelong		x		number of cylinder groups %d,
+>8240	lelong		x		block size %d,
+>8244	lelong		x		fragment size %d,
+>8252	lelong		x		minimum percentage of free blocks %d,
+>8256	lelong		x		rotational delay %dms,
+>8260	lelong		x		disk rotational speed %drps,
+>8320	lelong		0		TIME optimization
+>8320	lelong		1		SPACE optimization
+
+42332	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	leqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	lequad		x		number of blocks %lld,
+>&-288	lequad		x		number of data blocks %lld,
+>&-1332	lelong		x		number of cylinder groups %d,
+>&-1328	lelong		x		block size %d,
+>&-1324	lelong		x		fragment size %d,
+>&-180	lelong		x		average file size %d,
+>&-176	lelong		x		average number of files in dir %d,
+>&-272	lequad		x		pending blocks to free %lld,
+>&-264	lelong		x		pending inodes to free %ld,
+>&-664	lequad		x		system-wide uuid %0llx,
+>&-1316	lelong		x		minimum percentage of free blocks %d,
+>&-1248	lelong		0		TIME optimization
+>&-1248	lelong		1		SPACE optimization
+
+66908	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	leqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	lequad		x		number of blocks %lld,
+>&-288	lequad		x		number of data blocks %lld,
+>&-1332	lelong		x		number of cylinder groups %d,
+>&-1328	lelong		x		block size %d,
+>&-1324	lelong		x		fragment size %d,
+>&-180	lelong		x		average file size %d,
+>&-176	lelong		x		average number of files in dir %d,
+>&-272	lequad		x		pending blocks to free %lld,
+>&-264	lelong		x		pending inodes to free %ld,
+>&-664	lequad		x		system-wide uuid %0llx,
+>&-1316	lelong		x		minimum percentage of free blocks %d,
+>&-1248	lelong		0		TIME optimization
+>&-1248	lelong		1		SPACE optimization
+
+9564	belong		0x00011954	Unix Fast File system [v1] (big-endian),
+>7168   belong		0x4c41424c	Apple UFS Volume
+>>7186  string		x		named %s,
+>>7176  belong		x		volume label version %d,
+>>7180  bedate		x		created on %s,
+>8404	string		x		last mounted on %s,
+#>9504	bedate		x		last checked at %s,
+>8224	bedate		x		last written at %s,
+>8401	byte		x		clean flag %d,
+>8228	belong		x		number of blocks %d,
+>8232	belong		x		number of data blocks %d,
+>8236	belong		x		number of cylinder groups %d,
+>8240	belong		x		block size %d,
+>8244	belong		x		fragment size %d,
+>8252	belong		x		minimum percentage of free blocks %d,
+>8256	belong		x		rotational delay %dms,
+>8260	belong		x		disk rotational speed %drps,
+>8320	belong		0		TIME optimization
+>8320	belong		1		SPACE optimization
+
+42332	belong		0x19540119	Unix Fast File system [v2] (big-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	beqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	bequad		x		number of blocks %lld,
+>&-288	bequad		x		number of data blocks %lld,
+>&-1332	belong		x		number of cylinder groups %d,
+>&-1328	belong		x		block size %d,
+>&-1324	belong		x		fragment size %d,
+>&-180	belong		x		average file size %d,
+>&-176	belong		x		average number of files in dir %d,
+>&-272	bequad		x		pending blocks to free %lld,
+>&-264	belong		x		pending inodes to free %ld,
+>&-664	bequad		x		system-wide uuid %0llx,
+>&-1316	belong		x		minimum percentage of free blocks %d,
+>&-1248	belong		0		TIME optimization
+>&-1248	belong		1		SPACE optimization
+
+66908	belong		0x19540119	Unix Fast File system [v2] (big-endian)
+>&-1164	string		x		last mounted on %s,
+>&-696	string		>\0		volume name %s,
+>&-304	beqldate	x		last written at %s,
+>&-1167	byte		x		clean flag %d,
+>&-1168	byte		x		readonly flag %d,
+>&-296	bequad		x		number of blocks %lld,
+>&-288	bequad		x		number of data blocks %lld,
+>&-1332	belong		x		number of cylinder groups %d,
+>&-1328	belong		x		block size %d,
+>&-1324	belong		x		fragment size %d,
+>&-180	belong		x		average file size %d,
+>&-176	belong		x		average number of files in dir %d,
+>&-272	bequad		x		pending blocks to free %lld,
+>&-264	belong		x		pending inodes to free %ld,
+>&-664	bequad		x		system-wide uuid %0llx,
+>&-1316	belong		x		minimum percentage of free blocks %d,
+>&-1248	belong		0		TIME optimization
+>&-1248	belong		1		SPACE optimization
+
+# ext2/ext3 filesystems - Andreas Dilger <adilger at dilger.ca>
+# ext4 filesystem - Eric Sandeen <sandeen at sandeen.net>
+0x438   leshort         0xEF53          Linux
+>0x44c  lelong          x               rev %d
+>0x43e  leshort         x               \b.%d
+# No journal?  ext2
+>0x45c  lelong          ^0x0000004      ext2 filesystem data
+>>0x43a leshort         ^0x0000001      (mounted or unclean)
+# Has a journal?  ext3 or ext4
+>0x45c  lelong          &0x0000004
+#  and small INCOMPAT?
+>>0x460 lelong          <0x0000040
+#   and small RO_COMPAT?
+>>>0x464 lelong         <0x0000008      ext3 filesystem data
+#   else large RO_COMPAT?
+>>>0x464 lelong         >0x0000007      ext4 filesystem data
+#  else large INCOMPAT?
+>>0x460 lelong          >0x000003f      ext4 filesystem data
+# General flags for any ext* fs
+>0x460  lelong          &0x0000004      (needs journal recovery)
+>0x43a  leshort         &0x0000002      (errors)
+# INCOMPAT flags
+>0x460  lelong          &0x0000001      (compressed)
+#>0x460 lelong          &0x0000002      (filetype)
+#>0x460 lelong          &0x0000010      (meta bg)
+>0x460  lelong          &0x0000040      (extents)
+>0x460  lelong          &0x0000080      (64bit)
+#>0x460 lelong          &0x0000100      (mmp)
+#>0x460 lelong          &0x0000200      (flex bg)
+# RO_INCOMPAT flags
+#>0x464 lelong          &0x0000001      (sparse super)
+>0x464  lelong          &0x0000002      (large files)
+>0x464  lelong          &0x0000008      (huge files)
+#>0x464 lelong          &0x0000010      (gdt checksum)
+#>0x464 lelong          &0x0000020      (many subdirs)
+#>0x463 lelong          &0x0000040      (extra isize)
+
+# SGI disk labels - Nathan Scott <nathans at debian.org>
+0	belong		0x0BE5A941	SGI disk label (volume header)
+
+# SGI XFS filesystem - Nathan Scott <nathans at debian.org>
+0	belong		0x58465342	SGI XFS filesystem data
+>0x4	belong		x		(blksz %d,
+>0x68	beshort		x		inosz %d,
+>0x64	beshort		^0x2004		v1 dirs)
+>0x64	beshort		&0x2004		v2 dirs)
+
+############################################################################
+# Minix-ST kernel floppy
+0x800	belong		0x46fc2700	Atari-ST Minix kernel image
+>19	string		\240\5\371\5\0\011\0\2\0	\b, 720k floppy
+>19	string		\320\2\370\5\0\011\0\1\0	\b, 360k floppy
+
+############################################################################
+# Hmmm, is this a better way of detecting _standard_ floppy images ?
+19	string		\320\2\360\3\0\011\0\1\0	DOS floppy 360k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\240\5\371\3\0\011\0\2\0	DOS floppy 720k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\100\013\360\011\0\022\0\2\0	DOS floppy 1440k
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+
+19	string		\240\5\371\5\0\011\0\2\0	DOS floppy 720k, IBM
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+19	string		\100\013\371\5\0\011\0\2\0	DOS floppy 1440k, mkdosfs
+>0x1FE	leshort		0xAA55		\b, x86 hard disk boot sector
+
+19	string		\320\2\370\5\0\011\0\1\0	Atari-ST floppy 360k
+19	string		\240\5\371\5\0\011\0\2\0	Atari-ST floppy 720k
+
+#  Valid media descriptor bytes for MS-DOS:
+#
+#     Byte   Capacity   Media Size and Type
+#     -------------------------------------------------
+#
+#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector
+#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector
+#     F9     720K       3.5-inch, 2-sided, 9-sector
+#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector
+#     FD     360K       5.25-inch, 2-sided, 9-sector
+#     FF     320K       5.25-inch, 2-sided, 8-sector
+#     FC     180K       5.25-inch, 1-sided, 9-sector
+#     FE     160K       5.25-inch, 1-sided, 8-sector
+#     FE     250K       8-inch, 1-sided, single-density
+#     FD     500K       8-inch, 2-sided, single-density
+#     FE     1.2 MB     8-inch, 2-sided, double-density
+#     F8     -----      Fixed disk 
+#
+#     FC     xxxK       Apricot 70x1x9 boot disk.
+#
+# Originally a bitmap:
+#  xxxxxxx0	Not two sided
+#  xxxxxxx1	Double sided
+#  xxxxxx0x	Not 8 SPT
+#  xxxxxx1x	8 SPT
+#  xxxxx0xx	Not Removable drive
+#  xxxxx1xx	Removable drive
+#  11111xxx	Must be one.
+#
+# But now it's rather random:
+#  111111xx	Low density disk
+#        00	SS, Not 8 SPT
+#        01	DS, Not 8 SPT
+#        10	SS, 8 SPT
+#        11	DS, 8 SPT
+#
+#  11111001	Double density 3� floppy disk, high density 5�
+#  11110000	High density 3� floppy disk
+#  11111000	Hard disk any format
+#
+
+# CDROM Filesystems
+# Modified for UDF by gerardo.cacciari at gmail.com
+32769	string    CD001
+!:mime	application/x-iso9660-image
+>38913	string   !NSR0      ISO 9660 CD-ROM filesystem data
+>38913	string    NSR0      UDF filesystem data
+>>38917	string    1         (version 1.0)
+>>38917	string    2         (version 1.5)
+>>38917	string    3         (version 2.0)
+>>38917	byte     >0x33      (unknown version, ID 0x%X)
+>>38917	byte     <0x31      (unknown version, ID 0x%X)
+# "application id" which appears to be used as a volume label
+>32808	string    >\0       '%s'
+>34816	string    \000CD001\001EL\ TORITO\ SPECIFICATION    (bootable)
+37633	string    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
+!:mime	application/x-iso9660-image
+32776	string    CDROM     High Sierra CD-ROM filesystem data
+
+# .cso files
+0    string    CISO	Compressed ISO CD image
+
+# cramfs filesystem - russell at coker.com.au
+0       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian
+>4      lelong  x size %lu
+>8      lelong  &1 version #2
+>8      lelong  &2 sorted_dirs
+>8      lelong  &4 hole_support
+>32     lelong  x CRC 0x%x,
+>36     lelong  x edition %lu,
+>40     lelong  x %lu blocks,
+>44     lelong  x %lu files
+
+0       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian
+>4      belong  x size %lu
+>8      belong  &1 version #2
+>8      belong  &2 sorted_dirs
+>8      belong  &4 hole_support
+>32     belong  x CRC 0x%x,
+>36     belong  x edition %lu,
+>40     belong  x %lu blocks,
+>44     belong  x %lu files
+
+# reiserfs - russell at coker.com.au
+0x10034		string	ReIsErFs	ReiserFS V3.5
+0x10034		string	ReIsEr2Fs	ReiserFS V3.6
+>0x1002c 	leshort	x		block size %d
+>0x10032	leshort	&2		(mounted or unclean)
+>0x10000	lelong	x		num blocks %d
+>0x10040	lelong	1		tea hash
+>0x10040	lelong	2		yura hash
+>0x10040	lelong	3		r5 hash
+
+# JFFS - russell at coker.com.au
+0	lelong	0x34383931	Linux Journalled Flash File system, little endian
+0	belong	0x34383931	Linux Journalled Flash File system, big endian
+
+# EST flat binary format (which isn't, but anyway)
+# From: Mark Brown <broonie at sirena.org.uk>
+0	string	ESTFBINR	EST flat binary
+
+# Aculab VoIP firmware
+# From: Mark Brown <broonie at sirena.org.uk>
+0	string	VoIP\ Startup\ and	Aculab VoIP firmware
+>35	string	x	format %s
+
+# From: Mark Brown <broonie at sirena.org.uk> [old]
+# From: Behan Webster <behanw at websterwood.com>
+0	belong	0x27051956	u-boot legacy uImage,
+>32	string	x		%s,
+>28	byte	0		Invalid os/
+>28	byte	1		OpenBSD/
+>28	byte	2		NetBSD/
+>28	byte	3		FreeBSD/
+>28	byte	4		4.4BSD/
+>28	byte	5		Linux/
+>28	byte	6		SVR4/
+>28	byte	7		Esix/
+>28	byte	8		Solaris/
+>28	byte	9		Irix/
+>28	byte	10		SCO/
+>28	byte	11		Dell/
+>28	byte	12		NCR/
+>28	byte	13		LynxOS/
+>28	byte	14		VxWorks/
+>28	byte	15		pSOS/
+>28	byte	16		QNX/
+>28	byte	17		Firmware/
+>28	byte	18		RTEMS/
+>28	byte	19		ARTOS/
+>28	byte	20		Unity OS/
+>28	byte	21		INTEGRITY/
+>29	byte	0		\bInvalid CPU,
+>29	byte	1		\bAlpha,
+>29	byte	2		\bARM,
+>29	byte	3		\bIntel x86,
+>29	byte	4		\bIA64,
+>29	byte	5		\bMIPS,
+>29	byte	6		\bMIPS 64-bit,
+>29	byte	7		\bPowerPC,
+>29	byte	8		\bIBM S390,
+>29	byte	9		\bSuperH,
+>29	byte	10		\bSparc,
+>29	byte	11		\bSparc 64-bit,
+>29	byte	12		\bM68K,
+>29	byte	13		\bNios-32,
+>29	byte	14		\bMicroBlaze,
+>29	byte	15		\bNios-II,
+>29	byte	16		\bBlackfin,
+>29	byte	17		\bAVR32,
+>29	byte	18		\bSTMicroelectronics ST200,
+>30	byte	0		Invalid Image
+>30	byte	1		Standalone Program
+>30	byte	2		OS Kernel Image
+>30	byte	3		RAMDisk Image
+>30	byte	4		Multi-File Image
+>30	byte	5		Firmware Image
+>30	byte	6		Script File
+>30	byte	7		Filesystem Image (any type)
+>30	byte	8		Binary Flat Device Tree BLOB
+>31	byte	0		(Not compressed),
+>31	byte	1		(gzip),
+>31	byte	2		(bzip2),
+>31	byte	3		(lzma),
+>12	belong	x		%d bytes,
+>8	bedate	x		%s,
+>16	belong	x		Load Address: 0x%08X,
+>20	belong	x		Entry Point: 0x%08X,
+>4	belong	x		Header CRC: 0x%08X,
+>24	belong	x		Data CRC: 0x%08X
+
+# JFFS2 file system
+0	leshort	0x1984		Linux old jffs2 filesystem data little endian
+0	leshort	0x1985		Linux jffs2 filesystem data little endian
+
+# Squashfs
+0	string	sqsh	Squashfs filesystem, big endian,
+>28	beshort	x	version %d.
+>30	beshort x	\b%d,
+>28	beshort <3
+>>8	belong	x	%d bytes,
+>28	beshort >2
+>>28 beshort <4
+>>>63	bequad x	%lld bytes,
+>>28 beshort >3
+>>>40	bequad x	%lld bytes,
+#>>67	belong	x	%d bytes,
+>4	belong	x	%d inodes,
+>28	beshort <2
+>>32	beshort	x	blocksize: %d bytes,
+>28	beshort >1
+>>28 beshort <4
+>>>51	belong	x	blocksize: %d bytes,
+>>28 beshort >3
+>>>12	belong	x	blocksize: %d bytes,
+>28 beshort <4
+>>39	bedate	x	created: %s
+>28 beshort >3
+>>8	bedate	x	created: %s
+0	string	hsqs	Squashfs filesystem, little endian,
+>28	leshort	x	version %d.
+>30	leshort	x	\b%d,
+>28	leshort <3
+>>8	lelong	x	%d bytes,
+>28	leshort >2
+>>28 leshort <4
+>>>63	lequad x	%lld bytes,
+>>28 leshort >3
+>>>40	lequad x	%lld bytes,
+#>>63	lelong	x	%d bytes,
+>4	lelong	x	%d inodes,
+>28	leshort <2
+>>32	leshort	x	blocksize: %d bytes,
+>28	leshort >1
+>>28 leshort <4
+>>>51	lelong	x	blocksize: %d bytes,
+>>28 leshort >3
+>>>12	lelong	x	blocksize: %d bytes,
+>28 leshort <4
+>>39	ledate	x	created: %s
+>28 leshort >3
+>>8	ledate	x	created: %s
+
+0	string		td\000		floppy image data (TeleDisk)
+
+# AFS Dump Magic
+# From: Ty Sarna <tsarna at sarna.org> 
+0       string                  \x01\xb3\xa1\x13\x22    AFS Dump
+>&0     belong                  x                       (v%d)
+>>&0    byte                    0x76
+>>>&0   belong                  x                       Vol %d,
+>>>>&0  byte                    0x6e
+>>>>>&0 string                  x                       %s
+>>>>>>&1        byte            0x74
+>>>>>>>&0       beshort         2
+>>>>>>>>&4      bedate          x                       on: %s
+>>>>>>>>&0      bedate          =0                      full dump
+>>>>>>>>&0      bedate          !0                      incremental since: %s
+
+#----------------------------------------------------------
+#delta ISO    Daniel Novotny (dnovotny at redhat.com)
+0	string  DISO	Delta ISO data
+>4	belong  x	version %d
+
+# VMS backup savesets - gerardo.cacciari at gmail.com
+#
+4            string  \x01\x00\x01\x00\x01\x00
+>(0.s+16)    string  \x01\x01
+>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data
+>>>40        lelong  x          (block size %d,
+>>>49        string  >\0        original name '%s',
+>>>2         short   1024       VAX generated)
+>>>2         short   2048       AXP generated)
+>>>2         short   4096       I64 generated)
+
+# Summary: Oracle Clustered Filesystem
+# Created by: Aaron Botsis <redhat at digitalmafia.org>
+8	string		OracleCFS	Oracle Clustered Filesystem,
+>4	long		x		rev %d
+>0	long		x		\b.%d,
+>560	string		x		label: %.64s,
+>136	string		x		mountpoint: %.128s
+
+# Summary: Oracle ASM tagged volume
+# Created by: Aaron Botsis <redhat at digitalmafia.org>
+32	string		ORCLDISK	Oracle ASM Volume,
+>40	string		x		Disk Name: %0.12s
+32	string		ORCLCLRD	Oracle ASM Volume (cleared),
+>40	string		x		Disk Name: %0.12s
+
+# Oracle Clustered Filesystem - Aaron Botsis <redhat at digitalmafia.org>
+8	string		OracleCFS	Oracle Clustered Filesystem,
+>4	long		x		rev %d
+>0	long		x		\b.%d,
+>560	string		x		label: %.64s,
+>136	string		x		mountpoint: %.128s
+
+# Oracle ASM tagged volume - Aaron Botsis <redhat at digitalmafia.org>
+32	string		ORCLDISK	Oracle ASM Volume,
+>40	string		x		Disk Name: %0.12s
+32	string		ORCLCLRD	Oracle ASM Volume (cleared),
+>40	string		x		Disk Name: %0.12s
+
+# Compaq/HP RILOE floppy image
+# From: Dirk Jagdmann <doj at cubic.org>
+0	string	CPQRFBLO	Compaq/HP RILOE floppy image
+
+#------------------------------------------------------------------------------
+# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari at gmail.com
+# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is
+# mapped to VBN 2 of [000000]INDEXF.SYS;1
+#
+1008    string          DECFILE11B      Files-11 On-Disk Structure
+>525    byte            x               Level %d
+>525    byte            x               (ODS-%d OpenVMS file system),
+>984    string          x               volume label is '%-12.12s'
+
+# From: Thomas Klausner <wiz at NetBSD.org>
+# http://filext.com/file-extension/DAA
+# describes the daa file format. The magic would be:
+0	string		DAA\x0\x0\x0\x0\x0	PowerISO Direct-Access-Archive
+
+# From Albert Cahalan <acahalan at gmail.com>
+# really le32 operation,destination,payloadsize (but quite predictable)
+# 01 00 00 00 00 00 00 c0 00 02 00 00
+0	string		\1\0\0\0\0\0\0\300\0\2\0\0	Marvell Libertas firmware
+
+# From Eric Sandeen
+# GFS2
+0x10000         belong          0x01161970      Linux
+>0x10018        belong          0x0000051d      GFS1 Filesystem
+>>0x10024        belong          x               (blocksize %d,
+>>0x10060        string          >\0             lockproto %s)
+>0x10018        belong          0x00000709      GFS2 Filesystem
+>>0x10024        belong          x               (blocksize %d,
+>>0x10060        string          >\0             lockproto %s)
+
+# BTRFS
+0x10040         string          _BHRfS_M        BTRFS Filesystem
+>0x1012b        string          >\0             (label "%s",
+>0x10090        lelong          x               sectorsize %d,
+>0x10094        lelong          x               nodesize %d,
+>0x10098        lelong          x               leafsize %d)
+
+
+# dvdisaster's .ecc
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string	*dvdisaster*	dvdisaster error correction file
+
+# xfs metadump image 
+# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
+# but can we do the << ?  For now it's always 512 (0x200) anyway.
+0	string XFSM
+>0x200	string XFSB	XFS filesystem metadump image
+
+
+#------------------------------------------------------------------------------
+# $File: flash,v 1.9 2009/11/08 01:30:01 christos Exp $
+# flash:	file(1) magic for Macromedia Flash file format
+#
+# See
+#
+#	http://www.macromedia.com/software/flash/open/
+#
+0	string		FWS		Macromedia Flash data,
+>3	byte		x		version %d
+!:mime	application/x-shockwave-flash
+0	string		CWS		Macromedia Flash data (compressed),
+!:mime	application/x-shockwave-flash
+>3	byte		x		version %d
+# From: Cal Peake <cp at absolutedigital.net>
+0	string		FLV		Macromedia Flash Video
+!:mime	video/x-flv
+
+#
+# Yosu Gomez
+0       string AGD2\xbe\xb8\xbb\xcd\x00 Macromedia Freehand 7 Document
+0       string AGD3\xbe\xb8\xbb\xcc\x00 Macromedia Freehand 8 Document
+# From Dave Wilson
+0	string AGD4\xbe\xb8\xbb\xcb\x00	Macromedia Freehand 9 Document
+
+#------------------------------------------------------------------------------
+# $File: fonts,v 1.21 2009/12/06 23:17:52 rrt Exp $
+# fonts:  file(1) magic for font data
+#
+0	search/1	FONT		ASCII vfont text
+0	short		0436		Berkeley vfont data
+0	short		017001		byte-swapped Berkeley vfont data
+
+# PostScript fonts (must precede "printer" entries), quinlan at yggdrasil.com
+0	string		%!PS-AdobeFont-1.	PostScript Type 1 font text
+>20	string		>\0			(%s)
+6	string		%!PS-AdobeFont-1.	PostScript Type 1 font program data
+0	string		%!FontType1	PostScript Type 1 font program data
+6	string		%!FontType1	PostScript Type 1 font program data
+0	string		%!PS-Adobe-3.0\ Resource-Font	PostScript Type 1 font text
+
+# X11 font files in SNF (Server Natural Format) format
+0	belong		00000004		X11 SNF font data, MSB first
+0	lelong		00000004		X11 SNF font data, LSB first
+
+# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan at yggdrasil.com)
+0	search/1	STARTFONT\ 		X11 BDF font text
+
+# X11 fonts, from Daniel Quinlan (quinlan at yggdrasil.com)
+# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
+0	string		\001fcp			X11 Portable Compiled Font data
+>12	byte		0x02			\b, LSB first
+>12	byte		0x0a			\b, MSB first
+0	string		D1.0\015		X11 Speedo font data
+
+#------------------------------------------------------------------------------
+# FIGlet fonts and controlfiles
+# From figmagic supplied with Figlet version 2.2
+# "David E. O'Brien" <obrien at FreeBSD.ORG>
+0	string		flf		FIGlet font
+>3	string		>2a		version %-2.2s
+0	string		flc		FIGlet controlfile
+>3	string		>2a		version %-2.2s
+
+# libGrx graphics lib fonts, from Albert Cahalan (acahalan at cs.uml.edu)
+# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
+0	belong		0x14025919	libGrx font data,
+>8	leshort		x		%dx
+>10	leshort		x		\b%d
+>40	string		x		%s
+# Misc. DOS VGA fonts, from Albert Cahalan (acahalan at cs.uml.edu)
+0	belong		0xff464f4e	DOS code page font data collection
+7	belong		0x00454741	DOS code page font data
+7	belong		0x00564944	DOS code page font data (from Linux?)
+4098	string		DOSFONT		DOSFONT2 encrypted font data
+
+# downloadable fonts for browser (prints type) anthon at mnt.org
+0	string		PFR1		PFR1 font
+>102	string		>0		\b: %s
+
+# True Type fonts
+0	string	\000\001\000\000\000	TrueType font data
+!:mime application/x-font-ttf
+
+0	string		\007\001\001\000Copyright\ (c)\ 199	Adobe Multiple Master font
+0	string		\012\001\001\000Copyright\ (c)\ 199	Adobe Multiple Master font
+
+0	string		ttcf		TrueType font collection data
+
+# Opentype font data from Avi Bercovich
+0	string		OTTO		OpenType font data
+!:mime application/vnd.ms-opentype
+
+# Gürkan Sengün <gurkan at linuks.mine.nu>, www.linuks.mine.nu 
+0	string		SplineFontDB:	Spline Font Database 
+!:mime application/vnd.font-fontforge-sfd
+>14	string		x		version %s
+
+#------------------------------------------------------------------------------
+# $File: fortran,v 1.6 2009/09/19 16:28:09 christos Exp $
+# FORTRAN source
+0	regex/100	\^[Cc][\ \t]	FORTRAN program
+!:mime	text/x-fortran
+
+#------------------------------------------------------------------------------
+# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $
+# frame:  file(1) magic for FrameMaker files
+#
+# This stuff came on a FrameMaker demo tape, most of which is
+# copyright, but this file is "published" as witness the following:
+#
+# Note that this is the Framemaker Maker Interchange Format, not the
+# Normal format which would be application/vnd.framemaker.
+#
+0	string		\<MakerFile	FrameMaker document
+!:mime	application/x-mif
+>11	string		5.5		 (5.5
+>11	string		5.0		 (5.0
+>11	string		4.0		 (4.0
+>11	string		3.0		 (3.0
+>11	string		2.0		 (2.0
+>11	string		1.0		 (1.0
+>14	byte		x		  %c)
+0	string		\<MIFFile	FrameMaker MIF (ASCII) file
+!:mime	application/x-mif
+>9	string		4.0		 (4.0)
+>9	string		3.0		 (3.0)
+>9	string		2.0		 (2.0)
+>9	string		1.0		 (1.x)
+0	search/1	\<MakerDictionary	FrameMaker Dictionary text
+!:mime	application/x-mif
+>17	string		3.0		 (3.0)
+>17	string		2.0		 (2.0)
+>17	string		1.0		 (1.x)
+0	string		\<MakerScreenFont	FrameMaker Font file
+!:mime	application/x-mif
+>17	string		1.01		 (%s)
+0	string		\<MML		FrameMaker MML file
+!:mime	application/x-mif
+0	string		\<BookFile	FrameMaker Book file
+!:mime	application/x-mif
+>10	string		3.0		 (3.0
+>10	string		2.0		 (2.0
+>10	string		1.0		 (1.0
+>13	byte		x		  %c)
+# XXX - this book entry should be verified, if you find one, uncomment this
+#0	string		\<Book\ 	FrameMaker Book (ASCII) file
+#!:mime	application/x-mif
+#>6	string		3.0		 (3.0)
+#>6	string		2.0		 (2.0)
+#>6	string		1.0		 (1.0)
+0	string		\<Maker	Intermediate Print File	FrameMaker IPL file
+!:mime	application/x-mif
+
+#------------------------------------------------------------------------------
+# $File: freebsd,v 1.7 2009/09/19 16:28:09 christos Exp $
+# freebsd:  file(1) magic for FreeBSD objects
+#
+# All new-style FreeBSD magic numbers are in host byte order (i.e.,
+# little-endian on x86).
+#
+# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
+# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
+# schemes for distinguishing between executable images, shared libraries,
+# and object files.
+#
+# FreeBSD says:
+#
+#    Regardless of whether it's pure, demand-paged, or none of the
+#    above:
+#
+#	if the entry point is < 4096, then it's a shared library if
+#	the "has run-time loader information" bit is set, and is
+#	position-independent if the "is position-independent" bit
+#	is set;
+#
+#	if the entry point is >= 4096 (or >4095, same thing), then it's
+#	an executable, and is dynamically-linked if the "has run-time
+#	loader information" bit is set.
+#
+# On x86, NetBSD says:
+#
+#    If it's neither pure nor demand-paged:
+#
+#	if it has the "has run-time loader information" bit set, it's
+#	a dynamically-linked executable;
+#
+#	if it doesn't have that bit set, then:
+#
+#	    if it has the "is position-independent" bit set, it's
+#	    position-independent;
+#
+#	    if the entry point is non-zero, it's an executable, otherwise
+#	    it's an object file.
+#
+#    If it's pure:
+#
+#	if it has the "has run-time loader information" bit set, it's
+#	a dynamically-linked executable, otherwise it's just an
+#	executable.
+#
+#    If it's demand-paged:
+#
+#	if it has the "has run-time loader information" bit set,
+#	then:
+#
+#	    if the entry point is < 4096, it's a shared library;
+#
+#	    if the entry point is = 4096 or > 4096 (i.e., >= 4096),
+#	    it's a dynamically-linked executable);
+#
+#	if it doesn't have the "has run-time loader information" bit
+#	set, then it's just an executable.
+#
+# (On non-x86, NetBSD does much the same thing, except that it uses
+# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
+# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
+# had 8K pages; dunno about MIPS.)
+#
+# I suspect the two will differ only in perverse and uninteresting cases
+# ("shared" libraries that aren't demand-paged and whose pages probably
+# won't actually be shared, executables with entry points <4096).
+#
+# I leave it to those more familiar with FreeBSD and NetBSD to figure out
+# what the right answer is (although using ">4095", FreeBSD-style, is
+# probably better than separately checking for "=4096" and ">4096",
+# NetBSD-style).  (The old "netbsd" file analyzed FreeBSD demand paged
+# executables using the NetBSD technique.)
+#
+0	lelong&0377777777	041400407	FreeBSD/i386
+>20	lelong			<4096
+>>3	byte&0xC0		&0x80		shared library
+>>3	byte&0xC0		0x40		PIC object
+>>3	byte&0xC0		0x00		object
+>20	lelong			>4095
+>>3	byte&0x80		0x80		dynamically linked executable
+>>3	byte&0x80		0x00		executable
+>16	lelong			>0		not stripped
+
+0	lelong&0377777777	041400410	FreeBSD/i386 pure
+>20	lelong			<4096
+>>3	byte&0xC0		&0x80		shared library
+>>3	byte&0xC0		0x40		PIC object
+>>3	byte&0xC0		0x00		object
+>20	lelong			>4095
+>>3	byte&0x80		0x80		dynamically linked executable
+>>3	byte&0x80		0x00		executable
+>16	lelong			>0		not stripped
+
+0	lelong&0377777777	041400413	FreeBSD/i386 demand paged
+>20	lelong			<4096
+>>3	byte&0xC0		&0x80		shared library
+>>3	byte&0xC0		0x40		PIC object
+>>3	byte&0xC0		0x00		object
+>20	lelong			>4095
+>>3	byte&0x80		0x80		dynamically linked executable
+>>3	byte&0x80		0x00		executable
+>16	lelong			>0		not stripped
+
+0	lelong&0377777777	041400314	FreeBSD/i386 compact demand paged
+>20	lelong			<4096
+>>3	byte&0xC0		&0x80		shared library
+>>3	byte&0xC0		0x40		PIC object
+>>3	byte&0xC0		0x00		object
+>20	lelong			>4095
+>>3	byte&0x80		0x80		dynamically linked executable
+>>3	byte&0x80		0x00		executable
+>16	lelong			>0		not stripped
+
+# XXX gross hack to identify core files
+# cores start with a struct tss; we take advantage of the following:
+# byte 7:     highest byte of the kernel stack pointer, always 0xfe
+#      8/9:   kernel (ring 0) ss value, always 0x0010
+#      10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
+#      28:    low order byte of the current PTD entry, always 0 since the
+#             PTD is page-aligned
+#
+7	string	\357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	FreeBSD/i386 a.out core file
+>1039	string	>\0	from '%s'
+
+# /var/run/ld.so.hints
+# What are you laughing about?
+0	lelong			011421044151	ld.so hints file (Little Endian
+>4	lelong			>0		\b, version %d)
+>4	belong			<1		\b)
+0	belong			011421044151	ld.so hints file (Big Endian
+>4	belong			>0		\b, version %d)
+>4	belong			<1		\b)
+
+#
+# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
+#
+0	string	SCRSHOT_	scrshot(1) screenshot,
+>8	byte	x		version %d,
+>9	byte	2		%d bytes in header,
+>>10	byte	x		%d chars wide by
+>>11	byte	x		%d chars high
+
+#------------------------------------------------------------------------------
+# $File: fsav,v 1.11 2009/09/19 16:28:09 christos Exp $
+# fsav:  file(1) magic for datafellows fsav virus definition files
+# Anthon van der Neut (anthon at mnt.org)
+
+# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}
+0	beshort		0x1575		fsav macro virus signatures
+>8	leshort		>0		(%d-
+>11	byte		>0		\b%02d-
+>10	byte		>0		\b%02d)
+# ftp://ftp.f-prot.com/pub/sign.zip
+#10	ubyte		<12
+#>9	ubyte		<32
+#>>8	ubyte		0x0a
+#>>>12	ubyte		0x07
+#>>>>11	uleshort	>0		fsav DOS/Windows virus signatures (%d-
+#>>>>10	byte		0		\b01-
+#>>>>10	byte		1		\b02-
+#>>>>10	byte		2		\b03-
+#>>>>10	byte		3		\b04-
+#>>>>10	byte		4		\b05-
+#>>>>10	byte		5		\b06-
+#>>>>10	byte		6		\b07-
+#>>>>10	byte		7		\b08-
+#>>>>10	byte		8		\b09-
+#>>>>10	byte		9		\b10-
+#>>>>10	byte		10		\b11-
+#>>>>10	byte		11		\b12-
+#>>>>9	ubyte		>0		\b%02d)
+# ftp://ftp.f-prot.com/pub/sign2.zip
+#0	ubyte		0x62		
+#>1	ubyte		0xF5		
+#>>2	ubyte		0x1		
+#>>>3	ubyte		0x1		
+#>>>>4	ubyte		0x0e		
+#>>>>>13		ubyte	>0		fsav virus signatures
+#>>>>>>11	ubyte	x		size 0x%02x
+#>>>>>>12	ubyte	x		\b%02x
+#>>>>>>13	ubyte	x		\b%02x bytes
+
+# Joerg Jenderek: joerg dot jenderek at web dot de
+# http://www.clamav.net/doc/latest/html/node45.html
+# .cvd files start with a 512 bytes colon separated header
+# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime
+# + gzipped tarball files
+0	string		ClamAV-VDB:	
+>11	string		>\0		Clam AntiVirus database %-.23s
+>>34	string		:		
+>>>35		string		!:	\b, version 
+>>>>35		string		x 	\b%-.1s
+>>>>>36		string 		!:	
+>>>>>>36	string		x 	\b%-.1s
+>>>>>>>37	string		!:	
+>>>>>>>>37	string		x 	\b%-.1s
+>>>>>>>>>38	string		!:	
+>>>>>>>>>>38	string		x 	\b%-.1s
+>512	string		\037\213	\b, gzipped
+>769	string		ustar\0		\b, tarred
+
+# Type: Grisoft AVG AntiVirus
+# From: David Newgas <david at newgas.net>
+0	string	AVG7_ANTIVIRUS_VAULT_FILE	AVG 7 Antivirus vault file data
+
+#------------------------------------------------------------------------------
+# $File: games,v 1.8 2009/09/19 16:28:09 christos Exp $
+# games:  file(1) for games
+
+# Fabio Bonelli <fabiobonelli at libero.it>
+# Quake II - III data files
+0       string  IDP2        	Quake II 3D Model file,
+>20     long    x               %lu skin(s),
+>8      long    x               (%lu x
+>12     long    x 		%lu),
+>40     long    x               %lu frame(s),
+>16     long    x               Frame size %lu bytes,
+>24     long  	x               %lu vertices/frame,
+>28     long    x            	%lu texture coordinates,
+>32     long    x               %lu triangles/frame
+
+0       string  IBSP            Quake
+>4      long    0x26            II Map file (BSP)
+>4      long    0x2E      	III Map file (BSP)
+
+0       string  IDS2            Quake II SP2 sprite file
+
+#---------------------------------------------------------------------------
+# Doom and Quake
+# submitted by Nicolas Patrois
+
+0       string  \xcb\x1dBoom\xe6\xff\x03\x01    Boom or linuxdoom demo
+# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
+
+24      string  LxD\ 203        Linuxdoom save
+>0      string  x       , name=%s
+>44     string  x       , world=%s
+
+# Quake
+
+0       string  PACK    Quake I or II world or extension
+
+#0       string  -1\x0a  Quake I demo
+#>30     string  x        version %.4s
+#>61     string  x        level %s       
+
+#0       string  5\x0a   Quake I save
+
+# The levels
+
+# Quake 1
+
+0	string	5\x0aIntroduction             Quake I save: start Introduction
+0	string	5\x0athe_Slipgate_Complex     Quake I save: e1m1 The slipgate complex
+0	string	5\x0aCastle_of_the_Damned     Quake I save: e1m2 Castle of the damned
+0	string	5\x0athe_Necropolis           Quake I save: e1m3 The necropolis
+0	string	5\x0athe_Grisly_Grotto        Quake I save: e1m4 The grisly grotto
+0	string	5\x0aZiggurat_Vertigo         Quake I save: e1m8 Ziggurat vertigo (secret)
+0	string	5\x0aGloom_Keep               Quake I save: e1m5 Gloom keep
+0	string	5\x0aThe_Door_To_Chthon       Quake I save: e1m6 The door to Chthon
+0	string	5\x0aThe_House_of_Chthon      Quake I save: e1m7 The house of Chthon
+0	string	5\x0athe_Installation         Quake I save: e2m1 The installation
+0	string	5\x0athe_Ogre_Citadel         Quake I save: e2m2 The ogre citadel
+0	string	5\x0athe_Crypt_of_Decay       Quake I save: e2m3 The crypt of decay (dopefish lives!)
+0	string	5\x0aUnderearth               Quake I save: e2m7 Underearth (secret)
+0	string	5\x0athe_Ebon_Fortress        Quake I save: e2m4 The ebon fortress
+0	string	5\x0athe_Wizard's_Manse       Quake I save: e2m5 The wizard's manse
+0	string	5\x0athe_Dismal_Oubliette     Quake I save: e2m6 The dismal oubliette
+0	string	5\x0aTermination_Central      Quake I save: e3m1 Termination central
+0	string	5\x0aVaults_of_Zin            Quake I save: e3m2 Vaults of Zin
+0	string	5\x0athe_Tomb_of_Terror       Quake I save: e3m3 The tomb of terror
+0	string	5\x0aSatan's_Dark_Delight     Quake I save: e3m4 Satan's dark delight
+0	string	5\x0athe_Haunted_Halls        Quake I save: e3m7 The haunted halls (secret)
+0	string	5\x0aWind_Tunnels             Quake I save: e3m5 Wind tunnels
+0	string	5\x0aChambers_of_Torment      Quake I save: e3m6 Chambers of torment
+0	string	5\x0athe_Sewage_System        Quake I save: e4m1 The sewage system
+0	string	5\x0aThe_Tower_of_Despair     Quake I save: e4m2 The tower of despair
+0	string	5\x0aThe_Elder_God_Shrine     Quake I save: e4m3 The elder god shrine
+0	string	5\x0athe_Palace_of_Hate       Quake I save: e4m4 The palace of hate
+0	string	5\x0aHell's_Atrium            Quake I save: e4m5 Hell's atrium
+0	string	5\x0athe_Nameless_City        Quake I save: e4m8 The nameless city (secret)
+0	string	5\x0aThe_Pain_Maze            Quake I save: e4m6 The pain maze
+0	string	5\x0aAzure_Agony              Quake I save: e4m7 Azure agony
+0	string	5\x0aShub-Niggurath's_Pit     Quake I save: end Shub-Niggurath's pit
+
+# Quake DeathMatch levels
+
+0	string	5\x0aPlace_of_Two_Deaths	 Quake I save: dm1 Place of two deaths
+0	string	5\x0aClaustrophobopolis		 Quake I save: dm2 Claustrophobopolis
+0	string	5\x0aThe_Abandoned_Base		 Quake I save: dm3 The abandoned base
+0	string	5\x0aThe_Bad_Place		 Quake I save: dm4 The bad place
+0	string	5\x0aThe_Cistern		 Quake I save: dm5 The cistern
+0	string	5\x0aThe_Dark_Zone		 Quake I save: dm6 The dark zone
+
+# Scourge of Armagon
+
+0	string	5\x0aCommand_HQ               Quake I save: start Command HQ
+0	string	5\x0aThe_Pumping_Station      Quake I save: hip1m1 The pumping station
+0	string	5\x0aStorage_Facility         Quake I save: hip1m2 Storage facility
+0	string	5\x0aMilitary_Complex         Quake I save: hip1m5 Military complex (secret)
+0	string	5\x0athe_Lost_Mine            Quake I save: hip1m3 The lost mine
+0	string	5\x0aResearch_Facility        Quake I save: hip1m4 Research facility
+0	string	5\x0aAncient_Realms           Quake I save: hip2m1 Ancient realms
+0	string	5\x0aThe_Gremlin's_Domain     Quake I save: hip2m6 The gremlin's domain (secret)
+0	string	5\x0aThe_Black_Cathedral      Quake I save: hip2m2 The black cathedral
+0	string	5\x0aThe_Catacombs            Quake I save: hip2m3 The catacombs
+0	string	5\x0athe_Crypt__              Quake I save: hip2m4 The crypt
+0	string	5\x0aMortum's_Keep            Quake I save: hip2m5 Mortum's keep
+0	string	5\x0aTur_Torment              Quake I save: hip3m1 Tur torment
+0	string	5\x0aPandemonium              Quake I save: hip3m2 Pandemonium
+0	string	5\x0aLimbo                    Quake I save: hip3m3 Limbo
+0	string	5\x0athe_Edge_of_Oblivion     Quake I save: hipdm1 The edge of oblivion (secret)
+0	string	5\x0aThe_Gauntlet             Quake I save: hip3m4 The gauntlet
+0	string	5\x0aArmagon's_Lair           Quake I save: hipend Armagon's lair
+
+# Malice
+
+0	string	5\x0aThe_Academy      Quake I save: start The academy
+0	string	5\x0aThe_Lab          Quake I save: d1 The lab
+0	string	5\x0aArea_33          Quake I save: d1b Area 33
+0	string	5\x0aSECRET_MISSIONS  Quake I save: d3b Secret missions
+0	string	5\x0aThe_Hospital     Quake I save: d10 The hospital (secret)
+0	string	5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
+0	string	5\x0aBACK_2_MALICE    Quake I save: d4b Back to Malice
+0	string	5\x0aArea44           Quake I save: d1c Area 44
+0	string	5\x0aTakahiro_Towers  Quake I save: d2 Takahiro towers
+0	string	5\x0aA_Rat's_Life     Quake I save: d3 A rat's life
+0	string	5\x0aInto_The_Flood   Quake I save: d4 Into the flood
+0	string	5\x0aThe_Flood        Quake I save: d5 The flood
+0	string	5\x0aNuclear_Plant    Quake I save: d6 Nuclear plant
+0	string	5\x0aThe_Incinerator_Plant    Quake I save: d7 The incinerator plant
+0	string	5\x0aThe_Foundry              Quake I save: d7b The foundry
+0	string	5\x0aThe_Underwater_Base      Quake I save: d8 The underwater base
+0	string	5\x0aTakahiro_Base            Quake I save: d9 Takahiro base
+0	string	5\x0aTakahiro_Laboratories    Quake I save: d12 Takahiro laboratories
+0	string	5\x0aStayin'_Alive    Quake I save: d13 Stayin' alive
+0	string	5\x0aB.O.S.S._HQ      Quake I save: d14 B.O.S.S. HQ
+0	string	5\x0aSHOWDOWN!        Quake I save: d15 Showdown!
+
+# Malice DeathMatch levels
+
+0	string	5\x0aThe_Seventh_Precinct	 Quake I save: ddm1 The seventh precinct
+0	string	5\x0aSub_Station		 Quake I save: ddm2 Sub station
+0	string	5\x0aCrazy_Eights!		 Quake I save: ddm3 Crazy eights!
+0	string	5\x0aEast_Side_Invertationa	 Quake I save: ddm4 East side invertationa
+0	string	5\x0aSlaughterhouse		 Quake I save: ddm5 Slaughterhouse
+0	string	5\x0aDOMINO			 Quake I save: ddm6 Domino
+0	string	5\x0aSANDRA'S_LADDER		 Quake I save: ddm7 Sandra's ladder
+
+
+0	string	MComprHD	MAME CHD compressed hard disk image,
+>12	belong	x		version %lu
+
+# doom - submitted by Jon Dowland
+
+0	string	=IWAD		doom main IWAD data
+>4	lelong	x		containing %d lumps
+0	string	=PWAD		doom patch PWAD data
+>4	lelong	x		containing %d lumps
+
+
+# Summary: Warcraft 3 save
+# Extension: .w3g
+# Created by: "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string		Warcraft\ III\ recorded\ game	%s
+
+
+# Summary: Warcraft 3 map
+# Extension: .w3m
+# Created by: "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string		HM3W		Warcraft III map file
+
+
+# Summary: SGF Smart Game Format
+# Extension: .sgf
+# Reference: http://www.red-bean.com/sgf/
+# Created by: Eduardo Sabbatella <eduardo_sabbatella at yahoo.com.ar>
+# Modified by (1): Abel Cheung (regex, more game format)
+# FIXME: Some games don't have GM (game type)
+0	regex		\\(;.*GM\\[[0-9]{1,2}\\]	Smart Game Format
+>2	search/0x200	GM[
+>>&0	string		1]	(Go)
+>>&0	string		2]	(Othello)
+>>&0	string		3]	(chess)
+>>&0	string		4]	(Gomoku+Renju)
+>>&0	string		5]	(Nine Men's Morris)
+>>&0	string		6]	(Backgammon)
+>>&0	string		7]	(Chinese chess)
+>>&0	string		8]	(Shogi)
+>>&0	string		9]	(Lines of Action)
+>>&0	string		10]	(Ataxx)
+>>&0	string		11]	(Hex)
+>>&0	string		12]	(Jungle)
+>>&0	string		13]	(Neutron)
+>>&0	string		14]	(Philosopher's Football)
+>>&0	string		15]	(Quadrature)
+>>&0	string		16]	(Trax)
+>>&0	string		17]	(Tantrix)
+>>&0	string		18]	(Amazons)
+>>&0	string		19]	(Octi)
+>>&0	string		20]	(Gess)
+>>&0	string		21]	(Twixt)
+>>&0	string		22]	(Zertz)
+>>&0	string		23]	(Plateau)
+>>&0	string		24]	(Yinsh)
+>>&0	string		25]	(Punct)
+>>&0	string		26]	(Gobblet)
+>>&0	string		27]	(hive)
+>>&0	string		28]	(Exxit)
+>>&0	string		29]	(Hnefatal)
+>>&0	string		30]	(Kuba)
+>>&0	string		31]	(Tripples)
+>>&0	string		32]	(Chase)
+>>&0	string		33]	(Tumbling Down)
+>>&0	string		34]	(Sahara)
+>>&0	string		35]	(Byte)
+>>&0	string		36]	(Focus)
+>>&0	string		37]	(Dvonn)
+>>&0	string		38]	(Tamsk)
+>>&0	string		39]	(Gipf)
+>>&0	string		40]	(Kropki)
+
+
+# Summary: Civilization 4 video
+# Extension: .bik
+# Created by: Abel Cheung <abelcheung at gmail.com>
+0	string	BIKi	Civilization 4 Video
+
+
+##############################################
+# NetImmerse/Gamebryo game engine entries
+
+# Summary: Gamebryo game engine file
+# Extension: .nif, .kf
+# Created by: Abel Cheung <abelcheung at gmail.com>
+0		string		Gamebryo\ File\ Format,\ Version\ 	Gamebryo game engine file
+>&0		regex		[0-9a-z.]+				\b, version %s
+
+# Summary: Gamebryo game engine file
+# Extension: .kfm
+# Created by: Abel Cheung <abelcheung at gmail.com>
+0		string		;Gamebryo\ KFM\ File\ Version\ 		Gamebryo game engine animation File
+>&0		regex		[0-9a-z.]+				\b, version %s
+
+# Summary: NetImmerse game engine file
+# Extension .nif
+# Created by: Abel Cheung <abelcheung at gmail.com>
+0		string		NetImmerse\ File\ Format,\ Versio		
+>&0		string		n\ 					NetImmerse game engine file
+>>&0		regex		[0-9a-z.]+				\b, version %s
+
+
+#------------------------------------------------------------------------------
+# $File: gcc,v 1.4 2009/09/19 16:28:09 christos Exp $
+# gcc:  file(1) magic for GCC special files
+#
+0	string		gpch		GCC precompiled header
+
+# The version field is annoying.  It's 3 characters, not zero-terminated.
+>5	byte		x			(version %c
+>6	byte		x			\b%c
+>7	byte		x			\b%c)
+
+# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
+>4	byte		67			for C
+>4	byte		111			for Objective C
+>4	byte		43			for C++
+>4	byte		79			for Objective C++
+
+#------------------------------------------------------------------------------
+# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $
+# GEOS files (Vidar Madsen, vidar at gimp.org)
+# semi-commonly used in embedded and handheld systems.
+0	belong	0xc745c153	GEOS
+>40	byte	1	executable
+>40	byte	2	VMFile
+>40	byte	3	binary
+>40	byte	4	directory label
+>40	byte	<1	unknown
+>40	byte	>4	unknown
+>4	string	>\0	\b, name "%s"
+#>44	short	x	\b, version %d
+#>46	short	x	\b.%d
+#>48	short	x	\b, rev %d
+#>50	short	x	\b.%d
+#>52	short	x	\b, proto %d
+#>54	short	x	\br%d
+#>168	string	>\0	\b, copyright "%s"
+
+#------------------------------------------------------------------------------
+# $File: gimp,v 1.6 2009/09/19 16:28:09 christos Exp $
+# GIMP Gradient: file(1) magic for the GIMP's gradient data files
+# by Federico Mena <federico at nuclecu.unam.mx>
+
+0       string          GIMP\ Gradient  GIMP gradient data
+
+#------------------------------------------------------------------------------
+# XCF:  file(1) magic for the XCF image format used in the GIMP developed
+#       by Spencer Kimball and Peter Mattis
+#       ('Bucky' LaDieu, nega at vt.edu)
+
+0	string		gimp\ xcf	GIMP XCF image data,
+>9	string		file		version 0,
+>9	string		v		version
+>>10	string		>\0		%s,
+>14	belong		x		%lu x
+>18	belong		x		%lu,
+>22     belong          0               RGB Color
+>22     belong          1               Greyscale
+>22     belong          2               Indexed Color
+>22	belong		>2		Unknown Image Type.
+
+#------------------------------------------------------------------------------
+# XCF:  file(1) magic for the patterns used in the GIMP, developed
+#       by Spencer Kimball and Peter Mattis
+#       ('Bucky' LaDieu, nega at vt.edu)
+
+20      string          GPAT            GIMP pattern data,
+>24     string          x               %s
+
+#------------------------------------------------------------------------------
+# XCF:  file(1) magic for the brushes used in the GIMP, developed
+#       by Spencer Kimball and Peter Mattis
+#       ('Bucky' LaDieu, nega at vt.edu)
+
+20      string          GIMP            GIMP brush data
+
+# GIMP Curves File
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+0	string	#\040GIMP\040Curves\040File	GIMP curve file
+
+#------------------------------------------------------------------------------
+# $File: gnome-keyring,v 1.2 2009/09/19 16:28:09 christos Exp $
+# GNOME keyring
+# Contributed by Josh Triplett
+# FIXME: Could be simplified if pstring supported two-byte counts
+0         string   GnomeKeyring\n\r\0\n GNOME keyring
+>&0       ubyte    0                    \b, major version 0
+>>&0      ubyte    0                    \b, minor version 0
+>>>&0     ubyte    0                    \b, crypto type 0 (AEL)
+>>>&0     ubyte    >0                   \b, crypto type %hhu (unknown)
+>>>&1     ubyte    0                    \b, hash type 0 (MD5)
+>>>&1     ubyte    >0                   \b, hash type %hhu (unknown)
+>>>&2     ubelong  0xFFFFFFFF           \b, name NULL
+>>>&2     ubelong  !0xFFFFFFFF
+>>>>&-4   ubelong  >255                 \b, name too long for file's pstring type
+>>>>&-4   ubelong  <256
+>>>>>&-1  pstring  x                    \b, name "%s"
+>>>>>>&0  ubeqdate x                    \b, last modified %s
+>>>>>>&8  ubeqdate x                    \b, created %s
+>>>>>>&16 ubelong  &1
+>>>>>>>&0 ubelong  x                    \b, locked if idle for %u seconds
+>>>>>>&16 ubelong  ^1                   \b, not locked if idle
+>>>>>>&24 ubelong  x                    \b, hash iterations %u
+>>>>>>&28 ubequad  x                    \b, salt %llu
+>>>>>>&52 ubelong  x                    \b, %u item(s)
+
+#------------------------------------------------------------------------------
+# $File: gnu,v 1.11 2009/09/19 16:28:09 christos Exp $
+# gnu:  file(1) magic for various GNU tools
+#
+# GNU nlsutils message catalog file format
+#
+0	string		\336\22\4\225	GNU message catalog (little endian),
+>4	lelong		x		revision %d,
+>8	lelong		x		%d messages
+0	string		\225\4\22\336	GNU message catalog (big endian),
+>4	belong		x		revision %d,
+>8	belong		x		%d messages
+# message catalogs, from Mitchum DSouza <m.dsouza at mrc-apu.cam.ac.uk>
+0	string		*nazgul*	Nazgul style compiled message catalog
+>8	lelong		>0		\b, version %ld
+
+# GnuPG
+# The format is very similar to pgp
+0	string          \001gpg                 GPG key trust database
+>4	byte            x                       version %d
+# Note: magic.mime had 0x8501 for the next line instead of 0x8502
+0	beshort		0x8502			GPG encrypted data
+!:mime	text/PGP # encoding: data
+
+# This magic is not particularly good, as the keyrings don't have true
+# magic. Nevertheless, it covers many keyrings.
+0       beshort         0x9901                  GPG key public ring
+!:mime	application/x-gnupg-keyring
+
+# Gnumeric spreadsheet
+# This entry is only semi-helpful, as Gnumeric compresses its files, so
+# they will ordinarily reported as "compressed", but at least -z helps
+39      string          =<gmr:Workbook           Gnumeric spreadsheet
+
+# From: James Youngman <jay at gnu.org> 
+# gnu find magic
+0	string	\0LOCATE	GNU findutils locate database data
+>7	string	>\0		\b, format %s
+>7	string	02		\b (frcode)
+
+# Files produced by GNU gettext
+0	long	0xDE120495		GNU-format message catalog data
+0	long	0x950412DE		GNU-format message catalog data
+
+#------------------------------------------------------------------------------
+# $File: gnumeric,v 1.4 2009/09/19 16:28:09 christos Exp $
+# gnumeric:  file(1) magic for Gnumeric spreadsheet
+# This entry is only semi-helpful, as Gnumeric compresses its files, so
+# they will ordinarily reported as "compressed", but at least -z helps
+39	string	=<gmr:Workbook	Gnumeric spreadsheet
+!:mime	application/x-gnumeric
+
+#------------------------------------------------------------------------------
+# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $
+# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
+#
+# ACE/gr binary
+0	string	\000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003		old ACE/gr binary file
+>39	byte	>0			- version %c
+# ACE/gr ascii
+0	string	#\ xvgr\ parameter\ file	ACE/gr ascii file
+0	string	#\ xmgr\ parameter\ file	ACE/gr ascii file
+0	string	#\ ACE/gr\ parameter\ file	ACE/gr ascii file
+# Grace projects
+0	string	#\ Grace\ project\ file		Grace project file
+>23	string	@version\  			(version
+>>32	byte	>0 				%c
+>>33	string	>\0 				\b.%.2s
+>>35	string	>\0 				\b.%.2s)
+# ACE/gr fit description files
+0	string	#\ ACE/gr\ fit\ description\ 	ACE/gr fit description file
+# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
+
+#------------------------------------------------------------------------------
+# $File: graphviz,v 1.7 2009/09/19 16:28:09 christos Exp $
+# graphviz:  file(1) magic for http://www.graphviz.org/
+
+# FIXME: These patterns match too generally. For example, the first
+# line matches a LaTeX file containing the word "graph" (with a {
+# following later) and the second line matches this file.
+#0	regex/100	[\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{	graphviz graph text
+#!:mime	text/vnd.graphviz
+#0	regex/100	[\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{	graphviz digraph text
+#!:mime	text/vnd.graphviz
+
+#------------------------------------------------------------------------------
+# $File: gringotts,v 1.5 2009/09/19 16:28:09 christos Exp $
+# gringotts:  file(1) magic for Gringotts
+# http://devel.pluto.linux.it/projects/Gringotts/
+# author: Germano Rizzo <mano at pluto.linux.it>
+#GRG3????Y
+0	string	GRG		Gringotts data file
+#file format 1
+>3	string		1		v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
+#file format 2
+>3	string		2		v.2, MCRYPT S2K, 
+>>8	byte&0x70	0x00		RIJNDAEL-128 crypt,
+>>8	byte&0x70	0x10		SERPENT crypt,
+>>8	byte&0x70	0x20		TWOFISH crypt, 
+>>8	byte&0x70	0x30		CAST-256 crypt,
+>>8	byte&0x70	0x40		SAFER+ crypt,
+>>8	byte&0x70	0x50		LOKI97 crypt,
+>>8	byte&0x70	0x60		3DES crypt,
+>>8	byte&0x70	0x70		RIJNDAEL-256 crypt,
+>>8	byte&0x08	0x00		SHA1 hash,
+>>8	byte&0x08	0x08		RIPEMD-160 hash,
+>>8	byte&0x04	0x00		ZLib
+>>8	byte&0x04	0x04		BZip2
+>>8	byte&0x03	0x00		lvl.0
+>>8	byte&0x03	0x01		lvl.3
+>>8	byte&0x03	0x02		lvl.6
+>>8	byte&0x03	0x03		lvl.9
+#file format 3
+>3	string		3		v.3, OpenPGP S2K, 
+>>8	byte&0x70	0x00		RIJNDAEL-128 crypt,
+>>8	byte&0x70	0x10		SERPENT crypt,
+>>8	byte&0x70	0x20		TWOFISH crypt, 
+>>8	byte&0x70	0x30		CAST-256 crypt,
+>>8	byte&0x70	0x40		SAFER+ crypt,
+>>8	byte&0x70	0x50		LOKI97 crypt,
+>>8	byte&0x70	0x60		3DES crypt,
+>>8	byte&0x70	0x70		RIJNDAEL-256 crypt,
+>>8	byte&0x08	0x00		SHA1 hash,
+>>8	byte&0x08	0x08		RIPEMD-160 hash,
+>>8	byte&0x04	0x00		ZLib
+>>8	byte&0x04	0x04		BZip2
+>>8	byte&0x03	0x00		lvl.0
+>>8	byte&0x03	0x01		lvl.3
+>>8	byte&0x03	0x02		lvl.6
+>>8	byte&0x03	0x03		lvl.9
+#file format >3
+>3	string		>3		v.%.1s (unknown details)
+
+#------------------------------------------------------------------------------
+# $File: hitachi-sh,v 1.5 2009/09/19 16:28:09 christos Exp $
+# hitach-sh: file(1) magic for Hitachi Super-H
+#
+# Super-H COFF
+#
+0	beshort		0x0500		Hitachi SH big-endian COFF
+>18	beshort&0x0002	=0x0000		object
+>18	beshort&0x0002	=0x0002		executable
+>18	beshort&0x0008	=0x0008		\b, stripped
+>18	beshort&0x0008	=0x0000		\b, not stripped
+#
+0	leshort		0x0550		Hitachi SH little-endian COFF
+>18	leshort&0x0002	=0x0000		object
+>18	leshort&0x0002	=0x0002		executable
+>18	leshort&0x0008	=0x0008		\b, stripped
+>18	leshort&0x0008	=0x0000		\b, not stripped
+
+
+#------------------------------------------------------------------------------
+# $File: hp,v 1.23 2009/09/19 16:28:09 christos Exp $
+# hp:  file(1) magic for Hewlett Packard machines (see also "printer")
+#
+# XXX - somebody should figure out whether any byte order needs to be
+# applied to the "TML" stuff; I'm assuming the Apollo stuff is
+# big-endian as it was mostly 68K-based.
+#
+# I think the 500 series was the old stack-based machines, running a
+# UNIX environment atop the "SUN kernel"; dunno whether it was
+# big-endian or little-endian.
+#
+# Daniel Quinlan (quinlan at yggdrasil.com): hp200 machines are 68010 based;
+# hp300 are 68020+68881 based; hp400 are also 68k.  The following basic
+# HP magic is useful for reference, but using "long" magic is a better
+# practice in order to avoid collisions.
+#
+# Guy Harris (guy at netapp.com): some additions to this list came from
+# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
+# 1.2, and 2.0).  The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
+# "/etc/magic", though, except for the "archive file relocatable library"
+# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
+# used in executables, or have they just not yet updated "/etc/magic"
+# completely?
+#
+# 0	beshort		200		hp200 (68010) BSD binary
+# 0	beshort		300		hp300 (68020+68881) BSD binary
+# 0	beshort		0x20c		hp200/300 HP-UX binary
+# 0	beshort		0x20d		hp400 (68030) HP-UX binary
+# 0	beshort		0x20e		hp400 (68040?) HP-UX binary
+# 0	beshort		0x20b		PA-RISC1.0 HP-UX binary
+# 0	beshort		0x210		PA-RISC1.1 HP-UX binary
+# 0	beshort		0x211		PA-RISC1.2 HP-UX binary
+# 0	beshort		0x214		PA-RISC2.0 HP-UX binary
+
+#
+# The "misc" stuff needs a byte order; the archives look suspiciously
+# like the old 177545 archives (0xff65 = 0177545).
+#
+#### Old Apollo stuff
+0	beshort		0627		Apollo m68k COFF executable
+>18	beshort		^040000		not stripped
+>22	beshort		>0		- version %ld
+0	beshort		0624		apollo a88k COFF executable
+>18	beshort		^040000		not stripped
+>22	beshort		>0		- version %ld
+0       long            01203604016     TML 0123 byte-order format
+0       long            01702407010     TML 1032 byte-order format
+0       long            01003405017     TML 2301 byte-order format
+0       long            01602007412     TML 3210 byte-order format
+#### PA-RISC 1.1
+0	belong 		0x02100106	PA-RISC1.1 relocatable object
+0	belong 		0x02100107	PA-RISC1.1 executable
+>168	belong		&0x00000004	dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x02100108	PA-RISC1.1 shared executable
+>168	belong&0x4	0x4		dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x0210010b	PA-RISC1.1 demand-load executable
+>168	belong&0x4	0x4		dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x0210010e	PA-RISC1.1 shared library
+>96	belong		>0		- not stripped
+
+0	belong 		0x0210010d	PA-RISC1.1 dynamic load library
+>96	belong		>0		- not stripped
+
+#### PA-RISC 2.0
+0	belong		0x02140106	PA-RISC2.0 relocatable object
+
+0       belong		0x02140107	PA-RISC2.0 executable
+>168	belong		&0x00000004	dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0       belong		0x02140108	PA-RISC2.0 shared executable
+>168	belong		&0x00000004	dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0       belong		0x0214010b	PA-RISC2.0 demand-load executable
+>168	belong		&0x00000004	dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0       belong		0x0214010e	PA-RISC2.0 shared library
+>96	belong		>0		- not stripped
+
+0       belong		0x0214010d	PA-RISC2.0 dynamic load library
+>96	belong		>0		- not stripped
+
+#### 800
+0	belong 		0x020b0106	PA-RISC1.0 relocatable object
+
+0	belong 		0x020b0107	PA-RISC1.0 executable
+>168	belong&0x4	0x4		dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x020b0108	PA-RISC1.0 shared executable
+>168	belong&0x4	0x4		dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x020b010b	PA-RISC1.0 demand-load executable
+>168	belong&0x4	0x4		dynamically linked
+>(144)	belong		0x054ef630	dynamically linked
+>96	belong		>0		- not stripped
+
+0	belong 		0x020b010e	PA-RISC1.0 shared library
+>96	belong		>0		- not stripped
+
+0	belong 		0x020b010d	PA-RISC1.0 dynamic load library
+>96	belong		>0		- not stripped
+
+0	belong		0x213c6172	archive file
+>68	belong 		0x020b0619	- PA-RISC1.0 relocatable library
+>68	belong	 	0x02100619	- PA-RISC1.1 relocatable library
+>68	belong 		0x02110619	- PA-RISC1.2 relocatable library
+>68	belong 		0x02140619	- PA-RISC2.0 relocatable library
+
+#### 500
+0	long		0x02080106	HP s500 relocatable executable
+>16	long		>0		- version %ld
+
+0	long		0x02080107	HP s500 executable
+>16	long		>0		- version %ld
+
+0	long		0x02080108	HP s500 pure executable
+>16	long		>0		- version %ld
+
+#### 200
+0	belong 		0x020c0108	HP s200 pure executable
+>4	beshort		>0		- version %ld
+>8	belong		&0x80000000	save fp regs
+>8	belong		&0x40000000	dynamically linked
+>8	belong		&0x20000000	debuggable
+>36	belong		>0		not stripped
+
+0	belong		0x020c0107	HP s200 executable
+>4	beshort		>0		- version %ld
+>8	belong		&0x80000000	save fp regs
+>8	belong		&0x40000000	dynamically linked
+>8	belong		&0x20000000	debuggable
+>36	belong		>0		not stripped
+
+0	belong		0x020c010b	HP s200 demand-load executable
+>4	beshort		>0		- version %ld
+>8	belong		&0x80000000	save fp regs
+>8	belong		&0x40000000	dynamically linked
+>8	belong		&0x20000000	debuggable
+>36	belong		>0		not stripped
+
+0	belong		0x020c0106	HP s200 relocatable executable
+>4	beshort		>0		- version %ld
+>6	beshort		>0		- highwater %d
+>8	belong		&0x80000000	save fp regs
+>8	belong		&0x20000000	debuggable
+>8	belong		&0x10000000	PIC
+
+0	belong 		0x020a0108	HP s200 (2.x release) pure executable
+>4	beshort		>0		- version %ld
+>36	belong		>0		not stripped
+
+0	belong		0x020a0107	HP s200 (2.x release) executable
+>4	beshort		>0		- version %ld
+>36	belong		>0		not stripped
+
+0	belong		0x020c010e	HP s200 shared library
+>4	beshort		>0		- version %ld
+>6	beshort		>0		- highwater %d
+>36	belong		>0		not stripped
+
+0	belong		0x020c010d	HP s200 dynamic load library
+>4	beshort		>0		- version %ld
+>6	beshort		>0		- highwater %d
+>36	belong		>0		not stripped
+
+#### MISC
+0	long		0x0000ff65	HP old archive
+0	long		0x020aff65	HP s200 old archive
+0	long		0x020cff65	HP s200 old archive
+0	long		0x0208ff65	HP s500 old archive
+
+0	long		0x015821a6	HP core file
+
+0	long		0x4da7eee8	HP-WINDOWS font
+>8	byte		>0		- version %ld
+0	string		Bitmapfile	HP Bitmapfile
+
+0	string		IMGfile	CIS 	compimg HP Bitmapfile
+# XXX - see "lif"
+#0	short		0x8000		lif file
+0	long		0x020c010c	compiled Lisp
+
+0	string		msgcat01	HP NLS message catalog,
+>8	long		>0		%d messages
+
+# Summary: HP-48/49 calculator
+# Created by: phk at data.fls.dk
+# Modified by (1): AMAKAWA Shuhei <sa264 at cam.ac.uk>
+# Modified by (2): Samuel Thibault <samuel.thibault at ens-lyon.org> (HP49 support)
+0	string		HPHP		HP
+>4	string		48		48 binary
+>4	string		49		49 binary
+>7	byte		>64		- Rev %c
+>8	leshort		0x2911		(ADR)
+>8	leshort		0x2933		(REAL)
+>8	leshort		0x2955		(LREAL)
+>8	leshort		0x2977		(COMPLX)
+>8	leshort		0x299d		(LCOMPLX)
+>8	leshort		0x29bf		(CHAR)
+>8	leshort		0x29e8		(ARRAY)
+>8	leshort		0x2a0a		(LNKARRAY)
+>8	leshort		0x2a2c		(STRING)
+>8	leshort		0x2a4e		(HXS)
+>8	leshort		0x2a74		(LIST)
+>8	leshort		0x2a96		(DIR)
+>8	leshort		0x2ab8		(ALG)
+>8	leshort		0x2ada		(UNIT)
+>8	leshort		0x2afc		(TAGGED)
+>8	leshort		0x2b1e		(GROB)
+>8	leshort		0x2b40		(LIB)
+>8	leshort		0x2b62		(BACKUP)
+>8	leshort		0x2b88		(LIBDATA)
+>8	leshort		0x2d9d		(PROG)
+>8	leshort		0x2dcc		(CODE)
+>8	leshort		0x2e48		(GNAME)
+>8	leshort		0x2e6d		(LNAME)
+>8	leshort		0x2e92		(XLIB)
+
+0	string		%%HP:		HP text
+>6	string		T(0)		- T(0)
+>6	string		T(1)		- T(1)
+>6	string		T(2)		- T(2)
+>6	string		T(3)		- T(3)
+>10	string		A(D)		A(D)
+>10	string		A(R)		A(R)
+>10	string		A(G)		A(G)
+>14	string		F(.)		F(.);
+>14	string		F(,)		F(,);
+
+
+# Summary: HP-38/39 calculator
+# Created by: Samuel Thibault <samuel.thibault at ens-lyon.org>
+0	string		HP3
+>3	string		8		HP 38
+>3	string		9		HP 39
+>4	string		Bin		binary
+>4	string		Asc		ASCII
+>7	string		A		(Directory List)
+>7	string		B		(Zaplet)
+>7	string		C		(Note)
+>7	string		D		(Program)
+>7	string		E		(Variable)
+>7	string		F		(List)
+>7	string		G		(Matrix)
+>7	string		H		(Library)
+>7	string		I		(Target List)
+>7	string		J		(ASCII Vector specification)
+>7	string		K		(wildcard)
+
+# Summary: HP-38/39 calculator
+# Created by: Samuel Thibault <samuel.thibault at ens-lyon.org>
+0	string		HP3
+>3	string		8		HP 38
+>3	string		9		HP 39
+>4	string		Bin		binary
+>4	string		Asc		ASCII
+>7	string		A		(Directory List)
+>7	string		B		(Zaplet)
+>7	string		C		(Note)
+>7	string		D		(Program)
+>7	string		E		(Variable)
+>7	string		F		(List)
+>7	string		G		(Matrix)
+>7	string		H		(Library)
+>7	string		I		(Target List)
+>7	string		J		(ASCII Vector specification)
+>7	string		K		(wildcard)
+
+# hpBSD magic numbers
+0	beshort		200		hp200 (68010) BSD
+>2	beshort		0407		impure binary
+>2	beshort		0410		read-only binary
+>2	beshort		0413		demand paged binary
+0	beshort		300		hp300 (68020+68881) BSD
+>2	beshort		0407		impure binary
+>2	beshort		0410		read-only binary
+>2	beshort		0413		demand paged binary
+#
+# From David Gero <dgero at nortelnetworks.com>
+# HP-UX 10.20 core file format from /usr/include/sys/core.h
+# Unfortunately, HP-UX uses corehead blocks without specifying the order
+# There are four we care about:
+#     CORE_KERNEL, which starts with the string "HP-UX"
+#     CORE_EXEC, which contains the name of the command
+#     CORE_PROC, which contains the signal number that caused the core dump
+#     CORE_FORMAT, which contains the version of the core file format (== 1)
+# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
+# but we include all 6 variations of the order of the first 3, and
+# assume that PROC will always be last
+# Order 1: KERNEL, EXEC, FORMAT, PROC
+0x10		string	HP-UX
+>0		belong	2
+>>0xC		belong	0x3C
+>>>0x4C		belong	0x100
+>>>>0x58	belong	0x44
+>>>>>0xA0	belong	1
+>>>>>>0xAC	belong	4
+>>>>>>>0xB0	belong	1
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0x90	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+# Order 2: KERNEL, FORMAT, EXEC, PROC
+>>>0x4C		belong	1
+>>>>0x58	belong	4
+>>>>>0x5C	belong	1
+>>>>>>0x60	belong	0x100
+>>>>>>>0x6C	belong	0x44
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0xA4	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+# Order 3: FORMAT, KERNEL, EXEC, PROC
+0x24		string	HP-UX
+>0		belong	1
+>>0xC		belong	4
+>>>0x10		belong	1
+>>>>0x14	belong	2
+>>>>>0x20	belong	0x3C
+>>>>>>0x60	belong	0x100
+>>>>>>>0x6C	belong	0x44
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0xA4	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+# Order 4: EXEC, KERNEL, FORMAT, PROC
+0x64		string	HP-UX
+>0		belong	0x100
+>>0xC		belong	0x44
+>>>0x54		belong	2
+>>>>0x60	belong	0x3C
+>>>>>0xA0	belong	1
+>>>>>>0xAC	belong	4
+>>>>>>>0xB0	belong	1
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0x44	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+# Order 5: FORMAT, EXEC, KERNEL, PROC
+0x78		string	HP-UX
+>0		belong	1
+>>0xC		belong	4
+>>>0x10		belong	1
+>>>>0x14	belong	0x100
+>>>>>0x20	belong	0x44
+>>>>>>0x68	belong	2
+>>>>>>>0x74	belong	0x3C
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0x58	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+# Order 6: EXEC, FORMAT, KERNEL, PROC
+>0		belong	0x100
+>>0xC		belong	0x44
+>>>0x54		belong	1
+>>>>0x60	belong	4
+>>>>>0x64	belong	1
+>>>>>>0x68	belong	2
+>>>>>>>0x74	belong	0x2C
+>>>>>>>>0xB4	belong	4		core file
+>>>>>>>>>0x44	string	>\0		from '%s'
+>>>>>>>>>0xC4	belong	3		- received SIGQUIT
+>>>>>>>>>0xC4	belong	4		- received SIGILL
+>>>>>>>>>0xC4	belong	5		- received SIGTRAP
+>>>>>>>>>0xC4	belong	6		- received SIGABRT
+>>>>>>>>>0xC4	belong	7		- received SIGEMT
+>>>>>>>>>0xC4	belong	8		- received SIGFPE
+>>>>>>>>>0xC4	belong	10		- received SIGBUS
+>>>>>>>>>0xC4	belong	11		- received SIGSEGV
+>>>>>>>>>0xC4	belong	12		- received SIGSYS
+>>>>>>>>>0xC4	belong	33		- received SIGXCPU
+>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
+
+
+
+#------------------------------------------------------------------------------
+# $File: human68k,v 1.5 2009/09/19 16:28:09 christos Exp $
+# human68k:  file(1) magic for Human68k (X680x0 DOS) binary formats
+# Magic too short!
+#0		string	HU		Human68k
+#>68		string	LZX		LZX compressed
+#>>72		string	>\0		(version %s)
+#>(8.L+74)	string	LZX		LZX compressed
+#>>(8.L+78)	string	>\0		(version %s)
+#>60		belong	>0		binded
+#>(8.L+66)	string	#HUPAIR		hupair
+#>0		string	HU		X executable
+#>(8.L+74)	string	#LIBCV1		- linked PD LIBC ver 1
+#>4		belong	>0		- base address 0x%x
+#>28		belong	>0		not stripped
+#>32		belong	>0		with debug information
+#0		beshort	0x601a		Human68k Z executable
+#0		beshort	0x6000		Human68k object file
+#0		belong	0xd1000000	Human68k ar binary archive
+#0		belong	0xd1010000	Human68k ar ascii archive
+#0		beshort	0x0068		Human68k lib archive
+#4		string	LZX		Human68k LZX compressed
+#>8		string	>\0		(version %s)
+#>4		string	LZX		R executable
+#2		string	#HUPAIR		Human68k hupair R executable
+
+#------------------------------------------------------------------------------
+# $File: ibm370,v 1.8 2009/09/19 16:28:09 christos Exp $
+# ibm370:  file(1) magic for IBM 370 and compatibles.
+#
+# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
+# What the heck *is* "USS/370"?
+# AIX 4.1's "/etc/magic" has
+#
+#	0	short		0535		370 sysV executable 
+#	>12	long		>0		not stripped
+#	>22	short		>0		- version %d
+#	>30	long		>0		- 5.2 format
+#	0	short		0530		370 sysV pure executable 
+#	>12	long		>0		not stripped
+#	>22	short		>0		- version %d
+#	>30	long		>0		- 5.2 format
+#
+# instead of the "USS/370" versions of the same magic numbers.
+#
+0	beshort		0537		370 XA sysV executable 
+>12	belong		>0		not stripped
+>22	beshort		>0		- version %d
+>30	belong		>0		- 5.2 format
+0	beshort		0532		370 XA sysV pure executable 
+>12	belong		>0		not stripped
+>22	beshort		>0		- version %d
+>30	belong		>0		- 5.2 format
+0	beshort		054001		370 sysV pure executable
+>12	belong		>0		not stripped
+0	beshort		055001		370 XA sysV pure executable
+>12	belong		>0		not stripped
+0	beshort		056401		370 sysV executable
+>12	belong		>0		not stripped
+0	beshort		057401		370 XA sysV executable
+>12	belong		>0		not stripped
+0       beshort		0531		SVR2 executable (Amdahl-UTS)
+>12	belong		>0		not stripped
+>24     belong		>0		- version %ld
+0	beshort		0534		SVR2 pure executable (Amdahl-UTS)
+>12	belong		>0		not stripped
+>24	belong		>0		- version %ld
+0	beshort		0530		SVR2 pure executable (USS/370)
+>12	belong		>0		not stripped
+>24	belong		>0		- version %ld
+0	beshort		0535		SVR2 executable (USS/370)
+>12	belong		>0		not stripped
+>24	belong		>0		- version %ld
+
+#------------------------------------------------------------------------------
+# $File: ibm6000,v 1.9 2009/09/19 16:28:09 christos Exp $
+# ibm6000:  file(1) magic for RS/6000 and the RT PC.
+#
+0	beshort		0x01df		executable (RISC System/6000 V3.1) or obj module
+>12	belong		>0		not stripped
+# Breaks sun4 statically linked execs.
+#0      beshort		0x0103		executable (RT Version 2) or obj module
+#>2	byte		0x50		pure
+#>28	belong		>0		not stripped
+#>6	beshort		>0		- version %ld
+0	beshort		0x0104		shared library
+0	beshort		0x0105		ctab data
+0	beshort		0xfe04		structured file
+0	string		0xabcdef	AIX message catalog
+0	belong		0x000001f9	AIX compiled message catalog
+0	string		\<aiaff>	archive
+0	string		\<bigaf>	archive (big format)
+
+
+#------------------------------------------------------------------------------
+# $File: iff,v 1.12 2009/09/19 16:28:09 christos Exp $
+# iff:	file(1) magic for Interchange File Format (see also "audio" & "images")
+#
+# Daniel Quinlan (quinlan at yggdrasil.com) -- IFF was designed by Electronic
+# Arts for file interchange.  It has also been used by Apple, SGI, and
+# especially Commodore-Amiga.
+#
+# IFF files begin with an 8 byte FORM header, followed by a 4 character
+# FORM type, which is followed by the first chunk in the FORM.
+
+0	string		FORM		IFF data
+#>4	belong		x		\b, FORM is %d bytes long
+# audio formats
+>8	string		AIFF		\b, AIFF audio
+!:mime	audio/x-aiff
+>8	string		AIFC		\b, AIFF-C compressed audio
+!:mime	audio/x-aiff
+>8	string		8SVX		\b, 8SVX 8-bit sampled sound voice
+!:mime	audio/x-aiff
+>8	string		16SV		\b, 16SV 16-bit sampled sound voice
+>8	string		SAMP		\b, SAMP sampled audio
+>8	string		MAUD		\b, MAUD MacroSystem audio
+>8	string		SMUS		\b, SMUS simple music
+>8	string		CMUS		\b, CMUS complex music
+# image formats
+>8	string		ILBMBMHD	\b, ILBM interleaved image
+>>20	beshort		x		\b, %d x
+>>22	beshort		x		%d
+>8	string		RGBN		\b, RGBN 12-bit RGB image
+>8	string		RGB8		\b, RGB8 24-bit RGB image
+>8	string		DEEP		\b, DEEP TVPaint/XiPaint image
+>8	string		DR2D		\b, DR2D 2-D object
+>8	string		TDDD		\b, TDDD 3-D rendering
+>8	string		LWOB		\b, LWOB 3-D object
+>8	string		LWO2		\b, LWO2 3-D object, v2
+>8	string		LWLO		\b, LWLO 3-D layered object
+>8	string		REAL		\b, REAL Real3D rendering
+>8	string		MC4D		\b, MC4D MaxonCinema4D rendering
+>8	string		ANIM		\b, ANIM animation
+>8	string		YAFA		\b, YAFA animation
+>8	string		SSA\ 		\b, SSA super smooth animation
+>8	string		ACBM		\b, ACBM continuous image
+>8	string		FAXX		\b, FAXX fax image
+# other formats
+>8	string		FTXT		\b, FTXT formatted text
+>8	string		CTLG		\b, CTLG message catalog
+>8	string		PREF		\b, PREF preferences
+>8	string		DTYP		\b, DTYP datatype description
+>8	string		PTCH		\b, PTCH binary patch
+>8	string		AMFF		\b, AMFF AmigaMetaFile format
+>8	string		WZRD		\b, WZRD StormWIZARD resource
+>8	string		DOC\ 		\b, DOC desktop publishing document
+
+# These go at the end of the iff rules
+#
+# I don't see why these might collide with anything else.
+#
+# Interactive Fiction related formats
+#
+>8	string		IFRS		\b, Blorb Interactive Fiction
+>>24	string		Exec		with executable chunk
+>8	string          IFZS		\b, Z-machine or Glulx saved game file (Quetzal)
+
+#------------------------------------------------------------------------------
+# $File: images,v 1.64 2009/12/06 00:38:50 christos Exp $
+# images:  file(1) magic for image formats (see also "iff", and "c-lang" for
+# XPM bitmaps)
+#
+# originally from jef at helios.ee.lbl.gov (Jef Poskanzer),
+# additions by janl at ifi.uio.no as well as others. Jan also suggested
+# merging several one- and two-line files into here.
+#
+# little magic: PCX (first byte is 0x0a)
+
+# Targa - matches `povray', `ppmtotga' and `xv' outputs
+# by Philippe De Muyter <phdm at macqel.be>
+# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
+# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
+# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
+# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
+# `tgatoppm' recognizes a superset (Index may be anything)
+1	belong&0xfff7ffff	0x01010000	Targa image data - Map
+>2	byte&8			8		- RLE
+>12	leshort			>0		%hd x
+>14	leshort			>0		%hd
+1	belong&0xfff7ffff	0x00020000	Targa image data - RGB
+>2	byte&8			8		- RLE
+>12	leshort			>0		%hd x
+>14	leshort			>0		%hd
+1	belong&0xfff7ffff	0x00030000	Targa image data - Mono
+>2	byte&8			8		- RLE
+>12	leshort			>0		%hd x
+>14	leshort			>0		%hd
+
+# PBMPLUS images
+# The next byte following the magic is always whitespace.
+# strength is changed to try these patterns before "x86 boot sector"
+0  search/1    P1      
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PBM image text
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-bitmap
+0  search/1    P2      
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PGM image text
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-greymap
+0	search/1	P3
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PPM image text
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-pixmap
+0  string      P4      
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PBM "rawbits" image data
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-bitmap
+0  string      P5      
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PGM "rawbits" image data
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-greymap
+0  string      P6      
+>3 regex       =[0-9]*\ [0-9]*     Netpbm PPM "rawbits" image data
+>3 regex       =[0-9]+\        \b, size = %sx
+>>3    regex       =\ [0-9]+   \b%s
+!:strength + 45
+!:mime	image/x-portable-pixmap
+0	string		P7		Netpbm PAM image file
+!:mime	image/x-portable-pixmap
+
+# From: bryanh at giraffe-data.com (Bryan Henderson)
+0	string		\117\072	Solitaire Image Recorder format
+>4	string		\013		MGI Type 11
+>4	string		\021		MGI Type 17
+0	string		.MDA		MicroDesign data
+>21	byte		48		version 2
+>21	byte		51		version 3
+0	string		.MDP		MicroDesign page data
+>21	byte		48		version 2
+>21	byte		51		version 3
+
+# NIFF (Navy Interchange File Format, a modification of TIFF) images
+# [GRR:  this *must* go before TIFF]
+0	string		IIN1		NIFF image data
+!:mime	image/x-niff
+
+# Tag Image File Format, from Daniel Quinlan (quinlan at yggdrasil.com)
+# The second word of TIFF files is the TIFF version number, 42, which has
+# never changed.  The TIFF specification recommends testing for it.
+0	string		MM\x00\x2a	TIFF image data, big-endian
+!:mime	image/tiff
+0	string		II\x2a\x00	TIFF image data, little-endian
+!:mime	image/tiff
+
+# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
+# (Greg Roelofs, newt at uchicago.edu)
+# (Albert Cahalan, acahalan at cs.uml.edu)
+#
+# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
+#
+0	string		\x89PNG\x0d\x0a\x1a\x0a		PNG image data
+!:mime	image/png
+>16	belong		x		\b, %ld x
+>20	belong		x		%ld,
+>24	byte		x		%d-bit
+>25	byte		0		grayscale,
+>25	byte		2		\b/color RGB,
+>25	byte		3		colormap,
+>25	byte		4		gray+alpha,
+>25	byte		6		\b/color RGBA,
+#>26	byte		0		deflate/32K,
+>28	byte		0		non-interlaced
+>28	byte		1		interlaced
+
+# possible GIF replacements; none yet released!
+# (Greg Roelofs, newt at uchicago.edu)
+#
+# GRR 950115:  this was mine ("Zip GIF"):
+0	string		GIF94z		ZIF image (GIF+deflate alpha)
+!:mime	image/x-unknown
+#
+# GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):
+#					
+0	string		FGF95a		FGF image (GIF+deflate beta)
+!:mime	image/x-unknown
+#
+# GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal
+# (best; not yet implemented):
+#					
+0	string		PBF		PBF image (deflate compression)
+!:mime	image/x-unknown
+
+# GIF
+0	string		GIF8		GIF image data
+!:mime	image/gif
+!:apple	8BIMGIFf
+>4	string		7a		\b, version 8%s,
+>4	string		9a		\b, version 8%s,
+>6	leshort		>0		%hd x
+>8	leshort		>0		%hd
+#>10	byte		&0x80		color mapped,
+#>10	byte&0x07	=0x00		2 colors
+#>10	byte&0x07	=0x01		4 colors
+#>10	byte&0x07	=0x02		8 colors
+#>10	byte&0x07	=0x03		16 colors
+#>10	byte&0x07	=0x04		32 colors
+#>10	byte&0x07	=0x05		64 colors
+#>10	byte&0x07	=0x06		128 colors
+#>10	byte&0x07	=0x07		256 colors
+
+# ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,
+# 1 plane, no encoding.
+0	string		\361\0\100\273	CMU window manager raster image data
+>4	lelong		>0		%d x
+>8	lelong		>0		%d,
+>12	lelong		>0		%d-bit
+
+# Magick Image File Format
+0	string		id=ImageMagick	MIFF image data
+
+# Artisan
+0	long		1123028772	Artisan image data
+>4	long		1		\b, rectangular 24-bit
+>4	long		2		\b, rectangular 8-bit with colormap
+>4	long		3		\b, rectangular 32-bit (24-bit with matte)
+
+# FIG (Facility for Interactive Generation of figures), an object-based format
+0	search/1	#FIG		FIG image text
+>5	string		x		\b, version %.3s
+
+# PHIGS
+0	string		ARF_BEGARF		PHIGS clear text archive
+0	string		@(#)SunPHIGS		SunPHIGS
+# version number follows, in the form m.n
+>40	string		SunBin			binary
+>32	string		archive			archive
+
+# GKS (Graphics Kernel System)
+0	string		GKSM		GKS Metafile
+>24	string		SunGKS		\b, SunGKS
+
+# CGM image files
+0	string		BEGMF		clear text Computer Graphics Metafile
+
+# MGR bitmaps  (Michael Haardt, u31b3hs at pool.informatik.rwth-aachen.de)
+0	string	yz	MGR bitmap, modern format, 8-bit aligned
+0	string	zz	MGR bitmap, old format, 1-bit deep, 16-bit aligned
+0	string	xz	MGR bitmap, old format, 1-bit deep, 32-bit aligned
+0	string	yx	MGR bitmap, modern format, squeezed
+
+# Fuzzy Bitmap (FBM) images
+0	string		%bitmap\0	FBM image data
+>30	long		0x31		\b, mono
+>30	long		0x33		\b, color
+
+# facsimile data
+1	string		PC\ Research,\ Inc	group 3 fax data
+>29	byte		0		\b, normal resolution (204x98 DPI)
+>29	byte		1		\b, fine resolution (204x196 DPI)
+# From: Herbert Rosmanith <herp at wildsau.idv.uni.linz.at>
+0	string		Sfff		structured fax file
+
+
+# PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt at uchicago.edu)
+0	string		BM
+>14	leshort		12		PC bitmap, OS/2 1.x format
+!:mime	image/x-ms-bmp
+>>18	leshort		x		\b, %d x
+>>20	leshort		x		%d
+>14	leshort		64		PC bitmap, OS/2 2.x format
+!:mime	image/x-ms-bmp
+>>18	leshort		x		\b, %d x
+>>20	leshort		x		%d
+>14	leshort		40		PC bitmap, Windows 3.x format
+!:mime	image/x-ms-bmp
+>>18	lelong		x		\b, %d x
+>>22	lelong		x		%d x
+>>28	leshort		x		%d
+>14	leshort		128		PC bitmap, Windows NT/2000 format
+!:mime	image/x-ms-bmp
+>>18	lelong		x		\b, %d x
+>>22	lelong		x		%d x
+>>28	leshort		x		%d
+# Too simple - MPi
+#0	string		IC		PC icon data
+#0	string		PI		PC pointer image data
+#0	string		CI		PC color icon data
+#0	string		CP		PC color pointer image data
+# Conflicts with other entries [BABYL]
+#0	string		BA		PC bitmap array data
+
+# XPM icons (Greg Roelofs, newt at uchicago.edu)
+# note possible collision with C/REXX entry in c-lang; currently commented out
+0	search/1	/*\ XPM\ */	X pixmap image text
+
+# Utah Raster Toolkit RLE images (janl at ifi.uio.no)
+0	leshort		0xcc52		RLE image data,
+>6	leshort		x		%d x
+>8	leshort		x		%d
+>2	leshort		>0		\b, lower left corner: %d
+>4	leshort		>0		\b, lower right corner: %d
+>10	byte&0x1	=0x1		\b, clear first
+>10	byte&0x2	=0x2		\b, no background
+>10	byte&0x4	=0x4		\b, alpha channel
+>10	byte&0x8	=0x8		\b, comment
+>11	byte		>0		\b, %d color channels
+>12	byte		>0		\b, %d bits per pixel
+>13	byte		>0		\b, %d color map channels
+
+# image file format (Robert Potter, potter at cs.rochester.edu)
+0	string		Imagefile\ version-	iff image data
+# this adds the whole header (inc. version number), informative but longish
+>10	string		>\0		%s
+
+# Sun raster images, from Daniel Quinlan (quinlan at yggdrasil.com)
+0	belong		0x59a66a95	Sun raster image data
+>4	belong		>0		\b, %d x
+>8	belong		>0		%d,
+>12	belong		>0		%d-bit,
+#>16	belong		>0		%d bytes long,
+>20	belong		0		old format,
+#>20	belong		1		standard,
+>20	belong		2		compressed,
+>20	belong		3		RGB,
+>20	belong		4		TIFF,
+>20	belong		5		IFF,
+>20	belong		0xffff		reserved for testing,
+>24	belong		0		no colormap
+>24	belong		1		RGB colormap
+>24	belong		2		raw colormap
+#>28	belong		>0		colormap is %d bytes long
+
+# SGI image file format, from Daniel Quinlan (quinlan at yggdrasil.com)
+#
+# See
+#	http://reality.sgi.com/grafica/sgiimage.html
+#
+0	beshort		474		SGI image data
+#>2	byte		0		\b, verbatim
+>2	byte		1		\b, RLE
+#>3	byte		1		\b, normal precision
+>3	byte		2		\b, high precision
+>4	beshort		x		\b, %d-D
+>6	beshort		x		\b, %d x
+>8	beshort		x		%d
+>10	beshort		x		\b, %d channel
+>10	beshort		!1		\bs
+>80	string		>0		\b, "%s"
+
+0	string		IT01		FIT image data
+>4	belong		x		\b, %d x
+>8	belong		x		%d x
+>12	belong		x		%d
+#
+0	string		IT02		FIT image data
+>4	belong		x		\b, %d x
+>8	belong		x		%d x
+>12	belong		x		%d
+#
+2048	string		PCD_IPI		Kodak Photo CD image pack file
+>0xe02	byte&0x03	0x00		, landscape mode
+>0xe02	byte&0x03	0x01		, portrait mode
+>0xe02	byte&0x03	0x02		, landscape mode
+>0xe02	byte&0x03	0x03		, portrait mode
+0	string		PCD_OPA		Kodak Photo CD overview pack file
+
+# FITS format.  Jeff Uphoff <juphoff at tarsier.cv.nrao.edu>
+# FITS is the Flexible Image Transport System, the de facto standard for
+# data and image transfer, storage, etc., for the astronomical community.
+# (FITS floating point formats are big-endian.)
+0	string	SIMPLE\ \ =	FITS image data
+>109	string	8		\b, 8-bit, character or unsigned binary integer
+>108	string	16		\b, 16-bit, two's complement binary integer
+>107	string	\ 32		\b, 32-bit, two's complement binary integer
+>107	string	-32		\b, 32-bit, floating point, single precision
+>107	string	-64		\b, 64-bit, floating point, double precision
+
+# other images
+0	string	This\ is\ a\ BitMap\ file	Lisp Machine bit-array-file
+
+# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
+# stuff.
+#
+0	beshort		0x1010		PEX Binary Archive
+
+# DICOM medical imaging data
+128	string	DICM			DICOM medical imaging data
+!:mime	application/dicom
+
+# XWD - X Window Dump file.
+#   As described in /usr/X11R6/include/X11/XWDFile.h
+#   used by the xwd program.
+#   Bradford Castalia, idaeim, 1/01
+4	belong	7			XWD X Window Dump image data
+>100	string	>\0			\b, "%s"
+>16	belong	x			\b, %dx
+>20	belong	x			\b%dx
+>12	belong	x			\b%d
+
+# PDS - Planetary Data System
+#   These files use Parameter Value Language in the header section.
+#   Unfortunately, there is no certain magic, but the following
+#   strings have been found to be most likely.
+0	string	NJPL1I00		PDS (JPL) image data
+2	string	NJPL1I			PDS (JPL) image data
+0	string	CCSD3ZF			PDS (CCSD) image data
+2	string	CCSD3Z			PDS (CCSD) image data
+0	string	PDS_			PDS image data
+0	string	LBLSIZE=		PDS (VICAR) image data
+
+# pM8x: ATARI STAD compressed bitmap format
+#
+# from Oskar Schirmer <schirmer at scara.com> Feb 2, 2001
+# p M 8 5/6 xx yy zz data...
+# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
+# bytes either run horizontally (pM85) or vertically (pM86). yy is the
+# most frequent byte, xx and zz are runlength escape codes, where xx is
+# used for runs of yy.
+#
+0	string	pM85		Atari ST STAD bitmap image data (hor)
+>5	byte	0x00		(white background)
+>5	byte	0xFF		(black background)
+0	string	pM86		Atari ST STAD bitmap image data (vert)
+>5	byte	0x00		(white background)
+>5	byte	0xFF		(black background)
+
+# Gürkan Sengün <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+# http://www.atarimax.com/jindroush.atari.org/afmtatr.html
+0	leshort	0x0296		Atari ATR image
+
+# XXX:
+# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
+# magic.
+# SGI RICE image file <mpruett at sgi.com>
+#0	beshort	0x5249		RICE image
+#>2	beshort	x		v%d
+#>4	beshort	x		(%d x
+#>6	beshort	x		%d)
+#>8	beshort	0		8 bit
+#>8	beshort	1		10 bit
+#>8	beshort	2		12 bit
+#>8	beshort	3		13 bit
+#>10	beshort	0		4:2:2
+#>10	beshort	1		4:2:2:4
+#>10	beshort	2		4:4:4
+#>10	beshort	3		4:4:4:4
+#>12	beshort	1		RGB
+#>12	beshort	2		CCIR601
+#>12	beshort	3		RP175
+#>12	beshort	4		YUV
+
+#------------------------------------------------------------------------------
+#
+# Marco Schmidt (marcoschmidt at users.sourceforge.net) -- an image  file format
+# for the EPOC operating system, which is used with PDAs like those from Psion
+#
+# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description
+# of various EPOC file formats
+
+0	string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file
+
+# PCX image files
+# From: Dan Fandrich <dan at coneharvesters.com>
+0	beshort		0x0a00	PCX ver. 2.5 image data
+0	beshort		0x0a02	PCX ver. 2.8 image data, with palette
+0	beshort		0x0a03	PCX ver. 2.8 image data, without palette
+0	beshort		0x0a04	PCX for Windows image data
+0	beshort		0x0a05	PCX ver. 3.0 image data
+>4	leshort		x      bounding box [%hd,
+>6	leshort		x      %hd] -
+>8	leshort		x      [%hd,
+>10	leshort		x      %hd],
+>65	byte		>1	%d planes each of
+>3	byte		x	%hhd-bit
+>68	byte		0	image,
+>68	byte		1	colour,
+>68	byte		2	grayscale,
+>68	byte		>2	image,
+>68	byte		<0	image,
+>12	leshort		>0	%hd x
+>>14	leshort		x      %hd dpi,
+>2	byte		0	uncompressed
+>2	byte		1	RLE compressed
+
+# Adobe Photoshop
+# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
+0	string		8BPS Adobe Photoshop Image
+!:mime	image/vnd.adobe.photoshop
+>4   beshort 2 (PSB)
+>18  belong  x \b, %d x
+>14  belong  x %d,
+>24  beshort 0 bitmap
+>24  beshort 1 grayscale
+>>12 beshort 2 with alpha
+>24  beshort 2 indexed
+>24  beshort 3 RGB
+>>12 beshort 4 \bA
+>24  beshort 4 CMYK
+>>12 beshort 5 \bA
+>24  beshort 7 multichannel
+>24  beshort 8 duotone
+>24  beshort 9 lab
+>12  beshort > 1
+>>12  beshort x \b, %dx
+>12  beshort 1 \b,
+>22  beshort x %d-bit channel
+>12  beshort > 1 \bs
+
+# XV thumbnail indicator (ThMO)
+0	string		P7\ 332		XV thumbnail image data
+
+# NITF is defined by United States MIL-STD-2500A
+0	string	NITF	National Imagery Transmission Format
+>25	string	>\0	dated %.14s
+
+# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
+0	belong		0x00010008	GEM Image data
+>12	beshort		x		%d x
+>14	beshort		x		%d,
+>4	beshort		x		%d planes,
+>8	beshort		x		%d x
+>10	beshort		x		%d pixelsize
+
+# GEM Metafile (Wolfram Kleff)
+0	lelong		0x0018FFFF	GEM Metafile data
+>4	leshort		x		version %d
+
+#
+# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
+# Software Torbjorn Andersson <d91tan at Update.UU.SE>.
+#
+0	string	\0\nSMJPEG	SMJPEG
+>8	belong	x		%d.x data
+# According to the specification you could find any number of _TXT
+# headers here, but I can't think of any way of handling that. None of
+# the SMJPEG files I tried it on used this feature. Even if such a
+# file is encountered the output should still be reasonable.
+>16	string	_SND		\b,
+>>24	beshort	>0		%d Hz
+>>26	byte	8		8-bit
+>>26	byte	16		16-bit
+>>28	string	NONE		uncompressed
+# >>28	string	APCM		ADPCM compressed
+>>27	byte	1		mono
+>>28	byte	2		stereo
+# Help! Isn't there any way to avoid writing this part twice?
+>>32	string	_VID		\b,
+# >>>48	string	JFIF		JPEG
+>>>40	belong	>0		%d frames
+>>>44	beshort	>0		(%d x
+>>>46	beshort	>0		%d)
+>16	string	_VID		\b,
+# >>32	string	JFIF		JPEG
+>>24	belong	>0		%d frames
+>>28	beshort	>0		(%d x
+>>30	beshort	>0		%d)
+
+0	string	Paint\ Shop\ Pro\ Image\ File	Paint Shop Pro Image File
+
+# "thumbnail file" (icon)
+# descended from "xv", but in use by other applications as well (Wolfram Kleff)
+0       string          P7\ 332         XV "thumbnail file" (icon) data
+
+# taken from fkiss: (<yav at mte.biglobe.ne.jp> ?)
+0       string          KiSS            KISS/GS
+>4      byte            16              color
+>>5     byte            x               %d bit
+>>8     leshort         x               %d colors
+>>10    leshort         x               %d groups
+>4      byte            32              cell
+>>5     byte            x               %d bit
+>>8     leshort         x               %d x
+>>10    leshort         x               %d
+>>12    leshort         x               +%d
+>>14    leshort         x               +%d
+
+# Webshots (www.webshots.com), by John Harrison
+0       string          C\253\221g\230\0\0\0 Webshots Desktop .wbz file
+
+# Hercules DASD image files
+# From Jan Jaeger <jj at septa.nl>
+0       string  CKD_P370        Hercules CKD DASD image file
+>8      long    x               \b, %d heads per cylinder
+>12     long    x               \b, track size %d bytes
+>16     byte    x               \b, device type 33%2.2X
+
+0       string  CKD_C370        Hercules compressed CKD DASD image file
+>8      long    x               \b, %d heads per cylinder
+>12     long    x               \b, track size %d bytes
+>16     byte    x               \b, device type 33%2.2X
+
+0       string  CKD_S370        Hercules CKD DASD shadow file
+>8      long    x               \b, %d heads per cylinder
+>12     long    x               \b, track size %d bytes
+>16     byte    x               \b, device type 33%2.2X
+
+# Squeak images and programs - etoffi at softhome.net
+0	string		\146\031\0\0	Squeak image data
+0	search/1	'From\040Squeak	Squeak program text
+
+# partimage: file(1) magic for PartImage files (experimental, incomplete)
+# Author: Hans-Joachim Baader <hjb at pro-linux.de>
+0		string	PaRtImAgE-VoLuMe	PartImage
+>0x0020		string	0.6.1		file version %s
+>>0x0060	lelong	>-1		volume %ld
+#>>0x0064 8 byte identifier
+#>>0x007c reserved
+>>0x0200	string	>\0		type %s
+>>0x1400	string	>\0		device %s,
+>>0x1600	string	>\0		original filename %s,
+# Some fields omitted
+>>0x2744	lelong	0		not compressed
+>>0x2744	lelong	1		gzip compressed
+>>0x2744	lelong	2		bzip2 compressed
+>>0x2744	lelong	>2		compressed with unknown algorithm
+>0x0020		string	>0.6.1		file version %s
+>0x0020		string	<0.6.1		file version %s
+
+# DCX is multi-page PCX, using a simple header of up to 1024
+# offsets for the respective PCX components.
+# From: Joerg Wunsch <joerg_wunsch at uriah.heep.sax.de>
+0	lelong	987654321	DCX multi-page PCX image data
+
+# Simon Walton <simonw at matteworld.com>
+# Kodak Cineon format for scanned negatives
+# http://www.kodak.com/US/en/motion/support/dlad/
+0	lelong  0xd75f2a80	Cineon image data
+>200	belong  >0		\b, %ld x
+>204	belong  >0		%ld
+
+
+# Bio-Rad .PIC is an image format used by microscope control systems
+# and related image processing software used by biologists.
+# From: Vebjorn Ljosa <vebjorn at ljosa.com>
+# BOOL values are two-byte integers; use them to rule out false positives.
+# http://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt
+# Samples: http://www.loci.wisc.edu/software/sample-data
+14 leshort <2
+>62    leshort <2
+>>54   leshort 12345       Bio-Rad .PIC Image File
+>>>0   leshort >0      %hd x
+>>>2   leshort >0      %hd,
+>>>4   leshort =1      1 image in file
+>>>4   leshort >1      %hd images in file
+
+# From Jan "Yenya" Kasprzak <kas at fi.muni.cz>
+# The description of *.mrw format can be found at
+# http://www.dalibor.cz/minolta/raw_file_format.htm
+0	string	\000MRM			Minolta Dimage camera raw image data
+
+# Summary: DjVu image / document
+# Extension: .djvu
+# Reference: http://djvu.org/docs/DjVu3Spec.djvu
+# Submitted by: Stephane Loeuillet <stephane.loeuillet at tiscali.fr>
+# Modified by (1): Abel Cheung <abelcheung at gmail.com>
+0	string	AT&TFORM
+>12	string	DJVM		DjVu multiple page document
+!:mime	image/vnd.djvu
+>12	string	DJVU		DjVu image or single page document
+!:mime	image/vnd.djvu
+>12	string	DJVI		DjVu shared document
+!:mime	image/vnd.djvu
+>12	string	THUM		DjVu page thumbnails
+!:mime	image/vnd.djvu
+
+
+# From Marc Espie
+0	lelong	20000630		OpenEXR image data
+
+# From: Tom Hilinski <tom.hilinski at comcast.net>
+# http://www.unidata.ucar.edu/packages/netcdf/
+0	string	CDF\001			NetCDF Data Format data
+
+#-----------------------------------------------------------------------
+# Hierarchical Data Format, used to facilitate scientific data exchange
+# specifications at http://hdf.ncsa.uiuc.edu/
+0	belong	0x0e031301	Hierarchical Data Format (version 4) data
+!:mime	application/x-hdf
+0	string	\211HDF\r\n\032	Hierarchical Data Format (version 5) data
+!:mime	application/x-hdf
+
+# From: Tobias Burnus <burnus at net-b.de>
+# Xara (for a while: Corel Xara) is a graphic package, see
+# http://www.xara.com/ for Windows and as GPL application for Linux
+0	string	XARA\243\243	Xara graphics file
+
+# http://www.cartesianinc.com/Tech/
+0	string	CPC\262		Cartesian Perceptual Compression image
+!:mime	image/x-cpi
+
+# From Albert Cahalan <acahalan at gmail.com>
+# puredigital used it for the CVS disposable camcorder
+#8       lelong  4       ZBM bitmap image data
+#>4      leshort x       %u x
+#>6      leshort x       %u
+
+# From Albert Cahalan <acahalan at gmail.com>
+# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
+0       string C565     OLPC firmware icon image data
+>4      leshort x       %u x
+>6      leshort x       %u
+
+# Applied Images - Image files from Cytovision
+# Gustavo Junior Alves <gjalves at gjalves.com.br>
+0	string	\xce\xda\xde\xfa	Cytovision Metaphases file
+0	string	\xed\xad\xef\xac	Cytovision Karyotype file
+0	string	\x0b\x00\x03\x00	Cytovision FISH Probe file
+0	string	\xed\xfe\xda\xbe	Cytovision FLEX file
+0	string	\xed\xab\xed\xfe	Cytovision FLEX file
+0	string	\xad\xfd\xea\xad	Cytovision RATS file
+
+# Wavelet Scalar Quantization format used in gray-scale fingerprint images
+# From Tano M Fotang <mfotang at quanteq.com>
+0	string	\xff\xa0\xff\xa8\x00	Wavelet Scalar Quantization image data
+
+# JPEG 2000 Code Stream Bitmap
+# From Petr Splichal <psplicha at redhat.com>
+0	string	\xFF\x4F\xFF\x51\x00	JPEG-2000 Code Stream Bitmap data
+
+#------------------------------------------------------------------------------
+# $File: inform,v 1.5 2009/09/19 16:28:09 christos Exp $
+# inform:  file(1) magic for Inform interactive fiction language
+
+# URL:  http://www.inform-fiction.org/
+# From: Reuben Thomas <rrt at sc3d.org>
+
+0	search/100/cW	constant\ story		Inform source text
+
+#------------------------------------------------------------------------------
+# $File: intel,v 1.8 2009/09/19 16:28:10 christos Exp $
+# intel:  file(1) magic for x86 Unix
+#
+# Various flavors of x86 UNIX executable/object (other than Xenix, which
+# is in "microsoft").  DOS is in "msdos"; the ambitious soul can do
+# Windows as well.
+#
+# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
+# whatever comes next (HP-PA Hummingbird?).  OS/2 may also go elsewhere
+# as well, if, as, and when IBM makes it portable.
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+0	leshort		0502		basic-16 executable
+>12	lelong		>0		not stripped
+#>22	leshort		>0		- version %ld
+0	leshort		0503		basic-16 executable (TV)
+>12	lelong		>0		not stripped
+#>22	leshort		>0		- version %ld
+0	leshort		0510		x86 executable
+>12	lelong		>0		not stripped
+0	leshort		0511		x86 executable (TV)
+>12	lelong		>0		not stripped
+0	leshort		=0512		iAPX 286 executable small model (COFF)
+>12	lelong		>0		not stripped
+#>22	leshort		>0		- version %ld
+0	leshort		=0522		iAPX 286 executable large model (COFF)
+>12	lelong		>0		not stripped
+#>22	leshort		>0		- version %ld
+# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
+0	leshort		=0514		80386 COFF executable
+>12	lelong		>0		not stripped
+>22	leshort		>0		- version %ld
+
+# rom: file(1) magic for BIOS ROM Extensions found in intel machines
+#      mapped into memory between 0xC0000 and 0xFFFFF
+# From Gürkan Sengün <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+0        beshort         0x55AA       BIOS (ia32) ROM Ext.
+>5       string          USB          USB
+>7       string          LDR          UNDI image
+>30      string          IBM          IBM comp. Video
+>26      string          Adaptec      Adaptec
+>28      string          Adaptec      Adaptec
+>42      string          PROMISE      Promise
+>2       byte            x            (%d*512)
+
+#------------------------------------------------------------------------------
+# $File: interleaf,v 1.10 2009/09/19 16:28:10 christos Exp $
+# interleaf:  file(1) magic for InterLeaf TPS:
+#
+0	string		=\210OPS	Interleaf saved data
+0	string		=<!OPS		Interleaf document text
+>5	string		,\ Version\ =	\b, version
+>>17	string		>\0		%.3s
+
+#------------------------------------------------------------------------------
+# $File: island,v 1.5 2009/09/19 16:28:10 christos Exp $
+# island:  file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
+# "/etc/magic":
+# From: guy at netapp.com (Guy Harris)
+#
+4	string		pgscriptver	IslandWrite document
+13	string		DrawFile	IslandDraw document
+
+
+#------------------------------------------------------------------------------
+# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $
+# ispell:  file(1) magic for ispell
+#
+# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602.  This magic
+# will match 0x9600 through 0x9603 in *both* little endian and big endian.
+# (No other current magic entries collide.)
+#
+# Updated by Daniel Quinlan (quinlan at yggdrasil.com)
+#
+0	leshort&0xFFFC	0x9600		little endian ispell
+>0	byte		0		hash file (?),
+>0	byte		1		3.0 hash file,
+>0	byte		2		3.1 hash file,
+>0	byte		3		hash file (?),
+>2	leshort		0x00		8-bit, no capitalization, 26 flags
+>2	leshort		0x01		7-bit, no capitalization, 26 flags
+>2	leshort		0x02		8-bit, capitalization, 26 flags
+>2	leshort		0x03		7-bit, capitalization, 26 flags
+>2	leshort		0x04		8-bit, no capitalization, 52 flags
+>2	leshort		0x05		7-bit, no capitalization, 52 flags
+>2	leshort		0x06		8-bit, capitalization, 52 flags
+>2	leshort		0x07		7-bit, capitalization, 52 flags
+>2	leshort		0x08		8-bit, no capitalization, 128 flags
+>2	leshort		0x09		7-bit, no capitalization, 128 flags
+>2	leshort		0x0A		8-bit, capitalization, 128 flags
+>2	leshort		0x0B		7-bit, capitalization, 128 flags
+>2	leshort		0x0C		8-bit, no capitalization, 256 flags
+>2	leshort		0x0D		7-bit, no capitalization, 256 flags
+>2	leshort		0x0E		8-bit, capitalization, 256 flags
+>2	leshort		0x0F		7-bit, capitalization, 256 flags
+>4	leshort		>0		and %d string characters
+0	beshort&0xFFFC	0x9600		big endian ispell
+>1	byte		0		hash file (?),
+>1	byte		1		3.0 hash file,
+>1	byte		2		3.1 hash file,
+>1	byte		3		hash file (?),
+>2	beshort		0x00		8-bit, no capitalization, 26 flags
+>2	beshort		0x01		7-bit, no capitalization, 26 flags
+>2	beshort		0x02		8-bit, capitalization, 26 flags
+>2	beshort		0x03		7-bit, capitalization, 26 flags
+>2	beshort		0x04		8-bit, no capitalization, 52 flags
+>2	beshort		0x05		7-bit, no capitalization, 52 flags
+>2	beshort		0x06		8-bit, capitalization, 52 flags
+>2	beshort		0x07		7-bit, capitalization, 52 flags
+>2	beshort		0x08		8-bit, no capitalization, 128 flags
+>2	beshort		0x09		7-bit, no capitalization, 128 flags
+>2	beshort		0x0A		8-bit, capitalization, 128 flags
+>2	beshort		0x0B		7-bit, capitalization, 128 flags
+>2	beshort		0x0C		8-bit, no capitalization, 256 flags
+>2	beshort		0x0D		7-bit, no capitalization, 256 flags
+>2	beshort		0x0E		8-bit, capitalization, 256 flags
+>2	beshort		0x0F		7-bit, capitalization, 256 flags
+>4	beshort		>0		and %d string characters
+# ispell 4.0 hash files  kromJx <kromJx at crosswinds.net>
+# Ispell 4.0
+0       string          ISPL            ispell
+>4      long            x               hash file version %d,
+>8      long            x               lexletters %d,
+>12     long            x               lexsize %d,
+>16     long            x               hashsize %d,
+>20     long            x               stblsize %d
+
+#------------------------------------------------------------
+# $File: java,v 1.12 2009/09/19 16:28:10 christos Exp $
+# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the
+# same magic number, 0xcafebabe, so they are both handled
+# in the entry called "cafebabe".
+#------------------------------------------------------------
+# Java serialization
+# From Martin Pool (m.pool at pharos.com.au)
+0	beshort		0xaced		Java serialization data
+>2	beshort		>0x0004		\b, version %d
+
+0	belong		0xfeedfeed	Java KeyStore
+!:mime	application/x-java-keystore
+0	belong		0xcececece	Java JCE KeyStore
+!:mime	application/x-java-jce-keystore
+
+# Dalvik .dex format. http://retrodev.com/android/dexformat.html
+# From <mkf at google.com> "Mike Fleming"
+0	string	dex\n
+>0	regex	dex\n[0-9][0-9][0-9]\0	Dalvik dex file
+>4	string	>000			version %s
+0	string	dey\n
+>0	regex	dey\n[0-9][0-9][0-9]\0	Dalvik dex file (optimized for host)
+>4	string	>000			version %s
+
+
+#------------------------------------------------------------------------------
+# $File: jpeg,v 1.15 2009/09/19 16:28:10 christos Exp $
+# JPEG images
+# SunOS 5.5.1 had
+#
+#	0	string		\377\330\377\340	JPEG file
+#	0	string		\377\330\377\356	JPG file
+#
+# both of which turn into "JPEG image data" here.
+#
+0	beshort		0xffd8		JPEG image data
+!:mime	image/jpeg
+!:apple	8BIMJPEG
+!:strength +1
+>6	string		JFIF		\b, JFIF standard
+# The following added by Erik Rossen <rossen at freesurf.ch> 1999-09-06
+# in a vain attempt to add image size reporting for JFIF.  Note that these
+# tests are not fool-proof since some perfectly valid JPEGs are currently
+# impossible to specify in magic(4) format.
+# First, a little JFIF version info:
+>>11	byte		x		\b %d.
+>>12	byte		x		\b%02d
+# Next, the resolution or aspect ratio of the image:
+#>>13	byte		0		\b, aspect ratio
+#>>13	byte		1		\b, resolution (DPI)
+#>>13	byte		2		\b, resolution (DPCM)
+#>>4	beshort		x		\b, segment length %d
+# Next, show thumbnail info, if it exists:
+>>18	byte		!0		\b, thumbnail %dx
+>>>19	byte		x		\b%d
+
+# EXIF moved down here to avoid reporting a bogus version number,
+# and EXIF version number printing added.
+#   - Patrik R=E5dman <patrik+file-magic at iki.fi>
+>6	string		Exif		\b, EXIF standard
+# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
+# All possible combinations of entries have to be enumerated, since no looping
+# is possible. And both endians are possible...
+# The combinations included below are from real-world JPEGs.
+# Little-endian
+>>12	string		II		
+# IFD 0 Entry #5:
+>>>70	leshort		0x8769          
+# EXIF IFD Entry #1:
+>>>>(78.l+14)	leshort	0x9000		
+>>>>>(78.l+23)	byte	x		%c
+>>>>>(78.l+24)	byte	x		\b.%c
+>>>>>(78.l+25)	byte	!0x30		\b%c
+# IFD 0 Entry #9:
+>>>118	leshort		0x8769          
+# EXIF IFD Entry #3:
+>>>>(126.l+38)	leshort	0x9000		
+>>>>>(126.l+47)	byte	x		%c
+>>>>>(126.l+48)	byte	x		\b.%c
+>>>>>(126.l+49)	byte	!0x30		\b%c
+# IFD 0 Entry #10
+>>>130	leshort		0x8769          
+# EXIF IFD Entry #3:
+>>>>(138.l+38)	leshort	0x9000		
+>>>>>(138.l+47)	byte	x		%c
+>>>>>(138.l+48)	byte	x		\b.%c
+>>>>>(138.l+49)	byte	!0x30		\b%c
+# EXIF IFD Entry #4:
+>>>>(138.l+50)	leshort	0x9000		
+>>>>>(138.l+59)	byte	x		%c
+>>>>>(138.l+60)	byte	x		\b.%c
+>>>>>(138.l+61)	byte	!0x30		\b%c
+# EXIF IFD Entry #5:
+>>>>(138.l+62)	leshort	0x9000		
+>>>>>(138.l+71)	byte	x		%c
+>>>>>(138.l+72)	byte	x		\b.%c
+>>>>>(138.l+73)	byte	!0x30		\b%c
+# IFD 0 Entry #11
+>>>142	leshort		0x8769          
+# EXIF IFD Entry #3:
+>>>>(150.l+38)	leshort	0x9000		
+>>>>>(150.l+47)	byte	x		%c
+>>>>>(150.l+48)	byte	x		\b.%c
+>>>>>(150.l+49)	byte	!0x30		\b%c
+# EXIF IFD Entry #4:
+>>>>(150.l+50)	leshort	0x9000		
+>>>>>(150.l+59)	byte	x		%c
+>>>>>(150.l+60)	byte	x		\b.%c
+>>>>>(150.l+61)	byte	!0x30		\b%c
+# EXIF IFD Entry #5:
+>>>>(150.l+62)	leshort	0x9000		
+>>>>>(150.l+71)	byte	x		%c
+>>>>>(150.l+72)	byte	x		\b.%c
+>>>>>(150.l+73)	byte	!0x30		\b%c
+# Big-endian
+>>12	string		MM		
+# IFD 0 Entry #9:
+>>>118	beshort		0x8769          
+# EXIF IFD Entry #1:
+>>>>(126.L+14)	beshort	0x9000		
+>>>>>(126.L+23)	byte	x		%c
+>>>>>(126.L+24)	byte	x		\b.%c
+>>>>>(126.L+25)	byte	!0x30		\b%c
+# EXIF IFD Entry #3:
+>>>>(126.L+38)	beshort	0x9000		
+>>>>>(126.L+47)	byte	x		%c
+>>>>>(126.L+48)	byte	x		\b.%c
+>>>>>(126.L+49)	byte	!0x30		\b%c
+# IFD 0 Entry #10
+>>>130	beshort		0x8769          
+# EXIF IFD Entry #3:
+>>>>(138.L+38)	beshort	0x9000		
+>>>>>(138.L+47)	byte	x		%c
+>>>>>(138.L+48)	byte	x		\b.%c
+>>>>>(138.L+49)	byte	!0x30		\b%c
+# EXIF IFD Entry #5:
+>>>>(138.L+62)	beshort	0x9000		
+>>>>>(138.L+71)	byte	x		%c
+>>>>>(138.L+72)	byte	x		\b.%c
+>>>>>(138.L+73)	byte	!0x30		\b%c
+# IFD 0 Entry #11
+>>>142	beshort		0x8769          
+# EXIF IFD Entry #4:
+>>>>(150.L+50)	beshort	0x9000		
+>>>>>(150.L+59)	byte	x		%c
+>>>>>(150.L+60)	byte	x		\b.%c
+>>>>>(150.L+61)	byte	!0x30		\b%c
+# Here things get sticky.  We can do ONE MORE marker segment with
+# indirect addressing, and that's all.  It would be great if we could
+# do pointer arithemetic like in an assembler language.  Christos?
+# And if there was some sort of looping construct to do searches, plus a few
+# named accumulators, it would be even more effective...
+# At least we can show a comment if no other segments got inserted before:
+>(4.S+5)	byte		0xFE
+>>(4.S+8)	string		>\0		\b, comment: "%s"
+# FIXME: When we can do non-byte counted strings, we can use that to get
+# the string's count, and fix Debian bug #283760
+#>(4.S+5)	byte		0xFE		\b, comment
+#>>(4.S+6)	beshort		x		\b length=%d
+#>>(4.S+8)	string		>\0		\b, "%s"
+# Or, we can show the encoding type (I've included only the three most common)
+# and image dimensions if we are lucky and the SOFn (image segment) is here:
+>(4.S+5)	byte		0xC0		\b, baseline
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+>(4.S+5)	byte		0xC1		\b, extended sequential
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+>(4.S+5)	byte		0xC2		\b, progressive
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+# I've commented-out quantisation table reporting.  I doubt anyone cares yet.
+#>(4.S+5)	byte		0xDB		\b, quantisation table
+#>>(4.S+6)	beshort		x		\b length=%d
+#>14	beshort		x		\b, %d x
+#>16	beshort		x		\b %d
+
+# HSI is Handmade Software's proprietary JPEG encoding scheme
+0	string		hsi1		JPEG image data, HSI proprietary
+
+# From: David Santinoli <david at santinoli.com>
+0	string		\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A	JPEG 2000 image data
+
+# Type: JPEG 2000 codesream
+# From: Mathieu Malaterre <mathieu.malaterre at gmail.com>
+0	belong		0xff4fff51						JPEG 2000 codestream
+45	beshort		0xff52
+
+#------------------------------------------------------------------------------
+# $File: karma,v 1.6 2009/09/19 16:28:10 christos Exp $
+# karma:  file(1) magic for Karma data files
+#
+# From <rgooch at atnf.csiro.au>
+
+0	string		KarmaRHD Version	Karma Data Structure Version
+>16	belong		x		%lu
+
+#------------------------------------------------------------------------------
+# $File: kde,v 1.4 2009/09/19 16:28:10 christos Exp $
+# kde:  file(1) magic for KDE
+
+0		string	[KDE\ Desktop\ Entry]	KDE desktop entry
+!:mime	application/x-kdelnk
+0		string	#\ KDE\ Config\ File	KDE config file
+!:mime	application/x-kdelnk
+0		string	#\ xmcd	xmcd database file for kscd
+!:mime	text/x-xmcd
+
+#------------------------------------------------------------------------------
+# $File: kml,v 1.2 2009/09/19 16:28:10 christos Exp $
+# Type: Google KML, formerly Keyhole Markup Language
+# Future development of this format has been handed
+# over to the Open Geospatial Consortium.
+# http://www.opengeospatial.org/standards/kml/
+# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
+0 string    \<?xml
+>20  search/400 \ xmlns= 
+>>&0 regex ['"]http://earth.google.com/kml Google KML document
+!:mime application/vnd.google-earth.kml+xml
+>>>&1 string 2.0' \b, version 2.0
+>>>&1 string 2.1' \b, version 2.1
+>>>&1 string 2.2' \b, version 2.2
+
+#------------------------------------------------------------------------------
+# Type: OpenGIS KML, formerly Keyhole Markup Language
+# This standard is maintained by the
+# Open Geospatial Consortium.
+# http://www.opengeospatial.org/standards/kml/
+# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
+>>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document
+!:mime application/vnd.google-earth.kml+xml
+>>>&1 string 2.2 \b, version 2.2
+
+#------------------------------------------------------------------------------
+# Type: Google KML Archive (ZIP based) 
+# http://code.google.com/apis/kml/documentation/kml_tut.html
+# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
+0 string    PK\003\004
+>4  byte    0x14
+>>30  string doc.kml Compressed Google KML Document, including resources.
+!:mime application/vnd.google-earth.kmz
+
+#------------------------------------------------------------------------------
+# $File: lecter,v 1.4 2009/09/19 16:28:10 christos Exp $
+# DEC SRC Virtual Paper: Lectern files
+# Karl M. Hegbloom <karlheg at inetarena.com>
+0	string	lect	DEC SRC Virtual Paper Lectern file
+
+#------------------------------------------------------------------------------
+# $File: lex,v 1.6 2009/09/19 16:28:10 christos Exp $
+# lex:  file(1) magic for lex
+#
+#	derived empirically, your offsets may vary!
+0	search/100	yyprevious	C program text (from lex)
+>3	search/1	>\0		 for %s
+# C program text from GNU flex, from Daniel Quinlan <quinlan at yggdrasil.com>
+0	search/100	generated\ by\ flex	C program text (from flex)
+# lex description file, from Daniel Quinlan <quinlan at yggdrasil.com>
+0	search/1	%{		lex description text
+
+#------------------------------------------------------------------------------
+# $File: lif,v 1.8 2009/09/19 16:28:10 christos Exp $
+# lif:  file(1) magic for lif
+#
+# (Daniel Quinlan <quinlan at yggdrasil.com>)
+#
+0	beshort		0x8000		lif file
+
+#------------------------------------------------------------------------------
+# $File: linux,v 1.33 2009/10/23 16:44:59 christos Exp $
+# linux:  file(1) magic for Linux files
+#
+# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan at yggdrasil.com>
+# The following basic Linux magic is useful for reference, but using
+# "long" magic is a better practice in order to avoid collisions.
+#
+# 2	leshort		100		Linux/i386
+# >0	leshort		0407		impure executable (OMAGIC)
+# >0	leshort		0410		pure executable (NMAGIC)
+# >0	leshort		0413		demand-paged executable (ZMAGIC)
+# >0	leshort		0314		demand-paged executable (QMAGIC)
+#
+0	lelong		0x00640107	Linux/i386 impure executable (OMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x00640108	Linux/i386 pure executable (NMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x0064010b	Linux/i386 demand-paged executable (ZMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x006400cc	Linux/i386 demand-paged executable (QMAGIC)
+>16	lelong		0		\b, stripped
+#
+0	string		\007\001\000	Linux/i386 object file
+>20	lelong		>0x1020		\b, DLL library
+# Linux-8086 stuff:
+0	string		\01\03\020\04	Linux-8086 impure executable
+>28	long		!0		not stripped
+0	string		\01\03\040\04	Linux-8086 executable
+>28	long		!0		not stripped
+#
+0	string		\243\206\001\0	Linux-8086 object file
+#
+0	string		\01\03\020\20	Minix-386 impure executable
+>28	long		!0		not stripped
+0	string		\01\03\040\20	Minix-386 executable
+>28	long		!0		not stripped
+# core dump file, from Bill Reynolds <bill at goshawk.lanl.gov>
+216	lelong		0421		Linux/i386 core file
+>220	string		>\0		of '%s'
+>200	lelong		>0		(signal %d)
+#
+# LILO boot/chain loaders, from Daniel Quinlan <quinlan at yggdrasil.com>
+# this can be overridden by the DOS executable (COM) entry
+2	string		LILO		Linux/i386 LILO boot/chain loader
+#
+# PSF fonts, from H. Peter Anvin <hpa at yggdrasil.com>
+0	leshort		0x0436		Linux/i386 PC Screen Font data,
+>2	byte		0		256 characters, no directory,
+>2	byte		1		512 characters, no directory,
+>2	byte		2		256 characters, Unicode directory,
+>2	byte		3		512 characters, Unicode directory,
+>3	byte		>0		8x%d
+# Linux swap file, from Daniel Quinlan <quinlan at yggdrasil.com>
+4086	string		SWAP-SPACE	Linux/i386 swap file
+# From: Jeff Bailey <jbailey at ubuntu.com>
+# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey at ubuntu.com>
+4076	string		SWAPSPACE2S1SUSPEND	Linux/i386 swap file (new style) with SWSUSP1 image
+# according to man page of mkswap (8) March 1999
+4086	string		SWAPSPACE2	Linux/i386 swap file (new style)
+>0x400	long		x		%d (4K pages)
+>0x404	long		x		size %d pages
+>>4086	string		SWAPSPACE2	
+>>>1052	string		>\0		Label %s
+# From Daniel Novotny <dnovotny at redhat.com>
+# swap file for PowerPC
+65526	string		SWAPSPACE2	Linux/ppc swap file
+16374   string          SWAPSPACE2      Linux/ia64 swap file
+# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
+#
+#	from Erik Troan (ewt at redhat.com) examining od dumps, so this
+#		could be wrong
+#      updated by David Mosberger (davidm at azstarnet.com) based on
+#      GNU BFD and MIPS info found below.
+#
+0	leshort		0x0183		ECOFF alpha
+>24	leshort		0407		executable
+>24	leshort		0410		pure
+>24	leshort		0413		demand paged
+>8	long		>0		not stripped
+>8	long		0		stripped
+>23	leshort		>0		- version %ld.
+#
+# Linux kernel boot images, from Albert Cahalan <acahalan at cs.uml.edu>
+# and others such as Axel Kohlmeyer <akohlmey at rincewind.chemie.uni-ulm.de>
+# and Nicol�s Lichtmaier <nick at debian.org>
+# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
+# Linux kernel boot images (i386 arch) (Wolfram Kleff)
+514	string		HdrS		Linux kernel
+>510	leshort		0xAA55		x86 boot executable
+>>518	leshort		>0x1ff
+>>>529	byte		0		zImage,
+>>>529	byte		1		bzImage,
+>>>(526.s+0x200) string	>\0		version %s,
+>>498	leshort		1		RO-rootFS,
+>>498	leshort		0		RW-rootFS,
+>>508	leshort		>0		root_dev 0x%X,
+>>502	leshort		>0		swap_dev 0x%X,
+>>504	leshort		>0		RAMdisksize %u KB,
+>>506	leshort		0xFFFF		Normal VGA
+>>506	leshort		0xFFFE		Extended VGA
+>>506	leshort		0xFFFD		Prompt for Videomode
+>>506	leshort		>0		Video mode %d
+# This also matches new kernels, which were caught above by "HdrS".
+0		belong	0xb8c0078e	Linux kernel
+>0x1e3		string	Loading		version 1.3.79 or older
+>0x1e9		string	Loading		from prehistoric times
+
+# System.map files - Nicol�s Lichtmaier <nick at debian.org>
+8	search/1	\ A\ _text	Linux kernel symbol map text
+
+# LSM entries - Nicol�s Lichtmaier <nick at debian.org>
+0	search/1	Begin3	Linux Software Map entry text
+0	search/1	Begin4	Linux Software Map entry text (new format)
+
+# From Matt Zimmerman, enhanced for v3 by Matthew Palmer
+0	belong	0x4f4f4f4d	User-mode Linux COW file
+>4	belong	<3		\b, version %d
+>>8	string	>\0		\b, backing file %s
+>4	belong	>2		\b, version %d
+>>32	string	>\0		\b, backing file %s
+
+############################################################################
+# Linux kernel versions
+
+0		string		\xb8\xc0\x07\x8e\xd8\xb8\x00\x90	Linux
+>497		leshort		0		x86 boot sector
+>>514		belong		0x8e	of a kernel from the dawn of time!
+>>514		belong		0x908ed8b4	version 0.99-1.1.42
+>>514		belong		0x908ed8b8	for memtest86
+
+>497		leshort		!0		x86 kernel
+>>504		leshort		>0		RAMdisksize=%u KB
+>>502		leshort		>0		swap=0x%X
+>>508		leshort		>0		root=0x%X
+>>>498		leshort		1		\b-ro
+>>>498		leshort		0		\b-rw
+>>506		leshort		0xFFFF		vga=normal
+>>506		leshort		0xFFFE		vga=extended
+>>506		leshort		0xFFFD		vga=ask
+>>506		leshort		>0		vga=%d
+>>514		belong		0x908ed881	version 1.1.43-1.1.45
+>>514		belong		0x15b281cd
+>>>0xa8e	belong		0x55AA5a5a	version 1.1.46-1.2.13,1.3.0
+>>>0xa99	belong		0x55AA5a5a	version 1.3.1,2
+>>>0xaa3	belong		0x55AA5a5a	version 1.3.3-1.3.30
+>>>0xaa6	belong		0x55AA5a5a	version 1.3.31-1.3.41
+>>>0xb2b	belong		0x55AA5a5a	version 1.3.42-1.3.45
+>>>0xaf7	belong		0x55AA5a5a	version 1.3.46-1.3.72
+>>514		string		HdrS
+>>>518		leshort		>0x1FF
+>>>>529		byte		0		\b, zImage
+>>>>529		byte		1		\b, bzImage
+>>>>(526.s+0x200) string 	>\0		\b, version %s
+
+# Linux boot sector thefts.
+0		belong		0xb8c0078e	Linux
+>0x1e6		belong		0x454c4b53	ELKS Kernel
+>0x1e6		belong		!0x454c4b53	style boot sector
+
+############################################################################
+# Linux S390 executable
+8 string \x02\x00\x00\x18\x60\x00\x00\x50\x02\x00\x00\x68\x60\x00\x00\x50\x40\x40\x40\x40\x40\x40\x40\x40 Linux S390
+>0x00010000 search/b/4096 \x00\x0a\x00\x00\x8b\xad\xcc\xcc
+# 64bit
+>>&0 string \xc1\x00\xef\xe3\xf0\x68\x00\x00 Z10 64bit kernel
+>>&0 string \xc1\x00\xef\xc3\x00\x00\x00\x00 Z9-109 64bit kernel
+>>&0 string \xc0\x00\x20\x00\x00\x00\x00\x00 Z990 64bit kernel
+>>&0 string \x00\x00\x00\x00\x00\x00\x00\x00 Z900 64bit kernel
+# 32bit
+>>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z10 32bit kernel
+>>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z9-109 32bit kernel
+>>&0 string \x80\x00\x20\x00\x00\x00\x00\x00 Z990 32bit kernel
+>>&0 string \x80\x00\x00\x00\x00\x00\x00\x00 Z900 32bit kernel
+
+############################################################################
+# Linux 8086 executable
+0	lelong&0xFF0000FF 0xC30000E9	Linux-Dev86 executable, headerless
+>5	string		.		
+>>4	string		>\0		\b, libc version %s
+
+0	lelong&0xFF00FFFF 0x4000301	Linux-8086 executable
+>2	byte&0x01	!0		\b, unmapped zero page
+>2	byte&0x20	0		\b, impure
+>2	byte&0x20	!0
+>>2	byte&0x10	!0		\b, A_EXEC
+>2	byte&0x02	!0		\b, A_PAL
+>2	byte&0x04	!0		\b, A_NSYM
+>2	byte&0x08	!0		\b, A_STAND
+>2	byte&0x40	!0		\b, A_PURE
+>2	byte&0x80	!0		\b, A_TOVLY
+>28     long            !0              \b, not stripped
+>37	string		.		
+>>36	string		>\0		\b, libc version %s
+
+# 0	lelong&0xFF00FFFF 0x10000301	ld86 I80386 executable
+# 0	lelong&0xFF00FFFF 0xB000301	ld86 M68K executable
+# 0	lelong&0xFF00FFFF 0xC000301	ld86 NS16K executable
+# 0	lelong&0xFF00FFFF 0x17000301	ld86 SPARC executable
+
+# SYSLINUX boot logo files (from 'ppmtolss16' sources)
+# http://syslinux.zytor.com/
+#
+0	lelong	=0x1413f33d		SYSLINUX' LSS16 image data
+>4	leshort	x			\b, width %d
+>6	leshort	x			\b, height %d
+
+0	string	OOOM			User-Mode-Linux's Copy-On-Write disk image
+>4	belong	x			version %d
+
+# SE Linux policy database
+# From: Mike Frysinger <vapier at gentoo.org>
+0	lelong	0xf97cff8c		SE Linux policy
+>16	lelong	x			v%d
+>20	lelong	1			MLS
+>24	lelong	x			%d symbols
+>28	lelong	x			%d ocons
+
+# Linux Logical Volume Manager (LVM) 
+# Emmanuel VARAGNAT <emmanuel.varagnat at guzu.net>
+#
+# System ID, UUID and volume group name are 128 bytes long
+# but they should never be full and initialized with zeros...
+#
+# LVM1
+#
+0x0	string	HM\001		LVM1 (Linux Logical Volume Manager), version 1
+>0x12c	string	>\0		, System ID: %s
+
+0x0	string	HM\002		LVM1 (Linux Logical Volume Manager), version 2
+>0x12c	string	>\0		, System ID: %s
+
+#  LVM2
+#
+# It seems that the label header can be in one the four first sector
+# of the disk... (from _find_labeller in lib/label/label.c of LVM2)
+#
+# 0x200 seems to be the common case
+
+0x218		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+# read the offset to add to the start of the header, and the header
+# start in 0x200
+>(0x214.l+0x200) string	>\0		, UUID: %s
+
+0x018		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x014.l)	 string	>\0		, UUID: %s
+
+0x418		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x414.l+0x400) string	>\0		, UUID: %s
+
+0x618		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x614.l+0x600) string	>\0		, UUID: %s
+
+# LVM snapshot
+# from Jason Farrel
+0	string	SnAp	LVM Snapshot (CopyOnWrite store)
+>4	lelong	!0	- valid,
+>4	lelong	0	- invalid,
+>8	lelong	x	version %d,
+>12	lelong	x	chunk_size %d
+
+# SE Linux policy database
+0	lelong	0xf97cff8c		SE Linux policy
+>16	lelong	x			v%d
+>20	lelong	1			MLS
+>24	lelong	x			%d symbols
+>28	lelong	x			%d ocons
+
+# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec
+# Anthon van der Neut (anthon at mnt.org)
+0	string	LUKS\xba\xbe	LUKS encrypted file,
+>6	beshort x		ver %d
+>8	string	x		[%s,
+>40	string	x		%s,
+>72	string	x		%s]
+>168	string	x		UUID: %s
+
+
+# Summary: Xen saved domain file
+# Created by: Radek Vokal <rvokal at redhat.com>
+0	string		LinuxGuestRecord	Xen saved domain
+>20	search/256	(name			
+>>&1	string		x			(name %s)
+
+
+#------------------------------------------------------------------------------
+# $File: linux,v 1.33 2009/10/23 16:44:59 christos Exp $
+# linux:  file(1) magic for Linux files
+#
+# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan at yggdrasil.com>
+# The following basic Linux magic is useful for reference, but using
+# "long" magic is a better practice in order to avoid collisions.
+#
+# 2	leshort		100		Linux/i386
+# >0	leshort		0407		impure executable (OMAGIC)
+# >0	leshort		0410		pure executable (NMAGIC)
+# >0	leshort		0413		demand-paged executable (ZMAGIC)
+# >0	leshort		0314		demand-paged executable (QMAGIC)
+#
+0	lelong		0x00640107	Linux/i386 impure executable (OMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x00640108	Linux/i386 pure executable (NMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x0064010b	Linux/i386 demand-paged executable (ZMAGIC)
+>16	lelong		0		\b, stripped
+0	lelong		0x006400cc	Linux/i386 demand-paged executable (QMAGIC)
+>16	lelong		0		\b, stripped
+#
+0	string		\007\001\000	Linux/i386 object file
+>20	lelong		>0x1020		\b, DLL library
+# Linux-8086 stuff:
+0	string		\01\03\020\04	Linux-8086 impure executable
+>28	long		!0		not stripped
+0	string		\01\03\040\04	Linux-8086 executable
+>28	long		!0		not stripped
+#
+0	string		\243\206\001\0	Linux-8086 object file
+#
+0	string		\01\03\020\20	Minix-386 impure executable
+>28	long		!0		not stripped
+0	string		\01\03\040\20	Minix-386 executable
+>28	long		!0		not stripped
+# core dump file, from Bill Reynolds <bill at goshawk.lanl.gov>
+216	lelong		0421		Linux/i386 core file
+>220	string		>\0		of '%s'
+>200	lelong		>0		(signal %d)
+#
+# LILO boot/chain loaders, from Daniel Quinlan <quinlan at yggdrasil.com>
+# this can be overridden by the DOS executable (COM) entry
+2	string		LILO		Linux/i386 LILO boot/chain loader
+#
+# PSF fonts, from H. Peter Anvin <hpa at yggdrasil.com>
+0	leshort		0x0436		Linux/i386 PC Screen Font data,
+>2	byte		0		256 characters, no directory,
+>2	byte		1		512 characters, no directory,
+>2	byte		2		256 characters, Unicode directory,
+>2	byte		3		512 characters, Unicode directory,
+>3	byte		>0		8x%d
+# Linux swap file, from Daniel Quinlan <quinlan at yggdrasil.com>
+4086	string		SWAP-SPACE	Linux/i386 swap file
+# From: Jeff Bailey <jbailey at ubuntu.com>
+# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey at ubuntu.com>
+4076	string		SWAPSPACE2S1SUSPEND	Linux/i386 swap file (new style) with SWSUSP1 image
+# according to man page of mkswap (8) March 1999
+4086	string		SWAPSPACE2	Linux/i386 swap file (new style)
+>0x400	long		x		%d (4K pages)
+>0x404	long		x		size %d pages
+>>4086	string		SWAPSPACE2	
+>>>1052	string		>\0		Label %s
+# From Daniel Novotny <dnovotny at redhat.com>
+# swap file for PowerPC
+65526	string		SWAPSPACE2	Linux/ppc swap file
+# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
+#
+#	from Erik Troan (ewt at redhat.com) examining od dumps, so this
+#		could be wrong
+#      updated by David Mosberger (davidm at azstarnet.com) based on
+#      GNU BFD and MIPS info found below.
+#
+0	leshort		0x0183		ECOFF alpha
+>24	leshort		0407		executable
+>24	leshort		0410		pure
+>24	leshort		0413		demand paged
+>8	long		>0		not stripped
+>8	long		0		stripped
+>23	leshort		>0		- version %ld.
+#
+# Linux kernel boot images, from Albert Cahalan <acahalan at cs.uml.edu>
+# and others such as Axel Kohlmeyer <akohlmey at rincewind.chemie.uni-ulm.de>
+# and Nicol�s Lichtmaier <nick at debian.org>
+# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
+# Linux kernel boot images (i386 arch) (Wolfram Kleff)
+514	string		HdrS		Linux kernel
+>510	leshort		0xAA55		x86 boot executable
+>>518	leshort		>0x1ff
+>>>529	byte		0		zImage,
+>>>529	byte		1		bzImage,
+>>>(526.s+0x200) string	>\0		version %s,
+>>498	leshort		1		RO-rootFS,
+>>498	leshort		0		RW-rootFS,
+>>508	leshort		>0		root_dev 0x%X,
+>>502	leshort		>0		swap_dev 0x%X,
+>>504	leshort		>0		RAMdisksize %u KB,
+>>506	leshort		0xFFFF		Normal VGA
+>>506	leshort		0xFFFE		Extended VGA
+>>506	leshort		0xFFFD		Prompt for Videomode
+>>506	leshort		>0		Video mode %d
+# This also matches new kernels, which were caught above by "HdrS".
+0		belong	0xb8c0078e	Linux kernel
+>0x1e3		string	Loading		version 1.3.79 or older
+>0x1e9		string	Loading		from prehistoric times
+
+# System.map files - Nicol�s Lichtmaier <nick at debian.org>
+8	search/1	\ A\ _text	Linux kernel symbol map text
+
+# LSM entries - Nicol�s Lichtmaier <nick at debian.org>
+0	search/1	Begin3	Linux Software Map entry text
+0	search/1	Begin4	Linux Software Map entry text (new format)
+
+# From Matt Zimmerman, enhanced for v3 by Matthew Palmer
+0	belong	0x4f4f4f4d	User-mode Linux COW file
+>4	belong	<3		\b, version %d
+>>8	string	>\0		\b, backing file %s
+>4	belong	>2		\b, version %d
+>>32	string	>\0		\b, backing file %s
+
+############################################################################
+# Linux kernel versions
+
+0		string		\xb8\xc0\x07\x8e\xd8\xb8\x00\x90	Linux
+>497		leshort		0		x86 boot sector
+>>514		belong		0x8e	of a kernel from the dawn of time!
+>>514		belong		0x908ed8b4	version 0.99-1.1.42
+>>514		belong		0x908ed8b8	for memtest86
+
+>497		leshort		!0		x86 kernel
+>>504		leshort		>0		RAMdisksize=%u KB
+>>502		leshort		>0		swap=0x%X
+>>508		leshort		>0		root=0x%X
+>>>498		leshort		1		\b-ro
+>>>498		leshort		0		\b-rw
+>>506		leshort		0xFFFF		vga=normal
+>>506		leshort		0xFFFE		vga=extended
+>>506		leshort		0xFFFD		vga=ask
+>>506		leshort		>0		vga=%d
+>>514		belong		0x908ed881	version 1.1.43-1.1.45
+>>514		belong		0x15b281cd
+>>>0xa8e	belong		0x55AA5a5a	version 1.1.46-1.2.13,1.3.0
+>>>0xa99	belong		0x55AA5a5a	version 1.3.1,2
+>>>0xaa3	belong		0x55AA5a5a	version 1.3.3-1.3.30
+>>>0xaa6	belong		0x55AA5a5a	version 1.3.31-1.3.41
+>>>0xb2b	belong		0x55AA5a5a	version 1.3.42-1.3.45
+>>>0xaf7	belong		0x55AA5a5a	version 1.3.46-1.3.72
+>>514		string		HdrS
+>>>518		leshort		>0x1FF
+>>>>529		byte		0		\b, zImage
+>>>>529		byte		1		\b, bzImage
+>>>>(526.s+0x200) string 	>\0		\b, version %s
+
+# Linux boot sector thefts.
+0		belong		0xb8c0078e	Linux
+>0x1e6		belong		0x454c4b53	ELKS Kernel
+>0x1e6		belong		!0x454c4b53	style boot sector
+
+############################################################################
+# Linux 8086 executable
+0	lelong&0xFF0000FF 0xC30000E9	Linux-Dev86 executable, headerless
+>5	string		.		
+>>4	string		>\0		\b, libc version %s
+
+0	lelong&0xFF00FFFF 0x4000301	Linux-8086 executable
+>2	byte&0x01	!0		\b, unmapped zero page
+>2	byte&0x20	0		\b, impure
+>2	byte&0x20	!0
+>>2	byte&0x10	!0		\b, A_EXEC
+>2	byte&0x02	!0		\b, A_PAL
+>2	byte&0x04	!0		\b, A_NSYM
+>2	byte&0x08	!0		\b, A_STAND
+>2	byte&0x40	!0		\b, A_PURE
+>2	byte&0x80	!0		\b, A_TOVLY
+>28     long            !0              \b, not stripped
+>37	string		.		
+>>36	string		>\0		\b, libc version %s
+
+# 0	lelong&0xFF00FFFF 0x10000301	ld86 I80386 executable
+# 0	lelong&0xFF00FFFF 0xB000301	ld86 M68K executable
+# 0	lelong&0xFF00FFFF 0xC000301	ld86 NS16K executable
+# 0	lelong&0xFF00FFFF 0x17000301	ld86 SPARC executable
+
+# SYSLINUX boot logo files (from 'ppmtolss16' sources)
+# http://syslinux.zytor.com/
+#
+0	lelong	=0x1413f33d		SYSLINUX' LSS16 image data
+>4	leshort	x			\b, width %d
+>6	leshort	x			\b, height %d
+
+0	string	OOOM			User-Mode-Linux's Copy-On-Write disk image
+>4	belong	x			version %d
+
+# SE Linux policy database
+# From: Mike Frysinger <vapier at gentoo.org>
+0	lelong	0xf97cff8c		SE Linux policy
+>16	lelong	x			v%d
+>20	lelong	1			MLS
+>24	lelong	x			%d symbols
+>28	lelong	x			%d ocons
+
+# Linux Logical Volume Manager (LVM) 
+# Emmanuel VARAGNAT <emmanuel.varagnat at guzu.net>
+#
+# System ID, UUID and volume group name are 128 bytes long
+# but they should never be full and initialized with zeros...
+#
+# LVM1
+#
+0x0	string	HM\001		LVM1 (Linux Logical Volume Manager), version 1
+>0x12c	string	>\0		, System ID: %s
+
+0x0	string	HM\002		LVM1 (Linux Logical Volume Manager), version 2
+>0x12c	string	>\0		, System ID: %s
+
+#  LVM2
+#
+# It seems that the label header can be in one the four first sector
+# of the disk... (from _find_labeller in lib/label/label.c of LVM2)
+#
+# 0x200 seems to be the common case
+
+0x218		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+# read the offset to add to the start of the header, and the header
+# start in 0x200
+>(0x214.l+0x200) string	>\0		, UUID: %s
+
+0x018		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x014.l)	 string	>\0		, UUID: %s
+
+0x418		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x414.l+0x400) string	>\0		, UUID: %s
+
+0x618		 string	LVM2\ 001	LVM2 (Linux Logical Volume Manager)
+>(0x614.l+0x600) string	>\0		, UUID: %s
+
+# LVM snapshot
+# from Jason Farrel
+0	string	SnAp	LVM Snapshot (CopyOnWrite store)
+>4	lelong	!0	- valid,
+>4	lelong	0	- invalid,
+>8	lelong	x	version %d,
+>12	lelong	x	chunk_size %d
+
+# SE Linux policy database
+0	lelong	0xf97cff8c		SE Linux policy
+>16	lelong	x			v%d
+>20	lelong	1			MLS
+>24	lelong	x			%d symbols
+>28	lelong	x			%d ocons
+
+# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec
+# Anthon van der Neut (anthon at mnt.org)
+0	string	LUKS\xba\xbe	LUKS encrypted file,
+>6	beshort x		ver %d
+>8	string	x		[%s,
+>40	string	x		%s,
+>72	string	x		%s]
+>168	string	x		UUID: %s
+
+
+# Summary: Xen saved domain file
+# Created by: Radek Vokal <rvokal at redhat.com>
+0	string		LinuxGuestRecord	Xen saved domain
+>20	search/256	(name			
+>>&1	string		x			(name %s)
+
+
+#------------------------------------------------------------------------------
+# $File: lisp,v 1.23 2009/09/19 16:28:10 christos Exp $
+# lisp:  file(1) magic for lisp programs
+#
+# various lisp types, from Daniel Quinlan (quinlan at yggdrasil.com)
+
+# updated by Joerg Jenderek
+# GRR: This lot is too weak
+#0	string	;;			
+# windows INF files often begin with semicolon and use CRLF as line end
+# lisp files are mainly created on unix system with LF as line end
+#>2	search/4096	!\r		Lisp/Scheme program text
+#>2	search/4096	\r		Windows INF file
+
+0	search/4096	(setq\ 			Lisp/Scheme program text
+!:mime	text/x-lisp
+0	search/4096	(defvar\ 		Lisp/Scheme program text
+!:mime	text/x-lisp
+0	search/4096	(defparam\ 		Lisp/Scheme program text
+!:mime	text/x-lisp
+0	search/4096	(defun\  		Lisp/Scheme program text
+!:mime	text/x-lisp
+0	search/4096	(autoload\ 		Lisp/Scheme program text
+!:mime	text/x-lisp
+0	search/4096	(custom-set-variables\ 	Lisp/Scheme program text
+!:mime	text/x-lisp
+
+# Emacs 18 - this is always correct, but not very magical.
+0	string	\012(			Emacs v18 byte-compiled Lisp data
+!:mime	application/x-elc
+# Emacs 19+ - ver. recognition added by Ian Springer
+# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs
+# - Chris Chittleborough <cchittleborough at yahoo.com.au>
+0	string	;ELC	
+>4	byte	>18			
+>4	byte    <32			Emacs/XEmacs v%d byte-compiled Lisp data
+!:mime	application/x-elc		
+
+# Files produced by CLISP Common Lisp From: Bruno Haible <haible at ilog.fr>
+0	string	(SYSTEM::VERSION\040'	CLISP byte-compiled Lisp program (pre 2004-03-27)
+0	string	(|SYSTEM|::|VERSION|\040'	CLISP byte-compiled Lisp program text
+
+0	long	0x70768BD2		CLISP memory image data
+0	long	0xD28B7670		CLISP memory image data, other endian
+
+#.com and .bin for MIT scheme 
+0	string	\372\372\372\372	MIT scheme (library?)
+
+# From: David Allouche <david at allouche.net>
+0	search/1	\<TeXmacs|	TeXmacs document text
+!:mime	text/texmacs
+
+#------------------------------------------------------------------------------
+# $File: llvm,v 1.4 2009/09/19 16:28:10 christos Exp $
+# llvm:  file(1) magic for LLVM byte-codes
+# URL:  http://llvm.cs.uiuc.edu/docs/BytecodeFormat.html#signature
+# From: Al Stone <ahs3 at fc.hp.com>
+
+0	string	llvm	LLVM byte-codes, uncompressed
+0	string	llvc0	LLVM byte-codes, null compression
+0	string	llvc1	LLVM byte-codes, gzip compression
+0	string	llvc2	LLVM byte-codes, bzip2 compression
+
+#------------------------------------------------------------------------------
+# $File: lua,v 1.5 2009/09/19 16:28:10 christos Exp $
+# lua:  file(1) magic for Lua scripting language
+# URL:  http://www.lua.org/
+# From: Reuben Thomas <rrt at sc3d.org>, Seo Sanghyeon <tinuviel at sparcs.kaist.ac.kr>
+
+# Lua scripts
+0	search/1/w	#!\ /usr/bin/lua	Lua script text executable
+!:mime	text/x-lua
+0	search/1/w	#!\ /usr/local/bin/lua	Lua script text executable
+!:mime	text/x-lua
+0	search/1	#!/usr/bin/env\ lua	Lua script text executable
+!:mime	text/x-lua
+0	search/1	#!\ /usr/bin/env\ lua	Lua script text executable
+!:mime	text/x-lua
+
+# Lua bytecode
+0	string		\033Lua			Lua bytecode,
+>4	byte		0x50			version 5.0
+>4	byte		0x51			version 5.1
+
+#------------------------------------------------------------------------------
+# $File: luks,v 1.4 2009/09/19 16:28:10 christos Exp $
+# luks:  file(1) magic for Linux Unified Key Setup
+# URL:	http://luks.endorphin.org/spec
+# From:	Anthon van der Neut <anthon at mnt.org>
+
+0	string		LUKS\xba\xbe	LUKS encrypted file,
+>6	beshort		x		ver %d
+>8	string		x		[%s,
+>40	string		x		%s,
+>72	string		x		%s]
+>168	string		x		UUID: %s
+
+#------------------------------------------------------------
+# $File: mach,v 1.9 2009/09/19 16:28:10 christos Exp $
+# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
+# Unfortunately the first, cafebabe, is shared with
+# Java ByteCode, so they are both handled in the file "cafebabe".
+# The "feedface" ones are handled herein.
+#------------------------------------------------------------
+0	lelong&0xfffffffe	0xfeedface	Mach-O
+>0	byte		0xcf		64-bit
+>12	lelong		1		object
+>12	lelong		2		executable
+>12	lelong		3		fixed virtual memory shared library
+>12	lelong		4		core
+>12	lelong		5		preload executable
+>12	lelong		6		dynamically linked shared library
+>12	lelong		7		dynamic linker
+>12	lelong		8		bundle
+>12	lelong		9		dynamically linked shared library stub
+>12	lelong		>9
+>>12	lelong		x		filetype=%ld
+>4	lelong		<0
+>>4	lelong		x		architecture=%ld
+>4	lelong		1		vax
+>4	lelong		2		romp
+>4	lelong		3		architecture=3
+>4	lelong		4		ns32032
+>4	lelong		5		ns32332
+>4	lelong		6		m68k
+>4	lelong		7		i386
+>4	lelong		8		mips
+>4	lelong		9		ns32532
+>4	lelong		10		architecture=10
+>4	lelong		11		hppa
+>4	lelong		12		acorn
+>4	lelong		13		m88k
+>4	lelong		14		sparc
+>4	lelong		15		i860-big
+>4	lelong		16		i860
+>4	lelong		17		rs6000
+>4	lelong		18		ppc
+>4	lelong		16777234	ppc64
+>4	lelong		>16777234
+>>4	lelong		x		architecture=%ld
+#
+0	belong&0xfffffffe	0xfeedface	Mach-O
+>3	byte		0xcf		64-bit
+>12	belong		1		object
+>12	belong		2		executable
+>12	belong		3		fixed virtual memory shared library
+>12	belong		4		core
+>12	belong		5		preload executable
+>12	belong		6               dynamically linked shared library
+>12	belong		7               dynamic linker
+>12	belong		8		bundle
+>12	belong		9		dynamically linked shared library stub
+>12	belong		>9
+>>12	belong		x		filetype=%ld
+>4	belong		<0
+>>4	belong		x		architecture=%ld
+>4	belong		1		vax
+>4	belong		2		romp
+>4	belong		3		architecture=3
+>4	belong		4		ns32032
+>4	belong		5		ns32332
+>4	belong		6		for m68k architecture
+# from NeXTstep 3.0 <mach/machine.h>
+# i.e. mc680x0_all, ignore
+# >>8	belong		1		(mc68030)
+>>8	belong		2		(mc68040)
+>>8	belong		3		(mc68030 only)
+>4	belong		7		i386
+>4	belong		8		mips
+>4	belong		9		ns32532
+>4	belong		10		architecture=10
+>4	belong		11		hppa
+>4	belong		12		acorn
+>4	belong		13		m88k
+>4	belong		14		sparc
+>4	belong		15		i860-big
+>4	belong		16		i860
+>4	belong		17		rs6000
+>4	belong		18		ppc
+>4	belong		16777234	ppc64
+>4	belong		>16777234
+>>4	belong		x		architecture=%ld
+
+#------------------------------------------------------------------------------
+# $File: macintosh,v 1.20 2009/09/19 16:28:10 christos Exp $
+# macintosh description
+#
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan at yggdrasil.com
+11	string	must\ be\ converted\ with\ BinHex	BinHex binary text
+!:mime	application/mac-binhex40
+>41	string	x					\b, version %.3s
+
+# Stuffit archives are the de facto standard of compression for Macintosh
+# files obtained from most archives. (franklsm at tuns.ca)
+0	string		SIT!			StuffIt Archive (data)
+!:mime	application/x-stuffit
+!:apple	SIT!SIT!
+>2	string		x			: %s
+0	string		SITD			StuffIt Deluxe (data)
+>2	string		x			: %s
+0	string		Seg			StuffIt Deluxe Segment (data)
+>2	string		x			: %s
+
+# Newer StuffIt archives (grant at netbsd.org)
+0	string		StuffIt			StuffIt Archive
+!:mime	application/x-stuffit
+!:apple	SIT!SIT!
+#>162	string		>0			: %s
+
+# Macintosh Applications and Installation binaries (franklsm at tuns.ca)
+# GRR: Too weak
+#0	string		APPL			Macintosh Application (data)
+#>2	string		x			\b: %s
+
+# Macintosh System files (franklsm at tuns.ca)
+# GRR: Too weak
+#0	string		zsys			Macintosh System File (data)
+#0	string		FNDR			Macintosh Finder (data)
+#0	string		libr			Macintosh Library (data)
+#>2	string		x			: %s
+#0	string		shlb			Macintosh Shared Library (data)
+#>2	string		x			: %s
+#0	string		cdev			Macintosh Control Panel (data)
+#>2	string		x			: %s
+#0	string		INIT			Macintosh Extension (data)
+#>2	string		x			: %s
+#0	string		FFIL			Macintosh Truetype Font (data)
+#>2	string		x			: %s
+#0	string		LWFN			Macintosh Postscript Font (data)
+#>2	string		x			: %s
+
+# Additional Macintosh Files (franklsm at tuns.ca)
+# GRR: Too weak
+#0	string		PACT			Macintosh Compact Pro Archive (data)
+#>2	string		x			: %s
+#0	string		ttro			Macintosh TeachText File (data)
+#>2	string		x			: %s
+#0	string		TEXT			Macintosh TeachText File (data)
+#>2	string		x			: %s
+#0	string		PDF			Macintosh PDF File (data)
+#>2	string		x			: %s
+
+# MacBinary format (Eric Fischer, enf at pobox.com)
+#
+# Unfortunately MacBinary doesn't really have a magic number prior
+# to the MacBinary III format.  The checksum is really the way to
+# do it, but the magic file format isn't up to the challenge.
+#
+# 0	byte		0
+# 1	byte				# filename length
+# 2	string				# filename
+# 65    string				# file type
+# 69	string				# file creator
+# 73	byte				# Finder flags
+# 74	byte		0
+# 75	beshort				# vertical posn in window
+# 77	beshort				# horiz posn in window
+# 79	beshort				# window or folder ID
+# 81    byte				# protected?
+# 82	byte		0
+# 83	belong				# length of data segment
+# 87	belong				# length of resource segment
+# 91	belong				# file creation date
+# 95	belong				# file modification date
+# 99	beshort				# length of comment after resource
+# 101	byte				# new Finder flags
+# 102	string		mBIN		# (only in MacBinary III)
+# 106	byte				# char. code of file name
+# 107	byte				# still more Finder flags
+# 116	belong				# total file length
+# 120	beshort				# length of add'l header
+# 122	byte		129		# for MacBinary II
+# 122	byte		130		# for MacBinary III
+# 123	byte		129		# minimum version that can read fmt
+# 124	beshort				# checksum
+#
+# This attempts to use the version numbers as a magic number, requiring
+# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second
+# be 0x81.  This works for the files I have, but maybe not for everyone's.
+
+# Unfortunately, this magic is quite weak - MPi
+#122	beshort&0xFCFF	0x8081		Macintosh MacBinary data
+
+# MacBinary I doesn't have the version number field at all, but MacBinary II
+# has been in use since 1987 so I hope there aren't many really old files
+# floating around that this will miss.  The original spec calls for using
+# the nulls in 0, 74, and 82 as the magic number.
+#
+# Another possibility, that would also work for MacBinary I, is to use
+# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
+# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
+# and that 74 will be 0.  So something like
+# 
+# 71 	belong&0x80804EFF 0x00000000 	Macintosh MacBinary data
+# 
+# >73	byte&0x01	0x01		\b, inited
+# >73	byte&0x02	0x02		\b, changed
+# >73	byte&0x04	0x04		\b, busy
+# >73	byte&0x08	0x08		\b, bozo
+# >73	byte&0x10	0x10		\b, system
+# >73	byte&0x10	0x20		\b, bundle
+# >73	byte&0x10	0x40		\b, invisible
+# >73	byte&0x10	0x80		\b, locked
+
+#>65	string		x		\b, type "%4.4s"
+
+#>65	string		8BIM		(PhotoShop)
+#>65	string		ALB3		(PageMaker 3)
+#>65	string		ALB4		(PageMaker 4)
+#>65	string		ALT3		(PageMaker 3)
+#>65	string		APPL		(application)
+#>65	string		AWWP		(AppleWorks word processor)
+#>65	string		CIRC		(simulated circuit)
+#>65	string		DRWG		(MacDraw)
+#>65	string		EPSF		(Encapsulated PostScript)
+#>65	string		FFIL		(font suitcase)
+#>65	string		FKEY		(function key)
+#>65	string		FNDR		(Macintosh Finder)
+#>65	string		GIFf		(GIF image)
+#>65	string		Gzip		(GNU gzip)
+#>65	string		INIT		(system extension)
+#>65	string		LIB\ 		(library)
+#>65	string		LWFN		(PostScript font)
+#>65	string		MSBC		(Microsoft BASIC)
+#>65	string		PACT		(Compact Pro archive)
+#>65	string		PDF\ 		(Portable Document Format)
+#>65	string		PICT		(picture)
+#>65	string		PNTG		(MacPaint picture)
+#>65	string		PREF		(preferences)
+#>65	string		PROJ		(Think C project)
+#>65	string		QPRJ		(Think Pascal project)
+#>65	string		SCFL		(Defender scores)
+#>65	string		SCRN		(startup screen)
+#>65	string		SITD		(StuffIt Deluxe)
+#>65	string		SPn3		(SuperPaint)
+#>65	string		STAK		(HyperCard stack)
+#>65	string		Seg\ 		(StuffIt segment)
+#>65	string		TARF		(Unix tar archive)
+#>65	string		TEXT		(ASCII)
+#>65	string		TIFF		(TIFF image)
+#>65	string		TOVF		(Eudora table of contents)
+#>65	string		WDBN		(Microsoft Word word processor)
+#>65	string		WORD		(MacWrite word processor)
+#>65	string		XLS\ 		(Microsoft Excel)
+#>65	string		ZIVM		(compress (.Z))
+#>65	string		ZSYS		(Pre-System 7 system file)
+#>65	string		acf3		(Aldus FreeHand)
+#>65	string		cdev		(control panel)
+#>65	string		dfil		(Desk Acessory suitcase)
+#>65	string		libr		(library)
+#>65	string		nX^d		(WriteNow word processor)
+#>65	string		nX^w		(WriteNow dictionary)
+#>65	string		rsrc		(resource)
+#>65	string		scbk		(Scrapbook)
+#>65	string		shlb		(shared library)
+#>65	string		ttro		(SimpleText read-only)
+#>65	string		zsys		(system file)
+
+#>69	string		x		\b, creator "%4.4s"
+
+# Somewhere, Apple has a repository of registered Creator IDs.  These are
+# just the ones that I happened to have files from and was able to identify.
+
+#>69	string		8BIM		(Adobe Photoshop)
+#>69	string		ALD3		(PageMaker 3)
+#>69	string		ALD4		(PageMaker 4)
+#>69	string		ALFA		(Alpha editor)
+#>69	string		APLS		(Apple Scanner)
+#>69	string		APSC		(Apple Scanner)
+#>69	string		BRKL		(Brickles)
+#>69	string		BTFT		(BitFont)
+#>69	string		CCL2 		(Common Lisp 2)
+#>69	string		CCL\ 		(Common Lisp)
+#>69	string		CDmo		(The Talking Moose)
+#>69	string		CPCT		(Compact Pro)
+#>69	string		CSOm		(Eudora)
+#>69	string		DMOV		(Font/DA Mover)
+#>69	string		DSIM		(DigSim)
+#>69	string		EDIT		(Macintosh Edit)
+#>69	string		ERIK		(Macintosh Finder)
+#>69	string		EXTR		(self-extracting archive)
+#>69	string		Gzip		(GNU gzip)
+#>69	string		KAHL		(Think C)
+#>69	string		LWFU		(LaserWriter Utility)
+#>69	string		LZIV		(compress)
+#>69	string		MACA		(MacWrite)
+#>69	string		MACS		(Macintosh operating system)
+#>69	string		MAcK		(MacKnowledge terminal emulator)
+#>69	string		MLND		(Defender)
+#>69	string		MPNT		(MacPaint)
+#>69	string		MSBB		(Microsoft BASIC (binary))
+#>69	string		MSWD		(Microsoft Word)
+#>69	string		NCSA		(NCSA Telnet)
+#>69	string		PJMM		(Think Pascal)
+#>69	string		PSAL		(Hunt the Wumpus)
+#>69	string		PSI2		(Apple File Exchange)
+#>69	string		R*ch		(BBEdit)
+#>69	string		RMKR		(Resource Maker)
+#>69	string		RSED		(Resource Editor)
+#>69	string		Rich		(BBEdit)
+#>69	string		SIT!		(StuffIt)
+#>69	string		SPNT		(SuperPaint)
+#>69	string		Unix		(NeXT Mac filesystem)
+#>69	string		VIM!		(Vim editor)
+#>69	string		WILD		(HyperCard)
+#>69	string		XCEL		(Microsoft Excel)
+#>69	string		aCa2		(Fontographer)
+#>69	string		aca3		(Aldus FreeHand)
+#>69	string		dosa		(Macintosh MS-DOS file system)
+#>69	string		movr		(Font/DA Mover)
+#>69	string		nX^n		(WriteNow)
+#>69	string		pdos		(Apple ProDOS file system)
+#>69	string		scbk		(Scrapbook)
+#>69	string		ttxt		(SimpleText)
+#>69	string		ufox		(Foreign File Access)
+
+# Just in case...
+
+102	string		mBIN		MacBinary III data with surprising version number
+
+# sas magic from Bruce Foster (bef at nwu.edu)
+#
+#0	string		SAS		SAS
+#>8	string		x		%s
+0	string		SAS		SAS
+>24	string		DATA		data file
+>24	string		CATALOG		catalog
+>24	string		INDEX		data file index
+>24	string		VIEW		data view
+# sas 7+ magic from Reinhold Koch (reinhold.koch at roche.com)
+#
+0x54    string          SAS             SAS 7+
+>0x9C   string          DATA            data file
+>0x9C   string          CATALOG         catalog
+>0x9C   string          INDEX           data file index
+>0x9C   string          VIEW            data view
+
+# spss magic for SPSS system and portable files, 
+#	 from Bruce Foster (bef at nwu.edu).
+
+0	long		0xc1e2c3c9	SPSS Portable File
+>40	string 		x		%s
+
+0	string		$FL2		SPSS System File
+>24	string		x		%s
+
+# Macintosh filesystem data
+# From "Tom N Harris" <telliamed at mac.com>
+# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson at alaska.net>
+# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
+# entries depend on the data arithmetic added after v.35
+# There's also some Pascal strings in here, ditto...
+
+# The boot block signature, according to IM:Files, is 
+# "for HFS volumes, this field always contains the value 0x4C4B."
+# But if this is true for MFS or HFS+ volumes, I don't know.
+# Alternatively, the boot block is supposed to be zeroed if it's
+# unused, so a simply >0 should suffice.
+
+0x400	beshort			0xD2D7		Macintosh MFS data
+>0	beshort			0x4C4B		(bootable)
+>0x40a	beshort			&0x8000		(locked)
+>0x402	beldate-0x7C25B080	x		created: %s,
+>0x406	beldate-0x7C25B080	>0		last backup: %s,
+>0x414	belong			x		block size: %d,
+>0x412	beshort			x		number of blocks: %d,
+>0x424	pstring			x		volume name: %s
+
+# "BD" is has many false positives
+#0x400	beshort			0x4244		Macintosh HFS data
+#>0	beshort			0x4C4B		(bootable)
+#>0x40a	beshort			&0x8000		(locked)
+#>0x40a	beshort			^0x0100		(mounted)
+#>0x40a	beshort			&0x0200		(spared blocks)
+#>0x40a	beshort			&0x0800		(unclean)
+#>0x47C	beshort			0x482B		(Embedded HFS+ Volume)
+#>0x402	beldate-0x7C25B080	x		created: %s,
+#>0x406	beldate-0x7C25B080	x		last modified: %s,
+#>0x440	beldate-0x7C25B080	>0		last backup: %s,
+#>0x414	belong			x		block size: %d,
+#>0x412	beshort			x		number of blocks: %d,
+#>0x424	pstring			x		volume name: %s
+
+0x400	beshort			0x482B		Macintosh HFS Extended
+>&0	beshort			x		version %d data
+>0	beshort			0x4C4B		(bootable)
+>0x404	belong			^0x00000100	(mounted)
+>&2	belong			&0x00000200	(spared blocks)
+>&2	belong			&0x00000800	(unclean)
+>&2	belong			&0x00008000	(locked)
+>&6	string			x		last mounted by: '%.4s',
+# really, that should be treated as a belong and we print a string
+# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
+>&14	beldate-0x7C25B080	x		created: %s,
+# only the creation date is local time, all other timestamps in HFS+ are UTC.
+>&18	bedate-0x7C25B080	x		last modified: %s,
+>&22	bedate-0x7C25B080	>0		last backup: %s,
+>&26	bedate-0x7C25B080	>0		last checked: %s,
+>&38	belong			x		block size: %d,
+>&42	belong			x		number of blocks: %d,
+>&46	belong			x		free blocks: %d
+
+# I don't think this is really necessary since it doesn't do much and 
+# anything with a valid driver descriptor will also have a valid
+# partition map
+#0		beshort		0x4552		Apple Device Driver data
+#>&24		beshort		=1		\b, MacOS
+
+# Is that the partition type a cstring or a pstring? Well, IM says "strings 
+# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a 
+# cstring. Of course, partitions can contain more than four entries, but 
+# what're you gonna do?
+# GRR: This magic is too weak, it is just "PM"
+#0x200		beshort		0x504D		Apple Partition data
+#>0x2		beshort		x		(block size: %d):
+#>0x230		string		x		first type: %s,
+#>0x210		string		x		name: %s,
+#>0x254		belong		x		number of blocks: %d,
+#>0x400		beshort		0x504D		
+#>>0x430		string		x		second type: %s,
+#>>0x410		string		x		name: %s,
+#>>0x454		belong		x		number of blocks: %d,
+#>>0x600		beshort		0x504D
+#>>>0x630	string		x		third type: %s,
+#>>>0x610	string		x		name: %s,
+#>>>0x654	belong		x		number of blocks: %d,
+#>>0x800		beshort		0x504D		
+#>>>0x830	string		x		fourth type: %s,
+#>>>0x810	string		x		name: %s,
+#>>>0x854	belong		x		number of blocks: %d,
+#>>>0xa00	beshort		0x504D		
+#>>>>0xa30	string		x		fifth type: %s,
+#>>>>0xa10	string		x		name: %s,
+#>>>>0xa54	belong		x		number of blocks: %d
+#>>>0xc00	beshort		0x504D
+#>>>>0xc30	string		x		sixth type: %s,
+#>>>>0xc10	string		x		name: %s,
+#>>>>0xc54	belong		x		number of blocks: %d
+## AFAIK, only the signature is different
+#0x200		beshort		0x5453		Apple Old Partition data
+#>0x2		beshort		x		block size: %d,
+#>0x230		string		x		first type: %s,
+#>0x210		string		x		name: %s,
+#>0x254		belong		x		number of blocks: %d,
+#>0x400		beshort		0x504D		
+#>>0x430		string		x		second type: %s,
+#>>0x410		string		x		name: %s,
+#>>0x454		belong		x		number of blocks: %d,
+#>>0x800		beshort		0x504D		
+#>>>0x830	string		x		third type: %s,
+#>>>0x810	string		x		name: %s,
+#>>>0x854	belong		x		number of blocks: %d,
+#>>>0xa00	beshort		0x504D		
+#>>>>0xa30	string		x		fourth type: %s,
+#>>>>0xa10	string		x		name: %s,
+#>>>>0xa54	belong		x		number of blocks: %d
+
+# From: Remi Mommsen <mommsen at slac.stanford.edu>
+0		string		BOMStore	Mac OS X bill of materials (BOM) file
+
+#------------------------------------------------------------------------------
+# $File: magic,v 1.9 2009/09/19 16:28:10 christos Exp $
+# magic:  file(1) magic for magic files
+#
+0	string		#\ Magic	magic text file for file(1) cmd
+0	lelong		0xF11E041C	magic binary file for file(1) cmd
+>4	lelong		x		(version %d) (little endian)
+0	belong		0xF11E041C	magic binary file for file(1) cmd
+>4	belong		x		(version %d) (big endian)
+
+#------------------------------------------------------------------------------
+# $File: mail.news,v 1.17 2009/09/19 16:28:10 christos Exp $
+# mail.news:  file(1) magic for mail and news
+#
+# Unfortunately, saved netnews also has From line added in some news software.
+#0	string		From 		mail text
+# There are tests to ascmagic.c to cope with mail and news.
+0	string		Relay-Version: 	old news text
+!:mime	message/rfc822
+0	string		#!\ rnews	batched news text
+!:mime	message/rfc822
+0	string		N#!\ rnews	mailed, batched news text
+!:mime	message/rfc822
+0	string		Forward\ to 	mail forwarding text
+!:mime	message/rfc822
+0	string		Pipe\ to 	mail piping text
+!:mime	message/rfc822
+0	string		Return-Path:	smtp mail text
+!:mime	message/rfc822
+0	string		Path:		news text
+!:mime	message/news
+0	string		Xref:		news text
+!:mime	message/news
+0	string		From:		news or mail text
+!:mime	message/rfc822
+0	string		Article 	saved news text
+!:mime	message/news
+0	string		BABYL		Emacs RMAIL text
+0	string		Received:	RFC 822 mail text
+!:mime	message/rfc822
+0	string		MIME-Version:	MIME entity text
+#0	string		Content-	MIME entity text
+
+# TNEF files...
+0	lelong		0x223E9F78	Transport Neutral Encapsulation Format
+
+# From: Kevin Sullivan <ksulliva at psc.edu>
+0	string		*mbx*		MBX mail folder
+
+# From: Simon Matter <simon.matter at invoca.ch>
+0	string		\241\002\213\015skiplist\ file\0\0\0	Cyrus skiplist DB
+
+# JAM(mbp) Fidonet message area databases
+# JHR file
+0	string	JAM\0			JAM message area header file
+>12	leshort >0			(%d messages)
+
+# Squish Fidonet message area databases
+# SQD file (requires at least one message in the area)
+# XXX: Weak magic
+#256	leshort	0xAFAE4453		Squish message area data file
+#>4	leshort	>0			(%d messages)
+
+#0	string		\<!--\ MHonArc		text/html; x-type=mhonarc
+
+#------------------------------------------------------------------------------
+# $File: maple,v 1.6 2009/09/19 16:28:10 christos Exp $
+# maple:  file(1) magic for maple files
+# "H. Nanosecond" <aldomel at ix.netcom.com>
+# Maple V release 4, a multi-purpose math program
+#
+
+# maple library .lib
+0	string	\000MVR4\nI	MapleVr4 library
+
+# .ind
+# no magic for these :-(
+# they are compiled indexes for maple files
+
+# .hdb 
+0	string	\000\004\000\000	Maple help database
+
+# .mhp
+# this has the form <PACKAGE=name>
+0	string	\<PACKAGE=	Maple help file
+0	string	\<HELP\ NAME=	Maple help file
+0	string	\n\<HELP\ NAME=	Maple help file with extra carriage return at start (yuck)
+#0	string	#\ Newton	Maple help file, old style
+0	string	#\ daub	Maple help file, old style
+#0	string	#===========	Maple help file, old style
+
+# .mws
+0	string	\000\000\001\044\000\221	Maple worksheet
+#this is anomalous
+0	string	WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000	Maple worksheet, but weird
+# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
+# that is {VERSION major_version miunor_version computer_type version_string}
+0	string	{VERSION\ 	Maple worksheet
+>9	string	>\0	version %.1s.
+>>>11	string	>\0	%.1s
+
+# .mps
+0	string	\0\0\001$	Maple something
+# from byte 4 it is either 'nul E' or 'soh R'
+# I think 'nul E' means a file that was saved as  a different name
+# a sort of revision marking
+# 'soh R' means new 
+>4	string	\000\105	An old revision
+>4	string	\001\122	The latest save
+
+# .mpl
+# some of these are the same as .mps above
+#0000000 000 000 001 044 000 105 same as .mps
+#0000000 000 000 001 044 001 122 same as .mps
+
+0	string	#\n##\ <SHAREFILE=	Maple something
+0	string	\n#\n##\ <SHAREFILE=	Maple something
+0	string	##\ <SHAREFILE=	Maple something
+0	string	#\r##\ <SHAREFILE=	Maple something
+0	string	\r#\r##\ <SHAREFILE=	Maple something
+0	string	#\ \r##\ <DESCRIBE>	Maple something anomalous.
+
+#------------------------------------------------------------------------------
+# $File: mathcad,v 1.5 2009/09/19 16:28:10 christos Exp $
+# mathcad:  file(1) magic for Mathcad documents
+# URL:	http://www.mathsoft.com/
+# From:	Josh Triplett <josh at freedesktop.org>
+
+0	string	.MCAD\t		Mathcad document
+
+#------------------------------------------------------------------------------
+# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $
+# mathematica:  file(1) magic for mathematica files
+# "H. Nanosecond" <aldomel at ix.netcom.com>
+# Mathematica a multi-purpose math program
+# versions 2.2 and 3.0
+
+#mathematica .mb
+0	string	\064\024\012\000\035\000\000\000	Mathematica version 2 notebook
+0	string	\064\024\011\000\035\000\000\000	Mathematica version 2 notebook
+
+# .ma
+# multiple possibilites:
+
+0	string	(*^\n\n::[\011frontEndVersion\ =\ 	Mathematica notebook
+#>41	string	>\0	%s
+
+#0	string	(*^\n\n::[\011palette	Mathematica notebook version 2.x
+
+#0	string	(*^\n\n::[\011Information	Mathematica notebook version 2.x
+#>675	string	>\0	%s #doesn't work well
+
+# there may be 'cr' instread of 'nl' in some does this matter?
+
+# generic:
+0	string	(*^\r\r::[\011	Mathematica notebook version 2.x
+0	string	(*^\r\n\r\n::[\011	Mathematica notebook version 2.x
+0	string	(*^\015			Mathematica notebook version 2.x
+0	string	(*^\n\r\n\r::[\011	Mathematica notebook version 2.x
+0	string	(*^\r::[\011	Mathematica notebook version 2.x
+0	string	(*^\r\n::[\011	Mathematica notebook version 2.x
+0	string	(*^\n\n::[\011	Mathematica notebook version 2.x
+0	string	(*^\n::[\011	Mathematica notebook version 2.x
+
+
+# Mathematica .mx files
+
+#0	string	(*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*)	Mathematica binary file
+0	string	(*This\ is\ a\ Mathematica\ binary\ 	Mathematica binary file
+#>71	string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000	
+# >71... is optional
+>88	string	>\0	from %s
+
+
+# Mathematica files PBF:
+# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
+0	string	MMAPBF\000\001\000\000\000\203\000\001\000	Mathematica PBF (fonts I think)
+
+# .ml files  These are menu resources I think
+# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\ 
+# how to put that into a magic rule?
+4	string	\ A~	MAthematica .ml file
+
+# .nb files
+#too long 0	string	(***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook	Mathematica 3.0 notebook
+0	string	(***********************	Mathematica 3.0 notebook
+
+# other (* matches it is a comment start in these langs
+# GRR: Too weak; also matches other languages e.g. ML
+#0	string	(*	Mathematica, or Pascal, Modula-2 or 3 code text
+
+#########################
+# MatLab v5
+0       string  MATLAB  Matlab v5 mat-file
+>126    short   0x494d  (big endian)
+>>124   beshort x       version 0x%04x
+>126    short   0x4d49  (little endian)
+>>124   leshort x       version 0x%04x
+
+
+#------------------------------------------------------------------------------
+# $File: matroska,v 1.5 2009/09/27 19:02:12 christos Exp $
+# matroska:  file(1) magic for Matroska files
+#
+# See http://www.matroska.org/
+#
+
+# EBML id:
+0		belong		0x1a45dfa3
+# DocType id:
+>5		beshort		0x4282
+# DocType contents:
+>>8		string		matroska	Matroska data
+!:mime  video/x-matroska
+
+# EBML id:
+0		belong		0x1a45dfa3
+# DocType id:
+>0		search/4096 	\x42\x82
+# DocType contents:
+>>&1		string		webm	WebM
+!:mime  video/webm
+
+#------------------------------------------------------------------------------
+# $File: mcrypt,v 1.5 2009/09/19 16:28:10 christos Exp $
+# Mavroyanopoulos Nikos <nmav at hellug.gr>
+# mcrypt:   file(1) magic for mcrypt 2.2.x;
+0	string		\0m\3		mcrypt 2.5 encrypted data,
+>4	string		>\0		algorithm: %s,
+>>&1	leshort		>0		keysize: %d bytes,
+>>>&0	string		>\0		mode: %s,
+
+0	string		\0m\2		mcrypt 2.2 encrypted data,
+>3	byte		0		algorithm: blowfish-448,
+>3	byte		1		algorithm: DES,
+>3	byte		2		algorithm: 3DES,
+>3	byte		3		algorithm: 3-WAY,
+>3	byte		4		algorithm: GOST,
+>3	byte		6		algorithm: SAFER-SK64,
+>3	byte		7		algorithm: SAFER-SK128,
+>3	byte		8		algorithm: CAST-128,
+>3	byte		9		algorithm: xTEA,
+>3	byte		10		algorithm: TWOFISH-128,
+>3	byte		11		algorithm: RC2,
+>3	byte		12		algorithm: TWOFISH-192,
+>3	byte		13		algorithm: TWOFISH-256,
+>3	byte		14		algorithm: blowfish-128,
+>3	byte		15		algorithm: blowfish-192,
+>3	byte		16		algorithm: blowfish-256,
+>3	byte		100		algorithm: RC6,
+>3	byte		101		algorithm: IDEA,
+>4	byte		0		mode: CBC,
+>4	byte		1		mode: ECB,
+>4	byte		2		mode: CFB,
+>4	byte		3		mode: OFB,
+>4	byte		4		mode: nOFB,
+>5	byte		0		keymode: 8bit
+>5	byte		1		keymode: 4bit
+>5	byte		2		keymode: SHA-1 hash
+>5	byte		3		keymode: MD5 hash
+
+#------------------------------------------------------------------------------
+# $File: mercurial,v 1.4 2009/09/19 16:28:10 christos Exp $
+# mercurial:  file(1) magic for Mercurial changeset bundles
+# http://www.selenic.com/mercurial/wiki/
+#
+# Jesse Glick (jesse.glick at sun.com)
+#
+
+0	string		HG10		Mercurial changeset bundle
+>4	string		UN		(uncompressed)
+>4	string		GZ		(gzip compressed)
+>4	string		BZ		(bzip2 compressed)
+
+#------------------------------------------------------------------------------
+# $File: mime,v 1.5 2009/09/19 16:28:10 christos Exp $
+# mime:  file(1) magic for MIME encoded files
+#
+0	string		Content-Type:\ 
+>14	string		>\0		%s
+0	string		Content-Type:
+>13	string		>\0		%s
+
+#------------------------------------------------------------------------------
+# $File: mips,v 1.5 2009/09/19 16:28:10 christos Exp $
+# mips:  file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
+#                         Dec Ultrix (MIPS)
+# all of SGI's *current* machines and OSes run in big-endian mode on the
+# MIPS machines, as far as I know.
+#
+# XXX - what is the blank "-" line?
+#
+# kbd file definitions
+0	string	kbd!map		kbd map file
+>8	byte	>0		Ver %d:
+>10	short	>0		with %d table(s)
+0	belong	0407		old SGI 68020 executable
+0	belong	0410		old SGI 68020 pure executable
+0	beshort	0x8765		disk quotas file
+0	beshort	0x0506		IRIS Showcase file
+>2	byte	0x49		-
+>3	byte	x		- version %ld
+0	beshort	0x0226		IRIS Showcase template
+>2	byte	0x63		-
+>3	byte	x		- version %ld
+0	belong	0x5343464d	IRIS Showcase file
+>4	byte	x		- version %ld
+0	belong	0x5443464d	IRIS Showcase template
+>4	byte	x		- version %ld
+0	belong	0xdeadbabe	IRIX Parallel Arena
+>8	belong	>0		- version %ld
+#
+0	beshort	0x0160		MIPSEB ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>22	byte	x		- version %ld
+>23	byte	x		.%ld
+#
+0	beshort	0x0162		MIPSEL-BE ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %d
+>22	byte	x		.%ld
+#
+0	beshort	0x6001		MIPSEB-LE ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %d
+>22	byte	x		.%ld
+#
+0	beshort	0x6201		MIPSEL ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %ld
+>22	byte	x		.%ld
+#
+# MIPS 2 additions
+#
+0	beshort	0x0163		MIPSEB MIPS-II ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>22	byte	x		- version %ld
+>23	byte	x		.%ld
+#
+0	beshort	0x0166		MIPSEL-BE MIPS-II ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>22	byte	x		- version %ld
+>23	byte	x		.%ld
+#
+0	beshort	0x6301		MIPSEB-LE MIPS-II ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %ld
+>22	byte	x		.%ld
+#
+0	beshort	0x6601		MIPSEL MIPS-II ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %ld
+>22	byte	x		.%ld
+#
+# MIPS 3 additions
+#
+0	beshort	0x0140		MIPSEB MIPS-III ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>22	byte	x		- version %ld
+>23	byte	x		.%ld
+#
+0	beshort	0x0142		MIPSEL-BE MIPS-III ECOFF executable
+>20	beshort	0407		(impure)
+>20	beshort	0410		(swapped)
+>20	beshort	0413		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>22	byte	x		- version %ld
+>23	byte	x		.%ld
+#
+0	beshort	0x4001		MIPSEB-LE MIPS-III ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %ld
+>22	byte	x		.%ld
+#
+0	beshort	0x4201		MIPSEL MIPS-III ECOFF executable
+>20	beshort	03401		(impure)
+>20	beshort	04001		(swapped)
+>20	beshort	05401		(paged)
+>8	belong	>0		not stripped
+>8	belong	0		stripped
+>23	byte	x		- version %ld
+>22	byte	x		.%ld
+#
+0	beshort	0x180		MIPSEB Ucode
+0	beshort	0x182		MIPSEL-BE Ucode
+# 32bit core file
+0	belong	0xdeadadb0	IRIX core dump
+>4	belong	1		of
+>16	string	>\0		'%s'
+# 64bit core file
+0	belong	0xdeadad40	IRIX 64-bit core dump
+>4	belong	1		of
+>16	string	>\0		'%s'
+# N32bit core file
+0       belong	0xbabec0bb	IRIX N32 core dump
+>4      belong	1               of
+>16     string	>\0             '%s'
+# New style crash dump file
+0	string	\x43\x72\x73\x68\x44\x75\x6d\x70	IRIX vmcore dump of
+>36	string	>\0					'%s'
+# Trusted IRIX info
+0	string	SGIAUDIT	SGI Audit file
+>8	byte	x		- version %d
+>9	byte	x		.%ld
+#
+0	string	WNGZWZSC	Wingz compiled script
+0	string	WNGZWZSS	Wingz spreadsheet
+0	string	WNGZWZHP	Wingz help file
+#
+0	string	#Inventor V	IRIS Inventor 1.0 file
+0	string	#Inventor V2	Open Inventor 2.0 file
+# GLF is OpenGL stream encoding
+0	string	glfHeadMagic();		GLF_TEXT
+4	belong	0x7d000000		GLF_BINARY_LSB_FIRST
+4	belong	0x0000007d		GLF_BINARY_MSB_FIRST
+# GLS is OpenGL stream encoding; GLS is the successor of GLF
+0	string	glsBeginGLS(		GLS_TEXT
+4	belong	0x10000000		GLS_BINARY_LSB_FIRST
+4	belong	0x00000010		GLS_BINARY_MSB_FIRST
+
+#------------------------------------------------------------------------------
+# $File: mirage,v 1.7 2009/09/19 16:28:10 christos Exp $
+# mirage:  file(1) magic for Mirage executables
+#
+# XXX - byte order?
+#
+0	long	31415		Mirage Assembler m.out executable
+
+#-----------------------------------------------------------------------------
+# $File: misctools,v 1.10 2009/09/19 16:28:10 christos Exp $
+# misctools:  file(1) magic for miscellaneous UNIX tools.
+#
+0	search/1	%%!!			X-Post-It-Note text
+0	string/c	BEGIN:VCALENDAR		vCalendar calendar file
+0	string/c	BEGIN:VCARD		vCard visiting card
+!:mime	text/x-vcard
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+4	string	gtktalog		GNOME Catalogue (gtktalog)
+>13	string	>\0			version %s
+
+# Summary: Libtool library file
+# Extension: .la
+# Submitted by: Tomasz Trojanowski <tomek at uninet.com.pl>
+0	search/80	.la\ -\ a\ libtool\ library\ file	libtool library file
+
+# Summary: Libtool object file
+# Extension: .lo
+# Submitted by: Abel Cheung <abelcheung at gmail.com>
+0	search/80	.lo\ -\ a\ libtool\ object\ file	libtool object file
+
+# From: Daniel Novotny <dnovotny at redhat.com>
+0	string	MDMP\x93\xA7	MDMP crash report data
+
+#-----------------------------------------------------------------------------
+# $File: misctools,v 1.10 2009/09/19 16:28:10 christos Exp $
+# misctools:  file(1) magic for miscellaneous UNIX tools.
+#
+0	search/1	%%!!			X-Post-It-Note text
+0	string/c	BEGIN:VCALENDAR		vCalendar calendar file
+0	string/c	BEGIN:VCARD		vCard visiting card
+!:mime	text/x-vcard
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+4	string	gtktalog		GNOME Catalogue (gtktalog)
+>13	string	>\0			version %s
+
+# Summary: Libtool library file
+# Extension: .la
+# Submitted by: Tomasz Trojanowski <tomek at uninet.com.pl>
+0	search/80	.la\ -\ a\ libtool\ library\ file	libtool library file
+
+# Summary: Libtool object file
+# Extension: .lo
+# Submitted by: Abel Cheung <abelcheung at gmail.com>
+0	search/80	.lo\ -\ a\ libtool\ object\ file	libtool object file
+
+#------------------------------------------------------------------------------
+# $File: mkid,v 1.6 2009/09/19 16:28:10 christos Exp $
+# mkid:  file(1) magic for mkid(1) databases
+#
+# ID is the binary tags database produced by mkid(1).
+#
+# XXX - byte order?
+#
+0	string		\311\304	ID tags data
+>2	short		>0		version %d
+
+#------------------------------------------------------------------------------
+# $File: mlssa,v 1.4 2009/09/19 16:28:10 christos Exp $
+# mlssa: file(1) magic for MLSSA datafiles
+#
+0		lelong		0xffffabcd	MLSSA datafile,
+>4		leshort		x		algorithm %d,
+>10		lelong		x		%d samples
+
+#------------------------------------------------------------------------------
+# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $
+# mmdf:  file(1) magic for MMDF mail files
+#
+0	string	\001\001\001\001	MMDF mailbox
+
+#------------------------------------------------------------------------------
+# $File: modem,v 1.4 2009/09/19 16:28:10 christos Exp $
+# modem:  file(1) magic for modem programs
+#
+# From: Florian La Roche <florian at knorke.saar.de>
+4	string		Research,	Digifax-G3-File
+>29	byte		1		, fine resolution
+>29	byte		0		, normal resolution
+
+0	short		0x0100		raw G3 data, byte-padded
+0	short		0x1400		raw G3 data
+#
+# Magic data for vgetty voice formats
+# (Martin Seine & Marc Eberhard)
+
+#
+# raw modem data version 1
+#
+0    string    RMD1      raw modem data
+>4   string    >\0       (%s /
+>20  short     >0        compression type 0x%04x)
+
+#
+# portable voice format 1
+#
+0    string    PVF1\n         portable voice format
+>5   string    >\0       (binary %s)
+
+#
+# portable voice format 2
+#
+0    string    PVF2\n         portable voice format
+>5   string >\0          (ascii %s)
+
+
+#------------------------------------------------------------------------------
+# $File: motorola,v 1.10 2009/09/19 16:28:11 christos Exp $
+# motorola:  file(1) magic for Motorola 68K and 88K binaries
+#
+# 68K
+#
+0	beshort		0520		mc68k COFF
+>18	beshort		^00000020	object
+>18	beshort		&00000020	executable
+>12	belong		>0		not stripped
+>168	string		.lowmem		Apple toolbox
+>20	beshort		0407		(impure)
+>20	beshort		0410		(pure)
+>20	beshort		0413		(demand paged)
+>20	beshort		0421		(standalone)
+0	beshort		0521		mc68k executable (shared)
+>12	belong		>0		not stripped
+0	beshort		0522		mc68k executable (shared demand paged)
+>12	belong		>0		not stripped
+#
+# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
+#
+0	beshort		0554		68K BCS executable
+#
+# 88K
+#
+# Motorola/88Open BCS
+#
+0	beshort		0555		88K BCS executable
+#
+# Motorola S-Records, from Gerd Truschinski <gt at freebsd.first.gmd.de>
+0   string      S0          Motorola S-Record; binary data in text format
+
+# ATARI ST relocatable PRG
+#
+# from Oskar Schirmer <schirmer at scara.com> Feb 3, 2001
+# (according to Roland Waldi, Oct 21, 1987)
+# besides the magic 0x601a, the text segment size is checked to be
+# not larger than 1 MB (which is a lot on ST).
+# The additional 0x601b distinction I took from Doug Lee's magic.
+0	belong&0xFFFFFFF0	0x601A0000	Atari ST M68K contiguous executable
+>2	belong			x		(txt=%ld,
+>6	belong			x		dat=%ld,
+>10	belong			x		bss=%ld,
+>14	belong			x		sym=%ld)
+0	belong&0xFFFFFFF0	0x601B0000	Atari ST M68K non-contig executable
+>2	belong			x		(txt=%ld,
+>6	belong			x		dat=%ld,
+>10	belong			x		bss=%ld,
+>14	belong			x		sym=%ld)
+
+# Atari ST/TT... program format (sent by Wolfram Kleff <kleff at cs.uni-bonn.de>)
+0       beshort         0x601A          Atari 68xxx executable,
+>2      belong          x               text len %lu,
+>6      belong          x               data len %lu,
+>10     belong          x               BSS len %lu,
+>14     belong          x               symboltab len %lu,
+>18     belong          0
+>22     belong          &0x01           fastload flag,
+>22     belong          &0x02           may be loaded to alternate RAM,
+>22     belong          &0x04           malloc may be from alternate RAM,
+>22     belong          x               flags: 0x%lX,
+>26     beshort         0               no relocation tab
+>26     beshort         !0              + relocation tab
+>30     string          SFX             [Self-Extracting LZH SFX archive]
+>38     string          SFX             [Self-Extracting LZH SFX archive]
+>44     string          ZIP!            [Self-Extracting ZIP SFX archive]
+
+0       beshort         0x0064          Atari 68xxx CPX file
+>8      beshort         x               (version %04lx)
+
+#------------------------------------------------------------------------------
+# $File: mozilla,v 1.4 2009/09/19 16:28:11 christos Exp $
+# mozilla:  file(1) magic for Mozilla XUL fastload files 
+# (XUL.mfasl and XPC.mfasl)
+# URL:	http://www.mozilla.org/
+# From:	Josh Triplett <josh at freedesktop.org>
+
+0	string	XPCOM\nMozFASL\r\n\x1A		Mozilla XUL fastload data
+
+#------------------------------------------------------------------------------
+# $File: msdos,v 1.65 2009/09/19 16:28:11 christos Exp $
+# msdos:  file(1) magic for MS-DOS files
+#
+
+# .BAT files (Daniel Quinlan, quinlan at yggdrasil.com)
+# updated by Joerg Jenderek at Oct 2008
+0	string	@			
+>1	string/cW	\ echo\ off	DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	echo\ off	DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	rem\ 		DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	set\ 		DOS batch file text
+!:mime	text/x-msdos-batch
+
+
+# OS/2 batch files are REXX. the second regex is a bit generic, oh well
+# the matched commands seem to be common in REXX and uncommon elsewhere
+100	regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc OS/2 REXX batch file text
+100	regex/c =^[\ \t]{0,10}say\ ['"]	     OS/2 REXX batch file text
+
+0	leshort		0x14c	MS Windows COFF Intel 80386 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x166	MS Windows COFF MIPS R4000 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x184	MS Windows COFF Alpha object file
+#>4	ledate		x	stamp %s
+0	leshort		0x268	MS Windows COFF Motorola 68000 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x1f0	MS Windows COFF PowerPC object file
+#>4	ledate		x	stamp %s
+0	leshort		0x290	MS Windows COFF PA-RISC object file
+#>4	ledate		x	stamp %s
+
+# XXX - according to Microsoft's spec, at an offset of 0x3c in a
+# PE-format executable is the offset in the file of the PE header;
+# unfortunately, that's a little-endian offset, and there's no way
+# to specify an indirect offset with a specified byte order.
+# So, for now, we assume the standard MS-DOS stub, which puts the
+# PE header at 0x80 = 128.
+#
+# Required OS version and subsystem version were 4.0 on some NT 3.51
+# executables built with Visual C++ 4.0, so it's not clear that
+# they're interesting.	The user version was 0.0, but there's
+# probably some linker directive to set it.  The linker version was
+# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
+#
+# many of the compressed formats were extraced from IDARC 1.23 source code
+#
+0	string	MZ
+!:mime	application/x-dosexec
+>0x18  leshort <0x40 MS-DOS executable
+>0 string MZ\0\0\0\0\0\0\0\0\0\0PE\0\0 \b, PE for MS Windows
+>>&18	leshort&0x2000	>0	(DLL)
+>>&88	leshort		0	(unknown subsystem)
+>>&88	leshort		1	(native)
+>>&88	leshort		2	(GUI)
+>>&88	leshort		3	(console)
+>>&88	leshort		7	(POSIX)
+>>&0	leshort		0x0	unknown processor
+>>&0	leshort		0x14c	Intel 80386
+>>&0	leshort		0x166	MIPS R4000
+>>&0	leshort		0x184	Alpha
+>>&0	leshort		0x268	Motorola 68000
+>>&0	leshort		0x1f0	PowerPC
+>>&0	leshort		0x290	PA-RISC
+>>&18	leshort&0x0100	>0	32-bit
+>>&18	leshort&0x1000	>0	system file
+>>&0xf4 search/0x140 \x0\x40\x1\x0
+>>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
+>30		string	Copyright\ 1989-1990\ PKWARE\ Inc.	Self-extracting PKZIP archive
+!:mime	application/zip
+# Is next line correct? One might expect "Corp." not "Copr." If it is right, add a note to that effect.
+>30		string	PKLITE\ Copr.	Self-extracting PKZIP archive
+!:mime	application/zip
+
+>0x18  leshort >0x3f
+>>(0x3c.l) string PE\0\0 PE
+>>>(0x3c.l+25) byte		1 \b32 executable
+>>>(0x3c.l+25) byte		2 \b32+ executable
+# hooray, there's a DOS extender using the PE format, with a valid PE
+# executable inside (which just prints a message and exits if run in win)
+>>>(0x3c.l+92)	leshort		<10
+>>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender
+>>>>(8.s*16) string !32STUB for MS Windows
+>>>>>(0x3c.l+22)	leshort&0x2000	>0	(DLL)
+>>>>>(0x3c.l+92)	leshort		0	(unknown subsystem)
+>>>>>(0x3c.l+92)	leshort		1	(native)
+>>>>>(0x3c.l+92)	leshort		2	(GUI)
+>>>>>(0x3c.l+92)	leshort		3	(console)
+>>>>>(0x3c.l+92)	leshort		7	(POSIX)
+>>>(0x3c.l+92)	leshort		10	(EFI application)
+>>>(0x3c.l+92)	leshort		11	(EFI boot service driver)
+>>>(0x3c.l+92)	leshort		12	(EFI runtime driver)
+>>>(0x3c.l+92)	leshort		13	(XBOX)
+>>>(0x3c.l+4)	leshort		0x0	unknown processor
+>>>(0x3c.l+4)	leshort		0x14c	Intel 80386
+>>>(0x3c.l+4)	leshort		0x166	MIPS R4000
+>>>(0x3c.l+4)	leshort		0x184	Alpha
+>>>(0x3c.l+4)	leshort		0x268	Motorola 68000
+>>>(0x3c.l+4)	leshort		0x1f0	PowerPC
+>>>(0x3c.l+4)	leshort		0x290	PA-RISC
+>>>(0x3c.l+4)	leshort		0x200	Intel Itanium
+>>>(0x3c.l+22)	leshort&0x0100	>0	32-bit
+>>>(0x3c.l+22)	leshort&0x1000	>0	system file
+>>>(0x3c.l+232) lelong	>0	Mono/.Net assembly
+
+>>>>(0x3c.l+0xf8)	string		UPX0 \b, UPX compressed
+>>>>(0x3c.l+0xf8)	search/0x140	PEC2 \b, PECompact2 compressed
+>>>>(0x3c.l+0xf8)	search/0x140	UPX2
+>>>>>(&0x10.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
+>>>>(0x3c.l+0xf8)	search/0x140	.idata
+>>>>>(&0xe.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
+>>>>>(&0xe.l+(-4))	string		ZZ0 \b, ZZip self-extracting archive
+>>>>>(&0xe.l+(-4))	string		ZZ1 \b, ZZip self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.rsrc
+>>>>>(&0x0f.l+(-4))	string		a\\\4\5 \b, WinHKI self-extracting archive
+>>>>>(&0x0f.l+(-4))	string		Rar! \b, RAR self-extracting archive
+>>>>>(&0x0f.l+(-4))	search/0x3000	MSCF \b, InstallShield self-extracting archive
+>>>>>(&0x0f.l+(-4))	search/32	Nullsoft \b, Nullsoft Installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.data
+>>>>>(&0x0f.l)		string		WEXTRACT \b, MS CAB-Installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.petite\0 \b, Petite compressed
+>>>>>(0x3c.l+0xf7)	byte		x
+>>>>>>(&0x104.l+(-4))	string		=!sfx! \b, ACE self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.WISE \b, WISE installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.dz\0\0\0 \b, Dzip self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.reloc
+>>>>>(&0xe.l+(-4))	search/0x180	PK\3\4 \b, ZIP self-extracting archive (WinZip)
+
+>>>>&(0x3c.l+0xf8)	search/0x100	_winzip_ \b, ZIP self-extracting archive (WinZip)
+>>>>&(0x3c.l+0xf8)	search/0x100	SharedD \b, Microsoft Installer self-extracting archive
+>>>>0x30		string		Inno \b, InnoSetup self-extracting archive
+
+>>(0x3c.l) string !PE\0\0 MS-DOS executable
+
+>>(0x3c.l)		string		NE \b, NE
+>>>(0x3c.l+0x36)	byte		0 (unknown OS)
+>>>(0x3c.l+0x36)	byte		1 for OS/2 1.x
+>>>(0x3c.l+0x36)	byte		2 for MS Windows 3.x
+>>>(0x3c.l+0x36)	byte		3 for MS-DOS
+>>>(0x3c.l+0x36)	byte		>3 (unknown OS)
+>>>(0x3c.l+0x36)	byte		0x81 for MS-DOS, Phar Lap DOS extender
+>>>(0x3c.l+0x0c)	leshort&0x8003	0x8002 (DLL)
+>>>(0x3c.l+0x0c)	leshort&0x8003	0x8001 (driver)
+>>>&(&0x24.s-1)		string		ARJSFX \b, ARJ self-extracting archive
+>>>(0x3c.l+0x70)	search/0x80	WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
+
+>>(0x3c.l)		string		LX\0\0 \b, LX
+>>>(0x3c.l+0x0a)	leshort		<1 (unknown OS)
+>>>(0x3c.l+0x0a)	leshort		1 for OS/2
+>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
+>>>(0x3c.l+0x0a)	leshort		3 for DOS
+>>>(0x3c.l+0x0a)	leshort		>3 (unknown OS)
+>>>(0x3c.l+0x10)	lelong&0x28000	=0x8000 (DLL)
+>>>(0x3c.l+0x10)	lelong&0x20000	>0 (device driver)
+>>>(0x3c.l+0x10)	lelong&0x300	0x300 (GUI)
+>>>(0x3c.l+0x10)	lelong&0x28300	<0x300 (console)
+>>>(0x3c.l+0x08)	leshort		1 i80286
+>>>(0x3c.l+0x08)	leshort		2 i80386
+>>>(0x3c.l+0x08)	leshort		3 i80486
+>>>(8.s*16)		string		emx \b, emx
+>>>>&1			string		x %s
+>>>&(&0x54.l-3)		string		arjsfx \b, ARJ self-extracting archive
+
+# MS Windows system file, supposedly a collection of LE executables
+>>(0x3c.l)		string		W3 \b, W3 for MS Windows
+
+>>(0x3c.l)		string		LE\0\0 \b, LE executable
+>>>(0x3c.l+0x0a)	leshort		1
+# some DOS extenders use LE files with OS/2 header
+>>>>0x240		search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
+>>>>0x240		search/0x200	WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
+>>>>0x440		search/0x100	CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
+>>>>0x40		search/0x40	PMODE/W for MS-DOS, PMODE/W DOS extender
+>>>>0x40		search/0x40	STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
+>>>>0x40		search/0x80	STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
+>>>>0x40		search/0x80	DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
+# this is a wild guess; hopefully it is a specific signature
+>>>>&0x24		lelong		<0x50
+>>>>>(&0x4c.l)		string		\xfc\xb8WATCOM
+>>>>>>&0		search/8	3\xdbf\xb9 \b, 32Lite compressed
+# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
+#>>>>(0x3c.l+0x1c)	lelong		>0x10000 for OS/2
+# fails with DOS-Extenders.
+>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
+>>>(0x3c.l+0x0a)	leshort		3 for DOS
+>>>(0x3c.l+0x0a)	leshort		4 for MS Windows (VxD)
+>>>(&0x7c.l+0x26)	string		UPX \b, UPX compressed
+>>>&(&0x54.l-3)		string		UNACE \b, ACE self-extracting archive
+
+# looks like ASCII, probably some embedded copyright message.
+# and definitely not NE/LE/LX/PE
+>>0x3c		lelong	>0x20000000
+>>>(4.s*512)	leshort !0x014c \b, MZ for MS-DOS
+# header data too small for extended executable
+>2		long	!0
+>>0x18		leshort <0x40
+>>>(4.s*512)	leshort !0x014c
+
+>>>>&(2.s-514)	string	!LE
+>>>>>&-2	string	!BW \b, MZ for MS-DOS
+>>>>&(2.s-514)	string	LE \b, LE
+>>>>>0x240	search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
+# educated guess since indirection is still not capable enough for complex offset
+# calculations (next embedded executable would be at &(&2*512+&0-2)
+# I suspect there are only LE executables in these multi-exe files
+>>>>&(2.s-514)	string	BW
+>>>>>0x240	search/0x100	DOS/4G ,\b LE for MS-DOS, DOS4GW DOS extender (embedded)
+>>>>>0x240	search/0x100	!DOS/4G ,\b BW collection for MS-DOS
+
+# This sequence skips to the first COFF segment, usually .text
+>(4.s*512)	leshort		0x014c \b, COFF
+>>(8.s*16)	string		go32stub for MS-DOS, DJGPP go32 DOS extender
+>>(8.s*16)	string		emx
+>>>&1		string		x for DOS, Win or OS/2, emx %s
+>>&(&0x42.l-3)	byte		x 
+>>>&0x26	string		UPX \b, UPX compressed
+# and yet another guess: small .text, and after large .data is unusal, could be 32lite
+>>&0x2c		search/0xa0	.text
+>>>&0x0b	lelong		<0x2000
+>>>>&0		lelong		>0x6000 \b, 32lite compressed
+
+>(8.s*16) string $WdX \b, WDos/X DOS extender
+
+# .EXE formats (Greg Roelofs, newt at uchicago.edu)
+#
+>0x35	string	\x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
+>0xe7	string	LH/2\ Self-Extract \b, %s
+>0x1c	string	diet \b, diet compressed
+>0x1c	string	LZ09 \b, LZEXE v0.90 compressed
+>0x1c	string	LZ91 \b, LZEXE v0.91 compressed
+>0x1c	string	tz \b, TinyProg compressed
+>0x1e	string	PKLITE \b, %s compressed
+>0x64	string	W\ Collis\0\0 \b, Compack compressed
+>0x24	string	LHa's\ SFX \b, LHa self-extracting archive
+!:mime	application/x-lha
+>0x24	string	LHA's\ SFX \b, LHa self-extracting archive
+!:mime	application/x-lha
+>0x24	string	\ $ARX \b, ARX self-extracting archive
+>0x24	string	\ $LHarc \b, LHarc self-extracting archive
+>0x20	string	SFX\ by\ LARC \b, LARC self-extracting archive
+>1638	string	-lh5- \b, LHa self-extracting archive v2.13S
+>0x17888 string Rar! \b, RAR self-extracting archive
+>0x40	string aPKG \b, aPackage self-extracting archive
+
+>32	 string AIN
+>>35	 string 2		\b, AIN 2.x compressed
+>>35	 string <2		\b, AIN 1.x compressed
+>>35	 string >2		\b, AIN 1.x compressed
+>28	 string UC2X		\b, UCEXE compressed
+>28	 string WWP\  		\b, WWPACK compressed
+
+# skip to the end of the exe
+>(4.s*512)	long	x 
+>>&(2.s-517)	byte	x 
+>>>&0	string		PK\3\4 \b, ZIP self-extracting archive
+>>>&0	string		Rar! \b, RAR self-extracting archive
+>>>&0	string		=!\x11 \b, AIN 2.x self-extracting archive
+>>>&0	string		=!\x12 \b, AIN 2.x self-extracting archive
+>>>&0	string		=!\x17 \b, AIN 1.x self-extracting archive
+>>>&0	string		=!\x18 \b, AIN 1.x self-extracting archive
+>>>&7	search/400	**ACE** \b, ACE self-extracting archive
+>>>&0	search/0x480	UC2SFX\ Header \b, UC2 self-extracting archive
+
+>0x1c	string		RJSX \b, ARJ self-extracting archive
+# winarj stores a message in the stub instead of the sig in the MZ header
+>0x20	search/0xe0	aRJsfX \b, ARJ self-extracting archive
+
+# a few unknown ZIP sfxes, no idea if they are needed or if they are
+# already captured by the generic patterns above
+>122		string		Windows\ self-extracting\ ZIP	\b, ZIP self-extracting archive
+>(8.s*16)	search/0x20	PKSFX \b, ZIP self-extracting archive (PKZIP)
+# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
+#
+
+# TELVOX Teleinformatica CODEC self-extractor for OS/2:
+>49801	string	\x79\xff\x80\xff\x76\xff	\b, CODEC archive v3.21
+>>49824 leshort		=1			\b, 1 file
+>>49824 leshort		>1			\b, %u files
+
+# .COM formats (Daniel Quinlan, quinlan at yggdrasil.com)
+# Uncommenting only the first two lines will cover about 2/3 of COM files,
+# but it isn't feasible to match all COM files since there must be at least
+# two dozen different one-byte "magics".
+# test too generic ?
+#0	byte		0xe9		DOS executable (COM)
+#>0x1FE leshort		0xAA55		\b, boot code
+#>6	string		SFX\ of\ LHarc	(%s)
+#0	belong	0xffffffff		DOS executable (device driver)
+#CMD640X2.SYS
+#>10	string	>\x23			
+#>>10	string	!\x2e			
+#>>>17	string	<\x5B			
+#>>>>10	string	CMD640X2.SYS			\b, name: %.8s
+#UDMA.SYS
+#>10	string	<\x41			
+#>>12	string	>\x40			
+#>>>10	string	!$			
+#>>>>12	string	UDMA.SYS			\b, name: %.8s
+#CMD640X2.SYS
+#>10	string	<\x41			
+#>>12	string	>\x40			
+#>>>10	string	!$			
+#>>>>12	string	CMD640X2.SYS			\b, name: %.8s
+#KEYB.SYS
+#>10	string	<\x41			
+#>>12	string	>\x40			
+#>>>10	string	!$			
+#>>>>12	string	KEYB.SYS			\b, name: %.8s
+#BTCDROM.SYS
+#>22	string	>\x40			
+#>>22	string	<\x5B			
+#>>>23	string	<\x5B			
+#>>>>22	string	BTCDROM.SYS			\b, name: %.8s
+#ASPICD.SYS
+#>22	string	>\x40			
+#>>22	string	<\x5B			
+#>>>23	string	<\x5B			
+#>>>>22	string	ASPICD.SYS			\b, name: %.8s
+#ATAPICD.SYS
+#>76	string	\0			
+#>>77	string	>\x40			
+#>>>77	string	<\x5B			
+#>>>>77	string	ATAPICD.SYS			\b, name: %.8s
+# test too generic ?
+#0	byte		0x8c		DOS executable (COM)
+# updated by Joerg Jenderek at Oct 2008
+#0	ulelong		0xffff10eb	DR-DOS executable (COM)
+# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
+#0	ubeshort&0xeb8d	>0xeb00		
+# DR-DOS STACKER.COM SCREATE.SYS missed
+#>0	byte		0xeb		DOS executable (COM)
+#>>0x1FE leshort		0xAA55		\b, boot code
+#>>85	string		UPX		\b, UPX compressed
+#>>4	string		\ $ARX		\b, ARX self-extracting archive
+#>>4	string		\ $LHarc	\b, LHarc self-extracting archive
+#>>0x20e string		SFX\ by\ LARC	\b, LARC self-extracting archive
+# updated by Joerg Jenderek at Oct 2008
+#0	byte		0xb8		COM executable
+#0	uleshort&0x80ff	0x00b8		
+# modified by Joerg Jenderek
+#>1	lelong		!0x21cd4cff	COM executable for DOS
+# http://syslinux.zytor.com/comboot.php
+# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
+# start with assembler instructions mov eax,21cd4cffh
+0	uleshort&0xc0ff	0xc0b8		
+>1	lelong		0x21cd4cff	COM executable (32-bit COMBOOT)
+0	string	\x81\xfc		
+>4	string	\x77\x02\xcd\x20\xb9	
+>>36	string	UPX!			FREE-DOS executable (COM), UPX compressed
+252	string Must\ have\ DOS\ version DR-DOS executable (COM)
+# added by Joerg Jenderek at Oct 2008
+# GRR search is not working
+#34	search/2	UPX!		FREE-DOS executable (COM), UPX compressed
+34	string	UPX!			FREE-DOS executable (COM), UPX compressed
+35	string	UPX!			FREE-DOS executable (COM), UPX compressed
+# GRR search is not working
+#2	search/28	\xcd\x21	COM executable for MS-DOS
+#WHICHFAT.cOM
+#2	string	\xcd\x21		COM executable for DOS
+#DELTREE.cOM DELTREE2.cOM
+#4	string	\xcd\x21		COM executable for DOS
+#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
+#5	string	\xcd\x21		COM executable for DOS
+#DELTMP.COm HASFAT32.cOM
+#7	string	\xcd\x21		
+#>0	byte	!0xb8			COM executable for DOS
+#COMP.cOM MORE.COm
+#10	string	\xcd\x21		
+#>5	string	!\xcd\x21		COM executable for DOS
+#comecho.com
+#13	string	\xcd\x21		COM executable for DOS
+#HELP.COm EDIT.coM
+#18	string	\xcd\x21		COM executable for MS-DOS
+#NWRPLTRM.COm
+#23	string	\xcd\x21		COM executable for MS-DOS
+#LOADFIX.cOm LOADFIX.cOm
+#30	string	\xcd\x21		COM executable for MS-DOS
+#syslinux.com 3.11
+#70	string	\xcd\x21		COM executable for DOS
+# many compressed/converted COMs start with a copy loop instead of a jump
+0x6	search/0xa	\xfc\x57\xf3\xa5\xc3	COM executable for MS-DOS
+0x6	search/0xa	\xfc\x57\xf3\xa4\xc3	COM executable for DOS
+>0x18	search/0x10	\x50\xa4\xff\xd5\x73	\b, aPack compressed
+0x3c	string		W\ Collis\0\0		COM executable for MS-DOS, Compack compressed
+# FIXME: missing diet .com compression
+
+# miscellaneous formats
+0	string		LZ		MS-DOS executable (built-in)
+#0	byte		0xf0		MS-DOS program library data
+#
+
+# AAF files:
+# <stuartc at rd.bbc.co.uk> Stuart Cunningham
+0	string	\320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377			AAF legacy file using MS Structured Storage
+>30	byte	9		(512B sectors)
+>30	byte	12		(4kB sectors)
+0	string	\320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001			AAF file using MS Structured Storage
+>30	byte	9		(512B sectors)
+>30	byte	12		(4kB sectors)
+
+# Popular applications
+2080	string	Microsoft\ Word\ 6.0\ Document	%s
+!:mime	application/msword
+2080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
+!:mime	application/msword
+# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Word)
+2112	string	MSWordDoc			Microsoft Word document data
+!:mime	application/msword
+#
+0	belong	0x31be0000			Microsoft Word Document
+!:mime	application/msword
+#
+0	string	PO^Q`				Microsoft Word 6.0 Document
+!:mime	application/msword
+#
+0	string	\376\067\0\043			Microsoft Office Document
+!:mime	application/msword
+0	string	\333\245-\0\0\0			Microsoft Office Document
+!:mime	application/msword
+512	string		\354\245\301		Microsoft Word Document
+!:mime	application/msword
+#
+2080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
+!:mime	application/vnd.ms-excel
+
+2080	string	Foglio\ di\ lavoro\ Microsoft\ Exce	%s
+!:mime	application/vnd.ms-excel
+#
+# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
+2114	string	Biff5		Microsoft Excel 5.0 Worksheet
+!:mime	application/vnd.ms-excel
+# Italian MS-Excel
+2121	string	Biff5		Microsoft Excel 5.0 Worksheet
+!:mime	application/vnd.ms-excel
+0	string	\x09\x04\x06\x00\x00\x00\x10\x00	Microsoft Excel Worksheet
+!:mime	application/vnd.ms-excel
+#
+0	belong	0x00001a00	Lotus 1-2-3
+!:mime	application/x-123
+>4	belong	0x00100400	wk3 document data
+>4	belong	0x02100400	wk4 document data
+>4	belong	0x07800100	fm3 or fmb document data
+>4	belong	0x07800000	fm3 or fmb document data
+#
+0	belong	0x00000200	Lotus 1-2-3
+!:mime	application/x-123
+>4	belong	0x06040600	wk1 document data
+>4	belong	0x06800200	fmt document data
+0	string		WordPro\0	Lotus WordPro
+!:mime	application/vnd.lotus-wordpro
+0	string		WordPro\r\373	Lotus WordPro
+!:mime	application/vnd.lotus-wordpro
+
+
+# Summary: Script used by InstallScield to uninstall applications
+# Extension: .isu
+# Submitted by: unknown
+# Modified by (1): Abel Cheung <abelcheung at gmail.com> (replace useless entry)
+0		string		\x71\xa8\x00\x00\x01\x02
+>12		string		Stirling\ Technologies,		InstallShield Uninstall Script
+
+# Winamp .avs
+#0	string	Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
+0	string	Nullsoft\ AVS\ Preset\ 	Winamp plug in
+
+# Windows Metafont .WMF
+0	string	\327\315\306\232	ms-windows metafont .wmf
+0	string	\002\000\011\000	ms-windows metafont .wmf
+0	string	\001\000\011\000	ms-windows metafont .wmf
+
+#tz3 files whatever that is (MS Works files)
+0	string	\003\001\001\004\070\001\000\000	tz3 ms-works file
+0	string	\003\002\001\004\070\001\000\000	tz3 ms-works file
+0	string	\003\003\001\004\070\001\000\000	tz3 ms-works file
+
+# PGP sig files .sig
+#0 string \211\000\077\003\005\000\063\237\127 065 to  \027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
+
+# windows zips files .dmf
+0	string	MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
+
+
+#ico files
+0	string	\102\101\050\000\000\000\056\000\000\000\000\000\000\000	Icon for MS Windows
+
+# Windows icons (Ian Springer <ips at fpk.hp.com>)
+0	string	\000\000\001\000	MS Windows icon resource
+!:mime	image/x-ico
+>4	byte	1			- 1 icon
+>4	byte	>1			- %d icons
+>>6	byte	>0			\b, %dx
+>>>7	byte	>0			\b%d
+>>8	byte	0			\b, 256-colors
+>>8	byte	>0			\b, %d-colors
+
+
+# .chr files
+0	string	PK\010\010BGI	Borland font 
+>4	string	>\0	%s
+# then there is a copyright notice
+
+
+# .bgi files
+0	string	pk\010\010BGI	Borland device 
+>4	string	>\0	%s
+# then there is a copyright notice
+
+
+# Windows Recycle Bin record file (named INFO2)
+# By Abel Cheung (abelcheung AT gmail dot com)
+# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
+# Since Vista uses another structure, INFO2 structure probably won't change
+# anymore. Detailed analysis in:
+# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
+0	lelong		0x00000004
+>12	lelong		0x00000118	Windows Recycle Bin INFO2 file (Win98 or below)
+
+0	lelong		0x00000005
+>12	lelong		0x00000320	Windows Recycle Bin INFO2 file (Win2k - WinXP)
+
+
+##### put in Either Magic/font or Magic/news
+# Acroread or something	 files wrongly identified as G3	 .pfm
+# these have the form \000 \001 any? \002 \000 \000
+# or \000 \001 any? \022 \000 \000
+#0	string	\000\001 pfm?
+#>3	string	\022\000\000Copyright\	yes
+#>3	string	\002\000\000Copyright\	yes
+#>3	string	>\0	oops, not a font file. Cancel that.
+#it clashes with ttf files so put it lower down.
+
+# From Doug Lee via a FreeBSD pr
+9	string		GERBILDOC	First Choice document
+9	string		GERBILDB	First Choice database
+9	string		GERBILCLIP	First Choice database
+0	string		GERBIL		First Choice device file
+9	string		RABBITGRAPH	RabbitGraph file
+0	string		DCU1		Borland Delphi .DCU file
+0	string		=!<spell>	MKS Spell hash list (old format)
+0	string		=!<spell2>	MKS Spell hash list
+# Too simple - MPi
+#0	string		AH		Halo(TM) bitmapped font file
+0	lelong		0x08086b70	TurboC BGI file
+0	lelong		0x08084b50	TurboC Font file
+
+# WARNING: below line conflicts with Infocom game data Z-machine 3
+0	byte		0x03		DBase 3 data file
+>0x04	lelong		0		(no records)
+>0x04	lelong		>0		(%ld records)
+0	byte		0x83		DBase 3 data file with memo(s)
+>0x04	lelong		0		(no records)
+>0x04	lelong		>0		(%ld records)
+0	leshort		0x0006		DBase 3 index file
+0	string		PMCC		Windows 3.x .GRP file
+1	string		RDC-meg		MegaDots 
+>8	byte		>0x2F		version %c
+>9	byte		>0x2F		\b.%c file
+0	lelong		0x4C
+>4	lelong		0x00021401	Windows shortcut file
+
+# DOS EPS Binary File Header
+# From: Ed Sznyter <ews at Black.Market.NET>
+0	belong		0xC5D0D3C6	DOS EPS Binary File
+>4	long		>0		Postscript starts at byte %d
+>>8	long		>0		length %d
+>>>12	long		>0		Metafile starts at byte %d
+>>>>16	long		>0		length %d
+>>>20	long		>0		TIFF starts at byte %d
+>>>>24	long		>0		length %d
+
+# TNEF magic From "Joomy" <joomy at se-ed.net> 
+# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
+0	leshort		0x223e9f78	TNEF
+!:mime	application/vnd.ms-tnef
+
+# HtmlHelp files (.chm)
+0	string	ITSF\003\000\000\000\x60\000\000\000\001\000\000\000	MS Windows HtmlHelp Data
+
+# GFA-BASIC (Wolfram Kleff)
+2	string		GFA-BASIC3	GFA-BASIC 3 data
+
+#------------------------------------------------------------------------------
+# From Stuart Caie <kyzer at 4u.net> (developer of cabextract)
+# Microsoft Cabinet files
+0	string		MSCF\0\0\0\0	Microsoft Cabinet archive data
+!:mime application/vnd.ms-cab-compressed
+>8	lelong		x		\b, %u bytes
+>28	leshort		1		\b, 1 file
+>28	leshort		>1		\b, %u files
+
+# InstallShield Cabinet files
+0	string		ISc(		InstallShield Cabinet archive data
+>5	byte&0xf0	=0x60		version 6,
+>5	byte&0xf0	!0x60		version 4/5,
+>(12.l+40)	lelong	x		%u files
+
+# Windows CE package files
+0	string		MSCE\0\0\0\0	Microsoft WinCE install header
+>20	lelong		0		\b, architecture-independent
+>20	lelong		103		\b, Hitachi SH3
+>20	lelong		104		\b, Hitachi SH4
+>20	lelong		0xA11		\b, StrongARM
+>20	lelong		4000		\b, MIPS R4000
+>20	lelong		10003		\b, Hitachi SH3
+>20	lelong		10004		\b, Hitachi SH3E
+>20	lelong		10005		\b, Hitachi SH4
+>20	lelong		70001		\b, ARM 7TDMI
+>52	leshort		1		\b, 1 file
+>52	leshort		>1		\b, %u files
+>56	leshort		1		\b, 1 registry entry
+>56	leshort		>1		\b, %u registry entries
+
+
+# Windows Enhanced Metafile (EMF)
+# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp 
+# for further information.
+0	ulelong 1
+>40	string	\ EMF		Windows Enhanced Metafile (EMF) image data
+>>44	ulelong x		version 0x%x
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+0	string	COWD		VMWare3
+>4	byte	3		disk image
+>>32	lelong	x		(%d/
+>>36	lelong	x		\b%d/
+>>40	lelong	x		\b%d)
+>4	byte	2		undoable disk image
+>>32	string	>\0		(%s)
+
+0	string	VMDK		 VMware4 disk image
+0	string	KDMV		 VMware4 disk image
+
+#--------------------------------------------------------------------
+# Qemu Emulator Images
+# Lines written by Friedrich Schwittay (f.schwittay at yousable.de)
+# Made by reading sources and doing trial and error on existing
+# qcow files
+0	string	QFI	Qemu Image, Format: Qcow
+
+# Uncomment the following line to display Magic (only used for debugging
+# this magic number)
+#>0	string	x	, Magic: %s
+
+# There are currently 2 Versions: "1" and "2"
+# I do not use Version 2 and therefor branch here
+# but can assure: it works (tested on both versions)
+# Also my Qemu 0.9.0 which uses this Version 2 refuses
+# to start in its bios
+>0x04	belong	2	, Version: 2
+>0x04	belong	1	, Version: 1
+
+# Using the existence of the Backing File Offset to Branch or not
+# to read Backing File Information
+>>0xc	 belong	 >0	 , Backing File( Offset: %lu
+>>>(0xc.L)	 string >\0	, Path: %s
+
+# Didn't get the trick here how qemu stores the "Size" at this Position
+# There is actually something stored but nothing makes sense
+# The header in the sources talks about it
+#>>>16	 lelong	 x	 , Size: %lu
+
+# Modification time of the Backing File
+# Really useful if you want to know if your backing
+# file is still usable together with this image
+>>>20	 bedate x	, Mtime: %s )
+
+# Don't know how to calculate in Magicfiles
+# Also: this Information is not reliably
+#	stored in image-files
+>>24	 lelong	 x	 , Disk Size could be: %d * 256 bytes
+
+>4 belong  3   (v3)
+# Using the existence of the Backing File Offset to determine whether
+# to read Backing File Information
+>>8    bequad  >0   \b, has backing file
+# Note that this isn't a null-terminated string; the length is actually
+# (16.L). Assuming a null-terminated string happens to work usually, but it
+# may spew junk until it reaches a \0 in some cases. Also, since there's no
+# .Q modifier, we just use the bottom four bytes as an offset. Note that if
+# the file is over 4G, and the backing file path is stored after the first 4G,
+# the wrong filename will be printed. (This should be (8.Q), when that syntax
+# is introduced.)
+>>>(12.L)   string >\0 (path %s)
+>>24   bequad  x   \b, %lld bytes
+>>32   belong  1   \b, AES-encrypted
+
+0	string	QEVM		QEMU's suspend to disk image
+
+# QEMU QED Image
+# http://wiki.qemu.org/Features/QED/Specification
+0	string/b	QED\0		QEMU QED Image
+
+# VDI Image
+64	string/b	\x7f\x10\xda\xbe	VDI Image
+>68	string/b	\x01\x00\x01\x00	version 1.1
+>0	string		>\0			(%s)
+>368	lequad		x			 \b, %lld bytes
+
+0	string	Bochs\ Virtual\ HD\ Image	Bochs disk image,
+>32	string	x				type %s,
+>48	string	x				subtype %s
+
+0	lelong	0x02468ace			Bochs Sparse disk image
+
+# from http://filext.com by Derek M Jones <derek at knosof.co.uk>
+# False positive with PPT (also currently this string is too long)
+#0	string	\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06	Microsoft Installer
+0	string	\320\317\021\340\241\261\032\341	Microsoft Office Document
+#>48	byte	0x1B					Excel Document
+#!:mime application/vnd.ms-excel
+>546	string	bjbj			Microsoft Word Document
+!:mime	application/msword
+>546	string	jbjb			Microsoft Word Document
+!:mime	application/msword
+
+0	string	\224\246\056		Microsoft Word Document
+!:mime	application/msword
+
+512	string	R\0o\0o\0t\0\ \0E\0n\0t\0r\0y	Microsoft Word Document
+!:mime	application/msword
+
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# Magic type for Dell's BIOS .hdr files
+# Dell's .hdr
+0     string          $RBU
+>23   string          Dell            %s system BIOS
+>5    byte            2
+>>48  byte            x               version %d.
+>>49  byte            x               \b%d.
+>>50  byte            x               \b%d
+>5    byte            <2
+>>48  string          x               version %.3s
+
+# Type: Microsoft DirectDraw Surface
+# URL:	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
+# From: Morten Hustveit <morten at debian.org>
+0	string	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
+>16	lelong	>0			%hd x
+>12	lelong	>0			%hd,
+>84	string	x			%.4s
+
+# Type: Microsoft Document Imaging Format (.mdi)
+# URL:	http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
+# From: Daniele Sempione <scrows at oziosi.org>
+0	short	0x5045			Microsoft Document Imaging Format
+
+# MS eBook format (.lit)
+0	string	ITOLITLS		Microsoft Reader eBook Data
+>8	lelong	x			\b, version %u
+!:mime					application/x-ms-reader
+
+#------------------------------------------------------------------------------
+# $File: msdos,v 1.65 2009/09/19 16:28:11 christos Exp $
+# msdos:  file(1) magic for MS-DOS files
+#
+
+# .BAT files (Daniel Quinlan, quinlan at yggdrasil.com)
+# updated by Joerg Jenderek at Oct 2008
+0	string	@			
+>1	string/cW	\ echo\ off	DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	echo\ off	DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	rem\ 		DOS batch file text
+!:mime	text/x-msdos-batch
+>1	string/cW	set\ 		DOS batch file text
+!:mime	text/x-msdos-batch
+
+
+# OS/2 batch files are REXX. the second regex is a bit generic, oh well
+# the matched commands seem to be common in REXX and uncommon elsewhere
+100	regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc OS/2 REXX batch file text
+100	regex/c =^[\ \t]{0,10}say\ ['"]	     OS/2 REXX batch file text
+
+0	leshort		0x14c	MS Windows COFF Intel 80386 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x166	MS Windows COFF MIPS R4000 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x184	MS Windows COFF Alpha object file
+#>4	ledate		x	stamp %s
+0	leshort		0x268	MS Windows COFF Motorola 68000 object file
+#>4	ledate		x	stamp %s
+0	leshort		0x1f0	MS Windows COFF PowerPC object file
+#>4	ledate		x	stamp %s
+0	leshort		0x290	MS Windows COFF PA-RISC object file
+#>4	ledate		x	stamp %s
+
+# XXX - according to Microsoft's spec, at an offset of 0x3c in a
+# PE-format executable is the offset in the file of the PE header;
+# unfortunately, that's a little-endian offset, and there's no way
+# to specify an indirect offset with a specified byte order.
+# So, for now, we assume the standard MS-DOS stub, which puts the
+# PE header at 0x80 = 128.
+#
+# Required OS version and subsystem version were 4.0 on some NT 3.51
+# executables built with Visual C++ 4.0, so it's not clear that
+# they're interesting.	The user version was 0.0, but there's
+# probably some linker directive to set it.  The linker version was
+# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
+#
+# many of the compressed formats were extraced from IDARC 1.23 source code
+#
+0	string	MZ
+!:mime	application/x-dosexec
+>0x18  leshort <0x40 MS-DOS executable
+>0 string MZ\0\0\0\0\0\0\0\0\0\0PE\0\0 \b, PE for MS Windows
+>>&18	leshort&0x2000	>0	(DLL)
+>>&88	leshort		0	(unknown subsystem)
+>>&88	leshort		1	(native)
+>>&88	leshort		2	(GUI)
+>>&88	leshort		3	(console)
+>>&88	leshort		7	(POSIX)
+>>&0	leshort		0x0	unknown processor
+>>&0	leshort		0x14c	Intel 80386
+>>&0	leshort		0x166	MIPS R4000
+>>&0	leshort		0x184	Alpha
+>>&0	leshort		0x268	Motorola 68000
+>>&0	leshort		0x1f0	PowerPC
+>>&0	leshort		0x290	PA-RISC
+>>&18	leshort&0x0100	>0	32-bit
+>>&18	leshort&0x1000	>0	system file
+>>&0xf4 search/0x140 \x0\x40\x1\x0
+>>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
+>30		string	Copyright\ 1989-1990\ PKWARE\ Inc.	Self-extracting PKZIP archive
+!:mime	application/zip
+# Is next line correct? One might expect "Corp." not "Copr." If it is right, add a note to that effect.
+>30		string	PKLITE\ Copr.	Self-extracting PKZIP archive
+!:mime	application/zip
+
+>0x18  leshort >0x3f
+>>(0x3c.l) string PE\0\0 PE
+>>>(0x3c.l+25) byte		1 \b32 executable
+>>>(0x3c.l+25) byte		2 \b32+ executable
+# hooray, there's a DOS extender using the PE format, with a valid PE
+# executable inside (which just prints a message and exits if run in win)
+>>>(0x3c.l+92)	leshort		<10
+>>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender
+>>>>(8.s*16) string !32STUB for MS Windows
+>>>>>(0x3c.l+22)	leshort&0x2000	>0	(DLL)
+>>>>>(0x3c.l+92)	leshort		0	(unknown subsystem)
+>>>>>(0x3c.l+92)	leshort		1	(native)
+>>>>>(0x3c.l+92)	leshort		2	(GUI)
+>>>>>(0x3c.l+92)	leshort		3	(console)
+>>>>>(0x3c.l+92)	leshort		7	(POSIX)
+>>>(0x3c.l+92)	leshort		10	(EFI application)
+>>>(0x3c.l+92)	leshort		11	(EFI boot service driver)
+>>>(0x3c.l+92)	leshort		12	(EFI runtime driver)
+>>>(0x3c.l+92)	leshort		13	(XBOX)
+>>>(0x3c.l+4)	leshort		0x0	unknown processor
+>>>(0x3c.l+4)	leshort		0x14c	Intel 80386
+>>>(0x3c.l+4)	leshort		0x166	MIPS R4000
+>>>(0x3c.l+4)	leshort		0x184	Alpha
+>>>(0x3c.l+4)	leshort		0x268	Motorola 68000
+>>>(0x3c.l+4)	leshort		0x1f0	PowerPC
+>>>(0x3c.l+4)	leshort		0x290	PA-RISC
+>>>(0x3c.l+4)	leshort		0x200	Intel Itanium
+>>>(0x3c.l+22)	leshort&0x0100	>0	32-bit
+>>>(0x3c.l+22)	leshort&0x1000	>0	system file
+>>>(0x3c.l+232) lelong	>0	Mono/.Net assembly
+
+>>>>(0x3c.l+0xf8)	string		UPX0 \b, UPX compressed
+>>>>(0x3c.l+0xf8)	search/0x140	PEC2 \b, PECompact2 compressed
+>>>>(0x3c.l+0xf8)	search/0x140	UPX2
+>>>>>(&0x10.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
+>>>>(0x3c.l+0xf8)	search/0x140	.idata
+>>>>>(&0xe.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
+>>>>>(&0xe.l+(-4))	string		ZZ0 \b, ZZip self-extracting archive
+>>>>>(&0xe.l+(-4))	string		ZZ1 \b, ZZip self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.rsrc
+>>>>>(&0x0f.l+(-4))	string		a\\\4\5 \b, WinHKI self-extracting archive
+>>>>>(&0x0f.l+(-4))	string		Rar! \b, RAR self-extracting archive
+>>>>>(&0x0f.l+(-4))	search/0x3000	MSCF \b, InstallShield self-extracting archive
+>>>>>(&0x0f.l+(-4))	search/32	Nullsoft \b, Nullsoft Installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.data
+>>>>>(&0x0f.l)		string		WEXTRACT \b, MS CAB-Installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.petite\0 \b, Petite compressed
+>>>>>(0x3c.l+0xf7)	byte		x
+>>>>>>(&0x104.l+(-4))	string		=!sfx! \b, ACE self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.WISE \b, WISE installer self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.dz\0\0\0 \b, Dzip self-extracting archive
+>>>>(0x3c.l+0xf8)	search/0x140	.reloc
+>>>>>(&0xe.l+(-4))	search/0x180	PK\3\4 \b, ZIP self-extracting archive (WinZip)
+
+>>>>&(0x3c.l+0xf8)	search/0x100	_winzip_ \b, ZIP self-extracting archive (WinZip)
+>>>>&(0x3c.l+0xf8)	search/0x100	SharedD \b, Microsoft Installer self-extracting archive
+>>>>0x30		string		Inno \b, InnoSetup self-extracting archive
+
+>>(0x3c.l) string !PE\0\0 MS-DOS executable
+
+>>(0x3c.l)		string		NE \b, NE
+>>>(0x3c.l+0x36)	byte		0 (unknown OS)
+>>>(0x3c.l+0x36)	byte		1 for OS/2 1.x
+>>>(0x3c.l+0x36)	byte		2 for MS Windows 3.x
+>>>(0x3c.l+0x36)	byte		3 for MS-DOS
+>>>(0x3c.l+0x36)	byte		>3 (unknown OS)
+>>>(0x3c.l+0x36)	byte		0x81 for MS-DOS, Phar Lap DOS extender
+>>>(0x3c.l+0x0c)	leshort&0x8003	0x8002 (DLL)
+>>>(0x3c.l+0x0c)	leshort&0x8003	0x8001 (driver)
+>>>&(&0x24.s-1)		string		ARJSFX \b, ARJ self-extracting archive
+>>>(0x3c.l+0x70)	search/0x80	WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
+
+>>(0x3c.l)		string		LX\0\0 \b, LX
+>>>(0x3c.l+0x0a)	leshort		<1 (unknown OS)
+>>>(0x3c.l+0x0a)	leshort		1 for OS/2
+>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
+>>>(0x3c.l+0x0a)	leshort		3 for DOS
+>>>(0x3c.l+0x0a)	leshort		>3 (unknown OS)
+>>>(0x3c.l+0x10)	lelong&0x28000	=0x8000 (DLL)
+>>>(0x3c.l+0x10)	lelong&0x20000	>0 (device driver)
+>>>(0x3c.l+0x10)	lelong&0x300	0x300 (GUI)
+>>>(0x3c.l+0x10)	lelong&0x28300	<0x300 (console)
+>>>(0x3c.l+0x08)	leshort		1 i80286
+>>>(0x3c.l+0x08)	leshort		2 i80386
+>>>(0x3c.l+0x08)	leshort		3 i80486
+>>>(8.s*16)		string		emx \b, emx
+>>>>&1			string		x %s
+>>>&(&0x54.l-3)		string		arjsfx \b, ARJ self-extracting archive
+
+# MS Windows system file, supposedly a collection of LE executables
+>>(0x3c.l)		string		W3 \b, W3 for MS Windows
+
+>>(0x3c.l)		string		LE\0\0 \b, LE executable
+>>>(0x3c.l+0x0a)	leshort		1
+# some DOS extenders use LE files with OS/2 header
+>>>>0x240		search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
+>>>>0x240		search/0x200	WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
+>>>>0x440		search/0x100	CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
+>>>>0x40		search/0x40	PMODE/W for MS-DOS, PMODE/W DOS extender
+>>>>0x40		search/0x40	STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
+>>>>0x40		search/0x80	STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
+>>>>0x40		search/0x80	DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
+# this is a wild guess; hopefully it is a specific signature
+>>>>&0x24		lelong		<0x50
+>>>>>(&0x4c.l)		string		\xfc\xb8WATCOM
+>>>>>>&0		search/8	3\xdbf\xb9 \b, 32Lite compressed
+# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
+#>>>>(0x3c.l+0x1c)	lelong		>0x10000 for OS/2
+# fails with DOS-Extenders.
+>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
+>>>(0x3c.l+0x0a)	leshort		3 for DOS
+>>>(0x3c.l+0x0a)	leshort		4 for MS Windows (VxD)
+>>>(&0x7c.l+0x26)	string		UPX \b, UPX compressed
+>>>&(&0x54.l-3)		string		UNACE \b, ACE self-extracting archive
+
+# looks like ASCII, probably some embedded copyright message.
+# and definitely not NE/LE/LX/PE
+>>0x3c		lelong	>0x20000000
+>>>(4.s*512)	leshort !0x014c \b, MZ for MS-DOS
+# header data too small for extended executable
+>2		long	!0
+>>0x18		leshort <0x40
+>>>(4.s*512)	leshort !0x014c
+
+>>>>&(2.s-514)	string	!LE
+>>>>>&-2	string	!BW \b, MZ for MS-DOS
+>>>>&(2.s-514)	string	LE \b, LE
+>>>>>0x240	search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
+# educated guess since indirection is still not capable enough for complex offset
+# calculations (next embedded executable would be at &(&2*512+&0-2)
+# I suspect there are only LE executables in these multi-exe files
+>>>>&(2.s-514)	string	BW
+>>>>>0x240	search/0x100	DOS/4G ,\b LE for MS-DOS, DOS4GW DOS extender (embedded)
+>>>>>0x240	search/0x100	!DOS/4G ,\b BW collection for MS-DOS
+
+# This sequence skips to the first COFF segment, usually .text
+>(4.s*512)	leshort		0x014c \b, COFF
+>>(8.s*16)	string		go32stub for MS-DOS, DJGPP go32 DOS extender
+>>(8.s*16)	string		emx
+>>>&1		string		x for DOS, Win or OS/2, emx %s
+>>&(&0x42.l-3)	byte		x 
+>>>&0x26	string		UPX \b, UPX compressed
+# and yet another guess: small .text, and after large .data is unusal, could be 32lite
+>>&0x2c		search/0xa0	.text
+>>>&0x0b	lelong		<0x2000
+>>>>&0		lelong		>0x6000 \b, 32lite compressed
+
+>(8.s*16) string $WdX \b, WDos/X DOS extender
+
+# .EXE formats (Greg Roelofs, newt at uchicago.edu)
+#
+>0x35	string	\x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
+>0xe7	string	LH/2\ Self-Extract \b, %s
+>0x1c	string	diet \b, diet compressed
+>0x1c	string	LZ09 \b, LZEXE v0.90 compressed
+>0x1c	string	LZ91 \b, LZEXE v0.91 compressed
+>0x1c	string	tz \b, TinyProg compressed
+>0x1e	string	PKLITE \b, %s compressed
+>0x64	string	W\ Collis\0\0 \b, Compack compressed
+>0x24	string	LHa's\ SFX \b, LHa self-extracting archive
+!:mime	application/x-lha
+>0x24	string	LHA's\ SFX \b, LHa self-extracting archive
+!:mime	application/x-lha
+>0x24	string	\ $ARX \b, ARX self-extracting archive
+>0x24	string	\ $LHarc \b, LHarc self-extracting archive
+>0x20	string	SFX\ by\ LARC \b, LARC self-extracting archive
+>1638	string	-lh5- \b, LHa self-extracting archive v2.13S
+>0x17888 string Rar! \b, RAR self-extracting archive
+>0x40	string aPKG \b, aPackage self-extracting archive
+
+>32	 string AIN
+>>35	 string 2		\b, AIN 2.x compressed
+>>35	 string <2		\b, AIN 1.x compressed
+>>35	 string >2		\b, AIN 1.x compressed
+>28	 string UC2X		\b, UCEXE compressed
+>28	 string WWP\  		\b, WWPACK compressed
+
+# skip to the end of the exe
+>(4.s*512)	long	x 
+>>&(2.s-517)	byte	x 
+>>>&0	string		PK\3\4 \b, ZIP self-extracting archive
+>>>&0	string		Rar! \b, RAR self-extracting archive
+>>>&0	string		=!\x11 \b, AIN 2.x self-extracting archive
+>>>&0	string		=!\x12 \b, AIN 2.x self-extracting archive
+>>>&0	string		=!\x17 \b, AIN 1.x self-extracting archive
+>>>&0	string		=!\x18 \b, AIN 1.x self-extracting archive
+>>>&7	search/400	**ACE** \b, ACE self-extracting archive
+>>>&0	search/0x480	UC2SFX\ Header \b, UC2 self-extracting archive
+
+>0x1c	string		RJSX \b, ARJ self-extracting archive
+# winarj stores a message in the stub instead of the sig in the MZ header
+>0x20	search/0xe0	aRJsfX \b, ARJ self-extracting archive
+
+# a few unknown ZIP sfxes, no idea if they are needed or if they are
+# already captured by the generic patterns above
+>122		string		Windows\ self-extracting\ ZIP	\b, ZIP self-extracting archive
+>(8.s*16)	search/0x20	PKSFX \b, ZIP self-extracting archive (PKZIP)
+# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
+#
+
+# TELVOX Teleinformatica CODEC self-extractor for OS/2:
+>49801	string	\x79\xff\x80\xff\x76\xff	\b, CODEC archive v3.21
+>>49824 leshort		=1			\b, 1 file
+>>49824 leshort		>1			\b, %u files
+
+# .COM formats (Daniel Quinlan, quinlan at yggdrasil.com)
+# Uncommenting only the first two lines will cover about 2/3 of COM files,
+# but it isn't feasible to match all COM files since there must be at least
+# two dozen different one-byte "magics".
+# test too generic ?
+0	byte		0xe9		DOS executable (COM)
+>0x1FE leshort		0xAA55		\b, boot code
+>6	string		SFX\ of\ LHarc	(%s)
+0	belong	0xffffffff		DOS executable (device driver)
+#CMD640X2.SYS
+>10	string	>\x23			
+>>10	string	!\x2e			
+>>>17	string	<\x5B			
+>>>>10	string	x			\b, name: %.8s
+#UDMA.SYS KEYB.SYS CMD640X2.SYS
+>10	string	<\x41			
+>>12	string	>\x40			
+>>>10	string	!$			
+>>>>12	string	x			\b, name: %.8s
+#BTCDROM.SYS ASPICD.SYS
+>22	string	>\x40			
+>>22	string	<\x5B			
+>>>23	string	<\x5B			
+>>>>22	string	x			\b, name: %.8s
+#ATAPICD.SYS
+>76	string	\0			
+>>77	string	>\x40			
+>>>77	string	<\x5B			
+>>>>77	string	x			\b, name: %.8s
+# test too generic ?
+0	byte		0x8c		DOS executable (COM)
+# updated by Joerg Jenderek at Oct 2008
+0	ulelong		0xffff10eb	DR-DOS executable (COM)
+# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
+0	ubeshort&0xeb8d	>0xeb00		
+# DR-DOS STACKER.COM SCREATE.SYS missed
+>0	byte		0xeb		DOS executable (COM)
+>>0x1FE leshort		0xAA55		\b, boot code
+>>85	string		UPX		\b, UPX compressed
+>>4	string		\ $ARX		\b, ARX self-extracting archive
+>>4	string		\ $LHarc	\b, LHarc self-extracting archive
+>>0x20e string		SFX\ by\ LARC	\b, LARC self-extracting archive
+# updated by Joerg Jenderek at Oct 2008
+#0	byte		0xb8		COM executable
+0	uleshort&0x80ff	0x00b8		
+# modified by Joerg Jenderek
+>1	lelong		!0x21cd4cff	COM executable for DOS
+# http://syslinux.zytor.com/comboot.php
+# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
+# start with assembler instructions mov eax,21cd4cffh
+0	uleshort&0xc0ff	0xc0b8		
+>1	lelong		0x21cd4cff	COM executable (32-bit COMBOOT)
+0	string	\x81\xfc		
+>4	string	\x77\x02\xcd\x20\xb9	
+>>36	string	UPX!			FREE-DOS executable (COM), UPX compressed
+252	string Must\ have\ DOS\ version DR-DOS executable (COM)
+# added by Joerg Jenderek at Oct 2008
+# GRR search is not working
+#34	search/2	UPX!		FREE-DOS executable (COM), UPX compressed
+34	string	UPX!			FREE-DOS executable (COM), UPX compressed
+35	string	UPX!			FREE-DOS executable (COM), UPX compressed
+# GRR search is not working
+#2	search/28	\xcd\x21	COM executable for MS-DOS
+#WHICHFAT.cOM
+2	string	\xcd\x21		COM executable for DOS
+#DELTREE.cOM DELTREE2.cOM
+4	string	\xcd\x21		COM executable for DOS
+#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
+5	string	\xcd\x21		COM executable for DOS
+#DELTMP.COm HASFAT32.cOM
+7	string	\xcd\x21		
+>0	byte	!0xb8			COM executable for DOS
+#COMP.cOM MORE.COm
+10	string	\xcd\x21		
+>5	string	!\xcd\x21		COM executable for DOS
+#comecho.com
+13	string	\xcd\x21		COM executable for DOS
+#HELP.COm EDIT.coM
+18	string	\xcd\x21		COM executable for MS-DOS
+#NWRPLTRM.COm
+23	string	\xcd\x21		COM executable for MS-DOS
+#LOADFIX.cOm LOADFIX.cOm
+30	string	\xcd\x21		COM executable for MS-DOS
+#syslinux.com 3.11
+70	string	\xcd\x21		COM executable for DOS
+# many compressed/converted COMs start with a copy loop instead of a jump
+0x6	search/0xa	\xfc\x57\xf3\xa5\xc3	COM executable for MS-DOS
+0x6	search/0xa	\xfc\x57\xf3\xa4\xc3	COM executable for DOS
+>0x18	search/0x10	\x50\xa4\xff\xd5\x73	\b, aPack compressed
+0x3c	string		W\ Collis\0\0		COM executable for MS-DOS, Compack compressed
+# FIXME: missing diet .com compression
+
+# miscellaneous formats
+0	string		LZ		MS-DOS executable (built-in)
+#0	byte		0xf0		MS-DOS program library data
+#
+
+# AAF files:
+# <stuartc at rd.bbc.co.uk> Stuart Cunningham
+0	string	\320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377			AAF legacy file using MS Structured Storage
+>30	byte	9		(512B sectors)
+>30	byte	12		(4kB sectors)
+0	string	\320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001			AAF file using MS Structured Storage
+>30	byte	9		(512B sectors)
+>30	byte	12		(4kB sectors)
+
+# Popular applications
+2080	string	Microsoft\ Word\ 6.0\ Document	%s
+!:mime	application/msword
+2080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
+!:mime	application/msword
+# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Word)
+2112	string	MSWordDoc			Microsoft Word document data
+!:mime	application/msword
+#
+0	belong	0x31be0000			Microsoft Word Document
+!:mime	application/msword
+#
+0	string	PO^Q`				Microsoft Word 6.0 Document
+!:mime	application/msword
+#
+0	string	\376\067\0\043			Microsoft Office Document
+!:mime	application/msword
+0	string	\333\245-\0\0\0			Microsoft Office Document
+!:mime	application/msword
+512	string		\354\245\301		Microsoft Word Document
+!:mime	application/msword
+#
+2080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
+!:mime	application/vnd.ms-excel
+
+2080	string	Foglio\ di\ lavoro\ Microsoft\ Exce	%s
+!:mime	application/vnd.ms-excel
+#
+# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
+2114	string	Biff5		Microsoft Excel 5.0 Worksheet
+!:mime	application/vnd.ms-excel
+# Italian MS-Excel
+2121	string	Biff5		Microsoft Excel 5.0 Worksheet
+!:mime	application/vnd.ms-excel
+0	string	\x09\x04\x06\x00\x00\x00\x10\x00	Microsoft Excel Worksheet
+!:mime	application/vnd.ms-excel
+#
+0	belong	0x00001a00	Lotus 1-2-3
+!:mime	application/x-123
+>4	belong	0x00100400	wk3 document data
+>4	belong	0x02100400	wk4 document data
+>4	belong	0x07800100	fm3 or fmb document data
+>4	belong	0x07800000	fm3 or fmb document data
+#
+0	belong	0x00000200	Lotus 1-2-3
+!:mime	application/x-123
+>4	belong	0x06040600	wk1 document data
+>4	belong	0x06800200	fmt document data
+0	string		WordPro\0	Lotus WordPro
+!:mime	application/vnd.lotus-wordpro
+0	string		WordPro\r\373	Lotus WordPro
+!:mime	application/vnd.lotus-wordpro
+
+
+# Summary: Script used by InstallScield to uninstall applications
+# Extension: .isu
+# Submitted by: unknown
+# Modified by (1): Abel Cheung <abelcheung at gmail.com> (replace useless entry)
+0		string		\x71\xa8\x00\x00\x01\x02
+>12		string		Stirling\ Technologies,		InstallShield Uninstall Script
+
+# Winamp .avs
+#0	string	Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
+0	string	Nullsoft\ AVS\ Preset\ 	Winamp plug in
+
+# Windows Metafont .WMF
+0	string	\327\315\306\232	ms-windows metafont .wmf
+0	string	\002\000\011\000	ms-windows metafont .wmf
+0	string	\001\000\011\000	ms-windows metafont .wmf
+
+#tz3 files whatever that is (MS Works files)
+0	string	\003\001\001\004\070\001\000\000	tz3 ms-works file
+0	string	\003\002\001\004\070\001\000\000	tz3 ms-works file
+0	string	\003\003\001\004\070\001\000\000	tz3 ms-works file
+
+# PGP sig files .sig
+#0 string \211\000\077\003\005\000\063\237\127 065 to  \027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
+0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
+
+# windows zips files .dmf
+0	string	MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
+
+
+#ico files
+0	string	\102\101\050\000\000\000\056\000\000\000\000\000\000\000	Icon for MS Windows
+
+# Windows icons (Ian Springer <ips at fpk.hp.com>)
+0	string	\000\000\001\000	MS Windows icon resource
+!:mime	image/x-ico
+>4	byte	1			- 1 icon
+>4	byte	>1			- %d icons
+>>6	byte	>0			\b, %dx
+>>>7	byte	>0			\b%d
+>>8	byte	0			\b, 256-colors
+>>8	byte	>0			\b, %d-colors
+
+
+# .chr files
+0	string	PK\010\010BGI	Borland font 
+>4	string	>\0	%s
+# then there is a copyright notice
+
+
+# .bgi files
+0	string	pk\010\010BGI	Borland device 
+>4	string	>\0	%s
+# then there is a copyright notice
+
+
+# Windows Recycle Bin record file (named INFO2)
+# By Abel Cheung (abelcheung AT gmail dot com)
+# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
+# Since Vista uses another structure, INFO2 structure probably won't change
+# anymore. Detailed analysis in:
+# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
+0	lelong		0x00000004
+>12	lelong		0x00000118	Windows Recycle Bin INFO2 file (Win98 or below)
+
+0	lelong		0x00000005
+>12	lelong		0x00000320	Windows Recycle Bin INFO2 file (Win2k - WinXP)
+
+
+##### put in Either Magic/font or Magic/news
+# Acroread or something	 files wrongly identified as G3	 .pfm
+# these have the form \000 \001 any? \002 \000 \000
+# or \000 \001 any? \022 \000 \000
+#0	string	\000\001 pfm?
+#>3	string	\022\000\000Copyright\	yes
+#>3	string	\002\000\000Copyright\	yes
+#>3	string	>\0	oops, not a font file. Cancel that.
+#it clashes with ttf files so put it lower down.
+
+# From Doug Lee via a FreeBSD pr
+9	string		GERBILDOC	First Choice document
+9	string		GERBILDB	First Choice database
+9	string		GERBILCLIP	First Choice database
+0	string		GERBIL		First Choice device file
+9	string		RABBITGRAPH	RabbitGraph file
+0	string		DCU1		Borland Delphi .DCU file
+0	string		=!<spell>	MKS Spell hash list (old format)
+0	string		=!<spell2>	MKS Spell hash list
+# Too simple - MPi
+#0	string		AH		Halo(TM) bitmapped font file
+0	lelong		0x08086b70	TurboC BGI file
+0	lelong		0x08084b50	TurboC Font file
+
+# WARNING: below line conflicts with Infocom game data Z-machine 3
+0	byte		0x03		DBase 3 data file
+>0x04	lelong		0		(no records)
+>0x04	lelong		>0		(%ld records)
+0	byte		0x83		DBase 3 data file with memo(s)
+>0x04	lelong		0		(no records)
+>0x04	lelong		>0		(%ld records)
+0	leshort		0x0006		DBase 3 index file
+0	string		PMCC		Windows 3.x .GRP file
+1	string		RDC-meg		MegaDots 
+>8	byte		>0x2F		version %c
+>9	byte		>0x2F		\b.%c file
+0	lelong		0x4C
+>4	lelong		0x00021401	Windows shortcut file
+
+# DOS EPS Binary File Header
+# From: Ed Sznyter <ews at Black.Market.NET>
+0	belong		0xC5D0D3C6	DOS EPS Binary File
+>4	long		>0		Postscript starts at byte %d
+>>8	long		>0		length %d
+>>>12	long		>0		Metafile starts at byte %d
+>>>>16	long		>0		length %d
+>>>20	long		>0		TIFF starts at byte %d
+>>>>24	long		>0		length %d
+
+# TNEF magic From "Joomy" <joomy at se-ed.net> 
+# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
+0	leshort		0x223e9f78	TNEF
+!:mime	application/vnd.ms-tnef
+
+# HtmlHelp files (.chm)
+0	string	ITSF\003\000\000\000\x60\000\000\000\001\000\000\000	MS Windows HtmlHelp Data
+
+# GFA-BASIC (Wolfram Kleff)
+2	string		GFA-BASIC3	GFA-BASIC 3 data
+
+#------------------------------------------------------------------------------
+# From Stuart Caie <kyzer at 4u.net> (developer of cabextract)
+# Microsoft Cabinet files
+0	string		MSCF\0\0\0\0	Microsoft Cabinet archive data
+!:mime application/vnd.ms-cab-compressed
+>8	lelong		x		\b, %u bytes
+>28	leshort		1		\b, 1 file
+>28	leshort		>1		\b, %u files
+
+# InstallShield Cabinet files
+0	string		ISc(		InstallShield Cabinet archive data
+>5	byte&0xf0	=0x60		version 6,
+>5	byte&0xf0	!0x60		version 4/5,
+>(12.l+40)	lelong	x		%u files
+
+# Windows CE package files
+0	string		MSCE\0\0\0\0	Microsoft WinCE install header
+>20	lelong		0		\b, architecture-independent
+>20	lelong		103		\b, Hitachi SH3
+>20	lelong		104		\b, Hitachi SH4
+>20	lelong		0xA11		\b, StrongARM
+>20	lelong		4000		\b, MIPS R4000
+>20	lelong		10003		\b, Hitachi SH3
+>20	lelong		10004		\b, Hitachi SH3E
+>20	lelong		10005		\b, Hitachi SH4
+>20	lelong		70001		\b, ARM 7TDMI
+>52	leshort		1		\b, 1 file
+>52	leshort		>1		\b, %u files
+>56	leshort		1		\b, 1 registry entry
+>56	leshort		>1		\b, %u registry entries
+
+
+# Windows Enhanced Metafile (EMF)
+# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp 
+# for further information.
+0	ulelong 1
+>40	string	\ EMF		Windows Enhanced Metafile (EMF) image data
+>>44	ulelong x		version 0x%x
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+0	string	COWD		VMWare3
+>4	byte	3		disk image
+>>32	lelong	x		(%d/
+>>36	lelong	x		\b%d/
+>>40	lelong	x		\b%d)
+>4	byte	2		undoable disk image
+>>32	string	>\0		(%s)
+
+0	string	VMDK		 VMware4 disk image
+0	string	KDMV		 VMware4 disk image
+
+#--------------------------------------------------------------------
+# Qemu Emulator Images
+# Lines written by Friedrich Schwittay (f.schwittay at yousable.de)
+# Made by reading sources and doing trial and error on existing
+# qcow files
+0	string	QFI	Qemu Image, Format: Qcow
+
+# Uncomment the following line to display Magic (only used for debugging
+# this magic number)
+#>0	string	x	, Magic: %s
+
+# There are currently 2 Versions: "1" and "2"
+# I do not use Version 2 and therefor branch here
+# but can assure: it works (tested on both versions)
+# Also my Qemu 0.9.0 which uses this Version 2 refuses
+# to start in its bios
+>0x04	belong	2	, Version: 2
+>0x04	belong	1	, Version: 1
+
+# Using the existence of the Backing File Offset to Branch or not
+# to read Backing File Information
+>>0xc	 belong	 >0	 , Backing File( Offset: %lu
+>>>(0xc.L)	 string >\0	, Path: %s
+
+# Didn't get the trick here how qemu stores the "Size" at this Position
+# There is actually something stored but nothing makes sense
+# The header in the sources talks about it
+#>>>16	 lelong	 x	 , Size: %lu
+
+# Modification time of the Backing File
+# Really useful if you want to know if your backing
+# file is still usable together with this image
+>>>20	 bedate x	, Mtime: %s )
+
+# Don't know how to calculate in Magicfiles
+# Also: this Information is not reliably
+#	stored in image-files
+>>24	 lelong	 x	 , Disk Size could be: %d * 256 bytes
+
+0	string	QEVM		QEMU's suspend to disk image
+
+0	string	Bochs\ Virtual\ HD\ Image	Bochs disk image,
+>32	string	x				type %s,
+>48	string	x				subtype %s
+
+0	lelong	0x02468ace			Bochs Sparse disk image
+
+# from http://filext.com by Derek M Jones <derek at knosof.co.uk>
+# False positive with PPT (also currently this string is too long)
+#0	string	\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06	Microsoft Installer
+0	string	\320\317\021\340\241\261\032\341	Microsoft Office Document
+#>48	byte	0x1B					Excel Document
+#!:mime application/vnd.ms-excel
+>546	string	bjbj			Microsoft Word Document
+!:mime	application/msword
+>546	string	jbjb			Microsoft Word Document
+!:mime	application/msword
+
+0	string	\224\246\056		Microsoft Word Document
+!:mime	application/msword
+
+512	string	R\0o\0o\0t\0\ \0E\0n\0t\0r\0y	Microsoft Word Document
+!:mime	application/msword
+
+# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# Magic type for Dell's BIOS .hdr files
+# Dell's .hdr
+0	string $RBU
+>23	string Dell			%s system BIOS
+>48	string x			version %.3s
+
+# Type: Microsoft DirectDraw Surface
+# URL:	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
+# From: Morten Hustveit <morten at debian.org>
+0	string	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
+>16	lelong	>0			%hd x
+>12	lelong	>0			%hd,
+>84	string	x			%.4s
+
+# Type: Microsoft Document Imaging Format (.mdi)
+# URL:	http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
+# From: Daniele Sempione <scrows at oziosi.org>
+0	short	0x5045			Microsoft Document Imaging Format
+
+# MS eBook format (.lit)
+0	string	ITOLITLS		Microsoft Reader eBook Data
+>8	lelong	x			\b, version %u
+!:mime					application/x-ms-reader
+
+#------------------------------------------------------------------------------
+# $File: msvc,v 1.5 2009/09/19 16:28:11 christos Exp $
+# msvc:  file(1) magic for msvc
+# "H. Nanosecond" <aldomel at ix.netcom.com>
+# Microsoft visual C
+# 
+# I have version 1.0
+
+# .aps
+0	string	HWB\000\377\001\000\000\000	Microsoft Visual C .APS file
+
+# .ide
+#too long 0	string	\102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316	MSVC .ide
+0	string	\102\157\162\154\141\156\144\040\103\053\053\040\120\162\157	MSVC .ide
+
+# .res
+0	string	\000\000\000\000\040\000\000\000\377	MSVC .res
+0	string	\377\003\000\377\001\000\020\020\350	MSVC .res
+0	string	\377\003\000\377\001\000\060\020\350	MSVC .res
+
+#.lib
+0	string	\360\015\000\000	Microsoft Visual C library
+0	string	\360\075\000\000	Microsoft Visual C library
+0	string	\360\175\000\000	Microsoft Visual C library
+
+#.pch
+0	string	DTJPCH0\000\022\103\006\200	Microsoft Visual C .pch
+
+# .pdb
+# too long 0	string	Microsoft\ C/C++\ program\ database\ 
+0	string	Microsoft\ C/C++\ 	MSVC program database
+>18	string	program\ database\ 	
+>33	string	>\0	ver %s
+
+#.sbr
+0	string	\000\002\000\007\000	MSVC .sbr
+>5	string 	>\0	%s
+
+#.bsc
+0	string	\002\000\002\001	MSVC .bsc
+
+#.wsp
+0	string	1.00\ .0000.0000\000\003	MSVC .wsp version 1.0000.0000
+# these seem to start with the version and contain menus
+
+# ------------------------------------------------------------------------
+# $File: mup,v 1.4 2009/09/19 16:28:11 christos Exp $
+# mup: file(1) magic for Mup (Music Publisher) input file.
+#
+# From: Abel Cheung <abel (@) oaka.org>
+#
+# NOTE: This header is mainly proposed in the Arkkra mailing list,
+# and is not a mandatory header because of old mup input file
+# compatibility. Noteedit also use mup format, but is not forcing
+# user to use any header as well.
+#
+0		search/1	//!Mup		Mup music publication program input text
+>6		string		-Arkkra		(Arkkra)
+>>13		string		-		
+>>>16		string		.		
+>>>>14		string		x		\b, need V%.4s
+>>>15		string		.		
+>>>>14		string		x		\b, need V%.3s
+>6		string		-		
+>>9		string		.		
+>>>7		string		x		\b, need V%.4s
+>>8		string		.		
+>>>7		string		x		\b, need V%.3s
+
+#-----------------------------------------------------------------------------
+# $File: natinst,v 1.4 2009/09/19 16:28:11 christos Exp $
+# natinst:  file(1) magic for National Instruments Code Files
+
+#
+# From <egamez at fcfm.buap.mx> Enrique G�mez-Flores
+# version 1
+# Many formats still missing, we use, for the moment LabVIEW
+# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
+#
+0       string          RSRC            National Instruments,
+# Check if it's a LabVIEW File
+>8      string          LV              LabVIEW File,
+# Check wich kind of file is
+>>10    string          SB              Code Resource File, data
+>>10    string          IN              Virtual Instrument Program, data
+>>10    string          AR              VI Library, data
+# This is for Menu Libraries
+>8      string          LMNULBVW        Portable File Names, data
+# This is for General Resources
+>8      string          rsc             Resources File, data
+# This is for VXI Package
+0       string          VMAP            National Instruments, VXI File, data
+
+#------------------------------------------------------------------------------
+# $File: ncr,v 1.7 2009/09/19 16:28:11 christos Exp $
+# ncr:  file(1) magic for NCR Tower objects
+#
+# contributed by
+# Michael R. Wayne  ***  TMC & Associates  ***  INTERNET: wayne at ford-vax.arpa
+# uucp: {philabs | pyramid} !fmsrl7!wayne   OR   wayne at fmsrl7.UUCP
+#
+0	beshort		000610	Tower/XP rel 2 object
+>12	   belong		>0	not stripped
+>20	   beshort		0407	executable
+>20	   beshort		0410	pure executable
+>22	   beshort		>0	- version %ld
+0	beshort		000615	Tower/XP rel 2 object
+>12	   belong		>0	not stripped
+>20	   beshort		0407	executable
+>20	   beshort		0410	pure executable
+>22	   beshort		>0	- version %ld
+0	beshort		000620	Tower/XP rel 3 object
+>12	   belong		>0	not stripped
+>20	   beshort		0407	executable
+>20	   beshort		0410	pure executable
+>22	   beshort		>0	- version %ld
+0	beshort		000625	Tower/XP rel 3 object
+>12	   belong		>0	not stripped
+>20	   beshort		0407	executable
+>20	   beshort		0410	pure executable
+>22	   beshort		>0	- version %ld
+0	beshort		000630	Tower32/600/400 68020 object
+>12	   belong		>0	not stripped
+>20	   beshort		0407	executable
+>20	   beshort		0410	pure executable
+>22	   beshort		>0	- version %ld
+0	beshort		000640	Tower32/800 68020
+>18	   beshort		&020000	w/68881 object
+>18	   beshort		&040000	compatible object
+>18	   beshort		&060000	object
+>20	   beshort		0407	executable
+>20	   beshort		0413	pure executable
+>12	   belong		>0	not stripped
+>22	   beshort		>0	- version %ld
+0	beshort		000645	Tower32/800 68010
+>18	   beshort		&040000	compatible object
+>18	   beshort		&060000 object
+>20	   beshort		0407	executable
+>20	   beshort		0413	pure executable
+>12	   belong		>0	not stripped
+>22	   beshort		>0	- version %ld
+
+#------------------------------------------------------------------------------
+# $File: netbsd,v 1.18 2009/09/19 16:28:11 christos Exp $
+# netbsd:  file(1) magic for NetBSD objects
+#
+# All new-style magic numbers are in network byte order.
+#
+
+0	lelong			000000407	a.out NetBSD little-endian object file
+>16	lelong			>0		not stripped
+0	belong			000000407	a.out NetBSD big-endian object file
+>16	belong			>0		not stripped
+
+0	belong&0377777777	041400413	a.out NetBSD/i386 demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	041400410	a.out NetBSD/i386 pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	041400407	a.out NetBSD/i386
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	041400507	a.out NetBSD/i386 core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+0	belong&0377777777	041600413	a.out NetBSD/m68k demand paged
+>0	byte			&0x80		
+>>20	belong			<8192		shared library
+>>20	belong			=8192		dynamically linked executable
+>>20	belong			>8192		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	041600410	a.out NetBSD/m68k pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	041600407	a.out NetBSD/m68k
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	belong			!0		executable
+>>20	belong			=0		object file
+>16	belong			>0		not stripped
+0	belong&0377777777	041600507	a.out NetBSD/m68k core
+>12	string			>\0		from '%s'
+>32	belong			!0		(signal %d)
+
+0	belong&0377777777	042000413	a.out NetBSD/m68k4k demand paged
+>0	byte			&0x80		
+>>20	belong			<4096		shared library
+>>20	belong			=4096		dynamically linked executable
+>>20	belong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	042000410	a.out NetBSD/m68k4k pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	042000407	a.out NetBSD/m68k4k
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	belong			!0		executable
+>>20	belong			=0		object file
+>16	belong			>0		not stripped
+0	belong&0377777777	042000507	a.out NetBSD/m68k4k core
+>12	string			>\0		from '%s'
+>32	belong			!0		(signal %d)
+
+0	belong&0377777777	042200413	a.out NetBSD/ns32532 demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	042200410	a.out NetBSD/ns32532 pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	042200407	a.out NetBSD/ns32532
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	042200507	a.out NetBSD/ns32532 core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+0	belong&0377777777	045200507	a.out NetBSD/powerpc core
+>12	string			>\0		from '%s'
+
+0	belong&0377777777	042400413	a.out NetBSD/sparc demand paged
+>0	byte			&0x80		
+>>20	belong			<8192		shared library
+>>20	belong			=8192		dynamically linked executable
+>>20	belong			>8192		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	042400410	a.out NetBSD/sparc pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	042400407	a.out NetBSD/sparc
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	belong			!0		executable
+>>20	belong			=0		object file
+>16	belong			>0		not stripped
+0	belong&0377777777	042400507	a.out NetBSD/sparc core
+>12	string			>\0		from '%s'
+>32	belong			!0		(signal %d)
+
+0	belong&0377777777	042600413	a.out NetBSD/pmax demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	042600410	a.out NetBSD/pmax pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	042600407	a.out NetBSD/pmax
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	042600507	a.out NetBSD/pmax core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+0	belong&0377777777	043000413	a.out NetBSD/vax 1k demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	043000410	a.out NetBSD/vax 1k pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	043000407	a.out NetBSD/vax 1k
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	043000507	a.out NetBSD/vax 1k core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+0	belong&0377777777	045400413	a.out NetBSD/vax 4k demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400410	a.out NetBSD/vax 4k pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400407	a.out NetBSD/vax 4k
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400507	a.out NetBSD/vax 4k core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+# NetBSD/alpha does not support (and has never supported) a.out objects,
+# so no rules are provided for them.  NetBSD/alpha ELF objects are 
+# dealt with in "elf".
+0	lelong		0x00070185		ECOFF NetBSD/alpha binary
+>10	leshort		0x0001			not stripped
+>10	leshort		0x0000			stripped
+0	belong&0377777777	043200507	a.out NetBSD/alpha core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+0	belong&0377777777	043400413	a.out NetBSD/mips demand paged
+>0	byte			&0x80		
+>>20	belong			<8192		shared library
+>>20	belong			=8192		dynamically linked executable
+>>20	belong			>8192		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	043400410	a.out NetBSD/mips pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	belong			>0		not stripped
+0	belong&0377777777	043400407	a.out NetBSD/mips
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	belong			!0		executable
+>>20	belong			=0		object file
+>16	belong			>0		not stripped
+0	belong&0377777777	043400507	a.out NetBSD/mips core
+>12	string			>\0		from '%s'
+>32	belong			!0		(signal %d)
+
+0	belong&0377777777	043600413	a.out NetBSD/arm32 demand paged
+>0	byte			&0x80
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	043600410	a.out NetBSD/arm32 pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	043600407	a.out NetBSD/arm32
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+# NetBSD/arm26 has always used ELF objects, but it shares a core file
+# format with NetBSD/arm32.
+0	belong&0377777777	043600507	a.out NetBSD/arm core
+>12	string			>\0		from '%s'
+>32	lelong			!0		(signal %d)
+
+#------------------------------------------------------------------------------
+# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $
+# netscape:  file(1) magic for Netscape files
+# "H. Nanosecond" <aldomel at ix.netcom.com>
+# version 3 and 4 I think
+#
+
+# Netscape Address book  .nab
+0	string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
+
+# Netscape Communicator address book
+0   string   \000\017\102\111 Netscape Communicator address book
+
+# .snm Caches
+0	string		#\ Netscape\ folder\ cache	Netscape folder cache
+0	string	\000\036\204\220\000	Netscape folder cache
+# .n2p 
+# Net 2 Phone 
+#0	string	123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
+0	string	SX961999	Net2phone
+
+#
+#This is files ending in .art, FIXME add more rules
+0       string          JG\004\016\0\0\0\0      ART
+
+#------------------------------------------------------------------------------
+# $File: netware,v 1.4 2009/09/19 16:28:11 christos Exp $
+# netware:  file(1) magic for NetWare Loadable Modules (NLMs)
+# From: Mads Martin Joergensen <mmj at suse.de>
+
+0	string	NetWare\ Loadable\ Module	NetWare Loadable Module
+
+#------------------------------------------------------------------------------
+# $File: news,v 1.6 2009/09/19 16:28:11 christos Exp $
+# news:  file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
+#
+0	string		StartFontMetrics	ASCII font metrics
+0	string		StartFont	ASCII font bits
+0	belong		0x137A2944	NeWS bitmap font
+0	belong		0x137A2947	NeWS font family
+0	belong		0x137A2950	scalable OpenFont binary
+0	belong		0x137A2951	encrypted scalable OpenFont binary
+8	belong		0x137A2B45	X11/NeWS bitmap font
+8	belong		0x137A2B48	X11/NeWS font family
+
+#------------------------------------------------------------------------------
+# $File: nitpicker,v 1.4 2009/09/19 16:28:11 christos Exp $
+# nitpicker:  file(1) magic for Flowfiles.
+# From: Christian Jachmann <C.Jachmann at gmx.net> http://www.nitpicker.de
+0	string	NPFF	NItpicker Flow File 
+>4	byte	x	V%d.
+>5	byte	x	%d
+>6	bedate	x	started: %s
+>10	bedate	x	stopped: %s
+>14	belong	x	Bytes: %u
+>18	belong	x	Bytes1: %u
+>22	belong	x	Flows: %u
+>26	belong	x	Pkts: %u
+
+#------------------------------------------------------------------------------
+# $File: ocaml,v 1.4 2009/09/19 16:28:11 christos Exp $
+# ocaml: file(1) magic for Objective Caml files.
+0	string	Caml1999	Objective caml
+>8	string	X		exec file
+>8	string	I		interface file (.cmi)
+>8	string	O		object file (.cmo)
+>8	string	A		library file (.cma)
+>8	string	Y		native object file (.cmx)
+>8	string	Z		native library file (.cmxa)
+>8	string	M		abstract syntax tree implementation file
+>8	string	N		abstract syntax tree interface file
+>9	string	>\0		(Version %3.3s).
+
+#------------------------------------------------------------------------------
+# $File: octave,v 1.4 2009/09/19 16:28:11 christos Exp $
+# octave binary data file(1) magic, from Dirk Eddelbuettel <edd at debian.org>
+0	string		Octave-1-L	Octave binary data (little endian)
+0	string		Octave-1-B	Octave binary data (big endian)
+
+#------------------------------------------------------------------------------
+# $File: ole2compounddocs,v 1.4 2009/09/19 16:28:11 christos Exp $
+# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured
+# storage (http://en.wikipedia.org/wiki/Structured_Storage)
+# Additional tests for OLE 2 Compound Documents should be under this recipe.
+
+0   string  \320\317\021\340\241\261\032\341      OLE 2 Compound Document
+# - Microstation V8 DGN files (www.bentley.com)
+#   Last update on 10/23/2006 by Lester Hightower
+> 0x480  string  D\000g\000n\000~\000H                : Microstation V8 DGN
+# - Visio documents
+#   Last update on 10/23/2006 by Lester Hightower
+> 0x480  string  V\000i\000s\000i\000o\000D\000o\000c : Visio Document
+
+#------------------------------------------------------------------------------
+# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $
+# olf:  file(1) magic for OLF executables
+#
+# We have to check the byte order flag to see what byte order all the
+# other stuff in the header is in.
+#
+# MIPS R3000 may also be for MIPS R2000.
+# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
+#
+# Created by Erik Theisen <etheisen at openbsd.org>
+# Based on elf from Daniel Quinlan <quinlan at yggdrasil.com>
+0	string		\177OLF		OLF
+>4	byte		0		invalid class
+>4	byte		1		32-bit
+>4	byte		2		64-bit
+>7	byte		0		invalid os
+>7	byte		1		OpenBSD
+>7	byte		2		NetBSD
+>7	byte		3		FreeBSD
+>7	byte		4		4.4BSD
+>7	byte		5		Linux
+>7	byte		6		SVR4
+>7	byte		7		esix
+>7	byte		8		Solaris
+>7	byte		9		Irix
+>7	byte		10		SCO
+>7	byte		11		Dell
+>7	byte		12		NCR
+>5	byte		0		invalid byte order
+>5	byte		1		LSB
+>>16	leshort		0		no file type,
+>>16	leshort		1		relocatable,
+>>16	leshort		2		executable,
+>>16	leshort		3		shared object,
+# Core handling from Peter Tobias <tobias at server.et-inf.fho-emden.de>
+# corrections by Christian 'Dr. Disk' Hechelmann <drdisk at ds9.au.s.shuttle.de>
+>>16	leshort		4		core file
+>>>(0x38+0xcc) string	>\0		of '%s'
+>>>(0x38+0x10) lelong	>0		(signal %d),
+>>16	leshort		&0xff00		processor-specific,
+>>18	leshort		0		no machine,
+>>18	leshort		1		AT&T WE32100 - invalid byte order,
+>>18	leshort		2		SPARC - invalid byte order,
+>>18	leshort		3		Intel 80386,
+>>18	leshort		4		Motorola 68000 - invalid byte order,
+>>18	leshort		5		Motorola 88000 - invalid byte order,
+>>18	leshort		6		Intel 80486,
+>>18	leshort		7		Intel 80860,
+>>18	leshort		8		MIPS R3000_BE - invalid byte order,
+>>18	leshort		9		Amdahl - invalid byte order,
+>>18	leshort		10		MIPS R3000_LE,
+>>18	leshort		11		RS6000 - invalid byte order,
+>>18	leshort		15		PA-RISC - invalid byte order,
+>>18	leshort		16		nCUBE,
+>>18	leshort		17		VPP500,
+>>18	leshort		18		SPARC32PLUS,
+>>18	leshort		20		PowerPC,
+>>18	leshort		0x9026		Alpha,
+>>20	lelong		0		invalid version
+>>20	lelong		1		version 1
+>>36	lelong		1		MathCoPro/FPU/MAU Required
+>8	string		>\0		(%s)
+>5	byte		2		MSB
+>>16	beshort		0		no file type,
+>>16	beshort		1		relocatable,
+>>16	beshort		2		executable,
+>>16	beshort		3		shared object,
+>>16	beshort		4		core file,
+>>>(0x38+0xcc) string	>\0		of '%s'
+>>>(0x38+0x10) belong	>0		(signal %d),
+>>16	beshort		&0xff00		processor-specific,
+>>18	beshort		0		no machine,
+>>18	beshort		1		AT&T WE32100,
+>>18	beshort		2		SPARC,
+>>18	beshort		3		Intel 80386 - invalid byte order,
+>>18	beshort		4		Motorola 68000,
+>>18	beshort		5		Motorola 88000,
+>>18	beshort		6		Intel 80486 - invalid byte order,
+>>18	beshort		7		Intel 80860,
+>>18	beshort		8		MIPS R3000_BE,
+>>18	beshort		9		Amdahl,
+>>18	beshort		10		MIPS R3000_LE - invalid byte order,
+>>18	beshort		11		RS6000,
+>>18	beshort		15		PA-RISC,
+>>18	beshort		16		nCUBE,
+>>18	beshort		17		VPP500,
+>>18	beshort		18		SPARC32PLUS,
+>>18	beshort		20		PowerPC or cisco 4500,
+>>18	beshort		21		cisco 7500,
+>>18	beshort		24		cisco SVIP,
+>>18	beshort		25		cisco 7200,
+>>18	beshort		36		cisco 12000,
+>>18	beshort		0x9026		Alpha,
+>>20	belong		0		invalid version
+>>20	belong		1		version 1
+>>36	belong		1		MathCoPro/FPU/MAU Required
+
+#------------------------------------------------------------------------------
+# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $
+# os2:  file(1) magic for OS/2 files
+#
+
+# Provided 1998/08/22 by
+# David Mediavilla <davidme.news at REMOVEIFNOTSPAMusa.net>
+1	search/1	InternetShortcut	MS Windows 95 Internet shortcut text
+>24	search/1	>\ 			(URL=<%s>)
+
+# OS/2 URL objects
+# Provided 1998/08/22 by
+# David Mediavilla <davidme.news at REMOVEIFNOTSPAMusa.net>
+#0	string	http:			OS/2 URL object text
+#>5	string	>\			(WWW) <http:%s>
+#0	string	mailto:			OS/2 URL object text
+#>7	string	>\			(email) <%s>
+#0	string	news:			OS/2 URL object text
+#>5	string	>\			(Usenet) <%s>
+#0	string	ftp:			OS/2 URL object text
+#>4	string	>\			(FTP) <ftp:%s>
+#0	string	file:			OS/2 URL object text
+#>5	string	>\			(Local file) <%s>
+
+# >>>>> OS/2 INF/HLP <<<<<  (source: Daniel Dissett ddissett at netcom.com)
+# Carl Hauser (chauser.parc at xerox.com) and 
+# Marcus Groeber (marcusg at ph-cip.uni-koeln.de)
+# list the following header format in inf02a.doc:
+#
+#  int16 ID;           // ID magic word (5348h = "HS")
+#  int8  unknown1;     // unknown purpose, could be third letter of ID
+#  int8  flags;        // probably a flag word...
+#                      //  bit 0: set if INF style file
+#                      //  bit 4: set if HLP style file
+#                      // patching this byte allows reading HLP files
+#                      // using the VIEW command, while help files 
+#                      // seem to work with INF settings here as well.
+#  int16 hdrsize;      // total size of header
+#  int16 unknown2;     // unknown purpose
+# 
+0   string  HSP\x01\x9b\x00 OS/2 INF
+>107 string >0                      (%s)
+0   string  HSP\x10\x9b\x00     OS/2 HLP
+>107 string >0                      (%s)
+
+# OS/2 INI (this is a guess)
+0  string   \xff\xff\xff\xff\x14\0\0\0  OS/2 INI
+
+#------------------------------------------------------------------------------
+# $File: os400,v 1.5 2009/09/19 16:28:11 christos Exp $
+# os400:  file(1) magic for IBM OS/400 files
+#
+# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari at gmail.com
+# In spite of its quite variable format (due to internal memory page
+# length differences between CISC and RISC versions of the OS) the
+# SAVF structure hasn't suitable offsets to identify the catalog
+# header in the first descriptor where there are some useful infos,
+# so we must search in a somewhat large area for a particular string
+# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore
+# descriptor space) preceded by a two byte constant.
+#
+1090	 search/7393	\x19\xDB\xD8\xE2\xD9\xC4\xE2\xE2\xD7\xC3 IBM OS/400 save file data
+>&212	 byte		0x01			 \b, created with SAVOBJ
+>&212	 byte		0x02			 \b, created with SAVLIB
+>&212	 byte		0x07			 \b, created with SAVCFG
+>&212	 byte		0x08			 \b, created with SAVSECDTA
+>&212	 byte		0x0A			 \b, created with SAVSECDTA
+>&212	 byte		0x0B			 \b, created with SAVDLO
+>&212	 byte		0x0D			 \b, created with SAVLICPGM
+>&212	 byte		0x11			 \b, created with SAVCHGOBJ
+>&213	 byte		0x44			 \b, at least V5R4 to open
+>&213	 byte		0x43			 \b, at least V5R3 to open
+>&213	 byte		0x42			 \b, at least V5R2 to open
+>&213	 byte		0x41			 \b, at least V5R1 to open
+>&213	 byte		0x40			 \b, at least V4R5 to open
+>&213	 byte		0x3F			 \b, at least V4R4 to open
+>&213	 byte		0x3E			 \b, at least V4R3 to open
+>&213	 byte		0x3C			 \b, at least V4R2 to open
+>&213	 byte		0x3D			 \b, at least V4R1M4 to open
+>&213	 byte		0x3B			 \b, at least V4R1 to open
+>&213	 byte		0x3A			 \b, at least V3R7 to open
+>&213	 byte		0x35			 \b, at least V3R6 to open
+>&213	 byte		0x36			 \b, at least V3R2 to open
+>&213	 byte		0x34			 \b, at least V3R1 to open
+>&213	 byte		0x31			 \b, at least V3R0M5 to open
+>&213	 byte		0x30			 \b, at least V2R3 to open
+
+#------------------------------------------------------------------------------
+# $File: os9,v 1.6 2009/09/19 16:28:11 christos Exp $
+#
+# Copyright (c) 1996 Ignatios Souvatzis. 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 of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by Ignatios Souvatzis for
+#      the NetBSD project.
+# 4. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+#
+#
+#
+# OS9/6809 module descriptions:
+#
+0	beshort		0x87CD	OS9/6809 module:
+#
+>6	byte&0x0f	0x00	non-executable
+>6	byte&0x0f	0x01	machine language
+>6	byte&0x0f	0x02	BASIC I-code
+>6	byte&0x0f	0x03	Pascal P-code
+>6	byte&0x0f	0x04	C I-code
+>6	byte&0x0f	0x05	COBOL I-code
+>6	byte&0x0f	0x06	Fortran I-code
+#
+>6	byte&0xf0	0x10	program executable
+>6	byte&0xf0	0x20	subroutine
+>6	byte&0xf0	0x30	multi-module
+>6	byte&0xf0	0x40	data module
+#
+>6	byte&0xf0	0xC0	system module
+>6	byte&0xf0	0xD0	file manager
+>6	byte&0xf0	0xE0	device driver
+>6	byte&0xf0	0xF0	device descriptor
+#
+# OS9/m68k stuff (to be continued)
+#
+0	beshort		0x4AFC	OS9/68K module:
+#
+# attr
+>0x14	byte&0x80	0x80	re-entrant
+>0x14	byte&0x40	0x40	ghost
+>0x14	byte&0x20	0x20	system-state
+#
+# lang:
+#
+>0x13	byte		1	machine language
+>0x13	byte		2	BASIC I-code
+>0x13	byte		3	Pascal P-code
+>0x13	byte		4	C I-code
+>0x13	byte		5	COBOL I-code
+>0x13	byte		6	Fortran I-code
+#
+#
+# type:
+#
+>0x12	byte		1	program executable
+>0x12	byte		2	subroutine
+>0x12	byte		3	multi-module
+>0x12	byte		4	data module
+>0x12	byte		11	trap library
+>0x12	byte		12	system module
+>0x12	byte		13	file manager
+>0x12	byte		14	device driver
+>0x12	byte		15	device descriptor
+
+#------------------------------------------------------------------------------
+# $File: osf1,v 1.7 2009/09/19 16:28:11 christos Exp $
+#
+# Mach magic number info
+#
+0	long		0xefbe	OSF/Rose object
+# I386 magic number info
+#
+0	short		0565	i386 COFF object
+
+#------------------------------------------------------------------------------
+# $File: palm,v 1.7 2009/09/19 16:28:11 christos Exp $
+# palm:  file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
+#
+# Brian Lalor <blalor at hcirisc.cs.binghamton.edu>
+
+# appl
+60      belong                  0x6170706c      PalmOS application
+>0      string                  >\0             "%s"
+# TEXt
+60      belong                  0x54455874      AportisDoc file
+>0      string                  >\0             "%s"
+# HACK
+60      belong                  0x4841434b      HackMaster hack
+>0      string                  >\0             "%s"
+
+# Variety of PalmOS document types
+# Michael-John Turner <mj at debian.org>
+# Thanks to Hasan Umit Ezerce <humit at tr-net.net.tr> for his DocType
+60	string	                BVokBDIC	BDicty PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DB99DBOS	DB PalmOS document
+>0	string                  >\0             "%s"
+60	string	                vIMGView	FireViewer/ImageViewer PalmOS document
+>0	string                  >\0             "%s"
+60	string	                PmDBPmDB	HanDBase PalmOS document
+>0	string                  >\0             "%s"
+60	string	                InfoINDB	InfoView PalmOS document
+>0	string                  >\0             "%s"
+60	string	                ToGoToGo	iSilo PalmOS document
+>0	string                  >\0             "%s"
+60	string	                JfDbJBas	JFile PalmOS document
+>0	string                  >\0             "%s"
+60	string	                JfDbJFil	JFile Pro PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DATALSdb	List PalmOS document
+>0	string                  >\0             "%s"
+60	string	                Mdb1Mdb1	MobileDB PalmOS document
+>0	string                  >\0             "%s"
+60	string	                PNRdPPrs	PeanutPress PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DataPlkr	Plucker PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DataSprd	QuickSheet PalmOS document
+>0	string                  >\0             "%s"
+60	string	                SM01SMem	SuperMemo PalmOS document
+>0	string                  >\0             "%s"
+60	string	                TEXtTlDc	TealDoc PalmOS document
+>0	string                  >\0             "%s"
+60	string	                InfoTlIf	TealInfo PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DataTlMl	TealMeal PalmOS document
+>0	string                  >\0             "%s"
+60	string	                DataTlPt	TealPaint PalmOS document
+>0	string                  >\0             "%s"
+60	string	                dataTDBP	ThinkDB PalmOS document
+>0	string                  >\0             "%s"
+60	string	                TdatTide	Tides PalmOS document
+>0	string                  >\0             "%s"
+60	string	                ToRaTRPW	TomeRaider PalmOS document
+>0	string                  >\0             "%s"
+
+# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
+# For version 1.xx zTXTs, outputs version and numbers of bookmarks and
+#   annotations.
+# For other versions, just outputs version.
+#
+60		string		zTXT		A GutenPalm zTXT e-book
+>0		string		>\0		"%s"
+>(0x4E.L)	byte		0
+>>(0x4E.L+1)	byte		x		(v0.%02d)
+>(0x4E.L)	byte		1
+>>(0x4E.L+1)	byte		x		(v1.%02d)
+>>>(0x4E.L+10)	beshort		>0
+>>>>(0x4E.L+10) beshort		<2		- 1 bookmark
+>>>>(0x4E.L+10) beshort		>1		- %d bookmarks
+>>>(0x4E.L+14)	beshort		>0
+>>>>(0x4E.L+14) beshort		<2		- 1 annotation
+>>>>(0x4E.L+14) beshort		>1		- %d annotations
+>(0x4E.L)	byte		>1		(v%d.
+>>(0x4E.L+1)	byte		x		%02d)
+
+# Palm OS .prc file types
+60		string		libr		Palm OS dynamic library data
+>0		string		>\0		"%s"
+60		string		ptch		Palm OS operating system patch data
+>0		string		>\0		"%s"
+
+# Mobipocket (www.mobipocket.com), donated by Carl Witty
+60	string	                BOOKMOBI	Mobipocket E-book
+>0	string                  >\0             "%s"
+
+#------------------------------------------------------------------------------
+# $File: parix,v 1.4 2009/09/19 16:28:11 christos Exp $
+#
+# Parix COFF executables
+# From: Ignatios Souvatzis <ignatios at cs.uni-bonn.de>
+#
+0	beshort&0xfff	0xACE	PARIX
+>0	byte&0xf0	0x80	T800
+>0	byte&0xf0	0x90	T9000
+>19	byte&0x02	0x02	executable
+>19	byte&0x02	0x00	object
+>19	byte&0x0c	0x00	not stripped
+
+#------------------------------------------------------------------------------
+# $File: pbm,v 1.6 2009/09/19 16:28:11 christos Exp $
+# pbm:  file(1) magic for Portable Bitmap files
+#
+# XXX - byte order?
+#
+0	short	0x2a17	"compact bitmap" format (Poskanzer)
+
+#------------------------------------------------------------------------------
+# $File: pdf,v 1.6 2009/09/19 16:28:11 christos Exp $
+# pdf:  file(1) magic for Portable Document Format
+#
+
+0	string		%PDF-		PDF document
+!:mime	application/pdf
+>5	byte		x		\b, version %c
+>7	byte		x		\b.%c
+
+# From: Nick Schmalenberger <nick at schmalenberger.us>
+# Forms Data Format
+0       string          %FDF-           FDF document
+>5      byte            x               \b, version %c
+>7      byte            x               \b.%c
+
+#------------------------------------------------------------------------------
+# $File: pdp,v 1.8 2009/09/19 16:28:11 christos Exp $
+# pdp:  file(1) magic for PDP-11 executable/object and APL workspace
+#
+0	lelong		0101555		PDP-11 single precision APL workspace
+0	lelong		0101554		PDP-11 double precision APL workspace
+#
+# PDP-11 a.out
+#
+0	leshort		0407		PDP-11 executable
+>8	leshort		>0		not stripped
+>15	byte		>0		- version %ld
+
+0	leshort		0401		PDP-11 UNIX/RT ldp
+0	leshort		0405		PDP-11 old overlay
+
+0	leshort		0410		PDP-11 pure executable
+>8	leshort		>0		not stripped
+>15	byte		>0		- version %ld
+
+0	leshort		0411		PDP-11 separate I&D executable
+>8	leshort		>0		not stripped
+>15	byte		>0		- version %ld
+
+0	leshort		0437		PDP-11 kernel overlay
+
+# These last three are derived from 2.11BSD file(1)
+0	leshort		0413		PDP-11 demand-paged pure executable
+>8	leshort		>0		not stripped
+
+0	leshort		0430		PDP-11 overlaid pure executable
+>8	leshort		>0		not stripped
+
+0	leshort		0431		PDP-11 overlaid separate executable
+>8	leshort		>0		not stripped
+
+#------------------------------------------------------------------------------
+# $File: perl,v 1.16 2009/09/19 16:28:11 christos Exp $
+# perl:  file(1) magic for Larry Wall's perl language.
+#
+# The `eval' lines recognizes an outrageously clever hack.
+# Keith Waclena <keith at cerberus.uchicago.edu>
+# Send additions to <perl5-porters at perl.org>
+0	search/1/w	#!\ /bin/perl			Perl script text executable
+!:mime	text/x-perl
+0	search/1	eval\ "exec\ /bin/perl		Perl script text
+!:mime	text/x-perl
+0	search/1/w	#!\ /usr/bin/perl		Perl script text executable
+!:mime	text/x-perl
+0	search/1	eval\ "exec\ /usr/bin/perl	Perl script text
+!:mime	text/x-perl
+0	search/1/w	#!\ /usr/local/bin/perl		Perl script text executable
+!:mime	text/x-perl
+0	search/1	eval\ "exec\ /usr/local/bin/perl	Perl script text
+!:mime	text/x-perl
+0	search/1	eval\ '(exit\ $?0)'\ &&\ eval\ 'exec	Perl script text
+!:mime	text/x-perl
+
+
+# by Dmitry V. Levin and Alexey Tourbin
+# check the first line
+0	search/1	package
+>0	regex		\^package[\ \t]+[0-9A-Za-z_:]+\ *;	Perl5 module source text
+# not 'p', check other lines
+0	search/1	!p
+>0	regex		\^package[\ \t]+[0-9A-Za-z_:]+\ *;
+>>0	regex		\^1\ *;|\^(use|sub|my)\ .*[(;{=]	Perl5 module source text
+
+
+
+# Perl POD documents
+# From: Tom Hukins <tom at eborcom.com>
+0	search/1/W	\=pod\n		Perl POD document text
+0	search/1/W	\n\=pod\n	Perl POD document text
+0	search/1/W	\=head1\ 	Perl POD document text
+0	search/1/W	\n\=head1\ 	Perl POD document text
+0	search/1/W	\=head2\ 	Perl POD document text
+0	search/1/W	\n\=head2\ 	Perl POD document text
+
+# Perl Storable data files.
+0	string	perl-store	perl Storable (v0.6) data
+>4	byte	>0	(net-order %d)
+>>4	byte	&01	(network-ordered)
+>>4	byte	=3	(major 1)
+>>4	byte	=2	(major 1)
+
+0	string	pst0	perl Storable (v0.7) data
+>4	byte	>0
+>>4	byte	&01	(network-ordered)
+>>4	byte	=5	(major 2)
+>>4	byte	=4	(major 2)
+>>5	byte	>0	(minor %d)
+
+#------------------------------------------------------------------------------
+# $File: pgp,v 1.9 2009/09/19 16:28:11 christos Exp $
+# pgp:  file(1) magic for Pretty Good Privacy
+# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
+#
+0       beshort         0x9900                  PGP key public ring
+!:mime	application/x-pgp-keyring
+0       beshort         0x9501                  PGP key security ring
+!:mime	application/x-pgp-keyring
+0       beshort         0x9500                  PGP key security ring
+!:mime	application/x-pgp-keyring
+0	beshort		0xa600			PGP encrypted data
+#!:mime	application/pgp-encrypted
+#0	string		-----BEGIN\040PGP	text/PGP armored data
+!:mime	text/PGP # encoding: armored data
+#>15	string	PUBLIC\040KEY\040BLOCK-	public key block
+#>15	string	MESSAGE-		message
+#>15	string	SIGNED\040MESSAGE-	signed message
+#>15	string	PGP\040SIGNATURE-	signature
+
+2	string	---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK-	PGP public key block
+!:mime	application/pgp-keys
+0	string	-----BEGIN\040PGP\40MESSAGE-		PGP message
+!:mime	application/pgp
+0	string	-----BEGIN\040PGP\40SIGNATURE-		PGP signature
+!:mime	application/pgp-signature
+
+#------------------------------------------------------------------------------
+# $File: pkgadd,v 1.6 2009/09/19 16:28:11 christos Exp $
+# pkgadd:  file(1) magic for SysV R4 PKG Datastreams
+#
+0       string          #\ PaCkAgE\ DaTaStReAm  pkg Datastream (SVR4)
+!:mime	application/x-svr4-package
+
+#------------------------------------------------------------------------------
+# $File: plan9,v 1.5 2009/09/19 16:28:11 christos Exp $
+# plan9:  file(1) magic for AT&T Bell Labs' Plan 9 executables
+# From: "Stefan A. Haubenthal" <polluks at web.de>
+#
+0	belong		0x00000107	Plan 9 executable, Motorola 68k
+0	belong		0x000001EB	Plan 9 executable, Intel 386
+0	belong		0x00000247	Plan 9 executable, Intel 960
+0	belong		0x000002AB	Plan 9 executable, SPARC
+0	belong		0x00000407	Plan 9 executable, MIPS R3000
+0	belong		0x0000048B	Plan 9 executable, AT&T DSP 3210
+0	belong		0x00000517	Plan 9 executable, MIPS R4000 BE
+0	belong		0x000005AB	Plan 9 executable, AMD 29000
+0	belong		0x00000647	Plan 9 executable, ARM 7-something
+0	belong		0x000006EB	Plan 9 executable, PowerPC
+0	belong		0x00000797	Plan 9 executable, MIPS R4000 LE
+0	belong		0x0000084B	Plan 9 executable, DEC Alpha
+
+#------------------------------------------------------------------------------
+# $File: plus5,v 1.6 2009/09/19 16:28:11 christos Exp $
+# plus5:  file(1) magic for Plus Five's UNIX MUMPS
+#
+# XXX - byte order?  Paging Hokey....
+#
+0	short		0x259		mumps avl global
+>2	byte		>0		(V%d)
+>6	byte		>0		with %d byte name
+>7	byte		>0		and %d byte data cells
+0	short		0x25a		mumps blt global
+>2	byte		>0		(V%d)
+>8	short		>0		- %d byte blocks
+>15	byte		0x00		- P/D format
+>15	byte		0x01		- P/K/D format
+>15	byte		0x02		- K/D format
+>15	byte		>0x02		- Bad Flags
+
+#------------------------------------------------------------------------------
+# $File: printer,v 1.22 2009/09/19 16:28:11 christos Exp $
+# printer:  file(1) magic for printer-formatted files
+#
+
+# PostScript, updated by Daniel Quinlan (quinlan at yggdrasil.com)
+0	string		%!		PostScript document text
+!:mime	application/postscript
+!:apple	ASPSTEXT
+>2	string		PS-Adobe-	conforming
+>>11	string		>\0		DSC level %.3s
+>>>15	string		EPS		\b, type %s
+>>>15	string		Query		\b, type %s
+>>>15	string		ExitServer	\b, type %s
+>>>15   search/1000		%%LanguageLevel:\ 
+>>>>&0	string		>\0		\b, Level %s
+# Some PCs have the annoying habit of adding a ^D as a document separator
+0	string		\004%!		PostScript document text
+!:mime	application/postscript
+!:apple	ASPSTEXT
+>3	string		PS-Adobe-	conforming
+>>12	string		>\0		DSC level %.3s
+>>>16	string		EPS		\b, type %s
+>>>16	string		Query		\b, type %s
+>>>16	string		ExitServer	\b, type %s
+>>>16   search/1000		%%LanguageLevel:\ 
+>>>>&0	string		>\0		\b, Level %s
+0	string		\033%-12345X%!PS	PostScript document
+
+# DOS EPS Binary File Header
+# From: Ed Sznyter <ews at Black.Market.NET>
+0       belong          0xC5D0D3C6      DOS EPS Binary File
+>4      long            >0              Postscript starts at byte %d
+>>8     long            >0              length %d
+>>>12   long            >0              Metafile starts at byte %d
+>>>>16  long            >0              length %d
+>>>20   long            >0              TIFF starts at byte %d
+>>>>24  long            >0              length %d
+
+# Summary: Adobe's PostScript Printer Description File
+# Extension: .ppd
+# Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8
+# Submitted by: Yves Arrouye <arrouye at marin.fdn.fr>
+#
+0	string		*PPD-Adobe:\x20	PPD file
+>&0	string		x		\b, version %s
+
+# HP Printer Job Language
+0	string		\033%-12345X at PJL	HP Printer Job Language data
+# HP Printer Job Language
+# The header found on Win95 HP plot files is the "Silliest Thing possible" 
+# (TM)
+# Every driver puts the language at some random position, with random case
+# (LANGUAGE and Language)
+# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
+# From: Uwe Bonnes <bon at elektron.ikp.physik.th-darmstadt.de>
+# 
+0	string		\033%-12345X at PJL	HP Printer Job Language data
+>&0	string		>\0			%s			
+>>&0	string		>\0			%s			
+>>>&0	string		>\0			%s		
+>>>>&0	string		>\0			%s		
+#>15	string		\ ENTER\ LANGUAGE\ =
+#>31	string		PostScript		PostScript
+
+# HP Printer Control Language, Daniel Quinlan (quinlan at yggdrasil.com)
+0	string		\033E\033	HP PCL printer data
+>3	string		\&l0A		- default page size
+>3	string		\&l1A		- US executive page size
+>3	string		\&l2A		- US letter page size
+>3	string		\&l3A		- US legal page size
+>3	string		\&l26A		- A4 page size
+>3	string		\&l80A		- Monarch envelope size
+>3	string		\&l81A		- No. 10 envelope size
+>3	string		\&l90A		- Intl. DL envelope size
+>3	string		\&l91A		- Intl. C5 envelope size
+>3	string		\&l100A		- Intl. B5 envelope size
+>3	string		\&l-81A		- No. 10 envelope size (landscape)
+>3	string		\&l-90A		- Intl. DL envelope size (landscape)
+
+# IMAGEN printer-ready files:
+0	string	@document(		Imagen printer
+# this only works if "language xxx" is first item in Imagen header.
+>10	string	language\ impress	(imPRESS data)
+>10	string	language\ daisy		(daisywheel text)
+>10	string	language\ diablo	(daisywheel text)
+>10	string	language\ printer	(line printer emulation)
+>10	string	language\ tektronix	(Tektronix 4014 emulation)
+# Add any other languages that your Imagen uses - remember
+# to keep the word `text' if the file is human-readable.
+# [GRR 950115:  missing "postscript" or "ultrascript" (whatever it was called)]
+#
+# Now magic for IMAGEN font files...
+0	string		Rast		RST-format raster font data
+>45	string		>0		face %s
+# From Jukka Ukkonen
+0	string		\033[K\002\0\0\017\033(a\001\0\001\033(g	Canon Bubble Jet BJC formatted data
+
+# From <mike at flyn.org>
+# These are the /etc/magic entries to decode data sent to an Epson printer.
+0       string          \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P        Epson Stylus Color 460 data
+
+
+#------------------------------------------------------------------------------
+# zenographics:  file(1) magic for Zenographics ZjStream printer data
+# Rick Richardson  rickr at mn.rr.com
+0	string		JZJZ
+>0x12	string		ZZ		Zenographics ZjStream printer data (big-endian)
+0	string		ZJZJ
+>0x12	string		ZZ		Zenographics ZjStream printer data (little-endian)
+
+
+#------------------------------------------------------------------------------
+# Oak Technologies printer stream
+# Rick Richardson <rickr at mn.rr.com>
+0       string          OAK
+>0x07	byte		0
+>0x0b	byte		0	Oak Technologies printer stream
+
+# This would otherwise be recognized as PostScript - nick at debian.org
+0	string		%!VMF 		SunClock's Vector Map Format data
+
+#------------------------------------------------------------------------------
+# HP LaserJet 1000 series downloadable firmware file
+0	string	\xbe\xefABCDEFGH	HP LaserJet 1000 series downloadable firmware   
+
+# From: Paolo <oopla at users.sf.net>
+# Epson ESC/Page, ESC/PageColor 
+0	string	\x1b\x01 at EJL	Epson ESC/Page language printer data
+
+#------------------------------------------------------------------------------
+# $File: project,v 1.4 2009/09/19 16:28:11 christos Exp $
+# project:  file(1) magic for Project management
+# 
+# Magic strings for ftnchek project files. Alexander Mai
+0	string	FTNCHEK_\ P	project file for ftnchek
+>10	string	1		version 2.7
+>10	string	2		version 2.8 to 2.10
+>10	string	3		version 2.11 or later
+
+#------------------------------------------------------------------------------
+# $File: psdbms,v 1.6 2009/09/19 16:28:11 christos Exp $
+# psdbms:  file(1) magic for psdatabase
+#
+0	belong&0xff00ffff	0x56000000	ps database
+>1	string	>\0	version %s
+>4	string	>\0	from kernel %s
+
+#------------------------------------------------------------------------------
+# $File: pulsar,v 1.5 2009/09/19 16:28:12 christos Exp $
+# pulsar:  file(1) magic for Pulsar POP3 daemon binary files
+#
+# http://pulsar.sourceforge.net
+# mailto:rok.papez at lugos.si
+#
+
+0	belong	0x1ee7f11e	Pulsar POP3 daemon mailbox cache file.
+>4	ubelong	x		Version: %d.
+>8	ubelong	x		\b%d
+
+
+#------------------------------------------------------------------------------
+# $File: pyramid,v 1.7 2009/09/19 16:28:12 christos Exp $
+# pyramid:  file(1) magic for Pyramids
+#
+# XXX - byte order?
+#
+0	long		0x50900107	Pyramid 90x family executable
+0	long		0x50900108	Pyramid 90x family pure executable
+>16	long		>0		not stripped
+0	long		0x5090010b	Pyramid 90x family demand paged pure executable
+>16	long		>0		not stripped
+
+#------------------------------------------------------------------------------
+# $File: python,v 1.12 2009/10/27 14:49:57 christos Exp $
+# python:  file(1) magic for python
+#
+# From: David Necas <yeti at physics.muni.cz>
+# often the module starts with a multiline string
+0	string/t		"""	a python script text executable
+# MAGIC as specified in Python/import.c (1.5 to 2.6a1 and 3.1a0, assuming
+# that Py_UnicodeFlag is off for Python 2)
+# 20121  ( YEAR - 1995 ) + MONTH  + DAY (little endian followed by "\r\n"
+0	belong		0x994e0d0a	python 1.5/1.6 byte-compiled
+0	belong		0x87c60d0a	python 2.0 byte-compiled
+0	belong		0x2aeb0d0a	python 2.1 byte-compiled
+0	belong		0x2ded0d0a	python 2.2 byte-compiled
+0	belong		0x3bf20d0a	python 2.3 byte-compiled
+0	belong		0x6df20d0a	python 2.4 byte-compiled
+0	belong		0xb3f20d0a	python 2.5 byte-compiled
+0	belong		0xd1f20d0a	python 2.6 byte-compiled
+0	belong		0x3b0c0d0a	python 3.0 byte-compiled
+0	belong		0x4f0c0d0a	python 3.1 byte-compiled
+
+0	search/1/w	#!\ /usr/bin/python	Python script text executable
+!:mime text/x-python
+0	search/1/w	#!\ /usr/local/bin/python	Python script text executable
+!:mime text/x-python
+0	search/1	#!/usr/bin/env\ python	Python script text executable
+!:mime text/x-python
+0	search/1	#!\ /usr/bin/env\ ruby	Python script text executable
+!:mime text/x-python
+
+# from module.submodule import func1, func2
+0	regex/	\^from\\s+(\\w|\\.)+\\s+import.*$	Python script text executable
+!:strength - 20
+!:mime text/x-python
+
+# def __init__ (self, ...):
+0	search/4096	def\ __init__
+>&0	search/64 self	Python script text executable
+!:mime text/x-python
+
+# comments
+0	search/4096	'''
+>&0	regex	.*'''$	Python script text executable
+!:mime text/x-python
+
+0	search/4096	"""
+>&0	regex	.*"""$	Python script text executable
+!:mime text/x-python
+
+# try:
+# except: or finally:
+# block
+0	search/4096	try:
+>&0	regex	\^\\s*except.*:	Python script text executable
+!:mime text/x-python
+0	search/4096	try:
+>&0	search/4096	finally:	Python script text executable
+!:mime text/x-python
+
+# def name(args, args):
+0	regex	 \^(\ |\\t)*def\ +[a-zA-Z]+
+>&0	regex	\ *\\(([a-zA-Z]|,|\ )*\\):$ Python script text executable
+!:strength - 20
+!:mime text/x-python
+
+#------------------------------------------------------------------------------
+# $File: python,v 1.12 2009/10/27 14:49:57 christos Exp $
+# python:  file(1) magic for python
+#
+# From: David Necas <yeti at physics.muni.cz>
+# often the module starts with a multiline string
+0	string/t		"""	a python script text executable
+# MAGIC as specified in Python/import.c (1.5 to 2.6a1 and 3.1a0, assuming
+# that Py_UnicodeFlag is off for Python 2)
+# 20121  ( YEAR - 1995 ) + MONTH  + DAY (little endian followed by "\r\n"
+0	belong		0x994e0d0a	python 1.5/1.6 byte-compiled
+0	belong		0x87c60d0a	python 2.0 byte-compiled
+0	belong		0x2aeb0d0a	python 2.1 byte-compiled
+0	belong		0x2ded0d0a	python 2.2 byte-compiled
+0	belong		0x3bf20d0a	python 2.3 byte-compiled
+0	belong		0x6df20d0a	python 2.4 byte-compiled
+0	belong		0xb3f20d0a	python 2.5 byte-compiled
+0	belong		0xd1f20d0a	python 2.6 byte-compiled
+0	belong		0x3b0c0d0a	python 3.0 byte-compiled
+0	belong		0x4f0c0d0a	python 3.1 byte-compiled
+
+0	search/1/w	#!\ /usr/bin/python	Python script text executable
+!:mime text/x-python
+0	search/1/w	#!\ /usr/local/bin/python	Python script text executable
+!:mime text/x-python
+0	search/1	#!/usr/bin/env\ python	Python script text executable
+!:mime text/x-python
+0	search/1	#!\ /usr/bin/env\ ruby	Python script text executable
+!:mime text/x-python
+
+# from module.submodule import func1, func2
+0	regex/	\^from\\s+(\\w|\\.)+\\s+import.*$	Python script text executable
+!:strength - 20
+!:mime text/x-python
+
+# def __init__ (self, ...):
+0	search/4096	def\ __init__
+>&0	search/64 self	Python script text executable
+!:mime text/x-python
+
+# comments
+0	search/4096	'''
+>&0	regex	.*'''$	Python script text executable
+!:mime text/x-python
+
+0	search/4096	"""
+>&0	regex	.*"""$	Python script text executable
+!:mime text/x-python
+
+# try:
+# except: or finally:
+# block
+0	search/4096	try:
+>&0	regex	\^\\s*except.*:	Python script text executable
+!:mime text/x-python
+0	search/4096	try:
+>&0	search/4096	finally:	Python script text executable
+!:mime text/x-python
+
+#------------------------------------------------------------------------------
+# $File: revision,v 1.6 2009/09/19 16:28:12 christos Exp $
+# file(1) magic for revision control files
+# From Hendrik Scholz <hendrik at scholz.net>
+0	string	/1\ :pserver:	cvs password text file
+
+# Conary changesets
+# From: Jonathan Smith <smithj at rpath.com>
+0	belong	0xea3f81bb	Conary changeset data
+
+# Type: Git bundles (git-bundle)
+# From: Josh Triplett <josh at freedesktop.org>
+0	string	#\ v2\ git\ bundle\n	Git bundle
+
+# Type:	Mercurial bundles
+# From:	Seo Sanghyeon <tinuviel at sparcs.kaist.ac.kr>
+0	string	HG10		Mercurial bundle,
+>4	string	UN		uncompressed
+>4	string	BZ		bzip2 compressed
+
+#------------------------------------------------------------------------------
+# $File: riff,v 1.18 2009/09/19 16:28:12 christos Exp $
+# riff:  file(1) magic for RIFF format
+# See
+#
+#	http://www.seanet.com/users/matts/riffmci/riffmci.htm
+#
+# AVI section extended by Patrik R�dman <patrik+file-magic at iki.fi>
+#
+0	string		RIFF		RIFF (little-endian) data
+# RIFF Palette format
+>8	string		PAL		\b, palette
+>>16	leshort		x		\b, version %d
+>>18	leshort		x		\b, %d entries
+# RIFF Device Independent Bitmap format
+>8	string		RDIB		\b, device-independent bitmap
+>>16	string		BM		
+>>>30	leshort		12		\b, OS/2 1.x format
+>>>>34	leshort		x		\b, %d x
+>>>>36	leshort		x		%d
+>>>30	leshort		64		\b, OS/2 2.x format
+>>>>34	leshort		x		\b, %d x
+>>>>36	leshort		x		%d
+>>>30	leshort		40		\b, Windows 3.x format
+>>>>34	lelong		x		\b, %d x
+>>>>38	lelong		x		%d x
+>>>>44	leshort		x		%d
+# RIFF MIDI format
+>8	string		RMID		\b, MIDI
+# RIFF Multimedia Movie File format
+>8	string		RMMP		\b, multimedia movie
+# RIFF wrapper for MP3
+>8	string		RMP3		\b, MPEG Layer 3 audio
+# Microsoft WAVE format (*.wav)
+>8	string		WAVE		\b, WAVE audio
+!:mime	audio/x-wav
+>>20	leshort		1		\b, Microsoft PCM
+>>>34	leshort		>0		\b, %d bit
+>>20	leshort		2		\b, Microsoft ADPCM
+>>20	leshort		6		\b, ITU G.711 A-law
+>>20	leshort		7		\b, ITU G.711 mu-law
+>>20	leshort		17		\b, IMA ADPCM
+>>20	leshort		20		\b, ITU G.723 ADPCM (Yamaha)
+>>20	leshort		49		\b, GSM 6.10
+>>20	leshort		64		\b, ITU G.721 ADPCM
+>>20	leshort		80		\b, MPEG
+>>20	leshort		85		\b, MPEG Layer 3
+>>22	leshort		=1		\b, mono
+>>22	leshort		=2		\b, stereo
+>>22	leshort		>2		\b, %d channels
+>>24	lelong		>0		%d Hz
+# Corel Draw Picture
+>8	string		CDRA		\b, Corel Draw Picture
+!:mime	image/x-coreldraw
+# AVI == Audio Video Interleave
+>8	string		AVI\040		\b, AVI
+!:mime	video/x-msvideo
+>>12    string          LIST
+>>>20   string          hdrlavih
+>>>>&36 lelong          x               \b, %lu x
+>>>>&40 lelong          x               %lu,
+>>>>&4  lelong          >1000000        <1 fps,
+>>>>&4  lelong          1000000         1.00 fps,
+>>>>&4  lelong          500000          2.00 fps,
+>>>>&4  lelong          333333          3.00 fps,
+>>>>&4  lelong          250000          4.00 fps,
+>>>>&4  lelong          200000          5.00 fps,
+>>>>&4  lelong          166667          6.00 fps,
+>>>>&4  lelong          142857          7.00 fps,
+>>>>&4  lelong          125000          8.00 fps,
+>>>>&4  lelong          111111          9.00 fps,
+>>>>&4  lelong          100000          10.00 fps,
+# ]9.9,10.1[
+>>>>&4  lelong          <101010
+>>>>>&-4        lelong  >99010
+>>>>>>&-4       lelong  !100000         ~10 fps,
+>>>>&4  lelong          83333           12.00 fps,
+# ]11.9,12.1[
+>>>>&4  lelong          <84034
+>>>>>&-4        lelong  >82645
+>>>>>>&-4       lelong  !83333          ~12 fps,
+>>>>&4  lelong          66667           15.00 fps,
+# ]14.9,15.1[
+>>>>&4  lelong          <67114
+>>>>>&-4        lelong  >66225
+>>>>>>&-4       lelong  !66667          ~15 fps,
+>>>>&4  lelong          50000           20.00 fps,
+>>>>&4  lelong          41708           23.98 fps,
+>>>>&4  lelong          41667           24.00 fps,
+# ]23.9,24.1[
+>>>>&4  lelong          <41841
+>>>>>&-4        lelong  >41494
+>>>>>>&-4       lelong  !41708
+>>>>>>>&-4      lelong  !41667          ~24 fps,
+>>>>&4  lelong          40000           25.00 fps,
+# ]24.9,25.1[
+>>>>&4  lelong          <40161
+>>>>>&-4        lelong  >39841
+>>>>>>&-4       lelong  !40000          ~25 fps,
+>>>>&4  lelong          33367           29.97 fps,
+>>>>&4  lelong          33333           30.00 fps,
+# ]29.9,30.1[
+>>>>&4  lelong          <33445
+>>>>>&-4        lelong  >33223
+>>>>>>&-4       lelong  !33367
+>>>>>>>&-4      lelong  !33333          ~30 fps,
+>>>>&4  lelong          <32224          >30 fps,
+##>>>>&4  lelong          x               (%lu)
+##>>>>&20 lelong          x               %lu frames,
+# Note: The tests below assume that the AVI has 1 or 2 streams,
+#       "vids" optionally followed by "auds".
+#       (Should cover 99.9% of all AVIs.)
+# assuming avih length = 56
+>>>88   string  LIST
+>>>>96  string  strlstrh
+>>>>>108        string  vids    video:
+>>>>>>&0        lelong  0               uncompressed
+# skip past vids strh
+>>>>>>(104.l+108)       string  strf
+>>>>>>>(104.l+132)      lelong          1       RLE 8bpp
+>>>>>>>(104.l+132)      string/c        cvid    Cinepak
+>>>>>>>(104.l+132)      string/c        i263    Intel I.263
+>>>>>>>(104.l+132)      string/c        iv32    Indeo 3.2
+>>>>>>>(104.l+132)      string/c        iv41    Indeo 4.1
+>>>>>>>(104.l+132)      string/c        iv50    Indeo 5.0
+>>>>>>>(104.l+132)      string/c        mp42    Microsoft MPEG-4 v2
+>>>>>>>(104.l+132)      string/c        mp43    Microsoft MPEG-4 v3
+>>>>>>>(104.l+132)      string/c        fmp4    FFMpeg MPEG-4
+>>>>>>>(104.l+132)      string/c        mjpg    Motion JPEG
+>>>>>>>(104.l+132)      string/c        div3    DivX 3
+>>>>>>>>112             string/c        div3    Low-Motion
+>>>>>>>>112             string/c        div4    Fast-Motion
+>>>>>>>(104.l+132)      string/c        divx    DivX 4
+>>>>>>>(104.l+132)      string/c        dx50    DivX 5
+>>>>>>>(104.l+132)      string/c        xvid    XviD
+>>>>>>>(104.l+132)	string/c	h264	H.264
+>>>>>>>(104.l+132)      string/c        wmv3    Windows Media Video 9
+>>>>>>>(104.l+132)      string/c        h264    X.264 or H.264
+>>>>>>>(104.l+132)      lelong  0
+##>>>>>>>(104.l+132)      string  x       (%.4s)
+# skip past first (video) LIST
+>>>>(92.l+96)   string  LIST
+>>>>>(92.l+104) string  strlstrh
+>>>>>>(92.l+116)        string          auds    \b, audio:
+# auds strh length = 56:
+>>>>>>>(92.l+172)       string          strf
+>>>>>>>>(92.l+180)      leshort 0x0001  uncompressed PCM
+>>>>>>>>(92.l+180)      leshort 0x0002  ADPCM
+>>>>>>>>(92.l+180)      leshort 0x0006  aLaw
+>>>>>>>>(92.l+180)      leshort 0x0007  uLaw
+>>>>>>>>(92.l+180)      leshort 0x0050  MPEG-1 Layer 1 or 2
+>>>>>>>>(92.l+180)      leshort 0x0055  MPEG-1 Layer 3
+>>>>>>>>(92.l+180)      leshort 0x2000  Dolby AC3
+>>>>>>>>(92.l+180)      leshort 0x0161  DivX
+##>>>>>>>>(92.l+180)      leshort x       (0x%.4x)
+>>>>>>>>(92.l+182)      leshort 1       (mono,
+>>>>>>>>(92.l+182)      leshort 2       (stereo,
+>>>>>>>>(92.l+182)      leshort >2      (%d channels,
+>>>>>>>>(92.l+184)      lelong  x       %d Hz)
+# auds strh length = 64:
+>>>>>>>(92.l+180)       string          strf
+>>>>>>>>(92.l+188)      leshort 0x0001  uncompressed PCM
+>>>>>>>>(92.l+188)      leshort 0x0002  ADPCM
+>>>>>>>>(92.l+188)      leshort 0x0055  MPEG-1 Layer 3
+>>>>>>>>(92.l+188)      leshort 0x2000  Dolby AC3
+>>>>>>>>(92.l+188)      leshort 0x0161  DivX
+##>>>>>>>>(92.l+188)      leshort x       (0x%.4x)
+>>>>>>>>(92.l+190)      leshort 1       (mono,
+>>>>>>>>(92.l+190)      leshort 2       (stereo,
+>>>>>>>>(92.l+190)      leshort >2      (%d channels,
+>>>>>>>>(92.l+192)      lelong  x       %d Hz)
+# Animated Cursor format
+>8	string		ACON		\b, animated cursor
+# SoundFont 2 <mpruett at sgi.com>
+>8	string		sfbk		SoundFont/Bank
+# MPEG-1 wrapped in a RIFF, apparently
+>8      string          CDXA            \b, wrapped MPEG-1 (CDXA)
+>8	string		4XMV		\b, 4X Movie file 
+
+#
+# XXX - some of the below may only appear in little-endian form.
+#
+# Also "MV93" appears to be for one form of Macromedia Director
+# files, and "GDMF" appears to be another multimedia format.
+#
+0	string		RIFX		RIFF (big-endian) data
+# RIFF Palette format
+>8	string		PAL		\b, palette
+>>16	beshort		x		\b, version %d
+>>18	beshort		x		\b, %d entries
+# RIFF Device Independent Bitmap format
+>8	string		RDIB		\b, device-independent bitmap
+>>16	string		BM		
+>>>30	beshort		12		\b, OS/2 1.x format
+>>>>34	beshort		x		\b, %d x
+>>>>36	beshort		x		%d
+>>>30	beshort		64		\b, OS/2 2.x format
+>>>>34	beshort		x		\b, %d x
+>>>>36	beshort		x		%d
+>>>30	beshort		40		\b, Windows 3.x format
+>>>>34	belong		x		\b, %d x
+>>>>38	belong		x		%d x
+>>>>44	beshort		x		%d
+# RIFF MIDI format
+>8	string		RMID		\b, MIDI
+# RIFF Multimedia Movie File format
+>8	string		RMMP		\b, multimedia movie
+# Microsoft WAVE format (*.wav)
+>8	string		WAVE		\b, WAVE audio
+>>20	leshort		1		\b, Microsoft PCM
+>>>34	leshort		>0		\b, %d bit
+>>22	beshort		=1		\b, mono
+>>22	beshort		=2		\b, stereo
+>>22	beshort		>2		\b, %d channels
+>>24	belong		>0		%d Hz
+# Corel Draw Picture
+>8	string		CDRA		\b, Corel Draw Picture
+# AVI == Audio Video Interleave
+>8	string		AVI\040		\b, AVI
+# Animated Cursor format
+>8	string		ACON		\b, animated cursor
+# Notation Interchange File Format (big-endian only)
+>8	string		NIFF		\b, Notation Interchange File Format
+# SoundFont 2 <mpruett at sgi.com>
+>8	string		sfbk		SoundFont/Bank
+
+#------------------------------------------------------------------------------
+# $File: rpm,v 1.9 2009/11/06 13:53:52 christos Exp $
+#
+# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt at redhat.com)
+#
+0	belong		0xedabeedb	RPM
+!:mime	application/x-rpm
+>4	byte		x		v%d
+>5	byte		x		\b.%d
+>6	beshort		1		src
+>6	beshort		0		bin
+>>8	beshort		1		i386/x86_64
+>>8	beshort		2		Alpha/Sparc64
+>>8	beshort		3		Sparc
+>>8	beshort		4		MIPS
+>>8	beshort		5		PowerPC
+>>8	beshort		6		68000
+>>8	beshort		7		SGI
+>>8	beshort		8		RS6000
+>>8	beshort		9		IA64
+>>8	beshort		10		Sparc64
+>>8	beshort		11		MIPSel
+>>8	beshort		12		ARM
+>>8	beshort		13		MiNT
+>>8	beshort		14		S/390
+>>8	beshort		15		S/390x
+>>8	beshort		16		PowerPC64
+>>8	beshort		17		SuperH
+>>8	beshort		18		Xtensa
+>>8	beshort		255		noarch
+>>10	string		x		%s
+
+#delta RPM    Daniel Novotny (dnovotny at redhat.com)
+0	string	drpm	Delta RPM
+!:mime  application/x-rpm
+>12	string 	x	%s
+
+>>>8	beshort		11		MIPSel
+>>>8	beshort		12		ARM
+>>>8	beshort		13		MiNT
+>>>8	beshort		14		S/390
+>>>8	beshort		15		S/390x
+>>>8	beshort		16		PowerPC64
+>>>8	beshort		17		SuperH
+>>>8	beshort		18		Xtensa
+>>10	string		x		%s
+
+#------------------------------------------------------------------------------
+# $File: rpm,v 1.9 2009/11/06 13:53:52 christos Exp $
+#
+# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt at redhat.com)
+#
+0	belong		0xedabeedb	RPM
+!:mime	application/x-rpm
+>4	byte		x		v%d
+>5	byte		x		\b.%d
+>6	beshort		1		src
+>6	beshort		0		bin
+>>8	beshort		1		i386/x86_64
+>>8	beshort		2		Alpha/Sparc64
+>>8	beshort		3		Sparc
+>>8	beshort		4		MIPS
+>>8	beshort		5		PowerPC
+>>8	beshort		6		68000
+>>8	beshort		7		SGI
+>>8	beshort		8		RS6000
+>>8	beshort		9		IA64
+>>8	beshort		10		Sparc64
+>>8	beshort		11		MIPSel
+>>8	beshort		12		ARM
+>>8	beshort		13		MiNT
+>>8	beshort		14		S/390
+>>8	beshort		15		S/390x
+>>8	beshort		16		PowerPC64
+>>8	beshort		17		SuperH
+>>8	beshort		18		Xtensa
+>>8	beshort		255		noarch
+
+#delta RPM    Daniel Novotny (dnovotny at redhat.com)
+0	string	drpm	Delta RPM
+!:mime  application/x-rpm
+>12	string 	x	%s
+
+>>>8	beshort		11		MIPSel
+>>>8	beshort		12		ARM
+>>>8	beshort		13		MiNT
+>>>8	beshort		14		S/390
+>>>8	beshort		15		S/390x
+>>>8	beshort		16		PowerPC64
+>>>8	beshort		17		SuperH
+>>>8	beshort		18		Xtensa
+>>10	string		x		%s
+
+#------------------------------------------------------------------------------
+# $File: rtf,v 1.7 2009/09/19 16:28:12 christos Exp $
+# rtf:	file(1) magic for Rich Text Format (RTF)
+#
+# Duncan P. Simpson, D.P.Simpson at dcs.warwick.ac.uk
+#
+0	string		{\\rtf		Rich Text Format data,
+!:mime	text/rtf
+>5	string		1		version 1,
+>>6	string		\\ansi		ANSI
+>>6	string		\\mac		Apple Macintosh
+>>6	string		\\pc		IBM PC, code page 437
+>>6	string		\\pca		IBM PS/2, code page 850
+>>6	default		x		unknown character set
+>5	default		x		unknown version
+
+#------------------------------------------------------------------------------
+# $File: ruby,v 1.3 2009/09/19 16:28:12 christos Exp $
+# ruby:  file(1) magic for Ruby scripting language
+# URL:  http://www.ruby-lang.org/
+# From: Reuben Thomas <rrt at sc3d.org>
+
+# Ruby scripts
+0	search/1/w	#!\ /usr/bin/ruby	Ruby script text executable
+!:mime text/x-ruby
+0	search/1/w	#!\ /usr/local/bin/ruby	Ruby script text executable
+!:mime text/x-ruby
+0	search/1	#!/usr/bin/env\ ruby	Ruby script text executable
+!:mime text/x-ruby
+0	search/1	#!\ /usr/bin/env\ ruby	Ruby script text executable
+!:mime text/x-ruby
+
+# What looks like ruby, but does not have a shebang
+# (modules and such)
+# From: Lubomir Rintel <lkundrak at v3.sk>
+0	regex		\^[\ \t]*require[\ \t]'[A-Za-z_\/]+'
+>0	regex		include\ [A-Z]|def\ [a-z]|\ do$
+>>0	regex		\^[\ \t]*end([\ \t]*[;#].*)?$		Ruby script text
+!:mime	text/x-ruby
+0	regex		\^[\ \t]*(class|module)[\ \t][A-Z]
+>0	regex		(modul|includ)e\ [A-Z]|def\ [a-z]
+>>0	regex		\^[\ \t]*end([\ \t]*[;#].*)?$		Ruby module source text
+!:mime	text/x-ruby
+
+#------------------------------------------------------------------------------
+# $File: sc,v 1.6 2009/09/19 16:28:12 christos Exp $
+# sc:  file(1) magic for "sc" spreadsheet
+#
+38	string		Spreadsheet	sc spreadsheet file
+!:mime	application/x-sc
+
+#------------------------------------------------------------------------------
+# $File: sccs,v 1.6 2009/09/19 16:28:12 christos Exp $
+# sccs:  file(1) magic for SCCS archives
+#
+# SCCS archive structure:
+# \001h01207
+# \001s 00276/00000/00000
+# \001d D 1.1 87/09/23 08:09:20 ian 1 0
+# \001c date and time created 87/09/23 08:09:20 by ian
+# \001e
+# \001u
+# \001U
+# ... etc.
+# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
+# *Sigh*. And these both came from various parts of the USG.
+# Maybe we should just switch everybody from SCCS to RCS!
+# Further, you can't just say '\001h0', because the five-digit number
+# is a checksum that could (presumably) have any leading digit,
+# and we don't have regular expression matching yet. 
+# Hence the following official kludge:
+8	string		\001s\ 			SCCS archive data
+
+#------------------------------------------------------------------------------
+# $File: scientific,v 1.6 2009/09/19 16:28:12 christos Exp $
+# scientific:  file(1) magic for scientific formats 
+#
+# From: Joe Krahn <krahn at niehs.nih.gov>
+
+########################################################
+# CCP4 data and plot files:
+0	string		MTZ\040		MTZ reflection file
+
+92	string		PLOT%%84	Plot84 plotting file
+>52	byte		1		, Little-endian
+>55	byte		1		, Big-endian
+
+########################################################
+# Electron density MAP/MASK formats
+
+0	string		EZD_MAP	NEWEZD Electron Density Map
+109	string		MAP\040(  Old EZD Electron Density Map
+
+0	string/c	:-)\040Origin	BRIX Electron Density Map
+>170	string		>0	, Sigma:%.12s
+#>4	string		>0	%.178s
+#>4	addr		x	%.178s
+
+7	string		18\040!NTITLE	XPLOR ASCII Electron Density Map
+9	string		\040!NTITLE\012\040REMARK	CNS ASCII electron density map
+
+208	string		MAP\040	CCP4 Electron Density Map
+# Assumes same stamp for float and double (normal case)
+>212	byte		17	\b, Big-endian
+>212	byte		34	\b, VAX format
+>212	byte		68	\b, Little-endian
+>212	byte		85	\b, Convex native
+
+############################################################
+# X-Ray Area Detector images
+0	string	R-AXIS4\ \ \ 	R-Axis Area Detector Image:
+>796	lelong	<20		Little-endian, IP #%d,
+>>768	lelong	>0		Size=%dx
+>>772	lelong	>0		\b%d
+>796	belong	<20		Big-endian, IP #%d,
+>>768	belong	>0		Size=%dx
+>>772	belong	>0		\b%d
+
+0	string	RAXIS\ \ \ \ \ 	R-Axis Area Detector Image, Win32:
+>796	lelong	<20		Little-endian, IP #%d,
+>>768	lelong	>0		Size=%dx
+>>772	lelong	>0		\b%d
+>796	belong	<20		Big-endian, IP #%d,
+>>768	belong	>0		Size=%dx
+>>772	belong	>0		\b%d
+
+
+1028	string	MMX\000\000\000\000\000\000\000\000\000\000\000\000\000	MAR Area Detector Image,
+>1072	ulong	>1		Compressed(%d),
+>1100	ulong	>1		%d headers,
+>1104	ulong	>0		%d x
+>1108	ulong	>0		%d,
+>1120	ulong	>0		%d bits/pixel
+
+# Type: GEDCOM genealogical (family history) data
+# From: Giuseppe Bilotta
+0       search/1/c	0\ HEAD         GEDCOM genealogy text
+>&0     search		1\ GEDC
+>>&0    search		2\ VERS         version
+>>>&1   search/1	>\0		%s
+# From: Phil Endecott <phil05 at chezphil.org>
+0	string	\000\060\000\040\000\110\000\105\000\101\000\104		GEDCOM data
+0	string	\060\000\040\000\110\000\105\000\101\000\104\000		GEDCOM data
+0	string	\376\377\000\060\000\040\000\110\000\105\000\101\000\104	GEDCOM data
+0	string	\377\376\060\000\040\000\110\000\105\000\101\000\104\000	GEDCOM data
+
+#------------------------------------------------------------------------------
+# $File: securitycerts,v 1.4 2009/09/19 16:28:12 christos Exp $
+0	search/1		-----BEGIN\ CERTIFICATE------	RFC1421 Security Certificate text
+0	search/1		-----BEGIN\ NEW\ CERTIFICATE	RFC1421 Security Certificate Signing Request text
+0	belong	0xedfeedfe	Sun 'jks' Java Keystore File data
+
+0	string \0volume_key	volume_key escrow packet
+
+#------------------------------------------------------------------------------
+# $File: sendmail,v 1.7 2009/09/19 16:28:12 christos Exp $
+# sendmail:  file(1) magic for sendmail config files
+#
+# XXX - byte order?
+#
+0	byte	046	  Sendmail frozen configuration 
+>16	string	>\0	  - version %s
+0	short	0x271c	  Sendmail frozen configuration
+>16	string	>\0	  - version %s
+
+#------------------------------------------------------------------------------
+# sendmail:  file(1) magic for sendmail m4(1) files
+#
+# From Hendrik Scholz <hendrik at scholz.net>
+# i.e. files in /usr/share/sendmail/cf/
+#
+0   string  divert(-1)\n    sendmail m4 text file
+
+
+#------------------------------------------------------------------------------
+# $File: sequent,v 1.8 2009/09/19 16:28:12 christos Exp $
+# sequent:  file(1) magic for Sequent machines
+#
+# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
+# For Sequent's multiprocessor systems (incomplete).
+0	lelong	0x00ea        	BALANCE NS32000 .o
+>16	lelong	>0		not stripped
+>124	lelong	>0		version %ld
+0	lelong	0x10ea        	BALANCE NS32000 executable (0 @ 0)
+>16	lelong  >0            	not stripped
+>124	lelong	>0		version %ld
+0	lelong	0x20ea        	BALANCE NS32000 executable (invalid @ 0)
+>16	lelong  >0            	not stripped
+>124	lelong	>0		version %ld
+0	lelong	0x30ea        	BALANCE NS32000 standalone executable
+>16	lelong  >0          	not stripped
+>124	lelong	>0		version %ld
+#
+# Symmetry information added by Jason Merrill <jason at jarthur.claremont.edu>.
+# Symmetry magic nums will not be reached if DOS COM comes before them;
+# byte 0xeb is matched before these get a chance.
+0	leshort	0x12eb		SYMMETRY i386 .o
+>16	lelong	>0		not stripped
+>124	lelong	>0		version %ld
+0	leshort	0x22eb		SYMMETRY i386 executable (0 @ 0)
+>16	lelong	>0		not stripped
+>124	lelong	>0		version %ld
+0	leshort	0x32eb		SYMMETRY i386 executable (invalid @ 0)
+>16	lelong	>0		not stripped
+>124	lelong	>0		version %ld
+0	leshort	0x42eb		SYMMETRY i386 standalone executable
+>16	lelong	>0		not stripped
+>124	lelong	>0		version %ld
+
+#------------------------------------------------------------------------------
+# $File: sgi,v 1.17 2009/09/19 16:28:12 christos Exp $
+# sgi:  file(1) magic for Silicon Graphics applications
+
+#
+#
+# Performance Co-Pilot file types
+0	string	PmNs				PCP compiled namespace (V.0)
+0	string	PmN				PCP compiled namespace
+>3	string	>\0				(V.%1.1s)
+#3	lelong	0x84500526			PCP archive
+3	belong	0x84500526			PCP archive
+>7	byte	x				(V.%d)
+#>20	lelong	-2				temporal index
+#>20	lelong	-1				metadata
+#>20	lelong	0				log volume #0
+#>20	lelong	>0				log volume #%ld
+>20	belong	-2				temporal index
+>20	belong	-1				metadata
+>20	belong	0				log volume #0
+>20	belong	>0				log volume #%ld
+>24	string	>\0				host: %s
+0	string	PCPFolio			PCP
+>9	string	Version:			Archive Folio
+>18	string	>\0				(V.%s)
+0	string	#pmchart			PCP pmchart view
+>9	string	Version
+>17	string	>\0				(V%-3.3s)
+0	string	#kmchart			PCP kmchart view
+>9	string	Version
+>17	string	>\0				(V.%s)
+0	string	pmview				PCP pmview config
+>7	string	Version
+>15	string	>\0				(V%-3.3s)
+0	string	#pmlogger			PCP pmlogger config
+>10	string	Version
+>18	string	>\0				(V%1.1s)
+0	string	#pmdahotproc			PCP pmdahotproc config
+>13	string	Version
+>21	string	>\0				(V%-3.3s)
+0	string	PcPh				PCP Help
+>4	string	1				Index
+>4	string	2				Text
+>5	string	>\0				(V.%1.1s)
+0	string	#pmieconf-rules			PCP pmieconf rules
+>16	string	>\0				(V.%1.1s)
+3	string	pmieconf-pmie			PCP pmie config
+>17	string	>\0				(V.%1.1s)
+
+# SpeedShop data files
+0	lelong	0x13130303			SpeedShop data file
+
+# mdbm files
+0	lelong	0x01023962			mdbm file, version 0 (obsolete)
+0	string	mdbm				mdbm file,
+>5	byte	x				version %d,
+>6	byte	x				2^%d pages,
+>7	byte	x				pagesize 2^%d,
+>17	byte	x				hash %d,
+>11	byte	x				dataformat %d
+
+# Alias Maya files
+0	string	//Maya ASCII	Alias Maya Ascii File,
+>13	string	>\0	version %s
+8	string	MAYAFOR4	Alias Maya Binary File,
+>32	string	>\0	version %s scene
+8	string	MayaFOR4	Alias Maya Binary File,
+>32	string	>\0	version %s scene
+8	string	CIMG		Alias Maya Image File
+8	string	DEEP		Alias Maya Image File
+#------------------------------------------------------------------------------
+# $File: sgml,v 1.24 2009/09/19 17:31:35 christos Exp $
+# Type:	SVG Vectorial Graphics
+# From:	Noel Torres <tecnico at ejerciciosresueltos.com>
+0	string		\<?xml\ version="
+>15	string		>\0
+>>19	search/4096	\<svg			SVG Scalable Vector Graphics image
+!:mime	image/svg+xml
+>>19	search/4096	\<gnc-v2		GnuCash file
+!:mime	application/x-gnucash
+
+# Sitemap file
+0	string		\<?xml\ version="
+>15	string		>\0
+>>19	search/4096	\<urlset		XML Sitemap document text
+!:mime	application/xml-sitemap
+
+# xhtml
+0	string		\<?xml\ version="
+>15	string		>\0
+>>19	search/4096/cWbt	\<!doctype\ html	xHTML document text
+!:mime	text/html
+0	string		\<?xml\ version='
+>15	string		>\0
+>>19	search/4096/cWbt	\<!doctype\ html	xHTML document text
+!:mime	text/html
+0	string		\<?xml\ version="
+>15	string		>\0
+>>19	search/4096/cWbt	\<html	broken xHTML document text
+!:mime	text/html
+
+#------------------------------------------------------------------------------
+# sgml:  file(1) magic for Standard Generalized Markup Language
+# HyperText Markup Language (HTML) is an SGML document type,
+# from Daniel Quinlan (quinlan at yggdrasil.com)
+# adapted to string extenstions by Anthon van der Neut <anthon at mnt.org)
+0	search/1/cb	\<!doctype\ html	HTML document text
+!:mime	text/html
+0	search/1/cb	\<head			HTML document text
+!:mime	text/html
+0	search/1/cb	\<title			HTML document text
+!:mime	text/html
+0	search/1/cb	\<html			HTML document text
+!:mime	text/html
+
+# Extensible markup language (XML), a subset of SGML
+# from Marc Prud'hommeaux (marc at apocalypse.org)
+0	search/1/cwbt	\<?xml			XML document text
+!:mime	application/xml
+0	string		\<?xml\ version\ "	XML
+!:mime	application/xml
+0	string		\<?xml\ version="	XML
+!:mime	application/xml
+>15	search/1	>\0			%.3s document text
+>>23	search/1	\<xsl:stylesheet	(XSL stylesheet)
+>>24	search/1	\<xsl:stylesheet	(XSL stylesheet)
+0	string		\<?xml\ version='	XML
+!:mime	application/xml
+>15	search/1	>\0			%.3s document text
+>>23	search/1	\<xsl:stylesheet	(XSL stylesheet)
+>>24	search/1	\<xsl:stylesheet	(XSL stylesheet)
+0	search/1/wbt	\<?xml			XML document text
+!:mime	application/xml
+!:strength - 10
+0	search/1/wbt	\<?XML			broken XML document text
+!:mime	application/xml
+!:strength - 10
+
+
+# SGML, mostly from rph at sq
+0	search/1/cb	\<!doctype		exported SGML document text
+0	search/1/cb	\<!subdoc		exported SGML subdocument text
+0	search/1/cb	\<!--			exported SGML document text
+
+# Web browser cookie files
+# (Mozilla, Galeon, Netscape 4, Konqueror..)
+# Ulf Harnhammar <ulfh at update.uu.se>
+0	search/1	#\ HTTP\ Cookie\ File	Web browser cookie text
+0	search/1	#\ Netscape\ HTTP\ Cookie\ File	Netscape cookie text
+0	search/1	#\ KDE\ Cookie\ File	Konqueror cookie text
+
+#------------------------------------------------------------------------
+# $File: sharc,v 1.6 2009/09/19 16:28:12 christos Exp $
+# file(1) magic for sharc files
+#
+# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by 
+# FutureGroove Music (dsp at futuregroove.de)
+
+#------------------------------------------------------------------------
+#0	string			Draw		RiscOS Drawfile
+#0	string			PACK		RiscOS PackdDir archive
+
+#------------------------------------------------------------------------
+# SHARC DSP stuff (based on the FGM SHARC DSP SDK)
+
+#0	string			=!		Assembler source
+#0	string			Analog		ADi asm listing file
+0	string			.SYSTEM		SHARC architecture file
+0	string			.system		SHARC architecture file
+
+0	leshort			0x521C		SHARC COFF binary
+>2	leshort			>1		, %hd sections
+>>12	lelong			>0		, not stripped
+
+#------------------------------------------------------------------------------
+# $File: sinclair,v 1.5 2009/09/19 16:28:12 christos Exp $
+# sinclair:  file(1) sinclair QL
+
+# additions to /etc/magic by Thomas M. Ott (ThMO)
+
+# Sinclair QL floppy disk formats (ThMO)
+0	string	=QL5		QL disk dump data,
+>3	string	=A		720 KB,
+>3	string	=B		1.44 MB,
+>3	string	=C		3.2 MB,
+>4	string	>\0		label:%.10s
+
+# Sinclair QL OS dump (ThMO)
+# (NOTE: if `file' would be able to use indirect references in a endian format
+#	 differing from the natural host format, this could be written more
+#	 reliably and faster...)
+#
+# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
+# than the first 8K of a file... #-(
+#
+#0		belong	=0x30000
+#>49124		belong	<47104
+#>>49128		belong	<47104
+#>>>49132	belong	<47104
+#>>>>49136	belong	<47104	QL OS dump data,
+#>>>>>49148	string	>\0	type %.3s,
+#>>>>>49142	string	>\0	version %.4s
+
+# Sinclair QL firmware executables (ThMO)
+0	string	NqNqNq`\004	QL firmware executable (BCPL)
+
+# Sinclair QL libraries (was ThMO)
+0	beshort	0xFB01		QDOS object
+>2	pstring	x		'%s'
+
+# Sinclair QL executables (was ThMO)
+4	belong	0x4AFB		QDOS executable
+>9	pstring	x		'%s'
+
+# Sinclair QL ROM (ThMO)
+0	belong	=0x4AFB0001	QL plugin-ROM data,
+>9	pstring	=\0		un-named
+>9	pstring	>\0		named: %s
+
+#------------------------------------------------------------------------------
+# $File: sketch,v 1.4 2009/09/19 16:28:12 christos Exp $
+# Sketch Drawings: http://sketch.sourceforge.net/ 
+# From: Edwin Mons <e at ik.nu>
+0	search/1	##Sketch	Sketch document text
+
+#-----------------------------------------------
+# $File: smalltalk,v 1.5 2009/09/19 16:28:12 christos Exp $
+# GNU Smalltalk image, starting at version 1.6.2
+# From: catull_us at yahoo.com
+#
+0	string	GSTIm\0\0	GNU SmallTalk
+# little-endian
+>7	byte&1	=0		LE image version
+>>10	byte	x		%d.
+>>9	byte	x		\b%d.
+>>8	byte	x		\b%d
+#>>12	lelong	x		, data: %ld
+#>>16	lelong	x		, table: %ld
+#>>20	lelong	x		, memory: %ld
+# big-endian
+>7	byte&1	=1		BE image version
+>>8	byte	x		%d.
+>>9	byte	x		\b%d.
+>>10	byte	x		\b%d
+#>>12	belong	x		, data: %ld
+#>>16	belong	x		, table: %ld
+#>>20	belong	x		, memory: %ld
+
+
+
+#------------------------------------------------------------------------------
+# $File: sniffer,v 1.14 2009/09/19 16:28:12 christos Exp $
+# sniffer:  file(1) magic for packet capture files
+#
+# From: guy at alum.mit.edu (Guy Harris)
+#
+
+#
+# Microsoft Network Monitor 1.x capture files.
+#
+0	string		RTSS		NetMon capture file
+>5	byte		x		- version %d
+>4	byte		x		\b.%d
+>6	leshort		0		(Unknown)
+>6	leshort		1		(Ethernet)
+>6	leshort		2		(Token Ring)
+>6	leshort		3		(FDDI)
+>6	leshort		4		(ATM)
+
+#
+# Microsoft Network Monitor 2.x capture files.
+#
+0	string		GMBU		NetMon capture file
+>5	byte		x		- version %d
+>4	byte		x		\b.%d
+>6	leshort		0		(Unknown)
+>6	leshort		1		(Ethernet)
+>6	leshort		2		(Token Ring)
+>6	leshort		3		(FDDI)
+>6	leshort		4		(ATM)
+
+#
+# Network General Sniffer capture files.
+# Sorry, make that "Network Associates Sniffer capture files."
+# Sorry, make that "Network General old DOS Sniffer capture files."
+#
+0	string		TRSNIFF\ data\ \ \ \ \032	Sniffer capture file
+>33	byte		2		(compressed)
+>23	leshort		x		- version %d
+>25	leshort		x		\b.%d
+>32	byte		0		(Token Ring)
+>32	byte		1		(Ethernet)
+>32	byte		2		(ARCNET)
+>32	byte		3		(StarLAN)
+>32	byte		4		(PC Network broadband)
+>32	byte		5		(LocalTalk)
+>32	byte		6		(Znet)
+>32	byte		7		(Internetwork Analyzer)
+>32	byte		9		(FDDI)
+>32	byte		10		(ATM)
+
+#
+# Cinco Networks NetXRay capture files.
+# Sorry, make that "Network General Sniffer Basic capture files."
+# Sorry, make that "Network Associates Sniffer Basic capture files."
+# Sorry, make that "Network Associates Sniffer Basic, and Windows
+# Sniffer Pro", capture files."
+# Sorry, make that "Network General Sniffer capture files."
+#
+0	string		XCP\0		NetXRay capture file
+>4	string		>\0		- version %s
+>44	leshort		0		(Ethernet)
+>44	leshort		1		(Token Ring)
+>44	leshort		2		(FDDI)
+>44	leshort		3		(WAN)
+>44	leshort		8		(ATM)
+>44	leshort		9		(802.11)
+
+#
+# "libpcap" capture files.
+# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
+# the main program that uses that format, but there are other programs
+# that use "libpcap", or that use the same capture file format.)
+#
+0	ubelong		0xa1b2c3d4	tcpdump capture file (big-endian)
+>4	beshort		x		- version %d
+>6	beshort		x		\b.%d
+>20	belong		0		(No link-layer encapsulation
+>20	belong		1		(Ethernet
+>20	belong		2		(3Mb Ethernet
+>20	belong		3		(AX.25
+>20	belong		4		(ProNET
+>20	belong		5		(CHAOS
+>20	belong		6		(Token Ring
+>20	belong		7		(BSD ARCNET
+>20	belong		8		(SLIP
+>20	belong		9		(PPP
+>20	belong		10		(FDDI
+>20	belong		11		(RFC 1483 ATM
+>20	belong		12		(raw IP
+>20	belong		13		(BSD/OS SLIP
+>20	belong		14		(BSD/OS PPP
+>20	belong		19		(Linux ATM Classical IP
+>20	belong		50		(PPP or Cisco HDLC
+>20	belong		51		(PPP-over-Ethernet
+>20	belong		99		(Symantec Enterprise Firewall
+>20	belong		100		(RFC 1483 ATM
+>20	belong		101		(raw IP
+>20	belong		102		(BSD/OS SLIP
+>20	belong		103		(BSD/OS PPP
+>20	belong		104		(BSD/OS Cisco HDLC
+>20	belong		105		(802.11
+>20	belong		106		(Linux Classical IP over ATM
+>20	belong		107		(Frame Relay
+>20	belong		108		(OpenBSD loopback
+>20	belong		109		(OpenBSD IPsec encrypted
+>20	belong		112		(Cisco HDLC
+>20	belong		113		(Linux "cooked"
+>20	belong		114		(LocalTalk
+>20	belong		117		(OpenBSD PFLOG
+>20	belong		119		(802.11 with Prism header
+>20	belong		122		(RFC 2625 IP over Fibre Channel
+>20	belong		123		(SunATM
+>20	belong		127		(802.11 with radiotap header
+>20	belong		129		(Linux ARCNET
+>20	belong		138		(Apple IP over IEEE 1394
+>20	belong		140		(MTP2
+>20	belong		141		(MTP3
+>20	belong		143		(DOCSIS
+>20	belong		144		(IrDA
+>20	belong		147		(Private use 0
+>20	belong		148		(Private use 1
+>20	belong		149		(Private use 2
+>20	belong		150		(Private use 3
+>20	belong		151		(Private use 4
+>20	belong		152		(Private use 5
+>20	belong		153		(Private use 6
+>20	belong		154		(Private use 7
+>20	belong		155		(Private use 8
+>20	belong		156		(Private use 9
+>20	belong		157		(Private use 10
+>20	belong		158		(Private use 11
+>20	belong		159		(Private use 12
+>20	belong		160		(Private use 13
+>20	belong		161		(Private use 14
+>20	belong		162		(Private use 15
+>20	belong		163		(802.11 with AVS header
+>16	belong		x		\b, capture length %d)
+0	ulelong		0xa1b2c3d4	tcpdump capture file (little-endian)
+>4	leshort		x		- version %d
+>6	leshort		x		\b.%d
+>20	lelong		0		(No link-layer encapsulation
+>20	lelong		1		(Ethernet
+>20	lelong		2		(3Mb Ethernet
+>20	lelong		3		(AX.25
+>20	lelong		4		(ProNET
+>20	lelong		5		(CHAOS
+>20	lelong		6		(Token Ring
+>20	lelong		7		(ARCNET
+>20	lelong		8		(SLIP
+>20	lelong		9		(PPP
+>20	lelong		10		(FDDI
+>20	lelong		11		(RFC 1483 ATM
+>20	lelong		12		(raw IP
+>20	lelong		13		(BSD/OS SLIP
+>20	lelong		14		(BSD/OS PPP
+>20	lelong		19		(Linux ATM Classical IP
+>20	lelong		50		(PPP or Cisco HDLC
+>20	lelong		51		(PPP-over-Ethernet
+>20	lelong		99		(Symantec Enterprise Firewall
+>20	lelong		100		(RFC 1483 ATM
+>20	lelong		101		(raw IP
+>20	lelong		102		(BSD/OS SLIP
+>20	lelong		103		(BSD/OS PPP
+>20	lelong		104		(BSD/OS Cisco HDLC
+>20	lelong		105		(802.11
+>20	lelong		106		(Linux Classical IP over ATM
+>20	lelong		107		(Frame Relay
+>20	lelong		108		(OpenBSD loopback
+>20	lelong		109		(OpenBSD IPsec encrypted
+>20	lelong		112		(Cisco HDLC
+>20	lelong		113		(Linux "cooked"
+>20	lelong		114		(LocalTalk
+>20	lelong		117		(OpenBSD PFLOG
+>20	lelong		119		(802.11 with Prism header
+>20	lelong		122		(RFC 2625 IP over Fibre Channel
+>20	lelong		123		(SunATM
+>20	lelong		127		(802.11 with radiotap header
+>20	lelong		129		(Linux ARCNET
+>20	lelong		138		(Apple IP over IEEE 1394
+>20	lelong		140		(MTP2
+>20	lelong		141		(MTP3
+>20	lelong		143		(DOCSIS
+>20	lelong		144		(IrDA
+>20	lelong		147		(Private use 0
+>20	lelong		148		(Private use 1
+>20	lelong		149		(Private use 2
+>20	lelong		150		(Private use 3
+>20	lelong		151		(Private use 4
+>20	lelong		152		(Private use 5
+>20	lelong		153		(Private use 6
+>20	lelong		154		(Private use 7
+>20	lelong		155		(Private use 8
+>20	lelong		156		(Private use 9
+>20	lelong		157		(Private use 10
+>20	lelong		158		(Private use 11
+>20	lelong		159		(Private use 12
+>20	lelong		160		(Private use 13
+>20	lelong		161		(Private use 14
+>20	lelong		162		(Private use 15
+>20	lelong		163		(802.11 with AVS header
+>16	lelong		x		\b, capture length %d)
+
+#
+# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
+# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
+# the main program that uses that format, but there are other programs
+# that use "libpcap", or that use the same capture file format.)
+#
+0	ubelong		0xa1b2cd34	extended tcpdump capture file (big-endian)
+>4	beshort		x		- version %d
+>6	beshort		x		\b.%d
+>20	belong		0		(No link-layer encapsulation
+>20	belong		1		(Ethernet
+>20	belong		2		(3Mb Ethernet
+>20	belong		3		(AX.25
+>20	belong		4		(ProNET
+>20	belong		5		(CHAOS
+>20	belong		6		(Token Ring
+>20	belong		7		(ARCNET
+>20	belong		8		(SLIP
+>20	belong		9		(PPP
+>20	belong		10		(FDDI
+>20	belong		11		(RFC 1483 ATM
+>20	belong		12		(raw IP
+>20	belong		13		(BSD/OS SLIP
+>20	belong		14		(BSD/OS PPP
+>16	belong		x		\b, capture length %d)
+0	ulelong		0xa1b2cd34	extended tcpdump capture file (little-endian)
+>4	leshort		x		- version %d
+>6	leshort		x		\b.%d
+>20	lelong		0		(No link-layer encapsulation
+>20	lelong		1		(Ethernet
+>20	lelong		2		(3Mb Ethernet
+>20	lelong		3		(AX.25
+>20	lelong		4		(ProNET
+>20	lelong		5		(CHAOS
+>20	lelong		6		(Token Ring
+>20	lelong		7		(ARCNET
+>20	lelong		8		(SLIP
+>20	lelong		9		(PPP
+>20	lelong		10		(FDDI
+>20	lelong		11		(RFC 1483 ATM
+>20	lelong		12		(raw IP
+>20	lelong		13		(BSD/OS SLIP
+>20	lelong		14		(BSD/OS PPP
+>16	lelong		x		\b, capture length %d)
+
+#
+# AIX "iptrace" capture files.
+#
+0	string		iptrace\ 1.0	"iptrace" capture file
+0	string		iptrace\ 2.0	"iptrace" capture file
+
+#
+# Novell LANalyzer capture files.
+#
+0	leshort		0x1001		LANalyzer capture file
+0	leshort		0x1007		LANalyzer capture file
+
+#
+# HP-UX "nettl" capture files.
+#
+0	string		\x54\x52\x00\x64\x00	"nettl" capture file
+
+#
+# RADCOM WAN/LAN Analyzer capture files.
+#
+0	string		\x42\xd2\x00\x34\x12\x66\x22\x88	RADCOM WAN/LAN Analyzer capture file
+
+#
+# NetStumbler log files.  Not really packets, per se, but about as
+# close as you can get.  These are log files from NetStumbler, a
+# Windows program, that scans for 802.11b networks.
+#
+0	string		NetS		NetStumbler log file
+>8	lelong		x		\b, %d stations found
+
+#
+# EtherPeek/AiroPeek "version 9" capture files.
+#
+0	string		\177ver		EtherPeek/AiroPeek capture file
+
+#
+# Visual Networks traffic capture files.
+#
+0	string		\x05VNF		Visual Networks traffic capture file
+
+#
+# Network Instruments Observer capture files.
+#
+0	string		ObserverPktBuffe	Network Instruments Observer capture file
+
+#
+# Files from Accellent Group's 5View products.
+#
+0	string		\xaa\xaa\xaa\xaa	5View capture file
+
+#------------------------------------------------------------------------------
+# $File: softquad,v 1.13 2009/09/19 16:28:12 christos Exp $
+# softquad:  file(1) magic for SoftQuad Publishing Software
+#
+# Author/Editor and RulesBuilder
+#
+# XXX - byte order?
+#
+0	string		\<!SQ\ DTD>	Compiled SGML rules file
+>9	string		>\0		 Type %s
+0	string		\<!SQ\ A/E>	A/E SGML Document binary
+>9	string		>\0		 Type %s
+0	string		\<!SQ\ STS>	A/E SGML binary styles file
+>9	string		>\0		 Type %s
+0	short		0xc0de		Compiled PSI (v1) data
+0	short		0xc0da		Compiled PSI (v2) data
+>3	string		>\0		(%s)
+# Binary sqtroff font/desc files...
+0	short		0125252		SoftQuad DESC or font file binary
+>2	short		>0		- version %d
+# Bitmaps...
+0	search/1	SQ\ BITMAP1	SoftQuad Raster Format text
+#0	string		SQ\ BITMAP2	SoftQuad Raster Format data
+# sqtroff intermediate language (replacement for ditroff int. lang.)
+0	string		X\ 		SoftQuad troff Context intermediate
+>2	string		495		for AT&T 495 laser printer
+>2	string		hp		for Hewlett-Packard LaserJet
+>2	string		impr		for IMAGEN imPRESS
+>2	string		ps		for PostScript
+
+# From: Michael Piefel <piefel at debian.org>
+# sqtroff intermediate language (replacement for ditroff int. lang.)
+0	string		X\ 495		SoftQuad troff Context intermediate for AT&T 495 laser printer
+0	string		X\ hp		SoftQuad troff Context intermediate for HP LaserJet
+0	string		X\ impr		SoftQuad troff Context intermediate for IMAGEN imPRESS
+0	string		X\ ps		SoftQuad troff Context intermediate for PostScript
+
+#------------------------------------------------------------------------------
+# $File: spec,v 1.4 2009/09/19 16:28:12 christos Exp $
+# spec:  file(1) magic for SPEC raw results (*.raw, *.rsf)
+#
+# Cloyce D. Spradling <cloyce at headgear.org>
+
+0	string	spec			SPEC
+>4	string	.cpu			CPU
+>>8	string	<:			\b%.4s
+>>12	string	.			raw result text
+
+17	string	version=SPECjbb		SPECjbb
+>32	string	<:			\b%.4s
+>>37	string	<:			v%.4s raw result text
+
+0	string	BEGIN\040SPECWEB	SPECweb
+>13	string	<:			\b%.2s
+>>15	string	_SSL			\b_SSL
+>>>20	string	<:			v%.4s raw result text
+>>16	string	<:			v%.4s raw result text
+
+#------------------------------------------------------------------------------
+# $File: spectrum,v 1.6 2009/09/19 16:28:12 christos Exp $
+# spectrum:  file(1) magic for Spectrum emulator files.
+#
+# John Elliott <jce at seasip.demon.co.uk>
+
+#
+# Spectrum +3DOS header
+#
+0       string          PLUS3DOS\032    Spectrum +3 data
+>15     byte            0               - BASIC program
+>15     byte            1               - number array
+>15     byte            2               - character array
+>15     byte            3               - memory block
+>>16    belong          0x001B0040      (screen)
+>15     byte            4               - Tasword document
+>15     string          TAPEFILE        - ZXT tapefile
+#
+# Tape file. This assumes the .TAP starts with a Spectrum-format header,
+# which nearly all will.
+#
+0       string          \023\000\000    Spectrum .TAP data
+>4      string          x               "%-10.10s"
+>3      byte            0               - BASIC program
+>3      byte            1               - number array
+>3      byte            2               - character array
+>3      byte            3               - memory block
+>>14    belong          0x001B0040      (screen)
+
+# The following three blocks are from pak21-spectrum at srcf.ucam.org
+# TZX tape images
+0      string          ZXTape!\x1a     Spectrum .TZX data
+>8     byte            x               version %d
+>9     byte            x               \b.%d
+
+# RZX input recording files
+0      string          RZX!            Spectrum .RZX data
+>4     byte            x               version %d
+>5     byte            x               \b.%d
+
+# Floppy disk images
+0      string          MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
+0      string          MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
+0      string          EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
+0      string          SINCLAIR        Spectrum .SCL Betadisk image
+
+# Hard disk images
+0      string          RS-IDE\x1a      Spectrum .HDF hard disk image
+>7     byte            x               \b, version 0x%02x
+
+#------------------------------------------------------------------------------
+# $File: sql,v 1.6 2009/09/19 16:28:12 christos Exp $
+# sql:  file(1) magic for SQL files
+#
+# From: "Marty Leisner" <mleisner at eng.mc.xerox.com>
+# Recognize some MySQL files.
+#
+0	beshort			0xfe01		MySQL table definition file
+>2	byte			x		Version %d
+0	belong&0xffffff00	0xfefe0300	MySQL MISAM index file
+>3	byte			x		Version %d
+0	belong&0xffffff00	0xfefe0700	MySQL MISAM compressed data file
+>3	byte			x		Version %d
+0	belong&0xffffff00	0xfefe0500	MySQL ISAM index file
+>3	byte			x		Version %d
+0	belong&0xffffff00	0xfefe0600	MySQL ISAM compressed data file
+>3	byte			x		Version %d
+0	string		 	\376bin		MySQL replication log
+
+#------------------------------------------------------------------------------
+# iRiver H Series database file 
+# From Ken Guest <ken at linux.ie>
+# As observed from iRivNavi.iDB and unencoded firmware
+#
+0   string		iRivDB	iRiver Database file
+>11  string	>\0	Version %s
+>39  string		iHP-100	[H Series]
+
+#------------------------------------------------------------------------------
+# SQLite database files
+# Ken Guest <ken at linux.ie>, Ty Sarna, Zack Weinberg
+#
+# Version 1 used GDBM internally; its files cannot be distinguished
+# from other GDBM files.
+#
+# Version 2 used this format:
+0	string	**\ This\ file\ contains\ an\ SQLite  SQLite 2.x database
+
+# Version 3 of SQLite allows applications to embed their own "user version"
+# number in the database.  Detect this and distinguish those files.
+
+0   string  SQLite\ format\ 3
+>60 string  _MTN               Monotone source repository
+>60 belong  !0                 SQLite 3.x database, user version %u
+>60 belong  0                  SQLite 3.x database
+
+#------------------------------------------------------------------------------
+# $File: sun,v 1.20 2009/09/19 16:28:12 christos Exp $
+# sun:  file(1) magic for Sun machines
+#
+# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
+# releases.  (5.x uses ELF.)
+#
+0	belong&077777777	0600413		sparc demand paged
+>0	byte		&0x80
+>>20	belong		<4096		shared library
+>>20	belong		=4096		dynamically linked executable
+>>20	belong		>4096		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0600410		sparc pure
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0600407		sparc
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0400413		mc68020 demand paged
+>0	byte		&0x80
+>>20	belong		<4096		shared library
+>>20	belong		=4096		dynamically linked executable
+>>20	belong		>4096		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0400410		mc68020 pure
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0400407		mc68020
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0200413		mc68010 demand paged
+>0	byte		&0x80
+>>20	belong		<4096		shared library
+>>20	belong		=4096		dynamically linked executable
+>>20	belong		>4096		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0200410		mc68010 pure
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+0	belong&077777777	0200407		mc68010
+>0	byte		&0x80		dynamically linked executable
+>0	byte		^0x80		executable
+>16	belong		>0		not stripped
+
+# reworked these to avoid anything beginning with zero becoming "old sun-2"
+0	belong		0407		old sun-2 executable
+>16	belong		>0		not stripped
+0	belong		0410		old sun-2 pure executable
+>16	belong		>0		not stripped
+0	belong		0413		old sun-2 demand paged executable
+>16	belong		>0		not stripped
+
+#
+# Core files.  "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
+# binary executed in compatibility mode under SunOS 5.x".
+#
+0	belong		0x080456	SunOS core file
+>4	belong		432		(SPARC)
+>>132	string		>\0		from '%s'
+>>116	belong		=3		(quit)
+>>116	belong		=4		(illegal instruction)
+>>116	belong		=5		(trace trap)
+>>116	belong		=6		(abort)
+>>116	belong		=7		(emulator trap)
+>>116	belong		=8		(arithmetic exception)
+>>116	belong		=9		(kill)
+>>116	belong		=10		(bus error)
+>>116	belong		=11		(segmentation violation)
+>>116	belong		=12		(bad argument to system call)
+>>116	belong		=29		(resource lost)
+>>120	belong		x		(T=%dK,
+>>124	belong		x		D=%dK,
+>>128	belong		x		S=%dK)
+>4	belong		826		(68K)
+>>128	string		>\0		from '%s'
+>4	belong		456		(SPARC 4.x BCP)
+>>152	string		>\0		from '%s'
+# Sun SunPC
+0	long		0xfa33c08e	SunPC 4.0 Hard Disk
+0	string		#SUNPC_CONFIG	SunPC 4.0 Properties Values
+# Sun snoop (see RFC 1761, which describes the capture file format).
+#
+0	string		snoop		Snoop capture file
+>8	belong		>0		- version %ld
+>12	belong		0		(IEEE 802.3)
+>12	belong		1		(IEEE 802.4)
+>12	belong		2		(IEEE 802.5)
+>12	belong		3		(IEEE 802.6)
+>12	belong		4		(Ethernet)
+>12	belong		5		(HDLC)
+>12	belong		6		(Character synchronous)
+>12	belong		7		(IBM channel-to-channel adapter)
+>12	belong		8		(FDDI)
+>12	belong		9		(Unknown)
+
+# Microsoft ICM color profile
+36	string		acspMSFT	Microsoft ICM Color Profile
+# Sun KCMS
+36	string		acsp		Kodak Color Management System, ICC Profile
+
+#---------------------------------------------------------------------------
+# The following entries have been tested by Duncan Laurie <duncan at sun.com> (a
+# lead Sun/Cobalt developer) who agrees that they are good and worthy of
+# inclusion.
+
+# Boot ROM images for Sun/Cobalt Linux server appliances
+0       string  Cobalt\ Networks\ Inc.\nFirmware\ v     Paged COBALT boot rom
+>38     string x        V%.4s
+
+# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
+# at the very end where file(1) can't get it.
+0       string CRfs     COBALT boot rom data (Flat boot rom or file system)
+
+
+
+#------------------------------------------------------------------------
+# $File: sysex,v 1.6 2009/09/19 16:28:12 christos Exp $
+# sysex: file(1) magic for MIDI sysex files
+#
+# 
+0	byte			0xF0		SysEx File -
+
+# North American Group
+>1	byte			0x01		Sequential
+>1	byte			0x02		IDP
+>1	byte			0x03		OctavePlateau
+>1	byte			0x04		Moog
+>1	byte			0x05		Passport
+>1	byte			0x06		Lexicon
+>1	byte			0x07		Kurzweil/Future Retro
+>>3	byte			0x77		777
+>>4	byte			0x00		Bank
+>>4	byte			0x01		Song
+>>5	byte			0x0f		16
+>>5	byte			0x0e		15
+>>5	byte			0x0d		14
+>>5	byte			0x0c		13
+>>5	byte			0x0b		12
+>>5	byte			0x0a		11
+>>5	byte			0x09		10
+>>5	byte			0x08		9
+>>5	byte			0x07		8
+>>5	byte			0x06		7
+>>5	byte			0x05		6
+>>5	byte			0x04		5
+>>5	byte			0x03		4
+>>5	byte			0x02		3
+>>5	byte			0x01		2
+>>5	byte			0x00		1
+>>5	byte			0x10		(ALL)
+>>2	byte			x			\b, Channel %d
+>1	byte			0x08		Fender
+>1	byte			0x09		Gulbransen
+>1	byte			0x0a		AKG
+>1	byte			0x0b		Voyce
+>1	byte			0x0c		Waveframe
+>1	byte			0x0d		ADA
+>1	byte			0x0e		Garfield
+>1	byte			0x0f		Ensoniq
+>1	byte			0x10		Oberheim
+>>2	byte			0x06		Matrix 6 series
+>>3	byte			0x0A		Dump (All)
+>>3	byte			0x01		Dump (Bank)
+>>4 belong			0x0002040E		Matrix 1000
+>>>11 byte			<2			User bank %d
+>>>11 byte			>1			Preset bank %d
+>1	byte			0x11		Apple
+>1	byte			0x12		GreyMatter
+>1	byte			0x14		PalmTree
+>1	byte			0x15		JLCooper
+>1	byte			0x16		Lowrey
+>1	byte			0x17		AdamsSmith
+>1	byte			0x18		E-mu
+>1	byte			0x19		Harmony
+>1	byte			0x1a		ART
+>1	byte			0x1b		Baldwin
+>1	byte			0x1c		Eventide
+>1	byte			0x1d		Inventronics
+>1	byte			0x1f		Clarity
+
+# European Group
+>1	byte			0x21		SIEL
+>1	byte			0x22		Synthaxe
+>1	byte			0x24		Hohner
+>1	byte			0x25		Twister
+>1	byte			0x26		Solton
+>1	byte			0x27		Jellinghaus
+>1	byte			0x28		Southworth
+>1	byte			0x29		PPG
+>1	byte			0x2a		JEN
+>1	byte			0x2b		SSL
+>1	byte			0x2c		AudioVertrieb
+
+>1	byte			0x2f		ELKA
+>>3	byte			0x09		EK-44
+
+>1	byte			0x30		Dynacord
+>1	byte			0x31		Jomox
+>1	byte			0x33		Clavia
+>1	byte			0x39		Soundcraft
+# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs
+>1	byte			0x3e		Waldorf
+>>2	byte			0x00		microWave
+>>2	byte			0x0E		microwave2 / XT
+>>2	byte			0x0F		Q / Q+
+>>3	byte			=0			(default id)
+>>3 byte			>0			(
+>>>3 byte			<0x7F		\bdevice %d)
+>>>3 byte			=0x7F		\bbroadcast id)
+>>3	byte			0x7f		Microwave I
+>>>4	byte			0x00		SNDR (Sound Request)
+>>>4	byte			0x10		SNDD (Sound Dump)
+>>>4	byte			0x20		SNDP (Sound Parameter Change)
+>>>4	byte			0x30		SNDQ (Sound Parameter Inquiry)
+>>>4	byte			0x70		BOOT (Sound Reserved)
+>>>4	byte			0x01		MULR (Multi Request)
+>>>4	byte			0x11		MULD (Multi Dump)
+>>>4	byte			0x21		MULP (Multi Parameter Change)
+>>>4	byte			0x31		MULQ (Multi Parameter Inquiry)
+>>>4	byte			0x71		OS (Multi Reserved)
+>>>4	byte			0x02		DRMR (Drum Map Request)
+>>>4	byte			0x12		DRMD (Drum Map Dump)
+>>>4	byte			0x22		DRMP (Drum Map Parameter Change)
+>>>4	byte			0x32		DRMQ (Drum Map Parameter Inquiry)
+>>>4	byte			0x72		BIN (Drum Map Reserved)
+>>>4	byte			0x03		PATR (Sequencer Pattern Request)
+>>>4	byte			0x13		PATD (Sequencer Pattern Dump)
+>>>4	byte			0x23		PATP (Sequencer Pattern Parameter Change)
+>>>4	byte			0x33		PATQ (Sequencer Pattern Parameter Inquiry)
+>>>4	byte			0x73		AFM (Sequencer Pattern Reserved)
+>>>4	byte			0x04		GLBR (Global Parameter Request)
+>>>4	byte			0x14		GLBD (Global Parameter Dump)
+>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
+>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
+>>>4	byte			0x07		MODR (Mode Parameter Request)
+>>>4	byte			0x17		MODD (Mode Parameter Dump)
+>>>4	byte			0x27		MODP (Mode Parameter Parameter Change)
+>>>4	byte			0x37		MODQ (Mode Parameter Parameter Inquiry)
+>>2	byte			0x10		microQ
+>>>4	byte			0x00		SNDR (Sound Request)
+>>>4	byte			0x10		SNDD (Sound Dump)
+>>>4	byte			0x20		SNDP (Sound Parameter Change)
+>>>4	byte			0x30		SNDQ (Sound Parameter Inquiry)
+>>>4	byte			0x70		(Sound Reserved)
+>>>4	byte			0x01		MULR (Multi Request)
+>>>4	byte			0x11		MULD (Multi Dump)
+>>>4	byte			0x21		MULP (Multi Parameter Change)
+>>>4	byte			0x31		MULQ (Multi Parameter Inquiry)
+>>>4	byte			0x71		OS (Multi Reserved)
+>>>4	byte			0x02		DRMR (Drum Map Request)
+>>>4	byte			0x12		DRMD (Drum Map Dump)
+>>>4	byte			0x22		DRMP (Drum Map Parameter Change)
+>>>4	byte			0x32		DRMQ (Drum Map Parameter Inquiry)
+>>>4	byte			0x72		BIN (Drum Map Reserved)
+>>>4	byte			0x04		GLBR (Global Parameter Request)
+>>>4	byte			0x14		GLBD (Global Parameter Dump)
+>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
+>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
+>>2	byte			0x11		rackAttack
+>>>4	byte			0x00		SNDR (Sound Parameter Request)
+>>>4	byte			0x10		SNDD (Sound Parameter Dump)
+>>>4	byte			0x20		SNDP (Sound Parameter Parameter Change)
+>>>4	byte			0x30		SNDQ (Sound Parameter Parameter Inquiry)
+>>>4	byte			0x01		PRGR (Program Parameter Request)
+>>>4	byte			0x11		PRGD (Program Parameter Dump)
+>>>4	byte			0x21		PRGP (Program Parameter Parameter Change)
+>>>4	byte			0x31		PRGQ (Program Parameter Parameter Inquiry)
+>>>4	byte			0x71		OS (Program Parameter Reserved)
+>>>4	byte			0x03		PATR (Pattern Parameter Request)
+>>>4	byte			0x13		PATD (Pattern Parameter Dump)
+>>>4	byte			0x23		PATP (Pattern Parameter Parameter Change)
+>>>4	byte			0x33		PATQ (Pattern Parameter Parameter Inquiry)
+>>>4	byte			0x04		GLBR (Global Parameter Request)
+>>>4	byte			0x14		GLBD (Global Parameter Dump)
+>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
+>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
+>>>4	byte			0x05		EFXR (FX Parameter Request)
+>>>4	byte			0x15		EFXD (FX Parameter Dump)
+>>>4	byte			0x25		EFXP (FX Parameter Parameter Change)
+>>>4	byte			0x35		EFXQ (FX Parameter Parameter Inquiry)
+>>>4	byte			0x07		MODR (Mode Command Request)
+>>>4	byte			0x17		MODD (Mode Command Dump)
+>>>4	byte			0x27		MODP (Mode Command Parameter Change)
+>>>4	byte			0x37		MODQ (Mode Command Parameter Inquiry)
+>>2	byte			0x03		Wave
+>>>4	byte			0x00		SBPR (Soundprogram)
+>>>4	byte			0x01		SAPR (Performance)
+>>>4	byte			0x02		SWAVE (Wave)
+>>>4	byte			0x03		SWTBL (Wave control table)
+>>>4	byte			0x04		SVT (Velocity Curve)
+>>>4	byte			0x05		STT (Tuning Table)
+>>>4	byte			0x06		SGLB (Global Parameters)
+>>>4	byte			0x07		SARRMAP (Performance Program Change Map)
+>>>4	byte			0x08		SBPRMAP (Sound Program Change Map)
+>>>4	byte			0x09		SBPRPAR (Sound Parameter)
+>>>4	byte			0x0A		SARRPAR (Performance Parameter)
+>>>4	byte			0x0B		SINSPAR (Instrument/External Parameter)
+>>>4	byte			0x0F		SBULK (Bulk Switch on/off)
+
+# Japanese Group
+>1	byte			0x40		Kawai
+>>3	byte			0x20		K1
+>>3	byte			0x22		K4
+
+>1	byte			0x41		Roland
+>>3	byte			0x14		D-50
+>>3	byte			0x2b		U-220
+>>3	byte			0x02		TR-707
+
+>1	byte			0x42		Korg
+>>3	byte			0x19		M1
+
+>1	byte			0x43		Yamaha
+>1	byte			0x44		Casio
+>1	byte			0x46		Kamiya
+>1	byte			0x47		Akai
+>1	byte			0x48		Victor
+>1	byte			0x49		Mesosha
+>1	byte			0x4b		Fujitsu
+>1	byte			0x4c		Sony
+>1	byte			0x4e		Teac
+>1	byte			0x50		Matsushita
+>1	byte			0x51		Fostex
+>1	byte			0x52		Zoom
+>1	byte			0x54		Matsushita
+>1	byte			0x57		Acoustic tech. lab.
+
+>1	belong&0xffffff00	0x00007400	Ta Horng
+>1	belong&0xffffff00	0x00007500	e-Tek
+>1	belong&0xffffff00	0x00007600	E-Voice
+>1	belong&0xffffff00	0x00007700	Midisoft
+>1	belong&0xffffff00	0x00007800	Q-Sound
+>1	belong&0xffffff00	0x00007900	Westrex
+>1	belong&0xffffff00	0x00007a00	Nvidia*
+>1	belong&0xffffff00	0x00007b00	ESS
+>1	belong&0xffffff00	0x00007c00	Mediatrix
+>1	belong&0xffffff00	0x00007d00	Brooktree
+>1	belong&0xffffff00	0x00007e00	Otari
+>1	belong&0xffffff00	0x00007f00	Key Electronics
+>1	belong&0xffffff00	0x00010000	Shure
+>1	belong&0xffffff00	0x00010100	AuraSound
+>1	belong&0xffffff00	0x00010200	Crystal
+>1	belong&0xffffff00	0x00010300	Rockwell
+>1	belong&0xffffff00	0x00010400	Silicon Graphics
+>1	belong&0xffffff00	0x00010500	Midiman
+>1	belong&0xffffff00	0x00010600	PreSonus
+>1	belong&0xffffff00	0x00010800	Topaz
+>1	belong&0xffffff00	0x00010900	Cast Lightning
+>1	belong&0xffffff00	0x00010a00	Microsoft
+>1	belong&0xffffff00	0x00010b00	Sonic Foundry
+>1	belong&0xffffff00	0x00010c00	Line 6
+>1	belong&0xffffff00	0x00010d00	Beatnik Inc.
+>1	belong&0xffffff00	0x00010e00	Van Koerving
+>1	belong&0xffffff00	0x00010f00	Altech Systems
+>1	belong&0xffffff00	0x00011000	S & S Research
+>1	belong&0xffffff00	0x00011100	VLSI Technology
+>1	belong&0xffffff00	0x00011200	Chromatic
+>1	belong&0xffffff00	0x00011300	Sapphire
+>1	belong&0xffffff00	0x00011400	IDRC
+>1	belong&0xffffff00	0x00011500	Justonic Tuning
+>1	belong&0xffffff00	0x00011600	TorComp
+>1	belong&0xffffff00	0x00011700	Newtek Inc.
+>1	belong&0xffffff00	0x00011800	Sound Sculpture
+>1	belong&0xffffff00	0x00011900	Walker Technical
+>1	belong&0xffffff00	0x00011a00	Digital Harmony
+>1	belong&0xffffff00	0x00011b00	InVision
+>1	belong&0xffffff00	0x00011c00	T-Square
+>1	belong&0xffffff00	0x00011d00	Nemesys
+>1	belong&0xffffff00	0x00011e00	DBX
+>1	belong&0xffffff00	0x00011f00	Syndyne
+>1	belong&0xffffff00	0x00012000	Bitheadz	
+>1	belong&0xffffff00	0x00012100	Cakewalk
+>1	belong&0xffffff00	0x00012200	Staccato
+>1	belong&0xffffff00	0x00012300	National Semicon.
+>1	belong&0xffffff00	0x00012400	Boom Theory
+>1	belong&0xffffff00	0x00012500	Virtual DSP Corp
+>1	belong&0xffffff00	0x00012600	Antares
+>1	belong&0xffffff00	0x00012700	Angel Software
+>1	belong&0xffffff00	0x00012800	St Louis Music
+>1	belong&0xffffff00	0x00012900	Lyrrus dba G-VOX
+>1	belong&0xffffff00	0x00012a00	Ashley Audio
+>1	belong&0xffffff00	0x00012b00	Vari-Lite
+>1	belong&0xffffff00	0x00012c00	Summit Audio
+>1	belong&0xffffff00	0x00012d00	Aureal Semicon.
+>1	belong&0xffffff00	0x00012e00	SeaSound
+>1	belong&0xffffff00	0x00012f00	U.S. Robotics
+>1	belong&0xffffff00	0x00013000	Aurisis
+>1	belong&0xffffff00	0x00013100	Nearfield Multimedia
+>1	belong&0xffffff00	0x00013200	FM7 Inc.
+>1	belong&0xffffff00	0x00013300	Swivel Systems
+>1	belong&0xffffff00	0x00013400	Hyperactive
+>1	belong&0xffffff00	0x00013500	MidiLite
+>1	belong&0xffffff00	0x00013600	Radical
+>1	belong&0xffffff00	0x00013700	Roger Linn
+>1	belong&0xffffff00	0x00013800	Helicon
+>1	belong&0xffffff00	0x00013900	Event
+>1	belong&0xffffff00	0x00013a00	Sonic Network
+>1	belong&0xffffff00	0x00013b00	Realtime Music
+>1	belong&0xffffff00	0x00013c00	Apogee Digital
+
+>1	belong&0xffffff00	0x00202b00	Medeli Electronics
+>1	belong&0xffffff00	0x00202c00	Charlie Lab
+>1	belong&0xffffff00	0x00202d00	Blue Chip Music
+>1	belong&0xffffff00	0x00202e00	BEE OH Corp
+>1	belong&0xffffff00	0x00202f00	LG Semicon America
+>1	belong&0xffffff00	0x00203000	TESI
+>1	belong&0xffffff00	0x00203100	EMAGIC
+>1	belong&0xffffff00	0x00203200	Behringer
+>1	belong&0xffffff00	0x00203300	Access Music
+>1	belong&0xffffff00	0x00203400	Synoptic
+>1	belong&0xffffff00	0x00203500	Hanmesoft Corp
+>1	belong&0xffffff00	0x00203600	Terratec
+>1	belong&0xffffff00	0x00203700	Proel SpA
+>1	belong&0xffffff00	0x00203800	IBK MIDI
+>1	belong&0xffffff00	0x00203900	IRCAM
+>1	belong&0xffffff00	0x00203a00	Propellerhead Software
+>1	belong&0xffffff00	0x00203b00	Red Sound Systems
+>1	belong&0xffffff00	0x00203c00	Electron ESI AB
+>1	belong&0xffffff00	0x00203d00	Sintefex Audio
+>1	belong&0xffffff00	0x00203e00	Music and More
+>1	belong&0xffffff00	0x00203f00	Amsaro
+>1	belong&0xffffff00	0x00204000	CDS Advanced Technology
+>1	belong&0xffffff00	0x00204100	Touched by Sound
+>1	belong&0xffffff00	0x00204200	DSP Arts
+>1	belong&0xffffff00	0x00204300	Phil Rees Music
+>1	belong&0xffffff00	0x00204400	Stamer Musikanlagen GmbH
+>1	belong&0xffffff00	0x00204500	Soundart
+>1	belong&0xffffff00	0x00204600	C-Mexx Software
+>1	belong&0xffffff00	0x00204700	Klavis Tech.
+>1	belong&0xffffff00	0x00204800	Noteheads AB
+
+0	string			T707		Roland TR-707 Data
+
+#------------------------------------------------------------------------------
+# $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $
+# teapot:  file(1) magic for "teapot" spreadsheet
+#
+0       string          #!teapot\012xdr      teapot work sheet (XDR format)
+
+#------------------------------------------------------------------------------
+# $File: terminfo,v 1.6 2009/09/19 16:28:12 christos Exp $
+# terminfo:  file(1) magic for terminfo
+#
+# XXX - byte order for screen images?
+#
+0	string		\032\001	Compiled terminfo entry
+0	short		0433		Curses screen image
+0	short		0434		Curses screen image
+
+#------------------------------------------------------------------------------
+# $File: tex,v 1.16 2009/09/19 16:28:12 christos Exp $
+# tex:  file(1) magic for TeX files
+#
+# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
+#
+# From <conklin at talisman.kaleida.com>
+
+# Although we may know the offset of certain text fields in TeX DVI
+# and font files, we can't use them reliably because they are not
+# zero terminated. [but we do anyway, christos]
+0	string		\367\002	TeX DVI file
+!:mime	application/x-dvi
+>16	string		>\0		(%s)
+0	string		\367\203	TeX generic font data
+0	string		\367\131	TeX packed font data
+>3	string		>\0		(%s)
+0	string		\367\312	TeX virtual font data
+0	search/1	This\ is\ TeX,	TeX transcript text
+0	search/1	This\ is\ METAFONT,	METAFONT transcript text
+
+# There is no way to detect TeX Font Metric (*.tfm) files without
+# breaking them apart and reading the data.  The following patterns
+# match most *.tfm files generated by METAFONT or afm2tfm.
+2	string		\000\021	TeX font metric data
+!:mime	application/x-tex-tfm
+>33	string		>\0		(%s)
+2	string		\000\022	TeX font metric data
+!:mime	application/x-tex-tfm
+>33	string		>\0		(%s)
+
+# Texinfo and GNU Info, from Daniel Quinlan (quinlan at yggdrasil.com)
+0	search/1	\\input\ texinfo	Texinfo source text
+!:mime	text/x-texinfo
+0	search/1	This\ is\ Info\ file	GNU Info text
+!:mime	text/x-info
+
+# TeX documents, from Daniel Quinlan (quinlan at yggdrasil.com)
+0	search/4096	\\input		TeX document text
+!:mime	text/x-tex
+!:strength - 4
+0	search/4096	\\section	LaTeX document text
+!:mime	text/x-tex
+!:strength - 1
+0	search/4096	\\setlength	LaTeX document text
+!:mime	text/x-tex
+!:strength - 4
+0	search/4096	\\documentstyle	LaTeX document text
+!:mime	text/x-tex
+!:strength - 1
+0	search/4096	\\chapter	LaTeX document text
+!:mime	text/x-tex
+!:strength - 1
+0	search/4096	\\documentclass	LaTeX 2e document text
+!:mime	text/x-tex
+!:strength - 4
+0	search/4096	\\relax		LaTeX auxiliary file
+!:mime	text/x-tex
+!:strength - 4
+0	search/4096	\\contentsline	LaTeX table of contents
+!:mime	text/x-tex
+!:strength - 4
+0	search/4096	%\ -*-latex-*-	LaTeX document text
+!:mime	text/x-tex
+
+# Tex document, from Hendrik Scholz <hendrik at scholz.net>
+0   	search/1	\\ifx		TeX document text
+
+# Index and glossary files
+0	search/4096	\\indexentry	LaTeX raw index file
+!:strength - 15
+0	search/4096	\\begin{theindex}	LaTeX sorted index
+!:strength - 15
+0	search/4096	\\glossaryentry	LaTeX raw glossary
+!:strength - 15
+0	search/4096	\\begin{theglossary}	LaTeX sorted glossary
+!:strength - 15
+0	search/4096	This\ is\ makeindex	Makeindex log file
+!:strength - 15
+
+# End of TeX
+
+#------------------------------------------------------------------------------
+# file(1) magic for BibTex text files
+# From Hendrik Scholz <hendrik at scholz.net>
+
+0	search/1/c	@article{	BibTeX text file
+0	search/1/c	@book{		BibTeX text file
+0	search/1/c	@inbook{	BibTeX text file
+0	search/1/c	@incollection{	BibTeX text file
+0	search/1/c	@inproceedings{	BibTeX text file
+0	search/1/c	@manual{	BibTeX text file
+0	search/1/c	@misc{		BibTeX text file
+0	search/1/c	@preamble{	BibTeX text file
+0	search/1/c	@phdthesis{	BibTeX text file
+0	search/1/c	@techreport{	BibTeX text file
+0	search/1/c	@unpublished{	BibTeX text file
+
+73	search/1	%%%\ \ 		BibTeX-file{ BibTex text file (with full header)
+
+73	search/1	%%%\ \ @BibTeX-style-file{   BibTeX style text file (with full header)
+
+0	search/1	%\ BibTeX\ standard\ bibliography\ 	BibTeX standard bibliography style text file
+
+0	search/1	%\ BibTeX\ `	BibTeX custom bibliography style text file
+
+0	search/1	@c\ @mapfile{	TeX font aliases text file
+
+#------------------------------------------------------------------------------
+# $File: tgif,v 1.5 2009/09/19 16:28:12 christos Exp $
+# file(1) magic for tgif(1) files
+# From Hendrik Scholz <hendrik at scholz.net>
+
+0	string	%TGIF\ x 		Tgif file version %s
+
+
+#------------------------------------------------------------------------------
+# $File: ti-8x,v 1.6 2009/09/19 16:28:12 christos Exp $
+# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
+#
+# From: Ryan McGuire (rmcguire at freenet.columbus.oh.us).
+#
+# Update: Romain Lievin (roms at lpg.ticalc.org).
+#
+# NOTE: This list is not complete.
+# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
+# program/group magic numbers in here because I cannot find any.
+0		string		**TI80**	TI-80 Graphing Calculator File.
+0		string		**TI81**	TI-81 Graphing Calculator File.
+#
+# Magic Numbers for the TI-73
+#
+0		string		**TI73**	TI-73 Graphing Calculator
+>0x00003B	byte		0x00		(real number)
+>0x00003B	byte		0x01		(list)
+>0x00003B	byte		0x02		(matrix)
+>0x00003B	byte		0x03		(equation)
+>0x00003B	byte		0x04		(string)
+>0x00003B	byte		0x05		(program)
+>0x00003B	byte		0x06		(assembly program)
+>0x00003B	byte		0x07		(picture)
+>0x00003B	byte		0x08		(gdb)
+>0x00003B	byte		0x0C		(complex number)
+>0x00003B	byte		0x0F		(window settings)
+>0x00003B	byte		0x10		(zoom)
+>0x00003B	byte		0x11		(table setup)
+>0x00003B	byte		0x13		(backup)
+
+# Magic Numbers for the TI-82
+#
+0		string		**TI82**	TI-82 Graphing Calculator
+>0x00003B	byte		0x00		(real)
+>0x00003B	byte		0x01		(list)
+>0x00003B	byte		0x02		(matrix)
+>0x00003B	byte		0x03		(Y-variable)
+>0x00003B	byte		0x05		(program)
+>0x00003B	byte		0x06		(protected prgm)
+>0x00003B	byte		0x07		(picture)
+>0x00003B	byte		0x08		(gdb)
+>0x00003B	byte		0x0B		(window settings)
+>0x00003B	byte		0x0C		(window settings)
+>0x00003B	byte		0x0D		(table setup)
+>0x00003B	byte		0x0E		(screenshot)
+>0x00003B	byte		0x0F		(backup)
+#
+# Magic Numbers for the TI-83
+#
+0		string		**TI83**	TI-83 Graphing Calculator
+>0x00003B	byte		0x00		(real)
+>0x00003B	byte		0x01		(list)
+>0x00003B	byte		0x02		(matrix)
+>0x00003B	byte		0x03		(Y-variable)
+>0x00003B	byte		0x04		(string)
+>0x00003B	byte		0x05		(program)
+>0x00003B	byte		0x06		(protected prgm)
+>0x00003B	byte		0x07		(picture)
+>0x00003B	byte		0x08		(gdb)
+>0x00003B	byte		0x0B		(window settings)
+>0x00003B	byte		0x0C		(window settings)
+>0x00003B	byte		0x0D		(table setup)
+>0x00003B	byte		0x0E		(screenshot)
+>0x00003B	byte		0x13		(backup)
+#
+# Magic Numbers for the TI-83+
+#
+0		string		**TI83F*	TI-83+ Graphing Calculator
+>0x00003B	byte		0x00		(real number)
+>0x00003B	byte		0x01		(list)
+>0x00003B	byte		0x02		(matrix)
+>0x00003B	byte		0x03		(equation)
+>0x00003B	byte		0x04		(string)
+>0x00003B	byte		0x05		(program)
+>0x00003B	byte		0x06		(assembly program)
+>0x00003B	byte		0x07		(picture)
+>0x00003B	byte		0x08		(gdb)
+>0x00003B	byte		0x0C		(complex number)
+>0x00003B	byte		0x0F		(window settings)
+>0x00003B	byte		0x10		(zoom)
+>0x00003B	byte		0x11		(table setup)
+>0x00003B	byte		0x13		(backup)
+>0x00003B	byte		0x15		(application variable)
+>0x00003B	byte		0x17		(group of variable)
+
+#
+# Magic Numbers for the TI-85
+#
+0		string		**TI85**	TI-85 Graphing Calculator
+>0x00003B	byte		0x00		(real number)
+>0x00003B	byte		0x01		(complex number)
+>0x00003B	byte		0x02		(real vector)
+>0x00003B	byte		0x03		(complex vector)
+>0x00003B	byte		0x04		(real list)
+>0x00003B	byte		0x05		(complex list)
+>0x00003B	byte		0x06		(real matrix)
+>0x00003B	byte		0x07		(complex matrix)
+>0x00003B	byte		0x08		(real constant)
+>0x00003B	byte		0x09		(complex constant)
+>0x00003B	byte		0x0A		(equation)
+>0x00003B	byte		0x0C		(string)
+>0x00003B	byte		0x0D		(function GDB)
+>0x00003B	byte		0x0E		(polar GDB)
+>0x00003B	byte		0x0F		(parametric GDB)
+>0x00003B	byte		0x10		(diffeq GDB)
+>0x00003B	byte		0x11		(picture)
+>0x00003B	byte		0x12		(program)
+>0x00003B	byte		0x13		(range)
+>0x00003B	byte		0x17		(window settings)
+>0x00003B	byte		0x18		(window settings)
+>0x00003B	byte		0x19		(window settings)
+>0x00003B	byte		0x1A		(window settings)
+>0x00003B	byte		0x1B		(zoom)
+>0x00003B	byte		0x1D		(backup)
+>0x00003B	byte		0x1E		(unknown)
+>0x00003B	byte		0x2A		(equation)
+>0x000032	string		ZS4		- ZShell Version 4 File.
+>0x000032	string		ZS3		- ZShell Version 3 File.
+#
+# Magic Numbers for the TI-86
+#
+0		string		**TI86**	TI-86 Graphing Calculator
+>0x00003B	byte		0x00		(real number)
+>0x00003B	byte		0x01		(complex number)
+>0x00003B	byte		0x02		(real vector)
+>0x00003B	byte		0x03		(complex vector)
+>0x00003B	byte		0x04		(real list)
+>0x00003B	byte		0x05		(complex list)
+>0x00003B	byte		0x06		(real matrix)
+>0x00003B	byte		0x07		(complex matrix)
+>0x00003B	byte		0x08		(real constant)
+>0x00003B	byte		0x09		(complex constant)
+>0x00003B	byte		0x0A		(equation)
+>0x00003B	byte		0x0C		(string)
+>0x00003B	byte		0x0D		(function GDB)
+>0x00003B	byte		0x0E		(polar GDB)
+>0x00003B	byte		0x0F		(parametric GDB)
+>0x00003B	byte		0x10		(diffeq GDB)
+>0x00003B	byte		0x11		(picture)
+>0x00003B	byte		0x12		(program)
+>0x00003B	byte		0x13		(range)
+>0x00003B	byte		0x17		(window settings)
+>0x00003B	byte		0x18		(window settings)
+>0x00003B	byte		0x19		(window settings)
+>0x00003B	byte		0x1A		(window settings)
+>0x00003B	byte		0x1B		(zoom)
+>0x00003B	byte		0x1D		(backup)
+>0x00003B	byte		0x1E		(unknown)
+>0x00003B	byte		0x2A		(equation)
+#
+# Magic Numbers for the TI-89
+#
+0		string		**TI89**	TI-89 Graphing Calculator
+>0x000048	byte		0x00		(expression)
+>0x000048	byte		0x04		(list)
+>0x000048	byte		0x06		(matrix)
+>0x000048	byte		0x0A		(data)
+>0x000048	byte		0x0B		(text)
+>0x000048	byte		0x0C		(string)
+>0x000048	byte		0x0D		(graphic data base)
+>0x000048	byte		0x0E		(figure)
+>0x000048	byte		0x10		(picture)
+>0x000048	byte		0x12		(program)
+>0x000048	byte		0x13		(function)
+>0x000048	byte		0x14		(macro)
+>0x000048	byte		0x1C		(zipped)
+>0x000048	byte		0x21		(assembler)
+#
+# Magic Numbers for the TI-92
+#
+0		string		**TI92**	TI-92 Graphing Calculator
+>0x000048	byte		0x00		(expression)
+>0x000048	byte		0x04		(list)
+>0x000048	byte		0x06		(matrix)
+>0x000048	byte		0x0A		(data)
+>0x000048	byte		0x0B		(text)
+>0x000048	byte		0x0C		(string)
+>0x000048	byte		0x0D		(graphic data base)
+>0x000048	byte		0x0E		(figure)
+>0x000048	byte		0x10		(picture)
+>0x000048	byte		0x12		(program)
+>0x000048	byte		0x13		(function)
+>0x000048	byte		0x14		(macro)
+>0x000048	byte		0x1D		(backup)
+#
+# Magic Numbers for the TI-92+/V200
+#
+0		string		**TI92P*	TI-92+/V200 Graphing Calculator
+>0x000048	byte		0x00		(expression)
+>0x000048	byte		0x04		(list)
+>0x000048	byte		0x06		(matrix)
+>0x000048	byte		0x0A		(data)
+>0x000048	byte		0x0B		(text)
+>0x000048	byte		0x0C		(string)
+>0x000048	byte		0x0D		(graphic data base)
+>0x000048	byte		0x0E		(figure)
+>0x000048	byte		0x10		(picture)
+>0x000048	byte		0x12		(program)
+>0x000048	byte		0x13		(function)
+>0x000048	byte		0x14		(macro)
+>0x000048	byte		0x1C		(zipped)
+>0x000048	byte		0x21		(assembler)
+#
+# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
+#
+0x0000016	string		Advanced	TI-XX Graphing Calculator (FLASH)
+0		string		**TIFL**	TI-XX Graphing Calculator (FLASH)
+>8		byte		>0		- Revision %d
+>>9 		byte		x		\b.%d,
+>12		byte		>0		Revision date %02x
+>>13		byte		x		\b/%02x
+>>14		beshort		x		\b/%04x,
+>17		string		>/0		name: '%s',
+>48		byte		0x74		device: TI-73,
+>48		byte		0x73		device: TI-83+,
+>48		byte		0x98		device: TI-89,
+>48		byte		0x88		device: TI-92+,
+>49		byte		0x23		type: OS upgrade,
+>49		byte		0x24		type: application,
+>49		byte		0x25		type: certificate,
+>49		byte		0x3e		type: license,
+>74		lelong		>0		size: %ld bytes
+
+# VTi & TiEmu skins (TI Graphing Calculators).
+# From: Romain Lievin (roms at lpg.ticalc.org).
+# Magic Numbers for the VTi skins
+0               string          VTI		Virtual TI skin
+>3		string		v		- Version
+>>4		byte		>0		\b %c
+>>6		byte		x		\b.%c
+# Magic Numbers for the TiEmu skins
+0		string		TiEmu		TiEmu skin
+>6              string          v               - Version
+>>7             byte            >0              \b %c
+>>9             byte            x               \b.%c
+>>10		byte		x		\b%c
+
+#------------------------------------------------------------------------------
+# $File: timezone,v 1.11 2009/09/19 16:28:12 christos Exp $
+# timezone:  file(1) magic for timezone data
+#
+# from Daniel Quinlan (quinlan at yggdrasil.com)
+# this should work on Linux, SunOS, and maybe others
+# Added new official magic number for recent versions of the Olson code
+0	string	TZif	timezone data
+>4	byte	0	\b, old version
+>4	byte	>0	\b, version %c
+>20	belong	0	\b, no gmt time flags
+>20	belong	1	\b, 1 gmt time flag
+>20	belong	>1	\b, %d gmt time flags
+>24	belong	0	\b, no std time flags
+>20	belong	1	\b, 1 std time flag
+>24	belong	>1	\b, %d std time flags
+>28	belong	0	\b, no leap seconds
+>28	belong	1	\b, 1 leap second
+>28	belong  >1	\b, %d leap seconds
+>32	belong	0	\b, no transition times
+>32	belong	1	\b, 1 transition time
+>32	belong  >1	\b, %d transition times
+>36	belong	0	\b, no abbreviation chars
+>36	belong	1	\b, 1 abbreviation char
+>36	belong	>1	\b, %d abbreviation chars
+0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0	old timezone data
+0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0	old timezone data
+0	string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0	old timezone data
+0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0	old timezone data
+0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0	old timezone data
+0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0	old timezone data
+
+#------------------------------------------------------------------------------
+# $File: troff,v 1.10 2009/09/19 16:28:12 christos Exp $
+# troff:  file(1) magic for *roff
+#
+# updated by Daniel Quinlan (quinlan at yggdrasil.com)
+
+# troff input
+0	search/1	.\\"		troff or preprocessor input text
+!:mime	text/troff
+0	search/1	'\\"		troff or preprocessor input text
+!:mime	text/troff
+0	search/1	'.\\"		troff or preprocessor input text
+!:mime	text/troff
+0	search/1	\\"		troff or preprocessor input text
+!:mime	text/troff
+0	search/1	'''		troff or preprocessor input text
+!:mime	text/troff
+0	regex/20	\^\\.[A-Za-z0-9][A-Za-z0-9][\ \t]	troff or preprocessor input text
+!:mime	text/troff
+0	regex/20	\^\\.[A-Za-z0-9][A-Za-z0-9]$	troff or preprocessor input text
+!:mime	text/troff
+
+# ditroff intermediate output text
+0	search/1	x\ T		ditroff output text
+>4	search/1	cat		for the C/A/T phototypesetter
+>4	search/1	ps		for PostScript
+>4	search/1	dvi		for DVI
+>4	search/1	ascii		for ASCII
+>4	search/1	lj4		for LaserJet 4
+>4	search/1	latin1		for ISO 8859-1 (Latin 1)
+>4	search/1	X75		for xditview at 75dpi
+>>7	search/1	-12		(12pt)
+>4	search/1	X100		for xditview at 100dpi
+>>8	search/1	-12		(12pt)
+
+# output data formats
+0	string		\100\357	very old (C/A/T) troff output data
+
+#------------------------------------------------------------------------------
+# $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $
+# tuxedo:	file(1) magic for BEA TUXEDO data files
+#
+# from Ian Springer <ispringer at hotmail.com>
+#
+0	string		\0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0	BEA TUXEDO DES mask data
+
+#------------------------------------------------------------------------------
+# $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $
+# typeset:  file(1) magic for other typesetting
+#
+0	string		Interpress/Xerox	Xerox InterPress data
+>16	string		/			(version
+>>17	string		>\0			%s)
+
+#------------------------------------------------------------------------------
+# $File: unicode,v 1.5 2009/09/19 16:28:13 christos Exp $
+# Unicode:  BOM prefixed text files - Adrian Havill <havill at turbolinux.co.jp>
+# GRR: These types should be recognised in file_ascmagic so these
+# encodings can be treated by text patterns.
+# Missing types are already dealt with internally.
+#
+0	string	+/v8			Unicode text, UTF-7
+0	string	+/v9			Unicode text, UTF-7
+0	string	+/v+			Unicode text, UTF-7
+0	string	+/v/			Unicode text, UTF-7
+0	string	\335\163\146\163	Unicode text, UTF-8-EBCDIC
+0	string	\376\377\000\000	Unicode text, UTF-32, big-endian
+0	string	\377\376\000\000	Unicode text, UTF-32, little-endian
+0	string	\016\376\377		Unicode text, SCSU (Standard Compression Scheme for Unicode)
+
+#------------------------------------------------------------------------------
+# $File: unknown,v 1.7 2009/09/19 16:28:13 christos Exp $
+# unknown:  file(1) magic for unknown machines
+#
+# XXX - this probably should be pruned, as it'll match PDP-11 and
+# VAX image formats.
+#
+# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
+# respectively).
+#
+# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
+# have the "version %ld", which may be a bogus COFFism (I don't think
+# there ever was COFF for the PDP-11).
+#
+# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
+# long, as it would be on a VAX.
+#
+# 0x10C is 0414 and 0x10E is 416; those *are* unknown.
+#
+0	short		0x107		unknown machine executable
+>8	short		>0		not stripped
+>15	byte		>0		- version %ld
+0	short		0x108		unknown pure executable
+>8	short		>0		not stripped
+>15	byte		>0		- version %ld
+0	short		0x109		PDP-11 separate I&D
+>8	short		>0		not stripped
+>15	byte		>0		- version %ld
+0	short		0x10b		unknown pure executable
+>8	short		>0		not stripped
+>15	byte		>0		- version %ld
+0	long		0x10c		unknown demand paged pure executable
+>16	long		>0		not stripped
+0	long		0x10e		unknown readable demand paged pure executable
+
+#------------------------------------------------------------------------------
+# $File: uuencode,v 1.7 2009/09/19 16:28:13 christos Exp $
+# uuencode:  file(1) magic for ASCII-encoded files
+#
+
+# GRR:  the first line of xxencoded files is identical to that in uuencoded
+# files, but the first character in most subsequent lines is 'h' instead of
+# 'M'.  (xxencoding uses lowercase letters in place of most of uuencode's
+# punctuation and survives BITNET gateways better.)  If regular expressions
+# were supported, this entry could possibly be split into two with
+# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
+0	search/1	begin\ 		uuencoded or xxencoded text
+
+# btoa(1) is an alternative to uuencode that requires less space.
+0	search/1	xbtoa\ Begin	btoa'd text
+
+# ship(1) is another, much cooler alternative to uuencode.
+# Greg Roelofs, newt at uchicago.edu
+0	search/1	$\012ship	ship'd binary text
+
+# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
+# Greg Roelofs, newt at uchicago.edu
+0	search/1	Decode\ the\ following\ with\ bdeco	bencoded News text
+
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan at yggdrasil.com
+11	search/1	must\ be\ converted\ with\ BinHex	BinHex binary text
+>41	search/1	x					\b, version %.3s
+
+# GRR: handle BASE64
+
+#------------------------------------------------------------------------------
+# $File: varied.out,v 1.21 2009/09/19 16:28:13 christos Exp $
+# varied.out:  file(1) magic for various USG systems
+#
+#	Herewith many of the object file formats used by USG systems.
+#	Most have been moved to files for a particular processor,
+#	and deleted if they duplicate other entries.
+#
+0	short		0610		Perkin-Elmer executable
+# AMD 29K
+0	beshort		0572		amd 29k coff noprebar executable
+0	beshort		01572		amd 29k coff prebar executable
+0	beshort		0160007		amd 29k coff archive
+# Cray
+6	beshort		0407		unicos (cray) executable
+# Ultrix 4.3
+596	string		\130\337\377\377	Ultrix core file
+>600	string		>\0		from '%s'
+# BeOS and MAcOS PEF executables
+# From: hplus at zilker.net (Jon Watte)
+0	string		Joy!peffpwpc	header for PowerPC PEF executable
+#
+# ava assembler/linker Uros Platise <uros.platise at ijs.si>
+0       string          avaobj  AVR assembler object code
+>7      string          >\0     version '%s'
+# gnu gmon magic From: Eugen Dedu <dedu at ese-metz.fr>
+0	string		gmon		GNU prof performance data
+>4	long		x		- version %ld
+# From: Dave Pearson <davep at davep.org>
+# Harbour <URL:http://www.harbour-project.org/> HRB files.
+0	string		\xc0HRB		Harbour HRB file
+>4	short		x		version %d
+
+# From: Alex Beregszaszi <alex at fsn.hu>
+# 0	string		exec 		BugOS executable
+# 0	string		pack		BugOS archive
+
+# From: Jason Spence <jspence at lightconsulting.com>
+# Generated by the "examples" in STM's ST40 devkit, and derived code.
+0	lelong		0x13a9f17e	ST40 component image format
+>4	string		>\0		\b, name '%s'
+
+
+#------------------------------------------------------------------------------
+# $File: varied.script,v 1.6 2009/09/19 16:28:13 christos Exp $
+# varied.script:  file(1) magic for various interpreter scripts
+
+0	string		#!\ /			a
+>3	string		>\0			%s script text executable
+0	string		#!\t/			a
+>3	string		>\0			%s script text executable
+0	string		#!/			a
+>2	string		>\0			%s script text executable
+0	string		#!\ 			script text executable
+>3	string		>\0			for %s
+
+# From: arno <arenevier at fdn.fr>
+# mozilla xpconnect typelib
+# see http://www.mozilla.org/scriptable/typelib_file.html
+0	string 		XPCOM\nTypeLib\r\n\032		XPConnect Typelib
+>0x10  byte        x       version %d
+>>0x11 byte        x      \b.%d
+
+#------------------------------------------------------------------------------
+# $File: vax,v 1.7 2009/09/19 16:28:13 christos Exp $
+# vax:  file(1) magic for VAX executable/object and APL workspace
+#
+0	lelong		0101557		VAX single precision APL workspace
+0	lelong		0101556		VAX double precision APL workspace
+
+#
+# VAX a.out (32V, BSD)
+#
+0	lelong		0407		VAX executable
+>16	lelong		>0		not stripped
+
+0	lelong		0410		VAX pure executable
+>16	lelong		>0		not stripped
+
+0	lelong		0413		VAX demand paged pure executable
+>16	lelong		>0		not stripped
+
+0	lelong		0420		VAX demand paged (first page unmapped) pure executable
+>16	lelong		>0		not stripped
+
+#
+# VAX COFF
+#
+# The `versions' should be un-commented if they work for you.
+# (Was the problem just one of endianness?)
+#
+0	leshort		0570		VAX COFF executable
+>12	lelong		>0		not stripped
+>22	leshort		>0		- version %ld
+0	leshort		0575		VAX COFF pure executable
+>12	lelong		>0		not stripped
+>22	leshort		>0		- version %ld
+
+#------------------------------------------------------------------------------
+# $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $
+# vicar:  file(1) magic for VICAR files.
+#
+# From: Ossama Othman <othman at astrosun.tn.cornell.edu
+# VICAR is JPL's in-house spacecraft image processing program
+# VICAR image
+0	string	LBLSIZE=	VICAR image data
+>32	string	BYTE		\b, 8 bits  = VAX byte
+>32	string	HALF		\b, 16 bits = VAX word     = Fortran INTEGER*2
+>32	string	FULL		\b, 32 bits = VAX longword = Fortran INTEGER*4
+>32	string	REAL		\b, 32 bits = VAX longword = Fortran REAL*4
+>32	string	DOUB		\b, 64 bits = VAX quadword = Fortran REAL*8
+>32	string	COMPLEX		\b, 64 bits = VAX quadword = Fortran COMPLEX*8
+# VICAR label file
+43	string	SFDU_LABEL	VICAR label file
+
+#------------------------------------------------------------------------------
+# $File: virtual,v 1.1 2009/12/25 16:04:30 christos Exp $
+# From: James Nobis <quel at quelrod.net>
+# Microsoft hard disk images for:
+# Virtual Server
+# Virtual PC
+# http://technet.microsoft.com/en-us/virtualserver/bb676673.aspx
+# .vhd
+0	string	conectix	Microsoft Disk Image, Virtual Server or Virtual PC
+
+# Sun xVM VirtualBox Disk Image
+# string  <<< Sun xVM VirtualBox Disk Image >>>
+# .vdi
+0	string	\<\<\<\ Sun\ xVM\ VirtualBox\ Disk	Sun xVM VirtualBox Disk Image
+
+
+
+#------------------------------------------------------------------------------
+# $File: virtutech,v 1.4 2009/09/19 16:28:13 christos Exp $
+# Virtutech Compressed Random Access File Format
+#
+# From <gustav at virtutech.com>
+0      string          \211\277\036\203        Virtutech CRAFF
+>4     belong          x               v%d
+>20    belong          0               uncompressed
+>20    belong          1               bzipp2ed
+>20    belong          2               gzipped
+>24    belong          0               not clean
+
+#------------------------------------------------------------------------------
+# $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $
+# visx:  file(1) magic for Visx format files
+#
+0	short		0x5555		VISX image file
+>2	byte		0		(zero)
+>2	byte		1		(unsigned char)
+>2	byte		2		(short integer)
+>2	byte		3		(float 32)
+>2	byte		4		(float 64)
+>2	byte		5		(signed char)
+>2	byte		6		(bit-plane)
+>2	byte		7		(classes)
+>2	byte		8		(statistics)
+>2	byte		10		(ascii text)
+>2	byte		15		(image segments)
+>2	byte		100		(image set)
+>2	byte		101		(unsigned char vector)
+>2	byte		102		(short integer vector)
+>2	byte		103		(float 32 vector)
+>2	byte		104		(float 64 vector)
+>2	byte		105		(signed char vector)
+>2	byte		106		(bit plane vector)
+>2	byte		121		(feature vector)
+>2	byte		122		(feature vector library)
+>2	byte		124		(chain code)
+>2	byte		126		(bit vector)
+>2	byte		130		(graph)
+>2	byte		131		(adjacency graph)
+>2	byte		132		(adjacency graph library)
+>2	string		.VISIX		(ascii text)
+
+#------------------------------------------------------------------------------
+# $File: vms,v 1.6 2009/09/19 16:28:13 christos Exp $
+# vms:  file(1) magic for VMS executables (experimental)
+#
+# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt at uchicago.edu)
+
+# GRR 950122:  I'm just guessing on these, based on inspection of the headers
+# of three executables each for Alpha and VAX architectures.  The VAX files
+# all had headers similar to this:
+#
+#   00000  b0 00 30 00 44 00 60 00  00 00 00 00 30 32 30 35  ..0.D.`.....0205
+#   00010  01 01 00 00 ff ff ff ff  ff ff ff ff 00 00 00 00  ................
+#
+0	string	\xb0\0\x30\0	VMS VAX executable
+>44032	string	PK\003\004	\b, Info-ZIP SFX archive v5.12 w/decryption
+#
+# The AXP files all looked like this, except that the byte at offset 0x22
+# was 06 in some of them and 07 in others:
+#
+#   00000  03 00 00 00 00 00 00 00  ec 02 00 00 10 01 00 00  ................
+#   00010  68 00 00 00 98 00 00 00  b8 00 00 00 00 00 00 00  h...............
+#   00020  00 00 07 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
+#   00030  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  ................
+#   00040  00 00 00 00 ff ff ff ff  ff ff ff ff 02 00 00 00  ................
+#
+0	belong	0x03000000	VMS Alpha executable
+>75264	string	PK\003\004	\b, Info-ZIP SFX archive v5.12 w/decryption
+
+#------------------------------------------------------------------------------
+# $File: vmware,v 1.7 2009/09/19 16:28:13 christos Exp $
+# VMware specific files (deducted from version 1.1 and log file entries)
+# Anthon van der Neut (anthon at mnt.org)
+0	belong	0x4d52564e	VMware nvram 
+
+#------------------------------------------------------------------------------
+# $File: vorbis,v 1.16 2009/09/19 16:28:13 christos Exp $
+# vorbis:  file(1) magic for Ogg/Vorbis files
+#
+# From Felix von Leitner <leitner at fefe.de>
+# Extended by Beni Cherniavsky <cben at crosswinds.net>
+# Further extended by Greg Wooledge <greg at wooledge.org>
+#
+# Most (everything but the number of channels and bitrate) is commented
+# out with `##' as it's not interesting to the average user.  The most
+# probable things advanced users would want to uncomment are probably
+# the number of comments and the encoder version.
+#
+# FIXME: The first match has been made a search, so that it can skip
+# over prepended ID3 tags. This will work for MIME type detection, but
+# won't work for detecting other properties of the file (they all need
+# to be made relative to the search). In any case, if the file has ID3
+# tags, the ID3 information will be printed, not the Ogg information,
+# so until that's fixed, this doesn't matter.
+# FIXME[2]: Disable the above for now, since search assumes text mode.
+#
+# --- Ogg Framing ---
+#0		search/1000	OggS		Ogg data
+0		string	OggS		Ogg data
+!:mime		application/ogg
+>4		byte		!0		UNKNOWN REVISION %u
+##>4		byte		0		revision 0
+>4		byte		0
+##>>14		lelong		x		(Serial %lX)
+# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
+>>28		string		\x7fFLAC	\b, FLAC audio
+# non-Vorbis content: Theora
+>>28		string		\x80theora	\b, Theora video
+# non-Vorbis content: Kate
+>>28		string		\x80kate\0\0\0\0	\b, Kate
+>>>37		ubyte		x		v%u
+>>>38		ubyte		x		\b.%u,
+>>>40		byte		0		utf8 encoding,
+>>>40		byte		!0		unknown character encoding,
+>>>60		string		>\0		language %s,
+>>>60		string		\0		no language set,
+>>>76		string		>\0		category %s
+>>>76		string		\0		no category set
+# non-Vorbis content: Skeleton
+>>28		string		fishead\0	\b, Skeleton
+>>>36		short		x		v%u
+>>>40		short		x		\b.%u
+# non-Vorbis content: Speex
+>>28		string		Speex\ \ \ 	\b, Speex audio
+# non-Vorbis content: OGM
+>>28		string		\x01video\0\0\0	\b, OGM video
+>>>37		string/c	div3		(DivX 3)
+>>>37		string/c	divx		(DivX 4)
+>>>37		string/c	dx50		(DivX 5)
+>>>37		string/c	xvid		(XviD)
+# --- First vorbis packet - general header ---
+>>28		string		\x01vorbis	\b, Vorbis audio,
+>>>35		lelong		!0		UNKNOWN VERSION %lu,
+##>>>35		lelong		0		version 0,
+>>>35		lelong		0
+>>>>39		ubyte		1		mono,
+>>>>39		ubyte		2		stereo,
+>>>>39		ubyte		>2		%u channels,
+>>>>40		lelong		x		%lu Hz
+# Minimal, nominal and maximal bitrates specified when encoding
+>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	\b,
+# The above tests if at least one of these is specified:
+>>>>>52		lelong		!-1
+# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
+# instead of -1.
+# Vorbis 1.0 uses 0 instead of -1.
+>>>>>>52	lelong		!0
+>>>>>>>52	lelong		!-1000
+>>>>>>>>52	lelong		x		<%lu
+>>>>>48		lelong		!-1
+>>>>>>48	lelong		x		~%lu
+>>>>>44		lelong		!-1
+>>>>>>44	lelong		!-1000
+>>>>>>>44	lelong		!0
+>>>>>>>>44	lelong		x		>%lu
+>>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	bps
+# -- Second vorbis header packet - the comments
+# A kludge to read the vendor string.  It's a counted string, not a
+# zero-terminated one, so file(1) can't read it in a generic way.
+# libVorbis is the only one existing currently, so I detect specifically
+# it.  The interesting value is the cvs date (8 digits decimal).
+# Post-RC1 Ogg files have the second header packet (and thus the version)
+# in a different place, so we must use an indirect offset.
+>>>(84.b+85)		string		\x03vorbis
+>>>>(84.b+96)		string/c	Xiphophorus\ libVorbis\ I	\b, created by: Xiphophorus libVorbis I
+>>>>>(84.b+120)		string		>00000000	
+# Map to beta version numbers:
+>>>>>>(84.b+120)	string		<20000508	(<beta1, prepublic)
+>>>>>>(84.b+120)	string		20000508	(1.0 beta 1 or beta 2)
+>>>>>>(84.b+120)	string		>20000508
+>>>>>>>(84.b+120)	string		<20001031	(beta2-3)
+>>>>>>(84.b+120)	string		20001031	(1.0 beta 3)
+>>>>>>(84.b+120)	string		>20001031
+>>>>>>>(84.b+120)	string		<20010225	(beta3-4)
+>>>>>>(84.b+120)	string		20010225	(1.0 beta 4)
+>>>>>>(84.b+120)	string		>20010225
+>>>>>>>(84.b+120)	string		<20010615	(beta4-RC1)
+>>>>>>(84.b+120)	string		20010615	(1.0 RC1)
+>>>>>>(84.b+120)	string		20010813	(1.0 RC2)
+>>>>>>(84.b+120)	string		20010816	(RC2 - Garf tuned v1)
+>>>>>>(84.b+120)	string		20011014	(RC2 - Garf tuned v2)
+>>>>>>(84.b+120)	string		20011217	(1.0 RC3)
+>>>>>>(84.b+120)	string		20011231	(1.0 RC3)
+# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
+>>>>>>(84.b+120)	string		>20011231	(pre-1.0 CVS)
+# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
+>>>>(84.b+96)		string/c	Xiph.Org\ libVorbis\ I	\b, created by: Xiph.Org libVorbis I
+>>>>>(84.b+117)		string		>00000000	
+>>>>>>(84.b+117)	string		<20020717	(pre-1.0 CVS)
+>>>>>>(84.b+117)	string		20020717	(1.0)
+>>>>>>(84.b+117)	string		20030909	(1.0.1)
+>>>>>>(84.b+117)	string		20040629	(1.1.0 RC1)
+
+#------------------------------------------------------------------------------
+# $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $
+# VXL: file(1) magic for VXL binary IO data files
+#
+# from Ian Scott <scottim at sf.net>
+#
+# VXL is a collection of C++ libraries for Computer Vision.
+# See the vsl chapter in the VXL Book for more info
+# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
+# http:/vxl.sf.net
+
+2	lelong	0x472b2c4e	VXL data file,
+>0	leshort	>0		schema version no %d
+
+#------------------------------------------------------------------------------
+# $File: warc,v 1.2 2009/09/19 16:28:13 christos Exp $
+# warc:  file(1) magic for WARC files
+
+0	string	WARC/	WARC Archive
+>5	string	x	version %.4s
+
+#------------------------------------------------------------------------------
+# weak:  file(1) magic for very weak magic entries, disabled by default
+#
+# These entries are so weak that they might interfere identification of
+# other formats. Example include:
+# - Only identify for 1 or 2 bytes
+# - Match against very wide range of values
+# - Match against generic word in some spoken languages (e.g. English)
+
+# Summary: Computer Graphics Metafile
+# Extension: .cgm
+#0	beshort&0xffe0	0x0020		binary Computer Graphics Metafile
+#0	beshort		0x3020		character Computer Graphics Metafile
+
+#0	string		=!!		Bennet Yee's "face" format
+
+#------------------------------------------------------------------------------
+# $File: windows,v 1.4 2009/09/19 16:28:13 christos Exp $
+# windows:  file(1) magic for Microsoft Windows
+#
+# This file is mainly reserved for files where programs
+# using them are run almost always on MS Windows 3.x or
+# above, or files only used exclusively in Windows OS,
+# where there is no better category to allocate for.
+# For example, even though WinZIP almost run on Windows
+# only, it is better to treat them as "archive" instead.
+# For format usable in DOS, such as generic executable
+# format, please specify under "msdos" file.
+#
+
+
+# Summary: Outlook Express DBX file
+# Extension: .dbx
+# Created by: Christophe Monniez
+0	string	\xCF\xAD\x12\xFE	MS Outlook Express DBX file
+>4	byte	=0xC5			\b, message database
+>4	byte	=0xC6			\b, folder database
+>4	byte	=0xC7			\b, account information
+>4	byte	=0x30			\b, offline database
+
+
+# Summary: Windows crash dump
+# Extension: .dmp
+# Created by: Andreas Schuster (http://computer.forensikblog.de/)
+# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html
+# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)
+0	string		PAGE		
+>4	string		DUMP		MS Windows 32bit crash dump
+>>0x05c	byte            0		\b, no PAE
+>>0x05c	byte            1		\b, PAE
+>>0xf88	lelong		1		\b, full dump
+>>0xf88	lelong		2		\b, kernel dump
+>>0xf88	lelong		3		\b, small dump
+>>0x068	lelong		x		\b, %ld pages
+>4	string		DU64		MS Windows 64bit crash dump
+>>0xf98	lelong		1		\b, full dump
+>>0xf98	lelong		2		\b, kernel dump
+>>0xf98	lelong		3		\b, small dump
+>>0x090	lequad		x		\b, %lld pages
+
+
+# Summary: Vista Event Log
+# Extension: .evtx
+# Created by: Andreas Schuster (http://computer.forensikblog.de/)
+# Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html
+0	string		ElfFile\0	MS Windows Vista Event Log
+>0x2a	leshort		x		\b, %d chunks
+>>0x10	lelong		x		\b (no. %d in use)
+>0x18	lelong		>1		\b, next record no. %d
+>0x18	lelong		=1		\b, empty
+>0x78	lelong		&1		\b, DIRTY
+>0x78	lelong		&2		\b, FULL
+
+
+# Summary: Windows 3.1 group files
+# Extension: .grp
+# Created by: unknown
+0	string		\120\115\103\103	MS Windows 3.1 group files
+
+
+# Summary: Old format help files
+# Extension: .hlp
+# Created by: Dirk Jagdmann <doj at cubic.org>
+0	lelong		0x00035f3f		MS Windows 3.x help file
+
+
+# Summary: Hyper terminal
+# Extension: .ht
+# Created by: unknown
+0	string		HyperTerminal\ 
+>15	string		1.0\ --\ HyperTerminal\ data\ file	MS Windows HyperTerminal profile
+
+
+# Summary: Windows shortcut
+# Extension: .lnk
+# Created by: unknown
+0	string		\114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106	MS Windows shortcut
+
+
+# Summary: Outlook Personal Folders
+# Created by: unknown
+0	lelong		0x4E444221	Microsoft Outlook email folder
+>10	leshort		0x0e		(<=2002)
+>10	leshort		0x17		(>=2003)
+
+
+# Summary: Windows help cache
+# Created by: unknown
+0	string		\164\146\115\122\012\000\000\000\001\000\000\000	MS Windows help cache
+
+
+# Summary: IE cache file
+# Created by: Christophe Monniez
+0	string	Client\ UrlCache\ MMF 	Internet Explorer cache file
+>20	string	>\0			version %s
+
+
+# Summary: Registry files
+# Created by: unknown
+# Modified by (1): Joerg Jenderek
+0	string		regf		MS Windows registry file, NT/2000 or above
+0	string		CREG		MS Windows 95/98/ME registry file
+0	string		SHCC3		MS Windows 3.1 registry file
+
+
+# Summary: Windows Registry text
+# Extension: .reg
+# Submitted by: Abel Cheung <abelcheung at gmail.com>
+0	string		REGEDIT4\r\n\r\n	Windows Registry text (Win95 or above)
+0	string		Windows\ Registry\ Editor\ 
+>&0	string		Version\ 5.00\r\n\r\n	Windows Registry text (Win2K or above)
+
+
+# From: Pal Tamas <folti at balabit.hu>
+# Autorun File
+0       string/c          [autorun]\r\n   Microsoft Windows Autorun file.
+!:mime	application/x-setupscript. 
+
+#------------------------------------------------------------------------------
+# $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $
+# wireless-regdb:        file(1) magic for CRDA wireless-regdb file format
+#
+0	string	RGDB	CRDA wireless regulatory database file
+>4	belong	19	(Version 1)
+
+#------------------------------------------------------------------------------
+# $File: wordprocessors,v 1.14 2009/09/19 16:28:13 christos Exp $
+# wordprocessors:  file(1) magic fo word processors.
+#
+####### PWP file format used on Smith Corona Personal Word Processors:
+2	string	\040\040\040\040\040\040\040\040\040\040\040ML4D\040'92	Smith Corona PWP
+>24	byte	2	\b, single spaced
+>24	byte	3	\b, 1.5 spaced
+>24	byte	4	\b, double spaced
+>25	byte	0x42	\b, letter
+>25	byte	0x54	\b, legal
+>26	byte	0x46	\b, A4
+
+#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+0	string	\377WPC\020\000\000\000\022\012\001\001\000\000\000\000	(WP) loadable file
+>15	byte	0	Optimized for Intel
+>15	byte	1	Optimized for Non-Intel
+1	string	WPC	(Corel/WP)
+>8	short	257	WordPerfect macro
+>8	short	258	WordPerfect help file
+>8	short	259	WordPerfect keyboard file
+>8	short	266	WordPerfect document
+>8	short	267	WordPerfect dictionary
+>8	short	268	WordPerfect thesaurus
+>8	short	269	WordPerfect block
+>8	short	270	WordPerfect rectangular block
+>8	short	271	WordPerfect column block
+>8	short	272	WordPerfect printer data
+>8	short	275	WordPerfect printer data
+>8	short	276	WordPerfect driver resource data
+>8	short	279	WordPerfect hyphenation code
+>8	short	280	WordPerfect hyphenation data
+>8	short	281	WordPerfect macro resource data
+>8	short	283	WordPerfect hyphenation lex
+>8	short	285	WordPerfect wordlist
+>8	short	286	WordPerfect equation resource data
+>8	short	289	WordPerfect spell rules
+>8	short	290	WordPerfect dictionary rules
+>8	short	295	WordPerfect spell rules (Microlytics)
+>8	short	299	WordPerfect settings file
+>8	short	301	WordPerfect 4.2 document
+>8	short	325	WordPerfect dialog file
+>8	short	332	WordPerfect button bar
+>8	short	513	Shell macro
+>8	short	522	Shell definition
+>8	short	769	Notebook macro
+>8	short	770	Notebook help file
+>8	short	771	Notebook keyboard file
+>8	short	778	Notebook definition
+>8	short	1026	Calculator help file
+>8	short 	1538	Calendar help file
+>8	short 	1546	Calendar data file
+>8	short	1793	Editor macro
+>8	short	1794	Editor help file
+>8	short	1795	Editor keyboard file
+>8	short	1817	Editor macro resource file
+>8	short 	2049	Macro editor macro
+>8	short 	2050	Macro editor help file
+>8	short	2051	Macro editor keyboard file
+>8	short	2305	PlanPerfect macro
+>8	short	2306	PlanPerfect help file
+>8	short	2307	PlanPerfect keyboard file
+>8	short	2314	PlanPerfect worksheet
+>8	short	2319	PlanPerfect printer definition
+>8	short	2322	PlanPerfect graphic definition
+>8	short	2323	PlanPerfect data
+>8	short	2324	PlanPerfect temporary printer
+>8	short	2329	PlanPerfect macro resource data
+>8	byte	11	Mail
+>8	short	2818	help file
+>8	short	2821	distribution list
+>8	short	2826	out box
+>8	short	2827	in box
+>8	short	2836	users archived mailbox
+>8	short	2837	archived message database
+>8	short	2838	archived attachments
+>8	short	3083	Printer temporary file
+>8	short	3330	Scheduler help file
+>8	short	3338	Scheduler in file
+>8	short	3339	Scheduler out file
+>8	short	3594	GroupWise settings file
+>8	short	3601	GroupWise directory services
+>8	short	3627	GroupWise settings file
+>8	short	4362	Terminal resource data
+>8	short	4363	Terminal resource data
+>8	short	4395	Terminal resource data
+>8	short	4619	GUI loadable text
+>8	short	4620	graphics resource data
+>8	short	4621	printer settings file
+>8	short	4622	port definition file
+>8	short	4623	print queue parameters
+>8	short	4624	compressed file
+>8	short	5130	Network service msg file
+>8	short	5131	Network service msg file
+>8	short	5132	Async gateway login msg
+>8	short	5134	GroupWise message file
+>8	short	7956	GroupWise admin domain database
+>8	short	7957	GroupWise admin host database
+>8	short	7959	GroupWise admin remote host database
+>8	short	7960	GroupWise admin ADS deferment data file
+>8	short	8458	IntelliTAG (SGML) compiled DTD
+>8	long	18219264	WordPerfect graphic image (1.0)
+>8	long	18219520	WordPerfect graphic image (2.0)
+#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+
+# Hangul (Korean) Word Processor File
+0	string	HWP\ Document\ File	Hangul (Korean) Word Processor File 3.0
+# From: Won-Kyu Park <wkpark at kldp.org>
+512	string		R\0o\0o\0t\0	Hangul (Korean) Word Processor File 2000
+!:mime	application/x-hwp
+
+# CosmicBook, from Beno�t Rouits
+0       string  CSBK    Ted Neslson's CosmicBook hypertext file
+
+2       string  EYWR    AmigaWriter file
+
+# chi:  file(1) magic for ChiWriter files
+0       string          \\1cw\          ChiWriter file
+>5      string          >\0             version %s
+0       string          \\1cw           ChiWriter file
+
+# Quark Express from http://www.garykessler.net/library/file_sigs.html
+2	string	IIXPR3			Intel Quark Express Document (English)
+2	string	IIXPRa			Intel Quark Express Document (Korean)
+2	string	MMXPR3			Motorola Quark Express Document (English)
+!:mime	application/x-quark-xpress-3
+2	string	MMXPRa			Motorola Quark Express Document (Korean)
+
+# adobe indesign (document, whatever...) from querkan
+0	belong	0x0606edf5		Adobe InDesign
+>16	string	DOCUMENT		Document
+
+#------------------------------------------------------------------------------
+# ichitaro456: file(1) magic for Just System Word Processor Ichitaro
+#
+# Contributor kenzo-:
+# Reversed-engineered JS Ichitaro magic numbers
+#
+
+0	string		DOC
+>43	byte		0x14	Just System Word Processor Ichitaro v4
+!:mime	application/x-ichitaro4
+>144	string	JDASH		application/x-ichitaro4
+
+0	string		DOC
+>43	byte		0x15	Just System Word Processor Ichitaro v5
+!:mime	application/x-ichitaro5
+
+0	string		DOC
+>43	byte		0x16	Just System Word Processor Ichitaro v6
+!:mime	application/x-ichitaro6
+
+#------------------------------------------------------------------------------
+# $File: xdelta,v 1.4 2009/09/19 16:28:13 christos Exp $
+# file(1) magic(5) data for xdelta  Josh MacDonald <jmacd at CS.Berkeley.EDU>
+#
+0	string	%XDELTA%	XDelta binary patch file 0.14
+0	string	%XDZ000%	XDelta binary patch file 0.18
+0	string	%XDZ001%	XDelta binary patch file 0.20
+0	string	%XDZ002%	XDelta binary patch file 1.0
+0	string	%XDZ003%	XDelta binary patch file 1.0.4
+0	string	%XDZ004%	XDelta binary patch file 1.1
+
+#------------------------------------------------------------------------------
+# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $
+# xenix:  file(1) magic for Microsoft Xenix
+#
+# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
+# model" lifted from "magic.xenix", with comment "derived empirically;
+# treat as folklore until proven"
+#
+# "small model", "large model", "huge model" stuff lifted from XXX
+#
+# XXX - "x.out" collides with PDP-11 archives
+#
+0	string		core		core file (Xenix)
+0	byte		0x80		8086 relocatable (Microsoft)
+0	leshort		0xff65		x.out
+>2	string		__.SYMDEF	 randomized
+>0	byte		x		archive
+0	leshort		0x206		Microsoft a.out
+>8	leshort		1		Middle model
+>0x1e	leshort		&0x10		overlay
+>0x1e	leshort		&0x2		separate
+>0x1e	leshort		&0x4		pure
+>0x1e	leshort		&0x800		segmented
+>0x1e	leshort		&0x400		standalone
+>0x1e	leshort		&0x8		fixed-stack
+>0x1c	byte		&0x80		byte-swapped
+>0x1c	byte		&0x40		word-swapped
+>0x10	lelong		>0		not-stripped
+>0x1e	leshort		^0xc000		pre-SysV
+>0x1e	leshort		&0x4000		V2.3
+>0x1e	leshort		&0x8000		V3.0
+>0x1c	byte		&0x4		86
+>0x1c	byte		&0xb		186
+>0x1c	byte		&0x9		286
+>0x1c	byte		&0xa		386
+>0x1f	byte		<0x040		small model
+>0x1f	byte		=0x048		large model	
+>0x1f	byte		=0x049		huge model 
+>0x1e	leshort		&0x1		executable
+>0x1e	leshort		^0x1		object file
+>0x1e	leshort		&0x40		Large Text
+>0x1e	leshort		&0x20		Large Data
+>0x1e	leshort		&0x120		Huge Objects Enabled
+>0x10	lelong		>0		not stripped
+
+0	leshort		0x140		old Microsoft 8086 x.out
+>0x3	byte		&0x4		separate
+>0x3	byte		&0x2		pure
+>0	byte		&0x1		executable
+>0	byte		^0x1		relocatable
+>0x14	lelong		>0		not stripped
+
+0	lelong		0x206		b.out
+>0x1e	leshort		&0x10		overlay
+>0x1e	leshort		&0x2		separate
+>0x1e	leshort		&0x4		pure
+>0x1e	leshort		&0x800		segmented
+>0x1e	leshort		&0x400		standalone
+>0x1e	leshort		&0x1		executable
+>0x1e	leshort		^0x1		object file
+>0x1e	leshort		&0x4000		V2.3
+>0x1e	leshort		&0x8000		V3.0
+>0x1c	byte		&0x4		86
+>0x1c	byte		&0xb		186
+>0x1c	byte		&0x9		286
+>0x1c	byte		&0x29		286
+>0x1c	byte		&0xa		386
+>0x1e	leshort		&0x4		Large Text
+>0x1e	leshort		&0x2		Large Data
+>0x1e	leshort		&0x102		Huge Objects Enabled
+
+0	leshort		0x580		XENIX 8086 relocatable or 80286 small model
+
+#------------------------------------------------------------------------------
+# $File: xilinx,v 1.4 2009/09/19 16:28:13 christos Exp $
+# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
+# Xilinx-Magic at RevRagnarok.com
+# Got the info from FPGA-FAQ 0026
+#
+# First there is the sync header and its length
+0	beshort 0x0009
+>2 	belong	=0x0ff00ff0
+>>&0	belong  =0x0ff00ff0
+>>>&0	beshort =0x0000	
+>>>>&0	pstring	a	Xilinx BIT data
+# Next is a Pascal-style string with the NCD name. We want to capture that.
+>>>>0x0F	pstring	x	- from %s
+# It is followed by a NUL
+>>>>>&1	byte	0x00
+# And then 'b'
+>>>>>&2	string b
+# With the part number:
+#>>>>>&5 string	4v	(Virtex4)
+#>>>>>&5 string  2v	(Virtex II
+#>>>>>>&0	string	!p	\b)
+#>>>>>>&0	string	p	Pro)
+>>>>>&4	pstring x	- for %s
+# And then NUL / 'c' / Build Data / NUL / 'd' / Date / NUL / 'e' / Data Length
+>>>>>>&1	byte	0x00
+>>>>>>&2	string	c
+>>>>>>&4	pstring	x	- built %s
+>>>>>>>&1	byte	0x00
+>>>>>>>&2	string	d
+>>>>>>>&4	pstring	x	\b(%s)
+>>>>>>>>&1	byte	0x00
+>>>>>>>>&2	string	e
+>>>>>>>>&4	belong	x	- data length 0x%lx
+
+#------------------------------------------------------------------------------
+# $File: xo65,v 1.4 2009/09/19 16:28:13 christos Exp $
+# xo65 object files
+# From: "Ullrich von Bassewitz" <uz at cc65.org>
+#
+0	string		\x55\x7A\x6E\x61	xo65 object,
+>4	leshort		x			version %d,
+>6	leshort&0x0001 =0x0001			with debug info
+>6	leshort&0x0001 =0x0000			no debug info
+
+# xo65 library files
+0	string		\x6E\x61\x55\x7A	xo65 library,
+>4	leshort		x			version %d
+
+# o65 object files
+0	string		\x01\x00\x6F\x36\x35	o65
+>6	leshort&0x1000	=0x0000			executable,
+>6	leshort&0x1000	=0x1000			object,
+>5	byte		x			version %d,
+>6	leshort&0x8000	=0x8000			65816,
+>6	leshort&0x8000	=0x0000			6502,
+>6	leshort&0x2000	=0x2000			32 bit,
+>6	leshort&0x2000	=0x0000			16 bit,
+>6	leshort&0x4000	=0x4000			page reloc,
+>6	leshort&0x4000	=0x0000			byte reloc,
+>6	leshort&0x0003	=0x0000			alignment 1
+>6	leshort&0x0003	=0x0001			alignment 2
+>6	leshort&0x0003	=0x0002			alignment 4
+>6	leshort&0x0003	=0x0003			alignment 256
+
+#------------------------------------------------------------------------------
+# $File: xwindows,v 1.6 2009/09/19 16:28:13 christos Exp $
+# xwindows:  file(1) magic for various X/Window system file formats.
+
+# Compiled X Keymap 
+# XKM (compiled X keymap) files (including version and byte ordering)
+1	string	mkx				Compiled XKB Keymap: lsb,
+>0	byte	>0				version %d
+>0	byte	=0				obsolete
+0	string	xkm				Compiled XKB Keymap: msb,
+>3	byte	>0				version %d
+>0	byte	=0				obsolete
+
+# xfsdump archive
+0	string	xFSdump0			xfsdump archive
+>8	belong	x	(version %d)
+
+# Jaleo XFS files
+0	long	395726				Jaleo XFS file
+>4	long	x				- version %ld
+>8	long	x				- [%ld -
+>20	long	x				%ldx
+>24	long	x				%ldx
+>28	long	1008				YUV422]
+>28	long	1000				RGB24]
+
+# Xcursor data
+# X11 mouse cursor format defined in libXcursor, see
+# http://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html
+# http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h
+0	string		Xcur		Xcursor data
+!:mime	image/x-xcursor
+>10	leshort		x		version %hd
+>>8	leshort		x		\b.%hd
+
+#------------------------------------------------------------------------------
+# $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $
+# zilog:  file(1) magic for Zilog Z8000.
+#
+# Was it big-endian or little-endian?  My Product Specification doesn't
+# say.
+#
+0	long		0xe807		object file (z8000 a.out)
+0	long		0xe808		pure object file (z8000 a.out)
+0	long		0xe809		separate object file (z8000 a.out)
+0	long		0xe805		overlay object file (z8000 a.out)
+
+#------------------------------------------------------------------------------
+# $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $
+# zyxel:  file(1) magic for ZyXEL modems
+#
+# From <rob at pe1chl.ampr.org>
+# These are the /etc/magic entries to decode datafiles as used for the
+# ZyXEL U-1496E DATA/FAX/VOICE modems.  (This header conforms to a
+# ZyXEL-defined standard)
+
+0	string		ZyXEL\002	ZyXEL voice data
+>10	byte		0		- CELP encoding
+>10	byte&0x0B	1		- ADPCM2 encoding
+>10	byte&0x0B	2		- ADPCM3 encoding
+>10	byte&0x0B	3		- ADPCM4 encoding
+>10	byte&0x0B	8		- New ADPCM3 encoding
+>10	byte&0x04	4		with resync
diff --git a/tools/dbgap-mount/Makefile b/tools/dbgap-mount/Makefile
new file mode 100644
index 0000000..9975544
--- /dev/null
+++ b/tools/dbgap-mount/Makefile
@@ -0,0 +1,123 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+
+MODULE = tools/dbgap-mount
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	demo    \
+	dbgap-mount-tool
+    
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+ifeq (win,$(OS))
+    DOCAN_LIBS = -lDOKAN
+else
+    DOCAN_LIBS = -lfuse
+endif
+
+ifeq (mac,$(OS))
+	DOCAN_LIBS = -L/usr/local/lib -losxfuse
+endif
+
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+
+#-------------------------------------------------------------------------------
+# demo
+#  test program for new XFS toy
+#
+ZDB_DEMO_SRC = \
+	demo
+
+ZDB_DEMO_OBJ = \
+	$(addsuffix .$(OBJX),$(ZDB_DEMO_SRC))
+
+ZDB_DEMO_LIB = -lkapp -stk-version -lncbi-vdb -lxfs $(DOCAN_LIBS)
+
+$(BINDIR)/demo: $(ZDB_DEMO_OBJ)
+	@echo $(TOP)
+	@echo $(OS)
+	@echo $(HOST_OS)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(ZDB_DEMO_LIB)
+
+demo_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) demo $(ZDB_DEMO_OBJ)
+
+#-------------------------------------------------------------------------------
+# demo
+#  test program for new XFS toy
+#
+ZDB_TOOL_SRC = \
+    wrap    \
+	dbgap-mount-tool
+
+ZDB_TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(ZDB_TOOL_SRC))
+
+# ZDB_TOOL_LIB = -lkapp -lncbi-vdb -lxfs $(DOCAN_LIBS)
+ZDB_TOOL_LIB = -sxfs -skapp -stk-version -sncbi-vdb -skfg $(DOCAN_LIBS)
+
+$(BINDIR)/dbgap-mount-tool: $(ZDB_TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(ZDB_TOOL_LIB)
+
+dbgap-mount-tool_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) dbgap-mount-tool $(ZDB_TOOL_OBJ)
+
diff --git a/tools/dbgap-mount/dbgap-mount-tool.c b/tools/dbgap-mount/dbgap-mount-tool.c
new file mode 100644
index 0000000..9fd797e
--- /dev/null
+++ b/tools/dbgap-mount/dbgap-mount-tool.c
@@ -0,0 +1,561 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h> /* KMain */
+#include <kapp/args.h> /* KMain */
+
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h> /* OUTMSG */
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <xfs/model.h>
+#include <xfs/node.h>
+#include <xfs/tree.h>
+#include <xfs/xfs.h>
+
+#include "dbgap-mount-tool.h"
+
+#include <sysalloc.h>
+#include <stdio.h>
+#include <string.h>
+
+/******************************************************************************/
+
+/*)))
+  \\\   Celebrity is here ...
+  (((*/
+
+XFS_EXTERN rc_t CC XFS_InitAll_MHR ( const char * ConfigFile );
+XFS_EXTERN rc_t CC XFS_DisposeAll_MHR ();
+
+static
+rc_t CC
+MakeModel (
+            struct XFSModel ** Model,
+            const char * ProjectId,
+            bool ReadOnly
+)
+{
+    rc_t RCt;
+    struct XFSModel * Mod;
+    struct XFSModelNode * ModNod;
+
+    RCt = 0;
+    Mod = NULL;
+
+    RCt = XFSModelFromScratch ( & Mod, NULL );
+    if ( RCt == 0 ) {
+        RCt = XFSModelAddRootNode ( Mod, "gap-project" );
+        if ( RCt == 0 ) {
+            ModNod = ( struct XFSModelNode * ) XFSModelRootNode ( Mod );
+            if ( ModNod == NULL ) {
+                RCt = XFS_RC ( rcInvalid );
+            }
+            else {
+                RCt = XFSModelNodeSetProperty (
+                                        ModNod,
+                                        XFS_MODEL_MODE,
+                                        ( ReadOnly
+                                                ? XFS_MODEL_MODE_RO
+                                                : XFS_MODEL_MODE_RW
+                                        )
+                                        );
+                if ( RCt == 0 ) {
+                    RCt = XFSModelNodeSetProperty (
+                                            ModNod,
+                                            XFS_MODEL_PROJECTID,
+                                            ProjectId
+                                            );
+                    if ( RCt == 0 ) {
+                        * Model = Mod;
+                    }
+                }
+
+            }
+        }
+    }
+
+    return RCt;
+}
+
+
+static
+rc_t CC
+DoFukan (
+        const char * ProjectId,
+        const char * MountPoint,
+        const char * LogFile,
+        const char * ProgName,
+        bool Daemonize,
+        bool ReadOnly
+)
+{
+    rc_t RCt;
+    struct XFSModel * TheModel;
+    struct XFSTree * TheTree;
+    struct XFSControl * TheControl;
+    char Lable [ 256 ];
+    size_t NumWr;
+
+    RCt = 0;
+    TheModel = NULL;
+    TheTree = NULL;
+    TheControl = NULL;
+    * Lable = 0;
+    NumWr = 0;
+
+    XFS_CAN ( ProjectId )
+    XFS_CAN ( MountPoint )
+
+
+        /*  Some messages good to say
+         */
+    LogMsg ( klogInfo, "Start" );
+    pLogMsg ( klogInfo, "ProjectID: $(project)", "project=%s", ProjectId );
+    pLogMsg ( klogInfo, "MountPoint: $(point)", "point=%s", MountPoint );
+    if ( LogFile != NULL ) {
+        pLogMsg ( klogInfo, "LogFile: $(file)", "file=%s", LogFile );
+    }
+    pLogMsg ( klogInfo, "ReadOnly: $(ro)", "ro=%s", ( ReadOnly ? "true" : "false" ) );
+    pLogMsg ( klogInfo, "Daemonize: $(pokemon)", "pokemon=%s", ( Daemonize ? "true" : "false" ) );
+
+        /*  Initializing all depots and heavy gunz
+         */
+    RCt = XFS_InitAll_MHR ( NULL );
+    pLogMsg ( klogDebug, "[XFS_InitAll_MHR][$(rc)]", "rc=%d", RCt );
+    if ( RCt == 0 ) {
+
+        RCt = MakeModel ( & TheModel, ProjectId, ReadOnly );
+        pLogMsg ( klogDebug, "[XFSModelMake][$(rc)]", "rc=%d", RCt );
+        if ( RCt == 0 ) {
+
+            RCt = XFSTreeMake ( TheModel, & TheTree );
+            pLogMsg ( klogDebug, "[XFSTreeMake][$(rc)]", "rc=%d", RCt );
+            if ( RCt == 0 ) {
+
+                RCt = XFSControlMake ( TheTree, & TheControl );
+                pLogMsg ( klogDebug, "[XFSControlMake][$(rc)]", "rc=%d", RCt );
+                if ( RCt == 0 ) {
+
+                    XFSControlSetMountPoint ( TheControl, MountPoint );
+
+                    RCt = string_printf (
+                                        Lable,
+                                        sizeof ( Lable ) - 1,
+                                        & NumWr,
+                                        "dbGaP(%s)",
+                                        ProjectId
+                                        );
+                    XFSControlSetLabel ( TheControl, Lable );
+                    if ( LogFile != NULL ) {
+                        XFSControlSetLogFile ( TheControl, LogFile );
+                    }
+                    if ( Daemonize ) {
+                        XFSControlDaemonize ( TheControl );
+                    }
+
+                    LogMsg ( klogDebug, "[XFSStart]" );
+                    RCt = XFSStart ( TheControl );
+                    pLogMsg ( klogDebug, "[XFSStart][$(rc)]", "rc=%d", RCt );
+                    if ( RCt == 0 ) {
+                        LogMsg ( klogDebug, "[XFSStop]" );
+                        RCt = XFSStop ( TheControl );
+                        pLogMsg ( klogDebug, "[XFSStop][$(rc)]", "rc=%d", RCt );
+                    }
+                    else {
+                        LogErr ( klogFatal, RCt, "CRITICAL ERROR: Can not start MOUNTER" );
+                    }
+                }
+
+                XFSControlDispose ( TheControl );
+
+                XFSTreeRelease ( TheTree );
+            }
+
+            XFSModelRelease ( TheModel );
+        }
+
+        XFS_DisposeAll_MHR ();
+
+    }
+
+        /*  Another message good to say
+         */
+    LogMsg ( klogDebug, "[Exiting]" );
+
+    return RCt;
+}   /* DoFukan () */
+
+static
+rc_t CC
+CheckParameters (
+            struct Args * TheArgs,
+            const char ** ProjectId,
+            const char ** MountPoint,
+            bool * ReadOnly
+)
+{
+    rc_t RCt;
+    uint32_t ParamCount;
+    uint32_t Idx;
+    const char * ParamValue;
+
+    RCt = 0;
+    ParamCount = 0;
+    Idx = 0;
+    ParamValue = NULL;
+
+    XFS_CSAN ( ProjectId )
+    XFS_CSAN ( MountPoint )
+    XFS_CSA ( ReadOnly, false )
+    XFS_CAN ( TheArgs )
+    XFS_CAN ( ProjectId )
+    XFS_CAN ( MountPoint )
+    XFS_CAN ( ReadOnly )
+
+    RCt = ArgsParamCount ( TheArgs, & ParamCount );
+    if ( RCt == 0 ) {
+        if ( ParamCount != 2 && ParamCount != 3 ) {
+            RCt = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcInsufficient );
+        }
+        else {
+            if ( ParamCount == 3 ) {
+                RCt = ArgsParamValue (
+                                    TheArgs,
+                                    Idx,
+                                    ( const void ** ) & ParamValue
+                                    );
+                if ( RCt == 0 ) {
+                    if ( strcmp ( PARAM_RO, ParamValue ) == 0 ) {
+                        * ReadOnly = true;
+                    }
+                    else {
+                        if ( strcmp ( PARAM_RW, ParamValue ) == 0 ) {
+                            * ReadOnly = false;
+                        }
+                        else {
+                            RCt = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcAmbiguous );
+                        }
+                    }
+                }
+
+                Idx ++;
+            }
+
+                /*  Next Param should be ProjectId
+                 */
+            if ( RCt == 0 ) {
+                RCt = ArgsParamValue (
+                                    TheArgs,
+                                    Idx,
+                                    ( const void ** ) & ParamValue
+                                    );
+                if ( RCt == 0 ) {
+                    * ProjectId = ParamValue;
+                }
+
+                Idx ++;
+            }
+
+                /*  Next Param should be MountPoint
+                 */
+            if ( RCt == 0 ) {
+                RCt = ArgsParamValue (
+                                    TheArgs,
+                                    Idx,
+                                    ( const void ** ) & ParamValue
+                                    );
+                if ( RCt == 0 ) {
+                    * MountPoint = ParamValue;
+                }
+
+                Idx ++;
+            }
+        }
+    }
+
+    return RCt;
+}   /* CheckParameters () */
+
+static
+rc_t CC
+CheckArgs (
+        struct Args * TheArgs,
+        const char ** LogFile,
+        const char ** ProgName,
+        bool * Daemonize
+)
+{
+    rc_t RCt;
+    const char * OptValue;
+    uint32_t OptCount;
+
+    RCt = 0;
+    OptValue = NULL;
+    OptCount = 0;
+
+    XFS_CSAN ( LogFile )
+    XFS_CSAN ( ProgName )
+    XFS_CSA ( Daemonize, false )
+    XFS_CAN ( TheArgs )
+    XFS_CAN ( LogFile )
+    XFS_CAN ( ProgName )
+    XFS_CAN ( Daemonize )
+
+    RCt = ArgsOptionCount ( TheArgs, OPT_LOGFILE, & OptCount );
+    if ( RCt == 0 && OptCount == 1 ) {
+        RCt = ArgsOptionValue (
+                            TheArgs,
+                            OPT_LOGFILE,
+                            0,
+                            ( const void ** ) & OptValue
+                            );
+        if ( RCt == 0 ) {
+            * LogFile = OptValue;
+        }
+    }
+
+    RCt = ArgsOptionCount ( TheArgs, OPT_DAEMONIZE, & OptCount ); 
+    if ( RCt == 0 ) {
+        * Daemonize = OptCount == 1;
+    }
+
+    RCt = ArgsProgram ( TheArgs, & OptValue, ProgName );
+
+    return RCt;
+}   /* CheckArgs () */
+
+static
+rc_t CC
+RunApp ( struct Args * TheArgs )
+{
+    rc_t RCt;
+    const char * ProjectId;
+    const char * MountPoint;
+    const char * LogFile;
+    const char * ProgName;
+    bool ReadOnly;
+    bool Daemonize;
+
+    RCt = 0;
+    ProjectId = NULL;
+    MountPoint = NULL;
+    LogFile = NULL;
+    ProgName = NULL;
+    ReadOnly = false;
+    Daemonize = false;
+
+    XFS_CAN ( TheArgs )
+
+
+
+        /*  First we are checking parameters
+         */
+    RCt = CheckParameters (
+                        TheArgs,
+                        & ProjectId,
+                        & MountPoint,
+                        & ReadOnly
+                        );
+
+    if ( RCt == 0 ) {
+            /*  Second we are checking Arguments
+             */
+        RCt = CheckArgs ( TheArgs, & LogFile, & ProgName, & Daemonize );
+    }
+
+    if ( RCt != 0 ) {
+        UsageSummary ( ProgName == NULL ? UsageDefaultName : ProgName );
+    }
+    else {
+        RCt = DoFukan (
+                    ProjectId,
+                    MountPoint,
+                    LogFile,
+                    ProgName,
+                    Daemonize,
+                    ReadOnly
+                    );
+    }
+
+    return RCt;
+}   /* RunApp () */
+
+static
+rc_t CC
+DoUnmount ( const char * MountPoint )
+{
+    rc_t RCt;
+
+    RCt = 0;
+
+    XFS_CAN ( MountPoint )
+
+    pLogMsg ( klogDebug, "[DoUnmount] [$(point)]", "point=%s", MountPoint );
+
+    XFSUnmountAndDestroy ( MountPoint );
+
+    return RCt;
+}   /* DoUnmount () */
+
+/*)))
+  \\\   KApp and Options ...
+  (((*/
+
+struct OptDef ToolOpts [] = {
+    { OPT_DAEMONIZE, ALS_DAEMONIZE, NULL, UsgDaemonize, 1, false, false },
+    { OPT_LOGFILE, ALS_LOGFILE, NULL, UsgLogFile, 1, true, false },
+    { OPT_UNMOUNT, ALS_UNMOUNT, NULL, UsgUnmount, 1, true, false }
+};  /* OptDef */
+
+const char UsageDefaultName[] = "dbgap-mount-tool";
+
+rc_t CC
+UsageSummary ( const char * ProgName )
+{
+    return KOutMsg (
+                    "\n"
+                    "Usage:\n"
+                    "  %s [options]"
+                    " [%s|%s]"
+                    " <project-id>"
+                    " <mount-point>"
+                    "\n"
+                    "Or:\n"
+                    "  %s [options] [unmount-options]"
+                    "\n"
+                    "\n",
+                    ProgName,
+                    PARAM_RO,
+                    PARAM_RW,
+                    ProgName
+                    );
+}   /* UsageSummary () */
+
+rc_t CC
+Usage ( const struct Args * TheArgs )
+{
+    rc_t RCt;
+    const char * ProgName;
+    const char * FullPath;
+
+    RCt = 0;
+    ProgName = NULL;
+    FullPath = NULL;
+
+    if ( TheArgs == NULL ) {
+        RCt = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    }
+    else {
+        RCt = ArgsProgram ( TheArgs, & FullPath, & ProgName );
+    }
+
+    if ( RCt != 0 ) {
+        ProgName = FullPath = UsageDefaultName;
+    }
+
+    UsageSummary ( ProgName );
+
+    KOutMsg ( "Options:\n" );
+
+    HelpOptionLine (
+                ALS_DAEMONIZE,
+                OPT_DAEMONIZE,
+                PRM_DAEMONIZE,
+                UsgDaemonize
+                );
+
+    HelpOptionLine (
+                ALS_LOGFILE,
+                OPT_LOGFILE,
+                PRM_LOGFILE,
+                UsgLogFile
+                );
+
+    KOutMsg ( "\n" );
+
+    KOutMsg ( "Unmount Options:\n" );
+
+    HelpOptionLine (
+                ALS_UNMOUNT,
+                OPT_UNMOUNT,
+                PRM_UNMOUNT,
+                UsgUnmount
+                );
+
+    KOutMsg ( "\n" );
+    KOutMsg ( "Standard Options:\n" );
+    HelpOptionsStandard ();
+    HelpVersion ( FullPath, KAppVersion () );
+
+    return RCt;
+}   /* Usage () */
+
+rc_t CC
+KMain ( int ArgC, char * ArgV [] )
+{
+    rc_t RCt;
+    struct Args * TheArgs;
+    const char * MountPoint;
+
+    RCt = 0;
+    TheArgs = NULL;
+
+    RCt = ArgsMakeAndHandle (
+                           & TheArgs,
+                           ArgC,
+                           ArgV,
+                           1,
+                           ToolOpts,
+                           sizeof ( ToolOpts ) / sizeof ( OptDef )
+                           );
+    if ( RCt == 0 ) {
+            /*  First we do check if that is unmount command 
+             */
+        RCt = ArgsOptionValue (
+                            TheArgs,
+                            OPT_UNMOUNT,
+                            0,
+                            ( const void ** ) & MountPoint
+                            );
+        if ( RCt != 0 ) {
+            RCt = WrapIt ( TheArgs, RunApp );
+        }
+        else {
+            RCt = DoUnmount ( MountPoint );
+        }
+
+        ArgsWhack ( TheArgs );
+    }
+
+    return RCt;
+}
diff --git a/tools/dbgap-mount/dbgap-mount-tool.h b/tools/dbgap-mount/dbgap-mount-tool.h
new file mode 100644
index 0000000..c0ef3c6
--- /dev/null
+++ b/tools/dbgap-mount/dbgap-mount-tool.h
@@ -0,0 +1,72 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _mount_tool_h_
+#define _mount_tool_h_
+
+#include <xfs/xfs-defs.h>
+
+#ifdef __cplusplus 
+extern "C" {
+#endif /* __cplusplus */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*)))
+ |||    Log init/dispose
+(((*/
+
+XFS_EXTERN rc_t CC WrapIt (
+                        struct Args * TheArgs,
+                        rc_t ( CC * runner ) ( struct Args * TheArgs )
+                        );
+
+/*)))
+  \\\   Argumends ... raznye
+  (((*/
+#define OPT_DAEMONIZE   "daemonize"
+#define ALS_DAEMONIZE   "d"
+#define PRM_DAEMONIZE   NULL
+static const char * UsgDaemonize [] = { "Run tool as a daemon", NULL };
+
+#define OPT_LOGFILE     "log-file"
+#define ALS_LOGFILE     "l"
+#define PRM_LOGFILE     "log-file-path"
+static const char * UsgLogFile []   = { "Log file", NULL };
+
+#define OPT_UNMOUNT     "unmount"
+#define ALS_UNMOUNT     "u"
+#define PRM_UNMOUNT     "mount-point"
+static const char * UsgUnmount []   = { "Unmount", NULL };
+
+#define PARAM_RO        "ro"
+#define PARAM_RW        "rw"
+
+#ifdef __cplusplus 
+}
+#endif /* __cplusplus */
+
+#endif /* _mount_tool_h_ */
diff --git a/tools/dbgap-mount/demo.c b/tools/dbgap-mount/demo.c
new file mode 100644
index 0000000..0aed2cc
--- /dev/null
+++ b/tools/dbgap-mount/demo.c
@@ -0,0 +1,353 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sysalloc.h>
+#include <kapp/main.h> /* KMain */
+
+#include <klib/text.h>
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <klib/time.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <xfs/model.h>
+#include <xfs/node.h>
+#include <xfs/tree.h>
+#include <xfs/xfs.h>
+
+#include <stdio.h>
+#include <string.h>
+
+/******************************************************************************/
+
+
+#ifdef JOJOBA
+
+static
+void
+SLEPOY ( int Sec )
+{
+
+printf ( "Sleeping %d seconds\n", Sec );
+KSleepMs ( Sec * 1000 );
+
+printf ( "    DONE [ Sleeping %d seconds ]\n", Sec );
+
+}
+
+#endif /* JOJOBA */
+
+XFS_EXTERN rc_t CC XFS_InitAll_MHR ( const char * ConfigFile );
+XFS_EXTERN rc_t CC XFS_DisposeAll_MHR ();
+
+static
+rc_t 
+MakeModel (
+            struct XFSModel ** Model,
+            const char * ProjectId,
+            bool ReadOnly
+)
+{
+    rc_t RCt;
+    struct XFSModel * Mod;
+    struct XFSModelNode * ModNod;
+
+    RCt = 0;
+    Mod = NULL;
+
+    RCt = XFSModelFromScratch ( & Mod, NULL );
+    if ( RCt == 0 ) {
+        RCt = XFSModelAddRootNode ( Mod, "gap-project" );
+        if ( RCt == 0 ) {
+            ModNod = ( struct XFSModelNode * ) XFSModelRootNode ( Mod );
+            if ( ModNod == NULL ) {
+                RCt = XFS_RC ( rcInvalid );
+            }
+            else {
+                RCt = XFSModelNodeSetProperty (
+                                        ModNod,
+                                        XFS_MODEL_MODE,
+                                        ( ReadOnly
+                                                ? XFS_MODEL_MODE_RO
+                                                : XFS_MODEL_MODE_RW
+                                        )
+                                        );
+                if ( RCt == 0 ) {
+                    RCt = XFSModelNodeSetProperty (
+                                            ModNod,
+                                            XFS_MODEL_PROJECTID,
+                                            ProjectId
+                                            );
+                    if ( RCt == 0 ) {
+                        * Model = Mod;
+                    }
+                }
+
+            }
+        }
+    }
+
+    return RCt;
+}
+
+
+static
+rc_t run (
+        const char * ProjectId,
+        const char * MountPoint,
+        bool ReadOnly,
+        bool Daemonize
+)
+{
+    rc_t RCt;
+    struct XFSModel * TheModel;
+    struct XFSTree * TheTree;
+    struct XFSControl * TheControl;
+
+    RCt = 0;
+    TheModel = NULL;
+    TheTree = NULL;
+    TheControl = NULL;
+
+    OUTMSG ( ( "<<--- run()\n" ) );
+
+    XFS_InitAll_MHR ( NULL );
+
+    RCt = MakeModel ( & TheModel, ProjectId, ReadOnly );
+
+    printf ( "HA(XFSModelMake)[RC=%d]\n", RCt );
+
+    if ( RCt == 0 ) {
+        RCt = XFSTreeMake ( TheModel, & TheTree );
+
+        printf ( "HA(XFSTreeMake)[RC=%d]\n", RCt );
+
+        if ( RCt == 0 ) {
+            printf ( "HA(XFSControlMake)[RC=%d]\n", RCt );
+
+            RCt = XFSControlMake ( TheTree, & TheControl );
+            printf ( "HE(XFSControlMake)[0x%p][RC=%d]\n", ( void * ) TheControl, RCt );
+
+            if ( RCt == 0 ) {
+
+                XFSControlSetMountPoint ( TheControl, MountPoint );
+                XFSControlSetLabel ( TheControl, "Olaffsen" );
+                XFSControlSetLogFile ( TheControl, NULL );
+
+                if ( ! Daemonize ) {
+                    XFSControlSetArg ( TheControl, "-f", "-f" );
+                }
+
+                printf ( "HA(XFSStart)\n" );
+                RCt = XFSStart ( TheControl );
+
+                printf ( "HE(XFSStart)[RC=%d]\n", RCt );
+                if ( RCt == 0 ) {
+                    printf ( "HA(XFSStop)\n" );
+                    RCt = XFSStop ( TheControl );
+                    printf ( "HE(XFSStop)[RC=%d]\n", RCt );
+                }
+                else {
+                    printf ( "Can not start FUSE\n" );
+                }
+            }
+
+            XFSControlDispose ( TheControl );
+
+            XFSTreeRelease ( TheTree );
+        }
+
+        XFSModelRelease ( TheModel );
+    }
+
+    XFS_DisposeAll_MHR ();
+
+    OUTMSG ( ( "--->> run()\n" ) );
+
+    return RCt;
+}
+
+/*  Here I will temporarily parce arguments, and will attach
+ *  toolkit ones later ... test program :)
+ */
+char ProgramName[333];
+char ProjectId [33];
+int ProjectIdInt = 0;
+char MountPoint[333];
+bool ReadOnly = true;
+bool Daemonize = false;
+bool LogToFile = false;
+char LogFile [ 777 ];
+
+#define RO_TAG   "ro"
+#define RW_TAG   "rw"
+#define DM_TAG   "-d"
+
+#define LF_TAG   "-l"
+
+static
+void
+RightUsage()
+{
+    printf("\ndbGaP mount tool demo program. Will mount and show content of cart files\n");
+    printf("\nUsage: %s [%s|%s] [%s log_file] [%s] project_id mount_point\n\n\
+Where:\n\
+    project_id - usually integer greater that zero and less than twelve\n\
+    %s - mount in read only mode\n\
+    %s - mount in read-write mode\n\
+    %s - run mounter as daemon\n\
+    mount_point - point to mount\n\
+    log_file - file to log logs\n\
+\n\n", ProgramName, RO_TAG, RW_TAG, LF_TAG, DM_TAG, RO_TAG, RW_TAG, DM_TAG );
+}   /* RightUsage() */
+
+static
+bool
+ParseArgs ( int argc, char ** argv )
+{
+    const char * PPU;
+    const char * Arg;
+    int llp;
+
+    Arg = NULL;
+    llp = 0;
+    * ProgramName = 0;
+    * ProjectId = 0;
+    ProjectIdInt = 0;
+    * MountPoint = 0;
+
+    ReadOnly = true;
+    Daemonize = false;
+
+        /* Herer wer arer extractingr programr namer
+         */
+    PPU = strrchr ( * argv, '/' );
+    if ( PPU == NULL ) {
+        PPU = * argv;
+    }
+    else {
+        PPU ++;
+    }
+    strcpy ( ProgramName, PPU );
+
+        /* Herer shouldr ber atr leastr oner argumentr - projectr idr
+         */
+    if ( argc <= 2 ) {
+        printf ( "ERROR : too few arguments\n" );
+        return false;
+    }
+
+    llp = 1;
+    Arg = * ( argv + llp );
+
+        /* firstr paramr couldr ber "ro|rw" orr "-d"
+         */
+    if ( strcmp ( Arg, RO_TAG ) == 0 ) {
+        ReadOnly = true;
+
+        llp ++;
+    }
+    else {
+        ReadOnly = false;
+        if ( strcmp ( Arg, RW_TAG ) == 0 ) {
+
+            llp ++;
+        }
+    }
+
+        /* secondr paramr "-d" orr projectr idr
+         */
+    if ( argc <= llp ) {
+        printf ( "ERROR : too few arguments\n" );
+        return false;
+    }
+    Arg = * ( argv + llp );
+    if ( strcmp ( Arg, DM_TAG ) == 0 ) {
+        Daemonize = true;
+
+        llp ++;
+    }
+
+        /* andr nowr itr isr projectr idr
+         */
+    if ( argc <= llp ) {
+        printf ( "ERROR : too few arguments\n" );
+        return false;
+    }
+    Arg = * ( argv + llp );
+    strcpy ( ProjectId, Arg );
+        /* checkr thatr integerr
+         */
+    ProjectIdInt = atol ( ProjectId );
+    if ( ProjectIdInt <= 0 ) {
+        printf ( "ERROR : invalid project_id '%s'\n", ProjectId );
+        return false;
+    }
+    llp ++;
+
+
+        /* mountr pointr ifr existsr
+         */
+    if ( llp < argc ) {
+        Arg = * ( argv + llp );
+        strcpy ( MountPoint, Arg );
+        llp ++;
+    }
+
+    printf ( "PrI [%d]\n", ProjectIdInt );
+    printf ( "MnP [%s]\n", MountPoint );
+
+
+    return true;
+}   /* ParseArgs() */
+
+
+const char UsageDefaultName[] = "Henri Fuseli";
+rc_t CC UsageSummary (const char* progname) { return 0; }
+rc_t CC Usage ( const Args * args ) { return 0; }
+
+rc_t CC KMain(int argc, char *argv[]) {
+
+    // KLogLevelSet ( klogInfo );
+    KLogLevelSet ( klogDebug );
+    // XFSLogInit ( "log.log" );
+
+    if ( ! ParseArgs ( argc, argv ) ) {
+        RightUsage();
+        return 1;
+    }
+
+    return run (
+                ProjectId,
+                MountPoint,
+                ReadOnly,
+                Daemonize
+                );
+}
diff --git a/tools/dbgap-mount/demo.mkfg b/tools/dbgap-mount/demo.mkfg
new file mode 100755
index 0000000..66ab293
--- /dev/null
+++ b/tools/dbgap-mount/demo.mkfg
@@ -0,0 +1,47 @@
+## There is description of Test model
+
+root/type="simple-container"
+root/security="r-xr-xr-x"
+root/children="project,workspace,data"
+
+project/label="Project"
+project/type="kart-collection"
+project/source="/panfs/pan1/trace_work/iskhakov/Tests/dbGaP/data/Project"
+project/security="r-xr-xr-x"
+
+workspace/label="EncryptedWorkspace"
+workspace/type="workspace"
+workspace/security="rwxrwxr-x"
+workspace/source="/panfs/pan1/trace_work/iskhakov/Tests/dbGaP/data/ENC"
+workspace/password="aaa"
+workspace/enctype="AES128"
+
+data/label="Data"
+data/type="simple-container"
+data/children="remote,dir,tar,encfile"
+
+remote/label="RemoteRepository"
+remote/type="remote-repository"
+remote/source="http://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant"
+remote/security="r-xr-xr-x"
+
+dir/label="MirroredDirectory"
+dir/type="directory"
+dir/source="/home/iskhakov/HLAM/"
+dir/security="rwxr-xr-x"
+
+tar/label="TarArchive"
+tar/type="tar-archive"
+tar/source="/home/iskhakov/HLAM/mumu.tar"
+
+readme/label="README.txt"
+readme/type="readme"
+help/text="File was automatically generated"
+help/security="r-xr--r--"
+
+encfile/label="iFILE.txt"
+encfile/type="encrypted-file"
+encfile/source="/home/iskhakov/HLAM/HURI.txt.ncbi_enc"
+encfile/security="r--r--r--"
+encfile/password="aaa"
+encfile/enctype="AES128"
diff --git a/tools/dbgap-mount/unix/wrap.c b/tools/dbgap-mount/unix/wrap.c
new file mode 100644
index 0000000..f89944f
--- /dev/null
+++ b/tools/dbgap-mount/unix/wrap.c
@@ -0,0 +1,44 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/args.h> /* KMain */
+#include <xfs/xfs-defs.h>
+
+#include <sysalloc.h>
+
+
+/* By default should call DoFukan ()
+ */
+LIB_EXPORT
+rc_t CC
+WrapIt (
+        struct Args * TheArgs,
+        rc_t ( CC * runner ) ( struct Args * TheArgs )
+)
+{
+    XFS_CAN ( TheArgs )
+    XFS_CAN ( runner )
+    return runner ( TheArgs );
+}   /* WrapIt () */
diff --git a/tools/dbgap-mount/win/wrap.c b/tools/dbgap-mount/win/wrap.c
new file mode 100644
index 0000000..1554901
--- /dev/null
+++ b/tools/dbgap-mount/win/wrap.c
@@ -0,0 +1,344 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/args.h> /* KMain */
+
+#include <klib/text.h>
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <xfs/xfs-defs.h>
+#include <xfs/xlog.h>
+
+#include "../dbgap-mount-tool.h"
+
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*  There is some inconvinience. Before KMain is called, some filthy
+ *  converts all cool WCHAR paths to uncool linux-style char paths
+ *  so we had to go throught all parameters and regenerate command
+ *  line with converting into path everything what looks like a path.
+ *  or ... what starts with \
+ */
+
+static
+rc_t CC
+_CharToWChar ( WCHAR * Buf, size_t BufSz, const char * Str )
+{
+    XFS_CAN ( Str )
+    XFS_CAN ( Buf )
+
+
+    return  mbstowcs ( Buf, Str, strlen ( Str ) ) == - 1
+                                            ? XFS_RC ( rcInvalid )
+                                            : 0
+                                            ;
+}   /* _CharToWChar () */
+
+LIB_EXPORT
+rc_t CC
+XFSPathInnerToNative (
+                    WCHAR * NativePathBuffer,
+                    size_t NativePathBufferSize,
+                    const char * InnerPath,
+                    ...
+                    );
+
+static
+rc_t CC
+_CheckConvert ( const char * Str, WCHAR * Buf, size_t BufSz )
+{
+    rc_t RCt = 0;
+
+    XFS_CAN ( Str )
+    XFS_CAN ( Buf )
+
+    if ( * Str == '/' || ( * Str == '.' && * ( Str + 1 ) == '/' ) ) {
+            /* That is candidate for a path */
+        RCt = XFSPathInnerToNative ( Buf, BufSz, Str );
+    }
+    else {
+            /* Just converting to WCHAR */
+        RCt = _CharToWChar ( Buf, BufSz, Str );
+    }
+
+    return RCt;
+}   /* _CheckConvert () */
+
+static
+bool CC
+_IsDaemonizeToken ( const char * Param )
+{
+    const char * Str = Param;
+
+    if ( Str != NULL ) {
+        if ( * Str == '-' ) {
+            Str ++;
+            if ( * Str == '-' ) {
+                Str ++;
+                return strcmp ( Str, OPT_DAEMONIZE ) == 0;
+            }
+            else {
+                return strcmp ( Str, ALS_DAEMONIZE ) == 0;
+            }
+        }
+    }
+
+    return false;
+}   /* _IsDaemonizeToken () */
+
+static
+rc_t CC
+_MakeCommandString (
+                struct Args * TheArgs,
+                WCHAR ** Str,
+                WCHAR ** Prog
+)
+{
+    rc_t RCt;
+    uint32_t Cnt;
+    uint32_t Idx;
+    const char * Val;
+    WCHAR BF [ 4096 ];
+    WCHAR BF1 [ 1096 ];
+
+    RCt = 0;
+    Cnt = 0;
+    Idx = 0;
+    Val = NULL;
+    * BF = 0;
+    * BF1 = 0;
+
+    XFS_CSAN ( Str )
+    XFS_CAN ( TheArgs )
+    XFS_CAN ( Str )
+
+    RCt = ArgsArgvCount ( TheArgs, & Cnt );
+    if ( RCt == 0 ) {
+        for ( Idx = 0; Idx < Cnt; Idx ++ ) {
+            ZeroMemory ( BF1, sizeof ( BF1 ) );
+
+            RCt = ArgsArgvValue ( TheArgs, Idx, & Val );
+            if ( RCt != 0 ) {
+                break;
+            }
+
+            if ( _IsDaemonizeToken ( Val ) ) {
+                continue;
+            }
+
+            RCt = _CheckConvert ( Val, BF1, sizeof ( BF1 ) );
+            if ( RCt != 0 ) {
+                break;
+            }
+
+            if ( 0 < Idx ) {
+                wcscat ( BF, L" " );
+            }
+            wcscat ( BF, BF1 );
+        }
+    }
+
+    if ( RCt == 0 ) {
+        ZeroMemory ( BF1, sizeof ( BF1 ) );
+        RCt = ArgsArgvValue ( TheArgs, 0, & Val );
+        if ( RCt == 0 ) {
+            RCt = _CheckConvert ( Val, BF1, sizeof ( BF1 ) );
+        }
+    }
+
+    * Str = _wcsdup ( BF );
+    * Prog = _wcsdup ( BF1 );
+
+    if ( * Str == NULL || * Prog == NULL ) {
+        RCt = XFS_RC ( rcExhausted );
+
+        if ( * Str != NULL ) {
+            free ( * Str );
+            * Str = NULL;
+        }
+
+        if ( * Prog != NULL ) {
+            free ( * Prog );
+            * Prog = NULL;
+        }
+    }
+
+    return 0;
+}   /* _MakeCommandString () */
+
+static
+rc_t CC
+_CreateDetached ( LPCTSTR AppName, LPTSTR Cmd )
+{
+    rc_t RCt;
+    BOOL Ret;
+    STARTUPINFO StartInfo;
+    PROCESS_INFORMATION Process;
+    int Err;
+
+    RCt = 0;
+    Ret = FALSE;
+    ZeroMemory ( & StartInfo, sizeof( StartInfo ) );
+    ZeroMemory ( & Process, sizeof( Process ) );
+    Err = 0;
+
+    Ret = CreateProcessW (
+                AppName,            // application name
+                Cmd,                // command line
+                NULL,               // process attributes
+                NULL,               // trhead attributes
+                FALSE,              // no file handler inheritance
+                DETACHED_PROCESS,   // Creation Flags
+                NULL,               // Inherit environment
+                NULL,               // Inherit CWD
+                & StartInfo,        // Startup Info
+                & Process           // Process Information
+                );
+    if ( Ret == FALSE ) {
+        Err = GetLastError ();
+        wprintf ( L"CRITICAL ERROR: Can not run in background [%s] Error[%d]\n", AppName, Err );
+        RCt = XFS_RC ( rcInvalid );
+    }
+    else {
+        wprintf ( L"RUN DETACHED\n" );
+    }
+
+    return RCt;
+}   /* _CreateDetached () */
+
+static
+rc_t CC
+RunDaemon ( struct Args * TheArgs )
+{
+    rc_t RCt;
+    WCHAR * CmdLine;
+    WCHAR * ProgName;
+
+    RCt = 0;
+    CmdLine = NULL;
+    ProgName = NULL;
+
+    RCt = _MakeCommandString ( TheArgs, & CmdLine, & ProgName );
+    if ( RCt == 0 ) {
+        RCt = _CreateDetached ( ProgName, CmdLine );        
+
+        free ( CmdLine );
+        free ( ProgName );
+    }
+
+    return 0;
+}   /* RunDaemon () */
+
+static
+rc_t CC
+_SetLog ( struct Args * TheArgs )
+{
+    rc_t RCt;
+    const char * LogFile;
+    uint32_t OptCount;
+
+    RCt = 0;
+    LogFile = NULL;
+    OptCount = 0;
+
+    XFS_CAN ( TheArgs )
+
+    if ( TheArgs != NULL ) {
+        RCt = ArgsOptionCount ( TheArgs, OPT_LOGFILE, & OptCount );
+        if ( RCt == 0 && OptCount == 1 ) {
+            RCt = ArgsOptionValue (
+                                TheArgs,
+                                OPT_LOGFILE,
+                                0,
+                                ( const void ** ) & LogFile
+                                );
+        }
+    }
+
+    if ( RCt == 0 ) {
+        if ( LogFile != NULL ) {
+            printf ( "Log File [%s]\n", LogFile );
+        }
+        else {
+/* 
+            printf ( "Log File [NULL]\n" );
+*/
+        }
+        RCt = XFSLogInit ( LogFile );
+    }
+
+    return RCt;
+}   /* _SetLog () */
+
+/* By default should call DoFukan ()
+ */
+rc_t CC
+WrapIt (
+        struct Args * TheArgs, 
+        rc_t ( CC * runner ) ( struct Args * TheArgs )
+)
+{
+    rc_t RCt;
+    uint32_t OptCount;
+
+    RCt = 0;
+    OptCount = 0;
+
+    XFS_CAN ( TheArgs );
+    XFS_CAN ( runner );
+
+    RCt = ArgsOptionCount ( TheArgs, OPT_DAEMONIZE, & OptCount );
+    if ( RCt == 0 ) {
+        if ( OptCount == 1 ) {
+                /* Here we are daemonizing
+                 */
+            RCt = RunDaemon ( TheArgs );
+        }
+        else {
+                /* Setting log file
+                 */
+            RCt = _SetLog ( TheArgs );
+            if ( RCt == 0 ) {
+                RCt = runner ( TheArgs );
+            }
+            else {
+                LogErr ( klogErr, RCt, "CRITICAL ERROR: Can not initialize log file" );
+            }
+        }
+    }
+
+        /* TODO : that is soo stupid - remove 
+         */
+    return RCt;
+}   /* WrapIt () */
diff --git a/tools/fastdump/.gitignore b/tools/fastdump/.gitignore
new file mode 100644
index 0000000..2d51571
--- /dev/null
+++ b/tools/fastdump/.gitignore
@@ -0,0 +1,3 @@
+lookup_bin.dat
+special.txt
+vdb_dump_special.txt
diff --git a/tools/fastdump/Makefile b/tools/fastdump/Makefile
new file mode 100644
index 0000000..f39d069
--- /dev/null
+++ b/tools/fastdump/Makefile
@@ -0,0 +1,89 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/fastdump
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	fastdump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# fastdump
+#
+TOOL_SRC = \
+	helper \
+	index \
+	lookup_writer \
+	lookup_reader \
+	file_printer \
+	merge_sorter \
+	sorter \
+	cmn_iter \
+	raw_read_iter \
+	special_iter \
+	fastq_iter \
+	join \
+	fastdump
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/fastdump: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TOOL_LIB)
+
diff --git a/tools/fastdump/cmn_iter.c b/tools/fastdump/cmn_iter.c
new file mode 100644
index 0000000..e1c463c
--- /dev/null
+++ b/tools/fastdump/cmn_iter.c
@@ -0,0 +1,287 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cmn_iter.h"
+#include "helper.h"
+
+#include <klib/progressbar.h>
+#include <klib/out.h>
+#include <sra/sraschema.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+typedef struct cmn_iter
+{
+    const VDBManager * mgr;
+    VSchema * schema;
+    const VDatabase * db;
+    const VTable * tbl;
+    const VCursor * cursor;
+    const char * row_range;
+    struct num_gen * ranges;
+    const struct num_gen_iter * row_iter;
+    struct progressbar * progressbar;
+    uint64_t count;
+    int64_t first, row_id;
+} cmn_iter;
+
+
+void destroy_cmn_iter( struct cmn_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        if ( iter->progressbar != NULL )
+            destroy_progressbar( iter->progressbar );
+
+        if ( iter->row_iter != NULL ) num_gen_iterator_destroy( iter->row_iter );
+        if ( iter->ranges != NULL ) num_gen_destroy( iter->ranges );
+        if ( iter->cursor != NULL ) VCursorRelease( iter->cursor );
+        if ( iter->tbl != NULL ) VTableRelease( iter->tbl );
+        if ( iter->db != NULL ) VDatabaseRelease( iter->db );
+        if ( iter->schema != NULL ) VSchemaRelease( iter->schema );
+        if ( iter->mgr != NULL ) VDBManagerRelease( iter->mgr );
+        free( ( void * ) iter );
+    }
+}
+
+
+rc_t make_cmn_iter( cmn_params * params, const char * tblname, struct cmn_iter ** iter )
+{
+    rc_t rc = 0;
+    cmn_iter * i = calloc( 1, sizeof * i );
+    if ( i == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "make_cmn_iter.calloc( %d ) -> %R", ( sizeof * i ), rc );
+    }
+    else
+    {
+        rc = VDBManagerMakeRead( &i->mgr, params->dir );
+        if ( rc != 0 )
+            ErrMsg( "make_cmn_iter.VDBManagerMakeRead() -> %R\n", rc );
+        else
+        {
+            rc = VDBManagerMakeSRASchema( i->mgr, &i->schema );
+            if ( rc != 0 )
+                ErrMsg( "make_cmn_iter.VDBManagerMakeSRASchema() -> %R\n", rc );
+            else
+            {
+                rc = VDBManagerOpenDBRead( i->mgr, &i->db, i->schema, "%s", params->acc );
+                if ( rc != 0 )
+                    ErrMsg( "make_cmn_iter.VDBManagerOpenDBRead( '%s' ) -> %R\n", params->acc, rc );
+                else
+                {
+                    rc = VDatabaseOpenTableRead( i->db, &i->tbl, "%s", tblname );
+                    if ( rc != 0 )
+                        ErrMsg( "make_cmn_iter.VDBManagerOpenDBRead( '%s', '%s' ) -> %R\n", params->acc, tblname, rc );
+                    else
+                    {
+                        rc = VTableCreateCachedCursorRead( i->tbl, &i->cursor, params->cursor_cache );
+                        if ( rc != 0 )
+                            ErrMsg( "make_cmn_iter.VTableCreateCachedCursorRead() -> %R\n", rc );
+                        else
+                        {
+                            if ( rc == 0 && params->show_progress )
+                                make_progressbar( &i->progressbar, 2 );
+                            i->row_range = params->row_range;
+                            i->first = params->first;
+                            i->count = params->count;
+                            
+                            *iter = i;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    if ( rc != 0 )
+        destroy_cmn_iter( i );
+    return rc;
+}
+
+
+rc_t cmn_iter_add_column( struct cmn_iter * iter, const char * name, uint32_t * id )
+{
+    return add_column( iter->cursor, name, id );
+}
+
+
+int64_t cmn_iter_row_id( const struct cmn_iter * iter )
+{
+    return iter->row_id;
+}
+
+
+uint64_t cmn_iter_row_count( struct cmn_iter * iter )
+{
+    uint64_t res = 0;
+    rc_t rc = num_gen_iterator_count( iter->row_iter, &res );
+    if ( rc != 0 )
+        ErrMsg( "make_cmn_iter.num_gen_iterator_count() -> %R\n", rc );
+    return res;
+}
+
+
+bool cmn_iter_next( struct cmn_iter * iter, rc_t * rc )
+{
+    bool res = num_gen_iterator_next( iter->row_iter, &iter->row_id, rc );
+    if ( res && iter->progressbar != NULL )
+    {
+        uint64_t percent = calc_percent( iter->count, iter->row_id, 2 );
+        update_progressbar( iter->progressbar, percent );
+    }
+    return res;
+}
+
+
+rc_t cmn_iter_range( struct cmn_iter * iter, uint32_t col_id )
+{
+    rc_t rc = VCursorOpen( iter->cursor );
+    if ( rc != 0 )
+        ErrMsg( "cmn_iter_range.VCursorOpen() -> %R", rc );
+    else
+    {
+        rc = num_gen_make_sorted( &iter->ranges, true );
+        if ( rc != 0 )
+            ErrMsg( "cmn_iter_range.num_gen_make_sorted() -> %R\n", rc );
+        else
+        {
+            if ( iter->row_range != NULL )
+            {
+                rc = num_gen_parse( iter->ranges, iter->row_range );
+                if ( rc != 0 )
+                    ErrMsg( "cmn_iter_range.num_gen_parse( %s ) -> %R\n", iter->row_range, rc );
+            }
+            else if ( iter->count > 0 )
+            {
+                rc = num_gen_add( iter->ranges, iter->first, iter->count );
+                if ( rc != 0 )
+                    ErrMsg( "cmn_iter_range.num_gen_add( %ld.%lu ) -> %R\n",
+                            iter->first, iter->count, iter->row_range, rc );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorIdRange( iter->cursor, col_id, &iter->first, &iter->count );
+        if ( rc != 0 )
+            ErrMsg( "cmn_iter_range.VCursorIdRange() -> %R", rc );
+        else
+        {
+            rc = make_row_iter( iter->ranges, iter->first, iter->count, &iter->row_iter );
+            if ( rc != 0 )
+                ErrMsg( "cmn_iter_range.make_row_iter( %s ) -> %R\n", iter->row_range, rc );
+        }
+    }
+    return rc;
+}
+
+
+rc_t cmn_read_uint64( struct cmn_iter * iter, uint32_t col_id, uint64_t *value )
+{
+    uint32_t elem_bits, boff, row_len;
+    const uint64_t * value_ptr;
+    rc_t rc = VCursorCellDataDirect( iter->cursor, iter->row_id, col_id, &elem_bits,
+                                 (const void **)&value_ptr, &boff, &row_len );
+    if ( rc != 0 )
+        ErrMsg( "VCursorCellDataDirect( #%ld ) -> %R\n", iter->row_id, rc );
+    else if ( elem_bits != 64 || boff != 0 || row_len < 1 )
+    {
+        ErrMsg( "row#%ld : bits=%d, boff=%d, len=%d\n", iter->row_id, elem_bits, boff, row_len );
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcRow, rcInvalid );
+    }
+    else
+        *value = *value_ptr;
+    return rc;
+}
+
+
+rc_t cmn_read_uint64_array( struct cmn_iter * iter, uint32_t col_id, uint64_t *value,
+                            uint32_t num_values, uint32_t * values_read )
+{
+    uint32_t elem_bits, boff, row_len;
+    const uint64_t * value_ptr;
+    rc_t rc = VCursorCellDataDirect( iter->cursor, iter->row_id, col_id, &elem_bits,
+                                 (const void **)&value_ptr, &boff, &row_len );
+    if ( rc != 0 )
+        ErrMsg( "VCursorCellDataDirect( #%ld ) -> %R\n", iter->row_id, rc );
+    else if ( elem_bits != 64 || boff != 0 || row_len < 1 )
+    {
+        ErrMsg( "row#%ld : bits=%d, boff=%d, len=%d\n", iter->row_id, elem_bits, boff, row_len );
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcRow, rcInvalid );
+    }
+    else
+    {
+        if ( row_len > num_values ) row_len = num_values;
+        * values_read = row_len;
+        memmove( (void *)value, (void *)value_ptr, row_len * 8 );
+    }
+    return rc;
+}
+
+
+rc_t cmn_read_uint32( struct cmn_iter * iter, uint32_t col_id, uint32_t *value )
+{
+    uint32_t elem_bits, boff, row_len;
+    const uint32_t * value_ptr;
+    rc_t rc = VCursorCellDataDirect( iter->cursor, iter->row_id, col_id, &elem_bits,
+                                 (const void **)&value_ptr, &boff, &row_len );
+    if ( rc != 0 )
+        ErrMsg( "VCursorCellDataDirect( #%ld ) -> %R\n", iter->row_id, rc );
+    else if ( elem_bits != 32 || boff != 0 || row_len < 1 )
+    {
+        ErrMsg( "row#%ld : bits=%d, boff=%d, len=%d\n", iter->row_id, elem_bits, boff, row_len );
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcRow, rcInvalid );
+    }
+    else
+        *value = *value_ptr;
+    return rc;
+}
+
+rc_t cmn_read_String( struct cmn_iter * iter, uint32_t col_id, String *value )
+{
+    uint32_t elem_bits, boff;
+    rc_t rc = VCursorCellDataDirect( iter->cursor, iter->row_id, col_id, &elem_bits,
+                                 (const void **)&value->addr, &boff, &value->len );
+    if ( rc != 0 )
+        ErrMsg( "VCursorCellDataDirect( #%ld ) -> %R\n", iter->row_id, rc );
+    else if ( elem_bits != 8 || boff != 0 )
+    {
+        ErrMsg( "row#%ld : bits=%d, boff=%d, len=%d\n", iter->row_id, elem_bits, boff, value->len );
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcRow, rcInvalid );
+    }
+    else
+        value->size = value->len;
+    return rc;
+}
diff --git a/tools/fastdump/cmn_iter.h b/tools/fastdump/cmn_iter.h
new file mode 100644
index 0000000..a390b07
--- /dev/null
+++ b/tools/fastdump/cmn_iter.h
@@ -0,0 +1,82 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cmn_iter_
+#define _h_cmn_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+struct cmn_iter;
+
+typedef struct cmn_params
+{
+    KDirectory * dir;
+    const char * acc;
+    const char * row_range;
+    int64_t first;
+    uint64_t count;
+    size_t cursor_cache;
+    bool show_progress;
+	bool show_details;
+} cmn_params;
+
+void destroy_cmn_iter( struct cmn_iter * iter );
+
+rc_t make_cmn_iter( cmn_params * params, const char * tblname, struct cmn_iter ** iter );
+
+rc_t cmn_iter_add_column( struct cmn_iter * iter, const char * name, uint32_t * id );
+rc_t cmn_iter_range( struct cmn_iter * iter, uint32_t col_id );
+
+bool cmn_iter_next( struct cmn_iter * iter, rc_t * rc );
+int64_t cmn_iter_row_id( const struct cmn_iter * iter );
+
+uint64_t cmn_iter_row_count( struct cmn_iter * iter );
+
+rc_t cmn_read_uint64( struct cmn_iter * iter, uint32_t col_id, uint64_t *value );
+rc_t cmn_read_uint64_array( struct cmn_iter * iter, uint32_t col_id, uint64_t *value,
+                            uint32_t num_values, uint32_t * values_read );
+rc_t cmn_read_uint32( struct cmn_iter * iter, uint32_t col_id, uint32_t *value );
+rc_t cmn_read_String( struct cmn_iter * iter, uint32_t col_id, String *value );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/fastdump.c b/tools/fastdump/fastdump.c
new file mode 100644
index 0000000..dc82fdb
--- /dev/null
+++ b/tools/fastdump/fastdump.c
@@ -0,0 +1,367 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cmn_iter.h"
+#include "file_printer.h"
+#include "raw_read_iter.h"
+#include "special_iter.h"
+#include "fastq_iter.h"
+#include "lookup_writer.h"
+#include "lookup_reader.h"
+#include "join.h"
+#include "sorter.h"
+#include "helper.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/out.h>
+#include <klib/vector.h>
+#include <klib/log.h>
+#include <kfs/directory.h>
+#include <kproc/thread.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+static const char * lookup_usage[] = { "lookup file", NULL };
+#define OPTION_LOOKUP   "lookup"
+#define ALIAS_LOOKUP    "l"
+
+static const char * range_usage[] = { "row-range", NULL };
+#define OPTION_RANGE    "range"
+#define ALIAS_RANGE     "R"
+
+static const char * format_usage[] = { "format (special, fastq, lookup, default=special)", NULL };
+#define OPTION_FORMAT   "format"
+#define ALIAS_FORMAT     "f"
+
+static const char * output_usage[] = { "output-file", NULL };
+#define OPTION_OUTPUT   "out"
+#define ALIAS_OUTPUT    "o"
+
+static const char * progress_usage[] = { "show progress", NULL };
+#define OPTION_PROGRESS "progress"
+#define ALIAS_PROGRESS  "p"
+
+static const char * bufsize_usage[] = { "size of file-buffer ( default=1MB )", NULL };
+#define OPTION_BUFSIZE  "bufsize"
+#define ALIAS_BUFSIZE   "b"
+
+static const char * curcache_usage[] = { "size of cursor-cache ( default=10MB )", NULL };
+#define OPTION_CURCACHE "curcache"
+#define ALIAS_CURCACHE  "c"
+
+static const char * mem_usage[] = { "memory limit for sorting ( default=100MB )", NULL };
+#define OPTION_MEM      "mem"
+#define ALIAS_MEM       "m"
+
+static const char * temp_usage[] = { "where to put temp. files ( default=curr. dir )", NULL };
+#define OPTION_TEMP     "temp"
+#define ALIAS_TEMP      "t"
+
+static const char * threads_usage[] = { "how many thread ( default=1 )", NULL };
+#define OPTION_THREADS  "threads"
+#define ALIAS_THREADS   "e"
+
+static const char * index_usage[] = { "name of index-file", NULL };
+#define OPTION_INDEX    "index"
+#define ALIAS_INDEX     "i"
+
+static const char * detail_usage[] = { "print details", NULL };
+#define OPTION_DETAILS  "details"
+#define ALIAS_DETAILS    "x"
+
+OptDef ToolOptions[] =
+{
+    { OPTION_RANGE,     ALIAS_RANGE,     NULL, range_usage,      1, true,   false },
+    { OPTION_LOOKUP,    ALIAS_LOOKUP,    NULL, lookup_usage,     1, true,   false },
+    { OPTION_FORMAT,    ALIAS_FORMAT,    NULL, format_usage,     1, true,   false },
+    { OPTION_OUTPUT,    ALIAS_OUTPUT,    NULL, output_usage,     1, true,   false },
+    { OPTION_BUFSIZE,   ALIAS_BUFSIZE,   NULL, bufsize_usage,    1, true,   false },
+    { OPTION_CURCACHE,  ALIAS_CURCACHE,  NULL, curcache_usage,   1, true,   false },
+    { OPTION_MEM,       ALIAS_MEM,       NULL, mem_usage,        1, true,   false },
+    { OPTION_TEMP,      ALIAS_TEMP,      NULL, temp_usage,       1, true,   false },
+    { OPTION_THREADS,   ALIAS_THREADS,   NULL, threads_usage,    1, true,   false },
+    { OPTION_INDEX,     ALIAS_INDEX,     NULL, index_usage,      1, true,   false },
+    { OPTION_PROGRESS,  ALIAS_PROGRESS,  NULL, progress_usage,   1, false,  false },
+    { OPTION_DETAILS,   ALIAS_DETAILS,   NULL, detail_usage,     1, false,  false }
+};
+
+const char UsageDefaultName[] = "fastdump";
+
+rc_t CC UsageSummary( const char * progname )
+{
+    return KOutMsg( "\n"
+                     "Usage:\n"
+                     "  %s <path> [options]\n"
+                     "\n", progname );
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    rc_t rc;
+    uint32_t idx, count = ( sizeof ToolOptions ) / ( sizeof ToolOptions[ 0 ] );
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+
+    if ( args == NULL )
+        rc = RC( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+    for ( idx = 1; idx < count; ++idx ) /* start with 1, do not advertize row-range-option*/
+        HelpOptionLine( ToolOptions[ idx ].aliases, ToolOptions[ idx ].name, NULL, ToolOptions[ idx ].help );
+    
+    HelpOptionsStandard();
+    HelpVersion( fullpath, KAppVersion() );
+    return rc;
+}
+
+/* -------------------------------------------------------------------------------------------- */
+
+typedef struct fd_ctx
+{
+    cmn_params cmn;
+    const char * lookup_filename;
+    const char * output_filename;
+    const char * index_filename;
+    const char * temp_path;
+    size_t buf_size, mem_limit;
+    uint64_t num_threads;
+} fd_ctx;
+
+
+static void init_sorter_params( const fd_ctx * fd_ctx, sorter_params * sp )
+{
+    sp->dir = fd_ctx->cmn.dir;
+    sp->acc = fd_ctx->cmn.acc;
+    sp->output_filename = fd_ctx->output_filename;
+    sp->index_filename = fd_ctx->index_filename;
+    sp->temp_path = fd_ctx->temp_path;
+    sp->src = NULL; /* sorter takes ownership! */
+    sp->prefix = 0;
+    sp->mem_limit = fd_ctx->mem_limit;
+    sp->buf_size = fd_ctx->buf_size;
+    sp->cursor_cache = fd_ctx->cmn.cursor_cache;
+    sp->sort_progress = NULL;
+    sp->num_threads = 0;
+    sp->show_progress = fd_ctx->cmn.show_progress;
+}
+
+/* --------------------------------------------------------------------------------------------
+    produce the lookup-table by iterating over the PRIMARY_ALIGNMENT - table:
+   -------------------------------------------------------------------------------------------- 
+    reading SEQ_SPOT_ID, SEQ_READ_ID and RAW_READ
+    SEQ_SPOT_ID and SEQ_READ_ID is merged into a 64-bit-key
+    RAW_READ is read as 4na-unpacked ( Schema does not provide 4na-packed for this column )
+    these key-pairs are temporarely stored in a KVector until a limit is reached
+    after that limit is reached they are writen sorted into the file-system as sub-files
+    this repeats until the requested row-range is exhausted ( row_range ... NULL -> all rows )
+    These sub-files are than merge-sorted into the final output-file.
+    This output-file is a binary data-file:
+    content: [KEY][RAW_READ]
+    KEY... 64-bit value as SEQ_SPOT_ID shifted left by 1 bit, zero-bit contains SEQ_READ_ID
+    RAW_READ... 16-bit binary-chunk-lenght, followed by n bytes of packed 4na
+-------------------------------------------------------------------------------------------- */
+static rc_t single_threaded_make_lookup( fd_ctx * fd_ctx )
+{
+    sorter_params sp;
+    struct raw_read_iter * iter;
+    
+    init_sorter_params( fd_ctx, &sp );
+    rc_t rc = make_raw_read_iter( &fd_ctx->cmn, &iter );
+    if ( rc == 0 )
+    {
+        sp.src = iter; /* sorter takes ownership! */
+        rc = run_sorter( &sp ); /* sorter.c */
+    }
+    return rc;
+}
+
+
+static rc_t multi_threaded_make_lookup( fd_ctx * fd_ctx )
+{
+    sorter_params sp;
+
+    init_sorter_params( fd_ctx, &sp );
+    sp.num_threads = fd_ctx->num_threads;
+    return run_sorter_pool( &sp ); /* sorter.c */
+}
+
+
+/* --------------------------------------------------------------------------------------------
+    produce special-output ( SPOT_ID,READ,SPOT_GROUP ) by iterating over the SEQUENCE - table:
+    produce fastq-output by iterating over the SEQUENCE - table:
+   -------------------------------------------------------------------------------------------- 
+   
+-------------------------------------------------------------------------------------------- */
+
+static rc_t perform_join( fd_ctx * fd_ctx, format_t fmt )
+{
+    rc_t rc = 0;
+    if ( !file_exists( fd_ctx->cmn.dir, "%s", fd_ctx->lookup_filename ) )
+    {
+        const char * temp = fd_ctx->output_filename;
+        
+        if ( fd_ctx->cmn.show_progress )
+            KOutMsg( "lookup :" );
+        
+        fd_ctx->output_filename = fd_ctx->lookup_filename;
+        if ( fd_ctx->num_threads > 1 )
+            rc = multi_threaded_make_lookup( fd_ctx );
+        else
+            rc = single_threaded_make_lookup( fd_ctx );
+
+        fd_ctx->output_filename = temp;
+    }
+    
+    if ( rc == 0 )
+    {
+        join_params jp;
+        
+        jp.dir              = fd_ctx->cmn.dir;
+        jp.accession        = fd_ctx->cmn.acc;
+        jp.lookup_filename  = fd_ctx->lookup_filename;
+        jp.index_filename   = fd_ctx->index_filename;
+        jp.output_filename  = fd_ctx->output_filename;
+        jp.temp_path        = fd_ctx->temp_path;
+        jp.join_progress    = NULL;
+        jp.buf_size         = fd_ctx->buf_size;
+        jp.cur_cache        = fd_ctx->cmn.cursor_cache;
+        jp.show_progress    = fd_ctx->cmn.show_progress;
+        jp.num_threads      = fd_ctx->num_threads;
+        jp.first            = 0;
+        jp.count            = 0;
+        jp.fmt              = fmt;
+        
+        rc = execute_join( &jp ); /* join.c */
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------- */
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc;
+    Args * args;
+    uint32_t num_options = sizeof ToolOptions / sizeof ToolOptions [ 0 ];
+
+    rc = ArgsMakeAndHandle ( &args, argc, argv, 1, ToolOptions, num_options );
+    if ( rc != 0 )
+        ErrMsg( "ArgsMakeAndHandle() -> %R", rc );
+    if ( rc == 0 )
+    {
+        fd_ctx fd_ctx;
+        rc = ArgsParamValue( args, 0, (const void **)&fd_ctx.cmn.acc );
+        if ( rc != 0 )
+            ErrMsg( "ArgsParamValue() -> %R", rc );
+        else
+        {
+            const char * format = get_str_option( args, OPTION_FORMAT, NULL );
+            format_t fmt = get_format_t( format );
+            char dflt_lookup[ 4096 ];
+            char dflt_index[ 4096 ];
+            char dflt_output[ 4096 ];
+            
+            dflt_lookup[ 0 ] = 0;
+            dflt_index[ 0 ] = 0;
+            dflt_output[ 0 ] = 0;
+            
+            fd_ctx.cmn.row_range = get_str_option( args, OPTION_RANGE, NULL );
+            fd_ctx.cmn.cursor_cache = get_size_t_option( args, OPTION_CURCACHE, 5 * 1024 * 1024 );            
+            fd_ctx.cmn.show_progress = get_bool_option( args, OPTION_PROGRESS );
+			fd_ctx.cmn.show_details = get_bool_option( args, OPTION_DETAILS );
+            fd_ctx.cmn.count = 0;
+
+            fd_ctx.temp_path = get_str_option( args, OPTION_TEMP, NULL );
+            fd_ctx.output_filename = get_str_option( args, OPTION_OUTPUT, NULL );
+            fd_ctx.lookup_filename = get_str_option( args, OPTION_LOOKUP, NULL );            
+            fd_ctx.index_filename = get_str_option( args, OPTION_INDEX, NULL );
+            fd_ctx.buf_size = get_size_t_option( args, OPTION_BUFSIZE, 1024 * 1024 );
+            fd_ctx.mem_limit = get_size_t_option( args, OPTION_MEM, 1024L * 1024 * 100 );
+            fd_ctx.num_threads = get_uint64_t_option( args, OPTION_THREADS, 1 );
+
+			if ( fd_ctx.cmn.show_details )
+			{
+				KOutMsg( "cursor-cache : %ld\n", fd_ctx.cmn.cursor_cache );
+				KOutMsg( "buf-size     : %ld\n", fd_ctx.buf_size );
+				KOutMsg( "mem-limit    : %ld\n", fd_ctx.mem_limit );
+				KOutMsg( "threadsit    : %d\n", fd_ctx.num_threads );
+				KOutMsg( "scratch-path : '%s'\n", fd_ctx.temp_path );
+			}
+			
+            if ( fd_ctx.lookup_filename == NULL )
+            {
+                rc = make_prefixed( dflt_lookup, sizeof dflt_lookup, fd_ctx.temp_path,
+                                    fd_ctx.cmn.acc, ".lookup" );
+                if ( rc == 0 )
+                    fd_ctx.lookup_filename = dflt_lookup;
+            }
+
+            if ( fd_ctx.index_filename == NULL )
+            {
+                rc = make_prefixed( dflt_index, sizeof dflt_index, fd_ctx.temp_path,
+                                    fd_ctx.cmn.acc, ".lookup.idx" );
+                if ( rc == 0 )
+                    fd_ctx.index_filename = dflt_index;
+            }
+
+            if ( fd_ctx.output_filename == NULL )
+            {
+                rc = make_prefixed( dflt_output, sizeof dflt_output, NULL,
+                                    fd_ctx.cmn.acc, ".txt" );
+                if ( rc == 0 )
+                    fd_ctx.output_filename = dflt_output;
+            }
+
+            rc = KDirectoryNativeDir( &fd_ctx.cmn.dir );
+            if ( rc != 0 )
+                ErrMsg( "KDirectoryNativeDir() -> %R", rc );
+            else
+            {
+                rc = perform_join( &fd_ctx, fmt );
+
+                if ( dflt_lookup[ 0 ] != 0 )
+                    KDirectoryRemove( fd_ctx.cmn.dir, true, "%s", dflt_lookup );
+
+                if ( dflt_index[ 0 ] != 0 )
+                    KDirectoryRemove( fd_ctx.cmn.dir, true, "%s", dflt_index );
+                
+                KDirectoryRelease( fd_ctx.cmn.dir );
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/fastq_iter.c b/tools/fastdump/fastq_iter.c
new file mode 100644
index 0000000..1f1afc3
--- /dev/null
+++ b/tools/fastdump/fastq_iter.c
@@ -0,0 +1,97 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "fastq_iter.h"
+#include "helper.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+typedef struct fastq_iter
+{
+    struct cmn_iter * cmn;
+    uint32_t prim_alig_id, cmp_read_id, quality_id;
+} fastq_iter;
+
+
+void destroy_fastq_iter( struct fastq_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        destroy_cmn_iter( iter->cmn );
+        free( ( void * ) iter );
+    }
+}
+
+rc_t make_fastq_iter( cmn_params * params, struct fastq_iter ** iter )
+{
+    rc_t rc = 0;
+    fastq_iter * i = calloc( 1, sizeof * i );
+    if ( i == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "make_fastq_iter.calloc( %d ) -> %R", ( sizeof * i ), rc );
+    }
+    else
+    {
+        rc = make_cmn_iter( params, "SEQUENCE", &i->cmn );    
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "PRIMARY_ALIGNMENT_ID", &i->prim_alig_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "CMP_READ", &i->cmp_read_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "(INSDC:quality:text:phred_33)QUALITY", &i->quality_id );
+        if ( rc == 0 )
+            rc = cmn_iter_range( i->cmn, i->prim_alig_id );
+            
+        if ( rc != 0 )
+            destroy_fastq_iter( i );
+        else
+            *iter = i;
+    }
+    return rc;
+}
+
+bool get_from_fastq_iter( struct fastq_iter * iter, fastq_rec * rec, rc_t * rc )
+{
+    bool res = cmn_iter_next( iter->cmn, rc );
+    if ( res )
+    {
+        rec->row_id = cmn_iter_row_id( iter->cmn );
+        *rc = cmn_read_uint64_array( iter->cmn, iter->prim_alig_id, rec->prim_alig_id, 2, &rec->num_reads );
+        if ( *rc == 0 )
+            *rc = cmn_read_String( iter->cmn, iter->cmp_read_id, &rec->cmp_read );
+        if ( *rc == 0 )
+            *rc = cmn_read_String( iter->cmn, iter->quality_id, &rec->quality );
+    }
+    return res;
+
+}
+
+uint64_t get_row_count_of_fastq_iter( struct fastq_iter * iter )
+{
+    return cmn_iter_row_count( iter->cmn );
+}
diff --git a/tools/fastdump/fastq_iter.h b/tools/fastdump/fastq_iter.h
new file mode 100644
index 0000000..abc32a5
--- /dev/null
+++ b/tools/fastdump/fastq_iter.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_fastq_iter_
+#define _h_fastq_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_cmn_iter_
+#include "cmn_iter.h"
+#endif
+
+struct fastq_iter;
+
+typedef struct fastq_rec
+{
+    int64_t row_id;
+    uint64_t prim_alig_id[ 2 ];
+    uint32_t num_reads;
+    String cmp_read;
+    String quality;
+} fastq_rec;
+
+void destroy_fastq_iter( struct fastq_iter * iter );
+
+rc_t make_fastq_iter( cmn_params * params, struct fastq_iter ** iter );
+
+bool get_from_fastq_iter( struct fastq_iter * iter, fastq_rec * rec, rc_t * rc );
+
+uint64_t get_row_count_of_fastq_iter( struct fastq_iter * iter );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/file_printer.c b/tools/fastdump/file_printer.c
new file mode 100644
index 0000000..1e79216
--- /dev/null
+++ b/tools/fastdump/file_printer.c
@@ -0,0 +1,130 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "file_printer.h"
+#include "helper.h"
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+
+typedef struct file_printer
+{
+    struct KFile * f;
+    SBuffer print_buffer;
+    uint64_t file_pos;
+} file_printer;
+
+
+void destroy_file_printer( struct file_printer * printer )
+{
+    if ( printer != NULL )
+    {
+        if ( printer->f != NULL ) KFileRelease( printer->f );
+        release_SBuffer( &printer->print_buffer );
+        free( ( void * ) printer );
+    }
+}
+
+
+rc_t make_file_printer( KDirectory *dir, struct file_printer ** printer,
+        size_t file_buffer_size, size_t print_buffer_size, const char * fmt, ... )
+{
+    rc_t rc;
+    struct KFile * f;
+    
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = KDirectoryVCreateFile( dir, &f, false, 0664, kcmInit, fmt, args );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryVCreateFile() -> %R", rc );
+    else
+    {
+        struct KFile * temp_file = f;
+        if ( file_buffer_size > 0 )
+        {
+            rc = KBufFileMakeWrite( &temp_file, f, false, file_buffer_size );
+            KFileRelease( f );
+            if ( rc != 0 )
+                ErrMsg( "KBufFileMakeWrite() -> %R", rc );
+        }
+        if ( rc == 0 )
+        {
+            file_printer * p = calloc( 1, sizeof * p );
+            if ( p == NULL )
+            {
+                KFileRelease( temp_file );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", ( sizeof * p ), rc );
+            }
+            else
+            {
+                rc = make_SBuffer( &p->print_buffer, print_buffer_size );
+                if ( rc != 0 )
+                    KFileRelease( temp_file );
+                else
+                {
+                    p->f = temp_file;
+                    *printer = p;
+                }
+            }
+        }
+    }
+
+    va_end ( args );
+    return rc;
+
+}
+
+
+rc_t file_print( struct file_printer * printer, const char * fmt, ... )
+{
+    rc_t rc;
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = print_to_SBufferV( &printer->print_buffer, fmt, args );
+    if ( rc == 0 )
+    {
+        size_t num_writ, to_write;
+        to_write = printer->print_buffer.S.size;
+        const char * src = printer->print_buffer.S.addr;
+        rc = KFileWriteAll( printer->f, printer->file_pos, src, to_write, &num_writ );
+        if ( rc != 0 )
+            ErrMsg( "KFileWriteAll( at %lu ) -> %R", printer->file_pos, rc );
+        else if ( num_writ != to_write )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcWriting, rcFormat, rcInvalid );
+            ErrMsg( "KFileWriteAll( at %lu ) ( %d vs %d ) -> %R", printer->file_pos, to_write, num_writ, rc );
+        }
+        else
+            printer->file_pos += num_writ;
+    }
+    
+    va_end ( args );
+    return rc;
+}
diff --git a/tools/fastdump/file_printer.h b/tools/fastdump/file_printer.h
new file mode 100644
index 0000000..83b8fd3
--- /dev/null
+++ b/tools/fastdump/file_printer.h
@@ -0,0 +1,56 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_file_printer_
+#define _h_file_printer_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+struct file_printer;
+
+void destroy_file_printer( struct file_printer * printer );
+
+rc_t make_file_printer( KDirectory *dir, struct file_printer ** printer,
+        size_t file_buffer_size, size_t print_buffer_size, const char * fmt, ... );
+
+rc_t file_print( struct file_printer * printer, const char * fmt, ... );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/helper.c b/tools/fastdump/helper.c
new file mode 100644
index 0000000..a5fd6ac
--- /dev/null
+++ b/tools/fastdump/helper.c
@@ -0,0 +1,673 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "helper.h"
+#include <klib/log.h>
+#include <klib/printf.h>
+#include <klib/progressbar.h>
+#include <klib/time.h>
+#include <klib/out.h>
+#include <kfs/defs.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kproc/thread.h>
+
+rc_t ErrMsg( const char * fmt, ... )
+{
+    rc_t rc;
+    char buffer[ 4096 ];
+    size_t num_writ;
+
+    va_list list;
+    va_start( list, fmt );
+    rc = string_vprintf( buffer, sizeof buffer, &num_writ, fmt, list );
+    if ( rc == 0 )
+        /* rc = KOutMsg( "%s\n", buffer ); */
+        /* rc = pLogErr( klogErr, 1, "$(E)", "E=%s", buffer ); */
+        rc = pLogMsg( klogErr, "$(E)", "E=%s", buffer );
+    va_end( list );
+    return rc;
+} 
+
+rc_t CC ArgsOptionCount( const struct Args * self, const char * option_name, uint32_t * count );
+rc_t CC ArgsOptionValue( const struct Args * self, const char * option_name, uint32_t iteration, const void ** value );
+
+const char * get_str_option( const struct Args *args, const char *name, const char * dflt )
+{
+    const char* res = dflt;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        rc = ArgsOptionValue( args, name, 0, (const void**)&res );
+        if ( rc != 0 ) res = dflt;
+    }
+    return res;
+}
+
+bool get_bool_option( const struct Args *args, const char *name )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    return ( rc == 0 && count > 0 );
+}
+
+
+uint64_t get_uint64_t_option( const struct Args * args, const char *name, uint64_t dflt )
+{
+    uint64_t res = dflt;
+    const char * s = get_str_option( args, name, NULL );
+    if ( s != NULL )
+    {
+        size_t l = string_size( s );
+        if ( l > 0 )
+        {
+            char * endptr;
+            res = strtol( s, &endptr, 0 );
+        }
+    }
+    return res;
+
+}
+
+size_t get_size_t_option( const struct Args * args, const char *name, size_t dflt )
+{
+    size_t res = dflt;
+    const char * s = get_str_option( args, name, NULL );
+    if ( s != NULL )
+    {
+        size_t l = string_size( s );
+        if ( l > 0 )
+        {
+            size_t multipl = 1;
+            switch( s[ l - 1 ] )
+            {
+                case 'k' :
+                case 'K' : multipl = 1024; break;
+                case 'm' :
+                case 'M' : multipl = 1024 * 1024; break;
+                case 'g' :
+                case 'G' : multipl = 1024 * 1024 * 1024; break;
+            }
+            
+            if ( multipl > 1 )
+            {
+                char * src = string_dup( s, l - 1 );
+                if ( src != NULL )
+                {
+                    char * endptr;
+                    res = strtol( src, &endptr, 0 ) * multipl;
+                    free( src );
+                }
+            }
+            else
+            {
+                char * endptr;
+                res = strtol( s, &endptr, 0 );
+            }
+        }
+    }
+    return res;
+}
+
+
+rc_t make_SBuffer( SBuffer * buffer, size_t len )
+{
+    rc_t rc = 0;
+    String * S = &buffer->S;
+    S->addr = malloc( len );
+    if ( S->addr == NULL )
+    {
+        S->size = S->len = 0;
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "malloc( %d ) -> %R", ( len ), rc );
+    }
+    else
+    {
+        S->size = 0;
+        S->len = 0;
+        buffer->buffer_size = len;
+    }
+    return rc;
+}
+
+
+void release_SBuffer( SBuffer * buffer )
+{
+    if ( buffer != NULL )
+    {
+        String * S = &buffer->S;
+        if ( S->addr != NULL )
+            free( ( void * ) S->addr );
+    }
+}
+
+
+rc_t print_to_SBufferV( SBuffer * buffer, const char * fmt, va_list args )
+{
+    char * dst = ( char * )buffer->S.addr;
+    size_t num_writ = 0;
+    
+    rc_t rc = string_vprintf( dst, buffer->buffer_size, &num_writ, fmt, args );
+    if ( rc != 0 )
+        ErrMsg( "string_vprintf() -> %R", rc );
+    buffer->S.len = buffer->S.size = num_writ;
+    
+    return rc;
+}
+
+
+rc_t print_to_SBuffer( SBuffer * buffer, const char * fmt, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start( args, fmt );
+    rc = print_to_SBufferV( buffer, fmt, args );
+    va_end( args );
+
+    return rc;
+}
+
+
+rc_t add_column( const VCursor * cursor, const char * name, uint32_t * id )
+{
+    rc_t rc = VCursorAddColumn( cursor, id, name );
+    if ( rc != 0 )
+        ErrMsg( "VCursorAddColumn( '%s' ) -> %R", name, rc );
+    return rc;
+}
+
+
+rc_t make_row_iter( struct num_gen * ranges, int64_t first, uint64_t count, 
+                    const struct num_gen_iter ** iter )
+{
+    rc_t rc;
+    if ( num_gen_empty( ranges ) )
+    {
+        rc = num_gen_add( ranges, first, count );
+        if ( rc != 0 )
+            ErrMsg( "num_gen_add( %li, %ld ) -> %R", first, count, rc );
+    }
+    else
+    {
+        rc = num_gen_trim( ranges, first, count );
+        if ( rc != 0 )
+            ErrMsg( "num_gen_trim( %li, %ld ) -> %R", first, count, rc );
+    }
+    rc = num_gen_iterator_make( ranges, iter );
+    if ( rc != 0 )
+        ErrMsg( "num_gen_iterator_make() -> %R", rc );
+    return rc;
+}
+
+
+rc_t split_string( String * in, String * p0, String * p1, uint32_t ch )
+{
+    rc_t rc = 0;
+    char * ch_ptr = string_chr( in->addr, in->size, ch );
+    if ( ch_ptr == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcTransfer, rcInvalid );
+    else
+    {
+        p0->addr = in->addr;
+        p0->len  = p0->size = ( ch_ptr - p0->addr );
+        p1->addr = ch_ptr + 1;
+        p1->len  = p1->size = in->len - ( p0->len + 1 );
+    }
+    return rc;
+}
+
+
+format_t get_format_t( const char * format )
+{
+    format_t res = ft_special;
+    if ( format != NULL && format[ 0 ] != 0 )
+    {
+        String Format, FastqFormat;
+        StringInitCString( &Format, format );
+        StringInitCString( &FastqFormat, "fastq" );
+        if ( 0 == StringCaseCompare ( &Format, &FastqFormat ) )
+            res = ft_fastq;
+    }
+    return res;
+}
+
+
+uint64_t make_key( int64_t seq_spot_id, uint32_t seq_read_id )
+{
+    uint64_t key = seq_spot_id;
+    key <<= 1;
+    key |= ( seq_read_id == 2 ) ? 1 : 0;
+    return key;
+}
+
+
+void pack_4na( const String * unpacked, SBuffer * packed )
+{
+    uint32_t i;
+    char * src = ( char * )unpacked->addr;
+    char * dst = ( char * )packed->S.addr;
+    uint16_t dna_len = ( unpacked->len & 0xFFFF );
+    uint32_t len = 0;
+    dst[ len++ ] = ( dna_len >> 8 );
+    dst[ len++ ] = ( dna_len & 0xFF );
+    for ( i = 0; i < unpacked->len; ++i )
+    {
+        if ( len < packed->buffer_size )
+        {
+            char base = ( src[ i ] & 0x0F );
+            if ( 0 == ( i & 0x01 ) )
+                dst[ len ] = ( base << 4 );
+            else
+                dst[ len++ ] |= base;
+        }
+    }
+    if ( unpacked->len & 0x01 )
+        len++;
+    packed->S.size = packed->S.len = len;
+}
+
+
+static char x4na_to_ASCII[ 16 ] =
+{
+    /* 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+       'N', 'A', 'C', 'N', 'G', 'N', 'N', 'N', 'T', 'N', 'N', 'N', 'N', 'N', 'N', 'N'
+};
+
+
+void unpack_4na( const String * packed, SBuffer * unpacked )
+{
+    uint32_t i;
+    char * src = ( char * )packed->addr;
+    char * dst = ( char * )unpacked->S.addr;
+    uint32_t dst_idx = 0;
+    uint16_t dna_len = src[ 0 ];
+    dna_len <<= 8;
+    dna_len |= src[ 1 ];
+    for ( i = 2; i < packed->len; ++i )
+    {
+        uint8_t packed_byte = src[ i ];
+        if ( dst_idx < unpacked->buffer_size )
+            dst[ dst_idx++ ] = x4na_to_ASCII[ ( packed_byte >> 4 ) & 0x0F ];
+        if ( dst_idx < unpacked->buffer_size )
+            dst[ dst_idx++ ] = x4na_to_ASCII[ packed_byte & 0x0F ];
+    }
+    unpacked->S.len = unpacked->S.size = dna_len;
+    dst[ dna_len + 2 ] = 0;
+}
+
+
+uint64_t calc_percent( uint64_t max, uint64_t value, uint16_t digits )
+{
+    uint64_t res = value;
+    switch ( digits )
+    {
+        case 1 : res *= 1000; break;
+        case 2 : res *= 10000; break;
+        default : res *= 100; break;
+    }
+    if ( max > 0 ) res /= max;
+    return res;
+}
+
+
+bool file_exists( const KDirectory * dir, const char * fmt, ... )
+{
+    uint32_t pt;
+    va_list list;
+    
+    va_start( list, fmt );
+    pt = KDirectoryVPathType( dir, fmt, list );
+    va_end( list );
+
+    return ( pt == kptFile ) ;
+}
+
+
+void join_and_release_threads( Vector * threads )
+{
+    uint32_t i, n = VectorLength( threads );
+    for ( i = VectorStart( threads ); i < n; ++i )
+    {
+        KThread * thread = VectorGet( threads, i );
+        if ( thread != NULL )
+        {
+            KThreadWait( thread, NULL );
+            KThreadRelease( thread );
+        }
+    }
+}
+
+
+typedef struct cf_progress
+{
+    struct progressbar * progressbar;
+    uint64_t total_size;
+    uint64_t current_size;
+    uint32_t current_percent;
+} cf_progress;
+
+rc_t CC Quitting();
+
+static rc_t copy_file( KFile * dst, const KFile * src, uint64_t * dst_pos,
+                       size_t buf_size, cf_progress * cfp )
+{
+    rc_t rc = 0;
+    char * buffer = malloc( buf_size );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcPacking, rcMemory, rcExhausted );
+        ErrMsg( "copy_file.malloc( %d ) -> %R", buf_size, rc );
+    }
+    else
+    {
+        uint64_t src_pos = 0;
+        size_t num_trans = 1;
+        while ( rc == 0 && num_trans > 0 )
+        {
+            rc = Quitting();
+            if ( rc == 0 )
+            {
+                size_t num_read;
+                rc = KFileRead( src, src_pos, buffer, buf_size, &num_read );
+                if ( rc != 0 )
+                    ErrMsg( "copy_file.KFileRead( at %lu ) -> %R", src_pos, rc );
+                else if ( num_read > 0 )
+                {
+                    rc = KFileWrite( dst, *dst_pos, buffer, num_read, &num_trans );
+                    if ( rc != 0 )
+                        ErrMsg( "copy_file.KFileWrite( at %lu ) -> %R", *dst_pos, rc );
+                    else
+                    {
+                        *dst_pos += num_trans;
+                        src_pos += num_trans;
+                        if ( cfp != NULL && cfp->progressbar != NULL )
+                        {
+                            uint32_t percent;
+                            
+                            cfp->current_size += num_trans;
+                            percent = calc_percent( cfp->total_size, cfp->current_size, 2 );
+                            if ( percent > cfp->current_percent )
+                            {
+                                uint32_t i;
+                                for ( i = cfp->current_percent + 1; i <= percent; ++i )
+                                    update_progressbar( cfp->progressbar, i );
+                                cfp->current_percent = percent;
+                            }
+                        }
+                    }
+                }
+                else
+                    num_trans = 0;
+            }
+        }
+        free( buffer );
+    }
+    return rc;
+}
+
+
+static rc_t total_filesize( const KDirectory * dir, const VNamelist * files, uint64_t *total )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( files, &count );
+    *total = 0;
+    if ( rc != 0 )
+        ErrMsg( "VNameListCount() -> %R", rc );
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++idx )
+        {
+            const char * filename;
+            rc = VNameListGet( files, idx, &filename );
+            if ( rc != 0 )
+                ErrMsg( "VNameListGet( #%d) -> %R", idx, rc );
+            else
+            {
+                uint64_t size;
+                rc_t rc1 = KDirectoryFileSize( dir, &size, "%s", filename );
+                if ( rc1 == 0 )
+                    *total += size;
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t concat_files( KDirectory * dir, const VNamelist * files, size_t buf_size,
+                   const char * output, bool show_progress )
+{
+    struct KFile * dst;
+    rc_t rc = KDirectoryCreateFile( dir, &dst, false, 0664, kcmInit, "%s", output );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryCreateFile( '%s' ) -> %R", output, rc );
+    else
+    {
+        struct KFile * temp_dst;
+        rc = KBufFileMakeWrite( &temp_dst, dst, false, buf_size );
+        KFileRelease( dst );
+        if ( rc != 0 )
+            ErrMsg( "KBufFileMakeWrite() -> %R", rc );
+        else
+        {
+            cf_progress cfp;
+            uint32_t count;
+
+            dst = temp_dst;
+            if ( show_progress )
+            {
+                cfp.current_size = 0;
+                cfp.current_percent = 0;
+                rc = make_progressbar( &cfp.progressbar, 2 );
+                if ( rc == 0 )
+                    rc = total_filesize( dir, files, &cfp.total_size );
+            }
+            else
+                cfp.progressbar = NULL;
+            if ( rc == 0 )
+            {
+                rc = VNameListCount( files, &count );
+                if ( rc != 0 )
+                    ErrMsg( "VNameListCount() -> %R", rc );
+                else
+                {
+                    uint32_t idx;
+                    uint64_t dst_pos = 0;
+                    for ( idx = 0; rc == 0 && idx < count; ++idx )
+                    {
+                        const char * filename;
+                        rc = VNameListGet( files, idx, &filename );
+                        if ( rc != 0 )
+                            ErrMsg( "VNameListGet( #%d) -> %R", idx, rc );
+                        else
+                        {
+                            const struct KFile * src;
+                            rc_t rc1 = KDirectoryOpenFileRead( dir, &src, "%s", filename );
+                            if ( rc1 == 0 )
+                            {
+                                const struct KFile * temp_src;
+                                rc = KBufFileMakeRead( &temp_src, src, buf_size );
+                                KFileRelease( src );
+                                if ( rc != 0 )
+                                    ErrMsg( "KBufFileMakeRead() -> %R", rc );
+                                else
+                                {
+                                    src = temp_src;
+                                    rc = copy_file( dst, src, &dst_pos, buf_size, &cfp );
+                                }
+                                KFileRelease( src );
+                            }
+                        }
+                    }
+                }
+                
+                if ( cfp.progressbar != NULL )
+                {
+                    destroy_progressbar( cfp.progressbar );
+                    KOutMsg( "\n" );
+                }
+            }
+        }
+        KFileRelease( dst );
+    }
+    return rc;
+}
+
+rc_t delete_files( KDirectory * dir, const VNamelist * files )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( files, &count );
+    if ( rc != 0 )
+        ErrMsg( "VNameListCount() -> %R", rc );
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++idx )
+        {
+            const char * filename;
+            rc = VNameListGet( files, idx, &filename );
+            if ( rc != 0 )
+                ErrMsg( "VNameListGet( #%d) -> %R", idx, rc );
+            else
+            {
+                rc = KDirectoryRemove( dir, true, "%s", filename );
+                if ( rc != 0 )
+                    ErrMsg( "KDirectoryRemove( '%s' ) -> %R", filename, rc );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t CC progress_thread_func( const KThread *self, void *data )
+{
+    multi_progress * sp = data;
+    struct progressbar * progressbar;
+    uint32_t curr = 0, percent = 0;
+    rc_t rc = make_progressbar( &progressbar, 2 );
+    
+    update_progressbar( progressbar, curr );
+    while ( atomic_read( &sp->progress_done ) == 0 )
+    {
+        percent = calc_percent( sp->row_count, atomic_read( &sp->progress_rows ), 2 );
+        if ( percent > curr )
+        {
+            uint32_t i;
+            for ( i = curr + 1; i <= percent; ++i )
+                update_progressbar( progressbar, i );
+            curr = percent;
+        }
+        KSleepMs( 100 );
+    }
+    
+    percent = calc_percent( sp->row_count, atomic_read( &sp->progress_rows ), 2 );
+    if ( percent > curr )
+    {
+        uint32_t i;
+        for ( i = curr + 1; i <= percent; ++i )
+            update_progressbar( progressbar, i );
+        curr = percent;
+    }
+
+    destroy_progressbar( progressbar );
+    KOutMsg( "\n" );
+    return rc;
+}
+
+
+void init_progress_data( multi_progress * progress_data, uint64_t row_count )
+{
+    atomic_set( &progress_data->progress_done, 0 );
+    atomic_set( &progress_data->progress_rows, 0 );
+    progress_data->row_count = row_count;
+}
+
+rc_t start_multi_progress( KThread **t, multi_progress * progress_data )
+{
+    rc_t rc = KThreadMake( t, progress_thread_func, progress_data );
+    if ( rc != 0 )
+        ErrMsg( "KThreadMake( progress_thread ) -> %R", rc );
+    return rc;
+}
+
+
+void join_multi_progress( KThread *t, multi_progress * progress_data )
+{
+    if ( t != NULL )
+    {
+        atomic_set( &progress_data->progress_done, 1 );
+        KThreadWait( t, NULL );
+        KThreadRelease( t );
+    }
+}
+
+
+rc_t make_prefixed( char * buffer, size_t bufsize, const char * prefix,
+                    const char * path, const char * postfix )
+{
+    rc_t rc;
+    size_t num_writ;
+    if ( prefix != NULL )
+    {
+        uint32_t l = string_measure( prefix, NULL );
+        if ( l == 0 )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            ErrMsg( "make_prefixed.string_measure() = 0 -> %R", rc );
+        }
+        else
+        {
+            if ( postfix == NULL )
+            {
+                if ( prefix[ l-1 ] == '/' )
+                    rc = string_printf( buffer, bufsize, &num_writ, "%s%s",  prefix, path );
+                else
+                    rc = string_printf( buffer, bufsize, &num_writ, "%s/%s", prefix, path );
+            }
+            else
+            {
+                if ( prefix[ l-1 ] == '/' )
+                    rc = string_printf( buffer, bufsize, &num_writ, "%s%s%s",  prefix, path, postfix );
+                else
+                    rc = string_printf( buffer, bufsize, &num_writ, "%s/%s%s", prefix, path, postfix );
+            }
+        }
+    }
+    else
+    {
+        if ( postfix == NULL )
+            rc = string_printf( buffer, bufsize, &num_writ, "%s", path );
+        else
+            rc = string_printf( buffer, bufsize, &num_writ, "%s%s", path, postfix );
+    }
+    
+    if ( rc != 0 )
+        ErrMsg( "make_prefixed.string_printf() -> %R", rc );
+    return rc;
+}
diff --git a/tools/fastdump/helper.h b/tools/fastdump/helper.h
new file mode 100644
index 0000000..1341812
--- /dev/null
+++ b/tools/fastdump/helper.h
@@ -0,0 +1,141 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_helper_
+#define _h_helper_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_klib_num_gen_
+#include <klib/num-gen.h>
+#endif
+
+#ifndef _h_vdb_cursor_
+#include <vdb/cursor.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_namelist_
+#include <klib/namelist.h>
+#endif
+
+/* 
+    this is in interfaces/cc/XXX/YYY/atomic.h
+    XXX ... the compiler ( cc, gcc, icc, vc++ )
+    YYY ... the architecture ( fat86, i386, noarch, ppc32, x86_64 )
+ */
+#ifndef _h_atomic_
+#include <atomic.h>
+#endif
+
+#ifndef _h_kproc_thread_
+#include <kproc/thread.h>
+#endif
+
+typedef struct SBuffer
+{
+    String S;
+    size_t buffer_size;
+} SBuffer;
+
+
+typedef enum format_t { ft_special, ft_fastq } format_t;
+
+rc_t ErrMsg( const char * fmt, ... );
+
+rc_t make_SBuffer( SBuffer * buffer, size_t len );
+void release_SBuffer( SBuffer * buffer );
+rc_t print_to_SBufferV( SBuffer * buffer, const char * fmt, va_list args );
+rc_t print_to_SBuffer( SBuffer * buffer, const char * fmt, ... );
+
+rc_t add_column( const VCursor * cursor, const char * name, uint32_t * id );
+
+rc_t make_row_iter( struct num_gen * ranges, int64_t first, uint64_t count, 
+                    const struct num_gen_iter ** iter );
+
+rc_t split_string( String * in, String * p0, String * p1, uint32_t ch );
+
+format_t get_format_t( const char * format );
+
+struct Args;
+const char * get_str_option( const struct Args *args, const char *name, const char * dflt );
+bool get_bool_option( const struct Args *args, const char *name );
+size_t get_size_t_option( const struct Args * args, const char *name, size_t dflt );
+uint64_t get_uint64_t_option( const struct Args * args, const char *name, uint64_t dflt );
+
+uint64_t make_key( int64_t seq_spot_id, uint32_t seq_read_id );
+
+void pack_4na( const String * unpacked, SBuffer * packed );
+void unpack_4na( const String * packed, SBuffer * unpacked );
+
+uint64_t calc_percent( uint64_t max, uint64_t value, uint16_t digits );
+
+bool file_exists( const KDirectory * dir, const char * fmt, ... );
+
+void join_and_release_threads( Vector * threads );
+
+rc_t concat_files( KDirectory * dir, const VNamelist * files, size_t buf_size,
+                   const char * output, bool show_progress );
+
+rc_t delete_files( KDirectory * dir, const VNamelist * files );
+
+
+typedef struct multi_progress
+{
+    atomic_t progress_done;
+    atomic_t progress_rows;
+    uint64_t row_count;
+} multi_progress;
+
+void init_progress_data( multi_progress * progress_data, uint64_t row_count );
+rc_t start_multi_progress( KThread **t, multi_progress * progress_data );
+void join_multi_progress( KThread *t, multi_progress * progress_data );
+
+rc_t make_prefixed( char * buffer, size_t bufsize, const char * prefix,
+                    const char * path, const char * postfix );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/index.c b/tools/fastdump/index.c
new file mode 100644
index 0000000..4036233
--- /dev/null
+++ b/tools/fastdump/index.c
@@ -0,0 +1,335 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "index.h"
+#include "helper.h"
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+typedef struct index_writer
+{
+    struct KFile * f;
+    uint64_t frequency, pos, last_key;
+} index_writer;
+
+
+void release_index_writer( struct index_writer * writer )
+{
+    if ( writer != NULL )
+    {
+        if ( writer->f != NULL ) KFileRelease( writer->f );
+        free( ( void * ) writer );
+    }
+}
+
+
+static rc_t write_value( index_writer * writer, uint64_t value )
+{
+    size_t num_writ;
+    rc_t rc = KFileWrite( writer->f, writer->pos, &value, sizeof value, &num_writ );
+    if ( rc != 0 )
+        ErrMsg( "write_value.KFileWriteAll( key ) -> %R", rc );
+    else if ( num_writ != sizeof value )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcFormat, rcInvalid );
+        ErrMsg( "write_value.KFileWriteAll( key ) -> %R", rc );
+    }
+    else
+        writer->pos += num_writ;
+    return rc;
+}
+
+
+static rc_t write_key_and_offset( index_writer * writer, uint64_t key, uint64_t offset )
+{
+    rc_t rc = write_value( writer, key );
+    if ( rc == 0 )
+        rc = write_value( writer, offset );
+    return rc;
+}
+
+
+rc_t write_key( struct index_writer * writer, uint64_t key, uint64_t offset )
+{
+    rc_t rc = 0;
+    if ( writer == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcParam, rcInvalid );
+        ErrMsg( "write_index_valuer() -> %R", rc );
+    }
+    else
+    {
+        if ( key > ( writer->last_key + writer->frequency ) )
+        {
+            rc = write_key_and_offset( writer, key, offset );
+            if ( rc == 0 )
+                writer->last_key = key;
+        }
+    }
+    return rc;
+}
+
+
+rc_t make_index_writer( KDirectory * dir, struct index_writer ** writer,
+                        size_t buf_size, uint64_t frequency, const char * fmt, ... )
+{
+    rc_t rc;
+    struct KFile * f;
+    
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = KDirectoryVCreateFile( dir, &f, false, 0664, kcmInit, fmt, args );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryVCreateFile() -> %R", rc );
+    else
+    {
+        struct KFile * temp_file;
+        rc = KBufFileMakeWrite( &temp_file, f, false, buf_size );
+        KFileRelease( f );
+        if ( rc != 0 )
+            ErrMsg( "KBufFileMakeWrite() -> %R", rc );
+        else
+        {
+            index_writer * w = calloc( 1, sizeof * w );
+            if ( w == NULL )
+            {
+                KFileRelease( temp_file );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", ( sizeof * w ), rc );
+            }
+            else
+            {
+                w->f = temp_file;
+                w->frequency = frequency;
+                rc = write_value( w, frequency );
+                if ( rc == 0 )
+                    rc = write_key_and_offset( w, 1, 0 );
+                    
+                if ( rc == 0 )
+                    *writer = w;
+                else
+                    release_index_writer( w );
+            }
+        }
+    }
+    va_end ( args );
+   
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------- */
+
+typedef struct index_reader
+{
+    const struct KFile * f;
+    uint64_t frequency, file_size, max_key;
+} index_reader;
+
+
+void release_index_reader( struct index_reader * reader )
+{
+    if ( reader != NULL )
+    {
+        if ( reader->f != NULL ) KFileRelease( reader->f );
+        free( ( void * ) reader );
+    }
+}
+
+
+static rc_t read_value( struct index_reader * reader, uint64_t pos, uint64_t * value )
+{
+    size_t num_read;
+    rc_t rc = KFileRead( reader->f, pos, ( void *)value, sizeof *value, &num_read );
+    if ( rc != 0 )
+        ErrMsg( "read_value.KFileRead( at %ld ) -> %R", pos, rc );
+    else if ( num_read != sizeof *value )
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcFormat, rcInvalid );
+    return rc;
+}
+
+
+rc_t make_index_reader( KDirectory * dir, struct index_reader ** reader,
+                        size_t buf_size, const char * fmt, ... )
+{
+    rc_t rc;
+    const struct KFile * f;
+    
+    va_list args;
+    va_start ( args, fmt );
+    
+    rc = KDirectoryVOpenFileRead( dir, &f, fmt, args );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryVOpenFileRead() -> %R", rc );
+    else
+    {
+        const struct KFile * temp_file;
+        rc = KBufFileMakeRead( &temp_file, f, buf_size );
+        KFileRelease( f );
+        if ( rc != 0 )
+        {
+            ErrMsg( "KBufFileMakeRead() -> %R", rc );
+        }
+        else
+        {
+            index_reader * r = calloc( 1, sizeof * r );
+            if ( r == NULL )
+            {
+                KFileRelease( temp_file );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", ( sizeof * r ), rc );
+            }
+            else
+            {
+                r->f = temp_file;
+                rc = read_value( r, 0, &r->frequency );
+                if ( rc == 0 )
+                    rc = KFileSize( temp_file, &r->file_size );
+
+                if ( rc == 0 )
+                {
+                    get_max_key( r, &r->max_key );
+                    *reader = r;
+                }
+                else
+                    release_index_reader( r );
+            }
+        }
+    }
+    va_end ( args );
+    return rc;
+}
+
+
+static uint64_t key_to_pos_guess( const struct index_reader * reader, uint64_t key )
+{
+    uint64_t chunk_id = ( key / reader->frequency );
+    return ( ( sizeof reader->frequency ) + ( chunk_id * ( 2 * ( sizeof reader->frequency ) ) ) );
+}
+
+
+static rc_t read_3( const struct index_reader * reader, uint64_t pos, uint64_t * data, size_t to_read )
+{
+    size_t num_read;
+    rc_t rc = KFileRead( reader->f, pos, ( void *)data, to_read, &num_read );
+    if ( rc != 0 )
+        ErrMsg( "read_3.KFileRead( at %ld ) -> %R", pos, rc );
+    else if ( num_read != to_read )
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcFormat, rcInvalid );
+    return rc;
+}
+
+
+rc_t get_nearest_offset( const struct index_reader * reader, uint64_t key_to_find,
+                   uint64_t * key_found, uint64_t * offset )
+{
+    rc_t rc = 0;
+    if ( reader == NULL || key_found == NULL || offset == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcParam, rcInvalid );
+        ErrMsg( "get_nearest_offset() -> %R", rc );
+    }
+    else
+    {
+        uint64_t data[ 6 ];
+        /*
+            data[ 0 ] ... key0      data[ 1 ] ... offset0
+            data[ 2 ] ... key1      data[ 3 ] ... offset1
+            data[ 4 ] ... key2      data[ 5 ] ... offset2
+        */
+        uint64_t pos = key_to_pos_guess( reader, key_to_find );
+        bool found = false;
+        while ( rc == 0 && !found && pos < reader->file_size )
+        {        
+            rc = read_3( reader, pos, data, sizeof data );
+            if ( rc == 0 )
+            {
+                if ( key_to_find >= data[ 0 ] && key_to_find < data[ 2 ] )
+                {
+                    /* key_to_find is between key0 and key1 */
+                    found = true;
+                    *key_found = data[ 0 ];
+                    *offset = data[ 1 ];
+                }
+                else if ( key_to_find >= data[ 2 ] && key_to_find < data[ 4 ] )
+                {
+                    /* key_to_find is between key1 and key2 */
+                    found = true;
+                    *key_found = data[ 2 ];
+                    *offset = data[ 3 ];
+                }
+                if ( !found )
+                {
+                    if ( key_to_find < data[ 0 ] )
+                    {
+                        /* key_to_find is smaller than our guess */
+                        if ( pos > sizeof reader->frequency )
+                            pos -= ( 2 * ( sizeof reader->frequency ) );
+                        else
+                        {
+                            found = true;
+                            *key_found = data[ 0 ];
+                            *offset = data[ 1 ];
+                        }
+                    }
+                    else if ( key_to_find > data[ 4 ] )
+                    {
+                        /* key_to_find is bigger than our guess */
+                        pos += ( 2 * ( sizeof reader->frequency ) );
+                    }
+                }
+            }
+        }
+        if ( !found )
+            rc = SILENT_RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+    }
+    return rc;
+}
+
+
+rc_t get_max_key( const struct index_reader * reader, uint64_t * max_key )
+{
+    rc_t rc = 0;
+    if ( reader == NULL || max_key == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcParam, rcInvalid );
+        ErrMsg( "get_nearest_offset() -> %R", rc );
+    }
+    else if ( reader->max_key > 0 )
+    {
+        *max_key = reader->max_key;
+    }
+    else
+    {
+        uint64_t data[ 6 ];
+        uint64_t pos = reader->file_size - ( sizeof data );
+        rc = read_3( reader, pos, data, sizeof data );
+        if ( rc == 0 )
+             *max_key = data[ 4 ];
+    }
+    return rc;
+}
\ No newline at end of file
diff --git a/tools/fastdump/index.h b/tools/fastdump/index.h
new file mode 100644
index 0000000..0a164fa
--- /dev/null
+++ b/tools/fastdump/index.h
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_index_
+#define _h_index_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+struct index_writer;
+
+void release_index_writer( struct index_writer * writer );
+rc_t make_index_writer( KDirectory * dir, struct index_writer ** writer,
+                        size_t buf_size, uint64_t frequency, const char * fmt, ... );
+rc_t write_key( struct index_writer * writer, uint64_t key, uint64_t offset );
+
+struct index_reader;
+
+void release_index_reader( struct index_reader * reader );
+rc_t make_index_reader( KDirectory * dir, struct index_reader ** reader,
+                        size_t buf_size, const char * fmt, ... );
+rc_t get_nearest_offset( const struct index_reader * reader, uint64_t key_to_find,
+                   uint64_t * key_found, uint64_t * offset );
+
+rc_t get_max_key( const struct index_reader * reader, uint64_t * max_key );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/join.c b/tools/fastdump/join.c
new file mode 100644
index 0000000..3636a47
--- /dev/null
+++ b/tools/fastdump/join.c
@@ -0,0 +1,670 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "join.h"
+#include "lookup_reader.h"
+#include "index.h"
+#include "file_printer.h"
+#include "special_iter.h"
+#include "fastq_iter.h"
+#include "helper.h"
+
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <kproc/thread.h>
+
+#include <stdio.h>
+
+typedef struct join
+{
+    struct lookup_reader * lookup;
+    struct file_printer * printer;
+    SBuffer B1, B2;
+} join;
+
+
+static void release_join_ctx( join * j )
+{
+    if ( j != NULL )
+    {
+        release_lookup_reader( j->lookup );
+        destroy_file_printer( j->printer );
+        release_SBuffer( &j->B1 );
+        release_SBuffer( &j->B2 );
+    }
+}
+
+
+static rc_t init_join( const join_params * jp, struct join *j, struct index_reader * index )
+{
+    rc_t rc;
+    
+    j->lookup = NULL;
+    j->printer = NULL;
+    j->B1.S.addr = NULL;
+    j->B2.S.addr = NULL;
+    
+    rc = make_lookup_reader( jp->dir, index, &j->lookup, jp->buf_size, "%s", jp->lookup_filename );
+    if ( rc == 0 )
+    {
+        if ( jp->output_filename != NULL )
+            rc = make_file_printer( jp->dir, &j->printer, jp->buf_size, 4096 * 4, "%s", jp->output_filename );
+        if ( rc != 0 )
+            ErrMsg( "init_join().make_file_printer() -> %R", rc );
+    }
+    else
+        ErrMsg( "init_join().make_lookup_reader() -> %R", rc );
+    if ( rc == 0 )
+    {
+        rc = make_SBuffer( &j->B1, 4096 );
+        if ( rc != 0 )
+            ErrMsg( "init_join().make_SBuffer( B1 ) -> %R", rc );
+    }
+    if ( rc == 0 )
+    {
+        rc = make_SBuffer( &j->B2, 4096 );
+        if ( rc != 0 )
+            ErrMsg( "init_join().make_SBuffer( B2 ) -> %R", rc );
+    }
+
+    /* the rc-code of seek_lookup_reader is not checked, because if the row-id to be seeked to is in
+       the range of the fully unaligned data - seek will fail, because the are no alignments = lookup-records
+       in this area !*/
+    if ( rc == 0 && jp->first > 1 )
+    {
+        uint64_t key_to_find = jp->first << 1;
+        uint64_t key_found = 0;
+        rc_t rc1 = seek_lookup_reader( j->lookup, key_to_find, &key_found, true );
+        if ( GetRCState( rc1 ) != rcTooBig && GetRCState( rc1 ) != rcNotFound )
+            rc = rc1;
+        if ( rc != 0 )
+            ErrMsg( "init_join().seek_lookup_reader( %lu ) -> %R", key_to_find, rc );
+    }
+    if ( rc != 0 )
+        release_join_ctx( j );
+    return rc;
+}
+
+
+static void copy_join_params( join_params * dst, const join_params * src )
+{
+    dst->dir                = src->dir;
+    dst->accession          = src->accession;
+    dst->lookup_filename    = src->lookup_filename;
+    dst->index_filename     = src->index_filename;
+    dst->output_filename    = src->output_filename;
+    dst->temp_path          = src->temp_path;
+    dst->join_progress      = src->join_progress;
+    dst->buf_size           = src->buf_size;
+    dst->cur_cache          = src->cur_cache;
+    dst->num_threads        = src->num_threads;
+    dst->first              = src->first;
+    dst->count              = src->count;
+    dst->show_progress      = src->show_progress;
+    dst->fmt                = src->fmt;
+}
+
+static void init_cmn_params( const join_params * jp, cmn_params * cmn )
+{
+    cmn->dir            = jp->dir;
+    cmn->acc            = jp->accession;
+    cmn->row_range      = NULL;
+    cmn->first          = jp->first;
+    cmn->count          = jp->count;
+    cmn->cursor_cache   = jp->cur_cache;
+    cmn->show_progress  = jp->show_progress;
+}
+
+
+static rc_t print_special_1_read( special_rec * rec, join * j )
+{
+    rc_t rc = 0;
+    int64_t row_id = rec->row_id;
+    
+    if ( rec->prim_alig_id[ 0 ] == 0 )
+    {
+        /* read is unaligned, print what is in row->cmp_read ( !!! no lookup !!! ) */
+        if ( j->printer != NULL )
+            rc = file_print( j->printer, "%ld\t%S\t%S\n", row_id, &rec->cmp_read, &rec->spot_group );
+        else
+            rc = KOutMsg( "%ld\t%S\t%S\n", row_id, &rec->cmp_read, &rec->spot_group );
+    }
+    else
+    {
+        /* read is aligned ( 1 lookup ) */
+        rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+        if ( rc == 0 )
+        {
+            if ( j->printer != NULL )
+                rc = file_print( j->printer, "%ld\t%S\t%S\n", row_id, &j->B1.S, &rec->spot_group );
+            else
+                rc = KOutMsg( "%ld\t%S\t%S\n", row_id, &j->B1.S, &rec->spot_group );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_special_2_reads( special_rec * rec, join * j )
+{
+    rc_t rc = 0;
+    int64_t row_id = rec->row_id;
+    
+    if ( rec->prim_alig_id[ 0 ] == 0 )
+    {
+        if ( rec->prim_alig_id[ 1 ] == 0 )
+        {
+            /* both unaligned, print what is in row->cmp_read ( !!! no lookup !!! )*/
+            if ( j->printer != NULL )
+                rc = file_print( j->printer, "%ld\t%S\t%S\n", row_id, &rec->cmp_read, &rec->spot_group );
+            else
+                rc = KOutMsg( "%ld\t%S\t%S\n", row_id, &rec->cmp_read, &rec->spot_group );
+        }
+        else
+        {
+            /* A0 is unaligned / A1 is aligned (lookup) */
+            rc = lookup_bases( j->lookup, row_id, 2, &j->B2 );
+            if ( rc == 0 )
+            {
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, "%ld\t%S%S\t%S\n", row_id, &rec->cmp_read, &j->B2.S, &rec->spot_group );
+                else
+                    rc = KOutMsg( "%ld\t%S%S\t%S\n", row_id, &rec->cmp_read, &j->B2.S, &rec->spot_group );
+            }
+        }
+    }
+    else
+    {
+        if ( rec->prim_alig_id[ 1 ] == 0 )
+        {
+            /* A0 is aligned (lookup) / A1 is unaligned */
+            rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+            if ( rc == 0 )
+            {
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, "%ld\t%S%S\t%S\n", row_id, &j->B1.S, &rec->cmp_read, &rec->spot_group );
+                else
+                    rc = KOutMsg( "%ld\t%S%S\t%S\n", row_id, &j->B1.S, &rec->cmp_read, &rec->spot_group );
+            }
+        }
+        else
+        {
+            /* A0 and A1 are aligned (2 lookups)*/
+            rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+            if ( rc == 0 )
+                rc = lookup_bases( j->lookup, row_id, 2, &j->B2 );
+            if ( rc == 0 )
+            {
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, "%ld\t%S%S\t%S\n", row_id, &j->B1.S, &j->B2.S, &rec->spot_group );
+                else
+                    rc = KOutMsg( "%ld\t%S%S\t%S\n", row_id, &j->B1.S, &j->B2.S, &rec->spot_group );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_fastq_1_read( fastq_rec * rec, join * j, const char * acc )
+{
+    rc_t rc = 0;
+    int64_t row_id = rec->row_id;
+    
+    if ( rec->prim_alig_id[ 0 ] == 0 )
+    {
+        /* read is unaligned, print what is in row->cmp_read (no lookup)*/
+        const char * fmt = "@%s.%ld %ld length=%d\n%S\n+%s.%ld %ld length=%d\n%S\n";
+        if ( j->printer != NULL )
+            rc = file_print( j->printer, fmt,
+                acc, row_id, row_id, rec->cmp_read.len, &rec->cmp_read,
+                acc, row_id, row_id, rec->quality.len, &rec->quality );
+        else
+            rc = KOutMsg( fmt,
+                acc, row_id, row_id, rec->cmp_read.len, &rec->cmp_read,
+                acc, row_id, row_id, rec->quality.len, &rec->quality );
+    }
+    else
+    {
+        /* read is aligned, ( 1 lookup ) */    
+        rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+        if ( rc == 0 )
+        {
+            const char * fmt = "@%s.%ld %ld length=%d\n%S\n+%s.%ld %ld length=%d\n%S\n";
+            if ( j->printer != NULL )
+                rc = file_print( j->printer, fmt,
+                    acc, row_id, row_id, j->B1.S.len, &j->B1.S,
+                    acc, row_id, row_id, rec->quality.len, &rec->quality );
+            else
+                rc = KOutMsg( fmt,
+                    acc, row_id, row_id, j->B1.S.len, &j->B1.S,
+                    acc, row_id, row_id, rec->quality.len, &rec->quality );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_fastq_2_reads( fastq_rec * rec, join * j, const char * acc )
+{
+    rc_t rc = 0;
+    int64_t row_id = rec->row_id;
+    
+    if ( rec->prim_alig_id[ 0 ] == 0 )
+    {
+        if ( rec->prim_alig_id[ 1 ] == 0 )
+        {
+            /* both unaligned, print what is in row->cmp_read (no lookup)*/
+            const char * fmt = "@%s.%ld %ld length=%d\n%S\n+%s.%ld %ld length=%d\n%S\n";
+            if ( j->printer != NULL )
+                rc = file_print( j->printer, fmt,
+                    acc, row_id, row_id, rec->cmp_read.len, &rec->cmp_read,
+                    acc, row_id, row_id, rec->quality.len, &rec->quality );
+            else
+                rc = KOutMsg( fmt,
+                    acc, row_id, row_id, rec->cmp_read.len, &rec->cmp_read,
+                    acc, row_id, row_id, rec->quality.len, &rec->quality );
+                
+        }
+        else
+        {
+            /* A0 is unaligned / A1 is aligned (lookup) */
+            rc = lookup_bases( j->lookup, row_id, 2, &j->B2 );
+            if ( rc == 0 )
+            {
+                const char * fmt = "@%s.%ld %ld length=%d\n%S%S\n+%s.%ld %ld length=%d\n%S\n";
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, fmt,
+                        acc, row_id, row_id, rec->cmp_read.len + j->B2.S.len, &rec->cmp_read, &j->B2.S,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+                else
+                    rc = KOutMsg( fmt,
+                        acc, row_id, row_id, rec->cmp_read.len + j->B2.S.len, &rec->cmp_read, &j->B2.S,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+            }
+        }
+    }
+    else
+    {
+        if ( rec->prim_alig_id[ 1 ] == 0 )
+        {
+            /* A0 is aligned (lookup) / A1 is unaligned */
+            rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+            if ( rc == 0 )
+            {
+                const char * fmt = "@%s.%ld %ld length=%d\n%S%S\n+%s.%ld %ld length=%d\n%S\n";
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, fmt,
+                        acc, row_id, row_id, rec->cmp_read.len + j->B1.S.len, &j->B1.S, &rec->cmp_read,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+                else
+                    rc = KOutMsg( fmt,
+                        acc, row_id, row_id, rec->cmp_read.len + j->B1.S.len, &j->B1.S, &rec->cmp_read,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+            }
+        }
+        else
+        {
+            /* A0 and A1 are aligned (2 lookups)*/
+            rc = lookup_bases( j->lookup, row_id, 1, &j->B1 );
+            if ( rc == 0 )
+                rc = lookup_bases( j->lookup, row_id, 2, &j->B2 );
+            if ( rc == 0 )
+            {
+                const char * fmt = "@%s.%ld %ld length=%d\n%S%S\n+%s.%ld %ld length=%d\n%S\n";
+                if ( j->printer != NULL )
+                    rc = file_print( j->printer, fmt,
+                        acc, row_id, row_id, j->B1.S.len + j->B2.S.len, &j->B1.S, &j->B2.S,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+                else
+                    rc = KOutMsg( fmt,
+                        acc, row_id, row_id, j->B1.S.len + j->B2.S.len, &j->B1.S, &j->B2.S,
+                        acc, row_id, row_id, rec->quality.len, &rec->quality );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t extract_row_count_cmn( const join_params * jp, uint64_t * row_count )
+{
+    rc_t rc = 0;
+    cmn_params cmn;
+    
+    init_cmn_params( jp, &cmn ); /* above */
+    switch( jp->fmt )
+    {
+        case ft_special : {
+                                struct special_iter * iter;
+                                rc = make_special_iter( &cmn, &iter ); /* special_iter.c */
+                                if ( rc == 0 )
+                                {
+                                    *row_count = get_row_count_of_special_iter( iter );
+                                    destroy_special_iter( iter );
+                                }
+                           } break;
+                           
+        case ft_fastq   : {
+                                struct fastq_iter * iter;
+                                rc = make_fastq_iter( &cmn, &iter ); /* fastq_iter.c */
+                                if ( rc == 0 )
+                                {
+                                    *row_count = get_row_count_of_fastq_iter( iter );
+                                    destroy_fastq_iter( iter );
+                                }
+                           } break;
+                           
+        default : break;
+    }
+    return rc;
+}
+
+rc_t CC Quitting();
+
+static rc_t perform_special_join( const join_params * jp, struct index_reader * index )
+{
+    rc_t rc;
+    struct special_iter * iter;
+    cmn_params cmn;
+
+    init_cmn_params( jp, &cmn ); /* above */
+    rc = make_special_iter( &cmn, &iter );
+    if ( rc == 0 )
+    {
+        join j;
+        rc = init_join( jp, &j, index );
+        if ( rc == 0 )
+        {
+            special_rec rec;
+            while ( get_from_special_iter( iter, &rec, &rc ) && rc == 0 )
+            {
+                rc = Quitting();
+                if ( rc == 0 )
+                {
+                    if ( rec.num_reads == 1 )
+                        rc = print_special_1_read( &rec, &j );
+                    else
+                        rc = print_special_2_reads( &rec, &j );
+
+                    if ( jp->join_progress != NULL )
+                        atomic_inc( jp->join_progress );
+                }
+            }
+            release_join_ctx( &j );
+        }
+        else
+            ErrMsg( "init_join() -> %R", rc );
+        destroy_special_iter( iter );
+    }
+    else
+        ErrMsg( "make_special_iter() -> %R", rc );
+    return rc;
+}
+
+
+static rc_t perform_fastq_join( const join_params * jp, struct index_reader * index )
+{
+    rc_t rc;
+    struct fastq_iter * iter;
+    cmn_params cmn;
+
+    init_cmn_params( jp, &cmn ); /* above */
+    rc = make_fastq_iter( &cmn, &iter );
+    if ( rc == 0 )
+    {
+        join j;
+        
+        rc = init_join( jp, &j, index );
+        if ( rc == 0 )
+        {
+            fastq_rec rec;
+            uint64_t n = 0;
+            
+            while ( get_from_fastq_iter( iter, &rec, &rc ) && rc == 0 )
+            {
+                rc = Quitting();
+                if ( rc == 0 )
+                {
+                    if ( rec.num_reads == 1 )
+                        rc = print_fastq_1_read( &rec, &j, jp->accession );
+                    else
+                        rc = print_fastq_2_reads( &rec, &j, jp->accession );
+
+                    if ( jp->join_progress != NULL )
+                        atomic_inc( jp->join_progress );
+                    n++;
+                }
+            }
+            release_join_ctx( &j );
+        }
+        else
+            ErrMsg( "init_join() -> %R", rc );
+        destroy_fastq_iter( iter );
+    }
+    else
+        ErrMsg( "make_fastq_iter() -> %R", rc );
+    return rc;
+}
+
+
+
+/* ------------------------------------------------------------------------------------------ */
+
+typedef struct join_thread_data
+{
+    const join_params * jp;
+    int64_t first;
+    uint64_t count;
+    uint32_t idx;
+} join_thread_data;
+
+
+static const char * leaf_of( const char * src )
+{
+    const char * last_slash = string_rchr( src, string_size ( src ), '/' );
+    if ( last_slash != NULL )
+        return last_slash + 1;
+    return src;
+}
+
+static rc_t make_part_filename( const join_params * jp, char * buffer, size_t bufsize, uint32_t id )
+{
+    rc_t rc;
+    size_t num_writ;
+    if ( jp->temp_path != NULL )
+    {
+        uint32_t l = string_measure( jp->temp_path, NULL );
+        if ( l == 0 )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            ErrMsg( "make_part_filename.string_measure() = 0 -> %R", rc );
+        }
+        else
+        {
+            const char * output_file_leaf = leaf_of( jp->output_filename ); /* above */
+            
+            if ( jp->temp_path[ l-1 ] == '/' )
+                rc = string_printf( buffer, bufsize, &num_writ, "%s%s.%d",
+                        jp->temp_path, output_file_leaf, id );
+            else
+                rc = string_printf( buffer, bufsize, &num_writ, "%s/%s.%d",
+                        jp->temp_path, output_file_leaf, id );
+        }
+    }
+    else
+        rc = string_printf( buffer, bufsize, &num_writ, "%s.%d", jp->output_filename, id );
+        
+    if ( rc != 0 )
+        ErrMsg( "make_part_filename.string_printf() -> %R", rc );
+    return rc;
+}
+
+
+static rc_t concat_part_files( const join_params * jp, uint32_t count )
+{
+    struct VNamelist * files;
+    rc_t rc = VNamelistMake( &files, count );
+    if ( rc == 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++idx )
+        {
+            char part_file[ 4096 ];
+            rc = make_part_filename( jp, part_file, sizeof part_file, idx ); /* above */
+            if ( rc == 0 )
+                rc = VNamelistAppend( files, part_file );
+        }
+        if ( rc == 0 )
+            rc = concat_files( jp->dir, files, jp->buf_size, jp->output_filename, jp->show_progress ); /* helper.c */
+        if ( rc == 0 )
+            rc = delete_files( jp->dir, files );
+        VNamelistRelease( files );
+    }
+    return rc;
+}
+
+/* ------------------------------------------------------------------------------------------ */
+
+static rc_t CC cmn_thread_func( const KThread *self, void *data )
+{
+    rc_t rc = 0;
+    join_thread_data * jtd = data;
+    const join_params * jp = jtd->jp;
+    struct index_reader * index = NULL;
+    
+    if ( jp->index_filename != NULL )
+    {
+        if ( file_exists( jp->dir, "%s", jp->index_filename ) )
+            rc = make_index_reader( jp->dir, &index, jp->buf_size, "%s", jp->index_filename ); /* index.c */
+    }
+
+    if ( rc == 0 && index != NULL )
+    {
+        char part_file[ 4096 ];
+        rc = make_part_filename( jp, part_file, sizeof part_file, jtd->idx ); /* above */
+        if ( rc == 0 )
+        {
+            join_params cjp;
+
+            copy_join_params( &cjp, jp );
+            cjp.num_threads = 0;
+            cjp.first = jtd->first;
+            cjp.count = jtd->count;
+            cjp.output_filename = part_file;
+            cjp.show_progress = false;
+            
+            switch( jp->fmt )
+            {
+                case ft_special : rc = perform_special_join( &cjp, index ); break; /* above */
+                case ft_fastq   : rc = perform_fastq_join( &cjp, index ); break; /* above */
+                default : break;
+                
+            }
+        }
+        release_index_reader( index ); /* index.c */    
+    }
+    
+    free( ( void * ) data );
+    return rc;
+}
+
+
+rc_t execute_join( const join_params * jp )
+{
+    rc_t rc = 0;
+    
+    if ( jp->show_progress )
+        KOutMsg( "join   :" );
+
+    if ( jp->num_threads < 2 )
+    {
+        /* on the main thread */
+        switch( jp->fmt )
+        {
+            case ft_special : rc = perform_special_join( jp, NULL ); break; /* above */
+            case ft_fastq   : rc = perform_fastq_join( jp, NULL ); break; /* above */
+            default : break;
+        }
+    }
+    else
+    {
+        uint64_t row_count = 0;
+        rc = extract_row_count_cmn( jp, &row_count ); /* above */
+        if ( rc == 0 && row_count > 0 )
+        {
+            Vector threads;
+            int64_t first = 1;
+            uint64_t i, per_thread = ( row_count / jp->num_threads ) + 1;
+            KThread * progress_thread = NULL;
+            multi_progress progress;
+
+            init_progress_data( &progress, row_count ); /* helper.c */
+            VectorInit( &threads, 0, jp->num_threads );
+            
+            if ( jp->show_progress )
+            {
+                join_params * nc_jp = ( join_params * )jp;
+                nc_jp->join_progress = &progress.progress_rows;
+                rc = start_multi_progress( &progress_thread, &progress ); /* helper.c */
+            }
+            for ( i = 0; rc == 0 && i < jp->num_threads; ++i )
+            {
+                join_thread_data * jtd = calloc( 1, sizeof * jtd );
+                if ( jtd != NULL )
+                {
+                    KThread * thread;
+                    
+                    jtd->jp = jp;
+                    jtd->first = first;
+                    jtd->count = per_thread;
+                    jtd->idx = i;
+
+                    rc = KThreadMake( &thread, cmn_thread_func, jtd );
+                    if ( rc != 0 )
+                        ErrMsg( "KThreadMake( fastq/special #%d ) -> %R", i, rc );
+                    else
+                    {
+                        rc = VectorAppend( &threads, NULL, thread );
+                        if ( rc != 0 )
+                            ErrMsg( "VectorAppend( sort-thread #%d ) -> %R", i, rc );
+                    }
+                    first += per_thread;
+                }
+            }
+            
+            join_and_release_threads( &threads ); /* helper.c */
+            join_multi_progress( progress_thread, &progress ); /* helper.c */
+            
+            if ( jp->show_progress )
+                KOutMsg( "concat :" );
+            
+            rc = concat_part_files( jp, jp->num_threads ); /* above */
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/join.h b/tools/fastdump/join.h
new file mode 100644
index 0000000..83cd4a0
--- /dev/null
+++ b/tools/fastdump/join.h
@@ -0,0 +1,76 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_join_
+#define _h_join_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_atomic_
+#include <atomic.h>
+#endif
+
+#ifndef _h_helper_
+#include "helper.h"
+#endif
+
+typedef struct join_params
+{
+    KDirectory * dir;
+    const char * accession;
+    const char * lookup_filename;
+    const char * index_filename;
+    const char * output_filename;
+    const char * temp_path;
+    atomic_t   * join_progress;
+    size_t buf_size, cur_cache, num_threads;
+    int64_t first;
+    uint64_t count;
+    bool show_progress;
+    format_t fmt;
+} join_params;
+
+rc_t execute_join( const join_params * jp );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/line_iter.c b/tools/fastdump/line_iter.c
new file mode 100644
index 0000000..0ccd234
--- /dev/null
+++ b/tools/fastdump/line_iter.c
@@ -0,0 +1,199 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "line_iter.h"
+#include "helper.h"
+
+#include <kfs/file.h>
+
+#define ITER_DONE 0x01
+#define ITER_EOF  0x02
+
+typedef struct line_iter
+{
+    const struct KFile * f;
+    String buffer, content, line;
+    uint64_t pos_in_file;
+    uint32_t state;
+} line_iter;
+
+
+void release_line_iter( struct line_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        if ( iter->f != NULL )
+            KFileRelease( iter->f );
+        if ( iter->buffer.addr != NULL )
+            free( ( void * ) iter->buffer.addr );
+        free( ( void * ) iter );
+    }
+}
+
+
+static void read_line_iter( struct line_iter * iter )
+{
+    if ( iter->content.size > 0 )
+        memmove( (void *)iter->buffer.addr, iter->content.addr, iter->content.size );
+    iter->content.addr = iter->buffer.addr;
+    {
+        char * dst = ( char * )iter->buffer.addr + iter->content.size;
+        size_t num_read;
+        size_t to_read = ( ( iter->buffer.size - 1 ) - iter->content.size );
+        rc_t rc = KFileRead ( iter->f, iter->pos_in_file, dst, iter->buffer.size - iter->content.size, &num_read );
+        if ( rc == 0 )
+        {
+            iter->pos_in_file += num_read;
+            iter->content.size += num_read;
+            if ( num_read < to_read )
+                iter->state |= ITER_EOF;
+        }
+        else
+            iter->state |= ITER_EOF;
+    }
+}
+
+
+static bool slice_iter_content( struct line_iter * iter, size_t by )
+{
+    size_t l;                
+    iter->line.addr = iter->content.addr;
+    iter->line.len  = by;
+    iter->line.size = by;
+    l = ( by + 1 );
+    iter->content.addr += l;
+    if ( l < iter->content.size )
+        iter->content.size -= l;
+    else
+        iter->content.size = 0;
+    return true;
+}
+
+
+bool advance_line_iter( struct line_iter * iter )
+{
+    bool res = ( 0 == ( iter->state & ITER_DONE ) );
+    if ( res )
+    {
+        if ( iter->content.size == 0 )
+            read_line_iter( iter );
+
+        if ( iter->content.size == 0 && ( iter->state & ITER_EOF ) )
+        {
+            iter->state |= ITER_DONE;
+            res = false;
+        }
+        else
+        {
+            char * newline = string_chr( iter->content.addr, iter->content.size, '\n' );
+            if ( newline == NULL )
+            {
+                if ( iter->state & ITER_EOF )
+                    res = slice_iter_content( iter, iter->content.size );
+                else
+                {
+                    read_line_iter( iter );
+                    res = advance_line_iter( iter ); /* recursion! */
+                }
+            }
+            else
+                res = slice_iter_content( iter, newline - iter->content.addr );
+        }
+    }
+    return res;
+}
+
+
+String * get_line_iter( struct line_iter * iter )
+{
+    String * res = NULL;
+    if ( iter != NULL )
+    {
+        if ( 0 == ( iter->state & ITER_DONE ) )
+            res = &iter->line;
+    }
+    return res;
+}
+
+
+bool is_line_iter_done( const struct line_iter * iter )
+{
+    if ( iter != NULL )
+        return ( iter->state & ITER_DONE );
+    return true;
+}
+
+
+rc_t make_line_iter( const KDirectory *dir, line_iter ** iter,
+                     const char * filename, size_t buffer_size )
+{
+    const struct KFile * f;
+    rc_t rc = KDirectoryOpenFileRead( dir, &f, "%s", filename );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryOpenFileRead( '%s' ) -> %R", filename, rc );
+    else
+    {
+        if ( rc == 0 )
+        {
+            line_iter * l = calloc( 1, sizeof * l );
+            if ( l == NULL )
+            {
+                KFileRelease( f );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", ( sizeof * l ), rc );
+            }
+            else
+            {
+                l->f = f;
+                l->buffer.addr = malloc( buffer_size );
+                if ( l->buffer.addr == NULL )
+                {
+                    rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                    ErrMsg( "malloc( %d ) -> %R", ( buffer_size ), rc );
+                    KFileRelease( f );
+                    free( ( void * ) l );
+                }
+                else
+                {
+                    l->buffer.size = buffer_size;
+                    l->buffer.len = buffer_size;
+                    l->content.addr = l->buffer.addr;
+                    read_line_iter( l );
+                    if ( advance_line_iter( l ) )
+                    {
+                        *iter = l;
+                    }
+                    else
+                    {
+                        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcRange, rcInvalid );
+                        release_line_iter( l );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/line_iter.h b/tools/fastdump/line_iter.h
new file mode 100644
index 0000000..b453c4d
--- /dev/null
+++ b/tools/fastdump/line_iter.h
@@ -0,0 +1,60 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_line_iter_
+#define _h_line_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+struct line_iter;
+
+void release_line_iter( struct line_iter * iter );
+bool advance_line_iter( struct line_iter * iter );
+String * get_line_iter( struct line_iter * iter );
+bool is_line_iter_done( const struct line_iter * iter );
+
+rc_t make_line_iter( const KDirectory *dir, struct line_iter ** iter,
+                     const char * filename, size_t buffer_size );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/lookup_reader.c b/tools/fastdump/lookup_reader.c
new file mode 100644
index 0000000..85f1b9f
--- /dev/null
+++ b/tools/fastdump/lookup_reader.c
@@ -0,0 +1,360 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "lookup_reader.h"
+#include "helper.h"
+
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+#include <string.h>
+#include <stdio.h>
+
+typedef struct lookup_reader
+{
+    const struct KFile * f;
+    const struct index_reader * index;
+    SBuffer buf;
+    uint64_t pos;
+} lookup_reader;
+
+
+void release_lookup_reader( struct lookup_reader * reader )
+{
+    if ( reader != NULL )
+    {
+        if ( reader->f != NULL ) KFileRelease( reader->f );
+        release_SBuffer( &reader->buf );
+        free( ( void * ) reader );
+    }
+}
+
+
+rc_t make_lookup_reader( const KDirectory *dir, const struct index_reader * index,
+                         struct lookup_reader ** reader, size_t buf_size, const char * fmt, ... )
+{
+    rc_t rc;
+    const struct KFile * f = NULL;
+    
+    va_list args;
+    va_start ( args, fmt );
+    
+    rc = KDirectoryVOpenFileRead( dir, &f, fmt, args );
+    if ( rc != 0 )
+    {
+        char tmp[ 4096 ];
+        size_t num_writ;
+        rc_t rc1 = string_vprintf( tmp, sizeof tmp, &num_writ, fmt, args );
+        if ( rc1 != 0 )
+            ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '?' ) -> %R", rc );
+        else
+            ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '%s' ) -> %R", tmp, rc );
+    }
+    else
+    {
+        const struct KFile * temp_file = NULL;
+        rc = KBufFileMakeRead( &temp_file, f, buf_size );
+        KFileRelease( f );
+        if ( rc != 0 )
+        {
+            ErrMsg( "make_lookup_reader.KBufFileMakeRead() -> %R", rc );
+        }
+        else
+        {
+            lookup_reader * r = calloc( 1, sizeof * r );
+            if ( r == NULL )
+            {
+                KFileRelease( temp_file );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "make_lookup_reader.calloc( %d ) -> %R", ( sizeof * r ), rc );
+            }
+            else
+            {
+                r->f = temp_file;
+                r->index = index;
+                rc = make_SBuffer( &r->buf, 4096 );
+                if ( rc == 0 )
+                    *reader = r;
+                else
+                    release_lookup_reader( r );
+            }
+        }
+    }
+    va_end ( args );
+    return rc;
+}
+
+
+static rc_t read_key_and_len( struct lookup_reader * reader, uint64_t pos, uint64_t *key, size_t *len )
+{
+    size_t num_read;
+    char buffer[ 10 ];
+    rc_t rc = KFileRead( reader->f, pos, buffer, sizeof buffer, &num_read );
+    if ( rc != 0 )
+    {
+        ErrMsg( "read_key_and_len.KFileRead( at %ld, to_read %u ) -> %R", pos, sizeof buffer, rc );
+    }
+    else if ( num_read != sizeof buffer )
+    {
+        if ( num_read == 0 )
+            rc = SILENT_RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+        else
+            rc = SILENT_RC( rcVDB, rcNoTarg, rcReading, rcFormat, rcInvalid );
+    }
+    else
+    {
+        uint16_t dna_len;
+        size_t packed_len;
+        memmove( key, buffer, sizeof *key );
+        dna_len = buffer[ 8 ];
+        dna_len <<= 8;
+        dna_len |= buffer[ 9 ];
+        packed_len = ( dna_len & 1 ) ? ( dna_len + 1 ) >> 1 : dna_len >> 1;
+        *len = ( ( sizeof *key ) + ( sizeof dna_len ) + packed_len );
+    }
+    return rc;
+}
+
+
+static bool keys_equal( uint64_t key1, uint64_t key2 )
+{
+    bool res = ( key1 == key2 );
+    if ( !res )
+        res = ( ( ( key1 & 0x01 ) == 0 ) && key2 == ( key1 + 1 ) );
+    return res;
+}
+
+static rc_t loop_until_key_found( struct lookup_reader * reader, uint64_t key_to_find,
+        uint64_t *key_found , uint64_t *offset )
+{
+    rc_t rc = 0;
+    bool done = false;
+    uint64_t curr = *offset;
+    while ( !done && rc == 0 )
+    {
+        size_t found_len;
+        rc = read_key_and_len( reader, curr, key_found, &found_len );
+        if ( keys_equal( key_to_find, *key_found ) )
+        {
+            done = true;
+            *offset = curr;
+        }
+        else if ( key_to_find > *key_found )
+            curr += found_len;
+        else
+        {
+            done = true;
+            rc = SILENT_RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t full_table_seek( struct lookup_reader * reader, uint64_t key_to_find, uint64_t * key_found )
+{
+    /* we have no index! search the whole thing... */
+    uint64_t offset = 0;
+    rc_t rc = loop_until_key_found( reader, key_to_find, key_found, &offset );
+    if ( rc == 0 )
+    {
+        if ( keys_equal( key_to_find, *key_found ) )
+            reader->pos = offset;
+        else
+        {
+            rc = RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+            ErrMsg( "seek_lookup_reader( key: %ld ) -> %R", key_to_find, rc );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t indexed_seek( struct lookup_reader * reader, uint64_t key_to_find, uint64_t * key_found, bool exactly )
+{
+    /* we have a index! find set pos to the found offset */
+    uint64_t offset = 0;
+    uint64_t max_key;
+    rc_t rc = get_max_key( reader->index, &max_key );
+    if ( rc == 0 )
+    {
+        if ( key_to_find > max_key )
+            rc = RC( rcVDB, rcNoTarg, rcReading, rcId, rcTooBig );
+        else
+        {
+            rc = get_nearest_offset( reader->index, key_to_find, key_found, &offset ); /* in index.c */
+            if ( rc == 0 )
+            {
+                if ( keys_equal( key_to_find, *key_found ) )
+                    reader->pos = offset;
+                else
+                {
+                    if ( exactly )
+                    {
+                        rc = loop_until_key_found( reader, key_to_find, key_found, &offset );
+                        if ( rc == 0 )
+                        {
+                            if ( keys_equal( key_to_find, *key_found ) )
+                                reader->pos = offset;
+                            else
+                                rc = RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+                        }
+                        else
+                            rc = RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+                    }
+                    else
+                    {
+                        reader->pos = offset;
+                        rc = RC( rcVDB, rcNoTarg, rcReading, rcId, rcNotFound );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t seek_lookup_reader( struct lookup_reader * reader, uint64_t key_to_find, uint64_t * key_found, bool exactly )
+{
+    rc_t rc = 0;
+    if ( reader == NULL || key_found == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcParam, rcInvalid );
+        ErrMsg( "seek_lookup_reader() -> %R", rc );
+    }
+    else
+    {
+        if ( reader->index != NULL )
+        {
+            rc = indexed_seek( reader, key_to_find, key_found, exactly );
+            if ( rc != 0 )
+                rc = full_table_seek( reader, key_to_find, key_found );
+        }
+        else
+            rc = full_table_seek( reader, key_to_find, key_found );
+    }
+    return rc;
+}
+
+
+rc_t get_packed_and_key_from_lookup_reader( struct lookup_reader * reader,
+                        uint64_t * key, SBuffer * packed_bases )
+{
+    rc_t rc;
+    if ( reader == NULL || key == NULL || packed_bases == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcReading, rcParam, rcInvalid );
+        ErrMsg( "get_packed_and_key_from_lookup_reader() -> %R", rc );
+    }
+    else
+    {
+        size_t num_read;
+        char buffer1[ 10 ];
+        rc = KFileRead( reader->f, reader->pos, buffer1, sizeof buffer1, &num_read );
+        if ( rc != 0 )
+            ErrMsg( "KFileRead( at %ld, to_read %u ) -> %R", reader->pos, sizeof buffer1, rc );
+        else if ( num_read != sizeof buffer1 )
+            rc = SILENT_RC( rcVDB, rcNoTarg, rcReading, rcFormat, rcInvalid );
+        else
+        {
+            uint16_t dna_len;
+            size_t to_read;
+            char * dst = ( char * )packed_bases->S.addr;
+            
+            memmove( key, buffer1, sizeof *key );
+
+            dna_len = buffer1[ 8 ];
+            dna_len <<= 8;
+            dna_len |= buffer1[ 9 ];
+            dst[ 0 ] = buffer1[ 8 ];
+            dst[ 1 ] = buffer1[ 9 ];
+            dst += 2;
+            to_read = ( dna_len & 1 ) ? ( dna_len + 1 ) >> 1 : dna_len >> 1;
+            if ( to_read > ( packed_bases->buffer_size - 2 ) )
+                to_read = ( packed_bases->buffer_size - 2 );
+            if ( rc == 0 )
+            {
+                rc = KFileRead( reader->f, reader->pos + 10, dst, to_read, &num_read );
+                if ( rc != 0 )
+                    ErrMsg( "KFileRead( at %ld, to_read %u ) -> %R", reader->pos + 10, to_read, rc );
+                else if ( num_read != to_read )
+                {
+                    rc = RC( rcVDB, rcNoTarg, rcReading, rcFormat, rcInvalid );
+                    ErrMsg( "KFileRead( %ld ) %d vs %d -> %R", reader->pos + 10, num_read, to_read, rc );
+                }
+                else
+                {
+                    packed_bases->S.len = packed_bases->S.size = num_read + 2;
+                    reader->pos += ( num_read + 10 );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t get_packed_from_lookup_reader( struct lookup_reader * reader,
+                        int64_t * seq_spot_id, uint32_t * seq_read_id, SBuffer * packed_bases )
+{
+    uint64_t key;
+    rc_t rc = get_packed_and_key_from_lookup_reader( reader, &key, packed_bases );
+    if ( rc == 0 )
+    {
+        *seq_spot_id = key >> 1;
+        *seq_read_id = key & 1 ? 2 : 1;
+    }
+    return rc;
+}
+
+
+rc_t get_bases_from_lookup_reader( struct lookup_reader * reader,
+                        int64_t * seq_spot_id, uint32_t * seq_read_id, SBuffer * bases )
+{
+    rc_t rc = get_packed_from_lookup_reader( reader, seq_spot_id, seq_read_id, &reader->buf );
+    if ( rc == 0 )
+        unpack_4na( &reader->buf.S, bases );
+    return rc;
+}
+
+
+rc_t lookup_bases( struct lookup_reader * lookup, int64_t row_id, uint32_t read_id, SBuffer * B )
+{
+    int64_t found_seq_spot_id;
+    uint32_t found_seq_read_id;
+    rc_t rc = get_bases_from_lookup_reader( lookup, &found_seq_spot_id, &found_seq_read_id, B );
+    if ( rc == 0 )
+    {
+        if ( found_seq_spot_id != row_id || found_seq_read_id != read_id )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcTransfer, rcInvalid );
+            ErrMsg( "id-mismatch for seq_id = %lu vs. %lu / read_id = %u vs %lu",
+                    found_seq_spot_id, row_id, found_seq_read_id, read_id );
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/lookup_reader.h b/tools/fastdump/lookup_reader.h
new file mode 100644
index 0000000..ecf5ce9
--- /dev/null
+++ b/tools/fastdump/lookup_reader.h
@@ -0,0 +1,75 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_lookup_reader_
+#define _h_lookup_reader_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_helper_
+#include "helper.h"
+#endif
+
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_index_
+#include "index.h"
+#endif
+
+struct lookup_reader;
+
+void release_lookup_reader( struct lookup_reader * reader );
+
+rc_t make_lookup_reader( const KDirectory *dir, const struct index_reader * index,
+                         struct lookup_reader ** reader, size_t buf_size, const char * fmt, ... );
+
+rc_t seek_lookup_reader( struct lookup_reader * reader, uint64_t key, uint64_t * key_found, bool exactly );
+
+rc_t get_packed_and_key_from_lookup_reader( struct lookup_reader * reader,
+                        uint64_t * key, SBuffer * packed_bases );
+
+rc_t get_packed_from_lookup_reader( struct lookup_reader * reader,
+                        int64_t * seq_spot_id, uint32_t * seq_read_id, SBuffer * packed_bases );
+
+rc_t get_bases_from_lookup_reader( struct lookup_reader * reader,
+                        int64_t * seq_spot_id, uint32_t * seq_read_id, SBuffer * bases );
+
+rc_t lookup_bases( struct lookup_reader * lookup, int64_t row_id, uint32_t read_id, SBuffer * B );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/lookup_writer.c b/tools/fastdump/lookup_writer.c
new file mode 100644
index 0000000..badea64
--- /dev/null
+++ b/tools/fastdump/lookup_writer.c
@@ -0,0 +1,138 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "lookup_writer.h"
+#include "helper.h"
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+typedef struct lookup_writer
+{
+    struct KFile * f;
+    struct index_writer * idx;
+    SBuffer buf;
+    uint64_t pos;
+} lookup_writer;
+
+
+void release_lookup_writer( struct lookup_writer * writer )
+{
+    if ( writer != NULL )
+    {
+        if ( writer->f != NULL ) KFileRelease( writer->f );
+        release_SBuffer( &writer->buf );
+        free( ( void * ) writer );
+    }
+}
+
+
+rc_t make_lookup_writer( KDirectory *dir, struct index_writer * idx,
+                         struct lookup_writer ** writer, size_t buf_size,
+                         const char * fmt, ... )
+{
+    rc_t rc;
+    struct KFile * f;
+    
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = KDirectoryVCreateFile( dir, &f, false, 0664, kcmInit, fmt, args );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryVCreateFile() -> %R", rc );
+    else
+    {
+        struct KFile * temp_file;
+        rc = KBufFileMakeWrite( &temp_file, f, false, buf_size );
+        KFileRelease( f );
+        if ( rc != 0 )
+            ErrMsg( "KBufFileMakeWrite() -> %R", rc );
+        else
+        {
+            lookup_writer * w = calloc( 1, sizeof * w );
+            if ( w == NULL )
+            {
+                KFileRelease( temp_file );
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", ( sizeof * w ), rc );
+            }
+            else
+            {
+                w->f = temp_file;
+                w->idx = idx;
+                rc = make_SBuffer( &w->buf, 4096 );
+                if ( rc == 0 )
+                    *writer = w;
+                else
+                    release_lookup_writer( w );
+            }
+        }
+    }
+    va_end ( args );
+    return rc;
+}
+
+
+rc_t write_unpacked_to_lookup_writer( struct lookup_writer * writer,
+            int64_t seq_spot_id, uint32_t seq_read_id, const String * bases_as_unpacked_4na )
+{
+    pack_4na( bases_as_unpacked_4na, &writer->buf );
+    return write_packed_to_lookup_writer( writer, make_key( seq_spot_id, seq_read_id ), &writer->buf.S );
+}
+
+rc_t write_packed_to_lookup_writer( struct lookup_writer * writer,
+            uint64_t key, const String * bases_as_packed_4na )
+{
+    size_t num_writ;
+    rc_t rc = KFileWrite( writer->f, writer->pos, &key, sizeof key, &num_writ );
+    if ( rc != 0 )
+        ErrMsg( "KFileWriteAll( key ) -> %R", rc );
+    else if ( num_writ != sizeof key )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcFormat, rcInvalid );
+        ErrMsg( "KFileWriteAll( key ) -> %R", rc );
+    }
+    else
+    {
+        uint64_t start_pos = writer->pos;
+        writer->pos += num_writ;
+        rc = KFileWrite( writer->f, writer->pos, bases_as_packed_4na->addr, bases_as_packed_4na->size, &num_writ );
+        if ( rc != 0 )
+            ErrMsg( "KFileWriteAll( bases ) -> %R", rc );
+        else if ( num_writ != bases_as_packed_4na->size )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcWriting, rcFormat, rcInvalid );
+            ErrMsg( "KFileWriteAll( bases ) -> %R", rc );
+        }
+        else
+        {
+            if ( writer->idx != NULL )
+                rc = write_key( writer->idx, key, start_pos );
+            writer->pos += num_writ;
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/lookup_writer.h b/tools/fastdump/lookup_writer.h
new file mode 100644
index 0000000..9e83051
--- /dev/null
+++ b/tools/fastdump/lookup_writer.h
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_lookup_writer_
+#define _h_lookup_writer_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_index_
+#include "index.h"
+#endif
+
+struct lookup_writer;
+
+void release_lookup_writer( struct lookup_writer * writer );
+
+rc_t make_lookup_writer( KDirectory *dir, struct index_writer * idx, struct lookup_writer ** writer,
+                         size_t buf_size, const char * fmt, ... );
+
+rc_t write_unpacked_to_lookup_writer( struct lookup_writer * writer,
+            int64_t seq_spot_id, uint32_t seq_read_id, const String * bases_as_unpacked_4na );
+
+rc_t write_packed_to_lookup_writer( struct lookup_writer * writer,
+            uint64_t key, const String * bases_as_packed_4na );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/merge_sorter.c b/tools/fastdump/merge_sorter.c
new file mode 100644
index 0000000..2080e8a
--- /dev/null
+++ b/tools/fastdump/merge_sorter.c
@@ -0,0 +1,173 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "merge_sorter.h"
+#include "lookup_reader.h"
+#include "lookup_writer.h"
+#include "index.h"
+#include "helper.h"
+
+typedef struct merge_src
+{
+    struct lookup_reader * reader;
+    uint64_t key;
+    SBuffer packed_bases;
+    rc_t rc;
+} merge_src;
+
+
+typedef struct merge_sorter
+{
+    const merge_sorter_params * params;
+    merge_src * src_list;
+    struct lookup_writer * dst;
+    struct index_writer * idx;
+} merge_sorter;
+
+
+void release_merge_sorter( struct merge_sorter *ms )
+{
+    if ( ms != NULL )
+    {
+        uint32_t i;
+        release_lookup_writer( ms->dst );
+        release_index_writer( ms->idx );
+        if ( ms->src_list != NULL )
+        {
+            for ( i = 0; i < ms->params->count; ++i )
+            {
+                merge_src * src = &ms->src_list[ i ];
+                release_lookup_reader( src->reader );
+                release_SBuffer( &src->packed_bases );
+            }
+            free( ( void * ) ms->src_list );
+        }
+
+        free( ( void * ) ms );
+    }
+}
+
+
+rc_t make_merge_sorter( struct merge_sorter ** ms, const merge_sorter_params * params )
+{
+    rc_t rc = 0;
+    merge_sorter * m = calloc( 1, sizeof * m );
+    if ( m == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "calloc( %d ) -> %R", ( sizeof * m ), rc );
+    }
+    else
+    {
+        if ( params->index_filename != NULL )
+            rc = make_index_writer( params->dir, &m->idx, params->buf_size,
+                        20000, "%s", params->index_filename );
+
+        if ( rc == 0 )
+        {
+            rc = make_lookup_writer( params->dir, m->idx, &m->dst, params->buf_size,
+                        "%s", params->output_filename );
+            if ( rc == 0 )
+            {
+                m->src_list = calloc( params->count, sizeof * m->src_list );
+                if ( m->src_list == NULL )
+                {
+                    rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                    ErrMsg( "calloc( %d ) -> %R", ( ( sizeof * m->src_list ) * params->count ), rc );
+                }
+                else
+                {
+                    m->params = params;
+                    *ms = m;
+                }
+            }
+        }
+    }
+    if ( rc != 0 )
+        release_merge_sorter( m );
+    return rc;
+}
+
+
+rc_t add_merge_sorter_src( struct merge_sorter *ms, const char * filename, uint32_t id )
+{
+    rc_t rc;
+    if ( id >= ms->params->count )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        ErrMsg( "add_merge_sorter_src() ... invalid id of %d", id );
+    }
+    else
+    {
+        merge_src * src = &ms->src_list[ id ];
+        rc = make_lookup_reader( ms->params->dir, NULL, &src->reader, ms->params->buf_size, "%s", filename );
+        if ( rc == 0 )
+        {
+            rc = make_SBuffer( &src->packed_bases, 4096 );
+            if ( rc == 0 )
+                src->rc = get_packed_and_key_from_lookup_reader( src->reader, &src->key, &src->packed_bases );
+        }
+    }
+    return rc;
+}
+
+
+static merge_src * get_min_merge_src( merge_src * src, uint32_t count )
+{
+    merge_src * res = NULL;
+    uint32_t i;
+    for ( i = 0; i < count; ++i )
+    {
+        merge_src * item = &src[ i ];
+        if ( item->rc == 0 )
+        {
+            if ( res == NULL )
+                res = item;
+            else if ( item->key < res->key )
+                res = item;
+        }
+    }
+    return res;
+} 
+
+rc_t CC Quitting();
+
+rc_t run_merge_sorter( struct merge_sorter *ms )
+{
+    rc_t rc = 0;
+    merge_src * to_write = get_min_merge_src( ms->src_list, ms->params->count );
+    while( rc == 0 && to_write != NULL )
+    {
+        rc = Quitting();
+        if ( rc == 0 )
+        {
+            rc = write_packed_to_lookup_writer( ms->dst, to_write->key, &to_write->packed_bases.S );
+            if ( rc == 0 )
+                to_write->rc = get_packed_and_key_from_lookup_reader( to_write->reader, &to_write->key, &to_write->packed_bases );
+            to_write = get_min_merge_src( ms->src_list, ms->params->count );
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastdump/merge_sorter.h b/tools/fastdump/merge_sorter.h
new file mode 100644
index 0000000..fe3352c
--- /dev/null
+++ b/tools/fastdump/merge_sorter.h
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_merge_sorter_
+#define _h_merge_sorter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+struct merge_sorter;
+
+typedef struct merge_sorter_params
+{
+    KDirectory *dir;
+    const char * output_filename;
+    const char * index_filename;
+    uint32_t count;
+    size_t buf_size;
+} merge_sorter_params;
+
+
+rc_t make_merge_sorter( struct merge_sorter ** ms, const merge_sorter_params * params );
+
+rc_t add_merge_sorter_src( struct merge_sorter *ms, const char * filename, uint32_t id );
+
+void release_merge_sorter( struct merge_sorter *ms );
+
+rc_t run_merge_sorter( struct merge_sorter *ms );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/raw_read_iter.c b/tools/fastdump/raw_read_iter.c
new file mode 100644
index 0000000..ca5ab5e
--- /dev/null
+++ b/tools/fastdump/raw_read_iter.c
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "raw_read_iter.h"
+#include "cmn_iter.h"
+#include "helper.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+typedef struct raw_read_iter
+{
+    struct cmn_iter * cmn;
+    uint32_t seq_spot_id, seq_read_id, raw_read_id;
+} raw_read_iter;
+
+
+void destroy_raw_read_iter( struct raw_read_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        destroy_cmn_iter( iter->cmn );
+        free( ( void * ) iter );
+    }
+}
+
+
+rc_t make_raw_read_iter( cmn_params * params, struct raw_read_iter ** iter )
+{
+    
+    rc_t rc = 0;
+    raw_read_iter * i = calloc( 1, sizeof * i );
+    if ( i == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "make_raw_read_iter.calloc( %d ) -> %R", ( sizeof * i ), rc );
+    }
+    else
+    {
+        rc = make_cmn_iter( params, "PRIMARY_ALIGNMENT", &i->cmn );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "SEQ_SPOT_ID", &i->seq_spot_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "SEQ_READ_ID", &i->seq_read_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "(INSDC:4na:bin)RAW_READ", &i->raw_read_id );
+        if ( rc == 0 )
+            rc = cmn_iter_range( i->cmn, i->seq_spot_id );
+
+        if ( rc != 0 )
+            destroy_raw_read_iter( i );
+        else
+            *iter = i;
+    }
+    return rc;
+}
+
+
+bool get_from_raw_read_iter( struct raw_read_iter * iter, raw_read_rec * rec, rc_t * rc )
+{
+    bool res = cmn_iter_next( iter->cmn, rc );
+    if ( res )
+    {
+        *rc = cmn_read_uint64( iter->cmn, iter->seq_spot_id, &rec->seq_spot_id );
+        if ( *rc == 0 )
+            *rc = cmn_read_uint32( iter->cmn, iter->seq_read_id, &rec->seq_read_id );
+        if ( *rc == 0 )
+            *rc = cmn_read_String( iter->cmn, iter->raw_read_id, &rec->raw_read );
+    }
+    return res;
+}
+
+
+uint64_t get_row_count_of_raw_read( struct raw_read_iter * iter )
+{
+    return cmn_iter_row_count( iter->cmn );
+}
diff --git a/tools/fastdump/raw_read_iter.h b/tools/fastdump/raw_read_iter.h
new file mode 100644
index 0000000..11d2229
--- /dev/null
+++ b/tools/fastdump/raw_read_iter.h
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_raw_read_iter_
+#define _h_raw_read_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_cmn_iter_
+#include "cmn_iter.h"
+#endif
+
+struct raw_read_iter;
+
+typedef struct raw_read_rec
+{
+    uint64_t seq_spot_id;
+    uint32_t seq_read_id;
+    String raw_read;
+} raw_read_rec;
+
+void destroy_raw_read_iter( struct raw_read_iter * iter );
+
+rc_t make_raw_read_iter( cmn_params * params, struct raw_read_iter ** iter );
+
+bool get_from_raw_read_iter( struct raw_read_iter * iter, raw_read_rec * rec, rc_t * rc );
+
+uint64_t get_row_count_of_raw_read( struct raw_read_iter * iter );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/readme.txt b/tools/fastdump/readme.txt
new file mode 100644
index 0000000..20e270c
--- /dev/null
+++ b/tools/fastdump/readme.txt
@@ -0,0 +1,92 @@
+Here is an example how to use the new fastdump-tool:
+
+The usage is in 2 stages:
+( stage 1 ) create a lookup-file from the accession
+        SRRXXXXXX ---> SRRXXXXXX.lookup
+        
+( stage 2 ) create the final output from the accession using the lookupfile
+        SRRXXXXXX + SRRXXXXXX.lookup ---> SRRXXXXXX.txt
+
+
+example: accession = SRR833540
+
+================================================================================
+    stage 1:
+================================================================================
+
+(version a)
+create the lookup-file in the current directory, with memory limit of 4 GB
+
+fastdump SRR833540 -f lookup -o SRR833540.lookup -m 4G -p
+
+This will create a number of temporary files in your current directory.
+Make shure you have enough space for that. The lookup-file for this accession
+(SRR833540.lookup) will be about 121 GB in size. You will need double that space
+because of the temporary files. The tool will delete them after it created the
+lookup-file. How much memory should you give to the tool? Look at your
+available memory with 'free -h'. Give it about half as much as your free memory.
+You can give it more, but that will result in memory beeing swaped and that will
+result in a big slow down. One of our machines took about 500 minutes for this,
+without swapping. The '-p' switch turns a percent-bar on.
+
+
+
+(version b)
+create the lookup-file in the current directory, with memory limit of 4 GB on 6 threads
+
+fastdump SRR833540 -f lookup -o SRR833540.lookup -m 4G -e 6 -p
+
+This will create the same output, but much faster. But now you are using 4 GB on
+each of the 6 threads. You will need more than 4 GB * 6 = 24 GB, you will need
+about 35 GB of memory because other parts of the tool need memory too. If you do not
+have that much memory, reduce the amount of memory per thread or the number of threads
+until it fits your machine. You can check how much is actually used with 
+'top -u your_username'. If you specify 6 threads, you should see about 600% of
+CPU utilization. If you see less than that you are limited by the speed of the
+filesystem access. Make shure that SRR833540 is local on your filesystem and all
+the references it uses are locally accessible too. This took us about 110 minutes.
+
+
+How do you know the accession is local?
+
+'vdb-dump SRR833540 --info'
+
+If the path points to your local filesystem ( '/home/user/ncbi/...' etc. )
+    ---> you are good to go.
+
+If the path points to a remote url ( 'http://sra-download.ncbi...' etc. )
+    ---> download the accession first, with the prefetch-tool.
+
+How do you know that you have all references locally?
+
+'sra-pileup SRR833540 --function ref'
+
+This will list all references used by the accession.
+If the location points to your local filesystem, your are good to go. If the location
+points to a remote url, download the references with the prefetch-tool.
+
+If after prefetch the accession is still not found locally, you have a configuration issue.
+
+If you have a SSD available, that helps too!
+
+================================================================================
+    stage 2:
+================================================================================
+
+(version a)
+create the lookup-file in the current directory into a file with percent-bar
+
+fastdump SRR833540 -l SRR833540.lookup -o SRR833540.txt -p
+
+
+(version b)
+create the output on stdout ( to be piped into other tools )
+
+fastdump SRR833540 -l SRR833540.lookup
+
+The output will be in this text-format:
+ID<tab>READ<tab>SPOTGROUP
+
+If you want FASTQ instead, add the option '-f fastq'.
+
+
diff --git a/tools/fastdump/sorter.c b/tools/fastdump/sorter.c
new file mode 100644
index 0000000..21d9325
--- /dev/null
+++ b/tools/fastdump/sorter.c
@@ -0,0 +1,538 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "sorter.h"
+#include "lookup_writer.h"
+#include "lookup_reader.h"
+#include "merge_sorter.h"
+#include "helper.h"
+
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/progressbar.h>
+#include <kproc/thread.h>
+
+/* 
+    this is in interfaces/cc/XXX/YYY/atomic.h
+    XXX ... the compiler ( cc, gcc, icc, vc++ )
+    YYY ... the architecture ( fat86, i386, noarch, ppc32, x86_64 )
+ */
+#include <atomic.h>
+
+
+typedef struct sorter
+{
+    sorter_params params;
+    KVector * store;
+    SBuffer buf;
+    uint64_t bytes_in_store;
+    uint32_t sub_file_id;
+} sorter;
+
+
+static void release_sorter( struct sorter * sorter )
+{
+    if ( sorter != NULL )
+    {
+        release_SBuffer( &sorter->buf );
+        if ( sorter->params.src != NULL )
+            destroy_raw_read_iter( sorter->params.src );
+        if ( sorter->store != NULL )
+            KVectorRelease( sorter->store );
+    }
+}
+
+static rc_t init_sorter( struct sorter * sorter, const sorter_params * params )
+{
+    rc_t rc = KVectorMake( &sorter->store );
+    if ( rc != 0 )
+        ErrMsg( "KVectorMake() -> %R", rc );
+    else
+    {
+        rc = make_SBuffer( &sorter->buf, 4096 );
+        if ( rc == 0 )
+        {
+            sorter->params.dir = params->dir;
+            sorter->params.output_filename = params->output_filename;
+            sorter->params.index_filename = NULL;
+            sorter->params.temp_path = params->temp_path;
+            sorter->params.src = params->src;
+            sorter->params.buf_size = params->buf_size;
+            sorter->params.mem_limit = params->mem_limit;
+            sorter->params.prefix = params->prefix;
+            sorter->bytes_in_store = 0;
+            sorter->sub_file_id = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t make_subfilename( const sorter_params * params, uint32_t id, char * buffer, size_t buflen )
+{
+    rc_t rc;
+    size_t num_writ;
+    if ( params->temp_path != NULL )
+    {
+        uint32_t l = string_measure( params->temp_path, NULL );
+        if ( l == 0 )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            ErrMsg( "make_subfilename.string_measure() = 0 -> %R", rc );
+        }
+        else
+        {
+            if ( params->temp_path[ l-1 ] == '/' )
+                rc = string_printf( buffer, buflen, &num_writ, "%ssub_%d_%d.dat",
+                        params->temp_path, params->prefix, id );
+            else
+                rc = string_printf( buffer, buflen, &num_writ, "%s/sub_%d_%d.dat",
+                        params->temp_path, params->prefix, id );
+        }
+    }
+    else
+        rc = string_printf( buffer, buflen, &num_writ, "sub_%d_%d.dat",
+                params->prefix, id );
+
+    if ( rc != 0 )
+        ErrMsg( "make_subfilename.string_printf() -> %R", rc );
+    return rc;
+}
+
+
+static rc_t make_dst_filename( const sorter_params * params, char * buffer, size_t buflen )
+{
+    rc_t rc;
+    size_t num_writ;
+    if ( params->prefix > 0 )
+    {
+        if ( params->temp_path != NULL )
+        {
+            uint32_t l = string_measure( params->temp_path, NULL );
+            if ( l == 0 )
+            {
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                ErrMsg( "make_subfilename.string_measure() = 0 -> %R", rc );
+            }
+            else
+            {
+                if ( params->temp_path[ l-1 ] == '/' )
+                    rc = string_printf( buffer, buflen, &num_writ, "%stmp_%d.dat",
+                            params->temp_path, params->prefix );
+                else
+                    rc = string_printf( buffer, buflen, &num_writ, "%s/tmp_%d.dat",
+                            params->temp_path, params->prefix );
+            }
+        }
+        else
+            rc = string_printf( buffer, buflen, &num_writ, "tmp_%d.dat", params->prefix );
+    }
+    else
+        rc = string_printf( buffer, buflen, &num_writ, "%s", params->output_filename );
+
+    if ( rc != 0 )
+        ErrMsg( "make_dst_filename.string_printf() -> %R", rc );
+    return rc;
+}
+
+
+static rc_t CC on_store_entry( uint64_t key, const void *value, void *user_data )
+{
+    const String * bases = value;
+    struct lookup_writer * writer = user_data;
+    rc_t rc = write_packed_to_lookup_writer( writer, key, bases );
+    StringWhack( bases );
+    return rc;
+}
+
+
+static rc_t save_store( struct sorter * sorter )
+{
+    rc_t rc = 0;
+    if ( sorter->bytes_in_store > 0 )
+    {
+        char buffer[ 4096 ];
+        struct lookup_writer * writer;
+        
+        if ( sorter->params.mem_limit > 0 )
+        {
+            rc = make_subfilename( &sorter->params, sorter->sub_file_id, buffer, sizeof buffer );
+            if ( rc == 0 )
+                sorter->sub_file_id++;
+        }
+        else
+            rc = make_dst_filename( &sorter->params, buffer, sizeof buffer );
+
+        if ( rc == 0 )
+            rc = make_lookup_writer( sorter->params.dir, NULL, &writer, sorter->params.buf_size, "%s", buffer );
+        
+        if ( rc == 0 )
+        {
+            rc = KVectorVisitPtr( sorter->store, false, on_store_entry, writer );
+            release_lookup_writer( writer );
+        }
+        if ( rc == 0 )
+        {
+            sorter->bytes_in_store = 0;
+            rc = KVectorRelease( sorter->store );
+            if ( rc != 0 )
+                ErrMsg( "KVectorRelease() -> %R", rc );
+            else
+            {
+                sorter->store = NULL;
+                rc = KVectorMake( &sorter->store );
+                if ( rc != 0 )
+                    ErrMsg( "KVectorMake() -> %R", rc );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t write_to_sorter( struct sorter * sorter, int64_t seq_spot_id, uint32_t seq_read_id,
+        const String * unpacked_bases )
+{
+    /* we write it to the store...*/
+    rc_t rc;
+    const String * to_store;    
+    pack_4na( unpacked_bases, &sorter->buf );
+    rc = StringCopy( &to_store, &sorter->buf.S );
+    if ( rc != 0 )
+        ErrMsg( "StringCopy() -> %R", rc );
+    else
+    {
+        uint64_t key = make_key( seq_spot_id, seq_read_id );
+        rc = KVectorSetPtr( sorter->store, key, (const void *)to_store );
+        if ( rc != 0 )
+            ErrMsg( "KVectorSetPtr() -> %R", rc );
+        else
+        {
+            size_t item_size = ( sizeof key ) + ( sizeof *to_store ) + to_store->size;
+            sorter->bytes_in_store += item_size;
+        }
+    }
+    
+    if ( rc == 0 &&
+         sorter->params.mem_limit > 0 &&
+         sorter->bytes_in_store >= sorter->params.mem_limit )
+        rc = save_store( sorter );
+    return rc;
+}
+
+
+static rc_t delete_sub_files( const sorter_params * params, uint32_t count )
+{
+    rc_t rc = 0;
+    char buffer[ 4096 ];
+    uint32_t i;
+    for ( i = 0; rc == 0 && i < count; ++ i )
+    {
+        rc = make_subfilename( params, i, buffer, sizeof buffer );
+        if ( rc == 0 )
+            rc = KDirectoryRemove( params->dir, true, "%s", buffer );
+        if ( rc != 0 )
+            ErrMsg( "KDirectoryRemove( 'sub_%d.dat' ) -> %R", i, rc );
+    }
+    return rc;
+}
+
+
+static rc_t final_merge_sort( const sorter_params * params, uint32_t count )
+{
+    rc_t rc = 0;
+    if ( count > 0 )
+    {
+        char buffer[ 4096 ];
+        rc = make_dst_filename( params, buffer, sizeof buffer );
+        if ( rc == 0 )
+        {
+            merge_sorter_params msp;
+            struct merge_sorter * ms;
+            uint32_t i;
+            
+            msp.dir = params->dir;
+            msp.output_filename = buffer;
+            msp.index_filename = params->index_filename;
+            msp.count = count;
+            msp.buf_size = params->buf_size;
+            
+            rc = make_merge_sorter( &ms, &msp );
+            for ( i = 0; rc == 0 && i < count; ++i )
+            {
+                char buffer2[ 4096 ];
+                rc = make_subfilename( params, i, buffer2, sizeof buffer2 );
+                if ( rc == 0 )
+                    rc = add_merge_sorter_src( ms, buffer2, i );
+            }
+            if ( rc == 0 )
+                rc = run_merge_sorter( ms );
+                
+            release_merge_sorter( ms );
+        }
+
+        if ( rc == 0 )
+            rc = delete_sub_files( params, count );
+    }
+    return rc;
+}
+
+rc_t CC Quitting();
+
+rc_t run_sorter( const sorter_params * params )
+{
+    sorter sorter;
+    rc_t rc = init_sorter( &sorter, params );
+    if ( rc == 0 )
+    {
+        raw_read_rec rec;
+        while ( rc == 0 && get_from_raw_read_iter( sorter.params.src, &rec, &rc ) )
+        {
+            rc = Quitting();
+            if ( rc == 0 )
+            {
+                rc = write_to_sorter( &sorter, rec.seq_spot_id, rec.seq_read_id, &rec.raw_read );
+                if ( rc == 0 && params->sort_progress != NULL )
+                    atomic_inc( params->sort_progress );
+            }
+        }
+        
+        if ( rc == 0 )
+            rc = save_store( &sorter );
+
+        if ( rc == 0 && sorter.params.mem_limit > 0 )
+            rc = final_merge_sort( params, sorter.sub_file_id );
+            
+        release_sorter( &sorter );
+    }
+    return rc;
+}
+
+/* -------------------------------------------------------------------------------------------- */
+
+static uint64_t find_out_row_count( const sorter_params * params )
+{
+    rc_t rc;
+    uint64_t res = 0;
+    struct raw_read_iter * iter;
+    cmn_params cp;
+    
+    cp.dir = params->dir;
+    cp.acc = params->acc;
+    cp.row_range = NULL;
+    cp.first = 0;
+    cp.count = 0;
+    cp.cursor_cache = params->cursor_cache;
+    cp.show_progress = false;
+
+    rc = make_raw_read_iter( &cp, &iter );
+    if ( rc == 0 )
+    {
+        res = get_row_count_of_raw_read( iter );
+        destroy_raw_read_iter( iter );
+    }
+    return res;
+}
+
+
+static rc_t make_pool_src_filename( const sorter_params * params, uint32_t id,
+            char * buffer, size_t buflen )
+{
+    rc_t rc;
+    size_t num_writ;
+    if ( params->temp_path != NULL )
+    {
+        uint32_t l = string_measure( params->temp_path, NULL );
+        if ( l == 0 )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            ErrMsg( "make_subfilename.string_measure() = 0 -> %R", rc );
+        }
+        else
+        {
+            if ( params->temp_path[ l - 1 ] == '/' )
+                rc = string_printf( buffer, buflen, &num_writ, "%stmp_%d.dat",
+                        params->temp_path, id );
+            else
+                rc = string_printf( buffer, buflen, &num_writ, "%s/tmp_%d.dat",
+                        params->temp_path, id );
+        }
+    }
+    else
+        rc = string_printf( buffer, buflen, &num_writ, "tmp_%d.dat", id );
+
+    if ( rc != 0 )
+        ErrMsg( "make_pool_src_filename.string_printf() -> %R", rc );
+    return rc;
+}
+
+
+static rc_t delete_tmp_files( const sorter_params * params, uint32_t count )
+{
+    rc_t rc = 0;
+    char buffer[ 4096 ];
+    uint32_t i;
+    for ( i = 0; rc == 0 && i < count; ++ i )
+    {
+        make_pool_src_filename( params, i + 1, buffer, sizeof buffer );
+        if ( rc == 0 )
+            rc = KDirectoryRemove( params->dir, true, "%s", buffer );
+        if ( rc != 0 )
+            ErrMsg( "KDirectoryRemove( 'tmp_%d.dat' ) -> %R", rc );
+    }
+    return rc;
+}
+
+
+static rc_t merge_pool_files( const sorter_params * params )
+{
+    rc_t rc;
+    merge_sorter_params msp;
+    struct merge_sorter * ms;
+    
+    msp.dir = params->dir;
+    msp.output_filename = params->output_filename;
+    msp.index_filename = params->index_filename;
+    msp.count = params->num_threads;
+    msp.buf_size = params->buf_size;
+
+    rc = make_merge_sorter( &ms, &msp );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        for ( i = 0; rc == 0 && i < params->num_threads; ++i )
+        {
+            char buffer[ 4096 ];
+            rc = make_pool_src_filename( params, i + 1, buffer, sizeof buffer );
+            if ( rc == 0 )
+                rc = add_merge_sorter_src( ms, buffer, i );
+        }
+        if ( rc == 0 )
+            rc = run_merge_sorter( ms );
+        
+        release_merge_sorter( ms );
+    }
+
+    if ( rc == 0 ) 
+       rc = delete_tmp_files( params, params->num_threads );
+
+    return rc;
+}
+
+static void init_sorter_params( sorter_params * dst, const sorter_params * params, uint32_t prefix )
+{
+    dst->dir = params->dir;
+    dst->output_filename = NULL;
+    dst->index_filename = params->index_filename;
+    dst->temp_path = params->temp_path;
+    dst->src = NULL;
+    dst->prefix = prefix;
+    dst->mem_limit = params->mem_limit;
+    dst->buf_size = params->buf_size;
+}
+
+static void init_cmn_params( cmn_params * dst, const sorter_params * params, uint64_t row_count )
+{
+    dst->dir = params->dir;
+    dst->acc = params->acc;
+    dst->row_range = NULL;
+    dst->first = 1;
+    dst->count = ( row_count / params->num_threads ) + 1;
+    dst->cursor_cache = params->cursor_cache;
+    dst->show_progress = false;
+}
+
+
+static rc_t CC sort_thread_func( const KThread *self, void *data )
+{
+    rc_t rc = 0;
+    sorter_params * params = data;
+    params->index_filename = NULL;
+    rc = run_sorter( params );
+    free( data );
+    return rc;
+}
+
+
+rc_t run_sorter_pool( const sorter_params * params )
+{
+    rc_t rc = 0;
+    uint64_t row_count = find_out_row_count( params );
+    if ( row_count == 0 )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        ErrMsg( "multi_threaded_make_lookup: row_count == 0!" );
+    }
+    else
+    {
+        cmn_params cp;
+        Vector threads;
+        KThread * progress_thread = NULL;
+        uint32_t prefix = 1;
+        multi_progress progress;
+
+        init_progress_data( &progress, row_count );
+        VectorInit( &threads, 0, params->num_threads );
+        init_cmn_params( &cp, params, row_count );
+        
+        if ( params->show_progress )
+            rc = start_multi_progress( &progress_thread, &progress );
+            
+        while ( rc == 0 && cp.first < row_count )
+        {
+            sorter_params * sp = calloc( 1, sizeof *sp );
+            if ( sp != NULL )
+            {
+                init_sorter_params( sp, params, prefix++ );
+                rc = make_raw_read_iter( &cp, &sp->src );
+                
+                if ( rc == 0 )
+                {
+                    KThread * thread;
+                    
+                    if ( params->show_progress )
+                        sp->sort_progress = &progress.progress_rows;
+                    rc = KThreadMake( &thread, sort_thread_func, sp );
+                    if ( rc != 0 )
+                        ErrMsg( "KThreadMake( sort-thread #%d ) -> %R", prefix - 1, rc );
+                    else
+                    {
+                        rc = VectorAppend( &threads, NULL, thread );
+                        if ( rc != 0 )
+                            ErrMsg( "VectorAppend( sort-thread #%d ) -> %R", prefix - 1, rc );
+                    }
+                }
+                cp.first  += cp.count;
+            }
+        }
+
+        join_and_release_threads( &threads );
+        /* all sorter-threads are done now, tell the progress-thread to terminate! */
+        join_multi_progress( progress_thread, &progress );
+        rc = merge_pool_files( params );
+    }
+    return rc;
+}
diff --git a/tools/fastdump/sorter.h b/tools/fastdump/sorter.h
new file mode 100644
index 0000000..1c0aa26
--- /dev/null
+++ b/tools/fastdump/sorter.h
@@ -0,0 +1,75 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sorter_
+#define _h_sorter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_atomic_
+#include <atomic.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_raw_read_iter_
+#include "raw_read_iter.h"
+#endif
+
+
+typedef struct sorter_params
+{
+    KDirectory * dir;
+    const char * acc;    
+    const char * output_filename;
+    const char * index_filename;
+    const char * temp_path;
+    struct raw_read_iter * src;
+    size_t buf_size, mem_limit, prefix, num_threads, cursor_cache;
+    atomic_t * sort_progress;
+    bool show_progress;
+} sorter_params;
+
+rc_t run_sorter( const sorter_params * params );
+rc_t run_sorter_pool( const sorter_params * params );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/special_iter.c b/tools/fastdump/special_iter.c
new file mode 100644
index 0000000..1187d8e
--- /dev/null
+++ b/tools/fastdump/special_iter.c
@@ -0,0 +1,98 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "special_iter.h"
+#include "helper.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+typedef struct special_iter
+{
+    struct cmn_iter * cmn;
+    uint32_t prim_alig_id, cmp_read_id, spot_group_id;
+} special_iter;
+
+
+void destroy_special_iter( struct special_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        destroy_cmn_iter( iter->cmn );
+        free( ( void * ) iter );
+    }
+}
+
+rc_t make_special_iter( cmn_params * params, struct special_iter ** iter )
+{
+    rc_t rc = 0;
+    special_iter * i = calloc( 1, sizeof * i );
+    if ( i == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "make_special_iter.calloc( %d ) -> %R", ( sizeof * i ), rc );
+    }
+    else
+    {
+        rc = make_cmn_iter( params, "SEQUENCE", &i->cmn );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "PRIMARY_ALIGNMENT_ID", &i->prim_alig_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "CMP_READ", &i->cmp_read_id );
+        if ( rc == 0 )
+            rc = cmn_iter_add_column( i->cmn, "SPOT_GROUP", &i->spot_group_id );
+        if ( rc == 0 )
+            rc = cmn_iter_range( i->cmn, i->prim_alig_id );
+
+        if ( rc != 0 )
+            destroy_special_iter( i );
+        else
+            *iter = i;
+    }
+    return rc;
+}
+
+
+bool get_from_special_iter( struct special_iter * iter, special_rec * rec, rc_t * rc )
+{
+    bool res = cmn_iter_next( iter->cmn, rc );
+    if ( res )
+    {
+        rec->row_id = cmn_iter_row_id( iter->cmn );
+        *rc = cmn_read_uint64_array( iter->cmn, iter->prim_alig_id, rec->prim_alig_id, 2, &rec->num_reads );
+        if ( *rc == 0 )
+            *rc = cmn_read_String( iter->cmn, iter->cmp_read_id, &rec->cmp_read );
+        if ( *rc == 0 )
+            *rc = cmn_read_String( iter->cmn, iter->spot_group_id, &rec->spot_group );
+    }
+    return res;
+
+}
+
+uint64_t get_row_count_of_special_iter( struct special_iter * iter )
+{
+    return cmn_iter_row_count( iter->cmn );
+}
diff --git a/tools/fastdump/special_iter.h b/tools/fastdump/special_iter.h
new file mode 100644
index 0000000..8bb45ba
--- /dev/null
+++ b/tools/fastdump/special_iter.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_special_iter_
+#define _h_special_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_cmn_iter_
+#include "cmn_iter.h"
+#endif
+
+struct special_iter;
+
+typedef struct special_rec
+{
+    int64_t row_id;
+    uint64_t prim_alig_id[ 2 ];
+    uint32_t num_reads;
+    String cmp_read;
+    String spot_group;
+} special_rec;
+
+void destroy_special_iter( struct special_iter * iter );
+
+rc_t make_special_iter( cmn_params * params, struct special_iter ** iter );
+
+bool get_from_special_iter( struct special_iter * iter, special_rec * rec, rc_t * rc );
+
+uint64_t get_row_count_of_special_iter( struct special_iter * iter );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/fastdump/todo.txt b/tools/fastdump/todo.txt
new file mode 100644
index 0000000..258aa29
--- /dev/null
+++ b/tools/fastdump/todo.txt
@@ -0,0 +1,3 @@
+* progress-bar in merge ( if asked for )
+* check memory if no memory-limit provided
+* check for space on scratch or current-directory
\ No newline at end of file
diff --git a/tools/fastdump/verify.sh b/tools/fastdump/verify.sh
new file mode 100755
index 0000000..345a188
--- /dev/null
+++ b/tools/fastdump/verify.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+execute()
+{
+    echo "------------------------------------------------------"
+    echo $1
+    eval $1
+    echo "."
+}
+
+ACC1="SRR341578"
+
+# size is about 20 MB
+# special: 2s vs 3.8s, fastq: 2.3s vs 4.7s
+ACC2="SRR1172940"
+
+# size is about 200 MB
+# special: 13s vs 48s, fastq: 17s vs 57s
+ACC3="SRR353895"
+
+# size is about 2 GB
+# special: 1m13s vs 11m25s, fastq: 1m38s vs 11m56s
+ACC4="SRR392046"
+
+#size is about 20 GB
+#special: 21m34s vs ???, fastq: 34m17s vs 124m20s
+ACC5="SRR534041"
+
+ACC_ONLY_1_READ="SRR449498"
+
+SCRATCH="/panfs/traces01/compress/qa/raetzw/fastdump/"
+THREADS="6"
+
+check_special()
+{
+    ACC="$1"
+    FASTDUMP_OUT="$SCRATCH$ACC.fastdump.special.txt"
+    VDB_DUMP_OUT="$SCRATCH$ACC.vdb_dump.special.txt"
+    
+    #remove output
+    CMD="rm -rf $FASTDUMP_OUT $VDB_DUMP_OUT"
+    execute "$CMD"
+
+    #produce the output using the lookup-file
+    CMD="time fastdump $ACC -t $SCRATCH -f special -o $FASTDUMP_OUT -e $THREADS -p"
+    execute "$CMD"
+
+    #produce the same output using vdb-dump with internal schema-joins
+    CMD="time vdb-dump $ACC -C SPOT_ID,READ,SPOT_GROUP -f tab > $VDB_DUMP_OUT"
+    execute "$CMD"
+
+    #verify that the output of fastdump via vdb-dump
+    CMD="time diff -q $FASTDUMP_OUT $VDB_DUMP_OUT"
+    execute "$CMD"
+}
+
+check_fastq()
+{
+    ACC="$1"
+    FASTDUMP_OUT="$SCRATCH$ACC.fastdump.fastq.txt"
+    VDB_DUMP_OUT="$SCRATCH$ACC.vdb_dump.fastq.txt"
+    
+    #remove output
+    CMD="rm -rf $FASTDUMP_OUT $VDB_DUMP_OUT"
+    execute "$CMD"
+
+    #produce the output using the lookup-file
+    CMD="time fastdump $ACC -t $SCRATCH -f fastq -o $FASTDUMP_OUT -e $THREADS -p"
+    execute "$CMD"
+
+    #produce the same output using vdb-dump with internal schema-joins
+    CMD="time vdb-dump $ACC -f fastq > $VDB_DUMP_OUT"
+    execute "$CMD"
+
+    #verify that the output of fastdump via vdb-dump
+    CMD="time diff -q $FASTDUMP_OUT $VDB_DUMP_OUT"
+    execute "$CMD"
+}
+
+check_special "$ACC2"
+check_fastq "$ACC2"
diff --git a/tools/fastq-dump/Makefile b/tools/fastq-dump/Makefile
new file mode 100644
index 0000000..bf9d6ae
--- /dev/null
+++ b/tools/fastq-dump/Makefile
@@ -0,0 +1,93 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+
+MODULE = tools/fastq-dump
+
+INT_TOOLS = 
+
+EXT_TOOLS = \
+	fastq-dump-new \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# Common dumper definitions
+#
+DUMP_LIBS = \
+	-lncbi-ngs-c++    \
+	-lngs-c++         \
+	-lncbi-vdb-static \
+	-lkapp \
+	-stk-version
+
+#-------------------------------------------------------------------------------
+# fastq-dump
+#
+FASTQ_DUMP_SRC = \
+	args    \
+	filters \
+	fastq-dump
+
+INCDIRS += -I $(TOP)/ngs/ngs-c++
+
+FASTQ_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_DUMP_SRC))
+
+$(BINDIR)/fastq-dump-new: $(FASTQ_DUMP_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(DUMP_LIBS)
diff --git a/tools/fastq-dump/args.cpp b/tools/fastq-dump/args.cpp
new file mode 100644
index 0000000..d7455a4
--- /dev/null
+++ b/tools/fastq-dump/args.cpp
@@ -0,0 +1,622 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sysalloc.h>
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <sstream>
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+
+#include <string.h>
+
+#include "args.hpp"
+
+using namespace ngs;
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* AOptDef empementation                                       */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+AOptDef :: AOptDef ()
+{
+    reset ();
+}   /* AOptDef :: AOptDef () */
+
+AOptDef :: AOptDef ( const AOptDef & OptDef )
+{
+    reset ( OptDef );
+}   /* AOptDef :: AOptDef () */
+
+AOptDef :: ~AOptDef ()
+{
+    reset ();
+}   /* AOptDef :: ~AOptDef () */
+
+AOptDef &
+AOptDef :: operator = ( const AOptDef & OptDef )
+{
+    if ( this != & OptDef ) {
+        reset ( OptDef );
+    }
+
+    return * this;
+}   /* AOptDef :: AOptDef () */
+
+void
+AOptDef :: reset ()
+{
+    _M_name . clear ();
+    _M_aliases . clear ();
+    _M_param . clear ();
+    _M_hlp . clear ();
+    _M_max_count = 0;
+    _M_need_value = true;
+    _M_required = true;
+}   /* AOptDef :: reset () */
+
+void
+AOptDef :: reset ( const AOptDef & OptDef )
+{
+    _M_name = OptDef . _M_name;
+    _M_aliases = OptDef . _M_aliases;
+    _M_param = OptDef . _M_param;
+    _M_hlp = OptDef . _M_hlp;
+    _M_max_count = OptDef . _M_max_count;
+    _M_need_value = OptDef . _M_need_value;
+    _M_required = OptDef . _M_required;
+}   /* AOptDef :: reset () */
+
+bool
+AOptDef :: good () const
+{
+    return ! _M_name . empty ();
+}   /* AOptDef :: good () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* AOPBase impementation                                       */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+AOPBase :: AOPBase ()
+:   _M_exist ( false )
+{
+    reset ();
+}   /* AOPBase () */
+
+AOPBase :: ~AOPBase ()
+{
+    reset ();
+}   /* AOPBase :: ~AOPBase () */
+
+void
+AOPBase :: reset ( const String & , Args * , bool )
+{
+    throw ErrorMsg ( "reset: Unimpemented method" );
+}   /* AOPBase :: reset () */
+
+void
+AOPBase :: reset ()
+{
+    _M_exist = false;
+    _M_name . clear ();
+    _M_val . clear ();
+}   /* AOPBase :: reset () */
+
+void
+AOPBase :: reset ( const AOPBase & Bse )
+{
+    reset ();
+
+    _M_val = Bse . _M_val;
+    _M_name = Bse . _M_name;
+    _M_exist = Bse . _M_exist;
+}   /* AOPBase :: reset () */
+
+uint32_t
+AOPBase :: valCount () const
+{
+/* Not sure about it !!!
+    if ( ! exist () ) {
+        throw ErrorMsg ( "valCount: Value not exits" );
+    }
+
+    return _M_val . size ();
+*/
+
+    return exist () ? _M_val . size () : 0;
+}   /* AOPBase :: valCount () */
+
+const String &
+AOPBase :: val ( uint32_t idx ) const
+{
+    uint32_t cnt = valCount ();
+
+    if ( cnt <= idx ) {
+        throw ErrorMsg ( "val: Invalid index" );
+    }
+
+    return _M_val [ idx ];
+}   /* AOPBase :: val () */
+
+static
+void CC
+__handle_error ( const char * arg, void * data )
+{
+    std :: stringstream str;
+    str << "Can not convert \"" << arg << "\" to int for paramter \"" << ( char * ) data << "\"";
+    throw ErrorMsg ( str . str () );
+}   /* __handle_error () */
+
+uint32_t
+AOPBase :: uint32Val ( uint32_t idx ) const
+{
+    return AsciiToU32 (
+                    val ( idx ) . c_str (),
+                    __handle_error,
+                    ( void * ) _M_name . c_str ()
+                    );
+}   /* AOPBase :: uint32Val () */
+
+int32_t
+AOPBase :: int32Val ( uint32_t idx ) const
+{
+    return AsciiToI32 (
+                    val ( idx ) . c_str (),
+                    __handle_error,
+                    ( void * ) _M_name . c_str ()
+                    );
+}   /* AOPBase :: int32Val () */
+
+uint64_t
+AOPBase :: uint64Val ( uint32_t idx ) const 
+{
+    return AsciiToU64 (
+                    val ( idx ) . c_str (),
+                    __handle_error,
+                    ( void * ) _M_name . c_str ()
+                    );
+}   /* AOPBase :: uint64Val () */
+
+int64_t
+AOPBase :: int64Val ( uint32_t idx ) const
+{
+    return AsciiToI64 (
+                    val ( idx ) . c_str (),
+                    __handle_error,
+                    ( void * ) _M_name . c_str ()
+                    );
+}   /* AOPBase :: int64Val () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* AOptVal impementation                                       */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+AOptVal :: AOptVal ()
+:   AOPBase ()
+{
+}   /* AOptVal :: AOptVal () */
+
+AOptVal :: AOptVal ( const AOptVal & Val )
+:   AOPBase ()
+{
+    AOPBase :: reset ( Val );
+}   /* AOptVal :: AOptVal () */
+
+AOptVal &
+AOptVal :: operator = ( const AOptVal & Val )
+{
+    if ( this != & Val ) {
+        AOPBase :: reset ( Val );
+    }
+
+    return * this;
+}   /* AOptVal :: operator = () */
+
+void
+AOptVal :: reset ( const String & Name, Args * TheArgs, bool needValue )
+{
+    AOPBase :: reset ();
+
+    if ( TheArgs == NULL ) {
+        throw ErrorMsg ( "reset: NULL args passed" );
+    }
+
+    if ( Name . empty () ) {
+        throw ErrorMsg ( "reset: Empty name passed" );
+    }
+
+    uint32_t count = 0;
+    if ( ArgsOptionCount ( TheArgs, Name . c_str (), & count ) != 0 ) {
+        throw ErrorMsg ( String ( "reset: Can not get count for option \"" ) + Name + "\"" );
+    }
+
+    if ( count == 0 ) {
+        return;
+    }
+
+    _M_val . resize ( count );
+    if ( needValue ) {
+        for ( uint32_t i = 0; i < count; i ++ ) {
+            const void * val = NULL;
+            if ( ArgsOptionValue ( TheArgs, Name . c_str (), i, & val ) != 0 ) {
+                std :: stringstream Vsg;
+                Vsg << "reset: Can not get value for option \"" << Name;
+                Vsg << "\" in series " << i;
+                throw ErrorMsg ( Vsg . str () );
+            }
+
+            _M_val [ i ] = val == NULL ? "" : static_cast <char const*> (val);
+        }
+    }
+
+    _M_name = Name;
+    _M_exist = true;
+}   /* AOptVal :: reset () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* AParVal impementation                                       */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+AParVal :: AParVal ()
+:   AOPBase ()
+{
+}   /* AParVal :: AParVal () */
+
+AParVal :: AParVal ( const AParVal & Val )
+:   AOPBase ()
+{
+    AOPBase :: reset ( Val );
+}   /* AParVal :: AParVal () */
+
+AParVal &
+AParVal :: operator = ( const AParVal & Val )
+{
+    if ( this != & Val ) {
+        AOPBase :: reset ( Val );
+    }
+
+    return * this;
+}   /* AParVal :: operator = () */
+
+void
+AParVal :: reset ( const String & Name, Args * TheArgs, bool )
+{
+    AOPBase :: reset ();
+
+    if ( TheArgs == NULL ) {
+        throw ErrorMsg ( "reset: NULL args passed" );
+    }
+
+    uint32_t count = 0;
+    if ( ArgsParamCount ( TheArgs, & count ) != 0 ) {
+        throw ErrorMsg ( "reset: Can not get count for parameters" );
+    }
+
+    if ( count == 0 ) {
+        return;
+    }
+
+    _M_val . resize ( count );
+    for ( uint32_t i = 0; i < count; i ++ ) {
+        const void * val = NULL;
+        if ( ArgsParamValue ( TheArgs, i, & val ) != 0 ) {
+            std :: stringstream Vsg;
+            Vsg << "reset: Can not get parameter in series " << i;
+            throw ErrorMsg ( Vsg . str () );
+        }
+
+        _M_val [ i ] = static_cast <char const*> (val);
+    }
+
+    _M_name = Name;
+    _M_exist = true;
+}   /* AParVal :: reset () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* AArgs impementation                                         */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+AArgs :: MArgs AArgs :: _sM_args;
+
+AArgs :: AArgs ()
+:   _M_args ( NULL )
+,   _M_standards_added ( false )
+,   _M_progName ( "" )
+{
+}   /* AArgs :: AArgs () */
+
+AArgs :: ~AArgs ()
+{
+    /* We are not disposing Arguments, it should be done manually */
+}   /* AArgs :: ~AArgs () */
+
+void
+AArgs :: init ( bool AddStandardOrguments )
+{
+    if ( good () ) {
+        throw ErrorMsg ( "AArgs: We are good" );
+    }
+
+    Args * TempArgs;
+    if ( ArgsMake ( & TempArgs ) != 0 ) {
+        throw ErrorMsg ( "AArgs: Can not make Args" );
+    }
+
+    if ( TempArgs == NULL ) {
+        throw ErrorMsg ( "AArgs: Can not allocate Args" );
+    }
+
+    if ( AddStandardOrguments ) {
+        try {
+            __addStdOpts ( TempArgs );
+            _M_standards_added = true;
+        }
+        catch ( ... ) {
+            __disposeArgs ( TempArgs );
+
+            throw;
+        }
+    }
+
+    _M_args = TempArgs;
+
+    try {
+        __customInit ();
+    }
+    catch ( ... ) {
+        __disposeArgs ( _M_args );
+
+        _M_args = NULL;
+
+        throw;
+    }
+
+    __regArgs ( _M_args, this );
+
+}   /* AArgs :: init () */
+
+void
+AArgs :: __customInit ()
+{
+}   /* AArgs :: __customInit () */
+
+void
+AArgs :: dispose ()
+{
+    if ( good () ) {
+        __customDispose ();
+
+        Args * TheArgs = _M_args;
+        _M_args = NULL;
+
+        _M_optDefs . clear ();
+        _M_standards_added = false;
+
+        __deregArgs ( TheArgs );
+        __disposeArgs ( TheArgs );
+
+        _M_progName . clear ();
+    }
+}   /* AArgs :: dispose () */
+
+void 
+AArgs :: __customDispose () 
+{
+}   /* AArgs :: __customDispose () */
+
+void 
+AArgs :: __disposeArgs ( Args * TheArgs )
+{
+    if ( TheArgs != NULL ) {
+        ArgsWhack ( TheArgs );
+    }
+}   /* AArgs :: __disposeArgs () */
+
+void
+AArgs :: addStdOpts ()
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "addStdOpts: Not good" );
+    }
+
+    try {
+        __addStdOpts ( _M_args );
+    }
+    catch ( ... ) {
+        dispose ();
+
+        throw;
+    }
+}   /* AArgs :: addStdOpts () */
+
+static
+void
+__toOpt ( const AOptDef & In, OptDef & Out )
+{
+    if ( ! In . good () ) {
+        throw ErrorMsg ( "__toOpt: IN is not good" );
+    }
+
+    memset ( & Out, 0, sizeof ( OptDef ) );
+
+    Out . name = In . getName ();
+    Out . aliases = In . getAliases ();
+    const char * Hlp = In . getHlp ();
+    Out . help = & Hlp;
+    Out . max_count = In . maxCount ();
+    Out . needs_value = In . needValue ();
+    Out . required = In . required ();
+}   /* __toOpt () */
+
+void
+AArgs :: addOpt ( const AOptDef & Opt )
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "addOpt: Not good " );
+    }
+
+    struct OptDef TheOpt;
+    __toOpt ( Opt, TheOpt );
+
+    if ( ArgsAddOptionArray ( _M_args, & TheOpt, 1 ) != 0 ) {
+        throw ErrorMsg ( "addOpt: Can not add option" );
+    }
+
+    _M_optDefs . insert ( _M_optDefs . end (), Opt );
+}   /* AArgs :: addOpt () */
+
+void
+AArgs :: __addStdOpts ( Args * TheArgs )
+{
+    if ( TheArgs == NULL ) {
+        throw ErrorMsg ( "__addStdOpts: Very not good" );
+    }
+
+    if ( ArgsAddStandardOptions ( TheArgs ) != 0 ) {
+        throw ErrorMsg ( "__addStdOpts: Can not add standard options" );
+    }
+}   /* AArgs :: __addStdOpts () */
+
+void
+AArgs :: parse ( int argc, char ** argv )
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "parseArgs: Not good" );
+    }
+
+    if ( ArgsParse ( _M_args, argc, argv ) != 0 ) {
+        throw ErrorMsg ( "parseArgs: Can not parse arguments" );
+    }
+
+    const char * prog;
+    if ( ArgsProgram ( _M_args, NULL, & prog ) != 0 ) {
+        throw ErrorMsg ( "parseArgs: Can not extract Progname" );
+    }
+    _M_progName =  prog;
+
+        /*) Here we should handle standard argumends
+            NOTE: help and version are managing authomatically
+         (*/
+    if ( _M_standards_added ) {
+        if ( ArgsHandleStandardOptions ( _M_args ) != 0 ) {
+            throw ErrorMsg ( "parseArgs: Can not handle standard options" );
+        }
+    }
+
+    __customParse ();
+}   /* AArgs :: parse () */
+
+void 
+AArgs :: __customParse () 
+{
+    /* nothing to do here */
+}   /* AArgs :: __customParse () */
+
+void
+AArgs :: __regArgs ( Args * TheArgs, AArgs * TheAArgs )
+{
+    if ( __getArgs ( TheArgs ) != NULL ) {
+        throw ErrorMsg ( "__regArgs: Already registered" );
+    }
+
+    _sM_args [ TheArgs ] = TheAArgs;
+}   /* AArgs :: __regArgs () */
+
+AArgs *
+AArgs :: __getArgs ( Args * TheArgs )
+{
+    if ( TheArgs != NULL ) {
+        MArgsI Iter = _sM_args . find ( TheArgs );
+        if ( Iter != _sM_args . end () ) {
+            return ( * Iter ) . second;
+        }
+    }
+    return NULL;
+}   /* AArgs :: __getArgs () */
+
+void
+AArgs :: __deregArgs ( Args * TheArgs )
+{
+    if ( TheArgs != NULL ) {
+        MArgsI Iter = _sM_args . find ( TheArgs );
+        if ( Iter != _sM_args . end () ) {
+            _sM_args . erase ( Iter );
+        }
+    }
+}   /* AArgs :: __deregArgs () */
+
+AOptVal
+AArgs :: optVal ( const char * name ) const
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "optVal: Not good" );
+    }
+
+    if ( name == NULL ) {
+        throw ErrorMsg ( "optVal: NULL name passed" );
+    }
+
+    AOptVal retVal;
+    retVal . reset ( name, _M_args, optDef ( name ) . needValue () );
+    return retVal;
+}   /* AArgs :: optVal () */
+
+AParVal
+AArgs :: parVal () const
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "parVal: Not good" );
+    }
+
+    AParVal retVal;
+    retVal . reset ( "parameters", _M_args, true );
+    return retVal;
+}   /* AArgs :: paramVal () */
+
+const AOptDef &
+AArgs :: optDef ( const String & name ) const
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "optDef: Not good" );
+    }
+
+    for (
+        VOptI S = _M_optDefs . begin ();
+        S != _M_optDefs . end ();
+        S ++
+    ) {
+        if ( ( * S ) . getName () == name ) {
+            return * S;
+        }
+    }
+
+    throw ErrorMsg ( String ( "optDef: Can not find definition for opotion \"" ) + name + "\"" );
+}   /* AArgs :: optDef () */
+
+void
+AArgs :: usage () const
+{
+    :: Usage ( _M_args );
+}   /* AArgs :: Usage () */
diff --git a/tools/fastq-dump/args.hpp b/tools/fastq-dump/args.hpp
new file mode 100644
index 0000000..8fe241e
--- /dev/null
+++ b/tools/fastq-dump/args.hpp
@@ -0,0 +1,330 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_outpost_args_
+#define _h_outpost_args_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <vector>
+#include <map>
+
+#include <ngs/ErrorMsg.hpp>
+#include <ngs/StringRef.hpp>
+
+/* ##########################################################
+   # Big WARNING : those aren't thread safe classes
+   ########################################################## */
+
+/*))
+ // Right namespace?
+((*/
+namespace ngs {
+
+/*)))
+ ///    These are simple adapters for methods and structures introduced
+ \\\    in kapp/args.h. I agree, these are looks lame, but I will use
+ ///    them ... 
+(((*/
+
+/*))    Adapter for OptDef ... 
+ ((*/
+class AOptDef {
+private :
+    typedef struct OptDef OptDef;
+
+public :
+        /*) Various constructors and destructors 
+         (*/
+    AOptDef ();
+    AOptDef ( const AOptDef & Opt );
+    ~AOptDef ();
+
+    bool good () const;
+
+    AOptDef & operator = ( const AOptDef & Opt );
+
+    void reset ( const AOptDef & Opt );
+    void reset ();
+
+        /*) Various setters/getters
+         (*/
+    inline const char * getName ( ) const
+                {
+                    return _M_name . empty ()
+                                    ? NULL
+                                    : _M_name . c_str ()
+                                    ;
+                };
+    inline void setName ( const char * Name = NULL )
+                {
+                    if ( Name == NULL )
+                        _M_name . clear ();
+                    else 
+                        _M_name = Name;
+                };
+
+    inline const char * getAliases ( ) const
+                {
+                    return _M_aliases . empty ()
+                                    ? NULL
+                                    : _M_aliases . c_str ()
+                                    ;
+                };
+    inline void setAliases ( const char * Aliases = NULL )
+                {
+                    if ( Aliases == NULL )
+                        _M_aliases . clear ();
+                    else 
+                        _M_aliases = Aliases;
+                };
+
+    inline const char * getParam ( ) const
+                {
+                    return _M_param . empty ()
+                                    ? NULL
+                                    : _M_param . c_str ()
+                                    ;
+                };
+    inline void setParam ( const char * Param = NULL )
+                {
+                    if ( Param == NULL )
+                        _M_param . clear ();
+                    else 
+                        _M_param = Param;
+                };
+
+    inline uint16_t maxCount () const
+                {
+                    return _M_max_count;
+                };
+    inline void setMaxCount ( uint16_t MaxCount = 0 )
+                {
+                    _M_max_count = MaxCount;
+                };
+
+    inline bool needValue () const
+                {
+                    return _M_need_value;
+                };
+    inline void setNeedValue ( bool NeedValue = true )
+                {
+                    _M_need_value = NeedValue;
+                };
+
+    inline bool required () const
+                {
+                    return _M_required;
+                };
+    inline void setRequired ( bool Required = true )
+                {
+                    _M_required = Required;
+                 };
+
+    inline const char * getHlp () const
+                {
+                    return _M_hlp.c_str ();
+                };
+
+    inline void setHlp ( const String & HlpStr = "" )
+                {
+                    _M_hlp = HlpStr;
+                };
+private :
+
+    String _M_name;
+    String _M_aliases;
+    String _M_param;
+    String _M_hlp;
+    uint16_t _M_max_count;
+    bool _M_need_value;
+    bool _M_required;
+};  /* class AOptDef */
+
+/*))    Something extra for the same money
+ ((*/
+class AOPBase {
+public :
+    typedef struct Args Args;
+
+    typedef std :: vector < String > VVal;
+    typedef VVal :: const_iterator VValI;
+
+public :
+    AOPBase ();
+    virtual ~AOPBase ();
+
+    virtual void reset (
+                    const String & Name,
+                    Args * TheArgs,
+                    bool needValue
+                    ) = 0;
+
+    inline bool exist () const
+            {
+                return _M_exist;
+            };
+
+    inline const String & name () const
+            { 
+                return _M_name;
+            };
+
+    inline bool hasVal() const
+            {
+                return valCount () != 0;
+            };
+
+    uint32_t valCount () const;
+    const String & val ( uint32_t idx = 0 ) const;
+    uint32_t uint32Val ( uint32_t idx = 0 ) const;
+    int32_t int32Val ( uint32_t idx = 0 ) const;
+    uint64_t uint64Val ( uint32_t idx = 0 ) const;
+    int64_t int64Val ( uint32_t idx = 0 ) const;
+
+protected :
+    void reset ();
+    void reset ( const AOPBase & Bse );
+
+    bool _M_exist;
+
+    String _M_name;
+
+    VVal _M_val;
+};  /* class AOPBase */
+
+class AOptVal : public AOPBase {
+public :
+    AOptVal ();
+    AOptVal ( const AOptVal & Val );
+
+    AOptVal & operator = ( const AOptVal & Val );
+
+    void reset ( const String & Name, Args * TheArgs, bool needValue );
+};  /* class AOptVal */
+
+class AParVal : public AOPBase {
+public :
+    AParVal ();
+    AParVal ( const AParVal & Val );
+
+    AParVal & operator = ( const AParVal & Val );
+
+    void reset ( const String & Name, Args * TheArgs, bool needValue );
+};  /* class AParVal */
+
+/*))))  Adapter for Args structure.
+ ////
+ \\\\   Nothing new, it fully repeats behaviour of Args** methods.
+ ////   There is pattern how to use it :
+ \\\\       a.init (); // initializes Args
+ ////       for ( .... ) {
+ \\\\           a.addOpt ( Opt );
+ ////       }
+ \\\\       a.parseArgs ( argc, argv );
+ ////       a.dispose ();
+((((*/
+class AArgs {
+private :
+    typedef struct Args Args;
+
+    typedef std :: map < Args * , AArgs * > MArgs;
+    typedef MArgs :: iterator MArgsI;
+
+    typedef std :: vector < AOptDef > VOpt;
+    typedef VOpt :: const_iterator VOptI;
+
+    typedef std :: vector < String > VVal;
+    typedef VVal :: const_iterator VValI;
+
+public :
+    AArgs ();
+    virtual ~AArgs ();
+
+        /* Three general stepd to perform : init/parse/dispose
+         */
+    void init ( bool AddStandardOrguments = false );
+    void parse ( int argc, char ** argv );
+    void dispose ();
+
+        /*  Are we good ? virtual ... ouch
+         */
+    inline bool good () const { return _M_args != NULL; };
+
+        /*  Options handling
+         */
+    void addStdOpts ();
+    void addOpt ( const AOptDef & Opt );
+
+    inline size_t optDefCount () const
+            { return _M_optDefs . size (); };
+    inline const AOptDef & optDef ( size_t i )
+            { return _M_optDefs [ i ]; };
+
+        /*  Here is program name
+         */
+    inline const String & prog () const
+            { return _M_progName; };
+
+        /* Here are getters for option and paramter values 
+         */
+    AOptVal optVal ( const char * name ) const;
+    AParVal parVal () const;
+
+    void usage () const;
+
+protected :
+    virtual void __customInit ();
+    virtual void __customParse ();
+    virtual void __customDispose ();
+
+private :
+    static MArgs _sM_args;
+
+public :
+    static void __regArgs ( Args * TheArgs, AArgs * TheAArgs );
+    static AArgs * __getArgs ( Args * TheArgs ); 
+    static void __deregArgs ( Args * TheArgs ); 
+
+private :
+    const AOptDef & optDef ( const String & name ) const;
+
+    void __disposeArgs ( Args * TheArgs );
+    void __addStdOpts ( Args * TheArgs );
+
+    Args * _M_args;
+    bool _M_standards_added;
+
+    VOpt _M_optDefs;
+
+    String _M_progName;
+};  /* class AArgs */
+
+};  /* namespace ngs */
+
+#endif /* _h_outpost_args_ */
diff --git a/tools/fastq-dump/fastq-dump.cpp b/tools/fastq-dump/fastq-dump.cpp
new file mode 100644
index 0000000..a9ec0a1
--- /dev/null
+++ b/tools/fastq-dump/fastq-dump.cpp
@@ -0,0 +1,641 @@
+#include <ngs/ncbi/NGS.hpp>
+#include <ngs/ReadCollection.hpp>
+
+#include <klib/out.h>
+#include <kfc/defs.h>
+#include <kapp/main.h>
+
+#include <klib/rc.h>
+#include <kfc/rc.h>
+
+#include <sysalloc.h>
+#include <algorithm>        /* min */
+
+#include <string.h>         /* strcmp () */
+
+#include <algorithm>
+
+#include "args.hpp"
+#include "filters.hpp"
+
+#include "koutstream"
+
+namespace ngs {
+
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* Arguments                                                   */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+class DumpArgs : public AArgs {
+public :
+    static const char * _sM_minSpotIdName;
+    static const char * _sM_maxSpotIdName;
+    static const char * _sM_spotIdName;
+    static const char * _sM_minReadLengthName;
+    static const char * _sM_categoryName;
+    static const char * _sM_fastaName;
+    static const char * _sM_legacyReportName;
+
+    static const int64_t _sM_minSpotIdDefValue = 1;
+    static const int64_t _sM_maxSpotIdDefValue = 0;
+
+public :
+    typedef AArgs PAPAHEN;
+    typedef Read :: ReadCategory ReadCategory;
+
+public :
+    DumpArgs ();
+    ~DumpArgs ();
+
+    inline const String & accession () const
+                { return _M_accession; };
+
+    inline int64_t minSpotId () const
+                { return _M_minSpotId; };
+    inline int64_t maxSpotId () const
+                { return _M_maxSpotId; };
+
+    inline uint64_t minReadLength () const
+                { return _M_minReadLength; };
+
+    inline ReadCategory category () const
+                { return _M_category; };
+
+    inline bool fastaDump () const
+                { return _M_fasta != 0; };
+
+    inline uint64_t fastaDumpWidth () const
+                { return _M_fasta; };
+
+    inline bool legacyReport () const
+                { return _M_legacyReport; };
+
+protected :
+    void __customInit ();
+    void __customParse ();
+    void __customDispose ();
+
+private :
+    String _M_accession;
+
+        /*) Full Spot Fulters
+         (*/
+    int64_t _M_minSpotId;      /* -N | --minSpotId < rowid > */
+    int64_t _M_maxSpotId;      /* -X | --maxSpotId < rowid > */
+    uint64_t _M_minReadLength;  /* -M | --minReadLen <len> */
+    ReadCategory _M_category;   /* -Y | --category */
+    uint64_t _M_fasta;          /* -A | --fasta */
+    bool _M_legacyReport;       /* -L | --legacy-report */
+};
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* DumpArgs                                                    */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+const char * DumpArgs :: _sM_minSpotIdName = "minSpotId";
+const char * DumpArgs :: _sM_maxSpotIdName = "maxSpotId";
+const char * DumpArgs :: _sM_spotIdName = "spotId";
+const char * DumpArgs :: _sM_minReadLengthName = "minReadLength";
+const char * DumpArgs :: _sM_categoryName = "category";
+const char * DumpArgs :: _sM_fastaName = "fasta";
+const char * DumpArgs :: _sM_legacyReportName = "legacy-report";
+
+DumpArgs :: DumpArgs ()
+:   AArgs ()
+,   _M_accession ( "" )
+,   _M_minSpotId ( _sM_minSpotIdDefValue )
+,   _M_maxSpotId ( _sM_maxSpotIdDefValue )
+,   _M_minReadLength ( 0 )
+,   _M_category ( Read :: all )
+,   _M_fasta ( 0 )
+,   _M_legacyReport ( false )
+{
+}   /* DumpArgs :: DumpArgs () */
+
+DumpArgs :: ~DumpArgs ()
+{
+}   /* DumpArgs :: ~DumpArgs () */
+
+void
+DumpArgs :: __customInit ()
+{
+        /*) Here we are adding some extra options 
+         (*/
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_minSpotIdName );
+        TheOpt . setAliases ( "N" );
+        TheOpt . setParam ( "rowid" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Minimum spot id" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_maxSpotIdName );
+        TheOpt . setAliases ( "X" );
+        TheOpt . setParam ( "rowid" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Maximum spot id" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_spotIdName );
+        TheOpt . setAliases ( "S" );
+        TheOpt . setParam ( "rowid" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Spot id" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_minReadLengthName );
+        TheOpt . setAliases ( "M" );
+        TheOpt . setParam ( "len" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Filter by sequence length >= <len>" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_categoryName );
+        TheOpt . setAliases ( "Y" );
+        TheOpt . setParam ( "alignment" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Reads to dump. Accepts these values : <fullyAligned>, <partiallyAligned>, <aligned>, <unaligned>, <all>. Optional, default value <all> " );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+    
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_fastaName );
+        TheOpt . setAliases ( "A" );
+        TheOpt . setParam ( "width" );
+        TheOpt . setNeedValue ( true );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "FASTA only, no qualities, optional line wrap width (set to zero for no wrapping)" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+
+    {
+        AOptDef TheOpt;
+
+        TheOpt . setName ( _sM_legacyReportName );
+        TheOpt . setAliases ( "R" );
+        TheOpt . setNeedValue ( false );
+        TheOpt . setRequired ( false );
+        TheOpt . setHlp ( "Use legacy style 'Written spots' for tool" );
+        TheOpt . setMaxCount ( 1 );
+
+        addOpt ( TheOpt );
+    }
+}   /* DumpArgs :: __customInit () */
+
+void
+DumpArgs :: __customDispose ()
+{
+    _M_accession = "";
+    _M_minSpotId = _sM_minSpotIdDefValue;
+    _M_maxSpotId = _sM_maxSpotIdDefValue;
+    _M_minReadLength = 0;
+    _M_category = Read :: all;
+    _M_fasta = 0;
+    _M_legacyReport = false;
+}   /* DumpArgs :: __customDispose () */
+
+void
+DumpArgs :: __customParse ()
+{
+    if ( ! good () ) {
+        throw ErrorMsg ( "__customParse::reset: Not good" );
+    }
+
+    uint32_t cnt = parVal () . valCount ();
+    if ( cnt == 0 ) {
+        throw ErrorMsg ( "__customParse: Too few paramters" );
+    }
+
+    _M_accession = parVal () . val ( 0 );
+
+    if ( _M_accession . empty () ) {
+        std :: cerr << "ERROR: <accession> is not defined" << std :: endl;
+        throw ErrorMsg ( "__custromParse: ERROR: <accession> is not defined" );
+    }
+
+    AOptVal optV = optVal ( _sM_spotIdName );
+    int64_t __spotId = 0;
+
+    if ( optV . exist () ) {
+        if ( optVal ( _sM_minSpotIdName ) . exist () ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: parameter \"" ) + _sM_spotIdName + "\" can not coexists with parameter \"" + _sM_minSpotIdName + "\"");
+        }
+
+        if ( optVal ( _sM_maxSpotIdName ) . exist () ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: parameter \"" ) + _sM_spotIdName + "\" can not coexists with parameter \"" + _sM_maxSpotIdName + "\"");
+        }
+
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_spotIdName + "\" values");
+        }
+
+        __spotId = optV . int64Val ();
+    }
+
+    optV = optVal ( _sM_minSpotIdName );
+    if ( optV . exist () ) {
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_minSpotIdName + "\" values");
+        }
+
+        _M_minSpotId = optV . int64Val ();
+    }
+
+    optV = optVal ( _sM_maxSpotIdName );
+    if ( optV . exist () ) {
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_maxSpotIdName + "\" values");
+        }
+
+        _M_maxSpotId = optV . int64Val ();
+    }
+
+    if ( __spotId != 0 ) {
+        _M_minSpotId = __spotId;
+        _M_maxSpotId = __spotId;
+    }
+
+    optV = optVal ( _sM_minReadLengthName );
+    if ( optV . exist () ) {
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_minReadLengthName + "\" values");
+        }
+
+        _M_minReadLength = optV . uint64Val ();
+    }
+
+    _M_category = Read :: all;
+    optV = optVal ( _sM_categoryName );
+    if ( optV . exist () ) {
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_categoryName + "\" values");
+        }
+
+        String __v = optV . val ();
+
+        while ( true ) {
+            if ( __v == "fullyAligned" ) {
+                _M_category = Read :: fullyAligned;
+                break;
+            }
+
+            if ( __v == "partiallyAligned" ) {
+                _M_category = Read :: partiallyAligned;
+                break;
+            }
+
+            if ( __v == "aligned" ) {
+                _M_category = Read :: aligned;
+                break;
+            }
+
+            if ( __v == "unaligned" ) {
+                _M_category = Read :: unaligned;
+                break;
+            }
+
+            if ( __v == "all" ) {
+                _M_category = Read :: all;
+                break;
+            }
+
+            throw ErrorMsg ( String ( "__customParse: ERROR: Invalid value \"" + __v + "\" for option \"" + _sM_categoryName + "\"" ) );
+        }
+    }
+
+    _M_fasta = 0;
+    optV = optVal ( _sM_fastaName );
+    if ( optV . exist () ) {
+        if ( optV . valCount () != 1 ) {
+            throw ErrorMsg ( String ( "__custromParse: ERROR: Too many \"" ) + _sM_fastaName + "\" values");
+        }
+
+        _M_fasta = optV . uint64Val ();
+    }
+
+    _M_legacyReport = optVal ( _sM_legacyReportName ) . exist ();
+
+}   /* DumpArgs :: __customParse () */
+
+}; /* namespace ngs */
+
+/*))
+ //  KMain, and all other
+((*/
+
+using namespace ngs;
+
+const char UsageDefaultName[] = "fq-d";
+
+rc_t CC
+UsageSummary ( const char * progname )
+{
+        /*) Standard usage of that program
+         (*/
+    return KOutMsg (
+                "\n"
+                "Usage:\n"
+                "  %s [Options] <Accession>\n"
+                "\n"
+                "\n"
+                "Use option --help for more information\n"
+                "\n",
+                progname
+                );
+}
+
+rc_t CC
+Usage ( const Args * a )
+{
+    if ( a == NULL ) {
+        throw ngs :: ErrorMsg ( "Usage: NULL args passed" );
+    }
+
+    const char * prog;
+
+    if ( ArgsProgram ( a, NULL, & prog ) != 0 ) {
+        throw ngs :: ErrorMsg ( "Usage: Infalid args passed" );
+    }
+
+    UsageSummary ( prog );
+
+    KOutMsg ( "OPTIONS:\n" );
+
+    HelpOptionsStandard ();
+
+    AArgs * TheArgs = AArgs :: __getArgs ( const_cast < Args * > ( a ) );
+
+    if ( TheArgs == NULL ) {
+        throw ngs :: ErrorMsg ( "Usage: Using unregistered usage" );
+    }
+
+    size_t c = TheArgs -> optDefCount ();
+    for ( size_t i = 0; i < c; i ++ ) {
+        const AOptDef & o = TheArgs -> optDef ( i );
+
+        const char * c [] = { NULL, NULL };
+        c [ 0 ] = o . getHlp ();
+
+        HelpOptionLine (
+                        o . getAliases (),
+                        o . getName (),
+                        o . getParam (),
+                        c
+                        );
+
+    }
+
+    return 0;
+}
+
+static void run ( const DumpArgs & TheArgs );
+
+rc_t
+KMain ( int argc, char * argv [] )
+{
+    try {
+        DumpArgs TheArgs;
+
+        try {
+            TheArgs . init ( true );
+            TheArgs . parse ( argc, argv );
+        }
+        catch ( ... ) {
+            UsageSummary ( TheArgs . prog () . c_str () );
+            throw;
+        }
+
+        if ( ! TheArgs . good () ) {
+            TheArgs . usage ();
+
+            return 1;
+        }
+
+        run ( TheArgs );
+
+        TheArgs . dispose ();
+    }
+    catch ( std :: exception & E ) {
+        std :: cerr << "Exception handled '" << E.what () << "'" << std :: endl;
+
+        return 1;
+    }
+    catch ( ... ) {
+        std :: cerr << "UNKNOWN exception handled" << std :: endl;
+
+        return 2;
+    }
+
+    return 0;
+}   /* KMain () */
+
+static
+void
+setupFilters ( AFilters & Filters, const DumpArgs & TheArgs )
+{
+    if ( TheArgs . minReadLength () != 0 ) {
+        Filters . addLengthFilter ( TheArgs . minReadLength () );
+    }
+}   /* setupFilters () */
+
+static
+void
+dumpFastQ (
+        int64_t SpotId,
+        const ngs :: String & CollectionName,
+        const ReadIterator & Iterator
+)
+{
+        /*)  We do not check values for arguments validity!
+         (*/
+    StringRef ReadName = Iterator . getReadName ();
+    StringRef Bases = Iterator . getReadBases ();
+    StringRef Qualities = Iterator . getReadQualities ();
+
+        /*)  First, we are doint base header
+         (*/
+    kout << "@"
+        << CollectionName
+        << '.'
+        << SpotId
+        << ' '
+        << ReadName
+        << " length="
+        << Bases . size ()
+        << '\n'
+        ;
+
+        /*)  Second is going base itsefl
+         (*/
+    kout << Bases
+        << '\n'
+        ;
+
+        /*)  Third, header for qualities
+         (*/
+    kout << '+'
+        << CollectionName
+        << '.'
+        << SpotId
+        << ' '
+        << ReadName
+        << " length="
+        << Qualities . size ()
+        << '\n'
+        ;
+
+        /*)  Finally there are qualities
+         (*/
+    kout << Qualities
+        << '\n'
+        ;
+}   /* dumpFastQ () */
+
+static
+void
+dumpFastA (
+        int64_t SpotId,
+        const ngs :: String & CollectionName,
+        const ReadIterator & Iterator,
+        uint64_t Width
+)
+{
+        /*)  We do not check values for arguments validity!
+         (*/
+    StringRef ReadName = Iterator . getReadName ();
+    StringRef Bases = Iterator . getReadBases ();
+
+    uint64_t __l = Bases . size ();
+
+        /*)  First, we are doing base header
+         (*/
+    kout << '>'
+        << CollectionName
+        << '.'
+        << SpotId
+        << ' '
+        << ReadName
+        << " length="
+        << __l
+        << '\n'
+        ;
+
+        /*)  Second is going base itself by width
+         (*/
+
+    uint64_t __p = 0;
+    const char * __s = Bases . data ();
+
+
+    if ( 0 < Width ) {
+        while ( __p < __l ) {
+            uint64_t __t = std :: min ( Width, __l - __p );
+
+            kout << std :: string ( __s, ( std :: string :: size_type ) __p, ( std :: string :: size_type ) __t ) << "\n" ;
+
+            __p += __t;
+        }
+    }
+    else {
+        kout << __s << "\n" ;
+    }
+
+}   /* dumpFastA () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+static
+void
+run ( const DumpArgs & TheArgs )
+{
+    if ( ! TheArgs . good () ) {
+        throw ErrorMsg ( "Invalid arguments" );
+    }
+
+    ngs :: String Acc ( TheArgs . accession () . c_str () );
+    ReadCollection RCol = ncbi :: NGS :: openReadCollection ( Acc );
+
+    int64_t minSpot = TheArgs . minSpotId ();
+    int64_t maxSpot = TheArgs . maxSpotId ();
+
+    if ( minSpot == 0 ) {
+        minSpot = 1;
+    }
+
+    if ( maxSpot == 0 ) {
+        maxSpot = RCol . getReadCount ();
+    }
+
+    if ( maxSpot < minSpot ) {
+        int64_t Id = minSpot;
+        minSpot = maxSpot;
+        maxSpot = Id;
+    }
+
+    ReadIterator Iterator = RCol.getReadRange (
+                                            minSpot,
+                                            maxSpot - minSpot + 1,
+                                            TheArgs . category ()
+                                            );
+
+    ngs :: String ReadCollectionName = RCol.getName ();
+
+    AFilters Filters ( TheArgs . accession () );
+    setupFilters ( Filters, TheArgs );
+
+    for ( int64_t llp = TheArgs . minSpotId () ; Iterator.nextRead (); llp ++ ) {
+
+        if ( Filters . checkIt ( Iterator ) ) {
+            if ( TheArgs . fastaDump () ) {
+                dumpFastA ( llp, ReadCollectionName, Iterator, TheArgs . fastaDumpWidth () );
+            }
+            else { 
+                dumpFastQ ( llp, ReadCollectionName, Iterator );
+            }
+        }
+    }
+
+    kout.flush ();
+
+    std :: cerr << Filters . report ( TheArgs . legacyReport () );
+
+}   /* run () */
+
diff --git a/tools/fastq-dump/filters.cpp b/tools/fastq-dump/filters.cpp
new file mode 100644
index 0000000..710a689
--- /dev/null
+++ b/tools/fastq-dump/filters.cpp
@@ -0,0 +1,300 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sysalloc.h>
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <ngs/ReadCollection.hpp>
+
+#include <sstream>
+
+#include "filters.hpp"
+
+using namespace std;
+using namespace ngs;
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*))
+ //     AFilter
+((*/
+AFilter :: AFilter ()
+:   _M_rejected ( 0 )
+{
+}   /* AFilter :: AFilter () */
+
+AFilter :: ~AFilter ()
+{
+    _M_rejected = 0;
+}   /* AFilter :: ~AFilter () */
+
+bool
+AFilter :: checkIt ( const ReadIterator & pos ) const
+{
+    throw ErrorMsg ( ":: checkIt() - is not implemented for class" );
+}   /* AFilter :: checkIt () */
+
+String
+AFilter :: report () const
+{
+    if ( _M_rejected != 0 ) {
+        stringstream __s;
+        __s << "Rejected "
+            << _M_rejected
+            << ( _M_rejected == 1 ? " SPOT" : " SPOTS" )
+            ;
+        if ( reason () . empty () ) {
+            __s << " reason unknown";
+        }
+        else {
+            __s << " because " << reason ();
+        }
+
+        return __s . str ();
+    }
+    return "";
+}   /* AFilter :: report () */
+
+String
+AFilter :: reason () const
+{
+    return "";
+}   /* AFilter :: reason () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* Place for some predefined filters                             */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*))
+ //     Num spots readed filter ... needed as counter only
+((*/
+class __NReadFilter : public AFilter {
+public :
+    __NReadFilter ( const String & source );
+
+    bool checkIt ( const ReadIterator & Rit ) const;
+
+    String report () const;
+
+private :
+    String _M_source;
+};
+
+__NReadFilter :: __NReadFilter ( const string & source )
+:   _M_source ( source )
+{
+}   /* __NReadFilter :: __NReadFilter () */
+
+bool
+__NReadFilter :: checkIt ( const ReadIterator & ) const
+{
+    reject ();
+
+    return true;
+}   /* __NReadFilter :: checkIt () */ 
+
+String
+__NReadFilter :: report () const
+{
+    stringstream __s;
+
+    __s << "Read "
+        << rejected ()
+        << ( rejected () == 1 ? " spot" : " spots" )
+        ;
+
+    if ( ! _M_source . empty () ) {
+        __s << " for " << _M_source;
+    }
+
+    return __s . str ();
+}   /* __NReadFilter :: report () */
+
+/*))
+ //     Num spots readed filter ... needed as counter only
+((*/
+class __SpotLengthFilter : public AFilter {
+public :
+    __SpotLengthFilter ( uint64_t MinLength );
+
+    bool checkIt ( const ReadIterator & Rit ) const;
+
+protected :
+    String reason () const;
+
+private :
+    uint64_t _M_minLength;
+};
+
+__SpotLengthFilter :: __SpotLengthFilter ( uint64_t MinLength )
+:   _M_minLength ( MinLength )
+{
+}   /* __SpotLengthFilter :: __SpotLengthFilter () */
+
+bool
+__SpotLengthFilter :: checkIt ( const ReadIterator & Rit ) const
+{
+    uint64_t __l = Rit . getReadBases () . size ();
+    if ( __l < _M_minLength ) {
+        reject ();
+
+        return false;
+    }
+
+    return true;
+}   /* __SpotLengthFilter :: checkIt () */ 
+
+String
+__SpotLengthFilter :: reason () const
+{
+    stringstream __s;
+
+    __s << "SPOTLEN < " << _M_minLength;
+
+    return __s . str ();
+}   /* __SpotLengthFilter :: reason () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+/*))
+ //     AFilters
+((*/
+AFilters :: AFilters ( const String & source )
+:   _M_source ( source )
+,   _M_confirmed ( 0 )
+{
+    init ();
+}   /* AFilters :: AFilters () */
+
+AFilters :: ~AFilters ()
+{
+    try {
+        dispose ();
+    }
+    catch ( ... ) {
+        /* Ha! */
+    }
+}   /* AFitlers :: ~AFilters () */
+
+void
+AFilters :: init ()
+{
+        /* Just dispose all previous content
+         */
+    dispose ();
+
+        /* Here we should add some mondaytory filters
+         */
+    addFilter ( new __NReadFilter ( _M_source ) );
+}   /* AFilters :: init () */
+
+void
+AFilters :: dispose ()
+{
+    for ( TVecI __b = _M_filters . begin (); __b != _M_filters . end (); __b ++ ) {
+        AFilter * __f = * __b;
+        if ( __f != NULL ) {
+            delete __f;
+        }
+        * __b = NULL;
+    }
+    _M_filters . clear ();
+
+    _M_confirmed = 0;
+}   /* AFilters :: dispose () */
+
+bool
+AFilters :: checkIt ( const ReadIterator & Rit ) const
+{
+    bool __r = __checkIt ( Rit );
+
+    if ( __r ) {
+        _M_confirmed ++;
+    }
+
+    return __r;
+}   /* AFilters :: checkIt () */
+
+bool
+AFilters :: __checkIt ( const ReadIterator & Rit ) const
+{
+    for ( TVecCI __b = _M_filters . begin (); __b != _M_filters . end (); __b ++ ) {
+        AFilter * __f = * __b;
+
+        if ( __f != NULL ) {
+            if ( ! __f -> checkIt ( Rit ) ) {
+                return false;
+            }
+        }
+    }
+
+    return true;
+}   /* AFilters :: __checkIt () */
+
+void
+AFilters :: addFilter ( AFilter * Flt )
+{
+    if ( Flt != NULL ) {
+        _M_filters . insert ( _M_filters . end (), Flt );
+    }
+}   /* AFilters :: addFilter () */
+
+void
+AFilters :: addLengthFilter ( uint64_t minLength )
+{
+    addFilter ( new __SpotLengthFilter ( minLength ) );
+}   /* AFilters :: addLengthFilter () */
+
+String
+AFilters :: report ( bool legacyStyle ) const
+{
+    stringstream __s;
+
+    if ( ! legacyStyle ) {
+        for ( TVecCI __b = _M_filters . begin (); __b != _M_filters . end (); __b ++ ) {
+            AFilter * __f = * __b;
+            if ( __f != NULL ) {
+                String __r = __f -> report ();
+                if ( ! __r . empty () ) {
+                    __s << __r << "\n";
+                }
+            }
+        }
+    }
+
+    __s << "Written " << _M_confirmed << ( _M_confirmed == 1 ? " spot" : " spots" ) << " for " << _M_source << "\n";
+
+    if ( legacyStyle ) {
+        __s << "Written " << _M_confirmed << ( _M_confirmed == 1 ? " spot" : " spots" ) << " total\n";
+    }
+
+    return __s . str ();
+}   /* AFilters :: report () */
diff --git a/tools/fastq-dump/filters.hpp b/tools/fastq-dump/filters.hpp
new file mode 100644
index 0000000..df58c56
--- /dev/null
+++ b/tools/fastq-dump/filters.hpp
@@ -0,0 +1,114 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_outpost_filters_
+#define _h_outpost_filters_
+
+#include <vector>
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <ngs/ErrorMsg.hpp>
+#include <ngs/StringRef.hpp>
+
+/*)))   Namespace
+ (((*/
+namespace ngs {
+
+/*))
+ // Some forwards
+((*/
+class ReadIterator;
+
+class AFilter {
+public :
+    AFilter ();
+    virtual ~AFilter ();
+
+    virtual bool checkIt ( const ReadIterator & pos ) const = 0;
+
+    virtual String report () const;
+
+protected :
+        /* That method should be called from 'checkIt()' for stat
+         */
+    inline void reject () const { _M_rejected ++; };
+    inline uint64_t rejected () const { return _M_rejected; };
+
+    virtual String reason () const;
+
+private :
+    mutable uint64_t _M_rejected;
+
+};  /* class AFilter */
+
+class AFilters {
+public :
+    typedef std :: vector < AFilter * > TVec;
+    typedef TVec :: const_iterator TVecCI;
+    typedef TVec :: iterator TVecI;
+
+public :
+    AFilters ( const String & source );
+    virtual ~AFilters ();
+
+    bool checkIt ( const ReadIterator & pos ) const;
+
+        /* Adds new user_defined filter ...
+         */
+    void addFilter ( AFilter * pFilter );
+
+        /* There are some standard predefined filters to add
+         */
+    void addLengthFilter ( uint64_t minLength );
+
+        /* Misc stuff
+         */
+    inline const String & source () const { return _M_source ; }
+
+    String report ( bool legacyStyle = false ) const;
+
+private :
+    void init ();
+    void dispose ();
+
+    bool __checkIt ( const ReadIterator & pos ) const;
+
+private :
+    String _M_source;
+
+    TVec _M_filters;
+
+    mutable uint64_t _M_confirmed;
+};  /* class AFilters */
+
+/*)))   Namespace
+ (((*/
+}; /* namespace ngs */
+
+#endif /* _h_outpost_filters_ */
diff --git a/tools/fastq-dump/koutstream b/tools/fastq-dump/koutstream
new file mode 100644
index 0000000..5967f6f
--- /dev/null
+++ b/tools/fastq-dump/koutstream
@@ -0,0 +1,324 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_outpost_koutstream_
+#define _h_outpost_koutstream_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <ios>
+#include <streambuf>
+#include <ostream>
+
+#include <klib/out.h>
+#include <klib/text.h>
+
+/*)))
+ ///    Something weird. That class will throw exception if any
+ \\\    error will happen. Overwise, You may comment line to return
+ ///    error code instead.
+(((*/
+#define _DO_ALWAYS_THROW_EXCEPTION
+
+#ifdef _DO_ALWAYS_THROW_EXCEPTION
+    /* Using that forward to avoid conflicts with String */
+extern "C" {
+    KLIB_EXTERN rc_t CC string_printf (
+                                    char *dst,
+                                    size_t bsize,
+                                    size_t *num_writ,
+                                    const char *fmt,
+                                    ...
+                                    );
+}
+#endif /* _DO_ALWAYS_THROW_EXCEPTION */
+
+/*\
+|*| That address is responsible for buffered/unbuffered basic_koutbuf
+|*| Uncomment if You does not need buffering on the basic_koutbuf level
+\*/
+
+/*\
+#define _DO_USE_UNBUFFERED_KOUTBUF
+\*/
+
+/*))))
+ <<<<   Lurics:
+  >>>>  That file created because Kurt want to wrap KOutMsg to 'stream'
+ <<<<
+  >>>>  Important notice ... because it is KOutMsg, that class will
+ <<<<   associate output sequence only with KOutMsg primitive.
+  >>>>  That file contains :
+ <<<<       basic_koutbuf    - buffer
+  >>>>      basic_koutstream - stream
+ <<<<       kout - stream forward
+  >>>>
+ ((((*/
+
+/*)))
+ ///    I think that is valild name for namespace ...
+(((*/
+namespace ngs {
+
+/*))
+ // Buffer
+((*/
+
+template < typename _CharT, typename _Traits >
+class basic_koutbuf
+    : public std :: basic_streambuf < _CharT, _Traits > {
+
+public :
+    // Typos
+    typedef _CharT      char_type;
+    typedef _Traits     traits_type;
+
+    typedef typename traits_type::int_type int_type;
+
+    typedef std :: allocator < char_type > allocator_type;
+    typedef std :: basic_streambuf < char_type, traits_type > __streambuf_type;
+    typedef basic_koutbuf < char_type, traits_type > __koutbuf_type;
+
+protected :
+
+        /*\ This is not only change 
+        \*/
+#ifdef _DO_USE_UNBUFFERED_KOUTBUF
+    static const std :: streamsize _cM_buffer_size = 256;
+#else /* _DO_USE_UNBUFFERED_KOUTBUF */
+    static const std :: streamsize _cM_buffer_size = 4096 * 32;
+#endif /* _DO_USE_UNBUFFERED_KOUTBUF */
+
+    char_type * _M_char;
+
+public :
+
+        /* Constructor/destructor */
+    basic_koutbuf ()
+        : __streambuf_type ()
+        , _M_char ( allocator_type () . allocate ( _cM_buffer_size ) )
+        {
+            this -> setbuf ( _M_char, _cM_buffer_size );
+            __setp ();
+        };
+
+    ~basic_koutbuf ()
+        {
+            try {
+                __sync (); // ?? should we check retval?
+            }
+            catch ( ... ) {
+                // ???? what we should do here ????
+            }
+
+            try {
+                if ( _M_char != NULL ) {
+                    allocator_type () . deallocate (
+                                                    _M_char,
+                                                    _cM_buffer_size
+                                                    );
+                }
+            }
+            catch ( ... ) {
+                // ???? nothing to do 
+            }
+
+            _M_char = NULL;
+        };
+
+#ifdef _DO_USE_UNBUFFERED_KOUTBUF
+    std :: streamsize xsputn ( const char_type * __s, std :: streamsize __n )
+        {
+            if ( __sync () == - 1 ) {
+                return 0;
+            }
+
+            return __koutmsg ( __s, __n );
+        };
+#else /* _DO_USE_UNBUFFERED_KOUTBUF */
+    std :: streamsize xsputn ( const char_type * __s, std :: streamsize __n )
+        {
+            std :: streamsize __a = this -> epptr () - this -> pptr ();
+			
+            if ( __n < __a ) {
+                    /*)  Here we are adding string to a buffer
+                     (*/
+                traits_type :: copy ( this -> pptr (), __s, __n );
+
+                this -> pbump ( __n );
+            }
+            else {
+                    /*) We are not too effective ...
+                     (*/
+                if ( __sync () == - 1 ) {
+                    return 0;
+                }
+
+                std :: streamsize __q = 0;
+
+                while ( __q < __n ) {
+                    __a = this -> epptr () - this -> pptr ();
+                    std :: streamsize __c = std :: min (
+                                                        __n - __q,
+                                                        __a
+                                                        );
+
+                    traits_type :: copy (
+                                    this -> pbase (),
+                                    __s + __q,
+                                    __c
+                                    );
+                    this -> pbump ( __c );
+
+                    if ( __sync () == - 1 ) {
+                        return 0;
+                    }
+
+                    __q += __c;
+                }
+            }
+
+                /*) We do never fail :lol:
+                 (*/
+            return __n;
+        };
+#endif /* _DO_USE_UNBUFFERED_KOUTBUF */
+
+    int sync ()
+        {
+            return __sync ();
+        };
+
+protected :
+
+    int __sync ()
+        {
+            int __ret = 0;
+
+            std :: streamsize __l = this -> pptr () - this -> pbase ();
+
+            if ( 0 < __l ) {
+                __ret = __koutmsg ( this -> pbase (), __l );
+
+                    /*\
+                    |*| Don't really know if we shoud check result here
+                    \*/
+                __setp ();
+            }
+
+            return __ret;
+        };
+
+    int __koutmsg ( const char_type * __s, std :: streamsize __n )
+        {
+            if ( 0 < __n ) {
+                :: String __t;
+
+                StringInit ( ( & __t ), __s, __n, __n );
+
+                rc_t __rc = KOutMsg ( "%S", & __t );
+                if ( __rc != 0 ) {
+
+#ifdef _DO_ALWAYS_THROW_EXCEPTION
+
+                    /* That was requested by Kurt: I shoud throw
+                       an exception instead of sending overflow
+                       error
+                     */
+                    char __m [ 4096 ];
+                    size_t __n = 0;
+                    string_printf ( __m, sizeof ( __m ), & __n, "%R", __rc );
+                    throw ErrorMsg ( __m );
+#else
+
+                    __n = - 1;
+#endif /* _DO_ALWAYS_THROW_EXCEPTION */
+                }
+            }
+
+            return __n;
+        };
+
+    void __setp ()
+        {
+                /*) the only valid method to set _M_out_cur to zero
+                 /  also, one char reserved for a zero
+                (*/
+            this -> setp ( _M_char, _M_char + _cM_buffer_size );
+        };
+
+};  /* class basic_koutbuf */
+
+/*))
+ // Stream
+((*/
+template < typename _CharT, typename _Traits >
+class basic_koutstream :
+    public std :: basic_ostream < _CharT, _Traits > {
+
+public :
+    // Typos
+    typedef _CharT      char_type;
+    typedef _Traits     traits_type;
+
+    typedef typename traits_type::int_type int_type;
+
+    typedef basic_koutbuf < char_type, traits_type > __koutbuf_type;
+    typedef std :: basic_ostream < char_type, traits_type > __ostream_type;
+    typedef basic_koutstream < char_type, traits_type > __koutstream_type;
+
+private :
+
+    __koutbuf_type _M_koutbuf;
+
+public :
+
+        /**
+         *  Default constructor, and the only constructor
+         **/
+    basic_koutstream () : __ostream_type ( 0 ), _M_koutbuf ()
+        {
+            this -> init ( & _M_koutbuf );
+        };
+
+    virtual ~basic_koutstream ()
+        {
+        };
+
+};  /* class basic_koutstream */
+
+/*)))
+ ///  Forwards
+(((*/
+typedef basic_koutstream<char, std :: char_traits < char > > koutstream;
+
+koutstream kout;
+
+}   /* namespace ngs */
+
+#endif /* _h_outpost_koutstream_ */
diff --git a/tools/fastq-loader/.gitignore b/tools/fastq-loader/.gitignore
new file mode 100644
index 0000000..f3b5a01
--- /dev/null
+++ b/tools/fastq-loader/.gitignore
@@ -0,0 +1 @@
+fastq-grammar.output
diff --git a/tools/fastq-loader/Makefile b/tools/fastq-loader/Makefile
new file mode 100644
index 0000000..b66001e
--- /dev/null
+++ b/tools/fastq-loader/Makefile
@@ -0,0 +1,166 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/fastq-loader
+
+INT_LIBS = \
+	libfastqloader
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+    latf-load
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) 
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# clean
+#
+INTERM_SRC = \
+	$(SRCDIR)/fastq-lex.c \
+	$(SRCDIR)/fastq-grammar.c \
+	$(SRCDIR)/fastq-tokens.h 
+
+clean: stdclean
+
+.PHONY: clean
+
+.PRECIOUS: $(INTERM_SRC)
+
+#-------------------------------------------------------------------------------
+# fastq
+#
+$(ILIBDIR)/libfastqloader: $(ILIBDIR)/libfastqloader.$(LIBX)
+
+FASTQ_SRC = \
+    common-writer \
+    sequence-writer \
+    common-reader \
+    fastq-reader \
+	fastq-grammar \
+	fastq-lex
+
+# flex/bison should only be invoked manually in an environment that ensures the correct versions:
+# bison 2.5, flex 2.5.35
+bison:
+	bison --warnings=error -o $(SRCDIR)/fastq-grammar.c --defines=$(SRCDIR)/fastq-tokens.h -v --no-lines $(SRCDIR)/fastq-grammar.y
+
+ifeq (dbg,$(BUILD))
+    FLEX_DEBUG = -d
+endif    
+
+flex:    
+	flex $(FLEX_DEBUG) -DYY_BUF_SIZE=16777216 -t $(SRCDIR)/fastq-lex.l | grep -v '^#line' > $(SRCDIR)/fastq-lex.c
+
+FASTQ_OBJ = \
+	$(addsuffix .$(LOBX),$(FASTQ_SRC))
+
+FASTQ_LIB = \
+    -lload \
+	-dkfs \
+	-dklib \
+
+ifneq (win,$(OS))
+    FASTQ_LIB += -dkq
+endif
+
+$(ILIBDIR)/libfastqloader.$(SHLX): $(INTERM_SRC) $(FASTQ_OBJ)
+	$(LD) --dlib -o $@ $^ $(FASTQ_LIB)
+
+$(ILIBDIR)/libfastqloader.$(LIBX): $(INTERM_SRC) $(FASTQ_OBJ)
+	$(LD) --slib -o $@ $^ $(FASTQ_LIB)
+
+#------------------------------------------------------------------------------
+# fastq-load.3
+#
+FASTQ_LOAD_SRC = \
+	fastq-loader \
+    loader-imp \
+    common-writer \
+    sequence-writer \
+    common-reader \
+	$(FASTQ_SRC)
+
+FASTQ_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_LOAD_SRC))
+
+FASTQ_LOADER_LIB = \
+	-skapp \
+	-stk-version \
+    -sload \
+	-sncbi-wvdb \
+	-sm
+
+$(BINDIR)/latf-load: $(FASTQ_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(FASTQ_LOADER_LIB)
+
diff --git a/tools/fastq-loader/common-reader-priv.h b/tools/fastq-loader/common-reader-priv.h
new file mode 100644
index 0000000..26a8e19
--- /dev/null
+++ b/tools/fastq-loader/common-reader-priv.h
@@ -0,0 +1,300 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_priv_
+#define _h_common_reader_priv_
+
+#include <loader/common-reader.h>
+
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*TODO: add module rcLoader to rc.h? */
+#define RC_MODULE rcAlign
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+#ifndef READERFILE_IMPL
+    #define READERFILE_IMPL struct ReaderFile
+#endif
+
+typedef struct ReaderFile_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *destroy   )                 ( READERFILE_IMPL* self );
+    rc_t ( *getRecord )                 ( const READERFILE_IMPL *self, const Record** result );
+    float ( *getProportionalPosition )  ( const READERFILE_IMPL *self );
+    rc_t ( *getReferenceInfo )          ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+    /* end minor version == 0 */
+
+} ReaderFile_vt_v1;
+
+typedef union ReaderFile_vt {
+    ReaderFile_vt_v1* v1;
+} ReaderFile_vt;
+
+struct ReaderFile
+{
+    ReaderFile_vt vt;
+    KRefcount refcount;
+    char* pathname;
+};
+
+/* Init
+ *  polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( READERFILE_IMPL *self );
+
+/* Whack
+ *  destructor
+ */
+rc_t CC ReaderFileWhack ( ReaderFile *self );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+#ifndef RECORD_IMPL
+    #define RECORD_IMPL struct Record
+#endif
+
+typedef struct Record_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *addRef  ) ( const RECORD_IMPL* self );
+    rc_t ( *release ) ( const RECORD_IMPL* self );
+    rc_t ( *getSequence  ) ( const RECORD_IMPL *self, const Sequence** result );
+    rc_t ( *getAlignment ) ( const RECORD_IMPL *self, const Alignment** result );
+    rc_t ( *getRejected  ) ( const RECORD_IMPL *self, const Rejected** result );
+    /* end minor version == 0 */
+
+} Record_vt_v1;
+
+typedef union Record_vt {
+    Record_vt_v1* v1;
+} Record_vt;
+
+struct Record
+{
+    Record_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+#ifndef SEQUENCE_IMPL
+    #define SEQUENCE_IMPL struct Sequence
+#endif
+
+typedef struct Sequence_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *addRef  ) ( const SEQUENCE_IMPL* self );
+    rc_t ( *release ) ( const SEQUENCE_IMPL* self );
+
+    rc_t ( *getReadLength   )   ( const SEQUENCE_IMPL *self, uint32_t *length );
+    rc_t ( *getRead         )   ( const SEQUENCE_IMPL *self, char *sequence );
+    rc_t ( *getRead2        )   ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+    rc_t ( *getQuality      )   ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+    rc_t ( *getSpotGroup    )   ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+    rc_t ( *getSpotName     )   ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+    bool ( *isColorSpace    )   ( const SEQUENCE_IMPL *self );
+    rc_t ( *getCSKey        )   ( const SEQUENCE_IMPL *self, char cskey[1] );
+    rc_t ( *getCSReadLength )   ( const SEQUENCE_IMPL *self, uint32_t *length );
+    rc_t ( *getCSRead       )   ( const SEQUENCE_IMPL *self, char *sequence );
+    rc_t ( *getCSQuality    )   ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+                          
+    bool ( *wasPaired     )     ( const SEQUENCE_IMPL *self );
+    int  ( *orientationSelf )   ( const SEQUENCE_IMPL *self );
+    int  ( *orientationMate )   ( const SEQUENCE_IMPL *self );
+    bool ( *isFirst       )     ( const SEQUENCE_IMPL *self );
+    bool ( *isSecond      )     ( const SEQUENCE_IMPL *self );
+    bool ( *isDuplicate   )     ( const SEQUENCE_IMPL *self ); 
+    bool ( *isLowQuality   )    ( const SEQUENCE_IMPL *self ); 
+
+    rc_t ( *getTI ) ( const SEQUENCE_IMPL *self, uint64_t *ti );
+    
+    /* end minor version == 0 */
+
+} Sequence_vt_v1;
+
+typedef union Sequence_vt {
+    Sequence_vt_v1* v1;
+} Sequence_vt;
+
+struct Sequence
+{
+    Sequence_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+#ifndef ALIGNMENT_IMPL
+    #define ALIGNMENT_IMPL struct Alignment
+#endif
+
+typedef struct Alignment_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const ALIGNMENT_IMPL* self );
+    rc_t ( *release ) ( const ALIGNMENT_IMPL* self );
+    
+    rc_t ( *getRefSeqId         )   ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+    rc_t ( *getMateRefSeqId     )   ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+    rc_t ( *getPosition         )   ( const ALIGNMENT_IMPL *self, int64_t *pos );
+    rc_t ( *getMatePosition     )   ( const ALIGNMENT_IMPL *self, int64_t *pos );
+    rc_t ( *getMapQuality       )   ( const ALIGNMENT_IMPL *self, uint8_t *qual );
+    rc_t ( *getAlignmentDetail  )   ( const ALIGNMENT_IMPL *self, AlignmentDetail *rslt, uint32_t count, uint32_t *actual, int32_t *firstMatch, int32_t *lastMatch );
+    rc_t ( *getAlignOpCount     )   ( const ALIGNMENT_IMPL *self, uint32_t *n );
+    rc_t ( *getInsertSize       )   ( const ALIGNMENT_IMPL *self, int64_t *size );
+    rc_t ( *getCG               )   ( const ALIGNMENT_IMPL *self, const CGData** result );
+    rc_t ( *getBAMCigar         )   ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length );
+    
+    bool ( *isSecondary ) ( const ALIGNMENT_IMPL *self ); 
+    
+    /* end minor version == 0 */
+
+} Alignment_vt_v1;
+
+typedef union Alignment_vt {
+    Alignment_vt_v1* v1;
+} Alignment_vt;
+
+struct Alignment
+{
+    Alignment_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ CGData
+ */
+#ifndef CGDATA_IMPL
+    #define CGDATA_IMPL struct CGData
+#endif
+
+typedef struct CGData_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const CGDATA_IMPL* self );
+    rc_t ( *release ) ( const CGDATA_IMPL* self );
+
+    rc_t ( * getSeqQual )       ( const CGDATA_IMPL* self, char sequence[/* 35 */], uint8_t quality[/* 35 */] );
+    rc_t ( * getCigar )         ( const CGDATA_IMPL* self, uint32_t *cigar, uint32_t cig_max, uint32_t *cig_act );
+    rc_t ( * getAlignGroup )    ( const CGDATA_IMPL* self, char buffer[], size_t max_size, size_t *act_size);
+    /* end minor version == 0 */
+
+} CGData_vt_v1;
+
+typedef union CGData_vt {
+    CGData_vt_v1* v1;
+} CGData_vt;
+
+struct CGData
+{
+    CGData_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Rejected
+ */
+
+struct Rejected {
+    KRefcount   refcount;
+
+    String      source;
+    const char* message;
+    uint64_t    line;
+    uint64_t    column;
+    bool        fatal;
+};
+
+rc_t CC RejectedInit ( Rejected *self );
+
+/*--------------------------------------------------------------------------
+ ReferenceInfo
+ */
+
+#ifndef REFERENCEINFO_IMPL
+    #define REFERENCEINFO_IMPL struct ReferenceInfo
+#endif
+
+typedef struct ReferenceInfo_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const REFERENCEINFO_IMPL* self );
+    rc_t ( *release ) ( const REFERENCEINFO_IMPL* self );
+
+    rc_t ( *getRefSeqCount )        ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+    rc_t ( *getRefSeq )             ( const REFERENCEINFO_IMPL* self, uint32_t n, ReferenceSequence* result );
+    rc_t ( *getReadGroupCount )     ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+    rc_t ( *getReadGroup )          ( const REFERENCEINFO_IMPL* self, unsigned n, ReadGroup* result );
+    rc_t ( *getReadGroupByName )    ( const REFERENCEINFO_IMPL* self, const char* name, ReadGroup* result );
+
+    /* end minor version == 0 */
+
+} ReferenceInfo_vt_v1;
+
+typedef union ReferenceInfo_vt {
+    ReferenceInfo_vt_v1* v1;
+} ReferenceInfo_vt;
+
+struct ReferenceInfo
+{
+    ReferenceInfo_vt vt;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_priv_ */
diff --git a/tools/fastq-loader/common-reader.c b/tools/fastq-loader/common-reader.c
new file mode 100644
index 0000000..cde2bcf
--- /dev/null
+++ b/tools/fastq-loader/common-reader.c
@@ -0,0 +1,614 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <loader/common-reader-priv.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <klib/rc.h>
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ReaderFile" ) )
+        {
+        case krefLimit:
+            return RC ( RC_MODULE, rcFile, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+rc_t CC ReaderFileRelease ( const ReaderFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ReaderFile" ) )
+        {
+        case krefWhack:
+            return self->vt.v1->destroy( (ReaderFile *)self );
+        case krefNegative:
+            return RC ( RC_MODULE, rcFile, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result)
+{
+    assert(self);
+    assert(result);
+    return self->vt.v1->getRecord( self, result );
+}
+
+float CC ReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+    assert(self);
+    assert(self->vt.v1->getProportionalPosition);
+    return self->vt.v1->getProportionalPosition( self );
+}
+
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result )
+{
+    assert(self);
+    assert(self->vt.v1->getReferenceInfo);
+    return self->vt.v1->getReferenceInfo( self, result );
+}
+
+/* Init
+ *  polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( ReaderFile *self )
+{
+    if ( self == NULL )
+        return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+    KRefcountInit ( & self -> refcount, 1, "ReaderFile", "ReaderFileInit", "");
+
+    self->pathname = NULL;
+
+    return 0;
+}
+
+rc_t CC ReaderFileWhack ( ReaderFile *self )
+{
+    if ( self == NULL )
+        return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+    free( self->pathname );
+
+    return 0;
+}
+
+const char* CC ReaderFileGetPathname ( const ReaderFile *self )
+{
+    if ( self == NULL )
+        return NULL;
+    return self->pathname;
+}
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+rc_t CC RecordAddRef ( const Record *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC RecordRelease ( const Record *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getSequence);
+    return self->vt.v1->getSequence(self, result);
+}
+
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getAlignment);
+    return self->vt.v1->getAlignment(self, result);
+}
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getRejected);
+    return self->vt.v1->getRejected(self, result);
+}
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+rc_t CC SequenceAddRef ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC SequenceRelease ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(length);
+    assert(self->vt.v1->getReadLength);
+    return self->vt.v1->getReadLength(self, length);
+}
+
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    assert(self->vt.v1->getRead);
+    return self->vt.v1->getRead(self, sequence);
+}
+
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop)
+{
+    assert(self);
+    assert(sequence);
+    assert(self->vt.v1->getRead2);
+    return self->vt.v1->getRead2(self, sequence, start, stop);
+}
+
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    assert(self->vt.v1->getQuality);
+    return self->vt.v1->getQuality(self, quality, offset, qualType);
+}
+
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    assert(length);
+    assert(self->vt.v1->getSpotGroup);
+    return self->vt.v1->getSpotGroup(self, name, length);
+}
+
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    assert(length);
+    assert(self->vt.v1->getSpotName);
+    return self->vt.v1->getSpotName(self, name, length);
+}
+
+bool CC SequenceIsColorSpace ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isColorSpace);
+    return self->vt.v1->isColorSpace(self);
+}
+
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] )
+{
+    assert(self);
+    assert(self->vt.v1->getCSKey);
+    return self->vt.v1->getCSKey(self, cskey);
+}
+
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(self->vt.v1->getCSReadLength);
+    return self->vt.v1->getCSReadLength(self, length);
+}
+
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence )
+{
+    assert(self);
+    assert(self->vt.v1->getCSRead);
+    return self->vt.v1->getCSRead(self, sequence);
+}
+
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    assert(self->vt.v1->getCSQuality);
+    return self->vt.v1->getCSQuality(self, quality, offset, qualType);
+}
+
+bool CC SequenceWasPaired     ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->wasPaired);
+    return self->vt.v1->wasPaired(self);
+}
+
+int CC SequenceGetOrientationSelf( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->orientationSelf);
+    return self->vt.v1->orientationSelf(self);
+}
+ 
+int CC SequenceGetOrientationMate( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->orientationMate);
+    return self->vt.v1->orientationMate(self);
+}
+
+bool CC SequenceIsFirst       ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isFirst);
+    return self->vt.v1->isFirst(self);
+}
+
+bool CC SequenceIsSecond      ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isSecond);
+    return self->vt.v1->isSecond(self);
+}
+
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti)
+{
+    assert(self);
+    assert(ti);
+    assert(self->vt.v1->getTI);
+    return self->vt.v1->getTI(self, ti);
+}
+
+bool CC SequenceIsDuplicate( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isDuplicate);
+    return self->vt.v1->isDuplicate(self);
+}
+
+bool CC SequenceIsLowQuality( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isLowQuality);
+    return self->vt.v1->isLowQuality(self);
+}
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+rc_t CC AlignmentAddRef ( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC AlignmentRelease ( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+    assert(self);
+    assert(refSeqId);
+    assert(self->vt.v1->getRefSeqId);
+    return self->vt.v1->getRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+    assert(self);
+    assert(refSeqId);
+    assert(self->vt.v1->getMateRefSeqId);
+    return self->vt.v1->getMateRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos )
+{
+    assert(self);
+    assert(pos);
+    assert(self->vt.v1->getPosition);
+    return self->vt.v1->getPosition(self, pos);
+}
+
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos )
+{
+    assert(self);
+    assert(pos);
+    assert(self->vt.v1->getMatePosition);
+    return self->vt.v1->getMatePosition(self, pos);
+}
+
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual )
+{
+    assert(self);
+    assert(qual);
+    assert(self->vt.v1->getMapQuality);
+    return self->vt.v1->getMapQuality(self, qual);
+}
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+                                      AlignmentDetail *rslt, 
+                                      uint32_t count, 
+                                      uint32_t *actual,
+                                      int32_t *firstMatch, 
+                                      int32_t *lastMatch )
+{
+    assert(self);
+    assert(self->vt.v1->getAlignmentDetail);
+    return self->vt.v1->getAlignmentDetail(self, rslt, count, actual, firstMatch, lastMatch);
+}
+
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n )
+{
+    assert(self);
+    assert(n);
+    assert(self->vt.v1->getAlignOpCount);
+    return self->vt.v1->getAlignOpCount(self, n);
+}
+
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size )
+{
+    assert(self);
+    assert(size);
+    assert(self->vt.v1->getInsertSize);
+    return self->vt.v1->getInsertSize(self, size);
+}
+
+rc_t AlignmentGetCGData ( const ALIGNMENT_IMPL *self, const CGData** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getCG);
+    return self->vt.v1->getCG(self, result);
+}
+
+rc_t AlignmentGetBAMCigar ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length )
+{
+    assert(self);
+    assert(rslt);
+    assert(length);
+    assert(self->vt.v1->getBAMCigar);
+    return self->vt.v1->getBAMCigar(self, rslt, length);
+}
+
+bool AlignmentIsSecondary( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->isSecondary);
+    return self->vt.v1->isSecondary(self);
+}
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC CGDataRelease ( const CGData *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+                           char sequence[/* 35 */],
+                           uint8_t quality[/* 35 */] )
+{
+    assert(self);
+    assert(sequence);
+    assert(quality);
+    assert(self->vt.v1->getSeqQual);
+    return self->vt.v1->getSeqQual(self, sequence, quality); 
+}                       
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+                         uint32_t *cigar,
+                         uint32_t cig_max,
+                         uint32_t *cig_act )
+{
+    assert(self);
+    assert(cigar);
+    assert(cig_act);
+    assert(self->vt.v1->getCigar);
+    return self->vt.v1->getCigar(self, cigar, cig_max, cig_act);
+}                     
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+                              char buffer[],
+                              size_t max_size,
+                              size_t *act_size )
+{
+    assert(self);
+    assert(act_size);
+    assert(self->vt.v1->getAlignGroup);
+    return self->vt.v1->getAlignGroup(self, buffer, max_size, act_size);
+}
+                          
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+rc_t CC RejectedInit ( Rejected *self )
+{
+    KRefcountInit ( & self -> refcount, 1, "Rejected", "RejectedInit", "");
+    StringInit(&self->source, 0, 0, 0);
+    self->message = 0;
+    self->column = 0;
+    self->line = 0;
+    self->fatal = false;
+    return 0;
+}
+
+static rc_t CC RejectedWhack ( const Rejected *self )
+{
+    free( (void*)self->source.addr );
+    free( (void*)self->message );
+    free( (void*)self );
+    return 0;
+}
+
+rc_t CC RejectedAddRef ( const Rejected *self )
+{
+    assert(self);
+    KRefcountAdd( & self->refcount, "Rejected" );
+    /* TODO: handle rc from KRefcountAdd */
+    return 0;
+}
+
+rc_t CC RejectedRelease ( const Rejected *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "Rejected" ) )
+        {
+        case krefWhack:
+            RejectedWhack( self );
+            break;
+        default:
+            /* TODO: handle other values */
+            break;
+        }
+    }
+    return 0;
+}
+
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal )
+{
+    assert(self);
+    assert(text);
+    assert(line);
+    assert(column);
+    *text = self->message;
+    *line = self->line;
+    *column = self->column;
+    *fatal = self->fatal;
+    return 0;
+}
+
+rc_t CC RejectedGetData( const Rejected* self, const void** data, size_t* length )
+{
+    assert(self);
+    assert(data);
+    assert(length);
+    *data = self->source.addr;
+    *length = StringSize( & self->source );
+    return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count )
+{
+    assert(self);
+    assert(self->vt.v1->getRefSeqCount);
+    return self->vt.v1->getRefSeqCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result )
+{
+    assert(self);
+    assert(self->vt.v1->getRefSeq);
+    return self->vt.v1->getRefSeq(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroupCount);
+    return self->vt.v1->getReadGroupCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroup);
+    return self->vt.v1->getReadGroup(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroupByName );
+    return self->vt.v1->getReadGroupByName(self, name, result);
+}
diff --git a/tools/fastq-loader/common-reader.h b/tools/fastq-loader/common-reader.h
new file mode 100644
index 0000000..b6cd796
--- /dev/null
+++ b/tools/fastq-loader/common-reader.h
@@ -0,0 +1,486 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_
+#define _h_common_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef struct ReaderFile           ReaderFile;
+typedef struct Record               Record;
+typedef struct Sequence             Sequence;
+typedef struct Alignment            Alignment;
+typedef struct CGData               CGData;  
+typedef struct Rejected             Rejected;
+typedef struct ReferenceInfo        ReferenceInfo;
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self );
+rc_t CC ReaderFileRelease ( const ReaderFile *self );
+
+/* GetRecord
+ * Parses the next record from the source. At the end of the file, rc == 0, *result == 0.
+ */
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result);
+
+/* GetPathname
+ * Returns input's pathname, if applicable.
+ */
+const char* CC ReaderFileGetPathname ( const ReaderFile *self );
+
+/* GetProportionalPosition
+ *  get the aproximate proportional position in the input file
+ *  this is intended to be useful for computing progress
+ *
+ * NB - does not return rc_t
+ */
+float CC ReaderFileGetProportionalPosition ( const ReaderFile *self );
+
+/* GetReferenceInfo
+ *
+ */
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RecordAddRef ( const Record *self );
+rc_t CC RecordRelease ( const Record *self );
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result);
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result);
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result);
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC SequenceAddRef ( const Sequence *self );
+rc_t CC SequenceRelease ( const Sequence *self );
+
+/* GetReadLength
+ *  get the sequence length
+ *  i.e. the number of elements of both sequence and quality
+ *
+ *  "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetRead
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence );
+
+/* GetRead2
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ *
+ *  "start" [ IN ] and "stop" [ IN ] - zero-based coordinates, half-closed interval; both have to be within ReadLength
+ */
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop);
+
+enum QualityType {
+    QT_Unknown = 0,
+    QT_Phred,
+    QT_LogOdds
+};
+/* GetQuality
+ *  get the raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the sequence
+ *  
+ *  "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *  
+ *  "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+/* SequenceGetSpotGroup
+ *  get the name of the spot group (e.g. accession)
+ *
+ *  "name" [ OUT ] - return param for group name
+ *   held internally, validity is guaranteed for the life of the sequence
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length );
+
+
+/* SequenceGetSpotName
+ *  get the read name and length in bytes
+ *
+ *  "name" [ OUT ] - return param for read group name
+ *   held internally, validity is guaranteed for the life of the sequence
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length );
+
+/* IsColorSpace
+ *  Does the sequence have colorspace info
+ */
+bool CC SequenceIsColorSpace ( const Sequence *self );
+
+/* GetCSKey
+ *  get the colorspace key
+ *
+ *  "cskey" [ OUT ] - return param 
+ *
+ *  return: if no colorspace info, RC is 0 but the value of cskey is undefined
+ */
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] );
+
+/* GetCSReadLength
+ *  get the color space sequence length
+ *  i.e. the number of elements of both sequence and quality
+ *
+ *  "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetCSRead
+ *  get the color space sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence );
+
+/* GetCSQuality
+ *  get the color spaqce sequence's raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the sequence
+ *  
+ *  "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *  
+ *  "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+
+/* WasPaired
+ * true if read number is present and not 0 
+ */ 
+bool CC SequenceWasPaired     ( const Sequence *self ); 
+
+enum ReadOrientation {
+    ReadOrientationUnknown,
+    ReadOrientationForward,
+    ReadOrientationReverse
+};
+/* SequenceGetOrientationSelf
+ */ 
+int CC SequenceGetOrientationSelf( const Sequence *self ); 
+/* SequenceGetOrientationMate
+ */ 
+int CC SequenceGetOrientationMate( const Sequence *self ); 
+
+/* IsFirst
+ * fastq: read number is present and equal to 1
+ */ 
+bool CC SequenceIsFirst       ( const Sequence *self ); 
+/* IsSecond
+ * fastq: read number is present and equal to 2
+ */
+bool CC SequenceIsSecond      ( const Sequence *self ); 
+/* IsDuplicate
+ * 
+ */
+bool CC SequenceIsDuplicate( const Sequence *self ); 
+/* IsLowQuality
+ * 
+ */
+bool CC SequenceIsLowQuality( const Sequence *self ); 
+
+/*  RecordGetTI
+ *
+ */
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti);
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC AlignmentAddRef ( const Alignment *self );
+rc_t CC AlignmentRelease ( const Alignment *self );
+
+/* GetRefSeqId
+ *  get id of reference sequence
+ *  pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if set is invalid within BAM ( rc may be zero )
+ */
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetMateRefSeqId
+ *  get id of mate's reference sequence
+ *  pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if invalid
+ */
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetPosition
+ *  get the aligned position on the ref. seq.
+ *
+ *  "n" [ IN ] - zero-based position index for cases of multiple alignments
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos );
+
+/* GetMatePosition
+ *  starting coordinate of mate's alignment on ref. seq.
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos );
+
+/* GetMapQuality
+ *  return the quality score of mapping
+ *
+ *  "qual" [ OUT ] - return param for quality score
+ */
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual );
+
+/* GetAlignmentDetail
+ *  get the alignment details
+ *
+ *  "rslt" [ OUT, NULL OKAY ] and "count" [ IN ] - array to hold detail records
+ *
+ *  "actual" [ OUT, NULL OKAY ] - number of elements written to "rslt"
+ *   required if "rslt" is NULL
+ *
+ *  "firstMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the first match to the refSeq
+ *   or < 0 if invalid
+ *
+ *  "lastMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the last match to the refSeq
+ *   or < 0 if invalid
+ */
+typedef uint32_t AlignOpType;
+enum AlignOpTypes
+{
+    align_Match    = 'M', /* 0 */
+    align_Insert   = 'I', /* 1 */
+    align_Delete   = 'D', /* 2 */
+    align_Skip     = 'N', /* 3 */
+    align_SoftClip = 'S', /* 4 */
+    align_HardClip = 'H', /* 5 */
+    align_Padded   = 'P', /* 6 */
+    align_Equal    = '=', /* 7 */
+    align_NotEqual = 'X', /* 8 */
+    align_Overlap  = 'B' /* Complete Genomics extension */
+};
+
+typedef struct AlignmentDetail AlignmentDetail;
+struct AlignmentDetail
+{
+    int64_t refSeq_pos; /* position on refSeq where this alignment region starts or -1 if NA */
+    int32_t read_pos;   /* position on read where this alignment region starts or -1 if NA */
+    uint32_t length;    /* length of alignment region */
+    AlignOpType type;  /* type of alignment */
+};
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+                                      AlignmentDetail *rslt, 
+                                      uint32_t count, 
+                                      uint32_t *actual,
+                                      int32_t *firstMatch, 
+                                      int32_t *lastMatch );
+
+
+/* GetCigarCount
+ *  the number of CIGAR elements
+ *  a CIGAR element consists of the pair of matching op code and op length
+ *
+ *  "n" [ OUT ] - return param for cigar count
+ */
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n );
+
+
+/* GetInsertSize
+ *  distance in bases to start of mate's alignment on ref. seq.
+ *
+ *  "size" [ OUT ] - >0 for first in pair, <0 for second
+ */
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size );
+
+/* GetBAMCigar
+ *
+ */
+rc_t CC AlignmentGetBAMCigar(const Alignment *cself, uint32_t const **rslt, uint32_t *length);
+
+/* IsSecondary
+ * 
+ */
+bool CC AlignmentIsSecondary( const Alignment *self ); 
+
+
+/* AlignmentGetCG
+ * rc_t == 0, result == 0 if no CG data 
+ */
+rc_t CC AlignmentGetCGData ( const Alignment *self, const CGData** result);
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self );
+rc_t CC CGDataRelease ( const CGData *self );
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+                           char sequence[/* 35 */],
+                           uint8_t quality[/* 35 */] );
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+                         uint32_t *cigar,
+                         uint32_t cig_max,
+                         uint32_t *cig_act );
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+                              char buffer[],
+                              size_t max_size,
+                              size_t *act_size );
+
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RejectedAddRef ( const Rejected *self );
+rc_t CC RejectedRelease ( const Rejected *self );
+
+/* GetError
+ *  "text" [ OUT ] - NUL-terminated error message, held internally
+ *  "line" [ OUT ] - 1-based line # in the source (0 for binary formats)
+ *  "column" [ OUT ] - 1-based column # in the source (offset from the start of the file for binary formats)
+ *  "fatal" [ OUT ] - no further parsing should be done (likely an unsupported format)
+ */
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal );
+
+/* GetData
+ *  "data" [ OUT ] - raw input representing the rejected record. held internally
+ *  "length" [ OUT ] - size of the data buffer
+ */
+rc_t CC RejectedGetData( const Rejected* self, const void** text, size_t* length );
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+typedef struct ReferenceSequence 
+{
+    uint64_t length;
+    const char *name; /* not null unique */
+    const uint8_t *checksum;
+} ReferenceSequence;
+
+typedef struct ReadGroup
+{
+    const char *name; /* not null unique, accession e.g. SRR001138 */
+    const char *platform; /* e.g. ILLUMINA */
+} ReadGroup;
+
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self );
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self );
+
+/* GetRefSeqCount
+ *  get the number of Reference Sequences refered to in the header
+ *  this is not necessarily the number of Reference Sequences referenced
+ *  by the alignments
+ */
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count );
+
+/* GetRefSeq
+ *  get the n'th Ref. Seq. where n is [0..RefSeqCount)
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result );
+
+/* GetReadGroupCount
+ *  get the number of Read Groups (accessions, etc.) refered to in the header
+ *  this is not necessarily the number of Read Groups referenced
+ *  by the alignments
+ */
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count );
+
+/* GetReadGroup
+ *  get the n'th Read Group where n is [0..ReadGroupCount)
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result );
+
+/* GetReadGroupByName
+ *  get a Read Group by its name
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_ */
diff --git a/tools/fastq-loader/common-writer.c b/tools/fastq-loader/common-writer.c
new file mode 100644
index 0000000..4811ce3
--- /dev/null
+++ b/tools/fastq-loader/common-writer.c
@@ -0,0 +1,1654 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sysalloc.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/status.h>
+
+#include <kdb/btree.h>
+
+#include <kapp/progressbar.h>
+#include <kapp/main.h>
+
+#include <kproc/queue.h>
+#include <kproc/thread.h>
+#include <kproc/timeout.h>
+#include <os-native.h>
+
+#include <kfs/file.h>
+#include <kfs/pagefile.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+
+#include "sequence-writer.h"
+#include "common-writer.h"
+#include "common-reader-priv.h"
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#define USE_READER_THREAD (1)
+
+/*--------------------------------------------------------------------------
+ * ctx_value_t, FragmentInfo
+ */
+typedef struct {
+/*    uint64_t spotId; */
+    int64_t fragmentOffset;
+    uint16_t fragmentSize;
+    uint16_t seqHash[2];
+    uint8_t  unmated: 1,
+             has_a_read: 1,
+             written: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_S_ID(A, B) ((void)(B))
+
+typedef struct FragmentInfo {
+    uint32_t readlen;
+    uint8_t  is_bad;
+    uint8_t  orientation;
+    uint8_t  otherReadNo;
+    uint8_t  sglen;
+    uint8_t  cskey;
+} FragmentInfo;
+
+#define MMA_ELEM_T ctx_value_t
+#include "mmarray.c"
+#undef MMA_ELEM_T
+
+rc_t OpenKBTree(const CommonWriterSettings* settings, struct KBTree **const rslt, size_t const n, size_t const max)
+{
+    size_t const cacheSize = (((settings->cache_size - (settings->cache_size / 2) - (settings->cache_size / 8)) / max)
+                            + 0xFFFFF) & ~((size_t)0xFFFFF);
+    KFile *file = NULL;
+    KDirectory *dir;
+    char fname[4096];
+    rc_t rc;
+
+    rc = KDirectoryNativeDir(&dir);
+    if (rc)
+        return rc;
+
+    rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", settings->tmpfs, settings->pid, n); if (rc) return rc;
+    STSMSG(1, ("Path for scratch files: %s\n", fname));
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, "%s", fname);
+    KDirectoryRemove(dir, 0, "%s", fname);
+    KDirectoryRelease(dir);
+    if (rc == 0) {
+        rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+                              false, kbtOpaqueKey,
+                              1, 255, sizeof ( uint32_t ),
+                              NULL
+                              );
+        KFileRelease(file);
+    }
+    return rc;
+}
+
+rc_t GetKeyIDOld(const CommonWriterSettings* settings, SpotAssembler* const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], size_t const namelen)
+{
+    size_t const keylen = strlen(key);
+    rc_t rc;
+    uint64_t tmpKey;
+
+    if (ctx->key2id_count == 0) {
+        rc = OpenKBTree(settings, &ctx->key2id[0], 1, 1);
+        if (rc) return rc;
+        ctx->key2id_count = 1;
+    }
+    if (keylen == 0 || memcmp(key, name, keylen) == 0) {
+        /* qname starts with read group; no append */
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+    }
+    else {
+        char sbuf[4096];
+        char *buf = sbuf;
+        char *hbuf = NULL;
+        size_t bsize = sizeof(sbuf);
+        size_t actsize;
+
+        if (keylen + namelen + 2 > bsize) {
+            hbuf = malloc(bsize = keylen + namelen + 2);
+            if (hbuf == NULL)
+                return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+            buf = hbuf;
+        }
+        rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+        if (hbuf)
+            free(hbuf);
+    }
+    if (rc == 0) {
+        *rslt = tmpKey;
+        if (*wasInserted)
+            ++ctx->idCount[0];
+    }
+    return rc;
+}
+
+static unsigned HashValue(unsigned const len, unsigned char const value[])
+{
+    /* FNV-1a hash with folding */
+    unsigned long long h = 0xcbf29ce484222325ull;
+    unsigned i;
+
+    for (i = 0; i < len; ++i) {
+        int const octet = value[i];
+        h = (h ^ octet) * 0x100000001b3ull;
+    }
+    return (unsigned)(h ^ (h >> 32));
+}
+
+static unsigned HashKey(void const *const key, size_t const keylen)
+{
+    return HashValue(keylen, key) % NUM_ID_SPACES;
+}
+
+static unsigned SeqHashKey(void const *const key, size_t const keylen)
+{
+    return HashValue(keylen, key) % 0x10000;
+}
+
+#define USE_ILLUMINA_NAMING_POUND_NUMBER_SLASH_HACK 1
+
+static size_t GetFixedNameLength(char const name[], size_t const namelen)
+{
+#if USE_ILLUMINA_NAMING_POUND_NUMBER_SLASH_HACK
+    char const *const pound = string_chr(name, namelen, '#');
+
+    if (pound && pound + 2u < name + namelen && pound[1] >= '0' && pound[1] <= '9' && pound[2] == '/') {
+        return (size_t)(pound - name) + 2u;
+    }
+#endif
+    return namelen;
+}
+
+rc_t GetKeyID(CommonWriterSettings *const settings,
+              SpotAssembler *const ctx,
+              uint64_t *const rslt,
+              bool *const wasInserted,
+              char const key[],
+              char const name[],
+              size_t const o_namelen)
+{
+    size_t const namelen = GetFixedNameLength(name, o_namelen);
+
+    if (ctx->key2id_max == 1)
+        return GetKeyIDOld(settings, ctx, rslt, wasInserted, key, name, namelen);
+    else {
+        size_t const keylen = strlen(key);
+        unsigned const h = HashKey(key, keylen);
+        size_t f;
+        size_t e = ctx->key2id_count;
+        uint64_t tmpKey;
+
+        *rslt = 0;
+        {{
+            uint32_t const bucket_value = ctx->key2id_hash[h];
+            unsigned const n  = (uint8_t) bucket_value;
+            unsigned const i1 = (uint8_t)(bucket_value >>  8);
+            unsigned const i2 = (uint8_t)(bucket_value >> 16);
+            unsigned const i3 = (uint8_t)(bucket_value >> 24);
+
+            if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+                f = i1;
+                /*
+                ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+                 */
+                goto GET_ID;
+            }
+            if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+                f = i2;
+                ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+                goto GET_ID;
+            }
+            if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+                f = i3;
+                ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+                goto GET_ID;
+            }
+        }}
+        f = 0;
+        while (f < e) {
+            size_t const m = (f + e) / 2;
+            size_t const oid = ctx->key2id_oid[m];
+            int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+
+            if (diff < 0)
+                e = m;
+            else if (diff > 0)
+                f = m + 1;
+            else {
+                f = oid;
+                goto GET_ID;
+            }
+        }
+        if (ctx->key2id_count < ctx->key2id_max) {
+            size_t const name_max = ctx->key2id_name_max + keylen + 1;
+            KBTree *tree;
+            rc_t rc = OpenKBTree(settings, &tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+
+            if (rc) return rc;
+
+            if (ctx->key2id_name_alloc < name_max) {
+                size_t alloc = ctx->key2id_name_alloc;
+                void *tmp;
+
+                if (alloc == 0)
+                    alloc = 4096;
+                while (alloc < name_max)
+                    alloc <<= 1;
+                tmp = realloc(ctx->key2id_names, alloc);
+                if (tmp == NULL)
+                    return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+                ctx->key2id_names = tmp;
+                ctx->key2id_name_alloc = alloc;
+            }
+            if (f < ctx->key2id_count) {
+                memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+            }
+            ctx->key2id_oid[f] = ctx->key2id_count;
+            ++ctx->key2id_count;
+            f = ctx->key2id_oid[f];
+            ctx->key2id_name[f] = ctx->key2id_name_max;
+            ctx->key2id_name_max = name_max;
+
+            memmove(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+            ctx->key2id[f] = tree;
+            ctx->idCount[f] = 0;
+            if ((uint8_t)ctx->key2id_hash[h] < 3) {
+                unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+
+                ctx->key2id_hash[h] = (uint32_t)((((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n);
+            }
+            else {
+                /* the hash function isn't working too well
+                 * keep the 3 mru
+                 */
+                ctx->key2id_hash[h] = (uint32_t)((((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3);
+            }
+        GET_ID:
+            tmpKey = ctx->idCount[f];
+            rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+            if (rc == 0) {
+                *rslt = (((uint64_t)f) << 32) | tmpKey;
+                if (*wasInserted)
+                    ++ctx->idCount[f];
+                assert(tmpKey < ctx->idCount[f]);
+            }
+            return rc;
+        }
+        return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+    }
+}
+
+static int openTempFile(char const path[])
+{
+    int const fd = open(path, O_RDWR|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR);
+    unlink(path);
+    return fd;
+}
+
+static rc_t OpenMMapFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir)
+{
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", settings->tmpfs, settings->pid);
+
+    if (rc == 0) {
+        int const fd = openTempFile(fname);
+        if (fd >= 0)
+            ctx->id2value = MMArrayMake(&rc, fd);
+        else
+            rc = RC(rcExe, rcFile, rcCreating, rcFile, rcNotFound);
+    }
+    return rc;
+}
+
+static rc_t OpenMBankFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir)
+{
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/fragments.%u", settings->tmpfs, settings->pid);
+
+    if (rc == 0) {
+        int const fd = openTempFile(fname);
+        if (fd < 0)
+            rc = RC(rcExe, rcFile, rcCreating, rcFile, rcNotFound);
+        else
+            ctx->fragmentFd = fd;
+    }
+    return rc;
+}
+
+rc_t SetupContext(const CommonWriterSettings* settings, SpotAssembler *ctx)
+{
+    rc_t rc = 0;
+
+    memset(ctx, 0, sizeof(*ctx));
+
+    ctx->fragment = calloc(FRAGMENT_HOT_COUNT, sizeof(ctx->fragment[0]));
+    assert(ctx->fragment != NULL);
+    if (ctx->fragment == NULL)
+        abort();
+
+    ctx->pass = 1;
+
+    if (settings->mode == mode_Archive) {
+        KDirectory *dir;
+
+        STSMSG(1, ("Cache size: %uM\n", settings->cache_size / 1024 / 1024));
+
+        rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+
+        KLoadProgressbar_Append(ctx->progress[0], 100 * settings->numfiles);
+
+        rc = KDirectoryNativeDir(&dir);
+        if (rc == 0)
+            rc = OpenMMapFile(settings, ctx, dir);
+        if (rc == 0)
+            rc = OpenMBankFile(settings, ctx, dir);
+        KDirectoryRelease(dir);
+    }
+    return rc;
+}
+
+void ContextReleaseMemBank(SpotAssembler *ctx)
+{
+    int i;
+
+    for (i = 0; i < FRAGMENT_HOT_COUNT; ++i)
+        free(ctx->fragment[i].data);
+
+    close(ctx->fragmentFd);
+}
+
+void ContextRelease(SpotAssembler *ctx)
+{
+    KLoadProgressbar_Release(ctx->progress[0], true);
+    KLoadProgressbar_Release(ctx->progress[1], true);
+    KLoadProgressbar_Release(ctx->progress[2], true);
+    KLoadProgressbar_Release(ctx->progress[3], true);
+    MMArrayWhack(ctx->id2value);
+    free(ctx->fragment);
+}
+
+static
+rc_t WriteSoloFragments(const CommonWriterSettings* settings, SpotAssembler* ctx, SequenceWriter *seq)
+{
+    uint32_t i;
+    unsigned j;
+    uint64_t idCount = 0;
+    rc_t rc;
+    KDataBuffer fragBuf;
+    SequenceRecord srec;
+    int const pass = ctx->pass;
+
+    ++ctx->pass;
+    memset(&srec, 0, sizeof(srec));
+
+    rc = KDataBufferMake(&fragBuf, 8, 0);
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+        return rc;
+    }
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        idCount += ctx->idCount[j];
+    }
+    KLoadProgressbar_Append(ctx->progress[pass], idCount);
+
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        for (i = 0; i != ctx->idCount[j]; ++i, ++idCount) {
+            uint64_t const keyId = ((uint64_t)j << 32) | i;
+            ctx_value_t *value;
+            unsigned readLen[2];
+            unsigned read = 0;
+            FragmentInfo const *fip;
+            uint8_t const *src;
+
+            value = MMArrayGet(ctx->id2value, &rc, keyId);
+            if (value == NULL)
+                break;
+            KLoadProgressbar_Process(ctx->progress[pass], 1, false);
+
+            if (value->written)
+                continue;
+
+            assert(!value->unmated);
+            if (ctx->fragment[keyId % FRAGMENT_HOT_COUNT].id == keyId) {
+                fip = (FragmentInfo const *)ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data;
+            }
+            else {
+                rc = KDataBufferResize(&fragBuf, (size_t)value->fragmentSize);
+                if (rc == 0) {
+                    int64_t const nread = pread(ctx->fragmentFd, fragBuf.base, value->fragmentSize, value->fragmentOffset);
+                    if (nread == value->fragmentSize)
+                        fip = (FragmentInfo const *)fragBuf.base;
+                    else {
+                        (void)LOGERR(klogErr, rc = RC(rcExe, rcFile, rcReading, rcData, rcNotFound), "KMemBankRead failed");
+                        break;
+                    }
+                }
+                else {
+                    (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+                    break;
+                }
+            }
+            src = (uint8_t const *)&fip[1];
+
+            readLen[0] = readLen[1] = 0;
+            read = fip->otherReadNo - 1;
+
+            readLen[read] = fip->readlen;
+            rc = SequenceRecordInit(&srec, 2, readLen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceRecordInit failed");
+                break;
+            }
+
+            srec.is_bad[read] = fip->is_bad;
+            srec.orientation[read] = fip->orientation;
+            srec.cskey[read] = fip->cskey;
+            memmove(srec.seq + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+
+            memmove(srec.qual + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+            srec.spotGroup = (char *)src;
+            srec.spotGroupLen = fip->sglen;
+            srec.keyId = keyId;
+
+            rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, false, settings->platform,
+                                    settings->keepMismatchQual, settings->no_real_output, settings->hasTI, settings->QualQuantizer);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                break;
+            }
+            /*rc = KMemBankFree(frags, id);*/
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+            value->written = 1;
+        }
+    }
+    /*printf("DONE_SOLO:\tcnt2=%d\tcnt1=%d\n",fcountBoth,fcountOne);*/
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    return rc;
+}
+
+void EditAlignedQualities(const CommonWriterSettings* settings, uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+    unsigned i;
+
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = hasMismatch[i] ? settings->alignedQualValue : qual[i];
+
+        qual[i] = q;
+    }
+}
+
+void EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+    unsigned i;
+
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = (qual[i] & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+
+        qual[i] = q;
+    }
+}
+
+rc_t CheckLimitAndLogError(CommonWriterSettings* settings)
+{
+    ++settings->errCount;
+    if (settings->maxErrCount > 0 && settings->errCount > settings->maxErrCount) {
+        (void)PLOGERR(klogErr, (klogErr, RC(rcAlign, rcFile, rcReading, rcError, rcExcessive),
+                                "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%lu,max=%lu",
+                                settings->errCount, settings->maxErrCount));
+        return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+    }
+    return 0;
+}
+
+void RecordNoMatch(const CommonWriterSettings* settings, char const readName[], char const refName[], uint32_t const refPos)
+{
+    if (settings->noMatchLog) {
+        static uint64_t lpos = 0;
+        char logbuf[256];
+        size_t len;
+
+        if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+            KFileWrite(settings->noMatchLog, lpos, logbuf, len, NULL);
+            lpos += len;
+        }
+    }
+}
+
+rc_t LogNoMatch(CommonWriterSettings* settings, char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+    rc_t const rc = CheckLimitAndLogError(settings);
+    static unsigned count = 0;
+
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    }
+    else if (settings->maxWarnCount_NoMatch == 0 || count < settings->maxWarnCount_NoMatch)
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    return rc;
+}
+
+rc_t LogDupConflict(CommonWriterSettings* settings, char const readName[])
+{
+    rc_t const rc = CheckLimitAndLogError(settings);
+    static unsigned count = 0;
+
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    }
+    else if (settings->maxWarnCount_DupConflict == 0 || count < settings->maxWarnCount_DupConflict)
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    return rc;
+}
+
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R)
+{
+    if (R) {
+        unsigned i;
+        unsigned j;
+
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = S[j];
+    }
+    else
+        memmove(D, S, L);
+}
+
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+    static INSDC_dna_text const compl[] = {
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 , '.',  0 ,
+        '0', '1', '2', '3',  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C',
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 ,
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C',
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 ,
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
+    };
+    if (R) {
+        unsigned i;
+        unsigned j;
+
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = compl[((uint8_t const *)S)[j]];
+    }
+    else
+        memmove(D, S, L);
+}
+
+/*--------------------------------------------------------------------------
+ * ArchiveFile
+ */
+
+void ParseSpotName(char const name[], size_t* namelen)
+{ /* remove trailing #... */
+    const char* hash = string_chr(name, *namelen, '#');
+    if (hash)
+        *namelen = hash - name;
+}
+
+static int8_t LogOddsToPhred1(int8_t logOdds)
+{ /* conversion table copied from interface/ncbi/seq.vschema */
+    static int8_t const toPhred[] = {
+                  0, 1, 1, 2, 2, 3, 3,
+         4, 4, 5, 5, 6, 7, 8, 9,10,10,
+        11,12,13,14,15,16,17,18,19,20,
+        21,22,23,24,25,26,27,28,29,30,
+        31,32,33,34,35,36,37,38,39,40
+    };
+    if (logOdds < -6)
+        return 0;
+    if (logOdds > 40)
+        return 40;
+    return toPhred[logOdds + 6];
+}
+
+static void LogOddsToPhred(unsigned const readLen, uint8_t dst[], int8_t const src[], int offset)
+{
+    unsigned i;
+
+    for (i = 0; i < readLen; ++i)
+        dst[i] = LogOddsToPhred1(src[i] - offset);
+}
+
+static void PhredToPhred(unsigned const readLen, uint8_t dst[], int8_t const src[], int offset)
+{
+    unsigned i;
+
+    for (i = 0; i < readLen; ++i)
+        dst[i] = src[i] - offset;
+}
+
+struct ReadResult {
+    float progress;
+    uint64_t recordNo;
+    enum {
+        rr_undefined = 0,
+        rr_sequence,
+        rr_rejected,
+        rr_done,
+        rr_error
+    } type;
+    union {
+        struct sequence {
+            char *name;
+            char *spotGroup;
+            char *seqDNA;
+            unsigned char *quality;
+            uint64_t id;
+            unsigned readLen;
+            unsigned readNo;
+            int mated;
+            int orientation;
+            int bad;
+            int inserted;
+            int colorspace;
+            char cskey;
+        } sequence;
+        struct reject {
+            char *message;
+            uint64_t line;
+            unsigned column;
+            int fatal;
+        } reject;
+        struct error {
+            char const *message;
+            rc_t rc;
+        } error;
+    } u;
+};
+
+static char *getSpotGroup(Sequence const *const sequence)
+{
+    char *rslt = NULL;
+    char const *tmp = NULL;
+    size_t len = 0;
+
+    SequenceGetSpotGroup(sequence, &tmp, &len);
+    if (tmp) {
+        rslt = malloc(len + 1);
+        if (rslt) {
+            memmove(rslt, tmp, len);
+            rslt[len] = '\0';
+        }
+    }
+    else {
+        rslt = malloc(1);
+        if (rslt) {
+            rslt[0] = '\0';
+        }
+    }
+    return rslt;
+}
+
+static char *getName(Sequence const *const sequence, bool const parseSpotName)
+{
+    char *rslt = NULL;
+    char const *tmp = NULL;
+    size_t len = 0;
+
+    SequenceGetSpotName(sequence, &tmp, &len);
+    if (parseSpotName)
+        ParseSpotName(tmp, &len);
+    rslt = malloc(len + 1);
+    if (rslt) {
+        memmove(rslt, tmp, len);
+        rslt[len] = '\0';
+    }
+    return rslt;
+}
+
+static char const kReaderFileGetRecord[] = "ReaderFileGetRecord";
+static char const kRecordGetSequence[] = "RecordGetSequence";
+static char const kRecordGetRejected[] = "RecordGetRejected";
+static char const kRejectedGetError[] = "RejectedGetError";
+static char const kSequenceGetQuality[] = "SequenceGetQuality";
+static char const kGetKeyID[] = "GetKeyID";
+static char const kSequenceGetRead[] = "SequenceGetRead";
+static char const kQuitting[] = "Quitting";
+
+static void readSequence(CommonWriterSettings *const G, SpotAssembler *const ctx, Sequence const *const sequence, struct ReadResult *const rslt)
+{
+    char *seqDNA = NULL;
+    uint8_t *qual = NULL;
+    char *name = NULL;
+    char *spotGroup = NULL;
+    uint32_t readLen = 0;
+    unsigned readNo = 0;
+    int mated = 0;
+    int orientation = 0;
+    int colorspace = 0;
+    char cskey[2];
+    uint64_t keyId = 0;
+    bool wasInserted = 0;
+    bool bad = 0;
+    rc_t rc = 0;
+
+    memset(cskey, 0, sizeof(cskey));
+    colorspace = SequenceIsColorSpace(sequence);
+    orientation = SequenceGetOrientationSelf(sequence);
+    bad = SequenceIsLowQuality(sequence);
+    if (colorspace)
+        rc = SequenceGetCSReadLength(sequence, &readLen);
+    else
+        rc = SequenceGetReadLength(sequence, &readLen);
+    assert(rc == 0);
+    seqDNA = malloc(readLen);
+    qual = malloc(readLen);
+    name = getName(sequence, G->parseSpotName);
+    spotGroup = getSpotGroup(sequence);
+
+    if (   seqDNA == NULL
+        || qual == NULL
+        || name == NULL
+        || spotGroup == NULL
+        )
+    {
+        fprintf(stderr, "OUT OF MEMORY!!!");
+        abort();
+    }
+
+    if (!colorspace) {
+        rc = SequenceGetRead(sequence, seqDNA);
+    }
+    else {
+        SequenceGetCSKey(sequence, cskey);
+        rc = SequenceGetCSRead(sequence, seqDNA);
+    }
+    if (rc != 0) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': failed to get sequence", "%s", name));
+        rslt->type = rr_error;
+        rslt->u.error.rc = rc;
+        rslt->u.error.message = kSequenceGetRead;
+        goto CLEANUP;
+    }
+    {
+        int8_t const *squal = NULL;
+        uint8_t qoffset = 0;
+        int qualType = 0;
+
+        if (!colorspace || G->useQUAL)
+            rc = SequenceGetQuality(sequence, &squal, &qoffset, &qualType);
+        else {
+            rc = SequenceGetCSQuality(sequence, &squal, &qoffset, &qualType);
+            qualType = QT_Phred;
+        }
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+            rslt->type = rr_error;
+            rslt->u.error.rc = rc;
+            rslt->u.error.message = kSequenceGetQuality;
+            goto CLEANUP;
+        }
+        if (squal) {
+            if (qualType == QT_Phred)
+                PhredToPhred(readLen, qual, squal, qoffset);
+            else if (qualType == QT_LogOdds)
+                LogOddsToPhred(readLen, qual, squal, qoffset);
+            else
+                memmove(qual, squal, readLen);
+        }
+        else if (!colorspace)
+            memset(qual, 30, readLen);
+        else
+            memset(qual, 0, readLen);
+    }
+    if (SequenceWasPaired(sequence)) {
+        if (SequenceIsFirst(sequence))
+            readNo |= 1;
+        if (SequenceIsSecond(sequence))
+            readNo |= 2;
+        if (readNo == 1 || readNo == 2)
+            mated = 1;
+    }
+    if (!mated)
+        readNo = 1;
+
+    rc = GetKeyID(G, ctx, &keyId, &wasInserted, spotGroup, name, strlen(name));
+    if (rc != 0) {
+        rslt->type = rr_error;
+        rslt->u.error.rc = rc;
+        rslt->u.error.message = kGetKeyID;
+    }
+CLEANUP:
+    if (rslt->type == rr_error) {
+        free(seqDNA);
+        free(qual);
+        free(name);
+        free(spotGroup);
+    }
+    else {
+        rslt->type = rr_sequence;
+        rslt->u.sequence.name = name;
+        rslt->u.sequence.spotGroup = spotGroup;
+        rslt->u.sequence.seqDNA = seqDNA;
+        rslt->u.sequence.quality = qual;
+        rslt->u.sequence.id = keyId;
+        rslt->u.sequence.readLen = readLen;
+        rslt->u.sequence.readNo = readNo;
+        rslt->u.sequence.mated = mated;
+        rslt->u.sequence.orientation = orientation;
+        rslt->u.sequence.bad = bad;
+        rslt->u.sequence.inserted = wasInserted;
+        rslt->u.sequence.colorspace = colorspace;
+        rslt->u.sequence.cskey = cskey[0];
+    }
+    return;
+}
+
+static void freeReadResultSequence(struct ReadResult const *const rslt)
+{
+    free(rslt->u.sequence.name);
+    free(rslt->u.sequence.spotGroup);
+    free(rslt->u.sequence.seqDNA);
+    free(rslt->u.sequence.quality);
+}
+
+static void readRejected(CommonWriterSettings *const G, SpotAssembler *const ctx, Rejected const *const reject, struct ReadResult *const rslt)
+{
+    char const *message;
+    uint64_t line = 0;
+    uint64_t col = 0;
+    bool fatal = 0;
+    rc_t const rc = RejectedGetError(reject, &message, &line, &col, &fatal);
+
+    if (rc == 0) {
+        rslt->type = rr_rejected;
+        rslt->u.reject.message = strdup(message);
+        rslt->u.reject.line = line;
+        rslt->u.reject.column = col;
+        rslt->u.reject.fatal = fatal;
+    }
+    else {
+        rslt->type = rr_error;
+        rslt->u.error.rc = rc;
+        rslt->u.error.message = kRejectedGetError;
+    }
+}
+
+static void freeReadResultRejected(struct ReadResult const *const rslt)
+{
+    free(rslt->u.reject.message);
+}
+
+static void readRecord(CommonWriterSettings *const G, SpotAssembler *const ctx, Record const *const record, struct ReadResult *const rslt)
+{
+    rc_t rc = 0;
+    Rejected const *rej = NULL;
+
+    rc = RecordGetRejected(record, &rej);
+    if (rc == 0 && rej == NULL) {
+        Sequence const *sequence = NULL;
+        rc = RecordGetSequence(record, &sequence);
+        if (rc == 0) {
+            assert(sequence != NULL);
+            readSequence(G, ctx, sequence, rslt);
+            SequenceRelease(sequence);
+            return;
+        }
+        rslt->type = rr_error;
+        rslt->u.error.rc = rc;
+        rslt->u.error.message = kRecordGetSequence;
+        return;
+    }
+    if (rc != 0) {
+        rslt->type = rr_error;
+        rslt->u.error.rc = rc;
+        rslt->u.error.message = kRecordGetRejected;
+        return;
+    }
+    assert(rej != NULL);
+    readRejected(G, ctx, rej, rslt);
+    RejectedRelease(rej);
+}
+
+static struct ReadResult *threadGetNextRecord(CommonWriterSettings *const G, SpotAssembler *const ctx, struct ReaderFile const *reader, uint64_t *reccount)
+{
+    rc_t rc = 0;
+    Record const *record = NULL;
+    struct ReadResult *const rslt = calloc(1, sizeof(*rslt));
+
+    assert(rslt != NULL);
+    if (rslt != NULL) {
+        rslt->progress = ReaderFileGetProportionalPosition(reader);
+        rslt->recordNo = ++*reccount;
+        if (G->maxAlignCount > 0 && rslt->recordNo > G->maxAlignCount) {
+            (void)PLOGMSG(klogDebug, (klogDebug, "reached limit of $(max) records read", "max=%u", (unsigned)G->maxAlignCount));
+            rslt->type = rr_done;
+            return rslt;
+        }
+        rc = ReaderFileGetRecord(reader, &record);
+        if (rc != 0) {
+            rslt->type = rr_error;
+            rslt->u.error.rc = rc;
+            rslt->u.error.message = kReaderFileGetRecord;
+            return rslt;
+        }
+        if (record != NULL) {
+            readRecord(G, ctx, record, rslt);
+            RecordRelease(record);
+            return rslt;
+        }
+        else {
+            rslt->type = rr_done;
+            return rslt;
+        }
+    }
+    abort();
+}
+
+static void freeReadResultError(struct ReadResult const *const rslt)
+{
+    (void)0;
+}
+
+static void freeReadResult(struct ReadResult const *const rslt)
+{
+    if (rslt->type == rr_sequence)
+        freeReadResultSequence(rslt);
+    else if (rslt->type == rr_rejected)
+        freeReadResultRejected(rslt);
+    else if (rslt->type == rr_error)
+        freeReadResultError(rslt);
+}
+
+struct ReadThreadContext {
+    timeout_t tm;
+    KThread *th;
+    KQueue *que;
+    CommonWriterSettings *settings;
+    SpotAssembler *ctx;
+    ReaderFile const *reader;
+    uint64_t reccount;
+};
+
+static rc_t readThread(KThread const *const th, void *const ctx)
+{
+    struct ReadThreadContext *const self = ctx;
+    timeout_t tm;
+    rc_t rc = 0;
+
+    TimeoutInit(&tm, 10000);
+    while (Quitting() == 0) {
+        struct ReadResult *const rr = threadGetNextRecord(self->settings, self->ctx, self->reader, &self->reccount);
+        int const rr_type = rr->type;
+
+        for ( ;; ) {
+            rc = KQueuePush(self->que, rr, &tm);
+            if (rc == 0)
+                break;
+            if ((int)GetRCObject(rc) == rcTimeout) {
+                continue;
+            }
+            break;
+        }
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "readThread: failed to push next record into queue");
+            free(rr);
+            break;
+        }
+        else if (rr_type == rr_done) {
+            /* normal exit from end of file */
+            (void)LOGMSG(klogDebug, "readThread done : end of file");
+            break;
+        }
+    }
+    KQueueSeal(self->que);
+    return rc;
+}
+
+static struct ReadResult getNextRecord(struct ReadThreadContext *const self)
+{
+    struct ReadResult rslt;
+
+    memset(&rslt, 0, sizeof(rslt));
+#if USE_READER_THREAD
+    if (self->th == NULL) {
+        TimeoutInit(&self->tm, 1000000);
+        rslt.u.error.rc = KQueueMake(&self->que, 1024);
+        if (rslt.u.error.rc) {
+            rslt.type = rr_error;
+            rslt.u.error.message = "KQueueMake";
+            return rslt;
+        }
+        rslt.u.error.rc = KThreadMake(&self->th, readThread, (void *)self);
+        if (rslt.u.error.rc) {
+            rslt.type = rr_error;
+            rslt.u.error.message = "KThreadMake";
+            return rslt;
+        }
+    }
+    while ((rslt.u.error.rc = Quitting()) == 0) {
+        void *rr = NULL;
+        rslt.u.error.rc = KQueuePop(self->que, &rr, &self->tm);
+        if (rslt.u.error.rc == 0) {
+            memmove(&rslt, rr, sizeof(rslt));
+            free(rr);
+            if (rslt.type == rr_done)
+                goto DONE;
+            return rslt;
+        }
+        if ((int)GetRCObject(rslt.u.error.rc) == rcTimeout) {
+            (void)LOGMSG(klogDebug, "KQueuePop timed out");
+        }
+        else {
+            (void)LOGERR(klogErr, rslt.u.error.rc, "KQueuePop failed");
+            rslt.type = rr_done;
+            goto DONE;
+        }
+    }
+    rslt.type = rr_error;
+    rslt.u.error.message = kQuitting;
+DONE:
+    {
+        rc_t rc = 0;
+        KThreadWait(self->th, &rc);
+        KThreadRelease(self->th);
+        KQueueRelease(self->que);
+        self->que = NULL;
+        self->th = NULL;
+    }
+#else
+    if ((rslt.u.error.rc = Quitting()) == 0) {
+        struct ReadResult *const rr = threadGetNextRecord(self->settings, self->ctx, self->reader, &self->reccount);
+        rslt = *rr;
+        free(rr);
+    }
+    else {
+        rslt.type = rr_error;
+        rslt.u.error.message = kQuitting;
+    }
+#endif
+    return rslt;
+}
+
+rc_t ArchiveFile(const struct ReaderFile *const reader,
+                 CommonWriterSettings *const G,
+                 struct SpotAssembler *const ctx,
+                 struct SequenceWriter *const seq,
+                 bool *const had_sequences)
+{
+    KDataBuffer buf;
+    KDataBuffer fragBuf;
+    rc_t rc;
+    SequenceRecord srec;
+    unsigned progress = 0;
+    uint64_t recordsProcessed = 0;
+    uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 'duplicate' and 'lowQuality' ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+    bool isColorSpace = false;
+    bool isNotColorSpace = G->noColorSpace;
+    char const *const fileName = ReaderFileGetPathname(reader);
+    struct ReadThreadContext threadCtx;
+    uint64_t fragmentsAdded = 0;
+    uint64_t spotsCompleted = 0;
+    uint64_t fragmentsEvicted = 0;
+
+    if (ctx->key2id_max == 0) {
+        ctx->key2id_max = 1;
+    }
+
+    memset(&srec, 0, sizeof(srec));
+    memset(&threadCtx, 0, sizeof(threadCtx));
+    threadCtx.settings = G;
+    threadCtx.ctx = ctx;
+    threadCtx.reader = reader;
+
+    rc = KDataBufferMake(&fragBuf, 8, 4096);
+    if (rc)
+        return rc;
+
+    rc = KDataBufferMake(&buf, 16, 0);
+    if (rc)
+        return rc;
+
+    if (rc == 0) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", fileName));
+    }
+
+    *had_sequences = false;
+
+    while (rc == 0) {
+        ctx_value_t *value;
+        struct ReadResult const rr = getNextRecord(&threadCtx);
+
+        if ((unsigned)(rr.progress * 100.0) > progress) {
+            unsigned new_value = rr.progress * 100.0;
+            KLoadProgressbar_Process(ctx->progress[0], new_value - progress, false);
+            progress = new_value;
+        }
+        if (rr.type == rr_done)
+            break;
+        if (rr.type == rr_error) {
+            rc = rr.u.error.rc;
+            if (rr.u.error.message == kQuitting) {
+                (void)LOGMSG(klogInfo, "Exiting read loop");
+                break;
+            }
+            if (rr.u.error.message == kReaderFileGetRecord) {
+                if (GetRCObject(rc) == rcRow && (GetRCState(rc) == rcInvalid || GetRCState(rc) == rcEmpty)) {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "ArchiveFile: '$(file)' - row $(row)", "file=%s,row=%lu", fileName, rr.recordNo));
+                    rc = CheckLimitAndLogError(G);
+                }
+                /* else fail */
+            }
+            else {
+                (void)PLOGERR(klogErr, (klogErr, rc, "ArchiveFile: $(func) failed", "func=%s", rr.u.error.message));
+                rc = CheckLimitAndLogError(G);
+            }
+            goto LOOP_END;
+        }
+        if (rr.type == rr_rejected) {
+            char const *const message = rr.u.reject.message;
+            uint64_t const line = rr.u.reject.line;
+            uint64_t const col = rr.u.reject.column;
+            bool const fatal = rr.u.reject.fatal;
+
+            (void)PLOGMSG(fatal ? klogErr : klogWarn, (fatal ? klogErr : klogWarn,
+                                                       "$(file):$(l):$(c):$(msg)", "file=%s,l=%lu,c=%lu,msg=%s",
+                                                       fileName, line, col, message));
+            rc = CheckLimitAndLogError(G);
+            if (fatal)
+                rc = RC(rcExe, rcFile, rcParsing, rcFormat, rcUnsupported);
+            goto LOOP_END;
+        }
+        if (rr.type == rr_sequence) {
+            uint64_t const keyId = rr.u.sequence.id;
+            bool const wasInserted = !!rr.u.sequence.inserted;
+            bool const colorspace = !!rr.u.sequence.colorspace;
+            bool const mated = !!rr.u.sequence.mated;
+            unsigned const readNo = rr.u.sequence.readNo;
+            char const *const seqDNA = rr.u.sequence.seqDNA;
+            uint8_t const *const qual = rr.u.sequence.quality;
+            unsigned const readlen = rr.u.sequence.readLen;
+            int const readOrientation = !!rr.u.sequence.orientation;
+            bool const reverse = isColorSpace ? false : (readOrientation == ReadOrientationReverse);
+            char const cskey = rr.u.sequence.cskey;
+            bool const bad = !!rr.u.sequence.bad;
+            char const *const spotGroup = rr.u.sequence.spotGroup;
+            char const *const name = rr.u.sequence.name;
+            int const namelen = strlen(name);
+
+            if (!G->noColorSpace) {
+                if (colorspace) {
+                    if (isNotColorSpace) {
+                    MIXED_BASE_AND_COLOR:
+                        rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", fileName));
+                        goto LOOP_END;
+                    }
+                    ctx->isColorSpace = isColorSpace = true;
+                }
+                else if (isColorSpace)
+                    goto MIXED_BASE_AND_COLOR;
+                else
+                    isNotColorSpace = true;
+            }
+
+            value = MMArrayGet(ctx->id2value, &rc, keyId);
+            if (value == NULL) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+                goto LOOP_END;
+            }
+            if (wasInserted) {
+                memset(value, 0, sizeof(*value));
+                value->fragmentOffset = -1;
+                value->unmated = !mated;
+            }
+            else {
+                if (mated && value->unmated) {
+                    (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                             "Spot '$(name)', which was first seen without mate info, now has mate info",
+                                             "name=%s", name));
+                    rc = CheckLimitAndLogError(G);
+                    goto LOOP_END;
+                }
+            }
+
+            ++recordsProcessed;
+            if (mated) {
+                if (value->written) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%s", name));
+                }
+                else if (!value->has_a_read) {
+                    /* new mated fragment - do spot assembly */
+                    unsigned sz;
+                    FragmentInfo fi;
+                    int64_t const victimId = ctx->fragment[keyId % FRAGMENT_HOT_COUNT].id;
+                    void *const victimData = ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data;
+                    void *myData = NULL;
+
+                    ++fragmentsAdded;
+                    value->seqHash[readNo - 1] = SeqHashKey(seqDNA, readlen);
+
+                    memset(&fi, 0, sizeof(fi));
+                    fi.orientation = readOrientation;
+                    fi.otherReadNo = readNo;
+                    fi.sglen   = strlen(spotGroup);
+                    fi.readlen = readlen;
+                    fi.cskey = cskey;
+                    fi.is_bad = bad;
+                    sz = sizeof(fi) + 2*fi.readlen + fi.sglen;
+                    myData = malloc(sz);
+                    if (myData == NULL) {
+                        (void)LOGERR(klogErr, RC(rcExe, rcFile, rcReading, rcMemory, rcExhausted), "OUT OF MEMORY!");
+                        abort();
+                        goto LOOP_END;
+                    }
+                    {{
+                        uint8_t *dst = (uint8_t*)myData;
+
+                        memmove(dst,&fi,sizeof(fi));
+                        dst += sizeof(fi);
+                        COPY_READ((char *)dst, seqDNA, fi.readlen, reverse);
+                        dst += fi.readlen;
+                        COPY_QUAL(dst, qual, fi.readlen, reverse);
+                        dst += fi.readlen;
+                        memmove(dst,spotGroup,fi.sglen);
+                    }}
+                    ctx->fragment[keyId % FRAGMENT_HOT_COUNT].id = keyId;
+                    ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data = myData;
+                    value->has_a_read = 1;
+                    value->fragmentSize = sz;
+                    *had_sequences = true;
+
+                    if (victimData != NULL) {
+                        ctx_value_t *const victim = MMArrayGet(ctx->id2value, &rc, victimId);
+                        if (victim == NULL) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", victimId));
+                            abort();
+                            goto LOOP_END;
+                        }
+                        if (victim->fragmentOffset < 0) {
+                            int64_t const pos = ctx->nextFragment;
+                            int64_t const nwrit = pwrite(ctx->fragmentFd, victimData, victim->fragmentSize, pos);
+
+                            if (nwrit == victim->fragmentSize) {
+                                ctx->nextFragment += victim->fragmentSize;
+                                victim->fragmentOffset = pos;
+                                free(victimData);
+                                ++fragmentsEvicted;
+                            }
+                            else {
+                                (void)LOGMSG(klogFatal, "Failed to write fragment data");
+                                abort();
+                                goto LOOP_END;
+                            }
+                        }
+                        else {
+                            (void)LOGMSG(klogFatal, "PROGRAMMER ERROR!!");
+                            abort();
+                            goto LOOP_END;
+                        }
+                    }
+                }
+                else {
+                    /* might be second fragment */
+                    uint64_t const sz = value->fragmentSize;
+                    bool freeFip = false;
+                    FragmentInfo *fip = NULL;
+
+                    if (ctx->fragment[keyId % FRAGMENT_HOT_COUNT].id == keyId) {
+                        fip = ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data;
+                        freeFip = true;
+                    }
+                    else {
+                        int64_t nread = 0;
+                        rc = KDataBufferResize(&fragBuf, (size_t)sz);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+                            abort();
+                            goto LOOP_END;
+                        }
+                        nread = pread(ctx->fragmentFd, fragBuf.base, sz, value->fragmentOffset);
+                        if (nread == sz) {
+                            fip = (FragmentInfo *) fragBuf.base;
+                        }
+                        else {
+                            (void)PLOGMSG(klogFatal, (klogFatal, "Failed to read fragment data; spot:'$(name)'; "
+                                "size: $(size); pos: $(pos); read: $(read)", "name=%s,size=%lu,pos=%lu,read=%lu",
+                                name, sz, value->fragmentOffset, nread));
+                            abort();
+                            goto LOOP_END;
+                        }
+                    }
+                    if (readNo != fip->otherReadNo) {
+                        /* mate found */
+                        unsigned readLen[2];
+                        unsigned read1 = 0;
+                        unsigned read2 = 1;
+                        uint8_t  *src  = (uint8_t*) fip + sizeof(*fip);
+
+                        ++spotsCompleted;
+                        value->seqHash[readNo - 1] = SeqHashKey(seqDNA, readlen);
+
+                        if (readNo < fip->otherReadNo) {
+                            read1 = 1;
+                            read2 = 0;
+                        }
+                        readLen[read1] = fip->readlen;
+                        readLen[read2] = readlen;
+                        rc = SequenceRecordInit(&srec, 2, readLen);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+                            goto LOOP_END;
+                        }
+                        srec.is_bad[read1] = fip->is_bad;
+                        srec.orientation[read1] = fip->orientation;
+                        srec.cskey[read1] = fip->cskey;
+                        memmove(srec.seq + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+                        memmove(srec.qual + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+
+                        srec.orientation[read2] = readOrientation;
+                        COPY_READ(srec.seq + srec.readStart[read2],
+                                  seqDNA,
+                                  srec.readLen[read2],
+                                  reverse);
+                        COPY_QUAL(srec.qual + srec.readStart[read2],
+                                  qual,
+                                  srec.readLen[read2],
+                                  reverse);
+
+                        srec.keyId = keyId;
+                        srec.is_bad[read2] = bad;
+                        srec.cskey[read2] = cskey;
+
+                        srec.spotGroup = (char *)spotGroup;
+                        srec.spotGroupLen = strlen(spotGroup);
+                        rc = SequenceWriteRecord(seq, &srec, isColorSpace, false, G->platform,
+                                                 G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+                        if (freeFip) {
+                            free(fip);
+                            ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data = NULL;
+                        }
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                            goto LOOP_END;
+                        }
+                        CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                        value->written = 1;
+                    }
+                }
+            }
+            else if (value->written) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%s", name));
+            }
+            else if (value->has_a_read) {
+                if (ctx->fragment[keyId % FRAGMENT_HOT_COUNT].id == keyId) {
+                    free(ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data);
+                    ctx->fragment[keyId % FRAGMENT_HOT_COUNT].data = NULL;
+                }
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen with mate info, now has no mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError(G);
+            }
+            else {
+                /* new unmated fragment - no spot assembly */
+                unsigned readLen[1];
+
+                value->seqHash[0] = SeqHashKey(seqDNA, readlen);
+
+                readLen[0] = readlen;
+                rc = SequenceRecordInit(&srec, 1, readLen);
+                if (rc) {
+                    (void)LOGERR(klogErr, rc, "Failed resizing sequence record buffer");
+                    goto LOOP_END;
+                }
+                srec.is_bad[0] = bad;
+                srec.orientation[0] = readOrientation;
+                srec.cskey[0] = cskey;
+                COPY_READ(srec.seq  + srec.readStart[0], seqDNA, readlen, false);
+                COPY_QUAL(srec.qual + srec.readStart[0], qual, readlen, false);
+
+                srec.keyId = keyId;
+
+                srec.spotGroup = (char *)spotGroup;
+                srec.spotGroupLen = strlen(spotGroup);
+
+                srec.spotName = (char *)name;
+                srec.spotNameLen = namelen;
+
+                rc = SequenceWriteRecord(seq, &srec, isColorSpace, false, G->platform,
+                                         G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+                if (rc) {
+                    (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                    goto LOOP_END;
+                }
+                CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                value->written = 1;
+                *had_sequences = true;
+            }
+        }
+        else
+            abort();
+
+LOOP_END:
+        freeReadResult(&rr);
+    }
+
+    KThreadCancel(threadCtx.th);
+    KThreadWait ( threadCtx.th, NULL );
+    KThreadRelease(threadCtx.th);
+    KQueueRelease(threadCtx.que);
+
+    if (filterFlagConflictRecords > 0) {
+        (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+    }
+    if (rc == 0 && recordsProcessed == 0) {
+        (void)LOGMSG(klogWarn, (G->limit2config || G->refFilter != NULL) ?
+                     "All records from the file were filtered out" :
+                     "The file contained no records that were processed.");
+        rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+    }
+    if (rc == 0 && threadCtx.reccount > 0) {
+        uint64_t const reccount = threadCtx.reccount - 1;
+        double const percentage = ((double)G->errCount) / reccount;
+        double const allowed = G->maxErrPct/ 100.0;
+        if (percentage > allowed) {
+            rc = RC(rcExe, rcTable, rcClosing, rcData, rcInvalid);
+            (void)PLOGERR(klogErr,
+                            (klogErr, rc,
+                             "Too many bad records: "
+                                 "records: $(records), bad records: $(bad_records), "
+                                 "bad records percentage: $(percentage), "
+                                 "allowed percentage: $(allowed)",
+                             "records=%lu,bad_records=%lu,percentage=%.2f,allowed=%.2f",
+                             reccount, G->errCount, percentage, allowed));
+        }
+    }
+    (void)PLOGMSG(klogDebug, (klogDebug, "Fragments added to spot assembler: $(added). Fragments evicted to disk: $(evicted). Spots completed: $(completed)",
+        "added=%lu,evicted=%lu,completed=%lu", fragmentsAdded, fragmentsEvicted, spotsCompleted));
+
+    KDataBufferWhack(&buf);
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* G)
+{
+    rc_t rc = 0;
+    assert(self);
+    assert(mgr);
+    assert(db);
+
+    memset(self, 0, sizeof(*self));
+    if (G)
+        self->settings = *G;
+
+    {
+        self->seq = malloc(sizeof(*self->seq));
+        if (self->seq == 0)
+        {
+            return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+        }
+        SequenceWriterInit(self->seq, db);
+
+        rc = SetupContext(&self->settings, &self->ctx);
+    }
+    if (self->settings.tmpfs == NULL)
+        self->settings.tmpfs = "/tmp";
+
+    self->commit = true;
+
+    return rc;
+}
+
+rc_t CommonWriterArchive(CommonWriter *const self,
+                         const struct ReaderFile *const reader)
+{
+    rc_t rc;
+    bool has_sequences = false;
+
+    assert(self);
+    rc = ArchiveFile(reader,
+                     &self->settings,
+                     &self->ctx,
+                     self->seq,
+                     &has_sequences);
+    if (rc)
+        self->commit = false;
+    else
+        self->had_sequences |= has_sequences;
+
+    self->err_count += self->settings.errCount;
+    return rc;
+}
+
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting, uint64_t maxDistance)
+{
+    rc_t rc=0;
+    /*** No longer need memory for key2id ***/
+    size_t i;
+    for (i = 0; i != self->ctx.key2id_count; ++i) {
+        KBTreeDropBacking(self->ctx.key2id[i]);
+        KBTreeRelease(self->ctx.key2id[i]);
+        self->ctx.key2id[i] = NULL;
+    }
+    free(self->ctx.key2id_names);
+    self->ctx.key2id_names = NULL;
+    /*******************/
+
+    if (self->had_sequences) {
+        if (!quitting) {
+            (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+            rc = WriteSoloFragments(&self->settings, &self->ctx, self->seq);
+            ContextReleaseMemBank(&self->ctx);
+            if (rc == 0) {
+                rc = SequenceDoneWriting(self->seq);
+            }
+        }
+        else
+            ContextReleaseMemBank(&self->ctx);
+    }
+
+    return rc;
+}
+
+rc_t CommonWriterWhack(CommonWriter* self)
+{
+    rc_t rc = 0;
+    assert(self);
+
+    ContextRelease(&self->ctx);
+
+    if (self->seq)
+    {
+        SequenceWhack(self->seq, self->commit);
+        free(self->seq);
+    }
+
+    return rc;
+}
+
diff --git a/tools/fastq-loader/common-writer.h b/tools/fastq-loader/common-writer.h
new file mode 100644
index 0000000..74a2220
--- /dev/null
+++ b/tools/fastq-loader/common-writer.h
@@ -0,0 +1,164 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+struct VDBManager;
+struct VDatabase;
+struct KMemBank;
+struct KBTree;
+struct KLoadProgressbar;
+struct ReaderFile;
+struct CommonWriter;
+struct SequenceWriter;
+struct AlignmentWriter;
+struct Reference;
+
+/*--------------------------------------------------------------------------
+ * CommonWriterSettings
+ */
+enum LoaderModes {
+    mode_Archive,
+    mode_Analysis
+};
+
+typedef struct CommonWriterSettings
+{
+    uint64_t numfiles;
+    char const *inpath;
+    char const *outpath;
+    char const *tmpfs;
+    
+    struct KFile *noMatchLog;
+    
+    char const *schemaPath;
+    char const *schemaIncludePath;
+    
+    char const *refXRefPath;
+    
+    char const *QualQuantizer;
+    
+    char const *refFilter;
+
+    char const* const* refFiles; /* NULL-terminated array pointing to argv */
+    
+    char const *headerText;
+    
+    uint64_t maxAlignCount;
+    size_t cache_size;
+
+    uint64_t errCount;
+    uint64_t maxErrCount;
+    uint64_t maxErrPct;
+    uint64_t maxWarnCount_NoMatch;
+    uint64_t maxWarnCount_DupConflict;
+    uint64_t pid;
+    uint64_t minMatchCount; /* minimum number of matches to count as an alignment */
+    int minMapQual;
+    enum LoaderModes mode;
+    uint32_t maxSeqLen;
+    bool omit_aligned_reads;
+    bool omit_reference_reads;
+    bool no_real_output;
+    bool expectUnsorted;
+    bool noVerifyReferences;
+    bool onlyVerifyReferences;
+    bool useQUAL;
+    bool limit2config;
+    bool editAlignedQual;
+    bool keepMismatchQual;
+    bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+    bool acceptNoMatch; /* accept without any matching bases */
+    uint8_t alignedQualValue;
+    bool allUnaligned; /* treat all records as unaligned */
+    bool noColorSpace;
+    bool noSecondary;
+    bool hasTI;
+    bool acceptHardClip;
+    INSDC_SRA_platform_id platform;
+    bool parseSpotName;
+    bool compressQuality;
+    uint64_t maxMateDistance;
+} CommonWriterSettings;
+
+/*--------------------------------------------------------------------------
+ * SpotAssembler
+ */
+
+#define FRAGMENT_HOT_COUNT (1024u * 1024u)
+#define NUM_ID_SPACES (256u)
+
+typedef struct SpotAssembler {
+    const struct KLoadProgressbar *progress[4];
+    struct KBTree *key2id[NUM_ID_SPACES];
+    char *key2id_names;
+    struct MMArray *id2value;
+    int64_t spotId;
+    int64_t nextFragment;
+
+    struct {
+        int64_t id;
+        void *data;
+    } *fragment; /* [FRAGMENT_HOT_COUNT] */
+
+    uint32_t idCount[NUM_ID_SPACES];
+    uint32_t key2id_hash[NUM_ID_SPACES];
+    
+    size_t key2id_max;
+    size_t key2id_name_max;
+    size_t key2id_name_alloc;
+    size_t key2id_count;
+    
+    size_t key2id_name[NUM_ID_SPACES];
+    /* this array is kept in name order */
+    /* this maps the names to key2id and idCount */
+    size_t key2id_oid[NUM_ID_SPACES];
+
+    int fragmentFd;
+    unsigned pass;
+    bool isColorSpace;
+} SpotAssembler;
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+typedef struct CommonWriter {
+    CommonWriterSettings settings;
+    SpotAssembler ctx;
+    struct SequenceWriter* seq;
+    bool had_sequences;
+    unsigned err_count;
+    bool commit;
+} CommonWriter;
+
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* settings);
+
+rc_t CommonWriterArchive(CommonWriter* self, const struct ReaderFile *);
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting, uint64_t maxDistance);
+
+rc_t CommonWriterWhack(CommonWriter* self);
diff --git a/tools/fastq-loader/fastq-grammar.c b/tools/fastq-loader/fastq-grammar.c
new file mode 100644
index 0000000..1c9313f
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.c
@@ -0,0 +1,2310 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 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 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, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse         FASTQ_parse
+#define yylex           FASTQ_lex
+#define yyerror         FASTQ_error
+#define yylval          FASTQ_lval
+#define yychar          FASTQ_char
+#define yydebug         FASTQ_debug
+#define yynerrs         FASTQ_nerrs
+
+
+/* Copy the first part of user declarations.  */
+
+  
+    #include <sysalloc.h>
+    #include <ctype.h>
+    #include <stdlib.h>
+    #include <string.h>
+
+    #include "fastq-parse.h"
+
+    #define YYSTYPE FASTQToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "fastq-tokens.h"
+
+    static void AddQuality(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetRead(FASTQParseBlock* pb, const FASTQToken* token);
+    
+    static void StartSpotName(FASTQParseBlock* pb, size_t offset);
+    static void GrowSpotName(FASTQParseBlock* pb, const FASTQToken* token);
+    static void StopSpotName(FASTQParseBlock* pb);
+    static void RestartSpotName(FASTQParseBlock* pb);
+    static void SaveSpotName(FASTQParseBlock* pb);
+    static void RevertSpotName(FASTQParseBlock* pb);
+
+    #define UNLEX do { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); } while (0)
+    
+    #define IS_PACBIO(pb) ((pb)->defaultReadNumber == -1)
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     fqENDOFTEXT = 0,
+     fqRUNDOTSPOT = 258,
+     fqSPOTGROUP = 259,
+     fqNUMBER = 260,
+     fqALPHANUM = 261,
+     fqWS = 262,
+     fqENDLINE = 263,
+     fqBASESEQ = 264,
+     fqCOLORSEQ = 265,
+     fqTOKEN = 266,
+     fqASCQUAL = 267,
+     fqCOORDS = 268,
+     fqUNRECOGNIZED = 269
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  19
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   150
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  24
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  49
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  101
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  146
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   269
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    23,     2,    21,    20,    22,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    15,     2,
+       2,    18,    17,     2,    16,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,    19,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     6,     8,     9,    10,    11,    21,    25,
+      27,    29,    32,    34,    38,    43,    47,    50,    51,    55,
+      56,    61,    62,    66,    68,    70,    71,    75,    76,    81,
+      82,    86,    87,    92,    94,    96,    98,   101,   111,   116,
+     120,   121,   126,   127,   132,   135,   137,   140,   144,   146,
+     148,   151,   152,   156,   159,   163,   167,   170,   173,   174,
+     180,   181,   187,   188,   194,   195,   202,   206,   208,   210,
+     213,   216,   219,   222,   225,   228,   229,   233,   234,   239,
+     241,   242,   243,   244,   245,   246,   258,   259,   263,   264,
+     266,   268,   269,   273,   277,   279,   283,   288,   290,   293,
+     296,   300
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      25,     0,    -1,    31,    69,    -1,    31,    -1,    -1,    -1,
+      -1,    55,    13,    26,    15,    27,    43,    15,    28,    71,
+      -1,     6,     1,    30,    -1,    29,    -1,     0,    -1,    30,
+      29,    -1,     8,    -1,    32,    30,    36,    -1,    32,    30,
+       1,    30,    -1,     1,    30,    36,    -1,     1,    30,    -1,
+      -1,    16,    33,    44,    -1,    -1,    16,     7,    34,    44,
+      -1,    -1,    17,    35,    44,    -1,    37,    -1,    40,    -1,
+      -1,     9,    38,    30,    -1,    -1,    37,     9,    39,    30,
+      -1,    -1,    10,    41,    30,    -1,    -1,    40,    10,    42,
+      30,    -1,     9,    -1,    10,    -1,    47,    -1,    47,    56,
+      -1,    47,    56,     7,     5,    15,     6,    15,     5,    65,
+      -1,    47,    56,     7,     6,    -1,    47,    56,     7,    -1,
+      -1,    47,     7,    45,    59,    -1,    -1,    47,     7,    46,
+       6,    -1,    68,     7,    -1,    68,    -1,    55,    56,    -1,
+      55,    56,     7,    -1,    55,    -1,    50,    -1,    50,     4,
+      -1,    -1,    55,    48,     4,    -1,    49,    50,    -1,    49,
+      50,     4,    -1,    49,     6,    18,    -1,    55,     7,    -1,
+      55,    13,    -1,    -1,    55,    13,    19,    51,    59,    -1,
+      -1,    55,    13,    15,    52,    55,    -1,    -1,    55,    13,
+      20,    53,    55,    -1,    -1,    55,    13,    15,    20,    54,
+      55,    -1,    55,    13,    15,    -1,     6,    -1,     5,    -1,
+      55,    19,    -1,    55,    21,    -1,    55,    20,    -1,    55,
+      15,    -1,    55,     6,    -1,    55,     5,    -1,    -1,    22,
+      57,     5,    -1,    -1,    56,    22,    58,    55,    -1,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,    60,    15,    61,
+       6,    62,    15,    63,     5,    64,    65,    -1,    -1,    15,
+      66,    67,    -1,    -1,     9,    -1,     5,    -1,    -1,     3,
+      20,     5,    -1,     3,    22,     5,    -1,     3,    -1,    70,
+      30,    71,    -1,    70,    30,     1,    30,    -1,    23,    -1,
+      70,    11,    -1,    72,    30,    -1,    71,    72,    30,    -1,
+      12,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,    82,    82,    84,    89,    90,    92,    88,    95,    97,
+     101,   102,   106,   110,   111,   112,   113,   117,   117,   118,
+     118,   119,   119,   123,   124,   128,   128,   130,   130,   135,
+     135,   137,   137,   142,   143,   148,   149,   151,   153,   154,
+     156,   156,   157,   157,   158,   159,   160,   161,   162,   166,
+     167,   168,   168,   169,   170,   171,   175,   185,   187,   186,
+     193,   193,   194,   194,   195,   195,   196,   200,   201,   202,
+     203,   204,   205,   206,   207,   212,   211,   224,   223,   235,
+     236,   237,   238,   239,   240,   236,   245,   245,   246,   250,
+     251,   252,   256,   257,   258,   264,   265,   269,   270,   274,
+     275,   278
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "fqENDOFTEXT", "error", "$undefined", "fqRUNDOTSPOT", "fqSPOTGROUP",
+  "fqNUMBER", "fqALPHANUM", "fqWS", "fqENDLINE", "fqBASESEQ", "fqCOLORSEQ",
+  "fqTOKEN", "fqASCQUAL", "fqCOORDS", "fqUNRECOGNIZED", "':'", "'@'",
+  "'>'", "'='", "'_'", "'.'", "'-'", "'/'", "'+'", "$accept", "sequence",
+  "$@1", "$@2", "$@3", "endfile", "endline", "readLines", "header", "$@4",
+  "$@5", "$@6", "read", "baseRead", "$@7", "$@8", "csRead", "$@9", "$@10",
+  "inlineRead", "tagLine", "$@11", "$@12", "nameSpotGroup", "$@13",
+  "nameWS", "nameWithCoords", "$@14", "$@15", "$@16", "$@17", "name",
+  "readNumber", "$@18", "$@19", "casava1_8", "$@20", "$@21", "$@22",
+  "$@23", "$@24", "indexSequence", "$@25", "index", "runSpotRead",
+  "qualityLines", "qualityHeader", "quality", "qualityLine", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,    58,    64,    62,    61,    95,
+      46,    45,    47,    43
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    24,    25,    25,    26,    27,    28,    25,    25,    25,
+      29,    29,    30,    31,    31,    31,    31,    33,    32,    34,
+      32,    35,    32,    36,    36,    38,    37,    39,    37,    41,
+      40,    42,    40,    43,    43,    44,    44,    44,    44,    44,
+      45,    44,    46,    44,    44,    44,    44,    44,    44,    47,
+      47,    48,    47,    47,    47,    47,    49,    50,    51,    50,
+      52,    50,    53,    50,    54,    50,    50,    55,    55,    55,
+      55,    55,    55,    55,    55,    57,    56,    58,    56,    59,
+      60,    61,    62,    63,    64,    59,    66,    65,    65,    67,
+      67,    67,    68,    68,    68,    69,    69,    70,    70,    71,
+      71,    72
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     2,     1,     0,     0,     0,     9,     3,     1,
+       1,     2,     1,     3,     4,     3,     2,     0,     3,     0,
+       4,     0,     3,     1,     1,     0,     3,     0,     4,     0,
+       3,     0,     4,     1,     1,     1,     2,     9,     4,     3,
+       0,     4,     0,     4,     2,     1,     2,     3,     1,     1,
+       2,     0,     3,     2,     3,     3,     2,     2,     0,     5,
+       0,     5,     0,     5,     0,     6,     3,     1,     1,     2,
+       2,     2,     2,     2,     2,     0,     3,     0,     4,     1,
+       0,     0,     0,     0,     0,    11,     0,     3,     0,     1,
+       1,     0,     3,     3,     1,     3,     4,     1,     2,     2,
+       3,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,    10,     0,    68,     0,    12,    17,    21,     0,     9,
+       0,     3,     0,     0,    16,     0,    19,     0,     0,     1,
+      11,    97,     2,     0,     0,    74,    73,     4,    72,    69,
+      71,    70,    25,    29,    15,    23,    24,     8,     0,    94,
+      67,    18,    35,     0,    49,    48,    45,    22,    98,     0,
+       0,    13,     0,     0,     0,    27,    31,    20,     0,     0,
+      40,    75,    36,    67,    53,     0,    50,    56,    57,     0,
+      46,    44,     0,   101,    95,     0,    14,     5,    26,    30,
+       0,     0,    92,    93,     0,     0,     0,    39,    77,    55,
+      54,    66,    58,    62,    52,    47,    96,     0,    99,     0,
+      28,    32,    79,    41,    43,    76,     0,    38,     0,    64,
+       0,     0,     0,   100,    33,    34,     0,     0,     0,    78,
+       0,    61,    59,    63,     6,    81,     0,    65,     0,     0,
+       0,     7,    82,    88,     0,    86,    37,    83,    91,     0,
+      90,    89,    87,    84,    88,    85
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     8,    52,    99,   128,     9,    10,    11,    12,    17,
+      38,    18,    34,    35,    53,    80,    36,    54,    81,   116,
+      41,    84,    85,    42,    69,    43,    44,   111,   110,   112,
+     120,    45,    62,    86,   108,   103,   117,   129,   134,   139,
+     144,   136,   138,   142,    46,    22,    23,    74,    75
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -73
+static const yytype_int8 yypact[] =
+{
+      50,   -73,     8,   -73,     4,   -73,     1,   -73,    21,   -73,
+       7,    11,     8,    57,    59,     8,   -73,    82,    82,   -73,
+     -73,   -73,   -73,    28,    32,   -73,   -73,   -73,   -73,   -73,
+     -73,   -73,   -73,   -73,   -73,    77,    44,   -73,    82,    53,
+     -73,   -73,     5,    76,    88,    25,    93,   -73,   -73,    36,
+       8,   -73,    90,     8,     8,   -73,   -73,   -73,   101,   102,
+     103,   -73,     6,    95,   110,    78,   -73,   -73,    45,   114,
+      13,   -73,     8,   -73,   107,     8,   -73,   -73,   -73,   -73,
+       8,     8,   -73,   -73,   116,   117,   119,    84,   -73,   -73,
+     -73,    -2,   -73,   -73,   -73,   -73,   -73,     8,   -73,    85,
+     -73,   -73,   111,   -73,   -73,   -73,   112,   -73,    98,   -73,
+      98,   116,    98,   -73,   -73,   -73,   113,   115,   123,    96,
+      98,    96,   -73,    96,   -73,   -73,   118,    96,   107,   125,
+     120,   107,   -73,   121,   122,   -73,   -73,   -73,    52,   127,
+     -73,   -73,   -73,   -73,   121,   -73
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -73,   -73,   -73,   -73,   -73,   124,    -1,   -73,   -73,   -73,
+     -73,   -73,   126,   -73,   -73,   -73,   -73,   -73,   -73,   -73,
+     -12,   -73,   -73,   -73,   -73,   -73,    79,   -73,   -73,   -73,
+     -73,     0,    94,   -73,   -73,    24,   -73,   -73,   -73,   -73,
+     -73,    -6,   -73,   -73,   -73,   -73,   -73,    12,   -72
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -81
+static const yytype_int16 yytable[] =
+{
+      13,    14,    97,   -60,   -60,    15,    47,     1,    16,   -67,
+     -67,    24,    60,    87,    37,     5,     5,   -67,   109,   -67,
+      95,    19,    49,   -67,   -67,   -67,    57,    61,    88,   -51,
+      25,    26,    67,    50,    21,    88,     5,    72,    68,    48,
+      28,    32,    33,    65,    29,    30,    31,    61,    73,    76,
+       1,     2,    78,    79,    56,     3,     4,   140,     5,    97,
+      91,   141,    25,    26,    92,    93,     6,     7,    32,    33,
+      27,    96,    28,    58,    98,    59,    29,    30,    31,   100,
+     101,     3,    63,    25,    26,    39,    55,     3,    40,   106,
+     107,    68,    66,    28,   114,   115,   113,    29,    30,    31,
+      71,    25,    26,     3,    40,    77,    82,    83,   119,   -42,
+     121,    28,   123,    89,    90,    29,    30,    31,    94,    73,
+     127,   102,    64,   104,   105,   133,   -80,   118,   124,   126,
+     125,   132,   143,   130,    20,   122,   135,   137,   145,    70,
+     131,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      51
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-73))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     2,    74,     5,     6,     1,    18,     0,     7,     5,
+       6,    12,     7,     7,    15,     8,     8,    13,    20,    15,
+       7,     0,    23,    19,    20,    21,    38,    22,    22,     4,
+       5,     6,     7,     1,    23,    22,     8,     1,    13,    11,
+      15,     9,    10,    43,    19,    20,    21,    22,    12,    50,
+       0,     1,    53,    54,    10,     5,     6,     5,     8,   131,
+      15,     9,     5,     6,    19,    20,    16,    17,     9,    10,
+      13,    72,    15,    20,    75,    22,    19,    20,    21,    80,
+      81,     5,     6,     5,     6,     3,     9,     5,     6,     5,
+       6,    13,     4,    15,     9,    10,    97,    19,    20,    21,
+       7,     5,     6,     5,     6,    15,     5,     5,   108,     6,
+     110,    15,   112,    18,     4,    19,    20,    21,     4,    12,
+     120,     5,    43,     6,     5,     5,    15,    15,    15,     6,
+      15,     6,     5,    15,    10,   111,    15,    15,   144,    45,
+     128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      24
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     0,     1,     5,     6,     8,    16,    17,    25,    29,
+      30,    31,    32,    55,    30,     1,     7,    33,    35,     0,
+      29,    23,    69,    70,    30,     5,     6,    13,    15,    19,
+      20,    21,     9,    10,    36,    37,    40,    30,    34,     3,
+       6,    44,    47,    49,    50,    55,    68,    44,    11,    30,
+       1,    36,    26,    38,    41,     9,    10,    44,    20,    22,
+       7,    22,    56,     6,    50,    55,     4,     7,    13,    48,
+      56,     7,     1,    12,    71,    72,    30,    15,    30,    30,
+      39,    42,     5,     5,    45,    46,    57,     7,    22,    18,
+       4,    15,    19,    20,     4,     7,    30,    72,    30,    27,
+      30,    30,     5,    59,     6,     5,     5,     6,    58,    20,
+      52,    51,    53,    30,     9,    10,    43,    60,    15,    55,
+      54,    55,    59,    55,    15,    15,     6,    55,    28,    61,
+      15,    71,     6,     5,    62,    15,    65,    15,    66,    63,
+       5,     9,    67,     5,    64,    65
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (pb, YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, pb)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value, pb); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (pb);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FASTQParseBlock* pb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    FASTQParseBlock* pb;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       , pb);
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule, pb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (pb);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (FASTQParseBlock* pb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (FASTQParseBlock* pb)
+#else
+int
+yyparse (pb)
+    FASTQParseBlock* pb;
+#endif
+#endif
+{
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yypact_value_is_default (yyn))
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 3:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 4:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); StopSpotName(pb); }
+    break;
+
+  case 5:
+
+    { FASTQScan_inline_sequence(pb); }
+    break;
+
+  case 6:
+
+    { FASTQScan_inline_quality(pb); }
+    break;
+
+  case 7:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 8:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 9:
+
+    { return 0; }
+    break;
+
+  case 17:
+
+    { StartSpotName(pb, 1); }
+    break;
+
+  case 19:
+
+    { StartSpotName(pb, 1 + (yyvsp[(2) - (2)]).tokenLength); }
+    break;
+
+  case 21:
+
+    { StartSpotName(pb, 1); }
+    break;
+
+  case 23:
+
+    { pb->record->seq.is_colorspace = false; }
+    break;
+
+  case 24:
+
+    { pb->record->seq.is_colorspace = true; }
+    break;
+
+  case 25:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 27:
+
+    { SetRead(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+  case 29:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 31:
+
+    { SetRead(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+  case 33:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = false; }
+    break;
+
+  case 34:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = true; }
+    break;
+
+  case 38:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 39:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 40:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (2)])); StopSpotName(pb); }
+    break;
+
+  case 41:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 42:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (2)])); StopSpotName(pb); }
+    break;
+
+  case 43:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 44:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 45:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 47:
+
+    { FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 50:
+
+    { SetSpotGroup(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 51:
+
+    { StopSpotName(pb); }
+    break;
+
+  case 52:
+
+    { SetSpotGroup(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 54:
+
+    { SetSpotGroup(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 55:
+
+    { RevertSpotName(pb); FASTQScan_skip_to_eol(pb); }
+    break;
+
+  case 56:
+
+    {   /* 'name' without coordinates attached will be ignored if followed by a name with coordinates (see the previous production).
+           however, if not followed, this will be the spot name, so we need to save the 'name's coordinates in case 
+           we need to revert to them later (see call to RevertSpotName() above) */
+        SaveSpotName(pb); 
+        GrowSpotName(pb, &(yyvsp[(2) - (2)])); /* need to account for white space but it is not part of the spot name */
+        RestartSpotName(pb); /* clean up for the potential nameWithCoords to start here */
+    }
+    break;
+
+  case 57:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); StopSpotName(pb); }
+    break;
+
+  case 58:
+
+    {   /* another variation by Illumina, this time "_" is used as " /" */
+                    GrowSpotName(pb, &(yyvsp[(2) - (3)])); 
+                    StopSpotName(pb);
+                    GrowSpotName(pb, &(yyvsp[(3) - (3)]));
+                }
+    break;
+
+  case 60:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (3)])); GrowSpotName(pb, &(yyvsp[(3) - (3)]));}
+    break;
+
+  case 62:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (3)])); GrowSpotName(pb, &(yyvsp[(3) - (3)]));}
+    break;
+
+  case 64:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (4)])); GrowSpotName(pb, &(yyvsp[(3) - (4)])); GrowSpotName(pb, &(yyvsp[(4) - (4)]));}
+    break;
+
+  case 66:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (3)])); GrowSpotName(pb, &(yyvsp[(3) - (3)])); StopSpotName(pb); }
+    break;
+
+  case 67:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 68:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 69:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 70:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 71:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 72:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 73:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 74:
+
+    { GrowSpotName(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 75:
+
+    {   /* in PACBIO fastq, the first '/' and the following digits are treated as a continuation of the spot name, not a read number */
+            if (IS_PACBIO(pb)) pb->spotNameDone = false; 
+            GrowSpotName(pb, &(yyvsp[(1) - (1)])); 
+        }
+    break;
+
+  case 76:
+
+    { 
+            if (!IS_PACBIO(pb)) SetReadNumber(pb, &(yyvsp[(3) - (3)])); 
+            GrowSpotName(pb, &(yyvsp[(3) - (3)])); 
+            StopSpotName(pb); 
+        }
+    break;
+
+  case 77:
+
+    { 
+            if (IS_PACBIO(pb)) pb->spotNameDone = false; 
+            GrowSpotName(pb, &(yyvsp[(2) - (2)])); 
+        }
+    break;
+
+  case 78:
+
+    { 
+            if (IS_PACBIO(pb)) StopSpotName(pb); 
+        }
+    break;
+
+  case 79:
+
+    { SetReadNumber(pb, &(yyvsp[(1) - (1)])); GrowSpotName(pb, &(yyvsp[(1) - (1)])); StopSpotName(pb); }
+    break;
+
+  case 80:
+
+    { SetReadNumber(pb, &(yyvsp[(1) - (1)])); GrowSpotName(pb, &(yyvsp[(1) - (1)])); StopSpotName(pb); }
+    break;
+
+  case 81:
+
+    { GrowSpotName(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 82:
+
+    { GrowSpotName(pb, &(yyvsp[(5) - (5)])); if ((yyvsp[(5) - (5)]).tokenLength == 1 && TokenTextPtr(pb, &(yyvsp[(5) - (5)]))[0] == 'Y') pb->record->seq.lowQuality = true; }
+    break;
+
+  case 83:
+
+    { GrowSpotName(pb, &(yyvsp[(7) - (7)])); }
+    break;
+
+  case 84:
+
+    { GrowSpotName(pb, &(yyvsp[(9) - (9)])); }
+    break;
+
+  case 86:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (1)])); FASTQScan_inline_sequence(pb); }
+    break;
+
+  case 89:
+
+    { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowSpotName(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 90:
+
+    { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowSpotName(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 92:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (3)])); StopSpotName(pb); SetReadNumber(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 93:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (3)])); StopSpotName(pb); SetReadNumber(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 94:
+
+    { GrowSpotName(pb, &(yyvsp[(1) - (1)])); StopSpotName(pb); }
+    break;
+
+  case 101:
+
+    {  AddQuality(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+
+
+      default: break;
+    }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (pb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
+      {
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (pb, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
+      }
+# undef YYSYNTAX_ERROR
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval, pb);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (!yypact_value_is_default (yyn))
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp, pb);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (pb, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, pb);
+    }
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp, pb);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+
+
+/* values used in validating quality lines */
+#define MIN_PHRED_33    33
+#define MAX_PHRED_33    126
+#define MIN_PHRED_64    64
+#define MAX_PHRED_64    127
+#define MIN_LOGODDS     59   
+#define MAX_LOGODDS     126   
+
+void AddQuality(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    uint8_t floor;
+    uint8_t ceiling;
+    const char* format;
+    switch ( pb->qualityFormat )
+    {
+    case FASTQphred33:
+        floor   = MIN_PHRED_33;
+        ceiling = MAX_PHRED_33;
+        format = "Phred33";
+        pb -> qualityAsciiOffset = 33;
+        break;
+    case FASTQphred64:
+        floor   = MIN_PHRED_64;
+        ceiling = MAX_PHRED_64;
+        format = "Phred64";
+        pb -> qualityAsciiOffset = 64;
+        break;
+    case FASTQlogodds:
+        floor   = MIN_LOGODDS;
+        ceiling = MAX_LOGODDS;
+        format = "Logodds";
+        pb -> qualityAsciiOffset = 64;
+        break;
+    default:
+        /* TODO: 
+            if qualityAsciiOffset is 0, 
+                guess based on the raw values on the first quality line:
+                    if all values are above MAX_PHRED_33, qualityAsciiOffset = 64
+                    if all values are in MIN_PHRED_33..MAX_PHRED_33, qualityAsciiOffset = 33
+                    if any value is below MIN_PHRED_33, abort
+                if the guess is 33 and proven wrong (a raw quality value >MAX_PHRED_33 is encountered and no values below MIN_PHRED_64 ever seen)
+                    reopen the file, 
+                    qualityAsciiOffset = 64
+                    try to parse again
+                    if a value below MIN_PHRED_64 seen, abort 
+        */
+        {
+            char buf[200];
+            sprintf ( buf, "Invalid quality format: %d.", pb->qualityFormat );
+            pb->fatalError = true;
+            yyerror(pb, buf);
+            return;
+        }
+    }
+    
+    {   /* make sure all qualities fall into the required range */
+        unsigned int i;
+        for (i=0; i < token->tokenLength; ++i)
+        {
+            char ch = TokenTextPtr(pb, token)[i];
+            if (ch < floor || ch > ceiling)
+            {
+                char buf[200];
+                sprintf ( buf, "Invalid quality value ('%c'=%d, position %d): for %s, valid range is from %d to %d.", 
+                                                        ch,
+                                                        ch,
+                                                        i,
+                                                        format, 
+                                                        floor, 
+                                                        ceiling);
+                pb->fatalError = true;
+                yyerror(pb, buf);
+                return;
+            }
+        }
+    }
+    
+    if (pb->qualityLength == 0)
+    {
+        pb->qualityOffset = token->tokenStart;
+        pb->qualityLength= token->tokenLength;
+    }
+    else
+    {
+        pb->qualityLength += token->tokenLength;
+    }
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{   /* token is known to be numeric */
+    if (pb->defaultReadNumber != -1)
+    {   /* we will only handle 1-digit read numbers for now*/
+        if (token->tokenLength == 1)
+        {
+            switch (TokenTextPtr(pb, token)[0])
+            {
+            case '1': 
+                {
+                    pb->record->seq.readnumber = 1; 
+                    break;
+                }
+            case '0': 
+                {
+                    pb->record->seq.readnumber = pb->defaultReadNumber;
+                    break;
+                }
+            default: 
+                {   /* all secondary read numbers should be the same across an input file */
+                    uint8_t readNum = TokenTextPtr(pb, token)[0] - '0';
+                    if (pb->secondaryReadNumber == 0) /* this is the first secondary read observed */
+                    {
+                        pb->secondaryReadNumber = readNum;
+                    }
+                    else if (pb->secondaryReadNumber != readNum)
+                    {
+                        char buf[200];
+                        sprintf(buf, 
+                                "Inconsistent secondary read number: previously used %d, now seen %d", 
+                                pb->secondaryReadNumber, readNum);
+                        pb->fatalError = true;
+                        yyerror(pb, buf);
+                        return;
+                    }
+                    /* all secondary read numbers are internally represented as 2 */
+                    pb->record->seq.readnumber = 2; 
+                    
+                    break;
+                }
+            }
+        }
+        else
+            pb->record->seq.readnumber = pb->defaultReadNumber;
+    }
+}
+
+void StartSpotName(FASTQParseBlock* pb, size_t offset)
+{
+    pb->spotNameOffset = offset;
+    pb->spotNameLength = 0;
+}
+
+void SaveSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset_saved = pb->spotNameOffset;
+    pb->spotNameLength_saved = pb->spotNameLength;
+}    
+
+void RestartSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset += pb->spotNameLength;
+    pb->spotNameLength = 0;
+}
+
+void RevertSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset = pb->spotNameOffset_saved;
+    pb->spotNameLength = pb->spotNameLength_saved;
+}
+
+void GrowSpotName(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (!pb->spotNameDone)
+    {
+        pb->spotNameLength += token->tokenLength;
+    }
+}
+
+void StopSpotName(FASTQParseBlock* pb)
+{   /* there may be more tokens coming, they will not be a part of the spot name */
+    pb->spotNameDone = true;
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if ( ! pb->ignoreSpotGroups )
+    {   
+        unsigned int nameStart = 0;
+        /* skip possible '#' at the start of spot group name */
+        if ( TokenTextPtr ( pb, token )[0] == '#' ) 
+        {   
+            nameStart = 1;
+        }
+        
+        if ( token->tokenLength != 1+nameStart || TokenTextPtr(pb, token)[nameStart] != '0' ) /* ignore spot group 0 */
+        {
+            pb->spotGroupOffset = token->tokenStart  + nameStart;    
+            pb->spotGroupLength = token->tokenLength - nameStart;
+        }
+    }
+}
+
+void SetRead(FASTQParseBlock* pb, const FASTQToken* token)
+{ 
+    pb->readOffset = token->tokenStart;
+    pb->readLength = token->tokenLength;
+}
+
diff --git a/tools/fastq-loader/fastq-grammar.y b/tools/fastq-loader/fastq-grammar.y
new file mode 100644
index 0000000..1434c08
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.y
@@ -0,0 +1,478 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{  
+    #include <sysalloc.h>
+    #include <ctype.h>
+    #include <stdlib.h>
+    #include <string.h>
+
+    #include "fastq-parse.h"
+
+    #define YYSTYPE FASTQToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "fastq-tokens.h"
+
+    static void AddQuality(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetRead(FASTQParseBlock* pb, const FASTQToken* token);
+    
+    static void StartSpotName(FASTQParseBlock* pb, size_t offset);
+    static void GrowSpotName(FASTQParseBlock* pb, const FASTQToken* token);
+    static void StopSpotName(FASTQParseBlock* pb);
+    static void RestartSpotName(FASTQParseBlock* pb);
+    static void SaveSpotName(FASTQParseBlock* pb);
+    static void RevertSpotName(FASTQParseBlock* pb);
+
+    #define UNLEX do { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); } while (0)
+    
+    #define IS_PACBIO(pb) ((pb)->defaultReadNumber == -1)
+%}
+
+%pure-parser
+%parse-param {FASTQParseBlock* pb }
+%lex-param {FASTQParseBlock* pb }
+%error-verbose 
+%name-prefix "FASTQ_"
+
+%token fqRUNDOTSPOT
+%token fqSPOTGROUP
+%token fqNUMBER
+%token fqALPHANUM
+%token fqWS
+%token fqENDLINE
+%token fqBASESEQ
+%token fqCOLORSEQ
+%token fqTOKEN
+%token fqASCQUAL
+%token fqCOORDS
+%token fqUNRECOGNIZED
+%token fqENDOFTEXT 0
+
+
+%%
+
+sequence /* have to return the lookahead symbol before returning since it belongs to the next record and cannot be dropped */
+    : readLines qualityLines    { UNLEX; return 1; }
+    
+    | readLines                 { UNLEX; return 1; }
+    
+/*    | qualityLines              { UNLEX; return 1; } */
+    
+    | name                      
+        fqCOORDS                { GrowSpotName(pb, &$2); StopSpotName(pb); }
+        ':'                     { FASTQScan_inline_sequence(pb); } 
+        inlineRead              
+        ':'                     { FASTQScan_inline_quality(pb); } 
+        quality                 { UNLEX; return 1; }
+           
+    | fqALPHANUM error endline  { UNLEX; return 1; }
+           
+    | endfile                   { return 0; }
+    ;
+
+endfile
+    : fqENDOFTEXT
+    | endline endfile
+    ;
+
+endline
+    : fqENDLINE
+    ;
+
+readLines
+    : header  endline  read   
+    | header  endline error endline
+    | error   endline  read 
+    | error endline
+    ;
+
+header 
+    : '@' { StartSpotName(pb, 1); } tagLine
+    | '@' fqWS { StartSpotName(pb, 1 + $2.tokenLength); } tagLine
+    | '>' { StartSpotName(pb, 1); } tagLine
+    ;
+
+read
+    : baseRead  { pb->record->seq.is_colorspace = false; }
+    | csRead    { pb->record->seq.is_colorspace = true; }
+    ;
+
+baseRead
+    : fqBASESEQ { SetRead(pb, & $1); } 
+        endline            
+    | baseRead fqBASESEQ { SetRead(pb, & $2); } 
+        endline  
+    ;
+ 
+csRead
+    : fqCOLORSEQ { SetRead(pb, & $1); } 
+        endline           
+    | csRead fqCOLORSEQ { SetRead(pb, & $2); } 
+        endline
+    ;
+
+inlineRead
+    : fqBASESEQ                   { SetRead(pb, & $1); pb->record->seq.is_colorspace = false; }
+    | fqCOLORSEQ                  { SetRead(pb, & $1); pb->record->seq.is_colorspace = true; }
+    ;
+    
+ /*************** tag line rules *****************/
+tagLine    
+    : nameSpotGroup 
+    | nameSpotGroup readNumber
+    
+    | nameSpotGroup readNumber fqWS fqNUMBER ':' fqALPHANUM ':' fqNUMBER indexSequence
+    
+    | nameSpotGroup readNumber fqWS fqALPHANUM { FASTQScan_skip_to_eol(pb); } 
+    | nameSpotGroup readNumber fqWS { FASTQScan_skip_to_eol(pb); } 
+    
+    | nameSpotGroup fqWS  { GrowSpotName(pb, &$1); StopSpotName(pb); } casava1_8 { FASTQScan_skip_to_eol(pb); }
+    | nameSpotGroup fqWS  { GrowSpotName(pb, &$1); StopSpotName(pb); } fqALPHANUM { FASTQScan_skip_to_eol(pb); } /* no recognizable read number */
+    | runSpotRead fqWS  { FASTQScan_skip_to_eol(pb); }
+    | runSpotRead       { FASTQScan_skip_to_eol(pb); }
+    | name readNumber
+    | name readNumber fqWS  { FASTQScan_skip_to_eol(pb); } 
+    | name 
+    ;
+    
+nameSpotGroup
+    : nameWithCoords 
+    | nameWithCoords fqSPOTGROUP                { SetSpotGroup(pb, &$2); }
+    | name { StopSpotName(pb); } fqSPOTGROUP    { SetSpotGroup(pb, &$3); }
+    | nameWS nameWithCoords                                                     /* nameWS ignored */
+    | nameWS nameWithCoords fqSPOTGROUP         { SetSpotGroup(pb, &$3); }      /* nameWS ignored */
+    | nameWS fqALPHANUM '='  { RevertSpotName(pb); FASTQScan_skip_to_eol(pb); }
+    ;
+    
+nameWS
+    : name fqWS 
+    {   /* 'name' without coordinates attached will be ignored if followed by a name with coordinates (see the previous production).
+           however, if not followed, this will be the spot name, so we need to save the 'name's coordinates in case 
+           we need to revert to them later (see call to RevertSpotName() above) */
+        SaveSpotName(pb); 
+        GrowSpotName(pb, &$2); /* need to account for white space but it is not part of the spot name */
+        RestartSpotName(pb); /* clean up for the potential nameWithCoords to start here */
+    } 
+
+nameWithCoords    
+    : name fqCOORDS { GrowSpotName(pb, &$2); StopSpotName(pb); } 
+    | name fqCOORDS '_' 
+                {   /* another variation by Illumina, this time "_" is used as " /" */
+                    GrowSpotName(pb, &$2); 
+                    StopSpotName(pb);
+                    GrowSpotName(pb, &$3);
+                }    
+                casava1_8
+    | name fqCOORDS ':'     { GrowSpotName(pb, &$2); GrowSpotName(pb, &$3);} name
+    | name fqCOORDS '.'     { GrowSpotName(pb, &$2); GrowSpotName(pb, &$3);} name
+    | name fqCOORDS ':' '.' { GrowSpotName(pb, &$2); GrowSpotName(pb, &$3); GrowSpotName(pb, &$4);} name
+    | name fqCOORDS ':'     { GrowSpotName(pb, &$2); GrowSpotName(pb, &$3); StopSpotName(pb); } 
+    ;
+    
+name
+    : fqALPHANUM        { GrowSpotName(pb, &$1); }
+    | fqNUMBER          { GrowSpotName(pb, &$1); }
+    | name '_'          { GrowSpotName(pb, &$2); }
+    | name '-'          { GrowSpotName(pb, &$2); }
+    | name '.'          { GrowSpotName(pb, &$2); }
+    | name ':'          { GrowSpotName(pb, &$2); }
+    | name fqALPHANUM   { GrowSpotName(pb, &$2); }
+    | name fqNUMBER     { GrowSpotName(pb, &$2); }
+    ;
+
+readNumber
+    : '/'       
+        {   /* in PACBIO fastq, the first '/' and the following digits are treated as a continuation of the spot name, not a read number */
+            if (IS_PACBIO(pb)) pb->spotNameDone = false; 
+            GrowSpotName(pb, &$1); 
+        } 
+      fqNUMBER  
+        { 
+            if (!IS_PACBIO(pb)) SetReadNumber(pb, &$3); 
+            GrowSpotName(pb, &$3); 
+            StopSpotName(pb); 
+        }
+ 
+    | readNumber '/' 
+        { 
+            if (IS_PACBIO(pb)) pb->spotNameDone = false; 
+            GrowSpotName(pb, &$2); 
+        } 
+        name 
+        { 
+            if (IS_PACBIO(pb)) StopSpotName(pb); 
+        }
+    ;
+
+casava1_8
+    : fqNUMBER          { SetReadNumber(pb, &$1); GrowSpotName(pb, &$1); StopSpotName(pb); }
+    | fqNUMBER          { SetReadNumber(pb, &$1); GrowSpotName(pb, &$1); StopSpotName(pb); }
+     ':'                { GrowSpotName(pb, &$3); }
+     fqALPHANUM         { GrowSpotName(pb, &$5); if ($5.tokenLength == 1 && TokenTextPtr(pb, &$5)[0] == 'Y') pb->record->seq.lowQuality = true; }
+     ':'                { GrowSpotName(pb, &$7); }
+     fqNUMBER           { GrowSpotName(pb, &$9); }
+     indexSequence
+    ;
+
+indexSequence
+    :  ':' { GrowSpotName(pb, &$1); FASTQScan_inline_sequence(pb); } index
+    |
+    ;
+    
+index
+    : fqBASESEQ { SetSpotGroup(pb, &$1); GrowSpotName(pb, &$1); }
+    | fqNUMBER  { SetSpotGroup(pb, &$1); GrowSpotName(pb, &$1); }
+    |
+    ;
+
+runSpotRead
+    : fqRUNDOTSPOT '.' fqNUMBER     { GrowSpotName(pb, &$1); StopSpotName(pb); SetReadNumber(pb, &$3); }
+    | fqRUNDOTSPOT '/' fqNUMBER     { GrowSpotName(pb, &$1); StopSpotName(pb); SetReadNumber(pb, &$3); }
+    | fqRUNDOTSPOT                  { GrowSpotName(pb, &$1); StopSpotName(pb); }
+    ;
+    
+ /*************** quality rules *****************/
+
+qualityLines
+    : qualityHeader endline quality 
+    | qualityHeader endline error endline
+    ;
+
+qualityHeader
+    : '+'                 
+    | qualityHeader fqTOKEN
+    ;
+
+quality
+    : qualityLine endline           
+    | quality qualityLine endline
+    
+qualityLine
+    : fqASCQUAL                {  AddQuality(pb, & $1); }
+    ;
+
+%%
+
+/* values used in validating quality lines */
+#define MIN_PHRED_33    33
+#define MAX_PHRED_33    126
+#define MIN_PHRED_64    64
+#define MAX_PHRED_64    127
+#define MIN_LOGODDS     59   
+#define MAX_LOGODDS     126   
+
+void AddQuality(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    uint8_t floor;
+    uint8_t ceiling;
+    const char* format;
+    switch ( pb->qualityFormat )
+    {
+    case FASTQphred33:
+        floor   = MIN_PHRED_33;
+        ceiling = MAX_PHRED_33;
+        format = "Phred33";
+        pb -> qualityAsciiOffset = 33;
+        break;
+    case FASTQphred64:
+        floor   = MIN_PHRED_64;
+        ceiling = MAX_PHRED_64;
+        format = "Phred64";
+        pb -> qualityAsciiOffset = 64;
+        break;
+    case FASTQlogodds:
+        floor   = MIN_LOGODDS;
+        ceiling = MAX_LOGODDS;
+        format = "Logodds";
+        pb -> qualityAsciiOffset = 64;
+        break;
+    default:
+        /* TODO: 
+            if qualityAsciiOffset is 0, 
+                guess based on the raw values on the first quality line:
+                    if all values are above MAX_PHRED_33, qualityAsciiOffset = 64
+                    if all values are in MIN_PHRED_33..MAX_PHRED_33, qualityAsciiOffset = 33
+                    if any value is below MIN_PHRED_33, abort
+                if the guess is 33 and proven wrong (a raw quality value >MAX_PHRED_33 is encountered and no values below MIN_PHRED_64 ever seen)
+                    reopen the file, 
+                    qualityAsciiOffset = 64
+                    try to parse again
+                    if a value below MIN_PHRED_64 seen, abort 
+        */
+        {
+            char buf[200];
+            sprintf ( buf, "Invalid quality format: %d.", pb->qualityFormat );
+            pb->fatalError = true;
+            yyerror(pb, buf);
+            return;
+        }
+    }
+    
+    {   /* make sure all qualities fall into the required range */
+        unsigned int i;
+        for (i=0; i < token->tokenLength; ++i)
+        {
+            char ch = TokenTextPtr(pb, token)[i];
+            if (ch < floor || ch > ceiling)
+            {
+                char buf[200];
+                sprintf ( buf, "Invalid quality value ('%c'=%d, position %d): for %s, valid range is from %d to %d.", 
+                                                        ch,
+                                                        ch,
+                                                        i,
+                                                        format, 
+                                                        floor, 
+                                                        ceiling);
+                pb->fatalError = true;
+                yyerror(pb, buf);
+                return;
+            }
+        }
+    }
+    
+    if (pb->qualityLength == 0)
+    {
+        pb->qualityOffset = token->tokenStart;
+        pb->qualityLength= token->tokenLength;
+    }
+    else
+    {
+        pb->qualityLength += token->tokenLength;
+    }
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{   /* token is known to be numeric */
+    if (pb->defaultReadNumber != -1)
+    {   /* we will only handle 1-digit read numbers for now*/
+        if (token->tokenLength == 1)
+        {
+            switch (TokenTextPtr(pb, token)[0])
+            {
+            case '1': 
+                {
+                    pb->record->seq.readnumber = 1; 
+                    break;
+                }
+            case '0': 
+                {
+                    pb->record->seq.readnumber = pb->defaultReadNumber;
+                    break;
+                }
+            default: 
+                {   /* all secondary read numbers should be the same across an input file */
+                    uint8_t readNum = TokenTextPtr(pb, token)[0] - '0';
+                    if (pb->secondaryReadNumber == 0) /* this is the first secondary read observed */
+                    {
+                        pb->secondaryReadNumber = readNum;
+                    }
+                    else if (pb->secondaryReadNumber != readNum)
+                    {
+                        char buf[200];
+                        sprintf(buf, 
+                                "Inconsistent secondary read number: previously used %d, now seen %d", 
+                                pb->secondaryReadNumber, readNum);
+                        pb->fatalError = true;
+                        yyerror(pb, buf);
+                        return;
+                    }
+                    /* all secondary read numbers are internally represented as 2 */
+                    pb->record->seq.readnumber = 2; 
+                    
+                    break;
+                }
+            }
+        }
+        else
+            pb->record->seq.readnumber = pb->defaultReadNumber;
+    }
+}
+
+void StartSpotName(FASTQParseBlock* pb, size_t offset)
+{
+    pb->spotNameOffset = offset;
+    pb->spotNameLength = 0;
+}
+
+void SaveSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset_saved = pb->spotNameOffset;
+    pb->spotNameLength_saved = pb->spotNameLength;
+}    
+
+void RestartSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset += pb->spotNameLength;
+    pb->spotNameLength = 0;
+}
+
+void RevertSpotName(FASTQParseBlock* pb)
+{
+    pb->spotNameOffset = pb->spotNameOffset_saved;
+    pb->spotNameLength = pb->spotNameLength_saved;
+}
+
+void GrowSpotName(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (!pb->spotNameDone)
+    {
+        pb->spotNameLength += token->tokenLength;
+    }
+}
+
+void StopSpotName(FASTQParseBlock* pb)
+{   /* there may be more tokens coming, they will not be a part of the spot name */
+    pb->spotNameDone = true;
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if ( ! pb->ignoreSpotGroups )
+    {   
+        unsigned int nameStart = 0;
+        /* skip possible '#' at the start of spot group name */
+        if ( TokenTextPtr ( pb, token )[0] == '#' ) 
+        {   
+            nameStart = 1;
+        }
+        
+        if ( token->tokenLength != 1+nameStart || TokenTextPtr(pb, token)[nameStart] != '0' ) /* ignore spot group 0 */
+        {
+            pb->spotGroupOffset = token->tokenStart  + nameStart;    
+            pb->spotGroupLength = token->tokenLength - nameStart;
+        }
+    }
+}
+
+void SetRead(FASTQParseBlock* pb, const FASTQToken* token)
+{ 
+    pb->readOffset = token->tokenStart;
+    pb->readLength = token->tokenLength;
+}
diff --git a/tools/fastq-loader/fastq-lex.c b/tools/fastq-loader/fastq-lex.c
new file mode 100644
index 0000000..54cc5d6
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.c
@@ -0,0 +1,2888 @@
+
+
+#define YY_BUF_SIZE 16777216
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* %if-c++-only */
+/* %endif */
+
+/* %if-c-only */
+    
+/* %endif */
+
+/* %if-c-only */
+
+/* %endif */
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+/* %if-c-only */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* %endif */
+
+/* %if-tables-serialization */
+/* %endif */
+/* end standard C headers. */
+
+/* %if-c-or-c++ */
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* %not-for-header */
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+/* %ok-for-header */
+
+/* %if-reentrant */
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* %endif */
+
+/* %if-not-reentrant */
+/* %endif */
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE FASTQ_restart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+/* %if-not-reentrant */
+/* %endif */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+/* %endif */
+/* %endif */
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE FASTQ_lex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < yyleng; ++yyl )\
+                    if ( yytext[yyl] == '\n' )\
+                        --yylineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = yyg->yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+/* %if-c-only */
+	FILE *yy_input_file;
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via FASTQ_restart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+/* %if-not-reentrant */
+/* %endif */
+/* %ok-for-header */
+
+/* %endif */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+/* %if-c-only Standard (non-C++) definition */
+
+/* %if-not-reentrant */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+void FASTQ_restart (FILE *input_file ,yyscan_t yyscanner );
+void FASTQ__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void FASTQ__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void FASTQ_pop_buffer_state (yyscan_t yyscanner );
+
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner );
+static void FASTQ__load_buffer_state (yyscan_t yyscanner );
+static void FASTQ__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER FASTQ__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE FASTQ__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+/* %endif */
+
+void *FASTQ_alloc (yy_size_t ,yyscan_t yyscanner );
+void *FASTQ_realloc (void *,yy_size_t ,yyscan_t yyscanner );
+void FASTQ_free (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer FASTQ__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        FASTQ_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        FASTQ_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* Begin user sect3 */
+
+#define FASTQ_wrap(n) 1
+#define YY_SKIP_YYWRAP
+
+#define FLEX_DEBUG
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+/* %if-c-only Standard (non-C++) definition */
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* %endif */
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yyg->yytext_ptr = yy_bp; \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyg->yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+	yyg->yy_c_buf_p = yy_cp;
+
+/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
+#define YY_NUM_RULES 34
+#define YY_END_OF_BUFFER 35
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_acclist[211] =
+    {   0,
+       32,   32,   35,   12,   34,    9,   12,   34,   33,   34,
+       12,   33,   34,    6,   12,   34,    8,   12,   34,    7,
+        8,   12,   34,   12,   34,    8,   12,   34,    3,   12,
+       34,   12,   34,16394,    2,   12,   34,    1,   12,   34,
+        8,   12,   34,16394,    8,   12,   34,16394,    9,   12,
+       34,   13,   34,   12,   13,   34,   34,   34,   17,   34,
+       34,16400,   34,16398,16400,   34,16398,16400,   34,   23,
+       34,   23,   34,   27,   34,   24,   27,   34,   26,   34,
+       26,   27,   34,   27,   34,16409,   24,   27,   34,16409,
+       21,   34,   21,   34,   18,   34,   20,   34,   18,   34,
+
+       30,   34,   24,   30,   34,   29,   34,   29,   30,   34,
+       30,   34,16412,   24,   30,   34,16412,   32,   34,   31,
+       34,   31,   32,   34,    9,   33,    6,    8,    7,    8,
+        8, 8202, 8202,16394,16394,16395,    8,16395,    8,16394,
+        9,   13,   13,   17, 8208,   17, 8208,16400, 8206, 8208,
+       17, 8206, 8208,16398,16400,16398,16399,16400,16399,16400,
+       22,   22,   23,   24,   26, 8217, 8217,16409,   24,16409,
+       21,   18,   20,   18,   19,   19,   29, 8220, 8220,16412,
+       24,16412,   32,   31,   31,   32,   31,    8, 8202, 8203,
+     8202, 8203,16395, 8203, 8203, 8206, 8207, 8208,   17, 8206,
+
+     8207, 8208, 8207, 8208,   17, 8207, 8208,    8,    5,    4
+    } ;
+
+static yyconst flex_int16_t yy_accept[143] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    2,    3,    4,    6,    9,   11,   14,
+       17,   20,   24,   26,   29,   32,   35,   38,   41,   45,
+       49,   52,   54,   57,   58,   59,   61,   63,   66,   69,
+       70,   72,   74,   76,   79,   81,   84,   87,   91,   93,
+       95,   97,   99,  101,  103,  106,  108,  111,  114,  118,
+      120,  122,  125,  126,  127,  128,  129,  131,  131,  132,
+      133,  134,  135,  137,  139,  141,  142,  143,  144,  144,
+      145,  147,  148,  149,  152,  154,  156,  159,  161,  161,
+
+      162,  164,  165,  166,  167,  168,  169,  171,  172,  173,
+      174,  176,  177,  178,  179,  180,  181,  183,  184,  185,
+      187,  188,  188,  189,  191,  193,  194,  195,  196,  200,
+      203,  206,  208,  208,  209,  209,  209,  209,  210,  210,
+      211,  211
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    6,    5,    5,    7,    5,    5,    5,    5,    5,
+        5,    5,    8,    5,    9,   10,    5,   11,   11,   11,
+       11,   12,   12,   12,   12,   12,   12,   13,    5,    5,
+        5,   14,    5,   15,   16,    9,   16,   17,   17,    9,
+       16,    9,    9,    9,    9,    9,    9,   18,    9,    9,
+        9,   19,   17,   16,    9,    9,    9,    9,    9,    9,
+        5,    5,    5,    5,   20,    5,   16,    9,   16,    9,
+
+        9,    9,   16,    9,    9,    9,    9,    9,    9,   18,
+        9,    9,    9,    9,    9,   16,    9,    9,    9,    9,
+        9,    9,    5,    5,    5,    5,    5,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[21] =
+    {   0,
+        1,    1,    2,    2,    3,    3,    3,    3,    4,    5,
+        6,    6,    7,    3,    3,    8,    4,    8,    4,    9
+    } ;
+
+static yyconst flex_int16_t yy_base[162] =
+    {   0,
+        0,   13,   30,   25,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   43,   21,   34,   60,   66,   70,    0,
+       88,   94,   36,   45,  292,  356,   20,  356,  288,    0,
+        0,   39,   43,  270,  356,   53,  356,  356,   98,   65,
+      116,  356,  285,  356,  282,  356,  122,  126,   67,  280,
+      356,  276,  356,   77,  356,  274,   81,  143,  356,  205,
+        0,   92,   95,  356,  129,  356,  196,  108,  148,  129,
+      356,  134,  137,  356,    0,    0,    0,  177,  158,  356,
+      166,  137,  152,  168,    0,    0,  356,  145,  131,  356,
+      356,  118,  179,  356,  110,    0,  181,  190,   96,  356,
+
+      356,  151,  356,  356,   90,  155,    0,  356,    0,  149,
+        0,  154,  356,  356,   84,  163,    0,  170,  356,  172,
+      356,  175,  177,  356,   68,  199,  356,   62,  356,   57,
+      356,   55,   39,   32,  184,  186,   17,  193,  195,  200,
+      356,  212,  221,  230,  239,  248,  257,  266,  272,  278,
+      285,  293,  302,  311,  319,  324,  331,  340,  344,  346,
+      348
+    } ;
+
+static yyconst flex_int16_t yy_def[162] =
+    {   0,
+      141,    1,    1,    3,  142,  142,  142,  142,  142,  142,
+      142,  142,  142,  143,  144,  144,  145,  146,  142,   19,
+      147,  147,  148,  148,  141,  141,  141,  141,  141,  149,
+      150,  150,  141,  150,  141,  151,  141,  141,  141,   39,
+      141,  141,  141,  141,  152,  141,  153,  153,   48,  154,
+      141,  154,  141,  141,  141,  141,  155,  155,  141,  141,
+      156,  141,  156,  141,  141,  141,  141,  157,  157,  158,
+      141,  158,  141,  141,  149,  150,   32,  159,  150,  141,
+      141,  151,  141,  150,   40,   41,  141,  141,  152,  141,
+      141,  152,  153,  141,  152,   48,   48,   93,  154,  141,
+
+      141,  141,  141,  141,  141,  155,   58,  141,  156,  141,
+       63,  141,  141,  141,  141,  157,   69,  158,  141,  158,
+      141,  141,  150,  141,  141,  141,  141,  141,  141,  152,
+      141,  152,  160,  123,  141,  141,  161,  141,  141,  141,
+        0,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141
+    } ;
+
+static yyconst flex_int16_t yy_nxt[377] =
+    {   0,
+       26,   27,   28,   29,   26,   27,   30,   26,   31,   26,
+       32,   32,   33,   26,   26,   31,   34,   31,   31,   26,
+       35,   73,   36,   51,   52,   73,   37,   38,   39,  139,
+       40,   41,   42,   43,   36,   41,   51,   52,   71,   72,
+       39,  136,   40,   45,   45,   46,   45,   71,   72,   77,
+       77,  135,   48,   78,   78,   80,   81,  131,   49,  129,
+       48,   54,   55,   56,  127,   54,   53,   54,   55,   56,
+      124,   58,   59,   60,   82,   76,   97,   98,  102,   61,
+       62,   62,  102,  104,  105,   63,  114,   61,   64,   65,
+       66,   67,  104,   69,   64,   65,   66,   67,  100,   69,
+
+       80,   81,  110,  110,  111,  112,   76,   83,   84,   76,
+      114,  115,   94,   85,   76,   85,   76,   86,   87,   88,
+       91,   86,   89,   89,   91,   92,   89,   89,   94,   95,
+      102,  119,  120,   90,  102,   96,  121,  120,   73,   80,
+       81,   96,   73,   96,  102,  104,  105,   87,  107,  102,
+      114,  115,  102,  117,  124,  125,  102,  104,  105,  110,
+      110,   83,  126,  112,  112,  114,  115,   82,   80,   82,
+      127,  128,  119,  120,  121,  120,  123,  126,   84,   89,
+       89,   91,   92,  129,  130,  133,  133,  134,  134,  122,
+       97,   98,  131,  132,  137,  137,  138,  138,  113,   98,
+
+       98,  127,  128,  138,  138,  140,  140,  108,  126,  126,
+      140,  140,   44,   44,   44,   44,   44,   44,   44,   44,
+       44,   47,   47,   47,   47,   47,   47,   47,   47,   47,
+       50,   50,   50,   50,   50,   50,   50,   50,   50,   53,
+       53,   53,   53,   53,   53,   53,   53,   53,   57,   57,
+       57,   57,   57,   57,   57,   57,   57,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   70,   70,   70,   70,
+       70,   70,   70,   70,   70,   75,  103,   75,  101,   75,
+       75,   76,  100,   76,   90,   76,   82,   87,   79,   82,
+       74,  141,   82,   89,   89,   89,   89,   89,   89,   89,
+
+       89,   89,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+      106,  106,  106,  106,  106,  106,  106,  106,  109,  141,
+      141,  109,  116,  116,  116,  116,  116,  116,  116,  116,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,   78,
+       78,  133,  133,  137,  137,   25,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141
+    } ;
+
+static yyconst flex_int16_t yy_chk[377] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        2,   27,    2,   15,   15,   27,    2,    2,    2,  137,
+        2,    3,    3,    3,    4,    3,   16,   16,   23,   23,
+        4,  134,    4,   14,   14,   14,   14,   24,   24,   32,
+       32,  133,   14,   33,   33,   36,   36,  132,   14,  130,
+       14,   17,   17,   17,  128,   17,   18,   18,   18,   18,
+      125,   18,   19,   19,   40,   40,   49,   49,   54,   19,
+       19,   19,   54,   57,   57,   19,  115,   19,   21,   21,
+       21,   21,  105,   21,   22,   22,   22,   22,   99,   22,
+
+       39,   39,   62,   62,   63,   63,   39,   39,   39,   39,
+       68,   68,   95,   39,   39,   39,   39,   41,   41,   41,
+       92,   41,   47,   47,   47,   47,   48,   48,   48,   48,
+       65,   70,   70,   89,   65,   48,   72,   72,   73,   82,
+       82,   48,   73,   48,   58,   58,   58,   88,   58,   69,
+       69,   69,  102,   69,   83,   83,  102,  106,  106,  110,
+      110,   83,   83,  112,  112,  116,  116,   83,   81,   83,
+       84,   84,  118,  118,  120,  120,   79,   84,   84,   93,
+       93,   93,   93,   97,   97,  122,  122,  123,  123,   78,
+       97,   97,   98,   98,  135,  135,  136,  136,   67,   98,
+
+       98,  126,  126,  138,  138,  139,  139,   60,  126,  126,
+      140,  140,  142,  142,  142,  142,  142,  142,  142,  142,
+      142,  143,  143,  143,  143,  143,  143,  143,  143,  143,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  145,
+      145,  145,  145,  145,  145,  145,  145,  145,  146,  146,
+      146,  146,  146,  146,  146,  146,  146,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  148,  148,  148,  148,
+      148,  148,  148,  148,  148,  149,   56,  149,   52,  149,
+      149,  150,   50,  150,   45,  150,  151,   43,   34,  151,
+       29,   25,  151,  152,  152,  152,  152,  152,  152,  152,
+
+      152,  152,  153,  153,  153,  153,  153,  153,  153,  153,
+      153,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      155,  155,  155,  155,  155,  155,  155,  155,  156,    0,
+        0,  156,  157,  157,  157,  157,  157,  157,  157,  157,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  159,
+      159,  160,  160,  161,  161,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+      141,  141,  141,  141,  141,  141
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[35] =
+    {   0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 
+    0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0,     };
+
+static yyconst flex_int16_t yy_rule_linenum[34] =
+    {   0,
+       90,   91,   93,   97,   98,   99,  100,  101,  102,  103,
+      104,  105,  108,  112,  113,  114,  115,  120,  121,  122,
+      123,  128,  129,  134,  139,  140,  147,  152,  153,  154,
+      159,  160,  163
+    } ;
+
+#define YY_TRAILING_MASK 0x2000
+#define YY_TRAILING_HEAD_MASK 0x4000
+#define REJECT \
+{ \
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \
+yyg->yy_lp = yyg->yy_full_lp; /* restore orig. accepting pos. */ \
+yyg->yy_state_ptr = yyg->yy_full_state; /* restore orig. state */ \
+yy_current_state = *yyg->yy_state_ptr; /* restore curr. state */ \
+++yyg->yy_lp; \
+goto find_rule; \
+}
+
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+    #include <sysalloc.h>   
+    #include <ctype.h>
+    
+    #include <klib/rc.h>
+    #include <klib/log.h>
+
+    #include "fastq-parse.h"
+    #include "fastq-tokens.h"    
+    
+    #define YYSTYPE FASTQToken
+
+    /* code to populate token with internal values */
+	static void ConsumeToken(FASTQToken* token, FASTQParseBlock* pb);
+    #define YY_USER_ACTION ConsumeToken(yylval, yyextra);
+	
+    #define ENDLINE \
+        yyextra -> column=1;\
+        return fqENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    static void FASTQ_fatal_error(yyconst char* msg);
+    #define YY_FATAL_ERROR(msg) FASTQ_fatal_error(msg)
+    
+#define YY_NO_UNISTD_H 1
+/*%option debug*/
+
+
+
+
+
+
+
+
+
+
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+
+#define INITIAL 0
+#define TAG_LINE 1
+#define SEE_COORDS 2
+#define PAST_COORDS 3
+#define READ_NUMBER 4
+#define NAMEVALUE 5
+#define IN_SEQUENCE 6
+#define QTAG_LINE 7
+#define IN_QUALITY 8
+#define INLINE_SEQUENCE 9
+#define INLINE_QUALITY 10
+#define SKIP_TO_EOL 11
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+/* %if-c-only */
+#include <unistd.h>
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+#define YY_EXTRA_TYPE FASTQParseBlock*
+
+/* %if-c-only Reentrant structure and macros (non-C++). */
+/* %if-reentrant */
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+    {
+
+    /* User-defined. Not touched by flex. */
+    YY_EXTRA_TYPE yyextra_r;
+
+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
+    FILE *yyin_r, *yyout_r;
+    size_t yy_buffer_stack_top; /**< index of top of stack. */
+    size_t yy_buffer_stack_max; /**< capacity of stack. */
+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+    char yy_hold_char;
+    int yy_n_chars;
+    int yyleng_r;
+    char *yy_c_buf_p;
+    int yy_init;
+    int yy_start;
+    int yy_did_buffer_switch_on_eof;
+    int yy_start_stack_ptr;
+    int yy_start_stack_depth;
+    int *yy_start_stack;
+    yy_state_type yy_last_accepting_state;
+    char* yy_last_accepting_cpos;
+
+    int yylineno_r;
+    int yy_flex_debug_r;
+
+    yy_state_type *yy_state_buf;
+    yy_state_type *yy_state_ptr;
+    char *yy_full_match;
+    int yy_lp;
+
+    /* These are only needed for trailing context rules,
+     * but there's no conditional variable for that yet. */
+    int yy_looking_for_trail_begin;
+    int yy_full_lp;
+    int *yy_full_state;
+
+    char *yytext_r;
+    int yy_more_flag;
+    int yy_more_len;
+
+    YYSTYPE * yylval_r;
+
+    }; /* end struct yyguts_t */
+
+/* %if-c-only */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+/* %endif */
+
+/* %if-reentrant */
+
+    /* This must go here because YYSTYPE and YYLTYPE are included
+     * from bison output in section 1.*/
+    #    define yylval yyg->yylval_r
+    
+int FASTQ_lex_init (yyscan_t* scanner);
+
+int FASTQ_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* %endif */
+
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int FASTQ_lex_destroy (yyscan_t yyscanner );
+
+int FASTQ_get_debug (yyscan_t yyscanner );
+
+void FASTQ_set_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE FASTQ_get_extra (yyscan_t yyscanner );
+
+void FASTQ_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_in (yyscan_t yyscanner );
+
+void FASTQ_set_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_out (yyscan_t yyscanner );
+
+void FASTQ_set_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int FASTQ_get_leng (yyscan_t yyscanner );
+
+char *FASTQ_get_text (yyscan_t yyscanner );
+
+int FASTQ_get_lineno (yyscan_t yyscanner );
+
+void FASTQ_set_lineno (int line_number ,yyscan_t yyscanner );
+
+/* %if-bison-bridge */
+
+YYSTYPE * FASTQ_get_lval (yyscan_t yyscanner );
+
+void FASTQ_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* %endif */
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int FASTQ_wrap (yyscan_t yyscanner );
+#else
+extern int FASTQ_wrap (yyscan_t yyscanner );
+#endif
+#endif
+
+/* %not-for-header */
+
+    static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
+    
+/* %ok-for-header */
+
+/* %endif */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+/* %ok-for-header */
+
+/* %endif */
+#endif
+
+/* %if-c-only */
+
+    static void yy_push_state (int new_state ,yyscan_t yyscanner);
+    
+    static void yy_pop_state (yyscan_t yyscanner );
+    
+    static int yy_top_state (yyscan_t yyscanner );
+    
+/* %endif */
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* %if-c-only Standard (non-C++) definition */
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		int n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+/* %if-c++-only C++ definition \ */\
+/* %endif */
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+/* %if-c-only */
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+/* %if-tables-serialization structures and prototypes */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* %tables-yydmap generated elements */
+/* %endif */
+/* end tables serialization structures and prototypes */
+
+/* %ok-for-header */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+/* %if-c-only Standard (non-C++) definition */
+
+extern int FASTQ_lex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int FASTQ_lex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+/* %% [6.0] YY_RULE_SETUP definition goes here */
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+/* %not-for-header */
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+/* %% [7.0] user's declarations go here */
+
+
+
+    yylval = yylval_param;
+
+	if ( !yyg->yy_init )
+		{
+		yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! yyg->yy_state_buf )
+            yyg->yy_state_buf = (yy_state_type *)FASTQ_alloc(YY_STATE_BUF_SIZE  ,yyscanner);
+            if ( ! yyg->yy_state_buf )
+                YY_FATAL_ERROR( "out of dynamic memory in FASTQ_lex()" );
+
+		if ( ! yyg->yy_start )
+			yyg->yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+/* %if-c-only */
+			yyin = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! yyout )
+/* %if-c-only */
+			yyout = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			FASTQ_ensure_buffer_stack (yyscanner);
+			YY_CURRENT_BUFFER_LVALUE =
+				FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+		}
+
+		FASTQ__load_buffer_state(yyscanner );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+/* %% [8.0] yymore()-related code goes here */
+		yy_cp = yyg->yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yyg->yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+/* %% [9.0] code to set up and find next match goes here */
+		yy_current_state = yyg->yy_start;
+		yy_current_state += YY_AT_BOL();
+
+		yyg->yy_state_ptr = yyg->yy_state_buf;
+		*yyg->yy_state_ptr++ = yy_current_state;
+
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 142 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*yyg->yy_state_ptr++ = yy_current_state;
+			++yy_cp;
+			}
+		while ( yy_current_state != 141 );
+
+yy_find_action:
+/* %% [10.0] code to find the action number goes here */
+		yy_current_state = *--yyg->yy_state_ptr;
+		yyg->yy_lp = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] )
+				{
+				yy_act = yy_acclist[yyg->yy_lp];
+				if ( yy_act & YY_TRAILING_HEAD_MASK ||
+				     yyg->yy_looking_for_trail_begin )
+					{
+					if ( yy_act == yyg->yy_looking_for_trail_begin )
+						{
+						yyg->yy_looking_for_trail_begin = 0;
+						yy_act &= ~YY_TRAILING_HEAD_MASK;
+						break;
+						}
+					}
+				else if ( yy_act & YY_TRAILING_MASK )
+					{
+					yyg->yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
+					yyg->yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
+					}
+				else
+					{
+					yyg->yy_full_match = yy_cp;
+					yyg->yy_full_state = yyg->yy_state_ptr;
+					yyg->yy_full_lp = yyg->yy_lp;
+					break;
+					}
+				++yyg->yy_lp;
+				goto find_rule;
+				}
+			--yy_cp;
+			yy_current_state = *--yyg->yy_state_ptr;
+			yyg->yy_lp = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+/* %% [11.0] code for yylineno update goes here */
+
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+/* %% [12.0] debug code goes here */
+		if ( yy_flex_debug )
+			{
+			if ( yy_act == 0 )
+				fprintf( stderr, "--scanner backing up\n" );
+			else if ( yy_act < 34 )
+				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 34 )
+				fprintf( stderr, "--accepting default rule (\"%s\")\n",
+				         yytext );
+			else if ( yy_act == 35 )
+				fprintf( stderr, "--(end of buffer or a NUL)\n" );
+			else
+				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
+			}
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+/* %% [13.0] actions go here */
+case 1:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ BEGIN QTAG_LINE; return yytext[0]; }
+	YY_BREAK
+
+
+case 4:
+YY_RULE_SETUP
+{ return fqCOORDS; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ return fqRUNDOTSPOT; } 
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ return fqSPOTGROUP; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+{ return fqNUMBER; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+{ return fqALPHANUM; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+{ return fqWS; }
+	YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+{ return fqBASESEQ; }
+	YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+{ return fqCOLORSEQ; }
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_SEQUENCE; ENDLINE; } 
+	YY_BREAK
+
+
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+	YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+	YY_BREAK
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqASCQUAL; }
+	YY_BREAK
+case 17:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN 0; return fqUNRECOGNIZED; }
+	YY_BREAK
+
+
+
+case 18:
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+{ BEGIN 0; return fqNUMBER; }
+	YY_BREAK
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+
+
+
+case 22:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ return fqTOKEN; /* do not bother to parse the inside of the line */ }
+	YY_BREAK
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_QUALITY; ENDLINE }
+	YY_BREAK
+
+
+
+case 24:
+YY_RULE_SETUP
+{ } 
+	YY_BREAK
+
+
+
+case 25:
+/* rule 25 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+	YY_BREAK
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{   /* if read was split across several lines, expect the same number of lines in quality */
+                                    if (yyextra->expectedQualityLines <= 1) 
+                                        BEGIN 0; 
+                                    else 
+                                        --yyextra->expectedQualityLines;
+                                    ENDLINE; 
+                                }
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+
+
+case 28:
+/* rule 28 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+	YY_BREAK
+case 29:
+/* rule 29 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+
+
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+{ BEGIN 0; return fqENDOFTEXT; }
+	YY_BREAK
+
+case 33:
+/* rule 33 can match eol */
+YY_RULE_SETUP
+{ ENDLINE; }
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+			case YY_STATE_EOF(INITIAL):
+			case YY_STATE_EOF(TAG_LINE):
+			case YY_STATE_EOF(SEE_COORDS):
+			case YY_STATE_EOF(PAST_COORDS):
+			case YY_STATE_EOF(READ_NUMBER):
+			case YY_STATE_EOF(NAMEVALUE):
+			case YY_STATE_EOF(IN_SEQUENCE):
+			case YY_STATE_EOF(QTAG_LINE):
+			case YY_STATE_EOF(IN_QUALITY):
+			case YY_STATE_EOF(INLINE_SEQUENCE):
+			case YY_STATE_EOF(INLINE_QUALITY):
+			case YY_STATE_EOF(SKIP_TO_EOL):
+				yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yyg->yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * FASTQ_lex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state( yyscanner );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yyg->yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
+				yy_cp = yyg->yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer( yyscanner ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yyg->yy_did_buffer_switch_on_eof = 0;
+
+				if ( FASTQ_wrap(yyscanner ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yyg->yy_c_buf_p =
+					yyg->yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yyg->yy_c_buf_p =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of FASTQ_lex */
+/* %ok-for-header */
+
+/* %if-c++-only */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+/* %if-c-only */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = yyg->yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			yyg->yy_n_chars, (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	if ( yyg->yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			FASTQ_restart(yyin  ,yyscanner);
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) FASTQ_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	yyg->yy_n_chars += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+/* %if-c-only */
+/* %not-for-header */
+
+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+/* %% [15.0] code to get the start state into yy_current_state goes here */
+	yy_current_state = yyg->yy_start;
+	yy_current_state += YY_AT_BOL();
+
+	yyg->yy_state_ptr = yyg->yy_state_buf;
+	*yyg->yy_state_ptr++ = yy_current_state;
+
+	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+		{
+/* %% [16.0] code to find the next state goes here */
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 142 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*yyg->yy_state_ptr++ = yy_current_state;
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+/* %if-c-only */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register int yy_is_jam;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+/* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
+
+	register YY_CHAR yy_c = 1;
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 142 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 141);
+	if ( ! yy_is_jam )
+		*yyg->yy_state_ptr++ = yy_current_state;
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+/* %if-c-only */
+
+    static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yy_cp = yyg->yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yyg->yy_hold_char;
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yyg->yy_n_chars + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+/* %% [18.0] update yylineno here */
+
+    if ( c == '\n' ){
+        --yylineno;
+    }
+
+	yyg->yytext_ptr = yy_bp;
+	yyg->yy_hold_char = *yy_cp;
+	yyg->yy_c_buf_p = yy_cp;
+}
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c-only */
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (yyscan_t yyscanner)
+#else
+    static int input  (yyscan_t yyscanner)
+#endif
+
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	int c;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	*yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			/* This was really a NUL. */
+			*yyg->yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			++yyg->yy_c_buf_p;
+
+			switch ( yy_get_next_buffer( yyscanner ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					FASTQ_restart(yyin ,yyscanner);
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( FASTQ_wrap(yyscanner ) )
+						return EOF;
+
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput(yyscanner);
+#else
+					return input(yyscanner);
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
+	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
+	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+/* %% [19.0] update BOL and yylineno */
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+		   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+
+	return c;
+}
+/* %if-c-only */
+#endif	/* ifndef YY_NO_INPUT */
+/* %endif */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+/* %if-c-only */
+    void FASTQ_restart  (FILE * input_file , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! YY_CURRENT_BUFFER ){
+        FASTQ_ensure_buffer_stack (yyscanner);
+		YY_CURRENT_BUFFER_LVALUE =
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+	}
+
+	FASTQ__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+	FASTQ__load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void FASTQ__switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		FASTQ_pop_buffer_state();
+	 *		FASTQ_push_buffer_state(new_buffer);
+     */
+	FASTQ_ensure_buffer_stack (yyscanner);
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	FASTQ__load_buffer_state(yyscanner );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (FASTQ_wrap()) processing, but the only time this flag
+	 * is looked at is after FASTQ_wrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/* %if-c-only */
+static void FASTQ__load_buffer_state  (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+/* %if-c-only */
+    YY_BUFFER_STATE FASTQ__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) FASTQ_alloc(b->yy_buf_size + 2 ,yyscanner );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	FASTQ__init_buffer(b,file ,yyscanner);
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with FASTQ__create_buffer()
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void FASTQ__delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		FASTQ_free((void *) b->yy_ch_buf ,yyscanner );
+
+	FASTQ_free((void *) b ,yyscanner );
+}
+
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a FASTQ_restart() or at EOF.
+ */
+/* %if-c-only */
+    static void FASTQ__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+{
+	int oerrno = errno;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	FASTQ__flush_buffer(b ,yyscanner);
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then FASTQ__init_buffer was _probably_
+     * called from FASTQ_restart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+/* %if-c-only */
+
+        b->yy_is_interactive = 0;
+    
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void FASTQ__flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		FASTQ__load_buffer_state(yyscanner );
+}
+
+/* %if-c-or-c++ */
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (new_buffer == NULL)
+		return;
+
+	FASTQ_ensure_buffer_stack(yyscanner);
+
+	/* This block is copied from FASTQ__switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		yyg->yy_buffer_stack_top++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from FASTQ__switch_to_buffer. */
+	FASTQ__load_buffer_state(yyscanner );
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+void FASTQ_pop_buffer_state (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (!YY_CURRENT_BUFFER)
+		return;
+
+	FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if (yyg->yy_buffer_stack_top > 0)
+		--yyg->yy_buffer_stack_top;
+
+	if (YY_CURRENT_BUFFER) {
+		FASTQ__load_buffer_state(yyscanner );
+		yyg->yy_did_buffer_switch_on_eof = 1;
+	}
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+/* %if-c-only */
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	int num_to_alloc;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if (!yyg->yy_buffer_stack) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_alloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+								  
+		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		yyg->yy_buffer_stack_max = num_to_alloc;
+		yyg->yy_buffer_stack_top = 0;
+		return;
+	}
+
+	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_realloc
+								(yyg->yy_buffer_stack,
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+		yyg->yy_buffer_stack_max = num_to_alloc;
+	}
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE FASTQ__scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	FASTQ__switch_to_buffer(b ,yyscanner );
+
+	return b;
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan a string. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       FASTQ__scan_bytes() instead.
+ */
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+    
+	return FASTQ__scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan the given bytes. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE FASTQ__scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) FASTQ_alloc(n ,yyscanner );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = FASTQ__scan_buffer(buf,n ,yyscanner);
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in FASTQ__scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+/* %endif */
+
+/* %if-c-only */
+    static void yy_push_state (int  new_state , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yyg->yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yyg->yy_start_stack_depth * sizeof( int );
+
+		if ( ! yyg->yy_start_stack )
+			yyg->yy_start_stack = (int *) FASTQ_alloc(new_size ,yyscanner );
+
+		else
+			yyg->yy_start_stack = (int *) FASTQ_realloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
+
+		if ( ! yyg->yy_start_stack )
+			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+		}
+
+	yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+}
+
+/* %if-c-only */
+    static void yy_pop_state  (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( --yyg->yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
+}
+
+/* %if-c-only */
+    static int yy_top_state  (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+/* %if-c-only */
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = yyg->yy_hold_char; \
+		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+		*yyg->yy_c_buf_p = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/* %if-c-only */
+/* %if-reentrant */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE FASTQ_get_extra  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyextra;
+}
+
+/* %endif */
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_lineno  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_column  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_in  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_out  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_leng  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *FASTQ_get_text  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yytext;
+}
+
+/* %if-reentrant */
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyextra = user_defined ;
+}
+
+/* %endif */
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_lineno (int  line_number , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* lineno is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "FASTQ_set_lineno called with no buffer" , yyscanner); 
+    
+    yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_column (int  column_no , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* column is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "FASTQ_set_column called with no buffer" , yyscanner); 
+    
+    yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see FASTQ__switch_to_buffer
+ */
+void FASTQ_set_in (FILE *  in_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyin = in_str ;
+}
+
+void FASTQ_set_out (FILE *  out_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyout = out_str ;
+}
+
+int FASTQ_get_debug  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yy_flex_debug;
+}
+
+void FASTQ_set_debug (int  bdebug , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yy_flex_debug = bdebug ;
+}
+
+/* %endif */
+
+/* %if-reentrant */
+/* Accessor methods for yylval and yylloc */
+
+/* %if-bison-bridge */
+
+YYSTYPE * FASTQ_get_lval  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yylval;
+}
+
+void FASTQ_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yylval = yylval_param;
+}
+
+/* %endif */
+
+/* User-visible API */
+
+/* FASTQ_lex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int FASTQ_lex_init(yyscan_t* ptr_yy_globals)
+
+{
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+
+    *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), NULL );
+
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+
+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* FASTQ_lex_init_extra has the same functionality as FASTQ_lex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to FASTQ_alloc in
+ * the yyextra field.
+ */
+
+int FASTQ_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    FASTQ_set_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+	
+    *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+	
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    FASTQ_set_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from FASTQ_lex_destroy(), so don't allocate here.
+     */
+
+    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack_top = 0;
+    yyg->yy_buffer_stack_max = 0;
+    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_init = 0;
+    yyg->yy_start = 0;
+
+    yyg->yy_start_stack_ptr = 0;
+    yyg->yy_start_stack_depth = 0;
+    yyg->yy_start_stack =  NULL;
+
+    yyg->yy_state_buf = 0;
+    yyg->yy_state_ptr = 0;
+    yyg->yy_full_match = 0;
+    yyg->yy_lp = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * FASTQ_lex_init()
+     */
+    return 0;
+}
+/* %endif */
+
+/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
+/* FASTQ_lex_destroy is for both reentrant and non-reentrant scanners. */
+int FASTQ_lex_destroy  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		FASTQ_pop_buffer_state(yyscanner);
+	}
+
+	/* Destroy the stack itself. */
+	FASTQ_free(yyg->yy_buffer_stack ,yyscanner);
+	yyg->yy_buffer_stack = NULL;
+
+    /* Destroy the start condition stack. */
+        FASTQ_free(yyg->yy_start_stack ,yyscanner );
+        yyg->yy_start_stack = NULL;
+
+    FASTQ_free ( yyg->yy_state_buf , yyscanner);
+    yyg->yy_state_buf  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * FASTQ_lex() is called, initialization will occur. */
+    yy_init_globals( yyscanner);
+
+/* %if-reentrant */
+    /* Destroy the main struct (reentrant only). */
+    FASTQ_free ( yyscanner , yyscanner );
+    yyscanner = NULL;
+/* %endif */
+    return 0;
+}
+/* %endif */
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *FASTQ_alloc (yy_size_t  size , yyscan_t yyscanner)
+{
+	return (void *) malloc( size );
+}
+
+void *FASTQ_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void FASTQ_free (void * ptr , yyscan_t yyscanner)
+{
+	free( (char *) ptr );	/* see FASTQ_realloc() for (char *) cast */
+}
+
+/* %if-tables-serialization definitions */
+/* %define-yytables   The name for this specific scanner's tables. */
+#define YYTABLES_NAME "yytables"
+/* %endif */
+
+/* %ok-for-header */
+
+
+
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+    if (FASTQ_lex_init_extra(sb,&sb->scanner) != 0)
+    {
+        return RC ( rcApp, rcFile, rcParsing, rcMemory, rcExhausted );
+    }       
+
+    sb->length = 0;
+    sb->lastToken = NULL;
+    sb->record = NULL;
+    sb->column = 1;
+     
+    sb->expectedQualityLines = 0;
+    
+    FASTQ_set_debug(debug ? 1 : 0,sb->scanner);
+
+    yy_push_state(INITIAL, sb->scanner);
+    
+    return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+    if (sb->scanner)
+    {
+        FASTQ_lex_destroy(sb->scanner);
+    }       
+    sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb) 
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+void CC FASTQScan_skip_to_eol(FASTQParseBlock* pb)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    if ( yytext[0] != '\n' && yytext[0] != '\r' ) /* not at an EOL already */
+    {
+        yy_push_state(SKIP_TO_EOL, pb->scanner);
+    }
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+    size_t i;
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    for (i = 0; i < token->tokenLength; ++i)
+    {
+        yyunput(TokenTextPtr(pb, token)[token->tokenLength - 1 - i], yyg->yytext_r, pb->scanner);
+    }
+    yyextra -> column -= token->tokenLength; 
+    yyextra -> length -= token->tokenLength; 
+	KDataBufferResize( & pb->record->source, KDataBufferBytes( & pb->record->source ) - token->tokenLength );
+}
+
+void FASTQ_fatal_error(yyconst char* msg)
+{
+    rc_t rc = RC ( rcApp, rcFile, rcParsing, rcError, rcUnexpected );
+    if (strcmp(msg, "input buffer overflow, can't enlarge buffer because scanner uses REJECT") == 0)
+        pLogErr(klogErr, rc, "line is too long (maximum line length = $(B) bytes)", "B=%d", YY_BUF_SIZE);
+    else
+        LogErr(klogErr, rc, msg);
+    exit(rc);  
+}
+
+void ConsumeToken(FASTQToken* token, FASTQParseBlock* pb)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+	
+	token -> tokenStart = KDataBufferBytes( & pb->record->source );
+	token -> tokenLength   = yyleng;   
+	token -> line_no       = yylineno; 
+	token -> column_no     = pb -> column; 
+	
+	KDataBufferResize( & pb->record->source, KDataBufferBytes( & pb->record->source ) + token->tokenLength );
+	strncpy((char*)TokenTextPtr(pb, token), yytext, token->tokenLength);
+    
+	pb -> column += token->tokenLength; 
+	pb -> length += token->tokenLength; 
+	pb -> lastToken = token; 
+}
diff --git a/tools/fastq-loader/fastq-lex.l b/tools/fastq-loader/fastq-lex.l
new file mode 100644
index 0000000..fee3135
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.l
@@ -0,0 +1,256 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{ 
+    #include <sysalloc.h>   
+    #include <ctype.h>
+    
+    #include <klib/rc.h>
+    #include <klib/log.h>
+
+    #include "fastq-parse.h"
+    #include "fastq-tokens.h"    
+    
+    #define YYSTYPE FASTQToken
+
+    /* code to populate token with internal values */
+	static void ConsumeToken(FASTQToken* token, FASTQParseBlock* pb);
+    #define YY_USER_ACTION ConsumeToken(yylval, yyextra);
+	
+    #define ENDLINE \
+        yyextra -> column=1;\
+        return fqENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    static void FASTQ_fatal_error(yyconst char* msg);
+    #define YY_FATAL_ERROR(msg) FASTQ_fatal_error(msg)
+    
+%}
+
+%option never-interactive nounistd yylineno reentrant bison-bridge stack noyywrap
+
+%option prefix="FASTQ_"
+%option extra-type="FASTQParseBlock*"
+
+ /*%option debug*/
+
+%x TAG_LINE
+%x SEE_COORDS
+%x PAST_COORDS
+%x READ_NUMBER
+%x NAMEVALUE
+%x IN_SEQUENCE
+%x QTAG_LINE
+%x IN_QUALITY
+%x INLINE_SEQUENCE
+%x INLINE_QUALITY
+%x SKIP_TO_EOL
+
+ws          [ \t]+
+digits      [0-9]+
+alphanum    [A-Za-z0-9\-]+
+eol         (\r\n|\r|\n)
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+base [ACGTacgtNn.]   
+cskey [ACGTacgt]
+color   [0-3.]
+
+ascqual   [\x0E-\x1F \x21-\x7F]+
+
+%%
+
+^@                              { BEGIN TAG_LINE; return yytext[0]; }
+^>                              { BEGIN TAG_LINE; return yytext[0]; }
+
+^\+                             { BEGIN QTAG_LINE; return yytext[0]; }
+
+<INITIAL,TAG_LINE>
+{
+    :{digits}:{digits}:{digits}:{digits}                    { return fqCOORDS; }
+    [SDE]RR{digits}\.{digits}   { return fqRUNDOTSPOT; } 
+    #[A-Za-z0-9\-_]*            { return fqSPOTGROUP; }
+    {digits}                    { return fqNUMBER; }
+    {alphanum}                  { return fqALPHANUM; }
+    {ws}                        { return fqWS; }
+    ^{base}+/{eol}              { return fqBASESEQ; }
+    ^{cskey}{color}+/{eol}      { return fqCOLORSEQ; }
+    .                           { return yytext[0]; }
+}
+
+<TAG_LINE>[ \t]*{eol}           { BEGIN IN_SEQUENCE; ENDLINE; } 
+
+<IN_SEQUENCE>
+{
+    ^{base}+/{eol}              { BEGIN 0; return fqBASESEQ; }
+    ^{cskey}{color}+/{eol}      { BEGIN 0; return fqCOLORSEQ; }
+    ^{ascqual}/{eol}            { BEGIN 0; return fqASCQUAL; }
+    ^.*$                        { BEGIN 0; return fqUNRECOGNIZED; }
+}
+  
+<INLINE_SEQUENCE>
+{
+    {base}+                     { BEGIN 0; return fqBASESEQ; }
+    {cskey}{color}+             { BEGIN 0; return fqCOLORSEQ; }
+    {digits}                    { BEGIN 0; return fqNUMBER; }
+    {eol}                       { BEGIN 0; ENDLINE; }
+}
+
+<QTAG_LINE>
+{
+    .+$                         { return fqTOKEN; /* do not bother to parse the inside of the line */ }
+    {eol}                       { BEGIN IN_QUALITY; ENDLINE }
+}
+
+<IN_QUALITY,INLINE_QUALITY>
+{
+    {ws}                        { } 
+}
+
+<IN_QUALITY>
+{
+    ^{ascqual}/{eol}            { return fqASCQUAL; }
+    {eol}                       {   /* if read was split across several lines, expect the same number of lines in quality */
+                                    if (yyextra->expectedQualityLines <= 1) 
+                                        BEGIN 0; 
+                                    else 
+                                        --yyextra->expectedQualityLines;
+                                    ENDLINE; 
+                                }
+    .                           { return yytext[0]; }
+}
+
+<INLINE_QUALITY>
+{
+    {ascqual}/{eol}             { return fqASCQUAL; }
+    {eol}                       { BEGIN 0; ENDLINE; }
+    .                           { return yytext[0]; }
+}
+
+<SKIP_TO_EOL>
+{
+    .*{eol}                     { BEGIN 0; ENDLINE; }
+    .*                          { BEGIN 0; return fqENDOFTEXT; }
+}
+    
+{eol}                           { ENDLINE; }
+
+%%    
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+    if (yylex_init_extra(sb, &sb->scanner) != 0)
+    {
+        return RC ( rcApp, rcFile, rcParsing, rcMemory, rcExhausted );
+    }       
+
+    sb->length = 0;
+    sb->lastToken = NULL;
+    sb->record = NULL;
+    sb->column = 1;
+     
+    sb->expectedQualityLines = 0;
+    
+    yyset_debug(debug ? 1 : 0, sb->scanner);
+
+    yy_push_state(INITIAL, sb->scanner);
+    
+    return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+    if (sb->scanner)
+    {
+        yylex_destroy(sb->scanner);
+    }       
+    sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb) 
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+void CC FASTQScan_skip_to_eol(FASTQParseBlock* pb)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    if ( yytext[0] != '\n' && yytext[0] != '\r' ) /* not at an EOL already */
+    {
+        yy_push_state(SKIP_TO_EOL, pb->scanner);
+    }
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+    size_t i;
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    for (i = 0; i < token->tokenLength; ++i)
+    {
+        yyunput(TokenTextPtr(pb, token)[token->tokenLength - 1 - i], yyg->yytext_r, pb->scanner);
+    }
+    yyextra -> column -= token->tokenLength; 
+    yyextra -> length -= token->tokenLength; 
+	KDataBufferResize( & pb->record->source, KDataBufferBytes( & pb->record->source ) - token->tokenLength );
+}
+
+void FASTQ_fatal_error(yyconst char* msg)
+{
+    rc_t rc = RC ( rcApp, rcFile, rcParsing, rcError, rcUnexpected );
+    if (strcmp(msg, "input buffer overflow, can't enlarge buffer because scanner uses REJECT") == 0)
+        pLogErr(klogErr, rc, "line is too long (maximum line length = $(B) bytes)", "B=%d", YY_BUF_SIZE);
+    else
+        LogErr(klogErr, rc, msg);
+    exit(rc);  
+}
+
+void ConsumeToken(FASTQToken* token, FASTQParseBlock* pb)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+	
+	token -> tokenStart = KDataBufferBytes( & pb->record->source );
+	token -> tokenLength   = yyleng;   
+	token -> line_no       = yylineno; 
+	token -> column_no     = pb -> column; 
+	
+	KDataBufferResize( & pb->record->source, KDataBufferBytes( & pb->record->source ) + token->tokenLength );
+	strncpy((char*)TokenTextPtr(pb, token), yytext, token->tokenLength);
+    
+	pb -> column += token->tokenLength; 
+	pb -> length += token->tokenLength; 
+	pb -> lastToken = token; 
+}
\ No newline at end of file
diff --git a/tools/fastq-loader/fastq-loader.c b/tools/fastq-loader/fastq-loader.c
new file mode 100644
index 0000000..43f3e7d
--- /dev/null
+++ b/tools/fastq-loader/fastq-loader.c
@@ -0,0 +1,626 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include <sysalloc.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <ctype.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+#include <insdc/sra.h>
+#include <sra/sradb.h>
+#include "common-writer.h"
+
+#include "fastq-parse.h"
+
+extern rc_t run(char const argv0[], 
+                struct CommonWriterSettings* G,
+                unsigned countReads, 
+                const char* reads[],
+                enum FASTQQualityFormat qualityFormat,
+                const int8_t defaultReadNumbers[], 
+                bool ignoreSpotGroups);
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_platform[] = "platform";
+static char const option_quality[] = "quality";
+static char const option_read[] = "read";
+static char const option_max_err_pct[] = "max-err-pct";
+static char const option_ignore_illumina_tags[] = "ignore-illumina-tags";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_PLATFORM option_platform
+#define OPTION_QUALITY option_quality
+#define OPTION_READ option_read
+#define OPTION_MAX_ERR_PCT option_max_err_pct
+#define OPTION_IGNORE_ILLUMINA_TAGS option_ignore_illumina_tags
+
+#define ALIAS_INPUT  "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_PLATFORM "p"
+#define ALIAS_READ "r"
+/* this alias is deprecated (conflicts with -q for --quiet): */
+#define ALIAS_QUALITY "q"
+
+static
+char const * output_usage[] = 
+{
+    "Path and Name of the output database.",
+    NULL
+};
+
+static
+char const * tmpfs_usage[] = 
+{
+    "Path to be used for scratch files.",
+    NULL
+};
+
+static
+char const * qcomp_usage[] = 
+{
+    "Quality scores quantization level, can be a number (0: none - default, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1).",
+    NULL
+};
+
+static
+char const * cache_size_usage[] = 
+{
+    "Set the cache size in MB for the temporary indices",
+    NULL
+};
+
+static
+char const * mrc_usage[] = 
+{
+    "Set the maximum number of records to process from the FASTQ file",
+    NULL
+};
+
+static
+char const * mec_usage[] = 
+{
+    "Set the maximum number of errors to ignore from the FASTQ file",
+    NULL
+};
+
+static
+char const * use_platform[] = 
+{
+    "Platform (ILLUMINA, LS454, SOLID, COMPLETE_GENOMICS, HELICOS, PACBIO, IONTORRENT, CAPILLARY)",
+    NULL
+};
+
+static
+char const * use_quality[] = 
+{
+    "Quality encoding (PHRED_33, PHRED_64, LOGODDS)",
+    NULL
+};
+
+/*static
+char const * use_read[] = 
+{
+    "Default read number (1 or 2)",
+    NULL
+};*/
+
+static
+char const * use_max_err_pct[] = 
+{
+    "acceptable percentage of spots creation errors, default is 5",
+    NULL
+};
+
+static
+char const * use_ignore_illumina_tags[] = 
+{
+    "ignore barcodes contained in Illumina-formatted names",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */                                 /* max#,  needs param, required */
+    { OPTION_OUTPUT,                ALIAS_OUTPUT,           NULL, output_usage,             1,  true,        true },
+    { OPTION_TMPFS,                 ALIAS_TMPFS,            NULL, tmpfs_usage,              1,  true,        false },
+    { OPTION_QCOMP,                 ALIAS_QCOMP,            NULL, qcomp_usage,              1,  true,        false },
+    { OPTION_CACHE_SIZE,            NULL,                   NULL, cache_size_usage,         1,  true,        false },
+    { OPTION_MAX_REC_COUNT,         NULL,                   NULL, mrc_usage,                1,  true,        false },
+    { OPTION_MAX_ERR_COUNT,         ALIAS_MAX_ERR_COUNT,    NULL, mec_usage,                1,  true,        false },
+    { OPTION_PLATFORM,              ALIAS_PLATFORM,         NULL, use_platform,             1,  true,        false },
+    { OPTION_QUALITY,               ALIAS_QUALITY,          NULL, use_quality,              1,  true,        true },
+    { OPTION_MAX_ERR_PCT,           NULL,                   NULL, use_max_err_pct,          1,  true,        false },
+    { OPTION_IGNORE_ILLUMINA_TAGS,  NULL,                   NULL, use_ignore_illumina_tags, 1,  false,       false },
+/*    { OPTION_READ,          ALIAS_READ,             NULL, use_read,         0,  true,        false },*/
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path",
+    "path-to-file",
+    "phred-score",
+    "mbytes",
+    "count",
+    "count",
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] <fastq-file> ...\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad FASTQ formatted data files\n"
+        "\n"
+        "Example:\n"
+        "\t%s -p 454 -o /tmp/SRZ123456 123456-1.fastq 123456-2.fastq\n"
+        "\n"
+        ,progname, progname);
+}
+
+char const UsageDefaultName[] = "fastq-load";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    int i;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    for(i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+CommonWriterSettings G;
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+    G.pid = getpid();
+}
+
+static bool platform_cmp(char const platform[], char const test[])
+{
+    unsigned i;
+
+    for (i = 0; ; ++i) {
+        int ch1 = test[i];
+        int ch2 = toupper(platform[i]);
+        
+        if (ch1 != ch2)
+            break;
+        if (ch1 == 0)
+            return true;
+    }
+    return false;
+}
+
+static INSDC_SRA_platform_id PlatformToId(const char* name)
+{
+    if (name != NULL)
+    {
+        switch (toupper(name[0])) {
+        case 'C':
+            if (platform_cmp(name, "CAPILLARY"))
+                return SRA_PLATFORM_CAPILLARY;
+            if (platform_cmp(name, "COMPLETE GENOMICS") || platform_cmp(name, "COMPLETE_GENOMICS"))
+                return SRA_PLATFORM_COMPLETE_GENOMICS;
+            break;
+        case 'H':
+            if (platform_cmp(name, "HELICOS"))
+                return SRA_PLATFORM_HELICOS;
+            break;
+        case 'I':
+            if (platform_cmp(name, "ILLUMINA"))
+                return SRA_PLATFORM_ILLUMINA;
+            if (platform_cmp(name, "IONTORRENT"))
+                return SRA_PLATFORM_ION_TORRENT;
+            break;
+        case 'L':
+            if (platform_cmp(name, "LS454"))
+                return SRA_PLATFORM_454;
+            break;
+        case 'N':
+            if (platform_cmp(name, "NANOPORE"))
+                return SRA_PLATFORM_OXFORD_NANOPORE;
+            break;
+        case 'O':
+            if (platform_cmp(name, "OXFORD_NANOPORE"))
+                return SRA_PLATFORM_OXFORD_NANOPORE;
+            break;
+        case 'P':
+            if (platform_cmp(name, "PACBIO"))
+                return SRA_PLATFORM_PACBIO_SMRT;
+            break;
+        case 'S':
+            if (platform_cmp(name, "SOLID"))
+                return SRA_PLATFORM_ABSOLID;
+            if (platform_cmp(name, "SANGER"))
+                return SRA_PLATFORM_CAPILLARY;
+            break;
+        default:
+            break;
+        }
+    }
+    return SRA_PLATFORM_UNDEFINED;
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+    size_t const plen = strlen(path);
+    bool const hasBase = base && base[0];
+    bool const isBareName = strchr(path, '/') == NULL;
+    
+    if (isBareName && hasBase) {
+        if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+            return 0;
+    }
+    else if ( string_copy ( rslt, sz, path, plen ) < sz )
+            return 0;
+
+    {
+        rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+        (void)LOGERR(klogErr, rc, "The path to the file is too long");
+        return rc;
+    }
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    Args * args;
+    rc_t rc;
+    char *files[256];
+    int8_t defaultReadNumbers[256];
+    char *name_buffer = NULL;
+    size_t next_name = 0;
+    size_t nbsz = 0;
+    char const *value;
+    char *dummy;
+    const XMLLogger* xml_logger = NULL;
+    enum FASTQQualityFormat qualityFormat;
+    bool ignoreSpotGroups;
+    
+    memset(&G, 0, sizeof(G));
+    
+    G.mode = mode_Archive;
+    G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+    G.schemaPath = SCHEMAFILE;
+    G.omit_aligned_reads = true;
+    G.omit_reference_reads = true;
+    G.minMapQual = 0; /* accept all */
+    G.tmpfs = "/tmp";
+#if _ARCH_BITS == 32
+    G.cache_size = ( size_t ) 1 << 30;
+#else
+    G.cache_size = ( size_t ) 10 << 30;
+#endif
+    G.maxErrCount = 1000;
+    G.maxErrPct = 5;
+    G.acceptNoMatch = true; 
+    G.minMatchCount = 0; 
+    G.QualQuantizer="0";
+    
+    set_pid();
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+                            sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+
+    while (rc == 0) {
+        uint32_t pcount;
+
+        if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) {
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_TMPFS, 0, (const void **)&G.tmpfs);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, (const void **)&G.outpath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        else {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            OUTMSG (("Output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_QCOMP, 0, (const void **)&G.QualQuantizer);
+            if (rc)
+                break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+            if (G.cache_size == 0  || G.cache_size == ULONG_MAX) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("cache-size: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+        }
+        
+        G.expectUnsorted = true;
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxAlignCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxErrCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_PCT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_PCT, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.maxErrPct = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_PLATFORM, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_PLATFORM, 0, (const void **)&value);
+            if (rc)
+                break;
+            G.platform = PlatformToId(value);
+            if (G.platform == SRA_PLATFORM_UNDEFINED)
+            {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid platform $(v)",
+                            "v=%s", value));
+                break;
+            }
+        }
+        else
+            G.platform = SRA_PLATFORM_UNDEFINED;
+
+        rc = ArgsOptionCount (args, OPTION_QUALITY, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_QUALITY, 0, (const void **)&value);
+            if (rc)
+                break;
+            if (strcmp(value, "PHRED_33") == 0)
+                qualityFormat = FASTQphred33;
+            else if (strcmp(value, "PHRED_64") == 0)
+                qualityFormat = FASTQphred64;
+            else if (strcmp(value, "LOGODDS") == 0)
+                qualityFormat = FASTQlogodds;
+            else
+            {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid quality encoding $(v)",
+                            "v=%s", value));
+                break;
+            }
+        }
+        else
+            qualityFormat = 0;
+            
+        rc = ArgsOptionCount (args, OPTION_IGNORE_ILLUMINA_TAGS, &pcount);
+        if (rc)
+            break;
+        ignoreSpotGroups = pcount > 0;
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc) break;
+        if (pcount == 0)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            MiniUsage (args);
+            break;
+        }
+        else if (pcount > sizeof(files)/sizeof(files[0])) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+                        "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(files)/sizeof(files[0]))));
+            break;
+        }
+        else {
+            size_t need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, (const void **)&value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            nbsz = need;
+        }
+        
+        name_buffer = malloc(nbsz);
+        if (name_buffer == NULL) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, (const void **)&value);
+                if (rc) break;
+
+                defaultReadNumbers[i] = 0;
+                files[i] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+        }
+        else
+            break;
+        
+        rc = run(argv[0], &G, pcount, (char const **)files, qualityFormat, defaultReadNumbers, ignoreSpotGroups);
+        break;
+    }
+    free(name_buffer);
+
+    value = G.outpath ? strrchr(G.outpath, '/') : "/???";
+    if( value == NULL ) {
+        value = G.outpath;
+    } else {
+        value++;
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+                "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount));
+    } else {
+        (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s,errors=%u", value, G.errCount));
+    }
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/fastq-loader/fastq-parse.h b/tools/fastq-loader/fastq-parse.h
new file mode 100644
index 0000000..79a6b76
--- /dev/null
+++ b/tools/fastq-loader/fastq-parse.h
@@ -0,0 +1,169 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_parse_
+#define _h_fastq_parse_
+
+#include <align/extern.h>
+#include <klib/text.h>
+
+#include <loader/common-reader-priv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum FASTQQualityFormat
+{
+    FASTQunknown,
+    FASTQphred33,
+    FASTQphred64,
+    FASTQlogodds
+};
+
+struct FastqSequence
+{
+    Sequence_vt sequence_vt;
+    KRefcount   refcount;
+
+    /* tagline components: */
+    String spotname; /* tag line up to and including coordinates */
+    String spotgroup; /* token following '#' */
+    uint8_t readnumber; /* token following '/' 1 - IsFirst, 2 - IsSecond, 0 - dont know */
+
+    /* not populated at this time: */
+#if 0
+    String rungroup; 
+    String fmt_name; /* x and y replaced with $X and $Y */
+    uint8_t coord_num;
+    int32_t coords[16];
+#endif
+
+    /* read bases */
+    String read; 
+
+    bool is_colorspace;
+    
+    String  quality;
+    uint8_t qualityFormat; 
+    uint8_t qualityAsciiOffset;
+    
+    bool lowQuality;
+};
+
+struct FastqRecord
+{
+    Record  dad;
+
+    KDataBuffer source;
+    struct FastqSequence    seq;
+    Rejected*               rej; 
+};
+
+typedef struct FASTQToken
+{ 
+    size_t tokenStart;  /* offset into FASTQParseBlock.record->source */
+    size_t tokenLength;
+    size_t line_no;
+    size_t column_no;
+} FASTQToken;
+
+/* obtain a pointer to the token's text */
+#define TokenTextPtr(pb, token) ((const char*)((pb)->record->source.base) + (token)->tokenStart)
+
+typedef struct FASTQParseBlock
+{
+    void* self;
+    size_t (CC *input)(struct FASTQParseBlock* sb, char* buf, size_t max_size);
+    
+    /* inputs for the parser */
+    size_t  expectedQualityLines;
+    uint8_t qualityFormat; /* see enum FASTQQualityFormat above */
+    int8_t  defaultReadNumber; /* -1: never assign read numbers */
+
+    /*  Secondary (>1) read number observed previously (usually 2, sometimes 3). 
+        Once one is seen, do not allow any other values in the same input file. 
+        0 = has not seen one yet in this input. 
+        Always record as 2 */
+    uint8_t secondaryReadNumber; 
+    
+    bool ignoreSpotGroups;
+    
+    /* temporaries and outputs for the parser */
+    void* scanner;
+    size_t length; /* input characters consumed for the current record */
+    FASTQToken* lastToken;
+    struct FastqRecord* record;
+    size_t column;
+
+    /* all offsets are into record->source */
+    size_t spotNameOffset; 
+    size_t spotNameLength; 
+    size_t spotNameOffset_saved; /* sometimes needed to revert to older values */
+    size_t spotNameLength_saved; 
+    bool spotNameDone;
+    
+    size_t spotGroupOffset;
+    size_t spotGroupLength;
+    
+    size_t readOffset;
+    size_t readLength;
+    
+    size_t qualityOffset;
+    size_t qualityLength;
+    uint8_t qualityAsciiOffset; 
+    
+    bool fatalError;
+} FASTQParseBlock;
+
+extern rc_t FASTQScan_yylex_init(FASTQParseBlock* context, bool debug);
+extern void FASTQScan_yylex_destroy(FASTQParseBlock* context);
+
+/* explicit FLEX state control for bison*/
+extern void FASTQScan_inline_sequence(FASTQParseBlock* pb);
+extern void FASTQScan_inline_quality(FASTQParseBlock* pb);
+extern void FASTQScan_skip_to_eol(FASTQParseBlock* pb); /*the next token will be EOL or EOF*/
+
+extern void FASTQ_set_lineno (int line_number, void* scanner);
+
+extern int FASTQ_lex(FASTQToken* pb, void * scanner);
+extern void FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token);
+extern void FASTQ_qualityContext(FASTQParseBlock* pb);
+
+extern int FASTQ_debug; /* set to 1 to print Bison trace */ 
+
+extern int FASTQ_parse(FASTQParseBlock* pb); /* 0 = end of input, 1 = success, a new record is in context->record, 2 - syntax error */
+
+/* call before parsing every record (FASTQ_parse does so internally; this is for testing the parser) */
+extern void FASTQ_ParseBlockInit(FASTQParseBlock* pb); 
+
+extern void FASTQ_error(FASTQParseBlock* pb, const char* msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_parse_ */
diff --git a/tools/fastq-loader/fastq-reader.c b/tools/fastq-loader/fastq-reader.c
new file mode 100644
index 0000000..4f2c564
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.c
@@ -0,0 +1,709 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct FastqReaderFile  FastqReaderFile;
+typedef struct FastqRecord      FastqRecord;
+typedef struct FastqSequence    FastqSequence;
+
+#define READERFILE_IMPL FastqReaderFile
+#define RECORD_IMPL     FastqRecord
+#define SEQUENCE_IMPL   FastqSequence
+
+#include "fastq-reader.h"
+#include "fastq-parse.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <kapp/loader-file.h>
+#include <kfs/directory.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+static rc_t FastqSequenceInit(FastqSequence* self);
+
+/*--------------------------------------------------------------------------
+ * FastqRecord
+ */
+static rc_t FastqRecordAddRef   ( const FastqRecord* self );
+static rc_t FastqRecordRelease  ( const FastqRecord* self );
+static rc_t FastqRecordGetSequence  ( const FastqRecord* self, const Sequence** result);
+static rc_t FastqRecordGetAlignment ( const FastqRecord* self, const Alignment** result);
+static rc_t FastqRecordGetRejected  ( const FastqRecord* self, const Rejected** result);
+
+static Record_vt_v1 FastqRecord_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqRecordAddRef,
+    FastqRecordRelease,
+    FastqRecordGetSequence,
+    FastqRecordGetAlignment,
+    FastqRecordGetRejected,
+    /* end minor version == 0 */
+};
+
+static rc_t CC FastqRecordInit ( FastqRecord* self )
+{
+    assert(self);
+    self->dad.vt.v1 = & FastqRecord_vt; 
+    KDataBufferMakeBytes ( & self->source, 0 );
+    self->rej = 0;
+    return FastqSequenceInit(& self->seq);
+}
+
+static rc_t FastqRecordWhack( const FastqRecord* cself )
+{
+    rc_t rc = 0;
+    FastqRecord* self = (FastqRecord*)cself;
+    assert(self);
+    
+    rc = KDataBufferWhack( & self->source );
+    
+    if (rc)
+        RejectedRelease(self->rej);
+    else
+        rc = RejectedRelease(self->rej);
+        
+    free(self);    
+      
+    return rc;
+}
+
+static rc_t FastqRecordAddRef( const FastqRecord* self )
+{
+    assert(self);
+    KRefcountAdd( & self->seq.refcount, "FastqRecord" );
+    /* TODO: handle rc from KRefcountAdd */
+    return 0;
+}
+
+static rc_t FastqRecordRelease( const FastqRecord* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqRecord *self = ( FastqRecord* ) cself;
+        switch ( KRefcountDrop ( & self ->seq.refcount, "FastqRecord" ) )
+        {
+        case krefWhack:
+            FastqRecordWhack( self );
+            break;
+        default:
+            /* TODO: handle other values */
+            break;
+        }
+    }
+    return 0;
+}
+
+static rc_t FastqRecordGetSequence( const FastqRecord* self, const Sequence** result )
+{
+    rc_t rc = 0;
+    assert(result);
+    *result = 0;
+    if (self->rej == 0)
+    {
+        rc = FastqRecordAddRef(self);
+        if (rc == 0)
+            *result = (const Sequence*) & self->seq;
+    }
+    return rc;
+}
+
+static rc_t FastqRecordGetAlignment( const FastqRecord* self, const Alignment** result)
+{
+    *result = 0;
+    return 0;
+}
+
+static rc_t FastqRecordGetRejected( const FastqRecord* self, const Rejected** result)
+{
+    rc_t rc = 0;
+    assert(result);
+    *result = 0;
+    if (self->rej != 0)
+    {
+        rc = RejectedAddRef(self->rej);
+        if (rc == 0)
+            *result = self->rej;
+    }
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqSequence
+ */
+
+static rc_t FastqSequenceAddRef              ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceRelease             ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceGetReadLength       ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetRead             ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetRead2            ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+static rc_t FastqSequenceGetQuality          ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static rc_t FastqSequenceGetSpotGroup        ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static rc_t FastqSequenceGetSpotName         ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static bool FastqSequenceIsColorSpace        ( const SEQUENCE_IMPL *self );
+static rc_t FastqSequenceGetCSKey            ( const SEQUENCE_IMPL *self, char cskey[1] );
+static rc_t FastqSequenceGetCSReadLength     ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetCSRead           ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetCSQuality        ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static bool FastqSequenceRecordWasPaired     ( const SEQUENCE_IMPL *self );
+static int  FastqSequenceGetOrientationSelf  ( const SEQUENCE_IMPL *self );
+static int  FastqSequenceGetOrientationMate  ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsFirst       ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsSecond      ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceIsDuplicate         ( const SEQUENCE_IMPL *self ); 
+static bool FastqSequenceIsLowQuality        ( const SEQUENCE_IMPL *self ); 
+static rc_t FastqSequenceGetTI               ( const SEQUENCE_IMPL *self, uint64_t *ti );
+
+static Sequence_vt_v1 FastqSequence_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqSequenceAddRef,
+    FastqSequenceRelease,
+    FastqSequenceGetReadLength,
+    FastqSequenceGetRead,
+    FastqSequenceGetRead2,
+    FastqSequenceGetQuality,
+    FastqSequenceGetSpotGroup,
+    FastqSequenceGetSpotName,
+    FastqSequenceIsColorSpace,
+    FastqSequenceGetCSKey,
+    FastqSequenceGetCSReadLength,
+    FastqSequenceGetCSRead,
+    FastqSequenceGetCSQuality,
+    FastqSequenceRecordWasPaired,
+    FastqSequenceGetOrientationSelf,
+    FastqSequenceGetOrientationMate,
+    FastqSequenceRecordIsFirst,
+    FastqSequenceRecordIsSecond,
+    FastqSequenceIsDuplicate,  
+    FastqSequenceIsLowQuality, 
+    FastqSequenceGetTI,        
+    /* end minor version == 0 */
+};
+
+static
+rc_t
+FastqSequenceInit(FastqSequence* self)
+{
+    self->sequence_vt.v1 = & FastqSequence_vt;
+    KRefcountInit ( & self -> refcount, 1, "FastqSequence", "FastqSequenceInit", "");
+
+    StringInit(&self->spotname, 0, 0, 0);
+    StringInit(&self->spotgroup, 0, 0, 0);
+    self->readnumber = 0; 
+    StringInit(&self->read, 0, 0, 0);
+    self->is_colorspace = false;
+    StringInit(&self->quality, 0, 0, 0);
+    self->qualityAsciiOffset = 0;
+    self->lowQuality = false;
+
+    return 0;
+}
+
+static const FastqRecord*
+FastqSequenceToRecord(const FastqSequence* seq) 
+{
+    return ( const FastqRecord * ) ( (uint8_t*)seq - offsetof ( FastqRecord, seq ) );
+}
+
+static rc_t FastqSequenceAddRef( const FastqSequence* self )
+{
+    switch (KRefcountAdd( & self->refcount, "FastqSequence" ))
+    {
+    case krefLimit:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRange, rcExcessive );
+    case krefNegative:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRefcount, rcInvalid );
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceRelease( const FastqSequence* self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "FastqSequence" ) )
+        {
+        case krefWhack:
+            return FastqRecordWhack ( FastqSequenceToRecord(self) );
+
+        case krefNegative:
+            return RC ( RC_MODULE, rcData, rcDestroying, rcSelf, rcDestroyed );
+        }
+    }
+
+    return 0;
+
+}
+
+static rc_t FastqSequenceGetReadLength ( const FastqSequence *self, uint32_t *length )
+{
+    assert(self);
+    if ( self->is_colorspace )
+    {
+        *length = 0;
+    }
+    else
+    {
+        *length = self->read.len;
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetRead ( const FastqSequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    if ( !self->is_colorspace )
+        string_copy(sequence, self->read.len, self->read.addr, self->read.len);
+    return 0;
+}
+
+static rc_t FastqSequenceGetRead2 ( const FastqSequence *self, char *sequence, uint32_t start, uint32_t stop )
+{
+    assert(self);
+    assert(sequence);
+    if ( self->is_colorspace )
+    {
+        return RC( RC_MODULE, rcData, rcAccessing, rcItem, rcEmpty );
+    }
+    else
+    {
+        uint32_t length = self->read.len;
+        if (start >= length || stop >= length || start >= stop)
+        {
+            return RC( RC_MODULE, rcData, rcAccessing, rcRange, rcInvalid);
+        }
+        string_copy(sequence, stop - start, self->read.addr + start, stop - start);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    *quality = NULL;
+    if ( self->quality.size != 0)
+    {
+        uint32_t length = self->read.len;
+        if (self->quality.size != length)
+            return RC( RC_MODULE, rcData, rcReading, rcData, rcInconsistent);
+            
+        *quality = (const int8_t *)self->quality.addr;
+        *offset = self->qualityAsciiOffset;
+    }
+    else
+    {
+        *quality = NULL;
+        *offset = 0;
+    }
+    if ( self->qualityFormat == FASTQlogodds )
+    {
+        *qualType = QT_LogOdds;
+    }
+    else
+    {
+        *qualType = QT_Phred;
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetSpotGroup ( const FastqSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    *name = self->spotgroup.addr;
+    *length = self->spotgroup.len;
+    return 0;
+}
+
+static rc_t FastqSequenceGetSpotName ( const FastqSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    *name = self->spotname.addr;
+    *length = self->spotname.len;
+    return 0;
+}
+
+static bool FastqSequenceIsColorSpace ( const FastqSequence *self )
+{
+    assert(self);
+    return self->is_colorspace;
+}
+
+static rc_t FastqSequenceGetCSKey ( const FastqSequence *self, char cskey[1] )
+{
+    assert(self);
+    if (self->is_colorspace)
+        cskey[0] = self->read.addr[0];
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSReadLength ( const FastqSequence *self, uint32_t *length )
+{
+    assert(self);
+    if (self->is_colorspace)
+        *length = self->read.len - 1;
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSRead ( const FastqSequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    if ( self->is_colorspace )
+        string_copy(sequence, self->read.len - 1, self->read.addr + 1, self->read.len - 1);
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    *quality = NULL;
+    if ( self->quality.size != 0 && self->is_colorspace )
+    {
+        *quality = (const int8_t *)self->quality.addr + 1;
+        *offset = self->qualityAsciiOffset;
+    }
+    else
+    {
+        *quality = NULL;
+        *offset = 0;
+    }
+    *qualType = QT_Phred;
+    return 0;
+}
+
+static bool FastqSequenceRecordWasPaired ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber != 0;
+}
+
+static int FastqSequenceGetOrientationSelf ( const FastqSequence *self )
+{
+    assert(self);
+    return ReadOrientationUnknown;
+}
+
+static int FastqSequenceGetOrientationMate ( const FastqSequence *self )
+{
+    assert(self);
+    return ReadOrientationUnknown;
+}
+
+static bool FastqSequenceRecordIsFirst ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber == 1;
+}
+
+static bool FastqSequenceRecordIsSecond ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber == 2;
+}
+
+static bool FastqSequenceIsDuplicate         ( const SEQUENCE_IMPL *self )
+{
+    assert(self);
+    return 0;
+}
+
+static bool FastqSequenceIsLowQuality        ( const SEQUENCE_IMPL *self )
+{
+    assert(self);
+    return self->lowQuality;
+}
+
+static rc_t FastqSequenceGetTI               ( const SEQUENCE_IMPL *self, uint64_t *ti )
+{
+    assert(self);
+    return false;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqReaderFile
+ */
+
+static rc_t FastqReaderFileWhack( READERFILE_IMPL* self );
+static rc_t FastqReaderFileGetRecord ( const READERFILE_IMPL *self, const Record** result );
+static float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self );
+static rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+
+static ReaderFile_vt_v1 FastqReaderFile_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqReaderFileWhack,
+    FastqReaderFileGetRecord,
+    FastqReaderFileGetProportionalPosition,
+    FastqReaderFileGetReferenceInfo,
+    /* end minor version == 0 */
+};
+
+struct FastqReaderFile
+{
+    ReaderFile dad;
+
+    FASTQParseBlock pb; 
+    const KLoaderFile* reader;
+
+    const char* recordStart; /* raw source of the record being currently parsed */
+    size_t curPos;           /* current tokenization position relative to recordStart */
+    bool lastEol;
+    bool eolInserted;
+};
+
+rc_t FastqReaderFileWhack( FastqReaderFile* f )
+{
+    FastqReaderFile* self = (FastqReaderFile*) f;
+
+    FASTQScan_yylex_destroy(& self->pb);
+
+    if (self->reader)
+        KLoaderFile_Release ( self->reader, true );
+
+    ReaderFileWhack( &self->dad );
+
+    free ( self );
+    return 0;
+}
+
+void FASTQ_ParseBlockInit ( FASTQParseBlock* pb )
+{
+    pb->length = 0;
+    pb->spotNameOffset = 0;
+    pb->spotNameLength = 0;
+    pb->spotNameDone = false;
+    pb->spotGroupOffset = 0;
+    pb->spotGroupLength = 0;
+    pb->readOffset = 0;
+    pb->readLength = 0;
+    pb->qualityOffset = 0;
+    pb->qualityLength = 0;
+}
+
+rc_t FastqReaderFileGetRecord ( const FastqReaderFile *f, const Record** result )
+{
+    rc_t rc;
+    FastqReaderFile* self = (FastqReaderFile*) f;
+    
+    if (self->pb.fatalError)
+        return 0;
+
+    self->pb.record = (FastqRecord*)malloc(sizeof(FastqRecord));
+    if (self->pb.record == NULL)
+    {
+        rc = RC ( RC_MODULE, rcData, rcAllocating, rcMemory, rcExhausted );
+        return 0;
+    }
+    rc = FastqRecordInit(self->pb.record);
+    if (rc != 0)
+        return rc;
+
+    FASTQ_ParseBlockInit( & self->pb );
+    
+    if ( FASTQ_parse( & self->pb ) == 0 && self->pb.record->rej == 0 )
+    {   /* normal end of input */
+        RecordRelease((const Record*)self->pb.record);
+        *result = 0;
+        return 0;
+    }
+    
+    /*TODO: remove? compensate for an artificially inserted trailing \n */
+    if ( self->eolInserted )
+    {
+        -- self->pb.length;
+        self->eolInserted = false;
+    }
+
+    if (self->pb.record->rej != 0) /* had error(s) */
+    {   /* save the complete raw source in the Rejected object */
+        StringInit(& self->pb.record->rej->source, string_dup(self->recordStart, self->pb.length), self->pb.length, (uint32_t)self->pb.length);
+        self->pb.record->rej->fatal = self->pb.fatalError;
+    }
+
+    if (rc == 0 && self->reader != 0)
+    {   
+        /* advance the record start pointer beyond the last token */ 
+        size_t length;
+        rc = KLoaderFile_Read( self->reader, self->pb.length, 0, (const void**)& self->recordStart, & length);
+        if (rc != 0)
+            LogErr(klogErr, rc, "FastqReaderFileGetRecord failed");
+
+        self->curPos -= self->pb.length;
+    }
+
+    StringInit( & self->pb.record->seq.spotname,    (const char*)self->pb.record->source.base + self->pb.spotNameOffset,    self->pb.spotNameLength, (uint32_t)self->pb.spotNameLength);
+    StringInit( & self->pb.record->seq.spotgroup,   (const char*)self->pb.record->source.base + self->pb.spotGroupOffset,   self->pb.spotGroupLength, (uint32_t)self->pb.spotGroupLength);
+    StringInit( & self->pb.record->seq.read,        (const char*)self->pb.record->source.base + self->pb.readOffset,        self->pb.readLength, (uint32_t)self->pb.readLength); 
+    StringInit( & self->pb.record->seq.quality,     (const char*)self->pb.record->source.base + self->pb.qualityOffset,     self->pb.qualityLength, (uint32_t)self->pb.qualityLength); 
+    self->pb.record->seq.qualityFormat = self->pb.qualityFormat;
+    self->pb.record->seq.qualityAsciiOffset = self->pb.qualityAsciiOffset;
+    
+    if (self->pb.record->seq.readnumber == 0)
+        self->pb.record->seq.readnumber = self->pb.defaultReadNumber;
+    
+    *result = (const Record*) self->pb.record;
+
+    return rc;
+}
+
+void CC FASTQ_error(struct FASTQParseBlock* sb, const char* msg)
+{
+    if (sb->record->rej == 0)
+    {   /* save the error information in the Rejected object */
+        sb->record->rej = (Rejected*)malloc(sizeof(Rejected));
+        RejectedInit(sb->record->rej);
+
+        sb->record->rej->message    = string_dup(msg, strlen(msg));
+        sb->record->rej->line       = sb->lastToken->line_no;
+        sb->record->rej->column     = sb->lastToken->column_no;
+    }
+    /* subsequent errors in this record will be ignored */
+}
+
+size_t CC FASTQ_input(FASTQParseBlock* pb, char* buf, size_t max_size)
+{
+    FastqReaderFile* self = (FastqReaderFile*)pb->self;
+    size_t length;
+
+    rc_t rc = KLoaderFile_Read( self->reader, 0, self->curPos + max_size, (const void**)& self->recordStart, & length);
+
+    if ( rc != 0 )
+    {
+        LogErr(klogErr, rc, "FASTQ_input failed");
+        return 0;
+    }
+    
+    length -= self->curPos;
+    if ( length == 0 ) /* nothing new read = end of file */
+    {   /* insert an additional \n before the end of file if missing */
+        if ( !self->lastEol )
+        {
+            buf[0] = '\n';
+            self->eolInserted = true;
+            self->lastEol = true;
+            return 1;
+        }
+        else
+        {   
+            return 0; /* signal EOF to flex */
+        }
+    }
+
+    memmove(buf, self->recordStart + self->curPos, length);
+
+    self->lastEol = ( buf[length-1] == '\n' );
+    self->curPos += length;
+    
+    return length;
+}
+
+rc_t CC FastqReaderFileMake( const ReaderFile **reader, 
+                             const KDirectory* dir, 
+                             const char* file, 
+                             enum FASTQQualityFormat qualityFormat, 
+                             int8_t defaultReadNumber,
+                             bool ignoreSpotGroups)
+{
+    rc_t rc;
+    FastqReaderFile* self = (FastqReaderFile*) malloc ( sizeof * self );
+    if ( self == NULL )
+    {
+         rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+    }
+    else
+    {
+        memset(self, 0, sizeof(*self));
+        rc = ReaderFileInit ( self );
+        self->dad.vt.v1 = & FastqReaderFile_vt;
+
+        self->dad.pathname = string_dup(file, strlen(file)+1);
+        if ( self->dad.pathname == NULL )
+        {
+            rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+        }
+        else
+        {
+            rc = KLoaderFile_Make( & self->reader, dir, file, 0, true );
+        }
+        if (rc == 0)
+        {
+            self->pb.self = self;
+            self->pb.input = FASTQ_input;   
+            self->pb.qualityFormat = qualityFormat;
+            self->pb.defaultReadNumber = defaultReadNumber;
+            self->pb.secondaryReadNumber = 0;
+            self->pb.ignoreSpotGroups = ignoreSpotGroups;
+            
+            rc = FASTQScan_yylex_init(& self->pb, false); 
+            if (rc == 0)
+            {
+                *reader = (const ReaderFile *) self;
+            } 
+            else
+            {
+                KLoaderFile_Release( self->reader, true );
+                ReaderFileRelease( & self->dad );
+                *reader = 0;
+            }
+        }
+        else
+        {
+            ReaderFileRelease( & self->dad );
+            *reader = 0;
+        }
+    }
+ 
+    return rc;
+}
+
+float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+    return 0.0f;
+}
+
+rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result )
+{
+    *result = NULL;
+    return 0;
+}
+
+
diff --git a/tools/fastq-loader/fastq-reader.h b/tools/fastq-loader/fastq-reader.h
new file mode 100644
index 0000000..758cac9
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.h
@@ -0,0 +1,57 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_reader_
+#define _h_fastq_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include "fastq-parse.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct ReaderFile;
+
+rc_t CC FastqReaderFileMake( const struct ReaderFile **self, 
+                             const struct KDirectory* dir, 
+                             const char* file, 
+                             enum FASTQQualityFormat qualityFormat, 
+                             int8_t defaultReadNumber, 
+                             bool ignoreSpotGroups);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_reader_ */
diff --git a/tools/fastq-loader/fastq-tokens.h b/tools/fastq-loader/fastq-tokens.h
new file mode 100644
index 0000000..33745fe
--- /dev/null
+++ b/tools/fastq-loader/fastq-tokens.h
@@ -0,0 +1,67 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 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 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, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     fqENDOFTEXT = 0,
+     fqRUNDOTSPOT = 258,
+     fqSPOTGROUP = 259,
+     fqNUMBER = 260,
+     fqALPHANUM = 261,
+     fqWS = 262,
+     fqENDLINE = 263,
+     fqBASESEQ = 264,
+     fqCOLORSEQ = 265,
+     fqTOKEN = 266,
+     fqASCQUAL = 267,
+     fqCOORDS = 268,
+     fqUNRECOGNIZED = 269
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/tools/fastq-loader/loader-imp.c b/tools/fastq-loader/loader-imp.c
new file mode 100644
index 0000000..82998cc
--- /dev/null
+++ b/tools/fastq-loader/loader-imp.c
@@ -0,0 +1,256 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+ 
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kdb/btree.h>
+#include <kdb/meta.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+
+#include <kapp/loader-meta.h>
+#include <kapp/main.h>
+
+#include <kfs/directory.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+#include <insdc/sra.h>
+
+#include "common-reader.h"
+#include "common-writer.h"
+#include "sequence-writer.h"
+
+#include "fastq-reader.h"
+
+rc_t ArchiveFASTQ(CommonWriterSettings* G,
+                VDBManager *mgr, 
+                VDatabase *db,
+                unsigned seqFiles, 
+                char const *seqFile[], 
+                enum FASTQQualityFormat qualityFormat,
+                const int8_t defaultReadNumbers[],
+                bool ignoreSpotGroups)
+{
+    rc_t rc = 0;
+    unsigned i;
+    CommonWriter cw;
+
+    KDirectory *dir;
+    rc = KDirectoryNativeDir(&dir);    
+    if (rc != 0)
+        return rc;
+
+    rc = CommonWriterInit( &cw, mgr, db, G);
+    if (rc != 0)
+    {
+        KDirectoryRelease(dir);
+        return rc;
+    }
+    
+    for (i = 0; i < seqFiles; ++i) {
+        const ReaderFile *reader;
+        if (G->platform == SRA_PLATFORM_PACBIO_SMRT)  
+            rc = FastqReaderFileMake(&reader, dir, seqFile[i], FASTQphred33, -1, ignoreSpotGroups); 
+        else
+            rc = FastqReaderFileMake(&reader, dir, seqFile[i], qualityFormat, defaultReadNumbers[i], ignoreSpotGroups);
+        
+        if (rc == 0) 
+        {
+            rc = CommonWriterArchive( &cw, reader );
+            if (rc != 0) 
+                ReaderFileRelease(reader);
+            else
+                rc = ReaderFileRelease(reader);
+        }
+        if (rc != 0)
+            break;
+    }
+    if (rc == 0) {
+        bool const quitting = (Quitting() != 0);
+        rc = CommonWriterComplete(&cw, quitting, 0);
+    }
+    else
+        CommonWriterComplete( &cw, true, 0 );
+        
+    G->errCount = cw.err_count;
+        
+    if (rc == 0)
+        rc = CommonWriterWhack( &cw );
+    else
+        CommonWriterWhack( &cw );
+    
+    if (rc == 0)
+        rc = KDirectoryRelease(dir);
+    else
+        KDirectoryRelease(dir);
+        
+    if (rc == 0) {
+        (void)LOGMSG(klogInfo, "Successfully loaded all files");
+    }
+    return rc;
+}
+ 
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+    KMDataNode *node;
+    rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+    
+    if (rc == 0) {
+        rc = KLoaderMeta_Write(node, progName, __DATE__, "FASTQ", KAppVersion());
+        KMDataNodeRelease(node);
+    }
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+    }
+    return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+    KDirectory *p;
+    rc_t rc = KDirectoryNativeDir(&p);
+    
+    if (rc == 0) {
+        rc = KDirectoryOpenDirUpdate(p, dir, false, "%s", path);
+        KDirectoryRelease(p);
+    }
+    return rc;
+}
+
+rc_t ConvertDatabaseToUnmapped(VDatabase* db)
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+    if (rc == 0) 
+    {
+        rc = VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+/*        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");*/
+        if (GetRCState(rc) == rcNotFound)
+            rc = 0;
+        rc = VTableRelease(tbl);
+    }
+    return rc;
+}
+
+rc_t run ( char const progName[], 
+           CommonWriterSettings* G, 
+           unsigned seqFiles, 
+           const char *seqFile[], 
+           uint8_t qualityOffset, 
+           const int8_t defaultReadNumbers[],
+           bool ignoreSpotGroups )
+{
+    VDBManager *mgr;
+    rc_t rc;
+    rc_t rc2;
+    char const *db_type = "NCBI:align:db:alignment_sorted"; 
+/*    char const *db_type = "NCBI:align:db:unaligned"; */
+    
+    rc = VDBManagerMakeUpdate(&mgr, NULL);
+    if (rc) {
+        (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+    }
+    else {
+        VSchema *schema;
+
+        rc = VDBManagerMakeSchema(mgr, &schema);
+        if (rc) {
+            (void)LOGERR (klogErr, rc, "failed to create schema");
+        }
+        else {
+            (void)(rc = VSchemaAddIncludePath(schema, "%s", G->schemaIncludePath));
+            rc = VSchemaParseFile(schema, "%s", G->schemaPath);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G->schemaPath));
+            }
+            else {
+                VDatabase *db;
+                
+                rc = VDBManagerCreateDB(mgr, &db, schema, db_type, kcmInit + kcmMD5, "%s", G->outpath);
+                rc2 = VSchemaRelease(schema);
+                if (rc2)
+                    (void)LOGERR(klogWarn, rc2, "Failed to release schema");
+                if (rc == 0)
+                    rc = rc2;
+                if (rc == 0) {
+                    rc = ArchiveFASTQ(G, mgr, db, seqFiles, seqFile, qualityOffset, defaultReadNumbers, ignoreSpotGroups);
+                }
+
+                if (rc == 0) {
+                    rc = ConvertDatabaseToUnmapped(db);
+                }
+
+                rc2 = VDatabaseRelease(db);
+                if (rc == 0)
+                {
+                    if (rc2)
+                        (void)LOGERR(klogWarn, rc2, "Failed to close database");
+                    rc = rc2;
+                }
+                
+                if (rc == 0) {
+                    KMetadata *meta;
+                    KDBManager *kmgr;
+                    
+                    rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+                    if (rc == 0) {
+                        KDatabase *kdb;
+                        
+                        rc = KDBManagerOpenDBUpdate(kmgr, &kdb, "%s", G->outpath);
+                        if (rc == 0) {
+                            rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+                            KDatabaseRelease(kdb);
+                        }
+                        KDBManagerRelease(kmgr);
+                    }
+                    if (rc == 0) {
+                        rc = WriteLoaderSignature(meta, progName);
+                        KMetadataRelease(meta);
+                    }
+                }
+            }
+            rc2 = VDBManagerRelease(mgr);
+            if (rc2)
+                (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+            if (rc == 0)
+                rc = rc2;
+        }
+    }
+    return rc;
+}
diff --git a/tools/fastq-loader/mmarray.c b/tools/fastq-loader/mmarray.c
new file mode 100644
index 0000000..5eaca25
--- /dev/null
+++ b/tools/fastq-loader/mmarray.c
@@ -0,0 +1,114 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#define MMA_NUM_CHUNKS_BITS (20u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+#define MMA_ELEM_SIZE ((size_t)((sizeof(MMA_ELEM_T) + ((size_t)(3u))) & ~((size_t)(3u))))
+
+typedef struct MMArray {
+    struct mma_map_s {
+        struct mma_submap_s {
+            void *base;
+        } submap[MMA_SUBCHUNK_COUNT];
+    } map[NUM_ID_SPACES];
+    off_t fsize;
+    int fd;
+} MMArray;
+
+static MMArray *MMArrayMake(rc_t *const prc, int fd)
+{
+    MMArray *const self = calloc(1, sizeof(*self));
+
+    if (self) {
+        self->fd = fd;
+        return self;
+    }
+    *prc = RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+    return NULL;
+}
+
+static MMA_ELEM_T *MMArrayGet(MMArray *const self, rc_t *const prc, uint64_t const element)
+{
+    size_t const chunk = MMA_SUBCHUNK_SIZE * MMA_ELEM_SIZE;
+    unsigned const bin_no = element >> 32;
+    unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+    unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+    while (bin_no < sizeof(self->map)/sizeof(self->map[0])) {
+        MMA_ELEM_T *const next = self->map[bin_no].submap[subbin].base;
+        if (next != NULL)
+            return &next[in_bin];
+        else {
+            off_t const cur_fsize = self->fsize;
+            off_t const new_fsize = cur_fsize + chunk;
+
+            if (ftruncate(self->fd, new_fsize) == 0) {
+                void *const base = mmap(NULL, chunk, PROT_READ|PROT_WRITE,
+                                        MAP_FILE|MAP_SHARED, self->fd, cur_fsize);
+
+                self->fsize = new_fsize;
+                if (base != MAP_FAILED)
+                    self->map[bin_no].submap[subbin].base = base;
+                else {
+                    PLOGMSG(klogErr, (klogErr, "Failed to construct map for bin $(bin), subbin $(subbin)", "bin=%u,subbin=%u", bin_no, subbin));
+                    *prc = RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+                    return NULL;
+                }
+            }
+            else {
+                *prc = RC(rcExe, rcMemMap, rcResizing, rcSize, rcExcessive);
+                return NULL;
+            }
+        }
+    }
+    *prc = RC(rcExe, rcMemMap, rcResizing, rcId, rcExcessive);
+    return NULL;
+}
+
+static void MMArrayWhack(MMArray *self)
+{
+    size_t const chunk = MMA_SUBCHUNK_SIZE * MMA_ELEM_SIZE;
+    unsigned i;
+
+    for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+        unsigned j;
+
+        for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+            if (self->map[i].submap[j].base)
+            	munmap(self->map[i].submap[j].base, chunk);
+        }
+    }
+    close(self->fd);
+    free(self);
+}
+
+#undef MMA_NUM_CHUNKS_BITS
+#undef MMA_NUM_SUBCHUNKS_BITS
+#undef MMA_SUBCHUNK_SIZE
+#undef MMA_SUBCHUNK_COUNT
+#undef MMA_ELEM_SIZE
diff --git a/tools/fastq-loader/parsing_rules.txt b/tools/fastq-loader/parsing_rules.txt
new file mode 100755
index 0000000..940f2f1
--- /dev/null
+++ b/tools/fastq-loader/parsing_rules.txt
@@ -0,0 +1,106 @@
+
+This is a summary of parsing rules for fastq files, as implemented in the latf-load tool.
+
+I. Notation
+
+The parsing rules are specified using a variant of Backus-Naur Form notation (BNF). The conventions are:
+
+    Token names are specified in capital letters. Tokens are defined in section II.
+    Names of non-terminals are specified in lowercase. Non-terminals are defined in section III.
+    { A }   means "A repeated 0 or more times"
+    [ A ]   means "optional A"
+    A | B   means "A or B"
+    ( )     parentheses are used to group items
+
+II. Tokens
+
+The following tokens are used in the grammar description.
+
+    ALPHANUM    - a sequence of (Latin) letters and decimal digits or dashes, beginning with a letter
+    NUMBER      - a sequence of decimal digits
+    WS          - a sequence of white space characters (spaces or tabs)
+    EOL         - an end of line character (not considered a white space)
+    COORDS      - a sequence of 4 decimal numbers, each preceded by ':', e.g. :8:2:342:540
+    SPOTGROUP   - '#' followed by a possibly empty sequence of letters, decimal digits, or '_'
+    RUNDOTSPOT  - a special identifier representing a spot inside a run, in the format [SDE]RR{digits}.{digits}. An example would be "DRR000123.12"
+    BASES       - a sequence of characters representing bases in text notation. Valid characters are A, C, G, T, a, c, g, t, N, n.
+    CSBASES     - a sequence of characters representing bases in colorspace notation. The first character has to be one of A, C, G, T, a, c, g, t.
+                  The remaining characters have to be '1', '2', '3', or '.'
+    QUAL        - a sequence of characters representing qualities. The range of valid characters is determined by quality encoding
+                  specified by the command line option --quality, characters with ASCII codes 33-126 for PHRED_33 or 64-127 for PHRED_64, 59-126 for LOGODDS (all ranges inclusive).
+
+In addition, grammar rules use literal tokens in apostrophes, e.g. ':'
+
+III. Parsing rules
+
+1.  Input file
+
+    input:
+        { readLines [ qualityLines ] } |
+        { qualityLines } |
+        { name COORDS ':' ( BASES | CSBASES ) ':' QUAL EOL }
+
+Normally, an input file consists of a sequence of reads, each occupying multiple lines which identify read and contain its bases, with or without qualities.
+It is possible to have a file with only qualities specified for every read; in that case the loader must also be given a file with corresponding bases.
+
+An alternative is an "inline" format which has name, bases and qualities of each read on a single line.
+
+
+2.  Read
+
+    readLines : ( '@' | '>' ) ( tagLine | runSpotRead ) EOL read
+
+    read : baseRead | csRead
+
+    baseRead : BASES EOL { BASES EOL }
+
+    csRead : CSBASES EOL { CSBASES EOL }
+
+    qualityLines: '+' { TOKEN } EOL quality
+
+    quality: QUAL EOL { QUAL EOL }
+
+A read in a fastq file is identified by its tag line. Tag line is followed by bases in text or colorspace format.
+
+An optional quality specification may follow. The quality specification starts with '+' and its own tag line, which is
+expected to match the tag line of the textually preceding read, although it is not enforced by latf-load.
+
+3. Tag line
+
+    tagLine : nameSpotGroup |
+              nameSpotGroup readNumber WS NUMBER ':' ALPHANUM ':' NUMBER indexSequence |
+              nameSpotGroup readNumber [ WS [ ALPHANUM ] ] |
+              nameSpotGroup WS casava1_8 |
+              nameSpotGroup WS ALPHANUM |
+              runSpotRead [ WS ] |
+              name [ readNumber [ WS ] ]
+
+    nameSpotGroup : [ name WS ] nameWithCoords [ SPOTGROUP ] |
+                    name SPOTGROUP |
+                    name [ readNumber [ WS ] ] |
+                    name WS ALPHANUM '='
+
+    nameWithCoords :  name COORDS |
+                      name COORDS '_' [ casava1_8 ] |
+                      name COORDS [ ':' ] '.' name |
+                      name COORDS ':' [ name ]
+
+    name : ( ALPHANUM | NUMBER ) { '_' | '-' | '.' | ':' | ALPHANUM | NUMBER }
+
+    readNumberOrTail : ( readNumber | WS [ casava1_8 ] | WS tail ) { WS tail }
+
+    readNumber : '/' NUMBER { '/' name }
+
+    casava1_8 : NUMBER ':' ALPHANUM ':' NUMBER [ ':' [ ALPHANUM | NUMBER ] ]
+
+    tail : ALPHANUM { NUMBER | ALPHANUM | '_' | '/' | '=' )
+
+    runSpotRead : RUNDOTSPOT [ ( '.' | '/' ) NUMBER ] { tail | NUMBER }
+
+The purpose of the tag line is  to identify a read. The components of a tag line may represent run name (possibly including coordinates), spot group, read number, and some additional information which may be of no concern to latf-load.
+Tag lines come in a multitude of variations on the basic fastq format, somewhat loosely defined in e.g. http://en.wikipedia.org/wiki/FASTQ_format
+Parsing rules for the tag line in latf-load have been designed to recognize major variations of the basic tag line format and
+evolved based on format variations encountered in real life submissions.
+
+
+
diff --git a/tools/fastq-loader/sequence-writer.c b/tools/fastq-loader/sequence-writer.c
new file mode 100644
index 0000000..a646059
--- /dev/null
+++ b/tools/fastq-loader/sequence-writer.c
@@ -0,0 +1,366 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include <align/writer-sequence.h>
+
+#include <loader/sequence-writer.h>
+#include <loader/common-reader.h>
+
+/* MARK: SequenceWriter Object */
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db) {
+    memset(self, 0, sizeof(*self));
+    self->db = db;
+    VDatabaseAddRef(db);
+    return self;
+}
+
+rc_t SequenceWriteRecord(SequenceWriter *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform,
+                         bool keepMismatchQual,
+                         bool no_real_output,
+                         bool hasTI,
+                         char const *QualQuantizer
+                         )
+{
+    rc_t rc = 0;
+    uint8_t nreads = rec->numreads;
+    unsigned i;
+    unsigned seqLen;
+    int64_t dummyRowId;
+    
+    uint8_t readInfo[4096];
+    void *h_readInfo = NULL;
+    
+    INSDC_coord_zero *readStart = (void *)readInfo;
+    INSDC_coord_len *readLen;
+    uint8_t *alcnt;
+    INSDC_SRA_xread_type *readType;
+    INSDC_SRA_read_filter *readFilter;
+    bool *mask = NULL;
+    size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+                          + sizeof(readStart[0]) + sizeof(readLen[0])
+                          + sizeof(readFilter[0]);
+    
+    TableWriterSeqData data;
+
+    for (i = seqLen = 0; i != nreads; ++i) {
+        seqLen += rec->readLen[i];
+    }
+    
+    if (nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+    {
+        h_readInfo = malloc(nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]));
+        if (h_readInfo == NULL)
+            return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+        readStart = h_readInfo;
+    }
+    readLen = (INSDC_coord_len *)&readStart[nreads];
+    alcnt = (uint8_t *)&readLen[nreads];
+    readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+    readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+    
+    if (keepMismatchQual) {
+        mask = (bool *)&readFilter[nreads];
+        
+        for (i = 0; i != seqLen; ++i) {
+            mask[i] = (rec->qual[i] & 0x80) != 0;
+        }
+    }
+    
+    for (i = 0; i != nreads; ++i) {
+        alcnt[i] = rec->aligned[i] ? 1 : 0;
+        readLen[i] = rec->readLen[i];
+        readStart[i] = rec->readStart[i];
+        readType[i] = readLen[i] ? SRA_READ_TYPE_BIOLOGICAL : SRA_READ_TYPE_TECHNICAL;
+        switch ( rec->orientation[i] )
+        {
+            case ReadOrientationForward:
+                readType[i] |= SRA_READ_TYPE_FORWARD;
+                break;
+            case ReadOrientationReverse:
+                readType[i] |= SRA_READ_TYPE_REVERSE;
+                break;
+            case ReadOrientationUnknown:
+            default:
+                break;
+        }
+        readFilter[i] = isDup ? SRA_READ_FILTER_CRITERIA
+                      : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+    }
+
+    memset(&data, 0, sizeof(data));
+    
+    data.sequence.buffer = rec->seq;
+    data.sequence.elements = seqLen;
+    
+    data.quality.buffer = rec->qual;
+    data.quality.elements = seqLen;
+    
+    if (keepMismatchQual) {
+        data.no_quantize_mask.buffer = mask;
+        data.no_quantize_mask.elements = seqLen;
+    }
+    
+    data.alignment_count.buffer = alcnt;
+    data.alignment_count.elements = nreads;
+    
+    data.nreads = nreads;
+    
+    data.read_type.buffer = readType;
+    data.read_type.elements = nreads;
+    
+    data.read_start.buffer = readStart;
+    data.read_start.elements = nreads;
+    
+    data.read_len.buffer = readLen;
+    data.read_len.elements = nreads;
+    
+    data.tmp_key_id = rec->keyId;
+    
+    data.spot_group.buffer = rec->spotGroup;
+    data.spot_group.elements = rec->spotGroupLen;
+    
+    data.cskey.buffer = rec->cskey;
+    data.cskey.elements = nreads;
+    
+    data.read_filter.buffer = readFilter;
+    data.read_filter.elements = nreads;
+    
+    data.platform.buffer = &platform;
+    data.platform.elements = 1;
+    
+    data.ti.buffer = rec->ti;
+    data.ti.elements = nreads;
+    
+    data.spot_name.buffer = rec->spotName;
+    data.spot_name.elements = rec->spotNameLen;
+    
+    if (!no_real_output) {
+        if (self->tbl == NULL) {
+            int csoption = (color ? ewseq_co_ColorSpace : 0);
+
+            if(hasTI) csoption |= ewseq_co_TI;
+            
+            rc = TableWriterSeq_Make(&self->tbl, self->db,
+                                     csoption | ewseq_co_NoLabelData | ewseq_co_SpotGroup /*| ewseq_co_SpotName*/, QualQuantizer);
+        }
+        if (rc == 0) {
+            rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+        }
+    }
+    
+    if (h_readInfo)
+        free(h_readInfo);
+    
+    return rc;
+}
+
+rc_t SequenceDoneWriting(SequenceWriter *self)
+{
+    return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const SequenceWriter *cself, int64_t row, uint64_t *keyId)
+{
+    return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t rowId, unsigned nreads,
+                             int64_t const primeId[/* nreads */],
+                             uint8_t const algnCnt[/* nreads */])
+{
+    TableWriterData data[2];
+    
+    data[0].buffer = primeId; data[0].elements = nreads;
+    data[1].buffer = algnCnt; data[1].elements = nreads;
+    
+    return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(SequenceWriter *self, bool commit) {
+    uint64_t dummyRows;
+    /* rc_t rc; */
+    
+    VDatabaseRelease(self->db);
+    
+    if (self->tbl == NULL)
+        return;
+    
+    /* rc = */ TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+}
+
+/* MARK: SequenceRecord Object */
+static
+rc_t SequenceRecordResize(SequenceRecord *self,
+                          KDataBuffer *storage,
+                          unsigned numreads,
+                          unsigned seqLen)
+{
+    size_t sz;
+    rc_t rc;
+    
+    sz = seqLen * (sizeof(self->seq[0]) + sizeof(self->qual[0])) +
+         numreads * (sizeof(self->ti) +
+                     sizeof(self->readStart[0]) +
+                     sizeof(self->readLen[0]) +
+                     sizeof(self->aligned[0]) + 
+                     sizeof(self->orientation[0]) +
+                     sizeof(self->alignmentCount[0]) +
+                     sizeof(self->cskey[0])
+                     );
+    storage->elem_bits = 8;
+    rc = KDataBufferResize(storage, sz);
+    if (rc)
+        return rc;
+    self->numreads = numreads;
+    
+    self->ti = (uint64_t *)storage->base;
+    self->readStart = (uint32_t *)&self->ti[numreads];
+    self->readLen = (uint32_t *)&self->readStart[numreads];
+    self->aligned = (bool *)&self->readLen[numreads];
+    self->orientation = (uint8_t *)&self->aligned[numreads];
+    self->is_bad = (uint8_t *)&self->orientation[numreads];
+    self->alignmentCount = (uint8_t *)&self->is_bad[numreads];
+    self->cskey = (char *)&self->alignmentCount[numreads];
+    self->seq = (char *)&self->cskey[numreads];
+    self->qual = (uint8_t *)&self->seq[seqLen];
+
+    self->spotGroup = NULL;
+    self->spotGroupLen = 0;
+    self->spotName = NULL;
+    self->spotNameLen = 0;
+    
+    return 0;
+}
+
+rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[])
+{
+    unsigned i;
+    unsigned seqlen = 0;
+    rc_t rc;
+    
+    for (i = 0; i != numreads; ++i) {
+        seqlen += readLen[i];
+    }
+    rc = SequenceRecordResize(self, &self->storage, numreads, seqlen);
+    if (rc)
+        return rc;
+    memset(self->storage.base, 0, KDataBufferBytes(&self->storage));
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        self->readLen[i] = readLen[i];
+        self->readStart[i] = seqlen;
+        seqlen += readLen[i];
+    }
+    self->numreads = numreads;
+    memset(self->cskey, 'T', numreads);
+    return 0;
+}
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other
+                          )
+{
+    /* save the locations of the original data */
+    unsigned const seq = (uint8_t const *)self->seq - (uint8_t const *)self->storage.base;
+    unsigned const qual = (uint8_t const *)self->qual - (uint8_t const *)self->storage.base;
+    unsigned const cskey = (uint8_t const *)self->cskey - (uint8_t const *)self->storage.base;
+    unsigned const alignmentCount = (uint8_t const *)self->alignmentCount - (uint8_t const *)self->storage.base;
+    unsigned const is_bad = (uint8_t const *)self->is_bad - (uint8_t const *)self->storage.base;
+    unsigned const orientation = (uint8_t const *)self->orientation - (uint8_t const *)self->storage.base;
+    unsigned const aligned = (uint8_t const *)self->aligned - (uint8_t const *)self->storage.base;
+    unsigned const ti = (uint8_t const *)self->ti - (uint8_t const *)self->storage.base;
+    unsigned const readLen = (uint8_t const *)self->readLen - (uint8_t const *)self->storage.base;
+/*    unsigned const readStart = (uint8_t const *)self->readStart - (uint8_t const *)self->storage.base;*/
+
+    rc_t rc;
+    unsigned seqlen;
+    unsigned otherSeqlen;
+    unsigned i;
+    unsigned numreads = self->numreads;
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        seqlen += self->readLen[i];
+    }
+    for (otherSeqlen = 0, i = 0; i != other->numreads; ++i) {
+        otherSeqlen += other->readLen[i];
+    }
+
+    rc = SequenceRecordResize(self, &self->storage, self->numreads + other->numreads, seqlen + otherSeqlen);
+    if (rc)
+        return rc;
+    /* this needs to be reverse order from assignment in Resize function
+     * these regions can overlap
+     */
+    memmove(self->qual,             &((uint8_t const *)self->storage.base)[qual],              seqlen);
+    memmove(self->seq,              &((uint8_t const *)self->storage.base)[seq],               seqlen);
+    memmove(self->cskey,            &((uint8_t const *)self->storage.base)[cskey],             numreads * sizeof(self->cskey[0]));
+    memmove(self->alignmentCount,   &((uint8_t const *)self->storage.base)[alignmentCount],    numreads * sizeof(self->alignmentCount[0]));
+    memmove(self->is_bad,           &((uint8_t const *)self->storage.base)[is_bad],            numreads * sizeof(self->is_bad[0]));
+    memmove(self->orientation,      &((uint8_t const *)self->storage.base)[orientation],       numreads * sizeof(self->orientation[0]));
+    memmove(self->aligned,          &((uint8_t const *)self->storage.base)[aligned],           numreads * sizeof(self->aligned[0]));
+    memmove(self->readLen,          &((uint8_t const *)self->storage.base)[readLen],           numreads * sizeof(self->readLen[0]));
+    memmove(self->ti,               &((uint8_t const *)self->storage.base)[ti],                numreads * sizeof(self->ti[0]));
+    
+    memmove(&self->ti[numreads],             other->ti,              other->numreads * sizeof(self->ti[0]));
+    memmove(&self->readLen[numreads],        other->readLen,         other->numreads * sizeof(self->readLen[0]));
+    memmove(&self->aligned[numreads],        other->aligned,         other->numreads * sizeof(self->aligned[0]));
+    memmove(&self->orientation[numreads],    other->orientation,     other->numreads * sizeof(self->orientation[0]));
+    memmove(&self->is_bad[numreads],         other->is_bad,          other->numreads * sizeof(self->is_bad[0]));
+    memmove(&self->alignmentCount[numreads], other->alignmentCount,  other->numreads * sizeof(self->alignmentCount[0]));
+    memmove(&self->cskey[numreads],          other->cskey,           other->numreads * sizeof(self->cskey[0]));
+    memmove(&self->seq[seqlen],              other->seq,             otherSeqlen);
+    memmove(&self->qual[seqlen],             other->qual,            otherSeqlen);
+    
+    for (i = 0, seqlen = 0; i != self->numreads; ++i) {
+        self->readStart[i] = seqlen;
+        seqlen += self->readLen[i];
+    }
+    
+    return 0;
+}
diff --git a/tools/fastq-loader/sequence-writer.h b/tools/fastq-loader/sequence-writer.h
new file mode 100644
index 0000000..510a361
--- /dev/null
+++ b/tools/fastq-loader/sequence-writer.h
@@ -0,0 +1,93 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <insdc/sra.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+    char *seq;
+    uint8_t *qual;
+    uint32_t *readStart;
+    uint32_t *readLen;
+    uint8_t *orientation;
+    uint8_t *is_bad;
+    uint8_t *alignmentCount;
+    char *spotGroup;
+    bool *aligned;
+    char *cskey;
+    uint64_t *ti;
+    char *spotName;
+    uint64_t keyId;
+    unsigned spotGroupLen;
+    unsigned spotNameLen;
+    KDataBuffer storage;
+    uint8_t numreads;
+} SequenceRecord;
+
+
+rc_t SequenceRecordInit(SequenceRecord *self,
+                        unsigned numreads, unsigned readLen[]);
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other);
+
+typedef struct SequenceWriter {
+    VDatabase *db;
+    struct TableWriterSeq const *tbl;
+} SequenceWriter;
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(SequenceWriter *self, SequenceRecord const *rec,
+                         bool color, bool isDup, INSDC_SRA_platform_id platform,
+                         bool keepMismatchQual,
+                         bool no_real_output,
+                         bool hasTI,
+                         char const *QualQuantizer
+                         );
+
+rc_t SequenceDoneWriting(SequenceWriter *self);
+rc_t SequenceReadKey(const SequenceWriter *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t row, unsigned nreads,
+                             const int64_t primeId[/* nreads */],
+                             const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(SequenceWriter *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/tools/fuse/Makefile b/tools/fuse/Makefile
new file mode 100644
index 0000000..b650ee0
--- /dev/null
+++ b/tools/fuse/Makefile
@@ -0,0 +1,204 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/fuse
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	remote-fuser \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (1,$(HAVE_XML2))
+
+ifeq (1,$(HAVE_FUSE))
+
+ifeq (64,$(BITS))
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built: it requires a 64-bit system."
+
+endif
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built: " \
+		"it requires 'fuse' library and its development headers."
+
+endif
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built: " \
+	       "It requires our internal library 'libkxml'"             \
+	       "which requires 'libxml2' and its development headers."
+
+endif
+
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-fuser
+#
+SRA_FUSER_SRC = \
+        zlib-simple \
+        log \
+        node \
+        tar-list \
+        file \
+        tar-file \
+        tar-node \
+        directory \
+        formats \
+        accessor \
+        kfile-accessor \
+        xml \
+        text-file \
+        sra-list \
+        sra-directory \
+        sra-node \
+        sra-fastq \
+        sra-sff \
+        sra-fuser-sys \
+        sra-fuser
+
+SRA_FUSER_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_FUSER_SRC))
+
+LIBXML = -lxml2
+ifdef NCBI
+CFLAGS += -DSRAFUSER_LOGLOCALTIME
+ifeq (linux,$(OS))
+   LIBXML = -X$(LIBXML_LPATH) -lxml2-static
+endif
+ifeq (sun,$(OS))
+   LIBXML = -X$(LIBXML_LPATH) -lxml2-static
+endif
+endif
+
+SRA_FUSER_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lfuse \
+	-lrt
+
+$(BINDIR)/sra-fuser: $(SRA_FUSER_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRA_FUSER_LIB)
+
+#-------------------------------------------------------------------------------
+# remote-fuser
+#
+REMOTE_FUSER_SRC = \
+        log \
+        node \
+        accessor \
+        kfile-accessor \
+        remote-xml \
+        remote-cache \
+        remote-link \
+        remote-file \
+        remote-directory \
+        remote-fuser-sys \
+        remote-fuser
+
+REMOTE_FUSER_OBJ = \
+	$(addsuffix .$(OBJX),$(REMOTE_FUSER_SRC))
+
+LIBXML = -lxml2
+ifdef NCBI
+CFLAGS += -DSRAFUSER_LOGLOCALTIME
+ifeq (linux,$(OS))
+   LIBXML = -X$(LIBXML_LPATH) -lxml2-static
+endif
+ifeq (sun,$(OS))
+   LIBXML = -X$(LIBXML_LPATH) -lxml2-static
+endif
+endif
+
+REMOTE_FUSER_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lfuse \
+	-lrt
+
+$(BINDIR)/remote-fuser: $(REMOTE_FUSER_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(REMOTE_FUSER_LIB)
+
+#-------------------------------------------------------------------------------
+# sra-fuser
+#
+SRA_MAKEIDX_SRC = \
+    zlib-simple \
+	sra-makeidx
+
+SRA_MAKEIDX_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_MAKEIDX_SRC))
+
+SRA_MAKEIDX_LIB = \
+	-lkapp \
+	-stk-version \
+	-lncbi-wvdb \
+	-ssrareader \
+
+$(BINDIR)/sra-makeidx: $(SRA_MAKEIDX_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRA_MAKEIDX_LIB)
+
diff --git a/tools/fuse/accessor.c b/tools/fuse/accessor.c
new file mode 100644
index 0000000..e91ef9a
--- /dev/null
+++ b/tools/fuse/accessor.c
@@ -0,0 +1,134 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <string.h>
+
+#include "accessor.h"
+#include "log.h"
+
+/* used to detect correct object pointers */
+const uint32_t SAccessor_MAGIC = 0xFACE5550;
+
+struct SAccessor {
+    uint32_t magic;
+    char* name;
+    AccessorRead* Read;
+    AccessorRelease* Release;
+};
+
+rc_t SAccessor_Make(const SAccessor** cself, size_t size, const char* name, AccessorRead* read, AccessorRelease* release)
+{
+    rc_t rc = 0;
+    SAccessor* self = NULL;
+
+    if( cself == NULL ) {
+        rc = RC(rcExe, rcFile, rcConstructing, rcSelf, rcNull);
+    } else {
+        CALLOC(self, 1, sizeof(*self) + size);
+        if( self == NULL ) {
+            rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            if( (rc = StrDup(name, &self->name)) == 0 ) {
+                self->magic = SAccessor_MAGIC;
+                self->Read = read;
+                self->Release = release;
+                /* shift pointer to after hidden structure */
+                DEBUG_MSG(8, ("%s: %s\n", __func__, self->name));
+                self++;
+            } else {
+                FREE(self);
+            }
+        }
+        *cself = rc ? NULL : self;
+    }
+    return rc;
+}
+
+static
+rc_t SAccessor_ResolveSelf(const SAccessor* self, enum RCContext ctx, SAccessor** resolved)
+{
+    if( self == NULL || resolved == NULL ) {
+        return RC(rcSRA, rcFile, ctx, rcSelf, rcNull);
+    }
+    *resolved = (SAccessor*)--self;
+    /* just to validate that it is full instance */
+    if( (*resolved)->magic != SAccessor_MAGIC ) {
+        *resolved = NULL;
+        return RC(rcSRA, rcFile, ctx, rcSelf, rcCorrupt);
+    }
+    return 0;
+}
+
+
+rc_t SAccessor_Read(const SAccessor* cself, char* buf, size_t size, off_t offset, size_t* num_read)
+{
+    rc_t rc = 0;
+    SAccessor* self = NULL;
+
+    if( buf == NULL || num_read == NULL ) {
+        return RC(rcExe, rcFile, rcReading, rcParam, rcNull);
+    } else if( (rc = SAccessor_ResolveSelf(cself, rcEvaluating, &self)) == 0 ) {
+        DEBUG_MSG(8, ("%s: %s\n", __func__, self->name));
+        if( self->Read ) {
+            *num_read = 0;
+            rc = self->Read(cself, buf, size, offset, num_read);
+        } else {
+            rc = RC(rcExe, rcFile, rcReading, rcInterface, rcUnsupported);
+        }
+    }
+    return rc;
+}
+
+rc_t SAccessor_GetName(const SAccessor* cself, const char** name)
+{
+    rc_t rc = 0;
+    SAccessor* self = NULL;
+
+    if( name == NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcParam, rcInvalid);
+    } else if( (rc = SAccessor_ResolveSelf(cself, rcEvaluating, &self)) == 0 ) {
+        *name = self->name;
+    }
+    return rc;
+}
+
+rc_t SAccessor_Release(const SAccessor* cself)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        SAccessor* self = NULL;
+
+        if( (rc = SAccessor_ResolveSelf(cself, rcReleasing, &self)) == 0 ) {
+            if( self->Release ) {
+                rc = self->Release(cself);
+            }
+            DEBUG_MSG(8, ("%s: %s\n", __func__, self->name));
+            FREE(self->name);
+            FREE(self);
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/accessor.h b/tools/fuse/accessor.h
new file mode 100644
index 0000000..c872216
--- /dev/null
+++ b/tools/fuse/accessor.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_accessor_
+#define _h_sra_fuse_accessor_
+
+#include <unistd.h>
+
+#include <klib/rc.h>
+
+typedef struct SAccessor SAccessor;
+
+typedef rc_t (AccessorRead)(const SAccessor* cself, char* buf, size_t size, off_t offset, size_t* num_read);
+typedef rc_t (AccessorRelease)(const SAccessor* cself);
+
+rc_t SAccessor_Make(const SAccessor** cself, size_t size, const char* name, AccessorRead* read, AccessorRelease* release);
+
+rc_t SAccessor_GetName(const SAccessor* cself, const char** name);
+
+rc_t SAccessor_Read(const SAccessor* cself, char* buf, size_t size, off_t offset, size_t* num_read);
+
+rc_t SAccessor_Release(const SAccessor* cself);
+
+#endif /* _h_sra_fuse_accessor_ */
diff --git a/tools/fuse/debug.h b/tools/fuse/debug.h
new file mode 100644
index 0000000..ba0375d
--- /dev/null
+++ b/tools/fuse/debug.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _services_sra_fuser_debug_h_
+#define _services_sra_fuser_debug_h_
+
+#include <klib/debug.h>
+
+#if _DEBUGGING
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+#define DEBUG_LINE(flag,fmt,...) DEBUG_MSG(flag, ("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+
+#define MALLOC(ptr, size) ptr = malloc(size); DEBUG_LINE(10, "%p=malloc(%lu)", ptr, size)
+#define CALLOC(ptr, qty, size) ptr = calloc(qty, size); DEBUG_LINE(10, "%p=calloc(%lu)", ptr, qty * size)
+#define REALLOC(ptr, src, size) ptr = realloc(src, size); DEBUG_LINE(10, "%p=realloc(%p, %lu)", ptr, src, size)
+#define FREE(ptr) free(ptr); if(ptr){DEBUG_LINE(10, "0=free(%p)", ptr);}
+
+#else
+
+#define DEBUG_MSG(flag,msg) ((void)0)
+#define DEBUG_LINE(flag,fmt,...) ((void)0)
+
+#define MALLOC(ptr, size) ptr = malloc(size)
+#define CALLOC(ptr, qty, size) ptr = calloc(qty, size)
+#define REALLOC(ptr, src, size) ptr = realloc(src, size)
+#define FREE(ptr) free(ptr)
+
+#endif
+
+#endif /* _services_sra_fuser_debug_h_ */
diff --git a/tools/fuse/directory.c b/tools/fuse/directory.c
new file mode 100644
index 0000000..fb16c8b
--- /dev/null
+++ b/tools/fuse/directory.c
@@ -0,0 +1,566 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <klib/container.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kproc/lock.h>
+
+typedef struct DirectoryNode DirectoryNode;
+#define FSNODE_IMPL DirectoryNode
+
+#include "log.h"
+#include "xml.h"
+#include "directory.h"
+#include "tar-node.h"
+#include "kfile-accessor.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <time.h>
+
+typedef struct DirNodeChild_struct {
+    BSTNode node;
+    const char* full_name; /* full path to detected file */
+    const char* name; /* file name only within full_name above */
+    const FSNode* child;
+} DirNodeChild;
+
+static
+int64_t DirNodeChild_Sort(const BSTNode *item, const BSTNode *node)
+{
+    return strcmp(((const DirNodeChild*)item)->child->name, ((const DirNodeChild*)node)->child->name);
+}
+
+static
+int64_t DirNodeChild_FindByName(const void *item, const BSTNode *node)
+{
+    return strcmp((const char*)item, ((const DirNodeChild*)node)->child->name);
+}
+
+static
+int64_t DirNodeChild_FindBySrc(const void *item, const BSTNode *node)
+{
+    return strcmp((const char*)item, ((const DirNodeChild*)node)->name);
+}
+
+static
+void DirNodeChild_Whack(BSTNode *node, void *data)
+{
+    DirNodeChild* n = (DirNodeChild*)node;
+
+    if( n != NULL ) {
+        DEBUG_LINE(8, "Releasing auto TAR %s", n->child->name);
+        FSNode_Release(n->child);
+        FREE(n);
+    }
+}
+
+static
+void DirNodeChild_Touch( BSTNode *node, void *data )
+{
+    DirNodeChild* n = (DirNodeChild*)node;
+    BSTree* t = (BSTree*)data;
+    if( FSNode_Touch(n->child) != 0 ) {
+        BSTreeUnlink(t, node);
+        DirNodeChild_Whack(node, NULL);
+    }
+}
+
+struct DirectoryNode {
+    FSNode node;
+    char* path;
+    KTime_t mtime;
+    KRWLock* lock;
+    KTime_t timestamp;
+    /* list of physical files and dirs in 'path' minus those in children list */
+    KNamelist* ls; 
+    BSTree children;
+};
+
+struct DirNodeChild_List_Data {
+    rc_t rc;
+    const DirectoryNode* cself;
+    FSNode_Dir_Visit func;
+    void* data;
+};
+
+static
+bool DirNodeChild_List( BSTNode *node, void *data )
+{
+    DirNodeChild* n = (DirNodeChild*)node;
+    struct DirNodeChild_List_Data* d = (struct DirNodeChild_List_Data*)data;
+    const FSNode* ch;
+    bool hidden = true;
+
+    if( ((d->rc = FSNode_FindChild(&d->cself->node, n->child->name, strlen(n->child->name), &ch, &hidden)) == 0 && hidden) ||
+         (GetRCObject(d->rc) == rcName && GetRCState(d->rc) == rcNotFound) ) {
+        d->rc = d->func(n->child->name, d->data);
+    }
+    return d->rc != 0;
+}
+
+static
+rc_t DirectoryNode_Lock(const DirectoryNode* cself, bool exclusive)
+{
+    DEBUG_LINE(8, "Lock DirectoryNode %s %s", cself->path, exclusive ? "write" : "read");
+    return exclusive ? KRWLockAcquireExcl(((DirectoryNode*)cself)->lock) : KRWLockAcquireShared(((DirectoryNode*)cself)->lock);
+}
+
+static
+rc_t DirectoryNode_Unlock(const DirectoryNode* cself)
+{
+    DEBUG_LINE(8, "Unlocking DirectoryNode %s", cself->path);
+    return KRWLockUnlock(((DirectoryNode*)cself)->lock);
+}
+
+static
+rc_t DirectoryNode_IsChild(const DirectoryNode* cself, const char* subpath, const FSNode** node,
+                           int64_t (*finder)(const void *item, const BSTNode *node))
+{
+    DirNodeChild* n = (DirNodeChild*)BSTreeFind(&cself->children, subpath, finder);
+    if( n != NULL ) {
+        *node = n->child;
+    } else {
+        *node = NULL;
+        return RC(rcExe, rcFile, rcAccessing, rcName, rcNotFound);
+    }
+    return 0;
+}
+
+static
+rc_t CC DirectoryNode_AddTar( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    rc_t rc = 0;
+
+    if( (type & ~kptAlias) == kptFile && name != NULL ) {
+        size_t lnm = strlen(name);
+
+        if( lnm > 8 && strncmp(&name[lnm - 8], ".tar.xml", 8) == 0 ) {
+            DirectoryNode* self = (DirectoryNode*)data;
+            DirNodeChild* n = (DirNodeChild*)BSTreeFind(&self->children, name, DirNodeChild_FindBySrc);
+            if( n == NULL ) {
+                char resolved[4096];
+                if( (rc = KDirectoryResolvePath(dir, true, resolved, sizeof(resolved), "%s/%s", self->path, name)) == 0 ) {
+                    size_t lrs = strlen(resolved);
+                    CALLOC(n, 1, sizeof(*n) + lrs + 1);
+                    if( n == NULL ) {
+                        rc = RC(rcExe, rcArc, rcInserting, rcMemory, rcExhausted);
+                    } else {
+                        char* x = (char*)&n[1];
+                        memmove(x, resolved, lrs);
+                        x[lrs] = '\0';
+                        n->full_name = x;
+                        n->name = &n->full_name[lrs - lnm];
+                        if( (rc = TarNode_MakeAuto(&n->child, dir, self->path, name, n->full_name)) != 0 ||
+                            (rc = BSTreeInsert(&self->children, &n->node, DirNodeChild_Sort)) != 0 ) {
+                            DirNodeChild_Whack(&n->node, NULL);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static
+bool DirectoryNode_LS( const KDirectory *dir, const char *name, void *data )
+{
+    size_t lnm = name ? strlen(name) : 0;
+    bool ret;
+
+    if( lnm > 8 && strncmp(&name[lnm - 8], ".tar.xml", 8) == 0 ) {
+        DirectoryNode* self = (DirectoryNode*)data;
+        ret = BSTreeFind(&self->children, name, DirNodeChild_FindBySrc) == NULL;
+    } else if( lnm > 4 && strncmp(&name[lnm - 4], ".tar", 4) == 0 ) {
+        DirectoryNode* self = (DirectoryNode*)data;
+        const FSNode* child;
+        /* virtual .tar file hides actual .tar file with same name */
+        ret = DirectoryNode_IsChild(self, name, &child, DirNodeChild_FindByName) != 0;
+    } else {
+        ret = true;
+    }
+    return ret;
+}
+
+static
+rc_t DirectoryNode_Touch(const DirectoryNode* cself)
+{
+    rc_t rc = 0;
+
+    if( cself->path != NULL ) {
+        if( (rc = DirectoryNode_Lock(cself, true)) == 0 ) {
+            KDirectory* dir;
+            /* drop disappeared items, update existing */
+            BSTreeForEach(&cself->children, false, DirNodeChild_Touch, (void*)&cself->children);
+            if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                KTime_t dt = 0;
+                if( (rc = KDirectoryDate(dir, &dt, "%s", cself->path)) == 0 && cself->timestamp != dt ) {
+                    DirectoryNode* self = (DirectoryNode*)cself;
+                    /* re-read directory */
+                    ReleaseComplain(KNamelistRelease, self->ls);
+                    self->ls = NULL;
+                    if( (rc = KDirectoryVisit(dir, false, DirectoryNode_AddTar, self, "%s", self->path)) == 0 ) {
+                        rc = KDirectoryList(dir, &self->ls, DirectoryNode_LS, self, "%s", self->path);
+                    }
+                    self->timestamp = rc == 0 ? dt : 0;
+                }
+                ReleaseComplain(KDirectoryRelease, dir);
+            }
+            ReleaseComplain(DirectoryNode_Unlock, cself);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t DirectoryNode_Attr(const DirectoryNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    *type = kptDir;
+    if( cself->path != NULL ) {
+        KDirectory* dir = NULL;
+        const KDirectory* sub = NULL;
+
+        if( subpath != NULL && (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+            const FSNode* child = NULL;
+            if( (rc = DirectoryNode_IsChild(cself, subpath, &child, DirNodeChild_FindByName)) == 0 ) {
+                rc = FSNode_Attr(child, NULL, type, ts, file_sz, access, block_sz);
+            }
+            ReleaseComplain(DirectoryNode_Unlock, cself);
+            if( child != NULL ) {
+                return rc;
+            }
+        }
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 &&
+            (rc = KDirectoryOpenDirRead(dir, &sub, true, "%s", cself->path)) == 0 ) {
+            const char* path = subpath ? subpath : ".";
+            DEBUG_LINE(8, "Using full name %s/%s", cself->path, path);
+            if( (rc = KDirectoryDate(sub, ts, "%s", path)) == 0 ) {
+                *type = KDirectoryPathType(sub, "%s", path);
+                if( *type != kptBadPath && *type != kptNotFound ) {
+                    if( (rc = KDirectoryAccess(sub, access, "%s", path)) == 0 ) {
+                        if( *type & kptAlias ) {
+                            bool children;
+                            if( (rc = FSNode_HasChildren(&cself->node, &children)) == 0 ) {
+                                /* if it is pointer to an aliased directory and has no XML children than pass symlink on */
+                                if( children == false || subpath != NULL ) {
+                                    char r[4096];
+                                    if( (rc = KDirectoryResolveAlias(sub, true, r, sizeof(r), "%s", path)) == 0 ) {
+                                         DEBUG_LINE(8, "Symlink name %s", r);
+                                        *file_sz = strlen(r);
+                                    }
+                                } else {
+                                    /* otherwise remove alias bit */
+                                    *type = *type & ~kptAlias;
+                                }
+                            }
+                        } else if( *type == kptFile ) {
+                            rc = KDirectoryFileSize(sub, file_sz, "%s", path);
+                        }
+                    }
+                }
+            }
+        }
+        ReleaseComplain(KDirectoryRelease, sub);
+        ReleaseComplain(KDirectoryRelease, dir);
+    } else if( subpath != NULL ) {
+        rc = RC(rcExe, rcDirectory, rcEvaluating, rcDirEntry, rcNotFound);
+    }
+    if( subpath == NULL && cself->mtime != 0 ) {
+        *ts = cself->mtime;
+    }
+    return rc;
+}
+
+struct DirectoryNode_DirVisit_Data {
+    FSNode_Dir_Visit func;
+    void* data;
+};
+
+static
+rc_t CC DirectoryNode_DirVisit( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    struct DirectoryNode_DirVisit_Data* d = (struct DirectoryNode_DirVisit_Data*)data;
+    return d->func(name, d->data);
+}
+
+static
+rc_t DirectoryNode_Dir(const DirectoryNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL ) {
+        /* add XML tree children */
+        if( (rc = FSNode_ListChildren(&cself->node, func, data)) == 0 ) {
+            if( (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+                if( cself->ls != NULL ) {
+                    /* add ls result excluding XML children */
+                    uint32_t i = 0, count = 0;
+                    rc = KNamelistCount(cself->ls, &count);
+                    while(rc == 0 && i < count) {
+                        const char* nm = NULL;
+                        const FSNode* ch;
+                        bool hidden = true;
+                        if( (rc = KNamelistGet(cself->ls, i++, &nm)) == 0 &&
+                            (((rc = FSNode_FindChild(&cself->node, nm, strlen(nm), &ch, &hidden)) == 0 && hidden) ||
+                             (GetRCObject(rc) == rcName && GetRCState(rc) == rcNotFound)) ) {
+                            rc = func(nm, data);
+                        }
+                    }
+                }
+                if( rc == 0 ) {
+                    struct DirNodeChild_List_Data d;
+                    d.rc = 0;
+                    d.cself = cself;
+                    d.func = func;
+                    d.data = data;
+                    /* add detected child nodes excluding XML children */
+                    BSTreeDoUntil(&cself->children, false, DirNodeChild_List, &d);
+                    rc = d.rc;
+                }
+                ReleaseComplain(DirectoryNode_Unlock, cself);
+            }
+        }
+    } else {
+        KDirectory* dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            struct DirectoryNode_DirVisit_Data d;
+            d.func = func;
+            d.data = data;
+            DEBUG_LINE(8, "Listing kdir path %s/%s", cself->path, subpath);
+            rc = KDirectoryVisit(dir, false, DirectoryNode_DirVisit, &d, "%s/%s", cself->path, subpath);
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t DirectoryNode_Link(const DirectoryNode* cself, const char* subpath, char* buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+    if( cself->path == NULL ) {
+        rc = RC(rcExe, rcPath, rcAliasing, rcDirEntry, rcUnsupported);
+    } else {
+        KDirectory* dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            if( subpath == NULL ) {
+                DEBUG_LINE(8, "Resolving %s", cself->path);
+                rc = KDirectoryResolveAlias(dir, true, buf, buf_sz, "%s", cself->path);
+            } else {
+                DEBUG_LINE(8, "Resolving %s/%s", cself->path, subpath);
+                rc = KDirectoryResolveAlias(dir, true, buf, buf_sz, "%s/%s", cself->path, subpath);
+            }
+            DEBUG_LINE(8, "Resolved %s", rc == 0 ? buf : NULL);
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t DirectoryNode_Open(const DirectoryNode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        const char* nm = NULL;
+
+        if( (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+            const FSNode* child = NULL;
+            if( (rc = DirectoryNode_IsChild(cself, subpath, &child, DirNodeChild_FindByName)) == 0 ) {
+                rc = FSNode_Open(child, NULL, accessor);
+            }
+            ReleaseComplain(DirectoryNode_Unlock, cself);
+            if( child != NULL ) {
+                return rc;
+            }
+        }
+        if( (rc = FSNode_GetName(&cself->node, &nm)) == 0 ) {
+            KDirectory* dir = NULL;
+            if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                const KFile* kf = NULL;
+                if( (rc = KDirectoryOpenFileRead(dir, &kf, "%s/%s", cself->path, subpath)) == 0 ) {
+                    if( (rc = KFileAccessor_Make(accessor, nm, kf)) != 0 ) {
+                        ReleaseComplain(KFileRelease, kf);
+                    }
+                }
+                ReleaseComplain(KDirectoryRelease, dir);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t DirectoryNode_Release(DirectoryNode* self)
+{
+    rc_t rc = 0;
+    if( self != NULL ) {
+        BSTreeWhack(&self->children, DirNodeChild_Whack, NULL);
+        ReleaseComplain(KRWLockRelease, self->lock);
+        ReleaseComplain(KNamelistRelease, self->ls);
+        FREE(self->path);
+    }
+    return rc;
+}
+
+static FSNode_vtbl DirectoryNode_vtbl = {
+    sizeof(DirectoryNode),
+    NULL,
+    DirectoryNode_Touch,
+    DirectoryNode_Attr,
+    DirectoryNode_Dir,
+    DirectoryNode_Link,
+    DirectoryNode_Open,
+    DirectoryNode_Release
+};
+
+
+rc_t DirectoryNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path,
+                        KTime_t dflt_ktm, EXMLValidate validate)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || cself == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcConstructing, rcParam, rcNull);
+    } else {
+        char* path = NULL, *name = NULL, name_buf[4096];
+        KTime_t ktm = 0;
+        DirectoryNode* ff = NULL;
+
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &path, NULL)) == 0 ) {
+            if( path[0] == '\0' ) {
+                FREE(path);
+                path = NULL;
+            } else {
+                KDirectory* dir = NULL;
+                if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                    if( path[0] != '/' ) {
+                        char resolved[4096];
+                        if( (rc = KDirectoryResolvePath(dir, true, resolved, sizeof(resolved),
+                                                                  "%s%s", rel_path, path)) == 0 ) {
+                            DEBUG_LINE(8, "%s%s resolved to %s", rel_path, path, resolved);
+                            FREE(path);
+                            rc = StrDup(resolved, &path);
+                        }
+                    }
+                    if( rc == 0 && validate > eXML_NoCheck ) {
+                        uint32_t t = KDirectoryPathType(dir, "%s", path);
+                        if( t != kptDir && t != (kptDir | kptAlias) ) {
+                            if( validate > eXML_NoFail ) {
+                                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, t == kptNotFound ? rcNotFound : rcInvalid);
+                            } else {
+                                PLOGMSG(klogErr, (klogErr, "Directory path '$(p)' not found", "p=%s", path));
+                            }
+                        }
+                    }
+                    ReleaseComplain(KDirectoryRelease, dir);
+                }
+            }
+        } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+        }
+        if( rc != 0 ) {
+            strcpy(errmsg, "Directory/@path: '");
+            strcat(errmsg, path ? path : "(null)");
+            strcat(errmsg, "'");
+        }
+        if( rc == 0 ) {
+            size_t sz;
+            rc = KXMLNodeReadAttrCString(xml_node, "name", name_buf, sizeof(name_buf), &sz);
+            if( rc == 0 && name_buf[0] != '\0' ) {
+                name = name_buf;
+            } else if( (GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound)  ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "Directory/@name");
+            } else if( name == NULL ) {
+                if( path == NULL ) {
+                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                } else {
+                    name = strrchr(path, '/');
+                    name = name ? name + 1 : path;
+                }
+            }
+        }
+        if( rc == 0 && (rc = XML_ParseTimestamp(xml_node, "timestamp", &ktm, true)) != 0 ) {
+            strcpy(errmsg, "Directory/@timestamp");
+        }
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("path", attr_nm) == 0 || strcmp("name", attr_nm) == 0 || strcmp("timestamp", attr_nm) == 0 ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute Directory/@");
+                        strcat(errmsg, attr_nm);
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)&ff, name, &DirectoryNode_vtbl)) == 0 &&
+                (rc = KRWLockMake(&ff->lock)) == 0 ) {
+                ff->path = path;
+                ff->mtime = ktm != 0 ? ktm : (path ? 0 : dflt_ktm);
+                BSTreeInit(&ff->children);
+            } else {
+                strcpy(errmsg, "Directory '");
+                strcat(errmsg, name);
+                strcat(errmsg, "'");
+            }
+        }
+        if( rc == 0 ) {
+            *cself = &ff->node;
+        } else {
+            FREE(path);
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/directory.h b/tools/fuse/directory.h
new file mode 100644
index 0000000..9acc3c5
--- /dev/null
+++ b/tools/fuse/directory.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_directory_
+#define _h_sra_fuse_directory_
+
+#include "node.h"
+
+rc_t DirectoryNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path,
+                        KTime_t ts, EXMLValidate validate);
+
+#endif /* _h_sra_fuse_directory_ */
diff --git a/tools/fuse/dump-idx.c b/tools/fuse/dump-idx.c
new file mode 100644
index 0000000..e1a25db
--- /dev/null
+++ b/tools/fuse/dump-idx.c
@@ -0,0 +1,102 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+#include <kapp/main.h>
+#include <kapp/log.h>
+#include <klib/rc.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/index.h>
+
+#include <sra/sradb.h>
+
+rc_t KMain ( int argc, char *argv [] )
+{
+    rc_t rc = 0;
+    char const *table_dir = NULL;
+    char const *idx_name = NULL;
+    const KDBManager* kmgr = NULL;
+    const KTable* ktbl = NULL;
+    const KIndex* kidx = NULL;
+
+    if( argc < 3 ) {
+        rc = RC ( rcExe, rcArgv, rcParsing, rcPath, rcNull );
+        PLOGERR((klogErr, rc, "Usage:\n $(a) <path> <index-name>", PLOG_S(a), argv[0]));
+        return rc;
+    }
+
+    table_dir = argv[1];
+    idx_name = argv[2];
+
+    rc = KDBManagerMakeRead(&kmgr, NULL);
+    if( rc == 0 ) {
+        rc = KDBManagerOpenTableRead(kmgr, &ktbl, table_dir);
+        if( rc == 0 ) {
+            PLOGMSG((klogInfo, "Table $(p) index $(i)", PLOG_2(PLOG_S(p),PLOG_S(i)), table_dir, idx_name));
+            rc = KTableOpenIndexRead(ktbl, &kidx, idx_name);
+            if( rc == 0 ) {
+                uint64_t off1 = 0, off2 = 0, sz = 0, id_q = 0;
+                int64_t id = 0;
+                while(true) {
+                    rc = KIndexFindU64(kidx, off1, &off2, &sz, &id, &id_q);
+                    if( rc != 0 ) {
+                        break;
+                    }
+                    PLOGMSG((klogInfo, "$(i) index spot $(s) ($(q)) offset [$(f):$(t)]",
+                            PLOG_5(PLOG_S(i),PLOG_I64(s),PLOG_U64(q),PLOG_U64(f),PLOG_U64(t)), idx_name, id, id_q, off2, off2 + sz - 1));
+                    off1 = off2 + sz + 1;
+                    {{
+                        uint64_t f = off2, t = off2 + sz;
+                        while( f != t ) {
+                            uint64_t o, z;
+                            int64_t newid;
+                            if( (rc = KIndexFindU64(kidx, f, &o, &z, &newid, &id_q)) != 0 ) {
+                                PLOGERR((klogErr, rc, "sub $(f)", PLOG_U64(f), f));
+                                break;
+                            }
+                            if( id != newid ) {
+                                PLOGMSG((klogErr, "no match on offset $(f): $(i) <-> $(n)",
+                                    PLOG_3(PLOG_U64(f),PLOG_I64(i),PLOG_I64(n)), f, id, newid));
+                            }
+                            f++;
+                        }
+                    }}
+                }
+                KIndexRelease(kidx);
+            }
+            KTableRelease(ktbl);
+        }
+        KDBManagerRelease(kmgr);
+    }
+    LOGERR(rc == 0 ? klogInfo : klogErr, rc, "Done");
+    return rc;
+}
diff --git a/tools/fuse/file.c b/tools/fuse/file.c
new file mode 100644
index 0000000..a7548a5
--- /dev/null
+++ b/tools/fuse/file.c
@@ -0,0 +1,275 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <krypto/encfile.h>
+#include <krypto/key.h>
+
+typedef struct FileNode FileNode;
+#define FSNODE_IMPL FileNode
+
+#include "log.h"
+#include "xml.h"
+#include "file.h"
+#include "kfile-accessor.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+struct FileNode {
+    FSNode node;
+    char* path;
+    KTime_t mtime;
+    KKey key;
+};
+
+static
+rc_t FileNode_Attr(const FileNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+    KDirectory* dir = NULL;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    } else if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        *type = KDirectoryPathType(dir, "%s", cself->path);
+        DEBUG_LINE(8, "file type %x", *type);
+        if( cself->mtime != 0 ) {
+            *ts = cself->mtime;
+        } else if( (rc = KDirectoryDate(dir, ts, "%s", cself->path)) == 0 ) {
+            DEBUG_LINE(8, "file mtime %u", *ts);
+        }
+        if( rc == 0 && (rc = KDirectoryAccess(dir, access, "%s", cself->path)) == 0 ) {
+            DEBUG_LINE(8, "file access %x", *access);
+            if( *type & kptAlias ) {
+                char r[10240];
+                if( (rc = KDirectoryResolveAlias(dir, true, r, sizeof(r), "%s", cself->path)) == 0 ) {
+                    *file_sz = strlen(r);
+                }
+            } else if( *type == kptFile ) { 
+                rc = KDirectoryFileSize(dir, file_sz, "%s", cself->path);
+            }
+        }
+        ReleaseComplain(KDirectoryRelease, dir);
+    }
+    return rc;
+}
+
+static
+rc_t FileNode_Link(const FileNode* cself, const char* subpath, char* buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+    KDirectory* dir = NULL;
+
+    if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        rc = KDirectoryResolveAlias(dir, true, buf, buf_sz, "%s", cself->path);
+        ReleaseComplain(KDirectoryRelease, dir);
+    }
+    return rc;
+}
+
+static
+rc_t FileNode_Open(const FileNode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        KDirectory* dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            const KFile* kf = NULL;
+            const KFile* enc_kf = NULL;
+            const KFile* immediate = NULL;
+            if( (rc = KDirectoryOpenFileRead(dir, &kf, "%s", cself->path)) == 0 ) {
+                immediate = kf;
+                if( cself->key.type != kkeyNone ) {
+                    /* TODO: what is the correct way to release KFile objects */
+                    rc = KEncFileMakeRead (&enc_kf, kf, &cself->key);
+                    immediate = enc_kf;
+                }
+                if( rc == 0 ) {
+                    if( (rc = KFileAccessor_Make(accessor, cself->node.name, immediate)) != 0 ) {
+                        ReleaseComplain(KFileRelease, immediate);
+                    }
+                }
+                
+            }
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t FileNode_Release(FileNode* self)
+{
+    if( self != NULL ) {
+        FREE(self->path);
+    }
+    return 0;
+}
+
+static FSNode_vtbl FileNode_vtbl = {
+    sizeof(FileNode),
+    NULL,
+    NULL,
+    FileNode_Attr,
+    NULL,
+    FileNode_Link,
+    FileNode_Open,
+    FileNode_Release
+};
+
+rc_t FileNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path, EXMLValidate validate)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || cself == NULL || errmsg == NULL || rel_path == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        char* path = NULL, *name = NULL, name_buf[4096], password[4096];
+        KTime_t ktm = 0;
+        FileNode* ff = NULL;
+        size_t password_sz = 0;
+
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &path, NULL)) == 0 ) {
+            if( path[0] == '\0' ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            } else {
+                KDirectory* dir = NULL;
+                if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                    if( path[0] != '/' ) {
+                        char resolved[4096];
+                        if( (rc = KDirectoryResolvePath(dir, true, resolved, sizeof(resolved),
+                                                                  "%s%s", rel_path, path)) == 0 ) {
+                            DEBUG_LINE(8, "%s%s resolved to %s", rel_path, path, resolved);
+                            FREE(path);
+                            rc = StrDup(resolved, &path);
+                        }
+                    }
+                    if( rc == 0 && validate > eXML_NoCheck ) {
+                        uint32_t t = KDirectoryPathType(dir, "%s", path);
+                        if( (t != kptFile && t != (kptFile | kptAlias)) &&
+                            (t != kptCharDev && t != (kptCharDev | kptAlias)) &&
+                            (t != kptBlockDev && t != (kptBlockDev | kptAlias)) &&
+                            (t != kptFIFO && t != (kptFIFO | kptAlias))  ) {
+                            if( validate > eXML_NoFail ) {
+                                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, t == kptNotFound ? rcNotFound : rcInvalid);
+                            } else {
+                                PLOGMSG(klogErr, (klogErr, "File path '$(p)' not found", "p=%s", path));
+                            }
+                        }
+                    }
+                    ReleaseComplain(KDirectoryRelease, dir);
+                }
+            }
+        }
+        if( rc != 0 ) {
+            strcpy(errmsg, "File/@path: '");
+            strcat(errmsg, path ? path : "(null)");
+            strcat(errmsg, "'");
+        }
+        if( rc == 0 ) {
+            rc = KXMLNodeReadAttrCString(xml_node, "name", name_buf, sizeof(name_buf), &password_sz);
+            if( rc == 0 && name_buf[0] != '\0' ) {
+                name = name_buf;
+            } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "File/@name");
+            } else if( name == NULL ) {
+                name = strrchr(path, '/');
+                name = name ? name + 1 : path;
+            }
+        }
+        if( rc == 0 && (rc = XML_ParseTimestamp(xml_node, "timestamp", &ktm, true)) != 0 ) {
+            strcpy(errmsg, "File/@timestamp");
+        }
+        if( rc == 0 ) {
+            rc = KXMLNodeReadAttrCString(xml_node, "password", password, sizeof(password), &password_sz);
+            if( rc == 0 || (GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+                rc = 0;
+                password_sz = 0;
+            } else {
+                strcpy(errmsg, "File/@password");
+            }
+        }
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("path", attr_nm) == 0 || strcmp("name", attr_nm) == 0 ||
+                            strcmp("timestamp", attr_nm) == 0 || strcmp("password", attr_nm) == 0 ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute File/@");
+                        strcat(errmsg, attr_nm);
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)&ff, name, &FileNode_vtbl)) == 0 ) {
+                ff->path = path;
+                ff->mtime = ktm;
+                if( password_sz > 0 ) {
+                    rc = KKeyInitRead(&ff->key, kkeyAES128, password, password_sz);
+                } else {
+                    memset(&ff->key, 0, sizeof ff->key);
+                    ff->key.type = kkeyNone;
+                }
+            } else {
+                strcpy(errmsg, "File '");
+                strcat(errmsg, name);
+                strcat(errmsg, "'");
+            }
+        }
+        if( rc == 0 ) {
+            *cself = &ff->node;
+        } else {
+            FREE(path);
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/file.h b/tools/fuse/file.h
new file mode 100644
index 0000000..9f9d2e4
--- /dev/null
+++ b/tools/fuse/file.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_file_
+#define _h_sra_fuse_file_
+
+#include "node.h"
+
+rc_t FileNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path, EXMLValidate validate);
+
+#endif /* _h_sra_fuse_file_ */
diff --git a/tools/fuse/formats.c b/tools/fuse/formats.c
new file mode 100644
index 0000000..cb3d8db
--- /dev/null
+++ b/tools/fuse/formats.c
@@ -0,0 +1,443 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <kdb/table.h>
+#include <kdb/index.h>
+
+#include <sra/sradb-priv.h>
+
+#include "log.h"
+#include "zlib-simple.h"
+#include "sra-list.h"
+#include "formats.h"
+#include "text-file.h"
+#include "sra-fastq.h"
+#include "sra-sff.h"
+
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+static
+rc_t FileOptions_MakeSuffix(FileOptions* self, const char* suffix, KTime_t ts)
+{
+    rc_t rc = 0;
+
+    if( suffix == NULL ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcParam, rcNull);
+    } else if( strlen(suffix) > FILEOPTIONS_BUFFER - 2 ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcBuffer, rcInsufficient);
+    } else {
+        strcpy(self->suffix, (isalnum(suffix[0]) && suffix[0] != '_') ? "." : "");
+        strcat(self->suffix, suffix);
+    }
+    return rc;
+}
+
+rc_t FileOptions_Make(FileOptions** self, uint32_t count)
+{
+    assert(self != NULL);
+    CALLOC(*self, count, sizeof(**self));
+    if( *self == NULL ) {
+        return RC(rcExe, rcTable, rcAllocating, rcMemory, rcExhausted);
+    }
+    return 0;
+}
+
+void FileOptions_Release(FileOptions* self)
+{
+    if( self != NULL ) {
+        FREE(self);
+    }
+}
+
+rc_t FileOptions_Clone(FileOptions** self, const FileOptions* src, uint32_t count)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || src == NULL ) {
+        rc = RC(rcExe, rcTable, rcCopying, rcParam, rcNull);
+    } else if( (rc = FileOptions_Make(self, count)) == 0 ) {
+        memmove(*self, src, sizeof(**self) * count);
+    }
+    return rc;
+}
+
+rc_t FileOptions_SRAArchive(FileOptions* self, const SRATable* tbl, KTime_t ts, bool lite)
+{
+    rc_t rc = 0;
+
+    if( tbl == NULL || self == NULL ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcParam, rcNull);
+    } else {
+        const KFile* sfa = NULL;
+        const char* ext;
+        if( (rc = SRATableMakeSingleFileArchive(tbl, &sfa, lite, &ext)) == 0 ) {
+            if( (rc = KFileSize(sfa, &self->file_sz)) == 0 &&
+                (rc = FileOptions_MakeSuffix(self, ext, ts)) == 0 ) {
+                self->type = lite ? eSRAFuseFmtArcLite : eSRAFuseFmtArc;
+                self->f.sra.lite = lite;
+            }
+            ReleaseComplain(KFileRelease, sfa);
+        }
+    }
+    return rc;
+}
+
+rc_t FileOptions_SRAArchiveInstant(FileOptions* self, FileOptions* fmd5,
+                                   const SRAMgr* mgr, const char* accession, const char* path,
+                                   const bool lite, KTime_t ts, uint64_t size, char md5[32])
+{
+    rc_t rc = 0;
+
+    if( self == NULL || mgr == NULL || accession == NULL || fmd5 == NULL ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcParam, rcNull);
+    } else {
+        const char* ext;
+
+        /* Only support non-lite files, if lite is needed fix this*/
+        /*if (lite)
+        {
+            PLOGERR(klogErr, (klogErr, 0, "lite flag is not supported, get rid of lite flag in xml, in FileOptions_SRAArchiveInstant for path or accession = $(a)", PLOG_S(a), path ? path : accession));
+            abort();
+        }
+        assert(!lite);*/
+        ext = lite ? ".lite.sra" : ".sra";
+
+        if( (rc = FileOptions_MakeSuffix(self, ext, ts)) == 0 ) {
+            self->file_sz = size;
+            self->type = lite ? eSRAFuseFmtArcLite : eSRAFuseFmtArc;
+            self->f.sra.lite = lite;
+            memmove(self->md5, md5, sizeof(self->md5));
+            if( (rc = FileOptions_AttachMD5(self, accession, fmd5)) == 0 ) {
+                rc = FileOptions_UpdateMD5(self, accession);
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t FileOptions_SRAArchiveUpdate(FileOptions* self, const char* name,
+                                  KTime_t ts, uint64_t size, char md5[32])
+{
+    rc_t rc = 0;
+
+    if( self == NULL || name == NULL ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcParam, rcNull);
+    } else {
+        self->file_sz = size;
+        if( md5 == NULL ) {
+            memset(self->md5, 0, sizeof(self->md5));
+        } else {
+            memmove(self->md5, md5, sizeof(self->md5));
+        }
+        rc = FileOptions_UpdateMD5(self, name);
+    }
+    return rc;
+}
+
+rc_t FileOptions_AttachMD5(FileOptions* self, const char* name, FileOptions* md5)
+{
+    rc_t rc = 0;
+    if( name == NULL || self == NULL || md5 == NULL ) {
+        rc = RC(rcExe, rcFormat, rcAttaching, rcParam, rcInvalid);
+    } else {
+        switch(self->type) {
+            case eSRAFuseFmtFastq:
+            case eSRAFuseFmtFastqGz:
+                md5->type = eSRAFuseFmtFastqMD5;
+                break;
+            case eSRAFuseFmtSFF:
+            case eSRAFuseFmtSFFGz:
+                md5->type = eSRAFuseFmtSFFMD5;
+                break;
+            case eSRAFuseFmtArc:
+                md5->type = eSRAFuseFmtArcMD5;
+                break;
+            case eSRAFuseFmtArcLite:
+                md5->type = eSRAFuseFmtArcLiteMD5;
+                break;
+            default:
+                rc = RC(rcExe, rcFormat, rcReading, rcType, rcUnexpected);
+        }
+        if( rc == 0 ) {
+            char buf[sizeof(md5->suffix)];
+
+            strcpy(buf, self->suffix);
+            strcat(buf, ".md5");
+            if( (rc = FileOptions_MakeSuffix(md5, buf, 0)) == 0 ) {
+                self->md5_file = md5 - self;
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t FileOptions_CalcMD5(FileOptions* self, const char* name, const SRAListNode* sra)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || sra == NULL || name == NULL ) {
+        rc = RC(rcExe, rcFormat, rcProcessing, rcParam, rcInvalid);
+    } else if( self->md5[0] == '\0' ) {
+        const KFile* kfile;
+        if( (rc = FileOptions_OpenFile(self, sra, &kfile)) == 0 ) {
+            MD5State md5;
+            uint64_t pos = 0;
+            uint8_t buffer[256 * 1024];
+            size_t num_read = 0, x;
+
+            MD5StateInit(&md5);
+            do {
+                if( (rc = KFileRead(kfile, pos, buffer, sizeof(buffer), &num_read)) == 0 ) {
+                    MD5StateAppend(&md5, buffer, num_read);
+                    pos += num_read;
+                }
+            } while(rc == 0 && num_read != 0);
+            if( rc == 0 ) {
+                uint8_t digest[16];
+                char smd5[sizeof(self->md5) + 1];
+                MD5StateFinish(&md5, digest);
+                for(pos = 0, x = 0; rc == 0 && pos < sizeof(digest); pos++) {
+                    rc = string_printf(&smd5[x], sizeof(smd5) - x, &num_read, "%02x", digest[pos]);
+                    x += num_read;
+                }
+                memmove(self->md5, smd5, sizeof(self->md5));
+                DEBUG_LINE(10, "%s %s %.*s", self->suffix, name, sizeof(self->md5), self->md5);
+            }
+            KFileRelease(kfile);
+        }
+    }
+    return rc;
+}
+
+rc_t FileOptions_UpdateMD5(FileOptions* self, const char* name)
+{
+    rc_t rc = 0;
+    
+    if( self == NULL || name == NULL ) {
+        rc = RC(rcExe, rcFormat, rcUpdating, rcParam, rcInvalid);
+    } else if( self->md5_file != 0 ) {
+        FileOptions* md5 = &self[self->md5_file];
+        if( self->md5[0] != '\0' ) {
+            size_t nw;
+            rc = string_printf(md5->f.txt64b, sizeof(md5->f.txt64b), &nw,
+                "%.*s *%s%s\n", sizeof(self->md5), self->md5, name, self->suffix);
+            md5->file_sz = rc ? 0 : nw;
+        } else {
+            md5->f.txt64b[0] = '\0';
+            md5->file_sz = 0;
+        }
+    }
+    return rc;
+}
+
+rc_t FileOptions_OpenFile(const FileOptions* cself, const struct SRAListNode* sra, const KFile** kfile)
+{
+    rc_t rc = 0;
+
+    assert(cself != NULL);
+    assert(kfile != NULL);
+    *kfile = NULL;
+    switch(cself->type) {
+        case eSRAFuseFmtArc:
+        case eSRAFuseFmtArcLite:
+            {{
+            const SRATable* tbl = NULL;
+            if( (rc = SRAListNode_TableOpen(sra, &tbl)) == 0 ) {
+                rc = SRATableMakeSingleFileArchive(tbl, kfile, cself->f.sra.lite, NULL);
+                ReleaseComplain(SRATableRelease, tbl);
+            }
+            }}
+            break;
+
+        case eSRAFuseFmtFastqMD5:
+        case eSRAFuseFmtSFFMD5:
+        case eSRAFuseFmtArcMD5:
+        case eSRAFuseFmtArcLiteMD5:
+            rc = TextFile_Open(kfile, cself);
+            break;
+
+        case eSRAFuseFmtFastq:
+        case eSRAFuseFmtFastqGz:
+            rc = SRAFastqFile_Open(kfile, sra, cself);
+            break;
+
+        case eSRAFuseFmtSFF:
+        case eSRAFuseFmtSFFGz:
+            rc = SRASFFFile_Open(kfile, sra, cself);
+            break;
+    }
+    return rc;
+}
+
+rc_t FileOptions_ParseMeta(FileOptions* self, const KMDataNode* file, const SRATable* tbl, KTime_t ts, const char* suffix)
+{
+    rc_t rc = 0;
+
+    if( file == NULL || self == NULL || suffix == NULL ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcParam, rcNull);
+    } else if( strlen(suffix) > FILEOPTIONS_BUFFER - 2 ) {
+        rc = RC(rcExe, rcFormat, rcReading, rcBuffer, rcInsufficient);
+    } else if( (rc = FileOptions_MakeSuffix(self, suffix, ts)) == 0 ) {
+        const KMDataNode* format = NULL;
+        if( (rc = KMDataNodeOpenNodeRead(file, &format, "Format")) == 0 ) {
+            char fmt_name[32];
+            size_t read = 0;
+            if( (rc = KMDataNodeReadCString(format, fmt_name, sizeof(fmt_name), &read)) == 0 ) {
+                const KMDataNode* tmp = NULL;
+                fmt_name[read] = '\0';
+                if( rc == 0 && (rc = KMDataNodeOpenNodeRead(file, &tmp, "Size")) == 0 ) {
+                    rc = KMDataNodeReadB64(tmp, &self->file_sz);
+                    ReleaseComplain(KMDataNodeRelease, tmp);
+                }
+                if( rc == 0 && (rc = KMDataNodeOpenNodeRead(file, &tmp, "Buffer")) == 0 ) {
+                    rc = KMDataNodeReadB32(tmp, &self->buffer_sz);
+                    ReleaseComplain(KMDataNodeRelease, tmp);
+                }
+                if( rc == 0 && (rc = KMDataNodeOpenNodeRead(file, &tmp, "Index")) == 0 ) {
+                    if( (rc = KMDataNodeReadCString(tmp, self->index, sizeof(self->index) - 1, &read)) == 0 && tbl != NULL ) {
+                        const KTable* ktbl = NULL;
+                        if( (rc = SRATableGetKTableRead(tbl, &ktbl)) == 0 ) {
+                            const KIndex* kidx = NULL;
+                            if( (rc = KTableOpenIndexRead(ktbl, &kidx, self->index)) == 0 ) {
+                                ReleaseComplain(KIndexRelease, kidx);
+                            }
+                            ReleaseComplain(KTableRelease, ktbl);
+                        }
+                    }
+                    ReleaseComplain(KMDataNodeRelease, tmp);
+                }
+                if( rc == 0 && KMDataNodeOpenNodeRead(file, &tmp, "md5") == 0 ) {
+                    rc = KMDataNodeReadCString(tmp, self->md5, sizeof(self->md5), &read);
+                    ReleaseComplain(KMDataNodeRelease, tmp);
+                }
+                if( rc == 0 ) {
+                    if(strcmp(fmt_name, "fastq") == 0 || strcmp(fmt_name, "fastq-gzip") == 0 ) {
+                        if( strcmp(fmt_name, "fastq-gzip") == 0 ) {
+                            self->type = eSRAFuseFmtFastqGz;
+                            self->f.fastq.gzip = true;
+                            if( (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/ZlibVersion")) == 0 ) {
+                                uint16_t v = 0;
+                                rc = KMDataNodeReadB16(tmp, &v);
+                                ReleaseComplain(KMDataNodeRelease, tmp);
+                                if( rc == 0 && v > ZLIB_VERNUM ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "ZLib version old: $(v) < $(mj).$(mn).$(b)",
+                                        PLOG_4(PLOG_S(v),PLOG_U8(mj),PLOG_U8(mn),PLOG_U8(b)),
+                                        ZLIB_VERSION, v & 0xF000, v & 0x0F00, v & 0x00FF));
+                                }
+                            }
+                        } else {
+                            self->type = eSRAFuseFmtFastq;
+                        }
+
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/accession")) == 0 ) {
+                            rc = KMDataNodeReadCString(tmp, self->f.fastq.accession, sizeof(self->f.fastq.accession) - 1, &read);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/minSpotId")) == 0 ) {
+                            rc = KMDataNodeReadB64(tmp, &self->f.fastq.minSpotId);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/maxSpotId")) == 0 ) {
+                            rc = KMDataNodeReadB64(tmp, &self->f.fastq.maxSpotId);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/colorSpace")) == 0 ) {
+                            rc = KMDataNodeReadB8(tmp, &self->f.fastq.colorSpace);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/colorSpaceKey")) == 0 ) {
+                            rc = KMDataNodeRead(tmp, 0, &self->f.fastq.colorSpaceKey, 1, &read, NULL);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/origFormat")) == 0 ) {
+                            rc = KMDataNodeReadB8(tmp, &self->f.fastq.origFormat);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/printLabel")) == 0 ) {
+                            rc = KMDataNodeReadB8(tmp, &self->f.fastq.printLabel);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/printReadId")) == 0 ) {
+                            rc = KMDataNodeReadB8(tmp, &self->f.fastq.printReadId);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/clipQuality")) == 0 ) {
+                            rc = KMDataNodeReadB8(tmp, &self->f.fastq.clipQuality);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/minReadLen")) == 0 ) {
+                            rc = KMDataNodeReadB32(tmp, &self->f.fastq.minReadLen);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/qualityOffset")) == 0 ) {
+                            rc = KMDataNodeReadB16(tmp, &self->f.fastq.qualityOffset);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                    } else if(strcmp(fmt_name, "SFF") == 0 || strcmp(fmt_name, "SFF-gzip") == 0 ) {
+                        if( strcmp(fmt_name, "SFF-gzip") == 0 ) {
+                            self->type = eSRAFuseFmtSFFGz;
+                            self->f.sff.gzip = true;
+                            if( (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/ZlibVersion")) == 0 ) {
+                                uint16_t v = 0;
+                                rc = KMDataNodeReadB16(tmp, &v);
+                                ReleaseComplain(KMDataNodeRelease, tmp);
+                                if( rc == 0 && v > ZLIB_VERNUM ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "ZLib version old: $(v) < $(mj).$(mn).$(b)",
+                                        PLOG_4(PLOG_S(v),PLOG_U8(mj),PLOG_U8(mn),PLOG_U8(b)),
+                                        ZLIB_VERSION, v & 0xF000, v & 0x0F00, v & 0x00FF));
+                                }
+                            }
+                        } else {
+                            self->type = eSRAFuseFmtSFF;
+                        }
+
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/accession")) == 0 ) {
+                            rc = KMDataNodeReadCString(tmp, self->f.sff.accession, sizeof(self->f.sff.accession) - 1, &read);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/minSpotId")) == 0 ) {
+                            rc = KMDataNodeReadB64(tmp, &self->f.sff.minSpotId);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                        if( rc == 0 && (rc = KMDataNodeOpenNodeRead(format, &tmp, "Options/maxSpotId")) == 0 ) {
+                            rc = KMDataNodeReadB64(tmp, &self->f.sff.maxSpotId);
+                            ReleaseComplain(KMDataNodeRelease, tmp);
+                        }
+                    } else {
+                        rc = RC(rcExe, rcFormat, rcReading, rcFormat, rcUnrecognized);
+                    }
+                }
+            }
+            ReleaseComplain(KMDataNodeRelease, format);
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/formats.h b/tools/fuse/formats.h
new file mode 100644
index 0000000..fd472f0
--- /dev/null
+++ b/tools/fuse/formats.h
@@ -0,0 +1,157 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sra_fuse_formats_
+#define _h_sra_fuse_formats_
+
+#include <kfs/file.h>
+#include <kdb/meta.h>
+#include <sra/sradb.h>
+
+#define FILEOPTIONS_BUFFER 32
+
+struct SRAListNode;
+
+/* DO NOT CHANGE SIZE OR ELEMENT ORDER OF THIS STRUCTURE
+   CACHE MAY FAIL! see SRAList_Init */
+typedef struct FileOptionsOld {
+    enum {
+        eOldSRAFuseFmtArc         = 0x0001,
+        eOldSRAFuseFmtArcLite     = 0x0002,
+        eOldSRAFuseFmtFastq       = 0x0004,
+        eOldSRAFuseFmtFastqGz     = 0x0008,
+        eOldSRAFuseFmtFastqMD5    = 0x0010,
+        eOldSRAFuseFmtSFF         = 0x0020,
+        eOldSRAFuseFmtSFFGz       = 0x0040,
+        eOldSRAFuseFmtSFFMD5      = 0x0080,
+        eOldSRAFuseFmtArcMD5      = 0x0100,
+        eOldSRAFuseFmtArcLiteMD5  = 0x0200
+    } type;
+    char suffix[FILEOPTIONS_BUFFER];
+    uint64_t file_sz;
+    KTime_t obsolete; /* not removed because cache is binary */
+    char index[FILEOPTIONS_BUFFER];
+    uint32_t buffer_sz;
+    
+    union {
+        char txt64b[FILEOPTIONS_BUFFER * 2];
+        struct {
+            bool lite;
+        } sra;
+        struct {
+            char accession[FILEOPTIONS_BUFFER];
+            uint64_t minSpotId;
+            uint64_t maxSpotId;
+            uint8_t colorSpace;
+            char colorSpaceKey;
+            uint8_t origFormat;
+            uint8_t printLabel;
+            uint8_t printReadId;
+            uint8_t clipQuality;
+            uint32_t minReadLen;
+            uint16_t qualityOffset;
+            bool gzip;
+        } fastq;
+        struct {
+            char accession[FILEOPTIONS_BUFFER];
+            uint64_t minSpotId;
+            uint64_t maxSpotId;
+            bool gzip;
+        } sff;
+    } f;
+} FileOptionsOld;
+
+typedef struct FileOptions {
+    enum {
+        eSRAFuseFmtArc         = 0x0001,
+        eSRAFuseFmtArcLite     = 0x0002,
+        eSRAFuseFmtFastq       = 0x0004,
+        eSRAFuseFmtFastqGz     = 0x0008,
+        eSRAFuseFmtFastqMD5    = 0x0010,
+        eSRAFuseFmtSFF         = 0x0020,
+        eSRAFuseFmtSFFGz       = 0x0040,
+        eSRAFuseFmtSFFMD5      = 0x0080,
+        eSRAFuseFmtArcMD5      = 0x0100,
+        eSRAFuseFmtArcLiteMD5  = 0x0200
+    } type;
+    char suffix[FILEOPTIONS_BUFFER];
+    uint64_t file_sz;
+    KTime_t obsolete; /* not removed because cache is binary */
+    char index[FILEOPTIONS_BUFFER];
+    uint32_t buffer_sz;
+    
+    union {
+        char txt64b[FILEOPTIONS_BUFFER * 2];
+        struct {
+            bool lite;
+        } sra;
+        struct {
+            char accession[FILEOPTIONS_BUFFER];
+            uint64_t minSpotId;
+            uint64_t maxSpotId;
+            uint8_t colorSpace;
+            char colorSpaceKey;
+            uint8_t origFormat;
+            uint8_t printLabel;
+            uint8_t printReadId;
+            uint8_t clipQuality;
+            uint32_t minReadLen;
+            uint16_t qualityOffset;
+            bool gzip;
+        } fastq;
+        struct {
+            char accession[FILEOPTIONS_BUFFER];
+            uint64_t minSpotId;
+            uint64_t maxSpotId;
+            bool gzip;
+        } sff;
+    } f;
+    /* added ver this struct 2: */
+    char md5[32];
+    int8_t md5_file; /* index relative to self with array of structs, 0 - no md5 */
+} FileOptions;
+
+rc_t FileOptions_Make(FileOptions** self, uint32_t count);
+void FileOptions_Release(FileOptions* self);
+
+rc_t FileOptions_Clone(FileOptions** self, const FileOptions* src, uint32_t count);
+
+rc_t FileOptions_SRAArchive(FileOptions* self, const SRATable* tbl, KTime_t ts, bool lite);
+rc_t FileOptions_SRAArchiveInstant(FileOptions* self, FileOptions* fmd5,
+                                   const SRAMgr* mgr, const char* accession, const char* path,
+                                   const bool lite, KTime_t ts, uint64_t size, char md5[32]);
+rc_t FileOptions_SRAArchiveUpdate(FileOptions* self, const char* name,
+                                  KTime_t ts, uint64_t size, char md5[32]);
+
+
+rc_t FileOptions_ParseMeta(FileOptions* self, const KMDataNode* file, const SRATable* tbl, KTime_t ts, const char* suffix);
+
+rc_t FileOptions_AttachMD5(FileOptions* self, const char* name, FileOptions* md5);
+rc_t FileOptions_CalcMD5(FileOptions* self, const char* name, const struct SRAListNode* sra);
+rc_t FileOptions_UpdateMD5(FileOptions* self, const char* name);
+
+rc_t FileOptions_OpenFile(const FileOptions* cself, const struct SRAListNode* sra, const KFile** kfile);
+
+#endif /* _h_sra_fuse_formats_ */
diff --git a/tools/fuse/kfile-accessor.c b/tools/fuse/kfile-accessor.c
new file mode 100644
index 0000000..6540198
--- /dev/null
+++ b/tools/fuse/kfile-accessor.c
@@ -0,0 +1,73 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kfs/file.h>
+
+#include "log.h"
+#include "kfile-accessor.h"
+
+typedef struct KFileAccessor_struct {
+    const KFile* file;
+} KFileAccessor;
+
+static
+rc_t KFileAccessor_Read(const SAccessor* cself, char* buf, size_t size, off_t offset, size_t* num_read)
+{
+    rc_t rc = 0;
+    KFileAccessor* self = (KFileAccessor*)cself;
+    size_t actual = 0;
+
+    do {
+        rc = KFileRead(self->file, offset + *num_read, &buf[*num_read], size - *num_read, &actual);
+        if( rc == 0 && actual == 0 ) {
+            /* EOF */
+            break;
+        }
+        *num_read += actual;
+    } while(rc == 0 && *num_read < size);
+    DEBUG_MSG(10, ("From %lu read %lu bytes\n", offset, *num_read));
+    return rc;
+}
+
+static
+rc_t KFileAccessor_Release(const SAccessor* cself)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        KFileAccessor* self = (KFileAccessor*)cself;
+        rc = KFileRelease(self->file);
+    }
+    return rc;
+}
+
+rc_t KFileAccessor_Make(const SAccessor** accessor, const char* name, const KFile* kfile)
+{
+    rc_t rc = 0;
+
+    if( (rc = SAccessor_Make(accessor, sizeof(KFileAccessor), name, KFileAccessor_Read, KFileAccessor_Release)) == 0 ) {
+        ((KFileAccessor*)(*accessor))->file = kfile;
+    }
+    return rc;
+}
diff --git a/tools/fuse/kfile-accessor.h b/tools/fuse/kfile-accessor.h
new file mode 100644
index 0000000..e021bbf
--- /dev/null
+++ b/tools/fuse/kfile-accessor.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_accessor_kfile_
+#define _h_sra_fuse_accessor_kfile_
+
+#include "accessor.h"
+
+rc_t KFileAccessor_Make(const SAccessor** accessor, const char* name, const KFile* kfile);
+
+#endif /* _h_sra_fuse_accessor_kfile_ */
diff --git a/tools/fuse/log.c b/tools/fuse/log.c
new file mode 100644
index 0000000..4431511
--- /dev/null
+++ b/tools/fuse/log.c
@@ -0,0 +1,197 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kfs/directory.h>
+#include <klib/time.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <kproc/thread.h>
+
+#include "log.h"
+#include "debug.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <pthread.h>
+
+static unsigned int g_sync = 0;
+static char* g_path = NULL;
+static int g_fd = -1;
+static KThread* g_thread = NULL;
+static bool g_foreground = false;
+
+rc_t StrDup(const char* src, char** dst)
+{
+    if( src == NULL || dst == NULL ) {
+        return RC(rcExe, rcString, rcCopying, rcParam, rcNull);
+    } else {
+        size_t sz = strlen(src);
+        MALLOC(*dst, sz + 1);
+        if( dst == NULL ) {
+            return RC(rcExe, rcString, rcCopying, rcMemory, rcExhausted);
+        }
+        memmove(*dst, src, sz);
+        (*dst)[sz] = '\0';
+    }
+    return 0;
+}
+
+static
+rc_t LogFileOpen(void)
+{
+    rc_t rc = 0;
+    int old_fd = -1;
+
+    if( g_path != NULL ) {
+        int new_fd = open(g_path, O_WRONLY | O_APPEND | O_CREAT, 0664);
+        if( new_fd < 0 ) {
+            rc = RC(rcExe, rcLog, rcOpening, rcNoObj, rcIncomplete);
+            PLOGERR(klogErr, (klogErr, rc, "'$(s)': $(e)", PLOG_2(PLOG_S(s),PLOG_S(e)), g_path, strerror(errno)));
+        } else {
+            old_fd = g_fd;
+            g_fd = new_fd;
+            
+            DEBUG_MSG(1, ("Log file opened '%s'\n", g_path));
+            
+            if( g_foreground ) {
+                if( dup2(g_fd, STDOUT_FILENO) < 0) {
+                    PLOGMSG(klogErr, (klogErr, "Cannot dup2(stdout) on '$(s)'", PLOG_S(s), g_path));
+                }
+                if( dup2(g_fd, STDERR_FILENO) < 0) {
+                    PLOGMSG(klogErr, (klogErr, "Cannot dup2(stderr) on '$(s)'", PLOG_S(s), g_path));
+                }
+            }
+        }
+    }
+    if( old_fd > -1 ) {
+        KSleepMs(2000);
+        close(old_fd);
+    }
+    return rc;
+}
+
+static
+rc_t LogThread( const KThread *self, void *data )
+{
+    PLOGMSG(klogInfo, (klogInfo, "Log rotation thread started with $(s) sec", PLOG_U32(s), g_sync));
+    while( g_sync > 0 ) {
+        KSleepMs(g_sync * 1000);
+        DEBUG_MSG(1, ("Log rotation thread checking %s\n", g_path));
+        if( g_sync < 1 || g_path == NULL ) {
+            break;
+        }
+        LogFileOpen();
+    }
+    LOGMSG(klogInfo, "Log rotation thread ended");
+    return 0;
+}
+
+static
+rc_t LogFileWrite(void *self, const char *buffer, size_t bufsize, size_t *num_writ)
+{
+    rc_t rc = 0;
+
+    *num_writ = bufsize;
+    if( g_fd > -1 ) {
+        char tid[64 * 1024];
+        if( bufsize <= (sizeof(tid) - (1 + 5 + 1 + 15 + 2)) ) {
+            int x = sprintf(tid, "[%i/%x] ", getpid(), (unsigned int)pthread_self());
+            memmove(&tid[x], buffer, bufsize);
+            bufsize += x;
+            if( pwrite(g_fd, tid, bufsize, SEEK_END) != bufsize ) {
+                rc = RC(rcExe, rcLog, rcWriting, rcNoObj, rcIncomplete);
+            }
+        } else {
+            if( pwrite(g_fd, buffer, bufsize, SEEK_END) != bufsize ) {
+                rc = RC(rcExe, rcLog, rcWriting, rcNoObj, rcIncomplete);
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t LogFile_Init(const char* path, unsigned int sync, bool foreground, int* log_fd)
+{
+    rc_t rc = 0;
+
+    if( path != NULL ) {
+        KDirectory *dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            char buf[4096];
+            if( (rc = KDirectoryResolvePath(dir, true, buf, 4096, "%s", path)) == 0 ) {
+                if( (rc = StrDup(buf, &g_path)) == 0 ) {
+                    if( (rc = KOutHandlerSet(LogFileWrite, NULL)) == 0 &&
+                        (rc = KDbgHandlerSet(LogFileWrite, NULL)) == 0 &&
+                        (rc = KLogHandlerSet(LogFileWrite, NULL)) == 0 &&
+                        (rc = KLogLibHandlerSet(LogFileWrite, NULL)) == 0 &&
+                        (rc = KStsHandlerSet(LogFileWrite, NULL)) == 0 &&
+                        (rc = KStsLibHandlerSet(LogFileWrite, NULL)) == 0 ) {
+                        g_sync = sync;
+                        g_foreground = foreground;
+                        if( g_sync > 0 ) {
+                            PLOGMSG(klogInfo, (klogInfo, "Log $(x) rotation set to $(s) seconds",
+                                     PLOG_2(PLOG_S(x),PLOG_U32(s)), g_path, g_sync));
+                        }
+                    }
+                }
+            }
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    rc = LogFileOpen();
+    if( rc == 0 && path == NULL && g_sync > 0 ) {
+        if( (rc = KThreadMake(&g_thread, LogThread, NULL)) != 0 ) {
+            LOGERR(klogErr, rc, "Log rotation thread");
+        } else {
+            DEBUG_MSG(1, ("Log rotation thread launched %s\n", g_sync));
+        }
+    }
+    if( log_fd != NULL && g_fd != -1) {
+        *log_fd = g_fd;
+    }
+    return rc;
+}
+
+void LogFile_Fini(void)
+{
+    g_sync = 0;
+    if( g_thread != NULL ) {
+        ReleaseComplain(KThreadCancel, g_thread);
+        ReleaseComplain(KThreadRelease, g_thread);
+    }
+    if( g_fd >= 0 ) {
+        close(g_fd);
+    }
+    FREE(g_path);
+    g_path = NULL;
+    g_fd = -1;
+    g_thread = NULL;
+}
diff --git a/tools/fuse/log.h b/tools/fuse/log.h
new file mode 100644
index 0000000..4a42e6d
--- /dev/null
+++ b/tools/fuse/log.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_services_sra_fuser_log_
+#define _h_services_sra_fuser_log_
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include "debug.h"
+
+#define ReleaseComplain(release, obj) \
+    {{ \
+       rc_t t_rc_ = release(obj); \
+       if( t_rc_ != 0 ) { \
+       PLOGERR(klogWarn, (klogWarn, t_rc_, "$(file):$(line):$(func): " #release "(" #obj ")", \
+                                    "file=%s,line=%u,func=%s", __FILE__, __LINE__, __func__)); \
+       } \
+    }}
+
+rc_t StrDup(const char* src, char** dst);
+
+/*
+ * Set path to logfile and optional (0) log reopen thread timeout
+ * if path is NULL (re)starts watch thread if needed (sync value ignored)
+ */
+rc_t LogFile_Init(const char* path, unsigned int sync, bool foreground, int* log_fd);
+
+void LogFile_Fini(void);
+
+#endif /* _h_services_sra_fuser_log_ */
diff --git a/tools/fuse/node.c b/tools/fuse/node.c
new file mode 100644
index 0000000..4d2f6cf
--- /dev/null
+++ b/tools/fuse/node.c
@@ -0,0 +1,273 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "log.h"
+#include "node.h"
+
+rc_t FSNode_Make(FSNode** self, const char* name, const FSNode_vtbl* vtbl)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || vtbl == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else if( vtbl->Attr == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcInterface, rcInsufficient);
+    } else {
+        const char* x = name;
+        while( rc == 0 && *x != '\0' ) {
+            if( *x < 32 || !isascii(*x) || strchr("\"*/:<>?\\|", *x) != NULL ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            }
+            x++;
+        }
+        if( rc == 0 ) {
+            CALLOC(*self, 1, vtbl->type_size + (x - name + 1));
+            if( *self == NULL ) {
+                rc = RC(rcExe, rcNode, rcConstructing, rcMemory, rcExhausted);
+            } else {
+                char* x = (char*)(*self);
+                (*self)->vtbl = vtbl;
+                (*self)->name = &x[vtbl->type_size];
+                strcpy(&x[vtbl->type_size], name);
+            }
+        }
+    }
+    return rc;
+}
+
+static
+void FSNode_DropChildren(FSNode* self)
+{
+    if( self != NULL ) {
+        const FSNode* c = self->children;
+        while( c != NULL ) {
+            const FSNode* sib = c->sibling;
+            FSNode_Release(c);
+            c = sib;
+        }
+        self->children = NULL;
+    }
+}
+
+rc_t FSNode_AddChild(FSNode* self, const FSNode* child)
+{
+    rc_t rc = 0;
+    if( self == NULL || child == NULL ) {
+        rc = RC(rcExe, rcNode, rcAttaching, rcParam, rcNull);
+    } else {
+        DEBUG_MSG(8, ("Adding to %s child %s\n", self->name, child->name));
+        if( child->sibling != NULL ) {
+            rc = RC(rcExe, rcDoc, rcAttaching, rcDirEntry, rcAmbiguous);
+        } else if( self->children == NULL ) {
+            self->children = child;
+        } else {
+            const FSNode* ch = self->children;
+            while( rc == 0 && ch != NULL ) {
+                if( strcmp(child->name, ch->name) == 0 ) {
+                    rc = RC(rcExe, rcDoc, rcAttaching, rcDirEntry, rcDuplicate);
+                } else if( ch->sibling == NULL ) {
+                    ((FSNode*)ch)->sibling = child;
+                    break;
+                }
+                ch = ch->sibling;
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t FSNode_GetName(const FSNode* cself, const char** name)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || name == NULL ) {
+        rc = RC(rcExe, rcNode, rcEvaluating, rcParam, rcNull);
+    } else {
+        *name = cself->name;
+    }
+    return rc;
+}
+
+rc_t FSNode_HasChildren(const FSNode* cself, bool* test)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || test == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcListing, rcParam, rcNull);
+    } else {
+        *test = cself->children != NULL;
+    }
+    return rc;
+}
+
+rc_t FSNode_ListChildren(const FSNode* cself, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || func == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcListing, rcParam, rcNull);
+    } else {
+        const FSNode* ch = cself->children;
+        DEBUG_MSG(10, ("Children of %s\n", cself->name));
+        while( rc == 0 && ch != NULL ) {
+            if( ch->vtbl->HasChild ) {
+                rc = FSNode_Dir(ch, NULL, func, data);
+            } else if( (rc = func(ch->name, data)) == 0 ) {
+                DEBUG_MSG(10, ("child '%s'\n", ch->name));
+            }
+            ch = ch->sibling;
+        }
+    }
+    return rc;
+}
+
+rc_t FSNode_FindChild(const FSNode* cself, const char* name, size_t name_len, const FSNode** child, bool* hidden)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || name == NULL || name_len == 0 || child == NULL || hidden == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcSearching, rcParam, rcInvalid);
+    } else {
+        const FSNode* ch = cself->children;
+        *child = NULL;
+        *hidden = false;
+        while( rc == 0 && ch != NULL && *child == NULL ) {
+            if( ch->vtbl->HasChild ) {
+                if( (rc = ch->vtbl->HasChild(ch, name, name_len)) == 0 ) {
+                    *hidden = true;
+                    *child = ch;
+                } else if( GetRCState(rc) == rcNotFound ) {
+                    rc = 0;
+                }
+            } else if( strlen(ch->name) == name_len && strncmp(ch->name, name, name_len) == 0 ) {
+                *child = ch;
+            }
+            ch = ch->sibling;
+        }
+    }
+    if( rc == 0 && *child == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcEvaluating, rcName, rcNotFound);
+    }
+    return rc;
+}
+
+rc_t FSNode_Touch(const FSNode* cself)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL ) {
+        rc = RC(rcExe, rcNode, rcUpdating, rcParam, rcNull);
+    } else if( cself->vtbl->Touch ) {
+        DEBUG_MSG(10, ("%s: %s\n", __func__, cself->name));
+        rc = cself->vtbl->Touch(cself);
+    }
+    return rc;
+}
+
+rc_t FSNode_Attr(const FSNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || type == NULL || ts == NULL ) {
+        rc = RC(rcExe, rcNode, rcClassifying, rcParam, rcNull);
+    } else {
+        DEBUG_MSG(10, ("%s: %s/%s\n", __func__, cself->name, subpath));
+        if( cself->vtbl->Attr ) {
+            rc = cself->vtbl->Attr(cself, subpath, type, ts, file_sz, access, block_sz);
+        } else {
+            rc = RC(rcExe, rcNode, rcClassifying, rcInterface, rcUnsupported);
+        }
+    }
+    return rc;
+}
+
+rc_t FSNode_Dir(const FSNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || func == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcListing, rcParam, rcNull);
+    } else {
+        DEBUG_MSG(10, ("%s: %s/%s\n", __func__, cself->name, subpath));
+        if( cself->vtbl->Dir ) {
+            rc = cself->vtbl->Dir(cself, subpath, func, data);
+        } else {
+            rc = RC(rcExe, rcDirectory, rcListing, rcInterface, rcUnsupported);
+        }
+    }
+    return rc;
+}
+
+rc_t FSNode_Link(const FSNode* cself, const char* subpath, char* buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || buf == NULL || buf_sz < 1 ) {
+        rc = RC(rcExe, rcPath, rcAliasing, rcParam, rcInvalid);
+    } else {
+        DEBUG_MSG(10, ("%s: %s/%s\n", __func__, cself->name, subpath));
+        if( cself->vtbl->Link ) {
+            rc = cself->vtbl->Link(cself, subpath, buf, buf_sz);
+            DEBUG_MSG(10, ("%s: %s\n", __func__, buf));
+        } else {
+            rc = RC(rcExe, rcNode, rcAliasing, rcInterface, rcUnsupported);
+        }
+    }
+    return rc;
+}
+
+rc_t FSNode_Open(const FSNode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || accessor == NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcParam, rcNull);
+    } else {
+        DEBUG_MSG(10, ("%s: %s/%s\n", __func__, cself->name, subpath));
+        if( cself->vtbl->Open ) {
+            rc = cself->vtbl->Open(cself, subpath, accessor);
+        } else {
+            rc = RC(rcExe, rcFile, rcOpening, rcInterface, rcUnsupported);
+        }
+    }
+    return rc;
+}
+
+void FSNode_Release(const FSNode* cself)
+{
+    if( cself != NULL ) {
+        FSNode* self = (FSNode*)cself;
+        FSNode_DropChildren(self);
+        if( self->vtbl->Release ) {
+            ReleaseComplain(self->vtbl->Release, self);
+        }
+        DEBUG_MSG(10, ("Release FSNode %s\n", self->name));
+        FREE(self);
+    }
+}
diff --git a/tools/fuse/node.h b/tools/fuse/node.h
new file mode 100644
index 0000000..8f02a1f
--- /dev/null
+++ b/tools/fuse/node.h
@@ -0,0 +1,108 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_node_
+#define _h_sra_fuse_node_
+
+#include "accessor.h"
+
+struct KDirectory;
+
+typedef struct FSNode_vtbl FSNode_vtbl;
+typedef struct FSNode FSNode;
+
+/* this struct must be 1st element in child objects structs! */
+struct FSNode {
+    const FSNode_vtbl* vtbl;
+    const char* name;
+    const FSNode* children;
+    const FSNode* sibling;
+};
+
+typedef rc_t ( CC * FSNode_Dir_Visit ) ( const char *name, void *data );
+
+#ifndef FSNODE_IMPL
+#define FSNODE_IMPL FSNode
+#endif
+
+struct FSNode_vtbl {
+
+    /* object size */
+    const size_t type_size;
+
+    /* for hidden node asks if a name is within, it doesn't mean that file is really present */
+    rc_t (*HasChild)(const FSNODE_IMPL* cself, const char* name, size_t name_len);
+
+    /* called to update node internal state if found by path search */
+    rc_t (*Touch)(const FSNODE_IMPL* cself);
+
+    /* the only mandatory method for the node */
+    rc_t (*Attr)(const FSNODE_IMPL* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz);
+
+    /* fill lst with subnodes names, terminate with NULL if not filled the list up to lst_sz */
+    rc_t (*Dir)(const FSNODE_IMPL* cself, const char* subpath, FSNode_Dir_Visit func, void* data);
+
+    /* resolve path to real name for a symlink, fill in buf with name */
+    rc_t (*Link)(const FSNODE_IMPL* cself, const char* subpath, char* buf, size_t buf_sz);
+
+    /* open a file for reading */
+    rc_t (*Open)(const FSNODE_IMPL* cself, const char* subpath, const SAccessor** accessor);
+
+    /* releases the object */
+    rc_t (*Release)(FSNODE_IMPL* cself);
+};
+
+/* constructor */
+
+rc_t FSNode_Make(FSNode** self, const char* name, const FSNode_vtbl* vtbl);
+
+/* static methods */
+
+rc_t FSNode_AddChild(FSNode* self, const FSNode* child);
+
+rc_t FSNode_GetName(const FSNode* cself, const char** name);
+
+rc_t FSNode_HasChildren(const FSNode* cself, bool* test);
+
+rc_t FSNode_ListChildren(const FSNode* cself, FSNode_Dir_Visit func, void* data);
+
+rc_t FSNode_FindChild(const FSNode* cself, const char* name, size_t name_len, const FSNode** child, bool* hidden);
+
+/* virtual methods */
+
+rc_t FSNode_Touch(const FSNode* cself);
+
+rc_t FSNode_Attr(const FSNode* cself, const char* subpath, uint32_t* type, KTime_t* ts,
+                 uint64_t* file_sz, uint32_t* access, uint64_t* block_sz);
+
+rc_t FSNode_Dir(const FSNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data);
+
+rc_t FSNode_Link(const FSNode* cself, const char* subpath, char* buf, size_t buf_sz);
+
+rc_t FSNode_Open(const FSNode* cself, const char* subpath, const SAccessor** accessor);
+
+void FSNode_Release(const FSNode* self);
+
+#endif /* _h_sra_fuse_node_ */
diff --git a/tools/fuse/remote-cache.c b/tools/fuse/remote-cache.c
new file mode 100644
index 0000000..43ed186
--- /dev/null
+++ b/tools/fuse/remote-cache.c
@@ -0,0 +1,2129 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/args.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <kns/manager.h>
+#include <kns/http.h>
+#include <kns/stream.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+#include <kproc/lock.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kapp/main.h>
+
+#include <os-native.h>
+
+#include "remote-cache.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sysalloc.h>
+
+#include "log.h"
+
+/*)))
+ /// Some unusual macroses
+(((*/
+
+/*) There are methods which are using VPath to get schema and host
+ (*/
+
+typedef rc_t ( CC * _PathReader ) (
+                                const VPath * self,
+                                char * Buffer,
+                                size_t BufferSize,
+                                size_t * NumRead
+                                );
+static
+rc_t CC
+_ReadSomething (
+            const char * Path,
+            char * Buffer,
+            size_t BufferSize,
+            _PathReader Reader
+)
+{
+    rc_t RCt;
+    VFSManager * Manager;
+    VPath * ThePath;
+    size_t NumRead;
+
+    RCt = 0;
+    NumRead = 0;
+    Manager = NULL;
+    ThePath = NULL;
+
+    if ( Path == NULL || Buffer == NULL || BufferSize <= 0 || Reader == NULL ) {
+        return RC ( rcExe, rcPath, rcReading, rcParam, rcNull );
+    }
+
+    * Buffer = 0;
+
+    RCt = VFSManagerMake ( & Manager );
+    if ( RCt == 0 ) {
+        RCt = VFSManagerMakePath ( Manager, & ThePath, Path );
+        if ( RCt == 0 ) {
+            RCt = Reader ( ThePath, Buffer, BufferSize, & NumRead );
+
+            ReleaseComplain ( VPathRelease, ThePath );
+        }
+
+        ReleaseComplain ( VFSManagerRelease, Manager );
+    }
+
+    return RCt;
+}   /* _ReadSomething () */
+
+static
+rc_t CC
+_ReadSchema ( const char * Path, char * Buffer, size_t BufferSize )
+{
+    return _ReadSomething ( Path, Buffer, BufferSize, VPathReadScheme );
+}   /* _ReadSchema () */
+
+bool CC
+_MatchSchemas ( const char * Schema1, const char * Schema2 )
+{
+    size_t S1Size, S2Size;
+
+    if ( Schema1 == NULL || Schema2 == NULL ) { 
+        return false;
+    }
+
+    S1Size = string_size ( Schema1 );
+    S2Size = string_size ( Schema2 );
+
+    if ( S1Size == S2Size ) {
+        if ( string_cmp (
+                        Schema1,
+                        S1Size,
+                        Schema2,
+                        S1Size,
+                        S1Size
+                        ) == 0 ) {
+            return true;
+        }
+    }
+
+    return false;
+}   /* _MatchSchemas () */
+
+bool CC
+IsRemotePath ( const char * Path )
+{
+    char Schema [ 256 ];
+    bool IsRemote;
+
+
+    IsRemote = false;
+
+    if ( Path == NULL ) {
+        return false;
+    }
+
+    if ( _ReadSchema ( Path, Schema, sizeof ( Schema ) ) != 0 ) {
+        return false;
+    }
+
+    IsRemote = _MatchSchemas ( Schema, "http" );
+    if ( IsRemote == false ) {
+        IsRemote = _MatchSchemas ( Schema, "https" );
+    }
+
+    return IsRemote;
+}   /* IsRemotePath () */
+
+bool CC
+IsLocalPath ( const char * Path )
+{
+    KDirectory * NativeDir;
+    uint32_t PathType;
+
+    NativeDir = NULL;
+    PathType = kptNotFound;
+
+        /*  Just checking if Path do exists, and it is a file
+         */
+    if ( Path != NULL ) {
+        if ( KDirectoryNativeDir ( & NativeDir ) == 0 ) {
+            PathType = KDirectoryPathType ( NativeDir, Path );
+
+            KDirectoryRelease ( NativeDir );
+        }
+    }
+
+    return PathType == kptFile;
+}   /* IsLocalPath () */
+
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+/* something unusual                                                 */
+/* we are going to keep remote connections                           */
+/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
+
+struct RCacheEntry;
+
+struct _CnEnt {
+    struct _CnEnt * prev;
+    struct _CnEnt * next;
+
+    struct RCacheEntry * entry;
+};
+
+struct _CnPool {
+    struct KLock * mutabor;
+
+    struct _CnEnt * head;
+    struct _CnEnt * tail;
+
+    size_t qty;
+    size_t max_qty;
+};
+
+struct RCacheEntry {
+    BSTNode AsIs;
+
+    KRefcount refcount;
+    KLock * mutabor;
+
+    char * Name;
+    char * Url;
+    char * Path;
+
+    bool is_local;
+    bool is_complete;
+
+    uint64_t actual_size;
+
+    const struct KFile * file;
+
+    struct _CnEnt * cn_entry;
+};
+
+// static const size_t _sConPoolMaxQty = 1024;
+static const size_t _sConPoolMaxQty = 512;
+static struct _CnPool _sConPool;
+
+rc_t CC RCacheEntryAddRef ( struct RCacheEntry * self );
+rc_t CC RCacheEntryRelease ( struct RCacheEntry * self );
+
+static
+rc_t CC
+_CnEntMake ( struct RCacheEntry * Entry )
+{
+    rc_t RCt;
+    struct _CnEnt * Ent;
+
+    RCt = 0;
+    Ent = NULL;
+
+    if ( Entry == NULL ) {
+        return RC ( rcExe, rcData, rcInitializing, rcParam, rcNull );
+    }
+
+    if ( Entry -> cn_entry != NULL ) {
+        return RC ( rcExe, rcData, rcInitializing, rcParam, rcInvalid );
+    }
+
+    Ent = calloc ( 1, sizeof ( struct _CnEnt ) );
+    if ( Ent == NULL ) {
+        return RC ( rcExe, rcData, rcInitializing, rcParam, rcExhausted );
+    }
+
+    RCt = RCacheEntryAddRef ( Entry );
+    if ( RCt == 0 ) {
+        Ent -> next = NULL;
+        Ent -> prev = NULL;
+        Ent -> entry = Entry;
+        Entry -> cn_entry = Ent;
+    }
+    else {
+        free ( Ent );
+    }
+
+    return RCt;
+}   /* _CnEntMake () */
+
+static
+rc_t CC
+_CnEntDispose ( struct RCacheEntry * Entry )
+{
+    struct _CnEnt * Ent = NULL;
+
+    if ( Entry != NULL ) {
+        Ent = Entry -> cn_entry;
+        Entry -> cn_entry = NULL;
+
+        if ( Ent != NULL ) {
+            RCacheEntryRelease ( Entry );
+
+            Ent -> entry = NULL;
+            Ent -> prev = NULL;
+            Ent -> next = NULL;
+
+            free ( Ent );
+        }
+    }
+
+    return 0;
+}   /* _CnEntDipose () */
+
+static
+rc_t CC
+_CnPoolWhack ()
+{
+    if ( _sConPool . mutabor != NULL ) {
+/*
+RmOutMsg ( "[KLockRelease] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+        KLockRelease ( _sConPool . mutabor );
+        _sConPool . mutabor = NULL;
+    }
+
+    _sConPool . head = NULL;
+    _sConPool . tail = NULL;
+    _sConPool . qty = 0;
+    _sConPool . max_qty = _sConPoolMaxQty;
+
+    return 0;
+}   /* _CnPoolWhack () */
+
+static
+rc_t CC
+_CnPoolInit ( size_t MaxQty )
+{
+    rc_t RCt;
+
+    RCt = 0;
+
+    RCt = KLockMake ( & ( _sConPool . mutabor ) );
+/*
+RmOutMsg ( "[KLockMake] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+    if ( RCt == 0 ) {
+        _sConPool . head = NULL;
+        _sConPool . tail = NULL;
+        _sConPool . qty = 0;
+        _sConPool . max_qty = MaxQty == 0 ? _sConPoolMaxQty : MaxQty;
+    }
+
+    return RCt;
+}   /* _CnPoolInit () */
+
+/*|\     _CnPool has only three methods: ToFront, Drop and Prune,
+  |/     where prune is series of drops.
+  |\     I made that comment to show that DLList is not used for
+  |/     purpose
+  |\*/
+static rc_t CC _CnPoolToFront_NoLock ( struct _CnEnt * entry );
+static rc_t CC _CnPoolDrop_NoLock ( struct _CnEnt * entry );
+static rc_t CC _CnPoolPrune_NoLock ( size_t PruneS );
+
+rc_t CC
+_CnPoolToFront_NoLock ( struct _CnEnt * Entry )
+{
+    rc_t RCt = 0;
+
+    if ( Entry == NULL ) {
+        return RC ( rcExe, rcData, rcInserting, rcParam, rcNull );
+    }
+
+    if ( Entry == _sConPool . head ) {
+        return 0;
+    }
+
+/*
+RmOutMsg ( "[_CnPoolToFront_ ] [%p] [ %d]\n", Entry, __LINE__ );
+*/
+
+        /* First we should drop Entry without disconnecting */
+    RCt = _CnPoolDrop_NoLock ( Entry );
+    if ( RCt == 0 ) {
+            /* Second we should Prune old connections */
+        RCt = _CnPoolPrune_NoLock ( 1 );
+        if ( RCt == 0 ) {
+                /* Second we should put Entry at front */
+            if ( _sConPool . head != NULL ) {
+                Entry -> next = _sConPool . head;
+                Entry -> next -> prev = Entry;
+                _sConPool . head = Entry;
+            }
+            else {
+                _sConPool . tail = Entry;
+            }
+            _sConPool . head  = Entry;
+            _sConPool . qty ++;
+        }
+    }
+
+    return RCt;
+}   /* _CnPooltoFront_NoLock () */
+
+static
+rc_t CC
+_CnPoolToFront ( struct RCacheEntry * Entry )
+{
+    rc_t RCt = 0;
+
+    if ( Entry != NULL ) {
+        if ( Entry -> cn_entry != NULL ) {
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+            RCt = KLockAcquire ( _sConPool . mutabor );
+            if ( RCt == 0 ) {
+                RCt = _CnPoolToFront_NoLock ( Entry -> cn_entry );
+
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+                KLockUnlock ( _sConPool . mutabor );
+            }
+        }
+    }
+
+    return RCt;
+}   /* _CnPoolToFront () */
+
+rc_t CC
+_CnPoolDrop_NoLock ( struct _CnEnt * Entry )
+{
+    rc_t RCt;
+
+    RCt = 0;
+
+    if ( Entry == NULL ) {
+        return RC ( rcExe, rcData, rcRemoving, rcParam, rcNull );
+    }
+
+/*
+RmOutMsg ( "[_CnPoolDrop_] [%p] [ %d]\n", Entry, __LINE__ );
+*/
+
+    if ( Entry -> next == NULL &&  Entry -> prev == NULL ) {
+            /* Entry is the only member in pool
+             */
+        if ( _sConPool . head == Entry ) {
+            _sConPool . head = _sConPool . tail = NULL;
+            _sConPool . qty = 0;
+        } 
+    }
+    else {
+        if ( Entry -> prev == NULL ) {
+                /* Entry is at the head of pool
+                 */
+            if ( _sConPool . head != Entry ) {
+                return RC ( rcExe, rcData, rcRemoving, rcParam, rcInvalid );
+            }
+
+            if ( Entry -> next != NULL ) {
+                Entry -> next -> prev = NULL;
+                _sConPool . head = Entry -> next;
+            }
+            else {
+                _sConPool . head = _sConPool . tail = NULL;
+            }
+        }
+        else {
+            if ( Entry -> next == NULL ) {
+                    /* Entry is at the tail of pool
+                     */
+                if ( _sConPool . tail != Entry ) {
+                    return RC ( rcExe, rcData, rcRemoving, rcParam, rcInvalid );
+
+                }
+
+                if ( Entry -> prev != NULL ) {
+                    Entry -> prev -> next = NULL;
+                    _sConPool . tail = Entry -> prev;
+                }
+                else {
+                    _sConPool . head = _sConPool . tail = NULL;
+                }
+            }
+            else {
+                    /* Entry is at the middle of pool
+                     */
+                Entry -> prev -> next = Entry -> next;
+                Entry -> next -> prev = Entry -> prev;
+            }
+        }
+
+        _sConPool . qty --;
+        Entry -> next = Entry -> prev = NULL;
+    }
+
+    return RCt;
+}   /* _CnPoolDrop_NoLock () */
+
+static
+rc_t CC
+_CnPoolDrop ( struct RCacheEntry * Entry )
+{
+    rc_t RCt = 0;
+
+    if ( Entry != NULL ) {
+        if ( Entry -> cn_entry != NULL ) {
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+            RCt = KLockAcquire ( _sConPool . mutabor );
+            if ( RCt == 0 ) {
+                RCt = _CnPoolDrop_NoLock ( Entry -> cn_entry );
+
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) _sConPool . mutabor, __LINE__ );
+*/
+                KLockUnlock ( _sConPool . mutabor );
+            }
+        }
+    }
+
+    return RCt;
+}   /* _CnPoolDrop () */
+
+rc_t CC
+_CnPoolPrune_NoLock ( size_t PruneS )
+{
+    rc_t RCt = 0;
+
+    size_t max_qty = _sConPool . max_qty - PruneS;
+
+    while ( max_qty < _sConPool . qty ) {
+        RCt = _CnPoolDrop_NoLock ( _sConPool . tail );
+        if ( RCt != 0 ) {
+            break;
+        }
+    }
+
+    return RCt;
+}   /* _CnPoolPrune_NoLock () */
+
+/*)))
+ ///  Cache ... hmmm
+(((*/
+static KNSManager * _ManagerOfKNS = NULL;
+static BSTree _Cache;
+    /* That lock will be used for adding/searching cache entries */
+static KLock * _CacheLock = NULL;
+
+const char * _CacheEntryClassName = "RCacheEntry_class";
+const char * _CacheDirName = ".cache";
+static char _CacheRoot [ 4096 ];
+static char * _PCacheRoot = NULL;
+static size_t _CacheEntryNo = 0;
+static uint32_t _HttpBlockSize = 0;
+static bool _DisklessMode = false;
+
+/*))
+ //  Some extremely useful methods
+((*/
+rc_t CC
+_EGetCachePath (
+            const char * CacheRoot,
+            char * Buffer,
+            size_t BufferSize
+)
+{
+    size_t NumWrit;
+
+    if ( CacheRoot == NULL || Buffer == NULL || BufferSize == 0 ) {
+        return RC ( rcExe, rcString, rcCopying, rcParam, rcNull );
+    }
+
+    return string_printf (
+                        Buffer,
+                        BufferSize,
+                        & NumWrit,
+                        "%s/%s",
+                        CacheRoot,
+                        _CacheDirName
+                        );
+}   /* _EGetCachePath () */
+
+rc_t CC
+_GetCachePath ( char * Buffer, size_t BufferSize )
+{
+    return _EGetCachePath ( RemoteCachePath (), Buffer, BufferSize );
+}   /* _GetCachePath () */
+
+rc_t CC
+_EGetCachePathOld (
+                const char * CacheRoot,
+                char * Buffer,
+                size_t BufferSize
+)
+{
+    size_t NumWrit;
+
+    if ( CacheRoot == NULL || Buffer == NULL || BufferSize == 0 ) {
+        return RC ( rcExe, rcString, rcCopying, rcParam, rcNull );
+    }
+
+    return string_printf (
+                        Buffer,
+                        BufferSize,
+                        & NumWrit,
+                        "%s/%s.old",
+                        CacheRoot,
+                        _CacheDirName
+                        );
+}   /* _EGetCachePathOld () */
+
+rc_t CC
+_GetCachePathOld ( char * Buffer, size_t BufferSize )
+{
+    return _EGetCachePathOld ( RemoteCachePath (), Buffer, BufferSize );
+}   /* _GetCachePathOld () */
+
+rc_t CC
+_CheckCreateDirectory ( const char * Path )
+{
+    rc_t RCt;
+    KDirectory * NativeDir;
+    uint32_t PathType;
+
+    RCt = 0;
+    NativeDir = NULL;
+    PathType = kptNotFound;
+
+    if ( Path == NULL ) {
+        return RC ( rcExe, rcDirectory, rcCreating, rcParam, rcNull );
+    }
+
+    RCt = KDirectoryNativeDir ( & NativeDir );
+    if ( RCt == 0 ) {
+        PathType = KDirectoryPathType ( NativeDir, Path );
+        switch ( PathType ) {
+            case kptNotFound :
+                        RmOutMsg ( "Creating directory '%s'\n", Path );
+                        RCt = KDirectoryCreateDir (
+                                                NativeDir,
+                                                0777,
+                                                kcmCreate,
+                                                Path
+                                                );
+                        break;
+            case kptDir :
+                        break;
+            default :
+                            /* Somtheing is wrong */
+                        RCt = RC ( rcExe, rcDirectory, rcCreating, rcError, rcInvalid );
+                        break;
+        }
+
+        ReleaseComplain ( KDirectoryRelease, NativeDir );
+    }
+
+    return RCt;
+}   /* _CheckCreateDirectory () */
+
+rc_t CC
+_CheckRemoveDirectory ( const char * Path )
+{
+    rc_t RCt;
+    KDirectory * NativeDir;
+    uint32_t PathType;
+
+    RCt = 0;
+    NativeDir = NULL;
+    PathType = kptNotFound;
+
+    if ( Path == NULL ) {
+        return RC ( rcExe, rcDirectory, rcRemoving, rcParam, rcNull );
+    }
+
+    RCt = KDirectoryNativeDir ( & NativeDir );
+    if ( RCt == 0 ) {
+        PathType = KDirectoryPathType ( NativeDir, Path );
+        switch ( PathType ) {
+            case kptNotFound:
+                    /* Everything is good */
+                    break;
+            default:
+                RmOutMsg ( "Removing directory '%s'\n", Path );
+                RCt = KDirectoryRemove ( NativeDir, true, Path );
+                break;
+        }
+
+        ReleaseComplain ( KDirectoryRelease, NativeDir );
+    }
+
+    return RCt;
+}   /* _CheckRemoveDirectory () */
+
+rc_t CC
+_CheckRemoveOldCacheDirectory ( const char * CacheRoot )
+{
+    rc_t RCt;
+    KDirectory * NativeDir;
+    char CacheDir [ 4096 ];
+    char OldCacheDir [ 4096 ];
+
+    RCt = 0;
+    NativeDir = NULL;
+    * CacheDir = 0;
+    * OldCacheDir = 0;
+
+    if ( CacheRoot == NULL ) {
+        return RC ( rcExe, rcDirectory, rcRemoving, rcParam, rcNull );
+    }
+
+    if ( _EGetCachePath ( CacheRoot, CacheDir, sizeof ( CacheDir ) ) != 0
+        || _EGetCachePathOld ( CacheRoot, OldCacheDir, sizeof ( OldCacheDir ) ) )
+    {
+        return RC ( rcExe, rcDirectory, rcRemoving, rcParam, rcInvalid );
+    }
+
+    RCt = KDirectoryNativeDir ( & NativeDir );
+    if ( RCt == 0 ) {
+            /*) Just because I do not know wahat to do in the case if
+            (*) it is impossible to remove directory I am doing that
+            (*) hookup
+            (*/
+        RCt = _CheckRemoveDirectory ( OldCacheDir );
+        if ( RCt == 0 ) {
+            RCt = KDirectoryRename (
+                                NativeDir,
+                                true,
+                                CacheDir,
+                                OldCacheDir
+                                );
+            if ( RCt == 0 ) {
+                RCt = _CheckRemoveDirectory ( OldCacheDir );
+            }
+        }
+
+        ReleaseComplain ( KDirectoryRelease, NativeDir );
+    }
+
+    return RCt;
+}   /* _CheckRemoveOldCacheDirectory () */
+
+/*
+ *  Lyrics: This method will set buffer size for HTTP transport
+ *  and return previous value.
+ *  That method is thread unsafe, and it is better to set it once
+ *  on the time of cache initialization
+ */
+uint32_t CC
+RemoteCacheSetHttpBlockSize ( uint32_t HttpBlockSize )
+{
+    uint32_t RetVal = _HttpBlockSize;
+
+    _HttpBlockSize = HttpBlockSize;
+
+    return RetVal;
+}   /* RemoteCacheSetHttpBlockSize () */
+
+/*
+ * Lyrics: Cache initialising: keeping in memory cache path 
+ *         cache path could be a NULL, and in that case no cacheing
+ *         performed
+ */
+rc_t CC
+RemoteCacheInitialize ( const char * Path )
+{
+    rc_t RCt;
+    char Buffer [ 4096 ];
+    struct KDirectory * Directory;
+
+    RCt = 0;
+    * _CacheRoot = 0;
+    * Buffer = 0;
+
+    if ( RemoteCacheIsDisklessMode () ) {
+        LOGMSG ( klogErr, "[RemoteCache] Already initialized in diskless mode" );
+
+        return RC ( rcExe, rcPath, rcInitializing, rcParam, rcNull );
+    }
+
+        /*))
+         //  If path is NULL - diskless mode ... we introduced
+        //   variable for that ... to avoid confusion
+       ((*/
+    if ( Path == NULL ) {
+        LOGMSG ( klogErr, "[RemoteCache] initializing [diskless]" );
+
+        _DisklessMode = true;
+
+        return 0;
+    }
+
+    PLOGMSG ( klogErr, ( klogErr, "[RemoteCache] initializing [$(f)]", PLOG_S(f), Path ) );
+
+        /* we are checking that cache directory already initialized */
+    if ( _PCacheRoot != NULL ) {
+        return RC ( rcExe, rcPath, rcInitializing, rcSelf, rcExists );
+    }
+
+    RCt = KDirectoryNativeDir ( & Directory );
+    if ( RCt == 0 ) {
+        RCt = KDirectoryResolvePath (
+                                Directory,
+                                true,
+                                _CacheRoot,
+                                sizeof ( _CacheRoot ),
+                                Path
+                                );
+
+        ReleaseComplain ( KDirectoryRelease, Directory );
+    }
+
+    if ( RCt == 0 ) {
+        _PCacheRoot = _CacheRoot;
+    }
+
+    return RCt;
+}   /*  RemoteCacheInitialize () */
+
+static
+rc_t CC
+_InitKNSManager ()
+{
+    rc_t RCt;
+    KNSManager * Manager;
+    ver_t Ver;
+
+    RCt = 0;
+    Manager = NULL;
+    Ver = KAppVersion ();
+
+    if ( _ManagerOfKNS != NULL ) {
+        return RC ( rcExe, rcNS, rcInitializing, rcSelf, rcInvalid );
+    }
+
+    RCt = KNSManagerMake ( & Manager );
+    if ( RCt == 0 ) {
+        RCt = KNSManagerSetUserAgent (
+                                    Manager,
+                                    "sra-toolkit remote-fuser.%V",
+                                    Ver
+                                    );
+        if ( RCt == 0 ) {
+            _ManagerOfKNS = Manager;
+        }
+        else {
+            ReleaseComplain ( KNSManagerRelease, Manager );
+        }
+    }
+
+    return RCt;
+}   /* _InitKNSManager () */
+
+static
+rc_t CC
+_DisposeKNSManager ()
+{
+    KNSManager * Manager = _ManagerOfKNS;
+
+    _ManagerOfKNS = NULL;
+
+    if ( Manager == NULL ) {
+        return 0;
+    }
+
+    ReleaseComplain ( KNSManagerRelease, Manager );
+
+    return 0;
+}   /* _DisposeKNSManager () */
+
+/*
+ * Lyrics: Cache make 
+ * Cache initialisation consists from two steps :
+ *    Creating directory if it does not exist
+ *    Removing content of directory if it is something here
+ */
+rc_t CC
+RemoteCacheCreate ()
+{
+    rc_t RCt;
+    char Buffer [ 4096 ];
+
+    RCt = 0;
+    * Buffer = 0;
+
+    if ( RemoteCacheIsDisklessMode () ) {
+        LOGMSG( klogInfo, "[RemoteCache] entering diskless mode\n" );
+        return 0;
+    }
+
+    LOGMSG( klogInfo, "[RemoteCache] creating\n" );
+
+        /* we shoud do it here */
+    RCt = _CnPoolInit ( 0 ); /* Not sure about 0 8-| */
+    if ( RCt != 0 ) {
+        return RCt;
+    }
+
+        /* standard c=ecks */
+        /* we are checking that cache directory already initialized */
+    if ( _PCacheRoot == NULL ) {
+        return RC ( rcExe, rcPath, rcInitializing, rcSelf, rcNull );
+    }
+
+        /* Checking if CacheRoot directory exists and creating if not */
+    RCt = _CheckCreateDirectory ( _PCacheRoot );
+    if ( RCt == 0 ) {
+            /* Here we are moving old cache path
+             */
+        RCt = _CheckRemoveOldCacheDirectory ( _PCacheRoot );
+        if ( RCt ) {
+            RCt = _EGetCachePath (
+                                _PCacheRoot,
+                                Buffer,
+                                sizeof ( Buffer )
+                                );
+            if ( RCt == 0 ) {
+
+                RCt = _CheckCreateDirectory ( Buffer );
+            }
+        }
+    }
+
+    if ( RCt == 0 ) {
+
+        RCt = _InitKNSManager ();
+        if ( RCt == 0 ) {
+
+                /* Initializing BSTree */
+            BSTreeInit ( & _Cache );
+                /* Initializing _CacheLock */
+            RCt = KLockMake ( & _CacheLock );
+/*
+RmOutMsg ( "[KLockMake] [%p] [ %d]\n", ( void * ) _CacheLock, __LINE__ );
+*/
+        }
+    }
+
+    if ( RCt != 0 ) {
+            /* Endangered specie TODO!!! */
+        RemoteCacheDispose ();
+    }
+
+    return RCt;
+}   /* RemoteCacheCreate () */
+
+rc_t CC _RCacheEntryDestroy ( struct RCacheEntry * Entry );
+
+void CC
+_RcAcHeEnTrYwHaCk ( BSTNode * Node, void * UnusedParam )
+{
+    if ( Node != NULL ) {
+        _RCacheEntryDestroy ( ( struct RCacheEntry * ) Node );
+    }
+}   /* _RcAcHeEnTrYwHaCk () */
+
+/*
+ * Lyrics: Cache finalization 
+ * Cache finalization consists from one step(s) :
+ *    Removing content of cache directory if it exists and
+ *    something is here
+ */
+rc_t CC
+RemoteCacheDispose ()
+{
+    rc_t RCt = 0;
+
+    if ( RemoteCacheIsDisklessMode () ) {
+        LOGMSG( klogInfo, "[RemoteCache] leaving diskless mode\n" );
+    }
+
+    LOGMSG( klogInfo, "[RemoteCache] disposing\n" );
+
+    if ( RemoteCacheIsDisklessMode () ) {
+        _DisklessMode = false;
+
+        return 0;
+    }
+
+        /*) Cache was not initialized
+         (*/
+    if ( _PCacheRoot == NULL ) {
+        return 0;
+    }
+
+    RCt = _CheckRemoveOldCacheDirectory ( _CacheRoot );
+    if ( RCt == 0 ) {
+        * _CacheRoot = 0;
+        _PCacheRoot = NULL;
+    }
+
+        /* Releasing Lock */
+    if ( _CacheLock != NULL ) {
+/*
+RmOutMsg ( "[KLockRelease] [%p] [ %d]\n", ( void * ) _CacheLock, __LINE__ );
+*/
+        ReleaseComplain ( KLockRelease, _CacheLock );
+        _CacheLock = NULL;
+    }
+
+    _DisposeKNSManager ();
+
+    BSTreeWhack ( & _Cache, _RcAcHeEnTrYwHaCk, NULL );
+
+        /* Who does need that check? */
+    _CnPoolWhack ();
+
+    _CacheEntryNo = 0;
+
+    * _CacheRoot = 0;
+    _PCacheRoot = NULL;
+
+    return RCt;
+}   /* RemoteCacheDispose () */
+
+/*))
+ //  Generates effective name and path for file
+((*/
+rc_t CC
+_RCacheEntryGenerateNameAndPath ( char ** Name, char ** Path )
+{
+    rc_t RCt;
+    char Buffer [ 4096 ];
+    char Buffer2 [ 4096 ];
+    size_t NumWritten;
+    char * TheName;
+    char * ThePath;
+
+    RCt = 0;
+    * Buffer = 0;
+    * Buffer2 = 0;
+    NumWritten = 0;
+    TheName = NULL;
+    ThePath = NULL;
+
+    if ( Name != NULL ) { * Name = NULL; }
+    if ( Path != NULL ) { * Path = NULL; }
+
+    if ( Name == NULL || Path == NULL ) {
+        return RC ( rcExe, rcFile, rcInitializing, rcParam, rcNull );
+    }
+
+    RCt = string_printf (
+                        Buffer,
+                        sizeof ( Buffer ),
+                        & NumWritten,
+                        "etwas.%d",
+                        _CacheEntryNo + 1
+                        );
+    if ( RCt == 0 ) {
+        TheName = string_dup_measure ( Buffer, NULL );
+        if ( TheName == NULL ) {
+            RCt = RC ( rcExe, rcFile, rcInitializing, rcMemory, rcExhausted );
+        }
+        else {
+            RCt = _GetCachePath ( Buffer2, sizeof ( Buffer2 ) );
+            if ( RCt == 0 ) {
+                RCt = string_printf (
+                                    Buffer,
+                                    sizeof ( Buffer ),
+                                    & NumWritten,
+                                    "%s/%s",
+                                    Buffer2,
+                                    TheName
+                                    );
+                if ( RCt == 0 ) {
+                    ThePath = string_dup_measure ( Buffer, NULL );
+                    if ( TheName == NULL ) {
+                        RCt = RC ( rcExe, rcFile, rcInitializing, rcMemory, rcExhausted );
+                    }
+                    else {
+                         * Name = TheName;
+                         * Path = ThePath;
+                    }
+                }
+            }
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * Name = NULL;
+        if ( TheName != NULL ) {
+            free ( TheName );
+        }
+        * Path = NULL;
+        if ( ThePath != NULL ) {
+            free ( ThePath );
+        }
+    }
+
+    return RCt;
+}   /* _RCacheEntryGenerateNameAndPath () */
+
+/*))
+ //  This method will destroy CacheEntry and free all resources
+((*/
+rc_t CC
+_RCacheEntryDestroy ( struct RCacheEntry * self )
+{
+/*
+KOutMsg ( " [GGU] [EntryDestroy]\n" );
+*/
+    if ( self != NULL ) {
+/*
+RmOutMsg ( "++++++DL DESTROY [0x%p] entry\n", self );
+*/
+        _CnPoolDrop ( self );
+        _CnEntDispose ( self );
+
+        /*)) Reverse order. I suppose it will be destoryed only
+         //  in particualr cases, so no locking :|
+        ((*/
+            /*) File
+             (*/
+        if ( self -> file != NULL ) {
+/*
+KOutMsg ( "[GGU] [DestroyEnty] [%s]\n", self -> Name );
+*/
+            ReleaseComplain ( KFileRelease, self -> file );
+            self -> file = 0;
+        }
+            /*) Url
+             (*/
+        if ( self -> Url != NULL ) {
+            free ( self -> Url );
+            self -> Url = NULL;
+        }
+            /*) Path
+             (*/
+        if ( self -> Path != NULL ) {
+            free ( self -> Path );
+            self -> Path = NULL;
+        }
+            /*) Name
+             (*/
+        if ( self -> Name != NULL ) {
+            free ( self -> Name );
+            self -> Name = NULL;
+        }
+            /*) mutabor
+             (*/
+        if ( self -> mutabor != NULL ) {
+/*
+RmOutMsg ( "[KLockRelease] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+            ReleaseComplain ( KLockRelease, self -> mutabor );
+            self -> mutabor = NULL;
+        }
+            /*) refcount 
+             (*/
+        KRefcountWhack ( & ( self -> refcount ), _CacheEntryClassName );
+
+        self -> is_local = false;
+        self -> is_complete = false;
+        self -> actual_size = 0;
+
+        free ( self );
+    }
+
+    return 0;
+}   /* _RCacheEntryDestroy () */
+
+/*))
+ //  This method will create new CacheEntry
+((*/
+rc_t CC
+_RCacheEntryMake (
+            const char * Url,
+            struct RCacheEntry ** RetEntry
+)
+{
+    rc_t RCt;
+    struct RCacheEntry * Entry;
+
+    RCt = 0;
+    Entry = NULL;
+
+    if ( RetEntry != NULL ) {
+        * RetEntry = NULL;
+    }
+
+    if ( Url == NULL || RetEntry == NULL ) {
+        return RC ( rcExe, rcFile, rcInitializing, rcParam, rcNull );
+    }
+
+    Entry = ( struct RCacheEntry * ) calloc (
+                                        1,
+                                        sizeof ( struct RCacheEntry )
+                                        );
+    if ( Entry == NULL ) {
+        RCt = RC ( rcExe, rcFile, rcInitializing, rcMemory, rcExhausted );
+    }
+    else {
+        Entry -> is_local = false;
+        Entry -> is_complete = false;
+        Entry -> actual_size = 0;
+
+        if ( ! RemoteCacheIsDisklessMode () ) {
+                /*)  It is better do it here, before any allocation
+                 (*/
+            RCt = _RCacheEntryGenerateNameAndPath (
+                                                & ( Entry -> Name ),
+                                                & ( Entry -> Path )
+                                                );
+        }
+
+        if ( RCt == 0 ) {
+                /*) refcount
+                 (*/
+            KRefcountInit (
+                        & ( Entry -> refcount ),
+                        0,
+                        _CacheEntryClassName,
+                        "_RCacheEntryMake()",
+                        Entry -> Name
+                        );
+                /*) mutabor
+                 (*/
+            RCt = KLockMake ( & ( Entry -> mutabor ) );
+/*
+RmOutMsg ( "[KLockMake] [%p] [ %d]\n", ( void * ) Entry -> mutabor, __LINE__ );
+*/
+    
+            if ( RCt == 0 ) {
+                    /*) Url
+                     (*/
+                Entry -> Url = string_dup_measure ( Url, NULL );
+                if ( Entry -> Url == NULL ) {
+                    RCt = RC ( rcExe, rcFile, rcInitializing, rcMemory, rcExhausted );
+                }
+                if ( RCt == 0 ) {
+                        /*) File will be opened on demand
+                         /  Increasing count and assigning value
+                        (*/
+                    _CacheEntryNo ++;
+                    * RetEntry = Entry;
+                }
+            }
+        }
+    }
+
+    if ( RCt != 0 && Entry != NULL ) {
+        _RCacheEntryDestroy ( Entry );
+    }
+
+    return RCt;
+}   /*  _RCacheEntryMake () */
+
+/*))
+ //  Comparator: common case
+((*/
+static
+int64_t CC
+_RcUrLcMp ( const char * Url1, const char * Url2 )
+{
+    if ( Url1 == NULL || Url2 == NULL ) {
+        if ( Url1 != NULL ) {
+            return 4096;
+        }
+        if ( Url2 != NULL ) {
+            return 4096;
+        }
+        return 0;
+    }
+
+    return strcmp ( Url1, Url2 );
+}   /* _RcUrLcMp () */
+
+/*))
+ //  Comparator: we suppose that 'item' is an Url
+((*/
+static
+int64_t CC
+_RcEnTrYcMp ( const void * item, const BSTNode * node )
+{
+    return _RcUrLcMp (
+                    ( const char * ) item,
+                    node == NULL
+                        ? NULL
+                        : ( ( struct RCacheEntry * ) node ) -> Url
+                    );
+}   /* _RcEnTrYcMp () */
+
+/*))
+ //  Sorter for BSTreeInsert
+((*/
+static
+int64_t CC
+_RcNoDeCmP ( const BSTNode * node1, const BSTNode * node2 )
+{
+    return _RcUrLcMp (
+                    node1 == NULL
+                        ? NULL
+                        : ( ( struct RCacheEntry * ) node1 ) -> Url,
+                    node2 == NULL
+                        ? NULL
+                        : ( ( struct RCacheEntry * ) node2 ) -> Url
+                    );
+}   /* _RcNoDeCmP () */
+
+/*))
+ //  This method suppeosed to find or create Entry
+((*/
+rc_t CC
+RemoteCacheFindOrCreateEntry (
+                            const char * Url,
+                            struct RCacheEntry ** Entry
+)
+{
+    rc_t RCt;
+    struct RCacheEntry * RetEntry;
+
+    RCt = 0;
+    RetEntry = NULL;
+
+    if ( Url == NULL || Entry == NULL ) {
+        return RC ( rcExe, rcPath, rcInitializing, rcParam, rcNull );
+    }
+    * Entry = NULL;
+
+        /*)  Diskless mode
+         (*/
+    if ( RemoteCacheIsDisklessMode () ) {
+        RCt = _RCacheEntryMake ( Url, & RetEntry );
+        if ( RCt == 0 ) {
+/*
+RmOutMsg ( "++++++DL CREATE [0x%p][%s] entry\n", RetEntry, Url );
+*/
+            * Entry = RetEntry;
+        }
+
+        return RCt;
+    }
+        /*)  Here we are locking
+         (*/
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) _CacheLock, __LINE__ );
+*/
+    RCt = KLockAcquire ( _CacheLock );
+    if ( RCt == 0 ) {
+            /*)  Here we are 'looking for' and 'fooking lor'
+             (*/
+        RetEntry = ( struct RCacheEntry * ) BSTreeFind (
+                                                    & _Cache,
+                                                    Url,
+                                                    _RcEnTrYcMp
+                                                    );
+/*
+RmOutMsg ( "++++++ %s entry\n", RetEntry == NULL ? "Creating" : "Loading" );
+*/
+        if ( RetEntry == NULL ) {
+            RCt = _RCacheEntryMake ( Url, & RetEntry );
+            if ( RCt == 0 ) {
+                RCt = BSTreeInsert (
+                                & _Cache,
+                                ( BSTNode * ) RetEntry,
+                                _RcNoDeCmP
+                                );
+            }
+        }
+
+        if ( RCt == 0 ) {
+            * Entry = RetEntry;
+        }
+
+            /*)  First we are trying to find appropriate entry
+             (*/
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) _CacheLock, __LINE__ );
+*/
+        KLockUnlock ( _CacheLock );
+    }
+
+    return RCt;
+}   /* RemoteCacheFindOrCreateEntry () */
+
+const char * CC
+RemoteCachePath ()
+{
+    return RemoteCacheIsDisklessMode() ? NULL : _PCacheRoot;
+}   /* RemoteCachePath () */
+
+bool CC
+RemoteCacheIsDisklessMode ()
+{
+    return _DisklessMode;
+}   /* RemoteCacheIsDisklessMode () */
+
+/*)))
+ ///  Top of the crop methods
+(((*/
+rc_t CC
+RCacheEntryAddRef ( struct RCacheEntry * self )
+{
+    rc_t RCt;
+
+    RCt = 0;
+
+    if ( self != NULL ) {
+/*
+RmOutMsg ( "++++++DL ADDREF [0x%p] entry\n", self );
+*/
+        switch ( KRefcountAdd (
+                        & ( self -> refcount ),
+                        _CacheEntryClassName
+                        ) ) {
+            case krefLimit:
+                RCt = RC ( rcExe, rcFile, rcAttaching, rcRange, rcExcessive );
+            case krefNegative:
+                RCt = RC ( rcExe, rcFile, rcAttaching, rcSelf, rcInvalid );
+            default:
+                break;
+        }
+    }
+
+    return RCt;
+}   /* RCacheEntryAddRef () */
+
+rc_t CC
+_RCacheEntryReleaseWithoutLock ( struct RCacheEntry * self )
+{
+    /*)) This method called from special place, so no NULL checks
+     ((*/
+
+    if ( self -> file != NULL ) {
+/*
+KOutMsg ( "[GGU] [ReleaseEntry] [%s]\n", self -> Name );
+*/
+/*
+RmOutMsg ( "|||<-- Releasing [%s][%s]\n", self -> Name, self -> Url );
+*/
+        ReleaseComplain ( KFileRelease, self -> file );
+        self -> file = NULL;
+    }
+
+    return 0;
+}   /*  _RCacheEntryReleaseWithoutLock () */
+
+rc_t CC
+_RCacheEntryReleaseWithLock ( struct RCacheEntry * self )
+{
+    rc_t RCt = 0;
+
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+    RCt = KLockAcquire ( self -> mutabor );
+    if ( RCt == 0 ) {
+        RCt = _RCacheEntryReleaseWithoutLock ( self );
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+        KLockUnlock ( self -> mutabor );
+    }
+
+    return RCt;
+}   /* _RCacheEntryReleaseWithLock () */
+
+rc_t CC
+RCacheEntryRelease ( struct RCacheEntry * self )
+{
+    rc_t RCt;
+
+    RCt = 0;
+
+/*
+KOutMsg ( " [GGU] [Closing Entry]\n" );
+*/
+    if ( self != NULL ) {
+        if ( RCt == 0 ) {
+            switch ( KRefcountDrop (
+                            & ( self -> refcount ),
+                            _CacheEntryClassName
+                            ) ) {
+                case krefWhack:
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+                    RCt = KLockAcquire ( self -> mutabor );
+                    if ( RCt == 0 ) {
+                        _RCacheEntryReleaseWithoutLock ( self );
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+                        KLockUnlock ( self -> mutabor );
+                        if ( RemoteCacheIsDisklessMode () ) {
+ /*
+ RmOutMsg ( "++++++DL RELEASE [0x%p] entry\n", self );
+ */
+                            _RCacheEntryDestroy ( self );
+                        }
+                    }
+                    break;
+                case krefNegative:
+                    RCt = RC ( rcExe, rcFile, rcReleasing, rcRange, rcExcessive );
+                default:
+                    break;
+            }
+
+        }
+    }
+
+    return RCt;
+}   /* RCacheEntryRelease () */
+
+rc_t CC
+_RCacheEntryOpenFileReadRemote ( struct RCacheEntry * self )
+{
+    rc_t RCt;
+    struct KDirectory * Directory;
+    const struct KFile * HttpFile, * TeeFile;
+
+    RCt = 0;
+    Directory = NULL;
+    HttpFile = TeeFile = NULL;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcFile, rcOpening, rcParam, rcNull );
+    }
+
+/*
+KOutMsg ( "[GGU] [OpenReadRemote] [%s]\n", self -> Name );
+*/
+
+    if ( ( ! RemoteCacheIsDisklessMode () ) && self -> Path == NULL ) {
+        return RC ( rcExe, rcFile, rcOpening, rcParam, rcNull );
+    }
+
+/*
+RmOutMsg ( "|||<-- Opening [R] [%s][%s]\n", self -> Name, self -> Url );
+RmOutMsg ( "  |<-- Cache Entry [%s]\n", self -> Path );
+*/
+
+    RCt = KNSManagerMakeHttpFile (
+                                _ManagerOfKNS,
+                                & HttpFile,
+                                NULL, /* no open connections */
+                                0x01010000,
+                                self -> Url
+                                );
+    if ( RCt == 0 ) {
+        if ( RemoteCacheIsDisklessMode () ) {
+            self -> file = ( KFile * ) HttpFile;
+        }
+        else {
+            RCt = KDirectoryNativeDir ( & Directory );
+            if ( RCt == 0 ) {
+                RCt = KDirectoryMakeCacheTee (
+                                    Directory,
+                                    & TeeFile,
+                                    HttpFile,
+                                    _HttpBlockSize, /* blocksize */
+                                    self -> Path
+                                    );
+                if ( RCt == 0 ) {
+                    self -> file = ( KFile * ) TeeFile;
+
+                        /*  We should create connection entry for pool
+                         */
+                    RCt = _CnEntMake ( self );
+                }
+
+                ReleaseComplain ( KDirectoryRelease, Directory );
+            }
+            ReleaseComplain ( KFileRelease, HttpFile );
+        }
+    }
+
+    if ( RCt != 0 ) {
+        if ( self -> file != NULL ) {
+            ReleaseComplain ( KFileRelease, self -> file );
+            self -> file = NULL;
+        }
+
+        _CnEntDispose ( self );
+    }
+
+    if ( RCt == 0 ) {
+        if ( self -> actual_size == 0 ) {
+            RCt = KFileSize ( self -> file, & ( self -> actual_size ) );
+        }
+    }
+
+    return RCt;
+}   /* _RCacneEntryOpenFileReadRemote () */
+
+rc_t CC
+_RCacheEntryOpenFileReadLocal ( struct RCacheEntry * self )
+{
+    rc_t RCt;
+    const struct KFile * File;
+    struct KDirectory * Directory;
+
+    RCt = 0;
+    File = NULL;
+    Directory = NULL;
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcFile, rcOpening, rcParam, rcNull );
+    }
+
+    if ( self -> Path == NULL ) {
+        return RC ( rcExe, rcFile, rcOpening, rcParam, rcNull );
+    }
+
+/*
+KOutMsg ( "[GGU] [OpenReadLocal] [%s]\n", self -> Name );
+*/
+/*
+RmOutMsg ( "|||<-- Opening [L] [%s][%s]\n", self -> Name, self -> Url );
+RmOutMsg ( "  |<-- Cache Entry [%s]\n", self -> Path );
+*/
+
+    RCt = KDirectoryNativeDir ( & Directory );
+    if ( RCt == 0 ) {
+        RCt = KDirectoryOpenFileRead ( Directory, & File, self -> Path );
+        if ( RCt == 0 ) {
+            self -> file = File;
+        }
+
+        ReleaseComplain ( KDirectoryRelease, Directory );
+    }
+
+    if ( RCt == 0 ) {
+        if ( self -> actual_size == 0 ) {
+            RCt = KFileSize ( self -> file, & ( self -> actual_size ) );
+        }
+    }
+
+    return RCt;
+}   /* _RCacneEntryOpenFileReadLocal () */
+
+rc_t CC
+_RCacheEntryGetAndCheckFile (
+                        struct RCacheEntry * self,
+                        const struct KFile ** File,
+                        bool * Synchronized
+)
+{
+    rc_t RCt;
+    struct KDirectory * NatDir;
+    bool OpenLocal;
+    bool OpenRemote;
+    bool CloseFile;
+    bool IsComplete;
+
+    RCt = 0;
+    NatDir = NULL;
+    OpenLocal = false;
+    OpenRemote = false;
+    CloseFile = false;
+    IsComplete = false;
+
+    if ( Synchronized != NULL ) {
+        * Synchronized = true;
+    }
+
+    if ( File != NULL ) {
+        * File = NULL;
+    }
+
+    if ( self == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    if ( File == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    if ( Synchronized == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+        /*  How it is work:
+         *
+         *  if file exists, it is complete and local, just open it
+         *  any read operation should be unsynchronized.
+         *
+         *  if file does not exists, but opened, we should call
+         *  IsCacheTeeComplete () and if it is complete we should
+         *  close file and open it as regular. Any reed operation
+         *  will be unsynchronized.
+         *
+         *  all other situations, it is not complete, open tee
+         *  all read operations are synchronized.
+         * 
+         *  if it diskless mode - all operations are synchronized
+         */
+
+        /*) Diskless mode.
+         (*/
+    if ( RemoteCacheIsDisklessMode () ) {
+        if ( self -> file == NULL ) {
+            RCt = _RCacheEntryOpenFileReadRemote ( self );
+        }
+
+        if ( RCt == 0 ) {
+            * File = self -> file;
+            * Synchronized = true;
+        }
+
+        return RCt;
+    }
+
+        /*) Normal mode
+         (*/
+    if ( self -> file == NULL ) {
+            /* Checking if it is known that file complete */
+        if ( self -> is_complete ) {
+            OpenLocal = true;
+        }
+        else {
+                /* Checking if file exist */
+            RCt = KDirectoryNativeDir ( & NatDir );
+            if ( RCt == 0 ) {
+                if ( KDirectoryPathType ( NatDir, self -> Path ) == kptFile ) {
+                    OpenLocal = true;
+                }
+                else {
+                    OpenRemote = true;
+                }
+
+                ReleaseComplain ( KDirectoryRelease, NatDir );
+            }
+        }
+    }
+    else {
+            /* Checking if it is known that file complete */
+        if ( self -> is_complete ) {
+            if ( ! self -> is_local ) {
+                CloseFile = true;
+                OpenLocal = true;
+            }
+        }
+        else {
+                /* checking completiness is quite heavy operation */
+            RCt = IsCacheTeeComplete ( self -> file, & IsComplete );
+            if ( RCt == 0 ) {
+                if ( IsComplete ) {
+                    CloseFile = true;
+                    OpenLocal = true;
+                }
+            }
+        }
+    }
+        /*) Stupid checks
+         (*/
+    if ( OpenLocal && OpenRemote ) {
+        RCt = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+    }
+
+    if ( CloseFile && self -> file == NULL ) {
+        RCt = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+    }
+
+        /*) Here we are trying to animate that object
+         (*/
+    if ( RCt == 0 ) {
+        if ( CloseFile ) {
+            RCt = _RCacheEntryReleaseWithoutLock ( self );
+/*
+RmOutMsg ( "|||<-- Close file [%s][%s] [A=%d]\n", self -> Name, self -> Path, RCt );
+*/
+        }
+
+        if ( OpenLocal ) {
+            self -> is_complete = true;
+            self -> is_local = true;
+            _CnPoolDrop ( self );
+            _CnEntDispose ( self );
+
+
+            RCt = _RCacheEntryOpenFileReadLocal ( self );
+/*
+RmOutMsg ( "|||<-- Open LOCAL file [%s][%s] [A=%d]\n", self -> Name, self -> Path, RCt );
+*/
+        }
+
+        if ( OpenRemote ) {
+            self -> is_complete = false;
+            self -> is_local = false;
+
+            RCt = _RCacheEntryOpenFileReadRemote ( self );
+/*
+RmOutMsg ( "|||<-- Open REMOTE file [%s][%s] [A=%d]\n", self -> Name, self -> Url, RCt );
+*/
+        }
+
+        if ( RCt == 0 ) {
+                /*  We should put connection to the front of pool
+                 */
+            RCt = _CnPoolToFront ( self );
+            if ( RCt == 0 ) {
+                * File = self -> file;
+                * Synchronized = ! self -> is_local;
+            }
+        }
+    }
+
+    return RCt;
+}   /* _RCacheEntryGetAndCheckFile () */
+
+rc_t CC
+_RCacheEntryDoRead (
+                struct RCacheEntry * self,
+                char * Buffer,
+                size_t SizeToRead,
+                uint64_t Offset,
+                size_t * NumReaded
+)
+{
+    rc_t RCt;
+    const struct KFile * File;
+    bool Synchronized;
+
+    RCt = 0;
+    File = NULL;
+    Synchronized = true;
+
+    if ( NumReaded != NULL ) {
+        * NumReaded = 0;
+    }
+
+    if ( self == NULL ) { 
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    if ( NumReaded == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+    }
+
+    if ( SizeToRead == 0 ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+    }
+
+        /*)  Here we are locking
+         (*/
+/*
+RmOutMsg ( "[KLockAcquire] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+    RCt = KLockAcquire ( self -> mutabor );
+    if ( RCt == 0 ) {
+        RCt = _RCacheEntryGetAndCheckFile (
+                                        self,
+                                        & File,
+                                        & Synchronized
+                                        );
+        if ( RCt == 0 ) {
+            if ( ! Synchronized ) {
+                    /*) do not need synchronisation to read local file
+                     (*/
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+                KLockUnlock ( self -> mutabor );
+            }
+
+            RCt = KFileRead (
+                            self -> file,
+                            Offset,
+                            Buffer,
+                            SizeToRead,
+                            NumReaded
+                            );
+/*
+RmOutMsg ( "|||<-- Reading [%s][%s] [O=%d][S=%d][R=%d][A=%d]\n", self -> Name, self -> Url, Offset, SizeToRead, * NumReaded, RCt );
+*/
+        }
+
+        if ( Synchronized ) {
+/*
+RmOutMsg ( "[KLockUnlock] [%p] [ %d]\n", ( void * ) self -> mutabor, __LINE__ );
+*/
+            KLockUnlock ( self -> mutabor );
+        }
+    }
+
+    if ( RCt != 0 ) {
+        * NumReaded = 0;
+
+/*
+RmOutMsg ( "|||<- Failed to read file [%s][%s] at attempt [+1]\n", self -> Name, self -> Url );
+*/
+        _CnPoolDrop ( self );
+        _CnEntDispose ( self );
+
+        // _RCacheEntryReleaseWithLock ( self );
+    }
+
+    return RCt;
+}   /* _RCacheEntryDoRead () */
+
+rc_t CC
+RCacheEntryRead (
+            struct RCacheEntry * self,
+            char * Buffer,
+            size_t SizeToRead,
+            uint64_t Offset,
+            size_t * NumReaded,
+            uint64_t * ActualSize
+)
+{
+    rc_t RCt;
+    int llp;
+    const int NumAttempts = 3;
+
+    RCt = 0;
+    llp = 0;
+
+    if ( self == NULL ) { 
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    for ( llp = 0; llp < NumAttempts; llp ++ ) {
+            /*) There could be non zero value from previous pass
+             (*/
+        if ( RCt != 0 ) {
+PLOGMSG ( klogErr, ( klogErr, "|||<- Trying to read file $(n) [$(u)] at attempt $(l)", PLOG_3(PLOG_S(n),PLOG_S(u),PLOG_I64(l)), self -> Name, self -> Url, llp + 1 ) );
+            RCt = 0;
+        }
+
+        RCt = _RCacheEntryDoRead (
+                                self,
+                                Buffer,
+                                SizeToRead,
+                                Offset,
+                                NumReaded
+                                );
+/*
+RmOutMsg ( "|||<-- Reading [%s][%s] [O=%d][S=%d][R=%d][A=%d]\n", self -> Name, self -> Url, Offset, SizeToRead, * NumReaded, RCt );
+*/
+        if ( RCt == 0 ) {
+            break;
+        }
+    }
+
+    if ( RCt != 0 ) {
+PLOGMSG ( klogErr, ( klogErr, "|||<- Failed to read file $(n)$(u) after $(l) attempts", PLOG_3(PLOG_S(n),PLOG_S(u),PLOG_I64(l)), self -> Name, self -> Url, llp + 1 ) );
+    }
+
+    if ( RCt == 0 ) {
+        if ( ActualSize != NULL ) {
+            * ActualSize = self -> actual_size;
+        }
+    }
+
+    return RCt;
+}   /* RCacheEntryRead () */
+
+/*)))
+ ///  That method will read KFile into a memory.
+ \\\  He-he, it will allocate +1 byte array and set 0 to last one.
+ ///  It suppose to read text files, so, 0 terminated string
+(((*/
+rc_t CC
+_ReadKFileToMemory (
+                const KFile * File,
+                char ** RetBuffer,
+                uint64_t * RetSize
+)
+{
+    rc_t RCt;
+    char * Buf;
+    size_t BufSize;
+
+    RCt = 0;
+    Buf = NULL;
+    BufSize = 0;
+
+    * RetBuffer = NULL;
+    * RetSize = 0;
+
+    if ( File == NULL || RetBuffer == NULL || RetSize == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    RCt = KFileSize ( File, & BufSize );
+    if ( RCt == 0 ) {
+
+        if ( BufSize != 0 ) {
+
+            Buf = ( char * ) calloc ( BufSize + 1, sizeof ( char ) );
+            if ( Buf == NULL ) {
+                RCt = RC ( rcExe, rcFile, rcAllocating, rcParam, rcNull );
+            }
+            else {
+                RCt = KFileReadExactly ( File, 0, Buf, BufSize );
+                if ( RCt == 0 ) {
+                    * ( Buf + BufSize ) = 0;
+                    * RetBuffer = Buf;
+                    * RetSize = BufSize;
+                }
+                else {
+                    free ( Buf );
+                    RCt = RC ( rcExe, rcFile, rcReading, rcParam, rcFailed );
+                    Buf = NULL;
+                    BufSize = 0;
+                }
+            }
+        }
+        else {
+            RCt = RC ( rcExe, rcFile, rcReading, rcParam, rcEmpty );
+        }
+    }
+
+    return RCt;
+}   /* _ReadKFileToMemory () */
+
+/*)))
+ ///  We need that method because KXML does not read document properly
+ \\\  from KFile over HTTP
+ ///
+(((*/
+rc_t CC
+ReadHttpFileToMemory (
+                    const char * Url,
+                    char ** RetBuffer,
+                    uint64_t * RetSize
+)
+{
+    rc_t RCt;
+    const KFile * File;
+
+    RCt = 0;
+    File = NULL;
+
+    if ( Url == NULL || RetBuffer == NULL || RetSize == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    RCt = KNSManagerMakeHttpFile (
+                                _ManagerOfKNS,
+                                & File,
+                                NULL,   /* no open connections */
+                                0x01010000,
+                                Url
+                                );
+    if ( RCt == 0 ) {
+        RCt = _ReadKFileToMemory ( File, RetBuffer, RetSize );
+
+        ReleaseComplain ( KFileRelease, File );
+    }
+
+    return RCt;
+}   /* ReadHttpFileToMemory () */
+
+/*)))
+ ///  We need that method because KXML does not read document properly
+ \\\  from KFile over HTTP
+ ///
+(((*/
+rc_t CC
+ReadLocalFileToMemory (
+                    const char * FileName,
+                    char ** RetBuffer,
+                    uint64_t * RetSize
+)
+{
+    rc_t RCt;
+    KDirectory * NativeDir;
+    const KFile * File;
+
+    RCt = 0;
+    NativeDir = NULL;
+    File = NULL;
+
+    RCt = KDirectoryNativeDir ( & NativeDir );
+    if ( RCt == 0 ) {
+
+        RCt = KDirectoryOpenFileRead ( NativeDir, & File, FileName );
+        if ( RCt == 0 ) {
+
+            RCt = _ReadKFileToMemory ( File, RetBuffer, RetSize );
+
+            KFileRelease ( File );
+        }
+
+        KDirectoryRelease ( NativeDir );
+    }
+
+    return RCt;
+}   /* ReadLocalFileToMemory () */
+
+rc_t CC
+ExecuteCGI ( const char * CGICommand )
+{
+    rc_t RCt;
+    const KFile * File;
+    uint64_t FileSize, ToRead, Pos;
+    char Buffer [ 4096 ];
+    size_t NumRead, BSize;
+
+    RCt = 0;
+    File = NULL;
+    FileSize = ToRead = Pos = 0;
+    NumRead = 0;
+    BSize = sizeof ( Buffer );
+
+    if ( CGICommand == NULL ) {
+        return RC ( rcExe, rcFile, rcReading, rcParam, rcNull );
+    }
+
+    RCt = KNSManagerMakeHttpFile (
+                                _ManagerOfKNS,
+                                & File,
+                                NULL,   /* no open connections */
+                                0x01010000,
+                                CGICommand
+                                );
+    if ( RCt == 0 ) {
+        RCt = KFileSize ( File, & FileSize );
+        if ( RCt == 0 ) {
+            Pos = 0;
+            NumRead = 0;
+
+            while ( 0 <= FileSize ) {
+                ToRead = FileSize < BSize ? FileSize : BSize ;
+                RCt = KFileRead (
+                                File,
+                                Pos,
+                                Buffer,
+                                BSize,
+                                & NumRead
+                                );
+                if ( RCt != 0 ) {
+                    break;
+                }
+
+                Pos += NumRead;
+                FileSize -= NumRead;
+            }
+        }
+
+        ReleaseComplain ( KFileRelease, File );
+    }
+
+    return RCt;
+}   /* ExecuteCGI () */
+
+/* just a test */
diff --git a/tools/fuse/remote-cache.h b/tools/fuse/remote-cache.h
new file mode 100644
index 0000000..1635904
--- /dev/null
+++ b/tools/fuse/remote-cache.h
@@ -0,0 +1,169 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_remote_cache_fuser_
+#define _h_remote_cache_fuser_
+
+/*
+ * Lyrics ... because quite exotic requirements of remote file access
+ * which means that we are accessing only files which will be described
+ * in XML file, there are several propositions which were made:
+ *   1) if there -x parameter to fuser contains URL path, we suppose
+ *      that fuser is working in REMOTE MODE
+ *   2) REMOTE MODE required parameter cache directory, and all files
+ *      will be accessed as CACHEDTEE files.
+ *   3) the XML document, which describes filesystem will contain only
+ *      these entries: Directory, File and another XML document.
+ *   4) cached files are valid only on session time, or at the time
+ *      while fuser is working. That means that each time when fuser
+ *      started, it removes all cached files, if those left from
+ *      previous session.
+ *   5) There could be two types of files: plain files and XML
+ *      documents, which represents filesystem node. Files are stored
+ *      in cache directory, and XML documents are loaded and interpreted
+ *      imediately
+ *   6) IMPORTANT: we are not going to initialize and start thread for
+ *      SRA_List, as for checking and updating XML_root document thread
+ *   8) I beleive that it could me much easiest way to write designated
+ *      application for accessing remote files, however, client wants
+ *      it as fuser extention
+ */
+
+/*)))
+ ///   MALICIOUS CODE ON
+(((*/
+
+/*))
+ //  That method will check if path is remote ... starts from "http"
+((*/
+bool CC IsRemotePath ( const char * Path );
+
+/*))
+ //  That method will check if path is local ... exists
+((*/
+bool CC IsLocalPath ( const char * Path );
+
+    /*)))
+     ///  Remote cache initialisation and so on
+    (((*/
+/* Lyrics:
+ * We consider that cache is a directory in local filesystem, which
+ * fully defined by it's path. The content of directory is valid only
+ * for session period, from the time of Cache Initialize to Finalize
+ * Once new session is started, the content of cache left from previous
+ * session is dropped. 
+ * For a moment we do beleive that we do have only one cache directory
+ * per session, which could be initialized only once
+ * UPDATE: from now we allow non-cacheing or diskless mode. In that case
+ *         fuzer will not create any additional files or directories and
+ *         will not use cachetee file, but direct HTTP connection 
+ */
+
+/* That structure will represent CacheFile
+ */
+struct RCacheEntry;
+
+    /*))
+     //  Three methods to work with CacheEntry
+    ((*/
+rc_t CC RCacheEntryAddRef ( struct RCacheEntry * self );
+rc_t CC RCacheEntryRelease ( struct RCacheEntry * self );
+rc_t CC RCacheEntryRead (
+                    struct RCacheEntry * self,
+                    char * Buffer,
+                    size_t BufferSize,
+                    uint64_t Offset,
+                    size_t * NumRead,
+                    uint64_t * ActualSize
+                    );
+    /*))
+     //  This method will set block size for HTTP transport
+     \\  If user want to use default block size value, 0 should
+     //  be used. Will return previous value for block size
+    ((*/
+uint32_t CC RemoteCacheSetHttpBlockSize ( uint32_t HttpBlockSize );
+
+    /*))
+     //  This method will set path for local cache dir
+     \\
+     //  NOTE: CachePath could be NULL, then it is diskless mode
+    ((*/
+rc_t CC RemoteCacheInitialize ( const char * CachePath );
+    /*))
+     //  This method will initialize local cache dir:
+     \\    It will create cache directory if it does not exist
+     //    It will remove all leftovers from previous session
+    ((*/
+rc_t CC RemoteCacheCreate ();
+    /*))
+     //  This method will finalise cache and destroy it's content
+    ((*/
+rc_t CC RemoteCacheDispose ();
+
+    /*))
+     //  Misc methods
+    ((*/
+const char * RemoteCachePath ();
+
+bool RemoteCacheIsDisklessMode ();
+
+rc_t CC RemoteCacheFindOrCreateEntry (
+                        const char * Url,
+                        struct RCacheEntry ** Entry
+                    );
+
+    /*))
+     //  Found that interesting
+    ((*/
+rc_t CC ReadHttpFileToMemory (
+                            const char * Url,
+                            char ** RetBuffer,
+                            uint64_t * RetSize
+                            );
+
+rc_t CC ReadLocalFileToMemory (
+                            const char * FileName,
+                            char ** RetBuffer,
+                            uint64_t * RetSize
+                            );
+
+rc_t CC ExecuteCGI ( const char * CGICommand );
+
+/*)))
+ ///  Shamefull macro
+(((*/
+ #define RM_DEAF_LGO
+
+ #ifdef RM_DEAF_LGO
+ #define RmOutMsg  KOutMsg
+ #else /* RM_DEAF_LGO */
+ #define RmOutMsg(...)
+ #endif /* RM_DEAF_LGO */
+
+/*)))
+ ///   MALICIOUS CODE OFF
+(((*/
+
+#endif /* _h_remote_cache_fuser_ */
diff --git a/tools/fuse/remote-directory.c b/tools/fuse/remote-directory.c
new file mode 100644
index 0000000..487fafe
--- /dev/null
+++ b/tools/fuse/remote-directory.c
@@ -0,0 +1,411 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <klib/container.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kproc/lock.h>
+
+typedef struct DirectoryNode DirectoryNode;
+#define FSNODE_IMPL DirectoryNode
+
+#include "log.h"
+#include "xml.h"
+#include "remote-directory.h"
+#include "kfile-accessor.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <time.h>
+
+typedef struct DirNodeChild_struct {
+    BSTNode node;
+    const char* full_name; /* full path to detected file */
+    const char* name; /* file name only within full_name above */
+    const FSNode* child;
+} DirNodeChild;
+
+
+static
+int64_t DirNodeChild_FindByName(const void *item, const BSTNode *node)
+{
+    return strcmp((const char*)item, ((const DirNodeChild*)node)->child->name);
+}
+
+static
+void DirNodeChild_Whack(BSTNode *node, void *data)
+{
+    DirNodeChild* n = (DirNodeChild*)node;
+
+    if( n != NULL ) {
+        DEBUG_LINE(8, "Releasing auto TAR %s", n->child->name);
+        FSNode_Release(n->child);
+        FREE(n);
+    }
+}
+
+struct DirectoryNode {
+    FSNode node;
+    char* path;
+    KTime_t mtime;
+    KRWLock* lock;
+    KTime_t timestamp;
+    /* list of physical files and dirs in 'path' minus those in children list */
+    KNamelist* ls; 
+    BSTree children;
+};
+
+struct DirNodeChild_List_Data {
+    rc_t rc;
+    const DirectoryNode* cself;
+    FSNode_Dir_Visit func;
+    void* data;
+};
+
+static
+bool DirNodeChild_List( BSTNode *node, void *data )
+{
+    DirNodeChild* n = (DirNodeChild*)node;
+    struct DirNodeChild_List_Data* d = (struct DirNodeChild_List_Data*)data;
+    const FSNode* ch;
+    bool hidden = true;
+
+    if( ((d->rc = FSNode_FindChild(&d->cself->node, n->child->name, strlen(n->child->name), &ch, &hidden)) == 0 && hidden) ||
+         (GetRCObject(d->rc) == rcName && GetRCState(d->rc) == rcNotFound) ) {
+        d->rc = d->func(n->child->name, d->data);
+    }
+    return d->rc != 0;
+}
+
+static
+rc_t DirectoryNode_Lock(const DirectoryNode* cself, bool exclusive)
+{
+    DEBUG_LINE(8, "Lock DirectoryNode %s %s", cself->path, exclusive ? "write" : "read");
+    return exclusive ? KRWLockAcquireExcl(((DirectoryNode*)cself)->lock) : KRWLockAcquireShared(((DirectoryNode*)cself)->lock);
+}
+
+static
+rc_t DirectoryNode_Unlock(const DirectoryNode* cself)
+{
+    DEBUG_LINE(8, "Unlocking DirectoryNode %s", cself->path);
+    return KRWLockUnlock(((DirectoryNode*)cself)->lock);
+}
+
+static
+rc_t DirectoryNode_IsChild(const DirectoryNode* cself, const char* subpath, const FSNode** node,
+                           int64_t (*finder)(const void *item, const BSTNode *node))
+{
+    DirNodeChild* n = (DirNodeChild*)BSTreeFind(&cself->children, subpath, finder);
+    if( n != NULL ) {
+        *node = n->child;
+    } else {
+        *node = NULL;
+        return RC(rcExe, rcFile, rcAccessing, rcName, rcNotFound);
+    }
+    return 0;
+}
+
+static
+rc_t DirectoryNode_Attr(const DirectoryNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    *type = kptDir;
+    if( cself->path != NULL ) {
+        KDirectory* dir = NULL;
+        const KDirectory* sub = NULL;
+
+        if( subpath != NULL && (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+            const FSNode* child = NULL;
+            if( (rc = DirectoryNode_IsChild(cself, subpath, &child, DirNodeChild_FindByName)) == 0 ) {
+                rc = FSNode_Attr(child, NULL, type, ts, file_sz, access, block_sz);
+            }
+            ReleaseComplain(DirectoryNode_Unlock, cself);
+            if( child != NULL ) {
+                return rc;
+            }
+        }
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 &&
+            (rc = KDirectoryOpenDirRead(dir, &sub, true, "%s", cself->path)) == 0 ) {
+            const char* path = subpath ? subpath : ".";
+            DEBUG_LINE(8, "Using full name %s/%s", cself->path, path);
+            if( (rc = KDirectoryDate(sub, ts, "%s", path)) == 0 ) {
+                *type = KDirectoryPathType(sub, "%s", path);
+                if( *type != kptBadPath && *type != kptNotFound ) {
+                    if( (rc = KDirectoryAccess(sub, access, "%s", path)) == 0 ) {
+                        if( *type & kptAlias ) {
+                            bool children;
+                            if( (rc = FSNode_HasChildren(&cself->node, &children)) == 0 ) {
+                                /* if it is pointer to an aliased directory and has no XML children than pass symlink on */
+                                if( children == false || subpath != NULL ) {
+                                    char r[4096];
+                                    if( (rc = KDirectoryResolveAlias(sub, true, r, sizeof(r), "%s", path)) == 0 ) {
+                                         DEBUG_LINE(8, "Symlink name %s", r);
+                                        *file_sz = strlen(r);
+                                    }
+                                } else {
+                                    /* otherwise remove alias bit */
+                                    *type = *type & ~kptAlias;
+                                }
+                            }
+                        } else if( *type == kptFile ) {
+                            rc = KDirectoryFileSize(sub, file_sz, "%s", path);
+                        }
+                    }
+                }
+            }
+        }
+        ReleaseComplain(KDirectoryRelease, sub);
+        ReleaseComplain(KDirectoryRelease, dir);
+    } else if( subpath != NULL ) {
+        rc = RC(rcExe, rcDirectory, rcEvaluating, rcDirEntry, rcNotFound);
+    }
+    if( subpath == NULL && cself->mtime != 0 ) {
+        *ts = cself->mtime;
+    }
+    return rc;
+}
+
+struct DirectoryNode_DirVisit_Data {
+    FSNode_Dir_Visit func;
+    void* data;
+};
+
+static
+rc_t CC DirectoryNode_DirVisit( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    struct DirectoryNode_DirVisit_Data* d = (struct DirectoryNode_DirVisit_Data*)data;
+    return d->func(name, d->data);
+}
+
+static
+rc_t DirectoryNode_Dir(const DirectoryNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL ) {
+        /* add XML tree children */
+        if( (rc = FSNode_ListChildren(&cself->node, func, data)) == 0 ) {
+            if( (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+                if( cself->ls != NULL ) {
+                    /* add ls result excluding XML children */
+                    uint32_t i = 0, count = 0;
+                    rc = KNamelistCount(cself->ls, &count);
+                    while(rc == 0 && i < count) {
+                        const char* nm = NULL;
+                        const FSNode* ch;
+                        bool hidden = true;
+                        if( (rc = KNamelistGet(cself->ls, i++, &nm)) == 0 &&
+                            (((rc = FSNode_FindChild(&cself->node, nm, strlen(nm), &ch, &hidden)) == 0 && hidden) ||
+                             (GetRCObject(rc) == rcName && GetRCState(rc) == rcNotFound)) ) {
+                            rc = func(nm, data);
+                        }
+                    }
+                }
+                if( rc == 0 ) {
+                    struct DirNodeChild_List_Data d;
+                    d.rc = 0;
+                    d.cself = cself;
+                    d.func = func;
+                    d.data = data;
+                    /* add detected child nodes excluding XML children */
+                    BSTreeDoUntil(&cself->children, false, DirNodeChild_List, &d);
+                    rc = d.rc;
+                }
+                ReleaseComplain(DirectoryNode_Unlock, cself);
+            }
+        }
+    } else {
+        KDirectory* dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            struct DirectoryNode_DirVisit_Data d;
+            d.func = func;
+            d.data = data;
+            DEBUG_LINE(8, "Listing kdir path %s/%s", cself->path, subpath);
+            rc = KDirectoryVisit(dir, false, DirectoryNode_DirVisit, &d, "%s/%s", cself->path, subpath);
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t DirectoryNode_Open(const DirectoryNode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        const char* nm = NULL;
+
+        if( (rc = DirectoryNode_Lock(cself, false)) == 0 ) {
+            const FSNode* child = NULL;
+            if( (rc = DirectoryNode_IsChild(cself, subpath, &child, DirNodeChild_FindByName)) == 0 ) {
+                rc = FSNode_Open(child, NULL, accessor);
+            }
+            ReleaseComplain(DirectoryNode_Unlock, cself);
+            if( child != NULL ) {
+                return rc;
+            }
+        }
+        if( (rc = FSNode_GetName(&cself->node, &nm)) == 0 ) {
+            KDirectory* dir = NULL;
+            if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                const KFile* kf = NULL;
+                if( (rc = KDirectoryOpenFileRead(dir, &kf, "%s/%s", cself->path, subpath)) == 0 ) {
+                    if( (rc = KFileAccessor_Make(accessor, nm, kf)) != 0 ) {
+                        ReleaseComplain(KFileRelease, kf);
+                    }
+                }
+                ReleaseComplain(KDirectoryRelease, dir);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t DirectoryNode_Release(DirectoryNode* self)
+{
+    rc_t rc = 0;
+    if( self != NULL ) {
+        BSTreeWhack(&self->children, DirNodeChild_Whack, NULL);
+        ReleaseComplain(KRWLockRelease, self->lock);
+        ReleaseComplain(KNamelistRelease, self->ls);
+        FREE(self->path);
+    }
+    return rc;
+}
+
+static FSNode_vtbl DirectoryNode_vtbl = {
+    sizeof(DirectoryNode),
+    NULL,
+    NULL,
+    DirectoryNode_Attr,
+    DirectoryNode_Dir,
+    NULL,
+    DirectoryNode_Open,
+    DirectoryNode_Release
+};
+
+
+rc_t RemoteDirectoryNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path, KTime_t dflt_ktm)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || cself == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcConstructing, rcParam, rcNull);
+    } else {
+        char* path = NULL, *name = NULL, name_buf[4096];
+        KTime_t ktm = 0;
+        DirectoryNode* ff = NULL;
+
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &path, NULL)) == 0 ) {
+            if( path[0] != '\0' ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            }
+            FREE(path);
+            path = NULL;
+        } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+        }
+        if( rc != 0 ) {
+            strcpy(errmsg, "Directory/@path: '");
+            strcat(errmsg, path ? path : "(null)");
+            strcat(errmsg, "'");
+        }
+        if( rc == 0 ) {
+            size_t sz;
+            rc = KXMLNodeReadAttrCString(xml_node, "name", name_buf, sizeof(name_buf), &sz);
+            if( rc == 0 && name_buf[0] != '\0' ) {
+                name = name_buf;
+            } else if( (GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound)  ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "Directory/@name");
+            } else if( name == NULL ) {
+                if( path == NULL ) {
+                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                } else {
+                    name = strrchr(path, '/');
+                    name = name ? name + 1 : path;
+                }
+            }
+        }
+        if( rc == 0 && (rc = XML_ParseTimestamp(xml_node, "timestamp", &ktm, true)) != 0 ) {
+            strcpy(errmsg, "Directory/@timestamp");
+        }
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("name", attr_nm) == 0 || strcmp("timestamp", attr_nm) == 0 ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute Directory/@");
+                        strcat(errmsg, attr_nm);
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)&ff, name, &DirectoryNode_vtbl)) == 0 &&
+                (rc = KRWLockMake(&ff->lock)) == 0 ) {
+                ff->path = path;
+                ff->mtime = ktm != 0 ? ktm : (path ? 0 : dflt_ktm);
+                BSTreeInit(&ff->children);
+            } else {
+                strcpy(errmsg, "Directory '");
+                strcat(errmsg, name);
+                strcat(errmsg, "'");
+            }
+        }
+        if( rc == 0 ) {
+            *cself = &ff->node;
+        } else {
+            FREE(path);
+        }
+    }
+    return rc;
+}   /* RemoteDirectoryNode_Make () */
diff --git a/tools/fuse/remote-directory.h b/tools/fuse/remote-directory.h
new file mode 100644
index 0000000..bfa0e27
--- /dev/null
+++ b/tools/fuse/remote-directory.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_directory_
+#define _h_sra_fuse_directory_
+
+#include "node.h"
+
+rc_t RemoteDirectoryNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path, KTime_t ts);
+
+#endif /* _h_sra_fuse_directory_ */
diff --git a/tools/fuse/remote-file.c b/tools/fuse/remote-file.c
new file mode 100644
index 0000000..f6b7b83
--- /dev/null
+++ b/tools/fuse/remote-file.c
@@ -0,0 +1,308 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <krypto/encfile.h>
+
+typedef struct RemoteFileNode RemoteFileNode;
+#define FSNODE_IMPL RemoteFileNode
+
+#include "log.h"
+#include "xml.h"
+#include "remote-file.h"
+#include "remote-cache.h"
+#include "kfile-accessor.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+rc_t RemoteFileAccessor_Make(const SAccessor** accessor, const char* name, struct RCacheEntry * rentry, const RemoteFileNode* node);
+
+struct RemoteFileNode {
+    FSNode node;
+    char* path;
+    KTime_t mtime;
+    uint64_t file_sz;
+};
+
+static
+rc_t RemoteFileNode_Attr(const RemoteFileNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    } else {
+            /* Here we are: all attributes from XML */
+        * type = kptFile;
+        * ts = cself -> mtime;
+        * file_sz = cself -> file_sz; 
+        * access = 0444;
+        * block_sz = ( 32 * 1024 ); /* <<-- Sorry, I borrowed that
+                                     * value from KCacheTeeFile
+                                     */
+    }
+
+    return rc;
+}
+
+static
+rc_t RemoteFileNode_Open(
+                    const RemoteFileNode* cself,
+                    const char* subpath,
+                    const SAccessor** accessor
+)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        struct RCacheEntry * ke = NULL;
+        if ( ( rc = RemoteCacheFindOrCreateEntry( cself->path, &ke )) == 0 ) {
+            if( rc == 0 ) {
+                if ( ( rc = RemoteFileAccessor_Make(
+                                                accessor,
+                                                cself->node.name,
+                                                ke,
+                                                cself
+                                                ) ) != 0 ) {
+                    ReleaseComplain(RCacheEntryRelease, ke);
+                }
+            }
+            
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t RemoteFileNode_Release(RemoteFileNode* self)
+{
+    if( self != NULL ) {
+        FREE(self->path);
+    }
+    return 0;
+}
+
+static FSNode_vtbl RemoteFileNode_vtbl = {
+    sizeof(RemoteFileNode),
+    NULL,
+    NULL,
+    RemoteFileNode_Attr,
+    NULL,
+    NULL,   /* Unlike FileNode, there are no links */
+    RemoteFileNode_Open,
+    RemoteFileNode_Release
+};
+
+rc_t RemoteFileNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || cself == NULL || errmsg == NULL || rel_path == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        char* path = NULL, *name = NULL, name_buf[4096];
+        KTime_t ktm = 0;
+        uint64_t fsz = 0;
+        RemoteFileNode* ff = NULL;
+        size_t attribute_sz = 0;
+
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &path, NULL)) == 0 ) {
+            if( path[0] == '\0' ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            } else {
+                /* NOTE: we do not check path for existence */
+                if ( ! IsRemotePath ( path ) ) {
+                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                }
+            }
+        }
+        if( rc != 0 ) {
+            strcpy(errmsg, "File/@path: '");
+            strcat(errmsg, path ? path : "(null)");
+            strcat(errmsg, "'");
+        }
+        if( rc == 0 ) {
+            rc = KXMLNodeReadAttrCString(xml_node, "name", name_buf, sizeof(name_buf), &attribute_sz);
+            if( rc == 0 && name_buf[0] != '\0' ) {
+                name = name_buf;
+            } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "File/@name");
+            } else if( name == NULL ) {
+                name = strrchr(path, '/');
+                name = name ? name + 1 : path;
+            }
+        }
+        if( rc == 0 && (rc = KXMLNodeReadAttrAsU64(xml_node, "size", &fsz)) != 0 ) {
+            strcpy(errmsg, "File/@size");
+        }
+/* Attributes "size" and "timestamp" are mandatory */
+        if ( fsz <= 0 ) {
+            strcpy(errmsg, "File/@size");
+            rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+        }
+        if( rc == 0 && (rc = XML_ParseTimestamp(xml_node, "timestamp", &ktm, true)) != 0 ) {
+            strcpy(errmsg, "File/@timestamp");
+        }
+        if ( ktm == 0 ) {
+            strcpy(errmsg, "File/@timestamp");
+            rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+        }
+/* Attributes "size" and "timestamp" are mandatory */
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("path", attr_nm) == 0
+                            || strcmp("name", attr_nm) == 0
+                            || strcmp("timestamp", attr_nm) == 0
+                            || strcmp("size", attr_nm) == 0 ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute File/@");
+                        strcat(errmsg, attr_nm);
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)&ff, name, &RemoteFileNode_vtbl)) == 0 ) {
+                ff->path = path;
+                ff->mtime = ktm;
+                ff->file_sz = fsz;
+            } else {
+                strcpy(errmsg, "File '");
+                strcat(errmsg, name);
+                strcat(errmsg, "'");
+            }
+        }
+        if( rc == 0 ) {
+            *cself = &ff->node;
+        } else {
+            FREE(path);
+        }
+    }
+    return rc;
+}
+
+/*)))
+ ///  Remote file accessor. Read behaviour differs from plain file
+(((*/
+
+typedef struct RemoteFileAccessor_struct {
+    struct RCacheEntry* rentry;
+    struct RemoteFileNode * remote_node;
+} RemoteFileAccessor;
+
+static
+rc_t RemoteFileAccessor_Read(const SAccessor* cself, char* buf, size_t size, off_t offset, size_t* num_read)
+{
+    rc_t rc = 0;
+    RemoteFileAccessor* self = (RemoteFileAccessor*)cself;
+    size_t actual = 0;
+    uint64_t actual_file_sz = self -> remote_node -> file_sz;
+
+        /* Here we are truncating size if it is needed */
+    if ( actual_file_sz < offset + size ) {
+        size = actual_file_sz - offset;
+    }
+    do {
+        rc = RCacheEntryRead (
+                    self -> rentry,
+                    &buf[*num_read],
+                    size - * num_read,
+                    offset + * num_read,
+                    &actual,
+                    &actual_file_sz
+                    );
+        if( rc != 0 ) {
+            break;
+        }
+        if( actual == 0 ) {
+            /* EOF */
+            break;
+        }
+
+        if ( actual_file_sz != self -> remote_node -> file_sz ) {
+            self -> remote_node -> file_sz = actual_file_sz;
+        }
+        *num_read += actual;
+    } while(rc == 0 && *num_read < size);
+    DEBUG_MSG(10, ("From %lu read %lu bytes\n", offset, *num_read));
+
+    return rc;
+}
+
+static
+rc_t RemoteFileAccessor_Release(const SAccessor* cself)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        RemoteFileAccessor* self = (RemoteFileAccessor*)cself;
+        rc = RCacheEntryRelease(self->rentry);
+    }
+    return rc;
+}
+
+rc_t
+RemoteFileAccessor_Make (
+                    const SAccessor** accessor,
+                    const char* name,
+                    struct RCacheEntry * rentry,
+                    const RemoteFileNode* node
+)
+{
+    rc_t rc = 0;
+
+    if( (rc = SAccessor_Make(accessor, sizeof(RemoteFileAccessor), name, RemoteFileAccessor_Read, RemoteFileAccessor_Release)) == 0 ) {
+        ((RemoteFileAccessor*)(*accessor))->rentry = rentry;
+        ((RemoteFileAccessor*)(*accessor))->remote_node = ( struct RemoteFileNode * ) node;
+
+        RCacheEntryAddRef ( rentry );
+    }
+    return rc;
+}
diff --git a/tools/fuse/remote-file.h b/tools/fuse/remote-file.h
new file mode 100644
index 0000000..f50a24c
--- /dev/null
+++ b/tools/fuse/remote-file.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_remote_file_
+#define _h_sra_fuse_remote_file_
+
+#include "node.h"
+
+rc_t RemoteFileNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path);
+
+#endif /* _h_sra_fuse_remote_file_ */
diff --git a/tools/fuse/remote-fuser.c b/tools/fuse/remote-fuser.c
new file mode 100644
index 0000000..cd13db3
--- /dev/null
+++ b/tools/fuse/remote-fuser.c
@@ -0,0 +1,206 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/args.h>
+#include <klib/out.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "log.h"
+#include "node.h"
+#include "accessor.h"
+
+#include "remote-xml.h"
+#include "remote-fuser.h"
+#include "remote-cache.h"
+
+typedef struct SRequest_struct {
+    const FSNode* node;
+    const char* subpath;
+} SRequest;
+
+static char* g_work_dir = NULL;
+
+static
+rc_t SRequestMake(SRequest* request, const char* path, bool recur)
+{
+    rc_t rc = 0;
+
+    if( request == NULL ) {
+        rc = RC(rcExe, rcFileDesc, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = XML_FindLock(path, recur, &request->node, &request->subpath);
+    }
+    return rc;
+}
+
+static
+void SRequestRelease(SRequest* request)
+{
+    if( request != NULL ) {
+        XML_FindRelease();
+    }
+}
+
+rc_t Initialize(unsigned int sra_sync, const char* xml_path, const char* cache_dir, const char* heart_beat_url, unsigned int xml_sync, const char* xml_root, uint32_t block_size)
+{
+    rc_t rc = 0;
+    KDirectory* dir = NULL;
+
+    if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        char buf[4096];
+        if( (rc = KDirectoryResolvePath(dir, true, buf, 4096, xml_root)) == 0 ) {
+            /* replace /. at the end to  just / */
+            if( strcmp(&buf[strlen(buf) - 2], "/.") == 0 ) {
+                buf[strlen(buf) - 1] = '\0';
+            }
+            /* add / to the end if missing */
+            if( buf[strlen(buf) - 1] != '/' ) {
+                buf[strlen(buf) + 1] = '\0';
+                buf[strlen(buf)] = '/';
+            }
+            if( (rc = StrDup(buf, &g_work_dir)) == 0 ) {
+                DEBUG_MSG(8, ("Current directory set to '%s'\n", g_work_dir));
+            }
+        }
+
+        if ( rc == 0 ) {
+            rc = RemoteCacheInitialize ( cache_dir );
+            if ( rc == 0 ) {
+                RemoteCacheSetHttpBlockSize ( block_size );
+
+                if ( IsLocalPath ( xml_path ) ) {
+                    KDirectoryResolvePath(dir, true, buf, 4096, xml_path);
+                    rc = XML_Make(dir, g_work_dir, buf, heart_beat_url, xml_sync);
+                }
+                else {
+                    rc = XML_Make(dir, g_work_dir, xml_path, heart_beat_url, xml_sync);
+                }
+            }
+        }
+        ReleaseComplain(KDirectoryRelease, dir);
+    }
+    return rc;
+}
+
+/* =============================================================================== */
+/* system call handlers */
+/* =============================================================================== */
+
+const char UsageDefaultName[] = "remote-fuser";
+
+rc_t CC UsageSummary (const char* progname)
+{
+    return KOutMsg("Usage:\n"
+        "\t%s [options] -o [FUSE options] -x path -m path\n"
+        "\t%s [options] -u -m path\n\n", progname, progname);
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    /* dummy for newer args system will be filled when system is complete!!! */
+    return 0;
+}
+
+void SRA_FUSER_Init(void)
+{
+    rc_t rc = 0;
+    /* reopen log file and start watch thread(s) */
+    if( (rc = LogFile_Init(NULL, 0, true, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "log file");
+    }
+    XML_Init();
+    LOGMSG(klogInfo, "Started");
+}
+
+void SRA_FUSER_Fini(void)
+{
+    XML_Fini();
+    LOGMSG(klogInfo, "Stopped");
+    LogFile_Fini();
+    FREE(g_work_dir);
+}
+
+rc_t SRA_FUSER_GetDir(const char* path, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, true)) == 0 ) {
+        rc = FSNode_Dir(request.node, request.subpath, func, data);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_GetAttr(const char* path, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Attr(request.node, request.subpath, type, ts, file_sz, access, block_sz);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_ResolveLink(const char* path, char* buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Link(request.node, request.subpath, buf, buf_sz);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_OpenNode(const char* path, const void** data)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Open(request.node, request.subpath, (const SAccessor**)data);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_ReadNode(const char* path, const void* data, char *buf, size_t size, off_t offset, size_t* num_read)
+{
+    return SAccessor_Read(data, buf, size, offset, num_read);
+}
+
+rc_t SRA_FUSER_CloseNode(const char* path, const void* data)
+{
+/*
+RmOutMsg (")_)_)_)_)__)_) SRA_FUSER_CloseNode\n" );
+*/
+    return SAccessor_Release(data);
+}
diff --git a/tools/fuse/remote-fuser.h b/tools/fuse/remote-fuser.h
new file mode 100644
index 0000000..80badaf
--- /dev/null
+++ b/tools/fuse/remote-fuser.h
@@ -0,0 +1,52 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_fuser_
+#define _h_sra_fuse_fuser_
+
+#include "node.h"
+
+uint32_t KAppVersion(void);
+
+/* TBH added cache_dir parameter, and xml_root, and block_size */
+rc_t Initialize(unsigned int sra_sync, const char* xml_path,
+                const char* cache_dir, const char* heart_beat_url,
+                unsigned int xml_sync, const char* xml_root,
+                uint32_t block_size);
+/* TBN */
+
+/* FUSE call backs */
+void SRA_FUSER_Init(void);
+void SRA_FUSER_Fini(void);
+
+rc_t SRA_FUSER_GetAttr(const char* path, uint32_t* type, KTime_t* date, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz);
+rc_t SRA_FUSER_GetDir(const char* path, FSNode_Dir_Visit func, void* data);
+rc_t SRA_FUSER_ResolveLink(const char* path, char* buf, size_t buf_sz);
+
+rc_t SRA_FUSER_OpenNode(const char* path, const void** data);
+rc_t SRA_FUSER_ReadNode(const char* path, const void* data, char *buf, size_t size, off_t offset, size_t* num_read);
+rc_t SRA_FUSER_CloseNode(const char* path, const void* data);
+
+#endif /* _h_sra_fuse_fuser_ */
diff --git a/tools/fuse/remote-link.c b/tools/fuse/remote-link.c
new file mode 100644
index 0000000..4354627
--- /dev/null
+++ b/tools/fuse/remote-link.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <krypto/encfile.h>
+
+typedef struct RemoteLinkNode RemoteLinkNode;
+#define FSNODE_IMPL RemoteLinkNode
+
+#include "log.h"
+#include "xml.h"
+#include "remote-link.h"
+#include "remote-cache.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+/**************************************************************
+ * UMBROCHUHVYR
+ * There is some info about links in that application
+ * We suppose that Link is a symbolic link, which have only one
+ * parameter path to the referred node. That path could be :
+ *   absolute - in that case node will be searched from root of
+ *              XML document describing that directory
+ *   relative - in that case node will be searched from current
+ *              link location.
+ **************************************************************/
+
+struct RemoteLinkNode {
+    FSNode node;
+    char* path;
+    KTime_t mtime;
+};
+
+static
+rc_t RemoteLinkNode_Attr(const RemoteLinkNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    } else {
+            /* Here we are: all attributes from XML */
+        * type = kptFile | kptAlias;
+        * ts = cself -> mtime;
+        * file_sz = 5; 
+        * access = 0777;
+        * block_sz = ( 32 * 1024 ); /* <<-- Sorry, I borrowed that
+                                     * value from KCacheTeeFile
+                                     */
+    }
+
+    return rc;
+}
+
+static
+rc_t RemoteLinkNode_Link(
+                    const RemoteLinkNode* cself,
+                    const char* subpath,
+                    char * Buffer,
+                    size_t BufferSize
+)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        size_t pathSize = string_measure ( cself -> path, NULL );
+        if ( Buffer == NULL || BufferSize <= pathSize ) {
+            rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcInvalid);
+        }
+        else {
+            string_copy ( Buffer, BufferSize, cself -> path, pathSize );
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t RemoteLinkNode_Release(RemoteLinkNode* self)
+{
+    if( self != NULL ) {
+        FREE(self->path);
+    }
+    return 0;
+}
+
+static FSNode_vtbl RemoteLinkNode_vtbl = {
+    sizeof(RemoteLinkNode),
+    NULL,
+    NULL,
+    RemoteLinkNode_Attr,
+    NULL,
+    RemoteLinkNode_Link,
+    NULL,
+    RemoteLinkNode_Release
+};
+
+rc_t RemoteLinkNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || cself == NULL || errmsg == NULL || rel_path == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        char* path = NULL, *name = NULL, name_buf[4096];
+        KTime_t ktm = 0;
+        RemoteLinkNode* ff = NULL;
+        size_t attribute_sz = 0;
+
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &path, NULL)) == 0 ) {
+            if( path[0] == '\0' ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            }
+        }
+        if( rc != 0 ) {
+            strcpy(errmsg, "File/@path: '");
+            strcat(errmsg, path ? path : "(null)");
+            strcat(errmsg, "'");
+        }
+        if( rc == 0 ) {
+            rc = KXMLNodeReadAttrCString(xml_node, "name", name_buf, sizeof(name_buf), &attribute_sz);
+            if( rc == 0 && name_buf[0] != '\0' ) {
+                name = name_buf;
+            } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "File/@name");
+            } else if( name == NULL ) {
+                name = strrchr(path, '/');
+                name = name ? name + 1 : path;
+            }
+        }
+        if( rc == 0 && (rc = XML_ParseTimestamp(xml_node, "timestamp", &ktm, true)) != 0 ) {
+            strcpy(errmsg, "File/@timestamp");
+        }
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("path", attr_nm) == 0
+                            || strcmp("name", attr_nm) == 0
+                            || strcmp("timestamp", attr_nm) == 0
+                            ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute File/@");
+                        strcat(errmsg, attr_nm);
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)&ff, name, &RemoteLinkNode_vtbl)) == 0 ) {
+                ff->path = path;
+                ff->mtime = ktm;
+            } else {
+                strcpy(errmsg, "File '");
+                strcat(errmsg, name);
+                strcat(errmsg, "'");
+            }
+        }
+        if( rc == 0 ) {
+            *cself = &ff->node;
+        } else {
+            FREE(path);
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/remote-link.h b/tools/fuse/remote-link.h
new file mode 100644
index 0000000..4322713
--- /dev/null
+++ b/tools/fuse/remote-link.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_remote_link_
+#define _h_sra_fuse_remote_link_
+
+#include "node.h"
+
+rc_t RemoteLinkNode_Make(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path);
+
+#endif /* _h_sra_fuse_remote_link_ */
diff --git a/tools/fuse/remote-xml.c b/tools/fuse/remote-xml.c
new file mode 100644
index 0000000..a94c293
--- /dev/null
+++ b/tools/fuse/remote-xml.c
@@ -0,0 +1,604 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+#include <klib/time.h>
+#include <klib/out.h>
+#include <kproc/lock.h>
+#include <kproc/thread.h>
+#include <kns/manager.h>
+#include <kns/http.h>
+
+#include "log.h"
+#include "remote-xml.h"
+#include "file.h"
+#include "node.h"
+
+#include "remote-file.h"
+#include "remote-directory.h"
+#include "remote-link.h"
+#include "remote-cache.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+static const KXMLMgr* g_xmlmgr = NULL;
+static const FSNode* g_root = NULL;
+static KRWLock* g_lock = NULL;
+static const char* g_start_dir = NULL;
+
+static unsigned int g_xml_sync = 0;
+/* if g_xml_sync == 0 these are not used: */
+static KTime_t g_xml_mtime = 0;
+static char* g_xml_path = NULL;
+static KThread* g_xml_thread = NULL;
+
+static char g_fuse_version [ 128 ];
+static char g_heart_beat_url_complete [ 4096 ];
+static char * g_heart_beat_url = NULL;
+static char * g_heart_beat_url_complete_p = NULL;
+
+static
+rc_t XMLLock(bool exclusive)
+{
+    DEBUG_MSG(10, ("Lock XML tree %s\n", exclusive ? "write" : "read"));
+    return exclusive ? KRWLockAcquireExcl(g_lock) : KRWLockAcquireShared(g_lock);
+}
+
+static
+void XMLUnlock(void)
+{
+    DEBUG_MSG(10, ("Unlocked XML tree\n"));
+    ReleaseComplain(KRWLockUnlock, g_lock);
+}
+
+void XML_FindRelease(void)
+{
+    XMLUnlock();
+}
+
+rc_t XML_FindLock(const char* path, bool recur, const FSNode** node, const char** subpath)
+{
+    rc_t rc = 0;
+    size_t sz = 0;
+    const char* p0 = NULL, *p = NULL;
+    const FSNode* pn = NULL, *n = NULL;
+    bool hidden = false;
+
+    if( path == NULL || node == NULL || subpath == NULL ) {
+        return RC(rcExe, rcPath, rcResolving, rcParam, rcNull);
+    }
+    sz = strlen(path);
+    if( sz == 0 ) {
+        return RC(rcExe, rcPath, rcResolving, rcParam, rcEmpty);
+    }
+    p0 = path;
+    if( (rc = XMLLock(false)) != 0 ) {
+        return rc;
+    }
+    pn = g_root;
+    do {
+        DEBUG_MSG(8, ("Path: '%s'\n", p0));
+        while( *p0 == '/' && *p0 != '\0' ) {
+            p0++;
+        }
+        if( *p0 == '\0' ) {
+            break;
+        }
+        p = strchr(p0, '/');
+        if( p == NULL ) {
+            p = p0 + strlen(p0);
+        }
+        DEBUG_MSG(8, ("Push: '%.*s'\n", p - p0, p0));
+        if( (rc = FSNode_FindChild(pn, p0, p - p0, &n, &hidden)) == 0 ) {
+            if( hidden ) {
+                pn = n;
+                DEBUG_MSG(8, ("Match! hidden '%s' left '%s'\n", pn->name, p0));
+                break;
+            } else {
+                DEBUG_MSG(8, ("Match! '%.*s' left '%s'\n", p - p0, p0, p));
+            }
+        } else if( GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+            break;
+        }
+        pn = n;
+        p0 = p;
+    } while( rc == 0 && p0 < path + sz );
+
+    if( rc == 0 ) {
+        if( pn == NULL ) {
+            rc = RC(rcExe, rcPath, rcResolving, rcDirEntry, rcNotFound);
+            DEBUG_MSG(10, ("Not found: '%s', in '%s'\n", p0, path));
+        } else {
+            if( (rc = FSNode_Touch(pn)) != 0 ) {
+                PLOGERR(klogWarn, (klogWarn, rc, "touch failed for $(n)", PLOG_S(n), pn->name));
+                rc = 0;
+            }
+            *node = pn;
+            *subpath = (p0 && p0[0] != '\0') ? p0 : NULL;
+#if _DEBUGGING
+            {
+                const char* nm = NULL;
+                FSNode_GetName(pn, &nm);
+                DEBUG_MSG(10, ("Found: '%s', sub '%s'\n", nm, *subpath));
+            }
+#endif
+        }
+    }
+    if( rc != 0 ) {
+        XMLUnlock();
+    }
+    return rc;
+}
+
+static
+rc_t XML_ValidateNode(FSNode* parent, const KXMLNode* n, char* errmsg)
+{
+    rc_t rc = 0;
+    const char* name = NULL;
+    FSNode* fsn = NULL;
+    bool children_allowed = false, should_have_children = false, ignore_children = false;
+
+    if( (rc = KXMLNodeElementName(n, &name)) != 0 ) {
+        return rc;
+    }
+    DEBUG_MSG(8, ("Node: %s\n", name));
+    if( name == NULL ) {
+        return RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcNull);
+    }
+
+    if( strcmp(name, "Directory") == 0 ) {
+        rc = RemoteDirectoryNode_Make(n, &fsn, errmsg, g_start_dir, g_xml_mtime);
+        children_allowed = true;
+    } else if( strcmp(name, "File") == 0 ) {
+        rc = RemoteFileNode_Make(n, &fsn, errmsg, g_start_dir);
+    } else if( strcmp(name, "Link") == 0 ) {
+        rc = RemoteLinkNode_Make(n, &fsn, errmsg, g_start_dir);
+    } else {
+        strcpy(errmsg, name);
+        rc = RC(rcExe, rcDoc, rcValidating, rcTag, rcUnknown);
+    }
+    if( rc == 0 ) {
+        strcpy(errmsg, name);
+        if( fsn == parent || (rc = FSNode_AddChild(parent, fsn)) == 0 ) {
+            uint32_t count = 0;
+            if( (rc = KXMLNodeCountChildNodes(n, &count)) == 0 && count > 0 ) {
+                if( !children_allowed ) {
+                    if( fsn != NULL ) {
+                        FSNode_GetName(fsn, &name);
+                    }
+                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                    strcpy(errmsg, name);
+                } else if( !ignore_children ) {
+                    uint32_t i = 0;
+                    const KXMLNode* ch = NULL;
+                    while( rc == 0 && i < count ) {
+                        if( (rc = KXMLNodeGetNodeRead(n, &ch, i++)) == 0 ) {
+                            rc = XML_ValidateNode(fsn, ch, errmsg);
+                            ReleaseComplain(KXMLNodeRelease, ch);
+                        }
+                    }
+                }
+            } else if( count == 0 && should_have_children ) {
+                PLOGMSG(klogWarn, (klogWarn, "$(n) may have children", PLOG_S(n), name));
+            }
+        }
+    }
+    return rc;
+}   /* XML_ValidateNode() */
+
+static
+rc_t RootNode_Attr(const FSNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    *type = kptDir;
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    }
+    return rc;
+}
+
+static
+rc_t RootNode_Dir(const FSNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    if( subpath != NULL ) {
+        return RC(rcExe, rcFile, rcListing, rcDirEntry, rcNotFound);
+    }
+    return FSNode_ListChildren(cself, func, data);
+}
+
+static const FSNode_vtbl RootNode_vtbl = {
+    sizeof(FSNode),
+    NULL,
+    NULL,
+    RootNode_Attr,
+    RootNode_Dir,
+    NULL,
+    NULL,
+    NULL
+};
+
+/*)))
+ ///  I make that method becaue I need also to retrieve version
+(((*/
+static
+rc_t _XML_DocumentOpenAndSomethingElse (
+                            const char * Url,
+                            const KXMLDoc ** Doc
+)
+{
+    rc_t RCt;
+    char * Buffer;
+    uint64_t BufferSize;
+    const KXMLDoc * XmlDoc;
+    const KXMLNodeset * NodeSet;
+    uint32_t NodeCount;
+    size_t AttrSize;
+    const KXMLNode * Node;
+
+    RCt = 0;
+    Buffer = NULL;
+    BufferSize = 0;
+    XmlDoc = NULL;
+    NodeSet = NULL;
+    NodeCount = AttrSize = 0;
+    Node = NULL;
+
+    if ( Url == NULL || Doc == NULL ) {
+        return RC ( rcXML, rcDoc, rcConstructing, rcParam, rcNull );
+    }
+    * Doc = NULL;
+
+    RCt = IsLocalPath ( Url )
+            ? ReadLocalFileToMemory ( Url, & Buffer, & BufferSize )
+            : ReadHttpFileToMemory ( Url, & Buffer, & BufferSize )
+            ;
+    if ( RCt == 0 ) {
+        RCt = KXMLMgrMakeDocReadFromMemory (
+                                        g_xmlmgr,
+                                        & XmlDoc,
+                                        Buffer,
+                                        BufferSize
+                                        );
+        if ( RCt == 0 ) {
+                /* Here we are ... retrieving '/FUSE' node
+                 */
+            RCt = KXMLDocOpenNodesetRead (
+                                        XmlDoc,
+                                        &NodeSet,
+                                        "/FUSE"
+                                        );
+            if ( RCt == 0 ) {
+                RCt = KXMLNodesetCount ( NodeSet, & NodeCount );
+                if ( RCt == 0 ) {
+                    if ( NodeCount != 1 ) {
+                        RCt = RC ( rcXML, rcDoc, rcConstructing, rcFormat, rcInvalid );
+                    }
+                    if ( RCt == 0 ) {
+                            /*  FUSE node is always alone
+                             */
+                        RCt = KXMLNodesetGetNodeRead (
+                                                    NodeSet,
+                                                    & Node,
+                                                    0
+                                                    );
+                        if ( RCt == 0 ) {
+                            RCt = KXMLNodeReadAttrCString (
+                                        Node,
+                                        "version",
+                                        g_fuse_version,
+                                        sizeof ( g_fuse_version ),
+                                        & AttrSize
+                                        );
+                            if ( RCt != 0 ) {
+                                /* There were no version defined */
+                                RmOutMsg ( "WARNING: No version provided\n" );
+                                RCt = 0;
+                            }
+                            else {
+                                /* TODO : set version  */
+                                if ( g_heart_beat_url != NULL ) {
+                                    RCt = string_printf (
+                                        g_heart_beat_url_complete,
+                                        sizeof ( g_heart_beat_url_complete ),
+                                        & AttrSize,
+                                        g_heart_beat_url,
+                                        g_fuse_version
+                                        );
+                                    if ( RCt == 0 ) {
+                                        g_heart_beat_url_complete_p = g_heart_beat_url_complete;
+                                    }
+                                }
+                            }
+
+                            ReleaseComplain ( KXMLNodeRelease, Node );
+                        }
+                    }
+                }
+
+                ReleaseComplain ( KXMLNodesetRelease, NodeSet );
+            }
+        }
+
+        free ( Buffer );
+    }
+
+    if ( RCt == 0 ) {
+        * Doc = XmlDoc;
+    }
+    else {
+        ReleaseComplain ( KXMLDocRelease, XmlDoc );
+    }
+
+    return RCt;
+}   /* _XML_DocumentOpenAndSomethingElse () */
+
+static
+rc_t XML_Open(const char* path, const FSNode** tree)
+{
+    rc_t rc = 0;
+    char errmsg[4096] = "";
+    const KXMLDoc* xmldoc = NULL;
+    
+    PLOGMSG(klogInfo, (klogInfo, "Reading XML file '$(x)'", PLOG_S(x), path));
+    if( (rc = _XML_DocumentOpenAndSomethingElse(path, &xmldoc)) == 0 ) {
+
+        if( (rc = FSNode_Make((FSNode**)tree, "ROOT", &RootNode_vtbl)) == 0 ) {
+            const KXMLNodeset* ns = NULL;
+            if( (rc = KXMLDocOpenNodesetRead(xmldoc, &ns, "/FUSE/*")) == 0 ) {
+                uint32_t count = 0;
+                if( (rc = KXMLNodesetCount(ns, &count)) == 0 ) {
+                    if( count == 0 ) {
+                        rc = RC(rcExe, rcDoc, rcValidating, rcData, rcEmpty);
+                    } else {
+                        uint32_t i = 0;
+                        while(rc == 0 && i < count) {
+                            const KXMLNode* n = NULL;
+                            if( (rc = KXMLNodesetGetNodeRead(ns, &n, i++)) == 0 ) {
+                                errmsg[0] = '\0';
+                                rc = XML_ValidateNode((FSNode*)*tree, n, errmsg);
+                                ReleaseComplain(KXMLNodeRelease, n);
+                            }
+                        }
+                    }
+                }
+                ReleaseComplain(KXMLNodesetRelease, ns);
+            }
+        }
+        if( rc != 0 ) {
+            FSNode_Release(*tree);
+            *tree = NULL;
+        }
+        ReleaseComplain(KXMLDocRelease, xmldoc);
+    }
+    if( rc == 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "XML file '$(x)' ok", PLOG_S(x), path));
+    } else {
+        if( strlen(errmsg) < 1 ) {
+            strcpy(errmsg, path);
+        }
+        LOGERR(klogErr, rc, errmsg);
+    }
+    return rc;
+}
+
+static
+rc_t XMLThread( const KThread *self, void *data )
+{
+    /* rc_t rc = 0; */
+
+    PLOGMSG(klogInfo, (klogInfo, "Heart beat thread started with $(s) sec", PLOG_U32(s), g_xml_sync));
+
+    do {
+        KSleepMs(g_xml_sync * 1000);
+
+        PLOGMSG(klogInfo, (klogInfo, "Heart beat working $(s)", PLOG_S(s), g_heart_beat_url_complete_p));
+
+        if ( g_heart_beat_url_complete_p != NULL ) {
+            /* rc = */ ExecuteCGI ( g_heart_beat_url_complete_p );
+        }
+    } while( g_xml_sync > 0 );
+    LOGMSG(klogInfo, "Heart beat thread ended");
+    return 0;
+}
+
+rc_t XML_Make(KDirectory* dir, const char* const work_dir, const char* xml_path, const char *heart_beat_url, unsigned int sync)
+{
+    rc_t rc = 0; 
+
+    g_xml_sync = sync;
+    if( g_xmlmgr == NULL && (rc = KXMLMgrMakeRead(&g_xmlmgr)) != 0 ) {
+        g_xmlmgr = NULL;
+        LOGERR(klogErr, rc, "XML manager");
+    } else {
+        if( (rc = StrDup(xml_path, &g_xml_path)) == 0 ) {
+            DEBUG_MSG(8, ("XML path set to '%s'\n", g_xml_path));
+        }
+        if ( heart_beat_url != NULL ) {
+            if( (rc = StrDup(heart_beat_url, & g_heart_beat_url) ) == 0 ) {
+                DEBUG_MSG(8, ("Heart Beat path set to '%s'\n", g_heart_beat_url));
+            }
+        }
+        else {
+            g_heart_beat_url = NULL;
+        }
+
+        g_start_dir = work_dir;
+    }
+    if( rc == 0 ) {
+        rc = FSNode_Make((FSNode**)&g_root, "ROOT", &RootNode_vtbl);
+    }
+    return rc;
+}
+
+void FUSER_abort ();
+
+void XML_Init(void)
+{
+    rc_t rc = 0;
+
+    * g_fuse_version = 0;
+    * g_heart_beat_url_complete = 0;
+
+    if( g_lock == NULL && (rc = KRWLockMake(&g_lock)) != 0 ) {
+        g_lock = NULL;
+        LOGERR(klogErr, rc, "XML lock");
+    }
+
+    PLOGMSG(klogInfo, (klogInfo, "XML file is URL '$(x)' ok", PLOG_S(x), g_xml_path));
+
+    rc = RemoteCacheCreate ();
+    if ( rc == 0 ) {
+        rc = XML_Open ( g_xml_path, & g_root );
+        if ( rc == 0 ) {
+                /*) Here we are starting special thtread, only if 
+                 /  users set up URL
+                (*/
+            if ( rc == 0 && g_heart_beat_url_complete_p != NULL ) {
+                if( (rc = KThreadMake(&g_xml_thread, XMLThread, NULL)) != 0 ) {
+                    LOGERR(klogErr, rc, "XML sync thread");
+                }
+            }
+            else {
+                LOGMSG(klogInfo, "Skipping starting of heart beat thread");
+            }
+        }
+    }
+
+    if ( rc != 0 ) {
+        FUSER_abort ();
+    }
+}
+
+void XML_Fini(void)
+{
+
+
+    g_xml_sync = 0;
+    if( g_xml_thread != NULL ) {
+        ReleaseComplain(KThreadCancel, g_xml_thread);
+        ReleaseComplain(KThreadRelease, g_xml_thread);
+    }
+    ReleaseComplain(KXMLMgrRelease, g_xmlmgr);
+    XMLLock(true);
+    FSNode_Release(g_root);
+    XMLUnlock();
+    ReleaseComplain(KRWLockRelease, g_lock);
+    FREE(g_xml_path);
+
+    RemoteCacheDispose ();
+
+    g_root = NULL;
+    g_lock = NULL;
+    g_start_dir = NULL;
+    g_xml_mtime = 0;
+    g_xml_path = NULL;
+    g_xml_thread = NULL;
+
+    * g_fuse_version = 0;
+    if ( g_heart_beat_url != NULL ) {
+        FREE(g_heart_beat_url);
+    }
+    g_heart_beat_url = NULL;
+    * g_heart_beat_url_complete = 0;
+    g_heart_beat_url_complete_p = NULL;
+}
+
+rc_t XML_MgrGet(const KXMLMgr** xmlmgr)
+{
+    if( xmlmgr == NULL ) {
+        return RC(rcExe, rcDoc, rcAccessing, rcParam, rcNull);
+    }
+    if( g_xmlmgr == NULL ) {
+        return RC(rcExe, rcPath, rcAccessing, rcMgr, rcNull);
+    }
+    *xmlmgr = g_xmlmgr;
+    return 0;
+}
+
+rc_t XML_ParseTimestamp(const KXMLNode* xml_node, const char* attr, KTime_t* timestamp, bool optional)
+{
+    rc_t rc;
+    char ts[128];
+    size_t sz;
+
+    if( (rc = KXMLNodeReadAttrCString(xml_node, attr, ts, sizeof(ts), &sz)) == 0 ) {
+        struct tm tm;
+        memset(&tm, 0, sizeof(tm));
+        if( strptime(ts, "%Y-%m-%dT%H:%M:%S", &tm) != NULL ) {
+            *timestamp = mktime(&tm);
+        } else {
+            rc = RC(rcExe, rcDoc, rcReading, rcAttr, rcInvalid);
+        }
+    } else if( optional && GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
+
+rc_t XML_WriteTimestamp(char* dst, size_t bsize, size_t *num_writ, KTime_t ts)
+{
+    struct tm* tm = localtime(&ts);
+
+    *num_writ = strftime(dst, bsize, "%a %Y-%m-%d %H:%M:%S %Z", tm);
+    if( *num_writ < 1 || *num_writ >= bsize ) {
+        return RC(rcExe, rcDoc, rcWriting, rcBuffer, rcInsufficient);
+    }
+    return 0;
+}
+
+rc_t XML_ParseBool(const KXMLNode* xml_node, const char* attr, bool* val, bool optional)
+{
+    rc_t rc;
+    char b[16];
+    size_t sz;
+
+    if( (rc = KXMLNodeReadAttrCString(xml_node, attr, b, sizeof(b), &sz)) == 0 ) {
+        if( strcasecmp(b, "true") == 0 || strcasecmp(b, "on") == 0 || strcasecmp(b, "yes") == 0 ) {
+            *val = true;
+        } else if( strcasecmp(b, "false") == 0 || strcasecmp(b, "off") == 0 || strcasecmp(b, "no") == 0 ) {
+            *val = false;
+        } else {
+            rc = RC(rcExe, rcDoc, rcReading, rcAttr, rcInvalid);
+        }
+    } else if( optional && GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
diff --git a/tools/fuse/remote-xml.h b/tools/fuse/remote-xml.h
new file mode 100644
index 0000000..5434b9c
--- /dev/null
+++ b/tools/fuse/remote-xml.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_xml_
+#define _h_sra_fuse_xml_
+
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+
+#include "node.h"
+
+typedef uint32_t EXMLValidate;
+enum {
+    eXML_NoCheck = 0,
+    eXML_NoFail,
+    eXML_Full
+};
+
+rc_t XML_Make(KDirectory* dir, const char* const work_dir, const char* xml_path, const char *heart_beat_url, unsigned int sync);
+
+void XML_Init(void);
+
+rc_t XML_FindLock(const char* path, bool recur, const FSNode** node, const char** subpath);
+
+void XML_FindRelease(void);
+
+rc_t XML_MgrGet(const KXMLMgr** xmlmgr);
+
+rc_t XML_ParseTimestamp(const KXMLNode* xml_node, const char* attr, KTime_t* tm, bool optional);
+
+rc_t XML_WriteTimestamp(char* dst, size_t bsize, size_t *num_writ, KTime_t ts);
+
+rc_t XML_ParseBool(const KXMLNode* xml_node, const char* attr, bool* val, bool optional);
+
+void XML_Fini(void);
+
+#endif /* _h_sra_fuse_xml_ */
diff --git a/tools/fuse/sra-directory.c b/tools/fuse/sra-directory.c
new file mode 100644
index 0000000..2d7e53b
--- /dev/null
+++ b/tools/fuse/sra-directory.c
@@ -0,0 +1,107 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <sra/sradb-priv.h>
+
+typedef struct SRADirectoryNode SRADirectoryNode;
+#define FSNODE_IMPL SRADirectoryNode
+
+#include "log.h"
+#include "xml.h"
+#include "sra-list.h"
+#include "sra-directory.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <time.h>
+
+struct SRADirectoryNode {
+    FSNode node;
+    const SRAListNode* sra;
+};
+
+static
+rc_t SRADirectoryNode_Attr(const SRADirectoryNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        *type = kptDir;
+        rc = SRAListNode_TableMTime(cself->sra, ts);
+    }
+    return rc;
+}
+
+static
+rc_t SRADirectoryNode_Dir(const SRADirectoryNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    if( subpath != NULL ) {
+        return RC(rcExe, rcSRA, rcEvaluating, rcDirEntry, rcInvalid);
+    }
+    return FSNode_ListChildren(&cself->node, func, data);
+}
+
+static
+rc_t SRADirectoryNode_Release(SRADirectoryNode* self)
+{
+    if( self != NULL ) {
+        SRAListNode_Release(self->sra);
+    }
+    return 0;
+}
+
+static FSNode_vtbl SRADirectoryNode_vtbl = {
+    sizeof(SRADirectoryNode),
+    NULL,
+    NULL,
+    SRADirectoryNode_Attr,
+    SRADirectoryNode_Dir,
+    NULL,
+    NULL,
+    SRADirectoryNode_Release
+};
+
+rc_t SRADirectoryNode_Make(FSNode** self, const char* name, const SRAListNode* sra)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || sra == NULL ) {
+        rc = RC(rcExe, rcDirectory, rcConstructing, rcParam, rcNull);
+    } else {
+        if( (rc = FSNode_Make(self, name, &SRADirectoryNode_vtbl)) == 0 ) {
+            SRAListNode_AddRef(sra);
+            ((SRADirectoryNode*)*self)->sra = sra;
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/sra-directory.h b/tools/fuse/sra-directory.h
new file mode 100644
index 0000000..7a4b7f7
--- /dev/null
+++ b/tools/fuse/sra-directory.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_sra_directory_
+#define _h_sra_fuse_sra_directory_
+
+#include "node.h"
+
+rc_t SRADirectoryNode_Make(FSNode** self, const char* name, const SRAListNode* sra);
+
+#endif /* _h_sra_fuse_sra_directory_ */
diff --git a/tools/fuse/sra-fastq.c b/tools/fuse/sra-fastq.c
new file mode 100644
index 0000000..ea83ef8
--- /dev/null
+++ b/tools/fuse/sra-fastq.c
@@ -0,0 +1,245 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kproc/lock.h>
+#include <kdb/table.h>
+#include <kdb/index.h>
+
+#include <sra/sradb-priv.h>
+#include <sra/fastq.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "log.h"
+#include "xml.h"
+#include "sra-list.h"
+#include "sra-fastq.h"
+#include "zlib-simple.h"
+
+typedef struct SRAFastqFile SRAFastqFile;
+#define KFILE_IMPL SRAFastqFile
+#include <kfs/impl.h>
+
+struct SRAFastqFile {
+    KFile dad;
+    uint32_t buffer_sz;
+    uint64_t file_sz;
+    char* gzipped; /* serves as flag and a buffer */
+    KLock* lock;
+    const SRATable* stbl;
+    const KTable* ktbl;
+    const KIndex* kidx;
+    const FastqReader* reader;
+    /* current buf content */
+    uint64_t from;
+    uint64_t size;
+    char* buf;
+};
+
+static
+rc_t SRAFastqFile_Destroy(SRAFastqFile *self)
+{
+    if( KLockAcquire(self->lock) == 0 ) {
+        ReleaseComplain(FastqReaderWhack, self->reader);
+        ReleaseComplain(KIndexRelease, self->kidx);
+        ReleaseComplain(KTableRelease, self->ktbl);
+        ReleaseComplain(SRATableRelease, self->stbl);
+        FREE(self->buf < self->gzipped ? self->buf : self->gzipped);
+        ReleaseComplain(KLockUnlock, self->lock);
+        ReleaseComplain(KLockRelease, self->lock);
+        FREE(self);
+    }
+    return 0;
+}
+
+static
+struct KSysFile* SRAFastqFile_GetSysFile(const SRAFastqFile *self, uint64_t *offset)
+{
+    *offset = 0;
+    return NULL;
+}
+
+static
+rc_t SRAFastqFile_RandomAccess(const SRAFastqFile *self)
+{
+    return 0;
+}
+
+static
+uint32_t SRAFastqFile_Type(const SRAFastqFile *self)
+{
+    return kfdFile;
+}
+
+static
+rc_t SRAFastqFile_Size(const SRAFastqFile *self, uint64_t *size)
+{
+    *size = self->file_sz;
+    return 0;
+}
+
+static
+rc_t SRAFastqFile_SetSize(SRAFastqFile *self, uint64_t size)
+{
+    return RC(rcExe, rcFile, rcUpdating, rcInterface, rcUnsupported);
+}
+
+static
+rc_t SRAFastqFile_Read(const SRAFastqFile* self, uint64_t pos, void *buffer, size_t size, size_t *num_read)
+{
+    rc_t rc = 0;
+
+    if( pos >= self->file_sz ) {
+        *num_read = 0;
+    } else if( (rc = KLockAcquire(self->lock)) == 0 ) {
+        do {
+            if( pos < self->from || pos >= (self->from + self->size) ) {
+                int64_t id = 0;
+                uint64_t id_qty = 0;
+                DEBUG_MSG(10, ("Caching for pos %lu %lu bytes\n", pos, size - *num_read));
+                if( (rc = KIndexFindU64(self->kidx, pos, &((SRAFastqFile*)self)->from, &((SRAFastqFile*)self)->size, &id, &id_qty)) == 0 ) {
+                    DEBUG_MSG(10, ("Caching from %lu:%lu, %lu bytes\n", self->from, self->from + self->size - 1, self->size));
+                    DEBUG_MSG(10, ("Caching spot %ld, %lu spots\n", id, id_qty));
+                    if( (rc = FastqReaderSeekSpot(self->reader, id)) == 0 ) {
+                        size_t inbuf = 0, w = 0;
+                        char* b = self->buf;
+                        uint64_t left = self->buffer_sz;
+                        do {
+                            if( (rc = FastqReader_GetCurrentSpotSplitData(self->reader, b, left, &w)) != 0 ) {
+                                break;
+                            }
+                            b += w; left -= w; inbuf += w; --id_qty;
+                        } while( id_qty > 0 && (rc = FastqReaderNextSpot(self->reader)) == 0);
+                        if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted ) {
+                            DEBUG_MSG(10, ("No more rows\n"));
+                            rc = 0;
+                        }
+                        DEBUG_MSG(8, ("Cached %u bytes\n", inbuf));
+                        if( self->gzipped != NULL ) {
+                            size_t compressed = 0;
+                            if( (rc = ZLib_DeflateBlock(self->buf, inbuf, self->gzipped, self->buffer_sz, &compressed)) == 0 ) {
+                                char* b = self->buf;
+                                ((SRAFastqFile*)self)->buf = self->gzipped;
+                                ((SRAFastqFile*)self)->gzipped = b;
+                                ((SRAFastqFile*)self)->size = compressed;
+                                DEBUG_MSG(10, ("gzipped %lu bytes\n", self->size));
+                            }
+                        }
+                    }
+                }
+            }
+            if( rc == 0 ) {
+                off_t from = pos - self->from;
+                size_t q = (self->size - from) > (size - *num_read) ? (size - *num_read) : (self->size - from);
+                DEBUG_MSG(10, ("Copying from %lu %u bytes\n", from, q));
+                memmove(&((char*)buffer)[*num_read], &self->buf[from], q);
+                *num_read = *num_read + q;
+                pos += q;
+            }
+        } while( rc == 0 && *num_read < size && pos < self->file_sz );
+        ReleaseComplain(KLockUnlock, self->lock);
+    }
+    return rc;
+}
+
+static
+rc_t SRAFastqFile_Write(SRAFastqFile *self, uint64_t pos, const void *buffer, size_t size, size_t *num_writ)
+{
+    return RC(rcExe, rcFile, rcWriting, rcInterface, rcUnsupported);
+}
+
+static KFile_vt_v1 SRAFastqFile_vtbl = {
+    1, 1,
+    SRAFastqFile_Destroy,
+    SRAFastqFile_GetSysFile,
+    SRAFastqFile_RandomAccess,
+    SRAFastqFile_Size,
+    SRAFastqFile_SetSize,
+    SRAFastqFile_Read,
+    SRAFastqFile_Write,
+    SRAFastqFile_Type
+};
+
+rc_t SRAFastqFile_Open(const KFile** cself, const SRAListNode* sra, const FileOptions* opt)
+{
+    rc_t rc = 0;
+    SRAFastqFile* self;
+    CALLOC( self, 1, sizeof( *self ) );
+    if( self == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        if ( ( rc = KFileInit( &self->dad, (const KFile_vt*)&SRAFastqFile_vtbl, "SRAFastqFile", "no-name", true, false ) ) == 0 )
+        {
+            if ( ( rc = SRAListNode_TableOpen( sra, &self->stbl ) ) == 0 )
+            {
+                if ( ( rc = SRATableGetKTableRead( self->stbl, &self->ktbl ) ) == 0 )
+                {
+                    if ( ( rc = KTableOpenIndexRead( self->ktbl, &self->kidx, opt->index ) ) == 0 )
+                    {
+                        if ( ( rc = KLockMake( &self->lock ) ) == 0 )
+                        {
+                            MALLOC( self->buf, opt->buffer_sz * ( opt->f.fastq.gzip ? 2 : 1 ) );
+                            if ( self->buf == NULL )
+                            {
+                                rc = RC( rcExe, rcFile, rcOpening, rcMemory, rcExhausted );
+                            }
+                            else
+                            {
+                                self->file_sz = opt->file_sz;
+                                self->buffer_sz = opt->buffer_sz;
+                                if ( opt->f.fastq.gzip )
+                                {
+                                    self->gzipped = &self->buf[ opt->buffer_sz ];
+                                }
+                                self->from = ~0; /* reset position beyond file end */
+                                rc = FastqReaderMake( &self->reader, self->stbl,
+                                                      opt->f.fastq.accession, opt->f.fastq.colorSpace,
+                                                      opt->f.fastq.origFormat, false, opt->f.fastq.printLabel,
+                                                      opt->f.fastq.printReadId, !opt->f.fastq.clipQuality, false,
+                                                      opt->f.fastq.minReadLen, opt->f.fastq.qualityOffset,
+                                                      opt->f.fastq.colorSpaceKey,
+                                                      opt->f.fastq.minSpotId, opt->f.fastq.maxSpotId );
+                            }
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+            {
+                *cself = &self->dad;
+            }
+            else
+            {
+                KFileRelease( &self->dad );
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/sra-fastq.h b/tools/fuse/sra-fastq.h
new file mode 100644
index 0000000..d851575
--- /dev/null
+++ b/tools/fuse/sra-fastq.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sra_fuse_sra_fastq_
+#define _h_sra_fuse_sra_fastq_
+
+#include "node.h"
+
+rc_t SRAFastqFile_Open(const KFile** cself, const SRAListNode* sra, const FileOptions* opt);
+
+#endif /* _h_sra_fuse_sra_fastq_ */
diff --git a/tools/fuse/sra-fuser-test.c b/tools/fuse/sra-fuser-test.c
new file mode 100644
index 0000000..ef4cc79
--- /dev/null
+++ b/tools/fuse/sra-fuser-test.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+
+#define MAX_THREADS 20
+#define CHUNK_SZ 4200
+
+int fin = 0;
+int fout = 0;
+off_t file_sz;
+off_t step;
+
+typedef struct thread_data_struct {
+    int id;
+} thread_data;
+
+void* thread_func(void *v)
+{
+    char buf[CHUNK_SZ];
+    thread_data* data = v;
+    off_t pos = (data->id - 1) * CHUNK_SZ;
+
+    printf("Thread %i started\n", data->id);
+
+    while( pos < file_sz ) {
+        ssize_t i = pread(fin, buf, CHUNK_SZ, pos);
+        if( i < 0 ) {
+            printf("Thread %i %lu:%lu: %s\n", data->id, pos, pos + CHUNK_SZ - 1, strerror(errno));
+            break;
+        }
+        pwrite(fout, buf, i, pos);
+        pos += step;
+    }
+    printf("Thread %i finished\n", data->id);
+    return v;
+}
+
+
+int main (int argc, char* argv[])
+{
+    pthread_t threads[MAX_THREADS];
+    thread_data threads_data[MAX_THREADS];
+    int i, threads_qty = 0;
+    struct stat stat;
+
+    if( argc < 4 ) {
+        printf("\nUsage:\n\ttest num_threads input_file output_file\n\n");
+        return 1;
+    }
+    threads_qty = atoi(argv[1]);
+    if( threads_qty < 2 || threads_qty > MAX_THREADS ) {
+        printf("num_threads out of range: [2:%i]\n", MAX_THREADS);
+        return 2;
+    }
+    if( (fin = open(argv[2], O_RDONLY, 0)) < 0) {
+        printf("Cannot read file '%s': %s\n", argv[2], strerror(errno));
+        return 3;
+    }
+    if( fstat(fin, &stat) != 0 ) {
+        printf("Cannot stat '%s': %s\n", argv[2], strerror(errno));
+        return 3;
+    }
+    printf("File size: %lu bytes\n", stat.st_size);
+
+    if( stat.st_size / threads_qty / CHUNK_SZ < 10 ) {
+        printf("Need bigger file or less threads to test \n");
+        return 5;
+    }
+    if( (fout = creat(argv[3], 0)) < 0 ) {
+        printf("Cannot write file '%s': %s\n", argv[3], strerror(errno));
+        return 4;
+    }
+    file_sz = stat.st_size;
+    step = threads_qty * CHUNK_SZ;
+
+    for(i = 0; i < threads_qty; i++) {
+        threads_data[i].id = i + 1;
+        if( pthread_create(&threads[i], NULL, thread_func, &threads_data[i]) != 0 ) {
+            printf("Cannot pthread_create %i: %s\n", i + 1, strerror(errno));
+            return 14;
+        }
+    }
+
+    for(i = 0; i < threads_qty; i++) {
+        thread_data* data;
+        if( pthread_join(threads[i], (void**)&data) != 0 ) {
+            printf("Cannot pthread_join %i: %s\n", i + 1, strerror(errno));
+        }
+    }
+
+    close(fin);
+    close(fout);
+    return 0;
+}
diff --git a/tools/fuse/sra-fuser.c b/tools/fuse/sra-fuser.c
new file mode 100644
index 0000000..fca5d0e
--- /dev/null
+++ b/tools/fuse/sra-fuser.c
@@ -0,0 +1,195 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/args.h>
+#include <klib/out.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "xml.h"
+#include "sra-fuser.h"
+#include "log.h"
+#include "node.h"
+#include "accessor.h"
+#include "sra-list.h"
+
+typedef struct SRequest_struct {
+    const FSNode* node;
+    const char* subpath;
+} SRequest;
+
+static char* g_work_dir = NULL;
+
+static
+rc_t SRequestMake(SRequest* request, const char* path, bool recur)
+{
+    rc_t rc = 0;
+
+    if( request == NULL ) {
+        rc = RC(rcExe, rcFileDesc, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = XML_FindLock(path, recur, &request->node, &request->subpath);
+    }
+    return rc;
+}
+
+static
+void SRequestRelease(SRequest* request)
+{
+    if( request != NULL ) {
+        XML_FindRelease();
+    }
+}
+
+rc_t Initialize(unsigned int sra_sync, const char* xml_path, unsigned int xml_sync,
+                const char* SRA_cache_path, const char* xml_root, EXMLValidate xml_validate)
+{
+    rc_t rc = 0;
+    KDirectory* dir = NULL;
+
+    if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        char buf[4096];
+        if( (rc = KDirectoryResolvePath(dir, true, buf, 4096, xml_root)) == 0 ) {
+            /* replace /. at the end to  just / */
+            if( strcmp(&buf[strlen(buf) - 2], "/.") == 0 ) {
+                buf[strlen(buf) - 1] = '\0';
+            }
+            /* add / to the end if missing */
+            if( buf[strlen(buf) - 1] != '/' ) {
+                buf[strlen(buf) + 1] = '\0';
+                buf[strlen(buf)] = '/';
+            }
+            if( (rc = StrDup(buf, &g_work_dir)) == 0 ) {
+                DEBUG_MSG(8, ("Current directory set to '%s'\n", g_work_dir));
+            }
+        }
+        if( rc == 0 && (rc = SRAList_Make(dir, sra_sync, SRA_cache_path)) != 0 ) {
+            LOGERR(klogErr, rc, "SRA");
+        } else {
+            rc = XML_Make(dir, g_work_dir, xml_path, xml_sync, xml_validate);
+        }
+        ReleaseComplain(KDirectoryRelease, dir);
+    }
+    return rc;
+}
+
+/* =============================================================================== */
+/* system call handlers */
+/* =============================================================================== */
+
+const char UsageDefaultName[] = "sra-fuser";
+
+rc_t CC UsageSummary (const char* progname)
+{
+    return KOutMsg("Usage:\n"
+        "\t%s [options] -o [FUSE options] -x file -m path\n"
+        "\t%s [options] -u -m path\n\n", progname, progname);
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    /* dummy for newer args system will be filled when system is complete!!! */
+    return 0;
+}
+
+void SRA_FUSER_Init(void)
+{
+    rc_t rc = 0;
+    /* reopen log file and start watch thread(s) */
+    if( (rc = LogFile_Init(NULL, 0, true, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "log file");
+    }
+    SRAList_Init(); /* this preceeeds XML_Init */
+    XML_Init();     /* or SRAList may become corrupt */
+    LOGMSG(klogInfo, "Started");
+}
+
+void SRA_FUSER_Fini(void)
+{
+    SRAList_Fini();
+    XML_Fini();
+    LOGMSG(klogInfo, "Stopped");
+    LogFile_Fini();
+    FREE(g_work_dir);
+}
+
+rc_t SRA_FUSER_GetDir(const char* path, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, true)) == 0 ) {
+        rc = FSNode_Dir(request.node, request.subpath, func, data);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_GetAttr(const char* path, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Attr(request.node, request.subpath, type, ts, file_sz, access, block_sz);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_ResolveLink(const char* path, char* buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Link(request.node, request.subpath, buf, buf_sz);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_OpenNode(const char* path, const void** data)
+{
+    rc_t rc = 0;
+    SRequest request;
+
+    if( (rc = SRequestMake(&request, path, false)) == 0 ) {
+        rc = FSNode_Open(request.node, request.subpath, (const SAccessor**)data);
+        SRequestRelease(&request);
+    }
+    return rc;
+}
+
+rc_t SRA_FUSER_ReadNode(const char* path, const void* data, char *buf, size_t size, off_t offset, size_t* num_read)
+{
+    return SAccessor_Read(data, buf, size, offset, num_read);
+}
+
+rc_t SRA_FUSER_CloseNode(const char* path, const void* data)
+{
+    return SAccessor_Release(data);
+}
diff --git a/tools/fuse/sra-fuser.h b/tools/fuse/sra-fuser.h
new file mode 100644
index 0000000..7999745
--- /dev/null
+++ b/tools/fuse/sra-fuser.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_fuser_
+#define _h_sra_fuse_fuser_
+
+#include "node.h"
+
+uint32_t KAppVersion(void);
+
+rc_t Initialize(unsigned int sra_sync, const char* xml_path, unsigned int xml_sync,
+                const char* SRA_cache_path, const char* xml_root, EXMLValidate xml_validate);
+
+/* FUSE call backs */
+void SRA_FUSER_Init(void);
+void SRA_FUSER_Fini(void);
+
+rc_t SRA_FUSER_GetAttr(const char* path, uint32_t* type, KTime_t* date, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz);
+rc_t SRA_FUSER_GetDir(const char* path, FSNode_Dir_Visit func, void* data);
+rc_t SRA_FUSER_ResolveLink(const char* path, char* buf, size_t buf_sz);
+
+rc_t SRA_FUSER_OpenNode(const char* path, const void** data);
+rc_t SRA_FUSER_ReadNode(const char* path, const void* data, char *buf, size_t size, off_t offset, size_t* num_read);
+rc_t SRA_FUSER_CloseNode(const char* path, const void* data);
+
+#endif /* _h_sra_fuse_fuser_ */
diff --git a/tools/fuse/sra-fuser.xsd b/tools/fuse/sra-fuser.xsd
new file mode 100644
index 0000000..1935e51
--- /dev/null
+++ b/tools/fuse/sra-fuser.xsd
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:element name="TAR">
+    <xs:annotation>
+      <xs:documentation>This could be used to create an automatic tar archive within directory specified by a physical Directory node in main fuse.xml file.</xs:documentation>
+    </xs:annotation>
+  </xs:element>
+        
+  <xs:element name="FUSE">
+    <xs:annotation>
+      <xs:documentation>Main sra-fuser virtual directory structure root.</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="AllEntries">
+          <xs:sequence>
+            <xs:element name="TAR" type="TARType" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:complexType name="AllEntries">
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="Directory" minOccurs="0" maxOccurs="unbounded">
+        <xs:complexType>
+          <xs:complexContent>
+            <xs:extension base="DirectoryType"/>
+          </xs:complexContent>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="File" minOccurs="0" maxOccurs="unbounded">
+        <xs:complexType>
+          <xs:complexContent>
+            <xs:extension base="FileType"/>
+          </xs:complexContent>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="SRA" minOccurs="0" maxOccurs="unbounded">
+        <xs:complexType>
+          <xs:complexContent>
+            <xs:extension base="SRAType"/>
+          </xs:complexContent>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="SRAConfig" minOccurs="0" maxOccurs="1">
+        <xs:complexType>
+          <xs:complexContent>
+            <xs:extension base="SRAConfigType"/>
+          </xs:complexContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="DirectoryType">
+    <xs:annotation>
+      <xs:documentation>If Directory has path attribute it will detect presence of *.tar.xml files 
+                        with root node TAR (see above) and automatically create .tar file out of detect file's content.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="AllEntries">
+        <xs:sequence>
+          <xs:element name="TAR" type="TARType" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute ref="name" use="optional" >
+          <xs:annotation>
+            <xs:documentation>Must have name OR path, or both</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="path" type="xs:anyURI" use="optional">
+          <xs:annotation>
+            <xs:documentation>absolute or relative path to a physical directory</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute ref="timestamp" use="optional"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  
+  <xs:complexType name="FileType">
+    <xs:attribute ref="name" use="optional" >
+      <xs:annotation>
+        <xs:documentation>May be used to override original file name in path</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="path" type="xs:anyURI" use="required">
+      <xs:annotation>
+        <xs:documentation>absolute or relative path to a file</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute ref="timestamp" use="optional" />
+    <xs:attribute name="password" type="xs:string" use="optional" />
+  </xs:complexType>
+
+  <xs:complexType name="SRAType">
+    <xs:attribute name="accession" use="required" type="xs:NCName" >
+      <xs:annotation>
+        <xs:documentation>SRA accession used to open the run</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="path" type="xs:anyURI" use="optional">
+      <xs:annotation>
+        <xs:documentation>path is used for direct opening of the tables, for automatic search do not specify</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <!-- next 5 attributes must always come together if present -->
+    <xs:attribute ref="timestamp" use="optional">
+      <xs:annotation>
+        <xs:documentation>time stamp of the size/md5 attribute values</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="size.sra" type ="xs:nonNegativeInteger" use="optional">
+      <xs:annotation>
+        <xs:documentation>file size in bytes</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="md5.sra" type ="xs:hexBinary" use="optional">
+      <xs:annotation>
+        <xs:documentation>MD5 sum of the file</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="size.lite.sra" type ="xs:nonNegativeInteger" use="optional">
+      <xs:annotation>
+        <xs:documentation>file size in bytes</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="md5.lite.sra" type ="xs:hexBinary" use="optional">
+      <xs:annotation>
+        <xs:documentation>MD5 sum of the file</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  
+  <xs:complexType name="SRAConfigType">
+    <xs:complexContent>
+      <xs:extension base="AllEntries">
+        <xs:annotation>
+          <xs:documentation>Initially all attributes are TRUE, as first config node is encountered only attributes set to TRUE in THAT node are active all others become FALSE</xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="run-directory" type="xs:boolean" use="optional" default="false" >
+          <xs:annotation>
+            <xs:documentation>Create run directory for the SRA node</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="SRA-archive" type="xs:boolean" use="optional" default="false" />
+        <xs:attribute name="SRA-archive-lite" type="xs:boolean" use="optional" default="false" />
+        <xs:attribute name="fastq" type="xs:boolean" use="optional" default="false" /> 
+        <xs:attribute name="SFF" type="xs:boolean" use="optional" default="false" />
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  
+  <xs:complexType name="TARType">
+    <xs:complexContent>
+      <xs:extension base="TARItemList">
+        <xs:attribute ref="name" use="required">
+          <xs:annotation>
+            <xs:documentation>Ignored in dynamically loaded .tar.xml files, .tar.xml file name is used, ex: data5.tar.xml -> data5.tar</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  
+  <xs:complexType name="TARItem">
+    <xs:attribute name="name" type="xs:anyURI" use="optional" >
+      <xs:annotation>
+        <xs:documentation>Cannot start with '/'. If omitted, portion of path after last '/' is used</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="path" type="xs:anyURI" use="required">
+      <xs:annotation>
+        <xs:documentation>Absolute or relative path to a file. In case of automatic tar relative
+                          paths will be resolved to from directory where .tar.xml is located.</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute ref="timestamp" use="optional"/>
+    <xs:attribute name="size" use="required" type="xs:nonNegativeInteger">
+      <xs:annotation>
+        <xs:documentation>Actual file size is required to pre-calc resulting file .tar size</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="executable" type="xs:boolean" use="optional" default="false">
+        <xs:annotation>
+            <xs:documentation>Indicate if files has executable type</xs:documentation>
+        </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  
+  <xs:complexType name="TARItemList">
+      <xs:sequence>
+        <xs:element name="Item" type="TARItem" minOccurs="1" maxOccurs="unbounded" />
+      </xs:sequence>
+  </xs:complexType>
+  
+  <xs:attribute name="name" type="xs:NCName"/>
+  
+  <xs:attribute name="timestamp" type="xs:dateTime">
+    <xs:annotation>
+      <xs:documentation>Sets timestamp on a node formatted: YYYY-MM-DDTHH:MM:SS</xs:documentation>
+    </xs:annotation>
+  </xs:attribute>
+  
+</xs:schema>
diff --git a/tools/fuse/sra-list.c b/tools/fuse/sra-list.c
new file mode 100644
index 0000000..48bfeb8
--- /dev/null
+++ b/tools/fuse/sra-list.c
@@ -0,0 +1,1225 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/printf.h>
+#include <klib/refcount.h>
+#include <kxml/xml.h>
+#include <kdb/namelist.h>
+#include <kproc/thread.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <errno.h>
+#include <pthread.h>
+#include <time.h>
+
+#include <sra/sradb-priv.h>
+#include <sra/impl.h>
+
+#include "log.h"
+#include "xml.h"
+#include "sra-list.h"
+#include "sra-directory.h"
+#include "sra-node.h"
+#include "formats.h"
+
+#include <stdlib.h>
+#include <strtol.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+
+static KRWLock* g_lock = NULL;
+static BSTree g_list;
+static uint64_t g_version = 0;
+static const SRAMgr* g_sra_mgr = NULL;
+/* hack to prevent opentable collapse */
+static KLock* g_sra_mgr_lock = NULL;
+/* SRA tables states cache file for quick restart */
+static char* g_cache_file = NULL;
+/* tmp name for cache file */
+static char* g_cache_file_tmp = NULL;
+static const uint32_t g_cache_version = 4;
+
+static unsigned int g_sync = 0;
+static KThread* g_thread = NULL;
+/*async update queue and thread */
+static SLList g_queue;
+static volatile uint64_t g_queue_depth;
+static KCondition* g_queue_cond;
+static KThread* g_queue_thread = NULL;
+static KLock* g_queue_lock = NULL;
+static pthread_mutex_t g_refresh_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t g_refresh_cond = PTHREAD_COND_INITIALIZER;
+
+struct SRAListNode {
+    BSTNode dad;
+    atomic32_t refcount;
+    char* accession;
+    char* path;
+    FileOptions* files;
+    uint32_t files_count;
+    KTime_t mtime; /* table mtime */
+    KTime_t utime; /* node update time */
+    uint32_t version; /* source xml version */
+};
+
+typedef struct SRAQueueNode_struct {
+    SLNode dad;
+    SRAListNode* node;
+    KTime_t mtime; /* original node update time */
+} SRAQueueNode;
+
+void CC SRAQueue_Whack( SLNode *n, void *data )
+{
+    if( n != NULL ) {
+        FREE(n);
+    }
+}
+
+static
+rc_t SRAList_Queue_Lock(void)
+{
+    DEBUG_LINE(8, "Lock SRA %s", "queue");
+    return KLockAcquire(g_queue_lock);
+}
+
+static
+void SRAList_Queue_Unlock(void)
+{
+    DEBUG_LINE(8, "Unlock SRA %s", "queue");
+    ReleaseComplain(KLockUnlock, g_queue_lock);
+}
+
+static
+rc_t SRAList_Lock(bool exclusive)
+{
+    DEBUG_LINE(8, "Lock SRA list %s", exclusive ? "write" : "read");
+    return exclusive ? KRWLockAcquireExcl(g_lock) : KRWLockAcquireShared(g_lock);
+}
+
+static
+void SRAList_Unlock(void)
+{
+    DEBUG_LINE(8, "Unlocked SRA list", "");
+    ReleaseComplain(KRWLockUnlock, g_lock);
+}
+
+static
+rc_t SRAList_Mgr(const SRAMgr** mgr)
+{
+    rc_t rc = 0;
+    if( g_sra_mgr_lock == NULL && (rc = KLockMake(&g_sra_mgr_lock)) != 0 ) {
+        g_sra_mgr_lock = NULL;
+        LOGERR(klogErr, rc, "SRA manager lock");
+    } else if( g_sra_mgr == NULL ) {
+        PLOGMSG(klogInfo, (klogInfo, "VDB_CONFIG=$(var)", PLOG_S(var), getenv("VDB_CONFIG")));
+        if( (rc = SRAMgrMakeRead(&g_sra_mgr)) != 0 ) {
+            g_sra_mgr = NULL;
+            LOGERR(klogErr, rc, "SRA manager");
+        } else {
+            DEBUG_LINE(8, "SRA manager created 0x%p", g_sra_mgr);
+        }
+    }
+    if( rc == 0 ) {
+        *mgr = g_sra_mgr;
+    }
+    return rc;
+}
+
+rc_t SRAListNode_TableMTime(const SRAListNode* cself, KTime_t* mtime)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || mtime == NULL ) {
+        rc = RC(rcExe, rcTable, rcResolving, rcParam, rcNull);
+    } else {
+        const SRAMgr* mgr;
+        DEBUG_LINE(10, "%s path '%s'", cself->accession, cself->path);
+        if( (rc = SRAList_Mgr(&mgr)) == 0 ) {
+            rc = SRAMgrGetTableModDate(mgr, mtime, "%s", cself->path ? cself->path : cself->accession);
+        }
+    }
+    return rc;
+}
+
+rc_t SRAListNode_TableOpen(const SRAListNode* cself, const SRATable** tbl)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || tbl == NULL ) {
+        rc = RC(rcExe, rcTable, rcOpening, rcParam, rcNull);
+    } else {
+        const SRAMgr* mgr;
+        DEBUG_LINE(10, "%s path '%s'", cself->accession, cself->path);
+        if( (rc = SRAList_Mgr(&mgr)) == 0 && (rc = KLockAcquire(g_sra_mgr_lock)) == 0 ) {
+            KLogLevel lvl = KLogLevelGet();
+            KLogLevelSet(klogInfo - 1);
+            rc = SRAMgrOpenTableRead(mgr, tbl, "%s", cself->path ? cself->path : cself->accession);
+            KLogLevelSet(lvl);
+            ReleaseComplain(KLockUnlock, g_sra_mgr_lock);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SRAListNode_KConfigReload(void)
+{
+    rc_t rc = 0;
+
+    if( BSTreeFirst(&g_list) != NULL ) {
+        const SRAMgr* mgr;
+        if( (rc = SRAList_Mgr(&mgr)) == 0 && (rc = KLockAcquire(g_sra_mgr_lock)) == 0 ) {
+            DEBUG_LINE(10, "VDB_CONFIG=%s", getenv("VDB_CONFIG"));
+            rc = SRAMgrConfigReload(mgr, NULL);
+            ReleaseComplain(KLockUnlock, g_sra_mgr_lock);
+            if( rc != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "SRA config reload with VDB_CONFIG=$(var)", PLOG_S(var), getenv("VDB_CONFIG")));
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRAListNode_AddRef(const SRAListNode* cself)
+{
+    if( cself == NULL ) {
+        return RC(rcExe, rcTable, rcAttaching, rcSelf, rcNull);
+    }
+    atomic32_add(&((SRAListNode*)cself)->refcount, 1);
+    return 0;
+}
+
+void SRAListNode_Release(const SRAListNode* cself)
+{
+    SRAListNode* self = (SRAListNode*)cself;
+    if( self != NULL && atomic32_dec_and_test(&self->refcount) ) {
+        DEBUG_LINE(10, "%s: %s", self->accession, self->path);
+        FREE(self->accession);
+        FREE(self->path);
+        FREE(self->files);
+        FREE(self);
+    }
+}
+
+static
+void SRAList_Whack(BSTNode* node, void* data)
+{
+    SRAListNode_Release((SRAListNode*)node);
+}
+
+static
+void SRAListNode_Version(BSTNode* node, void* data)
+{
+    SRAListNode* n = (SRAListNode*)node;
+    uint32_t* qty = (uint32_t*)data;
+
+    if( n->version < g_version ) {
+        BSTreeUnlink(&g_list, node);
+        SRAListNode_Release(n);
+        *qty = *qty + 1;
+    }
+}
+
+rc_t SRAList_NextVersion(void)
+{
+    rc_t rc = 0;
+    uint32_t qty = 0;
+
+    DEBUG_LINE(8, "SRA setting version to %u", g_version + 1);
+    if( (rc = SRAList_Lock(true)) == 0 ) {
+        g_version++;
+        BSTreeForEach(&g_list, false, SRAListNode_Version, &qty);
+        SRAList_Unlock();
+        DEBUG_LINE(8, "SRA version set to %u, %u runs dropped", g_version, qty);
+    }
+    return rc;
+}
+
+typedef struct SRAListNode_FindData_struct {
+    char* accession;
+    char* path;
+    KTime_t timestamp;
+    struct {
+        int type;
+        const char* ext;
+        uint64_t size;
+        char md5[32 + 1];
+    } attr[2];
+} SRAListNode_FindData;
+
+static
+int64_t SRAListNode_Cmp(const SRAListNode_FindData* l, const SRAListNode* r)
+{
+    int d = strcmp(l->accession, r->accession);
+    if( d == 0 && l->path != r->path ) {
+        if( l->path == NULL && r->path != NULL ) {
+            d = -1024;
+        } else if( l->path != NULL && r->path == NULL ) {
+            d = 1024;
+        } else {
+            d = strcmp(l->path, r->path);
+        }
+    }
+    return d;
+}
+
+static
+int64_t SRAListNode_Find(const void* item, const BSTNode* node)
+{
+    return SRAListNode_Cmp((SRAListNode_FindData*)item, (SRAListNode*)node);
+}
+
+static
+int64_t SRAListNode_Sort(const BSTNode *item, const BSTNode *node)
+{
+    SRAListNode* i = (SRAListNode*)item;
+    SRAListNode_FindData data;
+
+    data.accession = i->accession;
+    data.path = i->path;
+
+    return SRAListNode_Cmp(&data, (SRAListNode*)node);
+}
+
+static
+rc_t SRAListNode_Insert(SRAListNode_FindData* data, uint64_t version, SRAListNode** found)
+{
+    rc_t rc = 0;
+
+    *found = NULL; 
+    if( (rc = SRAList_Lock(true)) == 0 ) {
+        *found = (SRAListNode*)BSTreeFind(&g_list, data, SRAListNode_Find);
+        if( *found != NULL ) {
+            DEBUG_LINE(8, "found SRA list node %u. %s, %s", (*found)->version, data->accession, data->path);
+            atomic32_add(&(*found)->refcount, 1); /* for here */
+            if( version > (*found)->version ) {
+                (*found)->version = version;
+            }
+        } else {
+            CALLOC(*found, 1, sizeof(**found));
+            if( *found == NULL ) {
+                rc = RC(rcExe, rcTable, rcInserting, rcMemory, rcExhausted);
+            } else {
+                KRefcountInit(&((*found)->refcount), 1, "SRAListNode", "Make", "");
+                (*found)->accession = data->accession;
+                (*found)->path = data->path;
+                atomic32_set(&(*found)->refcount, 2); /* one for the list and 1 for here */
+                (*found)->version = version;
+                DEBUG_LINE(8, "SRA list new node %u. %s, %s", (*found)->version, (*found)->accession, (*found)->path);
+                BSTreeInsert(&g_list, &(*found)->dad, SRAListNode_Sort);
+                data->accession = NULL;
+                data->path = NULL;
+            }
+        }
+        if( rc == 0 && data->timestamp != 0 && (*found)->mtime != data->timestamp ) {
+            if( (*found)->files_count > 0 ) {
+                uint32_t i, j;
+                for(j = 0; rc == 0 && j < (*found)->files_count; j++) {
+                    for(i = 0; rc == 0 && i < sizeof(data->attr) / sizeof(data->attr[0]); i++) {
+                        if( (*found)->files[j].type == data->attr[i].type ) {
+                            if( (rc = FileOptions_SRAArchiveUpdate(&(*found)->files[j], (*found)->accession,
+                                data->timestamp, data->attr[i].size, data->attr[i].md5)) == 0 ) {
+                                    DEBUG_LINE(10, "updated %s %lu %s", (*found)->accession,
+                                        data->attr[i].size, data->attr[i].md5);
+                            }
+                        }
+                    }
+                }
+            } else {
+                uint32_t i;
+                const SRAMgr* mgr;
+
+                (*found)->files_count = sizeof(data->attr) / sizeof(data->attr[0]) * 2;
+                if( (rc = FileOptions_Make(&(*found)->files, (*found)->files_count)) == 0 &&
+                    (rc = SRAList_Mgr(&mgr)) == 0 ) {
+                    for(i = 0; rc == 0 && i < sizeof(data->attr) / sizeof(data->attr[0]); i++) {
+                        if( (rc = FileOptions_SRAArchiveInstant(&(*found)->files[i * 2], &(*found)->files[i * 2 + 1],
+                           mgr, (*found)->accession, (*found)->path,
+                           data->attr[i].type == eSRAFuseFmtArcLite, data->timestamp, data->attr[i].size, data->attr[i].md5)) == 0 ) {
+                            DEBUG_LINE(10, "added %s %lu %s", (*found)->accession, data->attr[i].size, data->attr[i].md5);
+                        }
+                    }
+                }
+            }
+            if( rc == 0 ) {
+                (*found)->mtime = data->timestamp;
+                DEBUG_LINE(10, "set %s timestamp %lu", (*found)->accession, (*found)->mtime);
+            } else if( data->accession == NULL ) {
+                FREE(*found);
+            }
+        }
+        SRAList_Unlock();
+    }
+    return rc;
+}
+
+static
+rc_t SRAListNode_MakeXML(const KXMLNode* xml_node, SRAListNode_FindData* data, char* errmsg, const char* rel_path, EXMLValidate validate)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || data == NULL ) {
+        rc = RC(rcExe, rcTable, rcConstructing, rcParam, rcNull);
+    } else {
+        uint32_t i, has_attrs = 0;
+        if( (rc = KXMLNodeReadAttrCStr(xml_node, "accession", &data->accession, NULL)) != 0 || data->accession[0] == '\0') {
+            strcpy(errmsg, "attribute 'accession'");
+            rc = rc ? rc : RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+        }
+        if( rc == 0 ) {
+            data->timestamp = 0;
+            if( (rc = XML_ParseTimestamp(xml_node, "timestamp", &data->timestamp, true)) != 0 ) {
+                strcpy(errmsg, "attribute 'timestamp'");
+            } else if( data->timestamp != 0 ) {
+                has_attrs++;
+            }
+        }
+        for(i = 0; rc == 0 && i < sizeof(data->attr) / sizeof(data->attr[0]); i++) {
+            size_t num_read;
+            char b[128];
+
+            if( (rc = string_printf(b, sizeof(b) - 1, NULL, "md5%s", data->attr[i].ext)) == 0 ) {
+                if( (rc = KXMLNodeReadAttrCString(xml_node, b, data->attr[i].md5, sizeof(data->attr[i].md5), &num_read)) == 0 ) {
+                    has_attrs++;
+                    if( num_read != sizeof(data->attr[i].md5) - 1) {
+                        rc = RC(rcExe, rcDoc, rcValidating, rcChecksum, rcInvalid);
+                    }
+                } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+                    rc = 0;
+                }
+            }
+            if( rc != 0 ) {
+                strcpy(errmsg, "attribute 'md5");
+                strcat(errmsg, data->attr[i].ext);
+                strcat(errmsg, "'");
+            } else {
+                if( (rc = string_printf(b, sizeof(b) - 1, NULL, "size%s", data->attr[i].ext)) == 0 ) {
+                    if( (rc = KXMLNodeReadAttrCString(xml_node, b, b, sizeof(b), &num_read)) == 0 ) {
+                        char* end;
+                        has_attrs++;
+                        data->attr[i].size = strtou64(b, &end, 10);
+                        if( end - b != num_read ) {
+                            rc = RC(rcExe, rcDoc, rcValidating, rcSize, rcInvalid);
+                        }
+                    } else if( GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+                        rc = 0;
+                    }
+                }
+                if( rc != 0 ) {
+                    strcpy(errmsg, "attribute 'size");
+                    strcat(errmsg, data->attr[i].ext);
+                    strcat(errmsg, "'");
+                }
+            }
+        }
+        if( rc == 0 && has_attrs != 0 && has_attrs != 3 && has_attrs != 5 ) {
+            if( validate > eXML_NoFail ) {
+                rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+            } else {
+                data->timestamp = 0;
+                PLOGMSG(klogErr, (klogErr, "SRA node $(a) attributes incomplete", "a=%s", data->accession));
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = KXMLNodeReadAttrCStr(xml_node, "path", &data->path, "")) == 0 ) {
+                if( data->path[0] == '\0' ) {
+                    free(data->path);
+                    data->path = NULL;
+                } else {
+                    KDirectory* dir = NULL;
+                    if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                        char resolved[4096];
+                        size_t num_writ;
+                        if( data->path[0] == '/' ) {
+                            rc = string_printf(resolved, sizeof(resolved), &num_writ, "%s", data->path);
+                        } else if( (rc = KDirectoryResolvePath(dir, true, resolved, sizeof(resolved),
+                                                                      "%s%s", rel_path, data->path)) == 0 ) {
+                            DEBUG_LINE(8, "%s%s resolved to %s", rel_path, data->path, resolved);
+                        }
+                        if( rc == 0 && validate > eXML_NoCheck ) {
+                            uint32_t typ = KDirectoryPathType(dir, resolved);
+                            if( typ != kptDir && typ != (kptDir | kptAlias) &&
+                                typ != kptFile && typ != (kptFile | kptAlias)) {
+                                if( validate > eXML_NoFail ) {
+                                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, typ == kptNotFound ? rcNotFound : rcInvalid);
+                                } else {
+                                    PLOGMSG(klogErr, (klogErr, "SRA path '$(p)' not found", "p=%s", resolved));
+                                }
+                            }
+                        }
+                        if( rc == 0 ) {
+                            free(data->path);
+                            rc = StrDup(resolved, &data->path);
+                        }
+                        ReleaseComplain(KDirectoryRelease, dir);
+                    }
+                }
+            }
+        }
+        if( rc == 0 ) {
+            struct KNamelist const* attr = NULL;
+            if( (rc = KXMLNodeListAttr(xml_node, &attr)) == 0 ) {
+                uint32_t i = 0, count = 0;
+                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                    while( rc == 0 && i < count ) {
+                        const char *attr_nm = NULL;
+                        if( (rc = KNamelistGet(attr, i++, &attr_nm)) != 0 ) {
+                            break;
+                        }
+                        if( strcmp("path", attr_nm) == 0 || strcmp("accession", attr_nm) == 0 ||
+                            strcmp("timestamp", attr_nm) == 0 ||
+                            strncmp("md5.", attr_nm, 4) == 0 || strncmp("size.", attr_nm, 5) == 0 ) {
+                            continue;
+                        }
+                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                        strcpy(errmsg, "unknown attribute '");
+                        strcat(errmsg, attr_nm);
+                        strcat(errmsg, "'");
+                    }
+                }
+                ReleaseComplain(KNamelistRelease, attr);
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRAListNode_Make(const KXMLNode* xml_node, FSNode* parent, SRAConfigFlags flags, char* errmsg,
+                      const char* rel_path, EXMLValidate validate)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || parent == NULL || errmsg == NULL || rel_path == NULL ) {
+        rc = RC(rcExe, rcTable, rcUpdating, rcParam, rcNull);
+    } else {
+        SRAListNode_FindData data;
+        memset(&data, 0, sizeof(data));
+        data.attr[0].ext = ".sra";
+        data.attr[0].type = eSRAFuseFmtArc;
+        data.attr[1].ext = ".lite.sra";
+        data.attr[1].type = eSRAFuseFmtArcLite;
+        if( (rc = SRAListNode_MakeXML(xml_node, &data, errmsg, rel_path, validate)) == 0 ) {
+            SRAListNode* found;
+            if( (rc = SRAListNode_Insert(&data, g_version + 1, &found)) == 0 ) {
+                FSNode* d = parent;
+                if( flags & eSRAFuseRunDir ) {
+                    if( (rc = SRADirectoryNode_Make(&d, found->accession, found)) == 0 ) {
+                        if( (rc = FSNode_AddChild(parent, d)) != 0 ) {
+                            FSNode_Release(d);
+                        }
+                    }
+                }
+                if( rc == 0 ) {
+                    rc = SRANode_Make(d, found->accession, found, flags);
+                }
+            }
+            SRAListNode_Release(found);
+        }
+        free(data.accession);
+        free(data.path);
+    }
+    return rc;
+}
+
+static
+rc_t SRAListNode_Update(SRAListNode* self, KTime_t now)
+{
+    rc_t rc = 0;
+    KTime_t ts = 0;
+    /* weekly forced update */
+    bool forced = now != 0 && (now - self->utime) > (60*24*60*60) && self->utime != 0 /* not new */;
+
+    if( (self->mtime == 0 || now != 0) && (rc = SRAListNode_TableMTime(self, &ts)) == 0 ) {
+        if( self->mtime != ts || forced ) {
+            const SRATable* tbl = NULL;
+            FileOptions* new_files = NULL, *old_files = NULL;
+            uint32_t new_files_count = 0;
+            PLOGMSG(klogInfo, (klogInfo, "Updating sra node, self->mtime = $(mtime), self->utime = $(utime), ts = $(ts), now = $(now), forced = $(forced)",
+                        PLOG_5(PLOG_I64(mtime), PLOG_I64(utime), PLOG_I64(ts), PLOG_I32(forced), PLOG_I64(now)),
+                        (long long)self->mtime,
+                        (long long)self->utime,
+                        (long long)ts,
+                        (int)forced,
+                        (long long)now)
+                    );
+            if( (rc = SRAListNode_TableOpen(self, &tbl)) == 0 ) {
+                const KMDataNode* meta = NULL;
+                if( SRATableOpenMDataNodeRead(tbl, &meta, "/FUSE/root/File") != 0 ) {
+                    rc = SRATableOpenMDataNodeRead(tbl, &meta, "/FUSE");
+                }
+                if( rc == 0 ) {
+                    struct KNamelist* files = NULL;
+                    DEBUG_LINE(10, "Opened SRA table meta %s '%s'", self->accession, self->path);
+                    if( (rc = KMDataNodeListChild(meta, &files)) == 0 ) {
+                        uint32_t files_count = 0;
+                        if( (rc = KNamelistCount(files, &files_count)) == 0 && files_count > 0 ) {
+                            new_files_count = (2 + files_count) * 2; /* (2 are for .sra types + count in meta) + md5 for each in list */
+                            if( (rc = FileOptions_Make(&new_files, new_files_count)) == 0 ) {
+                                uint32_t f = 0;
+                                new_files_count = 4; /* step down for 2 .sra + md5 for them */
+                                while( rc == 0 && f < files_count ) {
+                                    const char *suffix = NULL;
+                                    if( (rc = KNamelistGet(files, f, &suffix)) == 0 ) {
+                                        const KMDataNode* fn = NULL;
+                                        if( (rc = KMDataNodeOpenNodeRead(meta, &fn, suffix)) == 0 ) {
+                                            DEBUG_LINE(10, "Adding %s file type '%s'", self->accession, suffix);
+                                            if( (rc = FileOptions_ParseMeta(&new_files[new_files_count], fn, tbl, ts, suffix)) != 0 ) {
+                                                PLOGERR(klogErr, (klogErr, rc, " node '$(f)'", PLOG_S(f), suffix));
+                                                rc = 0;
+                                            } else {
+                                                if( new_files[new_files_count].md5[0] != '\0' ) {
+                                                    if( (rc = FileOptions_AttachMD5(&new_files[new_files_count],
+                                                                self->accession, &new_files[new_files_count + 1])) != 0 ||
+                                                        (rc = FileOptions_UpdateMD5(&new_files[new_files_count], self->accession)) != 0) {
+                                                        PLOGERR(klogErr, (klogErr, rc, " node md5 '$(f)'", PLOG_S(f), suffix));
+                                                        rc = 0;
+                                                    } else {
+                                                        new_files_count++;
+                                                    }
+                                                }
+                                                new_files_count++;
+                                            }
+                                        }
+                                        f++;
+                                        ReleaseComplain(KMDataNodeRelease, fn);
+                                    }
+                                }
+                            }
+                        }
+                        ReleaseComplain(KNamelistRelease, files);
+                    }
+                    ReleaseComplain(KMDataNodeRelease, meta);
+                } else {
+                    PLOGMSG(klogWarn, (klogWarn, "FUSE meta block not found in '$(t)'", PLOG_S(t), self->accession));
+                    rc = 0;
+                }
+                if( rc == 0 ) {
+                    if( new_files_count == 0 ) {
+                        /* for 2 .sra types + its .md5's */
+                        new_files_count = 4;
+                        rc = FileOptions_Make(&new_files, new_files_count);
+                    }
+                    if( rc == 0 ) {
+                        /* add information for sra archives */
+                        DEBUG_LINE(10, "Adding SRA archive type %s and its .md5", self->accession);
+                        if( (rc = FileOptions_SRAArchive(&new_files[0], tbl, ts, false)) == 0 &&
+                            (rc = FileOptions_AttachMD5(&new_files[0], self->accession, &new_files[1])) == 0 ) {
+                            DEBUG_LINE(10, "Adding SRA lite archive type %s and its .md5", self->accession);
+                            if( (rc = FileOptions_SRAArchive(&new_files[2], tbl, ts, true)) == 0 ) {
+                                rc = FileOptions_AttachMD5(&new_files[2], self->accession, &new_files[3]);
+                            }
+                        }
+                    }
+                }
+                ReleaseComplain(SRATableRelease, tbl);
+            }
+            old_files = new_files;
+            if( rc == 0 ) {
+                SRAQueueNode* q;
+                MALLOC(q, sizeof(*q));
+                if( q == NULL ) {
+                    rc = RC(rcExe, rcTable, rcUpdating, rcMemory, rcExhausted);
+                } else if( (rc = SRAList_Lock(true)) == 0 ) {
+                    if( self->mtime != ts || forced ) {
+                        self->mtime = ts;
+                        old_files = self->files;
+                        self->files = new_files;
+                        self->files_count = new_files_count;
+#if 0
+                        if( self->utime != 0 /* not new */ && g_queue_cond != NULL && (rc = SRAList_Queue_Lock()) == 0 ) {
+                            SRAListNode_AddRef(self);
+                            q->node = self;
+                            q->mtime = self->mtime;
+                            SLListPushTail(&g_queue, &q->dad);
+                            g_queue_depth++;
+                            KConditionSignal(g_queue_cond);
+                            SRAList_Queue_Unlock();
+                            q = NULL;
+                            DEBUG_LINE(10, "%s table queued for async update, queue %lu", self->accession, g_queue_depth);
+                        }
+#endif
+                        self->utime = now ? now : time(NULL);
+                    }
+                    SRAList_Unlock();
+                    DEBUG_LINE(10, "%s table updated %lu %lu", self->accession, self->mtime, self->utime);
+                }
+                FREE(q);
+            }
+            FileOptions_Release(old_files);
+        } else {
+            DEBUG_LINE(10, "%s table is up-to-date: %lu, updated %lu, now %lu",
+                           self->accession, self->mtime, self->utime, time(NULL));
+            rc = RC(rcExe, rcTable, rcUpdating, rcMessage, rcCanceled);
+        }
+    }
+    if( rc != 0 && GetRCState(rc) != rcCanceled ) {
+        PLOGERR(klogErr, (klogErr, rc, "SRA refresh $(a)", PLOG_S(a), self->accession));
+    }
+    return rc;
+}
+
+typedef struct SRAListNode_UpdateData_struct {
+    rc_t rc;
+    KTime_t now;
+    KFile* file;
+    uint64_t pos;
+    uint32_t qty, recs;
+} SRAListNode_UpdateData;
+
+static
+bool SRAListNode_Updater(BSTNode* node, void* data)
+{
+    SRAListNode* n = (SRAListNode*)node;
+    SRAListNode_UpdateData* d = (SRAListNode_UpdateData*)data;
+
+    if( n->version >= g_version ) {
+        if( SRAListNode_Update(n, d->now) == 0 ) {
+            d->qty = d->qty + 1;
+        }
+    }
+    if( d->file != NULL ) {
+        size_t num_writ;
+        uint16_t acc_sz = n->accession ? strlen(n->accession) : 0;
+        uint16_t path_sz = n->path ? strlen(n->path) : 0;
+
+        if( d->recs++ == 0 ) {
+            if( (d->rc = KFileWrite(d->file, d->pos, &g_cache_version, sizeof(g_cache_version), &num_writ)) == 0 ) {
+                d->pos += num_writ;
+            }
+        }
+        if( (d->rc = KFileWrite(d->file, d->pos, &acc_sz, sizeof(acc_sz), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+            if( (d->rc = KFileWrite(d->file, d->pos, n->accession, acc_sz, &num_writ)) == 0 ) {
+                d->pos += num_writ;
+            }
+        }
+        if( (d->rc = KFileWrite(d->file, d->pos, &path_sz, sizeof(path_sz), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+            if( (d->rc = KFileWrite(d->file, d->pos, n->path, path_sz, &num_writ)) == 0 ) {
+                d->pos += num_writ;
+            }
+        }
+        if( (d->rc = KFileWrite(d->file, d->pos, &n->files_count, sizeof(n->files_count), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+            if( n->files_count > 0 &&
+                (d->rc = KFileWrite(d->file, d->pos, n->files, n->files_count * sizeof(*(n->files)), &num_writ)) == 0 ) {
+                d->pos += num_writ;
+            }
+        }
+        if( (d->rc = KFileWrite(d->file, d->pos, &n->mtime, sizeof(n->mtime), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+        }
+        if( (d->rc = KFileWrite(d->file, d->pos, &n->utime, sizeof(n->utime), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+        }
+        /* a'la validation: write record id */
+        if( (d->rc = KFileWrite(d->file, d->pos, &d->recs, sizeof(d->recs), &num_writ)) == 0 ) {
+            d->pos += num_writ;
+        }
+    }
+    return g_sync == 0;
+}
+
+void SRAList_PostRefresh()
+{
+    if (pthread_cond_signal(&g_refresh_cond) == -1)
+        assert(0);
+}
+
+static
+rc_t SRAList_Thread(const KThread *self, void *data)
+{
+
+    PLOGMSG(klogInfo, (klogInfo, "SRA sync thread started with $(s) sec", PLOG_U32(s), g_sync));
+    while( g_sync > 0 ) {
+        KDirectory* dir = NULL;
+        SRAListNode_UpdateData data;
+        struct timespec timeout = {0};
+        if (clock_gettime(CLOCK_REALTIME, &timeout) == -1)
+            assert(0);
+        timeout.tv_sec += g_sync;
+        if (pthread_mutex_lock(&g_refresh_mutex) != 0)
+            assert(0);
+        switch (pthread_cond_timedwait(&g_refresh_cond, &g_refresh_mutex, &timeout))
+        {
+            case 0:
+            case ETIMEDOUT:
+                break;
+            default:
+                assert(0);
+        }
+        if (pthread_mutex_unlock(&g_refresh_mutex) != 0)
+            assert(0);
+        LOGMSG(klogInfo, "Begin refreshing sra list");
+        if( g_lock == NULL ) {
+            break;
+        }
+        memset(&data, 0, sizeof(data));
+        data.now = time(NULL);
+        DEBUG_LINE(10, "SRA sync thread with %u sec, updating version %u @ %lu", g_sync, g_version, data.now);
+        if( g_cache_file != NULL ) {
+            DEBUG_LINE(10, "SRA sync thread writing cache file %s", g_cache_file_tmp);
+            if( (data.rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                data.rc = KDirectoryCreateFile(dir, &data.file, false, 0644, kcmInit, "%s", g_cache_file_tmp);
+            }
+            if( data.rc != 0 ) {
+                data.file = NULL;
+                PLOGERR(klogErr, (klogErr, data.rc, "SRA cache file $(s)", PLOG_S(s), g_cache_file_tmp));
+            }
+        }
+        SRAListNode_KConfigReload();
+        /* scan in reverse to avoid reading threads following update */
+        BSTreeDoUntil(&g_list, true, SRAListNode_Updater, &data);
+        if( data.qty > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "SRA sync updated $(q) runs", PLOG_U32(q), data.qty));
+        } else {
+            DEBUG_LINE(10, "SRA sync updated %u runs", data.qty);
+        }
+        if( data.file != NULL ) {
+            rc_t rc;
+            ReleaseComplain(KFileRelease, data.file);
+            rc = KDirectoryRename(dir, true, g_cache_file_tmp, g_cache_file);
+            ReleaseComplain(KDirectoryRelease, dir);
+            data.rc = data.rc ? data.rc : rc;
+            if( data.rc != 0 ) {
+                PLOGERR(klogErr, (klogErr, data.rc, "writing SRA cache file $(s) $(n) records", PLOG_2(PLOG_S(s),PLOG_U32(n)), g_cache_file, data.recs));
+            } else {
+                PLOGMSG(klogInfo, (klogInfo, "created SRA cache file $(s) $(n) records", PLOG_2(PLOG_S(s),PLOG_U32(n)), g_cache_file, data.recs));
+            }
+        }
+    }
+    PLOGMSG(klogInfo, (klogInfo, "SRA sync thread ended v$(s)", PLOG_U64(s), g_version));
+    return 0;
+}
+
+static
+rc_t SRAList_Queue(const KThread *self, void *data)
+{
+    LOGMSG(klogInfo, "SRA queue thread started");
+    while( g_queue_cond != NULL ) {
+        DEBUG_LINE(10, "SRA queue %s", "running");
+        do {
+            SRAQueueNode* q = NULL;
+            if( SRAList_Queue_Lock() == 0 ) {
+                if( g_queue_depth > 0 ) {
+                    q = (SRAQueueNode*)SLListPopHead(&g_queue);
+                    g_queue_depth--;
+                }
+                SRAList_Queue_Unlock();
+                if( q != NULL ) {
+                    if( SRAList_Lock(false) == 0 ) {
+                        PLOGMSG(klogInfo, (klogInfo, "SRA queue $(s) updating", PLOG_S(s), q->node->accession));
+                        if( atomic32_read(&q->node->refcount) == 1 ) {
+                            /* restore value of release below will go negative and leak */
+                            DEBUG_LINE(10, "SRA queue %s dropped - not updated", q->node->accession);
+                        } else if( q->node->mtime == q->mtime ) {
+                            /* update only if not changed since it was put into queue */
+                            uint32_t i, count = q->node->files_count;
+                            FileOptions* opt;
+                            if( FileOptions_Clone(&opt, q->node->files, count) == 0 ) {
+                                SRAList_Unlock();
+                                for(i = 0; i < count; i++) {
+                                    if( opt[i].md5_file != 0 ) {
+                                        rc_t rc = FileOptions_CalcMD5(&opt[i], q->node->accession, q->node);
+                                        if( rc != 0 ) {
+                                            PLOGERR(klogErr, (klogErr, rc, "SRA queue $(s) while obtaining md5",
+                                                PLOG_S(s), q->node->accession));
+                                        } else if( (rc = FileOptions_UpdateMD5(&opt[i], q->node->accession)) != 0 ) {
+                                            PLOGERR(klogErr, (klogErr, rc, "SRA queue $(s) while assigning md5",
+                                                PLOG_S(s), q->node->accession));
+                                        }
+                                    }
+                                }
+                                if( SRAList_Lock(true) == 0 && q->node->mtime == q->mtime ) {
+                                    /* actual update if not changed */
+                                    FREE(q->node->files);
+                                    q->node->files = opt;
+                                    q->node->files_count = count;
+                                    PLOGMSG(klogInfo, (klogInfo, "SRA queue $(s) updated", PLOG_S(s), q->node->accession));
+                                } else {
+                                    FREE(opt);
+                                    DEBUG_LINE(10, "SRA queue %s changed during - not updated", q->node->accession);
+                                }
+                            }
+                        } else {
+                            DEBUG_LINE(10, "SRA queue %s changed - not updated", q->node->accession);
+                        }
+                        SRAList_Unlock();
+                        SRAListNode_Release(q->node);
+                        FREE(q);
+                    }
+                } else {
+                    break;
+                }
+            }
+        } while( g_queue_cond != NULL );
+        if( g_queue_cond != NULL ) {
+            DEBUG_LINE(10, "SRA queue %s", "waiting");
+            SRAList_Queue_Lock();
+            KConditionWait(g_queue_cond, g_queue_lock);
+            SRAList_Queue_Unlock();
+        }
+    }
+    LOGMSG(klogInfo, "SRA queue thread ended");
+    return 0;
+}
+
+rc_t SRAList_Make(KDirectory* dir, unsigned int seconds, const char* cache_path)
+{
+    rc_t rc = 0;
+    BSTreeInit(&g_list);
+    SLListInit(&g_queue);
+    g_sync = seconds;
+
+    assert(dir != NULL);
+
+    if( cache_path != NULL ) {
+        char buf[4096];
+        size_t len;
+        const char* path, *slash = strrchr(cache_path, '/');
+
+        if( slash == NULL ) {
+            slash = cache_path;
+            path = ".";
+            len = 1;
+        } else {
+            path = cache_path;
+            len = slash++ - cache_path;
+        }
+        if( (rc = KDirectoryResolvePath(dir, true, buf, 4096, "%.*s", len, path)) == 0 ) {
+            size_t i = strlen(buf) - 1;
+            while( buf[i] == '.' || buf[i] == '/' ) {
+                i--;
+            }
+            if( i + 2 + strlen(slash) + 4 > sizeof(buf) ) {
+                rc = RC(rcExe, rcPath, rcConstructing, rcBuffer, rcInsufficient);
+            } else {
+                buf[++i] = '/';
+                buf[++i] = '\0';
+                strcat(buf, slash);
+                if( (rc = StrDup(buf, &g_cache_file)) == 0 ) {
+                    DEBUG_LINE(10, "SRA cache file path set to '%s'", g_cache_file);
+                    strcat(buf, ".tmp");
+                    if( (rc = StrDup(buf, &g_cache_file_tmp)) == 0 ) {
+                        DEBUG_LINE(10, "SRA tmp cache file path set to '%s'", g_cache_file_tmp);
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+void SRAList_Init(void)
+{
+    rc_t rc = 0;
+
+    if( g_lock == NULL && (rc = KRWLockMake(&g_lock)) != 0 ) {
+        g_lock = NULL;
+        LOGERR(klogErr, rc, "SRA lock");
+    }
+    if( g_queue_cond == NULL && (rc = KConditionMake(&g_queue_cond)) != 0 ) {
+        g_queue_cond = NULL;
+        LOGERR(klogErr, rc, "SRA queue condition");
+    } else if( g_queue_lock == NULL && (rc = KLockMake(&g_queue_lock)) != 0 ) {
+        g_queue_lock = NULL;
+        LOGERR(klogErr, rc, "SRA queue lock");
+    }
+    if( g_cache_file != NULL ) {
+        /* try to load cache */
+        KDirectory* dir = NULL;
+
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            const KFile* f;
+            uint32_t recs = 0;
+
+            if( (rc = KDirectoryOpenFileRead(dir, &f, "%s", g_cache_file)) == 0 ) {
+                uint64_t pos = 0;
+                uint32_t ver = 0, recid;
+                uint16_t obj_sz;
+                size_t num_read = 0;
+                SRAListNode_FindData data;
+                SRAListNode* found;
+
+                assert(sizeof(ver) == sizeof(g_cache_version));
+                do {
+                    memset(&data, 0, sizeof(data));
+                    if( pos == 0 ) {
+                        if( (rc = KFileRead(f, pos, &ver, sizeof(ver), &num_read)) != 0 ||
+                            num_read != sizeof(ver) || ver == 0 || ver > g_cache_version ) {
+                                rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData,
+                                                  ver != g_cache_version ? rcBadVersion : rcTooShort);
+                            break;
+                        }
+                        pos += num_read;
+                    }
+                    if( (rc = KFileRead(f, pos, &obj_sz, sizeof(obj_sz), &num_read)) != 0 || num_read != sizeof(obj_sz) ) {
+                        if( num_read != 0 ) {
+                            /* if num_read is 0 than it is proper EOF */
+                            rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                        }
+                        break;
+                    }
+                    pos += num_read;
+                    MALLOC(data.accession, obj_sz + 1);
+                    if( data.accession == NULL ) {
+                        rc = RC(rcExe, rcTable, rcReading, rcMemory, rcExhausted);
+                        break;
+                    }
+                    if( (rc = KFileRead(f, pos, data.accession, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                        rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                        break;
+                    }
+                    data.accession[obj_sz] = '\0';
+                    pos += num_read;
+                    if( (rc = KFileRead(f, pos, &obj_sz, sizeof(obj_sz), &num_read)) != 0 || num_read != sizeof(obj_sz) ) {
+                        rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                        break;
+                    }
+                    pos += num_read;
+                    if( obj_sz > 0 ) {
+                        MALLOC(data.path, obj_sz + 1);
+                        if( data.path == NULL ) {
+                            rc = RC(rcExe, rcTable, rcReading, rcMemory, rcExhausted);
+                            break;
+                        }
+                        if( (rc = KFileRead(f, pos, data.path, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                            rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                            break;
+                        }
+                        data.path[obj_sz] = '\0';
+                        pos += num_read;
+                    }
+                    if( (rc = SRAListNode_Insert(&data, 0, &found)) != 0 ) {
+                        break;
+                    } else if( (rc = SRAList_Lock(true)) == 0 ) {
+                        do {
+                            obj_sz = sizeof(found->files_count);
+                            if( (rc = KFileRead(f, pos, &found->files_count, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                break;
+                            }
+                            pos += num_read;
+                            if( found->files_count > 0 ) {
+                                if( ver < 4 ) {
+                                    /* size was different for older version */
+                                    obj_sz = sizeof(FileOptionsOld) * found->files_count;
+                                    
+                                } else {
+                                    obj_sz = sizeof(*found->files) * found->files_count;
+                                }
+                                MALLOC(found->files, obj_sz);
+                                if( found->files == NULL ) {
+                                    rc = RC(rcExe, rcTable, rcReading, rcMemory, rcExhausted);
+                                    break;
+                                }
+                                if( (rc = KFileRead(f, pos, found->files, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                    rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                    break;
+                                }
+                                pos += num_read;
+                                if( ver < 4 ) {
+                                    FileOptionsOld* fOld = (FileOptionsOld*)found->files;
+                                    if( (rc = FileOptions_Make(&found->files, found->files_count)) != 0 ) {
+                                        FREE(fOld);
+                                        break;
+                                    } else {
+                                        uint32_t i;
+                                        /* old struct size */
+                                        obj_sz = sizeof(FileOptionsOld);
+                                        for(i = 0; i < found->files_count; i++ ) {
+                                            memmove(&found->files[i], &fOld[i], obj_sz);
+                                            memset(found->files[i].md5, 0, sizeof(found->files[i].md5));
+                                            found->files[i].md5_file = 0;
+                                        }
+                                        FREE(fOld);
+                                    }
+                                }
+                            }
+                            obj_sz = sizeof(found->mtime);
+                            if( (rc = KFileRead(f, pos, &found->mtime, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                break;
+                            }
+                            pos += num_read;
+                            if( ver >= 3 ) {
+                                obj_sz = sizeof(found->utime);
+                                if( (rc = KFileRead(f, pos, &found->utime, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                    rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                    break;
+                                }
+                                pos += num_read;
+                            }
+                            SRAList_Unlock();
+                            if( ver == 1 ) {
+                                KTime_t l;
+                                obj_sz = sizeof(l);
+                                if( (rc = KFileRead(f, pos, &l, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                    rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                    break;
+                                }
+                                pos += num_read;
+                            }
+                            obj_sz = sizeof(recid);
+                            if( (rc = KFileRead(f, pos, &recid, obj_sz, &num_read)) != 0 || num_read != obj_sz ) {
+                                rc = rc ? rc : RC(rcExe, rcTable, rcReading, rcData, rcTooShort);
+                                break;
+                            }
+                            pos += num_read;
+                            if( ++recs != recid ) {
+                                rc = RC(rcExe, rcTable, rcReading, rcData, rcInconsistent);
+                                break;
+                            }
+                        } while(false);
+                    }
+                    FREE(data.accession);
+                    FREE(data.path);
+                    SRAListNode_Release(found);
+                } while(rc == 0);
+                ReleaseComplain(KFileRelease, f);
+            } else if( GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            }
+            if( rc != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "reading SRA cache file $(s) $(n) records",
+                        PLOG_2(PLOG_S(s),PLOG_U32(n)), g_cache_file, recs));
+            } else if( recs > 0 ) {
+                PLOGMSG(klogInfo, (klogInfo, "loaded SRA cache file $(s) $(n) records",
+                        PLOG_2(PLOG_S(s),PLOG_U32(n)), g_cache_file, recs));
+            }
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    if( g_lock != NULL ) {
+        if( g_sync > 0 && (rc = KThreadMake(&g_thread, SRAList_Thread, NULL)) != 0 ) {
+            LOGERR(klogErr, rc, "SRA sync thread");
+        }
+        if( g_queue_cond != NULL && g_queue_lock != NULL &&
+            (rc = KThreadMake(&g_queue_thread, SRAList_Queue, NULL)) != 0 ) {
+            LOGERR(klogErr, rc, "SRA queue thread");
+        }
+    }
+}
+
+void SRAList_Fini(void)
+{
+    g_sync = 0;
+    if( g_thread != NULL ) {
+        ReleaseComplain(KThreadCancel, g_thread);
+        ReleaseComplain(KThreadRelease, g_thread);
+    }
+    if( g_queue_thread != NULL ) {
+        KCondition* x = g_queue_cond;
+        g_queue_cond = NULL;
+        SRAList_Queue_Lock();
+        KConditionSignal(x);
+        SRAList_Queue_Unlock();
+        ReleaseComplain(KThreadCancel, g_queue_thread);
+        ReleaseComplain(KThreadRelease, g_queue_thread);
+        g_queue_cond = x;
+        g_queue_thread = NULL;
+    }
+    ReleaseComplain(KConditionRelease, g_queue_cond);
+    ReleaseComplain(KLockRelease, g_queue_lock);
+    pthread_cond_destroy(&g_refresh_cond);
+    pthread_mutex_destroy(&g_refresh_mutex);
+    if( g_lock != NULL ) {
+        SRAList_Lock(true);
+    }
+    BSTreeWhack(&g_list, SRAList_Whack, NULL);
+    SLListWhack(&g_queue, SRAQueue_Whack, NULL);
+    if( g_lock != NULL ) {
+        SRAList_Unlock();
+        ReleaseComplain(KRWLockRelease, g_lock);
+    }
+    ReleaseComplain(SRAMgrRelease, g_sra_mgr);
+    ReleaseComplain(KLockRelease, g_sra_mgr_lock);
+    FREE(g_cache_file);
+    FREE(g_cache_file_tmp);
+
+    g_queue_cond = NULL;
+    g_queue_lock = NULL;
+    g_version = 0;
+    g_lock = NULL;
+    g_thread = NULL;
+    g_sra_mgr = NULL;
+}
+
+rc_t SRAListNode_GetType(const SRAListNode* cself, SRAConfigFlags flags, const char* suffix, const FileOptions** options)
+{
+    rc_t rc = 0;
+    if( cself == NULL || suffix == NULL || options == NULL ) {
+        rc = RC(rcExe, rcTable, rcSearching, rcParam, rcNull);
+    } else {
+        if( (rc = SRAListNode_Update((SRAListNode*)cself, 0)) == 0 || GetRCState(rc) == rcCanceled ) {
+            DEBUG_LINE(10, "'%s'", suffix);
+            if( (rc = SRAList_Lock(false)) == 0 ) {
+                size_t i;
+                *options = NULL;
+                for(i = 0; i < cself->files_count; i++) {
+                    if( (cself->files[i].type & flags) && strcmp(suffix, cself->files[i].suffix) == 0 ) {
+                        *options = &cself->files[i];
+                        break;
+                    }
+                }
+                SRAList_Unlock();
+            }
+        }
+    }
+    if( rc == 0 && *options == NULL ) {
+        rc = RC(rcExe, rcTable, rcSearching, rcName, rcNotFound);
+    }
+    return rc;
+}
+
+rc_t SRAListNode_ListFiles(const SRAListNode* cself, const char* prefix, int types, FSNode_Dir_Visit func, void* data)
+{
+    rc_t rc = 0;
+    if( cself == NULL ) {
+        rc = RC(rcExe, rcTable, rcListing, rcSelf, rcNull);
+    } else {
+        if( (rc = SRAListNode_Update((SRAListNode*)cself, 0)) == 0 || GetRCState(rc) == rcCanceled ) {
+            DEBUG_LINE(10, "%s", prefix);
+            if( (rc = SRAList_Lock(false)) == 0 ) {
+                char buf[1024];
+                size_t i;
+                for(i = 0; rc == 0 && i < cself->files_count; i++) {
+                    if( (cself->files[i].type & types) && cself->files[i].file_sz > 0 ) {
+                        strcpy(buf, prefix);
+                        strcat(buf, cself->files[i].suffix);
+                        rc = func(buf, data);
+                    }
+                }
+                SRAList_Unlock();
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/sra-list.h b/tools/fuse/sra-list.h
new file mode 100644
index 0000000..3bc3ef0
--- /dev/null
+++ b/tools/fuse/sra-list.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_sra_list_
+#define _h_sra_fuse_sra_list_
+
+#include <sra/sradb.h>
+
+#include "xml.h"
+#include "formats.h"
+
+typedef enum {
+    eSRAFuseInitial     = 0x1000,
+    eSRAFuseRunDir      = 0x0001,
+    eSRAFuseFileArc     = 0x0002,
+    eSRAFuseFileArcLite = 0x0004,
+    eSRAFuseFileFastq   = 0x0008,
+    eSRAFuseFileSFF     = 0x0010
+} SRAConfigFlags;
+
+typedef struct SRAListNode SRAListNode;
+
+/*
+ * Initialize run list
+ * if seconds > 0 than a thread is launched to updated run info
+ */
+rc_t SRAList_Make(KDirectory* dir, unsigned int seconds, const char* cache_path);
+
+void SRAList_Init(void);
+
+void SRAList_Fini(void);
+
+/* after processing updated XML set next version so 
+ * that runs dropped from XML could be dropped from the list
+ */
+rc_t SRAList_NextVersion(void);
+
+/*
+ * Attaches to parent file nodes based on flags
+ * xml_node is of type SRA with accession and optional path
+ * maintains internal list of SRA objects keyed on acession-path pairs
+ */
+rc_t SRAListNode_Make(const KXMLNode* xml_node, FSNode* parent, SRAConfigFlags flags, char* errmsg,
+                      const char* rel_path, EXMLValidate validate);
+
+rc_t SRAListNode_TableMTime(const SRAListNode* cself, KTime_t* mtime);
+
+rc_t SRAListNode_TableOpen(const SRAListNode* cself, const SRATable** tbl);
+
+/*
+ * Get type info based on file extension
+ */
+rc_t SRAListNode_GetType(const SRAListNode* cself, SRAConfigFlags flags, const char* suffix, struct FileOptions const** options);
+
+/*
+ * Get list of files using prefix + suffixes filtering by types
+ */
+rc_t SRAListNode_ListFiles(const SRAListNode* cself, const char* prefix, int types, FSNode_Dir_Visit func, void* data);
+
+rc_t SRAListNode_AddRef(const SRAListNode* cself);
+void SRAListNode_Release(const SRAListNode* cself);
+void SRAList_PostRefresh();
+
+#endif /* _h_sra_fuse_sra_list_ */
diff --git a/tools/fuse/sra-makeidx.c b/tools/fuse/sra-makeidx.c
new file mode 100644
index 0000000..a34b39a
--- /dev/null
+++ b/tools/fuse/sra-makeidx.c
@@ -0,0 +1,955 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/checksum.h>
+#include <klib/rc.h>
+#include <kdb/manager.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+#include <kdb/index.h>
+
+#include <sra/wsradb.h>
+#include <sra/sradb-priv.h>
+#include <sra/fastq.h>
+#include <sra/sff.h>
+
+#include "zlib-simple.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+
+uint32_t g_file_block_sz = 32 * 1024;
+const char* g_accession = NULL;
+bool g_dump = false;
+bool g_ungzip = false;
+
+typedef struct SIndexObj_struct {
+    KMDataNode* meta;
+    const char* const file;
+    const char* const format;
+    const char* const index;
+    rc_t (*func)(const SRATable* sratbl, struct SIndexObj_struct* obj, char* buffer, const size_t buffer_sz);
+    uint64_t file_size;
+    uint32_t buffer_sz;
+    uint64_t minSpotId;
+    uint64_t maxSpotId;
+    SLList li;
+    MD5State md5;
+    uint8_t md5_digest[16];
+} SIndexObj;
+
+typedef struct SIndexNode_struct {
+    SLNode n;
+    uint64_t key;
+    uint64_t key_size;
+    int64_t id;
+    uint64_t id_qty;
+} SIndexNode;
+
+typedef struct SIndexData_struct {
+    rc_t rc;
+    KIndex* kidx;
+} SIndexData;
+
+static
+bool InsertIndexData( SLNode *node, void *data )
+{
+    SIndexNode* n = (SIndexNode*)node;
+    SIndexData* d = (SIndexData*)data;
+
+    d->rc = KIndexInsertU64(d->kidx, true, n->key, n->key_size, n->id, n->id_qty);
+    return d->rc == 0 ? false : true;
+}
+
+static
+void WhackIndexData( SLNode *n, void *data )
+{
+    free(n);
+}
+
+static
+rc_t CommitIndex(KTable* ktbl, const char* name, const SLList* li)
+{
+    SIndexData data;
+
+    STSMSG(0, ("Saving index %s", name));
+    data.rc = KTableCreateIndex(ktbl, &data.kidx, kitU64, kcmInit, name);
+    if( data.rc == 0 ) {
+        if( !SLListDoUntil(li, InsertIndexData, &data) ) {
+            data.rc = KIndexCommit(data.kidx);
+        }
+        KIndexRelease(data.kidx);
+    }
+    return data.rc;
+}
+
+rc_t WriteFileMeta(SIndexObj* obj)
+{
+    rc_t rc = 0;
+    KMDataNode* nd = NULL;
+
+    PLOGMSG(klogInfo, (klogInfo, "Meta $(f) on index $(i): file size $(s), buffer $(b)",
+        PLOG_4(PLOG_S(f),PLOG_S(i),PLOG_U64(s),PLOG_U32(b)), obj->file, obj->index, obj->file_size, obj->buffer_sz));
+
+    if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Format")) == 0 ) {
+        KMDataNode* opt = NULL;
+        rc = KMDataNodeWriteCString(nd, obj->format);
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(nd, &opt, "Options")) == 0 ) {
+            KMDataNode* ond = NULL;
+            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "accession")) == 0 ) {
+                rc = KMDataNodeWriteCString(ond, g_accession);
+                KMDataNodeRelease(ond);
+            }
+            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "minSpotId")) == 0 ) {
+                rc = KMDataNodeWriteB64(ond, &obj->minSpotId);
+                KMDataNodeRelease(ond);
+            }
+            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "maxSpotId")) == 0 ) {
+                rc = KMDataNodeWriteB64(ond, &obj->maxSpotId);
+                KMDataNodeRelease(ond);
+            }
+            KMDataNodeRelease(opt);
+        }
+        KMDataNodeRelease(nd);
+    }
+
+    if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Size")) == 0 ) {
+        rc = KMDataNodeWriteB64(nd, &obj->file_size);
+        KMDataNodeRelease(nd);
+    }
+
+    if( rc == 0 && obj->buffer_sz > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Buffer")) == 0 ) {
+        rc = KMDataNodeWriteB32(nd, &obj->buffer_sz);
+        KMDataNodeRelease(nd);
+    }
+
+    if( rc == 0 && strlen(obj->index) > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Index")) == 0 ) {
+        rc = KMDataNodeWriteCString(nd, obj->index);
+        KMDataNodeRelease(nd);
+    }
+
+    if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "md5")) == 0 ) {
+        char x[5];
+        int i;
+        for( i = 0; rc == 0 && i < sizeof(obj->md5_digest); i++ ) {
+            int l = snprintf(x, 4, "%02x", obj->md5_digest[i]);
+            rc = KMDataNodeAppend(nd, x, l);
+        }
+        KMDataNodeRelease(nd);
+    }
+    return rc;
+}
+
+static
+rc_t SFF_Idx(const SRATable* sratbl, SIndexObj* obj, char* buffer, const size_t buffer_sz)
+{
+    rc_t rc = 0;
+    const SFFReader* reader = NULL;
+
+    if( (rc = SFFReaderMake(&reader, sratbl, g_accession, obj->minSpotId, obj->maxSpotId)) != 0 ) {
+        return rc;
+    } else {
+        size_t written = 0;
+        uint32_t blk = 0;
+        SIndexNode* inode = NULL;
+
+        while( rc == 0 ) {
+            rc = SFFReader_GetNextSpotData(reader, buffer, buffer_sz, &written);
+            if( blk >= g_file_block_sz || (GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted) ) {
+                inode->key_size = blk;
+                SLListPushTail(&obj->li, &inode->n);
+                DEBUG_MSG(5, ("SFF index closed spots %lu, offset %lu, block size %lu\n", inode->id_qty, inode->key, inode->key_size));
+                inode = NULL;
+                if( blk > obj->buffer_sz ) {
+                    obj->buffer_sz = blk;
+                }
+                blk = 0;
+            }
+            if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted ) {
+                rc = 0;
+                break;
+            }
+            if( inode == NULL ) {
+                spotid_t spotid = 0;
+                if( (rc = SFFReaderCurrentSpot(reader, &spotid)) != 0 ) {
+                    break;
+                }
+                inode = malloc(sizeof(SIndexNode));
+                if( inode == NULL ) {
+                    rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+                    break;
+                }
+                inode->key = obj->file_size;
+                inode->key_size = 0;
+                inode->id = spotid;
+                inode->id_qty = 0;
+                DEBUG_MSG(5, ("SFF index opened spot %ld, offset %lu\n", inode->id, inode->key));
+                if( spotid == 1 ) {
+                    char hd[10240];
+                    size_t hd_sz = 0;
+                    if( (rc = SFFReaderHeader(reader, 0, hd, sizeof(hd), &hd_sz)) == 0 ) {
+                        obj->file_size += hd_sz;
+                        blk += hd_sz;
+                        MD5StateAppend(&obj->md5, hd, hd_sz);
+                        if( g_dump ) {
+                            fwrite(hd, hd_sz, 1, stderr);
+                        }
+                    }
+                }
+            }
+            obj->file_size += written;
+            blk += written;
+            inode->id_qty++;
+            MD5StateAppend(&obj->md5, buffer, written);
+            if( g_dump ) {
+                fwrite(buffer, written, 1, stderr);
+            }
+        }
+        rc = rc ? rc : Quitting();
+        if( rc != 0 ) {
+            spotid_t spot = 0;
+            SFFReaderCurrentSpot(reader, &spot);
+            PLOGERR(klogErr, (klogErr, rc, "spot $(s)", PLOG_U32(s), spot));
+        }
+    }
+    SFFReaderWhack(reader);
+    return rc;
+}
+
+static
+rc_t SFFGzip_Idx(const SRATable* sratbl, SIndexObj* obj, char* buffer, const size_t buffer_sz)
+{
+    rc_t rc = 0;
+    uint16_t zlib_ver = ZLIB_VERNUM;
+    const SFFReader* reader = NULL;
+
+    if( (rc = SFFReaderMake(&reader, sratbl, g_accession, obj->minSpotId, obj->maxSpotId)) != 0 ) {
+        return rc;
+    } else {
+        size_t written = 0;
+        uint32_t blk = 0, spots_per_block = 0, proj_id_qty = 0;
+        SIndexNode* inode = NULL;
+        size_t z_blk = 0;
+        size_t spots_buf_sz = g_file_block_sz * 100;
+        size_t zbuf_sz = spots_buf_sz + 100;
+
+        char* zbuf = malloc(zbuf_sz);
+        char* spots_buf = malloc(spots_buf_sz);
+        bool eof = false;
+
+        if( zbuf == NULL || spots_buf == NULL ) {
+            rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+        }
+        while( rc == 0 ) {
+            if( (rc = SFFReader_GetNextSpotData(reader, buffer, buffer_sz, &written)) == 0 ) {
+                if( inode == NULL ) {
+                    spotid_t spotid = 0;
+                    if( (rc = SFFReaderCurrentSpot(reader, &spotid)) != 0 ) {
+                        break;
+                    }
+                    inode = malloc(sizeof(SIndexNode));
+                    if( inode == NULL ) {
+                        rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+                        break;
+                    }
+                    inode->key = obj->file_size;
+                    inode->key_size = 0;
+                    inode->id = spotid;
+                    inode->id_qty = 0;
+                    DEBUG_MSG(5, ("%s open key: spot %ld, offset %lu\n", obj->index, inode->id, inode->key));
+                    if( spotid == 1 ) {
+                        char hd[10240];
+                        size_t hd_sz = 0;
+                        if( (rc = SFFReaderHeader(reader, 0, hd, sizeof(hd), &hd_sz)) == 0 ) {
+                            if( hd_sz + written > spots_buf_sz ) {
+                                rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcInsufficient);
+                                break;
+                            }
+                            memmove(&spots_buf[blk], hd, hd_sz);
+                            blk += hd_sz;
+                            if( g_dump ) {
+                                fwrite(hd, hd_sz, 1, stderr);
+                            }
+                        }
+                    }
+
+                }
+                if( blk + written > spots_buf_sz ) {
+                    rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcInsufficient);
+                    break;
+                }
+                inode->id_qty++;
+                memmove(&spots_buf[blk], buffer, written);
+                blk += written;
+                if( g_dump ) {
+                    fwrite(buffer, written, 1, stderr);
+                }
+            }
+            if( (eof = (GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted)) ) {
+                rc = 0;
+                if( inode == NULL ) {
+                    break;
+                }
+            }
+            if( rc == 0 && (eof || 
+                            (proj_id_qty == 0 && inode->id_qty > (spots_per_block * 0.95)) || 
+                            (proj_id_qty > 0 && inode->id_qty >= proj_id_qty) ) ) {
+                rc = ZLib_DeflateBlock(spots_buf, blk, zbuf, zbuf_sz, &z_blk);
+                if( z_blk < g_file_block_sz ) {
+                    /* project needed id_qty */
+                    proj_id_qty = g_file_block_sz * inode->id_qty / z_blk * 1.05;
+                    DEBUG_MSG(5, ("%s: project id qty %lu\n", obj->index, proj_id_qty));
+                } else {
+                    DEBUG_MSG(10, ("%s: no projection %lu > %lu\n", obj->index, z_blk, g_file_block_sz));
+                }
+            }
+            if( rc == 0 && (eof || z_blk >= g_file_block_sz) ) {
+                obj->file_size += z_blk;
+                MD5StateAppend(&obj->md5, zbuf, z_blk);
+                inode->key_size = z_blk;
+                SLListPushTail(&obj->li, &inode->n);
+                DEBUG_MSG(5, ("%s close key: spots %lu, size %lu, ratio %hu%%, raw %lu\n",
+                         obj->index, inode->id_qty, inode->key_size, (uint16_t)(((float)(blk - z_blk)/blk)*100), blk));
+                spots_per_block = inode->id_qty;
+                inode = NULL;
+                if( blk > obj->buffer_sz ) {
+                    obj->buffer_sz = blk;
+                }
+                blk = 0;
+                z_blk = 0;
+                proj_id_qty = 0;
+            }
+            if( eof ) {
+                break;
+            }
+        }
+        rc = rc ? rc : Quitting();
+        if( rc != 0 ) {
+            spotid_t spot = 0;
+            SFFReaderCurrentSpot(reader, &spot);
+            PLOGERR(klogErr, (klogErr, rc, "spot $(s)", PLOG_U32(s), spot));
+        }
+        free(zbuf);
+        free(spots_buf);
+    }
+    if( rc == 0 ) {
+        KMDataNode* opt = NULL, *nd = NULL;
+
+        if( (rc = KMDataNodeOpenNodeUpdate(obj->meta, &opt, "Format/Options")) != 0 ) {
+            return rc;
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "ZlibVersion")) == 0 ) {
+            rc = KMDataNodeWriteB16(nd, &zlib_ver);
+            KMDataNodeRelease(nd);
+        }
+        KMDataNodeRelease(opt);
+    }
+    SFFReaderWhack(reader);
+    return rc;
+}
+
+static
+rc_t Fastq_Idx(const SRATable* sratbl, SIndexObj* obj, char* buffer, const size_t buffer_sz)
+{
+    rc_t rc = 0;
+    const FastqReader* reader = NULL;
+
+    uint8_t colorSpace = false;
+    char* colorSpaceKey = "\0";
+    uint8_t origFormat = false;
+    uint8_t printLabel = true;
+    uint8_t printReadId = true;
+    uint8_t clipQuality = true;
+    uint32_t minReadLen = 0;
+    uint16_t qualityOffset = 0;
+
+    {{
+        const SRAColumn* c = NULL;
+        const uint8_t *platform = SRA_PLATFORM_UNDEFINED;
+        bitsz_t o, z;
+
+        if( (rc = SRATableOpenColumnRead(sratbl, &c, "PLATFORM", sra_platform_id_t)) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) != 0 ) {
+            return rc;
+        }
+        if( *platform == SRA_PLATFORM_ABSOLID ) {
+            colorSpace = true;
+        }
+        SRAColumnRelease(c);
+    }}
+
+    if( (rc = FastqReaderMake(&reader, sratbl, g_accession,
+                        colorSpace, origFormat, false, printLabel, printReadId,
+                        !clipQuality, minReadLen, qualityOffset, colorSpaceKey[0],
+                        obj->minSpotId, obj->maxSpotId)) != 0 ) {
+        return rc;
+    } else {
+        KMDataNode* opt = NULL, *nd = NULL;
+
+        if( (rc = KMDataNodeOpenNodeUpdate(obj->meta, &opt, "Format/Options")) != 0 ) {
+            return rc;
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "colorSpace")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &colorSpace);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "colorSpaceKey")) == 0 ) {
+            rc = KMDataNodeWrite(nd, colorSpaceKey, 1);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "origFormat")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &origFormat);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "printLabel")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &printLabel);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "printReadId")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &printReadId);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "clipQuality")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &clipQuality);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "minReadLen")) == 0 ) {
+            rc = KMDataNodeWriteB32(nd, &minReadLen);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "qualityOffset")) == 0 ) {
+            rc = KMDataNodeWriteB16(nd, &qualityOffset);
+            KMDataNodeRelease(nd);
+        }
+        KMDataNodeRelease(opt);
+    }
+
+    if( rc == 0 ) {
+        size_t written = 0;
+        uint32_t blk = 0;
+        SIndexNode* inode = NULL;
+
+        while( rc == 0 ) {
+            rc = FastqReader_GetNextSpotSplitData(reader, buffer, buffer_sz, &written);
+            if( blk >= g_file_block_sz || (GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted) ) {
+                inode->key_size = blk;
+                SLListPushTail(&obj->li, &inode->n);
+                DEBUG_MSG(5, ("Fastq index closed spots %lu, offset %lu, block size %lu\n",
+                                                            inode->id_qty, inode->key, inode->key_size));
+                inode = NULL;
+                if( blk > obj->buffer_sz ) {
+                    obj->buffer_sz = blk;
+                }
+                blk = 0;
+            }
+            if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted ) {
+                rc = 0;
+                break;
+            }
+            if( inode == NULL ) {
+                spotid_t spotid = 0;
+                if( (rc = FastqReaderCurrentSpot(reader, &spotid)) != 0 ) {
+                    break;
+                }
+                inode = malloc(sizeof(SIndexNode));
+                if( inode == NULL ) {
+                    rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+                    break;
+                }
+                inode->key = obj->file_size;
+                inode->key_size = 0;
+                inode->id = spotid;
+                inode->id_qty = 0;
+                DEBUG_MSG(5, ("Fastq index opened spot %ld, offset %lu\n", inode->id, inode->key));
+            }
+            inode->id_qty++;
+            obj->file_size += written;
+            blk += written;
+            MD5StateAppend(&obj->md5, buffer, written);
+            if( g_dump ) {
+                fwrite(buffer, written, 1, stderr);
+            }
+        }
+        rc = rc ? rc : Quitting();
+        if( rc != 0 ) {
+            spotid_t spot = 0;
+            FastqReaderCurrentSpot(reader, &spot);
+            PLOGERR(klogErr, (klogErr, rc, "spot $(s)", PLOG_U32(s), spot));
+        }
+    }
+    FastqReaderWhack(reader);
+    return rc;
+}
+
+static
+rc_t FastqGzip_Idx(const SRATable* sratbl, SIndexObj* obj, char* buffer, const size_t buffer_sz)
+{
+    rc_t rc = 0;
+    const FastqReader* reader = NULL;
+
+    uint16_t zlib_ver = ZLIB_VERNUM;
+    uint8_t colorSpace = false;
+    char* colorSpaceKey = "\0";
+    uint8_t origFormat = false;
+    uint8_t printLabel = true;
+    uint8_t printReadId = true;
+    uint8_t clipQuality = true;
+    uint32_t minReadLen = 0;
+    uint16_t qualityOffset = 0;
+
+    {{
+        const SRAColumn* c = NULL;
+        const uint8_t *platform = SRA_PLATFORM_UNDEFINED;
+        bitsz_t o, z;
+
+        if( (rc = SRATableOpenColumnRead(sratbl, &c, "PLATFORM", sra_platform_id_t)) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) != 0 ) {
+            return rc;
+        }
+        if( *platform == SRA_PLATFORM_ABSOLID ) {
+            colorSpace = true;
+        }
+        SRAColumnRelease(c);
+    }}
+
+    if( (rc = FastqReaderMake(&reader, sratbl, g_accession,
+                        colorSpace, origFormat, false, printLabel, printReadId,
+                        !clipQuality, minReadLen, qualityOffset, colorSpaceKey[0],
+                        obj->minSpotId, obj->maxSpotId)) != 0 ) {
+        return rc;
+    } else {
+        size_t written = 0;
+        uint32_t blk = 0, spots_per_block = 0, proj_id_qty = 0;
+        SIndexNode* inode = NULL;
+        size_t z_blk = 0;
+        size_t spots_buf_sz = g_file_block_sz * 100;
+        size_t zbuf_sz = spots_buf_sz + 100;
+        char* zbuf = malloc(zbuf_sz);
+        char* spots_buf = malloc(spots_buf_sz);
+        bool eof = false;
+
+        if( zbuf == NULL || spots_buf == NULL ) {
+            rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+        }
+        while( rc == 0 ) {
+            if( (rc = FastqReader_GetNextSpotSplitData(reader, buffer, buffer_sz, &written)) == 0 ) {
+                if( inode == NULL ) {
+                    spotid_t spotid = 0;
+                    if( (rc = FastqReaderCurrentSpot(reader, &spotid)) != 0 ) {
+                        break;
+                    }
+                    inode = malloc(sizeof(SIndexNode));
+                    if( inode == NULL ) {
+                        rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+                        break;
+                    }
+                    inode->key = obj->file_size;
+                    inode->key_size = 0;
+                    inode->id = spotid;
+                    inode->id_qty = 0;
+                    DEBUG_MSG(5, ("%s open key: spot %ld, offset %lu\n", obj->index, inode->id, inode->key));
+                }
+                if( blk + written > spots_buf_sz ) {
+                    rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcInsufficient);
+                    break;
+                }
+                inode->id_qty++;
+                memmove(&spots_buf[blk], buffer, written);
+                blk += written;
+                if( g_dump ) {
+                    fwrite(buffer, written, 1, stderr);
+                }
+            }
+            if( (eof = (GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted)) ) {
+                rc = 0;
+                if( inode == NULL ) {
+                    break;
+                }
+            }
+            if( rc == 0 && (eof || 
+                            (proj_id_qty == 0 && inode->id_qty > (spots_per_block * 0.95)) || 
+                            (proj_id_qty > 0 && inode->id_qty >= proj_id_qty) ) ) {
+                rc = ZLib_DeflateBlock(spots_buf, blk, zbuf, zbuf_sz, &z_blk);
+                if( z_blk < g_file_block_sz ) {
+                    /* project needed id_qty */
+                    proj_id_qty = g_file_block_sz * inode->id_qty / z_blk * 1.05;
+                    DEBUG_MSG(5, ("%s: project id qty %u\n", obj->index, proj_id_qty));
+                } else {
+                    DEBUG_MSG(10, ("%s: no projection %u > %u\n", obj->index, z_blk, g_file_block_sz));
+                }
+            }
+            if( rc == 0 && (eof || z_blk >= g_file_block_sz) ) {
+                obj->file_size += z_blk;
+                MD5StateAppend(&obj->md5, zbuf, z_blk);
+                inode->key_size = z_blk;
+                SLListPushTail(&obj->li, &inode->n);
+                DEBUG_MSG(5, ("%s close key: spots %lu, size %lu, ratio %hu%%, raw %u\n",
+                         obj->index, inode->id_qty, inode->key_size, (uint16_t)(((float)(blk - z_blk)/blk)*100), blk ));
+                spots_per_block = inode->id_qty;
+                inode = NULL;
+                if( blk > obj->buffer_sz ) {
+                    obj->buffer_sz = blk;
+                }
+                blk = 0;
+                z_blk = 0;
+                proj_id_qty = 0;
+            }
+            if( eof ) {
+                break;
+            }
+        }
+        rc = rc ? rc : Quitting();
+        if( rc != 0 ) {
+            spotid_t spot = 0;
+            FastqReaderCurrentSpot(reader, &spot);
+            PLOGERR(klogErr, (klogErr, rc, "spot $(s)", PLOG_U32(s), spot));
+        }
+        free(zbuf);
+        free(spots_buf);
+    }
+    if( rc == 0 ) {
+        KMDataNode* opt = NULL, *nd = NULL;
+
+        if( (rc = KMDataNodeOpenNodeUpdate(obj->meta, &opt, "Format/Options")) != 0 ) {
+            return rc;
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "ZlibVersion")) == 0 ) {
+            rc = KMDataNodeWriteB16(nd, &zlib_ver);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "colorSpace")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &colorSpace);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "colorSpaceKey")) == 0 ) {
+            rc = KMDataNodeWrite(nd, colorSpaceKey, 1);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "origFormat")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &origFormat);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "printLabel")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &printLabel);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "printReadId")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &printReadId);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "clipQuality")) == 0 ) {
+            rc = KMDataNodeWriteB8(nd, &clipQuality);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "minReadLen")) == 0 ) {
+            rc = KMDataNodeWriteB32(nd, &minReadLen);
+            KMDataNodeRelease(nd);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &nd, "qualityOffset")) == 0 ) {
+            rc = KMDataNodeWriteB16(nd, &qualityOffset);
+            KMDataNodeRelease(nd);
+        }
+        KMDataNodeRelease(opt);
+    }
+    FastqReaderWhack(reader);
+    return rc;
+}
+
+static
+rc_t MakeIndexes(const SRATable* stbl, KTable* ktbl, KMetadata* meta)
+{
+    rc_t rc = 0;
+    int i;
+    char* buffer = NULL;
+    size_t buffer_sz = g_file_block_sz * 100;
+
+    SIndexObj idx[] = {
+     /*  meta, file,        format,         index,          func,    file_size, buffer_sz, minSpotId, maxSpotId */
+        {NULL, "fastq",    "fastq",      "fuse-fastq",    Fastq_Idx,     0, 0, 0, 0},
+        {NULL, "sff",      "SFF",        "fuse-sff",      SFF_Idx,       0, 0, 0, 0},
+        {NULL, "fastq.gz", "fastq-gzip", "fuse-fastq-gz", FastqGzip_Idx, 0, 0, 0, 0},
+        {NULL, "sff.gz",   "SFF-gzip",   "fuse-sff-gz",   SFFGzip_Idx,   0, 0, 0, 0}
+    };
+
+    for(i = 0; rc == 0 && i < sizeof(idx) / sizeof(idx[0]); i++) {
+        KMDataNode* parent = NULL;
+        if( (rc = KMetadataOpenNodeUpdate(meta, &parent, "/FUSE")) == 0 ) {
+            KMDataNodeDropChild(parent, "root"); /* drop old stuff */
+            if( g_ungzip || strcmp(&idx[i].file[strlen(idx[i].file) - 3], ".gz") == 0 ) {
+                STSMSG(0, ("Preparing index %s", idx[i].index));
+                MD5StateInit(&idx[i].md5);
+                SLListInit(&idx[i].li);
+                KMDataNodeDropChild(parent, "%s.tmp", idx[i].file);
+                if( (rc = KMDataNodeOpenNodeUpdate(parent, &idx[i].meta, "%s.tmp", idx[i].file)) == 0 ) {
+                    if( idx[i].func != NULL ) {
+                        if( buffer == NULL ) {
+                            if( (buffer = malloc(buffer_sz)) == NULL ) {
+                                rc = RC(rcExe, rcIndex, rcConstructing, rcMemory, rcExhausted);
+                                break;
+                            }
+                        }
+                        rc = idx[i].func(stbl, &idx[i], buffer, buffer_sz);
+                        if( rc == 0 ) {
+                            MD5StateFinish(&idx[i].md5, idx[i].md5_digest);
+                            rc = CommitIndex(ktbl, idx[i].index, &idx[i].li);
+                        }
+                    }
+                    if( rc == 0 ) {
+                        rc = WriteFileMeta(&idx[i]);
+                    }
+                    KMDataNodeRelease(idx[i].meta);
+                }
+                if( GetRCState(rc) == rcUnsupported ) {
+                    KMDataNodeDropChild(parent, "%s", idx[i].file);
+                    PLOGERR(klogWarn, (klogWarn, rc, "Index $(i) is not supported for this table", PLOG_S(i), idx[i].index));
+                    rc = 0;
+                } else if( rc == 0 ) {
+                    char f[4096];
+                    strcpy(f, idx[i].file);
+                    strcat(f, ".tmp");
+                    KMDataNodeDropChild(parent, "%s", idx[i].file);
+                    rc = KMDataNodeRenameChild(parent, f, idx[i].file);
+                }
+            } else if( !g_ungzip ) {
+                KTableDropIndex(ktbl, idx[i].index);
+                KMDataNodeDropChild(parent, "%s", idx[i].file);
+            }
+            KMDataNodeDropChild(parent, "%s.tmp", idx[i].file);
+            KMDataNodeRelease(parent);
+        }
+        SLListWhack(&idx[i].li, WhackIndexData, NULL);
+    }
+    free(buffer);
+    return rc;
+}
+
+const char* blocksize_usage[] = {"Index block size", NULL};
+const char* accession_usage[] = {"Accession", NULL};
+
+/* this enum must have same order as MainArgs array below */
+enum OptDefIndex {
+    eopt_BlockSize = 0,
+    eopt_Accession,
+    eopt_DumpIndex,
+    eopt_noGzip
+};
+
+OptDef MainArgs[] =
+{
+    /* if you change order in this array, rearrange enum above accordingly! */
+    {"block-size", "b", NULL, blocksize_usage, 1, true, false},
+    {"accession", "a", NULL, accession_usage, 1, true, false},
+    {"hidden-dump", "d", NULL, NULL, 1, false, false},
+    {"hidden-nogzip", "g", NULL, NULL, 1, false, false}
+};
+const char* MainParams[] =
+{
+    /* if you change order in this array, rearrange enum above accordingly! */
+    "size",
+    "accession",
+    NULL,
+    NULL
+};
+const size_t MainArgsQty = sizeof(MainArgs) / sizeof(MainArgs[0]);
+
+const char UsageDefaultName[] = "sra-makeidx";
+
+rc_t CC UsageSummary (const char * name)
+{
+    return 0;
+}
+
+rc_t CC Usage(const Args* args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+    int i;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    OUTMSG(( "\nUsage:\n\t%s [options] <table>\n\n", progname));
+
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( MainArgs[i].required && MainArgs[i].help ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, MainParams[i], MainArgs[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( !MainArgs[i].required && MainArgs[i].help ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, MainParams[i], MainArgs[i].help);
+        }
+    }
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+    return rc;
+}
+rc_t KMain(int argc, char *argv[])
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+    const char* errmsg = NULL, *table_dir = NULL;
+    char accn[1024];
+    
+    if( (rc = ArgsMakeAndHandle(&args, argc, argv, 1, MainArgs, MainArgsQty)) == 0 ) {
+        const char* blksz = NULL;
+        uint32_t count, dump = 0, gzip = 0;
+
+        if( (rc = ArgsParamCount(args, &count)) != 0 || count != 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count > 1 ? rcExcessive : rcInsufficient);
+            errmsg = "table";
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_BlockSize].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_BlockSize].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_BlockSize].name, 0, (const void **)&blksz)) != 0 ) {
+            errmsg = MainArgs[eopt_BlockSize].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Accession].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_Accession].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Accession].name, 0, (const void **)&g_accession)) != 0 ) {
+            errmsg = MainArgs[eopt_Accession].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_DumpIndex].name, &dump)) != 0 ) {
+            errmsg = MainArgs[eopt_DumpIndex].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_noGzip].name, &gzip)) != 0 ) {
+            errmsg = MainArgs[eopt_noGzip].name;
+        }
+        while( rc == 0 ) {
+            long val = 0;
+            char* end = NULL;
+
+            if( blksz != NULL ) {
+                errno = 0;
+                val = strtol(blksz, &end, 10);
+                if( errno != 0 || blksz == end || *end != '\0' || val <= 0 ) {
+                    rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                    errmsg = MainArgs[eopt_BlockSize].name;
+                    break;
+                } else if( val <= 128 || val > (1024 * 1024 * 1024) ) {
+                    rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcEmpty);
+                    errmsg = "block size invalid";
+                    break;
+                }
+                g_file_block_sz = val;
+            }
+            if( (rc = ArgsParamValue(args, 0, (const void **)&table_dir)) != 0 ) {
+                errmsg = "table";
+                break;
+            }
+            if( g_accession == NULL ) {
+                const char* p = strchr(table_dir, '/');
+                size_t l = 0;
+
+                g_accession = accn;
+                if( p == NULL ) {
+                    p = strchr(table_dir, '\\');
+                }
+                strncpy(accn, p == NULL ? table_dir : p + 1, sizeof(accn) - 1);
+                if( accn[0] == '\0' ) {
+                    rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcEmpty);
+                    errmsg = "accession";
+                }
+                l = strlen(accn);
+                if( accn[l - 1] == '/' || accn[l - 1] == '\\') {
+                    accn[--l] = '\0';
+                }
+                if( strncmp(&accn[l - 9], ".lite.sra", 9) == 0 ) {
+                    accn[l - 9] = '\0';
+                } else if( strncmp(&accn[l - 4], ".sra", 4) == 0 ) {
+                    accn[l - 4] = '\0';
+                }
+            }
+            g_dump = dump > 0;
+            g_ungzip = gzip > 0;
+            break;
+        }
+    }
+    if( rc == 0 ) {
+        SRAMgr* smgr = NULL;
+        KDBManager* kmgr = NULL;
+
+        DEBUG_MSG(5, ("table %s, accession %s\n", table_dir, g_accession));
+        if( (rc = SRAMgrMakeUpdate(&smgr, NULL)) == 0 ) {
+            if( (rc = KDBManagerMakeUpdate(&kmgr, NULL)) == 0 ) {
+                bool relock = true;
+                if( (rc = KDBManagerUnlock(kmgr, table_dir)) != 0 ) {
+                    relock = false;
+                    rc = GetRCState(rc) == rcUnlocked ? 0 : rc;
+                } else {
+                    PLOGMSG(klogInfo, (klogInfo, "Table $(p) locked, unlocking", PLOG_S(p), table_dir));
+                }
+                if( rc == 0 ) {
+                    KTable* ktbl = NULL;
+                    if( (rc = KDBManagerOpenTableUpdate(kmgr, &ktbl, table_dir)) == 0 ) {
+                        KMetadata* meta = NULL;
+                        if( (rc = KTableOpenMetadataUpdate(ktbl, &meta)) == 0 ) {
+                            const SRATable* stbl = NULL;
+                            if( (rc = SRAMgrOpenTableRead(smgr, &stbl, table_dir)) == 0 ) {
+                                rc = MakeIndexes(stbl, ktbl, meta);
+                                SRATableRelease(stbl);
+                            }
+                        }
+                        KMetadataRelease(meta);
+                    }
+                    KTableRelease(ktbl);
+                }
+                if( rc == 0 && relock ) {
+                    rc = KDBManagerLock(kmgr, table_dir);
+                }
+                KDBManagerRelease(kmgr);
+            }
+            SRAMgrRelease(smgr);
+        }
+    }
+    if( rc != 0 && rc != KLogLastErrorCode() ) {
+        if( errmsg ) {
+            Usage(args);
+        }
+        LOGERR(klogErr, rc, errmsg ? errmsg : "stop");
+    }
+    ArgsWhack(args);
+    return rc;
+}
diff --git a/tools/fuse/sra-node.c b/tools/fuse/sra-node.c
new file mode 100644
index 0000000..e138ef3
--- /dev/null
+++ b/tools/fuse/sra-node.c
@@ -0,0 +1,165 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <klib/rc.h>
+#include <kfs/directory.h>
+
+#include <sra/sradb-priv.h>
+
+typedef struct SRANode SRANode;
+#define FSNODE_IMPL SRANode
+
+#include "log.h"
+#include "xml.h"
+#include "sra-list.h"
+#include "formats.h"
+#include "kfile-accessor.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+struct SRANode {
+    FSNode node;
+    SRAConfigFlags flags;
+    const SRAListNode* sra;
+    const char* prefix;
+    size_t prefix_len;
+};
+
+static
+rc_t SRANode_HasChild(const SRANode* cself, const char* name, size_t name_len)
+{
+    rc_t rc = 0;
+
+    if( name == NULL || cself->prefix_len >= name_len || strncmp(cself->prefix, name, cself->prefix_len) != 0 ) {
+        rc = RC(rcExe, rcSRA, rcSearching, rcDirEntry, rcNotFound);
+    } else {
+        const FileOptions* opt;
+        rc = SRAListNode_GetType(cself->sra, cself->flags, &name[cself->prefix_len], &opt);
+    }
+    return rc;
+}
+
+static
+rc_t SRANode_Attr(const SRANode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL || strncmp(cself->prefix, subpath, cself->prefix_len) != 0 ) {
+        rc = RC(rcExe, rcSRA, rcEvaluating, rcDirEntry, rcInvalid);
+    } else {
+        const FileOptions* opt;
+        if( (rc = SRAListNode_GetType(cself->sra, cself->flags, &subpath[cself->prefix_len], &opt)) == 0 &&
+            (rc = SRAListNode_TableMTime(cself->sra, ts)) == 0 ) {
+            *type = kptFile;
+            *file_sz = opt->file_sz;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SRANode_Dir(const SRANode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    if( subpath != NULL ) {
+        return RC(rcExe, rcDirectory, rcListing, rcDirEntry, rcInvalid);
+    }
+    return SRAListNode_ListFiles(cself->sra, cself->prefix, cself->flags, func, data);
+}
+
+static
+rc_t SRANode_Open(const SRANode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( subpath == NULL || strncmp(cself->prefix, subpath, cself->prefix_len) != 0 ) {
+        rc = RC(rcExe, rcSRA, rcEvaluating, rcDirEntry, rcInvalid);
+    } else {
+        const FileOptions* opt;
+        if( (rc = SRAListNode_GetType(cself->sra, cself->flags, &subpath[cself->prefix_len], &opt)) == 0 ) {
+            const KFile* kf = NULL;
+            if( (rc = FileOptions_OpenFile(opt, cself->sra, &kf)) == 0 &&
+                (rc = KFileAccessor_Make(accessor, cself->prefix, kf)) != 0 ) {
+                ReleaseComplain(KFileRelease, kf);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t SRANode_Release(SRANode* self)
+{
+    if( self != NULL ) {
+        SRAListNode_Release(self->sra);
+    }
+    return 0;
+}
+
+static FSNode_vtbl SRANode_vtbl = {
+    sizeof(SRANode),
+    SRANode_HasChild,
+    NULL,
+    SRANode_Attr,
+    SRANode_Dir,
+    NULL,
+    SRANode_Open,
+    SRANode_Release
+};
+
+rc_t SRANode_Make(FSNode* parent, const char* prefix, const SRAListNode* sra, SRAConfigFlags flags)
+{
+    rc_t rc = 0;
+
+    if( parent == NULL || prefix == NULL || sra == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        SRANode* ff = NULL;
+        char buf[128];
+
+        strcpy(buf, "SRA-");
+        strcat(buf, prefix);
+        DEBUG_MSG(8, ("Adding %s\n", buf));
+        if( (rc = FSNode_Make((FSNode**)&ff, buf, &SRANode_vtbl)) == 0 ) {
+            ff->flags |= (flags & eSRAFuseFileArc) ? (eSRAFuseFmtArc | eSRAFuseFmtArcMD5) : 0;
+            ff->flags |= (flags & eSRAFuseFileArcLite) ? (eSRAFuseFmtArcLite | eSRAFuseFmtArcLiteMD5) : 0;
+            ff->flags |= (flags & eSRAFuseFileFastq) ? (eSRAFuseFmtFastq | eSRAFuseFmtFastqGz | eSRAFuseFmtFastqMD5) : 0;
+            ff->flags |= (flags & eSRAFuseFileSFF) ? (eSRAFuseFmtSFF | eSRAFuseFmtSFFGz | eSRAFuseFmtSFFMD5) : 0;
+            ff->prefix = prefix;
+            ff->prefix_len = strlen(prefix);
+            if( (rc = SRAListNode_AddRef(sra)) == 0 ) {
+                ff->sra = sra;
+                rc = FSNode_AddChild(parent, &ff->node);
+            }
+            if( rc != 0 ) {
+                FSNode_Release(&ff->node);
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/sra-node.h b/tools/fuse/sra-node.h
new file mode 100644
index 0000000..7ed2df8
--- /dev/null
+++ b/tools/fuse/sra-node.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sra_fuse_sra_node_
+#define _h_sra_fuse_sra_node_
+
+#include "node.h"
+
+rc_t SRANode_Make(FSNode* parent, const char* prefix, const SRAListNode* sra, SRAConfigFlags flags);
+
+#endif /* _h_sra_fuse_sra_node_ */
diff --git a/tools/fuse/sra-sff.c b/tools/fuse/sra-sff.c
new file mode 100644
index 0000000..ca2292f
--- /dev/null
+++ b/tools/fuse/sra-sff.c
@@ -0,0 +1,249 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kproc/lock.h>
+#include <kdb/table.h>
+#include <kdb/index.h>
+
+#include <sra/sradb-priv.h>
+#include <sra/sff.h>
+
+#include "log.h"
+#include "xml.h"
+#include "sra-list.h"
+#include "sra-sff.h"
+#include "zlib-simple.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct SRASFFFile SRASFFFile;
+#define KFILE_IMPL SRASFFFile
+#include <kfs/impl.h>
+
+struct SRASFFFile {
+    KFile dad;
+    uint32_t buffer_sz;
+    uint64_t file_sz;
+    char* gzipped; /* serves as flag and a buffer */
+    KLock* lock;
+    const SRATable* stbl;
+    const KTable* ktbl;
+    const KIndex* kidx;
+    const SFFReader* reader;
+    /* current buf content */
+    uint64_t from;
+    uint64_t size;
+    char* buf;
+};
+
+static
+rc_t SRASFFFile_Destroy(SRASFFFile *self)
+{
+    if( KLockAcquire(self->lock) == 0 ) {
+        ReleaseComplain(SFFReaderWhack, self->reader);
+        ReleaseComplain(KIndexRelease, self->kidx);
+        ReleaseComplain(KTableRelease, self->ktbl);
+        ReleaseComplain(SRATableRelease, self->stbl);
+        FREE(self->buf < self->gzipped ? self->buf : self->gzipped);
+        ReleaseComplain(KLockUnlock, self->lock);
+        ReleaseComplain(KLockRelease, self->lock);
+        FREE(self);
+    }
+    return 0;
+}
+
+static
+struct KSysFile* SRASFFFile_GetSysFile(const SRASFFFile *self, uint64_t *offset)
+{
+    *offset = 0;
+    return NULL;
+}
+
+static
+rc_t SRASFFFile_RandomAccess(const SRASFFFile *self)
+{
+    return 0;
+}
+
+static
+uint32_t SRASFFFile_Type(const SRASFFFile *self)
+{
+    return kfdFile;
+}
+
+static
+rc_t SRASFFFile_Size(const SRASFFFile *self, uint64_t *size)
+{
+    *size = self->file_sz;
+    return 0;
+}
+
+static
+rc_t SRASFFFile_SetSize(SRASFFFile *self, uint64_t size)
+{
+    return RC(rcExe, rcFile, rcUpdating, rcInterface, rcUnsupported);
+}
+
+static
+rc_t SRASFFFile_Read(const SRASFFFile* self, uint64_t pos, void *buffer, size_t size, size_t *num_read)
+{
+    rc_t rc = 0;
+
+    if( pos >= self->file_sz ) {
+        *num_read = 0;
+    } else if( (rc = KLockAcquire(self->lock)) == 0 ) {
+        do {
+            if( pos < self->from || pos >= (self->from + self->size) ) {
+                int64_t id = 0;
+                uint64_t id_qty = 0;
+                DEBUG_MSG(8, ("Caching for pos %lu %lu bytes to go\n", pos, size - *num_read));
+                if( (rc = KIndexFindU64(self->kidx, pos, &((SRASFFFile*)self)->from, &((SRASFFFile*)self)->size, &id, &id_qty)) == 0 ) {
+                    DEBUG_MSG(10, ("Caching from %lu:%lu %lu bytes\n", self->from, self->from + self->size - 1, self->size));
+                    DEBUG_MSG(10, ("Caching spot &ld %lu spots\n", id, id_qty));
+                    if( (rc = SFFReaderSeekSpot(self->reader, id)) == 0 ) {
+                        size_t inbuf = 0, w = 0;
+                        char* b = self->buf;
+                        uint64_t left = self->buffer_sz;
+                        do {
+                            if( id == 1 ) {
+                                if( (rc = SFFReaderHeader(self->reader, 0, b, left, &w)) != 0 ) {
+                                    break;
+                                }
+                                b += w; left -= w; inbuf += w;
+                                DEBUG_MSG(10, ("SFF header cached %lu bytes\n", inbuf));
+                            }
+                            if( (rc = SFFReader_GetCurrentSpotData(self->reader, b, left, &w)) != 0 ) {
+                                break;
+                            }
+                            b += w; left -= w; inbuf += w; --id_qty;
+                            DEBUG_MSG(10, ("SFF spot %ld cached %u bytes\n", id, inbuf));
+                            id++;
+                        } while( id_qty > 0 && (rc = SFFReaderNextSpot(self->reader)) == 0);
+                        if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcExhausted ) {
+                            DEBUG_MSG(10, ("No more rows\n"));
+                            rc = 0;
+                        }
+                        DEBUG_MSG(8, ("Cached %u bytes\n", inbuf));
+                        if( self->gzipped != NULL ) {
+                            size_t compressed = 0;
+                            if( (rc = ZLib_DeflateBlock(self->buf, inbuf, self->gzipped, self->buffer_sz, &compressed)) == 0 ) {
+                                char* b = self->buf;
+                                ((SRASFFFile*)self)->buf = self->gzipped;
+                                ((SRASFFFile*)self)->gzipped = b;
+                                ((SRASFFFile*)self)->size = compressed;
+                                DEBUG_MSG(8, ("gzipped %lu bytes\n", self->size));
+                            }
+                        }
+                    }
+                }
+            }
+            if( rc == 0 ) {
+                off_t from = pos - self->from;
+                size_t q = (self->size - from) > (size - *num_read) ? (size - *num_read) : (self->size - from);
+                DEBUG_MSG(10, ("Copying from %lu %u bytes\n", from, q));
+                memmove(&((char*)buffer)[*num_read], &self->buf[from], q);
+                *num_read = *num_read + q;
+                pos += q;
+            }
+        } while( rc == 0 && *num_read < size && pos < self->file_sz );
+        ReleaseComplain(KLockUnlock, self->lock);
+    }
+    return rc;
+}
+
+static
+rc_t SRASFFFile_Write(SRASFFFile *self, uint64_t pos, const void *buffer, size_t size, size_t *num_writ)
+{
+    return RC(rcExe, rcFile, rcWriting, rcInterface, rcUnsupported);
+}
+
+static KFile_vt_v1 SRASFFFile_vtbl = {
+    1, 1,
+    SRASFFFile_Destroy,
+    SRASFFFile_GetSysFile,
+    SRASFFFile_RandomAccess,
+    SRASFFFile_Size,
+    SRASFFFile_SetSize,
+    SRASFFFile_Read,
+    SRASFFFile_Write,
+    SRASFFFile_Type
+};
+
+rc_t SRASFFFile_Open(const KFile** cself, const SRAListNode* sra, const FileOptions* opt)
+{
+    rc_t rc = 0;
+    SRASFFFile* self;
+
+    CALLOC( self, 1, sizeof( *self ) );
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        if ( ( rc = KFileInit(&self->dad, (const KFile_vt*)&SRASFFFile_vtbl, "SRASFFFile", "no-name", true, false ) ) == 0 )
+        {
+            if ( ( rc = SRAListNode_TableOpen( sra, &self->stbl ) ) == 0 )
+            {
+                if ( ( rc = SRATableGetKTableRead( self->stbl, &self->ktbl ) ) == 0 )
+                {
+                    if ( ( rc = KTableOpenIndexRead( self->ktbl, &self->kidx, opt->index ) ) == 0 )
+                    {
+                        if ( ( rc = KLockMake( &self->lock ) ) == 0 )
+                        {
+                            MALLOC( self->buf, opt->buffer_sz * ( opt->f.sff.gzip ? 2 : 1 ) );
+                            if ( self->buf == NULL )
+                            {
+                                rc = RC( rcExe, rcFile, rcOpening, rcMemory, rcExhausted );
+                            }
+                            else
+                            {
+                                self->file_sz = opt->file_sz;
+                                self->buffer_sz = opt->buffer_sz;
+                                if ( opt->f.sff.gzip )
+                                {
+                                    self->gzipped = &self->buf[ opt->buffer_sz ];
+                                }
+                                self->from = ~0; /* reset position beyond file end */
+                                rc = SFFReaderMake( &self->reader, self->stbl, opt->f.sff.accession, opt->f.sff.minSpotId, opt->f.sff.maxSpotId );
+                            }
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+            {
+                *cself = &self->dad;
+            }
+            else
+            {
+                KFileRelease( &self->dad );
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/sra-sff.h b/tools/fuse/sra-sff.h
new file mode 100644
index 0000000..0c00e60
--- /dev/null
+++ b/tools/fuse/sra-sff.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sra_fuse_sra_sff_
+#define _h_sra_fuse_sra_sff_
+
+#include "node.h"
+
+rc_t SRASFFFile_Open(const KFile** cself, const SRAListNode* sra, const FileOptions* opt);
+
+#endif /* _h_sra_fuse_sra_sff_ */
diff --git a/tools/fuse/tar-file.c b/tools/fuse/tar-file.c
new file mode 100644
index 0000000..df7fc6b
--- /dev/null
+++ b/tools/fuse/tar-file.c
@@ -0,0 +1,127 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <kfs/file.h>
+
+#include <stdlib.h>
+
+#include "log.h"
+#include "tar-list.h"
+#include "tar-file.h"
+
+typedef struct TarFile TarFile;
+#define KFILE_IMPL TarFile
+#include <kfs/impl.h>
+
+struct TarFile {
+    KFile dad;
+    const TarFileList* list;
+};
+
+static
+rc_t TarFile_Destroy(TarFile *self)
+{
+    TarFileList_Release(self->list);
+    FREE(self);
+    return 0;
+}
+
+static
+struct KSysFile* TarFile_GetSysFile(const TarFile *self, uint64_t *offset)
+{
+    *offset = 0;
+    return NULL;
+}
+
+static
+rc_t TarFile_RandomAccess(const TarFile *self)
+{
+    return 0;
+}
+
+static
+uint32_t TarFile_Type(const TarFile *self)
+{
+    return kfdFile;
+}
+
+static
+rc_t TarFile_Size(const TarFile *self, uint64_t *size)
+{
+    return TarFileList_Size(self->list, size);
+}
+
+static
+rc_t TarFile_SetSize(TarFile *self, uint64_t size)
+{
+    return RC(rcExe, rcFile, rcUpdating, rcInterface, rcUnsupported);
+}
+
+static
+rc_t TarFile_Read(const TarFile* self, uint64_t pos, void *buffer, size_t size, size_t *num_read)
+{
+    return TarFileList_Read(self->list, pos, buffer, size, num_read);
+}
+
+static
+rc_t TarFile_Write(TarFile *self, uint64_t pos, const void *buffer, size_t size, size_t *num_writ)
+{
+    return RC(rcExe, rcFile, rcWriting, rcInterface, rcUnsupported);
+}
+
+static KFile_vt_v1 TarFile_vtbl = {
+    1, 1,
+    TarFile_Destroy,
+    TarFile_GetSysFile,
+    TarFile_RandomAccess,
+    TarFile_Size,
+    TarFile_SetSize,
+    TarFile_Read,
+    TarFile_Write,
+    TarFile_Type
+};
+
+rc_t TarFile_Open( const KFile** cself, const TarFileList* list )
+{
+    rc_t rc = 0;
+    TarFile* self;
+
+    CALLOC(self, 1, sizeof(*self));
+
+    if ( self == NULL )
+    {
+        rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    else if ( ( rc = KFileInit( &self->dad, (const KFile_vt*)&TarFile_vtbl, "TarFile", "no-name", true, false ) ) == 0 &&
+              ( rc = TarFileList_Open( list ) ) == 0 )
+    {
+        self->list = list;
+        *cself = &self->dad;
+    }
+    else
+    {
+        KFileRelease( &self->dad );
+    }
+    return rc;
+}
diff --git a/tools/fuse/tar-file.h b/tools/fuse/tar-file.h
new file mode 100644
index 0000000..b720161
--- /dev/null
+++ b/tools/fuse/tar-file.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_tar_file_
+#define _h_sra_fuse_tar_file_
+
+#include "node.h"
+
+rc_t TarFile_Open(const KFile** cself, const TarFileList* list);
+
+#endif /* _h_sra_fuse_tar_file_ */
diff --git a/tools/fuse/tar-list.c b/tools/fuse/tar-list.c
new file mode 100644
index 0000000..7b06e23
--- /dev/null
+++ b/tools/fuse/tar-list.c
@@ -0,0 +1,598 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <kproc/lock.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include "log.h"
+#include "tar-list.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+typedef enum ETar_Format {
+    eTar_Unknown = 0,
+    eTar_Legacy  = 1,
+    eTar_OldGNU  = 2,
+    eTar_Ustar   = 4,
+    eTar_Posix   = 5
+} ETar_Format;
+
+/* POSIX "ustar" tar archive member header */
+typedef struct SHeader {
+    char name[100];
+    char mode[8];
+    char uid[8];
+    char gid[8];
+    char size[12];
+    char mtime[12];
+    char checksum[8];
+    char typeflag[1];
+    char linkname[100];
+    char magic[6];
+    char version[2];
+    char uname[32];
+    char gname[32];
+    char devmajor[8];
+    char devminor[8];
+    union {
+        char prefix[155];    /* not valid with old GNU format */
+        struct {             /* old GNU format only */
+            char atime[12];
+            char ctime[12];
+        } gt;
+    } x;
+} SHeader;
+
+#define TAR_BLOCK_SIZE (512)
+#define TAR_TAIL_PAD (TAR_BLOCK_SIZE * 2)
+#define TAR_BLOCK_PAD (TAR_BLOCK_SIZE * 20)
+
+union TarBlock {
+    char buffer[TAR_BLOCK_SIZE];
+    SHeader header;
+};
+
+typedef struct TarEntry {
+    BSTNode node;
+    const char* path;
+    const char* name;
+    uint64_t size;
+    KTime_t mtime;
+    bool executable;
+    int16_t name_fmt; /* 0 - fits, +n - split, -n n-blocks */
+    /* file chunks offsets within archive */
+    /* file_header block(s) | file itself | padding to 512 block size */
+    uint64_t start, data, pad, end;
+} TarEntry;
+
+
+static
+void TarEntry_Init(const TarEntry* entry, uint64_t offset, const char* path, const char* name, uint64_t size, KTime_t mtime, bool executable)
+{
+    SHeader* h = NULL;
+    size_t nlen = strlen(name), alloc = 0;
+    TarEntry* e = (TarEntry*)entry;
+
+    e->name = name;
+    e->path = path;
+    e->size = size;
+    e->mtime = mtime;
+    e->executable = executable;
+
+    if(nlen <= sizeof(h->name)) {
+        /* Name fits! */
+        alloc = 1;
+        e->name_fmt = 0;
+    } else if( nlen <= sizeof(h->x.prefix) + 1 + sizeof(h->name) ) {
+        /* Try to split the long name into a prefix and a short name (POSIX) */
+        size_t split = nlen;
+        if(split > sizeof(h->x.prefix)) {
+            split = sizeof(h->x.prefix);
+        }
+        while(split > 0 && e->name[--split] != '/');
+        if(split && nlen - split <= sizeof(h->name) + 1) {
+            alloc = 1;
+            e->name_fmt = split;
+        }
+    }
+    if( alloc == 0 ) {
+        nlen++;
+        /* 2 pieces: 1st long file name header block + name block(s) and second actual file header block */
+        alloc = nlen / TAR_BLOCK_SIZE;
+        alloc += (nlen % TAR_BLOCK_SIZE) ? 1 : 0;
+        alloc += 2;
+        e->name_fmt = -alloc;
+    }
+    e->start = offset;
+    e->data = e->start + alloc * TAR_BLOCK_SIZE;
+    e->pad = e->data + e->size;
+    e->end = e->size % TAR_BLOCK_SIZE;
+    if( e->end != 0 ) {
+        e->end = e->pad + (TAR_BLOCK_SIZE - e->end) - 1;
+    } else {
+        e->end = e->pad - 1;
+    }
+}
+
+/* Convert a number to an octal string padded to the left
+   with [leading] zeros ('0') and having _no_ trailing '\0'. */
+static
+bool TarEntry_NumToOctal(unsigned long val, char* ptr, size_t len)
+{
+    do {
+        ptr[--len] = '0' + (char)(val & 7);
+        val >>= 3;
+    } while(len);
+    return val ? false : true;
+}
+
+static
+bool TarEntry_NumToBase256(uint64_t val, char* ptr, size_t len)
+{
+    do {
+        ptr[--len] = (unsigned char)(val & 0xFF);
+        val >>= 8;
+    } while(len);
+    *ptr |= '\x80';  /* set base-256 encoding flag */
+    return val ? false : true;
+}
+
+
+/* Return 0 (false) if conversion failed; 1 if the value converted to
+   conventional octal representation (perhaps, with terminating '\0'
+   sacrificed), or -1 if the value converted using base-256. */
+static
+int TarEntry_EncodeUint64(uint64_t val, char* ptr, size_t len)
+{
+    if((unsigned long) val == val) {
+        /* Max file size: */
+        if(TarEntry_NumToOctal((unsigned long) val, ptr, len)) {
+            /* 8GB - 1 */
+            return 1;
+        }
+        if(TarEntry_NumToOctal((unsigned long) val, ptr, ++len)) {
+            /* 64GB - 1  */
+            return 1;
+        }
+    }
+    if(TarEntry_NumToBase256(val, ptr, len)) {
+        /* up to 2^94-1  */
+        return -1;
+    }
+    return 0;
+}
+
+static
+bool TarEntry_TarChecksum(TarBlock* block, bool isgnu)
+{
+    SHeader* h = &block->header;
+    size_t i, len = sizeof(h->checksum) - (isgnu ? 2 : 1);
+    unsigned long checksum = 0;
+    const unsigned char* p = (const unsigned char*)block->buffer;
+
+    /* Compute the checksum */
+    memset(h->checksum, ' ', sizeof(h->checksum));
+    for(i = 0; i < sizeof(block->buffer); i++) {
+        checksum += *p++;
+    }
+    /* ustar: '\0'-terminated checksum
+       GNU special: 6 digits, then '\0', then a space [already in place] */
+    if(!TarEntry_NumToOctal(checksum, h->checksum, len)) {
+        return false;
+    }
+    h->checksum[len] = '\0';
+    return true;
+}
+
+static
+rc_t TarEntry_PackName(const TarEntry* e, TarBlock* block)
+{
+    SHeader* h = &block[0].header;
+
+    if( e->name_fmt == 0 ) {
+        strcpy(h->name, e->name);
+    } else if( e->name_fmt > 0 ) {
+        /* to split the long name into a prefix and a short name (POSIX) */
+        memmove(h->x.prefix, e->name, e->name_fmt);
+        memmove(h->name, e->name + e->name_fmt + 1, strlen(e->name) - e->name_fmt - 1);
+    } else {
+        strcpy(h->name, "././@LongLink");
+        TarEntry_NumToOctal(0, h->mode, sizeof(h->mode) - 1);
+        TarEntry_NumToOctal(0, h->uid, sizeof(h->uid) - 1);
+        TarEntry_NumToOctal(0, h->gid, sizeof(h->gid) - 1);
+        /* write terminating '\0' as it can always be made to fit in */
+        if(!TarEntry_EncodeUint64(strlen(e->name) + 1, h->size, sizeof(h->size) - 1)) {
+            return RC(rcExe, rcArc, rcConstructing, rcId, rcOutofrange);
+        }
+        TarEntry_NumToOctal(0, h->mtime, sizeof(h->mtime)- 1);
+        h->typeflag[0] = 'L';
+        /* Old GNU magic protrudes into adjacent version field */
+        memmove(h->magic, "ustar  ", 8); /* 2 spaces and '\0'-terminated */
+        TarEntry_TarChecksum(block, true);
+        strcpy((char*)(&block[1]), e->name);
+
+        /* Still, store the initial part in the original header */
+        h = &block[-e->name_fmt - 1].header;
+        memmove(h->name, e->name, sizeof(h->name));
+    }
+    return 0;
+}
+
+static
+rc_t TarEntry_Header(const TarEntry* e, TarBlock* block)
+{
+    rc_t rc = 0;
+    /* Update format as we go */
+
+    ETar_Format fmt = eTar_Ustar;
+    int ok;
+    do {
+        uint32_t size =  e->name_fmt < 0 ? -e->name_fmt : 1;
+        SHeader* h = &block[size - 1].header;
+        memset(block, 0, sizeof(*block) * size);
+        if( (rc = TarEntry_PackName(e, block)) != 0 ) {
+            break;
+        }
+        if( !TarEntry_NumToOctal(e->executable ? 00755 : 00644, h->mode, sizeof(h->mode) - 1) ) {
+            rc = RC(rcExe, rcArc, rcConstructing, rcData, rcInvalid);
+            break;
+        }
+        TarEntry_EncodeUint64(0, h->uid, sizeof(h->uid) - 1);
+        TarEntry_EncodeUint64(0, h->gid, sizeof(h->gid) - 1);
+
+        ok = TarEntry_EncodeUint64(e->size, h->size, sizeof(h->size) - 1);
+        if(!ok) {
+            rc = RC(rcExe, rcArc, rcConstructing, rcFile, rcTooBig);
+            break;
+        }
+        if(ok < 0) {
+            fmt = eTar_OldGNU;
+        }
+        if(fmt != eTar_Ustar && h->x.prefix[0]) {
+            /* cannot downgrade to reflect encoding */
+            fmt  = eTar_Ustar;
+        }
+        /* Modification time */
+        if (!TarEntry_NumToOctal(e->mtime, h->mtime, sizeof(h->mtime) - 1)) {
+            rc = RC(rcExe, rcArc, rcConstructing, rcId, rcOutofrange);
+            break;
+        }
+        /* limited version: expect only normal files !!! */
+        h->typeflag[0] = '0';
+        /* User and group */
+        memmove(h->uname, "anyone", 6);
+        /* memmove(h->gname, "?????", 5); */
+
+        /* Device nos to complete the ustar header protocol (all fields ok) */
+        if( fmt != eTar_OldGNU ) {
+            TarEntry_NumToOctal(0, h->devmajor, sizeof(h->devmajor) - 1);
+            TarEntry_NumToOctal(0, h->devminor, sizeof(h->devminor) - 1);
+        }
+        if(fmt != eTar_OldGNU) {
+            /* Magic */
+            strcpy(h->magic, "ustar");
+            /* Version (EXCEPTION:  not '\0' terminated) */
+            memmove(h->version, "00", 2);
+        } else {
+            /* Old GNU magic protrudes into adjacent version field */
+            memmove(h->magic, "ustar  ", 8); /* 2 spaces and '\0'-terminated */
+        }
+
+        if( !TarEntry_TarChecksum(&block[size - 1], fmt == eTar_OldGNU ? true : false) ) {
+            rc = RC(rcExe, rcArc, rcConstructing, rcId, rcOutofrange);
+        }
+    } while(false);
+    return rc;
+}
+
+static
+rc_t TarEntry_Read(const TarEntry* entry, TarBlock* header_buf, const KFile* kfile, uint64_t pos, uint8_t* buffer, const size_t size, size_t* num_read)
+{
+    rc_t rc = 0;
+
+    if( pos < entry->data ) {
+        /* insert tar header */
+        if( (rc = TarEntry_Header(entry, header_buf)) == 0 ) {
+            size_t q = entry->data - pos;
+            if( q > (size - *num_read) ) {
+                q = size - *num_read;
+            }
+            memmove(&buffer[*num_read], &header_buf->buffer[pos - entry->start], q);
+            *num_read = *num_read + q;
+            pos += q;
+            DEBUG_LINE(8, "header: %u bytes", q);
+        }
+    }
+    if( rc == 0 && *num_read < size && pos < entry->pad ) {
+        /* read file data */
+        size_t rd;
+        if( (rc = KFileRead(kfile, pos - entry->data, &buffer[*num_read], size - *num_read, &rd)) == 0 ) {
+            DEBUG_LINE(8, "file: from %lu %u bytes", pos - entry->data, rd);
+            *num_read = *num_read + rd;
+            pos += rd;
+        }
+    }
+    if( rc == 0 && *num_read < size && pos <= entry->end ) {
+        /* pad last block with 0 */
+        size_t q = entry->end - pos + 1;
+        if( q > (size - *num_read) ) {
+            q = size - *num_read;
+        }
+        memset(&buffer[*num_read], 0, q);
+        *num_read = *num_read + q;
+        DEBUG_LINE(8, "padding: %u bytes", q);
+    }
+    return rc;
+}
+
+struct TarFileList {
+    KRefcount refcount;
+    const TarEntry* files;
+    uint32_t count;
+    uint32_t max_count;
+    uint64_t tar_sz;
+    uint16_t tar_10k_pad;
+    char* strings;
+    uint64_t strings_avail;
+    /* used to setup cache in file */
+    uint16_t max_header_blocks;
+    /* current file data/cache */
+    KLock* lock;
+    BSTree btree;
+    TarBlock* header_buf;
+    const TarEntry* cur_entry;
+    const KFile* cur_file;
+};
+
+rc_t TarFileList_Make(const TarFileList** cself, uint32_t max_file_count, const char* name)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || max_file_count == 0 ) {
+        rc = RC(rcExe, rcArc, rcConstructing, rcParam, rcInvalid);
+    } else {
+        TarFileList* l = NULL;
+        uint64_t strings_sz = max_file_count * 2048;
+        *cself = NULL;
+        CALLOC(l, 1, sizeof(*l) + max_file_count * sizeof(*(l->files)) + strings_sz);
+        if( l == NULL ) {
+            /* allocate self + array of entries + 1024 for path and name */
+            rc = RC(rcExe, rcArc, rcConstructing, rcMemory, rcExhausted);
+        } else if( (rc = KLockMake(&l->lock)) == 0 ) {
+            KRefcountInit(&l->refcount, 1, "TarFileList", "Make", name);
+            l->max_count = max_file_count;
+            l->tar_sz = TAR_TAIL_PAD;
+            l->files = (TarEntry*)&l[1]; /* files array follows self */
+            l->strings_avail = strings_sz;
+            l->strings = (char*)&l->files[l->max_count]; /* string table follows last entry */
+            l->max_header_blocks = 1;
+            *cself = l;
+        }
+    }
+    return rc;
+}
+
+void TarFileList_Release(const TarFileList* cself)
+{
+    if( cself != NULL ) {
+        TarFileList* self = (TarFileList*)cself;
+        if( KLockAcquire(self->lock) == 0 ) {
+            int x = KRefcountDropDep(&self->refcount, "TarFileList");
+            if( atomic32_read(&self->refcount) < 2 ) {
+                self->cur_entry = NULL;
+                ReleaseComplain(KFileRelease, self->cur_file);
+                self->cur_file = NULL;
+            }
+            if( x == krefWhack ) {
+                KRefcountWhack(&self->refcount, "TarFileList");
+                FREE(self->header_buf);
+                BSTreeWhack(&self->btree, NULL, NULL);
+                ReleaseComplain(KLockUnlock, self->lock);
+                ReleaseComplain(KLockRelease, self->lock);
+                FREE(self);
+            } else {
+                ReleaseComplain(KLockUnlock, self->lock);
+            }
+        }
+    }
+}
+
+rc_t TarFileList_Add(const TarFileList* cself, const char* path, const char* name, uint64_t size, KTime_t mtime, bool executable)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || path == NULL || name == NULL ) {
+        rc = RC(rcExe, rcArc, rcRegistering, rcParam, rcInvalid);
+    } else if( (rc = KLockAcquire(cself->lock)) == 0 ) {
+        if( cself->count >= cself->max_count ) {
+            rc = RC(rcExe, rcArc, rcRegistering, rcDirEntry, rcExcessive);
+        } else if( cself->header_buf != NULL ) {
+            rc = RC(rcExe, rcArc, rcRegistering, rcDirEntry, rcReadonly);
+        } else {
+            TarFileList* self = (TarFileList*)cself;
+            size_t lp = strlen(path) + 1, ln = strlen(name) + 1;
+
+            if( lp + ln  >= cself->strings_avail ) {
+                rc = RC(rcExe, rcArc, rcRegistering, rcName, rcExcessive);
+            } else {
+                const TarEntry* e = &cself->files[cself->count];
+
+                /* copy path/name to internal buffer */
+                strncpy(cself->strings, path, lp);
+                path = cself->strings;
+                self->strings += lp;
+                self->strings_avail -= lp;
+                strncpy(cself->strings, name, ln);
+                name = cself->strings;
+                self->strings += ln;
+                self->strings_avail -= ln;
+
+                TarEntry_Init(e, cself->tar_sz - TAR_TAIL_PAD, path, name, size, mtime, executable);
+                self->tar_sz += e->end - e->start + 1;
+                self->tar_10k_pad = self->tar_sz % TAR_BLOCK_PAD;
+                if( self->tar_10k_pad != 0 ) {
+                    self->tar_10k_pad = TAR_BLOCK_PAD - self->tar_10k_pad;
+                }
+                if( e->name_fmt < 0 && cself->max_header_blocks < -e->name_fmt ) {
+                    self->max_header_blocks = -e->name_fmt;
+                }
+                self->count++;
+            }
+        }
+        ReleaseComplain(KLockUnlock, cself->lock);
+    }
+    return rc;
+}
+
+rc_t TarFileList_Size(const TarFileList* cself, uint64_t* file_sz)
+{
+    if( cself == NULL || file_sz == NULL ) {
+        return RC(rcExe, rcArc, rcAccessing, rcParam, rcInvalid);
+    }
+    *file_sz = cself->tar_sz + cself->tar_10k_pad;
+    return 0;
+}
+
+static
+int64_t TarFileList_Sort(const BSTNode *item, const BSTNode *node)
+{
+    const TarEntry* i = (const TarEntry*)item;
+    const TarEntry* n = (const TarEntry*)node;
+
+    if( i->start > n->end ) {
+        return 1;
+    } else if( i->end < n->start ) {
+        return -1;
+    }
+    /* fails on insert! */
+    return 0;
+}
+
+rc_t TarFileList_Open(const TarFileList* cself)
+{
+    rc_t rc = 0;
+    if( cself == NULL ) {
+        rc = RC(rcExe, rcArc, rcOpening, rcParam, rcInvalid);
+    } else if( (rc = KLockAcquire(cself->lock)) == 0 ) {
+        TarFileList* self = (TarFileList*)cself;
+        if( self->header_buf == NULL ) {
+            MALLOC(self->header_buf, self->max_header_blocks * TAR_BLOCK_SIZE);
+            if( self->header_buf == NULL ) {
+                rc = RC(rcExe, rcArc, rcOpening, rcMemory, rcExhausted);
+            } else {
+                /* build file offset search tree */
+                uint32_t i;
+                BSTreeInit(&self->btree);
+                /* adjust last file size to include archive-end of 2 512 blocks + 10k block padding */
+                ((TarEntry*)(self->files + self->count - 1))->end += TAR_TAIL_PAD + self->tar_10k_pad;
+                self->tar_sz += self->tar_10k_pad;
+                self->tar_10k_pad = 0;
+                for(i = 0; rc == 0 && i < self->count; i++) {
+                    rc = BSTreeInsertUnique(&self->btree, (BSTNode*)&self->files[i].node, NULL, TarFileList_Sort);
+                }
+            }
+        }
+        if( rc == 0 && KRefcountAddDep(&self->refcount, "TarFileList") != krefOkay ) {
+            rc = RC(rcExe, rcArc, rcOpening, rcRefcount, rcFailed);
+        }
+        ReleaseComplain(KLockUnlock, cself->lock);
+    }
+    return rc;
+}
+
+static
+int64_t TarFileList_Find(const void *item, const BSTNode *node)
+{
+    uint64_t pos = *(uint64_t*)item;
+    const TarEntry* n = (const TarEntry*)node;
+    if( pos < n->start ) {
+        return -1;
+    } else if( pos > n->end ) {
+        return 1;
+    }
+    return 0;
+}
+
+rc_t TarFileList_Read(const TarFileList* cself, uint64_t pos, uint8_t* buffer, size_t size, size_t* num_read)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL ) {
+        rc = RC(rcExe, rcArc, rcReading, rcParam, rcInvalid);
+    } else if( (rc = KLockAcquire(cself->lock)) == 0 ) {
+        *num_read = 0;
+        if( cself->header_buf == NULL ) {
+            rc = RC(rcExe, rcArc, rcReading, rcBuffer, rcNull);
+        } else if( pos < cself->tar_sz ) {
+            while( rc == 0 && *num_read < size && pos < cself->tar_sz ) {
+                if( cself->cur_entry == NULL || pos < cself->cur_entry->start || pos > cself->cur_entry->end ) {
+                    KFileRelease(cself->cur_file);
+                    ((TarFileList*)cself)->cur_entry = (const TarEntry*)BSTreeFind(&cself->btree, &pos, TarFileList_Find);
+                    if( cself->cur_entry != NULL ) {
+                        KDirectory* dir;
+                        DEBUG_LINE(8, "Open: '%s'", cself->cur_entry->path);
+                        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+                            if( (rc = KDirectoryOpenFileRead(dir, &((TarFileList*)cself)->cur_file, "%s", cself->cur_entry->path)) == 0 ) {
+                                uint64_t size = 0;
+                                if( (rc = KFileSize(cself->cur_file, &size)) == 0 ) {
+                                    if( cself->cur_entry->size != size ) {
+                                        rc = RC(rcExe, rcArc, rcReading, rcFileDesc, rcInvalid);
+                                        PLOGERR(klogErr, (klogErr, rc, "Source file size differ in XML $(p)", PLOG_S(p), cself->cur_entry->path));
+                                    }
+                                }
+                            } else {
+                                PLOGERR(klogErr, (klogErr, rc, "$(p)", PLOG_S(p), cself->cur_entry->path));
+                            }
+                            ReleaseComplain(KDirectoryRelease, dir);
+                        }
+                    } else {
+                        rc = RC(rcExe, rcArc, rcReading, rcOffset, rcInvalid);
+                    }
+                }
+                if( rc == 0 ) {
+                    size_t rd = *num_read;
+                    DEBUG_LINE(8, "Reading: '%s'", cself->cur_entry->path);
+                    if( (rc = TarEntry_Read(cself->cur_entry, cself->header_buf, cself->cur_file, pos, buffer, size, num_read)) == 0 ) {
+                        DEBUG_LINE(8, "read: %u bytes", *num_read);
+                        pos += *num_read - rd;
+                    }
+                }
+            }
+        }
+        ReleaseComplain(KLockUnlock, cself->lock);
+#if _DEBUGGING
+        if( rc == 0 && size < *num_read ) {
+            PLOGERR(klogErr, (klogErr, RC(rcExe, rcArc, rcReading, rcData, rcTooLong),
+                "file $(f) at pos $(p): $(s) < $(n)", "p=%lu,s=%lu,n=%lu,f=%s", pos, size, *num_read, cself->cur_entry->path));
+        }
+#endif
+    }
+    return rc;
+}
diff --git a/tools/fuse/tar-list.h b/tools/fuse/tar-list.h
new file mode 100644
index 0000000..7fcfbea
--- /dev/null
+++ b/tools/fuse/tar-list.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_tar_list_
+#define _h_sra_fuse_tar_list_
+
+#include <klib/rc.h>
+
+#define TAR_BLOCK_SIZE (512)
+
+typedef union TarBlock TarBlock;
+
+typedef struct TarFileList TarFileList;
+
+rc_t TarFileList_Make(const TarFileList** cself, uint32_t max_file_count, const char* name);
+
+void TarFileList_Release(const TarFileList* cself);
+
+rc_t TarFileList_Add(const TarFileList* cself, const char* path, const char* name, uint64_t size, KTime_t mtime, bool executable);
+
+rc_t TarFileList_Size(const TarFileList* cself, uint64_t* file_sz);
+
+rc_t TarFileList_Open(const TarFileList* cself);
+
+rc_t TarFileList_Read(const TarFileList* cself, uint64_t pos, uint8_t* buffer, size_t size, size_t* num_read);
+
+#endif /* _h_sra_fuse_tar_list_ */
diff --git a/tools/fuse/tar-node.c b/tools/fuse/tar-node.c
new file mode 100644
index 0000000..e469a87
--- /dev/null
+++ b/tools/fuse/tar-node.c
@@ -0,0 +1,320 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+typedef struct TarNode TarNode;
+#define FSNODE_IMPL TarNode
+
+#include "log.h"
+#include "xml.h"
+#include "tar-node.h"
+#include "tar-list.h"
+#include "tar-file.h"
+#include "kfile-accessor.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+struct TarNode {
+    FSNode node;
+    const TarFileList* files;
+    const char* rel_path;
+    /* used only in case of auto-detected .tar.xml file */
+    KTime_t mtime;
+    const char* xml_path;
+};
+
+static
+rc_t TarNode_MakeFileList(const KXMLNode* xml_node, const TarFileList** files, char* errmsg, const char* rel_path, const char* name)
+{
+    rc_t rc = 0;
+    time_t now = time(NULL);
+    uint32_t count = 0;
+
+    *files = NULL;
+    if( (rc = KXMLNodeCountChildNodes(xml_node, &count)) == 0 ) {
+        if( count == 0 ) {
+            rc = RC(rcExe, rcDoc, rcValidating, rcData, rcEmpty);
+        } else if( (rc = TarFileList_Make(files, count, name)) == 0 ) {
+            uint32_t i = 0;
+            while(rc == 0 && i < count) {
+                const KXMLNode* n = NULL;
+                const char* n_name;
+                if( (rc = KXMLNodeGetNodeRead(xml_node, &n, i++)) == 0 && (rc = KXMLNodeElementName(n, &n_name)) == 0 ) {
+                    if( strcmp(n_name, "Item") != 0 ) {
+                        rc = RC(rcExe, rcDoc, rcValidating, rcNode, rcUnexpected);
+                        strcpy(errmsg, n_name);
+                    } else {
+                        size_t sz_read;
+                        char path[4096], name[4096];
+                        KTime_t ts = now;
+                        uint64_t fsz = 0;
+                        bool exec = false;
+
+                        if( (rc = KXMLNodeReadAttrCString(n, "path", name, sizeof(name), &sz_read)) == 0 ) {
+                            if( name[0] == '\0' ) {
+                                rc = RC(rcExe, rcDoc, rcValidating, rcAttr, rcEmpty);
+                            } else if( name[0] == '/' ) {
+                                memmove(path, name, sz_read + 1);
+                            } else {
+                                KDirectory* dir = NULL;
+                                if( (rc = KDirectoryNativeDir(&dir)) == 0 &&
+                                    (rc = KDirectoryResolvePath(dir, true, path, sizeof(path), "%s/%s", rel_path, name)) == 0 ) {
+                                    DEBUG_LINE(8, "%s/%s resolved to %s", rel_path, name, path);
+                                }
+                                KDirectoryRelease(dir);
+                            }
+                            if( rc != 0 ) {
+                                strcpy(errmsg, "TAR/Item/@path");
+                            }
+                        }
+                        if( rc == 0 && (rc = XML_ParseTimestamp(n, "timestamp", &ts, true)) != 0 ) {
+                            strcpy(errmsg, "TAR/Item/@timestamp");
+                        }
+                        if( rc == 0 && (rc = XML_ParseBool(n, "executable", &exec, true)) != 0 ) {
+                            strcpy(errmsg, "TAR/Item/@executable");
+                        }
+                        if( rc == 0 && (rc = KXMLNodeReadAttrAsU64(n, "size", &fsz)) != 0 ) {
+                            strcpy(errmsg, "TAR/Item/@size");
+                        }
+                        if( rc == 0 ) {
+                            name[0] = '\0';
+                            rc = KXMLNodeReadAttrCString(n, "name", name, sizeof(name), &sz_read);
+                            if( (GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) || name[0] == '\0' ) {
+                                char* x = strrchr(path, '/');
+                                strcpy(name, x ? x + 1 : path);
+                                rc = 0;
+                            } else if( rc == 0 && name[0] == '/' ) {
+                                strcat(errmsg, "Item/@name cannot be absolute");
+                                rc = RC(rcExe, rcDoc, rcValidating, rcName, rcInvalid);
+                            } else if( rc != 0 ) {
+                                strcpy(errmsg, "Item/@name");
+                            }
+                        }
+                        if( rc == 0 ) {
+                            const KNamelist* attr = NULL;
+                            if( (rc = KXMLNodeListAttr(n, &attr)) == 0 ) {
+                                uint32_t j = 0, count = 0;
+                                if( (rc = KNamelistCount(attr, &count)) == 0 && count > 0 ) {
+                                    while( rc == 0 && j < count ) {
+                                        const char *attr_nm = NULL;
+                                        if( (rc = KNamelistGet(attr, j++, &attr_nm)) != 0 ) {
+                                            break;
+                                        }
+                                        if( strcmp("path", attr_nm) == 0 || strcmp("name", attr_nm) == 0 ||
+                                            strcmp("timestamp", attr_nm) == 0 || strcmp("size", attr_nm) == 0 ||
+                                            strcmp("executable", attr_nm) == 0 ) {
+                                            continue;
+                                        }
+                                        rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                                        strcpy(errmsg, "unknown attribute TAR/Item/@");
+                                        strcat(errmsg, attr_nm);
+                                    }
+                                }
+                                ReleaseComplain(KNamelistRelease, attr);
+                            }
+                        }
+                        if( rc == 0 && (rc = TarFileList_Add(*files, path, name, fsz, ts, exec)) != 0 ) {
+                            strcpy(errmsg, "adding to TAR");
+                        }
+                    }
+                    ReleaseComplain(KXMLNodeRelease, n);
+                }
+            }
+            if( rc != 0 ) {
+                TarFileList_Release(*files);
+                *files = NULL;
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t TarNode_Touch(const TarNode* cself)
+{
+    rc_t rc = 0;
+
+    if( cself->xml_path != NULL ) {
+        KDirectory* dir = NULL;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            KTime_t dt;
+            if( (rc = KDirectoryDate(dir, &dt, "%s", cself->xml_path)) == 0 ) {
+                if( dt != cself->mtime ) {
+                    const KFile* kfile = NULL;
+                    DEBUG_MSG(8, ("%s: updating tar %s\n", __func__, cself->xml_path));
+                    if( (rc = KDirectoryOpenFileRead(dir, &kfile, "%s", cself->xml_path)) == 0 ) {
+                        const KXMLMgr* xmlmgr;
+                        if( (rc = XML_MgrGet(&xmlmgr)) == 0 ) {
+                            const KXMLDoc* xmldoc = NULL;
+                            if( (rc = KXMLMgrMakeDocRead(xmlmgr, &xmldoc, kfile)) == 0 ) {
+                                const KXMLNodeset* ns = NULL;
+                                if( (rc = KXMLDocOpenNodesetRead(xmldoc, &ns, "/TAR")) == 0 ) {
+                                    uint32_t count = 0;
+                                    if( (rc = KXMLNodesetCount(ns, &count)) == 0 ) {
+                                        if( count != 1 ) {
+                                            rc = RC(rcExe, rcDoc, rcValidating, rcData, rcInvalid);
+                                        } else {
+                                            const KXMLNode* n = NULL;
+                                            if( (rc = KXMLNodesetGetNodeRead(ns, &n, 0)) == 0 ) {
+                                                char errmsg[4096];
+                                                const TarFileList* new_files;
+                                                if( (rc = TarNode_MakeFileList(n, &new_files, errmsg, cself->rel_path, cself->node.name)) != 0 ) {
+                                                    LOGERR(klogErr, rc, errmsg);
+                                                } else {
+                                                    TarFileList_Release(cself->files);
+                                                    ((TarNode*)cself)->files = new_files;
+                                                    ((TarNode*)cself)->mtime = dt;
+                                                }
+                                                ReleaseComplain(KXMLNodeRelease, n);
+                                            }
+                                        }
+                                    }
+                                    ReleaseComplain(KXMLNodesetRelease, ns);
+                                }
+                                ReleaseComplain(KXMLDocRelease, xmldoc);
+                            }
+                        }
+                        ReleaseComplain(KFileRelease, kfile);
+                    }
+                }
+            }
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t TarNode_Attr(const TarNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    } else {
+        *type = kptFile;
+        rc = TarFileList_Size(cself->files, file_sz);
+        if( cself->xml_path != NULL ) {
+            *ts = cself->mtime;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t TarNode_Open(const TarNode* cself, const char* subpath, const SAccessor** accessor)
+{
+    rc_t rc = 0;
+
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcNotFound);
+    } else {
+        const KFile* kf = NULL;
+        if( (rc = TarFile_Open(&kf, cself->files)) == 0 ) {
+            if( (rc = KFileAccessor_Make(accessor, cself->node.name, kf)) != 0 ) {
+                ReleaseComplain(KFileRelease, kf);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SAccessor_Release(*accessor);
+        *accessor = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t TarNode_Release(TarNode* self)
+{
+    if( self != NULL ) {
+        DEBUG_MSG(8, ("%s: %s\n", __func__, self->xml_path));
+        TarFileList_Release(self->files);
+    }
+    return 0;
+}
+
+static FSNode_vtbl TarNode_vtbl = {
+    sizeof(TarNode),
+    NULL,
+    TarNode_Touch,
+    TarNode_Attr,
+    NULL,
+    NULL,
+    TarNode_Open,
+    TarNode_Release
+};
+
+rc_t TarNode_MakeXML(const KXMLNode* xml_node, FSNode** self, char* errmsg, const char* rel_path)
+{
+    rc_t rc = 0;
+
+    if( xml_node == NULL || self == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        char name[4096];
+        size_t sz;
+
+        rc = KXMLNodeReadAttrCString(xml_node, "name", name, sizeof(name), &sz);
+        if( rc != 0 || sz == 0 || name[0] == '\0' ) {
+            strcpy(errmsg, "attribute 'name'");
+            rc = rc ? rc : RC(rcExe, rcDoc, rcValidating, rcAttr, rcInvalid);
+        } else if( (rc = FSNode_Make(self, name, &TarNode_vtbl)) == 0 ) {
+            ((TarNode*)*self)->rel_path = rel_path;
+            strcpy(errmsg, "processing Item(s)");
+            if( (rc = TarNode_MakeFileList(xml_node, &((TarNode*)*self)->files, errmsg, rel_path, (*self)->name)) != 0 ) {
+                FSNode_Release(*self);
+                *self = NULL;
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t TarNode_MakeAuto(const FSNode** cself, const KDirectory* dir, const char* path, const char* file, const char* xml_path)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || dir == NULL || path == NULL || file == NULL || xml_path == NULL ) {
+        rc = RC(rcExe, rcNode, rcConstructing, rcParam, rcNull);
+    } else {
+        if( (rc = FSNode_Make((FSNode**)cself, file, &TarNode_vtbl)) == 0 ) {
+            ((char*)((*cself)->name))[strlen(file) - 4] = '\0'; /* -= .xml */
+            ((TarNode*)*cself)->xml_path = xml_path;
+            ((TarNode*)*cself)->rel_path = path;
+            if( (rc = FSNode_Touch(*cself)) != 0 ) {
+                FSNode_Release(*cself);
+                *cself = NULL;
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/tar-node.h b/tools/fuse/tar-node.h
new file mode 100644
index 0000000..d8a5552
--- /dev/null
+++ b/tools/fuse/tar-node.h
@@ -0,0 +1,35 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_tar_node_
+#define _h_sra_fuse_tar_node_
+
+#include "node.h"
+
+rc_t TarNode_MakeXML(const KXMLNode* xml_node, FSNode** cself, char* errmsg, const char* rel_path);
+
+rc_t TarNode_MakeAuto(const FSNode** cself, const KDirectory* dir, const char* path, const char* file, const char* xml_path);
+
+#endif /* _h_sra_fuse_tar_node_ */
diff --git a/tools/fuse/text-file.c b/tools/fuse/text-file.c
new file mode 100644
index 0000000..dcde6eb
--- /dev/null
+++ b/tools/fuse/text-file.c
@@ -0,0 +1,134 @@
+/*===========================================================================
+ *
+ *                            Public DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "log.h"
+#include "formats.h"
+#include "text-file.h"
+
+typedef struct TextFile TextFile;
+#define KFILE_IMPL TextFile
+#include <kfs/impl.h>
+
+struct TextFile {
+    KFile dad;
+    char* data;
+};
+
+static
+rc_t TextFile_Destroy(TextFile *self)
+{
+    FREE(self->data);
+    FREE(self);
+    return 0;
+}
+
+static
+struct KSysFile* TextFile_GetSysFile(const TextFile *self, uint64_t *offset)
+{
+    *offset = 0;
+    return NULL;
+}
+
+static
+rc_t TextFile_RandomAccess(const TextFile *self)
+{
+    return 0;
+}
+
+static
+uint32_t TextFile_Type(const TextFile *self)
+{
+    return kfdFile;
+}
+
+static
+rc_t TextFile_Size(const TextFile *self, uint64_t *size)
+{
+    *size = strlen(self->data);
+    return 0;
+}
+
+static
+rc_t TextFile_SetSize(TextFile *self, uint64_t size)
+{
+    return RC(rcExe, rcFile, rcUpdating, rcInterface, rcUnsupported);
+}
+
+static
+rc_t TextFile_Read(const TextFile *self, uint64_t pos, void *buffer, size_t bsize, size_t *num_read)
+{
+    *num_read = strlen(self->data);
+    if( pos < *num_read ) {
+        *num_read = (*num_read < bsize) ? *num_read : bsize;
+        memmove(buffer, &self->data[pos], *num_read);
+    } else {
+        *num_read = 0;
+    }
+    return 0;
+}
+
+static
+rc_t TextFile_Write(TextFile *self, uint64_t pos, const void *buffer, size_t size, size_t *num_writ)
+{
+    return RC(rcExe, rcFile, rcWriting, rcInterface, rcUnsupported);
+}
+
+static KFile_vt_v1 TextFile_vtbl = {
+    1, 1,
+    TextFile_Destroy,
+    TextFile_GetSysFile,
+    TextFile_RandomAccess,
+    TextFile_Size,
+    TextFile_SetSize,
+    TextFile_Read,
+    TextFile_Write,
+    TextFile_Type
+};
+
+
+rc_t TextFile_Open( const KFile** cself, const FileOptions* opt )
+{
+    rc_t rc = 0;
+    TextFile* self;
+    CALLOC(self, 1, sizeof(*self));
+    if( self == NULL )
+    {
+        rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
+    }
+    else if ( ( rc = KFileInit( &self->dad, (const KFile_vt*)&TextFile_vtbl, "TextFile", "no-name", true, false ) ) != 0 ||
+              ( rc = StrDup( opt->f.txt64b, &self->data ) ) != 0 )
+    {
+        KFileRelease( &self->dad );
+    }
+    else
+    {
+        *cself = &self->dad;
+    }
+    return rc;
+}
diff --git a/tools/fuse/text-file.h b/tools/fuse/text-file.h
new file mode 100644
index 0000000..78a6cc1
--- /dev/null
+++ b/tools/fuse/text-file.h
@@ -0,0 +1,36 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sra_fuse_text_file_
+#define _h_sra_fuse_text_file_
+
+#include <kfs/file.h>
+
+#include "node.h"
+
+rc_t TextFile_Open(const KFile** cself, const FileOptions* opt);
+
+#endif /* _h_sra_fuse_text_file_ */
diff --git a/tools/fuse/unix/remote-fuser-sys.c b/tools/fuse/unix/remote-fuser-sys.c
new file mode 100644
index 0000000..7eaf627
--- /dev/null
+++ b/tools/fuse/unix/remote-fuser-sys.c
@@ -0,0 +1,696 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+
+#define FUSE_USE_VERSION 25
+#include <fuse.h>
+
+#include "xml.h"
+#include "remote-fuser.h"
+#include "log.h"
+
+#include "remote-cache.h"
+
+#include <atomic.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+/* we will preserve mount point value */
+static char g_mount_point [ 4096 ];
+
+static struct stat g_mount_point_stat;
+static struct stat g_dflt_file_stat;
+static atomic64_t num_open_files;
+
+static
+int ConvertRC2errno(rc_t rc)
+{
+    switch(GetRCState(rc)) {
+        case rcNoErr:
+            return 0;
+        case rcNotFound:
+            return ENOENT;
+        case rcNull:
+            return EFAULT;
+        case rcInvalid:
+            return EINVAL;
+        case rcInsufficient:
+            return ENAMETOOLONG;
+        case rcReadonly:
+            return EROFS;
+        case rcUnauthorized:
+            return EACCES;
+        case rcCorrupt:
+        default:
+            return EBADF;
+    }
+}
+
+/* Kinda scary thing, but whomknows */
+void FUSER_abort ()
+{
+    LOGMSG(klogInfo, "Aborting remote fuser by request");
+    fuse_unmount ( g_mount_point );
+    exit ( 1 );
+}
+
+void* UX_FUSE_init(void)
+{
+    atomic64_set(&num_open_files, 0);
+    SRA_FUSER_Init();
+    return NULL;
+}
+
+void UX_FUSE_destroy(void* x)
+{
+    uint64_t q = atomic64_read(&num_open_files);
+    if( q > 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "$(q) files still opened", PLOG_U64(q), q));
+    }
+    SRA_FUSER_Fini();
+}
+
+struct UX_FUSE_readdir_callback_data {
+    const char *path;
+    void *buf;
+    fuse_fill_dir_t filler;
+};
+
+static
+rc_t CC UX_FUSE_readdir_callback( const char *name, void *data )
+{
+    struct UX_FUSE_readdir_callback_data* d = (struct UX_FUSE_readdir_callback_data*)data;
+    int r = d->filler(d->buf, name, NULL, 0);
+    DEBUG_MSG(10, ("%s %s entry: '%s'\n", __func__, d->path, name));
+    return r != 0 ? RC(rcExe, rcDirectory, rcReading, rcBuffer, rcInsufficient) : 0;
+}
+
+int UX_FUSE_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
+                     off_t offset, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    struct UX_FUSE_readdir_callback_data data;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+
+    data.path = path;
+    data.filler = filler;
+    data.buf = buf;
+
+    if( (rc = UX_FUSE_readdir_callback(".", &data)) == 0 &&
+        (rc = UX_FUSE_readdir_callback("..", &data)) == 0 ) {
+        rc = SRA_FUSER_GetDir(path, UX_FUSE_readdir_callback, &data);
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_getattr(const char *path, struct stat *stbuf)
+{
+    rc_t rc = 0;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( stbuf == NULL) {
+        rc = RC(rcExe, rcFileDesc, rcClassifying, rcParam, rcNull);
+    } else if( strcmp(path, "/") == 0 ) {
+        /* root is known as mount point */
+        memmove(stbuf, &g_mount_point_stat, sizeof(g_mount_point_stat));
+    } else {
+        uint32_t type = kptBadPath, access = 0;
+        KTime_t ts = 0;
+        uint64_t file_sz = 0, block_sz = 0;
+        if( (rc = SRA_FUSER_GetAttr(path, &type, &ts, &file_sz, &access, &block_sz)) == 0 ) {
+            bool symlink = (type & kptAlias);
+            if( symlink ) {
+                type = type & ~kptAlias;
+            }
+            if( type == kptDir ) {
+                memmove(stbuf, &g_mount_point_stat, sizeof(g_mount_point_stat));
+                stbuf->st_mode = S_IFDIR | (0007555 & (access == 0 ? stbuf->st_mode : access));
+            } else {
+                memmove(stbuf, &g_dflt_file_stat, sizeof(g_dflt_file_stat));
+                if( access == 0 ) {
+                    access = stbuf->st_mode;
+                }
+                stbuf->st_mode = 0007555 & (access == 0 ? stbuf->st_mode : access);
+                if( type == kptFile ) {
+                    stbuf->st_mode |= S_IFREG;
+                } else if( type == kptCharDev ) {
+                    stbuf->st_mode |= S_IFCHR;
+                } else if( type == kptBlockDev ) {
+                    stbuf->st_mode |= S_IFBLK;
+                } else if( type == kptFIFO ) {
+                    stbuf->st_mode |= S_IFIFO;
+                } else {
+                    rc = RC(rcExe, rcFileDesc, rcClassifying, rcDirEntry, rcUnknown);
+                }
+            }
+            if( rc == 0 ) {
+                if( symlink ) {
+                    stbuf->st_mode = S_IFLNK | (stbuf->st_mode & 07777);
+                }
+                stbuf->st_size = file_sz;
+                if( ts != 0 ) {
+                    stbuf->st_mtime = stbuf->st_atime = stbuf->st_ctime = ts;
+                }
+                if( block_sz > 0 ) {
+                    stbuf->st_blksize = block_sz;
+                }
+                DEBUG_MSG(8, ("%s: %s type: %s %lu bytes\n", __func__, path,
+                    (S_ISDIR(stbuf->st_mode) ? "dir" : (S_ISLNK(stbuf->st_mode) ? " symlink" : "file")), stbuf->st_size));
+            }
+        }
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_readlink(const char *path, char *buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( buf == NULL ) {
+        rc = RC(rcExe, rcFile, rcAliasing, rcParam, rcNull);
+    } else if( buf_sz < 1 ) {
+        rc = RC(rcExe, rcFile, rcAliasing, rcParam, rcInvalid);
+    } else {
+        rc = SRA_FUSER_ResolveLink(path, buf, buf_sz);
+        if ( rc == 0 ) { 
+            if ( * buf == '/' ) {
+                /*)  Here we suppose to add mount point to path
+                 (*/
+                char TmpBuf [ 4096 ];
+                size_t NumWrit = 0;
+
+                rc = string_printf (
+                                TmpBuf,
+                                sizeof ( TmpBuf ),
+                                & NumWrit,
+                                "%s%s",
+                                g_mount_point,
+                                buf
+                                );
+                if ( rc == 0 ) {
+                    string_copy_measure ( buf, buf_sz, TmpBuf );
+                }
+            }
+        }
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_open(const char *path, struct fuse_file_info* fi)
+{
+    rc_t rc = 0;
+    uint64_t q;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( fi == NULL) {
+        rc = RC(rcExe, rcFile, rcOpening, rcParam, rcNull);
+    } else if( fi->flags & (O_CREAT | O_EXCL | O_TRUNC | O_APPEND)) { 
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcReadonly);
+    } else {
+        const void* data = NULL;
+        if( (rc = SRA_FUSER_OpenNode(path, &data)) == 0 ) {
+            fi->fh = (uint64_t)data;
+        }
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    q = atomic64_add_and_read(&num_open_files, 1);
+    PLOGMSG(klogInfo, (klogInfo, "opened $(n), total open $(q)", PLOG_2(PLOG_S(n),PLOG_U64(q)), path, q));
+    return 0;
+}
+
+int UX_FUSE_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    const void* data = NULL;
+    size_t num_read = 0;
+
+    DEBUG_MSG(8, ("%s: %s from %lu %lu bytes\n", __func__, path, offset, size));
+    if( fi == NULL || buf == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcNull);
+    } else if( (data = (const void*)fi->fh) == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcCorrupt);
+    } else {
+        rc = SRA_FUSER_ReadNode(path, data, buf, size, offset, &num_read);
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return num_read;
+}
+
+int UX_FUSE_release(const char *path, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    const void* data = NULL;
+    uint64_t q;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( fi == NULL) {
+        rc = RC(rcExe, rcFile, rcReleasing, rcParam, rcNull);
+    } else if( (data = (const void*)fi->fh) == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcCorrupt);
+    } else {
+        rc = SRA_FUSER_CloseNode(path, data);
+    }
+    fi->fh = 0;
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    atomic64_dec(&num_open_files);
+    q = atomic64_read(&num_open_files);
+    PLOGMSG(klogInfo, (klogInfo, "closed $(n), total open $(q)", PLOG_2(PLOG_S(n),PLOG_U64(q)), path, q));
+    return 0;
+}
+
+int UX_FUSE_mknod(const char *path, mode_t m, dev_t d)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_mkdir(const char *path, mode_t m)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_unlink(const char *path)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_rmdir(const char *path)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_symlink(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_rename(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_link(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_chmod(const char *path, mode_t m)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_chown(const char *path, uid_t u, gid_t g)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_truncate(const char *path, off_t o)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_utime(const char *path, struct utimbuf *b)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_write(const char *path, const char *b, size_t s, off_t o, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_flush(const char *path, struct fuse_file_info *fi)
+{
+    return 0;
+}
+
+int UX_FUSE_create(const char *path, mode_t m, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_ftruncate(const char *path, off_t o, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+static
+void CoreUsage(int fd, const char *progName, bool showHelp, bool showVersion, bool fail)
+{
+    /* used only for FUSE built-in help and version printing */
+    struct fuse_operations ops;
+    struct fuse_args args;
+    memset(&args, 0, sizeof(struct fuse_args));
+    fuse_opt_add_arg(&args, progName); /* fake mount point */
+
+
+    if( fd != STDOUT_FILENO ) {
+        /* redirect usage to log file if it was specified */
+        dup2(fd, STDOUT_FILENO);
+    }
+    if( showHelp ) {
+        const char* p = strrchr(progName, '/');
+        if( p++ == NULL ) {
+            p = progName;
+        }
+        UsageSummary(p);
+        if( !fail ) {
+            fuse_opt_add_arg(&args, "-ho");
+            KOutMsg("\n"
+                "    -x|--xml-dir <url>                 XML file with virtual directory structure\n"
+                "                                       string. Local file or valid URL (http)\n"
+                "    -m|--mount-point <path>            path to a mount directory \n"
+                );
+            KOutMsg(
+                "    -u|--unmount                       Unmount only and exit (only -m required)\n");
+            KOutMsg(
+                "    -b|--hard-bot <url>                URL where report 'heart-beat' ( version )\n"
+                "                                       optional, if not defined - not report\n"
+                "                                       combination '%%s' will be substituted\n"
+                "                                       with XML file version \n"
+                );
+            KOutMsg("\nOptions:\n"
+                "    -e|--cache-dir <path>              Path to directory where to store cached\n"
+                "                                       data from remote files\n"
+                "                                       Programm will work in diskless mode\n"
+                "                                       without cacheing if parameter omitted\n");
+                KOutMsg("    -c|--hard-bot-check <minutes>      Execute 'heart-beat' URL every <arg> minutes,\n"
+                "                                       inteder larger than 0, default: 30.\n"
+                "    -r|--xml-root  <path>              Base directory for a 'path' attributes in XML.\n"
+                "                                       default: '.'\n"
+                );
+            KOutMsg(
+                "    -B|--Blevel <level>                Set block size level for HTTP transport.\n"
+                "                                       level is an integer value from 1 to 10,\n"
+                "                                       which correspond to block sizes:\n"
+                "                                       32K,64K,128K,256K,512K,1M,2M,4M,8M,16M\n"
+                );
+            KOutMsg(
+                "    --SRA-check <secs>                 Check SRA config and runs for update\n"
+                "                                       every <arg> seconds, default: 0 - never.\n" );
+            KOutMsg(
+                "    -L|--log-level                     Logging level as number or enum string. One\n"
+                "                                       of (fatal|sys|int|err|warn|info) or (0-5)\n"
+                "                                       Current/default is warn.\n"
+                "    -l|--log-file <path>               Use log file specified by path.\n"
+                "    -g|--log-reopen <secs>             Reopened log file every <arg> seconds\n"
+                "                                       (external log rotation), default: 0 - never.\n"
+                );
+            KOutMsg(
+    #if _DEBUGGING
+                "    -+|--debug <Module[-Flag]>         Turn on debug output for module. All flags\n"
+                "                                       if not specified.\n"
+    #endif
+                "    -v|--verbose                       Increase the verbosity level of the program.\n"
+                "                                       Use multiple times for more verbosity.\n"
+                "    -V|--version                       Display the version of the program then quit.\n"
+                "    -h|--help                          Output brief explantion for the program.\n"
+                "\n"
+                );
+        }
+    }
+    if( showVersion && !fail ) {
+        HelpVersion(progName, KAppVersion());
+        fuse_opt_add_arg(&args, "--version");
+    }
+    /* force help preceed fuse help */
+    fflush(stdout);
+    /* hack to force fuse lib to output to stdout */
+    dup2(fd, STDERR_FILENO);
+    if( !fail ) {
+        memset(&ops, 0, sizeof(struct fuse_operations));
+        fuse_main(args.argc, args.argv, &ops);
+    }
+    exit(fail ? rcArgv : 0);
+}
+
+/*******************************************************************************
+ * KMain - defined for use with kapp library
+ *******************************************************************************/
+rc_t CC KMain(int argc, char *argv[])
+{
+    int i;
+    rc_t rc;
+
+    bool showHelp = argc < 2, showVersion = false, unmount = false, foreground = false;
+    const char* mount_point = NULL, *xml_path = NULL, *log_file = NULL;
+    const char* xml_root = ".";
+    const char* cache_dir = NULL, *heart_beat_url = NULL;
+    char** fargs = (char**)calloc(argc, sizeof(char*));
+    uint32_t heart_beat_check = 30, log_sync = 0, sra_sync = 0;
+    int log_fd = STDOUT_FILENO;
+    uint32_t block_level = 0, block_size = 0;
+
+#ifdef SRAFUSER_LOGLOCALTIME
+    KLogFmtFlagsSet(klogFmtLocalTimestamp);
+    KLogLibFmtFlagsSet(klogFmtLocalTimestamp);
+    KStsFmtFlagsSet(kstsFmtLocalTimestamp);
+    KStsLibFmtFlagsSet(kstsFmtLocalTimestamp);
+#endif
+
+    for(i = 1; i < argc; i++) {
+        if(!strcmp(argv[i], "-x") || !strcmp(argv[i], "--xml-dir")) {
+            xml_path = argv[++i];
+        } else if(!strcmp(argv[i], "-m") || !strcmp(argv[i], "--mount-point")) {
+            mount_point = argv[++i];
+        } else if(!strcmp(argv[i], "-e") || !strcmp(argv[i], "--cache-dir")) {
+            cache_dir = argv[++i];
+        } else if(!strcmp(argv[i], "-b") || !strcmp(argv[i], "--hard-bot")) {
+            heart_beat_url = argv[++i];
+        } else if(!strcmp(argv[i], "-xs") || !strcmp(argv[i], "-c") || !strcmp(argv[i], "--xml-check")) {
+            heart_beat_check = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-r") || !strcmp(argv[i], "--xml-root")) {
+            xml_root = argv[++i];
+        } else if(!strcmp(argv[i], "-B") || !strcmp(argv[i], "--Blevel")) {
+            block_level = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-ds") || !strcmp(argv[i], "--SRA-check")) {
+            sra_sync = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-u") || !strcmp (argv[i], "--unmount")) {
+            unmount = true;
+        } else if(!strcmp(argv[i], "-L") || !strcmp (argv[i], "--log-level")) {
+            if( i == argc - 1 ) {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "missing log level");
+                CoreUsage(log_fd, argv[0], true, false, true);
+            } else if( (rc = LogLevelSet(argv[++i])) != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "log level $(lvl)", PLOG_S(lvl), argv[i]));
+                CoreUsage(log_fd, argv[0], true, false, true);
+            }
+        } else if(!strcmp(argv[i], "-+") || !strcmp (argv[i], "--debug")) {
+#if _DEBUGGING
+            if( i == argc - 1 ) {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "missing debug level");
+                CoreUsage(log_fd, argv[0], true, false, true);
+            } else if( (rc = KDbgSetString(argv[++i])) != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "debug level $(lvl)", PLOG_S(lvl), argv[i]));
+                CoreUsage(log_fd, argv[0], true, false, true);
+            }
+#else
+            i++;
+#endif
+        } else if(!strcmp(argv[i], "-lf") || !strcmp(argv[i], "-l") || !strcmp (argv[i], "--log-file")) {
+            log_file = argv[++i];
+        } else if(!strcmp(argv[i], "-ls") || !strcmp(argv[i], "-g") || !strcmp(argv[i], "--log-reopen")) {
+            log_sync = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) {
+            showVersion = true;
+        } else if(!strcmp(argv[i], "-v") || !strcmp(argv[i], "--verbose")) {
+            KStsLevel l = KStsLevelGet();
+            KStsLevelSet(++l);
+        } else if(!strcmp(argv[i], "-h") || !strcmp(argv[i], "-ho") || !strcmp(argv[i], "--help")) {
+            showHelp = true;
+        } else {
+            /* save arg for FUSE */
+            fargs[i] = argv[i];
+            if( !strcmp(argv[i], "-d") || !strcmp(argv[i], "-f") ||
+                (!strcmp(argv[i], "-o") && (i > argc - 1) && !strcmp(argv[i + 1], "debug")) ) {
+                foreground = true;
+            }
+        }
+    }
+    if( showHelp || showVersion ) {
+        CoreUsage(log_fd, argv[0], showHelp, showVersion, false);
+    }
+    if( (rc = LogFile_Init(log_file, log_sync, foreground, &log_fd)) != 0 ) {
+        LOGERR(klogErr, rc, log_file ? log_file : "no log");
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    if( mount_point == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient), "mountpoint");
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    if( unmount ) {
+        fuse_unmount(mount_point);
+        exit(0);
+    }
+    if( xml_path == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient), "virtual directory XML");
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    if ( ! IsRemotePath ( xml_path ) ) {
+        if ( ! IsLocalPath ( xml_path ) ) {
+            LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInvalid), "virtual directory XML file is neither local nor remote");
+            CoreUsage(log_fd, argv[0], true, false, true);
+        }
+    }
+    if ( heart_beat_check <= 0 ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInvalid), "heart beat check value");
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    if ( block_level != 0 ) {
+        if ( 10 < block_level ) {
+            LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInvalid), "buffering level value");
+            CoreUsage(log_fd, argv[0], true, false, true);
+        }
+        block_size = ( 1 << ( block_level - 1 ) ) * 1024 * 32;
+        KOutMsg ( "Buffering level is %d. Using buffe of size %d\n", block_level, block_size );
+    }
+    else {
+        block_size = 0;
+    }
+    if( i != argc ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcExcessive), argv[i]);
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    if( stat(mount_point, &g_mount_point_stat) < 0 ) {
+        PLOGMSG(klogErr, (klogErr, "$(p): $(e)", PLOG_2(PLOG_S(p),PLOG_S(e)), mount_point, strerror(errno)));
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    g_mount_point_stat.st_dev = 0;
+    g_mount_point_stat.st_ino = 0;
+    g_mount_point_stat.st_mode = S_IFDIR | 0555; /* execute read-only */
+     /* find needs more links to search in subdir */
+    g_mount_point_stat.st_nlink = 1024 * 1024 * 1024;
+
+     /* Here we are preserving mount point */
+    string_copy_measure (
+                    g_mount_point,
+                    sizeof ( g_mount_point ),
+                    mount_point
+                    );
+
+        /*  And here we should initialize some 'stat' structure
+         *  BTW, seems that Anton inherited only GID and GID from
+         *  original XML file, I think that 'getuid' and 'getgid'
+         *  will work here well
+         */
+    memset ( & g_dflt_file_stat, 0, sizeof ( struct stat ) );
+
+    g_dflt_file_stat.st_uid = getuid ();
+    g_dflt_file_stat.st_gid = getgid ();
+    g_dflt_file_stat.st_mode = S_IFREG | 0444; /* read-only */
+    g_dflt_file_stat.st_nlink = 1;
+
+    if( (rc = Initialize(sra_sync, xml_path, cache_dir, heart_beat_url, heart_beat_check * 60, xml_root, block_size)) != 0 ) {
+        LOGERR(klogErr, rc, "at initialization");
+        CoreUsage(log_fd, argv[0], true, false, true);
+    }
+    DEBUG_MSG(8, ("Mount point set to '%s'\n", mount_point));
+
+    {{ /* FUSE start */
+        struct fuse_operations ops;
+        struct fuse_args args;
+
+        memset(&args, 0, sizeof(struct fuse_args));
+        fuse_opt_add_arg(&args, argv[0]);
+        /* mount point for fuse_main */
+        fuse_opt_add_arg(&args, mount_point);
+        /* save mopunt point dir and program stat */
+        for(i = 0; i < argc; i++) {
+            if( fargs[i] ) {
+                fuse_opt_add_arg(&args, fargs[i]);
+            }
+        }
+        free(fargs);
+        memset(&ops, 0, sizeof(struct fuse_operations));
+        ops.init     = UX_FUSE_init;
+        ops.destroy  = UX_FUSE_destroy;
+        ops.getattr  = UX_FUSE_getattr;
+        ops.readdir  = UX_FUSE_readdir;
+        ops.readlink = UX_FUSE_readlink;
+        ops.open     = UX_FUSE_open;
+        ops.read     = UX_FUSE_read;
+        ops.release  = UX_FUSE_release;
+        ops.mknod = UX_FUSE_mknod;
+        ops.mkdir = UX_FUSE_mkdir;
+        ops.unlink = UX_FUSE_unlink;
+        ops.rmdir = UX_FUSE_rmdir;
+        ops.symlink = UX_FUSE_symlink;
+        ops.rename = UX_FUSE_rename;
+        ops.link = UX_FUSE_link;
+        ops.chmod = UX_FUSE_chmod;
+        ops.chown = UX_FUSE_chown;
+        ops.truncate = UX_FUSE_truncate;
+        ops.utime = UX_FUSE_utime;
+        ops.write = UX_FUSE_write;
+        ops.flush = UX_FUSE_flush;
+        ops.create = UX_FUSE_create;
+        ops.ftruncate = UX_FUSE_ftruncate;
+        rc = fuse_main(args.argc, args.argv, &ops);
+    }}
+    return rc;
+}
diff --git a/tools/fuse/unix/sra-fuser-sys.c b/tools/fuse/unix/sra-fuser-sys.c
new file mode 100644
index 0000000..5aa5be9
--- /dev/null
+++ b/tools/fuse/unix/sra-fuser-sys.c
@@ -0,0 +1,637 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <kfs/directory.h>
+
+#define FUSE_USE_VERSION 25
+#include <fuse.h>
+
+#include "xml.h"
+#include "sra-fuser.h"
+#include "log.h"
+
+#include <atomic.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+static struct stat g_mount_point_stat;
+static struct stat g_dflt_file_stat;
+static atomic64_t num_open_files;
+
+static
+int ConvertRC2errno(rc_t rc)
+{
+    switch(GetRCState(rc)) {
+        case rcNoErr:
+            return 0;
+        case rcNotFound:
+            return ENOENT;
+        case rcNull:
+            return EFAULT;
+        case rcInvalid:
+            return EINVAL;
+        case rcInsufficient:
+            return ENAMETOOLONG;
+        case rcReadonly:
+            return EROFS;
+        case rcUnauthorized:
+            return EACCES;
+        case rcCorrupt:
+        default:
+            return EBADF;
+    }
+}
+
+void* UX_FUSE_init(void)
+{
+    atomic64_set(&num_open_files, 0);
+    SRA_FUSER_Init();
+    return NULL;
+}
+
+void UX_FUSE_destroy(void* x)
+{
+    uint64_t q = atomic64_read(&num_open_files);
+    if( q > 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "$(q) files still opened", PLOG_U64(q), q));
+    }
+    SRA_FUSER_Fini();
+}
+
+struct UX_FUSE_readdir_callback_data {
+    const char *path;
+    void *buf;
+    fuse_fill_dir_t filler;
+};
+
+static
+rc_t CC UX_FUSE_readdir_callback( const char *name, void *data )
+{
+    struct UX_FUSE_readdir_callback_data* d = (struct UX_FUSE_readdir_callback_data*)data;
+    int r = d->filler(d->buf, name, NULL, 0);
+    DEBUG_MSG(10, ("%s %s entry: '%s'\n", __func__, d->path, name));
+    return r != 0 ? RC(rcExe, rcDirectory, rcReading, rcBuffer, rcInsufficient) : 0;
+}
+
+int UX_FUSE_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
+                     off_t offset, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    struct UX_FUSE_readdir_callback_data data;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+
+    data.path = path;
+    data.filler = filler;
+    data.buf = buf;
+
+    if( (rc = UX_FUSE_readdir_callback(".", &data)) == 0 &&
+        (rc = UX_FUSE_readdir_callback("..", &data)) == 0 ) {
+        rc = SRA_FUSER_GetDir(path, UX_FUSE_readdir_callback, &data);
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_getattr(const char *path, struct stat *stbuf)
+{
+    rc_t rc = 0;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( stbuf == NULL) {
+        rc = RC(rcExe, rcFileDesc, rcClassifying, rcParam, rcNull);
+    } else if( strcmp(path, "/") == 0 ) {
+        /* root is known as mount point */
+        memmove(stbuf, &g_mount_point_stat, sizeof(g_mount_point_stat));
+    } else {
+        uint32_t type = kptBadPath, access = 0;
+        KTime_t ts = 0;
+        uint64_t file_sz = 0, block_sz = 0;
+        if( (rc = SRA_FUSER_GetAttr(path, &type, &ts, &file_sz, &access, &block_sz)) == 0 ) {
+            bool symlink = (type & kptAlias);
+            if( symlink ) {
+                type = type & ~kptAlias;
+            }
+            if( type == kptDir ) {
+                memmove(stbuf, &g_mount_point_stat, sizeof(g_mount_point_stat));
+                stbuf->st_mode = S_IFDIR | (0007555 & (access == 0 ? stbuf->st_mode : access));
+            } else {
+                memmove(stbuf, &g_dflt_file_stat, sizeof(g_dflt_file_stat));
+                if( access == 0 ) {
+                    access = stbuf->st_mode;
+                }
+                stbuf->st_mode = 0007555 & (access == 0 ? stbuf->st_mode : access);
+                if( type == kptFile ) {
+                    stbuf->st_mode |= S_IFREG;
+                } else if( type == kptCharDev ) {
+                    stbuf->st_mode |= S_IFCHR;
+                } else if( type == kptBlockDev ) {
+                    stbuf->st_mode |= S_IFBLK;
+                } else if( type == kptFIFO ) {
+                    stbuf->st_mode |= S_IFIFO;
+                } else {
+                    rc = RC(rcExe, rcFileDesc, rcClassifying, rcDirEntry, rcUnknown);
+                }
+            }
+            if( rc == 0 ) {
+                if( symlink ) {
+                    stbuf->st_mode = S_IFLNK | (stbuf->st_mode & 07777);
+                }
+                stbuf->st_size = file_sz;
+                if( ts != 0 ) {
+                    stbuf->st_mtime = stbuf->st_atime = stbuf->st_ctime = ts;
+                }
+                if( block_sz > 0 ) {
+                    stbuf->st_blksize = block_sz;
+                }
+                DEBUG_MSG(8, ("%s: %s type: %s %lu bytes\n", __func__, path,
+                    (S_ISDIR(stbuf->st_mode) ? "dir" : (S_ISLNK(stbuf->st_mode) ? " symlink" : "file")), stbuf->st_size));
+            }
+        }
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_readlink(const char *path, char *buf, size_t buf_sz)
+{
+    rc_t rc = 0;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( buf == NULL ) {
+        rc = RC(rcExe, rcFile, rcAliasing, rcParam, rcNull);
+    } else if( buf_sz < 1 ) {
+        rc = RC(rcExe, rcFile, rcAliasing, rcParam, rcInvalid);
+    } else {
+        rc = SRA_FUSER_ResolveLink(path, buf, buf_sz);
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return 0;
+}
+
+int UX_FUSE_open(const char *path, struct fuse_file_info* fi)
+{
+    rc_t rc = 0;
+    uint64_t q;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( fi == NULL) {
+        rc = RC(rcExe, rcFile, rcOpening, rcParam, rcNull);
+    } else if( fi->flags & (O_CREAT | O_EXCL | O_TRUNC | O_APPEND)) { 
+        rc = RC(rcExe, rcFile, rcOpening, rcDirEntry, rcReadonly);
+    } else {
+        const void* data = NULL;
+        if( (rc = SRA_FUSER_OpenNode(path, &data)) == 0 ) {
+            fi->fh = (uint64_t)data;
+        }
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    q = atomic64_add_and_read(&num_open_files, 1);
+    PLOGMSG(klogInfo, (klogInfo, "opened $(n), total open $(q)", PLOG_2(PLOG_S(n),PLOG_U64(q)), path, q));
+    return 0;
+}
+
+int UX_FUSE_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    const void* data = NULL;
+    size_t num_read = 0;
+
+    DEBUG_MSG(8, ("%s: %s from %lu %lu bytes\n", __func__, path, offset, size));
+    if( fi == NULL || buf == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcNull);
+    } else if( (data = (const void*)fi->fh) == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcCorrupt);
+    } else {
+        rc = SRA_FUSER_ReadNode(path, data, buf, size, offset, &num_read);
+    }
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    return num_read;
+}
+
+int UX_FUSE_release(const char *path, struct fuse_file_info *fi)
+{
+    rc_t rc = 0;
+    const void* data = NULL;
+    uint64_t q;
+
+    DEBUG_MSG(8, ("%s: %s\n", __func__, path));
+    if( fi == NULL) {
+        rc = RC(rcExe, rcFile, rcReleasing, rcParam, rcNull);
+    } else if( (data = (const void*)fi->fh) == NULL ) {
+        rc = RC(rcExe, rcFile, rcReading, rcParam, rcCorrupt);
+    } else {
+        rc = SRA_FUSER_CloseNode(path, data);
+    }
+    fi->fh = 0;
+    if( rc != 0 ) {
+        errno = ConvertRC2errno(rc);
+        PLOGERR(klogErr, (klogErr, rc, "$(f): $(p) - $(e)", PLOG_3(PLOG_S(f),PLOG_S(p),PLOG_S(e)), __func__, path, strerror(errno)));
+        return -errno;
+    }
+    atomic64_dec(&num_open_files);
+    q = atomic64_read(&num_open_files);
+    PLOGMSG(klogInfo, (klogInfo, "closed $(n), total open $(q)", PLOG_2(PLOG_S(n),PLOG_U64(q)), path, q));
+    return 0;
+}
+
+int UX_FUSE_mknod(const char *path, mode_t m, dev_t d)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_mkdir(const char *path, mode_t m)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_unlink(const char *path)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_rmdir(const char *path)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_symlink(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_rename(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_link(const char *path, const char *x)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_chmod(const char *path, mode_t m)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_chown(const char *path, uid_t u, gid_t g)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_truncate(const char *path, off_t o)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_utime(const char *path, struct utimbuf *b)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_write(const char *path, const char *b, size_t s, off_t o, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_flush(const char *path, struct fuse_file_info *fi)
+{
+    return 0;
+}
+
+int UX_FUSE_create(const char *path, mode_t m, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+int UX_FUSE_ftruncate(const char *path, off_t o, struct fuse_file_info *fi)
+{
+    return -EROFS;
+}
+
+static
+void CoreUsage(int fd, const char *progName, bool showHelp, bool showVersion, bool fail, bool forceShowHelp)
+{
+    /* used only for FUSE built-in help and version printing */
+    struct fuse_operations ops;
+    struct fuse_args args;
+    memset(&args, 0, sizeof(struct fuse_args));
+    fuse_opt_add_arg(&args, progName); /* fake mount point */
+
+
+    if( fd != STDOUT_FILENO ) {
+        /* redirect usage to log file if it was specified */
+        dup2(fd, STDOUT_FILENO);
+    }
+    if( showHelp ) {
+        const char* p = strrchr(progName, '/');
+        if( p++ == NULL ) {
+            p = progName;
+        }
+        UsageSummary(p);
+        if( !fail || forceShowHelp ) {
+            fuse_opt_add_arg(&args, "-ho");
+            KOutMsg("\n"
+                "    -x|--xml-dir <path>                XML file with virtual directory structure\n"
+                "    -m|--mount-point <path>            path to a mount directory \n"
+                "    -u|--unmount                       Unmount only and exit (only -m required)\n"
+                );
+            KOutMsg("\nOptions:\n"
+                "    -c|--xml-check <secs>              Check XML for update every <arg> seconds,\n"
+                "                                       default: 0 - never.\n"
+                "    -r|--xml-root  <path>              Base directory for a 'path' attributes in XML.\n"
+                "                                       default: '.'\n"
+                );
+            KOutMsg(
+                "    -i|--xml-validate <nocheck|ignore> XML validation on load:\n"
+                "                                       nocheck - do not check presence of dir/file in path attribute;\n"
+                "                                       ignore - only report missing dir/file in path attribute;\n"
+                "                                       default behaivour is to fail loading XML if dir/file is not found.\n"
+                );
+            KOutMsg(
+                "    --SRA-check <secs>                 Check SRA config and runs for update\n"
+                "                                       every <arg> seconds, default: 0 - never.\n"
+                "    --SRA-cache <path>                 Write SRA update info to a file.\n"
+                "                                       Must have --SRA-check option value of non-zero.\n"
+                );
+            KOutMsg(
+                "    -L|--log-level                     Logging level as number or enum string. One\n"
+                "                                       of (fatal|sys|int|err|warn|info) or (0-5)\n"
+                "                                       Current/default is warn.\n"
+                "    -l|--log-file <path>               Use log file specified by path.\n"
+                "    -g|--log-reopen <secs>             Reopened log file every <arg> seconds\n"
+                "                                       (external log rotation), default: 0 - never.\n"
+                );
+            KOutMsg(
+    #if _DEBUGGING
+                "    -+|--debug <Module[-Flag]>         Turn on debug output for module. All flags\n"
+                "                                       if not specified.\n"
+    #endif
+                "    -v|--verbose                       Increase the verbosity level of the program.\n"
+                "                                       Use multiple times for more verbosity.\n"
+                "    -V|--version                       Display the version of the program then quit.\n"
+                "    -h|--help                          Output brief explantion for the program.\n"
+                "\n"
+                );
+        }
+    }
+    if( showVersion && !fail ) {
+        HelpVersion(progName, KAppVersion());
+        fuse_opt_add_arg(&args, "--version");
+    }
+    /* force help preceed fuse help */
+    fflush(stdout);
+    /* hack to force fuse lib to output to stdout */
+    dup2(fd, STDERR_FILENO);
+    if( !fail ) {
+        memset(&ops, 0, sizeof(struct fuse_operations));
+        fuse_main(args.argc, args.argv, &ops);
+    }
+    exit(fail ? rcArgv : 0);
+}
+
+/*******************************************************************************
+ * KMain - defined for use with kapp library
+ *******************************************************************************/
+rc_t CC KMain(int argc, char *argv[])
+{
+    int i;
+    rc_t rc;
+
+    bool missedArgs = argc < 2, showHelp = false, showVersion = false, unmount = false, foreground = false;
+    const char* mount_point = NULL, *xml_path = NULL, *log_file = NULL;
+    const char* sra_cache = NULL, *xml_root = ".";
+    char** fargs = (char**)calloc(argc, sizeof(char*));
+    uint32_t xml_sync = 0, log_sync = 0, sra_sync = 0;
+    EXMLValidate xml_validate = eXML_Full;
+    int log_fd = STDOUT_FILENO;
+
+#ifdef SRAFUSER_LOGLOCALTIME
+    KLogFmtFlagsSet(klogFmtLocalTimestamp);
+    KLogLibFmtFlagsSet(klogFmtLocalTimestamp);
+    KStsFmtFlagsSet(kstsFmtLocalTimestamp);
+    KStsLibFmtFlagsSet(kstsFmtLocalTimestamp);
+#endif
+
+    for(i = 1; i < argc; i++) {
+        if(!strcmp(argv[i], "-x") || !strcmp(argv[i], "--xml-dir")) {
+            xml_path = argv[++i];
+        } else if(!strcmp(argv[i], "-m") || !strcmp(argv[i], "--mount-point")) {
+            mount_point = argv[++i];
+        } else if(!strcmp(argv[i], "-xs") || !strcmp(argv[i], "-c") || !strcmp(argv[i], "--xml-check")) {
+            xml_sync = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-r") || !strcmp(argv[i], "--xml-root")) {
+            xml_root = argv[++i];
+        } else if(!strcmp(argv[i], "-i") || !strcmp(argv[i], "--xml-validate")) {
+            if( i++ == argc - 1 ) {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "XML validation setting value");
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            } else if( !strcmp(argv[i], "ignore") ) {
+                xml_validate = eXML_NoFail;
+            } else if( !strcmp(argv[i], "nocheck") ) {
+                xml_validate = eXML_NoCheck;
+            } else {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcUnrecognized);
+                PLOGERR(klogErr, (klogErr, rc, "XML validation setting value '$(lvl)'", PLOG_S(lvl), argv[i]));
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            }
+        } else if(!strcmp(argv[i], "-ds") || !strcmp(argv[i], "--SRA-check")) {
+            sra_sync = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-df") || !strcmp(argv[i], "--SRA-cache")) {
+            sra_cache = argv[++i];
+        } else if(!strcmp(argv[i], "-u") || !strcmp (argv[i], "--unmount")) {
+            unmount = true;
+        } else if(!strcmp(argv[i], "-L") || !strcmp (argv[i], "--log-level")) {
+            if( i == argc - 1 ) {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "missing log level");
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            } else if( (rc = LogLevelSet(argv[++i])) != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "log level $(lvl)", PLOG_S(lvl), argv[i]));
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            }
+        } else if(!strcmp(argv[i], "-+") || !strcmp (argv[i], "--debug")) {
+#if _DEBUGGING
+            if( i == argc - 1 ) {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "missing debug level");
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            } else if( (rc = KDbgSetString(argv[++i])) != 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "debug level $(lvl)", PLOG_S(lvl), argv[i]));
+                CoreUsage(log_fd, argv[0], true, false, true, false);
+            }
+#else
+            i++;
+#endif
+        } else if(!strcmp(argv[i], "-lf") || !strcmp(argv[i], "-l") || !strcmp (argv[i], "--log-file")) {
+            log_file = argv[++i];
+        } else if(!strcmp(argv[i], "-ls") || !strcmp(argv[i], "-g") || !strcmp(argv[i], "--log-reopen")) {
+            log_sync = AsciiToU32(argv[++i], NULL, NULL);
+        } else if(!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) {
+            showVersion = true;
+        } else if(!strcmp(argv[i], "-v") || !strcmp(argv[i], "--verbose")) {
+            KStsLevel l = KStsLevelGet();
+            KStsLevelSet(++l);
+        } else if(!strcmp(argv[i], "-h") || !strcmp(argv[i], "-ho") || !strcmp(argv[i], "--help")) {
+            showHelp = true;
+        } else {
+            /* save arg for FUSE */
+            fargs[i] = argv[i];
+            if( !strcmp(argv[i], "-d") || !strcmp(argv[i], "-f") ||
+                (!strcmp(argv[i], "-o") && (i > argc - 1) && !strcmp(argv[i + 1], "debug")) ) {
+                foreground = true;
+            }
+        }
+    }
+    if( missedArgs ) {
+        CoreUsage(log_fd, argv[0], missedArgs, showVersion, true, true);
+    }
+    if( showHelp || showVersion ) {
+        CoreUsage(log_fd, argv[0], showHelp, showVersion, false, false);
+    }
+    if( (rc = LogFile_Init(log_file, log_sync, foreground, &log_fd)) != 0 ) {
+        LOGERR(klogErr, rc, log_file ? log_file : "no log");
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    if( mount_point == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient), "mountpoint");
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    if( unmount ) {
+        fuse_unmount(mount_point);
+        exit(0);
+    }
+    if( xml_path == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcInsufficient), "virtual directory XML");
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    if( i != argc ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcValidating, rcParam, rcExcessive), argv[i]);
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    if( stat(mount_point, &g_mount_point_stat) < 0 ) {
+        PLOGMSG(klogErr, (klogErr, "$(p): $(e)", PLOG_2(PLOG_S(p),PLOG_S(e)), mount_point, strerror(errno)));
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    g_mount_point_stat.st_dev = 0;
+    g_mount_point_stat.st_ino = 0;
+    g_mount_point_stat.st_mode = S_IFDIR | 0555; /* execute read-only */
+     /* find needs more links to search in subdir */
+    g_mount_point_stat.st_nlink = 1024 * 1024 * 1024;
+    
+    if( stat(xml_path, &g_dflt_file_stat) < 0 ) {
+        PLOGMSG(klogErr, (klogErr, "$(p): $(e)", PLOG_2(PLOG_S(p),PLOG_S(e)), xml_path, strerror(errno)));
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    g_dflt_file_stat.st_dev = 0;
+    g_dflt_file_stat.st_ino = 0;
+    g_dflt_file_stat.st_mode = S_IFREG | 0444; /* read-only */
+    g_dflt_file_stat.st_nlink = 1;
+    g_dflt_file_stat.st_rdev = 0;
+    g_dflt_file_stat.st_size = 0;
+    g_dflt_file_stat.st_blksize = 0;
+    g_dflt_file_stat.st_blocks = 0;
+
+    if( (rc = Initialize(sra_sync, xml_path, xml_sync, sra_cache, xml_root, xml_validate)) != 0 ) {
+        LOGERR(klogErr, rc, "at initialization");
+        CoreUsage(log_fd, argv[0], true, false, true, false);
+    }
+    DEBUG_MSG(8, ("Mount point set to '%s'\n", mount_point));
+
+    {{ /* FUSE start */
+        struct fuse_operations ops;
+        struct fuse_args args;
+
+        memset(&args, 0, sizeof(struct fuse_args));
+        fuse_opt_add_arg(&args, argv[0]);
+        /* mount point for fuse_main */
+        fuse_opt_add_arg(&args, mount_point);
+        /* save mopunt point dir and program stat */
+        for(i = 0; i < argc; i++) {
+            if( fargs[i] ) {
+                fuse_opt_add_arg(&args, fargs[i]);
+            }
+        }
+        free(fargs);
+        memset(&ops, 0, sizeof(struct fuse_operations));
+        ops.init     = UX_FUSE_init;
+        ops.destroy  = UX_FUSE_destroy;
+        ops.getattr  = UX_FUSE_getattr;
+        ops.readdir  = UX_FUSE_readdir;
+        ops.readlink = UX_FUSE_readlink;
+        ops.open     = UX_FUSE_open;
+        ops.read     = UX_FUSE_read;
+        ops.release  = UX_FUSE_release;
+        ops.mknod = UX_FUSE_mknod;
+        ops.mkdir = UX_FUSE_mkdir;
+        ops.unlink = UX_FUSE_unlink;
+        ops.rmdir = UX_FUSE_rmdir;
+        ops.symlink = UX_FUSE_symlink;
+        ops.rename = UX_FUSE_rename;
+        ops.link = UX_FUSE_link;
+        ops.chmod = UX_FUSE_chmod;
+        ops.chown = UX_FUSE_chown;
+        ops.truncate = UX_FUSE_truncate;
+        ops.utime = UX_FUSE_utime;
+        ops.write = UX_FUSE_write;
+        ops.flush = UX_FUSE_flush;
+        ops.create = UX_FUSE_create;
+        ops.ftruncate = UX_FUSE_ftruncate;
+        rc = fuse_main(args.argc, args.argv, &ops);
+    }}
+    return rc;
+}
diff --git a/tools/fuse/xml.c b/tools/fuse/xml.c
new file mode 100644
index 0000000..cf595fe
--- /dev/null
+++ b/tools/fuse/xml.c
@@ -0,0 +1,516 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <kproc/lock.h>
+#include <kproc/thread.h>
+
+#include "log.h"
+#include "xml.h"
+#include "file.h"
+#include "directory.h"
+#include "tar-node.h"
+#include "sra-list.h"
+#include "node.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+static const KXMLMgr* g_xmlmgr = NULL;
+static const FSNode* g_root = NULL;
+static KRWLock* g_lock = NULL;
+static const char* g_start_dir = NULL;
+static uint32_t g_xml_validate = 0;
+
+static unsigned int g_xml_sync = 0;
+/* if g_xml_sync == 0 these are not used: */
+static KTime_t g_xml_mtime = 0;
+static char* g_xml_path = NULL;
+static KThread* g_xml_thread = NULL;
+
+static
+rc_t XMLLock(bool exclusive)
+{
+    DEBUG_MSG(10, ("Lock XML tree %s\n", exclusive ? "write" : "read"));
+    return exclusive ? KRWLockAcquireExcl(g_lock) : KRWLockAcquireShared(g_lock);
+}
+
+static
+void XMLUnlock(void)
+{
+    DEBUG_MSG(10, ("Unlocked XML tree\n"));
+    ReleaseComplain(KRWLockUnlock, g_lock);
+}
+
+void XML_FindRelease(void)
+{
+    XMLUnlock();
+}
+
+rc_t XML_FindLock(const char* path, bool recur, const FSNode** node, const char** subpath)
+{
+    rc_t rc = 0;
+    size_t sz = 0;
+    const char* p0 = NULL, *p = NULL;
+    const FSNode* pn = NULL, *n = NULL;
+    bool hidden = false;
+
+    if( path == NULL || node == NULL || subpath == NULL ) {
+        return RC(rcExe, rcPath, rcResolving, rcParam, rcNull);
+    }
+    sz = strlen(path);
+    if( sz == 0 ) {
+        return RC(rcExe, rcPath, rcResolving, rcParam, rcEmpty);
+    }
+    p0 = path;
+    if( (rc = XMLLock(false)) != 0 ) {
+        return rc;
+    }
+    pn = g_root;
+    do {
+        DEBUG_MSG(8, ("Path: '%s'\n", p0));
+        while( *p0 == '/' && *p0 != '\0' ) {
+            p0++;
+        }
+        if( *p0 == '\0' ) {
+            break;
+        }
+        p = strchr(p0, '/');
+        if( p == NULL ) {
+            p = p0 + strlen(p0);
+        }
+        DEBUG_MSG(8, ("Push: '%.*s'\n", p - p0, p0));
+        if( (rc = FSNode_FindChild(pn, p0, p - p0, &n, &hidden)) == 0 ) {
+            if( hidden ) {
+                pn = n;
+                DEBUG_MSG(8, ("Match! hidden '%s' left '%s'\n", pn->name, p0));
+                break;
+            } else {
+                DEBUG_MSG(8, ("Match! '%.*s' left '%s'\n", p - p0, p0, p));
+            }
+        } else if( GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+            break;
+        }
+        pn = n;
+        p0 = p;
+    } while( rc == 0 && p0 < path + sz );
+
+    if( rc == 0 ) {
+        if( pn == NULL ) {
+            rc = RC(rcExe, rcPath, rcResolving, rcDirEntry, rcNotFound);
+            DEBUG_MSG(10, ("Not found: '%s', in '%s'\n", p0, path));
+        } else {
+            if( (rc = FSNode_Touch(pn)) != 0 ) {
+                PLOGERR(klogWarn, (klogWarn, rc, "touch failed for $(n)", PLOG_S(n), pn->name));
+                rc = 0;
+            }
+            *node = pn;
+            *subpath = (p0 && p0[0] != '\0') ? p0 : NULL;
+#if _DEBUGGING
+            {
+                const char* nm = NULL;
+                FSNode_GetName(pn, &nm);
+                DEBUG_MSG(10, ("Found: '%s', sub '%s'\n", nm, *subpath));
+            }
+#endif
+        }
+    }
+    if( rc != 0 ) {
+        XMLUnlock();
+    }
+    return rc;
+}
+
+static
+rc_t SRAConfigParse(const KXMLNode* xml_node, SRAConfigFlags* flags, char* errmsg)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    char at[4096];
+    size_t sz;
+    char* attr_name[]         = { "run-directory", "SRA-archive",   "SRA-archive-lite",  "fastq",           "SFF" };
+    SRAConfigFlags attr_val[] = { eSRAFuseRunDir,  eSRAFuseFileArc, eSRAFuseFileArcLite, eSRAFuseFileFastq, eSRAFuseFileSFF };
+
+    if( *flags & eSRAFuseInitial ) {
+        *flags = 0;
+    }
+    for(i = 0; rc == 0 && i < sizeof(attr_name)/sizeof(attr_name[0]); i++) {
+        if( (rc = KXMLNodeReadAttrCString(xml_node, attr_name[i], at, sizeof(at), &sz)) == 0 ) {
+            if( strcasecmp(at, "true") == 0 ) {
+                *flags = *flags | attr_val[i];
+            } else if( strcasecmp(at, "false") == 0 ) {
+                *flags = *flags & ~(attr_val[i]);
+            } else {
+                strcpy(errmsg, "SRAConfig attribute ");
+                strcat(errmsg,  attr_name[i]);
+                strcat(errmsg, " value '");
+                strcat(errmsg, at);
+                strcat(errmsg, "'");
+                rc = RC(rcExe, rcDoc, rcReading, rcData, rcInvalid);
+            }
+        } else if( GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t XML_ValidateNode(FSNode* parent, const KXMLNode* n, SRAConfigFlags flags, char* errmsg)
+{
+    rc_t rc = 0;
+    const char* name = NULL;
+    FSNode* fsn = NULL;
+    bool children_allowed = false, should_have_children = false, ignore_children = false;
+
+    if( (rc = KXMLNodeElementName(n, &name)) != 0 ) {
+        return rc;
+    }
+    DEBUG_MSG(8, ("Node: %s\n", name));
+    if( name == NULL ) {
+        return RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcNull);
+    }
+
+    if( strcmp(name, "Directory") == 0 ) {
+        rc = DirectoryNode_Make(n, &fsn, errmsg, g_start_dir, g_xml_mtime, g_xml_validate);
+        children_allowed = true;
+    } else if( strcmp(name, "File") == 0 ) {
+        rc = FileNode_Make(n, &fsn, errmsg, g_start_dir, g_xml_validate);
+    } else if( strcmp(name, "SRA") == 0 ) {
+        if( (rc = SRAListNode_Make(n, parent, flags, errmsg, g_start_dir, g_xml_validate)) == 0 ) {
+            fsn = parent;
+        }
+    } else if( strcmp(name, "TAR") == 0 ) {
+        /* tar nodes do not validate on creation */
+        rc = TarNode_MakeXML(n, &fsn, errmsg, g_start_dir);
+        children_allowed = true;
+        ignore_children = true;
+    } else if( strcmp(name, "SRAConfig") == 0 ) {
+        if( (rc = SRAConfigParse(n, &flags, errmsg)) == 0 ) {
+            fsn = parent;
+            children_allowed = true;
+            should_have_children = true;
+        }
+    } else {
+        strcpy(errmsg, name);
+        rc = RC(rcExe, rcDoc, rcValidating, rcTag, rcUnknown);
+    }
+    if( rc == 0 ) {
+        strcpy(errmsg, name);
+        if( fsn == parent || (rc = FSNode_AddChild(parent, fsn)) == 0 ) {
+            uint32_t count = 0;
+            if( (rc = KXMLNodeCountChildNodes(n, &count)) == 0 && count > 0 ) {
+                if( !children_allowed ) {
+                    if( fsn != NULL ) {
+                        FSNode_GetName(fsn, &name);
+                    }
+                    rc = RC(rcExe, rcDoc, rcValidating, rcDirEntry, rcInvalid);
+                    strcpy(errmsg, name);
+                } else if( !ignore_children ) {
+                    uint32_t i = 0;
+                    const KXMLNode* ch = NULL;
+                    while( rc == 0 && i < count ) {
+                        if( (rc = KXMLNodeGetNodeRead(n, &ch, i++)) == 0 ) {
+                            rc = XML_ValidateNode(fsn, ch, flags, errmsg);
+                            ReleaseComplain(KXMLNodeRelease, ch);
+                        }
+                    }
+                }
+            } else if( count == 0 && should_have_children ) {
+                PLOGMSG(klogWarn, (klogWarn, "$(n) may have children", PLOG_S(n), name));
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t RootNode_Attr(const FSNode* cself, const char* subpath, uint32_t* type, KTime_t* ts, uint64_t* file_sz, uint32_t* access, uint64_t* block_sz)
+{
+    rc_t rc = 0;
+
+    *type = kptDir;
+    if( subpath != NULL ) {
+        rc = RC(rcExe, rcFile, rcEvaluating, rcDirEntry, rcNotFound);
+    }
+    return rc;
+}
+
+static
+rc_t RootNode_Dir(const FSNode* cself, const char* subpath, FSNode_Dir_Visit func, void* data)
+{
+    if( subpath != NULL ) {
+        return RC(rcExe, rcFile, rcListing, rcDirEntry, rcNotFound);
+    }
+    return FSNode_ListChildren(cself, func, data);
+}
+
+static const FSNode_vtbl RootNode_vtbl = {
+    sizeof(FSNode),
+    NULL,
+    NULL,
+    RootNode_Attr,
+    RootNode_Dir,
+    NULL,
+    NULL,
+    NULL
+};
+
+static
+rc_t XML_Open(const char* path, const FSNode** tree)
+{
+    rc_t rc = 0;
+    char errmsg[4096] = "";
+    KDirectory *dir = NULL;
+    
+    PLOGMSG(klogInfo, (klogInfo, "Reading XML file '$(x)'", PLOG_S(x), path));
+    if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        const KFile* file = NULL;
+        if( (rc = KDirectoryOpenFileRead(dir, &file, "%s", path)) == 0 ) {
+            if( (rc = FSNode_Make((FSNode**)tree, "ROOT", &RootNode_vtbl)) == 0 ) {
+                const KXMLDoc* xmldoc = NULL;
+                if( (rc = KXMLMgrMakeDocRead(g_xmlmgr, &xmldoc, file)) == 0 ) {
+                    const KXMLNodeset* ns = NULL;
+                    if( (rc = KXMLDocOpenNodesetRead(xmldoc, &ns, "/FUSE/*")) == 0 ) {
+                        uint32_t count = 0;
+                        if( (rc = KXMLNodesetCount(ns, &count)) == 0 ) {
+                            if( count == 0 ) {
+                                rc = RC(rcExe, rcDoc, rcValidating, rcData, rcEmpty);
+                            } else {
+                                uint32_t i = 0;
+                                while(rc == 0 && i < count) {
+                                    const KXMLNode* n = NULL;
+                                    if( (rc = KXMLNodesetGetNodeRead(ns, &n, i++)) == 0 ) {
+                                        SRAConfigFlags flags = ~0;
+                                        errmsg[0] = '\0';
+                                        rc = XML_ValidateNode((FSNode*)*tree, n, flags, errmsg);
+                                        ReleaseComplain(KXMLNodeRelease, n);
+                                    }
+                                }
+                                if( rc == 0 ) {
+                                    rc = SRAList_NextVersion();
+                                }
+                            }
+                        }
+                        ReleaseComplain(KXMLNodesetRelease, ns);
+                    }
+                    ReleaseComplain(KXMLDocRelease, xmldoc);
+                }
+                if( rc != 0 ) {
+                    FSNode_Release(*tree);
+                    *tree = NULL;
+                }
+            }
+            ReleaseComplain(KFileRelease, file);
+        }
+        ReleaseComplain(KDirectoryRelease, dir);
+    }
+    if( rc == 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "XML file '$(x)' ok", PLOG_S(x), path));
+    } else {
+        if( strlen(errmsg) < 1 ) {
+            strcpy(errmsg, path);
+        }
+        LOGERR(klogErr, rc, errmsg);
+    }
+    return rc;
+}
+
+static
+rc_t XMLThread( const KThread *self, void *data )
+{
+    KDirectory *dir = NULL;
+
+    PLOGMSG(klogInfo, (klogInfo, "XML sync thread started with $(s) sec", PLOG_U32(s), g_xml_sync));
+    do {
+        rc_t rc = 0;
+        KTime_t dt = 0;
+
+        DEBUG_MSG(8, ("XML sync thread checking %s\n", g_xml_path));
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            rc = KDirectoryDate(dir, &dt, "%s", g_xml_path);
+            ReleaseComplain(KDirectoryRelease, dir);
+        }
+        if( rc == 0 ) {
+            if( dt != g_xml_mtime ) {
+                const FSNode* new_root = NULL;
+                PLOGMSG(klogInfo, (klogInfo, "File $(f) changed ($(m) <> $(d)), updating...",
+                    PLOG_3(PLOG_S(f),PLOG_I64(m),PLOG_I64(d)), g_xml_path, g_xml_mtime, dt));
+                if( XML_Open(g_xml_path, &new_root) == 0 ) {
+                    if( (rc = XMLLock(true)) == 0 ) {
+                        const FSNode* old_root = g_root;
+                        g_root = new_root;
+                        g_xml_mtime = dt;
+                        XMLUnlock();
+                        FSNode_Release(old_root);
+                        PLOGMSG(klogInfo, (klogInfo, "Data from $(f) updated successfully", PLOG_S(f), g_xml_path));
+                    }
+                }
+            } else {
+                DEBUG_MSG(8, ("XML sync thread up-to-date %s\n", g_xml_path));
+            }
+        } else {
+            LOGERR(klogErr, rc, g_xml_path);
+        }
+        SRAList_PostRefresh();
+        KSleepMs(g_xml_sync * 1000);
+    } while( g_xml_sync > 0 );
+    LOGMSG(klogInfo, "XML sync thread ended");
+    return 0;
+}
+
+rc_t XML_Make(KDirectory* dir, const char* const work_dir, const char* xml_path, unsigned int sync, uint32_t xml_validate)
+{
+    rc_t rc = 0; 
+
+    g_xml_sync = sync;
+    if( g_xmlmgr == NULL && (rc = KXMLMgrMakeRead(&g_xmlmgr)) != 0 ) {
+        g_xmlmgr = NULL;
+        LOGERR(klogErr, rc, "XML manager");
+    } else {
+        char buf[4096];
+        if( (rc = KDirectoryResolvePath(dir, true, buf, 4096, "%s", xml_path)) == 0 ) {
+            if( (rc = StrDup(buf, &g_xml_path)) == 0 ) {
+                DEBUG_MSG(8, ("XML path set to '%s'\n", g_xml_path));
+            }
+        }
+        g_start_dir = work_dir;
+        g_xml_validate = xml_validate;
+    }
+    if( rc == 0 ) {
+        rc = FSNode_Make((FSNode**)&g_root, "ROOT", &RootNode_vtbl);
+    }
+    return rc;
+}
+
+void XML_Init(void)
+{
+    rc_t rc = 0;
+
+    if( g_lock == NULL && (rc = KRWLockMake(&g_lock)) != 0 ) {
+        g_lock = NULL;
+        LOGERR(klogErr, rc, "XML lock");
+    }
+    if( (rc = KThreadMake(&g_xml_thread, XMLThread, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "XML sync thread");
+    }
+}
+
+void XML_Fini(void)
+{
+    g_xml_sync = 0;
+    if( g_xml_thread != NULL ) {
+        ReleaseComplain(KThreadCancel, g_xml_thread);
+        ReleaseComplain(KThreadRelease, g_xml_thread);
+    }
+    ReleaseComplain(KXMLMgrRelease, g_xmlmgr);
+    XMLLock(true);
+    FSNode_Release(g_root);
+    XMLUnlock();
+    ReleaseComplain(KRWLockRelease, g_lock);
+    FREE(g_xml_path);
+
+    g_root = NULL;
+    g_lock = NULL;
+    g_start_dir = NULL;
+    g_xml_mtime = 0;
+    g_xml_path = NULL;
+    g_xml_thread = NULL;
+}
+
+rc_t XML_MgrGet(const KXMLMgr** xmlmgr)
+{
+    if( xmlmgr == NULL ) {
+        return RC(rcExe, rcDoc, rcAccessing, rcParam, rcNull);
+    }
+    if( g_xmlmgr == NULL ) {
+        return RC(rcExe, rcPath, rcAccessing, rcMgr, rcNull);
+    }
+    *xmlmgr = g_xmlmgr;
+    return 0;
+}
+
+rc_t XML_ParseTimestamp(const KXMLNode* xml_node, const char* attr, KTime_t* timestamp, bool optional)
+{
+    rc_t rc;
+    char ts[128];
+    size_t sz;
+
+    if( (rc = KXMLNodeReadAttrCString(xml_node, attr, ts, sizeof(ts), &sz)) == 0 ) {
+        struct tm tm;
+        memset(&tm, 0, sizeof(tm));
+        if( strptime(ts, "%Y-%m-%dT%H:%M:%S", &tm) != NULL ) {
+            *timestamp = mktime(&tm);
+        } else {
+            rc = RC(rcExe, rcDoc, rcReading, rcAttr, rcInvalid);
+        }
+    } else if( optional && GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
+
+rc_t XML_WriteTimestamp(char* dst, size_t bsize, size_t *num_writ, KTime_t ts)
+{
+    struct tm* tm = localtime(&ts);
+
+    *num_writ = strftime(dst, bsize, "%a %Y-%m-%d %H:%M:%S %Z", tm);
+    if( *num_writ < 1 || *num_writ >= bsize ) {
+        return RC(rcExe, rcDoc, rcWriting, rcBuffer, rcInsufficient);
+    }
+    return 0;
+}
+
+rc_t XML_ParseBool(const KXMLNode* xml_node, const char* attr, bool* val, bool optional)
+{
+    rc_t rc;
+    char b[16];
+    size_t sz;
+
+    if( (rc = KXMLNodeReadAttrCString(xml_node, attr, b, sizeof(b), &sz)) == 0 ) {
+        if( strcasecmp(b, "true") == 0 || strcasecmp(b, "on") == 0 || strcasecmp(b, "yes") == 0 ) {
+            *val = true;
+        } else if( strcasecmp(b, "false") == 0 || strcasecmp(b, "off") == 0 || strcasecmp(b, "no") == 0 ) {
+            *val = false;
+        } else {
+            rc = RC(rcExe, rcDoc, rcReading, rcAttr, rcInvalid);
+        }
+    } else if( optional && GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
diff --git a/tools/fuse/xml.h b/tools/fuse/xml.h
new file mode 100644
index 0000000..a945e24
--- /dev/null
+++ b/tools/fuse/xml.h
@@ -0,0 +1,60 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_xml_
+#define _h_sra_fuse_xml_
+
+#include <kxml/xml.h>
+#include <kfs/directory.h>
+
+#include "node.h"
+
+typedef uint32_t EXMLValidate;
+enum {
+    eXML_NoCheck = 0,
+    eXML_NoFail,
+    eXML_Full
+};
+
+rc_t XML_Make(KDirectory* dir, const char* const work_dir, const char* xml_path,
+              unsigned int sync, EXMLValidate xml_validate);
+
+void XML_Init(void);
+
+rc_t XML_FindLock(const char* path, bool recur, const FSNode** node, const char** subpath);
+
+void XML_FindRelease(void);
+
+rc_t XML_MgrGet(const KXMLMgr** xmlmgr);
+
+rc_t XML_ParseTimestamp(const KXMLNode* xml_node, const char* attr, KTime_t* tm, bool optional);
+
+rc_t XML_WriteTimestamp(char* dst, size_t bsize, size_t *num_writ, KTime_t ts);
+
+rc_t XML_ParseBool(const KXMLNode* xml_node, const char* attr, bool* val, bool optional);
+
+void XML_Fini(void);
+
+#endif /* _h_sra_fuse_xml_ */
diff --git a/tools/fuse/zlib-simple.c b/tools/fuse/zlib-simple.c
new file mode 100644
index 0000000..aa671ea
--- /dev/null
+++ b/tools/fuse/zlib-simple.c
@@ -0,0 +1,65 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include "debug.h"
+#include "zlib-simple.h"
+
+rc_t ZLib_DeflateBlock(const char* src, size_t src_sz, char* dst, size_t dst_sz, size_t* written)
+{
+    rc_t rc = 0;
+    z_stream z_strm;
+    int z_err = Z_OK;
+
+    if( src == NULL || dst == NULL || written == NULL ) {
+        rc = RC(rcExe, rcFunction, rcConstructing, rcParam, rcNull);
+    } else {
+        z_strm.next_in = (unsigned char*)src;
+        z_strm.zalloc = Z_NULL;
+        z_strm.zfree = Z_NULL;
+        z_strm.opaque = Z_NULL;
+        z_err = deflateInit2(&z_strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 + 16, 8, Z_DEFAULT_STRATEGY);
+        if( z_err != Z_OK ) {
+            rc = RC(rcExe, rcFunction, rcConstructing, rcInterface, rcUnexpected);
+            DEBUG_MSG(3, ("deflateInit2: %R %d\n", rc, z_err));
+        } else {
+            z_strm.avail_in = src_sz;
+            z_strm.next_out = (unsigned char*)dst;
+            z_strm.avail_out = dst_sz;
+            if( (z_err = deflate(&z_strm, Z_FINISH)) != Z_STREAM_END ) {
+                rc = RC(rcExe, rcFunction, rcExecuting, rcInterface, rcUnexpected);
+                DEBUG_MSG(3, ("deflate(Z_FINISH): %R %d\n", rc, z_err));
+            }
+            *written = dst_sz - z_strm.avail_out;
+            if( (z_err = deflateEnd(&z_strm)) != Z_OK ) {
+                rc = RC(rcExe, rcFunction, rcDestroying, rcInterface, rcUnexpected);
+                DEBUG_MSG(3, ("deflateEnd: %r %d\n", rc, z_err));
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/fuse/zlib-simple.h b/tools/fuse/zlib-simple.h
new file mode 100644
index 0000000..178218d
--- /dev/null
+++ b/tools/fuse/zlib-simple.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_sra_fuse_zlib_simple_
+#define _h_sra_fuse_zlib_simple_
+
+#include <zlib.h>
+
+rc_t ZLib_DeflateBlock(const char* src, size_t src_sz, char* dst, size_t dst_sz, size_t* written);
+
+#endif /* _h_sra_fuse_zlib_simple_ */
diff --git a/tools/general-loader/Makefile b/tools/general-loader/Makefile
new file mode 100644
index 0000000..f852589
--- /dev/null
+++ b/tools/general-loader/Makefile
@@ -0,0 +1,131 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+
+MODULE = tools/general-loader
+
+ALL_LIBS = \
+	general-writer
+
+INT_TOOLS = \
+	gw-dumper
+
+EXT_TOOLS = \
+	general-loader
+
+ALL_TOOLS =      \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(LIBDIR)/,$(ALL_LIBS)) \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(LIBDIR)/,$(ALL_LIBS)) \
+	$(addprefix $(TEST_BINDIR)/,$(INT_TOOLS)) \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# general-writer
+#
+$(LIBDIR)/general-writer: $(LIBDIR)/$(LPFX)general-writer.$(LIBX)
+
+GEN_WRITER_SRC = \
+    general-writer \
+	utf8-like-int-codec
+
+GEN_WRITER_OBJ = \
+	$(addsuffix .$(LOBX),$(GEN_WRITER_SRC))
+
+$(LIBDIR)/$(LPFX)general-writer.$(LIBX): $(GEN_WRITER_OBJ)
+	$(LD) --slib --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^
+
+#-------------------------------------------------------------------------------
+# gw-dumper
+#
+
+$(TEST_BINDIR)/gw-dumper: $(SRCDIR)/gw-dumper.cpp $(SRCDIR)/utf8-like-int-codec.c
+	c++ $(DBG) -o $@ $^ -I$(SRCDIR) -I$(VDB_INCDIR)/os/$(OS) -I$(VDB_INCDIR)
+
+
+#-------------------------------------------------------------------------------
+# general-loader
+#
+GEN_LOAD_SRC = \
+    general-loader \
+    protocol-parser \
+    database-loader \
+	utf8-like-int-codec \
+	main \
+
+GEN_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(GEN_LOAD_SRC))
+
+GEN_LOAD_LIBS = \
+	-sncbi-wvdb-static \
+	-sload \
+	-skapp \
+	-stk-version \
+
+$(BINDIR)/general-loader: $(GEN_LOAD_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(GEN_LOAD_LIBS)
+
diff --git a/tools/general-loader/database-loader.cpp b/tools/general-loader/database-loader.cpp
new file mode 100644
index 0000000..3353ed8
--- /dev/null
+++ b/tools/general-loader/database-loader.cpp
@@ -0,0 +1,894 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "general-loader.hpp"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/time.h>
+
+#include <kdb/meta.h>
+#include <kdb/table.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+
+#include <kapp/loader-meta.h>
+#include <kapp/main.h>
+
+#include <algorithm>
+
+using namespace std;
+
+///////////// GeneralLoader::DatabaseLoader
+
+GeneralLoader :: DatabaseLoader :: DatabaseLoader ( const std::string&  p_programName, 
+                                                    const Paths&        p_includePaths, 
+                                                    const Paths&        p_schemas, 
+                                                    const std::string&  p_dbNameOverride )
+:   m_includePaths ( p_includePaths ),
+    m_schemas ( p_schemas ),
+    m_programName ( p_programName ),
+    m_databaseName ( p_dbNameOverride ), // if specified, overrides the database path coming in from the stream
+    m_softwareVersion ( 0 ),
+    m_mgr ( 0 ),
+    m_schema ( 0 ),
+    m_databaseNameOverridden ( ! m_databaseName.empty() ) 
+{
+    m_databases . insert ( Databases :: value_type ( 0, (VDatabase*)0 ) ); // reserve root database
+}
+
+GeneralLoader :: DatabaseLoader :: ~DatabaseLoader ()
+{
+    m_tables . clear();
+    m_columns . clear ();
+    
+    for ( Cursors::iterator it = m_cursors . begin(); it != m_cursors . end(); ++it )
+    {
+        VCursorRelease ( *it );
+    }
+
+    for ( Databases::iterator it = m_databases . begin(); it != m_databases . end(); ++it )
+    {
+        VDatabaseRelease ( it -> second );
+    }
+    
+    if ( m_schema != 0 )
+    {
+        VSchemaRelease ( m_schema );
+        m_schema = 0;
+    }
+    
+    if ( m_mgr != 0 )
+    {
+        VDBManagerRelease ( m_mgr );
+        m_mgr = 0;
+    }
+}
+
+const GeneralLoader :: DatabaseLoader :: Column* 
+GeneralLoader :: DatabaseLoader :: GetColumn ( uint32_t p_columnId ) const
+{
+    Columns::const_iterator curIt = m_columns . find ( p_columnId );
+    if ( curIt != m_columns . end () )
+    {
+        return & curIt -> second;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: UseSchema ( const string& p_file, const string& p_name )
+{
+    pLogMsg ( klogDebug, "database-loader: schema file '$(s1)', name '$(s2)'", "s1=%s,s2=%s", 
+                        p_file . c_str (), p_name . c_str () );
+
+    rc_t rc = VDBManagerMakeUpdate ( & m_mgr, NULL );
+    if ( rc == 0 )
+    {
+        for ( Paths::const_iterator it = m_includePaths . begin(); it != m_includePaths . end(); ++it )
+        {   
+            rc = VDBManagerAddSchemaIncludePath ( m_mgr, "%s", it -> c_str() );
+            if ( rc == 0 )
+            {
+                pLogMsg ( klogDebug, 
+                          "database-loader: Added schema include path '$(s)'", 
+                          "s=%s", 
+                          it -> c_str() );
+            }
+            else if ( GetRCObject ( rc ) == (RCObject)rcPath )
+            {
+                pLogMsg ( klogWarn, 
+                          "database-loader: Schema include path not found: '$(s)'", 
+                          "s=%s", 
+                          it -> c_str() );
+                rc = 0;
+            }
+            else
+            {
+                return rc;
+            }
+        }
+        
+        rc = VDBManagerMakeSchema ( m_mgr, & m_schema );
+        if ( rc  == 0 )
+        {
+            bool found = false;
+            if ( ! p_file . empty () )
+            {
+                rc = VSchemaParseFile ( m_schema, "%s", p_file . c_str () );
+                if ( rc == 0 )
+                {
+                    pLogMsg ( klogDebug, 
+                              "database-loader: Added schema file '$(s)'", 
+                              "s=%s", 
+                              p_file . c_str () );
+                    found = true;
+                }
+                else if ( GetRCObject ( rc ) == (RCObject)rcPath && GetRCState ( rc ) == rcNotFound )
+                {
+                    pLogMsg ( klogWarn, 
+                              "database-loader: Schema file not found: '$(s)'", 
+                              "s=%s", 
+                              p_file . c_str () );
+                    rc = 0;
+                }
+            }
+            // if p_file is empty, there should be other schema files specified externally 
+            // through the command line options, in m_schemas
+            
+            if ( rc  == 0 )
+            {
+                for ( Paths::const_iterator it = m_schemas. begin(); it != m_schemas . end(); ++it )
+                {   
+                    rc = VSchemaParseFile ( m_schema, "%s", it -> c_str() );
+                    if ( rc == 0 )
+                    {
+                        pLogMsg ( klogDebug, 
+                                  "database-loader: Added schema file '$(s)'", 
+                                  "s=%s", 
+                                  it -> c_str() );
+                        found = true;
+                    }
+                    else if ( GetRCObject ( rc ) == (RCObject)rcPath && GetRCState ( rc ) == rcNotFound )
+                    {
+                        pLogMsg ( klogWarn, 
+                                  "database-loader: Schema file not found: '$(s)'", 
+                                  "s=%s", 
+                                  it -> c_str() );
+                        rc = 0;
+                    }
+                }
+            }
+            
+            if ( found )
+            {
+                m_schemaName = p_name;
+            }
+            else
+            {
+                rc = RC ( rcVDB, rcMgr, rcCreating, rcSchema, rcNotFound );
+            }
+        }
+    }
+    return rc;
+}                        
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: RemotePath ( const string& p_path )
+{
+    if ( m_databaseNameOverridden )
+    {
+        pLogMsg ( klogWarn, 
+                  "database-loader: remote  path '$(s1)' ignored, overridden to '$(s2)'", 
+                  "s1=%s,s2=%s", 
+                  p_path . c_str (), m_databaseName . c_str () );
+    }
+    else
+    {
+        pLogMsg ( klogDebug, "database-loader: remote  path '$(s1)'", "s1=%s", p_path . c_str () );
+        m_databaseName = p_path;
+    }
+    return 0;
+}
+
+static 
+void 
+check_vers_component ( const char * vers, const char * end, long num, unsigned long max, char term )
+{
+    if ( vers == end )
+        throw "bad version";
+    if ( * end != 0 && * end != term )
+        throw "bad version";
+    if ( num < 0 || (unsigned long)num > max )
+        throw "bad version";
+}
+
+static 
+ver_t 
+string2ver_t ( const char * vers )
+{
+    ver_t ret = 0;
+    char * end;
+    long num = strtol ( vers, & end, 10 );
+    check_vers_component ( vers, end, num, 255, '.' );
+    if ( * end == '.' )
+    {
+        ret = num << 24;
+        vers = end + 1;
+        num = strtol ( vers, & end, 10 );
+        check_vers_component ( vers, end, num, 255, '.' );
+        if ( * end == '.' )
+        {
+            ret |= num << 16;
+            vers = end + 1;
+            num = strtol ( vers, & end, 10 );
+            check_vers_component ( vers, end, num, 0xFFFF, 0 );
+            ret |= num;
+        }
+    }
+    return ret;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: SoftwareName ( const string& p_name, const string& p_version )
+{
+    pLogMsg ( klogDebug, "database-loader: SoftwareName '$(n)', version '$(v)'", "n=%s,v=%s", p_name . c_str(), p_version . c_str() );
+    try
+    {   
+        m_softwareVersion = string2ver_t ( p_version.c_str() );
+    }
+    catch (...)
+    {
+        return RC ( rcExe, rcDatabase, rcCreating, rcMessage, rcBadVersion );
+    }
+    m_softwareName = p_name;
+    return 0;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: NewTable ( uint32_t p_tableId, const string& p_tableName )
+{   
+    return AddMbrTbl ( p_tableId, 0, p_tableName, p_tableName, kcmCreate | kcmMD5 );
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: NewColumn ( uint32_t p_columnId, uint32_t p_tableId, uint32_t p_elemBits, uint8_t p_flagBits, const string& p_columnName )
+{
+    pLogMsg ( klogDebug, "database-loader: adding column '$(c)'", "c=%s", p_columnName . c_str() );
+    
+    rc_t rc = 0;
+    Tables::const_iterator table = m_tables . find ( p_tableId );
+    if ( table != m_tables . end() )
+    {
+        if ( m_columns . find ( p_columnId ) == m_columns . end () )
+        {
+            uint32_t cursor_idx = table -> second . cursorIdx;
+            uint32_t column_idx;
+            rc = VCursorAddColumn ( m_cursors [ cursor_idx ], 
+                                    & column_idx, 
+                                    "%s", 
+                                    p_columnName . c_str() );
+            if ( rc == 0  )
+            {
+                Column col;
+                col . name      = p_columnName;
+                col . tableId   = p_tableId;
+                col . cursorIdx = cursor_idx;
+                col . columnIdx = column_idx;
+                col . elemBits  = p_elemBits;
+                col . flagBits  = p_flagBits;
+                m_columns [ p_columnId ] = col;
+                pLogMsg ( klogDebug, 
+                          "database-loader: tableId = $(t), added column '$(c)', columnIdx = $(i1), elemBits = $(i2), flagBits = $(i3)",  
+                          "t=%u,c=%s,i1=%u,i2=%u,i3=%u",  
+                          p_tableId, p_columnName . c_str(), col.columnIdx, col.elemBits, col.flagBits );
+            }
+        }
+        else
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcExists );
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcTable, rcInvalid );
+    }
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: AddMbrDB ( uint32_t p_objId, uint32_t p_parentId, const std :: string &p_mbrName, const std :: string &p_dbName, uint8_t p_createMode )
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: adding database id=$(i) parent=$(p) mbrName='$(m)' dbName='$(n)' mode=$(d)", 
+              "m=%s,n=%s,i=%u,p=%u,d=%u", 
+              p_objId, p_parentId, p_mbrName . c_str(), p_dbName . c_str (), ( unsigned int ) p_createMode );
+    
+    rc_t rc = MakeDatabase ( p_parentId );
+    if ( rc == 0 )
+    {
+        Databases :: const_iterator dad = m_databases . find ( p_parentId );
+        assert ( dad != m_databases . end () );
+        
+        if ( m_databases . find ( p_objId ) == m_databases . end () )
+        {
+            VDatabase *db;
+            rc = VDatabaseCreateDB ( dad -> second, & db, p_mbrName . c_str(), p_createMode, "%s", p_dbName . c_str () );
+            if ( rc == 0 )
+            {
+                m_databases . insert ( Databases :: value_type ( p_objId, db ) );
+                m_dbParents . insert ( DatabaseToParent :: value_type ( p_objId, p_parentId ) );
+            }
+        }
+        else
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcDatabase, rcExists );
+        }
+    }
+    
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: AddMbrTbl ( uint32_t p_tblId, uint32_t p_dbId, const std :: string &p_mbrName, const std :: string &p_tblName, uint8_t p_createMode )
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: adding table id=$(i) parent=$(p) mbrName='$(m)' dbName='$(n)' mode=$(d)", 
+              "m=%s,n=%s,i=%u,p=%u,d=%u", 
+              p_mbrName . c_str(), p_tblName . c_str (), p_tblId, p_dbId, ( unsigned int ) p_createMode );
+
+    rc_t rc = 0;
+    if ( m_tables . find ( p_tblId ) == m_tables . end() )
+    {
+        VTable* table;
+        rc = MakeDatabase ( p_dbId ); 
+        if ( rc == 0 )
+        {
+            Databases::iterator it = m_databases . find ( p_dbId ); 
+            if ( it != m_databases . end() )
+            {
+                rc = VDatabaseCreateTable ( it -> second , & table, p_mbrName . c_str (), p_createMode, "%s", p_tblName . c_str ());
+                if ( rc == 0 )
+                {
+                    VCursor* cursor;
+                    rc = VTableCreateCursorWrite ( table, & cursor, kcmInsert );
+                    if ( rc == 0 )
+                    {
+                        m_cursors . push_back ( cursor );
+                        Table t;
+                        t . name = p_tblName;
+                        t . databaseId = p_dbId;
+                        t . cursorIdx = ( uint32_t ) m_cursors . size() - 1;
+                        m_tables [ p_tblId ] = t;
+                    }
+                    rc_t rc2 = VTableRelease ( table );
+                    if ( rc == 0 )
+                    {
+                        rc = rc2;
+                    }
+                }
+            }
+            else
+            {
+                rc = RC ( rcExe, rcFile, rcReading, rcDatabase, rcNotFound );
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcTable, rcExists );
+    }
+
+    return rc;
+}
+
+static 
+rc_t WriteMetadata ( KMetadata* p_meta, const string& p_metadata_node, const string& p_value )
+{
+    KMDataNode* node;
+    rc_t rc = KMetadataOpenNodeUpdate ( p_meta, & node, p_metadata_node . c_str () );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeWrite ( node, p_value . c_str (), p_value . size () );
+    
+        rc_t rc2 = KMDataNodeRelease ( node );
+        if ( rc == 0 )
+        {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: DBMetadataNode ( uint32_t p_objId, const string& p_metadata_node, const string& p_value )
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: adding metadata node '$(n)=$(v)' to database $(i)", 
+              "n=%s,v=%s,i=%u", 
+              p_metadata_node . c_str(), p_value.c_str(), p_objId );
+              
+    rc_t rc = 0;
+    Databases::iterator it = m_databases . find ( p_objId ); 
+    if ( it != m_databases . end() )
+    {
+        struct KMetadata* meta;
+        rc = VDatabaseOpenMetadataUpdate ( it -> second, & meta );
+        if ( rc == 0 )
+        {
+            rc = WriteMetadata ( meta,p_metadata_node, p_value );
+            rc_t rc2 = KMetadataRelease ( meta );
+            if ( rc == 0 )
+            {
+                rc = rc2;
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcDatabase, rcNotFound );
+    }
+    
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: TblMetadataNode ( uint32_t p_objId, const string& p_metadata_node, const string& p_value )
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: adding metadata node '$(n)=$(v)' to table $(i)", 
+              "n=%s,v=%s,i=%u", 
+              p_metadata_node . c_str(), p_value.c_str(), p_objId );
+              
+    rc_t rc = 0;
+    Tables::iterator it = m_tables . find ( p_objId ); 
+    if ( it != m_tables . end() )
+    {
+        struct VTable* tbl;
+        assert ( m_cursors [ it -> second . cursorIdx ] );
+        rc = VCursorOpenParentUpdate ( m_cursors [ it -> second . cursorIdx ], &tbl );
+        if ( rc == 0 )
+        {
+            struct KMetadata* meta;
+            rc = VTableOpenMetadataUpdate ( tbl, & meta );
+            if ( rc == 0 )
+            {
+                rc = WriteMetadata ( meta,p_metadata_node, p_value );
+                rc_t rc2 = KMetadataRelease ( meta );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+            }
+            rc_t rc2 = VTableRelease ( tbl );
+            if ( rc == 0 )
+            {
+                rc = rc2;
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcTable, rcNotFound );
+    }
+    
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: ColMetadataNode ( uint32_t p_objId, const string& p_metadata_node, const string& p_value )
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: adding metadata node '$(n)=$(v)' to column $(i)", 
+              "n=%s,v=%s,i=%u", 
+              p_metadata_node . c_str(), p_value.c_str(), p_objId );
+    
+    rc_t rc = 0;
+    Columns::iterator it = m_columns . find ( p_objId ); 
+    if ( it != m_columns . end() )
+    {
+        it -> second . metadata [ p_metadata_node ] = p_value;
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+    }
+    
+    return rc;
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: SaveColumnMetadata ( const Column& p_col )
+{
+    if ( p_col . metadata . size () == 0 )
+    {
+        return 0;
+    }
+    
+    assert ( m_tables . find ( p_col . tableId ) != m_tables.end() );
+    const Table& t = m_tables [ p_col . tableId ];
+    
+    assert ( m_databases . find ( t . databaseId ) != m_databases.end() );
+    assert ( m_databases . find ( t . databaseId ) -> second != 0 );
+    
+    VTable* table;
+    rc_t rc = VDatabaseOpenTableUpdate ( m_databases [ t . databaseId ], & table, t . name . c_str () );   
+    if ( rc == 0 )
+    {
+        KTable* ktbl;
+        rc = VTableOpenKTableUpdate ( table, & ktbl );
+        if ( rc == 0 )
+        {
+            KColumn* col;
+            rc = KTableOpenColumnUpdate ( ktbl, & col, p_col . name . c_str () );
+            if ( rc == 0 )
+            {   
+                KMetadata *meta;
+                rc = KColumnOpenMetadataUpdate ( col, &meta );
+                if ( rc == 0 )
+                {
+                    for ( Column :: Metadata :: const_iterator it = p_col . metadata . begin(); it != p_col . metadata . end(); ++ it )
+                    {
+                        rc = WriteMetadata ( meta, it -> first . c_str (), it -> second . c_str () );
+                        if ( rc != 0 )
+                        {
+                            break;
+                        }
+                    }
+                    rc_t rc2 = KMetadataRelease ( meta );
+                    if ( rc == 0 )
+                    {
+                        rc = rc2;
+                    }
+                }
+                rc_t rc2 = KColumnRelease ( col );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+            }
+            rc_t rc2 = KTableRelease ( ktbl );
+            if ( rc == 0 )
+            {
+                rc = rc2;
+            }
+        }
+        rc_t rc2 = VTableRelease ( table );
+        if ( rc == 0 )
+        {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: CursorWrite ( const struct Column& p_col, const void* p_data, size_t p_size )
+{
+    return VCursorWrite ( m_cursors [ p_col . cursorIdx ], 
+                          p_col . columnIdx, 
+                          p_col . elemBits, 
+                          p_data, 
+                          0, 
+                          p_size );
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: CursorDefault ( const struct Column& p_col, const void* p_data, size_t p_size )
+{
+    return VCursorDefault ( m_cursors [ p_col . cursorIdx ], 
+                            p_col . columnIdx, 
+                            p_col . elemBits, 
+                            p_data, 
+                            0, 
+                            p_size );
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: CellData ( uint32_t p_columnId, const void* p_data, size_t p_elemCount )
+{
+    rc_t rc = 0;
+    Columns::const_iterator curIt = m_columns . find ( p_columnId );
+    if ( curIt != m_columns . end () )
+    {
+        const Column& col = curIt -> second;
+        pLogMsg ( klogDebug,     
+                  "database-loader: columnIdx = $(i), elem size=$(s) bits, elem count=$(c)",
+                  "i=%u,s=%u,c=%u", 
+                  col . columnIdx, col . elemBits, p_elemCount );
+        rc = CursorWrite ( col, p_data, p_elemCount );
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: CellDefault ( uint32_t p_columnId, const void* p_data, size_t p_elemCount )
+{   //TODO: this and Handle_CellData are almost identical - refactor
+    rc_t rc = 0;
+    Columns::const_iterator curIt = m_columns . find ( p_columnId );
+    if ( curIt != m_columns . end () )
+    {
+        const Column& col = curIt -> second;
+        pLogMsg ( klogDebug,     
+                  "database-loader: columnIdx = $(i), elem size=$(s) bits, elem count=$(c)",
+                  "i=%u,s=%u,c=%u", 
+                  col . columnIdx, col . elemBits, p_elemCount );
+        rc = CursorDefault ( col, p_data, p_elemCount );
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: MakeDatabase( uint32_t p_id )
+{
+    rc_t rc = 0;
+
+    Databases::iterator it = m_databases . find ( p_id ); 
+    if ( it != m_databases . end() )
+    {
+        VDatabase*& db = it -> second;
+        if ( db == 0 ) // only create once
+        {
+            rc = VDBManagerCreateDB ( m_mgr, 
+                                      & db, 
+                                      m_schema, 
+                                      m_schemaName . c_str (), 
+                                      kcmInit + kcmMD5, 
+                                      "%s", 
+                                      m_databaseName . c_str () );
+            if ( rc == 0 && p_id == 0 )
+            {   // populate the root database's metadata
+                struct KMetadata* meta;
+                rc = VDatabaseOpenMetadataUpdate ( db, &meta );
+                if ( rc == 0 )
+                {
+                    KMDataNode *node;
+                    rc = KMetadataOpenNodeUpdate ( meta, &node, "/" );
+                
+                    if (rc == 0) 
+                    {
+                        rc = KLoaderMeta_WriteWithVersion ( node, m_programName.c_str(), __DATE__, KAppVersion(), m_softwareName.c_str(), m_softwareVersion );
+                        KMDataNodeRelease(node);
+                    }
+                    
+                    rc_t rc2 = KMetadataRelease ( meta );
+                    if ( rc == 0 )
+                    {
+                        rc = rc2;
+                    }
+                }
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcDatabase, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: OpenStream ()
+{
+    pLogMsg ( klogDebug, 
+              "database-loader: Database created, schema spec='$(s)', database='$(d)'", 
+              "s=%s,d=%s", 
+              m_schemaName . c_str (), m_databaseName . c_str () );
+              
+    rc_t rc = MakeDatabase ( 0 );
+    if ( rc == 0 )
+    {
+        for ( Cursors::iterator it = m_cursors . begin(); it != m_cursors . end(); ++it )
+        {
+            rc_t rc = VCursorOpen ( *it  );
+            if ( rc != 0 )
+            {
+                return rc;
+            }
+            rc = VCursorOpenRow ( *it );
+            if ( rc != 0 )
+            {
+                break;
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: CloseStream ()
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    
+    for ( Cursors::iterator it = m_cursors . begin(); it != m_cursors . end(); ++it )
+    {
+        rc = VCursorCloseRow ( *it );
+        if ( rc == 0 )
+        {
+            rc = VCursorCommit ( *it );
+            if ( rc == 0 )
+            {
+                struct VTable* table;
+                rc = VCursorOpenParentUpdate ( *it, &table );
+                if ( rc == 0 )
+                {
+                    rc = VCursorRelease ( *it );
+                    if ( rc == 0 )
+                    {
+                        rc = VTableReindex ( table );
+                    }
+                }
+                rc2 = VTableRelease ( table );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+            }
+        }
+        if ( rc != 0 )
+        {
+            break;
+        }
+    }
+    m_cursors . clear ();
+    
+    if ( rc == 0 )
+    {   // save column-level metadata collected from ColMetadata events
+        for ( Columns::iterator it = m_columns. begin(); it != m_columns. end(); ++it )
+        {
+            rc = SaveColumnMetadata ( it -> second );
+            if ( rc != 0 )
+            {
+                break;
+            }
+        }
+    }
+    
+    for ( Databases::iterator it = m_databases . begin(); it != m_databases . end(); ++it )
+    {
+        VDatabaseRelease ( it -> second );
+    }
+    m_databases . clear();
+
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: NextRow ( uint32_t p_tableId )
+{
+    rc_t rc = 0;
+    Tables::const_iterator table = m_tables . find ( p_tableId );
+    if ( table != m_tables . end() )
+    {
+        VCursor * cursor = m_cursors [ table -> second . cursorIdx ];
+        rc = VCursorCommitRow ( cursor );
+        if ( rc == 0 )
+        {
+            rc = VCursorCloseRow ( cursor );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpenRow ( cursor );
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcTable, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: MoveAhead ( uint32_t p_tableId, uint64_t p_count )
+{
+    rc_t rc = 0;
+    Tables::const_iterator table = m_tables . find ( p_tableId );
+    if ( table != m_tables . end() )
+    {
+        VCursor * cursor = m_cursors [ table -> second . cursorIdx ];
+        for ( uint64_t i = 0; i < p_count; ++i )
+        {   // for now, simulate proper handling (this will commit the current row and insert count-1 empty rows)
+            rc = VCursorCommitRow ( cursor );
+            if ( rc != 0 )
+            {
+                break;
+            }
+            rc = VCursorCloseRow ( cursor );
+            if ( rc != 0 )
+            {
+                break;
+            }
+            rc = VCursorOpenRow ( cursor );
+            if ( rc != 0 )
+            {
+                break;
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcTable, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: DatabaseLoader :: ErrorMessage ( const string & p_text )
+{
+    pLogMsg ( klogErr, "general-loader: error \"$(t)\"", "t=%s", p_text . c_str () );
+    return RC ( rcExe, rcFile, rcReading, rcError, rcExists );
+}
+
+rc_t
+GeneralLoader :: DatabaseLoader :: LogMessage ( const string & p_text )
+{
+    pLogMsg ( klogInfo, "general-loader: log from $(s): \"$(t)\"", "s=%s,t=%s", m_softwareName . c_str (), p_text . c_str () );
+    return 0;
+}
+
+
+/*
+<Log>
+  <status app="sra-stat" message="processed 12%" pid="60234"
+        timestamp="2015-09-21T19:49:45" version="2.5.1" percent="12"/>
+</Log>
+ */
+rc_t
+GeneralLoader :: DatabaseLoader :: ProgressMessage ( const std :: string& p_name, uint32_t p_pid,  
+                                                     uint32_t p_timestamp, uint32_t p_version, uint32_t p_percent )
+{
+    KTime kt;
+    KTimeLocal ( &kt, ( KTime_t ) p_timestamp );
+
+    pLogMsg ( klogInfo, 
+              "processed $(percent)%"
+              ,
+              "app=%s,pid=%u,timestamp=%lT,version=%V,percent=%u"
+              , 
+              p_name . c_str (),
+              p_pid,
+              & kt,
+              ( ver_t ) p_version,
+              p_percent );
+    return 0;
+}
diff --git a/tools/general-loader/general-loader.cpp b/tools/general-loader/general-loader.cpp
new file mode 100644
index 0000000..74f2512
--- /dev/null
+++ b/tools/general-loader/general-loader.cpp
@@ -0,0 +1,223 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "general-loader.hpp"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kns/stream.h>
+
+#include <kfs/directory.h>
+
+#include "general-writer.h"
+
+using namespace std;
+
+///////////// GeneralLoader::Reader
+
+GeneralLoader::Reader::Reader( const struct KStream& p_input )
+:   m_input ( p_input ),
+    m_buffer ( 0 ),
+    m_bufSize ( 0 ),
+    m_readCount ( 0 )
+{
+    KStreamAddRef ( & m_input );
+}
+
+GeneralLoader::Reader::~Reader()
+{
+    KStreamRelease ( & m_input );
+    free ( m_buffer );
+}
+
+rc_t 
+GeneralLoader::Reader::Read( void * p_buffer, size_t p_size )
+{
+    pLogMsg ( klogDebug, 
+             "general-loader: reading $(s) bytes, offset=$(o)", 
+             "s=%u,o=%lu", 
+             ( unsigned int ) p_size, m_readCount );
+
+    m_readCount += p_size;
+    return KStreamReadExactly ( & m_input, p_buffer, p_size );
+}
+
+rc_t 
+GeneralLoader::Reader::Read( size_t p_size )
+{
+    if ( p_size > m_bufSize )
+    {
+        m_buffer = realloc ( m_buffer, p_size );
+        if ( m_buffer == 0 )
+        {
+            m_bufSize = 0;
+            m_readCount = 0;
+            return RC ( rcExe, rcFile, rcReading, rcMemory, rcExhausted );
+        }
+    }
+    
+    pLogMsg ( klogDebug, "general-loader: reading $(s) bytes", "s=%u", ( unsigned int ) p_size );
+    
+    m_readCount += p_size;
+    return KStreamReadExactly ( & m_input, m_buffer, p_size );
+}
+
+void 
+GeneralLoader::Reader::Align( uint8_t p_bytes )
+{
+    if ( m_readCount % p_bytes != 0 )
+    {
+        Read ( p_bytes - m_readCount % p_bytes );
+    }
+}
+
+
+///////////// GeneralLoader
+
+GeneralLoader::GeneralLoader ( const std::string& p_programName, const struct KStream& p_input )
+:   m_programName ( p_programName ),
+    m_reader ( p_input )
+{
+}
+
+GeneralLoader::~GeneralLoader ()
+{
+}
+
+void 
+GeneralLoader::SetTargetOverride( const std::string& p_path )
+{
+    m_targetOverride = p_path;
+}
+
+void
+GeneralLoader::SplitAndAdd( Paths& p_paths, const string& p_path )
+{
+    size_t startPos = 0;
+    size_t colonPos = p_path . find ( ':', startPos );
+    while ( colonPos != string::npos )
+    {
+        p_paths . push_back ( p_path . substr ( startPos, colonPos - startPos ) );
+        startPos = colonPos + 1;
+        colonPos = p_path . find ( ':', startPos );    
+    }
+    p_paths . push_back ( p_path . substr ( startPos ) );
+}
+
+void 
+GeneralLoader::AddSchemaIncludePath( const string& p_path )
+{
+    SplitAndAdd ( m_includePaths, p_path );
+}
+
+void 
+GeneralLoader::AddSchemaFile( const string& p_path )
+{
+    SplitAndAdd ( m_schemas, p_path );
+}
+
+rc_t 
+GeneralLoader::Run()
+{
+    bool packed;
+    rc_t rc = ReadHeader ( packed );
+    if ( rc == 0 ) 
+    {
+        DatabaseLoader loader ( m_programName, m_includePaths, m_schemas, m_targetOverride );
+        if ( packed )
+        {
+            PackedProtocolParser p;
+            rc = p . ParseEvents ( m_reader, loader );
+        }
+        else
+        {
+            UnpackedProtocolParser p;
+            rc = p . ParseEvents ( m_reader, loader );
+        }
+    
+        if ( rc != 0 && ! loader . GetDatabaseName() . empty () )
+        {
+            KDirectory* wd;
+            KDirectoryNativeDir ( & wd );
+            KDirectoryRemove ( wd, true, loader . GetDatabaseName() . c_str () );
+            KDirectoryRelease ( wd );
+        }
+    }
+    
+    return rc;
+}
+
+rc_t 
+GeneralLoader::ReadHeader ( bool& p_packed )
+{
+    struct gw_header_v1 header;
+
+    rc_t rc = m_reader . Read ( & header, sizeof header );
+    if ( rc == 0 )
+    { 
+        if ( strncmp ( header . dad . signature, GeneralLoaderSignatureString, sizeof ( header . dad . signature ) ) != 0 )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcHeader, rcCorrupt );
+        }
+        else 
+        {
+            switch ( header . dad . endian )
+            {
+            case GW_GOOD_ENDIAN:
+                if ( header . dad . version > GW_CURRENT_VERSION ) /* > comparison so it can read multiple versions */
+                {
+                    rc = RC ( rcExe, rcFile, rcReading, rcHeader, rcBadVersion );
+                }
+                else
+                {
+                    rc = 0;
+                }
+                break;
+            case GW_REVERSE_ENDIAN:
+                LogMsg ( klogErr, "general-loader event: Detected reverse endianness (not yet supported)" );
+                rc = RC ( rcExe, rcFile, rcReading, rcFormat, rcUnsupported );
+                //TODO: apply byte order correction before checking the version number
+                break;
+            default:
+                rc = RC ( rcExe, rcFile, rcReading, rcFormat, rcInvalid );
+                break;
+            }
+        }
+    }
+    
+    if ( rc == 0 && header . dad . hdr_size > sizeof header ) 
+    {   
+        rc = m_reader . Read ( header . dad . hdr_size - sizeof header );
+    }
+    
+    if ( rc == 0 )
+    {
+        p_packed = header. packing != 0;
+    }
+    
+    return rc;
+}
diff --git a/tools/general-loader/general-loader.hpp b/tools/general-loader/general-loader.hpp
new file mode 100644
index 0000000..314e782
--- /dev/null
+++ b/tools/general-loader/general-loader.hpp
@@ -0,0 +1,243 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#ifndef _sra_tools_hpp_general_loader_
+#define _sra_tools_hpp_general_loader_
+
+#include <klib/defs.h>
+
+#include <string>
+#include <vector>
+#include <map>
+
+struct KStream;
+struct VCursor;
+struct VDatabase;
+struct VDBManager;
+struct VSchema;
+
+#define GeneralLoaderSignatureString GW_SIGNATURE
+
+class GeneralLoader
+{
+public:
+    static const uint32_t MaxPackedString = 256;
+    
+public:
+    GeneralLoader ( const std :: string& p_programName, const struct KStream& p_input );
+    ~GeneralLoader ();
+    
+    void AddSchemaIncludePath( const std::string& p_path );
+    void AddSchemaFile( const std::string& p_file );
+    void SetTargetOverride( const std::string& p_path );
+    
+    rc_t Run ();
+    
+private:
+
+    typedef std::vector < std::string > Paths;
+
+private:    
+
+    class Reader
+    {
+    public:
+        Reader( const struct KStream& p_input );
+        ~Reader();
+        
+        // read into caller's buffer
+        rc_t Read( void * p_buffer, size_t p_size ); 
+        
+        // if rc == 0, there are p_size bytes available through GetBuffer until the next call to Read
+        rc_t Read( size_t p_size ); 
+        
+        const void* GetBuffer() const { return m_buffer; }
+        
+        void Align( uint8_t p_bytes = 4 );
+        
+        uint64_t GetReadCount() { return m_readCount; }
+        
+    private:
+        const struct KStream& m_input;
+        void* m_buffer;
+        size_t m_bufSize;
+        uint64_t m_readCount;
+    };
+    
+    class DatabaseLoader
+    {
+    public:
+        struct Table
+        {
+            std :: string name;
+            uint32_t databaseId; // key into Databases
+            uint32_t cursorIdx;   
+        };
+        
+        struct Column
+        {
+            std :: string name;
+            
+            uint32_t tableId;       // key into Tables
+            uint32_t cursorIdx;     // index into Cursors
+            uint32_t columnIdx;     // index in the VCursor
+            uint32_t elemBits;
+            uint32_t flagBits;
+            
+            typedef std :: map < std :: string, std :: string > Metadata;
+            Metadata metadata;
+            
+            bool IsCompressed () const { return ( flagBits & 1 ) == 1; }
+        };
+
+    public:
+        DatabaseLoader ( const std :: string& p_programName, const Paths& p_includePaths, const Paths& p_schemas, const std::string& p_dbNameOverride = std::string() );
+        ~DatabaseLoader();
+    
+        rc_t UseSchema ( const std :: string& p_file, const std :: string& p_name );
+        rc_t RemotePath ( const std :: string& p_path );
+        rc_t SoftwareName ( const std :: string& p_softwareName, const std :: string& p_version );
+        rc_t NewTable ( uint32_t p_tableId, const std :: string& p_tableName );
+        rc_t NewColumn ( uint32_t p_columnId, 
+                         uint32_t p_tableId, 
+                         uint32_t p_elemBits, 
+                         uint8_t p_flags, 
+                         const std :: string& p_columnName );
+                         
+        rc_t DBMetadataNode ( uint32_t p_objId, const std :: string& p_metadata_node, const std :: string& p_value );
+        rc_t TblMetadataNode ( uint32_t p_objId, const std :: string& p_metadata_node, const std :: string& p_value );
+        rc_t ColMetadataNode ( uint32_t p_objId, const std :: string& p_metadata_node, const std :: string& p_value );
+        
+        rc_t AddMbrDB ( uint32_t p_objId, uint32_t p_parentId, const std :: string &mbr_name, const std :: string &db_name, uint8_t p_create_mode );
+        rc_t AddMbrTbl ( uint32_t p_objId, uint32_t p_parentId, const std :: string &mbr_name, const std :: string &db_name, uint8_t p_create_mode );
+        
+        rc_t CellData    ( uint32_t p_columnId, const void* p_data, size_t p_elemCount );
+        rc_t CellDefault ( uint32_t p_columnId, const void* p_data, size_t p_elemCount );
+        rc_t NextRow ( uint32_t p_tableId );
+        rc_t MoveAhead ( uint32_t p_tableId, uint64_t p_count );
+        rc_t ErrorMessage ( const std :: string& p_text );
+        rc_t LogMessage ( const std :: string& p_text );
+        rc_t ProgressMessage ( const std :: string& p_name, uint32_t p_pid, uint32_t p_timestamp, uint32_t p_version, uint32_t p_percent );
+        rc_t OpenStream ();
+        rc_t CloseStream ();
+        
+        const std :: string& GetDatabaseName() const { return m_databaseName; }
+        const Column* GetColumn ( uint32_t p_columnId ) const; 
+        
+    private:
+        // Active Cursors
+        typedef std::vector < struct VCursor * > Cursors;
+        
+        // from TableId to Table
+        typedef std::map < uint32_t, Table > Tables; 
+        
+        // from ColumnId to Column
+        typedef std::map < uint32_t, Column > Columns; 
+        
+        // From database id to VDatabase. id == 0 for the root database.
+        typedef std::map < uint32_t, VDatabase* > Databases; 
+        
+        // From database id to parent database id 
+        typedef std::map < uint32_t, uint32_t > DatabaseToParent; 
+        
+    private:
+        rc_t MakeDatabase ( uint32_t p_id );
+        rc_t CursorWrite   ( const Column& p_col, const void* p_data, size_t p_size );
+        rc_t CursorDefault ( const Column& p_col, const void* p_data, size_t p_size );
+        rc_t SaveColumnMetadata ( const Column& p_col );
+
+    private:
+        Paths                   m_includePaths;
+        Paths                   m_schemas;
+    
+        std :: string           m_programName;
+        std :: string           m_databaseName;
+        std :: string           m_schemaName;
+        
+        std :: string           m_softwareName;
+        ver_t                   m_softwareVersion;
+    
+        Cursors                 m_cursors;
+        Tables                  m_tables;
+        Columns                 m_columns;
+        Databases               m_databases;    
+        DatabaseToParent        m_dbParents;    
+        
+        struct VDBManager*      m_mgr;
+        struct VSchema*         m_schema;
+        
+        bool                    m_databaseNameOverridden;
+    };
+
+    class ProtocolParser
+    {
+    public:
+        virtual rc_t ParseEvents ( Reader&, DatabaseLoader& ) = 0;
+        
+    protected:
+        template <typename TEvent> rc_t ReadEvent ( Reader& p_reader, TEvent& p_event );
+    };
+    
+    class UnpackedProtocolParser : public ProtocolParser
+    {
+    public:
+        virtual rc_t ParseEvents ( Reader&, DatabaseLoader& );
+    };
+    
+    class PackedProtocolParser : public ProtocolParser
+    {
+    public:
+        virtual rc_t ParseEvents ( Reader&, DatabaseLoader& );
+        
+    private:
+        // read p_dataSize bytes and use one of the decoder functions in utf8-like-int-codec.h to unpack a sequence of integer values, 
+        // stored in m_unpackingBuf as a collection of bytes
+        template < typename T_uintXX > rc_t UncompressInt ( Reader& p_reader, uint16_t p_dataSize, int ( * p_decode ) ( uint8_t const* buf_start, uint8_t const* buf_xend, T_uintXX* ret_decoded ) );
+        
+        rc_t ParseData ( Reader& p_reader, DatabaseLoader& p_dbLoader, uint32_t p_columnId, uint32_t p_dataSize );
+        
+        std::vector<uint8_t>    m_unpackingBuf;
+    };
+    
+private:    
+    GeneralLoader(const GeneralLoader&);
+    GeneralLoader& operator = ( const GeneralLoader&);
+    
+    rc_t ReadHeader ( bool& p_packed );
+    
+    void CleanUp ();
+    
+    static void SplitAndAdd( Paths& p_paths, const std::string& p_path );
+    
+private:    
+    std::string             m_programName;
+    Reader                  m_reader;
+    Paths                   m_includePaths;
+    Paths                   m_schemas;
+    std::string             m_targetOverride;
+};
+
+#endif
diff --git a/tools/general-loader/general-writer.cpp b/tools/general-loader/general-writer.cpp
new file mode 100644
index 0000000..7658597
--- /dev/null
+++ b/tools/general-loader/general-writer.cpp
@@ -0,0 +1,1172 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "general-writer.hpp"
+#include "utf8-like-int-codec.h"
+
+#include <iterator>
+#include <cstdlib>
+#include <iomanip>
+
+#include <time.h>
+#include <unistd.h>
+#include <assert.h>
+#include <string.h>
+
+#define PROGRESS_EVENT 0
+
+namespace ncbi
+{
+
+#if GW_CURRENT_VERSION <= 2
+    typedef :: gwp_1string_evt_v1 gwp_1string_evt;
+    typedef :: gwp_2string_evt_v1 gwp_2string_evt;
+    typedef :: gwp_column_evt_v1 gwp_column_evt;
+    typedef :: gwp_data_evt_v1 gwp_data_evt;
+    typedef :: gwp_1string_evt_U16_v1 gwp_1string_evt_U16;
+    typedef :: gwp_2string_evt_U16_v1 gwp_2string_evt_U16;
+    typedef :: gwp_data_evt_U16_v1 gwp_data_evt_U16;
+#else
+#error "unrecognized GW version"
+#endif
+
+    // ask the general-loader to use this when naming its output
+    void GeneralWriter :: setRemotePath ( const std :: string & remote_db )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case header_written:
+            new_state = remote_name_sent;
+            break;
+        case schema_sent:
+            new_state = remote_name_and_schema_sent;
+            break;
+        case software_name_sent:
+            new_state = remote_name_and_software_name_sent;
+            break;
+        case schema_and_software_name_sent:
+            new_state = remote_name_schema_and_software_name_sent;
+            break;
+        default:
+            throw "state violation setting remote path";
+        }
+
+        size_t str_size = remote_db . size ();
+        if ( str_size > 0x10000 )
+            throw "remote path too long";
+
+        gwp_1string_evt_U16 hdr;
+        init ( hdr, 0, evt_remote_path2 );
+        set_size ( hdr, str_size );
+        write_event ( & hdr . dad, sizeof hdr );
+        internal_write ( remote_db . data (), str_size );
+
+        state = new_state;
+    }
+
+    // tell the general-loader to use this pre-defined schema
+    void GeneralWriter :: useSchema ( const std :: string & schema_file_name,
+                                      const std :: string & schema_db_spec )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case header_written:
+            new_state = schema_sent;
+            break;
+        case remote_name_sent:
+            new_state = remote_name_and_schema_sent;
+            break;
+        case software_name_sent:
+            new_state = schema_and_software_name_sent;
+            break;
+        case remote_name_and_software_name_sent:
+            new_state = remote_name_schema_and_software_name_sent;
+            break;
+        default:
+            throw "state violation using schema";
+        }
+
+        size_t str1_size = schema_file_name . size ();
+        if ( str1_size > 0x10000 )
+            throw "schema path too long";
+
+        size_t str2_size = schema_db_spec . size ();
+        if ( str2_size > 0x10000 )
+            throw "schema spec too long";
+
+        gwp_2string_evt_U16 hdr;
+        init ( hdr, 0, evt_use_schema2 );
+        set_size1 ( hdr, str1_size );
+        set_size2 ( hdr, str2_size );
+        write_event ( & hdr . dad, sizeof hdr );
+        internal_write ( schema_file_name . data (), str1_size );
+        internal_write ( schema_db_spec . data (), str2_size );
+
+        state = new_state;
+    }
+
+    void GeneralWriter :: setSoftwareName ( const std :: string & name,
+                                            const std :: string & version )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case header_written:
+            new_state = software_name_sent;
+            break;
+        case remote_name_sent:
+            new_state = remote_name_and_software_name_sent;
+            break;
+        case schema_sent:
+            new_state = schema_and_software_name_sent;
+            break;
+        case remote_name_and_schema_sent:
+            new_state = remote_name_schema_and_software_name_sent;
+            break;
+        default:
+            throw "state violation using schema";
+        }
+
+        size_t str1_size = name . size ();
+        if ( str1_size > 0x100 )
+            throw "name too long";
+
+        size_t str2_size = version . size ();
+        if ( str2_size > 0x100 )
+            throw "version too long";
+
+        gwp_2string_evt_v1 hdr;
+        init ( hdr, 0, evt_software_name );
+        set_size1 ( hdr, str1_size );
+        set_size2 ( hdr, str2_size );
+        write_event ( & hdr . dad, sizeof hdr );
+        internal_write ( name . data (), str1_size );
+        internal_write ( version . data (), str2_size );
+
+        state = new_state;        
+    }
+
+
+    int GeneralWriter :: addTable ( const std :: string &table_name )
+    {        
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case schema_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_schema_and_software_name_sent:
+            new_state = have_table;
+            break;
+        case have_table:
+        case have_column:
+            new_state = state;
+            break;
+        default:
+            throw "state violation adding table";
+        }
+
+        // create a pair between the outer db id ( 0 ) and this table name
+        // this pair will act as an unique key of tables, whereas table_name
+        // itself can be repeated if multiple databases are in use
+        int_dbtbl tbl ( 0, table_name );
+
+        // prediction this is the index
+        int id = ( int ) tables.size() + 1;
+        if ( id > 256 )
+            throw "maximum number of tables exceeded";
+
+        // make sure we never record a table name twice under the same db
+        std :: pair < std :: map < int_dbtbl, int > :: iterator, bool > result = 
+            table_name_idx.insert ( std :: pair < int_dbtbl, int > ( tbl, id ) );
+        
+        // if first time
+        if ( result.second )
+        {
+            tables.push_back ( tbl );
+
+            size_t str_size = table_name . size ();
+            if ( str_size > 0x10000 )
+                throw "maximum table name length exceeded";
+
+            gwp_1string_evt_U16 hdr;
+            init ( hdr, id, evt_new_table2 );
+            set_size ( hdr, str_size );
+            write_event ( & hdr . dad, sizeof hdr );
+            internal_write ( table_name.data (), str_size );
+
+            state = new_state;
+        }
+        
+        // 1 based table id
+        return result.first->second;
+    }
+    
+    int GeneralWriter :: addColumn ( int table_id,
+        const std :: string &column_name, uint32_t elem_bits, uint8_t flag_bits )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case have_table:
+        case have_column:
+            new_state = have_column;
+            break;
+        default:
+            throw "state violation adding column";
+        }
+        
+        if ( table_id <= 0 || ( size_t ) table_id > tables.size () )
+            throw "Invalid table id";
+        
+        // the thing to insert into map
+        // even if the caller wants us to use integer compaction,
+        // it must be with a size we know how to use
+        if ( ( flag_bits & 1 ) != 0 )
+        {
+            switch ( elem_bits )
+            {
+            case 16:
+            case 32:
+            case 64:
+                break;
+            default:
+                flag_bits ^= 1;
+            }
+        }
+
+        int_stream stream ( table_id, column_name, elem_bits, flag_bits );
+
+        // prediction this is the index
+        int id = ( int ) streams.size() + 1;
+        if ( id > 256 )
+            throw "maximum number of columns exceeded";
+
+        // make sure we never record a column-spec twice
+        std :: pair < std :: map < int_stream, int > :: iterator, bool > result =
+            column_name_idx.insert ( std :: pair < int_stream, int > ( stream, id ) );
+        
+        // if first time
+        if ( result.second )
+        {
+            streams.push_back ( stream );
+
+            size_t str_size = column_name . size ();
+            if ( str_size > 256 )
+                throw "maximum column spec length exceeded";
+
+            // TBD - write new column stream event to stream
+            gwp_column_evt hdr;
+            init ( hdr, id, evt_new_column );
+            set_table_id ( hdr, table_id );
+            set_elem_bits ( hdr, elem_bits );
+            hdr.flag_bits = flag_bits;
+            set_name_size ( hdr, str_size );
+
+            // write header & data
+            write_event ( & hdr . dad, sizeof hdr );
+            internal_write ( column_name.data (), str_size );
+
+            state = new_state;
+        }
+        
+        // 1 based stream id
+        return result.first->second;
+    }
+
+    int GeneralWriter :: dbAddDatabase ( int db_id, const std :: string &mbr_name, 
+                                          const std :: string &db_name, uint8_t create_mode )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case schema_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_schema_and_software_name_sent:
+            new_state = have_table;
+            break;
+        case have_table:
+        case have_column:
+            new_state = state;
+            break;
+        default:
+            throw "state violation adding db";
+        }
+        
+        // zero ( 0 ) is a valid db_id
+        if ( db_id < 0 || ( size_t ) db_id > dbs.size () )
+            throw "Invalid database id";
+
+        int_dbtbl db ( db_id, db_name );
+
+        // prediction this is the index
+        int id = ( int ) dbs.size() + 1;
+        if ( id > 256 )
+            throw "maximum number of databases exceeded";
+
+        // make sure we never record a table name twice under the same db
+        std :: pair < std :: map < int_dbtbl, int > :: iterator, bool > result = 
+            db_name_idx.insert ( std :: pair < int_dbtbl, int > ( db, id ) );
+        
+        // if first time
+        if ( result.second )
+        {
+            dbs.push_back ( db );
+
+            size_t str_size = mbr_name . size ();
+            if ( str_size > 0x100 )
+                throw "maximum member name length exceeded";
+
+            str_size = db_name . size ();
+            if ( str_size > 0x100 )
+                throw "maximum db name length exceeded";
+
+            gwp_add_mbr_evt_v1 hdr;
+            init ( hdr, id, evt_add_mbr_db );
+            set_db_id ( hdr, db_id );
+            set_size1 ( hdr, mbr_name.size () );
+            set_size2 ( hdr, db_name.size () );
+            set_create_mode ( hdr, create_mode );            
+            write_event ( & hdr . dad, sizeof hdr );
+            internal_write ( mbr_name.data (), mbr_name.size () );
+            internal_write ( db_name.data (), db_name.size () );
+
+            state = new_state;
+        }
+        
+        // 1 based db id
+        return result.first->second;
+    }
+    
+    int GeneralWriter :: dbAddTable ( int db_id, const std :: string &mbr_name, 
+                                       const std :: string &table_name, uint8_t create_mode )
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case schema_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_schema_and_software_name_sent:
+            new_state = have_table;
+            break;
+        case have_table:
+        case have_column:
+            new_state = state;
+            break;
+        default:
+            throw "state violation adding db_table";
+        }
+        
+        // zero ( 0 ) is a valid db_id
+        if ( db_id < 0 || ( size_t ) db_id > dbs.size () )
+            throw "Invalid database id";
+
+        // create a pair between the outer db id ( 0 ) and this table name
+        // this pair will act as an unique key of tables, whereas table_name
+        // itself can be repeated if multiple databases are in use
+        int_dbtbl tbl ( db_id, table_name );
+
+        // prediction this is the index
+        int id = ( int ) tables.size() + 1;
+        if ( id > 256 )
+            throw "maximum number of tables exceeded";
+
+        // make sure we never record a table name twice under the same db
+        std :: pair < std :: map < int_dbtbl, int > :: iterator, bool > result = 
+            table_name_idx.insert ( std :: pair < int_dbtbl, int > ( tbl, id ) );
+        
+        // if first time
+        if ( result.second )
+        {
+            tables.push_back ( tbl );
+
+            size_t str_size = mbr_name . size ();
+            if ( str_size > 0x100 )
+                throw "maximum member name length exceeded";
+
+            str_size = table_name . size ();
+            if ( str_size > 0x100 )
+                throw "maximum table name length exceeded";
+
+            gwp_add_mbr_evt_v1 hdr;
+            init ( hdr, id, evt_add_mbr_tbl );
+            set_db_id ( hdr, db_id );
+            set_size1 ( hdr, mbr_name.size () );
+            set_size2 ( hdr, table_name.size () );
+            set_create_mode ( hdr, create_mode );
+            write_event ( & hdr . dad, sizeof hdr );
+            internal_write ( mbr_name.data (), mbr_name.size () );
+            internal_write ( table_name.data (), table_name.size () );
+
+            state = new_state;
+        }
+        
+        // 1 based table id
+        return result.first->second;
+    }
+
+ 
+    
+    void GeneralWriter :: open ()
+    {
+        stream_state new_state = uninitialized;
+
+        switch ( state )
+        {
+        case have_column:
+            new_state = opened;
+            break;
+        case opened:
+            return;
+        default:
+            throw "state violation opening stream";
+        }
+
+        gwp_evt_hdr hdr;
+        init ( hdr, 0, evt_open_stream );
+
+        // write header        
+        write_event ( & hdr, sizeof hdr );
+
+        state = new_state;
+    }
+
+    void GeneralWriter :: setDBMetadataNode ( int obj_id,
+                                            const std :: string & node_path,
+                                            const std :: string & value )
+    {
+        // zero ( 0 ) is a valid db_id
+        if ( obj_id < 0 || ( size_t ) obj_id > dbs.size () )
+            throw "Invalid database id";
+
+        size_t str1_size = node_path . size ();
+        if ( str1_size > STRING_LIMIT_16 )
+            throw "DB_path too long";
+
+        size_t str2_size = value . size ();
+        if ( str2_size > STRING_LIMIT_16 )
+            throw "value too long";
+
+        if ( str1_size <= STRING_LIMIT_8 && str2_size <= STRING_LIMIT_8 )
+        {
+            // use 8-bit sizes
+            gwp_2string_evt_v1 hdr;
+            init ( hdr, obj_id, evt_db_metadata_node );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+        else
+        {
+            // use 16-bit sizes
+            gwp_2string_evt_U16_v1 hdr;
+            init ( hdr, obj_id, evt_db_metadata_node2 );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+
+        internal_write ( node_path . data (), str1_size );
+        internal_write ( value . data (), str2_size );
+    }
+
+    void GeneralWriter :: setTblMetadataNode ( int obj_id,
+                                            const std :: string & node_path,
+                                            const std :: string & value )
+    {
+        if ( obj_id <= 0 || ( size_t ) obj_id > tables.size () )
+            throw "Invalid table id";
+
+        size_t str1_size = node_path . size ();
+        if ( str1_size > STRING_LIMIT_16 )
+            throw "tbl_path too long";
+
+        size_t str2_size = value . size ();
+        if ( str2_size > STRING_LIMIT_16 )
+            throw "value too long";
+
+        if ( str1_size <= STRING_LIMIT_8 && str2_size <= STRING_LIMIT_8 )
+        {
+            // use 8-bit sizes
+            gwp_2string_evt_v1 hdr;
+            init ( hdr, obj_id, evt_tbl_metadata_node );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+        else
+        {
+            // use 16-bit sizes
+            gwp_2string_evt_U16_v1 hdr;
+            init ( hdr, obj_id, evt_tbl_metadata_node2 );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+
+        internal_write ( node_path . data (), str1_size );
+        internal_write ( value . data (), str2_size );
+
+    }
+    void GeneralWriter :: setColMetadataNode ( int obj_id,
+                                            const std :: string & node_path,
+                                            const std :: string & value )
+    {
+        if ( obj_id <= 0 || ( size_t ) obj_id > streams.size () )
+            throw "Invalid column id";
+
+        size_t str1_size = node_path . size ();
+        if ( str1_size > STRING_LIMIT_16 )
+            throw "tbl_path too long";
+
+        size_t str2_size = value . size ();
+        if ( str2_size > STRING_LIMIT_16 )
+            throw "value too long";
+
+        if ( str1_size <= STRING_LIMIT_8 && str2_size <= STRING_LIMIT_8 )
+        {
+            // use 8-bit sizes
+            gwp_2string_evt_v1 hdr;
+            init ( hdr, obj_id, evt_col_metadata_node );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+        else
+        {
+            // use 16-bit sizes
+            gwp_2string_evt_U16_v1 hdr;
+            init ( hdr, obj_id, evt_col_metadata_node2 );
+            set_size1 ( hdr, str1_size );
+            set_size2 ( hdr, str2_size );
+            write_event ( & hdr . dad, sizeof hdr );
+        }
+
+        internal_write ( node_path . data (), str1_size );
+        internal_write ( value . data (), str2_size );
+    }
+
+    
+    void GeneralWriter :: columnDefault ( int stream_id, uint32_t elem_bits, const void *data, uint32_t elem_count )
+    {
+        switch ( state )
+        {
+        case opened:
+            break;
+        default:
+            throw "state violation setting column default";
+        }
+
+        if ( stream_id < 0 )
+            throw "Stream_id is not valid";
+        if ( stream_id > ( int ) streams.size () )
+            throw "Stream_id is out of bounds";
+
+        if ( elem_bits == 0 )
+            return;
+        
+        if ( data == 0 && elem_count != 0 )
+            throw "Invalid data ptr";
+
+        if ( elem_bits != streams [ stream_id - 1 ] . elem_bits )
+            throw "Invalid elem_bits";
+
+        size_t num_bytes = ( ( size_t ) elem_bits * elem_count + 7 ) / 8;
+        if ( num_bytes == 0 )
+        {
+            gwp_evt_hdr_v1 eh;
+            init ( eh, stream_id, evt_empty_default );
+            write_event ( & eh, sizeof eh );
+        }
+        else
+        {
+            if ( num_bytes <= 256 )
+            {
+                gwp_data_evt chunk;
+                init ( chunk, stream_id, evt_cell_default );
+                set_size ( chunk, num_bytes );
+                write_event ( & chunk . dad, sizeof chunk );
+            }
+            else if ( num_bytes <= 0x10000 )
+            {
+                gwp_data_evt_U16 chunk;
+                init ( chunk, stream_id, evt_cell_default2 );
+                set_size ( chunk, num_bytes );
+                write_event ( & chunk . dad, sizeof chunk );
+            }
+            else
+            {
+                throw "default cell-data exceeds maximum";
+            }
+            internal_write ( data, num_bytes );
+        }
+    }
+
+    template < class T >
+    int encode_int ( T val, uint8_t * start, uint8_t * end );
+
+    template <>
+    int encode_int < uint16_t > ( uint16_t val, uint8_t * start, uint8_t * end )
+    {
+        int ret = encode_uint16 ( val, start, end );
+        if ( ret > 0 )
+        {
+            uint16_t val2;
+            int ret2 = decode_uint16 ( start, start + ret, & val2 );
+            assert ( ret == ret2 && val == val2 );
+        }
+        return ret;
+    }
+
+    template <>
+    int encode_int < uint32_t > ( uint32_t val, uint8_t * start, uint8_t * end )
+    {
+        int ret = encode_uint32 ( val, start, end );
+        if ( ret > 0 )
+        {
+            uint32_t val2;
+            int ret2 = decode_uint32 ( start, start + ret, & val2 );
+            assert ( ret == ret2 && val == val2 );
+        }
+        return ret;
+    }
+
+    template <>
+    int encode_int < uint64_t > ( uint64_t val, uint8_t * start, uint8_t * end )
+    {
+        int ret = encode_uint64 ( val, start, end );
+        if ( ret > 0 )
+        {
+            uint64_t val2;
+            int ret2 = decode_uint64 ( start, start + ret, & val2 );
+            assert ( ret == ret2 && val == val2 );
+        }
+        return ret;
+    }
+
+    struct encode_result { uint32_t num_elems, num_bytes; };
+
+    const size_t bsize = 0x10000;
+
+    template < class T > static
+    encode_result encode_buffer ( uint8_t * buffer, const void * data, uint32_t first, uint32_t elem_count )
+    {
+        uint8_t * start = buffer;
+        uint8_t * end = buffer + bsize;
+        const T * input = ( const T * ) data;
+
+        uint32_t i;
+        for ( i = first; i < elem_count; ++ i )
+        {
+            int num_writ = encode_int < T > ( input [ i ], start, end );
+            if ( num_writ <= 0 )
+            {
+                if ( num_writ < 0 )
+                    throw "error encoding integer data";
+                break;
+            }
+            start += num_writ;
+        }
+
+        if ( start == buffer )
+            throw "INTERNAL ERROR: no data to encode";
+
+        encode_result rslt;
+        rslt . num_elems = i;
+        rslt . num_bytes = start - buffer;
+
+        return rslt;
+    }
+
+    void GeneralWriter :: write ( int stream_id, uint32_t elem_bits, const void *data, uint32_t elem_count )
+    {
+        switch ( state )
+        {
+        case opened:
+            break;
+        default:
+            throw "state violation writing column data";
+        }
+
+        if ( stream_id < 0 )
+            throw "Stream_id is not valid";
+        if ( stream_id > ( int ) streams.size () )
+            throw "Stream_id is out of bounds";
+
+        if ( elem_bits == 0 || elem_count == 0 )
+            return;
+        
+        if ( data == 0 )
+            throw "Invalid data ptr";
+
+        const int_stream & s = streams [ stream_id - 1 ];
+
+        if ( elem_bits != s . elem_bits )
+            throw "Invalid elem_bits";
+
+        bool compact_int = ( s . flag_bits & 1 ) != 0;
+        
+        const uint8_t * dp = ( const uint8_t * ) data;
+
+        if ( compact_int )
+        {
+            uint32_t elem;
+            encode_result rslt;
+            encode_result ( * encode ) ( uint8_t * buffer, const void * data, uint32_t first, uint32_t elem_count );
+
+            switch ( elem_bits )
+            {
+            case 16:
+                encode = encode_buffer < uint16_t >;
+                break;
+            case 32:
+                encode = encode_buffer < uint32_t >;
+                break;
+            case 64:
+                encode = encode_buffer < uint64_t >;
+                break;
+            default:
+                throw "INTERNAL ERROR: corrupt element bits";
+            }
+
+            for ( elem = 0; elem < elem_count; elem = rslt . num_elems )
+            {
+                rslt = ( * encode ) ( packing_buffer, data, elem, elem_count );
+                if ( rslt . num_bytes <= 256 )
+                {
+                    assert ( rslt . num_bytes != 0 );
+                    gwp_data_evt chunk;
+                    init ( chunk, stream_id, evt_cell_data );
+                    set_size ( chunk, rslt . num_bytes );
+                    write_event ( & chunk . dad, sizeof chunk );
+                }
+                else
+                {
+                    gwp_data_evt_U16 chunk;
+                    init ( chunk, stream_id, evt_cell_data2 );
+                    set_size ( chunk, rslt . num_bytes );
+                    write_event ( & chunk . dad, sizeof chunk );
+                }
+                internal_write ( packing_buffer, rslt . num_bytes );
+            }
+        }
+        else
+        {
+            size_t num_bytes = ( ( size_t ) elem_bits * elem_count + 7 ) / 8;
+
+            while ( num_bytes >= 0x10000 )
+            {
+                gwp_data_evt_U16 chunk;
+                init ( chunk, stream_id, evt_cell_data2 );
+                set_size ( chunk, 0x10000 );
+                write_event ( & chunk . dad, sizeof chunk );
+                internal_write ( dp, 0x10000 );
+                num_bytes -= 0x10000;
+                dp += 0x10000;
+            }
+
+            if ( num_bytes <= 256 )
+            {
+                gwp_data_evt chunk;
+                init ( chunk, stream_id, evt_cell_data );
+                set_size ( chunk, num_bytes );
+                write_event ( & chunk . dad, sizeof chunk );
+            }
+            else
+            {
+                gwp_data_evt_U16 chunk;
+                init ( chunk, stream_id, evt_cell_data2 );
+                set_size ( chunk, num_bytes );
+                write_event ( & chunk . dad, sizeof chunk );
+            }
+            
+            internal_write ( data, num_bytes );
+        }
+    }
+
+    void GeneralWriter :: nextRow ( int table_id )
+    {
+        switch ( state )
+        {
+        case opened:
+            break;
+        default:
+            throw "state violation advancing to next row";
+        }
+
+        if ( table_id < 0 || ( size_t ) table_id > tables.size () )
+            throw "Invalid table id";
+
+        gwp_evt_hdr hdr;
+        init ( hdr, table_id, evt_next_row );
+        write_event ( & hdr, sizeof hdr );
+    }
+
+
+    void GeneralWriter :: moveAhead ( int table_id, uint64_t nrows )
+    {
+        switch ( state )
+        {
+        case opened:
+            break;
+        default:
+            throw "state violation moving ahead nrows";
+        }
+
+        if ( table_id < 0 || ( size_t ) table_id > tables.size () )
+            throw "Invalid table id";
+
+        gwp_move_ahead_evt_v1 hdr;
+        init ( hdr, table_id, evt_move_ahead );
+        set_nrows ( hdr, nrows );
+        write_event ( & hdr . dad, sizeof hdr );
+    }
+
+    void GeneralWriter :: logError ( const std :: string & msg )
+    {
+        switch ( state )
+        {
+        case header_written:
+        case remote_name_sent:
+        case schema_sent:
+        case software_name_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_and_software_name_sent:
+        case schema_and_software_name_sent:
+        case remote_name_schema_and_software_name_sent:
+        case have_table:
+        case have_column:
+        case opened:
+        case error:
+            break;
+        default:
+            return;
+        }
+
+        gwp_1string_evt_U16 hdr;
+        init ( hdr, 0, evt_errmsg2 );
+
+        const char * msg_data = msg . data ();
+        size_t str_size = msg . size ();
+        if ( str_size == 0 )
+        {
+            msg_data = "ERROR: (NO MSG)";
+            str_size = strlen ( msg_data );
+        }
+        else if ( str_size > 0x10000 )
+            str_size = 0x10000;
+
+        set_size ( hdr, str_size );
+        write_event ( & hdr . dad, sizeof hdr );
+        internal_write ( msg_data, str_size );
+    }
+
+    void GeneralWriter :: logMsg ( const std :: string &msg )
+    {
+        switch ( state )
+        {
+        case header_written:
+        case remote_name_sent:
+        case schema_sent:
+        case software_name_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_and_software_name_sent:
+        case schema_and_software_name_sent:
+        case remote_name_schema_and_software_name_sent:
+        case have_table:
+        case have_column:
+        case opened:
+            break;
+        default:
+            return;
+        }
+
+        size_t str_size = msg . size ();
+        if ( str_size == 0 )
+            return;
+
+        if ( str_size > 0x10000 )
+            str_size = 0x10000;
+
+        gwp_1string_evt_U16 hdr;
+        init ( hdr, 0, evt_logmsg );
+
+        set_size ( hdr, str_size );
+        write_event ( & hdr . dad, sizeof hdr );
+        internal_write ( msg . data (), str_size );
+    }
+
+    void GeneralWriter :: progMsg ( const std :: string & name, uint32_t version,
+        uint64_t done, uint64_t total )
+    {
+        switch ( state )
+        {
+        case opened:
+            break;
+        default:
+            return;
+        }
+        
+        size_t str_size = name . size ();
+        if ( str_size == 0 )
+            throw "zero-length app-name";
+        if ( str_size > 0x100 )
+            str_size = 0x100;
+
+        // timestamp
+        time_t timestamp = time ( NULL );
+
+        if ( total == 0 )
+            throw "illegal total value: would divide by zero";
+        if ( done > total )
+            throw "illegal done value: greater than total";
+        
+        // calculate percentage done
+        double fpercent = ( double ) done / total;
+        assert ( fpercent >= 0.0 && fpercent <= 100.0 );
+        uint8_t percent = ( uint8_t ) ( fpercent * 100 );
+
+        gwp_status_evt_v1 hdr;
+        init ( hdr, 0, evt_progmsg );
+        set_pid ( hdr, pid );
+        set_version ( hdr, version );
+        set_timestamp ( hdr, ( uint32_t ) timestamp );
+        set_size ( hdr, str_size );
+        set_percent ( hdr, percent );
+
+        write_event ( &hdr . dad, sizeof hdr );
+        internal_write ( name.data (), str_size );
+    }
+
+    void GeneralWriter :: endStream ()
+    {
+        switch ( state )
+        {
+        case header_written:
+        case remote_name_sent:
+        case schema_sent:
+        case software_name_sent:
+        case remote_name_and_schema_sent:
+        case remote_name_and_software_name_sent:
+        case schema_and_software_name_sent:
+        case remote_name_schema_and_software_name_sent:
+        case have_table:
+        case have_column:
+        case opened:
+        case error:
+            break;
+        default:
+            return;
+        }
+
+        gwp_evt_hdr hdr;
+        init ( hdr, 0, evt_end_stream );
+        write_event ( & hdr, sizeof hdr );
+
+        state = closed;
+
+        flush ();
+    }
+
+    
+    // Constructors
+    GeneralWriter :: GeneralWriter ( const std :: string &out_path )
+        : out ( out_path.c_str(), std::ofstream::binary )
+        , evt_count ( 0 )
+        , byte_count ( 0 )
+        , pid ( getpid () )
+        , packing_buffer ( 0 )
+        , output_buffer ( 0 )
+        , output_bsize ( 0 )
+        , output_marker ( 0 )
+        , out_fd ( -1 )
+        , state ( uninitialized )
+    {
+        packing_buffer = new uint8_t [ bsize ];
+        writeHeader ();
+    }
+
+    
+    // Constructors
+    GeneralWriter :: GeneralWriter ( int _out_fd, size_t buffer_size )
+        : evt_count ( 0 )
+        , byte_count ( 0 )
+        , pid ( getpid () )
+        , packing_buffer ( 0 )
+        , output_buffer ( 0 )
+        , output_bsize ( buffer_size )
+        , output_marker ( 0 )
+        , out_fd ( _out_fd )
+        , state ( uninitialized )
+    {
+        packing_buffer = new uint8_t [ bsize ];
+        output_buffer = new uint8_t [ buffer_size ];
+        writeHeader ();
+    }
+    
+    GeneralWriter :: ~GeneralWriter ()
+    {
+        try
+        {
+            endStream ();
+        }
+        catch ( ... )
+        {
+        }
+
+        delete [] output_buffer;
+        delete [] packing_buffer;
+
+        output_bsize = output_marker = 0;
+        output_buffer = packing_buffer = 0;
+    }
+
+    bool GeneralWriter :: int_stream :: operator < ( const int_stream &s ) const
+    {
+        if ( table_id != s.table_id )
+            return table_id < s.table_id;
+        return column_name.compare ( s.column_name ) < 0;
+    }
+    
+    GeneralWriter :: int_stream :: int_stream ( int _table_id, const std :: string &_column_name, uint32_t _elem_bits, uint8_t _flag_bits )
+        : table_id ( _table_id )
+        , column_name ( _column_name )
+        , elem_bits ( _elem_bits )
+        , flag_bits ( _flag_bits )
+    {
+    }
+
+    bool GeneralWriter :: int_dbtbl :: operator < ( const int_dbtbl &db ) const
+    {
+        if ( db_id != db.db_id )
+            return db_id < db.db_id;
+        return obj_name.compare ( db.obj_name ) < 0;
+    }
+
+    GeneralWriter :: int_dbtbl :: int_dbtbl ( int _db_id, const std :: string &_obj_name )
+        : db_id ( _db_id )
+        , obj_name ( _obj_name )
+    {
+    }
+
+    // Private methods
+
+    uint32_t GeneralWriter :: getPid ()
+    {
+        return ( uint32_t ) pid;
+    }
+
+    void GeneralWriter :: writeHeader ()
+    {
+        :: gw_header_v1 hdr;
+        init ( hdr );
+        internal_write ( & hdr, sizeof hdr );
+        state = header_written;
+
+    }
+
+    void GeneralWriter :: flush ()
+    {
+        if ( out_fd < 0 )
+            out . flush ();
+        else
+        {
+            ssize_t num_writ;
+            for ( size_t total = 0; total < output_marker; total += num_writ )
+            {
+                num_writ = :: write ( out_fd, & output_buffer [ total ], output_marker - total );
+                if ( num_writ < 0 )
+                    throw "Error writing to fd";
+                if ( num_writ == 0 )
+                    throw "Transfer incomplete writing to fd";
+            }
+
+            output_marker = 0;
+        }
+    }
+
+    void GeneralWriter :: internal_write ( const void * data, size_t num_bytes )
+    {
+        if ( out_fd < 0 )
+        {
+            out.write ( ( const char * ) data, num_bytes );
+            byte_count += num_bytes;
+        }
+        else
+        {
+            size_t total;
+            const uint8_t * p = ( const uint8_t * ) data;
+            for ( total = 0; total < num_bytes; )
+            {
+                size_t avail = output_bsize - output_marker;
+                if ( avail == 0 )
+                {
+                    flush ();
+                    avail = output_bsize - output_marker;
+                }
+
+                size_t to_write = num_bytes - total;
+                if ( to_write > avail )
+                    to_write = avail;
+
+                assert ( to_write != 0 );
+                memmove ( & output_buffer [ output_marker ], & p [ total ], to_write );
+                output_marker += to_write;
+                total += to_write;
+            }
+
+            byte_count += total;
+        }
+    }
+
+    void GeneralWriter :: write_event ( const gwp_evt_hdr * e, size_t evt_size )
+    {
+#if PROGRESS_EVENT
+        uint64_t ec = evt_count;
+        if ( ( ec % 10000 ) == 0 )
+        {
+            if ( ( ec % 500000 ) == 0 )
+                std :: cerr << "\n%  [" << std :: setw ( 12 ) << byte_count << "] " << std :: setw ( 9 ) << ec + 1 << ' ';
+            std :: cerr << '.';
+        }
+#endif
+        ++ evt_count;
+
+        assert ( evt ( * e ) != evt_bad_event );
+        assert ( evt ( * e ) <  evt_max_id );
+
+        internal_write ( e, evt_size );
+    }
+
+}
diff --git a/tools/general-loader/general-writer.h b/tools/general-loader/general-writer.h
new file mode 100644
index 0000000..59feb3c
--- /dev/null
+++ b/tools/general-loader/general-writer.h
@@ -0,0 +1,1081 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_general_writer_
+#define _h_general_writer_
+
+#include <stdint.h>
+#include <stddef.h>
+
+#ifdef __cplusplus
+#include <string.h>
+#endif
+
+
+/*----------------------------------------------------------------------
+ * event codes
+ */
+
+enum gw_evt_id
+{
+    evt_bad_event,
+
+    evt_errmsg,                           /* convey processing error msg */
+    evt_end_stream,                       /* cleanly terminates a stream */
+
+    evt_remote_path,                      /* sets remote output path     */
+    evt_use_schema,                       /* conveys schema usage        */
+    evt_new_table,                        /* create a new table          */
+    evt_new_column,                       /* create a new column in tbl  */
+    evt_open_stream,                      /* open stream for data flow   */
+
+    evt_cell_default,                     /* set/reset cell default val  */
+    evt_cell_data,                        /* write/append data cell      */
+    evt_next_row,                         /* move to next row in table   */
+    evt_move_ahead,                       /* move ahead by N rows        */
+
+    evt_errmsg2,
+    evt_remote_path2,
+    evt_use_schema2,
+    evt_new_table2,
+    evt_cell_default2,                    /* packed default <= 64K bytes */
+    evt_cell_data2,                       /* packed data <= 64K bytes    */
+    evt_empty_default,                    /* set cell default to empty   */
+
+    /* BEGIN VERSION 2 MESSAGES */
+    evt_software_name,                    /* sets software name          */
+    evt_db_metadata_node,                    /* uses gw(p)_2string_evt_v1   */
+    evt_tbl_metadata_node,
+    evt_col_metadata_node,
+    evt_db_metadata_node2,                   /* uses gwp_2string_evt_U16    */
+    evt_tbl_metadata_node2,
+    evt_col_metadata_node2,
+
+    evt_add_mbr_db,
+    evt_add_mbr_tbl,
+
+    evt_logmsg,
+    evt_progmsg,
+
+    evt_max_id                            /* must be last                */
+};
+
+#define GW_SIGNATURE "NCBIgnld"
+#define GW_GOOD_ENDIAN 1
+#define GW_REVERSE_ENDIAN ( 1 << 24 )
+#define GW_CURRENT_VERSION 2
+
+//These are not to change
+#define STRING_LIMIT_8 0x100
+#define STRING_LIMIT_16 0x10000
+#define ID_LOWER_LIMIT 0
+#define ID_UPPER_LIMIT 255
+
+/********************************
+ * DESCRIPTION OF STREAM EVENTS *
+ ********************************
+
+ *. BYTE ORDER
+    All binary data are in origination-host-native byte order.
+    The originating host indicates its byte order in the stream header.
+    Two byte-orders are supported: little-endian and big-endian.
+
+ *. PACKING
+    The preferred mode of operation for reduction of network bandwidth
+    is "packed". In this mode, the event structures use single-byte members
+    whenever possible, and there is no word alignment within the stream.
+    In addition, events with integer data can utilize a packing algorithm
+    to reduce the bandwidth consumed when the values are typically small
+    with regard to the stated type.
+
+    Packed mode is useful from C and C++ where there is ample support
+    from the language itself. Non-packed mode is more natural for languages
+    such as Python and Java and uses word-size members within structs and
+    does not perform any integer data packing.
+
+    NB - packed mode makes use of knowing that zero-length items
+    are invalid and should not be sent, and so stores length-1 wherever
+    a length is required, thus giving a range of 1..256 rather than
+    0..255 for a single byte. The same is true for ids.
+
+ 1. STREAM HEADER
+    The stream starts with a header appropriate for the protocol
+    version in use. For version 1, use a "gw_header_v1".
+
+    Every stream header must have the standard "gw_header" as its
+    base definition. This portion presents an 8-character signature
+    to identify the type of stream, followed immediately by an integer
+    indicating originating-host byte order. The receiver must verify that
+    this value is either GW_GOOD_ENDIAN or GW_REVERSE_ENDIAN; any other
+    value means the stream is either not of this protocol or corrupt.
+    A value of GW_REVERSE_ENDIAN implies that the receiver must perform
+    byte-swapping on all word values within all events and their data.
+    This is likely to be a nearly untenable task by any but the
+    general-loader, where the latter has access to type information.
+
+    The value presented for version must be >= 1 and <= GW_CURRENT_VERSION.
+    A value of 0 must be rejected as not conforming to protocol while a
+    value > GW_CURRENT_VERSION cannot be processed.
+
+    The v1 value for "packing" currently allows for two values: 0 and 1,
+    where 0 means that no packing will be used and 1 indicates packed
+    events will be used. This affects how all subsequent events are to
+    be sent and received.
+
+ 2. SET REMOTE PATH [ OPTIONAL ]
+    In the not-packed case, use "gw_1string_evt".
+      GW_SET_ID_EVT ( & evt.dad, 0, evt_remote_path );
+      evt.sz = strlen ( path );
+    follow with the bytes in path
+      write ( path, strlen ( path ) );
+    end with 0..3 bytes of value 0 to realign stream to 4-byte boundary.
+
+    In the packed case where strlen ( path ) <= 256, use "gwp_1string_evt".
+      GWP_SET_ID_EVT ( & evt.dad, 0, evt_remote_path );
+      evt.sz = strlen ( path ) - 1;
+    follow with the bytes in path
+      write ( path, strlen ( path ) );
+
+    In the packed case where strlen ( path ) > 0x100 but <= 0x10000, use "gwp_1string_evt_U16"
+      GWP_SET_ID_EVT ( & evt.dad, 0, evt_remote_path2 );
+      evt.sz = strlen ( path ) - 1;
+    follow with the bytes in path
+      write ( path, strlen ( path ) );
+
+  MORE TO COME...
+
+ */
+
+
+/*======================================================================
+ * version 1
+ */
+
+/* gw_header
+ *  common to all versions
+ */
+struct gw_header
+{
+    char signature [ 8 ]; /* = GW_SIGNATURE                                     */
+    uint32_t endian;      /* = GW_GOOD_ENDIAN or GW_REVERSE_ENDIAN              */
+    uint32_t version;     /* 0 < version <= GW_CURRENT_VERSION                  */
+    uint32_t hdr_size;    /* the size of the entire header, including alignment */
+};
+
+/* gw_header_v1
+ *  v1 header
+ */
+struct gw_header_v1
+{
+    gw_header dad;
+    uint32_t packing;     /* 0 = no packing, 1 = byte packing */
+};
+
+
+/*----------------------------------------------------------------------
+ * full-size ( not packed ) events
+ */
+
+/* gw_evt_hdr
+ *  common header to not-packed v1 events
+ *
+ *  used as-is for events:
+ *    { evt_end_stream, evt_open_stream, evt_next_row }
+ */
+struct gw_evt_hdr_v1
+{
+    uint32_t id_evt;      /* bits 0..23 = id, bits 24..31 = event code */
+};
+
+/* gw_1string_evt_v1
+ *  event to convey a single string of information
+ *
+ *  used for events:
+ *    { evt_errmsg, evt_remote_path, evt_new_table }
+ */
+struct gw_1string_evt_v1
+{
+    gw_evt_hdr_v1 dad;    /* common header : id = 0 or new table id > 0       */
+    uint32_t sz;          /* size of string in bytes - NO trailing NUL byte   */
+ /* char str [ sz ];       * string data.                                     *
+    char align [ 0..3 ];   * ( ( 4 - sizeof str % 4 ) % 4 ) zeros to align    */
+};
+
+/* gw_2string_evt
+ *  event used to send a pair of strings
+ *
+ *  used for events:
+ *    { evt_use_schema }
+ */
+struct gw_2string_evt_v1
+{
+    gw_evt_hdr_v1 dad;    /* common header : id = 0                           */
+    uint32_t sz1;         /* size of string 1 in bytes, NO trailing NUL byte  */
+    uint32_t sz2;         /* size of string 2 in bytes, NO trailing NUL byte  */
+ /* char str [ sz1+sz2 ];  * string data.                                     *
+    char align [ 0..3 ];   * ( ( 4 - sizeof str % 4 ) % 4 ) zeros             */
+};
+
+/* gw_column_evt
+ *  event used to create a new column
+ *
+ *  used for events:
+ *    { evt_new_column }
+ */
+struct gw_column_evt_v1
+{
+    gw_evt_hdr_v1 dad;    /* common header : id = new column id > 0           */
+    uint32_t table_id;    /* id of column's table                             */
+    uint32_t elem_bits;   /* the size of each element in data type            */
+    uint32_t name_sz;     /* the size in bytes of column "name" ( spec )      */
+ /* char name [ name_sz ]; * the column name/spec.                            *
+    char align [ 0..3 ];   * ( ( 4 - sizeof name % 4 ) % 4 ) zeros            */
+};
+
+/* gw_data_evt
+ *  event used to transfer cell data
+ *
+ *  used for events:
+ *    { evt_cell_default, evt_cell_data }
+ */
+struct gw_data_evt_v1
+{
+    gw_evt_hdr_v1 dad;    /* common header : id = column id                   */
+    uint32_t elem_count;  /* the number of elements in data                   */
+ /* uint8_t data [ x ];    * event data. actual size is:                      *
+                           * ( ( elem_count * col . elem_bits ) + 7 ) / 8     *
+    char align [ 0..3 ];   * ( ( 4 - sizeof data % 4 ) % 4 ) zeros            */
+};
+
+/* gw_move_ahead_evt_v1
+ */
+struct gw_move_ahead_evt_v1
+{
+    gw_evt_hdr_v1 dad;    /* common header : id = column id                   */
+    uint32_t nrows [ 2 ]; /* the number of rows to move ahead                 */
+};
+
+struct gw_add_mbr_evt_v1
+{
+    gw_evt_hdr_v1 dad;
+    uint32_t db_id;
+    uint32_t mbr_sz;
+    uint32_t name_sz;
+    uint8_t create_mode;
+};
+
+struct gw_status_evt_v1
+{
+    gw_evt_hdr_v1 dad;
+    uint32_t version;
+    uint32_t timestamp;
+    uint32_t pid;
+    uint32_t name_sz;
+    uint32_t percent;
+};
+
+/*----------------------------------------------------------------------
+ * packed events
+ *   used for C/C++ level operations
+ */
+
+/* gwp_evt_hdr
+ *  common header to packed v1 events
+ *
+ *  given that id 0 is illegal, this structure does not allocate a
+ *  code for it, but rather stores all ids as id-1, i.e. 1..256 => 0..255.
+ *
+ *  used as-is for events:
+ *    { evt_end_stream, evt_open_stream, evt_next_row }
+ */
+struct gwp_evt_hdr_v1
+{
+    uint8_t _evt;         /* event code from enum              */
+    uint8_t _id;          /* ids 1..256 represented as 0..255  */
+};
+
+/* gwp_1string_evt
+ *  event to convey a single string of information
+ *
+ *  used for events:
+ *    { evt_errmsg, evt_remote_path, evt_new_table }
+ */
+struct gwp_1string_evt_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = 0 or new table id > 0       */
+    uint8_t sz;           /* size of string - 1 in bytes - NO trailing NUL    */
+ /* char str [ sz+1 ];     * string data                                      */
+};
+
+/* gwp_2string_evt
+ *  event used to send a pair of strings
+ *
+ *  used for events:
+ *    { evt_use_schema }
+ */
+struct gwp_2string_evt_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = 0                           */
+    uint8_t sz1;          /* size of string 1 - 1 in bytes, NO trailing NUL   */
+    uint8_t sz2;          /* size of string 2 - 1 in bytes, NO trailing NUL   */
+ /* char str[ sz1+sz2+2 ]; * string data.                                     */
+};
+
+/* gwp_column_evt
+ *  event used to create a new column
+ *
+ *  used for events:
+ *    { evt_new_column }
+ */
+struct gwp_column_evt_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = new column id > 0           */
+    uint8_t table_id;     /* id - 1 of column's table                         */
+    uint8_t elem_bits;    /* the size - 1 of each element in data type        */
+    uint8_t flag_bits;    /* bit[0] = 1 means uses integer element packing    */
+    uint8_t name_sz;      /* the size - 1 in bytes of column "name" ( spec )  */
+ /* char name [ name_sz+1 ]; the column name/spec.                            */
+};
+
+/* gwp_data_evt
+ *  event used to transfer cell data
+ *
+ *  used for events:
+ *    { evt_cell_default, evt_cell_data }
+ */
+struct gwp_data_evt_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = column id                   */
+    uint8_t sz;           /* the size - 1 of data in bytes                    */
+ /* uint8_t data [ sz+1 ]; * event data.                                      */
+};
+
+/* gwp_move_ahead_evt_v1
+ */
+struct gwp_move_ahead_evt_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = column id                   */
+    uint16_t nrows [ 4 ]; /* the number of rows to move ahead                 */
+};
+
+
+/* SPECIAL VERSIONS WITH 16-BIT SIZE FIELDS */
+
+/* gwp_1string_evt_U16
+ *  event to convey a single string of information
+ *
+ *  used for events:
+ *    { evt_errmsg2, evt_remote_path2, evt_new_table2 }
+ *
+ *  ...whenever size of string > 256
+ */
+struct gwp_1string_evt_U16_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = 0 or new table id > 0       */
+    uint16_t sz;          /* size of string - 1 in bytes - NO trailing NUL    */
+ /* char str [ sz+1 ];     * string data.                                     */
+};
+
+/* gwp_2string_evt_U16
+ *  event used to send a pair of strings
+ *
+ *  used for events:
+ *    { evt_use_schema2 }
+ *
+ *  ...whenever size of any string > 256
+ */
+struct gwp_2string_evt_U16_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = 0                           */
+    uint16_t sz1;         /* size of string 1 - 1 in bytes, NO trailing NUL   */
+    uint16_t sz2;         /* size of string 2 - 1 in bytes, NO trailing NUL   */
+ /* char str[ sz1+sz2+2 ]; * string data.                                     */
+};
+
+
+/* gwp_data_evt_16
+ *  event used to transfer cell data
+ *
+ *  used for events:
+ *    { evt_cell_default2, evt_cell_data2 }
+ */
+struct gwp_data_evt_U16_v1
+{
+    gwp_evt_hdr_v1 dad;   /* common header : id = column id                   */
+    uint16_t sz;          /* the size - 1 of data in bytes                    */
+ /* uint8_t data [ sz+1 ]; * event data.                                      */
+};
+
+struct gwp_add_mbr_evt_v1
+{
+    gwp_evt_hdr_v1 dad;
+    uint8_t db_id;
+    uint8_t mbr_sz;
+    uint8_t name_sz;
+    uint8_t create_mode;
+};
+
+struct gwp_status_evt_v1
+{
+    gwp_evt_hdr_v1 dad;
+    uint32_t version;
+    uint32_t timestamp;
+    uint32_t pid;
+    uint8_t name_sz;
+    uint8_t percent;
+};
+
+#ifdef __cplusplus
+/*======================================================================
+ * support for C++
+ */
+
+#include <string.h>
+#include <assert.h>
+
+namespace ncbi
+{
+    // gw_header
+    inline void init ( :: gw_header & hdr )
+    {
+        memmove ( hdr . signature, GW_SIGNATURE, sizeof hdr . signature );
+        hdr . endian = GW_GOOD_ENDIAN;
+        hdr . version = GW_CURRENT_VERSION;
+        hdr . hdr_size = sizeof ( :: gw_header );
+    }
+
+    inline void init ( :: gw_header & hdr, size_t hdr_size )
+    {
+        init ( hdr );
+        hdr . hdr_size = ( uint32_t ) hdr_size;
+    }
+
+    // gw_header_v1
+    inline void init ( :: gw_header_v1 & hdr )
+    { init ( hdr . dad, sizeof ( :: gw_header_v1 ) ); hdr . packing = 1; }
+
+    inline void init ( :: gw_header_v1 & hdr, const :: gw_header & dad )
+    { hdr . dad = dad; hdr . packing = 0; }
+
+
+
+    // gw_evt_hdr
+    inline void init ( :: gw_evt_hdr_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        assert ( id < 0x1000000 );
+        assert ( evt != evt_bad_event );
+        assert ( evt < evt_max_id );
+
+        hdr . id_evt = ( id & 0xFFFFFF ) | ( ( uint32_t ) evt << 24 );
+    }
+
+    inline uint32_t id ( const :: gw_evt_hdr_v1 & self )
+    { return self . id_evt & 0xFFFFFF; }
+
+    inline gw_evt_id evt ( const :: gw_evt_hdr_v1 & self )
+    { return ( gw_evt_id ) ( self . id_evt >> 24 ); }
+
+
+    // recording string size
+    inline void set_string_size ( uint32_t & sz, size_t bytes )
+    {
+        assert ( bytes != 0 );
+        assert ( sizeof bytes == 4 || ( bytes >> 32 ) == 0 );
+        sz = ( uint32_t ) bytes;
+    }
+
+    // gw_1string_evt
+    inline void init ( :: gw_1string_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    { init ( hdr . dad, id, evt ); hdr . sz = 0; }
+
+    inline void init ( :: gw_1string_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    { hdr . dad = dad; hdr . sz = 0; }
+
+    inline size_t size ( const :: gw_1string_evt_v1 & self )
+    { return self . sz; }
+
+    inline void set_size ( :: gw_1string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz, bytes ); }
+
+
+    // gw_2string_evt
+    inline void init ( :: gw_2string_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline void init ( :: gw_2string_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline size_t size1 ( const gw_2string_evt_v1 & self )
+    { return self . sz1; }
+
+    inline size_t size2 ( const gw_2string_evt_v1 & self )
+    { return self . sz2; }
+
+    inline void set_size1 ( :: gw_2string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz1, bytes ); }
+
+    inline void set_size2 ( :: gw_2string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz2, bytes ); }
+
+    // gw_column_evt
+    inline void init ( :: gw_column_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . table_id = hdr . elem_bits = hdr . name_sz = 0;
+    }
+
+    inline void init ( :: gw_column_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . table_id = hdr . elem_bits = hdr . name_sz = 0;
+    }
+
+    inline uint32_t table_id ( const :: gw_column_evt_v1 & self )
+    { return self . table_id; }
+
+    inline uint32_t elem_bits ( const :: gw_column_evt_v1 & self )
+    { return self . elem_bits; }
+
+    inline uint8_t flag_bits ( const :: gw_column_evt_v1 & self )
+    { return 0; }
+
+    inline size_t name_size ( const :: gw_column_evt_v1 & self )
+    { return self . name_sz; }
+
+    inline void set_table_id ( :: gw_column_evt_v1 & self, uint32_t table_id )
+    {
+        assert ( table_id != 0 );
+        self . table_id = table_id;
+    }
+
+    inline void set_elem_bits ( :: gw_column_evt_v1 & self, uint32_t elem_bits )
+    {
+        assert ( elem_bits != 0 );
+        self . elem_bits = elem_bits;
+    }
+
+    inline void set_name_size ( :: gw_column_evt_v1 & self, size_t name_size )
+    { set_string_size ( self . name_sz, name_size ); }
+
+
+    // gw_data_evt
+    inline void init ( :: gw_data_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    { init ( hdr . dad, id, evt ); hdr . elem_count = 0; }
+
+    inline void init ( :: gw_data_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    { hdr . dad = dad; hdr . elem_count = 0; }
+
+    inline uint32_t elem_count ( const :: gw_data_evt_v1 & self )
+    { return self . elem_count; }
+
+    inline void set_elem_count ( :: gw_data_evt_v1 & self, uint32_t elem_count )
+    {
+        assert ( elem_count != 0 );
+        self . elem_count = elem_count;
+    }
+
+    // gw_move_ahead_evt_v1
+    inline void init ( :: gw_move_ahead_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        memset ( & hdr . nrows, 0, sizeof hdr . nrows );
+    }
+
+    inline void init ( :: gw_move_ahead_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        memset ( & hdr . nrows, 0, sizeof hdr . nrows );
+    }
+
+    inline uint64_t get_nrows ( const :: gw_move_ahead_evt_v1 & self )
+    {
+        uint64_t nrows;
+        memmove ( & nrows, & self . nrows, sizeof nrows );
+        return nrows;
+    }
+
+    inline void set_nrows ( :: gw_move_ahead_evt_v1 & self, uint64_t nrows )
+    {
+        memmove ( & self . nrows, & nrows, sizeof self . nrows );
+    }
+
+    // gw_add_mbr_evt
+    inline void init ( :: gw_add_mbr_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . db_id = hdr . mbr_sz = hdr . name_sz = hdr . create_mode = 0;
+    }
+
+    inline void init ( :: gw_add_mbr_evt_v1 & hdr, const :: gw_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . db_id = hdr . mbr_sz = hdr . name_sz = hdr . create_mode = 0;
+    }
+
+    inline uint32_t db_id ( const gw_add_mbr_evt_v1 & self )
+    { return self . db_id; }
+
+    inline void set_db_id ( :: gw_add_mbr_evt_v1 & self, uint8_t db_id )
+    {
+        assert ( db_id >= 0 );
+        self . db_id = db_id;
+    }
+
+    inline size_t size1 ( const gw_add_mbr_evt_v1 & self )
+    { return ( size_t ) self . mbr_sz; }
+
+    inline size_t size2 ( const gw_add_mbr_evt_v1 & self )
+    { return ( size_t ) self . name_sz; }
+
+    inline void set_size1 ( :: gw_add_mbr_evt_v1 & self, size_t bytes )
+    {
+        set_string_size ( self . mbr_sz, bytes );
+    }
+
+    inline void set_size2 ( :: gw_add_mbr_evt_v1 & self, size_t bytes )
+    {
+        set_string_size ( self . name_sz, bytes );
+    }
+
+    inline uint8_t create_mode ( const gw_add_mbr_evt_v1 & self )
+    { return self . create_mode; }
+
+    inline void set_create_mode ( :: gw_add_mbr_evt_v1 & self, uint8_t mode )
+    {
+        self . create_mode = mode;
+    }
+
+    // gw_status_evt
+    inline void init ( :: gw_status_evt_v1 &hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . version = hdr . timestamp = hdr . pid = hdr . name_sz = hdr . percent = 0;
+    }
+
+    inline void init ( :: gw_status_evt_v1 &hdr, const :: gw_evt_hdr_v1 &dad )
+    {
+        hdr . dad = dad;
+        hdr . version = hdr . timestamp = hdr . pid = hdr . name_sz = hdr . percent = 0;
+    }
+
+    inline void set_version ( :: gw_status_evt_v1 &self, uint32_t version )
+    {
+        assert ( version > 0 );
+        self . version = version;
+    }
+
+    inline uint32_t version ( const :: gw_status_evt_v1 &self )
+    { return self . version; }
+
+    inline void set_timestamp ( :: gw_status_evt_v1 &self, uint32_t timestamp )
+    {
+        assert ( timestamp > 0 );
+        self . timestamp = timestamp;
+    }
+
+    inline uint32_t timestamp ( const :: gw_status_evt_v1 &self )
+    { return self . timestamp; }
+
+    inline void set_pid ( :: gw_status_evt_v1 &self, uint32_t pid )
+    {
+        assert ( pid > 0 );
+        self . pid = pid;
+    }
+
+    inline uint32_t pid ( const :: gw_status_evt_v1 &self )
+    { return self . pid; }
+
+    inline void set_size ( :: gw_status_evt_v1 &self, size_t bytes )
+    {
+        set_string_size ( self . name_sz, bytes );
+    }
+
+    inline size_t size ( const :: gw_status_evt_v1 &self )
+    { return ( size_t ) self . name_sz; }
+
+    inline void set_percent ( :: gw_status_evt_v1 &self, uint32_t percent )
+    {
+        self . percent = percent;
+    }
+
+    inline uint32_t percent ( const :: gw_status_evt_v1 &self )
+    { return self . percent; }
+
+    ////////// packed events //////////
+
+    // gwp_evt_hdr
+    inline void init ( :: gwp_evt_hdr_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        // allow zero, but treat as 256
+        assert ( id <= 0x100 );
+        assert ( evt != evt_bad_event );
+        assert ( evt < evt_max_id );
+
+        hdr . _evt = ( uint8_t ) evt;
+        hdr . _id = ( uint8_t ) ( id - 1 );
+    }
+
+    inline uint32_t id ( const :: gwp_evt_hdr_v1 & self )
+    { return ( uint32_t ) self . _id + 1; }
+
+    inline gw_evt_id evt ( const :: gwp_evt_hdr_v1 & self )
+    { return ( gw_evt_id ) self . _evt; }
+
+
+    // recording string size
+    inline void set_string_size ( uint8_t & sz, size_t bytes )
+    {
+        assert ( bytes != 0 );
+        assert ( bytes <= 0x100 );
+        sz = ( uint8_t ) ( bytes - 1 );
+    }
+
+    // gwp_1string_evt
+    inline void init ( :: gwp_1string_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz = 0;
+    }
+
+    inline void init ( :: gwp_1string_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz = 0;
+    }
+
+    inline size_t size ( const :: gwp_1string_evt_v1 & self )
+    { return ( size_t ) self . sz + 1; }
+
+    inline void set_size ( :: gwp_1string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz, bytes ); }
+
+
+    // gwp_2string_evt
+    inline void init ( :: gwp_2string_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline void init ( :: gwp_2string_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline size_t size1 ( const gwp_2string_evt_v1 & self )
+    { return ( size_t ) self . sz1 + 1; }
+
+    inline size_t size2 ( const gwp_2string_evt_v1 & self )
+    { return ( size_t ) self . sz2 + 1; }
+
+    inline void set_size1 ( :: gwp_2string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz1, bytes ); }
+
+    inline void set_size2 ( :: gwp_2string_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz2, bytes ); }
+
+
+    // gwp_column_evt
+    inline void init ( :: gwp_column_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . table_id = hdr . elem_bits = hdr . name_sz = 0;
+    }
+
+    inline void init ( :: gwp_column_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . table_id = hdr . elem_bits = hdr . name_sz = 0;
+    }
+
+    inline uint32_t table_id ( const :: gwp_column_evt_v1 & self )
+    { return ( uint32_t ) self . table_id + 1; }
+
+    inline uint32_t elem_bits ( const :: gwp_column_evt_v1 & self )
+    { return ( uint32_t ) self . elem_bits + 1; }
+
+    inline uint8_t flag_bits ( const :: gwp_column_evt_v1 & self )
+    { return self . flag_bits; }
+
+    inline size_t name_size ( const :: gwp_column_evt_v1 & self )
+    { return ( size_t ) self . name_sz + 1; }
+
+    inline void set_table_id ( :: gwp_column_evt_v1 & self, uint32_t table_id )
+    {
+        assert ( table_id != 0 );
+        assert ( table_id <= 0x100 );
+        self . table_id = ( uint8_t ) ( table_id - 1 );
+    }
+
+    inline void set_elem_bits ( :: gwp_column_evt_v1 & self, uint32_t elem_bits )
+    {
+        assert ( elem_bits != 0 );
+        assert ( elem_bits <= 0x100 );
+        self . elem_bits = ( uint8_t ) ( elem_bits - 1 );
+    }
+
+    inline void set_name_size ( :: gwp_column_evt_v1 & self, size_t name_size )
+    { set_string_size ( self . name_sz, name_size ); }
+
+
+    // gwp_data_evt
+    inline void init ( :: gwp_data_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz = 0;
+    }
+
+    inline void init ( :: gwp_data_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz = 0;
+    }
+
+    inline uint32_t size ( const :: gwp_data_evt_v1 & self )
+    { return ( uint32_t ) self . sz + 1; }
+
+    inline void set_size ( :: gwp_data_evt_v1 & self, size_t bytes )
+    { set_string_size ( self . sz, bytes ); }
+
+
+    // gwp_move_ahead_evt_v1
+    inline void init ( :: gwp_move_ahead_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        memset ( & hdr . nrows, 0, sizeof hdr . nrows );
+    }
+
+    inline void init ( :: gwp_move_ahead_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        memset ( & hdr . nrows, 0, sizeof hdr . nrows );
+    }
+
+    inline uint64_t get_nrows ( const :: gwp_move_ahead_evt_v1 & self )
+    {
+        uint64_t nrows;
+        memmove ( & nrows, & self . nrows, sizeof nrows );
+        return nrows;
+    }
+
+    inline void set_nrows ( :: gwp_move_ahead_evt_v1 & self, uint64_t nrows )
+    {
+        memmove ( & self . nrows, & nrows, sizeof self . nrows );
+    }
+
+
+    // recording string size
+    inline void set_string_size ( uint16_t & sz, size_t bytes )
+    {
+        assert ( bytes != 0 );
+        assert ( bytes <= 0x10000 );
+        sz = ( uint16_t ) ( bytes - 1 );
+    }
+
+    // gwp_1string_evt_U16
+    inline void init ( :: gwp_1string_evt_U16_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz = 0;
+    }
+
+    inline void init ( :: gwp_1string_evt_U16_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz = 0;
+    }
+
+    inline size_t size ( const :: gwp_1string_evt_U16_v1 & self )
+    { return ( size_t ) self . sz + 1; }
+
+    inline void set_size ( :: gwp_1string_evt_U16_v1 & self, size_t bytes )
+    { set_string_size ( self . sz, bytes ); }
+
+
+    // gwp_2string_evt
+    inline void init ( :: gwp_2string_evt_U16_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline void init ( :: gwp_2string_evt_U16_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz1 = hdr . sz2 = 0;
+    }
+
+    inline size_t size1 ( const gwp_2string_evt_U16_v1 & self )
+    { return ( size_t ) self . sz1 + 1; }
+
+    inline size_t size2 ( const gwp_2string_evt_U16_v1 & self )
+    { return ( size_t ) self . sz2 + 1; }
+
+    inline void set_size1 ( :: gwp_2string_evt_U16_v1 & self, size_t bytes )
+    { set_string_size ( self . sz1, bytes ); }
+
+    inline void set_size2 ( :: gwp_2string_evt_U16_v1 & self, size_t bytes )
+    { set_string_size ( self . sz2, bytes ); }
+
+
+    // gwp_data_evt
+    inline void init ( :: gwp_data_evt_U16_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . sz = 0;
+    }
+
+    inline void init ( :: gwp_data_evt_U16_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . sz = 0;
+    }
+
+    inline uint32_t size ( const :: gwp_data_evt_U16_v1 & self )
+    { return ( uint32_t ) self . sz + 1; }
+
+    inline void set_size ( :: gwp_data_evt_U16_v1 & self, size_t bytes )
+    { set_string_size ( self . sz, bytes ); }
+
+
+    // gwp_add_mbr_evt
+    inline void init ( :: gwp_add_mbr_evt_v1 & hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . db_id = hdr . mbr_sz = hdr . name_sz = hdr . create_mode = 0;
+    }
+
+    inline void init ( :: gwp_add_mbr_evt_v1 & hdr, const :: gwp_evt_hdr_v1 & dad )
+    {
+        hdr . dad = dad;
+        hdr . db_id = hdr . mbr_sz = hdr . name_sz = hdr . create_mode = 0;
+    }
+
+    inline uint8_t db_id ( const gwp_add_mbr_evt_v1 & self )
+    { return self . db_id; }
+
+
+    inline void set_db_id ( :: gwp_add_mbr_evt_v1 & self, uint8_t db_id )
+    {
+        assert ( db_id >= 0 );
+        self . db_id = db_id;
+    }
+
+    inline size_t size1 ( const gwp_add_mbr_evt_v1 & self )
+    { return ( size_t ) self . mbr_sz + 1; }
+
+    inline size_t size2 ( const gwp_add_mbr_evt_v1 & self )
+    { return ( size_t ) self . name_sz + 1; }
+
+    inline void set_size1 ( :: gwp_add_mbr_evt_v1 & self, size_t bytes )
+    {
+        set_string_size ( self . mbr_sz, bytes );
+    }
+
+    inline void set_size2 ( :: gwp_add_mbr_evt_v1 & self, size_t bytes )
+    {
+        set_string_size ( self . name_sz, bytes );
+    }
+
+    inline uint8_t create_mode ( const gwp_add_mbr_evt_v1 & self )
+    { return self . create_mode; }
+
+    inline void set_create_mode ( :: gwp_add_mbr_evt_v1 & self, uint8_t mode )
+    {
+        self . create_mode = mode;
+    }
+
+    // gwp_status_evt
+    inline void init ( :: gwp_status_evt_v1 &hdr, uint32_t id, gw_evt_id evt )
+    {
+        init ( hdr . dad, id, evt );
+        hdr . version = hdr . timestamp  = 0;
+        hdr . name_sz = hdr . percent = 0;
+    }
+
+    inline void init ( :: gwp_status_evt_v1 &hdr, const :: gwp_evt_hdr_v1 &dad )
+    {
+        hdr . dad = dad;
+        hdr . version = hdr . timestamp = 0;
+        hdr . name_sz = hdr . percent = 0;
+    }
+
+    inline void set_pid ( :: gwp_status_evt_v1 &self, int pid )
+    {
+        assert ( pid > 0 );
+        self . pid = ( uint32_t ) pid;
+    }
+
+    inline uint32_t pid ( const :: gwp_status_evt_v1 &self )
+    { return self . pid; }
+
+
+    inline void set_version ( :: gwp_status_evt_v1 &self, uint32_t version )
+    {
+        assert ( version != 0 );
+        self . version = version;
+    }
+
+    inline uint32_t version ( const :: gwp_status_evt_v1 &self )
+    { return self . version; }
+
+    inline void set_timestamp ( :: gwp_status_evt_v1 &self, uint32_t timestamp )
+    {
+        assert ( timestamp != 0 );
+        self . timestamp = timestamp;
+    }
+
+    inline uint32_t timestamp ( const :: gwp_status_evt_v1 &self )
+    { return self . timestamp; }
+
+    inline void set_size ( :: gwp_status_evt_v1 &self, size_t bytes )
+    {
+        set_string_size ( self . name_sz, bytes );
+    }
+
+    inline size_t size ( const :: gwp_status_evt_v1 &self )
+    { return ( size_t ) self . name_sz + 1; }
+
+    inline void set_percent ( :: gwp_status_evt_v1 &self, uint32_t percent )
+    {
+        self . percent = percent;
+    }
+
+    inline uint32_t percent ( const :: gwp_status_evt_v1 &self )
+    { return self . percent; }
+
+}
+#endif
+
+
+#endif /*_h_general_writer_*/
diff --git a/tools/general-loader/general-writer.hpp b/tools/general-loader/general-writer.hpp
new file mode 100644
index 0000000..5c98ebd
--- /dev/null
+++ b/tools/general-loader/general-writer.hpp
@@ -0,0 +1,210 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _hpp_general_writer_
+#define _hpp_general_writer_
+
+#ifndef _h_general_writer_
+#include "general-writer.h"
+#endif
+
+#include <iostream>
+#include <string>
+#include <stdint.h>
+#include <vector>
+#include <fstream>
+#include <map>
+
+#include <string.h>
+
+namespace ncbi
+{
+#if GW_CURRENT_VERSION <= 2
+    typedef :: gwp_evt_hdr_v1 gwp_evt_hdr;
+#else
+#error "unrecognized GW version"
+#endif
+
+    class GeneralWriter
+    {
+    public:
+
+        // ask the general-loader to use this when naming its output
+        void setRemotePath ( const std :: string & remote_db );
+
+        void setSoftwareName ( const std :: string & name,
+                               const std :: string & version );
+
+        // tell the general-loader to use this pre-defined schema
+        void useSchema ( const std :: string & schema_file_name,
+                         const std :: string & schema_db_spec );
+
+        // add a new table
+        // the table-id is returned
+        int addTable ( const std :: string &table_name );
+
+        // add a column to an existing table
+        // the column-id is returned
+        int addColumn ( int table_id, const std :: string &column_name, uint32_t elem_bits, uint8_t flags = 0 );
+
+        // when the column is known to have integer data, use this method
+        // it will utilize payload packing for reduced bandwidth
+        inline int addIntegerColumn ( int table_id, const std :: string &column_name, uint32_t elem_bits )
+        { return addColumn ( table_id, column_name, elem_bits, 1 ); }
+
+        int dbAddDatabase ( int db_id, const std :: string &mbr_name, 
+                             const std :: string &db_name, uint8_t create_mode );
+
+        int dbAddTable ( int db_id, const std :: string &mbr_name, 
+                             const std :: string &tbl_name, uint8_t create_mode );
+
+        // ensure there are atleast one table and one column
+        // set GeneralWriter to open state
+        // write out open_stream event header
+        void open ();
+
+        // add or set metadata on a specific object
+        // where obj_id == 0 => outer database, and
+        // any other positive id means the database, table or column
+        void setDBMetadataNode ( int obj_id,
+                               const std :: string & node_path,
+                               const std :: string & value );
+        void setTblMetadataNode ( int obj_id,
+                               const std :: string & node_path,
+                               const std :: string & value );
+        void setColMetadataNode ( int obj_id,
+                               const std :: string & node_path,
+                               const std :: string & value );
+
+        // generates a chunk of cell data
+        // MUST be entire default value in one event
+        void columnDefault ( int stream_id, uint32_t elem_bits, const void *data, uint32_t elem_count );
+
+        // generate a chunk of cell data
+        // may be repeated as often as necessary to complete a single cell's data
+        void write ( int stream_id, uint32_t elem_bits, const void *data, uint32_t elem_count );
+
+        // commit and close current row, move to next row
+        void nextRow ( int table_id );
+
+        // commit and close current row, move ahead by nrows
+        void moveAhead ( int table_id, uint64_t nrows );
+
+        // indicate some sort of exception
+        void logError ( const std :: string & msg );
+
+        // XML logging for general-loader
+        void logMsg ( const std :: string &msg );
+
+        // indicate progress
+        void progMsg ( const std :: string &name, 
+                       uint32_t version, uint64_t done, uint64_t total );
+
+        // generates an end event
+        // puts object into state that will reject any further transmissions
+        void endStream ();
+
+        // out_fd writes to an open file descriptor ( generally stdout )
+        // out_path initializes output stream for writing to a file
+        GeneralWriter ( int out_fd, size_t buffer_size = 32 * 1024 );
+        GeneralWriter ( const std :: string & out_path );
+
+        // output stream is flushed and closed
+        ~ GeneralWriter ();
+
+    private:
+
+        void writeHeader ();
+        void internal_write ( const void *data, size_t num_bytes );
+        void write_event ( const gwp_evt_hdr * evt, size_t evt_size );
+        void flush ();
+        uint32_t getPid ();
+
+        struct int_stream
+        {
+            bool operator < ( const int_stream &s ) const;
+            int_stream ( int table_id, const std :: string &column_name, uint32_t elem_bits, uint8_t flag_bits );
+
+            int table_id;
+            std :: string column_name;
+            uint32_t elem_bits;
+            uint8_t flag_bits;
+        };
+
+        struct int_dbtbl
+        {
+            bool operator < ( const int_dbtbl &db ) const;
+            int_dbtbl ( int db_id, const std :: string &obj_name );
+
+            int db_id;
+            std :: string obj_name;
+        };
+
+        std :: ofstream out;
+
+        std :: map < int_dbtbl, int > db_name_idx;
+        std :: map < int_dbtbl, int > table_name_idx;
+        std :: map < int_stream, int > column_name_idx;
+
+        std :: vector < int_stream > streams;
+        std :: vector < int_dbtbl > tables;
+        std :: vector < int_dbtbl > dbs;
+
+        uint64_t evt_count;
+        uint64_t byte_count;
+
+        int pid;
+
+        uint8_t * packing_buffer;
+
+        uint8_t * output_buffer;
+        size_t output_bsize;
+        size_t output_marker;
+
+        int out_fd;
+
+        enum stream_state
+        {
+            uninitialized,
+            header_written,
+            remote_name_sent,
+            schema_sent,
+            software_name_sent,
+            remote_name_and_schema_sent,
+            remote_name_and_software_name_sent,
+            schema_and_software_name_sent,
+            remote_name_schema_and_software_name_sent,
+            have_table,
+            have_column,
+            opened,
+            closed,
+            error
+        };
+        stream_state state;
+    };
+}
+
+#endif // _hpp_general_writer_
diff --git a/tools/general-loader/gw-dumper.cpp b/tools/general-loader/gw-dumper.cpp
new file mode 100644
index 0000000..9525317
--- /dev/null
+++ b/tools/general-loader/gw-dumper.cpp
@@ -0,0 +1,1785 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "general-writer.h"
+#include "utf8-like-int-codec.h"
+
+#include <kfs/defs.h>
+
+#include <iostream>
+#include <vector>
+
+#include <stdio.h>
+#include <string.h>
+#include <byteswap.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+using namespace ncbi;
+
+namespace gw_dump
+{
+    static bool display;
+    static uint32_t verbose;
+    static uint64_t event_num;
+    static uint64_t jump_event;
+    static uint64_t end_event;
+    static uint64_t foffset;
+
+    struct tbl_entry
+    {
+        tbl_entry ( const std :: string & _name )
+            : row_id ( 1 )
+            , member_name ( _name )
+            , tbl_name ( _name )
+        {
+        }
+
+        tbl_entry ( const std :: string & _member_name, const std :: string & _tbl_name )
+            : row_id ( 1 )
+            , member_name ( _member_name )
+            , tbl_name ( _tbl_name )
+        {
+        }
+
+        int64_t row_id;
+        std :: string member_name;
+        std :: string tbl_name;
+    };
+
+    static std :: vector < tbl_entry > tbl_entries;
+
+    struct db_entry
+    {
+        db_entry ( const std :: string & _member_name, const std :: string & _db_name )
+            : row_id ( 1 )
+            , member_name ( _member_name )
+            , db_name ( _db_name )
+        {
+        }
+
+        int64_t row_id;
+        std :: string member_name;
+        std :: string db_name;
+    };
+
+    static std :: vector < db_entry > db_entries;
+
+
+    struct col_entry
+    {
+        col_entry ( uint32_t _table_id, const std :: string & name, uint32_t _elem_bits, uint8_t _flag_bits = 0 )
+            : table_id ( _table_id )
+            , spec ( name )
+            , elem_bits ( _elem_bits )
+            , flag_bits ( _flag_bits )
+        {
+        }
+
+        ~ col_entry () {}
+
+        uint32_t table_id;
+        std :: string spec;
+        uint32_t elem_bits;
+        uint8_t flag_bits;
+    };
+    static std :: vector < col_entry > col_entries;
+
+    static
+    size_t readFILE ( void * buffer, size_t elem_size, size_t elem_count, FILE * in )
+    {
+        size_t num_read = fread ( buffer, elem_size, elem_count, in );
+        foffset += num_read * elem_size;
+        return num_read;
+    }
+
+    /* read_1string
+     */
+    template < class T > static
+    char * read_1string ( const T & eh, FILE * in )
+    {
+        size_t string_size = size ( eh );
+        char * string_buffer = new char [ string_size ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size, in );
+        if ( num_read != string_size )
+        {
+            delete [] string_buffer;
+            throw "failed to read string data";
+        }
+
+        return string_buffer;
+    }
+
+    template <>
+    char * read_1string < :: gw_1string_evt_v1 > ( const :: gw_1string_evt_v1 & eh, FILE * in )
+    {
+        size_t string_size_uint32 = ( size ( eh ) + 3 ) / 4;
+        uint32_t * string_buffer = new uint32_t [ string_size_uint32 ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size_uint32, in );
+        if ( num_read != string_size_uint32 )
+        {
+            delete [] string_buffer;
+            throw "failed to read string data";
+        }
+
+        return ( char * ) string_buffer;
+    }
+
+    template <>
+    char * read_1string < :: gw_status_evt_v1 > ( const :: gw_status_evt_v1 & eh, FILE * in )
+    {
+        size_t string_size_uint32 = ( size ( eh ) + 3 ) / 4;
+        uint32_t * string_buffer = new uint32_t [ string_size_uint32 ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size_uint32, in );
+        if ( num_read != string_size_uint32 )
+        {
+            delete [] string_buffer;
+            throw "failed to read string data";
+        }
+
+        return ( char * ) string_buffer;
+    }
+
+    /* whack_1string
+     */
+    template < class T > static
+    void whack_1string ( const T & eh, char * string_buffer )
+    {
+        delete [] string_buffer;
+    }
+
+    template <>
+    void whack_1string < :: gw_1string_evt_v1 > ( const :: gw_1string_evt_v1 & eh, char * string_buffer )
+    {
+        uint32_t * buffer = ( uint32_t * ) string_buffer;
+        delete [] buffer;
+    }
+
+    /* read_2string
+     */
+    template < class T > static
+    char * read_2string ( const T & eh, FILE * in )
+    {
+        size_t string_size = size1 ( eh ) + size2 ( eh );
+        char * string_buffer = new char [ string_size ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size, in );
+        if ( num_read != string_size )
+        {
+            delete [] string_buffer;
+            throw "failed to read dual string data";
+        }
+
+        return string_buffer;
+    }
+
+    template <>
+    char * read_2string < :: gw_2string_evt_v1 > ( const :: gw_2string_evt_v1 & eh, FILE * in )
+    {
+        size_t string_size_uint32 = ( size1 ( eh ) + size2 ( eh ) + 3 ) / 4;
+        uint32_t * string_buffer = new uint32_t [ string_size_uint32 ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size_uint32, in );
+        if ( num_read != string_size_uint32 )
+        {
+            delete [] string_buffer;
+            throw "failed to read dual string data";
+        }
+
+        return ( char * ) string_buffer;
+    }
+
+    /* whack_2string
+     */
+    template < class T > static
+    void whack_2string ( const T & eh, char * string_buffer )
+    {
+        delete [] string_buffer;
+    }
+
+    template <>
+    void whack_2string < :: gw_2string_evt_v1 > ( const :: gw_2string_evt_v1 & eh, char * string_buffer )
+    {
+        uint32_t * buffer = ( uint32_t * ) string_buffer;
+        delete [] buffer;
+    }
+
+    /* read_colname
+     */
+    template < class T > static
+    char * read_colname ( const T & eh, FILE * in )
+    {
+        size_t string_size = name_size ( eh );
+        char * string_buffer = new char [ string_size ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size, in );
+        if ( num_read != string_size )
+        {
+            delete [] string_buffer;
+            throw "failed to read column name";
+        }
+
+        return string_buffer;
+    }
+
+    template <>
+    char * read_colname < :: gw_column_evt_v1 > ( const :: gw_column_evt_v1 & eh, FILE * in )
+    {
+        size_t string_size_uint32 = ( name_size ( eh ) + 3 ) / 4;
+        uint32_t * string_buffer = new uint32_t [ string_size_uint32 ];
+        size_t num_read = readFILE ( string_buffer, sizeof string_buffer [ 0 ], string_size_uint32, in );
+        if ( num_read != string_size_uint32 )
+        {
+            delete [] string_buffer;
+            throw "failed to read column name";
+        }
+
+        return ( char * ) string_buffer;
+    }
+
+    /* whack_colname
+     */
+    template < class T > static
+    void whack_colname ( const T & eh, char * string_buffer )
+    {
+        delete [] string_buffer;
+    }
+
+    template <>
+    void whack_colname < :: gw_column_evt_v1 > ( const :: gw_column_evt_v1 & eh, char * string_buffer )
+    {
+        uint32_t * buffer = ( uint32_t * ) string_buffer;
+        delete [] buffer;
+    }
+
+
+    /* check_move_ahead
+     */
+    template < class T > static
+    void check_move_ahead ( const T & eh )
+    {
+        if ( id ( eh . dad ) == 0 )
+            throw "bad table id within move-ahead event (null)";
+        if ( id ( eh . dad ) > tbl_entries . size () )
+            throw "bad table id within move-ahead event";
+    }
+
+    /* dump_move_ahead
+     */
+    template < class D, class T > static
+    void dump_move_ahead ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( eh . nrows, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read move-ahead event";
+
+        check_move_ahead ( eh );
+
+        // advance row-id
+        tbl_entry & te = tbl_entries [ id ( eh . dad ) - 1 ];
+        te . row_id += get_nrows ( eh );
+
+        if ( display )
+        {
+            const std :: string & tbl_name = te . tbl_name;
+
+            std :: cout
+                << event_num << ": move-ahead\n"
+                << "  table_id = " << id ( eh . dad ) << " ( \"" << tbl_name << "\" )\n"
+                << "  nrows = " << get_nrows ( eh ) << '\n'
+                << "  row_id = " << te . row_id << '\n'
+                ;
+        }
+    }
+
+
+    /* check_next_row
+     *  all:
+     *    0 < id <= count(tbls)
+     */
+    template < class T > static
+    void check_next_row ( const T & eh )
+    {
+        if ( id ( eh ) == 0 )
+            throw "bad table id within next-row event (null)";
+        if ( id ( eh ) > tbl_entries . size () )
+            throw "bad table id within next-row event";
+    }
+
+    /* dump_next_row
+     */
+    template < class T > static
+    void dump_next_row ( FILE * in, const T & eh )
+    {
+        check_next_row ( eh );
+
+        // advance row-id
+        tbl_entry & te = tbl_entries [ id ( eh ) - 1 ];
+        ++ te . row_id;
+
+        if ( display )
+        {
+            const std :: string & tbl_name = te . tbl_name;
+
+            std :: cout
+                << event_num << ": next-row\n"
+                << "  table_id = " << id ( eh ) << " ( \"" << tbl_name << "\" )\n"
+                << "  row_id = " << te . row_id << '\n'
+                ;
+        }
+    }
+
+    /* check_empty_default
+     */
+    template < class T > static
+    void check_empty_default ( const T & eh )
+    {
+        if ( id ( eh ) == 0 )
+            throw "bad cell event id (null)";
+        if ( id ( eh ) > col_entries . size () )
+            throw "bad cell event id";
+    }
+
+    /* dump_empty_default
+     */
+    template < class T > static
+    void dump_empty_default ( FILE * in, const T & eh )
+    {
+        check_empty_default ( eh );
+
+        if ( display )
+        {
+            const col_entry & entry = col_entries [ id ( eh ) - 1 ];
+            const std :: string & tbl_name = tbl_entries [ entry . table_id - 1 ] . tbl_name;
+
+            std :: cout
+                << event_num << ": cell-default\n"
+                << "  stream_id = " << id ( eh ) << " ( " << tbl_name << " . " << entry . spec << " )\n"
+                << "  elem_bits = " << entry . elem_bits << '\n'
+                << "  elem_count = 0 ( empty )\n"
+                ;
+        }
+    }
+
+
+    /* check_cell_event
+     *  all:
+     *    0 < id <= count ( columns )
+     */
+    template < class T > static
+    void check_cell_event ( const T & eh )
+    {
+        if ( id ( eh . dad ) == 0 )
+            throw "bad cell event id (null)";
+        if ( id ( eh . dad ) > col_entries . size () )
+            throw "bad cell event id";
+    }
+
+    /* check_int_packing
+     *  deeply check contents for adherance to protocol
+     */
+    template < class T >
+    int decode_int ( const uint8_t * start, const uint8_t * end, T * decoded );
+
+    template <>
+    int decode_int < uint16_t > ( const uint8_t * start, const uint8_t * end, uint16_t * decoded )
+    {
+        return decode_uint16 ( start, end, decoded );
+    }
+
+    template <>
+    int decode_int < uint32_t > ( const uint8_t * start, const uint8_t * end, uint32_t * decoded )
+    {
+        return decode_uint32 ( start, end, decoded );
+    }
+
+    template <>
+    int decode_int < uint64_t > ( const uint8_t * start, const uint8_t * end, uint64_t * decoded )
+    {
+        return decode_uint64 ( start, end, decoded );
+    }
+
+    template < class T > static
+    size_t check_int_packing ( const uint8_t * data_buffer, size_t data_size )
+    {
+        const uint8_t * start = data_buffer;
+        const uint8_t * end = data_buffer + data_size;
+
+        size_t unpacked_size;
+        for ( unpacked_size = 0; start < end; unpacked_size += sizeof ( T ) )
+        {
+            T decoded;
+            int num_read = decode_int < T > ( start, end, & decoded );
+            if ( num_read <= 0 )
+            {
+                switch ( num_read )
+                {
+                case CODEC_INSUFFICIENT_BUFFER:
+                    throw "truncated data in packed integer buffer";
+                case CODEC_INVALID_FORMAT:
+                    throw "corrupt data in packed integer buffer";
+                case CODEC_UNKNOWN_ERROR:
+                    throw "unknown error in packed integer buffer";
+                default:
+                    throw "INTERNAL ERROR: decode_uintXX returned invalid error code";
+                }
+            }
+            start += num_read;
+        }
+
+        return unpacked_size;
+    }
+
+
+    /* dump_cell_event
+     */
+    template < class D, class T > static
+    void dump_cell_event ( FILE * in, const D & e, const char * type )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read cell event";
+
+        check_cell_event ( eh );
+
+        size_t data_size = size ( eh );
+        uint8_t * data_buffer = new uint8_t [ data_size ];
+        num_read = readFILE ( data_buffer, sizeof data_buffer [ 0 ], data_size, in );
+        if ( num_read != data_size )
+        {
+            delete [] data_buffer;
+            throw "failed to read cell data";
+        }
+
+        bool packed_int = false;
+        size_t unpacked_size = data_size;
+        const col_entry & entry = col_entries [ id ( eh . dad ) - 1 ];
+
+        if ( ( entry . flag_bits & 1 ) != 0 )
+        {
+            size_t data_size = size ( eh );
+
+            switch ( entry . elem_bits )
+            {
+            case 16:
+                unpacked_size = check_int_packing < uint16_t > ( data_buffer, data_size );
+                break;
+            case 32:
+                unpacked_size = check_int_packing < uint32_t > ( data_buffer, data_size );
+                break;
+            case 64:
+                unpacked_size = check_int_packing < uint64_t > ( data_buffer, data_size );
+                break;
+            default:
+                throw "bad element size for packed integer";
+            }
+
+            packed_int = true;
+        }
+
+        if ( display )
+        {
+            const std :: string & tbl_name = tbl_entries [ entry . table_id - 1 ] . tbl_name;
+
+            std :: cout
+                << event_num << ": cell-" << type << '\n'
+                << "  stream_id = " << id ( eh . dad ) << " ( " << tbl_name << " . " << entry . spec << " )\n"
+                << "  elem_bits = " << entry . elem_bits << '\n'
+                ;
+            if ( packed_int )
+            {
+                std :: cout
+                    << "  elem_count = " << ( unpacked_size * 8 ) / entry . elem_bits
+                    << " ( " << unpacked_size << " bytes, " << data_size << " packed )\n"
+                    ;
+            }
+            else
+            {
+                std :: cout
+                    << "  elem_count = " << ( data_size * 8 ) / entry . elem_bits << " ( " << data_size << " bytes )\n"
+                    ;
+            }
+        }
+
+        delete [] data_buffer;
+    }
+
+    template <>
+    void dump_cell_event < gw_evt_hdr_v1, gw_data_evt_v1 > ( FILE * in, const gw_evt_hdr_v1 & e, const char * type )
+    {
+        gw_data_evt_v1 eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . elem_count, sizeof eh - sizeof ( gw_evt_hdr_v1 ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read cell event";
+
+        check_cell_event ( eh );
+
+        const col_entry & entry = col_entries [ id ( eh . dad ) - 1 ];
+
+        size_t data_size_uint32 = ( ( uint64_t ) entry . elem_bits * elem_count ( eh ) + 31 ) / 32;
+        uint32_t * data_buffer = new uint32_t [ data_size_uint32 ];
+        num_read = readFILE ( data_buffer, sizeof data_buffer [ 0 ], data_size_uint32, in );
+        if ( num_read != data_size_uint32 )
+        {
+            delete [] data_buffer;
+            throw "failed to read cell data";
+        }
+
+        if ( display )
+        {
+            const std :: string & tbl_name = tbl_entries [ entry . table_id - 1 ] . tbl_name;
+
+            std :: cout
+                << event_num << ": cell-" << type << '\n'
+                << "  stream_id = " << id ( eh . dad ) << " ( " << tbl_name << " . " << entry . spec << " )\n"
+                << "  elem_bits = " << entry . elem_bits << '\n'
+                << "  elem_count = " << elem_count ( eh ) << '\n'
+                ;
+        }
+
+        delete [] data_buffer;
+    }
+
+
+    /* check_open_stream
+     */
+    static
+    void check_open_stream ( const gw_evt_hdr_v1 & eh )
+    {
+        if ( id ( eh ) != 0 )
+            throw "non-zero id within open-stream event";
+    }
+
+    static
+    void check_open_stream ( const gwp_evt_hdr_v1 & eh )
+    {
+    }
+
+
+    /* dump_open_stream
+     */
+    template < class T > static
+    void dump_open_stream ( FILE * in, const T & eh )
+    {
+        check_open_stream ( eh );
+
+        if ( display )
+        {
+            std :: cout
+                << event_num << ": open-stream\n"
+                ;
+        }
+    }
+
+
+    /* check_new_column
+     *  all:
+     *    id == count ( columns ) + 1
+     *    0 < table_id <= count ( tbls )
+     *    length ( name-spec ) != 0
+     *  packed:
+     *    flags in { 0, 1 }
+     */
+    static
+    void check_new_column ( const gw_column_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) == 0 )
+            throw "bad column/stream id";
+        if ( ( size_t ) id ( eh . dad ) <= col_entries . size () )
+            throw "column id already specified";
+        if ( ( size_t ) id ( eh . dad ) - 1 > col_entries . size () )
+            throw "column id out of order";
+        if ( table_id ( eh ) == 0 )
+            throw "bad column table-id (null)";
+        if ( table_id ( eh ) > tbl_entries . size () )
+            throw "bad column table-id";
+        if ( name_size ( eh ) == 0 )
+            throw "empty column name";
+    }
+
+    static
+    void check_new_column ( const gwp_column_evt_v1 & eh )
+    {
+        if ( ( size_t ) id ( eh . dad ) <= col_entries . size () )
+            throw "column id already specified";
+        if ( ( size_t ) id ( eh . dad ) - 1 > col_entries . size () )
+            throw "column id out of order";
+        if ( table_id ( eh ) == 0 )
+            throw "bad column table-id (null)";
+        if ( table_id ( eh ) > tbl_entries . size () )
+            throw "bad column table-id";
+        if ( name_size ( eh ) == 0 )
+            throw "empty column name";
+
+        if ( ( eh . flag_bits & 0xFE ) != 0 )
+            throw "uninitialized flag_bits";
+    }
+
+
+    /* dump_new_column
+     */
+    template < class D, class T > static
+    void dump_new_column ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . table_id, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read new-column event";
+
+        check_new_column ( eh );
+
+        char * string_buffer = read_colname ( eh, in );
+        std :: string name ( string_buffer, name_size ( eh ) );
+        col_entries . push_back ( col_entry ( table_id ( eh ), name, elem_bits ( eh ), flag_bits ( eh ) ) );
+
+        if ( display )
+        {
+            const std :: string & tbl_name = tbl_entries [ table_id ( eh ) - 1 ] . tbl_name;
+
+            std :: cout
+                << event_num << ": new-column\n"
+                << "  table_id = " << table_id ( eh ) << " ( \"" << tbl_name << "\" )\n"
+                << "  column_name [ " << name_size ( eh ) << " ] = \"" << name << "\"\n"
+                ;
+        }
+
+        whack_colname ( eh, string_buffer );
+    }
+
+    /* check_new_table
+     *  all:
+     *    id == count ( tbls ) + 1
+     *    length ( name ) != 0
+     */
+    template < class T > static
+    void check_new_table ( const T & eh )
+    {
+        if ( id ( eh . dad ) == 0 )
+            throw "bad table id";
+        if ( ( size_t ) id ( eh . dad ) <= tbl_entries . size () )
+            throw "table id already specified";
+        if ( ( size_t ) id ( eh . dad ) - 1 > tbl_entries . size () )
+            throw "table id out of order";
+        if ( size ( eh ) == 0 )
+            throw "empty table name";
+    }
+
+    /* dump_new_table
+     */
+    template < class D, class T > static
+    void dump_new_table ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read new-table event";
+
+        check_new_table ( eh );
+
+        char * string_buffer = read_1string ( eh, in );
+        std :: string name ( string_buffer, size ( eh ) );
+        tbl_entries . push_back ( tbl_entry ( name ) );
+
+        if ( display )
+        {
+            std :: cout
+                << event_num << ": new-table\n"
+                << "  table_name [ " << size ( eh ) << " ] = \"" << name << "\"\n"
+                ;
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* check_use_schema
+     *  non-packed:
+     *    id == 0
+     *  all:
+     *    length ( schema-path ) != 0
+     *    length ( schema-spec ) != 0
+     */
+    template < class T > static
+    void check_use_schema ( const T & eh )
+    {
+        if ( size1 ( eh ) == 0 )
+            throw "empty schema file path";
+        if ( size2 ( eh ) == 0 )
+            throw "empty schema spec";
+    }
+
+    template < >
+    void check_use_schema < gw_2string_evt_v1 > ( const gw_2string_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "non-zero table id";
+        if ( size1 ( eh ) == 0 )
+            throw "empty schema file path";
+        if ( size2 ( eh ) == 0 )
+            throw "empty schema spec";
+    }
+
+    /* dump_use_schema
+     */
+    template < class D, class T > static
+    void dump_use_schema ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz1, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read use-schema event";
+
+        check_use_schema ( eh );
+
+        char * string_buffer = read_2string ( eh, in );
+
+        if ( display )
+        {
+            std :: string schema_file_name ( string_buffer, size1 ( eh ) );
+            std :: string schema_db_spec ( & string_buffer [ size1 ( eh ) ], size2 ( eh ) );
+            std :: cout
+                << event_num << ": use-schema\n"
+                << "  schema_file_name [ " << size1 ( eh ) << " ] = \"" << schema_file_name << "\"\n"
+                << "  schema_db_spec [ " << size2 ( eh ) << " ] = \"" << schema_db_spec << "\"\n"
+                ;
+        }
+
+        whack_2string ( eh, string_buffer );
+    }
+
+    /* check_software_name
+     *  non-packed:
+     *    id == 0
+     *  all:
+     *    length ( schema-path ) != 0
+     *    length ( schema-spec ) != 0
+     */
+
+    void check_vers_component ( const char * vers, const char * end, long num, unsigned long max, char term )
+    {
+        if ( vers == end )
+            throw "bad version";
+        if ( * end != 0 && * end != term )
+            throw "bad version";
+        if ( num < 0 || num > max )
+            throw "bad version";
+    }
+
+    void check_vers ( const char * vers )
+    {
+        char * end;
+        long num = strtol ( vers, & end, 10 );
+        check_vers_component ( vers, end, num, 255, '.' );
+        if ( * end == '.' )
+        {
+            vers = end + 1;
+            num = strtol ( vers, & end, 10 );
+            check_vers_component ( vers, end, num, 255, '.' );
+            if ( * end == '.' )
+            {
+                vers = end + 1;
+                num = strtol ( vers, & end, 10 );
+                check_vers_component ( vers, end, num, 0xFFFF, 0 );
+            }
+        }
+    }
+
+    template < class T > static
+    void check_software_name ( const T & eh )
+    {
+        if ( size1 ( eh ) == 0 )
+            throw "empty software name";
+        if ( size2 ( eh ) == 0 )
+            throw "empty version";
+    }
+
+    template < >
+    void check_software_name < gw_2string_evt_v1 > ( const gw_2string_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "non-zero table id";
+        if ( size1 ( eh ) == 0 )
+            throw "empty software name";
+        if ( size2 ( eh ) == 0 )
+            throw "empty version";
+    }
+
+    /* dump_software_name
+     */
+    template < class D, class T > static
+    void dump_software_name ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz1, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read software_name event";
+
+        check_software_name ( eh );
+
+        char * string_buffer = read_2string ( eh, in );
+        std :: string software_name ( string_buffer, size1 ( eh ) );
+        std :: string version ( & string_buffer [ size1 ( eh ) ], size2 ( eh ) );
+
+        check_vers ( version . c_str () );
+
+        if ( display )
+        {
+            std :: cout
+                << event_num << ": software-name\n"
+                << "  software_name [ " << size1 ( eh ) << " ] = \"" << software_name << "\"\n"
+                << "  version [ " << size2 ( eh ) << " ] = \"" << version << "\"\n"
+                ;
+        }
+
+        whack_2string ( eh, string_buffer );
+    }
+
+    /* check_metadata_node
+     *
+     */
+    template < class T > static
+    void check_metadata_node ( const T & eh )
+    {
+        if ( size1 ( eh ) == 0 )
+            throw "empty metadata node";
+        if ( size2 ( eh ) == 0 )
+            throw "empty value";
+    }
+
+    template <>
+    void check_metadata_node < gw_2string_evt_v1 > ( const gw_2string_evt_v1 & eh )
+    {
+        if ( size1 ( eh ) == 0 )
+            throw "empty metadata node";
+        if ( size2 ( eh ) == 0 )
+            throw "empty value";
+    }
+
+    /* dump_metadata_node
+     */
+    template < class D, class T > static
+    void dump_metadata_node ( FILE * in, const D & e )
+    {        
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz1, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read metadata_node event";
+
+        check_metadata_node ( eh );
+
+        char *string_buffer = read_2string ( eh, in );
+        std :: string node_path ( string_buffer, size1 ( eh ) );
+        std :: string value ( & string_buffer [ size1 ( eh ) ], size2 ( eh ) );
+
+        if ( display )
+        {
+            std :: cout 
+                << event_num << ": metadata-node\n"
+                << "  metadata_node [ " << size1 ( eh ) << " ] = \"" << node_path << "\"\n"
+                << "  value [ " << size2 ( eh ) << " ] = \"" << value << "\"\n";
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* check_add_mbr
+     *
+     */
+    template < class T > static
+    void check_add_mbr ( const T & eh )
+    {
+        if ( db_id ( eh ) < 0 || db_id ( eh ) > db_entries . size () )
+             throw "invalid database id";
+        if ( size1 ( eh ) == 0 )
+            throw "empty member node";
+        if ( size2 ( eh ) == 0 )
+            throw "empty value";
+        switch ( create_mode ( eh ) & kcmValueMask )
+        {
+            // only allowed mode values
+            // or throw an exception
+        case kcmOpen:
+        case kcmInit:
+        case kcmCreate:
+            break;
+        default:
+            throw "invalid create mode";
+        }
+        if ( ( create_mode ( eh ) & ( kcmBitMask & ~ kcmMD5 & ~ kcmParents ) ) != 0 )
+            throw "invalid create mode";
+    }
+
+    template <>
+    void check_add_mbr < gw_add_mbr_evt_v1 > ( const gw_add_mbr_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "non-zero table id";
+        if ( db_id ( eh ) < 0 || db_id ( eh ) > db_entries . size () )
+             throw "invalid database id";
+        if ( size1 ( eh ) == 0 )
+            throw "empty member name";
+        if ( size2 ( eh ) == 0 )
+            throw "empty db/tbl name";
+        switch ( create_mode ( eh ) & kcmValueMask )
+        {
+            // only allowed mode values
+            // or throw an exception
+        case kcmOpen:
+        case kcmInit:
+        case kcmCreate:
+            break;
+        default:
+            throw "invalid create mode";
+        }
+        if ( ( create_mode ( eh ) & ( kcmBitMask & ~ kcmMD5 & ~ kcmParents ) ) != 0 )
+            throw "invalid create mode";
+    }
+
+    /* dump_add_mbr
+     */
+    template < class D, class T > static
+    void dump_add_mbr ( FILE * in, const D & e )
+    {        
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . db_id, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read add_mbr event";
+
+        check_add_mbr ( eh );
+
+        uint32_t dbid = db_id ( eh );
+        char *string_buffer = read_2string ( eh, in );
+        std :: string member_name ( string_buffer, size1 ( eh ) );
+        std :: string db_tbl_name ( & string_buffer [ size1 ( eh ) ], size2 ( eh ) );
+        uint8_t cmode = create_mode ( eh ); 
+
+        switch ( evt ( eh . dad ) )
+        {
+        case evt_add_mbr_db:
+            db_entries . push_back ( db_entry ( member_name, db_tbl_name ) );
+            break;
+        case evt_add_mbr_tbl:
+            tbl_entries . push_back ( tbl_entry ( member_name, db_tbl_name ) );
+            break;
+        default:
+            throw "logic error";
+        }
+
+        if ( display )
+        {
+            std :: cout 
+                << event_num << ": add-member\n"
+                << "  db_id [ " << dbid << " ]\n"
+                << "  add_mbr  [ " << size1 ( eh ) << " ] = \"" << member_name << "\"\n"
+                << "  db/tbl  [ " << size2 ( eh ) << " ] = \"" << db_tbl_name << "\"\n"
+                << "  create_mode  [ "
+                << ( uint32_t ) cmode
+                << " ] ( ";
+            switch ( cmode & kcmValueMask )
+            {
+            case kcmOpen:
+                std :: cout << "kcmOpen";
+                break;
+            case kcmInit:
+                std :: cout << "kcmInit";
+                break;
+            case kcmCreate:
+                std :: cout << "kcmCreate";
+                break;
+            }
+            if ( ( cmode & kcmParents ) != 0 )
+                std :: cout << ", kcmParents";
+            if ( ( cmode & kcmMD5 ) != 0 )
+                std :: cout << ", kcmMD5";
+            std :: cout << " )\n";
+        }
+
+        whack_2string ( eh, string_buffer );
+    }
+
+    /* check_remote_path
+     *  non-packed:
+     *    id == 0
+     *  all:
+     *    length ( remote-path ) != 0
+     */
+    template < class T > static
+    void check_remote_path ( const T & eh )
+    {
+        if ( size ( eh ) == 0 )
+            throw "empty remote path";
+    }
+
+    template <>
+    void check_remote_path < gw_1string_evt_v1 > ( const gw_1string_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "non-zero table id";
+        if ( size ( eh ) == 0 )
+            throw "empty remote path";
+    }
+
+    /* dump_remote_path
+     */
+    template < class D, class T > static
+    void dump_remote_path ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read remote-path event";
+
+        check_remote_path ( eh );
+
+        char * string_buffer = read_1string ( eh, in );
+
+        if ( display )
+        {
+            std :: string path ( string_buffer, size ( eh ) );
+            std :: cout
+                << event_num << ": remote-path\n"
+                << "  remote_db_name [ " << size ( eh ) << " ] = \"" << path << "\"\n"
+                ;
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* check_end_stream
+     *  non-packed:
+     *    id == 0
+     */
+    static
+    void check_end_stream ( const gw_evt_hdr_v1 & eh )
+    {
+        if ( id ( eh ) != 0 )
+            throw "non-zero id within end-stream event";
+    }
+
+    static
+    void check_end_stream ( const gwp_evt_hdr_v1 & eh )
+    {
+    }
+
+    /* dump_end_stream
+     */
+    template < class T > static
+    bool dump_end_stream ( FILE * in, const T & eh )
+    {
+        check_end_stream ( eh );
+        if ( display )
+        {
+            std :: cout
+                << "END\n"
+                ;
+        }
+        return false;
+    }
+
+    /* check_errmsg
+     *  non-packed
+     *    id == 0
+     *  all:
+     *    length ( msg ) != 0
+     */
+    template < class T > static
+    void check_errmsg ( const T & eh )
+    {
+        if ( size ( eh ) == 0 )
+            throw "empty error message";
+    }
+
+    template <>
+    void check_errmsg < gw_1string_evt_v1 > ( const gw_1string_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "bad error-message id ( should be 0 )";
+        if ( size ( eh ) == 0 )
+            throw "empty error message";
+    }
+
+    /* dump_errmsg
+     */
+    template < class D, class T > static
+    void dump_errmsg ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read error-message event";
+
+        check_errmsg ( eh );
+
+        char * string_buffer = read_1string ( eh, in );
+
+        if ( display )
+        {
+            std :: string msg ( string_buffer, size ( eh ) );
+
+            std :: cout
+                << event_num << ": error-message\n"
+                << "  msg [ " << size ( eh ) << " ] = \"" << msg << "\"\n"
+                ;
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* check_logmsg
+     *  non-packed
+     *    id == 0
+     *  all:
+     *    length ( msg ) != 0
+     */
+    template < class T > static
+    void check_logmsg ( const T & eh )
+    {
+        if ( size ( eh ) == 0 )
+            throw "empty log message";
+    }
+
+    template <>
+    void check_logmsg < gw_1string_evt_v1 > ( const gw_1string_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "bad log-message id ( should be 0 )";
+        if ( size ( eh ) == 0 )
+            throw "empty log message";
+    }
+
+    /* dump_logmsg
+     */
+    template < class D, class T > static
+    void dump_logmsg ( FILE * in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & eh . sz, sizeof eh - sizeof ( D ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read log-message event";
+
+        check_logmsg ( eh );
+
+        char * string_buffer = read_1string ( eh, in );
+
+        if ( display )
+        {
+            std :: string msg ( string_buffer, size ( eh ) );
+
+            std :: cout
+                << event_num << ": log-message\n"
+                << "  msg [ " << size ( eh ) << " ] = \"" << msg << "\"\n"
+                ;
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* check_progmsg
+     *  non-packed
+     *    id == 0
+     *  all:
+     *    length ( msg ) != 0
+     *    pid != 0 
+     *    timestamp > 0
+     *    version > 0 
+     *    percent > 0 && < 100
+     */
+    template < class T > static
+    void check_progmsg ( const T & eh )
+    {
+        if ( size ( eh ) == 0 )
+            throw "empty prog message";
+        if ( pid ( eh ) == 0 )
+            throw "invalid pid";
+        if ( timestamp ( eh ) == 0 )
+            throw "empty timestamp";
+        if ( version ( eh ) == 0 )
+            throw "invalid version number";
+        if ( percent ( eh ) < 0 || percent ( eh ) > 100 )
+            throw "invalid percent";
+    }
+
+    template <>
+    void check_progmsg < gw_status_evt_v1 > ( const gw_status_evt_v1 & eh )
+    {
+        if ( id ( eh . dad ) != 0 )
+            throw "bad prog-message id ( should be 0 )";
+        if ( size ( eh ) == 0 )
+            throw "empty prog message";
+        if ( pid ( eh ) == 0 )
+            throw "invlaid pid";
+        if ( timestamp ( eh ) == 0 )
+            throw "empty timestamp";
+        if ( version ( eh ) == 0 )
+            throw "invalid version number";
+        if ( percent ( eh ) < 0 || percent ( eh ) > 100 )
+            throw "invalid percent";
+    }
+
+    /* dump-progmsg
+     */
+    template < class D, class T > static
+    void dump_progmsg ( FILE *in, const D & e )
+    {
+        T eh;
+        init ( eh, e );
+
+        size_t num_read = readFILE ( & ( & eh . dad ) [ 1 ], sizeof eh - sizeof eh . dad, 1, in );
+        if ( num_read != 1 )
+            throw "failed to read prog-message event";
+
+        check_progmsg ( eh );
+
+        char *string_buffer = read_1string ( eh, in );
+        std :: string app_name ( string_buffer, size ( eh ) );
+        uint32_t _pid = pid ( eh );
+        uint32_t _timestamp = timestamp ( eh );
+        uint32_t _version = version ( eh );
+        uint32_t _percent = percent ( eh );
+
+        if ( display )
+        {
+            time_t ts = ( time_t ) _timestamp;
+            char time_str [ 256 ];
+            asctime_r ( localtime ( & ts ), time_str );
+            size_t len = strlen ( time_str );
+            while ( len > 0 && time_str [ len - 1 ] == '\n' )
+                time_str [ -- len ] = 0;
+
+            std :: cout 
+                << event_num << ": prog-msg\n"
+                << "  app [ " << app_name << " ] \n"
+                << "  message [  proccessed " << _percent << "% ] \n"
+                << "  pid [ " << _pid << " ]\n"
+                << "  timestamp [ " << time_str << " ( " << _timestamp << " ) ] \n"
+                << "  version [ " << ( _version >> 24 ) << '.' << ( ( _version >> 16 ) & 0xFF ) << '.' << ( _version & 0xFFFF ) << " ] \n"
+                << "  percent [ " << _percent << " ]\n ";
+        }
+
+        whack_1string ( eh, string_buffer );
+    }
+
+    /* dump_v1_event
+     *  the events are not packed
+     */
+    static
+    bool dump_v1_event ( FILE * in )
+    {
+        if ( jump_event == event_num )
+            display = true;
+        else if ( end_event == event_num )
+            display = false;
+
+        gw_evt_hdr_v1 e;
+        memset ( & e, 0, sizeof e );
+
+        size_t num_read = readFILE ( & e, sizeof e, 1, in );
+        if ( num_read != 1 )
+        {
+            int ch = fgetc ( in );
+            if ( ch == EOF )
+                throw "EOF before end-stream";
+
+            throw "failed to read event";
+        }
+        switch ( evt ( e ) )
+        {
+        case evt_bad_event:
+            throw "illegal event id - possibly block of zeros";
+        case evt_errmsg:
+            dump_errmsg < gw_evt_hdr_v1, gw_1string_evt_v1 > ( in, e );
+            break;
+        case evt_end_stream:
+            return dump_end_stream ( in, e );
+        case evt_remote_path:
+            dump_remote_path < gw_evt_hdr_v1, gw_1string_evt_v1 > ( in, e );
+            break;
+        case evt_use_schema:
+            dump_use_schema < gw_evt_hdr_v1, gw_2string_evt_v1 > ( in, e );
+            break;
+        case evt_new_table:
+            dump_new_table < gw_evt_hdr_v1, gw_1string_evt_v1 > ( in, e );
+            break;
+        case evt_new_column:
+            dump_new_column < gw_evt_hdr_v1, gw_column_evt_v1 > ( in, e );
+            break;
+        case evt_open_stream:
+            dump_open_stream ( in, e );
+            break;
+        case evt_cell_default:
+            dump_cell_event < gw_evt_hdr_v1, gw_data_evt_v1 > ( in, e, "default" );
+            break;
+        case evt_cell_data:
+            dump_cell_event < gw_evt_hdr_v1, gw_data_evt_v1 > ( in, e, "data" );
+            break;
+        case evt_next_row:
+            dump_next_row ( in, e );
+            break;
+        case evt_move_ahead:
+            dump_move_ahead < gw_evt_hdr_v1, gw_move_ahead_evt_v1 > ( in, e );
+            break;
+        case evt_errmsg2:
+        case evt_remote_path2:
+        case evt_use_schema2:
+        case evt_new_table2:
+        case evt_cell_default2:
+        case evt_cell_data2:
+            throw "packed event id within non-packed stream";
+        case evt_empty_default:
+            dump_empty_default < gw_evt_hdr_v1 > ( in, e );
+            break;
+
+            // add in new message handlers for version 2
+        case evt_software_name:
+            dump_software_name < gw_evt_hdr_v1, gw_2string_evt_v1 > ( in, e );
+            break;
+        case evt_db_metadata_node:
+            dump_metadata_node < gw_evt_hdr_v1, gw_2string_evt_v1 > ( in, e );
+            break;
+        case evt_tbl_metadata_node:
+            dump_metadata_node < gw_evt_hdr_v1, gw_2string_evt_v1 > ( in, e );
+            break;
+        case evt_col_metadata_node:
+            dump_metadata_node < gw_evt_hdr_v1, gw_2string_evt_v1 > ( in, e );
+            break;
+        case evt_db_metadata_node2:
+        case evt_tbl_metadata_node2:
+        case evt_col_metadata_node2:
+            throw "packed event id within non-packed stream";
+        case evt_add_mbr_db:
+            dump_add_mbr < gw_evt_hdr_v1, gw_add_mbr_evt_v1 > ( in, e );
+            break;
+        case evt_add_mbr_tbl:
+            dump_add_mbr < gw_evt_hdr_v1, gw_add_mbr_evt_v1 > ( in, e );
+            break;
+
+        case evt_logmsg:
+            dump_logmsg < gw_evt_hdr_v1, gw_1string_evt_v1 > ( in, e );
+            break;
+        case evt_progmsg:
+            dump_progmsg < gw_evt_hdr_v1, gw_status_evt_v1 > ( in, e );
+            break;
+
+        default:
+            throw "unrecognized event id";
+        }
+        return true;
+    }
+
+    /* dump_v1_packed_event
+     *  the events are all packed
+     */
+    static
+    bool dump_v1_packed_event ( FILE * in )
+    {
+        if ( jump_event == event_num )
+            display = true;
+        else if ( end_event == event_num )
+            display = false;
+
+        gwp_evt_hdr_v1 e;
+        memset ( & e, 0, sizeof e );
+
+        size_t num_read = readFILE ( & e, sizeof e, 1, in );
+        if ( num_read != 1 )
+        {
+            int ch = fgetc ( in );
+            if ( ch == EOF )
+                throw "EOF before end-stream";
+
+            throw "failed to read event";
+        }
+        switch ( evt ( e ) )
+        {
+        case evt_bad_event:
+            throw "illegal event id - possibly block of zeros";
+        case evt_errmsg:
+            dump_errmsg < gwp_evt_hdr_v1, gwp_1string_evt_v1 > ( in, e );
+            break;
+        case evt_end_stream:
+            return dump_end_stream ( in, e );
+        case evt_remote_path:
+            dump_remote_path < gwp_evt_hdr_v1, gwp_1string_evt_v1 > ( in, e );
+            break;
+        case evt_use_schema:
+            dump_use_schema < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_new_table:
+            dump_new_table < gwp_evt_hdr_v1, gwp_1string_evt_v1 > ( in, e );
+            break;
+        case evt_new_column:
+            dump_new_column < gwp_evt_hdr_v1, gwp_column_evt_v1 > ( in, e );
+            break;
+        case evt_open_stream:
+            dump_open_stream ( in, e );
+            break;
+        case evt_cell_default:
+            dump_cell_event < gwp_evt_hdr_v1, gwp_data_evt_v1 > ( in, e, "default" );
+            break;
+        case evt_cell_data:
+            dump_cell_event < gwp_evt_hdr_v1, gwp_data_evt_v1 > ( in, e, "data" );
+            break;
+        case evt_next_row:
+            dump_next_row ( in, e );
+            break;
+        case evt_move_ahead:
+            dump_move_ahead < gwp_evt_hdr_v1, gwp_move_ahead_evt_v1 > ( in, e );
+            break;
+        case evt_errmsg2:
+            dump_errmsg < gwp_evt_hdr_v1, gwp_1string_evt_U16_v1 > ( in, e );
+            break;
+        case evt_remote_path2:
+            dump_remote_path < gwp_evt_hdr_v1, gwp_1string_evt_U16_v1 > ( in, e );
+            break;
+        case evt_use_schema2:
+            dump_use_schema < gwp_evt_hdr_v1, gwp_2string_evt_U16_v1 > ( in, e );
+            break;
+        case evt_new_table2:
+            dump_new_table < gwp_evt_hdr_v1, gwp_1string_evt_U16_v1 > ( in, e );
+            break;
+        case evt_cell_default2:
+            dump_cell_event < gwp_evt_hdr_v1, gwp_data_evt_U16_v1 > ( in, e, "default" );
+            break;
+        case evt_cell_data2:
+            dump_cell_event < gwp_evt_hdr_v1, gwp_data_evt_U16_v1 > ( in, e, "data" );
+            break;
+        case evt_empty_default:
+            dump_empty_default < gwp_evt_hdr_v1 > ( in, e );
+            break;
+
+            // add in new message handlers for version 2
+        case evt_software_name:
+            dump_software_name < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_db_metadata_node:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_tbl_metadata_node:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_col_metadata_node:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_db_metadata_node2:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_tbl_metadata_node2:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_col_metadata_node2:
+            dump_metadata_node < gwp_evt_hdr_v1, gwp_2string_evt_v1 > ( in, e );
+            break;
+        case evt_add_mbr_db:
+            dump_add_mbr < gwp_evt_hdr_v1, gwp_add_mbr_evt_v1 > ( in, e );
+            break;
+        case evt_add_mbr_tbl:
+            dump_add_mbr < gwp_evt_hdr_v1, gwp_add_mbr_evt_v1 > ( in, e );
+            break;
+        case evt_logmsg:
+            dump_logmsg < gwp_evt_hdr_v1, gwp_1string_evt_U16_v1 > ( in, e );
+            break;
+        case evt_progmsg:
+            dump_progmsg < gwp_evt_hdr_v1, gwp_status_evt_v1 > ( in, e );
+            break;
+
+        default:
+            throw "unrecognized packed event id";
+        }
+        return true;
+    }
+
+    static
+    void check_v1_header ( const gw_header_v1 & hdr )
+    {
+        if ( hdr . packing > 1 )
+            throw "bad packing spec";
+    }
+
+    static
+    void dump_v1_header ( FILE * in, const gw_header & dad, bool & packed )
+    {
+        gw_header_v1 hdr;
+        init ( hdr, dad );
+
+        size_t num_read = readFILE ( & hdr . packing, sizeof hdr - sizeof ( gw_header ), 1, in );
+        if ( num_read != 1 )
+            throw "failed to read v1 header";
+
+        check_v1_header ( hdr );
+
+        if ( hdr . packing )
+            packed = true;
+
+        if ( display )
+        {
+            std :: cout
+                << "header: version " << hdr . dad . version << '\n'
+                << "  hdr_size = " << hdr . dad . hdr_size << '\n'
+                << "  packing = " << hdr . packing << '\n'
+                ;
+        }
+    }
+
+    static
+    void check_header ( const gw_header & hdr )
+    {
+        if ( memcmp ( hdr . signature, GW_SIGNATURE, sizeof hdr . signature ) != 0 )
+            throw "bad header signature";
+        if ( hdr . endian != GW_GOOD_ENDIAN )
+        {
+            if ( hdr . endian != GW_REVERSE_ENDIAN )
+                throw "bad header byte order";
+            throw "reversed header byte order";
+        }
+        if ( hdr . version < 1 )
+            throw "bad header version";
+        if ( hdr . version > GW_CURRENT_VERSION )
+            throw "unknown header version";
+    }
+
+    static
+    uint32_t dump_header ( FILE * in, bool & packed )
+    {
+        gw_header hdr;
+        size_t num_read = readFILE ( & hdr, sizeof hdr, 1, in );
+        if ( num_read != 1 )
+            throw "failed to read header";
+
+        check_header ( hdr );
+
+        switch ( hdr . version )
+        {
+        case 1:
+        case 2:
+            dump_v1_header ( in, hdr, packed );
+            break;
+        default:
+            throw "UNIMPLEMENTED: missing new version dumper";
+        }
+        return hdr . version;
+    }
+
+    static
+    void dump ( FILE * in )
+    {
+        foffset = 0;
+
+        bool packed = false;
+        uint32_t version = dump_header ( in, packed );
+
+        event_num = 1;
+        switch ( version )
+        {
+        case 1:
+        case 2:
+
+            if ( packed )
+            {
+                while ( dump_v1_packed_event ( in ) )
+                    ++ event_num;
+            }
+            else
+            {
+                while ( dump_v1_event ( in ) )
+                    ++ event_num;
+            }
+            break;
+        }
+
+        int ch = fgetc ( in );
+        if ( ch != EOF )
+            throw "excess data after end-stream";
+    }
+
+    static
+    const char * nextArg ( int & i, int argc, char * argv [] )
+    {
+        if ( ++ i >= argc )
+            throw "expected argument";
+        return argv [ i ];
+    }
+
+    static
+    const char * nextArg ( const char * & argp, int & i, int argc, char * argv [] )
+    {
+        const char * arg = argp;
+        argp = "\0";
+
+        if ( arg [ 1 ] != 0 )
+            return arg + 1;
+
+        return nextArg ( i, argc, argv );
+    }
+
+    static
+    uint64_t atoU64 ( const char * str )
+    {
+        char * end;
+        long i = strtol ( str, & end, 0 );
+        if ( end [ 0 ] != 0 )
+            throw "badly formed number";
+        if ( i < 0 )
+            throw "number out of bounds";
+        return ( uint64_t ) i;
+    }
+
+    static
+    void help ( const char * tool_path )
+    {
+        const char * tool_name = strrchr ( tool_path, '/' );
+        if ( tool_name ++ == NULL )
+            tool_name = tool_path;
+
+        std :: cout
+            << '\n'
+            << "Usage:\n"
+            << "  " << tool_name << " [options] [<stream-file> ...]\n"
+            << '\n'
+            << "Summary:\n"
+            << "  This is a tool to analyze and display the contents of a stream produced by\n"
+            << "  the \"general-writer\" library.\n"
+            << '\n'
+            << "  Input may be taken from stdin ( DEFAULT ) or from one or more stream-files.\n"
+            << '\n'
+            << "Options:\n"
+            << "  -j event-num                     jump to numbered event before displaying.\n"
+            << "                                   ( event numbers are 1-based, so the first event is 1. )\n"
+            << "  -N event-count                   display a limited number of events and then go quiet.\n"
+            << "  -v                               increase verbosity. Use multiple times for increased verbosity.\n"
+            << "                                   ( currently this only enables or disables display. )\n"
+            << "  -h                               display this help message\n"
+            << '\n'
+            << tool_path << '\n'
+            ;
+    }
+
+    static
+    void run ( int argc, char * argv [] )
+    {
+        uint32_t num_files = 0;
+
+        for ( int i = 1; i < argc; ++ i )
+        {
+            const char * arg = argv [ i ];
+            if ( arg [ 0 ] != '-' )
+                argv [ ++ num_files ] = ( char * ) arg;
+            else do switch ( ( ++ arg ) [ 0 ] )
+            {
+            case 'v':
+                ++ verbose;
+                break;
+            case 'j':
+                jump_event = atoU64 ( nextArg ( arg, i, argc, argv ) );
+                break;
+            case 'N':
+                end_event = atoU64 ( nextArg ( arg, i, argc, argv ) );
+                break;
+            case 'h':
+            case '?':
+                help ( argv [ 0 ] );
+                return;
+            default:
+                throw "unrecognized option";
+            }
+            while ( arg [ 1 ] != 0 );
+        }
+
+        if ( verbose && jump_event == 0 )
+            display = true;
+
+        end_event += jump_event;
+
+        if ( num_files == 0 )
+            dump ( stdin );
+        else for ( uint32_t i = 1; i <= num_files; ++ i )
+        {
+            FILE * in = fopen ( argv [ i ], "rb" );
+            if ( in == 0 )
+                std :: cerr << "WARNING: failed to open input file: \"" << argv [ i ] << '\n';
+            else
+            {
+                dump ( in );
+                fclose ( in );
+            }
+        }
+    }
+}
+
+int main ( int argc, char * argv [] )
+{
+    int status = 1;
+    try
+    {
+        gw_dump :: run ( argc, argv );
+        status = 0;
+    }
+    catch ( const char x [] )
+    {
+        std :: cerr
+            << "ERROR: offset "
+            << gw_dump :: foffset
+            << ": event "
+            << gw_dump :: event_num
+            << ": "
+            << x
+            << '\n'
+            ;
+    }
+    catch ( ... )
+    {
+        std :: cerr
+            << "ERROR: offset "
+            << gw_dump :: foffset
+            << ": event "
+            << gw_dump :: event_num
+            << ": unknown error\n"
+            ;
+    }
+
+    return status;
+}
diff --git a/tools/general-loader/main.cpp b/tools/general-loader/main.cpp
new file mode 100644
index 0000000..a9c9484
--- /dev/null
+++ b/tools/general-loader/main.cpp
@@ -0,0 +1,239 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "general-loader.hpp"
+
+#include <sysalloc.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <iostream>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/log-xml.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kns/stream.h>
+
+static char const option_include_paths[] = "include";
+#define OPTION_INCLUDE_PATHS option_include_paths
+#define ALIAS_INCLUDE_PATHS  "I"
+static
+char const * include_paths_usage[] = 
+{
+    "Additional directories to search for schema include files. Can specify multiple paths separated by ':'.",
+    NULL
+};
+
+static char const option_schemas[] = "schema";
+#define OPTION_SCHEMAS option_schemas
+#define ALIAS_SCHEMAS  "S"
+static
+char const * schemas_usage[] = 
+{
+    "Schema file to use. Can specify multiple files separated by ':'.",
+    NULL
+};
+
+static char const option_target[] = "target";
+#define OPTION_TARGET option_target
+#define ALIAS_TARGET  "T"
+static
+char const * target_usage[] = 
+{
+    "Database file to create. Overrides any remote path specifications coming from the input stream",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */                 
+                                                                          /* max#,  needs param, required */
+    { OPTION_INCLUDE_PATHS, ALIAS_INCLUDE_PATHS,    NULL, include_paths_usage,  0,  true,        false },
+    { OPTION_SCHEMAS,       ALIAS_SCHEMAS,          NULL, schemas_usage,        0,  true,        false },
+    { OPTION_TARGET,        ALIAS_TARGET,           NULL, target_usage,         1,  true,        false },
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path(s)",
+    "path(s)",
+    "path",
+    "",
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] \n"
+        "\n"
+        "Summary:\n"
+        "\tPopulate a VDB database from standard input\n"
+        "\n"
+        ,progname);
+}
+
+char const UsageDefaultName[] = "general-loader";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+    
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+    for(size_t i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(size_t i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    Args * args;
+    uint32_t pcount;
+    const XMLLogger* xml_logger = NULL;
+    rc_t rc = ArgsMakeAndHandle (&args, argc, argv, 2
+                                 , Options, sizeof Options / sizeof (OptDef)
+                                 , XMLLogger_Args, XMLLogger_ArgsQty);
+
+    if ( rc == 0 )
+    {
+        rc = XMLLogger_Make(&xml_logger, NULL, args);
+        if (rc == 0)
+        {
+            rc = ArgsParamCount (args, &pcount);
+            if ( rc == 0 )
+            {
+                if ( pcount != 0 )
+                {
+                    rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+                    MiniUsage (args);
+                }
+                else
+                { 
+                    const KStream *std_in;
+                    rc = KStreamMakeStdIn ( & std_in );
+                    if ( rc == 0 )
+                    {
+                        KStream* buffered;
+                        rc = KStreamMakeBuffered ( &buffered, std_in, 0 /*input-only*/, 0 /*use default size*/ );
+                        if ( rc == 0 )
+                        {
+                            GeneralLoader loader ( argv[0], *buffered );
+                            
+                            rc = ArgsOptionCount (args, OPTION_INCLUDE_PATHS, &pcount);
+                            if ( rc == 0 )
+                            {
+                                for ( uint32_t i = 0 ; i < pcount; ++i )
+                                {
+                                    const void* value;
+                                    rc = ArgsOptionValue (args, OPTION_INCLUDE_PATHS, i, &value);
+                                    if ( rc != 0 )
+                                    {
+                                        break;
+                                    }
+                                    loader . AddSchemaIncludePath ( static_cast <char const*> (value) );
+                                }
+                            }
+                            
+                            rc = ArgsOptionCount (args, OPTION_SCHEMAS, &pcount);
+                            if ( rc == 0 )
+                            {
+                                for ( uint32_t i = 0 ; i < pcount; ++i )
+                                {
+                                    const void* value;
+                                    rc = ArgsOptionValue (args, OPTION_SCHEMAS, i, &value);
+                                    if ( rc != 0 )
+                                    {
+                                        break;
+                                    }
+                                    loader . AddSchemaFile( static_cast <char const*> (value) );
+                                }
+                            }
+                            
+                            rc = ArgsOptionCount (args, OPTION_TARGET, &pcount);
+                            if ( rc == 0 && pcount == 1 )
+                            {
+                                const void* value;
+                                rc = ArgsOptionValue (args, OPTION_TARGET, 0, &value);
+                                if ( rc == 0 )
+                                {
+                                    loader . SetTargetOverride ( static_cast <char const*> (value) );
+                                }
+                            }
+                            
+                            if ( rc == 0 )
+                            {
+                                rc = loader . Run();
+                            }
+                            KStreamRelease ( buffered );
+                        }
+                        KStreamRelease ( std_in );
+                    }
+                }
+            }
+        }
+    }
+    
+    if ( rc != 0) 
+    {
+        LOGERR ( klogErr, rc, "load failed" );
+    }
+    
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/general-loader/protocol-parser.cpp b/tools/general-loader/protocol-parser.cpp
new file mode 100644
index 0000000..398e3a9
--- /dev/null
+++ b/tools/general-loader/protocol-parser.cpp
@@ -0,0 +1,1048 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "general-loader.hpp"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include "general-writer.h"
+#include "utf8-like-int-codec.h"
+
+using namespace std;
+
+///////////// GeneralLoader::ProtocolParser
+
+template <typename TEvent> 
+rc_t 
+GeneralLoader :: ProtocolParser :: ReadEvent ( Reader& p_reader, TEvent& p_event )
+{   // read the part of p_event that is outside of p_event.dad (event header)
+    if ( sizeof p_event > sizeof p_event . dad )
+    {
+        char * start = (char*) & p_event . dad;
+        start += sizeof p_event . dad;
+        return p_reader . Read ( start, sizeof p_event - sizeof p_event . dad );
+    }
+    return 0;
+};
+
+///////////// GeneralLoader::UnpackedProtocolParser
+
+rc_t
+GeneralLoader :: UnpackedProtocolParser :: ParseEvents ( Reader& p_reader, DatabaseLoader& p_dbLoader )
+{
+    rc_t rc;
+    do 
+    { 
+        p_reader . Align (); 
+        
+        struct gw_evt_hdr_v1 evt_header;
+        rc = p_reader . Read ( & evt_header, sizeof ( evt_header ) );    
+        if ( rc != 0 )
+        {
+            break;
+        }
+        
+        switch ( ncbi :: evt ( evt_header ) )
+        {
+        case evt_use_schema:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Use-Schema" );
+                
+                gw_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t schema_file_size = ncbi :: size1 ( evt );
+                    size_t schema_name_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( schema_file_size + schema_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . UseSchema ( string ( ( const char * ) p_reader . GetBuffer (), schema_file_size ), 
+                                                      string ( ( const char * ) p_reader . GetBuffer () + schema_file_size, schema_name_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_remote_path:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Remote-Path" );
+                
+                gw_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t database_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( database_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . RemotePath ( string ( ( const char * ) p_reader . GetBuffer (), database_name_size ) );
+                    }
+                }
+            }
+            break;
+            
+        case evt_software_name:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Software-Name" );
+                
+                gw_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t name_size = ncbi :: size1 ( evt );
+                    size_t version_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( name_size + version_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . SoftwareName ( string ( ( const char * ) p_reader . GetBuffer (), name_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + name_size, version_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_db_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: DB-Metadata-Node, id=$(i)", "i=%u", objId );
+                
+                gw_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . DBMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_tbl_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Tbl-Metadata-Node, id=$(i)", "i=%u", objId );
+                
+                gw_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . TblMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_col_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Col-Metadata-Node, id=$(i)", "i=%u", objId );
+                
+                gw_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . ColMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_new_table:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: New-Table, id=$(i)", "i=%u", tableId );
+                
+                gw_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t table_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( table_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . NewTable ( tableId, string ( ( const char * ) p_reader . GetBuffer (), table_name_size ) );
+                    }
+                }
+            }  
+            break;
+            
+        case evt_new_column:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: New-Column, id=$(i)", "i=%u", columnId );
+    
+                gw_column_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t col_name_size  = ncbi :: name_size ( evt );
+                    rc = p_reader . Read ( col_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . NewColumn ( columnId, 
+                                                ncbi :: table_id ( evt ), 
+                                                ncbi :: elem_bits ( evt ), 
+                                                ncbi :: flag_bits ( evt ),
+                                                string ( ( const char * ) p_reader . GetBuffer (), col_name_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_add_mbr_db:
+        { 
+            uint32_t db_id = ncbi :: id ( evt_header );
+            pLogMsg ( klogDebug, "protocol-parser event: Add-Mbr-DB, id=$(i)", "i=%u", db_id );
+            
+            gw_add_mbr_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                uint32_t parent_id = ncbi :: db_id ( evt );
+                size_t db_mbr_size = ncbi :: size1 ( evt );
+                size_t db_name_size = ncbi :: size2 ( evt );
+                uint8_t create_mode = ncbi :: create_mode ( evt );
+                rc = p_reader . Read ( db_mbr_size + db_name_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . AddMbrDB ( db_id, 
+                                                 parent_id,
+                                                 string ( ( const char * ) p_reader . GetBuffer (), db_mbr_size ), 
+                                                 string ( ( const char * ) p_reader . GetBuffer () + db_mbr_size, db_name_size ), 
+                                                 create_mode );
+                }
+            }
+        }
+        break;
+
+        case evt_add_mbr_tbl:
+        {
+            uint32_t db_tbl_id = ncbi :: id ( evt_header );
+            pLogMsg ( klogDebug, "protocol-parser event: Add-Mbr-Table, id=$(i)", "i=%u", db_tbl_id );
+            
+            gw_add_mbr_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                uint32_t parent_id = ncbi :: db_id ( evt );
+                size_t db_mbr_size = ncbi :: size1 ( evt );
+                size_t db_name_size = ncbi :: size2 ( evt );
+                uint8_t create_mode = ncbi :: create_mode ( evt );
+                rc = p_reader . Read ( db_mbr_size + db_name_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . AddMbrTbl ( db_tbl_id, 
+                                                  parent_id,
+                                                  string ( ( const char * ) p_reader . GetBuffer (), db_mbr_size ), 
+                                                  string ( ( const char * ) p_reader . GetBuffer () + db_mbr_size, db_name_size ), 
+                                                  create_mode );
+                }
+            }
+        }
+        break;
+
+        case evt_cell_data:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Data, id=$(i)", "i=%u", columnId );
+                
+                gw_data_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    const DatabaseLoader :: Column* col = p_dbLoader . GetColumn ( columnId );
+                    if ( col != 0 )
+                    {
+                        size_t elem_count = ncbi :: elem_count ( evt );
+                        rc = p_reader . Read ( ( col -> elemBits * elem_count + 7 ) / 8 );   
+                        if ( rc == 0 )
+                        {
+                            rc = p_dbLoader . CellData ( columnId, p_reader. GetBuffer (), elem_count );
+                        }
+                    }
+                    else
+                    {
+                        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+                    }
+                }
+            }
+            break;
+            
+        case evt_cell_default: 
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Default, id=$(i)", "i=%u", columnId );
+                
+                gw_data_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    const DatabaseLoader :: Column* col = p_dbLoader . GetColumn ( columnId );
+                    if ( col != 0 )
+                    {
+                        size_t elem_count = ncbi :: elem_count ( evt );
+                        rc = p_reader . Read ( ( col -> elemBits * elem_count + 7 ) / 8 );   
+                        if ( rc == 0 )
+                        {
+                            rc = p_dbLoader . CellDefault ( columnId, p_reader. GetBuffer (), elem_count );
+                        }
+                    }
+                    else
+                    {
+                        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+                    }
+                }
+            }
+            break;
+            
+        case evt_empty_default: 
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-EmptyDefault, id=$(i)", "i=%u", columnId );
+                rc = p_dbLoader . CellDefault ( columnId, 0, 0 );
+            }
+            break;
+            
+        case evt_open_stream:
+            LogMsg ( klogDebug, "protocol-parser event: Open-Stream" );
+            rc = p_dbLoader . OpenStream ();
+            break; 
+            
+        case evt_end_stream:
+            LogMsg ( klogDebug, "protocol-parser event: End-Stream" );
+            return p_dbLoader . CloseStream ();
+            
+        case evt_next_row:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Next-Row, id=$(i)", "i=%u", tableId );
+                rc = p_dbLoader . NextRow ( tableId );
+            }
+            break;
+            
+        case evt_move_ahead:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Move-Ahead, id=$(i)", "i=%u", tableId );
+    
+                gw_move_ahead_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . MoveAhead ( tableId, ncbi :: get_nrows ( evt ) );
+                }
+            }
+            break;
+            
+        case evt_errmsg:
+            {   
+                LogMsg ( klogDebug, "protocol-parser event: Error-Message" );
+                
+                gw_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t message_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( message_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . ErrorMessage ( string ( ( const char * ) p_reader . GetBuffer (), message_size ) );
+                    }
+                }
+            }
+            break;
+            
+        case evt_logmsg:
+        {   
+            LogMsg ( klogDebug, "protocol-parser event: Log-Message" );
+            
+            gw_1string_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                size_t message_size = ncbi :: size ( evt );
+                rc = p_reader . Read ( message_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . LogMessage ( string ( ( const char * ) p_reader . GetBuffer (), message_size ) );
+                }
+            }
+        }
+        break;
+            
+        case evt_progmsg:
+        {
+            LogMsg ( klogDebug, "protocol-parser event: Progress-Message" );
+
+            gw_status_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                size_t name_sz = ncbi :: size ( evt );
+                uint32_t pid = ncbi :: pid ( evt );
+                uint32_t version = ncbi :: version ( evt );
+                uint32_t timestamp = ncbi :: timestamp ( evt );
+                uint32_t percent = ncbi :: percent ( evt );
+
+                rc = p_reader . Read ( name_sz );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . ProgressMessage ( string ( ( const char * ) p_reader . GetBuffer (), name_sz ),
+                                                        pid,
+                                                        timestamp, 
+                                                        version, 
+                                                        percent );
+                }
+            }
+        }
+        break;
+        
+        default:
+            pLogMsg ( klogErr, 
+                      "unexpected general-loader event at $(o): $(e)", 
+                      "o=%lu,e=%i", 
+                      ( unsigned long ) p_reader . GetReadCount(), ( int ) ncbi :: evt ( evt_header ) );
+            rc = RC ( rcExe, rcFile, rcReading, rcData, rcUnexpected );
+            break;
+        }
+    }
+    while ( rc == 0 );
+    
+    return rc;
+}
+
+///////////// GeneralLoader::PackedProtocolParser
+
+template < typename T_uintXX > 
+rc_t 
+GeneralLoader :: PackedProtocolParser :: UncompressInt (  Reader& p_reader, uint16_t p_dataSize, int (*p_decode) ( uint8_t const* buf_start, uint8_t const* buf_xend, T_uintXX* ret_decoded )  )
+{
+    m_unpackingBuf . clear();
+    // reserve enough for the best-packed case, when each element is represented with 1 byte
+    m_unpackingBuf . reserve ( sizeof ( T_uintXX ) * p_dataSize );
+    
+    const uint8_t* buf_begin = reinterpret_cast<const uint8_t*> ( p_reader . GetBuffer() );
+    const uint8_t* buf_end   = buf_begin + p_dataSize;
+    while ( buf_begin < buf_end )
+    {
+        T_uintXX ret_decoded;
+        int numRead = p_decode ( buf_begin, buf_end, &ret_decoded );
+        if ( numRead <= 0 )
+        {
+            pLogMsg ( klogErr, "protocol-parser: decode_uintXX() returned $(i)", "i=%i", numRead );
+            return RC ( rcExe, rcFile, rcReading, rcData, rcCorrupt );
+        }
+
+        for ( size_t i = 0; i < sizeof ( T_uintXX ); ++i )
+        {
+            m_unpackingBuf . push_back ( reinterpret_cast<const uint8_t*> ( & ret_decoded ) [ i ] );
+        }
+        
+        buf_begin += numRead;
+    }
+    
+    return 0;
+}
+
+rc_t
+GeneralLoader :: PackedProtocolParser :: ParseData ( Reader& p_reader, DatabaseLoader& p_dbLoader, uint32_t p_columnId, uint32_t p_dataSize )
+{
+    rc_t rc = 0;
+    const DatabaseLoader :: Column* col = p_dbLoader . GetColumn ( p_columnId );
+    if ( col != 0 )
+    {
+        rc = p_reader . Read ( p_dataSize );   
+        if ( rc == 0 )
+        {
+            if ( col -> IsCompressed () )
+            {
+                switch ( col -> elemBits )
+                {
+                case 16: 
+                    rc = UncompressInt ( p_reader, p_dataSize, decode_uint16 );
+                    break;
+                case 32:
+                    rc = UncompressInt ( p_reader, p_dataSize, decode_uint32 );
+                    break;
+                case 64:
+                    rc = UncompressInt ( p_reader, p_dataSize, decode_uint64 );
+                    break;
+                default:
+                    LogMsg ( klogErr, "protocol-parser: bad element size for packed integer" );
+                    rc = RC ( rcExe, rcFile, rcReading, rcData, rcInvalid );
+                    break;
+                }
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . CellData ( p_columnId, m_unpackingBuf . data(), m_unpackingBuf . size() * 8 / col -> elemBits );
+                }
+            }
+            else
+            {
+                rc = p_dbLoader . CellData ( p_columnId, p_reader. GetBuffer (), p_dataSize * 8 / col -> elemBits );
+            }
+        }
+    }
+    else
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+    }
+    return rc;
+}
+
+rc_t 
+GeneralLoader :: PackedProtocolParser :: ParseEvents( Reader& p_reader, DatabaseLoader& p_dbLoader )
+{
+    rc_t rc;
+    do 
+    { 
+        struct gwp_evt_hdr_v1 evt_header;
+        rc = p_reader . Read ( & evt_header, sizeof ( evt_header ) );    
+        if ( rc != 0 )
+        {
+            break;
+        }
+        
+        switch ( ncbi :: evt ( evt_header ) )
+        {
+        case evt_use_schema:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Use-Schema (packed)" );
+                
+                gwp_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t schema_file_size = ncbi :: size1 ( evt );
+                    size_t schema_name_size = ncbi :: size2 ( evt );
+                            
+                    rc = p_reader . Read ( schema_file_size + schema_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . UseSchema ( string ( ( const char * ) p_reader . GetBuffer (), schema_file_size ), 
+                                                      string ( ( const char * ) p_reader . GetBuffer () + schema_file_size, schema_name_size ) );
+                    }
+                }
+            }
+            break;
+            
+        case evt_use_schema2:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Use-Schema2" );
+                
+                gwp_2string_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t schema_file_size = ncbi :: size1 ( evt );
+                    size_t schema_name_size = ncbi :: size2 ( evt );
+                            
+                    rc = p_reader . Read ( schema_file_size + schema_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . UseSchema ( string ( ( const char * ) p_reader . GetBuffer (), schema_file_size ), 
+                                                string ( ( const char * ) p_reader . GetBuffer () + schema_file_size, schema_name_size ) );
+                    }
+                }
+            }
+            break;
+            
+        case evt_remote_path:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Remote-Path (packed)" );
+                
+                gwp_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t database_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( database_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . RemotePath ( string ( ( const char * ) p_reader . GetBuffer (), database_name_size ) );
+                    }
+                }
+            }
+            break;
+        case evt_remote_path2:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Remote-Path2" );
+                
+                gwp_1string_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t database_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( database_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . RemotePath ( string ( ( const char * ) p_reader . GetBuffer (), database_name_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_software_name:
+            {
+                LogMsg ( klogDebug, "protocol-parser event: Software-Name (packed)" );
+                
+                gwp_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t name_size = ncbi :: size1 ( evt );
+                    size_t version_size = ncbi :: size2 ( evt );
+                            
+                    rc = p_reader . Read ( name_size + version_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . SoftwareName ( string ( ( const char * ) p_reader . GetBuffer (), name_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + name_size, version_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_db_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                if ( objId == 256 ) // a special case for the root database; same as 0
+                {
+                    objId = 0;
+                }
+                pLogMsg ( klogDebug, "protocol-parser event: Metadata-Node (packed), id=$(i)", "i=%u", objId );
+                
+                gwp_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . DBMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_tbl_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Tbl-Metadata-Node (packed), id=$(i)", "i=%u", objId );
+                
+                gwp_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . TblMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_col_metadata_node:
+            {
+                uint32_t objId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Col-Metadata-Node (packed), id=$(i)", "i=%u", objId );
+                
+                gwp_2string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t node_size = ncbi :: size1 ( evt );
+                    size_t value_size = ncbi :: size2 ( evt );
+                    rc = p_reader . Read ( node_size + value_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . ColMetadataNode ( objId,
+                                                         string ( ( const char * ) p_reader . GetBuffer (), node_size ), 
+                                                         string ( ( const char * ) p_reader . GetBuffer () + node_size, value_size ) );
+                    }
+                }
+            }
+            break;
+                
+        case evt_new_table:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: New-Table (packed), id=$(i)", "i=%u", tableId );
+                
+                gwp_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t table_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( table_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . NewTable ( tableId, string ( ( const char * ) p_reader . GetBuffer (), table_name_size ) );
+                    }
+                }
+            }  
+            break;
+        case evt_new_table2:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: New-Table2, id=$(i)", "i=%u", tableId );
+                
+                gwp_1string_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t table_name_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( table_name_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . NewTable ( tableId, string ( ( const char * ) p_reader . GetBuffer (), table_name_size ) );
+                    }
+                }
+            }  
+            break;
+            
+        case evt_new_column:
+        {
+            uint32_t columnId = ncbi :: id ( evt_header );
+            pLogMsg ( klogDebug, "protocol-parser event: New-Column (packed), id=$(i)", "i=%u", columnId );
+            
+            gwp_column_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                size_t col_name_size  = ncbi :: name_size ( evt );
+                rc = p_reader . Read ( col_name_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . NewColumn ( columnId, 
+                                                  ncbi :: table_id ( evt ), 
+                                                  ncbi :: elem_bits ( evt ), 
+                                                  ncbi :: flag_bits ( evt ),
+                                                  string ( ( const char * ) p_reader . GetBuffer (), col_name_size ) );
+                }
+            }
+        }
+        break;
+
+        case evt_add_mbr_db:
+        { 
+            uint32_t db_id = ncbi :: id ( evt_header );
+            pLogMsg ( klogDebug, "protocol-parser event: Add-Mbr-DB ( packed ), id=$(i)", "i=%u", db_id );
+            
+            gwp_add_mbr_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                uint32_t parent_id = ncbi :: db_id ( evt );
+                size_t db_mbr_size = ncbi :: size1 ( evt );
+                size_t db_name_size = ncbi :: size2 ( evt );
+                uint8_t create_mode = ncbi :: create_mode ( evt );
+                rc = p_reader . Read ( db_mbr_size + db_name_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . AddMbrDB ( db_id, 
+                                                 parent_id,
+                                                 string ( ( const char * ) p_reader . GetBuffer (), db_mbr_size ), 
+                                                 string ( ( const char * ) p_reader . GetBuffer () + db_mbr_size, db_name_size ), 
+                                                 create_mode );
+                }
+            }
+        }
+        break;
+
+        case evt_add_mbr_tbl:
+        {
+            uint32_t db_tbl_id = ncbi :: id ( evt_header );
+            pLogMsg ( klogDebug, "protocol-parser event: Add-Mbr-Table ( packed ), id=$(i)", "i=%u", db_tbl_id );
+            
+            gwp_add_mbr_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                uint32_t parent_id = ncbi :: db_id ( evt );
+                size_t db_mbr_size = ncbi :: size1 ( evt );
+                size_t db_name_size = ncbi :: size2 ( evt );
+                uint8_t create_mode = ncbi :: create_mode ( evt );
+                rc = p_reader . Read ( db_mbr_size + db_name_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . AddMbrTbl ( db_tbl_id,
+                                                  parent_id,
+                                                  string ( ( const char * ) p_reader . GetBuffer (), db_mbr_size ), 
+                                                  string ( ( const char * ) p_reader . GetBuffer () + db_mbr_size, db_name_size ), 
+                                                  create_mode );
+                }
+            }
+        }
+        break;
+
+        case evt_open_stream:
+            LogMsg ( klogDebug, "protocol-parser event: Open-Stream (packed)" );
+            rc = p_dbLoader . OpenStream ();
+            break; 
+            
+        case evt_end_stream:
+            LogMsg ( klogDebug, "protocol-parser event: End-Stream (packed)" );
+            return p_dbLoader . CloseStream ();
+            
+        case evt_cell_data:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Data (packed), id=$(i)", "i=%u", columnId );
+                
+                gwp_data_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    rc = ParseData ( p_reader, p_dbLoader, columnId, ncbi :: size ( evt ) );
+                }
+            }
+            break;
+            
+        case evt_cell_data2:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Data2, id=$(i)", "i=%u", columnId );
+                
+                gwp_data_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {   
+                    rc = ParseData ( p_reader, p_dbLoader, columnId, ncbi :: size ( evt ) );
+                }
+            }
+            break;
+            
+        case evt_cell_default:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Default (packed), id=$(i)", "i=%u", columnId );
+                
+                gwp_data_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    const DatabaseLoader :: Column* col = p_dbLoader . GetColumn ( columnId );
+                    if ( col != 0 )
+                    {
+                        size_t dataSize = ncbi :: size ( evt );
+                        rc = p_reader . Read ( dataSize );   
+                        if ( rc == 0 )
+                        {
+                            rc = p_dbLoader . CellDefault ( columnId, p_reader. GetBuffer (), dataSize * 8 / col -> elemBits );
+                        }
+                    }
+                    else
+                    {
+                        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+                    }
+                }
+            }
+            break;
+            
+        case evt_cell_default2:
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-Default2, id=$(i)", "i=%u", columnId );
+                
+                gwp_data_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {   // same as above - refactor
+                    const DatabaseLoader :: Column* col = p_dbLoader . GetColumn ( columnId );
+                    if ( col != 0 )
+                    {
+                        size_t dataSize = ncbi :: size ( evt );
+                        rc = p_reader . Read ( dataSize );   
+                        if ( rc == 0 )
+                        {
+                            rc = p_dbLoader . CellDefault ( columnId, p_reader. GetBuffer (), dataSize * 8 / col -> elemBits );
+                        }
+                    }
+                    else
+                    {
+                        rc = RC ( rcExe, rcFile, rcReading, rcColumn, rcNotFound );
+                    }
+                }
+            }
+            break;
+            
+        case evt_empty_default: 
+            {
+                uint32_t columnId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Cell-EmptyDefault (packed), id=$(i)", "i=%u", columnId );
+                rc = p_dbLoader . CellDefault ( columnId, 0, 0 );
+            }
+            break;
+            
+        case evt_next_row:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Next-Row (packed), id=$(i)", "i=%u", tableId );
+                rc = p_dbLoader . NextRow ( tableId );
+            }
+            break;
+            
+        case evt_move_ahead:
+            {
+                uint32_t tableId = ncbi :: id ( evt_header );
+                pLogMsg ( klogDebug, "protocol-parser event: Move-Ahead (packed), id=$(i)", "i=%u", tableId );
+    
+                gwp_move_ahead_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . MoveAhead ( tableId, ncbi :: get_nrows ( evt ) );
+                }
+            }
+            break;
+            
+        case evt_errmsg:
+            {   
+                LogMsg ( klogDebug, "protocol-parser event: Error-Message (packed)" );
+                
+                gwp_1string_evt_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t message_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( message_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . ErrorMessage ( string ( ( const char * ) p_reader . GetBuffer (), message_size ) );
+                    }
+                }
+            }
+            break;
+            
+        case evt_errmsg2:
+            {   
+                LogMsg ( klogDebug, "protocol-parser event: Error-Message2" );
+                
+                gwp_1string_evt_U16_v1 evt;
+                rc = ReadEvent ( p_reader, evt );
+                if ( rc == 0 )
+                {
+                    size_t message_size = ncbi :: size ( evt );
+                    rc = p_reader . Read ( message_size );
+                    if ( rc == 0 )
+                    {
+                        rc = p_dbLoader . ErrorMessage ( string ( ( const char * ) p_reader . GetBuffer (), message_size ) );
+                    }
+                }
+            }
+            break;
+
+        case evt_logmsg:
+        {   
+            LogMsg ( klogDebug, "protocol-parser event ( packed ): Log-Message" );
+            
+            gwp_1string_evt_U16_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                size_t message_size = ncbi :: size ( evt );
+                rc = p_reader . Read ( message_size );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . LogMessage ( string ( ( const char * ) p_reader . GetBuffer (), message_size ) );
+                }
+            }
+        }
+        break;
+            
+        case evt_progmsg:
+        {
+            LogMsg ( klogDebug, "protocol-parser event ( packed ): Progress-Message" );
+
+            gwp_status_evt_v1 evt;
+            rc = ReadEvent ( p_reader, evt );
+            if ( rc == 0 )
+            {
+                size_t name_sz = ncbi :: size ( evt );
+                uint32_t pid = ncbi :: pid ( evt );
+                uint32_t version = ncbi :: version ( evt );
+                uint32_t timestamp = ncbi :: timestamp ( evt );
+                uint32_t percent = ncbi :: percent ( evt );
+
+                rc = p_reader . Read ( name_sz );
+                if ( rc == 0 )
+                {
+                    rc = p_dbLoader . ProgressMessage ( string ( ( const char * ) p_reader . GetBuffer (), name_sz ),
+                                                        pid, 
+                                                        timestamp, 
+                                                        version, 
+                                                        percent );
+                }
+            }
+        }
+            break;
+
+        default:
+            pLogMsg ( klogErr, 
+                      "unexpected general-loader event at $(o): $(e)", 
+                      "o=%lu,e=%i", 
+                      ( unsigned long ) p_reader . GetReadCount(), ( int ) ncbi :: evt ( evt_header ) );
+            rc = RC ( rcExe, rcFile, rcReading, rcData, rcUnexpected );
+            break;
+        }
+    }
+    while ( rc == 0 );
+    
+    return rc;
+}
+
diff --git a/tools/general-loader/utf8-like-int-codec.c b/tools/general-loader/utf8-like-int-codec.c
new file mode 100644
index 0000000..e4e73b0
--- /dev/null
+++ b/tools/general-loader/utf8-like-int-codec.c
@@ -0,0 +1,687 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "utf8-like-int-codec.h"
+
+#define NOT_ENCODED_SEQUENCE 0xFFu
+
+#define MAX_VALUE_BYTE_1 0x7F
+#define MAX_VALUE_BYTE_2 0x7FF
+#define MAX_VALUE_BYTE_3 0xFFFF
+#define MAX_VALUE_BYTE_4 0x1FFFFF
+#define MAX_VALUE_BYTE_5 0x3FFFFFF
+#define MAX_VALUE_BYTE_6 0x7FFFFFFF
+#define MAX_VALUE_BYTE_7 0xFFFFFFFFF
+
+
+int encode_uint16 ( uint16_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend )
+{
+    size_t dst_buf_size = buf_xend - buf_start;
+    int ret = CODEC_UNKNOWN_ERROR;
+
+    /* optimization: process 1-byte case in the very beginning */
+    if (value_to_encode <= MAX_VALUE_BYTE_1)
+    {
+        if ( dst_buf_size < 1 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = (uint8_t)value_to_encode;
+        ret = 1;
+    }
+    else if ( value_to_encode <= MAX_VALUE_BYTE_2 )
+    {
+        /* 1-byte case is processed already, so starting from 2-byte one */
+        if ( dst_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xC0 | (uint8_t)(value_to_encode >> 6);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 2;
+    }
+    else /* encoding will take at least 3 bytes which is pointless - writing directly */
+    {
+        if (dst_buf_size < 3)
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = NOT_ENCODED_SEQUENCE;
+        buf_start[1] = (uint8_t)( value_to_encode >> 8 );
+        buf_start[2] = (uint8_t)( value_to_encode );
+
+        ret = 3;
+    }
+
+    return ret;
+}
+
+int decode_uint16 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint16_t* ret_decoded )
+{
+    size_t src_buf_size = buf_xend - buf_start;
+    int ret = CODEC_INVALID_FORMAT;
+
+    if (src_buf_size < 1)
+        return CODEC_INSUFFICIENT_BUFFER;
+
+    if ( (int8_t)buf_start[0] >= 0 )
+    {
+        *ret_decoded = buf_start[0];
+        return 1;
+    }
+
+    /*neg_ch = ~ buf_start[0];*/
+    /*
+            neg_ch                |  buf_start[0]
+        invalid: 01nnnnnn >= 0x40 | 10xxxxxx < 0xC0
+        valid:   
+        2-byte:  001nnnnn >= 0x20 | 110xxxxx < 0xE0
+        3-byte:  0001nnnn >= 0x10 | 1110xxxx < 0xF0
+        4-byte:  00001nnn >= 0x08 | 11110xxx < 0xF8
+        5-byte:  000001nn >= 0x04 | 111110xx < 0xFC
+        6-byte:  0000001n >= 0x02 | 1111110x < 0xFE
+        7-byte:  00000001 >= 0x01 | 11111110 < 0xFF
+
+        So, no need to have neg_ch to achieve the filtering
+    */
+
+    /* invalid 1st byte */
+    if ( buf_start[0] < 0xC0 )
+        return CODEC_INVALID_FORMAT;
+    else if ( buf_start[0] < 0xE0 )
+    {
+        if ( src_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x1F;
+            uint8_t byte1;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            *ret_decoded  = (uint16_t)byte0 << 6 |
+                            (uint16_t)byte1;
+
+            ret = 2;
+        }
+    }
+    else if ( buf_start[0] == NOT_ENCODED_SEQUENCE )
+    {
+        if ( src_buf_size < 3 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        *ret_decoded = (uint16_t)buf_start[1] << 8 |
+                       (uint16_t)buf_start[2];
+
+        ret = 3;
+    }
+
+    return ret;
+}
+
+
+int encode_uint32 ( uint32_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend )
+{
+    size_t dst_buf_size = buf_xend - buf_start;
+    int ret = CODEC_UNKNOWN_ERROR;
+
+    if (value_to_encode <= MAX_VALUE_BYTE_1)
+    {
+        if ( dst_buf_size < 1 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = (uint8_t)value_to_encode;
+        ret = 1;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_2)
+    {
+        if ( dst_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xC0 | (uint8_t)(value_to_encode >> 6);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 2;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_3)
+    {
+        if ( dst_buf_size < 3 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xE0 | (uint8_t)(value_to_encode >> 12);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 3;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_4)
+    {
+        if ( dst_buf_size < 4 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xF0 | (uint8_t)(value_to_encode >> 18);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 12 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[3] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 4;
+    }
+    else /* encoding will take at least 5 bytes which is pointless - writing directly */
+    {
+        if (dst_buf_size < 5)
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = NOT_ENCODED_SEQUENCE;
+        buf_start[1] = (uint8_t)( value_to_encode >> 24 );
+        buf_start[2] = (uint8_t)( value_to_encode >> 16 );
+        buf_start[3] = (uint8_t)( value_to_encode >> 8 );
+        buf_start[4] = (uint8_t)( value_to_encode );
+
+        ret = 5;
+    }
+
+    return ret;
+}
+
+int decode_uint32 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint32_t* ret_decoded )
+{
+    size_t src_buf_size = buf_xend - buf_start;
+    int ret = CODEC_INVALID_FORMAT;
+
+    if (src_buf_size < 1)
+        return CODEC_INSUFFICIENT_BUFFER;
+
+    /* 1-byte sequence */
+    if ( (int8_t)buf_start[0] >= 0 )
+    {
+        *ret_decoded = buf_start[0];
+        return 1;
+    }
+
+    /*neg_ch = ~ buf_start[0];*/
+    /*
+            neg_ch                |  buf_start[0]
+        invalid: 01nnnnnn >= 0x40 | 10xxxxxx < 0xC0
+        valid:   
+        2-byte:  001nnnnn >= 0x20 | 110xxxxx < 0xE0
+        3-byte:  0001nnnn >= 0x10 | 1110xxxx < 0xF0
+        4-byte:  00001nnn >= 0x08 | 11110xxx < 0xF8
+        5-byte:  000001nn >= 0x04 | 111110xx < 0xFC
+        6-byte:  0000001n >= 0x02 | 1111110x < 0xFE
+        7-byte:  00000001 >= 0x01 | 11111110 < 0xFF
+
+        So, no need to have neg_ch to achieve the filtering
+    */
+
+    /* invalid 1st byte */
+    if ( buf_start[0] < 0xC0 )
+        return CODEC_INVALID_FORMAT;
+    /* 2-byte sequence */
+    else if ( buf_start[0] < 0xE0 )
+    {
+        if ( src_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x1F;
+            uint8_t byte1;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            *ret_decoded  = (uint32_t)byte0 << 6 |
+                            (uint32_t)byte1;
+
+            ret = 2;
+        }
+    }
+    /* 3-byte sequence */
+    else if ( buf_start[0] < 0xF0 )
+    {
+        if ( src_buf_size < 3 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x0F;
+            uint8_t byte1, byte2;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            *ret_decoded  = (uint32_t)byte0 << 12 |
+                            (uint32_t)byte1 << 6 |
+                            (uint32_t)byte2;
+
+            ret = 3;
+        }
+    }
+    /* 4-byte sequence */
+    else if ( buf_start[0] < 0xF8 )
+    {
+        if  ( src_buf_size < 4 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x07;
+            uint8_t byte1, byte2, byte3;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            if ( ( buf_start[3] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte3 = buf_start[3] & 0x3F;
+
+            *ret_decoded  = (uint32_t)byte0 << 18 |
+                            (uint32_t)byte1 << 12 |
+                            (uint32_t)byte2 << 6 |
+                            (uint32_t)byte3;
+
+            ret = 4;
+        }
+    }
+    else if ( buf_start[0] == NOT_ENCODED_SEQUENCE )
+    {
+        if ( src_buf_size < 5 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        *ret_decoded = (uint32_t)buf_start[1] << 24 |
+                       (uint32_t)buf_start[2] << 16 |
+                       (uint32_t)buf_start[3] << 8 |
+                       (uint32_t)buf_start[4];
+
+        ret = 5;
+    }
+
+    return ret;
+}
+
+
+int encode_uint64 ( uint64_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend )
+{
+    size_t dst_buf_size = buf_xend - buf_start;
+    int ret = CODEC_UNKNOWN_ERROR;
+
+    if (value_to_encode <= MAX_VALUE_BYTE_1)
+    {
+        if ( dst_buf_size < 1 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = (uint8_t)value_to_encode;
+        ret = 1;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_2)
+    {
+        if ( dst_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xC0 | (uint8_t)(value_to_encode >> 6);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 2;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_3)
+    {
+        if ( dst_buf_size < 3 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xE0 | (uint8_t)(value_to_encode >> 12);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 3;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_4)
+    {
+        if ( dst_buf_size < 4 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xF0 | (uint8_t)(value_to_encode >> 18);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 12 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[3] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 4;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_5)
+    {
+        if ( dst_buf_size < 5 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xF8 | (uint8_t)(value_to_encode >> 24);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 18 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode >> 12 & 0x3F);
+        buf_start[3] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[4] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 5;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_6)
+    {
+        if ( dst_buf_size < 6 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xFC | (uint8_t)(value_to_encode >> 30);
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 24 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode >> 18 & 0x3F);
+        buf_start[3] = 0x80 | (uint8_t)(value_to_encode >> 12 & 0x3F);
+        buf_start[4] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[5] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 6;
+    }
+    else if (value_to_encode <= MAX_VALUE_BYTE_7)
+    {
+        if ( dst_buf_size < 7 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = 0xFE;/* | (uint8_t)(value_to_encode >> 36);*/ /* this shift will always give 0 */
+        buf_start[1] = 0x80 | (uint8_t)(value_to_encode >> 30 & 0x3F);
+        buf_start[2] = 0x80 | (uint8_t)(value_to_encode >> 24 & 0x3F);
+        buf_start[3] = 0x80 | (uint8_t)(value_to_encode >> 18 & 0x3F);
+        buf_start[4] = 0x80 | (uint8_t)(value_to_encode >> 12 & 0x3F);
+        buf_start[5] = 0x80 | (uint8_t)(value_to_encode >> 6 & 0x3F);
+        buf_start[6] = 0x80 | (uint8_t)(value_to_encode & 0x3F);
+
+        ret = 7;
+    }
+    else /* there is a limitation - cannot encode in more than 7 bytes, writing directly now */
+    {
+        if (dst_buf_size < 9)
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        buf_start[0] = NOT_ENCODED_SEQUENCE;
+        buf_start[1] = (uint8_t)( value_to_encode >> 56 );
+        buf_start[2] = (uint8_t)( value_to_encode >> 48 );
+        buf_start[3] = (uint8_t)( value_to_encode >> 40 );
+        buf_start[4] = (uint8_t)( value_to_encode >> 32 );
+        buf_start[5] = (uint8_t)( value_to_encode >> 24 );
+        buf_start[6] = (uint8_t)( value_to_encode >> 16 );
+        buf_start[7] = (uint8_t)( value_to_encode >> 8 );
+        buf_start[8] = (uint8_t)( value_to_encode );
+
+        ret = 9;
+    }
+
+    return ret;
+}
+
+int decode_uint64 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint64_t* ret_decoded )
+{
+    size_t src_buf_size = buf_xend - buf_start;
+    int ret = CODEC_INVALID_FORMAT;
+
+    if (src_buf_size < 1)
+        return CODEC_INSUFFICIENT_BUFFER;
+
+    /* 1-byte sequence */
+    if ( (int8_t)buf_start[0] >= 0 )
+    {
+        *ret_decoded = buf_start[0];
+        return 1;
+    }
+
+    /*neg_ch = ~ buf_start[0];*/
+    /*
+            neg_ch                |  buf_start[0]
+        invalid: 01nnnnnn >= 0x40 | 10xxxxxx < 0xC0
+        valid:   
+        2-byte:  001nnnnn >= 0x20 | 110xxxxx < 0xE0
+        3-byte:  0001nnnn >= 0x10 | 1110xxxx < 0xF0
+        4-byte:  00001nnn >= 0x08 | 11110xxx < 0xF8
+        5-byte:  000001nn >= 0x04 | 111110xx < 0xFC
+        6-byte:  0000001n >= 0x02 | 1111110x < 0xFE
+        7-byte:  00000001 >= 0x01 | 11111110 < 0xFF
+
+        So, no need to have neg_ch to achieve the filtering
+    */
+
+    /* invalid 1st byte */
+    if ( buf_start[0] < 0xC0 )
+        return CODEC_INVALID_FORMAT;
+    /* 2-byte sequence */
+    else if ( buf_start[0] < 0xE0 )
+    {
+        if ( src_buf_size < 2 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x1F;
+            uint8_t byte1;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte0 << 6 |
+                            (uint64_t)byte1;
+
+            ret = 2;
+        }
+    }
+    /* 3-byte sequence */
+    else if ( buf_start[0] < 0xF0 )
+    {
+        if ( src_buf_size < 3 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x0F;
+            uint8_t byte1, byte2;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte0 << 12 |
+                            (uint64_t)byte1 << 6 |
+                            (uint64_t)byte2;
+
+            ret = 3;
+        }
+    }
+    /* 4-byte sequence */
+    else if ( buf_start[0] < 0xF8 )
+    {
+        if  ( src_buf_size < 4 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x07;
+            uint8_t byte1, byte2, byte3;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            if ( ( buf_start[3] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte3 = buf_start[3] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte0 << 18 |
+                            (uint64_t)byte1 << 12 |
+                            (uint64_t)byte2 << 6 |
+                            (uint64_t)byte3;
+
+            ret = 4;
+        }
+    }
+    /* 5-byte sequence */
+    else if ( buf_start[0] < 0xFC )
+    {
+        if  ( src_buf_size < 5 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x03;
+            uint8_t byte1, byte2, byte3, byte4;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            if ( ( buf_start[3] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte3 = buf_start[3] & 0x3F;
+
+            if ( ( buf_start[4] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte4 = buf_start[4] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte0 << 24 |
+                            (uint64_t)byte1 << 18 |
+                            (uint64_t)byte2 << 12 |
+                            (uint64_t)byte3 << 6 |
+                            (uint64_t)byte4;
+
+            ret = 5;
+        }
+    }
+    /* 6-byte sequence */
+    else if ( buf_start[0] < 0xFE )
+    {
+        if  ( src_buf_size < 6 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte0 = buf_start[0] & 0x01;
+            uint8_t byte1, byte2, byte3, byte4, byte5;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            if ( ( buf_start[3] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte3 = buf_start[3] & 0x3F;
+
+            if ( ( buf_start[4] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte4 = buf_start[4] & 0x3F;
+
+            if ( ( buf_start[5] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte5 = buf_start[5] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte0 << 30 |
+                            (uint64_t)byte1 << 24 |
+                            (uint64_t)byte2 << 18 |
+                            (uint64_t)byte3 << 12 |
+                            (uint64_t)byte4 << 6 |
+                            (uint64_t)byte5;
+
+            ret = 6;
+        }
+    }
+    /* 6-byte sequence */
+    else if ( buf_start[0] == 0xFE )
+    {
+        if  ( src_buf_size < 7 )
+            return CODEC_INSUFFICIENT_BUFFER;
+        else
+        {
+            uint8_t byte1, byte2, byte3, byte4, byte5, byte6;
+
+            if ( ( buf_start[1] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte1 = buf_start[1] & 0x3F;
+
+            if ( ( buf_start[2] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte2 = buf_start[2] & 0x3F;
+
+            if ( ( buf_start[3] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte3 = buf_start[3] & 0x3F;
+
+            if ( ( buf_start[4] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte4 = buf_start[4] & 0x3F;
+
+            if ( ( buf_start[5] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte5 = buf_start[5] & 0x3F;
+
+            if ( ( buf_start[6] & 0xC0 ) != 0x80 )
+                return CODEC_INVALID_FORMAT;
+            byte6 = buf_start[6] & 0x3F;
+
+            *ret_decoded  = (uint64_t)byte1 << 30 |
+                            (uint64_t)byte2 << 24 |
+                            (uint64_t)byte3 << 18 |
+                            (uint64_t)byte4 << 12 |
+                            (uint64_t)byte5 << 6 |
+                            (uint64_t)byte6;
+
+            ret = 7;
+        }
+    }
+    else /* if ( buf_start[0] == NOT_ENCODED_SEQUENCE ) */
+    {
+        if ( src_buf_size < 9 )
+            return CODEC_INSUFFICIENT_BUFFER;
+
+        *ret_decoded = (uint64_t)buf_start[1] << 56 |
+                       (uint64_t)buf_start[2] << 48 |
+                       (uint64_t)buf_start[3] << 40 |
+                       (uint64_t)buf_start[4] << 32 |
+                       (uint64_t)buf_start[5] << 24 |
+                       (uint64_t)buf_start[6] << 16 |
+                       (uint64_t)buf_start[7] << 8 |
+                       (uint64_t)buf_start[8];
+
+        ret = 9;
+    }
+
+    return ret;
+}
diff --git a/tools/general-loader/utf8-like-int-codec.h b/tools/general-loader/utf8-like-int-codec.h
new file mode 100644
index 0000000..0b579ac
--- /dev/null
+++ b/tools/general-loader/utf8-like-int-codec.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_utf8_like_int_codec_
+#define _h_utf8_like_int_codec_
+
+#include <stdint.h>
+#include <stdlib.h> /* size_t on linux */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum
+{
+    CODEC_INSUFFICIENT_BUFFER = 0,
+    CODEC_INVALID_FORMAT = -1,
+    CODEC_UNKNOWN_ERROR = -2
+};
+
+/*
+all encode_uintXX return:
+    value <= 0: error:   one of CODEC_* above
+    value > 0:  success: number of bytes written to buf_start
+
+all decode_uintXX return:
+    value <= 0: error:   one of CODEC_* above
+    value > 0:  success: number of bytes read from buf_start
+*/
+
+int encode_uint16 ( uint16_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend );
+int decode_uint16 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint16_t* ret_decoded );
+
+int encode_uint32 ( uint32_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend );
+int decode_uint32 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint32_t* ret_decoded );
+
+int encode_uint64 ( uint64_t value_to_encode, uint8_t* buf_start, uint8_t* buf_xend );
+int decode_uint64 ( uint8_t const* buf_start, uint8_t const* buf_xend, uint64_t* ret_decoded );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_utf8_like_int_codec_ */
+
diff --git a/tools/kar/Makefile b/tools/kar/Makefile
new file mode 100644
index 0000000..caf443e
--- /dev/null
+++ b/tools/kar/Makefile
@@ -0,0 +1,99 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/kar
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	kar \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#----------------------------------------------------------------
+# kar
+#
+
+KAR_SRC = \
+	kar-args \
+	kar
+
+KAR_OBJ = \
+	$(addsuffix .$(OBJX),$(KAR_SRC))
+
+KAR_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/kar: $(KAR_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(KAR_LIB)
+
+
+#----------------------------------------------------------------
+# sra-kar
+#
+
+SRA_KAR_SRC = \
+	sra-kar
+
+SRA_KAR_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_KAR_SRC))
+
+SRA_KAR_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+$(BINDIR)/sra-kar: $(SRA_KAR_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRA_KAR_LIB)
+
+
diff --git a/tools/kar/kar-args.c b/tools/kar/kar-args.c
new file mode 100644
index 0000000..5fd9646
--- /dev/null
+++ b/tools/kar/kar-args.c
@@ -0,0 +1,428 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "kar-args.h"
+
+#include <klib/rc.h>
+#include <kfs/sra.h>
+#include <klib/log.h>
+#include <klib/out.h>
+
+#include <kapp/main.h>
+
+
+static const char * create_usage[] = { "Create a new archive.", NULL };
+static const char * test_usage[] = { "Check the structural validity of an archive", NULL };
+static const char * extract_usage[] = { "Extract the contents of an archive into a directory.", NULL };
+static const char * force_usage[] =
+{ "(no parameter) this will cause the extract or",
+  "create to over-write existing files unless",
+  "they are write-protected.  Without this",
+  "option the program will fail if the archive",
+  "already exists for a create or the target",
+  "directory exists for an extract", NULL };
+static const char * longlist_usage[] =
+{ "more information will be given on each file",
+  "in test/list mode.", NULL };
+static const char * directory_usage[] = 
+{ "The next token on the command line is the",
+  "name of the directory to extract to or create",
+  "from", NULL };
+static const char * stdout_usage[] = { "Direct output to stdout", NULL }; 
+static const char * md5_usage[] = { "create md5sum-compatible checksum file", NULL }; 
+
+
+OptDef Options [] = 
+{
+    { OPTION_CREATE,    ALIAS_CREATE,    NULL, create_usage, 1, true,  false },
+    { OPTION_TEST,      ALIAS_TEST,      NULL, test_usage, 1, true,  false },
+    { OPTION_EXTRACT,   ALIAS_EXTRACT,   NULL, extract_usage, 1, true,  false },
+    { OPTION_FORCE,     ALIAS_FORCE,     NULL, force_usage, 0, false, false },
+    { OPTION_LONGLIST,  ALIAS_LONGLIST,  NULL, longlist_usage, 0, false, false },
+    { OPTION_DIRECTORY, ALIAS_DIRECTORY, NULL, directory_usage, 1, true,  false },
+    { OPTION_STDOUT,    ALIAS_STDOUT,    NULL, stdout_usage, 1, true,  false },
+    { OPTION_MD5,       NULL,            NULL, md5_usage, 1, false,  false }
+};
+
+const char UsageDefaultName[] = "kar";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("Usage:\n"
+                    "  %s [OPTIONS] -%s|--%s <Archive> -%s|--%s <Directory> [Filter ...]\n"
+                    "  %s [OPTIONS] -%s|--%s <Archive> -%s|--%s <Directory>\n"
+                    "  %s [OPTIONS] -%s|--%s|--%s <Archive>\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Create, extract from, or test an archive.\n"
+                    "\n",
+                    progname, ALIAS_CREATE, OPTION_CREATE, ALIAS_DIRECTORY, OPTION_DIRECTORY,
+                    progname, ALIAS_EXTRACT, OPTION_EXTRACT, ALIAS_DIRECTORY, OPTION_DIRECTORY,
+                    progname, ALIAS_TEST, OPTION_TEST, OPTION_LONGLIST);
+}
+
+rc_t CC Usage (const Args * args)
+{
+    static const char archive[] = "archive";
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    OUTMSG (("Archive Command:\n"
+	     "  All of these options require the next token on the command line to be\n"
+	     "  the name of the archive\n\n"));
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine (ALIAS_CREATE, OPTION_CREATE, archive, create_usage);
+    HelpOptionLine (ALIAS_EXTRACT, OPTION_EXTRACT, archive, extract_usage);
+    HelpOptionLine (ALIAS_TEST, OPTION_TEST, archive, test_usage);
+    OUTMSG (("\n"
+             "Archive:\n"
+             "  Path to a file that will/does hold the archive of other files.\n"
+             "  This can be a full or relative path.\n"
+             "\n"
+             "Directory:\n"
+	     "  Required for create or extract command, ignored for test command.\n"
+             "  This can be a full or relative path.\n"
+             "\n"
+             "Filters:\n"
+	     "  When present these act as include filters.\n"
+	     "  Any file name will be included in the extracted files, created archive\n"
+	     "  or test operation listing\n"
+	     "  Any directory will be included as well as its contents\n"
+             "\n"
+             "Options:\n"));
+    HelpOptionLine (ALIAS_DIRECTORY, OPTION_DIRECTORY, "Directory", directory_usage);
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+    HelpOptionLine (ALIAS_LONGLIST, OPTION_LONGLIST, NULL, longlist_usage);
+
+    HelpOptionsStandard ();
+
+    HelpOptionLine (ALIAS_STDOUT, OPTION_STDOUT, NULL, stdout_usage);
+    HelpOptionLine ( NULL, OPTION_MD5, NULL, md5_usage);
+
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To create an archive named 'example.sra' that contains the same\n"
+             "  contents as a subdirectory 'example' of the current directory\n"
+             "\n"
+             "  $ %s --%s example.sra --%s example\n",
+             progname, OPTION_CREATE, OPTION_DIRECTORY));
+
+    OUTMSG (("\n"
+             "  To replace an existing archive named 'example.sra' with another that contains\n"
+             "  the same contents as a subdirectory 'example' of the current directory\n"
+             "\n"
+             "  $ %s -%s -%s example.sra -%s example\n",
+             progname, ALIAS_FORCE, ALIAS_CREATE, ALIAS_DIRECTORY));
+
+    OUTMSG (("\n"
+             "  To examine in detail the contents of an archive named 'example.sra'\n"
+             "\n"
+             "  $ %s --%s --%s example.sra\n",
+             progname, OPTION_LONGLIST, OPTION_TEST));
+
+    OUTMSG (("\n"
+             "  To extract the files from an archive named 'example.sra' into\n"
+             "  a subdirectory 'example' of the current directory.\n"
+             "  NOTE: all extracted files will be read only.\n"
+             "\n"
+             "  $ %s --%s example.sra --%s example\n",
+             progname, OPTION_EXTRACT, OPTION_DIRECTORY));
+
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+static
+rc_t parse_params_int ( Params *p, const Args *args )
+{
+    rc_t rc;
+
+    uint32_t count;
+    
+    /* Parameters */
+    rc = ArgsParamCount ( args, &count );
+    if ( rc != 0 )
+    {
+        LogErr ( klogFatal, rc, "Failed to retrieve parameter count" );
+        return rc;
+    }
+    else
+    {
+        uint32_t i;
+        const char *value;
+
+        p -> mem_count = count;
+
+        for ( i = 0; i < count; ) /*Increment in value insertion into members*/ 
+        {
+            rc = ArgsParamValue ( args, i, ( const void ** ) &value );
+            if ( rc != 0 )
+            {
+                LogErr ( klogFatal, rc, "Failed to retrieve parameter value" );
+                return rc;
+            }
+
+            p -> members [ ++i ] = value;
+        }
+    }
+
+    /* Bool  Options */
+    rc = ArgsOptionCount ( args, OPTION_LONGLIST, &count );
+    if ( rc == 0 && count != 0 )
+        p -> long_list = true;
+    
+    rc = ArgsOptionCount ( args, OPTION_FORCE, &count );
+    if ( rc == 0 && count != 0 )
+        p -> force = true;
+
+    rc = ArgsOptionCount ( args, OPTION_STDOUT, &count );
+    if ( rc == 0 && count != 0 )
+        p -> stdout = true;
+
+    rc = ArgsOptionCount ( args, OPTION_MD5, &count );
+    if ( rc == 0 && count != 0 )
+        p -> md5sum = true;    
+
+    /* Options */
+    rc = ArgsOptionCount ( args, OPTION_CREATE, & p -> c_count );
+    if ( rc != 0 )
+    {
+        LogErr ( klogFatal, rc, "Failed to verify 'create' option" );
+        return rc;
+    }
+
+    /* grab the p->archive_path as an option parameter if p->c_count > 0 */
+    if ( p -> c_count > 0 )
+    {
+        rc = ArgsOptionValue (args, OPTION_CREATE, 0, (const void **) & p -> archive_path );
+        if ( rc != 0 )
+        {
+            LogErr ( klogFatal, rc, "Failed to access 'create' archive path" );
+            return rc;
+        }
+    }
+    
+    rc = ArgsOptionCount ( args, OPTION_EXTRACT, &p -> x_count );
+    if ( rc != 0 )
+    {
+        LogErr ( klogFatal, rc, "Failed to verify 'extract' option" );
+        return rc;
+    }
+
+    /* grab the p->archive_path as an option parameter if p->x_count > 0 */
+    if ( p -> x_count > 0 )
+    {
+        rc = ArgsOptionValue (args, OPTION_EXTRACT, 0, (const void **) & p -> archive_path );
+        if ( rc != 0 )
+        {
+            LogErr ( klogFatal, rc, "Failed to access 'extract' archive path" );
+            return rc;
+        }
+    }
+    
+    rc = ArgsOptionCount ( args, OPTION_TEST, &p -> t_count );
+    if ( rc != 0 )
+    {
+        LogErr ( klogFatal, rc, "Failed to verify 'test' option" );
+        return rc;
+    }
+
+    /* grab the p->archive_path as an option parameter if p->t_count > 0 */
+    if ( p -> t_count > 0 )
+    {
+        rc = ArgsOptionValue (args, OPTION_TEST, 0, (const void **) & p -> archive_path );
+        if ( rc != 0 )
+        {
+            LogErr ( klogFatal, rc, "Failed to access 'test' archive path" );
+            return rc;
+        }
+    }
+
+    /* need to grab the directory option */
+    rc = ArgsOptionCount ( args, OPTION_DIRECTORY, &p -> dir_count );
+    if ( rc != 0 )
+    {
+        LogErr ( klogFatal, rc, "Failed to verify 'directory' option" );
+        return rc;
+    }
+
+    if ( p -> dir_count > 0 )
+    {
+        rc = ArgsOptionValue ( args, OPTION_DIRECTORY, 0, ( const void ** ) &p -> directory_path );
+        if ( rc != 0 )
+        {            
+            LogErr ( klogFatal, rc, "Failed to access directory path" );
+            return rc;
+        }
+    }
+
+    return rc;
+}
+
+rc_t parse_params ( Params *p, Args *args, int argc, char * argv [] )
+{
+    rc_t rc;
+
+    p -> members = ( const char ** ) argv;
+    p -> archive_path = "";
+    p -> directory_path = "";
+    p -> mem_count = 0;
+    p -> dir_count = 0;
+    p -> c_count = 0;
+    p -> x_count = 0;
+    p -> t_count = 0;
+    p -> long_list = false;
+    p -> force = false;
+    p -> stdout = false;
+
+    rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+        Options, sizeof Options / sizeof ( Options [ 0 ] ) );
+    if ( rc == 0 )
+    {
+        rc = parse_params_int ( p, args );
+
+        if ( rc == 0 )
+            rc = validate_params ( p );
+
+    }
+
+    return rc;
+}
+
+rc_t validate_params ( Params *p )
+{
+    rc_t rc = 0;
+    uint32_t i;
+
+    /* must have a valid mode */
+    uint32_t cxt_count = p -> c_count + p -> x_count + p -> t_count;
+    if ( cxt_count == 0 )
+    {
+        rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcInsufficient );
+        LogErr ( klogErr, rc, "Require at least one option of create|extract|test" );
+        return rc;
+    }
+    else if ( cxt_count > 1 )
+    {
+        rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcExcessive );
+        LogErr ( klogErr, rc, "Too many option parameters" );
+        return rc;
+    }
+
+    /* if member count > 0, must be in create mode */
+    if ( p -> mem_count > 0 )
+    {
+        if ( p -> c_count == 0 )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcInvalid );
+            LogErr ( klogErr, rc, "Must use create option" );
+            return rc;
+        }
+    }
+
+    /* if creating, must have a directory OR member count > 0 */
+    if ( p -> c_count != 0 )
+    {
+        if ( ! ( p -> mem_count != 0 || p -> dir_count != 0 ) )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcInsufficient );           
+            LogErr ( klogErr, rc, "Must provide an input directory or file paths when creating " );
+            return rc;
+        }
+    }
+
+    /* if extracting, must have a directory */
+    if ( p -> x_count != 0 )
+    {
+        if ( p -> dir_count == 0 )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcInvalid );           
+            LogErr ( klogErr, rc, "Must provide a directory path when extracting" );
+            return rc;
+        }
+    }
+
+    /* test the archive path */
+
+
+    /* TBD stdout and md5 */
+
+    /* if we have parameter list, check each parameter for non-NULL and non-empty */
+    for ( i = 1; i <= p -> mem_count; ++ i )
+    {
+        const char * mbr = p -> members [ i ];
+        if ( mbr == NULL )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcNull );
+            LogErr ( klogErr, rc, " " );
+            return rc;
+        }
+
+        if ( mbr [ 0 ] == 0 )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcNull );
+            LogErr ( klogErr, rc, " " );
+            return rc;
+        }
+    }
+
+    /* if we have a directory, check non-NULL and non-empty */
+    if ( p -> dir_count != 0 )
+    {
+        if ( p -> directory_path == NULL )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcNull );
+            LogErr ( klogErr, rc, " " );
+            return rc;
+        }
+
+        if ( p -> directory_path [ 0 ] == 0 )
+        {
+            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcNull );
+            LogErr ( klogErr, rc, " " );
+            return rc;
+        }
+    }
+
+    return rc;
+}
+
diff --git a/tools/kar/kar-args.h b/tools/kar/kar-args.h
new file mode 100644
index 0000000..a8ff986
--- /dev/null
+++ b/tools/kar/kar-args.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_kar_args_
+#define _h_kar_args_
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+
+
+#define OPTION_CREATE    "create"
+#define OPTION_EXTRACT   "extract"
+#define OPTION_TEST      "test"
+#define OPTION_FORCE     "force"
+#define OPTION_LONGLIST  "long-list"
+#define OPTION_DIRECTORY "directory"
+#define OPTION_STDOUT    "stdout"
+#define OPTION_MD5       "md5"
+/*TBD - add alignment option */
+
+
+#define ALIAS_CREATE     "c"
+#define ALIAS_EXTRACT    "x"
+#define ALIAS_TEST       "t"
+#define ALIAS_FORCE      "f"
+#define ALIAS_LONGLIST   "l"
+#define ALIAS_DIRECTORY  "d"
+#define ALIAS_STDOUT     "Z"
+
+
+struct Args;
+
+typedef struct Params Params;
+struct Params
+{
+    /* standalone files & directories that can be added to archive under create mode */
+    const char ** members;
+    
+    /* path to archive being built or accessed */
+    const char *archive_path;
+
+    /* path to directory either for creating or extracting an archive */
+    const char *directory_path;
+
+    /* the number of members given for creating an archive */
+    uint32_t mem_count;
+
+    /* the number of times the directory option was specified */
+    uint32_t dir_count;
+
+    /* temporary information used for param validation and mode determination */
+    uint32_t c_count;
+    uint32_t x_count;
+    uint32_t t_count;
+
+    /* modifier to test mode for creating a long listing */
+    bool long_list;
+
+    /* modifier to create mode for overwriting an existing archive,
+       or to extract mode to overwrite an existing output directory */
+    bool force;
+
+    /* output to stdout */
+    bool stdout;
+    
+    /*modifier to create mode to create an md5sum compatible auxilary file*/
+    bool md5sum;
+};
+
+
+rc_t parse_params ( Params *p, struct Args *args, int argc, char * argv [] );
+rc_t validate_params ( Params *p );
+
+#endif /*_h_kar_args_*/
diff --git a/tools/kar/kar.c b/tools/kar/kar.c
new file mode 100644
index 0000000..46c9990
--- /dev/null
+++ b/tools/kar/kar.c
@@ -0,0 +1,2063 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "kar-args.h"
+
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/vector.h>
+#include <klib/container.h>
+#include <klib/sort.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/time.h>
+#include <sysalloc.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/toc.h>
+#include <kfs/sra.h>
+#include <kfs/md5.h>
+
+#include <kapp/main.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+#include <endian.h>
+#include <byteswap.h>
+
+
+/*******************************************************************************
+ * Globals + Forwards + Declarations + Definitions
+ */
+
+static uint64_t num_files;
+static uint64_t max_size = 0; 
+static uint64_t max_offset = 0;
+static uint32_t max_size_fw;
+static uint32_t max_offset_fw;
+
+
+typedef struct KARDir KARDir;
+
+typedef struct KAREntry KAREntry;
+struct KAREntry
+{
+    BSTNode dad;
+
+    KTime_t mod_time;
+
+    const char *name;
+    KARDir *parentDir;
+    
+    uint32_t access_mode;
+
+    uint8_t type;
+};
+
+struct KARDir
+{
+    KAREntry dad;
+    
+    BSTree contents;
+};
+
+typedef struct KARFile KARFile;
+struct KARFile
+{
+    KAREntry dad;
+
+    uint64_t byte_size;
+    uint64_t byte_offset;
+};
+
+typedef KARFile **KARFilePtrArray;
+
+typedef struct KARArchiveFile KARArchiveFile;
+struct KARArchiveFile
+{
+    uint64_t starting_pos;
+    uint64_t pos;
+    KFile * archive;
+};
+
+typedef struct KARAlias KARAlias;
+struct KARAlias
+{
+    KAREntry dad;
+
+    KAREntry * resolved;
+    const char *link;
+};
+
+
+enum
+{
+    ktocentrytype_unknown = -1,
+    ktocentrytype_notfound,
+    ktocentrytype_dir,
+    ktocentrytype_file,
+    ktocentrytype_chunked,
+    ktocentrytype_softlink,
+    ktocentrytype_hardlink,
+    ktocentrytype_emptyfile,
+    ktocentrytype_zombiefile
+};
+
+enum PrintMode
+{
+    pm_normal,
+    pm_longlist
+};
+
+typedef struct KARPrintMode KARPrintMode;
+struct KARPrintMode
+{
+    enum PrintMode pm;
+    uint32_t indent;
+};
+
+
+static rc_t kar_scan_directory ( const KDirectory *dir, BSTree *tree, const char *path );
+static size_t kar_entry_full_path ( const KAREntry * entry, const char * root_dir, char * buffer, size_t bsize );
+
+
+/*******************************************************************************
+ * Reporting functions
+ */
+
+static void kar_print ( BSTNode *node, void *data );
+
+static
+void printEntry ( const KAREntry *entry, KARPrintMode *kpm )
+{
+    char buffer [ 4096 ];
+    size_t bsize = sizeof buffer;
+
+    size_t num_writ = kar_entry_full_path ( entry, NULL, buffer, bsize );
+    if ( num_writ >= bsize )
+    {
+        rc_t rc = RC (rcExe, rcPath, rcWriting, rcBuffer, rcInsufficient);
+        pLogErr ( klogErr, rc, "Failed to write path for entry '$(name)'",
+                  "name=%s", entry -> name );
+        exit ( 3 );
+    }        
+
+    switch ( kpm -> pm )
+    {
+    case pm_normal:
+        KOutMsg ( "%s", buffer );
+        break;
+    case pm_longlist:
+    {
+        KTime tm;
+        KTimeLocal ( &tm, entry -> mod_time );
+
+        KOutMsg ( "%04u-%02u-%02u %02u:%02u:%02u %s", 
+                  
+                  tm . year, tm . month + 1, tm . day + 1, 
+                  tm . hour, tm . minute, tm . second, buffer);
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+static
+uint32_t get_field_width ( uint64_t num )
+{
+    uint64_t count;
+    if ( num == 0 )
+        return 3;
+
+    for ( count = 0; num != 0; ++ count )
+        num /= 10;
+
+    return count;
+}
+
+static
+void printFile ( const KARFile *file, KARPrintMode *kpm )
+{
+    if ( kpm -> pm == pm_longlist )
+    {
+        if ( file -> byte_size == 0 )
+            KOutMsg ( "%*c ", max_size_fw, '-' );
+        else
+            KOutMsg ( "%*lu ", max_size_fw, file -> byte_size );
+            
+        KOutMsg ( "%*lu ", max_offset_fw, file -> byte_offset );
+    }
+
+    printEntry ( ( KAREntry * ) file, kpm );
+    KOutMsg ( "\n" );
+}
+
+static
+void printDir ( const KARDir *dir, KARPrintMode *kpm )
+{
+    if ( kpm -> pm == pm_longlist )
+    {
+        KOutMsg ( "%*c ", max_size_fw, '-' );
+        KOutMsg ( "%*c ", max_offset_fw, '-' );
+    }
+
+    printEntry ( & dir -> dad, kpm );
+    KOutMsg ( "\n" );
+    BSTreeForEach ( &dir -> contents, false, kar_print, kpm );
+}
+
+static
+void printAlias ( const KARAlias *alias, KARPrintMode *kpm, uint8_t type )
+{
+    if ( kpm -> pm == pm_longlist )
+    {
+        KOutMsg ( "% *u ", max_size_fw, string_size ( alias -> link ) );
+        KOutMsg ( "% *c ", max_offset_fw, '-' );
+        printEntry ( ( KAREntry * ) alias, kpm );
+        KOutMsg ( " -> %s", alias -> link );
+    }
+    else
+        printEntry ( ( KAREntry * ) alias, kpm );
+    
+    KOutMsg ( "\n" );
+}
+
+/*
+static
+void printFile_tree ( const KARFile * file, uint32_t *indent )
+{
+    KOutMsg ( "%*s%s [ %lu, %lu ]\n", *indent, "", file -> dad . name, file -> byte_offset, file -> byte_size );
+}
+
+static
+void printDir_tree ( const KARDir *dir, uint32_t *indent )
+{
+    KOutMsg ( "%*s%s\n", *indent, "", dir -> dad . name );
+    *indent += 4;
+    BSTreeForEach ( &dir -> contents, false, kar_print, indent );
+    *indent -= 4;
+}
+*/
+static
+void print_mode ( uint32_t grp )
+{
+    char r = ( grp & 4 ) ? 'r' : '-';
+    char w = ( grp & 2 ) ? 'w' : '-';
+    char x = ( grp & 1 ) ? 'x' : '-';
+
+    KOutMsg ( "%c%c%c", r, w, x );
+}
+
+static
+void kar_print ( BSTNode *node, void *data )
+{
+    const KAREntry *entry = ( KAREntry * ) node;
+
+
+    KARPrintMode *kpm = ( KARPrintMode * ) data;
+
+    switch ( kpm -> pm )
+    {
+    case pm_normal:
+    {
+        switch ( entry -> type )
+        {
+        case kptFile:
+            printFile ( ( KARFile * ) entry, kpm );
+            break;
+        case kptDir:
+            printDir ( ( KARDir * ) entry, kpm );
+            break;
+        case kptAlias:
+        case kptFile | kptAlias:
+        case kptDir | kptAlias:
+            printAlias ( ( KARAlias * ) entry, kpm, entry -> type );
+            break;
+        default:
+            break;
+        }
+        break;
+    }
+    case pm_longlist:
+    {
+        switch ( entry -> type )
+        {
+        case kptFile:
+            KOutMsg ( "-" );
+            print_mode ( ( entry -> access_mode >> 6 ) & 7 );
+            print_mode ( ( entry -> access_mode >> 3 ) & 7 );
+            print_mode ( entry -> access_mode & 7 );
+            KOutMsg ( " " );
+            printFile ( ( KARFile * ) entry, kpm );
+            break;
+        case kptDir:
+            KOutMsg ( "d" );
+            print_mode ( ( entry -> access_mode >> 6 ) & 7 );
+            print_mode ( ( entry -> access_mode >> 3 ) & 7 );
+            print_mode ( entry -> access_mode & 7 );
+            KOutMsg ( " " );
+            printDir ( ( KARDir * ) entry, kpm );
+            break;
+        case kptAlias:
+        case kptFile | kptAlias:
+        case kptDir | kptAlias:
+            KOutMsg ( "l" );
+            print_mode ( ( entry -> access_mode >> 6 ) & 7 );
+            print_mode ( ( entry -> access_mode >> 3 ) & 7 );
+            print_mode ( entry -> access_mode & 7 );
+            KOutMsg ( " " );
+            printAlias ( ( KARAlias * ) entry, kpm, entry -> type );
+            break;
+        default:
+            break;
+        }
+        break;
+    }
+    default:
+        break;
+    }
+
+}
+
+
+
+/*******************************************************************************
+ * Create
+ */
+
+
+/********** KAREntry */
+
+static 
+void kar_entry_whack ( BSTNode *node, void *data )
+{
+    KAREntry *entry = ( KAREntry * ) node;
+
+    /* do the cleanup */
+    switch ( entry -> type )
+    {
+    case kptAlias:
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        free ( ( void * ) ( ( KARAlias * ) entry ) -> link );
+        break;
+    }
+
+    free ( entry );
+}
+
+static
+rc_t kar_entry_create ( KAREntry ** rtn, size_t entry_size,
+    const KDirectory * dir, const char * name, uint32_t type )
+{
+    rc_t rc;
+
+    size_t name_len = strlen ( name ) + 1;
+    KAREntry * entry = calloc ( 1, entry_size + name_len );
+    if ( entry == NULL )
+    {
+        rc = RC (rcExe, rcNode, rcAllocating, rcMemory, rcExhausted);
+        pLogErr ( klogErr, rc, "Failed to allocated memory for entry '$(name)'",
+                  "name=%s", name );
+    }
+    else
+    {
+        /* location for string copy */
+        char * dst = & ( ( char * ) entry ) [ entry_size ];
+
+        /* sanity check */
+        assert ( entry_size >= sizeof * entry );
+
+        /* populate the name by copying to the end of structure */
+        memmove ( dst, name, name_len );
+        entry -> name = dst;
+
+        entry -> type = type;
+
+        rc = KDirectoryAccess ( dir, & entry -> access_mode, "%s", entry -> name );
+        if ( rc != 0 )
+        {
+            pLogErr ( klogErr, rc, "Failed to get access mode for entry '$(name)'",
+                      "name=%s", entry -> name );
+        }
+        else
+        {
+            rc = KDirectoryDate ( dir, &entry -> mod_time, "%s", entry -> name );
+            if ( rc != 0 )
+            {
+                pLogErr ( klogErr, rc, "Failed to get modification for entry '$(name)'",
+                          "name=%s", entry -> name );
+            }
+            else
+            {
+                * rtn = entry;
+                return 0;
+            }
+        }
+
+        free ( entry );
+    }
+
+    * rtn = NULL;
+    return rc;
+}
+
+static 
+rc_t kar_entry_inflate ( KAREntry **rtn, size_t entry_size, const char *name, size_t name_len, 
+                         uint64_t mod_time, uint32_t access_mode, uint8_t type )
+{
+    rc_t rc;
+    KAREntry * entry;
+
+    STATUS ( STAT_QA, "inflating entry for '%s' with name_len: %u + entry_size: %u", 
+             name, ( uint32_t ) name_len, ( uint32_t ) entry_size );
+    entry = calloc ( 1, entry_size + name_len + 1 );
+    if ( entry == NULL )
+    {
+        rc = RC (rcExe, rcNode, rcAllocating, rcMemory, rcExhausted);
+        pLogErr ( klogErr, rc, "Failed to allocated memory for entry '$(name)'",
+                  "name=%s", name );
+    }
+    else
+    {
+        /* location for string copy */
+        char * dst = & ( ( char * ) entry ) [ entry_size ];
+
+        /* sanity check */
+        assert ( entry_size >= sizeof * entry );
+
+        /* populate the name by copying to the end of structure */
+        memmove ( dst, name, name_len + 1 );
+
+        entry -> name = dst;
+        entry -> mod_time = mod_time;
+        entry -> access_mode = access_mode;
+        entry -> type = type;
+
+        *rtn = entry;
+        STATUS ( STAT_QA, "finished inflating entry for '%s'", entry -> name );
+        return 0;
+    }
+
+    free ( entry );
+
+    * rtn = NULL;
+    return rc;
+}
+
+static
+void kar_entry_link_parent_dir ( BSTNode *node, void *data )
+{
+    KAREntry *entry = ( KAREntry * ) node ;
+
+    entry -> parentDir = ( KARDir * ) data;
+
+    if ( entry -> type == kptDir )
+    {
+        KARDir *dir = ( KARDir * ) entry;
+        BSTreeForEach ( &dir -> contents, false, kar_entry_link_parent_dir, dir ); 
+    }
+}
+
+static
+void kar_entry_insert_file ( BSTNode *node, void *data )
+{
+    KAREntry *entry = ( KAREntry * ) node ;
+
+    switch ( entry -> type )
+    {
+    case kptFile:
+    {
+        KARFile ** file_array = data;
+        file_array [ num_files ++ ] = ( KARFile * ) entry;
+        break;
+    }
+    case kptDir:
+    {
+        KARDir *dir = ( KARDir * ) entry;
+        BSTreeForEach ( &dir -> contents, false, kar_entry_insert_file, data ); 
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+static
+int64_t CC kar_entry_cmp ( const BSTNode *item, const BSTNode *n )
+{
+    /* TODO - ensure that this is consistent with the ordering in kfs/toc */
+    const KAREntry *a = ( const KAREntry * ) item;
+    const KAREntry *b = ( const KAREntry * ) n;
+
+    return strcmp ( a -> name, b -> name );
+}
+
+static
+int64_t CC kar_entry_sort_size ( const void *a, const void *b, void *ignore )
+{
+    /* Only KARFiles should make it here */
+    const KARFile *f1 = * ( const KARFile ** ) a;
+    const KARFile *f2 = * ( const KARFile ** ) b;
+
+    return ( int64_t ) f1 -> byte_size - ( int64_t ) f2 -> byte_size;
+}
+
+/********** BSTree population */
+
+static
+rc_t kar_add_file ( const KDirectory *dir, const char *name, void *data )
+{
+    KARFile *file;
+    rc_t rc = kar_entry_create ( ( KAREntry ** ) & file, sizeof * file, dir, name, kptFile );
+    if ( rc == 0 )
+    {
+        rc = KDirectoryFileSize ( dir, &file -> byte_size, "%s", file -> dad . name );
+        if ( rc != 0 )
+        {
+            pLogErr ( klogErr, rc, "Failed to get file size for file '$(name)'",
+                      "name=%s", file -> dad . name );
+        }
+        else
+        {
+            rc = BSTreeInsert ( ( BSTree * ) data, &file -> dad . dad, kar_entry_cmp );
+            if ( rc == 0 )
+            {
+                ++ num_files;
+                return 0;
+            }
+
+
+            pLogErr ( klogErr, rc, "Failed to insert file '$(name)' into tree",
+                      "name=%s", file -> dad . name );
+
+        }
+
+        free ( file );
+    }
+
+    return rc;
+}
+
+
+static
+rc_t kar_add_dir ( const KDirectory *parent_dir, const char *name, void *data )
+{
+    KARDir * dir;
+    rc_t rc = kar_entry_create ( ( KAREntry ** ) & dir, sizeof * dir, parent_dir, name, kptDir );
+    if ( rc == 0 )
+    {
+        /* BSTree is already initialized, but it doesn't hurt to be thorough */
+        BSTreeInit ( & dir -> contents );
+
+        rc = BSTreeInsert ( ( BSTree* ) data, &dir -> dad . dad, kar_entry_cmp );
+        if ( rc != 0 )
+        {
+            pLogErr ( klogErr, rc, "Failed to insert directory '$(name)' into tree",
+                      "name=%s", dir -> dad . name );
+        }
+        else
+        {
+            /* the name passed to us was that of a child directory.
+               we need to recursively process it - so open up the child directory. */
+            const KDirectory * child_dir;
+            rc = KDirectoryOpenDirRead ( parent_dir, & child_dir, false, "%s", name );
+            if ( rc != 0 )
+            {
+                pLogErr ( klogErr, rc, "Failed to open directory '$(name)' for scanning",
+                          "name=%s", dir -> dad . name );
+            }
+            else
+            {
+                /* recursively scan this directory to populate tree */
+                rc = kar_scan_directory ( child_dir, & dir -> contents, "." );
+
+                KDirectoryRelease ( child_dir );
+
+                if ( rc == 0 )
+                    return 0;
+
+                pLogErr ( klogErr, rc, "Failed to scan directory '$(name)'",
+                          "name=%s", dir -> dad . name );
+            }
+        }
+
+        free ( dir );
+    }
+
+    return rc;
+}
+
+
+static
+rc_t kar_add_alias ( const KDirectory *dir, const char *name, void *data, uint32_t type )
+{
+    KARAlias *alias;
+    rc_t rc = kar_entry_create ( ( KAREntry ** ) & alias, sizeof * alias, dir, name, type );
+    if ( rc == 0 )
+    {
+        char resolved [ 4096 ];
+        rc = KDirectoryResolveAlias ( dir, false, resolved, sizeof resolved, "%s", name );
+        if ( rc == 0 )
+        {
+            size_t rsize = string_size ( resolved );
+            char * copy = malloc ( rsize + 1 );
+            if ( copy == NULL )
+            {
+                rc = RC (rcExe, rcNode, rcAllocating, rcMemory, rcExhausted);
+                pLogErr ( klogErr, rc, "Failed to allocated memory for entry '$(name)'",
+                          "name=%s", name );
+            }
+            else
+            {
+                string_copy ( copy, rsize + 1, resolved, rsize );
+                alias -> link = copy;
+
+                rc = BSTreeInsert ( ( BSTree * ) data, &alias -> dad . dad, kar_entry_cmp );
+                if ( rc == 0 )
+                    return 0;
+                
+                
+                pLogErr ( klogErr, rc, "Failed to insert file '$(name)' into tree",
+                      "name=%s", alias -> dad . name );
+                
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t CC kar_populate_tree ( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    /* We have a KDirectory* to the directory being visited, plus an entry description,
+       giving the type and name of the entry. In addition, we have the data pointer
+       we sent in, which is either a BSTree* or a custom structure holding more data. */
+
+    switch ( type )
+    {
+    case kptFile:
+        return kar_add_file ( dir, name, data );
+
+    case kptDir:
+        return kar_add_dir ( dir, name, data );
+
+    case kptAlias:
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        return kar_add_alias ( dir, name, data, type );
+
+    default:
+        LogMsg ( klogWarn, "Unsupported file type" );
+    }
+
+    return 0;
+}
+
+/********** File searching  */
+
+static
+rc_t kar_scan_directory ( const KDirectory *dir, BSTree *tree, const char *path )
+{
+    /* In this case, the directory itself is NOT added to the tree,
+       but only its contents. Use a shallow (non-recursive) "Visit()"
+       to list contents and process each in turn. */
+
+    rc_t rc = KDirectoryVisit ( dir, false, kar_populate_tree, tree, "%s", path );
+    if ( rc != 0 )
+    {
+        pLogErr ( klogErr, rc, "Failed to scan directory $(directory)",
+                  "directory=%s", path );
+    }
+
+    return rc;
+}
+
+static
+rc_t kar_scan_path ( const KDirectory *dir, BSTree *tree, const char *path )
+{
+    /* At this point, we have a directory and a path.
+       if the path is a simple name, with no directory components before the leaf,
+       then the leaf can be added as above. But for all leading directories in the
+       path, we have to call ourselves recursively to discover the directory if it
+       Exists, or create it if it doesn't, in order to build our way down to the leaf. */
+    return -1;
+}
+
+/********** md5  */
+
+static 
+rc_t kar_md5 ( KDirectory *wd, KFile **archive, const char *path, KCreateMode mode )
+{
+    rc_t rc = 0;
+    KFile *md5_f;
+
+    /* create the *.md5 file to hold md5sum-compatible checksum */
+    rc = KDirectoryCreateFile ( wd, &md5_f, false, 0664, mode, "%s.md5", path );
+    if ( rc )
+        PLOGERR (klogFatal, (klogFatal, rc, "unable to create md5 file [$(A).md5]", PLOG_S(A), path));
+    else
+    {
+        KMD5SumFmt *fmt;
+                    
+        /* create md5 formatter to write to md5_f */
+        rc = KMD5SumFmtMakeUpdate ( &fmt, md5_f );
+        if ( rc )
+            LOGERR (klogErr, rc, "failed to make KMD5SumFmt");
+        else
+        {
+            KMD5File *kmd5_f;
+
+            size_t size = string_size ( path );
+            const char *fname = string_rchr ( path, size, '/' );
+            if ( fname ++ == NULL )
+                fname = path;
+
+            /* KMD5SumFmtMakeUpdate() took over ownership of "md5_f" */
+            md5_f = NULL;
+
+            /* create a file that knows how to calculate md5 as data
+                       are written-through to archive, and then write digest
+                       result to fmt, using "fname" as description. */
+            rc = KMD5FileMakeWrite ( &kmd5_f, * archive, fmt, fname );
+            KMD5SumFmtRelease ( fmt );
+            if ( rc )
+                LOGERR (klogErr, rc, "failed to make KMD5File");
+            else
+            {
+                /* success */
+                *archive = KMD5FileToKFile ( kmd5_f );
+                return 0;
+            }
+        }
+
+        /* error cleanup */
+        KFileRelease ( md5_f );
+    }
+
+    return rc;
+}
+
+/********** write to toc and archive  */
+
+static
+uint64_t align_offset ( uint64_t offset, uint64_t alignment )
+{
+    uint64_t mask = alignment - 1;
+    return ( offset + mask ) & ~ mask;
+}
+
+static
+void kar_write_header_v1 ( KARArchiveFile * af, uint64_t toc_size )
+{
+    rc_t rc;
+    size_t num_writ, hdr_size;
+
+    KSraHeader hdr;
+    memmove ( hdr.ncbi, "NCBI", sizeof hdr.ncbi );
+    memmove ( hdr.sra, ".sra", sizeof hdr.sra );
+
+    hdr.byte_order = eSraByteOrderTag;
+
+    hdr.version = 1;
+
+    /* calculate header size based upon version */
+    hdr_size = sizeof hdr - sizeof hdr . u + sizeof hdr . u . v1;
+
+    /* TBD - don't use hard-coded alignment - get it from cmdline */
+    hdr.u.v1.file_offset = align_offset ( hdr_size + toc_size, 4 );
+    af -> starting_pos = hdr . u . v1 . file_offset;
+
+    rc = KFileWriteAll ( af -> archive, af -> pos, &hdr, hdr_size, &num_writ );
+    if ( rc != 0 || num_writ != hdr_size )
+    {
+        if ( rc == 0 )
+            rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+
+        LogErr ( klogInt, rc, "Failed to write header" );
+        exit(5);
+    }
+
+    af -> pos += num_writ;
+}
+
+
+static
+rc_t CC kar_write_archive ( void *param, const void *buffer,
+    size_t bytes, size_t *num_writ )
+{
+    rc_t rc = 0;
+
+    KARArchiveFile * self = param;
+
+    rc = KFileWriteAll ( self -> archive, self -> pos, buffer, bytes, num_writ );
+    self -> pos += * num_writ;
+
+    return rc;
+}
+
+static
+rc_t CC kar_persist ( void *param, const void *node,
+    size_t *num_writ, PTWriteFunc write, void *write_param );
+
+static
+rc_t kar_persist_karentry ( const KAREntry * entry, int type_code,
+    size_t * num_writ, PTWriteFunc write, void *write_param )
+{
+    rc_t rc = 0;
+    size_t total_written, total_expected;
+
+    uint16_t legacy_name_len;
+    uint8_t legacy_type_code = ( uint8_t ) type_code;
+
+    /* actual length of the string in bytes */
+    size_t name_len = strlen ( entry -> name );
+
+    STATUS ( STAT_QA, "%s: '%.*s'"
+             , __func__
+             , ( uint32_t ) name_len, entry -> name
+        );
+
+    if ( name_len > UINT16_MAX )
+        return RC (rcExe, rcNode, rcWriting, rcPath, rcExcessive);
+
+    legacy_name_len = ( uint16_t ) name_len;
+
+    /* determine size */
+    total_expected
+        = sizeof legacy_name_len
+        + name_len
+        + sizeof entry -> mod_time
+        + sizeof entry -> access_mode
+        + sizeof legacy_type_code
+        ;
+
+    /* if just determining toc size - return */
+    if ( write == NULL )
+    {
+        * num_writ = total_expected;
+
+        return 0;
+    }
+
+    /* check */
+    total_written = 0;
+    rc = ( * write ) ( write_param, &legacy_name_len, sizeof legacy_name_len, num_writ );
+    if ( rc == 0 )
+    {
+        total_written = * num_writ;
+        rc = ( * write ) ( write_param, entry -> name, name_len, num_writ );
+        if ( rc == 0 )
+        {
+            total_written += * num_writ;
+            rc = ( * write ) ( write_param, &entry -> mod_time, sizeof entry -> mod_time, num_writ );
+            if ( rc == 0 )
+            {
+                total_written += * num_writ;
+                rc = ( * write ) ( write_param, &entry -> access_mode, sizeof entry -> access_mode, num_writ );
+                if ( rc == 0 )
+                {
+                    total_written += * num_writ;
+                    rc = ( * write ) ( write_param, &legacy_type_code, sizeof legacy_type_code, num_writ );
+                    if ( rc == 0 )
+                        total_written += * num_writ;
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && total_written != total_expected )
+        rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncorrect );
+
+    * num_writ = total_written;
+
+    return rc;
+}
+
+static
+rc_t kar_persist_karfile ( const KARFile * entry, size_t *num_writ, PTWriteFunc write, void *write_param )
+{
+    size_t total_expected, total_written;
+    rc_t rc = kar_persist_karentry ( & entry -> dad,
+                                     entry -> byte_size == 0 ? ktocentrytype_emptyfile : ktocentrytype_file,
+                                     num_writ, write, write_param );
+    if ( rc == 0 )
+    {
+        total_written = * num_writ;
+
+        /* empty files are given a special type in the toc */
+        if ( entry -> byte_size == 0 )
+            total_expected = total_written;
+        else
+        {
+            /* determine size */
+            total_expected
+                = total_written               /* from KAREntry       */
+                + sizeof entry -> byte_offset  /* specific to KARFile */
+                + sizeof entry -> byte_size
+                ;
+
+            /* if determining size of toc - return */
+            if ( write == NULL )
+            {
+                * num_writ = total_expected;
+                return 0;
+            }
+
+            /* actually write the toc file entry */
+            rc = ( * write ) ( write_param, &entry -> byte_offset, sizeof entry -> byte_offset, num_writ );
+            if ( rc == 0 )
+            {
+                total_written += * num_writ;
+                rc = ( * write ) ( write_param, &entry -> byte_size, sizeof entry -> byte_size, num_writ );
+                if ( rc == 0 )
+                    total_written += *num_writ;
+            }
+        }
+    }
+
+    if ( rc == 0 && total_written != total_expected )
+    {
+        STATUS ( STAT_QA, "total_written ( %zu ) != total_expected ( %zu )", total_written, total_expected );
+        rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncorrect );
+    }
+
+    *num_writ = total_written;
+
+    return rc;
+}
+
+
+static
+rc_t kar_persist_kardir ( const KARDir * entry, size_t *num_writ, PTWriteFunc write, void *write_param )
+{
+    rc_t rc = kar_persist_karentry ( & entry -> dad, ktocentrytype_dir, num_writ, write, write_param );
+    if ( rc == 0 )
+    {
+        size_t entry_writ = * num_writ;
+        rc = BSTreePersist ( &entry -> contents, num_writ, write, write_param, kar_persist, NULL );
+        if ( rc == 0 )
+            * num_writ += entry_writ;
+    }
+
+    return rc;
+}
+
+static
+rc_t kar_persist_karalias ( const KARAlias *entry, size_t *num_writ, PTWriteFunc write, void *write_param )
+{
+    size_t total_expected, total_written;
+    rc_t rc = kar_persist_karentry ( & entry -> dad, ktocentrytype_softlink, num_writ, write, write_param );
+    if ( rc == 0 )
+    {
+        size_t link_size = string_size ( entry -> link );
+        uint16_t legacy_link_len = ( uint16_t ) link_size;
+
+        if ( link_size > UINT16_MAX )
+            return RC (rcExe, rcNode, rcWriting, rcPath, rcExcessive);
+
+        total_written = * num_writ;
+        
+        /* determine size */
+        total_expected
+            = total_written               /* from KAREntry       */
+            + sizeof legacy_link_len
+            + link_size  /* specific to KARAlias */
+            ;
+
+        /* if determining size of toc - return */
+        if ( write == NULL )
+        {
+            * num_writ = total_expected;
+            return 0;
+        }
+
+        /* actually write the toc file entry */
+        rc = ( * write ) ( write_param, &legacy_link_len, sizeof legacy_link_len, num_writ );
+        if ( rc == 0 )
+        {
+            total_written += * num_writ;
+
+            rc = ( * write ) ( write_param, entry -> link, link_size, num_writ );
+            if ( rc == 0 )
+                total_written += * num_writ;
+        }
+    }
+
+    if ( rc == 0 && total_written != total_expected )
+    {
+        STATUS ( STAT_QA, "total_written ( %zu ) != total_expected ( %zu )", total_written, total_expected );
+        rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncorrect );
+    }
+
+    *num_writ = total_written;
+
+    return rc;
+}
+
+static
+rc_t CC kar_persist ( void *param, const void *node,
+    size_t *num_writ, PTWriteFunc write, void *write_param )
+{
+    rc_t rc = Quitting ();
+    const KAREntry * entry = ( const KAREntry * ) node;
+
+    if ( rc != 0 )
+        return rc;
+
+    STATUS ( STAT_QA, "%s called", __func__ );
+
+    switch ( entry -> type )
+    {
+    case kptFile:
+    {
+        STATUS ( STAT_QA, "file entry" );
+        rc = kar_persist_karfile ( ( const KARFile* ) entry, num_writ, write, write_param );
+        return rc;
+    }
+    case kptDir:
+    {
+        STATUS ( STAT_QA, "directory entry" );
+        rc = kar_persist_kardir ( ( const KARDir* ) entry, num_writ, write, write_param );
+        break;
+    }
+    case kptAlias:
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        STATUS ( STAT_USR, "alias entry" );
+        rc = kar_persist_karalias ( ( const KARAlias * ) entry, num_writ, write, write_param );
+        break;
+    default:
+        STATUS ( 0, "unknown entry type: id %u", entry -> type );
+        break;
+    }
+
+    return rc;
+}
+
+static
+uint64_t kar_eval_toc_size ( const BSTree * tree )
+{
+    rc_t rc;
+    size_t toc_size = 0;
+    STATUS ( STAT_QA, "evaluating toc size" );
+    rc = BSTreePersist ( tree, & toc_size, NULL, NULL, kar_persist, NULL );
+    if ( rc != 0 )
+    {
+        LogErr ( klogInt, rc, "Failed to determine TOC size" );
+        exit(5);
+    }
+    STATUS ( STAT_QA, "toc size reported as %lu bytes", toc_size );
+
+    return toc_size;
+}
+
+static
+void kar_write_toc ( KARArchiveFile * af, const BSTree * tree )
+{
+    rc_t rc;
+    size_t toc_size = 0;
+
+    STATUS ( STAT_QA, "writing toc" );
+    rc = BSTreePersist ( tree, & toc_size, kar_write_archive, af, kar_persist, NULL );
+    if ( rc != 0 )
+    {
+        LogErr ( klogInt, rc, "Failed to determine TOC size" );
+        exit(5);
+    }
+
+    STATUS ( STAT_QA, "toc written" );
+}
+
+
+static 
+rc_t kar_prepare_toc ( const BSTree *tree, KARFilePtrArray *file_array_ptr )
+{
+    rc_t rc = 0;
+    
+    /* create an array of KARFile* that will be sorted by size */
+    KARFilePtrArray file_array = calloc ( num_files, sizeof * file_array );
+    if ( file_array == NULL )
+        rc = RC ( rcExe, rcBuffer, rcAllocating, rcMemory, rcExhausted );
+    else
+    {
+        uint64_t i, offset;
+
+        /* pass back output param */
+        * file_array_ptr = file_array;
+
+        num_files = 0; /* global */
+
+        /* now fill the array with KARFile* by walking the tree again */
+        BSTreeForEach ( tree, false, kar_entry_insert_file, file_array );
+        
+        /* now, sort the array based upon size - use <klib/sort.h> */
+        ksort ( file_array, num_files, sizeof * file_array, kar_entry_sort_size, NULL );
+        
+        /* now you can assign offsets to the files in the array */
+        for ( i = offset = 0; i < num_files; ++ i )
+        {
+            KARFile *f = file_array [ i ];
+            f -> byte_offset = offset;
+            
+            offset += f -> byte_size;
+
+            /* perform aligning to boundary */
+            offset = align_offset ( offset, 4 );
+        }
+    }
+    
+    return rc;
+}
+
+static
+size_t kar_entry_full_path ( const KAREntry * entry, const char * root_dir, char * buffer, size_t bsize )
+{
+    size_t offset = 0;
+    if ( entry -> parentDir != NULL )
+    {
+        offset = kar_entry_full_path ( & entry -> parentDir -> dad, root_dir, buffer, bsize );
+        if ( offset < bsize )
+            buffer [ offset ++ ] = '/';
+    }
+    else if ( root_dir != NULL && root_dir [ 0 ] != 0 )
+    {
+        offset = string_copy_measure ( buffer, bsize, root_dir );
+        if ( buffer [ offset - 1 ] != '/' && offset < bsize )
+            buffer [ offset ++ ] = '/';
+    }
+
+    return string_copy_measure ( & buffer [ offset ], bsize - offset, entry -> name ) + offset;
+}
+
+static
+void kar_write_file ( KARArchiveFile *af, const KDirectory *wd, const KARFile *file, const char * root_dir )
+{
+    rc_t rc;
+    char *buffer;
+    size_t num_read, align_size;
+    uint64_t pos = 0;
+    char align_buffer [ 4 ] = "0000";
+    size_t bsize = 128 * 1024 * 1024;
+
+    const KFile *f;
+
+    char filename [ 4096 ];
+    size_t path_size;
+
+    if ( file -> byte_size == 0 )
+        return;
+
+    if ( bsize > file -> byte_size )
+        bsize = file -> byte_size;
+
+    STATUS ( STAT_QA, "writing file '%s'", file -> dad . name );
+
+    path_size = kar_entry_full_path ( & file -> dad, root_dir, filename, sizeof filename );
+    if ( path_size == sizeof filename )
+    {
+        /* path name was somehow too long */
+        rc = RC ( rcExe, rcFile, rcWriting, rcMemory, rcExhausted );
+        LogErr ( klogInt, rc, "File path was too long" );
+        exit (5);
+    }
+
+    STATUS ( STAT_QA, "opening: full path is '%s'", filename );
+    rc = KDirectoryOpenFileRead ( wd, &f, "%s", filename );
+    if ( rc != 0 )
+    {        
+        pLogErr ( klogInt, rc, "Failed to open file $(fname)", "fname=%s", file -> dad . name );
+        exit (6);
+    }
+    
+    STATUS ( STAT_QA, "allocating buffer of %,zu bytes", bsize );
+    buffer = malloc ( bsize );
+    if ( buffer == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcMemory, rcExhausted );
+        pLogErr ( klogInt, rc, "Failed to open file $(fname)", "fname=%s", file -> dad . name );
+        exit ( 7 );
+    }
+
+    /* establish current position */
+    align_size = align_offset ( af -> pos, 4 ) - af -> pos;
+    if ( align_size != 0  )
+        rc = KFileWriteAll ( af -> archive, af -> pos, align_buffer, align_size, NULL );
+
+    af -> pos = af -> starting_pos + file -> byte_offset;
+
+    while ( rc == 0 && pos < file -> byte_size )
+    {
+        size_t num_writ, to_read = bsize;
+
+        if ( pos + to_read > file -> byte_size )
+            to_read = ( size_t ) ( file -> byte_size - pos );
+
+        STATUS ( STAT_QA, "about to read at offset %lu from input file '%s'", pos, filename );
+        rc = KFileReadAll ( f, pos, buffer, to_read, & num_read );
+        if ( rc != 0 || num_read == 0 )
+            break;
+
+        STATUS ( STAT_QA, "about to write %zu bytes to archive", num_read );    
+        rc = KFileWriteAll ( af -> archive, af -> pos, buffer, num_read, & num_writ );
+        if ( rc != 0 || num_writ != num_read )
+        {
+            /* error */
+            break;
+        }
+
+        af -> pos += num_writ;
+        pos += num_read;
+    }
+
+    STATUS ( STAT_PRG, "freeing memory" );
+    free ( buffer );
+
+    STATUS ( STAT_QA, "closing '%s'", filename );
+    KFileRelease ( f );
+}
+
+static
+rc_t kar_make ( const KDirectory * wd, KFile *archive, const BSTree *tree, const char * root_dir )
+{
+    rc_t rc = 0;
+
+    KARFilePtrArray file_array;
+    
+    rc = kar_prepare_toc ( tree, &file_array );
+    if ( rc == 0 )
+    {
+        uint64_t i, toc_size;
+        KARArchiveFile af;
+        /* evaluate toc size */
+        toc_size = kar_eval_toc_size ( tree );
+
+        af . starting_pos = 0;
+        af . pos = 0;
+        af . archive = archive;
+
+        /*write header */
+        kar_write_header_v1 ( & af, toc_size );
+
+        /* write toc */
+        kar_write_toc ( & af, tree );
+
+        /* write each of the files in order */
+        STATUS ( STAT_QA, "about to write %u files", num_files );
+        for ( i = 0; i < num_files; ++ i )
+        {
+            STATUS ( STAT_QA, "writing file %u: '%s'", i, file_array [ i ] -> dad . name );
+            kar_write_file ( & af, wd, file_array [ i ], root_dir );
+        }
+        
+        free ( file_array );
+    }
+    
+    return rc;
+}
+
+
+/********** main create execution  */
+
+
+static
+rc_t kar_create ( const Params *p )
+{
+    rc_t rc;
+
+    KDirectory *wd;
+
+    rc = KDirectoryNativeDir ( &wd );
+    if ( rc != 0 )
+        LogErr ( klogInt, rc, "Failed to create working directory" );
+    else
+    {
+        KFile *archive;
+        KCreateMode mode = ( p -> force ? kcmInit : kcmCreate ) | kcmParents;
+        rc = KDirectoryCreateFile ( wd, &archive, false, 0666, mode, 
+                                    "%s", p -> archive_path );
+        if ( rc != 0 )
+        {
+            pLogErr ( klogErr, rc, "Failed to create archive $(archive)",
+                      "archive=%s", p -> archive_path );
+        }
+        else
+        {
+            if ( p -> md5sum )
+                rc = kar_md5 ( wd, &archive, p -> archive_path, mode );
+ 
+            if ( rc == 0 )
+            {
+                BSTree tree;
+                BSTreeInit ( & tree );
+                
+                /* build contents by walking input directory if given,
+                   and adding the individual members if given */
+                if ( p -> dir_count != 0 )
+                {
+                    rc = kar_scan_directory ( wd, & tree, p -> directory_path );
+                    if ( rc == 0 )
+                    {   
+                        uint64_t i;
+                        for ( i = 1; rc == 0 && i <= p -> mem_count; ++ i )
+                            rc = kar_scan_path ( wd, & tree, p -> members [ i ] );
+                        
+                        if ( rc == 0 )
+                        {
+                            BSTreeForEach ( &tree, false, kar_entry_link_parent_dir, NULL );
+                            
+                            rc = kar_make ( wd, archive, &tree, p -> directory_path );
+                            if ( rc != 0 )
+                                LogErr ( klogInt, rc, "Failed to build archive" );
+                        }
+                    }
+                }
+            
+                BSTreeWhack ( & tree, kar_entry_whack, NULL );
+            }
+            
+            KFileRelease ( archive );
+        }
+
+        KDirectoryRelease ( wd );
+    }
+
+    return rc;
+}
+
+/*******************************************************************************
+ * Test / Extract
+ */
+
+static
+uint64_t kar_verify_header ( const KFile *archive, KSraHeader *hdr )
+{
+    rc_t rc;
+    
+    size_t num_read;
+   
+
+    STSMSG (1, ("Verifying header\n"));
+
+    rc = KFileReadAll ( archive, 0, hdr, sizeof * hdr, &num_read );
+    if ( rc != 0 )
+    {
+        LOGERR (klogErr, rc, "failed to access archive file");
+        exit ( 1 );
+    }
+
+    if ( num_read < sizeof * hdr - sizeof hdr -> u )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcOffset, rcInvalid );
+        LOGERR (klogErr, rc, "corrupt archive file - invalid header");
+        exit ( 1 );
+    }
+
+    /* verify "ncbi" and "sra" members */
+    if ( memcmp ( hdr -> ncbi, "NCBI", sizeof hdr -> ncbi ) != 0 ||
+         memcmp ( hdr -> sra, ".sra", sizeof hdr -> sra ) != 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcFormat, rcInvalid );
+        LOGERR (klogErr, rc, "invalid file format");
+        exit ( 1 );
+    }
+
+    /* test "byte_order".
+       this is allowed to be either eSraByteOrderTag or eSraByteOrderReverse.
+       anything else, is garbage */
+    if ( hdr -> byte_order != eSraByteOrderTag && hdr -> byte_order != eSraByteOrderReverse )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcByteOrder, rcInvalid );
+        LOGERR (klogErr, rc, "failed to access archive file - invalid byte order");
+        exit ( 1 );
+    }
+
+    if ( hdr -> byte_order == eSraByteOrderReverse )
+    {
+        hdr -> version = bswap_32 ( hdr -> version );
+    }
+
+    /* test version */
+    if ( hdr -> version == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcInterface, rcInvalid );
+        LOGERR (klogErr, rc, "invalid version");
+        exit ( 1 );
+    }
+
+    if ( hdr -> version > 1 )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcInterface, rcUnsupported );
+        LOGERR (klogErr, rc, "version not supported");
+        exit ( 1 );
+    }
+
+    /* test actual size against specific header version */
+    if ( num_read < sizeof * hdr - sizeof hdr -> u + sizeof hdr -> u . v1 )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcOffset, rcIncorrect );
+        LOGERR (klogErr, rc, "failed to read header");
+        exit ( 1 );
+    }
+
+    return num_read;
+}
+
+static
+size_t toc_data_copy ( void * dst, size_t dst_size, const uint8_t * toc_data, size_t toc_data_size, size_t offset )
+{
+    if ( offset + dst_size > toc_data_size )
+    {
+        rc_t rc = RC ( rcExe, rcFile, rcValidating, rcOffset, rcInvalid );
+        LOGERR (klogErr, rc, "toc offset out of bounds");
+        exit ( 3 );
+    }
+
+    memmove ( dst, & toc_data [ offset ], dst_size );
+    return offset + dst_size;
+}
+
+static
+int64_t kar_alias_find_link ( const void *item, const BSTNode *node )
+{
+    const char *link = ( const char * ) item;
+    KAREntry *entry = ( KAREntry * ) node;
+    
+    uint64_t link_size = string_size ( link );
+    uint64_t name_size = string_size ( entry -> name );
+
+    return string_cmp ( item, link_size, entry -> name, name_size, link_size );
+}
+
+
+static
+void kar_alias_link_type ( BSTNode *node, void *data )
+{
+    /* archive fake root directory node */
+    const KARDir * root = ( const KARDir * ) data;
+
+    const KARDir *dir;
+    KAREntry *entry = ( KAREntry * ) node;
+
+    if ( entry -> type == kptDir )
+    {
+        /* need to go recursive on contents */
+        dir = ( const KARDir * ) entry;
+        BSTreeForEach ( &dir -> contents, false, kar_alias_link_type, ( void * ) root );
+    }
+    else if ( entry -> type == kptAlias )
+    {
+        const KAREntry *e;
+
+        size_t lsize;
+        const char *link, *end;
+        KARAlias *alias = ( KARAlias * ) entry;
+
+        link = alias -> link;
+        lsize = string_size ( link );
+        end = link + lsize;
+
+        /* if the link is an absolute path, it's outside of archive */
+        if ( link [ 0 ] == '/' )
+            return;
+
+        /* establish root for search */
+        dir = entry -> parentDir;
+        if ( dir == NULL )
+            dir = root;
+        e = & dir -> dad;
+
+        /* walk the path */
+        while ( e != NULL && link < end )
+        {
+            /* get the segment */
+            const char *seg = link;
+            char *sep = string_chr ( link, lsize, '/' );
+            if ( sep == NULL )
+                link = end;
+            else
+            {
+                *sep = 0;
+                link = sep + 1;
+            }
+
+            /* if the segment is empty, then we saw '/'.
+               if the segment is a single '.', then it means same thing */
+            if ( seg [ 0 ] == 0  ||
+                 ( seg [ 0 ] == '.' && seg [ 1 ] == 0 ) )
+            {
+                /* do nothing */
+            }
+            else if ( seg [ 0 ] == '.' && seg [ 1 ] == '.' && seg [ 2 ] == 0 )
+            {
+                /* move up to parent */
+                if ( e == & root -> dad )
+                    e = NULL;
+                else
+                {
+                    e = & e -> parentDir -> dad;
+                    if ( e == NULL )
+                        e = & root -> dad;
+                }
+            }
+            else
+            {
+                rc_t rc;
+
+                while ( e != NULL && e -> type == kptAlias )
+                {
+                    assert ( ( ( KARAlias * ) e ) -> resolved == NULL );
+                    kar_alias_link_type ( ( BSTNode * ) & e -> dad, ( void * ) root );
+                    e = ( ( KARAlias * ) e ) -> resolved;
+                }
+
+                if ( e -> type == ( kptDir | kptAlias ) )
+                {
+                    assert ( ( ( KARAlias * ) e ) -> resolved != NULL );
+                    e = ( ( KARAlias * ) e ) -> resolved;
+                }
+
+                /* move down */
+                if ( e -> type == kptDir )
+                {
+                    dir = ( KARDir * ) e;
+                    e = ( KAREntry * ) BSTreeFind ( & dir -> contents, seg, kar_alias_find_link );
+
+                    while ( e != NULL && ( e -> type & kptAlias ) != 0 )
+                    {
+                        if ( ( ( const KARAlias * ) e ) -> resolved == NULL )
+                            break;
+                        e = ( ( const KARAlias * ) e ) -> resolved;
+                    }
+                }
+                else
+                {
+                    e = NULL;
+                    rc = RC ( rcExe, rcPath, rcValidating, rcPath, rcInvalid );
+                    LOGERR (klogErr, rc, "unable to locate symlink reference");
+                }
+            }
+
+            if ( sep != NULL )
+                *sep = '/';
+        }
+
+        if ( e != NULL )
+        {
+            assert ( link == end );
+            alias -> dad . type = e -> type | kptAlias;
+            alias -> resolved = ( KAREntry * ) e;
+        }
+    }
+}
+
+static 
+void kar_inflate_toc ( PBSTNode *node, void *data )
+{
+    rc_t rc = 0;
+
+    size_t offset = 0;
+    const uint8_t * toc_data = node -> data . addr;
+    char buffer [ 4096 ], * name = buffer;
+    uint16_t name_len = 0;
+    uint64_t mod_time = 0;
+    uint32_t access_mode = 0;
+    uint8_t type_code = 0;
+
+    offset = toc_data_copy ( & name_len, sizeof name_len, toc_data, node -> data . size, offset );
+    if ( name_len >= sizeof buffer )
+    {
+        name = malloc ( name_len + 1 );
+        if ( name == NULL )
+            exit ( 10 );
+    }
+    offset = toc_data_copy ( name, name_len, toc_data, node -> data . size, offset );
+    name [ name_len ] = 0;
+    STATUS ( STAT_QA, "inflating '%s'", name );
+    offset = toc_data_copy ( & mod_time, sizeof mod_time, toc_data, node -> data . size, offset );
+    offset = toc_data_copy ( & access_mode, sizeof access_mode, toc_data, node -> data . size, offset );
+    offset = toc_data_copy ( & type_code, sizeof type_code, toc_data, node -> data . size, offset );
+
+    switch ( type_code )
+    {
+    case ktocentrytype_file:
+    {
+        KARFile *file;
+
+        rc = kar_entry_inflate ( ( KAREntry ** ) &file, sizeof *file, name, name_len,
+             mod_time, access_mode, kptFile );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed inflate KARFile");
+            exit ( 3 );
+        }
+
+        offset = toc_data_copy ( & file -> byte_offset, sizeof file -> byte_offset, toc_data, node -> data . size, offset );
+        toc_data_copy ( & file -> byte_size, sizeof file -> byte_size, toc_data, node -> data . size, offset );
+
+        if ( file -> byte_size > max_size )
+            max_size = file -> byte_size;
+        if ( file -> byte_offset > max_offset )
+            max_offset = file -> byte_offset;
+
+        STATUS ( STAT_QA, "inserting '%s'", file -> dad . name );
+        rc = BSTreeInsert ( ( BSTree * ) data, &file -> dad . dad, kar_entry_cmp );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed insert KARFile into tree");
+            exit ( 3 );
+        }
+
+        break;
+    }
+    case ktocentrytype_emptyfile:
+    {
+        KARFile *file;
+
+        rc = kar_entry_inflate ( ( KAREntry ** ) &file, sizeof *file, name, name_len,
+             mod_time, access_mode, kptFile );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed inflate KARFile");
+            exit ( 3 );
+        }
+
+        file -> byte_offset = 0;
+        file -> byte_size = 0;
+
+        STATUS ( STAT_QA, "inserting '%s'", file -> dad . name );
+        rc = BSTreeInsert ( ( BSTree * ) data, &file -> dad . dad, kar_entry_cmp );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed insert KARFile into tree");
+            exit ( 3 );
+        }
+
+        break;
+    }
+    case ktocentrytype_dir:
+    {
+        KARDir *dir;
+        PBSTree *ptree;
+
+        rc = kar_entry_inflate ( ( KAREntry ** ) &dir, sizeof *dir, name, name_len, mod_time, access_mode, kptDir );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed inflate KARDir");
+            exit ( 3 );
+        }
+
+        BSTreeInit ( &dir -> contents );
+
+
+        rc = PBSTreeMake ( & ptree, & toc_data [ offset ], node -> data . size - offset, false );
+        if ( rc != 0 )
+            LOGERR (klogErr, rc, "failed make PBSTree");
+        else
+        {
+            PBSTreeForEach ( ptree, false, kar_inflate_toc, &dir -> contents );
+            
+            PBSTreeWhack ( ptree );
+        }
+
+        rc = BSTreeInsert ( ( BSTree * ) data, &dir -> dad . dad, kar_entry_cmp );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed insert KARDir into tree");
+            exit ( 3 );
+        }
+        
+        break;
+    }
+    case ktocentrytype_softlink:
+    {
+        KARAlias *alias;
+
+        rc = kar_entry_inflate ( ( KAREntry ** ) &alias, sizeof *alias, name, name_len, mod_time, access_mode, kptAlias );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed inflate KARAlias");
+            exit ( 3 );
+        }
+
+        /* need to reuse name* for soft-link string */
+        if ( name != buffer )
+            free ( name );
+        
+        offset = toc_data_copy ( & name_len, sizeof name_len, toc_data, node -> data . size, offset );
+        name = malloc ( name_len + 1 );
+        if ( name == NULL )
+            exit ( 10 );
+        offset = toc_data_copy ( name, name_len, toc_data, node -> data . size, offset );
+        name [ name_len ] = 0;
+
+        alias -> link = name;
+        name = buffer;
+
+        rc = BSTreeInsert ( ( BSTree * ) data, &alias -> dad . dad, kar_entry_cmp );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed insert KARAlias into tree");
+            exit ( 3 );
+        }
+        break;
+    }
+    default:
+        STATUS ( 0, "unknown entry type: id %u", type_code );
+        break;
+    }
+
+    if ( name != buffer )
+        free ( name );
+}
+
+static
+rc_t kar_extract_toc ( const KFile *archive, BSTree *tree, uint64_t *toc_pos, const size_t toc_size )
+{
+    rc_t rc = 0;
+
+    char *buffer;
+    buffer = malloc ( toc_size );
+    if ( buffer == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcAllocating, rcMemory, rcExhausted );
+        LOGERR (klogErr, rc, "failed allocate memory");
+    }
+    else
+    {
+        size_t num_read;
+
+        rc = KFileReadAll ( archive, *toc_pos, buffer, toc_size, &num_read );
+        if ( rc != 0 )
+        {
+            LOGERR (klogErr, rc, "failed to access archive file");
+            exit ( 2 );
+        }
+
+        if ( num_read < toc_size )
+        {
+            rc = RC ( rcExe, rcFile, rcValidating, rcOffset, rcInsufficient );
+            LOGERR (klogErr, rc, "failed to read header");
+        }
+        else
+        {
+            PBSTree *ptree;
+            
+            rc = PBSTreeMake ( &ptree, buffer, num_read, false );
+            if ( rc != 0 )
+                LOGERR (klogErr, rc, "failed make PBSTree");
+            else
+            {
+                PBSTreeForEach ( ptree, false, kar_inflate_toc, tree );
+
+                PBSTreeWhack ( ptree );
+            }
+        }
+
+        free ( buffer );
+    }
+
+    return rc;
+}
+
+typedef struct extract_block extract_block;
+struct extract_block
+{
+    uint64_t extract_pos;
+    
+    KDirectory *cdir;
+    const KFile *archive;
+
+    rc_t rc;
+
+};
+
+static bool CC kar_extract ( BSTNode *node, void *data );
+
+static
+rc_t extract_file ( const KARFile *src, const extract_block *eb )
+{
+    KFile *dst;
+    char *buffer;
+    uint64_t num_writ;
+
+    rc_t rc = KDirectoryCreateFile ( eb -> cdir, &dst, false, 0200, 
+                                     kcmCreate, "%s", src -> dad . name ); 
+    if ( rc != 0 )
+    {
+        pLogErr (klogErr, rc, "failed extract to file '$(fname)'", "fname=%s", src -> dad . name );
+        exit ( 4 );
+    }
+
+    buffer = malloc ( src -> byte_size );
+    if ( buffer == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcAllocating, rcMemory, rcExhausted );
+        pLogErr (klogErr, rc, "failed to allocate '$(mem)'", "mem=%lu", src -> byte_size );
+        exit ( 4 );
+    }
+
+    rc = KFileReadExactly ( eb -> archive, src -> byte_offset + eb -> extract_pos, buffer, src -> byte_size );
+    if ( rc != 0 )
+    {
+        pLogErr (klogErr, rc, "failed to read from archive '$(fname)'", "fname=%s", src -> dad . name );
+        exit ( 4 );
+    }
+
+    rc = KFileWriteAll ( dst, 0, buffer, src -> byte_size, &num_writ );
+    if ( rc != 0 )
+    {
+        pLogErr (klogErr, rc, "failed to write to file '$(fname)'", "fname=%s", src -> dad . name );
+        exit ( 4 );
+    }
+    if ( num_writ < src -> byte_size )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+        pLogErr (klogErr, rc, "failed to write to file '$(fname)'", "fname=%s", src -> dad . name );
+        exit ( 4 );
+    }
+    
+    KFileRelease ( dst );
+
+    free ( buffer );
+
+    return rc;
+}
+
+static
+rc_t extract_dir ( const KARDir *src, const extract_block *eb )
+{
+    rc_t rc;
+
+    STATUS ( STAT_QA, "extracting dir: %s", src -> dad . name );
+    rc = KDirectoryCreateDir ( eb -> cdir, 0700, kcmCreate, "%s", src -> dad . name );
+    if ( rc == 0 )
+    {
+        extract_block c_eb = *eb;
+        rc = KDirectoryOpenDirUpdate ( eb -> cdir, &c_eb . cdir, false, "%s", src -> dad . name );
+        if ( rc == 0 )
+        {      
+            BSTreeDoUntil ( &src -> contents, false, kar_extract, &c_eb );
+
+            KDirectoryRelease ( c_eb . cdir );
+        }
+    }
+    return rc;
+}
+
+static
+rc_t extract_alias ( const KARAlias *src, const extract_block *eb )
+{
+    return KDirectoryCreateAlias ( eb -> cdir, 0777, kcmCreate, src -> link, src -> dad . name );
+}
+
+static
+bool CC kar_extract ( BSTNode *node, void *data )
+{
+    const KAREntry *entry = ( KAREntry * ) node;
+    extract_block *eb = ( extract_block * ) data;
+    eb -> rc = 0;
+    STATUS ( STAT_QA, "Entry to extract: %s", entry -> name );
+
+    switch ( entry -> type )
+    {
+    case kptFile:
+        eb -> rc = extract_file ( ( const KARFile * ) entry, eb );
+        break;
+    case kptDir:
+        eb -> rc = extract_dir ( ( const KARDir * ) entry, eb ); 
+        break;
+    case kptAlias:
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        eb -> rc = extract_alias ( ( const KARAlias * ) entry, eb );
+        if ( eb -> rc != 0 )
+            return true;
+        else
+            return false;
+        /* TBD - need to mdify the timestamp of the symlink without dereferencing using lutimes - requires library code handling*/
+        /* should not get down below to setaccess or setdate */
+        break;
+    default:
+        break;
+    }
+
+    if ( eb -> rc == 0 )
+        eb -> rc = KDirectorySetAccess ( eb -> cdir, false, entry -> access_mode, 0777, "%s", entry -> name );
+    if ( eb -> rc == 0 )
+        eb -> rc = KDirectorySetDate ( eb -> cdir, false, entry -> mod_time, "%s", entry -> name );
+
+    if ( eb -> rc != 0 )
+        return true;
+
+    return false;
+}
+
+static
+rc_t kar_test_extract ( const Params *p )
+{
+    rc_t rc;
+
+    KDirectory *wd;
+
+    STSMSG (1, ("Extracting kar\n"));
+
+    rc = KDirectoryNativeDir ( &wd );
+    if ( rc != 0 )
+        LogErr ( klogInt, rc, "Failed to create working directory" );
+    else
+    {
+        const KFile *archive;
+        rc = KDirectoryOpenFileRead ( wd, &archive, p -> archive_path );
+        if ( rc != 0 )
+            LogErr ( klogInt, rc, "Failed to open archive" );
+        else
+        {
+            KARDir root;
+            BSTree *tree;
+            KSraHeader hdr;
+            uint64_t toc_pos, toc_size, file_offset;
+
+            toc_pos = kar_verify_header ( archive, &hdr );            
+            file_offset = hdr . u . v1 . file_offset;
+            toc_size = file_offset - toc_pos;
+
+            memset ( & root, 0, sizeof root );
+            root . dad . type = kptDir;
+
+            tree = & root . contents;
+            BSTreeInit ( tree );
+
+            STATUS ( STAT_QA, "extracting toc" );
+            rc = kar_extract_toc ( archive, tree, &toc_pos, toc_size );
+            if ( rc == 0 )
+            {
+                BSTreeForEach ( tree, false, kar_entry_link_parent_dir, NULL );
+
+                /* find what the alias points to */
+                BSTreeForEach ( tree, false, kar_alias_link_type, &root );
+
+                /* Finish test */
+                if ( p -> x_count == 0 )
+                {
+                    KARPrintMode kpm;
+                    STATUS ( STAT_QA, "Test Mode" );
+
+                    max_size_fw = get_field_width ( max_size );
+                    max_offset_fw = get_field_width ( max_offset );
+
+                    kpm . indent = 0;
+
+                    if ( p -> long_list )
+                    {
+                        KOutMsg ( "TypeAccess Size Offset ModDateTime         Path Name\n" );
+                        kpm . pm = pm_longlist;
+                    }
+                    else
+                        kpm . pm = pm_normal;
+
+                    BSTreeForEach ( tree, false, kar_print, &kpm );
+                }
+                else
+                {
+                    extract_block eb;
+                    /* begin extracting */
+                    STATUS ( STAT_QA, "Extract Mode" );
+                    eb . archive = archive;
+                    eb . extract_pos = file_offset;
+                    eb . rc = 0;
+
+                    STATUS ( STAT_QA, "creating directory from path: %s", p -> directory_path );
+                    rc = KDirectoryCreateDir ( wd, 0777, kcmInit, "%s", p -> directory_path );
+                    if ( rc == 0 )
+                    {
+                        STATUS ( STAT_QA, "opening directory"  );
+                        rc = KDirectoryOpenDirUpdate ( wd, &eb . cdir, false, "%s", p -> directory_path );
+                        if ( rc == 0 )
+                        {
+                            BSTreeDoUntil ( tree, false, kar_extract, &eb );
+                            rc = eb . rc;
+                        }
+                        
+                        KDirectoryRelease ( eb . cdir );
+                    }
+                }
+            }
+
+            BSTreeWhack ( tree, kar_entry_whack, NULL );
+            KFileRelease ( archive );
+        }
+        
+        KDirectoryRelease ( wd );
+    }
+
+    return rc;
+}
+
+/*******************************************************************************
+ * Startup
+ */
+
+static
+rc_t run ( const Params *p )
+{
+    if ( p -> c_count != 0 )
+        return kar_create ( p );
+
+    if ( p -> x_count != 0 )
+        return kar_test_extract ( p );
+
+    assert ( p -> t_count != 0 );
+    return kar_test_extract ( p );
+}
+    
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Params params;
+    Args *args = NULL;
+
+    rc_t rc = parse_params ( &params, args, argc, argv );
+    if ( rc == 0 )
+    {
+        rc = run ( &params );
+
+        ArgsWhack ( args );
+    }
+
+    if ( rc == 0 )
+        STSMSG (1, ("Success: Exiting kar\n"));
+
+    return rc;
+}
+
diff --git a/tools/kar/sra-kar.c b/tools/kar/sra-kar.c
new file mode 100644
index 0000000..7d91b6e
--- /dev/null
+++ b/tools/kar/sra-kar.c
@@ -0,0 +1,431 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#define USE_FORCE 0
+
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <sra/sradb.h>
+#include <sra/sradb-priv.h>
+
+#include <kapp/args.h>
+
+
+#include <assert.h>
+
+typedef struct srakar_parms srakar_parms;
+struct srakar_parms
+{
+    KDirectory * dir;
+    const char *src_path;
+    const char *dst_path;
+    bool lite;
+    bool force;
+};
+
+static
+rc_t copy_file (const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+    uint64_t    fsize;
+
+    assert (fin != NULL);
+    assert (fout != NULL);
+
+    inpos = 0;
+    outpos = 0;
+
+    rc = KFileSize (fin, &fsize);
+    if (rc != 0)
+        return rc;
+
+    do
+    {
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc != 0)
+        {
+            PLOGERR (klogErr, (klogErr, rc,
+                               "Failed to read from directory structure in creating archive at $(P)",
+                               PLOG_U64(P), inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc != 0)
+                {
+                    PLOGERR (klogErr, (klogErr, rc,
+                                       "Failed to write to archive in creating archive at $(P)",
+                                       PLOG_U64(P), outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc != 0)
+            break;
+    } while (num_read != 0);
+    return rc;
+}
+static
+rc_t run ( srakar_parms *pb )
+{
+    KFile * outfile;
+    rc_t rc;
+
+    const SRAMgr *mgr;
+
+    rc = SRAMgrMakeRead ( & mgr );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to open SRAMgr" );
+    else
+    {
+        const SRATable *tbl;
+        rc = SRAMgrOpenTableRead ( mgr, & tbl, "%s", pb -> src_path );
+        if ( rc != 0 )
+            PLOGERR ( klogInt, (klogInt, rc,
+                "failed to open SRATable '$(spec)'", "spec=%s",
+                pb -> src_path ));
+        else
+        {
+            rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446,
+                                       kcmParents | ( pb->force ? kcmInit : kcmCreate) , "%s", pb->dst_path);
+            if (rc == 0)
+            {
+                const KFile * archive;
+
+                rc = SRATableMakeSingleFileArchive (tbl, &archive, pb->lite,
+                    NULL);
+                if (rc == 0)
+                {
+                    rc = copy_file (archive, outfile);
+                    KFileRelease (archive);
+                }
+                KFileRelease (outfile);
+            }
+            SRATableRelease ( tbl );
+        }
+        SRAMgrRelease (mgr);
+    }
+/*
+    rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446, kcmParents | ( pb->force ? kcmInit : kcmCreate) , "%s", pb->dst_path);
+
+    if (rc == 0)
+    {
+        const SRAMgr *mgr;
+
+        rc = SRAMgrMakeRead ( & mgr );
+        if ( rc != 0 )
+            LOGERR ( klogInt, rc, "failed to open SRAMgr" );
+        else
+        {
+            const SRATable *tbl;
+            rc = SRAMgrOpenTableRead ( mgr, & tbl, "%s", pb -> src_path );
+            if ( rc != 0 )
+                PLOGERR ( klogInt, (klogInt, rc, "failed to open SRATable '$(spec)'", "spec=%s", pb -> src_path ));
+            else
+            {
+                const KFile * archive;
+
+                rc = SRATableMakeSingleFileArchive (tbl, &archive, pb->lite, NULL);
+                if (rc == 0)
+                {
+                    rc = copy_file (archive, outfile);
+                    KFileRelease (archive);
+                }
+                SRATableRelease ( tbl );
+            }
+            SRAMgrRelease (mgr);
+        }
+        KFileRelease (outfile);
+    }
+*/
+    return rc;
+}
+
+/* Usage
+ */
+#define OPTION_LITE "lite"
+#define ALIAS_LITE "l"
+static const char * lite_usage[] = { "output an abbreviated version of the table", NULL };
+
+#if USE_FORCE
+#define OPTION_FORCE "force"
+#define ALIAS_FORCE "f"
+static const char * force_usage[] = { "replace an existing archive if present", NULL };
+#endif
+static
+OptDef Options[] = 
+{
+#if USE_FORCE
+    { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 1, false, false },
+#endif
+    { OPTION_LITE, ALIAS_LITE, NULL, lite_usage, 1, false, false }
+};
+
+
+static
+KLogLevel default_log_level;
+
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [options] table [archive]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Create a single file archive from an SRA database table.\n"
+                    "  The archive name can be given or will be derived from the\n"
+                    "  name of the table.\n"
+                    "\n", progname);
+}
+
+const char UsageDefaultName[] = "sra-kar";
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine (ALIAS_LITE, OPTION_LITE, NULL, lite_usage);
+#if USE_FORCE
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+#endif
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+    rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    default_log_level = KLogLevelGet();
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc == 0)
+    {
+        do
+        {
+            srakar_parms pb;
+            KDirectory * pwd;
+            const char * name;
+            uint32_t pcount;
+            char archive_name [256];
+
+            rc = KDirectoryNativeDir (&pwd);
+            if (rc)
+                break;
+
+            pb.lite = false;
+            pb.force = false;
+            pb.dir = pwd;
+
+            rc = ArgsOptionCount (args, OPTION_LITE, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 1)
+            {
+                STSMSG (1, ("Using lite option"));
+                pb.lite = true;
+            }
+
+#if USE_FORCE
+            rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 1)
+            {
+                STSMSG (1, ("Using force option"));
+                pb.force = true;
+            }
+#endif
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 0)
+            {
+                KOutMsg ("missing source table\n");
+                MiniUsage (args);
+                rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcInsufficient);
+                break;
+            }
+            else if (pcount > 2)
+            {
+                KOutMsg ("Too many parameters\n");
+                MiniUsage (args);
+                rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcExcessive);
+                break;
+            }
+
+            rc = ArgsParamValue (args, 0, (const void **)&pb.src_path);
+            if (rc)
+            {
+                KOutMsg ("failure to get source path/name\n");
+                break;
+            }
+
+            pb.dst_path = archive_name;
+
+            name = string_rchr (pb.src_path, string_size (pb.src_path), '/');
+            if (name == NULL)
+                name = pb.src_path;
+
+            if (pcount == 1)
+            {
+                size_t size;
+
+                rc = string_printf (archive_name, sizeof (archive_name), & size,
+                                 "%s%s", name, pb.lite ? ".lite.sra" : ".sra");
+                if ( rc != 0 )
+                {
+                    rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcInsufficient);
+                    PLOGERR (klogFatal, (klogFatal, rc, "Failure building archive name $(P)", "P=%s", archive_name));
+                    break;
+                }
+            }
+            else
+            {
+                rc = ArgsParamValue (args, 1, (const void **)&pb.dst_path);
+                if (rc)
+                {
+                    LOGERR (klogInt, rc, "failure to get destination path");
+                    break;
+                }
+            }
+
+            if (rc == 0)
+            {
+                KPathType kpt;
+
+                kpt = KDirectoryPathType (pwd, "%s", pb.dst_path);
+
+                switch (kpt & ~kptAlias)
+                {
+                case kptNotFound:
+                    /* found nothing so assume its a valid new file name
+                     * not gonna tweak extensions at this point but that can be upgraded */
+                    break;
+                case kptFile:
+                    /* got a file name, use it  - would need force... */
+                    if (pb.force == false)
+                    {
+                        rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcBusy);
+                        PLOGERR (klogFatal, (klogFatal, rc, 
+                                             "Output file already exists $(P)",
+                                             "P=%s", archive_name));
+                    }
+                    break;
+
+                case kptDir:
+                {
+                    size_t size;
+
+                    rc = string_printf (archive_name, sizeof (archive_name), & size,
+                                     "%s/%s%s", pb.dst_path, name, pb.lite ? ".lite.sra" : ".sra");
+                    if ( rc != 0 )
+                    {
+                        rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcInsufficient);
+                        PLOGERR (klogFatal, (klogFatal, rc, "Failure building archive name $(P)", "P=%s", archive_name));
+                        break;
+                    }
+                    pb.dst_path = archive_name;
+                    break;
+                }
+                default:
+                    rc = RC (rcExe, rcArgv, rcParsing, rcPath, rcInvalid);
+                    break;
+                }
+                if (rc == 0)
+                {
+                    STSMSG (1,("Creating archive (%s) from table (%s)\n", pb.dst_path, pb.src_path));
+
+                    rc = run (&pb);
+                    STSMSG (5, ("Run exits with %d %R\n", rc, rc));
+                }
+            }
+
+        } while (0);
+    }
+    STSMSG (1, ("Exit status %u %R", rc, rc));
+    return rc;
+}
diff --git a/tools/keyring-srv/Makefile b/tools/keyring-srv/Makefile
new file mode 100644
index 0000000..1295f11
--- /dev/null
+++ b/tools/keyring-srv/Makefile
@@ -0,0 +1,110 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/keyring-srv
+
+INT_LIBS = \
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+EXT_TOOLS = \
+    keyring-srv
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) 
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#------------------------------------------------------------------------------
+# keyring-srv
+#
+KEYRING_SRV_SRC = \
+	keyring-srv \
+	keyring-data \
+	keyring-database \
+	keyring-srv-main \
+
+KEYRING_SRV_OBJ = \
+	$(addsuffix .$(OBJX),$(KEYRING_SRV_SRC))
+
+KEYRING_SRV_LIB = \
+	-skapp \
+	-stk-version \
+	-lncbi-wvdb \
+
+
+$(BINDIR)/keyring-srv: $(KEYRING_SRV_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(KEYRING_SRV_LIB)
+
diff --git a/tools/keyring-srv/keyring-data.c b/tools/keyring-srv/keyring-data.c
new file mode 100644
index 0000000..58cdeac
--- /dev/null
+++ b/tools/keyring-srv/keyring-data.c
@@ -0,0 +1,346 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "keyring-data.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <klib/rc.h>
+
+rc_t KeyRingDataInit ( KeyRingData* self )
+{
+    BSTreeInit( & self->projects );
+    BSTreeInit( & self->objects );
+    self->next_projectId = 0;
+    self->next_objectId = 0;
+    return 0;
+}
+
+void KeyRingDataWhack ( KeyRingData* self )
+{
+    BSTreeWhack ( & self->projects, ProjectWhack, NULL );
+    BSTreeWhack ( & self->objects, ObjectWhack, NULL );
+}
+
+static int64_t CC FindProject ( const void *item, const BSTNode *n )
+{
+    return StringCompare((const String*)item, ((const Project*)n)->name);
+}
+static int64 CC SortProjects ( const BSTNode *item, const BSTNode *n )
+{
+    return StringCompare(((const Project*)item)->name, ((const Project*)n)->name);
+}
+
+const Project* KeyRingDataGetProject (const KeyRingData* data, const String* name)
+{
+    return (const Project*)BSTreeFind(&data->projects, name, FindProject);
+}
+
+rc_t KeyRingDataInsertProject (ProjectTable*  data, 
+                               uint32_t      p_id, 
+                               const String* name, 
+                               const String* download_ticket, 
+                               const String* encryption_key)
+{
+    rc_t rc = 0;
+    Project* p = (Project*) malloc(sizeof(Project));
+    if (p != NULL)
+    {
+        rc = ProjectInit(p, p_id, name, download_ticket, encryption_key);
+        if (rc == 0)
+        {
+            rc = BSTreeInsert(data, &p->dad, SortProjects);
+            if (rc != 0)
+                ProjectWhack(&p->dad, NULL);
+        }
+        if (rc != 0)
+            free(p);
+    }
+    else
+        rc = RC ( rcApp, rcDatabase, rcUpdating, rcMemory, rcExhausted );
+    return rc;
+}                               
+
+rc_t KeyRingDataAddProject(KeyRingData* data, const String* name, const String* download_ticket, const String* encryption_key)
+{
+    rc_t rc = 0;
+    Project* p;
+
+    p = (Project*)BSTreeFind(&data->projects, name, FindProject);
+    if (p != NULL)
+    {
+        bool rewrite = false;
+        String* dl = NULL;
+        String* enc = NULL;
+        if (StringCompare(p->download_ticket, download_ticket) != 0)
+        {
+            dl = p->download_ticket;
+            rc = StringCopy((const String**)&p->download_ticket, download_ticket);
+            if (rc == 0)
+                rewrite = true;
+            else
+                dl = NULL;
+        }
+        if (rc == 0 && StringCompare(p->encryption_key, encryption_key) != 0)
+        {
+            enc = p->encryption_key;
+            rc = StringCopy((const String**)&p->encryption_key, encryption_key);
+            if (rc == 0)
+                rewrite = true;
+            else
+                enc = NULL;
+        }
+        if (rc == 0 && rewrite)
+        {
+            if (dl)
+                StringWhack(dl);
+            if (enc)
+                StringWhack(enc);
+        }
+    }
+    else /* insert new */
+    {
+        rc = KeyRingDataInsertProject (&data->projects, data->next_projectId, name, download_ticket, encryption_key);
+        if (rc == 0)
+            ++data->next_projectId;
+    }
+    return rc;
+}
+
+rc_t ProjectInit ( Project* self, uint32_t p_id, const String* name, const String* download_ticket, const String* encryption_key )
+{
+    rc_t rc = 0;
+    memset(self, 0, sizeof(Project)); 
+    self->id = p_id;
+    rc = StringCopy((const String**)&self->name, name);
+    if (rc == 0)
+    {
+        rc = StringCopy((const String**)&self->download_ticket, download_ticket);
+        if (rc == 0)
+        {
+            rc = StringCopy((const String**)&self->encryption_key, encryption_key);
+            if (rc != 0)
+                StringWhack(self->download_ticket);
+        }
+        else
+            StringWhack(self->name);
+    }
+    return rc;
+}
+
+void ProjectWhack ( BSTNode *n, void *data )
+{
+    Project* self = (Project*)n;
+    StringWhack(self->name);
+    StringWhack(self->download_ticket);
+    StringWhack(self->encryption_key);
+    free(self);
+}
+
+rc_t ObjectInit ( Object* self, 
+                  uint32_t p_id, 
+                  const String* p_name, 
+                  const String* p_project, 
+                  const String* p_display_name,
+                  uint64_t p_size,
+                  const String* p_checksum,
+                  const String* p_encryption_key)
+{
+    rc_t rc = 0;
+    memset(self, 0, sizeof(Project)); 
+    self->id = p_id;
+    rc = StringCopy((const String**)&self->name, p_name);
+    if (rc == 0)
+    {
+        rc = StringCopy((const String**)&self->project, p_project);
+        if (rc == 0)
+        {
+            rc = StringCopy((const String**)&self->display_name, p_display_name);
+            if (rc == 0)
+            {
+                self->size = p_size;
+                rc = StringCopy((const String**)&self->checksum, p_checksum);
+                if (rc == 0)
+                {
+                    rc = StringCopy((const String**)&self->encryption_key, p_encryption_key);
+                    if (rc != 0)
+                        StringWhack(self->checksum);
+                }
+                if (rc != 0)
+                    StringWhack(self->display_name);
+            }
+            if (rc != 0)
+                StringWhack(self->project);
+        }
+        if (rc != 0)
+            StringWhack(self->name);
+    }
+    return rc;
+}                         
+                         
+void ObjectWhack ( BSTNode *n, void *data )
+{
+    Object* self = (Object*)n;
+    StringWhack(self->name);
+    StringWhack(self->project);
+    StringWhack(self->display_name);
+    StringWhack(self->checksum);
+    StringWhack(self->encryption_key);
+    free(self);
+}
+
+static int64_t CC FindObject( const void *item, const BSTNode *n )
+{
+    return StringCompare((const String*)item, ((const Object*)n)->name);
+}
+static int64_t CC SortObjects( const BSTNode *item, const BSTNode *n )
+{
+    return StringCompare(((const Project*)item)->name, ((const Object*)n)->name);
+}
+
+rc_t KeyRingDataInsertObject(ObjectTable*  data, 
+                             uint32_t      p_id, 
+                             const String* name, 
+                             const String* project, 
+                             const String* display_name,
+                             uint64_t      size,
+                             const String* checksum,
+                             const String* encryption_key)
+{
+    rc_t rc = 0;
+    Object* obj = (Object*) malloc(sizeof(Object));
+    if (obj != NULL)
+    {
+        rc = ObjectInit(obj, p_id, name, project, display_name, size, checksum, encryption_key);
+        if (rc == 0)
+        {
+            rc = BSTreeInsert(data, &obj->dad, SortObjects);
+            if (rc != 0)
+                ProjectWhack(&obj->dad, NULL);
+        }
+        else
+            free(obj);
+    }
+    else
+        rc = RC ( rcApp, rcDatabase, rcUpdating, rcMemory, rcExhausted );
+    return rc;
+}                             
+
+
+rc_t KeyRingDataAddObject (KeyRingData*  data, 
+                           const String* name, 
+                           const String* project, 
+                           const String* display_name,
+                           uint64_t      size,
+                           const String* checksum,
+                           const String* encryption_key)
+{
+    rc_t rc = 0;
+    Object* obj;
+
+    obj = (Object*)BSTreeFind(&data->objects, name, FindObject);
+    if (obj != NULL)
+    {
+        bool rewrite = false;
+        String* proj = NULL;
+        String* disp = NULL;
+        String* csum = NULL;
+        String* encr = NULL;
+        if (StringCompare(obj->project, project) != 0)
+        {
+            proj = obj->project;
+            rc = StringCopy((const String**)&obj->project, project);
+            if (rc == 0)
+                rewrite = true;
+            else
+                proj = NULL;
+        }
+        if (StringCompare(obj->display_name, display_name) != 0)
+        {
+            disp = obj->display_name;
+            rc = StringCopy((const String**)&obj->display_name, display_name);
+            if (rc == 0)
+                rewrite = true;
+            else
+                disp = NULL;
+        }
+        if (size != obj->size)
+        {
+            obj->size = size;
+            rewrite = true;
+        }
+        if (StringCompare(obj->checksum, checksum) != 0)
+        {
+            csum = obj->checksum;
+            rc = StringCopy((const String**)&obj->checksum, checksum);
+            if (rc == 0)
+                rewrite = true;
+            else
+                csum = NULL;
+        }
+        if (StringCompare(obj->encryption_key, encryption_key) != 0)
+        {
+            encr = obj->encryption_key;
+            rc = StringCopy((const String**)&obj->encryption_key, encryption_key);
+            if (rc == 0)
+                rewrite = true;
+            else
+                encr = NULL;
+        }
+        if (rc == 0 && rewrite)
+        {
+            if (proj)
+                StringWhack(proj);
+            if (disp)
+                StringWhack(disp);
+            if (csum)
+                StringWhack(csum);
+            if (encr)
+                StringWhack(encr);
+        }
+    }
+    else /* insert new */
+    {
+        rc = KeyRingDataInsertObject(&data->objects, 
+                                     data->next_objectId, 
+                                     name, 
+                                     project, 
+                                     display_name,
+                                     size,
+                                     checksum,
+                                     encryption_key);
+        if (rc == 0)
+            ++data->next_objectId;
+    }
+    return rc;
+}                           
+                                  
+const Object* KeyRingDataGetObject (const KeyRingData*  data, const String* name)
+{
+    return (const Object*)BSTreeFind(&data->objects, name, FindObject);
+}
diff --git a/tools/keyring-srv/keyring-data.h b/tools/keyring-srv/keyring-data.h
new file mode 100644
index 0000000..6e58316
--- /dev/null
+++ b/tools/keyring-srv/keyring-data.h
@@ -0,0 +1,130 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_keyring_data_
+#define _h_keyring_data_
+
+#include <klib/defs.h>
+#include <klib/container.h>
+#include <klib/text.h>
+
+struct VDatabase;
+
+typedef struct Project Project;
+struct Project
+{
+    BSTNode dad;
+
+    uint32_t id;
+    String* name;
+    /*TODO: replace Strings with key-ids */
+    String* download_ticket;
+    String* encryption_key;
+};
+extern rc_t ProjectInit ( Project* self, 
+                          uint32_t p_id, 
+                          const String* p_name, 
+                          const String* p_download_ticket, 
+                          const String* p_encyption_key );
+extern void ProjectWhack ( BSTNode *n, void *data );
+
+typedef struct Object Object;
+struct Object
+{
+    BSTNode dad;
+
+    uint32_t id;
+    String* name;
+    String* project;
+    String* display_name; 
+    uint64_t size; 
+    String* checksum;
+    /*TODO: replace String with key-id */
+    String* encryption_key;
+};
+extern rc_t ObjectInit ( Object*        self, 
+                         uint32_t       id, 
+                         const String*  name, 
+                         const String*  project, 
+                         const String*  display_name,
+                         uint64_t       size,
+                         const String*  checksum,
+                         const String*  encryption_key);
+extern void ObjectWhack ( BSTNode *n, void *data );
+
+typedef BSTree ProjectTable;
+typedef BSTree ObjectTable;
+
+typedef struct KeyRingData KeyRingData;
+struct KeyRingData
+{
+    ProjectTable projects;
+    ObjectTable objects;
+    
+    uint32_t next_projectId;
+    uint32_t next_objectId;
+};
+
+extern rc_t KeyRingDataInit ( KeyRingData* self );
+extern void KeyRingDataWhack ( KeyRingData* self ); /* does not call free(self) */
+
+/* make sure does not exist, assign an id*/
+extern rc_t KeyRingDataAddProject (KeyRingData*  data, 
+                                   const String* name, 
+                                   const String* download_ticket, 
+                                   const String* encryption_key);
+
+/* known to be new, id assigned*/
+extern rc_t KeyRingDataInsertProject (ProjectTable*  data, 
+                                      uint32_t      p_id, 
+                                      const String* name, 
+                                      const String* download_ticket, 
+                                      const String* encryption_key);
+
+extern const Project* KeyRingDataGetProject (const KeyRingData* data, const String* name);
+
+/* make sure does not exist, assign an id*/
+extern rc_t KeyRingDataAddObject (KeyRingData*  data, 
+                                  const String* name, 
+                                  const String* project, 
+                                  const String* display_name,
+                                  uint64_t      size,
+                                  const String* checksum,
+                                  const String* encryption_key);
+/* known to be new, id assigned*/
+extern rc_t KeyRingDataInsertObject(ObjectTable*  data, 
+                                    uint32_t      p_id, 
+                                    const String* name, 
+                                    const String* project, 
+                                    const String* display_name,
+                                    uint64_t      size,
+                                    const String* checksum,
+                                    const String* encryption_key);
+                                  
+extern const Object* KeyRingDataGetObject (const KeyRingData*  data, const String* name);
+
+
+#endif /* _h_keyring_data_ */
diff --git a/tools/keyring-srv/keyring-database.c b/tools/keyring-srv/keyring-database.c
new file mode 100644
index 0000000..0816a7d
--- /dev/null
+++ b/tools/keyring-srv/keyring-database.c
@@ -0,0 +1,441 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "keyring-database.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/cursor.h>
+
+#include "keyring-data.h"
+
+static const char schema_text[] =
+"version 1; "
+
+" table projects : MyProjects #1 { "
+"     extern column U32 id = .id;"
+"     physical column U32 .id = id;"
+
+"     extern    column ascii name = .name;"
+"     physical  column ascii .name = name;"
+
+"     extern    column ascii download_ticket = .download_ticket;"
+"     physical  column ascii .download_ticket = download_ticket;"
+
+"     extern    column ascii encryption_key = .encryption_key;"
+"     physical  column ascii .encryption_key = encryption_key;"
+" };"
+
+" table objects : MyObjects #1 { "
+"     extern    column U32 id = .id;"
+"     physical  column U32 .id = id;"
+
+"     extern    column ascii name = .name;"
+"     physical  column ascii .name = name;"
+
+"     extern    column ascii project = .project;"
+"     physical  column ascii .project = project;"
+
+"     extern    column ascii display_name = .display_name;"
+"     physical  column ascii .display_name = display_name;"
+
+"     extern    column U64   size = .size;"
+"     physical  column U64   .size = size;"
+
+"     extern    column ascii checksum = .checksum;"
+"     physical  column ascii .checksum = checksum;"
+
+"     extern    column ascii encryption_key = .encryption_key;"
+"     physical  column ascii .encryption_key = encryption_key;"
+" };"
+
+" table keys : MyKeys #1 { "
+"     physical column U32   .id;"
+"     physical column ascii .value;"
+" };"
+"database keyring : KEYRING #1 { "
+"    table objects: MyObjects   #1 object_inst;"
+"    table projects: MyProjects #1 project_inst;"
+"    table keys : MyKeys        #1 keys_inst;"
+"};";
+
+static rc_t SaveProjects( const ProjectTable* data, VDatabase* db );
+static rc_t SaveObjects ( const ObjectTable* data,  VDatabase* db );
+static rc_t LoadProjects( ProjectTable* data, const VDatabase* db );
+static rc_t LoadObjects ( ObjectTable* data,  const VDatabase* db );
+
+rc_t KeyRingDatabaseSave ( struct KeyRingData* self, struct KDirectory* wd, const char* path )
+{
+    rc_t rc;
+    VDBManager* vdbMgr;
+    rc = VDBManagerMakeUpdate( &vdbMgr, wd );
+    if (rc == 0)
+    {
+        VSchema* schema;
+        rc = VDBManagerMakeSchema(vdbMgr, &schema);
+        if (rc == 0)
+        {
+            rc = VSchemaParseText ( schema, "keyring_schema", schema_text, string_measure(schema_text, NULL) );
+            if (rc == 0)
+            {   /* create a database */
+                VDatabase* db;
+                rc = VDBManagerCreateDB(vdbMgr, & db, schema, "keyring:KEYRING", kcmCreate | kcmMD5, path);
+                if (rc == 0)
+                {   
+                    rc_t rc2;
+                    rc = SaveProjects(&self->projects, db);
+                    if (rc == 0)
+                        rc = SaveObjects(&self->objects, db);
+                    /*TODO: SaveKeys */
+                    rc2 = VDatabaseRelease(db);
+                    if (rc == 0)
+                        rc = rc2;
+                }
+
+            }
+            VSchemaRelease(schema);
+        }
+        VDBManagerRelease(vdbMgr);
+    }
+
+    return rc;
+}
+
+rc_t KeyRingDatabaseLoad ( struct KeyRingData* self, const struct KDirectory* dir, const char* path )
+{
+    VDBManager* innerMgr;
+    rc_t rc = VDBManagerMakeUpdate( &innerMgr, (KDirectory*)dir );
+    if (rc == 0)
+    {
+        rc_t rc2;
+        const VDatabase* db;
+        rc = VDBManagerOpenDBRead(innerMgr, & db, NULL, "%s", path);
+        if (rc == 0)
+        {
+            rc = LoadProjects(&self->projects, db);
+            if (rc == 0)
+                rc = LoadObjects(&self->objects, db);
+            /*TODO: LoadKeys */
+            rc2 = VDatabaseRelease(db);
+            if (rc == 0)
+                rc = rc2;
+        }
+        rc2 = VDBManagerRelease(innerMgr);
+        if (rc == 0)
+            rc = rc2;
+    }
+
+    return rc;
+}
+
+static 
+rc_t SaveProjects( const ProjectTable* data, VDatabase* db )
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseCreateTable(db, &tbl, "project_inst", kcmCreate | kcmMD5, "PROJECTS");
+    if (rc == 0)
+    {
+        rc_t rc2;
+        VCursor *cur;
+        rc = VTableCreateCursorWrite( tbl, &cur, kcmInsert );
+        if (rc == 0)
+        {
+            uint32_t id_idx, name_idx, dl_idx, enc_idx;
+            rc = VCursorAddColumn( cur, &id_idx, "id" );
+            rc = VCursorAddColumn( cur, &name_idx, "name" );
+            rc = VCursorAddColumn( cur, &dl_idx, "download_ticket" );
+            rc = VCursorAddColumn( cur, &enc_idx, "encryption_key" );
+            if (rc == 0)
+            {
+                rc = VCursorOpen( cur );
+                if (rc == 0)
+                {
+                    const Project* p = (const Project*)BSTreeFirst(data);
+                    while (rc == 0 && p != NULL)
+                    {
+                        rc = VCursorOpenRow( cur );
+                        
+                        if (rc == 0) rc = VCursorWrite( cur, id_idx,    sizeof(p->id) * 8,                      &p->id,                     0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, name_idx,  StringLength(p->name) * 8,              p->name->addr,              0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, dl_idx,    StringLength(p->download_ticket) * 8,   p->download_ticket->addr,   0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, enc_idx,   StringLength(p->encryption_key) * 8,    p->encryption_key->addr,    0, 1);
+                        
+                        if (rc == 0) rc = VCursorCommitRow( cur );
+                        if (rc == 0) rc = VCursorCloseRow( cur );
+                        
+                        p = (const Project*)BSTNodeNext(&p->dad);
+                    }
+                    if (rc == 0)
+                        rc = VCursorCommit( cur );
+                }
+            }
+            rc2 = VCursorRelease(cur);
+            if (rc == 0)
+                rc = rc2;
+        }
+        
+        rc2 = VTableRelease(tbl);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+static 
+rc_t SaveObjects ( const ObjectTable* data,  VDatabase* db )
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseCreateTable(db, &tbl, "object_inst", kcmCreate | kcmMD5, "OBJECTS");
+    if (rc == 0)
+    {
+        rc_t rc2;
+        VCursor *cur;
+        rc = VTableCreateCursorWrite( tbl, &cur, kcmInsert );
+        if (rc == 0)
+        {
+            uint32_t id_idx, name_idx, proj_idx, dname_idx, size_idx, csum_idx, enc_idx;
+            if (rc == 0) rc = VCursorAddColumn( cur, &id_idx,    "id" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &name_idx,  "name" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &proj_idx,    "project" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &dname_idx, "display_name" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &size_idx,  "size" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &csum_idx,  "checksum" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &enc_idx,   "encryption_key" );
+
+            if (rc == 0)
+            {
+                rc = VCursorOpen( cur );
+                if (rc == 0)
+                {
+                    const Object* obj = (const Object*)BSTreeFirst(data);
+                    while (rc == 0 && obj != NULL)
+                    {
+                        rc = VCursorOpenRow( cur );
+                        
+                        if (rc == 0) rc = VCursorWrite( cur, id_idx,    sizeof(obj->id) * 8,                   &obj->id,                  0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, name_idx,  StringLength(obj->name) * 8,           obj->name->addr,           0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, proj_idx,  StringLength(obj->project) * 8,        obj->project->addr,        0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, dname_idx, StringLength(obj->display_name) * 8,   obj->display_name->addr,   0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, size_idx,  sizeof(obj->size) * 8,                 &obj->size,                0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, csum_idx,  StringLength(obj->encryption_key) * 8, obj->encryption_key->addr, 0, 1);
+                        if (rc == 0) rc = VCursorWrite( cur, enc_idx,   StringLength(obj->encryption_key) * 8, obj->encryption_key->addr, 0, 1);
+                        
+                        if (rc == 0) rc = VCursorCommitRow( cur );
+                        if (rc == 0) rc = VCursorCloseRow( cur );
+                        
+                        obj = (const Object*)BSTNodeNext(&obj->dad);
+                    }
+                    if (rc == 0) rc = VCursorCommit( cur );
+                }
+            }
+            rc2 = VCursorRelease(cur);
+            if (rc == 0)
+                rc = rc2;
+        }
+        
+        rc2 = VTableRelease(tbl);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+static size_t CursorCacheSize = 32*1024;
+
+static
+bool HasData(const VTable* tbl)
+{
+    bool ret = false;
+    KNamelist *names;
+    if (VTableListCol(tbl, &names) == 0) 
+    {
+        uint32_t n;
+        ret = KNamelistCount( names, &n ) == 0 && n > 0;
+    }
+    KNamelistRelease( names );
+    return ret;
+}
+
+static 
+rc_t LoadProjects( ProjectTable* data, const VDatabase* db )
+{
+    const VTable* tbl;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, "PROJECTS");
+    if (rc == 0)
+    {
+        rc_t rc2;
+        const VCursor *cur;
+
+        rc = VTableCreateCachedCursorRead( tbl, &cur, CursorCacheSize );
+        if (rc == 0)
+        {
+            uint32_t id_idx, name_idx, dl_idx, enc_idx;
+            rc = VCursorAddColumn( cur, &id_idx,    "id" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &name_idx,  "name" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &dl_idx,    "download_ticket" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &enc_idx,   "encryption_key" );
+            if (rc == 0 && HasData(tbl))
+            {
+                rc = VCursorOpen( cur );
+                if (rc == 0)
+                {
+                    int64_t  first;
+                    uint64_t count;
+                    rc = VCursorIdRange( cur, 0, &first, &count );
+                    if (rc == 0)
+                    {
+                        uint64_t i;
+                        for (i=0; i < count; ++i)
+                        {
+                            const void* ptr;
+                            uint32_t elem_count;
+                            uint32_t id;
+                            String name;
+                            String download_ticket;
+                            String encryption_key;
+
+                            rc = VCursorSetRowId(cur, first + i);
+                            if (rc == 0) rc = VCursorOpenRow( cur );
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, id_idx, NULL, &ptr, NULL, NULL);
+                            if (rc == 0) id = *(uint32_t*)ptr;
+                            if (rc == 0) rc = VCursorCellData( cur, name_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&name, (const char*)ptr, elem_count, elem_count);
+                            if (rc == 0) rc = VCursorCellData( cur, dl_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&download_ticket, (const char*)ptr, elem_count, elem_count);
+                            if (rc == 0) rc = VCursorCellData( cur, enc_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&encryption_key, (const char*)ptr, elem_count, elem_count);
+                            
+                            if (rc == 0) rc = KeyRingDataInsertProject(data, id, &name, &download_ticket, &encryption_key);
+                            if (rc == 0) rc = VCursorCloseRow( cur );
+                            if (rc != 0) 
+                                break;
+                        }
+                    }
+                }
+            }
+            rc2 = VCursorRelease(cur);
+            if (rc == 0)
+                rc = rc2;
+        }
+        
+        rc2 = VTableRelease(tbl);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+static 
+rc_t LoadObjects ( ObjectTable* data,  const VDatabase* db )
+{
+    const VTable* tbl;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, "OBJECTS");
+    if (rc == 0)
+    {
+        rc_t rc2;
+        const VCursor *cur;
+
+        rc = VTableCreateCachedCursorRead( tbl, &cur, CursorCacheSize );
+        if (rc == 0)
+        {
+            uint32_t id_idx, name_idx, proj_idx, dname_idx, size_idx, csum_idx, enc_idx;
+            if (rc == 0) rc = VCursorAddColumn( cur, &id_idx,    "id" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &name_idx,  "name" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &proj_idx,    "project" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &dname_idx, "display_name" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &size_idx,  "size" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &csum_idx,  "checksum" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &enc_idx,   "encryption_key" );
+            if (rc == 0 && HasData(tbl))
+            {
+                rc = VCursorOpen( cur );
+                if (rc == 0)
+                {
+                    int64_t  first;
+                    uint64_t count;
+                    rc = VCursorIdRange( cur, 0, &first, &count );
+                    if (rc == 0)
+                    {
+                        uint64_t i;
+                        for (i=0; i < count; ++i)
+                        {
+                            const void* ptr;
+                            uint32_t elem_count;
+                            uint32_t id;
+                            String name;
+                            String project;
+                            String display_name;
+                            uint64_t size;
+                            String checksum;
+                            String encryption_key;
+
+                            rc = VCursorSetRowId(cur, first + i);
+                            if (rc == 0) rc = VCursorOpenRow( cur );
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, id_idx, NULL, &ptr, NULL, NULL);
+                            if (rc == 0) id = *(uint32_t*)ptr;
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, name_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&name, (const char*)ptr, elem_count, elem_count);
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, proj_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&project, (const char*)ptr, elem_count, elem_count);
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, dname_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&display_name, (const char*)ptr, elem_count, elem_count);
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, size_idx, NULL, &ptr, NULL, NULL);
+                            if (rc == 0) size = *(uint32_t*)ptr;
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, enc_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&encryption_key, (const char*)ptr, elem_count, elem_count);
+                            
+                            if (rc == 0) rc = VCursorCellData( cur, csum_idx, NULL, &ptr, NULL, &elem_count);
+                            if (rc == 0) StringInit(&checksum, (const char*)ptr, elem_count, elem_count);
+
+                            if (rc == 0) rc = KeyRingDataInsertObject(data, id, &name, &project, &display_name, size, &checksum, &encryption_key);
+                            if (rc == 0) rc = VCursorCloseRow( cur );
+                            if (rc != 0)
+                                break;
+                        }
+                    }
+                }
+            }
+            rc2 = VCursorRelease(cur);
+            if (rc == 0)
+                rc = rc2;
+        }
+        
+        rc2 = VTableRelease(tbl);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
diff --git a/tools/keyring-srv/keyring-database.h b/tools/keyring-srv/keyring-database.h
new file mode 100644
index 0000000..3af12ab
--- /dev/null
+++ b/tools/keyring-srv/keyring-database.h
@@ -0,0 +1,45 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_keyring_database_
+#define _h_keyring_database_
+
+#include <klib/rc.h>
+
+struct KDirectory;
+struct KeyRingData;
+
+/*
+ * Save into a (non-archived) directory
+ */
+extern rc_t KeyRingDatabaseSave ( struct KeyRingData* self, struct KDirectory* dir, const char* path );
+
+/*
+ * Load from a directory (possibly archived/encrypted)
+*/
+extern rc_t KeyRingDatabaseLoad ( struct KeyRingData* self, const struct KDirectory* dir, const char* path);
+
+#endif /* _h_keyring_database_ */
diff --git a/tools/keyring-srv/keyring-srv-main.c b/tools/keyring-srv/keyring-srv-main.c
new file mode 100644
index 0000000..d005ecb
--- /dev/null
+++ b/tools/keyring-srv/keyring-srv-main.c
@@ -0,0 +1,333 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+ 
+/* KeyRing Server process
+ *  - install an IPC socket listener (name = "vdb-keyring")
+ *  - listen for incoming IPC connections
+ *  - handle IPC requests
+ *      Request format: 
+ *          <uint16_t length><body> 
+ *      Request body:
+ *          - "I" - init
+ *          - "X" - shutDown
+ *          - "PA<uint8 length>name<uint8 length>dl_ticket<uint8 length>enc_key" - add project
+ *      Response format:
+ *          <uint8_t length><body>
+ *      Response body:
+ *          - "IY" init successful
+ *          - "IN" init failed (bad password?)
+ */
+
+#include "keyring-srv.h"
+
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+
+#include <kproc/thread.h>
+
+#include <kns/manager.h>
+#include <kns/socket.h>
+#include <kns/endpoint.h>
+#include <kns/stream.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/lockfile.h>
+
+#include <vfs/keyring-priv.h>
+
+#include <kapp/args.h>
+
+#ifndef MAX_PATH
+#define MAX_PATH 4096
+#endif
+
+static rc_t WorkerThreadFn ( const KThread *self, void *data );
+
+static bool shutDown = false;
+
+/*TODO: add pid to log messages? */
+static const char* initMsgSuccess = "\x02IY";
+static const char* initMsgFailure = "\x02IN";
+
+char keyRingFileName[MAX_PATH];
+KKeyRing* keyring = NULL;
+
+static 
+rc_t 
+Server( KNSManager* mgr )  
+{   
+    rc_t rc = 0;
+    KEndPoint ep;
+    String name; 
+
+    CONST_STRING(&name, KEYRING_IPC_NAME);
+    rc = KNSManagerInitIPCEndpoint(mgr, &ep, &name);
+    if (rc == 0)
+    {
+        KSocket* listener;
+        rc = KNSMakeListener ( &listener, &ep );
+        if (rc == 0)
+        {
+            shutDown = false;
+            while (!shutDown && rc == 0)
+            {
+                KStream* stream;
+                LogMsg ( klogInfo, "KeyringServer: listening");
+                rc = KNSListen ( listener, &stream ); /* may not return from here if no more incoming connections arrive */
+                if (rc == 0)
+                {
+                    KThread* worker;
+                    LogMsg ( klogInfo, "KeyringServer: detected connection");
+                    rc = KThreadMake ( &worker, WorkerThreadFn, stream);
+                    if (rc == 0 && worker != NULL)
+                    {
+                        KThreadWait(worker, NULL);
+                        LogMsg ( klogInfo, "KeyringServer: out of worker");
+                    }
+                    else
+                        LogErr(klogErr, rc, "KeyringServer: KThreadMake failed");
+                }
+                else
+                    LogErr(klogErr, rc, "KeyringServer: KNSListen failed");
+            }
+            LogMsg ( klogInfo, "KeyringServer: shutting down");
+            
+            /* TODO: make sure no incoming messages get dropped (stop accepting connections? wait for all active threads to exit?) 
+                - lock the server */
+                
+            if (keyring != NULL)
+            {
+                KeyRingRelease(keyring);
+                keyring = NULL;
+            }
+                
+            KSocketRelease(listener);
+        }
+        else
+            LogErr(klogErr, rc, "KeyringServer: KNSMakeListener failed");
+    }
+    else
+        LogErr(klogErr, rc, "KeyringServer: KNSManagerInitIPCEndpoint failed");
+    LogMsg ( klogInfo, "KeyringServer: listener shut down");
+    return rc;
+}
+    
+static 
+rc_t 
+WorkerThreadFn ( const KThread *self, void *data )  
+{
+    KStream* stream = (KStream*)data;
+    char buf[256];
+    size_t num;
+    rc_t rc = KStreamReadAll(stream, buf, 1, &num);
+    if (rc == 0)
+    {
+        if (num == 1) 
+        {
+            size_t toRead = (unsigned char)buf[0];
+            pLogMsg(klogInfo, "KeyringServer: worker received length=$(l)\n", "l=%d", toRead);
+            rc = KStreamReadAll(stream, buf, toRead, &num);
+            if (rc == 0)
+            {
+                /*pLogMsg(klogInfo, "KeyringServer: worker received msg='$(buf)'\n", "buf=%.*s", num, buf);*/
+                switch (buf[0])
+                {
+                case 'I':
+                    if (buf[0] == 'I') /* init */
+                    {
+                        LogMsg ( klogInfo, "KeyringServer: received Init");
+
+                        if (keyring == 0)
+                        {
+                            const KFile* std_in;
+                            
+                            rc = KFileMakeStdIn ( &std_in );
+                            if (rc == 0)
+                            {
+                                KFile* std_out;
+                                rc = KFileMakeStdOut ( &std_out );
+                                if (rc == 0)
+                                {
+                                    rc = KeyRingOpen(&keyring, keyRingFileName, std_in, std_out);
+                                    if (rc == 0)
+                                    {
+                                        LogMsg ( klogInfo, "KeyringServer: Init successful");
+                                        pLogMsg(klogInfo, "KeyringServer: sending '$(buf)'\n", "buf=%.*s", string_size(initMsgSuccess), initMsgSuccess);
+                                        rc = KStreamWrite(stream, initMsgSuccess, string_size(initMsgSuccess), NULL);
+                                    }
+                                    else
+                                    {
+                                        rc_t rc2;
+                                        LogErr(klogErr, rc, "KeyringServer: Init failed");
+                                        rc2 = KStreamWrite(stream, initMsgFailure, string_size(initMsgFailure), NULL);
+                                        if (rc == 0)
+                                            rc = rc2;
+                                    }
+                                    KFileRelease(std_out);
+                                }
+                                KFileRelease(std_in);
+                            }
+                        }
+                        else
+                        {   /* already running */
+                            LogMsg ( klogInfo, "KeyringServer: Init successful");
+                            rc = KStreamWrite(stream, initMsgSuccess, string_size(initMsgSuccess), NULL);
+                        }
+                    }
+                    break;
+                case 'X':
+                    if (buf[0] == 'X') /* shutDown */
+                    {
+                        LogMsg ( klogInfo, "KeyringServer: received Shutdown");
+                        shutDown = true;
+                    }
+                    break;
+                case 'P': /* project */
+                    if (toRead > 1 && buf[1] == 'A') /* Add */
+                    {
+                        String pkey;
+                        String dlkey;
+                        String enckey;
+
+                        size_t idx = 2;
+                        /*TODO: make sure idx is in range*/
+                        StringInit(&pkey, buf + idx + 1, buf[idx], buf[idx]);
+                        pkey.len = string_len(pkey.addr, pkey.size);
+
+                        idx += pkey.size + 1;
+                        /*TODO: make sure idx is in range*/
+                        StringInit(&dlkey, buf + idx + 1, buf[idx], buf[idx]);
+                        dlkey.len = string_len(dlkey.addr, dlkey.size);
+                        
+                        idx += dlkey.size + 1;
+                        /*TODO: make sure idx is in range*/
+                        StringInit(&enckey, buf + idx + 1, buf[idx], buf[idx]);
+                        enckey.len = string_len(enckey.addr, enckey.size);
+                        
+                        pLogMsg(klogInfo,  
+                                "KeyringServer: received Project Add(pkey='$(pkey)',dlkey='$(dlkey)',enckey='$(.....)')'\n",
+                                "pkey=%.*s,dlkey=%.*s,enckey=%.*s", 
+                                pkey.len, pkey.addr, dlkey.len, dlkey.addr, enckey.len, enckey.addr);
+                        
+                        rc = KeyRingAddProject(keyring, &pkey, &dlkey, &enckey);
+                        if (rc != 0)
+                            LogErr(klogErr, rc, "KeyringServer: KeyRingAddProject() failed");
+                    }
+                    break;
+                default:
+                    LogMsg ( klogInfo, "KeyringServer: unrecognised message received");
+                    break;
+                }
+            }
+            else
+                LogErr(klogErr, rc, "KeyringServer: KStreamRead(body) failed");
+        }
+        else /* end of stream = the client closed the connection */
+            LogMsg(klogInfo, "KeyringServer: worker received EOF\n");
+    }
+    else
+        LogErr(klogErr, rc, "KeyringServer: KStreamRead(length) failed");
+    LogMsg ( klogInfo, "KeyringServer: worker done");
+    return KThreadRelease(self);
+}
+
+
+rc_t UsageSummary (char const * progname)
+{
+    return 0;
+}
+
+char const UsageDefaultName[] = "keyring-srv";
+
+rc_t CC Usage (const Args * args)
+{
+    return 0;
+}
+
+/*TODO: handle signals */
+/*TODO: handle stale lock files */
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    rc_t rc = 0;
+    KDirectory* wd;
+    
+    KLogLevelSet(klogInfo);
+    LogMsg ( klogInfo, "KeyringServer: starting");
+
+    rc = KDirectoryNativeDir (&wd);
+    if (rc == 0)
+    {
+        KFile* lockedFile;
+        const char* dataDir;
+        
+        char lockFileName[MAX_PATH];
+        if (argc < 2 || argv[1] == NULL)
+            dataDir = KeyRingDefaultDataDir;
+        else
+            dataDir = argv[1];
+        rc = string_printf(lockFileName, sizeof(lockFileName)-1, NULL, "%s/keyring_lock", dataDir);
+        if (rc == 0)
+        {
+            rc = KDirectoryCreateExclusiveAccessFile(wd, &lockedFile, true, 0600, kcmOpen, "%s", lockFileName);
+            if (rc == 0)
+            {
+                KNSManager* mgr;
+                rc = KNSManagerMake(&mgr);
+                if (rc == 0)
+                {
+                    rc = string_printf(keyRingFileName, sizeof(keyRingFileName)-1, NULL, "%s/keyring", dataDir);
+                    if (rc == 0)
+                        rc = Server(mgr);
+                    KNSManagerRelease(mgr);
+                }
+                else
+                    LogErr(klogErr, rc, "KeyringServer: KNSManagerMake failed");
+                KFileRelease(lockedFile); 
+                LogMsg ( klogInfo, "KeyringServer: removing lock file.");
+                KDirectoryRemove(wd, true, "%s", lockFileName);
+            }
+            else
+            {   /*TODO: check for stale lock file*/
+                LogMsg ( klogInfo, "KeyringServer: another instance appears to be running.");
+                rc = 0;
+            }
+        }
+        else
+            LogErr ( klogErr, rc, "KeyringServer: failed to build the lock file name" );
+        
+        KDirectoryRelease(wd);
+    }
+    else
+        LogErr(klogErr, rc, "KeyringServer: KDirectoryNativeDir failed");
+    
+    LogMsg ( klogInfo, "KeyringServer: finishing");
+    
+    return rc;
+}
+
diff --git a/tools/keyring-srv/keyring-srv.c b/tools/keyring-srv/keyring-srv.c
new file mode 100644
index 0000000..d899d43
--- /dev/null
+++ b/tools/keyring-srv/keyring-srv.c
@@ -0,0 +1,522 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "keyring-srv.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <klib/text.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+#include <kfs/toc.h>
+#include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/impl.h>
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+
+#include "keyring-data.h"
+#include "keyring-database.h"
+
+static rc_t KeyRingInit     ( KKeyRing* self, const char* path );
+static rc_t KeyRingWhack    ( KKeyRing* self );
+static rc_t CreateDatabase  ( KKeyRing* self );
+static rc_t OpenDatabase    ( KKeyRing* self );
+
+#define MaxPwdSize 512
+
+struct KKeyRing {
+    KRefcount refcount;
+    
+    KDirectory* wd; 
+    char* path;
+    char passwd[MaxPwdSize];
+    
+    KeyRingData* data;
+};
+
+/* location of the temporary database (pre archiving+encryption */
+const char tmp_path[] = "keyring.temp";
+
+/* returns a NUL-terminated password fitting in the buffer */
+static
+rc_t
+ReadPassword(const struct KFile* pwd_in, size_t* last_pos, char* buf, size_t buf_size)
+{
+string_copy(buf, buf_size, "screwuahole", string_size("screwuahole")); return 0;
+
+    rc_t rc = 0;
+    size_t i =0;
+    do
+    {
+        size_t num_read;
+        if (i == buf_size)
+            return RC(rcApp, rcEncryptionKey, rcReading, rcParam, rcTooLong);
+            
+        rc = KFileRead( pwd_in, *last_pos, & buf[i], 1, &num_read );
+        if (rc == 0)
+        {
+            if (num_read != 1)
+                return RC(rcApp, rcEncryptionKey, rcReading, rcSize, rcInvalid);
+
+            if (buf[i] == '\n')
+            {
+                buf[i] = 0;
+                ++ *last_pos;
+                break;
+            }
+        }
+        ++ *last_pos;
+        ++ i;
+    }
+    while(rc == 0);
+    return rc;
+}
+
+static
+rc_t GetNewPassword(const struct KFile* pwd_in, struct KFile* pwd_out, char* buf)
+{
+    rc_t rc = KFileWrite ( pwd_out, 0, KR_PWD_PROMPT_1, string_measure(KR_PWD_PROMPT_1, NULL), NULL);
+    if (rc == 0)
+    {
+        char buf1[MaxPwdSize];
+        size_t last_pos = 0;
+        rc = ReadPassword(pwd_in, & last_pos, buf1, MaxPwdSize);
+        if (rc == 0)
+        {
+            rc = KFileWrite ( pwd_out, 
+                              string_measure(KR_PWD_PROMPT_1, NULL), 
+                              KR_PWD_PROMPT_2, string_measure(KR_PWD_PROMPT_2, NULL), NULL );
+            if (rc == 0)
+            {
+                char buf2[MaxPwdSize];
+                rc = ReadPassword(pwd_in, & last_pos, buf2, sizeof(buf2));
+                if (rc == 0)
+                {
+                    size_t pwd_size = string_measure(buf1, NULL);
+                    if (string_cmp(buf1, pwd_size, buf2, string_measure(buf2, NULL), MaxPwdSize) != 0)
+                        rc = RC(rcApp, rcEncryptionKey, rcCreating, rcParam, rcInconsistent);
+                    else
+                        string_copy(buf, MaxPwdSize, buf1, pwd_size + 1);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t GetPassword(const struct KFile* pwd_in, struct KFile* pwd_out, char* buf)
+{
+    rc_t rc = KFileWrite ( pwd_out, 0, KR_PWD_PROMPT_1, string_measure(KR_PWD_PROMPT_1, NULL), NULL);
+    if (rc == 0)
+    {
+        char buf1[MaxPwdSize];
+        size_t last_pos = 0;
+        rc = ReadPassword(pwd_in, & last_pos, buf1, MaxPwdSize);
+        if (rc == 0)
+            string_copy(buf, MaxPwdSize, buf1, string_measure(buf1, NULL) + 1);
+    }
+    return rc;
+}
+
+rc_t KeyRingOpen(KKeyRing** self, const char* path, const struct KFile* pwd_in, struct KFile* pwd_out)
+{
+    rc_t rc; 
+    assert(self && path && pwd_in && pwd_out);
+
+    *self = (KKeyRing*) malloc(sizeof(**self));
+    if (*self)
+    { 
+        rc = KeyRingInit(*self, path);
+        if (rc == 0)
+        {
+            rc = KeyRingAddRef(*self);
+            if (rc == 0)
+            {
+                KDirectory* wd; 
+                rc = KDirectoryNativeDir(&wd);
+                if (rc == 0)
+                {   /* open the database */
+                    if (KDirectoryPathType(wd, "%s", (*self)->path) == kptFile)
+                        rc = GetPassword(pwd_in, pwd_out, (*self)->passwd);
+                    else /* does not exist; create first */
+                    {   
+                        rc = GetNewPassword(pwd_in, pwd_out, (*self)->passwd);
+                        if (rc == 0)
+                            rc = CreateDatabase(*self);
+                    }
+                    if (rc == 0)
+                        rc = OpenDatabase(*self);
+                        
+                    {
+                        rc_t rc2;
+                        rc2 = KDirectoryRelease(wd);
+                        if (rc == 0)
+                            rc = rc2;
+                    }
+                }
+            }
+            
+            if (rc != 0)
+            {
+                KeyRingWhack(*self);
+                *self = NULL;
+            }
+        }
+        else
+        {
+            free(*self);
+            *self = NULL;
+        }
+    }
+    else
+        rc = RC ( rcApp, rcDatabase, rcOpening, rcMemory, rcExhausted );
+
+    return rc;
+}
+
+rc_t KeyRingInit ( KKeyRing* self, const char* path )
+{
+    rc_t rc;
+    
+    memset ( self, 0, sizeof * self );
+    KRefcountInit ( & self -> refcount, 0, "KKeyRing", "init", "" );
+    
+    rc = KDirectoryNativeDir(&self->wd);
+    if (rc == 0)
+    {
+        self->path = string_dup(path, string_size(path));
+        if (self->path)
+        {
+            self->data = (KeyRingData*) malloc(sizeof(*self->data));
+            if (self->data)
+            {
+                rc = KeyRingDataInit ( self->data );
+                if (rc != 0)
+                    free(self->data);
+            }
+            else
+                rc = RC ( rcApp, rcDatabase, rcOpening, rcMemory, rcExhausted );
+                
+            if (rc != 0)
+                free(self->path);
+        }
+        else
+            rc = RC ( rcApp, rcDatabase, rcOpening, rcMemory, rcExhausted );
+            
+        if (rc != 0)
+            KDirectoryRelease(self->wd);
+    }
+        
+    return rc;
+}
+
+rc_t KeyRingWhack(KKeyRing* self)
+{
+    KeyRingDataWhack( self->data );
+    free(self->data);
+    free(self->path);
+    KDirectoryRelease(self->wd);
+    free(self);
+    return 0;
+}
+
+rc_t KeyRingAddRef(KKeyRing* self)
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KKeyRing" ) )
+        {
+        case krefLimit:
+            return RC ( rcApp, rcEncryptionKey, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+rc_t KeyRingRelease(KKeyRing* self)
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KKeyRing" ) )
+        {
+        case krefWhack:
+            KeyRingWhack ( self );
+        break;
+        case krefNegative:
+            return RC ( rcApp, rcEncryptionKey, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+static
+rc_t copy_file (const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+
+    assert (fin != NULL);
+    assert (fout != NULL);
+
+    inpos = 0;
+    outpos = 0;
+
+    do
+    {
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc != 0)
+        {
+            PLOGERR (klogErr, (klogErr, rc,
+                     "Failed to read from directory structure in creating archive at $(P)",
+                               PLOG_U64(P), inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc != 0)
+                {
+                    PLOGERR (klogErr, (klogErr, rc,
+                             "Failed to write to archive in creating archive at $(P)",
+                                       PLOG_U64(P), outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc != 0)
+            break;
+    } while (num_read != 0);
+    return rc;
+}
+
+rc_t ArchiveAndEncrypt(KDirectory* wd, const char* inpath, const char* outpath, const char* passwd)
+{
+    const KDirectory* d;
+    rc_t rc = KDirectoryOpenDirRead (wd, &d, false, "%s", inpath);
+    if (rc == 0)
+    {
+        const KFile* infile;
+        rc_t rc2;
+    
+        rc = KDirectoryOpenTocFileRead (d, &infile, 4, NULL, NULL, NULL);
+        if (rc == 0)
+        {
+            KFile* outfile;
+                
+            /* if the file exists, add write access */
+            KDirectorySetAccess( wd, false, 0600, 0777, "%s", outpath );
+            rc = KDirectoryCreateFile(wd, &outfile, false, 0600, kcmCreate|kcmInit, "%s", outpath);
+            if ( rc == 0 )
+            {
+                KFile* enc_outfile;
+                KKey key;
+                rc = KKeyInitRead(&key, kkeyAES256, passwd, string_measure(passwd, NULL));
+                if ( rc == 0 )
+                    rc = KEncFileMakeWrite(&enc_outfile, outfile, &key);
+                    
+                if (rc == 0)
+                    rc = copy_file(infile, enc_outfile);
+        
+                rc2 = KFileRelease(outfile);
+                if (rc == 0)
+                    rc = rc2;
+                /* remove write access */
+                rc2 = KDirectorySetAccess( wd, false, 0400, 0777, "%s", outpath );
+                if (rc == 0)
+                    rc = rc2;
+                rc2 = KFileRelease(enc_outfile);
+                if (rc == 0)
+                    rc = rc2;
+            }
+            rc2 = KFileRelease(infile);
+            if (rc == 0)
+                rc = rc2;
+        }
+        rc2 = KDirectoryRelease(d);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+rc_t CreateDatabase(KKeyRing* self)
+{   /* database is presumed write-locked */
+    rc_t rc;
+    
+    assert(self);
+    
+    KDirectoryRemove(self->wd, true, "%s", tmp_path); /* in case exists */
+    rc = KeyRingDatabaseSave(self->data, self->wd, tmp_path);
+    if (rc == 0)
+    {
+        rc_t rc2;
+        rc = ArchiveAndEncrypt(self->wd, tmp_path, self->path, self->passwd);
+        
+        rc2 = KDirectoryRemove(self->wd, true, "%s", tmp_path);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+rc_t OpenDatabase(KKeyRing* self)
+{
+    rc_t rc;
+    const KFile* enc_infile;
+    
+    assert(self);
+    rc = KDirectoryOpenFileRead(self->wd, &enc_infile, "%s", self->path);
+    if ( rc == 0)
+    {
+        rc_t rc2;
+        const KFile* infile;
+        KKey key;
+        rc = KKeyInitRead(&key, kkeyAES256, self->passwd, string_measure(self->passwd, NULL));
+        if ( rc == 0 )
+        {
+            rc = KEncFileMakeRead (&infile, enc_infile, &key);
+            if (rc == 0)
+            {   
+                const KDirectory* arc;
+                rc = KDirectoryOpenArcDirRead_silent_preopened(self->wd, &arc, true, "/keyring", tocKFile, (void*)infile, KArcParseSRA, NULL, NULL);
+                if (rc == 0)
+                {
+                    /*  Hack: we violate the KDirectory object interface in order for VDBManagerMakeUpdate to succeed,
+                        since it would refuse to open a read-only dir (i.e. archive);
+                        We will only read from the object, though.
+                    */
+                    ((KDirectory*)arc)->read_only = false;
+                    rc = KeyRingDatabaseLoad(self->data, arc, "/keyring");
+                    rc2 = KDirectoryRelease(arc);
+                    if (rc == 0)
+                        rc = rc2;
+                }
+                rc2 = KFileRelease(infile);
+                if (rc == 0)
+                    rc = rc2;
+            }
+        }
+            
+        rc2 = KFileRelease(enc_infile);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+rc_t KeyRingAddProject(KKeyRing* self, const String* name, const String* download_ticket, const String* encryption_key)
+{   
+    rc_t rc = 0;
+    
+    assert(self && name && download_ticket && encryption_key);
+    
+    /*TODO: write-lock database */
+    rc = KeyRingDataAddProject(self->data, name, download_ticket, encryption_key);
+    if (rc == 0)
+        rc = CreateDatabase(self); 
+    /*TODO: unlock database */
+    return rc;
+}
+
+rc_t KeyRingGetProject(KKeyRing* self, const String* name, String* download_ticket, String* encryption_key)
+{   
+    rc_t rc = 0;
+    const Project* p;
+    
+    assert(self && name && download_ticket && encryption_key);
+    
+    p = KeyRingDataGetProject(self->data, name);
+    if (p != NULL)
+    {
+        StringInit(download_ticket, p->download_ticket->addr, p->download_ticket->len, p->download_ticket->size);
+        StringInit(encryption_key, p->encryption_key->addr, p->encryption_key->len, p->encryption_key->size);
+    }
+    else
+        rc = RC(rcApp, rcDatabase, rcSearching, rcName, rcNotFound);
+    return rc;
+}
+
+rc_t KeyRingAddObject(KKeyRing* self, 
+                      const struct String* object_name, 
+                      const struct String* project_name, 
+                      const struct String* display_name, 
+                      uint64_t size, 
+                      const struct String* checksum)
+{
+    rc_t rc = 0;
+    const Project* p;
+    
+    assert(self && object_name && project_name && display_name && checksum);
+    
+    /*TODO: write-lock database */
+    p = KeyRingDataGetProject(self->data, project_name);
+    if (p != NULL)
+    {
+        rc = KeyRingDataAddObject(self->data, object_name, project_name, display_name, size, checksum, p->encryption_key);
+        if (rc == 0)
+            rc = CreateDatabase(self); 
+    }
+    else
+        rc = RC(rcApp, rcDatabase, rcSearching, rcName, rcNotFound);
+    /*TODO: unlock database */
+    
+    return rc;
+}                      
+                     
+rc_t KeyRingGetKey(KKeyRing* self, const struct String* object_name, struct String* encryption_key)
+{
+    rc_t rc = 0;
+    const Object* obj;
+
+    assert(self && object_name && encryption_key);
+    
+    obj = KeyRingDataGetObject(self->data, object_name);
+    if (obj != NULL)
+        StringInit(encryption_key, obj->encryption_key->addr, obj->encryption_key->len, obj->encryption_key->size);
+    else
+        rc = RC(rcApp, rcDatabase, rcSearching, rcName, rcNotFound);
+    return rc;
+}
diff --git a/tools/keyring-srv/keyring-srv.h b/tools/keyring-srv/keyring-srv.h
new file mode 100644
index 0000000..11dea86
--- /dev/null
+++ b/tools/keyring-srv/keyring-srv.h
@@ -0,0 +1,101 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_keyring_srv_
+#define _h_keyring_srv_
+
+#include <klib/rc.h>
+#include <klib/refcount.h>
+
+struct KFile;
+struct String;
+
+typedef struct KKeyRing KKeyRing;
+struct KKeyRing;
+
+#define KR_PWD_PROMPT_1 "Password:\n"
+#define KR_PWD_PROMPT_2 "Retype Password:\n"
+
+/* KeyRingOpen 
+ * kr - [ OUT ] the keyring object
+ * path - [ IN ] the POSIX path to the database file
+ * pwd_in - [ IN ] a file object to read database password from
+ * pwd_out - [ IN ] a file object to print password prompts to
+ *
+ * If the database file exists, will prompt to pwd_out for a password, read the password from pwd_in, and use the password to open the database
+ * If the database file does not exist, will prompt for a password twice and create the database if passwords match
+ *
+ * returns:
+ *  - database file exists, the supplied password is incorrect
+ *  - database file does not exist, passwords do not match
+ */
+extern rc_t KeyRingOpen(KKeyRing** kr, const char* path, const struct KFile* pwd_in, struct KFile* pwd_out); 
+
+/* KeyRingAddRef
+ */
+extern rc_t KeyRingAddRef(KKeyRing* kr);
+
+/* KeyRingRelease
+ */
+extern rc_t KeyRingRelease(KKeyRing* kr);
+
+/* KeyRingAddProject
+ * Saves the project with associated download ticket and encryption key. 
+ * If the project under this name already exists, the ticket/key will be overwritten as necessary.
+ * Will update the database file. May block/timeout if the file is locked.
+ */
+extern rc_t KeyRingAddProject(KKeyRing* kr, 
+                              const struct String* name, 
+                              const struct String* download_ticket, 
+                              const struct String* encryption_key);
+
+/* KeyRingGetProject
+ *  Retrieves a project's download ticket and encryption key by the project's name.
+ *  (TODO: Keys are returned as pointers into shared memory)
+ *  (TODO: Should it check if the database file needs to be reloaded?)
+ */
+extern rc_t KeyRingGetProject(KKeyRing* kr, const struct String* name, struct String* download_ticket, struct String* encryption_key);
+
+/* KeyRingAddObject
+ *  Saves an object in association with a project.
+ *  If the project under this name already exists, it will be overwritten as necessary.
+ *  Will update the database file. May block/timeout if the file is locked.
+ */
+extern rc_t KeyRingAddObject(KKeyRing* kr, 
+                             const struct String* object_name, 
+                             const struct String* project_name, 
+                             const struct String* display_name, 
+                             uint64_t size, 
+                             const struct String* checksum);
+
+/* KeyRingGetKey
+ *  Retrieves an encryption key associated with the given object.
+ *  (TODO: Keys are returned as pointers into shared memory)
+ *  (TODO: Should it check if the database file needs to be reloaded?)
+ */
+extern rc_t KeyRingGetKey(KKeyRing* kr, const struct String* object_name, struct String* encryption_key);
+                             
+#endif /* _h_keyring_srv_ */
diff --git a/tools/kget/Makefile b/tools/kget/Makefile
new file mode 100644
index 0000000..2fbc1f4
--- /dev/null
+++ b/tools/kget/Makefile
@@ -0,0 +1,77 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/kget
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	kget
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# kget
+#
+TOOL_SRC = \
+	kget
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/kget: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TOOL_LIB)
+
diff --git a/tools/kget/examples.sh b/tools/kget/examples.sh
new file mode 100755
index 0000000..67cf37b
--- /dev/null
+++ b/tools/kget/examples.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+execute()
+{
+    echo "------------------------------------------------------"
+    echo $1
+    eval $1
+    echo "."
+}
+
+ACC="NC_011748.1"
+URL=`srapath $ACC`
+CACHEFILE="cache.dat"
+PROXY="localhost:8080"
+
+echo "example number 1: show the size of the remote file ( HEAD request )"
+execute "time kget $URL --show-size"
+
+echo "example number 2: download the remote file, no buffering, no cachefile"
+echo "                  in 32k blocks, using HTTPFile, filename extracted from URL"
+execute "time kget $URL"
+
+echo "example number 3: download the remote file, wget-style: without partial requests"
+echo "                  filename extracted from URL"
+execute "time kget $URL --full"
+
+echo "example number 4: download the remote file, no buffering, no cachefile"
+echo "                  in 32k blocks, using HTTPFile, filename different from URL"
+execute "time kget $URL some_reference.dat"
+
+echo "example number 5: download the remote file, no buffering, no cachefile"
+echo "                  in 32k blocks, using ReliableHTTPFile"
+execute "time kget $URL some_reference.dat --reliable"
+
+echo "example number 6: download the remote file, no buffering, no cachefile"
+echo "                  in 128k blocks, using HTTPFile"
+#blocksize of 128 kilobyte can be expressed as '128k' or '131072' or '0x020000'
+execute "time kget $URL --block-size 128k"
+
+echo "example number 7: download the remote file, no cachefile"
+echo "                  in 32k blocks, wraped in a buffer-file with 128k blocks"
+execute "time kget $URL --buffer 128k"
+
+echo "example number 8: download the remote file, using a cache-file "
+echo "                  ( dflt cache-blocksize of 128 k ) in 32k blocks, "
+execute "rm -f $CACHEFILE"
+execute "time kget $URL --cache $CACHEFILE"
+
+echo "example number 9: download the remote file, using a cache-file"
+echo "                   ( cache-blocksize of 256 k ) in 32k blocks, "
+execute "rm -f $CACHEFILE"
+execute "time kget $URL --cache $CACHEFILE --cache-block 256k"
+
+echo "example number 10: download the remote file, no buffering, no cachefile"
+echo "                  in 32k blocks, but requests are made in random order"
+execute "time kget $URL --random"
+
+#enable this example only after updating the PROXY-variable
+#and actually having a running proxy there!
+#echo "example number X: download the remote file, using a proxy"
+#echo "                  in 32k blocks, "
+#execute "time kget $URL --proxy $PROXY"
diff --git a/tools/kget/kget.c b/tools/kget/kget.c
new file mode 100644
index 0000000..da9bf79
--- /dev/null
+++ b/tools/kget/kget.c
@@ -0,0 +1,941 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/time.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/cacheteefile.h>
+//#include <kfs/big_block_reader.h>
+
+#include <kns/manager.h>
+#include <kns/kns-mgr-priv.h>
+#include <kns/http.h>
+#include <kns/stream.h>
+
+#include <kproc/timeout.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*===========================================================================
+
+    kget is a works like a simple version of wget
+
+ =========================================================================== */
+
+const char UsageDefaultName[] = "kget";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [<path> ...] [options]\n"
+                    "\n", progname);
+}
+
+
+#define OPTION_VERB "verb"
+#define ALIAS_VERB  "b"
+static const char * verb_usage[]        = { "execute verbose", NULL };
+
+#define OPTION_BLOCK "block-size"
+#define ALIAS_BLOCK  "s"
+static const char * block_usage[]       = { "how many bytes per block", NULL };
+
+#define OPTION_SHOW  "show-size"
+#define ALIAS_SHOW   "w"
+static const char * show_usage[]        = { "query size of remote file first", NULL };
+
+#define OPTION_CACHE "cache"
+#define ALIAS_CACHE  "c"
+static const char * cache_usage[]       = { "wrap the remote-file into a KCacheTeeFile", NULL };
+
+#define OPTION_CACHE_BLK "cache-block"
+static const char * cache_blk_usage[]   = { "blocksize inside a KCacheTeeFile", NULL };
+
+#define OPTION_PROXY "proxy"
+static const char * proxy_usage[]       = { "use a proxy to download remote file", NULL };
+
+#define OPTION_RAND  "random"
+#define ALIAS_RAND   "r"
+static const char * random_usage[]      = { "request blocks in random order", NULL };
+
+#define OPTION_REP   "repeat"
+#define ALIAS_REP    "e"
+static const char * repeat_usage[]      = { "request blocks with repeats if in random order", NULL };
+
+#define OPTION_CREPORT "report"
+#define ALIAS_CREPORT  "p"
+static const char * creport_usage[]     = { "report cache usage", NULL };
+
+#define OPTION_COMPLETE "complete"
+static const char * complete_usage[]    = { "check if 1st parameter is a complete", NULL };
+
+#define OPTION_TRUNC "truncate"
+static const char * truncate_usage[]    = { "truncate the file ( 1st parameter ) / remove trailing cache-bitmap", NULL };
+
+#define OPTION_START "start"
+static const char * start_usage[]       = { "offset where to read from", NULL };
+
+#define OPTION_COUNT "count"
+static const char * count_usage[]       = { "number of bytes to read", NULL };
+
+#define OPTION_PROGRESS "progress"
+static const char * progress_usage[]    = { "show progress", NULL };
+
+#define OPTION_RELIABLE "reliable"
+static const char * reliable_usage[]    = { "use reliable version of http-file", NULL };
+
+#define OPTION_BUFFER "buffer"
+#define ALIAS_BUFFER  "u"
+static const char * buffer_usage[]      = { "wrap remote file into KBufFile with this buffer-size", NULL };
+
+#define OPTION_SLEEP "sleep"
+#define ALIAS_SLEEP  "i"
+static const char * sleep_usage[]       = { "sleep inbetween requests by this amount of ms", NULL };
+
+#define OPTION_TIMEOUT "timeout"
+#define ALIAS_TIMEOUT "m"
+static const char * timeout_usage[]     = { "use timed read with tis amount of ms as timeout", NULL };
+
+#define OPTION_CCOMPL "cache-complete"
+#define ALIAS_CCOMPL "a"
+static const char * ccompl_usage[]      = { "check completeness on open cacheteefile", NULL };
+
+#define OPTION_FULL "full"
+#define ALIAS_FULL "f"
+static const char * full_usage[]        = { "download via one http-request, not partial requests in a loop", NULL };
+
+OptDef MyOptions[] =
+{
+/*    name              alias           fkt    usage-txt,       cnt, needs value, required */
+    { OPTION_VERB,      ALIAS_VERB,     NULL, verb_usage,       1,  false,       false },
+    { OPTION_BLOCK,     ALIAS_BLOCK,    NULL, block_usage,      1,  true,        false },
+    { OPTION_SHOW,      ALIAS_SHOW,     NULL, show_usage,       1,  false,       false },
+    { OPTION_CACHE,     ALIAS_CACHE,    NULL, cache_usage,      1,  true,        false },
+    { OPTION_CACHE_BLK, NULL,           NULL, cache_blk_usage,  1,  true,        false },
+    { OPTION_PROXY,     NULL,           NULL, proxy_usage,      1,  true,        false },
+    { OPTION_RAND,      ALIAS_RAND,     NULL, random_usage,     1,  false,       false },
+    { OPTION_REP,       ALIAS_REP,      NULL, repeat_usage,     1,  false,       false },
+    { OPTION_CREPORT,   ALIAS_CREPORT,  NULL, creport_usage,    1,  false,       false },
+    { OPTION_BUFFER,    ALIAS_BUFFER,   NULL, buffer_usage,     1,  true,        false },
+    { OPTION_SLEEP,     ALIAS_SLEEP,    NULL, sleep_usage,      1,  true,        false },    
+    { OPTION_TIMEOUT,   ALIAS_TIMEOUT,  NULL, timeout_usage,    1,  true,        false },
+    { OPTION_COMPLETE,  NULL,           NULL, complete_usage,   1,  false,       false },
+    { OPTION_CCOMPL,    ALIAS_CCOMPL,   NULL, ccompl_usage,     1,  false,       false },
+    { OPTION_TRUNC,     NULL,           NULL, truncate_usage,   1,  false,       false },
+    { OPTION_START,     NULL,           NULL, start_usage,      1,  true,        false },
+    { OPTION_COUNT,     NULL,           NULL, count_usage,      1,  true,        false },
+    { OPTION_PROGRESS,  NULL,           NULL, progress_usage,   1,  false,       false },
+    { OPTION_RELIABLE,  NULL,           NULL, reliable_usage,   1,  false,       false },
+    { OPTION_FULL,      ALIAS_FULL,     NULL, full_usage,       1,  false,       false }
+};
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    uint32_t i;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+
+    HelpOptionsStandard ();
+    for ( i = 0; i < sizeof ( MyOptions ) / sizeof ( MyOptions[ 0 ] ); ++i )
+        HelpOptionLine ( MyOptions[i].aliases, MyOptions[i].name, NULL, MyOptions[i].help );
+
+    return rc;
+}
+
+typedef struct fetch_ctx
+{
+    const char *url;
+    const char *destination;
+    const char *cache_file;
+    const char * proxy;
+    size_t blocksize;
+    size_t start, count;
+    size_t buffer_size;
+    size_t sleep_time;
+    size_t timeout_time;
+    size_t cache_blk;
+    bool verbose;
+    bool show_filesize;
+    bool random;
+    bool with_repeats;
+    bool show_curl_version;
+    bool report_cache;
+    bool check_cache_complete;
+    bool check_completeness;    
+    bool truncate_cache;
+    bool local_read_only;
+    bool show_progress;
+    bool reliable;
+    bool full_download;
+} fetch_ctx;
+
+
+static rc_t src_2_dst( const KFile *src, KFile *dst, char * buffer,
+                       uint64_t pos, size_t * num_read, fetch_ctx * ctx )
+{
+    rc_t rc;
+    size_t n_transfer = ( ctx->count == 0 ? ctx->blocksize : ctx->count );
+    
+    if ( ctx->timeout_time == 0 )
+        rc = KFileReadAll ( src, pos, buffer, n_transfer, num_read );
+    else
+    {
+        timeout_t tm;
+        rc = TimeoutInit ( &tm, ctx->timeout_time );
+        if ( rc == 0 )
+            rc = KFileTimedReadAll ( src, pos, buffer, n_transfer, num_read, &tm );
+    }
+    if ( rc == 0 && *num_read > 0 )
+    {
+        size_t num_writ;
+        rc = KFileWriteAll ( dst, pos, buffer, *num_read, &num_writ );
+    }
+    return rc;
+}
+
+
+static rc_t block_loop_in_order( const KFile *src, KFile *dst, char * buffer, 
+                                 uint64_t * bytes_copied, fetch_ctx * ctx )
+{
+    rc_t rc = 0;
+    uint64_t pos = 0;
+    uint32_t blocks = 0;
+    size_t num_read = 1;
+    KOutMsg( "copy-mode : linear read/write\n" );
+    while ( rc == 0 && num_read > 0 )
+    {
+        rc = src_2_dst( src, dst, buffer, pos, &num_read, ctx );
+        if ( rc == 0 ) pos += num_read;
+        if ( ctx->show_progress && ( ( blocks & 0x0F ) == 0 ) ) KOutMsg( "." );
+        blocks++;
+        if ( ctx->sleep_time > 0 ) KSleepMs( ctx->sleep_time );
+    }
+    *bytes_copied = pos;
+    if ( ctx->show_progress ) KOutMsg( "\n" );
+    KOutMsg( "%d blocks a %d bytes\n", blocks, ctx->blocksize );
+    return rc;
+}
+
+
+
+static uint32_t randr( uint32_t min, uint32_t max )
+{
+       double scaled = ( ( double )rand() / RAND_MAX );
+       return ( ( max - min + 1 ) * scaled ) + min;
+}
+
+
+static rc_t block_loop_random( const KFile *src, KFile *dst, char * buffer,
+                               uint64_t *bytes_copied, fetch_ctx * ctx )
+{
+    uint64_t src_size;
+    rc_t rc = KFileSize ( src, &src_size );
+    KOutMsg( "copy-mode : random blocks\n" );
+    if ( rc == 0 )
+    {
+        rc = KFileSetSize ( dst, src_size );
+        if ( rc == 0 )
+        {
+            uint32_t block_count = ( src_size / ctx->blocksize ) + 1;
+            uint32_t * block_vector = malloc( block_count * ( sizeof * block_vector ) );
+            if ( block_vector != NULL )
+            {
+                uint32_t loop;
+                
+                /* fill the block_vector with ascending numbers */
+                for ( loop = 0; loop < block_count; loop++ )
+                    block_vector[ loop ] = loop;
+                
+                /* randomize them */
+                for ( loop = 0; loop < block_count; loop++ )
+                {
+                    uint32_t src_idx = randr( 0, block_count - 1 );
+                    uint32_t dst_idx = randr( 0, block_count - 1 );
+                    /* swap it... */
+                    uint32_t tmp = block_vector[ dst_idx ];
+                    block_vector[ dst_idx ] = block_vector[ src_idx ];
+                    block_vector[ src_idx ] = tmp;
+                }
+
+                for ( loop = 0; rc == 0 && loop < block_count; loop++ )
+                {
+                    size_t num_read;
+                    uint64_t pos = ctx->blocksize;
+                    pos *= block_vector[ loop ];
+                    rc = src_2_dst( src, dst, buffer, pos, &num_read, ctx );
+                    if ( rc == 0 ) *bytes_copied += num_read;
+                    if ( ctx->show_progress && ( ( loop & 0x0F ) == 0 ) ) KOutMsg( "." );
+                    if ( ctx->sleep_time > 0 ) KSleepMs( ctx->sleep_time );
+
+                }
+                free( block_vector );
+                if ( ctx->show_progress ) KOutMsg( "\n" );
+                KOutMsg( "%d blocks a %d bytes\n", loop, ctx->blocksize );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t copy_file( const KFile * src, KFile * dst, fetch_ctx * ctx )
+{
+    rc_t rc = 0;
+    size_t buffer_size = ( ctx->count == 0 ? ctx->blocksize : ctx->count );
+    char * buffer = malloc( buffer_size );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcPacking, rcMemory, rcExhausted );
+        KOutMsg( "cant make buffer of size %u\n", buffer_size );
+    }
+    else
+    {
+        uint64_t bytes_copied = 0;
+        if ( ctx->count == 0 )
+        {
+            if ( ctx->random )
+                rc = block_loop_random( src, dst, buffer, &bytes_copied, ctx );
+            else
+                rc = block_loop_in_order( src, dst, buffer, &bytes_copied, ctx );
+        }
+        else
+        {
+            size_t num_read;
+            rc = src_2_dst( src, dst, buffer, ctx->start, &num_read, ctx );
+            if ( rc == 0 ) bytes_copied = num_read;
+        }
+        KOutMsg( "%lu bytes copied\n", bytes_copied );
+        free( buffer );
+    }
+    return rc;
+}
+
+
+#define CACHE_TEE_DEFAULT_BLOCKSIZE ( 32 * 1024 * 4 )
+
+static rc_t fetch_cached( KDirectory *dir, const KFile *src, KFile *dst, fetch_ctx *ctx )
+{
+    size_t bs = ctx->cache_blk == 0 ? CACHE_TEE_DEFAULT_BLOCKSIZE : ctx->cache_blk;
+    rc_t rc = KOutMsg( "persistent cache created : '%s' (blk-size: %d)\n", ctx->cache_file, bs );
+    if ( rc == 0 )
+    {
+        const KFile *tee; /* this is the file that forks persistent_content with remote */
+        rc = KDirectoryMakeCacheTee ( dir,                  /* the KDirectory for the the sparse-file */
+                                      &tee,                 /* the newly created cache-tee-file */
+                                      src,                  /* the file that we are wrapping ( usually the remote http-file ) */
+                                      ctx->cache_blk,       /* how big one block in the cache-tee-file will be */
+                                      ctx->cache_file );    /* the sparse-file we use write to */
+        if ( rc == 0 )
+        {
+            KOutMsg( "cache tee created\n" );
+            rc = copy_file( tee, dst, ctx );
+            KFileRelease( tee );
+        }
+    }
+    return rc;
+}
+
+
+static void extract_name( char ** dst, const char * url )
+{
+    char * last_slash = string_rchr ( url, string_size( url ), '/' );
+    if ( last_slash == NULL )
+        *dst = string_dup_measure( "out.bin", NULL );
+    else
+        *dst = string_dup_measure( last_slash + 1, NULL );
+}
+
+
+static rc_t fetch_from( KDirectory *dir, fetch_ctx *ctx, char * outfile,
+                        const KFile * src )
+{
+    uint64_t file_size;
+    rc_t rc = KFileSize( src, &file_size );
+    if ( rc != 0 )
+        KOutMsg( "cannot disover src-size >%R<\n", rc );
+    else
+    {
+        KFile *dst;
+        KOutMsg( "src-size = %lu\n", file_size );
+        rc = KDirectoryCreateFile ( dir, &dst, false, 0664, kcmInit, outfile );
+        if ( rc == 0 )
+        {
+            KOutMsg( "dst >%s< created\n", outfile );
+            if ( rc == 0 )
+            {
+                if ( ctx->cache_file != NULL )
+                    rc = fetch_cached( dir, src, dst, ctx );
+                else
+                    rc = copy_file( src, dst, ctx );
+            }
+            KFileRelease( dst );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t make_remote_file( struct KNSManager * kns_mgr, const KFile ** src, fetch_ctx * ctx )
+{
+    rc_t rc;
+    
+    KNSManagerSetVerbose( kns_mgr, ctx->verbose );
+    if ( ctx->reliable )
+        rc = KNSManagerMakeReliableHttpFile( kns_mgr, src, NULL, 0x01010000, ctx->url );
+    else
+        rc = KNSManagerMakeHttpFile( kns_mgr, src, NULL, 0x01010000, ctx->url );
+    
+    if ( rc != 0 )
+    {
+        if ( ctx->reliable )
+            (void)LOGERR( klogInt, rc, "KNSManagerMakeReliableHttpFile() failed" );
+        else
+            (void)LOGERR( klogInt, rc, "KNSManagerMakeHttpFile() failed" );
+    }
+    else
+    {
+        if ( ctx->buffer_size > 0 )
+        {
+            const KFile * temp_file;
+            rc = KBufFileMakeRead ( & temp_file, *src, ctx->buffer_size );
+            if ( rc == 0 )
+            {
+                KOutMsg( "remote-file wrapped in new big-block-reader of size %d\n", ctx->buffer_size );
+                KFileRelease ( *src );
+                *src = temp_file;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t fetch( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = 0;
+    char * outfile;
+    const KFile * remote;
+    struct KNSManager * kns_mgr;
+    
+    if ( ctx->destination == NULL )
+        extract_name( &outfile, ctx->url );
+    else
+        outfile = string_dup_measure( ctx->destination, NULL );
+
+    KOutMsg( "fetching: >%s<\n", ctx->url );
+    KOutMsg( "into    : >%s<\n", outfile );
+    if ( ctx->count > 0 )
+        KOutMsg( "range   : %u.%u\n", ctx->start, ctx->count );
+
+    rc = KNSManagerMake ( &kns_mgr );
+    if ( rc != 0 )
+        (void)LOGERR( klogInt, rc, "KNSManagerMake() failed" );
+    else
+    {
+        if ( ctx->proxy != NULL )
+        {
+            rc = KNSManagerSetHTTPProxyPath( kns_mgr, "%s", ctx->proxy );
+            if ( rc != 0 )
+                (void)LOGERR( klogInt, rc, "KNSManagerSetHTTPProxyPath() failed" );    
+        }
+        if ( rc == 0 )
+        {
+            rc = make_remote_file( kns_mgr, &remote, ctx );
+            if ( rc == 0 )
+            {
+                rc = fetch_from( dir, ctx, outfile, remote );
+                KFileRelease( remote );
+            }
+        }
+        KNSManagerRelease( kns_mgr );
+    }
+
+    free( outfile );
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+static rc_t show_size( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = KOutMsg( "source: >%s<\n", ctx->url );
+    if ( rc == 0 )
+    {
+        struct KNSManager * kns_mgr;
+        rc = KNSManagerMake ( &kns_mgr );
+        if ( rc != 0 )
+            (void)LOGERR( klogInt, rc, "KNSManagerMake() failed" );
+        else
+        {
+            const KFile * remote;    
+            rc = make_remote_file( kns_mgr, &remote, ctx );
+            if ( rc == 0 )
+            {
+                uint64_t file_size;
+                rc = KFileSize( remote, &file_size );
+                KOutMsg( "file-size = %u\n", file_size );
+                KFileRelease( remote );
+            }
+            KNSManagerRelease( kns_mgr );
+        }
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+/* check cache completeness on raw file in the filesystem */
+static rc_t check_cache_complete( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = KOutMsg( "checking if this cache file >%s< is complete\n", ctx->url );
+    if ( rc == 0 )
+    {
+        const KFile *f;
+        rc = KDirectoryOpenFileRead( dir, &f, "%s", ctx->url );
+        if ( rc == 0 )
+        {
+            bool is_complete;
+            rc = IsCacheFileComplete( f, &is_complete );
+            if ( rc != 0 )
+                KOutMsg( "error performing IsCacheFileComplete() %R\n", rc );
+            else
+            {
+                if ( is_complete )
+                    KOutMsg( "the file is complete\n" );
+                else
+                {
+                    float percent = 0;
+                    uint64_t bytes_cached;
+                    rc = GetCacheCompleteness( f, &percent, &bytes_cached );
+                    if ( rc == 0 )
+                        KOutMsg( "the file is %f%% complete ( %lu bytes are cached )\n", percent, bytes_cached );
+                }
+            }
+            KFileRelease( f );
+        }
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+static rc_t fetch_loop( const KFile * src, fetch_ctx *ctx )
+{
+    rc_t rc = 0;
+    size_t buffer_size = ( ctx->count == 0 ? ctx->blocksize : ctx->count );
+    char * buffer = malloc( buffer_size );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcPacking, rcMemory, rcExhausted );
+        KOutMsg( "cant make buffer of size %u\n", buffer_size );
+    }
+    else
+    {
+        uint64_t pos = 0;
+        size_t num_read = 0;
+        do
+        {
+            rc = KFileReadAll( src, pos, buffer, buffer_size, &num_read );
+            if ( rc == 0 )
+                pos += num_read;
+        } while ( rc == 0 && num_read > 0 );
+        KOutMsg( "%lu bytes copied\n", pos );
+        free( buffer );
+    }
+    return rc;
+}
+
+
+/* check cache completeness on a open cacheteefile */
+static rc_t check_cache_completeness( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = KOutMsg( "check if IsCacheTeeComplete() works as intended\n" );
+    if ( rc == 0 )
+    {
+        struct KNSManager * kns_mgr;    
+        rc = KNSManagerMake ( &kns_mgr );
+        if ( rc != 0 )
+            (void)LOGERR( klogInt, rc, "KNSManagerMake() failed" );
+        else
+        {
+            const KFile * remote;    
+            rc = make_remote_file( kns_mgr, &remote, ctx );
+            if ( rc == 0 )
+            {
+                const KFile *tee; /* this is the file that forks persistent_content with remote */
+                rc = KDirectoryMakeCacheTee ( dir,                  /* the KDirectory for the the sparse-file */
+                                              &tee,                 /* the newly created cache-tee-file */
+                                              remote,               /* the file that we are wrapping ( usually the remote http-file ) */
+                                              ctx->cache_blk,       /* how big one block in the cache-tee-file will be */
+                                              ctx->cache_file );    /* the sparse-file we use write to */
+                if ( rc == 0 )
+                    rc = fetch_loop( tee, ctx );
+                if ( rc == 0 )
+                {
+                
+                    bool complete = false;
+                    rc = IsCacheTeeComplete( tee, &complete );
+                    KOutMsg( "IsCacheTeeComplete() -> %R, complete = %s\n", rc, complete ? "YES" : "NO" );
+                    KFileRelease( tee );
+                }
+                KFileRelease( remote );
+            }
+            KNSManagerRelease( kns_mgr );
+        }
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+/* check cache completeness on a open cacheteefile */
+static rc_t full_download( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = KOutMsg( "make full download without partial access\n" );
+    if ( rc == 0 )
+    {
+        struct KNSManager * kns_mgr;    
+        rc = KNSManagerMake ( &kns_mgr );
+        if ( rc != 0 )
+            (void)LOGERR( klogInt, rc, "KNSManagerMake() failed" );
+        else
+        {
+            struct URLBlock url;
+            URLBlockInit( &url );
+            rc = ParseUrl( &url, ctx->url, string_size( ctx->url ) );
+            if ( rc == 0 )
+            {
+                KClientHttp * http;
+                rc = url.tls ?
+                    KNSManagerMakeClientHttps( kns_mgr, &http, NULL, 0x01010000, &url.host, url.port ):
+                    KNSManagerMakeClientHttp( kns_mgr, &http, NULL, 0x01010000, &url.host, url.port );
+                if ( rc == 0 )
+                {
+                    KClientHttpRequest * req;
+                    KOutMsg( "connection open!\n" );
+                    rc = KClientHttpMakeRequest( http, &req, ctx->url );
+                    if ( rc == 0 )
+                    {
+                        KClientHttpResult *rslt;
+                        
+                        KOutMsg( "request made!\n" );
+                        
+                        KClientHttpRequestConnection( req, true );
+                        KClientHttpRequestSetNoCache( req );
+                        
+                        rc = KClientHttpRequestGET( req, &rslt ); 
+                        if ( rc == 0 )
+                        {
+                            uint32_t result_code;
+                            size_t msg_size;
+                            char buffer[ 4096 * 32 ]; /* 128k */
+                            
+                            KOutMsg( "reply received!\n" );
+                            rc = KClientHttpResultStatus( rslt, &result_code, buffer, sizeof buffer, &msg_size );
+                            if ( rc == 0 )
+                            {
+                                struct KStream  *content;
+                                KOutMsg( "result-code = %d\n", result_code );
+                                if ( result_code == 200 )
+                                {
+                                    rc = KClientHttpResultGetInputStream( rslt, &content );
+                                    if ( rc == 0 )
+                                    {
+                                        KFile *dst;
+                                        char * outfile;
+                                        
+                                        if ( ctx->destination == NULL )
+                                            extract_name( &outfile, ctx->url );
+                                        else
+                                            string_dup_measure( ctx->destination, NULL );
+
+                                        rc = KDirectoryCreateFile ( dir, &dst, false, 0664, kcmInit, outfile );
+                                        if ( rc == 0 )
+                                        {
+                                            KOutMsg( "dst >%s< created\n", outfile );
+                                            if ( rc == 0 )
+                                            {
+                                                uint64_t pos = 0;
+                                                size_t num_read;
+                                                struct timeout_t timeout;
+
+                                                TimeoutInit( &timeout, 2000 );                                                
+                                                do
+                                                {
+                                                    rc = KStreamTimedRead( content, buffer, sizeof buffer, &num_read, &timeout );
+                                                    if ( rc == 0 )
+                                                    {
+                                                        size_t num_writ;
+                                                        rc = KFileWriteAll( dst, pos, buffer, num_read, &num_writ );
+                                                        pos += num_read;
+                                                    }
+                                                } while ( rc == 0 && num_read > 0 );
+
+                                                KOutMsg( "%d bytes read!\n", pos );
+                                            }
+                                            KFileRelease( dst );
+                                        }
+                                        free( outfile );
+                                        KStreamRelease( content );
+                                    }
+                                }
+                            }
+                            KClientHttpResultRelease( rslt );
+                        }
+                        KClientHttpRequestRelease( req );
+                    }
+                    KClientHttpRelease ( http );
+                }
+            }
+            KNSManagerRelease( kns_mgr );
+        }
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+static rc_t truncate_cache( KDirectory *dir, fetch_ctx *ctx )
+{
+    rc_t rc = 0;
+    KFile *f;
+
+    KOutMsg( "truncating this cache file >%s< (from it's trailing bitmap)\n", ctx->url );
+
+    rc = KDirectoryOpenFileWrite( dir, &f, true, "%s", ctx->url );
+    if ( rc == 0 )
+    {
+        rc = TruncateCacheFile( f );
+        if ( rc == 0 )
+            KOutMsg( "the file was truncated\n" );
+        else
+            KOutMsg( "the file was not truncated: %R\n", rc );
+        KFileRelease( f );
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t get_bool( Args * args, const char *option, bool *value )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option, &count );
+    *value = ( rc == 0 && count > 0 );
+    return rc;
+}
+
+
+rc_t get_str( Args * args, const char *option, const char ** value )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option, &count );
+    *value = NULL;
+    if ( rc == 0 && count > 0 )
+        rc = ArgsOptionValue( args, option, 0, (const void **)value );
+    return rc;
+}
+
+
+rc_t get_size_t( Args * args, const char *option, size_t *value, size_t dflt )
+{
+    const char * s;
+    rc_t rc = get_str( args, option, &s );
+    *value = dflt;
+    if ( rc == 0 && s != NULL )
+    {
+        size_t l = string_size( s );
+        if ( l == 0 )
+            *value = dflt;
+        else
+        {
+            size_t multipl = 1;
+            switch( s[ l - 1 ] )
+            {
+                case 'k' :
+                case 'K' : multipl = 1024; break;
+                case 'm' :
+                case 'M' : multipl = 1024 * 1024; break;
+                case 'g' :
+                case 'G' : multipl = 1024 * 1024 * 1024; break;
+            }
+            
+            if ( multipl > 1 )
+            {
+                char * src = string_dup( s, l - 1 );
+                if ( src != NULL )
+                {
+                    char * endptr;
+                    *value = strtol( src, &endptr, 0 ) * multipl;
+                    free( src );
+                }
+                else
+                    *value = dflt;
+            }
+            else
+            {
+                char * endptr;
+                *value = strtol( s, &endptr, 0 );
+            }
+        }
+    }
+    else
+        *value = dflt;
+    return rc;
+}
+
+
+rc_t get_fetch_ctx( Args * args, fetch_ctx * ctx )
+{
+    rc_t rc = 0;
+    uint32_t count;
+
+    ctx->url = NULL;
+    ctx->verbose = false;
+    rc = ArgsParamCount( args, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        rc = ArgsParamValue( args, 0, (const void **)&ctx->url );
+        if ( rc == 0 )
+        {
+            if ( count > 1 )
+                rc = ArgsParamValue( args, 1, (const void **)&ctx->destination );
+            else
+                ctx->destination = NULL;
+        }
+    }
+
+    if ( rc == 0 ) rc = get_bool( args, OPTION_VERB, &ctx->verbose );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_SHOW, &ctx->show_filesize );
+    if ( rc == 0 ) rc = get_str( args, OPTION_CACHE, &ctx->cache_file );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_CACHE_BLK, &ctx->cache_blk, 0 );
+    if ( rc == 0 ) rc = get_str( args, OPTION_PROXY, &ctx->proxy );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_RAND, &ctx->random );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_REP, &ctx->with_repeats );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_CREPORT, &ctx->report_cache );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_BLOCK, &ctx->blocksize, ( 32 * 1024 ) );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_BUFFER, &ctx->buffer_size, 0 );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_SLEEP, &ctx->sleep_time, 0 );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_TIMEOUT, &ctx->timeout_time, 0 );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_COMPLETE, &ctx->check_cache_complete );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_CCOMPL, &ctx->check_completeness );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_TRUNC, &ctx->truncate_cache );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_START, &ctx->start, 0 );
+    if ( rc == 0 ) rc = get_size_t( args, OPTION_COUNT, &ctx->count, 0 );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_PROGRESS, &ctx->show_progress );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_RELIABLE, &ctx->reliable );
+    if ( rc == 0 ) rc = get_bool( args, OPTION_FULL, &ctx->full_download );
+    
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+                MyOptions, sizeof ( MyOptions ) / sizeof ( OptDef ) );
+    if ( rc == 0 )
+    {
+        fetch_ctx ctx;
+
+        rc = get_fetch_ctx( args, &ctx );
+        if ( rc == 0 )
+        {
+            if ( ctx.url == NULL )
+                KOutMsg( "URL is missing!\n" );    
+            else
+            {
+                KDirectory *dir;
+                rc = KDirectoryNativeDir ( &dir );
+                if ( rc == 0 )
+                {
+                    if ( ctx.check_cache_complete )
+                        rc = check_cache_complete( dir, &ctx );
+                    else if ( ctx.check_completeness )
+                        rc = check_cache_completeness( dir, &ctx );
+                    else if ( ctx.truncate_cache )
+                        rc = truncate_cache( dir, &ctx );
+                    else if ( ctx.show_filesize )
+                        rc = show_size( dir, &ctx );
+                    else if ( ctx.full_download )
+                        rc = full_download( dir, &ctx );
+                    else
+                        rc = fetch( dir, &ctx );
+
+                    KDirectoryRelease ( dir );
+                }
+            }
+        }
+        ArgsWhack ( args );
+    }
+    else
+        KOutMsg( "ArgsMakeAndHandle() failed %R\n", rc );
+
+    return rc;
+}
diff --git a/tools/kqsh/.gitignore b/tools/kqsh/.gitignore
new file mode 100644
index 0000000..e601f91
--- /dev/null
+++ b/tools/kqsh/.gitignore
@@ -0,0 +1,7 @@
+*.vers.h
+kqsh-kdb.c
+kqsh-kdb.h
+kqsh-vdb.c
+kqsh-vdb.h
+kqsh-sra.c
+kqsh-sra.h
diff --git a/tools/kqsh/Makefile b/tools/kqsh/Makefile
new file mode 100644
index 0000000..1d62078
--- /dev/null
+++ b/tools/kqsh/Makefile
@@ -0,0 +1,207 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/kqsh
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	kqsh
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs kqsh-thunks
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs kqsh-thunks
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+	@ rm -f $(SRCDIR)/kqsh-[kv]db.[ch]
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# kqsh-thunks
+#
+KDB_THUNK_SRC = \
+	manager.h \
+	database.h \
+	table.h \
+	column.h \
+	index.h \
+	meta.h \
+	namelist.h
+
+KDB_THUNK_INCS = \
+	$(addprefix kdb/,$(KDB_THUNK_SRC))
+
+KDB_THUNK_DEPS = \
+	$(addprefix $(ITF)/,$(KDB_THUNK_INCS)) \
+	kqsh-thunk.pl \
+	Makefile
+
+KDB_THUNK_OBJ = \
+	:KDBManager=mgr \
+	:KDatabase=db \
+	:KTable=tbl \
+	:KColumn=col \
+	:KColumnBlob=blob \
+	:KIndex=idx \
+	:KMetadata=meta \
+	:KMDataNode=node
+
+kqsh-kdb.c: $(KDB_THUNK_DEPS)
+	perl kqsh-thunk.pl -mkdb -I$(ITF) $(addprefix -i,$(KDB_THUNK_INCS)) \
+	  $(KDB_THUNK_OBJ) -h kqsh-kdb.h -c $@ || rm $@
+
+kqsh-kdb.h: kqsh-kdb.c
+
+VDB_THUNK_SRC = \
+	manager.h \
+	database.h \
+	schema.h \
+	table.h \
+	cursor.h
+
+VDB_THUNK_INCS = \
+	$(addprefix vdb/,$(VDB_THUNK_SRC))
+
+VDB_THUNK_DEPS = \
+	$(addprefix $(ITF)/,$(VDB_THUNK_INCS)) \
+	kqsh-thunk.pl \
+	Makefile
+
+VDB_THUNK_OBJ = \
+	:VDBManager=mgr \
+	VSchemaRuntimeTable=srtt \
+	VSchema=schema \
+	VTypedecl=td \
+	VTypedesc=tdesc \
+	:VDatabase=db \
+	:VTable=tbl \
+	:VCursor=curs
+
+kqsh-vdb.c: $(VDB_THUNK_DEPS)
+	perl kqsh-thunk.pl -mvdb -I$(ITF) $(addprefix -i,$(VDB_THUNK_INCS)) \
+	  $(VDB_THUNK_OBJ) -h kqsh-vdb.h -c $@ || rm $@
+
+kqsh-vdb.h: kqsh-vdb.c
+
+SRA_THUNK_SRC = \
+	sradb.h \
+	wsradb.h \
+	sraschema.h
+
+SRA_THUNK_INCS = \
+	$(addprefix sra/,$(SRA_THUNK_SRC))
+
+SRA_THUNK_DEPS = \
+	$(addprefix $(ITF)/,$(SRA_THUNK_INCS)) \
+	kqsh-thunk.pl \
+	Makefile
+
+SRA_THUNK_OBJ = \
+	:SRAMgr=mgr \
+	SRANamelist=nmlist \
+	:SRATable=tbl \
+	SRAColumn=col \
+	VDBManager=vmgr
+
+kqsh-sra.c: $(SRA_THUNK_DEPS)
+	perl kqsh-thunk.pl -msra -I$(ITF) $(addprefix -i,$(SRA_THUNK_INCS)) \
+	  $(SRA_THUNK_OBJ) -h kqsh-sra.h -c $@ || rm $@
+
+kqsh-sra.h: kqsh-sra.c
+
+kqsh-thunks: kqsh-kdb.h kqsh-vdb.h kqsh-sra.h
+
+#-------------------------------------------------------------------------------
+# kqsh-load
+#  special rules to tell kqsh how to load libraries
+#
+
+#KQSH_LIBNAMES = \
+	-DLIBKDB=$(LPFX)kdb.$(SHLX) \
+	-DLIBWKDB=$(LPFX)wkdb.$(SHLX) \
+	-DLIBVDB=$(LPFX)vdb.$(SHLX) \
+	-DLIBWVDB=$(LPFX)wvdb.$(SHLX) \
+	-DLIBSRADB=$(LPFX)sradb.$(SHLX) \
+	-DLIBWSRADB=$(LPFX)wsradb.$(SHLX)
+
+KQSH_LIBNAMES = \
+	-DLIBNCBI_VDB=$(LPFX)ncbi-vdb.$(SHLX) \
+	-DLIBNCBI_WVDB=$(LPFX)ncbi-wvdb.$(SHLX)
+
+kqsh-load.$(OBJX): $(SRCDIR)/kqsh-load.c
+	$(CC) -o $@ $(OPT) $(KQSH_LIBNAMES) -D_LOGGING $<
+
+
+#-------------------------------------------------------------------------------
+# kqsh - query shell
+#
+KQSH_SRC = \
+	kqsh-print \
+	kqsh-tok \
+	kqsh-parse \
+	kqsh-alter \
+	kqsh-close \
+	kqsh-help \
+	kqsh-load \
+	kqsh-open \
+	kqsh-create \
+	kqsh-show \
+	kqsh-write \
+	kqsh-kdb \
+	kqsh-vdb \
+	kqsh-sra \
+	kqsh
+
+KQSH_OBJ = \
+	$(addsuffix .$(OBJX),$(KQSH_SRC))
+
+KQSH_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/kqsh: $(KQSH_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(KQSH_LIB)
diff --git a/tools/kqsh/kqsh-alter.c b/tools/kqsh/kqsh-alter.c
new file mode 100644
index 0000000..3df5743
--- /dev/null
+++ b/tools/kqsh/kqsh-alter.c
@@ -0,0 +1,347 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* alter cursor
+ *  'alter <cursor> add column [ ( <typedecl> ) ] NAME;'
+ *
+ *  all data after the 'column' keyword are gathered into
+ *  ( typedecl, name ) pairs. we are going to allow comma
+ *  separation, but otherwise just gather everything up to
+ *  the semi-colon.
+ */
+static
+rc_t kqsh_alter_cursor_add_column ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *cursor )
+{
+    rc_t rc;
+
+    do
+    {
+        size_t i;
+        uint32_t idx;
+        char coldecl [ 256 ];
+
+        for ( i = 0; i < sizeof coldecl - 1; )
+        {
+            /* end of column */
+            if ( t -> id == eSemiColon || t -> id == eComma )
+                break;
+
+            /* accumulate */
+            i += string_copy ( & coldecl [ i ],
+                sizeof coldecl - i, t -> str . addr, t -> str . size );
+
+            next_token ( tbl, src, t );
+        }
+
+        /* the name needs to fit in our buffer */
+        if ( i == sizeof coldecl - 1 )
+        {
+            rc = RC ( rcExe, rcCursor, rcUpdating, rcName, rcExcessive );
+            if ( interactive )
+            {
+                kqsh_printf ( "this is really hard to believe, but you managed to request\n"
+                              "a column with a %u byte expression. please stop trying to abuse me.\n",
+                              ( unsigned int ) i );
+            }
+            else
+            {
+                LOGERR ( klogErr, rc, "failed to add column to cursor" );
+            }
+            return rc;
+        }
+
+        /* perform the task */
+        rc = _VCursorAddColumn ( cursor -> u . obj, & idx, coldecl );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "cannot add column '$(expr)' to cursor '$(curs)'",
+                      "expr=%s,curs=%.*s"
+                      , coldecl
+                                 , ( int ) cursor -> name . size, cursor -> name . addr));
+        }
+
+        else if ( interactive )
+        {
+            kqsh_printf ( "added column '%s' ( idx %u ) to cursor '%N' ( %p )\n"
+                          , coldecl
+                          , idx
+                          , cursor
+                          , cursor -> u . obj
+                );
+        }
+    }
+    while ( t -> id == eComma );
+
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    return 0;
+}
+
+static
+rc_t kqsh_alter_cursor_add ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *cursor )
+{
+    switch ( t -> id )
+    {
+    case kw_column:
+        return kqsh_alter_cursor_add_column ( tbl, src, next_token ( tbl, src, t ), cursor );
+    }
+
+    return expected ( t, klogErr, "column" );
+}
+
+static
+rc_t kqsh_alter_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *cursor )
+{
+    switch ( t -> id )
+    {
+    case kw_add:
+        return kqsh_alter_cursor_add ( tbl, src, next_token ( tbl, src, t ), cursor );
+    }
+
+    return expected ( t, klogErr, "add" );
+}
+
+/* alter schema add path
+ *  'alter <schema> add include [ path ] STRING'
+ *  'alter <schema> add path STRING'
+ */
+static
+rc_t kqsh_alter_schema_add_path ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    rc_t rc;
+    String path;
+    struct VSchema *schema = ( void* ) sym -> u . obj;
+
+    switch ( t -> id )
+    {
+    case eString:
+    case eEscapedString:
+        path = t -> str;
+        path . addr += 1;
+        path . size -= 2;
+        break;
+
+    case eUntermString:
+    case eUntermEscapedString:
+        CONST_STRING ( & t -> str, "<unterminated string>" );
+    default:
+        return expected ( t, klogErr, "path string" );
+    }
+
+    /* consume semi-colon */
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    rc = _VSchemaAddIncludePath ( schema, "%.*s", ( int ) path . size, path . addr );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr,  (klogErr, rc, "cannot add search path '$(path)' to schema '$(name)'",
+                  "path=%.*s,name=%.*s"
+                  , ( int ) path . size, path . addr
+                             , ( int ) sym -> name . size, sym -> name . addr));
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "added search path '%S' to schema '%N' ( %p )\n",
+                      & path, sym, schema );
+    }
+
+    return rc;
+}
+
+/* alter schema add text
+ *  'alter <schema> add text STRING'
+ */
+static
+rc_t kqsh_alter_schema_add_text ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    rc_t rc;
+    String text;
+    struct VSchema *schema = ( void* ) sym -> u . obj;
+
+    switch ( t -> id )
+    {
+    case eString:
+    case eEscapedString:
+        text = t -> str;
+        text . addr += 1;
+        text . size -= 2;
+        break;
+
+    case eUntermString:
+    case eUntermEscapedString:
+        CONST_STRING ( & t -> str, "<unterminated string>" );
+    default:
+        return expected ( t, klogErr, "schema text string" );
+    }
+
+    /* consume semi-colon */
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    /* parse text */
+    rc = _VSchemaParseText ( schema, "kqsh-console", text . addr, text . size );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr,  (klogErr, rc, "cannot add text into schema '$(name)'",
+                             "name=%.*s", ( int ) sym -> name . size, sym -> name . addr));
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "added text to schema '%N' ( %p )\n", sym, schema );
+    }
+
+    return rc;
+}
+
+/* alter schema add
+ */
+static
+rc_t kqsh_alter_schema_add ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *schema )
+{
+    switch ( t -> id )
+    {
+    case kw_include:
+        if ( next_token ( tbl, src, t ) -> id == kw_path )
+    case kw_path:
+            next_token ( tbl, src, t );
+        return kqsh_alter_schema_add_path ( tbl, src, t, schema );
+    case kw_text:
+        return kqsh_alter_schema_add_text ( tbl, src, next_token ( tbl, src, t ), schema );
+    }
+
+    return expected ( t, klogErr, "include, path or text" );
+}
+
+
+/* alter schema load
+ *  'alter <schema> load STRING'
+ */
+static
+rc_t kqsh_alter_schema_load ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    rc_t rc;
+    String path;
+    struct VSchema *schema = ( void* ) sym -> u . obj;
+
+    switch ( t -> id )
+    {
+    case eString:
+    case eEscapedString:
+        path = t -> str;
+        path . addr += 1;
+        path . size -= 2;
+        break;
+
+    case eUntermString:
+    case eUntermEscapedString:
+        CONST_STRING ( & t -> str, "<unterminated string>" );
+    default:
+        return expected ( t, klogErr, "path string" );
+    }
+
+    /* consume semi-colon */
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    rc = _VSchemaParseFile ( schema, "%.*s", ( int ) path . size, path . addr );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr,  (klogErr, rc, "cannot load file '$(path)' into schema '$(name)'",
+                  "path=%.*s,name=%.*s"
+                  , ( int ) path . size, path . addr
+                             , ( int ) sym -> name . size, sym -> name . addr));
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "loaded file '%S' into schema '%N' ( %p )\n",
+                      & path, sym, schema );
+    }
+
+    return rc;
+}
+
+/* alter schema
+ */
+static
+rc_t kqsh_alter_schema ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *schema )
+{
+    switch ( t -> id )
+    {
+    case kw_add:
+        return kqsh_alter_schema_add ( tbl, src, next_token ( tbl, src, t ), schema );
+    case kw_load:
+        return kqsh_alter_schema_load ( tbl, src, next_token ( tbl, src, t ), schema );
+    }
+
+    return expected ( t, klogErr, "add or load" );
+}
+
+
+/* alter
+ */
+rc_t kqsh_alter ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    KSymbol *sym = t -> sym;
+
+    switch ( t -> id )
+    {
+    case kw_cursor:
+        if ( next_token ( tbl, src, t ) -> id != obj_VCursor )
+            break;
+        sym = t -> sym;
+    case obj_VCursor:
+        return kqsh_alter_cursor ( tbl, src, next_token ( tbl, src, t ), sym );
+
+    case kw_schema:
+        if ( next_token ( tbl, src, t ) -> id != obj_VSchema )
+            break;
+        sym = t -> sym;
+    case obj_VSchema:
+        return kqsh_alter_schema ( tbl, src, next_token ( tbl, src, t ), sym );
+    }
+
+    return expected ( t, klogErr, "cursor or schema" );
+}
diff --git a/tools/kqsh/kqsh-close.c b/tools/kqsh/kqsh-close.c
new file mode 100644
index 0000000..244a407
--- /dev/null
+++ b/tools/kqsh/kqsh-close.c
@@ -0,0 +1,186 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+#include "kqsh-sra.h"
+
+#include <klib/container.h>
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* close row
+ */
+static
+rc_t kqsh_close_row ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    rc_t rc = 0;
+    KSymbol *curs;
+
+    /* accept optional "on" keyword */
+    if ( next_token ( tbl, src, t ) -> id == kw_on )
+        next_token ( tbl, src, t );
+
+    /* expect cursor object */
+    switch ( t -> id )
+    {
+    case obj_VCursor:
+        curs = t -> sym;
+        break;
+    default:
+        return expected ( t, klogErr, "cursor" );
+    }
+
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    switch ( curs -> type )
+    {
+    case obj_VCursor:
+        rc = _VCursorCloseRow ( curs -> u . obj );
+        break;
+    }
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to close row on cursor '$(name)' ( $(addr) )"
+                  , "name=%.*s,addr=0x%zX"
+                  , ( int ) curs -> name . size, curs -> name . addr
+                  , ( size_t ) curs -> u . obj ));
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "closed row on cursor '%N' ( %p )\n"
+                      , curs, curs -> u . obj );
+    }
+
+    return rc;
+}
+
+
+/* whackobj
+ *  whacks created/opened objects
+ */
+void CC kqsh_whackobj ( BSTNode *n, void *ignore )
+{
+    KSymbol *sym = ( KSymbol* ) n;
+
+    switch ( sym -> type )
+    {
+    case obj_KDBManager:
+        _KDBManagerRelease ( sym -> u . obj );
+        break;
+    case obj_VDBManager:
+        _VDBManagerRelease ( sym -> u . obj );
+        break;
+    case obj_SRAManager:
+        _SRAMgrRelease ( sym -> u . obj );
+        break;
+    case obj_VSchema:
+        _VSchemaRelease ( sym -> u . obj );
+        break;
+
+    case obj_KTable:
+        _KTableRelease ( sym -> u . obj );
+        break;
+    case obj_VTable:
+        _VTableRelease ( sym -> u . obj );
+        break;
+
+    case obj_VCursor:
+        _VCursorRelease ( sym -> u . obj );
+        break;
+    }
+
+    KSymbolWhack ( & sym -> n, ignore );
+}
+
+/* close
+ */
+rc_t kqsh_close ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    KSymbol *sym;
+
+    /* handle close row */
+    if ( t -> id == kw_row )
+        return kqsh_close_row ( tbl, src, t );
+
+    /* expect normal object */
+    sym = t -> sym;
+
+    if ( sym == NULL || t -> id < rsrv_first )
+        return expected ( t, klogErr, "object id" );
+
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    if ( sym -> type >= obj_first )
+    {
+        if ( interactive )
+        {
+            const char *type;
+            switch ( sym -> type )
+            {
+            case obj_KDBManager:
+                type = "kdb manager"; break;
+            case obj_VDBManager:
+                type = "vdb manager"; break;
+            case obj_VSchema:
+                type = "schema"; break;
+            case obj_KTable:
+            case obj_VTable:
+                type = "table"; break;
+            case obj_VCursor:
+                type = "cursor"; break;
+            default:
+                type = "object";
+            }
+
+            kqsh_printf ( "closing %s '%N' ( %p )\n", type, sym, sym -> u . obj );
+        }
+
+        KSymTableRemoveSymbol ( tbl, sym );
+        kqsh_whackobj ( & sym -> n, NULL );
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "reserved object '%N' is not open\n", sym );
+    }
+
+    return 0;
+}
diff --git a/tools/kqsh/kqsh-create.c b/tools/kqsh/kqsh-create.c
new file mode 100644
index 0000000..290b02e
--- /dev/null
+++ b/tools/kqsh/kqsh-create.c
@@ -0,0 +1,680 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+#include "kqsh-sra.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* create cursor
+ *
+ *  'create cursor ID on TBL [ for update ];'
+ */
+static
+rc_t kqsh_create_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t, uint32_t mode )
+{
+    rc_t rc = 0;
+
+    void *obj;
+    String name;
+    bool for_write;
+    uint32_t obj_type;
+    KSymbol *using, *existing;
+
+    /* looking for a cursor name */
+    switch ( t -> id )
+    {
+    case eIdent:
+    case obj_VCursor:
+        name = t -> str;
+        existing = t -> sym;
+        break;
+    default:
+        return expected ( t, klogErr, "cursor name" );
+    }
+
+    /* get table */
+    if ( next_token ( tbl, src, t ) -> id != kw_on )
+        return expected ( t, klogErr, "on");
+
+    switch ( next_token ( tbl, src, t ) -> id )
+    {
+    case obj_VTable:
+        obj_type = obj_VCursor;
+        using = t -> sym;
+        break;
+    default:
+        return expected ( t, klogErr, "cursor capable table" );
+    }
+
+    /* look for update flag */
+    for_write = false;
+    if ( next_token ( tbl, src, t ) -> id == kw_for )
+    {
+        if ( next_token ( tbl, src, t ) -> id != kw_update )
+            return expected ( t, klogErr, "update" );
+        if ( read_only )
+        {
+            rc = RC ( rcExe, rcTable, rcOpening, rcMgr, rcReadonly );
+            if ( interactive )
+            {
+                kqsh_printf ( "you are executing in read-only mode.\n"
+                              "cannot create cursor for write.\n"
+                              "you can relaunch kqsh with the '-u' option to enable updates.\n"
+                    );
+            }
+            else
+            {
+                PLOGERR ( klogErr,  (klogErr, rc, "failed to create cursor '$(name)'",
+                                     "name=%.*s", ( int ) name . size, name . addr ));
+            }
+            return rc;
+        }
+
+        for_write = true;
+        next_token ( tbl, src, t );
+    }
+
+    /* now we're done parsing */
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    if ( existing != NULL ) switch ( mode )
+    {
+    case kcmOpen:
+        if ( interactive )
+        {
+            kqsh_printf ( "opened cursor '%N' ( %p )\n"
+                          , existing, existing -> u . obj );
+        }
+        return 0;
+    case kcmInit:
+        kqsh_whackobj ( & existing -> n, NULL );
+        break;
+    case kcmCreate:
+        rc = RC ( rcExe, rcTable, rcOpening, rcCursor, rcExists );
+        if ( interactive )
+            kqsh_printf ( "cursor '%N' already exists.\n", existing );
+        else
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "cursor '$(name)' could not be created",
+                                 "name=%.*s", ( int ) existing -> name . size, existing -> name . addr ));
+        }
+        return rc;
+    }
+
+    /* create the cursor */
+    switch ( using -> type )
+    {
+    case obj_VTable:
+        rc = for_write ?
+            _VTableCreateCursorWrite ( ( void* ) using -> u . obj, ( VCursor** ) & obj, kcmInsert ):
+            _VTableCreateCursorRead ( using -> u . obj, ( const VCursor** ) & obj );
+        break;
+    }
+
+    if ( rc == 0 )
+    {
+        KSymbol *sym;
+
+        /* create symbol */
+        rc = KSymTableCreateSymbol ( tbl, & sym, & name, obj_type, obj );
+        if ( rc == 0 )
+        {
+            if ( interactive )
+            {
+                kqsh_printf ( "created cursor '%N' ( %p )\n"
+                              , sym, sym -> u . obj );
+            }
+            return 0;
+        }
+
+        /* whack instance */
+        switch ( obj_type )
+        {
+        case obj_VCursor:
+            _VCursorRelease ( obj );
+            break;
+        }
+    }
+
+    PLOGERR ( klogInt,  (klogInt, rc,
+              "failed to create cursor '$(name)' on $(targ)"
+              , "name=%.*s,targ=%.*s"
+              , ( int ) name . size, name . addr
+                         , ( int ) using -> name . size, using -> name . addr ));
+
+    return rc;
+}
+
+/* create table
+ *
+ *  'create table PATH [ as ID ] [ with schema ID[.ID] ] [ using ID ];'
+ */
+static
+rc_t kqsh_create_table ( KSymTable *tbl, KTokenSource *src, KToken *t, uint32_t mode )
+{
+    rc_t rc = 0;
+    /* bool have_as; */
+    String path, name;
+
+    KSymbol *schema;
+    String schema_tbl;
+    char schema_tbl_str [ 256 ];
+
+    KSymbol *using, *existing;
+
+    void *obj;
+    uint32_t obj_type = 0;
+
+    /* looking for a table path */
+    if ( t -> id != eString )
+        return expected ( t, klogErr, "table path string or name string" );
+    StringSubstr ( & t -> str, & path, 1, t -> str . len - 2 );
+
+    /* look for kqsh object id */
+    if ( next_token ( tbl, src, t ) -> id != kw_as )
+    {
+        /* not renamed - take path leaf as kqsh variable name */
+        const char *slash = string_rchr ( path . addr, path . size, '/' );
+        if ( slash ++ == NULL )
+            name = path;
+        else
+        {
+            size_t size = path . size - ( slash - path . addr );
+            StringInit ( & name, slash, size, string_len ( slash, size ) );
+        }
+
+        existing = KSymTableFind ( tbl, & name );
+        /* have_as = false; */
+    }
+
+    /* require a name of some sort, allow redefine for the moment */
+    else if ( next_token ( tbl, src, t ) -> id != eIdent && t -> sym == NULL )
+        return expected ( t, klogErr, "table id" );
+    else
+    {
+        name = t -> str;
+        existing = t -> sym;
+        next_token ( tbl, src, t );
+        /* have_as = true; */
+    }
+
+    /* check to see if name is in use */
+    if ( existing != NULL )
+    {
+        KMetadata *meta;
+
+        /* use a kludgy test for being open for update */
+        switch ( existing -> type )
+        {
+        case obj_KTable:
+            rc = _KTableOpenMetadataUpdate ( ( void* ) existing -> u . obj, & meta );
+            break;
+        case obj_VTable:
+            rc = _VTableOpenMetadataUpdate ( ( void* ) existing -> u . obj, & meta );
+            break;
+        default:
+            return expected ( t, klogErr, "table id" );
+        }
+
+        _KMetadataRelease ( meta );
+        if ( rc != 0 )
+        {
+            /* table is open, but is ( most likely ) read-only */
+            if ( interactive )
+                kqsh_printf ( "table '%N' is currently open for read", existing );
+            else
+            {
+                rc = RC ( rcExe, rcTable, rcCreating, rcTable, rcBusy );
+                PLOGERR ( klogErr,  (klogErr, rc, "cannot create table '$(name)'", "name=%.*s"
+                                     , ( int ) name . size, name . addr ));
+                return rc;
+            }
+        }
+    }
+
+    /* look for schema spec */
+    schema = NULL;
+    CONST_STRING ( & schema_tbl, "" );
+    if ( t -> id == kw_with )
+    {
+        /* should see keyword 'schema' */
+        if ( next_token ( tbl, src, t ) -> id == kw_schema )
+            next_token ( tbl, src, t );
+
+        /* accept any id, but look for schema object */
+        if ( t -> id == obj_VSchema )
+        {
+            schema = t -> sym;
+            if ( next_token ( tbl, src, t ) -> id == ePeriod )
+            {
+                if ( next_token ( tbl, src, t ) -> id != eIdent && t -> sym == NULL )
+                    return expected ( t, klogErr, "schema table id" );
+                schema_tbl = t -> str;
+                next_token ( tbl, src, t );
+            }
+        }
+        else if ( t -> id != eIdent && t -> sym == NULL )
+            return expected ( t, klogErr, "schema table id" );
+        else
+        {
+            schema_tbl = t -> str;
+            next_token ( tbl, src, t );
+        }
+    }
+
+    /* look for 'using' clause' */
+    using = NULL;
+    if ( t -> id == kw_using )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case obj_KDBManager:
+            /* if table exists but is not a KTable, it's an error */
+            if ( existing != NULL ) switch ( existing -> type )
+            {
+            case obj_KTable:
+                break;
+            case obj_VTable:
+                return expected ( t, klogErr, "vdb manager or database" );
+            }
+            /* both schema and tbl name require vdb+ manager */
+            if ( schema != NULL && schema_tbl . len != 0 )
+                return expected ( t, klogErr, "schema capable manager" );
+            /* schema alone could be mgr with default name
+               or db where table name collides with kqsh id */
+            if ( schema != NULL )
+                return expected ( t, klogErr, "schema capable manager or database" );
+            /* no schema but tbl name requires database */
+            if ( schema_tbl . len != 0 )
+                return expected ( t, klogErr, "schema capable database" );
+
+            /* this is the target object */
+            using = t -> sym;
+            break;
+
+        case obj_VDBManager:
+            /* if table exists but is not a VTable, it's an error */
+            if ( existing != NULL ) switch ( existing -> type )
+            {
+            case obj_KTable:
+                return expected ( t, klogErr, "kdb manager or database" );
+            case obj_VTable:
+                break;
+            }
+            /* neither schema nor tbl requires kdb mgr or db */
+            if ( schema == NULL && schema_tbl . len == 0 )
+                return expected ( t, klogErr, "kdb manager or database" );
+            /* table name alone requires vdb+ database */
+            if ( schema == NULL )
+                return expected ( t, klogErr, "schema capable database" );
+
+            /* schema alone implies default table
+               schema plus table name is standard */
+            using = t -> sym;
+            break;
+
+#if 0
+        case obj_VDatabase:
+            /* if table exists but is not a VTable, it's an error */
+            if ( existing != NULL ) switch ( existing -> type )
+            {
+            case obj_KTable:
+                return expected ( t, klogErr, "kdb manager or database" );
+            case obj_VTable:
+                break;
+            }
+            /* neither schema nor tbl requires kdb mgr or db */
+            if ( schema == NULL && schema_tbl . len == 0 )
+                return expected ( t, klogErr, "kdb manager or database" );
+            /* schema alone is reinterpreted as table name */
+            if ( schema_tbl . len == 0 )
+            {
+                schema_tbl = schema -> name;
+                schema = NULL;
+            }
+            /* schema plus table name requires vdb+ manager */
+            else if ( schema != NULL )
+                return expected ( t, klogErr, "schema capable manager" );
+
+            /* database with no schema but table name */
+            using = t -> sym;
+            break;
+#endif
+        default:
+            if ( schema == NULL )
+            {
+                return expected ( t, klogErr, ( schema_tbl . len == 0 ) ?
+                    "kdb manager or database" : "schema capable database" );
+            }
+
+            return expected ( t, klogErr, ( schema_tbl . len == 0 ) ?
+                "schema capable manager or database" : "schema capable manager" );
+        }
+
+        next_token ( tbl, src, t );
+    }
+
+    /* expect target object */
+    if ( using == NULL )
+    {
+        if ( schema == NULL )
+        {
+            return expected ( t, klogErr, ( schema_tbl . len == 0 ) ?
+                "kdb manager or database" : "schema capable database" );
+        }
+
+        return expected ( t, klogErr, ( schema_tbl . len == 0 ) ?
+            "schema capable manager or database" : "schema capable manager" );
+    }
+
+    /* close off statement */
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    /* if in read-only mode, this whole thing will fail */
+    if ( read_only )
+    {
+        rc = RC ( rcExe, rcTable, rcOpening, rcMgr, rcReadonly );
+        if ( interactive )
+        {
+            kqsh_printf ( "you are executing in read-only mode.\n"
+                          "table creation is not supported.\n"
+                          "you can relaunch kqsh with the '-u' option to enable updates.\n"
+                );
+        }
+        else
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "failed to create table '$(path)' as '$(name)'",
+                      "path=%.*s,name=%.*s"
+                      , ( int ) path . size, path . addr
+                                 , ( int ) name . size, name . addr ));
+        }
+        return rc;
+    }
+
+    /* prepare schema table string */
+    if ( schema_tbl . size >= sizeof schema_tbl_str )
+    {
+        rc = RC ( rcExe, rcTable, rcCreating, rcString, rcExcessive );
+        PLOGERR ( klogErr,  (klogErr, rc, "schema name length = $(len)", "len=%zu", schema_tbl . size ));
+        return rc;
+    }
+    string_copy ( schema_tbl_str, sizeof schema_tbl_str,
+                  schema_tbl . addr, schema_tbl . size );
+
+
+    /* handle existing table */
+    if ( existing != NULL )  switch ( mode )
+    {
+    case kcmOpen:
+        if ( interactive )
+        {
+            kqsh_printf ( "opened table '%N' ( %p )\n"
+                          , existing, existing -> u . obj );
+        }
+        return 0;
+    case kcmInit:
+        kqsh_whackobj ( & existing -> n, NULL );
+        break;
+    case kcmCreate:
+        rc = RC ( rcExe, rcTable, rcCreating, rcTable, rcExists );
+        if ( interactive )
+            kqsh_printf ( "table '%N' is already open", existing );
+        else
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "table '$(name)' could not be created",
+                                 "name=%.*s", ( int ) existing -> name . size, existing -> name . addr ));
+        }
+        return rc;
+    }
+
+    /* dispatch */
+    switch ( using -> type )
+    {
+    case obj_KDBManager:
+        obj_type = obj_KTable;
+        rc = _KDBManagerCreateTable ( ( void* ) using -> u . obj, ( KTable** ) & obj,
+            mode | kcmParents,"%.*s", ( int ) path . size, path . addr );
+        break;
+    case obj_VDBManager:
+        obj_type = obj_VTable;
+        assert ( schema != NULL );
+        rc = _VDBManagerCreateTable ( ( void* ) using -> u . obj, ( VTable** ) & obj,
+            schema -> u . obj, schema_tbl_str [ 0 ] ? schema_tbl_str : NULL,
+            mode | kcmParents,"%.*s", ( int ) path . size, path . addr );
+        break;
+    }
+
+    if ( rc == 0 )
+    {
+        KSymbol *sym;
+
+        /* create symbol */
+        rc = KSymTableCreateSymbol ( tbl, & sym, & name, obj_type, obj );
+        if ( rc == 0 )
+        {
+            if ( interactive )
+            {
+                kqsh_printf ( "created table '%N' ( %p )\n"
+                              , sym, sym -> u . obj );
+            }
+            return 0;
+        }
+
+        /* whack instance */
+        switch ( obj_type )
+        {
+        case obj_KTable:
+            _KTableRelease ( obj );
+            break;
+        case obj_VTable:
+            _VTableRelease ( obj );
+            break;
+        }
+    }
+
+    PLOGERR ( klogInt,  (klogInt, rc,
+              "failed to create table '$(name)' using $(targ)"
+              , "name=%.*s,targ=%.*s"
+              , ( int ) name . size, name . addr
+                         , ( int ) using -> name . size, using -> name . addr ));
+
+    return rc;
+}
+
+
+/* create schema
+ *
+ *  'create schema [ as ] ID [ using MGR ];'
+ */
+static
+rc_t kqsh_create_schema ( KSymTable *tbl, KTokenSource *src, KToken *t, uint32_t mode )
+{
+    rc_t rc = 0;
+    String name;
+    KSymbol *existing;
+    const KSymbol *mgr;
+    struct VSchema *schema;
+
+    /* shouldn't be here, but don't choke on it */
+    if ( t -> id == kw_as )
+        next_token ( tbl, src, t );
+
+    /* get schema object name */
+    switch ( t -> id )
+    {
+    case eIdent:
+    case obj_VSchema:
+        name = t -> str;
+        existing = t -> sym;
+        break;
+    default:
+        return expected ( t, klogErr, "schema name" );
+    }
+
+    /* there is no implicit mgr yet */
+    mgr = NULL;
+
+    /* get using clause */
+    if ( next_token ( tbl, src, t ) -> id == kw_using )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case obj_VDBManager:
+        case obj_SRAManager:
+            mgr = t -> sym;
+            break;
+        default:
+            return expected ( t, klogErr, "open vdb or sra manager" );
+        }
+
+        next_token ( tbl, src, t );
+    }
+    else if ( mgr == NULL )
+    {
+        return expected ( t, klogErr, "using" );
+    }
+
+    /* expect ';' */
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    /* if the schema already exists, then look at mode */
+    if ( existing != NULL ) switch ( mode )
+    {
+    case kcmOpen:
+        if ( interactive )
+        {
+            kqsh_printf ( "opened schema '%N' ( %p )\n"
+                          , existing, existing -> u . obj );
+        }
+        return 0;
+    case kcmInit:
+        kqsh_whackobj ( & existing -> n, NULL );
+        break;
+    case kcmCreate:
+        rc = RC ( rcExe, rcSchema, rcCreating, rcSchema, rcExists );
+        if ( interactive )
+            kqsh_printf ( "schema '%N' already exists", existing );
+        else
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "schema '$(name)' could not be created",
+                                 "name=%.*s", ( int ) existing -> name . size, existing -> name . addr ));
+        }
+        return rc;
+    }
+
+    /* now process the request */
+    switch ( mgr -> type )
+    {
+    case obj_VDBManager:
+        rc = _VDBManagerMakeSchema ( mgr -> u . obj, & schema );
+        break;
+    case obj_SRAManager:
+        rc = _SRAMgrMakeSRASchema ( mgr -> u . obj, & schema );
+        break;
+    }
+
+    if ( rc == 0 )
+    {
+        KSymbol *sym;
+
+        /* create symbol */
+        rc = KSymTableCreateSymbol ( tbl, & sym, & name, obj_VSchema, schema );
+        if ( rc == 0 )
+        {
+            if ( interactive )
+            {
+                kqsh_printf ( "created schema '%N' ( %p )\n"
+                              , sym, sym -> u . obj );
+            }
+            return 0;
+        }
+
+        /* whack instance */
+        _VSchemaRelease ( schema );
+    }
+
+    PLOGERR ( klogInt,  (klogInt, rc,
+              "failed to create schema '$(name)' using $(mgr)"
+              , "name=%.*s,mgr=%.*s"
+              , ( int ) name . size, name . addr
+                         , ( int ) mgr -> name . size, mgr -> name . addr ));
+
+    return rc;
+}
+
+/* create
+ */
+rc_t kqsh_create ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    uint32_t mode = kcmCreate;
+
+    if ( t -> id == kw_or )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case kw_replace:
+            mode = kcmInit;
+            break;
+        case kw_open:
+            mode = kcmOpen;
+            break;
+        default:
+            return expected ( t, klogErr, "replace or open" );
+        }
+
+        next_token ( tbl, src, t );
+    }
+
+    switch ( t -> id )
+    {
+    case kw_cursor:
+        return kqsh_create_cursor ( tbl, src, next_token ( tbl, src, t ), mode );
+    case kw_schema:
+        return kqsh_create_schema ( tbl, src, next_token ( tbl, src, t ), mode );
+    case kw_table:
+        return kqsh_create_table ( tbl, src, next_token ( tbl, src, t ), mode );
+    }
+
+    return expected ( t, klogErr, "cursor, schema or table" );
+}
diff --git a/tools/kqsh/kqsh-help.c b/tools/kqsh/kqsh-help.c
new file mode 100644
index 0000000..49edeb7
--- /dev/null
+++ b/tools/kqsh/kqsh-help.c
@@ -0,0 +1,1292 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+
+#include <klib/container.h>
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* alias
+ */
+static
+rc_t kqsh_help_alias ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create a new name for an existing object\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+
+/* alter
+ */
+static
+rc_t kqsh_help_alter_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "alter a cursor\n"
+             "\n"
+             "usage:\n"
+             "  'alter <cursor> add column [ ( TYPEDECL ) ] NAME;'\n"
+             "\n"
+             "  the 'alter <cursor> add' command allows addition of columns\n"
+             "  before the cursor has been opened for use.\n"
+        );
+
+    return 0;
+}
+static
+rc_t kqsh_help_alter_schema ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "alter an open schema\n"
+             "\n%s%s%s%s",
+             "usage:\n"
+             "  'alter <schema> add include [ path ] PATH;'\n"
+             "  'alter <schema> add path PATH;'\n"
+             "  'alter <schema> load PATH;'\n"
+             "\n",
+             "  the 'alter <schema> add' command allows addition of new\n"
+             "  search paths that affect loading and schema include directives.\n"
+             "\n",
+             "  the 'alter <schema> load' command will load schema from the\n"
+             "  indicated file.\n",
+             "\n"
+             "  the keywords 'alter schema' may be used instead of 'alter' alone.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_alter ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        case kw_cursor:
+            return kqsh_help_alter_cursor ( tbl, src, t );
+        case kw_schema:
+            return kqsh_help_alter_schema ( tbl, src, t );
+
+        default:
+            return expected ( t, klogWarn, "cursor or schema" );
+        }
+    }
+
+    printf ( "alter an open object\n"
+             "\n%s%s",
+             "usage:\n"
+             "  alter <vdb manager>...\n"
+             "  alter <sra manager> ...\n"
+             "  alter <cursor> ...\n"
+             "  alter <schema> ...\n"
+             "\n",
+             "  the alter command is used to modify open objects in some way.\n"
+             "\n"
+             "  type 'help alter <object>;' for more information about that command.\n"
+        );
+
+    return 0;
+}
+
+
+/* close
+ */
+static
+rc_t kqsh_help_close ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "close an open object or cursor row\n"
+             "\n"
+             "usage:\n"
+             "  'close ID;'\n"
+             "  'close row [ on ] <cursor>;\n"
+        );
+
+    return 0;
+}
+
+
+/* create
+ */
+static
+rc_t kqsh_help_create_column ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create or open a stand-alone column using kdb manager (OBSCURE)\n"
+             "\n"
+             "usage:\n"
+             "  'create column PATH [ as ID ] [ using KDB-MGR ];'\n"
+             "\n"
+             "  create a column using implicit or named kdb manager.\n"
+             "  type 'help create;' for information on create semantics.\n"
+             "\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_create_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create a row cursor upon a table\n"
+             "\n"
+             "usage:\n"
+             "  'create cursor ID on TBL [ for update ];'\n"
+             "\n"
+             "  create a named cursor on the given table. the default cursor mode is\n"
+             "  read-only, but may be used for write 'for update' is specified.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_create_database ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create or open a databse\n"
+             "\n%s%s",
+             "usage:\n"
+             "  'create database PATH [ as ID ] [ using KDB-MGR ];'\n"
+             "  'create database PATH [ as ID ]\n"
+             "     [ with ] schema ID.ID [ using MGR ];'\n"
+             "  'create database ID [ as ID ] [ using KDB-DB ];'\n"
+             "  'create database ID [ as ID ]\n"
+             "     [ with ] schema ID [ using DB ];'\n"
+             "\n",
+             "  create a database using implicit or named manager or database.\n"
+             "  type 'help create;' for information on create semantics.\n"
+             "  when using a database schema, the target object may be any\n"
+             "  manager or database above kdb level.\n"
+             "\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_create_schema ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create an empty schema object\n"
+             "\n"
+             "usage:\n"
+             "  'create schema as ID [ using MGR ];'\n"
+             "\n"
+             "  create a new schema populated only by intrinsic definitions.\n"
+             "  the manager used must be above kdb level.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_create_table ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "create or open a table\n"
+             "\n%s%s",
+             "usage:\n"
+             "  'create table PATH [ as ID ] [ using KDB-MGR ];'\n"
+             "  'create table PATH [ as ID ]\n"
+             "     [ with ] schema ID.ID [ using MGR ];'\n"
+             "  'create table ID [ as ID ] [ using KDB-DB ];'\n"
+             "  'create table ID [ as ID ]\n"
+             "     [ with ] schema ID [ using DB ];'\n"
+             "\n",
+             "  create a table using implicit or named manager or database.\n"
+             "  type 'help create;' for information on create semantics.\n"
+             "  when using a table schema, the target object may be any\n"
+             "  manager or database above kdb level.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_create ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        case kw_column:
+            return kqsh_help_create_column ( tbl, src, t );
+        case kw_cursor:
+            return kqsh_help_create_cursor ( tbl, src, t );
+        case kw_database:
+            return kqsh_help_create_database ( tbl, src, t );
+        case kw_schema:
+            return kqsh_help_create_schema ( tbl, src, t );
+        case kw_table:
+            return kqsh_help_create_table ( tbl, src, t );
+
+        default:
+            return expected ( t, klogWarn, "column, cursor, database, schema, table or ;" );
+        }
+    }
+
+    printf ( "create a new object or open/reinitialize an existing one\n"
+             "\n%s%s%s%s",
+             "usage:\n"
+             "  create ...            - create a new object or fail if it already exists.\n"
+             "  create or replace ... - create a new object or reinitialize existing one.\n"
+             "  create or open ...    - create a new object or open existing one for update.\n"
+             "\n",
+             "  create column ...\n"
+             "  create cursor ...\n"
+             "  create database ...\n"
+             "  create schema ...\n"
+             "  create table ...\n"
+             "\n",
+             "  the create command is used primarily to create new objects, but may\n"
+             "  also be used to open and optionally reinitialize certain types of\n"
+             "  existing objects, namely database, tables and columns.\n"
+             "\n",
+             "semantic variations on databases, tables or columns:\n"
+             "  create or open - create if not there, open otherwise [ open ( O_CREAT ) ]\n"
+             "  create or init - create if not there, reinitialize otherwise [ open ( O_CREAT | O_TRUNC ) ]\n"
+             "\n"
+             "  type 'help create <object>;' for more information about that command.\n"
+        );
+
+    return 0;
+}
+
+/* delete
+ */
+static
+rc_t kqsh_help_delete ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "delete rows or nodes\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+
+/* drop
+ */
+static
+rc_t kqsh_help_drop ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "remove an object from the file system\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+
+/* execute
+ */
+static
+rc_t kqsh_help_execute ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "run a kqsh script in a sub-scope\n"
+        );
+
+    return 0;
+}
+
+
+/* help
+ */
+static
+rc_t kqsh_help_help ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "print help\n"
+             "\n"
+             "usage:\n"
+             "  'help <topic>;'\n"
+        );
+
+    return 0;
+}
+
+
+/* open
+ */
+static
+rc_t kqsh_help_open_mgr ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "open a library manager\n"
+             "\n%s%s%s",
+             "usage:\n"
+             "  'open kdb [ manager ] [ as ID ];'\n"
+             "  'open vdb [ manager ] [ as ID ];'\n"
+             "  'open sra [ manager ] [ as ID ];'\n"
+             "  'open sra path [ manager ] [ as ID ];'\n"
+             "\n",
+             "  this command opens a manager object for the indicated library,\n"
+             "  dynamically loading the library if required. the library operational\n"
+             "  mode (read-only or update) is selected at kqsh launch time by using\n"
+             "  the '-u' switch for update (default is read-only).\n"
+             "\n",
+             "  the sra manager can optionally work with a path manager to convert\n"
+             "  table accession strings into runtime paths. type 'help open sra;' for\n"
+             "  more information.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_open_path_mgr ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        case kw_manager:
+            return kqsh_help_open_mgr ( tbl, src, t );
+
+        case kw_path:
+            if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+            {
+                switch ( next_token ( tbl, src, t ) -> id )
+                {
+                case eEndOfInput:
+                case eSemiColon:
+                case kw_manager:
+                    break;
+                default:
+                    return expected ( t, klogWarn, "manager" );
+                }
+            }
+            break;
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "open a library or path manager\n"
+             "\n%s%s%s%s%s",
+             "usage:\n"
+             "  'open sra [ manager ] [ as ID ];'\n"
+             "  'open sra path [ manager ] [ as ID ];'\n"
+             "\n",
+             "  this command opens a manager object for the indicated library,\n"
+             "  dynamically loading the library if required. the library operational\n"
+             "  mode (read-only or update) is selected at kqsh launch time by using\n"
+             "  the '-u' switch for update (default is read-only).\n"
+             "\n",
+             "  the path manager may be opened along with its related db manager.\n"
+             "  its purpose is to transform object paths given in open commands from\n"
+             "  accessions into runtime paths. for example:\n"
+             "\n",
+             "    > 'open sra manager; open sra path manager;'\n"
+             "    > 'open table \"SRR000001\" using sramgr;'\n"
+             "\n",
+             "  the commands above will open the sra manager under its default name,\n"
+             "  then open the installation specific sra path manager and associate the\n"
+             "  two, such that the next open table command will convert the given path\n"
+             "  from an accession 'SRR000001' to a full file system path.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_open_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "open a cursor\n"
+             "\n"
+             "usage:\n"
+             "  'open ID at ROW;'\n"
+             "\n"
+             "  this command will cause a cursor to be opened at the given starting row.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_open_row ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "open a row on cursor\n"
+             "\n"
+             "usage:\n"
+             "  'open row [ ROW ] [ on ] <cursor>;'\n"
+             "\n"
+             "  this command will cause a cursor row to be opened.\n"
+             "\n"
+             "  if no row id is specified, the current cursor row marker will be used.\n"
+             "  otherwise, the cursor marker will be preset to given row id before the\n"
+             "  row is opened.\n"
+             "\n"
+             "  if the cursor row is already open, the command will succeed provided\n"
+             "  that the current row id matches the requested row id.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_open ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        case kw_sra:
+            return kqsh_help_open_path_mgr ( tbl, src, t );
+        case kw_kdb:
+        case kw_vdb:
+            if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+            {
+                switch ( next_token ( tbl, src, t ) -> id )
+                {
+                case eEndOfInput:
+                case eSemiColon:
+                case kw_manager:
+                    break;
+                    return expected ( t, klogWarn, "manager" );
+                }
+            }
+        case kw_manager:
+            return kqsh_help_open_mgr ( tbl, src, t );
+
+        case kw_cursor:
+            return kqsh_help_open_cursor ( tbl, src, t );
+
+        case kw_row:
+            return kqsh_help_open_row ( tbl, src, t );
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "open an existing object\n"
+             "\n"
+             "usage:\n"
+             "  'open kdb [ manager ] [ as ID ];'\n"
+             "  'open vdb [ manager ] [ as ID ];'\n"
+             "  'open sra [ manager ] [ as ID ];'\n"
+             "  'open sra path [ manager ] [ as ID ];'\n"
+             "  'open column' ...\n"
+             "  'open database' ...\n"
+             "  'open metadata' ...\n"
+             "  'open row' ...\n"
+             "  'open schema' ...\n"
+             "  'open table' ...\n"
+             "  'open cursor' ...\n"
+             "\n"
+             "  type 'help open manager;' for more information about those commands,\n"
+             "  type 'help open <object>;' for more information about remaining command.\n"
+        );
+
+    return 0;
+}
+
+/* quit aka exit
+ */
+static
+rc_t kqsh_help_quit ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "exit kqsh\n"
+             "\n"
+             "usage:\n"
+             "  'quit;'\n"
+             "  'exit;'\n"
+        );
+
+    return 0;
+}
+
+#define kqsh_help_exit( tbl, src, t ) \
+    kqsh_help_quit ( tbl, src, t )
+
+
+/* rename
+ */
+static
+rc_t kqsh_help_rename ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "rename an object within file system\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+
+/* show
+ */
+static
+rc_t kqsh_help_show_mgr ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "show library manager properties\n"
+             "\n"
+             "usage:\n"
+             "  'show <mgr> version;'\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_show_path_mgr ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+        case kw_manager:
+            return kqsh_help_show_mgr ( tbl, src, t );
+
+        case kw_path:
+            if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+            {
+                switch ( next_token ( tbl, src, t ) -> id )
+                {
+                case eEndOfInput:
+                case eSemiColon:
+                case kw_manager:
+                    break;
+                default:
+                    return expected ( t, klogWarn, "manager" );
+                }
+            }
+            break;
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+    else
+    {
+        return kqsh_help_show_mgr ( tbl, src, t );
+    }
+
+    printf ( "show path manager properties\n"
+             "\n"
+             "usage:\n"
+             "  NO USAGE AVAILABLE\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_show_schema ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "inspect an open schema\n"
+             "\n"
+             "usage:\n"
+             "  'show <schema>;'\n"
+             "  'show <schema> types;'\n"
+             "  'show <schema> typesets;'\n"
+             "  'show <schema> formats;'\n"
+             "  'show <schema> constants;'\n"
+             "  'show <schema> functions;'\n"
+             "  'show <schema> columns;'\n"
+             "  'show <schema> tables;'\n"
+             "  'show <schema> databases;'\n"
+             "  'show <schema> . NAME;'\n"
+             "  'show <schema> . NAME # VERSION;'\n"
+             "\n"
+             "  this command allows inspection of schema contents by listing object\n"
+             "  names or dumping their declarations.\n"
+        );
+
+    return 0;
+}
+
+static
+rc_t kqsh_help_show ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        case kw_sra:
+            return kqsh_help_show_path_mgr ( tbl, src, t );
+
+        case kw_kdb:
+        case kw_vdb:
+            if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+            {
+                switch ( next_token ( tbl, src, t ) -> id )
+                {
+                case eEndOfInput:
+                case eSemiColon:
+                case kw_manager:
+                    break;
+                    return expected ( t, klogWarn, "manager" );
+                }
+            }
+        case kw_manager:
+            return kqsh_help_show_mgr ( tbl, src, t );
+
+        case kw_schema:
+            return kqsh_help_show_schema ( tbl, src, t );
+
+        default:
+            return expected ( t, klogWarn, "object or ;" );
+        }
+    }
+
+    printf ( "display an object\n"
+             "\n"
+             "usage:\n"
+             "  'show manager ...'\n"
+             "  'show schema ...'\n"
+             "\n"
+             "  type 'help show manager;' for more information about those commands,\n"
+             "  type 'help show <object>;' for more information about remaining command.\n"
+        );
+
+    return 0;
+}
+
+/* write
+ */
+static
+rc_t kqsh_help_write ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "write or append row data to column or node\n"
+             "%s%s%s%s%s",
+             "\n"
+             "usage:\n"
+             "  'write <cursor>.<column> ROW'\n"
+             "  'write <cursor>.IDX ROW'\n"
+             "\n",
+             "ROW:\n"
+             "  STRING              - character data\n"
+             "  <bin-elem>          - non-character datum\n"
+             "  '[' <bin-elems> ']' - a vector of non-character data\n"
+             "\n",
+             "bin-elem:\n"
+             "  BOOLEAN             - the constants 'true' or 'false'\n"
+             "  INTEGER             - signed or unsigned integer value\n"
+             "  FLOAT               - floating point value\n"
+             "\n",
+             "bin-elems:\n"
+             "  <bin-elem> [ ',' <bin-elems> ]\n"
+             "\n",
+             "  specify an open cursor and column by name or ordinal index.\n"
+             "  the row data given will be appended to that column.\n"
+        );
+
+    return 0;
+}
+
+
+/* use
+ */
+static
+rc_t kqsh_help_use ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "make object the implicit target of 'using' clause\n"
+             "  THIS FEATURE IS NOT YET IMPLEMENTED.\n"
+        );
+
+    return 0;
+}
+
+
+/* macro for generating switch statements */
+#define KQSH_HELP_KEYWORD( topic ) \
+    case kw_ ## topic: return kqsh_help_ ## topic ( tbl, src, t )
+
+/* commands
+ */
+static
+rc_t kqsh_help_commands ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        KQSH_HELP_KEYWORD ( alias );
+        KQSH_HELP_KEYWORD ( alter );
+        KQSH_HELP_KEYWORD ( close );
+        KQSH_HELP_KEYWORD ( create );
+        KQSH_HELP_KEYWORD ( delete );
+        KQSH_HELP_KEYWORD ( drop );
+        KQSH_HELP_KEYWORD ( execute );
+        KQSH_HELP_KEYWORD ( exit );
+        KQSH_HELP_KEYWORD ( help );
+        KQSH_HELP_KEYWORD ( open );
+        KQSH_HELP_KEYWORD ( quit );
+        KQSH_HELP_KEYWORD ( rename );
+        KQSH_HELP_KEYWORD ( show );
+        KQSH_HELP_KEYWORD ( use );
+        KQSH_HELP_KEYWORD ( write );
+
+        default:
+            return expected ( t, klogWarn, "command topic" );
+        }
+    }
+
+    printf ( "kqsh commands:\n"
+             "%s%s%s",
+             "  alter - alter an open object\n"
+             "  close - close an open object\n"
+             "  create - create a new object\n"
+             "  execute - execute a kqsh script in a new scope\n"
+             "  help - print this list\n"
+             "  open - open an existing object\n"
+             "  quit - exit shell\n"
+             "  show - display object data\n"
+             "  write - write a row of data to a column\n"
+             "\n",
+             "unimplemented commands:\n"
+             "  alias - create a new name to an file system object\n"
+             "  delete - delete rows or nodes\n"
+             "  drop - remove an object from the file system\n"
+             "  rename - rename an object within file system\n"
+             "  use - make object the implicit target of 'using' clause\n"
+             "\n",
+             "  type 'help <command>;' for more information about that command.\n"
+        );
+
+    return 0;
+}
+
+/* kdb
+ */
+static
+rc_t kqsh_help_kdb ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "kdb objects:\n"
+             "  kdb manager - root object of kdb\n"
+             "  kdb database - raw, physical database\n"
+             "  kdb table - raw, physical table\n"
+             "  kdb column - raw, physical column with opaque data\n"
+             "  kdb metadata - associated with manager, database, table and column\n"
+             "\n"
+             "  NB - in some tables with early version columns, metadata may not be present.\n"
+        );
+
+    return 0;
+}
+
+
+/* vdb
+ */
+static
+rc_t kqsh_help_vdb ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "vdb objects:\n"
+             "  vdb manager - root object of vdb\n"
+             "  vdb schema - describes other objects\n"
+             "  vdb database - can contain tables, indices and sub-databases\n"
+             "  vdb table - can contain columns and indices\n"
+             "  vdb cursor - a group of user-selected columns\n"
+             "\n"
+             "  the vdb manager builds upon the kdb manager. it allows use\n"
+             "  and definition of schema objects which describe the shape and\n"
+             "  behavior of other objects that may be created or opened under vdb.\n"
+        );
+
+    return 0;
+}
+
+
+/* sra
+ */
+static
+rc_t kqsh_help_sra ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+        default:
+            return expected ( t, klogWarn, ";" );
+        }
+    }
+
+    printf ( "sra objects:\n"
+             "  sra manager - root object of sra\n"
+             "  sra path manager - installation specific path translator\n"
+             "  sra table - can contain columns and indices\n"
+             "\n"
+             "  the sra manager builds upon the vdb manager. it has a pre-defined\n"
+             "  schema within the sra domain and the objects provide some interface\n"
+             "  refinements of their vdb counterparts.\n"
+             "\n"
+             "  not all installations will have an sra path manager for translating\n"
+             "  paths given to the open command. when not available or used, open paths\n"
+             "  will be used as given.\n"
+        );
+
+    return 0;
+}
+
+
+/* objects
+ */
+static
+rc_t kqsh_help_objects ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        KQSH_HELP_KEYWORD ( kdb );
+        KQSH_HELP_KEYWORD ( vdb );
+        KQSH_HELP_KEYWORD ( sra );
+
+#if 0
+        KQSH_HELP_KEYWORD ( column );
+        KQSH_HELP_KEYWORD ( database );
+        KQSH_HELP_KEYWORD ( metadata );
+        KQSH_HELP_KEYWORD ( schema );
+        KQSH_HELP_KEYWORD ( table );
+#endif
+
+        default:
+            return expected ( t, klogWarn, "object class" );
+        }
+    }
+
+    printf ( "kqsh objects:\n"
+             "  kdb ...\n"
+             "  vdb ...\n"
+             "  sra ...\n"
+             "  column\n"
+             "  cursor\n"
+             "  database\n"
+             "  metadata\n"
+             "  schema\n"
+             "  table\n"
+             "\n"
+             "  type 'help <object>;' for more information about that object.\n"
+        );
+
+    return 0;
+}
+
+/* kqsh
+ */
+rc_t kqsh_help ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    /* this is one command where we don't insist on a trailing ';'
+       because the user might just be getting it figured out */
+    if ( ! interactive || KTokenSourceAvail ( src ) > 1 )
+    {
+        /* this command could still block */
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eEndOfInput:
+        case eSemiColon:
+            break;
+
+        KQSH_HELP_KEYWORD ( commands );
+        KQSH_HELP_KEYWORD ( objects );
+
+        KQSH_HELP_KEYWORD ( alias );
+        KQSH_HELP_KEYWORD ( alter );
+        KQSH_HELP_KEYWORD ( close );
+        KQSH_HELP_KEYWORD ( create );
+        KQSH_HELP_KEYWORD ( delete );
+        KQSH_HELP_KEYWORD ( drop );
+        KQSH_HELP_KEYWORD ( execute );
+        KQSH_HELP_KEYWORD ( help );
+        KQSH_HELP_KEYWORD ( open );
+        KQSH_HELP_KEYWORD ( quit );
+        KQSH_HELP_KEYWORD ( rename );
+        KQSH_HELP_KEYWORD ( show );
+        KQSH_HELP_KEYWORD ( use );
+        KQSH_HELP_KEYWORD ( write );
+
+        KQSH_HELP_KEYWORD ( kdb );
+        KQSH_HELP_KEYWORD ( vdb );
+        KQSH_HELP_KEYWORD ( sra );
+
+#if 0
+        KQSH_HELP_KEYWORD ( column );
+        KQSH_HELP_KEYWORD ( database );
+        KQSH_HELP_KEYWORD ( metadata );
+        KQSH_HELP_KEYWORD ( schema );
+        KQSH_HELP_KEYWORD ( table );
+#endif
+
+        default:
+            return expected ( t, klogWarn, "help topic" );
+        }
+    }
+
+    /* general help */
+    printf ( "kqsh help:\n"
+             "\n"
+             "  topics:\n"
+             "    commands -- list shell commands\n"
+             "    objects -- list objects and their usage\n"
+             "\n"
+             "  the command processor expects a semi-colon ( ';' ) to process each command.\n"
+             "  this is not intended to be irritating, but the shell itself is NOT line oriented\n"
+             "  which requires a statement terminator. the 'help' and 'quit' commands are the only\n"
+             "  exceptions to this rule.\n"
+             "\n"
+             "  type 'help <topic>;' for more information about that topic.\n"
+        );
+
+    return 0;
+}
diff --git a/tools/kqsh/kqsh-load.c b/tools/kqsh/kqsh-load.c
new file mode 100644
index 0000000..88c32c5
--- /dev/null
+++ b/tools/kqsh/kqsh-load.c
@@ -0,0 +1,410 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+#include "kqsh-sra.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <kdb/manager.h>
+#include <vdb/manager.h>
+
+#include <kfs/directory.h>
+#include <kfs/dyload.h>
+#include <klib/log.h>
+#include <klib/vector.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* library names on disk */
+#define LIBSTR2( str ) # str
+#define LIBSTR( str ) LIBSTR2 ( str )
+
+#if defined LIBKDB
+
+#define LIBKDBSTR LIBSTR ( LIBKDB )
+#define LIBWKDBSTR LIBSTR ( LIBWKDB )
+#define LIBVDBSTR LIBSTR ( LIBVDB )
+#define LIBWVDBSTR LIBSTR ( LIBWVDB )
+#define LIBSRADBSTR LIBSTR ( LIBSRADB )
+#define LIBWSRADBSTR LIBSTR ( LIBWSRADB )
+
+#elif defined LIBNCBI_VDB
+
+#define LIBKDBSTR LIBSTR ( LIBNCBI_VDB )
+#define LIBWKDBSTR LIBSTR ( LIBNCBI_WVDB )
+#define LIBVDBSTR LIBSTR ( LIBNCBI_VDB )
+#define LIBWVDBSTR LIBSTR ( LIBNCBI_WVDB )
+#define LIBSRADBSTR LIBSTR ( LIBNCBI_VDB )
+#define LIBWSRADBSTR LIBSTR ( LIBNCBI_WVDB )
+
+#else
+#error need a library name
+#endif
+
+/* dynamic loader */
+static KDyld *dl;
+
+
+/* init_libpath
+ *  initialize the library path
+ */
+rc_t kqsh_init_libpath ( void )
+{
+    return KDyldMake ( & dl );
+}
+
+
+/* whack_libpath
+ */
+void kqsh_whack_libpath ( void )
+{
+    KDyldRelease ( dl );
+    dl = NULL;
+}
+
+/* update_libpath
+ */
+rc_t kqsh_update_libpath ( const char *path )
+{
+    const char *end;
+    for ( end = strchr ( path, ':' ); end != NULL; end = strchr ( path = end + 1, ':' ) )
+    {
+        if ( path < end )
+            KDyldAddSearchPath ( dl, "%.*s", ( int ) ( end - path ), path );
+    }
+
+    if ( path [ 0 ] != 0 )
+        KDyldAddSearchPath ( dl, path );
+
+    return 0;
+}
+
+
+/* system_libpath
+ */
+rc_t kqsh_system_libpath ( void )
+{
+    const char *LD_LIBRARY_PATH = getenv ( "LD_LIBRARY_PATH" );
+
+    if ( LD_LIBRARY_PATH == NULL )
+        return 0;
+
+    return kqsh_update_libpath ( LD_LIBRARY_PATH );
+}
+
+/* load_lib
+ *  loads the library
+ *  fetches function to make manager
+ */
+static
+rc_t kqsh_load_lib ( KDylib **lib, const char *libname, char *path, size_t path_size )
+{
+    rc_t rc = KDyldLoadLib ( dl, lib, libname );
+    if ( rc == 0 )
+    {
+        /* return path to caller */
+        rc = KDylibFullPath ( * lib, path, path_size );
+        if ( rc != 0 )
+            path [ 0 ] = 0;
+
+        return 0;
+    }
+
+    return rc;
+}
+
+static
+rc_t kqsh_import_sym ( const KDylib *lib, fptr_t *addr, const char *name )
+{
+    KSymAddr *sym;
+    rc_t rc = KDylibSymbol ( lib, & sym, name );
+    if ( rc == 0 )
+    {
+        KSymAddrAsFunc ( sym, addr );
+        KSymAddrRelease ( sym );
+    }
+    return rc;
+}
+
+#if 0
+static
+void kqsh_set_lib_log_handler ( const KDylib *lib )
+{
+    const KWrtHandler *handler = KLogHandlerGet ();
+    rc_t ( CC * klogLibHandlerSet ) ( KWrtWriter writer, void *data );
+    rc_t rc = kqsh_import_sym ( lib, ( fptr_t* ) & klogLibHandlerSet, "KLogLibHandlerSet" );
+    if ( rc == 0 )
+    {
+        rc_t ( CC * klogLibFmtHandlerSetDefault ) ( void );
+        rc = kqsh_import_sym ( lib, ( fptr_t* ) & klogLibFmtHandlerSetDefault, "KLogLibFmtHandlerSetDefault" );
+        if ( rc == 0 )
+        {
+            ( * klogLibHandlerSet ) ( handler -> writer, handler -> data );
+            ( * klogLibFmtHandlerSetDefault ) ();
+        }
+    }
+}
+#endif
+
+static
+rc_t kqsh_import_lib ( kqsh_libdata *libdata, const char *libname )
+{
+    /* load the library */
+    char path [ 4096 ];
+    rc_t rc = kqsh_load_lib ( & libdata -> lib, libname, path, sizeof path );
+    if ( rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to load library '$(lib)'", "lib=%s", libname ));
+    else
+    {
+        int i;
+        bool done_update = read_only;
+        fptr_t *vt = libdata -> cvt;
+        const char *msg, **msgv = & libdata -> msg [ 1 ];
+#if 0
+        /* tell library to log to stderr */
+        kqsh_set_lib_log_handler ( libdata -> lib );
+#endif
+        /* import first symbol according to operating mode */
+        msg = msgv [ read_only ? -1 : 0 ];
+        rc = kqsh_import_sym ( libdata -> lib, & vt [ 0 ], msg );
+
+        /* import remaining symbols */
+        for ( i = 1; rc == 0; ++ i )
+        {
+            /* detect end of list */
+            msg = msgv [ i ];
+            if ( msgv [ i ] == NULL )
+            {
+                /* exit if both const and update sides done */
+                if ( done_update )
+                {
+                    if ( interactive )
+                        kqsh_printf ( "loaded library '%s'\n", path );
+                    return 0;
+                }
+
+                /* switch to update side */
+                vt = libdata -> wvt;
+                msgv = libdata -> wmsg;
+                done_update = true;
+                i = -1;
+                continue;
+            }
+
+            /* import symbol */
+            rc = kqsh_import_sym ( libdata -> lib, & vt [ i ], msg );
+        }
+
+        /* failed to find symbol */
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to resolve symbol $(msg) in library '$(path)'"
+                             , "msg=%s,path=%s", msg, path ));
+    }
+
+    return rc;
+}
+
+/* load
+ *  expects "t" to describe a library class, i.e.
+ *    'open <lib> mgr...'
+ *            ^
+ */
+rc_t kqsh_load ( struct KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    rc_t rc = 0;
+    void *mgr;
+    String name;
+    uint32_t type;
+    const char *libtype;
+    KSymbol *existing;
+
+    /* for loading library */
+    struct { kqsh_libdata *data; const char *ro, *rw; } libs [ 3 ] =
+    {
+        { & kdb_data, LIBKDBSTR, LIBWKDBSTR },
+        { & vdb_data, LIBVDBSTR, LIBWVDBSTR },
+        { & sra_data, LIBSRADBSTR, LIBWSRADBSTR }
+    };
+
+    uint32_t lib_idx;
+
+    /* select which library */
+    switch ( t -> id )
+    {
+    case kw_kdb:
+        CONST_STRING ( & name, "kmgr" );
+        libtype = "kdb";
+        lib_idx = 0;
+        type = obj_KDBManager;
+        break;
+    case kw_vdb:
+        CONST_STRING ( & name, "vmgr" );
+        libtype = "vdb";
+        lib_idx = 1;
+        type = obj_VDBManager;
+        break;
+    case kw_sra:
+        CONST_STRING ( & name, "sramgr" );
+        libtype = "sra";
+        lib_idx = 2;
+        type = obj_SRAManager;
+        break;
+    default:
+        return expected ( t, klogErr, "kdb, vdb or sra" );
+    }
+
+    /* treat 'manager' as optional - it's understood */
+    if ( next_token ( tbl, src, t ) -> id == kw_manager )
+        next_token ( tbl, src, t );
+
+    /* capture optional manager name */
+    switch ( t -> id )
+    {
+    case kw_as:
+        switch ( next_token ( tbl, src, t ) -> id )
+        {
+        case eIdent:
+            break;
+
+        case rsrv_kmgr:
+        case obj_KDBManager:
+            if ( type == obj_KDBManager )
+                break;
+            return expected ( t, klogErr, "identifier" );
+
+        case rsrv_vmgr:
+        case obj_VDBManager:
+            if ( type == obj_VDBManager )
+                break;
+
+        case rsrv_sramgr:
+        case obj_SRAManager:
+            if ( type == obj_SRAManager )
+                break;
+
+        default:
+            return expected ( t, klogErr, "identifier" );
+        }
+
+        name = t -> str;
+        existing = t -> sym;
+
+        next_token ( tbl, src, t );
+        break;
+
+    default:
+        existing = KSymTableFind ( tbl, & name );
+    }
+
+    /* process existing */
+    if ( existing != NULL && existing -> type >= obj_first )
+    {
+        kqsh_printf ( "%s manager '%N' ( %p ) is already open.\n",
+            libtype, existing, existing -> u . obj );
+        libs [ lib_idx ] . data -> dflt = existing;
+        return 0;
+    }
+
+    /* load library if required */
+    if ( libs [ lib_idx ] . data -> lib == NULL )
+    {
+        uint32_t i;
+        for ( i = 0; i <= lib_idx; ++ i )
+        {
+            rc = kqsh_import_lib ( libs [ i ] . data,
+                read_only ? libs [ i ] .  ro : libs [ i ] . rw );
+            if ( rc != 0 )
+                return rc;
+        }
+    }
+
+    /* create mgr object */
+    switch ( type )
+    {
+    case obj_KDBManager:
+        rc = _KDBManagerMake ( ( struct KDBManager** ) & mgr, NULL );
+        break;
+    case obj_VDBManager:
+        rc = _VDBManagerMake ( ( struct VDBManager** ) & mgr, NULL );
+        break;
+    case obj_SRAManager:
+        rc = _SRAMgrMake ( ( struct SRAMgr** ) & mgr, NULL );
+        break;
+    }
+
+    if ( rc == 0 )
+    {
+        KSymbol *sym;
+
+        /* create symbol */
+        rc = KSymTableCreateSymbol ( tbl, & sym, & name, type, mgr );
+        if ( rc == 0 )
+        {
+            libs [ lib_idx ] . data -> dflt = sym;
+            if ( interactive )
+            {
+                kqsh_printf ( "opened %s manager '%N' ( %p ) for %s\n"
+                              , libtype
+                              , sym, sym -> u . obj
+                              , read_only ? "read" : "update" );
+            }
+            return 0;
+        }
+
+        /* whack instance */
+        switch ( type )
+        {
+        case obj_KDBManager:
+            _KDBManagerRelease ( ( const void* ) mgr );
+            break;
+        case obj_VDBManager:
+            _VDBManagerRelease ( ( const void* ) mgr );
+            break;
+        case obj_SRAManager:
+            _SRAMgrRelease ( ( const void* ) mgr );
+            break;
+        }
+    }
+
+    PLOGERR ( klogInt,  (klogInt, rc,
+              "failed to open $(type) manager '$(name)' for $(mode)"
+              , "type=%s,name=%.*s,mode=%s"
+              , libtype
+              , ( int ) name . size, name . addr
+                         , read_only ? "read" : "update" ));
+
+    return rc;
+}
diff --git a/tools/kqsh/kqsh-open.c b/tools/kqsh/kqsh-open.c
new file mode 100644
index 0000000..2ea2687
--- /dev/null
+++ b/tools/kqsh/kqsh-open.c
@@ -0,0 +1,199 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* open cursor
+ *  open ID;
+ */
+static
+rc_t kqsh_open_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    rc_t rc;
+    KSymbol *sym = t -> sym;
+
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    rc = _VCursorOpen ( sym -> u . obj );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to open cursor '$(name)' ( $(addr) )"
+                  , "name=%.*s,addr=0x%zX"
+                  , ( int ) sym -> name . size, sym -> name . addr
+                             , ( size_t ) sym -> u . obj ));
+    }
+    else if ( interactive )
+    {
+        kqsh_printf ( "opened cursor '%N' ( %p )\n"
+                      , sym, sym -> u . obj );
+    }
+
+    return rc;
+}
+
+static
+rc_t kqsh_open_row ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    rc_t rc = 0;
+    KSymbol *curs;
+    int64_t row_id;
+    bool has_row_id = false;
+    bool negate = false;
+
+    switch ( next_token ( tbl, src, t ) -> id )
+    {
+    case eMinus:
+        negate = true;
+    case ePlus:
+        next_token ( tbl, src, t );
+        break;
+    }
+
+    switch ( t -> id )
+    {
+    case eHex:
+        if ( negate )
+            LOGMSG ( klogWarn, "negative hex integer" );
+    case eDecimal:
+    case eOctal:
+        rc = KTokenToI64 ( t, & row_id );
+        if ( rc != 0 )
+            return expected ( t, klogErr, "integer row id" );
+        if ( negate )
+            row_id = - row_id;
+        has_row_id = true;
+        next_token ( tbl, src, t );
+        break;
+    default:
+        if ( negate )
+            return expected ( t, klogErr, "integer row id" );
+    }
+
+    if ( t -> id == kw_on )
+        next_token ( tbl, src, t );
+
+    switch ( t -> id )
+    {
+    case obj_VCursor:
+        curs = t -> sym;
+        break;
+    default:
+        return expected ( t, klogErr, "cursor" );
+    }
+
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    if ( has_row_id )
+    {
+        switch ( curs -> type )
+        {
+        case obj_VCursor:
+            rc = _VCursorSetRowId ( curs -> u . obj, row_id );
+            break;
+        }
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt,  (klogInt, rc,
+                      "failed to open row $(id) on cursor '$(name)' ( $(addr) )"
+                      , "id=%ld,name=%.*s,addr=0x%zX"
+                      , row_id
+                      , ( int ) curs -> name . size, curs -> name . addr
+                      , ( size_t ) curs -> u . obj ));
+            return rc;
+        }
+    }
+
+    switch ( curs -> type )
+    {
+    case obj_VCursor:
+        rc = _VCursorOpenRow ( curs -> u . obj );
+        break;
+    }
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to open row on cursor '$(name)' ( $(addr) )"
+                  , "name=%.*s,addr=0x%zX"
+                  , ( int ) curs -> name . size, curs -> name . addr
+                  , ( size_t ) curs -> u . obj ));
+    }
+    else if ( interactive )
+    {
+        if ( has_row_id )
+        {
+            kqsh_printf ( "opened row %ld on cursor '%N' ( %p )\n"
+                          , row_id, curs, curs -> u . obj );
+        }
+        else
+        {
+            kqsh_printf ( "opened row on cursor '%N' ( %p )\n"
+                          , curs, curs -> u . obj );
+        }
+    }
+
+    return rc;
+}
+
+/* open
+ */
+rc_t kqsh_open ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    switch ( t -> id )
+    {
+    case kw_kdb:
+    case kw_vdb:
+    case kw_sra:
+        /* handle open manager as a load library */
+        return kqsh_load ( tbl, src, t );
+
+    case kw_row:
+        return kqsh_open_row ( tbl, src, t );
+
+    case obj_VCursor:
+        return kqsh_open_cursor ( tbl, src, t );
+    }
+
+    return expected ( t, klogErr, "manager or cursor or row" );
+}
diff --git a/tools/kqsh/kqsh-parse.c b/tools/kqsh/kqsh-parse.c
new file mode 100644
index 0000000..8c0fbec
--- /dev/null
+++ b/tools/kqsh/kqsh-parse.c
@@ -0,0 +1,198 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kapp/main.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* kqsh_execute
+ *
+ *  'execute' PATH ';'
+ */
+static
+rc_t kqsh_execute ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    String path;
+
+    if ( t -> id != eString )
+        return expected ( t, klogErr, "file path" );
+
+    path = t -> str;
+    path . addr += 1;
+    path . size -= 2;
+    path . len -= 2;
+
+    if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    return kqsh_exec_file ( tbl, & path );
+}
+
+
+/* macro for generating switch statements */
+#define KQSH_CMD_KEYWORD( cmd ) \
+    case kw_ ## cmd: \
+        rc = kqsh_ ## cmd ( tbl, src, next_token ( tbl, src, & t ) ); \
+        break
+
+/* case for unimplemented commands */
+#define UNIMPL_CMD_KEYWORD( cmd ) \
+    case kw_ ## cmd: ( void ) 0
+
+/* kqsh
+ *  main loop for shell
+ */
+static
+rc_t kqsh_parse ( KSymTable *tbl, KTokenSource *src, kqsh_stack *frame )
+{
+    rc_t rc;
+    KToken t;
+
+    for ( rc = 0, frame -> cmd_num = 1; rc == 0; ++ frame -> cmd_num )
+    {
+        /* check for signals */
+        rc = Quitting ();
+        if ( rc != 0 )
+            break;
+
+        /* issue prompt */
+        /* the prompt should allow db.db.tbl.obj stack or 'kqsh' when empty */
+        if ( interactive )
+            kqsh_printf ( "\nkqsh|%F> ", frame );
+
+        /* process input */
+        next_token ( tbl, src, & t );
+        if ( interactive )
+            kqsh_printf ( "\n" );
+
+        switch ( t . id )
+        {
+        case eEndOfInput:
+            return 0;
+        case eSemiColon:
+            break;
+
+        case eHash:
+            while ( 1 )
+            {
+                KTokenizerNext ( kLineTokenizer, src, & t );
+                if ( t . id == eEndOfLine || t . id == eEndOfInput )
+                    break;
+            }
+            break;
+
+        /* implemented commands */
+        KQSH_CMD_KEYWORD ( alter );
+        KQSH_CMD_KEYWORD ( close );
+        KQSH_CMD_KEYWORD ( create );
+        KQSH_CMD_KEYWORD ( execute );
+        KQSH_CMD_KEYWORD ( open );
+        KQSH_CMD_KEYWORD ( show );
+        KQSH_CMD_KEYWORD ( write );
+
+        /* unimplemented commands */
+        UNIMPL_CMD_KEYWORD ( alias );
+        UNIMPL_CMD_KEYWORD ( delete );
+        UNIMPL_CMD_KEYWORD ( drop );
+        UNIMPL_CMD_KEYWORD ( insert );
+        UNIMPL_CMD_KEYWORD ( rename );
+        UNIMPL_CMD_KEYWORD ( update );
+        UNIMPL_CMD_KEYWORD ( use );
+            if ( interactive )
+                kqsh_printf ( "the %S command is not yet implemented.\n", & t . str );
+            rc = RC ( rcExe, rcNoTarg, rcExecuting, rcFunction, rcIncomplete );
+            break;
+
+        /* help and quit are special
+           in that they don't require a semi-colon
+           and thus can't use look-ahead which might block */
+        case kw_help:
+            rc = kqsh_help ( tbl, src, & t );
+            break;
+        case kw_exit:
+        case kw_quit:
+            return 0;
+
+        default:
+            rc = expected ( & t, klogErr, "command" );
+        }
+
+        /* tolerate errors in interactive mode */
+        if ( rc != 0 && interactive )
+        {
+            KTokenSourceConsume ( src );
+            rc = 0;
+        }
+    }
+    
+    return rc;
+}
+
+
+rc_t kqsh ( KSymTable *tbl, KTokenSource *src )
+{
+    rc_t rc;
+    BSTree scope;
+
+    kqsh_stack frame;
+    static kqsh_stack const *stk = NULL;
+
+    frame . prev = stk;
+    stk = & frame;
+
+    BSTreeInit ( & scope );
+
+    rc = KSymTablePushScope ( tbl, & scope );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to initialize symbol table" );
+    else
+    {
+        rc = kqsh_parse ( tbl, src, & frame );
+
+        KSymTablePopScope ( tbl );
+        BSTreeWhack ( & scope, kqsh_whackobj, NULL );
+    }
+
+    stk = frame . prev;
+
+    return rc;
+}
diff --git a/tools/kqsh/kqsh-print.c b/tools/kqsh/kqsh-print.c
new file mode 100644
index 0000000..696bcbc
--- /dev/null
+++ b/tools/kqsh/kqsh-print.c
@@ -0,0 +1,170 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+
+#include <klib/symbol.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+
+/* printf
+ *  understands printing KSymbol
+ */
+static
+int kqsh_print_frame ( const kqsh_stack *frame )
+{
+    assert ( frame != NULL );
+
+    if ( frame -> prev != NULL )
+    {
+        int status = kqsh_print_frame ( frame -> prev );
+        if ( status != 0 )
+            return status;
+        return KOutMsg ( ".%u", frame -> cmd_num );
+    }
+
+    return KOutMsg ( "%u", frame -> cmd_num );
+}
+
+static
+int kqsh_vprintf ( const char *format, va_list args )
+{
+    int status;
+    const char *start, *end;
+
+    for ( status = 0, start = end = format; * end != 0; ++ end )
+    {
+        /* const String *s; */
+
+        switch ( * end )
+        {
+        case '%':
+            if ( end > start )
+            {
+                status = KOutMsg ( "%.*s", ( uint32_t ) ( end - start ), start );
+                if ( status != 0 )
+                    break;
+            }
+            switch ( * ( ++ end ) )
+            {
+            case 'd':
+                status = KOutMsg ( "%d", va_arg ( args, int ) );
+                break;
+            case 'u':
+                status = KOutMsg ( "%u", va_arg ( args, unsigned int ) );
+                break;
+            case 'x':
+                status = KOutMsg ( "%x", va_arg ( args, unsigned int ) );
+                break;
+            case 'X':
+                status = KOutMsg ( "%X", va_arg ( args, unsigned int ) );
+                break;
+            case 'f':
+                status = KOutMsg ( "%f", va_arg ( args, double ) );
+                break;
+            case 'l':
+                switch ( * ( ++ end ) )
+                {
+                case 'd':
+                    status = KOutMsg ( "%ld", va_arg ( args, int64_t ) );
+                    break;
+                case 'u':
+                    status = KOutMsg ( "%lu", va_arg ( args, uint64_t ) );
+                    break;
+                case 'x':
+                    status = KOutMsg ( "%lx", va_arg ( args, uint64_t ) );
+                    break;
+                case 'X':
+                    status = KOutMsg ( "%lX", va_arg ( args, uint64_t ) );
+                    break;
+                }
+                break;
+            case 'p':
+                status = KOutMsg ( "0x%lX", va_arg ( args, size_t ) );
+                break;
+            case 's':
+                status = KOutMsg ( "%s", va_arg ( args, const char* ) );
+                break;
+            case '.':
+                if ( end [ 1 ] == '*' && end [ 2 ] == 's' )
+                {
+                    end += 2;
+                    status = va_arg ( args, int );
+                    status = KOutMsg ( "%.*s", status, va_arg ( args, const char* ) );
+                    break;
+                }
+                /* not handling anything else */
+                status = KOutMsg ( "%%." );
+                break;
+            case 'S':
+                status = KOutMsg ( "%S", va_arg ( args, const String* ) );
+                break;
+            case 'N':
+                status = KOutMsg ( "%N", va_arg ( args, const KSymbol* ) );
+                break;
+            case 'F':
+                status = kqsh_print_frame ( va_arg ( args, const kqsh_stack* ) );
+                break;
+            case '%':
+                status = KOutMsg ( "%%" );
+                break;
+            }
+
+            start = end + 1;
+            break;
+        }
+
+        if ( status < 0 )
+            break;
+    }
+
+    if ( status >= 0 && end > start )
+        status = KOutMsg ( "%.*s", ( uint32_t ) ( end - start ), start );
+
+    fflush ( stdout );
+
+    return status;
+}
+
+int kqsh_printf ( const char *format, ... )
+{
+    int status;
+    va_list args;
+
+    va_start ( args, format );
+    status = kqsh_vprintf ( format, args );
+    va_end ( args );
+
+    return status;
+}
diff --git a/tools/kqsh/kqsh-priv.h b/tools/kqsh/kqsh-priv.h
new file mode 100644
index 0000000..eb40a01
--- /dev/null
+++ b/tools/kqsh/kqsh-priv.h
@@ -0,0 +1,151 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kqsh_priv_
+#define _h_kqsh_priv_
+
+#ifndef _h_klib_token_
+#include <klib/token.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct Vector;
+struct BSTNode;
+struct KDylib;
+struct KSymTable;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * library data
+ */
+typedef struct kqsh_libdata kqsh_libdata;
+struct kqsh_libdata
+{
+    /* library */
+    struct KDylib *lib;
+
+    /* default manager */
+    struct KSymbol *dflt;
+
+    /* const messages */
+    const char **msg;
+    fptr_t *cvt;
+
+    /* update messages */
+    const char **wmsg;
+    fptr_t *wvt;
+};
+
+/*--------------------------------------------------------------------------
+ * kqsh
+ */
+
+/* globals
+ *  "read_only" - true if update operations are not available
+ *
+ *  "interactive" - true if (apparently) using console interface
+ *
+ *  "*_data" - data for the individual libraries
+ */
+extern bool read_only;
+extern bool interactive;
+extern kqsh_libdata kdb_data;
+extern kqsh_libdata vdb_data;
+extern kqsh_libdata sra_data;
+
+/* stack frame
+ *  for recursive kqsh'ing
+ */
+typedef struct kqsh_stack kqsh_stack;
+struct kqsh_stack
+{
+    const kqsh_stack *prev;
+    uint32_t cmd_num;
+};
+
+/* kqsh
+ *  main shell
+ */
+rc_t kqsh ( struct KSymTable *tbl, KTokenSource *src );
+rc_t kqsh_exec_file ( struct KSymTable *tbl, const String *path );
+
+/* kqsh-print
+ *  understands printing KSymbol
+ */
+int kqsh_printf ( const char *format, ... );
+
+/* kqsh-alter
+ */
+rc_t kqsh_alter ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-close
+ */
+void CC kqsh_whackobj ( struct BSTNode *n, void *ignore );
+rc_t kqsh_close ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-help
+ *  help for commands and objects
+ */
+rc_t kqsh_help ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-load
+ *  dylib loading and manager open
+ */
+rc_t kqsh_init_libpath ( void );
+void kqsh_whack_libpath ( void );
+rc_t kqsh_update_libpath ( const char *path );
+rc_t kqsh_system_libpath ( void );
+rc_t kqsh_load ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-open
+ *  create and open described objects
+ */
+rc_t kqsh_create ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+rc_t kqsh_open ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-show
+ */
+rc_t kqsh_show ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+/* kqsh-write
+ */
+rc_t kqsh_write ( struct KSymTable *tbl, KTokenSource *src, KToken *t );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kqsh_priv_ */
diff --git a/tools/kqsh/kqsh-show.c b/tools/kqsh/kqsh-show.c
new file mode 100644
index 0000000..141493e
--- /dev/null
+++ b/tools/kqsh/kqsh-show.c
@@ -0,0 +1,290 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+
+#include <vdb/schema.h>
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * KDBManager
+ */
+
+static
+rc_t kqsh_show_kmgr_version ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    rc_t rc;
+    uint32_t vers;
+
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    rc = _KDBManagerVersion ( sym -> u . obj, & vers );
+    if ( rc == 0 )
+    {
+        if ( ( vers & 0xFFFF ) != 0 )
+            kqsh_printf ( "kdb manager '%N' v%u.%u.%u\n", sym, vers >> 24, ( vers >> 16 ) & 0xFF, vers & 0xFFFF );
+        else
+            kqsh_printf ( "kdb manager '%N' v%u.%u\n", sym, vers >> 24, ( vers >> 16 ) & 0xFF );
+    }
+    else
+    {
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to obtain version of kdb manager '$(name)'",
+                             "name=%.*s", ( int ) sym -> name . size, sym -> name . addr ));
+    }
+
+    return rc;
+}
+
+static
+rc_t kqsh_show_kmgr ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    switch ( t -> id )
+    {
+    case kw_version:
+        return kqsh_show_kmgr_version ( tbl, src, next_token ( tbl, src, t ), sym );
+    }
+
+    return expected ( t, klogErr, "version" );
+}
+
+/*--------------------------------------------------------------------------
+ * VDBManager
+ */
+
+static
+rc_t kqsh_show_vmgr_version ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    rc_t rc;
+    uint32_t vers;
+
+    if ( t -> id != eSemiColon )
+        return expected ( t, klogErr, ";" );
+
+    rc = _VDBManagerVersion ( sym -> u . obj, & vers );
+    if ( rc == 0 )
+    {
+        if ( ( vers & 0xFFFF ) != 0 )
+            kqsh_printf ( "vdb manager '%N' v%u.%u.%u\n", sym, vers >> 24, ( vers >> 16 ) & 0xFF, vers & 0xFFFF );
+        else
+            kqsh_printf ( "vdb manager '%N' v%u.%u\n", sym, vers >> 24, ( vers >> 16 ) & 0xFF );
+    }
+    else
+    {
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to obtain version of vdb manager '$(name)'",
+                             "name=%.*s", ( int ) sym -> name . size, sym -> name . addr ));
+    }
+
+    return rc;
+}
+
+static
+rc_t kqsh_show_vmgr ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym )
+{
+    switch ( t -> id )
+    {
+    case kw_version:
+        return kqsh_show_vmgr_version ( tbl, src, next_token ( tbl, src, t ), sym );
+    }
+
+    return expected ( t, klogErr, "version" );
+}
+
+/*--------------------------------------------------------------------------
+ * VSchema
+ */
+
+static
+rc_t CC kqsh_flush_schema ( void *f, const void *buffer, size_t bsize )
+{
+    size_t num_writ, total;
+
+    for ( total = 0; total < bsize; total += num_writ )
+    {
+        num_writ = fwrite ( buffer, 1, bsize, f );
+        if ( num_writ == 0 )
+            return RC ( rcExe, rcFile, rcWriting, rcNoObj, rcUnknown );
+    }
+
+    return 0;
+}
+
+static
+rc_t kqsh_dump_schema ( KSymbol *sym, uint32_t mode, const String *decl )
+{
+    rc_t rc;
+    char buffer [ 256 ];
+
+    if ( decl -> size != 0 )
+    {
+        string_copy ( buffer, sizeof buffer, decl -> addr, decl -> size );
+        buffer [ sizeof buffer - 1 ] = 0;
+    }
+
+    if ( interactive )
+        putchar ( '\n' );
+
+    rc = _VSchemaDump ( sym -> u . obj, mode,
+        decl -> size ? buffer : NULL, kqsh_flush_schema, stdout );
+
+    if ( rc != 0 )
+    {
+        printf ( "\n\n\n***** ABORTED *****\n\n" );
+        PLOGERR ( klogInt,  (klogInt, rc, "failed to dump schema '$(name)'",
+                             "name=%.*s", ( int ) sym -> name . size, sym -> name . addr ));
+    }
+
+    if ( interactive )
+        putchar ( '\n' );
+
+    return rc;
+}
+
+enum VSchemaDumpClass
+{
+    sdcTypes = 1,
+    sdcTypesets,
+    sdcFormats,
+    sdcConstants,
+    sdcFunctions,
+    sdcColumns,
+    sdcTables,
+    sdcDatabases
+};
+
+static
+rc_t kqsh_show_schema ( KSymTable *tbl, KTokenSource *src, KToken *t, KSymbol *sym, uint32_t mode )
+{
+    String decl;
+    CONST_STRING ( & decl, "" );
+
+    switch ( t -> id )
+    {
+    case eSemiColon:
+        break;
+    case kw_types:
+        mode |= sdcTypes << 8;
+        break;
+    case kw_typesets:
+        mode |= sdcTypesets << 8;
+        break;
+    case kw_formats:
+        mode |= sdcFormats << 8;
+        break;
+    case kw_constants:
+        mode |= sdcConstants << 8;
+        break;
+    case kw_functions:
+        mode |= sdcFunctions << 8;
+        break;
+    case kw_columns:
+        mode |= sdcColumns << 8;
+        break;
+    case kw_tables:
+        mode |= sdcTables << 8;
+        break;
+    case kw_databases:
+        mode |= sdcDatabases << 8;
+        break;
+    case ePeriod:
+        if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+        {
+            decl = t -> str;
+            while ( next_token ( tbl, src, t ) -> id != eSemiColon )
+                decl . size = t -> str . addr + t -> str . size - decl . addr;
+            decl . len = string_len ( decl . addr, decl . size );
+            break;
+        }
+    default:
+        return expected ( t, klogErr, "formats or types or typesets or constants or functions or columns or tables or databases" );
+    }
+
+    return kqsh_dump_schema ( sym, mode, & decl );
+}
+
+/*--------------------------------------------------------------------------
+ * kqsh
+ */
+
+/* show
+ */
+rc_t kqsh_show ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    uint32_t mode = sdmPrint;
+    KSymbol *sym = t -> sym;
+
+    switch ( t -> id )
+    {
+    case kw_manager:
+        sym = next_token ( tbl, src, t ) -> sym;
+        switch ( t -> id )
+        {
+        case obj_KDBManager:
+            return kqsh_show_kmgr ( tbl, src, next_token ( tbl, src, t ), sym );
+        case obj_VDBManager:
+            return kqsh_show_vmgr ( tbl, src, next_token ( tbl, src, t ), sym );
+        }
+        break;
+    case obj_KDBManager:
+        return kqsh_show_kmgr ( tbl, src, next_token ( tbl, src, t ), sym );
+    case obj_VDBManager:
+        return kqsh_show_vmgr ( tbl, src, next_token ( tbl, src, t ), sym );
+
+    case kw_compact:
+        mode = sdmCompact;
+        if ( next_token ( tbl, src, t ) -> id != kw_schema )
+        {
+            if ( t -> id != obj_VSchema )
+                break;
+            sym = t -> sym;
+            return kqsh_show_schema ( tbl, src, next_token ( tbl, src, t ), sym, mode );
+        }
+        /* no break */
+    case kw_schema:
+        if ( next_token ( tbl, src, t ) -> id != obj_VSchema )
+            break;
+        sym = t -> sym;
+    case obj_VSchema:
+        return kqsh_show_schema ( tbl, src, next_token ( tbl, src, t ), sym, mode );
+    }
+
+    return expected ( t, klogErr, "object" );
+}
+
diff --git a/tools/kqsh/kqsh-thunk.pl b/tools/kqsh/kqsh-thunk.pl
new file mode 100755
index 0000000..429ab55
--- /dev/null
+++ b/tools/kqsh/kqsh-thunk.pl
@@ -0,0 +1,662 @@
+#!/usr/bin/perl
+#============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+#
+#
+
+sub lower_case_sym
+{
+    my $sym;
+    my $in = @_ [ 0 ];
+
+    # split at leading lower case
+    if ( $in =~ /^([^A-Z]*)([A-Z].*)/ )
+    {
+        $sym = $1;
+        $in = $2;
+    }
+    else
+    {
+        return $in;
+    }
+
+    while ( $in )
+    {
+        # split off series of leading upper case
+        if ( $in =~ /^([A-Z][A-Z]*)([A-Z][^A-Z].*)/ )
+        {
+            $sym and $sym .= "_";
+            $sym .= lc $1;
+            $in = $2;
+        }
+
+        # lower case next word
+        if ( $in =~ /^([A-Z][^A-Z][^A-Z]*)([A-Z].*)/ )
+        {
+            $sym and $sym .= "_";
+            $sym .= lc $1;
+            $in = $2;
+        }
+        else
+        {
+            $sym and $sym .= "_";
+            $sym .= lc $in;
+            $in = '';
+        }
+    }
+
+    return $sym;
+}
+
+my @classes;
+$num_classes = 0;
+
+my @inc_paths;
+my @src_files;
+
+my $h_out;
+my $c_out;
+my $module;
+
+while ( $arg = shift )
+{
+    if ( $arg =~ /-(..*)/ )
+    {
+        $arg = $1;
+        while ( $arg =~ /(.)(.*)/ )
+        {
+            $sw = $1;
+            $arg = $2;
+
+            if ( $sw eq "I" )
+            {
+                $arg or $arg = shift;
+                $arg or die "expected include path";
+                push @inc_paths, split ( ':', $arg );
+                $arg = '';
+            }
+            elsif ( $sw eq "i" )
+            {
+                $arg or $arg = shift;
+                $arg or die "expected interface file path";
+                push @src_files, split ( ':', $arg );
+                $arg = '';
+            }
+            elsif ( $sw eq "h" )
+            {
+                $arg or $arg = shift;
+                $arg or die "expected h file path";
+                $h_out = $arg;
+                $arg = '';
+            }
+            elsif ( $sw eq "c" )
+            {
+                $arg or $arg = shift;
+                $arg or die "expected c file path";
+                $c_out = $arg;
+                $arg = '';
+            }
+            elsif ( $sw eq "m" )
+            {
+                $arg or $arg = shift;
+                $arg or die "expected module name";
+                $module = $arg;
+                $arg = '';
+            }
+            else
+            {
+                print STDERR "unrecognized switch: '$sw'\n";
+                exit 3;
+            }
+        }
+    }
+    else
+    {
+        if ( $arg =~ /:(..*)/ )
+        {
+            $classes [ $num_classes ] [ 2 ] = 1;
+            $arg = $1;
+        }
+        else
+        {
+            $classes [ $num_classes ] [ 2 ] = 0;
+        }
+
+        if ( $arg =~ /(.[^=]*)=(..*)/ )
+        {
+            $classes [ $num_classes ] [ 0 ] = $1;
+            $classes [ $num_classes ] [ 1 ] = lower_case_sym $2;
+        }
+        else
+        {
+            $classes [ $num_classes ] [ 0 ] = $arg;
+            $classes [ $num_classes ] [ 1 ] = lower_case_sym $arg;
+        }
+
+        ++ $num_classes;
+    }
+}
+
+$num_paths = scalar @inc_paths;
+$num_files = scalar @src_files;
+
+# validate parameters
+$num_classes or die "no object class specified";
+$module or die "no module name specified";
+
+# open output files
+if ( $h_out )
+{
+    open $H, ">$h_out" or die "failed to open file '$h_out' for output";
+}
+if ( $c_out )
+{
+    open $C, ">$c_out" or die "failed to open file '$c_out' for output";
+}
+else
+{
+    $C = STDOUT;
+}
+
+if ( $src_file )
+{
+    open $in, $src_file;
+}
+else
+{
+    $in = STDIN;
+}
+
+# create function accumulator
+my @funcs;
+$num_funcs = 0;
+
+# process files
+for ( $fidx = 0; $fidx == 0 || $fidx < $num_files; ++ $fidx )
+{
+    # open files or stdin
+    if ( $num_files )
+    {
+        # file to open
+        $src_file = $src_files [ $fidx ];
+
+        # locate it first
+        $st = stat $src_file;
+        for ( $i = 0; ! $st && $i < $num_paths; ++ $i )
+        {
+            $inc_path = $inc_paths [ $i ];
+            $st = stat "$inc_path/$src_file";
+            $st and $src_file = "$inc_path/$src_file";
+        }
+
+        # open input file
+        open $IN, $src_file or die "failed to open file '$src_file' for input";
+    }
+    else
+    {
+        $IN = STDIN;
+    }
+
+    while ( $line = <$IN> )
+    {
+        chomp $line;
+        $line =~ s/^\s+//;
+        $line =~ s/\s+$//;
+
+        if ( ! $line )
+        {
+            # skip empty lines
+        }
+        elsif ( $line =~/^extern.*/ )
+        {
+            # skip over open of 'extern "C"'
+        }
+        elsif ( $line =~/^[#}].*/ )
+        {
+            # skip over preprocessor lines
+            # and close of 'extern "C"'
+        }
+        elsif ( $line =~ /^typedef .*/ )
+        {
+            # skip over typedefs
+        }
+        else
+        {
+            # consume comments here
+            while ( $line =~ /^(.*)\/\*(.*)$/ )
+            {
+                $line = $1;
+                $cmt = $2;
+                until ( ! $cmt || $cmt =~ /^.*\*\/(.*)$/ )
+                {
+                    $cmt = <$IN>;
+                }
+
+                $line and $1 and $line .= " ";
+                $line .= "$1";
+
+                chomp $line;
+                $line =~ s/^\s+//;
+                $line =~ s/\s+$//;
+            }
+            if ( ! $line )
+            {
+                # skip of comment line was empty
+            }
+            else
+            {
+                # assemble line
+                until ( $line =~ /^(.*;)(.*)$/ )
+                {
+                    $cont = <$IN>;
+                    chomp $cont;
+                    $cont =~ s/^\s+//;
+                    $cont =~ s/\s+$//;
+                    $line .= " $cont";
+                }
+
+                # look for a function prototype
+                if ( $line =~ /^[A-Z]+_EXTERN ([^\(]+)\s+CC ([A-Za-z_][A-Za-z0-9_]*)\s*\(\s*(.*)\s+\);/ ||
+                     $line =~ /^[A-Z]+_EXTERN ([^\(]+\*+)CC ([A-Za-z_][A-Za-z0-9_]*)\s*\(\s*(.*)\s+\);/ ||
+                     $line =~ /^([^\(]+)\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(\s*(.*)\s+\);/ ||
+                     $line =~ /^([^\(]+\*+)([A-Za-z_][A-Za-z0-9_]*)\s*\(\s*(.*)\s+\);/ )
+                {
+                    $rt = $1;
+                    $func = $2;
+                    $formals = $3;
+
+                    $msg = '';
+                    $cid = 0;
+                    $cls = '';
+                    $dual = 0;
+
+                    for ( $i = 0; ! $msg && $i < $num_classes; ++ $i )
+                    {
+                        $cls = $classes [ $i ] [ 0 ];
+                        if ( $func =~ /^$cls(..*)/ )
+                        {
+                            $cid = $i;
+                            $msg = $1;
+                            $dual = $classes [ $i ] [ 2 ];
+                        }
+                    }
+
+                    $penult = '';
+                    $vararg = '';
+                    $update = 0;
+                    $params = '';
+                    $tformals = '';
+
+                    $formals2 = '';
+                    $tmplist = $formals;
+                    while ( $tmplist =~ /([^\(]*\()([^\)]*)(\).*)/ )
+                    {
+                        $formals2 .= $1;
+                        $pparms = $2;
+                        $tmplist = $3;
+                        $pparms =~ s/,/#/g;
+                        $formals2 .= "$pparms";
+                    }
+                    $formals2 .= $tmplist;
+
+                    @paramlist = split ( ',', $formals2 );
+                    while ( $param = shift @paramlist )
+                    {
+                        # trim parameter
+                        $param =~ s/^\s+//;
+                        $param =~ s/\s+$//;
+
+                        # catch vararg parameter
+                        if ( $param eq '...' )
+                        {
+                            $vararg = $penult;
+                            $params .= ", args";
+                            $tformals = '';
+                        }
+                        else
+                        {
+                            # correct hidden commas
+                            $param =~ s/#/,/g;
+
+                            # strip off vector expr
+                            if ( $param =~ /([^\[]*)\s*(\[.*\])$/ )
+                            {
+                                $param = $1;
+                                $vect = $2;
+                            }
+
+
+                            # strip off param name
+                            if ( $param =~ /^(.*)\s*(\([^\(]*\))$/ )
+                            {
+                                $param = $1;
+                                $pparms = $2;
+                                $param =~ /^(.*)\(\s*CC\s*\*\s*([A-Za-z0-9_]+)\s*\)/ or die "failed to determine name of parameter '$param'";
+                                $param = "$1( CC * ) $pparms";
+                                $penult = $2;
+                            }
+                            else
+                            {
+                                $param =~ /(.*[^A-Za-z0-9_]+)([A-Za-z0-9_]+)$/ or die "failed to determine name of parameter '$param'";
+                                $param = $1;
+                                $penult = $2;
+                            }
+
+                            $params and $params .= ", ";
+                            $params .= $penult;
+                            
+
+                            # process typedecl
+                            $param =~ s/\s+$//;
+                            if ( $param =~ /(.*)\s+(\*+)$/ )
+                            {
+                                $param = "$1$2";
+                            }
+                            $vect and $param .= " $vect";
+                            $tformals and $tformals .= ", ";
+                            $tformals .= $param;
+
+                            # finally, decide if the function is for read or update
+                            if ( $param =~ /^$cls/ || $param =~ /^struct\s+$cls\*+/ )
+                            {
+                                $update = $dual;
+                            }
+                        }
+                    }
+
+                    $funcs [ $num_funcs ] [ 0 ] = $cid;
+                    $funcs [ $num_funcs ] [ 1 ] = $msg;
+                    $funcs [ $num_funcs ] [ 2 ] = $rt;
+                    $funcs [ $num_funcs ] [ 3 ] = $formals;
+                    $funcs [ $num_funcs ] [ 4 ] = $tformals;
+                    $funcs [ $num_funcs ] [ 5 ] = $vararg;
+                    $funcs [ $num_funcs ] [ 6 ] = $params;
+                    $funcs [ $num_funcs ] [ 7 ] = $update;
+
+                    ++ $num_funcs;
+                }
+            }
+        }
+    }
+
+    if ( $num_files )
+    {
+        close $IN;
+        $IN = '';
+    }
+}
+
+# generate text into arrays
+my @msgs;
+my @cvt;
+my @wmsgs;
+my @wvt;
+my @decls;
+my @thunks;
+$mgr = 'mgr';
+
+for ( $num_thunks = 0, $num_ro = 0, $i = 0; $i < $num_funcs; ++ $i )
+{
+    # extract information
+    $cid = $funcs [ $i ] [ 0 ];
+    $msg = $funcs [ $i ] [ 1 ];
+    $rt = $funcs [ $i ] [ 2 ];
+    $formals = $funcs [ $i ] [ 3 ];
+    $tformals = $funcs [ $i ] [ 4 ];
+    $vararg = $funcs [ $i ] [ 5 ];
+    $params = $funcs [ $i ] [ 6 ];
+    $update = $funcs [ $i ] [ 7 ];
+
+    $cls = $classes [ $cid ] [ 0 ];
+    $prefix = $classes [ $cid ] [ 1 ];
+    $dual = $classes [ $cid ] [ 2 ];
+
+    # constructor flag
+    $constructor = 3;
+
+    # msg symbol
+    $sym = "$cls$msg";
+    $tname = "_$sym";
+
+    # vt
+    $vt = $module;
+    $update == 0 and $vt .= "_cvt";
+    $update == 1 and $vt .= "_wvt";
+
+    # vt member
+    $vt_mbr = $prefix;
+    $vt_mbr .= '_';
+    if ( $dual && ( $msg eq "MakeRead" || $msg eq "MakeUpdate" ) )
+    {
+        # detect special library constructor
+        if ( $tformals =~ /^$cls\*\*,/ )
+        {
+            $constructor = 2;
+            $vt = $module . "_cvt";
+            $vt_mbr .= "make";
+            $tname = "_$cls" . "Make";
+        }
+        elsif ( $tformals =~ /^const\s+$cls\*\*,/ )
+        {
+            $constructor = 0;
+            $vt_mbr .= "make";
+        }
+        elsif ( $tformals =~ /^const\s+$cls\*\*$/ )
+        {
+            $constructor = 1;
+            $vt_mbr .= "make";
+        }
+        else
+        {
+            $vararg and $vt_mbr .= "v_";
+            $vt_mbr .= lower_case_sym $msg;
+        }
+    }
+    else
+    {
+        $vararg and $vt_mbr .= "v_";
+        $vt_mbr .= lower_case_sym $msg;
+    }
+
+    # vt function
+    $vt_func = "$rt ( CC * $vt_mbr ) ( $tformals )";
+
+    # dispatch
+    $disp = "( * $vt . f . $vt_mbr ) ( $params )";
+
+    # function declaration
+    $decl = "$rt $tname ( $formals )";
+
+    # thunk
+    $thunk = "$decl\n{\n";
+    if ( $vararg )
+    {
+        $thunk .= "    $rt ret;\n    va_list args;\n    va_start ( args, $vararg );\n";
+        $thunk .= "    assert ( $vt . f . $vt_mbr != NULL );\n";
+        $thunk .= "    ret = $disp;\n    va_end ( args );\n    return ret;\n";
+    }
+    else
+    {
+        $thunk .= "    assert ( $vt . f . $vt_mbr != NULL );\n";
+        $thunk .= "    return $disp;\n";
+    }
+    $thunk .= "}";
+
+    # handle library constructors specially
+    if ( $constructor == 0 )
+    {
+        $msgs [ 0 ] = $sym;
+    }
+    elsif ( $constructor == 1 )
+    {
+        my $subst_sym;
+        $subst_sym = $sym .= "WithDir";
+        $msgs [ 0 ] = $subst_sym;
+    }
+    elsif ( $constructor == 2 )
+    {
+        $msgs [ 1 ] = $sym;
+        $cvt [ 0 ] = $vt_func;
+        $decls [ 0 ] = $decl;
+        $thunks [ 0 ] = $thunk;
+        @pnames = split ( ',', $params );
+        $mgr = $pnames [ 0 ];
+    }
+    elsif ( $vararg )
+    {
+        $decls [ $num_thunks + 1 ] = $decl;
+        $thunks [ $num_thunks + 1 ] = $thunk;
+        ++ $num_thunks;
+    }
+    elsif ( $update == 1 )
+    {
+        push @wmsgs, $sym;
+        push @wvt, $vt_func;
+
+        $decls [ $num_thunks + 1 ] = $decl;
+        $thunks [ $num_thunks + 1 ] = $thunk;
+        ++ $num_thunks;
+    }
+    else
+    {
+        $msgs [ $num_ro + 2 ] = $sym;
+        $cvt [ $num_ro + 1 ] = $vt_func;
+        ++ $num_ro;
+
+        $decls [ $num_thunks + 1 ] = $decl;
+        $thunks [ $num_thunks + 1 ] = $thunk;
+        ++ $num_thunks;
+    }
+}
+
+# create warning comment
+$warn_cmt = "/* THIS IS AN AUTO-GENERATED FILE - DO NOT EDIT */\n";
+
+# write include file
+if ( $h_out )
+{
+    $def = "_h_$h_out";
+    $def =~ s/\.h$//;
+    $def .= '_';
+    $def =~ s/[\/-]/_/g;
+    print $H "$warn_cmt\n#ifndef $def\n#define $def\n\n";
+
+    while ( $src_file = shift @src_files )
+    {
+        $src_def = "_h_$src_file";
+        $src_def =~ s/\.h$//;
+        $src_def .= '_';
+        $src_def =~ s/[\/-]/_/g;
+        print $H "#ifndef $src_def\n#include <$src_file>\n#endif\n\n";
+    }
+
+    print $H "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n";
+
+    while ( $decl = shift @decls )
+    {
+        print $H "$decl;\n"
+    }
+
+    print $H "\n#ifdef __cplusplus\n}\n#endif\n\n";
+
+    print $H "#endif /* $def */\n";
+
+    close $H;
+}
+
+# write thunk file
+if ( $h_out )
+{
+    print $C "$warn_cmt\n#include \"$h_out\"\n";
+}
+else
+{
+    print $C "$warn_cmt\n#include \"kqsh-$module.h\"\n";
+}
+print $C "#include \"kqsh-priv.h\"\n";
+print $C "#include <klib/rc.h>\n";
+print $C "#include <assert.h>\n\n";
+
+# read-only messages
+print $C "static const char *$module" . "_msgs [] =\n{\n";
+while ( $msg = shift @msgs )
+{
+    print $C "    \"$msg\",\n";
+}
+print $C "    NULL\n};\n\n";
+
+# read-only vtable
+print $C "static union\n{\n";
+print $C "    fptr_t slots [ sizeof $module" . "_msgs / sizeof $module" . "_msgs [ 0 ] - 2 ];\n\n";
+print $C "    struct\n    {\n";
+while ( $vt_func = shift @cvt )
+{
+    print $C "        $vt_func;\n"
+}
+print $C "    } f;\n\n} $module" . "_cvt;\n\n";
+
+# update messages
+print $C "static const char *$module" . "_wmsgs [] =\n{\n";
+while ( $msg = shift @wmsgs )
+{
+    print $C "    \"$msg\",\n";
+}
+print $C "    NULL\n};\n\n";
+
+# update vtable
+print $C "static union\n{\n";
+print $C "    fptr_t slots [ sizeof $module" . "_wmsgs / sizeof $module" . "_wmsgs [ 0 ] - 1 ];\n\n";
+print $C "    struct\n    {\n";
+while ( $vt_func = shift @wvt )
+{
+    print $C "        $vt_func;\n"
+}
+print $C "    } f;\n\n} $module" . "_wvt;\n\n";
+
+# libdata
+print $C "kqsh_libdata $module" . "_data =\n{\n";
+print $C "    NULL, NULL,\n";
+print $C "    $module" . "_msgs, $module" . "_cvt . slots,\n";
+print $C "    $module" . "_wmsgs, $module" . "_wvt . slots\n";
+print $C "};\n\n";
+
+# special library construct thunk
+$thunk = shift @thunks;
+ at lines = split ( '\n', $thunk );
+print $C $lines [ 0 ] . "\n{\n";
+print $C "    if ( sizeof $module" . "_cvt . slots != sizeof $module" . "_cvt . f ||\n";
+print $C "         sizeof $module" . "_wvt . slots != sizeof $module" . "_wvt . f )\n";
+print $C "    {\n";
+print $C "        * $mgr = NULL;\n";
+print $C "        return RC ( rcExe, rcMgr, rcConstructing, rcInterface, rcCorrupt );\n";
+print $C "    }\n\n";
+print $C $lines [ 2 ] . "\n";
+print $C $lines [ 3 ] . "\n";
+print $C "}\n\n";
+
+# remainder of thunks
+while ( $thunk = shift @thunks )
+{
+    print $C "$thunk\n\n";
+}
diff --git a/tools/kqsh/kqsh-tok.c b/tools/kqsh/kqsh-tok.c
new file mode 100644
index 0000000..0be5a65
--- /dev/null
+++ b/tools/kqsh/kqsh-tok.c
@@ -0,0 +1,99 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-tok.h"
+#include "kqsh-priv.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <kfs/dyload.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* next_token
+ */
+KToken *next_token ( struct KSymTable const *tbl, KTokenSource *src, KToken *t )
+{
+    if ( KTokenizerNext ( kDefaultTokenizer, src, t ) -> id == eIdent )
+    {
+        KSymbol *sym = KSymTableFind ( tbl, & t -> str );
+        t -> sym = sym;
+        if ( sym != NULL )
+            t -> id = sym -> type;
+    }
+
+    return t;
+}
+
+KToken *next_shallow_token ( struct KSymTable const *tbl, KTokenSource *src, KToken *t )
+{
+    if ( KTokenizerNext ( kDefaultTokenizer, src, t ) -> id == eIdent || t -> id == eName )
+    {
+        KSymbol *sym = KSymTableFindShallow ( tbl, & t -> str );
+        t -> sym = sym;
+        if ( sym != NULL )
+            t -> id = sym -> type;
+    }
+
+    return t;
+}
+
+/* expected
+ */
+rc_t expected ( const KToken *self, KLogLevel lvl, const char *expected )
+{
+    String eof;
+    const String *str = & self -> str;
+
+    if ( self -> id == eEndOfInput )
+    {
+        CONST_STRING ( & eof, "EOF" );
+        str = & eof;
+    }
+
+    if ( interactive )
+        kqsh_printf ( "expected '%s' but found '%S'\n", expected, str );
+    else
+    {
+        PLOGMSG ( lvl, ( lvl, "$(file):$(lineno): "
+                         "expected '$(expected)' but found '$(found)'",
+                         "file=%.*s,lineno=%u,expected=%s,found=%.*s"
+                         , ( int ) self -> txt -> path . size, self -> txt -> path . addr
+                         , self -> lineno
+                         , expected
+                         , ( int ) str -> size, str -> addr ));
+    }
+
+    return RC ( rcExe, rcText, rcParsing, rcToken, rcUnexpected );
+}
diff --git a/tools/kqsh/kqsh-tok.h b/tools/kqsh/kqsh-tok.h
new file mode 100644
index 0000000..121899f
--- /dev/null
+++ b/tools/kqsh/kqsh-tok.h
@@ -0,0 +1,155 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kqsh_tok_
+#define _h_kqsh_tok_
+
+#ifndef _h_klib_token_
+#include <klib/token.h>
+#endif
+
+#ifndef _h_klib_log_
+#include <klib/log.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KSymTable;
+
+
+/*--------------------------------------------------------------------------
+ * kqsh tokens
+ */
+enum kqsh_tokens
+{
+    /* alphabetical list of commands */
+    kw_add = eNumSymtabIDs,
+    kw_alias,
+    kw_alter,
+    kw_as,
+    kw_at,
+    kw_close,
+    kw_column,
+    kw_columns,
+    kw_commands,
+    kw_compact,
+    kw_constants,
+    kw_create,
+    kw_cursor,
+    kw_database,
+    kw_databases,
+    kw_delete,
+    kw_drop,
+    kw_execute,
+    kw_exit,
+    kw_for,
+    kw_formats,
+    kw_functions,
+    kw_help,
+    kw_include,
+    kw_initialize,
+    kw_insert,
+    kw_kdb,
+    kw_library,
+    kw_load,
+    kw_manager,
+    kw_metadata,
+    kw_objects,
+    kw_on,
+    kw_open,
+    kw_or,
+    kw_path,
+    kw_quit,
+    kw_rename,
+    kw_replace,
+    kw_row,
+    kw_schema,
+    kw_show,
+    kw_sra,
+    kw_table,
+    kw_tables,
+    kw_text,
+    kw_types,
+    kw_typesets,
+    kw_update,
+    kw_use,
+    kw_using,
+    kw_version,
+    kw_vdb,
+    kw_with,
+    kw_write,
+
+    rsrv_first,
+    /* reserved names */
+    rsrv_kmgr = rsrv_first,
+    rsrv_vmgr,
+    rsrv_sramgr,
+    rsrv_srapath,
+
+    obj_first,
+    /* object types */
+    obj_KDBManager = obj_first,
+    obj_VDBManager,
+    obj_SRAManager,
+    obj_VSchema,
+    obj_KTable,
+    obj_VTable,
+    obj_VCursor,
+
+    /* accepted abbreviations */
+    kw_col = kw_column,
+    kw_cols = kw_columns,
+    kw_db = kw_database,
+    kw_dbs = kw_databases,
+    kw_exec = kw_execute,
+    kw_init = kw_initialize,
+    kw_lib = kw_library,
+    kw_mgr = kw_manager,
+    kw_tbl = kw_table
+};
+
+/* next_token
+ */
+KToken *next_token ( struct KSymTable const *tbl, KTokenSource *src, KToken *t );
+KToken *next_shallow_token ( struct KSymTable const *tbl, KTokenSource *src, KToken *t );
+
+/* expected
+ */
+rc_t expected ( const KToken *self, KLogLevel lvl, const char *expected );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kqsh_tok_ */
diff --git a/tools/kqsh/kqsh-write.c b/tools/kqsh/kqsh-write.c
new file mode 100644
index 0000000..2e63262
--- /dev/null
+++ b/tools/kqsh/kqsh-write.c
@@ -0,0 +1,321 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+#include "kqsh-kdb.h"
+#include "kqsh-vdb.h"
+
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <kfs/directory.h>
+#include <klib/log.h>
+#include <klib/vector.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* write_cursor_xxx
+ */
+static
+rc_t kqsh_write_cursor_array ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc,
+    rc_t ( * write ) ( KSymTable*, KTokenSource*, KToken*, const KSymbol*, uint32_t, const VTypedesc* ) )
+{
+    rc_t rc;
+
+    /* allow empty array */
+    if ( next_token ( tbl, src, t ) -> id == eRightSquare )
+        return 0;
+
+    /* write elements */
+    while ( 1 )
+    {
+        /* write the element */
+        rc = ( * write ) ( tbl, src, t, curs, idx, desc );
+        if ( rc != 0 )
+            break;
+
+        /* punctuation */
+        if ( next_token ( tbl, src, t ) -> id != eComma )
+            break;
+
+        /* next element */
+        next_token ( tbl, src, t );
+    }
+
+    /* expect ']' */
+    if ( rc == 0 && t -> id != eRightSquare )
+        rc = expected ( t, klogErr, "]" );
+
+    return rc;
+}
+
+static
+rc_t kqsh_write_cursor_bool ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    if ( t -> id == eLeftSquare )
+        return kqsh_write_cursor_array ( tbl, src, t, curs, idx, desc, kqsh_write_cursor_bool );
+
+    assert ( desc -> intrinsic_bits == 8 );
+    return -1;
+}
+
+static
+rc_t kqsh_write_cursor_uint ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    if ( t -> id == eLeftSquare )
+        return kqsh_write_cursor_array ( tbl, src, t, curs, idx, desc, kqsh_write_cursor_uint );
+    return -1;
+}
+
+static
+rc_t kqsh_write_cursor_int ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    if ( t -> id == eLeftSquare )
+        return kqsh_write_cursor_array ( tbl, src, t, curs, idx, desc, kqsh_write_cursor_int );
+    return -1;
+}
+
+static
+rc_t kqsh_write_cursor_float ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    if ( t -> id == eLeftSquare )
+        return kqsh_write_cursor_array ( tbl, src, t, curs, idx, desc, kqsh_write_cursor_float );
+    return -1;
+}
+
+static
+rc_t kqsh_write_cursor_ascii ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    rc_t rc;
+
+    switch ( t -> id )
+    {
+    case eUntermString:
+    case eUntermEscapedString:
+        return expected ( t, klogErr, "terminated string" );
+    case eString:
+        rc = _VCursorWrite ( ( void* ) curs -> u . obj, idx, 8, t -> str . addr + 1, 0, t -> str . len - 2 );
+        if ( rc == 0 )
+            return 0;
+        break;
+    case eEscapedString:
+        rc = 0;
+        break;
+    default:
+        return expected ( t, klogErr, "string" );
+    }
+
+    if ( rc == 0 )
+    {
+        char buffer [ 256 ], *p = buffer;
+        size_t size = sizeof buffer;
+        if ( t -> str . size >= sizeof buffer )
+        {
+            p = malloc ( size = t -> str . size + 1 );
+            if ( p == NULL )
+                rc = RC ( rcExe, rcCursor, rcWriting, rcMemory, rcExhausted );
+        }
+
+        if ( rc == 0 )
+        {
+            rc = KTokenToString ( t, p, size, & size );
+            if ( rc == 0 )
+                rc = _VCursorWrite ( ( void* ) curs -> u . obj, idx, 8, p, 0, size );
+            if ( p != buffer )
+                free ( p );
+        }
+    }
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to write string '$(str)' to cursor '$(curs)' ( $(addr) )"
+                  , "str=%.*s,curs=%.*s,addr=0x%zX"
+                  , ( int ) t -> str . size, t -> str . addr
+                  , ( int ) curs -> name . size, curs -> name . addr
+                  , ( size_t ) curs -> u . obj ));
+   }
+
+    return rc;
+}
+
+static
+rc_t kqsh_write_cursor_unicode ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const KSymbol *curs, uint32_t idx, const VTypedesc *desc )
+{
+    if ( desc -> intrinsic_bits == 8 )
+        return kqsh_write_cursor_ascii ( tbl, src, t, curs, idx, desc );
+
+    return -1;
+}
+
+/* write_cursor
+ */
+static
+rc_t kqsh_write_cursor ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+    VTypedecl td;
+    VTypedesc desc;
+
+    /* have cursor object */
+    KSymbol *curs = t -> sym;
+
+    /* error if read-only */
+    if ( read_only )
+    {
+        rc = RC ( rcExe, rcCursor, rcWriting, rcCursor, rcReadonly );
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to write to cursor '$(curs)' ( $(addr) )"
+                  , "curs=%.*s,addr=0x%zX"
+                  , ( int ) curs -> name . size, curs -> name . addr
+                  , ( size_t ) curs -> u . obj ));
+        return rc;
+    }
+
+    /* separator */
+    if ( next_token ( tbl, src, t ) -> id != ePeriod )
+        return expected ( t, klogErr, ". <colname> or IDX" );
+
+    /* get column spec */
+    switch ( next_token ( tbl, src, t ) -> id )
+    {
+        /* take integer index */
+    case eDecimal:
+    case eHex:
+    case eOctal:
+        rc = KTokenToU32 ( t, & idx );
+        if ( rc != 0 )
+            return expected ( t, klogErr, "integer column index" );
+        break;
+
+        /* take column name */
+    default:
+        if ( t -> sym == NULL )
+            return expected ( t, klogErr, "column name" );
+    case eIdent:
+        switch ( curs -> type )
+        {
+        case obj_VCursor:
+            rc = _VCursorGetColumnIdx ( curs -> u . obj, & idx, "%.*s",
+                ( int ) t -> str . size, t -> str . addr );
+            break;
+        }
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt,  (klogInt, rc,
+                      "failed to write to column '$(col)' on cursor '$(curs)' ( $(addr) )"
+                      , "col=%.*s,curs=%.*s,addr=0x%zX"
+                      , ( int ) t -> str . size, t -> str . addr
+                      , ( int ) curs -> name . size, curs -> name . addr
+                      , ( size_t ) curs -> u . obj ));
+            return rc;
+        }
+        break;
+    }
+
+    /* access column object */
+    switch ( curs -> type )
+    {
+    case obj_VCursor:
+        rc = _VCursorDatatype ( curs -> u . obj, idx, & td, & desc );
+        break;
+    }
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogInt,  (klogInt, rc,
+                  "failed to access datatype of column $(idx) on cursor '$(curs)' ( $(addr) )"
+                  , "idx=%u,curs=%.*s,addr=0x%zX"
+                  , idx
+                  , ( int ) curs -> name . size, curs -> name . addr
+                  , ( size_t ) curs -> u . obj ));
+        return rc;
+    }
+
+    /* move on to first token of row */
+    next_token ( tbl, src, t );
+
+    /* switch on datatype */
+    switch ( desc . domain )
+    {
+    case vtdBool:
+        rc = kqsh_write_cursor_bool ( tbl, src, t, curs, idx, & desc );
+        break;
+    case vtdUint:
+        rc = kqsh_write_cursor_uint ( tbl, src, t, curs, idx, & desc );
+        break;
+    case vtdInt:
+        rc = kqsh_write_cursor_int ( tbl, src, t, curs, idx, & desc );
+        break;
+    case vtdFloat:
+        rc = kqsh_write_cursor_float ( tbl, src, t, curs, idx, & desc );
+        break;
+    case vtdAscii:
+        rc = kqsh_write_cursor_ascii ( tbl, src, t, curs, idx, & desc );
+        break;
+    case vtdUnicode:
+        rc = kqsh_write_cursor_unicode ( tbl, src, t, curs, idx, & desc );
+        break;
+    }
+
+    /* expect semicolon */
+    if ( rc == 0 )
+    {
+        if ( next_token ( tbl, src, t ) -> id != eSemiColon )
+            return expected ( t, klogErr, ";" );
+    }
+
+    return rc;
+}
+
+
+/* write
+ */
+rc_t kqsh_write ( KSymTable *tbl, KTokenSource *src, KToken *t )
+{
+    switch ( t -> id )
+    {
+    case obj_VCursor:
+        return kqsh_write_cursor ( tbl, src, t );
+    }
+
+    return expected ( t, klogErr, "cursor" );
+}
diff --git a/tools/kqsh/kqsh.c b/tools/kqsh/kqsh.c
new file mode 100644
index 0000000..dec7860
--- /dev/null
+++ b/tools/kqsh/kqsh.c
@@ -0,0 +1,516 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "kqsh-priv.h"
+#include "kqsh-tok.h"
+
+#include <klib/container.h>
+#include <klib/symbol.h>
+#include <klib/symtab.h>
+#include <klib/token.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+bool read_only;
+bool interactive;
+
+
+/* exec_file
+ *  execute a named file
+ */
+rc_t kqsh_exec_file ( KSymTable *tbl, const String *path )
+{
+    KDirectory *wd;
+    rc_t rc = KDirectoryNativeDir ( & wd );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to open working directory" );
+    else
+    {
+        const KFile *f;
+        rc = KDirectoryOpenFileRead ( wd, & f, "%.*s"
+            , ( int ) path -> size, path -> addr );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogErr,  (klogErr, rc, "failed to open file '$(path)'", "path=%.*s"
+                                 , ( int ) path -> size, path -> addr ));
+        }
+        else
+        {
+            const KMMap *mm;
+            rc = KMMapMakeRead ( & mm, f );
+            if ( rc != 0 )
+            {
+                PLOGERR ( klogErr,  (klogErr, rc, "failed to map file '$(path)'", "path=%.*s"
+                                     , ( int ) path -> size, path -> addr ));
+            }
+            else
+            {
+                const void *addr;
+                rc = KMMapAddrRead ( mm, & addr );
+                if ( rc != 0 )
+                    LOGERR ( klogInt, rc, "failed to obtain mmap addr" );
+                else
+                {
+                    size_t size;
+                    rc = KMMapSize ( mm, & size );
+                    if ( rc != 0 )
+                        LOGERR ( klogInt, rc, "failed to obtain mmap size" );
+                    else
+                    {
+                        String text;
+                        KTokenText tt;
+                        KTokenSource src;
+
+                        StringInit ( & text, addr, ( size_t ) size,
+                            string_len ( addr, ( size_t ) size ) );
+                        KTokenTextInit ( & tt, & text, path );
+                        KTokenSourceInit ( & src, & tt );
+
+                        rc = kqsh ( tbl, & src );
+                    }
+                }
+
+                KMMapRelease ( mm );
+            }
+
+            KFileRelease ( f );
+        }
+
+        KDirectoryRelease ( wd );
+    }
+
+    return rc;
+}
+
+/* init_symtable
+ *  initialize tool table
+ */
+static
+rc_t kqsh_init_keywords ( KSymTable *tbl )
+{
+    int i;
+    static struct
+    {
+        const char *keyword;
+        int id;
+    } kw [] =
+    {
+#define KEYWORD( word ) \
+        { # word, kw_ ## word }
+#define RESERVED( word ) \
+        { # word, rsrv_ ## word }
+
+        /* keywords */
+        KEYWORD ( add ),
+        KEYWORD ( alias ),
+        KEYWORD ( alter ),
+        KEYWORD ( as ),
+        KEYWORD ( at ),
+        KEYWORD ( close ),
+        KEYWORD ( column ),
+        KEYWORD ( columns ),
+        KEYWORD ( commands ),
+        KEYWORD ( compact ),
+        KEYWORD ( constants ),
+        KEYWORD ( create ),
+        KEYWORD ( cursor ),
+        KEYWORD ( database ),
+        KEYWORD ( databases ),
+        KEYWORD ( delete ),
+        KEYWORD ( drop ),
+        KEYWORD ( execute ),
+        KEYWORD ( exit ),
+        KEYWORD ( for ),
+        KEYWORD ( formats ),
+        KEYWORD ( functions ),
+        KEYWORD ( help ),
+        KEYWORD ( include ),
+        KEYWORD ( initialize ),
+        KEYWORD ( insert ),
+        KEYWORD ( kdb ),
+        KEYWORD ( library ),
+        KEYWORD ( load ),
+        KEYWORD ( manager ),
+        KEYWORD ( metadata ),
+        KEYWORD ( objects ),
+        KEYWORD ( on ),
+        KEYWORD ( open ),
+        KEYWORD ( or ),
+        KEYWORD ( path ),
+        KEYWORD ( quit ),
+        KEYWORD ( rename ),
+        KEYWORD ( replace ),
+        KEYWORD ( row ),
+        KEYWORD ( schema ),
+        KEYWORD ( show ),
+        KEYWORD ( sra ),
+        KEYWORD ( table ),
+        KEYWORD ( tables ),
+        KEYWORD ( text ),
+        KEYWORD ( types ),
+        KEYWORD ( typesets ),
+        KEYWORD ( update ),
+        KEYWORD ( use ),
+        KEYWORD ( using ),
+        KEYWORD ( version ),
+        KEYWORD ( vdb ),
+        KEYWORD ( with ),
+        KEYWORD ( write ),
+
+        /* reserved names */
+        RESERVED ( kmgr ),
+        RESERVED ( vmgr ),
+        RESERVED ( sramgr ),
+        RESERVED ( srapath ),
+
+        /* abbreviations */
+        KEYWORD ( col ),
+        KEYWORD ( cols ),
+        KEYWORD ( db ),
+        KEYWORD ( dbs ),
+        KEYWORD ( exec ),
+        KEYWORD ( init ),
+        KEYWORD ( lib ),
+        KEYWORD ( mgr ),
+        KEYWORD ( tbl )
+
+#undef KEYWORD
+#undef RESERVED
+    };
+
+
+    /* define keywords */
+    for ( i = 0; i < sizeof kw / sizeof kw [ 0 ]; ++ i )
+    {
+        rc_t rc;
+
+        String name;
+        StringInitCString ( & name, kw [ i ] . keyword );
+        rc = KSymTableCreateSymbol ( tbl, NULL, & name, kw [ i ] . id, NULL );
+        if ( rc != 0 )
+            return rc;
+    }
+
+    return 0;
+}
+
+static
+rc_t kqsh_init_symtable ( KSymTable *tbl, BSTree *intrinsic )
+{
+    rc_t rc = KSymTablePushScope ( tbl, intrinsic );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to initialize symbol table" );
+    else
+    {
+        rc = kqsh_init_keywords ( tbl );
+
+        KSymTablePopScope ( tbl );
+    }
+
+    return rc;
+}
+
+
+/* whackobj
+ *  whacks created/opened objects
+ */
+static
+rc_t CC kqsh_read_stdin ( void *data, KTokenText *tt, size_t save )
+{
+    rc_t rc;
+    size_t num_read;
+    const KFile *self = ( const void* ) data;
+
+    /* manage stdin for the process */
+    static uint64_t pos;
+    static char buff [ 4096 ];
+
+    /* save any characters not yet consumed */
+    if ( save != 0 )
+    {
+        assert ( save < sizeof buff );
+        memmove ( buff, & tt -> str . addr [ tt -> str . size - save ], save );
+    }
+
+    /* read as many characters as are available */
+    rc = KFileRead ( self, pos, & buff [ save ], sizeof buff - save, & num_read );
+    if ( rc != 0 )
+        LOGERR ( klogErr, rc, "failed to read stdin" );
+    else
+    {
+        /* reset the buffer in "tt" */
+        tt -> str . addr = buff;
+        tt -> str . size = save + num_read;
+        tt -> str . len = string_len ( buff, save + num_read );
+        pos += num_read;
+    }
+
+    return rc;
+}
+
+/* init_console
+ */
+static
+rc_t kqsh_init_console ( KTokenText *console )
+{
+    const KFile *std_in;
+    rc_t rc = KFileMakeStdIn ( & std_in );
+    if ( rc != 0 )
+        LOGERR ( klogErr, rc, "failed to init stdin" );
+    else
+    {
+        KTokenTextInitCString ( console, "", "stdin" );
+        console -> read = kqsh_read_stdin;
+        console -> data = ( void* ) std_in;
+
+        if ( KFileType ( std_in ) == kfdCharDev )
+            interactive = true;
+    }
+    return rc;
+}
+
+#define OPTION_UPDATE  "update"
+#define OPTION_LIBPATH "lib-path"
+#define ALIAS_UPDATE   "u"
+#define ALIAS_LIBPATH  "l"
+
+static const char * update_usage[] = { "use update managers", NULL };
+static const char * libpath_usage[] = { "add to load library path", NULL };
+
+OptDef MyOptions [] = 
+{
+    { OPTION_UPDATE,  ALIAS_UPDATE,  NULL, update_usage,  0, false, false },
+    { OPTION_LIBPATH, ALIAS_LIBPATH, NULL, libpath_usage, 0, true, false }
+};
+
+const char UsageDefaultName[] = "kqsh";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [ options ] [ file ... ]\n"
+                    "\n", progname);
+}
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine (ALIAS_UPDATE, OPTION_UPDATE, NULL, update_usage);
+
+    HelpOptionLine (ALIAS_LIBPATH, OPTION_LIBPATH, "path", libpath_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+static
+rc_t kqsh_main ( int argc, char *argv [] )
+{
+    rc_t rc;
+    Args *args;
+
+    rc = ArgsMakeAndHandle ( & args, argc, argv, 1, MyOptions,
+        sizeof MyOptions / sizeof MyOptions [ 0 ] );
+    if ( rc == 0 ) do 
+    {
+        uint32_t ix;
+        uint32_t pcount;
+        const char * pc;
+
+        /* did anyone ask to open update managers? */
+        rc = ArgsOptionCount ( args, OPTION_UPDATE, & pcount );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt, ( klogInt, rc, "failed to retrieve '$(option)' option count", "option=" OPTION_UPDATE ) );
+            break;
+        }
+
+        /* record zero count as read-only */
+        read_only = ( pcount == 0 );
+
+        /* did anyone ask to add a custom library search path? */
+        rc = ArgsOptionCount ( args, OPTION_LIBPATH, & pcount );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt, ( klogInt, rc, "failed to retrieve '$(option)' option count", "option=" OPTION_LIBPATH ) );
+            break;
+        }
+
+        /* add each path in order */
+        for ( ix = 0; ix < pcount; ++ ix )
+        {
+            rc = ArgsOptionValue ( args, OPTION_LIBPATH, ix, (const void **)& pc );
+            if ( rc != 0 )
+            {
+                PLOGERR ( klogInt, ( klogInt, rc, "failed to retrieve '$(option)' option value [ $(idx) ]", "option=" OPTION_LIBPATH ",idx=%u", ix ) );
+                break;
+            }
+
+            rc = kqsh_update_libpath ( pc );
+            if ( rc != 0 )
+                break;
+        }
+
+        /* add system library path */
+        if ( rc == 0 )
+            rc = kqsh_system_libpath ();
+        if ( rc == 0 )
+        {
+            KSymTable tbl;
+
+            BSTree intrinsic;
+            BSTreeInit ( & intrinsic );
+
+            rc = KSymTableInit ( & tbl, & intrinsic );
+            if ( rc != 0 )
+                LOGERR ( klogInt, rc, "failed to initialize symbol table" );
+            else
+            {
+                rc = kqsh_init_symtable ( & tbl, & intrinsic );
+                while ( rc == 0 )
+                {
+                    rc = ArgsParamCount ( args, & pcount );
+                    if ( rc != 0 )
+                    {
+                        LOGERR ( klogInt, rc, "failed to retrieve parameter count" );
+                        break;
+                    }
+
+                    if ( pcount == 0 )
+                    {
+                        KTokenText console;
+                        
+                        rc = kqsh_init_console ( & console );
+                        if ( rc == 0 )
+                        {
+                            KTokenSource src;
+                            
+                            KTokenSourceInit ( & src, & console );
+                                
+                            if ( interactive )
+                            {
+                                uint32_t vers = KAppVersion ();
+                                
+                                kqsh_printf ( "\nkqsh version %u.%u"
+                                              , ( vers >> 24 )
+                                              , ( vers >> 16 ) & 0xFF );
+                                if ( ( vers & 0xFFFF ) != 0 )
+                                    kqsh_printf ( ".%u", vers & 0xFFFF );
+                            }
+                            
+                            rc = kqsh ( & tbl, & src );
+                            KFileRelease ( console . data );
+                        }
+                    }
+            
+                    else for ( ix = 1; ix <= pcount; ++ ix )
+                    {
+                        const char *file = argv [ ix ];
+
+                        String path;
+                        StringInitCString ( & path, file );
+
+                        rc = kqsh_exec_file ( & tbl, & path );
+                        if ( rc != 0 )
+                            break;
+                    }
+
+                    KSymTableWhack ( & tbl );
+                    break; /* never really loop */
+                }
+
+                BSTreeWhack ( & intrinsic, KSymbolWhack, NULL );
+            }
+        }
+
+    } while ( 0 );
+
+    return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc;
+
+    KLogHandlerSetStdErr ();
+    KLogLibHandlerSetStdErr ();
+
+    rc = kqsh_init_libpath ();
+    if ( rc == 0 )
+    {
+        read_only = true;
+        rc = kqsh_main ( argc, argv );
+        kqsh_whack_libpath ();
+    }
+    return rc;
+}
diff --git a/tools/nenctool/Makefile b/tools/nenctool/Makefile
new file mode 100644
index 0000000..44f6c73
--- /dev/null
+++ b/tools/nenctool/Makefile
@@ -0,0 +1,119 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(abspath ../..)
+MODULE = tools/nenctool
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	nenctool
+
+ifeq ($(OS),linux)
+EXT_TOOLS += \
+	nenctest
+endif
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# nenctool
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCTOOL_SRC = \
+	nenctool
+
+NENCTOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCTOOL_SRC))
+
+NENCTOOL_LIB = \
+	-lkapp \
+	-stk-version \
+	-lvfs \
+	-lkns \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkq \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nenctool: $(NENCTOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(NENCTOOL_LIB)
+
+
+#-------------------------------------------------------------------------------
+# nenctest
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCTEST_SRC = \
+	nenctest
+
+NENCTEST_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCTEST_SRC))
+
+NENCTEST_LIB = \
+	-lkapp \
+	-stk-version \
+	-lvfs \
+	-lkns \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkq \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nenctest: $(NENCTEST_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(NENCTEST_LIB)
+
diff --git a/tools/nenctool/nenctest.c b/tools/nenctool/nenctest.c
new file mode 100644
index 0000000..dd2dca3
--- /dev/null
+++ b/tools/nenctool/nenctest.c
@@ -0,0 +1,489 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/testciphermgr.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+#define OPTION_FORCE   "force"
+#define ALIAS_FORCE   "f"
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+
+
+#define OPTION_CIPHER  "cipher"
+#define ALIAS_CIPHER   "c"
+static
+const char * cipher_usage[] = 
+{ "choose cipher version ",
+  "0-byte oritented vector", 
+  "1-vector",
+  "2-vector register",
+  "3-aes-ni",
+  "not all implementatons exist on all platforms",
+  NULL };
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,  ALIAS_FORCE,  NULL, force_usage,  0, false, false },
+    { OPTION_CIPHER, ALIAS_CIPHER, NULL, cipher_usage, 1, true,  false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <source-file-path> <destination-file-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Copy a file from the first parameter to the second parameter\n"
+        "  Encryption, decryption, or re-encryption are the expected purpose.\n"
+        "  This is a version of nenctool with some testing features added.\n"
+        "  The first added feature is some level of cipher implementation\n"
+        "  selection.\n"
+        "\n", progname);
+}
+
+static
+const char * first_usage[] = 
+{
+    "The path to a file either in native format",
+    NULL
+};
+
+static
+const char * second_usage[] = 
+{
+    "in 'file' URI scheme or in 'ncbi-file'",
+    "URI scheme.",
+    "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+    "where 'enc' or 'encrypt' means the file is encrypted",
+    "and 'pwfile=<path>' points to a file to get the password",
+    "or 'pwfd=<fd>' refers to a file descriptor from which to",
+    "read a password.",
+    NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("source-file-path", first_usage);
+    HelpParamLine ("destination-file-path", second_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+    HelpOptionLine (ALIAS_CIPHER, OPTION_CIPHER, "implementation", cipher_usage);
+
+    HelpOptionsStandard ();
+
+    OUTMSG (("\n"
+             "ncbi-file uri syntax:\n"
+             "  'ncbi-file' uris are based on a combination of the standard\n"
+             "  'file' and 'http' syntax familiar to browser users.\n"
+             "  Enclosing questions marks are probably necessary.\n"
+             "\n"
+             "  URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+             "  scheme:\n"
+             "    ncbi-file\n"
+             "  hierarchical-part:\n"
+             "    this is the same as for scheme file and can be the native form or\n"));
+    OUTMSG (("    the ncbi 'posix' format that matches most flavors of Unix.\n"
+             "    Environment variables and short hands such as '~' are not interpreted.\n"
+             "  query:\n"
+             "    Zero or two symbols separated by the '&'.  The whole query can be omitted.\n"
+             "      enc or encrypt\n"
+             "      pwfile='path to a file containing a password'\n"
+             "      pwfd='file descriptor where the password can be read'\n"
+             "    If the encrypt is present exactly one of the other two must be present.\n"
+             "  fragment:\n"
+             "    No fragment is permitted.\n"));
+    OUTMSG (("\n"
+             "password contents:\n"
+             "  The file or file descriptor containing the password is read enough to satisfy\n"
+             "  the following restriction.  The password is terminated by the end of file,\n"
+             "  a carriage return or a line feed.  The length must be no more than 4096 bytes.\n"
+             "  The password file should have limited read access to protect it.\n"));
+
+
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To encrypt a create a file named 'example' with a password from a file\n"
+             "  named 'password-file' to a file named 'example.nenc' all in the current\n"
+             "  directory:\n"
+             "\n"
+             "  $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+             progname));
+    OUTMSG (("\n"
+             "  To decrypt a file named 'example.nenc' with a password from a file\n"
+             "  named 'password-file' to a file named 'example' in directories implied\n"
+             "  in the command:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+             progname));
+    OUTMSG (("\n"
+             "  To change the encryption of a file from one password to another:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+             "         \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+             progname));
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+
+    assert (src);
+    assert (dst);
+    assert (fin);
+    assert (fout);
+
+    inpos = 0;
+    outpos = 0;
+
+#if 1
+    for (inpos = 0; ; inpos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        else
+        {
+            rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+            if (rc)
+            {
+                PLOGERR (klogErr,
+                         (klogErr, rc,
+                          "Failed to read from file $(F) at $(P)",
+                          "F=%s,P=%lu", src, inpos));
+                break;
+            }
+            else if (num_read)
+            {
+                size_t num_writ;
+
+                rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                else if (num_writ != num_read)
+                {
+                    rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write all to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+            }
+            else 
+                break;
+        }
+    }
+#else
+    do
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", src, inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc)
+            break;
+    } while (num_read != 0);
+#endif
+    return rc;
+}
+
+
+static
+rc_t nenctest (const char * srcstr, const char * dststr, bool force)
+{
+    VFSManager * mgr;
+    rc_t rc;
+
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to create file system manager");
+    else
+    {
+        VPath * srcpath;
+
+        rc = VFSManagerMakePath (mgr, &srcpath, "%s", srcstr);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "Failed to parse source path '$(path)'",
+                      "path=%s", srcstr));
+        else
+        {
+            VPath * dstpath;
+
+            rc = VFSManagerMakePath (mgr, &dstpath, "%s", dststr);
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr, rc, "Failed to parse destination path '$(path)'",
+                          "path=%s", dststr));
+            else
+            {
+                const KFile * srcfile;
+
+                rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "Failed to open source path '$(path)'",
+                              "path=%s", srcstr));
+                else
+                {
+                    KFile * dstfile;
+
+                    rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+                                               kcmParents | (force ? kcmInit : kcmCreate),
+                                               dstpath);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "failed to open destination path '$(path)'",
+                                  "path=%s", dststr));
+                    else
+                    {
+                        rc = copy_file (srcstr, dststr, srcfile, dstfile);
+                        if (rc)
+                        {
+                            PLOGERR (klogErr,
+                                     (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+                                      "S=%s,D=%s", srcstr, dststr));
+
+                            VFSManagerRemove (mgr, true, dstpath);
+                        }
+
+                        KFileRelease (dstfile);
+                    }
+                    KFileRelease (srcfile);
+                }
+                VPathRelease (dstpath);
+            }
+            VPathRelease (srcpath);
+        }
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        bool force;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+        else
+        {
+            force = (pcount > 0);
+ 
+            rc = ArgsOptionCount (args, OPTION_CIPHER, &pcount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to examine cipher option");
+            else
+            {
+                if (pcount)
+                {
+                    const char * value;
+
+                    rc = ArgsOptionValue (args, OPTION_CIPHER, 0, (const void **)&value);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to examine cipher value");
+                    else
+                    {
+                        if (value[1])
+                            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                        else
+                            switch (value[0])
+                            {
+                            case '0':
+                            case '1':
+                            case '2':
+                            case '3':
+                                KCipherSubType = value[0] - '0';
+                                break;
+                            default:
+                                rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                                break;
+                            }
+                        if (rc)
+                            LOGERR (klogErr, rc, "bad value for cipher implmentation");
+                    }
+                }
+                if (rc == 0)
+                {
+                    rc = ArgsParamCount (args, &pcount);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to count parameters");
+                    else
+                    {
+                        if (pcount != 2)
+                            MiniUsage (args);
+                        else
+                        {
+                            const char * src;
+
+                            rc = ArgsParamValue (args, 0, (const void **)&src);
+                            if (rc)
+                                LOGERR (klogInt, rc, "failed to get source parameter");
+                            else
+                            {
+                                const char * dst;
+                                rc = ArgsParamValue (args, 1, (const void **)&dst);
+                                if (rc)
+                                    LOGERR (klogInt, rc, "failed to get destination parameter");
+                                else
+                                {
+                                    rc = nenctest (src, dst, force);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        ArgsWhack (args);
+    }
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/nenctool/nenctool.c b/tools/nenctool/nenctool.c
new file mode 100644
index 0000000..985a9ac
--- /dev/null
+++ b/tools/nenctool/nenctool.c
@@ -0,0 +1,435 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+#define OPTION_FORCE   "force"
+#define ALIAS_FORCE   "f"
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, force_usage,   0, false, false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <source-file-path> <destination-file-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Copy a file from the first parameter to the second parameter\n"
+        "  Encryption, decryption, or re-encryption are the expected purpose.\n"
+        "\n", progname);
+}
+
+static
+const char * first_usage[] = 
+{
+    "The path to a file either in native format",
+    NULL
+};
+
+static
+const char * second_usage[] = 
+{
+    "in 'file' URI scheme or in 'ncbi-file'",
+    "URI scheme.",
+    "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+    "where 'enc' or 'encrypt' means the file is encrypted",
+    "and 'pwfile=<path>' points to a file to get the password",
+    "or 'pwfd=<fd>' refers to a file descriptor from which to",
+    "read a password.",
+    NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("source-file-path", first_usage);
+    HelpParamLine ("destination-file-path", second_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+
+    HelpOptionsStandard ();
+
+    OUTMSG (("\n"
+             "ncbi-file uri syntax:\n"
+             "  'ncbi-file' uris are based on a combination of the standard\n"
+             "  'file' and 'http' syntax familiar to browser users.\n"
+             "  Enclosing questions marks are probably necessary.\n"
+             "\n"
+             "  URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+             "  scheme:\n"
+             "    ncbi-file\n"
+             "  hierarchical-part:\n"
+             "    this is the same as for scheme file and can be the native form or\n"));
+    OUTMSG (("    the ncbi 'posix' format that matches most flavors of Unix.\n"
+             "    Environment variables and short hands such as '~' are not interpreted.\n"
+             "  query:\n"
+             "    Zero or two symbols separated by the '&'.  The whole query can be omitted.\n"
+             "      enc or encrypt\n"
+             "      pwfile='path to a file containing a password'\n"
+             "      pwfd='file descriptor where the password can be read'\n"
+             "    If the encrypt is present exactly one of the other two must be present.\n"
+             "  fragment:\n"
+             "    No fragment is permitted.\n"));
+    OUTMSG (("\n"
+             "password contents:\n"
+             "  The file or file descriptor containing the password is read enough to satisfy\n"
+             "  the following restriction.  The password is terminated by the end of file,\n"
+             "  a carriage return or a line feed.  The length must be no more than 4096 bytes.\n"
+             "  The password file should have limited read access to protect it.\n"));
+
+
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To encrypt a create a file named 'example' with a password from a file\n"
+             "  named 'password-file' to a file named 'example.nenc' all in the current\n"
+             "  directory:\n"
+             "\n"
+             "  $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+             progname));
+    OUTMSG (("\n"
+             "  To decrypt a file named 'example.nenc' with a password from a file\n"
+             "  named 'password-file' to a file named 'example' in directories implied\n"
+             "  in the command:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+             progname));
+    OUTMSG (("\n"
+             "  To change the encryption of a file from one password to another:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+             "         \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+             progname));
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+
+    assert (src);
+    assert (dst);
+    assert (fin);
+    assert (fout);
+
+    inpos = 0;
+    outpos = 0;
+
+#if 1
+    for (inpos = 0; ; inpos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        else
+        {
+            rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+            if (rc)
+            {
+                PLOGERR (klogErr,
+                         (klogErr, rc,
+                          "Failed to read from file $(F) at $(P)",
+                          "F=%s,P=%lu", src, inpos));
+                break;
+            }
+            else if (num_read)
+            {
+                size_t num_writ;
+
+                rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                else if (num_writ != num_read)
+                {
+                    rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write all to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+            }
+            else 
+                break;
+        }
+    }
+#else
+    do
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", src, inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc)
+            break;
+    } while (num_read != 0);
+#endif
+    return rc;
+}
+
+
+static
+rc_t nenctool (const char * srcstr, const char * dststr, bool force)
+{
+    VFSManager * mgr;
+    rc_t rc;
+
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to create file system manager");
+    else
+    {
+        VPath * srcpath;
+
+        rc = VFSManagerMakePath (mgr, &srcpath, "%s", srcstr);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "Failed to parse source path '$(path)'",
+                      "path=%s", srcstr));
+        else
+        {
+            VPath * dstpath;
+
+            rc = VFSManagerMakePath (mgr, &dstpath, "%s", dststr);
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr, rc, "Failed to parse destination path '$(path)'",
+                          "path=%s", dststr));
+            else
+            {
+                const KFile * srcfile;
+
+                rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "Failed to open source path '$(path)'",
+                              "path=%s", srcstr));
+                else
+                {
+                    KFile * dstfile;
+
+                    rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+                                               kcmParents | (force ? kcmInit : kcmCreate),
+                                               dstpath);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "failed to open destination path '$(path)'",
+                                  "path=%s", dststr));
+                    else
+                    {
+                        rc = copy_file (srcstr, dststr, srcfile, dstfile);
+                        if (rc)
+                        {
+                            PLOGERR (klogErr,
+                                     (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+                                      "S=%s,D=%s", srcstr, dststr));
+
+                            VFSManagerRemove (mgr, true, dstpath);
+                        }
+
+                        KFileRelease (dstfile);
+                    }
+                    KFileRelease (srcfile);
+                }
+                VPathRelease (dstpath);
+            }
+            VPathRelease (srcpath);
+        }
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        bool force;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+        else
+        {
+            force = (pcount > 0);
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to count parameters");
+            else
+            {
+                if (pcount != 2) {
+                    MiniUsage (args);
+                    rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcInsufficient);
+                }
+                else
+                {
+                    const char * src;
+
+                    rc = ArgsParamValue (args, 0, (const void **)&src);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to get source parameter");
+                    else
+                    {
+                        const char * dst;
+                        rc = ArgsParamValue (args, 1, (const void **)&dst);
+                        if (rc)
+                            LOGERR (klogInt, rc, "failed to get destination parameter");
+                        else
+                        {
+                            rc = nenctool (src, dst, force);
+                        }
+                    }
+                }
+            }
+        }
+        ArgsWhack (args);
+    }
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/nencvalid/Makefile b/tools/nencvalid/Makefile
new file mode 100644
index 0000000..606062f
--- /dev/null
+++ b/tools/nencvalid/Makefile
@@ -0,0 +1,88 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/nencvalid
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	nencvalid
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# nencvalid
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCVALID_SRC = \
+	nencvalid
+
+NENCVALID_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCVALID_SRC))
+
+NENCVALID_LIB = \
+	-lkapp \
+	-ltk-version \
+	-lvfs \
+	-lkns \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkq \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nencvalid: $(NENCVALID_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(NENCVALID_LIB)
+
+
+
+
diff --git a/tools/nencvalid/nencvalid.c b/tools/nencvalid/nencvalid.c
new file mode 100644
index 0000000..bcd9391
--- /dev/null
+++ b/tools/nencvalid/nencvalid.c
@@ -0,0 +1,593 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/out.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#define OPTION_DECRYPT_BIN_COMPATIBILITY "compatibility-mode"
+/* "decrypt.bin" */
+
+static
+OptDef Options[] = 
+{
+    /* private option for decrypt.bin script */
+    { OPTION_DECRYPT_BIN_COMPATIBILITY, NULL,        NULL, NULL,        0, false, false }
+};
+
+enum CompatibilityModeExitCode
+{
+    CMEC_NO_ERROR = 0,
+    CMEC_BAD_TYPE = 100,
+    CMEC_BAD_HEADER = 101,
+    CMEC_TRUNCATED = 102,
+    CMEC_EXCESS = 103,
+    CMEC_NO_CHECKSUM = 104,
+    CMEC_NO_PASSWORD = 105,
+    CMEC_BAD_CHECKSUM = 106
+};
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <file-path> [ <file-path> ...]\n"
+        "\n"
+        "Summary:\n"
+        "  Validate the consistency of NCBI format encrypted files\n"
+        "\n", progname);
+}
+
+static
+const char * param_usage[] = 
+{
+    "A file in an NCBI encrypted file format.", 
+    "The first version encrypted file format",
+    "needs a password to validate the content",
+    "while the second version does not.  If the",
+    "ncbi-file uri format is used if you ask",
+    "file decryption (encrypt in the query)",
+    "the validation will be on the decrypted",
+    "file which might not be the intention.",
+    "The password if needed for validation will",
+    "have to be in the standard NCBI VDB",
+    "configuration as 'krypto/pwfile'.", NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("file-path", param_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+static rc_t wga_log_error (const char * path, rc_t rc, bool decrypt_bin_compatible)
+{
+    switch (GetRCObject(rc))
+    {
+    case rcSize:
+        switch (GetRCState(rc))
+        {
+        case rcExcessive:
+            if (decrypt_bin_compatible)
+                exit (CMEC_EXCESS);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "probably mis-concatenated file '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        case rcInsufficient:
+            if (decrypt_bin_compatible)
+                exit (CMEC_TRUNCATED);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "probably truncated file '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcChecksum:
+        switch (GetRCState(rc))
+        {
+        case rcInvalid:
+            if (decrypt_bin_compatible)
+                exit (CMEC_BAD_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        case rcNull:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents without password '$(P)'",
+                              "P=%s", path));
+            return 0;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcConstraint:
+        switch (GetRCState(rc))
+        {
+        case rcCorrupt:
+            if (decrypt_bin_compatible)
+                exit (CMEC_BAD_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcEncryption:
+        switch (GetRCState(rc))
+        {
+        case rcNull:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_PASSWORD);
+            LOGERR (klogWarn, rc, "length validated but content not checked without a password");
+            return 0;
+
+        case rcNotFound:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_CHECKSUM);
+            LOGERR (klogWarn, rc, "length validated but content not has no checksum");
+            return 0;
+
+        default:
+            break;
+        }
+        break;
+
+    default:
+        break;
+    }
+    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                      "with non-specified error file "
+                      "'$(P)'", "P=%s", path));
+    return rc;
+}
+
+static rc_t nencvalidWGAEncValidate (const char * path, const KFile * file, VFSManager * mgr, bool decrypt_bin_compatible)
+{
+    rc_t rc;
+    size_t pwz;
+    char   pw [8192];
+
+    rc = VFSManagerGetKryptoPassword (mgr, pw, sizeof (pw) - 1, &pwz);
+
+    if (rc) 
+    {
+        if (GetRCObject(rc) == rcEncryptionKey && GetRCState(rc) == rcNotFound)
+        {   /* krypto/pwfile not found in the configuration; will proceed without decryption */
+            LOGERR (klogWarn, rc, "no password file configured file content will not be validated");
+
+            /* configuration did not contain a password file so set it to nul */
+            pw[0] = '\0';
+            pwz = 0;
+            rc = 0;
+        }
+        else
+            LOGERR (klogInt, rc, "unable to read password file");
+    }
+
+    if (rc == 0)
+    {
+        rc = WGAEncValidate (file, pw, pwz);
+        if (rc)
+            rc =  wga_log_error (path, rc, decrypt_bin_compatible);
+    }
+    return rc;
+}
+
+
+/*
+ * do out thing on a single file name
+ */
+static
+rc_t HandleOneFile (VFSManager * mgr, const char * path, bool decrypt_bin_compatible)
+{
+    rc_t rc;
+    VPath * vpath;
+
+    rc = VFSManagerMakePath (mgr, &vpath, "%s", path);
+    if (rc)
+        PLOGERR (klogErr,
+                 (klogErr, rc, "failed to parse path "
+                  "parameter '$(P)'", "P=%s", path));
+
+    else
+    {
+        const KFile * file;
+
+        rc = VFSManagerOpenFileRead (mgr, &file, vpath);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "failed to parse path "
+                      "parameter '$(P)'", "P=%s", path));
+
+        else
+        {
+            size_t  buffread;
+            const KFile * buffile;
+
+            rc = KBufFileMakeRead (&buffile, file, 64*1024);
+            if (rc)
+                LOGERR (klogInt, rc, "unable to buffer file");
+            else
+            {
+                /* the two current encrypted file types have an 8 byte signature (magic(
+                 * at the beginning of the file.  If these 8 don't match we don't even call it
+                 * an encrypted file at all */
+                char buffer [8];
+
+                rc = KFileRead (buffile, 0, buffer, sizeof buffer, &buffread);
+                if (rc)
+                    LOGERR (klogInt, rc, "Unable to read file signature");
+                else
+                {
+                    if (buffread < sizeof buffer)
+                    {
+                        if (decrypt_bin_compatible)
+                            exit (CMEC_BAD_TYPE);
+                        else
+                        {
+                            rc = RC (rcExe, rcFile, rcValidating, rcHeader, rcWrongType);
+                            LOGERR (klogErr, rc, "File too short to be encrypted file");
+                        }
+                    }
+                    else
+                    {
+                        rc = KFileIsEnc (buffer, sizeof buffer);
+
+                        switch (GetRCState(rc))
+                        {
+                        case 0:
+                        case rcInsufficient:
+                            rc = KEncFileValidate (buffile);
+                            if (rc)
+                            {
+                                switch (GetRCObject(rc))
+                                {
+                                    /* unsuable header */
+                                case rcHeader:
+                                case rcByteOrder:
+                                    if (decrypt_bin_compatible)
+                                        exit (CMEC_BAD_HEADER);
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with a bad header file '$(P)'",
+                                                      "P=%s", path));
+                                    break;
+
+                                case rcFile:
+                                    switch (GetRCState(rc))
+                                    {
+                                        /* bad block count in the footer: guess it was a truncataiont
+                                         * an inconvienent point */
+                                    case rcCorrupt:
+                                        /* block read was neither a block nor a footer */
+                                    case rcInsufficient:
+                                        if (decrypt_bin_compatible)
+                                            exit (CMEC_TRUNCATED);
+                                        PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                          "probably truncated file '$(P)'",
+                                                          "P=%s", path));
+
+                                        break;
+                                    default:
+                                        PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                          "with non-specified error file "
+                                                          "'$(P)'", "P=%s", path));
+
+                                        break;
+                                    }
+                                    break;
+
+                                case rcCrc:
+                                    if (decrypt_bin_compatible)
+                                        exit (CMEC_BAD_CHECKSUM);
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with good length but bad checksum file "
+                                                      "'$(P)'", "P=%s", path));
+                                    break;
+
+                                default:
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with non-specified error file "
+                                                      "'$(P)'", "P=%s", path));
+                                    break;
+                                }
+                            }
+                            else
+                                STSMSG (1, ("validated file content and size for '%s'\n", path));
+                            break;
+
+                        case rcWrongType:
+                            rc = KFileIsWGAEnc (buffer, buffread);
+                            switch (GetRCState(rc))
+                            {
+                            case 0:
+                                rc = nencvalidWGAEncValidate (path, buffile, mgr, decrypt_bin_compatible);
+                                break;
+
+                            case rcWrongType:
+                                if (decrypt_bin_compatible)
+                                    exit (CMEC_BAD_TYPE);
+                                STSMSG (1, ("'%s' is not an encrypted file", path));
+                                break;
+
+                            default:
+                                break;
+                            }
+
+                        default:
+                            if (rc)
+                                PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                  "with non-specified error file "
+                                                  "'$(P)'", "P=%s", path));
+                            break;
+                        }
+                    }
+                }
+                KFileRelease (buffile);
+            }
+            KFileRelease (file);
+        }
+        VPathRelease (vpath);
+    }
+    if (rc)
+        STSMSG (1, ("failed validation '%s'", path));
+    else
+        STSMSG (1, ("passed validation '%s'", path));
+
+    return rc;
+}
+
+
+/*
+ * params are file names so retrienve them one by one and process them
+ */
+static __inline__
+rc_t HandleParams (VFSManager * mgr, Args * args, uint32_t pcount)
+{
+    rc_t rc;
+    rc_t orc;
+    uint32_t ix;
+
+    rc = orc = 0;
+    for (ix = 0; (ix < pcount); ++ix)
+    {
+        const char * pc;
+
+        rc = ArgsParamValue (args, ix, (const void **)&pc);
+        if (rc)
+            PLOGERR (klogErr, 
+                     (klogErr, rc, "failed to retrieve "
+                      "parameter '$(P)'", "P=%u", ix));
+        else
+        {
+            /*
+             * we will return rc but use orc to handle
+             * the return error code form the first found error on a parameter
+             * though we will continue to process all file parameters
+             */
+            orc = HandleOneFile (mgr, pc, false);
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * handle the command line options then handle the file name parameters
+ */
+static __inline__
+rc_t HandleOptions (Args * args)
+{
+    uint32_t pcount;
+    rc_t rc;
+
+    rc = ArgsParamCount (args, &pcount);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to count parameters");
+
+    else
+    {
+        if (pcount == 0) {
+            MiniUsage(args);
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+        }
+        else
+        {
+            uint32_t ocount;
+
+            rc = ArgsOptionCount (args, OPTION_QUIET, &ocount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to retrieve quiet option");
+
+            else
+            {
+                bool quiet;
+
+                quiet = (ocount != 0);
+
+                rc = ArgsOptionCount (args, OPTION_DECRYPT_BIN_COMPATIBILITY, &ocount);
+                if (rc)
+                    LOGERR (klogInt, rc, "failed to retrieve compatibility option");
+
+                else
+                {
+                    VFSManager * mgr;
+
+                    rc = VFSManagerMake (&mgr);
+                    if (rc)
+                        LOGERR (klogErr, rc, "failed to open file system manager");
+
+                    else
+                    {
+                        bool decrypt_bin_compatible;
+
+                        if (ocount == 0)
+                            decrypt_bin_compatible = false;
+
+                        else
+                            decrypt_bin_compatible = true;
+
+
+                        if (quiet)
+                        {
+                            KStsLevelSet (0);
+                            KLogLevelSet (0);
+                        }
+                        else if (!decrypt_bin_compatible)
+                        {
+                            if (KStsLevelGet() == 0)
+                                KStsLevelSet(1);
+                        }
+
+
+                        if (decrypt_bin_compatible)
+                        {
+                            if (pcount > 1)
+                            {
+                                rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                                LOGERR (0, rc, "compatibility mode can only handle one file parameter");
+                            }
+                            else
+                            {
+                                const char * pc;
+
+                                rc = ArgsParamValue (args, 0, (const void **)&pc);
+                                if (rc)
+                                    LOGERR (0, rc, "unable to retrieve file parameter");
+
+                                if (rc == 0)
+                                    rc = HandleOneFile (mgr, pc, true); 
+                            }
+                        }
+                        else
+                        {
+                            rc = HandleParams (mgr, args, pcount);
+                        }
+                    
+                        VFSManagerRelease (mgr);
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+ 
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (Options[0]) );
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        rc = HandleOptions (args);
+
+        ArgsWhack (args);
+    }
+    STSMSG (2,("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/ngs-pileup/Makefile b/tools/ngs-pileup/Makefile
new file mode 100644
index 0000000..b52f71d
--- /dev/null
+++ b/tools/ngs-pileup/Makefile
@@ -0,0 +1,82 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+
+MODULE = tools/ngs-pileup
+
+INT_TOOLS = \
+	ngs-pileup \
+
+EXT_TOOLS = \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# ngs-pileup
+#
+NGS_PILEUP_SRC = \
+	ngs-pileup    \
+	main \
+
+INCDIRS += -I $(TOP)/ngs/ngs-c++
+
+NGS_PILEUP_OBJ = \
+	$(addsuffix .$(OBJX),$(NGS_PILEUP_SRC))
+
+NGS_PILEUP_LIBS = \
+	-sncbi-ngs-c++    \
+	-sncbi-vdb-static \
+	-sngs-c++         \
+	-skapp \
+	-stk-version \
+    
+$(BINDIR)/ngs-pileup: $(NGS_PILEUP_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(NGS_PILEUP_LIBS)
+
diff --git a/tools/ngs-pileup/main.cpp b/tools/ngs-pileup/main.cpp
new file mode 100644
index 0000000..8a22a17
--- /dev/null
+++ b/tools/ngs-pileup/main.cpp
@@ -0,0 +1,152 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ngs-pileup.hpp"
+
+#include <ngs/ErrorMsg.hpp>
+
+#include <kapp/main.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+#include <string.h>
+
+#include <iostream>
+
+#define OPTION_REF     "aligned-region"
+#define ALIAS_REF      "r"
+const char * ref_usage[] = { "Filter by position on genome.",
+                             "Name can either be file specific or canonical",
+                             "(ex: \"chr1\" or \"1\").",
+                             "\"from\" and \"to\" are 1-based coordinates",
+                             NULL };
+                             
+OptDef options[] =
+{   /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_REF,     ALIAS_REF,     NULL, ref_usage,     0,        true,        false },
+};
+
+
+const char UsageDefaultName[] = "ngs-pileup";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [options]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+    KOutMsg ( "Options:\n" );
+   
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+    
+    return rc;
+}
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    Args * args;
+
+    rc_t rc = ArgsMakeAndHandle( &args, argc, argv, 1, options, sizeof options / sizeof options [ 0 ] );
+    if ( rc == 0 )
+    {
+        try
+        {
+            NGS_Pileup::Settings settings;
+            
+            uint32_t pcount;
+            
+            rc = ArgsOptionCount ( args, OPTION_REF, &pcount );
+            if ( pcount > 1 )
+            {
+                throw ngs :: ErrorMsg ( "multiple positions are not supported at this point" );
+            }
+            if ( pcount == 1 )
+            {
+                const void * value;
+                rc = ArgsOptionValue ( args, OPTION_REF, 0, & value );
+                if ( rc != 0 )
+                {
+                    throw ngs :: ErrorMsg ( "ArgsOptionValue (" OPTION_REF ") failed" );
+                }
+                settings . AddReference ( static_cast <char const*> (value) );
+            }
+            
+            rc = ArgsParamCount ( args, &pcount );
+            if ( rc == 0 )
+            {
+                if ( pcount > 1 )
+                {
+                    throw ngs :: ErrorMsg ( "multiple accessions are not supported at this point" );
+                }
+                
+                settings . output = & std::cout;
+                
+                void const *value;
+                rc = ArgsParamValue ( args, 0, &value );
+                if ( rc == 0 ) 
+                {
+                    settings . AddInput ( static_cast <char const*> (value) );
+                    
+                    NGS_Pileup ( settings ) . Run ();
+                }
+                else
+                {
+                    throw ngs :: ErrorMsg ( "ArgsParamValue failed" );
+                }
+            }
+        }
+        catch (ngs :: ErrorMsg& ex)
+        {
+            std :: cerr << "Program aborted: " << ex.what() << std::endl;
+            exit ( -1 );
+        }
+        
+        ArgsWhack( args );
+    }
+    
+    return 0;
+}
+
diff --git a/tools/ngs-pileup/ngs-pileup.cpp b/tools/ngs-pileup/ngs-pileup.cpp
new file mode 100644
index 0000000..fdee801
--- /dev/null
+++ b/tools/ngs-pileup/ngs-pileup.cpp
@@ -0,0 +1,206 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ngs-pileup.hpp"
+
+#include <iostream>
+
+#include <ngs/ncbi/NGS.hpp>
+#include <ngs/ReadCollection.hpp>
+#include <ngs/PileupIterator.hpp>
+
+using namespace std;
+
+struct NGS_Pileup::TargetReference
+{
+    typedef pair < int64_t, int64_t >       Slice;
+    typedef vector < Slice >                Slices;
+    typedef vector < ngs :: Reference >     Targets;
+    typedef vector < ngs :: PileupIterator> Pileups;
+    
+    string  m_canonicalName;
+    Slices  m_slices;
+    Targets m_targets;
+    Pileups m_pileups;
+    bool    m_complete;
+    
+    TargetReference ( ngs :: Reference p_ref )
+    : m_canonicalName ( p_ref . getCanonicalName() ), m_complete ( true )
+    {
+        AddReference ( p_ref );
+    }
+    TargetReference ( ngs :: Reference p_ref, 
+                      int64_t p_first, 
+                      int64_t p_last )
+    : m_canonicalName ( p_ref . getCanonicalName() ), m_complete ( false )
+    {
+        AddReference ( p_ref );
+    }
+    ~TargetReference ()
+    {
+    }
+    
+    void AddSlice ( int64_t p_first, int64_t p_last )
+    {
+    }
+    void MakeComplete ()
+    {
+        m_complete = true;
+        m_slices . clear();
+    }
+    
+    void AddReference ( ngs :: Reference p_ref )
+    {
+        m_targets. push_back ( p_ref );
+    }
+    
+    void Process ( ostream& out )
+    {
+        int64_t firstPos = 0;
+        int64_t lastPos = m_targets . front () . getLength () - 1;
+
+        // create pileup iterators 
+        for ( Targets::iterator i = m_targets.begin(); i != m_targets.end(); ++i ) 
+        {
+            m_pileups . push_back ( i -> getPileups ( ngs::Alignment::all ) );
+        }
+        
+        int64_t curPos = firstPos;
+        while ( curPos <= lastPos ) 
+        {
+            uint32_t total_depth = 0;
+            for ( Pileups :: iterator i = m_pileups . begin (); i != m_pileups. end (); ++i )
+            {
+                bool next = i -> nextPileup ();
+                assert ( next );
+                total_depth += i -> getPileupDepth ();
+            }
+        
+            if ( total_depth > 0 )
+            {
+                out << m_canonicalName
+                    << '\t' << ( curPos + 1 ) // convert to 1-based position to emulate samtools
+                    << '\t' << total_depth
+                    << endl;
+            }
+            
+            ++ curPos;
+        }
+    }
+};
+
+class NGS_Pileup::TargetReferences : public vector < TargetReference >
+{
+public :
+    void AddComplete ( ngs :: Reference ref )
+    {
+        string name = ref . getCanonicalName ();
+        for ( iterator i = begin(); i != end (); ++ i )
+        {   
+            if ( i -> m_canonicalName == name )
+            {
+                i -> AddReference ( ref );
+                return;
+            }
+        }
+        // not found - add new reference
+        push_back ( TargetReference ( ref ) );
+    }
+};
+ 
+NGS_Pileup::NGS_Pileup ( const Settings& p_settings )
+: m_settings( p_settings )
+{
+}
+
+static
+bool FindReference ( const NGS_Pileup :: Settings :: References & requested, const ngs :: Reference & ref )
+{
+    for ( NGS_Pileup :: Settings :: References :: const_iterator i = requested . begin(); 
+          i != requested . end (); 
+          ++i )
+    {   
+        if ( i->m_name == ref . getCanonicalName () || i->m_name == ref . getCommonName () )
+        {
+            return true;
+        }
+    }
+    return false;
+}
+    
+void 
+NGS_Pileup::Run () const
+{
+    TargetReferences references;
+    
+    // build the set of target references
+    for ( Settings :: Inputs :: const_iterator i = m_settings . inputs . begin(); 
+          i != m_settings . inputs . end (); 
+          ++i )
+    {   
+        ngs :: ReadCollection col = ncbi :: NGS :: openReadCollection ( *i );
+        ngs :: ReferenceIterator refIt = col . getReferences ();
+        while ( refIt . nextReference () )
+        {
+            if ( m_settings . references . empty () ) // all references requested
+            {
+                /* need to create a Reference object that is not attached to the iterator, so as
+                    it is not invalidated on the next call to refIt.NextReference() */
+                references . AddComplete ( col . getReference ( refIt. getCommonName () ) );
+            }
+            else if ( FindReference ( m_settings . references, refIt ) )
+            {
+                //TODO: handle slices
+                references . AddComplete ( col . getReference ( refIt. getCommonName () ) );
+            }
+        }
+    }
+    
+    ostream & out ( m_settings . output != (ostream*)0 ? * m_settings . output : cout );
+    
+    // walk the references and output pileups
+    for ( TargetReferences :: iterator i = references . begin(); i != references . end (); ++i )
+    {   
+        i -> Process ( out );
+    }
+}
+
+//// NGS_Pileup::Settings
+
+void 
+NGS_Pileup::Settings::AddReference ( const string& commonOrCanonicalName ) 
+{
+    references . push_back ( ReferenceSlice ( commonOrCanonicalName ) ); 
+}
+
+void 
+NGS_Pileup::Settings::AddReferenceSlice ( const string& commonOrCanonicalName, 
+                                        int64_t firstPos, 
+                                        int64_t lastPos )
+{ 
+    references . push_back ( ReferenceSlice ( commonOrCanonicalName, firstPos, lastPos ) ); 
+}
+
diff --git a/tools/ngs-pileup/ngs-pileup.hpp b/tools/ngs-pileup/ngs-pileup.hpp
new file mode 100644
index 0000000..0fb7a37
--- /dev/null
+++ b/tools/ngs-pileup/ngs-pileup.hpp
@@ -0,0 +1,97 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _sra_tools_hpp_ngs_pileup_
+#define _sra_tools_hpp_ngs_pileup_
+
+#include <klib/defs.h>
+
+#include <string>
+#include <vector>
+
+namespace ngs
+{
+    class Reference;
+}
+
+class NGS_Pileup
+{
+public:
+    struct Settings
+    {
+        struct ReferenceSlice
+        {
+            ReferenceSlice( const std::string& p_name ) /* entire reference */
+            :   m_name ( p_name ), 
+                m_firstPos ( 0 ),
+                m_lastPos ( 0 ),
+                m_full ( true )
+            {
+            }
+            ReferenceSlice( const std::string& p_name, 
+                            int64_t p_firstPos, 
+                            int64_t p_lastPos )
+            :   m_name ( p_name ), 
+                m_firstPos ( p_firstPos ),
+                m_lastPos ( p_lastPos ),
+                m_full ( false )
+            {
+            }
+            
+            std::string m_name;
+            int64_t     m_firstPos; 
+            int64_t     m_lastPos;
+            bool        m_full;
+        };
+        
+        void AddInput ( const std::string& accession ) { inputs . push_back ( accession ); }
+        void AddReference ( const std::string& commonOrCanonicalName );
+        void AddReferenceSlice ( const std::string& commonOrCanonicalName, 
+                                 int64_t firstPos, 
+                                 int64_t lastPos );
+                                 
+                                 
+        typedef std::vector < std::string > Inputs;
+        typedef std::vector < ReferenceSlice > References;
+        
+        Inputs inputs;
+        std::ostream* output;
+        References references;
+    };
+    
+public:
+    NGS_Pileup ( const Settings& p_settings );
+    
+    void Run () const;
+    
+private:
+    struct TargetReference;
+    class TargetReferences;
+    
+    Settings            m_settings;
+};
+
+#endif
diff --git a/tools/pacbio-load/.gitignore b/tools/pacbio-load/.gitignore
new file mode 100644
index 0000000..e40acaf
--- /dev/null
+++ b/tools/pacbio-load/.gitignore
@@ -0,0 +1,7 @@
+*.vers.h
+*.bin
+*.txt
+*.sh
+*.h5
+dst
+pacbio1
diff --git a/tools/pacbio-load/Makefile b/tools/pacbio-load/Makefile
new file mode 100644
index 0000000..5c0d4d4
--- /dev/null
+++ b/tools/pacbio-load/Makefile
@@ -0,0 +1,117 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/pacbio-load
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	pacbio-load
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# where to find hdf5 libs
+#
+ifdef NCBI
+ifeq (dbg,$(BUILD))
+	LIBHDF5_LPATH = $(NCBI)/hdf5/Debug/lib
+else
+	LIBHDF5_LPATH = $(NCBI)/hdf5/Release/lib
+endif
+endif
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (1,$(HAVE_HDF5))
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built:"                          \
+	       "It requires our internal library 'libkdf5'"             \
+	       "which requires 'libhdf5' and its development headers."
+endif
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-copy
+#  vdb copy tool
+#
+PACBIO_LOAD_SRC = \
+	pl-context \
+	pl-tools \
+	pl-zmw \
+	pl-basecalls_cmn \
+	pl-sequence \
+	pl-consensus \
+	pl-passes \
+	pl-metrics \
+	pl-regions \
+	pl-progress \
+	pacbio-load
+
+PACBIO_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(PACBIO_LOAD_SRC))
+
+PACBIO_LOAD_LIB = \
+	-skapp \
+	-stk-version \
+	-skdf5 \
+	-sload \
+	-shdf5 \
+	-sncbi-wvdb \
+	-sm \
+
+ifdef HDF5_LIBDIR
+	PACBIO_LOAD_LIB += $(addprefix -L,$(HDF5_LIBDIR))
+endif
+
+$(BINDIR)/pacbio-load: $(PACBIO_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(PACBIO_LOAD_LIB)
diff --git a/tools/pacbio-load/pacbio-load.c b/tools/pacbio-load/pacbio-load.c
new file mode 100644
index 0000000..ef9b14e
--- /dev/null
+++ b/tools/pacbio-load/pacbio-load.c
@@ -0,0 +1,650 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data", the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties", express or implied", including
+*  warranties of performance", merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-context.h"
+#include "pl-tools.h"
+#include "pl-zmw.h"
+#include "pl-basecalls_cmn.h"
+#include "pl-sequence.h"
+#include "pl-consensus.h"
+#include "pl-passes.h"
+#include "pl-metrics.h"
+
+#include <klib/out.h>
+#include <klib/namelist.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kdb/meta.h>
+#include <kdb/database.h>
+
+#include <vdb/vdb-priv.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <sra/sraschema.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-meta.h>
+
+#include <hdf5/kdf5.h>
+
+#include <kfs/arrayfile.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+const char UsageDefaultName[] = "pacbio-load";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    OUTMSG ( ("\n"
+        "Usage:\n"
+        "  %s <hdf5-file> -o<target>\n"
+        "\n", progname) );
+    return 0;
+}
+
+static const char* schema_usage[] = { "schema-name to be used", NULL };
+static const char* output_usage[] = { "target to be created", NULL };
+static const char* force_usage[] = { "forces an existing target to be overwritten", NULL };
+static const char* tabs_usage[] = { "load only these tabs (SCPM), dflt=all", 
+                                     " S...Sequence",
+                                     " C...Consensus", 
+                                     " P...Passes", 
+                                     " M...Metrics", NULL };
+static const char* progress_usage[] = { "show load-progress", NULL };
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine ( ALIAS_OUTPUT, OPTION_OUTPUT, "output", output_usage );
+
+    HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
+    HelpOptionLine ( ALIAS_FORCE, OPTION_FORCE, "force", force_usage );
+    HelpOptionLine ( ALIAS_TABS, OPTION_TABS, "tabs", tabs_usage );
+    HelpOptionLine ( ALIAS_WITH_PROGRESS, OPTION_WITH_PROGRESS, 
+                     "load-progress", progress_usage );
+    XMLLogger_Usage();
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+    return rc;
+}
+
+static bool pacbio_is_schema_dflt( const char * schema )
+{
+    size_t asize = string_size ( schema );
+    size_t bsize = string_size ( DFLT_SCHEMA );
+    uint32_t max_chars = ( asize > bsize ) ? asize : bsize;
+    return ( string_cmp ( schema, asize, DFLT_SCHEMA, bsize, max_chars ) == 0 );
+}
+
+
+static rc_t pacbio_extract_path( const KDirectory *dir, const char *schema_name,
+                                 char * dst, size_t dst_len )
+{
+    rc_t rc = KDirectoryResolvePath ( dir, true, dst, dst_len, "%s", schema_name );
+    if ( rc != 0 )
+        PLOGERR( klogErr, ( klogErr, rc, "cannot resolve path to schema-file '$(name)'",
+                            "name=%s", schema_name ));
+    else
+    {
+        char *ptr = strrchr ( dst, '/' );
+        if ( ptr == 0 )
+        {
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+            PLOGERR( klogErr, ( klogErr, rc, "cannot extract the path of '$(name)'",
+                                "name=%s", schema_name ));
+        }
+        else
+            *ptr = 0;
+    }
+    return rc;
+}
+
+
+static rc_t pacbio_load_schema( KDirectory * wd, VDBManager * vdb_mgr, VSchema ** schema, const char * schema_name )
+{
+    rc_t rc;
+
+    if ( pacbio_is_schema_dflt( schema_name ) )
+    {
+        rc = VDBManagerMakeSRASchema ( vdb_mgr, schema );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot create sra-schema" );
+
+        if ( rc == 0 )
+        {
+            rc = VSchemaParseFile ( *schema, "%s", schema_name );
+            if ( rc != 0 )
+                PLOGERR( klogErr, ( klogErr, rc, "cannot parse schema file '$(schema)'",
+                                    "schema=%s", schema_name ) );
+        }
+    }
+    else
+    {
+        rc = VDBManagerMakeSchema ( vdb_mgr, schema );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot create sra-schema" );
+        else
+        {
+            char path[ 4096 ];
+            rc = pacbio_extract_path( wd, schema_name, path, sizeof path );
+            if ( rc == 0 )
+            {
+                rc = VSchemaAddIncludePath ( *schema, "%s", path );
+                if ( rc != 0 )
+                    PLOGERR( klogErr, ( klogErr, rc, "cannot add schema-include-path '$(path)'",
+                                        "path=%s", path ) );
+                else
+                {
+                    rc = VSchemaParseFile ( *schema, "%s", schema_name );
+                    if ( rc != 0 )
+                        PLOGERR( klogErr, ( klogErr, rc, "cannot parse schema file '$(schema)'",
+                                            "schema=%s", schema_name ) );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t pacbio_meta_entry( VDatabase * db, const char * toolname )
+{
+    KMetadata* meta = NULL;
+    rc_t rc = VDatabaseOpenMetadataUpdate( db, &meta );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "Cannot open database-metadata" );
+    }
+    else
+    {
+        KMDataNode *node = NULL;
+
+        rc = KMetadataOpenNodeUpdate( meta, &node, "/" );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "Cannot open database-metadata-root" );
+        }
+        else
+        {
+            rc = KLoaderMeta_Write( node, toolname, __DATE__, "PacBio HDF5", KAppVersion() );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "Cannot write pacbio metadata node" );
+            }
+            KMDataNodeRelease( node );
+        }
+        KMetadataRelease( meta );
+    }
+    return rc;
+}
+
+
+/* the context that has the context of all 4 sub-tables (SEQUENCE,CONSENSU,PASSES,METRICS) */
+typedef struct seq_con_pas_met
+{
+    seq_ctx sequence;       /* from pl-sequence.h */
+    con_ctx consensus;      /* from pl-consensus.h */
+    pas_ctx passes;         /* from pl-passes.h */
+    met_ctx metrics;        /* from pl-metrics.h */
+} seq_con_pas_met;
+
+
+/* we have to pass in the first hdf5-source, because prepare of sequences needs it */
+static rc_t pacbio_prepare( VDatabase * database, seq_con_pas_met * dst, KDirectory * first_src, ld_context *lctx )
+{
+    rc_t rc;
+
+    dst->sequence.cursor = NULL;
+    dst->consensus.cursor = NULL;
+    dst->passes.cursor = NULL;
+    dst->metrics.cursor = NULL;
+
+    rc = prepare_seq( database, &dst->sequence, first_src, lctx ); /* pl-sequence.c */
+    if ( rc == 0 )
+        rc = prepare_consensus( database, &dst->consensus, lctx ); /* pl-consensus.c */
+    if ( rc == 0 )
+        rc = prepare_passes( database, &dst->passes, lctx ); /* pl-passes.c */
+    if ( rc == 0 )
+        rc = prepare_metrics( database, &dst->metrics, lctx ); /* pl-metrics.c */
+    return rc;
+}
+
+
+static rc_t pacbio_load_src( context *ctx, seq_con_pas_met * dst, KDirectory * src, bool * consensus_present )
+{
+    rc_t rc1, rc = 0;
+
+    if ( ctx_ld_sequence( ctx ) )
+        rc = load_seq_src( &dst->sequence, src ); /* pl-sequence.c */
+
+    if ( rc == 0 && ctx_ld_consensus( ctx ) )
+    {
+        rc1 = load_consensus_src( &dst->consensus, src ); /* pl-consensus.c */
+        if ( rc1 == 0 )
+            *consensus_present = true;
+        else
+            LOGMSG( klogWarn, "the consensus-group is missing" );
+    }
+
+    if ( rc == 0 && ctx_ld_passes( ctx ) && *consensus_present )
+    {
+        rc1 = load_passes_src( &dst->passes, src ); /* pl-passes.c */
+        if ( rc1 != 0 )
+            LOGMSG( klogWarn, "the passes-table is missing" );
+    }
+
+    if ( rc == 0 && ctx_ld_metrics( ctx ) && *consensus_present )
+    {
+        rc1 = load_metrics_src( &dst->metrics, src ); /* pl-metrics.c */
+        if ( rc1 != 0 )
+            LOGMSG( klogWarn, "the metrics-table is missing" );
+    }
+    return rc;
+}
+
+
+static rc_t pacbio_finish( seq_con_pas_met * dst )
+{
+    rc_t rc = finish_seq( &dst->sequence ); /* pl-sequence.c */
+    if ( rc == 0 )
+        rc = finish_consensus( &dst->consensus ); /* pl-consensus.c */
+    if ( rc == 0 )
+        rc = finish_passes( &dst->passes ); /* pl-passes.c */
+    if ( rc == 0 )
+        rc = finish_metrics( &dst->metrics ); /* pl-metrics.c */
+    return rc;
+}
+
+
+static rc_t pacbio_get_hdf5_src( KDirectory * wd, const VNamelist * path_list, uint32_t idx, KDirectory ** hdf5_src )
+{
+    const char * src_path;
+    rc_t rc = VNameListGet ( path_list, idx, &src_path );
+    if ( rc == 0 && src_path != NULL )
+    {
+        rc = MakeHDF5RootDir ( wd, hdf5_src, false, src_path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc, "cannot open hdf5-source-file '$(srcfile)'",
+                                "srcfile=%s", src_path ) );
+        }
+    }
+    return rc;
+}
+
+
+static bool pacbio_has_MultiParts( KDirectory * hdf5_src )
+{
+    uint32_t pt = KDirectoryPathType ( hdf5_src, "MultiPart/Parts" );
+    return ( pt == kptDataset );
+}
+
+
+static rc_t pacbio_get_MultiParts( KDirectory * hdf5_src, VNamelist * parts )
+{
+    struct KFile const *f;      /* the fake "file" from a HDF5-dir */
+    rc_t rc = KDirectoryOpenFileRead ( hdf5_src, &f, "MultiPart/Parts" );
+    if ( rc == 0 )
+    {
+        struct KArrayFile *af;      /* the arrayfile made from f */
+        rc = MakeHDF5ArrayFile ( f, &af );
+        if ( rc == 0 )
+        {
+            uint8_t dimensionality;
+            rc = KArrayFileDimensionality ( af, &dimensionality );
+            if ( rc == 0 && dimensionality == 1 )
+            {
+                uint64_t extents[ 1 ];
+                rc = KArrayFileDimExtents ( af, dimensionality, extents );
+                if ( rc == 0 )
+                {
+                    uint64_t pos[ 1 ];
+                    for ( pos[ 0 ] = 0; pos[ 0 ] < extents[ 0 ] && rc == 0; pos[ 0 ] += 1 )
+                    {
+                        char buffer[ 1024 ];
+                        uint64_t num_read;
+                        rc = KArrayFileRead_v ( af, 1, pos, buffer, sizeof buffer, &num_read );
+                        if ( rc == 0 )
+                            rc = VNamelistAppend ( parts, buffer );
+                    }
+                }
+            }
+            KArrayFileRelease( af );
+        }
+        KFileRelease( f );
+    }
+    return rc;
+}
+
+
+static rc_t pacbio_load_multipart( context * ctx, KDirectory * wd, VDatabase * database,
+                                   KDirectory ** hdf5_src, bool * consensus_present, 
+                                   ld_context * lctx, uint32_t count )
+{
+    seq_con_pas_met dst;
+    uint32_t idx = 0;
+    /* the loop is complicated, because pacbio_prepare needs the first hdf5-src opened ! */
+    rc_t rc = pacbio_prepare( database, &dst, *hdf5_src, lctx );
+    while ( idx < count && rc == 0 )
+    {
+        rc = pacbio_load_src( ctx, &dst, *hdf5_src, consensus_present );
+        idx++;
+        if ( rc == 0 && idx < count )
+        {
+            KDirectoryRelease ( *hdf5_src );
+            rc = pacbio_get_hdf5_src( wd, ctx->src_paths, idx, hdf5_src );
+        }
+    }
+    pacbio_finish( &dst );
+    KDirectoryRelease ( *hdf5_src );
+    return rc;
+}
+
+
+static rc_t add_unique_to_namelist( const VNamelist * src, VNamelist * dst, int32_t idx )
+{
+    const char * s;
+    rc_t rc = VNameListGet( src, idx, &s );
+    if ( rc == 0 && s != NULL && s[ 0 ] != 0 )
+    {
+        uint32_t found;
+        rc_t rc2 = VNamelistIndexOf( dst, s, &found );
+        if ( GetRCState( rc2 ) == rcNotFound )
+            rc = VNamelistAppend( dst, s );
+    }
+    return rc;
+}
+
+static rc_t pacbio_load( context *ctx, KDirectory * wd, ld_context *lctx, const char * toolname )
+{
+    VDBManager * vdb_mgr = NULL;
+    VSchema * schema = NULL;
+    VDatabase * database = NULL;
+
+    rc_t rc = VDBManagerMakeUpdate ( &vdb_mgr, wd );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "cannot create vdb-update-manager" );
+    }
+
+    if ( rc == 0 )
+        rc = pacbio_load_schema( wd, vdb_mgr, &schema, ctx->schema_name );
+
+
+    /* creates the output vdb database */
+    if ( rc == 0 )
+    {
+        KCreateMode cmode = kcmMD5 | kcmParents;
+        if ( ctx->force )
+            cmode |= kcmInit;
+        else
+            cmode |= kcmCreate;
+        rc = VDBManagerCreateDB( vdb_mgr, &database, schema, 
+                                 PACBIO_SCHEMA_DB, cmode, "%s", ctx->dst_path );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "cannot create output-database '$(dst)'",
+                                "dst=%s", ctx->dst_path ) );
+    }
+
+
+    /* creates the 4 output vdb tables... SEQUENCE, CONSENSUS, PASSES and METRICS */
+    if ( rc == 0 )
+    {
+        bool consensus_present = false;    
+        VNamelist * to_process;
+        rc = VNamelistMake ( &to_process, 5 );
+        if ( rc == 0 )
+        {
+            KDirectory * hdf5_src;
+            uint32_t count, idx;
+
+            rc = VNameListCount ( ctx->src_paths, &count );
+            for ( idx = 0; rc == 0 && idx < count; ++idx )
+            {
+                rc = pacbio_get_hdf5_src( wd, ctx->src_paths, 0, &hdf5_src );
+                if ( rc == 0 )
+                {
+                    if ( pacbio_has_MultiParts( hdf5_src ) )
+                    {
+                        VNamelist * parts;
+                        rc = VNamelistMake ( &parts, 5 );
+                        if ( rc == 0 )
+                        {
+                            rc = pacbio_get_MultiParts( hdf5_src, parts );
+                            if ( rc == 0 )
+                            {
+                                uint32_t p_count, p_idx;                            
+                                rc = VNameListCount ( parts, &p_count );
+                                for ( p_idx = 0; rc == 0 && p_idx < p_count; ++p_idx )
+                                    rc = add_unique_to_namelist( parts, to_process, p_idx );
+                            }
+                            VNamelistRelease ( parts );
+                        }
+                    }
+                    else
+                        rc = add_unique_to_namelist( ctx->src_paths, to_process, idx );
+                    KDirectoryRelease( hdf5_src );
+                }
+            }
+            VNamelistRelease ( ctx->src_paths );
+            ctx->src_paths = to_process;
+            
+            if ( rc == 0 )
+            {
+                rc = VNameListCount ( ctx->src_paths, &count );
+                if ( rc == 0 && count > 0 )
+                {
+                    ctx_show( ctx );
+                    rc = pacbio_get_hdf5_src( wd, ctx->src_paths, 0, &hdf5_src );
+                    if ( rc == 0 )
+                        rc = pacbio_load_multipart( ctx, wd, database, &hdf5_src, &consensus_present, lctx, count );
+                }
+            }
+        
+        }
+        
+        if ( !consensus_present )
+            VDatabaseDropTable ( database, "CONSENSUS" );
+    }
+
+    if ( rc == 0 )
+        seq_report_totals( lctx );
+
+    if ( rc == 0 )
+        rc = pacbio_meta_entry( database, toolname );
+
+    if ( database != NULL )
+        VDatabaseRelease ( database );
+
+    if ( schema != NULL )
+        VSchemaRelease ( schema );
+
+    if ( vdb_mgr != NULL )
+        VDBManagerRelease ( vdb_mgr );
+    return rc;
+}
+
+
+static rc_t pacbio_check_sourcefile( const KDirectory * dir, char ** path )
+{
+    rc_t rc = 0;
+    uint32_t src_path_type = KDirectoryPathType ( dir, "%s", *path );
+    if ( ( src_path_type & kptFile ) == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcValidating, rcItem, rcNotFound );
+        LOGERR( klogErr, rc, "source-file not found" );
+    }
+    else
+    {
+        if ( ( src_path_type & kptAlias ) != 0 )
+        {
+            char resolved[ 4096 ];
+            rc = KDirectoryResolveAlias ( dir, true, resolved,
+                                          sizeof resolved, "%s", *path );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "cannot resolve srcfile-link" );
+            }
+            else
+            {
+                free( *path );
+                *path = string_dup_measure ( resolved, NULL );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t pacbio_check_sourcefile_list( const KDirectory * dir, VNamelist ** list )
+{
+    VNamelist * temp;
+    rc_t rc = VNamelistMake ( &temp, 5 );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count;
+        rc = VNameListCount ( *list, &count );
+        for ( idx = 0; rc == 0 && idx < count; ++idx )
+        {
+            const char * name = NULL;
+            rc = VNameListGet ( *list, idx, &name );
+            if ( rc == 0 && name != NULL )
+            {
+                char * path = string_dup_measure ( name, NULL );
+                rc = pacbio_check_sourcefile( dir, &path );
+                if ( rc == 0 )
+                    rc = VNamelistAppend ( temp, path );
+            }
+        }
+        if ( rc == 0 )
+        {
+            rc = VNamelistRelease ( *list );
+            *list = temp;
+        }
+    }
+    return rc;
+}
+
+
+OptDef MyOptions[] =
+{
+    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 5, true, false },
+    { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 1, false, false },
+    { OPTION_WITH_PROGRESS, ALIAS_WITH_PROGRESS, NULL, progress_usage, 1, false, false },
+    { OPTION_TABS, ALIAS_TABS, NULL, tabs_usage, 1, true, false },
+    { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true, true }
+};
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 2,
+                                  MyOptions, sizeof MyOptions / sizeof ( OptDef ),
+                                  XMLLogger_Args, XMLLogger_ArgsQty  );
+
+    KLogHandlerSetStdErr();
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "error creating internal structure" );
+    }
+    else
+    {
+        KDirectory * wd;
+        rc = KDirectoryNativeDir ( &wd );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "error creating internal structure" );
+        }
+        else
+        {
+            ld_context lctx;
+            lctx_init( &lctx );
+            rc = XMLLogger_Make( &lctx.xml_logger, wd, args );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "error creating internal structure" );
+            }
+            else
+            {
+                context ctx;
+                rc = ctx_init( args, &ctx );
+                if ( rc == 0 )
+                {
+                    rc = pacbio_check_sourcefile_list( wd, &ctx.src_paths );
+                    if ( rc == 0 )
+                    {
+                        lctx.with_progress = ctx.with_progress;
+                        lctx.dst_path = ctx.dst_path;
+                        lctx.cache_content = false;
+                        lctx.check_src_obj = false;
+
+                        rc = KLoadProgressbar_Make( &lctx.xml_progress, 0 );
+                        if ( rc != 0 )
+                        {
+                            LOGERR( klogErr, rc, "cannot create LoadProgressBar" );
+                        }
+                        else
+                            rc = pacbio_load( &ctx, wd, &lctx, argv[ 0 ] );
+
+                    }
+                    ctx_free( &ctx );
+                }
+            }
+            KDirectoryRelease ( wd );
+            lctx_free( &lctx );
+        }
+        ArgsWhack ( args );
+    }
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-basecalls_cmn.c b/tools/pacbio-load/pl-basecalls_cmn.c
new file mode 100644
index 0000000..7980d3c
--- /dev/null
+++ b/tools/pacbio-load/pl-basecalls_cmn.c
@@ -0,0 +1,97 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-basecalls_cmn.h"
+#include <sysalloc.h>
+
+void init_BaseCalls_cmn( BaseCalls_cmn *tab )
+{
+    zmw_init( &tab->zmw );
+    init_array_file( &tab->Basecall );
+    init_array_file( &tab->QualityValue );
+    init_array_file( &tab->DeletionQV );
+    init_array_file( &tab->DeletionTag );
+    init_array_file( &tab->InsertionQV );
+    init_array_file( &tab->SubstitutionQV );
+    init_array_file( &tab->SubstitutionTag );
+}
+
+
+void close_BaseCalls_cmn( BaseCalls_cmn *tab )
+{
+    zmw_close( &tab->zmw );
+    free_array_file( &tab->Basecall );
+    free_array_file( &tab->QualityValue );
+    free_array_file( &tab->DeletionQV );
+    free_array_file( &tab->DeletionTag );
+    free_array_file( &tab->InsertionQV );
+    free_array_file( &tab->SubstitutionQV );
+    free_array_file( &tab->SubstitutionTag );
+}
+
+
+rc_t open_BaseCalls_cmn( const KDirectory *hdf5_dir, BaseCalls_cmn *tab,
+                         const bool num_passes, const char * path,
+                         bool cache_content, bool supress_err_msg )
+{
+    rc_t rc;
+
+    init_BaseCalls_cmn( tab );
+    rc = zmw_open( hdf5_dir, &tab->zmw, num_passes, path, supress_err_msg );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->Basecall, path, "Basecall", 
+                           BASECALL_BITSIZE, BASECALL_COLS,
+                           true, cache_content, supress_err_msg );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->QualityValue, path, "QualityValue", 
+                           QUALITY_VALUE_BITSIZE, QUALITY_VALUE_COLS,
+                           true, cache_content, supress_err_msg );
+    if ( rc == 0 )
+    {
+        open_element( hdf5_dir, &tab->DeletionQV, path, "DeletionQV",
+                           DELETION_QV_BITSIZE, DELETION_QV_COLS,
+                           true, cache_content, true );
+
+        open_element( hdf5_dir, &tab->DeletionTag, path, "DeletionTag", 
+                           DELETION_TAG_BITSIZE, DELETION_TAG_COLS,
+                           true, cache_content, true );
+
+        open_element( hdf5_dir, &tab->InsertionQV, path, "InsertionQV", 
+                           INSERTION_QV_BITSIZE, INSERTION_QV_COLS,
+                           true, cache_content, true );
+
+        open_element( hdf5_dir, &tab->SubstitutionQV, path, "SubstitutionQV",
+                           SUBSTITUTION_QV_BITZISE, SUBSTITUTION_QV_COLS,
+                           true, cache_content, true );
+
+        open_element( hdf5_dir, &tab->SubstitutionTag, path, "SubstitutionTag",
+                           SUBSTITUTION_TAG_BITSIZE, SUBSTITUTION_TAG_COLS,
+                           true, cache_content, true );
+    }
+    if ( rc != 0 )
+        close_BaseCalls_cmn( tab ); /* releases only initialized elements */
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-basecalls_cmn.h b/tools/pacbio-load/pl-basecalls_cmn.h
new file mode 100644
index 0000000..f9965cc
--- /dev/null
+++ b/tools/pacbio-load/pl-basecalls_cmn.h
@@ -0,0 +1,60 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_basecalls_cmn_
+#define _h_pl_basecalls_cmn_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-zmw.h"
+#include <klib/rc.h>
+
+typedef struct BaseCalls_cmn
+{
+    zmw_tab zmw;
+    af_data Basecall;
+    af_data QualityValue;
+    af_data DeletionQV;
+    af_data DeletionTag;
+    af_data InsertionQV;
+    af_data SubstitutionQV;
+    af_data SubstitutionTag;
+} BaseCalls_cmn;
+
+
+void init_BaseCalls_cmn( BaseCalls_cmn *tab );
+void close_BaseCalls_cmn( BaseCalls_cmn *tab );
+rc_t open_BaseCalls_cmn( const KDirectory *hdf5_dir, BaseCalls_cmn *tab,
+                         const bool num_passes, const char * path,
+                         bool cache_content, bool supress_err_msg );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-consensus.c b/tools/pacbio-load/pl-consensus.c
new file mode 100644
index 0000000..c2c2565
--- /dev/null
+++ b/tools/pacbio-load/pl-consensus.c
@@ -0,0 +1,472 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-consensus.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+const char * consensus_tab_names[] = 
+{ 
+    /* base-space */
+    "READ",
+    "QUALITY",
+    "NREADS",
+    "READ_TYPE",
+    "READ_START",
+    "READ_LEN",
+    "(INSDC:SRA:platform_id)PLATFORM",
+    "READ_FILTER",
+
+    /* consensus-space */
+    "HOLE_NUMBER",
+    "HOLE_STATUS",
+    "HOLE_XY",
+    "NUM_PASSES",
+    "INSERTION_QV",
+    "DELETION_QV",
+    "DELETION_TAG",
+    "SUBSTITUTION_QV",
+    "SUBSTITUTION_TAG"
+};
+
+
+static bool check_Consensus_totalcount( BaseCalls_cmn *tab, const uint64_t expected )
+{
+    bool res = check_table_count( &tab->Basecall, "Basecall", expected );
+    if ( res )
+        res = check_table_count( &tab->QualityValue, "QualityValue", expected );
+
+	if ( res )
+	{
+		if ( tab->DeletionQV.extents != NULL )
+			res = check_table_count( &tab->DeletionQV, "DeletionQV", expected );
+
+		if ( tab->DeletionTag.extents != NULL )
+			res = check_table_count( &tab->DeletionTag, "DeletionTag", expected );
+
+		if ( tab->InsertionQV.extents != NULL )
+			res = check_table_count( &tab->InsertionQV, "InsertionQV", expected );
+
+		if ( tab->SubstitutionQV.extents != NULL )
+			res = check_table_count( &tab->SubstitutionQV, "SubstitutionQV", expected );
+
+		if ( tab->SubstitutionTag.extents != NULL )
+			res = check_table_count( &tab->SubstitutionTag, "SubstitutionTag", expected );
+	}
+
+    return res;
+}
+
+
+static rc_t consensus_load_zero_bases( VCursor *cursor, const uint32_t *col_idx )
+{
+    uint32_t dummy_src; 
+    INSDC_SRA_read_filter filter = SRA_READ_FILTER_CRITERIA;
+
+    rc_t rc = vdb_write_value( cursor, col_idx[ consensus_tab_READ ],
+                               &dummy_src, BASECALL_BITSIZE, 0, "consensus.Basecall" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_QUALITY ],
+                               &dummy_src, QUALITY_VALUE_BITSIZE, 0, "QualityValue" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_INSERTION_QV ],
+                               &dummy_src, INSERTION_QV_BITSIZE, 0, "consensus.InsertionQV" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_DELETION_QV ],
+                               &dummy_src, DELETION_QV_BITSIZE, 0, "consensus.DeletionQV" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_DELETION_TAG ],
+                               &dummy_src, DELETION_TAG_BITSIZE, 0, "consensus.DeletionTag" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_SUBSTITUTION_QV ],
+                               &dummy_src, SUBSTITUTION_QV_BITZISE, 0, "consensus.SubstitutionQV" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_SUBSTITUTION_TAG ],
+                               &dummy_src, SUBSTITUTION_TAG_BITSIZE, 0, "consensus.SubstitutionTag" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ consensus_tab_READ_FILTER ],
+                               &filter, sizeof filter * 8, 1, "consensus.READ_FILTER" );
+    return rc;
+}
+
+
+static rc_t consensus_load_spot_bases( VCursor *cursor, BaseCalls_cmn *tab,
+                                       const uint32_t *col_idx, zmw_row * spot )
+{
+    rc_t rc = 0;
+	uint32_t column_idx, dummy_src;
+	
+    /* we make a buffer to store NumEvent 8-bit-values
+      (that is so far the biggest value we have to read per DNA-BASE) */
+    char * buffer = malloc( spot->NumEvent );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted );
+        PLOGERR( klogErr, ( klogErr, rc, "cannot allocate $(numbytes) to read seq-data",
+                            "numbytes=%u", spot->NumEvent ) );
+    }
+    if ( rc == 0 )
+        rc = transfer_bits( cursor, col_idx[ consensus_tab_READ ],
+            &tab->Basecall, buffer, spot->offset, spot->NumEvent,
+            BASECALL_BITSIZE, "consensus.Basecall" );
+    if ( rc == 0 )
+        rc = transfer_bits( cursor, col_idx[ consensus_tab_QUALITY ],
+            &tab->QualityValue, buffer, spot->offset, spot->NumEvent,
+            QUALITY_VALUE_BITSIZE, "consensus.QualityValue" );
+			
+    if ( rc == 0 )
+	{
+		column_idx = col_idx[ consensus_tab_INSERTION_QV ];
+		if ( tab->InsertionQV.extents != NULL )
+			rc = transfer_bits( cursor, column_idx,
+				&tab->InsertionQV, buffer, spot->offset, spot->NumEvent,
+				INSERTION_QV_BITSIZE, "consensus.InsertionQV" );
+		else
+			rc = vdb_write_value( cursor, column_idx,
+					&dummy_src, INSERTION_QV_BITSIZE, 0, "consensus.InsertionQV" );
+	}
+	
+    if ( rc == 0 )
+	{
+		column_idx = col_idx[ consensus_tab_DELETION_QV ];
+		if ( tab->DeletionQV.extents != NULL )
+			rc = transfer_bits( cursor, column_idx,
+				&tab->DeletionQV, buffer, spot->offset, spot->NumEvent,
+				DELETION_QV_BITSIZE, "consensus.DeletionQV" );
+		else
+			rc = vdb_write_value( cursor, column_idx,
+				   &dummy_src, DELETION_QV_BITSIZE, 0, "consensus.DeletionQV" );
+	}
+	
+    if ( rc == 0 )
+	{
+		column_idx = col_idx[ consensus_tab_DELETION_TAG ];
+		if ( tab->DeletionTag.extents != NULL )
+			rc = transfer_bits( cursor, column_idx,
+				&tab->DeletionTag, buffer, spot->offset, spot->NumEvent,
+				DELETION_TAG_BITSIZE, "consensus.DeletionTag" );
+		else
+			rc = vdb_write_value( cursor, column_idx,
+				   &dummy_src, DELETION_TAG_BITSIZE, 0, "consensus.DeletionTag" );
+	}
+	
+    if ( rc == 0 )
+	{
+		column_idx = col_idx[ consensus_tab_SUBSTITUTION_QV ];
+		if ( tab->SubstitutionQV.extents != NULL )
+			rc = transfer_bits( cursor, column_idx,
+				&tab->SubstitutionQV, buffer, spot->offset, spot->NumEvent,
+				SUBSTITUTION_QV_BITZISE, "consensus.SubstitutionQV" );
+		else
+			rc = vdb_write_value( cursor, column_idx,
+					&dummy_src, SUBSTITUTION_QV_BITZISE, 0, "consensus.SubstitutionQV" );
+	}
+	
+    if ( rc == 0 )
+	{
+		column_idx = col_idx[ consensus_tab_SUBSTITUTION_TAG ];
+		if ( tab->SubstitutionTag.extents != NULL )
+			rc = transfer_bits( cursor, column_idx,
+				&tab->SubstitutionTag, buffer, spot->offset, spot->NumEvent,
+				SUBSTITUTION_TAG_BITSIZE, "consensus.SubstitutionTag" );
+		else
+			rc = vdb_write_value( cursor, column_idx,
+				   &dummy_src, SUBSTITUTION_TAG_BITSIZE, 0, "consensus.SubstitutionTag" );
+	}
+	
+    if ( buffer != NULL )
+        free( buffer );
+    return rc;
+}
+
+
+static rc_t consensus_load_spot( VCursor *cursor, const uint32_t *col_idx,
+                                 region_type_mapping *mapping, zmw_row * spot, 
+                                 void * data )
+{
+	rc_t rc = 0;
+	if ( spot->NumEvent > 0 )
+	{
+		BaseCalls_cmn *tab = (BaseCalls_cmn *)data;
+		rc = VCursorOpenRow( cursor );
+		if ( rc != 0 )
+			PLOGERR( klogErr, ( klogErr, rc, "cannot open consensus-row on spot# $(spotnr)",
+								"spotnr=%u", spot->spot_nr ) );
+
+		if ( rc == 0 )
+			rc = vdb_write_uint32( cursor, col_idx[ consensus_tab_HOLE_NUMBER ],
+								   spot->HoleNumber, "consensus.HOLE_NUMBER" );
+		if ( rc == 0 )
+			rc = vdb_write_uint8( cursor, col_idx[ consensus_tab_HOLE_STATUS ],
+								  spot->HoleStatus, "consensus.HOLE_STATUS" );
+		if ( rc == 0 )
+			rc = vdb_write_value( cursor, col_idx[ consensus_tab_HOLE_XY ],
+								  &spot->HoleXY, HOLE_XY_BITSIZE, 2, "consensus.HOLE_XY" );
+
+		/* has to be read ... from "PulseData/ConsensusBaesCalls/Passes/NumPasses" */
+		if ( rc == 0 )
+			rc = vdb_write_uint32( cursor, col_idx[ consensus_tab_NUM_PASSES ],
+								   spot->NumPasses, "consensus.NUM_PASSES" );
+
+		if ( rc == 0 )
+		{
+			if ( spot->NumEvent > 0 )
+				rc = consensus_load_spot_bases( cursor, tab, col_idx, spot );
+			else
+				rc = consensus_load_zero_bases( cursor, col_idx );
+		}
+
+		if ( rc == 0 )
+			rc = vdb_write_uint8( cursor, col_idx[ consensus_tab_NREADS ],
+								  1, "consensus.NREADS" );
+		if ( rc == 0 )
+			rc = vdb_write_uint32( cursor, col_idx[ consensus_tab_READ_START ],
+								   0, "consensus.READ_START" );
+		if ( rc == 0 )
+			rc = vdb_write_uint32( cursor, col_idx[ consensus_tab_READ_LEN ],
+								   spot->NumEvent, "consensus.READ_LEN" );
+		if ( rc == 0 )
+			rc = vdb_write_uint8( cursor, col_idx[ consensus_tab_READ_TYPE ],
+								  SRA_READ_TYPE_BIOLOGICAL, "consensus.READ_TYPE" );
+
+		if ( rc == 0 )
+		{
+			rc = VCursorCommitRow( cursor );
+			if ( rc != 0 )
+				PLOGERR( klogErr, ( klogErr, rc, "cannot commit consensus-row on spot# $(spotnr)",
+									"spotnr=%u", spot->spot_nr ) );
+		}
+
+		if ( rc == 0 )
+		{
+			rc = VCursorCloseRow( cursor );
+			if ( rc != 0 )
+				PLOGERR( klogErr, ( klogErr, rc, "cannot close consensus-row on spot# $(spotnr)",
+									"spotnr=%u", spot->spot_nr ) );
+
+		}
+	}
+    return rc;
+}
+
+
+static rc_t consensus_loader( ld_context *lctx, KDirectory * hdf5_src, VCursor * cursor, const char * table_name )
+{
+    uint32_t col_idx[ consensus_tab_count ];
+    rc_t rc = add_columns( cursor, consensus_tab_count, -1, col_idx, consensus_tab_names );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot open cursor on consensus-table" );
+
+        else
+        {
+            BaseCalls_cmn ConsensusTab;
+            const INSDC_SRA_platform_id platform = SRA_PLATFORM_PACBIO_SMRT;
+
+            rc = VCursorDefault ( cursor, col_idx[ consensus_tab_PLATFORM ],
+                                  sizeof platform * 8, &platform, 0, 1 );
+            if ( rc != 0 )
+                LOGERR( klogErr, rc, "cannot set cursor-default on consensus-table for platform-column" );
+            else
+            {
+                const INSDC_SRA_read_filter filter = SRA_READ_FILTER_PASS;
+                rc = VCursorDefault ( cursor, col_idx[ consensus_tab_READ_FILTER ],
+                                  sizeof filter * 8, &filter, 0, 1 );
+                if ( rc != 0 )
+                    LOGERR( klogErr, rc, "cannot set cursor-default on consensus-table for read-filter-column" );
+            }
+
+            if ( rc == 0 )
+                rc = open_BaseCalls_cmn( hdf5_src, &ConsensusTab, true,
+                                     "PulseData/ConsensusBaseCalls", lctx->cache_content, true );
+
+            if ( rc == 0 )
+            {
+                uint64_t total_bases = zmw_total( &ConsensusTab.zmw );
+                uint64_t total_spots = ConsensusTab.zmw.NumEvent.extents[ 0 ];
+
+                KLogLevel tmp_lvl = KLogLevelGet();
+                KLogLevelSet( klogInfo );
+                PLOGMSG( klogInfo, ( klogInfo,
+                         "loading consensus-table ( $(bases) bases / $(spots) spots ):",
+                         "bases=%lu,spots=%lu", total_bases, total_spots ));
+                KLogLevelSet( tmp_lvl );
+
+                if ( check_Consensus_totalcount( &ConsensusTab, total_bases ) )
+				{
+                    rc = zmw_for_each( &ConsensusTab.zmw, &lctx->xml_progress, cursor,
+                                       lctx->with_progress, col_idx, NULL,
+                                       true, consensus_load_spot, &ConsensusTab );
+				}
+                else
+				{
+                    rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+				}
+                close_BaseCalls_cmn( &ConsensusTab );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* HDF5-Groups and tables used to load the CONSENSUS-table */
+static const char * consensus_groups_to_check[] = 
+{ 
+    "PulseData",
+    "PulseData/ConsensusBaseCalls",
+    "PulseData/ConsensusBaseCalls/ZMW",
+    "PulseData/ConsensusBaseCalls/Passes",
+    NULL
+};
+
+
+static const char * consensus_tables_to_check[] = 
+{ 
+    "PulseData/ConsensusBaseCalls/Basecall",
+    "PulseData/ConsensusBaseCalls/DeletionQV",
+    "PulseData/ConsensusBaseCalls/DeletionTag",
+    "PulseData/ConsensusBaseCalls/InsertionQV",
+    "PulseData/ConsensusBaseCalls/QualityValue",
+    "PulseData/ConsensusBaseCalls/SubstitutionQV",
+    "PulseData/ConsensusBaseCalls/SubstitutionTag",
+    "PulseData/ConsensusBaseCalls/ZMW/HoleNumber",
+    "PulseData/ConsensusBaseCalls/ZMW/HoleStatus",
+    "PulseData/ConsensusBaseCalls/ZMW/HoleXY",
+    "PulseData/ConsensusBaseCalls/ZMW/NumEvent",
+    "PulseData/ConsensusBaseCalls/Passes/NumPasses",
+    NULL
+};
+
+
+static const char * consensus_schema_template = "CONSENSUS";
+static const char * consensus_table_to_create = "CONSENSUS";
+
+
+rc_t prepare_consensus( VDatabase * database, con_ctx * sctx, ld_context *lctx )
+{
+    rc_t rc = prepare_table( database, &sctx->cursor,
+            consensus_schema_template, consensus_table_to_create ); /* pl-tools.c ... this creates the cursor */
+    if ( rc == 0 )
+    {
+        rc = add_columns( sctx->cursor, consensus_tab_count, -1, sctx->col_idx, consensus_tab_names );
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen( sctx->cursor );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "cannot open cursor on consensus-table" );
+            }
+            else
+            {
+                const INSDC_SRA_platform_id platform = SRA_PLATFORM_PACBIO_SMRT;
+
+                rc = VCursorDefault ( sctx->cursor, sctx->col_idx[ consensus_tab_PLATFORM ],
+                                      sizeof platform * 8, &platform, 0, 1 );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "cannot set cursor-default on consensus-table for platform-column" );
+                }
+                else
+                {
+                    const INSDC_SRA_read_filter filter = SRA_READ_FILTER_PASS;
+                    rc = VCursorDefault ( sctx->cursor, sctx->col_idx[ consensus_tab_READ_FILTER ],
+                                      sizeof filter * 8, &filter, 0, 1 );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogErr, rc, "cannot set cursor-default on consensus-table for read-filter-column" );
+                    }
+                    else
+                    {
+                        sctx->lctx = lctx;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t load_consensus_src( con_ctx * sctx, KDirectory * hdf5_src )
+{
+    BaseCalls_cmn ConsensusTab;
+
+    rc_t rc = 0;
+    if ( sctx->lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, consensus_groups_to_check, 
+                                consensus_tables_to_check, false );
+    if ( rc == 0 )
+        rc = open_BaseCalls_cmn( hdf5_src, &ConsensusTab, true,
+                                 "PulseData/ConsensusBaseCalls", sctx->lctx->cache_content, true );
+    if ( rc == 0 )
+    {
+        uint64_t total_bases = zmw_total( &ConsensusTab.zmw );
+        uint64_t total_spots = ConsensusTab.zmw.NumEvent.extents[ 0 ];
+
+        KLogLevel tmp_lvl = KLogLevelGet();
+        KLogLevelSet( klogInfo );
+        PLOGMSG( klogInfo, ( klogInfo,
+                 "loading consensus-table ( $(bases) bases / $(spots) spots ):",
+                 "bases=%lu,spots=%lu", total_bases, total_spots ));
+        KLogLevelSet( tmp_lvl );
+
+        if ( !check_Consensus_totalcount( &ConsensusTab, total_bases ) )
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+        else
+            rc = zmw_for_each( &ConsensusTab.zmw, &sctx->lctx->xml_progress, sctx->cursor,
+                               sctx->lctx->with_progress, sctx->col_idx, NULL,
+                               true, consensus_load_spot, &ConsensusTab );
+        close_BaseCalls_cmn( &ConsensusTab );
+    }
+    return rc;
+}
+
+
+rc_t finish_consensus( con_ctx * sctx )
+{
+    VCursorRelease( sctx->cursor );
+    return 0;
+}
+
+
+rc_t load_consensus( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx )
+{
+    rc_t rc = 0;
+    if ( lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, consensus_groups_to_check, 
+                                consensus_tables_to_check, false );
+    if ( rc == 0 )
+        rc = load_table( database, hdf5_src, lctx, consensus_schema_template, 
+                         consensus_table_to_create, consensus_loader );
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-consensus.h b/tools/pacbio-load/pl-consensus.h
new file mode 100644
index 0000000..5b38745
--- /dev/null
+++ b/tools/pacbio-load/pl-consensus.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_consensus_
+#define _h_pl_consensus_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-zmw.h"
+#include "pl-basecalls_cmn.h"
+#include <klib/rc.h>
+#include <insdc/sra.h>
+
+/* enumeration of the columns of the consensus-table */
+enum
+{
+    /* base-space */
+    consensus_tab_READ = 0,
+    consensus_tab_QUALITY,
+    consensus_tab_NREADS,
+    consensus_tab_READ_TYPE,
+    consensus_tab_READ_START,
+    consensus_tab_READ_LEN,
+    consensus_tab_PLATFORM,
+    consensus_tab_READ_FILTER,
+
+    /* consensus-space */
+    consensus_tab_HOLE_NUMBER,
+    consensus_tab_HOLE_STATUS,
+    consensus_tab_HOLE_XY,
+    consensus_tab_NUM_PASSES,
+    consensus_tab_INSERTION_QV,
+    consensus_tab_DELETION_QV,
+    consensus_tab_DELETION_TAG,
+    consensus_tab_SUBSTITUTION_QV,
+    consensus_tab_SUBSTITUTION_TAG,
+    consensus_tab_count
+};
+
+
+typedef struct con_ctx
+{
+    VCursor * cursor;
+    ld_context *lctx;
+    uint32_t col_idx[ consensus_tab_count ];
+} con_ctx;
+
+rc_t prepare_consensus( VDatabase * database, con_ctx * sctx, ld_context *lctx );
+rc_t load_consensus_src( con_ctx * sctx, KDirectory * hdf5_src );
+rc_t finish_consensus( con_ctx * sctx );
+
+rc_t load_consensus( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-context.c b/tools/pacbio-load/pl-context.c
new file mode 100644
index 0000000..431b909
--- /dev/null
+++ b/tools/pacbio-load/pl-context.c
@@ -0,0 +1,211 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-context.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+static char * ctx_set_str( const char *src, const char *dflt )
+{
+    char * res = NULL;
+    if ( src != NULL && src[0] != 0 )
+        res = string_dup_measure ( src, NULL );
+    else if ( dflt != NULL && dflt[0] != 0 )
+        res = string_dup_measure ( dflt, NULL );
+    return res;
+}
+
+
+static rc_t ctx_get_params( const Args * args, context *ctx )
+{
+    uint32_t idx, count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        LOGERR( klogErr, rc, "ArgsParamCount failed" );
+    else
+    {
+        if ( count < 1 )
+        {
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+            LOGERR( klogErr, rc, "hdf5-source-file missing" );
+            Usage ( args );
+        }
+        else for ( idx = 0; idx < count; ++idx )
+        {
+            const char *parameter = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&parameter );
+            if ( rc != 0 )
+                LOGERR( klogErr, rc, "error reading commandline-parameter" );
+            else
+                rc = VNamelistAppend ( ctx->src_paths, parameter );
+        }
+    }
+    return rc;
+}
+
+
+static bool ctx_get_bool( const Args *args, const char *name, const bool def )
+{
+    uint32_t count = 0;
+    if ( ArgsOptionCount( args, name, &count ) == 0 )
+        return ( count > 0 );
+    else
+        return def;
+}
+
+
+static const char* ctx_get_str( const Args *args, const char *name, const char *def )
+{
+    const char * res = def;
+    uint32_t count = 0;
+    if ( ArgsOptionCount( args, name, &count ) == 0 && count > 0 )
+    {
+        if ( ArgsOptionValue( args, name, 0, (const void **)&res ) != 0 )
+            res = def;
+    }
+    return res;
+}
+
+
+void ctx_free( context *ctx )
+{
+    if ( ctx->dst_path != NULL )
+        free( ctx->dst_path );
+    if ( ctx->schema_name != NULL )
+        free( ctx->schema_name );
+    if ( ctx->tabs != NULL )
+        free( ctx->tabs );
+    VNamelistRelease ( ctx->src_paths );
+}
+
+
+rc_t ctx_init( const Args * args, context *ctx )
+{
+    rc_t rc;
+
+    ctx->dst_path = NULL;
+    ctx->schema_name = NULL;
+    ctx->tabs = NULL;
+    ctx->force = false;
+    ctx->with_progress = false;
+
+    rc = VNamelistMake ( &ctx->src_paths, 5 );
+    if ( rc == 0 )
+    {
+        rc = ctx_get_params( args, ctx );
+        if ( rc == 0 )
+        {
+            ctx->force = ctx_get_bool( args, OPTION_FORCE, false );
+            ctx->with_progress = ctx_get_bool( args, OPTION_WITH_PROGRESS, false );
+            ctx->schema_name = ctx_set_str( ctx_get_str( args, OPTION_SCHEMA, DFLT_SCHEMA ), DFLT_SCHEMA );
+            ctx->dst_path = ctx_set_str( ctx_get_str( args, OPTION_OUTPUT, NULL ), NULL );
+            ctx->tabs = ctx_set_str( ctx_get_str( args, OPTION_TABS, NULL ), NULL );
+        }
+        if ( rc == 0 )
+        {
+            if ( ctx->dst_path == NULL )
+            {
+                rc = RC( rcExe, rcArgv, rcReading, rcParam, rcInvalid );
+                LOGMSG( klogErr, "vdb-output-directory missing!" );
+            }
+        }
+    }
+    if ( rc != 0 )
+        ctx_free( ctx );
+    return rc;
+}
+
+
+rc_t ctx_show( context * ctx )
+{
+    rc_t rc;
+    uint32_t idx, count;
+
+    KLogLevel tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+
+    LOGMSG( klogInfo, "pacbio-load:" );
+
+    rc = VNameListCount ( ctx->src_paths, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char * name = NULL;
+            rc = VNameListGet ( ctx->src_paths, idx, &name );
+            if ( rc == 0 && name != NULL )
+                PLOGMSG( klogInfo, ( klogInfo, "   from    : '$(SRC)'", "SRC=%s", name ));
+        }
+    }
+
+    PLOGMSG( klogInfo, ( klogInfo, "   into    : '$(SRC)'", "SRC=%s", ctx->dst_path ));
+    PLOGMSG( klogInfo, ( klogInfo, "   schema  : '$(SRC)'", "SRC=%s", ctx->schema_name ));
+    if ( ctx->force )
+        LOGMSG( klogInfo, "   force   : 'yes'" );
+    else
+        LOGMSG( klogInfo, "   force   : 'no'" );
+    if ( ctx->tabs != NULL )
+        PLOGMSG( klogInfo, ( klogInfo, "   tabs    : '$(SRC)'", "SRC=%s", ctx->tabs ));
+
+    KLogLevelSet( tmp_lvl );
+    return rc;
+}
+
+
+static bool ctx_ld_module( context * ctx, const char c )
+{
+    if ( ctx->tabs == NULL )
+        return true;
+    else
+        return ( strchr( ctx->tabs, c ) != NULL );
+}
+
+
+bool ctx_ld_sequence( context * ctx )
+{
+    return ctx_ld_module( ctx, 'S' );
+}
+
+
+bool ctx_ld_consensus( context * ctx )
+{
+    return ctx_ld_module( ctx, 'C' );
+}
+
+
+bool ctx_ld_passes( context * ctx )
+{
+    return ctx_ld_module( ctx, 'P' );
+}
+
+
+bool ctx_ld_metrics( context * ctx )
+{
+    return ctx_ld_module( ctx, 'M' );
+}
diff --git a/tools/pacbio-load/pl-context.h b/tools/pacbio-load/pl-context.h
new file mode 100644
index 0000000..abca8de
--- /dev/null
+++ b/tools/pacbio-load/pl-context.h
@@ -0,0 +1,87 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pl_context_
+#define _h_pl_context_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <kapp/args.h>
+
+
+#define OPTION_SCHEMA       "schema"
+#define OPTION_FORCE        "force"
+#define OPTION_TABS         "tabs"
+#define OPTION_WITH_PROGRESS  "with_progressbar"
+#define OPTION_OUTPUT       "output"
+
+#define ALIAS_SCHEMA        "S"
+#define ALIAS_FORCE         "f"
+#define ALIAS_TABS          "t"
+#define ALIAS_WITH_PROGRESS "p"
+#define ALIAS_OUTPUT        "o"
+
+#define DFLT_SCHEMA         "sra/pacbio.vschema"
+#define PACBIO_SCHEMA_DB    "NCBI:SRA:PacBio:smrt:db"
+
+
+/* *******************************************************************
+the parameter-context contains all informations needed to load
+******************************************************************* */
+typedef struct context
+{
+    char *dst_path;     /* the vdb-database-path to create */
+    char *schema_name;  /* name of a schema-file to use", if different from std */
+    char *tabs;         /* load only these tabs... */
+    VNamelist * src_paths;  /* list of source-paths */
+    bool force;         /* if true", overwrite eventually existing output-db */
+    bool with_progress; /* if true", use the pl_progressbar */
+} context;
+
+
+rc_t ctx_init( const Args * args, context *ctx );
+void ctx_free( context *ctx );
+
+rc_t ctx_show( context * ctx );
+bool ctx_ld_sequence( context * ctx );
+bool ctx_ld_consensus( context * ctx );
+bool ctx_ld_passes( context * ctx );
+bool ctx_ld_metrics( context * ctx );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-metrics.c b/tools/pacbio-load/pl-metrics.c
new file mode 100644
index 0000000..30d70ac
--- /dev/null
+++ b/tools/pacbio-load/pl-metrics.c
@@ -0,0 +1,779 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-metrics.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+const char * metrics_tab_names[] = 
+{ 
+    "BASE_FRACTION",
+    "BASE_IPD",
+    "BASE_RATE",
+    "BASE_WIDTH",
+    "CHAN_BASE_QV",
+    "CHAN_DEL_QV",
+    "CHAN_INS_QV",
+    "CHAN_SUB_QV",
+    "LOCAL_BASE_RATE",
+    "DARK_BASE_RATE",
+    "HQ_RGN_START_TIME",
+    "HQ_RGN_END_TIME",
+    "HQ_RGN_SNR",
+    "PRODUCTIVITY",
+    "READ_SCORE",
+    "READ_BASE_QV",
+    "READ_DEL_QV",
+    "READ_INS_QV",
+    "READ_SUB_QV"
+};
+
+
+typedef struct Metrics_src
+{
+    af_data BaseFraction;
+    af_data BaseIpd;
+    af_data BaseRate;
+    af_data BaseWidth;
+    af_data CmBasQV;
+    af_data CmDelQV;
+    af_data CmInsQV;
+    af_data CmSubQV;
+    af_data LocalBaseRate;
+    af_data DarkBaseRate;
+    af_data HQRegionStartTime;
+    af_data HQRegionEndTime;
+    af_data HQRegionSNR;
+    af_data Productivity;
+    af_data ReadScore;
+    af_data RmBasQV;
+    af_data RmDelQV;
+    af_data RmInsQV;
+    af_data RmSubQV;
+} Metrics_src;
+
+
+static void init_Metrics_src( Metrics_src *tab )
+{
+    init_array_file( &tab->BaseFraction );
+    init_array_file( &tab->BaseIpd );
+    init_array_file( &tab->BaseRate );
+    init_array_file( &tab->BaseWidth );
+    init_array_file( &tab->CmBasQV );
+    init_array_file( &tab->CmDelQV );
+    init_array_file( &tab->CmInsQV );
+    init_array_file( &tab->CmSubQV );
+    init_array_file( &tab->LocalBaseRate );
+    init_array_file( &tab->DarkBaseRate );
+    init_array_file( &tab->HQRegionStartTime );
+    init_array_file( &tab->HQRegionEndTime );
+    init_array_file( &tab->HQRegionSNR );
+    init_array_file( &tab->Productivity );
+    init_array_file( &tab->ReadScore );
+    init_array_file( &tab->RmBasQV );
+    init_array_file( &tab->RmDelQV );
+    init_array_file( &tab->RmInsQV );
+    init_array_file( &tab->RmSubQV );
+}
+
+
+static void close_Metrics_src( Metrics_src *tab )
+{
+    free_array_file( &tab->BaseFraction );
+    free_array_file( &tab->BaseIpd );
+    free_array_file( &tab->BaseRate );
+    free_array_file( &tab->BaseWidth );
+    free_array_file( &tab->CmBasQV );
+    free_array_file( &tab->CmDelQV );
+    free_array_file( &tab->CmInsQV );
+    free_array_file( &tab->CmSubQV );
+    free_array_file( &tab->LocalBaseRate );
+    free_array_file( &tab->DarkBaseRate );
+    free_array_file( &tab->HQRegionStartTime );
+    free_array_file( &tab->HQRegionEndTime );
+    free_array_file( &tab->HQRegionSNR );
+    free_array_file( &tab->Productivity );
+    free_array_file( &tab->ReadScore );
+    free_array_file( &tab->RmBasQV );
+    free_array_file( &tab->RmDelQV );
+    free_array_file( &tab->RmInsQV );
+    free_array_file( &tab->RmSubQV );
+}
+
+
+static rc_t open_Metrics_src( const KDirectory *hdf5_dir, Metrics_src *tab,
+                              const char * path, bool cache_content )
+{
+    rc_t rc, rc_none;
+    init_Metrics_src( tab );
+
+    rc = open_element( hdf5_dir, &tab->BaseFraction, path, "BaseFraction", 
+                  BASE_FRACTION_BITSIZE, BASE_FRACTION_COLS,
+                  true, cache_content, false );
+
+    /* it is ok if BaseIpd is missing !!! */
+    if ( rc == 0 )
+    {
+        rc_none = open_element( hdf5_dir, &tab->BaseIpd, path, "BaseIpd", 
+                    BASE_IPD_BITSIZE, BASE_IPD_COLS,
+                    true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> BaseIpd is missing" );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->BaseRate, path, "BaseRate", 
+                  BASE_RATE_BITSIZE, BASE_RATE_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->BaseWidth, path, "BaseWidth", 
+                  BASE_WIDTH_BITSIZE, BASE_WIDTH_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->CmBasQV, path, "CmBasQv", 
+                  CM_BAS_QV_BITSIZE, CM_BAS_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->CmDelQV, path, "CmDelQv",
+                  CM_DEL_QV_BITSIZE, CM_DEL_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->CmInsQV, path, "CmInsQv",
+                  CM_INS_QV_BITSIZE, CM_INS_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->CmSubQV, path, "CmSubQv",
+                  CM_SUB_QV_BITSIZE, CM_SUB_QV_COLS,
+                  true, cache_content, false );
+
+    if ( rc == 0 )
+    {
+        /* it is ok if LocalBaseRate is missing !!! */
+        rc_none = open_element( hdf5_dir, &tab->LocalBaseRate, path, "LocalBaseRate",
+                  LOCAL_BASE_RATE_BITSIZE, LOCAL_BASE_RATE_COLS,
+                  true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> LocalBaseRate is missing" );
+        }
+
+        /* it is ok if DarkBaseRate is missing !!! */
+        rc_none = open_element( hdf5_dir, &tab->DarkBaseRate, path, "DarkBaseRate",
+                      DARK_BASE_RATE_BITSIZE, DARK_BASE_RATE_COLS,
+                      true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> DarkBaseRate is missing" );
+        }
+
+        /* it is ok if HQRegionStartTime is missing !!! */
+        rc_none = open_element( hdf5_dir, &tab->HQRegionStartTime, path, "HQRegionStartTime",
+                      HQ_REGION_START_TIME_BITSIZE, HQ_REGION_START_TIME_COLS,
+                      true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> HQRegionStartTime is missing" );
+        }
+
+        /* it is ok if HQRegionEndTime is missing !!! */
+        rc_none = open_element( hdf5_dir, &tab->HQRegionEndTime, path, "HQRegionEndTime",
+                      HQ_REGION_END_TIME_BITSIZE, HQ_REGION_END_TIME_COLS,
+                      true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> HQRegionEndTime is missing" );
+        }
+
+        /* it is ok of HQRegionSNR is missing !!! ( discovered 12/16/2011 )*/
+        rc_none = open_element( hdf5_dir, &tab->HQRegionSNR, path, "HQRegionSNR",
+                    HQ_REGION_SNR_BITSIZE, HQ_REGION_SNR_COLS,
+                    true, cache_content, true );
+        if ( rc_none != 0 )
+        {
+            print_log_info( "metrics -> HQRegionSNR is missing" );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->Productivity, path, "Productivity",
+                  PRODUCTIVITY_BITSIZE, PRODUCTIVITY_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->ReadScore, path, "ReadScore",
+                  READ_SCORE_BITSIZE, READ_SCORE_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->RmBasQV, path, "RmBasQv", 
+                  RM_BAS_QV_BITSIZE, RM_BAS_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->RmDelQV, path, "RmDelQv",
+                  RM_DEL_QV_BITSIZE, RM_DEL_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->RmInsQV, path, "RmInsQv",
+                  RM_INS_QV_BITSIZE, RM_INS_QV_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->RmSubQV, path, "RmSubQv",
+                  RM_SUB_QV_BITSIZE, RM_SUB_QV_COLS,
+                  true, cache_content, false );
+    if ( rc != 0 )
+        close_Metrics_src( tab );
+    return rc;
+}
+
+
+static bool check_Metrics_ext( af_data *af, bool *needed, uint64_t *expected,
+                               const char * s )
+{
+    bool res = true;
+
+    if ( *needed )
+    {
+        *expected = af->extents[ 0 ];
+        *needed = false;
+    }
+    else
+        res = check_table_count( af, s, *expected );
+    return res;
+}
+
+static bool check_Metrics_extents( Metrics_src *tab )
+{
+    bool res = true;
+    bool needed = true;
+    uint64_t expected = 0;
+
+    if ( tab->BaseFraction.rc == 0 && res )
+        res = check_Metrics_ext( &tab->BaseFraction, &needed, &expected, "BaseFraction" );
+
+    if ( tab->BaseIpd.rc == 0 && res )
+        res = check_Metrics_ext( &tab->BaseIpd, &needed, &expected, "BaseIpd" );
+
+    if ( tab->BaseRate.rc == 0 && res )
+        res = check_Metrics_ext( &tab->BaseRate, &needed, &expected, "BaseRate" );
+
+    if ( tab->BaseWidth.rc == 0 && res )
+        res = check_Metrics_ext( &tab->BaseWidth, &needed, &expected, "BaseWidth" );
+
+    if ( tab->CmBasQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->CmBasQV, &needed, &expected, "CmBasQV" );
+
+    if ( tab->CmDelQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->CmDelQV, &needed, &expected, "CmDelQV" );
+
+    if ( tab->CmInsQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->CmInsQV, &needed, &expected, "CmInsQV" );
+
+    if ( tab->CmSubQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->CmSubQV, &needed, &expected, "CmSubQV" );
+
+    if ( tab->LocalBaseRate.rc == 0 && res )
+        res = check_Metrics_ext( &tab->LocalBaseRate, &needed, &expected, "LocalBaseRate" );
+
+    if ( tab->DarkBaseRate.rc == 0 && res )
+        res = check_Metrics_ext( &tab->DarkBaseRate, &needed, &expected, "DarkBaseRate" );
+
+    if ( tab->HQRegionStartTime.rc == 0 && res )
+        res = check_Metrics_ext( &tab->HQRegionStartTime, &needed, &expected, "HQRegionStartTime" );
+
+    if ( tab->HQRegionEndTime.rc == 0 && res )
+        res = check_Metrics_ext( &tab->HQRegionEndTime, &needed, &expected, "HQRegionEndTime" );
+
+    if ( tab->HQRegionSNR.rc == 0 && res )
+        res = check_Metrics_ext( &tab->HQRegionSNR, &needed, &expected, "HQRegionSNR" );
+
+    if ( tab->Productivity.rc == 0 && res )
+        res = check_Metrics_ext( &tab->Productivity, &needed, &expected, "Productivity" );
+
+    if ( tab->ReadScore.rc == 0 && res )
+        res = check_Metrics_ext( &tab->ReadScore, &needed, &expected, "ReadScore" );
+
+    if ( tab->RmBasQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->RmBasQV, &needed, &expected, "RmBasQV" );
+
+    if ( tab->RmDelQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->RmDelQV, &needed, &expected, "RmDelQV" );
+
+    if ( tab->RmInsQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->RmInsQV, &needed, &expected, "RmInsQV" );
+
+    if ( tab->RmSubQV.rc == 0 && res )
+        res = check_Metrics_ext( &tab->RmSubQV, &needed, &expected, "RmSubQV" );
+
+    return res;
+}
+
+
+#define METRICS_BLOCK_SIZE 1024
+
+typedef struct metrics_block
+{
+    float   BaseFraction[ METRICS_BLOCK_SIZE ][4];
+    float   BaseIpd[ METRICS_BLOCK_SIZE ];
+    float   BaseRate[ METRICS_BLOCK_SIZE ];
+    float   BaseWidth[ METRICS_BLOCK_SIZE ];
+    float   CmBasQV[ METRICS_BLOCK_SIZE ][4];
+    float   CmDelQV[ METRICS_BLOCK_SIZE ][4];
+    float   CmInsQV[ METRICS_BLOCK_SIZE ][4];
+    float   CmSubQV[ METRICS_BLOCK_SIZE ][4];
+    float   LocalBaseRate[ METRICS_BLOCK_SIZE ];
+    float   DarkBaseRate[ METRICS_BLOCK_SIZE ];
+    float   HQRegionStartTime[ METRICS_BLOCK_SIZE ];
+    float   HQRegionEndTime[ METRICS_BLOCK_SIZE ];
+    float   HQRegionSNR[ METRICS_BLOCK_SIZE ][4];
+    uint8_t Productivity[ METRICS_BLOCK_SIZE ];
+    float   ReadScore[ METRICS_BLOCK_SIZE ];
+    float   RmBasQV[ METRICS_BLOCK_SIZE ];
+    float   RmDelQV[ METRICS_BLOCK_SIZE ];
+    float   RmInsQV[ METRICS_BLOCK_SIZE ];
+    float   RmSubQV[ METRICS_BLOCK_SIZE ];
+    uint64_t n_read;
+} metrics_block;
+
+
+
+static rc_t metrics_block_read_from_src( Metrics_src *tab,
+                                      const uint64_t total_rows,
+                                      const uint64_t pos,
+                                      metrics_block * block )
+{
+    rc_t rc = 0 ;
+    uint64_t to_read = METRICS_BLOCK_SIZE;
+    uint64_t read;
+
+    block->n_read = 0;
+    if ( ( pos + to_read ) >= total_rows )
+        to_read = ( total_rows - pos );
+
+    if ( tab->BaseFraction.rc == 0 )
+        rc = array_file_read_dim2( &tab->BaseFraction, pos, 
+                                   &block->BaseFraction[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->BaseFraction[0][0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->BaseIpd.rc == 0 )
+        rc = array_file_read_dim1( &tab->BaseIpd, pos, 
+                                   &block->BaseIpd[0],
+                                   to_read, &read );
+    else
+        memset( &block->BaseIpd[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->BaseRate.rc == 0 )
+        rc = array_file_read_dim1( &tab->BaseRate, pos, 
+                                   &block->BaseRate[0],
+                                   to_read, &read );
+    else
+        memset( &block->BaseRate[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->BaseWidth.rc == 0 )
+        rc = array_file_read_dim1( &tab->BaseWidth, pos, 
+                                   &block->BaseWidth[0],
+                                   to_read, &read );
+    else
+        memset( &block->BaseWidth[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->CmBasQV.rc == 0 )
+        rc = array_file_read_dim2( &tab->CmBasQV, pos, 
+                                   &block->CmBasQV[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->CmBasQV[0][0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->CmDelQV.rc == 0 )
+        rc = array_file_read_dim2( &tab->CmDelQV, pos, 
+                                   &block->CmDelQV[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->CmDelQV[0][0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->CmInsQV.rc == 0 )
+        rc = array_file_read_dim2( &tab->CmInsQV, pos, 
+                                   &block->CmInsQV[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->CmInsQV[0][0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->CmSubQV.rc == 0 )
+        rc = array_file_read_dim2( &tab->CmSubQV, pos, 
+                                   &block->CmSubQV[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->CmSubQV[0][0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->LocalBaseRate.rc == 0 )
+        rc = array_file_read_dim1( &tab->LocalBaseRate, pos, 
+                                   &block->LocalBaseRate[0],
+                                   to_read, &read );
+    else
+        memset( &block->LocalBaseRate[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->DarkBaseRate.rc == 0 )
+        rc = array_file_read_dim1( &tab->DarkBaseRate, pos, 
+                                   &block->DarkBaseRate[0],
+                                   to_read, &read );
+    else
+        memset( &block->DarkBaseRate[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->HQRegionStartTime.rc == 0 )
+        rc = array_file_read_dim1( &tab->HQRegionStartTime, pos, 
+                                   &block->HQRegionStartTime[0],
+                                   to_read, &read );
+    else
+        memset( &block->HQRegionStartTime[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->HQRegionEndTime.rc == 0 )
+        rc = array_file_read_dim1( &tab->HQRegionEndTime, pos, 
+                                   &block->HQRegionEndTime[0],
+                                   to_read, &read );
+    else
+        memset( &block->HQRegionEndTime[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->HQRegionSNR.rc == 0 )
+        rc = array_file_read_dim2( &tab->HQRegionSNR, pos, 
+                                   &block->HQRegionSNR[0][0],
+                                   to_read, 4, &read );
+    else
+        memset( &block->HQRegionSNR[0], 0, to_read * 4 * sizeof( float ) );
+
+    if ( rc == 0 && tab->Productivity.rc == 0 )
+        rc = array_file_read_dim1( &tab->Productivity, pos, 
+                                   &block->Productivity[0],
+                                   to_read, &read );
+    else
+        memset( &block->Productivity[0], 0, to_read * sizeof( uint8_t ) );
+
+    if ( rc == 0 && tab->ReadScore.rc == 0 )
+        rc = array_file_read_dim1( &tab->ReadScore, pos, 
+                                   &block->ReadScore[0],
+                                   to_read, &read );
+    else
+        memset( &block->ReadScore[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->RmBasQV.rc == 0 )
+        rc = array_file_read_dim1( &tab->RmBasQV, pos, 
+                                   &block->RmBasQV[0],
+                                   to_read, &read );
+    else
+        memset( &block->RmBasQV[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->RmDelQV.rc == 0 )
+        rc = array_file_read_dim1( &tab->RmDelQV, pos, 
+                                   &block->RmDelQV[0],
+                                   to_read, &read );
+    else
+        memset( &block->RmDelQV[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->RmInsQV.rc == 0 )
+        rc = array_file_read_dim1( &tab->RmInsQV, pos, 
+                                   &block->RmInsQV[0],
+                                   to_read, &read );
+    else
+        memset( &block->RmInsQV[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 && tab->RmSubQV.rc == 0 )
+        rc = array_file_read_dim1( &tab->RmSubQV, pos, 
+                                   &block->RmSubQV[0],
+                                   to_read, &read );
+    else
+        memset( &block->RmSubQV[0], 0, to_read * sizeof( float ) );
+
+    if ( rc == 0 )
+        block->n_read = read;
+    return rc;
+}
+
+
+static rc_t metrics_load( VCursor *cursor, metrics_block *block,
+                          const uint32_t idx, uint32_t *col_idx )
+{
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        LOGERR( klogErr, rc, "cannot open metrics-row" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_BASE_FRACTION ],
+                              &block->BaseFraction[idx][0], 32, 4, 
+                              "metrics.BaseFraction" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_BASE_IPD ],
+                                block->BaseIpd[idx], "metrics.BaseIpd" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_BASE_RATE ],
+                                block->BaseRate[idx], "metrics.BaseRate" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_BASE_WIDTH ],
+                                block->BaseWidth[idx], "metrics.BaseWidth" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_CHAN_BASE_QV ],
+                              &block->CmBasQV[idx][0], CM_BAS_QV_BITSIZE, 4, 
+                              "metrics.CmBasQv" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_CHAN_DEL_QV ],
+                              &block->CmDelQV[idx][0], CM_DEL_QV_BITSIZE, 4, 
+                              "metrics.CmDelQv" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_CHAN_INS_QV ],
+                              &block->CmInsQV[idx][0], CM_INS_QV_BITSIZE, 4, 
+                              "metrics.CmInsQv" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_CHAN_SUB_QV ],
+                              &block->CmSubQV[idx][0], CM_SUB_QV_BITSIZE, 4, 
+                              "metrics.CmSubQv" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_LOCAL_BASE_RATE ],
+                                block->LocalBaseRate[idx],
+                                "metrics.LocalBaseRate" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_DARK_BASE_RATE ],
+                                block->DarkBaseRate[idx],
+                                "metrics.DarkBaseRate" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_HQ_RGN_START_TIME ],
+                                block->HQRegionStartTime[idx], 
+                                "metrics.HQRegionStartTime" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_HQ_RGN_END_TIME ],
+                                block->HQRegionEndTime[idx], 
+                                "metrics.HQRegionEndTime" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ metrics_tab_HQ_RGN_SNR ],
+                              &block->HQRegionSNR[idx][0], HQ_REGION_SNR_BITSIZE, 4, 
+                              "metrics.HQRegionSNR" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, col_idx[ metrics_tab_PRODUCTIVITY ],
+                              block->Productivity[idx], 
+                              "metrics.Productivity" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_READ_SCORE ],
+                                block->ReadScore[idx], 
+                                "metrics.ReadScore" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_READ_BASE_QV ],
+                                block->RmBasQV[idx], 
+                                "metrics.RmBasQV" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_READ_DEL_QV ],
+                                block->RmDelQV[idx], 
+                                "metrics.RmDelQV" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_READ_INS_QV ],
+                                block->RmInsQV[idx], 
+                                "metrics.RmInsQV" );
+    if ( rc == 0 )
+        rc = vdb_write_float32( cursor, col_idx[ metrics_tab_READ_SUB_QV ],
+                                block->RmSubQV[idx], 
+                                "metrics.RmSubQV" );
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot commit metrics-row" );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot close metrics-row" );
+    }
+
+    return rc;
+}
+
+
+static rc_t metrics_load_loop( ld_context *lctx, VCursor * cursor, Metrics_src *tab,
+                               uint32_t *col_idx )
+{
+    rc_t rc = 0;
+    KLogLevel tmp_lvl;
+    metrics_block block;
+    pl_progress *progress;
+    uint64_t pos = 0;
+    uint64_t total_rows = tab->BaseFraction.extents[0];
+
+    pl_progress_make( &progress, total_rows );
+    rc = progress_chunk( &lctx->xml_progress, total_rows );
+
+    tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+    PLOGMSG( klogInfo, ( klogInfo,
+                         "loading metrics-table ( $(rows) rows ) :",
+                         "rows=%lu", total_rows   ));
+    KLogLevelSet( tmp_lvl );
+
+    while( pos < total_rows && rc == 0 )
+    {
+        rc = metrics_block_read_from_src( tab, total_rows, pos, &block );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < block.n_read && rc == 0; ++i )
+            {
+                rc = Quitting();
+                if ( rc == 0 )
+                {
+                    /* to be replaced with progressbar action... */
+                    rc = metrics_load( cursor, &block, i, col_idx );
+                    if ( rc == 0 )
+                    {
+                        rc = progress_step( lctx->xml_progress );
+                        if ( lctx->with_progress )
+                            pl_progress_increment( progress, 1 );
+                    }
+                }
+                else
+                    LOGERR( klogErr, rc, "...loading metrics interrupted" );
+            }
+            pos += block.n_read;
+        }
+    }
+
+    pl_progress_destroy( progress );
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommit( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot commit cursor on metrics-tab" );
+    }
+    return rc;
+}
+
+
+static rc_t metrics_loader( ld_context *lctx, KDirectory * hdf5_src, VCursor * cursor, const char * table_name )
+{
+    uint32_t col_idx[ metrics_tab_count ];
+    rc_t rc = add_columns( cursor, metrics_tab_count, -1, col_idx, metrics_tab_names );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot open cursor on metrics-tab" );
+        else
+        {
+            Metrics_src Metrics;
+            rc = open_Metrics_src( hdf5_src, &Metrics,
+                                   "PulseData/BaseCalls/ZMWMetrics",
+                                   lctx->cache_content );
+            if ( rc == 0 )
+            {
+                if ( check_Metrics_extents( &Metrics ) )
+                    rc = metrics_load_loop( lctx, cursor, &Metrics, col_idx );
+                else
+                    rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                close_Metrics_src( &Metrics );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* HDF5-Groups and tables used to load the METRICS-table */
+static const char * metrics_groups_to_check[] = 
+{ 
+    "PulseData/BaseCalls/ZMWMetrics",
+    NULL
+};
+
+
+static const char * metrics_schema_template = "ZMW_METRICS";
+static const char * metrics_table_to_create = "ZMW_METRICS";
+
+rc_t prepare_metrics( VDatabase * database, met_ctx * sctx, ld_context *lctx )
+{
+    rc_t rc = prepare_table( database, &sctx->cursor,
+            metrics_schema_template, metrics_table_to_create ); /* pl-tools.c ... this creates the cursor */
+    if ( rc == 0 )
+        rc = add_columns( sctx->cursor, metrics_tab_count, -1, sctx->col_idx, metrics_tab_names );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( sctx->cursor );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot open cursor on metrics-tab" );
+        }
+        else
+        {
+            sctx->lctx = lctx;
+        }
+    }
+    return rc;
+}
+
+
+rc_t load_metrics_src( met_ctx * sctx, KDirectory * hdf5_src )
+{
+    Metrics_src Metrics;
+    rc_t rc = 0;
+
+    if ( sctx->lctx->check_src_obj )
+        /* in case of metrics any combination of columns can be missing... */
+        rc = check_src_objects( hdf5_src, metrics_groups_to_check, NULL, false );
+
+    if ( rc == 0 )
+        rc = open_Metrics_src( hdf5_src, &Metrics, "PulseData/BaseCalls/ZMWMetrics",
+                               sctx->lctx->cache_content );
+    if ( rc == 0 )
+    {
+        if ( check_Metrics_extents( &Metrics ) )
+            rc = metrics_load_loop( sctx->lctx, sctx->cursor, &Metrics, sctx->col_idx );
+        else
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+        close_Metrics_src( &Metrics );
+    }
+    return rc;
+}
+
+
+rc_t finish_metrics( met_ctx * sctx )
+{
+    VCursorRelease( sctx->cursor );
+    return 0;
+}
+
+
+rc_t load_metrics( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx )
+{
+    rc_t rc = 0;
+    if ( lctx->check_src_obj )
+        /* in case of metrics any combination of columns can be missing... */
+        rc = check_src_objects( hdf5_src, metrics_groups_to_check, 
+                                NULL, false );
+
+    if ( rc == 0 )
+        rc = load_table( database, hdf5_src, lctx, metrics_schema_template, 
+                         metrics_table_to_create, metrics_loader );
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-metrics.h b/tools/pacbio-load/pl-metrics.h
new file mode 100644
index 0000000..b52c269
--- /dev/null
+++ b/tools/pacbio-load/pl-metrics.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_metrics_
+#define _h_pl_metrics_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-progress.h"
+#include <kapp/main.h>
+#include <klib/rc.h>
+
+/* enumeration of the columns of the metrics-table */
+enum
+{
+    /* metrix-space */
+    metrics_tab_BASE_FRACTION,
+    metrics_tab_BASE_IPD,
+    metrics_tab_BASE_RATE,
+    metrics_tab_BASE_WIDTH,
+    metrics_tab_CHAN_BASE_QV,
+    metrics_tab_CHAN_DEL_QV,
+    metrics_tab_CHAN_INS_QV,
+    metrics_tab_CHAN_SUB_QV,
+    metrics_tab_LOCAL_BASE_RATE,
+    metrics_tab_DARK_BASE_RATE,
+    metrics_tab_HQ_RGN_START_TIME,
+    metrics_tab_HQ_RGN_END_TIME,
+    metrics_tab_HQ_RGN_SNR,
+    metrics_tab_PRODUCTIVITY,
+    metrics_tab_READ_SCORE,
+    metrics_tab_READ_BASE_QV,
+    metrics_tab_READ_DEL_QV,
+    metrics_tab_READ_INS_QV,
+    metrics_tab_READ_SUB_QV,
+    metrics_tab_count
+};
+
+
+typedef struct met_ctx
+{
+    VCursor * cursor;
+    ld_context *lctx;
+    uint32_t col_idx[ metrics_tab_count ];
+} met_ctx;
+
+
+rc_t prepare_metrics( VDatabase * database, met_ctx * sctx, ld_context *lctx );
+rc_t load_metrics_src( met_ctx * sctx, KDirectory * hdf5_src );
+rc_t finish_metrics( met_ctx * sctx );
+
+rc_t load_metrics( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-passes.c b/tools/pacbio-load/pl-passes.c
new file mode 100644
index 0000000..83fb195
--- /dev/null
+++ b/tools/pacbio-load/pl-passes.c
@@ -0,0 +1,437 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-passes.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+const char * passes_tab_names[] = 
+{ 
+    "ADAPTER_HIT_BEFORE",
+    "ADAPTER_HIT_AFTER",
+    "PASS_DIRECTION",
+    "PASS_NUM_BASES",
+    "PASS_START_BASE"
+};
+
+
+typedef struct Passes_src
+{
+    af_data AdapterHitBefore;
+    af_data AdapterHitAfter;
+    af_data PassDirection;
+    af_data PassNumBases;
+    af_data PassStartBase;
+} Passes_src;
+
+
+static void init_Passes_src( Passes_src *tab )
+{
+    init_array_file( &tab->AdapterHitBefore );
+    init_array_file( &tab->AdapterHitAfter );
+    init_array_file( &tab->PassDirection );
+    init_array_file( &tab->PassNumBases );
+    init_array_file( &tab->PassStartBase );
+}
+
+
+static void close_Passes_src( Passes_src *tab )
+{
+    free_array_file( &tab->AdapterHitBefore );
+    free_array_file( &tab->AdapterHitAfter );
+    free_array_file( &tab->PassDirection );
+    free_array_file( &tab->PassNumBases );
+    free_array_file( &tab->PassStartBase );
+}
+
+static rc_t open_Passes_src( const KDirectory *hdf5_dir, Passes_src *tab,
+                             const char * path, bool cache_content )
+{
+    rc_t rc;
+
+    init_Passes_src( tab );
+
+    rc = open_element( hdf5_dir, &tab->AdapterHitBefore, path, "AdapterHitBefore",
+                  ADAPTER_HIT_BEFORE_BITSIZE, ADAPTER_HIT_BEFORE_COLS, 
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->AdapterHitAfter, path, "AdapterHitAfter",
+                  ADAPTER_HIT_AFTER_BITSIZE, ADAPTER_HIT_AFTER_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )    
+        rc = open_element( hdf5_dir, &tab->PassDirection, path, "PassDirection",
+                  PASS_DIRECTION_BITSIZE, PASS_DIRECTION_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )    
+        rc = open_element( hdf5_dir, &tab->PassNumBases, path, "PassNumBases",
+                  PASS_NUM_BASES_BITSIZE, PASS_NUM_BASES_COLS,
+                  true, cache_content, false );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->PassStartBase, path, "PassStartBase",
+                  PASS_START_BASE_BITSIZE, PASS_START_BASE_COLS,
+                  true, cache_content, false );
+    if ( rc != 0 )
+        close_Passes_src( tab );
+    return rc;
+}
+
+
+static bool check_Passes_ext( af_data *af, bool *needed, uint64_t *expected,
+                              const char * s )
+{
+    bool res = true;
+
+    if ( *needed )
+    {
+        *expected = af->extents[ 0 ];
+        *needed = false;
+    }
+    else
+        res = check_table_count( af, s, *expected );
+    return res;
+}
+
+
+static bool check_Passes_extents( Passes_src *tab )
+{
+    bool res = true;
+    bool needed = true;
+    uint64_t expected = 0;
+
+    if ( tab->AdapterHitBefore.rc == 0 && res )
+        res = check_Passes_ext( &tab->AdapterHitBefore, &needed, &expected, "AdapterHitBefore" );
+
+    if ( tab->AdapterHitAfter.rc == 0 && res )
+        res = check_Passes_ext( &tab->AdapterHitAfter, &needed, &expected, "AdapterHitAfter" );
+
+    if ( tab->PassDirection.rc == 0 && res )
+        res = check_Passes_ext( &tab->PassDirection, &needed, &expected, "PassDirection" );
+
+    if ( tab->PassNumBases.rc == 0 && res )
+        res = check_Passes_ext( &tab->PassNumBases, &needed, &expected, "PassNumBases" );
+
+    if ( tab->PassStartBase.rc == 0 && res )
+        res = check_Passes_ext( &tab->PassStartBase, &needed, &expected, "PassStartBase" );
+
+    return res;
+}
+
+
+#define PASS_BLOCK_SIZE 1024
+
+typedef struct pass_block
+{
+    uint8_t  AdapterHitBefore[ PASS_BLOCK_SIZE ];
+    uint8_t  AdapterHitAfter[ PASS_BLOCK_SIZE ];
+    uint8_t  PassDirection[ PASS_BLOCK_SIZE ];
+    uint32_t PassNumBases[ PASS_BLOCK_SIZE ];
+    uint32_t PassStartBase[ PASS_BLOCK_SIZE ];
+    uint64_t n_read;
+} pass_block;
+
+
+static rc_t pass_block_read_from_src( Passes_src *tab,
+                                      const uint64_t total_passes,
+                                      const uint64_t pos,
+                                      pass_block * block )
+{
+    rc_t rc = 0;
+    uint64_t to_read = PASS_BLOCK_SIZE;
+    uint64_t read; 
+
+    block->n_read = 0;
+    if ( ( pos + to_read ) >= total_passes )
+        to_read = ( total_passes - pos );
+
+    if ( tab->AdapterHitBefore.rc == 0 )
+        rc = array_file_read_dim1( &tab->AdapterHitBefore, pos, 
+                                   &block->AdapterHitBefore[0],
+                                   to_read, &read );
+    else
+        memset( &block->AdapterHitBefore[0], 0, to_read * sizeof( uint8_t ) );
+
+
+    if ( rc == 0 && tab->AdapterHitAfter.rc == 0 )
+        rc = array_file_read_dim1( &tab->AdapterHitAfter, pos, 
+                                   &block->AdapterHitAfter[0],
+                                   to_read, &read );
+    else
+        memset( &block->AdapterHitAfter[0], 0, to_read * sizeof( uint8_t ) );
+
+    if ( rc == 0 && tab->PassDirection.rc == 0 )
+        rc = array_file_read_dim1( &tab->PassDirection, pos, 
+                                   &block->PassDirection[0],
+                                   to_read, &read );
+    else
+        memset( &block->PassDirection[0], 0, to_read * sizeof( uint8_t ) );
+
+    if ( rc == 0 && tab->PassNumBases.rc == 0 )
+        rc = array_file_read_dim1( &tab->PassNumBases, pos, 
+                                   &block->PassNumBases[0],
+                                   to_read, &read );
+    else
+        memset( &block->PassNumBases[0], 0, to_read * sizeof( uint32_t ) );
+
+    if ( rc == 0 && tab->PassStartBase.rc == 0 )
+        rc = array_file_read_dim1( &tab->PassStartBase, pos, 
+                                   &block->PassStartBase[0],
+                                   to_read, &read );
+    else
+        memset( &block->PassStartBase[0], 0, to_read * sizeof( uint32_t ) );
+
+    if ( rc == 0 )
+        block->n_read = read;
+
+    return rc;
+}
+
+
+static rc_t passes_load_pass( VCursor *cursor, pass_block *block,
+                              const uint32_t idx, uint32_t *col_idx )
+{
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        LOGERR( klogErr, rc, "cannot open passes-row" );
+
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, 
+                        col_idx[ passes_tab_ADAPTER_HIT_BEFORE ],
+                        block->AdapterHitBefore[ idx ],
+                        "passes.AdapterHitBefore" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, 
+                        col_idx[ passes_tab_ADAPTER_HIT_AFTER ],
+                        block->AdapterHitAfter[ idx ],
+                        "passes.AdapterHitAfter" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, 
+                        col_idx[ passes_tab_PASS_DIRECTION ],
+                        block->PassDirection[ idx ],
+                        "passes.PassDirection" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, 
+                        col_idx[ passes_tab_PASS_NUM_BASES ],
+                        block->PassNumBases[ idx ],
+                        "passes.PassNumBases" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, 
+                        col_idx[ passes_tab_PASS_START_BASE ],
+                        block->PassStartBase[ idx ],
+                        "passes.PassStartBase" );
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot commit passes-row" );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot close passes-row" );
+    }
+
+    return rc;
+}
+
+
+static rc_t passes_load_loop( ld_context *lctx, VCursor * cursor, Passes_src *tab,
+                              uint32_t *col_idx )
+{
+    rc_t rc = 0;
+    KLogLevel tmp_lvl;
+    pass_block block;
+    pl_progress *progress;
+    uint64_t pos = 0;
+    uint64_t total_passes = tab->AdapterHitBefore.extents[0];
+
+    pl_progress_make( &progress, total_passes );
+    rc = progress_chunk( &lctx->xml_progress, total_passes );
+
+    tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+    PLOGMSG( klogInfo, ( klogInfo,
+                         "loading passes-table ( $(rows) rows ) :",
+                         "rows=%lu", total_passes ));
+    KLogLevelSet( tmp_lvl );
+
+    while( pos < total_passes && rc == 0 )
+    {
+        rc = pass_block_read_from_src( tab, total_passes, pos, &block );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < block.n_read && rc == 0; ++i )
+            {
+                rc = Quitting();
+                if ( rc == 0 )
+                {
+                    rc = passes_load_pass( cursor, &block, i, col_idx );
+                    if ( rc == 0 )
+                    {
+                        rc = progress_step( lctx->xml_progress );
+                        if ( lctx->with_progress )
+                            pl_progress_increment( progress, 1 );
+                    }
+                }
+                else
+                    LOGERR( klogErr, rc, "...loading passes interrupted" );
+            }
+            pos += block.n_read;
+        }
+    }
+
+    pl_progress_destroy( progress );
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommit( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot commit cursor on PASSES-tab" );
+    }
+    return rc;
+}
+
+
+static rc_t passes_loader( ld_context * lctx, KDirectory * hdf5_src, VCursor * cursor, const char * table_name )
+{
+    uint32_t col_idx[ passes_tab_count ];
+    rc_t rc = add_columns( cursor, passes_tab_count, -1, col_idx, passes_tab_names );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot open cursor on PASSES-tab" );
+        else
+        {
+            Passes_src Passes;
+            rc = open_Passes_src( hdf5_src, &Passes,
+                                  "PulseData/ConsensusBaseCalls/Passes",
+                                  lctx->cache_content );
+            if ( rc == 0 )
+            {
+                if ( check_Passes_extents( &Passes ) )
+                    rc = passes_load_loop( lctx, cursor, &Passes, col_idx );
+                else
+                    rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                close_Passes_src( &Passes );
+            }
+        }
+    }
+    return rc;
+}
+
+/* HDF5-Groups and tables used to load the PASSES-table */
+static const char * passes_groups_to_check[] = 
+{ 
+    "PulseData/ConsensusBaseCalls/Passes",
+    NULL
+};
+
+static const char * passes_tables_to_check[] = 
+{ 
+    "PulseData/ConsensusBaseCalls/Passes/AdapterHitAfter",
+    "PulseData/ConsensusBaseCalls/Passes/AdapterHitBefore",
+    "PulseData/ConsensusBaseCalls/Passes/PassDirection",
+    "PulseData/ConsensusBaseCalls/Passes/PassNumBases",
+    "PulseData/ConsensusBaseCalls/Passes/PassStartBase",
+    NULL
+};
+
+static const char * passes_schema_template = "PASSES";
+static const char * passes_table_to_create = "PASSES";
+
+
+rc_t prepare_passes( VDatabase * database, pas_ctx * sctx, ld_context *lctx )
+{
+    rc_t rc = prepare_table( database, &sctx->cursor,
+            passes_schema_template, passes_table_to_create ); /* pl-tools.c ... this creates the cursor */
+    if ( rc == 0 )
+    {
+        rc = add_columns( sctx->cursor, passes_tab_count, -1, sctx->col_idx, passes_tab_names );
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen( sctx->cursor );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "cannot open cursor on PASSES-tab" );
+            }
+            else
+            {
+                sctx->lctx = lctx;
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t load_passes_src( pas_ctx * sctx, KDirectory * hdf5_src )
+{
+    Passes_src Passes;
+    rc_t rc = 0;
+
+    if ( sctx->lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, passes_groups_to_check, 
+                                passes_tables_to_check, false );
+    if ( rc == 0 )
+        rc = open_Passes_src( hdf5_src, &Passes, "PulseData/ConsensusBaseCalls/Passes",
+                               sctx->lctx->cache_content );
+    if ( rc == 0 )
+    {
+        if ( check_Passes_extents( &Passes ) )
+            rc = passes_load_loop( sctx->lctx, sctx->cursor, &Passes, sctx->col_idx );
+        else
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+        close_Passes_src( &Passes );
+    }
+    return rc;
+}
+
+
+rc_t finish_passes( pas_ctx * sctx )
+{
+    VCursorRelease( sctx->cursor );
+    return 0;
+}
+
+
+rc_t load_passes( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx )
+{
+    rc_t rc = 0;
+    if ( lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, passes_groups_to_check, 
+                                passes_tables_to_check, false );
+    if ( rc == 0 )
+        rc = load_table( database, hdf5_src, lctx, passes_schema_template, 
+                         passes_table_to_create, passes_loader );
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-passes.h b/tools/pacbio-load/pl-passes.h
new file mode 100644
index 0000000..6bb6c1c
--- /dev/null
+++ b/tools/pacbio-load/pl-passes.h
@@ -0,0 +1,70 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_passes_
+#define _h_pl_passes_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-progress.h"
+#include <klib/rc.h>
+#include <kapp/main.h>
+
+/* enumeration of the columns of the passes-table */
+enum
+{
+    /* consensus-space */
+    passes_tab_ADAPTER_HIT_BEFORE,
+    passes_tab_ADAPTER_HIT_AFTER,
+    passes_tab_PASS_DIRECTION,
+    passes_tab_PASS_NUM_BASES,
+    passes_tab_PASS_START_BASE,
+    passes_tab_count
+};
+
+
+typedef struct pas_ctx
+{
+    VCursor * cursor;
+    ld_context *lctx;
+    uint32_t col_idx[ passes_tab_count ];
+} pas_ctx;
+
+
+rc_t prepare_passes( VDatabase * database, pas_ctx * sctx, ld_context *lctx );
+rc_t load_passes_src( pas_ctx * sctx, KDirectory * hdf5_src );
+rc_t finish_passes( pas_ctx * sctx );
+
+
+rc_t load_passes( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-progress.c b/tools/pacbio-load/pl-progress.c
new file mode 100644
index 0000000..f905614
--- /dev/null
+++ b/tools/pacbio-load/pl-progress.c
@@ -0,0 +1,195 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+typedef struct pl_progress
+{
+    bool initialized;
+    uint8_t fract_digits;
+    uint64_t count;
+    uint64_t position;
+    uint16_t percent;
+} pl_progress;
+
+
+static uint8_t pl_calc_fract_digits( const uint64_t count )
+{
+    uint8_t res = 0;
+    if ( count > 10000 )
+    {
+        if ( count > 100000 )
+            res = 2;
+        else
+            res = 1;
+    }
+    return res;
+}
+
+
+rc_t pl_progress_make( pl_progress ** pb, const uint64_t count )
+{
+    if ( pb == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    (*pb) = calloc( 1, sizeof( struct pl_progress ) );
+    if ( *pb == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    (*pb)->count = count;
+    (*pb)->fract_digits = pl_calc_fract_digits( count );
+    (*pb)->position = 0;
+    return 0;
+}
+
+
+rc_t pl_progress_destroy( pl_progress * pb )
+{
+    if ( pb == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+    free( pb );
+    return KOutMsg( "\n" );
+    return 0;
+}
+
+
+static void progess_0a( const uint16_t percent )
+{
+    KOutMsg( "| %2u%%", percent );
+}
+
+
+static void progess_0( const uint16_t percent )
+{
+    if ( percent & 1 )
+        KOutMsg( "\b\b\b\b- %2u%%", percent );
+    else
+        KOutMsg( "\b\b\b%2u%%", percent );
+}
+
+
+static void progess_1a( const uint16_t percent )
+{
+    uint16_t p1 = percent / 10;
+    uint16_t p0 = percent - ( p1 * 10 );
+    KOutMsg( "| %2u.%01u%%", p1, p0 );
+}
+
+
+static void progess_1( const uint16_t percent )
+{
+    uint16_t p1 = percent / 10;
+    uint16_t p0 = percent - ( p1 * 10 );
+    if ( ( p1 & 1 )&&( p0 == 0 ) )
+        KOutMsg( "\b\b\b\b\b\b- %2u.%01u%%", p1, p0 );
+    else
+        KOutMsg( "\b\b\b\b\b%2u.%01u%%", p1, p0 );
+}
+
+
+static void progess_2a( const uint16_t percent )
+{
+    uint16_t p1 = percent / 100;
+    uint16_t p0 = percent - ( p1 * 100 );
+    KOutMsg( "| %2u.%02u%%", p1, p0 );
+}
+
+
+static void progess_2( const uint16_t percent )
+{
+    uint16_t p1 = percent / 100;
+    uint16_t p0 = percent - ( p1 * 100 );
+    if ( ( p1 & 1 )&&( p0 == 0 ) )
+        KOutMsg( "\b\b\b\b\b\b\b- %2u.%02u%%", p1, p0 );
+    else
+        KOutMsg( "\b\b\b\b\b\b%2u.%02u%%", p1, p0 );
+}
+
+
+uint32_t calc_percent( pl_progress * pb )
+{
+    uint32_t res = 0;
+    uint32_t factor = 100;
+    if ( pb->fract_digits > 0 )
+    {
+        if ( pb->fract_digits > 1 )
+            factor = 10000;
+        else
+            factor = 1000;
+    }
+        
+    if ( pb->count > 0 )
+    {
+        if ( pb->position >= pb->count )
+            res = factor;
+        else
+        {
+            uint64_t temp = pb->position;
+            temp *= factor;
+            temp /= pb->count;
+            res = (uint32_t) temp;
+        }
+    }
+    return res;
+}
+
+
+rc_t pl_progress_increment( pl_progress * pb, const uint64_t step )
+{
+    uint32_t percent;
+    if ( pb == NULL )
+        return RC( rcVDB, rcNoTarg, rcParsing, rcSelf, rcNull );
+
+    pb->position += step;
+    percent = calc_percent( pb );
+    if ( pb->initialized )
+    {
+        if ( pb->percent != percent )
+        {
+            pb->percent = percent;
+            switch( pb->fract_digits )
+            {
+            case 0 : progess_0( percent ); break;
+            case 1 : progess_1( percent ); break;
+            case 2 : progess_2( percent ); break;
+            }
+        }
+    }
+    else
+    {
+        pb->percent = percent;
+        switch( pb->fract_digits )
+        {
+        case 0 : progess_0a( percent ); break;
+        case 1 : progess_1a( percent ); break;
+        case 2 : progess_2a( percent ); break;
+        }
+        pb->initialized = true;
+    }
+    return 0;
+}
diff --git a/tools/pacbio-load/pl-progress.h b/tools/pacbio-load/pl-progress.h
new file mode 100644
index 0000000..e4c05b6
--- /dev/null
+++ b/tools/pacbio-load/pl-progress.h
@@ -0,0 +1,70 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pl_progress_
+#define _h_pl_progress_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct pl_progress pl_progress;
+
+/*--------------------------------------------------------------------------
+ * make_progressbar
+ *
+ *  creates a progressbar with zero-values inside
+ *  does not output anything
+ */
+rc_t pl_progress_make( pl_progress ** pb, const uint64_t count );
+
+
+/*--------------------------------------------------------------------------
+ * destroy_progressbar
+ *
+ *  destroy's the progressbar
+ *  does not output anything
+ */
+rc_t pl_progress_destroy( pl_progress * pb );
+
+
+/*--------------------------------------------------------------------------
+ * update_progressbar
+ *
+ *  sets the progressbar to a specific percentage
+ *  outputs only if the percentage has changed from the last call
+ *  the precentage is in 1/10-th of a percent ( 21,6% = 216 )
+ *  expects the percents in increasing order ( does not jump back )
+ *  writes a growing bar made from '-'-chars every 2nd percent
+ */
+rc_t pl_progress_increment( pl_progress * pb, const uint64_t step );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-regions.c b/tools/pacbio-load/pl-regions.c
new file mode 100644
index 0000000..4a4ea28
--- /dev/null
+++ b/tools/pacbio-load/pl-regions.c
@@ -0,0 +1,1048 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-regions.h"
+#include <insdc/sra.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+enum
+{
+    pacbio_idx_spot_id = 0,
+    pacbio_idx_type,
+    pacbio_idx_start,
+    pacbio_idx_end,
+    pacbio_idx_score
+};
+
+
+/* HDF5-Groups and tables used to use the REGIONS-table */
+static const char * region_groups_to_check[] = 
+{ 
+    "PulseData",
+    NULL
+};
+
+static const char * region_tables_to_check[] = 
+{ 
+    "PulseData/Regions",
+    NULL
+};
+
+
+void rgn_stat_init( regions_stat * stat )
+{
+    stat->inserts = 0;
+    stat->expands_a = 0;
+    stat->expands_i = 0;
+    stat->inserts_spots = 0;
+    stat->expands_spots = 0;
+    stat->end_gap = 0;
+    stat->overlapps = 0;
+    stat->removed = 0;
+}
+
+
+void rgn_init( regions *rgn )
+{
+    init_array_file( &rgn->hdf5_regions );
+
+    VectorInit ( &rgn->read_Regions, 0, 5 );
+    VectorInit ( &rgn->sort_Regions, 0, 5 );
+    VectorInit ( &rgn->stock_Regions, 0, 5 );
+
+    rgn->data_32 = NULL;
+    rgn->data_32_len = 0;
+    rgn->data_8 = NULL;
+    rgn->data_8_len = 0;
+
+    rgn->offset = 0;
+    rgn->spot_id = 0;
+    rgn->spot_len = 0;
+    rgn->hq_rgn.start = 0;
+    rgn->hq_rgn.end = 0;
+
+    rgn_stat_init( &( rgn->stat ) );
+
+    rgn->complete_table = NULL;
+    rgn->table_index = NULL;
+}
+
+
+static void CC region_whack( void * item, void * data )
+{
+    free( item );
+}
+
+
+static rc_t rgn_vector_move( Vector * src, Vector * dst )
+{
+    rc_t rc = 0;
+    while ( VectorLength( src ) > 0 && rc == 0 )
+    {
+        region *ptr;
+        rc = VectorRemove ( src, 0, (void**)&ptr );
+        if ( rc == 0 )
+            rc = VectorAppend ( dst, NULL, ptr );
+    }
+    return rc;
+}
+
+
+void rgn_free( regions *rgn )
+{
+    free_array_file( &rgn->hdf5_regions );
+
+    VectorWhack ( &rgn->read_Regions, region_whack, NULL );
+    VectorWhack ( &rgn->sort_Regions, region_whack, NULL );
+    VectorWhack ( &rgn->stock_Regions, region_whack, NULL );
+
+    if ( rgn->data_32 != NULL )
+        free( rgn->data_32 );
+    if ( rgn->data_8 != NULL )
+        free( rgn->data_8 );
+
+    if ( rgn->complete_table != NULL )
+        free( rgn->complete_table );
+    if ( rgn->table_index != NULL )
+        free( rgn->table_index );
+}
+
+
+static
+int64_t CC rgn_sort_callback( const void *p1, const void *p2, void * data )
+{
+    regions *rgn = ( regions * ) data;
+    int32_t idx1 = *( int32_t * ) p1;
+    int32_t idx2 = *( int32_t * ) p2;
+    int32_t spot_id1 = rgn->complete_table[ idx1 * RGN_COLUMN_COUNT ];
+    int32_t spot_id2 = rgn->complete_table[ idx2 * RGN_COLUMN_COUNT ];
+    if ( spot_id1 == spot_id2 )
+        return ( idx1 - idx2 );
+    return ( spot_id1 - spot_id2 );
+}
+
+
+static
+rc_t rgn_read_complete_table( regions *rgn )
+{
+    rc_t rc;
+    uint32_t rowcount = rgn->hdf5_regions.extents[ 0 ];
+    uint32_t rowsize = sizeof( int32_t ) * RGN_COLUMN_COUNT;
+
+    rgn->complete_table = malloc( rowcount * rowsize );
+    if ( rgn->complete_table == NULL )
+        rc = RC( rcExe, rcNoTarg, rcLoading, rcMemory, rcExhausted );
+    else
+    {
+        rgn->table_index = malloc( sizeof( uint32_t ) * rowcount );
+        if ( rgn->table_index == NULL )
+        {
+            free( rgn->complete_table );
+            rgn->complete_table = NULL;
+            rc = RC( rcExe, rcNoTarg, rcLoading, rcMemory, rcExhausted );
+        }
+        else
+        {
+            uint64_t n_read = 0;
+
+            /* now let's read the whole table... */
+            rc = array_file_read_dim2( &(rgn->hdf5_regions), 0, rgn->complete_table,
+                                       rowcount, RGN_COLUMN_COUNT, &n_read );
+            if ( rc == 0 )
+            {
+                uint32_t idx, first_spot_id;
+
+                first_spot_id = rgn->complete_table[ pacbio_idx_spot_id ];
+                if ( first_spot_id != 0 )
+                {
+                    /* in case the file we are loading is part of a multi-file submission */
+                    for ( idx = 0; idx < rowcount; ++idx )
+                        rgn->complete_table[ ( idx * RGN_COLUMN_COUNT ) + pacbio_idx_spot_id ] -= first_spot_id;
+                }
+                
+                /* first let's fill the index, first with ascending row-id's */
+                for ( idx = 0; idx < rowcount; ++idx )
+                    rgn->table_index[ idx ] = idx;
+
+                /* now sort the index-array by the content's spot-id's */
+                ksort ( rgn->table_index, rowcount, sizeof( uint32_t ),
+                        rgn_sort_callback, rgn );
+                
+                /* left here to print a debug-output of the sorted table-index */
+                /*
+                for ( idx = rowcount - 128; idx < rowcount; ++idx )
+                    OUTMSG(( "idx[%i] = %i -> %i\n", 
+                             idx, rgn->table_index[ idx ], 
+                             rgn->complete_table[ rgn->table_index[ idx ] * RGN_COLUMN_COUNT ] ));
+                */
+
+                /* the table and the index is now ready to use... */
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_open( const KDirectory *hdf5_dir, regions *rgn )
+{
+    rc_t rc;
+    rgn_init( rgn );
+    /* check if the necessary groups/tables are there */
+    rc = check_src_objects( hdf5_dir, region_groups_to_check, 
+                            region_tables_to_check, false );
+    if ( rc == 0 )
+    {
+        /* open the region-table... */
+        rc = open_element( hdf5_dir, &rgn->hdf5_regions,
+                           region_groups_to_check[ 0 ], "Regions", 
+                           REGIONS_BITSIZE, REGIONS_COLS, true, false, true );
+        if ( rc == 0 )
+            rc = rgn_read_complete_table( rgn );
+    }
+    if ( rc != 0 )
+        rgn_free( rgn );
+    return rc;
+}
+
+
+static rc_t rgn_get_or_make( Vector * stock, region ** r )
+{
+    rc_t rc = 0;
+    /* take it out of the stock or make a new one... */
+    if ( VectorLength( stock ) > 0 )
+        rc = VectorRemove ( stock, 0, (void**)r );
+    else
+        *r = malloc( sizeof ** r );
+
+    if ( *r == NULL )
+        rc = RC( rcExe, rcNoTarg, rcLoading, rcMemory, rcExhausted );
+    return rc;
+}
+
+
+static int64_t CC rgn_sort_by_start( const void *item, const void *n )
+{
+    region * v1 = ( region * )item;
+    region * v2 = ( region * )n;
+    if ( v1 -> start != v2 -> start )
+        return ( v1->start - v2->start );
+    return ( v1->end - v2->end );
+}
+
+
+static rc_t rgn_store_bio_or_adapter( Vector * stock, Vector * to,
+                                      const int32_t * block, int32_t sra_read_type )
+{
+    rc_t rc = 0;
+
+    if ( block[ pacbio_idx_start ] < block[ pacbio_idx_end ] )
+    {
+        region * a_region;
+        rc = rgn_get_or_make( stock, &a_region );
+        if ( rc == 0 )
+        {
+            a_region->spot_id = block[ pacbio_idx_spot_id ];
+            a_region->type    = sra_read_type;
+            a_region->start   = block[ pacbio_idx_start ];
+            a_region->end     = block[ pacbio_idx_end ];
+
+            /* see every region shorter as MIN_BIOLOGICAL_LEN 
+               as a technical (adapter) region */
+            if ( ( a_region->end - a_region->start ) <= MIN_BIOLOGICAL_LEN )
+                a_region->type = SRA_READ_TYPE_TECHNICAL;
+
+            a_region->filter  = SRA_READ_FILTER_PASS;
+            rc = VectorInsert ( to, a_region, NULL, rgn_sort_by_start );
+        }
+    }
+    return rc;
+}
+
+static rc_t rgn_store_block( Vector * stock, Vector * to, hq_region * hq,
+                             const int32_t * block, region_type_mapping *mapping,
+                             bool *have_high_quality )
+{
+    rc_t rc = 0;
+    int32_t type = block[ pacbio_idx_type ];
+
+    if ( mapping->rgn_type_hq >=0 && type == mapping->rgn_type_hq )
+    {
+        /* it is an error if we have more than one high-quality-region! */
+        assert ( ! * have_high_quality );
+
+        if ( * have_high_quality )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            LOGERR( klogErr, rc, "(* have_high_quality) in rgn_store_block()'" );
+            return rc;
+        }
+
+        hq->start = block[ pacbio_idx_start ];
+        hq->end   = block[ pacbio_idx_end ];
+        * have_high_quality = true;
+    }
+    else if ( mapping->rgn_type_ga >= 0 && type == mapping->rgn_type_ga )
+    {   /* so far do nothing with the "global accuracy" region */
+    }
+    else if ( mapping->rgn_type_adapter >= 0 && type == mapping->rgn_type_adapter )
+    {   /* it is an adapter */
+        rc = rgn_store_bio_or_adapter( stock, to, block, SRA_READ_TYPE_TECHNICAL );
+    }
+    else if ( mapping->rgn_type_insert >= 0 && type == mapping->rgn_type_insert )
+    {   /* it is an insert */
+        rc = rgn_store_bio_or_adapter( stock, to, block, SRA_READ_TYPE_BIOLOGICAL );
+    }
+    else
+    {   /* the type is unknown */
+        ( mapping->count_of_unknown_rgn_types )++;
+        /*
+        rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+        LOGERR( klogErr, rc, "( region type is unknown ) in rgn_store_block()'" );
+        */
+    }
+    return rc;
+}
+
+
+/* inserts the generated region into the sort_Regions */
+static rc_t rgn_generate( Vector * stock, Vector * dst,
+                          const int32_t spot_id, const uint32_t start, const uint32_t len )
+{
+    region * a_region;
+    rc_t rc = rgn_get_or_make( stock, &a_region );
+    if ( rc == 0 )
+    {
+        a_region->spot_id = spot_id;
+        a_region->type    = SRA_READ_TYPE_TECHNICAL; /*means "i dont know"*/
+        a_region->start   = start;
+        a_region->end     = start + len;
+        a_region->filter  = SRA_READ_FILTER_CRITERIA;
+        rc = VectorInsert ( dst, a_region, NULL, rgn_sort_by_start );
+    }
+    return rc;
+}
+
+
+/* *************************************************************
+declares all regions inside and touching the HQ-Regions as
+    SRA_READ_FILTER_PASS outside becomes SRA_READ_FILTER_CRITERIA;
+************************************************************* */
+#if 0
+static rc_t rgn_apply_filter( Vector * stock, Vector * v, hq_region * hq,
+                              const int32_t spot_id, const uint32_t spot_len )
+{
+    rc_t rc = 0;
+
+    if ( hq->start == 0 && hq->end == 0 )
+    {
+        /* we have no HQ-Region, discard everything and create one
+           READ for the whole spot, that will be TECHNICAL... */
+        rgn_vector_move( v, stock );
+
+        if ( spot_len > 0 )
+            /* inserts the generated region into the sort_Regions */
+            rc = rgn_generate( stock, v, spot_id, 0, spot_len );
+    }
+    else
+    {
+        uint32_t i, count = VectorLength ( v );
+        for ( i = 0; i < count; ++ i )
+        {
+            region * a_region = VectorGet ( v, i );
+            if ( a_region != NULL )
+            {
+                bool set_invalid = ( ( a_region->end <= hq->start ) ||
+                                     ( a_region->start >= hq->end ) );
+                if ( set_invalid )
+                {
+                    /* the region is before the hq-region
+                       ---> set to SRA_READ_FILTER_CRITERIA */
+                    a_region->filter = SRA_READ_FILTER_CRITERIA;
+                    a_region->type = SRA_READ_TYPE_TECHNICAL;
+                }
+                else
+                {
+                    /* the region intersects with the hq-region 
+                       ---> set to SRA_READ_FILTER_PASS */
+                    a_region->filter = SRA_READ_FILTER_PASS;
+                }
+            }
+        }
+    }
+    return rc;
+}
+#endif
+
+static bool rgn_expand_last_rgn_by_1( Vector * v, int32_t *expands_a, int32_t *expands_i )
+{
+    region * a_region = VectorLast ( v );
+    bool res = ( a_region != NULL );
+    if ( res )
+    {
+        a_region->end += 1;
+        if ( a_region->type == SRA_READ_TYPE_TECHNICAL )
+            (*expands_a)++;
+        else
+            (*expands_i)++;
+    }
+    return res;
+}
+
+
+/* *************************************************************
+if gap is 1, expand previous region by 1 (correct off-by-1)
+fill in gaps > 1 ( regions are not consecutive )
+correct overlapping regions
+fill in a gap at the end, if the last region does not reach spotlen
+
+    INTPUT : rgn->read_Regions
+    OUTPUT : rgn->sort_Regions
+************************************************************* */
+static rc_t rgn_correct( Vector * stock, Vector * from, Vector * to,
+                         const uint32_t spot_id, const uint32_t spot_len,
+                         regions_stat * stats )
+{
+    rc_t rc;
+    int32_t start, expands_a = 0, expands_i = 0, inserts = 0;
+    uint32_t i, count = VectorLength ( from );
+
+    for ( rc = 0, start = 0, i = 0; i < count && rc == 0; ++ i )
+    {
+        region * a_region;
+
+        /* take the region out of rgn->read_Regions*/
+        rc = VectorRemove ( from, 0, (void**)&a_region );
+        if ( rc == 0 )
+        {
+            int32_t gap_len = ( a_region->start - start );
+
+            if ( gap_len == 1 )
+            {
+                /* the gap-length is one, try to expand the previous region */
+                if ( !rgn_expand_last_rgn_by_1( to, &expands_a, &expands_i ) )
+                {
+                    /* there is no previous region ! */
+                    rc = rgn_generate( stock, to, spot_id, start, gap_len );
+                }
+            }
+            else if ( gap_len > 1 )
+            {
+                /* generate a artificial gap in the middle or the start of the spot */
+                rc = rgn_generate( stock, to, spot_id, start, gap_len );
+                inserts++;
+            }
+            else if ( gap_len < 0 )
+            {
+                /* a negative gap would be an error in the sorting of the regions,
+                   or an overlapp of regions */
+                if ( ( a_region->start - gap_len )  > a_region->end )
+                {
+                    rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+                    LOGERR( klogErr, rc, "((a_region->start-gap_len)>a_region->end) in rgn_correct()'" );
+                }
+                else /** move the start point ***/
+                {
+                    a_region->start -= gap_len;
+                    stats->overlapps++;
+                }
+            }
+            
+            if ( rc == 0 )
+            {
+                rc = VectorInsert ( to, a_region, NULL, rgn_sort_by_start );
+                if ( rc != 0 )
+                    LOGERR( klogErr, rc, "VectorInsert(rgn_sort_by_start) in rgn_correct()'" );
+                start = a_region->end;
+            }
+            else
+            {
+                rc_t rc1 = VectorInsert( stock, a_region, NULL, NULL );
+                if ( rc1 != 0 )
+                    LOGERR( klogErr, rc, "VectorInsert(NULL) in rgn_correct()'" );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        /* if the last region does not reach to the end of the spot */
+        if ( start < spot_len )
+        {
+            int32_t gap_len = ( spot_len - start );
+            if ( gap_len == 1 )
+            {
+                /* !!! this can also happen if spot_len == 1 !!! */
+                /* the gap-length is one, try to expand the previous region */
+                if ( ! rgn_expand_last_rgn_by_1( to, &expands_a, &expands_i ) )
+                {
+                    /* there is no previous region ! */
+                    rc = rgn_generate( stock, to, spot_id, start, gap_len );
+                    stats->end_gap++;
+                }
+            }
+            else if ( gap_len > 0 )
+            {
+                /* fill the gap to the end... */
+                rc = rgn_generate( stock, to, spot_id, start, gap_len );
+                stats->end_gap++;
+            }
+            else if ( gap_len < 0 )
+            {
+                /* a negative gap would be an error in the sorting of the regions,
+                   or an overlapp of regions */
+                rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+                LOGERR( klogErr, rc, "(gap_len<0) in rgn_correct()'" );
+            }
+        }
+    }
+
+    /* do some statistics */
+    if ( ( expands_i + expands_a ) > 0 )
+    {
+        stats->expands_a += expands_a;
+        stats->expands_i += expands_i;
+        stats->expands_spots++;
+    }
+    if ( inserts > 0 )
+    {
+        stats->inserts += inserts;
+        stats->inserts_spots++;
+    }
+
+    return rc;
+}
+
+
+/* *************************************************************
+tries to merge overlapping adapter-regions...
+( uses rgn->read_Regions as scratch-pad )
+
+    INTPUT : rgn->sort_Regions
+    OUTPUT : rgn->sort_Regions
+************************************************************* */
+static rc_t rgn_merge_consecutive_regions( Vector * stock, Vector * from, Vector * to )
+{
+    rc_t rc = 0;
+    uint32_t i, count = VectorLength ( from );
+    region * a_region = NULL;
+    region * prev_region = NULL;
+
+    for ( i = 0; i < count && rc == 0; ++ i )
+    {
+        /* take the region out of rgn->sort_Regions*/
+        rc = VectorRemove ( from, 0, (void**)&a_region );
+        if ( rc == 0 )
+        {
+            bool copy = true;
+            if ( prev_region != NULL )
+            {
+                if ( ( a_region->start <= prev_region->end ) &&
+                     ( a_region->type == prev_region->type ) &&
+                     ( a_region->filter == prev_region->filter ) )
+                {
+                    prev_region->end = a_region->end;
+                    /* put the now unused region back into the stock */
+                    VectorAppend ( stock, NULL, a_region );
+                    /* and keep prev-region! */
+                    copy = false;
+                }
+            }
+            if ( copy )
+            {
+                prev_region = a_region;
+                rc = VectorInsert ( to, a_region, NULL, rgn_sort_by_start );
+            }
+        }
+    }
+    return rc;
+}
+
+/* *************************************************************
+tests that the spot-len is covered with regions that
+are not overlapping, have no gaps, start is ascending
+the regions to check are in rgn->sort_Regions
+************************************************************* */
+static rc_t rgn_check( const Vector * v, const uint32_t spot_len )
+{
+    rc_t rc = 0;
+    uint32_t i, count = VectorLength ( v );
+    region * a_region = NULL;
+    int32_t start = 0;
+
+    /* special case, if the spot is empty there are not regions */
+    if ( spot_len == 0 )
+    {
+        if ( count != 0 )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            LOGERR( klogErr, rc, "(spot_len == 0)&&(count!=0) in region-check()'" );
+        }
+        return rc;
+    }
+
+    /* check that we have at least one region in the spot */
+    if ( count < 1 )
+    {
+        rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+        LOGERR( klogErr, rc, "(count<1) in region-check()'" );
+    }
+
+    for ( i = 0; i < count && rc == 0; ++ i )
+    {
+        a_region = VectorGet ( v, i );
+        if ( a_region == NULL )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            LOGERR( klogErr, rc, "(a_region==NULL) in region-check()'" );
+        }
+        else
+        {
+            /* check that the region has no gap and is not overlapping */
+            if ( a_region->start != start )
+            {
+                rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+                PLOGERR( klogErr, ( klogErr, rc, "(a_region->start($(rstart))!=start($(start))) in region-check()'",
+                         "rstart=%u,start=%u", a_region->start, start ) );
+            }
+            else
+            {
+                /* check that the region is ascending */
+                if ( a_region->end < start )
+                {
+                    rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+                    LOGERR( klogErr, rc, "(a_region->end<start) in region-check()'" );
+                }
+                start = a_region->end;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        /* check that the region is fully covered */
+        if ( a_region->end != spot_len )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            LOGERR( klogErr, rc, "(a_region->end!=spot_len) in region-check()'" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_load( regions *rgn, const uint32_t spot_id, 
+               region_type_mapping *mapping, const uint32_t spot_len )
+{
+    rc_t rc;
+    uint64_t row_count = rgn->hdf5_regions.extents[ 0 ];
+
+    /* predefine that we have no HQ-regions read */
+    rgn->hq_rgn.start = 0;
+    rgn->hq_rgn.end = 0;
+
+    /* clear out the read and the sorted vector */
+    rc = rgn_vector_move( &rgn->read_Regions, &rgn->stock_Regions );
+    if ( rc == 0 )
+        rc = rgn_vector_move( &rgn->sort_Regions, &rgn->stock_Regions );
+
+    if ( rc == 0 )
+    {
+        if ( !( rgn->spot_id == 0 || rgn->spot_id == ( spot_id - 1 ) ) )
+            rc = RC( rcExe, rcNoTarg, rcLoading, rcParam, rcInvalid );
+    }
+
+    if ( rc == 0 )
+    {
+        int32_t * block;
+        bool have_high_quality = false;
+        do
+        {
+            int32_t idx = rgn->table_index[ rgn->offset ];
+            block = &( rgn->complete_table[ idx * RGN_COLUMN_COUNT ] );
+            if ( block[ pacbio_idx_spot_id ] == spot_id )
+            {
+                rc = rgn_store_block( &(rgn->stock_Regions), &(rgn->read_Regions),
+                                      &(rgn->hq_rgn), block,
+                                      mapping, & have_high_quality );
+                if ( rc == 0 )
+                    rgn->offset++;
+            }
+
+        } while( rc == 0 && 
+                 block[ pacbio_idx_spot_id ] == spot_id &&
+                 rgn->offset < row_count );
+        rgn->spot_id  = spot_id;
+        rgn->spot_len = spot_len;
+    }
+
+    if ( rc == 0 )
+    {
+#if 0  /**** does not seem to match PacBio ***/
+        /* changes READ_FILTER and READ_TYPE if a region is completely
+           outside of the hq-region... ( if we have one ) 
+           if there is none the whole spot becomes one CRITERIA/TECHNICAL-read */
+        rc = rgn_apply_filter( &(rgn->stock_Regions), &(rgn->read_Regions),
+                               &(rgn->hq_rgn), rgn->spot_id, rgn->spot_len );
+#endif
+
+
+        /* INPUT : rgn->read_Regions / OUTPUT : rgn->sort_Regions */
+        /* fills gaps, corrects off-by-1-errors and overlapping regions */
+        if ( rc == 0 )
+            rc = rgn_correct( &(rgn->stock_Regions), 
+                              &(rgn->read_Regions), &(rgn->sort_Regions), 
+                              rgn->spot_id, rgn->spot_len, &(rgn->stat) );
+
+        /* INPUT : rgn->sort_Regions / OUTPUT : rgn->read_Regions */
+        /* merges consecutive regions if READ_TYPE/READ_FILTER are the same */
+        if ( rc == 0 )
+            rc = rgn_merge_consecutive_regions( &(rgn->stock_Regions),
+                                                &(rgn->sort_Regions),
+                                                &(rgn->read_Regions) );
+
+        /* INPUT : rgn->read_Regions */
+        /* checks that the whole spot is covered, no overlapps/gaps occur,
+           regions have to be sorted in ascending order */
+
+        if ( rc == 0 )
+            rc = rgn_check( &(rgn->read_Regions), rgn->spot_len );
+
+    }
+    return rc;
+}
+
+
+static rc_t rgn_resize_data_32( regions *rgn )
+{
+    rc_t rc = 0;
+    size_t needed_len;
+
+    needed_len = ( sizeof( *rgn->data_32 ) * VectorLength( &rgn->read_Regions ) );
+    if ( rgn->data_32 == NULL )
+    {
+        rgn->data_32 = malloc( needed_len );
+    }
+    else if ( rgn->data_32_len < VectorLength( &rgn->read_Regions ) )
+    {
+        rgn->data_32 = realloc ( rgn->data_32, needed_len );
+    }
+    if ( rgn->data_32 == NULL )
+        rc = RC( rcExe, rcNoTarg, rcLoading, rcMemory, rcExhausted );
+    else
+        rgn->data_32_len = VectorLength( &rgn->read_Regions );
+    return rc;
+}
+
+
+void rgn_set_filter_value_for_all( regions *rgn, const uint32_t filter_value )
+{
+    uint32_t i, n = VectorLength( &rgn->read_Regions );
+    for ( i = 0; i < n; ++i )
+    {
+        region * a_region = VectorGet ( &rgn->read_Regions, i );
+        if ( a_region != NULL )
+            a_region->filter = filter_value;
+    }
+}
+
+
+static rc_t rgn_resize_data_8( regions *rgn )
+{
+    rc_t rc = 0;
+    size_t needed_len;
+
+    needed_len = ( sizeof( *rgn->data_8 ) * VectorLength( &rgn->read_Regions ) );
+    needed_len = (needed_len + 3 ) & ~3; /** to make valgrind happy ***/
+    if ( rgn->data_8 == NULL )
+    {
+        rgn->data_8 = malloc( needed_len );
+    }
+    else if ( rgn->data_8_len < VectorLength( &rgn->read_Regions ) )
+    {
+        rgn->data_8 = realloc ( rgn->data_8, needed_len );
+    }
+    if ( rgn->data_8 == NULL )
+        rc = RC( rcExe, rcNoTarg, rcLoading, rcMemory, rcExhausted );
+    else
+        rgn->data_8_len = VectorLength( &rgn->read_Regions );
+    return rc;
+}
+
+
+rc_t rgn_start_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_32( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint32_t *ptr = rgn->data_32;
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            if ( a_region != NULL )
+                ptr[ i ] = a_region->start;
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_len_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_32( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint32_t *ptr = rgn->data_32;
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            if ( a_region != NULL )
+                ptr[ i ] = ( a_region->end - a_region->start );
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_type_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_8( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint8_t *ptr = rgn->data_8;
+
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            if ( a_region != NULL )
+                ptr[ i ] = a_region->type;
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_filter_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_8( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint8_t *ptr = rgn->data_8;
+
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            if ( a_region != NULL )
+                ptr[ i ] = a_region->filter;
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_label_start_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_32( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint32_t *ptr = rgn->data_32;
+        uint32_t value;
+
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            value = label_lowquality_start; /* default value */
+            if ( a_region != NULL )
+                switch( a_region->type )
+                {
+                case SRA_READ_TYPE_BIOLOGICAL : 
+                    value = label_insert_start;
+                    break;
+                case SRA_READ_TYPE_TECHNICAL  :
+                    value = label_adapter_start;
+/*
+                    if ( a_region->filter == SRA_READ_FILTER_PASS )
+                        value = label_adapter_start;
+                    else
+                        value = label_lowquality_start;
+*/
+                    break;
+                }
+            ptr[ i ] = value;
+        }
+    }
+    return rc;
+}
+
+
+rc_t rgn_label_len_data( regions *rgn, uint32_t *count )
+{
+    rc_t rc = rgn_resize_data_32( rgn );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        uint32_t *ptr = rgn->data_32;
+        uint32_t value;
+
+        *count = VectorLength( &rgn->read_Regions );
+        for ( i = 0; i < (*count); ++i )
+        {
+            region * a_region = VectorGet ( &rgn->read_Regions, i );
+            value = label_lowquality_len; /* default value */
+            if ( a_region != NULL )
+                switch ( a_region->type )
+                {
+                case SRA_READ_TYPE_BIOLOGICAL : 
+                    value = label_insert_len;
+                    break;
+                case SRA_READ_TYPE_TECHNICAL  : 
+                    value = label_adapter_len;
+/*
+                    if ( a_region->filter == SRA_READ_FILTER_PASS )
+                        value = label_adapter_len;
+                    else
+                        value = label_lowquality_len;
+*/
+                    break;
+                }
+            ptr[ i ] = value;
+        }
+    }
+    return rc;
+}
+
+
+static const char rgn_string_adapter[] = "Adapter";
+static const char rgn_string_insert[] = "Insert";
+static const char rgn_string_hq[] = "HQRegion";
+static const char rgn_string_ga[] = "GlobalAccuracy";
+
+
+static int rgn_str_cmp( const char *a, const char *b )
+{
+    size_t asize = string_size ( a );
+    size_t bsize = string_size ( b );
+    return strcase_cmp ( a, asize, b, bsize, ( asize > bsize ) ? asize : bsize );
+}
+
+
+static rc_t rgn_set_type_code( int32_t *dst, const uint32_t type_idx )
+{
+    if ( *dst == -1 )
+    {
+        *dst = type_idx;
+        return 0;
+    }
+    else
+        return RC( rcExe, rcNoTarg, rcLoading, rcName, rcDuplicate );
+}
+
+
+static rc_t rgn_type_string( const char *type_string, uint32_t type_idx, 
+                             region_type_mapping *mapping )
+{
+    if ( rgn_str_cmp( type_string, rgn_string_adapter ) == 0 )
+        return rgn_set_type_code( &(mapping->rgn_type_adapter), type_idx );
+
+    if ( rgn_str_cmp( type_string, rgn_string_insert ) == 0 )
+        return rgn_set_type_code( &(mapping->rgn_type_insert), type_idx );
+
+    if ( rgn_str_cmp( type_string, rgn_string_hq ) == 0 )
+        return rgn_set_type_code( &(mapping->rgn_type_hq), type_idx );
+
+    if ( rgn_str_cmp( type_string, rgn_string_ga ) == 0 )
+        return rgn_set_type_code( &(mapping->rgn_type_ga), type_idx );
+
+    return RC( rcExe, rcNoTarg, rcLoading, rcName, rcUnknown );
+}
+
+
+/* read the mapping out of the region-types out of a string... */
+rc_t rgn_extract_type_mappings( const KNamelist *rgn_names,
+                                region_type_mapping *mapping, bool check_completenes )
+{
+    rc_t rc = 0;
+    uint32_t count, idx;
+
+    mapping->rgn_type_adapter = -1;
+    mapping->rgn_type_insert  = -1;
+    mapping->rgn_type_hq      = -1;
+    mapping->rgn_type_ga      = -1;
+
+    rc = KNamelistCount ( rgn_names, &count );
+    for ( idx = 0; idx < count && rc == 0; ++idx )
+    {
+        const char *name;
+        rc = KNamelistGet ( rgn_names, idx, &name );
+        if ( rc == 0 )
+            rgn_type_string( name, idx, mapping );
+    }
+
+    if ( rc == 0 && check_completenes )
+    {
+        if ( mapping->rgn_type_adapter == -1 ||
+             mapping->rgn_type_insert == -1 ||
+             mapping->rgn_type_hq == -1 )
+            rc = RC( rcExe, rcNoTarg, rcLoading, rcName, rcIncomplete );
+    }
+
+    mapping->count_of_unknown_rgn_types = 0;
+    return rc;
+}
+
+
+
+rc_t rgn_show_type_mappings( region_type_mapping *mapping )
+{
+    rc_t rc;
+    if ( mapping == NULL )
+        rc = RC( rcExe, rcNoTarg, rcLoading, rcParam, rcInvalid );
+    else
+        rc = KOutMsg( "rgn-type-mapping->adapter   = %i\n", mapping->rgn_type_adapter );
+    if ( rc == 0 )
+        rc = KOutMsg( "rgn-type-mapping->insert    = %i\n", mapping->rgn_type_insert );
+    if ( rc == 0 )
+        rc = KOutMsg( "rgn-type-mapping->high_qual = %i\n", mapping->rgn_type_hq );
+    if ( rc == 0 )
+        rc = KOutMsg( "rgn-type-mapping->globe_acc = %i\n", mapping->rgn_type_ga );
+    return rc;
+}
+
diff --git a/tools/pacbio-load/pl-regions.h b/tools/pacbio-load/pl-regions.h
new file mode 100644
index 0000000..464ac5e
--- /dev/null
+++ b/tools/pacbio-load/pl-regions.h
@@ -0,0 +1,140 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_regions_
+#define _h_pl_regions_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include <klib/vector.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+#include <insdc/sra.h>
+
+
+#define RGN_COLUMN_COUNT 5
+#define MIN_BIOLOGICAL_LEN 10
+
+typedef struct region_type_mapping
+{
+    int32_t rgn_type_adapter;   /* technical */
+    int32_t rgn_type_insert;    /* biological */
+    int32_t rgn_type_hq;        /* HighQualityRegion */
+    int32_t rgn_type_ga;        /* GlobalAccuracy ??? */
+
+    uint64_t count_of_unknown_rgn_types;
+} region_type_mapping;
+
+
+typedef struct region
+{
+    int32_t spot_id;
+    int32_t type;
+    int32_t start;
+    int32_t end;
+    int32_t filter;
+} region;
+
+
+typedef struct regions_stat
+{
+    uint32_t inserts;
+    uint32_t inserts_spots;
+    uint32_t expands_a;
+    uint32_t expands_i;
+    uint32_t expands_spots;
+    uint32_t end_gap;
+    uint32_t overlapps;
+    uint32_t removed;
+} regions_stat;
+
+
+typedef struct hq_region
+{
+    uint32_t start;
+    uint32_t end;
+} hq_region;
+
+
+typedef struct regions
+{
+    af_data hdf5_regions;
+    Vector read_Regions;
+    Vector sort_Regions;
+    Vector stock_Regions;
+    hq_region hq_rgn;
+    uint64_t offset;
+    uint32_t spot_id;
+    uint32_t spot_len;
+    uint32_t * data_32;
+    uint8_t * data_8;
+    size_t data_32_len;
+    size_t data_8_len;
+
+    regions_stat stat;
+
+    int32_t * complete_table;
+    int32_t * table_index;
+} regions;
+
+
+void rgn_init( regions *rgn );
+void rgn_free( regions *rgn );
+
+static const char def_label[] = "AdapterInsertLowQuality";
+static const size_t def_label_len = 23;
+
+static const uint32_t label_adapter_start    = 0;
+static const uint32_t label_adapter_len      = 7;
+static const uint32_t label_insert_start     = 7;
+static const uint32_t label_insert_len       = 6;
+static const uint32_t label_lowquality_start = 13;
+static const uint32_t label_lowquality_len   = 10;
+
+rc_t rgn_open( const KDirectory *hdf5_dir, regions *rgn );
+
+rc_t rgn_load( regions *rgn, const uint32_t spot_id, 
+               region_type_mapping *mapping, const uint32_t spot_len );
+
+void rgn_set_filter_value_for_all( regions *rgn, const uint32_t filter_value );
+
+rc_t rgn_start_data( regions *rgn, uint32_t *count );
+rc_t rgn_len_data( regions *rgn, uint32_t *count );
+rc_t rgn_type_data( regions *rgn, uint32_t *count );
+rc_t rgn_filter_data( regions *rgn, uint32_t *count );
+rc_t rgn_label_start_data( regions *rgn, uint32_t *count );
+rc_t rgn_label_len_data( regions *rgn, uint32_t *count );
+
+rc_t rgn_extract_type_mappings( const KNamelist *rgn_names, region_type_mapping *mapping, bool check_completenes );
+rc_t rgn_show_type_mappings( region_type_mapping *mapping );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-sequence.c b/tools/pacbio-load/pl-sequence.c
new file mode 100644
index 0000000..050bc17
--- /dev/null
+++ b/tools/pacbio-load/pl-sequence.c
@@ -0,0 +1,928 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-sequence.h"
+#include "pl-regions.h"
+#include <kfs/kfs-priv.h>       /* access to getmeta of KArrayfile*/
+#include <sra/pacbio.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+const char * seq_tab_names[] = 
+{ 
+    /* base-space */
+    "READ",
+    "QUALITY",
+    "NREADS",
+    "(INSDC:SRA:platform_id)PLATFORM",
+    "LABEL",
+    "LABEL_START",
+    "LABEL_LEN",
+    "READ_TYPE",
+    "READ_START",
+    "READ_LEN",
+    "CLIP_QUALITY_LEFT",
+    "CLIP_QUALITY_RIGHT",
+    "READ_FILTER",
+
+    /* pulse-space */
+    "PRE_BASE_FRAMES",
+    "WIDTH_IN_FRAMES",
+    "(U16)PULSE_INDEX",
+    "PULSE_INDEX",
+    "HOLE_NUMBER",
+    "HOLE_STATUS",
+    "HOLE_XY",
+    "INSERTION_QV",
+    "DELETION_QV",
+    "DELETION_TAG",
+    "SUBSTITUTION_QV",
+    "SUBSTITUTION_TAG"
+};
+
+
+static void init_BaseCalls( BaseCalls *tab )
+{
+    init_BaseCalls_cmn( &tab->cmn );
+    rgn_init( &tab->rgn );
+    init_array_file( &tab->PreBaseFrames );
+    init_array_file( &tab->PulseIndex );
+    init_array_file( &tab->WidthInFrames );
+}
+
+
+static void close_BaseCalls( BaseCalls *tab )
+{
+    close_BaseCalls_cmn( &tab->cmn );
+    rgn_free( &tab->rgn );
+    free_array_file( &tab->PreBaseFrames );
+    free_array_file( &tab->PulseIndex );
+    free_array_file( &tab->WidthInFrames );
+}
+
+
+static rc_t open_BaseCalls( const KDirectory *hdf5_dir, BaseCalls *tab,
+                            const char * path, bool cache_content, bool * rgn_present )
+{
+    rc_t rc;
+
+    init_BaseCalls( tab );
+    rc = open_BaseCalls_cmn( hdf5_dir, &tab->cmn, false, path, cache_content, false );
+    if ( rc == 0 )
+    {
+        rc_t rc1 = rgn_open( hdf5_dir, &tab->rgn );
+        if ( rgn_present != NULL )
+            *rgn_present = ( rc1 == 0 );
+
+        open_element( hdf5_dir, &tab->PreBaseFrames, path, "PreBaseFrames", 
+                               PRE_BASE_FRAMES_BITSIZE, PRE_BASE_FRAMES_COLS,
+                               true, cache_content, true );
+
+        if ( rc == 0 )
+        {
+            rc = open_element( hdf5_dir, &tab->PulseIndex, path, "PulseIndex", 
+                               PULSE_INDEX_BITSIZE_16, PULSE_INDEX_COLS,
+                               false, cache_content, false );
+            /* try again if it is not 16 bit! */
+            if ( rc != 0 )
+                rc = open_element( hdf5_dir, &tab->PulseIndex, path, "PulseIndex", 
+                                   PULSE_INDEX_BITSIZE_32, PULSE_INDEX_COLS,
+                                   true, cache_content, false );
+        }
+
+        open_element( hdf5_dir, &tab->WidthInFrames, path, "WidthInFrames",
+                               WIDTH_IN_FRAMES_BITSIZE, WIDTH_IN_FRAMES_COLS,
+                               true, cache_content, true );
+
+        if ( rc != 0 )
+            close_BaseCalls( tab ); /* releases only initialized elements */
+    }
+    return rc;
+}
+
+
+static bool check_BaseCall_totalcount( BaseCalls *tab, const uint64_t expected )
+{
+    bool res = true;
+
+    if ( tab->PreBaseFrames.rc == 0 )
+        res = check_table_count( &tab->PreBaseFrames, "PreBaseFrames", expected );
+
+    if ( res && tab->PulseIndex.rc == 0 )
+        res = check_table_count( &tab->PulseIndex, "PulseIndex", expected );
+
+    if ( res && tab->WidthInFrames.rc == 0 )
+        res = check_table_count( &tab->WidthInFrames, "WidthInFrames", expected );
+
+    if ( res && tab->cmn.Basecall.rc == 0 )
+        res = check_table_count( &tab->cmn.Basecall, "Basecall", expected );
+
+    if ( res && tab->cmn.DeletionQV.rc == 0 )
+        res = check_table_count( &tab->cmn.DeletionQV, "DeletionQV", expected );
+
+    if ( res && tab->cmn.DeletionTag.rc == 0 )
+        res = check_table_count( &tab->cmn.DeletionTag, "DeletionTag", expected );
+
+    if ( res && tab->cmn.InsertionQV.rc == 0 )
+        res = check_table_count( &tab->cmn.InsertionQV, "InsertionQV", expected );
+
+    if ( res && tab->cmn.QualityValue.rc == 0 )
+        res = check_table_count( &tab->cmn.QualityValue, "QualityValue", expected );
+
+    if ( res && tab->cmn.SubstitutionQV.rc == 0 )
+        res = check_table_count( &tab->cmn.SubstitutionQV, "SubstitutionQV", expected );
+
+    if ( res && tab->cmn.SubstitutionTag.rc == 0 )
+        res = check_table_count( &tab->cmn.SubstitutionTag, "SubstitutionTag", expected );
+    return res;
+}
+
+
+static rc_t seq_load_zero_bases( VCursor *cursor, BaseCalls *tab,
+                                 const uint32_t *col_idx )
+{
+    uint32_t dummy_src;
+    rc_t rc = vdb_write_value( cursor, col_idx[ seq_tab_READ ],
+                               &dummy_src, BASECALL_BITSIZE, 0, "seq.Basecall" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_QUALITY ],
+                              &dummy_src, QUALITY_VALUE_BITSIZE, 0, "seq.QualityValue" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_INSERTION_QV ],
+                              &dummy_src, INSERTION_QV_BITSIZE, 0, "seq.InsertionQV" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_DELETION_QV ],
+                              &dummy_src, DELETION_QV_BITSIZE, 0, "seq.DeletionQV" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_DELETION_TAG ],
+                              &dummy_src, DELETION_TAG_BITSIZE, 0, "seq.DeletionTag" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_SUBSTITUTION_QV ],
+                              &dummy_src, SUBSTITUTION_QV_BITZISE, 0, "seq.SubstitutionQV" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_SUBSTITUTION_TAG ],
+                              &dummy_src, SUBSTITUTION_TAG_BITSIZE, 0, "seq.SubstitutionTag" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_PRE_BASE_FRAMES ],
+                              &dummy_src, PRE_BASE_FRAMES_BITSIZE, 0, "seq.PreBaseFrames" );
+
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_WIDTH_IN_FRAMES ],
+                              &dummy_src, WIDTH_IN_FRAMES_BITSIZE, 0, "seq.WidthInFrames" );
+
+    if ( rc == 0 )
+    {
+        if ( tab->PulseIndex.element_bits == PULSE_INDEX_BITSIZE_16 )
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_PULSE_INDEX_16 ],
+                                  &dummy_src, PULSE_INDEX_BITSIZE_16, 0, "seq.PulseIndex16" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_PULSE_INDEX_32 ],
+                                  &dummy_src, PULSE_INDEX_BITSIZE_32, 0, "seq.PulseIndex32" );
+    }
+    return rc;
+}
+
+
+static rc_t seq_load_spot_bases( VCursor *cursor, BaseCalls *tab,
+                                 const uint32_t *col_idx, zmw_row * spot )
+{
+    rc_t rc = 0;
+    size_t n_bytes = spot->NumEvent * 4;
+
+    /* we make a buffer to store NumEvent 32-bit-values
+      (that is so far the biggest value we have to read per DNA-BASE) */
+    char * buffer = malloc( n_bytes );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted );
+        PLOGERR( klogErr, ( klogErr, rc, "cannot allocate $(nbytes) bytes to read seq-data",
+                            "nbytes=%u", n_bytes ) );
+    }
+
+    if ( rc == 0 )
+        rc = transfer_bits( cursor, col_idx[ seq_tab_READ ],
+            &tab->cmn.Basecall, buffer, spot->offset, spot->NumEvent,
+            BASECALL_BITSIZE, "seq.Basecall" );
+
+    if ( rc == 0 )
+        rc = transfer_bits( cursor, col_idx[ seq_tab_QUALITY ],
+            &tab->cmn.QualityValue, buffer, spot->offset, spot->NumEvent,
+            QUALITY_VALUE_BITSIZE, "seq.QualityValue" );
+
+    /* this is all optional! ( but we are writing zero's into it if we have no source ... )---> */
+    if ( rc == 0 )
+    {
+        if ( tab->cmn.InsertionQV.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_INSERTION_QV ],
+                &tab->cmn.InsertionQV, buffer, spot->offset, spot->NumEvent,
+                INSERTION_QV_BITSIZE, "seq.InsertionQV" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_INSERTION_QV ],
+                buffer, INSERTION_QV_BITSIZE, 0, "seq.InsertionQV" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->cmn.DeletionQV.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_DELETION_QV ],
+                &tab->cmn.DeletionQV, buffer, spot->offset, spot->NumEvent,
+                DELETION_QV_BITSIZE, "seq.DeletionQV" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_DELETION_QV ],
+                buffer, DELETION_QV_BITSIZE, 0, "seq.DeletionQV" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->cmn.DeletionTag.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_DELETION_TAG ],
+                &tab->cmn.DeletionTag, buffer, spot->offset, spot->NumEvent,
+                DELETION_TAG_BITSIZE, "seq.DeletionTag" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_DELETION_TAG ],
+                buffer, DELETION_TAG_BITSIZE, 0, "seq.DeletionTag" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->cmn.SubstitutionQV.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_SUBSTITUTION_QV ],
+                &tab->cmn.SubstitutionQV, buffer, spot->offset, spot->NumEvent,
+                SUBSTITUTION_QV_BITZISE, "seq.SubstitutionQV" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_SUBSTITUTION_QV ],
+                buffer, SUBSTITUTION_QV_BITZISE, 0, "seq.SubstitutionQV" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->cmn.SubstitutionTag.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_SUBSTITUTION_TAG ],
+                &tab->cmn.SubstitutionTag, buffer, spot->offset, spot->NumEvent,
+                SUBSTITUTION_TAG_BITSIZE, "seq.SubstitutionTag" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_SUBSTITUTION_TAG ],
+                buffer, SUBSTITUTION_TAG_BITSIZE, 0, "seq.SubstitutionTag" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->PreBaseFrames.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_PRE_BASE_FRAMES ],
+                &tab->PreBaseFrames, buffer, spot->offset, spot->NumEvent,
+                PRE_BASE_FRAMES_BITSIZE, "seq.PreBaseFrames" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_PRE_BASE_FRAMES ],
+                buffer, PRE_BASE_FRAMES_BITSIZE, 0, "seq.PreBaseFrames" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( tab->WidthInFrames.rc == 0 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_WIDTH_IN_FRAMES ],
+                &tab->WidthInFrames, buffer, spot->offset, spot->NumEvent,
+                WIDTH_IN_FRAMES_BITSIZE, "seq.WidthInFrames" );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_WIDTH_IN_FRAMES ],
+                buffer, WIDTH_IN_FRAMES_BITSIZE, 0, "seq.WidthInFrames" );
+    }
+    /* <--- this is all optional! */
+
+
+    if ( rc == 0 )
+    {
+        if ( tab->PulseIndex.element_bits == PULSE_INDEX_BITSIZE_16 )
+            rc = transfer_bits( cursor, col_idx[ seq_tab_PULSE_INDEX_16 ],
+                &tab->PulseIndex, buffer, spot->offset, spot->NumEvent,
+                PULSE_INDEX_BITSIZE_16, "seq.PulsIndex16" );
+        else
+            rc = transfer_bits( cursor, col_idx[ seq_tab_PULSE_INDEX_32 ],
+                &tab->PulseIndex, buffer, spot->offset, spot->NumEvent,
+                PULSE_INDEX_BITSIZE_32, "seq.PulsIndex32" );
+    }
+
+    if ( buffer != NULL )
+        free( buffer );
+    return rc;
+}
+
+
+static rc_t seq_load_read_desc( VCursor *cursor, const uint32_t *col_idx,
+                                region_type_mapping *mapping,
+                                zmw_row * spot, BaseCalls *tab )
+{
+    uint32_t n;
+    /* take the spot-descriptors out of the region-table
+       and write them... */
+
+    rc_t rc = rgn_load( &tab->rgn, spot->spot_nr, mapping, spot->NumEvent );
+    if ( rc != 0 )
+        PLOGERR( klogErr, ( klogErr, rc, "rgn_load( spot #$(spotnr) ) failed",
+                            "spotnr=%u", spot->spot_nr ) );
+
+    if ( rc == 0 )
+    {
+        uint32_t filter_value = SRA_READ_FILTER_PASS;
+        if ( spot->HoleStatus != SRA_PACBIO_HOLE_SEQUENCING )
+        {
+            filter_value = SRA_READ_FILTER_CRITERIA;
+        }
+        rgn_set_filter_value_for_all( &tab->rgn, filter_value );
+    }
+
+    if ( rc == 0 )
+    {
+        /* write the READ_START - vector */
+        rc = rgn_start_data( &tab->rgn, &n );
+
+/*
+        if ( n > 255 )
+            OUTMSG(( "spot #%lu has %u READS\n", spot->spot_nr, n ));
+*/
+
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_start_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_READ_START ],
+                                  tab->rgn.data_32, 32, n, "seq.READ_START" );
+    }
+
+    /* write the READ_LEN - vector */
+    if ( rc == 0 )
+    {
+        rc = rgn_len_data( &tab->rgn, &n );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_len_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_READ_LEN ],
+                                  tab->rgn.data_32, 32, n, "seq.READ_LEN" );
+    }
+
+    /* write the READ_TYPE - vector */
+    if ( rc == 0 )
+    {
+        rc = rgn_type_data( &tab->rgn, &n );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_type_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_READ_TYPE ],
+                                  tab->rgn.data_8, 8, n, "seq.READ_TYPE" );
+
+    }
+
+    /* write the READ_FILTER - vector */
+    if ( rc == 0 )
+    {
+        rc = rgn_filter_data( &tab->rgn, &n );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_filter_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_READ_FILTER ],
+                                  tab->rgn.data_8, 8, n, "seq.READ_FILTER" );
+    }
+
+
+    /* write the LABEL ( a constant string defined in pl-regions.h" ) */
+    if ( rc == 0 )
+    {
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_LABEL ],
+                              (void*)def_label, 8, def_label_len, "seq.LABEL" );
+    }
+
+    /* write the LABEL_START ( index into LABEL for every read ) */
+    if ( rc == 0 )
+    {
+        rc = rgn_label_start_data( &tab->rgn, &n );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_label_start_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_LABEL_START ],
+                                  tab->rgn.data_32, 32, n, "seq.LABEL_START" );
+    }
+
+    /* write the LABEL_LEN ( index into LABEL for every read ) */
+    if ( rc == 0 )
+    {
+        rc = rgn_label_len_data( &tab->rgn, &n );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "rgn_label_len_data( $(spotnr) ) failed",
+                                "spotnr=%u", spot->spot_nr ) );
+        else
+            rc = vdb_write_value( cursor, col_idx[ seq_tab_LABEL_LEN ],
+                                  tab->rgn.data_32, 32, n, "seq.LABEL_LEN" );
+    }
+
+    /* write how many regions(pacbio)/reads(ncbi) this spot has */
+    if ( rc == 0 )
+    {
+        if ( n > 255 )
+            n = 255;
+        rc = vdb_write_uint8( cursor, col_idx[ seq_tab_NREADS ],
+                              (uint8_t)n, "seq.NREADS" );
+    }
+
+    /* write hq-start/hq-end into CLIP_QUALITY_LEFT/RIGHT */
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_CLIP_QUALITY_LEFT ],
+                               tab->rgn.hq_rgn.start, "seq.CLIP_QUALITY_LEFT" );
+
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_CLIP_QUALITY_RIGHT ],
+                               tab->rgn.hq_rgn.end, "seq.CLIP_QUALITY_RIGHT" );
+
+    return rc;
+}
+
+
+static rc_t seq_load_one_spot( VCursor *cursor, const uint32_t *col_idx,
+                               zmw_row * spot, BaseCalls *tab )
+{
+    rc_t rc = vdb_write_uint32( cursor, col_idx[ seq_tab_READ_START ],
+                                0, "seq.READ_START" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_READ_LEN ],
+                               spot->NumEvent, "seq.READ_LEN" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, col_idx[ seq_tab_READ_TYPE ],
+                              SRA_READ_TYPE_BIOLOGICAL, "seq.READ_TYPE" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, col_idx[ seq_tab_READ_FILTER ],
+                              SRA_READ_FILTER_PASS, "seq.READ_FILTER" );
+    /* write the LABEL ( a constant string defined in pl-regions.h" ) */
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_LABEL ],
+                              (void*)def_label, 8, def_label_len, "seq.LABEL" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_LABEL_START ],
+                               label_insert_start, "seq.LABEL_START" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_LABEL_LEN ],
+                               label_insert_len, "seq.LABEL_LEN" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, col_idx[ seq_tab_NREADS ],
+                              1, "seq.NREADS" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_CLIP_QUALITY_LEFT ],
+                               1, "seq.CLIP_QUALITY_LEFT" );
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_CLIP_QUALITY_RIGHT ],
+                               spot->NumEvent -1, "seq.CLIP_QUALITY_RIGHT" );
+    return rc;
+}
+
+
+static rc_t seq_load_spot( VCursor *cursor, const uint32_t *col_idx,
+                           region_type_mapping *mapping, zmw_row * spot, 
+                           void * data )
+{
+    BaseCalls *tab = (BaseCalls *)data;
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        PLOGERR( klogErr, ( klogErr, rc, "cannot open seq-row on spot# $(spotnr)",
+                            "spotnr=%u", spot->spot_nr ) );
+
+    if ( rc == 0 )
+        rc = vdb_write_uint32( cursor, col_idx[ seq_tab_HOLE_NUMBER ],
+                               spot->HoleNumber, "seq.HOLE_NUMBER" );
+    if ( rc == 0 )
+        rc = vdb_write_uint8( cursor, col_idx[ seq_tab_HOLE_STATUS ],
+                              spot->HoleStatus, "seq.HOLE_STATUS" );
+    if ( rc == 0 )
+        rc = vdb_write_value( cursor, col_idx[ seq_tab_HOLE_XY ],
+                              &spot->HoleXY, HOLE_XY_BITSIZE, 2, "seq.HOLE_XY" );
+
+    if ( rc == 0 )
+    {
+        /* we load the bases / quality-values and other data belonging
+           to this hole(bacbio)/spot(ncbi) */
+        if ( spot->NumEvent > 0 )
+            rc = seq_load_spot_bases( cursor, tab, col_idx, spot );
+        else
+            rc = seq_load_zero_bases( cursor, tab, col_idx );
+
+        /* we try to divide the spot into regions(pacbio)/reads(ncbi) */
+        if ( rc == 0 )
+        {
+            if ( mapping != NULL )
+                rc = seq_load_read_desc( cursor, col_idx, mapping, spot, tab );
+            else
+                rc = seq_load_one_spot( cursor, col_idx, spot, tab );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "cannot commit seq-row on spot# $(spotnr)",
+                                "spotnr=%u", spot->spot_nr ) );
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "cannot close seq-row on spot# $(spotnr)",
+                                "spotnr=%u", spot->spot_nr ) );
+    }
+    return rc;
+}
+
+
+static void seq_load_info( regions_stat * stat )
+{
+    KLogLevel tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+
+    if ( stat->expands_a > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "adapter expanded: $(times) ( in $(spots) spots )",
+             "times=%u,spots=%u",
+             stat->expands_a, stat->expands_spots ));
+    if ( stat->expands_i > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "insert expanded : $(times) ( in $(spots) spots )",
+             "times=%u,spots=%u",
+              stat->expands_i, stat->expands_spots ));
+    if ( stat->inserts > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "regions inserted: $(times) ( in $(spots) spots )",
+             "times=%u,spots=%u",
+             stat->inserts, stat->inserts_spots ));
+    if ( stat->end_gap > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "end-gap inserted: $(times)",
+             "times=%u", stat->end_gap ));
+    if ( stat->overlapps > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "overlapping rngs: $(times)",
+             "times=%u", stat->overlapps ));
+    if ( stat->removed > 0 )
+        PLOGMSG( klogInfo, ( klogInfo,
+             "removed rgns    : $(times)",
+             "times=%u", stat->removed ));
+
+    KLogLevelSet( tmp_lvl );
+}
+
+
+
+void seq_report_totals( ld_context *lctx )
+{
+    const char* accession;
+    KLogLevel tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+
+    accession = strrchr( lctx->dst_path, '/' );
+    if( accession == NULL )
+        accession = lctx->dst_path;
+    else
+        accession++;
+
+    PLOGMSG( klogInfo, ( klogInfo, "loaded",
+            "severity=total,status=success,accession=%s,spot_count=%lu,base_count=%lu,bad_spots=0",
+             accession, lctx->total_seq_spots, lctx->total_seq_bases ));
+
+    KLogLevelSet( tmp_lvl );
+}
+
+
+static rc_t seq_loader( ld_context *lctx, KDirectory * hdf5_src, VCursor * cursor, const char * table_name )
+{
+    BaseCalls BaseCallsTab;
+    bool rgn_present;
+
+    /* opens all hdf5-tables, which are needed to load the sequence-table */
+    rc_t rc = open_BaseCalls( hdf5_src, &BaseCallsTab,
+                              "PulseData/BaseCalls", lctx->cache_content, &rgn_present );
+    if ( rc == 0 )
+    {
+        /* calculates the total number of bases, according to the zmw-table */
+        uint64_t total_bases = zmw_total( &BaseCallsTab.cmn.zmw );
+        /* calculates the total number of spots, according to the zmw-table */
+        uint64_t total_spots = BaseCallsTab.cmn.zmw.NumEvent.extents[ 0 ];
+
+        KLogLevel tmp_lvl = KLogLevelGet();
+        KLogLevelSet( klogInfo );
+        PLOGMSG( klogInfo, ( klogInfo,
+                 "loading sequence-table ( $(bases) bases / $(spots) spots ):",
+                 "bases=%lu,spots=%lu", total_bases, total_spots ));
+        KLogLevelSet( tmp_lvl );
+
+        /* checks that all tables, which are loaded do have the correct
+           number of values (the number that the zmw-table requests) */
+        if ( check_BaseCall_totalcount( &BaseCallsTab, total_bases ) )
+        {
+            region_type_mapping mapping;
+
+            if ( rgn_present )
+            {
+                const KNamelist *region_types;
+                /* read the meta-data-entry "RegionTypes" of the hdf5-regions-table
+                   into a KNamelist */
+                rc = KArrayFileGetMeta ( BaseCallsTab.rgn.hdf5_regions.af, "RegionTypes", &region_types );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "cannot read Regions.RegionTypes" );
+                }
+                else
+                {
+                    /* extract the region-type-mapping out of the read KNamelist */
+                    rc = rgn_extract_type_mappings( region_types, &mapping, false );
+                    KNamelistRelease ( region_types );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogErr, rc, "cannot map regions-types" );
+                    }
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                /* holds the vdb-column-index for every column we write */
+                uint32_t col_idx[ seq_tab_count ];
+                int32_t to_exclude;
+
+                /* depending on the bit-size of the PulseIndex-table in HDF5
+                   exclude the opposite column from VDB */
+                if ( BaseCallsTab.PulseIndex.element_bits == PULSE_INDEX_BITSIZE_16 )
+                    to_exclude = seq_tab_PULSE_INDEX_32;
+                else
+                    to_exclude = seq_tab_PULSE_INDEX_16;
+
+                /* add all columns to the vdb-cursor */
+                rc = add_columns( cursor, seq_tab_count, to_exclude, col_idx, seq_tab_names );
+                if ( rc == 0 )
+                {
+                    rc = VCursorOpen( cursor );
+                    if ( rc != 0 )
+                        LOGERR( klogErr, rc, "cannot open cursor on seq-table" );
+                    else
+                    {
+                        const uint8_t platform = SRA_PLATFORM_PACBIO_SMRT;
+
+                        rc = VCursorDefault ( cursor, col_idx[ seq_tab_PLATFORM ], 8, &platform, 0, 1 );
+                        if ( rc != 0 )
+                            LOGERR( klogErr, rc, "cannot set cursor-default on seq-table for platform-column" );
+                        else
+                        {
+                            region_type_mapping *mapping_ptr = NULL;
+        
+                            if ( rgn_present )
+                            {
+                                mapping_ptr = &mapping;
+                            }
+                            /* call for every spot the function >seq_load_spot< */
+                            rc = zmw_for_each( &BaseCallsTab.cmn.zmw, &lctx->xml_progress, cursor,
+                                               lctx->with_progress, col_idx, mapping_ptr, false, seq_load_spot, &BaseCallsTab );
+                        }
+                    }
+                }
+            }
+
+            if ( rgn_present )
+            {
+                seq_load_info( &BaseCallsTab.rgn.stat );
+
+                if ( mapping.count_of_unknown_rgn_types > 0 )
+                {
+                    KLogLevel tmp_lvl = KLogLevelGet();
+                    KLogLevelSet( klogInfo );
+
+                    PLOGMSG( klogInfo, ( klogInfo,
+                        "$(times) x unknown region types encountered",
+                        "times=%i", mapping.count_of_unknown_rgn_types ) );
+                    KLogLevelSet( tmp_lvl );
+
+                }
+            }
+
+            lctx->total_seq_bases += total_bases;
+            lctx->total_seq_spots += total_spots;
+        }   
+        else
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+        close_BaseCalls( &BaseCallsTab );
+    }
+
+    return rc;
+}
+
+
+/* HDF5-Groups and tables used to load the PULSE-table */
+static const char * seq_groups_to_check[] = 
+{ 
+    "PulseData",
+    "PulseData/BaseCalls",
+    "PulseData/BaseCalls/ZMW",
+    NULL
+};
+
+static const char * seq_tables_to_check[] = 
+{ 
+    "PulseData/BaseCalls/Basecall",
+    "PulseData/BaseCalls/DeletionQV",
+    "PulseData/BaseCalls/DeletionTag",
+    "PulseData/BaseCalls/InsertionQV",
+    "PulseData/BaseCalls/PreBaseFrames",
+    "PulseData/BaseCalls/PulseIndex",
+    "PulseData/BaseCalls/QualityValue",
+    "PulseData/BaseCalls/SubstitutionQV",
+    "PulseData/BaseCalls/SubstitutionTag",
+    "PulseData/BaseCalls/WidthInFrames",
+    "PulseData/BaseCalls/ZMW/HoleNumber",
+    "PulseData/BaseCalls/ZMW/HoleStatus",
+    "PulseData/BaseCalls/ZMW/HoleXY",
+    "PulseData/BaseCalls/ZMW/NumEvent",
+    NULL
+};
+
+
+static const char * seq_schema_template = "SEQUENCE";
+static const char * seq_table_to_create = "SEQUENCE";
+
+
+/* special case for SEQUENCE: in order to prepare the cursor correctly, we have to know the first HDF5-source-obj !*/
+rc_t prepare_seq( VDatabase * database, seq_ctx * sctx, KDirectory * hdf5_src, ld_context *lctx )
+{
+    rc_t rc = prepare_table( database, &sctx->cursor, seq_schema_template, seq_table_to_create ); /* pl-tools.c ... this creates the cursor */
+    sctx->src_open = false;
+    if ( rc == 0 )
+    {
+        rc = open_BaseCalls( hdf5_src, &sctx->BaseCallsTab, "PulseData/BaseCalls", lctx->cache_content, &sctx->rgn_present );
+        if ( rc == 0 )
+        {
+            int32_t to_exclude;
+
+            /* depending on the bit-size of the PulseIndex-table in HDF5
+               exclude the opposite column from VDB */
+            if ( sctx->BaseCallsTab.PulseIndex.element_bits == PULSE_INDEX_BITSIZE_16 )
+                to_exclude = seq_tab_PULSE_INDEX_32;
+            else
+                to_exclude = seq_tab_PULSE_INDEX_16;
+
+            /* add all columns to the vdb-cursor */
+            rc = add_columns( sctx->cursor, seq_tab_count, to_exclude, sctx->col_idx, seq_tab_names );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen( sctx->cursor );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "cannot open cursor on seq-table" );
+                }
+                else
+                {
+                    const uint8_t platform = SRA_PLATFORM_PACBIO_SMRT;
+
+                    rc = VCursorDefault ( sctx->cursor, sctx->col_idx[ seq_tab_PLATFORM ], 8, &platform, 0, 1 );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogErr, rc, "cannot set cursor-default on seq-table for platform-column" );
+                    }
+                    else
+                    {
+                        sctx->src_open = true;
+                        sctx->lctx = lctx;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t load_seq_src( seq_ctx * sctx, KDirectory * hdf5_src )
+{
+    rc_t rc = 0;
+    if ( sctx->lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, seq_groups_to_check, seq_tables_to_check, true );
+
+    if ( rc == 0 && !sctx->src_open )
+        rc = open_BaseCalls( hdf5_src, &sctx->BaseCallsTab, "PulseData/BaseCalls", sctx->lctx->cache_content, &sctx->rgn_present );
+    if ( rc == 0 )
+    {
+        /* calculates the total number of bases, according to the zmw-table */
+        uint64_t total_bases = zmw_total( &sctx->BaseCallsTab.cmn.zmw );
+        /* calculates the total number of spots, according to the zmw-table */
+        uint64_t total_spots = sctx->BaseCallsTab.cmn.zmw.NumEvent.extents[ 0 ];
+
+        KLogLevel tmp_lvl = KLogLevelGet();
+        KLogLevelSet( klogInfo );
+        PLOGMSG( klogInfo, ( klogInfo,
+                 "loading sequence-table ( $(bases) bases / $(spots) spots ):",
+                 "bases=%lu,spots=%lu", total_bases, total_spots ));
+        KLogLevelSet( tmp_lvl );
+
+        /* checks that all tables, which are loaded do have the correct
+           number of values (the number that the zmw-table requests) */
+        if ( !check_BaseCall_totalcount( &sctx->BaseCallsTab, total_bases ) )
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+        else
+        {
+            region_type_mapping mapping;
+
+            if ( sctx->rgn_present )
+            {
+                const KNamelist *region_types;
+                /* read the meta-data-entry "RegionTypes" of the hdf5-regions-table
+                   into a KNamelist */
+                rc = KArrayFileGetMeta ( sctx->BaseCallsTab.rgn.hdf5_regions.af, "RegionTypes", &region_types );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "cannot read Regions.RegionTypes" );
+                }
+                else
+                {
+                    /* extract the region-type-mapping out of the read KNamelist */
+                    rc = rgn_extract_type_mappings( region_types, &mapping, false );
+                    KNamelistRelease ( region_types );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogErr, rc, "cannot map regions-types" );
+                    }
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                region_type_mapping *mapping_ptr = NULL;
+
+                if ( sctx->rgn_present )
+                    mapping_ptr = &mapping;
+
+                /* call for every spot the function >seq_load_spot< */
+                rc = zmw_for_each( &sctx->BaseCallsTab.cmn.zmw, &sctx->lctx->xml_progress, sctx->cursor,
+                                   sctx->lctx->with_progress, sctx->col_idx, mapping_ptr, false,
+                                   seq_load_spot, &sctx->BaseCallsTab );
+            }
+
+            if ( sctx->rgn_present )
+                seq_load_info( &sctx->BaseCallsTab.rgn.stat );
+
+            sctx->lctx->total_seq_bases += total_bases;
+            sctx->lctx->total_seq_spots += total_spots;
+        }   
+        close_BaseCalls( &sctx->BaseCallsTab );
+        sctx->src_open = false;
+    }
+    return rc;
+}
+
+
+rc_t finish_seq( seq_ctx * sctx )
+{
+    VCursorRelease( sctx->cursor );
+    return 0;
+}
+
+
+rc_t load_seq( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx )
+{
+    rc_t rc = 0;
+    if ( lctx->check_src_obj )
+        rc = check_src_objects( hdf5_src, seq_groups_to_check, seq_tables_to_check, true );
+    if ( rc == 0 )
+        /* in pl-tools.c */
+        rc = load_table( database, hdf5_src, lctx, seq_schema_template, 
+                         seq_table_to_create, seq_loader );
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-sequence.h b/tools/pacbio-load/pl-sequence.h
new file mode 100644
index 0000000..f093859
--- /dev/null
+++ b/tools/pacbio-load/pl-sequence.h
@@ -0,0 +1,110 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_sequence_
+#define _h_pl_sequence_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-zmw.h"
+#include "pl-basecalls_cmn.h"
+#include "pl-regions.h"
+#include <klib/rc.h>
+#include <insdc/sra.h>
+
+/* enumeration of the columns of the pulse-table */
+enum
+{
+    /* base-space */
+    seq_tab_READ = 0,
+    seq_tab_QUALITY,
+    seq_tab_NREADS,
+    seq_tab_PLATFORM,
+
+    seq_tab_LABEL,
+    seq_tab_LABEL_START,
+    seq_tab_LABEL_LEN,
+    seq_tab_READ_TYPE,
+    seq_tab_READ_START,
+    seq_tab_READ_LEN,
+    seq_tab_CLIP_QUALITY_LEFT,
+    seq_tab_CLIP_QUALITY_RIGHT,
+    seq_tab_READ_FILTER,
+
+    /* pulse-space */
+    seq_tab_PRE_BASE_FRAMES,
+    seq_tab_WIDTH_IN_FRAMES,
+    seq_tab_PULSE_INDEX_16,
+    seq_tab_PULSE_INDEX_32,
+    seq_tab_HOLE_NUMBER,
+    seq_tab_HOLE_STATUS,
+    seq_tab_HOLE_XY,
+    seq_tab_INSERTION_QV,
+    seq_tab_DELETION_QV,
+    seq_tab_DELETION_TAG,
+    seq_tab_SUBSTITUTION_QV,
+    seq_tab_SUBSTITUTION_TAG,
+    seq_tab_count
+};
+
+
+typedef struct BaseCalls
+{
+    BaseCalls_cmn cmn;
+    regions rgn;
+    af_data PreBaseFrames;
+    af_data PulseIndex;
+    af_data WidthInFrames;
+} BaseCalls;
+
+
+typedef struct seq_ctx
+{
+    VCursor * cursor;
+    ld_context *lctx;
+    BaseCalls BaseCallsTab;
+    uint32_t col_idx[ seq_tab_count ];
+    bool rgn_present;
+    bool src_open;
+} seq_ctx;
+
+
+/* special case for SEQUENCE: in order to prepare the cursor correctly, we have to know the first HDF5-source-obj !*/
+rc_t prepare_seq( VDatabase * database, seq_ctx * sctx, KDirectory * hdf5_src, ld_context *lctx );
+rc_t load_seq_src( seq_ctx * sctx, KDirectory * hdf5_src );
+rc_t finish_seq( seq_ctx * sctx );
+
+void seq_report_totals( ld_context *lctx );
+
+rc_t load_seq( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-tools.c b/tools/pacbio-load/pl-tools.c
new file mode 100644
index 0000000..5e51c7c
--- /dev/null
+++ b/tools/pacbio-load/pl-tools.c
@@ -0,0 +1,624 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-tools.h"
+#include <klib/printf.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <kdb/database.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+
+void lctx_init( ld_context * lctx )
+{
+    lctx->xml_logger = NULL;
+    lctx->xml_progress = NULL;
+    lctx->with_progress = false;
+    lctx->total_printed = false;
+    lctx->cache_content = false;
+    lctx->check_src_obj = false;
+    lctx->total_seq_bases = 0;
+    lctx->total_seq_spots = 0;
+}
+
+
+void lctx_free( ld_context * lctx )
+{
+    if ( lctx->xml_logger != NULL )
+    {
+        XMLLogger_Release( lctx->xml_logger );
+        lctx->xml_logger = NULL;
+    }
+    if ( lctx->xml_progress != NULL )
+    {
+        KLoadProgressbar_Release( lctx->xml_progress, false );
+        lctx->xml_progress = NULL;
+    }
+}
+
+
+rc_t check_src_objects( const KDirectory *hdf5_dir,
+                        const char ** groups, 
+                        const char **tables,
+                        bool show_not_found )
+{
+    rc_t rc = 0;
+    uint16_t idx = 0;
+    uint32_t pt;
+
+    if ( groups != NULL )
+    {
+        while ( groups[ idx ] != NULL && rc == 0 )
+        {
+            pt = KDirectoryPathType ( hdf5_dir, "%s", groups[idx] );
+            if ( pt != kptDir )
+            {
+                rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                if ( show_not_found )
+                    PLOGERR( klogErr, ( klogErr, rc, "hdf5-group '$(grp)' not found",
+                                    "grp=%s", groups[ idx ] ) );
+                else
+                    PLOGERR( klogWarn, ( klogWarn, rc, "hdf5-group '$(grp)' not found",
+                                    "grp=%s", groups[ idx ] ) );
+            }
+            else
+                idx++;
+        }
+    }
+
+    idx = 0;
+    if ( tables != NULL && rc == 0 )
+    {
+        while ( tables[ idx ] != NULL && rc == 0 )
+        {
+            pt = KDirectoryPathType ( hdf5_dir, "%s", tables[idx] );
+            if ( pt != kptDataset )
+            {
+                rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                if ( show_not_found )
+                    PLOGERR( klogErr, ( klogErr, rc, "hdf5-table '$(tbl)' not found",
+                                    "tbl=%s", tables[ idx ] ) );
+                else
+                    PLOGERR( klogWarn, ( klogWarn, rc, "hdf5-table '$(tbl)' not found",
+                                    "tbl=%s", tables[ idx ] ) );
+            }
+            else
+                idx++;
+        }
+    }
+
+    return rc;
+}
+
+
+void init_array_file( af_data * af )
+{
+    af->f  = NULL;
+    af->af = NULL;
+    af->extents = NULL;
+    af->rc = -1;
+    af->content = NULL;
+}
+
+
+void free_array_file( af_data * af )
+{
+    if ( af->af != NULL )
+    {
+        KArrayFileRelease( af->af );
+        af->af = NULL;
+    }
+    if ( af->f != NULL )
+    {
+        KFileRelease( af->f );
+        af->f = NULL;
+    }
+    if ( af->extents != NULL )
+    {
+        free( af->extents );
+        af->extents = NULL;
+    }
+    if ( af->content != NULL )
+    {
+        free( af->content );
+        af->content = NULL;
+    }
+}
+
+
+static rc_t read_cache_content( af_data * af )
+{
+    rc_t rc = 0;
+    uint64_t filesize = ( af->element_bits >> 3 ) * ( af->extents[ 0 ] );
+    if ( af->dimensionality == 2 )
+        filesize *= af->extents[ 1 ];
+    af->content = malloc( filesize );
+    if ( af->content == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted );
+    else
+    {
+        uint64_t pos2[ 2 ];
+        uint64_t read2[ 2 ];
+        uint64_t count2[ 2 ];
+        rc_t rc;
+
+        pos2[ 0 ] = 0;
+        pos2[ 1 ] = 0;
+        count2[ 0 ] = af->extents[ 0 ];
+        if ( af->dimensionality == 2 )
+            count2[ 1 ] = af->extents[ 1 ];
+        else
+            count2[ 1 ] = 0;
+
+        rc = KArrayFileRead ( af->af, af->dimensionality, pos2, 
+                              af->content, count2, read2 );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "error reading arrayfile-data int cache" );
+    }
+    return rc;
+}
+
+
+rc_t open_array_file( const KDirectory *dir,
+                      const char *name,
+                      af_data * af,
+                      const uint64_t expected_element_bits,
+                      const uint64_t expected_cols,
+                      bool disp_wrong_bitsize,
+                      bool cache_content,
+                      bool supress_err_msg )
+{
+    rc_t rc;
+
+    init_array_file( af );
+    /* open the requested "File" (actually a hdf5-table) as KFile 
+       the works because the given KDirectory is a HDF5-Directory */
+    rc = KDirectoryOpenFileRead ( dir, &af->f, "%s", name );
+    if ( rc != 0 )
+    {
+        if ( !supress_err_msg )
+        {
+            PLOGERR( klogErr, ( klogErr, rc, "cannot open hdf5-dataset '$(name)'",
+                            "name=%s", name ) );
+        }
+        return rc;
+    }
+    /* cast the KFile into a KArrayFile */
+    rc = MakeHDF5ArrayFile ( af->f, &af->af );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot open hdf5-arrayfile '$(name)'",
+                            "name=%s", name ) );
+        free_array_file( af );
+        return rc;
+    }
+    /* detect the dimensionality of the array-file */
+    rc = KArrayFileDimensionality ( af->af, &af->dimensionality );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot retrieve dimensionality on '$(name)'",
+                            "name=%s", name ) );
+        free_array_file( af );
+        return rc;
+    }
+    /* make a array to hold the extent in every dimension */
+    af->extents = malloc( af->dimensionality * ( sizeof ( uint64_t ) ) );
+    if ( af->extents == NULL )
+    {
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted );
+        PLOGERR( klogErr, ( klogErr, rc, "cannot allocate enough memory for extents of '$(name)'",
+                            "name=%s", name ) );
+        free_array_file( af );
+        return rc;
+    }
+    /* read the actuall extents into the created array */
+    rc = KArrayFileDimExtents ( af->af, af->dimensionality, af->extents );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot retrieve extents of '$(name)'",
+                            "name=%s", name ) );
+        free_array_file( af );
+        return rc;
+    }
+    /* request the size of the element in bits */
+    rc = KArrayFileElementSize ( af->af, &af->element_bits );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot retrieve element-size of '$(name)'",
+                            "name=%s", name ) );
+        free_array_file( af );
+        return rc;
+    }
+    /* compare the discovered bit-size with the expected one */
+    if ( af->element_bits != expected_element_bits )
+    {
+        rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+
+        /* display the wrong bitsize only if wanted 
+           ( this function can be called to probe the bitsize:
+             in this case the wrong one should not be shown as an error )*/
+        if ( disp_wrong_bitsize )
+            PLOGERR( klogErr, ( klogErr, rc, "unexpected element-bits of $(bsize) in '$(name)'",
+                     "bsize=%lu,name=%s", af->element_bits, name ) );
+
+        free_array_file( af );
+        return rc;
+    }
+
+    /* not generic, we handle only dimensionality of 1 and 2 */
+    if ( expected_cols == 1 )
+    {
+        /* the dimensionality has to be 1 in this case */
+        if ( af->dimensionality != 1 )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            PLOGERR( klogErr, ( klogErr, rc, "unexpected dimensionality of $(dim) in '$(name)'",
+                                "dim=%lu,name=%s", af->dimensionality, name ) );
+            free_array_file( af );
+            return rc;
+        }
+    }
+    else
+    {
+        /* the dimensionality has to be 2 in this case */
+        if ( af->dimensionality != 2 )
+        {
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+            PLOGERR( klogErr, ( klogErr, rc, "unexpected dimensionality of $(dim) in '$(name)'",
+                                "dim=%lu,name=%s", af->dimensionality, name ) );
+            free_array_file( af );
+            return rc;
+        }
+        else
+        {
+            if ( af->extents[ 1 ] != expected_cols )
+            {
+                rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+                PLOGERR( klogErr, ( klogErr, rc, "unexpected extent[1] of $(ext) in '$(name)'",
+                                    "ext=%lu,name=%s", af->extents[ 1 ], name ) );
+                free_array_file( af );
+                return rc;
+            }
+        }
+    }
+    if ( rc == 0 && cache_content )
+    {
+        rc = read_cache_content( af );
+    }
+    return rc;
+}
+
+
+/* assembles the 'absolute' path to the requested array-file before opening it */
+rc_t open_element( const KDirectory *hdf5_dir, 
+                   af_data *element, 
+                   const char * path,
+                   const char * name, 
+                   const uint64_t expected_element_bits,
+                   const uint64_t expected_cols,
+                   bool disp_wrong_bitsize,
+                   bool cache_content,
+                   bool supress_err_msg )
+{
+    char src_path[ 64 ];
+    size_t num_writ;
+
+    element->rc = string_printf ( src_path, sizeof src_path, &num_writ, "%s/%s", path, name );
+    if ( element->rc != 0 )
+        LOGERR( klogErr, element->rc, "cannot assemble hdf5-element-name" );
+    else
+        element->rc = open_array_file( hdf5_dir, src_path, element, 
+                                       expected_element_bits, expected_cols,
+                                       disp_wrong_bitsize,
+                                       cache_content,
+                                       supress_err_msg );
+    return element->rc;
+}
+
+
+/* we are reading data from an array-file,
+   the underlying array-file knows the size of an element */
+rc_t array_file_read_dim1( af_data * af, const uint64_t pos,
+                           void *dst, const uint64_t count,
+                           uint64_t *n_read )
+{
+    rc_t rc = 0;
+    if ( af->content == NULL )
+        rc = KArrayFileRead ( af->af, 1, &pos, dst, &count, n_read );
+    else
+    {
+        if ( ( pos + count ) > af->extents[ 0 ] )
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+        else
+        {
+            uint64_t buf_idx = ( af->element_bits >> 3 ) * pos;
+            size_t num = ( af->element_bits >> 3 ) * count;
+            char * src = af->content;
+            src+=buf_idx;
+            memmove( dst, src, num );
+            *n_read = count;
+        }
+    }
+    if ( rc != 0 )
+        LOGERR( klogErr, rc, "error reading arrayfile-data (1 dim)" );
+    return rc;
+}
+
+
+/* we are reading values in 2 dimensions from the array-file */
+rc_t array_file_read_dim2( af_data * af, const uint64_t pos,
+                           void *dst, const uint64_t count,
+                           const uint64_t ext2, uint64_t *n_read )
+{
+    rc_t rc = 0;
+    if ( af->content == NULL )
+    {
+        uint64_t pos2[ 2 ];
+        uint64_t read2[ 2 ];
+        uint64_t count2[ 2 ];
+        rc_t rc;
+
+        pos2[ 0 ] = pos;
+        pos2[ 1 ] = 0;
+        count2[ 0 ] = count;
+        count2[ 1 ] = ext2;
+        rc = KArrayFileRead ( af->af, 2, pos2, dst, count2, read2 );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "error reading arrayfile-data (2 dim)" );
+        *n_read = read2[ 0 ];
+    }
+    else
+    {
+        if ( ( pos + count ) > af->extents[ 0 ] )
+            rc = RC ( rcExe, rcNoTarg, rcLoading, rcData, rcInconsistent );
+        else
+        {
+            uint64_t buf_idx = ( af->element_bits >> 3 ) * pos * af->extents[ 1 ];
+            size_t num = ( af->element_bits >> 3 ) * count * af->extents[ 1 ];
+            char * src = af->content;
+            src+=buf_idx;
+            memmove( dst, src, num );
+            *n_read = count * af->extents[ 1 ];
+        }
+    }
+    return rc;
+}
+
+
+rc_t add_columns( VCursor * cursor, uint32_t count, int32_t exclude_this,
+                  uint32_t * idx_vector, const char ** names )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < count && rc == 0; ++i )
+    {
+        if ( i != exclude_this )
+        {
+            rc = VCursorAddColumn( cursor, &(idx_vector[i]), "%s", names[i] );
+            if ( rc != 0 )
+                PLOGERR( klogErr, ( klogErr, rc, "cannot add column '$(name)' to vdb-cursor",
+                                    "name=%s", names[i] ) );
+        }
+    }
+    return rc;
+}
+
+bool check_table_count( af_data *tab, const char * name,
+                        const uint64_t expected )
+{
+	bool res = ( tab->extents != NULL );
+	if ( res )
+	{
+		res = ( tab->extents[ 0 ] == expected );
+		if ( !res )
+		{
+			rc_t rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+			PLOGERR( klogErr, ( klogErr, rc, "'$(name)'.count != expected",
+								"name=%s", name ) );
+		}
+	}
+	else
+	{
+		PLOGMSG( klogWarn, ( klogWarn, "Table ... '$(name)' not found", "name=%s", name ) );
+	}
+    return res;
+}
+
+
+rc_t transfer_bits( VCursor *cursor, const uint32_t col_idx,
+    af_data *src, char * buffer, const uint64_t offset, const uint64_t count,
+    const uint32_t n_bits, const char * explanation )
+{
+    uint64_t n_read;
+    rc_t rc = array_file_read_dim1( src, offset, buffer, count, &n_read );
+    if ( rc == 0 )
+    {
+        if ( count != n_read )
+        {
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+            PLOGERR( klogErr, ( klogErr, rc, "cannot read enought data from hdf5-table for '$(name)'",
+                                "name=%s", explanation ) );
+        }
+        if ( rc == 0 )
+        {
+            rc = VCursorWrite( cursor, col_idx, n_bits, buffer, 0, count );
+            if ( rc != 0 )
+                PLOGERR( klogErr, ( klogErr, rc, "cannot write data to vdb for '$(name)'",
+                                    "name=%s", explanation ) );
+        }
+    }
+    return rc;
+}
+
+
+rc_t vdb_write_value( VCursor *cursor, const uint32_t col_idx,
+                      void * src, const uint32_t n_bits,
+                      const uint32_t n_elem, const char *explanation )
+{
+    rc_t rc = VCursorWrite( cursor, col_idx, n_bits, src, 0, n_elem );
+    if ( rc != 0 )
+        PLOGERR( klogErr, ( klogErr, rc, "cannot write data to vdb for '$(name)'",
+                            "name=%s", explanation ) );
+    return rc;
+}
+
+
+rc_t vdb_write_uint32( VCursor *cursor, const uint32_t col_idx,
+                       uint32_t value, const char *explanation )
+{
+    return vdb_write_value( cursor, col_idx, &value, 32, 1, explanation );
+}
+
+
+rc_t vdb_write_uint16( VCursor *cursor, const uint32_t col_idx,
+                       uint16_t value, const char *explanation )
+{
+    return vdb_write_value( cursor, col_idx, &value, 16, 1, explanation );
+}
+
+
+rc_t vdb_write_uint8( VCursor *cursor, const uint32_t col_idx,
+                      uint8_t value, const char *explanation )
+{
+    return vdb_write_value( cursor, col_idx, &value, 8, 1, explanation );
+}
+
+
+rc_t vdb_write_float32( VCursor *cursor, const uint32_t col_idx,
+                        float value, const char *explanation )
+{
+    return vdb_write_value( cursor, col_idx, &value, 32, 1, explanation );
+}
+
+
+rc_t prepare_table( VDatabase * database, VCursor ** cursor,
+                    const char * template_name,
+                    const char * table_name )
+{
+    VTable * table;
+    rc_t rc = VDatabaseCreateTable( database, &table, template_name, 
+                                    kcmInit | kcmMD5 | kcmParents, "%s", table_name );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot create vdb-table '$(name)'",
+                            "name=%s", table_name ) );
+    }
+    else
+    {
+        rc = VTableCreateCursorWrite( table, cursor, kcmInsert );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc, "cannot create vdb-cursor for '$(name)'",
+                                "name=%s", table_name ) );
+        }
+        VTableRelease( table );
+    }
+    return rc;
+}
+
+
+rc_t load_table( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx,
+                 const char * template_name, const char * table_name, loader_func func )
+{
+    VTable * table;
+    rc_t rc = VDatabaseCreateTable( database, &table, template_name, 
+                                    kcmInit | kcmMD5 | kcmParents, "%s", table_name );
+    if ( rc != 0 )
+        PLOGERR( klogErr, ( klogErr, rc, "cannot create vdb-table '$(name)'",
+                            "name=%s", table_name ) );
+    else
+    {
+        VCursor * cursor;
+        rc = VTableCreateCursorWrite( table, &cursor, kcmInsert );
+        if ( rc != 0 )
+            PLOGERR( klogErr, ( klogErr, rc, "cannot create vdb-cursor for '$(name)'",
+                                "name=%s", table_name ) );
+        else
+        {
+            VTableRelease( table );
+            rc = func( lctx, hdf5_src, cursor, table_name ); /* the callback does the job! */
+            VCursorRelease( cursor );
+        }
+    }
+    return rc;
+}
+
+
+rc_t progress_chunk( const KLoadProgressbar ** xml_progress, const uint64_t chunk )
+{
+    rc_t rc;
+    /* release the old progressbar... */
+    if ( *xml_progress != NULL )
+    {
+        KLoadProgressbar_Release( *xml_progress, false );
+        *xml_progress = NULL;
+    }
+    rc = KLoadProgressbar_Make( xml_progress, 0 );
+    if ( rc == 0 )
+        rc = KLoadProgressbar_Append( *xml_progress, chunk );
+    else
+        LOGERR( klogErr, rc, "cannot make KLoadProgressbar" );
+
+    return rc;
+}
+
+
+rc_t progress_step( const KLoadProgressbar * xml_progress )
+{
+    if ( xml_progress != NULL )
+       return KLoadProgressbar_Process( xml_progress, 1, false );
+    else
+        return 0;
+}
+
+
+void print_log_info( const char * info )
+{
+    KLogLevel tmp_lvl = KLogLevelGet();
+    KLogLevelSet( klogInfo );
+    LOGMSG( klogInfo, info );
+    KLogLevelSet( tmp_lvl );
+}
+
+
+/* was once intended to make the SEQ-table a alias to the CONSENSU-table,
+   this step was removed, but the decision could be reinstate again
+   because of that the function to do so is still here */
+rc_t pacbio_make_alias( VDatabase * vdb_db,
+                        const char *existing_obj, const char *alias_to_create )
+{
+    KDatabase *kdb;
+    rc_t rc = VDatabaseOpenKDatabaseUpdate ( vdb_db, & kdb );
+    if ( rc == 0 )
+    {
+        rc = KDatabaseAliasTable ( kdb, existing_obj, alias_to_create );
+        KDatabaseRelease ( kdb );
+    }
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-tools.h b/tools/pacbio-load/pl-tools.h
new file mode 100644
index 0000000..5b8618f
--- /dev/null
+++ b/tools/pacbio-load/pl-tools.h
@@ -0,0 +1,291 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pl_tools_
+#define _h_pl_tools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <kfs/file.h>
+#include <kfs/arrayfile.h>
+#include <hdf5/kdf5.h>
+#include <kapp/log-xml.h>
+#include <kapp/progressbar.h>
+
+/* for zmw */
+#define HOLE_NUMBER_BITSIZE 32
+#define HOLE_NUMBER_COLS 1
+
+#define HOLE_STATUS_BITSIZE 8
+#define HOLE_STATUS_COLS 1
+
+#define HOLE_XY_BITSIZE 16
+#define HOLE_XY_COLS 2
+
+#define NUMEVENT_BITSIZE 32
+#define NUMEVENT_COLS 1
+
+#define NUMPASSES_BITSIZE 32
+#define NUMPASSES_COLS 1
+
+/* for BaseCalls_cmn */
+#define BASECALL_BITSIZE 8
+#define BASECALL_COLS 1
+
+#define QUALITY_VALUE_BITSIZE 8
+#define QUALITY_VALUE_COLS 1
+
+#define DELETION_QV_BITSIZE 8
+#define DELETION_QV_COLS 1
+
+#define DELETION_TAG_BITSIZE 8
+#define DELETION_TAG_COLS 1
+
+#define INSERTION_QV_BITSIZE 8
+#define INSERTION_QV_COLS 1
+
+#define SUBSTITUTION_QV_BITZISE 8
+#define SUBSTITUTION_QV_COLS 1
+
+#define SUBSTITUTION_TAG_BITSIZE 8
+#define SUBSTITUTION_TAG_COLS 1
+
+/* for regions */
+#define REGIONS_BITSIZE 32
+#define REGIONS_COLS 5
+
+/* for sequence */
+#define PRE_BASE_FRAMES_BITSIZE 16
+#define PRE_BASE_FRAMES_COLS 1
+
+#define PULSE_INDEX_BITSIZE_16 16
+#define PULSE_INDEX_BITSIZE_32 32
+#define PULSE_INDEX_COLS 1
+
+#define WIDTH_IN_FRAMES_BITSIZE 16
+#define WIDTH_IN_FRAMES_COLS 1
+
+/* for metrics */
+#define BASE_FRACTION_BITSIZE 32
+#define BASE_FRACTION_COLS 4
+
+#define BASE_IPD_BITSIZE 32
+#define BASE_IPD_COLS 1
+
+#define BASE_RATE_BITSIZE 32
+#define BASE_RATE_COLS 1
+
+#define BASE_WIDTH_BITSIZE 32
+#define BASE_WIDTH_COLS 1
+
+#define CM_BAS_QV_BITSIZE 32
+#define CM_BAS_QV_COLS 4
+
+#define CM_DEL_QV_BITSIZE 32
+#define CM_DEL_QV_COLS 4
+
+#define CM_INS_QV_BITSIZE 32
+#define CM_INS_QV_COLS 4
+
+#define CM_SUB_QV_BITSIZE 32
+#define CM_SUB_QV_COLS 4
+
+#define LOCAL_BASE_RATE_BITSIZE 32
+#define LOCAL_BASE_RATE_COLS 1
+
+#define DARK_BASE_RATE_BITSIZE 32
+#define DARK_BASE_RATE_COLS 1
+
+#define HQ_REGION_START_TIME_BITSIZE 32
+#define HQ_REGION_START_TIME_COLS 1
+
+#define HQ_REGION_END_TIME_BITSIZE 32
+#define HQ_REGION_END_TIME_COLS 1
+
+#define HQ_REGION_SNR_BITSIZE 32
+#define HQ_REGION_SNR_COLS 4
+
+#define PRODUCTIVITY_BITSIZE 8
+#define PRODUCTIVITY_COLS 1
+
+#define READ_SCORE_BITSIZE 32
+#define READ_SCORE_COLS 1
+
+#define RM_BAS_QV_BITSIZE 32
+#define RM_BAS_QV_COLS 1
+
+#define RM_DEL_QV_BITSIZE 32
+#define RM_DEL_QV_COLS 1
+
+#define RM_INS_QV_BITSIZE 32
+#define RM_INS_QV_COLS 1
+
+#define RM_SUB_QV_BITSIZE 32
+#define RM_SUB_QV_COLS 1
+
+/* for passes */
+#define ADAPTER_HIT_AFTER_BITSIZE 8
+#define ADAPTER_HIT_AFTER_COLS 1
+
+#define ADAPTER_HIT_BEFORE_BITSIZE 8
+#define ADAPTER_HIT_BEFORE_COLS 1
+
+#define PASS_DIRECTION_BITSIZE 8
+#define PASS_DIRECTION_COLS 1
+
+#define PASS_NUM_BASES_BITSIZE 32
+#define PASS_NUM_BASES_COLS 1
+
+#define PASS_START_BASE_BITSIZE 32
+#define PASS_START_BASE_COLS 1
+
+typedef struct ld_context
+{
+    const XMLLogger* xml_logger;
+    const KLoadProgressbar *xml_progress;
+    const char *dst_path;
+    uint64_t total_seq_bases;
+    uint64_t total_seq_spots;
+    bool with_progress;
+    bool total_printed;
+    bool cache_content;
+    bool check_src_obj;
+} ld_context;
+
+
+void lctx_init( ld_context * lctx );
+void lctx_free( ld_context * lctx );
+
+
+rc_t check_src_objects( const KDirectory *hdf5_dir,
+                        const char ** groups, 
+                        const char **tables,
+                        bool show_not_found );
+
+typedef struct af_data
+{
+    struct KFile const *f;      /* the fake "file" from a HDF5-dir */
+    struct KArrayFile *af;      /* the arrayfile made from f */
+    rc_t rc;
+    uint8_t dimensionality;     /* how many dimensions the HDF5-dataset has */
+    uint64_t * extents;         /* the extension in every dimension */
+    uint64_t element_bits;      /* how big in bits is the element */
+    void * content;             /* read the whole thing into memory */
+} af_data;
+
+
+void init_array_file( af_data * af );
+void free_array_file( af_data * af );
+
+rc_t open_array_file( const KDirectory *dir, 
+                      const char *name,
+                      af_data * af,
+                      const uint64_t expected_element_bits,
+                      const uint64_t expected_cols,
+                      bool disp_wrong_bitsize,
+                      bool cache_content,
+                      bool supress_err_msg );
+
+rc_t open_element( const KDirectory *hdf5_dir,
+                   af_data *element, 
+                   const char * path,
+                   const char * name, 
+                   const uint64_t expected_element_bits,
+                   const uint64_t expected_cols,
+                   bool disp_wrong_bitsize,
+                   bool cache_content,
+                   bool supress_err_msg );
+
+rc_t array_file_read_dim1( af_data * af, const uint64_t pos,
+                           void *dst, const uint64_t count,
+                           uint64_t *n_read );
+
+rc_t array_file_read_dim2( af_data * af, const uint64_t pos,
+                           void *dst, const uint64_t count,
+                           const uint64_t ext2, uint64_t *n_read );
+
+rc_t add_columns( VCursor * cursor, uint32_t count, int32_t exclude_this,
+                  uint32_t * idx_vector, const char ** names );
+
+bool check_table_count( af_data *tab, const char * name,
+                        const uint64_t expected );
+
+rc_t transfer_bits( VCursor *cursor, const uint32_t col_idx,
+    af_data *src, char * buffer, const uint64_t offset, const uint64_t count,
+    const uint32_t n_bits, const char * explanation );
+
+rc_t vdb_write_value( VCursor *cursor, const uint32_t col_idx,
+                      void * src, const uint32_t n_bits,
+                      const uint32_t n_elem, const char *explanation );
+
+rc_t vdb_write_uint32( VCursor *cursor, const uint32_t col_idx,
+                       uint32_t value, const char *explanation );
+
+rc_t vdb_write_uint16( VCursor *cursor, const uint32_t col_idx,
+                       uint16_t value, const char *explanation );
+
+rc_t vdb_write_uint8( VCursor *cursor, const uint32_t col_idx,
+                      uint8_t value, const char *explanation );
+
+rc_t vdb_write_float32( VCursor *cursor, const uint32_t col_idx,
+                        float value, const char *explanation );
+
+typedef rc_t (*loader_func)( ld_context *lctx,
+                             KDirectory * hdf5_src, VCursor * cursor,
+                             const char * table_name );
+                        
+rc_t prepare_table( VDatabase * database, VCursor ** cursor,
+                    const char * template_name,
+                    const char * table_name );
+
+rc_t load_table( VDatabase * database, KDirectory * hdf5_src, ld_context *lctx,
+                 const char * template_name, const char * table_name,
+                 loader_func func );
+
+rc_t progress_chunk( const KLoadProgressbar ** xml_progress, const uint64_t chunk );
+rc_t progress_step( const KLoadProgressbar * xml_progress );
+
+void print_log_info( const char * info );
+
+rc_t pacbio_make_alias( VDatabase * vdb_db,
+                        const char *existing_obj, const char *alias_to_create );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/pl-zmw.c b/tools/pacbio-load/pl-zmw.c
new file mode 100644
index 0000000..6322c57
--- /dev/null
+++ b/tools/pacbio-load/pl-zmw.c
@@ -0,0 +1,221 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "pl-zmw.h"
+#include <sysalloc.h>
+
+void zmw_init( zmw_tab *tab )
+{
+    init_array_file( &tab->HoleNumber );
+    init_array_file( &tab->HoleStatus );
+    init_array_file( &tab->HoleXY );
+    init_array_file( &tab->NumEvent );
+    init_array_file( &tab->NumPasses );
+}
+
+
+void zmw_close( zmw_tab *tab )
+{
+    free_array_file( &tab->HoleNumber );
+    free_array_file( &tab->HoleStatus );
+    free_array_file( &tab->HoleXY );
+    free_array_file( &tab->NumEvent );
+    free_array_file( &tab->NumPasses );
+}
+
+
+rc_t zmw_open( const KDirectory *hdf5_dir, zmw_tab *tab,
+               const bool num_passes, const char * path, bool supress_err_msg )
+{
+    rc_t rc;
+
+    zmw_init( tab );
+    rc = open_element( hdf5_dir, &tab->HoleNumber, path, "ZMW/HoleNumber", 
+                       HOLE_NUMBER_BITSIZE, HOLE_NUMBER_COLS, true, false, supress_err_msg );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->HoleStatus, path, "ZMW/HoleStatus", 
+                           HOLE_STATUS_BITSIZE, HOLE_STATUS_COLS, true, false, supress_err_msg );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->HoleXY, path, "ZMW/HoleXY",
+                           HOLE_XY_BITSIZE, HOLE_XY_COLS, true, false, supress_err_msg );
+    if ( rc == 0 )
+        rc = open_element( hdf5_dir, &tab->NumEvent, path, "ZMW/NumEvent",
+                           NUMEVENT_BITSIZE, NUMEVENT_COLS, true, false, supress_err_msg );
+    if ( rc == 0 && num_passes )
+        rc = open_element( hdf5_dir, &tab->NumPasses, path, "Passes/NumPasses", 
+                           NUMPASSES_BITSIZE, NUMPASSES_COLS, true, false, supress_err_msg );
+
+    if ( rc != 0 )
+        zmw_close( tab ); /* releases only initialized elements */
+    return rc;
+}
+
+
+uint64_t zmw_total( zmw_tab *tab )
+{
+    rc_t rc = 0;
+    uint64_t res = 0, pos = 0;
+    uint64_t num_entries = tab->NumEvent.extents[0];
+
+    while( pos < num_entries && rc == 0 )
+    {
+        uint64_t n_read, to_read = ZMW_BLOCK_SIZE;
+        uint32_t d[ ZMW_BLOCK_SIZE ];
+
+        if ( ( pos + to_read ) >= num_entries )
+            to_read = ( num_entries - pos );
+        rc = array_file_read_dim1( &tab->NumEvent, pos, d, to_read, &n_read );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            pos+=n_read;
+            for ( i = 0; i < n_read; ++i )
+                res += d[ i ];
+        }
+    }
+    return res;
+}
+
+
+rc_t zmw_read_block( zmw_tab *tab, zmw_block * block,
+                     const uint64_t total_spots,
+                     const uint64_t pos,
+                     const bool with_num_passes )
+{
+    rc_t rc;
+    uint64_t to_read = ZMW_BLOCK_SIZE;
+    uint64_t read_NumEvent, read_HoleNumber, read_HoleStatus, 
+             read_HoleXY, read_NumPasses;
+
+    block->n_read = 0;
+    if ( ( pos + to_read ) >= total_spots )
+        to_read = ( total_spots - pos );
+    rc = array_file_read_dim1( &tab->NumEvent, pos, &block->NumEvent[0],
+                                to_read, &read_NumEvent );
+    if ( rc == 0 )
+        rc = array_file_read_dim1( &tab->HoleNumber, pos, &block->HoleNumber[0],
+                                    to_read, &read_HoleNumber );
+    if ( rc == 0 )
+        rc = array_file_read_dim1( &tab->HoleStatus, pos, &block->HoleStatus[0],
+                                    to_read, &read_HoleStatus );
+    if ( rc == 0 )
+        rc = array_file_read_dim2( &tab->HoleXY, pos, &block->HoleXY[0],
+                                   to_read, 2, &read_HoleXY );
+    if ( rc == 0 && with_num_passes )
+        rc = array_file_read_dim1( &tab->NumPasses, pos, &block->NumPasses[0],
+                                    to_read, &read_NumPasses );
+    if ( rc == 0 )
+    {
+        if ( ( read_NumEvent != read_HoleNumber ) ||
+             ( read_NumEvent != read_HoleStatus ) ||
+             ( read_NumEvent != read_HoleXY ) )
+        {
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+            LOGERR( klogErr, rc, "Diff in NumEvents/HoleNumber/HoleStatus/HoleXY" );
+        }
+        else
+        {
+            if ( with_num_passes && read_NumEvent != read_NumPasses )
+            {
+                rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                LOGERR( klogErr, rc, "Diff in NumEvents/NumPasses" );
+            }
+            else
+                block->n_read = read_NumEvent;
+        }
+    }
+    return rc;
+}
+
+
+void zmw_block_row( zmw_block * block, zmw_row * row, 
+                    const uint32_t idx )
+{
+    row->NumEvent    = block->NumEvent[ idx ];
+    row->HoleNumber  = block->HoleNumber[ idx ];
+    row->HoleStatus  = block->HoleStatus[ idx ];
+    row->HoleXY[ 0 ] = block->HoleXY[ idx * 2 ];
+    row->HoleXY[ 1 ] = block->HoleXY[ idx * 2 + 1 ];
+    row->NumPasses   = block->NumPasses[ idx ];
+}
+
+
+
+rc_t zmw_for_each( zmw_tab *tab, const KLoadProgressbar ** xml_progress, VCursor * cursor,
+                   bool with_progress, const uint32_t *col_idx, region_type_mapping *mapping,
+                   const bool with_num_passes, zmw_on_row on_row, void * data )
+{
+    zmw_block block;
+    zmw_row row;
+    pl_progress *progress;
+    uint64_t pos = 0;
+    uint64_t total_rows = tab->NumEvent.extents[0];
+
+    rc_t rc = progress_chunk( xml_progress, total_rows );
+    if ( with_progress )
+        pl_progress_make( &progress, total_rows );
+    row.spot_nr = 0;
+    row.offset = 0;
+    while( pos < total_rows && rc == 0 )
+    {
+        rc = zmw_read_block( tab, &block, total_rows, pos, with_num_passes );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < block.n_read && rc == 0; ++i )
+            {
+                rc = Quitting();
+                if ( rc == 0 )
+                {
+                    zmw_block_row( &block, &row, i );
+                    rc = on_row( cursor, col_idx, mapping, &row, data );
+                    if ( rc == 0 )
+                    {
+                        rc = progress_step( *xml_progress );
+                        if ( with_progress )
+                            pl_progress_increment( progress, 1 );
+                    }
+                    row.offset += block.NumEvent[ i ];
+                    row.spot_nr ++;
+                }
+                else
+                    LOGERR( klogErr, rc, "...loading ZMW-table interrupted" );
+            }
+            pos += block.n_read;
+        }
+    }
+
+    if ( with_progress )
+        pl_progress_destroy( progress );
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommit( cursor );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "cannot commit vdb-cursor on ZMW-table" );
+    }
+    return rc;
+}
diff --git a/tools/pacbio-load/pl-zmw.h b/tools/pacbio-load/pl-zmw.h
new file mode 100644
index 0000000..aebf7dd
--- /dev/null
+++ b/tools/pacbio-load/pl-zmw.h
@@ -0,0 +1,105 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_pl_zmw_
+#define _h_pl_zmw_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pl-tools.h"
+#include "pl-progress.h"
+#include "pl-regions.h"
+#include <kapp/main.h>
+#include <klib/rc.h>
+
+typedef struct zmw_tab
+{
+    af_data HoleNumber;
+    af_data HoleStatus;
+    af_data HoleXY;
+    af_data NumEvent;
+    af_data NumPasses;
+} zmw_tab;
+
+
+#define ZMW_BLOCK_SIZE 8192
+
+typedef struct zmw_block
+{
+    uint32_t NumEvent[ ZMW_BLOCK_SIZE ];
+    uint32_t HoleNumber[ ZMW_BLOCK_SIZE ];
+    uint8_t  HoleStatus[ ZMW_BLOCK_SIZE ];
+    uint16_t HoleXY[ ZMW_BLOCK_SIZE * 2 ];
+    uint32_t NumPasses[ ZMW_BLOCK_SIZE ];
+    uint64_t n_read;
+} zmw_block;
+
+
+typedef struct zmw_row
+{
+    uint64_t offset;
+    uint64_t spot_nr;
+
+    uint32_t NumEvent;
+    uint32_t HoleNumber;
+    uint16_t HoleXY[ 2 ];
+    uint8_t  HoleStatus;
+    uint32_t NumPasses;
+} zmw_row;
+
+
+typedef rc_t (*zmw_on_row)( VCursor *cursor, const uint32_t *col_idx,
+                            region_type_mapping *mapping,
+                            zmw_row *row, void * data );
+
+
+void zmw_init( zmw_tab *tab );
+void zmw_close( zmw_tab *tab );
+
+rc_t zmw_open( const KDirectory *hdf5_dir, zmw_tab *tab,
+               const bool num_passes, const char * path, bool supress_err_msg );
+
+uint64_t zmw_total( zmw_tab *tab );
+
+rc_t zmw_read_block( zmw_tab *tab, zmw_block * block,
+                     const uint64_t total_spots,
+                     const uint64_t pos,
+                     const bool with_num_passes );
+
+void zmw_block_row( zmw_block * block, zmw_row * row,
+                    const uint32_t idx );
+
+
+rc_t zmw_for_each( zmw_tab *tab, const KLoadProgressbar ** xml_progress, VCursor * cursor,
+                   bool with_progress, const uint32_t *col_idx, region_type_mapping *mapping,
+                   const bool with_num_passes, zmw_on_row on_row, void * data );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/pacbio-load/verify/ins_nl.pl b/tools/pacbio-load/verify/ins_nl.pl
new file mode 100755
index 0000000..f523787
--- /dev/null
+++ b/tools/pacbio-load/verify/ins_nl.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/perl -w
+
+my $buffer = "";
+my $F_pos;
+my $F_in;
+
+open ( F_pos, $ARGV[1] ) or die "Could not open $ARGV[1]: $!\n";
+open ( F_in, $ARGV[0] ) or die "Could not open $ARGV[0]: $!\n";
+binmode( F_in );
+foreach $line ( <F_pos> )
+{
+    chomp ( $line );  # remove the newline from $line.
+    read ( F_in, $buffer, $line ); # read as many bytes as the line says...
+    print "$buffer\n";
+}
diff --git a/tools/pacbio-load/verify/ins_nl_1.pl b/tools/pacbio-load/verify/ins_nl_1.pl
new file mode 100755
index 0000000..9856a02
--- /dev/null
+++ b/tools/pacbio-load/verify/ins_nl_1.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/perl -w
+
+my $buffer = "";
+my $F_pos;
+my $F_in;
+my $firstvalue;
+
+open ( F_pos, $ARGV[1] ) or die "Could not open $ARGV[1]: $!\n";
+open ( F_in, $ARGV[0] ) or die "Could not open $ARGV[0]: $!\n";
+binmode( F_in );
+foreach $line ( <F_pos> )
+{
+    chomp ( $line );  # remove the newline from $line.
+    read ( F_in, $buffer, $line ); # read as many bytes as the line says...
+    @charbuf = split( //, $buffer ); # split the buffer into an array of char's
+    $firstvalue = 1;
+    foreach ( @charbuf )
+    {
+        if ( $firstvalue == 1 )
+        {
+            printf ( "%d", ord( $_ ) );
+            $firstvalue = 0;
+        }
+        else
+        {
+            printf ( ", %d", ord( $_ ) );
+        }
+    }
+    print "\n";
+}
diff --git a/tools/pacbio-load/verify/ins_nl_2.pl b/tools/pacbio-load/verify/ins_nl_2.pl
new file mode 100755
index 0000000..a78f2fd
--- /dev/null
+++ b/tools/pacbio-load/verify/ins_nl_2.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl -w
+
+my $buffer = "";
+my $F_pos;
+my $F_in;
+my $nr;
+my $intval;
+
+open ( F_pos, $ARGV[1] ) or die "Could not open $ARGV[1]: $!\n";
+open ( F_in, $ARGV[0] ) or die "Could not open $ARGV[0]: $!\n";
+binmode( F_in );
+foreach $line ( <F_pos> )
+{
+    chomp ( $line );  # remove the newline from $line.
+    read ( F_in, $buffer, $line * 2 ); # read as many int16's as the line says...
+    for ( $nr = 0; $nr < $line; $nr++ )
+    {
+        if ( $nr > 0 ) { print ", "; }
+        # take 2 bytes (int16) from the buffer
+        $intval = substr( $buffer, $nr * 2, 2 );
+        print ( unpack( S, $intval ) ); # S ... unsigned int16
+    }
+    print "\n";
+}
diff --git a/tools/pacbio-load/verify/ins_nl_4.pl b/tools/pacbio-load/verify/ins_nl_4.pl
new file mode 100755
index 0000000..1f6e9a7
--- /dev/null
+++ b/tools/pacbio-load/verify/ins_nl_4.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl -w
+
+my $buffer = "";
+my $F_pos;
+my $F_in;
+my $nr;
+my $intval;
+
+open ( F_pos, $ARGV[1] ) or die "Could not open $ARGV[1]: $!\n";
+open ( F_in, $ARGV[0] ) or die "Could not open $ARGV[0]: $!\n";
+binmode( F_in );
+foreach $line ( <F_pos> )
+{
+    chomp ( $line );  # remove the newline from $line.
+    read ( F_in, $buffer, $line * 4 ); # read as many int32's as the line says...
+    for ( $nr = 0; $nr < $line; $nr++ )
+    {
+        if ( $nr > 0 ) { print ", "; }
+        # take 4 bytes (int32) from the buffer
+        $intval = substr( $buffer, $nr * 4, 4 );
+        print ( unpack( L, $intval ) ); # L ... unsigned int32
+    }
+    print "\n";
+}
diff --git a/tools/pacbio-load/verify/ins_nl_f.pl b/tools/pacbio-load/verify/ins_nl_f.pl
new file mode 100755
index 0000000..85aaa95
--- /dev/null
+++ b/tools/pacbio-load/verify/ins_nl_f.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+my $buffer = "";
+my $F_in;
+my $nr;
+my $floatbuf;
+my $floatval;
+
+open ( F_in, $ARGV[0] ) or die "Could not open $ARGV[0]: $!\n";
+binmode( F_in );
+while ( <F_in> )
+{
+    if ( read ( F_in, $buffer, 16 ) == 16 ) # read 16 bytes = 4 x float 32
+    {
+        print "[";
+        for ( $nr = 0; $nr < 4; $nr++ )
+        {
+            if ( $nr > 0 ) { print ", "; }
+            # take 4 bytes (float32) from the buffer
+            $floatbuf = substr( $buffer, $nr * 4, 4 );
+            $floatval = unpack( 'f', $floatbuf ); # f ... float int32-bit
+            print $floatval;
+        }
+        print "]\n";
+    }
+}
+close ( F_in );
diff --git a/tools/pileup-stats/Makefile b/tools/pileup-stats/Makefile
new file mode 100644
index 0000000..13f0d18
--- /dev/null
+++ b/tools/pileup-stats/Makefile
@@ -0,0 +1,81 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/pileup-stats
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	pileup-stats
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# pileup-stats
+#
+PILEUP_STATS_SRC = \
+	pileup-stats
+
+PILEUP_STATS_OBJ = \
+	$(addsuffix .$(OBJX),$(PILEUP_STATS_SRC))
+
+PILEUP_STATS_LIB =    \
+	-L$(LIBDIR)       \
+	-L$(NGS_LIBDIR)   \
+	-sgeneral-writer  \
+	-sncbi-ngs-c++    \
+	-sncbi-vdb-static \
+	-sngs-c++         \
+	-skapp \
+	-stk-version \
+
+
+$(BINDIR)/pileup-stats: $(PILEUP_STATS_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(PILEUP_STATS_LIB)
diff --git a/tools/pileup-stats/pileup-stats.cpp b/tools/pileup-stats/pileup-stats.cpp
new file mode 100644
index 0000000..85ee80e
--- /dev/null
+++ b/tools/pileup-stats/pileup-stats.cpp
@@ -0,0 +1,776 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "../general-loader/general-writer.hpp"
+
+#include <ngs/ncbi/NGS.hpp>
+#include <ngs/ReadCollection.hpp>
+#include <ngs/Reference.hpp>
+#include <ngs/Alignment.hpp>
+#include <ngs/Pileup.hpp>
+#include <ngs/PileupEvent.hpp>
+
+#include <kapp/main.h>
+#include <klib/printf.h>
+#include <klib/sra-release-version.h>
+#include <iomanip>
+
+#define DFLT_BUFFER_SIZE ( 32 * 1024 )
+
+#include <arch-impl.h>
+
+#include <iostream>
+#include <string.h>
+#include <ctype.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+
+using namespace ngs;
+
+namespace ncbi
+{
+    enum
+    {
+        col_RUN_NAME,
+        col_REFERENCE_SPEC,
+        col_REF_POS_TRANS,
+        col_DEPTH,
+        col_MISMATCH_COUNTS,
+        col_INSERTION_COUNTS,
+        col_DELETION_COUNT,
+
+        num_columns
+    };
+
+    static int tbl_id;
+    static int column_id [ num_columns ];
+    static uint8_t integer_column_flag_bits = 1; // pack integers by default
+    static int64_t zrow_id;
+
+    static uint32_t depth_cutoff = 1;               // do not output if depth <= this value
+    static uint32_t event_cutoff = 1;
+    static uint32_t num_significant_bits = 4;
+
+    static uint32_t verbosity;
+    static bool use_gw_logmessage = true; // log via general-writer API rather than stderr
+
+    const bool need_write_true = false;
+
+    inline
+    uint32_t filter_significant_bits ( uint32_t val )
+    {
+        if ( val != 0 )
+        {
+            // we find the most significant bit in value
+            // which will be 0..31 for non-zero values
+            // from which we subtract the number of significant bits
+            // being retained ( - 1 to account for 0-based index )
+            //
+            // e.g.:
+            //  val = 0x31, num_significant_bits = 4
+            //  uint32_msbit ( val ) => 5, meaning the most significant bit is 5,
+            //  which says there are 6 significant bits in total. we only want to
+            //  keep 4, however.
+            //  mask_index = 5 - ( 4 - 1 ) => 2
+            //  0xFFFFFFFF << mask_index => 0xFFFFFFFC
+            //  val then becomes 0x30
+            int mask_index = uint32_msbit ( val ) - ( int ) ( num_significant_bits - 1 );
+            if ( mask_index > 0 )
+            {
+                // this is a positive quantity
+                assert ( mask_index <= 31 );
+                val = val & ( 0xFFFFFFFF << mask_index );
+            }
+        }
+
+        return val;
+    }
+
+    static
+    void run (
+        GeneralWriter & out,
+        const String & runName, const String & refName, PileupIterator & pileup, uint64_t refLength, uint64_t refLengthSubTotal, uint64_t refLengthTotal )
+    {
+        int64_t ref_zpos, last_writ = 0;
+        bool need_write = false;
+
+        for ( ref_zpos = -1; pileup . nextPileup (); ++ ref_zpos, ++ zrow_id )
+        {
+            if ( ref_zpos < 0 )
+            {
+                last_writ = ref_zpos = pileup . getReferencePosition ();
+                int64_t ref_pos_trans = ref_zpos - zrow_id;
+                out . columnDefault ( column_id [ col_REF_POS_TRANS ], 64, & ref_pos_trans, 1 );
+                need_write = need_write_true;
+            }
+
+            switch ( verbosity )
+            {
+            case 0:
+                break;
+            case 1:
+                if ( ( ref_zpos % 1000000 ) == 0 )
+                {
+                    if ( ncbi :: use_gw_logmessage )
+                        out . progMsg ( refName, KAppVersion(), ref_zpos + refLengthSubTotal , refLengthTotal );
+                    else
+                        std :: cerr << "#  " << std :: setw ( 9 ) << ref_zpos << '\n';
+                }
+                break;
+            default:
+                if ( ( ref_zpos % 5000 ) == 0 )
+                {
+                    if ( ncbi :: use_gw_logmessage )
+                        out . progMsg ( refName, KAppVersion(), ref_zpos + refLengthSubTotal , refLengthTotal );
+                    else
+                    {
+                        if ( ( ref_zpos % 500000 ) == 0 )
+                            std :: cerr << "\n#  " << std :: setw ( 9 ) << ref_zpos << ' ';
+                        std :: cerr << '.';
+                    }
+                }
+            }
+
+            uint32_t ref_base_idx = 0;
+            bool ref_ambiguous = false;
+            char ref_base = pileup . getReferenceBase ();
+            switch ( toupper ( ref_base ) )
+            {
+            case 'A': break;
+            case 'C': ref_base_idx = 1; break;
+            case 'G': ref_base_idx = 2; break;
+            case 'T': ref_base_idx = 3; break;
+            default:
+                ref_base_idx = 0;
+                ref_ambiguous = true;
+            }
+
+            uint32_t depth = pileup . getPileupDepth ();
+
+            uint32_t mismatch_counts [ 4 ];
+            memset ( mismatch_counts, 0, sizeof mismatch_counts );
+
+            uint32_t ins_counts [ 4 ];
+            memset ( ins_counts, 0, sizeof ins_counts );
+
+            uint32_t del_cnt = 0;
+
+            if ( depth > depth_cutoff )
+            {
+                char mismatch;
+                uint32_t mismatch_idx;
+
+                while ( pileup . nextPileupEvent () )
+                {
+                    PileupEvent :: PileupEventType et = pileup . getEventType ();
+                    switch ( et & 7 )
+                    {
+                    case PileupEvent :: match:
+
+                        if ( ! ref_ambiguous )
+                        {
+                    handle_N_in_mismatch:
+                            if ( ( et & PileupEvent :: insertion ) != 0 )
+                                ++ ins_counts [ ref_base_idx ];
+                            break;
+                        }
+                        // intentional fall-through
+
+                    case PileupEvent :: mismatch:
+                        mismatch = pileup . getAlignmentBase ();
+                        mismatch_idx = 0;
+                        switch ( toupper ( mismatch ) )
+                        {
+                        case 'A': break;
+                        case 'C': mismatch_idx = 1; break;
+                        case 'G': mismatch_idx = 2; break;
+                        case 'T': mismatch_idx = 3; break;
+                        default:
+                            // treat N by removing this event from depth
+                            -- depth;
+                            goto handle_N_in_mismatch;
+                        }
+
+                        // first, assert that mismatch_idx cannot be ref_base_idx
+                        assert ( ref_ambiguous || mismatch_idx != ref_base_idx );
+
+                        // count insertions
+                        if ( ( et & PileupEvent :: insertion ) != 0 )
+                            ++ ins_counts [ mismatch_idx ];
+                        // count the mismatches
+                        ++ mismatch_counts [ mismatch_idx ];
+                        break;
+
+                    case PileupEvent :: deletion:
+                        if ( pileup . getEventIndelType () == PileupEvent :: normal_indel )
+                            ++ del_cnt;
+                        else
+                            -- depth;
+                        break;
+                    }
+                }
+            }
+
+            if ( depth > depth_cutoff )
+            {
+                int i;
+
+                if ( del_cnt <= event_cutoff )
+                    del_cnt = 0;
+
+                bool have_mismatch = false;
+                for ( i = 0; i < 4; ++ i )
+                {
+                    if ( mismatch_counts [ i ] <= event_cutoff )
+                        mismatch_counts [ i ] = 0;
+                    else
+                        have_mismatch = true;
+                }
+
+                bool have_inserts = false;
+                for ( i = 0; i < 4; ++ i )
+                {
+                    if ( ins_counts [ i ] <= event_cutoff )
+                        ins_counts [ i ] = 0;
+                    else
+                        have_inserts = true;
+                }
+
+                if ( num_significant_bits != 0 )
+                {
+                    depth = filter_significant_bits ( depth );
+                    del_cnt = filter_significant_bits ( del_cnt );
+                    for ( i = 0; i < 4; ++ i ) 
+                        mismatch_counts [ i ] = filter_significant_bits ( mismatch_counts [ i ] );
+                    for ( i = 0; i < 4; ++ i )
+                        ins_counts [ i ] = filter_significant_bits ( ins_counts [ i ] );
+                }
+                       
+                   
+                if ( ref_zpos > last_writ )
+                    out . moveAhead ( tbl_id, ref_zpos - last_writ );
+                out . write ( column_id [ col_DEPTH ], sizeof depth * 8, & depth, 1 );
+                if ( have_mismatch )
+                    out . write ( column_id [ col_MISMATCH_COUNTS ], sizeof mismatch_counts [ 0 ] * 8, mismatch_counts, 4 );
+                if ( have_inserts )
+                    out . write ( column_id [ col_INSERTION_COUNTS ], sizeof ins_counts [ 0 ] * 8, ins_counts, 4 );
+                if ( del_cnt != 0 )
+                    out . write ( column_id [ col_DELETION_COUNT ], sizeof del_cnt * 8, & del_cnt, 1 );
+                out . nextRow ( tbl_id );
+                last_writ = ref_zpos + 1;
+            }
+            else if ( need_write )
+            {
+                out . nextRow ( tbl_id );
+                need_write = false;
+            }
+
+        }
+        if ( ref_zpos > last_writ )
+            out . moveAhead ( tbl_id, ref_zpos - last_writ );
+    }
+
+    static
+    void prepareOutput ( GeneralWriter & out, const String & runName )
+    {
+        // add table
+        tbl_id = out . addTable ( "STATS" );
+
+        // add each column
+        column_id [ col_RUN_NAME ] = out . addColumn ( tbl_id, "RUN_NAME", 8 );
+        column_id [ col_REFERENCE_SPEC ] = out . addColumn ( tbl_id, "REFERENCE_SPEC", 8 );
+        column_id [ col_REF_POS_TRANS ] = out . addColumn ( tbl_id, "REF_POS_TRANS", 64, 0 );
+        column_id [ col_DEPTH ] = out . addColumn ( tbl_id, "DEPTH", 32, integer_column_flag_bits );
+        column_id [ col_MISMATCH_COUNTS ] = out . addColumn ( tbl_id, "MISMATCH_COUNTS", 32, integer_column_flag_bits );
+        column_id [ col_INSERTION_COUNTS ] = out . addColumn ( tbl_id, "INSERTION_COUNTS", 32, integer_column_flag_bits );
+        column_id [ col_DELETION_COUNT ] = out . addColumn ( tbl_id, "DELETION_COUNT", 32, integer_column_flag_bits );
+
+        // open the stream
+        out . open ();
+
+        // set default values
+        out . columnDefault ( column_id [ col_RUN_NAME ], 8, runName . data (), runName . size () );
+        out . columnDefault ( column_id [ col_DEPTH ], 32, "", 0 );
+        out . columnDefault ( column_id [ col_MISMATCH_COUNTS ], 32, "", 0 );
+        out . columnDefault ( column_id [ col_INSERTION_COUNTS ], 32, "", 0 );
+        out . columnDefault ( column_id [ col_DELETION_COUNT ], 32, "", 0 );
+    }
+
+    static
+    void set_software ( GeneralWriter & out )
+    {
+        char vers_str [ 64 ];
+        ver_t version = KAppVersion ();
+        string_printf ( vers_str, sizeof vers_str, NULL, "%V", version );
+        out . setSoftwareName ( "pileup-stats", vers_str );
+    }
+
+    static
+    void run ( const char * spec, const char *outfile, const char *_remote_db, size_t buffer_size, Alignment :: AlignmentCategory cat )
+    {
+        if ( ! ncbi :: use_gw_logmessage )
+        {
+            if ( verbosity > 0 )
+                std :: cerr << "# Opening run '" << spec << "'\n";
+        }
+        ReadCollection obj = ncbi :: NGS :: openReadCollection ( spec );
+        String runName = obj . getName ();
+
+        if ( ! ncbi :: use_gw_logmessage )
+        {
+            if ( verbosity > 0 )
+            {
+                std :: cerr << "# Preparing version " << GW_CURRENT_VERSION << " pipe to stdout\n";
+                if ( ( integer_column_flag_bits & 1 ) != 0 )
+                    std :: cerr << "#   USING INTEGER PACKING\n";
+            }
+        }
+
+        std :: string remote_db;
+        if ( _remote_db == NULL )
+            remote_db = runName + ".pileup_stat";
+        else
+            remote_db = _remote_db;
+
+        GeneralWriter *outp = ( outfile == NULL ) ? 
+            new GeneralWriter ( 1, buffer_size ) : new GeneralWriter ( outfile );
+
+        try
+        {
+            GeneralWriter &out = *outp;
+
+            // set software node
+            set_software ( out );
+
+            // add remote db event
+            out . setRemotePath ( remote_db );
+
+            // use schema
+            out . useSchema ( "align/pileup-stats.vschema", "NCBI:pileup:db:pileup_stats #1" );
+
+            prepareOutput ( out, runName );
+            if ( verbosity > 0 )
+            {
+                if ( ncbi :: use_gw_logmessage )
+                    out . logMsg ( "Accessing all references" );
+                else
+                    std :: cerr << "# Accessing all references\n";
+            }
+
+
+
+            // get the total number of references
+            uint64_t totalRefLength = 0;
+            {
+                ReferenceIterator rf = obj . getReferences ();
+                while ( rf . nextReference () )
+                    totalRefLength += rf . getLength ();
+            }
+
+            ReferenceIterator ref = obj . getReferences ();
+
+            uint64_t refLengthSubTotal = 0;
+            while ( ref . nextReference () )
+            {
+                String refName = ref . getCanonicalName ();
+
+                //get the length of the reference so that progress can be given
+                uint64_t refLength = ref . getLength ();
+
+                if ( verbosity > 0 )
+                {
+                    if ( ncbi :: use_gw_logmessage )
+                        out . logMsg ( "Processing reference '" + refName + "'" );
+                    else
+                        std :: cerr << "# Processing reference '" << refName << "'\n";
+                }
+                out . columnDefault ( column_id [ col_REFERENCE_SPEC ], 8, refName . data (), refName . size () );
+
+                if ( verbosity > 0 )
+                {
+                    if ( ncbi :: use_gw_logmessage )
+                        out . logMsg ( "Accessing all pileups" );
+                    else
+                        std :: cerr << "# Accessing all pileups\n";
+                }
+                PileupIterator pileup = ref . getPileups ( cat );
+                run ( out, runName, refName, pileup, refLength, refLengthSubTotal,  totalRefLength );
+
+                refLengthSubTotal += refLength;
+                if ( ! ncbi :: use_gw_logmessage )
+                {
+                    if ( verbosity > 1 )
+                        std :: cerr << '\n';
+                }
+            }
+        }
+        catch ( ErrorMsg & x )
+        {
+            outp -> logError ( x . what () );
+            delete outp;
+            throw;
+        }
+        catch ( const char x [] )
+        {
+            outp -> logError ( x );
+            delete outp;
+            throw;
+        }
+        catch ( ... )
+        {
+            outp -> logError ( "unknown exception" );
+            delete outp;
+            throw;
+        }
+        delete outp;
+    }
+}
+
+extern "C"
+{
+    rc_t CC Usage ( struct Args const * args )
+    {
+        return 0;
+    }
+
+    const char UsageDefaultName [] = "pileup-stats";
+
+    static 
+    const char * getArg ( int & i, int argc, char * argv [] )
+    {
+        
+        if ( ++ i == argc )
+            throw "Missing argument";
+        
+        return argv [ i ];
+    }
+
+    static
+    const char * findArg ( const char*  &arg, int & i, int argc, char * argv [] )
+    {
+        if ( arg [ 1 ] != 0 )
+        {
+            const char * next = arg + 1;
+            arg = "\0";
+            return next;
+        }
+
+        return getArg ( i, argc, argv );
+    }
+
+    static void handle_help ( const char *appName )
+    {
+        const char *appLeaf = strrchr ( appName, '/' );
+        if ( appLeaf ++ == 0 )
+            appLeaf = appName;
+
+        ver_t vers = KAppVersion ();
+
+        std :: cout
+            << '\n'
+            << "Usage:\n"
+            << "  " << appLeaf << " [options] <accession>"
+            << "\n\n"
+            << "Options:\n"
+            << "  -o|--output-file                 file for output\n"
+            << "                                   (default pipe to stdout)\n"
+            << "  -r|--remote-db                   name of remote database to create\n"
+            << "                                   (default <accession>.pileup_stat)\n"
+            << "  -x|--depth-cutoff                cutoff for depth <= value (default 1)\n"
+            << "  -e|--event-cutoff                cutoff for number of events > value (default " << ncbi::event_cutoff << ")\n"
+            << "  -p|--num-significant-bits        number of significant bits for depth and counts to store (default " << ncbi::num_significant_bits << ")\n"
+            << "  -a|--align-category              the types of alignments to pile up:\n"
+            << "                                   { primary, secondary, all } (default primary)\n"
+            << "  --buffer-size bytes              size of output pipe buffer - default " << DFLT_BUFFER_SIZE/1024 << "K bytes\n"
+            << "  -U|--unpack-integer              don't pack integers in output pipe - uses more bandwidth\n"
+            << "  -h|--help                        output brief explanation of the program\n"
+            << "  -v|--verbose                     increase the verbosity of the program.\n"
+            << "  -V|--version                     display the version of the program then quit.\n"
+            << "                                   use multiple times for more verbosity.\n"
+            << "  --log-stderr                     log via stderr rather than general-writer API (default - general-writer API)\n"
+            << '\n'
+            << appName << " : "
+            << ( vers >> 24 )
+            << '.'
+            << ( ( vers >> 16 ) & 0xFF )
+            << '.'
+            << ( vers & 0xFFFF )
+            << '\n'
+            << '\n'
+            ;
+    }
+
+    static void handle_version ( const char *progname )
+    {
+        ::ver_t vers = ::KAppVersion();
+
+        HelpVersion ( progname, vers );
+    }
+
+    static void CC handle_error ( const char *arg, void *message )
+    {
+        throw ( const char * ) message;
+    }
+
+    rc_t CC UsageSummary ( const char * progname ) {
+        handle_help ( progname );
+        return 0;
+    }
+
+    rc_t CC KMain ( int argc, char *argv [] )
+    {
+        rc_t rc = -1;
+        Alignment :: AlignmentCategory cat = Alignment :: primaryAlignment;
+        size_t buffer_size = DFLT_BUFFER_SIZE;
+        try
+        {
+            int num_runs = 0;
+            const char *outfile = NULL;
+            const char *remote_db = NULL;
+
+            for ( int i = 1; i < argc; ++ i )
+            {
+                const char * arg = argv [ i ];
+                if ( arg [ 0 ] != '-' )
+                {
+                    // have an input run
+                    argv [ ++ num_runs ] = ( char* ) arg;
+                }
+                else do switch ( ( ++ arg ) [ 0 ] )
+                {
+                case 'o':
+                    outfile = findArg ( arg, i, argc, argv );
+                    break;
+                case 'r':
+                    remote_db = findArg ( arg, i, argc, argv );
+                    break;
+                case 'x':
+                    ncbi :: depth_cutoff = AsciiToU32 ( findArg ( arg, i, argc, argv ), 
+                        handle_error, ( void * ) "Invalid depth cutoff" );
+                    break;
+                case 'e':
+                    ncbi :: event_cutoff = AsciiToU32 ( findArg ( arg, i, argc, argv ), 
+                        handle_error, ( void * ) "Invalid event cutoff" );
+                    break;
+                case 'p':
+                    ncbi :: num_significant_bits = AsciiToU32 ( findArg ( arg, i, argc, argv ), 
+                        handle_error, ( void * ) "Invalid num-significant-bits" );
+                    break;
+                case 'a':
+                {
+                    const char * atype = findArg ( arg, i, argc, argv );
+                    if ( strcmp ( atype, "all" ) == 0 )
+                        cat = Alignment :: all;
+                    else if ( strcmp ( atype, "primary" ) == 0 ||
+                              strcmp ( atype, "primaryAlignment" ) == 0 )
+                        cat = Alignment :: primaryAlignment;
+                    else if ( strcmp ( atype, "secondary" ) == 0 ||
+                              strcmp ( atype, "secondaryAlignment" ) == 0 )
+                        cat = Alignment :: secondaryAlignment;
+                    else
+                    {
+                        throw "Invalid alignment category";
+                    }
+                    break;
+                }
+                case 'U':
+                    ncbi :: integer_column_flag_bits = 0;
+                    break;
+                case 'v':
+                    ++ ncbi :: verbosity;
+                    break;
+                case 'h':
+                case '?':
+                    handle_help ( argv [ 0 ] );
+                    return 0;
+                case 'V':
+                    handle_version ( argv [ 0 ] );
+                    return 0;
+                case 'L': // eat it and do nothing
+                    findArg ( arg, i, argc, argv );
+                    break;
+                case 'z': // eat it and do nothing
+                    findArg ( arg, i, argc, argv );
+                    break;
+                case '-':
+                    ++ arg;
+                    if ( strcmp ( arg, "output-file" ) == 0 )
+                    {
+                        outfile = getArg ( i, argc, argv );
+                    }
+                    else if ( strcmp ( arg, "remote-db" ) == 0 )
+                    {
+                        remote_db = getArg ( i, argc, argv );
+                    }
+                    else if ( strcmp ( arg, "buffer-size" ) == 0 )
+                    {
+                        const char * str = getArg ( i, argc, argv );
+
+                        char * end;
+                        long new_buffer_size = strtol ( str, & end, 0 );
+                        if ( new_buffer_size < 0 || str == ( const char * ) end || end [ 0 ] != 0 )
+                            throw "Invalid buffer argument";
+
+                        buffer_size = new_buffer_size;
+                    }
+                    else if ( strcmp ( arg, "depth-cutoff" ) == 0 )
+                    {
+                        ncbi :: depth_cutoff = AsciiToU32 ( getArg ( i, argc, argv ), 
+                            handle_error, ( void * ) "Invalid depth cutoff" );
+                    }
+                    else if ( strcmp ( arg, "event-cutoff" ) == 0 )
+                    {
+                        ncbi :: event_cutoff = AsciiToU32 ( getArg ( i, argc, argv ),
+                            handle_error, ( void * ) "Invalid event cutoff" );
+                    }
+                    else if ( strcmp ( arg, "num-significant-bits" ) == 0 )
+                    {
+                        ncbi :: num_significant_bits = AsciiToU32 ( getArg ( i, argc, argv ),
+                            handle_error, ( void * ) "Invalid num-significant-bits" );
+                    }
+                    else if ( strcmp ( arg, "align-category" ) == 0 )
+                    {
+                        const char * atype = getArg ( i, argc, argv );
+                        if ( strcmp ( atype, "all" ) == 0 )
+                            cat = Alignment :: all;
+                        else if ( strcmp ( atype, "primary" ) == 0 ||
+                                  strcmp ( atype, "primaryAlignment" ) == 0 )
+                            cat = Alignment :: primaryAlignment;
+                        else if ( strcmp ( atype, "secondary" ) == 0 ||
+                                  strcmp ( atype, "secondaryAlignment" ) == 0 )
+                            cat = Alignment :: secondaryAlignment;
+                        else
+                        {
+                            throw "Invalid alignment category";
+                        }
+                    }
+                    else if ( strcmp ( arg, "unpack-integer" ) == 0 )
+                    {
+                        ncbi :: integer_column_flag_bits = 0;
+                    }
+                    else if ( strcmp ( arg, "verbose" ) == 0 )
+                    {
+                        ++ ncbi :: verbosity;
+                    }
+                    else if ( strcmp ( arg, "log-stderr" ) == 0 )
+                    {
+                        ncbi :: use_gw_logmessage = false;
+                    }
+                    else if ( strcmp ( arg, "help" ) == 0 )
+                    {
+                        handle_help ( argv [ 0 ] );
+                        return 0;
+                    }
+                    else if ( strcmp ( arg, "version" ) == 0 )
+                    {
+                        handle_version ( argv [ 0 ] );
+                        return 0;
+                    }
+                    else if ( strcmp ( arg, "log-level" ) == 0 )
+                    {
+                        /* eat it and do nothing */
+                        getArg ( i, argc, argv );
+                    }
+                    else if ( strcmp ( arg, "xml-log" ) == 0 )
+                    {
+                        /* eat it and do nothing */
+                        getArg ( i, argc, argv );
+                    }
+                    else if ( strcmp ( arg, "xml-log-fd" ) == 0 )
+                    {
+                        /* eat it and do nothing */
+                        getArg ( i, argc, argv );
+                    }
+                    else if ( strcmp ( arg, "version" ) == 0 )
+                    {
+                        handle_version ( argv [ 0 ] );
+                        return 0;
+                    }
+                    else
+                    {
+                        throw "Invalid Argument";
+                    }
+
+                    arg = "\0";
+
+                    break;
+                default:
+                    throw "Invalid argument";
+                }
+                while ( arg [ 1 ] != 0 );
+            }
+
+            if ( num_runs > 1 )
+                throw "only one run may be processed at a time";
+            for ( int i = 1; i <= num_runs; ++ i )
+            {
+                ncbi :: run ( argv [ i ], outfile, remote_db, buffer_size, cat );
+            }
+
+            rc = 0;
+        }
+        catch ( ErrorMsg & x )
+        {
+            if ( ! ncbi :: use_gw_logmessage )
+            {
+                std :: cerr
+                    << "ERROR: "
+                    << argv [ 0 ]
+                    << ": "
+                    << x . what ()
+                    << '\n'
+                    ;
+            }
+        }
+        catch ( const char x [] )
+        {
+            if ( ! ncbi :: use_gw_logmessage )
+            {
+                std :: cerr
+                    << "ERROR: "
+                    << argv [ 0 ]
+                    << ": "
+                    << x
+                    << '\n'
+                    ;
+            }
+        }
+        catch ( ... )
+        {
+            if ( ! ncbi :: use_gw_logmessage )
+            {
+                std :: cerr
+                    << "ERROR: "
+                    << argv [ 0 ]
+                    << ": unknown\n"
+                    ;
+            }
+        }
+
+        return rc;
+    }
+}
diff --git a/tools/prefetch/Makefile b/tools/prefetch/Makefile
new file mode 100644
index 0000000..c8e43dd
--- /dev/null
+++ b/tools/prefetch/Makefile
@@ -0,0 +1,93 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/prefetch
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	prefetch \
+#	aget
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# prefetch
+#
+PREFETCH_SRC = \
+	prefetch \
+	kfile-no-q
+
+PREFETCH_OBJ = \
+	$(addsuffix .$(OBJX),$(PREFETCH_SRC))
+
+PREFETCH_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+
+$(BINDIR)/prefetch: $(PREFETCH_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(PREFETCH_LIB)
+
+#-------------------------------------------------------------------------------
+# aget
+#
+GET_SRC = \
+	aget \
+	getAscp
+
+GET_OBJ = \
+	$(addsuffix .$(OBJX),$(GET_SRC))
+
+$(BINDIR)/aget: $(GET_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(PREFETCH_LIB)
+
diff --git a/tools/prefetch/kfile-no-q.c b/tools/prefetch/kfile-no-q.c
new file mode 100644
index 0000000..073220a
--- /dev/null
+++ b/tools/prefetch/kfile-no-q.c
@@ -0,0 +1,215 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "kfile-no-q.h"
+
+#include <kapp/main.h>
+
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/arc.h>
+#include <kfs/sra.h>
+
+#include <assert.h>
+#include <string.h>
+
+#define READ_CACHE_BLOCK_SIZE (1024*1024)
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define STS_FIN 3
+
+typedef rc_t ( * FileProcessFn ) ( const KDirectory_v1 * dir, const char * name );
+
+typedef struct {
+    FileProcessFn processFn;
+    
+    bool elimQuals;
+} VisitParams;
+
+static
+bool qual_col_filter ( const KDirectory * self, const char * path, void * data )
+{
+    if ( strstr(path, "col/QUALITY") == NULL )
+    {
+        return true;
+    }
+    
+    return false;
+}
+
+static
+rc_t sort_none (const KDirectory * self, struct Vector * v)
+{
+    return 0;
+}
+
+static
+rc_t visit_cb ( const KDirectory * self, uint32_t type, const char * name, void * data )
+{
+    rc_t rc = 0;
+    VisitParams * params = data;
+    
+    assert(params);
+    
+    if (params->processFn == NULL)
+        return rc;
+    
+    if (type == kptFile)
+    {
+        if (params->elimQuals)
+        {
+            char path[PATH_MAX];
+            rc = KDirectoryResolvePath ( self, true, path, sizeof path, name );
+        
+            if (rc == 0 && ( strstr(path, "/col/QUALITY/") == NULL ) )
+            {
+                rc = params->processFn(self, name);
+            }
+        }
+        else
+        {
+            rc = params->processFn(self, name);
+        }
+    }
+    
+    return rc;
+}
+
+static
+rc_t file_read ( const KDirectory * dir, const char * name )
+{
+    rc_t rc;
+    const KFile * kfile;
+    char buffer[READ_CACHE_BLOCK_SIZE];
+    uint64_t pos = 0;
+    uint64_t prevPos = 0;
+    size_t num_read;
+    
+    
+    rc = KDirectoryOpenFileRead ( dir, &kfile, name );
+    if (rc != 0)
+        return rc;
+    
+    do {
+        bool print = pos - prevPos > 200000000;
+        rc = Quitting();
+        
+        if (rc == 0) {
+            if (print) {
+                STSMSG(STS_FIN,
+                       ("Reading %lu bytes from pos. %lu", READ_CACHE_BLOCK_SIZE, pos));
+            }
+            rc = KFileRead(kfile,
+                           pos, buffer, READ_CACHE_BLOCK_SIZE, &num_read);
+            if (rc != 0) {
+                PLOGERR(klogInt, (klogInt, rc, "KFileRead failed for file $(name)",
+                                  "name=%S", name));
+            }
+            else {
+                pos += num_read;
+            }
+            
+            if (print) {
+                prevPos = pos;
+            }
+        }
+    } while (rc == 0 && num_read > 0);
+    
+    KFileRelease(kfile);
+
+    return rc;
+}
+
+rc_t CC KSraFileNoQuals( const struct KFile * self,
+                         const struct KFile ** kfile )
+{
+    rc_t rc;
+    struct KDirectory * kdir_native, * kdir_virtual;
+    const struct KFile * new_kfile;
+    
+    assert(self != NULL);
+    assert(kfile != NULL);
+    
+    rc = KDirectoryNativeDir(&kdir_native);
+    if (rc != 0)
+    {
+        return rc;
+    }
+    
+    rc = KDirectoryOpenArcDirRead_silent_preopened ( kdir_native, (const struct KDirectory **)&kdir_virtual, false, "/virtual", tocKFile,
+                                                      ( void* ) self, KArcParseSRA, NULL, NULL );
+    if (rc == 0)
+    {
+        rc = KDirectoryOpenTocFileRead (kdir_virtual, &new_kfile, sraAlign4Byte, qual_col_filter, NULL, sort_none );
+        KDirectoryRelease (kdir_virtual);
+        
+        if (rc == 0)
+        {
+            *kfile = new_kfile;
+        }
+    }
+    
+    KDirectoryRelease (kdir_native);
+    
+    return 0;
+}
+
+rc_t CC KSraReadCacheFile( const struct KFile * self, bool elimQuals )
+{
+    rc_t rc;
+    struct KDirectory * kdir_native, * kdir_virtual;
+
+    
+    assert(self != NULL);
+    
+    rc = KDirectoryNativeDir(&kdir_native);
+    if (rc != 0)
+    {
+        return rc;
+    }
+    
+    rc = KDirectoryOpenArcDirRead_silent_preopened ( kdir_native, (const struct KDirectory **)&kdir_virtual, false, "/virtual", tocKFile,
+                                                    ( void* ) self, KArcParseSRA, NULL, NULL );
+    if (rc == 0)
+    {
+        VisitParams params;
+        params.elimQuals = elimQuals;
+        params.processFn = &file_read;
+        
+        rc = KDirectoryVisit(kdir_virtual, true, visit_cb, &params, ".");
+        KDirectoryRelease (kdir_virtual);
+    }
+    
+    KDirectoryRelease (kdir_native);
+    
+    return 0;
+}
diff --git a/tools/prefetch/kfile-no-q.h b/tools/prefetch/kfile-no-q.h
new file mode 100644
index 0000000..c123720
--- /dev/null
+++ b/tools/prefetch/kfile-no-q.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_kfile_no_q_
+#define _h_kfile_no_q_
+
+#include <klib/rc.h>
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+
+
+rc_t CC KSraFileNoQuals( const struct KFile * self,
+                         const struct KFile ** kfile );
+
+rc_t CC KSraReadCacheFile( const struct KFile * self, bool elimQuals );
+
+
+#endif /* _h_kfile_no_q_ */
diff --git a/tools/prefetch/prefetch.c b/tools/prefetch/prefetch.c
new file mode 100644
index 0000000..d02e794
--- /dev/null
+++ b/tools/prefetch/prefetch.c
@@ -0,0 +1,3679 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/********** includes **********/
+
+#include <kapp/args-conv.h> /* ArgsConvFilepath */
+#include <kapp/main.h> /* KAppVersion */
+
+#include <kdb/manager.h> /* kptDatabase */
+
+#include <kfg/config.h> /* KConfig */
+#include <kfg/kart.h> /* Kart */
+#include <kfg/repository.h> /* KRepositoryMgr */
+
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/vdb-priv.h> /* VDatabaseIsCSRA */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/path.h> /* VPath */
+#include <vfs/resolver.h> /* VResolver */
+
+#include <kns/ascp.h> /* ascp_locate */
+#include <kns/manager.h>
+#include <kns/stream.h> /* KStreamRelease */
+#include <kns/kns-mgr-priv.h>
+#include <kns/http.h>
+
+#include <kfs/file.h> /* KFile */
+#include <kfs/gzip.h> /* KFileMakeGzipForRead */
+#include <kfs/subfile.h> /* KFileMakeSubRead */
+#include <kfs/cacheteefile.h> /* KDirectoryMakeCacheTee */
+
+#include <klib/container.h> /* BSTree */
+#include <klib/data-buffer.h> /* KDataBuffer */
+#include <klib/log.h> /* PLOGERR */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/printf.h> /* string_printf */
+#include <klib/rc.h>
+#include <klib/status.h> /* STSMSG */
+#include <klib/text.h> /* String */
+
+#include <strtol.h> /* strtou64 */
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h> /* free */
+#include <string.h> /* memset */
+#include <time.h> /* time */
+
+#include <stdio.h> /* printf */
+
+#include "kfile-no-q.h"
+
+#define DISP_RC(rc, err) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, err))
+
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define STS_TOP 0
+#define STS_INFO 1
+#define STS_DBG 2
+#define STS_FIN 3
+
+#define USE_CURL 0
+#define ALLOW_STRIP_QUALS 0
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+typedef enum {
+    eOrderSize,
+    eOrderOrig
+} EOrder;
+typedef enum {
+    eForceNo, /* do not download found and complete objects */
+    eForceYes,/* force download of found and complete objects */
+    eForceYES /* force download; ignore lockes */
+} EForce;
+typedef enum {
+    eRunTypeUnknown,
+    eRunTypeList,     /* list sizes */
+    eRunTypeDownload,
+    eRunTypeGetSize    /* download ordered by sizes */
+} ERunType;
+typedef struct {
+    const VPath *path;
+    const String *str;
+} VPathStr;
+typedef struct {
+    BSTNode n;
+    char *path;
+} TreeNode;
+typedef struct {
+    ERunType type;
+    char *name;
+
+    VPathStr local;
+    const String *cache;
+    VPathStr remote;
+
+    const KFile *file;
+    uint64_t remoteSz;
+
+    bool undersized; /* remoteSz < min allowed size */
+    bool oversized; /* remoteSz >= max allowed size */
+
+    bool existing; /* the path is a path to an existing local file */
+
+ /* path to the resolved object : absolute path or resolved(local or cache) */
+    VPathStr path;
+
+    VPath *accession;
+    uint64_t project;
+
+    const KartItem *kartItem;
+
+    VResolver *resolver;
+} Resolved;
+typedef struct {
+    Args *args;
+    bool check_all;
+
+    bool list_kart;
+    bool list_kart_numbered;
+    bool list_kart_sized;
+    EOrder order;
+
+    const char *rows;
+
+    EForce force;
+    KConfig *cfg;
+    KDirectory *dir;
+
+    const KRepositoryMgr *repoMgr;
+    const VDBManager *mgr;
+    VFSManager *vfsMgr;
+    KNSManager *kns;
+
+    VResolver *resolver;
+
+    void *buffer;
+    size_t bsize;
+
+    bool undersized; /* remoteSz < min allowed size */
+    bool oversized; /* remoteSz >= max allowed size */
+
+    BSTree downloaded;
+
+    size_t minSize;
+    size_t maxSize;
+    uint64_t heartbeat;
+
+    bool noAscp;
+    bool noHttp;
+
+    bool forceAscpFail;
+
+    bool ascpChecked;
+    const char *ascp;
+    const char *asperaKey;
+    String *ascpMaxRate;
+    const char *ascpParams; /* do not free! */
+
+    bool stripQuals; /* this will download file without quality columns */
+    bool eliminateQuals; /* this will download cache file with eliminated quality columns which could filled later */
+    
+#if _DEBUGGING
+    const char *textkart;
+#endif
+} Main;
+typedef struct {
+    /* "plain" command line argument */
+    const char *desc;
+
+    const KartItem *item;
+
+#if _DEBUGGING
+    const char *textkart;
+#endif
+
+    Resolved resolved;
+    int number;
+    
+    bool isDependency;
+
+    Main *main; /* just a pointer, no refcount here, don't release it */
+} Item;
+typedef struct {
+    const char *obj;
+    bool done;
+    Kart *kart;
+    bool isKart;
+} Iterator;
+typedef struct {
+    BSTNode n;
+    Item *i;
+} KartTreeNode;
+/********** String extension **********/
+static rc_t StringRelease(const String *self) {
+    free((String*)self);
+    return 0;
+}
+
+static char* StringCheck(const String *self, rc_t rc) {
+    if (rc == 0 && self != NULL
+        && self->addr != NULL && self->len != 0 && self->addr[0] != '\0')
+    {
+        return string_dup(self->addr, self->size);
+    }
+    return NULL;
+}
+
+static
+bool _StringIsXYZ(const String *self, const char **withoutScheme, const char * scheme, size_t scheme_size)
+{
+    const char *dummy = NULL;
+
+    assert(self && self->addr);
+
+    if (withoutScheme == NULL) {
+        withoutScheme = &dummy;
+    }
+
+    *withoutScheme = NULL;
+
+    if (string_cmp(self->addr, self->len, scheme, scheme_size,
+                                                scheme_size) == 0)
+    {
+        *withoutScheme = self->addr + scheme_size;
+        return true;
+    }
+    return false;
+}
+
+static
+bool _StringIsFasp(const String *self, const char **withoutScheme)
+{
+    const char fasp[] = "fasp://";
+    return _StringIsXYZ ( self, withoutScheme, fasp, sizeof fasp - 1 );
+}
+
+static
+bool _StringIsHttps(const String *self, const char **withoutScheme)
+{
+    const char https[] = "https://";
+    return _StringIsXYZ ( self, withoutScheme, https, sizeof https - 1 );
+}
+/********** KFile extension **********/
+static
+rc_t _KFileOpenRemote(const KFile **self, KNSManager *kns, const char *path)
+{
+    rc_t rc = 0;
+    assert(self);
+    if (*self != NULL) {
+        return 0;
+    }
+    rc = KNSManagerMakeReliableHttpFile(kns, self, NULL, 0x01010000, path);
+    return rc;
+}
+
+/********** KDirectory extension **********/
+static rc_t _KDirectoryMkTmpPrefix(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    size_t num_writ = 0;
+    rc_t rc = string_printf(out, sz, &num_writ, "%S.tmp", prefix);
+    if (rc != 0) {
+        DISP_RC2(rc, "string_printf(tmp)", prefix->addr);
+        return rc;
+    }
+
+    if (num_writ > sz) {
+        rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        PLOGERR(klogInt, (klogInt, rc,
+            "bad string_printf($(s).tmp) result", "s=%S", prefix));
+        return rc;
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryMkTmpName(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    rc_t rc = 0;
+    int i = 0;
+
+    assert(prefix);
+
+    while (rc == 0) {
+        size_t num_writ = 0;
+        rc = string_printf(out, sz, &num_writ,
+            "%S.tmp.%d.tmp", prefix, rand() % 100000);
+        if (rc != 0) {
+            DISP_RC2(rc, "string_printf(tmp.rand)", prefix->addr);
+            break;
+        }
+
+        if (num_writ > sz) {
+            rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+            PLOGERR(klogInt, (klogInt, rc,
+                "bad string_printf($(s).tmp.rand) result", "s=%S", prefix));
+            return rc;
+        }
+        if (KDirectoryPathType(self, "%s", out) == kptNotFound) {
+            break;
+        }
+        if (++i > 999) {
+            rc = RC(rcExe, rcFile, rcCopying, rcName, rcUndefined);
+            PLOGERR(klogInt, (klogInt, rc,
+                "cannot generate unique tmp file name for $(name)", "name=%S",
+                prefix));
+            return rc;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryMkLockName(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    rc_t rc = 0;
+    size_t num_writ = 0;
+
+    assert(prefix);
+
+    rc = string_printf(out, sz, &num_writ, "%S.lock", prefix);
+    DISP_RC2(rc, "string_printf(lock)", prefix->addr);
+
+    if (rc == 0 && num_writ > sz) {
+        rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        PLOGERR(klogInt, (klogInt, rc,
+            "bad string_printf($(s).lock) result", "s=%S", prefix));
+        return rc;
+    }
+
+    return rc;
+}
+
+static
+rc_t _KDirectoryCleanCache(KDirectory *self, const String *local)
+{
+    rc_t rc = 0;
+
+    char cache[PATH_MAX] = "";
+    size_t num_writ = 0;
+
+    assert(self && local && local->addr);
+
+    if (rc == 0) {
+        rc = string_printf(cache, sizeof cache, &num_writ, "%S.cache", local);
+        DISP_RC2(rc, "string_printf(.cache)", local->addr);
+    }
+
+    if (rc == 0 && KDirectoryPathType(self, "%s", cache) != kptNotFound) {
+        STSMSG(STS_DBG, ("removing %s", cache));
+        rc = KDirectoryRemove(self, false, "%s", cache);
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryClean(KDirectory *self, const String *cache,
+    const char *lock, const char *tmp, bool rmSelf)
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+
+    char tmpName[PATH_MAX] = "";
+    const char *dir = tmpName;
+    const char *tmpPfx = NULL;
+    size_t tmpPfxLen = 0;
+
+    assert(self && cache);
+
+    rc = _KDirectoryMkTmpPrefix(self, cache, tmpName, sizeof tmpName);
+    if (rc == 0) {
+        char *slash = strrchr(tmpName, '/');
+        if (slash != NULL) {
+            if (strlen(tmpName) == slash + 1 - tmpName) {
+                rc = RC(rcExe,
+                    rcDirectory, rcSearching, rcDirectory, rcIncorrect);
+                PLOGERR(klogInt, (klogInt, rc,
+                    "bad file name $(path)", "path=%s", tmpName));
+            }
+            else {
+                *slash = '\0';
+                tmpPfx = slash + 1;
+            }
+        }
+        else {
+            rc = RC(rcExe, rcDirectory, rcSearching, rcChar, rcNotFound);
+            PLOGERR(klogInt, (klogInt, rc,
+                    "cannot extract directory from $(path)", "path=%s", dir));
+        }
+        tmpPfxLen = strlen(tmpPfx);
+    }
+
+    if (tmp != NULL && KDirectoryPathType(self, "%s", tmp) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %s", tmp));
+        rc3 = KDirectoryRemove(self, false, "%s", tmp);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    assert(cache);
+    if (rmSelf && KDirectoryPathType(self, "%s", cache->addr) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %S", cache));
+        rc3 = KDirectoryRemove(self, false, "%S", cache);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    if (rc == 0) {
+        uint32_t count = 0;
+        uint32_t i = 0;
+        KNamelist *list = NULL;
+        STSMSG(STS_DBG, ("listing %s for old temporary files", dir));
+        rc = KDirectoryList(self, &list, NULL, NULL, "%s", dir);
+        DISP_RC2(rc, "KDirectoryList", dir);
+
+        if (rc == 0) {
+            rc = KNamelistCount(list, &count);
+            DISP_RC2(rc, "KNamelistCount(KDirectoryList)", dir);
+        }
+
+        for (i = 0; i < count && rc == 0; ++i) {
+            const char *name = NULL;
+            rc = KNamelistGet(list, i, &name);
+            if (rc != 0) {
+                DISP_RC2(rc, "KNamelistGet(KDirectoryList)", dir);
+            }
+            else {
+                if (strncmp(name, tmpPfx, tmpPfxLen) == 0) {
+                    rc_t rc3 = 0;
+                    STSMSG(STS_DBG, ("removing %s", name));
+                    rc3 = KDirectoryRemove(self, false,
+                        "%s%c%s", dir, '/', name);
+                    if (rc2 == 0 && rc3 != 0) {
+                        rc2 = rc3;
+                    }
+                }
+            }
+        }
+
+        RELEASE(KNamelist, list);
+    }
+
+    if (lock != NULL && KDirectoryPathType(self, "%s", lock) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %s", lock));
+        rc3 = KDirectoryRemove(self, false, "%s", lock);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    return rc;
+}
+
+/********** VResolver extension **********/
+static rc_t V_ResolverRemote(const VResolver *self,
+    VRemoteProtocols protocols, struct VPath const * accession,
+    struct VPath const ** remote, struct VPath const ** cache)
+{
+    return VResolverQuery(self, protocols, accession, NULL, remote, cache);
+}
+
+static rc_t V_ResolverLocal(const VResolver *self,
+    struct VPath const * accession, struct VPath const ** path )
+{
+    return VResolverQuery(self, 0, accession, path, NULL, NULL);
+}
+
+static rc_t _VResolverRemote(VResolver *self, VRemoteProtocols protocols,
+    const char *name, const VPath *vaccession,
+    const VPath **vremote, const String **remote,
+    const String **cache)
+{
+    rc_t rc = 0;
+    const VPath *vcache = NULL;
+    assert(vaccession && vremote);
+    if (*vremote != NULL) {
+        RELEASE(VPath, *vremote);
+    }
+    rc = V_ResolverRemote(self, protocols, vaccession, vremote, &vcache);
+    if (rc == 0) {
+        char path[PATH_MAX] = "";
+        size_t len = 0;
+        rc = VPathReadUri(*vremote, path, sizeof path, &len);
+        DISP_RC2(rc, "VPathReadUri(VResolverRemote)", name);
+        if (rc == 0) {
+            String local_str;
+            char *query = string_chr(path, len, '?');
+            if (query != NULL) {
+                *query = '\0';
+            }
+            StringInit(&local_str, path, len, (uint32_t)len);
+            RELEASE(String, *remote);
+            rc = StringCopy(remote, &local_str);
+            DISP_RC2(rc, "StringCopy(VResolverRemote)", name);
+        }
+    }
+    else if (NotFoundByResolver(rc)) {
+        PLOGERR(klogErr, (klogErr, rc, "'$(acc)' cannot be found.",
+            "acc=%s", name));
+    }
+    else {
+        DISP_RC2(rc, "Cannot resolve remote", name);
+    }
+    if (rc == 0 && cache != NULL) {
+        String path_str;
+        if (vcache == NULL) {
+            rc = RC(rcExe, rcResolver, rcResolving, rcPath, rcNotFound);
+            PLOGERR(klogInt, (klogInt, rc, "cannot get cache location "
+                "for $(acc).", /* Try to cd out of protected repository.", */
+                "acc=%s" , name));
+        }
+        if (rc == 0) {
+            rc = VPathGetPath(vcache, &path_str);
+            DISP_RC2(rc, "VPathGetPath(VResolverCache)", name);
+        }
+        if (rc == 0) {
+            if (*cache != NULL) {
+                free((void*)*cache);
+            }
+            rc = StringCopy(cache, &path_str);
+            DISP_RC2(rc, "StringCopy(VResolverCache)", name);
+        }
+    }
+    RELEASE(VPath, vcache);
+    return rc;
+}
+
+/********** VPathStr **********/
+static rc_t VPathStrFini(VPathStr *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    VPathRelease(self->path);
+
+    RELEASE(String, self->str);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+static
+rc_t VPathStrInitStr(VPathStr *self, const char *str, size_t len)
+{
+    String s;
+    assert(self);
+    if (len == 0) {
+        len = string_size(str);
+    }
+    StringInit(&s, str, len, (uint32_t)len);
+    VPathStrFini(self);
+    return StringCopy(&self->str, &s);
+}
+
+/********** TreeNode **********/
+static int64_t CC bstCmp(const void *item, const BSTNode *n) {
+    const char* path = item;
+    const TreeNode* sn = (const TreeNode*) n;
+
+    assert(path && sn && sn->path);
+
+    return strcmp(path, sn->path);
+}
+
+static int64_t CC bstSort(const BSTNode* item, const BSTNode* n) {
+    const TreeNode* sn = (const TreeNode*) item;
+
+    return bstCmp(sn->path, n);
+}
+
+static void CC bstWhack(BSTNode* n, void* ignore) {
+    TreeNode* sn = (TreeNode*) n;
+
+    assert(sn);
+
+    free(sn->path);
+
+    memset(sn, 0, sizeof *sn);
+
+    free(sn);
+}
+
+/********** NumIterator **********/
+
+typedef enum {
+    eNIBegin,
+    eNINumber,
+    eNIInterval,
+    eNIDash,
+    eNIComma,
+    eNIBad,
+    eNIForever,
+    eNIEnd
+} ENumIteratorState;
+typedef struct {
+    ENumIteratorState state;
+    bool skip;
+    const char *s;
+    int32_t crnt;
+    int32_t intEnd;
+} NumIterator;
+static void NumIteratorInit(NumIterator *self, const char *row) {
+    assert(self);
+    memset(self, 0, sizeof *self);
+    self->crnt = self->intEnd = -1;
+    self->s = row;
+}
+
+static int32_t NumIteratorGetNum(NumIterator *self) {
+    int32_t n = 0;
+    for (n = 0; *(self->s) >= '0' && *(self->s) <= '9'; ++(self->s)) {
+        n = n * 10 + *(self->s) - '0';
+    }
+    return n;
+}
+
+static bool NumIteratorNext(NumIterator *self, int64_t crnt) {
+    char c = '\0';
+    assert(self);
+    while (true) {
+        self->skip = false;
+        switch (self->state) {
+            case eNIBegin:
+            case eNIComma:
+                if (self->s == NULL || *(self->s) == '\0') {
+                    if (self->state == eNIBegin) {
+                        self->state = eNIForever;
+                        continue;
+                    }
+                    else {
+                        self->state = eNIEnd;
+                        continue;
+                    }
+                }
+                c = *(self->s);
+                ++(self->s);
+                if (c == ',') {
+                    self->state = eNIComma;
+                    continue;
+                }
+                else if (c == '-') {
+                    self->state = eNIDash;
+                    continue;
+                }
+                else if (c >= '0' && c <= '9') {
+                    --(self->s);
+                    self->crnt = NumIteratorGetNum(self);
+                    self->state = eNINumber;
+                    if (self->crnt < crnt) {
+                        continue;
+                    }
+                    else {
+                        if (self->crnt > crnt) {
+                            self->skip = true;
+                        }
+                        return true;
+                    }
+                    continue;
+                }
+                else {
+                    self->state = eNIBad;
+                    continue;
+                }
+            case eNIInterval:
+                if (crnt <= self->intEnd) {
+                    return true;
+                }
+          /* no break here */
+            case eNINumber:
+                if (self->crnt >= crnt) {
+                    if (self->crnt > crnt) {
+                        self->skip = true;
+                    }
+                    return true;
+                }
+                if (self->s == NULL || *(self->s) == '\0') {
+                    self->state = eNIEnd;
+                    continue;
+                }
+                c = *(self->s);
+                ++(self->s);
+                if (c == ',') {
+                    self->state = eNIComma;
+                    continue;
+                }
+                else if (c == '-') {
+                    self->state = eNIDash;
+                    continue;
+                }
+                else {
+                    self->state = eNIBad;
+                    continue;
+                }
+            case eNIDash:
+                if (self->s == NULL || *(self->s) == '\0') {
+                    self->state = eNIForever;
+                    continue;
+                }
+                c = *(self->s);
+                ++(self->s);
+                if (c == ',' || c == '-') {
+                    self->state = eNIForever;
+                    continue;
+                }
+                else if (c >= '0' && c <= '9') {
+                    --(self->s);
+                    self->intEnd = NumIteratorGetNum(self);
+                    self->state = eNIInterval;
+                    if (crnt <= self->intEnd) {
+                        return true;
+                    }
+                    else {
+                        continue;
+                    }
+                }
+                else {
+                    self->state = eNIBad;
+                    continue;
+                }
+            case eNIForever:
+                return true;
+            case eNIBad:
+            case eNIEnd:
+                return false;
+        }
+    }
+}
+
+/********** Resolved **********/
+static rc_t ResolvedFini(Resolved *self) {
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+
+    assert(self);
+
+    rc  = VPathStrFini(&self->local);
+    rc2 = VPathStrFini(&self->remote);
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    rc2 = VPathStrFini(&self->path);
+
+    RELEASE(KFile, self->file);
+    RELEASE(VPath, self->accession);
+    RELEASE(VResolver, self->resolver);
+
+    RELEASE(KartItem, self->kartItem);
+
+    RELEASE(String, self->cache);
+
+    free(self->name);
+
+    memset(self, 0, sizeof *self);
+
+    return rc != 0 ? rc : rc2;
+}
+
+static void ResolvedReset(Resolved *self, ERunType type) {
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    self->type = type;
+}
+
+/** isLocal is set to true when the object is found locally.
+    i.e. does not need need not be [re]downloaded */
+static rc_t ResolvedLocal(const Resolved *self,
+    const KDirectory *dir, bool *isLocal, EForce force)
+{
+    rc_t rc = 0;
+    uint64_t sRemote = 0;
+    uint64_t sLocal = 0;
+    const KFile *local = NULL;
+    char path[PATH_MAX] = "";
+
+    assert(isLocal && self);
+
+    *isLocal = false;
+
+    if (self->local.str == NULL) {
+        return 0;
+    }
+
+    rc = VPathReadPath(self->local.path, path, sizeof path, NULL);
+    DISP_RC(rc, "VPathReadPath");
+
+    if (rc == 0 && (KDirectoryPathType(dir, "%s", path) & ~kptAlias) != kptFile)
+    {
+        if (force == eForceNo) {
+            STSMSG(STS_TOP,
+                ("%s (not a file) is found locally: consider it complete",
+                 path));
+            *isLocal = true;
+        }
+        else {
+            STSMSG(STS_TOP,
+                ("%s (not a file) is found locally and will be redownloaded",
+                 path));
+        }
+        return 0;
+    }
+
+    if (rc == 0) {
+        if (! _StringIsFasp(self->remote.str, NULL) && self->file != NULL) {
+            rc = KFileSize(self->file, &sRemote);
+            DISP_RC2(rc, "KFileSize(remote)", self->name);
+        }
+        else {
+            sRemote = self->remoteSz;
+        }
+    }
+
+    if (rc == 0) {
+        rc = KDirectoryOpenFileRead(dir, &local, "%s", path);
+        DISP_RC2(rc, "KDirectoryOpenFileRead", path);
+    }
+
+    if (rc == 0) {
+        rc = KFileSize(local, &sLocal);
+        DISP_RC2(rc, "KFileSize", path);
+    }
+
+    if (rc == 0) {
+        if (sRemote == 0) {
+            if (sLocal != 0) {
+                if (force == eForceNo) {
+                    *isLocal = true;
+                    STSMSG(STS_INFO, ("%s (%,lu) is found", path, sLocal));
+                }
+                else {
+                    STSMSG(STS_INFO,
+                        ("%s (%,lu) is found and will be redownloaded",
+                        path, sLocal));
+                }
+            }
+            else if (sLocal == 0) {
+                STSMSG(STS_INFO,
+                    ("an empty %s (%,lu) is found and will be redownloaded",
+                    path, sLocal));
+            }
+        }
+        else if (sRemote == sLocal) {
+            if (force == eForceNo) {
+                *isLocal = true;
+                STSMSG(STS_INFO, ("%s (%,lu) is found and is complete",
+                    path, sLocal));
+            }
+            else {
+                STSMSG(STS_INFO, ("%s (%,lu) is found and will be redownloaded",
+                    path, sLocal));
+            }
+        }
+        else {
+            STSMSG(STS_TOP, ("%s (%,lu) is incomplete. Expected size is %,lu. "
+                "It will be re-downloaded", path, sLocal, sRemote));
+        }
+    }
+
+    RELEASE(KFile, local);
+
+    return rc;
+}
+
+/********** Main **********/
+static bool MainUseAscp(Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (self->ascpChecked) {
+        return self->ascp != NULL;
+    }
+
+    self->ascpChecked = true;
+
+    if (self->noAscp) {
+        return false;
+    }
+
+    rc = ascp_locate(&self->ascp, &self->asperaKey, true, true);
+    return rc == 0 && self->ascp && self->asperaKey;
+}
+
+static bool MainHasDownloaded(const Main *self, const char *local) {
+    TreeNode *sn = NULL;
+
+    assert(self);
+
+    sn = (TreeNode*) BSTreeFind(&self->downloaded, local, bstCmp);
+
+    return sn != NULL;
+}
+
+static rc_t MainDownloaded(Main *self, const char *path) {
+    TreeNode *sn = NULL;
+
+    assert(self);
+
+    if (MainHasDownloaded(self, path)) {
+        return 0;
+    }
+
+    sn = calloc(1, sizeof *sn);
+    if (sn == NULL) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    sn->path = string_dup_measure(path, NULL);
+    if (sn->path == NULL) {
+        bstWhack((BSTNode*) sn, NULL);
+        sn = NULL;
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    BSTreeInsert(&self->downloaded, (BSTNode*)sn, bstSort);
+
+    return 0;
+}
+
+static rc_t MainDownloadFile(Resolved *self,
+    Main *main, const char *to)
+{
+    rc_t rc = 0;
+    KFile *out = NULL;
+    size_t num_read = 0;
+    uint64_t opos = 0;
+    size_t num_writ = 0;
+    uint64_t pos = 0;
+#if USE_KFILE_FOR_HTTP_DOWNLOADS
+    uint64_t prevPos = 0;
+#endif
+
+    assert(self && main);
+    assert(!main->eliminateQuals);
+
+    if (rc == 0) {
+        STSMSG(STS_DBG, ("creating %s", to));
+        rc = KDirectoryCreateFile(main->dir, &out,
+                                  false, 0664, kcmInit | kcmParents, "%s", to);
+        DISP_RC2(rc, "Cannot OpenFileWrite", to);
+    }
+
+    assert(self->remote.str);
+
+    if (self->file == NULL) {
+        rc = _KFileOpenRemote(&self->file, main->kns, self->remote.str->addr);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogInt, rc, "failed to open file for $(path)",
+                "path=%S", self->remote.str));
+        }
+    }
+
+    if (main->stripQuals)
+    {
+        const KFile * kfile;
+        
+        rc = KSraFileNoQuals(self->file, &kfile);
+        if (rc == 0)
+        {
+            KFileRelease(self->file);
+            self->file = kfile;
+        }
+    }
+    
+    STSMSG(STS_INFO, ("%S -> %s", self->remote.str, to));
+#if USE_KFILE_FOR_HTTP_DOWNLOADS
+    do {
+        bool print = pos - prevPos > 200000000;
+        rc = Quitting();
+
+        if (rc == 0) {
+            if (print) {
+                STSMSG(STS_FIN,
+                    ("Reading %lu bytes from pos. %lu", main->bsize, pos));
+            }
+            rc = KFileRead(self->file,
+                pos, main->buffer, main->bsize, &num_read);
+            if (rc != 0) {
+                DISP_RC2(rc, "Cannot KFileRead", self->remote.str->addr);
+            }
+            else {
+                pos += num_read;
+            }
+
+            if (print) {
+                prevPos = pos;
+            }
+        }
+
+        if (rc == 0 && num_read > 0) {
+            rc = KFileWrite(out, opos, main->buffer, num_read, &num_writ);
+            DISP_RC2(rc, "Cannot KFileWrite", to);
+            opos += num_writ;
+        }
+    } while (rc == 0 && num_read > 0);
+
+#else
+    {
+        ver_t http_vers = 0x01010000;
+        KClientHttpRequest * kns_req = NULL;
+        rc = KNSManagerMakeClientRequest ( main -> kns,
+            & kns_req, http_vers, NULL, "%S", self -> remote . str );
+        DISP_RC2
+            ( rc, "Cannot KNSManagerMakeClientRequest", self -> remote . str );
+
+        if ( rc == 0 ) {
+            KClientHttpResult * rslt = NULL;
+            rc = KClientHttpRequestGET ( kns_req, & rslt );
+            DISP_RC2
+                ( rc, "Cannot KClientHttpRequestGET", self -> remote . str );
+
+            if ( rc == 0 ) {
+                KStream * s = NULL;
+                rc = KClientHttpResultGetInputStream ( rslt, & s );
+                DISP_RC2 ( rc, "Cannot KClientHttpResultGetInputStream",
+                    self -> remote . str );
+
+                while ( rc == 0 ) {
+                    rc = KStreamRead
+                        ( s, main -> buffer, main -> bsize, & num_read );
+                    if ( rc != 0 || num_read == 0) {
+                        DISP_RC2 ( rc, "Cannot KStreamRead",
+                            self -> remote . str );
+                        break;
+                    }
+
+                    rc = KFileWriteAll
+                        ( out, opos, main -> buffer, num_read, & num_writ);
+                    DISP_RC2 ( rc, "Cannot KFileWrite", to );
+                    if ( rc == 0 && num_writ != num_read ) {
+                        rc = RC ( rcExe,
+                            rcFile, rcCopying, rcTransfer, rcIncomplete );
+                    }
+                    opos += num_writ;
+                }
+
+                RELEASE ( KStream, s );
+            }
+
+            RELEASE ( KClientHttpResult, rslt );
+        }
+
+        RELEASE ( KClientHttpRequest, kns_req );
+    }
+#endif
+
+    RELEASE(KFile, out);
+
+    if (rc == 0) {
+        STSMSG(STS_INFO, ("%s (%ld)", to, pos));
+    }
+
+    return rc;
+}
+
+static rc_t MainDownloadCacheFile(Resolved *self,
+                                  Main *main, const char *to, bool elimQuals)
+{
+    rc_t rc = 0;
+    const KFile *out = NULL;
+
+    assert(self && main);
+    assert(!main->stripQuals);
+
+    assert(self->remote.str);
+
+    if (self->file == ((void*)0)) {
+        rc = _KFileOpenRemote(&self->file, main->kns, self->remote.str->addr);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogInt, rc, "failed to open file for $(path)",
+                              "path=%S", self->remote.str));
+            return rc;
+        }
+    }
+    
+    rc = KDirectoryMakeCacheTee(main->dir, &out, self->file, 0, "%s", to);
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogInt, rc, "failed to open cache file for $(path)",
+                          "path=%S", to));
+        return rc;
+    }
+    
+    STSMSG(STS_INFO, ("%S -> %s", self->remote.str, to));
+
+    rc = KSraReadCacheFile( out, elimQuals );
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogInt, rc, "failed to read cache file at $(path)",
+                          "path=%S", to));
+    }
+  
+    RELEASE(KFile, out);
+    
+    if (rc != 0) {
+        return rc;
+    }
+    
+    if (rc == 0) {
+        STSMSG(STS_INFO, ("%s", to));
+    }
+    
+    return rc;
+}
+
+/*  https://sra-download.ncbi.nlm.nih.gov/srapub/SRR125365.sra
+anonftp at ftp-private.ncbi.nlm.nih.gov:/sra/sra-instant/reads/ByR.../SRR125365.sra
+*/
+static rc_t MainDownloadAscp(const Resolved *self, Main *main,
+    const char *to)
+{
+    const char *src = NULL;
+    AscpOptions opt;
+
+    assert(self && self->remote.str && self->remote.str->addr
+        && main && main->ascp && main->asperaKey);
+
+    memset(&opt, 0, sizeof opt);
+
+    if (!_StringIsFasp(self->remote.str, &src)) {
+        return RC(rcExe, rcFile, rcCopying, rcSchema, rcInvalid);
+    }
+
+    if (main->ascpParams != NULL) {
+        opt.ascp_options = main->ascpParams;
+    }
+    else if (main->ascpMaxRate != NULL) {
+        size_t sz = string_copy(opt.target_rate, sizeof opt.target_rate,
+            main->ascpMaxRate->addr, main->ascpMaxRate->size);
+        if (sz < sizeof opt.target_rate) {
+            return RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        }
+    }
+
+    opt.name = self->name;
+    opt.src_size = self->remoteSz;
+    opt.heartbeat = main->heartbeat;
+    opt.quitting = Quitting;
+
+    return aspera_get(main->ascp, main->asperaKey, src, to, &opt);
+}
+
+static rc_t MainDownload(Resolved *self, Main *main, bool isDependency) {
+    bool canceled = false;
+    rc_t rc = 0;
+    KFile *flock = NULL;
+
+    char tmp[PATH_MAX] = "";
+    char lock[PATH_MAX] = "";
+
+    assert(self
+        && self->cache && self->cache->size && self->cache->addr && main);
+
+    if (main->force != eForceYES &&
+        MainHasDownloaded(main, self->cache->addr))
+    {
+        STSMSG(STS_INFO, ("%s has just been downloaded", self->cache->addr));
+        return 0;
+    }
+
+    if (rc == 0) {
+        rc = _KDirectoryMkLockName(main->dir, self->cache, lock, sizeof lock);
+    }
+
+    if (rc == 0 && !main->eliminateQuals) {
+        rc = _KDirectoryMkTmpName(main->dir, self->cache, tmp, sizeof tmp);
+    }
+
+    if (KDirectoryPathType(main->dir, "%s", lock) != kptNotFound) {
+        if (main->force != eForceYES) {
+            KTime_t date = 0;
+            rc = KDirectoryDate(main->dir, &date, "%s", lock);
+            if (rc == 0) {
+                time_t t = time(NULL) - date;
+                if (t < 60 * 60 * 24) { /* 24 hours */
+                    STSMSG(STS_DBG, ("%s found: canceling download", lock));
+                    rc = RC(rcExe, rcFile, rcCopying, rcLock, rcExists);
+                    PLOGERR(klogWarn, (klogWarn, rc,
+                        "Lock file $(file) exists: download canceled",
+                        "file=%s", lock));
+                    return rc;
+                }
+                else {
+                    STSMSG(STS_DBG, ("%s found and ignored as too old", lock));
+                    rc = _KDirectoryClean(main->dir,
+                        self->cache, NULL, NULL, true);
+                }
+            }
+            else {
+                STSMSG(STS_DBG, ("%s found", lock));
+                DISP_RC2(rc, "KDirectoryDate", lock);
+            }
+        }
+        else {
+            STSMSG(STS_DBG, ("%s found and forced to be ignored", lock));
+            rc = _KDirectoryClean(main->dir, self->cache, NULL, NULL, true);
+        }
+    }
+    else {
+        STSMSG(STS_DBG, ("%s not found", lock));
+    }
+
+    if (rc == 0) {
+        STSMSG(STS_DBG, ("creating %s", lock));
+        rc = KDirectoryCreateFile(main->dir, &flock,
+            false, 0664, kcmInit | kcmParents, "%s", lock);
+        DISP_RC2(rc, "Cannot OpenFileWrite", lock);
+    }
+
+    assert(!main->noAscp || !main->noHttp);
+
+    if (rc == 0) {
+        bool ascp = _StringIsFasp(self->remote.str, NULL);
+        if (ascp) {
+            STSMSG(STS_TOP, (" Downloading via fasp..."));
+            if (main->forceAscpFail) {
+                rc = 1;
+            }
+            else if (main->eliminateQuals) {
+                LOGMSG(klogErr, "Cannot eliminate qualities during fasp download");
+                rc = 1;
+            }
+            else if (main->eliminateQuals) {
+                LOGMSG(klogErr, "Cannot remove QUALITY columns during fasp download");
+                rc = 1;
+            }
+            else {
+                rc = MainDownloadAscp(self, main, tmp);
+            }
+            if (rc == 0) {
+                STSMSG(STS_TOP, (" fasp download succeed"));
+            }
+            else {
+                rc_t rc = Quitting();
+                if (rc != 0) {
+                    canceled = true;
+                }
+                else {
+                    STSMSG(STS_TOP, (" fasp download failed"));
+                }
+            }
+        }
+        if (!ascp || (rc != 0 && GetRCObject(rc) != rcMemory
+                              && !canceled && !main->noHttp))
+        {
+            bool https = _StringIsHttps(self->remote.str, NULL);
+            STSMSG(STS_TOP, (" Downloading via %s...", https ? "https" : "http"));
+            if (ascp) {
+                assert(self->resolver);
+                {
+                    rc_t rc2 = VPathStrFini(&self->remote);
+                    if (rc == 0 && rc2 != 0) {
+                        rc = rc2;
+                    }
+                }
+                RELEASE(KFile, self->file);
+                rc = _VResolverRemote(self->resolver,
+                    0, self->name, self->accession,
+                    &self->remote.path, &self->remote.str, &self->cache);
+            }
+            if (rc == 0) {
+                /* when eliminateQuals is specified we will try newer algorithm for downloading files via cache, 
+                    but filter out qualities for main file, not for dependencies */
+                if (main->eliminateQuals) {
+                    rc = MainDownloadCacheFile(self, main, self->cache->addr, main->eliminateQuals && !isDependency);
+                }
+                else {
+                    rc = MainDownloadFile(self, main, tmp);
+                }
+            }
+        }
+    }
+
+    RELEASE(KFile, flock);
+    
+    if (rc == 0 && !main->eliminateQuals) {
+        STSMSG(STS_DBG, ("renaming %s -> %S", tmp, self->cache));
+        rc = KDirectoryRename(main->dir, true, tmp, self->cache->addr);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogInt, rc, "cannot rename $(from) to $(to)",
+                "from=%s,to=%S", tmp, self->cache));
+        }
+    }
+
+    if (rc == 0) {
+        rc = MainDownloaded(main, self->cache->addr);
+    }
+
+    if (rc == 0 && !main->eliminateQuals) {
+        rc_t rc2 = _KDirectoryCleanCache(main->dir, self->cache);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    {
+        rc_t rc2 = _KDirectoryClean(main->dir, self->cache, lock, main->eliminateQuals ? NULL : tmp, rc != 0);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _VDBManagerSetDbGapCtx(const VDBManager *self, VResolver *resolver)
+{
+    if (resolver == NULL) {
+        return 0;
+    }
+
+    return VDBManagerSetResolver(self, resolver);
+}
+
+static rc_t MainDependenciesList(const Main *self,
+    const Resolved *resolved, const VDBDependencies **deps)
+{
+    rc_t rc = 0;
+    bool isDb = true;
+    const VDatabase *db = NULL;
+    const String *str = NULL;
+    KPathType type = kptNotFound;
+
+    assert(self && resolved && deps);
+
+    str = resolved->path.str;
+    assert(str && str->addr);
+
+    rc = _VDBManagerSetDbGapCtx(self->mgr, resolved->resolver);
+
+    STSMSG(STS_DBG, ("Listing '%S's dependencies...", str));
+
+    type = VDBManagerPathType(self->mgr, "%s", resolved->name) & ~kptAlias;
+    if (type != kptDatabase) {
+        if (type == kptTable) {
+            STSMSG(STS_DBG, ("...'%S' is a table", str));
+        }
+        else {
+            STSMSG(STS_DBG,
+                ("...'%S' is not recognized as a database or a table", str));
+        }
+        return 0;
+    }
+
+    rc = VDBManagerOpenDBRead(self->mgr, &db, NULL, "%s", resolved->name);
+    if (rc != 0) {
+        if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+            isDb = false;
+            rc = 0;
+        }
+        else if (rc ==
+            SILENT_RC(rcKFG, rcEncryptionKey, rcRetrieving, rcItem, rcNotFound))
+        {
+            STSMSG(STS_TOP, ("Cannot open encrypted file '%s'", resolved->name));
+            isDb = false;
+            rc = 0;
+        }
+        DISP_RC2(rc, "Cannot open database", resolved->name);
+    }
+
+    if (rc == 0 && isDb) {
+        bool all = self->check_all || self->force != eForceNo;
+        rc = VDatabaseListDependencies(db, deps, !all);
+        DISP_RC2(rc, "VDatabaseListDependencies", resolved->name);
+    }
+
+    RELEASE(VDatabase, db);
+
+    return rc;
+}
+
+/********** Item **********/
+static rc_t ItemRelease(Item *self) {
+    rc_t rc = 0;
+
+    if (self == NULL) {
+        return 0;
+    }
+
+    rc = ResolvedFini(&self->resolved);
+    RELEASE(KartItem, self->item);
+
+    memset(self, 0, sizeof *self);
+
+    free(self);
+
+    return rc;
+}
+
+static rc_t ItemInit(Item *self, const char *obj) {
+    assert(self);
+    self->desc = obj;
+    return 0;
+}
+
+static char* ItemName(const Item *self) {
+    char *c = NULL;
+    assert(self);
+    if (self->desc != NULL) {
+        return string_dup_measure(self->desc, NULL);
+    }
+    else {
+        rc_t rc = 0;
+        const String *elem = NULL;
+        assert(self->item);
+
+        rc = KartItemItemDesc(self->item, &elem);
+        c = StringCheck(elem, rc);
+        if (c != NULL) {
+            return c;
+        }
+
+        rc = KartItemAccession(self->item, &elem);
+        c = StringCheck(elem, rc);
+        if (c != NULL) {
+            return c;
+        }
+
+        rc = KartItemItemId(self->item, &elem);
+        return StringCheck(elem, rc);
+    }
+}
+
+static
+rc_t _KartItemToVPath(const KartItem *self, const VFSManager *vfs, VPath **path)
+{
+    uint64_t oid = 0;
+    rc_t rc = KartItemItemIdNumber(self, &oid);
+    if (rc == 0) {
+        rc = VFSManagerMakeOidPath(vfs, path, (uint32_t)oid);
+    }
+    else {
+        char path_str[PATH_MAX] = "";
+        const String *accession = NULL;
+        rc = KartItemAccession(self, &accession);
+        if (rc == 0) {
+            rc =
+                string_printf(path_str, sizeof path_str, NULL, "%S", accession);
+        }
+        if (rc == 0) {
+            rc = VFSManagerMakePath(vfs, path, path_str);
+        }
+    }
+    return rc;
+}
+
+static rc_t _ItemSetResolverAndAssessionInResolved(Item *item,
+    VResolver *resolver, const KConfig *cfg, const KRepositoryMgr *repoMgr,
+    const VFSManager *vfs)
+{
+    Resolved *resolved = NULL;
+    rc_t rc = 0;
+
+    assert(item && resolver && cfg && repoMgr && vfs);
+
+    resolved = &item->resolved;
+
+    if (item->desc != NULL) {
+        rc = VFSManagerMakePath(vfs, &resolved->accession, "%s", item->desc);
+        DISP_RC2(rc, "VFSManagerMakePath", item->desc);
+        if (rc == 0) {
+            rc = VResolverAddRef(resolver);
+        }
+        if (rc == 0) {
+            resolved->resolver = resolver;
+        }
+    }
+    else {
+        rc = KartItemProjIdNumber(item->item, &resolved->project);
+        if (rc != 0) {
+            DISP_RC(rc, "KartItemProjIdNumber");
+            return rc;
+        }
+        rc = _KartItemToVPath(item->item, vfs, &resolved->accession);
+        if (rc != 0) {
+            DISP_RC(rc, "invalid kart file row");
+            return rc;
+        }
+        else {
+            const KRepository *p_protected = NULL;
+            rc = KRepositoryMgrGetProtectedRepository(repoMgr, 
+                (uint32_t)resolved->project, &p_protected);
+            if (rc == 0) {
+                rc = KRepositoryMakeResolver(p_protected,
+                    &resolved->resolver, cfg);
+                if (rc != 0) {
+                    DISP_RC(rc, "KRepositoryMakeResolver");
+                    return rc;
+                }
+                else {
+                    VResolverCacheEnable(resolved->resolver, vrAlwaysEnable);
+                }
+            }
+            else {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "project '$(P)': cannot find protected repository", "P=%d",
+                    resolved->project));
+            }
+            RELEASE(KRepository, p_protected);
+        }
+    }
+
+    return rc;
+}
+
+/* resolve locations */
+static rc_t _ItemResolveResolved(VResolver *resolver,
+    VRemoteProtocols protocols, Item *item,
+    const KRepositoryMgr *repoMgr, const KConfig *cfg,
+    const VFSManager *vfs, KNSManager *kns, size_t minSize, size_t maxSize)
+{
+    Resolved *resolved = NULL;
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+
+    uint32_t i;
+    bool has_proto [ eProtocolMask + 1 ];
+    memset ( has_proto, 0, sizeof has_proto );
+    for ( i = 0; i < eProtocolMaxPref; ++ i )
+        has_proto [ ( protocols >> ( i * 3 ) ) & eProtocolMask ] = true;
+
+    assert(resolver && item);
+
+    resolved = &item->resolved;
+
+    VPathStrFini(&resolved->local);
+    VPathStrFini(&resolved->remote);
+
+    assert(resolved->accession == NULL);
+
+    rc = _ItemSetResolverAndAssessionInResolved(item,
+        resolver, cfg, repoMgr, vfs);
+
+    if (rc == 0) {
+        rc = V_ResolverLocal(resolved->resolver,
+            resolved->accession, &resolved->local.path);
+        if (rc == 0) {
+            rc = VPathMakeString(resolved->local.path, &resolved->local.str);
+            DISP_RC2(rc, "VPathMakeString(VResolverLocal)", resolved->name);
+        }
+        else if (NotFoundByResolver(rc)) {
+            rc = 0;
+        }
+        else {
+            DISP_RC2(rc, "VResolverLocal", resolved->name);
+        }
+    }
+
+    if (rc == 0) {
+        rc2 = 0;
+        resolved->remoteSz = 0;
+        assert(item->main);
+        if ((minSize > 0 || maxSize > 0 || item->main->order == eOrderSize)
+            && has_proto [ eProtocolFasp ])
+        {
+            rc2 = _VResolverRemote(resolved->resolver, 0,
+                resolved->name, resolved->accession, &resolved->remote.path,
+                &resolved->remote.str, &resolved->cache);
+            if (rc2 != 0 && rc == 0) {
+                rc = rc2;
+            }
+            else {
+                rc_t rc3 = 0;
+                if (resolved->file == NULL) {
+                    rc3 = _KFileOpenRemote(&resolved->file,
+                                              kns, resolved->remote.str->addr);
+                    DISP_RC2(rc3,
+                        "cannot open remote file", resolved->remote.str->addr);
+                }
+
+                if (rc3 == 0 && resolved->file != NULL) {
+                    rc3 = KFileSize(resolved->file, &resolved->remoteSz);
+                    if (rc3 != 0) {
+                        DISP_RC2(rc3, "cannot get remote file size",
+                            resolved->remote.str->addr);
+                    }
+                    else if (resolved->remoteSz >= maxSize) {
+                        return rc;
+                    }
+                    else if (resolved->remoteSz < minSize) {
+                        return rc;
+                    }
+                }
+            }
+        }
+
+        if (rc2 == 0) {
+            rc2 = _VResolverRemote(resolved->resolver, protocols,
+                resolved->name, resolved->accession, &resolved->remote.path,
+                &resolved->remote.str, &resolved->cache);
+            if (rc2 != 0 && rc == 0) {
+                rc = rc2;
+            }
+        }
+
+        if (rc == 0) {
+            rc2 = 0;
+            if (resolved->file == NULL) {
+                assert(resolved->remote.str);
+                if (!_StringIsFasp(resolved->remote.str, NULL)) {
+                    rc2 = _KFileOpenRemote(
+                        &resolved->file, kns, resolved->remote.str->addr);
+                }
+            }
+            if (rc2 == 0 && resolved->file != NULL && resolved->remoteSz == 0) {
+                rc2 = KFileSize(resolved->file, &resolved->remoteSz);
+                DISP_RC2(rc2, "KFileSize(remote)", resolved->name);
+            }
+        }
+    }
+
+    return rc;
+}
+
+/* Resolved: resolve locations */
+static rc_t ItemInitResolved(Item *self, VResolver *resolver, KDirectory *dir,
+    bool ascp, const KRepositoryMgr *repoMgr, const KConfig *cfg,
+    const VFSManager *vfs, KNSManager *kns, size_t minSize, size_t maxSize)
+{
+    Resolved *resolved = NULL;
+    rc_t rc = 0;
+    VRemoteProtocols protocols = ascp ? eProtocolFaspHttpHttps : 0;
+
+    assert(self);
+
+    resolved = &self->resolved;
+    resolved->name = ItemName(self);
+
+    assert(resolved->type != eRunTypeUnknown);
+
+    if (!self->isDependency &&
+        self->desc != NULL) /* object name is specified (not kart item) */
+    {
+        KPathType type = KDirectoryPathType(dir, "%s", self->desc) & ~kptAlias;
+        if (type == kptFile || type == kptDir) {
+            rc = VPathStrInitStr(&resolved->path, self->desc, 0);
+            resolved->existing = true;
+            if (resolved->type != eRunTypeDownload) {
+                uint64_t s = -1;
+                const KFile *f = NULL;
+                rc = KDirectoryOpenFileRead(dir, &f, "%s", self->desc);
+                if (rc == 0) {
+                    rc = KFileSize(f, &s);
+                }
+                if (s != -1) {
+                    resolved->remoteSz = s;
+                }
+                else {
+                    OUTMSG(("%s\tunknown\n", self->desc));
+                }
+                RELEASE(KFile, f);
+            }
+            else {
+                STSMSG(STS_TOP, ("'%s' is a local non-kart file", self->desc));
+            }
+            return 0;
+        }
+    }
+
+    rc = _ItemResolveResolved(resolver, protocols, self,
+        repoMgr, cfg, vfs, kns, minSize, maxSize);
+
+    STSMSG(STS_DBG, ("Resolve(%s) = %R:", resolved->name, rc));
+    STSMSG(STS_DBG, ("local(%s)",
+        resolved->local.str ? resolved->local.str->addr : "NULL"));
+    STSMSG(STS_DBG, ("cache(%s)",
+        resolved->cache ? resolved->cache->addr : "NULL"));
+    STSMSG(STS_DBG, ("remote(%s:%,ld)",
+        resolved->remote.str ? resolved->remote.str->addr : "NULL",
+        resolved->remoteSz));
+
+    if (rc == 0) {
+        if (resolved->remoteSz >= maxSize) {
+            resolved->oversized = true;
+            return rc;
+        }
+        if (resolved->remoteSz < minSize) {
+            resolved->undersized = true;
+            return rc;
+        }
+
+        if (resolved->local.str == NULL
+            && (resolved->cache == NULL || resolved->remote.str == NULL))
+        {
+            rc = RC(rcExe, rcPath, rcValidating, rcParam, rcNull);
+            PLOGERR(klogInt, (klogInt, rc,
+                "bad VResolverResolve($(acc)) result",
+                "acc=%s", resolved->name));
+        }
+    }
+
+    return rc;
+}
+
+/* resolve: locate */
+static rc_t ItemResolve(Item *item, int32_t row) {
+    Resolved *self = NULL;
+    static int n = 0;
+    rc_t rc = 0;
+    bool ascp = false;
+
+    assert(item && item->main);
+
+    self = &item->resolved;
+    assert(self->type);
+
+    ++n;
+    if (row > 0 &&
+        item->desc == NULL) /* desc is NULL for kart items */
+    {
+        n = row;
+    }
+
+    item->number = n;
+
+    ascp = MainUseAscp(item->main);
+    if (self->type == eRunTypeList) {
+        ascp = false;
+    }
+
+    rc = ItemInitResolved(item, item->main->resolver, item->main->dir, ascp,
+        item->main->repoMgr, item->main->cfg, item->main->vfsMgr,
+        item->main->kns, item->main->minSize, item->main->maxSize);
+
+    return rc;
+}
+
+static bool maxSzPrntd = false;
+
+static void logMaxSize(size_t maxSize) {
+    if (maxSzPrntd) {
+        return;
+    }
+        
+    maxSzPrntd = true;
+
+    if (maxSize == 0) {
+/*      OUTMSG(("Maximum file size download limit is unlimited\n")); */
+            return;
+    }
+
+    if (maxSize / 1024 < 10) {
+        PLOGMSG(klogWarn, (klogWarn,
+            "Maximum file size download limit is $(size)B\n",
+            "size=%zu", maxSize));
+        return;
+    }
+
+    maxSize /= 1024;
+    if (maxSize / 1024 < 10) {
+        PLOGMSG(klogWarn, (klogWarn,
+            "Maximum file size download limit is $(size)KB\n",
+            "size=%zu", maxSize));
+        return;
+    }
+
+    maxSize /= 1024;
+    if (maxSize / 1024 < 10) {
+        PLOGMSG(klogWarn, (klogWarn,
+            "Maximum file size download limit is $(size)MB\n",
+            "size=%zu", maxSize));
+        return;
+    }
+
+    maxSize /= 1024;
+    if (maxSize / 1024 < 10) {
+        PLOGMSG(klogWarn, (klogWarn,
+            "Maximum file size download limit is $(size)GB\n",
+            "size=%zu", maxSize));
+        return;
+    }
+
+    maxSize /= 1024;
+    PLOGMSG(klogWarn, (klogWarn,
+        "Maximum file size download limit is $(size)TB\n",
+        "size=%zu", maxSize));
+}
+
+static void logBigFile(int n, const char *name, size_t size) {
+    if (size / 1024 < 10) {
+        STSMSG(STS_TOP,
+            ("%d) '%s' (%,zuB) is larger than maximum allowed: skipped\n",
+                n, name, size));
+        return;
+    }
+
+    size /= 1024;
+    if (size / 1024 < 10) {
+        STSMSG(STS_TOP,
+            ("%d) '%s' (%,zuKB) is larger than maximum allowed: skipped\n",
+                n, name, size));
+        return;
+    }
+
+    size /= 1024;
+    if (size / 1024 < 10) {
+        STSMSG(STS_TOP,
+            ("%d) '%s' (%,zuMB) is larger than maximum allowed: skipped\n",
+                n, name, size));
+        return;
+    }
+
+    size /= 1024;
+    if (size / 1024 < 10) {
+        STSMSG(STS_TOP,
+            ("%d) '%s' (%,zuGB) is larger than maximum allowed: skipped\n",
+                n, name, size));
+        return;
+    }
+
+    size /= 1024;
+    STSMSG(STS_TOP,
+        ("%d) '%s' (%,zuTB) is larger than maximum allowed: skipped\n",
+            n, name, size));
+}
+
+/* download if not found; obey size restriction */
+static rc_t ItemDownload(Item *item) {
+    bool isLocal = false;
+    int n = 0;
+    rc_t rc = 0;
+    Resolved *self = NULL;
+    assert(item && item->main);
+    n = item->number;
+    self = &item->resolved;
+    assert(self->type);
+
+    if (rc == 0) {
+        bool skip = false;
+        if (self->existing) { /* the path is a path to an existing local file */
+            rc = VPathStrInitStr(&self->path, item->desc, 0);
+            return rc;
+        }
+        if (self->undersized) {
+            STSMSG(STS_TOP,
+               ("%d) '%s' (%,zu KB) is smaller than minimum allowed: skipped\n",
+                n, self->name, self->remoteSz / 1024));
+            skip = true;
+        }
+        else if (self->oversized) {
+            logMaxSize(item->main->maxSize);
+            logBigFile(n, self->name, self->remoteSz);
+            skip = true;
+        }
+
+        rc = ResolvedLocal(self, item->main->dir, &isLocal,
+            skip ? eForceNo : item->main->force);
+
+        if (rc == 0) {
+            if (skip && !isLocal) {
+                return rc;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        if (isLocal) {
+            STSMSG(STS_TOP, ("%d) '%s' is found locally", n, self->name));
+            if (self->local.str != NULL) {
+                VPathStrFini(&self->path);
+                rc = StringCopy(&self->path.str, self->local.str);
+            }
+        }
+        else if (!_StringIsFasp(self->remote.str, NULL)
+            && item->main->noHttp)
+        {
+            rc = RC(rcExe, rcFile, rcCopying, rcFile, rcNotFound);
+            PLOGERR(klogErr, (klogErr, rc,
+                "cannot download '$(name)' using requested transport",
+                "name=%s", self->name));
+        }
+        else {
+            STSMSG(STS_TOP, ("%d) Downloading '%s'...", n, self->name));
+            rc = MainDownload(self, item->main, item->isDependency);
+            if (rc == 0) {
+                STSMSG(STS_TOP,
+                    ("%d) '%s' was downloaded successfully", n, self->name));
+                if (self->cache != NULL) {
+                    VPathStrFini(&self->path);
+                    rc = StringCopy(&self->path.str, self->cache);
+                }
+            }
+            else if (rc != SILENT_RC(rcExe,
+                rcProcess, rcExecuting, rcProcess, rcCanceled))
+            {
+                STSMSG(STS_TOP, ("%d) failed to download %s", n, self->name));
+            }
+        }
+    }
+    else {
+        STSMSG(STS_TOP, ("%d) cannot locate '%s'", n, self->name));
+    }
+
+    return rc;
+}
+
+static rc_t ItemPrintSized(const Item *self, int32_t row, size_t size) {
+    rc_t rc = 0;
+    const String *projId = NULL;
+    const String *itemId = NULL;
+    const String *accession = NULL;
+    const String *name = NULL;
+    const String *itemDesc = NULL;
+    assert(self && row);
+    if (self->desc != NULL) { /* object */
+        OUTMSG(("%d\t%s\t%,zuB\n", row, self->desc, size));
+    }
+    else {                    /* kart item */
+        if (rc == 0) {
+            rc = KartItemProjId(self->item, &projId);
+        }
+        if (rc == 0) {
+            rc = KartItemItemId(self->item, &itemId);
+        }
+        if (rc == 0) {
+            rc = KartItemAccession(self->item, &accession);
+        }
+        if (rc == 0) {
+            rc = KartItemName(self->item, &name);
+        }
+        if (rc == 0) {
+            rc = KartItemItemDesc(self->item, &itemDesc);
+        }
+        if (rc == 0) {
+           rc = OUTMSG(("%d\t%S|%S|%S|%S|%S\t%,zuB\n",
+               row, projId, itemId, accession, name, itemDesc, size));
+        }
+    }
+
+    return rc;
+}
+
+/* resolve: locate; download if not found */
+static rc_t ItemResolveResolvedAndDownloadOrProcess(Item *self, int32_t row) {
+    rc_t rc = ItemResolve(self, row);
+    if (rc != 0) {
+        return rc;
+    }
+
+    assert(self);
+
+    if (self->resolved.type == eRunTypeList) {
+        return ItemPrintSized(self, row, self->resolved.remoteSz);
+    }
+    else if (self->resolved.type != eRunTypeDownload) {
+        return rc;
+    }
+
+    return ItemDownload(self);
+}
+
+static rc_t ItemDownloadDependencies(Item *item) {
+    Resolved *resolved = NULL;
+    rc_t rc = 0;
+    const VDBDependencies *deps = NULL;
+    uint32_t count = 0;
+    uint32_t i = 0;
+
+    assert(item && item->main);
+
+    resolved = &item->resolved;
+
+    assert(resolved);
+
+    if (resolved->path.str != NULL) {
+        rc = MainDependenciesList(item->main, resolved, &deps);
+    }
+
+    /* resolve dependencies (refseqs) */
+    if (rc == 0 && deps != NULL) {
+        rc = VDBDependenciesCount(deps, &count);
+        if (rc == 0) {
+            STSMSG(STS_TOP, ("'%s' has %d%s dependenc%s", resolved->name,
+                count, item->main->check_all ? "" : " unresolved",
+                count == 1 ? "y" : "ies"));
+        }
+        else {
+            DISP_RC2(rc, "Failed to check %s's dependencies", resolved->name);
+        }
+    }
+
+    for (i = 0; i < count && rc == 0; ++i) {
+        bool local = true;
+        const char *seq_id = NULL;
+
+        if (rc == 0) {
+            rc = VDBDependenciesLocal(deps, &local, i);
+            DISP_RC2(rc, "VDBDependenciesLocal", resolved->name);
+            if (local) {
+                continue;
+            }
+        }
+
+        if (rc == 0) {
+            rc = VDBDependenciesSeqId(deps, &seq_id, i);
+            DISP_RC2(rc, "VDBDependenciesSeqId", resolved->name);
+        }
+
+        if (rc == 0) {
+            size_t num_writ = 0;
+            char ncbiAcc[512] = "";
+
+            assert(seq_id);
+
+            rc = string_printf(ncbiAcc, sizeof ncbiAcc, &num_writ,
+                "ncbi-acc:%s?vdb-ctx=refseq", seq_id);
+            DISP_RC2(rc, "string_printf(?vdb-ctx=refseq)", seq_id);
+            if (rc == 0 && num_writ > sizeof ncbiAcc) {
+                rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+                PLOGERR(klogInt, (klogInt, rc,
+                    "bad string_printf($(s)?vdb-ctx=refseq) result",
+                    "s=%s", seq_id));
+            }
+    
+            if (rc == 0) {
+                Item *ditem = calloc(1, sizeof *ditem);
+                if (ditem == NULL) {
+                    return RC(rcExe,
+                        rcStorage, rcAllocating, rcMemory, rcExhausted);
+                }
+
+                ditem->desc = ncbiAcc;
+                ditem->main = item->main;
+                ditem->isDependency = true;
+
+                ResolvedReset(&ditem->resolved, eRunTypeDownload);
+
+                rc = ItemResolveResolvedAndDownloadOrProcess(ditem, 0);
+
+                RELEASE(Item, ditem);
+            }
+        }
+    }
+
+    RELEASE(VDBDependencies, deps);
+
+    return rc;
+}
+
+static bool ResolvedResetLocalFileAccession(
+    Resolved *self, const Main *main, const char *path)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (!self->existing) {
+       /* need to check remote vdbcache when accession (no path) is specified */
+        return true;
+    }
+
+    RELEASE(VPath, self->accession);
+    rc = VFSManagerMakePath(main->vfsMgr, &self->accession, "%s", path);
+    if (rc != 0) {
+        DISP_RC2(rc, "VFSManagerMakePath", path);
+        return rc;
+    }
+
+    if (!VPathIsAccessionOrOID(self->accession)) {
+        /* self->accession is not an accession but a path:
+           let's try to get the accession */
+        VPath *acc = NULL;
+        rc = VFSManagerExtractAccessionOrOID(
+            main->vfsMgr, &acc, self->accession);
+        if (rc == 0) {
+            char buffer[99] = "";
+            VPathReadPath(acc, buffer, sizeof buffer, NULL);
+            STSMSG(STS_INFO, ("Accession for '%s' = '%s': "
+                        "checking vdbcache", path, buffer));
+
+            RELEASE(VPath, self->accession);
+            self->accession = acc;
+        }
+        else {
+            STSMSG(STS_TOP, ("Cannot extract accession for "
+                "'%s': skipped vdbcache download", path));
+            return false;
+        }
+    }
+
+    return true;
+}
+
+static rc_t ItemResetRemoteToVdbcacheIfVdbcacheRemoteExists(
+    Item *self, char *remotePath, size_t remotePathLen, bool *exists)
+{
+    rc_t rc = 0;
+    size_t len = 0;
+    Resolved *resolved = NULL;
+    VPath *cremote = NULL;
+    assert(self && self->main && exists);
+    resolved = &self->resolved;
+    assert(resolved);
+    *exists = false;
+    if (resolved->remote.path == NULL) {
+#define TODO 1
+        rc_t rc = TODO;
+        DISP_RC(rc, "UNKNOWN REMOTE LOCATION WHEN TRYING TO FIND VDBCACHE");
+        return rc;
+    }
+    rc = VFSManagerMakePathWithExtension(self->main->vfsMgr,
+        &cremote, resolved->remote.path, ".vdbcache");
+    if (rc != 0) {
+        if (resolved->remote.str != NULL) {
+            DISP_RC2(rc, "VFSManagerMakePathWithExtension",
+                resolved->remote.str->addr);
+        }
+        else {
+            DISP_RC(rc, "VFSManagerMakePathWithExtension(remote)");
+        }
+        return rc;
+    }
+    rc = VPathReadUri(cremote, remotePath, remotePathLen, &len);
+    if (rc == 0) {
+        RELEASE(KFile, resolved->file);
+        rc = _KFileOpenRemote(&resolved->file, self->main->kns, remotePath);
+        if (rc == 0) {
+            char *query = string_chr(remotePath, len, '?');
+            if (query != NULL) {
+                *query = '\0';
+            }
+            STSMSG(STS_DBG, ("'%s' exists", remotePath));
+            STSMSG(STS_TOP, ("'%s' has remote vdbcache", resolved->name));
+            *exists = true;
+            rc = VPathStrInitStr(&resolved->remote, remotePath, len);
+            DISP_RC2(rc, "StringCopy(Remote.vdbcache)", remotePath);
+            resolved->remote.path = cremote;
+            cremote = NULL;
+        }
+        else if (rc == SILENT_RC(rcNS, rcFile, rcOpening, rcFile, rcNotFound)) {
+            STSMSG(STS_DBG, ("'%s' does not exist", remotePath));
+            *exists = false;
+            STSMSG(STS_TOP, ("'%s' has no remote vdbcache", resolved->name));
+            rc = 0;
+        }
+        else if
+            (rc == SILENT_RC(rcNS, rcFile, rcOpening, rcFile, rcUnauthorized))
+        {
+            STSMSG(STS_DBG, (
+                "Access to '%s's vdbcahe file is forbidden or it does not exist"
+                , resolved->name));
+            *exists = false;
+            STSMSG(STS_TOP, ("'%s' has no remote vdbcache", resolved->name));
+            rc = 0;
+        }
+        else {
+            DISP_RC2(rc, "Failed to check vdbcache", resolved->name);
+        }
+    }
+    RELEASE(VPath, cremote);
+    return rc;
+}
+
+static rc_t MainDetectVdbcacheCachePath(const Main *self,
+    const String *runCache, const VPath **runCachePath,
+    const String **vdbcacheCache)
+{
+    rc_t rc = 0;
+
+    VPath *vlocal = NULL;
+    VPath *clocal = NULL;
+
+    if (runCache == NULL && (runCachePath == NULL || *runCachePath == NULL))
+    {
+        rc_t rc = TODO;
+        DISP_RC(rc, "UNKNOWN CACHE LOCATION WHEN TRYING TO FIND VDBCACHE");
+        return rc;
+    }
+
+    if (runCachePath != NULL && *runCachePath != NULL) {
+        vlocal = (VPath*)*runCachePath;
+    }
+    else {
+        rc = VFSManagerMakePath(self->vfsMgr, &vlocal, "%S", runCache);
+        if (rc != 0) {
+            DISP_RC2(rc, "VFSManagerMakePath", runCache->addr);
+            return rc;
+        }
+    }
+
+    rc = VFSManagerMakePathWithExtension(
+        self->vfsMgr, &clocal, vlocal, ".vdbcache");
+    DISP_RC2(rc, "VFSManagerMakePathWithExtension", runCache->addr);
+
+    if (rc == 0) {
+        rc = VPathMakeString(clocal, vdbcacheCache);
+    }
+
+    RELEASE(VPath, clocal);
+
+    if (runCachePath == NULL) {
+        RELEASE(VPath, vlocal);
+    }
+    else if (*runCachePath == NULL) {
+        *runCachePath = vlocal;
+    }
+
+    return rc;
+}
+
+static bool MainNeedDownload(const Main *self, const String *local,
+    const char *remotePath, const KFile *remote, size_t *remoteSz)
+{
+    KPathType type = kptNotFound;
+    assert(self && local);
+    type = KDirectoryPathType(self->dir, "%s", local->addr) & ~kptAlias;
+    if (type == kptNotFound) {
+        return false;
+    }
+    if (type != kptFile) {
+        if (self->force == eForceNo) {
+            STSMSG(STS_TOP, (
+                "%S (not a file) is found locally: consider it complete",
+                local));
+            return false;
+        }
+        else {
+            STSMSG(STS_TOP, (
+                "%S (not a file) is found locally and will be redownloaded",
+                local));
+            return true;
+        }
+    }
+    else if (self->force != eForceNo) {
+        return true;
+    }
+    else {
+        rc_t rc = 0;
+        size_t sLocal = 0;
+        assert(remoteSz);
+        rc = KFileSize(remote, remoteSz);
+        DISP_RC2(rc, "KFileSize(remote.vdbcache)", remotePath);
+        if (rc != 0) {
+            return true;
+        }
+        {
+            const KFile *f = NULL;
+            rc = KDirectoryOpenFileRead(self->dir, &f, "%S", local);
+            if (rc != 0) {
+                DISP_RC2(rc, "KDirectoryOpenFileRead", local->addr);
+                return true;
+            }
+            rc = KFileSize(f, &sLocal);
+            if (rc != 0) {
+                DISP_RC2(rc, "KFileSize", local->addr);
+            }
+            RELEASE(KFile, f);
+            if (rc != 0) {
+                return true;
+            }
+        }
+        if (sLocal == *remoteSz) {
+            STSMSG(STS_INFO, ("%S (%,lu) is found", local, sLocal));
+            return false;
+        }
+        else {
+            STSMSG(STS_INFO,
+                ("%S (%,lu) is found and will be redownloaded", local, sLocal));
+            return true;
+        }
+    }
+}
+
+static rc_t ItemDownloadVdbcache(Item *item) {
+    rc_t rc = 0;
+    Resolved *resolved = NULL;
+    bool checkRemote = true;
+    bool remoteExists = false;
+    char remotePath[PATH_MAX] = "";
+    const String *local = NULL;
+    const String *cache = NULL;
+    bool localExists = false;
+    bool download = true;
+    assert(item && item->main);
+    resolved = &item->resolved;
+    if (!resolved) {
+        STSMSG(STS_TOP,
+            ("CANNOT DOWNLOAD VDBCACHE FOR UNRESOLVED ITEM '%s'", item->desc));
+        /* TODO error? */
+        return 0;
+    }
+    {
+        bool csra = false;
+        const VDatabase *db = NULL;
+        KPathType type = VDBManagerPathType
+            (item->main->mgr, "%S", resolved->path.str) & ~kptAlias;
+        if (type == kptTable) {
+            STSMSG(STS_INFO, ("'%S' is a table", resolved->path.str));
+        }
+        else if (type != kptDatabase) {
+            STSMSG(STS_INFO, ("'%S' is not recognized as a database or a table",
+                resolved->path.str));
+        }
+        else {
+            rc_t rc = VDBManagerOpenDBRead(item->main->mgr,
+                &db, NULL, "%S", resolved->path.str);
+            if (rc == 0) {
+                csra = VDatabaseIsCSRA(db);
+            }
+            RELEASE(VDatabase, db);
+            if (csra) {
+                STSMSG(STS_INFO, ("'%s' is cSRA", resolved->name));
+            }
+            else {
+                STSMSG(STS_INFO, ("'%s' is not cSRA", resolved->name));
+            }
+            if (!csra) {
+                return 0;
+            }
+        }
+    }
+    if (resolved->remote.str == NULL ||
+        _StringIsFasp(resolved->remote.str, NULL))
+    {
+        if (item->main->noHttp) {
+            /* fasp download
+               return 0; ignore fasp-only transpot */
+        }
+        if (resolved->resolver == NULL) {
+            rc = VResolverAddRef(item->main->resolver);
+            if (rc == 0) {
+                resolved->resolver = item->main->resolver;
+            }
+            assert(!rc && resolved->resolver);
+        }
+        {
+            const char *path = item->desc;
+            if (path == NULL && resolved->path.str != NULL) {
+                path = resolved->path.str->addr;
+            }
+            checkRemote
+                = ResolvedResetLocalFileAccession(resolved, item->main, path);
+        }
+        if (checkRemote) {
+            rc_t rc2 = VPathStrFini(&resolved->remote);
+            if (rc == 0 && rc2 != 0) {
+                rc = rc2;
+            }
+            RELEASE(KFile, resolved->file);
+            rc = _VResolverRemote(resolved->resolver, 0,
+                resolved->name, resolved->accession, &resolved->remote.path,
+                &resolved->remote.str, &resolved->cache);
+        }
+    }
+    if (!checkRemote) {
+        return 0;
+    }
+    if (rc == 0) {
+        rc = ItemResetRemoteToVdbcacheIfVdbcacheRemoteExists(
+            item, remotePath, sizeof remotePath, &remoteExists);
+    }
+    if (!remoteExists) {
+        return 0;
+    }
+    {
+        bool cacheExists = false;
+        if (resolved->existing) {
+            /* resolved->path.str is a local file path */
+            rc = MainDetectVdbcacheCachePath(item->main,
+                resolved->path.str, &resolved->path.path, &local);
+            assert(local);
+            localExists = (VDBManagerPathType(item->main->mgr, "%S", local)
+                & ~kptAlias) != kptNotFound;
+            STSMSG(STS_DBG, ("'%S' %sexist%s", local,
+                localExists ? "" : "does not ", localExists ? "s" : ""));
+        }
+        /* check vdbcache file cache location and its existence */
+        rc = MainDetectVdbcacheCachePath(item->main,
+            resolved->cache, NULL, &cache);
+        cacheExists = (VDBManagerPathType(item->main->mgr, "%S", cache)
+            & ~kptAlias) != kptNotFound;
+        STSMSG(STS_DBG, ("'%S' %sexist%s", cache,
+            cacheExists ? "" : "does not ", cacheExists ? "s" : ""));
+        if (!localExists) {
+            localExists = cacheExists;
+        }
+    }
+    if (!remoteExists) {
+        return 0;
+    }
+    if (localExists) {
+        download = MainNeedDownload(item->main, local ? local : cache,
+            remotePath, resolved->file, &resolved->remoteSz);
+    }
+    RELEASE(String, local);
+    RELEASE(String, resolved->cache);
+    resolved->cache = cache;
+    if (download && rc == 0) {
+
+     /* ignore fasp transport request while ascp vdbcache address is unknown */
+        item->main->noHttp = false;
+
+        rc = MainDownload(&item->resolved, item->main, item->isDependency);
+        if (rc == 0) {
+            if (local && StringCompare(local, cache) != 0) {
+                STSMSG(STS_DBG, ("Removing '%S'", local));
+                /* TODO rm local vdbcache file
+                    if full path is specified and it is not the cache path
+                rc = KDirectoryRemove(item->main->dir, false, "%S", local);
+                    */
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t ItemPostDownload(Item *item, int32_t row) {
+    rc_t rc = 0;
+    Resolved *resolved = NULL;
+    KPathType type = kptNotFound;
+    assert(item);
+    resolved = &item->resolved;
+    if (resolved->type == eRunTypeList) {
+        return rc;
+    }
+    else if (resolved->oversized) {
+        item->main->oversized = true;
+    }
+    else if (resolved->undersized) {
+        item->main->undersized = true;
+    }
+
+    if (resolved->path.str != NULL) {
+        assert(item->main);
+        rc = _VDBManagerSetDbGapCtx(item->main->mgr, resolved->resolver);
+        type = VDBManagerPathType
+            (item->main->mgr, "%s", resolved->name) & ~kptAlias;
+        if (type != kptDatabase) {
+            if (type == kptTable) {
+                 STSMSG(STS_DBG, ("...'%S' is a table", resolved->path.str));
+            }
+            else {
+                 STSMSG(STS_DBG, ("...'%S' is not recognized "
+                     "as a database or a table", resolved->path.str));
+            }
+            return rc;
+         }
+        else {
+            STSMSG(STS_DBG, ("...'%S' is a database", resolved->path.str));
+        }
+    }
+
+    rc = ItemDownloadDependencies(item);
+    if (true) {
+        rc_t rc2 = Quitting();
+        if (rc2 == 0) {
+            rc2 = ItemDownloadVdbcache(item);
+        }
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+static rc_t ItemProcess(Item *item, int32_t row) {
+    rc_t rc = 0;
+
+    assert(item);
+
+    /* resolve: locate; download if not found */
+    rc = ItemResolveResolvedAndDownloadOrProcess(item, row);
+
+    if (item->resolved.type != eRunTypeDownload) {
+        return rc;
+    }
+
+    if (rc == 0) {
+        rc = ItemPostDownload(item, row);
+    }
+
+    return rc;
+}
+
+/*********** Iterator **********/
+static
+rc_t IteratorInit(Iterator *self, const char *obj, const Main *main)
+{
+    rc_t rc = 0;
+
+    KPathType type = kptNotFound;
+
+    assert(self && main);
+    memset(self, 0, sizeof *self);
+
+#if _DEBUGGING
+    if (obj == NULL && main->textkart) {
+        type = KDirectoryPathType(main->dir, "%s", main->textkart);
+        if ((type & ~kptAlias) != kptFile) {
+            rc = RC(rcExe, rcFile, rcOpening, rcFile, rcNotFound);
+            DISP_RC(rc, main->textkart);
+            return rc;
+        }
+        rc = KartMakeText(main->dir, main->textkart, &self->kart,
+            &self->isKart);
+        if (rc != 0) {
+            if (!self->isKart) {
+                rc = 0;
+            }
+            else {
+                PLOGERR(klogErr, (klogErr, rc, "'$(F)' is not a text kart file",
+                    "F=%s", main->textkart));
+            }
+        }
+        return rc;
+    }
+#endif
+
+    assert(obj);
+    type = KDirectoryPathType(main->dir, "%s", obj);
+    if ((type & ~kptAlias) == kptFile) {
+        type = VDBManagerPathType(main->mgr, "%s", obj);
+        if ((type & ~kptAlias) == kptFile) {
+            rc = KartMake(main->dir, obj, &self->kart, &self->isKart);
+            if (!self->isKart) {
+                rc = 0;
+            }
+        }
+    }
+
+    if (rc == 0 && !self->isKart) {
+        self->obj = obj;
+    }
+
+    return rc;
+}
+
+static rc_t IteratorNext(Iterator *self, Item **next, bool *done) {
+    rc_t rc = 0;
+
+    assert(self && next && done);
+
+    *next = NULL;
+
+    if (self->done) {
+        *done = true;
+        return 0;
+    }
+
+    *done = false;
+
+    *next = calloc(1, sizeof **next);
+    if (*next == NULL) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    if (self->isKart) {
+        rc = KartMakeNextItem(self->kart, &(*next)->item);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Invalid kart file: cannot read next row");
+        }
+        else if ((*next)->item == NULL) {
+            RELEASE(Item, *next);
+            *next = NULL;
+            *done = true;
+        }
+
+        if (rc == 0 && *done) {
+            self->done = true;
+        }
+    }
+    else {
+        rc = ItemInit(*next, self->obj);
+
+        self->done = true;
+    }
+
+    return rc;
+}
+
+static void IteratorFini(Iterator *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(Kart, self->kart);
+}
+
+/*********** Command line arguments **********/
+
+static size_t _sizeFromString(const char *val) {
+    size_t s = 0;
+
+    for (s = 0; *val != '\0'; ++val) {
+        if (*val < '0' || *val > '9') {
+            break;
+        }
+        s = s * 10 + *val - '0';
+    }
+
+    if (*val == '\0' || *val == 'k' || *val == 'K') {
+        s *= 1024L;
+    }
+    else if (*val == 'b' || *val == 'B') {
+    }
+    else if (*val == 'm' || *val == 'M') {
+        s *= 1024L * 1024;
+    }
+    else if (*val == 'g' || *val == 'G') {
+        s *= 1024L * 1024 * 1024;
+    }
+    else if (*val == 't' || *val == 'T') {
+        s *= 1024L * 1024 * 1024 * 1024;
+    }
+    else if (*val == 'u' || *val == 'U') {  /* unlimited */
+        s = 0;
+    }
+
+    return s;
+}
+
+#define ASCP_OPTION "ascp-path"
+#define ASCP_ALIAS  "a"
+static const char* ASCP_USAGE[] =
+{ "path to ascp program and private key file (asperaweb_id_dsa.putty)", NULL };
+
+#define ASCP_PAR_OPTION "ascp-options"
+#define ASCP_PAR_ALIAS  NULL
+static const char* ASCP_PAR_USAGE[] =
+{ "arbitrary options to pass to ascp command line", NULL };
+
+#define CHECK_ALL_OPTION "check-all"
+#define CHECK_ALL_ALIAS  "c"
+static const char* CHECK_ALL_USAGE[] = { "double-check all refseqs", NULL };
+
+#define FORCE_OPTION "force"
+#define FORCE_ALIAS  "f"
+static const char* FORCE_USAGE[] = {
+    "force object download - one of: no, yes, all.",
+    "no [default]: skip download if the object if found and complete;",
+    "yes: download it even if it is found and is complete;", "all: ignore lock "
+    "files (stale locks or it is being downloaded by another process: "
+    "use at your own risk!)", NULL };
+
+#define FAIL_ASCP_OPTION "FAIL-ASCP"
+#define FAIL_ASCP_ALIAS  "F"
+static const char* FAIL_ASCP_USAGE[] = {
+    "force ascp download fail to test ascp->http download combination" };
+
+#define LIST_OPTION "list"
+#define LIST_ALIAS  "l"
+static const char* LIST_USAGE[] = { "list the content of a kart file", NULL };
+
+#define NM_L_OPTION "numbered-list"
+#define NM_L_ALIAS  "n"
+static const char* NM_L_USAGE[] =
+{ "list the content of a kart file with kart row numbers", NULL };
+
+#define MINSZ_OPTION "min-size"
+#define MINSZ_ALIAS  "N"
+static const char* MINSZ_USAGE[] =
+{ "minimum file size to download in KB (inclusive).", NULL };
+
+#define ORDR_OPTION "order"
+#define ORDR_ALIAS  "o"
+static const char* ORDR_USAGE[] = { "kart prefetch order: one of: kart, size.",
+    "(in kart order, by file size: smallest first), default: size", NULL };
+
+#define HBEAT_OPTION "progress"
+#define HBEAT_ALIAS  "p"
+static const char* HBEAT_USAGE[] = {
+    "time period in minutes to display download progress",
+    "(0: no progress), default: 1", NULL };
+
+#define ROWS_OPTION "rows"
+#define ROWS_ALIAS  "R"
+static const char* ROWS_USAGE[] =
+{ "kart rows (default all).", "row list should be ordered", NULL };
+
+#define SZ_L_OPTION "list-sizes"
+#define SZ_L_ALIAS  "s"
+static const char* SZ_L_USAGE[] =
+{ "list the content of a kart file with target file sizes", NULL };
+
+#define TRANS_OPTION "transport"
+#define TRASN_ALIAS  "t"
+static const char* TRANS_USAGE[] = { "transport: one of: fasp; http; both.",
+    "(fasp only; http only; first try fasp (ascp), "
+    "use http if cannot download using fasp).",
+    "Default: both", NULL };
+
+#define DEFAULT_MAX_FILE_SIZE "20G"
+#define SIZE_OPTION "max-size"
+#define SIZE_ALIAS  "X"
+static const char* SIZE_USAGE[] = {
+    "maximum file size to download in KB (exclusive).",
+    "Default: " DEFAULT_MAX_FILE_SIZE, NULL };
+
+#if ALLOW_STRIP_QUALS
+#define STRIP_QUALS_OPTION "strip-quals"
+#define STRIP_QUALS_ALIAS NULL
+static const char* STRIP_QUALS_USAGE[] =
+{ "remove QUALITY column from all tables", NULL };
+#endif
+
+#define ELIM_QUALS_OPTION "eliminate-quals"
+#define ELIM_QUALS_ALIAS NULL
+static const char* ELIM_QUALS_USAGE[] =
+{ "don't download QUALITY column", NULL };
+
+#if _DEBUGGING
+#define TEXTKART_OPTION "text-kart"
+static const char* TEXTKART_USAGE[] =
+{ "To read a textual format kart file (DEBUG ONLY)", NULL };
+#endif
+
+static OptDef Options[] = {
+    /*                                                    needs_value required*/
+    { FORCE_OPTION       , FORCE_ALIAS       , NULL, FORCE_USAGE , 1, true, false }
+   ,{ TRANS_OPTION       , TRASN_ALIAS       , NULL, TRANS_USAGE , 1, true, false }
+   ,{ LIST_OPTION        , LIST_ALIAS        , NULL, LIST_USAGE  , 1, false,false }
+   ,{ NM_L_OPTION        , NM_L_ALIAS        , NULL, NM_L_USAGE  , 1, false,false }
+   ,{ SZ_L_OPTION        , SZ_L_ALIAS        , NULL, SZ_L_USAGE  , 1, false,false }
+   ,{ ROWS_OPTION        , ROWS_ALIAS        , NULL, ROWS_USAGE  , 1, true, false }
+   ,{ MINSZ_OPTION       , MINSZ_ALIAS       , NULL, MINSZ_USAGE , 1, true ,false }
+   ,{ SIZE_OPTION        , SIZE_ALIAS        , NULL, SIZE_USAGE  , 1, true ,false }
+   ,{ ORDR_OPTION        , ORDR_ALIAS        , NULL, ORDR_USAGE  , 1, true ,false }
+   ,{ ASCP_OPTION        , ASCP_ALIAS        , NULL, ASCP_USAGE  , 1, true ,false }
+   ,{ ASCP_PAR_OPTION    , ASCP_PAR_ALIAS    , NULL, ASCP_PAR_USAGE, 1, true ,false }
+   ,{ HBEAT_OPTION       , HBEAT_ALIAS       , NULL, HBEAT_USAGE , 1, true, false }
+   ,{ FAIL_ASCP_OPTION   , FAIL_ASCP_ALIAS   , NULL, FAIL_ASCP_USAGE, 1, false, false}
+#if ALLOW_STRIP_QUALS
+   ,{ STRIP_QUALS_OPTION , STRIP_QUALS_ALIAS , NULL, STRIP_QUALS_USAGE , 1, false, false }
+#endif
+   ,{ ELIM_QUALS_OPTION  , ELIM_QUALS_ALIAS  , NULL, ELIM_QUALS_USAGE , 1, false, false }
+#if _DEBUGGING
+   ,{ TEXTKART_OPTION    , NULL              , NULL, TEXTKART_USAGE , 1, true , false}
+#endif
+   ,{ CHECK_ALL_OPTION   , CHECK_ALL_ALIAS   , NULL, CHECK_ALL_USAGE, 1, false, false}
+};
+
+static ParamDef Parameters[] = { { ArgsConvFilepath } };
+
+static rc_t MainProcessArgs(Main *self, int argc, char *argv[]) {
+    rc_t rc = 0;
+
+    uint32_t pcount = 0;
+
+    assert(self);
+
+    rc = ArgsMakeAndHandle2(&self->args, argc, argv,
+        Parameters, sizeof Parameters / sizeof Parameters[0],
+        1, Options, sizeof Options / sizeof Options[0]);
+    if (rc != 0) {
+        DISP_RC(rc, "ArgsMakeAndHandle");
+        return rc;
+    }
+
+    do {
+/* FORCE_OPTION goes first */
+        rc = ArgsOptionCount (self->args, FORCE_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" FORCE_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, FORCE_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" FORCE_OPTION "' argument value");
+                break;
+            }
+            if (val == NULL || val[0] == '\0') {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                LOGERR(klogErr, rc,
+                    "Unrecognized '" FORCE_OPTION "' argument value");
+                break;
+            }
+            switch (val[0]) {
+                case 'n':
+                case 'N':
+                    self->force = eForceNo;
+                    break;
+                case 'y':
+                case 'Y':
+                    self->force = eForceYes;
+                    break;
+                case 'a':
+                case 'A':
+                    self->force = eForceYES;
+                    break;
+                default:
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc,
+                        "Unrecognized '" FORCE_OPTION "' argument value");
+                    break;
+            }
+            if (rc != 0) {
+                break;
+            }
+        }
+
+/* CHECK_ALL_OPTION goes after FORCE_OPTION */
+        rc = ArgsOptionCount(self->args, CHECK_ALL_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" CHECK_ALL_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0 || self->force != eForceNo) {
+            self->check_all = true;
+        }
+
+/******* LIST OPTIONS BEGIN ********/
+/* LIST_OPTION */
+        rc = ArgsOptionCount(self->args, LIST_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" LIST_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            self->list_kart = true;
+        }
+
+/* NM_L_OPTION */
+        rc = ArgsOptionCount(self->args, NM_L_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" NM_L_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            self->list_kart = self->list_kart_numbered = true;
+        }
+
+/* SZ_L_OPTION */
+        rc = ArgsOptionCount(self->args, SZ_L_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" SZ_L_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) { /* self->list_kart is not set here! */
+            self->list_kart_sized = true;
+        }
+/******* LIST OPTIONS END ********/
+
+/* ASCP_OPTION */
+        rc = ArgsOptionCount(self->args, ASCP_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" ASCP_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, ASCP_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" ASCP_OPTION "' argument value");
+                break;
+            }
+            if (val != NULL) {
+                char *sep = strchr(val, '|');
+                if (sep == NULL) {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc,
+             "ascp-path expected in the following format:\n"
+             "--" ASCP_OPTION " \"<ascp-binary|private-key-file>\"\n"
+             "Examples:\n"
+             "--" ASCP_OPTION " \"/usr/bin/ascp|/etc/asperaweb_id_dsa.putty\"\n"
+             "--" ASCP_OPTION " \"C:\\Program Files\\Aspera\\ascp.exe|C:\\Program Files\\Aspera\\etc\\asperaweb_id_dsa.putty\"\n");
+                    break;
+                }
+                else {
+                    self->ascp = string_dup(val, sep - val);
+                    self->asperaKey = string_dup_measure(sep + 1, NULL);
+                    self->ascpChecked = true;
+                }
+            }
+        }
+
+/* ASCP_PAR_OPTION */
+        rc = ArgsOptionCount(self->args, ASCP_PAR_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" ASCP_PAR_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            rc = ArgsOptionValue(self->args,
+                ASCP_PAR_OPTION, 0, (const void **)&self->ascpParams);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" ASCP_PAR_OPTION "' argument value");
+                break;
+            }
+        }
+
+/* FAIL_ASCP_OPTION */
+        rc = ArgsOptionCount(self->args, FAIL_ASCP_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" FAIL_ASCP_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            self->forceAscpFail = true;
+        }
+
+/* HBEAT_OPTION */
+        rc = ArgsOptionCount(self->args, HBEAT_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" HBEAT_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            double f;
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, HBEAT_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" HBEAT_OPTION "' argument value");
+                break;
+            }
+            f = atof(val) * 60000;
+            self->heartbeat = (uint64_t)f;
+        }
+
+/* ORDR_OPTION */
+        rc = ArgsOptionCount(self->args, ORDR_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" ORDR_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, ORDR_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" ORDR_OPTION "' argument value");
+                break;
+            }
+            if (val != NULL && val[0] == 's') {
+                self->order = eOrderSize;
+            }
+            else {
+                self->order = eOrderOrig;
+            }
+        }
+
+/* ROWS_OPTION */
+        rc = ArgsOptionCount(self->args, ROWS_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" ROWS_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0) {
+            rc = ArgsOptionValue(self->args, ROWS_OPTION, 0, (const void **)&self->rows);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" ROWS_OPTION "' argument value");
+                break;
+            }
+        }
+
+/* MINSZ_OPTION */
+        {
+            const char *val = "0";
+            rc = ArgsOptionCount(self->args, MINSZ_OPTION, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr,
+                    rc, "Failure to get '" MINSZ_OPTION "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                rc = ArgsOptionValue(self->args, MINSZ_OPTION, 0, (const void **)&val);
+                if (rc != 0) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" MINSZ_OPTION "' argument value");
+                    break;
+                }
+            }
+            self->minSize = _sizeFromString(val);
+        }
+
+/* SIZE_OPTION */
+        {
+            const char *val = DEFAULT_MAX_FILE_SIZE;
+            rc = ArgsOptionCount(self->args, SIZE_OPTION, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr,
+                    rc, "Failure to get '" SIZE_OPTION "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                rc = ArgsOptionValue(self->args, SIZE_OPTION, 0, (const void **)&val);
+                if (rc != 0) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" SIZE_OPTION "' argument value");
+                    break;
+                }
+            }
+            self->maxSize = _sizeFromString(val);
+            if (self->maxSize == 0) {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                LOGERR(klogErr, rc, "Maximum requested file size is zero");
+                break;
+            }
+        }
+
+        if (self->maxSize > 0 && self->minSize > self->maxSize) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+            LOGERR(klogErr, rc, "Minimum file size is larger than maximum");
+            break;
+        }
+
+/* TRANS_OPTION */
+        rc = ArgsOptionCount(self->args, TRANS_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" TRANS_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            bool ok = false;
+            const char *val = NULL;
+            rc = ArgsOptionValue
+                (self->args, TRANS_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" TRANS_OPTION "' argument value");
+                break;
+            }
+            assert(val);
+            switch (val[0]) {
+                case 'a':
+                case 'f': {
+                    const char ascp[] = "ascp";
+                    const char fasp[] = "fasp";
+                    if (string_cmp(val, string_measure(val, NULL),
+                            ascp, sizeof ascp - 1, sizeof ascp - 1) == 0
+                        ||
+                        string_cmp(val, string_measure(val, NULL),
+                            fasp, sizeof fasp - 1, sizeof fasp - 1) == 0
+                        ||
+                        (val[0] == 'a' && val[1] == '\0'))
+                    {
+                        self->noHttp = true;
+                        ok = true;
+                    }
+                    break;
+                }
+                case 'h': {
+                    const char http[] = "http";
+                    if (string_cmp(val, string_measure(val, NULL),
+                            http, sizeof http - 1, sizeof http - 1) == 0
+                        || val[1] == '\0')
+                    {
+                        self->noAscp = true;
+                        ok = true;
+                    }
+                    break;
+                }
+            }
+            if (!ok) {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                LOGERR(klogErr, rc, "Bad '" TRANS_OPTION "' argument value");
+                break;
+            }
+        }
+
+#if ALLOW_STRIP_QUALS
+/* STRIP_QUALS_OPTION */
+        rc = ArgsOptionCount(self->args, STRIP_QUALS_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" STRIP_QUALS_OPTION "' argument");
+            break;
+        }
+        
+        if (pcount > 0) {
+            self->stripQuals = true;
+        }
+#endif
+        
+/* ELIM_QUALS_OPTION */
+        rc = ArgsOptionCount(self->args, ELIM_QUALS_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" ELIM_QUALS_OPTION "' argument");
+            break;
+        }
+        
+        if (pcount > 0) {
+            self->eliminateQuals = true;
+        }
+
+#if ALLOW_STRIP_QUALS
+        if (self->stripQuals && self->eliminateQuals) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+            LOGERR(klogErr, rc, "Cannot set both '" STRIP_QUALS_OPTION "' and '" ELIM_QUALS_OPTION "'");
+            break;
+        }
+#endif
+        
+#if _DEBUGGING
+/* TEXTKART_OPTION */
+        rc = ArgsOptionCount(self->args, TEXTKART_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc,
+                "Failure to get '" TEXTKART_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, TEXTKART_OPTION, 0, (const void **)&val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" TEXTKART_OPTION "' argument value");
+                break;
+            }
+            self->textkart = val;
+        }
+#endif
+    } while (false);
+
+    STSMSG(STS_FIN, ("heartbeat = %ld Milliseconds", self->heartbeat));
+
+    return rc;
+}
+
+const char UsageDefaultName[] = "prefetch";
+rc_t CC UsageSummary(const char *progname) {
+    return OUTMSG((
+        "Usage:\n"
+        "  %s [options] <SRA accession | kart file> [...]\n"
+        "  Download SRA or dbGaP files and their dependencies\n"
+        "\n"
+        "  %s [options] <SRA file> [...]\n"
+        "  Check SRA file for missed dependencies "
+                                           "and download them\n"
+        "\n"
+        "  %s --list <kart file> [...]\n"
+        "  List the content of a kart file\n\n"
+        , progname, progname, progname));
+}
+
+rc_t CC Usage(const Args *args) {
+    rc_t rc = 0;
+    int i = 0;
+
+    const char *progname = UsageDefaultName;
+    const char *fullpath = UsageDefaultName;
+
+    if (args == NULL) {
+        rc = RC(rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
+    }
+    else {
+        rc = ArgsProgram(args, &fullpath, &progname);
+    }
+    if (rc != 0) {
+        progname = fullpath = UsageDefaultName;
+    }
+
+    UsageSummary(progname);
+    OUTMSG(("\n"));
+
+    OUTMSG(("Options:\n"));
+    for (i = 0; i < sizeof(Options) / sizeof(Options[0]); i++ ) {
+        const char *param = NULL;
+
+        if (Options[i].aliases != NULL) {
+            if (strcmp(Options[i].aliases, FAIL_ASCP_ALIAS) == 0) {
+                continue; /* debug option */
+            }
+            if (strcmp(Options[i].aliases, ASCP_ALIAS) == 0) {
+                param = "ascp-binary|private-key-file";
+            }
+            else if (strcmp(Options[i].aliases, FORCE_ALIAS) == 0 ||
+                strcmp(Options[i].aliases, HBEAT_ALIAS) == 0 ||
+                strcmp(Options[i].aliases, HBEAT_ALIAS) == 0 ||
+                strcmp(Options[i].aliases, ORDR_ALIAS) == 0 ||
+                strcmp(Options[i].aliases, TRASN_ALIAS) == 0)
+            {
+                param = "value";
+            }
+            else if (strcmp(Options[i].aliases, ROWS_ALIAS) == 0) {
+                param = "rows";
+            }
+            else if (strcmp(Options[i].aliases, SIZE_ALIAS) == 0
+                  || strcmp(Options[i].aliases, MINSZ_ALIAS) == 0)
+            {
+                param = "size";
+            }
+        }
+        else if (strcmp(Options[i].name, ASCP_PAR_OPTION) == 0) {
+            param = "value";
+        }
+#if _DEBUGGING
+        else if (strcmp(Options[i].name, TEXTKART_OPTION) == 0) {
+            param = "value";
+        }
+#endif
+
+        if (Options[i].aliases != NULL &&
+            (strcmp(Options[i].aliases, TRASN_ALIAS) == 0 ||
+             strcmp(Options[i].aliases, CHECK_ALL_ALIAS) == 0))
+        {
+            OUTMSG(("\n"));
+        }
+
+        HelpOptionLine(Options[i].aliases, Options[i].name,
+            param, Options[i].help);
+    }
+
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+
+    return rc;
+}
+
+/******************************************************************************/
+
+/********** KartTreeNode **********/
+static void CC bstKrtWhack(BSTNode *n, void *ignore) {
+    KartTreeNode *sn = (KartTreeNode*) n;
+
+    assert(sn);
+
+    ItemRelease(sn->i);
+
+    memset(sn, 0, sizeof *sn);
+
+    free(sn);
+}
+
+static int64_t CC bstKrtSort(const BSTNode *item, const BSTNode *n) {
+    const KartTreeNode *sn1 = (const KartTreeNode*)item;
+    const KartTreeNode *sn2 = (const KartTreeNode*)n;
+
+    assert(sn1 && sn2 && sn1->i && sn2->i);
+
+    if (sn1->i->resolved.remoteSz < sn2->i->resolved.remoteSz)
+        return -1;
+    else if (sn1->i->resolved.remoteSz > sn2->i->resolved.remoteSz)
+        return 1;
+
+    return 0;
+}
+
+static void CC bstKrtDownload(BSTNode *n, void *data) {
+    rc_t rc = 0;
+
+    const KartTreeNode *sn = (const KartTreeNode*) n;
+    assert(sn && sn->i);
+
+    rc = ItemDownload(sn->i);
+
+    if (rc == 0) {
+        rc = ItemPostDownload(sn->i, sn->i->number);
+    }
+}
+
+/*********** Finalize Main object **********/
+static rc_t MainFini(Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(KConfig, self->cfg);
+    RELEASE(VResolver, self->resolver);
+    RELEASE(VDBManager, self->mgr);
+    RELEASE(KDirectory, self->dir);
+    RELEASE(KRepositoryMgr, self->repoMgr);
+    RELEASE(KNSManager, self->kns);
+    RELEASE(VFSManager, self->vfsMgr);
+    RELEASE(Args, self->args);
+
+    BSTreeWhack(&self->downloaded, bstWhack, NULL);
+
+    free(self->buffer);
+
+    free((void*)self->ascp);
+    free((void*)self->asperaKey);
+    free(self->ascpMaxRate);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+/*********** Initialize Main object **********/
+static rc_t MainInit(int argc, char *argv[], Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+    memset(self, 0, sizeof *self);
+
+    self->heartbeat = 60000;
+/*  self->heartbeat = 69; */
+
+    BSTreeInit(&self->downloaded);
+
+    if (rc == 0) {
+        rc = MainProcessArgs(self, argc, argv);
+    }
+
+    if (rc == 0) {
+        self->bsize = 1024 * 1024;
+        self->buffer = malloc(self->bsize);
+        if (self->buffer == NULL) {
+            rc = RC(rcExe, rcData, rcAllocating, rcMemory, rcExhausted);
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&self->vfsMgr);
+        DISP_RC(rc, "VFSManagerMake");
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VFSManagerGetKNSMgr (self->vfsMgr, & self->kns);
+        DISP_RC(rc, "VFSManagerGetKNSMgr");
+    }
+
+    if (rc == 0) {
+        VResolver *resolver = NULL;
+        rc = VFSManagerGetResolver(self->vfsMgr, &resolver);
+        DISP_RC(rc, "VFSManagerGetResolver");
+        VResolverRemoteEnable(resolver, vrAlwaysEnable);
+        VResolverCacheEnable(resolver, vrAlwaysEnable);
+        RELEASE(VResolver, resolver);
+    }
+
+    if (rc == 0) {
+        rc = KConfigMake(&self->cfg, NULL);
+        DISP_RC(rc, "KConfigMake");
+    }
+
+    if (rc == 0) {
+        rc = KConfigMakeRepositoryMgrRead(self->cfg, &self->repoMgr);
+        DISP_RC(rc, "KConfigMakeRepositoryMgrRead");
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMakeResolver(self->vfsMgr, &self->resolver, self->cfg);
+        DISP_RC(rc, "VFSManagerMakeResolver");
+    }
+
+    if (rc == 0) {
+        VResolverRemoteEnable(self->resolver, vrAlwaysEnable);
+        VResolverCacheEnable(self->resolver, vrAlwaysEnable);
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeRead(&self->mgr, NULL);
+        DISP_RC(rc, "VDBManagerMakeRead");
+    }
+
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&self->dir);
+        DISP_RC(rc, "KDirectoryNativeDir");
+    }
+
+    if (rc == 0) {
+        srand((unsigned)time(NULL));
+    }
+
+    return rc;
+}
+
+/*********** Process one command line argument **********/
+static rc_t MainRun(Main *self, const char *arg, const char *realArg) {
+    ERunType type = eRunTypeDownload;
+    rc_t rc = 0;
+    Iterator it;
+    assert(self && realArg);
+    memset(&it, 0, sizeof it);
+
+    if (rc == 0) {
+        rc = IteratorInit(&it, arg, self);
+    }
+
+    if (self->list_kart_sized) {
+        type = eRunTypeList;
+    }
+    else if (self->order == eOrderSize) {
+        if (rc == 0 && it.kart == NULL) {
+            type = eRunTypeDownload;
+        }
+        else {
+            type = eRunTypeGetSize;
+        }
+    }
+    else {
+        type = eRunTypeDownload;
+    }
+
+    if (rc == 0) {
+        BSTree trKrt;
+        BSTreeInit(&trKrt);
+        if (self->list_kart) {
+            if (it.kart != NULL) {
+                if (self->list_kart_numbered) {
+                    rc = KartPrintNumbered(it.kart);
+                }
+                else {
+                    rc = KartPrint(it.kart);
+                }
+            }
+            else {
+                PLOGMSG(klogWarn, (klogWarn,
+                    "'$(F)' is invalid or not a kart file",
+                    "F=%s", realArg));
+            }
+        }
+        else {
+            size_t total = 0;
+            const char *row = self->rows;
+            int64_t n = 1;
+            NumIterator nit;
+            NumIteratorInit(&nit, row);
+            if (type == eRunTypeList) {
+                self->maxSize = ~0;
+                if (it.kart != NULL) {
+                    OUTMSG((
+                      "row\tproj-id|item-id|accession|name|item-desc\tsize\n"));
+                }
+            }
+            else {
+                if (it.kart != NULL) {
+                    OUTMSG(("Downloading kart file '%s'\n", realArg));
+                    if (type == eRunTypeGetSize) {
+                        OUTMSG(("Checking sizes of kart files...\n"));
+                    }
+                }
+                OUTMSG(("\n"));
+            }
+
+            for (n = 1; ; ++n) {
+                rc_t rc2 = 0;
+                rc_t rc3 = 0;
+                bool done = false;
+                Item *item = NULL;
+                rc_t rcq = Quitting();
+                if (rcq != 0) {
+                    if (rc == 0) {
+                        rc = rcq;
+                    }
+                    break;
+                }
+                rc2 = IteratorNext(&it, &item, &done);
+                if (rc2 != 0 || done) {
+                    if (rc == 0 && rc2 != 0) {
+                        rc = rc2;
+                    }
+                    break;
+                }
+                done = ! NumIteratorNext(&nit, n);
+                if (done) {
+                    break;
+                }
+                if (!nit.skip) {
+                    item->main = self;
+                    ResolvedReset(&item->resolved, type);
+
+                    rc3 = ItemProcess(item, (int32_t)n);
+                    if (rc3 != 0) {
+                        if (rc == 0) {
+                            rc = rc3;
+                        }
+                    }
+                    else {
+                        if (item->resolved.undersized &&
+                            type == eRunTypeGetSize)
+                        {
+                            STSMSG(STS_TOP,
+               ("%d) '%s' (%,zu KB) is smaller than minimum allowed: skipped\n",
+                n, item->resolved.name, item->resolved.remoteSz / 1024));
+                        }
+                        else if (item->resolved.oversized &&
+                             type == eRunTypeGetSize)
+                        {
+                            logMaxSize(self->maxSize);
+                            logBigFile(n, item->resolved.name,
+                                          item->resolved.remoteSz);
+                        }
+                        else {
+                            total += item->resolved.remoteSz;
+
+                            if (item != NULL) {
+                                if (type == eRunTypeGetSize) {
+                                    KartTreeNode *sn = calloc(1, sizeof *sn);
+                                    if (sn == NULL) {
+                                        return RC(rcExe, rcStorage,
+                                           rcAllocating, rcMemory, rcExhausted);
+                                    }
+                                    if (item->resolved.remoteSz == 0) {
+                                        /* remoteSz is unknown:
+                     add it to the end of download list preserving kart order */
+                                        item->resolved.remoteSz
+                                            = (~0ul >> 1) + n + 1;
+                                    }
+                                    sn->i = item;
+                                    item = NULL;
+                                    BSTreeInsert(&trKrt, (BSTNode*)sn,
+                                        bstKrtSort);
+                                }
+                            }
+                        }
+                    }
+                }
+
+                RELEASE(Item, item);
+            }
+
+            if (type == eRunTypeList) {
+                if (it.kart != NULL && total > 0) {
+                    OUTMSG(("--------------------\ntotal\t%,zuB\n\n", total));
+                }
+            }
+            else if (type == eRunTypeGetSize) {
+                OUTMSG(("\nDownloading the files...\n\n", realArg));
+                BSTreeForEach(&trKrt, false, bstKrtDownload, NULL);
+            }
+        }
+        BSTreeWhack(&trKrt, bstKrtWhack, NULL);
+    }
+    if (it.isKart) {
+        if (self->list_kart) {
+            rc_t rc2 = OUTMSG(("\n"));
+            if (rc2 != 0 && rc == 0) {
+                rc = rc2;
+            }
+        }
+        else if (rc == 0) {
+            uint16_t number = 0;
+            rc = KartItemsProcessed(it.kart, &number);
+            if (rc == 0 && number == 0) {
+                PLOGMSG(klogWarn, (klogWarn,
+                    "kart file '$(F)' is empty", "F=%s", realArg));
+            }
+        }
+    }
+    IteratorFini(&it);
+
+    return rc;
+}
+
+/*********** Main **********/
+rc_t CC KMain(int argc, char *argv[]) {
+    rc_t rc = 0;
+    bool insufficient = false;
+    uint32_t pcount = 0;
+
+    Main pars;
+    rc = MainInit(argc, argv, &pars);
+
+    if (rc == 0) {
+        rc = ArgsParamCount(pars.args, &pcount);
+    }
+    if (rc == 0 && pcount == 0) {
+#if _DEBUGGING
+        if (!pars.textkart)
+#endif
+          rc = UsageSummary(UsageDefaultName);
+          insufficient = true;
+    }
+
+    if (rc == 0) {
+        uint32_t i = ~0;
+
+#if _DEBUGGING
+        if (pars.textkart) {
+            rc = MainRun(&pars, NULL, pars.textkart);
+        }
+#endif
+
+        for (i = 0; i < pcount; ++i) {
+            const char *obj = NULL;
+            rc_t rc2 = ArgsParamValue(pars.args, i, (const void **)&obj);
+            DISP_RC(rc2, "ArgsParamValue");
+            if (rc2 == 0) {
+                rc2 = MainRun(&pars, obj, obj);
+                if (rc2 != 0 && rc == 0) {
+                    rc = rc2;
+                }
+            }
+        }
+
+        if (pars.undersized || pars.oversized) {
+            OUTMSG(("\n"));
+            if (pars.undersized) {
+                OUTMSG((
+               "Download of some files was skipped because they are too small\n"
+                ));
+            }
+            if (pars.oversized) {
+                OUTMSG((
+               "Download of some files was skipped because they are too large\n"
+                ));
+            }
+            OUTMSG((
+               "You can change size download limit by setting\n"
+             "--" MINSZ_OPTION " and --" SIZE_OPTION " command line arguments\n"
+            ));
+        }
+    }
+
+    {
+        rc_t rc2 = MainFini(&pars);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    if ( rc == 0 && insufficient ) {
+        rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+    }
+
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/.gitignore b/tools/qual-recalib-stat/.gitignore
new file mode 100644
index 0000000..c1e9d15
--- /dev/null
+++ b/tools/qual-recalib-stat/.gitignore
@@ -0,0 +1,3 @@
+*.sh
+*.txt
+stat-table
diff --git a/tools/qual-recalib-stat/Makefile b/tools/qual-recalib-stat/Makefile
new file mode 100644
index 0000000..598a156
--- /dev/null
+++ b/tools/qual-recalib-stat/Makefile
@@ -0,0 +1,84 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/qual-recalib-stat
+
+INT_TOOLS = \
+	qual-recalib-stat
+
+EXT_TOOLS = \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-config
+#
+Q_RECAL_STAT_SRC = \
+	namelist_tools \
+	context \
+	columns \
+	ref_exclude \
+	spot_position \
+	stat_mod_2 \
+	reader \
+	writer \
+	qual-recalib-stat
+
+Q_RECAL_STAT_OBJ = \
+	$(addsuffix .$(OBJX),$(Q_RECAL_STAT_SRC))
+
+Q_RECAL_STAT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/qual-recalib-stat: $(Q_RECAL_STAT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(Q_RECAL_STAT_LIB)
diff --git a/tools/qual-recalib-stat/columns.c b/tools/qual-recalib-stat/columns.c
new file mode 100644
index 0000000..d606822
--- /dev/null
+++ b/tools/qual-recalib-stat/columns.c
@@ -0,0 +1,94 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "columns.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <klib/log.h>
+
+rc_t add_column( const VCursor *cursor, col *column, const char *name )
+{
+    rc_t rc = VCursorAddColumn ( cursor, &column->idx, "%s", name );
+    if ( rc != 0 )
+        PLOGERR( klogInt, ( klogInt, rc, 
+                            "VCursorAddColumn($(name)) failed", "name=%s", name ) );
+    return rc;
+}
+
+
+rc_t add_columns( const VCursor *cursor,
+                  col *columns, const char **names, uint32_t n_columns )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    for ( idx = 0; idx < n_columns && rc == 0; ++idx )
+    {
+        rc = add_column( cursor, &columns[ idx ], names[ idx ] );
+    }
+    return rc;
+}
+
+
+rc_t read_cell( const VCursor *my_cursor,
+                int64_t row_id,
+                col *column,
+                const char * name )
+{
+    rc_t rc = VCursorCellDataDirect ( my_cursor, row_id,
+            column->idx, &column->elem_bits, &column->base,
+            &column->bit_offset, &column->row_len );
+    if ( rc != 0 )
+        PLOGERR( klogInt, ( klogInt, rc, 
+                            "VCursorCellDataDirect($(name),$(rowid)) failed", 
+                            "name=%s,rowid=%lu", name, row_id ) );
+    return rc;
+}
+
+
+rc_t read_cells( const VCursor *my_cursor, int64_t row_id,
+                 col *columns, const char **names, uint32_t n_columns )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    for ( idx = 0; idx < n_columns && rc == 0; ++idx )
+    {
+        rc = read_cell( my_cursor, row_id, &columns[ idx ], names[ idx ] );
+    }
+    return rc;
+}
+
+
+rc_t write_to_cursor( VCursor * cursor, uint32_t idx, uint32_t bsize,
+                      void * src, uint32_t count, const char * name )
+{
+    rc_t rc = VCursorWrite( cursor, idx, bsize, src, 0, count );
+    if ( rc != 0 )
+        PLOGERR( klogInt, ( klogInt, rc, 
+                            "VCursorWrite($(name)) failed", "name=%s", name ) );
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/columns.h b/tools/qual-recalib-stat/columns.h
new file mode 100644
index 0000000..44e85c5
--- /dev/null
+++ b/tools/qual-recalib-stat/columns.h
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_columns_
+#define _h_columns_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <vdb/cursor.h>
+
+typedef struct col
+{
+    uint32_t idx;
+    uint32_t elem_bits;
+    uint32_t bit_offset;
+    uint32_t row_len;
+    const void * base;
+} col;
+
+
+rc_t add_column( const VCursor *cursor, col *column, const char *name );
+
+rc_t add_columns( const VCursor *cursor,
+                  col *columns, const char **names, uint32_t n_columns );
+
+rc_t read_cell( const VCursor *my_cursor,
+                int64_t row_id,
+                col *column,
+                const char * name );
+
+rc_t read_cells( const VCursor *my_cursor, int64_t row_id,
+                 col *columns, const char **names, uint32_t n_columns );
+
+rc_t write_to_cursor( VCursor * cursor, uint32_t idx, uint32_t bsize,
+                      void * src, uint32_t count, const char * name );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/context.c b/tools/qual-recalib-stat/context.c
new file mode 100644
index 0000000..0eb462a
--- /dev/null
+++ b/tools/qual-recalib-stat/context.c
@@ -0,0 +1,330 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "context.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+/*
+ * helper-function to set a string inside the context
+ * ( makes a copy ) with error detection
+*/
+static rc_t context_set_str( char **dst, const char *src )
+{
+    size_t len;
+    if ( dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    if ( *dst != NULL )
+    {
+        free( *dst );
+        *dst = NULL;
+    }
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    *dst = string_dup_measure ( src, &len );
+ 
+    if ( len == 0 )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
+    if ( *dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
+    return 0;
+}
+
+
+/*
+ * generates a new context, initializes values
+*/
+rc_t context_init( context **ctx )
+{
+    rc_t rc;
+
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    (*ctx) = (p_context)calloc( 1, sizeof **ctx );
+    if ( *ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+
+    /* because of calloc the context is zero'd out
+       default-values can be set here: */
+
+    rc = num_gen_make( &((*ctx)->row_generator) );
+    if ( rc != 0 )
+        OUTMSG(( "num_gen_make() failed %r\n", rc ));
+    return rc;
+}
+
+
+/*
+ * destroys a context, frees all pointers the context owns
+*/
+rc_t context_destroy( p_context ctx )
+{
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcParam, rcNull );
+
+    if ( ctx->src_path != NULL )
+    {
+        free( (void*)ctx->src_path );
+        ctx->src_path = NULL;
+    }
+    if ( ctx->output_file_path != NULL )
+    {
+        free( (void*)ctx->output_file_path );
+        ctx->output_file_path = NULL;
+    }
+    if ( ctx->output_mode != NULL )
+    {
+        free( (void*)ctx->output_mode );
+        ctx->output_mode = NULL;
+    }
+    if ( ctx->src_schema_list != NULL )
+    {
+        KNamelistRelease( ctx->src_schema_list );
+        ctx->src_schema_list = NULL;
+    }
+    num_gen_destroy( ctx->row_generator );
+    free( ctx );
+    return 0;
+}
+
+
+/*
+ * clear's the number-generator and sets the given intervall
+*/
+rc_t context_set_range( p_context ctx, 
+                        const int64_t first, const uint64_t count )
+{
+    rc_t rc = num_gen_clear( ctx->row_generator );
+    if ( rc == 0 )
+        rc = num_gen_add( ctx->row_generator, first, count );
+    return rc;
+}
+
+
+/*
+ * performs the range check to trim the internal number
+ * generator to the given range
+*/
+rc_t context_range_check( p_context ctx, 
+                          const int64_t first, const uint64_t count )
+{
+    return num_gen_range_check( ctx->row_generator, first, count );
+}
+
+
+/*
+ * helper-function to set the source-path
+*/
+static rc_t context_set_src_path( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->src_path), src );
+}
+
+/*
+ * helper-function to set the output-path
+*/
+static rc_t context_set_out_file_path( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->output_file_path), src );
+}
+
+
+/*
+ * helper-function to set the output-mode
+*/
+static rc_t context_set_out_mode( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->output_mode), src );
+}
+
+
+/*
+ * helper-function to set path to exclude-db
+*/
+static rc_t context_set_exclude_path( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->exclude_file_path), src );
+}
+
+
+static rc_t context_set_row_range( p_context ctx, const char *src )
+{
+    if ( ( ctx == NULL )||( src == NULL ) )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    return num_gen_parse( ctx->row_generator, src );
+}
+
+
+static bool context_check_if_usage_necessary( p_context ctx )
+{
+    if ( ctx == NULL ) return false;
+    if ( ctx->src_path == NULL )
+        ctx->usage_requested = true;
+    return ctx->usage_requested;
+}
+
+
+static rc_t context_evaluate_arguments( const Args *my_args, p_context ctx )
+{
+    uint32_t count, idx;
+    
+    rc_t rc = ArgsParamCount( my_args, &count );
+    if ( rc != 0 )
+    {
+        OUTMSG(( "ArgsParamCount() failed %R\n", rc ));
+        return rc;
+    }
+
+    for ( idx = 0; idx < count && rc == 0; ++idx )
+    {
+        const char *value = NULL;
+        rc = ArgsParamValue( my_args, idx, (const void **)&value );
+        if ( rc != 0 )
+        {
+            OUTMSG(( "ArgsParamValue() failed %R\n", rc ));
+        }
+        else
+        {
+            switch( idx )
+            {
+            case 0 : rc = context_set_src_path( ctx, value );
+                     if ( rc != 0 )
+                        OUTMSG(( "context_set_src_path() failed %R\n", rc ));
+                     break;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static bool context_get_bool_option( const Args *my_args,
+                                     const char *name,
+                                     const bool def )
+{
+    bool res = def;
+    uint32_t count = 0;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( rc == 0 && count > 0 )
+        res = true;
+    return res;
+}
+
+
+static const char* context_get_str_option( const Args *my_args,
+                                           const char *name )
+{
+    const char* res = NULL;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        rc = ArgsOptionValue( my_args, name, 0, (const void **)&res );
+    }
+    return res;
+}
+
+
+static uint32_t context_get_int_option( const Args *my_args,
+                                        const char *name,
+                                        const uint32_t def )
+{
+    uint32_t count, res = def;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        const char *s;
+        rc = ArgsOptionValue( my_args, name, 0,  (const void **)&s );
+        if ( rc == 0 ) res = atoi( s );
+    }
+    return res;
+}
+
+
+/*
+ * returns the number of schema's given on the commandline
+*/
+uint32_t context_schema_count( p_context ctx )
+{
+    uint32_t res = 0;
+    if ( ctx != NULL )
+        if ( ctx->src_schema_list != 0 )
+        {
+            uint32_t count;
+            if ( KNamelistCount( ctx->src_schema_list, &count ) == 0 )
+                res = count;
+        }
+    return res;
+}
+
+
+static void context_evaluate_options( const Args *my_args, p_context ctx )
+{
+    if ( my_args == NULL ) return;
+    if ( ctx == NULL ) return;
+
+    ctx->show_progress = context_get_bool_option( my_args, OPTION_SHOW_PROGRESS, false );
+    ctx->info = context_get_bool_option( my_args, OPTION_INFO, false );
+    ctx->ignore_mismatch = context_get_bool_option( my_args, OPTION_IGNORE_MISMATCH, false );
+    context_set_row_range( ctx, context_get_str_option( my_args, OPTION_ROWS ) );
+    nlt_make_namelist_from_string( &(ctx->src_schema_list), 
+                                   context_get_str_option( my_args, OPTION_SCHEMA ) );
+    context_set_out_file_path( ctx, context_get_str_option( my_args, OPTION_OUTFILE ) );
+    context_set_out_mode( ctx, context_get_str_option( my_args, OPTION_OUTMODE ) );
+    if ( ctx->output_mode == NULL )
+        context_set_out_mode( ctx, "file" );
+    ctx->gc_window = context_get_int_option( my_args, OPTION_GCWINDOW, 7 );
+    context_set_exclude_path( ctx, context_get_str_option( my_args, OPTION_EXCLUDE ) );
+}
+
+
+/*
+ * reads all arguments and options, fills the context
+ * with copies (if strings) of this data
+*/
+rc_t context_capture_arguments_and_options( const Args * args, p_context ctx )
+{
+    rc_t rc;
+
+    rc = context_evaluate_arguments( args, ctx );
+    if ( rc != 0 )
+    {
+        OUTMSG(( "context_evaluate_arguments() failed %R\n", rc ));
+    }
+    else
+    {
+        context_evaluate_options( args, ctx );
+        context_check_if_usage_necessary( ctx );
+
+        rc = ArgsHandleLogLevel( args );
+        if ( rc != 0 )
+            OUTMSG(( "ArgsHandleLogLevel() failed %R\n", rc ));
+    }
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/context.h b/tools/qual-recalib-stat/context.h
new file mode 100644
index 0000000..cfb7ad2
--- /dev/null
+++ b/tools/qual-recalib-stat/context.h
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_context_
+#define _h_context_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <kapp/args.h>
+#include <klib/namelist.h>
+#include <klib/out.h>
+#include <klib/num-gen.h>
+#include "namelist_tools.h"
+
+#define OPTION_ROWS              "rows"
+#define OPTION_SCHEMA            "schema"
+#define OPTION_SHOW_PROGRESS     "show_progress"
+#define OPTION_OUTFILE           "output_file"
+#define OPTION_OUTMODE           "mode"
+#define OPTION_GCWINDOW          "gcwindow"
+#define OPTION_EXCLUDE           "exclude"
+#define OPTION_INFO              "info"
+#define OPTION_IGNORE_MISMATCH   "ignore_mismatch"
+
+#define ALIAS_ROWS              "R"
+#define ALIAS_SCHEMA            "S"
+#define ALIAS_SHOW_PROGRESS     "p"
+#define ALIAS_OUTFILE           "o"
+#define ALIAS_OUTMODE           "m"
+#define ALIAS_GCWINDOW          "g"
+#define ALIAS_EXCLUDE           "x"
+#define ALIAS_INFO              "i"
+#define ALIAS_IGNORE_MISMATCH   "n"
+
+/* *******************************************************************
+the context contains all informations needed to execute the run
+******************************************************************* */
+typedef struct context
+{
+    /* read from commandline */
+    char *src_path;
+    char *output_file_path;
+    char *output_mode;
+    char *exclude_file_path;
+    const KNamelist *src_schema_list;
+    struct num_gen * row_generator;
+    bool usage_requested;
+    bool show_progress;
+    bool info;
+    bool ignore_mismatch;
+    uint32_t gc_window;
+} context;
+typedef context* p_context;
+
+
+/*
+ * generates a new context, initializes values
+*/
+rc_t context_init( context **ctx );
+
+
+/*
+ * destroys a context, frees all pointers the context owns
+*/
+rc_t context_destroy( p_context ctx );
+
+
+/*
+ * performs the range check to trim the internal number
+ * generator to the given range
+*/
+rc_t context_range_check( p_context ctx, 
+                          const int64_t first, const uint64_t count );
+
+
+rc_t context_set_range( p_context ctx, 
+                        const int64_t first, const uint64_t count );
+
+/*
+ * returns the number of schema's given on the commandline
+*/
+uint32_t context_schema_count( p_context ctx );
+
+
+/*
+ * reads all arguments and options, fills the context
+ * with copies (if strings) of this data
+*/
+rc_t context_capture_arguments_and_options( const Args * args, p_context ctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/fasta_dump.pl b/tools/qual-recalib-stat/fasta_dump.pl
new file mode 100755
index 0000000..25c9c0a
--- /dev/null
+++ b/tools/qual-recalib-stat/fasta_dump.pl
@@ -0,0 +1,81 @@
+#!/usr/bin/perl -w
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+use File::Path;
+
+my $nargs = scalar @ARGV;
+
+if ( $nargs < 2  )
+{
+    print( "\n-------------------------------------------------------------------------\n" );
+    print( "USAGE: fasta_dump.pl src bases\n" );
+    print( "src   ... absolute-path to a reference-table\n" );
+    print( "bases ... how many bases to dump\n" );
+    print( "-------------------------------------------------------------------------\n\n" );
+}
+else
+{
+    my $ref = $ARGV[ 0 ];
+    my $cnt = $ARGV[ 1 ];
+    my $len = 79;
+    my ( $n_rows, $cmd, $row, $s, $line );
+
+    #calculate how many rows have to be dumped...
+    {
+        use integer;
+        $n_rows = ( $cnt / 5000 ) + 1;
+    }
+
+    #dump the sequence-name
+    $cmd = "vdb-dump $ref -C SEQ_ID -f csv -R 1";
+    open ( DUMP, "-|", "$cmd" ) or die "$cmd failed";
+    while ( ( $row = <DUMP> ), defined( $row ) )
+    {
+        chomp( $row );
+        print( ">$row\n" );
+    }
+    close ( DUMP );
+
+    #dump the rows
+    $cmd = "vdb-dump $ref -C READ -f tab -R 1-$n_rows";
+    open ( DUMP, "-|", "$cmd" ) or die "$cmd failed";
+    while ( ( $row = <DUMP> ), defined( $row ) )
+    {
+        chomp( $row );
+        $s .= $row;
+        while( length( $s ) >= $len )
+        {
+            $line = substr( $s, 0, $len, "" );
+            print( "$line\n" );
+
+        }
+    }
+    close ( DUMP );
+
+    #dump the remainder of bases
+    if ( length( $s ) > 0 )
+    {
+        print( "$s\n" );
+    }
+}
\ No newline at end of file
diff --git a/tools/qual-recalib-stat/namelist_tools.c b/tools/qual-recalib-stat/namelist_tools.c
new file mode 100644
index 0000000..270449b
--- /dev/null
+++ b/tools/qual-recalib-stat/namelist_tools.c
@@ -0,0 +1,187 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "namelist_tools.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+
+int nlt_strcmp( const char* s1, const char* s2 )
+{
+    size_t n1 = string_size ( s1 );
+    size_t n2 = string_size ( s2 );
+    return string_cmp ( s1, n1, s2, n2, ( n1 < n2 ) ? n2 : n1 );
+}
+
+
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src )
+{
+    VNamelist *v_names;
+    rc_t rc = VNamelistMake ( &v_names, 5 );
+    if ( rc == 0 )
+    {
+        char * s = string_dup_measure ( src, NULL );
+        if ( s )
+        {
+            uint32_t str_begin = 0;
+            uint32_t str_end = 0;
+            char c;
+            do
+            {
+                c = s[ str_end ];
+                if ( c == ',' || c == 0 )
+                {
+                    if ( str_begin < str_end )
+                    {
+                        char c_temp = c;
+                        s[ str_end ] = 0;
+                        rc = VNamelistAppend ( v_names, &(s[str_begin]) );
+                        s[ str_end ] = c_temp;
+                    }
+                    str_begin = str_end + 1;
+                }
+                str_end++;
+            } while ( c != 0 && rc == 0 );
+            free( s );
+        }
+        rc = VNamelistToConstNamelist ( v_names, list );
+        VNamelistRelease( v_names );
+    }
+    return rc;
+}
+
+bool nlt_is_name_in_namelist( const KNamelist *list,
+                             const char *name_to_find )
+{
+    uint32_t count, idx;
+    bool res = false;
+    if ( list == NULL || name_to_find == NULL )
+        return res;
+    if ( KNamelistCount( list, &count ) == 0 )
+    {
+        for ( idx = 0; idx < count && res == false; ++idx )
+        {
+            const char *item_name;
+            if ( KNamelistGet( list, idx, &item_name ) == 0 )
+            {
+                if ( nlt_strcmp( item_name, name_to_find ) == 0 )
+                    res = true;
+            }
+        }
+    }
+    return res;
+}
+
+/*
+    - list1 and list2 containts strings
+    - if one of the strings in list2 is contained ( partial match, strstr() )
+      in one of the strings in list1 the function returns true...
+*/
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 )
+{
+    uint32_t count1;
+    bool res = false;
+    if ( list1 == NULL || list2 == NULL )
+        return res;
+    if ( KNamelistCount( list1, &count1 ) == 0 )
+    {
+        uint32_t idx1;
+        for ( idx1 = 0; idx1 < count1 && res == false; ++idx1 )
+        {
+            const char *string1;
+            if ( KNamelistGet( list1, idx1, &string1 ) == 0 )
+            {
+                uint32_t count2;
+                if ( KNamelistCount( list2, &count2 ) == 0 )
+                {
+                    uint32_t idx2;
+                    for ( idx2 = 0; idx2 < count2 && res == false; ++idx2 )
+                    {
+                        const char *string2;
+                        if ( KNamelistGet( list2, idx2, &string2 ) == 0 )
+                        {
+                            if ( strstr( string1, string2 ) != NULL )
+                                res = true;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove )
+{
+    rc_t rc = 0;
+    uint32_t count;
+    
+    if ( source == NULL || dest == NULL || to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    *dest = NULL;
+    rc = KNamelistCount( source, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        VNamelist *cleaned;
+        rc = VNamelistMake ( &cleaned, count );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                rc = KNamelistGet( source, idx, &s );
+                if ( rc == 0 )
+                {
+                    if ( !nlt_is_name_in_namelist( to_remove, s ) )
+                        rc = VNamelistAppend ( cleaned, s );
+                }
+                rc = VNamelistToConstNamelist ( cleaned, dest );
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove )
+{
+    rc_t rc = 0;
+    const KNamelist *to_remove;
+    
+    if ( source == NULL || dest == NULL || items_to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    rc = nlt_make_namelist_from_string( &to_remove, items_to_remove );
+    if ( rc == 0 )
+    {
+        rc = nlt_remove_names_from_namelist( source, dest, to_remove );
+        KNamelistRelease( to_remove );
+    }
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/namelist_tools.h b/tools/qual-recalib-stat/namelist_tools.h
new file mode 100644
index 0000000..7392a3c
--- /dev/null
+++ b/tools/qual-recalib-stat/namelist_tools.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_namelist_tools_
+#define _h_namelist_tools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/namelist.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+int nlt_strcmp( const char* s1, const char* s2 );
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src );
+bool nlt_is_name_in_namelist( const KNamelist *list, const char *name_to_find );
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 );
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove );
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/qual-recalib-stat.c b/tools/qual-recalib-stat/qual-recalib-stat.c
new file mode 100644
index 0000000..c72fbae
--- /dev/null
+++ b/tools/qual-recalib-stat/qual-recalib-stat.c
@@ -0,0 +1,418 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/main.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/num-gen.h>
+#include <klib/progressbar.h>
+
+#include "context.h"
+#include "stat_mod_2.h"
+#include "reader.h"
+#include "writer.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char UsageDefaultName[] = "qual-recalib-stat";
+
+static const char * rows_usage[] = { "set of rows to be analyzed (default = all)", NULL };
+static const char * schema_usage[] = { "schema-names", NULL };
+static const char * show_progress_usage[] = { "show progress in percent while analyzing", NULL };
+static const char * outfile_usage[] = { "file to write output into", NULL };
+static const char * outmode_usage[] = { "where to write [file,db,tab] (dflt = file)", NULL };
+static const char * gcwindow_usage[] = { "how many bases are counted (dflt = 7)", NULL };
+static const char * exclude_usage[] = { "path to db with ref-positions to be excluded", NULL };
+static const char * info_usage[] = { "display info's after the process", NULL };
+static const char * ignore_mismatch_usage[] = { "ignore mismatches", NULL };
+
+OptDef MyOptions[] =
+{
+    { OPTION_ROWS, ALIAS_ROWS, NULL, rows_usage, 1, true, false },
+    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 5, true, false },
+    { OPTION_SHOW_PROGRESS, ALIAS_SHOW_PROGRESS, NULL, show_progress_usage, 1, false, false },
+    { OPTION_OUTFILE, ALIAS_OUTFILE, NULL, outfile_usage, 1, true, false },
+    { OPTION_OUTMODE, ALIAS_OUTMODE, NULL, outmode_usage, 1, true, false },
+    { OPTION_GCWINDOW, ALIAS_GCWINDOW, NULL, gcwindow_usage, 1, true, false },
+    { OPTION_EXCLUDE, ALIAS_EXCLUDE, NULL, exclude_usage, 1, true, false },
+    { OPTION_INFO, ALIAS_INFO, NULL, info_usage, 1, false, false },
+    { OPTION_IGNORE_MISMATCH, ALIAS_IGNORE_MISMATCH, NULL, ignore_mismatch_usage, 1, false, false }
+};
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ( "\n"
+                     "Usage:\n"
+                     "  %s <path> [options]\n"
+                     "\n", progname );
+}
+
+
+rc_t CC Usage( const Args * args  )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullpath, &progname );
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary( progname );
+    KOutMsg ("Options:\n");
+    HelpOptionLine ( ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage );
+    HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
+    HelpOptionLine ( ALIAS_SHOW_PROGRESS, OPTION_SHOW_PROGRESS, NULL, show_progress_usage );
+    HelpOptionLine ( ALIAS_OUTFILE, OPTION_OUTFILE, NULL, outfile_usage );
+    HelpOptionLine ( ALIAS_OUTMODE, OPTION_OUTMODE, NULL, outmode_usage );
+    HelpOptionLine ( ALIAS_GCWINDOW, OPTION_GCWINDOW, NULL, gcwindow_usage );
+    HelpOptionLine ( ALIAS_EXCLUDE, OPTION_EXCLUDE, NULL, exclude_usage );
+    HelpOptionLine ( ALIAS_INFO, OPTION_INFO, NULL, info_usage );
+    HelpOptionLine ( ALIAS_IGNORE_MISMATCH, OPTION_IGNORE_MISMATCH, NULL, ignore_mismatch_usage );
+    HelpOptionsStandard();
+    HelpVersion( fullpath, KAppVersion() );
+    return rc;
+}
+
+static uint8_t calc_fract_digits( const struct num_gen_iter *iter )
+{
+    uint8_t res = 0;
+    uint64_t count;
+    if ( num_gen_iterator_count( iter, &count ) == 0 )
+    {
+		if ( count > 10000 )
+		{
+			if ( count > 100000 )
+				res = 2;
+			else
+				res = 1;
+		}
+    }
+    return res;
+}
+
+
+static rc_t read_loop( statistic * data,
+                       context *ctx,
+                       statistic_reader *reader,
+                       const VCursor *my_cursor )
+{
+    int64_t first;
+    uint64_t count;
+    rc_t rc = query_reader_rowrange( reader, &first, &count );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "query_statistic_rowrange() failed\n" );
+    else
+    {
+        if ( num_gen_empty( ctx->row_generator ) )
+        {
+            rc = num_gen_add( ctx->row_generator, first, count );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "num_gen_add() failed() failed\n" );
+        }
+        else
+        {
+            rc = num_gen_trim( ctx->row_generator, first, count );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "num_gen_trim() failed() failed\n" );
+        }
+
+        if ( rc == 0 )
+        {
+            const struct num_gen_iter *iter;
+            rc = num_gen_iterator_make( ctx->row_generator, &iter );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "num_gen_iterator_make() failed\n" );
+            else
+            {
+                int64_t row_id;
+				uint8_t fract_digits = calc_fract_digits( iter );
+                struct progressbar * progress;
+
+				
+                rc = make_progressbar( &progress, fract_digits );
+                if ( rc != 0 )
+                    LogErr( klogInt, rc, "make_progressbar() failed\n" );
+                else
+                {
+                    uint32_t percent;
+                    row_input row_data;
+
+                    while ( num_gen_iterator_next( iter, &row_id, &rc ) && rc == 0 )
+                    {
+                        rc = Quitting();
+                        if ( rc == 0 )
+                        {
+                            /* ******************************************** */
+                            rc = reader_get_data( reader, &row_data, row_id );
+                            if ( rc == 0 )
+                            {
+                                rc = extract_statistic_from_row( data, &row_data, row_id );
+                            }
+                            /* ******************************************** */
+                            if ( ctx->show_progress &&
+                                 num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 )
+							{
+                                    update_progressbar( progress, percent );
+							}
+                        }
+                    }
+                    destroy_progressbar( progress );
+                    if ( ctx->show_progress )
+                        OUTMSG(( "\n" ));
+                }
+                num_gen_iterator_destroy( iter );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t read_statistic_from_table( statistic * data,
+                                       KDirectory *dir,
+                                       context *ctx,
+                                       const VDatabase *my_database,
+                                       const char *table_name )
+{
+    const VTable *my_table;
+    rc_t rc = VDatabaseOpenTableRead( my_database, &my_table, "%s", table_name );
+    if ( rc != 0 )
+    {
+        LogErr( klogInt, rc, "VDatabaseOpenTableRead() failed\n" );
+    }
+    else
+    {
+        const VCursor *my_cursor;
+        rc = VTableCreateCursorRead( my_table, &my_cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VTableCreateCursorRead() failed\n" );
+        else
+        {
+/*
+            spot_pos sequence;
+
+            rc = make_spot_pos( &sequence, my_database );
+            if ( rc == 0 )
+            {
+*/
+                statistic_reader reader;
+
+/*
+                rc = make_statistic_reader( &reader, &sequence, dir, my_cursor,
+                            ctx->exclude_file_path, ctx->info );
+*/
+                rc = make_statistic_reader( &reader, NULL, dir, my_cursor,
+                            ctx->exclude_file_path, ctx->info );
+
+                if ( rc == 0 )
+                {
+                    /* ******************************************************* */
+                    rc = read_loop( data, ctx, &reader, my_cursor );
+                    /* ******************************************************* */
+                    whack_reader( &reader );
+                }
+/*
+                whack_spot_pos( &sequence );
+            }
+*/
+            VCursorRelease( my_cursor );
+        }
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+static rc_t gather_statistic( statistic * data,
+                              KDirectory *dir,
+                              context *ctx )
+{
+    VDBManager *my_manager;
+    /* because this tool is linked against the write-version
+       of vdb and kdb, there is no Read-Manager available... */
+    rc_t rc = VDBManagerMakeUpdate ( &my_manager, dir );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VDBManagerMakeUpdate() failed\n" );
+    else
+    {
+        const VDatabase *my_database;
+        rc = VDBManagerOpenDBRead( my_manager, &my_database, NULL, "%s", ctx->src_path );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VDBManagerOpenDBRead() failed\n" );
+        else
+        {
+            /* ******************************************************* */
+            rc = read_statistic_from_table( data, dir, ctx, my_database,
+                                            "PRIMARY_ALIGNMENT" );
+            /* ******************************************************* */
+            VDatabaseRelease( my_database );
+        }
+        VDBManagerRelease( my_manager );
+    }
+    return rc;
+}
+
+
+static rc_t gater_and_write( context *ctx )
+{
+    KDirectory *dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "KDirectoryNativeDir() failed\n" );
+    else
+    {
+        statistic data;
+        rc = make_statistic( &data, ctx->gc_window, ctx->ignore_mismatch );
+        if ( rc == 0 )
+        {
+            rc = gather_statistic( &data, dir, ctx ); /* <--- the meat */
+            if ( rc == 0 )
+            {
+                uint64_t written;
+
+                if ( ctx->show_progress )
+                {
+                    OUTMSG(( "%lu statistic-entries gathered\n", data.entries ));
+                    OUTMSG(( "max. cycles per read = %u\n", data.max_cycle ));
+                }
+
+                switch( ctx->output_mode[ 0 ] )
+                {
+                case 'f' :  if ( ctx->output_file_path != NULL )
+                            {
+                                rc = write_output_file( dir, &data,
+                                        ctx->output_file_path, &written );
+                                if ( rc == 0 && ctx->info )
+                                {
+                                    OUTMSG(( "%lu lines written to '%s'\n", 
+                                            written, ctx->output_file_path ));
+                                }
+                            }
+                            else
+                                OUTMSG(( "the output-path is missing!\n" ));
+                            break;
+
+                case 'd' :  rc = write_statistic_into_db( dir, &data,
+                                    ctx->src_schema_list, ctx->src_path, &written,
+                                    ctx->show_progress );
+                            if ( rc == 0 && ctx->info )
+                            {
+                                OUTMSG(( "%lu rows written to database\n", written ));
+                            }
+                            break;
+
+                case 't' :  if ( ctx->output_file_path != NULL )
+                            {
+                                rc = write_statistic_into_tab( dir, &data, 
+                                        ctx->src_schema_list, ctx->output_file_path, &written,
+                                        ctx->show_progress );
+                                if ( rc == 0 && ctx->info )
+                                {
+                                    OUTMSG(( "%lu rows written to table\n", written ));
+                                }
+                            }
+                            else
+                            {
+                                OUTMSG(( "the output-path is missing!\n" ));
+                            }
+                            break;
+                }
+            }
+            whack_statistic( &data );
+        }
+        KDirectoryRelease( dir );
+    }
+    return rc;
+}
+
+
+rc_t CC KMain( int argc, char * argv[] )
+{
+    Args * args;
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+                             MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "ArgsMakeAndHandle() failed\n" );
+    else
+    {
+        context *ctx;
+        KLogHandlerSetStdErr();
+        rc = context_init( &ctx );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "context_init() failed\n" );
+        else
+        {
+            rc = context_capture_arguments_and_options( args, ctx );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "context_capture_arguments_and_options() failed\n" );
+            else
+            {
+                if ( ctx->usage_requested ) {
+                    MiniUsage( args );
+                    rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcInsufficient);
+                }
+                else
+                {
+                    switch( ctx->output_mode[ 0 ] )
+                    {
+                        case 'd' :
+                        case 't' : if ( context_schema_count( ctx ) == 0 )
+                                    {
+                                        OUTMSG(( "cannot write, schema-file is missing:\n" ));
+                                        Usage( args  );
+                                        rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+                                    }
+                    }
+                    if ( rc == 0 )
+                    {
+                        /* ************************* */
+                        rc = gater_and_write( ctx );
+                        /* ************************* */
+                    }
+                }
+            }
+            context_destroy ( ctx );
+        }
+        ArgsWhack ( args );
+    }
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/reader.c b/tools/qual-recalib-stat/reader.c
new file mode 100644
index 0000000..fe32a69
--- /dev/null
+++ b/tools/qual-recalib-stat/reader.c
@@ -0,0 +1,241 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "reader.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static const char * ridx_names[ N_RIDX ] =
+{
+    "RAW_READ",
+    "QUALITY",
+    "(bool)HAS_MISMATCH",
+    "SEQ_SPOT_ID",
+    "SPOT_GROUP",
+    "SEQ_SPOT_GROUP",
+    "REF_ORIENTATION",
+    "READ_LEN",
+    "SEQ_READ_ID",
+    "(bool)HAS_REF_OFFSET",
+    "REF_OFFSET",
+    "REF_POS",
+    "REF_SEQ_ID",
+    "REF_LEN"
+};
+
+static rc_t make_vector( void ** ptr, uint32_t *len, uint32_t new_len )
+{
+    rc_t rc = 0;
+
+    *len = new_len;
+    *ptr = calloc( 1, new_len );
+    if ( *ptr == NULL )
+    {
+        *len = 0;
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        LogErr( klogInt, rc, "failed to make large enough exclude-vector\n" );
+    }
+    return rc;
+}
+
+
+static rc_t expand_and_clear_vector( void **v, uint32_t *len, uint32_t new_len, bool clear )
+{
+    rc_t rc = 0;
+    if ( *v != NULL )
+    {
+        if ( *len < new_len )
+        {
+            *len += new_len;
+            *v = realloc( *v, *len );
+            if ( *v == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                LogErr( klogInt, rc, "failed to expand (uint8_t)vector\n" );
+            }
+        }
+        if ( rc == 0 && clear )
+            memset( *v, 0, *len ); 
+    }
+    return rc;
+}
+
+
+rc_t make_statistic_reader( statistic_reader *self,
+                            spot_pos *sequence,
+                            KDirectory *dir,
+                            const VCursor * cursor,
+                            const char * exclude_db,
+                            bool info )
+{
+    rc_t rc;
+
+    memset( &self->rd_col, 0, sizeof self->rd_col );
+    self->cursor = cursor;
+    self->ref_exclude_used = false;
+    self->exclude_vector = NULL;
+    self->exclude_vector_len = 0;
+    self->active_exclusions = 0;
+    self->sequence = sequence;
+
+    rc = add_columns( cursor, self->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed in reader\n" );
+    }
+    if ( rc == 0 )
+    if ( exclude_db != NULL )
+    {
+        make_ref_exclude( &self->exclude, dir, exclude_db, info );
+        rc = make_vector( (void**)&self->exclude_vector, &self->exclude_vector_len, 512 );
+        self->ref_exclude_used = true;
+    }
+
+    return rc;
+}
+
+
+void whack_reader( statistic_reader *self )
+{
+    if ( self->ref_exclude_used )
+    {
+        whack_ref_exclude( &self->exclude );
+        if ( self->exclude_vector != NULL )
+        {
+            free( self->exclude_vector );
+        }
+    }
+}
+
+
+void reader_set_spot_pos( statistic_reader *self, spot_pos * sequence )
+{
+    self->sequence = sequence;
+}
+
+rc_t query_reader_rowrange( statistic_reader *self, int64_t *first, uint64_t * count )
+{
+    rc_t rc = VCursorIdRange ( self->cursor, self->rd_col[ RIDX_READ ].idx,
+                               first, count );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorIdRange() failed in reader\n" );
+    return rc;
+}
+
+
+rc_t reader_get_data( statistic_reader *self, row_input * row_data,
+                      uint64_t row_id )
+{
+    rc_t rc = read_cells( self->cursor, row_id, self->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        bool * reverse;
+
+        row_data->spotgroup = (char *)self->rd_col[ RIDX_SPOT_GROUP ].base;
+        row_data->spotgroup_len = self->rd_col[ RIDX_SPOT_GROUP ].row_len;
+
+        row_data->seq_spotgroup = (char *)self->rd_col[ RIDX_SEQ_SPOT_GROUP ].base;
+        row_data->seq_spotgroup_len = self->rd_col[ RIDX_SEQ_SPOT_GROUP ].row_len;
+
+        row_data->read = (char *)self->rd_col[ RIDX_READ ].base;
+        row_data->read_len = self->rd_col[ RIDX_READ ].row_len;
+
+        row_data->quality = (uint8_t *)self->rd_col[ RIDX_QUALITY ].base;
+        row_data->quality_len = self->rd_col[ RIDX_QUALITY ].row_len;
+
+        row_data->has_mismatch = (bool *)self->rd_col[ RIDX_HAS_MISMATCH ].base;
+        row_data->has_mismatch_len = self->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+
+        row_data->has_roffs = (bool *)self->rd_col[ RIDX_HAS_REF_OFFSET ].base;
+        row_data->has_roffs_len = self->rd_col[ RIDX_HAS_REF_OFFSET ].row_len;
+
+        row_data->roffs = (int32_t *)self->rd_col[ RIDX_REF_OFFSET ].base;
+        row_data->roffs_len = self->rd_col[ RIDX_REF_OFFSET ].row_len;
+
+        reverse = (bool *)self->rd_col[ RIDX_REF_ORIENTATION ].base;
+        row_data->reversed = *reverse;
+
+        row_data->seq_read_id = *( ( uint32_t * )self->rd_col[ RIDX_SEQ_READ_ID ].base );
+        row_data->spot_id = *( ( uint32_t * )self->rd_col[ RIDX_SEQ_SPOT_ID ].base );
+        row_data->base_pos_offset = 0;
+        row_data->ref_len = *( ( uint32_t *)self->rd_col[ RIDX_REF_LEN ].base );
+#ifdef LOOKUP_ALL_SEQ_READ_ID
+        if ( row_data->seq_read_id > 0 )
+#else
+        if ( row_data->seq_read_id > 1 )
+#endif
+        {
+            if ( self->sequence != NULL )
+            {
+                query_spot_pos( self->sequence, row_data->seq_read_id,
+                            row_data->spot_id, &(row_data->base_pos_offset) );
+            }
+        }
+
+        if ( self->ref_exclude_used )
+        {
+            String s_ref_name;
+
+            const char * ref_name_base = ( const char * )self->rd_col[ RIDX_REF_SEQ_ID ].base;
+            uint32_t ref_name_len = self->rd_col[ RIDX_REF_SEQ_ID ].row_len;
+            int32_t ref_offset = *( ( int32_t *)self->rd_col[ RIDX_REF_POS ].base );
+            uint32_t ref_len = *( ( uint32_t *)self->rd_col[ RIDX_REF_LEN ].base );
+
+            StringInit( &s_ref_name, ref_name_base, ref_name_len, ref_name_len );
+
+            /* make the ref-exclude-vector longer if necessary */
+            rc = expand_and_clear_vector( (void**)&self->exclude_vector,
+                                          &self->exclude_vector_len,
+                                          ref_len,
+                                          true );
+            if ( rc == 0 )
+            {
+                rc = get_ref_exclude( &self->exclude,
+                                      &s_ref_name,
+                                      ref_offset,
+                                      ref_len,
+                                      self->exclude_vector,
+                                      &self->active_exclusions );
+                if ( rc == 0 )
+                {
+                    row_data->exclude = self->exclude_vector;
+                    row_data->exclude_len = ref_len;
+                }
+            }
+        }
+        else
+        {
+            row_data->exclude = NULL;
+            row_data->exclude_len = 0;
+        }
+    }
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/reader.h b/tools/qual-recalib-stat/reader.h
new file mode 100644
index 0000000..7dea1c7
--- /dev/null
+++ b/tools/qual-recalib-stat/reader.h
@@ -0,0 +1,88 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_stat_reader_
+#define _h_stat_reader_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <vdb/cursor.h>
+#include "columns.h"
+#include "ref_exclude.h"
+#include "stat_mod_2.h"
+#include "spot_position.h"
+
+#define RIDX_READ            0
+#define RIDX_QUALITY         1
+#define RIDX_HAS_MISMATCH    2
+#define RIDX_SEQ_SPOT_ID     3
+#define RIDX_SPOT_GROUP      4
+#define RIDX_SEQ_SPOT_GROUP  5
+#define RIDX_REF_ORIENTATION 6
+#define RIDX_READ_LEN        7
+#define RIDX_SEQ_READ_ID     8
+#define RIDX_HAS_REF_OFFSET  9
+#define RIDX_REF_OFFSET     10
+#define RIDX_REF_POS        11
+#define RIDX_REF_SEQ_ID     12
+#define RIDX_REF_LEN        13
+#define N_RIDX              14
+
+typedef struct statistic_reader
+{
+    ref_exclude exclude;
+    uint8_t *exclude_vector;
+    uint32_t exclude_vector_len;
+    uint32_t active_exclusions;
+    bool ref_exclude_used;
+    const VCursor *cursor;
+    col rd_col[ N_RIDX ];
+    spot_pos * sequence;
+} statistic_reader;
+
+rc_t make_statistic_reader( statistic_reader *self,
+                            spot_pos *sequence,
+                            KDirectory *dir,
+                            const VCursor * cursor,
+                            const char * exclude_db,
+                            bool info );
+
+void whack_reader( statistic_reader *self );
+
+void reader_set_spot_pos( statistic_reader *self, spot_pos * sequence );
+
+rc_t query_reader_rowrange( statistic_reader *self, int64_t *first, uint64_t * count );
+
+rc_t reader_get_data( statistic_reader *self, row_input * row_data, uint64_t row_id );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/ref_exclude.c b/tools/qual-recalib-stat/ref_exclude.c
new file mode 100644
index 0000000..a154585
--- /dev/null
+++ b/tools/qual-recalib-stat/ref_exclude.c
@@ -0,0 +1,561 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ref_exclude.h"
+#include "columns.h"
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAXLEN_COLUMN   "MAX_SEQ_LEN"
+#define HITS_COLUMN     "HITS"
+#define HITMAP_TAB      "HITMAP"
+
+
+typedef struct trans_node
+{
+    BSTNode node;
+    String chromosome;
+    String translation;
+} trans_node;
+
+
+static trans_node * make_trans_node( const char * chromosome, const char * translation )
+{
+    trans_node * res = calloc( 1, sizeof * res );
+    if ( res != NULL )
+    {
+        StringInitCString( &(res->chromosome), chromosome );
+        StringInitCString( &(res->translation), translation );
+    }
+    return res;
+}
+
+
+static void CC whack_trans_node( BSTNode *n, void *data )
+{
+    free( n );
+}
+
+
+static int64_t CC trans_node_find( const void *item, const BSTNode *n )
+{
+    trans_node * node = ( trans_node * ) n;
+    return StringCompare ( ( String * ) item, &node->chromosome );
+}
+
+
+#define N_TRANS_NODES 24
+
+static const char * chromosomes[ N_TRANS_NODES ] =
+{
+    "CM000663.1",
+    "CM000664.1",
+    "CM000665.1",
+    "CM000666.1",
+    "CM000667.1",
+    "CM000668.1",
+    "CM000669.1",
+    "CM000670.1",
+    "CM000671.1",
+    "CM000672.1",
+    "CM000673.1",
+    "CM000675.1",
+    "CM000674.1",
+    "CM000676.1",
+    "CM000677.1",
+    "CM000678.1",
+    "CM000679.1",
+    "CM000680.1",
+    "CM000681.1",
+    "CM000682.1",
+    "CM000683.1",
+    "CM000684.1",
+    "CM000685.1",
+    "CM000686.1"
+};
+
+
+static const char * translations[ N_TRANS_NODES ] =
+{
+    "NC_000001.10",
+    "NC_000002.11",
+    "NC_000003.11",
+    "NC_000004.11",
+    "NC_000005.9",
+    "NC_000006.11",
+    "NC_000007.13",
+    "NC_000008.10",
+    "NC_000009.11",
+    "NC_000010.10",
+    "NC_000011.9",
+    "NC_000013.10",
+    "NC_000012.11",
+    "NC_000014.8",
+    "NC_000015.9",
+    "NC_000016.9",
+    "NC_000017.10",
+    "NC_000018.9",
+    "NC_000019.9",
+    "NC_000020.10",
+    "NC_000021.8",
+    "NC_000022.10",
+    "NC_000023.10",
+    "NC_000024.9"
+};
+
+
+static int64_t CC trans_node_sort( const BSTNode *item, const BSTNode *n )
+{
+    trans_node * rn1 = ( trans_node* ) item;
+    trans_node * rn2 = ( trans_node* ) n;
+    return StringCompare ( &rn1->chromosome, &rn2->chromosome );
+}
+
+
+static rc_t insert_trans_nodes( BSTree *tree )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+    for ( idx = 0; idx < N_TRANS_NODES && rc == 0; ++idx )
+    {
+        trans_node * node = make_trans_node( chromosomes[ idx ], translations[ idx ] );
+        if ( node != NULL )
+        {
+            rc = BSTreeInsert ( tree, (BSTNode *)node, trans_node_sort );
+        }
+    }
+    return rc;
+}
+
+/******************************************************************************/
+
+typedef struct ref_node
+{
+    BSTNode node;
+    const String *name;
+    bool valid;
+    const VDatabase *db;
+    const VTable *tab;
+    const VCursor *cur;
+    uint32_t hits_idx;
+    uint32_t read_len;
+    uint64_t bytes_requested;
+    uint64_t active_positions;
+} ref_node;
+
+
+static rc_t detect_read_len( ref_node *node )
+{
+    const VCursor *temp_cursor;
+    rc_t rc = VTableCreateCursorRead ( node->tab, &temp_cursor );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc, 
+             "error to create cursor on table $(tab_name)",
+             "tab_name=%S", node->name ) );
+    }
+    else
+    {
+        uint32_t idx;
+        rc = VCursorAddColumn ( temp_cursor, &idx, MAXLEN_COLUMN );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "error to add column $(col_name) to cursor for table $(db_name).$(tab_name)",
+                 "col_name=%s,db_name=%S,tab_name=%s",
+                 MAXLEN_COLUMN, node->name, HITMAP_TAB ) );
+        }
+        else
+        {
+            rc = VCursorOpen( temp_cursor );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "error to open cursor for table $(db_name).$(tab_name to read $(col_name)",
+                     "col_name=%s,db_name=%S,tab_name=%s",
+                     MAXLEN_COLUMN, node->name, HITMAP_TAB ) );
+            }
+            else
+            {
+                uint32_t elem_bits, boff, row_len;
+                const void *base;
+                rc = VCursorCellDataDirect ( temp_cursor, 1, idx,
+                                             &elem_bits, &base, &boff, &row_len );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogInt, ( klogInt, rc, 
+                         "error to read $(col_name) from 1st row in table $(db_name).$(tab_name)",
+                         "col_name=%s,db_name=%S,tab_name=%s",
+                         MAXLEN_COLUMN, node->name, HITMAP_TAB ) );
+                }
+                else
+                {
+                    node->read_len = *((uint32_t *)base);
+                    if ( node->read_len == 0 )
+                    {
+                        rc = RC( rcApp, rcNoTarg, rcReading, rcParam, rcInvalid );
+                        PLOGERR( klogInt, ( klogInt, rc, 
+                             "$(col_name) == 0 discoverd in table $(db_name).$(tab_name)",
+                             "col_name=%s,db_name=%S,tab_name=%s",
+                             MAXLEN_COLUMN, node->name, HITMAP_TAB ) );
+                    }
+                }
+            }
+        }
+        VCursorRelease( temp_cursor );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_ref_node( ref_node * node )
+{
+    rc_t rc = VTableCreateCursorRead ( node->tab, &node->cur );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc, 
+             "error to create cursor on table $(db_name).$(tab_name)",
+             "db_name=%S,tab_name=%s",
+             node->name, HITMAP_TAB ) );
+    }
+    else
+    {
+        rc = VCursorAddColumn ( node->cur, &node->hits_idx, HITS_COLUMN );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "error to add column $(col_name) to cursor for table $(db_name).$(tab_name)",
+                 "col_name=%s,db_name=%S,tab_name=%s",
+                 HITS_COLUMN, node->name, HITMAP_TAB ) );
+        }
+        else
+        {
+            rc = VCursorOpen( node->cur );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "error to open cursor for table $(tab_name)",
+                     "tab_name=%S", node->name ) );
+            }
+            else
+            {
+                node->valid = true;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static ref_node * make_ref_node( ref_exclude *exclude, const String * s )
+{
+    ref_node * res = calloc( 1, sizeof * res );
+    if ( res != NULL )
+    {
+        if ( StringCopy ( &res->name, s ) != 0 )
+        {
+            free( res );
+            res = NULL;
+        }
+    }
+    if ( res != NULL && exclude->path != NULL )
+    {
+        char buf[ 1024 ];
+        size_t num_writ;
+        rc_t rc = string_printf ( buf, sizeof buf, &num_writ, 
+                                  "%s/%S", exclude->path, s );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "error to assemble path to exclude-table $(tab_name)",
+                 "tab_name=%S", s ) );
+        }
+        else
+        {
+            rc = VDBManagerOpenDBRead ( exclude->mgr, &res->db, NULL, "%s", buf );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "error to open exclude-table $(db_name)",
+                     "db_name=%s", buf ) );
+                /*
+                it can be OK if the database/table cannot be found!
+                */
+                rc = 0;
+            }
+            else
+            {
+                rc = VDatabaseOpenTableRead ( res->db, &res->tab, "HITMAP" );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogInt, ( klogInt, rc, 
+                         "error to open exclude-table 'HITMAP' in $(db_name)",
+                         "db_name=%s", buf ) );
+                    /*
+                    it can be OK if the database/table cannot be found!
+                    */
+                    rc = 0;
+                }
+                else
+                {
+                    rc = detect_read_len( res );
+                    if ( rc == 0 )
+                    {
+                        rc = prepare_ref_node( res );
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+static rc_t read_from_ref_node( ref_node * node, 
+                                int32_t ref_offset, uint32_t ref_len,
+                                uint8_t *exclude_vector,
+                                uint32_t *active )
+{
+    rc_t rc = 0;
+    uint64_t row_id = ( ref_offset / node->read_len ) + 1;
+    uint8_t *dst = exclude_vector;
+    uint32_t remaining = ref_len;
+    uint32_t src_ofs = ref_offset % node->read_len;
+
+    while ( remaining > 0 && rc == 0 )
+    {
+        uint32_t elem_bits, boff, rlen;
+        const uint8_t *src;
+        rc = VCursorCellDataDirect ( node->cur, row_id, node->hits_idx,
+                                     &elem_bits, (const void**)&src, &boff, &rlen );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "error to read $(col_name) from 1st row in table $(db_name).$(tab_name)",
+                 "col_name=%s,db_name=%S,tab_name=%s",
+                 HITS_COLUMN, node->name, HITMAP_TAB ) );
+        }
+        else
+        {
+            if ( src_ofs >= rlen )
+            {
+                rc = RC( rcApp, rcNoTarg, rcReading, rcParam, rcInvalid );
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "error: try to read more data than are in var-loc $(tab_name)",
+                     "tab_name=%S", node->name ) );
+            }
+            else
+            {
+                uint32_t to_copy = ( rlen - src_ofs );
+                if ( to_copy > remaining )
+                {
+                    to_copy = remaining;
+                }
+                src += src_ofs;
+
+                memmove( dst, src, to_copy );
+                dst += to_copy;
+                remaining -= to_copy;
+                src_ofs = 0;
+                row_id ++;
+
+                node->bytes_requested += to_copy;
+            }
+        }
+    }
+    *active = 0;
+    if ( rc == 0 )
+    {
+        for ( src_ofs = 0; src_ofs < ref_len; ++src_ofs )
+        {
+            if ( exclude_vector[ src_ofs ] > 0 )
+            {
+                ( *active )++;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+static void CC whack_ref_node( BSTNode *n, void *data )
+{
+    ref_node * node = ( ref_node * )n;
+    bool * info = ( bool * )data;
+
+    if ( *info )
+    {
+        OUTMSG(( "node >%S< used for %lu bytes (%lu active)\n",
+                  node->name, node->bytes_requested, node->active_positions ));
+    }
+
+    if ( node->cur != NULL )
+    {
+        VCursorRelease( node->cur );
+    }
+    if ( node->tab != NULL )
+    {
+        VTableRelease( node->tab );
+    }
+    if ( node->name != NULL )
+    {
+        StringWhack ( node->name );
+    }
+    free( n );
+}
+
+
+static int64_t CC ref_node_find( const void *item, const BSTNode *n )
+{
+    ref_node * node = ( ref_node * ) n;
+    return StringCompare ( ( String * ) item, node->name );
+}
+
+
+static ref_node * find_ref_node( ref_exclude *exclude, const String * s )
+{
+    BSTNode *node;
+
+    if ( exclude->last_used_ref_node != NULL )
+    {
+        ref_node * node = ( ref_node * )exclude->last_used_ref_node;
+        if ( StringCompare ( s, node->name ) == 0 )
+            return node;
+    }
+
+    node = BSTreeFind ( &exclude->ref_nodes, s, ref_node_find );
+    if ( node == NULL )
+        return NULL;
+    else
+    {
+        exclude->last_used_ref_node = node;
+        return ( ref_node * ) node;
+    }
+}
+
+
+rc_t make_ref_exclude( ref_exclude *exclude, KDirectory *dir,
+                       const char * path, bool info )
+{
+    rc_t rc;
+
+    BSTreeInit( &exclude->ref_nodes );
+    BSTreeInit( &exclude->translations );
+
+    exclude->last_used_ref_node = NULL;
+    exclude->info = info;
+    rc = VDBManagerMakeUpdate ( &exclude->mgr, dir );
+    if ( rc != 0 )
+    {
+        LogErr( klogInt, rc, "VDBManagerMakeUpdate() in make_ref_exclude() failed\n" );
+    }
+    else
+    {
+        insert_trans_nodes( &exclude->translations );
+        exclude->path = string_dup_measure ( path, NULL );
+    }
+    return rc;
+}
+
+
+static int64_t CC ref_node_sort( const BSTNode *item, const BSTNode *n )
+{
+    ref_node * rn1 = ( ref_node* ) item;
+    ref_node * rn2 = ( ref_node* ) n;
+    return StringCompare ( rn1->name, rn2->name );
+}
+
+
+static rc_t find_or_make_by_name( ref_exclude *exclude,
+                          const String * name,
+                          ref_node ** node )
+{
+    rc_t rc = 0;
+    *node = find_ref_node( exclude, name );
+    if ( *node == NULL )
+    {
+        /* if not found: make such a node... */
+        *node = make_ref_node( exclude, name );
+        if ( *node == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+        }
+        else
+        {
+            /* if node was successfully made, insert it into our tree */
+            rc = BSTreeInsert ( &exclude->ref_nodes, (BSTNode *)( *node ), ref_node_sort );
+        }
+    }
+    return rc;
+}
+
+rc_t get_ref_exclude( ref_exclude *exclude,
+                      const String * name,
+                      int32_t ref_offset, uint32_t ref_len,
+                      uint8_t *exclude_vector,
+                      uint32_t *active )
+{
+    rc_t rc = 0;
+    ref_node *node = NULL;
+
+    /* look if we already have a node with the given name */
+    trans_node *t_node = ( trans_node * )BSTreeFind ( &exclude->translations, name, trans_node_find );
+    if ( t_node != NULL )
+    {
+        rc = find_or_make_by_name( exclude, &t_node->translation, &node );
+    }
+    else
+    {
+        rc = find_or_make_by_name( exclude, name, &node );
+    }
+
+    if ( rc == 0 && node->valid )
+    {
+        /* read the necessary row(s) and fill it into the exclude_vector */
+        rc = read_from_ref_node( node, ref_offset, ref_len, exclude_vector, active );
+        if ( rc == 0 )
+        {
+            node->active_positions += *active;
+        }
+    }
+    return rc;
+}
+
+
+rc_t whack_ref_exclude( ref_exclude *exclude )
+{
+    BSTreeWhack ( &exclude->ref_nodes, whack_ref_node, &exclude->info );
+    BSTreeWhack ( &exclude->translations, whack_trans_node, NULL );
+    if ( exclude->mgr != NULL )
+        VDBManagerRelease( exclude->mgr );
+    if ( exclude->path != NULL )
+        free( exclude->path );
+    return 0;
+}
diff --git a/tools/qual-recalib-stat/ref_exclude.h b/tools/qual-recalib-stat/ref_exclude.h
new file mode 100644
index 0000000..a957ce9
--- /dev/null
+++ b/tools/qual-recalib-stat/ref_exclude.h
@@ -0,0 +1,71 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ref_exclude_
+#define _h_ref_exclude_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <kfs/directory.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+typedef struct ref_exclude
+{
+    BSTree ref_nodes;
+    BSTree translations;
+    VDBManager *mgr;
+    char * path;
+    void * last_used_ref_node;
+    bool info;
+} ref_exclude;
+
+
+rc_t make_ref_exclude( ref_exclude *exclude, KDirectory *dir,
+                       const char * path, bool info );
+
+
+rc_t get_ref_exclude( ref_exclude *exclude, 
+                      const String * name,
+                      int32_t ref_offset, uint32_t ref_len,
+                      uint8_t *exclude_vector,
+                      uint32_t *active );
+
+rc_t whack_ref_exclude( ref_exclude *exclude );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/ref_grab.pl b/tools/qual-recalib-stat/ref_grab.pl
new file mode 100755
index 0000000..e71f2a4
--- /dev/null
+++ b/tools/qual-recalib-stat/ref_grab.pl
@@ -0,0 +1,82 @@
+#!/usr/bin/perl -w
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+use File::Path;
+
+my $nargs = scalar @ARGV;
+
+if ( $nargs < 2  )
+{
+    print( "\n-------------------------------------------------------------------------\n" );
+    print( "USAGE: ref_grab.pl src position bases\n" );
+    print( "src      ... absolute-path to a reference-table\n" );
+    print( "position ... from what absolute positoin in the reference to grab\n" );
+    print( "bases    ... how many bases to grab\n" );
+    print( "-------------------------------------------------------------------------\n\n" );
+}
+else
+{
+    my $ref = $ARGV[ 0 ];
+    my $cnt = $ARGV[ 1 ];
+    my $len = 79;
+    my ( $n_rows, $cmd, $row, $s, $line );
+
+    #calculate how many rows have to be dumped...
+    {
+        use integer;
+        $n_rows = ( $cnt / 5000 ) + 1;
+    }
+
+    #dump the sequence-name
+    $cmd = "vdb-dump $ref -C SEQ_ID -f csv -R 1";
+    open ( DUMP, "-|", "$cmd" ) or die "$cmd failed";
+    while ( ( $row = <DUMP> ), defined( $row ) )
+    {
+        chomp( $row );
+        print( ">$row\n" );
+    }
+    close ( DUMP );
+
+    #dump the rows
+    $cmd = "vdb-dump $ref -C READ -f tab -R 1-$n_rows";
+    open ( DUMP, "-|", "$cmd" ) or die "$cmd failed";
+    while ( ( $row = <DUMP> ), defined( $row ) )
+    {
+        chomp( $row );
+        $s .= $row;
+        while( length( $s ) >= $len )
+        {
+            $line = substr( $s, 0, $len, "" );
+            print( "$line\n" );
+
+        }
+    }
+    close ( DUMP );
+
+    #dump the remainder of bases
+    if ( length( $s ) > 0 )
+    {
+        print( "$s\n" );
+    }
+}
\ No newline at end of file
diff --git a/tools/qual-recalib-stat/spot_position.c b/tools/qual-recalib-stat/spot_position.c
new file mode 100644
index 0000000..dd3ac1f
--- /dev/null
+++ b/tools/qual-recalib-stat/spot_position.c
@@ -0,0 +1,121 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "spot_position.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static const char * sidx_names[ N_SIDX ] =
+{
+    "READ_START"
+};
+
+
+rc_t make_spot_pos( spot_pos *self,
+                    const VDatabase * db )
+{
+    rc_t rc = VDatabaseOpenTableRead( db, &self->table, "SEQUENCE" );
+    if ( rc != 0 )
+    {
+        LogErr( klogInt, rc, "VDatabaseOpenTableRead(SEQUENCE) failed\n" );
+        self->table = NULL;
+        self->cursor = NULL;
+    }
+    else
+    {
+        rc = VTableCreateCursorRead( self->table, &self->cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VTableCreateCursorRead(SEQUENCE) failed\n" );
+        else
+        {
+            rc = add_columns( self->cursor, self->columns, sidx_names, N_SIDX );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen ( self->cursor );
+                if ( rc != 0 )
+                {
+                    LogErr( klogInt, rc, "cannot open cursor on SEQUENCE\n" );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t query_spot_pos( spot_pos *self,
+                     const uint32_t seq_read_id,
+                     const uint64_t spot_id,
+                     uint32_t *pos_offset )
+{
+    rc_t rc;
+    if ( self->cursor == NULL )
+    {
+        rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcNull );
+        LogErr( klogInt, rc, "cannot query spot-position, cursor is NULL\n" );
+    }
+    else
+    {
+        rc = read_cells( self->cursor, spot_id, self->columns, sidx_names, N_SIDX );
+        if ( rc == 0 )
+        {
+            const uint32_t * rd_start   = self->columns[ SIDX_READ_START ].base;
+            uint32_t rd_start_len = self->columns[ SIDX_READ_START ].row_len;
+            if ( seq_read_id > rd_start_len )
+            {
+                rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "asking for read_start of read #$(read_nr) but we only have $(n_read) reads at row #$(row_nr)",
+                     "read_nr=%u,n_read=%u,row_nr=%lu", seq_read_id, rd_start_len, spot_id ) );
+            }
+            else
+            {
+                *pos_offset = rd_start[ seq_read_id - 1 ];
+                /*
+                OUTMSG(( "SPOT_ID %lu / SEQ_READ_ID %u ---> %u\n",
+                         spot_id, seq_read_id, *pos_offset ));
+                */
+            }
+        }
+        else
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "cannot read sequence row #$(row_nr)", "row_nr=%lu", spot_id ) );
+        }
+    }
+    return rc;
+}
+
+
+void whack_spot_pos( spot_pos *self )
+{
+    if ( self->cursor != NULL )
+        VCursorRelease( self->cursor );
+    if ( self->table != NULL )
+        VTableRelease( self->table );
+}
diff --git a/tools/qual-recalib-stat/spot_position.h b/tools/qual-recalib-stat/spot_position.h
new file mode 100644
index 0000000..e6e9953
--- /dev/null
+++ b/tools/qual-recalib-stat/spot_position.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_spot_position_
+#define _h_spot_position_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/database.h>
+#include "columns.h"
+
+
+#define SIDX_READ_START      0
+#define N_SIDX               1
+
+
+typedef struct spot_pos
+{
+    const VTable *table;
+    const VCursor *cursor;
+    col columns[ N_SIDX ];
+} spot_pos;
+
+
+rc_t make_spot_pos( spot_pos *self, const VDatabase * db );
+
+rc_t query_spot_pos( spot_pos *self,
+                     const uint32_t seq_read_id,
+                     const uint64_t spot_id,
+                     uint32_t *pos_offset );
+
+void whack_spot_pos( spot_pos *self );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/stat_mod.c b/tools/qual-recalib-stat/stat_mod.c
new file mode 100644
index 0000000..4cd927f
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod.c
@@ -0,0 +1,883 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "stat_mod.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static const char * ridx_names[ N_RIDX ] =
+{
+    "READ",
+    "QUALITY",
+    "HAS_MISMATCH",
+    "SPOT_GROUP",
+    "SEQ_SPOT_GROUP",
+    "REF_ORIENTATION",
+    "READ_LEN",
+    "SEQ_READ_ID",
+    "HAS_REF_OFFSET",
+    "REF_OFFSET",
+    "REF_POS",
+    "REF_SEQ_ID",
+    "REF_LEN"
+};
+
+
+static const char * widx_names[ N_WIDX ] =
+{
+    "SPOT_GROUP",
+    "KMER",
+    "ORIG_QUAL",
+    "TOTAL_COUNT",
+    "MISMATCH_COUNT",
+    "CYCLE",
+    "HPRUN",
+    "GC_CONTENT"
+};
+
+typedef struct qual
+{
+    uint32_t mismatches;
+    uint32_t count;
+} qual;
+
+
+typedef struct pos_vector
+{
+    uint32_t len;
+    struct qual *v;
+} pos_vector;
+
+
+typedef struct spotgrp
+{
+    BSTNode node;
+    const String *name;
+    pos_vector dimers[N_DIMER_VALUES][N_QUAL_VALUES][N_GC_VALUES][N_HP_VALUES];
+} spotgrp;
+
+
+static const uint8_t char_2_base_bin[26] =
+{
+   /* A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z*/
+      0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0
+};
+
+
+static const char * dimer_2_ascii[] = 
+{ "AA", "AC", "AG", "AT", 
+  "CA", "CC", "CG", "CT",
+  "GA", "GC", "GG", "GT",
+  "TA", "TC", "TG", "TT", "XX" };
+
+
+static void CC whack_spotgroup( BSTNode *n, void *data )
+{
+    spotgrp * sg = ( spotgrp * )n;
+    uint8_t dimer_idx;
+    for ( dimer_idx = 0; dimer_idx < N_DIMER_VALUES; ++dimer_idx )
+    {
+        uint8_t qual_idx;
+        for ( qual_idx = 0; qual_idx < N_QUAL_VALUES; ++qual_idx )
+        {
+            uint8_t gc_idx;
+            for ( gc_idx = 0; gc_idx < N_GC_VALUES; ++gc_idx )
+            {
+                uint8_t hp_idx;
+                for ( hp_idx = 0; hp_idx < N_HP_VALUES; ++hp_idx )
+                {
+                    pos_vector *pv = &sg->dimers[dimer_idx][qual_idx][gc_idx][hp_idx];
+                    if ( pv->v != NULL )
+                        free( pv->v );
+                }
+            }
+        }
+    }
+    if ( sg->name != NULL )
+        StringWhack ( sg->name );
+    free( n );
+}
+
+
+rc_t make_statistic( statistic *data, uint32_t gc_window,
+                     KDirectory *dir, const char * exclude_db )
+{
+    rc_t rc = 0;
+    BSTreeInit( &data->spotgroups );
+    data->last_used_spotgroup = NULL;
+    memset( &data->rd_col, 0, sizeof data->rd_col );
+    make_ref_exclude( &data->exclude, dir, exclude_db );
+    data->gc_window = gc_window;
+
+    data->exclude_vector_len = 512;
+    data->exclude_vector = calloc( 1, data->exclude_vector_len );
+    if ( data->exclude_vector == NULL )
+    {
+        data->exclude_vector_len = 0;
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        LogErr( klogInt, rc, "failed to make large enough exclude-vector\n" );
+    }
+
+    if ( rc == 0 )
+    {
+        data->case_vector_len = 512;
+        data->case_vector = calloc( 1, data->case_vector_len );
+        if ( data->case_vector == NULL )
+        {
+            data->case_vector_len = 0;
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            LogErr( klogInt, rc, "failed to make large enough case-vector\n" );
+        }
+    }
+
+    return rc;
+}
+
+
+void whack_statistic( statistic *data )
+{
+    BSTreeWhack ( &data->spotgroups, whack_spotgroup, NULL );
+    whack_ref_exclude( &data->exclude );
+    if ( data->exclude_vector != NULL )
+    {
+        free( data->exclude_vector );
+        data->exclude_vector = NULL;
+        data->exclude_vector_len = 0;
+    }
+    if ( data->case_vector != NULL )
+    {
+        free( data->case_vector );
+        data->case_vector = NULL;
+        data->case_vector_len = 0;
+    }
+}
+
+
+static spotgrp * make_spotgrp( const char *src, const size_t len )
+{
+    spotgrp * res = calloc( 1, sizeof * res );
+    if ( res != NULL )
+    {
+        String s;
+        StringInit( &s, src, len, len );
+        if ( StringCopy ( &res->name, &s ) != 0 )
+        {
+            free( res );
+            res = NULL;
+        }
+    }
+    return res;
+}
+
+
+static int64_t CC spotgroup_find( const void *item, const BSTNode *n )
+{
+    spotgrp * sg = ( spotgrp* ) n;
+    return StringCompare ( ( String* ) item, sg->name );
+}
+
+
+static spotgrp * find_spotgrp( statistic *data, const char *src, const size_t len )
+{
+    String s;
+    BSTNode *node;
+
+    StringInit( &s, src, len, len );
+    if ( data->last_used_spotgroup != NULL )
+    {
+        spotgrp * sg = ( spotgrp* )data->last_used_spotgroup;
+        if ( StringCompare ( &s, sg->name ) == 0 )
+            return sg;
+    }
+
+    node = BSTreeFind ( &data->spotgroups, &s, spotgroup_find );
+    if ( node == NULL )
+        return NULL;
+    else
+    {
+        data->last_used_spotgroup = node;
+        return ( spotgrp *) node;
+    }
+}
+
+
+static uint8_t dimer_2_bin( const char * dimer )
+{
+    uint8_t res = 0;
+    char c0 = dimer[ 0 ];
+    char c1 = dimer[ 1 ];
+    if ( c0 == 'N' || c1 == 'N' )
+        res = 16;
+    else
+    {
+        if ( c0 >= 'A' && c0 <= 'Z' )
+            res |= char_2_base_bin[ (uint8_t)( c0 - 'A' ) ];
+        res <<= 2;
+        if ( c1 >= 'A' && c1 <= 'Z' )
+            res |= char_2_base_bin[ (uint8_t)( c1 - 'A' ) ];
+    }
+    return res;
+}
+
+
+static rc_t spotgroup_enter_values( spotgrp * sg, 
+                                    stat_row * row, 
+                                    uint8_t dimer_idx,
+                                    uint8_t rd_case,
+                                    uint32_t base_pos_offset )
+{
+    rc_t rc = 0;
+    pos_vector *pv;
+    uint32_t base_pos = row->base_pos + base_pos_offset;
+
+    if ( row->quality >= N_QUAL_VALUES )
+        row->quality = N_QUAL_VALUES - 1;
+    if ( row->gc_content >= N_GC_VALUES )
+        row->gc_content = N_GC_VALUES - 1;
+    if ( row->hp_run >= N_HP_VALUES )
+        row->hp_run = N_HP_VALUES - 1;
+
+    pv = &sg->dimers[ dimer_idx ][ row->quality ][ row->gc_content ][ row->hp_run ];
+    if ( pv->len == 0 )
+    {
+        /* vector was not used before */
+        pv->len = ( ( base_pos + 1 ) / POS_VECTOR_INC ) + 1;
+        pv->len *= POS_VECTOR_INC;
+        pv->v = calloc( pv->len, sizeof pv->v[0] );
+        if ( pv->v == NULL )
+        {
+            rc = RC( rcApp, rcSelf, rcConstructing, rcMemory, rcExhausted );
+        }
+    }
+    else if ( pv->len < ( base_pos + 1 ) )
+    {
+        void * tmp;
+        /* vector has to be increased */
+        uint32_t org_len = pv->len;
+        pv->len = ( ( base_pos + 1 ) / POS_VECTOR_INC ) + 1;
+        pv->len *= POS_VECTOR_INC;
+        /* prevent from leaking memory by capturing the new pointer in temp. var. */
+        tmp = realloc( pv->v, pv->len * ( sizeof pv->v[0] ) );
+        if ( tmp == NULL )
+        {
+            rc = RC( rcApp, rcSelf, rcConstructing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            pv->v = tmp;
+            /* the added part has to be set to zero */
+            qual *to_zero = pv->v;
+            to_zero += org_len;
+            memset( to_zero, 0, ( pv->len - org_len ) * ( sizeof pv->v[0] ) );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        qual *q = &pv->v[ base_pos ];
+        switch( rd_case )
+        {
+            case CASE_MISMATCH : q->mismatches++; /* no break intented! */
+            case CASE_MATCH    : q->count++;
+                                 break;
+        }
+    }
+    else
+    {
+        pv->len = 0;
+    }
+    return rc;
+}
+
+
+static int64_t CC spotgroup_sort( const BSTNode *item, const BSTNode *n )
+{
+    spotgrp * sg1 = ( spotgrp* ) item;
+    spotgrp * sg2 = ( spotgrp* ) n;
+    return StringCompare ( sg1->name, sg2->name );
+}
+
+
+static rc_t expand_and_clear_vector( uint8_t **v, uint32_t *len, uint32_t new_len )
+{
+    rc_t rc = 0;
+    if ( *len < new_len )
+    {
+        *len += new_len;
+        *v = realloc( *v, *len );
+        if ( *v == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            LogErr( klogInt, rc, "failed to expand (uint8_t)vector\n" );
+        }
+    }
+    if ( rc == 0 )
+        memset( *v, 0, *len ); 
+    return rc;
+}
+
+
+static rc_t get_exlude_vector( statistic * data, uint32_t *ref_len )
+{
+    /* we need: REF_OFFSET, REF_LEN and REF_NAME for that */
+    rc_t rc;
+    String s_ref_name;
+
+    const char * ref_name_base = ( const char * )data->rd_col[ RIDX_REF_SEQ_ID ].base;
+    uint32_t ref_name_len = data->rd_col[ RIDX_REF_SEQ_ID ].row_len;
+
+    int32_t ref_offset = *( ( int32_t *)data->rd_col[ RIDX_REF_POS ].base );
+    *ref_len = *( ( uint32_t *)data->rd_col[ RIDX_REF_LEN ].base );
+
+    StringInit( &s_ref_name, ref_name_base, ref_name_len, ref_name_len );
+
+    /* make the ref-exclude-vector longer if necessary */
+    rc = expand_and_clear_vector( &data->exclude_vector,
+                                  &data->exclude_vector_len,
+                                  *ref_len );
+    if ( rc == 0 )
+        rc = get_ref_exclude( &data->exclude,
+                              &s_ref_name,
+                              ref_offset,
+                              *ref_len,
+                              data->exclude_vector );
+
+    return rc;
+}
+
+
+static rc_t walk_exclude_vector( statistic * data,
+                                 uint32_t n_bases,
+                                 uint32_t ref_len )
+{
+    rc_t rc = 0;
+    /* we need: HAS_REF_OFFSET, REF_OFFSET and HAS_MISMATCH for that */
+
+    const char * has_roffs = ( const char * )data->rd_col[ RIDX_HAS_REF_OFFSET ].base;
+    uint32_t has_roffs_len = data->rd_col[ RIDX_HAS_REF_OFFSET ].row_len;
+
+    const int32_t * roffs = ( const int32_t * )data->rd_col[ RIDX_REF_OFFSET ].base;
+    uint32_t roffs_len = data->rd_col[ RIDX_REF_OFFSET ].row_len;
+
+    const char * has_mm = ( const char * )data->rd_col[ RIDX_HAS_MISMATCH ].base;
+    uint32_t has_mm_len = data->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+
+    if ( has_roffs_len != n_bases || has_mm_len != n_bases )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        LogErr( klogInt, rc, "number of bases does not match length of HAS_REF_OFFSET or HAS_MISMATCH\n" );
+    }
+    else
+    {
+        /* we count how many REF_OFFSETS have to be there... */
+        uint32_t hro_count = 0;
+        uint32_t idx;
+        for ( idx = 0; idx < n_bases; ++idx )
+        {
+            if ( has_roffs[ idx ] == '1' )
+                hro_count++;
+        }
+        if ( hro_count != roffs_len )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            LogErr( klogInt, rc, "number of HAS_REF_OFFSET=1 does not match length of REF_OFFSET\n" );
+        }
+    }
+
+    /* */
+    if ( rc == 0 )
+    {
+        int32_t ref_idx = 0;
+        uint32_t base_idx = 0;
+        uint32_t roffs_idx = 0;
+        while ( ref_idx < (int32_t)ref_len )
+        {
+            /* before we handle the reference, apply the ref-offset to the
+               iterator ( in this case: ref_idx ) */
+            if ( has_roffs[ base_idx ] == '1' )
+            {
+                /* this handles the left-clipping (... ref_idx < 0 )*/
+                for ( ref_idx += roffs[ roffs_idx++ ]; ref_idx < 0; ++ref_idx )
+                {
+                    data->case_vector[ base_idx++ ] = CASE_IGNORE;
+                }
+            }
+            assert( ref_idx >= 0 );
+            /* all the calculation is only done to put the IGNORE-flags
+               into the right base-position (if necessary): */
+            if ( data->exclude_vector[ ref_idx++ ] > 0 )
+                data->case_vector[ base_idx ] = CASE_IGNORE;
+            base_idx++;
+        }
+        /* walk backwards from the end to apply right-clipping */
+        assert( n_bases > 0 );
+        base_idx = n_bases - 1;
+        while ( base_idx > 0 && has_mm[ base_idx ] == '1' )
+        {
+            data->case_vector[ base_idx-- ] = CASE_IGNORE;
+        }
+    }
+
+    /* enter the mis-matches into the case-vector,
+       but only where the base-position is not ignored... */
+    if ( rc == 0 )
+    {
+        uint32_t base_idx;
+        for ( base_idx = 0; base_idx < n_bases; ++base_idx )
+        {
+            if ( has_mm[ base_idx ] == '1' &&
+                 data->case_vector[ base_idx ] != CASE_IGNORE )
+            {
+                data->case_vector[ base_idx ] = CASE_MISMATCH;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static const char base_complement[26] =
+{
+   /* ABCDEFGHIJKLMNOPQRSTUVWXYZ*/
+     "TBGDEFCHIJKLMNOPQRSAUVWXYZ"
+};
+
+
+static char complement( const char base )
+{
+    if ( base >= 'A' && base <= 'Z' )
+        return base_complement[ base - 'A' ];
+    else
+        return 'N';
+}
+
+
+static void reverse_read_and_case( statistic * data,
+                                   char * rd_ptr,
+                                   uint8_t *qual_ptr,
+                                   uint32_t n_bases )
+{
+    uint32_t p1;
+    uint32_t p2 = n_bases - 1;
+    uint32_t n = ( n_bases / 2 );
+    for ( p1 = 0; p1 < n; ++p1, --p2 )
+    {
+        char rd_temp = rd_ptr[ p1 ];
+        uint8_t c_temp = data->case_vector[ p1 ];
+        uint8_t q_temp = qual_ptr[ p1 ];
+
+        rd_ptr[ p1 ] = complement( rd_ptr[ p2 ] );
+        data->case_vector[ p1 ] = data->case_vector[ p2 ];
+        qual_ptr[ p1 ] = qual_ptr[ p2 ];
+
+        rd_ptr[ p2 ] = complement( rd_temp );
+        data->case_vector[ p2 ] = c_temp;
+        qual_ptr[ p2 ] = q_temp;
+    }
+    /* don't forget to complement the base in the middle (if n_bases is odd) */
+    if ( n_bases & 1 )
+        rd_ptr[ n ] = complement( rd_ptr[ n ] );
+}
+
+
+static rc_t loop_through_base_calls( spotgrp *sg,
+                       uint32_t gc_window,
+                       char * read_ptr,
+                       uint32_t n_bases,
+                       uint8_t * qual_ptr,
+                       uint8_t * case_ptr,
+                       uint32_t base_pos_offset )
+{
+    rc_t rc = 0;
+    char prev_char = 0;
+    stat_row row;
+    char *gc_ptr = read_ptr;
+    memset( &row, 0, sizeof row );
+
+    for ( row.base_pos = 0; row.base_pos < ( n_bases - 1 ) && rc == 0; ++row.base_pos )
+    {
+        /* calculate the hp-run-count */
+        if ( prev_char == *read_ptr )
+        {
+            row.hp_run++;
+            assert( row.hp_run <= n_bases );
+        }
+        else
+        {
+            prev_char = *read_ptr;
+            row.hp_run = 0;
+        }
+
+        /* advance the "window" */
+        if ( row.base_pos >= ( gc_window + 1 ) )
+        {
+            if ( *gc_ptr == 'G' || *gc_ptr == 'C' )
+            {
+                assert( row.gc_content > 0 );
+                row.gc_content--;
+            }
+            gc_ptr++;
+        }
+
+        if ( case_ptr[0] != CASE_IGNORE && case_ptr[1] != CASE_IGNORE )
+        {
+            row.quality = *qual_ptr;
+            rc = spotgroup_enter_values( sg,
+                                    &row, 
+                                    dimer_2_bin( read_ptr ),
+                                    *case_ptr,
+                                    base_pos_offset );
+        }
+
+        /* handle the current base-position after the record was entered
+           because we do not include the current base into the gc-content */
+        if ( *read_ptr == 'G' || *read_ptr == 'C' )
+            row.gc_content++;
+
+        qual_ptr++;
+        read_ptr++;
+        case_ptr++;
+    }
+    return rc;
+}
+
+
+static rc_t extract_spotgroup_statistic( statistic * data,
+                                         spotgrp *sg,
+                                         uint32_t n_bases )
+{
+    uint32_t ref_len, base_pos_offset = 0;
+    char *read_ptr = ( char * )data->rd_col[ RIDX_READ ].base;
+    uint8_t *qual_ptr = ( uint8_t * )data->rd_col[ RIDX_QUALITY ].base;
+
+    /* (1) ... get the exclusion-list for this read */
+    rc_t rc = get_exlude_vector( data, &ref_len );
+
+    /* (2) ... make the case-vector longer if necessary */
+    if ( rc == 0 )
+    {
+        rc = expand_and_clear_vector( &data->case_vector,
+                                      &data->case_vector_len,
+                                      n_bases );
+    }
+
+    /* (3) ... walk the exclusion-list and Mismatch-vector to build the case-vector */
+    if ( rc == 0 )
+    {
+        rc = walk_exclude_vector( data, n_bases, ref_len );
+    }
+
+    /* (4) ... if we have to, we reverse case-vector and revers/complement the read-vector */
+    if ( rc == 0 )
+    {
+        const bool * reverse = data->rd_col[ RIDX_REF_ORIENTATION ].base;
+        if ( *reverse )
+        {
+            reverse_read_and_case( data, read_ptr, qual_ptr, n_bases );
+        }
+    }
+
+    /* (5) ... check if we are in SEQ_READ_ID == 2 */
+    if ( *( ( uint32_t * )data->rd_col[ RIDX_SEQ_READ_ID ].base ) == 2 )
+    {
+        base_pos_offset = n_bases;
+    }
+    /* TBD: make it more general for more than 2 reads per spot of different sized reads */
+
+    /* (6) ... */
+    if ( rc == 0 )
+    {
+        rc = loop_through_base_calls( sg, data->gc_window, read_ptr, n_bases, 
+                   qual_ptr, data->case_vector, base_pos_offset );
+    }
+    return rc;
+}
+
+
+static rc_t extract_statistic_from_row( statistic * data )
+{
+    rc_t rc = 0;
+    spotgrp *sg;
+
+    /* first try the SPOT_GROUP column (correct for newer db's) */
+    const char * spotgrp_base  = data->rd_col[ RIDX_SPOT_GROUP ].base;
+    uint32_t spotgrp_len = data->rd_col[ RIDX_SPOT_GROUP ].row_len;
+    if ( spotgrp_len < 1 || *spotgrp_base == 0 )
+    {
+        /* if empty try with SEQ_SPOT_GROUP column (correct for older db's) */
+        spotgrp_base  = data->rd_col[ RIDX_SEQ_SPOT_GROUP ].base;
+        spotgrp_len = data->rd_col[ RIDX_SEQ_SPOT_GROUP ].row_len;
+    }
+
+    sg = find_spotgrp( data, spotgrp_base, spotgrp_len );
+    if ( sg == NULL )
+    {
+        sg = make_spotgrp( spotgrp_base, spotgrp_len );
+        if ( sg == NULL )
+            rc = RC( rcApp, rcSelf, rcConstructing, rcMemory, rcExhausted );
+        else
+            rc = BSTreeInsert ( &data->spotgroups, (BSTNode *)sg, spotgroup_sort );
+    }
+    if ( rc == 0 )
+    {
+        uint32_t n_bases  = data->rd_col[ RIDX_READ ].row_len;
+        uint32_t qual_len = data->rd_col[ RIDX_QUALITY ].row_len;
+        uint32_t hmis_len = data->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+
+        if ( ( n_bases == qual_len ) &&  ( n_bases == hmis_len ) )
+        {
+            rc = extract_spotgroup_statistic( data, sg, n_bases );
+        }
+        else
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+            LogErr( klogInt, rc, "number of bases, quality and has_mismatch is not the same\n" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_and_extract_statistic_from_row( statistic * data, const VCursor *my_cursor, 
+                         const int64_t row_id )
+{
+    rc_t rc = read_cells( my_cursor, row_id, data->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        rc = extract_statistic_from_row( data );
+    }
+    return rc;
+}
+
+
+rc_t query_statistic_rowrange( statistic * data, const VCursor *my_cursor, 
+                               int64_t *first, uint64_t * count )
+{
+    rc_t rc = VCursorIdRange ( my_cursor, data->rd_col[ RIDX_READ ].idx, first, count );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorIdRange() failed\n" );
+    return rc;
+}
+
+
+rc_t open_statistic_cursor( statistic * data, const VCursor *my_cursor )
+{
+    rc_t rc = add_columns( my_cursor, data->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( my_cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed\n" );
+    }
+    return rc;
+}
+
+
+typedef struct iter_ctx
+{
+    bool ( CC * f ) ( stat_row * row, void *data );
+    void * data;
+    uint64_t n;
+} iter_ctx;
+
+
+static void CC spotgroup_iter( BSTNode *n, void *data )
+{
+    spotgrp *sg = ( spotgrp * ) n;
+    iter_ctx *ctx = ( iter_ctx * )data;
+    bool run = true;
+    const char * name = sg->name->addr;
+    uint8_t dimer_idx;
+    for ( dimer_idx = 0; dimer_idx < N_DIMER_VALUES && run; ++dimer_idx )
+    {
+        uint8_t qual_idx;
+        for ( qual_idx = 0; qual_idx < N_QUAL_VALUES && run ; ++qual_idx )
+        {
+            uint8_t gc_idx;
+            for ( gc_idx = 0; gc_idx < N_GC_VALUES && run ; ++gc_idx )
+            {
+                uint8_t hp_idx;
+                for ( hp_idx = 0; hp_idx < N_HP_VALUES && run ; ++hp_idx )
+                {
+                    pos_vector *pv = &sg->dimers[dimer_idx][qual_idx][gc_idx][hp_idx];
+                    if ( pv->v != NULL )
+                    {
+                        uint32_t pos_idx;
+                        for ( pos_idx = 0; pos_idx < pv->len && run; ++pos_idx )
+                        {
+                            qual *q = &pv->v[pos_idx];
+                            if ( q->count > 0 )
+                            {
+                                stat_row row;
+                                /* the parameters */
+                                row.spotgroup  = (char *)name;
+                                row.dimer      = (char *)dimer_2_ascii[dimer_idx];
+                                row.quality    = qual_idx;
+                                row.hp_run     = hp_idx;
+                                row.gc_content = gc_idx;
+                                row.base_pos   = pos_idx;
+
+                                /* the counters */
+                                row.count      = q->count;
+                                row.mismatch_count = q->mismatches;
+
+                                run = ctx->f( &row, ctx->data );
+                                ctx->n++;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data )
+{
+    iter_ctx ctx;
+    ctx.f = f;
+    ctx.data = f_data;
+    ctx.n = 0;
+    BSTreeForEach ( &data->spotgroups, false, spotgroup_iter, &ctx );
+    return ctx.n;
+}
+
+
+/************** WRITER **********************************************/
+static rc_t open_writer_cursor( statistic_writer *writer )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    for ( idx = 0; idx < N_WIDX && rc == 0; ++idx )
+    {
+        rc = add_column( writer->cursor, &writer->wr_col[ idx ], widx_names[ idx ] );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( writer->cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed\n" );
+    }
+    return rc;
+}
+
+
+rc_t make_statistic_writer( statistic_writer *writer, VCursor * cursor )
+{
+    writer->cursor = cursor;
+    memset( &writer->wr_col, 0, sizeof writer->wr_col );
+    return open_writer_cursor( writer );
+}
+
+
+typedef struct writer_ctx
+{
+    statistic_writer *writer;
+    rc_t rc;
+} writer_ctx;
+
+
+static bool CC write_cb( stat_row * row, void * data )
+{
+    writer_ctx * ctx = ( writer_ctx * ) data;
+    col * cols = ( col * )&ctx->writer->wr_col;
+    VCursor * cursor = ctx->writer->cursor;
+  
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorOpen() failed\n" );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_SPOT_GROUP ].idx, 8,
+                              row->spotgroup, string_size( row->spotgroup ),
+                              widx_names[ WIDX_SPOT_GROUP ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_KMER ].idx, 8,
+                              row->dimer, string_size( row->dimer ),
+                              widx_names[ WIDX_KMER ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_ORIG_QUAL ].idx, 8,
+                              &row->quality, 1, widx_names[ WIDX_ORIG_QUAL ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_CYCLE ].idx, 32,
+                              &row->base_pos, 1, widx_names[ WIDX_CYCLE ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_TOTAL_COUNT ].idx, 32,
+                              &row->count, 1, widx_names[ WIDX_TOTAL_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_MISMATCH_COUNT ].idx, 32,
+                              &row->mismatch_count, 1,
+                              widx_names[ WIDX_MISMATCH_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_HPRUN ].idx, 32,
+                              &row->hp_run, 1, widx_names[ WIDX_HPRUN ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_GC_CONTENT ].idx, 32,
+                              &row->gc_content, 1, widx_names[ WIDX_GC_CONTENT ] );
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCommitRow() failed\n" );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCloseRow() failed\n" );
+    }
+
+    ctx->rc = rc;
+    return ( rc == 0 );
+}
+
+
+rc_t write_statistic( statistic_writer *writer, statistic *data,
+                      uint64_t * written )
+{
+    writer_ctx ctx;
+    uint64_t count;
+
+    ctx.writer = writer;
+    ctx.rc = 0;
+    count = foreach_statistic( data, write_cb, &ctx );
+    if ( written != NULL ) *written = count;
+
+    return ctx.rc;
+}
+
+
+rc_t whack_statistic_writer( statistic_writer *writer )
+{
+    rc_t rc = VCursorCommit( writer->cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorCommit() failed\n" );
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/stat_mod.h b/tools/qual-recalib-stat/stat_mod.h
new file mode 100644
index 0000000..9bec173
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod.h
@@ -0,0 +1,148 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_stat_mod_
+#define _h_stat_mod_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <vdb/cursor.h>
+#include "ref_exclude.h"
+#include "columns.h"
+
+#define N_QUAL_VALUES 40
+#define N_DIMER_VALUES 17
+#define N_GC_VALUES 8
+#define N_HP_VALUES 16
+
+#define POS_VECTOR_INC 50
+
+#define RIDX_READ            0
+#define RIDX_QUALITY         1
+#define RIDX_HAS_MISMATCH    2
+#define RIDX_SPOT_GROUP      3
+#define RIDX_SEQ_SPOT_GROUP  4
+#define RIDX_REF_ORIENTATION 5
+#define RIDX_READ_LEN        6
+#define RIDX_SEQ_READ_ID     7
+#define RIDX_HAS_REF_OFFSET  8
+#define RIDX_REF_OFFSET      9
+#define RIDX_REF_POS        10
+#define RIDX_REF_SEQ_ID     11
+#define RIDX_REF_LEN        12
+#define N_RIDX              13
+
+#define WIDX_SPOT_GROUP      0
+#define WIDX_KMER            1
+#define WIDX_ORIG_QUAL       2
+#define WIDX_TOTAL_COUNT     3
+#define WIDX_MISMATCH_COUNT  4
+#define WIDX_CYCLE           5
+#define WIDX_HPRUN           6
+#define WIDX_GC_CONTENT      7
+#define N_WIDX               8
+
+#define CASE_MATCH      0
+#define CASE_IGNORE     1
+#define CASE_MISMATCH   2
+
+
+typedef struct stat_row
+{
+    char * spotgroup;
+    char * dimer;
+    uint8_t quality;
+    uint32_t base_pos;
+    uint32_t count;
+    uint32_t mismatch_count;
+    uint32_t hp_run;
+    uint32_t gc_content;
+} stat_row;
+
+
+typedef struct statistic
+{
+    BSTree spotgroups;
+    col rd_col[ N_RIDX ];
+
+    ref_exclude exclude;
+    uint32_t gc_window;
+
+    uint8_t *exclude_vector;
+    uint32_t exclude_vector_len;
+
+    uint8_t *case_vector;
+    uint32_t case_vector_len;
+
+    void * last_used_spotgroup;
+} statistic;
+
+
+typedef struct statistic_writer
+{
+    VCursor *cursor;
+    col wr_col[ N_WIDX ];
+} statistic_writer;
+
+
+/*************** the READER ***************/
+rc_t make_statistic( statistic *data, uint32_t gc_window,
+                     KDirectory *dir, const char * exclude_db );
+
+rc_t open_statistic_cursor( statistic * data, const VCursor *my_cursor );
+
+rc_t query_statistic_rowrange( statistic * data, const VCursor *my_cursor, 
+                               int64_t *first, uint64_t * count );
+
+rc_t read_and_extract_statistic_from_row( statistic * data,
+                const VCursor *my_cursor, const int64_t row_id );
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data );
+
+void whack_statistic( statistic *data );
+
+
+/*************** the WRITER ***************/
+rc_t make_statistic_writer( statistic_writer *writer, VCursor * cursor );
+
+rc_t write_statistic( statistic_writer *writer, statistic *data,
+                      uint64_t * written );
+
+rc_t whack_statistic_writer( statistic_writer *writer );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/stat_mod_1.c b/tools/qual-recalib-stat/stat_mod_1.c
new file mode 100644
index 0000000..f4df109
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod_1.c
@@ -0,0 +1,962 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "stat_mod_1.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static const char * ridx_names[ N_RIDX ] =
+{
+    "RAW_READ",
+    "QUALITY",
+    "HAS_MISMATCH",
+    "SEQ_SPOT_ID",
+    "SPOT_GROUP",
+    "SEQ_SPOT_GROUP",
+    "REF_ORIENTATION",
+    "READ_LEN",
+    "SEQ_READ_ID",
+    "HAS_REF_OFFSET",
+    "REF_OFFSET",
+    "REF_POS",
+    "REF_SEQ_ID",
+    "REF_LEN"
+};
+
+
+static const char * widx_names[ N_WIDX ] =
+{
+    "SPOT_GROUP",
+    "KMER",
+    "ORIG_QUAL",
+    "TOTAL_COUNT",
+    "MISMATCH_COUNT",
+    "CYCLE",
+    "HPRUN",
+    "GC_CONTENT"
+};
+
+
+typedef struct counter
+{
+    uint32_t mismatches;
+    uint32_t count;
+} counter;
+
+
+typedef struct counter_vector
+{
+    counter *v;
+    uint32_t n_counters;
+} counter_vector;
+
+
+typedef struct spotgrp
+{
+    BSTNode node;
+    const String *name;
+    counter_vector cnv[ N_DIMER_VALUES ][ N_GC_VALUES ][ N_HP_VALUES ][ N_QUAL_VALUES ];
+} spotgrp;
+
+
+static const uint8_t char_2_base_bin[26] =
+{
+   /* A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z*/
+      0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4
+};
+
+
+static uint8_t dimer_2_bin( char c0, char c1 )
+{
+    uint8_t res = 16;
+
+    if ( c0 >= 'A' && c0 <= 'Z' && c1 >= 'A' && c1 <= 'Z' )
+    {
+        uint8_t t1 = char_2_base_bin[ (uint8_t)( c0 - 'A' ) ];
+        uint8_t t2 = char_2_base_bin[ (uint8_t)( c1 - 'A' ) ];
+        if ( t1 < 4 && t2 < 4 )
+        {
+            res = t1;
+            res <<= 2;
+            res |= t2;
+        }
+    }
+    return res;
+}
+
+
+static const char * dimer_2_ascii[] = 
+{ "AA", "AC", "AG", "AT", 
+  "CA", "CC", "CG", "CT",
+  "GA", "GC", "GG", "GT",
+  "TA", "TC", "TG", "TT", "XX" };
+
+
+/******************************************************************************
+    for the spot-group ( tree-node ), contains a tree of counter's
+******************************************************************************/
+static void CC whack_spotgroup( BSTNode *n, void *data )
+{
+    spotgrp * sg = ( spotgrp * )n;
+    uint32_t idx, count;
+    count = ( ( sizeof sg->cnv ) / sizeof( sg->cnv[0] ) );
+    for ( idx = 0; idx < count; ++idx )
+    {
+        counter_vector * cv = (counter_vector *)&( sg->cnv[ idx ] );
+        if ( cv->v != NULL )
+        {
+            free( cv->v );
+        }
+    }
+    if ( sg->name != NULL )
+        StringWhack ( sg->name );
+    free( n );
+}
+
+
+static spotgrp * make_spotgrp( const char *src, const size_t len )
+{
+    spotgrp * sg = calloc( 1, sizeof sg[ 0 ] );
+    if ( sg != NULL )
+    {
+        String s;
+        StringInit( &s, src, len, len );
+        if ( StringCopy ( &sg->name, &s ) != 0 )
+        {
+            free( sg );
+            sg = NULL;
+        }
+    }
+    return sg;
+}
+
+
+static int64_t CC spotgroup_find( const void *item, const BSTNode *n )
+{
+    spotgrp * sg = ( spotgrp* ) n;
+    return StringCompare ( ( String* ) item, sg->name );
+}
+
+
+static spotgrp * find_spotgroup( statistic *data, const char *src, const size_t len )
+{
+    String s;
+    BSTNode *node;
+
+    StringInit( &s, src, len, len );
+    if ( data->last_used_spotgroup != NULL )
+    {
+        spotgrp * sg = ( spotgrp* )data->last_used_spotgroup;
+        if ( StringCompare ( &s, sg->name ) == 0 )
+            return sg;
+    }
+
+    node = BSTreeFind ( &data->spotgroups, &s, spotgroup_find );
+    if ( node == NULL )
+        return NULL;
+    else
+    {
+        data->last_used_spotgroup = node;
+        return ( spotgrp *) node;
+    }
+}
+
+
+static rc_t spotgroup_enter_values( spotgrp * spotgroup,
+                                    const uint8_t quality,
+                                    const uint8_t dimer_code,
+                                    const uint8_t gc_content,
+                                    const uint8_t hp_run,
+                                    const uint32_t cycle,
+                                    const uint8_t rd_case,
+                                    const uint64_t row_id )
+{
+    rc_t rc = 0;
+    uint8_t q = quality;
+    uint8_t d = dimer_code;
+    uint8_t g = gc_content;
+    uint8_t h = hp_run;
+    counter_vector * cv;
+
+    if ( q >= N_QUAL_VALUES ) q = ( N_QUAL_VALUES - 1 );
+    if ( d >= N_DIMER_VALUES ) d = ( N_DIMER_VALUES - 1 );
+    if ( g >= N_GC_VALUES ) g = ( N_GC_VALUES - 1 );
+    if ( h >= N_HP_VALUES ) h = ( N_HP_VALUES - 1 );
+    cv = &( spotgroup->cnv[ d ][ g ][ h ][ q ] );
+
+    if ( cv->v ==  NULL )
+    {
+        /* the counter-block was not used before at all */
+        cv->n_counters = ( ( cycle / COUNTER_BLOCK_SIZE ) + 1 ) * COUNTER_BLOCK_SIZE;
+        cv->v = calloc( cv->n_counters, sizeof cv->v[0] );
+        if ( cv->v == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                     "calloc() failed at row#$(row_nr) cycle#$(cycle)",
+                     "row_nr=%lu,cycle=%u", row_id, cycle ) );
+        }
+    }
+    else
+    {
+        if ( cycle >= cv->n_counters )
+        {
+            /* the counter-block has to be extended */
+            void * tmp;
+            uint32_t org_len = cv->n_counters;
+            cv->n_counters = ( ( cycle / COUNTER_BLOCK_SIZE ) + 1 ) * COUNTER_BLOCK_SIZE;
+            /* prevent from leaking memory by capturing the new pointer in temp. var. */
+            tmp = realloc( cv->v, cv->n_counters * ( sizeof cv->v[0] ) );
+            if ( tmp == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                PLOGERR( klogInt, ( klogInt, rc, 
+                         "realloc() failed at row#$(row_nr) cycle#$(cycle)",
+                         "row_nr=%lu,cycle=%u", row_id, cycle ) );
+            }
+            else
+            {
+                /* the added part has to be set to zero */
+                counter * to_zero_out = tmp;
+                to_zero_out += org_len;
+                memset( to_zero_out, 0, ( cv->n_counters - org_len ) * ( sizeof *to_zero_out ) );
+                cv->v = tmp;
+            }
+        }
+    }
+    assert( cycle < cv->n_counters );
+
+    if ( rc == 0 )
+    {
+        counter * cnt = &( cv->v[ cycle ] );
+        switch( rd_case )
+        {
+            case CASE_MISMATCH : cnt->mismatches++; /* no break intented! */
+            case CASE_MATCH    : cnt->count++;
+                                 break;
+        }
+    }
+    return rc;
+}
+
+
+static int64_t CC spotgroup_sort( const BSTNode *item, const BSTNode *n )
+{
+    spotgrp * sg1 = ( spotgrp* ) item;
+    spotgrp * sg2 = ( spotgrp* ) n;
+    return StringCompare ( sg1->name, sg2->name );
+}
+
+
+/******************************************************************************
+    for the statistic ( tree-node ), contains a tree of spot-groups's
+******************************************************************************/
+static rc_t make_vector( void ** ptr, uint32_t *len, uint32_t new_len )
+{
+    rc_t rc = 0;
+
+    *len = new_len;
+    *ptr = calloc( 1, new_len );
+    if ( *ptr == NULL )
+    {
+        *len = 0;
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        LogErr( klogInt, rc, "failed to make large enough exclude-vector\n" );
+    }
+    return rc;
+}
+
+
+rc_t make_statistic( statistic *data, uint32_t gc_window, uint8_t cycle_offset,
+                     KDirectory *dir, const char * exclude_db,
+                     bool info, bool ignore_mismatches )
+{
+    rc_t rc = 0;
+    memset( data, 0, sizeof *data );
+    BSTreeInit( &data->spotgroups );
+    data->last_used_spotgroup = NULL;
+    data->sequence = NULL;
+    data->ignore_mismatches = ignore_mismatches;
+    memset( &data->rd_col, 0, sizeof data->rd_col );
+    if ( exclude_db != NULL )
+    {
+        make_ref_exclude( &data->exclude, dir, exclude_db, info );
+        data->ref_exclude_used = true;
+    }
+    data->gc_window = gc_window;
+    if ( data->gc_window >= N_GC_VALUES )
+    {
+        data->gc_window = ( N_GC_VALUES - 1 );
+    }
+    data->cycle_offset = cycle_offset;
+    if ( data->cycle_offset > 1 )
+    {
+        data->cycle_offset = 1;
+    }
+
+    if ( rc == 0 && data->ref_exclude_used )
+    {
+        rc = make_vector( (void**)&data->exclude_vector, &data->exclude_vector_len, 512 );
+    }
+    if ( rc == 0 )
+    {
+        rc = make_vector( (void**)&data->case_vector, &data->case_vector_len, 512 );
+    }
+    return rc;
+}
+
+
+void set_spot_pos_statistic( statistic *data, spot_pos * sequence )
+{
+    data->sequence = sequence;
+}
+
+
+void whack_statistic( statistic *data )
+{
+    BSTreeWhack ( &data->spotgroups, whack_spotgroup, NULL );
+    if ( data->ref_exclude_used )
+    {
+        whack_ref_exclude( &data->exclude );
+    }
+    if ( data->exclude_vector != NULL )
+    {
+        free( data->exclude_vector );
+    }
+    if ( data->case_vector != NULL )
+    {
+        free( data->case_vector );
+    }
+}
+
+
+static rc_t expand_and_clear_vector( void **v, uint32_t *len, uint32_t new_len, bool clear )
+{
+    rc_t rc = 0;
+    if ( *v != NULL )
+    {
+        if ( *len < new_len )
+        {
+            *len += new_len;
+            *v = realloc( *v, *len );
+            if ( *v == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                LogErr( klogInt, rc, "failed to expand (uint8_t)vector\n" );
+            }
+        }
+        if ( rc == 0 && clear )
+            memset( *v, 0, *len ); 
+    }
+    return rc;
+}
+
+
+static rc_t get_exlude_vector( statistic * data, uint32_t *ref_len )
+{
+    /* we need: REF_OFFSET, REF_LEN and REF_NAME for that */
+    rc_t rc = 0;
+
+    if ( data->ref_exclude_used )
+    {
+        String s_ref_name;
+        const char * ref_name_base = ( const char * )data->rd_col[ RIDX_REF_SEQ_ID ].base;
+        uint32_t ref_name_len = data->rd_col[ RIDX_REF_SEQ_ID ].row_len;
+
+        int32_t ref_offset = *( ( int32_t *)data->rd_col[ RIDX_REF_POS ].base );
+        *ref_len = *( ( uint32_t *)data->rd_col[ RIDX_REF_LEN ].base );
+
+        StringInit( &s_ref_name, ref_name_base, ref_name_len, ref_name_len );
+
+        /* make the ref-exclude-vector longer if necessary */
+        rc = expand_and_clear_vector( (void**)&data->exclude_vector,
+                                      &data->exclude_vector_len,
+                                      *ref_len,
+                                      true );
+        if ( rc == 0 )
+            rc = get_ref_exclude( &data->exclude,
+                                  &s_ref_name,
+                                  ref_offset,
+                                  *ref_len,
+                                  data->exclude_vector,
+                                  &data->active_exclusions );
+    }
+
+    return rc;
+}
+
+
+static rc_t walk_exclude_vector( statistic * data,
+                                 uint32_t n_bases,
+                                 uint32_t ref_len )
+{
+    rc_t rc = 0;
+    /* we need: HAS_REF_OFFSET, REF_OFFSET and HAS_MISMATCH for that */
+
+    const char * has_roffs = ( const char * )data->rd_col[ RIDX_HAS_REF_OFFSET ].base;
+    uint32_t has_roffs_len = data->rd_col[ RIDX_HAS_REF_OFFSET ].row_len;
+
+    const int32_t * roffs = ( const int32_t * )data->rd_col[ RIDX_REF_OFFSET ].base;
+    uint32_t roffs_len = data->rd_col[ RIDX_REF_OFFSET ].row_len;
+
+    const char * has_mm = ( const char * )data->rd_col[ RIDX_HAS_MISMATCH ].base;
+    uint32_t has_mm_len = data->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+
+    if ( has_roffs_len != n_bases || has_mm_len != n_bases )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        LogErr( klogInt, rc, "number of bases does not match length of HAS_REF_OFFSET or HAS_MISMATCH\n" );
+    }
+    else
+    {
+        /* we count how many REF_OFFSETS have to be there... */
+        uint32_t hro_count = 0;
+        uint32_t idx;
+        for ( idx = 0; idx < n_bases; ++idx )
+        {
+            if ( has_roffs[ idx ] == '1' )
+                hro_count++;
+        }
+        if ( hro_count != roffs_len )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            LogErr( klogInt, rc, "number of HAS_REF_OFFSET=1 does not match length of REF_OFFSET\n" );
+        }
+    }
+
+    /* */
+    if ( rc == 0 )
+    {
+        int32_t ref_idx = 0;
+        uint32_t base_idx;
+        uint32_t roffs_idx = 0;
+
+        /* walk backwards from the end to apply right-clipping */
+        assert( n_bases > 0 );
+        base_idx = n_bases - 1;
+        while ( base_idx > 0 && has_mm[ base_idx ] == '1' )
+        {
+            data->case_vector[ base_idx-- ] = CASE_IGNORE;
+            n_bases--;
+        }
+
+        base_idx = 0;
+        while ( ref_idx < (int32_t)ref_len && base_idx < n_bases )
+        {
+            /* before we handle the reference, apply the ref-offset to the
+               iterator ( in this case: ref_idx ) */
+            if ( has_roffs[ base_idx ] == '1' )
+            {
+                int32_t roffs_value = roffs[ roffs_idx++ ];
+                /* this handles the left-clipping and inserts */
+                if ( roffs_value < 0 )
+                {
+                    while( roffs_value++ < 0 )
+                    {
+                        data->case_vector[ base_idx++ ] = CASE_IGNORE;
+                    }
+                }
+                else
+                {
+                    ref_idx += roffs_value;
+                }
+            }
+            assert( ref_idx >= 0 );
+            /* right now ref_idx and base_idx points to corresponding positions */
+
+            /* all the calculation is only done to put the IGNORE-flags
+               into the right base-position (if necessary): */
+            if ( data->exclude_vector[ ref_idx++ ] > 0 )
+            {
+                data->case_vector[ base_idx ] = CASE_IGNORE;
+            }
+            else
+            {
+                /* enter the mis-matches into the case-vector */
+                if ( has_mm[ base_idx ] == '1' )
+                {
+                    data->case_vector[ base_idx ] = CASE_MISMATCH;
+                }
+            }
+            ++base_idx;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t loop_through_base_calls( spotgrp *sg,
+                        uint32_t gc_window,
+                        uint8_t cycle_offset,
+                        char * read_ptr,    /* points at begin of array */
+                        uint32_t n_bases,
+                        uint8_t * qual_ptr, /* points at begin of array */
+                        uint8_t * case_ptr, /* points at begin of array */
+                        uint32_t base_pos_offset,
+                        const int64_t row_id,
+                        const int32_t ofs )
+{
+    rc_t rc = 0;
+    uint32_t base_pos;
+    char prev_char = 0;
+    char * gc_ptr = read_ptr;
+    uint8_t gc_content = 0;
+    uint8_t hp_run = 0;
+    bool enter_value;
+
+    for ( base_pos = 0; base_pos < ( n_bases - 1 ) && rc == 0; ++base_pos )
+    {
+        /* calculate the hp-run-count */
+        if ( prev_char == *read_ptr )
+        {
+            hp_run++;
+            assert( hp_run <= n_bases );
+        }
+        else
+        {
+            prev_char = *read_ptr;
+            hp_run = 0;
+        }
+
+        /* advance the "window" */
+        if ( base_pos >= ( gc_window + 1 ) )
+        {
+            if ( *gc_ptr == 'G' || *gc_ptr == 'C' )
+            {
+                assert( gc_content > 0 );
+                gc_content--;
+            }
+            gc_ptr++;
+        }
+
+        if ( case_ptr != NULL )
+        {
+            enter_value = ( case_ptr[0] != CASE_IGNORE && case_ptr[ofs] != CASE_IGNORE );
+        }
+        else
+        {
+            enter_value = true;
+        }
+
+        if ( enter_value )
+        {
+            uint8_t case_value = CASE_MATCH;
+            if ( case_ptr != NULL )
+            {
+                case_value = case_ptr[1];
+            }
+            rc = spotgroup_enter_values( sg,
+                                         qual_ptr[1],
+                                         dimer_2_bin( read_ptr[0], read_ptr[1] ),
+                                         gc_content,
+                                         hp_run,
+                                         base_pos + base_pos_offset + cycle_offset,
+                                         case_value,
+                                         row_id );
+        }
+
+        /* handle the current base-position after the record was entered
+           because we do not include the current base into the gc-content */
+        if ( *read_ptr == 'G' || *read_ptr == 'C' )
+            gc_content++;
+
+        qual_ptr += ofs;
+        read_ptr++;
+        if ( case_ptr != NULL )
+        {
+            case_ptr += ofs;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t extract_spotgroup_statistic( statistic * data,
+                                         spotgrp *sg,
+                                         uint32_t n_bases,
+                                         const int64_t row_id )
+{
+    uint32_t ref_len, seq_read_id, base_pos_offset = 0;
+    char *read_ptr = ( char * )data->rd_col[ RIDX_READ ].base;
+    uint8_t *qual_ptr = ( uint8_t * )data->rd_col[ RIDX_QUALITY ].base;
+    const bool * reverse = data->rd_col[ RIDX_REF_ORIENTATION ].base;
+
+    /* (1) ... make the case-vector longer if necessary */
+    rc_t rc = expand_and_clear_vector( (void**)&data->case_vector,
+                                      &data->case_vector_len,
+                                      n_bases,
+                                      true );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc, 
+             "expand_and_clear_vector( case_vector ) failed at row $(row_nr)",
+             "row_nr=%lu", row_id ) );
+    }
+
+    /* (2) ... get the exclusion-list for this read */
+    if ( data->ref_exclude_used )
+    {
+        rc = get_exlude_vector( data, &ref_len );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "get_exlude_vector() failed at row $(row_nr)",
+                 "row_nr=%lu", row_id ) );
+        }
+
+        /* (3) ... walk the exclusion-list and Mismatch-vector to build the case-vector */
+        if ( rc == 0 )
+        {
+            rc = walk_exclude_vector( data, n_bases, ref_len );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "walk_exclude_vector failed at row $(row_nr)",
+                     "row_nr=%lu", row_id ) );
+            }
+        }
+    }
+    else
+    {
+        if ( !data->ignore_mismatches )
+        {
+            const char * has_mm = ( const char * )data->rd_col[ RIDX_HAS_MISMATCH ].base;
+            uint32_t has_mm_len = data->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+            uint32_t base_idx;
+            for ( base_idx = 0; base_idx < n_bases && base_idx < has_mm_len; ++base_idx )
+            {
+                if ( has_mm[ base_idx ] == '1' )
+                {
+                    data->case_vector[ base_idx ] = CASE_MISMATCH;
+                }
+            }
+        }
+    }
+
+    /* (4) ... query the base-postion of this read in the spot from the SEQUENCE-table */
+    seq_read_id = *( ( uint32_t * )data->rd_col[ RIDX_SEQ_READ_ID ].base );
+#ifdef LOOKUP_ALL_SEQ_READ_ID
+    if ( seq_read_id > 0 )
+#else
+    if ( seq_read_id > 1 )
+#endif
+    {
+        uint32_t spot_id = *( ( uint32_t * )data->rd_col[ RIDX_SEQ_SPOT_ID ].base );
+        rc = query_spot_pos( data->sequence, seq_read_id, spot_id, &base_pos_offset );
+    }
+
+    /* (5) ... looping throuhg the bases ( forward/backward ) */
+    if ( rc == 0 )
+    {
+
+        if ( *reverse )
+        {
+            uint8_t * loc_case_vector = data->case_vector + ( n_bases - 1 );
+            qual_ptr += ( n_bases - 1 );
+            rc = loop_through_base_calls( sg, data->gc_window, data->cycle_offset,
+                    read_ptr, n_bases, qual_ptr, loc_case_vector,
+                    base_pos_offset, row_id, -1 );
+
+        }
+        else
+        {
+            rc = loop_through_base_calls( sg, data->gc_window, data->cycle_offset,
+                    read_ptr, n_bases, qual_ptr, data->case_vector, 
+                    base_pos_offset, row_id, +1 );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t extract_statistic_from_row( statistic * data, const int64_t row_id )
+{
+    rc_t rc = 0;
+    spotgrp *sg;
+
+    /* first try the SPOT_GROUP column (correct for newer db's) */
+    const char * spotgrp_base  = data->rd_col[ RIDX_SPOT_GROUP ].base;
+    uint32_t spotgrp_len = data->rd_col[ RIDX_SPOT_GROUP ].row_len;
+    if ( spotgrp_len < 1 || *spotgrp_base == 0 )
+    {
+        /* if empty try with SEQ_SPOT_GROUP column (correct for older db's) */
+        spotgrp_base  = data->rd_col[ RIDX_SEQ_SPOT_GROUP ].base;
+        spotgrp_len = data->rd_col[ RIDX_SEQ_SPOT_GROUP ].row_len;
+    }
+
+    sg = find_spotgroup( data, spotgrp_base, spotgrp_len );
+    if ( sg == NULL )
+    {
+        sg = make_spotgrp( spotgrp_base, spotgrp_len );
+        if ( sg == NULL )
+        {
+            rc = RC( rcApp, rcSelf, rcConstructing, rcMemory, rcExhausted );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                     "make_spotgrp failed at row $(row_nr)", "row_nr=%lu", row_id ) );
+        }
+        else
+        {
+            rc = BSTreeInsert ( &data->spotgroups, (BSTNode *)sg, spotgroup_sort );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "BSTreeInsert( new spotgroup ) at row $(row_nr)", "row_nr=%lu", row_id ) );
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        uint32_t n_bases  = data->rd_col[ RIDX_READ ].row_len;
+        uint32_t qual_len = data->rd_col[ RIDX_QUALITY ].row_len;
+        uint32_t hmis_len = data->rd_col[ RIDX_HAS_MISMATCH ].row_len;
+
+        if ( ( n_bases == qual_len ) &&  ( n_bases == hmis_len ) )
+        {
+            rc = extract_spotgroup_statistic( data, sg, n_bases, row_id );
+        }
+        else
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "number of bases, quality and has_mismatch is not the same at row $(row_nr)",
+                 "row_nr=%lu", row_id ) );
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_and_extract_statistic_from_row( statistic * data, const VCursor *my_cursor, 
+                         const int64_t row_id )
+{
+    rc_t rc = read_cells( my_cursor, row_id, data->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        rc = extract_statistic_from_row( data, row_id );
+    }
+    return rc;
+}
+
+
+rc_t query_statistic_rowrange( statistic * data, const VCursor *my_cursor, 
+                               int64_t *first, uint64_t * count )
+{
+    rc_t rc = VCursorIdRange ( my_cursor, data->rd_col[ RIDX_READ ].idx, first, count );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorIdRange() failed\n" );
+    return rc;
+}
+
+
+rc_t open_statistic_cursor( statistic * data, const VCursor *my_cursor )
+{
+    rc_t rc = add_columns( my_cursor, data->rd_col, ridx_names, N_RIDX );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( my_cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed\n" );
+    }
+    return rc;
+}
+
+
+typedef struct iter_ctx
+{
+    bool ( CC * f ) ( stat_row * row, void *data );
+    void * data;
+    const char * name;
+    bool run;
+    stat_row row;
+    uint64_t n;
+} iter_ctx;
+
+
+static bool CC spotgroup_iter( BSTNode *n, void *data )
+{
+    spotgrp *sg = ( spotgrp * ) n;
+    iter_ctx *ctx = ( iter_ctx * )data;
+
+    ctx->row.spotgroup = (char *)sg->name->addr;
+    for ( ctx->row.quality = 0; ctx->row.quality < N_QUAL_VALUES && ctx->run; ++ctx->row.quality )
+    {
+        uint8_t dimer_nr;
+        for ( dimer_nr = 0; dimer_nr < N_DIMER_VALUES && ctx->run; ++dimer_nr )
+        {
+            ctx->row.dimer = (char *)dimer_2_ascii[ dimer_nr ];
+            for( ctx->row.gc_content = 0; ctx->row.gc_content < N_GC_VALUES; ++ctx->row.gc_content )
+            {
+                for ( ctx->row.hp_run = 0; ctx->row.hp_run < N_HP_VALUES && ctx->run; ++ctx->row.hp_run )
+                {
+                    uint32_t pos;
+                    counter_vector * cv = &sg->cnv[ dimer_nr ][ ctx->row.gc_content ][ ctx->row.hp_run ][ ctx->row.quality ];
+                    for ( pos = 0; pos < cv->n_counters; ++pos )
+                    {
+                        counter * c = &cv->v[ pos ];
+                        if ( c->count > 0 )
+                        {
+                            ctx->row.base_pos = pos;
+                            ctx->row.count = c->count;
+                            ctx->row.mismatch_count = c->mismatches;
+
+                            ctx->run = ctx->f( &ctx->row, ctx->data );
+                            ctx->n++;
+                         }
+                    }
+                }
+            }
+        }
+    }
+    return( !ctx->run );
+}
+
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data )
+{
+    iter_ctx ctx;
+    ctx.f = f;
+    ctx.data = f_data;
+    ctx.run = true;
+    ctx.n = 0;
+    BSTreeDoUntil ( &data->spotgroups, false, spotgroup_iter, &ctx );
+    return ctx.n;
+}
+
+
+/************** WRITER **********************************************/
+static rc_t open_writer_cursor( statistic_writer *writer )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    for ( idx = 0; idx < N_WIDX && rc == 0; ++idx )
+    {
+        rc = add_column( writer->cursor, &writer->wr_col[ idx ], widx_names[ idx ] );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( writer->cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed\n" );
+    }
+    return rc;
+}
+
+
+rc_t make_statistic_writer( statistic_writer *writer, VCursor * cursor )
+{
+    writer->cursor = cursor;
+    memset( &writer->wr_col, 0, sizeof writer->wr_col );
+    return open_writer_cursor( writer );
+}
+
+
+typedef struct writer_ctx
+{
+    statistic_writer *writer;
+    rc_t rc;
+} writer_ctx;
+
+
+static bool CC write_cb( stat_row * row, void * data )
+{
+    writer_ctx * ctx = ( writer_ctx * ) data;
+    col * cols = ( col * )&ctx->writer->wr_col;
+    VCursor * cursor = ctx->writer->cursor;
+  
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorOpen() failed\n" );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_SPOT_GROUP ].idx, 8,
+                              row->spotgroup, string_size( row->spotgroup ),
+                              widx_names[ WIDX_SPOT_GROUP ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_KMER ].idx, 8,
+                              row->dimer, string_size( row->dimer ),
+                              widx_names[ WIDX_KMER ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_ORIG_QUAL ].idx, 8,
+                              &row->quality, 1, widx_names[ WIDX_ORIG_QUAL ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_CYCLE ].idx, 32,
+                              &row->base_pos, 1, widx_names[ WIDX_CYCLE ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_TOTAL_COUNT ].idx, 32,
+                              &row->count, 1, widx_names[ WIDX_TOTAL_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_MISMATCH_COUNT ].idx, 32,
+                              &row->mismatch_count, 1,
+                              widx_names[ WIDX_MISMATCH_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_HPRUN ].idx, 32,
+                              &row->hp_run, 1, widx_names[ WIDX_HPRUN ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_GC_CONTENT ].idx, 32,
+                              &row->gc_content, 1, widx_names[ WIDX_GC_CONTENT ] );
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCommitRow() failed\n" );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCloseRow() failed\n" );
+    }
+
+    ctx->rc = rc;
+    return ( rc == 0 );
+}
+
+
+rc_t write_statistic( statistic_writer *writer, statistic *data,
+                      uint64_t * written )
+{
+    writer_ctx ctx;
+    uint64_t count;
+
+    ctx.writer = writer;
+    ctx.rc = 0;
+    count = foreach_statistic( data, write_cb, &ctx );
+    if ( written != NULL ) *written = count;
+
+    return ctx.rc;
+}
+
+
+rc_t whack_statistic_writer( statistic_writer *writer )
+{
+    rc_t rc = VCursorCommit( writer->cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorCommit() failed\n" );
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/stat_mod_1.h b/tools/qual-recalib-stat/stat_mod_1.h
new file mode 100644
index 0000000..82cfa1c
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod_1.h
@@ -0,0 +1,160 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_stat_mod_
+#define _h_stat_mod_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <vdb/cursor.h>
+#include "ref_exclude.h"
+#include "columns.h"
+#include "spot_position.h"
+
+#define N_QUAL_VALUES 41
+#define N_DIMER_VALUES 17
+#define N_GC_VALUES 16
+#define N_HP_VALUES 25
+#define COUNTER_BLOCK_SIZE 100
+
+#define RIDX_READ            0
+#define RIDX_QUALITY         1
+#define RIDX_HAS_MISMATCH    2
+#define RIDX_SEQ_SPOT_ID     3
+#define RIDX_SPOT_GROUP      4
+#define RIDX_SEQ_SPOT_GROUP  5
+#define RIDX_REF_ORIENTATION 6
+#define RIDX_READ_LEN        7
+#define RIDX_SEQ_READ_ID     8
+#define RIDX_HAS_REF_OFFSET  9
+#define RIDX_REF_OFFSET     10
+#define RIDX_REF_POS        11
+#define RIDX_REF_SEQ_ID     12
+#define RIDX_REF_LEN        13
+#define N_RIDX              14
+
+#define WIDX_SPOT_GROUP      0
+#define WIDX_KMER            1
+#define WIDX_ORIG_QUAL       2
+#define WIDX_TOTAL_COUNT     3
+#define WIDX_MISMATCH_COUNT  4
+#define WIDX_CYCLE           5
+#define WIDX_HPRUN           6
+#define WIDX_GC_CONTENT      7
+#define N_WIDX               8
+
+#define CASE_MATCH      0
+#define CASE_IGNORE     1
+#define CASE_MISMATCH   2
+
+
+typedef struct stat_row
+{
+    char * spotgroup;
+    char * dimer;
+    uint8_t quality;
+    uint32_t base_pos;
+    uint32_t count;
+    uint32_t mismatch_count;
+    uint8_t hp_run;
+    uint8_t gc_content;
+} stat_row;
+
+
+typedef struct statistic
+{
+    BSTree spotgroups;      /* the tree contains 'spotgrp'-node, it collects the statistic */
+    col rd_col[ N_RIDX ];   /* a list of vdb-columns, the input-data per read */
+
+    bool ref_exclude_used;  /* flag indicating that the (VARLOC) exclude-vector is in use */
+    bool ignore_mismatches;
+
+    ref_exclude exclude;
+    uint32_t gc_window;
+    uint8_t cycle_offset;
+
+    uint8_t *exclude_vector;
+    uint32_t exclude_vector_len;
+    uint32_t active_exclusions;
+
+    uint8_t *case_vector;
+    uint32_t case_vector_len;
+
+    void * last_used_spotgroup;
+
+    spot_pos * sequence;
+} statistic;
+
+
+typedef struct statistic_writer
+{
+    VCursor *cursor;
+    col wr_col[ N_WIDX ];
+} statistic_writer;
+
+
+/*************** the READER ***************/
+rc_t make_statistic( statistic *data,
+                     uint32_t gc_window, uint8_t cycle_offset,
+                     KDirectory *dir, const char * exclude_db,
+                     bool info, bool ignore_mismatches );
+
+void set_spot_pos_statistic( statistic *data, spot_pos * sequence );
+
+rc_t open_statistic_cursor( statistic * data, const VCursor *my_cursor );
+
+rc_t query_statistic_rowrange( statistic * data, const VCursor *my_cursor, 
+                               int64_t *first, uint64_t * count );
+
+rc_t read_and_extract_statistic_from_row( statistic * data,
+                const VCursor *my_cursor, const int64_t row_id );
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data );
+
+void whack_statistic( statistic *data );
+
+
+/*************** the WRITER ***************/
+rc_t make_statistic_writer( statistic_writer *writer, VCursor * cursor );
+
+rc_t write_statistic( statistic_writer *writer, statistic *data,
+                      uint64_t * written );
+
+rc_t whack_statistic_writer( statistic_writer *writer );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/stat_mod_2.c b/tools/qual-recalib-stat/stat_mod_2.c
new file mode 100644
index 0000000..a9d1f92
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod_2.c
@@ -0,0 +1,1041 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "stat_mod_2.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+
+typedef struct counter
+{
+    uint32_t mismatches;
+    uint32_t count;
+} counter;
+
+
+typedef struct counter_vector
+{
+    counter *v;
+    uint32_t n_counters;
+} counter_vector;
+
+#define USE_JUDY 1
+
+typedef struct spotgrp
+{
+    BSTNode node;
+    const String *name;
+#ifdef USE_JUDY
+    KVector *v;
+#else
+    counter_vector cnv[ N_MAX_QUAL_VALUES ][ N_READS ][ N_DIMER_VALUES ][ N_GC_VALUES ][ N_HP_VALUES ][ N_QUAL_VALUES ];
+#endif
+} spotgrp;
+
+
+static const uint8_t char_2_base_bin[26] =
+{
+   /* A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z*/
+      0, 4, 1, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4
+};
+
+
+/*
+    AA ...  0       CA ...  5       GA ... 10       TA ... 15       NA ... 20
+    AC ...  1       CC ...  6       GC ... 11       TC ... 16       NC ... 21
+    AG ...  2       CG ...  7       GG ... 12       TG ... 17       NG ... 22
+    AT ...  3       CT ...  8       GT ... 13       TT ... 18       NT ... 23
+    AN ...  4       CN ...  9       GN ... 14       TN ... 19       NN ... 24
+
+    dimer-code = ( lookup( co ) * 5 ) + lookup( c1 )
+    dimer-code = 0 ... 24
+*/
+static uint8_t dimer_2_bin( char c0, char c1 )
+{
+    uint8_t lookup0, lookup1;
+
+    if ( c0 >= 'A' && c0 <= 'Z' )
+    {
+        lookup0 = char_2_base_bin[ (uint8_t)( c0 - 'A' ) ];
+    }
+    else
+    {
+        lookup0 = 4;
+    }
+
+    if ( c1 >= 'A' && c1 <= 'Z' )
+    {
+        lookup1 = char_2_base_bin[ (uint8_t)( c1 - 'A' ) ];
+    }
+    else
+    {
+        lookup1 = 4;
+    }
+
+    return ( ( lookup0 << 2 ) + lookup0 ) + lookup1;
+}
+
+static const char * dimer_2_ascii[] = 
+{ "AA", "AC", "AG", "AT", "AN",
+  "CA", "CC", "CG", "CT", "CN",
+  "GA", "GC", "GG", "GT", "GN",
+  "TA", "TC", "TG", "TT", "TN",
+  "NA", "NC", "NG", "NT", "NN" };
+
+/********************************************************************************
+  6666.5555.5555.5544.4444.4444.3333.3333.3322.2222.2222.1111.1111.1100.0000.0000
+  3210.9876.5432.1098.7654.3210.9876.5432.1098.7654.3210.9876.5432.1098.7654.3210
+  CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC RRRR RRDD DDDG GGGH HHHH MMMM MMQQ QQQQ
+
+  C ... cycle ( 32 bit )
+  R ... nread ( 6 bit )
+  D ... dimer ( 5 bit )
+  G ... gc-content ( 4 bit )
+  H ... hp-run ( 5 bit )
+  M ... max. qual ( 6 bit )
+  Q ... quality ( 6 bit )
+*********************************************************************************/
+#ifdef USE_JUDY
+
+static uint64_t encode_key( const uint32_t pos,
+                            const uint8_t max_q,
+                            const uint8_t nread,
+                            const uint8_t dimer,
+                            const uint8_t gc,
+                            const uint8_t hp,
+                            const uint8_t qual )
+{
+    uint64_t res = pos;
+    res <<= 6;
+    res |= ( nread & 0x3F );
+    res <<= 5;
+    res |= ( dimer & 0x1F );
+    res <<= 4;
+    res |= ( gc & 0xF );
+    res <<= 5;
+    res |= ( hp & 0x1F );
+    res <<= 6;
+    res |= ( max_q & 0x3F );
+    res <<= 6;
+    res |= ( qual & 0x3F );
+    return res;
+}
+
+
+static void decode_key( const uint64_t key,
+                        uint32_t *pos,
+                        uint8_t *max_q,
+                        uint8_t *nread,
+                        uint8_t *dimer,
+                        uint8_t *gc,
+                        uint8_t *hp,
+                        uint8_t *qual )
+{
+    uint64_t temp = key;
+    *qual = temp & 0x3F;
+    temp >>= 6;
+    *max_q = temp & 0x3F;
+    temp >>= 6;
+    *hp = temp & 0x1F;
+    temp >>= 5;
+    *gc = temp & 0xF;
+    temp >>= 4;
+    *dimer = temp & 0x1F;
+    temp >>= 5;
+    *nread = temp & 0x3F;
+    temp >>= 6;
+    *pos = temp & 0xFFFFFFFF;
+}
+
+
+typedef struct two_counters
+{
+    uint32_t total;
+    uint32_t mismatch;
+} two_counters;
+
+typedef union counter_union
+{
+    uint64_t value;
+    two_counters counters;
+} counter_union;
+
+
+static bool set_counter( KVector *v,
+                         const uint32_t pos,
+                         const uint8_t max_q,
+                         const uint8_t nread,
+                         const uint8_t dimer,
+                         const uint8_t gc,
+                         const uint8_t hp,
+                         const uint8_t qual,
+                         bool mismatch )
+{
+    bool res = false;
+    counter_union u;
+    uint64_t key = encode_key( pos, max_q, nread, dimer, gc, hp, qual );
+    if ( KVectorGetU64 ( v, key, &(u.value) ) == 0 )
+    {
+        u.counters.total++;
+        if ( mismatch )
+        {
+            u.counters.mismatch++;
+        }
+    }
+    else
+    {
+        u.counters.total = 1;
+        res = true;
+        if ( mismatch )
+        {
+            u.counters.mismatch = 1;
+        }
+        else
+        {
+            u.counters.mismatch = 0;
+        }
+    }
+    KVectorSetU64 ( v, key, u.value );
+    return res;
+}
+
+#if 0
+static void get_counter( KVector *v,
+                         const uint32_t pos,
+                         const uint8_t max_q,
+                         const uint8_t nread,
+                         const uint8_t dimer,
+                         const uint8_t gc,
+                         const uint8_t hp,
+                         const uint8_t qual,
+                         uint32_t *total,
+                         uint32_t *mismatch )
+{
+    counter_union u;
+    uint64_t key = encode_key( pos, max_q, nread, dimer, gc, hp, qual );
+    if ( KVectorGetU64 ( v, key, &(u.value) ) == 0 )
+    {
+        *total = u.counters.total;
+        *mismatch = u.counters.mismatch;
+    }
+    else
+    {
+        *total = 0;
+        *mismatch = 0;
+    }
+}
+#endif
+
+#endif
+
+/******************************************************************************
+    for the spot-group ( tree-node ), contains a tree of counter's
+******************************************************************************/
+static void CC whack_spotgroup( BSTNode *n, void *data )
+{
+    spotgrp * sg = ( spotgrp * )n;
+
+#ifdef USE_JUDY
+    KVectorRelease ( sg->v );
+#else
+    uint32_t idx, count;
+    count = ( ( sizeof sg->cnv ) / sizeof( sg->cnv[0] ) );
+    for ( idx = 0; idx < count; ++idx )
+    {
+        counter_vector * cv = (counter_vector *)&( sg->cnv[ idx ] );
+        if ( cv->v != NULL )
+        {
+            free( cv->v );
+        }
+    }
+#endif
+
+    if ( sg->name != NULL )
+        StringWhack ( sg->name );
+    free( n );
+}
+
+
+static spotgrp * make_spotgrp( const char *src, const size_t len )
+{
+    spotgrp * sg = calloc( 1, sizeof sg[ 0 ] );
+    if ( sg != NULL )
+    {
+        String s;
+        StringInit( &s, src, len, len );
+        if ( StringCopy ( &sg->name, &s ) != 0 )
+        {
+            free( sg );
+            sg = NULL;
+        }
+#ifdef USE_JUDY
+        else
+        {
+            KVectorMake ( &sg->v );
+        }
+#endif
+    }
+    return sg;
+}
+
+
+static int64_t CC spotgroup_find( const void *item, const BSTNode *n )
+{
+    spotgrp * sg = ( spotgrp* ) n;
+    return StringCompare ( ( String* ) item, sg->name );
+}
+
+
+static spotgrp * find_spotgroup( statistic *data, const char *src, const size_t len )
+{
+    String s;
+    BSTNode *node;
+
+    StringInit( &s, src, len, len );
+    if ( data->last_used_spotgroup != NULL )
+    {
+        spotgrp * sg = ( spotgrp* )data->last_used_spotgroup;
+        if ( StringCompare ( &s, sg->name ) == 0 )
+            return sg;
+    }
+
+    node = BSTreeFind ( &data->spotgroups, &s, spotgroup_find );
+    if ( node == NULL )
+        return NULL;
+    else
+    {
+        data->last_used_spotgroup = node;
+        return ( spotgrp *) node;
+    }
+}
+
+
+static rc_t spotgroup_enter_values( spotgrp * spotgroup,
+                                    uint64_t *entries,
+                                    const uint8_t quality,
+                                    const uint8_t dimer_code,
+                                    const uint8_t gc_content,
+                                    const uint8_t hp_run,
+                                    const uint8_t max_quality,
+                                    const uint8_t n_read,
+                                    const uint32_t cycle,
+                                    const uint8_t rd_case,
+                                    const uint64_t row_id )
+{
+    rc_t rc = 0;
+    uint8_t q = quality;
+    uint8_t d = dimer_code;
+    uint8_t g = gc_content;
+    uint8_t h = hp_run;
+    uint8_t m = max_quality;
+    uint8_t n = n_read;
+
+#ifdef USE_JUDY
+    bool mismatch;
+#else
+    counter_vector * cv;
+#endif
+
+    if ( q >= N_QUAL_VALUES ) q = ( N_QUAL_VALUES - 1 );
+    if ( d >= N_DIMER_VALUES ) d = ( N_DIMER_VALUES - 1 );
+    if ( g >= N_GC_VALUES ) g = ( N_GC_VALUES - 1 );
+    if ( h >= N_HP_VALUES ) h = ( N_HP_VALUES - 1 );
+    if ( m >= N_MAX_QUAL_VALUES ) m = ( N_MAX_QUAL_VALUES - 1 );
+    if ( n >= N_READS ) n = ( N_READS - 1 );
+
+
+#ifdef USE_JUDY
+    mismatch = false;
+    switch( rd_case )
+    {
+        case CASE_MISMATCH : mismatch = true; /* no break intented! */
+        case CASE_MATCH    : if ( set_counter( spotgroup->v, cycle, m, n, d, g, h, q, mismatch ) )
+                             {
+                                (*entries)++;
+                             }
+                             break;
+    }
+#else
+    cv = &( spotgroup->cnv[ m ][ n ][ d ][ g ][ h ][ q ] );
+
+    if ( cv->v ==  NULL )
+    {
+        /* the counter-block was not used before at all */
+        cv->n_counters = ( ( cycle / COUNTER_BLOCK_SIZE ) + 1 ) * COUNTER_BLOCK_SIZE;
+        cv->v = calloc( cv->n_counters, sizeof cv->v[0] );
+        if ( cv->v == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                     "calloc() failed at row#$(row_nr) cycle#$(cycle)",
+                     "row_nr=%lu,cycle=%u", row_id, cycle ) );
+        }
+    }
+    else
+    {
+        if ( cycle >= cv->n_counters )
+        {
+            /* the counter-block has to be extended */
+            void * tmp;
+            uint32_t org_len = cv->n_counters;
+            cv->n_counters = ( ( cycle / COUNTER_BLOCK_SIZE ) + 1 ) * COUNTER_BLOCK_SIZE;
+            /* prevent from leaking memory by capturing the new pointer in temp. var. */
+            tmp = realloc( cv->v, cv->n_counters * ( sizeof cv->v[0] ) );
+            if ( tmp == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                PLOGERR( klogInt, ( klogInt, rc, 
+                         "realloc() failed at row#$(row_nr) cycle#$(cycle)",
+                         "row_nr=%lu,cycle=%u", row_id, cycle ) );
+            }
+            else
+            {
+                /* the added part has to be set to zero */
+                counter * to_zero_out = tmp;
+                to_zero_out += org_len;
+                memset( to_zero_out, 0, ( cv->n_counters - org_len ) * ( sizeof *to_zero_out ) );
+                cv->v = tmp;
+            }
+        }
+    }
+    assert( cycle < cv->n_counters );
+
+    if ( rc == 0 )
+    {
+        counter * cnt = &( cv->v[ cycle ] );
+        switch( rd_case )
+        {
+            case CASE_MISMATCH : cnt->mismatches++; /* no break intented! */
+            case CASE_MATCH    : if ( cnt->count == 0 )
+                                 {
+                                    (*entries)++;
+                                 }
+                                 cnt->count++;
+                                 break;
+        }
+    }
+#endif
+    return rc;
+}
+
+
+static int64_t CC spotgroup_sort( const BSTNode *item, const BSTNode *n )
+{
+    spotgrp * sg1 = ( spotgrp* ) item;
+    spotgrp * sg2 = ( spotgrp* ) n;
+    return StringCompare ( sg1->name, sg2->name );
+}
+
+
+/******************************************************************************
+    for the statistic ( tree-node ), contains a tree of spot-groups's
+******************************************************************************/
+static rc_t make_vector( void ** ptr, uint32_t *len, uint32_t new_len )
+{
+    rc_t rc = 0;
+
+    *len = new_len;
+    *ptr = calloc( 1, new_len );
+    if ( *ptr == NULL )
+    {
+        *len = 0;
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        LogErr( klogInt, rc, "failed to make large enough exclude-vector\n" );
+    }
+    return rc;
+}
+
+
+rc_t make_statistic( statistic *data,
+                     uint32_t gc_window,
+                     bool ignore_mismatches )
+{
+    rc_t rc = 0;
+    memset( data, 0, sizeof *data );
+    BSTreeInit( &data->spotgroups );
+    data->last_used_spotgroup = NULL;
+    data->ignore_mismatches = ignore_mismatches;
+    data->gc_window = gc_window;
+    if ( data->gc_window >= N_GC_VALUES )
+    {
+        data->gc_window = ( N_GC_VALUES - 1 );
+    }
+    if ( rc == 0 )
+    {
+        rc = make_vector( (void**)&data->case_vector, &data->case_vector_len, 512 );
+    }
+    return rc;
+}
+
+
+void whack_statistic( statistic *data )
+{
+    BSTreeWhack ( &data->spotgroups, whack_spotgroup, NULL );
+    if ( data->case_vector != NULL )
+    {
+        free( data->case_vector );
+    }
+}
+
+
+static rc_t expand_and_clear_vector( void **v, uint32_t *len, uint32_t new_len, bool clear )
+{
+    rc_t rc = 0;
+    if ( *v != NULL )
+    {
+        if ( *len < new_len )
+        {
+            *len += new_len;
+            *v = realloc( *v, *len );
+            if ( *v == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                LogErr( klogInt, rc, "failed to expand (uint8_t)vector\n" );
+            }
+        }
+        if ( rc == 0 && clear )
+            memset( *v, 0, *len ); 
+    }
+    return rc;
+}
+
+#if 0
+static rc_t walk_exclude_vector( statistic * data,
+                                 uint32_t n_bases,
+                                 row_input * row_data )
+{
+    rc_t rc = 0;
+
+    if ( row_data->has_roffs_len != n_bases || 
+         row_data->has_mismatch_len != n_bases )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        LogErr( klogInt, rc, "number of bases does not match length of HAS_REF_OFFSET or HAS_MISMATCH\n" );
+    }
+    else
+    {
+        /* we count how many REF_OFFSETS have to be there... */
+        uint32_t hro_count = 0;
+        uint32_t idx;
+        for ( idx = 0; idx < n_bases; ++idx )
+        {
+            if ( row_data->has_roffs[ idx ] )
+                hro_count++;
+        }
+        if ( hro_count != row_data->roffs_len )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            LogErr( klogInt, rc, "number of HAS_REF_OFFSET=1 does not match length of REF_OFFSET\n" );
+        }
+    }
+
+    /* */
+    if ( rc == 0 )
+    {
+        int32_t ref_idx = 0;
+        uint32_t base_idx;
+        uint32_t roffs_idx = 0;
+
+        /* walk backwards from the end to apply right-clipping */
+        assert( n_bases > 0 );
+        base_idx = n_bases - 1;
+        while ( base_idx > 0 && row_data->has_mismatch[ base_idx ] )
+        {
+            data->case_vector[ base_idx-- ] = CASE_IGNORE;
+            n_bases--;
+        }
+
+        base_idx = 0;
+        while ( ref_idx < (int32_t)row_data->exclude_len && base_idx < n_bases )
+        {
+            /* before we handle the reference, apply the ref-offset to the
+               iterator ( in this case: ref_idx ) */
+            if ( row_data->has_roffs[ base_idx ] )
+            {
+                int32_t roffs_value = row_data->roffs[ roffs_idx++ ];
+                /* this handles the left-clipping and inserts */
+                if ( roffs_value < 0 )
+                {
+                    while( roffs_value++ < 0 )
+                    {
+                        data->case_vector[ base_idx++ ] = CASE_IGNORE;
+                    }
+                }
+                else
+                {
+                    ref_idx += roffs_value;
+                }
+            }
+            assert( ref_idx >= 0 );
+            /* right now ref_idx and base_idx points to corresponding positions */
+
+            /* all the calculation is only done to put the IGNORE-flags
+               into the right base-position (if necessary): */
+            if ( row_data->exclude[ ref_idx++ ] > 0 )
+            {
+                data->case_vector[ base_idx ] = CASE_IGNORE;
+            }
+            else
+            {
+                /* enter the mis-matches into the case-vector */
+                if ( row_data->has_mismatch[ base_idx ] )
+                {
+                    data->case_vector[ base_idx ] = CASE_MISMATCH;
+                }
+            }
+            ++base_idx;
+        }
+    }
+    return rc;
+}
+#endif
+
+static rc_t loop_through_base_calls( spotgrp *sg,
+                        uint64_t *entries,
+                        uint32_t gc_window,
+                        char * read_ptr,    /* points at begin of array */
+                        uint32_t n_bases,
+                        uint8_t * qual_ptr, /* points at begin of array */
+                        uint8_t * case_ptr, /* points at begin of array */
+                        uint32_t base_pos_offset,
+                        uint8_t n_read,     /* the number of the read (0/1) */
+                        const int64_t row_id,
+                        const int32_t ofs )
+{
+    rc_t rc = 0;
+    uint32_t base_pos;
+    char prev_char;
+    char * gc_ptr = read_ptr;
+    uint8_t gc_content = 0;
+    uint8_t hp_run = 0;
+    uint8_t max_qual_value = 0;
+    bool enter_value;
+    uint8_t *saved_qual_ptr = qual_ptr;
+
+    /* calculate the max. quality value, befor we loop through the bases a 2nd time */
+    for ( base_pos = 0; base_pos < n_bases; ++base_pos )
+    {
+        if ( max_qual_value < *qual_ptr )
+        {
+            max_qual_value = *qual_ptr;
+        }
+        qual_ptr += ofs; /* because of going from forward or reverse */
+    }
+    /* restore qual_ptr */
+    qual_ptr = saved_qual_ptr;
+
+    prev_char = 'N';
+    for ( base_pos = 0; base_pos < n_bases && rc == 0; ++base_pos )
+    {
+        /* calculate the hp-run-count */
+        if ( prev_char == *read_ptr )
+        {
+            hp_run++;
+            assert( hp_run <= n_bases );
+        }
+        else
+        {
+            hp_run = 0;
+        }
+
+        /* advance the "window" */
+        if ( base_pos >= ( gc_window + 1 ) )
+        {
+            if ( *gc_ptr == 'G' || *gc_ptr == 'C' )
+            {
+                assert( gc_content > 0 );
+                gc_content--;
+            }
+            gc_ptr++;
+        }
+
+        if ( case_ptr != NULL )
+        {
+            enter_value = ( case_ptr[0] != CASE_IGNORE && case_ptr[ofs] != CASE_IGNORE );
+        }
+        else
+        {
+            enter_value = true;
+        }
+
+        if ( enter_value )
+        {
+            uint8_t case_value = CASE_MATCH;
+            if ( case_ptr != NULL )
+            {
+                case_value = case_ptr[ 1 ];
+            }
+            rc = spotgroup_enter_values( sg, entries,
+                                         *qual_ptr,
+                                         dimer_2_bin( prev_char, *read_ptr ),
+                                         gc_content,
+                                         hp_run,
+                                         max_qual_value,
+                                         n_read,
+                                         base_pos + base_pos_offset,
+                                         case_value,
+                                         row_id );
+        }
+
+        /* handle the current base-position after the record was entered
+           because we do not include the current base into the gc-content */
+        if ( *read_ptr == 'G' || *read_ptr == 'C' )
+            gc_content++;
+
+        qual_ptr += ofs;
+        prev_char = *read_ptr;
+        read_ptr++;
+        if ( case_ptr != NULL )
+        {
+            case_ptr += ofs;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t extract_spotgroup_statistic( statistic * data,
+                                         spotgrp *sg,
+                                         uint32_t n_bases,
+                                         row_input * row_data,
+                                         const int64_t row_id )
+{
+    /* (1) ... make the case-vector longer if necessary */
+    rc_t rc = expand_and_clear_vector( (void**)&data->case_vector,
+                                      &data->case_vector_len,
+                                      n_bases,
+                                      true );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc, 
+                           "expand_and_clear_vector( case_vector ) failed at row $(row_nr)",
+                           "row_nr=%lu", row_id ) );
+    }
+    
+#if 1
+    if (rc == 0 && !data->ignore_mismatches) {
+        unsigned si;
+        unsigned ri;
+        unsigned j;
+        
+        for (si = ri = j = 0; si < n_bases && ri < row_data->ref_len; ) {
+            if (row_data->has_roffs[si]) {
+                int const offset = row_data->roffs[j++];
+                
+                if (offset < 0) {
+                    unsigned const n = -offset;
+                    unsigned k;
+
+                    /* set inserts to ignore (handles left soft clip) */
+                    for (k = 0; k < n && si + k < n_bases; ++k)
+                        data->case_vector[si + k] = CASE_IGNORE;
+                    si += k;
+                    continue;
+                }
+                ri += offset;
+            }
+            if (row_data->read[si] == 'N' || (row_data->exclude && row_data->exclude[ri]))
+                data->case_vector[si] = CASE_IGNORE;
+            else if (row_data->has_mismatch[si])
+                data->case_vector[si] = CASE_MISMATCH;
+            else
+                data->case_vector[si] = CASE_MATCH;
+            ++si;
+            ++ri;
+        }
+        /* handle right soft clip */
+        for ( ; si < n_bases; ++si)
+            data->case_vector[si] = CASE_IGNORE;
+    }
+#else
+    /* (2) ... get the exclusion-list for this read */
+    if ( row_data->exclude != NULL )
+    {
+        /* (3) ... walk the exclusion-list and Mismatch-vector to build the case-vector */
+        if ( rc == 0 )
+        {
+            rc = walk_exclude_vector( data, n_bases, row_data );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "walk_exclude_vector failed at row $(row_nr)",
+                     "row_nr=%lu", row_id ) );
+            }
+        }
+    }
+    else
+    {
+        if ( !data->ignore_mismatches )
+        {
+            uint32_t base_idx;
+            
+            for ( base_idx = 0;
+                  base_idx < n_bases && base_idx < row_data->has_mismatch_len;
+                  ++base_idx )
+            {
+                if ( row_data->has_mismatch[ base_idx ] )
+                {
+                    data->case_vector[ base_idx ] = CASE_MISMATCH;
+                }
+            }
+            /* handle left soft clip */
+            for ( base_idx = 0;
+                 base_idx < n_bases && base_idx < row_data->has_mismatch_len;
+                 ++base_idx )
+            {
+                if (!row_data->has_mismatch[base_idx]) {
+                    break;
+                }
+                data->case_vector[base_idx] = CASE_IGNORE;
+            }
+            /* handle right soft clip */
+            for ( base_idx = 0;
+                 base_idx < n_bases && base_idx < row_data->has_mismatch_len;
+                 ++base_idx )
+            {
+                if (!row_data->has_mismatch[row_data->has_mismatch_len - base_idx - 1]) {
+                    break;
+                }
+                data->case_vector[row_data->has_mismatch_len - base_idx - 1] = CASE_IGNORE;
+            }
+        }
+    }
+#endif
+
+    /* (4) ... looping throuhg the bases ( forward/backward ) */
+    if ( rc == 0 )
+    {
+        uint8_t *qual_ptr = row_data->quality;
+        if ( row_data->reversed )
+        {
+            uint8_t * loc_case_vector = data->case_vector + ( n_bases - 1 );
+            qual_ptr += ( n_bases - 1 );
+            rc = loop_through_base_calls( sg, &data->entries,
+                    data->gc_window, row_data->read, n_bases, qual_ptr, loc_case_vector,
+                    row_data->base_pos_offset, row_data->seq_read_id - 1, row_id, -1 );
+
+        }
+        else
+        {
+            rc = loop_through_base_calls( sg, &data->entries,
+                    data->gc_window, row_data->read, n_bases, qual_ptr, data->case_vector, 
+                    row_data->base_pos_offset, row_data->seq_read_id - 1, row_id, +1 );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        if ( n_bases > data->max_cycle )
+        {
+            data->max_cycle = n_bases;
+        }
+    }
+
+    return rc;
+}
+
+
+rc_t extract_statistic_from_row( statistic * data, 
+                                 row_input * row_data,
+                                 const int64_t row_id )
+{
+    rc_t rc = 0;
+    spotgrp *sg;
+
+    /* first try the SPOT_GROUP column (correct for newer db's) */
+    char * spotgrp_base = row_data->spotgroup;
+    uint32_t spotgrp_len = row_data->spotgroup_len;
+    /* first try the SPOT_GROUP column (correct for newer db's) */
+    if ( spotgrp_len < 1 || *spotgrp_base == 0 )
+    {
+        /* if empty try with SEQ_SPOT_GROUP column (correct for older db's) */
+        spotgrp_base  = row_data->seq_spotgroup;
+        spotgrp_len = row_data->seq_spotgroup_len;
+    }
+
+    sg = find_spotgroup( data, spotgrp_base, spotgrp_len );
+    if ( sg == NULL )
+    {
+        sg = make_spotgrp( spotgrp_base, spotgrp_len );
+        if ( sg == NULL )
+        {
+            rc = RC( rcApp, rcSelf, rcConstructing, rcMemory, rcExhausted );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                     "make_spotgrp failed at row $(row_nr)", "row_nr=%lu", row_id ) );
+        }
+        else
+        {
+            rc = BSTreeInsert ( &data->spotgroups, (BSTNode *)sg, spotgroup_sort );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc, 
+                     "BSTreeInsert( new spotgroup ) at row $(row_nr)", "row_nr=%lu", row_id ) );
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        uint32_t n_bases  = row_data->read_len;
+
+        if ( ( n_bases == row_data->quality_len ) &&
+             ( n_bases == row_data->has_mismatch_len ) )
+        {
+            rc = extract_spotgroup_statistic( data, sg, n_bases, row_data, row_id );
+        }
+        else
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+            PLOGERR( klogInt, ( klogInt, rc, 
+                 "number of bases, quality and has_mismatch is not the same at row $(row_nr)",
+                 "row_nr=%lu", row_id ) );
+        }
+    }
+    return rc;
+}
+
+
+typedef struct iter_ctx
+{
+    bool ( CC * f ) ( stat_row * row, void *data );
+    void * data;
+    const char * name;
+    bool run;
+    stat_row row;
+    uint64_t n;
+    uint32_t max_cycle;
+} iter_ctx;
+
+
+#ifdef USE_JUDY
+static rc_t CC counter_visit( uint64_t key, uint64_t value, void * data )
+{
+    uint8_t q, dimer, gc, hp, mq, nr;
+    uint32_t pos;
+    iter_ctx *ctx = ( iter_ctx * )data;
+    counter_union u;
+
+    decode_key( key, &pos, &mq, &nr, &dimer, &gc, &hp, &q );
+    u.value = value;
+
+    ctx->row.dimer = (char *)dimer_2_ascii[ dimer ];
+    ctx->row.quality = q;
+    ctx->row.gc_content = gc;
+    ctx->row.hp_run = hp;
+    ctx->row.max_qual_value = mq;
+    ctx->row.n_read = nr;
+    ctx->row.base_pos = pos;
+    ctx->row.count = u.counters.total;
+    ctx->row.mismatch_count = u.counters.mismatch;
+
+    ctx->run = ctx->f( &ctx->row, ctx->data );
+    ctx->n++;
+    return 0;
+}
+#endif
+
+
+static bool CC spotgroup_iter( BSTNode *n, void *data )
+{
+    spotgrp *sg = ( spotgrp * ) n;
+    iter_ctx *ctx = ( iter_ctx * )data;
+
+#ifndef USE_JUDY
+    uint8_t q, dimer, gc, hp, mq, nr;
+    uint32_t pos;
+#endif
+
+    ctx->row.spotgroup = (char *)sg->name->addr;
+
+#ifdef USE_JUDY
+    KVectorVisitU64 ( sg->v, false, counter_visit, data );
+#else
+    for ( pos = 0; pos <= ctx->max_cycle; ++pos )
+    {
+        for ( nr = 0; nr < N_READS; ++nr )
+        {
+            for ( dimer = 0; dimer < N_DIMER_VALUES; ++dimer )
+            {
+                for( gc = 0; gc < N_GC_VALUES; ++gc )
+                {
+                    for ( hp = 0; hp < N_HP_VALUES; ++hp )
+                    {
+                        for ( mq = 0; mq < N_MAX_QUAL_VALUES; ++mq )
+                        {
+                            for ( q = 0; q < N_QUAL_VALUES; ++q )
+                            {
+                                counter_vector * cv = &sg->cnv[ mq ][ nr ][ dimer ][ gc ][ hp ][ q ];
+                                if ( cv != NULL )
+                                {
+                                    if ( pos < cv->n_counters )
+                                    {
+                                        counter * c = &cv->v[ pos ];
+                                        if ( c->count > 0 )
+                                        {
+                                            ctx->row.dimer = (char *)dimer_2_ascii[ dimer ];
+                                            ctx->row.quality = q;
+                                            ctx->row.gc_content = gc;
+                                            ctx->row.hp_run = hp;
+                                            ctx->row.max_qual_value = mq;
+                                            ctx->row.n_read = nr;
+                                            ctx->row.base_pos = pos;
+                                            ctx->row.count = c->count;
+                                            ctx->row.mismatch_count = c->mismatches;
+
+                                            ctx->run = ctx->f( &ctx->row, ctx->data );
+                                            ctx->n++;
+                                         }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+#endif
+
+    return( !ctx->run );
+}
+
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data )
+{
+    iter_ctx ctx;
+    ctx.n = 0;
+    if ( f != NULL )
+    {
+        ctx.f = f;
+        ctx.data = f_data;
+        ctx.max_cycle = data->max_cycle;
+        ctx.run = true;
+        BSTreeDoUntil ( &data->spotgroups, false, spotgroup_iter, &ctx );
+    }
+    return ctx.n;
+}
diff --git a/tools/qual-recalib-stat/stat_mod_2.h b/tools/qual-recalib-stat/stat_mod_2.h
new file mode 100644
index 0000000..cc19d3a
--- /dev/null
+++ b/tools/qual-recalib-stat/stat_mod_2.h
@@ -0,0 +1,141 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_stat_mod_
+#define _h_stat_mod_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/vector.h>
+#include <vdb/cursor.h>
+#include "columns.h"
+
+#define N_QUAL_VALUES 41
+#define N_DIMER_VALUES 25
+#define N_GC_VALUES 8
+#define N_HP_VALUES 8
+#define N_READS 2
+#define N_MAX_QUAL_VALUES 41
+#define COUNTER_BLOCK_SIZE 100
+
+#define CASE_MATCH      0
+#define CASE_IGNORE     1
+#define CASE_MISMATCH   2
+
+
+typedef struct row_input
+{
+    char * spotgroup;
+    uint32_t spotgroup_len;
+
+    char * seq_spotgroup;
+    uint32_t seq_spotgroup_len;
+
+    char * read;
+    uint32_t read_len;
+
+    uint8_t * quality;
+    uint32_t quality_len;
+
+    bool * has_mismatch;
+    uint32_t has_mismatch_len;
+
+    bool * has_roffs;
+    uint32_t has_roffs_len;
+
+    int32_t * roffs;
+    uint32_t roffs_len;
+
+    uint8_t * exclude;
+    uint32_t exclude_len;
+
+    bool reversed;
+    uint32_t seq_read_id;
+    uint32_t spot_id;
+    uint32_t base_pos_offset;
+    uint32_t ref_len;
+} row_input;
+
+
+typedef struct stat_row
+{
+    char * spotgroup;
+    char * dimer;
+    uint8_t quality;
+    uint32_t base_pos;
+    uint32_t count;
+    uint32_t mismatch_count;
+    uint8_t hp_run;
+    uint8_t gc_content;
+    uint8_t max_qual_value;
+    uint8_t n_read;
+} stat_row;
+
+
+typedef struct statistic
+{
+    BSTree spotgroups;      /* the tree contains 'spotgrp'-node, it collects the statistic */
+
+    bool ignore_mismatches;
+
+    uint32_t gc_window;
+
+    uint8_t *case_vector;
+    uint32_t case_vector_len;
+
+    void * last_used_spotgroup;
+    uint64_t entries;
+    uint32_t max_cycle;
+} statistic;
+
+
+/*************** the STATISTIC GATHERER ***************/
+rc_t make_statistic( statistic *data,
+                     uint32_t gc_window,
+                     bool ignore_mismatches );
+
+
+rc_t extract_statistic_from_row( statistic * data, 
+                                 row_input * row_data,
+                                 const int64_t row_id );
+
+uint64_t foreach_statistic( statistic * data,
+    bool ( CC * f ) ( stat_row * row, void * f_data ), void *f_data );
+
+void whack_statistic( statistic *data );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/qual-recalib-stat/writer.c b/tools/qual-recalib-stat/writer.c
new file mode 100644
index 0000000..b133358
--- /dev/null
+++ b/tools/qual-recalib-stat/writer.c
@@ -0,0 +1,480 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "writer.h"
+
+#include <klib/printf.h>
+#include <klib/progressbar.h>
+#include <kfs/file.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static const char * widx_names[ N_WIDX ] =
+{
+    "SPOT_GROUP",
+    "KMER",
+    "ORIG_QUAL",
+    "TOTAL_COUNT",
+    "MISMATCH_COUNT",
+    "CYCLE",
+    "HPRUN",
+    "GC_CONTENT",
+    "MAX_QUAL",
+    "NREAD"
+};
+
+
+static rc_t open_writer_cursor( statistic_writer *writer )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+
+    for ( idx = 0; idx < N_WIDX && rc == 0; ++idx )
+    {
+        rc = add_column( writer->cursor, &writer->wr_col[ idx ], widx_names[ idx ] );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen ( writer->cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorOpen failed\n" );
+    }
+    return rc;
+}
+
+
+static rc_t make_statistic_writer( statistic_writer *writer, VCursor * cursor )
+{
+    memset( &writer->wr_col, 0, sizeof writer->wr_col );
+    writer->cursor = cursor;
+    return open_writer_cursor( writer );
+}
+
+
+typedef struct writer_ctx
+{
+    statistic_writer *writer;
+    rc_t rc;
+
+    struct progressbar * progress;
+    uint64_t entries;
+    uint64_t n;
+    uint8_t fract_digits;
+} writer_ctx;
+
+
+static uint8_t progressbar_calc_fract_digits( const uint64_t count )
+{
+    uint8_t res = 0;
+    if ( count > 10000 )
+    {
+        if ( count > 100000 )
+            res = 2;
+        else
+            res = 1;
+    }
+    return res;
+}
+
+static uint32_t progressbar_percent( const uint64_t count, const uint64_t value,
+									 const uint8_t fract_digits )
+{
+    uint32_t factor = 100;
+    uint32_t res = 0;
+
+    if ( fract_digits > 0 )
+    {
+        if ( fract_digits > 1 )
+            factor = 10000;
+        else
+            factor = 1000;
+    }
+        
+    if ( count > 0 )
+    {
+        if ( value >= count )
+            res = factor;
+        else
+        {
+            uint64_t temp = value;
+            temp *= factor;
+            temp /= count;
+            res = (uint16_t) temp;
+        }
+    }
+    return res;
+}
+
+
+static bool CC write_cb( stat_row * row, void * data )
+{
+    writer_ctx * ctx = ( writer_ctx * ) data;
+    col * cols = ( col * )&ctx->writer->wr_col;
+    VCursor * cursor = ctx->writer->cursor;
+  
+    rc_t rc = VCursorOpenRow( cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorOpen() failed\n" );
+
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_SPOT_GROUP ].idx, 8,
+                              row->spotgroup, string_size( row->spotgroup ),
+                              widx_names[ WIDX_SPOT_GROUP ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_KMER ].idx, 8,
+                              row->dimer, string_size( row->dimer ),
+                              widx_names[ WIDX_KMER ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_ORIG_QUAL ].idx, 8,
+                              &row->quality, 1, widx_names[ WIDX_ORIG_QUAL ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_CYCLE ].idx, 32,
+                              &row->base_pos, 1, widx_names[ WIDX_CYCLE ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_TOTAL_COUNT ].idx, 32,
+                              &row->count, 1, widx_names[ WIDX_TOTAL_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_MISMATCH_COUNT ].idx, 32,
+                              &row->mismatch_count, 1,
+                              widx_names[ WIDX_MISMATCH_COUNT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_HPRUN ].idx, 32,
+                              &row->hp_run, 1, widx_names[ WIDX_HPRUN ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_GC_CONTENT ].idx, 32,
+                              &row->gc_content, 1, widx_names[ WIDX_GC_CONTENT ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_MAX_QUAL ].idx, 8,
+                              &row->max_qual_value, 1, widx_names[ WIDX_MAX_QUAL ] );
+    if ( rc == 0 )
+        rc = write_to_cursor( cursor, cols[ WIDX_NREAD ].idx, 8,
+                              &row->n_read, 1, widx_names[ WIDX_NREAD ] );
+
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCommitRow() failed\n" );
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCloseRow( cursor );
+        if ( rc != 0 )
+            LogErr( klogInt, rc, "VCursorCloseRow() failed\n" );
+    }
+
+    ctx->rc = rc;
+    if ( ctx->progress != NULL && rc == 0 )
+    {
+        uint32_t percent = progressbar_percent( ctx->entries, ++( ctx->n ), ctx->fract_digits );
+        update_progressbar( ctx->progress, percent );
+    }
+
+    return ( rc == 0 );
+}
+
+
+static rc_t write_statistic( statistic_writer *writer, statistic *data,
+                             uint64_t * written, bool show_progress )
+{
+    writer_ctx ctx;
+    uint64_t count;
+
+    ctx.writer = writer;
+    ctx.rc = 0;
+    ctx.progress = NULL;
+
+    if ( show_progress )
+    {
+        ctx.entries = data->entries;
+        ctx.fract_digits = progressbar_calc_fract_digits( ctx.entries );
+		make_progressbar( &ctx.progress, ctx.fract_digits );
+        ctx.n = 0;
+    }
+
+    count = foreach_statistic( data, write_cb, &ctx );
+
+    if ( show_progress )
+    {
+        destroy_progressbar( ctx.progress );
+        OUTMSG(( "\n" ));
+    }
+
+    if ( written != NULL ) *written = count;
+
+    return ctx.rc;
+}
+
+
+static rc_t whack_statistic_writer( statistic_writer *writer )
+{
+    rc_t rc = VCursorCommit( writer->cursor );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VCursorCommit() failed\n" );
+    return rc;
+}
+
+
+typedef struct write_ctx
+{
+    KFile *out;
+    uint64_t pos;
+    uint64_t lines;
+
+    struct progressbar *progress;
+    uint64_t entries;
+    uint8_t fract_digits;
+} write_ctx;
+
+
+static bool CC write_to_file_cb( stat_row * row, void * f_data )
+{
+    write_ctx * wctx = ( write_ctx * ) f_data;
+    char buffer[ 256 ];
+    size_t num_writ;
+
+    rc_t rc = string_printf ( buffer, sizeof buffer, &num_writ,
+                                "%s\t%u\t%u\t%s\t%u\t%u\t%u\t%u\t%u\t%u\n", 
+                                row->spotgroup, 
+                                row->base_pos,
+                                row->n_read,
+                                row->dimer,
+                                row->gc_content,
+                                row->hp_run,
+                                row->max_qual_value,
+                                row->quality,
+                                row->count,
+                                row->mismatch_count );
+
+    if ( rc == 0 )
+    {
+        size_t f_writ;
+        rc = KFileWrite ( wctx->out, wctx->pos, buffer, num_writ, &f_writ );
+        if ( rc == 0 )
+        {
+            uint32_t percent = progressbar_percent( wctx->entries, ++wctx->lines, wctx->fract_digits );
+            update_progressbar( wctx->progress, percent );
+            wctx->pos += f_writ;
+        }
+    }
+    return ( rc == 0 );
+}
+
+
+rc_t write_output_file( KDirectory *dir, statistic * data,
+                        const char * path, uint64_t * written )
+{
+    write_ctx wctx;
+    rc_t rc;
+
+    if ( written != NULL )
+    {
+        *written = 0;
+    }
+    wctx.out = NULL;
+    wctx.pos = 0;
+    wctx.lines = 0;
+    rc = KDirectoryCreateFile ( dir, &wctx.out, false, 0664, kcmInit, "%s", path );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "KDirectoryCreateFile() failed\n" );
+    else
+    {
+        char buffer[ 256 ];
+        size_t num_writ;
+        rc = string_printf ( buffer, sizeof buffer, &num_writ,
+          "SPOTGROUP\tCYCLE\tNRead\tDIMER\tGC_CONTENT\tHP_RUN\tMaxQ\tQuality\tTOTAL\tMISMATCH\n" );
+        if ( rc == 0 )
+        {
+            size_t f_writ;
+            rc = KFileWrite ( wctx.out, wctx.pos, buffer, num_writ, &f_writ );
+            if ( rc == 0 )
+            {
+                if ( written != NULL ) *written = f_writ;
+                wctx.pos += f_writ;
+
+                wctx.entries = data->entries;
+                wctx.fract_digits = progressbar_calc_fract_digits( wctx.entries );
+				make_progressbar( &wctx.progress, wctx.fract_digits );
+				
+                foreach_statistic( data, write_to_file_cb, &wctx );
+
+                destroy_progressbar( wctx.progress );
+                OUTMSG(( "\n" ));
+
+                KFileRelease ( wctx.out );
+                if ( written != NULL )
+                {
+                    *written = wctx.lines;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t make_schema( const KNamelist * schema_list,
+                  VDBManager *my_manager, VSchema ** schema )
+{
+    rc_t rc = VDBManagerMakeSchema ( my_manager, schema );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VDBManagerMakeSchema() failed\n" );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( schema_list, &count );
+        if ( rc !=0 )
+            LogErr( klogInt, rc, "KNamelistCount(schema-list) failed\n" );
+        else
+        {
+            uint32_t i;
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * name;
+                rc = KNamelistGet ( schema_list, i, &name );
+                if ( rc !=0 )
+                    LogErr( klogInt, rc, "KNamelistGet(schema-list) failed\n" );
+                else
+                {
+                    rc = VSchemaParseFile ( *schema, "%s", name );
+                    if ( rc !=0 )
+                        LogErr( klogInt, rc, "VSchemaParseFile() failed\n" );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t write_statistic_cmn( VTable * my_table, statistic * data,
+                          uint64_t * written, bool show_progress )
+{
+    VCursor *my_cursor;
+    rc_t rc = VTableCreateCursorWrite( my_table, &my_cursor, kcmInsert );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VTableCreateCursorWrite() failed\n" );
+    else
+    {
+        statistic_writer writer;
+        rc = make_statistic_writer( &writer, my_cursor );
+        if ( rc == 0 )
+        {
+            rc = write_statistic( &writer, data, written, show_progress );
+            if ( rc == 0 )
+                rc = whack_statistic_writer( &writer );
+        }
+        VCursorRelease( my_cursor );
+    }
+    return rc;
+}
+
+
+rc_t write_statistic_into_tab( KDirectory *dir, statistic * data,
+        const KNamelist *schema_list, const char *output_file_path,
+        uint64_t * written, bool show_progress )
+{
+    VDBManager *my_manager;
+    rc_t rc;
+
+    if ( written != NULL ) *written = 0;
+    rc = VDBManagerMakeUpdate ( &my_manager, dir );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VDBManagerMakeUpdate() failed\n" );
+    else
+    {
+        VSchema * my_schema;
+        rc = make_schema( schema_list, my_manager, &my_schema );
+        if ( rc == 0 )
+        {
+            VTable * my_table;
+            rc = VDBManagerCreateTable( my_manager, &my_table, my_schema, 
+                                        "NCBI:align:tbl:qstat",
+                                        kcmInit | kcmParents,
+                                        "%s", output_file_path );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "VDBManagerCreateTable() failed\n" );
+            else
+            {
+                rc = write_statistic_cmn( my_table, data, written, show_progress );
+                VTableRelease( my_table );
+            }
+            VSchemaRelease( my_schema );
+        }
+        VDBManagerRelease( my_manager );
+    }
+    return rc;
+}
+
+
+rc_t write_statistic_into_db( KDirectory *dir, statistic * data,
+         const KNamelist *schema_list, const char *src_path,
+        uint64_t * written, bool show_progress )
+{
+    VDBManager *my_manager;
+    rc_t rc;
+
+    if ( written != NULL ) *written = 0;
+    rc = VDBManagerMakeUpdate ( &my_manager, dir );
+    if ( rc != 0 )
+        LogErr( klogInt, rc, "VDBManagerMakeUpdate() failed\n" );
+    else
+    {
+        VSchema * my_schema;
+        rc = make_schema( schema_list, my_manager, &my_schema );
+        if ( rc == 0 )
+        {
+            VDatabase *my_database;
+            rc = VDBManagerOpenDBUpdate( my_manager, &my_database, 
+                                         my_schema, "%s", src_path );
+            if ( rc != 0 )
+                LogErr( klogInt, rc, "VDBManagerOpenDBUpdate() failed\n" );
+            else
+            {
+                VTable * my_table;
+                rc = VDatabaseCreateTable( my_database, &my_table,
+                                           "QUAL_STAT",
+                                           kcmOpen | kcmParents,
+                                           "QUAL_STAT" );
+                if ( rc !=0 )
+                    LogErr( klogInt, rc, "VDatabaseCreateTable() failed\n" );
+                else
+                {
+                    rc = write_statistic_cmn( my_table, data, written, show_progress );
+                    VTableRelease( my_table );
+                }
+                VDatabaseRelease( my_database );
+            }
+            VSchemaRelease( my_schema );
+        }
+        VDBManagerRelease( my_manager );
+    }
+    return rc;
+}
diff --git a/tools/qual-recalib-stat/writer.h b/tools/qual-recalib-stat/writer.h
new file mode 100644
index 0000000..7dffc3f
--- /dev/null
+++ b/tools/qual-recalib-stat/writer.h
@@ -0,0 +1,79 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_stat_writer_
+#define _h_stat_writer_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <kfs/directory.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+#include <vdb/manager.h>
+#include <vdb/table.h>
+#include <vdb/database.h>
+#include "columns.h"
+#include "stat_mod_2.h"
+
+#define WIDX_SPOT_GROUP      0
+#define WIDX_KMER            1
+#define WIDX_ORIG_QUAL       2
+#define WIDX_TOTAL_COUNT     3
+#define WIDX_MISMATCH_COUNT  4
+#define WIDX_CYCLE           5
+#define WIDX_HPRUN           6
+#define WIDX_GC_CONTENT      7
+#define WIDX_MAX_QUAL        8
+#define WIDX_NREAD           9
+#define N_WIDX               10
+
+typedef struct statistic_writer
+{
+    VCursor *cursor;
+    col wr_col[ N_WIDX ];
+} statistic_writer;
+
+
+rc_t write_output_file( KDirectory *dir, statistic * data,
+                        const char * path, uint64_t * written );
+
+rc_t write_statistic_into_tab( KDirectory *dir, statistic * data,
+        const KNamelist *schema_list, const char *output_file_path,
+        uint64_t * written, bool show_progress );
+
+rc_t write_statistic_into_db( KDirectory *dir, statistic * data,
+         const KNamelist *schema_list, const char *src_path,
+        uint64_t * written, bool show_progress );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/rd-filter-redact/Makefile b/tools/rd-filter-redact/Makefile
new file mode 100644
index 0000000..d37a9d9
--- /dev/null
+++ b/tools/rd-filter-redact/Makefile
@@ -0,0 +1,95 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/rd-filter-redact
+
+INT_TOOLS = \
+	test-read-write-cursor
+
+EXT_TOOLS = \
+	read-filter-redact
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# read-filter-redact
+#
+READ_FILTER_REDACT_SRC = \
+	read-filter-redact \
+
+READ_FILTER_REDACT_OBJ = \
+	$(addsuffix .$(OBJX),$(READ_FILTER_REDACT_SRC))
+
+READ_FILTER_REDACT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/read-filter-redact: $(READ_FILTER_REDACT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(READ_FILTER_REDACT_LIB)
+
+#-------------------------------------------------------------------------------
+# test-read-write-cursor
+#
+TEST_READ_WRITE_CURSOR_SRC = \
+	test-read-write-cursor \
+
+TEST_READ_WRITE_CURSOR_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_READ_WRITE_CURSOR_SRC))
+
+TEST_READ_WRITE_CURSOR_LIB = \
+	-lkapp \
+	-stk-version \
+	-lncbi-wvdb \
+
+$(BINDIR)/test-read-write-cursor: $(TEST_READ_WRITE_CURSOR_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TEST_READ_WRITE_CURSOR_LIB)
+
diff --git a/tools/rd-filter-redact/rd-filter-redact.c b/tools/rd-filter-redact/rd-filter-redact.c
new file mode 100644
index 0000000..64063b5
--- /dev/null
+++ b/tools/rd-filter-redact/rd-filter-redact.c
@@ -0,0 +1,1350 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kapp/main.h> /* KMain */
+#include <kapp/log.h> /* plogmsg */
+#include <kfs/file.h> /* KFile */
+#include <klib/rc.h> /* GetRCState */
+#include <sra/wsradb.h> /* SRAMgr */
+#include <sra/sradb-priv.h> /* SRATableGetKTableUpdate */
+#include <vdb/types.h> /* vdb_uint8_t */
+#include <kdb/database.h> /* KDBManagerMakeUpdate */
+#include <kdb/table.h> /*  KTableRelease */
+#include <ctype.h> /* isdigit */
+#include <string.h> /* memset */
+#include <stdio.h> /* sscanf */
+#include <assert.h>
+#include <sys/stat.h> /* umask */
+
+#include <stdlib.h> /* system */
+
+
+typedef struct Context
+{
+    const char* file_path;
+    const char* table_path;
+    const char * schema_path;
+
+    KDirectory * pwd;
+    VDBManager * mgr;
+    VSchema * schema;
+    VTable * table;
+
+
+    const KFile * file;
+
+
+
+    bool force;
+    
+} Context
+
+struct SArgs {
+};
+struct SData {
+    SRATable* _wrTbl;
+    const SRATable* _rdTbl;
+    const SRAColumn* _origFilterCol;
+    const SRAColumn* _NReadsCol;
+    const char* _origFilterColName;
+    bool _existedRD_FILTER;
+    bool _locked;
+};
+
+
+
+static KDirectory* __SpotIteratorDirectory = NULL;
+/** SpotIterator: iterate spot numbers from 1 to max;
+input spots to reduct from the file */
+struct SpotIterator {
+    spotid_t m_crnSpotId;
+    spotid_t m_maxSpotId;
+
+    spotid_t m_spotToReduct;
+
+    const char* m_filename;
+    size_t m_line;
+    const KFile* m_file;
+    size_t m_filePos;
+    bool m_eof;
+
+    char m_buffer[512];
+    size_t m_inBuffer;
+    char m_ch;
+    bool m_hasCh;
+};
+
+/** Init the static directory object */
+static rc_t SpotIteratorInitDirectory   (void)
+{
+    if (__SpotIteratorDirectory)
+    {
+        return 0;
+    }
+    else
+    {
+        rc_t rc = KDirectoryNativeDir(&__SpotIteratorDirectory);
+        if (rc != 0)
+        {
+            logerr(klogErr, rc, "while calling KDirectoryNativeDir");
+        }
+        return rc;
+    }
+}
+
+static
+bool PathExists (const KDirectory * dir, KPathType desired_type, const char * path, ...)
+{
+    KPathType found_type;
+    bool found;
+    va_list args;
+
+    va_start (args, path);
+
+    found_type = KDirectoryVPathType (dir, path, args);
+    found_type &= ~kptAlias;
+
+    found = (found_type == desired_type)
+
+    va_end (args);
+    return found;
+}
+
+
+
+/** Check file existance */
+static bool SpotIteratorFileExists(const char* path, ...)
+{
+    bool found = false;
+    if (SpotIteratorInitDirectory() == 0)
+    {
+        uint32_t type
+        va_list args;
+        va_start(args, path);
+
+        type = KDirectoryVPathType(__SpotIteratorDirectory, path, args);
+        found = (type != kptNotFound);
+        va_end(args);
+    }
+    return found;
+}
+
+static bool SpotIteratorBufferAdd(struct SpotIterator* self, char ch)
+{
+    assert(self);
+
+    if (self->m_inBuffer >= (sizeof self->m_buffer - 1))
+    {
+        return false;
+    }
+
+    self->m_buffer[self->m_inBuffer++] = ch;
+    self->m_buffer[self->m_inBuffer] = '\0';
+
+    return true;
+}
+
+/** Read a character from the input file */
+static rc_t SpotIteratorFileReadWithEof(struct SpotIterator* self,
+    void* buffer, size_t bsize)
+{
+    rc_t rc = 0;
+    size_t num_read = 0;
+
+    assert(self);
+
+    rc = KFileRead(self->m_file, self->m_filePos, buffer, bsize, &num_read);
+    if (rc == 0)
+    {
+        if (num_read == 0)
+        {
+            self->m_eof = true;
+        }
+        else
+        {
+            self->m_filePos += num_read;
+        }
+    }
+    else
+    {
+        plogerr(klogErr, rc, "on line $(lineno) while reading file '$(path)'",
+                PLOG_U64(lineno) ",path=%s", self->m_line, self->m_filename);
+    }
+
+    return rc;
+}
+
+/** Read a line from the input file */
+static rc_t SpotIteratorReadLine(struct SpotIterator* self)
+{
+    rc_t rc = 0;
+    bool ok = true; /* ok means 'no input buffer overflow' */
+
+    /* to skip leading/traling spaces */
+    enum ELane
+    {
+        eBefore,
+        eIn,
+        eAfter
+    } state = eBefore;
+
+    if (self->m_eof) {
+        return rc;
+    }
+
+    assert(self);
+
+    ++self->m_line;
+    self->m_inBuffer = 0;
+
+    /* get back the saved character */
+    if (self->m_hasCh) {
+        SpotIteratorBufferAdd(self, self->m_ch);
+        if (!isblank(self->m_ch)) {
+            state = eIn;
+        }
+        self->m_hasCh = false;
+    }
+
+    while (ok && !self->m_eof) /* do until in-buffer overflow or EOF*/{
+        char ch = 0;
+        /* get next characted */
+        if ((rc = SpotIteratorFileReadWithEof(self, &ch, 1)) != 0) {
+            return rc;
+        }
+
+        if (!self->m_eof) {
+            /* treat leading/trailing spaces */
+            switch (state) {
+                /* skip leading spaces */
+                case eBefore:
+                    if (isblank(ch)) {
+                        continue;
+                    }
+                    else {
+                        state = eIn;
+                    }
+                    break;
+                case eIn:
+                    if (isblank(ch)) {
+                        state = eAfter;
+                        continue;
+                    }
+                    break;
+                /* skip trailing spaces */
+                case eAfter:
+                    if (isblank(ch)) {
+                        continue;
+                    }
+                    else if (ch != '\n' && ch != '\r') {
+                        rc = RC(rcExe, rcFile, rcReading, rcChar, rcUnexpected);
+                        plogerr(klogErr, rc, "bad symbol '$(char)' "
+                            "on line $(lineno) in file '$(path)': '$(line)...'",
+                            "char=%c," PLOG_U64(lineno) ",path=%s,line=%s",
+                            ch, self->m_line, self->m_filename, self->m_buffer);
+                        return rc;
+                    }
+                    break;
+            }
+
+            /* add next non-blank characted */
+            if ((ok = SpotIteratorBufferAdd(self, ch))) {
+      /* all combinations as "\r", "\n", "\r\n", "\n\r" are considered as EOL */
+                if (ch == '\n' || ch == '\r') {
+                    char c1 = 0;
+                    if ((rc = SpotIteratorFileReadWithEof(self, &c1, 1)) != 0) {
+                        return rc;
+                    }
+                    if (self->m_eof) {
+                        break;
+                    }
+                    else if ((c1 != '\n' && c1 != '\r') || (ch == c1)) {
+       /* save the character when EOL is a single character (WINDOWS) */
+                        self->m_ch = c1;
+                        self->m_hasCh = true;
+                        break;
+                    }
+                    else {
+                        ok = SpotIteratorBufferAdd(self, c1);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /* remove EOL */
+    if (ok) {
+        bool done = false;
+
+        while (self->m_inBuffer > 0 && !done) {
+            switch (self->m_buffer[self->m_inBuffer - 1]) {
+                case '\n': case '\r':
+                    self->m_buffer[--self->m_inBuffer] = '\0';
+                    break;
+                default:
+                    done = true;
+                    break;
+            }
+        }
+    }
+    else {
+        rc = RC(rcExe, rcFile, rcReading, rcString, rcTooLong);
+        plogerr(klogErr, rc,
+            "on line $(lineno) while reading file '$(path)': '$(line)...'",
+            PLOG_U64(lineno) ",path=%s,line=%s",
+            self->m_line, self->m_filename, self->m_buffer);
+    }
+
+    return rc;
+}
+
+/** Get next spot from the input file */
+static rc_t SpotIteratorReadSpotToRedact(struct SpotIterator* self)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    while (rc == 0 && ! self->m_eof) {
+        rc = SpotIteratorReadLine(self);
+
+                         /* skip empty lines */ 
+        if ((rc == 0) && (self->m_inBuffer > 0)) {
+            spotid_t spot = 0;
+
+            /* make sure the line contains digits only */
+            int i = 0;
+            for (i = 0; i < self->m_inBuffer; ++i) {
+                if (!isdigit(self->m_buffer[i])) {
+                    rc = RC(rcExe, rcFile, rcReading, rcChar, rcUnexpected);
+                    plogerr(klogErr, rc, "character '$(char)' on line $(lineno)"
+                            " while reading file '$(path)': '$(line)'",
+                        "char=%c," PLOG_U64(lineno) ",path=%s,line=%s",
+                        self->m_buffer[i], self->m_line,
+                        self->m_filename, self->m_buffer);
+                    return rc;
+                }
+            }
+
+            sscanf(self->m_buffer, "%uld", &spot);
+
+            if (spot == 0) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                plogerr(klogErr, rc,
+                    "bad spot id '0' on line $(lineno) "
+                    "while reading file '$(path)': '$(line)'",
+                    PLOG_U64(lineno) ",path=%s,line=%s",
+                    self->m_line, self->m_filename, self->m_buffer);
+            }
+            else if (spot == self->m_spotToReduct) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                plogerr(klogErr, rc, "duplicated spot id '$(spot)' "
+                    "on line $(lineno) while reading file '$(path)': '$(line)'",
+                    PLOG_U32(spot) "," PLOG_U64(lineno) ",path=%s,line=%s",
+                    spot, self->m_line, self->m_filename, self->m_buffer);
+            }
+            else if (spot < self->m_spotToReduct) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                plogerr(klogErr, rc, "File '$(path)' is unsorted. "
+                    "$(id) < $(last). See line $(lineno): '$(line)'",
+                    "path=%s," PLOG_U32(id) "," PLOG_U32(last) ","
+                        PLOG_U64(lineno) ",line=%s",
+                    self->m_filename, spot, self->m_spotToReduct,
+                    self->m_line, self->m_buffer);
+            }
+            else if (spot > self->m_maxSpotId) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                plogerr(klogErr, rc, "spotId $(spot) on line $(lineno) "
+                    "of file '$(path)' is bigger that the max spotId $(max): "
+                        "'$(line)'",
+                    PLOG_U32(spot) "," PLOG_U64(lineno) ",path=%s,"
+                    PLOG_U32(max) ",line=%s",
+                    spot, self->m_line, self->m_filename, self->m_maxSpotId,
+                    self->m_buffer);
+            }
+            else {
+                self->m_spotToReduct = spot;
+                self->m_inBuffer = 0;
+            }
+            break;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t SpotIteratorInit(struct SpotIterator* self,
+    const SRATable* tbl, const char* redactFileName)
+{
+    rc_t rc = 0;
+
+    assert(self && tbl && redactFileName);
+
+    memset(self, 0, sizeof *self);
+
+    self->m_crnSpotId = 1;
+
+    rc = SRATableMaxSpotId(tbl, &self->m_maxSpotId);
+    if (rc != 0) {
+        logerr(klogErr, rc, "while calling SRATableMaxSpotId");
+    }
+    else {
+        plogmsg(klogInfo,
+            "MaxSpotId = $(spot)", PLOG_U32(spot), self->m_maxSpotId);
+    }
+
+    if (rc == 0) {
+        rc = SpotIteratorInitDirectory();
+    }
+
+    if (rc == 0) {
+        self->m_filename = redactFileName;
+        plogmsg(klogInfo, "Opening '$(path)'", "path=%s", self->m_filename);
+        rc = KDirectoryOpenFileRead(
+            __SpotIteratorDirectory, &self->m_file, "%s", self->m_filename);
+        if (rc != 0) {
+            plogerr(klogErr, rc,
+                "while opening file '$(path)'", "path=%s", self->m_filename);
+        }
+    }
+
+    if (rc == 0) {
+        rc = SpotIteratorReadSpotToRedact(self);
+    }
+
+    return rc;
+}
+
+/** Get next spot id, check whether it should be redacted.
+Returns false if maxSpotId reached */
+static bool SpotIteratorNext(struct SpotIterator* self, rc_t* rc,
+    spotid_t* spot, bool* toRedact)
+{
+    bool hasNext = false;
+
+    assert(self && rc && spot && toRedact);
+
+    *rc = 0;
+    *toRedact = false;
+
+    if (self->m_crnSpotId <= self->m_maxSpotId) {
+        hasNext = true;
+        *spot = self->m_crnSpotId++;
+    }
+
+    if (*spot == self->m_spotToReduct) {
+        *toRedact = true;
+        *rc = SpotIteratorReadSpotToRedact(self);
+        if (*rc != 0) {
+            hasNext = false;
+        }
+    }
+
+    return hasNext;
+}
+
+static rc_t SpotIteratorDestroy(struct SpotIterator* self)
+{
+    assert(self);
+    KDirectoryRelease(__SpotIteratorDirectory);
+    __SpotIteratorDirectory = NULL;
+    return KFileRelease(self->m_file);
+}
+
+/** The main data structure */
+
+static rc_t SDataInit(struct SData* self,
+    const char* tablePath, const SRAMgr* rdMgr, rc_t rc)
+{
+    SRAMgr* wrMgr = NULL;
+
+    assert(self);
+    memset(self, 0, sizeof *self);
+    if (rc)
+    {   return rc; }
+
+    rc = SRAMgrMakeUpdate(&wrMgr, NULL);
+    if (rc != 0) {
+        logerr(klogErr, rc, "while calling SRAMgrMakeUpdate");
+    }
+    else {
+        plogmsg(klogInfo,
+            "Opening Table $(path) for read", "path=%s", tablePath);
+        rc = SRAMgrOpenTableRead(rdMgr, &self->_rdTbl, "%s", tablePath);
+        if (rc != 0) {
+            plogerr(klogErr, rc,
+                "cannot open table $(path) for read", "path=%s", tablePath);
+        }
+    }
+
+    if (rc == 0) {
+        plogmsg(klogInfo,
+            "Opening Table $(path) for update", "path=%s", tablePath);
+        rc = SRAMgrOpenTableUpdate(wrMgr, &self->_wrTbl, "%s", tablePath);
+        if (rc != 0) {
+            plogerr(klogErr, rc,
+                "cannot open table $(path) for update", "path=%s", tablePath);
+        }
+    }
+
+    SRAMgrRelease(wrMgr);
+
+    return rc;
+}
+
+static rc_t SDataPrepareCols(struct SData* self,
+    const char* rdFilterName, const char* readFilterName)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (rc == 0) {
+        const char name[] = "NREADS";
+        rc = SRATableOpenColumnRead(self->_rdTbl,
+            &self->_NReadsCol, name, vdb_uint8_t);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                rc = 0;
+            }
+            else {
+                plogerr(klogErr, rc,
+                    "while calling SRATableOpenColumnRead($name)", "name=%s",
+                    name);
+            }
+        }
+    }
+
+    /* It the physical column exists, open it */
+    if (rc == 0) {
+        rc = SRATableOpenColumnRead(self->_rdTbl,
+            &self->_origFilterCol, rdFilterName, sra_read_filter_t);
+        if (rc == 0) {
+            plogmsg(klogDebug1,
+                "Found '$(name)' column", "name=%s", rdFilterName);
+            self->_existedRD_FILTER = true;
+            self->_origFilterColName = rdFilterName;
+        }
+        else if (GetRCState(rc) == rcNotFound) {
+            plogmsg(klogDebug1,
+                "Column '$(name)' does not exist", "name=%s", rdFilterName);
+            rc = 0;
+        }
+        else {
+            plogerr(klogErr, rc, "while calling SRATableOpenColumnRead($name)",
+                "name=%s", rdFilterName);
+        }
+    }
+
+    /* Otherwise open the virtual one */
+    if (rc == 0 && ! self->_existedRD_FILTER) {
+        rc = SRATableOpenColumnRead(self->_rdTbl,
+            &self->_origFilterCol, readFilterName, sra_read_filter_t);
+        if (rc != 0) {
+            plogerr(klogErr, rc,
+                "while calling SRATableOpenColumnRead($name)", "name=%s",
+                readFilterName);
+        }
+    }
+
+    return rc;
+}
+
+/** Keeps track when to cut the blob */
+struct SBlob {
+    bool m_new;
+    spotid_t m_maxSpotId;
+    const struct SData* m_data;
+};
+
+static rc_t SBlobInit(struct SBlob* self,
+    const struct SData* data, const struct SpotIterator* it)
+{
+    rc_t rc = 0;
+    bool newColumn = true;
+
+    assert(self && data && it);
+
+    memset(self, 0, sizeof *self);
+
+    if (data->_existedRD_FILTER) {
+        /* blob range will be read from the existing blob */
+        newColumn = false;
+    }
+
+    self->m_new = newColumn;
+    self->m_maxSpotId = it->m_maxSpotId;
+    self->m_data = data;
+
+    return rc;
+}
+
+static rc_t SBlobGetRange(const struct SBlob* self,
+    spotid_t id, spotid_t* last)
+{
+    rc_t rc = 0;
+    spotid_t first = 0;
+
+    assert(self && last);
+
+    if (self->m_new) {
+        first = (id & ~0xFFFF) + 1;
+        *last = first + 0xFFFF;
+        if (*last > self->m_maxSpotId) {
+            *last = self->m_maxSpotId;
+        }
+        plogmsg(klogDebug1, "New blob range for spot $(id) is "
+                "$(first) - $(last) ($(xfirst) - $(xlast))",
+            PLOG_U32(id) "," PLOG_U32(first) "," PLOG_U32(last) ","
+                PLOG_X32(xfirst) "," PLOG_X32(xlast),
+            id, first, *last, first, *last);
+    }
+    else {
+        assert(self->m_data && self->m_data->_origFilterCol);
+        rc = SRAColumnGetRange(self->m_data->_origFilterCol, id, &first, last);
+        if (rc != 0) {
+            plogerr(klogErr, rc, "Cannot SRAColumnGetRange $(id)",
+                PLOG_U32(id), id);
+        }
+        else {
+            plogmsg(klogDebug1, "Existing blob range for spot $(id) is "
+                    "$(first) - $(last) ($(xfirst) - $(xlast))",
+                PLOG_U32(id) "," PLOG_U32(first) "," PLOG_U32(last) ","
+                    PLOG_X32(xfirst) "," PLOG_X32(xlast),
+                id, first, *last, first, *last);
+        }
+    }
+
+    return rc;
+}
+
+static rc_t SDataUpdate(struct SData* self,
+    const char* newColName, const char* redactFileName,
+    spotid_t* redactedSpots, spotid_t* all)
+{
+    struct SBlob blob;
+    uint8_t filter[32];
+    rc_t rc = 0, rc2 = 0;
+    uint32_t colIdx = 0;
+    spotid_t spot = 0, last = 0;
+    bool toRedact = false;
+    struct SpotIterator it;
+
+    assert(self && redactedSpots && all);
+
+    memset(filter, SRA_READ_FILTER_REDACTED, sizeof filter);
+
+    if ((rc = SpotIteratorInit(&it, self->_rdTbl, redactFileName))
+        == 0)
+    {
+        rc = SRATableOpenColumnWrite
+            (self->_wrTbl, &colIdx, NULL, newColName, sra_read_filter_t);
+        if (rc != 0) {
+            plogerr(klogErr, rc,
+                "cannot open Column $(path) for Write", "path=%s", newColName);
+            return rc;
+        }
+    }
+    else {
+        return rc;
+    }
+
+    rc = SBlobInit(&blob, self, &it);
+    if (rc != 0) {
+        return rc;
+    }
+
+    while (rc == 0 && SpotIteratorNext(&it, &rc, &spot, &toRedact)) {
+        bitsz_t offset = 0, size = 0;
+        const void *base = NULL;
+        uint8_t nReads = 0;
+
+        if (rc != 0) {
+            break;
+        }
+
+        plogmsg(klogDebug2, "Spot $(spot): $(action)",
+            PLOG_U32(spot) ",action=%s",
+            spot, toRedact ? "redact" : "original");
+
+        /* GET NEXT BLOB RANGE */
+        if (spot == 1 || spot > last) {
+            rc = SBlobGetRange(&blob, spot, &last);
+            if (rc != 0) {
+                break;
+            }
+        }
+
+        assert(spot <= last);
+
+        /* GET NREADS */
+        if ((rc = SRAColumnRead
+            (self->_NReadsCol, spot, &base, &offset, &size)) != 0)
+        {
+            logerr(klogErr, rc, "cannot SRAColumnRead");
+            break;
+        }
+        else if (offset != 0 || size != sizeof nReads * 8) {
+            rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+            plogerr(klogErr, rc,
+                "Bad SRAColumnRead(\"NREADS\", $(spot)) result",
+                PLOG_U32(spot), spot);
+        }
+        else {
+            nReads = *((uint8_t*) base);
+            if (spot == 1) {
+                if (nReads == 1) {
+                    plogmsg(klogInfo, "The first spot has $(nreads) read",
+                        "nreads=%d", nReads);
+                }
+                else {
+                    plogmsg(klogInfo, "The first spot has $(nreads) reads",
+                        "nreads=%d", nReads);
+                }
+            }
+        }
+
+        /* GET READ_FILTER */
+        if (toRedact) {
+            base = filter;
+            ++(*redactedSpots);
+        }
+        else {
+            if ((rc = SRAColumnRead(self->_origFilterCol,
+                spot, &base, &offset, &size)) != 0)
+            {
+                plogerr(klogErr, rc,
+                    "while calling SRAColumnRead($(name))", "name=%s",
+                    "READ_FILTER");
+                break;
+            }
+            else if (offset != 0
+                  || size != sizeof (uint8_t) * 8 * nReads)
+            {
+                rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+                plogerr(klogErr, rc, "Bad SRAColumnRead($(spot)) result",
+                    PLOG_U32(spot), spot);
+            }
+        }
+
+        if ((rc = SRATableOpenSpot(self->_wrTbl, spot)) != 0) {
+            plogerr(klogErr, rc, "cannot open Spot $(id)", PLOG_U32(id), spot);
+            break;
+        }
+        if ((rc = SRATableWriteIdxColumn(self->_wrTbl,
+            colIdx, base, 0, sizeof (uint8_t) * 8 * nReads)) != 0)
+        {
+            logerr(klogErr, rc, "cannot SRATableWriteIdxColumn");
+            break;
+        }
+        if ((rc = SRATableCloseSpot(self->_wrTbl)) != 0) {
+            logerr(klogErr, rc, "cannot SRATableCloseSpot");
+            break;
+        }
+
+        /* CUT THE BLOB */
+        if (spot == last) {
+            rc = SRATableCloseCursor(self->_wrTbl);
+            if (rc != 0) {
+                plogerr(klogErr, rc, "cannot SRATableCloseCursor $(id)",
+                    PLOG_U32(id), spot);
+                break;
+            }
+        }
+    }
+
+    rc2 = SpotIteratorDestroy(&it);
+    if (rc == 0)
+    {   rc = rc2; }
+
+    *all = spot;
+
+    return rc;
+}
+
+static rc_t SDataDestroy(struct SData* self, bool commit) {
+    rc_t rc = 0, rc2 = 0;
+    assert(self);
+
+    rc2 = SRAColumnRelease(self->_origFilterCol);
+    self->_origFilterCol = NULL;
+    if (rc == 0)
+    { rc = rc2; }
+
+    rc2 = SRAColumnRelease(self->_NReadsCol);
+    self->_NReadsCol = NULL;
+    if (rc == 0)
+    { rc = rc2; }
+
+    rc2 = SRATableRelease(self->_rdTbl);
+    self->_rdTbl = NULL;
+    if (rc == 0)
+    { rc = rc2; }
+
+    if (commit && rc == 0) {
+        rc = SRATableCommit(self->_wrTbl);
+    }
+
+    rc2 = SRATableRelease(self->_wrTbl);
+    self->_wrTbl = NULL;
+    if (rc == 0)
+    { rc = rc2; }
+
+    return rc;
+}
+
+/** Command line arguments */
+
+
+static bool __BadLogLevel = false;
+static const char *__dummy4NextLogLevel(void *data)
+{
+    __BadLogLevel = true;
+    return "info";
+}
+
+static KLogLevel __defaultLogLevel;
+
+static void Usage(const char *argv0, const char *msg, ...)
+{
+    if (msg) {
+        va_list args;
+        va_start(args, msg);
+        vfprintf(stderr, msg, args);
+        fprintf(stderr, "\n\n");
+        va_end(args);
+    }
+
+    fprintf(stderr, "Usage:\n"
+        "%s -D <table> -F <file> [ -l <level> ]\n"
+        "\t-D --table-path\tSRA Table directory path\n"
+        "\t-F --file      \tFile containing SpotId-s to redact\n"
+        "\t-f --force     \tForce overwriting of already redacted table\n"
+        "\t-l --level     \t"
+                 "Log level: 0-13 or fatal|sys|int|err|warn|info|debug[1-10].",
+        argv0);
+
+    {
+        char logLevel[64];
+        rc_t rc = KLogLevelExplain
+            (__defaultLogLevel, logLevel, sizeof logLevel, NULL);
+        if (rc == 0) {
+            fprintf(stderr, " Default: %s", logLevel);
+        }
+    }
+
+    fprintf(stderr, "\n");
+}
+
+/** Get command line key with argument */
+static bool GetArg(int* argI, int argc, char* argv[],
+    const char* shortArg, const char* longArg,
+    const char** out, const char* error, rc_t* errorRc)
+{
+    bool found = false;
+
+    assert(argI && (*argI < argc) && longArg && argv && out && errorRc);
+
+    if (strcmp(argv[*argI], longArg) == 0) {
+        found = true;
+    }
+    else if (shortArg && (strcmp(argv[*argI], shortArg) == 0)) {
+        found = true;
+    }
+    if (!found) {
+        return false;
+    }
+
+    if ((*argI + 1) >= argc) {
+        Usage(argv[0], error);
+        *errorRc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+    }
+    else {
+        *out = argv[++(*argI)];
+    }
+
+    return true;
+}
+
+#define OPTION_TABLE "table-path"
+#define ALIAS_TABLE  "D"
+
+#define OPTION_FILE  "file"
+#define ALIAS_FILE   "F"
+
+#define OPTION_SCHEMA  "schema"
+#define ALIAS_SCHEMA   "S"
+
+#define OPTION_FORCE  "force"
+#define ALIAS_FORCE   "F"
+
+OptDef Options[] = 
+{
+    { OPTION_TABLE,  ALIAS_TABLE,  NULL, table_usage,  1, true,  true },
+    { OPTION_FILE,   ALIAS_FILE,   NULL, file_usage,   1, true,  true },
+    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true,  true },
+    { OPTION_FORCE,  ALIAS_FORCE,  NULL, force_usage,  0, false, false }
+};
+
+
+static
+rc_t open_and_run (Context * context)
+{
+    KDirectory * pwd;
+    rc_t rc;
+
+    rc = KDirectoryNativeDir (&pwd);
+    if (rc)
+        LOGERR (klogFatal, rc, "Unable to open file system");
+    else
+    {
+        if (PathExists (pwd, kptDile, context->file_path))
+        {
+            if (PathExists (pwd, kptDile, context->file_path))
+            {
+                VDBManager * vmgr;
+
+                rc = VDBManagerMakeUpdate (&vmgr, pwd);
+                if (rc)
+                    LOGERR (kptInt, "Failed to create a database manager");
+                else
+                {
+                    VSchema * vschema;
+
+                    rc = VDBManagerMakeSchema (vmgr, &vschema);
+                    if (rc)
+                        LOGERR (kptInt, "Failed to create schema");
+                    else
+                    {
+                        rc = VSchemaParseFile (vschema, args->schema);
+                        if (rc)
+                            PLOGERR (klogFatal, (klogFatal, 
+                                                 "Unable to parse schema file ($S)",
+                                                 "S=%s", args->schema));
+                        else
+                        {
+                            VTable * vtable;
+                            rc = VDBManagerOpenTableUpdate (vmgr, &vtable, SCHEMA, args->table);
+                            if (rc)
+                                PLOGERR (klogFatal, (klogFatal, "Unable to open table ($T)",
+                                             "T=%s", args->table));
+                            else
+                            {
+
+                        
+                                VTableRelease (vtable);
+                            }
+                        }
+                        VSchemaRelease (vschema);
+                    }
+                    VDBManagerRelease (vmgr);
+                }
+            }
+            else
+                PLOGERR (kptFatal, (kptFatal, "table paramaeter is not a table directory ($F)",
+                                    "F=%s", args->table));
+        }
+        else
+            PLOGERR (kptFatal, (kptFatal, "file paramaeter is not a file ($F)",
+                                "F=%s", context->file_path));
+
+
+
+        KPathType pt;
+
+        pt = KDirectoryPathType (arg->file);
+        if ((pt & ~kptAlias) != kptFile)
+        else
+        {
+        }
+        KDirectoryRelease (pwd);
+    }
+    return rc;
+}
+
+    rc_t rc = 0;
+
+    spotid_t all = 0, redacted = 0;
+    bool locked = false;
+
+    SRAMgr* rdMgr = NULL;
+    KTable* ktbl = NULL;
+
+    struct SData data;
+
+    const char readFilterName   [] = "READ_FILTER";
+    const char rdFilterName     [] = "RD_FILTER";
+    const char readFilterNameNew[] = "TMP_READ_FILTER";
+    const char rdFilterNameNew  [] = "TMP_RD_FILTER";
+    const char colNameSave      [] = "RD_FILTER_BAK";
+
+    const char* redactFileName = NULL;
+    const char* tablePath = NULL;
+
+    struct SArgs args;
+
+    /* PARSE COMMAND LINE, MAKE SURE INPUTS EXIST */
+    rc = SArgsMake(&args, argc, argv);
+    if (rc)
+    {   return rc; }
+
+    tablePath      = args._table;
+    redactFileName = args.file;
+
+    /* WAS THIS RUN ALREADY REDUCTED ? */
+    if (! args._force
+        && SpotIteratorFileExists("%s/col/%s", tablePath, colNameSave))
+    {
+        rc = RC(rcExe, rcTable, rcOpening, rcColumn, rcExists);
+        plogerr(klogErr, rc,
+            "'$(path)' was redacted already", "path=%s", tablePath);
+    }
+
+    umask(2);
+
+    /* OPEN THE MANAGER */
+    if (rc == 0) {
+        rc = SRAMgrMakeUpdate(&rdMgr, NULL);
+        if (rc != 0) {
+            logerr(klogErr, rc, "while calling SRAMgrMakeUpdate(rd)");
+        }
+    }
+
+    /* UNLOCK THE RUN */
+    if (rc == 0) {
+        rc = SRAMgrUnlock(rdMgr, "%s", tablePath);
+        if (rc) {
+            if (GetRCState(rc) == rcUnlocked) {
+                plogmsg(klogInfo,
+                    "'$(path)' was not locked", "path=%s", tablePath);
+                rc = 0;
+            }
+            else {
+                plogerr(klogErr, rc, "while calling SRAMgrUnlock($(path))",
+                    "path=%s", tablePath);
+            }
+        }
+        else {
+            plogmsg(klogInfo, "'$(path)' was unlocked", "path=%s", tablePath);
+            locked = true;
+        }
+    }
+
+    /* INITIALIZE */
+    rc = SDataInit(&data, tablePath, rdMgr, rc);
+
+    if (rc == 0) {
+        logmsg(klogDebug2, "Calling SRATableGetKTableUpdate");
+        rc = SRATableGetKTableUpdate(data._wrTbl, &ktbl);
+        if (rc != 0) {
+            logerr(klogErr, rc, "while calling SRATableGetKTableUpdate");
+        }
+    }
+
+    /* OPEN INPUT COLUMNS */
+    if (rc == 0) {
+        rc = SDataPrepareCols(&data, rdFilterName, readFilterName);
+    }
+
+    if (rc == 0) {
+        /* just for fun, tell ktable to drop this column */
+        KTableDropColumn(ktbl, "%s", rdFilterNameNew);
+        KTableDropColumn(ktbl, "%s", colNameSave);
+
+        /* THE MAIN WORKING FUNCTION */
+        rc = SDataUpdate
+            (&data, readFilterNameNew, redactFileName, &redacted, &all);
+    }
+
+    /* CLEANUP */
+
+    {
+        rc_t rc2 = SDataDestroy(&data, rc == 0);
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    /* REMAME THE PHYSICAL COLUMNS */
+    if (rc == 0) {
+        if (data._existedRD_FILTER) {
+            plogmsg(klogDebug1, "Renaming '$(from)' to '$(to)'",
+                "from=%s,to=%s", rdFilterName, colNameSave);
+            rc = KTableRenameColumn(ktbl, rdFilterName, colNameSave);
+            if (rc != 0) {
+                plogerr(klogErr, rc,
+                    "while renaming column from '$(from)' to '$(to)'",
+                    "from=%s,to=%s", rdFilterName, colNameSave);
+            }
+        }
+        if (rc == 0) {
+            plogmsg(klogDebug1, "Renaming '$(from)' to '$(to)'",
+                "from=%s,to=%s",
+                rdFilterNameNew, rdFilterName);
+            rc = KTableRenameColumn(ktbl, rdFilterNameNew, rdFilterName);
+            if (rc != 0) {
+                plogerr(klogErr, rc,
+                    "while renaming column from '$(from)' to '$(to)'",
+                    "from=%s,to=%s", rdFilterNameNew, rdFilterName);
+            }
+        }
+    }
+    else if (ktbl) {
+        rc_t rc2 = KTableDropColumn(ktbl, "%s", rdFilterNameNew);
+        if (rc2 != 0) {
+            plogerr(klogErr, rc2, "while dropping column '$(name)'",
+                "name=%s", rdFilterNameNew);
+        }
+    }
+
+    {
+        rc_t rc2 = KTableRelease(ktbl);
+        if (rc == 0)
+        { rc = rc2; }
+    }
+
+    if (locked) {
+        rc_t rc2 = 0;
+        plogmsg(klogInfo, "Relocking '$(path)'", "path=%s", tablePath);
+        rc2 = SRAMgrLock(rdMgr, "%s", tablePath);
+        if (rc2 != 0) {
+            plogerr(klogErr, rc2, "while calling SRAMgrLock($(path))",
+                "path=%s", tablePath);
+            if (rc == 0)
+            { rc = rc2; }
+        }
+    }
+
+    {
+        rc_t rc2 = SRAMgrRelease(rdMgr);
+        if (rc == 0)
+        { rc = rc2; }
+    }
+
+    if (rc == 0) {
+        plogmsg(klogInfo, "'$(path)': redacted $(redacted) spots out of $(all)",
+            "path=%s," PLOG_U32(redacted) "," PLOG_U32(all),
+            tablePath, redacted, all);
+    }
+    else {
+        plogmsg(klogInfo, "Failed to redact '$(path)'", "path=%s", tablePath);
+    }
+
+    return rc;
+}
+
+
+static
+rc_t run (Context * context)
+{
+    rc_t rc;
+
+    return rc;
+}
+
+
+static
+rc_t open_and_run (Context * context)
+{
+    KDirectory * pwd;
+    rc_t rc;
+
+    /* first get a toe hold in the file system */
+    rc = KDirectoryNativeDir (&context->pwd);
+    if (rc)
+        LOGERR (klogFatal, rc, "Unable to open file system");
+    else
+    {
+        /* try to open the file of redactions */
+        rc = KDirectoryOpenFileRead (context->pwd, &context->file, "%s", conext->file_path);
+        if (rc)
+            PLOGERR (kptFatal, (kptFatal, rc, "Failed to open redactions file ($(F))",
+                                context->file_path));
+        else
+        {
+            /* okay we've got the non-data base stuff up so get
+             * a toe hold in the VDatabase */
+            rc = VDBManagerMakeUpdate (&context->mgr, context->pwd);
+            if (rc)
+                LOGERR (kptInt, "Failed to create a database manager");
+            else
+            {
+                /* build a schema object */
+                rc = VDBManagerMakeSchema (context->mgr, &ontext->schema);
+                if (rc)
+                    LOGERR (kptInt, "Failed to create schema");
+                else
+                {
+                    /* fill it with the specified schema */
+                    rc = VSchemaParseFile (context->schema, "%s", context->schema_path);
+                    if (rc)
+                        PLOGERR (klogFatal, (klogFatal, 
+                                             "Unable to parse schema file ($S)",
+                                             "S=%s", args->schema));
+                    else
+                    {
+                        /* now open the table with that schema */
+                        rc = VDBManagerOpenTableUpdate (context->mgr, &context->table,
+                                                        context->schema, "%s", context->table_path);
+                        if (rc)
+                            PLOGERR (klogFatal, (klogFatal, "Unable to open table ($T)",
+                                                 "T=%s", args->table));
+                        else
+                        {
+                            /* most stuff is open */
+                            rc = run (context);
+
+                            VTableRelease (context->table);
+                        }
+                    }
+                    VSchemaRelease (context->schema);
+                }
+                VDBManagerRelease (context->mgr);
+            }
+            KFileRelease (context->file);
+        }
+    }
+    return rc;
+}
+
+rc_t KMain(int argc, char* argv[])
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (Options[0]));
+    if (rc)
+        LOGERR (klogFatal, rc, "Failure reading command line");
+    else do
+    {
+        Context context;
+        uint32_t pcount;
+
+        /* force option: Replace extisting redact column */
+        rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure parsing force name");
+            break;
+        }
+        if ((context.force = (pcount > 0)) != false)
+            STSMSG (1, ("Using force option"));
+
+        /* table path parameter */
+        rc = ArgsOptionCount (args, OPTION_TABLE, &pcount);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure parsing table name");
+            break;
+        }
+        if (pcount < 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR (klogFatal, rc, "Missing table parameter");
+            break;
+        }
+        if (pcount > 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR (klogFatal, rc, "Too many table parameters");
+            break;
+        }
+        rc = ArgsOptionValue (args, OPTION_TABLE, 0, (const void **)&sargs.table);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure retrieving table name");
+            break;
+        }
+
+        /* file path parameter */
+        rc = ArgsOptionCount (args, OPTION_FILE, &pcount);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure parsing file name");
+            break;
+        }
+        if (pcount < 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR (klogFatal, rc, "Missing file parameter");
+            break;
+        }
+        if (pcount > 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR (klogFatal, rc, "Too many file parameters");
+            break;
+        }
+        rc = ArgsOptionValue (args, OPTION_FILE, 0, (const void **)&context.file_path);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure retrieving file name");
+            break;
+        }
+
+
+        /* schema path parameter */
+        rc = ArgsOptionCount (args, OPTION_SCHEMA, &pcount);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure parsing schema name");
+            break;
+        }
+        if (pcount < 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR (klogFatal, rc, "Missing schema parameter");
+            break;
+        }
+        if (pcount > 1)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR (klogFatal, rc, "Too many schema parameters");
+            break;
+        }
+        rc = ArgsOptionValue (args, OPTION_SCHEMA, 0, (const void **)&context.schema_path);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failure retrieving schema name");
+            break;
+        }
+
+        /* now that we have parameter values: open the file and table
+         * then run */
+        rc = open_and_run (&context);
+
+        KArgsRelease (args);
+
+    } while (0);
+
+    if (rc)
+        LOGERR (klogErr, rc, "Exiting with an error");
+    else
+        STSMSG (1, ("Exiting %R\n", rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/rd-filter-redact/read-filter-redact.c b/tools/rd-filter-redact/read-filter-redact.c
new file mode 100644
index 0000000..c82c9c2
--- /dev/null
+++ b/tools/rd-filter-redact/read-filter-redact.c
@@ -0,0 +1,861 @@
+/*******************************************************************************
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * =============================================================================
+ */
+
+#include <kapp/main.h>
+
+#include <sra/wsradb.h> /* spotid_t */
+#include <sra/sradb-priv.h> /* SRASchemaMake */
+
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/table.h> /* VDBTable */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/cursor.h> /* VCursor */
+#include <vdb/schema.h> /* VSchemaRelease */
+
+#include <kdb/manager.h> /* KDBPathType */
+
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/status.h> /* STSMSG */
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h> /* RC */
+#include <os-native.h>
+
+#include <assert.h>
+#include <ctype.h> /* isblank */
+#include <stdio.h> /* sscanf */
+#include <stdlib.h> /* exit */
+#include <string.h> /* memset */
+
+#define DISP_RC(rc,msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+static KDirectory* __SpotIteratorDirectory = NULL;
+
+typedef struct CmdLine {
+	const char* table;
+	const char* file;
+} CmdLine;
+typedef struct SpotIterator {
+    spotid_t crnSpotId;
+    spotid_t spotToReduct;
+
+    const char* filename;
+    const KFile* file;
+
+    uint64_t maxSpotId;
+
+    char buffer[256];
+    size_t inBuffer; /* characters in buffer */
+
+    size_t filePos;
+    bool eof;
+    size_t line;
+
+    bool hasCh;
+    char ch;
+} SpotIterator;
+typedef struct Db {
+    const char* table;
+
+    VDBManager* mgr;
+    VTable *tbl;
+
+    const VCursor *rCursor;
+    uint32_t rFilterIdx;
+
+    VCursor *wCursor;
+    uint32_t wIdx;
+
+    bool locked;
+
+    spotid_t nSpots;
+    spotid_t redactedSpots;
+} Db;
+/** Init the static directory object */
+static rc_t SpotIteratorInitDirectory(void) {
+    if (__SpotIteratorDirectory) {
+        return 0;
+    }
+    else {
+        rc_t rc = KDirectoryNativeDir(&__SpotIteratorDirectory);
+        DISP_RC(rc, "while calling KDirectoryNativeDir");
+        return rc;
+    }
+}
+
+/** Check file existance */
+static bool SpotIteratorFileExists(const char* path, ...) {
+    bool found = false;
+
+    if (SpotIteratorInitDirectory() == 0) {
+        va_list args;
+        va_start(args, path);
+        {
+            uint32_t type
+                = KDirectoryVPathType(__SpotIteratorDirectory, path, args);
+            found = (type != kptNotFound);
+            va_end(args);
+        }
+    }
+
+    return found;
+}
+
+static bool SpotIteratorBufferAdd(SpotIterator* self, char ch)
+{
+    assert(self);
+
+    if (self->inBuffer >= (sizeof self->buffer - 1))
+    {   return false; }
+
+    self->buffer[self->inBuffer++] = ch;
+    self->buffer[self->inBuffer] = '\0';
+
+    return true;
+}
+
+/** Read a character from input file */
+static rc_t SpotIteratorFileReadCharWithEof(SpotIterator* self,
+    char* buffer)
+{
+    rc_t rc = 0;
+    size_t num_read = 0;
+
+    assert(self);
+
+    /* get back the saved character */
+    if (self->hasCh) {
+        buffer[0] = self->ch;
+        self->hasCh = false;
+    }
+    else {
+        rc = KFileRead(self->file, self->filePos, buffer, 1, &num_read);
+        if (rc == 0) {
+            if (num_read == 0) {
+                self->eof = true;
+            }
+            else { self->filePos += num_read; }
+        }
+        else {
+            PLOGERR(klogErr, (klogErr, rc,
+                "on line $(lineno) while reading file '$(path)'",
+                PLOG_U64(lineno) ",path=%s", self->line, self->filename));
+        }
+    }
+
+    return rc;
+}
+
+/** Read a line from input file */
+static rc_t SpotIteratorReadLine(SpotIterator* self)
+{
+    rc_t rc = 0;
+    bool overflow = false; /* input buffer overflow */
+
+    /* to skip leading/traling spaces */
+    enum ELane {
+        eBefore,
+        eIn,
+        eAfter
+    } state = eBefore;
+
+    if (self->eof) {
+        return rc;
+    }
+
+    assert(self);
+
+    ++self->line;
+    self->inBuffer = 0;
+
+    while (!overflow && !self->eof) /* do until in-buffer overflow or EOF*/{
+        char ch = 0;
+        /* get next characted */
+        if ((rc = SpotIteratorFileReadCharWithEof(self, &ch)) != 0) {
+            return rc;
+        }
+
+        if (!self->eof) {
+            /* treat leading/trailing spaces */
+            switch (state) {
+                /* skip leading spaces */
+                case eBefore:
+                    if (isblank(ch)) {
+                        continue;
+                    }
+                    else {
+                        state = eIn;
+                    }
+                    break;
+                case eIn:
+                    if (isblank(ch)) {
+                        state = eAfter;
+                        continue;
+                    }
+                    break;
+                /* skip trailing spaces */
+                case eAfter:
+                    if (isblank(ch)) {
+                        continue;
+                    }
+                    else if (ch != '\n' && ch != '\r') {
+                        rc = RC(rcExe, rcFile, rcReading, rcChar, rcUnexpected);
+                        PLOGERR(klogErr, (klogErr, rc, "bad symbol '$(char)' "
+                            "on line $(lineno) in file '$(path)': '$(line)...'",
+                            "char=%c," PLOG_U64(lineno) ",path=%s,line=%s",
+                            ch, self->line, self->filename, self->buffer))
+                        ;
+                        return rc;
+                    }
+                    break;
+            }
+
+            /* add next non-blank characted */
+            overflow = !SpotIteratorBufferAdd(self, ch);
+            if (!overflow) {
+      /* all combinations as "\r", "\n", "\r\n", "\n\r" are considered as EOL */
+                if (ch == '\n' || ch == '\r') {
+                    char c1 = 0;
+                    if ((rc = SpotIteratorFileReadCharWithEof(self, &c1)) != 0)
+                    {
+                        return rc;
+                    }
+                    if (self->eof) {
+                        break;
+                    }
+                    else if ((c1 != '\n' && c1 != '\r') || (ch == c1)) {
+       /* save the character when EOL is a single character (WINDOWS):
+          will be get back in SpotIteratorFileReadCharWithEof */
+                        self->ch = c1;
+                        self->hasCh = true;
+                        break;
+                    }
+                    else {
+                        overflow = !SpotIteratorBufferAdd(self, c1);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /* remove EOL */
+    if (!overflow) {
+        bool done = false;
+
+        while (self->inBuffer > 0 && !done) {
+            switch (self->buffer[self->inBuffer - 1]) {
+                case '\n': case '\r':
+                    self->buffer[--self->inBuffer] = '\0';
+                    break;
+                default:
+                    done = true;
+                    break;
+            }
+        }
+    }
+    else {
+        rc = RC(rcExe, rcFile, rcReading, rcString, rcTooLong);
+        PLOGERR(klogErr, (klogErr, rc,
+            "on line $(lineno) while reading file '$(path)': '$(line)...'",
+            PLOG_U64(lineno) ",path=%s,line=%s",
+            self->line, self->filename, self->buffer));
+    }
+
+    return rc;
+}
+
+/** Get next spot from input file */
+static rc_t SpotIteratorReadSpotToRedact(SpotIterator* self)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    while (rc == 0 && ! self->eof) {
+        rc = SpotIteratorReadLine(self);
+
+        /* skip empty lines */ 
+        if ((rc == 0) && (self->inBuffer > 0)) {
+            spotid_t spot = 0;
+
+            /* make sure the line contains digits only */
+            int i = 0;
+            for (i = 0; i < self->inBuffer; ++i) {
+                if (!isdigit(self->buffer[i])) {
+                    rc = RC(rcExe, rcFile, rcReading, rcChar, rcUnexpected);
+                    PLOGERR(klogErr, (klogErr, rc,
+                            "character '$(char)' on line $(lineno)"
+                            " while reading file '$(path)': '$(line)'",
+                        "char=%c," PLOG_U64(lineno) ",path=%s,line=%s",
+                        self->buffer[i], self->line,
+                        self->filename, self->buffer));
+                    return rc;
+                }
+            }
+
+            sscanf(self->buffer, "%ld", &spot);
+
+            if (spot == 0) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                PLOGERR(klogErr, (klogErr, rc,
+                    "bad spot id '0' on line $(lineno) "
+                    "while reading file '$(path)': '$(line)'",
+                    PLOG_U64(lineno) ",path=%s,line=%s",
+                    self->line, self->filename, self->buffer));
+            }
+            else if (spot == self->spotToReduct) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                PLOGERR(klogErr, (klogErr, rc, "duplicated spot id '$(spot)' "
+                    "on line $(lineno) while reading file '$(path)': '$(line)'",
+                    PLOG_U32(spot) "," PLOG_U64(lineno) ",path=%s,line=%s",
+                    spot, self->line, self->filename, self->buffer));
+            }
+            else if (spot < self->spotToReduct) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                PLOGERR(klogErr, (klogErr, rc, "File '$(path)' is unsorted. "
+                    "$(id) < $(last). See line $(lineno): '$(line)'",
+                    "path=%s," PLOG_U32(id) "," PLOG_U32(last) ","
+                        PLOG_U64(lineno) ",line=%s",
+                    self->filename, spot, self->spotToReduct,
+                    self->line, self->buffer));
+            }
+            else if (spot > self->maxSpotId) {
+                rc = RC(rcExe, rcFile, rcReading, rcString, rcInvalid);
+                PLOGERR(klogErr, (klogErr, rc,
+                    "spotId $(spot) on line $(lineno) "
+                    "of file '$(path)' is bigger that the max spotId $(max): "
+                        "'$(line)'",
+                    PLOG_U32(spot) "," PLOG_U64(lineno) ",path=%s,"
+                    PLOG_U32(max) ",line=%s",
+                    spot, self->line, self->filename, self->maxSpotId,
+                    self->buffer));
+            }
+            else {
+                self->spotToReduct = spot;
+                self->inBuffer = 0;
+            }
+            break;
+        }
+    }
+
+    return rc;
+}
+
+
+static rc_t SpotIteratorInit(const char* redactFileName,
+    const Db* db, SpotIterator* self)
+{
+    rc_t rc = 0;
+    int64_t first = 0;
+
+    assert(self && db);
+
+    memset(self, 0, sizeof *self);
+
+    self->crnSpotId = 1;
+
+    rc = VCursorIdRange
+        (db->rCursor, db->rFilterIdx, &first, &self->maxSpotId);
+    DISP_RC(rc, "while calling VCursorIdRange");
+
+    self->spotToReduct = first - 1;
+
+    if (rc == 0) {
+        rc = SpotIteratorInitDirectory();
+    }
+
+    if (rc == 0) {
+        self->filename = redactFileName;
+        rc = KDirectoryOpenFileRead
+            (__SpotIteratorDirectory, &self->file, "%s", self->filename);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "while opening file '$(path)'", "path=%s", self->filename));
+        }
+    }
+
+    if (rc == 0) {
+        rc = SpotIteratorReadSpotToRedact(self);
+    }
+
+    return rc;
+}
+
+static rc_t SpotIteratorDestroy(SpotIterator* it)
+{
+    rc_t rc = 0;
+
+    assert(it);
+
+    rc = KFileRelease(it->file);
+
+    it->file = NULL;
+    it->inBuffer = 0;
+    it->hasCh = false;
+
+    {
+        rc_t rc2 = KDirectoryRelease(__SpotIteratorDirectory);
+        if (rc == 0)
+        {   rc = rc2; }
+        __SpotIteratorDirectory = NULL;
+    }
+
+    return rc;
+}
+
+/** Get next spot id, check whether it should be redacted.
+Returns false if maxSpotId reached */
+static bool SpotIteratorNext(SpotIterator* self, rc_t* rc,
+    int64_t* spot, bool* toRedact)
+{
+    bool hasNext = false;
+
+    assert(self && rc && spot && toRedact);
+
+    *rc = 0;
+    *toRedact = false;
+
+    if (self->crnSpotId <= self->maxSpotId) {
+        hasNext = true;
+        *spot = self->crnSpotId++;
+    }
+
+    if (*spot == self->spotToReduct) {
+        *toRedact = true;
+        *rc = SpotIteratorReadSpotToRedact(self);
+        if (*rc != 0) {
+            hasNext = false;
+        }
+    }
+
+    return hasNext;
+}
+
+static rc_t DbInit(rc_t rc, const CmdLine* args, Db* db)
+{
+    const char name[] = "READ_FILTER";
+
+    assert(args && db);
+
+    memset(db, 0, sizeof *db);
+
+    if (rc != 0)
+    {   return rc; }
+
+    db->table = args->table;
+
+    if (rc == 0) {
+        rc = VDBManagerMakeUpdate(&db->mgr, NULL);
+        DISP_RC(rc, "while calling VDBManagerMakeUpdate");
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerWritable(db->mgr, args->table);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcLocked)
+            {
+                rc = VDBManagerUnlock(db->mgr, args->table);
+                if (rc != 0) {
+                    PLOGERR(klogErr, (klogErr, rc,
+                        "while calling VDBManagerUnlock('$(table)')",
+                        "table=%s", args->table));
+                }
+                db->locked = true;
+            }
+            else {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "while calling VDBManagerWritable('$(table)')",
+                    "table=%s", args->table));
+                if (rc == RC(rcDB, rcPath, rcAccessing, rcPath, rcReadonly)) {
+                    PLOGERR(klogErr, (klogErr, rc,
+                        "N.B. It is possible '$(table)' was not locked properly"
+                        , "table=%s", args->table));
+                }
+            }
+        }
+    }
+
+    if (rc == 0) {
+        db->locked = true; /* has to be locked in production mode */
+        rc = VDBManagerOpenTableUpdate (db->mgr, &db->tbl, NULL, args->table);
+        if (rc != 0) {
+	    VDatabase *vdb;
+	    rc_t rc2 = VDBManagerOpenDBUpdate ( db->mgr, &vdb, NULL , args->table );
+	    if( rc2 == 0) {
+		rc2 = VDatabaseOpenTableUpdate ( vdb, &db->tbl, "SEQUENCE" );
+		if (rc2 == 0 ) rc = 0;
+		VDatabaseRelease ( vdb );
+	    }
+        }
+	if(rc != 0){
+            PLOGERR(klogErr, (klogErr, rc,
+                "while opening VTable '$(table)'", "table=%s", args->table));
+	}
+    } 
+    if( rc == 0) {
+        rc = VTableCreateCursorRead(db->tbl, &db->rCursor);
+        DISP_RC(rc, "while creating read cursor");
+        if (rc == 0) {
+            rc = VCursorAddColumn(db->rCursor, &db->rFilterIdx, "%s", name);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "while adding $(name) to read cursor", "name=%s", name));
+            }
+        }
+        if (rc == 0) {
+            rc = VCursorOpen(db->rCursor);
+            DISP_RC(rc, "while opening read cursor");
+        }
+    }
+    if (rc == 0) {
+        rc = VTableCreateCursorWrite(db->tbl, &db->wCursor, kcmInsert);
+        DISP_RC(rc, "while creating write cursor");
+        if (rc == 0) {
+            rc = VCursorAddColumn(db->wCursor, &db->wIdx, "%s", name);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "while adding $(name) to write cursor", "name=%s", name));
+            }
+        }
+        if (rc == 0) {
+            rc = VCursorOpen(db->wCursor);
+            DISP_RC(rc, "while opening write cursor");
+        }
+    }
+
+    return rc;
+}
+
+static rc_t DbDestroy(Db* db)
+{
+    rc_t rc = 0;
+
+    assert(db);
+
+    {
+        rc_t rc2 = VCursorRelease(db->rCursor);
+        db->rCursor = NULL;
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    {
+        rc_t rc2 = VCursorRelease(db->wCursor);
+        db->wCursor = NULL;
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    {
+        rc_t rc2 = VTableRelease(db->tbl);
+        db->tbl = NULL;
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    if (db->locked) {
+        rc_t rc2 = VDBManagerLock(db->mgr, "%s", db->table);
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    {
+        rc_t rc2 = VDBManagerRelease(db->mgr);
+        db->mgr = NULL;
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    return rc;
+}
+
+static rc_t Work(Db* db, SpotIterator* it)
+{
+    rc_t rc = 0;
+    bool toRedact = false;
+    int64_t row_id = 0;
+    spotid_t nSpots = 0;
+    spotid_t redactedSpots = 0;
+
+    uint8_t filter[64];
+    memset(filter, SRA_READ_FILTER_REDACTED, sizeof filter);
+
+    assert(it);
+
+    while (rc == 0 && SpotIteratorNext(it, &rc, &row_id, &toRedact)) {
+        uint8_t nreads = 0;
+        char bufferIn[64];
+        void* buffer = NULL;
+        uint32_t row_len = 0;
+
+        rc = Quitting();
+
+        ++nSpots;
+
+        if (rc == 0) {
+            uint32_t elem_bits = 8;
+            rc = VCursorReadDirect(db->rCursor, row_id, db->rFilterIdx,
+                elem_bits, bufferIn, sizeof bufferIn, &row_len);
+            DISP_RC(rc, "while reading READ_FILTER");
+	    nreads = row_len;
+        }
+        if (toRedact) {
+            buffer = filter;
+            ++redactedSpots;
+            DBGMSG(DBG_APP,DBG_COND_1,
+                ("Redacting spot %d: %d reads\n",row_id,nreads));
+        }
+        else {
+            buffer = bufferIn;
+        }
+        if (rc == 0) {
+            rc = VCursorOpenRow(db->wCursor);
+            DISP_RC(rc, "while opening row to write");
+            if (rc == 0) {
+                rc = VCursorWrite
+                    (db->wCursor, db->wIdx, 8 * nreads, buffer, 0, 1);
+                DISP_RC(rc, "while writing READ_FILTER");
+            }
+            if (rc == 0) {
+                rc = VCursorCommitRow(db->wCursor);
+                DISP_RC(rc, "while committing row");
+            }
+            if (rc == 0) {
+                rc = VCursorCloseRow(db->wCursor);
+                DISP_RC(rc, "while closing row");
+            }
+        }
+    }
+
+    db->nSpots = nSpots;
+    db->redactedSpots = redactedSpots;
+
+    if (rc == 0) {
+        rc = VCursorCommit(db->wCursor);
+        DISP_RC(rc, "while committing cursor");
+    }
+
+    return rc;
+}
+
+static rc_t Run(const CmdLine* args)
+{
+    rc_t rc = 0;
+
+    Db db;
+    SpotIterator it;
+
+    assert(args);
+
+    if (!SpotIteratorFileExists(args->file)) {
+        rc = RC(rcExe, rcFile, rcOpening, rcFile, rcNotFound);
+        PLOGERR(klogErr,
+            (klogErr, rc, "Cannot find '$(path)'", "path=%s", args->file));
+    }
+    else if (!SpotIteratorFileExists(args->table)) {
+        rc = RC(rcExe, rcTable, rcOpening, rcTable, rcNotFound);
+        PLOGERR(klogErr,
+            (klogErr, rc, "Cannot find '$(path)'", "path=%s", args->table));
+    }
+
+    {
+        rc_t rc2 = DbInit(rc, args, &db);
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    if (rc == 0) {
+        rc = SpotIteratorInit(args->file, &db, &it);
+    }
+
+    if (rc == 0) {
+        rc = Work(&db, &it);
+    }
+
+    if (rc == 0) {
+        PLOGMSG(klogInfo, (klogInfo,
+            "Success: redacted $(redacted) spots out of $(all)",
+            "redacted=%d,all=%d", db.redactedSpots, db.nSpots));
+    }
+
+    {
+        rc_t rc2 = SpotIteratorDestroy(&it);
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    {
+        rc_t rc2 = DbDestroy(&db);
+        if (rc == 0)
+        {   rc = rc2; }
+    }
+
+    return rc;
+}
+
+#define OPTION_FILE  "file"
+#define ALIAS_FILE   "F"
+
+static const char* file_usage []
+    = { "File containing SpotId-s to redact" , NULL };
+
+OptDef Options[] =  {
+     { OPTION_FILE , ALIAS_FILE , NULL, file_usage,  1, true , true }
+};
+
+rc_t CC UsageSummary (const char* progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "  %s [Options] -" ALIAS_FILE " <file> <table>\n", progname);
+}
+
+const char UsageDefaultName[] = "rd-filter-redact";
+
+rc_t CC Usage(const Args* args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine(ALIAS_FILE, OPTION_FILE, "file", file_usage);
+
+    HelpOptionsStandard();
+
+    HelpVersion(fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+static rc_t CmdLineInit(const Args* args, CmdLine* cmdArgs)
+{
+    rc_t rc = 0;
+
+    assert(args && cmdArgs);
+
+    memset(cmdArgs, 0, sizeof *cmdArgs);
+
+    while (rc == 0) {
+        uint32_t pcount = 0;
+
+        /* file path parameter */
+        rc = ArgsOptionCount(args, OPTION_FILE, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing file name");
+            break;
+        }
+        if (pcount < 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR(klogErr, rc, "Missing file parameter");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many file parameters");
+            break;
+        }
+        rc = ArgsOptionValue (args, OPTION_FILE, 0, (const void **)&cmdArgs->file);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure retrieving file name");
+            break;
+        }
+
+        /* table path parameter */
+        rc = ArgsParamCount(args, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing table name");
+            break;
+        }
+        if (pcount < 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR(klogErr, rc, "Missing table parameter");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many table parameters");
+            break;
+        }
+        rc = ArgsParamValue(args, 0, (const void **)&cmdArgs->table);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure retrieving table name");
+            break;
+        }
+
+        break;
+    }
+
+    if (rc != 0) {
+        MiniUsage (args);
+    }
+
+    return rc;
+}
+
+rc_t CC KMain(int argc, char* argv[])
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+
+    CmdLine cmdArgs;
+
+    LogLevelSet("info");
+
+    rc = ArgsMakeAndHandle
+        (&args, argc, argv, 1, Options, sizeof Options / sizeof(Options[0]));
+
+    if (rc == 0) {
+        rc = CmdLineInit(args, &cmdArgs);
+    }
+
+    if (rc == 0) {
+        rc = Run(&cmdArgs);
+    }
+
+    ArgsWhack(args);
+
+    if (rc == RC(rcVDB, rcTable, rcOpening, rcSchema, rcNotFound))
+    {   exit(10); }
+
+    return rc;
+}
+
+/************************************ EOF ****************** ******************/
diff --git a/tools/rd-filter-redact/test-read-write-cursor.c b/tools/rd-filter-redact/test-read-write-cursor.c
new file mode 100644
index 0000000..bcee0a1
--- /dev/null
+++ b/tools/rd-filter-redact/test-read-write-cursor.c
@@ -0,0 +1,220 @@
+/******************************************************************************/
+#include <kapp/main.h>
+
+#include <sra/wsradb.h> /* spotid_t */
+
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/table.h> /* VDBTable */
+#include <vdb/cursor.h> /* VCursor */
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/status.h> /* STSMSG */
+#include <klib/debug.h> /* KDbgSetString */
+#include <klib/rc.h> /* RC */
+
+#include <ctype.h> /* isblank */
+#include <string.h> /* memset */
+#include <stdio.h> /* sscanf */
+#include <assert.h>
+
+#define DISP_RC(lvl,rc,msg) (void)((rc == 0) ? 0 : LOGERR(lvl, rc, msg))
+#define DISP_RC_INT(rc,msg) DISP_RC(klogInt,rc,msg)
+
+const char UsageDefaultName[] = "test-read-write-cursor";
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t CC Usage(const Args* args) { return 0; }
+
+rc_t CC KMain(int argc, char* argv[])
+{
+    const char table[] = "/home/klymenka/REDACT-IN";
+    const char name[] = "READ_FILTER";
+
+    rc_t rc = 0;
+
+    bool locked = false;
+
+    VDBManager* mgr;
+    VTable *tbl;
+    const VCursor *rCursor = NULL;
+
+    int i;
+
+    LogLevelSet("info");
+
+    for (i = 1; i < argc; ++i) {
+        if (!strcmp(argv[i], "-+")) {
+            if (++i <= argc) {
+#if _DEBUGGING
+	        KDbgSetString(argv[i]);
+#endif
+	    }
+        }
+    }
+
+  /*KDbgSetString("VDB");*/
+
+    if (rc == 0) {
+/* +01: ManagerMake */
+        LOGMSG(klogInfo, "VDBManagerMakeUpdate");
+        rc = VDBManagerMakeUpdate(&mgr, NULL);
+        DISP_RC_INT(rc, "while calling VDBManagerMakeUpdate");
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerWritable(mgr, "%s", table);
+        if (GetRCState(rc) == rcLocked) {
+            LOGMSG(klogInfo, "VDBManagerUnlock");
+            rc = VDBManagerUnlock(mgr, "%s", table);
+            DISP_RC_INT(rc, "while calling VDBManagerUnlock");
+            locked = true;
+        }
+    }
+
+    if (rc == 0) {
+/* +02: OpenTable */
+        PLOGMSG(klogInfo, (klogInfo,
+            "VDBManagerOpenTableUpdate(\"$(t)\")", "t=%s", table));
+        rc = VDBManagerOpenTableUpdate
+            (mgr, &tbl, NULL, "%s", table);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "while opening VTable '$(path)'", "path=%s", table));
+        }
+    }
+
+    if (rc == 0) {
+/* +03: CreateCursorRead */
+        LOGMSG(klogInfo, "VDBManagerUnlock");
+        rc = VTableCreateCursorRead(tbl, &rCursor);
+        DISP_RC_INT(rc, "while creating read cursor");
+
+#if 1
+        if (rc == 0) {
+            uint32_t idx;
+            PLOGMSG(klogInfo, (klogInfo,
+                "VCursorAddColumn(read cursor, \"$(n)\")", "n=%s", name));
+            rc = VCursorAddColumn(rCursor, &idx, "%s", name);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "while adding $(name) to read cursor", "name=%s", name));
+            }
+        }
+#endif
+        if (rc == 0) {
+            LOGMSG(klogInfo, "VCursorOpen(read cursor)");
+            rc = VCursorOpen(rCursor);
+            DISP_RC_INT(rc, "while opening read cursor");
+        }
+    }
+
+    if (rc == 0) {
+        VCursor *cursor;
+        uint32_t idx;
+/* +04: CreateCursorWrite */
+        LOGMSG(klogInfo, "VTableCreateCursorWrite");
+        rc = VTableCreateCursorWrite(tbl, &cursor, kcmInsert);
+        DISP_RC_INT(rc, "while creating write cursor");
+        if (rc == 0) {
+            PLOGMSG(klogInfo, (klogInfo,
+                "VCursorAddColumn(write cursor, \"$(n)\")", "n=%s", name));
+            rc = VCursorAddColumn(cursor, &idx, "%s", name);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "while adding $(name) to write cursor", "name=%s", name));
+            }
+        }
+        if (rc == 0) {
+            LOGMSG(klogInfo, "VCursorOpen(write cursor)");
+            rc = VCursorOpen(cursor);
+            DISP_RC_INT(rc, "while opening write cursor");
+        }
+#if 1
+        for (i = 0; i < 3 && rc == 0; ++i) {
+            if (rc == 0) {
+                PLOGMSG(klogInfo, (klogInfo,
+                    "VCursorOpenRow(write cursor) $(i)", "i=%d", i));
+                rc = VCursorOpenRow(cursor);
+                DISP_RC_INT(rc, "while opening row to write");
+            }
+            if (rc == 0) {
+                char buffer[1];
+                char b;
+                switch (i) {
+                    case 0:
+                        buffer[0] = SRA_READ_FILTER_CRITERIA;
+                        buffer[0] = SRA_READ_FILTER_REJECT;
+                        break;
+                    case 1:
+                        buffer[0] = SRA_READ_FILTER_REJECT;
+                        buffer[0] = SRA_READ_FILTER_CRITERIA;
+                        break;
+                    case 2:
+                        buffer[0] = SRA_READ_FILTER_REDACTED;
+                        break;
+                }
+                buffer[0] = SRA_READ_FILTER_PASS;
+                b = buffer[0];
+                PLOGMSG(klogInfo, (klogInfo,
+                    "VCursorWrite('$(v)') $(i)", "v=%s,i=%d",
+                    b == SRA_READ_FILTER_REDACTED ? "SRA_READ_FILTER_REDACTED" :
+                        "?",
+                    i));
+                rc = VCursorWrite(cursor, idx, 8, buffer, 0, 1);
+                DISP_RC_INT(rc, "while writing");
+            }
+            if (rc == 0) {
+                PLOGMSG(klogInfo, (klogInfo,
+                    "VCursorCommitRow(write cursor) $(i)", "i=%d", i));
+                rc = VCursorCommitRow(cursor);
+                DISP_RC_INT(rc, "while committing row");
+            }
+            PLOGMSG(klogInfo, (klogInfo,
+                "VCursorCloseRow(write cursor) $(i)", "i=%d", i));
+            {
+                rc_t rc2 = VCursorCloseRow(cursor);
+                DISP_RC_INT(rc2, "while closing row");
+                if (rc == 0)
+                {   rc = rc2; }
+            }
+        }
+#endif
+        LOGMSG(klogInfo, "VCursorRelease(read cursor)");
+/* -03: CreateCursorRead */
+        VCursorRelease(rCursor);
+        if (rc == 0) {
+            LOGMSG(klogInfo, "VCursorCommit(write cursor)");
+            rc = VCursorCommit(cursor);
+            DISP_RC_INT(rc, "while committing cursor");
+        }
+        LOGMSG(klogInfo, "VCursorRelease(write cursor)");
+/* -04: CreateCursorWrite */
+        VCursorRelease(cursor);
+    }
+
+    LOGMSG(klogInfo, "VTableRelease");
+/* -02: OpenTable */
+    VTableRelease(tbl);
+    LOGMSG(klogInfo, "VDBManagerLock");
+    if (locked) {
+        rc_t rc2 = VDBManagerLock(mgr, "%s", table);
+        DISP_RC_INT(rc2, "while VDBManagerLock");
+    }
+
+/* -01: ManagerMake */
+    LOGMSG(klogInfo, "VDBManagerRelease");
+    VDBManagerRelease(mgr);
+
+    if (rc == 0) {
+        LOGMSG(klogInfo, "SUCCESS");
+    }
+    else { LOGMSG(klogInfo, "FAILURE"); }
+
+    return rc;
+}
diff --git a/tools/sra-dump/.gitignore b/tools/sra-dump/.gitignore
new file mode 100644
index 0000000..c97f963
--- /dev/null
+++ b/tools/sra-dump/.gitignore
@@ -0,0 +1 @@
+*.sh
diff --git a/tools/sra-dump/Makefile b/tools/sra-dump/Makefile
new file mode 100644
index 0000000..2f3ac7c
--- /dev/null
+++ b/tools/sra-dump/Makefile
@@ -0,0 +1,128 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-dump
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	fastq-dump \
+	sff-dump \
+	illumina-dump \
+	abi-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# Common dumper definitions
+#
+DUMP_COMMON_SRC = \
+	factory \
+	fasta_dump \
+	core
+
+DUMP_COMMON_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+#-------------------------------------------------------------------------------
+# fastq-dump
+#
+FASTQ_DUMP_SRC = \
+	$(DUMP_COMMON_SRC) \
+	fastq
+
+FASTQ_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_DUMP_SRC))
+
+$(BINDIR)/fastq-dump: $(FASTQ_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(DUMP_COMMON_LIB)
+
+#-------------------------------------------------------------------------------
+# sff-dump
+#
+SFF_DUMP_SRC = \
+	$(DUMP_COMMON_SRC) \
+	sff
+
+SFF_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(SFF_DUMP_SRC))
+
+$(BINDIR)/sff-dump: $(SFF_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(DUMP_COMMON_LIB)
+
+#-------------------------------------------------------------------------------
+# illumina-dump
+#
+ILLUMINA_DUMP_SRC = \
+	$(DUMP_COMMON_SRC) \
+	illumina
+
+ILLUMINA_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(ILLUMINA_DUMP_SRC))
+
+$(BINDIR)/illumina-dump: $(ILLUMINA_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(DUMP_COMMON_LIB)
+
+#-------------------------------------------------------------------------------
+# abi-dump
+#
+ABI_DUMP_SRC = \
+	$(DUMP_COMMON_SRC) \
+	abi
+
+ABI_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(ABI_DUMP_SRC))
+
+$(BINDIR)/abi-dump: $(ABI_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(DUMP_COMMON_LIB)
+
diff --git a/tools/sra-dump/abi.c b/tools/sra-dump/abi.c
new file mode 100644
index 0000000..cc7c9ff
--- /dev/null
+++ b/tools/sra-dump/abi.c
@@ -0,0 +1,907 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/container.h>
+#include <klib/printf.h>
+#include <kapp/main.h>
+
+#include <sra/sradb.h>
+#include <sra/abi.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "core.h"
+#include "debug.h"
+
+#define DATABUFFERINITSIZE 10240
+
+/* ============== Absolid read type (bio/tech) filter ============================ */
+
+typedef struct Absolid2BioFilter_struct {
+    const AbsolidReader* reader;
+} Absolid2BioFilter;
+
+/* leave only up to 2 first bio reads */
+static
+rc_t Absolid2BioFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+{
+    rc_t rc = 0;
+    Absolid2BioFilter* self = (Absolid2BioFilter*)cself;
+
+    if( self == NULL || key == NULL ) {
+        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
+    } else {
+        if( (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) {
+            uint32_t num_reads = 0;
+            if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                uint32_t q, readId;
+                make_readmask(new_mask);
+                SRAReadTypes read_type = SRA_READ_TYPE_TECHNICAL;
+
+                clear_readmask(new_mask);
+                for(q = 0, readId = 0; rc == 0 && readId < num_reads && q < 2; readId++) {
+                    if( (rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, &read_type, NULL, NULL, NULL, NULL)) == 0 ) {
+                        if( read_type & SRA_READ_TYPE_BIOLOGICAL ) {
+                            set_readmask(new_mask, readId);
+                            q++;
+                        }
+                    }
+                }
+                *key = "";
+                copy_readmask(new_mask, readmask);
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            *key = NULL;
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct Absolid2BioFilterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    const AbsolidReader* reader;
+} Absolid2BioFilterFactory;
+
+static
+rc_t Absolid2BioFilterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    Absolid2BioFilterFactory* self = (Absolid2BioFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
+                               false, false, 0, 0, 0, false);
+    }
+    return rc;
+}
+
+static
+rc_t Absolid2BioFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    Absolid2BioFilterFactory* self = (Absolid2BioFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(Absolid2BioFilter), Absolid2BioFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
+            ((Absolid2BioFilter*)(*splitter))->reader = self->reader;
+        }
+    }
+    return rc;
+}
+
+static
+void Absolid2BioFilterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        Absolid2BioFilterFactory* self = (Absolid2BioFilterFactory*)cself;
+        AbsolidReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t Absolid2BioFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+{
+    rc_t rc = 0;
+    Absolid2BioFilterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+                                             Absolid2BioFilterFactory_Init,
+                                             Absolid2BioFilterFactory_NewObj,
+                                             Absolid2BioFilterFactory_Release)) == 0 ) {
+        obj = (Absolid2BioFilterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+    }
+    return rc;
+}
+
+/* ============== Absolid label assigning ============================ */
+
+typedef struct AbsolidLabelerFilter_struct {
+    const AbsolidReader* reader;
+    bool is_platform_cs_native;
+    SRASplitter_Keys keys[8];
+    size_t key_sz[8];
+} AbsolidLabelerFilter;
+
+static
+rc_t AbsolidLabelerFilter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+{
+    rc_t rc = 0;
+    AbsolidLabelerFilter* self = (AbsolidLabelerFilter*)cself;
+
+    if( self == NULL || key == NULL ) {
+        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
+    } else {
+        *keys = 0;
+        if( rc == 0 && (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) {
+            uint32_t num_reads = 0;
+            if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                uint32_t readId, q;
+                const char* read_label;
+                INSDC_coord_len read_label_sz = 0;
+                INSDC_coord_len read_len = 0;
+
+                *key = self->keys;
+                *keys = sizeof(self->keys) / sizeof(self->keys[0]);
+                for(q = 0; q < *keys; q++) {
+                    clear_readmask(self->keys[q].readmask);
+                }
+                for(q = 0, readId = 0; rc == 0 && readId < num_reads; readId++) {
+                    if( !isset_readmask(readmask, readId) ) {
+                        continue;
+                    }
+                    rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, &read_label, &read_label_sz, NULL, &read_len);
+                    if( read_len == 0 ) {
+                        continue;
+                    }
+                    if( self->is_platform_cs_native ) {
+                        uint32_t i;
+                        for(i = 0; i < *keys; i++) {
+                            if( read_label_sz == self->key_sz[i] && strncmp(read_label, self->keys[i].key, read_label_sz) == 0 ) {
+                                set_readmask(self->keys[i].readmask, readId);
+                                break;
+                            }
+                        }
+                        if( i >= *keys ) {
+                            rc = RC(rcExe, rcNode, rcExecuting, rcTag, rcUnexpected);
+                        }
+                    } else {
+                        /* since prev filter leaves only 2 first bio reads labels F3 and R3 wil be used */
+                        set_readmask(self->keys[q].readmask, readId);
+                    }
+                    q++;
+                }
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct AbsolidLabelerFilterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    bool is_platform_cs_native;
+    const AbsolidReader* reader;
+} AbsolidLabelerFilterFactory;
+
+static
+rc_t AbsolidLabelerFilterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    AbsolidLabelerFilterFactory* self = (AbsolidLabelerFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
+                               false, false, 0, 0, 0, false);
+    }
+    return rc;
+}
+
+static
+rc_t AbsolidLabelerFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    AbsolidLabelerFilterFactory* self = (AbsolidLabelerFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidLabelerFilter), NULL, AbsolidLabelerFilter_GetKeySet, NULL, NULL)) == 0 ) {
+            ((AbsolidLabelerFilter*)(*splitter))->reader = self->reader;
+            ((AbsolidLabelerFilter*)(*splitter))->is_platform_cs_native = self->is_platform_cs_native;
+            ((AbsolidLabelerFilter*)(*splitter))->keys[0].key = "F3";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[1].key = "R3";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[2].key = "F5-P2";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[3].key = "F5-BC";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[4].key = "F5-RNA";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[5].key = "F5-DNA";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[6].key = "F3-DNA";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[7].key = "BC";
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[0] = 2;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[1] = 2;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[2] = 5;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[3] = 5;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[4] = 6;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[5] = 6;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[6] = 6;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[7] = 2;
+        }
+    }
+    return rc;
+}
+
+static
+void AbsolidLabelerFilterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        AbsolidLabelerFilterFactory* self = (AbsolidLabelerFilterFactory*)cself;
+        AbsolidReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t AbsolidLabelerFilterFactory_Make(const SRASplitterFactory** cself, const char* accession,
+                                      const SRATable* table, bool is_platform_cs_native)
+{
+    rc_t rc = 0;
+    AbsolidLabelerFilterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
+                                             AbsolidLabelerFilterFactory_Init,
+                                             AbsolidLabelerFilterFactory_NewObj,
+                                             AbsolidLabelerFilterFactory_Release)) == 0 ) {
+        obj = (AbsolidLabelerFilterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+        obj->is_platform_cs_native = is_platform_cs_native;
+    }
+    return rc;
+}
+
+/* ============== Absolid min read length splitter ============================ */
+
+char* AbsolidReadLenFilter_key_buf = NULL;
+
+typedef struct AbsolidReadLenFilter_struct {
+    const AbsolidReader* reader;
+} AbsolidReadLenFilter;
+
+
+/* skip all reads with len < minreadlen */
+static
+rc_t AbsolidReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+{
+    rc_t rc = 0;
+    AbsolidReadLenFilter* self = (AbsolidReadLenFilter*)cself;
+
+    if( self == NULL || key == NULL ) {
+        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
+    } else {
+        *key = "";
+
+        if( rc == 0 && (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) {
+            uint32_t num_reads = 0;
+            if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                uint32_t readId;
+                make_readmask(new_mask);
+                INSDC_coord_len read_len = 0;
+
+                clear_readmask(new_mask);
+                for(readId = 0; rc == 0 && readId < num_reads; readId++) {
+                    if( !isset_readmask(readmask, readId) ) {
+                        continue;
+                    }
+                    rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len);
+                    if( rc == 0 && read_len > 0 ) {
+                        set_readmask(new_mask, readId);
+                    }
+                }
+                copy_readmask(new_mask, readmask);
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            *key = NULL;
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct AbsolidReadLenFilterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    bool clip;
+    uint32_t minReadLen;
+    const AbsolidReader* reader;
+} AbsolidReadLenFilterFactory;
+
+static
+rc_t AbsolidReadLenFilterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    AbsolidReadLenFilterFactory* self = (AbsolidReadLenFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
+                               false, !self->clip, self->minReadLen, 0, 0, false);
+    }
+    return rc;
+}
+
+static
+rc_t AbsolidReadLenFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    AbsolidReadLenFilterFactory* self = (AbsolidReadLenFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidReadLenFilter), AbsolidReadLenFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
+            ((AbsolidReadLenFilter*)(*splitter))->reader = self->reader;
+        }
+    }
+    return rc;
+}
+
+static
+void AbsolidReadLenFilterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        AbsolidReadLenFilterFactory* self = (AbsolidReadLenFilterFactory*)cself;
+        AbsolidReaderWhack(self->reader);
+        free(AbsolidReadLenFilter_key_buf);
+    }
+}
+
+static
+rc_t AbsolidReadLenFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table,
+                                      bool clip, uint32_t minReadLen)
+{
+    rc_t rc = 0;
+    AbsolidReadLenFilterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+                                             AbsolidReadLenFilterFactory_Init,
+                                             AbsolidReadLenFilterFactory_NewObj,
+                                             AbsolidReadLenFilterFactory_Release)) == 0 ) {
+        obj = (AbsolidReadLenFilterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+        obj->minReadLen = minReadLen;
+        obj->clip = clip;
+    }
+    return rc;
+}
+
+/* ============== Absolid quality filter ============================ */
+
+typedef struct AbsolidQFilter_struct {
+    const AbsolidReader* reader;
+    KDataBuffer* b;
+} AbsolidQFilter;
+
+
+/* filter out reads by leading/trialing quality */
+static
+rc_t AbsolidQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+{
+    rc_t rc = 0;
+    AbsolidQFilter* self = (AbsolidQFilter*)cself;
+
+    if( self == NULL || key == NULL ) {
+        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
+    } else {
+        uint32_t num_reads = 0;
+
+        if( (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) {
+            if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                uint32_t readId;
+                make_readmask(new_mask);
+                INSDC_coord_len read_len = 0;
+                static char const* const colorStr = "..........";
+                static const int xLen = 10;
+
+                clear_readmask(new_mask);
+                for(readId = 0; rc == 0 && readId < num_reads; readId++) {
+                    if( (rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
+                        IF_BUF((AbsolidReaderBase(self->reader, readId + 1, self->b->base, KDataBufferBytes(self->b), NULL)), self->b, read_len) {
+                            const char* b = self->b->base;
+                            if( strncmp(&b[1], colorStr, xLen) == 0 && strcmp(&b[read_len - xLen + 1], colorStr) == 0 )  {
+                                continue;
+                            }
+                        }
+                        set_readmask(new_mask, readId);
+                    }
+                }
+                *key = "";
+                copy_readmask(new_mask, readmask);
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            *key = NULL;
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct AbsolidQFilterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    bool clip;
+    const AbsolidReader* reader;
+    KDataBuffer buf;
+} AbsolidQFilterFactory;
+
+static
+rc_t AbsolidQFilterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    AbsolidQFilterFactory* self = (AbsolidQFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
+        rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
+                               false, self->clip, 0, 0, 0, false);
+    }
+    return rc;
+}
+
+static
+rc_t AbsolidQFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    AbsolidQFilterFactory* self = (AbsolidQFilterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidQFilter), AbsolidQFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
+            ((AbsolidQFilter*)(*splitter))->reader = self->reader;
+            ((AbsolidQFilter*)(*splitter))->b = &self->buf;
+        }
+    }
+    return rc;
+}
+
+static
+void AbsolidQFilterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        AbsolidQFilterFactory* self = (AbsolidQFilterFactory*)cself;
+        KDataBufferWhack(&self->buf);
+        AbsolidReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t AbsolidQFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table, bool clip)
+{
+    rc_t rc = 0;
+    AbsolidQFilterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+                                             AbsolidQFilterFactory_Init,
+                                             AbsolidQFilterFactory_NewObj,
+                                             AbsolidQFilterFactory_Release)) == 0 ) {
+        obj = (AbsolidQFilterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+        obj->clip = clip;
+    }
+    return rc;
+}
+
+/* ============== Absolid formatter object  ============================ */
+
+typedef struct AbsolidFormatterSplitter_struct {
+    const AbsolidReader* reader;
+    char pfx[10 * 1024];
+    int pfx_sz;
+    KDataBuffer* hb;
+    KDataBuffer* b;
+} AbsolidFormatterSplitter;
+
+static
+rc_t AbsolidFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+{
+    rc_t rc = 0;
+    AbsolidFormatterSplitter* self = (AbsolidFormatterSplitter*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) {
+            const char* prefix;
+            size_t head_sz, writ = 0;
+            uint32_t num_reads, readId;
+
+            rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads);
+
+            for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
+                if( !isset_readmask(readmask, readId - 1) ) {
+                    continue;
+                }
+                if( (rc = AbsolidReaderSpotName(self->reader, &prefix, &head_sz, NULL, NULL)) == 0 ) {
+                    if( head_sz != self->pfx_sz || memcmp(self->pfx, prefix, head_sz) != 0 ) {
+                        if( head_sz >= sizeof(self->pfx) ) {
+                            rc = RC(rcSRA, rcString, rcCopying, rcBuffer, rcInsufficient);
+                        } else {
+                            self->pfx_sz = head_sz;
+                            memmove(self->pfx, prefix, head_sz);
+                            IF_BUF((string_printf(self->hb->base, KDataBufferBytes(self->hb), &head_sz,
+                                   "#\n# Title: %.*s\n#\n", self->pfx_sz, self->pfx)), self->hb, head_sz);
+                        }
+                    } else {
+                        head_sz = 0;
+                    }
+                }
+                if( rc == 0 ) {
+                    char* h = self->hb->base;
+                    IF_BUF((AbsolidReaderHeader(self->reader, readId, &h[head_sz],
+                            KDataBufferBytes(self->hb) - head_sz - 1, &writ)), self->hb, writ + head_sz + 1) {
+                        head_sz += writ;
+                        h[head_sz++] = '\n';
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, ".csfasta")) == 0 ) {
+                    IF_BUF((AbsolidReaderBase(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_QV.qual")) == 0 ) {
+                    IF_BUF((AbsolidReaderQuality(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledFTC.fasta")) == 0 ) {
+                    IF_BUF((AbsolidReaderSignalFTC(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY3.fasta")) == 0 ) {
+                    IF_BUF((AbsolidReaderSignalCY3(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledTXR.fasta")) == 0 ) {
+                    IF_BUF((AbsolidReaderSignalTXR(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+                if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY5.fasta")) == 0 ) {
+                    IF_BUF((AbsolidReaderSignalCY5(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                        }
+                    }
+                }
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct AbsolidFormatterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    bool orig;
+    bool clip;
+    const AbsolidReader* reader;
+    KDataBuffer hbuf;
+    KDataBuffer buf;
+} AbsolidFormatterFactory;
+
+static
+rc_t AbsolidFormatterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    AbsolidFormatterFactory* self = (AbsolidFormatterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = KDataBufferMakeBytes(&self->hbuf, DATABUFFERINITSIZE)) == 0 &&
+               (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
+        rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
+                               self->orig, !self->clip, 0, 0, 0, true);
+    }
+    return rc;
+}
+
+static
+rc_t AbsolidFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    AbsolidFormatterFactory* self = (AbsolidFormatterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidFormatterSplitter), NULL, NULL, AbsolidFormatterSplitter_Dump, NULL)) == 0 ) {
+            ((AbsolidFormatterSplitter*)(*splitter))->reader = self->reader;
+            ((AbsolidFormatterSplitter*)(*splitter))->pfx[0] = '\0';
+            ((AbsolidFormatterSplitter*)(*splitter))->pfx_sz = 0;
+            ((AbsolidFormatterSplitter*)(*splitter))->hb = &self->hbuf;
+            ((AbsolidFormatterSplitter*)(*splitter))->b = &self->buf;
+
+        }
+    }
+    return rc;
+}
+
+static
+void AbsolidFormatterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        AbsolidFormatterFactory* self = (AbsolidFormatterFactory*)cself;
+        KDataBufferWhack(&self->hbuf);
+        KDataBufferWhack(&self->buf);
+        AbsolidReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t AbsolidFormatterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table, bool orig, bool clip)
+{
+    rc_t rc = 0;
+    AbsolidFormatterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterFormat, sizeof(*obj),
+                                             AbsolidFormatterFactory_Init,
+                                             AbsolidFormatterFactory_NewObj,
+                                             AbsolidFormatterFactory_Release)) == 0 ) {
+        obj = (AbsolidFormatterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+        obj->orig = orig;
+        obj->clip = clip;
+    }
+    return rc;
+}
+
+/* ### External entry points ##################################################### */
+const char UsageDefaultName[] = "abi-dump";
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+struct AbsolidArgs_struct {
+    bool is_platform_cs_native;
+
+    uint32_t minReadLen;
+    bool applyClip;
+    bool dumpOrigFmt;
+    bool qual_filter;
+} AbsolidArgs;
+
+rc_t AbsolidDumper_Release(const SRADumperFmt* fmt)
+{
+    if( fmt == NULL ) {
+        return RC(rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid);
+    }
+    return 0;
+}
+
+bool AbsolidDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[])
+{
+    const char* arg = NULL;
+
+    if( fmt == NULL || f == NULL || i == NULL || argv == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid), "null param");
+        return false;
+    } else if( f(fmt, "M", "minReadLen", i, argc, argv, &arg) ) {
+        AbsolidArgs.minReadLen = AsciiToU32(arg, NULL, NULL);
+    } else if( f(fmt, "W", "noclip", i, argc, argv, NULL) ) {
+        AbsolidArgs.applyClip = false;
+    } else if( f(fmt, "F", "origfmt", i, argc, argv, NULL) ) {
+        AbsolidArgs.dumpOrigFmt = true;
+    } else if( f(fmt, "B", "noDotReads", i, argc, argv, NULL) ) {
+        AbsolidArgs.qual_filter = true;
+    } else {
+        return false;
+    }
+    return true;
+}
+
+rc_t AbsolidDumper_Factories(const SRADumperFmt* fmt, const SRASplitterFactory** factory)
+{
+    rc_t rc = 0;
+    const SRASplitterFactory* parent = NULL, *child = NULL;
+
+    if( fmt == NULL || factory == NULL ) {
+        return RC(rcExe, rcFormatter, rcReading, rcParam, rcInvalid);
+    }
+    *factory = NULL;
+
+    {
+        const SRAColumn* c = NULL;
+        if( (rc = SRATableOpenColumnRead(fmt->table, &c, "PLATFORM", sra_platform_id_t)) == 0 ) {
+            const INSDC_SRA_platform_id* platform;
+            bitsz_t o, z;
+            if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) == 0 ) {
+                if( *platform == SRA_PLATFORM_ABSOLID ) {
+                    AbsolidArgs.is_platform_cs_native = true;
+                }
+            }
+            SRAColumnRelease(c);
+        } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == ( enum RCObject )rcColumn ) {
+            rc = 0;
+        }
+    }
+
+    if( rc == 0 ) {
+        if( (rc = Absolid2BioFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
+            if( parent != NULL ) {
+                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+                    SRASplitterFactory_Release(child);
+                } else {
+                    parent = child;
+                }
+            } else {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+    if( rc == 0 ) {
+        if( (rc = AbsolidLabelerFilterFactory_Make(&child, fmt->accession, fmt->table, AbsolidArgs.is_platform_cs_native)) == 0 ) {
+            if( parent != NULL ) {
+                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+                    SRASplitterFactory_Release(child);
+                } else {
+                    parent = child;
+                }
+            } else {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+    if( rc == 0 && AbsolidArgs.minReadLen > 0 ) {
+        if( (rc = AbsolidReadLenFilterFactory_Make(&child, fmt->accession, fmt->table,
+                                                   AbsolidArgs.applyClip, AbsolidArgs.minReadLen)) == 0 ) {
+            if( parent != NULL ) {
+                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+                    SRASplitterFactory_Release(child);
+                } else {
+                    parent = child;
+                }
+            } else {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+    if( rc == 0 && AbsolidArgs.qual_filter ) {
+        if( (rc = AbsolidQFilterFactory_Make(&child, fmt->accession, fmt->table, AbsolidArgs.applyClip)) == 0 ) {
+            if( parent != NULL ) {
+                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+                    SRASplitterFactory_Release(child);
+                } else {
+                    parent = child;
+                }
+            } else {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+    if( rc == 0 ) {
+        if( (rc = AbsolidFormatterFactory_Make(&child, fmt->accession, fmt->table,
+                                               AbsolidArgs.dumpOrigFmt, AbsolidArgs.applyClip)) == 0 ) {
+            if( parent != NULL ) {
+                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+                    SRASplitterFactory_Release(child);
+                }
+            } else {
+                *factory = child;
+            }
+        }
+    }
+    return rc;
+}
+
+/* main entry point of the file */
+rc_t SRADumper_Init(SRADumperFmt* fmt)
+{
+    static const SRADumperFmt_Arg arg[] =
+        {
+            {"M", "minReadLen", "len", {"Minimum read length to output, default is 25", NULL}},
+            {"W", "noclip", NULL, {"Do not clip quality left and right for spot", NULL}},
+            {"F", "origfmt", NULL, {"Excludes SRR accession on defline", NULL}},
+            {"B", "noDotReads", NULL, {"Do not output reads consisting mostly of dots", NULL}},
+            {NULL, NULL, NULL, {NULL}}
+        };
+    AbsolidArgs.is_platform_cs_native = false;
+    AbsolidArgs.minReadLen = 25;
+    AbsolidArgs.applyClip = true;
+    AbsolidArgs.dumpOrigFmt = false;
+    AbsolidArgs.qual_filter = false;
+
+    if( fmt == NULL ) {
+        return RC(rcExe, rcFileFormat, rcConstructing, rcParam, rcNull);
+    }
+    fmt->release = AbsolidDumper_Release;
+    fmt->arg_desc = arg;
+    fmt->add_arg = AbsolidDumper_AddArg;
+    fmt->get_factory = AbsolidDumper_Factories;
+    fmt->gzip = true;
+    fmt->bzip2 = true;
+
+    return 0;
+}
diff --git a/tools/sra-dump/core.c b/tools/sra-dump/core.c
new file mode 100644
index 0000000..7dae0b4
--- /dev/null
+++ b/tools/sra-dump/core.c
@@ -0,0 +1,1717 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/table.h> /* VTableRelease */
+#include <kfg/config.h> /* KConfigDisableUserSettings */
+
+#include <vdb/manager.h> /* VDBManagerRelease */
+#include <vdb/vdb-priv.h> /* VDBManagerDisablePagemapThread() */
+#include <kdb/manager.h> /* for different path-types */
+#include <vdb/dependencies.h> /* UIError */
+#include <vdb/report.h>
+#include <vdb/database.h>
+
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/report.h> /* ReportInit */
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/text.h>
+
+#include <kapp/main.h>
+#include <kfs/directory.h>
+#include <sra/sradb-priv.h>
+#include <sra/types.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+#include "core.h"
+#include "fasta_dump.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+/* ### checks to see if NREADS <= nreads_max defined in factory.h ##################################################### */
+
+typedef struct MaxNReadsValidator_struct
+{
+    const SRAColumn* col;
+    uint64_t rejected_spots;
+} MaxNReadsValidator;
+
+
+static rc_t MaxNReadsValidator_GetKey( const SRASplitter* cself, 
+    const char** key, spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    MaxNReadsValidator* self = ( MaxNReadsValidator* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        const void* nreads = NULL;
+        bitsz_t o = 0, sz = 0;
+        uint64_t nn = 0;
+
+        *key = "";
+        if ( self->col != NULL )
+        {
+            rc = SRAColumnRead( self->col, spot, &nreads, &o, &sz );
+            if ( rc == 0 )
+            {
+                switch( sz )
+                {
+                    case 8:
+                        nn = *((const uint8_t*)nreads);
+                        break;
+                    case 16:
+                        nn = *((const uint16_t*)nreads);
+                        break;
+                    case 32:
+                        nn = *((const uint32_t*)nreads);
+                        break;
+                    case 64:
+                        nn = *((const uint64_t*)nreads);
+                        break;
+                    default:
+                        rc = RC( rcSRA, rcNode, rcExecuting, rcData, rcUnexpected );
+                        break;
+                }
+                if ( nn > nreads_max )
+                {
+                    clear_readmask( readmask );
+                    self->rejected_spots ++;
+                    PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), maximum $(max) supported, skipped",
+                                       PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn, spot, nreads_max));
+                }
+                else if ( nn == nreads_max - 1 )
+                {
+                    PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), truncated to $(max)",
+                                       PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn + 1, spot, nreads_max));
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t MaxNReadsValidator_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    MaxNReadsValidator* self = ( MaxNReadsValidator* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else if ( !g_legacy_report )
+    {
+        if ( self->rejected_spots > 0 )
+            rc = KOutMsg( "Rejected %lu SPOTS because of to many READS\n", self->rejected_spots );
+    }
+    return rc;
+}
+
+
+typedef struct MaxNReadsValidatorFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col;
+} MaxNReadsValidatorFactory;
+
+
+static rc_t MaxNReadsValidatorFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "NREADS", NULL );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound || GetRCState( rc ) == rcExists )
+            {
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t MaxNReadsValidatorFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof(MaxNReadsValidator),
+                               MaxNReadsValidator_GetKey, NULL, NULL, MaxNReadsValidator_Release );
+        if ( rc == 0 )
+        {
+            MaxNReadsValidator * filter = ( MaxNReadsValidator * )( * splitter );
+            filter->col = self->col;
+            filter->rejected_spots = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void MaxNReadsValidatorFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
+        SRAColumnRelease( self->col );
+    }
+}
+
+
+static rc_t MaxNReadsValidatorFactory_Make( const SRASplitterFactory** cself, const SRATable* table )
+{
+    rc_t rc = 0;
+    MaxNReadsValidatorFactory* obj = NULL;
+
+    if( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                     MaxNReadsValidatorFactory_Init,
+                                     MaxNReadsValidatorFactory_NewObj,
+                                     MaxNReadsValidatorFactory_Release);
+        if ( rc == 0 )
+        {
+            obj = ( MaxNReadsValidatorFactory* )*cself;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+/* ### READ_FILTER splitter/filter ##################################################### */
+
+enum EReadFilterSplitter_names
+{
+    EReadFilterSplitter_pass = 0,
+    EReadFilterSplitter_reject,
+    EReadFilterSplitter_criteria,
+    EReadFilterSplitter_redacted,
+    EReadFilterSplitter_unknown,
+    EReadFilterSplitter_max
+};
+
+
+typedef struct ReadFilterSplitter_struct
+{
+    const SRAColumn* col_rdf;
+    SRAReadFilter read_filter;
+    SRASplitter_Keys keys[5];
+} ReadFilterSplitter;
+
+
+static rc_t ReadFilterSplitter_GetKeySet( const SRASplitter* cself,
+        const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    ReadFilterSplitter* self = ( ReadFilterSplitter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        const INSDC_SRA_read_filter* rdf;
+        bitsz_t o = 0, sz = 0;
+
+        *keys = 0;
+        if ( self->col_rdf != NULL )
+        {
+            rc = SRAColumnRead( self->col_rdf, spot, (const void **)&rdf, &o, &sz );
+            if ( rc == 0 && sz > 0 )
+            {
+                int32_t j, i = sz / sizeof( INSDC_SRA_read_filter ) / 8;
+                *key = self->keys;
+                *keys = sizeof( self->keys ) / sizeof( self->keys[ 0 ] );
+                for ( j = 0; j < *keys; j++ )
+                {
+                    clear_readmask( self->keys[ j ].readmask );
+                }
+                while ( i > 0 )
+                {
+                    i--;
+                    if ( self->read_filter != 0xFF && self->read_filter != rdf[i] )
+                    {
+                        /* skip by filter value != to command line */
+                    }
+                    else if ( rdf[ i ] == SRA_READ_FILTER_PASS )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_pass ].readmask, i );
+                    }
+                    else if ( rdf[ i ] == SRA_READ_FILTER_REJECT )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_reject ].readmask, i );
+                    }
+                    else if( rdf[ i ] == SRA_READ_FILTER_CRITERIA )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_criteria ].readmask, i );
+                    }
+                    else if( rdf[ i ] == SRA_READ_FILTER_REDACTED )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_redacted ].readmask, i );
+                    }
+                    else
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_unknown ].readmask, i );
+                        PLOGMSG( klogWarn, ( klogWarn,
+                                 "unknown READ_FILTER value $(value) at spot id $(row)",
+                                 PLOG_2( PLOG_U8( value ), PLOG_I64( row ) ), rdf[ i ], spot ) );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct ReadFilterSplitterFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col_rdf;
+    SRAReadFilter read_filter;
+} ReadFilterSplitterFactory;
+
+
+static rc_t ReadFilterSplitterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col_rdf, "READ_FILTER", sra_read_filter_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                LOGMSG( klogWarn, "Column READ_FILTER was not found, param ignored" );
+                rc = 0;
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t ReadFilterSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof(ReadFilterSplitter), NULL,
+                               ReadFilterSplitter_GetKeySet, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (ReadFilterSplitter*)(*splitter) )->col_rdf = self->col_rdf;
+            ( (ReadFilterSplitter*)(*splitter) )->read_filter = self->read_filter;
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_pass ].key = "pass";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_reject ].key = "reject";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_criteria ].key = "criteria";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_redacted ].key = "redacted";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_unknown ].key = "unknown";
+        }
+    }
+    return rc;
+}
+
+
+static void ReadFilterSplitterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+        SRAColumnRelease( self->col_rdf );
+    }
+}
+
+
+static rc_t ReadFilterSplitterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, SRAReadFilter read_filter )
+{
+    rc_t rc = 0;
+    ReadFilterSplitterFactory* obj = NULL;
+
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                        ReadFilterSplitterFactory_Init,
+                                        ReadFilterSplitterFactory_NewObj,
+                                        ReadFilterSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( ReadFilterSplitterFactory* ) *cself;
+            obj->table = table;
+            obj->read_filter = read_filter;
+        }
+    }
+    return rc;
+}
+
+
+/* ### SPOT_GROUP splitter/filter ##################################################### */
+
+typedef struct SpotGroupSplitter_struct
+{
+    char cur_key[ 256 ];
+    const SRAColumn* col;
+    char* const* spot_group;
+    uint64_t rejected_spots;
+    bool split;
+} SpotGroupSplitter;
+
+
+static rc_t SpotGroupSplitter_GetKey( const SRASplitter* cself,
+            const char** key, spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    SpotGroupSplitter* self = ( SpotGroupSplitter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        *key = self->cur_key;
+        if ( self->col != NULL )
+        {
+            const char* g = NULL;
+            bitsz_t o = 0, sz = 0;
+            rc = SRAColumnRead( self->col, spot, (const void **)&g, &o, &sz );
+            if ( rc == 0 && sz > 0 )
+            {
+                sz /= 8;
+                /* truncate trailing \0 */
+                while ( sz > 0 && g[ sz - 1 ] == '\0' )
+                {
+                    sz--;
+                }
+                if ( sz > sizeof( self->cur_key ) - 1 )
+                {
+                    rc = RC( rcSRA, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
+                    int i;
+                    bool found = false;
+                    memmove( self->cur_key, g, sz );
+                    self->cur_key[ sz ] = '\0';
+                    for ( i = 0; self->spot_group[ i ] != NULL; i++ )
+                    {
+                        if ( strcmp( self->cur_key, self->spot_group[ i ] ) == 0 )
+                        {
+                            found = true;
+                            break;
+                        }
+                    }
+                    if ( self->spot_group[ 0 ] != NULL && !found )
+                    {
+                        /* list not empty and not in list -> skip */
+                        self->rejected_spots ++;
+                        *key = NULL;
+                    }
+                    else if ( !self->split )
+                    {
+                        *key = "";
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t SpotGroupSplitter_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    SpotGroupSplitter* self = ( SpotGroupSplitter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else if ( !g_legacy_report )
+    {
+        if ( self->rejected_spots > 0 )
+            rc = KOutMsg( "Rejected %lu SPOTS because of spotgroup filtering\n", self->rejected_spots );
+    }
+    return rc;
+}
+
+typedef struct SpotGroupSplitterFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col;
+    bool split;
+    char* const* spot_group;
+} SpotGroupSplitterFactory;
+
+
+static rc_t SpotGroupSplitterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "SPOT_GROUP", vdb_ascii_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                LOGMSG(klogWarn, "Column SPOT_GROUP was not found, param ignored");
+                rc = 0;
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t SpotGroupSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( SpotGroupSplitter ),
+                               SpotGroupSplitter_GetKey, NULL, NULL, SpotGroupSplitter_Release );
+        if ( rc == 0 )
+        {
+            SpotGroupSplitter * filter = ( SpotGroupSplitter * )( * splitter );
+            filter->col = self->col;
+            filter->split = self->split;
+            filter->spot_group = self->spot_group;
+            filter->rejected_spots = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void SpotGroupSplitterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
+        SRAColumnRelease( self->col );
+    }
+}
+
+
+static rc_t SpotGroupSplitterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, bool split, char* const spot_group[] )
+{
+    rc_t rc = 0;
+    SpotGroupSplitterFactory* obj = NULL;
+
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                             SpotGroupSplitterFactory_Init,
+                                             SpotGroupSplitterFactory_NewObj,
+                                             SpotGroupSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( SpotGroupSplitterFactory* ) *cself;
+            obj->table = table;
+            obj->split = split;
+            obj->spot_group = spot_group;
+        }
+    }
+    return rc;
+}
+
+/* ### Common dumper code ##################################################### */
+
+
+static rc_t SRADumper_DumpRun( const SRATable* table,
+        spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories, uint64_t * num_spots )
+{
+    rc_t rc = 0, rcr = 0;
+    spotid_t spot = 0;
+
+    /* !!! make_readmask is a MACRO defined in factory.h !!! */
+    make_readmask( readmask );
+    const SRASplitter* root_splitter = NULL;
+
+    if ( num_spots != NULL ) *num_spots = 0;
+
+    rc = SRASplitterFactory_NewObj( factories, &root_splitter );
+
+    for ( spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ )
+    {
+        reset_readmask( readmask );
+        /* SRASplitter_AddSpot() defined in factory.c */
+        rc = SRASplitter_AddSpot( root_splitter, spot, readmask );
+        if ( rc == 0 )
+        {
+            if ( num_spots != NULL ) (*num_spots)++;
+            rc = Quitting();
+        }
+        else
+        {
+            if ( ( GetRCModule( rc ) == rcXF ) &&
+                 ( GetRCTarget( rc ) == rcFunction ) &&
+                 ( GetRCContext( rc ) == rcExecuting ) &&
+                 ( GetRCObject( rc ) == ( enum RCObject )rcData ) &&
+                 ( GetRCState( rc ) == rcInconsistent ) )
+            {
+                rc = 0;
+            }
+        }
+    }
+    rcr = SRASplitter_Release( root_splitter );
+
+    return rc ? rc : rcr;
+}
+
+
+static const SRADumperFmt_Arg KMainArgs[] =
+{
+    { NULL, "no-user-settings",  NULL,         { "Internal Only", NULL } },
+    { "A",   "accession",        "accession",   { "Replaces accession derived from <path> in filename(s) and deflines (only for single table dump)", NULL } },
+    { "O",   "outdir",           "path",        { "Output directory, default is working directory ( '.' )", NULL } },
+    { "Z",   "stdout",           NULL,          { "Output to stdout, all split data become joined into single stream", NULL } },
+    { NULL, "gzip",              NULL,         { "Compress output using gzip", NULL } },
+    { NULL, "bzip2",             NULL,         { "Compress output using bzip2", NULL } },
+    { "N",   "minSpotId",        "rowid",       { "Minimum spot id", NULL } },
+    { "X",   "maxSpotId",        "rowid",       { "Maximum spot id", NULL } },
+    { "G",   "spot-group",       NULL,          { "Split into files by SPOT_GROUP (member name)", NULL } },
+    { NULL, "spot-groups",       "[list]",      { "Filter by SPOT_GROUP (member): name[,...]", NULL } },
+    { "R",   "read-filter",      "[filter]",    { "Split into files by READ_FILTER value",
+                                                  "optionally filter by a value: pass|reject|criteria|redacted", NULL } },
+    { "T",   "group-in-dirs",    NULL,          { "Split into subdirectories instead of files", NULL } },
+    { "K",   "keep-empty-files", NULL,          { "Do not delete empty files", NULL } },
+    { NULL, "table",            "table-name",   { "Table name within cSRA object, default is \"SEQUENCE\"", NULL } },
+
+    { NULL, "disable-multithreading", NULL,     { "disable multithreading", NULL } },
+
+    { "h",   "help",             NULL,          { "Output a brief explanation of program usage", NULL } },
+    { "V",   "version",          NULL,          { "Display the version of the program", NULL } },
+
+    { "L",   "log-level",       "level",        { "Logging level as number or enum string",
+                                                  "One of (fatal|sys|int|err|warn|info) or (0-5)",
+                                                  "Current/default is warn", NULL } },
+    { "v",   "verbose",         NULL,           { "Increase the verbosity level of the program",
+                                                   "Use multiple times for more verbosity", NULL } },
+    { NULL, OPTION_REPORT,     NULL,           { "Control program execution environment report generation (if implemented).",
+                                                   "One of (never|error|always). Default is error", NULL } },
+#if _DEBUGGING
+    { "+",   "debug",           "Module[-Flag]",{ "Turn on debug output for module",
+                                                   "All flags if not specified", NULL } },
+#endif
+
+    { NULL, "legacy-report",    NULL,           { "use legacy style 'Written N spots' for tool" } },
+    { NULL, NULL,              NULL,           { NULL } } /* terminator */
+};
+
+
+rc_t CC Usage ( const Args * args )
+{
+    return fasta_dump_usage ( args );
+}
+
+
+void CC SRADumper_PrintArg( const SRADumperFmt_Arg* arg )
+{
+    /* ??? */
+}
+
+
+static void CoreUsage( const char* prog, const SRADumperFmt* fmt, bool brief, int exit_status )
+{
+    OUTMSG(( "\n"
+             "Usage:\n"
+             "  %s [options] <path> [<path>...]\n"
+             "  %s [options] <accession>\n"
+             "\n", prog, prog));
+
+    if ( !brief )
+    {
+        if ( fmt->usage )
+        {
+            rc_t rc = fmt->usage( fmt, KMainArgs, 1 );
+            if ( rc != 0 )
+            {
+                LOGERR(klogErr, rc, "Usage print failed");
+            }
+        }
+        else
+        {
+            int k, i;
+            const SRADumperFmt_Arg* d[ 2 ] = { KMainArgs, NULL };
+
+            d[ 1 ] = fmt->arg_desc;
+            for ( k = 0; k < ( sizeof( d ) / sizeof( d[0] ) ); k++ )
+            {
+                for ( i = 1;
+                      d[k] != NULL && ( d[ k ][ i ].abbr != NULL || d[ k ][ i ].full != NULL );
+                      ++ i )
+                {
+                    if ( ( !fmt->gzip && strcmp( d[ k ][ i ].full, "gzip" ) == 0 ) ||
+                         ( !fmt->bzip2 && strcmp (d[ k ][ i ].full, "bzip2" ) == 0 ) )
+                    {
+                        continue;
+                    }
+                    if ( k > 0 && i == 0 )
+                    {
+                        OUTMSG(("\nFormat options:\n\n"));
+                    }
+                    HelpOptionLine( d[ k ][ i ].abbr, d[ k ][ i ].full,
+                                    d[ k ][ i ].param, (const char**)( d[ k ][ i ].descr ) );
+                    if ( k == 0 && i == 0 )
+                    {
+                        OUTMSG(( "\nOptions:\n\n" ));
+                    }
+                }
+            }
+        }
+    }
+    else
+    {
+        OUTMSG(( "Use option --help for more information\n" ));
+    }
+    HelpVersion( prog, KAppVersion() );
+    exit( exit_status );
+}
+
+
+static rc_t SRADumper_ArgsValidate( const char* prog, const SRADumperFmt* fmt )
+{
+    rc_t rc = 0;
+    int k, i;
+
+    /* set default log level */
+    const char* default_log_level = "warn";
+    rc = LogLevelSet( default_log_level );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "default log level to '$(lvl)'",
+                            PLOG_S( lvl ), default_log_level ) );
+        CoreUsage( prog, fmt, true, EXIT_FAILURE );
+    }
+    for ( i = 0; KMainArgs[ i ].abbr != NULL; i++ )
+    {
+        for ( k = 0; fmt->arg_desc != NULL && fmt->arg_desc[ k ].abbr != NULL; k++ )
+        {
+            if ( strcmp( fmt->arg_desc[ k ].abbr, KMainArgs[ i ].abbr ) == 0 ||
+                 ( fmt->arg_desc[ k ].full != NULL && strcmp( fmt->arg_desc[ k ].full, KMainArgs[ i ].full ) == 0 ) )
+            {
+                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcDuplicate);
+            }
+        }
+    }
+    return rc;
+}
+
+
+bool CC SRADumper_GetArg( const SRADumperFmt* fmt, char const* const abbr, char const* const full,
+                          int* i, int argc, char *argv[], const char** value )
+{
+    rc_t rc = 0;
+    const char* arg = argv[*i];
+    while ( *arg == '-' && *arg != '\0')
+    {
+        arg++;
+    }
+    if ( abbr != NULL && strcmp(arg, abbr) == 0 )
+    {
+        SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
+        arg = arg + strlen( abbr );
+        if ( value != NULL && arg[0] == '\0' && (*i + 1) < argc )
+        {
+            arg = NULL;
+            if ( argv[ *i + 1 ][ 0 ] != '-' )
+            {
+                /* advance only if next is not an option with '-' */
+                *i = *i + 1;
+                arg = argv[ *i ];
+            }
+        }
+        else
+        {
+            arg = NULL;
+        }
+    }
+    else if ( full != NULL && strcmp( arg, full ) == 0 )
+    {
+        SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
+        arg = NULL;
+        if ( value != NULL && ( *i + 1 ) < argc )
+        {
+            if ( argv[ *i + 1 ][ 0 ] != '-' )
+            {
+                /* advance only if next is not an option with '-' */
+                *i = *i + 1;
+                arg = argv[ *i ];
+            }
+        }
+    }
+    else
+    {
+        return false;
+    }
+
+    SRA_DUMP_DBG( 9, ( "GetArg val: '%s'\n", arg ) );
+    if ( value == NULL && arg != NULL )
+    {
+        rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcUnexpected );
+    }
+    else if ( value != NULL )
+    {
+        if ( arg == NULL && *value == '\0' )
+        {
+            rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcNotFound );
+        }
+        else if ( arg != NULL && arg[0] != '\0' )
+        {
+            *value = arg;
+        }
+    }
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "$(a0)$(a1)$(a2)$(f0)$(f1): $(v)",
+            PLOG_3(PLOG_S(a0),PLOG_S(a1),PLOG_S(a2))","PLOG_3(PLOG_S(f0),PLOG_S(f1),PLOG_S(v)),
+            abbr ? "-": "", abbr ? abbr : "", abbr ? ", " : "", full ? "--" : "", full ? full : "", arg));
+        CoreUsage( argv[ 0 ], fmt, true, EXIT_FAILURE );
+    }
+    return rc == 0 ? true : false;
+}
+
+
+static bool reportToUserSffFromNot454Run(rc_t rc, char* argv0, bool silent) {
+    assert( argv0 );
+    if ( rc == SILENT_RC( rcSRA, rcFormatter, rcConstructing,
+        rcData, rcUnsupported ) )
+    {
+        const char* name = strpbrk( argv0, "/\\" );
+        const char* last_name = name;
+        if ( last_name )
+        {
+        ++last_name;
+        }
+        while ( name )
+        {
+            name = strpbrk( last_name, "/\\" );
+            if ( name )
+            {
+                last_name = name;
+                if ( last_name )
+                {
+                    ++last_name;
+                }
+            }
+        }
+        name = last_name ? last_name : argv0;
+        if ( strcmp( "sff-dump", name ) == 0 )
+        {
+            if (!silent) {
+              OUTMSG((
+               "This run cannot be transformed into SFF format.\n"
+               "Conversion cannot be completed because the source lacks\n"
+               "one or more of the data series required by the SFF format.\n"
+               "You should be able to dump it as FASTQ by running fastq-dump.\n"
+               "\n"));
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+
+static int str_cmp( const char *a, const char *b )
+{
+    size_t asize = string_size ( a );
+    size_t bsize = string_size ( b );
+    return strcase_cmp ( a, asize, b, bsize, ( asize > bsize ) ? asize : bsize );
+}
+
+static bool database_contains_table_name( const VDBManager * vmgr, const char * acc_or_path, const char * tablename )
+{
+    bool res = false;
+    if ( ( vmgr != NULL ) && ( acc_or_path != NULL ) && ( tablename != NULL ) )
+    {
+        const VDatabase * db;
+        rc_t rc = VDBManagerOpenDBRead( vmgr, &db, NULL, "%s", acc_or_path );
+        if ( rc == 0 )
+        {
+            KNamelist * tbl_names;
+            rc = VDatabaseListTbl( db, &tbl_names );
+            if ( rc == 0 )
+            {
+                uint32_t count;
+                rc = KNamelistCount( tbl_names, &count );
+                if ( rc == 0 && count > 0 )
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0 && !res; ++idx )
+                    {
+                        const char *tbl_name;
+                        rc = KNamelistGet( tbl_names, idx, &tbl_name );
+                        if ( rc == 0 )
+                        {
+                            res = ( str_cmp( tbl_name, tablename ) == 0 );
+                        }
+                    }
+                }
+                KNamelistRelease( tbl_names );
+            }
+            VDatabaseRelease( db );
+        }
+    }
+    return res;
+}
+
+
+static const char * consensus_table_name = "CONSENSUS";
+
+/*******************************************************************************
+ * KMain - defined for use with kapp library
+ *******************************************************************************/
+rc_t CC KMain ( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    int i;
+    const char* arg;
+    uint64_t total_spots_read = 0;
+    uint64_t total_spots_written = 0;
+
+    const VDBManager* vmgr = NULL;
+    const SRAMgr* sraMGR = NULL;
+    SRADumperFmt fmt;
+
+    bool to_stdout = false, do_gzip = false, do_bzip2 = false;
+    char const* outdir = NULL;
+    spotid_t minSpotId = 1;
+    spotid_t maxSpotId = 0x7FFFFFFFFFFFFFFF; /* 9,223,372,036,854,775,807 max int64_t value !!! ~0 is wrong !!! */
+    bool sub_dir = false;
+    bool keep_empty = false;
+    const char* table_path[10240];
+    int table_path_qty = 0;
+
+    char const* D_option = NULL;
+    char const* P_option = NULL;
+    char P_option_buffer[4096];
+    const char* accession = NULL;
+    const char* table_name = NULL;
+    
+    bool spot_group_on = false;
+    bool no_mt = false;
+    int spot_groups = 0;
+    char* spot_group[128] = {NULL};
+    bool read_filter_on = false;
+    SRAReadFilter read_filter = 0xFF;
+
+    /* for the fasta-ouput of fastq-dump: branch out completely of 'common' code */
+    if ( fasta_dump_requested( argc, argv ) )
+    {
+        return fasta_dump( argc, argv );
+    }
+
+    /* Prepare for the worst: report this information after disaster */
+    ReportBuildDate ( __DATE__ );
+
+    memset( &fmt, 0, sizeof( fmt ) );
+    rc = SRADumper_Init( &fmt );    /* !!!dirty dirty trick!!! function is defined in abi.c AND fastq.c AND illumina.c AND sff.c !!! */
+    if ( rc != 0 )
+    {
+        LOGERR(klogErr, rc, "formatter initialization");
+        return 100;
+    }
+    else if ( fmt.get_factory == NULL )
+    {
+        rc = RC( rcExe, rcFormatter, rcValidating, rcInterface, rcNull );
+        LOGERR( klogErr, rc, "formatter factory" );
+        return 101;
+    }
+    else
+    {
+        rc = SRADumper_ArgsValidate( argv[0], &fmt );   /* above in this file */
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "formatter args list" );
+            return 102;
+        }
+    }
+
+    if ( argc < 2 )
+    {
+        CoreUsage( argv[0], &fmt, true, EXIT_FAILURE ); /* above in this file */
+        return 0;
+    }
+
+    /* now looping through argv[], ignoring args-parsing via kapp!!! */
+    for ( i = 1; i < argc; i++ )
+    {
+        arg = argv[ i ];
+        if ( arg[ 0 ] != '-' )
+        {
+            uint32_t k;
+            for ( k = 0; k < table_path_qty; k++ )
+            {
+                if ( strcmp( arg, table_path[ k ] ) == 0 )
+                {
+                    break;
+                }
+            }
+            if ( k >= table_path_qty )
+            {
+                if ( ( table_path_qty + 1 ) >= ( sizeof( table_path ) / sizeof( table_path[ 0 ] ) ) )
+                {
+                    rc = RC( rcExe, rcArgv, rcReading, rcBuffer, rcInsufficient );
+                    goto Catch;
+                }
+                table_path[ table_path_qty++ ] = arg;
+            }
+            continue;
+        }
+        arg = NULL;
+        if ( SRADumper_GetArg( &fmt, "L", "log-level", &i, argc, argv, &arg ) )
+        {
+            rc = LogLevelSet( arg );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, "log level $(lvl)", PLOG_S( lvl ), arg ) );
+                goto Catch;
+            }
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "disable-multithreading", &i, argc, argv, NULL ) )
+        {
+            no_mt = true;
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, OPTION_REPORT, &i, argc, argv, &arg ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "+", "debug", &i, argc, argv, &arg ) )
+        {
+#if _DEBUGGING
+            rc = KDbgSetString( arg );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, "debug level $(lvl)", PLOG_S( lvl ), arg ) );
+                goto Catch;
+            }
+#endif
+        }
+        else if ( SRADumper_GetArg( &fmt, "H", "help", &i, argc, argv, NULL ) ||
+                  SRADumper_GetArg( &fmt, "?", "h", &i, argc, argv, NULL ) )
+        {
+            CoreUsage( argv[ 0 ], &fmt, false, EXIT_SUCCESS );
+
+        }
+        else if ( SRADumper_GetArg( &fmt, "V", "version", &i, argc, argv, NULL ) )
+        {
+            HelpVersion ( argv[ 0 ], KAppVersion() );
+            return 0;
+        }
+        else if ( SRADumper_GetArg( &fmt, "v", NULL, &i, argc, argv, NULL ) )
+        {
+            KStsLevelAdjust( 1 );
+
+        }
+        else if ( SRADumper_GetArg( &fmt, "D", "table-path", &i, argc, argv, &D_option ) )
+        {
+            LOGMSG( klogErr, "option -D is deprecated, see --help" );
+        }
+        else if ( SRADumper_GetArg( &fmt, "P", "path", &i, argc, argv, &P_option ) )
+        {
+            LOGMSG( klogErr, "option -P is deprecated, see --help" );
+
+        }
+        else if ( SRADumper_GetArg( &fmt, "A", "accession", &i, argc, argv, &accession ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "O", "outdir", &i, argc, argv, &outdir ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "Z", "stdout", &i, argc, argv, NULL ) )
+        {
+            to_stdout = true;
+        }
+        else if ( fmt.gzip && SRADumper_GetArg( &fmt, NULL, "gzip", &i, argc, argv, NULL ) )
+        {
+            do_gzip = true;
+        }
+        else if ( fmt.bzip2 && SRADumper_GetArg( &fmt, NULL, "bzip2", &i, argc, argv, NULL ) )
+        {
+            do_bzip2 = true;
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "table", &i, argc, argv, &table_name ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "N", "minSpotId", &i, argc, argv, &arg ) )
+        {
+            minSpotId = AsciiToU64( arg, NULL, NULL );
+        }
+        else if ( SRADumper_GetArg( &fmt, "X", "maxSpotId", &i, argc, argv, &arg ) )
+        {
+            maxSpotId = AsciiToU64( arg, NULL, NULL );
+        }
+        else if ( SRADumper_GetArg( &fmt, "G", "spot-group", &i, argc, argv, NULL ) )
+        {
+            spot_group_on = true;
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "spot-groups", &i, argc, argv, NULL ) )
+        {
+            if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+            {
+                int f = 0, t = 0;
+                i++;
+                while ( argv[ i ][ t ] != '\0' )
+                {
+                    if ( argv[ i ][ t ] == ',' )
+                    {
+                        if ( t - f > 0 )
+                        {
+                            spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
+                        }
+                        f = t + 1;
+                    }
+                    t++;
+                }
+                if ( t - f > 0 )
+                {
+                    spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
+                }
+                if ( spot_groups < 1 )
+                {
+                    rc = RC( rcApp, rcArgv, rcReading, rcParam, rcEmpty );
+                    PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i - 1 ] ) );
+                    CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
+                }
+                spot_group[ spot_groups ] = NULL;
+            }
+        }
+        else if ( SRADumper_GetArg( &fmt, "R", "read-filter", &i, argc, argv, NULL ) )
+        {
+            read_filter_on = true;
+            if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+            {
+                i++;
+                if ( read_filter != 0xFF )
+                {
+                    rc = RC( rcApp, rcArgv, rcReading, rcParam, rcDuplicate );
+                    PLOGERR( klogErr, ( klogErr, rc, "$(p): $(o)",
+                             PLOG_2( PLOG_S( p ),PLOG_S( o ) ), argv[ i - 1 ], argv[ i ] ) );
+                    CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
+                }
+                if ( strcasecmp( argv[ i ], "pass" ) == 0 )
+                {
+                    read_filter = SRA_READ_FILTER_PASS;
+                }
+                else if ( strcasecmp( argv[ i ], "reject" ) == 0 )
+                {
+                    read_filter = SRA_READ_FILTER_REJECT;
+                }
+                else if ( strcasecmp( argv[ i ], "criteria" ) == 0 )
+                {
+                    read_filter = SRA_READ_FILTER_CRITERIA;
+                }
+                else if ( strcasecmp( argv[ i ], "redacted" ) == 0 )
+                {
+                    read_filter = SRA_READ_FILTER_REDACTED;
+                }
+                else
+                {
+                    /* must be accession */
+                    i--;
+                }
+            }
+        }
+        else if ( SRADumper_GetArg( &fmt, "T", "group-in-dirs", &i, argc, argv, NULL ) )
+        {
+            sub_dir = true;
+        }
+        else if ( SRADumper_GetArg( &fmt, "K", "keep-empty-files", &i, argc, argv, NULL ) )
+        {
+            keep_empty = true;
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "no-user-settings", &i, argc, argv, NULL ) )
+        {
+             KConfigDisableUserSettings ();
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "legacy-report", &i, argc, argv, NULL ) )
+        {
+             g_legacy_report = true;
+        }
+        else if ( fmt.add_arg && fmt.add_arg( &fmt, SRADumper_GetArg, &i, argc, argv ) )
+        {
+        }
+        else
+        {
+            rc = RC( rcApp, rcArgv, rcReading, rcParam, rcIncorrect );
+            PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i ] ) );
+            CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
+        }
+    }
+
+    if ( to_stdout )
+    {
+        if ( outdir != NULL || sub_dir || keep_empty ||
+            spot_group_on || ( read_filter_on && read_filter == 0xFF ) )
+        {
+            LOGMSG( klogWarn, "stdout mode is set, some options are ignored" );
+            spot_group_on = false;
+            if ( read_filter == 0xFF )
+            {
+                read_filter_on = false;
+            }
+        }
+        KOutHandlerSetStdErr();
+        KStsHandlerSetStdErr();
+        KLogHandlerSetStdErr();
+        ( void ) KDbgHandlerSetStdErr();
+    }
+
+    if ( do_gzip && do_bzip2 )
+    {
+        rc = RC( rcApp, rcArgv, rcReading, rcParam, rcAmbiguous );
+        LOGERR( klogErr, rc, "output compression method" );
+        CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
+    }
+
+    if ( minSpotId > maxSpotId )
+    {
+        spotid_t temp = maxSpotId;
+        maxSpotId = minSpotId;
+        minSpotId = temp;
+    }
+
+    if ( table_path_qty == 0 )
+    {
+        if ( D_option != NULL && D_option[ 0 ] != '\0' )
+        {
+            /* support deprecated '-D' option */
+            table_path[ table_path_qty++ ] = D_option;
+        }
+        else if ( accession == NULL || accession[ 0 ] == '\0' )
+        {
+            /* must have accession to proceed */
+            rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcEmpty );
+            LOGERR( klogErr, rc, "expected accession" );
+            goto Catch;
+        }
+        else if ( P_option != NULL && P_option[ 0 ] != '\0' )
+        {
+            /* support deprecated '-P' option */
+            i = snprintf( P_option_buffer, sizeof( P_option_buffer ), "%s/%s", P_option, accession );
+            if ( i < 0 || i >= sizeof( P_option_buffer ) )
+            {
+                rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcExcessive );
+                LOGERR( klogErr, rc, "path too long" );
+                goto Catch;
+            }
+            table_path[ table_path_qty++ ] = P_option_buffer;
+        }
+        else
+        {
+            table_path[ table_path_qty++ ] = accession;
+        }
+    }
+
+    rc = SRAMgrMakeRead( &sraMGR ); /* !!! in libsra !!! */
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "failed to open SRA manager" );
+        goto Catch;
+    }
+    else
+    {
+        rc = SRASplitterFactory_FilerInit( to_stdout, do_gzip, do_bzip2, sub_dir, keep_empty, outdir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "failed to initialize files" );
+            goto Catch;
+        }
+    }
+
+    {
+        rc_t rc2 = SRAMgrGetVDBManagerRead( sraMGR, &vmgr );
+        if ( rc2 != 0 )
+        {
+            LOGERR( klogErr, rc2, "while calling SRAMgrGetVDBManagerRead" );
+        }
+        else
+        {
+            if ( no_mt )
+            {
+                rc2 = VDBManagerDisablePagemapThread ( vmgr );
+                if ( rc2 != 0 )
+                {
+                    LOGERR( klogErr, rc2, "disabling multithreading failed" );
+                }
+            }
+        }
+        rc2 = ReportSetVDBManager( vmgr );
+    }
+
+
+    /* loop tables */
+    for ( i = 0; i < table_path_qty; i++ )
+    {
+        const SRASplitterFactory* fact_head = NULL;
+        spotid_t smax, smin;
+        int path_type;
+
+        SRA_DUMP_DBG( 5, ( "table path '%s', name '%s'\n", table_path[ i ], table_name ) );
+
+        /* because of PacBio: if no table_name is given ---> open the 'CONSENSUS' table implicitly!
+            we first have to lookup the Object-Type, if it is a Database we have to look if it contains
+            a CONSENSUS-table ( only PacBio-Runs have one ! )...
+        */
+
+        path_type = ( VDBManagerPathType ( vmgr, "%s", table_path[ i ] ) & ~ kptAlias );
+        switch ( path_type )
+        {
+            case kptDatabase        :   ;   /* types defined in <kdb/manager.h> */
+            case kptPrereleaseTbl   :   ;
+            case kptTable           :   break;
+
+            default             :   rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+                                    PLOGERR( klogErr, ( klogErr, rc,
+                                        "the path '$(p)' cannot be opened as database or table",
+                                        "p=%s", table_path[ i ] ) );
+                                    continue;
+                                    break;
+        }
+
+
+        if ( path_type == kptDatabase )
+        {
+            const char * table_to_open = table_name;
+            if ( table_to_open == NULL && database_contains_table_name( vmgr, table_path[ i ], consensus_table_name ) )
+            {
+                table_to_open = consensus_table_name;
+            }
+            if ( table_to_open != NULL )
+            {
+                rc = SRAMgrOpenAltTableRead( sraMGR, &fmt.table, table_to_open, "%s", table_path[ i ] ); /* from sradb-priv.h */
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogErr, ( klogErr, rc, 
+                        "failed to open '$(path):$(table)'", "path=%s,table=%s",
+                        table_path[ i ], table_to_open ) );
+                    continue;
+                }
+            }
+
+        }
+
+        ReportResetObject( table_path[ i ] );
+
+        if ( fmt.table == NULL )
+        {
+            rc = SRAMgrOpenTableRead( sraMGR, &fmt.table, "%s", table_path[ i ] );
+            if ( rc != 0 )
+            {
+                if ( UIError( rc, NULL, NULL ) )
+                {
+                    UITableLOGError( rc, NULL, true );
+                }
+                else
+                {
+                    PLOGERR( klogErr, ( klogErr, rc,
+                            "failed to open '$(path)'", "path=%s", table_path[ i ] ) );
+                }
+                continue;
+            }
+        }
+
+        /* infer accession from table_path if missing or more than one table */
+        fmt.accession = table_path_qty > 1 ? NULL : accession;
+        if ( fmt.accession == NULL || fmt.accession[ 0 ] == 0 )
+        {
+            char * basename;
+            char *ext;
+            size_t l;
+            bool is_url = false;
+
+            strcpy( P_option_buffer, table_path[ i ] );
+
+            basename = strchr ( P_option_buffer, ':' );
+            if ( basename )
+            {
+                ++basename;
+                if ( basename [0] == '\0' )
+                    basename = P_option_buffer;
+                else
+                    is_url = true;
+            }
+            else
+                basename = P_option_buffer;
+
+            if ( is_url )
+            {
+                ext = strchr ( basename, '#' );
+                if ( ext )
+                    ext[ 0 ] = '\0';
+                ext = strchr ( basename, '?' );
+                if ( ext )
+                    ext[ 0 ] = '\0';
+            }
+
+
+            l = strlen( basename  );
+            while ( strchr( "\\/", basename[ l - 1 ] ) != NULL )
+            {
+                basename[ --l ] = '\0';
+            }
+            fmt.accession = strrchr( basename, '/' );
+            if ( fmt.accession++ == NULL )
+            {
+                fmt.accession = basename;
+            }
+
+            /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+            ext = strrchr( fmt.accession, '.' );
+            if ( ext != NULL )
+            {
+                if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ".ncbi_enc" ) == 0 )
+                {
+                    *ext = '\0';
+                    ext = strrchr( fmt.accession, '.' );
+                }
+                if ( ext != NULL && ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 ) )
+                {
+                    *ext = '\0';
+                    ext = strrchr( fmt.accession, '.' );
+                    if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+                    {
+                        *ext = '\0';
+                    }
+                }
+            }
+        }
+
+        SRA_DUMP_DBG( 5, ( "accession: '%s'\n", fmt.accession ) );
+        rc = SRASplitterFactory_FilerPrefix( accession ? accession : fmt.accession );
+
+        while ( rc == 0 )
+        {
+            /* sort out the spot id range */
+            rc = SRATableMaxSpotId( fmt.table, &smax );
+            if ( rc != 0 )
+                break;
+            rc = SRATableMinSpotId( fmt.table, &smin );
+            if ( rc != 0 )
+                break;
+
+            {
+                const struct VTable* tbl = NULL;
+                rc_t rc2 = SRATableGetVTableRead( fmt.table, &tbl );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+                rc2 = ReportResetTable( table_path[i], tbl );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+                VTableRelease( tbl );   /* SRATableGetVTableRead adds Reference to tbl! */
+            }
+
+            /* test if we have to dump anything... */
+            if ( smax < minSpotId || smin > maxSpotId )
+            {
+                break;
+            }
+            if ( smax > maxSpotId )
+            {
+                smax = maxSpotId;
+            }
+            if ( smin < minSpotId )
+            {
+                smin = minSpotId;
+            }
+
+            /* hack to reduce looping in AddSpot: needs redesign to pass nreads along through tree */
+            if ( true ) /* ??? */
+            {
+                const SRAColumn* c = NULL;
+
+                nreads_max = NREADS_MAX;    /* global variables defined in factory.h */
+                quality_N_limit = 0;
+
+                rc = SRATableOpenColumnRead( fmt.table, &c, "PLATFORM", sra_platform_id_t );
+                if ( rc == 0 )
+                {
+                    const INSDC_SRA_platform_id *platform;
+                    bitsz_t o, z;
+                    rc = SRAColumnRead( c, 1, (const void **)&platform, &o, &z );
+                    if ( rc == 0 && platform != NULL )
+                    {
+                        /* platform constands in insdc/sra.h */
+                        switch( *platform )
+                        {
+                            case SRA_PLATFORM_454           : quality_N_limit = 30; nreads_max = 8;  break;
+                            case SRA_PLATFORM_ION_TORRENT   : ;
+                            case SRA_PLATFORM_ILLUMINA      : quality_N_limit = 35; nreads_max = 8;  break;
+                            case SRA_PLATFORM_ABSOLID       : quality_N_limit = 25; nreads_max = 8;  break;
+
+                            case SRA_PLATFORM_PACBIO_SMRT   : if ( fmt.split_files )
+                                                               {
+                                                                    /* only if we split into files we limit the number of reads */
+                                                                    nreads_max = 32;
+                                                               }
+                                                               break;
+
+                            default : nreads_max = 8; break;    /* for unknown platforms */
+                        }
+                    }
+                    SRAColumnRelease( c );
+                }
+                else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == ( enum RCObject )rcColumn )
+                {
+                    rc = 0;
+                }
+            }
+
+            /* table dependent */
+            rc = fmt.get_factory( &fmt, &fact_head );
+            if ( rc != 0 )
+            {
+                break;
+            }
+            if ( fact_head == NULL )
+            {
+                rc = RC( rcExe, rcFormatter, rcResolving, rcInterface, rcNull );
+                break;
+            }
+
+            if ( rc == 0 && ( spot_group_on || spot_groups > 0 ) )
+            {
+                const SRASplitterFactory* f = NULL;
+                rc = SpotGroupSplitterFactory_Make( &f, fmt.table, spot_group_on, spot_group );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
+                        fact_head = f;
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
+                    }
+                }
+            }
+
+            if ( rc == 0 && read_filter_on )
+            {
+                const SRASplitterFactory* f = NULL;
+                rc = ReadFilterSplitterFactory_Make( &f, fmt.table, read_filter );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
+                        fact_head = f;
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
+                    }
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                /* this filter takes over head of chain to be first and kill off bad NREADS */
+                const SRASplitterFactory* f = NULL;
+                rc = MaxNReadsValidatorFactory_Make( &f, fmt.table );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
+                        fact_head = f;
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
+                    }
+                }
+            }
+
+            rc = SRASplitterFactory_Init( fact_head );
+            if ( rc == 0 )
+            {
+                uint64_t spots_read;
+
+                /* ********************************************************** */
+                rc = SRADumper_DumpRun( fmt.table, smin, smax, fact_head, &spots_read );
+                /* ********************************************************** */
+                if ( rc == 0 )
+                { 
+                    uint64_t spots_written = 0, file = 0;
+
+                    SRASplitterFactory_FilerReport( &spots_written, &file );
+                    if ( !g_legacy_report )
+                    {
+                        OUTMSG(( "Read %lu spots for %s\n", spots_read, table_path[ i ] ));
+                    }
+                    OUTMSG(( "Written %lu spots for %s\n", spots_written - total_spots_written, table_path[ i ] ));
+
+                    if ( to_stdout && spots_written > 0 )
+                    {
+                        PLOGMSG( klogInfo, ( klogInfo, "$(t) biggest file has $(n) spots",
+                            PLOG_2( PLOG_S( t ), PLOG_U64( n ) ), table_path[ i ], file ));
+                    }
+                    total_spots_written = spots_written;
+                    total_spots_read += spots_read;
+                }
+            }
+            break;
+        }
+
+        SRASplitterFactory_Release( fact_head );
+        SRATableRelease( fmt.table );
+        fmt.table = NULL;
+        if ( rc == 0 )
+        {
+            PLOGMSG( klogInfo, ( klogInfo, "$(path)$(dot)$(table) $(spots) spots",
+                    PLOG_4(PLOG_S(path),PLOG_S(dot),PLOG_S(table),PLOG_U32(spots)),
+                    table_path[ i ], table_name ? ":" : "", table_name ? table_name : "", smax - smin + 1 ) );
+        }
+        else if (!reportToUserSffFromNot454Run(rc, argv [0], false)) {
+            PLOGERR( klogErr, ( klogErr, rc, "failed $(path)$(dot)$(table)",
+                    PLOG_3(PLOG_S(path),PLOG_S(dot),PLOG_S(table)),
+                    table_path[ i ], table_name ? ":" : "", table_name ? table_name : "" ) );
+        }
+    }
+
+Catch:
+    if ( fmt.release )
+    {
+        rc_t rr = fmt.release( &fmt );
+        if ( rr != 0 )
+        {
+            SRA_DUMP_DBG( 1, ( "formatter release error %R\n", rr ) );
+        }
+    }
+
+    for ( i = 0; i < spot_groups; i++ )
+    {
+        free( spot_group[ i ] );
+    }
+    SRASplitterFiler_Release();
+    SRAMgrRelease( sraMGR );
+    VDBManagerRelease( vmgr );
+
+    if ( g_legacy_report )
+    {
+        OUTMSG(( "Written %lu spots total\n", total_spots_written ));
+    }
+    else if ( table_path_qty > 1 )
+    {
+        OUTMSG(( "Read %lu spots total\n", total_spots_read ));
+        OUTMSG(( "Written %lu spots total\n", total_spots_written ));
+    }
+
+    /* Report execution environment if necessary */
+    if (rc != 0 && reportToUserSffFromNot454Run(rc, argv [0], true)) {
+        ReportSilence();
+    }
+    {
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+        {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-dump/core.h b/tools/sra-dump/core.h
new file mode 100644
index 0000000..079884c
--- /dev/null
+++ b/tools/sra-dump/core.h
@@ -0,0 +1,74 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_tools_dump_core
+#define _h_tools_dump_core
+
+#include <klib/rc.h>
+
+#include "factory.h"
+
+typedef struct SRADumperFmt_Arg_struct {
+    const char* abbr; /* NULL here means end of list */
+    /* next 3 can be NULL */
+    const char* full;
+    const char* param;
+    const char* descr[10];
+} SRADumperFmt_Arg;
+
+typedef struct SRADumperFmt SRADumperFmt;
+
+/**
+  * Setup formatter interfaces
+  */
+rc_t SRADumper_Init(SRADumperFmt* fmt);
+
+typedef bool CC GetArg(const SRADumperFmt* fmt, char const* const abbr, char const* const full,
+                       int* i, int argc, char *argv[], const char** value);
+
+struct SRADumperFmt
+{
+    /* optional pointer to formatter arguments, NULL terminated array otherwise */
+    const SRADumperFmt_Arg* arg_desc;
+
+    /* optional - prints custom help page */
+    rc_t (*usage)(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first );
+    /* optional */
+    rc_t (*release)(const SRADumperFmt* fmt);
+    /* optional process current arg and advance i by number of processed args */
+    bool (*add_arg)(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[]);
+
+    /* mandatory return head of factories implemented in module, factories released by caller! */
+    rc_t (*get_factory)(const SRADumperFmt* fmt, const SRASplitterFactory** factory);
+
+    /* set by parent code, do not change!!! */
+    const char* accession;
+    const SRATable* table;
+    bool gzip;
+    bool bzip2;
+    bool split_files; /* tell the core that the implementation splits into files... */
+};
+
+#endif /* _h_tools_dump_core */
diff --git a/tools/sra-dump/debug.h b/tools/sra-dump/debug.h
new file mode 100644
index 0000000..c9d1e56
--- /dev/null
+++ b/tools/sra-dump/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_sra_dump_debug_h_
+#define _tools_sra_dump_debug_h_
+
+#include <klib/debug.h>
+
+#define SRA_DUMP_DBG_PASTE(a,b) a##b
+#define SRA_DUMP_DBG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(SRA_DUMP_DBG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_sra_dump_debug_h_ */
diff --git a/tools/sra-dump/factory.c b/tools/sra-dump/factory.c
new file mode 100644
index 0000000..771788b
--- /dev/null
+++ b/tools/sra-dump/factory.c
@@ -0,0 +1,1069 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/container.h>
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include "factory.h"
+#include "debug.h"
+
+#define DUMPER_MAX_KEY_LENGTH 63
+#define DUMPER_MAX_TREE_DEPTH 100
+#define DUMPER_MAX_OPEN_FILES 100
+
+#define OUTPUT_BUFFER_SIZE ( 128 * 1024 )
+
+uint32_t nreads_max = 0;
+uint32_t quality_N_limit = 0;
+bool g_legacy_report = false;
+
+typedef struct SRASplitterFile_struct {
+    SLNode dad;
+    char* key;
+    KDirectory* dir;
+    char* name;
+    KFile* file;
+    time_t opened;
+    uint64_t pos;
+    /* keep track of number of spots written to file */
+    spotid_t curr_spot;
+    uint64_t spot_qty;
+} SRASplitterFile;
+
+typedef struct SRASplitterFiler_struct {
+    /* TBD - reorder structure to avoid premature ageing of compiler and CPU */
+    char* prefix;
+    KFile* kf_stdout;
+    bool key_as_dir;
+    bool keep_empty;
+    bool do_gzip;
+    bool do_bzip2;
+    const char* arc_extension;
+    KDirectory* dir;
+
+    /* TBD - this should be a BSTree */
+    SLList files;
+
+    /* list of keys to construct a path */
+    int path_tail; /* count of elements in path array */
+    int path_len; /* cumulative length of path in array */
+    const char* path[DUMPER_MAX_TREE_DEPTH];
+    char key_buf[DUMPER_MAX_TREE_DEPTH * (DUMPER_MAX_KEY_LENGTH + 3) + 10];
+    /* holds opened files */
+    SRASplitterFile* open[DUMPER_MAX_OPEN_FILES];
+    /* keep track of number of spots written to file */
+    spotid_t curr_spot;
+    uint64_t spot_qty;
+} SRASplitterFiler;
+
+SRASplitterFiler* g_filer = NULL;
+
+static
+void CC SRASplitterFiler_WhackFile( SLNode *node, void *data )
+{
+    SRASplitterFile* file = (SRASplitterFile*)node;
+    bool* d = (bool*)data;
+
+    SRA_DUMP_DBG(5, ("Close file: '%s%s'\n", file->key, g_filer->arc_extension));
+    if( file->spot_qty == 0 ) {
+        /* truncate file which didn't get actual spots written */
+        KFileSetSize(file->file, 0);
+    }
+    KFileRelease(file->file);
+    if( !*d ) {
+        uint64_t sz = ~0;
+        if( KDirectoryFileSize(file->dir, &sz, "%s%s", file->name, g_filer->arc_extension) == 0 ) {
+            if( file->spot_qty == 0 || sz == 0 ) {
+                SRA_DUMP_DBG(5, ("Delete empty file: '%s%s'\n", file->key, g_filer->arc_extension));
+                KDirectoryRemove(file->dir, false, "%s%s", file->name, g_filer->arc_extension);
+            }
+        }
+    }
+    if( file->dir != g_filer->dir ) {
+        KDirectoryRelease(file->dir);
+    }
+    free(file->key);
+    free(file->name);
+    free(file);
+}
+
+static
+void CC SRASplitterFiler_StatFile( SLNode *node, void *data )
+{
+    SRASplitterFile* file = (SRASplitterFile*)node;
+    uint64_t* d = (uint64_t*)data;
+
+    if( *d < file->spot_qty ) {
+        *d = file->spot_qty;
+    }
+}
+
+void SRASplitterFiler_Release(void)
+{
+    if( g_filer != NULL ) {
+        SLListWhack(&g_filer->files, SRASplitterFiler_WhackFile, &g_filer->keep_empty);
+        KFileRelease(g_filer->kf_stdout);
+        KDirectoryRelease(g_filer->dir);
+        free(g_filer->prefix);
+        free(g_filer);
+        g_filer = NULL;
+    }
+}
+
+void SRASplitterFactory_FilerReport(uint64_t* total, uint64_t* biggest_file)
+{
+    if( g_filer != NULL ) {
+        if( total != NULL ) {
+            *total = g_filer->spot_qty;
+        }
+        if( biggest_file != NULL ) {
+            SLListForEach(&g_filer->files, SRASplitterFiler_StatFile, biggest_file);
+        }
+    }
+}
+
+static
+rc_t SRASplitterFiler_PushKey(const char* key)
+{
+    if( g_filer == NULL || key == NULL ) {
+        return RC(rcExe, rcFile, rcAttaching, rcParam, rcNull);
+    }
+    if( g_filer->path_tail == sizeof(g_filer->path) - 1 ) {
+        return RC(rcExe, rcFile, rcAttaching, rcDirEntry, rcTooLong);
+    }
+    if( g_filer->key_as_dir ) {
+        /* skip initial non-letters */
+        while( !isalnum(*key) && *key != '\0' ) {
+            ++key;
+        }
+    }
+    g_filer->path[g_filer->path_tail++] = key;
+    g_filer->path_len += strlen(key) + 1;
+    return 0;
+}
+
+static
+rc_t SRASplitterFiler_PopKey(void)
+{
+    if( g_filer->path_tail == 0 ) {
+        return RC(rcExe, rcFile, rcDetaching, rcDirEntry, rcTooShort);
+    }
+    g_filer->path_len -= strlen(g_filer->path[--g_filer->path_tail]) + 1;
+    return 0;
+}
+
+static
+rc_t SRASplitterFiler_OpenFile(SRASplitterFile* file, bool initial)
+{
+    rc_t rc = 0;
+
+    if( file == NULL || (initial && file->file != NULL) ) {
+        rc = RC(rcExe, rcFile, rcOpening, rcParam, rcInvalid);
+    } else if( initial || file->file == NULL ) {
+        int i, vacancy = -1;
+        time_t oldest = 0;
+
+        for(i = 0; i < DUMPER_MAX_OPEN_FILES; i++) {
+            if(g_filer->open[i] == NULL ) {
+                vacancy = i;
+                break;
+            }
+            if(g_filer->open[i]->opened < oldest || oldest == 0 ) {
+                oldest = g_filer->open[i]->opened;
+                vacancy = i;
+            }
+        }
+        if( g_filer->open[vacancy] != NULL ) {
+            SRA_DUMP_DBG(5, ("Close file[%i]: %lu '%s%s'\n", vacancy,
+                g_filer->open[vacancy]->opened, g_filer->open[vacancy]->key, g_filer->arc_extension));
+            KFileRelease(g_filer->open[vacancy]->file);
+            g_filer->open[vacancy]->file = NULL;
+            g_filer->open[vacancy] = NULL;
+        }
+        if( g_filer->kf_stdout ) {
+            SRA_DUMP_DBG(5, ("attach to pre-opened stdout: '%s'\n", file->key));
+            rc = KFileAddRef(g_filer->kf_stdout);
+            file->file = g_filer->kf_stdout;
+        } else if( initial ) {
+            SRA_DUMP_DBG(5, ("Create file: '%s%s'\n", file->key, g_filer->arc_extension));
+            if( (rc = KDirectoryCreateFile(file->dir, &file->file, false, 0664, kcmInit,
+                                           "%s%s", file->name, g_filer->arc_extension)) == 0 ) {
+                if( g_filer->do_gzip ) {
+                    KFile* gz;
+                    if( (rc = KFileMakeGzipForWrite(&gz, file->file)) == 0 ) {
+                        KFileRelease(file->file);
+                        file->file = gz;
+                    }
+                } else if( g_filer->do_bzip2 ) {
+                    KFile* bz;
+                    if( (rc = KFileMakeBzip2ForWrite(&bz, file->file)) == 0 ) {
+                        KFileRelease(file->file);
+                        file->file = bz;
+                    }
+                }
+            }
+        } else if( file->file == NULL ) {
+            SRA_DUMP_DBG(5, ("Reopen file: '%s%s'\n", file->key, g_filer->arc_extension));
+            /* position is rememebered since last time */
+            if( (rc = KDirectoryOpenFileWrite(file->dir, &file->file, false,
+                                              "%s%s", file->name, g_filer->arc_extension)) == 0 ) {
+#if ! SUPPORT_MULTI_SESSION_GZIP_FILES
+                if( g_filer->do_gzip || g_filer->do_bzip2 ) {
+                    /* compressed files cannot (currently) be re-opened until we support multi-session compression */
+                    rc = RC(rcExe, rcFile, rcOpening, rcConstraint, rcViolated);
+                }
+#else
+                if( g_filer->do_gzip ) {
+                    KFile* gz;
+                    if( (rc = KFileMakeGzipForAppend(&gz, file->file)) == 0 ) {
+                        KFileRelease(file->file);
+                        file->file = gz;
+                    }
+                } else if( g_filer->do_bzip2 ) {
+                    KFile* bz;
+                    if( (rc = KFileMakeBzip2ForWrite(&bz, file->file)) == 0 ) {
+                        KFileRelease(file->file);
+                        file->file = bz;
+                    }
+                }
+#endif
+            }
+        }
+#if OUTPUT_BUFFER_SIZE
+        if( rc == 0 && !g_filer->kf_stdout ) {
+            /* attach buffer */
+            KFile *buf = NULL;
+            if( (rc = KBufFileMakeWrite(&buf, file->file, false, OUTPUT_BUFFER_SIZE)) == 0 ) {
+                KFileRelease(file->file);
+                file->file = buf;
+            } else {
+#if _DEBUGGING
+                /* we only want to see this in debug */
+                PLOGERR(klogErr, (klogErr, rc, "creating buffer for file '$(s)$(e)'",
+                    PLOG_2(PLOG_S(s),PLOG_S(e)), file->key, g_filer->arc_extension));
+#else
+                rc = 0;
+#endif
+            }
+        }
+#endif
+        if( rc == 0 ) {
+            g_filer->open[vacancy] = file;
+            file->opened = time(NULL);
+            SRA_DUMP_DBG(5, ("Opened file[%i]: %lu '%s%s'\n",
+                vacancy, file->opened, file->key, g_filer->arc_extension));
+        }
+    }
+    return rc;
+}
+
+static
+bool CC SRASplitterFiler_GetCurrFile_FindByKey( SLNode *node, void *data )
+{
+    SRASplitterFile** d = (SRASplitterFile**)data;
+    SRASplitterFile* file = (SRASplitterFile*)node;
+
+    if( strcmp(file->key, g_filer->key_buf) == 0 ) {
+        *d = file;
+        return true;
+    }
+    return false;
+}
+
+static
+rc_t SRASplitterFiler_FixFSName(const char* name, char** fname)
+{
+    /* replace invalid chars with '_' in name */
+    char* nn = strdup(name);
+
+    if( nn == NULL ) {
+        return RC(rcExe, rcFile, rcOpening, rcMemory, rcExhausted);
+    }
+    *fname = nn;
+    while(*nn != '\0' ) {
+        if( strchr("\\/?:*(){}[]^%\"\'<>|`", *nn) != NULL ) {
+            *nn = '_';
+        }
+        nn++;
+/*TODO: use it!*/
+    }
+    return 0;
+}
+
+static
+rc_t SRASplitterFiler_GetCurrFile(const SRASplitterFile** out_file)
+{
+    rc_t rc = 0;
+    int i;
+    char* key = g_filer->key_buf; /* shortcut */
+    SRASplitterFile* file = NULL;
+
+    if( out_file == NULL ) {
+        return RC(rcExe, rcFile, rcOpening, rcParam, rcInvalid);
+    } else if( g_filer->kf_stdout ) {
+        strcpy(key, "stdout");
+    } else {
+        /* prepare the key
+           if key_as_dir true, key will be prefix/path[i]/(path[i+1]..)/suffix
+           otherwise key will be prefix_path[i](_path[i+1]..)_?suffix
+         */
+        key[0] = '\0';
+        for(i = 0; i < g_filer->path_tail; i++ ) {
+            if( g_filer->path[i][0] == '\0' ) {
+                continue;
+            }
+            if( g_filer->key_as_dir ) {
+                if( i != 0 ) {
+                    strcat(key, "/");
+                }
+                strcat(key, g_filer->path[i]);
+            } else {
+                if( i != 0 && isalnum(g_filer->path[i][0]) ) {
+                    strcat(key, "_");
+                }
+                strcat(key, g_filer->path[i]);
+            }
+        }
+    }
+    if( !SLListDoUntil( &g_filer->files, SRASplitterFiler_GetCurrFile_FindByKey, &file ) ) {
+        SRA_DUMP_DBG(5, ("New file: '%s'\n", key));
+        file = calloc(1, sizeof(*file));
+        key = strdup(key);
+        if( file == NULL || key == NULL ) {
+            free(file);
+            free(key);
+            rc = RC(rcExe, rcFile, rcResolving, rcMemory, rcExhausted);
+        } else {
+            file->key = key;
+            if( g_filer->key_as_dir ) {
+                KDirectory* sub = g_filer->dir;
+                for(i = 0; rc == 0 && i < (g_filer->path_tail - 1); i++ ) {
+                    if( g_filer->path[i][0] != '\0' ) {
+                        char* ndir = NULL;
+                        if( (rc = SRASplitterFiler_FixFSName(g_filer->path[i], &ndir)) == 0 ) {
+                            if( (rc = KDirectoryCreateDir(sub, 0775, kcmCreate, "%s", ndir)) == 0 ||
+                                (GetRCObject(rc) == ( enum RCObject )rcDirectory && GetRCState(rc) == rcExists) ) {
+                                if( (rc = KDirectoryOpenDirUpdate(sub, &file->dir, true, "%s", ndir)) == 0 ) {
+                                    KDirectoryRelease(i == 0 ? NULL : sub);
+                                    sub = file->dir;
+                                }
+                            }
+                            free(ndir);
+                        }
+                    }
+                }
+                rc = SRASplitterFiler_FixFSName(&file->key[strlen(file->key) - strlen(g_filer->path[g_filer->path_tail - 1])], &file->name);
+            } else {
+                file->dir = g_filer->dir;
+                rc = SRASplitterFiler_FixFSName(file->key, &file->name);
+            }
+            if( rc == 0 && (rc = SRASplitterFiler_OpenFile(file, true)) == 0 ) {
+                SLListPushTail(&g_filer->files, &file->dad);
+            } else {
+                SRASplitterFiler_WhackFile(&file->dad, &g_filer->keep_empty);
+            }
+        }
+    } else {
+        SRA_DUMP_DBG(5, ("Curr file key '%s': '%s'\n", key, file->name));
+        rc = SRASplitterFiler_OpenFile(file, false);
+    }
+    *out_file = rc ? NULL : file;
+    return rc;
+}
+
+rc_t SRASplitterFactory_FilerPrefix(const char* prefix)
+{
+    rc_t rc = 0;
+
+    if( g_filer == NULL ) {
+        rc = RC(rcExe, rcFile, rcUpdating, rcSelf, rcNotOpen);
+    } else if( prefix == NULL || strcmp(prefix, g_filer->prefix) != 0 ) {
+        if( (rc = SRASplitterFiler_PopKey()) == 0 ) {
+            free(g_filer->prefix);
+            g_filer->prefix = strdup(prefix ? prefix : "");
+            if( g_filer->prefix == NULL ) {
+                rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+            } else {
+                rc = SRASplitterFiler_PushKey(g_filer->prefix);
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitterFactory_FilerInit(bool to_stdout, bool gzip, bool bzip2, bool key_as_dir, bool keep_empty, const char* path, ...)
+{
+    rc_t rc = 0;
+
+    if( g_filer != NULL ) {
+        rc = RC(rcExe, rcFile, rcConstructing, rcSelf, rcExists);
+    } else if( gzip && bzip2 ) {
+        rc = RC(rcExe, rcFile, rcConstructing, rcParam, rcAmbiguous);
+    } else if( (g_filer = calloc(1, sizeof(*g_filer))) == NULL ) {
+        rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        g_filer->key_as_dir = to_stdout ? false : key_as_dir;
+        g_filer->keep_empty = to_stdout ? true : keep_empty;
+        g_filer->do_gzip = gzip;
+        g_filer->do_bzip2 = bzip2;
+        g_filer->arc_extension = gzip ? ".gz" : (bzip2 ? ".bz2" : "");
+        SLListInit(&g_filer->files);
+        /* push empty prefix */
+        g_filer->prefix = strdup("");
+        if( (rc = SRASplitterFiler_PushKey(g_filer->prefix)) == 0 &&
+            (rc = KDirectoryNativeDir(&g_filer->dir)) == 0 ) {
+            if( to_stdout ) {
+                if( (rc = KFileMakeStdOut(&g_filer->kf_stdout)) == 0 ) {
+                    KFile *buf = NULL;
+                    if( gzip ) {
+                        KFile* gz;
+                        if( (rc = KFileMakeGzipForWrite(&gz, g_filer->kf_stdout)) == 0 ) {
+                            KFileRelease(g_filer->kf_stdout);
+                            g_filer->kf_stdout = gz;
+                        }
+                    } else if( bzip2 ) {
+                        KFile* bz;
+                        if( (rc = KFileMakeBzip2ForWrite(&bz, g_filer->kf_stdout)) == 0 ) {
+                            KFileRelease(g_filer->kf_stdout);
+                            g_filer->kf_stdout = bz;
+                        }
+                    }
+#if OUTPUT_BUFFER_SIZE
+                    if ( rc == 0 ) {
+                        if( (rc = KBufFileMakeWrite(&buf, g_filer->kf_stdout, false, OUTPUT_BUFFER_SIZE)) == 0 ) {
+                            KFileRelease(g_filer->kf_stdout);
+                            g_filer->kf_stdout = buf;
+                        } else {
+#if _DEBUGGING
+                            /* we only want to see this in debug */
+                            LOGERR(klogErr, rc, "creating buffer for stdout");
+#else
+                            rc = 0;
+#endif
+                        }
+                    }
+#endif
+                }
+            } else if( path != NULL ) {
+                va_list args;
+                va_start(args, path);
+                if( (rc = KDirectoryVCreateDir(g_filer->dir, 0775, kcmCreate | kcmParents, path, args)) == 0 ||
+                    (GetRCObject(rc) == ( enum RCObject )rcDirectory && GetRCState(rc) == rcExists) ) {
+                    KDirectory* sub = NULL;
+                    va_end(args);
+                    va_start(args, path);
+                    if( (rc = KDirectoryVOpenDirUpdate(g_filer->dir, &sub, true, path, args)) == 0 ) {
+                        KDirectoryRelease(g_filer->dir);
+                        g_filer->dir = sub;
+                    }
+                }
+                va_end(args);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SRASplitterFiler_PopKey();
+        SRASplitterFiler_Release();
+    }
+    return rc;
+}
+
+/* ### Base splitter code ##################################################### */
+
+/* used to detect correct object pointers */
+const uint32_t SRASplitterFactory_MAGIC = 0xFACE3693;
+
+struct SRASplitterFactory {
+    uint32_t magic;
+    ESRASplitterTypes type;
+    const SRASplitterFactory* next;
+    SRASplitterFactory_Init_Func* Init;
+    SRASplitterFactory_NewObj_Func* NewObj;
+    SRASplitterFactory_Release_Func* Release;
+};
+
+/* used to detect correct object pointers */
+const uint32_t SRASplitter_MAGIC = 0xFACE5325;
+
+typedef struct SRASplitter_Child SRASplitter_Child;
+
+struct SRASplitter {
+    uint32_t magic;
+    ESRASplitterTypes type;
+    const SRASplitterFactory* next_fact;
+    SRASplitter_GetKey_Func* GetKey;
+    SRASplitter_GetKeySet_Func* GetKeySet;
+    SRASplitter_Dump_Func* Dump;
+    SRASplitter_Release_Func* Release;
+    BSTree children;
+    SRASplitter_Child* last_found;
+};
+
+struct SRASplitter_Child {
+    BSTNode node;
+    char key[DUMPER_MAX_KEY_LENGTH + 1];
+    bool is_splitter; /* next union selector */
+    union {
+        /* chained key->splitter for self type of eSplitterRead and eSplitterSpot */
+        const SRASplitter* splitter;
+        /* file object for self type of eSplitterFormat */
+        const SRASplitterFile* file;
+    } child;
+};
+
+static
+rc_t SRASplitter_Child_Make(SRASplitter_Child** child, const char* key)
+{
+    if( child == NULL || key == NULL ) {
+        return RC(rcExe, rcNode, rcAllocating, rcParam, rcNull);
+    }
+    if( strlen(key) > DUMPER_MAX_KEY_LENGTH ) {
+        return RC(rcExe, rcNode, rcAllocating, rcTag, rcTooLong);
+    }
+    *child = calloc(1, sizeof(**child));
+    if( *child == NULL ) {
+        return RC(rcExe, rcNode, rcAllocating, rcMemory, rcExhausted);
+    }
+    strcpy((*child)->key, key);
+    return 0;
+}
+
+static
+rc_t SRASplitter_Child_MakeSplitter(SRASplitter_Child** child, const char* key, const SRASplitter* splitter)
+{
+    rc_t rc = 0;
+
+    if( splitter == NULL ) {
+        rc = RC(rcExe, rcNode, rcAllocating, rcParam, rcNull);
+    } else if( (rc = SRASplitter_Child_Make(child, key)) == 0 ) {
+        (*child)->is_splitter = true;
+        (*child)->child.splitter = splitter;
+    }
+    return rc;
+}
+
+static
+rc_t SRASplitter_Child_MakeFile(SRASplitter_Child** child, const char* key, const SRASplitterFile* file)
+{
+    rc_t rc = 0;
+
+    if( file == NULL ) {
+        rc = RC(rcExe, rcNode, rcAllocating, rcParam, rcNull);
+    } else if( (rc = SRASplitter_Child_Make(child, key)) == 0 ) {
+        (*child)->is_splitter = false;
+        (*child)->child.file = file;
+    }
+    return rc;
+}
+
+static
+void CC SRASplitter_Child_Whack(BSTNode* node, void* data)
+{
+    const SRASplitter_Child* n = (const SRASplitter_Child*)node;
+    if( n->is_splitter ) {
+        rc_t rc = 0;
+        if( (rc = SRASplitter_Release(n->child.splitter)) != 0 ) {
+            LOGERR(klogErr, rc, "SRASplitter_Release");
+        }
+    }
+    free(node);
+}
+
+static
+int64_t CC SRASplitter_Child_Cmp(const BSTNode* item, const BSTNode* node)
+{
+    const SRASplitter_Child* i = (const SRASplitter_Child*)item;
+    const SRASplitter_Child* n = (const SRASplitter_Child*)node;
+    return strcmp(i->key, n->key);
+}
+
+static
+int64_t CC SRASplitter_Child_Find(const void* item, const BSTNode* node)
+{
+    const char* key = (const char*)item;
+    const SRASplitter_Child* n = (const SRASplitter_Child*)node;
+    return strcmp(key, n->key);
+}
+
+static /* not virtual, self is direct pointer to base type here !!! */
+rc_t SRASplitter_FindNextSplitter(SRASplitter* self, const char* key)
+{
+    rc_t rc = 0;
+
+    if( self->last_found == NULL || strcmp(self->last_found->key, key) ) {
+        self->last_found = (SRASplitter_Child*)BSTreeFind( &self->children, key, SRASplitter_Child_Find );
+        if( self->last_found == NULL ) {
+            /* create new child using next factory in chain */
+            const SRASplitter* splitter = NULL;
+            SRA_DUMP_DBG(5, ("New splitter on key '%s'\n", key));
+            if( (rc = SRASplitterFactory_NewObj(self->next_fact, &splitter)) == 0 ) {
+                if( (rc = SRASplitter_Child_MakeSplitter(&self->last_found, key, splitter)) == 0 ) {
+                    if( (rc = BSTreeInsertUnique(&self->children, &self->last_found->node, NULL, SRASplitter_Child_Cmp)) != 0 ) {
+                        SRASplitter_Child_Whack(&self->last_found->node, NULL);
+                        self->last_found = NULL;
+                    }
+                } else {
+                    SRASplitter_Release(splitter);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static /* not virtual, self is direct pointer to base type here !!! */
+rc_t SRASplitter_FindNextFile(SRASplitter* self, const char* key)
+{
+    rc_t rc = 0;
+
+    if( self->last_found == NULL || strcmp(self->last_found->key, key) != 0 ) {
+        self->last_found = (SRASplitter_Child*)BSTreeFind(&self->children, key, SRASplitter_Child_Find);
+        if( self->last_found == NULL ) {
+            /* create new child using global filer */
+            const SRASplitterFile* file = NULL;
+            SRA_DUMP_DBG(5, ("New file on key '%s'\n", key));
+            if( (rc = SRASplitterFiler_GetCurrFile(&file)) == 0 ) {
+                if( (rc = SRASplitter_Child_MakeFile(&self->last_found, key, file)) == 0 ) {
+                    if( (rc = BSTreeInsertUnique(&self->children, &self->last_found->node, NULL, SRASplitter_Child_Cmp)) != 0 ) {
+                        SRASplitter_Child_Whack(&self->last_found->node, NULL);
+                        self->last_found = NULL;
+                    }
+                }
+            }
+        }
+    }
+    if( rc == 0 ) {
+        /* make sure file is opened */
+        rc = SRASplitterFiler_OpenFile((SRASplitterFile*)(self->last_found->child.file), false);
+    }
+    return rc;
+}
+
+rc_t SRASplitter_Make(const SRASplitter** cself, size_t type_size,
+                      SRASplitter_GetKey_Func* getkey,
+                      SRASplitter_GetKeySet_Func* get_keyset,
+                      SRASplitter_Dump_Func* dump,
+                      SRASplitter_Release_Func* release)
+{
+    SRASplitter* self = NULL;
+
+    if( cself == NULL ) {
+        return RC(rcExe, rcType, rcAllocating, rcParam, rcNull);
+    }
+    self = calloc(1, type_size + sizeof(*self));
+    if( self == NULL ) {
+        return RC(rcExe, rcType, rcAllocating, rcMemory, rcExhausted);
+    }
+    self->magic = SRASplitter_MAGIC;
+    BSTreeInit(&self->children);
+    self->GetKey = getkey;
+    self->GetKeySet = get_keyset;
+    self->Dump = dump;
+    self->Release = release;
+
+    /* shift pointer to after hidden structure */
+    self++;
+    *cself = self;
+    return 0;
+}
+
+static
+rc_t SRASplitter_ResolveSelf(const SRASplitter* self, enum RCContext ctx, SRASplitter** resolved)
+{
+    if( self == NULL || resolved == NULL ) {
+        return RC(rcExe, rcType, ctx, rcSelf, rcNull);
+    }
+    *resolved = (SRASplitter*)--self;
+    /* just to validate that it is full instance */
+    if( (*resolved)->magic != SRASplitter_MAGIC ) {
+        *resolved = NULL;
+        return RC(rcExe, rcType, ctx, rcMemory, rcCorrupt);
+    }
+    return 0;
+}
+
+rc_t SRASplitter_AddSpot( const SRASplitter * cself, spotid_t spot, readmask_t * readmask )
+{
+    SRASplitter * self = NULL;
+    rc_t rc = SRASplitter_ResolveSelf( cself, rcExecuting, &self );
+    if ( rc == 0 )
+    {
+        if ( self->type == eSplitterRead )
+        {
+            const SRASplitter_Keys* keys = NULL;
+            uint32_t key_qty = 0;
+            int32_t i, j, k;
+            make_readmask( used_readmasks );
+
+            clear_readmask( used_readmasks );
+            rc = self->GetKeySet( cself, &keys, &key_qty, spot, readmask );
+
+            for ( i = 0; rc == 0 && i < key_qty; i++ )
+            {
+                if ( keys[ i ].key != NULL && !isset_readmask( used_readmasks, i ) )
+                {
+                    make_readmask( local_readmask );
+                    copy_readmask( keys[ i ].readmask, local_readmask );
+                    /* merge readmasks from duplicate keys in array */
+                    for ( j = i + 1; j < key_qty; j++ )
+                    {
+                        if ( keys[ i ].key == keys[ j ].key || strcmp( keys[ i ].key, keys[ j ].key ) == 0 )
+                        {
+                            set_readmask( used_readmasks, j );
+                            for ( k = 0; k < nreads_max; k++ )
+                            {
+                                local_readmask[ k ] |= keys[ j ].readmask[ k ];
+                            }
+                        }
+                    }
+                    /* leave reads only allowed by previous object in chain */
+#ifndef EUGNES_LOOP_FIX
+                    for ( j = 0, k = 0; k < nreads_max; k++ )
+                    {
+                        local_readmask[ k ] &= readmask[ k ];
+                        if ( isset_readmask( local_readmask, k ) )
+                        {
+                            j++;
+                        }
+                    }
+                    if ( j > 0 )
+#endif
+                    {
+                        rc = SRASplitter_FindNextSplitter( self, keys[ i ].key );
+                        if ( rc == 0 )
+                        {
+                            /* push spot to next splitter in chain */
+                            rc = SRASplitterFiler_PushKey( self->last_found->key );
+                            if ( rc == 0 )
+                            {
+                                /* here comes RECURSION!!! */
+                                rc_t rc2;
+                                rc = SRASplitter_AddSpot( self->last_found->child.splitter, spot, local_readmask );
+                                rc2 = SRASplitterFiler_PopKey();
+                                rc = rc ? rc : rc2;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        else if ( self->type == eSplitterSpot )
+        {
+            const char* key = NULL;
+            make_readmask( new_readmask );
+            copy_readmask( readmask, new_readmask );
+            rc = self->GetKey( cself, &key, spot, new_readmask );
+            if ( rc == 0 && key != NULL )
+            {
+                int32_t j, k;
+                /* leave reads only allowed by previous object in chain */
+#ifndef EUGNES_LOOP_FIX
+                for( j = 0, k = 0; k < nreads_max; k++ )
+                {
+                    readmask[ k ] &= new_readmask[ k ];
+                    if ( isset_readmask( readmask, k ) )
+                    {
+                        j++;
+                    }
+                }
+                if ( j > 0 )
+#endif
+                {
+                    rc = SRASplitter_FindNextSplitter( self, key );
+                    if ( rc == 0 )
+                    {
+                        /* push spot to next splitter in chain */
+                        rc = SRASplitterFiler_PushKey( self->last_found->key );
+                        if ( rc == 0 )
+                        {
+                            /* here comes RECURSION!!! */
+                            rc_t rc2;
+                            rc = SRASplitter_AddSpot( self->last_found->child.splitter, spot, readmask );
+                            rc2 = SRASplitterFiler_PopKey();
+                            rc = rc ? rc : rc2;
+                        }
+                    }
+                }
+            }
+        }
+        else if ( self->type == eSplitterFormat )
+        {
+            rc = self->Dump( cself, spot, readmask );
+        }
+        else
+        {
+            rc = RC( rcExe, rcFile, rcExecuting, rcInterface, rcUnsupported );
+        }
+    }
+    return rc;
+}
+
+
+rc_t SRASplitter_Release(const SRASplitter* cself)
+{
+    rc_t rc = 0;
+    SRASplitter* self = NULL;
+
+    if( cself != NULL ) {
+        if( (rc = SRASplitter_ResolveSelf(cself, rcExecuting, &self)) == 0 ) {
+            if( self->Release ) {
+                rc = self->Release(cself);
+            }
+            BSTreeWhack( &self->children, SRASplitter_Child_Whack, NULL );
+            free(self);
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitter_FileActivate(const SRASplitter* cself, const char* key)
+{
+    rc_t rc = 0, rc2 = 0;
+    SRASplitter* self = NULL;
+
+    if( (rc = SRASplitter_ResolveSelf(cself, rcExecuting, &self)) == 0 ) {
+        if( (rc = SRASplitterFiler_PushKey(key)) == 0 ) {
+            /* sets self->last_found */
+            rc = SRASplitter_FindNextFile(self, key);
+            rc2 = SRASplitterFiler_PopKey();
+            rc = rc ? rc : rc2;
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size )
+{
+    SRASplitter* self = NULL;
+    
+    rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+    if ( rc == 0 )
+    {
+        if ( self->last_found == NULL )
+        {
+            rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+        }
+        else if ( buf != NULL && size > 0 )
+        {
+            size_t writ = 0;
+            SRASplitterFile* f = ( SRASplitterFile* )( self->last_found->child.file );
+            rc = KFileWrite( f->file, f->pos, buf, size, &writ );
+            if ( rc == 0 )
+            {
+                f->pos += writ;
+                if ( f->curr_spot != spot && spot != 0 )
+                {
+                     f->curr_spot = spot;
+                     f->spot_qty = f->spot_qty + 1;
+                }
+                if ( g_filer->curr_spot != spot && spot != 0 )
+                {
+                    g_filer->curr_spot = spot;
+                    g_filer->spot_qty = g_filer->spot_qty + 1;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot, 
+                               uint64_t pos, const void* buf, size_t size )
+{
+    SRASplitter* self = NULL;
+
+    rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+    if ( rc == 0 )
+    {
+        if ( self->last_found == NULL )
+        {
+            rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+        }
+        else if ( buf != NULL && size > 0 )
+        {
+            const SRASplitterFile* f = self->last_found->child.file;
+            /* remember last position */
+            uint64_t old_pos = f->pos;
+            ( ( SRASplitterFile* ) f )->pos = pos;
+            /* write to requested position */
+            rc = SRASplitter_FileWrite( cself, spot, buf, size );
+            if ( f->pos < old_pos )
+            {
+                /* revert to last position if wrote less than it was */
+                ( ( SRASplitterFile* ) f )->pos = old_pos;
+            }
+        }
+    }
+    return rc;
+}
+
+/* ### Common splitter factory code ##################################################### */
+
+rc_t SRASplitterFactory_Make(const SRASplitterFactory** cself, ESRASplitterTypes type, size_t type_size,
+                             SRASplitterFactory_Init_Func* init, SRASplitterFactory_NewObj_Func* newObj,
+                             SRASplitterFactory_Release_Func* release)
+{
+    SRASplitterFactory* self = NULL;
+
+    if( cself == NULL || newObj == NULL ) {
+        return RC(rcExe, rcType, rcAllocating, rcParam, rcNull);
+    }
+    self = calloc(1, type_size + sizeof(*self));
+    if( self == NULL ) {
+        return RC(rcExe, rcType, rcAllocating, rcMemory, rcExhausted);
+    }
+    self->magic = SRASplitterFactory_MAGIC;
+    self->type = type;
+    self->Init = init;
+    self->NewObj = newObj;
+    self->Release = release;
+
+    /* shift pointer to after hidden structure */
+    self++;
+    *cself = self;
+    return 0;
+}
+
+static
+rc_t SRASplitterFactory_ResolveSelf(const SRASplitterFactory* self, enum RCContext ctx, SRASplitterFactory** resolved)
+{
+    if( self == NULL || resolved == NULL ) {
+        return RC(rcExe, rcType, ctx, rcSelf, rcNull);
+    }
+    *resolved = (SRASplitterFactory*)--self;
+    /* just to validate that it is full instance */
+    if( (*resolved)->magic != SRASplitterFactory_MAGIC ) {
+        *resolved = NULL;
+        return RC(rcExe, rcType, ctx, rcMemory, rcCorrupt);
+    }
+    return 0;
+}
+
+void SRASplitterFactory_Release(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    SRASplitterFactory* self = NULL;
+
+    if( cself != NULL ) {
+        if( (rc = SRASplitterFactory_ResolveSelf(cself, rcReleasing, &self)) == 0 ) {
+            SRASplitterFactory_Release(self->next);
+            if( self->Release != NULL ) {
+                self->Release(cself);
+            }
+            free(self);
+        }
+    }
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "SRASplitterFactory");
+    }
+}
+
+ESRASplitterTypes SRASplitterFactory_GetType(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    SRASplitterFactory* self = NULL;
+
+    if( (rc = SRASplitterFactory_ResolveSelf(cself, rcClassifying, &self)) == 0 ) {
+        return self->type;
+    }
+    LOGERR(klogErr, rc, "SRASplitterFactory");
+    return 0;
+}
+
+rc_t SRASplitterFactory_AddNext(const SRASplitterFactory* cself, const SRASplitterFactory* next)
+{
+    rc_t rc = 0;
+    SRASplitterFactory* self = NULL;
+
+    if( (rc = SRASplitterFactory_ResolveSelf(cself, rcAttaching, &self)) == 0 ) {
+        if( self->type == eSplitterFormat && next != NULL ) {
+            /* formatter must be last in chain */
+            rc = RC(rcExe, rcType, rcAttaching, rcConstraint, rcViolated);
+        } else {
+            SRASplitterFactory_Release(self->next);
+            self->next = next;
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    SRASplitterFactory* self = NULL;
+
+    if( (rc = SRASplitterFactory_ResolveSelf(cself, rcConstructing, &self)) == 0 ) {
+        if( self->Init ) {
+            rc = self->Init(cself);
+        }
+        if( rc == 0 ) {
+            if( self->next != NULL ) {
+                rc = SRASplitterFactory_Init(self->next);
+            } else if( self->type != eSplitterFormat ) {
+                /* formatter must be last in chain */
+                rc = RC(rcExe, rcType, rcConstructing, rcConstraint, rcViolated);
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRASplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    SRASplitterFactory* self = NULL;
+
+    if( (rc = SRASplitterFactory_ResolveSelf(cself, rcConstructing, &self)) == 0 ) {
+        if( (rc = self->NewObj(cself, splitter)) == 0 ) {
+            SRASplitter* sp = NULL;
+            if( (rc = SRASplitter_ResolveSelf(*splitter, rcConstructing, &sp)) == 0 ) {
+                sp->type = self->type;
+                if( (self->type == eSplitterSpot   && (!sp->GetKey ||  sp->GetKeySet ||  sp->Dump) ) ||
+                    (self->type == eSplitterRead   && ( sp->GetKey || !sp->GetKeySet ||  sp->Dump) ) ||
+                    (self->type == eSplitterFormat && ( sp->GetKey ||  sp->GetKeySet || !sp->Dump) ) ) {
+                    SRASplitter_Release(*splitter);
+                    *splitter = NULL;
+                    rc = RC(rcExe, rcType, rcAllocating, rcInterface, rcInvalid);
+                } else if(self->type != eSplitterFormat) {
+                    sp->next_fact = self->next;
+                }
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-dump/factory.h b/tools/sra-dump/factory.h
new file mode 100644
index 0000000..dd9d105
--- /dev/null
+++ b/tools/sra-dump/factory.h
@@ -0,0 +1,194 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_tools_dump_factory
+#define _h_tools_dump_factory
+
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <klib/data-buffer.h>
+#include <sra/sradb.h>
+
+#define DATABUFFER_INC_SZ 4096
+
+/* KDataBuffer is used as byte buffer-only here! */
+#define IF_BUF(expr, buf, writ) \
+    while( (rc = (expr)) != 0 && \
+           (GetRCObject(rc) == rcMemory || GetRCObject(rc) == ( enum RCObject )rcBuffer) && \
+           (GetRCState(rc) == rcInsufficient || GetRCState(rc) == rcExhausted) ) { \
+        SRA_DUMP_DBG(10, ("\n%s grow buffer from %u to %u\n", __func__, buf->elem_count, writ + DATABUFFER_INC_SZ)); \
+        if( (rc = KDataBufferResize(buf, writ + DATABUFFER_INC_SZ)) != 0 ) { \
+            break; \
+        } \
+    } \
+    if( rc == 0 )
+
+typedef enum {
+    eSplitterSpot = 1,
+    eSplitterRead,
+    eSplitterFormat /* in splitters chain this type must be the last instance and must write to file(s) */
+} ESRASplitterTypes;
+
+typedef struct SRASplitter SRASplitter;
+
+#define NREADS_MAX (8*1024)
+typedef uint8_t readmask_t; 
+extern uint32_t nreads_max;
+
+/* new hack to realize changed requirement for quality-filter */
+#define DEF_QUAL_N_LIMIT 10
+extern uint32_t quality_N_limit;
+
+extern bool g_legacy_report;
+
+#define make_readmask(m) readmask_t m[NREADS_MAX]
+#define copy_readmask(src,dst) (memmove(dst, src, sizeof(readmask_t) * nreads_max))
+#define reset_readmask(m) (memset(m, ~0, sizeof(readmask_t) * nreads_max))
+#define clear_readmask(m) (memset(m,  0, sizeof(readmask_t)  * nreads_max))
+#define set_readmask(m,id) (id < nreads_max ? (m)[id] = 1 : 0)
+#define unset_readmask(m,id) (id < nreads_max ? (m)[id] = 0 : 0)
+#define get_readmask(m,id) (id < nreads_max ? ((m)[id]) : 0)
+#define isset_readmask(m,id) (id < nreads_max ? (m)[id] != 0 : false)
+
+typedef struct SRASplitter_Keys_struct {
+    const char* key;
+    make_readmask(readmask);
+} SRASplitter_Keys;
+
+/* for eSpot splitter: returns pointer to key and (optionally) modified readmask, based on spotid and readmask
+   key == NULL stops further processing of the spot, char* key alloc and dealloc must be handled by splitter itself
+ */
+typedef rc_t (SRASplitter_GetKey_Func)(const SRASplitter* self, const char** key, spotid_t spot, readmask_t* readmask);
+
+/* for eRead splitter:
+   returns array of keys and readmasks used array portion count in keys, based on spotid and readmask,
+   on return keys shows number of array key[] elements used, keys == 0 stops further processing of the spot,
+   elements with key.key == NULL OR key.readmask == 0 are skipped
+   key alloc and dealloc must be handled by splitter itself
+*/
+typedef rc_t (SRASplitter_GetKeySet_Func)(const SRASplitter* self, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask);
+
+/* writes data to file(s) using SRASplitter_File* functions, based on spot and readmask
+   do NOT open or create any files directly here, use SRASplitter_FileXXX functions only!
+*/
+typedef rc_t (SRASplitter_Dump_Func)(const SRASplitter* self, spotid_t spot, const readmask_t* readmask);
+
+/* optional method to free splitter resources, object distruction is handled automatically, do NOT free self! */
+typedef rc_t (SRASplitter_Release_Func)(const SRASplitter* self);
+
+/**
+  * Base type constructor, must be called when constructing custom splitter type
+  */
+rc_t SRASplitter_Make(const SRASplitter** self, size_t type_size, /* sizeof(derived object) */
+                      /* mandatory only for eSpot splitter, must be NULL for other types */
+                      SRASplitter_GetKey_Func*,
+                      /* mandatory only for eRead splitter, must be NULL for other types */
+                      SRASplitter_GetKeySet_Func*,
+                      /* mandatory only for eFormat splitter, must be NULL for other types */
+                      SRASplitter_Dump_Func*,
+                      /* optional destructor, do NOT free self! */
+                      SRASplitter_Release_Func* release);
+/**
+  * Base type destructor
+  */
+rc_t SRASplitter_Release(const SRASplitter* self);
+
+/**
+  * Add spot to processing chain
+  */
+rc_t SRASplitter_AddSpot(const SRASplitter* self, spotid_t spot, readmask_t* readmask);
+
+/**
+  * File access routines
+  */
+/* key [IN] - usually file type extension: .sff, .fastq, _nse.txt, etc */
+rc_t SRASplitter_FileActivate(const SRASplitter* self, const char* key);
+/* CAREFULL!!! these operates on last active file
+   spot can be zero to indicate file header/footer
+   which no considered as actual data and file treated as empty if no actual spots is written
+ */
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size );
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot, uint64_t pos, const void* buf, size_t size );
+
+typedef struct SRASplitterFactory SRASplitterFactory;
+
+typedef rc_t (SRASplitterFactory_Init_Func)(const SRASplitterFactory* self);
+typedef rc_t (SRASplitterFactory_NewObj_Func)(const SRASplitterFactory* self, const SRASplitter** splitter);
+typedef void (SRASplitterFactory_Release_Func)(const SRASplitterFactory* self);
+
+
+/**
+  * Initialize factories file handler object.
+  * Must be called BEFORE 1st call to SRASplitterFactory_Init
+  *
+  * key_as_dir [IN] - if true, subdirs created for each splitting level: SPOT_GROUP/1/prefix.fastq
+  *                   if false, single file is used in split chain: prefix_SPOT_GROUP_1.fastq
+  * prefix [IN]     - file name prefix, usually run id (accession)
+  * path, ... [IN]  - path to directory where file will reside
+  */
+rc_t SRASplitterFactory_FilerInit(bool to_stdout, bool gzip, bool bzip2, bool key_as_dir, bool keep_empty, const char* path, ...);
+/* this only works correctly on top of the splitter tree !! */
+rc_t SRASplitterFactory_FilerPrefix(const char* prefix);
+void SRASplitterFactory_FilerReport(uint64_t* total, uint64_t* biggest_file);
+void SRASplitterFiler_Release(void);
+
+/**
+  * Create factory object
+  */
+rc_t SRASplitterFactory_Make(const SRASplitterFactory** self, ESRASplitterTypes type, size_t type_size,
+                             /* optional method to initialize self */
+                             SRASplitterFactory_Init_Func* init,
+                             /* mandatory method to spawn new SRASplitter object */
+                             SRASplitterFactory_NewObj_Func* newObj,
+                             /* optional destructor, should NOT free self!!! */
+                             SRASplitterFactory_Release_Func* release);
+
+/**
+  * Releases Factory and all chained factories
+  */
+void SRASplitterFactory_Release(const SRASplitterFactory* self);
+
+/**
+  * Get Factory type
+  */
+ESRASplitterTypes SRASplitterFactory_GetType(const SRASplitterFactory* self);
+
+/**
+  * Chain "next" factory after "self", releases old chain if present
+  */
+rc_t SRASplitterFactory_AddNext(const SRASplitterFactory* self, const SRASplitterFactory* next);
+
+/**
+  * Initialize a chain of factories. Factories must be chaind properly before init.
+  * Type chain must look like (eSpot|eRead)*, eFormat.
+  */
+rc_t SRASplitterFactory_Init(const SRASplitterFactory* self);
+
+/**
+  * Create new instance of factory kind, point splitter to next factory in chain
+  */
+rc_t SRASplitterFactory_NewObj(const SRASplitterFactory* self, const SRASplitter** splitter);
+
+#endif /* _h_tools_dump_factory */
diff --git a/tools/sra-dump/fasta_dump.c b/tools/sra-dump/fasta_dump.c
new file mode 100644
index 0000000..2ef3ac9
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.c
@@ -0,0 +1,752 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <vdb/manager.h>
+
+#include <align/manager.h>
+#include <align/reference.h>
+
+#include <sra/srapath.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+static bool string_ends_with( const char * s, const char * pattern )
+{
+    const char * found = strstr ( s, pattern );
+    if ( found == NULL )
+        return false;
+    else
+    {
+        size_t len_string = string_size ( s );
+        size_t len_pattern = string_size ( pattern );
+        size_t found_at = ( found - s );
+        return ( found_at == ( len_string - len_pattern ) );
+    }
+}
+
+
+static char * fasta_ref = "--fastaref";
+
+/* we have to test if argv[0] ends in 'fastq-dump' or 'fastq-dump.exe',
+   and we have an argument called '--fasta' */
+bool fasta_dump_requested( int argc, char* argv[] )
+{
+    if ( string_ends_with( argv[ 0 ], "fastq-dump" ) ||
+         string_ends_with( argv[ 0 ], "fastq-dump.exe" ) )
+    {
+        int i;
+        for ( i = 1; i < argc; ++i )
+        {
+            if ( strcmp( argv[ i ], fasta_ref ) == 0 )
+                return true;
+        }
+    }
+
+    return false;
+}
+
+#define OPTION_OUTF    "outfile"
+#define ALIAS_OUTF     "o"
+
+#define OPTION_WIDTH   "width"
+#define ALIAS_WIDTH    "w"
+
+#define OPTION_GZIP    "gzip"
+#define ALIAS_GZIP     NULL
+
+#define OPTION_BZIP    "bzip2"
+#define ALIAS_BZIP     NULL
+
+#define OPTION_REFNAME "refname"
+#define ALIAS_REFNAME  "r"
+
+#define OPTION_FROM    "from"
+#define ALIAS_FROM     "N"
+
+#define OPTION_LENGTH   "length"
+#define ALIAS_LENGTH    "X"
+
+#define OPTION_FAREF    "fastaref"
+#define ALIAS_FAREF     NULL
+
+
+OptDef MyOptions[] =
+{
+    /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_OUTF,    ALIAS_OUTF,    NULL, NULL,          1,        true,        false },
+    { OPTION_WIDTH,   ALIAS_WIDTH,   NULL, NULL,          1,        true,        false },
+    { OPTION_GZIP,    ALIAS_GZIP,    NULL, NULL,          1,        false,       false },
+    { OPTION_BZIP,    ALIAS_BZIP,    NULL, NULL,          1,        false,       false },
+    { OPTION_REFNAME, ALIAS_REFNAME, NULL, NULL,          0,        true,        false },
+    { OPTION_FROM,    ALIAS_FROM,    NULL, NULL,          1,        true,        false },
+    { OPTION_LENGTH,  ALIAS_LENGTH,  NULL, NULL,          1,        true,        false },
+    { OPTION_FAREF,   ALIAS_FAREF,   NULL, NULL,          1,        false,       false }
+};
+
+
+/* =========================================================================================== */
+
+
+/* GLOBAL VARIABLES */
+struct {
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = { NULL };
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, (const void **)res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+
+static rc_t get_int_option( const Args *args, const char *name, uint32_t *res, const uint32_t def )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *res = def;
+    if ( rc == 0 && s != NULL )
+    {
+        *res = atoi( s );
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+    rc_t rc = 0;
+
+    assert( buffer != NULL );
+    assert( num_writ != NULL );
+
+    do {
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+        if ( rc == 0 )
+        {
+            buffer += *num_writ;
+            bufsize -= *num_writ;
+            g_out_writer.pos += *num_writ;
+        }
+    } while ( rc == 0 && bufsize > 0 );
+    return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+    rc_t rc = 0;
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        else
+        {
+            KFile *of;
+            rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+            if ( rc == 0 )
+            {
+                KFile *buf;
+                if ( gzip )
+                {
+                    KFile *gz;
+                    rc = KFileMakeGzipForWrite( &gz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = gz;
+                    }
+                }
+                if ( bzip2 )
+                {
+                    KFile *bz;
+                    rc = KFileMakeBzip2ForWrite( &bz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = bz;
+                    }
+                }
+
+                rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+                if ( rc == 0 )
+                {
+                    g_out_writer.kfile = buf;
+                    g_out_writer.org_writer = KOutWriterGet();
+                    g_out_writer.org_data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                    if ( rc != 0 )
+                        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+                }
+                KFileRelease( of );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+    KFileRelease( g_out_writer.kfile );
+    if( g_out_writer.org_writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+    }
+    g_out_writer.org_writer = NULL;
+}
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+typedef struct fasta_options
+{
+    uint32_t width;
+    bool gzip;
+    bool bzip;
+    const char * outfile;
+    INSDC_coord_zero from;
+    INSDC_coord_len length;
+} fasta_options;
+
+
+static rc_t get_fasta_options( Args * args, fasta_options *opts )
+{
+    rc_t rc = get_int_option( args, OPTION_WIDTH, &opts->width, 80 );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_OUTF, &opts->outfile );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_GZIP, &opts->gzip, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_BZIP, &opts->bzip, false );
+
+    if ( rc == 0 )
+    {
+        uint32_t x;
+        rc = get_int_option( args, OPTION_FROM, &x, 0 );
+        if ( rc == 0 )
+            opts->from = x;
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t x;
+        rc = get_int_option( args, OPTION_LENGTH, &x, 0 );
+        if ( rc == 0 )
+            opts->length = x;
+    }
+
+    return rc;
+}
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+    bool res = false;
+    size_t i, n = string_size ( path );
+    for ( i = 0; i < n && !res; ++i )
+    {
+        char c = path[ i ];
+        res = ( c == '.' || c == '/' || c == '\\' );
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+                           const char *accession,
+                           const size_t bufsize )
+{
+    rc_t rc;
+    char * res = calloc( 1, bufsize );
+    if ( res == NULL ) return NULL;
+
+    rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        free( res );
+        return NULL;
+    }
+    else if ( GetRCState( rc ) == rcInsufficient )
+    {
+        free( res );
+        return translate_accession( my_sra_path, accession, bufsize * 2 );
+    }
+    else if ( rc != 0 )
+    {
+        free( res );
+        return NULL;
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+    SRAPath *my_sra_path;
+    rc_t rc = 0;
+
+    if ( strchr ( *path, '/' ) != NULL )
+        return 0;
+
+    rc = SRAPathMake( &my_sra_path, my_dir );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+        {
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "SRAPathMake() failed" );
+        }
+        else
+            rc = 0;
+    }
+    else
+    {
+        if ( !SRAPathTest( my_sra_path, *path ) )
+        {
+            char *buf = translate_accession( my_sra_path, *path, 64 );
+            if ( buf != NULL )
+            {
+                free( (char*)(*path) );
+                *path = buf;
+            }
+        }
+        SRAPathRelease( my_sra_path );
+    }
+    return rc;
+}
+#endif
+
+/* =========================================================================================== */
+
+
+typedef struct fasta_ctx
+{
+    KDirectory *dir;
+    const VDBManager *vdb_mgr;
+    const AlignMgr *almgr;
+} fasta_ctx;
+
+
+static rc_t dump_reference_loop( fasta_options *opts, const ReferenceObj* refobj )
+{
+    rc_t rc = 0;
+    uint8_t * buffer = malloc( opts->width + 2 );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+        LOGERR( klogInt, rc, "allocating reference-buffer failed!" );
+    }
+    else
+    {
+        INSDC_coord_zero pos = opts->from;
+        INSDC_coord_len w = opts->length;
+
+        while ( w > 0 && rc == 0 )
+        {
+            INSDC_coord_len written;
+            INSDC_coord_len to_read = ( w > opts->width ? opts->width : w );
+            rc = ReferenceObj_Read( refobj, pos, to_read, buffer, &written );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ReferenceObj_Read() failed" );
+            else
+            {
+                OUTMSG(( "%.*s\n", written, buffer ));
+                w -= written;
+                pos += written;
+            }
+        }
+        free( buffer );
+    }
+    return rc;
+}
+
+
+static rc_t dump_reference( fasta_options *opts, const ReferenceObj* refobj )
+{
+    const char * name;
+    rc_t rc = ReferenceObj_Name( refobj, &name );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ReferenceObj_Name() failed!" );
+    else
+    {
+        INSDC_coord_len seq_len;
+        rc = ReferenceObj_SeqLength( refobj, &seq_len );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed!" );
+        else
+        {
+            if ( opts->from == 0 )
+            {
+                if ( opts->length == 0 )
+                    opts->length = seq_len;
+            }
+            else
+            {
+                if ( opts->length == 0 )
+                    opts->length = ( seq_len - opts->from );
+            }
+            if ( opts->from >= seq_len )
+            {
+                rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcInvalid );
+                LOGERR( klogInt, rc, "reference-start-point beyond reference-end!" );
+            }
+            else
+            {
+                if ( opts->from + opts->length > seq_len )
+                    opts->length = ( seq_len - opts->from );
+                OUTMSG(( ">%s|from %u|%u bases\n", name, opts->from, opts->from + opts->length -1 ));
+                rc = dump_reference_loop( opts, refobj );
+            }
+        }
+    }
+    return 0;
+}
+
+
+static rc_t dump_all_reference( fasta_options *opts, const ReferenceList* reflist )
+{
+    uint32_t count;
+    rc_t rc = ReferenceList_Count( reflist, &count );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ReferenceList_Count() failed!" );
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const ReferenceObj* refobj;
+            rc = ReferenceList_Get( reflist, &refobj, i );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ReferenceList_Get() failed!" );
+            else
+                rc = dump_reference( opts, refobj );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t foreach_refname( Args * args, fasta_options *opts, fasta_ctx *ctx, const char * path )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPTION_REFNAME, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount( REFNAME ) failed" );
+    }
+    else
+    {
+        const ReferenceList* reflist;
+
+        rc = ReferenceList_MakePath( &reflist, ctx->vdb_mgr, path,
+                        ereferencelist_usePrimaryIds, 0, NULL, 0 );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "ReferenceList_MakePath() failed!" );
+        else
+        {
+            if ( count == 0 )
+            {
+                /* dump all references... */
+                rc = dump_all_reference( opts, reflist );
+            }
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count && rc == 0; ++i )
+                {
+                    const char * refname;
+                    rc = ArgsOptionValue( args, OPTION_REFNAME, 0, (const void **)&refname );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "ArgsOptionValue( REFNAME ) failed" );
+                    }
+                    else
+                    {
+                        const ReferenceObj* refobj;
+                        rc = ReferenceList_Find( reflist, &refobj, refname, string_size( refname ) );
+                        if ( rc != 0 )
+                            LOGERR( klogInt, rc, "ReferenceList_Find() failed" );
+                        else
+                            rc = dump_reference( opts, refobj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t foreach_argument( Args * args, fasta_options *opts, fasta_ctx *ctx )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    else
+    {
+        uint32_t idx;
+        if ( count < 1 )
+        {
+            rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcEmpty );
+            LOGERR( klogInt, rc, "no source-files given!" );
+        }
+        else
+        {
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *param = NULL;
+                rc = ArgsParamValue( args, idx, (const void **)&param );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+                else
+                {
+                    char *path = string_dup_measure ( param, NULL );
+                    if ( path == NULL )
+                    {
+                        rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+                        LOGERR( klogInt, rc, "allocating path to source-file failed!" );
+                    }
+                    else
+                    {
+
+#if TOOLS_USE_SRAPATH != 0
+                        if ( !is_this_a_filesystem_path( path ) )
+                        {
+                            rc = resolve_accession( ctx->dir, &path );
+                        }
+#endif
+
+                        if ( rc == 0 )
+                        {
+                            rc = foreach_refname( args, opts, ctx, path );
+                        }
+                        free( path );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t fasta_main( Args * args, fasta_options *opts )
+{
+    rc_t rc;
+    fasta_ctx ctx;
+
+    memset( &ctx, 0, sizeof ctx );
+    rc = KDirectoryNativeDir( &ctx.dir );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+    else
+    {
+        rc = VDBManagerMakeRead ( &ctx.vdb_mgr, ctx.dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+        else
+        {
+            rc = AlignMgrMakeRead ( &ctx.almgr );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+            else
+            {
+                rc = foreach_argument( args, opts, &ctx );
+                AlignMgrRelease ( ctx.almgr );
+            }
+            VDBManagerRelease( ctx.vdb_mgr );
+        }
+        KDirectoryRelease( ctx.dir );
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+
+rc_t fasta_dump( int argc, char* argv[] )
+{
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    else
+    {
+        Args * args;
+
+        KLogHandlerSetStdErr();
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1,
+            MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ] );
+        if ( rc == 0 )
+        {
+            fasta_options opts;
+            rc = get_fasta_options( args, &opts );
+            if ( rc == 0 )
+            {
+                if ( opts.outfile != NULL )
+                {
+                    rc = set_stdout_to( opts.gzip,
+                                        opts.bzip,
+                                        opts.outfile,
+                                        32 * 1024 );
+                }
+
+                if ( rc == 0 )
+                {
+                    /* ============================== */
+                    rc = fasta_main( args, &opts );
+                    /* ============================== */
+                }
+
+                if ( opts.outfile != NULL )
+                    release_stdout_redirection();
+            }
+            ArgsWhack( args );
+        }
+    }
+    return rc;
+}
+
+
+static const char * outf_usage[]     = { "output to stdout if omitted", NULL };
+static const char * width_usage[]    = { "default = 80 bases", NULL };
+static const char * gzip_usage[]     = { "for file and stdout", NULL };
+static const char * bzip_usage[]     = { "for file and stdout", NULL };
+static const char * refname_usage[]  = { "multiple ref's permitted", NULL };
+static const char * from_usage[]     = { "zero-based", NULL };
+static const char * length_usage[]   = { NULL };
+
+rc_t CC fasta_dump_usage ( const Args * args )
+{
+    rc_t rc;
+    const char * fullname = "fastq-dump";
+    const char * progname = fullname;
+
+    if ( args == NULL )
+        rc = RC( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullname, &progname );
+
+    KOutMsg( "\nUsage:\n"
+              "  %s <path> [options]\n"
+              "\n", progname );
+
+    KOutMsg( "Options:\n" );
+
+    HelpOptionLine( ALIAS_OUTF,    OPTION_OUTF,    "output-file", outf_usage );
+    HelpOptionLine( ALIAS_WIDTH,   OPTION_WIDTH,   "bases per line", width_usage );
+    HelpOptionLine( ALIAS_GZIP,    OPTION_GZIP,    "output gzipped", gzip_usage );
+    HelpOptionLine( ALIAS_BZIP,    OPTION_BZIP,    "output bzipped", bzip_usage );
+    HelpOptionLine( ALIAS_REFNAME, OPTION_REFNAME, "reference to dump", refname_usage );
+    HelpOptionLine( ALIAS_FROM,    OPTION_FROM,    "start-offset", from_usage );
+    HelpOptionLine( ALIAS_LENGTH,  OPTION_LENGTH,  "length of sequence", length_usage );
+
+    HelpOptionsStandard ();
+    HelpVersion ( fullname, KAppVersion() );
+    return rc;
+}
diff --git a/tools/sra-dump/fasta_dump.h b/tools/sra-dump/fasta_dump.h
new file mode 100644
index 0000000..9d3fe8a
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.h
@@ -0,0 +1,36 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_fasta_dump_hdr_
+#define _h_fasta_dump_hdr_
+
+
+bool fasta_dump_requested( int argc, char* argv[] );
+
+rc_t fasta_dump( int argc, char* argv[] );
+
+rc_t CC fasta_dump_usage ( const Args * args );
+
+#endif
diff --git a/tools/sra-dump/fastq.c b/tools/sra-dump/fastq.c
new file mode 100644
index 0000000..7f37f4b
--- /dev/null
+++ b/tools/sra-dump/fastq.c
@@ -0,0 +1,3800 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/container.h>
+#include <klib/text.h>
+#include <kapp/main.h>
+
+#include <sra/sradb.h>
+#include <sra/types.h>
+#include <sra/fastq.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <strtol.h>
+
+#include "core.h"
+#include "debug.h"
+
+#define DATABUFFERINITSIZE 10240
+
+typedef struct TAlignedRegion_struct
+{
+    const char* name;
+    uint32_t name_len;
+    /* 1-based, 0 - means not set */
+    uint64_t from;
+    uint64_t to;
+} TAlignedRegion;
+
+
+typedef struct TMatepairDistance_struct
+{
+    uint64_t from;
+    uint64_t to;
+} TMatepairDistance;
+
+
+struct FastqArgs_struct
+{
+    bool is_platform_cs_native;
+
+    int maxReads;
+    bool skipTechnical;
+
+    uint32_t minReadLen;
+    bool applyClip;
+    bool dumpOrigFmt;
+    bool dumpBase;
+    bool dumpCs;
+    bool readIds;
+    bool SuppressQualForCSKey;      /* added Jan 15th 2014 ( a new fastq-variation! ) */
+    int offset;
+    bool qual_filter;
+    bool qual_filter1;
+    const char* b_deffmt;
+    SLList* b_defline;
+    const char* q_deffmt;
+    SLList* q_defline;
+    const char *desiredCsKey;
+    bool split_files;
+    bool split_3;
+    bool split_spot;
+    uint64_t fasta;
+    const char* file_extension;
+    bool aligned;
+    bool unaligned;
+    TAlignedRegion* alregion;
+    uint32_t alregion_qty;
+    bool mp_dist_unknown;
+    TMatepairDistance* mp_dist;
+    uint32_t mp_dist_qty;
+} FastqArgs;
+
+
+typedef enum DefNodeType_enum
+{
+    DefNode_Unknown = 0,
+    DefNode_Text = 1,
+    DefNode_Optional,
+    DefNode_Accession,
+    DefNode_SpotId,
+    DefNode_SpotName,
+    DefNode_SpotGroup,
+    DefNode_SpotLen,
+    DefNode_ReadId,
+    DefNode_ReadName,
+    DefNode_ReadLen,
+    DefNode_Last
+} DefNodeType;
+
+
+typedef struct DefNode_struct
+{
+    SLNode node;
+    DefNodeType type;
+    union
+    {
+        SLList* optional;
+        char* text;
+    } data;
+} DefNode;
+
+
+typedef struct DeflineData_struct
+{
+    rc_t rc;
+    bool optional;
+    union
+    {
+        spotid_t* id;
+        struct
+        {
+            const char* s;
+            size_t sz;
+        } str;
+        uint32_t* u32;
+    } values[ DefNode_Last ];
+    char* buf;
+    size_t buf_sz;
+    size_t* writ;
+} DeflineData;
+
+
+static bool CC Defline_Builder( SLNode *node, void *data )
+{
+    DefNode* n = ( DefNode* )node;
+    DeflineData* d = ( DeflineData* )data;
+    char s[ 256 ];
+    size_t w;
+    int x = 0;
+
+    s[ 0 ] = '\0';
+    switch ( n->type )
+    {
+        case DefNode_Optional :
+            d->optional = true;
+            w = *d->writ;
+            *d->writ = 0;
+            SLListDoUntil( n->data.optional, Defline_Builder, data );
+            x = ( *d->writ == 0 ) ? 0 : 1;
+            d->optional = false;
+            *d->writ = w;
+            if ( x > 0 )
+            {
+                SLListDoUntil( n->data.optional, Defline_Builder, data );
+            }
+            break;
+
+        case DefNode_Text :
+            if ( d->optional )
+            {
+                break;
+            }
+            d->values[n->type].str.s = n->data.text;
+            d->values[n->type].str.sz = strlen( n->data.text );
+
+        case DefNode_Accession :
+        case DefNode_SpotName :
+        case DefNode_SpotGroup :
+        case DefNode_ReadName :
+            if ( d->values[n->type].str.s != NULL )
+            {
+                x = d->values[ n->type ].str.sz;
+                if ( x < sizeof( s ) )
+                {
+                    strncpy( s, d->values[ n->type ].str.s, x );
+                    s[ x ] = '\0';
+                    *d->writ = *d->writ + x;
+                }
+                else
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+                }
+            }
+            break;
+
+        case DefNode_SpotId :
+            if ( d->values[ n->type ].id != NULL &&
+                ( !d->optional || *d->values[ n->type ].id > 0 ) )
+            {
+                x = snprintf( s, sizeof( s ), "%ld", *d->values[ n->type ].id );
+                if ( x < 0 || x >= sizeof( s ) )
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
+                    *d->writ = *d->writ + x;
+                }
+            }
+            break;
+
+        case DefNode_ReadId :
+        case DefNode_SpotLen :
+        case DefNode_ReadLen :
+            if ( d->values[ n->type] .u32 != NULL &&
+                 ( !d->optional || *d->values[ n->type ].u32 > 0 ) )
+            {
+                x = snprintf( s, sizeof( s ), "%u", *d->values[ n->type ].u32 );
+                if ( x < 0 || x >= sizeof( s ) )
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
+                    *d->writ = *d->writ + x;
+                }
+            }
+            break;
+
+        default:
+            d->rc = RC( rcExe, rcNamelist, rcExecuting, rcId, rcInvalid );
+    } /* switch */
+
+    if ( d->rc == 0 && !d->optional && n->type != DefNode_Optional )
+    {
+        if ( *d->writ < d->buf_sz )
+        {
+            strcat( d->buf, s );
+        }
+        else
+        {
+            d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+        }
+    }
+    return d->rc != 0;
+}
+
+
+static rc_t Defline_Bind( DeflineData* data, const char* accession,
+            spotid_t* spotId, const char* spot_name, size_t spotname_sz,
+            const char* spot_group, size_t sgrp_sz, uint32_t* spot_len,
+            uint32_t* readId, const char* read_name, INSDC_coord_len rlabel_sz,
+            INSDC_coord_len* read_len )
+{
+    if ( data == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
+    }
+    data->values[ DefNode_Unknown ].str.s = NULL;
+    data->values[ DefNode_Text ].str.s = NULL;
+    data->values[ DefNode_Optional ].str.s = NULL;
+    data->values[ DefNode_Accession ].str.s = accession;
+    data->values[ DefNode_Accession ].str.sz = strlen( accession );
+    data->values[ DefNode_SpotId ].id = spotId;
+    data->values[ DefNode_SpotName ].str.s = spot_name;
+    data->values[ DefNode_SpotName ].str.sz = spotname_sz;
+    data->values[ DefNode_SpotGroup ].str.s = spot_group;
+    data->values[ DefNode_SpotGroup ].str.sz = sgrp_sz;
+    data->values[ DefNode_SpotLen ].u32 = spot_len;
+    data->values[ DefNode_ReadId ].u32 = readId;
+    data->values[ DefNode_ReadName ].str.s = read_name;
+    data->values[ DefNode_ReadName ].str.sz = rlabel_sz;
+    data->values[ DefNode_ReadLen ].u32 = read_len;
+    return 0;
+}
+
+
+static rc_t Defline_Build( const SLList* def, DeflineData* data, char* buf,
+                           size_t buf_sz, size_t* writ )
+{
+    if ( data == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
+    }
+
+    data->rc = 0;
+    data->optional = false;
+    data->buf = buf;
+    data->buf_sz = buf_sz;
+    data->writ = writ;
+
+    data->buf[ 0 ] = '\0';
+    *data->writ = 0;
+
+    SLListDoUntil( def, Defline_Builder, data );
+    return data->rc;
+}
+
+
+static rc_t DeflineNode_Add( SLList* list, DefNode** node,
+                            DefNodeType type, const char* text, size_t text_sz )
+{
+    rc_t rc = 0;
+
+    *node = calloc( 1, sizeof( **node ) );
+    if ( *node == NULL )
+    {
+        rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+    }
+    else if ( type == DefNode_Text && ( text == NULL || text_sz == 0 ) )
+    {
+        rc = RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
+    }
+    else
+    {
+        ( *node )->type = type;
+        if ( type == DefNode_Text )
+        {
+            ( *node )->data.text = string_dup( text, text_sz );
+            if ( ( *node )->data.text == NULL )
+            {
+                rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+                free( *node );
+            }
+        }
+        else if ( type == DefNode_Optional )
+        {
+            ( *node )->data.optional = malloc( sizeof( SLList ) );
+            if ( ( *node )->data.optional == NULL )
+            {
+                rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+                free( *node );
+            }
+            else
+            {
+                SLListInit( ( *node )->data.optional );
+            }
+        }
+        if ( rc == 0 )
+        {
+            SLListPushTail( list, &( *node )->node );
+        }
+    }
+    return rc;
+}
+
+
+static void Defline_Release( SLList* list );
+
+
+static void CC DeflineNode_Whack( SLNode* node, void* data )
+{
+    if ( node != NULL )
+    {
+        DefNode* n = (DefNode*)node;
+        if ( n->type == DefNode_Text )
+        {
+            free( n->data.text );
+        }
+        else if ( n->type == DefNode_Optional )
+        {
+            Defline_Release( n->data.optional );
+        }
+        free( node );
+    }
+}
+
+
+static void Defline_Release( SLList* list )
+{
+    if ( list != NULL )
+    {
+        SLListForEach( list, DeflineNode_Whack, NULL );
+        free( list );
+    }
+}
+
+
+#if _DEBUGGING
+static void CC Defline_Dump( SLNode* node, void* data )
+{
+    DefNode* n = ( DefNode* )node;
+    const char* s = NULL, *t;
+    if ( n->type == DefNode_Text )
+    {
+        s = n->data.text;
+    }
+    switch ( n->type )
+    {
+        case DefNode_Unknown :      t = "Unknown";   break;
+        case DefNode_Text :         t = "Text";      break;
+        case DefNode_Optional :     t = "Optional";  break;
+        case DefNode_Accession :    t = "Accession"; break;
+        case DefNode_SpotId :       t = "SpotId";    break;
+        case DefNode_SpotName :     t = "SpotName";  break;
+        case DefNode_SpotGroup :    t = "SpotGroup"; break;
+        case DefNode_SpotLen :      t = "SpotLen";   break;
+        case DefNode_ReadId :       t = "ReadId";    break;
+        case DefNode_ReadName :     t = "ReadName";  break;
+        case DefNode_ReadLen :      t = "ReadLen";   break;
+        default :  t = "ERROR";
+    }
+
+    SRA_DUMP_DBG( 3, ( "%s type %s", data, t ) );
+    if ( s )
+    {
+        SRA_DUMP_DBG( 3, ( ": '%s'", s ) );
+    }
+    SRA_DUMP_DBG( 3, ( "\n" ) );
+    if ( n->type == DefNode_Optional )
+    {
+        SLListForEach( n->data.optional, Defline_Dump, "+-->" );
+    }
+}
+#endif
+
+
+static rc_t Defline_Parse( SLList** def, const char* line )
+{
+    rc_t rc = 0;
+    size_t i, sz, text = 0, opt_vars = 0;
+    DefNode* node;
+    SLList* list = NULL;
+
+    if ( def == NULL || line == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
+    }
+    *def = malloc( sizeof( SLList ) );
+    if ( *def  == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+    }
+    sz = strlen( line );
+    list = *def;
+    SLListInit( list );
+
+    for ( i = 0; rc == 0 && i < sz; i++ )
+    {
+        if ( line[ i ] == '[' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == '[' )
+            {
+                i++;
+            }
+            else
+            {
+                if ( list != *def )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+                }
+                else if ( i > text )
+                {
+                    rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
+                }
+                if ( rc == 0 )
+                {
+                    rc = DeflineNode_Add( list, &node, DefNode_Optional, NULL, 0 );
+                    if ( rc == 0 )
+                    {
+                        opt_vars = 0;
+                        list = node->data.optional;
+                        text = i + 1;
+                    }
+                }
+            }
+        }
+        else if ( line[ i ] == ']' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == ']' )
+            {
+                i++;
+            }
+            else
+            {
+                if ( list == *def )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+                }
+                else
+                {
+                    if ( opt_vars < 1 )
+                    {
+                        rc = RC( rcExe, rcNamelist, rcConstructing, rcConstraint, rcEmpty );
+                    }
+                    else if ( i > text )
+                    {
+                        rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
+                    }
+                    list = *def;
+                    text = i + 1;
+                }
+            }
+        }
+        else if ( line[ i ] == '$' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == '$' )
+            {
+                i++;
+            }
+            else
+            {
+                DefNodeType type = DefNode_Unknown;
+                switch ( line[ ++i] )
+                {
+                    case 'a' :
+                        switch( line[ ++i ] )
+                        {
+                            case 'c': type = DefNode_Accession; break;
+                        }
+                        break;
+
+                    case 's' :
+                        switch ( line[ ++i ] )
+                        {
+                            case 'i': type = DefNode_SpotId; break;
+                            case 'n': type = DefNode_SpotName; break;
+                            case 'g': type = DefNode_SpotGroup; break;
+                            case 'l': type = DefNode_SpotLen; break;
+                        }
+                        break;
+                    case 'r' :
+                        switch( line[ ++i ] )
+                        {
+                            case 'i': type = DefNode_ReadId; break;
+                            case 'n': type = DefNode_ReadName; break;
+                            case 'l': type = DefNode_ReadLen; break;
+                        }
+                        break;
+                }
+                if ( type == DefNode_Unknown )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcName, rcUnrecognized );
+                }
+                else
+                {
+                    if ( ( i - 2 ) > text )
+                    {
+                        rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text - 2 );
+                    }
+                    if ( rc == 0 )
+                    {
+                        rc = DeflineNode_Add( list, &node, type, NULL, 0 );
+                        if ( rc == 0 )
+                        {
+                            opt_vars++;
+                            text = i + 1;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        if ( list != *def )
+        {
+            rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcInvalid );
+        }
+        else if ( i > text )
+        {
+            rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text );
+        }
+    }
+    if ( rc != 0 )
+    {
+        i = i < sz ? i : sz;
+        PLOGERR( klogErr, ( klogErr, rc, "$(l1) -->$(c)<-- $(l2)",
+                 "l1=%.*s,c=%c,l2=%.*s", i - 1, line, line[ i - 1 ], sz - i, &line[ i ] ) );
+    }
+#if _DEBUGGING
+    SRA_DUMP_DBG( 3, ( "| defline\n" ) );
+    SLListForEach( *def, Defline_Dump, "+->" );
+#endif
+    return rc;
+}
+
+/* ### ALIGNMENT_COUNT based filtering ##################################################### */
+
+typedef struct AlignedFilter_struct
+{
+    const SRAColumn* col;
+    uint64_t rejected_reads;
+    bool aligned;
+    bool unaligned;
+} AlignedFilter;
+
+
+static rc_t AlignedFilter_GetKey( const SRASplitter* cself, const char** key,
+                                  spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    AlignedFilter* self = ( AlignedFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        *key = "";
+        if ( self->col != NULL )
+        {
+            const uint8_t* ac = NULL;
+            bitsz_t o = 0, sz = 0;
+            rc = SRAColumnRead( self->col, spot, (const void **)&ac, &o, &sz );
+            if ( rc == 0 && sz > 0 )
+            {
+                sz = sz / 8 / sizeof( *ac );
+                for( o = 0; o < sz; o++ )
+                {
+                    if ( ( self->aligned   && !self->unaligned && ac[ o ] == 0 ) ||
+                         ( self->unaligned && !self->aligned   && ac[ o ] != 0 ) )
+                    {
+                        unset_readmask( readmask, o );
+                        self->rejected_reads ++;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t AlignedFilter_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    AlignedFilter* self = ( AlignedFilter* )cself;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        if ( self->rejected_reads > 0 && !g_legacy_report )
+            rc = KOutMsg( "Rejected %lu READS because of aligned/unaligned filter\n", self->rejected_reads );
+    }
+    return rc;
+}
+
+typedef struct AlignedFilterFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col;
+    bool aligned;
+    bool unaligned;
+} AlignedFilterFactory;
+
+
+static rc_t AlignedFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "ALIGNMENT_COUNT", vdb_uint8_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                LOGMSG( klogWarn, "Column ALIGNMENT_COUNT was not found, param ignored" );
+                rc = 0;
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t AlignedFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignedFilter ),
+                               AlignedFilter_GetKey, NULL, NULL, AlignedFilter_Release );
+        if ( rc == 0 )
+        {
+            AlignedFilter * filter = ( AlignedFilter * )( * splitter );
+            filter->col = self->col;
+            filter->aligned = self->aligned;
+            filter->unaligned = self->unaligned;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void AlignedFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+        SRAColumnRelease( self->col );
+    }
+}
+
+
+static rc_t AlignedFilterFactory_Make( const SRASplitterFactory** cself,
+                    const SRATable* table, bool aligned, bool unaligned )
+{
+    rc_t rc = 0;
+    AlignedFilterFactory* obj = NULL;
+
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                 AlignedFilterFactory_Init,
+                                 AlignedFilterFactory_NewObj,
+                                 AlignedFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignedFilterFactory* )*cself;
+            obj->table = table;
+            obj->aligned = aligned;
+            obj->unaligned = unaligned;
+        }
+    }
+    return rc;
+}
+
+
+/* ### alignment region filtering ##################################################### */
+
+typedef struct AlignRegionFilter_struct
+{
+    const SRAColumn* col_pos;
+    const SRAColumn* col_name;
+    const SRAColumn* col_seqid;
+    const TAlignedRegion* alregion;
+    uint64_t rejected_spots;
+    uint32_t alregion_qty;
+} AlignRegionFilter;
+
+
+static rc_t AlignRegionFilter_GetKey( const SRASplitter* cself, const char** key,
+                                      spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    AlignRegionFilter* self = ( AlignRegionFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        *key = "";
+        reset_readmask( readmask );
+        if ( self->col_name || self->col_seqid )
+        {
+            bool match = false;
+            uint32_t i;
+            const char* nm, *si;
+            bitsz_t o, nm_len = 0, si_len = 0;
+
+            if ( self->col_name )
+            {
+                rc = SRAColumnRead( self->col_name, spot, (const void **)&nm, &o, &nm_len );
+                if ( rc == 0 && nm_len > 0 )
+                    nm_len /= 8;
+            }
+            if ( rc == 0 && self->col_seqid )
+            {
+                rc = SRAColumnRead( self->col_seqid, spot, (const void **)&si, &o, &si_len );
+                if ( rc == 0 && si_len > 0 )
+                    si_len /= 8;
+            }
+            for ( i = 0; rc == 0 && i < self->alregion_qty; i++ )
+            {
+                if ( ( self->alregion[i].name_len == nm_len && 
+                       strncasecmp( self->alregion[ i ].name, nm, nm_len ) == 0 ) ||
+                     ( self->alregion[i].name_len == si_len && 
+                       strncasecmp(self->alregion[i].name, si, si_len) == 0 ) )
+                {
+                    if ( self->col_pos )
+                    {
+                        INSDC_coord_zero* pos;
+                        bitsz_t nreads, j;
+                        rc = SRAColumnRead( self->col_pos, spot, ( const void ** )&pos, &o, &nreads );
+                        if ( rc == 0 && nreads > 0 )
+                        {
+                            nreads = nreads / sizeof(*pos) / 8;
+                            for ( i = 0; !match && i < self->alregion_qty; i++ )
+                            {
+                                for ( j = 0; j < nreads; j++ )
+                                {
+                                    if ( self->alregion[i].from <= pos[j] &&
+                                         pos[j] <= self->alregion[i].to )
+                                    {
+                                        match = true;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        match = true;
+                    }
+                    break;
+                }
+            }
+            if ( !match )
+            {
+                clear_readmask( readmask );
+                self->rejected_spots ++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t AlignRegionFilter_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    AlignRegionFilter* self = ( AlignRegionFilter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        if ( self->rejected_spots > 0 && !g_legacy_report )
+            rc = KOutMsg( "Rejected %lu SPOTS because of AlignRegionFilter\n", self->rejected_spots );
+    }
+    return rc;
+}
+
+
+typedef struct AlignRegionFilterFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col_pos;
+    const SRAColumn* col_name;
+    const SRAColumn* col_seqid;
+    TAlignedRegion* alregion;
+    uint32_t alregion_qty;
+} AlignRegionFilterFactory;
+
+
+static rc_t AlignRegionFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+
+#define COLNF(v,n,t) (!(rc == 0 && ((rc = SRATableOpenColumnRead(self->table, &v, n, t)) == 0 || \
+                       GetRCState(rc) == rcExists)) && GetRCState(rc) == rcNotFound)
+
+        if ( COLNF( self->col_name, "REF_NAME", vdb_ascii_t ) )
+        {
+            SRAColumnRelease( self->col_name );
+            self->col_name = NULL;
+            rc = 0;
+        }
+
+        if ( COLNF( self->col_seqid, "REF_SEQ_ID", vdb_ascii_t ) )
+        {
+            SRAColumnRelease( self->col_seqid );
+            self->col_seqid = NULL;
+            rc = 0;
+        }
+
+        if ( self->col_name == NULL && self->col_seqid == NULL )
+        {
+            LOGMSG( klogWarn, "None of columns REF_NAME or REF_SEQ_ID was found, no region filtering" );
+        }
+        else
+        {
+            bool range_used = false;
+            uint32_t i;
+            /* see if there are any actual ranges set and open col only if yes */
+            for ( i = 0; i < self->alregion_qty; i++ )
+            {
+                if ( self->alregion[ i ].from != 0 || self->alregion[ i ].to != 0 )
+                {
+                    range_used = true;
+                    break;
+                }
+            }
+            if ( range_used )
+            {
+                if ( COLNF( self->col_pos, "REF_POS", "INSDC:coord:zero" ) )
+                {
+                    LOGMSG( klogWarn, "Column REF_POS is not found, no region position filtering" );
+                    rc = 0;
+                }
+                else
+                {
+                    for ( i = 0; i < self->alregion_qty; i++ )
+                    {
+                        if ( self->alregion[ i ].from > 0 )
+                        {
+                            self->alregion[ i ].from--;
+                        }
+                        if ( self->alregion[ i ].to > 0 )
+                        {
+                            self->alregion[ i ].to--;
+                        }
+                        else if ( self->alregion[ i ].to == 0 )
+                        {
+                            self->alregion[ i ].to = ~0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+#undef COLNF
+    return rc;
+}
+
+
+static rc_t AlignRegionFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignRegionFilter ),
+                               AlignRegionFilter_GetKey, NULL, NULL, AlignRegionFilter_Release );
+        if ( rc == 0 )
+        {
+            AlignRegionFilter * filter = ( AlignRegionFilter * )( * splitter );
+            filter->col_pos = self->col_pos;
+            filter->col_name = self->col_name;
+            filter->col_seqid = self->col_seqid;
+            filter->alregion = self->alregion;
+            filter->alregion_qty = self->alregion_qty;
+            filter->rejected_spots = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void AlignRegionFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
+        SRAColumnRelease( self->col_pos );
+        SRAColumnRelease( self->col_name );
+        SRAColumnRelease( self->col_seqid );
+    }
+}
+
+
+static rc_t AlignRegionFilterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, TAlignedRegion* alregion, uint32_t alregion_qty )
+{
+    rc_t rc = 0;
+    AlignRegionFilterFactory* obj = NULL;
+
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      AlignRegionFilterFactory_Init,
+                                      AlignRegionFilterFactory_NewObj,
+                                      AlignRegionFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignRegionFilterFactory* )*cself;
+            obj->table = table;
+            obj->alregion = alregion;
+            obj->alregion_qty = alregion_qty;
+        }
+    }
+    return rc;
+}
+
+/* ### alignment meta-pair distance filtering ##################################################### */
+
+typedef struct AlignPairDistanceFilter_struct
+{
+    const SRAColumn* col_tlen;
+    const TMatepairDistance* mp_dist;
+    uint64_t rejected_reads;
+    bool mp_dist_unknown;
+    uint32_t mp_dist_qty;
+} AlignPairDistanceFilter;
+
+
+static rc_t AlignPairDistanceFilter_GetKey( const SRASplitter* cself,
+                const char** key, spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    AlignPairDistanceFilter* self = ( AlignPairDistanceFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        *key = "";
+        reset_readmask( readmask );
+        if ( self->col_tlen )
+        {
+            uint32_t i, j;
+            bitsz_t o, nreads;
+            int32_t* tlen;
+            rc = SRAColumnRead( self->col_tlen, spot, (const void **)&tlen, &o, &nreads );
+            if ( rc == 0 )
+            {
+                nreads = nreads / sizeof(*tlen) / 8;
+                for ( i = 0; i < self->mp_dist_qty; i++ )
+                {
+                    for ( j = 0; j < nreads; j++ )
+                    {
+                        if ( ( tlen[ j ] == 0 && !self->mp_dist_unknown) ||
+                             ( tlen[ j ] != 0 && 
+                               ( tlen[ j ] < self->mp_dist[ i ].from || self->mp_dist[ i ].to < tlen[ j ] ) ) )
+                        {
+                            unset_readmask( readmask, j );
+                            self->rejected_reads ++;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t AlignPairDistanceFilter_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    AlignPairDistanceFilter* self = ( AlignPairDistanceFilter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        if ( self->rejected_reads > 0 && !g_legacy_report )
+            rc = KOutMsg( "Rejected %lu READS because of AlignPairDistanceFilter\n", self->rejected_reads );
+    }
+    return rc;
+}
+
+typedef struct AlignPairDistanceFilterFactory_struct
+{
+    const SRATable* table;
+    const SRAColumn* col_tlen;
+    bool mp_dist_unknown;
+    TMatepairDistance* mp_dist;
+    uint32_t mp_dist_qty;
+} AlignPairDistanceFilterFactory;
+
+
+static rc_t AlignPairDistanceFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col_tlen, "TEMPLATE_LEN", "I32" );
+        if( !( rc == 0 || GetRCState( rc ) == rcExists ) && GetRCState( rc ) == rcNotFound )
+        {
+            LOGMSG( klogWarn, "Column TLEN was not found, no distance filtering" );
+            self->col_tlen = NULL;
+            rc = 0;
+        }
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < self->mp_dist_qty; i++ )
+            {
+                if ( self->mp_dist[ i ].to == 0 )
+                {
+                    self->mp_dist[ i ].to = ~0;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t AlignPairDistanceFilterFactory_NewObj( const SRASplitterFactory* cself,
+                                                   const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignPairDistanceFilter ),
+                               AlignPairDistanceFilter_GetKey, NULL, NULL, AlignPairDistanceFilter_Release );
+        if ( rc == 0 )
+        {
+            AlignPairDistanceFilter * filter = ( AlignPairDistanceFilter * )( * splitter );
+            filter->col_tlen = self->col_tlen;
+            filter->mp_dist_unknown = self->mp_dist_unknown;
+            filter->mp_dist = self->mp_dist;
+            filter->mp_dist_qty = self->mp_dist_qty;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void AlignPairDistanceFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+        SRAColumnRelease( self->col_tlen );
+    }
+}
+
+
+static rc_t AlignPairDistanceFilterFactory_Make( const SRASplitterFactory** cself,
+        const SRATable* table, bool mp_dist_unknown, TMatepairDistance* mp_dist, uint32_t mp_dist_qty )
+{
+    rc_t rc = 0;
+    AlignPairDistanceFilterFactory* obj = NULL;
+
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      AlignPairDistanceFilterFactory_Init,
+                                      AlignPairDistanceFilterFactory_NewObj,
+                                      AlignPairDistanceFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignPairDistanceFilterFactory* ) *cself;
+            obj->table = table;
+            obj->mp_dist_unknown = mp_dist_unknown;
+            obj->mp_dist = mp_dist;
+            obj->mp_dist_qty = mp_dist_qty;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ read type (bio/tech) filter ============================ */
+
+typedef struct FastqBioFilter_struct
+{
+    const FastqReader* reader;
+    uint64_t rejected_reads;
+} FastqBioFilter;
+
+
+/* filter out non-bio reads */
+static rc_t FastqBioFilter_GetKey( const SRASplitter* cself, const char** key,
+                                   spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqBioFilter* self = ( FastqBioFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0;
+
+        *key = NULL;
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            if ( rc == 0 )
+            {
+                uint32_t readId;
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                for (readId = 0; rc == 0 && readId < num_reads; readId++ )
+                {
+                    if ( isset_readmask( readmask, readId ) )
+                    {
+                        SRAReadTypes read_type;
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, &read_type,
+                                                       NULL, NULL, NULL, NULL);
+                        if ( rc == 0 )
+                        {
+                            if ( !( read_type & SRA_READ_TYPE_BIOLOGICAL ) )
+                            {
+                                unset_readmask( readmask, readId );
+                                self->rejected_reads ++;
+                            }
+                            else
+                            {
+                                SRA_DUMP_DBG( 3, ( " %u", readId ) );
+                            }
+                        }
+                    }
+                }
+                *key = "";
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqBioFilter_Release( const SRASplitter * cself )
+{
+    rc_t rc = 0;
+    FastqBioFilter * self = ( FastqBioFilter * )cself;
+
+    if ( self == NULL )
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    else
+    {
+        if ( self->rejected_reads > 0 && !g_legacy_report )
+            rc = KOutMsg( "Rejected %lu READS because of filtering out non-biological READS\n", self->rejected_reads );
+    }
+    return rc;
+}
+
+
+typedef struct FastqBioFilterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+} FastqBioFilterFactory;
+
+
+static rc_t FastqBioFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                              FastqArgs.offset, '\0', 0, 0) ;
+    }
+    return rc;
+}
+
+
+static rc_t FastqBioFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqBioFilter ),
+                               FastqBioFilter_GetKey, NULL, NULL, FastqBioFilter_Release );
+        if ( rc == 0 )
+        {
+            FastqBioFilter * filter = ( FastqBioFilter * )( * splitter );
+            filter->reader = self->reader;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void FastqBioFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
+    }
+}
+
+
+static rc_t FastqBioFilterFactory_Make( const SRASplitterFactory** cself,
+                        const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqBioFilterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqBioFilterFactory_Init,
+                                      FastqBioFilterFactory_NewObj,
+                                      FastqBioFilterFactory_Release );
+
+        if ( rc == 0 )
+        {
+            obj = ( FastqBioFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ number of reads filter ============================ */
+
+typedef struct FastqRNumberFilter_struct
+{
+    const FastqReader* reader;
+    uint64_t rejected_reads;
+} FastqRNumberFilter;
+
+
+static rc_t FastqRNumberFilter_GetKey( const SRASplitter* cself, const char** key,
+                                       spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqRNumberFilter* self = ( FastqRNumberFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0;
+
+        *key = NULL;
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            if ( rc == 0 )
+            {
+                int readId, q;
+
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                for ( readId = 0, q = 0; readId < num_reads; readId++ )
+                {
+                    if ( isset_readmask( readmask, readId ) )
+                    {
+                        if ( ++q > FastqArgs.maxReads )
+                        {
+                            unset_readmask( readmask, 1 << readId );
+                        }
+                        else
+                        {
+                            SRA_DUMP_DBG( 3, ( " %u", readId ) );
+                        }
+                    }
+                }
+                *key = "";
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqRNumberFilter_Release( const SRASplitter* cself )
+{
+    rc_t rc = 0;
+    FastqRNumberFilter * self = ( FastqRNumberFilter * )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        if ( self->rejected_reads > 0 && !g_legacy_report )
+            rc = KOutMsg( "Rejected %lu READS because of max. number of READS = %u\n", self->rejected_reads, FastqArgs.maxReads );
+    }
+    return rc;
+}
+
+typedef struct FastqRNumberFilterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+} FastqRNumberFilterFactory;
+
+
+static rc_t FastqRNumberFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
+    }
+    return rc;
+}
+
+
+static rc_t FastqRNumberFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqRNumberFilter ),
+                               FastqRNumberFilter_GetKey, NULL, NULL, FastqRNumberFilter_Release );
+        if ( rc == 0 )
+        {
+            FastqRNumberFilter * filter = ( FastqRNumberFilter * )( * splitter );
+            filter->reader = self->reader;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void FastqRNumberFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
+    }
+}
+
+
+static rc_t FastqRNumberFilterFactory_Make( const SRASplitterFactory** cself,
+                                const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqRNumberFilterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqRNumberFilterFactory_Init,
+                                      FastqRNumberFilterFactory_NewObj,
+                                      FastqRNumberFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqRNumberFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+/* ============== FASTQ quality filter ============================ */
+
+typedef struct FastqQFilter_struct
+{
+    const FastqReader * reader;
+    KDataBuffer * buffer_for_read_column;
+    KDataBuffer * buffer_for_quality;
+    uint64_t rejected_spots;
+    uint64_t rejected_reads;
+} FastqQFilter;
+
+
+#define MIN_QUAL_FOR_RULE_3 ( 33 + 2 )
+
+static bool QFilter_Test_new( const char * read, const char * quality, uint32_t readlen, uint32_t minlen, char N_char )
+{
+    uint32_t idx, cnt, cnt1, start;
+    char b0;
+
+    /* 1st criteria : READ has to be longer than the minlen */
+    if ( readlen < minlen ) return false;
+
+    /* 2nd criteria : READ does not contain any N's in the first minlen bases */
+    for ( idx = 0; idx < minlen; ++idx )
+    {
+        if ( read[ idx ] == N_char ) return false;
+    }
+
+    start = ( N_char == '.' ) ? 1 : 0;
+    /* 3rd criteria : QUALITY values are all 2 or higher in the first minlen values */
+    for ( idx = start; idx < minlen; ++idx )
+    {
+        if ( quality[ idx ] < MIN_QUAL_FOR_RULE_3 ) return false;
+    }
+
+    /* 4th criteria : READ contains more than one type of base in the first minlen bases */
+    b0 = read[ 0 ];
+    for ( idx = 1, cnt = 1; idx < minlen; ++idx )
+    {
+        if ( read[ idx ] == b0 ) cnt++;
+    }
+    if ( cnt == minlen ) return false;
+
+    /* 5th criteria : READ does not contain more than 50% N's in its whole length */
+    cnt = ( readlen / 2 );
+    for ( idx = 0, cnt1 = 0; idx < readlen; ++idx )
+    {
+        if ( read[ idx ] == N_char ) cnt1++;
+    }
+    if ( cnt1 > cnt ) return false;
+
+    /* 6th criteria : READ does not contain values other than ACGTN in its whole length */
+    if ( N_char != '.' )
+    {
+        for ( idx = 0; idx < readlen; ++idx )
+        {
+            if ( ! ( ( read[ idx ] == 'A' ) || ( read[ idx ] == 'C' ) || ( read[ idx ] == 'G' ) ||
+                    ( read[ idx ] == 'T' ) || ( read[ idx ] == 'N' ) ) )
+                return false;
+        }
+    }
+
+    return true;
+}
+
+
+static bool QFilter_Test_old( const char * read, uint32_t readlen, bool cs_native )
+{
+    static char const* const baseStr = "NNNNNNNNNN";
+    static char const* const colorStr = "..........";
+    static const uint32_t strLen = 10;
+    uint32_t xLen = readlen < strLen ? readlen : strLen;
+
+    if ( cs_native )
+    {
+        if ( strncmp( &read[ 1 ], colorStr, xLen ) == 0 || strcmp( &read[ readlen - xLen + 1 ], colorStr ) == 0 )
+            return false;
+    }
+    else
+    {
+        if ( strncmp( read, baseStr, xLen ) == 0 || strcmp( &read[ readlen - xLen ], baseStr ) == 0 )
+            return false;
+    }
+    return true;
+}
+
+
+/* filter out reads by leading/trialing quality */
+static rc_t FastqQFilter_GetKey( const SRASplitter* cself, const char** key,
+                                 spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqQFilter* self = ( FastqQFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0, spot_len;
+
+        *key = NULL;
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+            if ( rc == 0 )
+            {
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                if ( FastqArgs.split_spot )
+                {
+                    uint32_t readId;
+                    INSDC_coord_len read_len;
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        if ( isset_readmask( readmask, readId ) )
+                        {
+                            rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+                            if ( rc == 0 )
+                            {
+                                /* FastqReaderBase() in libsra! libs/sra/fastq.h 
+                                   IF_BUF ... very, very bad macro defined in factory.h !!
+                                   it combines reading from table with resizing of a KDatabuffer in a loop until rc == 0 is reached!
+                                */
+                                IF_BUF( ( FastqReaderBase( self->reader, readId + 1,
+                                          self->buffer_for_read_column->base,
+                                          KDataBufferBytes( self->buffer_for_read_column ), NULL) ),
+                                          self->buffer_for_read_column, read_len )
+                                {
+                                    const char * b = self->buffer_for_read_column->base;
+                                    bool filter_passed = true;
+
+                                    if ( FastqArgs.qual_filter1 )
+                                    {
+                                        if ( quality_N_limit > 0 )
+                                        {
+                                            IF_BUF( ( FastqReaderQuality( self->reader, readId + 1,
+                                                      self->buffer_for_quality->base,
+                                                      KDataBufferBytes( self->buffer_for_quality ), NULL) ),
+                                                      self->buffer_for_quality, read_len )
+                                            {
+                                                const char * q = self->buffer_for_quality->base;
+                                                char N_char = FastqArgs.is_platform_cs_native ? '.' : 'N';
+                                                filter_passed = QFilter_Test_new( b, q, read_len, quality_N_limit, N_char );
+                                            }
+                                        }
+                                    }
+                                    else
+                                        filter_passed = QFilter_Test_old( b, read_len, FastqArgs.is_platform_cs_native );
+
+                                    if ( filter_passed )
+                                        SRA_DUMP_DBG( 3, ( " %u", readId ) );
+                                    else
+                                    {
+                                        unset_readmask( readmask, readId );
+                                        /* READ did not pass filter */
+                                        self->rejected_reads ++;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    *key = "";
+                }
+                else
+                {
+                    IF_BUF( ( FastqReaderBase( self->reader, 0, self->buffer_for_read_column->base,
+                              KDataBufferBytes( self->buffer_for_read_column ), NULL ) ), self->buffer_for_read_column, spot_len )
+                    {
+                        const char* b = self->buffer_for_read_column->base;
+                        bool filter_passed = true;
+
+                        if ( FastqArgs.qual_filter1 )
+                        {
+                            if ( quality_N_limit > 0 )
+                            {
+                                IF_BUF( ( FastqReaderQuality( self->reader, 0, self->buffer_for_quality->base,
+                                          KDataBufferBytes( self->buffer_for_quality ), NULL ) ), self->buffer_for_quality, spot_len )
+                                {
+                                    const char * q = self->buffer_for_quality->base;
+                                    char N_char = FastqArgs.is_platform_cs_native ? '.' : 'N';
+                                    filter_passed = QFilter_Test_new( b, q, spot_len, quality_N_limit, N_char );
+                                }
+                            }
+                        }
+                        else
+                            filter_passed = QFilter_Test_old( b, spot_len, FastqArgs.is_platform_cs_native );
+
+                        if ( filter_passed )
+                        {
+                            *key = "";
+                            SRA_DUMP_DBG( 3, ( " whole spot" ) );
+                        }
+                        else
+                        {
+                            /* SPOT did not pass filter */
+                            self->rejected_spots ++;
+                        }
+                    }
+                }
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqQFilter_Release( const SRASplitter * cself )
+{
+    rc_t rc = 0;
+    FastqQFilter* self = ( FastqQFilter* )cself;
+
+    if ( self == NULL )
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    else if ( !g_legacy_report )
+    {
+        if ( self->rejected_reads > 0 )
+            rc = KOutMsg( "Rejected %lu READS because of Quality-Filtering\n", self->rejected_reads );
+        if ( rc == 0 && self->rejected_spots > 0 )
+            rc = KOutMsg( "Rejected %lu SPOTS because of Quality-Filtering\n", self->rejected_spots );
+
+    }
+    return rc;
+}
+
+
+typedef struct FastqQFilterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+    KDataBuffer kdbuf;
+    KDataBuffer kdbuf2;
+} FastqQFilterFactory;
+
+
+static rc_t FastqQFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = KDataBufferMakeBytes( &self->kdbuf, DATABUFFERINITSIZE );
+        if ( rc == 0 )
+        {
+            rc = KDataBufferMakeBytes( &self->kdbuf2, DATABUFFERINITSIZE );
+            if ( rc == 0 )
+            {
+                rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                             /* preserve orig spot format to save on conversions */
+                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                             false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                             FastqArgs.offset, '\0', 0, 0 );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqQFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqQFilter ), FastqQFilter_GetKey, NULL, NULL, FastqQFilter_Release );
+        if ( rc == 0 )
+        {
+            FastqQFilter * filter = ( FastqQFilter * )( * splitter );
+            filter->reader = self->reader;
+            filter->buffer_for_read_column = &self->kdbuf;
+            filter->buffer_for_quality = &self->kdbuf2;
+            filter->rejected_spots = 0;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void FastqQFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
+        KDataBufferWhack( &self->kdbuf );
+        KDataBufferWhack( &self->kdbuf2 );
+        FastqReaderWhack( self->reader );
+    }
+}
+
+
+static rc_t FastqQFilterFactory_Make( const SRASplitterFactory** cself,
+                                      const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqQFilterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqQFilterFactory_Init,
+                                      FastqQFilterFactory_NewObj,
+                                      FastqQFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqQFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ min read length filter ============================ */
+
+
+typedef struct FastqReadLenFilter_struct
+{
+    const FastqReader* reader;
+    uint64_t rejected_spots;
+    uint64_t rejected_reads;
+} FastqReadLenFilter;
+
+
+static rc_t FastqReadLenFilter_GetKey( const SRASplitter* cself, const char** key,
+                                       spotid_t spot, readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqReadLenFilter* self = ( FastqReadLenFilter* )cself;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0, spot_len = 0;
+
+        *key = NULL;
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+            if ( rc == 0 )
+            {
+                SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                if ( FastqArgs.split_spot )
+                {
+                    uint32_t readId;
+                    INSDC_coord_len read_len = 0;
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        if ( isset_readmask( readmask, readId ) )
+                        {
+                            rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+                            if ( rc == 0 )
+                            {
+                                if ( read_len < FastqArgs.minReadLen )
+                                {
+                                    unset_readmask( readmask, readId );
+                                    self->rejected_reads ++;
+                                }
+                                else
+                                {
+                                    SRA_DUMP_DBG( 3, ( " %u", readId ) );
+                                }
+                            }
+                        }
+                    }
+                    *key = "";
+                }
+                else
+                {
+                    if ( spot_len >= FastqArgs.minReadLen )
+                    {
+                        *key = "";
+                        SRA_DUMP_DBG( 3, ( " whole spot" ) );
+                    }
+                    else
+                        self->rejected_spots ++;
+                }
+                SRA_DUMP_DBG( 3, ( "\n" ) );
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqReadLenFilter_Release( const SRASplitter * cself )
+{
+    rc_t rc = 0;
+    FastqReadLenFilter * self = ( FastqReadLenFilter* )cself;
+
+    if ( self == NULL )
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    else if ( !g_legacy_report )
+    {
+        if ( self->rejected_reads > 0 )
+            rc = KOutMsg( "Rejected %lu READS because READLEN < %u\n", self->rejected_reads, FastqArgs.minReadLen );
+        if ( self->rejected_spots > 0 && rc == 0 )
+            rc = KOutMsg( "Rejected %lu SPOTS because SPOTLEN < %u\n", self->rejected_spots, FastqArgs.minReadLen );
+    }
+    return rc;
+}
+
+
+typedef struct FastqReadLenFilterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+} FastqReadLenFilterFactory;
+
+
+static rc_t FastqReadLenFilterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                             /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
+    }
+    return rc;
+}
+
+
+static rc_t FastqReadLenFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqReadLenFilter ),
+                               FastqReadLenFilter_GetKey, NULL, NULL, FastqReadLenFilter_Release );
+        if ( rc == 0 )
+        {
+            FastqReadLenFilter * filter = ( FastqReadLenFilter* )( *splitter );
+            filter->reader = self->reader;
+            filter->rejected_spots = 0;
+            filter->rejected_reads = 0;
+        }
+    }
+    return rc;
+}
+
+
+static void FastqReadLenFilterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
+    }
+}
+
+
+static rc_t FastqReadLenFilterFactory_Make( const SRASplitterFactory** cself,
+                            const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqReadLenFilterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqReadLenFilterFactory_Init,
+                                      FastqReadLenFilterFactory_NewObj,
+                                      FastqReadLenFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqReadLenFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ read splitter ============================ */
+
+char* FastqReadSplitter_key_buf = NULL;
+
+
+typedef struct FastqReadSplitter_struct
+{
+    const FastqReader* reader;
+    SRASplitter_Keys* keys;
+    uint32_t keys_max;
+} FastqReadSplitter;
+
+
+static rc_t FastqReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+                    uint32_t* keys, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqReadSplitter* self = ( FastqReadSplitter* )cself;
+    const size_t key_offset = 5;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0;
+
+        *keys = 0;
+        if ( FastqReadSplitter_key_buf == NULL )
+        {
+            /* initial alloc key_buf: "  1\0  2\0...\0  9\0 10\0 11\0...\03220..\08192\0" */
+            if ( nreads_max > 9999 )
+            {
+                /* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
+                rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                FastqReadSplitter_key_buf = malloc( nreads_max * key_offset );
+                if ( FastqReadSplitter_key_buf == NULL )
+                {
+                    rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                }
+                else
+                {
+                    /* fill buffer w/keys */
+                    int i;
+                    char* p = FastqReadSplitter_key_buf;
+                    for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+                    {
+                        if ( sprintf( p, "%4u", i ) <= 0 )
+                        {
+                            rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+                        }
+                        p += key_offset;
+                    }
+                }
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            rc = FastqReaderSeekSpot( self->reader, spot );
+            if ( rc == 0 )
+            {
+                rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+                if ( rc == 0 )
+                {
+                    uint32_t readId, good = 0;
+
+                    SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+                        if ( !isset_readmask( readmask, readId ) )
+                        {
+                            continue;
+                        }
+                        if ( self->keys_max < ( good + 1 ) )
+                        {
+                            void* p = realloc( self->keys, sizeof( *self->keys ) * ( good + 1 ) );
+                            if ( p == NULL )
+                            {
+                                rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                                break;
+                            }
+                            else
+                            {
+                                self->keys = p;
+                                self->keys_max = good + 1;
+                            }
+                        }
+                        self->keys[ good ].key = &FastqReadSplitter_key_buf[ readId * key_offset ];
+                        while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[ good ].key[0] != '\0' )
+                        {
+                            self->keys[ good ].key++;
+                        }
+                        clear_readmask( self->keys[ good ].readmask );
+                        set_readmask( self->keys[good].readmask, readId );
+                        SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+                        good++;
+                    }
+                    if ( rc == 0 )
+                    {
+                        *key = self->keys;
+                        *keys = good;
+                    }
+                    SRA_DUMP_DBG( 3, ( "\n" ) );
+                }
+            }
+            else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+            {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+rc_t FastqReadSplitter_Release( const SRASplitter* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqReadSplitter* self = ( FastqReadSplitter* )cself;
+        free( self->keys );
+    }
+    return 0;
+}
+
+
+typedef struct FastqReadSplitterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+} FastqReadSplitterFactory;
+
+
+static rc_t FastqReadSplitterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
+    }
+    return rc;
+}
+
+
+static rc_t FastqReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqReadSplitter ), NULL,
+                               FastqReadSplitter_GetKeySet, NULL, FastqReadSplitter_Release );
+        if ( rc == 0 )
+        {
+            ( (FastqReadSplitter*)(*splitter) )->reader = self->reader;
+        }
+    }
+    return rc;
+}
+
+
+static void FastqReadSplitterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        free( FastqReadSplitter_key_buf );
+        FastqReadSplitter_key_buf = NULL;
+    }
+}
+
+
+static rc_t FastqReadSplitterFactory_Make( const SRASplitterFactory** cself,
+                const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqReadSplitterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                      FastqReadSplitterFactory_Init,
+                                      FastqReadSplitterFactory_NewObj,
+                                      FastqReadSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqReadSplitterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ 3 read splitter ============================ */
+
+char* Fastq3ReadSplitter_key_buf = NULL;
+
+typedef struct Fastq3ReadSplitter_struct
+{
+    const FastqReader* reader;
+    SRASplitter_Keys keys[ 2 ];
+} Fastq3ReadSplitter;
+
+
+/* if all active reads len >= minreadlen, reads are splitted into separate files, otherwise on single key "" is returnded for all reads */
+static rc_t Fastq3ReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+            uint32_t* keys, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    Fastq3ReadSplitter* self = ( Fastq3ReadSplitter* )cself;
+    const size_t key_offset = 5;
+
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t num_reads = 0;
+
+        *keys = 0;
+        if ( Fastq3ReadSplitter_key_buf == NULL )
+        {
+            /* initial alloc key_buf: "  1\0  2\0...\0  9\0 10\0 11\0...\03220..\08192\0" */
+            if ( nreads_max > 9999 )
+            {
+                /* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
+                rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                Fastq3ReadSplitter_key_buf = malloc( nreads_max * key_offset );
+                if ( Fastq3ReadSplitter_key_buf == NULL )
+                {
+                    rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                }
+                else
+                {
+                    /* fill buffer w/keys */
+                    int i;
+                    char* p = Fastq3ReadSplitter_key_buf;
+                    for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+                    {
+                        if ( sprintf( p, "%4u", i ) <= 0 )
+                        {
+                            rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+                        }
+                        p += key_offset;
+                    }
+                }
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            rc = FastqReaderSeekSpot( self->reader, spot );
+            if ( rc == 0 )
+            {
+                rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+                if ( rc == 0 )
+                {
+                    uint32_t readId, good  = 0;
+                    const uint32_t max_reads = sizeof( self->keys ) /sizeof( self->keys[ 0 ] );
+
+                    SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                    for ( readId = 0; rc == 0 && readId < num_reads && good < max_reads; readId++ )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+                        if ( !isset_readmask( readmask, readId ) )
+                        {
+                            continue;
+                        }
+                        self->keys[ good ].key = &Fastq3ReadSplitter_key_buf[ good * key_offset ];
+                        while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[good].key[ 0 ] != '\0' )
+                        {
+                            self->keys[ good ].key++;
+                        }
+                        clear_readmask( self->keys[ good ].readmask );
+                        set_readmask( self->keys[ good ].readmask, readId );
+                        SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+                        good++;
+                    }
+                    if ( rc == 0 )
+                    {
+                        *key = self->keys;
+                        *keys = good;
+                        if ( good != max_reads )
+                        {
+                            /* some are short -> reset keys to same value for all valid reads */
+                            /* run has just one read -> no suffix */
+                            /* or single file was requested */
+                            for ( readId = 0; readId < good; readId++ )
+                            {
+                                self->keys[ readId ].key = "";
+                            }
+                            SRA_DUMP_DBG( 3, ( " all keys joined to ''" ) );
+                        }
+                    }
+                    SRA_DUMP_DBG( 3, ( "\n" ) );
+                }
+            }
+            else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+            {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct Fastq3ReadSplitterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+} Fastq3ReadSplitterFactory;
+
+
+static rc_t Fastq3ReadSplitterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
+    }
+    return rc;
+}
+
+
+static rc_t Fastq3ReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( Fastq3ReadSplitter ),
+                               NULL, Fastq3ReadSplitter_GetKeySet, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (Fastq3ReadSplitter*)(*splitter) )->reader = self->reader;
+        }
+    }
+    return rc;
+}
+
+
+static void Fastq3ReadSplitterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        free( Fastq3ReadSplitter_key_buf );
+    }
+}
+
+
+static rc_t Fastq3ReadSplitterFactory_Make( const SRASplitterFactory** cself,
+                    const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    Fastq3ReadSplitterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL ) 
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                      Fastq3ReadSplitterFactory_Init,
+                                      Fastq3ReadSplitterFactory_NewObj,
+                                      Fastq3ReadSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( Fastq3ReadSplitterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ============== FASTQ formatter object  ============================ */
+
+
+typedef struct FastqFormatterSplitter_struct
+{
+    const char* accession;
+    const FastqReader* reader;
+    KDataBuffer* b[ 5 ];
+    size_t bsz[ 5 ]; /* fifth is for fasta line wrap */
+} FastqFormatterSplitter;
+
+
+static rc_t FastqFormatterSplitter_WrapLine( const KDataBuffer* src, size_t src_sz,
+                                             KDataBuffer* dst, size_t* dst_sz, const uint64_t width )
+{
+    rc_t rc = 0;
+    size_t sz = src_sz + ( src_sz - 1 ) / width;
+
+    if ( KDataBufferBytes( dst ) < sz )
+    {
+        SRA_DUMP_DBG( 10, ( "%s grow buffer from %u to %u\n", __func__, KDataBufferBytes( dst ), sz + 10 ) );
+        rc = KDataBufferResize( dst, sz + 10 );
+    }
+    if ( rc == 0 )
+    {
+        const char* s = src->base;
+        char* d = dst->base;
+        *dst_sz = sz = src_sz;
+        while ( sz > 0 )
+        {
+            memmove( d, s, sz > width ? width : sz );
+            if ( sz <= width )
+            {
+                break;
+            }
+            d += width;
+            *d++ = '\n';
+            *dst_sz = *dst_sz + 1;
+            s += width;
+            sz -= width;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpByRead( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else 
+    {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+            if ( rc == 0 )
+            {
+                DeflineData def_data;
+                const char* spot_name = NULL, *spot_group = NULL, *read_name = NULL;
+                uint32_t readIdx, spot_len = 0;
+                uint32_t num_reads, readId, k;
+                size_t sname_sz, sgrp_sz;
+                INSDC_coord_len rlabel_sz = 0, read_len = 0;
+
+                if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                {
+                    rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, &num_reads );
+                }
+                else
+                {
+                    rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+                }
+
+                for ( readId = 1, readIdx = 1; rc == 0 && readId <= num_reads; readId++, readIdx++ )
+                {
+                    if ( !isset_readmask( readmask, readId - 1 ) )
+                    {
+                        continue;
+                    }
+                    if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId, NULL, &read_name, &rlabel_sz, NULL, &read_len );
+                        if ( rc == 0 )
+                        {
+                            rc = Defline_Bind( &def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
+                                               &spot_len, &readIdx, read_name, rlabel_sz, &read_len );
+                        }
+                    }
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.b_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBaseName( self->reader, readId, &FastqArgs.dumpCs, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                    }
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.fasta > 0 )
+                        {
+                            IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[4]->base, KDataBufferBytes( self->b[4] ),
+                                      &self->bsz[4] ) ), self->b[4], self->bsz[4] )
+                            {
+                                rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], FastqArgs.fasta );
+                            }
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[1]->base,
+                                      KDataBufferBytes( self->b[1] ), &self->bsz[1] ) ), self->b[1], self->bsz[1] );
+                        }
+                    }
+                    if ( !FastqArgs.fasta && rc == 0 )
+                    {
+                        if ( FastqArgs.q_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+                                      KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderQualityName( self->reader, readId, &FastqArgs.dumpCs, self->b[2]->base,
+                                      KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                        }
+                        if ( rc == 0 )
+                        {
+                            IF_BUF( ( FastqReaderQuality( self->reader, readId, self->b[3]->base,
+                                      KDataBufferBytes( self->b[3] ), &self->bsz[3] ) ), self->b[3], self->bsz[3] );
+                        }
+                    }
+                    else if ( ( (char*)(self->b[0]->base))[0] == '@' )
+                    {
+                        ( (char*)(self->b[0]->base) )[0] = '>';
+                    }
+                    for ( k = 0; rc == 0 && k < ( FastqArgs.fasta ? 2 : 4); k++ )
+                    {
+                        rc = SRASplitter_FileWrite( cself, spot, self->b[ k ]->base, self->bsz[ k ] );
+                        if ( rc == 0 )
+                        {
+                            rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+                        }
+                    }
+                }
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t Fasta_dump( const SRASplitter* cself, FastqFormatterSplitter* self, spotid_t spot, uint32_t columns )
+{
+    uint32_t readId;
+    rc_t rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], columns );
+    for ( readId = 0; rc == 0 && readId < 2; readId++ )
+    {
+        rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+        if ( rc == 0 )
+        {
+            rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpBySpot( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            uint32_t num_reads, readId;
+
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+            {
+                /* if any read in readmask is not set - skip whole spot */
+                if ( !isset_readmask( readmask, readId ) )
+                {
+                    return 0;
+                }
+            }
+            if ( rc == 0 )
+            {
+                rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+                if ( rc == 0 )
+                {
+                    DeflineData def_data;
+                    const char* spot_name = NULL, *spot_group = NULL;
+                    uint32_t spot_len = 0;
+                    size_t writ, sname_sz, sgrp_sz;
+                    const int base_i = FastqArgs.fasta ? 4 : 1;
+
+                    if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                    {
+                        rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz,
+                                                   &spot_group, &sgrp_sz, &spot_len, NULL );
+                        if ( rc == 0 )
+                        {
+                            rc = Defline_Bind( &def_data, self->accession, &spot, spot_name,
+                                               sname_sz, spot_group, sgrp_sz, 
+                                               &spot_len, &readId, NULL, 0, &spot_len );
+                        }
+                    }
+
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.b_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBaseName( self->reader, 0, &FastqArgs.dumpCs, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        self->bsz[ base_i ] = 0;
+                        if ( !FastqArgs.fasta && rc == 0 )
+                        {
+                            if ( FastqArgs.q_defline )
+                            {
+                                IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+                                          KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                            }
+                            else
+                            {
+                                IF_BUF( ( FastqReaderQualityName( self->reader, 0, &FastqArgs.dumpCs, self->b[2]->base,
+                                          KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                            }
+                            self->bsz[3] = 0;
+                        }
+                        else if ( ( (char*)(self->b[0]->base) )[0] == '@' )
+                        {
+                            ( (char*)(self->b[0]->base) )[0] = '>';
+                        }
+                    }
+
+                    for ( readId = 1; rc == 0 && readId <= num_reads; readId++ )
+                    {
+                        IF_BUF( ( FastqReaderBase( self->reader, readId, &( (char*)(self->b[base_i]->base) )[ self->bsz[ base_i ] ],
+                                  KDataBufferBytes( self->b[ base_i ] ) - self->bsz[ base_i ], &writ) ), self->b[ base_i ], self->bsz[ base_i ] + writ )
+                        {
+                            self->bsz[base_i] += writ;
+                            if ( !FastqArgs.fasta )
+                            {
+                                IF_BUF( ( FastqReaderQuality( self->reader, readId, &( (char*)(self->b[3]->base) )[ self->bsz[3] ],
+                                        KDataBufferBytes( self->b[3] ) - self->bsz[3], &writ ) ), self->b[3], self->bsz[3] + writ )
+                                {
+                                    self->bsz[ 3 ] += writ;
+                                }
+                            }
+                        }
+                    }
+
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.fasta > 0 )
+                        {
+                            /* special printint of fasta-output ( line-wrap... ) */
+                            rc = Fasta_dump( cself, self, spot, FastqArgs.fasta );
+                        }
+                        else
+                        {
+                            for ( readId = 0; rc == 0 && readId < 4; readId++ )
+                            {
+                                rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+                                if ( rc == 0 )
+                                {
+                                    rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+typedef struct FastqFormatterFactory_struct
+{
+    const char* accession;
+    const SRATable* table;
+    const FastqReader* reader;
+    KDataBuffer buf[ 5 ]; /* fifth is for fasta line wrap */
+} FastqFormatterFactory;
+
+
+static rc_t FastqFormatterFactory_Init( const SRASplitterFactory* cself )
+{
+    rc_t rc = 0;
+    FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                     FastqArgs.dumpCs, FastqArgs.dumpOrigFmt, FastqArgs.fasta > 0, FastqArgs.dumpCs,
+                     FastqArgs.readIds, !FastqArgs.applyClip, FastqArgs.SuppressQualForCSKey, 0,
+                     FastqArgs.offset, FastqArgs.desiredCsKey[ 0 ], 0, 0 );
+        if ( rc == 0 )
+        {
+            int i;
+            for( i = 0; rc == 0 && i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+            {
+                rc = KDataBufferMakeBytes( &self->buf[ i ], DATABUFFERINITSIZE );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqFormatterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
+{
+    rc_t rc = 0;
+    FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make ( splitter, sizeof( FastqFormatterSplitter ), NULL, NULL,
+                                FastqArgs.split_spot ?
+                                    FastqFormatterSplitter_DumpByRead :
+                                    FastqFormatterSplitter_DumpBySpot, NULL );
+        if ( rc == 0 )
+        {
+            int i;
+            ( (FastqFormatterSplitter*)(*splitter) )->accession = self->accession;
+            ( (FastqFormatterSplitter*)(*splitter) )->reader = self->reader;
+            for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+            {
+                ( (FastqFormatterSplitter*)(*splitter) )->b[ i ] = &self->buf[ i ];
+            }
+        }
+    }
+    return rc;
+}
+
+
+static void FastqFormatterFactory_Release( const SRASplitterFactory* cself )
+{
+    if ( cself != NULL )
+    {
+        int i;
+        FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+        {
+            KDataBufferWhack( &self->buf[ i ] );
+        }
+    }
+}
+
+
+static rc_t FastqFormatterFactory_Make( const SRASplitterFactory** cself,
+                const char* accession, const SRATable* table )
+{
+    rc_t rc = 0;
+    FastqFormatterFactory* obj = NULL;
+
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterFormat, sizeof( *obj ),
+                                      FastqFormatterFactory_Init,
+                                      FastqFormatterFactory_NewObj,
+                                      FastqFormatterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = (FastqFormatterFactory*)*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
+
+
+/* ### External entry points ##################################################### */
+
+
+const char UsageDefaultName[] = "fastq-dump";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return 0;
+}
+
+#define H_splip_sot 0
+#define H_clip 1
+#define H_minReadLen 2
+#define H_qual_filter 3
+#define H_skip_tech 4
+#define H_split_files 5
+#define H_split_3 6
+#define H_dumpcs 7
+#define H_dumpbase 8
+#define H_offset 9
+#define H_fasta 10
+#define H_origfmt 11
+#define H_readids 12
+#define H_helicos 13
+#define H_defline_seq 14
+#define H_defline_qual 15
+#define H_aligned 16
+#define H_unaligned 17
+#define H_aligned_region 18
+#define H_matepair_distance 19
+#define H_qual_filter_1 20
+#define H_SuppressQualForCSKey 21
+
+rc_t FastqDumper_Usage( const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first )
+{
+    int i, j;
+    /* known core options */
+    const SRADumperFmt_Arg* core[ 13 ];
+
+    memset( (void*)core, 0, sizeof( core ) );
+    for ( i = first; core_args[i].abbr != NULL || core_args[ i ].full != NULL; i++ )
+    {
+        const char* nm = core_args[ i ].abbr;
+        nm = nm ? nm : core_args[ i ].full;
+        if ( strcmp( nm, "A" ) == 0 )
+        {
+            core[ 0 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "O" ) == 0 )
+        {
+            core[ 1 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "N" ) == 0 )
+        {
+            core[ 2 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "X" ) == 0 )
+        {
+            core[ 3 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "G" ) == 0 )
+        {
+            core[ 4 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "spot-groups" ) == 0 )
+        {
+            core[ 5 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "R" ) == 0 )
+        {
+            core[ 6 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "T" ) == 0 )
+        {
+            core[ 7 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "K" ) == 0 )
+        {
+            core[ 8 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "table" ) == 0 )
+        {
+            core[ 9 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "Z" ) == 0 )
+        {
+            core[ 10 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "gzip" ) == 0 )
+        {
+            core[ 11 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "bzip2" ) == 0 )
+        {
+            core[ 12 ] = &core_args[ i ];
+        }
+    }
+
+#define OARG(arg,msg) (arg ? HelpOptionLine((arg)->abbr, (arg)->full, (arg)->param, \
+                       msg ? msg : (const char**)((arg)->descr)) : ((void)(0)))
+
+    OUTMSG(( "INPUT\n" ));
+    OARG( core[ 0 ], NULL );
+    OARG( core[ 9 ], NULL );
+
+    OUTMSG(( "\nPROCESSING\n" ));
+    OUTMSG(( "\nRead Splitting                     Sequence data may be used in raw form or\n"));
+    OUTMSG(( "                                     split into individual reads\n" ));
+    OARG( &fmt->arg_desc[ 0 ], NULL);
+
+    OUTMSG(( "\nFull Spot Filters                  Applied to the full spot independently\n" ));
+    OUTMSG(( "                                     of --%s\n", fmt->arg_desc[0].full ));
+    OARG( core[ 2 ], NULL );
+    OARG( core[ 3 ], NULL );
+    OARG( core[ 5 ], NULL );
+    OARG( &fmt->arg_desc[ 1 ], NULL );
+
+    OUTMSG(( "\nCommon Filters                     Applied to spots when --%s is not\n",
+                                                  fmt->arg_desc[0].full ));
+    OUTMSG(( "                                     set, otherwise - to individual reads\n" ));
+    OARG( &fmt->arg_desc[ 2 ], NULL );
+    OARG( core[ 6 ], NULL );
+    OARG( &fmt->arg_desc[ 3 ], NULL );
+    OARG( &fmt->arg_desc[ H_qual_filter_1 ], NULL );
+
+    OUTMSG(( "\nFilters based on alignments        Filters are active when alignment\n" ));
+    OUTMSG(( "                                     data are present\n" ));
+    OARG( &fmt->arg_desc[ 16 ], NULL );
+    OARG( &fmt->arg_desc[ 17 ], NULL );
+    OARG( &fmt->arg_desc[ 18 ], NULL );
+    OARG( &fmt->arg_desc[ 19 ], NULL );
+
+    OUTMSG(( "\nFilters for individual reads       Applied only with --%s set\n",
+                                                  fmt->arg_desc[0].full ));
+    OARG( &fmt->arg_desc[ 4 ], NULL );
+
+    OUTMSG(( "\nOUTPUT\n" ));
+    OARG( core[ 1 ], NULL );
+    OARG( core[ 10 ], NULL );
+    OARG( core[ 11 ], NULL  );
+    OARG( core[ 12 ], NULL);
+
+    OUTMSG(( "\nMultiple File Options              Setting these options will produce more\n" ));
+    OUTMSG(( "                                     than 1 file, each of which will be suffixed\n" ));
+    OUTMSG(( "                                     according to splitting criteria.\n" ));
+    OARG( &fmt->arg_desc[ 5 ], NULL );
+    OARG( &fmt->arg_desc[ 6 ], NULL );
+    OARG( core[ 4 ], NULL );
+    OARG( core[ 6 ], NULL );
+    OARG( core[ 7 ], NULL );
+    OARG( core[ 8 ], NULL );
+
+    OUTMSG(( "\nFORMATTING\n" ));
+    OUTMSG(( "\nSequence\n" ));
+    OARG( &fmt->arg_desc[ 7 ], NULL );
+    OARG( &fmt->arg_desc[ 8 ], NULL );
+
+    OUTMSG(( "\nQuality\n" ));
+    OARG( &fmt->arg_desc[ 9 ], NULL );
+    OARG( &fmt->arg_desc[ 10 ], NULL );
+    OARG( &fmt->arg_desc[ H_SuppressQualForCSKey ], NULL ); /* added Jan 15th 2014 ( a new fastq-variation! ) */
+
+    OUTMSG(( "\nDefline\n" ));
+    OARG( &fmt->arg_desc[ 11 ], NULL );
+    OARG( &fmt->arg_desc[ 12 ], NULL );
+    OARG( &fmt->arg_desc[ 13 ], NULL );
+    OARG( &fmt->arg_desc[ 14 ], NULL );
+    OARG( &fmt->arg_desc[ 15 ], NULL );
+
+    OUTMSG(( "OTHER:\n" ));
+    for ( i = first; core_args[ i ].abbr != NULL || core_args[ i ].full != NULL; i++ )
+    {
+        bool print = true;
+        for ( j = 0; j < sizeof( core ) / sizeof( core[ 0 ] ); j++ )
+        {
+            if ( core[ j ] == &core_args[ i ] )
+            {
+                print = false;
+                break;
+            }
+        }
+        if ( print )
+        {
+            OARG( &core_args[ i ], NULL );
+        }
+    }
+    return 0;
+}
+
+
+rc_t FastqDumper_Release( const SRADumperFmt* fmt )
+{
+    if ( fmt == NULL )
+    {
+        return RC( rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid );
+    }
+    else
+    {
+        Defline_Release( FastqArgs.b_defline );
+        Defline_Release( FastqArgs.q_defline );
+        free( FastqArgs.alregion );
+    }
+    return 0;
+}
+
+
+bool FastqDumper_AddArg( const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[] )
+{
+    const char* arg = NULL;
+
+    if ( fmt == NULL || f == NULL || i == NULL || argv == NULL )
+    {
+        LOGERR( klogErr, RC( rcExe, rcArgv, rcReading, rcParam, rcInvalid ), "null param" );
+        return false;
+    }
+    else if ( f( fmt, "M", "minReadLen", i, argc, argv, &arg ) )
+    {
+        FastqArgs.minReadLen = AsciiToU32( arg, NULL, NULL );
+    }
+    else if ( f( fmt, "W", "clip", i, argc, argv, NULL ) )
+    {
+        FastqArgs.applyClip = true;
+    }
+    else if ( f( fmt, "SU", "suppress-qual-for-cskey", i, argc, argv, NULL ) )
+    {
+        FastqArgs.SuppressQualForCSKey = true;
+    }
+    else if ( f( fmt, "F", "origfmt", i, argc, argv, NULL ) )
+    {
+        FastqArgs.dumpOrigFmt = true;
+    }
+    else if ( f( fmt, "C", "dumpcs", i, argc, argv, NULL ) )
+    {
+        int k = ( *i ) + 1;
+        FastqArgs.dumpCs = true;
+        if ( k < argc && strlen( argv[ k ] ) == 1 && strchr( "acgtACGT", argv[ k ][ 0 ] ) != NULL )
+        {
+            FastqArgs.desiredCsKey = argv[ k ];
+            *i = k;
+        }
+    }
+    else if ( f( fmt, "B", "dumpbase", i, argc, argv, NULL ) )
+    {
+        FastqArgs.dumpBase = true;
+    }
+    else if ( f( fmt, "Q", "offset", i, argc, argv, &arg ) )
+    {
+        FastqArgs.offset = AsciiToU32( arg, NULL, NULL );
+    }
+    else if ( f( fmt, "I", "readids", i, argc, argv, NULL ) )
+    {
+        FastqArgs.readIds = true;
+    }
+    else if ( f( fmt, "E", "qual-filter", i, argc, argv, NULL ) )
+    {
+        FastqArgs.qual_filter = true;
+    }
+    else if ( f( fmt, "E1", "qual-filter-1", i, argc, argv, NULL ) )
+    {
+        FastqArgs.qual_filter1 = true;
+    }
+    else if ( f( fmt, "DB", "defline-seq", i, argc, argv, &arg ) )
+    {
+        FastqArgs.b_deffmt = arg;
+    }
+    else if ( f( fmt, "DQ", "defline-qual", i, argc, argv, &arg ) )
+    {
+        FastqArgs.q_deffmt = arg;
+    }
+    else if ( f( fmt, "TR", "skip-technical", i, argc, argv, NULL ) )
+    {
+        FastqArgs.skipTechnical = true;
+    }
+    else if ( f( fmt, "SF", "split-files", i, argc, argv, NULL ) )
+    {
+        SRADumperFmt * nc_fmt = ( SRADumperFmt * )fmt;
+        FastqArgs.split_spot = true;
+        FastqArgs.split_files = true;
+        nc_fmt->split_files = true;
+    }
+    else if ( f( fmt, NULL, "split-3", i, argc, argv, NULL ) )
+    {
+        FastqArgs.split_3 = true;
+        FastqArgs.split_spot = true;
+        FastqArgs.maxReads = 2;
+        FastqArgs.skipTechnical = true;
+    }
+    else if ( f( fmt, "SL", "split-spot", i, argc, argv, NULL ) )
+    {
+        FastqArgs.split_spot = true;
+    }
+    else if ( f( fmt, "HS", "helicos", i, argc, argv, NULL ) )
+    {
+        FastqArgs.b_deffmt = "@$sn";
+        FastqArgs.q_deffmt =  "+";
+    }
+    else if ( f( fmt, "FA", "fasta", i, argc, argv, NULL ) )
+    {
+        int k = (*i) + 1;
+        FastqArgs.fasta = 70;
+        if ( k < argc && isdigit( argv[ k ][ 0 ] ) )
+        {
+            char* endp = NULL;
+            errno = 0;
+            FastqArgs.fasta = strtou64( argv[ k ], &endp, 10 );
+            if ( errno != 0 || endp == NULL || *endp != '\0' )
+            {
+                return false;
+            }
+            *i = k;
+            if ( FastqArgs.fasta == 0 )
+            {
+                FastqArgs.fasta = ~0;
+            }
+        }
+        FastqArgs.file_extension = ".fasta";
+    }
+    else if ( f( fmt, NULL, "aligned", i, argc, argv, NULL ) )
+    {
+        FastqArgs.aligned = true;
+    }
+    else if ( f( fmt, NULL, "unaligned", i, argc, argv, NULL ) )
+    {
+        FastqArgs.unaligned = true;
+    }
+    else if ( f( fmt, NULL, "aligned-region", i, argc, argv, &arg ) )
+    {
+        /* name[:[from][-[to]]] */
+        TAlignedRegion* r = realloc( FastqArgs.alregion, sizeof( *FastqArgs.alregion ) * ++FastqArgs.alregion_qty );
+        if ( r == NULL )
+        {
+            return false;
+        }
+        FastqArgs.alregion = r;
+        r = &FastqArgs.alregion[ FastqArgs.alregion_qty - 1 ];
+        r->name = strchr( arg, ':' );
+        r->from = 0;
+        r->to = 0;
+        if ( r->name == NULL )
+        {
+            r->name = arg;
+            r->name_len = strlen( arg );
+        }
+        else
+        {
+            const char* c;
+            uint64_t* v;
+
+            r->name_len = r->name - arg;
+            c = r->name;
+            r->name = arg;
+
+            v = &r->from;
+            while ( *++c != '\0')
+            {
+                if ( *c == '-' )
+                {
+                    v = &r->to;
+                }
+                else if ( *c == '+' )
+                {
+                    if ( *v != 0 )
+                    {
+                        return false;
+                    }
+                }
+                else if ( !isdigit( *c ) )
+                {
+                    return false;
+                }
+                else
+                {
+                    *v = *v * 10 + ( *c - '0' );
+                }
+            }
+            if ( r->from > r->to && r->to != 0 )
+            {
+                uint64_t x = r->from;
+                r->from = r->to;
+                r->to = x;
+            }
+        }
+    }
+    else if ( f( fmt, NULL, "matepair-distance", i, argc, argv, &arg ) )
+    {
+        /* from[-to] | [from]-to | unknown */
+        if ( strcmp( arg, "unknown" ) == 0 )
+        {
+            FastqArgs.mp_dist_unknown = true;
+        }
+        else
+        {
+            uint64_t* v;
+            TMatepairDistance* p = realloc( FastqArgs.mp_dist, sizeof( *FastqArgs.mp_dist ) * ++FastqArgs.mp_dist_qty );
+            if ( p == NULL )
+            {
+                return false;
+            }
+            FastqArgs.mp_dist = p;
+            p = &FastqArgs.mp_dist[ FastqArgs.mp_dist_qty - 1 ];
+            p->from = 0;
+            p->to = 0;
+
+            v = &p->from;
+            while ( *++arg != '\0' )
+            {
+                if ( *arg == '-' )
+                {
+                    v = &p->to;
+                }
+                else if ( *arg == '+' )
+                {
+                    if ( *v != 0 )
+                    {
+                        return false;
+                    }
+                }
+                else if ( !isdigit( *arg ) )
+                {
+                    return false;
+                }
+                else
+                {
+                    *v = *v * 10 + ( *arg - '0' );
+                }
+            }
+            if ( p->from > p->to && p->to != 0 )
+            {
+                uint64_t x = p->from;
+                p->from = p->to;
+                p->to = x;
+            }
+            if ( p->from == 0 && p->to == 0 )
+            {
+                FastqArgs.mp_dist_qty--;
+            }
+        }
+    }
+    else
+    {
+        return false;
+    }
+    return true;
+}
+
+
+rc_t FastqDumper_Factories( const SRADumperFmt* fmt, const SRASplitterFactory** factory )
+{
+    rc_t rc = 0;
+    const SRASplitterFactory* parent = NULL, *child = NULL;
+
+    if ( fmt == NULL || factory == NULL )
+    {
+        return RC( rcExe, rcFormatter, rcReading, rcParam, rcInvalid );
+    }
+    *factory = NULL;
+    {
+        const SRAColumn* c = NULL;
+        rc = SRATableOpenColumnRead( fmt->table, &c, "PLATFORM", sra_platform_id_t );
+        if ( rc == 0 )
+        {
+            const INSDC_SRA_platform_id * platform;
+            bitsz_t o, z;
+            rc = SRAColumnRead( c, 1, ( const void ** )&platform, &o, &z );
+            if ( rc == 0 )
+            {
+                if ( !FastqArgs.dumpCs && !FastqArgs.dumpBase )
+                {
+                    if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+                    {
+                        FastqArgs.dumpCs = true;
+                    }
+                    else
+                    {
+                        FastqArgs.dumpBase = true;
+                    }
+                }
+                if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+                {
+                    FastqArgs.is_platform_cs_native = true;
+                }
+            }
+            SRAColumnRelease( c );
+        }
+        else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == ( enum RCObject )rcColumn )
+        {
+            rc = 0;
+        }
+    }
+
+    if ( ( FastqArgs.aligned || FastqArgs.unaligned ) && !( FastqArgs.aligned && FastqArgs.unaligned ) )
+    {
+        rc = AlignedFilterFactory_Make( &child, fmt->table, FastqArgs.aligned, FastqArgs.unaligned );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release(child);
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( FastqArgs.alregion_qty > 0 )
+    {
+        rc = AlignRegionFilterFactory_Make( &child, fmt->table, FastqArgs.alregion, FastqArgs.alregion_qty );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( FastqArgs.mp_dist_unknown || FastqArgs.mp_dist_qty > 0 )
+    {
+        rc = AlignPairDistanceFilterFactory_Make( &child, fmt->table,
+                FastqArgs.mp_dist_unknown, FastqArgs.mp_dist, FastqArgs.mp_dist_qty);
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release(child);
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( rc == 0 && FastqArgs.skipTechnical && FastqArgs.split_spot )
+    {
+        rc = FastqBioFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( rc == 0 && FastqArgs.maxReads > 0 )
+    {
+        rc = FastqRNumberFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( rc == 0 && ( FastqArgs.qual_filter || FastqArgs.qual_filter1 ) )
+    {
+        rc = FastqQFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = FastqReadLenFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
+                    parent = child;
+                }
+            }
+            else
+            {
+                parent = child;
+                *factory = parent;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        if ( FastqArgs.split_3 )
+        {
+            rc = Fastq3ReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 )
+                    {
+                        SRASplitterFactory_Release( child );
+                    }
+                    else
+                    {
+                        parent = child;
+                    }
+                }
+                else
+                {
+                    parent = child;
+                    *factory = parent;
+                }
+            }
+        }
+        else if ( FastqArgs.split_files )
+        {
+            rc = FastqReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 )
+                    {
+                        SRASplitterFactory_Release(child);
+                    }
+                    else
+                    {
+                        parent = child;
+                    }
+                }
+                else
+                {
+                    parent = child;
+                    *factory = parent;
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        if ( FastqArgs.b_deffmt != NULL )
+        {
+            rc = Defline_Parse( &FastqArgs.b_defline, FastqArgs.b_deffmt );
+        }
+        if ( FastqArgs.q_deffmt != NULL )
+        {
+            rc = Defline_Parse( &FastqArgs.q_defline, FastqArgs.q_deffmt );
+        }
+        if ( rc == 0 )
+        {
+            rc = FastqFormatterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 ) 
+                    {
+                        SRASplitterFactory_Release( child );
+                    }
+                }
+                else
+                {
+                    *factory = child;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+/* main entry point of the file */
+rc_t SRADumper_Init( SRADumperFmt* fmt )
+{
+    static const SRADumperFmt_Arg arg[] =
+        {
+
+            /* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
+            {NULL, "split-spot", NULL, {"Split spots into individual reads", NULL}},            /* H_splip_sot = 0 */
+
+            {"W", "clip", NULL, {"Clip adapter sequences", NULL}},                          /* H_clip = 1 */
+
+            {"M", "minReadLen", "len", {"Filter by sequence length >= <len>", NULL}},           /* H_minReadLen = 2 */
+            {"E", "qual-filter", NULL, {"Filter used in early 1000 Genomes data:",              /* H_qual_filter = 3 */
+                                        "no sequences starting or ending with >= 10N", NULL}},
+
+            {NULL, "skip-technical", NULL, {"Dump only biological reads", NULL}},               /* H_skip_tech = 4 */
+
+            {NULL, "split-files", NULL, {"Dump each read into a separate file."                 /* H_split_files = 5 */
+                                         "Files will receive suffix corresponding to read number", NULL}},
+
+            /* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
+            {NULL, "split-3", NULL, {"Legacy 3-file splitting for mate-pairs:",                 /* H_split_3 = 6 */
+                                     "First 2 biological reads satisfying dumping conditions",
+                                     "are placed in files *_1.fastq and *_2.fastq",
+                                     "If only one biological read is present - it is placed in *.fastq",
+                                     "Biological reads 3 and above are ignored.", NULL}},
+            
+            {"C", "dumpcs", "[cskey]", {"Formats sequence using color space (default for SOLiD),"   /* H_dumpcs = 7 */
+                                        "\"cskey\" may be specified for translation", NULL}},
+            {"B", "dumpbase", NULL, {"Formats sequence using base space (default for other than SOLiD).", NULL}}, /* H_dumpbase = 8 */
+
+            /* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
+            {"Q", "offset", "integer", {"Offset to use for quality conversion, default is 33", NULL}},  /* H_offset = 9 */
+            {NULL, "fasta", "[line width]", {"FASTA only, no qualities, optional line wrap width (set to zero for no wrapping)", NULL}}, /* H_fasta = 10 */
+
+            {"F", "origfmt", NULL, {"Defline contains only original sequence name", NULL}}, /* H_origfmt = 11 */
+            {"I", "readids", NULL, {"Append read id after spot id as 'accession.spot.readid' on defline", NULL}}, /* H_readids = 12 */
+            {NULL, "helicos", NULL, {"Helicos style defline", NULL}}, /* H_helicos = 13 */
+            {NULL, "defline-seq", "fmt", {"Defline format specification for sequence.", NULL}}, /* H_defline_seq = 14 */
+            {NULL, "defline-qual", "fmt", {"Defline format specification for quality.", /* H_defline_qual = 15 */
+                              "<fmt> is a string of characters and/or variables. The variables can be one of:",
+                              "$ac - accession, $si - spot id, $sn - spot name, $sg - spot group (barcode),",
+                              "$sl - spot length in bases, $ri - read number, $rn - read name, $rl - read length in bases.",
+                              "'[]' could be used for an optional output: if all vars in [] yield empty values whole group is not printed.",
+                              "Empty value is empty string or 0 for numeric variables.",
+                              "Ex: @$sn[_$rn]/$ri - '_$rn' is omitted if name is empty\n", NULL}},
+
+            {NULL, "aligned", NULL, {"Dump only aligned sequences", NULL}}, /* H_aligned = 16 */
+            {NULL, "unaligned", NULL, {"Dump only unaligned sequences", NULL}}, /* H_unaligned = 17 */
+
+            /* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
+            {NULL, "aligned-region", "name[:from-to]", {"Filter by position on genome.", /* H_aligned_region = 18 */
+                            "Name can either be accession.version (ex: NC_000001.10) or",
+                            "file specific name (ex: \"chr1\" or \"1\").",
+                            "\"from\" and \"to\" are 1-based coordinates", NULL}},
+            {NULL, "matepair-distance", "from-to|unknown", {"Filter by distance beiween matepairs.", /* H_matepair-distance = 19 */
+                            "Use \"unknown\" to find matepairs split between the references.",
+                            "Use from-to to limit matepair distance on the same reference", NULL}},
+
+            {NULL, "qual-filter-1", NULL, {"Filter used in current 1000 Genomes data", NULL}}, /* H_qual_filter_1 = 20 */
+
+            {NULL, "suppress-qual-for-cskey", NULL, {"supress quality-value for cskey", NULL}}, /* H_SuppressQualForCSKey = 21 */
+
+            {NULL, NULL, NULL, {NULL}}
+        };
+
+    if ( fmt == NULL )
+    {
+        return RC( rcExe, rcFileFormat, rcConstructing, rcParam, rcNull );
+    }
+
+    memset( &FastqArgs, 0, sizeof( FastqArgs ) );
+    FastqArgs.is_platform_cs_native = false;
+    FastqArgs.maxReads = 0;
+    FastqArgs.skipTechnical = false;
+    FastqArgs.minReadLen = 1;
+    FastqArgs.applyClip = false;
+    FastqArgs.SuppressQualForCSKey = false;     /* added Jan 15th 2014 ( a new fastq-variation! ) */
+    FastqArgs.dumpOrigFmt = false;
+    FastqArgs.dumpBase = false;
+    FastqArgs.dumpCs = false;
+    FastqArgs.readIds = false;
+    FastqArgs.offset = 33;
+    FastqArgs.desiredCsKey = "";
+    FastqArgs.qual_filter = false;
+    FastqArgs.b_deffmt = NULL;
+    FastqArgs.b_defline = NULL;
+    FastqArgs.q_deffmt = NULL;
+    FastqArgs.q_defline = NULL;
+    FastqArgs.split_files = false;
+    FastqArgs.split_3 = false;
+    FastqArgs.split_spot = false;
+    FastqArgs.fasta = 0;
+    FastqArgs.file_extension = ".fastq";
+    FastqArgs.aligned = false;
+    FastqArgs.unaligned = false;
+    FastqArgs.alregion = NULL;
+    FastqArgs.alregion_qty = 0;
+    FastqArgs.mp_dist = NULL;
+    FastqArgs.mp_dist_unknown = false;
+    FastqArgs.mp_dist_qty = 0;
+
+    fmt->usage = FastqDumper_Usage;
+    fmt->release = FastqDumper_Release;
+    fmt->arg_desc = arg;
+    fmt->add_arg = FastqDumper_AddArg;
+    fmt->get_factory = FastqDumper_Factories;
+    fmt->gzip = true;
+    fmt->bzip2 = true;
+    fmt->split_files = false;
+
+    return 0;
+}
diff --git a/tools/sra-dump/illumina.c b/tools/sra-dump/illumina.c
new file mode 100644
index 0000000..56bfef2
--- /dev/null
+++ b/tools/sra-dump/illumina.c
@@ -0,0 +1,536 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <kapp/main.h>
+
+#include <sra/sradb.h>
+#include <sra/illumina.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "debug.h"
+#include "core.h"
+
+#define DATABUFFERINITSIZE 10240
+
+typedef enum {
+    eRead = 0x01,
+    eQual1_S = 0x02,
+    eQual1_M = 0x04,
+    eQual4 = 0x08,
+    eIntensity = 0x10,
+    eNoise = 0x20,
+    eSignal = 0x40,
+    eQSeq_S = 0x80,
+    eQSeq_M = 0x100
+} EIlluminaOptions;
+
+struct IlluminaArgs_struct {
+    EIlluminaOptions opt;
+} IlluminaArgs;
+
+
+/* ============== Illumina tile/lane splitter based on uint32_t pointer ============================ */
+typedef enum {
+    eIlluminaLaneSplitter = 1,
+    eIlluminaTileSplitter = 2
+} TIlluminaLaneSplitterType;
+
+typedef struct IlluminaU32Splitter_struct {
+    TIlluminaLaneSplitterType type;
+    const IlluminaReader* reader;
+    char key[128];
+} IlluminaU32Splitter;
+
+static
+rc_t IlluminaU32Splitter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+{
+    rc_t rc = 0;
+    IlluminaU32Splitter* self = (IlluminaU32Splitter*)cself;
+
+    if( self == NULL || key == NULL ) {
+        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcInvalid);
+    } else {
+        *key = self->key;
+        self->key[0] = '\0';
+        if( (rc = IlluminaReaderSeekSpot(self->reader, spot)) == 0 ) {
+            int w;
+            INSDC_coord_val val;
+            switch( self->type ) {
+                case eIlluminaLaneSplitter:
+                    w = 1;
+                    rc = IlluminaReader_SpotInfo(self->reader, NULL, NULL, &val, NULL, NULL, NULL, NULL, NULL);
+                    break;
+                case eIlluminaTileSplitter:
+                    w = 4;
+                    rc = IlluminaReader_SpotInfo(self->reader, NULL, NULL, NULL, &val, NULL, NULL, NULL, NULL);
+                    break;
+                default:
+                    rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcInvalid);
+            }
+            if( rc == 0 ) {
+                sprintf(self->key, "%0*d", w, val);
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            *key = NULL;
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct IlluminaU32SplitterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    TIlluminaLaneSplitterType type;
+    const IlluminaReader* reader;
+} IlluminaU32SplitterFactory;
+
+static
+rc_t IlluminaU32SplitterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    IlluminaU32SplitterFactory* self = (IlluminaU32SplitterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else {
+        rc = IlluminaReaderMake(&self->reader, self->table, self->accession, true, false, false, false, false, false, false, 0, 0);
+    }
+    return rc;
+}
+
+static
+rc_t IlluminaU32SplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    IlluminaU32SplitterFactory* self = (IlluminaU32SplitterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(IlluminaU32Splitter), IlluminaU32Splitter_GetKey, NULL, NULL, NULL)) == 0 ) {
+            ((IlluminaU32Splitter*)(*splitter))->reader = self->reader;
+            ((IlluminaU32Splitter*)(*splitter))->type = self->type;
+        }
+    }
+    return rc;
+}
+
+static
+void IlluminaU32SplitterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        IlluminaU32SplitterFactory* self = (IlluminaU32SplitterFactory*)cself;
+        IlluminaReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t IlluminaU32SplitterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table, TIlluminaLaneSplitterType type)
+{
+    rc_t rc = 0;
+    IlluminaU32SplitterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+                                             IlluminaU32SplitterFactory_Init,
+                                             IlluminaU32SplitterFactory_NewObj,
+                                             IlluminaU32SplitterFactory_Release)) == 0 ) {
+        obj = (IlluminaU32SplitterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+        switch(type) {
+            case eIlluminaLaneSplitter:
+            case eIlluminaTileSplitter:
+                obj->type = type;
+                break;
+            default:
+                rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcInvalid);
+        }
+    }
+    return rc;
+}
+
+/* ============== Illumina formatter object  ============================ */
+
+typedef struct IlluminaFormatterSplitter_struct {
+    const IlluminaReader* reader;
+    KDataBuffer* b;
+} IlluminaFormatterSplitter;
+
+static
+rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+{
+    rc_t rc = 0;
+    IlluminaFormatterSplitter* self = (IlluminaFormatterSplitter*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = IlluminaReaderSeekSpot(self->reader, spot)) == 0 ) {
+            size_t writ = 0;
+
+            if( rc == 0 && (IlluminaArgs.opt & eRead) &&
+                (rc = SRASplitter_FileActivate(cself, "seq.txt")) == 0 ) {
+                    IF_BUF((IlluminaReaderBase(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eQual1_S) &&
+                (rc = SRASplitter_FileActivate(cself, "qcal.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderQuality1(self->reader, 0, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eQual1_M) ) {
+                uint32_t num_reads = 0;
+                if( (rc = IlluminaReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                    int readId;
+                    char key[128];
+                    for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
+                        sprintf(key, "%u_qcal.txt", readId);
+                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+                            IF_BUF((IlluminaReaderQuality1(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                                if( writ > 0 ) {
+                                    ((char*)(self->b->base))[writ] = '\n';
+                                    rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eQual4) && (rc = SRASplitter_FileActivate(cself, "prb.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderQuality4(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eIntensity) && (rc = SRASplitter_FileActivate(cself, "int.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderIntensity(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eNoise) && (rc = SRASplitter_FileActivate(cself, "nse.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderNoise(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eSignal) && (rc = SRASplitter_FileActivate(cself, "sig2.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderSignal(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eQSeq_S) && (rc = SRASplitter_FileActivate(cself, "qseq.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderQSeq(self->reader, 0, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
+                }
+            }
+            if( rc == 0 && (IlluminaArgs.opt & eQSeq_M) ) {
+                uint32_t num_reads = 0;
+                if( (rc = IlluminaReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+                    uint32_t readId;
+                    char key[128];
+                    for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
+                        sprintf(key, "%u_qseq.txt", readId);
+                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+                            IF_BUF((IlluminaReaderQSeq(self->reader, readId, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                                if( writ > 0 ) {
+                                    ((char*)(self->b->base))[writ] = '\n';
+                                    rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+            SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+typedef struct IlluminaFormatterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    const IlluminaReader* reader;
+    KDataBuffer buf;
+} IlluminaFormatterFactory;
+
+
+/* refactored June 13 2014 by Wolfgang to fix a mysterious bug on windows where b_qseq resolved into false on windows
+   and true on posix! The original code was this:
+
+    if( self == NULL ) {
+          rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+      } else if( (rc = IlluminaReaderMake(&self->reader, self->table, self->accession,
+                                  IlluminaArgs.opt & eRead, IlluminaArgs.opt & (eQual1_S | eQual1_M), IlluminaArgs.opt & eQual4, 
+                                  IlluminaArgs.opt & eIntensity, IlluminaArgs.opt & eNoise, IlluminaArgs.opt & eSignal,
+                                  IlluminaArgs.opt & (eQSeq_S | eQSeq_M), 0, 0)) == 0 ) {
+          rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE);
+        }
+
+    Anton's old, more dense version should do the same, but it does not on Windows!
+
+    eQSeq_M is an enum, defined at the top of this file to have the value 0x100.
+    It will be type-casted into bool because that is the type IlluminaReaderMake() wants.
+    ( bool )eQSeq_M is true for GCC/LLVM and false for the MS-compiler!
+    Casting enum's directly without comparison into boolean does not work for the MS-compiler.
+*/
+static rc_t IlluminaFormatterFactory_Init( const SRASplitterFactory * cself )
+{
+    rc_t rc = 0;
+    IlluminaFormatterFactory * self = ( IlluminaFormatterFactory * )cself;
+
+    if ( self == NULL )
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    else
+    {
+        bool b_read = ( ( IlluminaArgs.opt & eRead ) != 0 );
+        bool b_qual1 = ( ( IlluminaArgs.opt & ( eQual1_S | eQual1_M ) ) != 0 );
+        bool b_qual4 = ( ( IlluminaArgs.opt & eQual4 ) != 0 );
+        bool b_intensity = ( ( IlluminaArgs.opt & eIntensity ) != 0 );
+        bool b_noise = ( ( IlluminaArgs.opt & eNoise ) != 0 );
+        bool b_signal = ( ( IlluminaArgs.opt & eSignal ) != 0 );
+        bool b_qseq = ( ( IlluminaArgs.opt & ( eQSeq_S | eQSeq_M ) ) != 0 );
+        rc = IlluminaReaderMake( &self->reader,
+                                self->table,
+                                self->accession,
+                                b_read,
+                                b_qual1,
+                                b_qual4,
+                                b_intensity,
+                                b_noise,
+                                b_signal,
+                                b_qseq,
+                                0,
+                                0 );
+        if ( rc == 0 )
+            rc = KDataBufferMakeBytes( &self->buf, DATABUFFERINITSIZE );
+    }
+    return rc;
+}
+
+
+static
+rc_t IlluminaFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    IlluminaFormatterFactory* self = (IlluminaFormatterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(IlluminaFormatterSplitter), NULL, NULL, IlluminaFormatterSplitter_Dump, NULL)) == 0 ) {
+            ((IlluminaFormatterSplitter*)(*splitter))->reader = self->reader;
+            ((IlluminaFormatterSplitter*)(*splitter))->b = &self->buf;
+        }
+    }
+    return rc;
+}
+
+static
+void IlluminaFormatterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        IlluminaFormatterFactory* self = (IlluminaFormatterFactory*)cself;
+        IlluminaReaderWhack(self->reader);
+        KDataBufferWhack(&self->buf);
+    }
+}
+
+static
+rc_t IlluminaFormatterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+{
+    rc_t rc = 0;
+    IlluminaFormatterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterFormat, sizeof(*obj),
+                                             IlluminaFormatterFactory_Init,
+                                             IlluminaFormatterFactory_NewObj,
+                                             IlluminaFormatterFactory_Release)) == 0 ) {
+        obj = (IlluminaFormatterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+    }
+    return rc;
+}
+
+/* ### External entry points ##################################################### */
+const char UsageDefaultName[] = "illumina-dump";
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t IlluminaDumper_Release(const SRADumperFmt* fmt)
+{
+    if( fmt == NULL ) {
+        return RC(rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid);
+    }
+    return 0;
+}
+
+bool IlluminaDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[])
+{
+    const char* arg = NULL;
+    const char* qseq = "2";
+
+    if( fmt == NULL || f == NULL || i == NULL || argv == NULL ) {
+        LOGERR(klogErr, RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid), "null param");
+        return false;
+    } else if( f(fmt, "r", "read", i, argc, argv, NULL) ) {
+        IlluminaArgs.opt |= eRead;
+    } else if( f(fmt, "x", "qseq", i, argc, argv, &qseq) ) {
+        uint32_t q = AsciiToU32(qseq, NULL, NULL);
+        if( q == 1 ) {
+            IlluminaArgs.opt |= eQSeq_S;
+            IlluminaArgs.opt &= ~eQSeq_M;
+        } else if( q == 2 ) {
+            IlluminaArgs.opt |= eQSeq_M;
+            IlluminaArgs.opt &= ~eQSeq_S;
+        } else {
+            return false;
+        }
+    } else if( f(fmt, "q", "qual1", i, argc, argv, &arg) ) {
+        uint32_t q = AsciiToU32(arg, NULL, NULL);
+        if( q == 1 ) {
+            IlluminaArgs.opt |= eQual1_S;
+            IlluminaArgs.opt &= ~eQual1_M;
+        } else if( q == 2 ) {
+            IlluminaArgs.opt |= eQual1_M;
+            IlluminaArgs.opt &= ~eQual1_S;
+        } else {
+            return false;
+        }
+    } else if( f(fmt, "p", "qual4", i, argc, argv, NULL) ) {
+        IlluminaArgs.opt |= eQual4;
+    } else if( f(fmt, "i", "intensity", i, argc, argv, NULL) ) {
+        IlluminaArgs.opt |= eIntensity;
+    } else if( f(fmt, "n", "noise", i, argc, argv, NULL) ) {
+        IlluminaArgs.opt |= eNoise;
+    } else if( f(fmt, "s", "signal", i, argc, argv, NULL) ) {
+        IlluminaArgs.opt |= eSignal;
+    } else {
+        return false;
+    }
+    return true;
+}
+
+rc_t IlluminaDumper_Factories(const SRADumperFmt* fmt, const SRASplitterFactory** factory)
+{
+    rc_t rc = 0;
+    const SRASplitterFactory* f_lane = NULL, *f_tile = NULL, *f_fmt = NULL;
+
+    if( fmt == NULL || factory == NULL ) {
+        return RC(rcExe, rcFormatter, rcReading, rcParam, rcInvalid);
+    }
+    *factory = NULL;
+
+    if( IlluminaArgs.opt == 0 ) {
+        IlluminaArgs.opt = eRead | eQual1_S;
+    }
+
+    if( (rc = IlluminaU32SplitterFactory_Make(&f_lane, fmt->accession, fmt->table, eIlluminaLaneSplitter)) == 0 ) {
+        if( (rc = IlluminaU32SplitterFactory_Make(&f_tile, fmt->accession, fmt->table, eIlluminaTileSplitter)) == 0 ) {
+            if( (rc = IlluminaFormatterFactory_Make(&f_fmt, fmt->accession, fmt->table)) == 0 ) {
+                if( (rc = SRASplitterFactory_AddNext(f_tile, f_fmt)) == 0 ) {
+                    f_fmt = NULL;
+                    if( (rc = SRASplitterFactory_AddNext(f_lane, f_tile)) == 0 ) {
+                        f_tile = NULL;
+                        *factory = f_lane;
+                    }
+                }
+            }
+        }
+    }
+    if( rc != 0 ) {
+        SRASplitterFactory_Release(f_lane);
+        SRASplitterFactory_Release(f_tile);
+        SRASplitterFactory_Release(f_fmt);
+    }
+    return rc;
+}
+
+/* main entry point of the file */
+rc_t SRADumper_Init(SRADumperFmt* fmt)
+{
+    static const SRADumperFmt_Arg arg[] =
+        {
+            {"r", "read", NULL, {"Output READ: \"seq\", default is on", NULL}},
+            {"q", "qual1", "1|2", {"Output QUALITY, whole spot (1) or split by reads (2): \"qcal\", default is 1", NULL}},
+            {"p", "qual4", NULL, {"Output full QUALITY: \"prb\", default is off", NULL}},
+            {"i", "intensity", NULL, {"Output INTENSITY, if present: \"int\", default is off", NULL}},
+            {"n", "noise", NULL, {"Output NOISE, if present: \"nse\", default is off", NULL}},
+            {"s", "signal", NULL, {"Output SIGNAL, if present: \"sig2\", default is off", NULL}},
+            {"x", "qseq", "1|2", {"Output QSEQ format: whole spot (1) or split by reads: \"qseq\", default is off", NULL}},
+            {NULL, NULL, NULL, {NULL}}
+        };
+
+    IlluminaArgs.opt = 0;
+
+    if( fmt == NULL ) {
+        return RC(rcExe, rcFileFormat, rcConstructing, rcParam, rcNull);
+    }
+    fmt->release = IlluminaDumper_Release;
+    fmt->arg_desc = arg;
+    fmt->add_arg = IlluminaDumper_AddArg;
+    fmt->get_factory = IlluminaDumper_Factories;
+    fmt->gzip = true;
+    fmt->bzip2 = true;
+
+    return 0;
+}
diff --git a/tools/sra-dump/sff.c b/tools/sra-dump/sff.c
new file mode 100644
index 0000000..930f43f
--- /dev/null
+++ b/tools/sra-dump/sff.c
@@ -0,0 +1,200 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/log.h>
+
+#include <kapp/main.h>
+#include <sra/sradb.h>
+#include <sra/sff.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+
+#include "debug.h"
+#include "core.h"
+
+#define DATABUFFERINITSIZE 10240
+
+typedef struct SFFFormatterSplitter_struct {
+    const SFFReader* reader;
+    spotid_t spots;
+    KDataBuffer* b;
+} SFFFormatterSplitter;
+
+static const char* SFFFormatterSplitter_Dump_Ext = ".sff";
+
+static
+rc_t SFFFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+{
+    rc_t rc = 0;
+    SFFFormatterSplitter* self = (SFFFormatterSplitter*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
+    } else {
+        size_t writ = 0;
+
+        if( (rc = SRASplitter_FileActivate(cself, SFFFormatterSplitter_Dump_Ext)) == 0 ) {
+            if( self->spots == 0 ) {
+                IF_BUF((SFFReaderHeader(self->reader, 0, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                    rc = SRASplitter_FileWrite(cself, 0, self->b->base, writ);
+                }
+            }
+            if( rc == 0 ) {
+                if( (rc = SFFReaderSeekSpot(self->reader, spot)) == 0 ) {
+                    IF_BUF((SFFReader_GetCurrentSpotData(self->reader, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ);
+                        self->spots++;
+                    }
+                } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
+                    SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
+                    self->spots++;
+                    rc = 0;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SFFFormatterSplitter_Release(const SRASplitter* cself)
+{
+    rc_t rc = 0;
+    SFFFormatterSplitter* self = (SFFFormatterSplitter*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcNode, rcReleasing, rcSelf, rcNull);
+    } else if( (rc = SRASplitter_FileActivate(cself, SFFFormatterSplitter_Dump_Ext)) == 0 ) {
+        if( self->spots > 0 ) {
+            size_t writ = 0;
+            /* tweak SFF file header with real number of reads per file */
+            IF_BUF((SFFReaderHeader(self->reader, self->spots, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                rc = SRASplitter_FileWritePos(cself, 0, 0, self->b->base, writ);
+            }
+        }
+    }
+    return rc;
+}
+
+typedef struct SFFFormatterFactory_struct {
+    const char* accession;
+    const SRATable* table;
+    const SFFReader* reader;
+    KDataBuffer kdbuf;
+} SFFFormatterFactory;
+
+static
+rc_t SFFFormatterFactory_Init(const SRASplitterFactory* cself)
+{
+    rc_t rc = 0;
+    SFFFormatterFactory* self = (SFFFormatterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = KDataBufferMakeBytes(&self->kdbuf, DATABUFFERINITSIZE)) == 0 ) {
+        rc = SFFReaderMake(&self->reader, self->table, self->accession, 0, 0);
+    }
+    return rc;
+}
+
+static
+rc_t SFFFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+{
+    rc_t rc = 0;
+    SFFFormatterFactory* self = (SFFFormatterFactory*)cself;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
+    } else {
+        if( (rc = SRASplitter_Make(splitter, sizeof(SFFFormatterSplitter), NULL, NULL, SFFFormatterSplitter_Dump, SFFFormatterSplitter_Release)) == 0 ) {
+            ((SFFFormatterSplitter*)(*splitter))->reader = self->reader;
+            ((SFFFormatterSplitter*)(*splitter))->b = &self->kdbuf;
+        }
+    }
+    return rc;
+}
+
+static
+void SFFFormatterFactory_Release(const SRASplitterFactory* cself)
+{
+    if( cself != NULL ) {
+        SFFFormatterFactory* self = (SFFFormatterFactory*)cself;
+        KDataBufferWhack(&self->kdbuf);
+        SFFReaderWhack(self->reader);
+    }
+}
+
+static
+rc_t SFFFormatterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+{
+    rc_t rc = 0;
+    SFFFormatterFactory* obj = NULL;
+
+    if( cself == NULL || accession == NULL || table == NULL ) {
+        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
+    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterFormat, sizeof(*obj),
+                                             SFFFormatterFactory_Init,
+                                             SFFFormatterFactory_NewObj,
+                                             SFFFormatterFactory_Release)) == 0 ) {
+        obj = (SFFFormatterFactory*)*cself;
+        obj->accession = accession;
+        obj->table = table;
+    }
+    return rc;
+}
+
+/* ### External entry points ##################################################### */
+const char UsageDefaultName[] = "sff-dump";
+rc_t CC UsageSummary (const char * progname)
+{
+    return 0;
+}
+
+rc_t SFFDumper_Factories(const SRADumperFmt* fmt, const SRASplitterFactory** factory)
+{
+    if( fmt == NULL || factory == NULL ) {
+        return RC(rcExe, rcFormatter, rcReading, rcParam, rcInvalid);
+    }
+    *factory = NULL;
+    return SFFFormatterFactory_Make(factory, fmt->accession, fmt->table);
+}
+
+/* main entry point of the file */
+rc_t SRADumper_Init(SRADumperFmt* fmt)
+{
+    if( fmt == NULL ) {
+        return RC(rcExe, rcFileFormat, rcConstructing, rcParam, rcNull);
+    }
+    fmt->release = NULL;
+    fmt->arg_desc = NULL;
+    fmt->add_arg = NULL;
+    fmt->get_factory = SFFDumper_Factories;
+    fmt->gzip = false;
+    fmt->bzip2 = false;
+
+    return 0;
+}
diff --git a/tools/sra-dump/sra-dump.c b/tools/sra-dump/sra-dump.c
new file mode 100644
index 0000000..573ac8c
--- /dev/null
+++ b/tools/sra-dump/sra-dump.c
@@ -0,0 +1,1011 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/sradb.h>
+#include <sra/srapath.h>
+#include <sra/types.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef struct sradump_parms sradump_parms;
+struct sradump_parms
+{
+    const char *src_path;
+
+    const char **columns;
+    uint32_t column_cnt;
+
+    spotid_t start, stop;
+};
+
+typedef struct column_map column_map;
+struct column_map
+{
+    const char *name;
+    void ( * dump ) ( const void *base, bitsz_t row_bits );
+    const SRAColumn *col;
+    VTypedecl td;
+    uint32_t elem_size;
+};
+
+/* dump_row
+ */
+static
+void dump_text ( const void *base, bitsz_t row_bits )
+{
+    const unsigned char *data = base;
+    uint32_t i, count = row_bits >> 3;
+
+    for ( i = 0; i < count; ++ i )
+  {
+        if ( isprint ( data [ i ] ) )
+            OUTMSG(( "%c", data [ i ] ));
+        else
+            OUTMSG(( "\\x%2x", data [ i ] ));
+    }
+}
+
+static
+void dump_I8 ( const void *base, bitsz_t row_bits )
+{
+    const int8_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 3;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%d", sep, data [ i ] ));
+}
+
+static
+void dump_U8 ( const void *base, bitsz_t row_bits )
+{
+    const uint8_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 3;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%u", sep, data [ i ] ));
+}
+
+static
+void dump_I16 ( const void *base, bitsz_t row_bits )
+{
+    const int16_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 4;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%d", sep, data [ i ] ));
+}
+
+static
+void dump_U16 ( const void *base, bitsz_t row_bits )
+{
+    const uint16_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 4;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%u", sep, data [ i ] ));
+}
+
+static
+void dump_I32 ( const void *base, bitsz_t row_bits )
+{
+    const int32_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 5;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%d", sep, data [ i ] ));
+}
+
+static
+void dump_U32 ( const void *base, bitsz_t row_bits )
+{
+    const uint32_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 5;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%u", sep, data [ i ] ));
+}
+
+static
+void dump_I64 ( const void *base, bitsz_t row_bits )
+{
+    const int64_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 6;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%ld", sep, data [ i ] ));
+}
+
+static
+void dump_U64 ( const void *base, bitsz_t row_bits )
+{
+    const uint64_t *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 6;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%lu", sep, data [ i ] ));
+}
+
+static
+void dump_F32 ( const void *base, bitsz_t row_bits )
+{
+    const float *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 5;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%f", sep, data [ i ] ));
+}
+
+static
+void dump_F64 ( const void *base, bitsz_t row_bits )
+{
+    const double *data = base;
+    const char *sep = "";
+    uint32_t i, count = row_bits >> 6;
+
+    for ( i = 0; i < count; sep = ",", ++ i )
+        OUTMSG(( "%s%f", sep, data [ i ] ));
+}
+
+
+#define CASE( x ) \
+    case x: p = # x; break
+
+static
+void dump_platform ( const void *base, bitsz_t row_bits )
+{
+    const char *p = NULL;
+    const uint8_t *data = base;
+    if ( row_bits == 8 ) switch ( data [ 0 ] )
+    {
+    CASE ( SRA_PLATFORM_UNDEFINED );
+    CASE ( SRA_PLATFORM_454 );
+    CASE ( SRA_PLATFORM_ILLUMINA );
+    CASE ( SRA_PLATFORM_ABSOLID );
+    CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
+    CASE ( SRA_PLATFORM_HELICOS );
+    default:
+        OUTMSG(( "%u", data [ 0 ] ));
+        return;
+    }
+    OUTMSG(( "%s", p ));
+}
+
+static
+void dump_readtype ( const void *base, bitsz_t row_bits )
+{
+    const char *sep = "";
+    const uint8_t *data = base;
+    uint32_t i, count = row_bits >> 3;
+    for ( i = 0; i < count; sep = ",", ++ i )
+    {
+        const char *p;
+        switch ( data [ i ] )
+        {
+        CASE ( SRA_READ_TYPE_TECHNICAL );
+        CASE ( SRA_READ_TYPE_BIOLOGICAL );
+        CASE ( SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_FORWARD );
+        CASE ( SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD );
+        CASE ( SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_REVERSE );
+        CASE ( SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_REVERSE );
+        default:
+            OUTMSG(( "%s%u", sep, data [ 0 ] ));
+            continue;
+        }
+        OUTMSG(( "%s%s", sep, p ));
+    }
+}
+
+static
+void dump_readfilt ( const void *base, bitsz_t row_bits )
+{
+    const char *sep = "";
+    const uint8_t *data = base;
+    uint32_t i, count = row_bits >> 3;
+    for ( i = 0; i < count; sep = ",", ++ i )
+    {
+        const char *p;
+        switch ( data [ i ] )
+        {
+        CASE ( SRA_READ_FILTER_PASS );
+        CASE ( SRA_READ_FILTER_REJECT );
+        CASE ( SRA_READ_FILTER_CRITERIA );
+        CASE ( SRA_READ_FILTER_REDACTED );
+        default:
+            OUTMSG(( "%s%u", sep, data [ 0 ] ));
+            continue;
+        }
+        OUTMSG(( "%s%s", sep, p ));
+    }
+}
+
+#undef CASE
+
+
+static
+rc_t dump_row ( const sradump_parms *pb, const column_map *cm, uint32_t count, spotid_t row )
+{
+    rc_t rc;
+    uint32_t i;
+
+    for ( rc = 0, i = 0; rc == 0 && i < count; ++ i )
+    {
+        const void *base;
+        bitsz_t boff, row_bits;
+
+        /* read data */
+        rc = SRAColumnRead ( cm [ i ] . col, row, & base, & boff, & row_bits );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt,  (klogInt, rc, "failed to read column '$(name)' row $(row)",
+                                 "name=%s,row=%u", cm [ i ] . name, row ));
+            break;
+        }
+
+        /* cannot deal with non-byte-aligned data */
+        if ( boff != 0 || ( row_bits & 7 ) != 0 )
+        {
+            rc = RC ( rcExe, rcColumn, rcReading, rcType, rcUnsupported );
+            PLOGERR ( klogInt,  (klogInt, rc, "non-byte-aligned data in column '$(name)' row $(row)",
+                                 "name=%s,row=%u", cm [ i ] . name, row ));
+            break;
+        }
+
+        /* write cell header - TBD - improve column alignment for readability */
+        OUTMSG(( "%u. %s: ", row, cm [ i ] . name ));
+
+        /* write cell data */
+        if ( cm [ i ] . td . dim == 1 )
+            ( cm [ i ] . dump ) ( base, row_bits );
+        else
+        {
+            const char *sep;
+            const uint8_t *data = base;
+            uint32_t elem_bits = cm [ i ] . elem_size;
+            uint32_t j, row_len = ( uint32_t ) ( row_bits / elem_bits );
+
+            for ( sep = "{", j = 0; j < row_len; sep = "},{", ++ j )
+            {
+                OUTMSG(( "%s", sep ));
+                ( cm [ i ] . dump ) ( & data [ j * elem_bits >> 3 ], elem_bits );
+            }
+
+            OUTMSG(( "}" ));
+        }
+
+        OUTMSG(( "\n" ));
+    }
+
+    return rc;
+}
+
+static
+rc_t dump_table ( const sradump_parms *pb, const column_map *cm, uint32_t count )
+{
+    rc_t rc;
+    spotid_t row;
+
+    for ( rc = 0, row = pb -> start; row <= pb -> stop; ++ row )
+    {
+        rc = Quitting();
+        if ( rc != 0 )
+            break;
+        rc = dump_row ( pb, cm, count, row );
+        if ( rc != 0 )
+            break;
+    }
+
+    return rc;
+}
+
+static
+const char *s_454_default [] =
+{
+    "(INSDC:SRA:platform_id)PLATFORM",
+    "(U8)NREADS",
+    "(INSDC:SRA:xread_type)READ_TYPE",
+    "(NCBI:SRA:Segment)READ_SEG",
+    "(NCBI:SRA:Segment)LABEL_SEG",
+    "(ascii)LABEL",
+    "(INSDC:SRA:read_filter)READ_FILTER",
+    "(ascii)SPOT_GROUP",
+
+    "(INSDC:dna:text)FLOW_CHARS",
+    "(INSDC:dna:text)KEY_SEQUENCE",
+    "(INSDC:dna:text)LINKER_SEQUENCE",
+    "(INSDC:dna:text)READ",
+    "(INSDC:quality:phred)QUALITY",
+    "(INSDC:coord:one)CLIP_ADAPTER_LEFT",
+    "(INSDC:coord:one)CLIP_ADAPTER_RIGHT",
+    "(INSDC:coord:one)CLIP_QUALITY_LEFT",
+    "(INSDC:coord:one)CLIP_QUALITY_RIGHT",
+    "(NCBI:isamp1)SIGNAL",
+    "(INSDC:position:one)POSITION"
+};
+
+static
+const char *s_Illumina_default [] =
+{
+    "(INSDC:SRA:platform_id)PLATFORM"
+    , "(U8)NREADS"
+    , "(INSDC:SRA:xread_type)READ_TYPE"
+    , "(NCBI:SRA:Segment)READ_SEG"
+    , "(NCBI:SRA:Segment)LABEL_SEG"
+    , "(ascii)LABEL"
+    , "(INSDC:SRA:read_filter)READ_FILTER"
+    , "(ascii)SPOT_GROUP"
+
+    , "(INSDC:dna:text)READ"
+    , "(NCBI:qual4)QUALITY:QUALITY"
+    , "(INSDC:quality:phred)PHYS_QUALITY:QUALITY"
+    , "(INSDC:quality:phred)QUALITY2"
+#if ENABLE_INTENSITY_COPY
+    , "(NCBI:fsamp4)INTENSITY"
+#endif
+};
+
+static
+const char *s_ABI_default [] =
+{
+    " (INSDC:SRA:platform_id)PLATFORM"
+    , "(U8)NREADS"
+    , "(INSDC:SRA:xread_type)READ_TYPE"
+    , "(NCBI:SRA:Segment)READ_SEG"
+    , "(NCBI:SRA:Segment)LABEL_SEG"
+    , "(ascii)LABEL"
+    , "(INSDC:SRA:read_filter)READ_FILTER"
+    , "(ascii)SPOT_GROUP"
+
+    , "(INSDC:dna:text)CS_KEY"
+    , "(INSDC:color:text)CSREAD"
+    , "(INSDC:quality:phred)QUALITY"
+#if ENABLE_INTENSITY_COPY
+    , "(NCBI:fsamp4)SIGNAL"
+#endif
+};
+
+static
+const char *s_fastq_default [] =
+{
+    "(INSDC:SRA:platform_id)PLATFORM",
+    "(U8)NREADS",
+    "(INSDC:SRA:xread_type)READ_TYPE",
+    "(NCBI:SRA:Segment)READ_SEG",
+    "(NCBI:SRA:Segment)LABEL_SEG",
+    "(ascii)LABEL",
+    "(INSDC:SRA:read_filter)READ_FILTER",
+    "(ascii)SPOT_GROUP",
+
+    "(INSDC:dna:text)READ",
+    "(INSDC:quality:phred)QUALITY"
+};
+
+static
+rc_t get_default_columns ( sradump_parms *pb, const SRATable *tbl )
+{
+    const SRAColumn *col;
+    rc_t rc = SRATableOpenColumnRead ( tbl, & col, "PLATFORM", sra_platform_id_t );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to determine table platform" );
+    else
+    {
+        const void *base;
+        bitsz_t boff, row_bits;
+        rc = SRAColumnRead ( col, 1, & base, & boff, & row_bits );
+        if ( rc != 0 )
+            LOGERR ( klogInt, rc, "failed to read table platform" );
+        else if ( boff != 0 || ( row_bits & 7 ) != 0 )
+        {
+            rc = RC ( rcExe, rcColumn, rcReading, rcData, rcCorrupt );
+            PLOGERR ( klogInt,  (klogInt, rc, "bit offset $(boff), row bits $(bits)",
+                                 "boff=%u,bits=%u", ( uint32_t ) boff, ( uint32_t ) row_bits ));
+        }
+        else
+        {
+            const uint8_t *platform_id = base;
+            switch ( platform_id [ 0 ] )
+            {
+            case SRA_PLATFORM_UNDEFINED:
+                rc = RC ( rcExe, rcTable, rcReading, rcType, rcInvalid );
+                LOGERR ( klogInt, rc, "table platform undefined" );
+                break;
+            case SRA_PLATFORM_454:
+                pb -> columns = s_454_default;
+                pb -> column_cnt = sizeof s_454_default / sizeof s_454_default [ 0 ];
+                break;
+            case SRA_PLATFORM_ILLUMINA:
+                pb -> columns = s_Illumina_default;
+                pb -> column_cnt = sizeof s_Illumina_default / sizeof s_Illumina_default [ 0 ];
+                break;
+            case SRA_PLATFORM_ABSOLID:
+                pb -> columns = s_ABI_default;
+                pb -> column_cnt = sizeof s_ABI_default / sizeof s_ABI_default [ 0 ];
+                break;
+            default:
+                pb -> columns = s_fastq_default;
+                pb -> column_cnt = sizeof s_fastq_default / sizeof s_fastq_default [ 0 ];
+            }
+        }
+
+        SRAColumnRelease ( col );
+    }
+
+    return rc;
+}
+
+
+typedef struct basetype basetype;
+struct basetype
+{
+    BSTNode n;
+    void ( * dump ) ( const void *base, bitsz_t row_bits );
+    uint32_t type_id;
+};
+
+static
+void CC basetype_whack ( BSTNode *n, void *ignore )
+{
+    free ( n );
+}
+
+static
+int64_t CC basetype_cmp ( const void *item, const BSTNode *n )
+{
+    const VTypedecl *td = item;
+    const basetype *bt = ( const basetype* ) n;
+
+    return (int64_t) td -> type_id - (int64_t) bt -> type_id;
+}
+
+static
+int64_t CC basetype_sort ( const BSTNode *item, const BSTNode *n )
+{
+    const basetype *td = ( const basetype* ) item;
+    const basetype *bt = ( const basetype* ) n;
+
+    return (int64_t) td -> type_id - (int64_t) bt -> type_id;
+}
+
+static
+rc_t build_basetypes ( BSTree *ttree, const VDatatypes *dt )
+{
+    struct
+    {
+        const char *name;
+        void ( * dump ) ( const void *base, bitsz_t row_bits );
+    }
+    types [] =
+    {
+        { "I8", dump_I8 },
+        { "U8", dump_U8 },
+        { "I16", dump_I16 },
+        { "U16", dump_U16 },
+        { "I32", dump_I32 },
+        { "U32", dump_U32 },
+        { "I64", dump_I64 },
+        { "U64", dump_U64 },
+        { "F32", dump_F32 },
+        { "F64", dump_F64 },
+        { "utf8", dump_text },
+        { "ascii", dump_text },
+
+        /* special case types */
+        { "INSDC:SRA:platform_id", dump_platform },
+        { "NCBI:SRA:platform_id", dump_platform },
+        { "INSDC:SRA:xread_type", dump_readtype },
+        { "INSDC:SRA:read_type", dump_readtype },
+        { "NCBI:SRA:read_type", dump_readtype },
+        { "INSDC:SRA:read_filter", dump_readfilt },
+        { "NCBI:SRA:read_filter", dump_readfilt }
+    };
+
+    rc_t rc;
+    uint32_t i, count = sizeof types / sizeof types [ 0 ];
+
+    BSTreeInit ( ttree );
+
+    for ( rc = 0, i = 0; i < count; ++ i )
+    {
+        VTypedef def;
+        basetype *bt = malloc ( sizeof * bt );
+        if ( bt == NULL )
+        {
+            rc = RC ( rcExe, rcType, rcAllocating, rcMemory, rcExhausted );
+            LOGERR ( klogSys, rc, "failed to populate basetypes table" );
+            break;
+        }
+        rc = VDatatypesResolveTypename ( dt, & def, types [ i ] . name );
+        if ( rc != 0 )
+        {
+            free ( bt );
+            PLOGERR ( klogInt,  (klogInt, rc, "failed to resolve typename '$(typename)'",
+                                 "typename=%s", types [ i ] . name ));
+            break;
+        }
+
+        bt -> dump = types [ i ] . dump;
+        bt -> type_id = def . type_id;
+
+        BSTreeInsert ( ttree, & bt -> n, basetype_sort );
+    }
+
+    return rc;
+}
+
+static
+rc_t open_column ( const VDatatypes *dt, const SRATable *tbl,
+    const BSTree *ttree, column_map *cm, const char *colspec )
+{
+    rc_t rc;
+    VTypedef def;
+
+    int len;
+    const char *iname;
+    char inamebuff [ 128 ];
+
+    /* convert column spec to typedecl and name */
+    char tdbuffer [ 128 ];
+    const char *typedecl = NULL;
+    const char *end = strchr ( colspec, ')' );
+    if ( end != NULL )
+    {
+        const char *begin = strchr ( colspec, '(' );
+        if ( begin != NULL && begin < end )
+        {
+            /* the colspec is now the name */
+            colspec = end;
+
+            /* trim whitespace */
+            while ( isspace ( ( ++ colspec ) [ 0 ] ) )
+                ( void ) 0;
+            while ( ++ begin < end && isspace ( begin [ 0 ] ) )
+                ( void ) 0;
+            while ( begin < end && isspace ( end [ -1 ] ) )
+                -- end;
+
+            /* create a copy to allow for a NUL byte */
+            len = snprintf ( tdbuffer, sizeof tdbuffer,
+                "%.*s", ( int ) ( end - begin ), begin );
+            if ( len < 0 || len >= sizeof tdbuffer )
+            {
+                rc = RC ( rcExe, rcColumn, rcOpening, rcString, rcExcessive );
+                return rc;
+            }
+
+            typedecl = tdbuffer;
+        }
+    }
+
+    /* convert name to iname and extname */
+    iname = colspec;
+    colspec = strchr ( colspec, ':' );
+    if ( colspec == NULL )
+        colspec = iname;
+    else
+    {
+        len = snprintf ( inamebuff, sizeof inamebuff, "%.*s",
+                         ( int ) ( colspec - iname ), iname );
+        if ( len < 0 || len >= sizeof inamebuff )
+        {
+            rc = RC ( rcExe, rcColumn, rcOpening, rcString, rcExcessive );
+            return rc;
+        }
+
+        iname = inamebuff;
+        ++ colspec;
+    }
+
+    /* record the name */
+    cm -> name = colspec;
+
+    /* open the column */
+    rc = SRATableOpenColumnRead ( tbl, & cm -> col, iname, typedecl );
+    if ( rc != 0 )
+        return rc;
+
+    /* read its datatype */
+    rc = SRAColumnDatatype ( cm -> col, & cm -> td, & def );
+    if ( rc == 0 )
+    {
+        const basetype *bt;
+
+        /* get its element size */
+        cm -> elem_size = VTypedefSizeof ( & def ) * cm -> td . dim;
+
+        /* try to find the actual type */
+        bt = ( const basetype* ) BSTreeFind ( ttree, & cm -> td, basetype_cmp );
+        if ( bt == NULL )
+        {
+            /* find the intrinsic type
+               NB - this code treats ascii as intrinsic */
+            rc = VDatatypesToIntrinsic ( ( const VDatatypes*) SRATableGetSchema(tbl), & cm -> td );
+            if ( rc == 0 )
+                bt = ( const basetype* ) BSTreeFind ( ttree, & cm -> td, basetype_cmp );
+        }
+         
+        if ( bt == NULL )
+            rc = RC ( rcExe, rcColumn, rcOpening, rcType, rcUnsupported );
+        else
+        {
+            cm -> dump = bt -> dump;
+            return 0;
+        }
+    }
+
+    SRAColumnRelease ( cm -> col );
+    cm -> col = NULL;
+    return rc;
+}
+
+static
+rc_t sra_dump ( sradump_parms *pb, const VDatatypes *dt, const SRATable *tbl )
+{
+    BSTree ttree;
+    rc_t rc = build_basetypes ( & ttree, dt );
+    if ( rc == 0 )
+    {
+        if ( pb -> column_cnt == 0 )
+            rc = get_default_columns ( pb, tbl );
+        if ( rc == 0 )
+        {
+            uint32_t count = pb -> column_cnt;
+            const char **columns = pb -> columns;
+            column_map *cm = malloc ( sizeof * cm * count );
+            if ( cm == NULL )
+                rc = RC ( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
+            else
+            {
+
+                uint32_t i;
+                uint32_t count2 = count;
+                
+                for ( i = count = 0; rc == 0 && i < count2; ++ i )
+                {
+                    rc = open_column ( dt,  tbl, & ttree, & cm [ count ], columns [ i ] );
+                    if ( rc == 0 )
+                        ++ count;
+                    else switch ( GetRCState ( rc ) )
+                    {
+                    case rcNotFound:
+                    case rcUnsupported:
+                    case rcExcessive:
+                        rc = 0;
+                        break;
+                    default:
+                        break;
+                    }
+                }
+
+                if ( rc == 0 )
+                {
+                    spotid_t max_spot;
+                    rc = SRATableMaxSpotId ( tbl, & max_spot );
+                    if ( rc != 0 )
+                        LOGERR ( klogInt, rc, "failed to read max spot id" );
+                    else
+                    {
+                        if ( pb -> start == 0 )
+                            pb -> start = 1;
+                        if ( pb -> stop == 0 || pb -> stop > max_spot )
+                            pb -> stop = max_spot;
+
+                        rc = dump_table ( pb, cm, count );
+                    }
+                }
+
+                for ( i = 0; i < count; ++ i )
+                    SRAColumnRelease ( cm [ i ] . col );
+
+                free (cm);
+            }
+        }
+
+        BSTreeWhack ( & ttree, basetype_whack, NULL );
+    }
+    return rc;
+}
+
+static
+rc_t run ( sradump_parms *pb )
+{
+    const SRAMgr *mgr;
+    rc_t rc = SRAMgrMakeRead ( & mgr );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to open SRAMgr" );
+    else
+    {
+        const VDatatypes *dt;
+        rc = SRAMgrOpenDatatypesRead ( mgr, & dt );
+        if ( rc != 0 )
+            LOGERR ( klogInt, rc, "failed to open VDatatypes" );
+        else
+        {
+            const SRATable *tbl;
+            rc = SRAMgrOpenTableRead ( mgr, & tbl, "%s", pb -> src_path );
+            if ( rc != 0 )
+                PLOGERR ( klogInt,
+                          ( klogInt, rc, "failed to open SRATable '$(spec)'", "spec=%s", pb -> src_path));
+            else
+            {
+                rc = sra_dump ( pb, dt, tbl );
+                SRATableRelease ( tbl );
+            }
+
+            VDatatypesRelease ( dt );
+        }
+
+        SRAMgrRelease ( mgr );
+    }
+
+    return rc;
+}
+
+/* Usage
+ */
+static
+KLogLevel default_log_level;
+
+
+#define OPTION_START "start"
+#define OPTION_STOP  "stop"
+#define ALIAS_START ""
+#define ALIAS_STOP  ""
+
+static const
+char * start_usage[] =
+{
+    "beginning spot id (default 1)", NULL
+};
+
+
+static const
+char * stop_usage[] =
+{
+    "ending spot id (default max)", NULL
+};
+
+
+static
+OptDef Options[] = 
+{
+    { OPTION_START, ALIAS_START, NULL, start_usage, 1, true, false},
+    { OPTION_STOP,  ALIAS_STOP,  NULL, stop_usage,  1, true, false}
+};
+    
+   
+const char UsageDefaultName[] = "sra-dump";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [ options ] table [ column-spec ... ]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Dump all data in table for specified or all columns\n"
+                    "\n", progname );
+}
+
+static
+const char * name_param[] =
+{
+    "NAME", "simple column name", NULL
+};
+
+
+static
+const char * typedecl_param[] =
+{
+    "(typedecl)NAME", "specifically typed column name", NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    OUTMSG (( "Options:\n" ));
+
+    OUTMSG (("table:\n"
+	     "  path to table or accession id within NCBI\n"
+             "\n"
+             "column-spec:\n"));
+
+    HelpParamLine (name_param[0], name_param+1);
+    HelpParamLine (typedecl_param[0], typedecl_param+1);
+
+    OUTMSG (( "\nOptions:\n" ));
+
+    HelpOptionLine (ALIAS_START, OPTION_START, "ID", start_usage);
+
+    HelpOptionLine (ALIAS_STOP, OPTION_STOP, "ID", stop_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    default_log_level = KLogLevelGet();
+
+    rc = KStsHandlerSetStdErr();
+    if (rc)
+        return rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc == 0)
+    {
+        do
+        {
+            uint32_t pcount;
+
+            sradump_parms pb;
+
+            memset (&pb, 0, sizeof pb);
+
+            rc = ArgsOptionCount (args, OPTION_START, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 1)
+            {
+                const char * pc;
+
+                rc = ArgsOptionValue (args, OPTION_START, 0, (const void **)&pc);
+                if (rc)
+                    break;
+
+                pb.start = AsciiToU32 (pc, NULL, NULL);
+            }
+
+            rc = ArgsOptionCount (args, OPTION_STOP, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 1)
+            {
+                const char * pc;
+
+                rc = ArgsOptionValue (args, OPTION_STOP, 0, (const void **)&pc);
+                if (rc)
+                    break;
+
+                pb.stop = AsciiToU32 (pc, NULL, NULL);
+            }
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 0) {
+                OUTMSG (("missing source table\n"));
+                rc = MiniUsage (args);
+                ArgsWhack(args);
+                exit(EXIT_FAILURE);
+            }
+
+            rc = ArgsParamValue (args, 0, (const void **)&pb.src_path);
+            if (rc)
+                break;
+
+            pb.column_cnt = pcount - 1; /* pcount is used below */
+
+            if (pb.column_cnt) {
+                pb.columns = malloc (pb.column_cnt * sizeof (const char *));
+                if (pb.columns == NULL)
+                    rc = RC (rcExe, rcArgv, rcParsing, rcMemory, rcExhausted);
+            }
+            else
+                pb.columns = NULL;
+
+            {
+                uint32_t ix;
+                const char ** ppc;
+
+                ppc = pb.columns;
+                for (ix = 1; ix < pcount; ix++)
+                {
+                    rc = ArgsParamValue (args, ix, (const void **)ppc);
+                    if (rc)
+                        break;
+                    ppc++;
+                }
+
+                if (rc == 0)
+                {
+                    rc = run (&pb);
+                }
+
+                if ( pcount != 1 )
+                    /* brain damaged windows compiler warned about next line */
+                    free ( (void*)pb.columns );
+            }
+        } while (0);
+ 
+        ArgsWhack (args);
+    }
+    return rc;
+}
+
+
diff --git a/tools/sra-load/Makefile b/tools/sra-load/Makefile
new file mode 100644
index 0000000..2426b09
--- /dev/null
+++ b/tools/sra-load/Makefile
@@ -0,0 +1,209 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-load
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	fastq-load \
+	illumina-load \
+	srf-load \
+	abi-load \
+	sff-load \
+	helicos-load \
+	pacbio-loadxml
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (1,$(HAVE_XML2))
+
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+else
+
+all std: $(ALL_TOOLS)
+
+$(ALL_TOOLS):
+	@ echo "NOTE - $(@F) cannot be built:"                          \
+	       "It requires our internal library 'libkxml'"             \
+	       "which requires 'libxml2' and its development headers."
+endif
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# loader
+#
+LOADER_SRC = \
+	pstring \
+	common-xml \
+	experiment-xml \
+	run-xml \
+	loader-file \
+	loader-fmt \
+	sra-writer \
+	loader
+
+LOADER_OBJ = \
+	$(addsuffix .$(OBJX),$(LOADER_SRC))
+
+LIBXML = -lkxfs -lkxml -lxml2
+
+LOADER_LIB = \
+	-lkapp \
+	-stk-version \
+	-lload \
+	-sncbi-wvdb \
+	$(LIBXML) \
+	-lm
+
+
+#------------------------------------------------------------------------------
+# sff-load
+#
+SFF_LOAD_SRC = \
+	$(LOADER_SRC) \
+	writer-454 \
+	writer-ion-torrent \
+	sff-fmt
+
+SFF_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(SFF_LOAD_SRC))
+
+$(BINDIR)/sff-load: $(SFF_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# fastq-load
+#
+FASTQ_LOAD_SRC = \
+	$(LOADER_SRC) \
+	writer-illumina \
+	writer-454 \
+	writer-ion-torrent \
+	fastq-fmt
+
+FASTQ_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_LOAD_SRC))
+
+$(BINDIR)/fastq-load: $(FASTQ_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# srf-load
+#
+SRF_LOAD_SRC = \
+	$(LOADER_SRC) \
+	srf \
+	srf-fmt \
+	writer-illumina \
+	ztr-illumina \
+	srf-illumina \
+	writer-absolid \
+	ztr-absolid \
+	ztr-huffman \
+	srf-absolid
+
+SRF_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(SRF_LOAD_SRC))
+
+$(BINDIR)/srf-load: $(SRF_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# abi-load
+#
+ABSOLID_LOAD_SRC = \
+	$(LOADER_SRC) \
+	writer-absolid \
+	absolid-fmt
+
+ABSOLID_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(ABSOLID_LOAD_SRC))
+
+$(BINDIR)/abi-load: $(ABSOLID_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# illumina-load
+#
+ILLUMINA_LOAD_SRC = \
+	$(LOADER_SRC) \
+	writer-illumina \
+	illumina-fmt
+
+ILLUMINA_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(ILLUMINA_LOAD_SRC))
+
+$(BINDIR)/illumina-load: $(ILLUMINA_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# helicos-load
+#
+HELICOS_LOAD_SRC = \
+	$(LOADER_SRC) \
+	writer-helicos \
+	helicos-fmt
+
+HELICOS_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(HELICOS_LOAD_SRC))
+
+$(BINDIR)/helicos-load: $(HELICOS_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
+
+#------------------------------------------------------------------------------
+# pacbio-loadxml
+#
+PACBIO_LOADXML_SRC = \
+	$(LOADER_SRC) \
+	pacbio-fmt
+
+PACBIO_LOADXML_OBJ = \
+	$(addsuffix .$(OBJX),$(PACBIO_LOADXML_SRC))
+
+$(BINDIR)/pacbio-loadxml: $(PACBIO_LOADXML_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(LOADER_LIB)
diff --git a/tools/sra-load/absolid-fmt.c b/tools/sra-load/absolid-fmt.c
new file mode 100644
index 0000000..5490cc9
--- /dev/null
+++ b/tools/sra-load/absolid-fmt.c
@@ -0,0 +1,573 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/main.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <os-native.h>
+
+typedef struct AbiLoaderFmt AbiLoaderFmt;
+#define SRALOADERFMT_IMPL AbiLoaderFmt
+#include "loader-fmt.h"
+
+#include "pstring.h"
+#include "writer-absolid.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <assert.h>
+
+typedef enum EFileType_enum {
+    eNotSet = -1,
+    eCSFasta,
+    eQuality,
+    eSignalFTC,
+    eSignalCY3,
+    eSignalTXR,
+    eSignalCY5,
+    eFileTypeMax
+} EFileType;
+
+typedef struct AbiFileInfo_struct {
+    /* parsed data from file for a single spot */
+    bool ready; /* if data is filled from file */
+    /* header */
+    EFileType file_type;
+    pstring name_prefix;
+    /* spot data */
+    EAbisolidReadType read_type;
+    pstring name; /* name suffix */
+    long coord[3]; /* panel, x, y - sort-merge keys */
+    pstring data;
+    char cs_key; /* only for csfasta file type */
+
+    const SRALoaderFile* file;
+    /* file line buffer */
+    const char* line; /* not NULL if contains unprocessed data */
+    size_t line_len;
+} AbiFileInfo;
+
+struct AbiLoaderFmt {
+    SRALoaderFmt dad;
+    bool skip_signal;
+    const SRAWriteAbsolid* writer;
+    AbsolidRead read[ABSOLID_FMT_MAX_NUM_READS];
+};
+
+static
+void AbiFileInfo_init(AbiFileInfo* file)
+{
+    file->ready = false;
+    file->read_type = eAbisolidReadType_Unknown;
+    pstring_clear(&file->name);
+    memset(file->coord, 0, sizeof(file->coord));
+    pstring_clear(&file->data);
+    file->cs_key = '\0';
+}
+
+/* reads 1 line from given file
+ * if file->line pointer is not NULL line is in buffer already, nothing is read
+ * failes on error or if line empty and not optional
+ */
+static
+rc_t file_read_line(AbiFileInfo* file, bool optional)
+{
+    rc_t rc = 0;
+
+    if( file->line == NULL ) {
+        if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
+            if( file->line == NULL || file->line_len == 0 ) {
+                if( !optional ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcString, rcInsufficient);
+                }
+            }
+            if( rc == 0 && file->line != NULL ) {
+                if( file->line_len > 0 ) {
+                    const char* e = file->line + file->line_len;
+                    /* right trim */
+                    while( --e >= file->line ) {
+                        if( !isspace(*e) ) {
+                            break;
+                        }
+                        file->line_len--;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static
+bool is_csfasta(const char* str, const size_t len)
+{
+    const char* s = str, *end = s + len;
+
+    if( s == end || strchr("ACGTacgt", *s++) == NULL ) {
+        return false;
+    }
+    while( s != end ) {
+        if( strchr("0123.", *s++) == NULL ) {
+            return false;
+        }
+    }
+    return true;
+}
+
+static
+bool is_quality(const char* str, const size_t len)
+{
+    const char* s = str, *end = s + len;
+
+    while( s != end ) {
+        if( strchr("-+0123456789 ", *s++) == NULL ) {
+            return false;
+        }
+    }
+    return len != 0;
+}
+
+static
+bool is_signal(const char* str, const size_t len)
+{
+    const char* s = str, *end = s + len;
+
+    while( s != end ) {
+        if( strchr("-+.0123456789Ee ", *s++) == NULL ) {
+            return false;
+        }
+    }
+    return len != 0;
+}
+
+static
+rc_t read_signal(const char* data, size_t data_sz, pstring* str)
+{
+    rc_t rc = 0;
+    double d;
+    const char* c = data, *end = data + data_sz;
+
+    pstring_clear(str);
+    while( rc == 0 && c != end ) {
+        char* next;
+        errno = 0;
+        d = strtod(c, &next);
+        if( errno != 0 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcOutofrange);
+        } else if( d == 0 && c == next ) {
+            break;
+        } else {
+            float f = d;
+            c = next;
+            rc = pstring_append(str, &f, sizeof(f));
+        }
+    }
+    return rc;
+}
+
+static
+rc_t parse_suffix(const char* s, size_t len, AbiFileInfo* file)
+{
+    rc_t rc = 0;
+    int i;
+    const char* p = s, *end = p + len;
+    
+    assert(s && file);
+    while( isspace(*p) && p < end ) { ++p; }
+    if( (rc = pstring_assign(&file->name, p, end - p)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading name");
+    }
+    if( file->name.len <= 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcFile, rcInvalid);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=expected not empty name after '>'");
+    }
+    p = strrchr(file->name.data, '_');
+    if( p != NULL ) {
+        file->read_type = AbsolidRead_Suffix2ReadType(p + 1);
+    } else {
+        file->read_type = eAbisolidReadType_Unknown;
+    }
+    /* in native form each file has single read: 1st or 2nd. Can't be whole spot, so label must be always found */
+    if( file->read_type <= eAbisolidReadType_SPOT ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "read name suffix is not recognized: '$(name)'", "name=%.*s",
+                                 file->name.len, file->name.data);
+    }
+    file->name.len -= strlen(AbisolidReadType2ReadLabel[file->read_type]) + 1;
+    /* try to get panel, x, y from name, format: \D*(\d+)\D+(\d+)\D+(\d+) */
+    p = file->name.data + file->name.len;
+    for(i = 2; rc == 0 && i >= 0; i--) {
+        /* reverse parse */
+        while( !isdigit(*--p) && p >= file->name.data );
+        while( isdigit(*--p) && p >= file->name.data );
+        errno = 0;
+        file->coord[i] = strtol(p + 1, NULL, 10);
+        if( errno != 0 ) {
+            file->coord[i] =  0;
+        }
+    }
+    return rc;
+}
+
+/* reads from a file data for a sinlge spot, data may be partial */
+static
+rc_t read_next_spot(AbiLoaderFmt* self, AbiFileInfo* file)
+{
+    rc_t rc = 0;
+
+    if( file->ready ) {
+        /* data still not used */
+        return 0;
+    }
+    AbiFileInfo_init(file);
+    do {
+        if( (rc = file_read_line(file, true)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading more data");
+        } else if( file->line == NULL ) {
+            return 0; /* eof */
+        }
+        if( file->line[0] != '#' ) {
+            break;
+        } else {
+            const char* p = file->line, *end = p + file->line_len;
+            while( isspace(*++p) && p < end );
+            if( strncasecmp(p, "Title:", 6) == 0 ) {
+                p += 5;
+                while( isspace(*++p) && p < end );
+                if( p < end ) {
+                    if( (rc = pstring_assign(&file->name_prefix, p, end - p)) != 0 ){
+                        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading Title");
+                    }
+                }
+            }
+            file->line = NULL;
+        }
+    } while( true );
+    if( file->line[0] != '>' ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcFile, rcInvalid);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=expected '>'");
+    } else {
+        if( (rc = parse_suffix(&file->line[1], file->line_len - 1, file)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading name suffix");
+        }
+        file->line = NULL;
+        if( (rc = file_read_line(file, false)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading data line");
+        }
+        if( file->file_type == eNotSet ) {
+            if( is_csfasta(file->line, file->line_len) ) {
+                file->file_type = eCSFasta;
+            } else if( is_quality(file->line, file->line_len) ) {
+                file->file_type = eQuality;
+            } else if( is_signal(file->line, file->line_len) ) {
+                const char* fname, *p;
+                if( (rc = SRALoaderFileName(file->file, &fname)) != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=file name");
+                }
+                /* skip path if present */
+                p = strrchr(fname, '/');
+                p = p ? p : fname;
+                if( strstr(p, "FTC") != NULL ) {
+                    file->file_type = eSignalFTC;
+                } else if( strstr(p, "CY3") != NULL ) {
+                    file->file_type = eSignalCY3;
+                } else if( strstr(p, "TXR") != NULL ) {
+                    file->file_type = eSignalTXR;
+                } else if( strstr(p, "CY5") != NULL ) {
+                    file->file_type = eSignalCY5;
+                } else {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=signal type by file name");
+                }
+            } else {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading data line");
+            }
+        }
+        switch( file->file_type ) {
+            case eCSFasta:
+                if( !is_csfasta(file->line, file->line_len) ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading csfasta");
+                }
+                file->cs_key = file->line[0];
+                if( (rc = pstring_assign(&file->data, &file->line[1], file->line_len - 1)) != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=copying csfasta");
+                }
+                break;
+            case eQuality:
+                if( (rc = pstring_assign(&file->data, file->line, file->line_len) != 0 ) ||
+                    (rc = pstring_quality_convert(&file->data, eExperimentQualityEncoding_Decimal, 0, -1, 0x7F)) != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting quality");
+                }
+                break;
+            case eSignalFTC:
+            case eSignalCY3:
+            case eSignalTXR:
+            case eSignalCY5:
+                if( (rc = read_signal(file->line, file->line_len, &file->data)) != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting signal");
+                }
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcReading, rcFileFormat, rcUnknown);
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=processing data line");
+                break;
+        }
+        file->line = NULL;
+        file->ready = true;
+    }
+#if _DEBUGGING
+    DEBUG_MSG(3, ("READ: type:%i, pfx:%s, rd_typ:%s, name:'%s', %li:%li:%li",
+                  file->file_type, file->name_prefix.data, AbisolidReadType2ReadLabel[file->read_type],
+                  file->name.data, file->coord[0], file->coord[1], file->coord[2]));
+    if( file->cs_key ) {
+        DEBUG_MSG(3, (", cs_key %c, data [%u] '%.*s'\n",
+                      file->cs_key, file->data.len, file->data.len, file->data.data));
+    } else {
+        DEBUG_MSG(3, (", data length: %u\n", file->data.len));
+    }
+#endif
+    return 0;
+}
+
+static
+rc_t AbiLoaderFmt_WriteData(AbiLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t i, origin;
+    AbiFileInfo* files = NULL;
+    bool done;
+    pstring spotname;
+
+    if( (files = calloc(argc, sizeof(*files))) == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcInsufficient);
+    }
+    for(i = 0; rc == 0 && i < argc; i++) {
+        AbiFileInfo* file = &files[i];
+        AbiFileInfo_init(file);
+        file->file = argv[i];
+        file->file_type = eNotSet;
+    }
+    do {
+        done = true;
+        for(i = 0; rc == 0 && i < argc; i++) {
+            AbiFileInfo* file = &files[i];
+            if( (rc = read_next_spot(self, file)) != 0 || !file->ready ) {
+                continue;
+            }
+            done = false;
+        }
+        if( rc != 0 || done ) {
+            break;
+        }
+        /* find read with min coords */
+        origin = argc;
+        for(i = 0; i < argc; i++) {
+            AbiFileInfo* file = &files[i];
+            if( file->ready && (origin == argc ||
+                                file->coord[0] < files[origin].coord[0] ||
+                                (file->coord[0] == files[origin].coord[0] &&
+                                 file->coord[1] < files[origin].coord[1]) ||
+                                (file->coord[0] == files[origin].coord[0] &&
+                                 file->coord[1] == files[origin].coord[1] &&
+                                 file->coord[2] < files[origin].coord[2]) ) ) {
+                origin = i;
+            }
+        }
+        assert(origin != argc);
+        /* collect spot reads, matching by spot name
+         * spot data may be split across multiple files
+         */
+        for(i = 0; i < sizeof(self->read) / sizeof(self->read[0]); i++) {
+            AbsolidRead_Init(&self->read[i]);
+        }
+        rc = SRAWriteAbsolid_MakeName(&files[origin].name_prefix, &files[origin].name, &spotname);
+        for(i = 0; rc == 0 && i < argc; i++) {
+            AbiFileInfo* file = &files[i];
+            if( file->ready ) {
+                pstring tmpname;
+                if( (rc = SRAWriteAbsolid_MakeName(&file->name_prefix, &file->name, &tmpname)) == 0 ) {
+                    if( pstring_cmp(&spotname, &tmpname) == 0 ) {
+                        int read_number = AbisolidReadType2ReadNumber[file->read_type];
+                        switch( file->file_type ) {
+                            case eNotSet:
+                            case eFileTypeMax:
+                                rc = RC(rcSRA, rcFormatter, rcReading, rcFileFormat, rcUnknown);
+                                SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=merging spot data");
+                                break;
+                            case eCSFasta:
+                                if( self->read[read_number].seq.len > 0 ) {
+                                    rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                    SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=sequence");
+                                } else {
+                                    self->read[read_number].cs_key = file->cs_key;
+                                    rc = pstring_copy(&self->read[read_number].seq, &file->data);
+                                }
+                                break;
+                            case eQuality:
+                                if( self->read[read_number].qual.len > 0 ) {
+                                    rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                    SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=quality");
+                                } else {
+                                    rc = pstring_copy(&self->read[read_number].qual, &file->data);
+                                }
+                                break;
+                            case eSignalFTC:
+                                if( !self->skip_signal ) {
+                                    if( self->read[read_number].fxx.len > 0 ) {
+                                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                        SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=FTC");
+                                    } else {
+                                        self->read[read_number].fs_type = eAbisolidFSignalType_FTC;
+                                        rc = pstring_copy(&self->read[read_number].fxx, &file->data);
+                                    }
+                                }
+                                break;
+                            case eSignalCY3:
+                                if( !self->skip_signal ) {
+                                    if( self->read[read_number].cy3.len > 0 ) {
+                                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                        SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=CY3");
+                                    } else {
+                                        rc = pstring_copy(&self->read[read_number].cy3, &file->data);
+                                    }
+                                }
+                                break;
+                            case eSignalTXR:
+                                if( !self->skip_signal ) {
+                                    if( self->read[read_number].txr.len > 0 ) {
+                                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                        SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=TXR");
+                                    } else {
+                                        rc = pstring_copy(&self->read[read_number].txr, &file->data);
+                                    }
+                                }
+                                break;
+                            case eSignalCY5:
+                                if( !self->skip_signal ) {
+                                    if( self->read[read_number].cy5.len > 0 ) {
+                                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                                        SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=CY5");
+                                    } else {
+                                        rc = pstring_copy(&self->read[read_number].cy5, &file->data);
+                                    }
+                                }
+                                break;
+                        }
+                        if( rc == 0 ) {
+                            const char* l = AbisolidReadType2ReadLabel[file->read_type];
+                            rc = pstring_assign(&self->read[read_number].label, l, strlen(l));
+                        }
+                        file->ready = false;
+                    }
+                }
+            }
+        }
+        /* replace -1 quality for '.' to 0 */
+        for(i = 0; rc == 0 && i < ABSOLID_FMT_MAX_NUM_READS; i++) {
+            int j;
+            for(j = 0; rc == 0 && j < self->read[i].qual.len; j++ ) {
+                if( self->read[i].qual.data[j] == -1 ) {
+                    if( self->read[i].seq.data[j] == '.' ) {
+                        self->read[i].qual.data[j] = 0;
+                    } else {
+                        SRALoaderFile_LOG(files[0].file, klogErr, rc, "$(msg)", "msg=quality is -1 not for '.'");
+                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+                    }
+                }
+            }
+        }
+        if( rc == 0 ) {
+            rc = SRAWriteAbsolid_Write(self->writer, argv[0], &spotname, NULL,
+                                       self->read[0].label.len > 0 ? &self->read[0] : NULL,
+                                       self->read[1].label.len > 0 ? &self->read[1] : NULL);
+        }
+    } while( rc == 0 );
+    free(files);
+    return rc;
+}
+
+static
+rc_t AbiLoaderFmt_Whack(AbiLoaderFmt *self, SRATable** table)
+{
+    SRAWriteAbsolid_Whack(self->writer, table);
+    free(self);
+    return 0;
+}
+
+const char UsageDefaultName[] = "abi-load";
+
+static
+rc_t AbiLoaderFmt_Version (const AbiLoaderFmt* self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "AB SOLiD native";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 vtAbiLoaderFmt =
+{
+    1, 0,
+    AbiLoaderFmt_Whack,
+    AbiLoaderFmt_Version,
+    NULL,
+    AbiLoaderFmt_WriteData
+};
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    AbiLoaderFmt* fmt;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    *self = NULL;
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( (rc = SRAWriteAbsolid_Make(&fmt->writer, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize writer");
+    } else if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&vtAbiLoaderFmt)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    }
+    /* Set result or free obj */
+    if( rc != 0 ) {
+        AbiLoaderFmt_Whack(fmt, NULL);
+    } else {
+        fmt->skip_signal = (config->columnFilter & (efltrSIGNAL | efltrDEFAULT));
+        *self = &fmt->dad;
+    }
+    return rc;
+}
diff --git a/tools/sra-load/common-xml.c b/tools/sra-load/common-xml.c
new file mode 100644
index 0000000..5c9439d
--- /dev/null
+++ b/tools/sra-load/common-xml.c
@@ -0,0 +1,871 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/container.h>
+#include <sra/types.h>
+#include <os-native.h>
+
+#include "common-xml.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+static
+rc_t parse_READ_LABEL(const KXMLNode* READ_SPEC, ReadSpecXML_read* read)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+
+    if( (rc = KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "READ_LABEL")) == 0 ) {
+        rc = KXMLNodeReadCStr(node, &read->read_label, NULL);
+        if( rc != 0 ) {
+            LOGERR(klogErr, rc, "READ_LABEL");
+        } else if( strlen(read->read_label) == 0 ) {
+            free(read->read_label);
+            read->read_label = NULL;
+        }
+        KXMLNodeRelease(node);
+    } else {
+        /* label is optional */
+        rc = 0;
+    }
+    return rc;
+}
+
+static
+rc_t parse_READ_CLASS(const KXMLNode* READ_SPEC, ReadSpecXML_read* read)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+    char* rclass = NULL;
+
+    if( (rc = KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "READ_CLASS")) == 0 ) {
+        rc = KXMLNodeReadCStr(node, &rclass, NULL);
+        KXMLNodeRelease(node);
+    }
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "READ_CLASS");
+    } else if( strcmp(rclass, "Application Read") == 0 ) {
+        read->read_class = SRA_READ_TYPE_BIOLOGICAL;
+    } else if( strcmp(rclass, "Technical Read") == 0 ) {
+        read->read_class = SRA_READ_TYPE_TECHNICAL;
+    } else {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "READ_CLASS: $(c)", PLOG_S(c), rclass));
+    }
+    free(rclass);
+    return rc;
+}
+
+static
+rc_t parse_READ_TYPE(const KXMLNode* READ_SPEC, ReadSpecXML_read* read)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+    char* rtype = NULL;
+
+    if( (rc = KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "READ_TYPE")) == 0 ) {
+        rc = KXMLNodeReadCStr(node, &rtype, "Forward");
+        KXMLNodeRelease(node);
+    }
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "READ_TYPE");
+    } else if( strcmp(rtype, "Forward") == 0 ) {
+        read->read_type = rdsp_Forward_rt;
+    } else if( strcmp(rtype, "Reverse") == 0 ) {
+        read->read_type = rdsp_Reverse_rt;
+    } else if( strcmp(rtype, "Adapter") == 0 ) {
+        read->read_type = rdsp_Adapter_rt;
+    } else if( strcmp(rtype, "Primer") == 0 ) {
+        read->read_type = rdsp_Primer_rt;
+    } else if( strcmp(rtype, "Linker") == 0 ) {
+        read->read_type = rdsp_Linker_rt;
+    } else if( strcmp(rtype, "BarCode") == 0 ) {
+        read->read_type = rdsp_BarCode_rt;
+    } else if( strcmp(rtype, "Other") == 0 ) {
+        read->read_type = rdsp_Other_rt;
+    } else {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "READ_CLASS: $(c)", PLOG_S(c), rtype));
+    }
+    free(rtype);
+    return rc;
+}
+
+static
+rc_t parse_RELATIVE_ORDER(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t* counter)
+{
+    rc_t rc1 = 0, rc2 = 0;
+    const KXMLNode *node = NULL;
+
+    if( KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "RELATIVE_ORDER") != 0 ) {
+        return 0;
+    }
+    *counter = *counter + 1;
+    read->coord.relative_order.follows = -1; /* not set */
+    read->coord.relative_order.precedes = -1; /* not set */
+    rc1 = KXMLNodeReadAttrAsI16(node, "follows_read_index", &read->coord.relative_order.follows);
+    rc2 = KXMLNodeReadAttrAsI16(node, "precedes_read_index", &read->coord.relative_order.precedes);
+    KXMLNodeRelease(node);
+    if( (rc1 != 0 && GetRCState(rc1) != rcNotFound) || (rc2 != 0 && GetRCState(rc2) != rcNotFound) ) {
+        rc1 = rc1 ? rc1 : rc2;
+        LOGERR(klogErr, rc1, "RELATIVE_ORDER attributes");
+    } else if( (read->coord.relative_order.follows < 0 && read->coord.relative_order.precedes < 0) ||
+               (read->coord.relative_order.follows >= 0 && read->coord.relative_order.precedes >= 0) ) {
+        rc1 = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInconsistent);
+        LOGERR(klogErr, rc1, "RELATIVE_ORDER attributes");
+    } else {
+        rc1 = 0;
+        read->coord_type = rdsp_RelativeOrder_ct;
+    }
+    return rc1;
+}
+
+static
+rc_t parse_BASE_COORD(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t* counter)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+
+    if( KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "BASE_COORD") != 0 ) {
+        return 0;
+    }
+    *counter = *counter + 1;
+    rc = KXMLNodeReadAsI16(node, &read->coord.start_coord);
+    KXMLNodeRelease(node);
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "BASE_COORD");
+    } else if( read->coord.start_coord < 1 ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "BASE_COORD: $(b)", PLOG_I32(b), read->coord.start_coord));
+    } else {
+        read->coord_type = rdsp_BaseCoord_ct;
+    }
+    return rc;
+}
+
+static
+rc_t parse_CYCLE_COORD(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t* counter)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+
+    if( KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "CYCLE_COORD") != 0 ) {
+        return 0;
+    }
+    *counter = *counter + 1;
+    rc = KXMLNodeReadAsI16(node, &read->coord.start_coord);
+    KXMLNodeRelease(node);
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "CYCLE_COORD");
+    } else if( read->coord.start_coord < 1 ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "CYCLE_COORD: $(b)", PLOG_I32(b), read->coord.start_coord));
+    } else {
+        read->coord_type = rdsp_CycleCoord_ct;
+    }
+    return rc;
+}
+
+rc_t parse_BASECALL_TABLE_add(ReadSpecXML_read_BASECALL_TABLE* table, const ReadSpecXML_read_BASECALL* src, const char* bc)
+{
+    rc_t rc = 0;
+
+    if( table->size == table->count ) {
+        const int inc = 20;
+        ReadSpecXML_read_BASECALL* nt = realloc(table->table, (table->size + inc) * sizeof(*src));
+        if( nt == NULL ) {
+            rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            table->size += inc;
+            table->table = nt;
+        }
+    }
+    if( rc == 0 ) {
+        uint32_t i;
+        for(i = 0; rc == 0 && i < table->count; i++) {
+            if( strcmp(table->table[i].basecall, bc) == 0 ) {
+                rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcDuplicate);
+            }
+        }
+    }
+    if( rc == 0 ) {
+        table->table[table->count].basecall = bc ? strdup(bc) : NULL;
+        table->table[table->count].read_group_tag = src->read_group_tag ? strdup(src->read_group_tag) : NULL;
+        table->table[table->count].min_match = src->min_match;
+        table->table[table->count].max_mismatch = src->max_mismatch;
+        table->table[table->count].match_edge = src->match_edge;
+        if( table->table[table->count].basecall == NULL ||
+            (src->read_group_tag != NULL && table->table[table->count].read_group_tag == NULL) ) {
+            rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            uint32_t k = strlen(table->table[table->count].basecall);
+            k += src->max_mismatch;
+            switch(src->match_edge) {
+                case match_edge_End:
+                    if( table->match_end < k ) {
+                        table->match_end = k;
+                    }
+                    break;
+                case match_edge_Start:
+                case match_edge_Full:
+                    if( table->match_start < k ) {
+                        table->match_start = k;
+                    }
+                    break;
+            }
+
+            rc = AgrepMake(&table->table[table->count].agrep,
+                           AGREP_PATTERN_4NA |
+                           AGREP_ALG_MYERS |
+                           AGREP_EXTEND_BETTER, table->table[table->count].basecall);
+        }
+        table->count++;
+    }
+    return rc;
+}
+
+static
+rc_t parse_BASECALL_new4na(ReadSpecXML_read_BASECALL_TABLE* table, const ReadSpecXML_read_BASECALL* bc)
+{
+    rc_t rc = 0;
+
+    if( table == NULL || bc == NULL || bc->basecall[0] == '\0' ||
+        strspn(bc->basecall, "ACGTURYSWKMBDHVNacgturyswkmbdhvn.-") != strlen(bc->basecall) ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+    }
+    if( rc == 0 ) {
+        char r[4096];
+        size_t l = strlen(bc->basecall);
+
+        if( l >= sizeof(r) ) {
+            rc = RC(rcExe, rcFormatter, rcConstructing, rcBuffer, rcInsufficient);
+        } else {
+            int i;
+            for(i = 0; i < l; i++) {
+                if( bc->match_edge == match_edge_End ) {
+                    /* need to reverse BC because match will happen on reversed seq */
+                    r[i] = bc->basecall[l - i - 1];
+                } else {
+                    r[i] = bc->basecall[i];
+                }
+                /*r[i] = isalpha(r[i]) ? toupper(r[i]) : 'N';*/
+            }
+            r[i] = '\0';
+            rc = parse_BASECALL_TABLE_add(table, bc, r);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t parse_EXPECTED_BASECALL(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t* counter)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+    ReadSpecXML_read_BASECALL bc;
+
+    if( KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "EXPECTED_BASECALL") != 0 ) {
+        return 0;
+    }
+    *counter = *counter + 1;
+    if( (rc = KXMLNodeReadCStr(node, &bc.basecall, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "EXPECTED_BASECALL value");
+    } else if( (rc = KXMLNodeReadAttrAsU32(node, "default_length", &read->coord.expected_basecalls.default_length)) != 0 &&
+        GetRCState(rc) != rcNotFound ) {
+        LOGERR(klogErr, rc, "EXPECTED_BASECALL 'default_length' attribute");
+    } else if( (rc = KXMLNodeReadAttrAsU32(node, "base_coord", &read->coord.expected_basecalls.base_coord)) != 0 &&
+         GetRCState(rc) != rcNotFound ) {
+        LOGERR(klogErr, rc, "EXPECTED_BASECALL 'base_coord' attribute");
+    } else {
+        bc.read_group_tag = NULL;
+        bc.min_match = strlen(bc.basecall);
+        /* allow 10% mismatches */
+        bc.max_mismatch = bc.min_match * 0.1;
+        bc.match_edge = match_edge_Full;
+        if( (rc = parse_BASECALL_new4na(&read->coord.expected_basecalls, &bc)) == 0 ) {
+            read->coord_type = rdsp_ExpectedBaseCall_ct;
+        }
+    }
+    if( rc != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "EXPECTED_BASECALL '$(c)'", PLOG_S(c), bc.basecall));
+    }
+    free(bc.basecall);
+    KXMLNodeRelease(node);
+    return rc;
+}
+
+static
+rc_t parse_BASECALL(const KXMLNode* node, ReadSpecXML_read_BASECALL_TABLE* table)
+{
+    rc_t rc = 0;
+    char* match_edge = NULL;
+    ReadSpecXML_read_BASECALL bc;
+
+
+    memset(&bc, 0, sizeof(bc));
+    if( (rc = KXMLNodeReadCStr(node, &bc.basecall, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "BASECALL");
+        return rc;
+    }
+    rc = KXMLNodeReadAttrCStr(node, "read_group_tag", &bc.read_group_tag, NULL);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "BASECALL @read_group_tag");
+        return rc;
+    }
+    rc = KXMLNodeReadAttrAsU32(node, "min_match", &bc.min_match);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "BASECALL @min_match");
+        return rc;
+    } else if(bc.min_match > strlen(bc.basecall)) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "BASECALL @min_match more than basecall length: $(bc)", PLOG_S(bc), bc.basecall));
+        return rc;
+    } else if( bc.min_match == 0 ) {
+        bc.min_match = strlen(bc.basecall);
+    }
+    rc = KXMLNodeReadAttrAsU32(node, "max_mismatch", &bc.max_mismatch);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "BASECALL @max_mismatch");
+        return rc;
+    } else if(bc.max_mismatch >= strlen(bc.basecall)) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "BASECALL @max_mismatch value too big: $(bc)", PLOG_S(bc), bc.basecall));
+        return rc;
+    }
+    if( (bc.min_match + bc.max_mismatch) < strlen(bc.basecall) ) {
+        if( bc.min_match != 0 ) {
+            PLOGMSG(klogWarn, (klogWarn, "BASECALL @min_match is too small: $(bc)", PLOG_S(bc), bc.basecall));
+        }
+        bc.min_match = strlen(bc.basecall) - bc.max_mismatch;
+    }
+    rc = KXMLNodeReadAttrCStr(node, "match_edge", &match_edge, NULL);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "BASECALL @match_edge");
+    } else if( match_edge == NULL || strcmp(match_edge, "full") == 0 ) {
+        bc.match_edge = match_edge_Full;
+    } else if( strcmp(match_edge, "start") == 0 ) {
+        bc.match_edge = match_edge_Start;
+    } else if( strcmp(match_edge, "end") == 0 ) {
+        bc.match_edge = match_edge_End;
+    } else {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "BASECALL @match_edge: $(c)", PLOG_S(c), match_edge));
+    }
+    free(match_edge);
+
+    if( (rc = parse_BASECALL_new4na(table, &bc)) != 0 ) {
+        LOGERR(klogErr, rc, "BASECALL");
+    }
+    free(bc.basecall);
+    free(bc.read_group_tag);
+    return rc;
+}
+
+static
+rc_t parse_EXPECTED_BASECALL_TABLE(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t* counter)
+{
+    rc_t rc = 0;
+    const KXMLNode* EXPECTED_BASECALL_TABLE;
+    const KXMLNodeset* BASECALLS;
+   
+    if( KXMLNodeGetFirstChildNodeRead(READ_SPEC, &EXPECTED_BASECALL_TABLE, "EXPECTED_BASECALL_TABLE") != 0 ) {
+        return 0;
+    }
+    *counter = *counter + 1;
+
+    if( (rc = KXMLNodeReadAttrAsU32(EXPECTED_BASECALL_TABLE, "default_length", &read->coord.expected_basecalls.default_length)) != 0 &&
+        GetRCState(rc) != rcNotFound ) {
+        LOGERR(klogErr, rc, "EXPECTED_BASECALL_TABLE 'default_length' attribute");
+    } else if( (rc = KXMLNodeReadAttrAsU32(EXPECTED_BASECALL_TABLE, "base_coord", &read->coord.expected_basecalls.base_coord)) != 0 &&
+         GetRCState(rc) != rcNotFound ) {
+        LOGERR(klogErr, rc, "EXPECTED_BASECALL_TABLE 'base_coord' attribute");
+    } else if( (rc = KXMLNodeOpenNodesetRead(EXPECTED_BASECALL_TABLE, &BASECALLS, "BASECALL")) == 0 ) {
+        uint32_t count = 0;
+        KXMLNodesetCount(BASECALLS, &count);
+        if( count > 0 ) {
+            uint32_t i, tagged;
+            for(i = 0; rc == 0 && i < count; i++) {
+                const KXMLNode* BASECALL = NULL;
+                if( (rc = KXMLNodesetGetNodeRead(BASECALLS, &BASECALL, i)) == 0 ) {
+                        if( (rc = parse_BASECALL(BASECALL, &read->coord.expected_basecalls)) != 0 ) {
+                            PLOGERR(klogErr, (klogErr, rc, "BASECALL $(i)", PLOG_U32(i), i));
+                        }
+                        KXMLNodeRelease(BASECALL);
+                } else {
+                    PLOGERR(klogErr, (klogErr, rc, "BASECALL node #$(i)", PLOG_U32(i), i));
+                }
+            }
+            for(i = 0, tagged = 0; rc == 0 && i < read->coord.expected_basecalls.count; i++) {
+                if( read->coord.expected_basecalls.table[i].read_group_tag != NULL ) {
+                    tagged++;
+                }
+            }
+            if( tagged > 0 ) {
+                if( read->coord.expected_basecalls.count != tagged ) {
+                    LOGMSG(klogWarn, "mixed tagged/untagged BASECALLs in table");
+                } else {
+                    read->coord.expected_basecalls.pooled = true;
+                }
+            }
+            if( rc == 0 ) {
+                read->coord_type = rdsp_ExpectedBaseCallTable_ct;
+            } else {
+                free(read->coord.expected_basecalls.table);
+            }
+        } else {
+            rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcIncomplete);
+            LOGERR(klogErr, rc, "need at least one BASECALL element");
+        }
+        KXMLNodesetRelease(BASECALLS);
+    } else {
+        LOGERR(klogErr, rc, "missing element(s) BASECALL");
+    }
+    KXMLNodeRelease(EXPECTED_BASECALL_TABLE);
+    return rc;
+}
+
+static
+rc_t parse_READ_SPEC(const KXMLNode* READ_SPEC, ReadSpecXML_read* read, uint32_t index)
+{
+    rc_t rc = 0;
+    uint32_t coord = 0;
+
+    if( (rc = parse_READ_LABEL(READ_SPEC, read)) != 0 ||
+        (rc = parse_READ_CLASS(READ_SPEC, read)) != 0 ||
+        (rc = parse_READ_TYPE(READ_SPEC, read)) != 0 ||
+        (rc = parse_RELATIVE_ORDER(READ_SPEC, read, &coord)) != 0 ||
+        (rc = parse_BASE_COORD(READ_SPEC, read, &coord)) != 0 ||
+        (rc = parse_CYCLE_COORD(READ_SPEC, read, &coord)) != 0 ||
+        (rc = parse_EXPECTED_BASECALL(READ_SPEC, read, &coord)) != 0 ||
+        (rc = parse_EXPECTED_BASECALL_TABLE(READ_SPEC, read, &coord)) != 0 ) {
+        return rc;
+    }
+    if( coord != 1 || read->coord_type == 0) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "bad or missing coordinate descriptor in read #$(index)",
+                        PLOG_U32(index), index));
+    }
+    return rc;
+}
+
+static
+rc_t parse_READ_INDEX(const KXMLNode* READ_SPEC, uint32_t* index)
+{
+    rc_t rc = 0;
+    const KXMLNode* node = NULL;
+
+    if( (rc = KXMLNodeGetFirstChildNodeRead(READ_SPEC, &node, "READ_INDEX")) == 0 ) {
+        if( (rc = KXMLNodeReadAsU32(node, index)) != 0 ) {
+            LOGERR(klogErr, rc, "READ_INDEX");
+        }
+        KXMLNodeRelease(node);
+    } else {
+        LOGERR(klogErr, rc, "missing required node READ_INDEX");
+    }
+    return rc;
+}
+
+static
+rc_t XMLNode_get_subnode(const KXMLNode* node, const char* child, const KXMLNode** sub)
+{
+    rc_t rc = 0;
+    const KXMLNodeset* ns = NULL; 
+
+    *sub = NULL;
+    if( (rc = KXMLNodeOpenNodesetRead(node, &ns, child)) == 0 ) {
+        uint32_t count = 0;
+        if( (rc = KXMLNodesetCount(ns, &count)) == 0 ) {
+            if( count == 0 ) {
+                rc = RC(rcExe, rcFormatter, rcParsing, rcNode, rcNotFound);
+            } else if( count > 1 ) {
+                rc = RC(rcExe, rcFormatter, rcParsing, rcNode, rcDuplicate);
+            } else {
+                rc = KXMLNodesetGetNodeRead(ns, sub, 0);
+            }
+        }
+        KXMLNodesetRelease(ns);
+    }
+    return rc;
+}
+
+rc_t XMLNode_get_strnode(const KXMLNode* node, const char* child, bool optional, char** value)
+{
+    rc_t rc = 0;
+    const KXMLNode* n = NULL;
+    
+    *value = NULL;
+    if( (rc = XMLNode_get_subnode(node, child, &n)) == 0 ) {
+        if( (rc = KXMLNodeReadCStr(n, value, NULL)) == 0 && *value != NULL && **value != '\0' ) {
+            /* rtrim and ltrim */
+            char* start = *value, *end;
+            while( *start != '\0' && isspace(*start) ) {
+                start++;
+            }
+            for(end = start; *end != '\0'; end++){}
+            while( --end > start && isspace(*end) ){}
+            memmove(*value, start, end - start + 1);
+            (*value)[end - start + 1] = '\0';
+        }
+        KXMLNodeRelease(n);
+    } else if( optional && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
+
+static
+rc_t XMLNode_get_u32node(const KXMLNode* node, const char* child, bool optional, uint32_t* value)
+{
+    rc_t rc = 0;
+    const KXMLNode* n = NULL;
+    
+    if( (rc = XMLNode_get_subnode(node, child, &n)) == 0 ) {
+        rc = KXMLNodeReadAsU32(n, value);
+        KXMLNodeRelease(n);
+    } else if( optional && GetRCState(rc) == rcNotFound ) {
+        rc = 0;
+    }
+    return rc;
+}
+
+rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t* spot_length)
+{
+    rc_t rc = 0;
+    PlatformXML* platform;
+    const KXMLNodeset* ns = NULL;
+
+    platform = calloc(1, sizeof(*platform));
+    if( platform != NULL ) {
+        platform->id = SRA_PLATFORM_UNDEFINED;
+        if( (rc = KXMLNodeOpenNodesetRead(node, &ns, "PLATFORM/*")) == 0 ) {
+            uint32_t count = 0;
+            if( (rc = KXMLNodesetCount(ns, &count)) != 0 || count != 1 ) {
+                rc = rc ? rc : RC(rcExe, rcFormatter, rcConstructing, rcTag, count ? rcExcessive : rcNotFound);
+            } else {
+                const KXMLNode* n = NULL;
+                if( (rc = KXMLNodesetGetNodeRead(ns, &n, 0)) == 0 ) {
+                    const char* name = NULL;
+                    if( (rc = KXMLNodeElementName(n, &name)) == 0 ) {
+                        DEBUG_MSG (4, ("PLATFORM: %s\n", name));
+                        if( strcmp(name, "LS454") == 0 ) {
+                            if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ls454.key_sequence)) == 0 &&
+                                (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ls454.flow_sequence)) == 0 &&
+                                (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ls454.flow_count)) == 0 ) {
+                                platform->id = SRA_PLATFORM_454;
+                                if( platform->param.ls454.key_sequence == NULL || platform->param.ls454.key_sequence[0] == '\0' ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "$(n)/KEY_SEQUENCE is not specified", PLOG_S(n), name));
+                                    free(platform->param.ls454.key_sequence);
+                                    platform->param.ls454.key_sequence = NULL;
+                                }
+                                if( platform->param.ls454.flow_sequence == NULL || platform->param.ls454.flow_sequence[0] == '\0' ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "$(n)/FLOW_SEQUENCE is not specified", PLOG_S(n), name));
+                                    free(platform->param.ls454.flow_sequence);
+                                    platform->param.ls454.flow_sequence = NULL;
+                                } else if( platform->param.ls454.flow_count % strlen(platform->param.ls454.flow_sequence) != 0 ) {
+                                    rc = RC(rcExe, rcFormatter, rcConstructing, rcId, rcInconsistent);
+                                } else {
+                                    char* flows = platform->param.ls454.flow_sequence;
+                                    platform->param.ls454.flow_sequence = malloc(platform->param.ls454.flow_count + 1);
+                                    if( platform->param.ls454.flow_sequence != NULL ) {
+                                        uint32_t i = platform->param.ls454.flow_count / strlen(flows);
+                                        platform->param.ls454.flow_sequence[0] = '\0';
+                                        while( i > 0 ) {
+                                            strcat(platform->param.ls454.flow_sequence, flows);
+                                            i--;
+                                        }
+                                        free(flows);
+                                    } else {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+                                    }
+                                }
+                            }
+                        } else if( strcmp(name, "ION_TORRENT") == 0 ) {
+                            if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ion_torrent.key_sequence)) == 0 &&
+                                (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ion_torrent.flow_sequence)) == 0 &&
+                                (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ion_torrent.flow_count)) == 0 ) {
+                                platform->id = SRA_PLATFORM_ION_TORRENT;
+                                if( platform->param.ion_torrent.key_sequence == NULL || platform->param.ion_torrent.key_sequence[0] == '\0' ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "$(n)/KEY_SEQUENCE is not specified", PLOG_S(n), name));
+                                    free(platform->param.ion_torrent.key_sequence);
+                                    platform->param.ion_torrent.key_sequence = NULL;
+                                }
+                                if( platform->param.ion_torrent.flow_sequence == NULL || platform->param.ion_torrent.flow_sequence[0] == '\0' ) {
+                                    PLOGMSG(klogWarn, (klogWarn, "$(n)/FLOW_SEQUENCE is not specified", PLOG_S(n), name));
+                                    free(platform->param.ion_torrent.flow_sequence);
+                                    platform->param.ion_torrent.flow_sequence = NULL;
+                                } else if( platform->param.ion_torrent.flow_count % strlen(platform->param.ion_torrent.flow_sequence) != 0 ) {
+                                    rc = RC(rcExe, rcFormatter, rcConstructing, rcId, rcInconsistent);
+                                } else {
+                                    char* flows = platform->param.ion_torrent.flow_sequence;
+                                    platform->param.ion_torrent.flow_sequence = malloc(platform->param.ion_torrent.flow_count + 1);
+                                    if( platform->param.ion_torrent.flow_sequence != NULL ) {
+                                        uint32_t i = platform->param.ion_torrent.flow_count / strlen(flows);
+                                        platform->param.ion_torrent.flow_sequence[0] = '\0';
+                                        while( i > 0 ) {
+                                            strcat(platform->param.ion_torrent.flow_sequence, flows);
+                                            i--;
+                                        }
+                                        free(flows);
+                                    } else {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+                                    }
+                                }
+                            }
+                        } else if( strcmp(name, "ILLUMINA") == 0 ) {
+                            if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+                                GetRCState(rc) == rcNotFound ) {
+                                rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
+                            }
+                            if( rc == 0 ) {
+                                platform->id = SRA_PLATFORM_ILLUMINA;
+                            }
+                        } else if( strcmp(name, "HELICOS") == 0 ) {
+                            if( (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.helicos.flow_sequence)) == 0 &&
+                                (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.helicos.flow_count)) == 0 ) {
+                                platform->id = SRA_PLATFORM_HELICOS;
+                            }
+                        } else if( strcmp(name, "ABI_SOLID") == 0 ) {
+                            if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+                                GetRCState(rc) == rcNotFound ) {
+                                rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
+                            }
+                            if( rc == 0 ) {
+                                platform->id = SRA_PLATFORM_ABSOLID;
+                            }
+                        } else if( strcmp(name, "PACBIO_SMRT") == 0 ) {
+                            platform->id = SRA_PLATFORM_PACBIO_SMRT;
+                        } else if( strcmp(name, "COMPLETE_GENOMICS") == 0 ) {
+                            platform->id = SRA_PLATFORM_COMPLETE_GENOMICS;
+                        } else if( strcmp(name, "CAPILLARY") == 0 ) {
+                            platform->id = SRA_PLATFORM_CAPILLARY;
+                        } else if( strcmp(name, "OXFORD_NANOPORE") == 0 ) {
+                            platform->id = SRA_PLATFORM_OXFORD_NANOPORE;
+                        }
+                        
+                        if( rc != 0 || platform->id == SRA_PLATFORM_UNDEFINED ) {
+                            rc = rc ? rc : RC(rcExe, rcFormatter, rcConstructing, rcId, rcUnrecognized);
+                            PLOGERR(klogErr, (klogErr, rc, "PLATFORM '$(n)'", PLOG_S(n), name));
+                        }
+                    }
+                    KXMLNodeRelease(n);
+                }
+            }
+            KXMLNodesetRelease(ns);
+        }
+        if( rc == 0 ) {
+            *cself = platform;
+        } else {
+            PlatformXML_Whack(platform);
+        }
+    } else {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    }
+    return rc;
+}
+
+void PlatformXML_Whack(const PlatformXML* cself)
+{
+    if( cself != NULL ) {
+        PlatformXML* self = (PlatformXML*)cself;
+        switch(self->id) {
+            case SRA_PLATFORM_454:
+                free(self->param.ls454.key_sequence);
+                free(self->param.ls454.flow_sequence);
+                break;
+            case SRA_PLATFORM_ION_TORRENT:
+                free(self->param.ion_torrent.key_sequence);
+                free(self->param.ion_torrent.flow_sequence);
+                break;
+            case SRA_PLATFORM_ILLUMINA:
+                break;
+            case SRA_PLATFORM_HELICOS:
+                free(self->param.helicos.flow_sequence);
+                break;
+            case SRA_PLATFORM_ABSOLID:
+                break;
+            case SRA_PLATFORM_PACBIO_SMRT:
+                break;
+            case SRA_PLATFORM_COMPLETE_GENOMICS:
+                break;
+            case SRA_PLATFORM_CAPILLARY:
+                break;
+            case SRA_PLATFORM_OXFORD_NANOPORE:
+                break;
+            case SRA_PLATFORM_UNDEFINED:
+                break;
+        }
+        free(self);
+    }
+}
+
+rc_t ReadSpecXML_Make(const ReadSpecXML** cself, const KXMLNode* node, const char* path, uint32_t* spot_length)
+{
+    rc_t rc = 0;
+    ReadSpecXML* obj;
+
+    assert(node != NULL);
+
+    obj = calloc(1, sizeof(*obj));
+    if( obj != NULL ) {
+        const KXMLNodeset* READ_SPECS = NULL;
+        const KXMLNode* nsplen = NULL;
+        obj->nreads = 0;
+        obj->reads = &obj->spec[1]; /* set actual read to next one after fake fixed size read */
+        if( (rc = KXMLNodeGetFirstChildNodeRead(node, &nsplen, "%s/SPOT_DECODE_SPEC/SPOT_LENGTH", path)) == 0 ) {
+            rc = KXMLNodeReadAsU32(nsplen, spot_length);
+            KXMLNodeRelease(nsplen);
+        }
+        if( rc != 0 ) {
+            if( GetRCState(rc) != rcNotFound) {
+                LOGERR(klogErr, rc, "node SPOT_LENGTH");
+            } else {
+                rc = 0;
+            }
+        }
+        if( rc == 0 &&
+            (rc = KXMLNodeOpenNodesetRead(node, &READ_SPECS, "%s/SPOT_DECODE_SPEC/READ_SPEC", path)) == 0 ) {
+            if( (rc = KXMLNodesetCount(READ_SPECS, &obj->nreads)) != 0 || obj->nreads < 1 || obj->nreads > SRALOAD_MAX_READS ) {
+                rc = rc ? rc : RC(rcExe, rcFormatter, rcConstructing, rcTag, obj->nreads ? rcExcessive : rcNotFound);
+            } else {
+                const uint8_t class_none = ~0;
+                uint32_t i;
+                for(i = 0; i < obj->nreads; i++) {
+                    /* set all read's mandatory READ_CLASS to 'unset' value */
+                    obj->reads[i].read_class = class_none;
+                }
+                for(i = 0; rc == 0 && i < obj->nreads; i++) {
+                    const KXMLNode* READ_SPEC = NULL;
+                    uint32_t index = ~0;
+                    if( (rc = KXMLNodesetGetNodeRead(READ_SPECS, &READ_SPEC, i)) == 0 &&
+                        (rc = parse_READ_INDEX(READ_SPEC, &index)) == 0 ) {
+                        if( obj->reads[index].read_class == class_none ) {
+                            if( (rc = parse_READ_SPEC(READ_SPEC, &obj->reads[index], index)) != 0 ) {
+                                PLOGERR(klogErr, (klogErr, rc, "READ_INDEX $(i)", PLOG_U32(i), index));
+                            }
+                        }
+                        KXMLNodeRelease(READ_SPEC);
+                    } else {
+                        PLOGERR(klogErr, (klogErr, rc, "READ_SPEC node #$(i)", PLOG_U32(i), i));
+                    }
+                }
+                if(rc == 0) {
+                    for(i = 0; i < obj->nreads; i++) {
+                        if(obj->reads[i].read_class == class_none ) {
+                            rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+                            PLOGERR(klogErr, (klogErr, rc, "missing READ_SPEC for READ_INDEX #$(i)", PLOG_U32(i), i));
+                        } else {
+                            switch(obj->reads[i].coord_type) {
+                                case rdsp_RelativeOrder_ct:
+                                    if( obj->nreads == 1 ) {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                                        PLOGERR(klogErr, (klogErr, rc, "#$(i) single RELATIVE_ORDER not allowed", PLOG_U32(i), i));
+                                    } else if( i > 0 && obj->reads[i - 1].coord_type != rdsp_ExpectedBaseCall_ct &&
+                                                        obj->reads[i - 1].coord_type != rdsp_ExpectedBaseCallTable_ct ) {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                                        PLOGERR(klogErr, (klogErr, rc, "#$(i) RELATIVE_ORDER cannot follow read of $(type) type",
+                                                PLOG_2(PLOG_U32(i),PLOG_S(type)), i, 
+                                                obj->reads[i - 1].coord_type == rdsp_BaseCoord_ct ? "BASE_COORD" :
+                                                    obj->reads[i - 1].coord_type == rdsp_CycleCoord_ct ? "CYCLE_COORD" :
+                                                        obj->reads[i - 1].coord_type == rdsp_RelativeOrder_ct ? "RELATIVE_ORDER" : "????"));
+                                    } else if( (obj->reads[i].coord.relative_order.follows >= 0 &&
+                                                (i == 0 || obj->reads[i].coord.relative_order.follows != i - 1)) ||
+                                               (obj->reads[i].coord.relative_order.precedes >= 0 &&
+                                                (i == obj->nreads - 1 || obj->reads[i].coord.relative_order.precedes != i + 1)) ) {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+                                        PLOGERR(klogErr, (klogErr, rc, "#$(i) RELATIVE_ORDER attribute value(s)", PLOG_U32(i), i));
+                                    }
+                                    break;
+                                case rdsp_BaseCoord_ct:
+                                case rdsp_CycleCoord_ct:
+                                    if( i == 0 && obj->reads[i].coord.start_coord != 1 ) {
+                                        rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcInvalid);
+                                        PLOGERR(klogErr, (klogErr, rc, "#$(i) 1st read coordinate must be 1", PLOG_U32(i), i));
+                                    }
+                                    break;
+                                case rdsp_ExpectedBaseCall_ct:
+                                case rdsp_ExpectedBaseCallTable_ct:
+                                    break;
+                                default:
+                                    rc = RC(rcExe, rcFormatter, rcConstructing, rcData, rcUnexpected);
+                                    PLOGERR(klogErr, (klogErr, rc, "read #$(i) type", PLOG_U32(i), i));
+                                    break;
+                            }
+                        }
+                    }
+                }
+            }
+            KXMLNodesetRelease(READ_SPECS);
+        }
+    } else {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    }
+    if( rc == 0 ) {
+        obj->spec[0].coord_type = rdsp_FIXED_BRACKET_ct;
+        obj->spec[0].read_class = SRA_READ_TYPE_TECHNICAL;
+        obj->spec[0].read_type = rdsp_Other_rt;
+        obj->spec[0].coord.start_coord = 1;
+        obj->spec[obj->nreads + 1].coord_type = rdsp_FIXED_BRACKET_ct;
+        obj->spec[obj->nreads + 1].read_class = SRA_READ_TYPE_TECHNICAL;
+        obj->spec[obj->nreads + 1].read_type = rdsp_Other_rt;
+        obj->spec[obj->nreads + 1].coord.start_coord = 0;
+        *cself = obj;
+    } else {
+        ReadSpecXML_Whack(obj);
+    }
+    return rc;
+}
+
+void ReadSpecXML_Whack(const ReadSpecXML* cself)
+{
+    if( cself != NULL ) {
+        uint32_t i, j;
+        ReadSpecXML* self = (ReadSpecXML*)cself;
+
+        for(i = 0; i < self->nreads; i++) {
+            free(self->reads[i].read_label);
+            switch(self->reads[i].coord_type) {
+                case rdsp_ExpectedBaseCall_ct:
+                case rdsp_ExpectedBaseCallTable_ct:
+                    for(j = 0; j < self->reads[i].coord.expected_basecalls.count; j++) {
+                        free(self->reads[i].coord.expected_basecalls.table[j].basecall);
+                        free(self->reads[i].coord.expected_basecalls.table[j].read_group_tag);
+                        AgrepWhack(self->reads[i].coord.expected_basecalls.table[j].agrep);
+                    }
+                    free(self->reads[i].coord.expected_basecalls.table);
+                    break;
+                default:
+                    break;
+            }
+        }
+        free(self);
+    }
+}
diff --git a/tools/sra-load/common-xml.h b/tools/sra-load/common-xml.h
new file mode 100644
index 0000000..918a142
--- /dev/null
+++ b/tools/sra-load/common-xml.h
@@ -0,0 +1,183 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_common_xml_
+#define _sra_load_common_xml_
+
+#include <kxml/xml.h>
+#include <search/grep.h>
+#include <sra/sradb.h>
+
+#define SRALOAD_MAX_READS 32
+
+rc_t XMLNode_get_strnode(const KXMLNode* node, const char* child, bool optional, char** value);
+
+typedef struct PlatformXML_struct {
+    SRAPlatforms id;
+    union {
+        struct {
+            char* key_sequence; /* optional */
+            char* flow_sequence; /* optional */
+            uint32_t flow_count; /* optional */
+        } ls454;
+
+        struct {
+            char* key_sequence; /* optional */
+            char* flow_sequence; /* optional */
+            uint32_t flow_count; /* optional */
+        } ion_torrent;
+
+        struct {
+            char* flow_sequence; /* optional */
+            uint32_t flow_count; /* optional */
+        } helicos;
+    } param;
+} PlatformXML;
+
+rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t* spot_length);
+
+void PlatformXML_Whack(const PlatformXML* cself);
+
+typedef struct ReadSpecXML_read_BASECALL_struct {
+    char* basecall;
+    char* read_group_tag;
+    uint32_t min_match;
+    uint32_t max_mismatch;
+    enum {
+        match_edge_Full = 1,
+        match_edge_Start,
+        match_edge_End
+    } match_edge;
+    Agrep* agrep;
+} ReadSpecXML_read_BASECALL;
+
+typedef struct ReadSpecXML_read_BASECALL_TABLE_struct {
+    uint32_t default_length;
+    uint32_t base_coord;
+    ReadSpecXML_read_BASECALL* table;
+    uint32_t size; /* allocated structures qty */
+    uint32_t count; /* used structures qty */
+    bool pooled; /* true disables search if member is present from run */
+    uint16_t match_start; /* length of longest bc with match_edge="start" */
+    uint16_t match_end; /* length of longest bc with match_edge="end" */
+} ReadSpecXML_read_BASECALL_TABLE;
+
+typedef struct ReadSpecXML_read_struct {
+    char* read_label; /* asciiz */
+    SRAReadTypes read_class;
+    enum {
+        rdsp_Forward_rt = 1,
+        rdsp_Reverse_rt,
+        rdsp_Adapter_rt,
+        rdsp_Primer_rt,
+        rdsp_Linker_rt,
+        rdsp_BarCode_rt,
+        rdsp_Other_rt
+    } read_type;
+    
+    enum {
+        /* order is important !!! */
+        rdsp_FIXED_BRACKET_ct = 1, /* special fixed size type */
+        rdsp_RelativeOrder_ct,
+        rdsp_BaseCoord_ct,
+        rdsp_CycleCoord_ct,
+        rdsp_ExpectedBaseCall_ct,
+        rdsp_ExpectedBaseCallTable_ct
+    } coord_type;
+
+    union {
+        struct {
+            int16_t follows;
+            int16_t precedes;
+        } relative_order;
+        /* starting position for *_COORD types */
+        int16_t start_coord;
+        /* EXPECTED_BASECALL is a table of 1 element, unless IUPAC is used in values */
+        ReadSpecXML_read_BASECALL_TABLE expected_basecalls;
+    } coord;
+} ReadSpecXML_read;
+
+typedef struct ReadSpecXML_struct {
+    uint32_t nreads;
+    ReadSpecXML_read spec[SRALOAD_MAX_READS + 2];
+    ReadSpecXML_read* reads;
+} ReadSpecXML;
+
+rc_t ReadSpecXML_Make(const ReadSpecXML** cself, const KXMLNode* node, const char* path, uint32_t* spot_length);
+
+void ReadSpecXML_Whack(const ReadSpecXML* cself);
+
+typedef enum {
+    eExperimentQualityType_Undefined = 0,
+    eExperimentQualityType_Phred,
+    eExperimentQualityType_LogOdds,
+    eExperimentQualityType_Other
+} ExperimentQualityType;
+
+typedef enum {
+    eExperimentQualityEncoding_Undefined = 0,
+    eExperimentQualityEncoding_Ascii,
+    eExperimentQualityEncoding_Decimal,
+    eExperimentQualityEncoding_Hexadecimal
+} ExperimentQualityEncoding;
+
+/*
+
+The value 'default' is same as '' or NULL in terms coding and represents default group (member) in SRA.
+
+We use value of these data elements as SPOT_GROUP (barcode, member, etc) column value.
+Rules (whichever is present in order of importance):
+
+1.	Run.xml: /RUN/DATA_BLOCK/ attribute member_name. (must have POOL to set read lengths).
+2.	Barcode in spot name in file data. (if not explicitly chosen [below] must have pool, otherwise fail)(must have POOL to set read lengths).
+3.	Experiment.xml: /EXPERIMENT/DESIGN/SAMPLE_DESCRIPTOR/POOL elements MEMBER. Match subsequences to determine SPOT_GROUP value.
+4.	No SPOT_GROUP column
+
+Than <RUN_ATTRIBUTE> with <TAG> case-insensitive value of �read_name_barcode_proc_directive� comes in with case-insensitive <VALUE> values:
+
+1.	RUN_ATTRIBUTE not present at all � use rules above.
+2.	'interpret_as_spotgroup' (use_file_spot_name) � use data from file�s spot names. Force rule #2. (new addition)
+3.	�use_table_in_experiment� � use POOL table from experiment.xml. Force rule #3.
+4.	�ignore� � do not write anything to SPOT_GROUP column. Force rule #4
+
+*/
+
+typedef enum {
+    eBarcodeRule_not_set = 0,
+    eBarcodeRule_use_file_spot_name,
+    eBarcodeRule_use_table_in_experiment,
+    eBarcodeRule_ignore_barcode
+} ExperimentBarcodeRule;
+
+typedef struct RunAttributes_struct {
+    uint32_t spot_length;
+    const PlatformXML* platform;
+    const ReadSpecXML* reads;
+    ExperimentBarcodeRule barcode_rule;
+    ExperimentQualityType quality_type;
+    uint8_t quality_offset;
+} RunAttributes;
+
+#endif /* _sra_load_common_xml_ */
diff --git a/tools/sra-load/debug.h b/tools/sra-load/debug.h
new file mode 100644
index 0000000..48dc6b8
--- /dev/null
+++ b/tools/sra-load/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_sra_load_debug_h_
+#define _tools_sra_load_debug_h_
+
+#include <klib/debug.h>
+
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_sra_load_debug_h_ */
diff --git a/tools/sra-load/experiment-xml.c b/tools/sra-load/experiment-xml.c
new file mode 100644
index 0000000..2e7569b
--- /dev/null
+++ b/tools/sra-load/experiment-xml.c
@@ -0,0 +1,1255 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/container.h>
+#include <klib/trie.h>
+#include <sra/types.h>
+#include <os-native.h>
+
+#include "experiment-xml.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#define MAX_POOL_MEMBER_BASECALLS 64
+#define MAX_SPOT_DESCRIPTOR_READS (SRALOAD_MAX_READS + 2)
+
+typedef struct PoolReadSpec_struct {
+    int16_t start;
+    int16_t length;
+    /* chosen basecalls for EXPECTED_BASECALL_TABLE for defined member_name, NULL-terminated array */
+    const ReadSpecXML_read_BASECALL* item[MAX_POOL_MEMBER_BASECALLS];
+    int32_t score;
+} PoolReadSpec;
+
+typedef struct PoolMember_struct {
+    BSTNode node;
+    const char *name;
+    PoolReadSpec spec[MAX_SPOT_DESCRIPTOR_READS];
+} PoolMember;
+
+struct ExperimentXML {
+    uint32_t spot_length;
+    const PlatformXML* platform;
+    ProcessingXML processing;
+    const ReadSpecXML* reads;
+    BSTree* member_pool;
+    PoolMember* member_null;
+    SLList member_stats;
+};
+
+static
+void CC PoolMember_Whack(BSTNode* node, void* data)
+{
+    if( node != NULL ) {
+        const PoolMember* n = (const PoolMember*)node;
+        free((void*)n->name);
+        free(node);
+    }
+}
+
+static
+int64_t CC PoolMember_StrCmp(const char* s1, const char* s2)
+{
+    if( s1 == NULL && s2 == NULL ) {
+        return 0;
+    } else if( s1 == NULL ) {
+        return -32767;
+    } else if( s2 == NULL ) {
+        return 32768;
+    }
+    return strcmp(s1, s2);
+}
+
+static
+int64_t CC PoolMember_Cmp(const BSTNode* item, const BSTNode* node)
+{
+    const PoolMember* i = (const PoolMember*)item;
+    const PoolMember* n = (const PoolMember*)node;
+
+    return PoolMember_StrCmp(i->name, n->name);
+}
+
+static
+int64_t CC PoolMember_FindByName(const void* item, const BSTNode* node)
+{
+    const char* name = (const char*)item;
+    const PoolMember* n = (const PoolMember*)node;
+
+    return PoolMember_StrCmp(name, n->name);
+}
+
+#if _DEBUGGING
+static
+void CC PoolMember_Dump( BSTNode *node, void *data )
+{
+    const PoolMember* n = (const PoolMember*)node;
+    const ExperimentXML* self = (const ExperimentXML*)data;
+    int r;
+
+    DEBUG_MSG(9, ("Member '%s'\n", n->name));
+
+    for(r = 0; r <= self->reads->nreads + 1; r++) {
+        DEBUG_MSG(9, ("Read %d [%hd:%hd]", r + 1, n->spec[r].start, n->spec[r].length));
+        if( self->reads->spec[r].coord_type == rdsp_ExpectedBaseCall_ct ) {
+            DEBUG_MSG(9, (" ebc:'%s'", n->spec[r].item[0]->basecall));
+        } else if( self->reads->spec[r].coord_type == rdsp_ExpectedBaseCallTable_ct ) {
+            int i = -1;
+            while( n->spec[r].item[++i] != NULL ) {
+                DEBUG_MSG(9, (" bc:'%s', tag:'%s';", n->spec[r].item[i]->basecall, n->spec[r].item[i]->read_group_tag));
+            }
+        }
+        DEBUG_MSG(9, ("\n"));
+    }
+}
+#endif
+
+static
+rc_t PoolMember_Add(ExperimentXML* self, const char* name)
+{
+    rc_t rc = 0;
+    PoolMember* member = NULL;
+
+    if( self == NULL) {
+        return RC(rcSRA, rcFormatter, rcAllocating, rcSelf, rcNull);
+    }
+    member = calloc(1, sizeof(*member));
+    if( member == NULL ) {
+        return RC(rcSRA, rcFormatter, rcAllocating, rcMemory, rcExhausted);
+    }
+    if( name == NULL ) {
+        if( self->member_null == NULL ) {
+            self->member_null = member;
+        } else {
+            rc = RC(rcSRA, rcFormatter, rcAllocating, rcId, rcDuplicate);
+        }
+    } else {
+        member->name = strdup(name);
+        if( member->name == NULL ) {
+            rc = RC(rcSRA, rcFormatter, rcAllocating, rcMemory, rcExhausted);
+        } else {
+            if( self->member_pool == NULL ) {
+                self->member_pool = calloc(1, sizeof(BSTree));
+                if( self->member_pool == NULL ) {
+                    rc = RC(rcSRA, rcFormatter, rcAllocating, rcMemory, rcExhausted);
+                } else {
+                    BSTreeInit(self->member_pool);
+                }
+            }
+            if( rc == 0 ) {
+                rc = BSTreeInsertUnique(self->member_pool, &member->node, NULL, PoolMember_Cmp);
+            }
+        }
+    }
+    if( rc == 0 ) {
+        uint32_t i;
+        for(i = 0; i <= self->reads->nreads + 1; i++) {
+            switch(self->reads->spec[i].coord_type) {
+                case rdsp_FIXED_BRACKET_ct:
+                    member->spec[i].start = self->reads->spec[i].coord.start_coord - 1;
+                    member->spec[i].length = (i == 0 ? 0 : -1);
+                    break;
+                case rdsp_RelativeOrder_ct:
+                    member->spec[i].start = -1;
+                    member->spec[i].length = -1;
+                    break;
+
+                case rdsp_BaseCoord_ct:
+                case rdsp_CycleCoord_ct:
+                    member->spec[i].start = self->reads->spec[i].coord.start_coord - 1;
+                    member->spec[i].length = -1;
+                    break;
+
+                case rdsp_ExpectedBaseCall_ct:
+                    if( name == NULL || name[0] == '\0' ) {
+                        member->spec[i].start = self->reads->spec[i].coord.expected_basecalls.base_coord;
+                        member->spec[i].length = self->reads->spec[i].coord.expected_basecalls.default_length;
+                    }
+                    if( member->spec[i].start == 0 ) {
+                        member->spec[i].start = -1;
+                    }
+                    member->spec[i].item[0] = self->reads->spec[i].coord.expected_basecalls.table;
+                    if( member->spec[i].length == 0 ) {
+                        member->spec[i].length = strlen(member->spec[i].item[0]->basecall);
+                    }
+                    break;
+
+                case rdsp_ExpectedBaseCallTable_ct:
+                    if( name == NULL || name[0] == '\0' ) {
+                        member->spec[i].start = self->reads->spec[i].coord.expected_basecalls.base_coord;
+                        member->spec[i].length = self->reads->spec[i].coord.expected_basecalls.default_length;
+                    }
+                    if( member->spec[i].start == 0 ) {
+                        member->spec[i].start = -1;
+                    }
+                    if( member->spec[i].length == 0 ) {
+                        member->spec[i].length = (!self->reads->spec[i].coord.expected_basecalls.pooled || name == NULL) ? -1 : 0;
+                    }
+                    break;
+            }
+        }
+    } else {
+        PoolMember_Whack(&member->node, NULL);
+    }
+    return rc;
+}
+
+static
+rc_t PoolMember_AddBasecalls(const ExperimentXML* self, const char* member, int readid, const ReadSpecXML_read_BASECALL* basecalls[])
+{
+    rc_t rc = 0;
+
+    if( self == NULL || basecalls == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcParam, rcNull);
+    } else if( self->reads->reads[readid].coord_type != rdsp_ExpectedBaseCallTable_ct ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcId, rcIncorrect);
+    } else {
+        PoolMember* pm = (PoolMember*)BSTreeFind(self->member_pool, member, PoolMember_FindByName);
+        if( pm == NULL ) {
+            rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcNotFound);
+            PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)'", PLOG_S(m), member));
+        } else {
+            int k = -1, i = -1;
+            while( pm->spec[readid + 1].item[++k] != NULL );
+            while( rc == 0 && basecalls[++i] != NULL ) {
+                if( k >= MAX_POOL_MEMBER_BASECALLS ) {
+                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcTooLong);
+                    PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' basecalls", PLOG_S(m), member));
+                } else {
+                    pm->spec[readid + 1].item[k++] = basecalls[i];
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t parse_POOL(const KXMLNode* EXPERIMENT, ExperimentXML* obj)
+{
+    rc_t rc = 0;
+
+    /* create unspecified member -> NULL */
+    if( (rc = PoolMember_Add(obj, NULL)) == 0 ) {
+        const KXMLNodeset* MEMBERS;
+        if( (rc = KXMLNodeOpenNodesetRead(EXPERIMENT, &MEMBERS, "DESIGN/SAMPLE_DESCRIPTOR/POOL/MEMBER")) == 0 ) {
+            uint32_t i, num_members = 0;
+            if( (rc = KXMLNodesetCount(MEMBERS, &num_members)) == 0 && num_members > 0 ) {
+                /* create default member -> '' */
+                rc = PoolMember_Add(obj, "");
+                for(i = 0; rc == 0 && i < num_members; i++) {
+                    const KXMLNode* MEMBER;
+                    if( (rc = KXMLNodesetGetNodeRead(MEMBERS, &MEMBER, i)) == 0 ) {
+                        char* member_name = NULL;
+                        if( (rc = KXMLNodeReadAttrCStr(MEMBER, "member_name", &member_name, NULL)) == 0 ) {
+                            const KXMLNodeset* LABELS;
+                            if( strcasecmp(member_name, "default") == 0 ) {
+                                member_name[0] = '\0';
+                            }
+                            if( member_name[0] != '\0' ) {
+                                if( (rc = PoolMember_Add(obj, member_name)) != 0 ) {
+                                    PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)'", PLOG_S(m), member_name));
+                                }
+                            }
+                            if( rc == 0 && (rc = KXMLNodeOpenNodesetRead(MEMBER, &LABELS, "READ_LABEL")) == 0 ) {
+                                uint32_t l, num_labels = 0;
+                                KXMLNodesetCount(LABELS, &num_labels);
+                                if( num_labels > 0 ) {
+                                    const ReadSpecXML_read_BASECALL* basecalls[MAX_POOL_MEMBER_BASECALLS];
+                                    for(l = 0; rc == 0 && l < num_labels; l++) {
+                                        const KXMLNode* LABEL;
+                                        if( (rc = KXMLNodesetGetNodeRead(LABELS, &LABEL, l)) == 0 ) {
+                                            char* label = NULL, *tag = NULL;
+                                            if( (rc = KXMLNodeReadCStr(LABEL, &label, NULL)) != 0 || label == NULL || label[0] == '\0' ) {
+                                                rc = rc ? rc : RC(rcSRA, rcFormatter, rcConstructing, rcData, rcEmpty);
+                                                PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL value", PLOG_S(m), member_name));
+                                            } else {
+                                                if( (rc = KXMLNodeReadAttrCStr(LABEL, "read_group_tag", &tag, NULL)) != 0 ) {
+                                                    if( GetRCState(rc) != rcNotFound ) {
+                                                        PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL '$(l)' 'read_group_tag' attribute",
+                                                                                        PLOG_2(PLOG_S(m),PLOG_S(l)), member_name, label));
+                                                    } else {
+                                                        rc = 0;
+                                                    }
+                                                } else if( tag != NULL && tag[0] == '\0' )  {
+                                                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcEmpty);
+                                                    PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL '$(l)' 'read_group_tag' attribute",
+                                                                                   PLOG_2(PLOG_S(m),PLOG_S(l)), member_name, label));
+                                                }
+                                                if( rc == 0 ) {
+                                                    /* find read_spec based on label and update basecall table */
+                                                    uint32_t r, read_found = 0;
+                                                    for(r = 0; rc == 0 && r < obj->reads->nreads; r++) {
+                                                        if( obj->reads->reads[r].read_label != NULL && strcmp(label, obj->reads->reads[r].read_label) == 0 ) {
+                                                            read_found++;
+                                                            if( tag != NULL && tag[0] != '\0' ) {
+                                                                if( obj->reads->reads[r].coord_type != rdsp_ExpectedBaseCallTable_ct ) {
+                                                                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                                                                    PLOGERR(klogErr, (klogErr, rc,
+                                                                            "MEMBER '$(m)' READ_LABEL '$(l)' READ_SPEC must have EXPECTED_BASECALL_TABLE type",
+                                                                            PLOG_2(PLOG_S(m),PLOG_S(l)), member_name, label));
+                                                                } else {
+                                                                    uint32_t b, bcall_found = 0;
+                                                                    memset(basecalls, 0, sizeof(basecalls));
+                                                                    /* find tag in table */
+                                                                    for(b = 0; rc == 0 && b < obj->reads->reads[r].coord.expected_basecalls.count; b++) {
+                                                                        if( obj->reads->reads[r].coord.expected_basecalls.table[b].read_group_tag != NULL &&
+                                                                            strcmp(tag, obj->reads->reads[r].coord.expected_basecalls.table[b].read_group_tag) == 0 ) {
+                                                                            if( bcall_found >= MAX_POOL_MEMBER_BASECALLS ) {
+                                                                                rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcExcessive);
+                                                                                PLOGERR(klogErr, (klogErr, rc,
+                                                                                        "MEMBER '$(m)' READ_LABEL '$(l)' read_group_tag='$(t)' too many basecalls",
+                                                                                         PLOG_3(PLOG_S(m),PLOG_S(l),PLOG_S(t)), member_name, label, tag));
+                                                                            }
+                                                                            basecalls[bcall_found++] = &obj->reads->reads[r].coord.expected_basecalls.table[b];
+                                                                        }
+                                                                    }
+                                                                    if( rc == 0 && bcall_found == 0 ) {
+                                                                        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcNotFound);
+                                                                        PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL '$(l)' read_group_tag='$(t)' in READ_SPEC",
+                                                                                 PLOG_3(PLOG_S(m),PLOG_S(l),PLOG_S(t)), member_name, label, tag));
+                                                                    } else {
+                                                                        rc = PoolMember_AddBasecalls(obj, member_name, r, basecalls);
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                    if( read_found == 0 ) {
+                                                        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcNotFound);
+                                                        PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL '$(l)' in READ_SPEC", PLOG_2(PLOG_S(l),PLOG_S(m)), label, member_name));
+                                                    } else if( read_found > 1 ) {
+                                                        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                                                        PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL '$(l)' in READ_SPEC", PLOG_2(PLOG_S(l),PLOG_S(m)), label, member_name));
+                                                    }
+                                                }
+                                            }
+                                            free(tag);
+                                            free(label);
+                                            KXMLNodeRelease(LABEL);
+                                        } else {
+                                            PLOGERR(klogErr, (klogErr, rc, "MEMBER '$(m)' READ_LABEL #$(i)", PLOG_2(PLOG_S(m),PLOG_U32(i)), member_name, l));
+                                        }
+                                    }
+                                } else {
+                                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+                                    PLOGERR(klogErr, (klogErr, rc, "missing READ_LABEL element(s) in MEMBER '$(m)'", PLOG_S(m), member_name));
+                                }
+                                KXMLNodesetRelease(LABELS);
+                            }
+                            free(member_name);
+                        } else {
+                            PLOGERR(klogErr, (klogErr, rc, "'member_name' in MEMBER node #$(i)", PLOG_U32(i), i));
+                        }
+                        KXMLNodeRelease(MEMBER);
+                    } else {
+                        PLOGERR(klogErr, (klogErr, rc, "MEMBER node #$(i)", PLOG_U32(i), i));
+                    }
+                }
+            } else if( rc != 0 ) {
+                LOGERR(klogErr, rc, "POOL/MEMBER(s)");
+            }
+            KXMLNodesetRelease(MEMBERS);
+        } else {
+            LOGERR(klogErr, rc, "POOL/MEMBER(s)");
+        }
+    }
+#if _DEBUGGING
+    PoolMember_Dump(&obj->member_null->node, obj);
+    BSTreeForEach(obj->member_pool, false, PoolMember_Dump, obj);
+#endif
+    return rc;
+}
+
+typedef struct ExpectedTableMatch_struct {
+    /* in */
+    const char* seq;
+    uint32_t len;
+    const char* tag;
+    enum {
+        etm_Forward = 1,
+        etm_Reverse,
+        etm_Both
+    } direction;
+    bool left_adjusted;
+    /* out */
+    AgrepMatch match;
+    ReadSpecXML_read_BASECALL* bc;
+} ExpectedTableMatch;
+
+static
+bool Experiment_ExpectedTableMatch(const ReadSpecXML_read_BASECALL_TABLE* table, ExpectedTableMatch* data)
+{
+    uint32_t i;
+
+    assert(table && data && data->seq );
+
+    data->match.score = -1;
+    for(i = 0; i < table->count; i++) {
+        AgrepMatch match;
+        ReadSpecXML_read_BASECALL* bc = &table->table[i];
+
+        if( data->tag != NULL && strcmp(data->tag, bc->read_group_tag) != 0 ) {
+            continue;
+        }
+        if( data->direction != etm_Both ) {
+            if( bc->match_edge == match_edge_End ) {
+                if( data->direction == etm_Forward ) {
+                    continue;
+                }
+            } else if( data->direction != etm_Forward ) {
+                continue;
+            }
+        }
+        match.score = -1;
+        if( data->left_adjusted ) {
+            if( AgrepFindFirst(bc->agrep, bc->max_mismatch, data->seq, data->len, &match) ) {
+                if( data->direction == etm_Reverse ) {
+                    int32_t right_tail = data->len - match.position - strlen(bc->basecall);
+                    if( right_tail > bc->max_mismatch - match.score ) {
+                        match.score = -1;
+                    } else if( match.position > 0 ) {
+                        match.score += right_tail;
+                        match.length += right_tail;
+                        match.position = 0;
+                    }
+                } else {
+                    if( match.position > bc->max_mismatch - match.score ) {
+                        match.score = -1;
+                    } else if( match.position > 0 ) {
+                        match.score += match.position;
+                        match.length += match.position;
+                        match.position = 0;
+                    }
+                }
+            }
+        } else {
+            AgrepFindBest(bc->agrep, bc->max_mismatch, data->seq, data->len, &match);
+        }
+        if( !(match.score < 0) ) {
+            DEBUG_MSG(3, ("agrep match bc %s, min: %u, max: %u, edge: %s%s, [%d:%d] score %d\n", bc->basecall, bc->min_match, bc->max_mismatch,
+                       bc->match_edge == match_edge_Full ? "Full" : (bc->match_edge == match_edge_Start ? "Start" : "End"),
+                       data->left_adjusted ? " left adjusted" : "",
+                       match.position, match.length, match.score));
+            if( (data->match.score < 0 || data->match.score > match.score) ) {
+                memmove(&data->match, &match, sizeof(data->match));
+                data->bc = bc;
+            }
+        }
+    }
+    return !(data->match.score < 0);
+}
+
+static
+rc_t Experiment_FillRead(const ReadSpecXML_read* spec, PoolReadSpec* pool,
+                         const char** tag, const uint32_t nreads, int16_t start, const char* bases, uint32_t nbases)
+{
+    rc_t rc = 0;
+
+    switch(spec->coord_type) {
+        case rdsp_RelativeOrder_ct:
+            if( pool[-1].length >= 0 ) {
+                if( pool[-1].start >= 0 ) {
+                    pool->start = pool[-1].start + pool[-1].length;
+                } else {
+                    pool->start = start;
+                }
+            } else {
+                pool->start = -1;
+            }
+            pool->length = -1;
+            if( nreads > 1 ) {
+                if( (rc = Experiment_FillRead(spec + 1, pool + 1, tag + 1, nreads - 1, start, bases, nbases)) != 0 ) {
+                    break;
+                }
+            }
+            if( pool->start < 0 ) {
+                pool->start = pool[1].start;
+            }
+            pool->length = pool[1].start - pool->start;
+            break;
+
+        case rdsp_BaseCoord_ct:
+        case rdsp_CycleCoord_ct:
+            pool->start = spec->coord.start_coord - 1;
+            pool->length = -1;
+            if( nreads > 1 ) {
+                if( (rc = Experiment_FillRead(spec + 1, pool + 1, tag + 1, nreads - 1, pool->start, bases, nbases)) != 0 ) {
+                    break;
+                }
+            }
+            pool->length = pool[1].start - pool->start;
+            break;
+
+        case rdsp_ExpectedBaseCall_ct:
+        case rdsp_ExpectedBaseCallTable_ct:
+            {{
+            int32_t gap;
+            if( spec->coord.expected_basecalls.base_coord > 0 ) {
+                pool->start = spec->coord.expected_basecalls.base_coord - 1;
+                start = pool->start;
+            } else {
+                pool->start = -1;
+            }
+            pool->length = -1;
+            pool->item[0] = NULL;
+            pool->score = -1;
+            if( spec->coord.expected_basecalls.match_start > 0 ) {
+                uint32_t i, stop = nbases;
+                ExpectedTableMatch data;
+                /* find terminator, if any */
+                for(i = 1; i < nreads; i++) {
+                    if( spec[i].coord_type == rdsp_BaseCoord_ct ||
+                        spec[i].coord_type == rdsp_CycleCoord_ct ||
+                        spec[i].coord_type == rdsp_FIXED_BRACKET_ct ) {
+                        stop = spec[i].coord.start_coord - 1;
+                        break;
+                    }
+                }
+                data.seq = &bases[start];
+                data.len = stop - start;
+                data.tag = *tag;
+                data.direction = etm_Forward;
+                data.left_adjusted = !(pool->start < 0) || !(pool[-1].length < 0);
+                DEBUG_MSG(3, ("agrep find read %u fwd in: '%.*s' = %u\n", nreads, data.len, data.seq, data.len));
+                if( Experiment_ExpectedTableMatch(&spec->coord.expected_basecalls, &data) ) {
+                    DEBUG_MSG(3, ("agrep found from %hd match %d:%d - %d '%s' in '%.*s...' \n",
+                                   start, data.match.position, data.match.length,
+                                   data.match.score, data.bc->basecall,
+                                   start + data.match.position + data.match.length * 3 + data.match.score, &bases[start]));
+                    pool->start = start + data.match.position;
+                    pool->length = data.match.length;
+                    pool->item[0] = data.bc;
+                    pool->score = data.match.score;
+                    start = pool->start + pool->length;
+                } else {
+                    DEBUG_MSG(3, ("agrep nothing found\n"));
+                }
+            }
+            if( pool[-1].length >= 0 && pool->length < 0 && spec->coord.expected_basecalls.match_end == 0 ) {
+                pool->length = spec->coord.expected_basecalls.default_length;
+                start += pool->length;
+            }
+            if( nreads > 1 ) {
+                if( (rc = Experiment_FillRead(spec + 1, pool + 1, tag + 1, nreads - 1, start, bases, nbases)) != 0 ) {
+                    break;
+                }
+            }
+            if( spec->coord.expected_basecalls.match_end > 0 ) {
+                /* match_end can have a better match even if match_start found smth before
+                   normally table has start or end match edge, not both */
+                char r[4096];
+                uint32_t i;
+                ExpectedTableMatch data;
+                
+                data.len = pool[1].start - start;
+                DEBUG_MSG(3, ("agrep find read %u rev in: '%.*s' = %u\n", nreads, data.len, &bases[start], data.len));
+                if( data.len > sizeof(r) ) {
+                    rc = RC(rcSRA, rcFormatter, rcResolving, rcBuffer, rcInsufficient);
+                    break;
+                }
+                for(i = 0; i < data.len; i++) {
+                    /* reverse a portion of seq */
+                    r[i] = bases[pool[1].start - i - 1];
+                }
+                data.seq = r;
+                data.tag = *tag;
+                data.direction = etm_Reverse;
+                data.left_adjusted = spec[1].coord_type != rdsp_RelativeOrder_ct && pool[1].start > 0;
+                DEBUG_MSG(3, ("agrep find read %u rev in: '%.*s' = %u\n", nreads, data.len, data.seq, data.len));
+                if( Experiment_ExpectedTableMatch(&spec->coord.expected_basecalls, &data) ) {
+                    DEBUG_MSG(3, ("agrep found rev from %hd match %d:%d - %d '%s' in '%.*s' \n",
+                                    start, data.match.position, data.match.length, data.match.score,
+                                    data.bc->basecall, data.len, &bases[pool[1].start - data.len]));
+                    if( pool->length < 0 || data.match.score < pool->score ) {
+                        pool->start = pool[1].start - data.match.position - data.match.length;
+                        pool->length = data.match.length;
+                        pool->item[0] = data.bc;
+                        pool->score = data.match.score;
+                    }
+                } else {
+                    DEBUG_MSG(3, ("agrep nothing found rev\n"));
+                }
+            }
+            if( pool->length < 0 ) {
+                pool->length = spec->coord.expected_basecalls.default_length;
+            }
+            if( pool->start < 0 ) {
+                pool->start = pool[1].start - pool->length;
+            }
+            gap = pool[1].start - (pool->start + pool->length);
+            if( gap > 0 ) {
+                /* right gap */
+                if( spec[1].coord_type == rdsp_RelativeOrder_ct ) {
+                    /* adjust right read's start to the tail of current read */
+                    pool[1].start -= gap;
+                    pool[1].length += gap;
+                    gap = 0;
+                } else if( spec[1].coord_type >= rdsp_ExpectedBaseCall_ct &&
+                    spec[1].coord.expected_basecalls.base_coord <= 0 && pool[1].item[0] != NULL ) {
+                    /* move left read's start to left as much as possible */
+                    int32_t left = pool[1].item[0]->max_mismatch - pool[1].score;
+                    if( left > 0 ) {
+                        if( left > gap ) {
+                            left = gap;
+                        }
+                        pool[1].length += left;
+                        pool[1].score += left;
+                        pool[1].start -= left;
+                        gap -= left;
+                    }
+                }
+                if( gap > 0 && pool->item[0] != NULL ) {
+                    /* add gap to end of self */
+                    int32_t left = pool->item[0]->max_mismatch - pool->score;
+                    if( left > 0 ) {
+                        if( left > gap ) {
+                            left = gap;
+                        }
+                        pool->length += left;
+                        pool->score += left;
+                    }
+                }
+            }
+            break;
+            }}
+        default:
+            rc = RC(rcSRA, rcFormatter, rcResolving, rcItem, rcUnexpected);
+            break;
+    }
+    return rc;
+}
+
+typedef struct PoolMember_FindReverse_Data_struct {
+    const char* tags[MAX_SPOT_DESCRIPTOR_READS];
+    uint8_t nreads;
+    const PoolMember* member;
+} PoolMember_FindReverse_Data;
+
+static
+bool CC PoolMember_FindReverse(BSTNode* n, void* d)
+{
+    const PoolMember* node = (const PoolMember*)n;
+    PoolMember_FindReverse_Data* data = (PoolMember_FindReverse_Data*)d;
+    int r, j, found;
+
+    for(r = 1; r <= data->nreads; r++) {
+        /* comparing pointers here because tags contains same pointers */
+        if( node->spec[r].item[0] == NULL && data->tags[r] == NULL ) {
+            continue;
+        }
+        found = 0;
+        for(j = 0; node->spec[r].item[j] != NULL; j++ ) {
+            if( node->spec[r].item[j]->read_group_tag == data->tags[r] ) {
+                found = 1;
+                break;
+            }
+        }
+        if( found == 0 ) {
+            return false;
+        }
+    }
+    data->member = node;
+    return true;
+}
+
+static
+rc_t Experiment_FillSegAgrep(const ExperimentXML* self, PoolReadSpec* pool, const PoolMember* src,
+                             uint32_t nbases, const char* bases,
+                             const char** const new_member_name)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    PoolMember_FindReverse_Data data;
+
+    /* close left and right brackets tech reads as spot terminators */
+    pool[0].start = 0;
+    pool[0].length = 0;
+    pool[self->reads->nreads + 1].start = nbases;
+    pool[self->reads->nreads + 1].length = 0;
+
+    /* setup known tags if it is predefined member search */
+    for(i = 0; i <= self->reads->nreads + 1; i++) {
+        data.tags[i] = src->spec[i].item[0] ? src->spec[i].item[0]->read_group_tag : NULL;
+    }
+    /* start from read, not bracket read */
+    rc = Experiment_FillRead(self->reads->reads, &pool[1], &data.tags[1], self->reads->nreads, 0, bases, nbases);
+
+    if( rc != 0 ) {
+        DEBUG_MSG(3, ("ERROR: %R\n", rc));
+    }
+    DEBUG_MSG(3, ("%s: bases %u: '%.*s'\n", new_member_name ? *new_member_name : NULL, nbases, nbases, bases));
+    for(i = 1; i <= self->reads->nreads; i++) {
+        const char* b = NULL;
+        if( pool[i].start >= 0 ) {
+            b = &bases[pool[i].start];
+        }
+        DEBUG_MSG(3, ("Read %u. [%hd:%hd] - '%.*s'",
+                       i, pool[i].start, pool[i].length, pool[i].length < 0 ? 0 : pool[i].length, b));
+        if( self->reads->spec[i].coord_type == rdsp_FIXED_BRACKET_ct ) {
+            DEBUG_MSG(3, (" terminator???"));
+        }
+        if( self->reads->spec[i].coord_type >= rdsp_ExpectedBaseCall_ct ) {
+            if( pool[i].item[0] ) {
+                if( pool[i].item[0]->match_edge == match_edge_End ) {
+                    DEBUG_MSG(3, (" in reverse"));
+                }
+                DEBUG_MSG(3, (" matches %s", pool[i].item[0]->basecall));
+                if( pool[i].item[0]->read_group_tag ) {
+                    DEBUG_MSG(3, (" tagged %s", pool[i].item[0]->read_group_tag));
+                }
+                DEBUG_MSG(3, (" with %d mismatches", pool[i].score));
+            } else {
+                DEBUG_MSG(3, (" no match"));
+            }
+        }
+        DEBUG_MSG(3, ("\n"));
+    }
+
+    if( rc == 0 && new_member_name != NULL ) {
+        data.nreads = self->reads->nreads;
+        data.member = NULL;
+        for(i = 1; i <= self->reads->nreads; i++) {
+            if( self->reads->spec[i].coord_type == rdsp_ExpectedBaseCallTable_ct && pool[i].item[0] != NULL ) {
+                data.tags[i] = pool[i].item[0]->read_group_tag;
+            } else {
+                data.tags[i] = NULL;
+            }
+        }
+        if( BSTreeDoUntil(self->member_pool, false, PoolMember_FindReverse, &data) ) {
+            *new_member_name = data.member->name;
+            DEBUG_MSG(2, ("Assigned member_name '%s'\n", *new_member_name));
+        } else {
+#if _DEBUGGING
+            DEBUG_MSG(2, ("member_name reverse lookup failed for tags:"));
+            for(i = 1; i <= self->reads->nreads; i++) {
+                DEBUG_MSG(2, (" '%s'", data.tags[i]));
+            }
+            DEBUG_MSG(2, ("\n"));
+#endif
+        }
+    }
+    return rc;
+}
+
+rc_t Experiment_MemberSeg(const ExperimentXML* self,
+                          const char* const file_member_name, const char* const data_block_member_name,
+                          uint32_t nbases, const char* bases,
+                          SRASegment* seg, const char** const new_member_name)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    PoolReadSpec pool[MAX_SPOT_DESCRIPTOR_READS];
+
+    if( self == NULL || bases == NULL || seg == NULL || new_member_name == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcResolving, rcParam, rcNull);
+    } else if( nbases < 1 ) {
+        rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcEmpty);
+    }
+
+    if( rc == 0 ) {
+        const char* mm = NULL;
+        switch(self->processing.barcode_rule) {
+            case eBarcodeRule_not_set:
+                mm = data_block_member_name ? data_block_member_name : file_member_name;
+                break;
+
+            case eBarcodeRule_use_file_spot_name:
+                mm = file_member_name;
+                break;
+
+            case eBarcodeRule_use_table_in_experiment:
+            case eBarcodeRule_ignore_barcode:
+                mm = NULL;
+                break;
+        }
+        if( self->member_pool == NULL || self->processing.barcode_rule == eBarcodeRule_ignore_barcode ) {
+            if( (rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, NULL)) == 0 ) {
+                *new_member_name = mm;
+            }
+        } else if( mm == NULL ) {
+            *new_member_name = NULL;
+	    rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, new_member_name);
+        } else {
+            PoolMember* pm = (PoolMember*)BSTreeFind(self->member_pool, mm, PoolMember_FindByName);
+            if( pm == NULL ) {
+                rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcNotFound);
+                PLOGERR(klogErr, (klogErr, rc, "specified member_name '$(m)'", PLOG_S(m), mm));
+            } else {
+                if( (rc = Experiment_FillSegAgrep(self, pool, pm, nbases, bases, NULL)) == 0 ) {
+                    *new_member_name = mm;
+                }
+            }
+        }
+    }
+
+    if( rc == 0 ) {
+        int32_t new_bases = 0;
+
+        for(i = 1; i <= self->reads->nreads; i++) {
+            if( pool[i].start < 0 || pool[i].length < 0 ) {
+                rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcIncomplete);
+                PLOGERR(klogErr, (klogErr, rc, "Read #$(i) boundaries", PLOG_U32(i), i));
+            } else if( i == 1 ) {
+                if( pool[i].start != 0 ) {
+                    rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcInvalid);
+                    PLOGERR(klogErr, (klogErr, rc, "Read #$(i) do not start at 0", PLOG_U32(i), i));
+                }
+            } else {
+                int16_t delta = pool[i].start - pool[i - 1].length - pool[i - 1].start;
+                /* try to close gap by failng back to default length IF:
+                   prev read was EXPECTED_BASECALL OR
+                                 EXPECTED_BASECALL_TABLE and there an BASECALL chosen
+                   AND
+                    defailt_length != 0 (was set)
+                   */
+                if( delta != 0 &&
+                    (self->reads->spec[i - 1].coord_type == rdsp_ExpectedBaseCall_ct ||
+                     (self->reads->spec[i - 1].coord_type == rdsp_ExpectedBaseCallTable_ct && pool[i - 1].item[0] != NULL)) &&
+                    self->reads->spec[i - 1].coord.expected_basecalls.default_length > 0 ) {
+                    new_bases -= pool[i - 1].length;
+                    pool[i - 1].length = self->reads->spec[i - 1].coord.expected_basecalls.default_length;
+                    DEBUG_MSG(2, ("trying to close delta %hi for read %u: length reset default %hi\n", delta, i - 1, pool[i - 1].length));
+                    if( pool[i - 1].item[0] != NULL  && pool[i - 1].item[0]->read_group_tag != NULL ) {
+                        DEBUG_MSG(2, ("member_name '%s' reset to ''\n", *new_member_name));
+                        *new_member_name = NULL;
+                    }
+                    delta = pool[i].start - pool[i - 1].length - pool[i - 1].start;
+                    new_bases += pool[i - 1].length;
+                    seg[i - 2].len = pool[i - 1].length;
+                }
+                if( delta > 0 ) {
+                    rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcInconsistent);
+                    PLOGERR(klogErr, (klogErr, rc, "Gap between reads #$(p) and #$(i)", PLOG_2(PLOG_U32(p),PLOG_U32(i)), i - 1, i));
+                } else if( delta < 0 ) {
+                    rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcInconsistent);
+                    PLOGERR(klogErr, (klogErr, rc, "Reads #$(p) and #$(i) overlap", PLOG_2(PLOG_U32(p),PLOG_U32(i)), i - 1, i));
+                }
+            }
+            seg[i - 1].start = pool[i].start;
+            seg[i - 1].len = pool[i].length;
+            new_bases += pool[i].length;
+        }
+        if( rc == 0 && (new_bases < 0 || nbases != new_bases) ) {
+            rc = RC(rcSRA, rcFormatter, rcResolving, rcData, rcInconsistent);
+            PLOGERR(klogErr, (klogErr, rc, "total read length $(c)", PLOG_U32(c), new_bases));
+        }
+        if( rc != 0 ) {
+            char err_buf[8192], *p = err_buf;
+            size_t max = sizeof(err_buf);
+
+            for(i = 1; i <= self->reads->nreads; i++) {
+                int x = snprintf(p, max, "[%hd:%d, len = %hd", pool[i].start, pool[i].start + pool[i].length, pool[i].length);
+                if( x > 0 && x < max ) {
+                    max -= x;
+                    p += x;
+                    if( self->reads->spec[i].coord_type == rdsp_ExpectedBaseCallTable_ct ) {
+                        if( pool[i].item[0] != NULL ) {
+                            if( pool[i].item[0]->read_group_tag != NULL ) {
+                                x = snprintf(p, max, ", matched tag '%s', mismatches %d]", pool[i].item[0]->read_group_tag, pool[i].score);
+                            } else {
+                                x = snprintf(p, max, ", mismatches %d]", pool[i].score);
+                            }
+                        } else {
+                            x = snprintf(p, max, ", no match]");
+                        }
+                    } else {
+                        x = snprintf(p, max, "]");
+                    }
+                }
+                if( x <= 0 || x >= max ) {
+                    max = strlen(err_buf);
+                    err_buf[max - 4] = '\0';
+                    strcat(err_buf, "... ");
+                    break;
+                }
+                max -= x;
+                p += x;
+            }
+            PLOGMSG(klogErr, (klogErr, "segments: $(seg) spot length actual: $(actual), calculated $(calc)",
+                "seg=%s,actual=%u,calc=%d", err_buf, nbases, new_bases));
+        }
+    }
+    return rc;
+}
+
+rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
+                                const char* const file_member_name, const char* const data_block_member_name,
+                                const char** const new_member_name)
+{
+    rc_t rc = 0;
+    if( self == NULL || new_member_name == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcResolving, rcParam, rcNull);
+    } else {
+        switch(self->processing.barcode_rule) {
+            case eBarcodeRule_not_set:
+                *new_member_name = data_block_member_name ? data_block_member_name : file_member_name;
+                break;
+
+            case eBarcodeRule_use_file_spot_name:
+                *new_member_name = file_member_name;
+                break;
+
+            case eBarcodeRule_use_table_in_experiment:
+            case eBarcodeRule_ignore_barcode:
+                *new_member_name = NULL;
+                break;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t Experiment_Apply_RUN_ATTRIBUTES(const ExperimentXML* cself, RunAttributes* attr, uint32_t spot_length)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcEvaluating, rcSelf, rcNull);
+    } else if( attr != NULL ) {
+        ExperimentXML* obj = (ExperimentXML*)cself;
+
+        obj->processing.barcode_rule = attr->barcode_rule;
+        if( attr->quality_offset != '\0' ) {
+            obj->processing.quality_offset = attr->quality_offset;
+        }
+        if( attr->quality_type != eExperimentQualityType_Undefined ) {
+            obj->processing.quality_type = attr->quality_type;
+        }
+        obj->spot_length = attr->spot_length ? attr->spot_length : spot_length;
+        if( obj->spot_length == 0 &&
+            (obj->platform->id == SRA_PLATFORM_ILLUMINA || obj->platform->id == SRA_PLATFORM_ABSOLID) ) {
+            PLOGMSG(klogWarn, (klogWarn,
+                "SPOT_LENGTH is not found or specified as $(l)", PLOG_U32(l), obj->spot_length));
+        }
+    }
+    return rc;
+}
+
+rc_t Experiment_Make(const ExperimentXML** self, const KXMLDoc* doc, RunAttributes* attr)
+{
+    rc_t rc = 0;
+    ExperimentXML* obj = NULL;
+    const KXMLNodeset* ns = NULL;
+    uint32_t p_spot_length = 0, r_spot_length = 0;
+
+    if( self == NULL || doc == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    obj = calloc(1, sizeof(*obj));
+    if( obj == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    }
+    if( (rc = KXMLDocOpenNodesetRead(doc, &ns, "/EXPERIMENT_SET/EXPERIMENT | /EXPERIMENT")) == 0 ) {
+        uint32_t count = 0;
+        if( (rc = KXMLNodesetCount(ns, &count)) == 0 && count != 1 ) {
+            rc = RC(rcSRA, rcFormatter, rcConstructing, rcTag, count ? rcExcessive : rcNotFound);
+            LOGERR(klogErr, rc, "EXPERIMENT");
+        } else {
+            const KXMLNode* EXPERIMENT = NULL;
+            if( (rc = KXMLNodesetGetNodeRead(ns, &EXPERIMENT, 0)) == 0 ) {
+                if( (rc = PlatformXML_Make(&obj->platform, EXPERIMENT, &p_spot_length)) == 0 ) {
+                    if( attr->platform != NULL ) {
+                        if( obj->platform->id != attr->platform->id ) {
+                            rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                            LOGERR(klogErr, rc, "EXPERIMENT and RUN platforms differ");
+                        } else {
+                            PlatformXML_Whack(obj->platform);
+                            obj->platform = attr->platform;
+                            /* take ownership */
+                            attr->platform = NULL;
+                        }
+                    }
+                    if( rc == 0 ) {
+                        if( attr->reads == NULL ) {
+                            if( (rc = ReadSpecXML_Make(&obj->reads, EXPERIMENT, "DESIGN/SPOT_DESCRIPTOR", &r_spot_length)) != 0 ) {
+                                LOGERR(klogErr, rc, "EXPERIMENT/.../READ_SPEC");
+                            }
+                        } else {
+                            obj->reads = attr->reads;
+                            /* take ownership */
+                            attr->reads = NULL;
+                        }
+                        if( rc == 0 && (rc = parse_POOL(EXPERIMENT, obj)) == 0 ) {
+                            rc = Experiment_Apply_RUN_ATTRIBUTES(obj, attr, r_spot_length ? r_spot_length : p_spot_length);
+                        }
+                        if( rc == 0 && p_spot_length != 0 && r_spot_length != 0 && p_spot_length != r_spot_length ) {
+                            PLOGMSG(klogWarn, (klogWarn,
+                                "in EXPERIMENT sequence length (cycle count) in PLATFORM $(p) differ"
+                                " from SPOT_LENGTH $(l) in SPOT_DECODE_SPEC",
+                                PLOG_2(PLOG_U32(p),PLOG_U32(l)), p_spot_length, r_spot_length));
+                        }
+                    }
+                } else {
+                    LOGERR(klogErr, rc, "EXPERIMENT/PLATFORM");
+                }
+                KXMLNodeRelease(EXPERIMENT);
+            }
+        }
+        KXMLNodesetRelease(ns);
+    }
+    if( rc != 0 ) {
+        *self = NULL;
+        Experiment_Whack(obj);
+    } else {
+        *self = obj;
+    }
+    return rc;
+}
+
+rc_t Experiment_GetPlatform(const ExperimentXML* cself, const PlatformXML** platform)
+{
+    rc_t rc = 0;
+    if( cself == NULL || platform == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *platform = cself->platform;
+    }
+    return rc;
+}
+
+rc_t Experiment_GetProcessing(const ExperimentXML* cself, const ProcessingXML** processing)
+{
+    rc_t rc = 0;
+    if( cself == NULL || processing == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *processing = &cself->processing;
+    }
+    return rc;
+}
+
+rc_t Experiment_GetReadNumber(const ExperimentXML* cself, uint8_t* nreads)
+{
+    rc_t rc = 0;
+    if( cself == NULL || nreads == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *nreads = cself->reads->nreads;
+    }
+    return rc;
+}
+
+rc_t Experiment_GetSpotLength(const ExperimentXML* cself, uint32_t* spot_length)
+{
+    rc_t rc = 0;
+    if( cself == NULL || spot_length == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *spot_length= cself->spot_length;
+    }
+    return rc;
+}
+
+rc_t Experiment_GetRead(const ExperimentXML* cself, uint8_t read_id, const ReadSpecXML_read** read_spec)
+{
+    rc_t rc = 0;
+    if( cself == NULL || read_spec == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else if( read_id >= cself->reads->nreads ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcId, rcOutofrange);
+    } else {
+        *read_spec = &(cself->reads->reads[read_id]);
+    }
+    return rc;
+}
+
+typedef struct PoolMember_FindByTag_Data_struct {
+    /* in */
+    const char* tag;
+    uint8_t readid;
+    /* out */
+    const char* member_name;
+} PoolMember_FindByTag_Data;
+
+static
+bool CC PoolMember_FindByTag(BSTNode *node, void *data)
+{
+    PoolMember_FindByTag_Data* d = (PoolMember_FindByTag_Data*)data;
+    const PoolMember* n = (const PoolMember*)node;
+    int i = 0;
+
+    const ReadSpecXML_read_BASECALL* bc = n->spec[d->readid].item[i];
+    while( bc != NULL ) {
+        if( strcmp(bc->read_group_tag, d->tag) == 0 ) {
+            d->member_name = n->name;
+            return true;
+        }
+        bc = n->spec[d->readid].item[++i];
+    }
+    return false;
+}
+
+rc_t Experiment_FindReadInTable(const ExperimentXML* cself, uint8_t read_id, const char* key, const char** basecall, const char** member_name)
+{
+    rc_t rc = 0;
+    if( cself == NULL || key == NULL || (basecall == NULL && member_name == NULL) ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else if( read_id >= cself->reads->nreads ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcId, rcOutofrange);
+    } else {
+        const ReadSpecXML_read* read_spec = &(cself->reads->reads[read_id++]);
+        if( read_spec->coord_type != rdsp_ExpectedBaseCallTable_ct ) {
+            rc = RC(rcSRA, rcFormatter, rcAccessing, rcName, rcNotFound);
+        } else {
+            ExpectedTableMatch match;
+
+            rc = RC(rcSRA, rcFormatter, rcAccessing, rcName, rcNotFound);
+            /* try to find key as basecall */
+            match.seq = key;
+            match.len = strlen(key);
+            match.tag = NULL;
+            match.direction = etm_Both;
+            match.left_adjusted = true;
+            if( Experiment_ExpectedTableMatch(&read_spec->coord.expected_basecalls, &match) ) {
+                rc = 0;
+                if( basecall != NULL ) {
+                    *basecall = match.bc->basecall;
+                }
+                if( member_name != NULL ) {
+                    if( cself->member_pool != NULL ) {
+                        PoolMember_FindByTag_Data data;
+                        data.readid = read_id;
+                        data.tag = match.bc->read_group_tag;
+                        if( BSTreeDoUntil(cself->member_pool, false, PoolMember_FindByTag, &data) ) {
+                            *member_name = data.member_name;
+                        } else {
+                            rc = RC(rcSRA, rcFormatter, rcAccessing, rcSelf, rcCorrupt);
+                        }
+                    } else {
+                        *member_name = NULL;
+                    }
+                }
+            } else if( cself->member_pool != NULL ) {
+                /* try to find key as member_name */
+                PoolMember* pm = (PoolMember*)BSTreeFind(cself->member_pool, key, PoolMember_FindByName);
+                if( pm != NULL ) {
+                    rc = 0;
+                    if( member_name != NULL ) {
+                        *member_name = pm->name;
+                    }
+                    if( basecall != NULL ) {
+                        if( pm->spec[read_id].item[0] != NULL ) {
+                            *basecall = pm->spec[read_id].item[0]->basecall;
+                            if( pm->spec[read_id].item[1] != NULL ) {
+                                rc = RC(rcSRA, rcFormatter, rcAccessing, rcData, rcAmbiguous);
+                            }
+                        } else {
+                            rc = RC(rcSRA, rcFormatter, rcAccessing, rcData, rcViolated);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t Experiment_HasPool(const ExperimentXML* cself, bool* has_pool)
+{
+    rc_t rc = 0;
+    if( cself == NULL || has_pool == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *has_pool = cself->member_pool != NULL;
+    }
+    return rc;
+}
+
+rc_t Experiment_ReadSegDefault(const ExperimentXML* self, SRASegment* seg)
+{
+    rc_t rc = 0;
+
+    /* TBD to do memberseg call based on junk seq of known length */
+    if( self == NULL || seg == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcResolving, rcParam, rcNull);
+    } else if( self->spot_length == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+    } else {
+        uint32_t i;
+        int32_t spot_len = self->spot_length;
+
+        i = self->reads->nreads;
+        do {
+            int16_t len = 0;
+            --i;
+            switch(self->reads->reads[i].coord_type) {
+                case rdsp_RelativeOrder_ct:
+                    if( i == 0 ) {
+                        len = spot_len;
+                    } else {
+                        len = 0;
+                    }
+                    break;
+                case rdsp_BaseCoord_ct:
+                case rdsp_CycleCoord_ct:
+                    len = spot_len - (self->reads->reads[i].coord.start_coord - 1);
+                    break;
+                case rdsp_ExpectedBaseCall_ct:
+                case rdsp_ExpectedBaseCallTable_ct:
+                    if( self->reads->reads[i].coord.expected_basecalls.base_coord > 0 ) {
+                        len = spot_len - (self->reads->reads[i].coord.expected_basecalls.base_coord - 1);
+                    }
+                    len += self->reads->reads[i].coord.expected_basecalls.default_length;
+                    break;
+                default:
+                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnexpected);
+                    LOGERR(klogErr, rc, "read type in default");
+                    break;
+            }
+            spot_len -= len;
+            if( spot_len < 0 || len < 0 ) {
+                rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                LOGERR(klogErr, rc, "cumulative read lengths and SEQUENCE_LENGTH");
+                return rc;
+            } else {
+                seg[i].start = spot_len;
+                seg[i].len = len;
+            }
+        } while( i > 0 );
+    }
+    return rc;
+}
+
+void Experiment_Whack(const ExperimentXML* cself)
+{
+    if( cself != NULL ) {
+        ExperimentXML* self = (ExperimentXML*)cself;
+
+        free(self->processing.quality_scorer);
+        ReadSpecXML_Whack(self->reads);
+        BSTreeWhack(self->member_pool, PoolMember_Whack, NULL);
+        free(self->member_pool);
+        PoolMember_Whack(&self->member_null->node, NULL);
+        PlatformXML_Whack(self->platform);
+        free(self);
+    }
+}
diff --git a/tools/sra-load/experiment-xml.h b/tools/sra-load/experiment-xml.h
new file mode 100644
index 0000000..8ab869d
--- /dev/null
+++ b/tools/sra-load/experiment-xml.h
@@ -0,0 +1,77 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_experiment_xml_
+#define _sra_load_experiment_xml_
+
+#include "common-xml.h"
+
+typedef struct ProcessingXML_struct {
+    char* quality_scorer;
+    ExperimentQualityType quality_type;
+    uint8_t quality_offset;
+    ExperimentBarcodeRule barcode_rule;
+
+} ProcessingXML;
+
+typedef struct ExperimentXML ExperimentXML;
+
+/* Make spot descriptor information structure based on XML file
+ */
+rc_t Experiment_Make(const ExperimentXML** self, const KXMLDoc* doc, RunAttributes* attr);
+
+rc_t Experiment_GetPlatform(const ExperimentXML* cself, const PlatformXML** platform);
+
+rc_t Experiment_GetProcessing(const ExperimentXML* cself, const ProcessingXML** processing);
+
+rc_t Experiment_GetReadNumber(const ExperimentXML* cself, uint8_t* nreads);
+
+rc_t Experiment_GetSpotLength(const ExperimentXML* cself, uint32_t* spot_length);
+
+/* ZERO-based read_id here! */
+rc_t Experiment_GetRead(const ExperimentXML* cself, uint8_t read_id, const ReadSpecXML_read** read_spec);
+
+/* find in read (EXPECTED_BASECALL_TABLE type ONLY) basecall and/or member_name by bases or mamber_name
+ * on of basecall or member_name must be not NULL
+ */
+rc_t Experiment_FindReadInTable(const ExperimentXML* cself, uint8_t read_id, const char* key, const char** basecall, const char** member_name);
+
+rc_t Experiment_HasPool(const ExperimentXML* cself, bool* has_pool);
+
+rc_t Experiment_ReadSegDefault(const ExperimentXML* self, SRASegment* seg);
+
+rc_t Experiment_MemberSeg(const ExperimentXML* self,
+                          const char* const file_member_name, const char* const data_block_member_name,
+                          uint32_t nbases, const char* bases,
+                          SRASegment* seg, const char** const new_member_name);
+
+rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
+                                const char* const file_member_name, const char* const data_block_member_name,
+                                const char** const new_member_name);
+
+
+void Experiment_Whack(const ExperimentXML* cself);
+
+#endif /* _sra_load_experiment_xml_ */
diff --git a/tools/sra-load/fastq-fmt.c b/tools/sra-load/fastq-fmt.c
new file mode 100644
index 0000000..fef25cd
--- /dev/null
+++ b/tools/sra-load/fastq-fmt.c
@@ -0,0 +1,701 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+typedef struct FastqLoaderFmt FastqLoaderFmt;
+#define SRALOADERFMT_IMPL FastqLoaderFmt
+#include "loader-fmt.h"
+
+#include "writer-illumina.h"
+#include "writer-454.h"
+#include "writer-ion-torrent.h"
+#include "experiment-xml.h"
+#include "debug.h"
+
+typedef struct FileReadData_struct {
+    bool ready; /* if data is filled from file */
+    pstring name;
+    pstring barcode;
+    IlluminaRead read;
+} FileReadData;
+
+typedef struct FastqFileInfo_struct {
+    const SRALoaderFile* file;
+    /* parsed data from file for single spot */
+    FileReadData spot[2]; /* 2nd element is used for 8 line format file only */
+
+    int qualType;
+    ExperimentQualityEncoding qualEnc;
+    uint8_t qualOffset;
+    int8_t qualMin;
+    int8_t qualMax;
+
+    /* file line buffer */
+    const char* line; /* not NULL if contains unprocessed data */
+    size_t line_len;
+} FastqFileInfo;
+
+struct FastqLoaderFmt {
+    SRALoaderFmt dad;
+    const SRAWriterIllumina* wIllumina;
+    const SRAWriter454* w454;
+    const SRAWriterIonTorrent* wIonTorrent;
+
+    const ProcessingXML* processing;
+    int64_t spots_bad_allowed;
+    int64_t spots_bad_count;
+};
+
+static
+void FileReadData_init(FileReadData* read, bool name_only)
+{
+    pstring_clear(&read->name);
+    pstring_clear(&read->barcode);
+    IlluminaRead_Init(&read->read, name_only);
+    if( !name_only ) {
+        read->ready = false;
+    }
+}
+
+/* reads 1 line from given file
+ * if file->line pointer is not NULL line is in buffer already, nothing is read
+ * failes on error or if line empty and not optional
+ */
+static
+rc_t file_read_line(FastqFileInfo* file, bool optional)
+{
+    rc_t rc = 0;
+static unsigned long lineNo=0;
+
+    if( file->line == NULL ) {
+        if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
+            if( file->line == NULL || file->line_len == 0 ) {
+                if( !optional ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcString, rcInsufficient);
+                }
+            }
+            if( rc == 0 && file->line != NULL ) {
+                if( file->line_len > 0 ) {
+                    const char* e = file->line + file->line_len;
+                    /* right trim */
+                    while( --e >= file->line ) {
+                        if( *e!=0 && !isspace(*e) ) {
+                            break;
+                        }
+                        file->line_len--;
+                    }
+                }
+            }
+        }
+        ++lineNo;
+    }
+    return rc;
+}
+
+/*
+ * compare seq to quality length ignoring traling spaces, no leading spaces expected
+ */
+static
+bool match_seq_to_qual(const char* seq, size_t seq_len, const char* qual, size_t qual_len)
+{
+    char *space = NULL;
+
+    /* cut trailing spaces */
+    while( seq_len > 0 && seq[seq_len - 1] == ' ') {
+        seq_len--;
+    }
+    while( qual_len > 0 && qual[qual_len - 1] == ' ') {
+        qual_len--;
+    }
+    space = memchr(qual, ' ', qual_len);
+    if( space != NULL ) {
+        /* spaced numbers form: count numbers */
+        int spaceCount = 1;
+        do {
+            if( (space = memchr(space, ' ', qual_len - (space - qual))) != NULL ) {
+                spaceCount++;
+                space++;
+            }
+        } while( space != NULL );
+        qual_len = spaceCount;
+    }
+    return seq_len == qual_len;
+}
+
+/* parses name as a given word number (1-based) in a str of size len
+ * looks for name(#barcode)?([\/.]\d)?
+ * returns score of found parts
+ * score == 0 word not found
+ */ 
+static
+uint8_t parse_spot_name(const SRALoaderFile* file, FileReadData* spot, const char* str, size_t len, uint8_t word_number)
+{
+    uint8_t w, score = 0;
+    const char* name, *name_end;
+
+    name = name_end = str;
+    /* set name_end to end of word_number-th word */
+    for(w = 1; w <= word_number || name_end == NULL; w++ ) {
+        /* skip consecutive spaces */
+        while( *name_end == ' ' && name_end != &str[len] ) {
+            name_end++;
+        }
+        name = name_end;
+        name_end = memchr(name, ' ', len - (name_end - str));
+        if( name_end == NULL ) {
+            if( w == word_number ) {
+                name_end = &str[len];
+            }
+            break;
+        }
+    }
+    if( name != name_end && name_end != NULL ) {
+        char* x;
+        rc_t rc;
+
+        /* init only name portion */
+        FileReadData_init(spot, true);
+        --name_end; /* goto last char */
+        if( isdigit(name_end[0])&& (name_end[-1] == '\\' || name_end[-1] == '/' )) {
+            score++;
+            spot->read.read_id = name_end[0] - '0';
+            name_end -= 2;
+        } else if( isdigit(*name_end) && name_end[-1] == '.' ) {
+            int q = 0;
+            if( memrchr(name, '#', name_end - name) != NULL ) {
+                /* have barode -> this is read id */
+                q = 4;
+            } else {
+                /* may a read id, check to see if 4 coords follow */
+                const char* end = name_end - 1;
+                while( --end >= name ) {
+                    if( strchr(":|_", *end) != NULL ) {
+                        q++;
+                    } else if( !isdigit(*end) ) {
+                        break;
+                    }
+                }
+            }
+            if( q == 4 ) {
+                score++;
+                spot->read.read_id = name_end[0] - '0';
+                name_end -= 2;
+            }
+        }
+        if( (x = memrchr(name, '#', name_end - name)) != NULL ) {
+            score++;
+            if( (rc = pstring_assign(&spot->barcode, x + 1, name_end - x)) != 0 ) {
+                SRALoaderFile_LOG(file, klogErr, rc, "barcode $(b)", "b=%.*s", name_end - x, x + 1);
+                return 0;
+            }
+            if( pstring_strcmp(&spot->barcode, "0") == 0 ) {
+                pstring_clear(&spot->barcode);
+            } else if( spot->barcode.len >= 4 &&
+                       (strncmp(spot->barcode.data, "0/1_", 4) == 0 || strncmp(spot->barcode.data, "0/2_", 4) == 0) ) {
+                spot->read.read_id = spot->barcode.data[2] - '0';
+                pstring_assign(&spot->barcode, &spot->barcode.data[4], spot->barcode.len - 4);
+            }
+            name_end = --x;
+        }
+        score++;
+        if( (rc = pstring_assign(&spot->name, name, name_end - name + 1)) != 0 ) {
+            SRALoaderFile_LOG(file, klogErr, rc, "spot name $(n)", "n=%.*s", name_end - name + 1, name);
+            return 0;
+        }
+        /* search for _R\d\D in name and use it as read id, remove from name or spot won't assemble */
+        x = spot->name.data;
+        while( (x = strrchr(x, 'R')) != NULL ) {
+            if( x != spot->name.data && *(x - 1) == '_' && isdigit(*(x + 1)) && !isalnum(*(x + 2)) ) {
+                score++;
+		if(spot->read.read_id == -1){
+			spot->read.read_id = *(x + 1) - '0';
+		}
+                strcpy(x - 1, x + 2);
+                spot->name.len -= 4;
+                break;
+            }
+            x++;
+        }
+        /* find last '=' and use only whatever is to the left of it */
+        if( (x = memrchr(spot->name.data, '=', spot->name.len)) != NULL ) {
+            rc = pstring_assign(&spot->name, spot->name.data, (x - spot->name.data) );
+        }
+    }
+    return score;
+}
+
+/*
+ * in a single line form tries to grab last to chunks defined by sep into seq and qual
+ * ignores spaces adjucent to sep
+ * normally line would look like "name sep seq sep sep qual"
+ */
+static
+bool find_seq_qual_by_sep(FastqLoaderFmt* self, FastqFileInfo* file, const char sep)
+{
+    const char* seq = NULL, *qual = NULL;
+    size_t seq_len = 0, qual_len = 0;
+
+    FileReadData_init(file->spot, false);
+    qual = memrchr(file->line, sep, file->line_len);
+    if( qual != NULL ) {
+        seq = memrchr(file->line, sep, qual - file->line);
+        if( seq != NULL ) {
+            if( parse_spot_name(file->file, file->spot, file->line, seq - file->line, 1) != 0 ) {
+                /* skip leading spaces */
+                do {
+                    seq = seq + 1;
+                } while( *seq == ' ' && seq < (file->line + file->line_len) );
+                seq_len = qual - seq;
+                do {
+                    qual = qual + 1;
+                } while( *qual == ' ' && qual < (file->line + file->line_len)  );
+                qual_len = file->line_len - (qual - file->line);
+                if( *seq != sep && *seq != ' ' && seq_len != 0 &&
+                    *qual != sep && *qual != ' ' && qual_len != 0 ) {
+                    if( match_seq_to_qual(seq, seq_len, qual, qual_len) ) {
+                        rc_t rc;
+                        if( (rc = pstring_assign(&file->spot->read.seq, seq, seq_len)) == 0 ) {
+                            if( pstring_is_fasta(&file->spot->read.seq) ) {
+                                if( (rc = pstring_assign(&file->spot->read.qual, qual, qual_len)) == 0 ) {
+                                    file->spot->read.qual_type = file->qualType;
+                                    return true;
+                                }
+                            }
+                            file->spot->read.seq.len = 0;
+                        }
+                        if( rc != 0 ) {
+                            SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=storing read data");
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return false;
+}
+
+/*
+ * read fasta or quality, which maybe wrapped on 70th column width,
+ * into asciiZ buffer
+ */
+static
+rc_t read_multiline_seq_or_qual(FastqFileInfo* file, const char stop, pstring* str)
+{
+    rc_t rc = 0;
+    bool append = false, optional = false;
+
+    while( rc == 0 ) {
+        if( (rc = file_read_line(file, optional)) == 0 ) {
+            if( optional && (file->line == NULL || (file->line_len > 0 && file->line[0] == stop)) ) {
+                /* eof or next line is defline -> stop, line stays in buffer */
+                break;
+            }
+            if( append && memchr(str->data, ' ', str->len) != NULL ) {
+                rc = pstring_append(str, " ", 1);
+            }
+            if( rc == 0 && (rc = pstring_append(str, file->line, file->line_len)) == 0 ) {
+                file->line = NULL; /* line processed */
+                optional = true;
+            }
+            append = true;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t read_spot_data_3lines(FastqFileInfo* file, FileReadData* sd, uint8_t best_word, uint8_t best_score, int qualType)
+{
+    rc_t rc = 0;
+
+    file->line = NULL; /* discard defline */
+    /* read sequence */
+    if( (rc = read_multiline_seq_or_qual(file, '+', &sd->read.seq)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading sequence data");
+    }
+    if( !pstring_is_fasta(&sd->read.seq) ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=expected sequence data");
+    }
+    /* next defline */
+    if( (rc = file_read_line(file, false)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading quality defline");
+    }
+    if( file->line[0] != '+' ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=expected '+' on quality defline");
+    }
+    if( file->line_len != 1 ) { /* there may be just '+' on quality defline */
+        FileReadData d;
+        uint8_t score = parse_spot_name(file->file, &d, &file->line[1], file->line_len - 1, best_word);
+        /* sometimes quality defline may NOT contain barcode and readid, so score will be lower than bestscore,
+           but must be at least == 1 with none empty line, which means that name was found */
+        if( score < 1 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=spot name not found");
+        }
+        if( pstring_cmp(&sd->name, &d.name) != 0 ||
+            (score == best_score && (pstring_cmp(&sd->barcode, &d.barcode) != 0 || sd->read.read_id != d.read.read_id)) ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=quality defline do not match sequence defline");
+        }
+    }
+    file->line = NULL; /* discard defline */
+    if( (rc = read_multiline_seq_or_qual(file, '@', &sd->read.qual)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=failed to read quality");
+    }
+    if( sd->read.qual.len <= 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcEmpty);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=quality");
+    }
+    sd->read.qual_type = qualType;
+    sd->ready = true;
+    return 0;
+}
+
+/* reads from a file data for a sinlge spot, data may be partial */
+static
+rc_t read_next_spot(FastqLoaderFmt* self, FastqFileInfo* file)
+{
+    rc_t rc = 0;
+
+    if( file->spot->ready ) {
+        /* data still not used */
+        return 0;
+    }
+    FileReadData_init(file->spot, false);
+    FileReadData_init(&file->spot[1], false);
+    if( (rc = file_read_line(file, true)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading more data");
+    } else if( file->line == NULL ) {
+        return 0; /* eof */
+    }
+    if( find_seq_qual_by_sep(self, file, ':') || find_seq_qual_by_sep(self, file, ' ') ) {
+        /* single line forms */
+        file->line = NULL; /* line consumed */
+        file->spot->ready = true;
+    } else  if( file->line[0] == '>' || file->line[0] == '@' ) {
+        /* 4 or 8 line format */
+        FileReadData sd;
+        uint8_t word = 0, best_word = 0;
+        uint8_t score = 0, best_score = 0;
+        /* find and parse spot name on defline */
+        do {
+            score = parse_spot_name(file->file, &sd, &file->line[1], file->line_len - 1, ++word);
+            if( score > best_score ) {
+                if( (rc = pstring_copy(&file->spot->name, &sd.name)) != 0 ||
+                    (rc = pstring_copy(&file->spot->barcode, &sd.barcode)) != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=copying read name");
+                }
+                file->spot->read.read_id = sd.read.read_id;
+                best_score = score;
+                best_word = word; /* used below for quality defline parsing */
+            }
+
+        } while(score != 0);
+        if( best_score == 0 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcId, rcNotFound);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=spot name not detected");
+        }
+        if( file->line[0] == '@' ) {
+            if( (rc = read_spot_data_3lines(file, file->spot, best_word, best_score, file->qualType)) != 0 ) {
+                return rc;
+            }
+            /* now we MAY have 5th line in buffer so we can check if it's 2nd read for 8 lines format */
+            if( file->line_len != 0 && file->line != NULL && file->line[0] == '@' ) {
+                /* try to find read id on next line */
+                FileReadData_init(&file->spot[1], false);
+                if( parse_spot_name(file->file, &file->spot[1], &file->line[1], file->line_len - 1, best_word) == best_score ) {
+                    if( pstring_cmp(&file->spot->name, &file->spot[1].name) == 0 &&
+                        pstring_cmp(&file->spot->barcode, &file->spot[1].barcode) == 0 &&
+                        file->spot->read.read_id != file->spot[1].read.read_id ) {
+                        /* since it is different read id with same name and barcode, fill up second read */
+                        if( (rc = read_spot_data_3lines(file, &file->spot[1], best_word, best_score, file->qualType)) != 0 ) {
+                            return rc;
+                        }
+                    }
+                }
+            }
+        } else {
+            /* 2 line seq or quality form */
+            file->line = NULL; /* line consumed */
+            /* read sequence/quality */
+            if( (rc = read_multiline_seq_or_qual(file, '>', &file->spot->read.seq)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading seq/qual data");
+            }
+            if( file->spot->read.seq.len == 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=empty string reading seq/qual data");
+            } else if( !pstring_is_fasta(&file->spot->read.seq) ) {
+                /* swap */
+                if( (rc = pstring_copy(&file->spot->read.qual, &file->spot->read.seq)) == 0 ) {
+                    file->spot->read.qual_type = file->qualType;
+                    pstring_clear(&file->spot->read.seq);
+                }
+            }
+            file->spot->ready = true;
+        }
+    } else {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcFile, rcInvalid);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=file corrupt or format unknown");
+    }
+    if( rc == 0 ) {
+        int k;
+        for(k = 0; k < 2; k++) {
+            FileReadData* rd = &file->spot[k];
+            if( rd->ready && rd->read.qual_type != ILLUMINAWRITER_COLMASK_NOTSET ) {
+                if( file->qualOffset == 0 ) {
+                    /* detect and remember */
+                    file->qualOffset = 33;
+		    file->qualMax = 94;
+                    rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
+                    if( GetRCState(rc) == rcOutofrange ) {
+                        file->qualOffset = 64;
+			file->qualMax = 61;
+                        rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
+                    }
+                } else {
+		    if(file->qualOffset == 33) file->qualMax = 94;
+                    rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
+                }
+                if( rc != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting quality");
+                }
+            }
+        }
+    }
+    return 0;
+}
+
+static
+rc_t FastqLoaderFmt_WriteData(FastqLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t i, g = 0;
+    FastqFileInfo* files = NULL;
+    bool done;
+    static IlluminaSpot spot;
+ 
+    if( (files = calloc(argc, sizeof(*files))) == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcInsufficient);
+    }
+
+    for(i = 0; rc == 0 && i < argc; i++) {
+        ExperimentQualityType qType;
+        FastqFileInfo* file = &files[i];
+
+        file->file = argv[i];
+        FileReadData_init(file->spot, false);
+        FileReadData_init(&file->spot[1], false);
+        if( (rc = SRALoaderFile_QualityScoringSystem(file->file, &qType)) == 0 &&
+            (rc = SRALoaderFile_QualityEncoding(file->file, &file->qualEnc)) == 0 &&
+            (rc = SRALoaderFile_AsciiOffset(file->file, &file->qualOffset)) == 0 ) {
+
+            file->qualType = ILLUMINAWRITER_COLMASK_NOTSET;
+
+            if( qType == eExperimentQualityType_Undefined ) {
+                qType = self->processing->quality_type;
+                file->qualOffset = self->processing->quality_offset;
+            }
+            switch(qType) {
+                case eExperimentQualityType_LogOdds:
+                case eExperimentQualityType_Other:
+                    if( self->w454 != NULL || self->wIonTorrent != NULL ) {
+                        rc = RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcInvalid);
+                        LOGERR(klogInt, rc, "quality type other than Phred is not supported for this PLATFORM");
+                    }
+                    file->qualMin = -40;
+                    file->qualMax = 41;
+                    file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1;
+                    break;
+                default:
+                    SRALoaderFile_LOG(file->file, klogWarn, rc, 
+                        "quality_scoring_system attribute not set for this file, using Phred as default", NULL);
+                case eExperimentQualityType_Phred:
+                    file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
+                    file->qualMin = 0;
+                    file->qualMax = (self->wIllumina) ? 61: 127;
+                    break;
+            }
+        }
+    }
+    do {
+        done = true;
+        for(i = 0; rc == 0 && i < argc; i++) {
+            FastqFileInfo* file = &files[i];
+            if( (rc = read_next_spot(self, file)) != 0 || !file->spot->ready ) {
+                continue;
+            }
+            done = false;
+#if _DEBUGGING
+            {{
+                FileReadData* ss = file->spot;
+                do {
+                    DEBUG_MSG(3, ("file-%u: name:'%s', bc:%s, rd:%i, flt:%hu, seq '%.*s', qual %u bytes\n",
+                                  i + 1, ss->name.data, ss->barcode.data, ss->read.read_id, ss->read.filter,
+                                  ss->read.seq.len, ss->read.seq.data, ss->read.qual.len));
+                    if( ss == &file->spot[1]){ break; }
+                    ss = file->spot[1].ready ? &file->spot[1] : NULL;
+                } while( ss != NULL );
+            }}
+#endif
+        }
+        if( rc != 0 || done ) {
+            break;
+        }
+        /* collect spot reads, matching by spot name
+         * spot data may be split across multiple files
+         */
+        IlluminaSpot_Init(&spot);
+        for(i = 0; rc == 0 && i < argc; i++) {
+            FileReadData* fspot = files[i].spot[0].ready ? &files[i].spot[0] : NULL;
+            while(rc == 0 && fspot != NULL ) {
+                rc = IlluminaSpot_Add(&spot, &fspot->name, &fspot->barcode, &fspot->read);
+                if( rc == 0 ) {
+                    g = i;
+                    fspot->ready = false;
+                } else if( GetRCState(rc) == rcIgnored ) {
+                    rc = 0;
+                } else {
+                    SRALoaderFile_LOG(files[i].file, klogErr, rc, "$(msg)", "msg=adding data to spot");
+                }
+                if( fspot == &files[i].spot[1]) { break; }
+                fspot = files[i].spot[1].ready ? &files[i].spot[1] : NULL;
+            }
+        }
+        if( rc == 0 ) {
+            if( self->wIllumina != NULL ) {
+                if( (rc = SRAWriterIllumina_Write(self->wIllumina, argv[0], &spot)) != 0 &&
+                    GetRCTarget(rc) == rcFormatter && GetRCContext(rc) == rcValidating ) {
+                    SRALoaderFile_LOG(files[g].file, klogWarn, rc, "$(msg) $(spot_name)", "msg=bad spot,spot_name=%.*s",
+                                                spot.name->len, spot.name->data);
+                    self->spots_bad_count++;
+                    if( self->spots_bad_allowed < 0 ||
+                        self->spots_bad_count <= self->spots_bad_allowed ) {
+                        rc = 0;
+                    }
+                }
+            } else if( spot.nreads != 1 ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnsupported);
+                SRALoaderFile_LOG(files[g].file, klogErr, rc, "$(msg)", "msg=multiple reads for this platform");
+            } else if( self->wIonTorrent != NULL ) {
+                rc = SRAWriterIonTorrent_WriteRead(self->wIonTorrent, argv[0], spot.name,
+                                                   spot.reads[0].seq, spot.reads[0].qual, NULL, NULL, 0, 0, 0, 0);
+            } else {
+                rc = SRAWriter454_WriteRead(self->w454, argv[0], spot.name,
+                                            spot.reads[0].seq, spot.reads[0].qual, NULL, NULL, 0, 0, 0, 0);
+            }
+        }
+    } while( rc == 0 );
+    free(files);
+    *spots_bad_count = self->spots_bad_count;
+    return rc;
+}
+
+static
+rc_t FastqLoaderFmt_Whack(FastqLoaderFmt *self, SRATable** table)
+{
+    SRAWriterIllumina_Whack(self->wIllumina, table);
+    SRAWriter454_Whack(self->w454, table);
+    SRAWriterIonTorrent_Whack(self->wIonTorrent, table);
+    free(self);
+    return 0;
+}
+
+const char UsageDefaultName[] = "fastq-load";
+
+static
+rc_t FastqLoaderFmt_Version (const FastqLoaderFmt* self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "Fastq";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 vtFastqLoaderFmt =
+{
+    1, 0,
+    FastqLoaderFmt_Whack,
+    FastqLoaderFmt_Version,
+    NULL,
+    FastqLoaderFmt_WriteData
+};
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    FastqLoaderFmt* fmt;
+    const PlatformXML* platform;
+    const ProcessingXML* processing;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    *self = NULL;
+
+    if( (rc = Experiment_GetProcessing(config->experiment, &processing)) != 0 ||
+        (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+        return rc;
+    }
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( platform->id == SRA_PLATFORM_454 ) {
+        if( rc == 0 && (rc = SRAWriter454_Make(&fmt->w454, config)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to initialize 454 writer");
+        }
+    } else if( platform->id == SRA_PLATFORM_ION_TORRENT ) {
+        if( rc == 0 && (rc = SRAWriterIonTorrent_Make(&fmt->wIonTorrent, config)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to initialize Ion Torrent writer");
+        }
+    } else if(   (rc = SRAWriterIllumina_Make(&fmt->wIllumina, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize Illumina writer");
+    }
+    if( rc == 0 && (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&vtFastqLoaderFmt)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    }
+    if( rc != 0 ) {
+        FastqLoaderFmt_Whack(fmt, NULL);
+    } else {
+        fmt->processing = processing;
+        fmt->spots_bad_allowed = config->spots_bad_allowed;
+        fmt->spots_bad_count = 0;
+        *self = &fmt->dad;
+    }
+    return rc;
+}
diff --git a/tools/sra-load/helicos-fmt.c b/tools/sra-load/helicos-fmt.c
new file mode 100644
index 0000000..c82a0c2
--- /dev/null
+++ b/tools/sra-load/helicos-fmt.c
@@ -0,0 +1,273 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/main.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <assert.h>
+
+typedef struct HelicosLoaderFmt HelicosLoaderFmt;
+#define SRALOADERFMT_IMPL HelicosLoaderFmt
+#include "loader-fmt.h"
+
+#include "pstring.h"
+#include "writer-helicos.h"
+#include "debug.h"
+
+typedef enum EFileType_enum {
+    eNotSet = -1,
+    eCSFasta,
+    eQuality,
+    eSignalFTC,
+    eSignalCY3,
+    eSignalTXR,
+    eSignalCY5,
+    eFileTypeMax
+} EFileType;
+
+typedef struct HelicosFileInfo_struct {
+    /* parsed data from file for a single spot */
+    bool ready; /* if data is filled from file */
+    /* spot data */
+    pstring name;
+    pstring sequence;
+    pstring quality;
+
+    const SRALoaderFile* file;
+    /* file line buffer */
+    const char* line; /* not NULL if contains unprocessed data */
+    size_t line_len;
+} HelicosFileInfo;
+
+struct HelicosLoaderFmt {
+    SRALoaderFmt dad;
+    const SRAWriterHelicos* writer;
+};
+
+static
+void HelicosFileInfo_init(HelicosFileInfo* file)
+{
+    file->ready = false;
+    pstring_clear(&file->name);
+    pstring_clear(&file->sequence);
+    pstring_clear(&file->quality);
+}
+
+/* reads 1 line from given file
+ * if file->line pointer is not NULL line is in buffer already, nothing is read
+ * failes on error or if line empty and not optional
+ */
+static
+rc_t file_read_line(HelicosFileInfo* file, bool optional)
+{
+    rc_t rc = 0;
+
+    if( file->line == NULL ) {
+        if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
+            if( file->line == NULL || file->line_len == 0 ) {
+                if( !optional ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcString, rcInsufficient);
+                }
+            }
+            if( rc == 0 && file->line != NULL ) {
+                if( file->line_len > 0 ) {
+                    const char* e = file->line + file->line_len;
+                    /* right trim */
+                    while( --e >= file->line ) {
+                        if( !isspace(*e) ) {
+                            break;
+                        }
+                        file->line_len--;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+/* reads from a file data for a sinlge spot, data may be partial */
+static
+rc_t read_next_spot(HelicosLoaderFmt* self, HelicosFileInfo* file)
+{
+    rc_t rc = 0;
+
+    if( file->ready ) {
+        /* data still not used */
+        return 0;
+    }
+    HelicosFileInfo_init(file);
+    if( (rc = file_read_line(file, true)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading more data");
+    } else if( file->line == NULL ) {
+        return 0; /* eof */
+    }
+    if( file->line[0] == '@' ) { /*** fastq format **/
+        if( (rc = pstring_assign(&file->name, &file->line[1], file->line_len - 1)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading name");
+        }
+        file->line = NULL;
+        if( (rc = file_read_line(file, false)) != 0 || file->line_len > sizeof(file->sequence.data)-1 ||
+            (rc = pstring_assign(&file->sequence, file->line, file->line_len)) != 0 ||
+            !pstring_is_fasta(&file->sequence) ) {
+            rc = rc ? rc : RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading sequence");
+        }
+        file->line = NULL;
+        if( (rc = file_read_line(file, false)) != 0 ||
+            file->line[0] != '+' || file->line_len != 1 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading quality defline");
+        }
+        file->line = NULL;
+        if( (rc = file_read_line(file, false)) != 0 || file->line_len > sizeof(file->quality.data)-1 ||
+            (rc = pstring_assign(&file->quality, file->line, file->line_len)) != 0 ||
+            (rc = pstring_quality_convert(&file->quality, eExperimentQualityEncoding_Ascii, 33, 0, 0x7F)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading quality");
+        }
+        file->line = NULL;
+        file->ready = true;
+    } else if( file->line[0] == '>' ) { /** fasta format **/
+	if( (rc = pstring_assign(&file->name, &file->line[1], file->line_len - 1)) != 0 ) {
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading name");
+        }
+        file->line = NULL;
+	if( (rc = file_read_line(file, false)) != 0 || file->line_len > sizeof(file->sequence.data)-1 ||
+            (rc = pstring_assign(&file->sequence, file->line, file->line_len)) != 0 ||
+            !pstring_is_fasta(&file->sequence) ) {
+            rc = rc ? rc : RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading sequence");
+        }
+	file->line = NULL;
+	file->quality.len = file->sequence.len;
+	memset(file->quality.data,14,file->quality.len);
+	file->ready = true;
+    } else {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcFile, rcInvalid);
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=expected '@'");
+    }
+#if _DEBUGGING
+ DEBUG_MSG(3, ("READ: name:'%s', seq[%u]:'%s', qual[%u]\n", file->name.data,
+                file->sequence.len, file->sequence.data, file->quality.len)); /*
+    DEBUG_MSG(3, ("READ: name:'%s', seq[%u]:'%s', qual[%u]:'%s'\n", file->name.data,
+                file->sequence.len, file->sequence.data, file->quality.len, file->quality.data));*/
+#endif
+    return 0;
+}
+
+static
+rc_t HelicosLoaderFmt_WriteData(HelicosLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    HelicosFileInfo* files = NULL;
+    bool done;
+
+    if( (files = calloc(argc, sizeof(*files))) == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcInsufficient);
+    }
+    for(i = 0; rc == 0 && i < argc; i++) {
+        HelicosFileInfo* file = &files[i];
+        HelicosFileInfo_init(file);
+        file->file = argv[i];
+    }
+    do {
+        done = true;
+        for(i = 0; rc == 0 && i < argc; i++) {
+            HelicosFileInfo* file = &files[i];
+            if( (rc = read_next_spot(self, file)) == 0 && file->ready ) {
+                done = false;
+                rc = SRAWriterHelicos_Write(self->writer, argv[0], &file->name, &file->sequence, &file->quality);
+                file->ready = false;
+            }
+        }
+    } while( rc == 0 && !done );
+    free(files);
+    return rc;
+}
+
+static
+rc_t HelicosLoaderFmt_Whack(HelicosLoaderFmt *self, SRATable** table)
+{
+    SRAWriterHelicos_Whack(self->writer, table);
+    free(self);
+    return 0;
+}
+
+const char UsageDefaultName[] = "helicos-load";
+
+static
+rc_t HelicosLoaderFmt_Version (const HelicosLoaderFmt* self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "Helicos";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 vtHelicosLoaderFmt =
+{
+    1, 0,
+    HelicosLoaderFmt_Whack,
+    HelicosLoaderFmt_Version,
+    NULL,
+    HelicosLoaderFmt_WriteData
+};
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    HelicosLoaderFmt* fmt;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    *self = NULL;
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( (rc = SRAWriterHelicos_Make(&fmt->writer, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize writer");
+    } else if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&vtHelicosLoaderFmt)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    }
+    /* Set result or free obj */
+    if( rc != 0 ) {
+        HelicosLoaderFmt_Whack(fmt, NULL);
+    } else {
+        *self = &fmt->dad;
+    }
+    return rc;
+}
diff --git a/tools/sra-load/illumina-fmt.c b/tools/sra-load/illumina-fmt.c
new file mode 100644
index 0000000..64e472b
--- /dev/null
+++ b/tools/sra-load/illumina-fmt.c
@@ -0,0 +1,848 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <assert.h>
+
+typedef struct IlluminaLoaderFmt IlluminaLoaderFmt;
+#define SRALOADERFMT_IMPL IlluminaLoaderFmt
+#include "loader-fmt.h"
+
+#include "writer-illumina.h"
+#include "debug.h"
+
+typedef enum EIlluminaNativeFileType_enum {
+    eIlluminaNativeFileTypeNotSet = 0,
+    eIlluminaNativeFileTypeQuality4 = 0x01,
+    eIlluminaNativeFileTypeQSeq = 0x02,
+    eIlluminaNativeFileTypeFasta = 0x04,
+    eIlluminaNativeFileTypeNoise = 0x08,
+    eIlluminaNativeFileTypeIntensity = 0x10,
+    eIlluminaNativeFileTypeSignal = 0x20
+} EIlluminaNativeFileType;
+
+struct {
+    EIlluminaNativeFileType type;
+    const char* key[3];
+} const file_types[] = {
+    /* order important, see WritaData loop */
+    { eIlluminaNativeFileTypeSignal,
+        { "_sig2.", NULL } },
+    { eIlluminaNativeFileTypeIntensity,
+        { "_int.", NULL } },
+    { eIlluminaNativeFileTypeNoise,
+        { "_nse.", NULL } },
+    { eIlluminaNativeFileTypeFasta,
+        { "_seq.", NULL } },
+    { eIlluminaNativeFileTypeQSeq,
+        { "_qseq.", ".qseq", NULL } },
+    { eIlluminaNativeFileTypeQuality4,
+        { "_prb.", NULL } }
+};
+
+typedef struct IlluminaFileInfo_struct {
+    /* parsed data from file for a single spot */
+    bool ready; /* if data is filled from file */
+    EIlluminaNativeFileType type;
+    struct IlluminaFileInfo_struct* prev;
+    struct IlluminaFileInfo_struct* next;
+
+    /* spot data */
+    pstring name;
+    pstring barcode;
+    long coord[4]; /* lane, tile, x, y - sort-merge keys */
+
+    IlluminaRead read;
+
+    const SRALoaderFile* file;
+    /* file line buffer */
+    const char* line; /* not NULL if contains unprocessed data */
+    size_t line_len;
+} IlluminaFileInfo;
+
+static
+void IlluminaFileInfo_init(IlluminaFileInfo* file)
+{
+    assert(file);
+    file->ready = false;
+    pstring_clear(&file->name);
+    memset(file->coord, 0, sizeof(file->coord));
+    IlluminaRead_Init(&file->read, false);
+}
+
+/* reads 1 line from given file
+ * if file->line pointer is not NULL line is in buffer already, nothing is read
+ * failes on error or if line empty and not optional
+ */
+static
+rc_t file_read_line(IlluminaFileInfo* file, bool optional)
+{
+    rc_t rc = 0;
+
+    if( file->line == NULL ) {
+        if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
+            if( file->line == NULL || file->line_len == 0 ) {
+                if( !optional ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcString, rcInsufficient);
+                }
+            }
+            if( rc == 0 && file->line != NULL ) {
+                if( file->line_len > 0 ) {
+                    const char* e = file->line + file->line_len;
+                    /* right trim */
+                    while( --e >= file->line ) {
+                        if( !isspace(*e) ) {
+                            break;
+                        }
+                        file->line_len--;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+/*
+ * assumes tab separated file:
+ * first 2 postiions concatinated with "_" into spot prefix
+ * nextg 4 postiions concatinated with ":" into spot id: lane:tile:x:y
+ * 7th (index) ignored
+ * 8th is read id
+ * 9th fasta
+ * 10th quality
+ * 11th (optional) read filter
+ */
+static
+rc_t parse_qseq(IlluminaFileInfo* file, const char* data, size_t data_sz)
+{
+    rc_t rc = 0;
+    const char* t, *str = data, *end = data + data_sz;
+    int tabs = 0;
+    do {
+        if( (t = memchr(str, '\t', end - str)) != NULL ) {
+            switch(++tabs) {
+                case 1:
+                    rc = pstring_assign(&file->name, str, t - str);
+                    break;
+                case 2:
+                    if( (rc = pstring_append(&file->name, "_", 1)) == 0 ) {
+                        rc = pstring_append(&file->name, str, t - str);
+                    }
+                    break;
+                case 3:
+                case 4:
+                case 5:
+                case 6:
+                    errno = 0;
+                    file->coord[tabs - 3] = strtol(str, NULL, 10);
+                    if( errno != 0 ) {
+                        file->coord[tabs - 3] = 0;
+                    }
+                    if( (rc = pstring_append(&file->name, ":", 1)) == 0 ) {
+                        rc = pstring_append(&file->name, str, t - str);
+                    }
+                    break;
+                case 7:
+                    if( t - str != 1 || (*str != '0' && *str != '1') ) {
+                        rc = pstring_assign(&file->barcode, str, t - str);
+                    }
+                    break;
+                case 8:
+                    if( t - str != 1 || !isdigit(*str) ) {
+                        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+                    } else {
+                        file->read.read_id = *str - '0';
+                        if( file->read.read_id == 0 ) {
+                            file->read.read_id = ILLUMINAWRITER_READID_NONE;
+                        }
+                    }
+                    break;
+                case 9:
+                    rc = pstring_assign(&file->read.seq, str, t - str);
+                    break;
+                case 10:
+                    file->read.qual_type = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
+                    rc = pstring_assign(&file->read.qual, str, t - str);
+                    break;
+            }
+            str = ++t;
+        }
+    } while( rc == 0 && t != NULL && str < end );
+
+    if( rc == 0 ) {
+        if( tabs == 9 ) {
+            file->read.qual_type = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
+            rc = pstring_assign(&file->read.qual, str, end - str);
+        } else if( tabs == 10 ) {
+            if( end - str != 1 ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+            } else if( *str == '1' ) {
+                file->read.filter = SRA_READ_FILTER_PASS;
+            } else if( *str == '0' ) {
+                file->read.filter = SRA_READ_FILTER_REJECT;
+            } else {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+            }
+        } else {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+        }
+        if( rc == 0 ) {
+            if( file->read.seq.len != file->read.qual.len ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+            } else {
+                rc = pstring_quality_convert(&file->read.qual, eExperimentQualityEncoding_Ascii, 64, 0, 0x7F);
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t read_quality(const char* data, size_t data_sz, IlluminaRead* read)
+{
+    rc_t rc = 0;
+
+    if( (rc = pstring_assign(&read->qual, data, data_sz)) == 0 ) {
+        if( (rc = pstring_quality_convert(&read->qual, eExperimentQualityEncoding_Decimal, 0, -128, 127)) == 0 ) {
+            read->qual_type = ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t read_spot_coord(IlluminaFileInfo* file, const char* data, size_t data_sz, const char** tail)
+{
+    rc_t rc = 0;
+    const char* t, *str = data, *end = data + data_sz;
+    int tabs = 0;
+
+    if( tail ) {
+        *tail = NULL;
+    }
+    do {
+        if( (t = memchr(str, '\t', end - str)) != NULL ) {
+            switch(++tabs) {
+                case 1:
+                    errno = 0;
+                    file->coord[0] = strtol(str, NULL, 10);
+                    if( errno != 0 ) {
+                        file->coord[0] = 0;
+                    }
+                    rc = pstring_assign(&file->name, str, t - str);
+                    break;
+                case 2:
+                case 3:
+                case 4:
+                    errno = 0;
+                    file->coord[tabs - 1] = strtol(str, NULL, 10);
+                    if( errno != 0 ) {
+                        file->coord[tabs - 1] = 0;
+                    }
+                    if( (rc = pstring_append(&file->name, ":", 1)) == 0 ) {
+                        rc = pstring_append(&file->name, str, t - str);
+                    }
+                    if( tail ) {
+                        *tail = t + 1;
+                    }
+                    break;
+            }
+            str = ++t;
+        }
+    } while( rc == 0 && t != NULL && str < end && tabs < 4 );
+
+    if( tabs < 4 ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcTooShort);
+    }
+    return rc;
+}
+
+static
+rc_t read_signal(const char* data, size_t data_sz, pstring* str)
+{
+    rc_t rc = 0;
+    double d;
+    const char* c = data, *end = data + data_sz;
+    float* f = (float*)str->data;
+    float* fend = (float*)(str->data + sizeof(str->data));
+
+    while( rc == 0 && c != end ) {
+        char* next;
+        errno = 0;
+        d = strtod(c, &next);
+        if( errno != 0 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcOutofrange);
+        } else if( d == 0 && c == next ) {
+            break;
+        } else {
+            c = next;
+            if( f >= fend ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcBuffer, rcInsufficient);
+            }
+            *f++ = d;
+        }
+    }
+    if( rc == 0 ) {
+        str->len = (f - (float*)str->data) * sizeof(*f);
+        if( str->len == 0 ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcEmpty);
+        }
+    }
+    return rc;
+}
+
+/* reads from a file data for a sinlge spot, data may be partial */
+static
+rc_t read_next_spot(const char* blk_pfx, IlluminaFileInfo* file)
+{
+    rc_t rc = 0;
+    const char* tail = file->line;
+
+    if( file->ready ) {
+        /* data still not used */
+        return 0;
+    }
+    IlluminaFileInfo_init(file);
+    if( (rc = file_read_line(file, true)) != 0 ) {
+        return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading more data");
+    } else if( file->line == NULL ) {
+        return 0; /* eof */
+    }
+    switch( file->type ) {
+        case eIlluminaNativeFileTypeQSeq:
+            if( (rc = parse_qseq(file, file->line, file->line_len)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading qseq");
+            }
+            break;
+
+        case eIlluminaNativeFileTypeFasta:
+        case eIlluminaNativeFileTypeNoise:
+        case eIlluminaNativeFileTypeIntensity:
+        case eIlluminaNativeFileTypeSignal:
+            {{
+                /* read only common first 4 coords into name and prepend with DATA_BLOCK/@name */
+                if( (rc = read_spot_coord(file, file->line, file->line_len, &tail)) == 0 ) {
+                    if( blk_pfx != NULL ) {
+                        pstring tmp_name;
+                        if( (rc = pstring_copy(&tmp_name, &file->name)) == 0 &&
+                            (rc = pstring_assign(&file->name, blk_pfx, strlen(blk_pfx))) == 0 &&
+                            (rc = pstring_append(&file->name, ":", 1)) == 0 ) {
+                            rc = pstring_concat(&file->name, &tmp_name);
+                        }
+                    }
+                }
+                if( rc != 0 ) {
+                    return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading spot coord");
+                }
+                break;
+            }}
+
+        case eIlluminaNativeFileTypeQuality4:
+            if( (rc = read_quality(file->line, file->line_len, &file->read)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading quality");
+            } else if( (rc = pstring_assign(&file->name, blk_pfx, strlen(blk_pfx))) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=name for quality 4");
+            }
+            break;
+
+        default:
+            rc = RC(rcSRA, rcFormatter, rcReading, rcFileFormat, rcUnknown);
+            return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=processing data line");
+            break;
+    }
+
+    /* process tail (after coords) for some file types */
+    file->line_len -= tail - file->line; /* length of tail */
+    switch( file->type ) {
+        case eIlluminaNativeFileTypeQSeq:
+        case eIlluminaNativeFileTypeQuality4:
+        default:
+            /* completely processed before */
+            break;
+
+        case eIlluminaNativeFileTypeFasta:
+            if( (rc = pstring_assign(&file->read.seq, tail, file->line_len)) != 0 ||
+                !pstring_is_fasta(&file->read.seq) ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcCorrupt);
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=reading fasta");
+            }
+            break;
+
+        case eIlluminaNativeFileTypeNoise:
+            if( (rc = read_signal(tail, file->line_len, &file->read.noise)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting noise");
+            }
+            break;
+
+        case eIlluminaNativeFileTypeIntensity:
+            if( (rc = read_signal(tail, file->line_len, &file->read.intensity)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting intensity");
+            }
+            break;
+
+        case eIlluminaNativeFileTypeSignal:
+            if( (rc = read_signal(tail, file->line_len, &file->read.signal)) != 0 ) {
+                return SRALoaderFile_LOG(file->file, klogErr, rc, "$(msg)", "msg=converting signal");
+            }
+            break;
+    }
+    file->line = NULL;
+    file->ready = true;
+#if _DEBUGGING
+    DEBUG_MSG(3, ("name:'%s' [%li:%li:%li:%li]\n", file->name.data, 
+                file->coord[0], file->coord[1], file->coord[2], file->coord[3]));
+    if( file->read.seq.len ) {
+        DEBUG_MSG(3, ("seq:'%.*s'\n", file->read.seq.len, file->read.seq.data));
+    }
+    if( file->read.qual.len ) {
+        DEBUG_MSG(3, ("qual{0x%x}: %u bytes\n", file->read.qual_type, file->read.qual.len));
+    }
+#endif
+    return 0;
+}
+
+struct IlluminaLoaderFmt {
+    SRALoaderFmt dad;
+    const SRAWriterIllumina* writer;
+    bool skip_intensity;
+    bool skip_signal;
+    bool skip_noise;
+    int64_t spots_bad_allowed;
+    int64_t spots_bad_count;
+};
+
+typedef struct FGroup_struct {
+    SLNode dad;
+    pstring key; /* part of filename w/o path up to ftypes value above */
+    const char* blk_pfx;
+    EIlluminaNativeFileType mask;
+    IlluminaFileInfo* files;
+} FGroup;
+
+typedef struct FGroup_Find_data_struct {
+    FGroup* found;
+    pstring key;
+} FGroup_Find_data;
+
+bool FGroup_Find( SLNode *node, void *data )
+{
+    FGroup* n = (FGroup*)node;
+    FGroup_Find_data* d = (FGroup_Find_data*)data;
+    IlluminaFileInfo* file = n->files;
+
+    while( file != NULL ) {
+        if( pstring_cmp(&file->name, &d->key) == 0 ) {
+            d->found = n;
+            return true;
+        }
+        file = file->next;
+    }
+    if( pstring_cmp(&d->key, &n->key) == 0 ) {
+        d->found = n;
+        return true;
+    }
+    return false;
+}
+
+void FGroup_Validate( SLNode *node, void *data )
+{
+    rc_t* rc = (rc_t*)data;
+    static EIlluminaNativeFileType mask = eIlluminaNativeFileTypeNotSet;
+    FGroup* n = (FGroup*)node;
+    IlluminaFileInfo* file = n->files;
+
+    DEBUG_MSG(3, ("==> group: '%s'\n", n->key.data));
+    while( file != NULL ) {
+        DEBUG_MSG(3, ("file: type %u '%s'\n", file->type, file->name.data));
+        if( mask == eIlluminaNativeFileTypeNotSet ) {
+            mask = n->mask;
+            if( !(mask & (eIlluminaNativeFileTypeFasta | eIlluminaNativeFileTypeQSeq)) ) {
+                *rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcNotFound);
+                SRALoaderFile_LOG(file->file, klogErr, *rc, "file group '$(p)*': sequence data", PLOG_S(p) , n->key.data);
+            }
+            if( (mask & eIlluminaNativeFileTypeFasta) && (mask & eIlluminaNativeFileTypeQSeq) ) {
+                *rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+                SRALoaderFile_LOG(file->file, klogErr, *rc, "file group '$(p)*': _seq and _qseq", PLOG_S(p) , n->key.data);
+            }
+            if( !(mask & eIlluminaNativeFileTypeQuality4) && !(mask & eIlluminaNativeFileTypeQSeq) ) {
+                *rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcNotFound);
+                SRALoaderFile_LOG(file->file, klogErr, *rc, "file group '$(p)*': quality data", PLOG_S(p) , n->key.data);
+            }
+        } else if( mask != n->mask ) {
+            *rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+            SRALoaderFile_LOG(file->file, klogErr, *rc, "file group '$(p)*': no match in spot names on 1st lines across files in group",
+                              PLOG_S(p) , n->key.data);
+        }
+        file = file->next;
+    }
+    DEBUG_MSG(3, ("<== group: '%s'\n", n->key.data));
+}
+
+void FGroup_Whack(SLNode *n, void *data )
+{
+    if( n != NULL ) {
+        FGroup* node = (FGroup*)n;
+        IlluminaFileInfo* file = node->files;
+
+        while( file != NULL ) {
+            IlluminaFileInfo* x = file;
+            file = file->next;
+            free(x);
+        }
+        free(node);
+    }
+}
+
+typedef struct FGroup_Parse_data_struct {
+    rc_t rc;
+    IlluminaLoaderFmt* self;
+    IlluminaSpot spot;
+} FGroup_Parse_data;
+
+bool FGroup_Parse( SLNode *n, void *d )
+{
+    FGroup_Parse_data* data = (FGroup_Parse_data*)d;
+    FGroup* g = (FGroup*)n;
+    bool done;
+    const SRALoaderFile* data_block_ref = NULL;
+
+    data->rc = 0;
+    do {
+        IlluminaFileInfo* file = g->files;
+        done = true;
+        while( data->rc == 0 && file != NULL ) {
+            if( (data->rc = read_next_spot(g->blk_pfx, file)) == 0 && file->ready ) {
+                done = false;
+            }
+            file = file->next;
+        }
+        if( data->rc != 0 || done ) {
+            break;
+        }
+        /* collect spot reads, matching by spot name
+         * spot data may be split across multiple files
+         */
+        IlluminaSpot_Init(&data->spot);
+        file = g->files;
+        while( data->rc == 0 && file != NULL ) {
+            if( file->ready ) {
+                if( (file->type == eIlluminaNativeFileTypeNoise && data->self->skip_noise) ||
+                    (file->type == eIlluminaNativeFileTypeIntensity && data->self->skip_intensity) ||
+                    (file->type == eIlluminaNativeFileTypeSignal && data->self->skip_signal) ) {
+                    file->ready = false;
+                } else {
+                    data_block_ref = file->file;
+                    if( file->type == eIlluminaNativeFileTypeQSeq && (g->mask & eIlluminaNativeFileTypeQuality4) ) {
+                        /* drop quality1 from qseq data */
+                        pstring_clear(&file->read.qual);
+                    } else if( file->type == eIlluminaNativeFileTypeQuality4 ) {
+                        IlluminaFileInfo* neib = file->next ? file->next : file->prev;
+                        /* need to fix spotname to be same cause prb do not have any name in it */
+                        if( (data->rc = pstring_copy(&file->name, &neib->name)) != 0 ) {
+                            SRALoaderFile_LOG(file->file, klogErr, data->rc, "$(msg) '$(n)'", "msg=syncing prb spot name,n=%s", neib->name.data);
+                        }
+                    }
+                    if( data->rc == 0 ) {
+                        data->rc = IlluminaSpot_Add(&data->spot, &file->name, &file->barcode, &file->read);
+                        if( data->rc == 0 ) {
+                            file->ready = false;
+                        } else {
+                            if( GetRCState(data->rc) == rcIgnored ) {
+                                SRALoaderFile_LOG(file->file, klogWarn, data->rc, "$(msg) '$(s1)' <> '$(s2)'",
+                                                "msg=spot name mismatch,s1=%.*s,s2=%.*s",
+                                                data->spot.name->len, data->spot.name->data, file->name.len, file->name.data);
+                                data->self->spots_bad_count++;
+                                /* skip spot for all files in a group */
+                                file = g->files;
+                                while( file != NULL ) {
+                                    file->ready = false;
+                                    SRALoaderFile_LOG(file->file, klogWarn, data->rc,
+                                                      "$(msg) '$(n)'", "msg=skipped spot,n=%s", file->name.data);
+                                    file = file->next;
+                                }
+                                if( data->self->spots_bad_allowed >= 0 &&
+                                    data->self->spots_bad_count > data->self->spots_bad_allowed ) {
+                                    data->rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInvalid);
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            file = file->next;
+        }
+        if( GetRCState(data->rc) == rcIgnored ) {
+            data->rc = 0;
+            continue;
+        }
+        if( data->rc == 0 ) {
+            data->rc = SRAWriterIllumina_Write(data->self->writer, data_block_ref, &data->spot);
+        }
+    } while( data->rc == 0 );
+    return data->rc != 0;
+}
+
+static
+rc_t IlluminaLoaderFmt_WriteData(IlluminaLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t t, i, k, ftype_q = sizeof(file_types) / sizeof(file_types[0]);
+    SLList files;
+    IlluminaFileInfo* file = NULL;
+
+    SLListInit(&files);
+
+    /* group files using spotname, for _prb. file name prefix is used,
+       files reviewed by type detected from name and ordered by file_type array */
+    for(t = 0; rc == 0 && t < ftype_q; t++) {
+        for(i = 0; rc == 0 && i < argc; i++) {
+            const char* fname, *blk_pfx;
+            int prefix_len = 0;
+            ERunFileType ftype;
+            EIlluminaNativeFileType type = eIlluminaNativeFileTypeNotSet;
+            FGroup_Find_data data;
+
+            if( (rc = SRALoaderFileName(argv[i], &fname)) != 0 ) {
+                SRALoaderFile_LOG(argv[i], klogErr, rc, "reading file name", NULL);
+                break;
+            }
+            if( (rc = SRALoaderFile_FileType(argv[i], &ftype)) != 0 ) {
+                SRALoaderFile_LOG(argv[i], klogErr, rc, "reading file type", NULL);
+                break;
+            }
+            if( (rc = SRALoaderFileBlockName(argv[i], &blk_pfx)) != 0 ) {
+                SRALoaderFile_LOG(argv[i], klogErr, rc, "reading DATA_BLOCK/@name", NULL);
+                break;
+            }
+            if( blk_pfx == NULL ) {
+                blk_pfx = "";
+            }
+            {{
+                /* skip path if present */
+                const char* p = strrchr(fname, '/');
+                fname = p ? p + 1 : fname;
+                p = NULL;
+                for(k = 0; type == eIlluminaNativeFileTypeNotSet && k < ftype_q; k++) {
+                    const char* const* e = file_types[k].key;
+                    while( *e != NULL ) {
+                        p = strstr(fname, *e++);
+                        if( p != NULL ) {
+                            type = file_types[k].type;
+                            break;
+                        } 
+                    }
+                }
+                if( p != NULL ) {
+                    prefix_len = p - fname;
+                }
+            }}
+            if( ftype == rft_IlluminaNativeSeq ) {
+                type = eIlluminaNativeFileTypeFasta;
+            } else if( ftype == rft_IlluminaNativePrb ) {
+                type = eIlluminaNativeFileTypeQuality4;
+            } else if( ftype == rft_IlluminaNativeInt ) {
+                type = eIlluminaNativeFileTypeIntensity;
+            } else if( ftype == rft_IlluminaNativeQseq ) {
+                type = eIlluminaNativeFileTypeQSeq;
+            }
+            if( type == eIlluminaNativeFileTypeNotSet ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+                SRALoaderFile_LOG(argv[i], klogErr, rc, "detecting file type by file name", NULL);
+                break;
+            }
+            if( type != file_types[t].type ) {
+                /* one type at a time */
+                continue;
+            }
+            DEBUG_MSG(3, ("file '%s' type set to %d\n", fname, type));
+            file = calloc(1, sizeof(*file));
+            if( file == NULL ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcExhausted);
+                SRALoaderFile_LOG(argv[i], klogErr, rc, "allocating file object", NULL);
+                break;
+            }
+            IlluminaFileInfo_init(file);
+            file->file = argv[i];
+            file->type = type;
+
+            if( file->type == eIlluminaNativeFileTypeQuality4 ) {
+                /* in _prb there is no spotname inside so use file prefix */
+                rc = pstring_assign(&data.key, fname, prefix_len);
+            } else {
+                /* try to get 1st spot so group can be organized by spot name */
+                if( (rc = read_next_spot(blk_pfx, file)) != 0 || !file->ready ) {
+                    rc = rc ? rc : RC(rcSRA, rcFormatter, rcReading, rcData, rcNotFound);
+                    SRALoaderFile_LOG(argv[i], klogErr, rc, "reading 1st spot", NULL);
+                    break;
+                }
+                rc = pstring_copy(&data.key, &file->name);
+            }
+
+            data.found = NULL;
+            if( SLListDoUntil(&files, FGroup_Find, &data) && data.found != NULL ) {
+                IlluminaFileInfo* ss = data.found->files;
+
+                while( rc == 0 && file != NULL ) {
+                    if( ss->type != eIlluminaNativeFileTypeQSeq && ss->type == file->type ) {
+                        rc = RC(rcSRA, rcFormatter, rcReading, rcFile, rcDuplicate);
+                        SRALoaderFile_LOG(argv[i], klogErr, rc, "type of file for lane", NULL);
+                    } else if( ss->next != NULL ) {
+                        ss = ss->next;
+                    } else {
+                        ss->next = file;
+                        file->prev = ss;
+                        data.found->mask |= file->type;
+                        file = NULL;
+                    }
+                }
+            } else {
+                data.found = calloc(1, sizeof(*data.found));
+                if( data.found == NULL ) {
+                    rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcInsufficient);
+                    SRALoaderFile_LOG(argv[i], klogErr, rc, "preparing file group", NULL);
+                    break;
+                } else {
+                    if( (rc = pstring_assign(&data.found->key, fname, prefix_len)) != 0 ) {
+                        SRALoaderFile_LOG(argv[i], klogErr, rc, "setting file group key", NULL);
+                        FGroup_Whack(&data.found->dad, NULL);
+                        break;
+                    } else {
+                        FGroup* curr = (FGroup*)SLListHead(&files), *prev = NULL;
+                        data.found->blk_pfx = blk_pfx;
+                        data.found->files = file;
+                        data.found->mask = file->type;
+                        /* group inserted into list by coords in 1st spot */
+                        while( curr != NULL ) {
+                            if( curr->files[0].coord[0] > file->coord[0] ||
+                                (curr->files[0].coord[0] == file->coord[0] &&
+                                 curr->files[0].coord[1] > file->coord[1]) ) {
+                                data.found->dad.next = &curr->dad;
+                                if( prev == NULL ) {
+                                    files.head = &data.found->dad;
+                                } else {
+                                    prev->dad.next = &data.found->dad;
+                                }
+                                break;
+                            }
+                            prev = curr;
+                            curr = (FGroup*)curr->dad.next;
+                        }
+                        if( curr == NULL ) {
+                            SLListPushTail(&files, &data.found->dad);
+                        }
+                        file = NULL;
+                    }
+                }
+            }
+        }
+    }
+    if( rc == 0 ) {
+        SLListForEach(&files, FGroup_Validate, &rc);
+    }
+    if( rc == 0 ) {
+        FGroup_Parse_data data;
+        data.self = self;
+        if( SLListDoUntil(&files, FGroup_Parse, &data) ) {
+            rc = data.rc;
+        }
+    } else {
+        free(file);
+    }
+    SLListWhack(&files, FGroup_Whack, NULL);
+    *spots_bad_count = self->spots_bad_count;
+    return rc;
+}
+
+static
+rc_t IlluminaLoaderFmt_Whack(IlluminaLoaderFmt *self, SRATable** table)
+{
+    SRAWriterIllumina_Whack(self->writer, table);
+    free(self);
+    return 0;
+}
+
+const char UsageDefaultName[] = "illumina-load";
+
+static
+rc_t IlluminaLoaderFmt_Version (const IlluminaLoaderFmt* self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "Illumina native";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 vtIlluminaLoaderFmt =
+{
+    1, 0,
+    IlluminaLoaderFmt_Whack,
+    IlluminaLoaderFmt_Version,
+    NULL,
+    IlluminaLoaderFmt_WriteData
+};
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    IlluminaLoaderFmt* fmt;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    *self = NULL;
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( (rc = SRAWriterIllumina_Make(&fmt->writer, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize writer");
+    } else if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&vtIlluminaLoaderFmt)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    }
+    if( rc != 0 ) {
+        IlluminaLoaderFmt_Whack(fmt, NULL);
+    } else {
+        fmt->skip_signal = (config->columnFilter & (efltrSIGNAL | efltrDEFAULT));
+        fmt->skip_noise = (config->columnFilter & (efltrNOISE | efltrDEFAULT));
+        fmt->skip_intensity = (config->columnFilter & (efltrINTENSITY | efltrDEFAULT));
+        fmt->spots_bad_allowed = config->spots_bad_allowed;
+        fmt->spots_bad_count = 0;
+        *self = &fmt->dad;
+    }
+    return rc;
+}
diff --git a/tools/sra-load/loader-file.c b/tools/sra-load/loader-file.c
new file mode 100644
index 0000000..feeff1a
--- /dev/null
+++ b/tools/sra-load/loader-file.c
@@ -0,0 +1,191 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/rc.h>
+
+#include "loader-file.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+struct SRALoaderFile
+{
+    const DataBlock* data_block;
+    const DataBlockFileAttr* file_attr;
+    const KLoaderFile *lfile;
+};
+
+rc_t SRALoaderFile_IsEof(const SRALoaderFile* cself, bool* eof)
+{
+    return KLoaderFile_IsEof(cself ? cself->lfile : NULL, eof);
+}
+
+rc_t SRALoaderFile_LOG(const SRALoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    rc = KLoaderFile_VLOG(cself ? cself->lfile : NULL, lvl, rc, msg, fmt, args);
+    va_end(args);
+    return rc;
+}
+
+rc_t SRALoaderFile_Offset(const SRALoaderFile* cself, uint64_t* offset)
+{
+    return KLoaderFile_Offset(cself ? cself->lfile : NULL, offset);
+}
+
+rc_t SRALoaderFileReadline(const SRALoaderFile* cself, const void** buffer, size_t* length)
+{
+    return KLoaderFile_Readline(cself ? cself->lfile : NULL, buffer, length);
+}
+
+rc_t SRALoaderFileRead(const SRALoaderFile* cself, size_t advance, size_t size, const void** buffer, size_t* length)
+{
+    return KLoaderFile_Read(cself ? cself->lfile : NULL, advance, size, buffer, length);
+}
+
+rc_t SRALoaderFileName(const SRALoaderFile *cself, const char **name)
+{
+    return KLoaderFile_Name(cself ? cself->lfile : NULL, name);
+}
+
+rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name)
+{
+    return KLoaderFile_FullName(cself ? cself->lfile : NULL, name);
+}
+
+rc_t SRALoaderFileResolveName(const SRALoaderFile *self, char *resolved, size_t rsize)
+{
+    return KLoaderFile_ResolveName(self ? self->lfile : NULL, resolved, rsize);
+}
+
+rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name )
+{
+    if( cself == NULL || block_name == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *block_name = cself->data_block->name;
+    return 0;
+}
+
+rc_t SRALoaderFileMemberName(const SRALoaderFile *cself, const char **member_name)
+{
+    if( cself == NULL || member_name == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *member_name = cself->data_block->member_name;
+    return 0;
+}
+
+rc_t SRALoaderFileSector( const SRALoaderFile *cself, int64_t* sector)
+{
+    if( cself == NULL || sector == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *sector = cself->data_block->sector;
+    return 0;
+}
+
+rc_t SRALoaderFileRegion( const SRALoaderFile *cself, int64_t* region)
+{
+    if( cself == NULL || region == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *region = cself->data_block->region;
+    return 0;
+}
+
+rc_t SRALoaderFile_QualityScoringSystem( const SRALoaderFile *cself, ExperimentQualityType* quality_scoring_system )
+{
+    if( cself == NULL || quality_scoring_system == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *quality_scoring_system = cself->file_attr->quality_scoring_system;
+    return 0;
+}
+
+rc_t SRALoaderFile_QualityEncoding( const SRALoaderFile *cself, ExperimentQualityEncoding* quality_encoding )
+{
+    if( cself == NULL || quality_encoding == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *quality_encoding = cself->file_attr->quality_encoding;
+    return 0;
+}
+
+rc_t SRALoaderFile_AsciiOffset( const SRALoaderFile *cself, uint8_t* ascii_offset )
+{
+    if( cself == NULL || ascii_offset == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *ascii_offset = cself->file_attr->ascii_offset;
+    return 0;
+}
+
+rc_t SRALoaderFile_FileType( const SRALoaderFile *cself, ERunFileType* filetype )
+{
+    if( cself == NULL || filetype == NULL ) {
+        return RC(rcSRA, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    *filetype = cself->file_attr->filetype;
+    return 0;
+}
+
+rc_t SRALoaderFile_Release(const SRALoaderFile* cself)
+{
+    rc_t rc = 0;
+
+    if( cself ) {
+        SRALoaderFile* self = (SRALoaderFile*)cself;
+        /* may return md5 check error here */
+        rc = KLoaderFile_Release(self->lfile, false);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
+                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead)
+{
+    rc_t rc = 0;
+    SRALoaderFile* obj;
+
+    if( cself == NULL || block == NULL || fileattr == NULL ) {
+        rc = RC(rcSRA, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcSRA, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else if( (rc = KLoaderFile_Make(&obj->lfile, dir, filename, md5_digest, read_ahead)) == 0 ) {
+            obj->data_block = block;
+            obj->file_attr = fileattr;
+            *cself = obj;
+        }
+        if( rc != 0 ) {
+            *cself = NULL;
+            SRALoaderFile_Release(obj);
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-load/loader-file.h b/tools/sra-load/loader-file.h
new file mode 100644
index 0000000..261eb32
--- /dev/null
+++ b/tools/sra-load/loader-file.h
@@ -0,0 +1,113 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_file_
+#define _sra_load_file_
+
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kapp/loader-file.h>
+
+#include "run-xml.h"
+
+/*--------------------------------------------------------------------------
+* SRA reader buffered input file
+*/
+typedef struct SRALoaderFile SRALoaderFile;
+
+rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
+                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead);
+
+rc_t SRALoaderFile_Release(const SRALoaderFile* cself);
+
+/* returns true if eof is reached and buffer is empty */
+rc_t SRALoaderFile_IsEof(const SRALoaderFile* cself, bool* eof);
+
+/* print error msg file file info and return original!! rc
+   if msg is NULL fmt is not used so call with NULL, NULL if no msg needs to be printed */
+rc_t SRALoaderFile_LOG(const SRALoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
+
+/* returns current buffer position in file */
+rc_t SRALoaderFile_Offset(const SRALoaderFile* cself, uint64_t* offset);
+
+/* file name */
+rc_t SRALoaderFileName ( const SRALoaderFile *cself, const char **name );
+
+rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name);
+
+rc_t SRALoaderFileResolveName(const SRALoaderFile  *self, char *resolved, size_t rsize);
+
+/* DATA_BLOCK name attribute */
+rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name );
+
+/* DATA_BLOCK member_name attribute */
+rc_t SRALoaderFileMemberName ( const SRALoaderFile *cself, const char **member_name );
+
+/* DATA_BLOCK sector attribute */
+rc_t SRALoaderFileSector( const SRALoaderFile *cself, int64_t* sector);
+
+/* DATA_BLOCK region attribute */
+rc_t SRALoaderFileRegion( const SRALoaderFile *cself, int64_t* region);
+
+/* FILE @quality_scoring_system */
+rc_t SRALoaderFile_QualityScoringSystem( const SRALoaderFile *scelf, ExperimentQualityType* quality_scoring_system );
+
+/* FILE @quality_encoding */
+rc_t SRALoaderFile_QualityEncoding( const SRALoaderFile *cself, ExperimentQualityEncoding* quality_encoding );
+
+/* FILE @ascii_offset */
+rc_t SRALoaderFile_AsciiOffset( const SRALoaderFile *cself, uint8_t* ascii_offset );
+
+/* FILE @filetype */
+rc_t SRALoaderFile_FileType( const SRALoaderFile *cself, ERunFileType* filetype );
+
+/* Readline
+ *  makes next line from a file available in buffer.
+ *  eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
+ *  EOL symbol(s) never included in buffer length.
+ *  if there is no EOL at EOF - not an error.
+ *  fails if internal buffer is insufficient.
+ *  buffer is NULL on EOF
+ *  rc state of (rcString rcTooLong) means line was too long
+ *              you may copy line and readline again for the tail of the line
+ *
+ *  "buffer" [ OUT ] and "length" [ OUT ] - returned line and it's length
+ */
+rc_t SRALoaderFileReadline(const SRALoaderFile* cself, const void** buffer, size_t* length);
+
+/* Read
+*  reads "size" bytes from file and makes them available through "buffer"
+*  if "advance" is > 0 than before reading skips "advance" bytes in file
+*  if "size" == 0 then nothing is read and available "length" bytes is returned in "buffer"
+*
+*  "buffer" [ OUT ] - pointer to read bytes, "buffer" NULL means EOF
+*  "length" [ OUT ] - number of read bytes, normally == size,
+                      if less than requested size, rc is [rcBuffer,rcInsufficient], advance and read more!
+*/
+rc_t SRALoaderFileRead(const SRALoaderFile* cself, size_t advance, size_t size, const void** buffer, size_t* length);
+
+#endif /* _sra_load_file_ */
diff --git a/tools/sra-load/loader-fmt.c b/tools/sra-load/loader-fmt.c
new file mode 100644
index 0000000..2e11457
--- /dev/null
+++ b/tools/sra-load/loader-fmt.c
@@ -0,0 +1,165 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include "loader-fmt.h"
+
+rc_t SRALoaderFmtInit( SRALoaderFmt *self, const SRALoaderFmt_vt *vt )
+{
+    rc_t rc = 0;
+
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcSelf, rcNull);
+    } else if( vt == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcInterface, rcNull);
+    } else {
+        switch( vt->v1.maj ) {
+            case 0:
+                rc = RC(rcSRA, rcFormatter, rcConstructing, rcInterface, rcInvalid);
+                break;
+            case 1:
+                if( vt->v1.destroy == NULL || vt->v1.version == NULL ||
+                    (vt->v1.write_data == NULL && vt->v1.exec_prep == NULL) ) {
+                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcInterface, rcInvalid);
+                }
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcConstructing, rcInterface, rcBadVersion);
+                break;
+        }
+    }
+    if( rc == 0 ) {
+        self->vt = vt;
+    } else if( KLogLastErrorCode() != rc ) {
+        PLOGERR( klogInt, (klogInt, rc, "failed to initialize loader formatter version $(maj).$(min)",
+                              "maj=%u,min=%u", vt ? vt->v1.maj : 0, vt ? vt->v1.min : 0));
+    }
+    return rc;
+}
+
+rc_t SRALoaderFmtRelease ( const SRALoaderFmt *cself, SRATable** table )
+{
+    rc_t rc = 0;
+
+    if( cself != NULL ) {
+        SRALoaderFmt *self = (SRALoaderFmt*)cself;
+        switch( self->vt->v1.maj ) {
+            case 1:
+                rc = self->vt ->v1.destroy(self, table);
+                break;
+
+            default:
+                rc = RC(rcSRA, rcFormatter, rcDestroying, rcInterface, rcBadVersion);
+                PLOGERR( klogInt, (klogInt, rc, "failed to release loader formatter with interface version $(maj).$(min)",
+                         "maj=%u,min=%u", self->vt->v1.maj, self->vt->v1.min));
+                break;
+        }
+    }
+    return rc;
+}
+
+rc_t SRALoaderFmtVersion ( const SRALoaderFmt *self, uint32_t *vers, const char** name )
+{
+    rc_t rc = 0;
+
+    if( self == NULL || vers == NULL || name == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
+    } else {
+        *vers = 0;
+        *name = NULL;
+        switch( self->vt->v1.maj ) {
+            case 1:
+                rc = self->vt->v1.version(self, vers, name);
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcAccessing, rcInterface, rcBadVersion);
+                PLOGERR( klogInt, (klogInt, rc, "failed to read loader formatter version with interface version $(maj).$(min)",
+                    "maj=%u,min=%u", self ? self->vt->v1.maj : 0, self ? self->vt->v1.min : 0));
+                break;
+        }
+    }
+    return rc;
+}
+
+rc_t SRALoaderFmtWriteData ( SRALoaderFmt *self, uint32_t argc, const SRALoaderFile *const argv [], int64_t* spots_bad_count )
+{
+    rc_t rc = 0;
+
+    if( self == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    } else if( argv == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcArgv, rcNull);
+    } else if( argc == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcArgv, rcEmpty);
+    } else if( spots_bad_count == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcParam, rcNull);
+    } else {
+        switch( self->vt->v1.maj ) {
+            case 1:
+                if( self->vt->v1.write_data == NULL ) {
+                    rc = RC(rcSRA, rcFormatter, rcCreating, rcInterface, rcNull);
+                } else {
+                    rc = self->vt->v1.write_data(self, argc, argv, spots_bad_count);
+                }
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcWriting, rcInterface, rcBadVersion);
+                PLOGERR ( klogInt, ( klogInt, rc, "failed to load data with interface version $(maj).$(min)",
+                    "maj=%u,min=%u", self ? self->vt->v1.maj : 0, self ? self->vt->v1.min : 0));
+                break;
+        }
+    }
+    return rc;
+}
+
+rc_t SRALoaderFmtExecPrep(const SRALoaderFmt *self, const TArgs* args, const SInput* input,
+                          const char** path, const char* eargs[], size_t max_eargs)
+{
+    rc_t rc = 0;
+
+    if( self == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcCreating, rcSelf, rcNull);
+    } else if( args == NULL || input == NULL || path == NULL || eargs == NULL || max_eargs == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcCreating, rcParam, rcInvalid);
+    } else {
+        switch( self->vt->v1.maj ) {
+            case 1:
+                if( self->vt->v1.exec_prep == NULL ) {
+                    rc = RC(rcSRA, rcFormatter, rcCreating, rcInterface, rcNull);
+                } else {
+                    rc = self->vt->v1.exec_prep(self, args, input, path, eargs, max_eargs);
+                }
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcCreating, rcInterface, rcBadVersion);
+                PLOGERR ( klogInt, ( klogInt, rc, "failed to load data with interface version $(maj).$(min)",
+                    "maj=%u,min=%u", self ? self->vt->v1.maj : 0, self ? self->vt->v1.min : 0));
+                break;
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-load/loader-fmt.h b/tools/sra-load/loader-fmt.h
new file mode 100644
index 0000000..9ef888c
--- /dev/null
+++ b/tools/sra-load/loader-fmt.h
@@ -0,0 +1,171 @@
+/*=======================================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_loader_fmt_
+#define _sra_load_loader_fmt_
+
+#include <kfs/directory.h>
+#include <kapp/args.h>
+#include <kapp/log-xml.h>
+
+#include "loader-file.h"
+#include "experiment-xml.h"
+
+typedef struct ResultXML {
+    char *file;
+    char *name;
+    char *region;
+    char *sector;
+    char *member_name;
+} ResultXML;
+
+typedef struct ExpectedXML {
+    uint8_t number_of_results;
+    ResultXML **result;
+} ExpectedXML;
+
+typedef struct TArgs_struct {
+    const char *_runXmlPath;
+    const char* _input_path;
+    uint32_t _input_unpacked; /* as bool */
+    uint32_t _no_read_ahead; /* as bool */
+
+    const char *_experimentXmlPath;
+    const char *_target;
+    uint32_t _force_target; /* as bool */
+
+    int64_t _spots_to_run;
+    int64_t _spots_bad_allowed;
+    int _spots_bad_allowed_percentage;
+
+    const char* _expectedXmlPath;
+    int _intensities; /* trie state: 0 - default, 1 - on, 2 - off */
+
+    Args* args;
+    const XMLLogger* _xml_log;
+    RunXML* _run;
+    const KDirectory* _input_dir;
+    const ExperimentXML* _experiment;
+    const ExpectedXML* _expected;
+    SRAMgr* _sra_mgr;
+} TArgs;
+
+typedef struct SInput_struct {
+    struct {
+        const SRALoaderFile** files;
+        uint32_t count;
+    } *blocks;
+    uint32_t count;
+} SInput;
+
+/* Filter output columns */
+enum ESRAColumnFilter {
+    efltrINTENSITY = 0x01,
+    efltrNOISE     = 0x02,
+    efltrSIGNAL    = 0x04,
+    efltrDEFAULT   = 0x08 /* if this bit is set FE must decide for itself ignoring other bits!! */
+};
+
+typedef struct SRALoaderConfig_struct {
+    /* if spots_to_run >= 0 then reader must stop after writing given number of spots */
+	int64_t spots_to_run;
+    int64_t spots_bad_allowed;
+    /* combination of SRAColumnFilter values. If the corresponding bit is set then the column should be skipped */
+	uint64_t columnFilter;
+    const ExperimentXML* experiment;
+    const char* table_path;
+    SRAMgr* sra_mgr;
+    bool force_table_overwrite;
+} SRALoaderConfig;
+
+
+typedef union SRALoaderFmt_vt SRALoaderFmt_vt;
+
+typedef struct SRALoaderFmt_struct {
+    const SRALoaderFmt_vt *vt;
+} SRALoaderFmt;
+
+#ifndef SRALOADERFMT_IMPL
+#define SRALOADERFMT_IMPL SRALoaderFmt
+#endif
+
+typedef struct SRALoaderFmt_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( * destroy ) ( SRALOADERFMT_IMPL *self, SRATable** table  );
+    rc_t ( * version ) ( const SRALOADERFMT_IMPL *self, uint32_t *vers, const char** name );
+    rc_t ( * exec_prep ) (const SRALOADERFMT_IMPL *self, const TArgs* args, const SInput* input,
+                                                    const char** path, const char* eargs[], size_t max_eargs);
+    rc_t ( * write_data ) ( SRALOADERFMT_IMPL *self, uint32_t argc, const SRALoaderFile *const argv [], int64_t* spots_bad_count );
+    /* end minor version == 0 */
+
+} SRALoaderFmt_vt_v1;
+
+union SRALoaderFmt_vt {
+    SRALoaderFmt_vt_v1 v1;
+};
+
+/* Make
+ *  allocate object based on SRALoaderFmt type and initialize it both using
+ *  SRALoaderFmtInit and SRALoaderConfig data
+ */
+rc_t SRALoaderFmtMake( SRALoaderFmt **self, const SRALoaderConfig *config );
+
+/* Init
+ *  initialize a newly allocated loader object
+ */
+rc_t SRALoaderFmtInit( SRALoaderFmt *self, const SRALoaderFmt_vt *vt);
+
+rc_t SRALoaderFmtRelease ( const SRALoaderFmt *self, SRATable** table );
+
+/* Version
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+rc_t SRALoaderFmtVersion ( const SRALoaderFmt *self, uint32_t *vers, const char** name );
+
+/* WriteData
+ *  reader will parse data from input files and write them to table
+ *  a row at a time.
+ *
+ *  "table" [ IN ] - an open, writable table with no open columns.
+ *  the reader should open columns with the appropriate data type
+ *  based upon its format and input files as determined during construction
+ *
+ *  "argc" [ IN ] and "argv" [ IN ] - input files positionally
+ *  corresponding to information given in reader configuration
+ *  data in XML node.
+ */
+rc_t SRALoaderFmtWriteData ( SRALoaderFmt *self, uint32_t argc, const SRALoaderFile *const argv [], int64_t* spots_bad_count );
+
+rc_t SRALoaderFmtExecPrep (const SRALoaderFmt *self, const TArgs* args, const SInput* input,
+                           const char** path, const char* eargs[], size_t max_eargs);
+
+#endif /* _sra_load_loader_fmt_ */
diff --git a/tools/sra-load/loader.c b/tools/sra-load/loader.c
new file mode 100644
index 0000000..d721263
--- /dev/null
+++ b/tools/sra-load/loader.c
@@ -0,0 +1,1135 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/main.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <kxml/xml.h>
+#include <kfs/md5.h>
+#include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kdb/meta.h>
+#include <kapp/loader-meta.h>
+#include <sra/wsradb.h>
+
+#include <os-native.h>
+
+#include "debug.h"
+#include "loader-fmt.h"
+#include "run-xml.h"
+#include "experiment-xml.h"
+#include "loader-file.h"
+
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <assert.h>
+#include <limits.h>
+
+static KDirectory* s_Directory = NULL;
+static const KXMLMgr *s_XmlMgr = NULL;
+
+enum TArgsIndex {
+    targs_RunXML = 0,
+    targs_InputPath,
+    targs_InputUnpacked,
+    targs_InputNoCache,
+    targs_ExperimentXML,
+    targs_Target,
+    targs_ForceTarget,
+    targs_SpotsNumber,
+    targs_BadSpotsNumber,
+    targs_BadSpotPercentage,
+    targs_ExpectedXML,
+    targs_Intensities,
+    targs_ArgsQty
+};
+
+const char* usage_text[targs_ArgsQty][5] = {
+	{ "path to run.xml describing input files", NULL },
+	{ "input files location, default '.'", NULL },
+	{ "input files are unpacked", NULL },
+    { "disable input files threaded caching", NULL },
+	{ "path to experiment.xml", NULL },
+    { "target location", NULL },
+	{ "force target overwrite", NULL },
+	{ "process only given number of spots from input", NULL },
+	{ "acceptable number of spot creation errors, default is 50", NULL },
+	{ "acceptable percentage of spots creation errors, default is 5", NULL },
+	{ "path to expected.xml", NULL },
+	{ "[on | off] load intensity data, default is off. For ",
+      "  Illumina: signal, intensity, noise;",
+      "  AB SOLiD: signal(s);",
+      "  LS454: signal, position (for SFF files this option is ON by default).", NULL },
+};
+
+OptDef TArgsDef[] =
+{
+    /* if you change order in this array, rearrange enum and usage_text above accordingly! */
+    {"run-xml", "r", NULL, usage_text[targs_RunXML], 1, true, true},
+    {"input-path", "i", NULL, usage_text[targs_InputPath], 1, true, false},
+    {"input-unpacked", "u", NULL, usage_text[targs_InputUnpacked], 1, false, false},
+    {"input-no-threads", "t", NULL, usage_text[targs_InputNoCache], 1, false, false},
+    {"experiment", "e", NULL, usage_text[targs_ExperimentXML], 1, true, true},
+    {"output-path", "o", NULL, usage_text[targs_Target], 1, true, true},
+    {"force", "f", NULL, usage_text[targs_ForceTarget], 1, false, false},
+    {"spots-number", "n", NULL, usage_text[targs_SpotsNumber], 1, true, false},
+    {"bad-spot-number", "bE", NULL, usage_text[targs_BadSpotsNumber], 1, true, false},
+    {"bad-spot-percentage", "p", NULL, usage_text[targs_BadSpotPercentage], 1, true, false},
+    {"expected", "x", NULL, usage_text[targs_ExpectedXML], 1, true, false},
+    {"intensities", "s", NULL, usage_text[targs_Intensities], 1, true, false}
+};
+
+rc_t CC UsageSummary (const char * progname)
+{
+    OUTMSG(( "\nUsage:\n\t%s [options] -r run.xml -e experiment.xml -o output-path\n\n", progname));
+    return 0;
+}
+
+rc_t Usage( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+    int i;
+
+    if(args == NULL) {
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    } else {
+        rc = ArgsProgram (args, &fullpath, &progname);
+    }
+    if(rc != 0 ) {
+        progname = fullpath = UsageDefaultName;
+    }
+    UsageSummary(progname);
+
+    for(i = 0; i < targs_ArgsQty; i++ ) {
+        if( TArgsDef[i].required && TArgsDef[i].help[0] != NULL ) {
+            HelpOptionLine(TArgsDef[i].aliases, TArgsDef[i].name, NULL, TArgsDef[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < targs_ArgsQty; i++ ) {
+        if( !TArgsDef[i].required && TArgsDef[i].help[0] != NULL ) {
+            HelpOptionLine(TArgsDef[i].aliases, TArgsDef[i].name, NULL, TArgsDef[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+    return rc;
+}
+
+static
+rc_t TArgsParse(TArgs *args, int argc, char *argv[])
+{
+    rc_t rc = 0;
+    uint32_t count;
+    char* end = NULL;
+    const char* errmsg = NULL;
+    const char* spot_qty = NULL, *bad_spots = NULL;
+    const char *bad_percent = NULL, *intense = NULL;
+
+    assert(args && argv);
+
+    /* no parameters accepted */
+    if( (rc = ArgsParamCount(args->args, &count)) != 0 || count != 0 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcUnexpected);
+        ArgsParamValue(args->args, 0, (const void **)&errmsg);
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_RunXML].name, &count)) != 0 || count != 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+        errmsg = TArgsDef[targs_RunXML].name;
+    } else if( (rc = ArgsOptionValue(args->args, TArgsDef[targs_RunXML].name, 0, (const void **)&args->_runXmlPath)) != 0 ) {
+        errmsg = TArgsDef[targs_RunXML].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_ExperimentXML].name, &count)) != 0 || count != 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+        errmsg = TArgsDef[targs_ExperimentXML].name;
+    } else if( (rc = ArgsOptionValue(args->args, TArgsDef[targs_ExperimentXML].name, 0, (const void **)&args->_experimentXmlPath)) != 0 ) {
+        errmsg = TArgsDef[targs_ExperimentXML].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_Target].name, &count)) != 0 || count != 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+        errmsg = TArgsDef[targs_Target].name;
+    } else if( (rc = ArgsOptionValue(args->args, TArgsDef[targs_Target].name, 0, (const void **)&args->_target)) != 0 ) {
+        errmsg = TArgsDef[targs_Target].name;
+
+    /* optional */
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputPath].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_InputPath].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_InputPath].name, 0, (const void **)&args->_input_path)) != 0 ) {
+        errmsg = TArgsDef[targs_InputPath].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputUnpacked].name, &args->_input_unpacked)) != 0 ) {
+        errmsg = TArgsDef[targs_InputUnpacked].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputNoCache].name, &args->_no_read_ahead)) != 0 ) {
+        errmsg = TArgsDef[targs_InputNoCache].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_ForceTarget].name, &args->_force_target)) != 0 ) {
+        errmsg = TArgsDef[targs_ForceTarget].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_SpotsNumber].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_SpotsNumber].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_SpotsNumber].name, 0, (const void **)&spot_qty)) != 0 ) {
+        errmsg = TArgsDef[targs_SpotsNumber].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_BadSpotsNumber].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_BadSpotsNumber].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_BadSpotsNumber].name, 0, (const void **)&bad_spots)) != 0 ) {
+        errmsg = TArgsDef[targs_BadSpotsNumber].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_BadSpotPercentage].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_BadSpotPercentage].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_BadSpotPercentage].name, 0, (const void **)&bad_percent)) != 0 ) {
+        errmsg = TArgsDef[targs_BadSpotPercentage].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_ExpectedXML].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_ExpectedXML].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_ExpectedXML].name, 0, (const void **)&args->_expectedXmlPath)) != 0 ) {
+        errmsg = TArgsDef[targs_ExpectedXML].name;
+
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_Intensities].name, &count)) != 0 || count > 1 ) {
+        rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+        errmsg = TArgsDef[targs_Intensities].name;
+    } else if( count > 0 && (rc = ArgsOptionValue(args->args, TArgsDef[targs_Intensities].name, 0, (const void **)&intense)) != 0 ) {
+        errmsg = TArgsDef[targs_Intensities].name;
+    }
+    while( rc == 0 ) {
+        long val = 0;
+        if( args->_input_path == NULL ) {
+            args->_input_path = "./";
+            if( (rc = KDirectoryAddRef(s_Directory)) == 0 ) {
+                args->_input_dir = s_Directory;
+            } else {
+                errmsg = TArgsDef[targs_InputPath].name;
+                break;
+            }
+        } else if( (rc = KDirectoryOpenDirRead(s_Directory, &args->_input_dir, true, args->_input_path)) != 0 ) {
+            errmsg = TArgsDef[targs_InputPath].name;
+            break;
+        }
+
+        if( spot_qty != NULL ) {
+            errno = 0;
+            val = strtol(spot_qty, &end, 10);
+            if( errno != 0 || spot_qty == end || *end != '\0' || val <= 0 ) {
+                rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                errmsg = TArgsDef[targs_SpotsNumber].name;
+                break;
+            }
+            args->_spots_to_run = val;
+        }
+        if( bad_spots != NULL ) {
+            errno = 0;
+            val = strtol(bad_spots, &end, 10);
+            if( errno != 0 || bad_spots == end || *end != '\0' || val < 0 ) {
+                rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                errmsg = TArgsDef[targs_BadSpotsNumber].name;
+                break;
+            }
+            args->_spots_bad_allowed = val;
+        }
+        if( bad_percent != NULL ) {
+            errno = 0;
+            val = strtol(bad_percent, &end, 10);
+            if( errno != 0 || bad_percent == end || *end != '\0' || val < 0 || val > 100 ) {
+                rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                errmsg = TArgsDef[targs_BadSpotPercentage].name;
+                break;
+            }
+            args->_spots_bad_allowed_percentage = val;
+        }
+        if( intense != NULL ) {
+            if( strcasecmp(intense, "on") == 0 ) {
+                args->_intensities = 1;
+            } else if( strcasecmp(intense, "off") == 0 ) {
+                args->_intensities = 2;
+            } else {
+                rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                errmsg = TArgsDef[targs_Intensities].name;
+                break;
+            }
+        }
+        break;
+    }
+    if( rc != 0 ) {
+        Usage(args->args);
+        LOGERR(klogErr, rc, errmsg ? errmsg : "check command line");
+    }
+    return rc;
+}
+
+static
+void TArgsRelease(const TArgs* cself)
+{
+    if(cself) {
+        TArgs* self = (TArgs*)cself;
+        RunXML_Whack(self->_run);
+        Experiment_Whack(self->_experiment);
+        KDirectoryRelease(self->_input_dir);
+        ArgsWhack(self->args);
+        SRAMgrRelease(self->_sra_mgr);
+        XMLLogger_Release(self->_xml_log);
+        free(self);
+    }
+}
+
+static
+rc_t TArgsMake(TArgs **args, int argc, char *argv[])
+{
+    rc_t rc = 0;
+    TArgs* r;
+
+    assert(args && argv);
+
+    if( (r = calloc(1, sizeof(*r))) == NULL) {
+        rc = RC(rcExe, rcArgv, rcAllocating, rcMemory, rcExhausted);
+    } else if( (rc = ArgsMakeAndHandle(&r->args, argc, argv, 2, TArgsDef, targs_ArgsQty, XMLLogger_Args, XMLLogger_ArgsQty)) == 0 &&
+               (rc = XMLLogger_Make(&r->_xml_log, s_Directory, r->args)) == 0 ) {
+        r->_force_target = false;
+        r->_spots_to_run = -1;
+        r->_spots_bad_allowed = 50;
+        r->_spots_bad_allowed_percentage = 5;
+        r->_input_unpacked = false;
+        if( argc > 1 ) {
+            rc = TArgsParse(r, argc, argv);
+        } else {
+            MiniUsage(r->args);
+            exit(0);
+        }
+    }
+    if( rc == 0 ) {
+        *args = r;
+    } else {
+        TArgsRelease(r);
+        *args = NULL;
+    }
+    return rc;
+}
+
+static rc_t read_required_node_data_cstr(const KXMLNode *node,
+    const char *attr, char **string)
+{
+    rc_t rc = attr == NULL ?
+            KXMLNodeReadCStr(node, string, NULL) :
+            KXMLNodeReadAttrCStr(node, attr, string, NULL);
+
+    if (rc && GetRCState(rc) == rcNotFound) {
+        const char *name = NULL;
+        if( (rc = KXMLNodeElementName(node, &name)) == 0 ) {
+            if (attr == NULL) {
+                PLOGERR(klogErr, (klogErr, rc, "XML node $(name)", "name=%s", name));
+            }
+            else {
+                PLOGERR(klogErr, (klogErr, rc, "XML attribute $(name)/@$(attr)",
+                                  "name=%s,attr=%s", name, attr));
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t read_optional_node_data_cstr(const KXMLNode *node,
+    const char *attr, char **string)
+{
+    rc_t rc = attr == NULL ?
+            KXMLNodeReadCStr(node, string, NULL) :
+            KXMLNodeReadAttrCStr(node, attr, string, "");
+
+    if (rc) {
+        if (GetRCState(rc) == rcNotFound) {
+            rc = 0;
+        }
+        else {
+            const char *name = NULL;
+            if( (rc = KXMLNodeElementName(node, &name)) == 0 ) {
+                PLOGERR(klogErr, (klogErr, rc, "XML attribute $(name)/@$(attr)",
+                                  "name=%s,attr=%s", name, attr));
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t ResultXML_make(ResultXML **rslt, const KXMLNode *Result)
+{
+    rc_t rc = 0;
+    ResultXML *r = NULL;
+
+    assert(rslt && Result);
+
+    r = calloc(1, sizeof *r);
+    if (r == NULL) {
+        rc = RC(rcExe, rcXmlDoc, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    if (rc == 0) {
+        rc = read_required_node_data_cstr(Result, "file", &r->file);
+    }
+
+    if (rc == 0) {
+        rc = read_required_node_data_cstr(Result, "name", &r->name);
+    }
+
+    if (rc == 0) {
+        rc = read_required_node_data_cstr(Result, "sector", &r->sector);
+    }
+
+    if (rc == 0) {
+        rc = read_required_node_data_cstr(Result, "region", &r->region);
+    }
+
+    if (rc == 0) {
+        rc = read_optional_node_data_cstr(Result, "member_name", &r->member_name);
+    }
+
+    if (rc) {
+        free(r);
+    }
+    else {
+        *rslt = r;
+    }
+
+    return rc;
+}
+
+static rc_t ExpectedXMLWhack(const ExpectedXML *r)
+{
+    return 0;
+}
+
+static rc_t ExpectedXMLMake(const ExpectedXML **rslt,
+    const KXMLNode *Expected)
+{
+    rc_t rc = 0;
+    const KXMLNodeset *Results = NULL;
+    if (rslt == NULL) {
+        return RC(rcExe, rcXmlDoc, rcConstructing, rcParam, rcNull);
+    }
+    *rslt = NULL;
+    if (Expected == NULL) {
+        return RC(rcExe, rcXmlDoc, rcConstructing, rcParam, rcNull);
+    }
+    rc = KXMLNodeOpenNodesetRead(Expected, &Results, "Result");
+    if (rc == 0) {
+        ExpectedXML *r = calloc(1, sizeof *r);
+        if (r == NULL) {
+            rc = RC(rcExe, rcXmlDoc, rcAllocating, rcMemory, rcExhausted);
+        }
+        else {
+            uint32_t num = 0;
+            rc = KXMLNodesetCount(Results, &num);
+            if (rc == 0 && num > 0) {
+                r->number_of_results = num;
+                r->result = calloc(1, num * sizeof r->result[0]);
+                if (r->result == NULL) {
+                    rc = RC(rcExe, rcXmlDoc, rcAllocating, rcMemory, rcExhausted);
+                    free(r);
+                }
+                else {
+                    int i = 0;
+                    for (i = 0; rc == 0 && i < num; ++i) {
+                        const KXMLNode *Result = NULL;
+                        rc = KXMLNodesetGetNodeRead(Results, &Result, i);
+                        if (rc == 0) {
+                            rc = ResultXML_make(&r->result[i], Result);
+                        }
+                    }
+                    if (rc == 0) {
+                        *rslt = r;
+                    }
+                    else {
+                        ExpectedXMLWhack(r);
+                    }
+                }
+            }
+        }
+    }
+    else if (GetRCState(rc) != rcNotFound) {
+        LOGERR(klogErr, rc, "Cannot read Result node");
+    }
+    return rc;
+}
+
+static rc_t s_KXMLDocMake(const KXMLDoc **doc, const char *path)
+{
+    rc_t rc = 0;
+    const KFile *file = NULL;
+    if (doc == NULL || path == NULL) {
+        return RC(rcExe, rcXmlDoc, rcConstructing, rcParam, rcNull);
+    }
+    if (rc == 0) {
+        rc = KDirectoryOpenFileRead(s_Directory, &file, "%s", path);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc, "Cannot open file $(file)", "file=%s", path));
+        }
+    }
+    if (rc == 0) {
+        rc = KXMLMgrMakeDocRead(s_XmlMgr, doc, file);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc, "Cannot make XML document from $(file)",
+                              "file=%s", path));
+        }
+    }
+    KFileRelease(file);
+    return rc;
+}
+
+static rc_t KXMLNodeMakeFromDoc(const KXMLNode **node, const KXMLDoc *doc,
+    const char *root)
+{
+    rc_t rc = 0;
+    const KXMLNodeset *ns = NULL;
+    if (node == NULL || doc == NULL || root == NULL) {
+        return RC(rcExe, rcXmlDoc, rcConstructing, rcParam, rcNull);
+    }
+    if (rc == 0) {
+        rc = KXMLDocOpenNodesetRead(doc, &ns, root);
+    }
+    if (rc == 0) {
+        uint32_t count = 0;
+        rc = KXMLNodesetCount(ns, &count);
+        if (rc == 0) {
+            if (count == 0) {
+                rc = RC(rcExe, rcXmlDoc, rcReading, rcNode, rcNotFound);
+                PLOGERR(klogErr, (klogErr, rc, "$(path)", "path=%s", root));
+            }
+            else if (count > 1) {
+                rc = RC(rcExe, rcXmlDoc, rcParsing, rcData, rcExcessive);
+                PLOGERR(klogErr, (klogErr, rc,
+                                  "too many data $(node) nodes", "node=%s", root));
+            }
+        }
+    }
+    if (rc == 0) {
+        rc = KXMLNodesetGetNodeRead(ns, node, 0);
+    }
+    KXMLNodesetRelease(ns);
+    return rc;
+}
+
+static rc_t KXMLNodeMakeFromFile(const KXMLNode **node, const char *path,
+    const char *root)
+{
+    rc_t rc = 0;
+    const KXMLDoc *doc = NULL;
+    const char *rootPath = "/";
+    if (node == NULL || path == NULL) {
+        return RC(rcExe, rcXmlDoc, rcConstructing, rcParam, rcNull);
+    }
+    rc = s_KXMLDocMake(&doc, path);
+    if (rc == 0) {
+        if (root != NULL) {
+            rootPath = root;
+        }
+        rc = KXMLNodeMakeFromDoc(node, doc, rootPath);
+    }
+    KXMLDocRelease(doc);
+    return rc;
+}
+
+static
+rc_t TArgsParseRunXml(TArgs *args)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+    const KXMLDoc *doc = NULL;
+    assert(args);
+    if (args->_runXmlPath == NULL) {
+        return rc;
+    }
+    if (rc == 0) {
+        rc = s_KXMLDocMake(&doc, args->_runXmlPath);
+    }
+    if (rc == 0) {
+        rc= KXMLNodeMakeFromDoc(&node, doc, "/RUN_SET/RUN | /RUN");
+    }
+    if (rc == 0) {
+        rc = RunXML_Make(&args->_run, node);
+    }
+    KXMLNodeRelease(node);
+    KXMLDocRelease(doc);
+    return rc;
+}
+
+static rc_t TArgsParseExpectedXml(TArgs *self)
+{
+    rc_t rc = 0;
+    const KXMLNode *node = NULL;
+    assert(self);
+    if (self->_expectedXmlPath == NULL) {
+        return rc;
+    }
+    if (rc == 0) {
+        rc = KXMLNodeMakeFromFile(&node, self->_expectedXmlPath, "//Expected");
+    }
+    if (rc == 0) {
+        rc = ExpectedXMLMake(&self->_expected, node);
+    }
+    KXMLNodeRelease(node);
+    return rc;
+}
+
+static rc_t TArgsParseXmls(TArgs *self)
+{
+    rc_t rc = 0;
+    const KXMLDoc *doc = NULL;
+
+    if( (rc = TArgsParseRunXml(self)) == 0 &&
+        (rc = s_KXMLDocMake(&doc, self->_experimentXmlPath)) == 0 &&
+        (rc = Experiment_Make(&self->_experiment, doc, &self->_run->attributes)) == 0 ) {
+        rc = TArgsParseExpectedXml(self);
+    }
+    KXMLDocRelease(doc);
+    return rc;
+}
+
+static rc_t TArgsLogResultTotal(const TArgs *self, rc_t status, uint64_t spotCount, uint64_t baseCount, int64_t bad_spot_count)
+{
+    rc_t rc = 0;
+    int i = 0;
+    const char* accession, *state;
+    KLogLevel tmp_lvl;
+
+    if (self == NULL) {
+        return rc;
+    }
+
+    accession = strrchr(self->_target, '/');
+    if( accession == NULL ) {
+        accession = self->_target;
+    } else {
+        accession++;
+    }
+    state = status == 0 ? "success" : "failure";
+    /* raise log level in order to print stats */
+    tmp_lvl = KLogLevelGet();
+    KLogLevelSet(klogInfo);
+    for(i = 0; self->_expected != NULL && i < self->_expected->number_of_results && rc == 0; i++) {
+        ResultXML *f = self->_expected->result[i];
+        PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=result,status=%s,accession=%s,spot_count=%lu,base_count=%lu,"
+                "file=%s,name=%s,region=%s,sector=%s,member_name=%s",
+                state, accession, spotCount, baseCount,
+                f->file, f->name, f->region, f->sector, f->member_name ? f->member_name : ""));
+    }
+    if(status == 0) {
+        PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=%s,accession=%s,spot_count=%lu,base_count=%lu,bad_spots=%ld",
+                state, accession, spotCount, baseCount, bad_spot_count));
+    } else {
+        PLOGERR(klogErr, (klogErr, status, "load failed: $(reason_short)",
+                "severity=total,status=%s,accession=%s",
+                state, accession));
+    }
+    KLogLevelSet(tmp_lvl);
+    return rc;
+}
+
+static
+void SInput_Release(const SInput* cself)
+{
+    if(cself) {
+        SInput* self = (SInput*)cself;
+        uint32_t i;
+        for(i = 0; i < self->count; i++) {
+            /* actual files must be released elsewhere */
+            free(self->blocks[i].files);
+        }
+        free(self->blocks);
+        free(self);
+    }
+}
+
+typedef struct SInputOpen_TarVisitData_struct {
+    uint32_t alloc;
+    char** files;
+    uint32_t count;
+    
+} SInputOpen_TarVisitData;
+
+static
+rc_t SInputOpen_TarVisit(const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    rc_t rc = 0;
+
+    if( type == kptFile ) {
+        SInputOpen_TarVisitData* d = (SInputOpen_TarVisitData*)data;
+
+        if( d->alloc <= d->count ) {
+            void* p;
+            d->alloc = d->files == NULL ? 1024 : (d->alloc * 2);
+            if( (p = realloc(d->files, d->alloc * sizeof(*d->files))) == NULL ) {
+                rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            } else {
+                d->files = p;
+            }
+        }
+        if( rc == 0 ) {
+            char buf[1024];
+            if( (rc = KDirectoryResolvePath(dir, true, buf, sizeof(buf), "%s", name)) == 0 ) { 
+                d->files[d->count++] = strdup(buf);
+                if( d->files[d->count - 1] == NULL ) {
+                    rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SInputOpen(const SInput **cself, TArgs *args)
+{
+    rc_t rc = 0;
+    SInput *self = calloc(1, sizeof(*self));
+    uint32_t file_qty = 0;
+
+    if(self == NULL) {
+        rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    } else {
+        self->blocks = calloc(args->_run->datablock_count, sizeof(*(self->blocks)));
+        if(self->blocks == NULL) {
+            rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+        } else {
+            uint32_t i, ccdirs_qty = 0;
+            struct {
+                const char* uid;
+                const KDirectory* xdir;
+            } ccdirs[1024];
+
+            memset(ccdirs, 0, sizeof(ccdirs));
+            self->count = args->_run->datablock_count;
+            for(i = 0; rc == 0 && i < self->count; i++) {
+                const DataBlock* b = &args->_run->datablocks[i];
+                uint32_t f, j;
+                char fname[10240];
+
+                self->blocks[i].files = calloc(b->files_count, sizeof(*(self->blocks->files)));
+                if(self->blocks == NULL) {
+                    rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                    continue;
+                }
+                self->blocks[i].count = b->files_count;
+                for(f = 0, j = 0; rc == 0 && j < b->files_count; j++ ) {
+                    int fnlen = strlen(b->files[j].filename);
+                    if( b->files[j].cc_xml != NULL ) {
+                        const KDirectory* fdir = args->_input_dir;
+                        if( !args->_input_unpacked ) {
+                            uint32_t cd;
+                            for(cd = 0; cd < ccdirs_qty; cd++) {
+                                if( strcmp(ccdirs[cd].uid,  b->files[j].cc_xml) == 0 ) {
+                                    break;
+                                }
+                            }
+                            if( cd >= ccdirs_qty ) {
+                                const KFile* kf = NULL;
+                                if( ccdirs_qty + 1 > sizeof(ccdirs) / sizeof(ccdirs[0]) ) {
+                                    rc = RC(rcExe, rcStorage, rcAllocating, rcNamelist, rcTooLong);
+                                } else if( (rc = KDirectoryOpenFileRead(args->_input_dir, &kf, "%s.xml", b->files[j].cc_xml)) == 0) {
+                                    char base_path[4096];
+                                    int r = snprintf(base_path, sizeof base_path, "%s/", b->files[j].cc_xml);
+                                    if (r >= sizeof base_path) {
+                                        rc = RC(rcExe, rcStorage, rcAllocating, rcFile, rcTooLong);
+                                    } else if ((rc = KDirectoryOpenXTocDirRead(args->_input_dir, &ccdirs[ccdirs_qty].xdir, false, kf, "%s", base_path)) == 0 ) {
+                                        cd = ccdirs_qty++;
+                                        ccdirs[cd].uid = b->files[j].cc_xml;
+                                        KFileRelease(kf);
+                                    }
+                                }
+                            }
+                            fdir = ccdirs[cd].xdir;
+                        }
+                        if( rc == 0 ) {
+                            char* fn = strdup(b->files[j].cc_path);
+                            if( fn == NULL ) {
+                                rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                            } else {
+                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], fdir, fn, b, &b->files[j].attr,
+                                                        NULL, !args->_no_read_ahead);
+                                file_qty++;
+                                free(fn);
+                            }
+                        }
+                        continue;
+                    }
+                    if( fnlen >= sizeof(fname) ) {
+                        rc = RC(rcExe, rcStorage, rcAllocating, rcFile, rcTooLong);
+                        PLOGERR(klogErr, (klogErr, rc, "$(file)", PLOG_S(file), b->files[j].filename));
+                        continue;
+                    }
+                    strcpy(fname, b->files[j].filename);
+                    /* compressed archives supposed to be decompressed beforehand */
+                    if( fnlen > 7 && strcmp(&fname[fnlen - 7], ".tar.gz") == 0 ) {
+                        fnlen -= 3;
+                        fname[fnlen] = '\0';
+                    } else if( fnlen > 4 && strcmp(&fname[fnlen - 4], ".tgz") == 0 ) {
+                        fname[fnlen - 2] = 'a';
+                        fname[fnlen - 1] = 'r';
+                    } else if( fnlen > 7 && strcmp(&fname[fnlen - 7], ".tar.bz2") == 0 ) {
+                        fnlen -= 4;
+                        fname[fnlen] = '\0';
+                    }
+                    if( strcmp(&fname[fnlen - 4], ".tar") == 0 ) {
+                        const KDirectory* tar;
+                        if( (rc = KDirectoryOpenArcDirRead(args->_input_dir, &tar, true, fname,
+                                                           tocKFile, KArcParseTAR, NULL, NULL)) == 0 ) {
+                            uint32_t k;
+                            void* p;
+                            SInputOpen_TarVisitData data = {0, NULL, 0};
+
+                            if( (rc = KDirectoryVisit(tar, true, SInputOpen_TarVisit, &data, ".")) != 0 ) {
+                                continue;
+                            }
+                            if( data.count == 0 ) {
+                                rc = RC(rcExe, rcStorage, rcAllocating, rcFile, rcEmpty);
+                                PLOGERR(klogErr,(klogErr, rc, "Empty tar $(file)", PLOG_S(file), fname));
+                                continue;
+                            }
+                            self->blocks[i].count += data.count - 1; /* minus tar file */
+                            p = realloc(self->blocks[i].files, self->blocks[i].count * sizeof(*(self->blocks->files)));
+                            if( p == NULL) {
+                                rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                                continue;
+                            }
+                            self->blocks[i].files = p;
+                            for(k = 0; k < data.count; k++) {
+                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], tar, data.files[k], b, &b->files[j].attr,
+                                                        NULL, !args->_no_read_ahead);
+                                file_qty++;
+                            }
+                            free(data.files);
+                            KDirectoryRelease(tar);
+                        }
+                    } else {
+                        char* fn = strdup(fname);
+                        if( fn == NULL ) {
+                            rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                        } else {
+                            rc = SRALoaderFile_Make(&self->blocks[i].files[f++], args->_input_dir, fn, b, &b->files[j].attr,
+                                                    b->files[j].md5_digest, !args->_no_read_ahead);
+                            file_qty++;
+                            free(fn);
+                        }
+                    }
+                }
+            }
+            for(i = 0; i < ccdirs_qty; i++) {
+                KDirectoryRelease(ccdirs[i].xdir);
+            }
+        }
+    }
+    if( rc == 0 && file_qty < 1 ) {
+        rc = RC(rcExe, rcStorage, rcAllocating, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "no files to load");
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        SInput_Release(self);
+    }
+    return rc;
+}
+
+static
+rc_t WriteSoftwareVersionsMeta(SRATable* table, const char *argv0, uint32_t fe_version, const char* fe_name)
+{
+    rc_t rc = 0;
+    KMDataNode *node = NULL;
+
+    assert(table);
+
+    if( (rc = SRATableOpenMDataNodeUpdate(table, &node, "/")) == 0 ) {
+        rc = KLoaderMeta_Write(node, argv0, __DATE__, fe_name, fe_version);
+    }
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "Cannot update loader meta");
+    }
+    KMDataNodeRelease(node);
+    return rc;
+}
+
+rc_t KMain(int argc, char *argv[])
+{
+    rc_t rc = 0, lastRc = 0;
+
+    TArgs *args = NULL;
+    const SInput *input = NULL;
+    SRATable* table = NULL;
+    SRALoaderFmt* fe = NULL;
+
+    SRALoaderConfig feInput;
+    memset(&feInput, 0, sizeof feInput);
+
+    /* Initialize statics */
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&s_Directory);
+    }
+    /* Parse command line arguments */
+    if (rc == 0) {
+        rc = TArgsMake(&args, argc, argv);
+    }
+    if( rc == 0 &&
+        (rc = SRAMgrMakeUpdate(&args->_sra_mgr, NULL)) == 0 &&
+        (rc = SRAMgrSetMD5Mode(args->_sra_mgr, true)) == 0 ) {
+        rc = KXMLMgrMakeRead(&s_XmlMgr);
+    }
+    if( rc == 0 && (rc = TArgsParseXmls(args)) == 0) {
+        if( args->_intensities == 2 ) {
+            feInput.columnFilter = efltrINTENSITY | efltrNOISE | efltrSIGNAL;
+        } else if( args->_intensities == 1 ) {
+            feInput.columnFilter = 0;
+        } else {
+            feInput.columnFilter = efltrDEFAULT;
+        }
+        feInput.spots_to_run = args->_spots_to_run;
+        feInput.spots_bad_allowed = args->_spots_bad_allowed;
+        feInput.experiment = args->_experiment;
+        feInput.sra_mgr = args->_sra_mgr;
+        feInput.table_path = args->_target;
+        feInput.force_table_overwrite = args->_force_target;
+
+        rc = SRALoaderFmtMake(&fe, &feInput);
+    }
+    if (rc == 0) {
+        rc = SInputOpen(&input, args);
+    }
+    if(rc == 0) {
+        if( fe->vt->v1.exec_prep ) {
+            const char* efile = NULL;
+            const char* eargs[64];
+            uint32_t i = 1, j, qty = 0, x = 0;
+            char extra[1024];
+
+            eargs[i++] = "-L";
+            eargs[i++] = KLogGetParamStrings()[KLogLevelGet()];
+            qty = KStsLevelGet();
+            while(qty-- > 0 ) {
+                eargs[i++] = "-v";
+            }
+#if _DEBUGGING
+            if( ArgsOptionCount(args->args, "+", &qty) == 0 ) {
+                uint32_t j;
+                for(j = 0; j < qty; j++) {
+                    const char* v;
+                    if( ArgsOptionValue(args->args, "+", j, (const void **)&v) == 0 ) {
+                        eargs[i++] = "-+";
+                        eargs[i++] = v;
+                    }
+                }
+            }
+            if( ArgsOptionCount(args->args, "debug", &qty) == 0) {
+                uint32_t j;
+                for(j = 0; j < qty; j++) {
+                    const char* v;
+                    if( ArgsOptionValue(args->args, "debug", j, (const void **)&v) == 0 ) {
+                        eargs[i++] = "-+";
+                        eargs[i++] = v;
+                    }
+                }
+            }
+#endif
+            for(j = 0; j < XMLLogger_ArgsQty; j++) {
+                const char* v;
+                if( XMLLogger_Args[j].aliases != NULL &&
+                    ArgsOptionCount(args->args, XMLLogger_Args[j].aliases, &qty) == 0 &&
+                    qty > 0 &&
+                    ArgsOptionValue(args->args, XMLLogger_Args[j].aliases, 0, (const void **)&v) == 0 ) {
+                        eargs[i++] = &extra[x];
+                        extra[x++] = '-';
+                        extra[x++] = '-';
+                        strcpy(&extra[x], XMLLogger_Args[j].name);
+                        x += strlen(XMLLogger_Args[j].name);
+                        eargs[i++] = v;
+                } else if( XMLLogger_Args[j].name != NULL &&
+                           ArgsOptionCount(args->args, XMLLogger_Args[j].name, &qty) == 0 &&
+                           qty > 0 &&
+                           ArgsOptionValue(args->args, XMLLogger_Args[j].name, 0, (const void **)&v) == 0 ) {
+                        eargs[i++] = &extra[x];
+                        extra[x++] = '-';
+                        extra[x++] = '-';
+                        strcpy(&extra[x], XMLLogger_Args[j].name);
+                        x += strlen(XMLLogger_Args[j].name);
+                        eargs[i++] = v;
+                }
+
+            }
+            eargs[i] = NULL;
+
+            if( (rc = SRALoaderFmtExecPrep(fe, args, input, &efile, eargs + i, sizeof(eargs) / sizeof(eargs[0]) - i)) == 0 ) {
+                eargs[0] = efile;
+#if _DEBUGGING
+                DEBUG_MSG(3, ("execv: '%s", efile));
+                for(i = 0; eargs[i] != NULL; i++) {
+                    DEBUG_MSG(3, (" %s", eargs[i]));
+                }
+                DEBUG_MSG(3, ("'\n"));
+#endif
+                execv(efile, (char* const*)eargs);
+                rc = RC(rcExe, rcFormatter, rcExecuting, rcInterface, rcFailed);
+                PLOGERR(klogErr, (klogErr, rc, "front-end exec: $(errno)", "errno=%s", strerror(errno)));
+            }
+        } else {
+            rc_t rc2 = 0;
+            uint64_t spotCount = 0;
+            uint64_t numBases = 0;
+            int64_t bad_spot_count = 0;
+            uint32_t fe_vers = 0;
+            const char* fe_name;
+
+            rc = SRALoaderFmtVersion(fe, &fe_vers, &fe_name);
+            if(rc == 0) {
+                uint32_t i, j;
+                for(i = 0; rc == 0 && i < input->count; i++) {
+                    rc = SRALoaderFmtWriteData(fe, input->blocks[i].count, input->blocks[i].files, &bad_spot_count);
+                    for(j = 0; j < input->blocks[i].count; j++) {
+                        bool eof = true;
+                        if( rc == 0 && SRALoaderFile_IsEof(input->blocks[i].files[j], &eof) == 0 ) {
+                            if( args->_spots_to_run < 0 && eof != true ) {
+                                const char* fn;
+                                SRALoaderFileName(input->blocks[i].files[j], &fn);
+                                rc2 = RC(rcExe, rcFormatter, rcReading, rcFile, rcExcessive);
+                                PLOGERR(klogErr, (klogErr, rc2, "File $(file) not completely parsed", PLOG_S(file), fn));
+                            }
+                        }
+                        SRALoaderFile_Release(input->blocks[i].files[j]);
+                    }
+                    if( GetRCObject(rc) == rcTransfer && GetRCState(rc) == rcDone ) {
+                        /* interrupted by requested spot count */
+                        rc = 0;
+                        break;
+                    }
+                    rc = rc ? rc : rc2;
+                }
+            }
+            /* release object to make sure it free's it's data and commits */
+            rc2 = SRALoaderFmtRelease(fe, &table);
+            rc = rc ? rc : rc2;
+            fe = NULL;
+
+            if( rc == 0 && table != NULL ) {
+                /* Write versions */
+                if (rc == 0) {
+                    rc = WriteSoftwareVersionsMeta(table, argv[0], fe_vers, fe_name);
+                }
+                if (rc == 0) {
+                    rc = SRATableCommit(table);
+                    if( GetRCObject(rc) == (enum RCObject)rcCursor && GetRCState(rc) == rcNotOpen ) {
+                        rc = 0;
+                    }
+                }
+                if (rc == 0) {
+                    rc = SRATableSpotCount(table, &spotCount);
+                    if (rc == 0) {
+                        rc = SRATableBaseCount(table, &numBases);
+                    }
+                    if(rc == 0) {
+                        if(spotCount > 0) {
+                            double percentage = ((double)bad_spot_count) / spotCount;
+                            double allowed = args->_spots_bad_allowed_percentage / 100.0;
+                            if(percentage > allowed ||
+                               (feInput.spots_bad_allowed >= 0 && bad_spot_count > feInput.spots_bad_allowed)) {
+                                rc = RC(rcExe, rcTable, rcClosing, rcData, rcInvalid);
+                                PLOGERR(klogErr, 
+                                        (klogErr, rc,
+                                         "Too many bad spots: "
+                                         "spots: $(spots), bad spots: $(bad_spots), "
+                                         "bad spots percentage: $(percentage), "
+                                         "allowed percentage: $(allowed), "
+                                         "allowed count: $(bad_allowed)",
+                                         "spots=%d,bad_spots=%li,percentage=%.2f,allowed=%.2f,bad_allowed=%li",
+                                         spotCount, bad_spot_count,
+                                         percentage, allowed, feInput.spots_bad_allowed));
+                            }
+                        }
+                    }
+                }
+                if( rc == 0) {
+                    rc = SRATableRelease(table);
+                    table = NULL;
+                }
+            }
+            if(rc == 0) {
+                if(spotCount == 0) {
+                    rc = RC(rcExe, rcFormatter, rcClosing, rcTable, rcEmpty);
+                    LOGERR(klogErr, rc, "0 spots were loaded after successful front-end run");
+                }
+            }
+            rc2 = TArgsLogResultTotal(args, rc, spotCount, numBases, bad_spot_count);
+            rc = rc ? rc : rc2;
+        }
+
+        if( rc != 0 ) {
+            if( table ) {
+                rc_t status = SRATableRelease(table);
+                table = NULL;
+                if(status == 0) {
+                    /* should go away as soon as cursor transactions are in place */
+                    status = SRAMgrDropTable(args->_sra_mgr, true, args->_target);
+                }
+                if(status != 0) {
+                    lastRc = KLogLastErrorCode();
+                    LOGERR(klogInt, status, "cannot DropRun after load failure");
+                }
+            }
+        }
+    }
+
+    /* make sure the error was reported */
+    if( rc != 0 &&
+        rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled) &&
+        rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcTransfer, rcDone)) {
+        if (lastRc == 0) {
+            lastRc = KLogLastErrorCode();
+        }
+        if (rc != lastRc) {
+            LOGERR(klogInt, rc, "no message text available");
+        }
+    }
+    SInput_Release(input);
+    SRALoaderFmtRelease(fe, NULL);
+    TArgsRelease(args);
+    KDirectoryRelease(s_Directory);
+    KXMLMgrRelease(s_XmlMgr);
+
+    return rc;
+}
diff --git a/tools/sra-load/pacbio-fmt.c b/tools/sra-load/pacbio-fmt.c
new file mode 100644
index 0000000..fb51c8c
--- /dev/null
+++ b/tools/sra-load/pacbio-fmt.c
@@ -0,0 +1,141 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+#include <os-native.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+typedef struct PacBioLoaderXmlFmt PacBioLoaderXmlFmt;
+#define SRALOADERFMT_IMPL PacBioLoaderXmlFmt
+#include "loader-fmt.h"
+
+#include "debug.h"
+
+struct PacBioLoaderXmlFmt {
+    SRALoaderFmt dad;
+};
+
+static
+rc_t PacBioLoaderXmlFmt_ExecPrep(const PacBioLoaderXmlFmt *self, const TArgs* args, const SInput* input,
+                                 const char** path, const char* eargs[], size_t max_eargs)
+{
+    rc_t rc = 0;
+    uint32_t i = 0;
+    ERunFileType type = rft_Unknown;
+
+    *path = "pacbio-load";
+
+    /* accept only single file submissions */
+    if( input->count != 1 ) {
+        rc = RC(rcSRA, rcFormatter, rcExecuting, rcParam, input->count ? rcExcessive : rcInsufficient);
+    } else if( input->blocks[0].count != 1 ) {
+        rc = RC(rcSRA, rcFormatter, rcExecuting, rcParam, input->blocks[0].count ? rcExcessive : rcInsufficient);
+    } else if( (rc = SRALoaderFile_FileType(input->blocks[0].files[0], &type)) == 0 && type != rft_PacBio_HDF5 ) {
+        rc = RC(rcSRA, rcFormatter, rcExecuting, rcFormat, rcUnsupported);
+    } else {
+        char resolved[4096];
+        size_t il = string_copy_measure(resolved, sizeof(resolved), args->_input_path);
+        resolved[il++] = '/';
+        if( (rc = SRALoaderFileResolveName(input->blocks[0].files[0], &resolved[il], sizeof(resolved) - il)) == 0 ) {
+            eargs[i] = strdup(resolved);
+            if( eargs[i++] == NULL ) {
+                rc = RC(rcSRA, rcFormatter, rcExecuting, rcMemory, rcExhausted);
+            }
+        }
+        if( rc == 0 ) {
+            eargs[i++] = "-o";
+            eargs[i++] = args->_target;
+
+            if( args->_force_target ) {
+                eargs[i++] = "-f";
+            }
+            eargs[i] = NULL;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t PacBioLoaderXmlFmt_Whack(PacBioLoaderXmlFmt *self, SRATable** table)
+{
+    free(self);
+    return 0;
+}
+
+const char UsageDefaultName[] = "pacbio-loadxml";
+
+static
+rc_t PacBioLoaderXmlFmt_Version (const PacBioLoaderXmlFmt* self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "PacBioXml";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 vtPacBioLoaderXmlFmt =
+{
+    1, 0,
+    PacBioLoaderXmlFmt_Whack,
+    PacBioLoaderXmlFmt_Version,
+    PacBioLoaderXmlFmt_ExecPrep,
+    NULL
+};
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    const PlatformXML* platform;
+
+    if( self == NULL || config == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    } else if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+    } else if( platform->id != SRA_PLATFORM_PACBIO_SMRT ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcInvalid);
+        LOGERR(klogInt, rc, "platform type");
+    } else {
+        PacBioLoaderXmlFmt* fmt;
+
+        *self = NULL;
+        fmt = calloc(1, sizeof(*fmt));
+        if(fmt == NULL) {
+            rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        } else if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&vtPacBioLoaderXmlFmt)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to initialize parent object");
+            PacBioLoaderXmlFmt_Whack(fmt, NULL);
+        } else {
+            *self = &fmt->dad;
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-load/pstring.c b/tools/sra-load/pstring.c
new file mode 100644
index 0000000..6966393
--- /dev/null
+++ b/tools/sra-load/pstring.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/wsradb.h>
+#include <sra/types.h>
+
+#include "common-xml.h"
+#include "pstring.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+rc_t pstring_clear(pstring* str)
+{
+    if( str == NULL ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcParam, rcNull);
+    }
+    str->data[0] = '\0';
+    str->len = 0;
+    return 0;
+}
+
+
+rc_t pstring_copy(pstring* dst, const pstring* src)
+{
+    if( src == NULL ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcParam, rcNull);
+    }
+    return pstring_assign(dst, src->data, src->len);
+}
+
+rc_t pstring_assign(pstring* str, const void* data, const size_t data_sz)
+{
+    if( str == NULL || data == NULL ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcParam, rcNull);
+    } else if( data_sz > sizeof(str->data) - 1 ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcBuffer, rcInsufficient);
+    }
+    memmove(str->data, data, data_sz);
+    str->len = data_sz;
+    str->data[str->len] = '\0';
+    return 0;
+}
+
+rc_t pstring_concat(pstring* dst, const pstring* src)
+{
+    return pstring_append(dst, src->data, src->len);
+}
+
+rc_t pstring_append(pstring* str, const void* data, const size_t data_sz)
+{
+    if( str == NULL || data == NULL ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcParam, rcNull);
+    } else if( str->len + data_sz > sizeof(str->data) - 1 ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcBuffer, rcInsufficient);
+    }
+    memmove(&str->data[str->len], data, data_sz);
+    str->len += data_sz;
+    str->data[str->len] = '\0';
+    return 0;
+}
+
+rc_t pstring_append_chr(pstring* str, char c, size_t count)
+{
+    if( str == NULL ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcParam, rcNull);
+    } else if( str->len + count > sizeof(str->data) - 1 ) {
+        return RC(rcSRA, rcFormatter, rcCopying, rcBuffer, rcInsufficient);
+    }
+    memset(&str->data[str->len], c, count);
+    str->len += count;
+    str->data[str->len] = '\0';
+    return 0;
+}
+
+int pstring_cmp(const pstring* str1, const pstring* str2)
+{
+    int r = str1->len - str2->len;
+    return r ? r : memcmp(str1->data, str2->data, str1->len);
+}
+
+int pstring_strcmp(const pstring* str1, const char* str2)
+{
+    int r = str1->len - strlen(str2);
+    return r ? r : memcmp(str1->data, str2, str1->len);
+}
+
+bool pstring_is_fasta(const pstring* str)
+{
+    if( str != NULL ) {
+        const char* s = str->data;
+        const char* end = s + str->len;
+        while( s != end ) {
+            if( strchr("ACGTNactgn.", *s++) == NULL ) {
+                return false;
+            }
+        }
+        return str->len != 0;
+    }
+    return false;
+}
+
+bool pstring_is_csfasta(const pstring* str)
+{
+    if( str != NULL ) {
+        const char* s = str->data;
+        const char* end = s + str->len;
+
+        if( s == end || strchr("ACGTacgt", *s++) == NULL ) {
+            return false;
+        }
+        while( s != end ) {
+            if( strchr("0123.", *s++) == NULL ) {
+                return false;
+            }
+        }
+        return true;
+    }
+    return false;
+}
+
+rc_t pstring_quality_convert(pstring* qstr, ExperimentQualityEncoding enc, const uint8_t offset, const int8_t min, const int8_t max)
+{
+    rc_t rc = 0;
+    char* c, *end, *next;
+    pstring qbin;
+
+    if( qstr == NULL || min > max ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcParam, rcInvalid);
+    }
+    errno = 0;
+    c = qstr->data;
+    end = qstr->data + qstr->len;
+    pstring_clear(&qbin);
+    if(enc == eExperimentQualityEncoding_Undefined) {
+	if(memchr(c, ' ', qstr->len) != NULL || memchr(c, '\t', qstr->len) != NULL){
+		enc = eExperimentQualityEncoding_Decimal;
+	} else {
+		enc = eExperimentQualityEncoding_Ascii;
+	}
+    }
+
+
+    while( rc == 0 && c < end ) {
+        long q;
+        switch(enc) {
+            case eExperimentQualityEncoding_Decimal:
+            case eExperimentQualityEncoding_Hexadecimal:
+                /* spaced numbers form */
+                errno = 0;
+                q = strtol(c, &next, enc == eExperimentQualityEncoding_Decimal ? 10 : 16);
+                if( q == 0 && c == next ) {
+                    /* no more digits in line */
+		    goto DONE; /*** need do break while loop as well ***/
+                }
+                c = next;
+                break;
+            case eExperimentQualityEncoding_Ascii:
+                /* textual form with offset */
+                q = (long)(*c++) - offset;
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnrecognized);
+                break;
+        }
+        if( rc == 0 ) {
+            if( errno != 0 || q < min || q > max ) {
+                rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcOutofrange);
+            } else {
+                rc = pstring_append_chr(&qbin, (int8_t)q, 1);
+            }
+        }
+    }
+DONE:
+    if( rc == 0 ) {
+        rc = pstring_copy(qstr, &qbin);
+    }
+    return rc;
+}
diff --git a/tools/sra-load/pstring.h b/tools/sra-load/pstring.h
new file mode 100644
index 0000000..67a2142
--- /dev/null
+++ b/tools/sra-load/pstring.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_pstring_
+#define _sra_load_pstring_
+
+#include <klib/rc.h>
+
+typedef struct pstring_struct {
+    uint16_t len;
+    char data[64 * 1024];
+} pstring;
+
+rc_t pstring_clear(pstring* str);
+
+rc_t pstring_copy(pstring* dst, const pstring* src);
+
+rc_t pstring_assign(pstring* str, const void* data, const size_t data_sz);
+
+rc_t pstring_concat(pstring* dst, const pstring* src);
+
+rc_t pstring_append(pstring* str, const void* data, const size_t data_sz);
+
+rc_t pstring_append_chr(pstring* str, char c, size_t count);
+
+int pstring_cmp(const pstring* str1, const pstring* str2);
+
+int pstring_strcmp(const pstring* str1, const char* str2);
+
+bool pstring_is_fasta(const pstring* str);
+
+bool pstring_is_csfasta(const pstring* str);
+
+rc_t pstring_quality_convert(pstring* qstr, ExperimentQualityEncoding enc, const uint8_t offset, const int8_t min, const int8_t max);
+
+#endif /* _sra_load_pstring_ */
diff --git a/tools/sra-load/run-xml.c b/tools/sra-load/run-xml.c
new file mode 100644
index 0000000..320ff4c
--- /dev/null
+++ b/tools/sra-load/run-xml.c
@@ -0,0 +1,487 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <os-native.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "run-xml.h"
+
+void DataBlockFile_Whack(DataBlockFile* self)
+{
+    if( self ) {
+        free(self->filename);
+        free(self->md5_digest);
+        free(self->cc_xml);
+        free(self->cc_path);
+    }
+}
+
+void DataBlock_Whack(DataBlock* self)
+{
+    if( self ) {
+        uint32_t i;
+        for(i = 0; i < self->files_count; i++) {
+            DataBlockFile_Whack(&self->files[i]);
+        }
+        free(self->files);
+        free(self->name);
+        free(self->member_name);
+    }
+}
+
+rc_t RunXML_Whack(const RunXML *cself)
+{
+    if( cself ) {
+        RunXML* self = (RunXML*)cself;
+        uint32_t i = 0;
+        for(i = 0; i < self->datablock_count; i++) {
+            DataBlock_Whack(&self->datablocks[i]);
+        }
+        free(self->datablocks);
+        PlatformXML_Whack(self->attributes.platform);
+        ReadSpecXML_Whack(self->attributes.reads);
+        free(self);
+    }
+    return 0;
+}
+
+static
+const struct {
+    const char* name;
+    ERunFileType type;
+} file_types[] = {
+    /* generic types giving us no useful information about file */
+    { "tab", rft_Unknown },
+    { "454_native", rft_Unknown },
+    { "454_native_seq", rft_Unknown },
+    { "454_native_qual", rft_Unknown },
+    { "Illumina_native", rft_Unknown },
+    { "Illumina_native_fastq", rft_Unknown },
+    { "Illumina_native_scarf", rft_Unknown },
+    { "SOLiD_native", rft_Unknown },
+    { "bam", rft_Unknown },
+    { "sra", rft_Unknown },
+    { "kar", rft_Unknown },
+    /* more specific information about file content */
+    { "fastq", rft_Fastq },
+    { "srf", rft_SRF },
+    { "sff", rft_SFF },
+    { "Helicos_native", rft_HelicosNative },
+    { "Illumina_native_seq", rft_IlluminaNativeSeq },
+    { "Illumina_native_prb", rft_IlluminaNativePrb },
+    { "Illumina_native_int", rft_IlluminaNativeInt },
+    { "Illumina_native_qseq", rft_IlluminaNativeQseq },
+    { "SOLiD_native_csfasta", rft_ABINativeCSFasta },
+    { "SOLiD_native_qual", rft_ABINativeQuality },
+    { "PacBio_HDF5", rft_PacBio_HDF5 }
+};
+
+static
+rc_t parse_FILE(const KXMLNode* FILE, DataBlockFile* file)
+{
+    rc_t rc = 0;
+    char* filetype = NULL, *checksum_method = NULL, *checksum = NULL;
+    char* quality_scoring_system = NULL, *quality_encoding = NULL, *ascii_offset = NULL;
+
+    if( (rc = KXMLNodeReadAttrCStr(FILE, "filename", &file->filename, NULL)) != 0 ||
+        file->filename == NULL || file->filename[0] == '\0' ) {
+        LOGERR(klogErr, rc, "FILE @filename");
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "filetype", &filetype, NULL)) != 0 ||
+        filetype == NULL || filetype[0] == '\0' ) {
+        rc = rc ? rc : RC(rcExe, rcStorage, rcConstructing, rcTag, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @filetype", PLOG_S(file), file->filename));
+
+/* <!-- custom pipeline attributes, not from schema! */
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "upload_id", &file->cc_xml, NULL)) != 0 &&
+               !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @upload_id", PLOG_S(file), file->filename));
+    } else if( file->cc_xml != NULL && file->cc_xml[0] == '\0' ) {
+        rc = RC(rcExe, rcStorage, rcConstructing, rcTag, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @upload_id", PLOG_S(file), file->filename));
+
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "cc_path", &file->cc_path, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @cc_path", PLOG_S(file), file->filename));
+    } else if( ((file->cc_path == NULL || file->cc_path[0] == '\0') && file->cc_xml != NULL) || 
+                (file->cc_path != NULL && file->cc_xml == NULL) ) {
+        rc = RC(rcExe, rcStorage, rcConstructing, rcTag, file->cc_xml ? rcEmpty : rcUnexpected);
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @cc_path", PLOG_S(file), file->filename));
+/* --> */
+
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "quality_scoring_system", &quality_scoring_system, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @quality_scoring_system", PLOG_S(file), file->filename));
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "quality_encoding", &quality_encoding, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @quality_encoding", PLOG_S(file), file->filename));
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "ascii_offset", &ascii_offset, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @ascii_offset", PLOG_S(file), file->filename));
+
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "checksum_method", &checksum_method, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @checksum_method", PLOG_S(file), file->filename));
+    } else if( (rc = KXMLNodeReadAttrCStr(FILE, "checksum", &checksum, NULL)) != 0 &&
+                !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @checksum", PLOG_S(file), file->filename));
+    } else if( checksum_method != NULL && strcasecmp(checksum_method, "MD5") != 0 ) {
+        rc = RC(rcExe, rcStorage, rcConstructing, rcData, rcInvalid);
+        PLOGERR(klogErr, (klogErr, rc, "FILE $(file) @checksum_method", PLOG_S(file), file->filename));
+    } else {
+        rc_t rc1 = 0, rc2 = 0, rc3 = 0, rc4 = 0;
+        if( quality_scoring_system != NULL ) {
+            if( quality_encoding == NULL ) {
+                rc1 = RC(rcExe, rcStorage, rcConstructing, rcParam, rcIncomplete);
+                PLOGERR(klogErr, (klogErr, rc1, "FILE $(file) @quality_encoding is required if @quality_scoring_system is specified",
+                    PLOG_S(file), file->filename));
+            } else if( strcmp(quality_scoring_system, "phred") == 0 ) {
+                file->attr.quality_scoring_system = eExperimentQualityType_Phred;
+            } else if( strcmp(quality_scoring_system, "log-odds") == 0 ) {
+                file->attr.quality_scoring_system = eExperimentQualityType_LogOdds;
+            } else {
+                rc1 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
+                PLOGERR(klogErr, (klogErr, rc1, "FILE $(file) @quality_scoring_system", PLOG_S(file), file->filename));
+            }
+        }
+        if( quality_encoding != NULL ) {
+            if( quality_scoring_system == NULL ) {
+                rc2 = RC(rcExe, rcStorage, rcConstructing, rcParam, rcIncomplete);
+                PLOGERR(klogErr, (klogErr, rc2, "FILE $(file) @quality_scoring_system is required if @quality_encoding is specified",
+                    PLOG_S(file), file->filename));
+            } else if( strcmp(quality_encoding, "ascii") == 0 ) {
+                file->attr.quality_encoding = eExperimentQualityEncoding_Ascii;
+                if( ascii_offset == NULL ) {
+                    rc2 = RC(rcExe, rcStorage, rcConstructing, rcParam, rcIncomplete);
+                    PLOGERR(klogErr, (klogErr, rc2, "FILE $(file) @ascii_offset is required if @quality_encoding is 'ascii'",
+                        PLOG_S(file), file->filename));
+                } else if( strcmp(ascii_offset, "!") == 0 || strcmp(ascii_offset, "@") == 0 ) {
+                    file->attr.ascii_offset = ascii_offset[0];
+                } else {
+                    rc2 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
+                    PLOGERR(klogErr, (klogErr, rc2, "FILE $(file) @ascii_offset", PLOG_S(file), file->filename));
+                }
+            } else if( strcmp(quality_encoding, "decimal") == 0 ) {
+                file->attr.quality_encoding = eExperimentQualityEncoding_Decimal;
+            } else if( strcmp(quality_encoding, "hexadecimal") == 0 ) {
+                file->attr.quality_encoding = eExperimentQualityEncoding_Hexadecimal;
+            } else {
+                rc2 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
+                PLOGERR(klogErr, (klogErr, rc2, "FILE $(file) @quality_encoding", PLOG_S(file), file->filename));
+            }
+        }
+        if( ascii_offset != NULL ) {
+            if( file->attr.quality_encoding != eExperimentQualityEncoding_Ascii ) {
+                PLOGMSG(klogWarn, (klogWarn, "FILE $(file) @ascii_offset ignored since @quality_encoding is $(reason)",
+                    PLOG_2(PLOG_S(reason),PLOG_S(file)),
+                    file->attr.quality_encoding == eExperimentQualityEncoding_Undefined ? "undefined" : "not ascii", file->filename));
+            }
+        }
+        if( checksum_method == NULL && checksum != NULL ) {
+            PLOGMSG(klogWarn, (klogWarn, "FILE $(file) @checksum ignored since @checksum_method is not defined", PLOG_S(file), file->filename));
+            free(checksum);
+            checksum = NULL;
+        }
+        if( checksum != NULL ) {
+            if( strlen(checksum) != (16 * 2) ) {
+                /* MD5 sum is 16 bytes in hex format (2 hex digits per byte) */
+                rc3 = RC(rcExe, rcStorage, rcConstructing, rcData, rcUnrecognized);
+                PLOGERR(klogErr, (klogErr, rc3, "FILE $(file) MD5 @checksum", PLOG_S(file), file->filename));
+            } else if( (file->md5_digest = malloc(16 * sizeof(uint8_t))) == NULL ) {
+                rc3 = RC(rcExe, rcStorage, rcConstructing, rcMemory, rcExhausted);
+                PLOGERR(klogErr, (klogErr, rc3, "FILE $(file) MD5 @checksum allocation", PLOG_S(file), file->filename));
+            } else {
+                int i = 0;
+                char digit[3];
+                unsigned int xdig;
+                
+                digit[2] = '\0';
+                for(i = 0; rc3 == 0 && i < 16; i++) {
+                    digit[0] = tolower(checksum[2 * i]);
+                    digit[1] = tolower(checksum[2 * i + 1]);
+                    if(!isxdigit(digit[0]) || !isxdigit(digit[1])) {
+                        rc3 = RC(rcExe, rcStorage, rcConstructing, rcData, rcInvalid);
+                        PLOGERR(klogErr, (klogErr, rc3, "FILE $(file) MD5 @checksum $(digits)",
+                                 PLOG_2(PLOG_S(file),PLOG_S(digits)), file->filename, digit));
+                    } else {
+                        sscanf(digit, "%x", &xdig);
+                        file->md5_digest[i] = xdig;
+                    }
+                }
+            }
+        }
+        if( filetype != NULL ) {
+            int i;
+            for(i = 0; i < sizeof(file_types) / sizeof(file_types[0]); i++) {
+                if( strcmp(filetype, file_types[i].name) == 0 ) {
+                    file->attr.filetype = file_types[i].type;
+                    break;
+                }
+            }
+            if( file->attr.filetype == 0 ) {
+                rc4 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
+                PLOGERR(klogErr, (klogErr, rc4, "FILE $(file) @filetype '$(type)'",
+                         PLOG_2(PLOG_S(file),PLOG_S(type)), file->filename, filetype));
+            }
+        }
+        rc = rc1 ? rc1 : (rc2 ? rc2 : (rc3 ? rc3 : rc4));
+    }
+    free(filetype);
+    free(checksum_method);
+    free(checksum);
+    free(quality_scoring_system);
+    free(quality_encoding);
+    free(ascii_offset);
+    return rc;
+}
+
+static
+rc_t parse_DATA_BLOCK(const KXMLNode* DATA_BLOCK, DataBlock* datablock)
+{
+    rc_t rc = 0;
+    const KXMLNodeset* FILES;
+
+    rc = KXMLNodeReadAttrCStr(DATA_BLOCK, "name", &datablock->name, NULL);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "DATA_BLOCK @name");
+        return rc;
+    }
+    rc = KXMLNodeReadAttrCStr(DATA_BLOCK, "member_name", &datablock->member_name, NULL);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "DATA_BLOCK @member_name");
+        return rc;
+    }
+    if( datablock->member_name != NULL && strcasecmp(datablock->member_name, "default") == 0 ) {
+        datablock->member_name[0] = '\0';
+    }
+    datablock->serial = ~0; /* file w/o serial pushed to end of list */
+    rc = KXMLNodeReadAttrAsU32(DATA_BLOCK, "serial", &datablock->serial);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "DATA_BLOCK @serial");
+        return rc;
+    }
+    datablock->sector = -1;
+    rc = KXMLNodeReadAttrAsU64(DATA_BLOCK, "sector", (uint64_t*)&datablock->sector);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "DATA_BLOCK @sector");
+        return rc;
+    }
+    datablock->region = -1;
+    rc = KXMLNodeReadAttrAsU64(DATA_BLOCK, "region", (uint64_t*)&datablock->region);
+    if( rc != 0 && !(GetRCObject(rc) == (enum RCObject)rcAttr && GetRCState(rc) == rcNotFound) ) {
+        LOGERR(klogErr, rc, "DATA_BLOCK @region");
+        return rc;
+    }
+
+    if( (rc = KXMLNodeOpenNodesetRead(DATA_BLOCK, &FILES, "FILES/FILE")) == 0) {
+        if( (rc = KXMLNodesetCount(FILES, &datablock->files_count)) != 0) {
+            LOGERR(klogErr, rc, "reading FILES/FILE node(s)");
+        } else if( datablock->files_count < 1 ) {
+            rc = RC(rcExe, rcStorage, rcConstructing, rcData, rcIncomplete);
+            LOGERR(klogErr, rc, "FILES/FILE at least one node is required");
+        } else if( (datablock->files = calloc(datablock->files_count, sizeof(*datablock->files))) == NULL ) {
+                rc = RC(rcExe, rcStorage, rcConstructing, rcMemory, rcExhausted);
+                LOGERR(klogErr, rc, "allocating FILES/FILE");
+        } else {
+            uint32_t i = 0;
+            for(i = 0; rc == 0 && i < datablock->files_count; i++) {
+                const KXMLNode *FILE = NULL;
+                if( (rc = KXMLNodesetGetNodeRead(FILES, &FILE, i)) == 0 ) {
+                    rc = parse_FILE(FILE, &datablock->files[i]);
+                    KXMLNodeRelease(FILE);
+                }
+                if( rc != 0 ) {
+                    PLOGERR(klogErr, (klogErr, rc, "reading FILES/FILE $(i)", PLOG_U32(i), i));
+                }
+            }
+        }
+        KXMLNodesetRelease(FILES);
+    }
+    return rc;
+}
+
+rc_t RunXML_Make(RunXML** rslt, const KXMLNode* RUN)
+{
+    rc_t rc = 0;
+    const KXMLNodeset* nset = NULL;
+    RunXML* obj = NULL;
+    uint32_t p_spot_length = 0, r_spot_length = 0;
+
+    if(rslt == NULL || RUN == NULL) {
+        return RC(rcExe, rcStorage, rcConstructing, rcParam, rcNull);
+    }
+    *rslt = NULL;
+    obj = calloc(1, sizeof(*obj));
+    if( obj == NULL ) {
+        rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    } else {
+        if( (rc = PlatformXML_Make(&obj->attributes.platform, RUN, &p_spot_length)) != 0 ) {
+            if( GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            } else {
+                LOGERR(klogErr, rc, "RUN/PLATFORM");
+            }
+        }
+        if( rc == 0 && (rc = ReadSpecXML_Make(&obj->attributes.reads, RUN, "SPOT_DESCRIPTOR", &r_spot_length)) != 0 ) {
+            if( GetRCState(rc) == rcNotFound ) {
+                rc = 0;
+            } else {
+                LOGERR(klogErr, rc, "RUN/.../READ_SPEC");
+            }
+        }
+        obj->attributes.spot_length = r_spot_length ? r_spot_length : p_spot_length;
+        if( rc == 0 && p_spot_length != 0 && r_spot_length != 0 && p_spot_length != r_spot_length ) {
+            PLOGMSG(klogWarn, (klogWarn,
+                "in RUN sequence length (cycle count) in PLATFORM $(p) differ"
+                " from SPOT_LENGTH $(l) in SPOT_DECODE_SPEC",
+                PLOG_2(PLOG_U32(p),PLOG_U32(l)), p_spot_length, r_spot_length));
+        }
+    }
+    if( rc == 0 ) {
+        if( (rc = KXMLNodeOpenNodesetRead(RUN, &nset, "DATA_BLOCK")) == 0) {
+            if( (rc = KXMLNodesetCount(nset, &obj->datablock_count)) == 0 && obj->datablock_count > 0 ) {
+                obj->datablocks = calloc(obj->datablock_count, sizeof(*obj->datablocks));
+                if( obj->datablocks == NULL ) {
+                    rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                } else {
+                    uint32_t i = 0;
+                    for(i = 0; rc == 0 && i < obj->datablock_count; i++) {
+                        const KXMLNode *DATA_BLOCK = NULL;
+                        if( (rc = KXMLNodesetGetNodeRead(nset, &DATA_BLOCK, i)) == 0 ) {
+                            rc = parse_DATA_BLOCK(DATA_BLOCK, &obj->datablocks[i]);
+                            KXMLNodeRelease(DATA_BLOCK);
+                        }
+                        if( rc != 0 ) {
+                            PLOGERR(klogErr, (klogErr, rc, "reading DATA_BLOCK $(i)", PLOG_U32(i), i));
+                        }
+                    }
+                    if( rc == 0 ) {
+                        /* serial ascending sort */
+                        bool swapped = true;
+                        while(swapped) {
+                            swapped = false;
+                            for(i = 1; i < obj->datablock_count; i++) {
+                                if( obj->datablocks[i].serial < obj->datablocks[i - 1].serial ) {
+                                    DataBlock db;
+                                    memmove(&db, &obj->datablocks[i], sizeof(db));
+                                    memmove(&obj->datablocks[i], &obj->datablocks[i - 1], sizeof(db));
+                                    memmove(&obj->datablocks[i - 1], &db, sizeof(db));
+                                    swapped = true;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            KXMLNodesetRelease(nset);
+        } else {
+            LOGERR(klogErr, rc, "DATA_BLOCK node(s)");
+        }
+    }
+
+    if( rc == 0 ) {
+        if( (rc = KXMLNodeOpenNodesetRead(RUN, &nset, "RUN_ATTRIBUTES/RUN_ATTRIBUTE")) == 0) {
+            uint32_t num_attr = 0;
+            if( (rc = KXMLNodesetCount(nset, &num_attr)) == 0) {
+                uint32_t i = 0;
+                for(i = 0; rc == 0 && i < num_attr; i++) {
+                    const KXMLNode* RUN_ATTRIBUTE = NULL;
+                    if( (rc = KXMLNodesetGetNodeRead(nset, &RUN_ATTRIBUTE, i)) == 0 ) {
+                        const KXMLNode* TAG = NULL, *VALUE = NULL;
+                        if( (rc = KXMLNodeGetFirstChildNodeRead(RUN_ATTRIBUTE, &TAG, "TAG")) == 0 && 
+                            (rc = KXMLNodeGetFirstChildNodeRead(RUN_ATTRIBUTE, &VALUE, "VALUE")) == 0 ) {
+                            char* tag = NULL, *value = NULL;
+                            if( (rc = KXMLNodeReadCStr(TAG, &tag, NULL)) == 0 &&
+                                (rc = KXMLNodeReadCStr(VALUE, &value, NULL)) == 0 ) {
+                                if( strcasecmp(tag, "read_name_barcode_proc_directive") == 0 ) {
+                                    if( value == NULL || value[0] == '\0' ) {
+                                        obj->attributes.barcode_rule = eBarcodeRule_not_set;
+                                    } else if (strcasecmp(value, "interpret_as_spotgroup") == 0 || strcasecmp(value, "use_file_spot_name") == 0) {
+                                        obj->attributes.barcode_rule = eBarcodeRule_use_file_spot_name;
+                                    } else if (strcasecmp(value, "use_table_in_experiment") == 0) {
+                                        obj->attributes.barcode_rule = eBarcodeRule_use_table_in_experiment;
+                                    } else if(strcasecmp(value, "ignore") == 0) {
+                                        obj->attributes.barcode_rule = eBarcodeRule_ignore_barcode;
+                                    } else {
+                                        rc = RC(rcSRA, rcFormatter, rcParsing, rcAttr, rcUnrecognized);
+                                        PLOGERR(klogErr, (klogErr, rc, "RUN_ATTRIBUTE['$(t)'] VALUE='$(v)'", PLOG_2(PLOG_S(t),PLOG_S(v)), tag, value));
+                                    }
+                                } else if( strcasecmp(tag, "quality_scoring_system") == 0 ) {
+                                    if( value != NULL )  {
+                                        if( strcasecmp(value, "phred") == 0 ) {
+                                            obj->attributes.quality_type = eExperimentQualityType_Phred;
+                                        } else if( strcasecmp(value, "logodds") == 0 || strcasecmp(value, "log odds") == 0 ) {
+                                            obj->attributes.quality_type = eExperimentQualityType_LogOdds;
+                                        } else if( strcasecmp(value, "other") == 0 ) {
+                                            obj->attributes.quality_type = eExperimentQualityType_Other;
+                                        }
+                                    }
+                                    if( obj->attributes.quality_type == eExperimentQualityType_Undefined ) {
+                                        rc = RC(rcSRA, rcFormatter, rcParsing, rcAttr, rcUnrecognized);
+                                        PLOGERR(klogErr, (klogErr, rc, "RUN_ATTRIBUTE['$(t)'] VALUE='$(v)'", PLOG_2(PLOG_S(t),PLOG_S(v)), tag, value));
+                                    }
+                                } else if( strcasecmp(tag, "quality_book_char") == 0 ) {
+                                    if( value != NULL && value[0] != '\0' ) {
+                                        obj->attributes.quality_offset = value[0];
+                                    } else {
+                                        PLOGMSG(klogWarn, (klogWarn, "RUN_ATTRIBUTE['$(t)'] VALUE='$(v)' ignored", PLOG_2(PLOG_S(t),PLOG_S(v)), tag, value));
+                                    }
+                                }
+                            } else {
+                                PLOGERR(klogErr, (klogErr, rc, "RUN_ATTRIBUTE[$(i)]/VALUE", PLOG_U32(i), i));
+                            }
+                            free(value);
+                            free(tag);
+                        } else {
+                            PLOGERR(klogErr, (klogErr, rc, "RUN_ATTRIBUTE[$(i)]", PLOG_U32(i), i));
+                        }
+                        KXMLNodeRelease(VALUE);
+                        KXMLNodeRelease(TAG);
+                        KXMLNodeRelease(RUN_ATTRIBUTE);
+                    } else {
+                        PLOGERR(klogErr, (klogErr, rc, "RUN_ATTRIBUTE $(i)", PLOG_U32(i), i));
+                    }
+                }
+            }
+            KXMLNodesetRelease(nset);
+        } else if( GetRCState(rc) == rcNotFound ) {
+            rc = 0;
+        } else {
+            LOGERR(klogErr, rc, "RUN_ATTRIBUTES/RUN_ATTRIBUTE node(s)");
+        }
+    }
+    if (rc == 0) {
+        *rslt = obj;
+    } else {
+        RunXML_Whack(obj);
+    }
+    return rc;
+}
diff --git a/tools/sra-load/run-xml.h b/tools/sra-load/run-xml.h
new file mode 100644
index 0000000..b46172b
--- /dev/null
+++ b/tools/sra-load/run-xml.h
@@ -0,0 +1,90 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_tools_run_xml_
+#define _sra_tools_run_xml_
+
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#include "common-xml.h"
+
+typedef enum ERunFileType_enum {
+    rft_Unknown = 1,
+    rft_Fastq,
+    rft_SRF,
+    rft_SFF,
+    rft_HelicosNative,
+    rft_IlluminaNativeSeq,
+    rft_IlluminaNativePrb,
+    rft_IlluminaNativeInt,
+    rft_IlluminaNativeQseq,
+    rft_ABINativeCSFasta,
+    rft_ABINativeQuality,
+    rft_PacBio_HDF5
+} ERunFileType;
+
+typedef struct DataBlockFileAttr_struct {
+    ERunFileType filetype;
+    ExperimentQualityType quality_scoring_system;
+    ExperimentQualityEncoding quality_encoding;
+    uint8_t ascii_offset;
+} DataBlockFileAttr;
+
+typedef struct DataBlockFile_struct {
+    DataBlockFileAttr attr;
+    char* filename;
+    uint8_t* md5_digest;
+    char* cc_xml;
+    char* cc_path;
+} DataBlockFile;
+
+typedef struct DataBlock_struct {
+    char* name;
+    char* member_name;
+    int64_t sector;
+    int64_t region;
+    uint32_t serial;
+    uint32_t files_count;
+    DataBlockFile* files;
+} DataBlock;
+
+typedef struct RunXML {
+    uint32_t datablock_count;
+    DataBlock* datablocks;
+    /* known/used run attribuites */
+    RunAttributes attributes;
+} RunXML;
+
+void DataBlockFile_Whack(DataBlockFile* self);
+
+void DataBlock_Whack(DataBlock* self);
+
+rc_t RunXML_Make(RunXML **rslt, const KXMLNode *RUN);
+
+rc_t RunXML_Whack(const RunXML *cself);
+
+#endif /* _sra_tools_run_xml_ */
diff --git a/tools/sra-load/sff-fmt.c b/tools/sra-load/sff-fmt.c
new file mode 100644
index 0000000..c4eb22f
--- /dev/null
+++ b/tools/sra-load/sff-fmt.c
@@ -0,0 +1,491 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+#include <sra/sff-file.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+typedef struct SFFLoaderFmt SFFLoaderFmt;
+
+#define SRALOADERFMT_IMPL SFFLoaderFmt
+#include "loader-fmt.h"
+
+#include "writer-454.h"
+#include "writer-ion-torrent.h"
+#include "debug.h"
+
+#include <byteswap.h>
+
+struct SFFLoaderFmt {
+    SRALoaderFmt dad; /* base type -> must be first in struct */ 
+    const SRAWriter454* w454;
+    const SRAWriterIonTorrent* wIonTorrent;
+    bool skip_signal;
+    uint32_t curr_read_number;
+
+    /* file buffer data */
+    const char* file_name;
+    const uint8_t* file_buf;
+    size_t file_advance;
+    uint64_t index_correction; /* used in case of concatinated files */
+
+    /* spot data */
+    SFFCommonHeader header;
+    pstring flow_chars;
+    pstring key_seq;
+
+    SFFReadHeader read_header;
+    pstring name;
+    pstring signal;
+    pstring position;
+    pstring read;
+    pstring quality;
+};
+
+static
+rc_t SFFLoaderFmt_ReadBlock(SFFLoaderFmt* self, const SRALoaderFile* file, size_t size, const char* location, bool silent)
+{
+    size_t read = 0;
+    rc_t rc = SRALoaderFileRead(file, self->file_advance, size, (const void**)&self->file_buf, &read);
+    self->file_advance = 0;
+    if( rc == 0 && (size > 0 && (self->file_buf == NULL || read < size)) ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    }
+    if( rc != 0 && !silent ) {
+        SRALoaderFile_LOG(file, klogErr, rc, "$(l), needed $(needed) got $(got) bytes",
+                PLOG_3(PLOG_S(l),PLOG_U32(needed),PLOG_U32(got)), location, size, read);
+    }
+    return rc;
+}
+
+static
+rc_t SFFLoaderFmtReadCommonHeader(SFFLoaderFmt* self, const SRALoaderFile *file)
+{
+    rc_t rc = 0;
+    bool skiped_idx_pad = false;
+    uint16_t head_sz;
+    SFFCommonHeader prev_head;
+    pstring prev_flow_chars;
+    pstring prev_key_seq;
+
+    if( (rc = SRALoaderFile_Offset(file, &self->index_correction)) != 0 ) {
+        SRALoaderFile_LOG(file, klogErr, rc, "Reading initial file position", NULL);
+        return rc;
+    }
+SkipIndexPad:
+    self->index_correction += self->file_advance;
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, SFFCommonHeader_size, NULL, true)) != 0) {
+        SRALoaderFile_LOG(file, klogErr, rc, "common header, needed $(needed) bytes",
+                          PLOG_U32(needed), SFFCommonHeader_size);
+        return rc;
+    }
+    if( self->header.magic_number != 0 ) {
+        /* next file in stream, remember prev to sync to each */
+        memmove(&prev_head, &self->header, sizeof(SFFCommonHeader));
+        pstring_copy(&prev_flow_chars, &self->flow_chars);
+        pstring_copy(&prev_key_seq, &self->key_seq);
+    } else {
+        prev_head.magic_number = 0;
+        prev_head.index_length = 0;
+    }
+
+    memmove(&self->header, self->file_buf, SFFCommonHeader_size);
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    self->header.magic_number = bswap_32(self->header.magic_number);
+    self->header.version = bswap_32(self->header.version);
+    self->header.index_offset = bswap_64(self->header.index_offset);
+    self->header.index_length = bswap_32(self->header.index_length);
+    self->header.number_of_reads = bswap_32(self->header.number_of_reads);
+    self->header.header_length = bswap_16(self->header.header_length);
+    self->header.key_length = bswap_16(self->header.key_length);
+    self->header.num_flows_per_read = bswap_16(self->header.num_flows_per_read);
+#endif
+
+    if( self->header.magic_number != (('.'<<24)|('s'<<16)|('f'<<8)|('f'<<0)) ) {
+        if( !skiped_idx_pad && prev_head.magic_number != 0 ) {
+            /* possible concatination of 2 files with index at EOF and padded to 8 bytes with header values not padded,
+               try skipping padding and reread */
+            uint32_t pad = 8 - prev_head.index_length % 8;
+            if( pad != 0 ) {
+                self->file_advance += pad;
+                DEBUG_MSG(5, ("%s: trying to skip over %u bytes index section padding\n", self->file_name, pad));
+                skiped_idx_pad = true;
+                goto SkipIndexPad;
+            }
+        }
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnrecognized);
+        SRALoaderFile_LOG(file, klogErr, rc, "magic number: $(m)", PLOG_U32(m), self->header.magic_number);
+        return rc;
+    }
+    if( self->header.version != 1 ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcBadVersion);
+        SRALoaderFile_LOG(file, klogErr, rc, "format version $(v)", PLOG_U32(v), self->header.version);
+        return rc;
+    }
+    if( self->header.flowgram_format_code != SFFFormatCodeUI16Hundreths ) {
+        /* NOTE: add a case here if flowgram coding gets new version to support different */
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnsupported);
+        SRALoaderFile_LOG(file, klogErr, rc, "common header flowgram format code", NULL);
+        return rc;
+    }
+    if( self->header.index_length % 8 != 0 ) {
+        DEBUG_MSG(5, ("%s: index_length field value is not 8 byte padded: %u\n", self->file_name, self->header.index_length));
+    }
+    head_sz = SFFCommonHeader_size + self->header.num_flows_per_read + self->header.key_length;
+    head_sz += (head_sz % 8) ? (8 - (head_sz % 8)) : 0;
+    if( head_sz != self->header.header_length ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcFormat, rcInvalid);
+        SRALoaderFile_LOG(file, klogErr, rc, "header length $(h) <> $(s) ", PLOG_2(PLOG_U16(h),PLOG_U16(s)),
+                          self->header.header_length, head_sz);
+        return rc;
+    }
+    /* read flow chars and key */
+    self->file_advance = SFFCommonHeader_size;
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, head_sz - SFFCommonHeader_size, "common header", false)) != 0) {
+        return rc;
+    }
+    self->file_advance = head_sz - SFFCommonHeader_size;
+
+    if( (rc = pstring_assign(&self->flow_chars, self->file_buf, self->header.num_flows_per_read)) != 0 ||
+        (rc = pstring_assign(&self->key_seq, self->file_buf + self->header.num_flows_per_read, self->header.key_length)) != 0 ) {
+        SRALoaderFile_LOG(file, klogErr, rc, "reading flows/key sequence", NULL);
+        return rc;
+    }
+    if( prev_head.magic_number != 0 ) {
+        /* next file's common header must match previous file's common header, partially */
+        if( prev_head.key_length != self->header.key_length ||
+            prev_head.num_flows_per_read != self->header.num_flows_per_read ||
+            pstring_cmp(&prev_flow_chars, &self->flow_chars) != 0 ||
+            pstring_cmp(&prev_key_seq, &self->key_seq) != 0 ) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInconsistent);
+                SRALoaderFile_LOG(file, klogErr, rc, "previous file common header differ in flows/key sequence", NULL);
+        }
+    }
+    if( rc == 0 ) {
+        if( self->w454 ) {
+            rc = SRAWriter454_WriteHead(self->w454, &self->flow_chars, &self->key_seq);
+        } else {
+            rc = SRAWriterIonTorrent_WriteHead(self->wIonTorrent, &self->flow_chars, &self->key_seq);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SFFLoaderFmtReadDataHeader(SFFLoaderFmt* self, const SRALoaderFile* file)
+{
+    rc_t rc = 0;
+    uint16_t head_sz = 0;
+
+    /* Make sure the entire fixed portion of Read Header section is in the file buffer window */
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, SFFReadHeader_size, "read header", false)) != 0 ) {
+        return rc;
+    }
+    memmove(&self->read_header, self->file_buf, SFFReadHeader_size);
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    self->read_header.header_length = bswap_16(self->read_header.header_length);
+    self->read_header.name_length = bswap_16(self->read_header.name_length);
+    self->read_header.number_of_bases = bswap_32(self->read_header.number_of_bases);
+    self->read_header.clip_quality_left = bswap_16(self->read_header.clip_quality_left);
+    self->read_header.clip_quality_right = bswap_16(self->read_header.clip_quality_right);
+    self->read_header.clip_adapter_left = bswap_16(self->read_header.clip_adapter_left);
+    self->read_header.clip_adapter_right = bswap_16(self->read_header.clip_adapter_right);
+#endif
+
+    head_sz = SFFReadHeader_size + self->read_header.name_length;
+    head_sz += (head_sz % 8) ? (8 - (head_sz % 8)) : 0;
+    if( head_sz != self->read_header.header_length ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcFormat, rcInvalid);
+        SRALoaderFile_LOG(file, klogErr, rc, "read header length $(h) != $(s)", PLOG_2(PLOG_U16(h),PLOG_U16(s)),
+                          self->header.header_length, head_sz);
+        return rc;
+    }
+    /* read name */
+    self->file_advance = SFFReadHeader_size;
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, head_sz - SFFReadHeader_size, "read header", false)) != 0) {
+        return rc;
+    }
+    self->file_advance = head_sz - SFFReadHeader_size;
+
+    if( (rc = pstring_assign(&self->name, self->file_buf, self->read_header.name_length)) != 0 ) {
+        SRALoaderFile_LOG(file, klogErr, rc, "copying read name", NULL);
+    }
+    return rc;
+}
+
+static
+rc_t SFFLoaderFmtReadData(SFFLoaderFmt* self, const SRALoaderFile* file)
+{
+    rc_t rc = 0;
+    uint32_t i;
+
+    /* calc signal chunk size */
+    size_t signal_sz = self->header.num_flows_per_read * sizeof(uint16_t);
+    /* plus position, read, quality */
+    size_t sz = signal_sz + self->read_header.number_of_bases * 3;
+    /* + padding */
+    sz += (sz % 8) ? (8 - (sz % 8)) : 0;
+
+    /* adjust the buffer window to full data block size */
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, sz, "read data", false)) != 0 ) { 
+        return rc;
+    }
+    self->file_advance = sz;
+
+    if( !self->skip_signal ) {
+        rc = pstring_assign(&self->signal, self->file_buf, signal_sz);
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+        if( rc == 0 ) {
+            uint16_t* sig = (uint16_t*)self->signal.data;
+            for(i = 0; i < self->header.num_flows_per_read; i++) {
+                sig[i] = bswap_16(sig[i]);
+            }
+        }
+#endif
+    }
+
+    if( rc == 0 ) {
+        const uint8_t* pos = self->file_buf + signal_sz;
+
+        if( !self->skip_signal ) {
+            INSDC_coord_one *p;
+            /* reset buffer to proper size */
+            pstring_clear(&self->position);
+            rc = pstring_append_chr(&self->position, 0, self->read_header.number_of_bases * sizeof(*p));
+            p = (INSDC_coord_one*)&self->position.data[0];
+            p[0] = pos[0];
+            for(i = 1; i < self->read_header.number_of_bases; i++) {
+                p[i] = p[i - 1] + pos[i];
+            }
+        }
+        if( rc == 0 ) {
+            pos += self->read_header.number_of_bases;
+            rc = pstring_assign(&self->read, pos, self->read_header.number_of_bases);
+            /*for(i = 0; i< self->read.len; i++ ) {
+                self->read.data[i] = tolower(self->read.data[i]);
+            }*/
+        }
+        if( rc == 0 ) {
+            pos += self->read_header.number_of_bases;
+            rc = pstring_assign(&self->quality, pos, self->read_header.number_of_bases);
+        }
+    }
+    if( rc != 0 ) {
+        SRALoaderFile_LOG(file, klogErr, rc, "copying read data", NULL);
+    }
+    return rc;
+}
+
+/**
+ * SFFLoaderFmtSkipIndex - skip through indexes section if current position in file is indexes offset from header
+ */
+static
+rc_t SFFLoaderFmtSkipIndex(SFFLoaderFmt* self, const SRALoaderFile* file)
+{
+    rc_t rc = 0;
+    uint64_t pos;
+    /* advance whatever and read file position */
+    if( (rc = SFFLoaderFmt_ReadBlock(self, file, 0, "index", false)) == 0 &&
+        (rc = SRALoaderFile_Offset(file, &pos)) == 0 ) {
+        if( pos == (self->header.index_offset + self->index_correction) ) {
+            /* skip */
+            size_t leftover;
+            self->file_advance += self->header.index_length;
+            DEBUG_MSG(5, ("%s: indexes skipped at 0x%016X, %u bytes\n",
+                          self->file_name, pos, self->header.index_length));
+            /* try to get more data while skipping index */
+            if( (rc = SRALoaderFileRead(file, self->file_advance, 16, (const void**)&self->file_buf, &leftover)) == 0 ) {
+                if( self->file_buf != NULL && leftover < 8 ) {
+                    /* smth short is read! possible last chunk in file was index and it was padded to 8 bytes,
+                       while in header index_length field value was not padded */
+                    if( leftover == (8 - self->header.index_length % 8) ) {
+                        /* read out padding */
+                        if( (rc = SRALoaderFileRead(file, leftover, 0, (const void**)&self->file_buf, &leftover)) == 0 ) {
+                            if( self->file_buf == NULL ) {
+                                /* ok EOF! */
+                                DEBUG_MSG(5, ("%s: ignored extra %u bytes index section padding\n",
+                                              self->file_name, 8 - self->header.index_length % 8));
+                            }
+                        }
+                    }
+                }
+            }
+            self->file_advance = 0;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SFFLoaderFmtWriteDataFile(SFFLoaderFmt* self, const SRALoaderFile* file)
+{
+    rc_t rc = 0;
+
+    while( rc == 0 ) {
+        if( self->curr_read_number == 0 ) {
+            if( (rc = SFFLoaderFmtReadCommonHeader(self, file)) == 0 ) {
+                DEBUG_MSG (5, ("%s: Common header ok: %u reads\n", self->file_name, self->header.number_of_reads));
+                DEBUG_MSG (8, ("%s: flow_chars: [%hu] %s\n", self->file_name, self->header.num_flows_per_read, self->flow_chars.data));
+                DEBUG_MSG (8, ("%s: key_seq: [%hu] %s\n", self->file_name, self->header.key_length, self->key_seq.data));
+            } else if( GetRCObject(rc) == (enum RCObject)rcData && GetRCState(rc) == rcIgnored ) {
+                rc = 0;
+                break;
+            }
+        }
+        if( rc == 0 && self->header.number_of_reads != 0 && 
+            (rc = SFFLoaderFmtSkipIndex(self, file)) == 0 &&
+            (rc = SFFLoaderFmtReadDataHeader(self, file)) == 0 &&
+            (rc = SFFLoaderFmtReadData(self, file)) == 0 ) {
+            if( self->w454 ) {
+                rc = SRAWriter454_WriteRead(self->w454, file, &self->name, &self->read, &self->quality,
+                                         self->skip_signal ? NULL : &self->signal,
+                                         self->skip_signal ? NULL : &self->position,
+                                         self->read_header.clip_quality_left, self->read_header.clip_quality_right,
+                                         self->read_header.clip_adapter_left, self->read_header.clip_adapter_right);
+            } else {
+                rc = SRAWriterIonTorrent_WriteRead(self->wIonTorrent, file, &self->name, &self->read, &self->quality,
+                         self->skip_signal ? NULL : &self->signal,
+                         self->skip_signal ? NULL : &self->position,
+                         self->read_header.clip_quality_left, self->read_header.clip_quality_right,
+                         self->read_header.clip_adapter_left, self->read_header.clip_adapter_right);
+            }
+            if( rc == 0 ) {
+                ++self->curr_read_number;
+            }
+        }
+        if( rc != 0 && (GetRCObject(rc) != rcTransfer && GetRCState(rc) != rcDone) ) {
+            SRALoaderFile_LOG(file, klogErr, rc, "on or about read #$(i)", PLOG_U32(i), self->curr_read_number + 1);
+        } else if( self->curr_read_number == self->header.number_of_reads ) {
+            DEBUG_MSG(5, ("%s: done loading declared %u reads\n", self->file_name, self->curr_read_number));
+            self->curr_read_number = 0;
+            /* will skip indexes if they are at eof */
+            if( (rc = SFFLoaderFmtSkipIndex(self, file)) == 0 ) {
+                /* This should be the end of file and/or beginning of next */
+                if( (rc = SFFLoaderFmt_ReadBlock(self, file, 0, "EOF", false)) == 0 ) {
+                    if( self->file_buf == NULL ) {
+                        DEBUG_MSG(5, ("%s: EOF detected\n", self->file_name));
+                        self->index_correction = 0;
+                        break;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+const char UsageDefaultName[] = "sff-load";
+
+static
+rc_t SFFLoaderFmtVersion( const SFFLoaderFmt*self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "SFF";
+    return 0;
+}
+
+static
+rc_t SFFLoaderFmtDestroy(SFFLoaderFmt* self, SRATable** table)
+{
+    SRAWriter454_Whack(self->w454, table);
+    SRAWriterIonTorrent_Whack(self->wIonTorrent, table);
+    free(self);
+    return 0;
+}
+
+static
+rc_t SFFLoaderFmtWriteData(SFFLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t idx = 0;
+
+    for(idx = 0; rc == 0 && idx < argc; idx ++) {
+        if( (rc = SRALoaderFileName(argv[idx], &self->file_name)) == 0 ) {
+            self->curr_read_number = 0;
+            rc = SFFLoaderFmtWriteDataFile(self, argv[idx]);
+        }
+    }
+    return rc;
+}
+
+static SRALoaderFmt_vt_v1 vtSFFLoaderFmt = 
+{
+    1,
+    0,
+    SFFLoaderFmtDestroy,
+    SFFLoaderFmtVersion,
+    NULL,
+    SFFLoaderFmtWriteData
+};
+
+rc_t SFFLoaderFmtMake(SRALoaderFmt** self, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SFFLoaderFmt* obj = NULL;
+    const PlatformXML* platform;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcSelf, rcNull);
+    }
+    *self = NULL;
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+        return rc;
+    }
+    obj = calloc(1, sizeof(SFFLoaderFmt));
+    if(obj == NULL) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    }
+    if( (rc = SRALoaderFmtInit(&obj->dad, (const SRALoaderFmt_vt*)&vtSFFLoaderFmt)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    } else {
+        if( platform->id == SRA_PLATFORM_454 ) {
+            if( (rc = SRAWriter454_Make(&obj->w454, config)) != 0 ) {
+                LOGERR(klogInt, rc, "failed to initialize writer");
+            }
+        } else {
+            if( (rc = SRAWriterIonTorrent_Make(&obj->wIonTorrent, config)) != 0 ) {
+                LOGERR(klogInt, rc, "failed to initialize Ion Torrent writer");
+            }
+        }
+    }
+    if(rc == 0) {
+        obj->skip_signal = (config->columnFilter & efltrSIGNAL) && !(config->columnFilter & efltrDEFAULT);
+        *self = &obj->dad;
+    } else {
+        free(obj);
+    }
+    return rc;
+}
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    return SFFLoaderFmtMake(self, config);
+}
diff --git a/tools/sra-load/sra-writer.c b/tools/sra-load/sra-writer.c
new file mode 100644
index 0000000..bbfcb5b
--- /dev/null
+++ b/tools/sra-load/sra-writer.c
@@ -0,0 +1,370 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/main.h>
+#include <klib/rc.h>
+#include <klib/status.h>
+#include <klib/log.h>
+#include <sra/types.h>
+#include <sra/wsradb.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+#include "loader-fmt.h"
+#include "sra-writer.h"
+
+#define SRAWRITER_MAX_READS 256
+
+struct SRAWriter {
+    const SRALoaderConfig* config;
+    int64_t spots_to_run;
+
+    SRATable* table;
+    uint8_t nreads;
+    bool defaults;
+
+    uint32_t col_spot_group_id;
+    uint32_t col_read_start_id;
+    uint32_t col_read_len_id;
+    SRASegment read_segs[SRAWRITER_MAX_READS];
+};
+
+rc_t SRAWriter_Make( SRAWriter** self, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriter* obj = NULL;
+    uint8_t nreads;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetReadNumber(config->experiment, &nreads)) != 0 ) {
+        return rc;
+    }
+    obj = calloc(1, sizeof(*obj));
+    if( obj == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    }
+    obj->config = config;
+    obj->nreads = nreads;
+    obj->spots_to_run = config->spots_to_run;
+    *self = obj;
+    return 0;
+}
+
+void SRAWriter_Whack(SRAWriter* self, SRATable** table)
+{
+    if( self != NULL ) {
+        if( table != NULL ) {
+            *table = self->table;
+        } else {
+            SRATableRelease(self->table);
+        }
+        free(self);
+    }
+}
+
+rc_t SRAWriter_CreateTable(SRAWriter* self, const char* schema)
+{
+    rc_t rc = 0;
+
+    assert(self->table == NULL);
+    if( self == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    } else {
+retry:
+        rc = SRAMgrCreateTable(self->config->sra_mgr, &self->table, schema, "%s", self->config->table_path);
+        if( GetRCObject(rc) == (enum RCObject)rcTable && GetRCState(rc) == rcExists && self->config->force_table_overwrite ) {
+            if( (rc = SRAMgrDropTable(self->config->sra_mgr, true, "%s", self->config->table_path)) == 0 ) {
+                goto retry;
+            }
+        }
+    }
+    if( rc != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to create table with schema $(schema)", PLOG_S(schema), schema));
+    } else {
+        DEBUG_MSG (7, ("Created table with schema '%s'\n", schema));
+    }
+    return rc;
+}
+
+rc_t SRAWriter_OpenColumnWrite(SRAWriter* self, uint32_t *idx, const char *name, const char *datatype)
+{
+    if( self == NULL ) {
+        return RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    }
+    return SRATableOpenColumnWrite(self->table, idx, NULL, name, datatype);
+}
+
+rc_t SRAWriter_NewSpot(SRAWriter* self, spotid_t *id)
+{
+    rc_t rc = 0;
+    spotid_t s;
+
+    if( self == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    } else {
+        id = id ? id : &s;
+        rc = SRATableNewSpot(self->table, id);
+        if(rc == 0 ) {
+            DEBUG_MSG(3, ("writing spot %lu data\n", *id));
+        }
+        if( (*id % 2000000) == 0 ) {
+            PLOGMSG(klogInt, (klogInfo, "spot $(spot_count)", "severity=status,spot_count=%u", *id));
+        }
+    }
+    return rc;
+}
+
+rc_t SRAWriter_WriteIdxColumn(SRAWriter* self, uint32_t idx, const void *base, uint64_t bytes, bool as_dflt)
+{
+    if( self == NULL ) {
+        return RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    }
+    if( as_dflt ) {
+        return SRATableSetIdxColumnDefault(self->table, idx, base, 0, bytes * 8);
+    }
+    return SRATableWriteIdxColumn(self->table, idx, base, 0, bytes * 8);
+}
+
+rc_t SRAWriter_CloseSpot(SRAWriter* self)
+{
+    rc_t rc = 0;
+    if( self == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    } else {
+        if( (rc = SRATableCloseSpot(self->table)) == 0 ) {
+            rc = Quitting();
+            if( self->spots_to_run > 0 ) {
+                self->spots_to_run--;
+            }
+            if( rc == 0 && self->spots_to_run == 0 ) {
+                rc = RC( rcSRA, rcFormatter, rcWriting, rcTransfer, rcDone);
+            }
+        }
+    }
+    return rc;
+}
+
+/* if data is NULL no default value is written, only column is open */
+static
+rc_t SRAWriter_WDflt(SRAWriter* self, const char *cname, const char *type, const void *data, size_t size)
+{
+    rc_t rc = 0;
+    uint32_t ci = 0;
+
+    if( (rc = SRATableOpenColumnWrite(self->table, &ci, 0, cname, type)) != 0 && GetRCState(rc) != rcExists ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to open column $(column)", PLOG_S(column), cname));
+    } else if( data != NULL && (rc = SRATableSetIdxColumnDefault(self->table, ci, data, 0, size * 8)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write default to column $(column)", PLOG_S(column), cname));
+    } else if( strcmp(cname, "SPOT_GROUP") == 0 ) {
+        self->col_spot_group_id = ci;
+    } else if( strcmp(cname, "READ_START") == 0 ) {
+        self->col_read_start_id = ci;
+    } else if( strcmp(cname, "READ_LEN") == 0 ) {
+        self->col_read_len_id = ci;
+    }
+    return rc;
+}
+
+rc_t SRAWriter_WriteDefaults(SRAWriter* self)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    const PlatformXML* plat;
+    char labels[10240] = "\0";
+    INSDC_SRA_xread_type read_types[SRAWRITER_MAX_READS];
+    INSDC_coord_zero label_start[SRAWRITER_MAX_READS];
+    INSDC_coord_len label_len[SRAWRITER_MAX_READS];
+    bool has_read_seg = false;
+    INSDC_coord_zero read_start[SRAWRITER_MAX_READS];
+    INSDC_coord_len read_len[SRAWRITER_MAX_READS];
+
+    if( self == NULL ) {
+        return RC( rcSRA, rcFormatter, rcWriting, rcSelf, rcNull);
+    }
+    if( self->defaults ) {
+        return 0;
+    }
+    ((SRAWriter*)self)->defaults = true;
+
+    if( (rc = Experiment_GetPlatform(self->config->experiment, &plat)) == 0 ) {
+        SRASegment read_segs[SRAWRITER_MAX_READS];
+        if( (rc = Experiment_ReadSegDefault(self->config->experiment, read_segs)) == 0 ) {
+            has_read_seg = true;
+            for (i = 0; i != self->nreads; ++i) {
+                read_start[i] = read_segs[i].start;
+                read_len[i] = read_segs[i].len;
+            }
+        } else if( GetRCObject(rc) == (enum RCObject)rcData && GetRCState(rc) == rcUnsupported ) {
+            rc = 0;
+        }
+    }
+    for(i = 0; rc == 0 && i < self->nreads; i++) {
+        const ReadSpecXML_read* rspec = NULL;
+        if( (rc = Experiment_GetRead(self->config->experiment, i, &rspec)) != 0 ) {
+            continue;
+        }
+        label_start[i] = strlen(labels);
+        label_len[i] = 0;
+        if( rspec->read_label != NULL ) {
+            label_len[i] = strlen(rspec->read_label);
+            strncat(labels, rspec->read_label, label_len[i]);
+        }
+        read_types[i] = rspec->read_class;
+    }
+
+    if( rc == 0 ) {
+        uint8_t platform = plat->id;
+#if _DEBUGGING
+        DEBUG_MSG (7, ("Default: %hu reads per spot, labels: '%s'\n", self->nreads, labels));
+        for( i = 0; i < self->nreads; i++) {
+            DEBUG_MSG (5, ("Default: Read %u. %s: Label: [%2u:%2u]",
+                           i + 1, ( read_types[i] & SRA_READ_TYPE_BIOLOGICAL ) ? " Bio" : "Tech",
+                           label_start[i], label_len[i]));
+            if( has_read_seg ) {
+                DEBUG_MSG (5, (" Seg: [%3u:%3u]", read_start[i], read_len[i]));
+            }
+            DEBUG_MSG (5, ("\n"));
+        }
+#endif
+        /* TBD: SPOT_GROUP on demand, remove NREADS!! */
+        if( (rc = SRAWriter_WDflt(self, "PLATFORM", sra_platform_id_t, &platform, sizeof(platform))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "NREADS", vdb_uint8_t, &self->nreads, sizeof(self->nreads))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "LABEL", vdb_ascii_t, labels, strlen(labels))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "LABEL_START", "INSDC:coord:zero", label_start, self->nreads * sizeof(label_start[0]))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "LABEL_LEN", vdb_uint32_t, label_len, self->nreads * sizeof(label_len[0]))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "READ_TYPE", sra_read_type_t, read_types, self->nreads * sizeof(read_types[0]))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "SPOT_GROUP", vdb_ascii_t, "", 0)) != 0 ||
+            (rc = SRAWriter_WDflt(self, "READ_START", "INSDC:coord:zero", has_read_seg ? read_start : NULL, self->nreads * sizeof(read_start[0]))) != 0 ||
+            (rc = SRAWriter_WDflt(self, "READ_LEN", vdb_uint32_t, has_read_seg ? read_len : NULL, self->nreads * sizeof(read_len[0]))) != 0 ) {
+            return rc;
+        }
+    }
+    return rc;
+}
+
+rc_t SRAWriter_WriteSpotSegment(SRAWriter* self, const SRALoaderFile* file,
+                                const char* file_member_name, uint32_t nbases, const char* bases)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || file == NULL || bases == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcMultiplexing, rcParam, rcNull);
+    } else if ( self->col_spot_group_id == 0 || self->col_read_start_id == 0 || self->col_read_len_id == 0 ) {
+        rc = RC( rcSRA, rcFormatter, rcMultiplexing, rcSelf, rcCorrupt);
+    } else {
+        const char* data_block_member_name = NULL;
+        const char* assigned_member_name = NULL;
+
+        DEBUG_MSG (5, ("file spot member_name '%s'\n", file_member_name));
+        if( file_member_name != NULL &&
+            (strcasecmp(file_member_name, "default") == 0 || strcasecmp(file_member_name, "0") == 0) ) {
+            file_member_name = "";
+        }
+        rc = SRALoaderFileMemberName(file, &data_block_member_name);
+        DEBUG_MSG (5, ("data block member_name '%s'\n", data_block_member_name));
+
+        if( rc == 0 && (rc = Experiment_MemberSeg(self->config->experiment, file_member_name, data_block_member_name,
+                                                  nbases, bases, ((SRAWriter*)self)->read_segs, &assigned_member_name)) == 0 ) {
+            DEBUG_MSG (5, ("Assigned member '%s'\n", assigned_member_name));
+            if( assigned_member_name != NULL ) {
+                if( (rc = SRATableWriteIdxColumn(self->table, self->col_spot_group_id, assigned_member_name, 0, strlen(assigned_member_name) * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=SPOT_GROUP"));
+                }
+            }
+            if( rc == 0 ) {
+                int32_t read_start[SRAWRITER_MAX_READS];
+                uint32_t read_len[SRAWRITER_MAX_READS];
+                int i;
+
+                for (i = 0; i < self->nreads; i++) {
+                    read_start[i] = self->read_segs[i].start;
+                    read_len[i] = self->read_segs[i].len;
+                }
+
+                if( (rc = SRATableWriteIdxColumn(self->table, self->col_read_start_id, read_start, 0, sizeof(read_start[0]) * self->nreads * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_START"));
+                } else if( (rc = SRATableWriteIdxColumn(self->table, self->col_read_len_id, read_len, 0, sizeof(read_len[0]) * self->nreads * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_LEN"));
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t SRAWriter_WriteSpotSegmentSimple(SRAWriter* self, const SRALoaderFile* file, const char* file_member_name, const SRASegment* read_seg)
+{
+    rc_t rc = 0;
+
+    if( self == NULL || file == NULL ) {
+        rc = RC( rcSRA, rcFormatter, rcMultiplexing, rcParam, rcNull);
+    } else if ( self->col_spot_group_id == 0 || self->col_read_start_id == 0 || self->col_read_len_id == 0 ) {
+        rc = RC( rcSRA, rcFormatter, rcMultiplexing, rcSelf, rcCorrupt);
+    } else {
+        const char* data_block_member_name = NULL;
+        const char* assigned_member_name = NULL;
+
+        DEBUG_MSG (5, ("file spot member_name '%s'\n", file_member_name));
+        if( file_member_name != NULL &&
+            (strcasecmp(file_member_name, "default") == 0 || strcasecmp(file_member_name, "0") == 0) ) {
+            file_member_name = "";
+        }
+        rc = SRALoaderFileMemberName(file, &data_block_member_name);
+        DEBUG_MSG (5, ("data block member_name '%s'\n", data_block_member_name));
+
+        if( rc == 0 && (rc = Experiment_MemberSegSimple(self->config->experiment, file_member_name, data_block_member_name,
+                                                        &assigned_member_name)) == 0 ) {
+            DEBUG_MSG (5, ("Assigned member '%s'\n", assigned_member_name));
+            if( assigned_member_name != NULL ) {
+                if( (rc = SRATableWriteIdxColumn(self->table, self->col_spot_group_id, assigned_member_name, 0, strlen(assigned_member_name) * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=SPOT_GROUP"));
+                }
+            }
+            if( rc == 0 ) {
+                int32_t read_start[SRAWRITER_MAX_READS];
+                uint32_t read_len[SRAWRITER_MAX_READS];
+                int i;
+
+                for (i = 0; i < self->nreads; i++) {
+                    read_start[i] = read_seg[i].start;
+                    read_len[i] = read_seg[i].len;
+                }
+
+                if( (rc = SRATableWriteIdxColumn(self->table, self->col_read_start_id, read_start, 0, sizeof(read_start[0]) * self->nreads * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_START"));
+                } else if( (rc = SRATableWriteIdxColumn(self->table, self->col_read_len_id, read_len, 0, sizeof(read_len[0]) * self->nreads * 8 )) != 0 ) {
+                    PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_LEN"));
+                }
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-load/sra-writer.h b/tools/sra-load/sra-writer.h
new file mode 100644
index 0000000..bae5bb2
--- /dev/null
+++ b/tools/sra-load/sra-writer.h
@@ -0,0 +1,92 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_sra_writer_
+#define _sra_load_sra_writer_
+
+#include <sra/sradb.h>
+
+typedef struct SRAWriter SRAWriter;
+
+/* Make SRAWriter from configuration
+ */
+rc_t SRAWriter_Make( SRAWriter** self, const SRALoaderConfig* config);
+
+rc_t SRAWriter_CreateTable(SRAWriter* self, const char* schema);
+
+rc_t SRAWriter_OpenColumnWrite(SRAWriter* self, uint32_t *idx, const char *name, const char *datatype);
+
+#define COL_OPEN(colid, name, type) \
+    if( (rc = SRAWriter_OpenColumnWrite(self->base, &colid, name, type)) != 0 ) { \
+        if( GetRCState(rc) != rcExists ) { \
+            LOGERR(klogInt, rc, "failed to open column " name " of type " type); \
+            return rc; \
+        } \
+        rc = 0; \
+    }
+
+rc_t SRAWriter_NewSpot(SRAWriter* self, spotid_t *id);
+
+rc_t SRAWriter_WriteIdxColumn(SRAWriter* self, uint32_t idx, const void *base, uint64_t bytes, bool as_dflt);
+
+#define COL_WRITE(colid, name, pstring) \
+    if( colid != 0 ) { \
+        if( (rc = SRAWriter_WriteIdxColumn(cself->base, colid, pstring.data, pstring.len, false)) != 0 ) { \
+            LOGERR(klogInt, rc, "failed to write column " name); \
+            return rc; \
+        } \
+    }
+
+#define COL_WRITE_DEFAULT(colid, name, pstring) \
+    if( colid != 0 ) { \
+        if( (rc = SRAWriter_WriteIdxColumn(cself->base, colid, pstring.data, pstring.len, true)) != 0 ) { \
+            LOGERR(klogInt, rc, "failed to write default to column " name); \
+            return rc; \
+        } \
+    }
+
+rc_t SRAWriter_CloseSpot(SRAWriter* self);
+
+/* Writes default values ONLY ONCE to common SRATable columns
+ * bases_per_spot [IN, OPTIONAL] - 0 ignored, otherwise used in default READ_SEG calculations
+ */
+rc_t SRAWriter_WriteDefaults(SRAWriter* self);
+
+/* WriteSpotSegment
+ *  Will determine SPOT_GROUP and READ_SEG values and write them to table to current spot
+ *
+ *  file [IN] - current file
+ *  member_name [IN,NULL] - value extracted from a spotname if present
+ *  bases [IN] - 2na FASTA string
+ *  nbases [IN] - bases number (length)
+ *  read_seg [OUT,OPTIONAL] - calculated READ_SEG values
+ */
+rc_t SRAWriter_WriteSpotSegment(SRAWriter* self, const SRALoaderFile* file, const char* file_member_name, uint32_t nbases, const char* bases);
+
+rc_t SRAWriter_WriteSpotSegmentSimple(SRAWriter* self, const SRALoaderFile* file, const char* file_member_name, const SRASegment* read_seg);
+
+void SRAWriter_Whack(SRAWriter* self, SRATable** table);
+
+#endif /* _sra_load_sra_writer_ */
diff --git a/tools/sra-load/srf-absolid.c b/tools/sra-load/srf-absolid.c
new file mode 100644
index 0000000..a938766
--- /dev/null
+++ b/tools/sra-load/srf-absolid.c
@@ -0,0 +1,497 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kapp/main.h>
+
+typedef struct SRFAbsolidLoaderFmt SRFAbsolidLoaderFmt;
+
+#define SRALOADERFMT_IMPL SRFAbsolidLoaderFmt
+#include "loader-fmt.h"
+
+#include "srf.h"
+#include "ztr-absolid.h"
+#include "srf-fmt.h"
+#include "pstring.h"
+#include "writer-absolid.h"
+#include "debug.h"
+
+#include <endian.h>
+#include <byteswap.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <assert.h>
+
+typedef struct fe_context_t_struct {
+    SRF_context ctx;
+    bool skip_signal;
+    const SRAWriteAbsolid* writer;
+
+    pstring name_prefix;
+    
+    struct {
+        uint8_t nreads;
+        uint16_t start[ABSOLID_FMT_MAX_NUM_READS+1];
+        pstring label[ABSOLID_FMT_MAX_NUM_READS+1];
+        char cs_key[ABSOLID_FMT_MAX_NUM_READS+1];
+        EAbisolidReadType type[ABSOLID_FMT_MAX_NUM_READS+1];
+    } region;
+} fe_context_t;
+
+static
+rc_t set_label_type(const char* label, pstring* name, EAbisolidReadType* type)
+{
+    rc_t rc = 0;
+
+    assert(name && type);
+
+    *type = AbsolidRead_Suffix2ReadType(label);
+
+    if( *type == eAbisolidReadType_Unknown ) {
+        DEBUG_MSG(3, ("read label is not recognized: '%s'\n", label));
+    } else {
+        const char* l = AbisolidReadType2ReadLabel[*type];
+        rc = pstring_assign(name, l, strlen(l));
+    }
+    return rc;
+}
+
+static
+rc_t fe_new_region(fe_context_t *self, size_t region_count, const region_t region[])
+{
+    rc_t rc = 0;
+    int i;
+
+    self->region.nreads = region_count / 2;
+    DEBUG_MSG(3, ("REGION: %u -> %u reads\n", region_count, self->region.nreads));
+    if( self->region.nreads <= 0 || self->region.nreads > ABSOLID_FMT_MAX_NUM_READS ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnsupported);
+        SRALoaderFile_LOG(self->ctx.file, klogErr, rc, "read count $(c)", PLOG_U8(c), self->region.nreads);
+    }
+    for(i = 0; rc == 0 && i < self->region.nreads ; i++ ) {
+        int j = i * 2 + 1;
+        self->region.start[i] = region[j].start;
+        if( (rc = set_label_type(region[j].name, &self->region.label[i], &self->region.type[i])) != 0 ) {
+            break;
+        }
+        self->region.cs_key[i] = region[j - 1].name[0];
+        DEBUG_MSG(3, ("REGION[%u]: '%s', %u, '%c', start: %u\n",
+                      i, self->region.label[i].data, self->region.type[i], self->region.cs_key[i], self->region.start[i]));
+        switch(region[j].type) {
+            case Biological:
+            case Normal:
+            case Paired:
+            case Technical:
+                break;
+            default:
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                SRALoaderFile_LOG(self->ctx.file, klogErr, rc, "read #$(read_id) type mismatch; expected $(expected), got $(got)",
+                        "read_id=%u,expected=%s,got=%u", i, "(B|N|P|T)", region[j].type);
+                return rc;
+        }
+    }
+    if( rc == 0 &&
+        self->region.nreads > 1 && self->region.type[0] == self->region.type[1] ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcDuplicate);
+        SRALoaderFile_LOG(self->ctx.file, klogErr, rc, "both reads have same type", NULL);
+    }
+    return rc;
+}
+
+static
+rc_t parse_v1_header(SRF_context *ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size)
+{
+    rc_t rc = 0;
+    size_t parsed;
+    char prefixType;
+    uint32_t counter;
+    ztr_raw_t ztr_raw;
+    ztr_t ztr;
+    enum ztr_chunk_type type;
+    fe_context_t* fe = (fe_context_t*)ctx;
+    
+    if( (rc = SRF_ParseDataChunk(data, size, &parsed, &fe->name_prefix, &prefixType, &counter)) != 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "parse_v1_header - failed to parse SRF chunk", NULL);
+    }
+    DEBUG_MSG(3, ("HEADER PREFIX: '%s'\n", fe->name_prefix.data));
+    if((rc = ABI_ZTR_AddToBuffer(ztr_ctx, data + parsed, size - parsed)) != 0) {
+        return rc;
+    }
+    if((rc = ABI_ZTR_ParseHeader(ztr_ctx)) != 0) {
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "parse_v1_header - failed to parse ZTR header", NULL);
+    }
+    while(rc == 0 && !ABI_ZTR_BufferIsEmpty(ztr_ctx)) {
+        if((rc = ABI_ZTR_ParseBlock(ztr_ctx, &ztr_raw)) != 0) {
+            return SRALoaderFile_LOG(ctx->file, klogErr, rc, "parse_v1_header - failed to parse ZTR chunk", NULL);
+        }
+        if((rc = ABI_ZTR_ProcessBlock(ztr_ctx, &ztr_raw, &ztr, &type)) != 0) {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "parse_v1_header - failed to process ZTR chunk", NULL);
+        }
+        if(type == REGN) {
+            rc = fe_new_region(fe, ztr.region->count, ztr.region->region);
+        }
+        if(*(void **)&ztr != NULL) {
+            free(*(void **)&ztr);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t fe_new_read(fe_context_t *self, pstring *readId, EAbisolidReadType* type, pstring* label)
+{
+    rc_t rc = 0;
+    pstring name_suffix;
+    const char* p;
+
+    assert(self && readId && type && label);
+    DEBUG_MSG(3, ("READ_LABEL: '%s'\n", readId->data));
+    /* spot name suffix may end with '_(F|R).+' */
+    p = strrchr(readId->data, '_');
+    if( p != NULL ) {
+        rc = set_label_type(p + 1, label, type);
+        if( rc == 0 && *type > eAbisolidReadType_SPOT) {
+            /* cut label */
+            readId->len -= label->len + 1;
+        }
+    } else {
+        pstring_clear(label);
+        *type = eAbisolidReadType_SPOT;
+    }
+    if( rc == 0 && (rc = pstring_copy(&name_suffix, readId)) == 0 ) {
+        rc = SRAWriteAbsolid_MakeName(&self->name_prefix, &name_suffix, readId);
+    }
+    return rc;
+}
+
+static
+rc_t parse_v1_read(SRF_context *ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size)
+{
+    rc_t rc = 0;
+    size_t i, parsed;
+    ztr_raw_t ztr_raw;
+    ztr_t ztr;
+    enum ztr_chunk_type type;
+    fe_context_t* fe = (fe_context_t*)ctx;
+
+    uint8_t flags;
+    pstring readId;
+    EAbisolidReadType read_type;
+    pstring label;
+
+    AbsolidRead read[ABSOLID_FMT_MAX_NUM_READS];
+        
+    if( fe->region.nreads == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcNotFound);
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "missing region chunk before 1st read chunk", NULL);
+    }
+    if( (rc = SRF_ParseReadChunk(data, size, &parsed, &flags, &readId)) != 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rc);
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "SRF parsing failure", NULL);
+    }
+    ABI_ZTR_AddToBuffer(ztr_ctx, data + parsed, size - parsed);
+
+    /* readId will have spotname */
+    if( (rc = fe_new_read(fe, &readId, &read_type, &label)) != 0 ) {
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "parsing spot name suffix", NULL);
+    }
+    for(i = 0; i < sizeof(read) / sizeof(read[0]); i++) {
+        AbsolidRead_Init(&read[i]);
+    }
+    while(!ABI_ZTR_BufferIsEmpty(ztr_ctx)) {
+        if( (rc = ABI_ZTR_ParseBlock(ztr_ctx, &ztr_raw)) != 0 ||
+            (rc = ABI_ZTR_ProcessBlock(ztr_ctx, &ztr_raw, &ztr, &type)) != 0 ) {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "ZTR parsing failure", NULL);
+            break;
+        }
+        switch (type) {
+        case BASE:
+            if(ztr.sequence->datatype != i8) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "read: expected 8-bit datatype", NULL);
+            } else if( read_type > eAbisolidReadType_SPOT ) {
+                int read_number = AbisolidReadType2ReadNumber[read_type];
+                if( (rc = pstring_assign(&read[read_number].seq, ztr.sequence->data, ztr.sequence->datasize)) == 0 ) {
+                    /* grab 1st, may be the only cs_key */
+                    read[read_number].cs_key = fe->region.cs_key[0];
+                    for(i = 1; i < fe->region.nreads; i++) {
+                        if( read_type == fe->region.type[i] ) {
+                            read[read_number].cs_key = fe->region.cs_key[i];
+                            break;
+                        }
+                    }
+                    SRF_set_read_filter(&read[read_number].filter, flags);
+                    rc = pstring_copy(&read[read_number].label, &label);
+                    DEBUG_MSG(3, ("SRF READ: '%s'\n", read[read_number].seq.data));
+                }
+                if( rc != 0 ) {
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying read", NULL);
+                }
+            } else {
+                for(i = 0; rc == 0 && i < fe->region.nreads; i++) {
+                    int read_number = AbisolidReadType2ReadNumber[fe->region.type[i]];
+                    size_t len = (i + 1 >= fe->region.nreads ? ztr.sequence->datasize : fe->region.start[i + 1]) - fe->region.start[i];
+                    rc = pstring_assign(&read[read_number].seq, &ztr.sequence->data[fe->region.start[i]], len);
+                    read[read_number].cs_key = fe->region.cs_key[i];
+                    SRF_set_read_filter(&read[read_number].filter, flags);
+                    if( fe->region.label[i].len != 0 ) {
+                        rc = pstring_copy(&read[read_number].label, &fe->region.label[i]);
+                    }
+                    DEBUG_MSG(3, ("SRF READ[%u]: '%s'\n", i, read[read_number].seq.data));
+                }
+                if( rc != 0 ) {
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying reads", NULL);
+                }
+            }
+            break;
+        case CNF1:
+            if(ztr.quality1->datatype != i8) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "quality: expected 8-bit datatype", NULL);
+            } else if( read_type > eAbisolidReadType_SPOT ) {
+                int read_number = AbisolidReadType2ReadNumber[read_type];
+                if( (rc = pstring_assign(&read[read_number].qual, ztr.quality1->data, ztr.quality1->datasize)) == 0 ) {
+                    DEBUG_MSG(3, ("SRF QUAL: %u bytes\n", read[read_number].qual.len));
+                }
+                if( rc != 0 ) {
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying quality", NULL);
+                }
+            } else {
+                for(i = 0; rc == 0 && i < fe->region.nreads; i++) {
+                    int read_number = AbisolidReadType2ReadNumber[fe->region.type[i]];
+                    size_t len = (i + 1 >= fe->region.nreads ? ztr.quality1->datasize : fe->region.start[i + 1]) - fe->region.start[i];
+                    rc = pstring_assign(&read[read_number].qual, &ztr.quality1->data[fe->region.start[i]], len);
+                    DEBUG_MSG(3, ("SRF QUAL[%u]: %u bytes\n", i, read[read_number].qual.len));
+                }
+                if( rc != 0 ) {
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying qualities", NULL);
+                }
+            }
+            break;
+        case SAMP:
+            if( !fe->skip_signal ) {
+                size_t i;
+                int stype = ABSOLID_FMT_COLMASK_NOTSET;
+                if(ztr.signal->datatype != f32) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "signal: expected 32-bit float datatype", NULL);
+                } else if( (ztr.signal->datasize % sizeof(float)) != 0 ) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "signal: size not 32-bit float aligned", NULL);
+                } else if (ztr.signal->channel == NULL) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcIncomplete);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "SIGNAL column: missing channel type", NULL);
+                } else if(strcmp(ztr.signal->channel, "0FAM") == 0) {
+                    stype = ABSOLID_FMT_COLMASK_FAM;
+                } else if(strcmp(ztr.signal->channel, "1CY3") == 0) {
+                    stype = ABSOLID_FMT_COLMASK_CY3;
+                } else if(strcmp(ztr.signal->channel, "2TXR") == 0) {
+                    stype = ABSOLID_FMT_COLMASK_TXR;
+                } else if(strcmp(ztr.signal->channel, "3CY5") == 0) {
+                    stype = ABSOLID_FMT_COLMASK_CY5;
+                } else {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "SIGNAL column: unexpected channel type", NULL);
+                }
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                for(i = 0; rc == 0 && i < ztr.signal->datasize; i += 4) {
+                    uint32_t* r = (uint32_t*)&ztr.signal->data[i];
+                    *r = bswap_32(*r);
+                }
+#endif
+                if( rc == 0 ) {
+                    if( read_type > eAbisolidReadType_SPOT ) {
+                        int read_number = AbisolidReadType2ReadNumber[read_type];
+                        pstring* d = NULL;
+                        switch(stype) {
+                            case ABSOLID_FMT_COLMASK_FAM:
+                                read[read_number].fs_type = eAbisolidFSignalType_FAM;
+                                d = &read[read_number].fxx;
+                                break;
+                            case ABSOLID_FMT_COLMASK_CY3:
+                                d = &read[read_number].cy3;
+                               break;
+                            case ABSOLID_FMT_COLMASK_TXR:
+                                d = &read[read_number].txr;
+                                break;
+                            case ABSOLID_FMT_COLMASK_CY5:
+                                d = &read[read_number].cy5;
+                                break;
+                        }
+                        if( d ) {
+                            rc = pstring_assign(d, ztr.signal->data, ztr.signal->datasize);
+                            DEBUG_MSG(3, ("SRF SIGNAL[%s]: %u bytes\n", ztr.signal->channel, d->len));
+                        } else {
+                            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnrecognized);
+                        }
+                        if( rc != 0 ) {
+                            SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying signal", NULL);
+                        }
+                    } else {
+			 if( fe->region.nreads <= 0 || fe->region.nreads > ABSOLID_FMT_MAX_NUM_READS ) {
+				rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnsupported);
+				SRALoaderFile_LOG(fe->ctx.file, klogErr, rc, "read count $(c)", PLOG_U8(c), fe->region.nreads);
+			 }
+
+                        for(i = 0; rc == 0 && i < fe->region.nreads; i++) {
+                            pstring* d = NULL;
+                            int read_number = AbisolidReadType2ReadNumber[fe->region.type[i]];
+                            size_t len = (i + 1 >= fe->region.nreads) ? ztr.signal->datasize : (fe->region.start[i + 1] * sizeof(float));
+                            len -= fe->region.start[i] * sizeof(float);
+                            switch(stype) {
+                                case ABSOLID_FMT_COLMASK_FAM:
+                                    read[read_number].fs_type = eAbisolidFSignalType_FAM;
+                                    d = &read[read_number].fxx;
+                                    break;
+                                case ABSOLID_FMT_COLMASK_CY3:
+                                    d = &read[read_number].cy3;
+                                   break;
+                                case ABSOLID_FMT_COLMASK_TXR:
+                                    d = &read[read_number].txr;
+                                    break;
+                                case ABSOLID_FMT_COLMASK_CY5:
+                                    d = &read[read_number].cy5;
+                                    break;
+                            }
+                            if( d ) {
+                                rc = pstring_assign(d, &ztr.signal->data[fe->region.start[i] * sizeof(float)], len);
+                                DEBUG_MSG(3, ("SRF SIGNAL[%s]: %u bytes\n", ztr.signal->channel, d->len));
+                            } else {
+                                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnrecognized);
+                            }
+                        }
+                        if( rc != 0 ) {
+                            SRALoaderFile_LOG(ctx->file, klogErr, rc, "copying signals", NULL);
+                        }
+                    }
+                }
+            }
+            break;
+        default:
+            break;
+        }
+        if(type != none && type != ignore) {
+            free(*(void **)&ztr);
+        }
+    }
+    if(rc == 0) {
+        if( read_type <= eAbisolidReadType_SPOT ) {
+            rc = SRAWriteAbsolid_Write(fe->writer, ctx->file, &readId, NULL, &read[0], &read[1]);
+        } else {
+            switch( AbisolidReadType2ReadNumber[read_type] ) {
+                case 0:
+                    rc = SRAWriteAbsolid_Write(fe->writer, ctx->file, &readId, NULL, &read[0], NULL);
+                    break;
+                case 1:
+                    rc = SRAWriteAbsolid_Write(fe->writer, ctx->file, &readId, NULL, NULL, &read[1]);
+                    break;
+                default:
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnsupported);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "more than 2 reads", NULL);
+                    break;
+            }
+        }
+    }
+    return rc;
+}
+
+struct SRFAbsolidLoaderFmt {
+    SRALoaderFmt dad;
+    fe_context_t fe;
+};
+
+static
+rc_t SRFAbsolidLoaderFmt_WriteData(SRFAbsolidLoaderFmt *self, uint32_t argc, const SRALoaderFile *const argv [], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    
+    for(i = 0; rc == 0 && i < argc; i++) {
+        self->fe.ctx.file = argv[i];
+        if( (rc = SRALoaderFileName(argv[i], &self->fe.ctx.file_name)) == 0 ) {
+            rc = SRF_parse(&self->fe.ctx, parse_v1_header, parse_v1_read, ABI_ZTR_CreateContext, ABI_ZTR_ContextRelease);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SRFAbsolidLoaderFmt_Whack(SRFAbsolidLoaderFmt* self, SRATable** table)
+{
+    SRAWriteAbsolid_Whack(self->fe.writer, table);
+    free(self);
+    return 0;
+}
+
+static
+rc_t SRFAbsolidLoaderFmt_Version( const SRFAbsolidLoaderFmt* self, uint32_t* vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "AB SOLiD SRF";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 SRFAbsolidLoaderFmt_vt_v1 =
+{
+    1, 0,
+    SRFAbsolidLoaderFmt_Whack,
+    SRFAbsolidLoaderFmt_Version,
+    NULL,
+    SRFAbsolidLoaderFmt_WriteData
+};
+
+rc_t SRFABSolidLoaderFmt_Make(SRALoaderFmt** self, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRFAbsolidLoaderFmt* fmt;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&SRFAbsolidLoaderFmt_vt_v1)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    } else if( (rc = SRAWriteAbsolid_Make(&fmt->fe.writer, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize writer");
+    }
+    if( rc == 0 ) {
+        fmt->fe.skip_signal = (config->columnFilter & (efltrSIGNAL | efltrDEFAULT));
+        *self = &fmt->dad;
+    } else {
+        free(fmt);
+    }
+    return rc;
+}
diff --git a/tools/sra-load/srf-fmt.c b/tools/sra-load/srf-fmt.c
new file mode 100644
index 0000000..52a59ec
--- /dev/null
+++ b/tools/sra-load/srf-fmt.c
@@ -0,0 +1,267 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "srf.h"
+#include "ztr.h"
+#include "srf-fmt.h"
+#include "experiment-xml.h"
+#include "debug.h"
+
+
+const char UsageDefaultName[] = "srf-load";
+
+extern rc_t SRFIlluminaLoaderFmt_Make(SRALoaderFmt **self, const SRALoaderConfig *config);
+
+extern rc_t SRFABSolidLoaderFmt_Make(SRALoaderFmt **self, const SRALoaderConfig *config);
+
+rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
+{
+    rc_t rc = 0;
+    const PlatformXML* platform;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) == 0 ) {
+        switch(platform->id) {
+            case SRA_PLATFORM_ILLUMINA:
+                rc = SRFIlluminaLoaderFmt_Make(self, config);
+                break;
+            case SRA_PLATFORM_ABSOLID:
+                rc = SRFABSolidLoaderFmt_Make(self, config);
+                break;
+
+            default:
+                rc = RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnknown);
+        }
+    }
+    return rc;
+}
+
+/* BIGGER than internal SRALoaderFile buffer chunks handling
+ * skips 'skipover' bytes in buffer and makes 'bsize' bytes available via 'data',
+ * caller may want to skip 'skipover' returned back after 'data' is used
+ * call with all params zero to deallocated internal buffer
+ */
+static
+rc_t SRF_parse_prepdata(SRF_context* ctx, uint64_t bsize, const uint8_t** data, size_t* skipover)
+{
+    rc_t rc = 0;
+    static size_t big_buffer_sz = 0;
+    static uint8_t* big_buffer = NULL;
+
+    if( ctx == NULL && bsize == 0 && data == NULL && skipover == NULL ) {
+        free(big_buffer);
+        big_buffer = NULL;
+        big_buffer_sz = 0;
+        return 0;
+    }
+    assert(ctx != NULL), assert(data != NULL), assert(skipover != NULL);
+
+    /* prepare bsize bytes in buffer */
+    rc = SRALoaderFileRead(ctx->file, *skipover, bsize, (const void**)&ctx->file_buf, &ctx->file_buf_sz);
+    if( rc != 0 || ctx->file_buf == NULL || ctx->file_buf_sz == 0 || ctx->file_buf_sz > bsize ) {
+        if( GetRCObject(rc) != (enum RCObject)rcBuffer || GetRCState(rc) != rcInsufficient ) {
+            rc = rc ? rc : RC(rcSRA, rcFormatter, rcParsing, rcData, ctx->file_buf_sz > bsize ? rcExcessive : rcInsufficient);
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "expected $(expected) bytes chunk", PLOG_U64(expected), bsize);
+            return rc;
+        }
+        rc = 0;
+    }
+    if( ctx->file_buf_sz == bsize ) {
+        /* data fitted in file buffer, use it directly */
+        *data = ctx->file_buf;
+        *skipover = bsize;
+    } else {
+        size_t to_read = bsize, inbuf = 0;
+
+        DEBUG_MSG(3, ("file buffer overflow on chunk %lu bytes\n", bsize));
+        if( big_buffer_sz < bsize ) {
+            uint8_t* d = realloc(big_buffer, bsize);
+            DEBUG_MSG(3, ("grow internal chunk buffer to %lu bytes\n", bsize));
+            if (d == NULL) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "reading chunk of $(bytes) bytes", PLOG_U64(bytes), bsize);
+            } else {
+                big_buffer = d;
+                big_buffer_sz = bsize;
+            }
+        }
+        while( rc == 0 && to_read > 0 ) {
+            size_t x = to_read > ctx->file_buf_sz ? ctx->file_buf_sz : to_read;
+            memmove(&big_buffer[inbuf], ctx->file_buf, x);
+            to_read -= x;
+            inbuf += x;
+            rc = SRALoaderFileRead(ctx->file, x, to_read, (const void**)&ctx->file_buf, &ctx->file_buf_sz);
+            if( rc != 0 || ((ctx->file_buf == NULL || ctx->file_buf_sz == 0) && to_read > 0) ) {
+                if( GetRCObject(rc) != (enum RCObject)rcBuffer || GetRCState(rc) != rcInsufficient ) {
+                    rc = rc ? rc : RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+                    SRALoaderFile_LOG(ctx->file, klogErr, rc, "expected $(expected) bytes of $(chunk) chunk",
+                                      PLOG_2(PLOG_U64(expected),PLOG_U64(chunk)), to_read, bsize);
+                    return rc;
+                }
+                rc = 0;
+            }
+        }
+        *data = big_buffer;
+        *skipover = 0;
+    }
+    return rc;
+}
+
+rc_t SRF_parse(SRF_context *ctx, SRF_parse_header_func* header, SRF_parse_read_func* read,
+               rc_t (*zcreate)(ZTR_Context **ctx), rc_t (*zrelease)(ZTR_Context *self))
+{
+    rc_t rc = 0;
+    bool first_block = true;
+    enum SRF_ChunkTypes type = SRF_ChunkTypeUnknown;
+    uint64_t bsize;
+    size_t dataOffset;
+    size_t skipover = 0;
+    ZTR_Context *ztr_ctx = NULL;
+    const char* errmsg;
+    
+    while( rc == 0 ) {
+        errmsg = NULL;
+        /* SRF_ParseChunk needs 5-16 bytes to be in buffer */
+        if( (rc = SRALoaderFileRead(ctx->file, skipover, 16, (const void**)&ctx->file_buf, &ctx->file_buf_sz)) != 0 ) {
+            errmsg = "chunk start";
+            break;
+        }
+        if( ctx->file_buf == NULL ) {
+            /* EOF */
+            break;
+        }
+        rc = SRF_ParseChunk(ctx->file_buf, ctx->file_buf_sz, &bsize, &type, &dataOffset);
+        if( rc == rcInvalid ) {
+            /* not a chunk; might be an index pointer, if so then skip it */
+            skipover = 8;
+            /* reset to start in case files were concatinated */
+            first_block = true;
+            rc = 0;
+            continue;
+        } else if( rc != 0 ) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rc);
+            errmsg = "chunk head";
+            break;
+        }
+        if( first_block && type != SRF_ChunkTypeContainer ) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt);
+            errmsg = "expected SRF container header";
+            break;
+        }
+        if( type == SRF_ChunkTypeIndex ) {
+            /* index is at least 16 bytes */
+            if( ctx->file_buf_sz < 16 ) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+                errmsg = "index chunk";
+                break;
+            }
+            /* rest of the chunk index ignored */
+            skipover = bsize;
+        } else if( type == SRF_ChunkTypeXML ) {
+            /* ignore XML chunk */
+            skipover = bsize;
+        } else {
+            const uint8_t* data;
+            bsize -= dataOffset;
+            skipover = dataOffset;
+            if( (rc = SRF_parse_prepdata(ctx, bsize, &data, &skipover)) == 0 ) {
+                switch (type) {
+                    case SRF_ChunkTypeContainer:
+                        {{
+                            unsigned versMajor = 0;
+                            unsigned versMinor = 0;
+                            char contType = '\0';
+                            if( (rc = SRF_ParseContainerHeader(data, bsize, &versMajor, &versMinor, &contType, NULL, NULL)) != 0 ) {
+                                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rc);
+                                errmsg = "container header";
+                            }
+                            if(versMajor != 1) {
+                                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcBadVersion);
+                            } else if(contType != 'Z') {
+                                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+                                errmsg = "container type";
+                            }
+                            SRALoaderFile_LOG(ctx->file, klogInfo, 0, "parsing SRF v$(vers)", "vers=%u.%u", versMajor, versMinor);
+                            first_block = false;
+                        }}
+                        break;
+
+                    case SRF_ChunkTypeHeader:
+                        if (ztr_ctx != NULL) {
+                            (*zrelease)(ztr_ctx);
+                            ztr_ctx = NULL;
+                        }
+                        if( (rc = (*zcreate)(&ztr_ctx)) == 0) {
+                            rc = (*header)(ctx, ztr_ctx, data, bsize);
+                        }
+                        break;
+
+                    case SRF_ChunkTypeRead:
+                        rc = (*read)(ctx, ztr_ctx, data, bsize);
+                        break;
+
+                    default:
+                        /* this is impossible */
+                        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+                        errmsg = "unexpected chunk type";
+                        break;
+                }
+            }
+        }
+    }
+    SRF_parse_prepdata(NULL, 0, NULL, NULL); /* free internal buffer */
+    (*zrelease)(ztr_ctx);
+    if( rc != 0 ) {
+        if( errmsg ) {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "$(msg) - chunk type '$(type)'",
+                             PLOG_2(PLOG_C(type),PLOG_S(msg)), type, errmsg);
+        } else {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "chunk type '$(type)'", PLOG_C(type), type);
+        }
+    }
+    return rc;
+}
+
+void SRF_set_read_filter(uint8_t* filter, int SRF_flags)
+{
+    assert(filter != NULL);
+
+    if( ( SRF_flags & SRF_READ_WITHDRAWN ) != 0 ) {
+        *filter = SRA_READ_FILTER_REJECT;
+    } else if( ( SRF_flags & SRF_READ_BAD ) != 0 ) {
+        *filter = SRA_READ_FILTER_CRITERIA;
+    } else {
+        *filter = SRA_READ_FILTER_PASS;
+    }
+}
diff --git a/tools/sra-load/srf-fmt.h b/tools/sra-load/srf-fmt.h
new file mode 100644
index 0000000..f9ea3cf
--- /dev/null
+++ b/tools/sra-load/srf-fmt.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_srf_fmt_
+#define _sra_load_srf_fmt_
+
+#include "loader-fmt.h"
+
+typedef struct SRF_context_struct {
+    const SRALoaderFile *file;
+    const char* file_name;
+    const uint8_t* file_buf;
+    size_t file_buf_sz;
+} SRF_context;
+
+typedef rc_t (SRF_parse_header_func)(SRF_context* ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size);
+typedef rc_t (SRF_parse_read_func)(SRF_context* ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size);
+
+rc_t SRF_parse(SRF_context* ctx, SRF_parse_header_func* header, SRF_parse_read_func* read,
+               rc_t (*create)(ZTR_Context **ctx), rc_t (*release)(ZTR_Context *self));
+
+void SRF_set_read_filter(uint8_t* filter, int SRF_flags);
+
+#endif /* _sra_load_srf_fmt_ */
diff --git a/tools/sra-load/srf-illumina.c b/tools/sra-load/srf-illumina.c
new file mode 100644
index 0000000..05716ea
--- /dev/null
+++ b/tools/sra-load/srf-illumina.c
@@ -0,0 +1,453 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+typedef struct SRFIlluminaLoaderFmt SRFIlluminaLoaderFmt;
+
+#define SRALOADERFMT_IMPL SRFIlluminaLoaderFmt
+#include "loader-fmt.h"
+
+#include "srf.h"
+#include "ztr.h"
+#include "srf-fmt.h"
+#include "ztr-illumina.h"
+#include "writer-illumina.h"
+#include "debug.h"
+
+typedef struct fe_context_t_struct {
+
+    SRF_context ctx;
+    bool skip_intensity;
+    bool skip_signal;
+    bool skip_noise;
+
+    const uint8_t *defered;
+    uint32_t defered_len;
+    
+    const SRAWriterIllumina* writer;
+
+    pstring name_prefix;
+
+    IlluminaRead read;
+
+    ztr_t sequence;
+    ztr_t quality1;
+    ztr_t quality4;
+    ztr_t signal;
+    ztr_t noise;
+    ztr_t intensity;
+} fe_context_t;
+
+static
+rc_t fe_new_read(fe_context_t *self, int flags, pstring *readId )
+{
+    rc_t rc;
+    char *suffix;
+    pstring readName, spotGroup;
+    static IlluminaSpot spot;
+
+    /* look for spot group */
+    suffix = strchr(readId->data, '#');
+    if( suffix != NULL ) {
+        readId->len = suffix++ - readId->data;
+        if( (rc = pstring_assign(&spotGroup, suffix, strlen(suffix))) != 0 ) {
+            SRALoaderFile_LOG(self->ctx.file, klogInt, rc,
+                "extracting barcode from spot '$(spotname)'", "spotname=%s", readId->data);
+            return rc;
+        }
+    } else {
+        pstring_clear(&spotGroup);
+    }
+
+    /* build the read name from prefix (self->name_prefix) and read id */
+    if(self->name_prefix.len > 0 ) {
+        if( (rc = pstring_copy(&readName, &self->name_prefix)) == 0 ) {
+            if( isdigit(readName.data[readName.len - 1]) ) {
+                rc = pstring_append(&readName, ":", 1);
+            }
+            if( rc == 0 ) {
+                rc = pstring_concat(&readName, readId);
+            }
+        }
+    } else {
+        rc = pstring_copy(&readName, readId);
+    }
+    if( rc != 0 ) {
+        SRALoaderFile_LOG(self->ctx.file, klogErr, rc,
+            "preparing spot name $(spotname)", "spotname=%s", readId->data);
+        return rc;
+    }
+    SRF_set_read_filter(&self->read.filter, flags);
+
+    IlluminaSpot_Init(&spot);
+    if( (rc = IlluminaSpot_Add(&spot, &readName, &spotGroup, &self->read)) == 0 ) {
+        rc = SRAWriterIllumina_Write(self->writer, self->ctx.file, &spot);
+    }
+    return rc;
+}
+
+static
+rc_t parse_header(SRF_context *ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size)
+{
+    rc_t rc = 0;
+    size_t parsed;
+    char prefixType;
+    uint32_t counter;
+    ztr_raw_t ztr_raw;
+    ztr_t ztr;
+    enum ztr_chunk_type type;
+    fe_context_t* fe = (fe_context_t*)ctx;
+    
+    rc = SRF_ParseDataChunk(data, size, &parsed, &fe->name_prefix, &prefixType, &counter);
+    if(rc) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+    }
+    if(fe->defered != NULL) {
+        free((void *)fe->defered);
+        fe->defered = NULL;
+    }
+    if(parsed == size)
+        return 0;
+    
+    rc = ZTR_AddToBuffer(ztr_ctx, data + parsed, size - parsed);
+    if(rc)
+        return rc;
+
+    if((rc = ZTR_ParseHeader(ztr_ctx)) != 0) {
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+    }
+
+    while (rc == 0 && !ZTR_BufferIsEmpty(ztr_ctx)) {
+        if((rc = ZTR_ParseBlock(ztr_ctx, &ztr_raw)) != 0) {
+            if(GetRCState(rc) == rcInsufficient && GetRCObject(rc) == (enum RCObject)rcData)
+                rc = ZTR_BufferGetRemainder(ztr_ctx, &fe->defered, &fe->defered_len);
+            break;
+        }
+
+        if((rc = ZTR_ProcessBlock(ztr_ctx, &ztr_raw, &ztr, &type)) != 0) {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+            break;
+        }
+        if(*(void **)&ztr != NULL)
+            free(*(void **)&ztr);
+
+        if(ztr_raw.meta != NULL)
+            free(ztr_raw.meta);
+        if(ztr_raw.data != NULL)
+            free(ztr_raw.data);
+    }
+    return rc;
+}
+
+static
+rc_t parse_read(SRF_context *ctx, ZTR_Context *ztr_ctx, const uint8_t *data, size_t size)
+{
+    rc_t rc = 0;
+    size_t parsed;
+    uint8_t flags;
+    pstring readId;
+    ztr_raw_t ztr_raw;
+    ztr_t ztr;
+    enum ztr_chunk_type type;
+    fe_context_t* fe = (fe_context_t*)ctx;
+
+    *(void **)&fe->sequence =
+    *(void **)&fe->quality1 =
+    *(void **)&fe->quality4 =
+    *(void **)&fe->signal =
+    *(void **)&fe->intensity = 
+    *(void **)&fe->noise = NULL;
+    
+    rc = SRF_ParseReadChunk(data, size, &parsed, &flags, &readId);
+    if(rc) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rc);
+        return SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+    }
+    if(fe->defered != NULL)
+        ZTR_AddToBuffer(ztr_ctx, fe->defered, fe->defered_len);
+    ZTR_AddToBuffer(ztr_ctx, data + parsed, size - parsed);
+    if(fe->defered == NULL) {
+        rc = ZTR_ParseBlock(ztr_ctx, &ztr_raw);
+        if(rc == 0)
+            goto PARSE_BLOCK;
+        rc = ZTR_ParseHeader(ztr_ctx);
+        if(rc) {
+            return SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+        }
+    }
+    
+    while (!ZTR_BufferIsEmpty(ztr_ctx)) {
+        rc = ZTR_ParseBlock(ztr_ctx, &ztr_raw);
+    PARSE_BLOCK:
+        if(rc != 0 || (rc = ZTR_ProcessBlock(ztr_ctx, &ztr_raw, &ztr, &type)) != 0 ) {
+            return SRALoaderFile_LOG(ctx->file, klogErr, rc, "corrupt", NULL);
+        }
+        
+        switch (type) {
+            case READ:
+                if(ztr.sequence->datatype != i8) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                    return SRALoaderFile_LOG(ctx->file, klogErr, rc, "invalid data type for sequence data", NULL);
+                }
+                fe->sequence = ztr;
+                break;
+            case QUALITY1:
+                if(ztr.quality1->datatype != i8) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                    return SRALoaderFile_LOG(ctx->file, klogErr, rc, "invalid data type for quality1 data", NULL);
+                }
+                fe->quality1 = ztr;
+                break;
+            case QUALITY4:
+                if(ztr.quality4->datatype != i8) {
+                    rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected);
+                    return SRALoaderFile_LOG(ctx->file, klogErr, rc, "invalid data type for quality4 data", NULL);
+                }
+                fe->quality4 = ztr;
+                break;
+            case SIGNAL4:
+                if(ztr.signal4->Type != NULL && strncmp(ztr.signal4->Type, "SLXI", 4) == 0 ) {
+                    if( !fe->skip_intensity ) {
+                        fe->intensity = ztr;
+                    } else if(ztr.signal4){
+			if(ztr.signal4->data) free(ztr.signal4->data);
+			free(ztr.signal4);
+		    }
+                } else if(ztr.signal4->Type != NULL && strncmp(ztr.signal4->Type, "SLXN", 4) == 0 ) {
+                    if( !fe->skip_noise ) {
+                        fe->noise = ztr;
+                    } else if(ztr.signal4){
+			if(ztr.signal4->data) free(ztr.signal4->data);
+			free(ztr.signal4);
+                    }
+                } else if( !fe->skip_signal ) {
+                    fe->signal = ztr;
+		} else if(ztr.signal4){
+			if(ztr.signal4->data) free(ztr.signal4->data);
+			free(ztr.signal4);
+                }
+                break;
+
+            default:
+                free(*(void **)&ztr);
+
+            case none:
+            case ignore:
+                if(ztr_raw.data) {
+                    free(ztr_raw.data);
+                }
+                break;
+        }
+	if(ztr_raw.meta){
+		free(ztr_raw.meta);
+		ztr_raw.meta=NULL;
+	}
+    }
+    
+    while(rc == 0) {
+        if(*(void **)&fe->sequence == NULL) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcConstraint, rcViolated);
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "missing sequence data", NULL);
+            break;
+        }
+        if(*(void **)&fe->quality4 == NULL && *(void **)&fe->quality1 == NULL) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcConstraint, rcViolated);
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "missing quality data", NULL);
+            break;
+        }
+
+        if( (rc = ILL_ZTR_Decompress(ztr_ctx, BASE, fe->sequence, fe->sequence)) != 0 ||
+            (rc = pstring_assign(&fe->read.seq, fe->sequence.sequence->data, fe->sequence.sequence->datasize)) != 0 ) {
+            SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress sequence data", NULL);
+            break;
+        }
+        
+        if( *(void **)&fe->quality4 != NULL ) {
+            if( (rc = ILL_ZTR_Decompress(ztr_ctx, CNF4, fe->quality4, fe->sequence)) != 0 ||
+                (rc = pstring_assign(&fe->read.qual, fe->quality4.quality4->data, fe->quality4.quality4->datasize)) != 0 ) {
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress quality4 data", NULL);
+                break;
+            }
+            fe->read.qual_type = ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4;
+        } else if( *(void **)&fe->quality1 != NULL ) {
+            if( (rc = ILL_ZTR_Decompress(ztr_ctx, CNF1, fe->quality1, fe->sequence)) != 0 ||
+                (rc = pstring_assign(&fe->read.qual, fe->quality1.quality1->data, fe->quality1.quality4->datasize)) != 0 ) {
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress quality1 data", NULL);
+                break;
+            }
+            fe->read.qual_type = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
+        }
+        if( *(void **)&fe->signal != NULL ) {
+            if( (rc = ILL_ZTR_Decompress(ztr_ctx, SMP4, fe->signal, fe->sequence)) != 0 ||
+                (rc = pstring_assign(&fe->read.signal, fe->signal.signal4->data, fe->signal.signal4->datasize)) != 0 ) {
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress signal data", NULL);
+                break;
+            }
+        }
+        if( *(void **)&fe->intensity != NULL ) {
+            if( (rc = ILL_ZTR_Decompress(ztr_ctx, SMP4, fe->intensity, fe->sequence)) != 0 ||
+                (rc = pstring_assign(&fe->read.intensity, fe->intensity.signal4->data, fe->intensity.signal4->datasize)) != 0 ) {
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress intensity data", NULL);
+                break;
+            }
+        }
+        if( *(void **)&fe->noise != NULL ) {
+            if( (rc = ILL_ZTR_Decompress(ztr_ctx, SMP4, fe->noise, fe->sequence)) != 0 ||
+                (rc = pstring_assign(&fe->read.noise, fe->noise.signal4->data, fe->noise.signal4->datasize)) != 0 ) {
+                SRALoaderFile_LOG(ctx->file, klogErr, rc, "failed to decompress noise data", NULL);
+                break;
+            }
+        }
+        rc = fe_new_read(fe, flags, &readId);
+        break;
+    }
+    if(fe->sequence.sequence) {
+        if(fe->sequence.sequence->data)
+            free(fe->sequence.sequence->data);
+        free(fe->sequence.sequence);
+    }
+    if(fe->quality1.quality1) {
+        if(fe->quality1.quality1->data)
+            free(fe->quality1.quality1->data);
+        free(fe->quality1.quality1);
+    }
+    if(fe->quality4.quality4) {
+        if(fe->quality4.quality4->data)
+            free(fe->quality4.quality4->data);
+        free(fe->quality4.quality4);
+    }
+    if(fe->signal.signal4) {
+        if(fe->signal.signal4->data)
+            free(fe->signal.signal4->data);
+        free(fe->signal.signal4);
+    }
+    if(fe->intensity.signal4) {
+        if(fe->intensity.signal4->data)
+            free(fe->intensity.signal4->data);
+        free(fe->intensity.signal4);
+    }
+    if(fe->noise.signal4) {
+        if(fe->noise.signal4->data)
+            free(fe->noise.signal4->data);
+        free(fe->noise.signal4);
+    }
+    return rc;
+}
+
+struct SRFIlluminaLoaderFmt {
+    SRALoaderFmt dad;
+    fe_context_t fe;
+};
+
+static
+rc_t SRFIlluminaLoaderFmt_WriteData(SRFIlluminaLoaderFmt *self, uint32_t argc, const SRALoaderFile *const argv [], int64_t* spots_bad_count)
+{
+    rc_t rc = 0;
+    uint32_t i;
+
+    for(i = 0; rc == 0 && i < argc; i++) {
+        self->fe.ctx.file = argv[i];
+        if( (rc = SRALoaderFileName(argv[i], &self->fe.ctx.file_name)) == 0 ) {
+            rc = SRF_parse(&self->fe.ctx, parse_header, parse_read, ZTR_CreateContext, ZTR_ContextRelease);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t SRFIlluminaLoaderFmt_Whack(SRFIlluminaLoaderFmt *self, SRATable** table)
+{
+    SRAWriterIllumina_Whack(self->fe.writer, table);
+    free(self);
+    return 0;
+}
+
+static
+rc_t SRFIlluminaLoaderFmt_Version( const SRFIlluminaLoaderFmt *self, uint32_t *vers, const char** name )
+{
+    *vers = KAppVersion();
+    *name = "Illumina SRF";
+    return 0;
+}
+
+static SRALoaderFmt_vt_v1 SRFIlluminaLoaderFmt_vt_v1 =
+{
+    1, 0,
+    SRFIlluminaLoaderFmt_Whack,
+    SRFIlluminaLoaderFmt_Version,
+    NULL,
+    SRFIlluminaLoaderFmt_WriteData
+};
+
+rc_t SRFIlluminaLoaderFmt_Init(SRFIlluminaLoaderFmt* self, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+
+    self->fe.skip_signal = (config->columnFilter & (efltrSIGNAL | efltrDEFAULT));
+    self->fe.skip_noise = (config->columnFilter & (efltrNOISE | efltrDEFAULT));
+    self->fe.skip_intensity = (config->columnFilter & (efltrINTENSITY | efltrDEFAULT));
+
+    if( (rc = SRAWriterIllumina_Make(&self->fe.writer, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize writer");
+    }
+    return rc;
+}
+
+rc_t SRFIlluminaLoaderFmt_Make(SRALoaderFmt** self, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRFIlluminaLoaderFmt* fmt;
+
+    if( self == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    fmt = calloc(1, sizeof(*fmt));
+    if(fmt == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        LOGERR(klogInt, rc, "failed to initialize; out of memory");
+        return rc;
+    }
+    if( (rc = SRFIlluminaLoaderFmt_Init(fmt, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize");
+    } else if( (rc = SRALoaderFmtInit(&fmt->dad, (const SRALoaderFmt_vt*)&SRFIlluminaLoaderFmt_vt_v1)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize parent object");
+    }
+    if( rc == 0 ) {
+        *self = &fmt->dad;
+    } else {
+        free(fmt);
+    }
+    return rc;
+}
diff --git a/tools/sra-load/srf.c b/tools/sra-load/srf.c
new file mode 100644
index 0000000..904cde6
--- /dev/null
+++ b/tools/sra-load/srf.c
@@ -0,0 +1,229 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <klib/rc.h>
+
+#include "debug.h"
+#include "srf.h"
+#include "ztr.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <memory.h>
+#include <stdio.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <assert.h>
+
+enum RCState SRF_ParseChunk(const uint8_t *src, size_t srclen, uint64_t *size, enum SRF_ChunkTypes *type, size_t *data)
+{
+    assert(size);
+    assert(type);
+    assert(data);
+    
+    *size = 0;
+    *type = SRF_ChunkTypeUnknown;
+    *data = 0;
+    
+    if(srclen == 0) {
+        return rcInsufficient;
+    }
+    *type = src[0];
+    switch(*type) {
+        case 'S':
+            if (srclen < 8) {
+                return rcInsufficient;
+            }
+            if (*(const uint32_t *)src != *(const uint32_t *)("SSRF")) {
+                return rcInvalid;
+            }
+            *size = (((((src[4] << 8) | src[5]) << 8) | src[6]) << 8) | src[7];
+            *data = 8;
+            break;
+        case 'I':
+            if(srclen >= 16) {
+                *size = (((((((((((((src[8] << 8) | src[9]) << 8) | src[10]) << 8) | src[11]) << 8) |
+                              src[12]) << 8) | src[13]) << 8) | src[14]) << 8) | src[15];
+            }
+            break;
+        case 'X':
+        case 'H':
+        case 'R':
+            if (srclen < 5) {
+                return rcInsufficient;
+            }
+            *size = (((((src[1] << 8) | src[2]) << 8) | src[3]) << 8) | src[4];
+            *data = 5;
+            break;
+        default:
+            return rcInvalid;
+    }
+    return 0;
+}
+
+int SRF_ParseContainerHeader(const uint8_t *src, uint64_t src_length,
+                             unsigned *versMajor, unsigned *versMinor,
+                             char *contType, pstring *baseCaller, pstring *baseCallerVersion)
+{
+    const uint8_t *vers = src + 1;
+    
+    src += *src + 1;
+    
+    if (versMajor != NULL) {
+        *versMajor = 0;
+        
+        while (vers != src && *vers != '.') {
+            if (*vers > '9' || *vers < '0')
+                return rcInvalid;
+            *versMajor = *versMajor * 10 + *vers - '0';
+            ++vers;
+        }
+        if (versMinor != NULL) {
+            *versMinor = 0;
+            
+            if (vers != src && *vers == '.')
+                ++vers;
+            while (vers != src) {
+                if (*vers > '9' || *vers < '0')
+                    return rcInvalid;
+                *versMinor = *versMinor * 10 + *vers - '0';
+                ++vers;
+            }
+        }
+    }
+    
+    if (contType != NULL)
+        *contType = *src;
+    ++src;
+    
+    if (baseCaller != NULL) {
+        if( pstring_assign(baseCaller, src, *src + 1) != 0 ) {
+            return rcInsufficient;
+        }
+    }
+    src += *src + 1;
+    
+    if (baseCallerVersion != NULL) {
+        if( pstring_assign(baseCallerVersion, src, *src + 1) != 0 ) {
+            return rcInsufficient;
+        }
+    }
+    return 0;
+}
+
+int SRF_ParseDataChunk(const uint8_t *src, size_t src_length, size_t *parsed_length, pstring *prefix,
+                       char *prefixType, uint32_t *counter)
+{
+    const uint8_t *const endp = src + src_length;
+    assert(src);
+    assert(parsed_length);
+    
+    if (counter != NULL)
+        *counter = 0;
+    if (prefix != NULL)
+        pstring_clear(prefix);
+    
+    if (src_length < 2)
+        return rcInsufficient;
+    
+    if (prefixType != NULL)
+        *prefixType = *src;
+    ++src;
+    if (*src == 0)
+        ++src;
+    else if (src + *src + 1 > endp)
+        return rcInsufficient;
+    else {
+        if (prefix != NULL) {
+            if( pstring_assign(prefix, src + 1, *src) != 0 ) {
+                return rcInsufficient;
+            }
+        }
+        src += *src + 1;
+    }
+#if 1
+    switch (endp - src) {
+        case 0:
+            break;
+        case 4:
+            if (counter != NULL)
+                *counter = (((((src[0] << 8) | src[1]) << 8) | src[2]) << 8) | src[3];
+            src += 4;
+            break;
+        default:
+            if (endp - src < 8)
+                return rcInsufficient;
+            if (memcmp(src, ZTR_SIG, 8) != 0) {
+                if (counter != NULL)
+                    *counter = (((((src[0] << 8) | src[1]) << 8) | src[2]) << 8) | src[3];
+                src += 4;
+            }
+            break;
+    }
+#else
+    if (!ZTR_IsSignature(src, endp - src)) {
+        if (src + 4 > endp)
+            return rcInsufficient;
+        if (counter != NULL)
+            *counter = (((((src[0] << 8) | src[1]) << 8) | src[2]) << 8) | src[3];
+        src += 4;
+    }
+#endif
+    *parsed_length = src_length - (endp - src);
+    return 0;
+}
+
+int SRF_ParseReadChunk(const uint8_t *src, size_t src_length, size_t *parsed_length, uint8_t *flags, pstring *id)
+{
+    const uint8_t* const endp = src + src_length;
+    
+    assert(src);
+    assert(parsed_length);
+    assert(flags);
+    assert(id);
+    
+    *flags = 0;
+    pstring_clear(id);
+
+    if(src_length < 2) {
+        return rcInsufficient;
+    }
+    *flags = *src++;
+    if(*src == '\0') {
+        ++src;
+    } else if(src + *src + 1 > endp) {
+        return rcInsufficient;
+    } else {
+        if( pstring_assign(id, src + 1, *src) != 0 ) {
+            return rcInsufficient;
+        }
+        src += *src + 1;
+    }
+    *parsed_length = src_length - (endp - src);
+    if( *flags != 0 ) {
+        DEBUG_MSG(5, ("SRF_FLAGS='%02X'\n", (int)(*flags)));
+    }
+    return 0;
+}
diff --git a/tools/sra-load/srf.h b/tools/sra-load/srf.h
new file mode 100644
index 0000000..b918120
--- /dev/null
+++ b/tools/sra-load/srf.h
@@ -0,0 +1,146 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_srf_
+#define _sra_load_srf_
+
+#include "writer-illumina.h"
+
+#define SRF_READ_BAD (1U << 0)
+#define SRF_READ_WITHDRAWN (1U << 1)
+
+#define SRF_CONTAINER_HEADER_MIN_SIZE (8)
+#define SRF_BLOCK_HEADER_MIN_SIZE (5)
+
+enum SRF_ChunkTypes {
+    SRF_ChunkTypeUnknown = '?',
+    SRF_ChunkTypeContainer = 'S',
+    SRF_ChunkTypeIndex = 'I',
+    SRF_ChunkTypeHeader = 'H',
+    SRF_ChunkTypeRead = 'R',
+    SRF_ChunkTypeXML = 'X'
+};
+
+/* SRF_ParseChunk
+   try to parse an SRF chunk
+
+   returns:
+       0: no error
+       rcInsufficient: not enough src data to parse;
+           provide more data or declare an error
+       rcInvalid: the data is invalid
+
+   Parameters:
+       src [in, required]: the bytes to parse
+       srclen: the number of bytes parsable
+       size [out, required]: the total size of the chunk
+           the next chunk starts at src + size
+       type [out, required]: the type of chunk found
+       data [out, required]: the start of any inner data
+          in the chunk
+*/
+enum RCState SRF_ParseChunk(const uint8_t *src,
+		                    size_t srclen,
+		                    uint64_t *size,
+		                    enum SRF_ChunkTypes *type,
+		                    size_t *data);
+
+/* SRF_ParseContainerHeader
+ try to parse an SRF Container Header
+ 
+ Returns:
+	0: no error
+        rcInsufficient: not enough data
+	rcInvalid: data invalid
+
+ Parameters:
+	src [in, required]: the bytes to parse
+	src_length: the length of src
+	versMajor, versMinor [out, optional]: SRF version
+	contType [out, optional]: type of the data contained in
+		this SRF; *contType should be 'Z' per the spec.
+	baseCaller [out, optional]: the base caller program that
+		generated the contained data
+	baseCallerVersion [out, optional]: the version of
+		base caller program
+ */
+int SRF_ParseContainerHeader(const uint8_t *src,
+                             uint64_t src_length,
+                             unsigned *versMajor,
+                             unsigned *versMinor,
+                             char *contType,
+                             pstring *baseCaller,
+                             pstring *baseCallerVersion);
+
+/* SRF_ParseDataChunk
+ try to parse an SRF data chunk (i.e. block header type = 'H')
+ 
+ Returns:
+	0: no error
+        rcInsufficient: not enough data
+	rcInvalid: data invalid
+ 
+ Parameters:
+	src [in, required]: the bytes to parse
+	src_length: the length of src
+	parsed_length [out, required]: length of SRF data in
+		this chunk; the bytes src[parsed_length..src_length],
+		if any, are ZTR.
+	prefix [out, optional]: (pstring) read name prefix, if any
+	prefixType [out, optional]: read name prefix type 'E' or 'I'
+	counter [out, optional]: initial value of counter, only
+		relevant if prefixType == 'I'
+ */
+int SRF_ParseDataChunk(const uint8_t *src,
+                       size_t src_length,
+                       size_t *parsed_length,
+                       pstring *prefix,
+                       char *prefixType,
+                       uint32_t *counter);
+
+/* SRF_ParseReadChunk
+ try to parse an SRF read chunk (i.e. block header type = 'R')
+ 
+ Returns:
+	0: no error
+        rcInsufficient: not enough data
+	rcInvalid: data invalid
+ 
+ Parameters:
+	src [in, required]: the bytes to parse
+	src_length: the length of src
+	parsed_length [out, required]: length of SRF data in
+		this chunk; the bytes src[parsed_length..src_length],
+		if any, are ZTR.
+	flags [out, optional]: read flags
+	id [out, optional]: read Id
+ */
+int SRF_ParseReadChunk(const uint8_t *src,
+		               size_t src_length,
+		               size_t *parsed_length,
+		               uint8_t *flags,
+		               pstring *id);
+
+#endif /* _sra_load_srf_ */
diff --git a/tools/sra-load/writer-454.c b/tools/sra-load/writer-454.c
new file mode 100644
index 0000000..0b1992c
--- /dev/null
+++ b/tools/sra-load/writer-454.c
@@ -0,0 +1,262 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/types.h>
+#include <insdc/insdc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+#include "writer-454.h"
+#include "sra-writer.h"
+
+struct SRAWriter454 {
+    SRAWriter* base;
+    pstring flows;
+    uint32_t flow_count;
+    pstring keys;
+
+    uint32_t ci_flowc;
+    uint32_t ci_keys;
+    uint32_t ci_name;
+    uint32_t ci_read;
+    uint32_t ci_qual;
+    uint32_t ci_signal;
+    uint32_t ci_position;
+    uint32_t ci_q_left;
+    uint32_t ci_q_right;
+    uint32_t ci_a_left;
+    uint32_t ci_a_right;
+};
+
+rc_t SRAWriter454_Make(const SRAWriter454** cself, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriter454* self;
+    const PlatformXML* platform;
+
+    if( cself == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+        return rc;
+    }
+    if( platform->id != SRA_PLATFORM_454 ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "platform type");
+        return rc;
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else if( (rc = SRAWriter_Make(&self->base, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize base writer");
+    } else {
+        if( platform->param.ls454.flow_sequence != NULL ) {
+            rc = pstring_assign(&self->flows, platform->param.ls454.flow_sequence,
+                                       strlen(platform->param.ls454.flow_sequence));
+        }
+        if( rc == 0 && platform->param.ls454.key_sequence != NULL ) {
+            rc = pstring_assign(&self->keys, platform->param.ls454.key_sequence,
+                                      strlen(platform->param.ls454.key_sequence));
+        }
+        self->flow_count = platform->param.ls454.flow_count;
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        SRAWriter454_Whack(self, NULL);
+    }
+    return rc;
+}
+
+void SRAWriter454_Whack(const SRAWriter454* cself, SRATable** table)
+{
+    if( cself != NULL ) {
+        SRAWriter454* self = (SRAWriter454*)cself;
+        SRAWriter_Whack(self->base, table);
+        free(self);
+    }
+}
+
+static
+rc_t SRAWriter454_Open(const SRAWriter454* cself, bool sig_and_pos)
+{
+    rc_t rc = 0;
+    SRAWriter454* self = (SRAWriter454*)cself;
+
+    if( cself->ci_name == 0 ) {
+        INSDC_coord_one d = 0;
+        pstring x;
+
+        if( (rc = SRAWriter_CreateTable(self->base, "NCBI:SRA:_454_:tbl:v2")) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAWriter_WriteDefaults(self->base)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to write table defaults");
+            return rc;
+        }
+        COL_OPEN(self->ci_name, "NAME", vdb_ascii_t);
+        COL_OPEN(self->ci_read, "READ", insdc_fasta_t);
+        COL_OPEN(self->ci_qual, "QUALITY", insdc_phred_t);
+        COL_OPEN(self->ci_q_left, "CLIP_QUALITY_LEFT", "INSDC:coord:one");
+        COL_OPEN(self->ci_q_right, "CLIP_QUALITY_RIGHT", "INSDC:coord:one");
+        COL_OPEN(self->ci_a_left, "CLIP_ADAPTER_LEFT", "INSDC:coord:one");
+        COL_OPEN(self->ci_a_right, "CLIP_ADAPTER_RIGHT", "INSDC:coord:one");
+        COL_OPEN(self->ci_flowc, "FLOW_CHARS", insdc_fasta_t);
+        COL_OPEN(self->ci_keys, "KEY_SEQUENCE", insdc_fasta_t);
+
+        COL_WRITE_DEFAULT(self->ci_flowc, "FLOW_CHARS", self->flows);
+        COL_WRITE_DEFAULT(self->ci_keys, "KEY_SEQUENCE", self->keys);
+        if( (rc = pstring_assign(&x, &d, sizeof(d))) == 0 ) {
+            COL_WRITE_DEFAULT(self->ci_q_left, "CLIP_QUALITY_LEFT", x);
+            COL_WRITE_DEFAULT(self->ci_q_right, "CLIP_QUALITY_RIGHT", x);
+            COL_WRITE_DEFAULT(self->ci_a_left, "CLIP_ADAPTER_LEFT", x);
+            COL_WRITE_DEFAULT(self->ci_a_right, "CLIP_ADAPTER_RIGHT", x);
+        }
+    }
+    if( sig_and_pos && (cself->ci_signal == 0 || cself->ci_position == 0) ) {
+        COL_OPEN(self->ci_signal, "SIGNAL", ncbi_isamp1_t);
+        COL_OPEN(self->ci_position, "POSITION", "INSDC:position:one");
+    }
+    return rc;
+}
+
+rc_t SRAWriter454_WriteHead(const SRAWriter454* cself, const pstring* flow_chars, const pstring* key_sequence)
+{
+    rc_t rc = 0;
+
+    if( (rc = SRAWriter454_Open(cself, false)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to create table");
+        return rc;
+    }
+    if( flow_chars && flow_chars->len != 0 ) {
+        if( cself->flows.len != 0 && pstring_cmp(&cself->flows, flow_chars) != 0 ) {
+            PLOGMSG(klogWarn, (klogWarn, "file FLOW_SEQUENCE do not match experiment: $(s)", PLOG_S(s), flow_chars->data));
+        }
+        /* update flow_count so signal data length will match below */
+        ((SRAWriter454*)cself)->flow_count = flow_chars->len;
+        COL_WRITE_DEFAULT(cself->ci_flowc, "FLOW_CHARS", (*flow_chars));
+    }
+    if( key_sequence && key_sequence->len != 0 ) {
+        if( cself->keys.len != 0 && pstring_cmp(&cself->keys, key_sequence) != 0 ) {
+            PLOGMSG(klogWarn, (klogWarn, "file KEY_SEQUENCE do not match experiment: $(s)", PLOG_S(s), key_sequence->data));
+        }
+        COL_WRITE_DEFAULT(cself->ci_keys, "KEY_SEQUENCE", (*key_sequence));
+    }
+    return 0;
+}
+
+rc_t SRAWriter454_WriteRead(const SRAWriter454* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality,
+                            const pstring* signal, const pstring* position,
+                            INSDC_coord_one q_left, INSDC_coord_one q_right,
+                            INSDC_coord_one a_left, INSDC_coord_one a_right)
+{
+    rc_t rc = 0;
+    SRAWriter454* self =(SRAWriter454*)cself;
+    
+    assert(self != NULL);
+    assert(data_block_ref != NULL);
+
+    DEBUG_MSG(3, ("spot name '%s'\n", name ? name->data : NULL));
+
+    if( (rc = SRAWriter454_Open(cself, signal || position)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to open table");
+        return rc;
+    }
+    if( !name || name->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "spot name");
+    }
+    if( !sequence || sequence->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "sequence");
+    } else if( !quality || sequence->len != quality->len ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, quality ? rcInconsistent : rcEmpty);
+        LOGERR(klogErr, rc, "quality");
+    }
+    if( signal && signal->len / self->flow_count != sizeof(uint16_t) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "signal and flow chars");
+    }
+    if( position && position->len / sequence->len != sizeof(INSDC_position_one) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "sequence and position");
+    }
+    if( q_left < 0 || (sequence && q_left > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip quality left and sequence");
+    }
+    if( q_right < 0 || (sequence && q_right > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip quality right and sequence");
+    }
+    if( a_left < 0 || (sequence && a_left > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip adapter left and sequence");
+    }
+    if( a_right < 0 || (sequence && a_right > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip adapter right and sequence");
+    }
+    if( rc != 0 || (rc = SRAWriter_NewSpot(self->base, NULL)) != 0 ) {
+        return rc;
+    }
+    COL_WRITE(self->ci_name, "NAME", (*name));
+    COL_WRITE(self->ci_read, "READ", (*sequence));
+    COL_WRITE(self->ci_qual, "QUALITY", (*quality));
+    COL_WRITE(self->ci_signal, "SIGNAL", (*signal));
+    COL_WRITE(self->ci_position, "POSITION", (*position));
+
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_q_left, &q_left, sizeof(q_left), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_QUALITY_LEFT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_q_right, &q_right, sizeof(q_right), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_QUALITY_RIGHT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_a_left, &a_left, sizeof(a_left), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_ADAPTER_LEFT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_a_right, &a_right, sizeof(a_right), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_ADAPTER_RIGHT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteSpotSegment(self->base, data_block_ref, NULL, sequence->len, sequence->data)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+        return rc;
+    }
+    return SRAWriter_CloseSpot(self->base);
+}
diff --git a/tools/sra-load/writer-454.h b/tools/sra-load/writer-454.h
new file mode 100644
index 0000000..5bca626
--- /dev/null
+++ b/tools/sra-load/writer-454.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_writer_454_
+#define _sra_load_writer_454_
+
+#include "loader-fmt.h"
+#include "pstring.h"
+
+typedef struct SRAWriter454 SRAWriter454;
+
+rc_t SRAWriter454_Make(const SRAWriter454** cself, const SRALoaderConfig* config);
+
+void SRAWriter454_Whack(const SRAWriter454* cself, SRATable** table);
+
+rc_t SRAWriter454_WriteHead(const SRAWriter454* cself, const pstring* flow_chars, const pstring* key_sequence);
+
+rc_t SRAWriter454_WriteRead(const SRAWriter454* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality,
+                            const pstring* signal, const pstring* position,
+                            INSDC_coord_one q_left, INSDC_coord_one q_right,
+                            INSDC_coord_one a_left, INSDC_coord_one a_right);
+
+#endif /* _sra_load_writer_454_ */
diff --git a/tools/sra-load/writer-absolid.c b/tools/sra-load/writer-absolid.c
new file mode 100644
index 0000000..294b030
--- /dev/null
+++ b/tools/sra-load/writer-absolid.c
@@ -0,0 +1,501 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/wsradb.h>
+#include <sra/types.h>
+
+#include "debug.h"
+#include "writer-absolid.h"
+#include "sra-writer.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+const int AbisolidReadType2ReadNumber [] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1};
+const char *AbisolidReadType2ReadLabel [] = {"", "", "F3", "R3", "F5-P2", "F5-BC", "F5-RNA", "F5-DNA", "F3-DNA", "BC"};
+
+void AbsolidRead_Init(AbsolidRead* read)
+{
+    if( read ) {
+        pstring_clear(&read->label);
+        read->cs_key = 0;
+        pstring_clear(&read->seq);
+        pstring_clear(&read->qual);
+        read->fs_type = eAbisolidFSignalType_NotSet;
+        pstring_clear(&read->fxx);
+        pstring_clear(&read->cy3);
+        pstring_clear(&read->txr);
+        pstring_clear(&read->cy5);
+        read->filter = 0;
+    }
+}
+
+EAbisolidReadType AbsolidRead_Suffix2ReadType(const char* s)
+{
+    EAbisolidReadType type;
+    size_t len;
+
+    assert(s != NULL);
+
+    len = strlen(s);
+    if( len == 0 ) {
+        type = eAbisolidReadType_SPOT;
+    } else if( len > 1 && strcmp(&s[len - 2], "F3") == 0 ) {
+        type = eAbisolidReadType_F3;
+    } else if( len > 1 && strcmp(&s[len - 2], "R3") == 0 ) {
+        type = eAbisolidReadType_R3;
+    } else if( len > 4 && strcmp(&s[len - 5], "F5-P2") == 0 ) {
+        type = eAbisolidReadType_F5_P2;
+    } else if( len > 4 && strcmp(&s[len - 5], "F5-BC") == 0 ) {
+        type = eAbisolidReadType_F5_BC;
+    } else if( len > 5 && strcmp(&s[len - 6], "F5-RNA") == 0 ) {
+        type = eAbisolidReadType_F5_RNA;
+    } else if( len > 5 && strcmp(&s[len - 6], "F5-DNA") == 0 ) {
+        type = eAbisolidReadType_F5_DNA;
+    } else if( len > 5 && strcmp(&s[len - 6], "F3-DNA") == 0 ) {
+        type = eAbisolidReadType_F3_DNA;
+    } else if( len > 1 && strcmp(&s[len - 2], "BC") == 0 ) {
+        type = eAbisolidReadType_BC;
+    } else {
+        int i;
+        for(i = 0; i < len; i++) {
+            if( !isdigit(s[i]) ) {
+                break;
+            }
+        }
+        type = i < len ? eAbisolidReadType_Unknown : eAbisolidReadType_SPOT;
+    }
+    return type;
+}
+
+struct SRAWriteAbsolid {
+    SRAWriter* base;
+    const PlatformXML* platform;
+    uint8_t nreads;
+    SRASegment read_seg[ABSOLID_FMT_MAX_NUM_READS];
+
+    uint32_t ci_name;
+    uint32_t ci_cs_key;
+    uint32_t ci_label;
+    uint32_t ci_label_start;
+    uint32_t ci_label_len;
+    uint32_t ci_csread;
+    uint32_t ci_qual;
+    uint32_t ci_fxx;
+    uint32_t ci_cy3;
+    uint32_t ci_txr;
+    uint32_t ci_cy5;
+    uint32_t ci_read_filter;
+};
+
+rc_t SRAWriteAbsolid_Make(const SRAWriteAbsolid** cself, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriteAbsolid* self;
+    const PlatformXML* platform;
+    const ReadSpecXML_read* read;
+    uint32_t sequence_length;
+    uint8_t nreads;
+
+    if( cself == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ||
+        (rc = Experiment_GetSpotLength(config->experiment, &sequence_length)) != 0 ||
+        (rc = Experiment_GetReadNumber(config->experiment, &nreads)) != 0 ) {
+        return rc;
+    }
+    if( platform->id != SRA_PLATFORM_ABSOLID ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "platform type");
+        return rc;
+    }
+    if( nreads > ABSOLID_FMT_MAX_NUM_READS ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+        PLOGERR(klogErr, (klogErr, rc, "expected up to $(max) reads", "max=%u", ABSOLID_FMT_MAX_NUM_READS));
+        return rc;
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        return rc;
+    }
+    if( (rc = SRAWriter_Make(&self->base, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize base writer");
+    } else if( (rc = Experiment_GetRead(config->experiment, 0, &read)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to get read 1 descriptor");
+    } else if( read->coord_type != rdsp_RelativeOrder_ct && read->coord_type != rdsp_BaseCoord_ct ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "1st read can be BASE_COORD or RELATIVE_ORDER only");
+    } else if( read->read_type != rdsp_Forward_rt && read->read_type != rdsp_Reverse_rt ) {
+        LOGMSG(klogWarn, "expected 1st read to be of type 'Forward' or 'Reverse'");
+    }
+    self->read_seg[0].start = 0;
+    self->read_seg[0].len = sequence_length;
+
+    if( rc == 0 && nreads >= ABSOLID_FMT_MAX_NUM_READS ) {
+        if( nreads > ABSOLID_FMT_MAX_NUM_READS ) {
+            rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+            LOGERR(klogErr, rc, "more than 2 reads");
+        } else if( (rc = Experiment_GetRead(config->experiment, 1, &read)) != 0 ) {
+            LOGERR(klogErr, rc, "failed to get read 2 descriptor");
+        } else if( read->coord_type != rdsp_BaseCoord_ct ) {
+            rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+            LOGERR(klogErr, rc, "2nd read can be BASE_COORD only");
+        } else if( read->read_type != rdsp_Forward_rt && read->read_type != rdsp_Reverse_rt ) {
+            LOGMSG(klogWarn, "expected 2ndt read to be of type 'Forward' or 'Reverse'");
+        }
+		if( rc == 0 ) {
+			self->read_seg[1].start = read->coord.start_coord - 1;
+			self->read_seg[1].len = sequence_length - self->read_seg[1].start;
+			self->read_seg[0].len = self->read_seg[1].start;
+		}
+    }
+#if _DEBUGGING
+    DEBUG_MSG(3, ("%s READ_SEG[%hu,%hu]\n", __func__, self->read_seg[0].start, self->read_seg[0].len));
+    if( nreads > 1 ) {
+        DEBUG_MSG(3, ("%s READ_SEG[%hu,%hu]\n", __func__, self->read_seg[1].start, self->read_seg[1].len));
+    }
+#endif
+    if( rc == 0 ) {
+        self->platform = platform;
+        self->nreads = nreads;
+        *cself = self;
+    } else {
+        SRAWriteAbsolid_Whack(self, NULL);
+    }
+    return rc;
+}
+
+rc_t SRAWriteAbsolid_MakeName(const pstring* prefix, const pstring* suffix, pstring* name)
+{
+    rc_t rc = 0;
+    if( prefix == NULL || name == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcParam, rcNull);
+    } else if( (rc = pstring_copy(name, prefix)) == 0 ) {
+        if( suffix && suffix->len > 0 ) {
+            if( name->len > 0 && name->data[name->len - 1] != '_' && suffix->data[0] != '_' ) {
+                rc = pstring_append(name, "_", 1);
+            }
+            if( rc == 0 ) {
+                pstring_concat(name, suffix);
+            }
+        }
+    }
+    if( rc != 0 ) {
+        LOGERR(klogErr, rc, "preparing spot name");
+    }
+    return rc;
+}
+
+void SRAWriteAbsolid_Whack(const SRAWriteAbsolid* cself, SRATable** table)
+{
+    if( cself != NULL ) {
+        SRAWriteAbsolid* self = (SRAWriteAbsolid*)cself;
+        SRAWriter_Whack(self->base, table);
+        free(self);
+    }
+}
+
+typedef struct AbsolidSpot_struct {
+    const pstring* spot_name;
+    uint32_t nreads;
+    pstring label;
+    SRASegment read_seg[ABSOLID_FMT_MAX_NUM_READS];
+    INSDC_coord_zero label_start[ABSOLID_FMT_MAX_NUM_READS];
+    uint32_t label_len[ABSOLID_FMT_MAX_NUM_READS];
+    char cs_key[ABSOLID_FMT_MAX_NUM_READS];
+    pstring seq;
+    pstring qual;
+    EAbisolidFSignalType fs_type;
+    pstring fxx;
+    pstring cy3;
+    pstring txr;
+    pstring cy5;
+    uint8_t filter[ABSOLID_FMT_MAX_NUM_READS];
+} AbsolidSpot;
+
+static
+void AbsolidSpot_Init(AbsolidSpot* spot, const pstring* spot_name,
+                      const uint16_t nreads, const SRASegment* read_seg)
+{
+    assert(spot != NULL);
+    assert(spot_name != NULL);
+    assert(nreads != 0);
+
+    spot->spot_name = spot_name;
+    pstring_clear(&spot->label);
+    memmove(spot->read_seg, read_seg, sizeof(spot->read_seg[0]) * nreads);
+    memset(spot->label_start, 0, sizeof(spot->label_start[0]) * nreads);
+    memset(spot->label_len, 0, sizeof(spot->label_len[0]) * nreads);
+    memset(spot->cs_key, 0, sizeof(spot->cs_key[0]) * nreads);
+    pstring_clear(&spot->seq);
+    pstring_clear(&spot->qual);
+    spot->fs_type = eAbisolidFSignalType_NotSet;
+    pstring_clear(&spot->fxx);
+    pstring_clear(&spot->cy3);
+    pstring_clear(&spot->txr);
+    pstring_clear(&spot->cy5);
+    memset(spot->filter, 0, sizeof(spot->filter[0]) * nreads);
+}
+
+static
+rc_t  AbsolidSpot_AddRead(AbsolidSpot* spot, const int id, const AbsolidRead* read)
+{
+    rc_t rc = 0;
+    const char* what = NULL;
+
+    if( read == NULL ) {
+        if( id == 0 ) {
+            spot->read_seg[id].start = 0;
+            spot->label_start[id] = 0;
+        } else {
+            spot->read_seg[id].start = spot->read_seg[id - 1].start + spot->read_seg[id - 1].len;
+            spot->label_start[id] = spot->label_start[id - 1] + spot->label_len[id - 1];
+        }
+        spot->read_seg[id].len = 0;
+        spot->label_len[id] = 0;
+        spot->cs_key[id] = (id % 2) ? 'G' : 'T';
+        spot->filter[id] = SRA_READ_FILTER_REJECT;
+    } else {
+        if( read->seq.len != spot->read_seg[id].len ) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+            what = "length do not match experiment";
+        } else if( read->qual.len != read->seq.len ) {
+            rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+            what = "quality length";
+        } else if( spot->fs_type != eAbisolidFSignalType_NotSet && spot->fs_type != read->fs_type ) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInconsistent);
+            what = "signal structure";
+        } else if( read->fs_type != eAbisolidFSignalType_NotSet ) {
+            if( read->fxx.len / read->seq.len != sizeof(float) ) {
+                rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+                what = read->fs_type == eAbisolidFSignalType_FTC ? "signal FTC length" : "signal FAM length";
+            } else if( read->cy3.len / read->seq.len != sizeof(float) ) {
+                rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+                what = "signal CY3 length";
+            } else if( read->txr.len / read->seq.len != sizeof(float) ) {
+                rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+                what = "signal TXR length";
+            } else if( read->cy5.len / read->seq.len != sizeof(float) ) {
+                rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+                what = "signal CY5 length";
+            }
+        }
+        if( rc == 0 ) {
+            if( (rc = pstring_concat(&spot->seq, &read->seq)) == 0 &&
+                (rc = pstring_concat(&spot->qual, &read->qual)) == 0 &&
+                (rc = pstring_concat(&spot->label, &read->label)) == 0 ) {
+                if( id == 0 ) {
+                    spot->read_seg[id].start = 0;
+                    spot->label_start[id] = 0;
+                } else {
+                    spot->read_seg[id].start = spot->read_seg[id - 1].start + spot->read_seg[id - 1].len;
+                    spot->label_start[id] = spot->label_start[id - 1] + spot->label_len[id - 1];
+                }
+                spot->label_len[id] = read->label.len;
+                spot->cs_key[id] = read->cs_key;
+                spot->filter[id] = read->filter;
+                if( read->fs_type != eAbisolidFSignalType_NotSet &&
+                    (rc = pstring_concat(&spot->fxx, &read->fxx)) == 0 &&
+                    (rc = pstring_concat(&spot->cy3, &read->cy3)) == 0 &&
+                    (rc = pstring_concat(&spot->txr, &read->txr)) == 0 &&
+                    (rc = pstring_concat(&spot->cy5, &read->cy5)) == 0 &&
+                    id == 0 ) {
+                    spot->fs_type = read->fs_type;
+                }
+            }
+        }
+    }
+    if( rc != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "read '$(label)' $(problem) in spot '$(spot_name)'",
+                "label=%.*s,problem=%s,spot_name=%s", read->label.len, read->label.data, what, spot->spot_name->data));
+    }
+    return rc;
+}
+
+rc_t SRAWriteAbsolid_Write(const SRAWriteAbsolid* cself, const SRALoaderFile* file, 
+                           const pstring* spot_name, const pstring* spot_group,
+                           const AbsolidRead* f3, const AbsolidRead* r3)
+{
+    rc_t rc = 0;
+    uint32_t nreads = ((f3 ? 1 : 0) + (r3 ? 1 : 0));
+    AbsolidSpot spot;
+
+    assert(cself != NULL);
+    assert(sizeof(cself->read_seg) == sizeof(spot.read_seg));
+    assert(file != NULL);
+    assert(spot_name);
+
+    DEBUG_MSG(3, ("spot name '%s', group '%s'\n", spot_name->data, spot_group ? spot_group->data : NULL));
+
+    if( nreads == 0 || nreads > cself->nreads ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcExcessive);
+        PLOGERR(klogErr, (klogErr, rc, "read count do not match experiment in spot $(spot): $(c)",
+                "spot=%s,c=%u", spot_name->data, nreads));
+        return rc;
+    }
+
+    AbsolidSpot_Init(&spot, spot_name, cself->nreads, cself->read_seg);
+    if( cself->nreads == 1 ) {
+        rc = AbsolidSpot_AddRead(&spot, 0, f3 ? f3 : r3);
+    } else if( cself->nreads == 2 ) {
+        rc = AbsolidSpot_AddRead(&spot, 0, f3);
+        rc = rc ? rc : AbsolidSpot_AddRead(&spot, 1, r3);
+    } else {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcFunction, rcCorrupt);
+        PLOGERR(klogInt, (klogInt, rc, "cannot handle reads: $(n) > 2!!!", "n=%hu", cself->nreads));
+        return rc;
+    }
+    if( rc == 0 && cself->ci_name == 0 ) {
+        SRAWriteAbsolid* self =(SRAWriteAbsolid*)cself;
+        if( (rc = SRAWriter_CreateTable(cself->base, "NCBI:SRA:ABI:tbl:v2")) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAWriter_WriteDefaults(cself->base)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to write table defaults");
+            return rc;
+        }
+        COL_OPEN(self->ci_name, "NAME", vdb_ascii_t);
+        COL_OPEN(self->ci_cs_key, "CS_KEY", insdc_fasta_t);
+        COL_OPEN(self->ci_csread, "CSREAD", insdc_csfasta_t);
+        COL_OPEN(self->ci_qual, "QUALITY", insdc_phred_t);
+        COL_OPEN(self->ci_read_filter, "READ_FILTER", sra_read_filter_t);
+
+        if( spot.label.len != 0 ) {
+            COL_OPEN(self->ci_label, "LABEL", vdb_ascii_t);
+            COL_OPEN(self->ci_label_start, "LABEL_START", "INSDC:coord:zero");
+            COL_OPEN(self->ci_label_len, "LABEL_LEN", "U32");
+        }
+        if( spot.fs_type != eAbisolidFSignalType_NotSet ) {
+            if( spot.fs_type == eAbisolidFSignalType_FTC ) {
+                COL_OPEN(self->ci_fxx, "FTC", ncbi_fsamp1_t);
+            } else {
+                COL_OPEN(self->ci_fxx, "FAM", ncbi_fsamp1_t);
+            }
+            COL_OPEN(self->ci_cy3, "CY3", ncbi_fsamp1_t);
+            COL_OPEN(self->ci_txr, "TXR", ncbi_fsamp1_t);
+            COL_OPEN(self->ci_cy5, "CY5", ncbi_fsamp1_t);
+        }
+    }
+    if( rc != 0 || (rc = SRAWriter_NewSpot(cself->base, NULL)) != 0 ) {
+        return rc;
+    }
+#if _DEBUGGING
+    {{
+        uint32_t i;
+
+        DEBUG_MSG(13, ("NAME: '%.*s'\n", spot.spot_name->len, spot.spot_name->data));
+        DEBUG_MSG(13, ("CSREAD: len:%u %.*s\n", spot.seq.len, spot.seq.len, spot.seq.data));
+        DEBUG_MSG(13, ("QUAL: len:%u", spot.qual.len));
+        for(i = 0; i < spot.qual.len; i++ ) {
+            DEBUG_MSG(13, (" %i", spot.qual.data[i]));
+        }
+        DEBUG_MSG(13, ("\nLABEL: '%.*s'\n", spot.label.len, spot.label.data));
+        for(i = 0; i < cself->nreads; i++) {
+            DEBUG_MSG(13, ("READ_%02u ", i));
+            DEBUG_MSG(13, ("READ_SEG: [%2u,%2u] ", spot.read_seg[i].start, spot.read_seg[i].len));
+            DEBUG_MSG(13, ("LABEL_SEG: [%2u,%2u] ", spot.label_start[i], spot.label_len[i]));
+            DEBUG_MSG(13, ("CS_KEY: %c ", spot.cs_key[i]));
+            DEBUG_MSG(13, ("READ_FLT: %s", spot.filter[i] == SRA_READ_FILTER_PASS ? "PASS" : "REJECT"));
+            DEBUG_MSG(13, ("\n"));
+        }
+        if( spot.fs_type != eAbisolidFSignalType_NotSet ) {
+            float* f;
+            DEBUG_MSG(13, ("FXX len:%u", spot.fxx.len));
+            f = (float*)spot.fxx.data;
+            for(i = 0; i < spot.fxx.len / sizeof(*f); i++) {
+                DEBUG_MSG(13, (" %f", f[i]));
+            }
+            DEBUG_MSG(13, ("\nCY3: len%u:", spot.cy3.len));
+            f = (float*)spot.cy3.data;
+            for(i = 0; i < spot.cy3.len / sizeof(*f); i++) {
+                DEBUG_MSG(13, (" %f", f[i]));
+            }
+            DEBUG_MSG(13, ("\nTXR: len:%u:", spot.txr.len));
+            f = (float*)spot.txr.data;
+            for(i = 0; i < spot.txr.len / sizeof(*f); i++) {
+                DEBUG_MSG(13, (" %f", f[i]));
+            }
+            DEBUG_MSG(13, ("\nCY5: len:%u", spot.cy5.len));
+            f = (float*)spot.cy5.data;
+            for(i = 0; i < spot.cy5.len / sizeof(*f); i++) {
+                DEBUG_MSG(13, (" %f", f[i]));
+            }
+            DEBUG_MSG(13, ("\n"));
+        }
+    }}
+#endif
+    /* this column is the one that is most likely to fail as it is required to be unique
+     * so we put it first so that we can still close the spot if it fails
+     */
+    COL_WRITE(cself->ci_name, "NAME", (*spot_name));
+    COL_WRITE(cself->ci_csread, "CSREAD", spot.seq);
+    COL_WRITE(cself->ci_qual, "QUALITY", spot.qual);
+    if( cself->ci_fxx != 0 ) {
+        if( spot.fs_type == eAbisolidFSignalType_FTC ) {
+            COL_WRITE(cself->ci_fxx, "FTC", spot.fxx);
+        } else {
+            COL_WRITE(cself->ci_fxx, "FAM", spot.fxx);
+        }
+        COL_WRITE(cself->ci_cy3, "CY3", spot.cy3);
+        COL_WRITE(cself->ci_txr, "TXR", spot.txr);
+        COL_WRITE(cself->ci_cy5, "CY5", spot.cy5);
+    }
+    if( (rc = SRAWriter_WriteSpotSegmentSimple(cself->base, file, spot_group ? spot_group->data : NULL, spot.read_seg)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+        return rc;
+    }
+    if( cself->ci_label != 0 ) {
+        COL_WRITE(cself->ci_label, "LABEL", spot.label);
+        rc = SRAWriter_WriteIdxColumn(cself->base, cself->ci_label_start, spot.label_start, cself->nreads * sizeof(spot.label_start[0]), false);
+        if(rc) {
+            PLOGERR(klogErr, (klogErr, rc, "failed to write '$(column)' column", "column=LABEL_START"));
+            return rc;
+        }
+        rc = SRAWriter_WriteIdxColumn(cself->base, cself->ci_label_len, spot.label_len, cself->nreads * sizeof(spot.label_len[0]), false);
+        if(rc) {
+            PLOGERR(klogErr, (klogErr, rc, "failed to write '$(column)' column", "column=LABEL_LEN"));
+            return rc;
+        }
+    }
+
+    rc = SRAWriter_WriteIdxColumn(cself->base, cself->ci_cs_key, spot.cs_key, cself->nreads * sizeof(spot.cs_key[0]), false);
+    if(rc) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write '$(column)' column", "column=CS_KEY"));
+        return rc;
+    }
+    rc = SRAWriter_WriteIdxColumn(cself->base, cself->ci_read_filter, spot.filter, cself->nreads * sizeof(spot.filter[0]), false);
+    if(rc) {
+        PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_FILTER"));
+        return rc;
+    }
+    return SRAWriter_CloseSpot(cself->base);
+}
diff --git a/tools/sra-load/writer-absolid.h b/tools/sra-load/writer-absolid.h
new file mode 100644
index 0000000..2384977
--- /dev/null
+++ b/tools/sra-load/writer-absolid.h
@@ -0,0 +1,94 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_writer_absolid_
+#define _sra_load_writer_absolid_
+
+#include "loader-fmt.h"
+#include "pstring.h"
+
+#define ABSOLID_FMT_MAX_NUM_READS 2
+
+#define ABSOLID_FMT_COLMASK_NOTSET 0x00
+#define ABSOLID_FMT_COLMASK_READ 0x01
+#define ABSOLID_FMT_COLMASK_QUALITY 0x02
+#define ABSOLID_FMT_COLMASK_FTC 0x04
+#define ABSOLID_FMT_COLMASK_FAM 0x08
+#define ABSOLID_FMT_COLMASK_CY3 0x10
+#define ABSOLID_FMT_COLMASK_TXR 0x20
+#define ABSOLID_FMT_COLMASK_CY5 0x40
+
+typedef enum EAbisolidReadType_enum {
+    eAbisolidReadType_Unknown = 0,
+    eAbisolidReadType_SPOT = 1,
+    eAbisolidReadType_F3 = 2,
+    eAbisolidReadType_R3 = 3,
+    eAbisolidReadType_F5_P2 = 4,
+    eAbisolidReadType_F5_BC = 5,
+    eAbisolidReadType_F5_RNA = 6,
+    eAbisolidReadType_F5_DNA = 7,
+    eAbisolidReadType_F3_DNA = 8,
+    eAbisolidReadType_BC = 9
+} EAbisolidReadType;
+
+extern const int AbisolidReadType2ReadNumber [];
+extern const char *AbisolidReadType2ReadLabel [];
+
+typedef enum EAbisolidFSignalType_enum {
+    eAbisolidFSignalType_NotSet = 0,
+    eAbisolidFSignalType_FAM = 1,
+    eAbisolidFSignalType_FTC = 2
+} EAbisolidFSignalType;
+
+typedef struct AbsolidRead_struct {
+    pstring label;
+    char cs_key;
+    pstring seq;
+    pstring qual;
+    EAbisolidFSignalType fs_type;
+    pstring fxx;
+    pstring cy3;
+    pstring txr;
+    pstring cy5;
+    SRAReadFilter filter;
+} AbsolidRead;
+
+void AbsolidRead_Init(AbsolidRead* read);
+
+EAbisolidReadType AbsolidRead_Suffix2ReadType(const char* s);
+
+typedef struct SRAWriteAbsolid SRAWriteAbsolid;
+
+rc_t SRAWriteAbsolid_Make(const SRAWriteAbsolid** cself, const SRALoaderConfig* config);
+
+rc_t SRAWriteAbsolid_MakeName(const pstring* prefix, const pstring* suffix, pstring* name);
+
+void SRAWriteAbsolid_Whack(const SRAWriteAbsolid* cself, SRATable** table);
+
+rc_t SRAWriteAbsolid_Write(const SRAWriteAbsolid* cself, const SRALoaderFile* file, 
+                           const pstring* spot_name, const pstring* spot_group,
+                           const AbsolidRead* f3, const AbsolidRead* r3);
+
+#endif /* _sra_load_writer_absolid_ */
diff --git a/tools/sra-load/writer-helicos.c b/tools/sra-load/writer-helicos.c
new file mode 100644
index 0000000..2935826
--- /dev/null
+++ b/tools/sra-load/writer-helicos.c
@@ -0,0 +1,135 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/types.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+#include "writer-helicos.h"
+#include "sra-writer.h"
+
+struct SRAWriterHelicos {
+    SRAWriter* base;
+
+    uint32_t ci_name;
+    uint32_t ci_read;
+    uint32_t ci_qual;
+};
+
+rc_t SRAWriterHelicos_Make(const SRAWriterHelicos** cself, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriterHelicos* self;
+    const PlatformXML* platform;
+
+    if( cself == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+        return rc;
+    }
+    if( platform->id != SRA_PLATFORM_HELICOS ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "platform type");
+        return rc;
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else if( (rc = SRAWriter_Make(&self->base, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize base writer");
+    }
+
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        SRAWriterHelicos_Whack(self, NULL);
+    }
+    return rc;
+}
+
+void SRAWriterHelicos_Whack(const SRAWriterHelicos* cself, SRATable** table)
+{
+    if( cself != NULL ) {
+        SRAWriterHelicos* self = (SRAWriterHelicos*)cself;
+        SRAWriter_Whack(self->base, table);
+        free(self);
+    }
+}
+
+rc_t SRAWriterHelicos_Write(const SRAWriterHelicos* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality)
+{
+    rc_t rc = 0;
+    SRAWriterHelicos* self =(SRAWriterHelicos*)cself;
+    
+    assert(self != NULL);
+    assert(data_block_ref != NULL);
+
+    DEBUG_MSG(3, ("spot name '%s'\n", name ? name->data : NULL));
+
+    if( self->ci_name == 0 ) {
+        if( (rc = SRAWriter_CreateTable(self->base, "NCBI:SRA:Helicos:tbl:v2")) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAWriter_WriteDefaults(self->base)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to write table defaults");
+            return rc;
+        }
+        COL_OPEN(self->ci_name, "NAME", vdb_ascii_t);
+        COL_OPEN(self->ci_read, "READ", insdc_fasta_t);
+        COL_OPEN(self->ci_qual, "QUALITY", insdc_phred_t);
+    }
+    if( !name || name->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "spot name");
+    }
+    if( !sequence || sequence->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "sequence");
+    } else if( !quality || sequence->len != quality->len ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, quality ? rcInconsistent : rcEmpty);
+        LOGERR(klogErr, rc, "quality");
+    }
+    if( rc != 0 || (rc = SRAWriter_NewSpot(self->base, NULL)) != 0 ) {
+        return rc;
+    }
+    COL_WRITE(self->ci_name, "NAME", (*name));
+    COL_WRITE(self->ci_read, "READ", (*sequence));
+    COL_WRITE(self->ci_qual, "QUALITY", (*quality));
+    if( (rc = SRAWriter_WriteSpotSegment(self->base, data_block_ref, NULL, sequence->len, sequence->data)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+        return rc;
+    }
+    return SRAWriter_CloseSpot(self->base);
+}
diff --git a/tools/sra-load/writer-helicos.h b/tools/sra-load/writer-helicos.h
new file mode 100644
index 0000000..a8a9f93
--- /dev/null
+++ b/tools/sra-load/writer-helicos.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_writer_454_
+#define _sra_load_writer_454_
+
+#include "loader-fmt.h"
+#include "pstring.h"
+
+typedef struct SRAWriterHelicos SRAWriterHelicos;
+
+rc_t SRAWriterHelicos_Make(const SRAWriterHelicos** cself, const SRALoaderConfig* config);
+
+void SRAWriterHelicos_Whack(const SRAWriterHelicos* cself, SRATable** table);
+
+rc_t SRAWriterHelicos_Write(const SRAWriterHelicos* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality);
+
+#endif /* _sra_load_writer_454_ */
diff --git a/tools/sra-load/writer-illumina.c b/tools/sra-load/writer-illumina.c
new file mode 100644
index 0000000..febfe41
--- /dev/null
+++ b/tools/sra-load/writer-illumina.c
@@ -0,0 +1,720 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/types.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+#include "writer-illumina.h"
+#include "sra-writer.h"
+
+void IlluminaRead_Init(IlluminaRead* read, bool name_only)
+{
+    assert(read != NULL);
+    read->read_id = ILLUMINAWRITER_READID_NONE;
+    if( !name_only ) {
+        pstring_clear(&read->seq);
+        read->qual_type = ILLUMINAWRITER_COLMASK_NOTSET;
+        pstring_clear(&read->qual);
+        pstring_clear(&read->noise);
+        pstring_clear(&read->intensity);
+        pstring_clear(&read->signal);
+        read->filter = SRA_READ_FILTER_PASS;
+    }
+}
+
+void IlluminaSpot_Init(IlluminaSpot* spot)
+{
+    memset(spot, 0, sizeof(*spot));
+    spot->qual_type = ILLUMINAWRITER_COLMASK_NOTSET;
+}
+
+static
+rc_t IlluminaSpot_Set(IlluminaSpot* spot, int r, const pstring* name, const pstring* barcode, const IlluminaRead* read)
+{
+    rc_t rc = 0;
+    if( r >= ILLUMINAWRITER_MAX_NUM_READS ) {
+        rc = RC(rcSRA, rcFormatter, rcCopying, rcData, rcOutofrange);
+    } else {
+        DEBUG_MSG(3, ("starting spot '%s' bc:'%s'\n", name->data, barcode->data));
+        spot->name = name;
+        spot->barcode = barcode;
+        spot->reads[r].read_id = read->read_id;
+        spot->reads[r].seq = read->seq.len > 0 ? &read->seq : NULL;
+        if( (read->qual_type == ILLUMINAWRITER_COLMASK_QUALITY_PHRED) ||
+            (read->qual_type == ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1) ||
+            (read->qual_type == ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4) ) {
+            spot->qual_type = read->qual_type;
+            spot->reads[r].qual = &read->qual;
+        } else if( read->qual_type != ILLUMINAWRITER_COLMASK_NOTSET ) {
+            rc = RC(rcSRA, rcFormatter, rcCopying, rcRange, rcUnrecognized);
+        }
+        spot->reads[r].noise = read->noise.len > 0 ? &read->noise : NULL;
+        spot->reads[r].intensity = read->intensity.len > 0 ? &read->intensity : NULL;
+        spot->reads[r].signal = read->signal.len > 0 ? &read->signal : NULL;
+        spot->reads[r].filter = &read->filter;
+    }
+    return rc;
+}
+
+static
+rc_t IlluminaSpot_Append(IlluminaSpot* spot, int r, const pstring* barcode, const IlluminaRead* read, const char** field)
+{
+    rc_t rc = 0;
+    /* spot->name and spot->reads[r].read_id assumed to be matched with read before call!!! */
+    if( r >= ILLUMINAWRITER_MAX_NUM_READS ) {
+        *field = "number of reads";
+        return RC(rcSRA, rcFormatter, rcCopying, rcData, rcOutofrange);
+    }
+    if( (spot->barcode == NULL && barcode != NULL) ||
+        (spot->barcode != NULL && barcode == NULL) ||
+        (spot->barcode != barcode && pstring_cmp(spot->barcode, barcode) != 0) ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+        *field = "barcode";
+        return rc;
+    }
+    if( read->seq.len > 0 ) {
+        if( spot->reads[r].seq ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+            *field = "sequence";
+            return rc;
+        } else {
+            spot->reads[r].seq = &read->seq;
+        }
+    }
+    if( read->qual_type != ILLUMINAWRITER_COLMASK_NOTSET ) {
+        if( spot->reads[r].qual ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+            *field = "quality";
+            return rc;
+        }
+        if( spot->qual_type != ILLUMINAWRITER_COLMASK_NOTSET && spot->qual_type != read->qual_type ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+            *field = "quality type";
+            return rc;
+        }
+        spot->qual_type = read->qual_type;
+        spot->reads[r].qual = &read->qual;
+    }
+
+    if( read->noise.len > 0 ) {
+        if( spot->reads[r].noise ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+            *field = "noise";
+            return rc;
+        } else {
+            spot->reads[r].noise = &read->noise;
+        }
+    }
+    if( read->intensity.len > 0 ) {
+        if( spot->reads[r].intensity ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+            *field = "intensity";
+            return rc;
+        } else {
+            spot->reads[r].intensity = &read->intensity;
+        }
+    }
+    if( read->signal.len > 0 ) {
+        if( spot->reads[r].signal ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcDuplicate);
+            *field = "signal";
+            return rc;
+        } else {
+            spot->reads[r].signal = &read->signal;
+        }
+    }
+    if( spot->reads[r].filter != NULL ) {
+        if( *(spot->reads[r].filter) != read->filter ) {
+            rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+            *field = "read_filter";
+            return rc;
+        }
+    } else {
+        spot->reads[r].filter = &read->filter;
+    }
+    return rc;
+}
+
+rc_t IlluminaSpot_Add(IlluminaSpot* spot, const pstring* name, const pstring* barcode, const IlluminaRead* read)
+{
+    rc_t rc = 0;
+
+    if( spot->nreads == 0 ) {
+        rc = IlluminaSpot_Set(spot, spot->nreads++, name, barcode, read);
+    } else if( pstring_cmp(spot->name, name) == 0 ) {
+        /* look if same read_id was already seen in this spot */
+        int32_t k;
+        for(k = 0; k < spot->nreads; k++) {
+            if( spot->reads[k].read_id == read->read_id ) {
+                const char* field;
+                rc = IlluminaSpot_Append(spot, k, barcode, read, &field);
+                if( GetRCState(rc) == rcDuplicate && read->read_id == ILLUMINAWRITER_READID_NONE ) {
+                    /* may be it is the case when readids are missing on defline and these are separate reads */
+                    k = spot->nreads + 1;
+                    rc = 0;
+                } else if( rc != 0 ) {
+                    PLOGERR(klogErr, (klogErr, rc, "$(field) for spot '$(s)'", PLOG_2(PLOG_S(field),PLOG_S(s)), field, spot->name->data));
+                }
+                break;
+            }
+        }
+        if( rc == 0 && k >= spot->nreads ) {
+            /* read was not found, adddind new read to this spot */
+            rc = IlluminaSpot_Set(spot, spot->nreads++, name, barcode, read);
+        }
+    } else {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcIgnored);
+    }
+    return rc;
+}
+
+struct SRAWriterIllumina {
+    SRAWriter* base;
+    const SRALoaderConfig* config;
+    const PlatformXML* platform;
+    uint8_t nreads;
+
+    SRASegment read_seg[ILLUMINAWRITER_MAX_NUM_READS];
+    int16_t barcode_read_id;
+    bool fixed_read_seg;
+    const ReadSpecXML_read* last_read;
+    uint32_t sequence_length;
+    
+    uint16_t col_mask;
+    uint32_t ci_name;
+    uint32_t ci_read;
+    uint32_t ci_qual;
+    uint32_t ci_signal;
+    uint32_t ci_noise;
+    uint32_t ci_intensity;
+    uint32_t ci_read_filter;
+
+};
+
+rc_t SRAWriterIllumina_Make(const SRAWriterIllumina** cself, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriterIllumina* self;
+    const PlatformXML* platform;
+    const ReadSpecXML_read* last_read;
+    int32_t spot_len;
+    uint32_t sequence_length;
+    uint8_t nreads;
+
+    if( cself == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ||
+        (rc = Experiment_GetReadNumber(config->experiment, &nreads)) != 0 ||
+        (rc = Experiment_GetSpotLength(config->experiment, &sequence_length)) != 0 ||
+        (rc = Experiment_GetRead(config->experiment, nreads - 1, &last_read)) != 0 ) {
+        return rc;
+    }
+    if( platform->id != SRA_PLATFORM_ILLUMINA ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "platform type");
+        return rc;
+    }
+    if( nreads > ILLUMINAWRITER_MAX_NUM_READS ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+        PLOGERR(klogErr, (klogErr, rc, "more than $(max) reads", PLOG_U8(max), (uint8_t)ILLUMINAWRITER_MAX_NUM_READS));
+        return rc;
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        return rc;
+    }
+    if( (rc = SRAWriter_Make(&self->base, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize base writer");
+    }
+    self->config = config;
+    self->platform = platform;
+    self->nreads = nreads;
+    self->barcode_read_id = ILLUMINAWRITER_READID_NONE;
+    self->last_read = last_read;
+    self->fixed_read_seg = true;
+    self->col_mask = ILLUMINAWRITER_COLMASK_NOTSET;
+    self->sequence_length = sequence_length;
+    spot_len = sequence_length;
+
+    do {
+        const ReadSpecXML_read* read_spec;
+        int16_t len = 0;
+        --nreads;
+        if( (rc = Experiment_GetRead(config->experiment, nreads, &read_spec)) != 0 ) {
+            break;
+        }
+        if( read_spec->read_type == rdsp_BarCode_rt ) {
+            if( self->barcode_read_id == ILLUMINAWRITER_READID_NONE ) {
+                self->barcode_read_id = nreads;
+            } else {
+                rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcDuplicate);
+                LOGERR(klogErr, rc, "only on BarCode READ_TYPE per spot supported");
+                break;
+            }
+        }
+        if( self->fixed_read_seg ) {
+            switch(read_spec->coord_type) {
+                case rdsp_BaseCoord_ct:
+                case rdsp_CycleCoord_ct:
+                    len = spot_len - read_spec->coord.start_coord + 1;
+                    break;
+                case rdsp_ExpectedBaseCall_ct:
+                case rdsp_ExpectedBaseCallTable_ct:
+                    if( read_spec->coord.expected_basecalls.default_length > 0 ) {
+                        len = read_spec->coord.expected_basecalls.default_length;
+                    } else {
+                        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+                    }
+                    break;
+                case rdsp_RelativeOrder_ct:
+                    if( nreads == 0 ) {
+                        len = spot_len - 1 + 1; /* as if BASE_COORD == 1 */
+                        break;
+                    }
+                default:
+                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcUnsupported);
+            }
+            if( rc == 0 ) {
+                spot_len -= len;
+                if( spot_len < 0 || len <= 0 ) {
+                    rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInconsistent);
+                    LOGERR(klogErr, rc, "SPOT_DECODE_SPEC and SEQUENCE_LENGTH");
+                } else {
+                    SRASegment* seg = &self->read_seg[nreads];
+                    seg->start = spot_len;
+                    seg->len = len;
+                    DEBUG_MSG(3, ("#%u read fixed length = %i\n", nreads, len));
+                }
+            } else if( GetRCState(rc) == rcUnsupported ) {
+                self->fixed_read_seg = false;
+                DEBUG_MSG(3, ("not fixed spot segmentation"));
+                rc = 0;
+            }
+        }
+    } while( rc == 0 && nreads > 0 );
+
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        SRAWriterIllumina_Whack(self, NULL);
+    }
+    return rc;
+}
+
+void SRAWriterIllumina_Whack(const SRAWriterIllumina* cself, SRATable** table)
+{
+    if( cself != NULL ) {
+        SRAWriterIllumina* self = (SRAWriterIllumina*)cself;
+        SRAWriter_Whack(self->base, table);
+        free(self);
+    }
+}
+
+typedef struct IlluminaWriterSpot_struct {
+    pstring name;
+    const char* spot_group;
+    uint16_t col_mask;
+    bool adjust_last_read_len;
+    pstring seq;
+    pstring qual;
+    pstring noise;
+    pstring intensity;
+    pstring signal;
+    SRAReadFilter filter[ILLUMINAWRITER_MAX_NUM_READS+1];
+} IlluminaWriterSpot;
+
+static
+rc_t SRAWriterIllumina_Check(SRAWriterIllumina* self,
+    IlluminaSpot* spot, IlluminaWriterSpot* final)
+{
+    rc_t rc = 0;
+    bool done, inject_barcode = false;
+    int32_t i, flt_qty, spot_len;
+    const char* what = NULL, *member_basecall = NULL;
+
+    assert(self != NULL);
+    assert(spot != NULL);
+    assert(final != NULL);
+
+    /* reorder reads ascending by file's read_ids */
+    do {
+        IlluminaSpot tmp;
+        done = true;
+        for(i = 1; i < spot->nreads; i++) {
+            if( spot->reads[i].read_id < spot->reads[i - 1].read_id ) {
+                memmove(&tmp.reads[0], &spot->reads[i], sizeof(tmp.reads[0]));
+                memmove(&spot->reads[i], &spot->reads[i - 1], sizeof(tmp.reads[0]));
+                memmove(&spot->reads[i - 1], &tmp.reads[0], sizeof(tmp.reads[0]));
+                done = false;
+            }
+        }
+    } while( !done );
+
+    /* get total spot length in bases */
+    spot_len = 0;
+    for(i = 0; rc == 0 && i < spot->nreads; i++) {
+        if( spot->reads[i].seq == NULL ) {
+            rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcNotFound);
+            what = "sequence";
+        } else {
+            spot_len += spot->reads[i].seq->len;
+            if( spot->reads[i].qual == NULL ) {
+                rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcNotFound);
+                what = "quality";
+            }
+        }
+    }
+    if( rc == 0 ) {
+        if( spot->name == NULL || spot->name->len < 1 ) {
+            rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcEmpty);
+            what = "spot name";
+        } else {
+            rc = pstring_copy(&final->name, spot->name);
+        }
+    }
+    if( rc == 0 ) {
+        final->spot_group = NULL;
+        if( spot->barcode != NULL && spot->barcode->len > 0 ) {
+            if( self->barcode_read_id != ILLUMINAWRITER_READID_NONE ) {
+                rc = Experiment_FindReadInTable(self->config->experiment, self->barcode_read_id,
+                                                spot->barcode->data, &member_basecall, &final->spot_group);
+                if( GetRCState(rc) == rcNotFound ) {
+                    /* experiment knows nothing about this barcode, so may be they assigned membership themselves, reset */
+                    member_basecall = NULL;
+                    final->spot_group = NULL;
+                    rc = 0;
+                } else if( rc != 0 ) {
+                    what = "barcode";
+                }
+            }
+            if( final->spot_group == NULL ) {
+                /* reset back to file value */
+                final->spot_group = spot->barcode->data;
+            }
+            if( member_basecall == NULL && pstring_is_fasta(spot->barcode) ) {
+                /* keep original barcode from file if it is fasta */
+                member_basecall = spot->barcode->data;
+            }
+        }
+    }
+    if( rc == 0 ) {
+        final->adjust_last_read_len = false;
+        if( self->sequence_length != spot_len ) {
+            uint16_t barc_len = member_basecall ? strlen(member_basecall) : 0;
+            if ((self->sequence_length != (spot_len + barc_len))
+
+             || (self->barcode_read_id == ILLUMINAWRITER_READID_NONE))
+      /* Otherwise inject_barcode is set
+         and when it is inserted below, it uses read_seg[self->barcode_read_id].
+         I.e. barcode_read_id should be >= 0
+         while ILLUMINAWRITER_READID_NONE == -1 */
+
+            {
+                if( spot_len > self->sequence_length ) {
+                    what = "spot too long";
+                    rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcExcessive);
+                    PLOGERR(klogErr, (klogErr, rc,
+                        "cumulative length of reads data in file(s): $(l) is greater than"
+                        " spot length declared in experiment: $(e) in spot '$(spot)'",
+                        "l=%d,e=%u,spot=%.*s", spot_len, self->sequence_length,
+                        (uint32_t)spot->name->len, spot->name->data));
+                } else if( self->fixed_read_seg && (self->last_read->read_class & SRA_READ_TYPE_BIOLOGICAL) &&
+                           spot_len > (self->sequence_length - self->read_seg[self->nreads - 1].len) &&
+                           (self->barcode_read_id == ILLUMINAWRITER_READID_NONE ||
+                            self->sequence_length - spot_len != self->read_seg[self->barcode_read_id].len) ) {
+                    final->adjust_last_read_len = true;
+                } else {
+                    what = "spot too short";
+                    rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+                    PLOGERR(klogErr, (klogErr, rc,
+                        "cumulative length of reads data in file(s): $(l) is less than"
+                        " spot length declared in experiment: $(e), most probably $(x) is absent in spot '$(spot)'",
+                        "l=%d,e=%u,spot=%.*s,x=%s", spot_len, self->sequence_length,
+                        (uint32_t)spot->name->len, spot->name->data,
+                        (self->barcode_read_id == ILLUMINAWRITER_READID_NONE ||
+                         self->sequence_length - spot_len != self->read_seg[self->barcode_read_id].len) ? "mate-pair" : "barcode" ));
+                }
+            } else {
+                spot_len += barc_len;
+                inject_barcode = true;
+                DEBUG_MSG(3, ("barcode needs to be injected into spot data\n"));
+            }
+        }
+    }
+
+    /* prepare seq/qual/signal/noise/intensity */
+    pstring_clear(&final->seq);
+    pstring_clear(&final->qual);
+    pstring_clear(&final->noise);
+    pstring_clear(&final->intensity);
+    pstring_clear(&final->signal);
+    final->col_mask = ILLUMINAWRITER_COLMASK_READ | spot->qual_type;
+    for(flt_qty = i = 0; rc == 0 && i < spot->nreads; i++, flt_qty++) {
+        /* presence of seq and qual data is checked above */
+        if( (rc = pstring_concat(&final->seq, spot->reads[i].seq)) != 0 ) {
+            what = "sequence";
+            break;
+        } else if( (rc = pstring_concat(&final->qual, spot->reads[i].qual)) != 0 ) {
+            what = "quality";
+            break;
+        }
+        if( spot->reads[i].signal != NULL ) {
+            if( (rc = pstring_concat(&final->signal, spot->reads[i].signal)) != 0 ) {
+                what = "signal";
+                break;
+            }
+            final->col_mask |= ILLUMINAWRITER_COLMASK_SIGNAL; 
+        }
+        if( spot->reads[i].noise != NULL ) {
+            if( (rc = pstring_concat(&final->noise, spot->reads[i].noise)) != 0 ) {
+                what = "noise";
+                break;
+            }
+            final->col_mask |= ILLUMINAWRITER_COLMASK_NOISE; 
+        }
+        if( spot->reads[i].intensity != NULL ) {
+            if( (rc = pstring_concat(&final->intensity, spot->reads[i].intensity)) != 0 ) {
+                what = "intensity";
+                break;
+            }
+            final->col_mask |= ILLUMINAWRITER_COLMASK_INTENSITY; 
+        }
+        if( spot->reads[i].filter != NULL && i == 0 ) {
+            final->col_mask |= ILLUMINAWRITER_COLMASK_RDFILTER; 
+        } else if( ((final->col_mask & ILLUMINAWRITER_COLMASK_RDFILTER) && spot->reads[i].filter == NULL) ||
+                   (!(final->col_mask & ILLUMINAWRITER_COLMASK_RDFILTER) && spot->reads[i].filter != NULL) ) {
+            rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+            what = "read filter";
+            break;
+        }
+        if( spot->reads[i].filter != NULL ) {
+            final->filter[flt_qty] = *(spot->reads[i].filter);
+        }
+    }
+    if( rc == 0 &&
+        (final->qual.len / final->seq.len) != ((final->col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4) ? 4 : 1) ) {
+        rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+        what = "quality length vs sequence";
+    }
+    if( rc == 0 &&
+        ((final->col_mask & ILLUMINAWRITER_COLMASK_SIGNAL) && (final->signal.len != self->sequence_length * 16)) ) {
+        rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+        what = "signal data length";
+    }
+    if( rc == 0 &&
+        ((final->col_mask & ILLUMINAWRITER_COLMASK_NOISE) && (final->noise.len != self->sequence_length * 16)) ) {
+        rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+        what = "noise data length";
+    }
+    if( rc == 0 &&
+        ((final->col_mask & ILLUMINAWRITER_COLMASK_INTENSITY) && (final->intensity.len != self->sequence_length * 16)) ) {
+        rc = RC(rcSRA, rcFormatter, rcValidating, rcData, rcInconsistent);
+        what = "intensity data length";
+    }
+
+    if( rc == 0 && inject_barcode ) {
+        /* insert barcode into spot data using read_seg information */
+        /* verified above to be present, to be fasta, and length as in XML */
+        INSDC_coord_zero from = self->read_seg[self->barcode_read_id].start;
+        INSDC_coord_len l = self->read_seg[self->barcode_read_id].len;
+        INSDC_coord_len carry = final->seq.len - from;
+        const uint32_t qual_x = ((final->col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4) ? 4 : 1);
+        pstring tmp;
+
+        DEBUG_MSG(3, ("injecting barcodr as read %i [%i,%u] \n", self->barcode_read_id, from, l));
+        final->seq.len = from;
+        final->qual.len = from * qual_x;
+        if( (rc = pstring_assign(&tmp, &final->seq.data[final->seq.len], carry)) != 0 ||
+            (rc = pstring_append(&final->seq, member_basecall, l)) != 0 ||
+            (rc = pstring_concat(&final->seq, &tmp)) != 0 ) {
+            what = "inserting barcode into sequence";
+        } else if( (rc = pstring_assign(&tmp, &final->qual.data[final->qual.len], carry * qual_x)) != 0 ||
+                   (rc = pstring_append_chr(&final->qual, 1, l * qual_x)) != 0 ||
+                   (rc = pstring_concat(&final->qual, &tmp)) != 0 ) {
+            what = "inserting barcode into quality";
+        }
+        if( rc == 0 && (final->col_mask & ILLUMINAWRITER_COLMASK_SIGNAL) ) {
+            final->signal.len = from * 16;
+            if( (rc = pstring_assign(&tmp, &final->signal.data[final->signal.len], carry * 16)) != 0 ||
+                (rc = pstring_append_chr(&final->signal, 0, l * 16)) != 0 ||
+                (rc = pstring_concat(&final->signal, &tmp)) != 0 ) {
+                what = "inserting barcode into signal";
+            }
+        }
+        if( rc == 0 && (final->col_mask & ILLUMINAWRITER_COLMASK_INTENSITY) ) {
+            final->intensity.len = from * 16;
+            if( (rc = pstring_assign(&tmp, &final->intensity.data[final->intensity.len], carry * 16)) != 0 ||
+                (rc = pstring_append_chr(&final->intensity, 0, l * 16)) != 0 ||
+                (rc = pstring_concat(&final->intensity, &tmp)) != 0 ) {
+                what = "inserting barcode into intensity";
+            }
+        }
+        if( rc == 0 && (final->col_mask & ILLUMINAWRITER_COLMASK_NOISE) ) {
+            final->noise.len = from * 16;
+            if( (rc = pstring_assign(&tmp, &final->noise.data[final->noise.len], carry * 16)) != 0 ||
+                (rc = pstring_append_chr(&final->noise, 0, l * 16)) != 0 ||
+                (rc = pstring_concat(&final->noise, &tmp)) != 0 ) {
+                what = "inserting barcode into noise";
+            }
+        }
+        for(i = flt_qty - 1; rc == 0 && i >= self->barcode_read_id; i--) {
+            final->filter[i + 1] = final->filter[i];
+        }
+        final->filter[self->barcode_read_id] = final->filter[0];
+        flt_qty++;
+    }
+    /* propogate filter value in case number of reads in files is less than in XML */
+    for(i = flt_qty; rc == 0 && i < self->nreads; i++) {
+        final->filter[i] = final->filter[0];
+    }
+
+#if _DEBUGGING
+    DEBUG_MSG(3, ("Ready: READ: %s\n", final->seq.data));
+    DEBUG_MSG(3, ("Ready: QUAL%c:", (final->col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4) ? '4' : '1'));
+    for(i = 0; i < final->qual.len; i++ ) {
+        DEBUG_MSG(3, (" %i", final->qual.data[i]));
+    }
+    DEBUG_MSG(3, ("\nReady: SGRUP: %s\n", final->spot_group));
+    for(i = 0; i < self->nreads; i++ ) {
+        DEBUG_MSG(3, ("Ready: READ_FLT[%u]: %s\n", i, final->filter[i] == SRA_READ_FILTER_PASS ? "PASS" : "REJECT"));
+    }
+#endif
+    if( rc != 0 && rc != KLogLastErrorCode() ) {
+        PLOGERR(klogErr, (klogErr, rc, "$(msg) in spot '$(spot)'", "msg=%s,spot=%.*s", what, spot->name->len, spot->name->data));
+    }
+    return rc;
+}
+
+rc_t SRAWriterIllumina_Write(const SRAWriterIllumina* cself, const SRALoaderFile* data_block_ref, IlluminaSpot* spot)
+{
+    rc_t rc = 0;
+    SRAWriterIllumina* self =(SRAWriterIllumina*)cself;
+    IlluminaWriterSpot final;
+    
+    assert(self != NULL);
+    assert(data_block_ref != NULL);
+
+    DEBUG_MSG(3, ("spot name '%s', group '%s'\n", spot->name->data, spot->barcode ? spot->barcode->data : NULL));
+
+    if( (rc = SRAWriterIllumina_Check(self, spot, &final)) != 0 ) {
+        return rc;
+    }
+    if( self->col_mask == ILLUMINAWRITER_COLMASK_NOTSET ) {
+        const char* schema;
+
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4 ) {
+            schema = "NCBI:SRA:Illumina:tbl:q4:v2";
+        } else if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1 ) {
+            schema = "NCBI:SRA:Illumina:tbl:q1:v2";
+        } else if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_PHRED ) {
+            schema = "NCBI:SRA:Illumina:tbl:phred:v2";
+        } else {
+            rc = RC(rcExe, rcTable, rcCreating, rcType, rcUnknown);
+            return rc;
+        }
+        if( (rc = SRAWriter_CreateTable(self->base, schema)) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAWriter_WriteDefaults(self->base)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to write table defaults");
+            return rc;
+        }
+        COL_OPEN(self->ci_name, "NAME", vdb_ascii_t);
+        COL_OPEN(self->ci_read, "READ", insdc_fasta_t);
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4 ) {
+            COL_OPEN(self->ci_qual, "QUALITY", ncbi_qual4_t);
+        } else if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1 ) {
+            COL_OPEN(self->ci_qual, "QUALITY", insdc_logodds_t);
+        } else if( final.col_mask & ILLUMINAWRITER_COLMASK_QUALITY_PHRED ) {
+            COL_OPEN(self->ci_qual, "QUALITY", insdc_phred_t);
+        }
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_SIGNAL ) {
+            COL_OPEN(self->ci_signal, "SIGNAL", ncbi_fsamp4_t);
+        }
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_NOISE ) {
+            COL_OPEN(self->ci_noise, "NOISE", ncbi_fsamp4_t);
+        }
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_INTENSITY ) {
+            COL_OPEN(self->ci_intensity, "INTENSITY", ncbi_fsamp4_t);
+        }
+        if( final.col_mask & ILLUMINAWRITER_COLMASK_RDFILTER ) {
+            COL_OPEN(self->ci_read_filter, "READ_FILTER", sra_read_filter_t);
+        }
+        self->col_mask = final.col_mask;
+    }
+    if( self->col_mask != final.col_mask ) {
+        rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcInconsistent);
+        LOGERR(klogInt, rc, "columns do not match to 1st spot");
+        return rc;
+    }
+    if( (rc = SRAWriter_NewSpot(self->base, NULL)) != 0 ) {
+        return rc;
+    }
+    COL_WRITE(self->ci_name, "NAME", final.name);
+    COL_WRITE(self->ci_read, "READ", final.seq);
+    COL_WRITE(self->ci_qual, "QUALITY", final.qual);
+    COL_WRITE(self->ci_noise, "NOISE", final.noise);
+    COL_WRITE(self->ci_intensity, "INTENSITY", final.intensity);
+    COL_WRITE(self->ci_signal, "SIGNAL", final.signal);
+
+    if( self->fixed_read_seg ) {
+        uint16_t tmp = 0;
+        if( final.adjust_last_read_len ) {
+            tmp = cself->read_seg[cself->nreads - 1].len;
+            self->read_seg[cself->nreads - 1].len -= cself->sequence_length - final.seq.len;
+        }
+        if( (rc = SRAWriter_WriteSpotSegmentSimple(self->base, data_block_ref, final.spot_group, cself->read_seg)) != 0 ) {
+            PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+            return rc;
+        }
+        if( final.adjust_last_read_len ) {
+            self->read_seg[cself->nreads - 1].len = tmp;
+        }
+    } else {
+        if( (rc = SRAWriter_WriteSpotSegment(self->base, data_block_ref, final.spot_group, final.seq.len, final.seq.data)) != 0 ) {
+            PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+            return rc;
+        }
+    }
+    if( self->ci_read_filter != 0 ) {
+        rc = SRAWriter_WriteIdxColumn(self->base, self->ci_read_filter, final.filter, self->nreads * sizeof(final.filter[0]), false);
+        if(rc) {
+            PLOGERR(klogInt, (klogInt, rc, "failed to write $(column) column", "column=READ_FILTER"));
+            return rc;
+        }
+    }
+    return SRAWriter_CloseSpot(self->base);
+}
diff --git a/tools/sra-load/writer-illumina.h b/tools/sra-load/writer-illumina.h
new file mode 100644
index 0000000..ca7eae5
--- /dev/null
+++ b/tools/sra-load/writer-illumina.h
@@ -0,0 +1,92 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_writer_illumina_
+#define _sra_load_writer_illumina_
+
+#include "loader-fmt.h"
+#include "pstring.h"
+
+#define ILLUMINAWRITER_MAX_NUM_READS 5
+/* these readids have special meaning,
+ * from file we can get only single digit positive readid so they never overlap
+ * readid == -1 from file means no read id was found, must be whole spot data or single read submission
+ */
+#define ILLUMINAWRITER_READID_NONE -1
+
+#define ILLUMINAWRITER_COLMASK_NOTSET 0x00
+#define ILLUMINAWRITER_COLMASK_READ 0x01
+#define ILLUMINAWRITER_COLMASK_QUALITY_PHRED 0x02
+#define ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1 0x04
+#define ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS4 0x08
+#define ILLUMINAWRITER_COLMASK_SIGNAL 0x10
+#define ILLUMINAWRITER_COLMASK_NOISE 0x20
+#define ILLUMINAWRITER_COLMASK_INTENSITY 0x40
+#define ILLUMINAWRITER_COLMASK_RDFILTER 0x80
+
+
+typedef struct IlluminaRead_struct {
+    int16_t read_id;
+    pstring seq;
+    int qual_type;
+    pstring qual;
+    pstring noise;
+    pstring intensity;
+    pstring signal;
+    SRAReadFilter filter;
+} IlluminaRead;
+
+void IlluminaRead_Init(IlluminaRead* read, bool name_only);
+
+typedef struct IlluminaSpot_struct {
+    const pstring* name;
+    const pstring* barcode;
+    int32_t nreads;
+    int qual_type;
+    struct {
+        int16_t read_id;
+        const pstring* seq;
+        const pstring* qual;
+        const pstring* noise;
+        const pstring* intensity;
+        const pstring* signal;
+        const SRAReadFilter* filter;
+    } reads[ILLUMINAWRITER_MAX_NUM_READS];
+} IlluminaSpot;
+
+void IlluminaSpot_Init(IlluminaSpot* spot);
+
+rc_t IlluminaSpot_Add(IlluminaSpot* spot, const pstring* name, const pstring* barcode, const IlluminaRead* read);
+
+
+typedef struct SRAWriterIllumina SRAWriterIllumina;
+
+rc_t SRAWriterIllumina_Make(const SRAWriterIllumina** cself, const SRALoaderConfig* config);
+
+void SRAWriterIllumina_Whack(const SRAWriterIllumina* cself, SRATable** table);
+
+rc_t SRAWriterIllumina_Write(const SRAWriterIllumina* cself, const SRALoaderFile* data_block_ref, IlluminaSpot* spot);
+
+#endif /* _sra_load_writer_illumina_ */
diff --git a/tools/sra-load/writer-ion-torrent.c b/tools/sra-load/writer-ion-torrent.c
new file mode 100644
index 0000000..174020c
--- /dev/null
+++ b/tools/sra-load/writer-ion-torrent.c
@@ -0,0 +1,262 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sra/types.h>
+#include <insdc/insdc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+#include "writer-ion-torrent.h"
+#include "sra-writer.h"
+
+struct SRAWriterIonTorrent {
+    SRAWriter* base;
+    pstring flows;
+    uint32_t flow_count;
+    pstring keys;
+
+    uint32_t ci_flowc;
+    uint32_t ci_keys;
+    uint32_t ci_name;
+    uint32_t ci_read;
+    uint32_t ci_qual;
+    uint32_t ci_signal;
+    uint32_t ci_position;
+    uint32_t ci_q_left;
+    uint32_t ci_q_right;
+    uint32_t ci_a_left;
+    uint32_t ci_a_right;
+};
+
+rc_t SRAWriterIonTorrent_Make(const SRAWriterIonTorrent** cself, const SRALoaderConfig* config)
+{
+    rc_t rc = 0;
+    SRAWriterIonTorrent* self;
+    const PlatformXML* platform;
+
+    if( cself == NULL || config == NULL ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    if( (rc = Experiment_GetPlatform(config->experiment, &platform)) != 0 ) {
+        return rc;
+    }
+    if( platform->id != SRA_PLATFORM_ION_TORRENT ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "platform type");
+        return rc;
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcSRA, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else if( (rc = SRAWriter_Make(&self->base, config)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to initialize base writer");
+    } else {
+        if( platform->param.ion_torrent.flow_sequence != NULL ) {
+            rc = pstring_assign(&self->flows, platform->param.ion_torrent.flow_sequence,
+                                       strlen(platform->param.ion_torrent.flow_sequence));
+        }
+        if( rc == 0 && platform->param.ion_torrent.key_sequence != NULL ) {
+            rc = pstring_assign(&self->keys, platform->param.ion_torrent.key_sequence,
+                                      strlen(platform->param.ion_torrent.key_sequence));
+        }
+        self->flow_count = platform->param.ion_torrent.flow_count;
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        SRAWriterIonTorrent_Whack(self, NULL);
+    }
+    return rc;
+}
+
+void SRAWriterIonTorrent_Whack(const SRAWriterIonTorrent* cself, SRATable** table)
+{
+    if( cself != NULL ) {
+        SRAWriterIonTorrent* self = (SRAWriterIonTorrent*)cself;
+        SRAWriter_Whack(self->base, table);
+        free(self);
+    }
+}
+
+static
+rc_t SRAWriterIonTorrent_Open(const SRAWriterIonTorrent* cself, bool sig_and_pos)
+{
+    rc_t rc = 0;
+    SRAWriterIonTorrent* self = (SRAWriterIonTorrent*)cself;
+
+    if( cself->ci_name == 0 ) {
+        INSDC_coord_one d = 0;
+        pstring x;
+
+        if( (rc = SRAWriter_CreateTable(self->base, "NCBI:SRA:IonTorrent:tbl:v2")) != 0 ) {
+            return rc;
+        }
+        if( (rc = SRAWriter_WriteDefaults(self->base)) != 0 ) {
+            LOGERR(klogInt, rc, "failed to write table defaults");
+            return rc;
+        }
+        COL_OPEN(self->ci_name, "NAME", vdb_ascii_t);
+        COL_OPEN(self->ci_read, "READ", insdc_fasta_t);
+        COL_OPEN(self->ci_qual, "QUALITY", insdc_phred_t);
+        COL_OPEN(self->ci_q_left, "CLIP_QUALITY_LEFT", "INSDC:coord:one");
+        COL_OPEN(self->ci_q_right, "CLIP_QUALITY_RIGHT", "INSDC:coord:one");
+        COL_OPEN(self->ci_a_left, "CLIP_ADAPTER_LEFT", "INSDC:coord:one");
+        COL_OPEN(self->ci_a_right, "CLIP_ADAPTER_RIGHT", "INSDC:coord:one");
+        COL_OPEN(self->ci_flowc, "FLOW_CHARS", insdc_fasta_t);
+        COL_OPEN(self->ci_keys, "KEY_SEQUENCE", insdc_fasta_t);
+
+        COL_WRITE_DEFAULT(self->ci_flowc, "FLOW_CHARS", self->flows);
+        COL_WRITE_DEFAULT(self->ci_keys, "KEY_SEQUENCE", self->keys);
+        if( (rc = pstring_assign(&x, &d, sizeof(d))) == 0 ) {
+            COL_WRITE_DEFAULT(self->ci_q_left, "CLIP_QUALITY_LEFT", x);
+            COL_WRITE_DEFAULT(self->ci_q_right, "CLIP_QUALITY_RIGHT", x);
+            COL_WRITE_DEFAULT(self->ci_a_left, "CLIP_ADAPTER_LEFT", x);
+            COL_WRITE_DEFAULT(self->ci_a_right, "CLIP_ADAPTER_RIGHT", x);
+        }
+    }
+    if( sig_and_pos && (cself->ci_signal == 0 || cself->ci_position == 0) ) {
+        COL_OPEN(self->ci_signal, "SIGNAL", ncbi_isamp1_t);
+        COL_OPEN(self->ci_position, "POSITION", "INSDC:position:one");
+    }
+    return rc;
+}
+
+rc_t SRAWriterIonTorrent_WriteHead(const SRAWriterIonTorrent* cself, const pstring* flow_chars, const pstring* key_sequence)
+{
+    rc_t rc = 0;
+
+    if( (rc = SRAWriterIonTorrent_Open(cself, false)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to create table");
+        return rc;
+    }
+    if( flow_chars && flow_chars->len != 0 ) {
+        if( cself->flows.len != 0 && pstring_cmp(&cself->flows, flow_chars) != 0 ) {
+            PLOGMSG(klogWarn, (klogWarn, "file FLOW_SEQUENCE do not match experiment: $(s)", PLOG_S(s), flow_chars->data));
+        }
+        /* update flow_count so signal data length will match below */
+        ((SRAWriterIonTorrent*)cself)->flow_count = flow_chars->len;
+        COL_WRITE_DEFAULT(cself->ci_flowc, "FLOW_CHARS", (*flow_chars));
+    }
+    if( key_sequence && key_sequence->len != 0 ) {
+        if( cself->keys.len != 0 && pstring_cmp(&cself->keys, key_sequence) != 0 ) {
+            PLOGMSG(klogWarn, (klogWarn, "file KEY_SEQUENCE do not match experiment: $(s)", PLOG_S(s), key_sequence->data));
+        }
+        COL_WRITE_DEFAULT(cself->ci_keys, "KEY_SEQUENCE", (*key_sequence));
+    }
+    return 0;
+}
+
+rc_t SRAWriterIonTorrent_WriteRead(const SRAWriterIonTorrent* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality,
+                            const pstring* signal, const pstring* position,
+                            INSDC_coord_one q_left, INSDC_coord_one q_right,
+                            INSDC_coord_one a_left, INSDC_coord_one a_right)
+{
+    rc_t rc = 0;
+    SRAWriterIonTorrent* self =(SRAWriterIonTorrent*)cself;
+    
+    assert(self != NULL);
+    assert(data_block_ref != NULL);
+
+    DEBUG_MSG(3, ("spot name '%s'\n", name ? name->data : NULL));
+
+    if( (rc = SRAWriterIonTorrent_Open(cself, signal || position)) != 0 ) {
+        LOGERR(klogInt, rc, "failed to open table");
+        return rc;
+    }
+    if( !name || name->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "spot name");
+    }
+    if( !sequence || sequence->len == 0 ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcEmpty);
+        LOGERR(klogErr, rc, "sequence");
+    } else if( !quality || sequence->len != quality->len ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, quality ? rcInconsistent : rcEmpty);
+        LOGERR(klogErr, rc, "quality");
+    }
+    if( signal && signal->len / self->flow_count != sizeof(uint16_t) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "signal and flow chars");
+    }
+    if( position && position->len / sequence->len != sizeof(INSDC_position_one) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "sequence and position");
+    }
+    if( q_left < 0 || (sequence && q_left > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip quality left and sequence");
+    }
+    if( q_right < 0 || (sequence && q_right > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip quality right and sequence");
+    }
+    if( a_left < 0 || (sequence && a_left > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip adapter left and sequence");
+    }
+    if( a_right < 0 || (sequence && a_right > sequence->len) ) {
+        rc = RC(rcSRA, rcFormatter, rcWriting, rcData, rcInconsistent);
+        LOGERR(klogErr, rc, "clip adapter right and sequence");
+    }
+    if( rc != 0 || (rc = SRAWriter_NewSpot(self->base, NULL)) != 0 ) {
+        return rc;
+    }
+    COL_WRITE(self->ci_name, "NAME", (*name));
+    COL_WRITE(self->ci_read, "READ", (*sequence));
+    COL_WRITE(self->ci_qual, "QUALITY", (*quality));
+    COL_WRITE(self->ci_signal, "SIGNAL", (*signal));
+    COL_WRITE(self->ci_position, "POSITION", (*position));
+
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_q_left, &q_left, sizeof(q_left), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_QUALITY_LEFT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_q_right, &q_right, sizeof(q_right), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_QUALITY_RIGHT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_a_left, &a_left, sizeof(a_left), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_ADAPTER_LEFT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteIdxColumn(self->base, self->ci_a_right, &a_right, sizeof(a_right), false)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=CLIP_ADAPTER_RIGHT"));
+        return rc;
+    }
+    if( (rc = SRAWriter_WriteSpotSegment(self->base, data_block_ref, NULL, sequence->len, sequence->data)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to write $(column) column", "column=SPOT_GROUP/READ_SEG"));
+        return rc;
+    }
+    return SRAWriter_CloseSpot(self->base);
+}
diff --git a/tools/sra-load/writer-ion-torrent.h b/tools/sra-load/writer-ion-torrent.h
new file mode 100644
index 0000000..004e443
--- /dev/null
+++ b/tools/sra-load/writer-ion-torrent.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_writer_ion_torrent_
+#define _sra_load_writer_ion_torrent_
+
+#include "loader-fmt.h"
+#include "pstring.h"
+
+typedef struct SRAWriterIonTorrent SRAWriterIonTorrent;
+
+rc_t SRAWriterIonTorrent_Make(const SRAWriterIonTorrent** cself, const SRALoaderConfig* config);
+
+void SRAWriterIonTorrent_Whack(const SRAWriterIonTorrent* cself, SRATable** table);
+
+rc_t SRAWriterIonTorrent_WriteHead(const SRAWriterIonTorrent* cself, const pstring* flow_chars, const pstring* key_sequence);
+
+rc_t SRAWriterIonTorrent_WriteRead(const SRAWriterIonTorrent* cself, const SRALoaderFile* data_block_ref,
+                            const pstring* name, const pstring* sequence, const pstring* quality,
+                            const pstring* signal, const pstring* position,
+                            INSDC_coord_one q_left, INSDC_coord_one q_right,
+                            INSDC_coord_one a_left, INSDC_coord_one a_right);
+
+#endif /* _sra_load_writer_ion_torrent_ */
diff --git a/tools/sra-load/ztr-absolid.c b/tools/sra-load/ztr-absolid.c
new file mode 100644
index 0000000..8ef2e56
--- /dev/null
+++ b/tools/sra-load/ztr-absolid.c
@@ -0,0 +1,656 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <assert.h>
+
+#include "ztr-absolid.h"
+#include "debug.h"
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define BE2H16(X) (bswap_16(X))
+#define BE2H32(X) (bswap_32(X))
+#else
+#define BE2H16(X) (X)
+#define BE2H32(X) (X)
+#endif
+
+struct ZTR_Context {
+    int versMajor;
+    int versMinor;
+    size_t current, buflen;
+    const uint8_t *buf;
+};
+
+#define METANAME_COMP strcmp
+
+static size_t strendlen(const char *src, const char *end) {
+    size_t n = 0;
+    
+    while (*src && src != end) {
+        ++src;
+        ++n;
+    }
+    return n;
+}
+
+static int count_pairs(const char *src, uint32_t len) {
+    int i, j;
+    
+    for (j = i = 0; i != len; ++i) {
+        if (*src++ == 0)
+            ++j;
+    }
+    return j >> 1;
+}
+
+#if 0
+static const char *meta_getValueForName(const nvp_t *meta, int count, const char *name) {
+    int i;
+    
+    for (i = 0; i != count; ++i) {
+        if (meta[i].name != NULL && METANAME_COMP(meta[i].name, name) == 0)
+            return meta[i].value;
+    }
+    return NULL;
+}
+#endif
+
+static const char *meta_getValueForNameAndRemove(nvp_t *meta, int count, const char *name) {
+    int i;
+    
+    for (i = 0; i != count; ++i) {
+        if (meta[i].name != NULL && METANAME_COMP(meta[i].name, name) == 0) {
+            meta[i].name = NULL;
+            return meta[i].value;
+        }
+    }
+    return NULL;
+}
+
+static void parse_meta(nvp_t *meta, int count, const char *metadata, const char *end) {
+    int i, j;
+    
+    for (i = 0; i != count && metadata <= end; ++i) {
+        j = strendlen(metadata, end);
+        if (j == 0)
+            break;
+        meta[i].name = metadata;
+        metadata += j; ++metadata;
+        meta[i].value = metadata;
+        metadata += strendlen(metadata, end); ++metadata;
+    }
+}
+
+bool ABI_ZTR_BufferIsEmpty(const ZTR_Context *ctx) {
+	return (ctx->buf == NULL || ctx->buflen == 0 || ctx->current == ctx->buflen) ? true : false;
+}
+
+static int isZTRchunk(const uint8_t type[4]) {
+  static const char *types[] = {
+    "BASE",
+    "BPOS",
+    "CLIP",
+    "CNF1",
+    "CNF4",
+    "COMM",
+    "CR32",
+    "HUFF",
+    "REGN",
+    "SAMP",
+    "SMP4",
+    "TEXT"
+  };
+  int i;
+
+  for (i = 0; i != sizeof(types) / sizeof(types[0]); ++i)
+    if (*(const uint32_t *)type == *(const uint32_t *)types[i])
+      return 1;
+  
+  return 0;
+}
+
+rc_t ABI_ZTR_ParseBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw) {
+  assert(ctx);
+  assert(ztr_raw);
+    
+  memset(ztr_raw, 0, sizeof(*ztr_raw));
+	
+  if (ABI_ZTR_BufferIsEmpty(ctx))
+    return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcEmpty );
+	
+  if (ctx->current + 4 > ctx->buflen)
+    return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+
+  *(uint32_t *)(ztr_raw->type) = *(uint32_t *)(ctx->buf + ctx->current);
+  ctx->current += 4;
+  if (ctx->current + 4 >= ctx->buflen)
+    return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+  if (!isZTRchunk(ztr_raw->type))
+    return RC(rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt);
+
+  ztr_raw->metalength = BE2H32(*(uint32_t *)(ctx->buf + ctx->current));
+  ctx->current += 4;
+  if (ztr_raw->metalength != 0) {
+    if (ctx->current + ztr_raw->metalength > ctx->buflen)
+      return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+
+    ztr_raw->meta = ctx->buf + ctx->current;
+    ctx->current += ztr_raw->metalength;
+    if (memchr(ztr_raw->meta, 0, ztr_raw->metalength) == NULL)
+      return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+  }
+  if (ctx->current + 4 > ctx->buflen)
+    return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+
+  ztr_raw->datalength = BE2H32(*(uint32_t *)(ctx->buf + ctx->current));
+  ctx->current += 4;
+  if (ztr_raw->datalength != 0) {
+    if (ctx->current + ztr_raw->datalength > ctx->buflen)
+      return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+
+    ztr_raw->data = ctx->buf + ctx->current;
+    ctx->current += ztr_raw->datalength;
+  }
+  return 0;
+}
+
+#if ZTR_USE_EXTRA_META
+rc_t ABI_ZTR_ProcessBlock(ZTR_Context *ctx, const ztr_raw_t *ztr_raw, ztr_t *dst, enum ztr_chunk_type *chunkType, nvp_t **extraMeta, int *extraMetaCount)
+#else
+rc_t ABI_ZTR_ProcessBlock(ZTR_Context *ctx, const ztr_raw_t *ztr_raw, ztr_t *dst, enum ztr_chunk_type *chunkType)
+#endif
+{
+    rc_t rc;
+    const uint8_t *ptype;
+    uint8_t format;
+    size_t metasize, datasize;
+    const uint8_t *data;
+    const char *metadata;
+    int count;
+    enum ztr_chunk_type type;
+    enum ztr_data_type datatype = i8;
+    nvp_t *meta = NULL;
+    ztr_t ztr;
+	int padded = 0;
+
+    assert(ctx);
+    assert(ztr_raw);
+    assert(dst);
+    assert(chunkType);
+
+    *chunkType = none;
+    *(void **)dst = NULL;
+    *(void **)&ztr = NULL;
+
+    ptype = ztr_raw->type;
+    count = 0;
+    metasize = ztr_raw->metalength;
+    if (metasize != 0) {
+        metadata = (char *)ztr_raw->meta;
+        assert(metadata);
+        count = count_pairs(metadata, metasize);
+        if (count < 0)
+            return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+		if (count != 0) {
+			meta = malloc(sizeof(*meta) * count);
+			if (meta == NULL)
+				return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+
+			parse_meta(meta, count, metadata, metadata + metasize);
+		}
+		else
+			meta = NULL;
+    }
+    
+    if (memcmp(ptype, "BASE", 4) == 0) {
+        type = BASE;
+        datatype = i8;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "BPOS", 4) == 0) {
+        type = BPOS;
+        datatype = i32;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "CLIP", 4) == 0) {
+        type = CLIP;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "CNF1", 4) == 0) {
+        type = CNF1;
+        datatype = i8;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "CNF4", 4) == 0) {
+        type = CNF4;
+        datatype = i8;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "COMM", 4) == 0) {
+        type = COMM;
+    }
+    else if (memcmp(ptype, "CR32", 4) == 0) {
+        type = CR32;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "HUFF", 4) == 0) {
+        type = HUFF;
+    }
+    else if (memcmp(ptype, "REGN", 4) == 0) {
+        type = REGN;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "SAMP", 4) == 0) {
+        type = SAMP;
+        datatype = i16;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "SMP4", 4) == 0) {
+        type = SMP4;
+        datatype = i16v4;
+		padded = 1;
+    }
+    else if (memcmp(ptype, "TEXT", 4) == 0) {
+        type = TEXT;
+    }
+    else {
+        type = unknown;
+        DEBUG_MSG(1, ("$(func) - '$(type)' chunk unrecognized", "func=ZTR_ProcessBlock,type=%.*s\n", 4, & ztr_raw->type ));
+    }
+    {
+        metadata = meta_getValueForNameAndRemove(meta, count, "VALTYPE");
+        
+        if (metadata != NULL) {
+            if (strcmp(metadata, "16 bit integer") == 0)
+                datatype = i16;
+            else if (strcmp(metadata, "32 bit integer") == 0)
+                datatype = i32;
+            else if (strcmp(metadata, "32 bit IEEE float") == 0)
+                datatype = f32;
+            else if (strcmp(metadata, "64 bit IEEE float") == 0)
+                datatype = f64;
+        }
+    }
+    datasize = ztr_raw->datalength;
+    if (datasize == 0)
+        data = NULL;
+    else
+    {
+		static const char zero[8];
+		
+        data = ztr_raw->data;
+        assert(data);
+        format = *data;
+		switch (format) {
+			case 0:
+				if (padded) {
+					switch (datatype) {
+						case i16:
+						case i16v4:
+							if (memcmp(data, zero, 2) == 0)
+								padded = 2;
+							break;
+						case i32:
+						case f32:
+							if (memcmp(data, zero, 4) == 0)
+								padded = 4;
+							break;
+						case f64:
+							if (memcmp(data, zero, 8) == 0)
+								padded = 8;
+							break;
+						default:
+							break;
+					}
+					data += padded;
+					datasize -= padded;
+				}
+				else {
+					data += 1;
+					datasize -= 1;
+				}
+				break;
+			default:
+				rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected );
+				PLOGERR ( klogWarn, ( klogWarn, rc,
+                                                      "$(func) - '$(type)' unexpected ZTR chunk format '$(format)'",
+                                                      "func=ZTR_ProcessBlock,type=%.*s,format=%02X", 4,
+                                                      & ztr_raw->type, format ));
+				return rc;
+				break;
+		}
+    }
+	
+    switch (type) {
+        case BASE:
+            ztr.sequence = malloc(sizeof(*ztr.sequence));
+            if (ztr.sequence == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+
+            *chunkType = type;
+            ztr.sequence->datatype = datatype;
+            ztr.sequence->datasize = datasize;
+            ztr.sequence->charset = (char *)meta_getValueForNameAndRemove(meta, count, "CSET");
+            ztr.sequence->data = (uint8_t *)data;
+            break;
+        case BPOS:
+            ztr.position = malloc(sizeof(*ztr.position));
+            if (ztr.position == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            
+            *chunkType = type;
+            ztr.position->datatype = datatype;
+            ztr.position->datasize = datasize;
+            ztr.position->data = (uint8_t *)data;
+            break;
+        case CLIP:
+            ztr.clip = malloc(sizeof(ztr.clip));
+            if (ztr.clip == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            
+            *chunkType = type;
+            ztr.clip->left  = (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3];
+            ztr.clip->right = (((((data[4] << 8) | data[5]) << 8) | data[6]) << 8) | data[7];
+            break;
+        case CNF1:
+            ztr.quality1 = malloc(sizeof(*ztr.quality1));
+            if (ztr.quality1 == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            
+            *chunkType = type;
+            ztr.quality1->datatype = datatype;
+            ztr.quality1->datasize = datasize;
+            if ((ztr.quality1->scale = (char *)meta_getValueForNameAndRemove(meta, count, "SCALE")) == NULL)
+                ztr.quality1->scale = "PH";
+            ztr.quality1->data = (uint8_t *)data;
+            break;
+        case CNF4:
+            metadata = meta_getValueForNameAndRemove(meta, count, "SCALE");
+            ztr.quality4 = malloc(sizeof(*ztr.quality4));
+            if (ztr.quality4 == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+
+            *chunkType = type;
+            ztr.quality4->datatype = datatype;
+            ztr.quality4->datasize = datasize;
+            if ((ztr.quality4->scale = (char *)meta_getValueForNameAndRemove(meta, count, "SCALE")) == NULL)
+                ztr.quality4->scale = "PH";
+            ztr.quality4->data = (uint8_t *)data;
+            break;
+        case COMM:
+            ztr.comment = malloc(sizeof(*ztr.comment) + datasize);
+            if (ztr.comment == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            *chunkType = type;
+            ztr.comment->size = datasize;
+            ztr.comment->text = (char *)data;
+            break;
+        case CR32:
+            *chunkType = ignore;
+#if 0
+            if (ctx->checksum != ((((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3]))
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+                PLOGERR (( klogErr, rc, "$(func) - checksum error", "func=ZTR_ProcessBlock" ));
+                return rc;
+            }
+            ctx->checksum = 0;
+#endif
+            break;
+        case HUFF:
+            *chunkType = ignore;
+            break;
+        case REGN:
+        {
+            int region_count;
+            int n;
+            
+            metadata = meta_getValueForNameAndRemove(meta, count, "NAME");
+            if (metadata) {
+                const char *cp;
+                
+                region_count = 1;
+                if (metadata[strlen(metadata) - 1] == ';')
+                    region_count = 0;
+                for (cp = metadata; (cp = strchr(cp, ';')) != NULL; ++cp)
+                    ++region_count;
+            }
+            else
+                region_count = 0;
+            ztr.region = NULL;
+            n = (size_t)(&ztr.region->region[region_count]) + (metadata ? (strlen(metadata) + 1) : 0);
+            ztr.region = malloc(n);
+            if (ztr.region == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+
+            *chunkType = type;
+            ztr.region->count = region_count;
+            if (region_count > 0) {
+                char *temp = (char *)&ztr.region->region[region_count];
+                int i, st;
+                
+                strcpy(temp, metadata);
+                for (i = st = 0; *temp != '\0'; ++temp) {
+                    switch (st) {
+                        case 0:
+                            if (!isspace(*temp)) {
+                                ztr.region->region[i].name = temp;
+                                ++st;
+                            }
+                            break;
+                        case 1:
+                            if (*temp == ':') {
+                                char *cp = temp - 1;
+                                
+                                while (isspace(*cp))
+                                    *cp-- = '\0';
+                                *temp = '\0';
+                                ++st;
+                            }
+                            break;
+                        case 2:
+                            if (!isspace(*temp)) {
+                                ztr.region->region[i].type = *temp;
+                                if (i == region_count - 1)
+                                    ztr.region->region[0].start = 0;
+                                else
+                                    switch (datatype) {
+                                        case i16:
+                                            ztr.region->region[i + 1].start = BE2H16(((const int16_t *)data)[i]);
+                                            break;
+                                        case i32:
+                                            ztr.region->region[i + 1].start = BE2H32(((const int32_t *)data)[i]);
+                                            break;
+                                        default:
+                                            break;
+                                    }
+                                ++i;
+                                ++st;
+                            }
+                            break;
+                        case 3:
+                            if (*temp == ';')
+                                st = 0;
+                            break;
+                    }
+                }
+            }
+        }
+            break;
+        case SAMP:
+            ztr.signal = malloc(sizeof(*ztr.signal));
+            if (ztr.signal == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            
+            *chunkType = type;
+            ztr.signal->datatype = datatype;
+            ztr.signal->datasize = datasize;
+			metadata = meta_getValueForNameAndRemove(meta, count, "OFFS");
+            ztr.signal->offset  = metadata == NULL ? 0 : strtol(metadata, NULL, 0);
+            ztr.signal->channel = (char *)meta_getValueForNameAndRemove(meta, count, "TYPE");
+            ztr.signal->data = (uint8_t *)data;
+            break;
+        case SMP4:
+            ztr.signal4 = malloc(sizeof(*ztr.signal4));
+            if (ztr.signal4 == NULL)
+                return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            
+            *chunkType = type;
+            ztr.signal4->datatype = datatype;
+            ztr.signal4->datasize = datasize;
+			metadata = meta_getValueForNameAndRemove(meta, count, "OFFS");
+            ztr.signal->offset  = metadata == NULL ? 0 : strtol(metadata, NULL, 0);
+            ztr.signal4->data = (uint8_t *)data;
+            break;
+#if ZTR_USE_TEXT_CHUNK
+        case TEXT:
+        {
+            int n;
+            const char *const end = (const char *)(data + datasize);
+            const char *cp;
+
+            for (cp = (const char *)data, n = 0; cp < end; ++n) {
+                size_t len = strendlen(cp, end);
+                
+                if (len == 0)
+                    break;
+                cp += len + 1;
+                len = strendlen(cp, end);
+                cp += len + 1;
+            }
+            if (n != 0) {
+                int i;
+
+                ztr.xmeta = malloc(sizeof(*ztr.xmeta) + (n - 1) * sizeof(nvp_t));
+                if (ztr.xmeta == NULL)
+                    return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                
+                *chunkType = type;
+                ztr.xmeta->count = n;
+                for (i = 0, cp = (const char *)data; i != n; ++i) {
+                    size_t len = strendlen(cp, end);
+                    
+                    if (len == 0)
+                        break;
+                    ztr.xmeta->data[i].name = cp;
+                    cp += len + 1;
+                    ztr.xmeta->data[i].value = cp;
+                    len = strendlen(cp, end);
+                    cp += len + 1;
+                }
+            }
+        }
+            break;
+#endif
+        default:
+            *chunkType = ignore;
+            break;
+    }
+    *dst = ztr;
+#if ZTR_USE_EXTRA_META
+    if (extraMeta != NULL && extraMetaCount != NULL) {
+        int i, j, k;
+        
+        for (k = j = i = 0; i != count; ++i)
+            if (meta[i].name != NULL) {
+                k += strlen(meta[i].name) + strlen(meta[i].value) + 2;
+                ++j;
+            }
+        *extraMetaCount = 0;
+        *extraMeta = NULL;
+        if (j > 0) {
+            *extraMeta = malloc(sizeof(nvp_t) * j + k);
+            if (*extraMeta != NULL) {
+                char *temp = (char *)(*extraMeta + j);
+                
+                for (j = i = 0; i != count; ++i)
+                    if (meta[i].name != NULL) {
+                        strcpy(temp, meta[i].name);
+                        (*extraMeta)[j].name = temp;
+                        temp += strlen(temp) + 1;
+                        strcpy(temp, meta[i].value);
+                        (*extraMeta)[j].value = temp;
+                        temp += strlen(temp) + 1;
+                    }
+            }
+        }
+    }
+#endif
+    if (meta != NULL)
+        free(meta);
+    return 0;
+}
+
+rc_t ABI_ZTR_CreateContext(ZTR_Context **ctx)
+{
+    assert(ctx);
+
+    if ((*ctx = malloc(sizeof(**ctx))) == NULL)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+
+    memset(*ctx, 0, sizeof(**ctx));
+    return 0;
+}
+
+rc_t ABI_ZTR_AddToBuffer(ZTR_Context *ctx, const uint8_t *data, uint32_t datasize) {
+    assert(ctx);
+	ctx->current = 0;
+	ctx->buf = data;
+	ctx->buflen = datasize;
+	return 0;
+}
+
+
+rc_t ABI_ZTR_ParseHeader(ZTR_Context *ctx) {
+    assert(ctx);
+    
+	if (ctx->current + 10 > ctx->buflen)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+
+    if (memcmp(ctx->buf + ctx->current, ZTR_SIG, 8) != 0)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+
+    if ((ctx->versMajor = ((uint8_t *)(ctx->buf + ctx->current))[8]) != 1)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcBadVersion );
+
+    ctx->versMinor = ((uint8_t *)(ctx->buf + ctx->current))[9];    
+	ctx->current += 10;
+    return 0;
+}
+
+rc_t ABI_ZTR_ContextRelease(ZTR_Context *self) {
+    if (self != NULL) {
+        free(self);
+    }
+    return 0;
+}
diff --git a/tools/sra-load/ztr-absolid.h b/tools/sra-load/ztr-absolid.h
new file mode 100644
index 0000000..bfb1cc6
--- /dev/null
+++ b/tools/sra-load/ztr-absolid.h
@@ -0,0 +1,124 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_ztr_absolid_
+#define _sra_load_ztr_absolid_
+
+#include <klib/defs.h>
+
+#include "ztr.h"
+
+typedef struct ztr_raw_t {
+    uint8_t type[4];
+    size_t metalength, datalength;
+    const uint8_t *meta, *data;
+} ztr_raw_t;
+
+/* allocate and initialize a ZTR parser context
+caller is responsible to free resulting pointer
+
+return 1 if context can't be allocated,
+0 for no error.
+*/
+rc_t ABI_ZTR_CreateContext(ZTR_Context **ctx);
+
+/* add some bytes to context's input buffer
+   the caller is responsible for ensuring that
+   the pointer remains valid until the bytes
+   are consumed.  the caller is responsible for
+   free'ing it.  the context will simply forget
+   the bytes when it has consumed them all.
+
+   returns 1 if data can't be added to the buffer chain,
+   0 for no error.
+*/
+rc_t ABI_ZTR_AddToBuffer(ZTR_Context *ctx, const uint8_t *data, uint32_t datasize);
+
+bool ABI_ZTR_BufferIsEmpty(const ZTR_Context *ctx);
+
+/* parse a ZTR header from the input buffer
+returns 0 if no error, 1 otherwise
+*/
+rc_t ABI_ZTR_ParseHeader(ZTR_Context *ctx);
+
+/* parse a ZTR block from the input buffer
+    returns
+        0: no error
+        1: not valid ZTR
+        2: out of memory
+
+   the caller is responsible for free'ing ztr_raw->meta and
+   ztr_raw->data when it is no longer needed
+*/
+rc_t ABI_ZTR_ParseBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw);
+
+/* cook a ztr_raw_t to produce a ztr_t
+   sets defaults, processes meta data, etc.
+
+    returns
+        0: no error
+        1: not valid ZTR
+        2: out of memory
+
+Parameters:
+    ctx [in]: the context returned from ZTR_CreateContext
+    ztr_raw [in]: the structure filled in by ZTR_ParseBlock
+    ztr [out]: the resulting data object
+    chunkType [out]: how to interpret the data object
+    if chunkType is none or unknown, it is probably an error
+    if chunkType is ignore, then the chunk was valid and known
+    but of no interest to you, e.g. a huffman dictionary chunk
+    extraMeta [out optional]: any unprocessed name-value pairs
+    extraMetaCount [out optional]: the number of unprocessed name-value pairs
+
+    NB. ztr and its pointers refer to ztr_raw, so don't free
+    ztr_raw before you are done with ztr
+
+    ztr can be free'ed in one-fell-swoop
+    *extraMeta can be free'ed in one-fell-swoop
+*/
+#if ZTR_USE_EXTRA_META
+
+rc_t ABI_ZTR_ProcessBlock(ZTR_Context *ctx,
+                          const ztr_raw_t *ztr_raw,
+                          ztr_t *ztr,
+                          enum ztr_chunk_type *chunkType,
+                          nvp_t **extraMeta,
+                          int *extraMetaCount);
+
+#else
+
+rc_t ABI_ZTR_ProcessBlock(ZTR_Context *ctx,
+                          const ztr_raw_t *ztr_raw,
+                          ztr_t *ztr,
+                          enum ztr_chunk_type *chunkType);
+#endif
+
+/* free a context created by ZTR_CreateContext
+   do this when done processing the ZTR stream.
+*/
+rc_t ABI_ZTR_ContextRelease(ZTR_Context *ctx);
+
+#endif /* _sra_load_ztr_absolid_ */
diff --git a/tools/sra-load/ztr-huffman.c b/tools/sra-load/ztr-huffman.c
new file mode 100644
index 0000000..2587cc6
--- /dev/null
+++ b/tools/sra-load/ztr-huffman.c
@@ -0,0 +1,664 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <memory.h>
+#include <byteswap.h>
+#include <endian.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "ztr-huffman.h"
+
+typedef uint8_t *sym_t;
+
+struct decode_table_t {
+	int sig_bits;
+	bitsz_t sym_len;
+	sym_t symbol;
+	decode_table_t *next;
+};
+
+static void assign(uint8_t *dst, const uint16_t code[32], int len) {
+	len = (len + 7) >> 3;
+	
+	while (len--)
+		*dst++ = *code++;
+}
+
+static void inc(uint16_t code[32], int len) {
+	int c;
+	
+	--len;
+	code[len >> 3] += 0x80 >> (len & 7);
+	len >>= 3;
+	c = code[len] >> 8;
+	while (len && c) {
+		code[len] &= 0xFF;
+		--len;
+		++code[len];
+		c = code[len] >> 8;
+	}
+}
+
+struct index_t {
+	uint16_t i, len;
+};
+
+static int64_t idx_cmp(const void *A, const void *B, void * ignored) {
+	const struct index_t *a = A;
+	const struct index_t *b = B;
+	
+    if ( a->len != b->len )
+        return (int64_t)a->len - (int64_t)b->len;
+
+    return (int64_t)a->i - (int64_t)b->i;
+}
+
+#if 0
+static void huffman_codes(uint8_t **codes, const uint8_t length[256]) {
+	struct index_t idx[256];
+	size_t total_len;
+	int i;
+	uint16_t code[32];
+	uint8_t *cp = (uint8_t *)&codes[256];
+	
+	for (total_len = 0, i = 0; i != 256; ++i) {
+		total_len += ((idx[i].len = length[i]) + 7) >> 3;
+		idx[i].i = i;
+	}
+	ksort(idx, 256, sizeof(*idx), idx_cmp, NULL);
+	for (i = 0; i != 256 && idx[i].len == 0; ++i)
+		;
+	memset(code, 0, 32);
+	for ( ; i != 256; ++i) {
+		uint16_t j = idx[i].i, n = idx[i].len;
+		codes[j] = cp;
+		assign(cp, code, n);
+		inc(code, n);
+		cp += (n + 7) >> 3;
+	}
+}
+#endif
+
+static void huffman_codes257(uint8_t **codes, const uint8_t length[257]) {
+	struct index_t idx[257];
+	size_t total_len;
+	int i;
+	uint16_t code[32];
+	uint8_t *cp = (uint8_t *)&codes[257];
+	
+	for (total_len = 0, i = 0; i != 257; ++i) {
+		total_len += ((idx[i].len = length[i]) + 7) >> 3;
+		idx[i].i = i;
+	}
+	ksort(idx, 257, sizeof(*idx), idx_cmp, NULL);
+	for (i = 0; i != 257 && idx[i].len == 0; ++i)
+		;
+	memset(code, 0, 32);
+	for ( ; i != 257; ++i) {
+		uint16_t j = idx[i].i, n = idx[i].len;
+		codes[j] = cp;
+		assign(cp, code, n);
+		inc(code, n);
+		cp += (n + 7) >> 3;
+	}
+}
+
+static void huffman_codes19(uint8_t **codes, const uint8_t length[19]) {
+	struct index_t idx[19];
+	size_t total_len;
+	int i;
+	uint16_t code[32];
+	uint8_t *cp = (uint8_t *)&codes[19];
+	
+	for (total_len = 0, i = 0; i != 19; ++i) {
+		total_len += ((idx[i].len = length[i]) + 7) >> 3;
+		idx[i].i = i;
+	}
+	ksort(idx, 19, sizeof(*idx), idx_cmp, NULL);
+	for (i = 0; i != 19 && idx[i].len == 0; ++i)
+		;
+	memset(code, 0, 32);
+	for ( ; i != 19; ++i) {
+		uint8_t j = idx[i].i, n = idx[i].len;
+		codes[j] = cp;
+		assign(cp, code, n);
+		inc(code, n);
+		cp += (n + 7) >> 3;
+	}
+}
+
+static uint16_t get_bits1(const uint8_t *data, int *bp, int bc) {
+	uint16_t val = *(uint16_t *)(data + (*bp >> 3));
+	
+#if __BYTE_ORDER == __BIG_ENDIAN
+	val = bswap_16(val);
+#endif
+	val >>= *bp & 0x07;
+	val &= (1 << bc) - 1;
+	*bp += bc;
+	return val;
+}
+
+static uint32_t get_bits4(const uint8_t *data, int *bp, int bc) {
+	uint32_t val = *(uint32_t *)(data + (*bp >> 3));
+	
+#if __BYTE_ORDER == __BIG_ENDIAN
+	val = bswap_32(val);
+#endif
+	val >>= *bp & 0x07;
+	val &= (1L << bc) - 1;
+	*bp += bc;
+	return val;
+}
+
+#if 0
+static int get_bits(const uint8_t *data, int *bp, int bc) {
+	uint32_t val = get_bits4(data, bp, bc);
+
+	fprintf(stderr, "%02X/%u\n", val, bc);
+	return val;
+}
+#else
+#define get_bits get_bits4
+#endif
+
+static rc_t build_table(
+						decode_table_t *tbl,
+						uint8_t *pcode,
+						bitsz_t len,
+						const sym_t sym,
+						bitsz_t sym_len
+) {
+	int i, code = *pcode, mask;
+	static const uint8_t rev[] = 
+		"\x00\x80\x40\xc0\x20\xa0\x60\xe0\x10\x90\x50\xd0\x30\xb0\x70\xf0"
+		"\x08\x88\x48\xc8\x28\xa8\x68\xe8\x18\x98\x58\xd8\x38\xb8\x78\xf8"
+		"\x04\x84\x44\xc4\x24\xa4\x64\xe4\x14\x94\x54\xd4\x34\xb4\x74\xf4"
+		"\x0c\x8c\x4c\xcc\x2c\xac\x6c\xec\x1c\x9c\x5c\xdc\x3c\xbc\x7c\xfc"
+		"\x02\x82\x42\xc2\x22\xa2\x62\xe2\x12\x92\x52\xd2\x32\xb2\x72\xf2"
+		"\x0a\x8a\x4a\xca\x2a\xaa\x6a\xea\x1a\x9a\x5a\xda\x3a\xba\x7a\xfa"
+		"\x06\x86\x46\xc6\x26\xa6\x66\xe6\x16\x96\x56\xd6\x36\xb6\x76\xf6"
+		"\x0e\x8e\x4e\xce\x2e\xae\x6e\xee\x1e\x9e\x5e\xde\x3e\xbe\x7e\xfe"
+		"\x01\x81\x41\xc1\x21\xa1\x61\xe1\x11\x91\x51\xd1\x31\xb1\x71\xf1"
+		"\x09\x89\x49\xc9\x29\xa9\x69\xe9\x19\x99\x59\xd9\x39\xb9\x79\xf9"
+		"\x05\x85\x45\xc5\x25\xa5\x65\xe5\x15\x95\x55\xd5\x35\xb5\x75\xf5"
+		"\x0d\x8d\x4d\xcd\x2d\xad\x6d\xed\x1d\x9d\x5d\xdd\x3d\xbd\x7d\xfd"
+		"\x03\x83\x43\xc3\x23\xa3\x63\xe3\x13\x93\x53\xd3\x33\xb3\x73\xf3"
+		"\x0b\x8b\x4b\xcb\x2b\xab\x6b\xeb\x1b\x9b\x5b\xdb\x3b\xbb\x7b\xfb"
+		"\x07\x87\x47\xc7\x27\xa7\x67\xe7\x17\x97\x57\xd7\x37\xb7\x77\xf7"
+		"\x0f\x8f\x4f\xcf\x2f\xaf\x6f\xef\x1f\x9f\x5f\xdf\x3f\xbf\x7f\xff";
+	
+	if (len > 8) {
+		int j = rev[code];
+		
+		if (tbl[j].next == NULL)
+			tbl[j].next = calloc(256, sizeof(decode_table_t));
+		if (tbl[j].next == NULL)
+			return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+		
+		tbl[j].sig_bits = 8;
+		return build_table(tbl[j].next, pcode + 1, len - 8, sym, sym_len);
+	}
+	code &= (mask = (0xFF00 >> len) & 0xFF);
+	for (i = code; i != 256; ++i) {
+		int j = rev[i];
+		
+		if ((i & mask) != code)
+			break;
+		assert(tbl[j].sig_bits == 0);
+		tbl[j].sym_len = sym ? sym_len : 1;
+		tbl[j].symbol = sym;
+		tbl[j].sig_bits = len;
+	}
+	return 0;
+}
+
+static void	fixup_table(decode_table_t *dt, decode_table_t *root) {
+	int i;
+	
+	for (i = 0; i != 256; ++i) {
+		if (dt[i].next)
+			fixup_table(dt[i].next, root);
+		else
+			dt[i].next = root;
+	}
+}
+
+static void free_table(decode_table_t *dt, decode_table_t *root) {
+	int i;
+	
+	for (i = 0; i != 256; ++i) {
+		if (dt[i].next && dt[i].next != root)
+			free_table(dt[i].next, root);
+	}
+	free(dt);
+}
+
+
+static const uint8_t symbols[290] = 
+	"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+	"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+	"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+	"\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+	"\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+	"\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+	"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
+	"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
+	"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+	"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+	"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+	"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+	"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+	"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+	"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+	"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+static void decode_zlib_length_codes(uint8_t *length, const uint8_t *data, int *bp, size_t datasize) {
+	uint8_t length19[19];
+	int llc, dc, clc;
+	uint8_t storage19[19 * sizeof(uint8_t *) + 19 * 32];
+	uint8_t **codes19;
+	decode_table_t dt1[256];
+	static const uint8_t ndx[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
+	int i, n;
+	int bits = datasize << 3;
+	
+	codes19 = (uint8_t **)storage19;
+	memset(length19, 0, sizeof(length19));
+	memset(storage19, 0, sizeof(storage19));
+	
+	llc = get_bits1(data, bp, 5) + 257;
+	dc  = get_bits1(data, bp, 5) + 1;
+	clc = get_bits1(data, bp, 4) + 4;
+
+	for (i = 0; i != clc; ++i)
+		length19[ndx[i]] = get_bits(data, bp, 3);
+
+	huffman_codes19(codes19, length19);
+	memset(dt1, 0, sizeof(dt1));
+	for (i = 0; i != 19; ++i) {
+		if (codes19[i] != NULL)
+			build_table(dt1, codes19[i], length19[i], (sym_t)(symbols + i), 8);
+	}
+	fixup_table(dt1, dt1);
+	i = 0;
+	while (bits > *bp) {
+		uint8_t code;
+		const decode_table_t *cp;
+		int bc = 8;
+		
+		if (bits - *bp < 8)
+			bc = bits - *bp;
+		code = get_bits1(data, bp, bc);
+		cp = dt1 + code;
+		/* fprintf(stderr, "%02X/%u\n", code & ((1L << cp->sig_bits) - 1), cp->sig_bits); */
+		*bp -= bc - cp->sig_bits;
+
+		switch (cp->symbol[0]) {
+			case 16:
+				n = get_bits1(data, bp, 2) + 3;
+				memset(length + i, length[i - 1], n);
+				i += n;
+				break;
+			case 17:
+				n = get_bits1(data, bp, 3) + 3;
+				memset(length + i, 0, n);
+				i += n;
+				break;
+			case 18:
+				n = get_bits1(data, bp, 7) + 11;
+				memset(length + i, 0, n);
+				i += n;
+				break;
+			default:
+				length[i++] = cp->symbol[0];
+				break;
+		}
+		if (i >= llc)
+			break;
+	}
+	assert(i == llc);
+	i = 0;
+	while (bits > *bp) {
+		uint8_t code;
+		const decode_table_t *cp;
+		int bc = 8;
+		
+		if (bits - *bp < 8)
+			bc = bits - *bp;
+		code = get_bits1(data, bp, bc);
+		cp = dt1 + code;
+		/* fprintf(stderr, "%02X/%u\n", code & ((1L << cp->sig_bits) - 1), cp->sig_bits); */
+		*bp -= bc - cp->sig_bits;
+		
+		switch (cp->symbol[0]) {
+			case 16:
+				n = get_bits1(data, bp, 2) + 3;
+				i += n;
+				break;
+			case 17:
+				n = get_bits1(data, bp, 3) + 3;
+				i += n;
+				break;
+			case 18:
+				n = get_bits1(data, bp, 7) + 11;
+				i += n;
+				break;
+			default:
+				++i;
+				break;
+		}
+		if (i >= dc)
+			break;
+	}
+	assert(i == dc);
+}
+
+rc_t handle_huffman_codes(ztr_huffman_table *y, const uint8_t *data, size_t datasize) {
+	int bc = 0;
+	int i, j;
+	uint8_t storage[257 * sizeof(uint8_t *) + 257 * 32];
+	uint8_t **codes;
+
+	codes = (uint8_t **)storage;
+	
+	get_bits1(data, &bc, 1);
+	
+	switch (get_bits1(data, &bc, 2)) {
+		default:
+			return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+		case 2:
+			y->tblcnt = 1;
+			break;
+		case 3:
+			y->tblcnt = get_bits(data, &bc, get_bits1(data, &bc, 4) + 1) + 1;
+			break;
+	}
+	y->tbl = calloc(y->tblcnt, sizeof(*y->tbl));
+	for (i = 0; i != y->tblcnt; ++i) {
+		uint8_t length[289];
+		
+		memset(length, 0, sizeof(length));
+		memset(storage, 0, sizeof(storage));
+		decode_zlib_length_codes(length, data, &bc, datasize);
+		huffman_codes257(codes, length);
+		y->tbl[i] = calloc(257, sizeof(decode_table_t));
+		for (j = 0; j != 256; ++j) {
+			if (codes[j] != NULL)
+				build_table(y->tbl[i], codes[j], length[j], (sym_t)(symbols + j), 8);
+		}
+		if (codes[256] != NULL)
+			build_table(y->tbl[i], codes[256], length[256], (sym_t)0, 0);
+	}
+	y->bits_left = (datasize << 3) - bc;
+	
+	return 0;
+}
+
+rc_t handle_special_huffman_codes(ztr_huffman_table *y, int which_one) {
+	typedef uint8_t length_array[257];
+	
+	static const length_array special0 = 
+        {
+            5, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 2, 14, 2, 14, 14, 14, 3, 14, 14, 14, 14, 14, 14, 4, 14, 
+            14, 14, 14, 14, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
+            6
+        };
+	static const length_array special1 = 
+        {
+            7, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 2, 8, 2, 8, 15, 15, 3, 8, 15, 15, 8, 15, 8, 4, 15, 
+            15, 15, 8, 8, 2, 15, 8, 8, 15, 8, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            11
+        };
+	static const length_array special2 = 
+        {
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 6, 15, 15, 6, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            3, 11, 8, 15, 15, 15, 15, 10, 15, 15, 15, 15, 6, 9, 7, 15, 
+            11, 11, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10, 15, 15, 15, 10, 
+            15, 9, 10, 10, 15, 10, 11, 11, 10, 8, 15, 15, 15, 10, 9, 15, 
+            15, 15, 15, 10, 9, 15, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 4, 7, 6, 5, 3, 6, 6, 5, 4, 15, 8, 5, 6, 4, 4, 
+            6, 15, 5, 4, 4, 5, 7, 6, 10, 6, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 
+            15
+        };
+	int i, j;
+	uint8_t storage[257 * sizeof(uint8_t *) + 257 * 32];
+	uint8_t **codes;
+	const uint8_t *special;
+    
+	codes = (uint8_t **)storage;
+	
+	switch (which_one) {
+	case 0:
+		special = special0;
+		break;
+	case 1:
+		special = special1;
+		break;
+	case 2:
+		special = special2;
+		break;
+	default:
+		assert (which_one >= 0 && which_one < 3);
+        return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+	}
+
+	if (y->tbl)
+        return 0;
+	y->tbl = calloc(y->tblcnt, sizeof(*y->tbl));
+    y->tblcnt = 1;
+    
+	for (i = 0; i != y->tblcnt; ++i) {
+		memset(storage, 0, sizeof(storage));
+		huffman_codes257(codes, special);
+		y->tbl[i] = calloc(257, sizeof(decode_table_t));
+		for (j = 0; j != 256; ++j) {
+			if (codes[j] != NULL)
+				build_table(y->tbl[i], codes[j], special[j], (sym_t)(symbols + j), 8);
+		}
+		if (codes[256] != NULL)
+			build_table(y->tbl[i], codes[256], special[256], (sym_t)0, 0);
+	}
+	y->bits_left = 0;
+	
+	return 0;
+}
+
+rc_t decompress_huffman(const ztr_huffman_table *tbl, uint8_t **Data, size_t *datasize) {
+#if 0
+	const uint8_t *src = *Data;
+	size_t srclen = *datasize, dstlen = 0;
+	size_t sbits, dalloc;
+	uint8_t *dst, *Dst;
+	int bp, tblNo = 0, n = tbl->tblcnt;
+	const decode_table_t *cp = tbl->tbl[0];
+    
+    bp =  8 - tbl->bits_left;
+	src += 2; srclen -= 2;
+    
+	Dst = dst = malloc(dalloc = srclen << 1);
+	if (Dst != NULL) {
+		sbits = srclen << 3;
+		while (sbits) {
+			uint8_t code;
+			int bc = 8;
+			
+			if (sbits < 8)
+				bc = sbits;
+			code = get_bits1(src, &bp, bc);
+			cp += code;
+            
+			bp -= bc - cp->sig_bits;
+			sbits -= cp->sig_bits;
+			src += bp >> 3;
+			bp &= 7;
+			
+			if (cp->symbol == NULL) {
+				if (cp->next == NULL) {
+					break;
+                }
+			}
+			else {
+				if (++dstlen == dalloc) {
+					void *temp;
+					
+					temp = realloc(Dst, dalloc <<= 1);
+					if (temp == NULL)
+						goto NoMem;
+					
+					Dst = temp;
+					dst = Dst + dstlen - 1;
+				}
+				tblNo = (tblNo + 1) % n;
+				*dst++ = *cp->symbol;
+			}
+			cp = cp->next;
+			if (cp == NULL)
+				cp = tbl->tbl[tblNo];
+		}
+		free((void *)*Data);
+		*Data = Dst;
+		*datasize = dstlen;
+		return 0;
+	}
+#else
+	const uint8_t *src = *Data;
+	size_t srclen = *datasize, dstlen = 0;
+	const uint8_t *endp = src + srclen;
+	size_t dalloc;
+	uint8_t *dst, *Dst;
+	int tblNo = 0, n = tbl->tblcnt;
+	const decode_table_t *cp = tbl->tbl[0];
+    uint16_t code;
+    int bits = tbl->bits_left;
+    
+	src += 2; srclen -= 2;
+    code = (*src++) >> (8 - bits);
+    
+	Dst = dst = malloc(dalloc = srclen << 2);
+	if (Dst != NULL) {
+		while (src != endp) {
+            if (bits < 8) {
+                code |= ((uint16_t)(*src++)) << bits;
+                bits += 8;
+            }
+        PROCESS_BITS:
+			cp += code & 0xFF;
+            
+            bits -= cp->sig_bits;
+            code >>= cp->sig_bits;
+            
+			if (cp->symbol == NULL) {
+                cp = cp->next;
+                if (cp)
+                    continue;
+                assert(src == endp && bits < 8);
+                bits = 0;
+                break;
+			}
+            if (++dstlen == dalloc) {
+                void *temp;
+                
+                temp = realloc(Dst, dalloc <<= 1);
+                if (temp == NULL)
+                    goto NoMem;
+                
+                Dst = temp;
+                dst = Dst + dstlen - 1;
+            }
+            *dst++ = *cp->symbol;
+            tblNo = (tblNo + 1) % n;
+			cp = tbl->tbl[tblNo];
+		}
+        if (bits)
+            goto PROCESS_BITS;
+		free((void *)*Data);
+		*Data = Dst;
+		*datasize = dstlen;
+		return 0;
+	}
+#endif
+NoMem:
+	free((void *)*Data);
+	*Data = NULL;
+	*datasize = 0;
+	return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+}
+
+rc_t free_huffman_table(ztr_huffman_table *tbl) {
+    int i;
+    
+    for (i = 0; i != tbl->tblcnt; ++i) {
+        free_table(tbl->tbl[i], tbl->tbl[i]);
+    }
+    free(tbl->tbl);
+    return 0;
+}
diff --git a/tools/sra-load/ztr-huffman.h b/tools/sra-load/ztr-huffman.h
new file mode 100644
index 0000000..3da48b4
--- /dev/null
+++ b/tools/sra-load/ztr-huffman.h
@@ -0,0 +1,45 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_ztr_huffman_
+#define _sra_load_ztr_huffman_
+
+typedef struct decode_table_t decode_table_t;
+
+typedef struct ztr_huffman_table {
+    int bits_left;
+    int tblcnt;
+    decode_table_t **tbl;
+} ztr_huffman_table;
+
+rc_t handle_huffman_codes(ztr_huffman_table *tbl, const uint8_t *data, size_t datasize);
+
+rc_t handle_special_huffman_codes(ztr_huffman_table *y, int which_one);
+
+rc_t decompress_huffman(const ztr_huffman_table *tbl, uint8_t **Data, size_t *datasize);
+
+rc_t free_huffman_table(ztr_huffman_table *);
+
+#endif /* _sra_load_ztr_huffman_ */
diff --git a/tools/sra-load/ztr-illumina.c b/tools/sra-load/ztr-illumina.c
new file mode 100644
index 0000000..6c21d56
--- /dev/null
+++ b/tools/sra-load/ztr-illumina.c
@@ -0,0 +1,1367 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <os-native.h>
+
+#include <stdlib.h>
+
+#include <string.h>
+#include <ctype.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <assert.h>
+
+#include "ztr-illumina.h"
+#include "ztr-huffman.h"
+#include "debug.h"
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+#define ltoh16(X) (X)
+#define ltoh32(X) (X)
+
+#define btoh16(X) (bswap_16(X))
+#define btoh32(X) (bswap_32(X))
+
+#else
+
+#define ltoh16(X) (bswap_16(X))
+#define ltoh32(X) (bswap_32(X))
+
+#define btoh16(X) (X)
+#define btoh32(X) (X)
+
+#endif
+
+struct ZTR_Context {
+    int versMajor;
+    int versMinor;
+    uint32_t checksum;
+    ztr_huffman_table huffman_table[128], special[3];
+    size_t current, buflen[2];
+    const uint8_t *buf[2];
+};
+
+static int ztr_read(ZTR_Context *ctx, void *Dst, size_t n) {
+    char *dst = Dst;
+    size_t i, j = 0;
+    
+    assert(ctx);
+    do {
+        if (n == 0 || ctx->buf[0] == NULL)
+            break;
+        i = ctx->buflen[0] - ctx->current;
+        if (i > n)
+            i = n;
+        memmove(dst + j, ctx->buf[0] + ctx->current, i);
+        ctx->current += i;
+        n -= i;
+        j += i;
+        if (ctx->current == ctx->buflen[0]) {
+            ctx->current = 0;
+            ctx->buflen[0] = ctx->buflen[1];
+            ctx->buf[0] = ctx->buf[1];
+            ctx->buflen[1] = 0;
+            ctx->buf[1] = NULL;
+        }
+    } while (1);
+
+    return j;
+}
+
+#define METANAME_COMP strcmp
+
+static size_t strendlen(const char *src, const char *end) {
+    size_t n = 0;
+    
+    while (*src && src != end) {
+        ++src;
+        ++n;
+    }
+    return n;
+}
+
+static int count_pairs(const char *src, uint32_t len) {
+    int i, j;
+    
+    for (j = i = 0; i != len; ++i) {
+        if (*src++ == 0)
+            ++j;
+    }
+    return (j % 2 == 0) ? (j >> 1) : 0;
+}
+
+#if 0
+static const char *meta_getValueForName(const nvp_t *meta, int count, const char *name) {
+    int i;
+    
+    for (i = 0; i != count; ++i) {
+        if (meta[i].name != NULL && METANAME_COMP(meta[i].name, name) == 0)
+            return meta[i].value;
+    }
+    return NULL;
+}
+#endif
+
+static const char *meta_getValueForNameAndRemove(nvp_t *meta, int count, const char *name) {
+    int i;
+    
+    for (i = 0; i != count; ++i) {
+        if (meta[i].name != NULL && METANAME_COMP(meta[i].name, name) == 0) {
+            meta[i].name = NULL;
+            return meta[i].value;
+        }
+    }
+    return NULL;
+}
+
+static void parse_meta(nvp_t *meta, int count, const char *metadata, const char *end) {
+    int i, j;
+    
+    for (i = 0; i != count && metadata <= end; ++i) {
+        j = strendlen(metadata, end);
+        if (j == 0)
+            break;
+        meta[i].name = metadata;
+        metadata += j; ++metadata;
+        meta[i].value = metadata;
+        metadata += strendlen(metadata, end); ++metadata;
+    }
+}
+
+bool ILL_ZTR_BufferIsEmpty(const ZTR_Context *ctx) {
+	return (ctx->buf[0] == NULL || ctx->buflen[0] == 0) ? true : false;
+}
+
+static int isZTRchunk(const uint8_t type[4]) {
+    static const char *types[] = {
+        "BASE",
+        "BPOS",
+        "CLIP",
+        "CNF1",
+        "CNF4",
+        "COMM",
+        "CR32",
+        "HUFF",
+        "REGN",
+        "SAMP",
+        "SMP4",
+        "TEXT"
+    };
+    int i;
+    
+    for (i = 0; i != sizeof(types) / sizeof(types[0]); ++i)
+        if (*(const uint32_t *)type == *(const uint32_t *)types[i])
+            return 1;
+    
+    return 0;
+}
+
+static rc_t parse_block(ZTR_Context *ctx, ztr_raw_t *ztr_raw) {
+    if (ztr_read(ctx, &ztr_raw->type, 4) != 4)
+        return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    
+    if (!isZTRchunk(ztr_raw->type))
+        return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+    
+    if (ztr_read(ctx, &ztr_raw->metalength, 4) != 4)
+        return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    
+    if (ztr_raw->metalength != 0) {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+        ztr_raw->metalength = bswap_32(ztr_raw->metalength);
+#endif
+        ztr_raw->meta = malloc(ztr_raw->metalength);
+
+        if (ztr_raw->meta == NULL)
+            return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+
+        if (ztr_read(ctx, ztr_raw->meta, ztr_raw->metalength) != ztr_raw->metalength)
+            return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    }
+    
+    if (ztr_read(ctx, &ztr_raw->datalength, 4) != 4)
+        return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    
+    if (ztr_raw->datalength != 0) {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+        ztr_raw->datalength = bswap_32(ztr_raw->datalength);
+#endif
+        ztr_raw->data = malloc(ztr_raw->datalength+1); /*** overallocating  **/
+
+        if (ztr_raw->data == NULL)
+            return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+
+        if (ztr_read(ctx, ztr_raw->data, ztr_raw->datalength) != ztr_raw->datalength)
+            return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient);
+    }
+    
+    return 0;
+}
+
+rc_t ILL_ZTR_ParseBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw)
+{
+    rc_t rc = 0;
+    uint32_t current, len[2];
+    const uint8_t *buf[2];
+    
+    assert(ctx);
+    assert(ztr_raw);
+    
+    memset(ztr_raw, 0, sizeof(*ztr_raw));
+	
+	if (ctx->buf[0] == NULL || ctx->buflen[0] == 0 || ctx->current == ctx->buflen[0] + ctx->buflen[1])
+		return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcEmpty );
+	
+    /* save input buffer state for restoration upon error exit */
+    current = ctx->current;
+    len[0] = ctx->buflen[0];
+    len[1] = ctx->buflen[1];
+    buf[0] = ctx->buf[0];
+    buf[1] = ctx->buf[1];
+    
+    rc = parse_block(ctx, ztr_raw);
+    if (rc) {
+        /* clean up and restore buffer state */
+        if (ztr_raw->data)
+            free (ztr_raw->data);
+        if (ztr_raw->meta)
+            free (ztr_raw->meta);
+        
+        ctx->current = current;
+        ctx->buflen[0] = len[0];
+        ctx->buflen[1] = len[1];
+        ctx->buf[0] = buf[0];
+        ctx->buf[1] = buf[1];
+    }
+    return rc;
+}
+
+static rc_t undo_mode_4(uint8_t **Data, size_t *datasize) {
+	const uint8_t *src = *Data, *end;
+	size_t srclen = *datasize, dstlen = 0;
+	size_t dalloc;
+	uint8_t *dst, *Dst;
+	uint8_t dup = 0;
+	uint8_t esize;
+	rc_t rc = 0;
+	int st = 0;
+	int i;
+	
+	esize = src[1];
+	if (esize < 1 || srclen % esize != 0) {
+		rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+        return rc;
+    }
+    if (esize > 2) {
+        src += esize; srclen -= esize;
+    }
+    else {
+        src += 2; srclen -= 2;
+        if (srclen == 0) {
+            rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+            return rc;
+        }
+    }
+    Dst = dst = malloc(dalloc = srclen << 4);
+    if (Dst == NULL) {
+        rc = RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+        return rc;
+    }
+
+    end = src + srclen;
+    while (src != end) {
+        size_t out = esize;
+        
+        if (st == 2)
+            out *= (dup = *src);
+        if ((dstlen += out) >= dalloc) {
+            void *temp;
+            size_t n = dst - Dst;
+            
+            while (dalloc < dstlen)
+                dalloc <<= 1;
+            temp = realloc(Dst, dalloc);
+            if (temp == NULL) {
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+                break;
+            }
+            Dst = temp;
+            dst = Dst + n;
+        }
+        switch (st) {
+            case 0:
+                st = 1;
+                memmove(dst, src, esize);
+                break;
+            case 1:
+                if (memcmp(dst, src, esize) == 0)
+                    st = 2;
+                dst += esize;
+                memmove(dst, src, esize);
+                break;
+            case 2:
+                st = 0;
+                dst += esize;
+                for (i = 0; i != dup; ++i) {
+                    memmove(dst, src - esize, esize);
+                    dst += esize;
+                }
+                break;
+        }
+        src += esize;
+    }
+
+	free((void *)*Data);
+	*Data = Dst;
+	*datasize = dstlen;
+	return rc;
+}
+
+static rc_t undo_mode_79(uint8_t **Data, size_t *datasize) {
+    uint8_t scratch[4 * 1024];
+	const uint8_t *src = *Data;
+	size_t srclen = *datasize;
+	uint8_t *dst0, *dst1, *Dst;
+	rc_t rc = 0;
+	int i, j, k, n;
+
+	if (srclen == 0) {
+		rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+        return rc;
+    }
+    assert(srclen % 4 == 0);
+    assert(srclen < sizeof(scratch));
+    
+    Dst = *Data;
+    Dst[0] = 0;
+    n = (srclen >> 2) - 1;
+    dst0 = scratch;
+    dst1 = dst0 + n;
+    src += 4;
+    for (k = i = j = 0; i != n; ++i, k += 3, j += 4) {
+        dst0[i + 0] = src[j + 0];
+        dst1[k + 0] = src[j + 1];
+        dst1[k + 1] = src[j + 2];
+        dst1[k + 2] = src[j + 3];
+    }
+
+    memmove(Dst + 1, scratch, n << 2);
+	*Data = Dst;
+	*datasize = (n << 2) + 1;
+	return rc;
+}
+
+#if 0
+static rc_t undo_mode_80(uint8_t **Data, size_t *datasize, const uint8_t *sequence, size_t basecount) {
+	uint16_t temp[4 * 1024];
+	uint16_t *A = temp;
+	uint16_t *C = A + basecount;
+	uint16_t *G = C + basecount;
+	uint16_t *T = G + basecount;
+	uint8_t *dst;
+	int i, n;
+	const uint16_t *u;
+
+	assert(basecount < 1024);
+	dst = *Data;
+	*dst = 0;
+	u = (const uint16_t *)(dst + 8);
+	for (n = basecount, i = 0; i != n; ++i, u += 4) {
+		switch (sequence[i]) {
+			default:
+			case 'A':
+			case 'a':
+				A[i] = btoh16(u[0]);
+				C[i] = btoh16(u[1]);
+				G[i] = btoh16(u[2]);
+				T[i] = btoh16(u[3]);
+				break;					
+			case 'C':
+			case 'c':
+				C[i] = btoh16(u[0]);
+				A[i] = btoh16(u[1]);
+				G[i] = btoh16(u[2]);
+				T[i] = btoh16(u[3]);
+				break;					
+			case 'G':
+			case 'g':
+				G[i] = btoh16(u[0]);
+				A[i] = btoh16(u[1]);
+				C[i] = btoh16(u[2]);
+				T[i] = btoh16(u[3]);
+				break;					
+			case 'T':
+			case 't':
+				T[i] = btoh16(u[0]);
+				A[i] = btoh16(u[1]);
+				C[i] = btoh16(u[2]);
+				G[i] = btoh16(u[3]);
+				break;
+		}
+	}
+	memmove(dst + 2, temp, 8 * basecount);
+	*datasize = 2 + 8 * basecount;
+	return 0;
+}
+#else
+static rc_t undo_mode_80(uint8_t **Data, size_t *datasize, const uint8_t *sequence, size_t basecount, long offset) {
+	const uint16_t *u = (const uint16_t *)(*Data + 8);
+	int i;
+    float *Dst = malloc(sizeof(Dst[0]) * 4 * basecount);
+    float *dst = Dst;
+
+    if (dst == NULL)
+        return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+    
+	for (i = 0; i != basecount; ++i, u += 4, dst += 4) {
+		switch (sequence[i]) {
+			default:
+			case 'A':
+			case 'a':
+				dst[0] = (long)btoh16(u[0]) - offset;
+				dst[1] = (long)btoh16(u[1]) - offset;
+				dst[2] = (long)btoh16(u[2]) - offset;
+				dst[3] = (long)btoh16(u[3]) - offset;
+				break;					
+			case 'C':
+			case 'c':
+				dst[1] = (long)btoh16(u[0]) - offset;
+				dst[0] = (long)btoh16(u[1]) - offset;
+				dst[2] = (long)btoh16(u[2]) - offset;
+				dst[3] = (long)btoh16(u[3]) - offset;
+				break;					
+			case 'G':
+			case 'g':
+				dst[2] = (long)btoh16(u[0]) - offset;
+				dst[0] = (long)btoh16(u[1]) - offset;
+				dst[1] = (long)btoh16(u[2]) - offset;
+				dst[3] = (long)btoh16(u[3]) - offset;
+				break;					
+			case 'T':
+			case 't':
+				dst[3] = (long)btoh16(u[0]) - offset;
+				dst[0] = (long)btoh16(u[1]) - offset;
+				dst[1] = (long)btoh16(u[2]) - offset;
+				dst[2] = (long)btoh16(u[3]) - offset;
+				break;
+		}
+	}
+    free(*Data);
+    *Data = (void *)Dst;
+	*datasize =  sizeof(dst[0]) * 4 * basecount;
+	return 0;
+}
+#endif
+
+static void swab16(const void *Src, void *Dst, size_t len) {
+	const uint16_t *src = Src;
+	uint16_t *dst = Dst;
+	size_t n = len >> 1;
+	size_t i;
+	
+	assert((len & 1) == 0);
+	for (i = 0; i != n; ++i)
+		dst[i] = bswap_16(src[i]);
+}
+
+static void swab32(const void *Src, void *Dst, size_t len) {
+	const uint32_t *src = Src;
+	uint32_t *dst = Dst;
+	size_t n = len >> 2;
+	size_t i;
+	
+	assert((len & 3) == 0);
+	for (i = 0; i != n; ++i)
+		dst[i] = bswap_32(src[i]);
+}
+
+static void swab64(const void *Src, void *Dst, size_t len) {
+	const uint64_t *src = Src;
+	uint64_t *dst = Dst;
+	size_t n = len >> 3;
+	size_t i;
+	
+	assert((len & 7) == 0);
+	for (i = 0; i != n; ++i)
+		dst[i] = bswap_64(src[i]);
+}
+
+static rc_t fixup_read(uint8_t *read, size_t bases) {
+	int i;
+	
+	for (i = 0; i != bases; ++i)
+		switch (read[i]) {
+			case 'A':
+			case 'C':
+			case 'G':
+			case 'T':
+			case 'a':
+			case 'c':
+			case 'g':
+			case 't':
+				break;
+			default:
+				read[i] = 'N';
+				break;
+		}
+	return 0;
+}
+
+static rc_t fixup_quality4(uint8_t *qual, const uint8_t *read, size_t bases) {
+	uint8_t src[4 * 1024];
+	const uint8_t *src0 = src; /* called */
+	const uint8_t *src1 = src0 + bases; /* not called */
+	int i, j, k;
+	
+	assert(bases < 1024);
+	memmove(src, qual, bases * 4);
+	
+	for (k = j = i = 0; i != bases; ++i, j += 3, k += 4) {
+		switch (read[i]) {
+			default:
+			case 'A':
+			case 'a':
+				qual[k + 0] = src0[i];
+				qual[k + 1] = src1[j + 0];
+				qual[k + 2] = src1[j + 1];
+				qual[k + 3] = src1[j + 2];
+				break;
+			case 'C':
+			case 'c':
+				qual[k + 0] = src1[j + 0];
+				qual[k + 1] = src0[i];
+				qual[k + 2] = src1[j + 1];
+				qual[k + 3] = src1[j + 2];
+				break;
+			case 'G':
+			case 'g':
+				qual[k + 0] = src1[j + 0];
+				qual[k + 1] = src1[j + 1];
+				qual[k + 2] = src0[i];
+				qual[k + 3] = src1[j + 2];
+				break;
+			case 'T':
+			case 't':
+				qual[k + 0] = src1[j + 0];
+				qual[k + 1] = src1[j + 1];
+				qual[k + 2] = src1[j + 2];
+				qual[k + 3] = src0[i];
+				break;
+		}
+	}
+	return 0;
+}
+
+static rc_t fixup_trace_reorder(float *dst, const uint16_t *src, long offset, size_t bases) {
+	size_t i, j;
+	const uint16_t *A = src;
+	const uint16_t *C = A + bases;
+	const uint16_t *G = C + bases;
+	const uint16_t *T = G + bases;
+	
+	for (j = i = 0; i < bases; ++i, j += 4) {
+		dst[j + 0] = ((long)A[i] - offset);
+		dst[j + 1] = ((long)C[i] - offset);
+		dst[j + 2] = ((long)G[i] - offset);
+		dst[j + 3] = ((long)T[i] - offset);
+	}
+	
+	return 0;
+}
+
+static rc_t fixup_trace(float *dst, const uint16_t *src, long offset, size_t bases) {
+	size_t i;
+	
+    /*
+     float x;
+     float y;
+     int t;
+     
+     y = clip(x + offset, 0, 64k);
+     t = rint(y);
+     write(t & 0xFFFF)
+    */
+    
+    if (offset == 0) {
+        for (i = 0; i != bases * 4; ++i)
+            dst[i] = src[i];
+        return 0;
+    }
+	for (i = 0; i != bases * 4; ++i)
+		dst[i] = ((long)src[i] - offset);
+	return 0;
+}
+
+rc_t ILL_ZTR_Decompress(ZTR_Context *ctx, enum ztr_chunk_type type, ztr_t ztr, const ztr_t base) {
+	int padded = 1;
+	size_t *datasize;
+	uint8_t **data;
+	enum ztr_data_type datatype;
+	static char zero[8];
+	rc_t rc = 0;
+	
+	if (ztr.sequence == NULL)
+		return 0;
+    switch (type) {
+        case BASE:
+			data = &ztr.sequence->data;
+			datasize = &ztr.sequence->datasize;
+			datatype = ztr.sequence->datatype;
+            break;
+        case BPOS:
+			data = &ztr.position->data;
+			datasize = &ztr.position->datasize;
+			datatype = ztr.position->datatype;
+            break;
+        case CNF1:
+			data = &ztr.quality1->data;
+			datasize = &ztr.quality1->datasize;
+			datatype = ztr.quality1->datatype;
+            break;
+        case CNF4:
+			data = &ztr.quality4->data;
+			datasize = &ztr.quality4->datasize;
+			datatype = ztr.quality4->datatype;
+            break;
+        case SAMP:
+			data = &ztr.signal->data;
+			datasize = &ztr.signal->datasize;
+			datatype = ztr.signal->datatype;
+            break;
+        case SMP4:
+			data = &ztr.signal4->data;
+			datasize = &ztr.signal4->datasize;
+			datatype = ztr.signal4->datatype;
+            break;
+        default:
+			return 0;
+    }
+	assert(*datasize);
+	assert(*data);
+
+    if ((*data)[0] == 0x4D) {
+        switch ((*data)[1]) {
+        case 1:
+            rc = handle_special_huffman_codes(&ctx->special[0], 0);
+            if (rc == 0)
+                rc = decompress_huffman(&ctx->special[0], data, datasize);
+            if (rc == 0)
+                (*data)[0] = 0;
+            break;
+        case 2:
+            rc = handle_special_huffman_codes(&ctx->special[1], 1);
+            if (rc == 0)
+                rc = decompress_huffman(&ctx->special[1], data, datasize);
+            if (rc == 0)
+                (*data)[0] = 0;
+            break;
+        case 3:
+            rc = handle_special_huffman_codes(&ctx->special[2], 2);
+            if (rc == 0)
+                rc = decompress_huffman(&ctx->special[2], data, datasize);
+            if (rc == 0)
+                (*data)[0] = 0;
+            break;
+        default:
+            if ((*data)[1] < 128)
+                rc = RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+            else
+                rc = decompress_huffman(&ctx->huffman_table[(*data)[1] - 128], data, datasize);
+        }
+    }
+	while (rc == 0) {
+		switch (**data) {
+		case 0:
+			switch (datatype) {
+				case i16:
+				case i16v4:
+					if (memcmp(*data, zero, 2) == 0)
+						padded = 2;
+					*datasize -= padded;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+					swab16((*data) + padded, *data, *datasize);
+#else
+					memmove(*data, (*data) + padded, *datasize);
+#endif
+					break;
+				case i32:
+				case f32:
+					if (memcmp(*data, zero, 4) == 0)
+						padded = 4;
+					*datasize -= padded;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+					swab32((*data) + padded, *data, *datasize);
+#else
+					memmove(*data, (*data) + padded, *datasize);
+#endif
+					break;
+				case f64:
+					if (memcmp(*data, zero, 8) == 0)
+						padded = 8;
+					*datasize -= padded;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+					swab64((*data) + padded, *data, *datasize);
+#else
+					memmove(*data, (*data) + padded, *datasize);
+#endif
+					break;
+				default:
+					*datasize -= padded;
+					memmove(*data, (*data) + padded, *datasize);
+					break;
+			}
+			switch (type) {
+			case BASE:
+				rc = fixup_read(*data, *datasize);
+				break;
+			case CNF4:
+				rc = fixup_quality4(*data, base.sequence->data, base.sequence->datasize);
+				break;
+			case SMP4:
+                {
+                    float *dst = malloc(sizeof(*dst) * 4 * base.sequence->datasize);
+                    if (dst == NULL)
+                        return RC(rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted);
+                    
+                    if (ztr.signal4->Type != NULL && memcmp("SLXN", ztr.signal4->Type, 5) == 0)
+                        rc = fixup_trace_reorder(dst, (const uint16_t *)*data, ztr.signal4->offset, base.sequence->datasize);
+                    else
+                        rc = fixup_trace(dst, (const uint16_t *)*data, ztr.signal4->offset, base.sequence->datasize);
+                    free(*data);
+                    *data = ( uint8_t* ) dst;
+                    *datasize = sizeof(*dst) * 4 * base.sequence->datasize;
+                }
+				break;
+			default:
+				break;
+			}
+			return rc;
+		case 4:
+			rc = undo_mode_4(data, datasize);
+			if (rc)
+				return rc;
+			break;
+		case 79:
+			rc = undo_mode_79(data, datasize);
+			if (rc)
+				return rc;
+			break;
+		case 80:
+			if (base.sequence->data == NULL || base.sequence->datasize == 0) {
+				**(uint16_t **)data = 0;
+				memmove(*data + 2, *data + 8, *datasize - 8);
+				*datasize -= 6;
+			}
+			else {
+				rc = undo_mode_80(data, datasize, base.sequence->data, base.sequence->datasize, ztr.signal4->offset);
+                if (rc == 0)
+                    ztr.signal4->datatype = f32;
+                return rc;
+			}
+			break;
+		default:
+			rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcUnexpected );
+			PLOGERR ( klogInt, ( klogInt, rc, "$(func) - don't know how to handle format '$(format)'",
+                                             "func=ZTR_Decompress,format=%02X", *data ));
+		}
+	}
+	return rc;
+}
+
+#if ZTR_USE_EXTRA_META
+rc_t ILL_ZTR_ProcessBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw, ztr_t *dst, enum ztr_chunk_type *chunkType, nvp_t **extraMeta, int *extraMetaCount)
+#else
+rc_t ILL_ZTR_ProcessBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw, ztr_t *dst, enum ztr_chunk_type *chunkType)
+#endif
+{
+    rc_t rc;
+    const uint8_t *ptype;
+    size_t metasize, datasize;
+    uint8_t *data;
+    const char *metadata;
+    int count;
+    enum ztr_chunk_type type = 0;
+    enum ztr_data_type datatype = 0;
+    nvp_t *meta = NULL;
+    ztr_t ztr;
+
+    assert(ctx);
+    assert(ztr_raw);
+    assert(dst);
+    assert(chunkType);
+
+    *chunkType = none;
+    *(void **)dst = NULL;
+    *(void **)&ztr = NULL;
+	
+    ptype = ztr_raw->type;
+    count = 0;
+    metasize = ztr_raw->metalength;
+    if (metasize != 0) {
+        metadata = (char *)ztr_raw->meta;
+
+        count = count_pairs(metadata, metasize);
+        if (count < 0) {
+            rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+            PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk metadata malformed pairs",
+                                 "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+            return rc;
+        }
+
+		if (count == 0)
+			meta = NULL;
+        else {
+			meta = calloc(count, sizeof(*meta));
+			if (meta == NULL) {
+				rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+				PLOGERR ( klogSys, ( klogSys, rc, "$(func) - '$(type)' chunk metadata pair",
+						  "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+				return rc;
+			}
+			parse_meta(meta, count, metadata, metadata + metasize);
+		}
+    }
+    
+    if (memcmp(ptype, "BASE", 4) == 0) {
+        type = BASE;
+        datatype = i8;
+    }
+    else if (memcmp(ptype, "BPOS", 4) == 0) {
+        type = BPOS;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "CLIP", 4) == 0) {
+        type = CLIP;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "CNF1", 4) == 0) {
+        type = CNF1;
+        datatype = i8;
+    }
+    else if (memcmp(ptype, "CNF4", 4) == 0) {
+        type = CNF4;
+        datatype = i8;
+    }
+    else if (memcmp(ptype, "COMM", 4) == 0) {
+        type = COMM;
+    }
+    else if (memcmp(ptype, "CR32", 4) == 0) {
+        type = CR32;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "HUFF", 4) == 0) {
+        type = HUFF;
+    }
+    else if (memcmp(ptype, "REGN", 4) == 0) {
+        type = REGN;
+        datatype = i32;
+    }
+    else if (memcmp(ptype, "SAMP", 4) == 0) {
+        type = SAMP;
+        datatype = i16;
+    }
+    else if (memcmp(ptype, "SMP4", 4) == 0) {
+        type = SMP4;
+        datatype = i16v4;
+    }
+    else if (memcmp(ptype, "TEXT", 4) == 0) {
+        type = TEXT;
+    }
+
+    metadata = meta_getValueForNameAndRemove(meta, count, "VALTYPE");
+    if (metadata != NULL) {
+        if (strcmp(metadata, "16 bit integer") == 0)
+            datatype = i16;
+        else if (strcmp(metadata, "32 bit integer") == 0)
+            datatype = i32;
+        else if (strcmp(metadata, "32 bit IEEE float") == 0)
+            datatype = f32;
+        else if (strcmp(metadata, "64 bit IEEE float") == 0)
+            datatype = f64;
+    }
+
+    datasize = ztr_raw->datalength;
+    data = ztr_raw->data;
+#if 0
+	if (datasize > 0 && *data == 0x4D) {
+		if (data[1] < 128)
+			return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+		rc = decompress_huffman(&ctx->huffman_table[data[1] - 128], (const uint8_t **)&data, &datasize);
+		if (rc)
+			return rc;
+		ztr_raw->datalength = datasize;
+		ztr_raw->data = (uint8_t *)data;
+	}
+#endif
+
+    switch (type) {
+        case BASE:
+            ztr.sequence = malloc(sizeof(*ztr.sequence));
+            if (ztr.sequence == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                                     "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.sequence->datatype = datatype;
+            ztr.sequence->datasize = datasize;
+            ztr.sequence->charset = (char *)meta_getValueForNameAndRemove(meta, count, "CSET");
+            ztr.sequence->data = (uint8_t *)data;
+            break;
+        case BPOS:
+            ztr.position = malloc(sizeof(*ztr.position));
+            if (ztr.position == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                                     "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.position->datatype = datatype;
+            ztr.position->datasize = datasize;
+            ztr.position->data = (uint8_t *)data;
+            break;
+        case CLIP:
+            ztr.clip = malloc(sizeof(ztr.clip));
+            if (ztr.clip == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                                     "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.clip->left  = (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3];
+            ztr.clip->right = (((((data[4] << 8) | data[5]) << 8) | data[6]) << 8) | data[7];
+            break;
+        case CNF1:
+            ztr.quality1 = malloc(sizeof(*ztr.quality1));
+            if (ztr.quality1 == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.quality1->datatype = datatype;
+            ztr.quality1->datasize = datasize;
+            if ((ztr.quality1->scale = (char *)meta_getValueForNameAndRemove(meta, count, "SCALE")) == NULL)
+                ztr.quality1->scale = "PH";
+            ztr.quality1->data = (uint8_t *)data;
+            break;
+        case CNF4:
+            ztr.quality4 = malloc(sizeof(*ztr.quality4));
+            if (ztr.quality4 == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.quality4->datatype = datatype;
+            ztr.quality4->datasize = datasize;
+            if ((ztr.quality4->scale = (char *)meta_getValueForNameAndRemove(meta, count, "SCALE")) == NULL)
+                ztr.quality4->scale = "PH";
+            ztr.quality4->data = (uint8_t *)data;
+            break;
+        case COMM:
+            ztr.comment = malloc(sizeof(*ztr.comment) + datasize);
+            if (ztr.comment == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.comment->size = datasize;
+            ztr.comment->text = (char *)data;
+            break;
+#if ZTR_USE_TEXT_CHUNK
+#else
+        case TEXT:
+#endif
+        case CR32:
+            *chunkType = ignore;
+#if 0
+            if (ctx->checksum != ((((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3]))
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - checksum error", "func=ZTR_ProcessBlock" ));
+                return rc;
+            }
+            ctx->checksum = 0;
+#endif
+            break;
+        case HUFF:
+            *chunkType = ignore;
+			if (data[1] < 128)
+				return RC(rcSRA, rcFormatter, rcParsing, rcData, rcInvalid);
+			rc = handle_huffman_codes(&ctx->huffman_table[data[1] - 128], data + 2, datasize - 2);
+			if (rc)
+				return rc;
+            break;
+        case REGN:
+        {
+            int region_count;
+            int n;
+            
+            metadata = meta_getValueForNameAndRemove(meta, count, "NAME");
+            if (metadata) {
+                const char *cp;
+                
+                region_count = 1;
+                if (metadata[strlen(metadata) - 1] == ';')
+                    region_count = 0;
+                for (cp = metadata; (cp = strchr(cp, ';')) != NULL; ++cp)
+                    ++region_count;
+            }
+            else
+                region_count = 0;
+            switch (datatype) {
+                case i16:
+                    if ((datasize & 1) != 0) {
+                        --datasize;
+                        data = ((uint8_t *)data) + 1;
+                    }
+                    if ((datasize >> 1) < (region_count - 1)) {
+                        rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+                        PLOGERR ( klogSys, ( klogSys, rc, "$(func) - '$(type)' chunk data",
+                                  "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                        return rc;
+                    }
+                    break;
+                case i32:
+                    if ((datasize & 1) != 0) {
+                        --datasize;
+                        data = ((uint8_t *)data) + 1;
+                    }
+                    if ((datasize >> 2) < (region_count - 1)) {
+                        rc = RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+                        PLOGERR ( klogSys, ( klogSys, rc, "$(func) - '$(type)' chunk data",
+                                  "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                        return rc;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            ztr.region = NULL;
+            n = (size_t)(&ztr.region->region[region_count]) + (metadata ? (strlen(metadata) + 1) : 0);
+            ztr.region = malloc(n);
+            if (ztr.region == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogSys, ( klogSys, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.region->count = region_count;
+            if (region_count > 0) {
+                char *temp = (char *)&ztr.region->region[region_count];
+                int i, st;
+                
+                strcpy(temp, metadata);
+                for (i = st = 0; *temp != '\0'; ++temp) {
+                    switch (st) {
+                        case 0:
+                            if (!isspace(*temp)) {
+                                ztr.region->region[i].name = temp;
+                                ++st;
+                            }
+                            break;
+                        case 1:
+                            if (*temp == ':') {
+                                char *cp = temp - 1;
+                                
+                                while (isspace(*cp))
+                                    *cp-- = '\0';
+                                *temp = '\0';
+                                ++st;
+                            }
+                            break;
+                        case 2:
+                            if (!isspace(*temp)) {
+                                ztr.region->region[i].type = *temp;
+                                if (i == region_count - 1)
+                                    ztr.region->region[0].start = 0;
+                                else
+                                    switch (datatype) {
+                                        case i16:
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                                            ztr.region->region[i + 1].start = bswap_16(((const int16_t *)data)[i]);
+#else
+                                            ztr.region->region[i + 1].start = ((const int16_t *)data)[i];
+#endif
+                                            break;
+                                        case i32:
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                                            ztr.region->region[i + 1].start = bswap_32(((const int32_t *)data)[i]);
+#else
+                                            ztr.region->region[i + 1].start = ((const int32_t *)data)[i];
+#endif
+                                            break;
+                                        default:
+                                            break;
+                                    }
+                                ++i;
+                                ++st;
+                            }
+                            break;
+                        case 3:
+                            if (*temp == ';')
+                                st = 0;
+                            break;
+                    }
+                }
+            }
+        }
+            break;
+        case SAMP:
+            ztr.signal = malloc(sizeof(*ztr.signal));
+            if (ztr.signal == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.signal->datatype = datatype;
+            ztr.signal->datasize = datasize;
+			metadata = (char *)meta_getValueForNameAndRemove(meta, count, "OFFS");
+			ztr.signal->offset = metadata == NULL ? 0 : strtol(metadata, 0, 0);
+            ztr.signal->channel = (char *)meta_getValueForNameAndRemove(meta, count, "TYPE");
+            ztr.signal->data = (uint8_t *)data;
+            break;
+        case SMP4:
+            ztr.signal4 = malloc(sizeof(*ztr.signal4));
+            if (ztr.signal4 == NULL)
+            {
+                rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                           "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                return rc;
+            }
+            *chunkType = type;
+            ztr.signal4->datatype = datatype;
+            ztr.signal4->datasize = datasize;
+			metadata = (char *)meta_getValueForNameAndRemove(meta, count, "OFFS");
+			ztr.signal->offset = metadata == NULL ? 0 : strtol(metadata, 0, 0);
+            ztr.signal4->Type   = (char *)meta_getValueForNameAndRemove(meta, count, "TYPE");
+            ztr.signal4->data = (uint8_t *)data;
+            break;
+#if ZTR_USE_TEXT_CHUNK
+        case TEXT:
+        {
+            int n;
+            const char *const end = (const char *)(data + datasize);
+            const char *cp;
+
+            for (cp = (const char *)data, n = 0; cp < end; ++n) {
+                size_t len = strendlen(cp, end);
+                
+                if (len == 0)
+                    break;
+                cp += len + 1;
+                len = strendlen(cp, end);
+                cp += len + 1;
+            }
+            if (n != 0) {
+                int i;
+
+                ztr.xmeta = malloc(sizeof(*ztr.xmeta) + (n - 1) * sizeof(nvp_t));
+                if (ztr.xmeta == NULL)
+                {
+                    rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+                    PLOGERR ( klogErr, ( klogErr, rc, "$(func) - '$(type)' chunk data",
+                               "func=ZTR_ProcessBlock,type=%.*s", 4, & ztr_raw->type ));
+                    return rc;
+                }
+                *chunkType = type;
+                ztr.xmeta->count = n;
+                for (i = 0, cp = (const char *)data; i != n; ++i) {
+                    size_t len = strendlen(cp, end);
+                    
+                    if (len == 0)
+                        break;
+                    ztr.xmeta->data[i].name = cp;
+                    cp += len + 1;
+                    ztr.xmeta->data[i].value = cp;
+                    len = strendlen(cp, end);
+                    cp += len + 1;
+                }
+            }
+        }
+            break;
+#endif
+        default:
+            *chunkType = unknown;
+            DEBUG_MSG(1, ("$(func) - chunk '$(type)' unrecognized", "func=ZTR_ProcessBlock,type=%.*s\n", 4, & ztr_raw->type ));
+            break;
+    }
+
+    *dst = ztr;
+#if ZTR_USE_EXTRA_META
+    if (extraMeta != NULL && extraMetaCount != NULL) {
+        int i, j, k;
+        
+        for (k = j = i = 0; i != count; ++i)
+            if (meta[i].name != NULL) {
+                k += strlen(meta[i].name) + strlen(meta[i].value) + 2;
+                ++j;
+            }
+        *extraMetaCount = 0;
+        *extraMeta = NULL;
+        if (j > 0) {
+            *extraMeta = malloc(sizeof(nvp_t) * j + k);
+            if (*extraMeta != NULL) {
+                char *temp = (char *)(*extraMeta + j);
+                
+                for (j = i = 0; i != count; ++i)
+                    if (meta[i].name != NULL) {
+                        strcpy(temp, meta[i].name);
+                        (*extraMeta)[j].name = temp;
+                        temp += strlen(temp) + 1;
+                        strcpy(temp, meta[i].value);
+                        (*extraMeta)[j].value = temp;
+                        temp += strlen(temp) + 1;
+                    }
+            }
+        }
+    }
+#endif
+    if (meta != NULL)
+        free(meta);
+    return 0;
+}
+
+rc_t ILL_ZTR_CreateContext(ZTR_Context **ctx)
+{
+    rc_t rc;
+
+    assert(ctx);
+
+    *ctx = malloc(sizeof(**ctx));
+    if (*ctx)
+    {
+        memset(*ctx, 0, sizeof(**ctx));
+        return 0;
+    }
+
+    rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+    PLOGERR ( klogErr, ( klogErr, rc, "$(func)", "func=ZTR_CreateContext" ));
+    return rc;
+}
+
+rc_t ILL_ZTR_AddToBuffer(ZTR_Context *ctx, const uint8_t *data, uint32_t datasize)
+{
+    rc_t rc;
+
+    assert(ctx);
+    if (ctx->buf[0] == NULL) {
+        ctx->current = 0;
+        ctx->buf[0] = data;
+        ctx->buflen[0] = datasize;
+        return 0;
+    }
+    if (ctx->buf[1] == NULL) {
+        ctx->buf[1] = data;
+        ctx->buflen[1] = datasize;
+        return 0;
+    }
+
+    rc = RC ( rcSRA, rcFormatter, rcParsing, rcBuffer, rcExhausted );
+    PLOGERR ( klogErr, ( klogErr, rc, "$(func) - both buffers are in use",
+               "func=ZTR_AddToBuffer" ));
+    return rc;
+}
+
+
+rc_t ILL_ZTR_ParseHeader(ZTR_Context *ctx)
+{
+    uint8_t src[10];
+    int len;
+    
+    assert(ctx);
+    
+    len = ztr_read(ctx, src, 10);
+    if (len != 10)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcInsufficient );
+
+    if (memcmp(src, ZTR_SIG, 8) != 0)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcCorrupt );
+
+    if ((ctx->versMajor = src[8]) != 1)
+        return RC ( rcSRA, rcFormatter, rcParsing, rcData, rcBadVersion );
+
+    ctx->versMinor = src[9];
+
+    return 0;
+}
+
+rc_t ILL_ZTR_ContextRelease(ZTR_Context *self) {
+    int i;
+    
+    if (self != NULL)
+    {
+        for (i = 0; i != 128; ++i) {
+            free_huffman_table(self->huffman_table + i);
+        }
+        free(self);
+    }
+    return 0;
+}
+
+rc_t ILL_ZTR_BufferGetRemainder(ZTR_Context *ctx, const uint8_t **data, uint32_t *datasize)
+{
+    assert(ctx);
+    assert(data);
+    assert(datasize);
+    
+    *data = NULL;
+    *datasize = ctx->buflen[0] + ctx->buflen[1] - ctx->current;
+    if (*datasize != 0) {
+        void *r = malloc(*datasize);
+        if (r == NULL)
+        {
+            rc_t rc = RC ( rcSRA, rcFormatter, rcParsing, rcMemory, rcExhausted );
+            PLOGERR ( klogErr, ( klogErr, rc, "$(func)", "func=ZTR_BufferGetRemainder" ));
+            return rc;
+        }
+        ztr_read(ctx, r, *datasize);
+        *data = r;
+    }
+    return 0;
+}
diff --git a/tools/sra-load/ztr-illumina.h b/tools/sra-load/ztr-illumina.h
new file mode 100644
index 0000000..575348b
--- /dev/null
+++ b/tools/sra-load/ztr-illumina.h
@@ -0,0 +1,136 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _sra_load_ztr_illumina_
+#define _sra_load_ztr_illumina_
+
+#include <klib/defs.h>
+
+#include "ztr.h"
+
+typedef struct ztr_raw_t {
+    uint8_t type[4];
+    size_t metalength, datalength;
+    uint8_t *meta, *data;
+} ztr_raw_t;
+
+/* allocate and initialize a ZTR parser context
+   caller is responsible to free resulting pointer
+
+   return 1 if context can't be allocated,
+   0 for no error.
+ */
+rc_t ILL_ZTR_CreateContext(ZTR_Context **ctx);
+
+/* add some bytes to context's input buffer
+   the caller is responsible for ensuring that
+   the pointer remains valid until the bytes
+   are consumed.  the caller is responsible for
+   free'ing it.  the context will simply forget
+   the bytes when it has consumed them all.
+ 
+   returns 1 if data can't be added to the buffer chain,
+   0 for no error.
+ */
+rc_t ILL_ZTR_AddToBuffer(ZTR_Context *ctx, const uint8_t *data, uint32_t datasize);
+
+/* get a copy of any unconsumed input bytes from the context.
+   the bytes are consumed in the process.  the caller is
+   responsible for free'ing the resulting pointer.
+   the resulting pointer is should be sent in to AddToBuffer
+   when more bytes are available.
+ 
+   returns 1 if the *data can't be allocated, 0 for no error.
+ */
+rc_t ILL_ZTR_BufferGetRemainder(ZTR_Context *ctx, const uint8_t **data, uint32_t *datasize);
+
+bool ILL_ZTR_BufferIsEmpty(const ZTR_Context *ctx);
+
+/* parse a ZTR header from the input buffer
+   returns 0 if no error, 1 otherwise
+ */
+rc_t ILL_ZTR_ParseHeader(ZTR_Context *ctx);
+
+/* parse a ZTR block from the input buffer
+   returns
+        0: no error
+        1: not valid ZTR
+        2: out of memory
+
+   the caller is responsible for free'ing ztr_raw->meta and
+   ztr_raw->data when it is no longer needed
+ */
+rc_t ILL_ZTR_ParseBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw);
+
+/* cook a ztr_raw_t to produce a ztr_t
+   sets defaults, processes meta data, etc.
+
+   returns
+        0: no error
+        1: not valid ZTR
+        2: out of memory
+
+   Parameters:
+    ctx [in]: the context returned from ZTR_CreateContext
+    ztr_raw [in]: the structure filled in by ZTR_ParseBlock
+    ztr [out]: the resulting data object
+    chunkType [out]: how to interpret the data object
+        if chunkType is none or unknown, it is probably an error
+        if chunkType is ignore, then the chunk was valid and known
+        but of no interest to you, e.g. a huffman dictionary chunk
+    extraMeta [out optional]: any unprocessed name-value pairs
+    extraMetaCount [out optional]: the number of unprocessed name-value pairs
+ 
+   NB. ztr and its pointers refer to ztr_raw, so don't free
+   ztr_raw before you are done with ztr
+ 
+   ztr can be free'ed in one-fell-swoop
+   *extraMeta can be free'ed in one-fell-swoop
+ */
+#if ZTR_USE_EXTRA_META
+    rc_t ILL_ZTR_ProcessBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw, ztr_t *ztr,
+                              enum ztr_chunk_type *chunkType, nvp_t **extraMeta, int *extraMetaCount);
+#else
+    rc_t ILL_ZTR_ProcessBlock(ZTR_Context *ctx, ztr_raw_t *ztr_raw, ztr_t *ztr,
+                              enum ztr_chunk_type *chunkType);
+#endif
+
+/* free a context created by ZTR_CreateContext
+   do this when done processing the ZTR stream.
+ */
+rc_t ILL_ZTR_ContextRelease(ZTR_Context *ctx);
+
+rc_t ILL_ZTR_Decompress(ZTR_Context *ctx, enum ztr_chunk_type type, ztr_t ztr, const ztr_t base);
+
+#define ZTR_CreateContext		ILL_ZTR_CreateContext
+#define ZTR_ContextRelease		ILL_ZTR_ContextRelease
+#define ZTR_AddToBuffer			ILL_ZTR_AddToBuffer
+#define ZTR_BufferGetRemainder	ILL_ZTR_BufferGetRemainder
+#define ZTR_BufferIsEmpty		ILL_ZTR_BufferIsEmpty
+#define ZTR_ParseHeader			ILL_ZTR_ParseHeader
+#define ZTR_ParseBlock			ILL_ZTR_ParseBlock
+#define ZTR_ProcessBlock		ILL_ZTR_ProcessBlock
+
+#endif /* _sra_load_ztr_illumina_ */
diff --git a/tools/sra-load/ztr.h b/tools/sra-load/ztr.h
new file mode 100644
index 0000000..4265121
--- /dev/null
+++ b/tools/sra-load/ztr.h
@@ -0,0 +1,182 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _sra_load_ztr_
+#define _sra_load_ztr_
+
+#define ZTR_USE_TEXT_CHUNK 0
+#define ZTR_USE_EXTRA_META 0
+
+#define ZTR_SIG "\xaeZTR\r\n\x1A\n"
+/* does buffer contain a ZTR signature?
+ */
+#define ZTR_IsSignature(X, N) ((N >= 8) && (memcmp(X, ZTR_SIG, 8) == 0) ? 1 : 0)
+
+#define METANAME_IS_CASE_SENSITIVE 1
+
+enum ztr_data_type {
+	i8,
+	i16,
+	i32,
+	f32,
+	f64,
+	vector4 = 16,
+	i8v4  = i8  | vector4,
+	i16v4 = i16 | vector4,
+	i32v4 = i32 | vector4,
+	f32v4 = f32 | vector4,
+	f64v4 = f64 | vector4
+};
+
+enum ztr_chunk_type {
+	none,
+	unknown,
+	ignore,
+	BASE,
+	BPOS,
+	CLIP,
+	CNF1,
+	CNF4,
+	REGN,
+	SAMP,
+	SMP4,
+	TEXT,
+	COMM,
+	CR32,
+	HUFF,
+
+	READ = BASE,
+	POSITION = BPOS,
+	QUALITY1 = CNF1,
+	QUALITY4 = CNF4,
+	READ_STRUCTURE = REGN,
+	SIGNAL1 = SAMP,
+	SIGNAL4 = SMP4
+};
+
+enum region_type {
+	Biological = 'B',
+	Duplicate = 'D',
+	Explicit = 'E',
+	Inverted = 'I',
+	Normal = 'N',
+	Paired = 'P',
+	Technical = 'T'
+};
+
+typedef struct region_t region_t;
+struct region_t {
+	int start;
+	enum region_type type;
+	char *name;
+};
+
+struct ztr_sequence_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+	char *charset;
+};
+
+struct ztr_position_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+};
+
+struct ztr_clip_t {
+	uint32_t left, right;
+};
+
+struct ztr_quality1_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+	char *scale;
+};
+
+struct ztr_quality4_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+	char *scale;
+};
+
+struct ztr_comment_t {
+	size_t size;
+	char *text;
+};
+
+struct ztr_region_t {
+	size_t count;
+	region_t region[1];
+};
+
+struct ztr_signal_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+	char *channel;
+	long offset;
+};
+
+struct ztr_signal4_t {
+	enum ztr_data_type datatype;
+	size_t datasize;
+	uint8_t *data;
+	char *Type;
+	long offset;
+};
+
+typedef struct nvp_t {
+    const char *name,
+    *value;
+} nvp_t;
+
+#if ZTR_USE_TEXT_CHUNK
+struct ztr_xmetadata_t {
+	size_t count;
+	nvp_t data[1];
+};
+#endif
+
+typedef union ztr_t {
+	struct ztr_sequence_t   *sequence;  /* chunk type 'BASE' */
+	struct ztr_position_t   *position;  /* chunk type 'BPOS' */
+	struct ztr_clip_t       *clip;      /* chunk type 'CLIP' */
+	struct ztr_quality1_t   *quality1;  /* chunk type 'CNF1' */
+	struct ztr_quality4_t   *quality4;  /* chunk type 'CNF4' */
+	struct ztr_comment_t    *comment;   /* chunk type 'COMM' */
+	struct ztr_region_t     *region;    /* chunk type 'REGN' */
+	struct ztr_signal_t     *signal;    /* chunk type 'SAMP' */
+	struct ztr_signal4_t    *signal4;   /* chunk type 'SMP4' */
+#if ZTR_USE_TEXT_CHUNK
+	struct ztr_xmetadata_t  *xmeta;     /* chunk type 'TEXT' */
+#endif
+} ztr_t;
+
+typedef struct ZTR_Context ZTR_Context;
+
+#endif /* _sra_load_ztr_ */
diff --git a/tools/sra-pileup/.gitignore b/tools/sra-pileup/.gitignore
new file mode 100644
index 0000000..c112998
--- /dev/null
+++ b/tools/sra-pileup/.gitignore
@@ -0,0 +1,2 @@
+*.txt
+*.sh
diff --git a/tools/sra-pileup/4na_ascii.c b/tools/sra-pileup/4na_ascii.c
new file mode 100644
index 0000000..6a1d02a
--- /dev/null
+++ b/tools/sra-pileup/4na_ascii.c
@@ -0,0 +1,95 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <os-native.h>
+#include <insdc/sra.h>
+
+/***************************************
+    N (0x4E)  n (0x6E)  <--> 0x0
+    A (0x41)  a (0x61)  <--> 0x1
+    C (0x43)  c (0x63)  <--> 0x2
+    M (0x4D)  m (0x6D)  <--> 0x3
+    G (0x47)  g (0x67)  <--> 0x4
+    R (0x52)  r (0x72)  <--> 0x5
+    S (0x53)  s (0x73)  <--> 0x6
+    V (0x56)  v (0x76)  <--> 0x7
+    T (0x54)  t (0x74)  <--> 0x8
+    W (0x57)  w (0x77)  <--> 0x9
+    Y (0x59)  y (0x79)  <--> 0xA
+    H (0x48)  h (0x68)  <--> 0xB
+    K (0x4B)  k (0x6B)  <--> 0xC
+    D (0x44)  d (0x64)  <--> 0xD
+    B (0x42)  b (0x62)  <--> 0xE
+    N (0x4E)  n (0x6E)  <--> 0xF
+***************************************/
+
+
+static char _4na_2_ascii_tab[] =
+{
+/*  0x0  0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+    'N', 'A', 'C', 'M', 'G', 'R', 'S', 'V', 'T', 'W', 'Y', 'H', 'K', 'D', 'B', 'N',
+    'n', 'a', 'c', 'm', 'g', 'r', 's', 'v', 't', 'w', 'y', 'h', 'k', 'd', 'b', 'n'
+};
+
+
+/***************************************
+    N (0x4E)  n (0x6E)  <--> 0x0
+    A (0x41)  a (0x61)  <--> 0x0
+    C (0x43)  c (0x63)  <--> 0x1
+    M (0x4D)  m (0x6D)  <--> 0x0
+    G (0x47)  g (0x67)  <--> 0x2
+    R (0x52)  r (0x72)  <--> 0x0
+    S (0x53)  s (0x73)  <--> 0x0
+    V (0x56)  v (0x76)  <--> 0x0
+    T (0x54)  t (0x74)  <--> 0x3
+    W (0x57)  w (0x77)  <--> 0x0
+    Y (0x59)  y (0x79)  <--> 0x0
+    H (0x48)  h (0x68)  <--> 0x0
+    K (0x4B)  k (0x6B)  <--> 0x0
+    D (0x44)  d (0x64)  <--> 0x0
+    B (0x42)  b (0x62)  <--> 0x0
+    N (0x4E)  n (0x6E)  <--> 0x0
+***************************************/
+
+
+static uint32_t _4na_2_index_tab[] =
+{
+/*  0x0  0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+     0,   0,   1,   0,   2,   0,  0,   0,   3,   0,   0,   0,   0,   0,   0,   0 
+};
+
+
+/* ------------------------------------------------------------------------------------- */
+
+char _4na_to_ascii( INSDC_4na_bin c, bool reverse )
+{
+    return _4na_2_ascii_tab[ ( c & 0x0F ) | ( reverse ? 0x10 : 0 ) ];
+}
+
+uint32_t _4na_to_index( INSDC_4na_bin c )
+{
+    return _4na_2_index_tab[ ( c & 0x0F ) ];
+}
diff --git a/tools/sra-pileup/4na_ascii.h b/tools/sra-pileup/4na_ascii.h
new file mode 100644
index 0000000..8146778
--- /dev/null
+++ b/tools/sra-pileup/4na_ascii.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_4na_ascii_
+#define _h_4na_ascii_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <os-native.h>
+#include <insdc/sra.h>
+
+char _4na_to_ascii( INSDC_4na_bin c, bool reverse );
+uint32_t _4na_to_index( INSDC_4na_bin c );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_4na_ascii_ */
diff --git a/tools/sra-pileup/Makefile b/tools/sra-pileup/Makefile
new file mode 100644
index 0000000..11b7207
--- /dev/null
+++ b/tools/sra-pileup/Makefile
@@ -0,0 +1,133 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-pileup
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	sra-pileup \
+	sam-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-pileup
+#
+TOOL_SRC = \
+	dyn_string \
+	cmdline_cmn \
+	out_redir \
+	perf_log \
+	reref \
+	cg_tools \
+	report_deletes \
+	ref_regions \
+	4na_ascii \
+	ref_walker_0 \
+	ref_walker \
+	walk_debug \
+	pileup_counters \
+	pileup_index \
+	pileup_indels \
+	pileup_varcount \
+	pileup_stat \
+	pileup_v2 \
+	sra-pileup
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/sra-pileup: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TOOL_LIB)
+
+
+#-------------------------------------------------------------------------------
+# sam-dump
+#
+SAMDUMP3_SRC = \
+	inputfiles \
+	perf_log \
+	rna_splice_log \
+	sam-dump-opts \
+	out_redir \
+	sam-hdr \
+	sam-hdr1 \
+	matecache \
+	read_fkt \
+	sam-aligned \
+	sam-unaligned \
+	md_flag \
+	cg_tools \
+	sam-dump \
+	sam-dump3
+
+SAMDUMP3_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMDUMP3_SRC))
+
+SAMDUMP3_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+ifdef NCBI
+CFLAGS += -DNCBI
+endif
+
+$(BINDIR)/sam-dump: $(SAMDUMP3_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SAMDUMP3_LIB)
+
diff --git a/tools/sra-pileup/cg_tools.c b/tools/sra-pileup/cg_tools.c
new file mode 100644
index 0000000..b1ccab7
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.c
@@ -0,0 +1,1723 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cg_tools.h"
+#include "debug.h"
+#include <klib/out.h>
+
+#include <klib/printf.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+static void SetCigOp( CigOps * dst, char op, uint32_t oplen )
+{
+    dst->op    = op;
+    dst->oplen = oplen;
+    switch( op ) 
+    { /*MX= DN B IS PH*/
+
+    case 'M' :
+    case 'X' :
+    case '=' :  dst->ref_sign = +1;
+                dst->seq_sign = +1;
+                break;
+
+    case 'D' :
+    case 'N' :  dst->ref_sign = +1;
+                dst->seq_sign = 0;
+                break;
+
+    case 'B' :  dst->ref_sign = -1;
+                dst->seq_sign = 0;
+                break;
+
+    case 'S' :
+    case 'I' :  dst->ref_sign = 0;
+                dst->seq_sign = +1;
+                break;
+
+    case 'P' :
+    case 'H' :
+    case 0   :  dst->ref_sign= 0;   /* terminating op */
+                dst->seq_sign= 0;
+                break;
+
+    default :   assert( 0 );
+                break;
+    }
+}
+
+
+int32_t ExplodeCIGAR( CigOps dst[], uint32_t len, char const cigar[], uint32_t ciglen )
+{
+    uint32_t i;
+    uint32_t j;
+    int32_t opLen;
+    
+    for ( i = j = opLen = 0; i < ciglen; ++i )
+    {
+        if ( isdigit( cigar[ i ] ) )
+        {
+            opLen = opLen * 10 + cigar[ i ] - '0';
+        }
+        else
+        {
+            assert( isalpha( cigar[ i ] ) );
+            SetCigOp( dst + j, cigar[ i ], opLen );
+            opLen = 0;
+            j++;
+        }
+    }
+    SetCigOp( dst + j, 0, 0 );
+    j++;
+    return j;
+}
+
+
+typedef struct cgOp_s
+{
+    uint16_t length;
+    uint8_t type; /* 0: match, 1: insert, 2: delete */
+    char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+    unsigned i;
+    
+    SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+    for ( i = 0; i < ops; ++i )
+    {
+        if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+        }
+        else
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+        }
+    }
+    SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+typedef struct cg_cigar_temp
+{
+    unsigned gap[ 3 ];
+    cgOp cigOp[ MAX_READ_LEN ];
+    unsigned opCnt;
+    unsigned S_adjust;
+    unsigned CG_adjust;
+    bool     has_ref_offset_type;
+} cg_cigar_temp;
+
+
+static rc_t CIGAR_to_CG_Ops( const cg_cigar_input * input,
+                             cg_cigar_temp * tmp )
+{
+    unsigned i;
+    unsigned ops = 0;
+    unsigned gapno;
+
+    tmp->opCnt = 0;
+    tmp->S_adjust = 0;
+    tmp->CG_adjust = 0;
+    tmp->has_ref_offset_type = false;
+    for ( i = 0; i < input->p_cigar.len; ++ops )
+    {
+        char opChar = 0;
+        int opLen = 0;
+        int n;
+
+        for ( n = 0; ( ( n + i ) < input->p_cigar.len ) && ( isdigit( input->p_cigar.ptr[ n + i ] ) ); n++ )
+        {
+            opLen = opLen * 10 + input->p_cigar.ptr[ n + i ] - '0';
+        }
+
+        if ( ( n + i ) < input->p_cigar.len )
+        {
+            opChar = input->p_cigar.ptr[ n + i ];
+            n++;
+        }
+
+        if ( ( ops + 1 ) >= MAX_READ_LEN )
+            return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+        i += n;
+        
+        tmp->cigOp[ ops ].length = opLen;
+        tmp->cigOp[ ops ].code = opChar;
+        switch ( opChar )
+        {
+            case 'M' :
+            case '=' :
+            case 'X' :  tmp->cigOp[ ops ].type = 0;
+                        break;
+
+            case 'S' :  tmp->S_adjust += opLen;
+            case 'I' :  tmp->cigOp[ ops ].type = 1;
+                        tmp->cigOp[ ops ].code = 'I';
+                        break;
+	    case 'N':   tmp->has_ref_offset_type = true;
+            case 'D':   tmp->cigOp[ ops ].type = 2;
+                        break;
+
+            default :   return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+        }
+    }
+
+    tmp->opCnt = ops;
+    tmp->gap[ 0 ] = tmp->gap[ 1 ] = tmp->gap[ 2 ] = ops;
+    print_CG_cigar( __LINE__, tmp->cigOp, ops, NULL );
+
+
+    if ( ops < 3 )
+        return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+    {
+        unsigned fwd = 0; /* 5 10 10 10 */
+        unsigned rev = 0; /* 10 10 10 5 */
+        unsigned acc; /* accumulated length */
+        
+        if ( ( input->seq_req_id == 1 && !input->orientation ) ||
+             ( input->seq_req_id == 2 && input->orientation ) )
+        {
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const right = acc - 5;
+                        unsigned const left = tmp->cigOp[ i ].length - right;
+                        
+                        memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                        ops += 2;
+                        tmp->cigOp[ i ].length = left;
+                        tmp->cigOp[ i + 2 ].length = right;
+                        
+                        tmp->cigOp[ i + 1 ].type = 1;
+                        tmp->cigOp[ i + 1 ].code = 'B';
+                        tmp->cigOp[ i + 1 ].length = 0;
+                        
+                        fwd = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else if ( ( input->seq_req_id == 2 && !input->orientation ) ||
+                  ( input->seq_req_id == 1 && input->orientation ) )
+        {
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i ].type == 1 )
+                    {
+                        rev = i;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const left = acc - 5;
+                        unsigned const right = tmp->cigOp[ i ].length - left;
+                        
+                        memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                        ops += 2;
+                        tmp->cigOp[ i ].length = left;
+                        tmp->cigOp[ i + 2 ].length = right;
+                        
+                        tmp->cigOp[ i + 1 ].type = 1;
+                        tmp->cigOp[ i + 1 ].code = 'B';
+                        tmp->cigOp[ i + 1 ].length = 0;
+                         
+                        rev = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* fprintf(stderr, "guessing layout\n"); */
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                    }
+                }
+            }
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[i].type == 1 )
+                    {
+                        rev = i;
+                    }
+                }
+            }
+            if ( !tmp->has_ref_offset_type && (( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) ))
+            {
+                for ( i = 0; i < ops; ++i )
+                {
+                    if ( tmp->cigOp[ i ].type == 2 )
+                    {
+                        tmp->cigOp[ i ].code = 'N';
+                        tmp->CG_adjust += tmp->cigOp[ i ].length;
+                    }
+                }
+                return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+            }
+        }
+        if ( fwd && tmp->cigOp[ fwd ].type == 1 )
+        {
+            for ( i = ops, acc = 0; i > fwd + 1; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const r = 10 + tmp->cigOp[ i ].length - acc;
+                            unsigned const l = tmp->cigOp[ i ].length - r;
+                            
+                            if ( ops + 2 >= MAX_READ_LEN )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                            ops += 2;
+                            tmp->cigOp[ i + 2 ].length = r;
+                            tmp->cigOp[ i ].length = l;
+                            
+                            tmp->cigOp[ i + 1 ].length = 0;
+                            tmp->cigOp[ i + 1 ].type = 2;
+                            tmp->cigOp[ i + 1 ].code = 'N';
+                            i += 2;
+                        }
+                        else if ( i - 1 > fwd )
+                        {
+                            if ( tmp->cigOp[ i - 1 ].type == 2 )
+                                 tmp->cigOp[ i - 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= MAX_READ_LEN )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                                ops += 1;
+                                tmp->cigOp[ i ].length = 0;
+                                tmp->cigOp[ i ].type = 2;
+                                tmp->cigOp[ i ].code = 'N';
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            /** change I to B+M **/
+            tmp->cigOp[ fwd ].code = 'B';
+            memmove( &tmp->cigOp[ fwd + 1 ], &tmp->cigOp[ fwd ], ( ops - fwd ) * sizeof( tmp->cigOp[ 0 ] ) );
+            ops += 1;
+            tmp->cigOp[ fwd + 1 ].code = 'M';
+            tmp->opCnt = ops;
+            /** set the gaps now **/
+            for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].code == 'N' )
+                    tmp->gap[ --gapno ] = i;
+            }
+            tmp->gap[ 0 ] = fwd;
+            print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+            return 0;
+        }
+        if ( rev && tmp->cigOp[ rev ].type == 1 )
+        {
+            for ( acc = i = 0; i < rev; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const l = 10 + tmp->cigOp[ i ].length - acc;
+                            unsigned const r = tmp->cigOp[ i ].length - l;
+                            
+                            if ( ops + 2 >= MAX_READ_LEN )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                            ops += 2;
+                            tmp->cigOp[ i + 2 ].length = r;
+                            tmp->cigOp[ i ].length = l;
+                            
+                            tmp->cigOp[ i + 1 ].length = 0;
+                            tmp->cigOp[ i + 1 ].type = 2;
+                            tmp->cigOp[ i + 1 ].code = 'N';
+                            rev += 2;
+                            i += 2;
+                        }
+                        else if ( i + 1 < rev )
+                        {
+                            if ( tmp->cigOp[ i + 1 ].type == 2 )
+                                 tmp->cigOp[ i + 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= MAX_READ_LEN )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                                ops += 1;
+                                tmp->cigOp[ i + 1 ].length = 0;
+                                tmp->cigOp[ i + 1 ].type = 2;
+                                tmp->cigOp[ i + 1 ].code = 'N';
+                                rev += 1;
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+            {
+                if ( tmp->cigOp[ i ].code == 'N' )
+                    tmp->gap[ --gapno ] = i;
+            }
+            tmp->gap[ 0 ] = rev;
+            tmp->cigOp[ rev ].code = 'B';
+            memmove( &tmp->cigOp[ rev + 1 ], &tmp->cigOp[ rev ], ( ops - rev ) * sizeof( tmp->cigOp[ 0 ] ) );
+            ops += 1;
+            tmp->cigOp[ rev + 1 ].code = 'M';
+            tmp->opCnt = ops;
+            print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+            return 0;
+        }
+    }
+    return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t adjust_cigar( const cg_cigar_input * input, cg_cigar_temp * tmp, cg_cigar_output * output )
+{
+    rc_t rc = 0;
+    unsigned i, j;
+
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+    /* remove zero length ops */
+    for ( j = i = 0; i < tmp->opCnt; )
+    {
+        if ( tmp->cigOp[ j ].length == 0 )
+        {
+            ++j;
+            --(tmp->opCnt);
+            continue;
+        }
+        tmp->cigOp[ i++ ] = tmp->cigOp[ j++ ];
+    }
+
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+    if ( input->edit_dist_available )
+    {
+        int const adjusted = input->edit_dist + tmp->S_adjust - tmp->CG_adjust;
+        output->edit_dist = adjusted > 0 ? adjusted : 0;
+        SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", input->edit_dist, output->edit_dist, tmp->S_adjust, tmp->CG_adjust ) );
+    }
+    else
+    {
+        output->edit_dist = input->edit_dist;
+    }
+
+    /* merge adjacent ops */
+    for ( i = tmp->opCnt; i > 1; )
+    {
+        --i;
+        if ( tmp->cigOp[ i - 1 ].code == tmp->cigOp[ i ].code )
+        {
+            tmp->cigOp[ i - 1 ].length += tmp->cigOp[ i ].length;
+            memmove( &tmp->cigOp[ i ], &tmp->cigOp[ i + 1 ], ( tmp->opCnt - 1 - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+            --(tmp->opCnt);
+        }
+    }
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+    for ( i = j = 0; i < tmp->opCnt && rc == 0; ++i )
+    {
+        size_t sz;
+        rc = string_printf( &output->cigar[ j ], sizeof( output->cigar ) - j, &sz, "%u%c", tmp->cigOp[ i ].length, tmp->cigOp[ i ].code );
+        j += sz;
+    }
+    output->cigar_len = j;
+    return rc;
+}
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output )
+{
+    rc_t rc;
+    cg_cigar_temp tmp;
+    memset( &tmp, 0, sizeof tmp );
+
+    rc = CIGAR_to_CG_Ops( input, &tmp );
+    if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+    {
+        memmove( &output->cigar[ 0 ], &input->p_cigar.ptr[ 0 ], input->p_cigar.len );
+        output->cigar_len = input->p_cigar.len;
+        output->cigar[ output->cigar_len ] = 0;
+        output->edit_dist = input->edit_dist;
+        output->p_cigar.ptr = output->cigar;
+        output->p_cigar.len = output->cigar_len;
+        rc = 0;
+    }
+    else if ( rc == 0 )
+    {
+        if ( tmp.CG_adjust == 0 && !tmp.has_ref_offset_type)
+        {
+            if ( tmp.gap[ 0 ] < tmp.opCnt )
+                tmp.CG_adjust = tmp.cigOp[ tmp.gap[ 0 ] ].length;
+
+            if ( tmp.gap[ 1 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 1 ] ].length;
+
+            if ( tmp.gap[ 2 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 2 ] ].length;
+        }
+
+        rc = adjust_cigar( input, &tmp, output );
+    }
+    return rc;
+}
+
+
+static char merge_M_type_ops( char a, char b )
+{ /*MX=*/
+    char c = 0;
+    switch( b )
+    {
+        case 'X' :  switch( a )
+                    {
+                        case '=' : c = 'X'; break;
+                        case 'X' : c = 'M'; break; /**we don't know - 2X may create '=' **/
+                        case 'M' : c = 'M'; break;
+                    }
+                    break;
+        case 'M' :  c = 'M'; break;
+        case '=' :  c = a; break;
+    }
+    assert( c != 0 );
+    return c;
+}
+
+
+static size_t fmt_cigar_elem( char * dst, uint32_t cig_oplen, char cig_op )
+{
+    size_t num_writ;
+    rc_t rc = string_printf ( dst, 11, &num_writ, "%d%c", cig_oplen, cig_op );
+    assert ( rc == 0 && num_writ > 1 );
+    return num_writ;
+}
+
+uint32_t CombineCIGAR( char dst[], CigOps const seqOp[], uint32_t seq_len,
+                       uint32_t refPos, CigOps const refOp[], uint32_t ref_len )
+{
+    bool done = false;
+    uint32_t ciglen = 0, last_ciglen = 0, last_cig_oplen = 0;
+    int32_t si = 0, ri = 0;
+    char last_cig_op = '0'; /* never used operation, forces a mismatch in MACRO_BUILD_CIGAR */
+    CigOps seq_cop = { 0, 0, 0, 0 }, ref_cop = { 0, 0, 0, 0 };
+    int32_t seq_pos = 0;        /** seq_pos is tracked roughly - with every extraction from seqOp **/
+    int32_t ref_pos = 0;        /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+    int32_t delta = refPos;     /*** delta in relative positions of seq and ref **/
+                                /*** when delta < 0 - rewind or extend the reference ***/
+                                /*** wher delta > 0 - skip reference  ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+	if( last_cig_oplen > 0 && last_cig_op == OP){							\
+                last_cig_oplen += OPLEN;								\
+                ciglen = last_ciglen + fmt_cigar_elem( dst + last_ciglen, last_cig_oplen,last_cig_op );	\
+        } else {											\
+                last_ciglen = ciglen;									\
+                last_cig_oplen = OPLEN;									\
+                last_cig_op    = OP;									\
+                ciglen = ciglen      + fmt_cigar_elem( dst + last_ciglen, last_cig_oplen, last_cig_op );	\
+        }
+    while( !done )
+    {
+        while ( delta < 0 )
+        { 
+            ref_pos += delta; /** we will make it to back up this way **/
+            if( ri > 0 )
+            { /** backing up on ref if possible ***/
+                int avail_oplen = refOp[ ri - 1 ].oplen - ref_cop.oplen;
+                if ( avail_oplen > 0 )
+                {
+                    if ( ( -delta ) <= avail_oplen * ref_cop.ref_sign )
+                    { /*** rewind within last operation **/
+                        ref_cop.oplen -= delta;
+                        delta -= delta * ref_cop.ref_sign;
+                    }
+                    else
+                    { /*** rewind the whole ***/
+                        ref_cop.oplen += avail_oplen;
+                        delta += avail_oplen * ref_cop.ref_sign;
+                    }
+                }
+                else
+                {
+                    ri--;
+                    /** pick the previous as used up **/
+                    ref_cop = refOp[ri-1];
+                    ref_cop.oplen =0; 
+                }
+            }
+            else
+            { /** extending the reference **/
+                SetCigOp( &ref_cop, '=', ref_cop.oplen - delta );
+                delta = 0;
+            }
+            ref_pos -= delta; 
+        }
+        if ( ref_cop.oplen == 0 )
+        { /*** advance the reference ***/
+            ref_cop = refOp[ri++];
+            if ( ref_cop.oplen == 0 )
+            { /** extending beyond the reference **/
+                SetCigOp( &ref_cop,'=', 1000 );
+            }
+            assert( ref_cop.oplen > 0 );
+        }
+        if ( delta > 0 )
+        { /***  skip refOps ***/
+            ref_pos += delta; /** may need to back up **/
+            if ( delta >=  ref_cop.oplen )
+            { /** full **/
+                delta -= ref_cop.oplen * ref_cop.ref_sign;
+                ref_cop.oplen = 0;
+            }
+            else
+            { /** partial **/
+                ref_cop.oplen -= delta;
+                delta -= delta * ref_cop.ref_sign;
+            }
+            ref_pos -= delta; /** if something left - restore ***/
+            continue;
+        }
+
+        /*** seq and ref should be synchronized here **/
+        assert( delta == 0 );
+        if ( seq_cop.oplen == 0 )
+        { /*** advance sequence ***/
+            if ( seq_pos < seq_len )
+            {
+                seq_cop = seqOp[ si++ ];
+                assert( seq_cop.oplen > 0 );
+                seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+            }
+            else
+            {
+                done=true;
+            }
+        }
+
+        if( !done )
+        {
+            int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+            int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+            int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+            int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+            assert( ref_ref_step >= 0 ); /** no B in the reference **/
+            if ( seq_ref_step <= 0 )
+            { /** BSIPH in the sequence against anything ***/
+                MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+                seq_cop.oplen = 0;
+                delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+            }
+            else if ( ref_ref_step <= 0 )
+            { /** MX=DN against SIPH in the reference***/
+                if ( ref_seq_step == 0 )
+                { /** MX=DN against PH **/
+                    MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+                    ref_cop.oplen = 0;
+                }
+                else
+                {
+                    int min_len = ( seq_cop.oplen < ref_cop.oplen ) ? seq_cop.oplen : ref_cop.oplen;
+                    if( seq_seq_step == 0 )
+                    { /** DN agains SI **/
+                        MACRO_BUILD_CIGAR( 'P', min_len );
+                    }
+                    else
+                    { /** MX= agains SI ***/
+                        MACRO_BUILD_CIGAR( ref_cop.op,min_len );
+                    }
+                    seq_cop.oplen -= min_len;
+                    ref_cop.oplen -= min_len;
+                }
+            }
+            else
+            {
+                /*MX=DN  against MX=DN*/
+                int min_len = ( seq_cop.oplen < ref_cop.oplen ) ? seq_cop.oplen : ref_cop.oplen;
+                if ( seq_seq_step == 0 )
+                { /* DN against MX=DN */
+                    if ( ref_seq_step == 0 )
+                    { /** padding DN against DN **/
+                        MACRO_BUILD_CIGAR( 'P', min_len );
+                        ref_cop.oplen -= min_len;
+                        seq_cop.oplen -= min_len;
+                    }
+                    else
+                    { /* DN against MX= **/
+                        MACRO_BUILD_CIGAR( seq_cop.op, min_len );
+                        seq_cop.oplen -= min_len;
+                    }
+                }
+                else if ( ref_cop.seq_sign == 0 )
+                { /* MX= against DN - always wins */
+                    MACRO_BUILD_CIGAR( ref_cop.op, min_len );
+                    ref_cop.oplen -= min_len;
+                }
+                else
+                { /** MX= against MX= ***/
+                    char curr_op = merge_M_type_ops( seq_cop.op, ref_cop.op );
+                    /* or otherwise merge_M_type_ops() will be called twice by the macro! */
+                    MACRO_BUILD_CIGAR( curr_op, min_len );
+                    ref_cop.oplen -= min_len;
+                    seq_cop.oplen -= min_len;
+                }
+                ref_pos += min_len;
+            }
+        }
+    }
+    return ciglen;
+}
+
+
+typedef struct cg_merger
+{
+    char newSeq[ MAX_READ_LEN ];
+    char newQual[ MAX_READ_LEN ];
+    char tags[ MAX_CG_CIGAR_LEN * 2 ];
+} cg_merger;
+
+
+rc_t merge_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output )
+{
+    rc_t rc;
+    cg_cigar_temp tmp;
+    memset( &tmp, 0, sizeof tmp );
+
+    rc = CIGAR_to_CG_Ops( input, &tmp );
+    if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+    {
+        memmove( &output->cigar[ 0 ], &input->p_cigar.ptr[ 0 ], input->p_cigar.len );
+        output->cigar_len = input->p_cigar.len;
+        output->cigar[ output->cigar_len ] = 0;
+        output->edit_dist = input->edit_dist;
+        rc = 0;
+    }
+    else if ( rc == 0 )
+    {
+
+        if ( tmp.CG_adjust == 0  && !tmp.has_ref_offset_type )
+        {
+            if ( tmp.gap[ 0 ] < tmp.opCnt )
+                tmp.CG_adjust = tmp.cigOp[ tmp.gap[ 0 ] ].length;
+
+            if ( tmp.gap[ 1 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 1 ] ].length;
+
+            if ( tmp.gap[ 2 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 2 ] ].length;
+        }
+
+        rc = adjust_cigar( input, &tmp, output );
+
+    }
+    return rc;
+}
+
+
+rc_t make_cg_merge( const cg_cigar_input * input, cg_cigar_output * output )
+{
+    rc_t rc;
+    cg_cigar_temp tmp;
+    memset( &tmp, 0, sizeof tmp );
+
+    rc = CIGAR_to_CG_Ops( input, &tmp );
+    if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+    {
+        memmove( &output->cigar[ 0 ], &input->p_cigar.ptr[ 0 ], input->p_cigar.len );
+        output->cigar_len = input->p_cigar.len;
+        output->cigar[ output->cigar_len ] = 0;
+        output->edit_dist = input->edit_dist;
+        rc = 0;
+    }
+    else if ( rc == 0 )
+    {
+
+        if ( tmp.CG_adjust == 0  && !tmp.has_ref_offset_type )
+        {
+            if ( tmp.gap[ 0 ] < tmp.opCnt )
+                tmp.CG_adjust = tmp.cigOp[ tmp.gap[ 0 ] ].length;
+
+            if ( tmp.gap[ 1 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 1 ] ].length;
+
+            if ( tmp.gap[ 2 ] < tmp.opCnt )
+                tmp.CG_adjust += tmp.cigOp[ tmp.gap[ 2 ] ].length;
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t const B_len = tmp.cigOp[ tmp.gap[ 0 ] ].length;
+        uint32_t const B_at = tmp.gap[ 0 ] < tmp.gap[ 2 ] ? 5 : 30;
+            
+        if ( 0 < B_len && B_len < 5 )
+        {
+            memmove( output->newSeq,  input->p_read.ptr, MAX_READ_LEN );
+            memmove( output->newQual, input->p_quality.ptr, MAX_READ_LEN );
+            
+            output->p_read.ptr = output->newSeq;
+            output->p_read.len = ( MAX_READ_LEN - B_len );
+            
+            output->p_quality.ptr = output->newQual;
+            output->p_quality.len = ( MAX_READ_LEN - B_len );
+            
+            output->p_tags.ptr = output->tags;
+            output->p_tags.len = 0;
+
+            /* nBnM -> nB0M */
+            tmp.cigOp[ tmp.gap[ 0 ] + 1 ].length -= B_len;
+            if ( tmp.gap[ 0 ] < tmp.gap[ 2 ] )
+            {
+                size_t written;
+                rc = string_printf( output->tags, sizeof( output->tags ), &written,
+                                    "GC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                                    5 - B_len, B_len, 30 - B_len, 2 * B_len, &output->newSeq[ 5 - B_len ], 2 * B_len, &output->newQual[ 5 - B_len ] );
+                if ( rc == 0 )
+                    output->p_tags.len = written;
+                memmove( &tmp.cigOp[ tmp.gap[ 0 ] ],
+                         &tmp.cigOp[ tmp.gap[ 0 ] + 1 ],
+                         ( tmp.opCnt - ( tmp.gap[ 0 ] + 1 ) ) * sizeof( tmp.cigOp[ 0 ] ) );
+                --tmp.opCnt;
+            }
+            else
+            {
+                size_t written;
+                rc = string_printf( output->tags, sizeof( output->tags ), &written,
+                                    "GC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                                    30 - B_len, B_len, 5 - B_len, 2 * B_len, &output->newSeq[ 30 - B_len ], 2 * B_len, &output->newQual[ 30 - B_len ] );
+                if ( rc == 0 )
+                    output->p_tags.len = written;
+                memmove( &tmp.cigOp[ tmp.gap[ 0 ] ],
+                         &tmp.cigOp[ tmp.gap[ 0 ] + 1 ],
+                         ( tmp.opCnt - ( tmp.gap[ 0 ] + 1 ) ) * sizeof( tmp.cigOp[ 0 ] ) );
+                --tmp.opCnt;
+            }
+            if ( rc == 0 )
+            {
+                uint32_t i;
+                for ( i = B_at; i < B_at + B_len; ++i )
+                {
+                    uint32_t const Lq = output->newQual[ i - B_len ];
+                    uint32_t const Rq = output->newQual[ i ];
+
+                    if ( Lq <= Rq )
+                    {
+                        output->newSeq[ i - B_len ] = output->newSeq[ i ];
+                        output->newQual[ i - B_len ] = Rq;
+                    }
+                    else
+                    {
+                        output->newSeq[ i ] = output->newSeq[ i - B_len ];
+                        output->newQual[ i ] = Lq;
+                    }
+                }
+                memmove( &output->newSeq [ B_at ], &output->newSeq [ B_at + B_len ], MAX_READ_LEN - B_at - B_len );
+                memmove( &output->newQual[ B_at ], &output->newQual[ B_at + B_len ], MAX_READ_LEN - B_at - B_len );
+            }
+        }
+        else
+        {
+            uint32_t i, len = tmp.cigOp[ tmp.gap[ 0 ] ].length;
+            
+            tmp.cigOp[ tmp.gap[ 0 ] ].code = 'I';
+            for ( i = tmp.gap[ 0 ] + 1; i < tmp.opCnt && len > 0; ++i )
+            {
+                if ( tmp.cigOp[ i ].length <= len )
+                {
+                    len -= tmp.cigOp[ i ].length;
+                    tmp.cigOp[ i ].length = 0;
+                }
+                else
+                {
+                    tmp.cigOp[ i ].length -= len;
+                    len = 0;
+                }
+            }
+            tmp.CG_adjust -= tmp.cigOp[ tmp.gap[ 0 ] ].length;
+        }
+    }
+
+    if ( rc == 0 )
+        rc = adjust_cigar( input, &tmp, output );
+
+    return rc;
+}
+
+
+/* A-->0x00, C-->0x01 G-->0x02 T-->0x03 */
+
+static const uint8_t ASCII_to_2na[] = {
+/*      00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  */
+        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      10  11  12  13  14  15  16  17  18  19  1A  1B  1C  1D  1E  1F  */
+        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      20  21  22  23  24  25  26  27  28  29  2A  2B  2C  2D  2E  2F  */
+        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      30  31  32  33  34  35  36  37  38  39  3A  3B  3C  3D  3E  3F  */
+        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  */
+        0,  0,  0,  1,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      50  51  52  53  54  55  56  57  58  59  5A  5B  5C  5D  5E  5F  */
+        0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      60  61  62  63  64  65  66  67  68  69  6A  6B  6C  6D  6E  6F  */
+        0,  0,  0,  1,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,
+
+/*      70  71  72  73  74  75  76  77  78  79  7A  7B  7C  7D  7E  7F  */
+        0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
+};
+
+static uint8_t compress_4_bases_to_byte( uint8_t * bases )
+{
+    uint8_t res = ASCII_to_2na[ bases[ 0 ] & 0x7F ];
+    res <<= 2;
+    res |= ASCII_to_2na[ bases[ 1 ] & 0x7F ];
+    res <<= 2;
+    res |= ASCII_to_2na[ bases[ 2 ] & 0x7F ];
+    res <<= 2;
+    res |= ASCII_to_2na[ bases[ 3 ] & 0x7F ];
+    return res;
+}
+
+
+static const uint8_t compressed_to_fwd_reverse_0[] = {
+
+    /* 0000.0000    0x00 ... AAAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.0001    0x01 ... AAAC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0000.0010    0x02 ... AAAG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.0011    0x03 ... AAAT */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.0100    0x04 ... AACA */ RNA_SPLICE_UNKNOWN,
+    /* 0000.0101    0x05 ... AACC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.0110    0x06 ... AACG */ RNA_SPLICE_UNKNOWN,
+    /* 0000.0111    0x07 ... AACT */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1000    0x08 ... AAGA */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1001    0x09 ... AAGC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.1010    0x0A ... AAGG */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1011    0x0B ... AAGT */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1100    0x0C ... AATA */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1101    0x0D ... AATC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0000.1110    0x0E ... AATG */ RNA_SPLICE_UNKNOWN,
+    /* 0000.1111    0x0F ... AATT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0001.0000    0x10 ... ACAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.0001    0x11 ... ACAC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0001.0010    0x12 ... ACAG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.0011    0x13 ... ACAT */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.0100    0x14 ... ACCA */ RNA_SPLICE_UNKNOWN,
+    /* 0001.0101    0x15 ... ACCC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.0110    0x16 ... ACCG */ RNA_SPLICE_UNKNOWN,
+    /* 0001.0111    0x17 ... ACCT */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1000    0x18 ... ACGA */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1001    0x19 ... ACGC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.1010    0x1A ... ACGG */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1011    0x1B ... ACGT */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1100    0x1C ... ACTA */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1101    0x1D ... ACTC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0001.1110    0x1E ... ACTG */ RNA_SPLICE_UNKNOWN,
+    /* 0001.1111    0x1F ... ACTT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0010.0000    0x20 ... AGAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.0001    0x21 ... AGAC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0010.0010    0x22 ... AGAG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.0011    0x23 ... AGAT */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.0100    0x24 ... AGCA */ RNA_SPLICE_UNKNOWN,
+    /* 0010.0101    0x25 ... AGCC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.0110    0x26 ... AGCG */ RNA_SPLICE_UNKNOWN,
+    /* 0010.0111    0x27 ... AGCT */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1000    0x28 ... AGGA */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1001    0x29 ... AGGC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.1010    0x2A ... AGGG */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1011    0x2B ... AGGT */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1100    0x2C ... AGTA */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1101    0x2D ... AGTC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0010.1110    0x2E ... AGTG */ RNA_SPLICE_UNKNOWN,
+    /* 0010.1111    0x2F ... AGTT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0011.0000    0x30 ... ATAA */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.0001    0x31 ... ATAC */ RNA_SPLICE_FWD,            /* MINOR forward */
+    /* 0011.0010    0x32 ... ATAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.0011    0x33 ... ATAT */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.0100    0x34 ... ATCA */ RNA_SPLICE_UNKNOWN,
+    /* 0011.0101    0x35 ... ATCC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.0110    0x36 ... ATCG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0011.0111    0x37 ... ATCT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0011.1000    0x38 ... ATGA */ RNA_SPLICE_UNKNOWN,
+    /* 0011.1001    0x39 ... ATGC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.1010    0x3A ... ATGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0011.1011    0x3B ... ATGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0011.1100    0x3C ... ATTA */ RNA_SPLICE_UNKNOWN,
+    /* 0011.1101    0x3D ... ATTC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0011.1110    0x3E ... ATTG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0011.1111    0x3F ... ATTT */ ( RNA_SPLICE_REV | 0x20 ),
+
+    /* 0100.0000    0x40 ... CAAA */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.0001    0x41 ... CAAC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0100.0010    0x42 ... CAAG */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.0011    0x43 ... CAAT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.0100    0x44 ... CACA */ RNA_SPLICE_UNKNOWN,
+    /* 0100.0101    0x45 ... CACC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.0110    0x46 ... CACG */ RNA_SPLICE_UNKNOWN,
+    /* 0100.0111    0x47 ... CACT */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1000    0x48 ... CAGA */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1001    0x49 ... CAGC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.1010    0x4A ... CAGG */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1011    0x4B ... CAGT */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1100    0x4C ... CATA */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1101    0x4D ... CATC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0100.1110    0x4E ... CATG */ RNA_SPLICE_UNKNOWN,
+    /* 0100.1111    0x4F ... CATT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0101.0000    0x50 ... CCAA */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.0001    0x51 ... CCAC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0101.0010    0x52 ... CCAG */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.0011    0x53 ... CCAT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.0100    0x54 ... CCCA */ RNA_SPLICE_UNKNOWN,
+    /* 0101.0101    0x55 ... CCCC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.0110    0x56 ... CCCG */ RNA_SPLICE_UNKNOWN,
+    /* 0101.0111    0x57 ... CCCT */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1000    0x58 ... CCGA */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1001    0x59 ... CCGC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.1010    0x5A ... CCGG */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1011    0x5B ... CCGT */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1100    0x5C ... CCTA */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1101    0x5D ... CCTC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0101.1110    0x5E ... CCTG */ RNA_SPLICE_UNKNOWN,
+    /* 0101.1111    0x5F ... CCTT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0110.0000    0x60 ... CGAA */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.0001    0x61 ... CGAC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0110.0010    0x62 ... CGAG */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.0011    0x63 ... CGAT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.0100    0x64 ... CGCA */ RNA_SPLICE_UNKNOWN,
+    /* 0110.0101    0x65 ... CGCC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.0110    0x66 ... CGCG */ RNA_SPLICE_UNKNOWN,
+    /* 0110.0111    0x67 ... CGCT */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1000    0x68 ... CGGA */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1001    0x69 ... CGGC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.1010    0x6A ... CGGG */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1011    0x6B ... CGGT */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1100    0x6C ... CGTA */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1101    0x6D ... CGTC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0110.1110    0x6E ... CGTG */ RNA_SPLICE_UNKNOWN,
+    /* 0110.1111    0x6F ... CGTT */ RNA_SPLICE_UNKNOWN,
+
+    /* 0111.0000    0x70 ... CTAA */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0111.0001    0x71 ... CTAC */ RNA_SPLICE_REV,            /* MAJOR reverse */
+    /* 0111.0010    0x72 ... CTAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 0111.0011    0x73 ... CTAT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0111.0100    0x74 ... CTCA */ RNA_SPLICE_UNKNOWN,
+    /* 0111.0101    0x75 ... CTCC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0111.0110    0x76 ... CTCG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0111.0111    0x77 ... CTCT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0111.1000    0x78 ... CTGA */ RNA_SPLICE_UNKNOWN,
+    /* 0111.1001    0x79 ... CTGC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0111.1010    0x7A ... CTGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0111.1011    0x7B ... CTGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 0111.1100    0x7C ... CTTA */ RNA_SPLICE_UNKNOWN,
+    /* 0111.1101    0x7D ... CTTC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 0111.1110    0x7E ... CTTG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 0111.1111    0x7F ... CTTT */ ( RNA_SPLICE_REV | 0x20 ),
+
+    /* 1000.0000    0x80 ... GAAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1000.0001    0x81 ... GAAC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1000.0010    0x82 ... GAAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1000.0011    0x83 ... GAAT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1000.0100    0x84 ... GACA */ RNA_SPLICE_UNKNOWN,
+    /* 1000.0101    0x85 ... GACC */ RNA_SPLICE_UNKNOWN,
+    /* 1000.0110    0x86 ... GACG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1000.0111    0x87 ... GACT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1000.1000    0x88 ... GAGA */ RNA_SPLICE_UNKNOWN,
+    /* 1000.1001    0x89 ... GAGC */ RNA_SPLICE_UNKNOWN,
+    /* 1000.1010    0x8A ... GAGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1000.1011    0x8B ... GAGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1000.1100    0x8C ... GATA */ RNA_SPLICE_UNKNOWN,
+    /* 1000.1101    0x8D ... GATC */ RNA_SPLICE_UNKNOWN,
+    /* 1000.1110    0x8E ... GATG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1000.1111    0x8F ... GATT */ ( RNA_SPLICE_REV | 0x20 ),
+
+    /* 1001.0000    0x90 ... GCAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1001.0001    0x91 ... GCAC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1001.0010    0x92 ... GCAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1001.0011    0x93 ... GCAT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1001.0100    0x94 ... GCCA */ RNA_SPLICE_UNKNOWN,
+    /* 1001.0101    0x95 ... GCCC */ RNA_SPLICE_UNKNOWN,
+    /* 1001.0110    0x96 ... GCCG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1001.0111    0x97 ... GCCT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1001.1000    0x98 ... GCGA */ RNA_SPLICE_UNKNOWN,
+    /* 1001.1001    0x99 ... GCGC */ RNA_SPLICE_UNKNOWN,
+    /* 1001.1010    0x9A ... GCGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1001.1011    0x9B ... GCGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1001.1100    0x9C ... GCTA */ RNA_SPLICE_UNKNOWN,
+    /* 1001.1101    0x9D ... GCTC */ RNA_SPLICE_UNKNOWN,
+    /* 1001.1110    0x9E ... GCTG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1001.1111    0x9F ... GCTT */ ( RNA_SPLICE_REV | 0x20 ),
+
+    /* 1010.0000    0xA0 ... GGAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1010.0001    0xA1 ... GGAC */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1010.0010    0xA2 ... GGAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1010.0011    0xA3 ... GGAT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1010.0100    0xA4 ... GGCA */ RNA_SPLICE_UNKNOWN,
+    /* 1010.0101    0xA5 ... GGCC */ RNA_SPLICE_UNKNOWN,
+    /* 1010.0110    0xA6 ... GGCG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1010.0111    0xA7 ... GGCT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1010.1000    0xA8 ... GGGA */ RNA_SPLICE_UNKNOWN,
+    /* 1010.1001    0xA9 ... GGGC */ RNA_SPLICE_UNKNOWN,
+    /* 1010.1010    0xAA ... GGGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1010.1011    0xAB ... GGGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1010.1100    0xAC ... GGTA */ RNA_SPLICE_UNKNOWN,
+    /* 1010.1101    0xAD ... GGTC */ RNA_SPLICE_UNKNOWN,
+    /* 1010.1110    0xAE ... GGTG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1010.1111    0xAF ... GGTT */ ( RNA_SPLICE_REV | 0x20 ),
+
+    /* 1011.0000    0xB0 ... GTAA */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1011.0001    0xB1 ... GTAC */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1011.0010    0xB2 ... GTAG */ RNA_SPLICE_FWD,            /* MAJOR forward */
+    /* 1011.0011    0xB3 ... GTAT */ RNA_SPLICE_REV,            /* MINOR reverse */
+    /* 1011.0100    0xB4 ... GTCA */ RNA_SPLICE_UNKNOWN,
+    /* 1011.0101    0xB5 ... GTCC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1011.0110    0xB6 ... GTCG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1011.0111    0xB7 ... GTCT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1011.1000    0xB8 ... GTGA */ RNA_SPLICE_UNKNOWN,
+    /* 1011.1001    0xB9 ... GTGC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1011.1010    0xBA ... GTGG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1011.1011    0xBB ... GTGT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1011.1100    0xBC ... GTTA */ RNA_SPLICE_UNKNOWN,
+    /* 1011.1101    0xBD ... GTTC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1011.1110    0xBE ... GTTG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1011.1111    0xBF ... GTTT */ ( RNA_SPLICE_REV | 0x10 ),
+
+    /* 1100.0000    0xC0 ... TAAA */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0001    0xC1 ... TAAC */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0010    0xC2 ... TAAG */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0011    0xC3 ... TAAT */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0100    0xC4 ... TACA */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0101    0xC5 ... TACC */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0110    0xC6 ... TACG */ RNA_SPLICE_UNKNOWN,
+    /* 1100.0111    0xC7 ... TACT */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1000    0xC8 ... TAGA */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1001    0xC9 ... TAGC */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1010    0xCA ... TAGG */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1011    0xCB ... TAGT */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1100    0xCC ... TATA */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1101    0xCD ... TATC */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1110    0xCE ... TATG */ RNA_SPLICE_UNKNOWN,
+    /* 1100.1111    0xCF ... TATT */ RNA_SPLICE_UNKNOWN,
+
+    /* 1101.0000    0xE0 ... TCAA */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0001    0xE1 ... TCAC */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0010    0xE2 ... TCAG */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0011    0xE3 ... TCAT */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0100    0xE4 ... TCCA */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0101    0xE5 ... TCCC */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0110    0xE6 ... TCCG */ RNA_SPLICE_UNKNOWN,
+    /* 1101.0111    0xE7 ... TCCT */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1000    0xE8 ... TCGA */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1001    0xE9 ... TCGC */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1010    0xEA ... TCGG */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1011    0xEB ... TCGT */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1100    0xEC ... TCTA */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1101    0xED ... TCTC */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1110    0xEE ... TCTG */ RNA_SPLICE_UNKNOWN,
+    /* 1101.1111    0xEF ... TCTT */ RNA_SPLICE_UNKNOWN,
+
+    /* 1111.0000    0xF0 ... TTAA */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1111.0001    0xF1 ... TTAC */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1111.0010    0xF2 ... TTAG */ ( RNA_SPLICE_FWD | 0x10 ),
+    /* 1111.0011    0xF3 ... TTAT */ ( RNA_SPLICE_REV | 0x10 ),
+    /* 1111.0100    0xF4 ... TTCA */ RNA_SPLICE_UNKNOWN,
+    /* 1111.0101    0xF5 ... TTCC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1111.0110    0xF6 ... TTCG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1111.0111    0xF7 ... TTCT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1111.1000    0xF8 ... TTGA */ RNA_SPLICE_UNKNOWN,
+    /* 1111.1001    0xF9 ... TTGC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1111.1010    0xFA ... TTGG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1111.1011    0xFB ... TTGT */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1111.1100    0xFC ... TTTA */ RNA_SPLICE_UNKNOWN,
+    /* 1111.1101    0xFD ... TTTC */ ( RNA_SPLICE_REV | 0x20 ),
+    /* 1111.1110    0xFE ... TTTG */ ( RNA_SPLICE_FWD | 0x20 ),
+    /* 1111.1111    0xFF ... TTTT */ ( RNA_SPLICE_REV | 0x20 )
+};
+
+
+/*************************************************************
+    RNA-splice detector:
+
+    base  0   1   .......  n-2  n-1     direction
+
+          G   T             A    G      forward
+          A   T             A    C      forward
+
+          C   T             A    C      reverse
+          G   T             A    T      reverse
+
+
+    =========================================================
+
+    zero mismatches ( aka full matches ) :
+
+    ATAC    ... MINOR   [0x31]=RNA_SPLICE_FWD
+    CTAC    ... MAJOR   [0x71]=RNA_SPLICE_REV
+    GTAG    ... MAJOR   [0xB2]=RNA_SPLICE_FWD
+    GTAT    ... MINOR   [0xB3]=RNA_SPLICE_REV
+
+    =========================================================
+
+    one mismatch:
+
+    ATAC    ... MINOR, forward
+
+        *
+        CTAC ( is also MAJOR reverse ... )
+        GTAC ( is alow MAJOR reverse, 1 mismatch )
+        TTAC ( is alow MAJOR reverse, 1 mismatch )
+
+         *
+        AAAC [0x01]=( RNA_SPLICE_FWD | 0x10 )
+        ACAC [0x11]=( RNA_SPLICE_FWD | 0x10 )
+        AGAC [0x21]=( RNA_SPLICE_FWD | 0x10 )
+
+          *
+        ATCC [0x35]=( RNA_SPLICE_FWD | 0x10 )
+        ATGC [0x39]=( RNA_SPLICE_FWD | 0x10 )
+        ATTC [0x3D]=( RNA_SPLICE_FWD | 0x10 )
+
+           *
+        ATAA [0x30]=( RNA_SPLICE_FWD | 0x10 )
+        ATAG ( is also MAJOR forward, 1 mismatch )
+        ATAT [0x33]=( RNA_SPLICE_FWD | 0x10 )
+
+    -----------------------------------------------------------
+    CTAC    ... MAJOR, reverse
+
+        *
+        ATAC ( is also MINOR forward, full match )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        TTAC [0xF1]=( RNA_SPLICE_REV | 0x10 )
+
+         *
+        CAAC [0x41]=( RNA_SPLICE_REV | 0x10 )
+        CCAC [0x51]=( RNA_SPLICE_REV | 0x10 )
+        CGAC [0x61]=( RNA_SPLICE_REV | 0x10 )
+
+          *
+        CTCC [0x75]=( RNA_SPLICE_REV | 0x10 )
+        CTGC [0x79]=( RNA_SPLICE_REV | 0x10 )
+        CTTC [0x7D]=( RNA_SPLICE_REV | 0x10 )
+
+           *
+        CTAA [0x70]=( RNA_SPLICE_REV | 0x10 )
+        CTAG ( is also MAJOR forward, 1 mismatch )
+        CTAT [0x73]=( RNA_SPLICE_REV | 0x10 )
+
+    -----------------------------------------------------------
+    GTAG    ... MAJOR, forward
+
+        *
+        ATAG [0x32]=( RNA_SPLICE_FWD | 0x10 )
+        CTAG [0x72]=( RNA_SPLICE_FWD | 0x10 )
+        TTAG [0xF2]=( RNA_SPLICE_FWD | 0x10 )
+
+         *
+        GAAG [0x82]=( RNA_SPLICE_FWD | 0x10 )
+        GCAG [0x92]=( RNA_SPLICE_FWD | 0x10 )
+        GGAG [0xA2]=( RNA_SPLICE_FWD | 0x10 )
+
+          *
+        GTCG [0xB6]=( RNA_SPLICE_FWD | 0x10 )
+        GTGG [0xBA]=( RNA_SPLICE_FWD | 0x10 )
+        GTTG [0xBE]=( RNA_SPLICE_FWD | 0x10 )
+
+           *
+        GTAA [0xB0]=( RNA_SPLICE_FWD | 0x10 )
+        GTAC [0xB1]=( RNA_SPLICE_FWD | 0x10 )
+        GTAT ( is also MINOR reverse, full match )
+
+    -----------------------------------------------------------
+    GTAT    ... MINOR, reverse
+
+        *
+        ATAT ( is also MINOR forward, 1 mismatch )
+        CTAT ( is also MAJOR reverse, 1 mismatch )
+        TTAT [0xF3]=( RNA_SPLICE_REV | 0x10 )
+
+         *
+        GAAT [0x83]=( RNA_SPLICE_REV | 0x10 )
+        GCAT [0x93]=( RNA_SPLICE_REV | 0x10 )
+        GGAT [0xA3]=( RNA_SPLICE_REV | 0x10 )
+
+          *
+        GTCT [0xB7]=( RNA_SPLICE_REV | 0x10 )
+        GTGT [0xBB]=( RNA_SPLICE_REV | 0x10 )
+        GTTT [0xBF]=( RNA_SPLICE_REV | 0x10 )
+
+           *
+        GTAA ( is also MAJOR forward, 1 mismatch )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        GTAG ( is also MAJOR forward, full match )
+
+    =========================================================
+
+    two mismatches:
+
+    ATAC    ... MINOR, forward
+
+        * *
+        CTAC ( is also MAJOR reverse, full match )
+        CTCC ( is also MAJOR reverse, 1 mismatch )
+        CTGC ( is also MAJOR reverse, 1 mismatch )
+        CTTC ( is also MAJOR reverse, 1 mismatch )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        GTCC ( is also MAJOR reverse, 2 mismatches )
+        GTGC ( is also MAJOR reverse, 2 mismatches )
+        GTTC ( is also MAJOR reverse, 2 mismatches )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTCC ( is also MAJOR reverse, 2 mismatches )
+        TTGC ( is also MAJOR reverse, 2 mismatches )
+        TTTC ( is also MAJOR reverse, 2 mismatches )
+
+         **
+        AAAC ( is also MAJOR forward, 1 mismatch )
+        AACC [0x05]=( RNA_SPLICE_FWD | 0x20 )
+        AAGC [0x09]=( RNA_SPLICE_FWD | 0x20 )
+        AATC [0x0D]=( RNA_SPLICE_FWD | 0x20 )
+        ACAC ( is also MINOR forward, 1 mismatch )
+        ACCC [0x15]=( RNA_SPLICE_FWD | 0x20 )
+        ACGC [0x19]=( RNA_SPLICE_FWD | 0x20 )
+        ACTC [0x1D]=( RNA_SPLICE_FWD | 0x20 )
+        AGAC ( is also MINOR forward, 1 mismatch )
+        AGCC [0x25]=( RNA_SPLICE_FWD | 0x20 )
+        AGGC [0x29]=( RNA_SPLICE_FWD | 0x20 )
+        AGTC [0x2D]=( RNA_SPLICE_FWD | 0x20 )
+
+        *  *
+        CTAA ( is also MAJOR reverse, 1 mismatch )
+        CTAC ( is also MAJOR reverse, full match )
+        CTAG ( is also MAJOR forward, 1 mismatch )
+        CTAT ( is also MAJOR reverse, 1 mismatch )
+        GTAA ( is also MAJOR forward, 1 mismatch )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        GTAG ( is also MAJOR forward, full match )
+        GTAT ( is also MINOR reverse, full match )
+        TTAA ( is also MAJOR reverse, 2 mismatches )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTAG ( is also MAJOR forward, 1 mismatch )
+        TTAT ( is also MINOR reverse, 1 mismatch )
+
+         * *
+        AAAA [0x00]=( RNA_SPLICE_FWD | 0x20 )
+        AAAC ( is also MAJOR forward, 1 mismatch )
+        AAAG [0x02]=( RNA_SPLICE_FWD | 0x20 )
+        AAAT [0x03]=( RNA_SPLICE_FWD | 0x20 )
+        ACAA [0x10]=( RNA_SPLICE_FWD | 0x20 )
+        ACAC ( is also MINOR forward, 1 mismatch )
+        ACAG [0x12]=( RNA_SPLICE_FWD | 0x20 )
+        ACAT [0x13]=( RNA_SPLICE_FWD | 0x20 )
+        AGAA [0x20]=( RNA_SPLICE_FWD | 0x20 )
+        AGAC ( is also MINOR forward, 1 mismatch )
+        AGAG [0x22]=( RNA_SPLICE_FWD | 0x20 )
+        AGAT [0x23]=( RNA_SPLICE_FWD | 0x20 )
+
+    -----------------------------------------------------------
+    CTAC    ... MAJOR, reverse
+
+        * *
+        ATAC ( is also MINOR forward, full match )
+        ATCC ( is also MINOR forward, 1 mismatch )
+        ATGC ( is also MINOR forward, 1 mismatch )
+        ATTC ( is also MINOR forward, 1 mismatch )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        GTCC [0xB5]=( RNA_SPLICE_REV | 0x20 )
+        GTGC [0xB9]=( RNA_SPLICE_REV | 0x20 )
+        GTTC [0xBD]=( RNA_SPLICE_REV | 0x20 )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTCC [0xF5]=( RNA_SPLICE_REV | 0x20 )
+        TTGC [0xF9]=( RNA_SPLICE_REV | 0x20 )
+        TTTC [0xFD]=( RNA_SPLICE_REV | 0x20 )
+
+         **
+        CAAC ( is also MAJOR reverse, 1 mismatch )
+        CACC [0x45]=( RNA_SPLICE_REV | 0x20 )
+        CAGC [0x49]=( RNA_SPLICE_REV | 0x20 )
+        CATC [0x4D]=( RNA_SPLICE_REV | 0x20 )
+        CCAC ( is also MAJOR reverse, 1 mismatch )
+        CCCC [0x55]=( RNA_SPLICE_REV | 0x20 )
+        CCGC [0x59]=( RNA_SPLICE_REV | 0x20 )
+        CCTC [0x5D]=( RNA_SPLICE_REV | 0x20 )
+        CGAC ( is also MAJOR reverse, 1 mismatch )
+        CGCC [0x65]=( RNA_SPLICE_REV | 0x20 )
+        CGGC [0x69]=( RNA_SPLICE_REV | 0x20 )
+        CGTC [0x6D]=( RNA_SPLICE_REV | 0x20 )
+
+        *  *
+        ATAA ( is also MINOR forward, 1 mismatch )
+        ATAC ( is also MINOR forward, full match )
+        ATAG ( is also MAJOR forward, 1 mismatch )
+        ATAT ( is also MINOR forward, 1 mismatch )
+        GTAA ( is also MAJOR forward, 1 mismatch )
+        GTAC ( is also MAJOR forward, 1 mismatch )
+        GTAG ( is also MAJOR forward, full match )
+        GTAT ( is also MINOR reverse, full match )
+        TTAA ( is also MAJOR forward, 2 mismatches )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTAG ( is also MAJOR forward, 1 mismatch )
+        TTAT ( is also MINOR reverse, 1 mismatch )
+
+         * *
+        CAAA [0x40]=( RNA_SPLICE_REV | 0x20 )
+        CAAC ( is also MAJOR reverse, 1 mismatch )
+        CAAG [0x42]=( RNA_SPLICE_REV | 0x20 )
+        CAAT [0x43]=( RNA_SPLICE_REV | 0x20 )
+        CCAA [0x50]=( RNA_SPLICE_REV | 0x20 )
+        CCAC ( is also MAJOR reverse, 1 mismatch )
+        CCAG [0x52]=( RNA_SPLICE_REV | 0x20 )
+        CCAT [0x53]=( RNA_SPLICE_REV | 0x20 )
+        CGAA [0x60]=( RNA_SPLICE_REV | 0x20 )
+        CGAC ( is also MAJOR reverse, 1 mismatch )
+        CGAG [0x62]=( RNA_SPLICE_REV | 0x20 )
+        CGAT [0x63]=( RNA_SPLICE_REV | 0x20 )
+
+    -----------------------------------------------------------
+    GTAG    ... MAJOR, forward
+
+        * *
+        ATAG ( is also MAJOR forward, 1 mismatch )
+        ATCG [0x36]=( RNA_SPLICE_FWD | 0x20 )
+        ATGG [0x3A]=( RNA_SPLICE_FWD | 0x20 )
+        ATTG [0x3E]=( RNA_SPLICE_FWD | 0x20 )
+        CTAG ( is also MAJOR forward, 1 mismatch )
+        CTCG [0x76]=( RNA_SPLICE_FWD | 0x20 )
+        CTGG [0x7A]=( RNA_SPLICE_FWD | 0x20 )
+        CTTG [0x7E]=( RNA_SPLICE_FWD | 0x20 )
+        TTAG ( is also MAJOR forward, 1 mismatch )
+        TTCG [0xF6]=( RNA_SPLICE_FWD | 0x20 )
+        TTGG [0xFA]=( RNA_SPLICE_FWD | 0x20 )
+        TTTG [0xFE]=( RNA_SPLICE_FWD | 0x20 )
+
+         **
+        GAAG ( is also MAJOR forward, 1 mismatch )
+        GACG [0x86]=( RNA_SPLICE_FWD | 0x20 )
+        GAGG [0x8A]=( RNA_SPLICE_FWD | 0x20 )
+        GATG [0x8E]=( RNA_SPLICE_FWD | 0x20 )
+        GCAG ( is also MAJOR forward, 1 mismatch )
+        GCCG [0x96]=( RNA_SPLICE_FWD | 0x20 )
+        GCGG [0x9A]=( RNA_SPLICE_FWD | 0x20 )
+        GCTG [0x9E]=( RNA_SPLICE_FWD | 0x20 )
+        GGAG ( is also MAJOR forward, 1 mismatch )
+        GGCG [0xA6]=( RNA_SPLICE_FWD | 0x20 )
+        GGGG [0xAA]=( RNA_SPLICE_FWD | 0x20 )
+        GGTG [0xAE]=( RNA_SPLICE_FWD | 0x20 )
+
+        *  *
+        ATAA ( is also MINOR forward, 1 mismatch )
+        ATAC ( is also MINOR forward, full match )
+        ATAG ( is also MAJOR forward, 1 mismatch )
+        ATAT ( is also MINOR forward, 1 mismatch )
+        CTAA ( is also MAJOR reverse, 1 mismatch )
+        CTAC ( is also MAJOR reverse, full match )
+        CTAG ( is also MAJOR forward, 1 mismatch )
+        CTAT ( is also MAJOR reverse, 1 mismatch )
+        TTAA [0xF0]=( RNA_SPLICE_FWD | 0x20 )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTAG ( is also MAJOR forward, 1 mismatch )
+        TTAT ( is also MINOR reverse, 1 mismatch )
+
+         * *
+        GAAA [0x80]=( RNA_SPLICE_FWD | 0x20 )
+        GAAC [0x81]=( RNA_SPLICE_FWD | 0x20 )
+        GAAG ( is also MAJOR forward, 1 mismatch )
+        GAAT ( is also MINOR reverse, 1 mismatch )
+        GCAA [0x90]=( RNA_SPLICE_FWD | 0x20 )
+        GCAC [0x91]=( RNA_SPLICE_FWD | 0x20 )
+        GCAG ( is also MAJOR forward, 1 mismatch )
+        GCAT ( is also MINOR reverse, 1 mismatch )
+        GGAA [0xA0]=( RNA_SPLICE_FWD | 0x20 )
+        GGAC [0xA1]=( RNA_SPLICE_FWD | 0x20 )
+        GGAG ( is also MAJOR forward, 1 mismatch )
+        GGAT ( is also MINOR reverse, 1 mismatch )
+
+    -----------------------------------------------------------
+    GTAT    ... MINOR, reverse
+
+        * *
+        ATAT ( is also MINOR forward, 1 mismatch )
+        ATCT [0x37]=( RNA_SPLICE_REV | 0x20 )
+        ATGT [0x3B]=( RNA_SPLICE_REV | 0x20 )
+        ATTT [0x3F]=( RNA_SPLICE_REV | 0x20 )
+        CTAT ( is also MAJOR reverse, 1 mismatch )
+        CTCT [0x77]=( RNA_SPLICE_REV | 0x20 )
+        CTGT [0x7B]=( RNA_SPLICE_REV | 0x20 )
+        CTTT [0x7F]=( RNA_SPLICE_REV | 0x20 )
+        TTAT ( is also MINOR reverse, 1 mismatch )
+        TTCT [0xF7]=( RNA_SPLICE_REV | 0x20 )
+        TTGT [0xFB]=( RNA_SPLICE_REV | 0x20 )
+        TTTT [0xFF]=( RNA_SPLICE_REV | 0x20 )
+
+         **
+        GAAT ( is also MINOR reverse, 1 mismatch )
+        GACT [0x87]=( RNA_SPLICE_REV | 0x20 )
+        GAGT [0x8B]=( RNA_SPLICE_REV | 0x20 )
+        GATT [0x8F]=( RNA_SPLICE_REV | 0x20 )
+        GCAT ( is also MINOR reverse, 1 mismatch )
+        GCCT [0x97]=( RNA_SPLICE_REV | 0x20 )
+        GCGT [0x9B]=( RNA_SPLICE_REV | 0x20 )
+        GCTT [0x9F]=( RNA_SPLICE_REV | 0x20 )
+        GGAT ( is also MINOR reverse, 1 mismatch )
+        GGCT [0xA7]=( RNA_SPLICE_REV | 0x20 )
+        GGGT [0xAB]=( RNA_SPLICE_REV | 0x20 )
+        GGTT [0xAF]=( RNA_SPLICE_REV | 0x20 )
+
+        *  *
+        ATAA ( is also MINOR forward, 1 mismatch )
+        ATAC ( is also MINOR forward, full match )
+        ATAG ( is also MAJOR forward, 1 mismatch )
+        ATAT ( is also MINOR forward, 1 mismatch )
+        CTAA ( is also MAJOR reverse, 1 mismatch )
+        CTAC ( is also MAJOR reverse, full match )
+        CTAG ( is also MAJOR forward, 1 mismatch )
+        CTAT ( is also MAJOR reverse, 1 mismatch )
+        TTAA ( is also MAJOR forward, 2 mismatches )
+        TTAC ( is also MAJOR reverse, 1 mismatch )
+        TTAG ( is also MAJOR forward, 1 mismatch )
+        TTAT ( is also MINOR reverse, 1 mismatch )
+
+         * *
+        GAAA ( is also MAJOR forward, 2 mismatches )
+        GAAC ( is also MAJOR forward, 2 mismatches )
+        GAAG ( is also MAJOR forward, 1 mismatch )
+        GAAT ( is also MINOR reverse, 1 mismatch )
+        GCAA ( is also MAJOR forward, 2 mismatches )
+        GCAC ( is also MAJOR forward, 2 mismatches )
+        GCAG ( is also MAJOR forward, 1 mismatch )
+        GCAT ( is also MINOR reverse, 1 mismatch )
+        GGAA ( is also MAJOR forward, 2 mismatches )
+        GGAC ( is also MAJOR forward, 2 mismatches )
+        GGAG ( is also MAJOR forward, 1 mismatch )
+        GGAT ( is also MINOR reverse, 1 mismatch )
+
+*************************************************************/
+
+rc_t check_rna_splicing_candidates_against_ref( struct ReferenceObj const * ref_obj,
+                                                uint32_t splice_level, /* 0, 1, 2 ... allowed mismatches */
+                                                INSDC_coord_zero pos,
+                                                rna_splice_candidates * candidates )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+    for ( idx = 0; idx < candidates->count && rc == 0; ++idx )
+    {
+        uint8_t splice[ 4 ];
+        INSDC_coord_len written;
+        rna_splice_candidate * rsc = &candidates->candidates[ idx ];
+        INSDC_coord_zero rd_pos = ( pos + rsc->ref_offset );
+        rc = ReferenceObj_Read( ref_obj, rd_pos, 2, splice, &written );
+        if ( rc == 0 && written == 2 )
+        {
+            rd_pos += ( rsc->len - 2 );
+            rc = ReferenceObj_Read( ref_obj, rd_pos, 2, &splice[ 2 ], &written );
+            if ( rc == 0 && written == 2 )
+            {
+                uint8_t compressed = compress_4_bases_to_byte( splice );   /* 4 bases --> 1 byte */
+                uint8_t match = compressed_to_fwd_reverse_0[ compressed ]; /* table lookup */
+                uint8_t mismatches = ( match >> 4 );
+
+                if ( mismatches <= splice_level )
+                {
+                    rsc->matched = match;
+
+                    if ( ( match & RNA_SPLICE_FWD ) == RNA_SPLICE_FWD )
+                        candidates->fwd_matched++;
+                    else if ( ( match & RNA_SPLICE_REV ) == RNA_SPLICE_REV )
+                        candidates->rev_matched++;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t discover_rna_splicing_candidates( uint32_t cigar_len, const char * cigar, uint32_t min_len, rna_splice_candidates * candidates )
+{
+    rc_t rc = 0;
+    candidates->cigops_len = ( cigar_len / 2 ) + 1;
+    candidates->cigops = malloc( ( sizeof * candidates->cigops ) * candidates->cigops_len );
+    if ( candidates->cigops == NULL )
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        uint32_t ref_offset = 0;
+        int32_t op_idx;
+        CigOps * cigops = candidates->cigops;
+
+        candidates->n_cigops = ExplodeCIGAR( cigops, candidates->cigops_len, cigar, cigar_len );
+        candidates->count = 0;
+        for ( op_idx = 0; op_idx < ( candidates->n_cigops - 1 ); op_idx++ )
+        {
+            char op_code = cigops[ op_idx ].op;
+            uint32_t op_len = cigops[ op_idx ].oplen;
+            if ( (op_code == 'D' || op_code == 'N') && op_len >= min_len && candidates->count < MAX_RNA_SPLICE_CANDIDATES )
+            {
+                rna_splice_candidate * rsc = &candidates->candidates[ candidates->count++ ];
+                rsc->ref_offset = ref_offset;
+                rsc->len = op_len;
+                rsc->op_idx = op_idx;
+                rsc->matched = RNA_SPLICE_UNKNOWN;  /* we dont know that yet, caller has to do that ( sam-aligned.c ) */
+            }
+            if ( op_code == 'M' || op_code == 'X' || op_code == '=' || op_code == 'D' || op_code == 'N' )
+                ref_offset += op_len;
+        }
+    }
+    return rc;
+}
+
+
+
+rc_t change_rna_splicing_cigar( uint32_t cigar_len, char * cigar, rna_splice_candidates * candidates, uint32_t * NM_adjustment )
+{
+    rc_t rc = 0;
+    uint32_t winner, sum_of_n_lengths = 0;
+    int32_t idx, dst;
+    CigOps * cigops = candidates->cigops;
+
+    /* handle the special case that we do have forward and reverse candidates in one alignement, that cannot be!
+       we declare a winner ( the direction that occurs most ), zero out the looser(s) and give a warning */
+    if ( candidates->fwd_matched > candidates->rev_matched )
+        winner = RNA_SPLICE_FWD;
+    else
+        winner = RNA_SPLICE_REV;
+
+    for ( idx = 0; idx < candidates->count; ++idx )    
+    {
+        rna_splice_candidate * rsc = &candidates->candidates[ idx ];
+        if ( ( rsc->matched & 0x0F ) == winner && cigops[ rsc->op_idx ].op == 'D' )
+        {
+            cigops[ rsc->op_idx ].op = 'N';
+            sum_of_n_lengths += rsc->len;
+        }
+    }
+
+    for ( idx = 0, dst = 0; idx < ( candidates->n_cigops - 1 ) && rc == 0; ++idx )
+    {
+        size_t sz;
+        rc = string_printf( &cigar[ dst ], cigar_len + 1 - dst, &sz, "%u%c", cigops[ idx ].oplen, cigops[ idx ].op );
+        dst += sz;
+    }
+    if ( NM_adjustment != NULL )
+        *NM_adjustment = sum_of_n_lengths;
+    return rc;
+}
+rc_t cg_canonical_print_cigar( const char * cigar, size_t cigar_len)
+{
+    rc_t rc;
+    if ( cigar_len > 0 )
+    {
+        int i,total_cnt,cnt;
+        char op;
+        for(i=0,cnt=0,op=0,cnt=0;i<cigar_len;i++){
+                if(isdigit(cigar[i])){
+                        cnt=cnt*10+(cigar[i]-'0');
+                } else if(isalpha(cigar[i])){
+                        if(op=='\0'){ /** first op **/
+                                total_cnt=cnt;
+                        } else if(op==cigar[i]){ /** merging consequitive ops **/
+                                total_cnt+=cnt;
+                        } else {
+                                if(total_cnt > 0) KOutMsg( "%d%c", total_cnt,op );
+                                total_cnt=cnt;
+                        }
+                        op=cigar[i];
+                        cnt=0;
+                } else {
+                        assert(0); /*** should never happen inside this function ***/
+                }
+        }
+        if(total_cnt && op) KOutMsg( "%d%c", total_cnt,op );
+    }
+    else
+        rc = KOutMsg( "*" );
+    return rc;
+}
+
diff --git a/tools/sra-pileup/cg_tools.h b/tools/sra-pileup/cg_tools.h
new file mode 100644
index 0000000..9f7bd66
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.h
@@ -0,0 +1,137 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cgtools_
+#define _h_cgtools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+#include <insdc/sra.h>
+#include <insdc/sra.h>
+#include <align/reference.h>
+
+#define MAX_CG_CIGAR_LEN ( ( 11 * 35 ) + 1 )
+#define MAX_GC_LEN ( ( 11 * 3 ) + 1 )
+#define MAX_READ_LEN ( 35 )
+
+
+typedef struct ptr_len
+{
+    const char * ptr;
+    uint32_t len;
+} ptr_len;
+
+typedef struct cg_cigar_input
+{
+    ptr_len p_cigar;
+    ptr_len p_read;
+    ptr_len p_quality;
+
+    bool orientation;
+    INSDC_coord_one seq_req_id;
+    bool edit_dist_available;
+    int32_t edit_dist;
+} cg_cigar_input;
+
+
+typedef struct cg_cigar_output
+{
+    char cigar[ MAX_CG_CIGAR_LEN ];
+    uint32_t cigar_len;
+
+    ptr_len p_cigar;
+    ptr_len p_read;
+    ptr_len p_quality;
+    ptr_len p_tags;
+
+    char newSeq[ MAX_READ_LEN ];
+    char newQual[ MAX_READ_LEN ];
+    char tags[ MAX_CG_CIGAR_LEN * 2 ];
+
+    int32_t edit_dist;
+} cg_cigar_output;
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output );
+
+rc_t make_cg_merge( const cg_cigar_input * input, cg_cigar_output * output );
+
+
+typedef struct CigOps
+{
+    char op;
+    int8_t   ref_sign; /* 0;+1;-1; ref_offset = ref_sign * offset */
+    int8_t   seq_sign; /* 0;+1;-1; seq_offset = seq_sign * offset */
+    uint32_t oplen;
+} CigOps;
+
+
+int32_t ExplodeCIGAR( CigOps dst[], uint32_t len, char const cigar[], uint32_t ciglen );
+
+uint32_t CombineCIGAR( char dst[], CigOps const seqOp[], uint32_t seq_len,
+                       uint32_t refPos, CigOps const refOp[], uint32_t ref_len );
+
+#define RNA_SPLICE_UNKNOWN 0
+#define RNA_SPLICE_FWD 1
+#define RNA_SPLICE_REV 2
+
+typedef struct rna_splice_candidate
+{
+    uint32_t ref_offset;
+    uint32_t len;
+    uint32_t op_idx;
+    uint32_t matched;   /* 0..unknown, 1..fwd, 2..rev */
+} rna_splice_candidate;
+
+
+#define MAX_RNA_SPLICE_CANDIDATES 20
+
+typedef struct rna_splice_candidates
+{
+    rna_splice_candidate candidates[ MAX_RNA_SPLICE_CANDIDATES ];
+    CigOps * cigops;
+    uint32_t count, fwd_matched, rev_matched, cigops_len;
+    int32_t n_cigops;
+} rna_splice_candidates;
+
+
+rc_t discover_rna_splicing_candidates( uint32_t cigar_len, const char * cigar, uint32_t min_len, rna_splice_candidates * candidates );
+
+rc_t check_rna_splicing_candidates_against_ref( struct ReferenceObj const * ref_obj,
+                                                uint32_t splice_level,
+                                                INSDC_coord_zero pos,
+                                                rna_splice_candidates * candidates );
+
+rc_t change_rna_splicing_cigar( uint32_t cigar_len, char * cigar, rna_splice_candidates * candidates, uint32_t * NM_adjustment );
+rc_t cg_canonical_print_cigar( const char * cigar, size_t cigar_len);
+
+#endif
diff --git a/tools/sra-pileup/cmdline_cmn.c b/tools/sra-pileup/cmdline_cmn.c
new file mode 100644
index 0000000..c9cc9e5
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.c
@@ -0,0 +1,711 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cmdline_cmn.h"
+
+#include <kapp/args.h>
+
+#include <vdb/report.h> /* ReportResetTable */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+
+#include <sra/srapath.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+const char * ref_usage[] = { "Filter by position on genome.",
+                             "Name can either be file specific name",
+                             "(ex: \"chr1\" or \"1\").",
+                             "\"from\" and \"to\" are 1-based coordinates",
+                             NULL };
+
+const char * outf_usage[] = { "Output will be written to this file",
+                              "instead of std-out", NULL };
+
+const char * table_usage[] = { "Which alignment table(s) to use (p|s|e):", 
+                               "p - primary, s - secondary, e - evidence-interval", 
+                               "(default = p)", NULL };
+
+const char * gzip_usage[] = { "Compress output using gzip", NULL };
+
+const char * bzip_usage[] = { "Compress output using bzip2", NULL };
+
+const char * inf_usage[] = { "File with all input-parameters / options", NULL };
+
+const char * schema_usage[] = { "optional schema-file to be used", NULL };
+
+const char * no_mt_usage[] = { "disable multithreading", NULL };
+
+const char * timing_usage[] = { "write timing log-file", NULL };
+
+#define OPTION_OUTF    "outfile"
+#define ALIAS_OUTF     "o"
+
+#define OPTION_TABLE   "table"
+#define ALIAS_TABLE    "t"
+
+#define OPTION_GZIP    "gzip"
+#define ALIAS_GZIP     NULL
+
+#define OPTION_BZIP    "bzip2"
+#define ALIAS_BZIP     NULL
+
+#define OPTION_INF    "infile"
+#define ALIAS_INF     "f"
+
+#define OPTION_SCHEMA "schema"
+#define ALIAS_SCHEMA  "S"
+
+#define OPTION_NO_MT  "disable-multithreading"
+#define OPTION_TIMING "timing"
+
+OptDef CommonOptions[] =
+{
+    /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_REF,     ALIAS_REF,     NULL, ref_usage,     0,        true,        false },
+    { OPTION_OUTF,    ALIAS_OUTF,    NULL, outf_usage,    1,        true,        false },
+    { OPTION_TABLE,   ALIAS_TABLE,   NULL, table_usage,   1,        true,        false },
+    { OPTION_GZIP,    ALIAS_GZIP,    NULL, gzip_usage,    1,        false,       false },
+    { OPTION_BZIP,    ALIAS_BZIP,    NULL, bzip_usage,    1,        false,       false },
+    { OPTION_INF,     ALIAS_INF,     NULL, inf_usage,     0,        true,        false },
+    { OPTION_SCHEMA,  ALIAS_SCHEMA,  NULL, schema_usage,  1,        true,        false },
+    { OPTION_NO_MT,   NULL,          NULL, no_mt_usage,   1,        false,       false },  
+    { OPTION_TIMING,  NULL,          NULL, timing_usage,  1,        true,        false }
+};
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, (const void **)res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+rc_t get_common_options( Args * args, common_options *opts )
+{
+    rc_t rc = get_str_option( args, OPTION_OUTF, &opts->output_file );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_INF, &opts->input_file );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_GZIP, &opts->gzip_output, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_BZIP, &opts->bzip_output, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_NO_MT, &opts->no_mt, false );
+        
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_SCHEMA, &opts->schema_file );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_TIMING, &opts->timing_file );
+
+    if ( rc == 0 )
+    {
+        const char * table2use = NULL;
+        rc = get_str_option( args, OPTION_TABLE, &table2use );
+        opts->tab_select = primary_ats;
+        if ( rc == 0 && table2use != NULL )
+        {
+            size_t l = string_size ( table2use );
+            opts->tab_select = 0;
+            if ( ( string_chr ( table2use, l, 'p' ) != NULL )||
+                 ( string_chr ( table2use, l, 'P' ) != NULL ) )
+            { opts->tab_select |= primary_ats; };
+
+            if ( ( string_chr ( table2use, l, 's' ) != NULL )||
+                 ( string_chr ( table2use, l, 'S' ) != NULL ) )
+            { opts->tab_select |= secondary_ats; };
+
+            if ( ( string_chr ( table2use, l, 'e' ) != NULL )||
+                 ( string_chr ( table2use, l, 'E' ) != NULL ) )
+            { opts->tab_select |= evidence_ats; };
+        }
+    }
+
+    return rc;
+}
+
+void print_common_helplines( void )
+{
+    HelpOptionLine ( ALIAS_REF, OPTION_REF, "name[:from-to]", ref_usage );
+    HelpOptionLine ( ALIAS_OUTF, OPTION_OUTF, "output-file", outf_usage );
+    HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "shortcut", table_usage );
+    HelpOptionLine ( ALIAS_BZIP, OPTION_BZIP, NULL, bzip_usage );
+    HelpOptionLine ( ALIAS_GZIP, OPTION_GZIP, NULL, gzip_usage );
+    HelpOptionLine ( NULL, OPTION_NO_MT, NULL, no_mt_usage );
+    HelpOptionLine ( NULL, OPTION_TIMING, NULL, timing_usage );
+}
+
+
+OptDef * CommonOptions_ptr( void )
+{
+    return &CommonOptions[ 0 ];
+}
+
+size_t CommonOptions_count( void )
+{
+    return ( sizeof CommonOptions / sizeof CommonOptions [ 0 ] );
+}
+
+
+/* =========================================================================================== */
+
+#if 0
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+#endif
+
+/* =========================================================================================== */
+
+
+rc_t init_ref_regions( BSTree * tree, Args * args )
+{
+    uint32_t count;
+    rc_t rc;
+
+    BSTreeInit( tree );
+    rc = ArgsOptionCount( args, OPTION_REF, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPTION_REF, i, (const void **)&s );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            else
+                rc = parse_and_add_region( tree, s );
+        }
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+    bool res = false;
+    size_t i, n = string_size ( path );
+    for ( i = 0; i < n && !res; ++i )
+    {
+        char c = path[ i ];
+        res = ( c == '.' || c == '/' || c == '\\' );
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+                           const char *accession,
+                           const size_t bufsize )
+{
+    rc_t rc;
+    char * res = calloc( 1, bufsize );
+    if ( res == NULL ) return NULL;
+
+    rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        free( res );
+        return NULL;
+    }
+    else if ( GetRCState( rc ) == rcInsufficient )
+    {
+        free( res );
+        return translate_accession( my_sra_path, accession, bufsize * 2 );
+    }
+    else if ( rc != 0 )
+    {
+        free( res );
+        return NULL;
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+    SRAPath *my_sra_path;
+    rc_t rc = 0;
+
+    if ( strchr ( *path, '/' ) != NULL )
+        return 0;
+
+    rc = SRAPathMake( &my_sra_path, my_dir );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "SRAPathMake() failed" );
+            }
+        }
+        else
+            rc = 0;
+    }
+    else
+    {
+        if ( !SRAPathTest( my_sra_path, *path ) )
+        {
+            char *buf = translate_accession( my_sra_path, *path, 64 );
+            if ( buf != NULL )
+            {
+                free( (char*)(*path) );
+                *path = buf;
+            }
+        }
+        SRAPathRelease( my_sra_path );
+    }
+    return rc;
+}
+#endif
+
+
+/* =========================================================================================== */
+
+
+/****************************************************************************************
+    splits an argument
+
+    example: "/path/file=grp1" into path = "/path/file" and attribute = "grp1"
+    or
+    example: "/path/file" into path = "/path/file" and attribute = NULL
+
+****************************************************************************************/
+static rc_t split_argument( const char *argument, char ** path, char ** attribute, char delim )
+{
+    if ( argument == NULL || path == NULL || attribute == NULL )
+        return RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        char * delim_ptr = string_chr ( argument, string_size ( argument ), delim );
+        if ( delim_ptr == NULL )
+        {
+            *path = string_dup_measure( argument, NULL );
+            *attribute = NULL;
+        }
+        else
+        {
+            size_t len = string_size( argument );
+            size_t len1 = ( delim_ptr - argument );
+            *path = string_dup ( argument, len1 );
+            if ( delim_ptr < argument + len - 1 )
+                *attribute = string_dup ( delim_ptr + 1, len - ( len1 + 1 ) );
+            else
+                *attribute = NULL;
+        }
+    }
+    return 0;
+}
+
+
+static rc_t split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+    size_t zz;
+    char readgroup_buffer[ 256 ];
+    rc_t rc1 = VPathOption( vpath, vpopt_readgroup, readgroup_buffer, sizeof readgroup_buffer - 1, &zz );
+    if ( rc1 == 0 )
+        *attribute = string_dup( readgroup_buffer, zz );
+    *path = string_dup( argument, string_size( argument ) );
+    return 0;
+}
+
+
+static rc_t test_split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+    rc_t rc = 0;
+#if 1
+    if ( VPathFromUri ( vpath ) )
+        rc = split_vpath_into_path_and_readgroup ( vpath, argument, path, attribute );
+    else
+        rc = split_argument ( argument, path, attribute, '=' );
+#else
+    VPUri_t uri_type = VPathGetUri_t( vpath );
+    switch ( uri_type )
+    {
+        default:
+        case vpuri_invalid:
+            rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcInvalid );
+            break;
+
+        case vpuri_not_supported:
+            rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcUnsupported );
+            break;
+
+        case vpuri_none:
+            rc = split_argument( argument, path, attribute, '=' );
+            break;
+
+        case vpuri_ncbi_vfs:
+        case vpuri_file:
+        case vpuri_ncbi_acc:
+        case vpuri_http:
+            rc = split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+            break;
+    }
+#endif
+    return rc;
+}
+
+
+static rc_t split_argument_into_path_and_readgroup( const char *argument, char ** path, char ** attribute )
+{
+    rc_t rc;
+    char * colon_ptr = string_chr ( argument, string_size ( argument ), ':' );
+    if ( colon_ptr == NULL )
+    {
+        /* we do not have a colon in the argument, that means: there is no uri-syntax involved
+           ---> we can split the "old fashioned way" at the equal-sign */
+        rc = split_argument( argument, path, attribute, '=' );
+    }
+    else
+    {
+        VFSManager * mgr;
+        rc_t rc = VFSManagerMake ( & mgr );
+
+        *path = NULL;
+        *attribute = NULL;
+
+        if ( rc == 0 )
+        {
+            VPath * vpath;
+            rc = VFSManagerMakePath ( mgr, &vpath, "%s", argument );
+            if ( rc == 0 )
+            {
+                rc = test_split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+                VPathRelease( vpath );
+            }
+
+            VFSManagerRelease ( mgr );
+        }
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+    rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else
+    {
+        uint32_t idx;
+        if ( empty != NULL )
+        {
+            *empty = ( count == 0 );
+        }
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *param = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&param );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+            }
+            else
+            {
+                
+                char * path = NULL;
+                char * spot_group = NULL;
+
+                rc = split_argument_into_path_and_readgroup( param, &path, &spot_group );
+                if ( rc == 0 && path != NULL )
+                {
+                    /* in case there is no spotgroup-override from the commandline AND
+                       the option to divide by spot-group is set, let spot_group point
+                       to an empty string ---> divide by original spot-group! */
+                    if ( spot_group == NULL && div_by_spotgrp )
+                    {
+                        spot_group = calloc( 1, 1 );
+                    }
+
+#if TOOLS_USE_SRAPATH != 0
+                    if ( !is_this_a_filesystem_path( path ) )
+                    {
+                        rc = resolve_accession( dir, &path );
+                    }
+#endif
+
+                    if ( rc == 0 )
+                    {
+                        rc = on_argument( path, spot_group, data );
+                    }
+
+                    free( path );
+                    if ( spot_group != NULL )
+                        free( spot_group );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t prepare_whole_file( prepare_ctx * ctx )
+{
+    rc_t rc = 0;
+    if ( ctx->reflist != NULL )
+    {
+        uint32_t count;
+        rc = ReferenceList_Count( ctx->reflist, &count );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceList_Count() failed" );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                rc = ReferenceList_Get( ctx->reflist, &ctx->refobj, idx );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogInt, rc, "ReferenceList_Get() failed" );
+                }
+                else
+                {
+                    rc = ctx->on_section( ctx, NULL );
+                    if ( rc == 0 )
+                        ReferenceObj_Release( ctx->refobj );
+                }
+            }
+        }
+    }
+    else
+    {
+        ctx->refobj = NULL;
+        rc = ctx->on_section( ctx, NULL );
+    }
+    return rc;
+}
+
+
+static rc_t CC prepare_region_cb( const char * name, const struct reference_range * range, void * data )
+{
+    prepare_ctx * ctx = ( prepare_ctx * )data;
+    rc_t rc = ReferenceList_Find( ctx->reflist, &ctx->refobj, name, string_size( name ) );
+    if ( rc != 0 )
+    {
+        rc = 0;
+    }
+    else
+    {
+        rc = ctx->on_section( ctx, range );
+        if ( rc == 0 )
+            ReferenceObj_Release( ctx->refobj );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_db_table( prepare_ctx *ctx,
+                              const VDBManager *vdb_mgr,
+                              VSchema *vdb_schema,
+                              const char * path )
+{
+    rc_t rc;
+    ctx->db = NULL;
+    ctx->seq_tab = NULL;
+
+    rc = VDBManagerOpenDBRead ( vdb_mgr, &ctx->db, vdb_schema, "%s", path );
+    if ( rc != 0 )
+    {
+        rc = VDBManagerOpenTableRead ( vdb_mgr, &ctx->seq_tab, NULL, "%s", path );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc, "failed to open '$(path)'", "path=%s", path ) );
+        }
+        else {
+            ReportResetTable(path, ctx->seq_tab);
+        }
+    }
+    else
+    {
+        rc = VDatabaseOpenTableRead( ctx->db, &ctx->seq_tab, "SEQUENCE" );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDatabaseOpenTableRead( SEQUENCE ) failed" );
+        }
+        else
+        {
+            ReportResetDatabase( path, ctx->db );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_reflist( prepare_ctx *ctx )
+{
+    rc_t rc = 0;
+    ctx->reflist = NULL;
+    if ( ctx->db != NULL )
+    {
+        uint32_t reflist_options = ereferencelist_4na;
+
+        if ( ctx->use_primary_alignments )
+            reflist_options |= ereferencelist_usePrimaryIds;
+
+        if ( ctx->use_secondary_alignments )
+            reflist_options |= ereferencelist_useSecondaryIds;
+
+        if ( ctx->use_evidence_alignments )
+            reflist_options |= ereferencelist_useEvidenceIds;
+
+        rc = ReferenceList_MakeDatabase( &ctx->reflist, ctx->db, reflist_options, 0, NULL, 0 );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceList_MakeDatabase() failed" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+                       const VDBManager *vdb_mgr,
+                       VSchema *vdb_schema,
+                       const char * path,
+                       BSTree * regions )
+{
+    rc_t rc = prepare_db_table( ctx, vdb_mgr, vdb_schema, path );
+    if ( rc == 0 )
+    {
+        rc = prepare_reflist( ctx );
+        if( rc == 0 )
+        {
+            if ( ctx->reflist == NULL || count_ref_regions( regions ) == 0 )
+            {
+                /* the user has not specified a reference-range : use the whole file... */
+                rc = prepare_whole_file( ctx );
+            }
+            else
+            {
+                /* pick only the requested ranges... */
+                rc = foreach_ref_region( regions, prepare_region_cb, ctx ); /* ref_regions.c */
+            }
+        }
+        if ( ctx->reflist != NULL )
+        {
+            ReferenceList_Release( ctx->reflist );
+        }
+    }
+    VTableRelease ( ctx->seq_tab );
+    VDatabaseRelease ( ctx->db );
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t parse_inf_file( Args * args )
+{
+    return Args_parse_inf_file( args, OPTION_INF );
+}
diff --git a/tools/sra-pileup/cmdline_cmn.h b/tools/sra-pileup/cmdline_cmn.h
new file mode 100644
index 0000000..364bfcc
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.h
@@ -0,0 +1,150 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cmdline_cmn_
+#define _h_cmdline_cmn_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ref_regions.h"
+
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/container.h>
+
+#include <kfs/directory.h>
+/* #include <sra/srapath.h> */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+
+#include <align/iterator.h>
+#include <align/reference.h>
+
+#include <strtol.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#define OPTION_REF     "aligned-region"
+#define ALIAS_REF      "r"
+
+typedef uint8_t align_tab_select;
+enum { primary_ats = 1, secondary_ats = 2, evidence_ats = 4 };
+
+typedef struct common_options
+{
+    bool gzip_output;
+    bool bzip_output;
+    bool no_mt;
+    align_tab_select tab_select;
+    const char * output_file;
+    const char * input_file;
+    const char * schema_file;
+    const char * timing_file;
+} common_options;
+
+
+void print_common_helplines( void );
+
+rc_t get_common_options( Args * args, common_options *opts );
+OptDef * CommonOptions_ptr( void );
+size_t CommonOptions_count( void );
+
+/* get ref-ranges from the command-line and iterate them... */
+rc_t init_ref_regions( BSTree * regions, Args * args );
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+    rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data );
+
+
+typedef struct pileup_col_ids
+{
+    uint32_t idx_quality;
+    uint32_t idx_ref_orientation;
+    uint32_t idx_read_filter;
+    uint32_t idx_template_len;
+} pileup_col_ids;
+
+    
+typedef struct prepare_ctx
+{
+    ReferenceIterator *ref_iter;
+    PlacementSetIterator *plset_iter;
+    const VDatabase *db;
+    const VTable *seq_tab;
+
+    const VCursor *prim_cur;
+    const VCursor *sec_cur;
+    const VCursor *ev_cur;
+
+    pileup_col_ids *prim_cur_ids;
+    pileup_col_ids *sec_cur_ids;
+    pileup_col_ids *ev_cur_ids;
+
+    const ReferenceList *reflist;
+    const ReferenceObj *refobj;
+    const char * spot_group;
+    bool omit_qualities;
+    bool read_tlen;
+    bool use_primary_alignments;
+    bool use_secondary_alignments;
+    bool use_evidence_alignments;
+    void * data;
+    const char *path;
+    rc_t ( CC * on_section ) ( struct prepare_ctx * ctx, const struct reference_range * range );
+} prepare_ctx;
+
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+                       const VDBManager *vdb_mgr,
+                       VSchema *vdb_schema,
+                       const char * path,
+                       BSTree * regions );
+
+rc_t prepare_plset_iter( prepare_ctx *ctx,
+                         const VDBManager *vdb_mgr,
+                         VSchema *vdb_schema,
+                         const char * path,
+                         BSTree * ranges );
+
+
+rc_t parse_inf_file( Args * args );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_cmdline_cmn_ */
diff --git a/tools/sra-pileup/debug.h b/tools/sra-pileup/debug.h
new file mode 100644
index 0000000..d1a321b
--- /dev/null
+++ b/tools/sra-pileup/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_sam_dump_debug_h_
+#define _tools_sam_dump_debug_h_
+
+#include <klib/debug.h>
+
+#define SAM_DUMP_DBG_PASTE(a,b) a##b
+#define SAM_DUMP_DBG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(SAM_DUMP_DBG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_sam_dump_debug_h_ */
diff --git a/tools/sra-pileup/dyn_string.c b/tools/sra-pileup/dyn_string.c
new file mode 100644
index 0000000..c8f5348
--- /dev/null
+++ b/tools/sra-pileup/dyn_string.c
@@ -0,0 +1,206 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "dyn_string.h"
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+
+typedef struct dyn_string
+{
+    char * data;
+    size_t allocated;
+    size_t data_len;
+} dyn_string;
+
+
+rc_t allocated_dyn_string ( struct dyn_string **self, size_t size )
+{
+    rc_t rc = 0;
+    struct dyn_string * res = malloc( sizeof *res );
+    *self = NULL;
+    if ( res == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        res->data_len = 0;
+        res->data = malloc( size );
+        if ( res->data != NULL )
+            res->allocated = size;
+        else
+        {
+            res->allocated = 0;
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+        if ( rc != 0 )
+            free( res );
+        else
+            *self = res;
+    }
+    return rc;
+}
+
+
+void free_dyn_string ( struct dyn_string *self )
+{
+    free( self->data );
+    self->data = NULL;
+    self->allocated = 0;
+    self->data_len = 0;
+    free( ( void * ) self );
+}
+
+
+void reset_dyn_string( struct dyn_string *self )
+{
+    self->data_len = 0;
+}
+
+
+rc_t expand_dyn_string( struct dyn_string *self, size_t new_size )
+{
+    rc_t rc = 0;
+    if ( new_size > self->allocated )
+    {
+        self->data = realloc ( self->data, new_size );
+        if ( self->data != NULL )
+        {
+            self->allocated = new_size;
+        }
+        else
+        {
+            self->allocated = 0;
+            self->data_len = 0;
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+    }
+    return rc;
+}
+
+
+rc_t add_char_2_dyn_string( struct dyn_string *self, const char c )
+{
+    /* does nothing if self->data_len + 2 < self->allocated */
+    rc_t rc = expand_dyn_string( self, self->data_len + 2 );
+    if ( rc == 0 )
+    {
+        self->data[ self->data_len++ ] = c;
+        self->data[ self->data_len ] = 0;
+    }
+    return rc;
+}
+
+
+char * dyn_string_char( struct dyn_string *self, uint32_t idx )
+{
+    return( &self->data[ idx ] );
+}
+
+
+rc_t add_string_2_dyn_string( struct dyn_string *self, const char * s )
+{
+    rc_t rc;
+    size_t size = string_size ( s );
+    /* does nothing if self->data_len + size + 1 < self->allocated */
+    rc = expand_dyn_string( self, self->data_len + size + 1 );
+    if ( rc == 0 )
+    {
+        string_copy ( &(self->data[ self->data_len ]), self->allocated, s, size );
+        self->data_len += size;
+        self->data[ self->data_len ] = 0;
+    }
+    return rc;
+}
+
+
+rc_t add_dyn_string_2_dyn_string( struct dyn_string *self, struct dyn_string *other )
+{
+    rc_t rc = 0;
+    size_t size = other->data_len;
+	if ( size > 0 )
+	{
+		/* does nothing if self->data_len + size + 1 < self->allocated */
+		rc = expand_dyn_string( self, self->data_len + size + 1 );
+		if ( rc == 0 )
+		{
+			string_copy ( &(self->data[ self->data_len ]), self->allocated, other->data, size );
+			self->data_len += size;
+			self->data[ self->data_len ] = 0;
+		}
+	}
+    return rc;
+
+}
+
+
+rc_t print_2_dyn_string( struct dyn_string * self, const char *fmt, ... )
+{
+    rc_t rc = 0;
+    bool not_enough;
+
+    do
+    {
+        size_t num_writ;
+        va_list args;
+        va_start ( args, fmt );
+        rc = string_vprintf ( &(self->data[ self->data_len ]), 
+                              self->allocated - ( self->data_len + 1 ),
+                              &num_writ,
+                              fmt,
+                              args );
+        va_end ( args );
+
+        if ( rc == 0 )
+        {
+            self->data_len += num_writ;
+            self->data[ self->data_len ] = 0;
+        }
+        not_enough = ( GetRCState( rc ) == rcInsufficient );
+        if ( not_enough )
+        {
+            rc = expand_dyn_string( self, self->allocated + ( num_writ * 2 ) );
+        }
+    } while ( not_enough && rc == 0 );
+    return rc;
+}
+
+
+rc_t print_dyn_string( struct dyn_string * self )
+{
+    if ( self != NULL )
+        return KOutMsg( "%.*s", self->data_len, self->data );
+    else
+        return 0;
+}
+
+
+size_t dyn_string_len( struct dyn_string * self )
+{
+    if ( self != NULL )
+        return self->data_len;
+    else
+        return 0;
+}
diff --git a/tools/sra-pileup/dyn_string.h b/tools/sra-pileup/dyn_string.h
new file mode 100644
index 0000000..f3806d6
--- /dev/null
+++ b/tools/sra-pileup/dyn_string.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_dyn_string_
+#define _h_dyn_string_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+
+struct dyn_string;
+
+rc_t allocated_dyn_string ( struct dyn_string **self, size_t size );
+void free_dyn_string ( struct dyn_string *self );
+
+void reset_dyn_string( struct dyn_string *self );
+rc_t expand_dyn_string( struct dyn_string *self, size_t new_size );
+rc_t add_char_2_dyn_string( struct dyn_string *self, const char c );
+char * dyn_string_char( struct dyn_string *self, uint32_t idx );
+rc_t add_string_2_dyn_string( struct dyn_string *self, const char * s );
+rc_t add_dyn_string_2_dyn_string( struct dyn_string *self, struct dyn_string *other );
+rc_t print_2_dyn_string( struct dyn_string * self, const char *fmt, ... );
+rc_t print_dyn_string( struct dyn_string * self );
+size_t dyn_string_len( struct dyn_string * self );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* dyn_string_ */
diff --git a/tools/sra-pileup/inputfiles.c b/tools/sra-pileup/inputfiles.c
new file mode 100644
index 0000000..a232677
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.c
@@ -0,0 +1,377 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "inputfiles.h"
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+#include <vdb/schema.h> /* VSchemaRelease */
+
+#include <kdb/manager.h>
+#include <kfs/file.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+static void free_input_database( input_database * id )
+{
+    if ( id->path != NULL ) free( id->path );
+    if ( id->db != NULL ) VDatabaseRelease( id->db );
+    if ( id->reflist != NULL ) ReferenceList_Release( id->reflist );
+    if ( id->prim_ctx != NULL ) free( id->prim_ctx );
+    if ( id->sec_ctx != NULL ) free( id->sec_ctx );
+    if ( id->ev_ctx != NULL ) free( id->ev_ctx );
+    free( id );
+}
+
+
+static void free_input_table( input_table * it )
+{
+    if ( it->path != NULL ) free( it->path );
+    if ( it->tab != NULL ) VTableRelease( it->tab );
+    free( it );
+}
+
+
+static rc_t append_database( input_files *self, const VDatabase * db,
+                             const char * path, uint32_t reflist_options, bool show_err )
+{
+    const ReferenceList *reflist;
+    rc_t rc = ReferenceList_MakeDatabase( &reflist, db, reflist_options, 0, NULL, 0 );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot create reflist for '$(t)'", "t=%s", path ) );
+    }
+    else
+    {
+        input_database * id = calloc( sizeof * id, 1 );
+        if ( id == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "cannot create input-database structure" );
+        }
+        else
+        {
+            uint32_t idx;
+
+            id->db = db;
+            id->reflist = reflist;
+            id->path = string_dup( path, string_size( path ) );
+
+            rc = VectorAppend( &self->dbs, &idx, id );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append db '$(t)' to inputfiles", "t=%s", path ) );
+                free_input_database( id );
+            }
+            else
+            {
+                ++(self->database_count);
+                id->db_idx = idx;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t append_table( input_files *self, const VTable *tab, const char * path )
+{
+    rc_t rc = 0;
+    input_table * it = calloc( sizeof * it, 1 );
+    if ( it == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create input-table structure" );
+    }
+    else
+    {
+        it->path = string_dup( path, string_size( path ) );
+        it->tab = tab;
+
+        rc = VectorAppend( &self->tabs, NULL, it );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append tab '$(t)' to inputfiles", "t=%s", path ) );
+            free_input_table( it );
+        }
+        else
+        {
+            ++(self->table_count);
+        }
+    }
+    return rc;
+}
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+static rc_t contains_ref_and_alignments( const VDatabase * db, const char * path, bool * res, bool show_err )
+{
+    KNamelist *tables;
+    rc_t rc = VDatabaseListTbl ( db, &tables );
+    if ( rc != 0 )
+    {
+        if ( show_err )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "VDatabaseListTbl() failed on '$(t)'", "t=%s", path ) );
+        }
+    }
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( tables, &count );
+        if ( rc != 0 )
+        {
+            if ( show_err )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistCount on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+            }
+        }
+        else
+        {
+            uint32_t idx;
+            bool has_ref = false;
+            bool has_alignment = false;
+            for ( idx = 0; rc == 0 && idx < count; ++idx )
+            {
+                const char * tabname;
+                rc = KNamelistGet ( tables, idx, &tabname );
+                if ( rc != 0 )
+                {
+                    if ( show_err )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistGet on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+                    }
+                }
+                else
+                {
+                    if ( cmp_pchar( tabname, "REFERENCE" ) == 0 )
+                        has_ref = true;
+                    if ( cmp_pchar( tabname, "PRIMARY_ALIGNMENT" ) == 0 )
+                        has_alignment = true;
+                }
+            }
+            *res = ( has_ref && has_alignment );
+        }
+        KNamelistRelease( tables );
+    }
+    return rc;
+}
+
+
+static rc_t open_database( input_files *self, const VDBManager *mgr,
+                           const char * path, uint32_t reflist_options, bool show_err )
+{
+    const VDatabase * db;
+    rc_t rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        if ( show_err )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open db '$(t)'", "t=%s", path ) );
+        }
+    }
+    else
+    {
+        bool has_alignments = false;
+        rc = contains_ref_and_alignments( db, path, &has_alignments, show_err );
+        if ( rc == 0 )
+        {
+            if ( has_alignments )
+            {
+                rc = append_database( self, db, path, reflist_options, show_err );
+            }
+            else
+            {
+                const VTable *tab;
+                rc = VDatabaseOpenTableRead ( db, &tab, "SEQUENCE" );
+                if ( rc != 0 )
+                {
+                    if ( show_err )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE for '$(t)'", "t=%s", path ) );
+                    }
+                }
+                else
+                {
+                    rc = append_table( self, tab, path );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t open_table( input_files *self, const VDBManager *mgr, const char * path, bool show_error )
+{
+    const VTable * tab;    
+
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        struct VSchema* schema = NULL;
+        rc = VDBManagerMakeSRASchema( mgr, &schema );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot MakeSRASchema" );
+        }
+        else
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tab, schema, "%s", path );
+            if ( rc != 0 )
+            {
+                if ( show_error )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open tab '$(t)'", "t=%s", path ) );
+                }
+            }
+            VSchemaRelease( schema );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = append_table( self, tab, path );
+
+    return rc;
+}
+
+
+static rc_t is_unknown( input_files *self, const char * path )
+{
+    rc_t rc = VNamelistAppend( self->not_found, path );
+    if ( rc == 0 )
+        ++( self->not_found_count );
+    return rc;
+}
+
+
+static rc_t split_input_files( input_files *self, const VDBManager *mgr,
+                               const VNamelist * src, uint32_t reflist_options )
+{
+    uint32_t src_count;
+    rc_t rc = VNameListCount( src, &src_count );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "VNameListCount failed" );
+    }
+    else
+    {
+        uint32_t src_idx;
+        for ( src_idx = 0; src_idx < src_count && rc == 0 ; ++src_idx )
+        {
+            const char * path;
+            rc = VNameListGet( src, src_idx, &path );
+            if ( rc == 0 && path != NULL )
+            {
+                int path_type = VDBManagerPathType ( mgr, "%s", path );
+                if ( rc == 0 )
+                {
+                    switch( path_type )
+                    {
+                        case kptDatabase : rc = open_database( self, mgr, path, reflist_options, true ); break;
+
+                        case kptPrereleaseTbl :
+                        case kptTable    : rc = open_table( self, mgr, path, true ); break;
+
+                        default          : rc = is_unknown( self, path ); break;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+                           const VNamelist * src, uint32_t reflist_options )
+{
+    rc_t rc = 0;
+
+    input_files * ipf = calloc( sizeof * ipf, 1 );
+    *self = NULL;
+    if ( ipf == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create inputfiles structure" );
+    }
+    else
+    {
+        rc = VNamelistMake( &( ipf->not_found ), 5 );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot create inputfiles.not_found structure" );
+        else
+        {
+            VectorInit( &( ipf->dbs ), 0, 5 );
+            VectorInit( &( ipf->tabs ), 0, 5 );
+            rc = split_input_files( ipf, mgr, src, reflist_options );
+        }
+        if ( rc != 0 )
+            release_input_files( ipf );
+        else
+            *self = ipf;
+    }
+    return rc;
+}
+
+
+static void CC db_whack( void * item, void * data )
+{
+    input_database * id = ( input_database * )item;
+    free_input_database( id );
+}
+
+
+static void CC tab_whack( void * item, void * data )
+{
+    input_table * it = ( input_table * )item;
+    free( it->path );
+    VTableRelease( it->tab );
+    free( it );
+}
+
+
+void release_input_files( input_files *self )
+{
+    VectorWhack( &self->dbs, db_whack, NULL );
+    VectorWhack( &self->tabs, tab_whack, NULL );
+    VNamelistRelease( self->not_found );
+    free( self );
+}
diff --git a/tools/sra-pileup/inputfiles.h b/tools/sra-pileup/inputfiles.h
new file mode 100644
index 0000000..4698785
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.h
@@ -0,0 +1,99 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_inputfiles_
+#define _h_inputfiles_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+
+#include <align/reference.h>
+#include <align/manager.h>
+
+/*
+    the VNamelist of input-files/accessions/uri's is tested one at a time
+    if it is: a database, a table or cannot be found
+    in case of a database : a vdb-db-handle is opened
+    in case of a table    : a vdb-tab-handle is opened
+    in case of not found  : name is put into the not-found list
+*/
+
+
+typedef struct input_database
+{
+    uint32_t db_idx;
+    char * path;
+    const VDatabase * db;
+    const ReferenceList *reflist;
+    void * prim_ctx;
+    void * sec_ctx;
+    void * ev_ctx;
+} input_database;
+
+
+typedef struct input_table
+{
+    char * path;
+    const VTable * tab;
+} input_table;
+
+
+
+typedef struct input_files
+{
+    uint32_t database_count;
+    uint32_t table_count;
+    uint32_t not_found_count;
+
+    Vector dbs;
+    Vector tabs;
+    VNamelist * not_found;
+} input_files;
+
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+                           const VNamelist * src, uint32_t reflist_options );
+
+void release_input_files( input_files *self );
+
+#endif
diff --git a/tools/sra-pileup/make_opt.pl b/tools/sra-pileup/make_opt.pl
new file mode 100755
index 0000000..cc2a7c9
--- /dev/null
+++ b/tools/sra-pileup/make_opt.pl
@@ -0,0 +1,13 @@
+#!/usr/bin/perl -w
+
+my $ref    =  $ARGV[ 0 ];
+my $start  =  $ARGV[ 1 ];
+my $length =  $ARGV[ 2 ];
+my $space  =  $ARGV[ 3 ];
+my $count  =  $ARGV[ 4 ];
+
+for ( my $i = 0; $i < $count; $i++ )
+{
+    printf "-r %s:%d-%d\n", $ref, $start, $start + $length;
+    $start += $space;
+}
diff --git a/tools/sra-pileup/matecache.c b/tools/sra-pileup/matecache.c
new file mode 100644
index 0000000..bbe2e9c
--- /dev/null
+++ b/tools/sra-pileup/matecache.c
@@ -0,0 +1,439 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "matecache.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+
+void release_matecache( matecache * const self )
+{
+    if ( self != NULL )
+    {
+        if ( self->per_file != NULL )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < self->count; ++idx )
+            {
+                if ( self->per_file[ idx ].same_ref_64 != NULL )
+                    KVectorRelease( self->per_file[ idx ].same_ref_64 );
+                if ( self->per_file[ idx ].same_ref_16 != NULL )
+                    KVectorRelease( self->per_file[ idx ].same_ref_16 );
+
+                if ( self->per_file[ idx ].unaligned_64_a != NULL )
+                    KVectorRelease( self->per_file[ idx ].unaligned_64_a );
+                if ( self->per_file[ idx ].unaligned_64_b != NULL )
+                    KVectorRelease( self->per_file[ idx ].unaligned_64_b );
+            }
+            free( self->per_file );
+        }
+        free( self );
+    }
+}
+
+
+rc_t make_matecache( matecache **self, uint32_t count )
+{
+    rc_t rc = 0;
+
+    matecache * mc = calloc( sizeof * mc, 1 );
+    *self = NULL;
+    if ( mc == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create matecache structure" );
+    }
+    else
+    {
+        mc->count = count;
+        mc->per_file = calloc( sizeof *(mc->per_file), count );
+        if ( mc->per_file == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "cannot create matecache internal structure" );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                rc = KVectorMake( &( mc->per_file[ idx ].same_ref_64 ) );
+                if ( rc != 0 )
+                    (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U64" );
+                else
+                {
+                    rc = KVectorMake( &( mc->per_file[ idx ].same_ref_16 ) );
+                    if ( rc != 0 )
+                        (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U16" );
+                    else
+                    {
+                        rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_a ) );
+                        if ( rc != 0 )
+                            (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned a) U64" );
+                        else
+                        {
+                            rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_b ) );
+                            if ( rc != 0 )
+                                (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned b) U64" );
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+                *self = mc;
+        }
+        if ( rc != 0 )
+            release_matecache( mc );
+    }
+    return rc;
+}
+
+#if 0
+static int32_t calc_tlen( uint32_t self_pos, uint32_t mate_pos,
+                   uint32_t self_len, uint32_t mate_len, uint32_t read_num )
+{
+    int32_t res = 0;
+    unsigned const self_left  = self_pos;
+    unsigned const mate_left  = mate_pos;
+    unsigned const self_right = self_left + self_len;
+    unsigned const mate_right = mate_left + mate_len;
+    unsigned const  leftmost  = (self_left  < mate_left ) ? self_left  : mate_left;
+    unsigned const rightmost  = (self_right > mate_right) ? self_right : mate_right;
+    unsigned const tlen = rightmost - leftmost;
+            
+    /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+    if (   ( self_left <= mate_left && self_right >= mate_right )      /* mate fully contained within self or */
+        || ( mate_left <= self_left && mate_right >= self_right ) )    /* self fully contained within mate; */
+    {
+        if ( self_left < mate_left || ( read_num == 1 && self_left == mate_left ) )
+            res = tlen;
+        else
+            res = -tlen;
+    }
+    else if ( ( self_right == mate_right && mate_left == leftmost ) /* both are rightmost, but mate is leftmost */
+             ||  self_right == rightmost )
+    {
+        res = -tlen;
+    }
+    else
+        res = tlen;
+
+    return res;
+}
+#endif
+
+static rc_t matecache_check( const matecache * const self, uint32_t db_idx, matecache_per_file ** mcpf )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+    }
+    else if ( db_idx < self->count )
+    {
+        *mcpf = &self->per_file[ db_idx ];
+        if ( mcpf == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+            (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_insert_same_ref( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t ref_pos_and_tlen = ref_pos;
+        ref_pos_and_tlen <<= 32;
+        ref_pos_and_tlen |= tlen;
+        rc = KVectorSetU64( mcpf->same_ref_64, key, ref_pos_and_tlen );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U64" );
+        else
+        {
+            rc = KVectorSetU16( mcpf->same_ref_16, key, flags );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U16" );
+        }
+        if ( rc == 0 )
+        {
+            mcpf->stat_same_ref.count++;
+            if ( mcpf->stat_same_ref.count > mcpf->maxcount_same_ref )
+                mcpf->maxcount_same_ref = mcpf->stat_same_ref.count;
+            mcpf->stat_same_ref.inserts++;
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+                       INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t value64;
+        mcpf->stat_same_ref.lookups++;
+        rc = KVectorGetU64( mcpf->same_ref_64, key, &value64 );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcNotFound )
+                (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U64" );
+        }
+        else
+        {
+            uint16_t value16;
+            rc = KVectorGetU16( mcpf->same_ref_16, key, &value16 );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcNotFound )
+                    (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U16" );
+            }
+            else
+            {
+                *ref_pos = ( value64 >> 32 );
+                *tlen = ( value64 & 0xFFFFFFFF );
+                *flags = value16;
+                mcpf->stat_same_ref.finds++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        rc = KVectorUnset( mcpf->same_ref_64, key );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (64bit)" );
+        else
+        {
+            rc = KVectorUnset( mcpf->same_ref_16, key );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (16bit)" );
+        }
+        if ( rc == 0 && mcpf->stat_same_ref.count > 0 )
+            mcpf->stat_same_ref.count--;
+    }
+    return rc;
+}
+
+
+static rc_t matecache_clear_same_ref_per_file( matecache_per_file * const mcpf )
+{
+    rc_t rc = KVectorRelease( mcpf->same_ref_64 );
+    if ( rc != 0 )
+        (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (64bit)" );
+    else
+    {
+        rc = KVectorRelease( mcpf->same_ref_16 );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (16bit)" );
+        else
+        {
+            rc = KVectorMake( &mcpf->same_ref_64 );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (64bit)" );
+            else
+            {
+                rc = KVectorMake( &mcpf->same_ref_16 );
+                if ( rc != 0 )
+                    (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (16bit)" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_clear_same_ref( matecache * const self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot clear same-ref-cache" );
+    }
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < self->count && rc == 0; ++idx )
+        {
+            rc = matecache_clear_same_ref_per_file( &self->per_file[ idx ] );
+        }
+        self->flashes++;
+   }
+    return rc;
+}
+
+
+rc_t matecache_report( const matecache * const self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot report same-ref-cache" );
+    }
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < self->count && rc == 0; ++idx )
+        {
+            rc = KOutMsg( "on same reference:\n" );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].maxcount = %,lu\n", idx, self->per_file[ idx ].maxcount_same_ref );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].inserts = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.inserts );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.lookups );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.finds );
+            if ( rc == 0 )
+                rc = KOutMsg( "unaligned:\n" );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].count = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.count );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.lookups );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.finds );
+        }
+        if ( rc == 0 )
+            rc = KOutMsg( "matecache.flashes = %,lu\n", idx, self->flashes );
+    }
+    return rc;
+}
+
+
+rc_t matecache_insert_unaligned( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t ref_pos_and_ref_idx = ref_pos;
+        ref_pos_and_ref_idx <<= 32;
+        ref_pos_and_ref_idx |= ref_idx;
+        rc = KVectorSetU64( mcpf->unaligned_64_a, key, ref_pos_and_ref_idx );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned a) U64" );
+        else
+        {
+            rc = KVectorSetU64( mcpf->unaligned_64_b, key, seq_id );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned b) U64" );
+        }
+        if ( rc == 0 )
+        {
+            mcpf->stat_unaligned.count++;
+            mcpf->stat_unaligned.inserts++;
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+                                 INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t value64_a;
+        mcpf->stat_unaligned.lookups++;
+        rc = KVectorGetU64( mcpf->unaligned_64_a, key, &value64_a );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcNotFound )
+                (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned a) U64" );
+        }
+        else
+        {
+            uint64_t value64_b;
+            rc = KVectorGetU64( mcpf->unaligned_64_b, key, &value64_b );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcNotFound )
+                    (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned b) U64" );
+            }
+            else
+            {
+                *seq_id = ( int64_t )value64_b;
+                *ref_pos = ( value64_a >> 32 );
+                *ref_idx = ( value64_a & 0xFFFFFFFF );
+                mcpf->stat_unaligned.finds++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct visit_ctx
+{
+    rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data );
+    void * user_data;
+} visit_ctx;
+
+
+static rc_t CC on_seq_id( uint64_t key, int64_t value, void *user_data )
+{
+    visit_ctx * vctx = user_data;
+    return vctx->f( value, ( int64_t )key, vctx->user_data );
+}
+
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+                              uint32_t db_idx,
+                              rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+                              void * user_data )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        visit_ctx vctx;
+        vctx.f = f;
+        vctx.user_data = user_data;
+        rc = KVectorVisitI64 ( mcpf->unaligned_64_b, false, on_seq_id, &vctx );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/matecache.h b/tools/sra-pileup/matecache.h
new file mode 100644
index 0000000..0b8d9df
--- /dev/null
+++ b/tools/sra-pileup/matecache.h
@@ -0,0 +1,119 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_matecache_
+#define _h_matecache_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <insdc/sra.h>
+
+typedef struct matecache_stat
+{
+    uint64_t count;
+    uint64_t lookups;
+    uint64_t finds;
+    uint64_t inserts;
+} matecache_stat;
+
+
+typedef struct matecache_per_file
+{
+    KVector *same_ref_64;   /* ref-pos and ref-idx */
+    KVector *same_ref_16;   /* flags */
+
+    KVector *unaligned_64_a;  /* ref-pos and ref-idx */
+    KVector *unaligned_64_b;  /* seq_spot_id */
+
+    matecache_stat stat_same_ref;
+    matecache_stat stat_unaligned;
+    uint64_t maxcount_same_ref;
+} matecache_per_file;
+
+
+typedef struct matecache
+{
+    matecache_per_file *per_file;
+    uint32_t count;
+    uint32_t flashes;
+} matecache;
+
+
+/* general cache functions */
+
+rc_t make_matecache( matecache **self, uint32_t count );
+
+void release_matecache( matecache * const self );
+
+rc_t matecache_clear_same_ref( matecache * const self );
+
+rc_t matecache_report( const matecache * const self );
+
+
+/* cache functions for aligned mates on the same reference */
+
+rc_t matecache_insert_same_ref( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen );
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+                       INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen );
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key );
+
+
+/* cache functions for half aligned mates */
+
+/*
+    db_idx  ... index, what input-file did the alignment come from
+    key     ... row-id of aligned half
+    pos     ... position of the aligned half
+    flags   ... sam-flags of the aligned half
+    ref_idx ... idx of reference the aligned half aligns to
+*/
+
+rc_t matecache_insert_unaligned( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id );
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+                                 INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id );
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+                              uint32_t db_idx,
+                              rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+                              void * user_data );
+
+
+#endif
diff --git a/tools/sra-pileup/md_flag.c b/tools/sra-pileup/md_flag.c
new file mode 100644
index 0000000..491d475
--- /dev/null
+++ b/tools/sra-pileup/md_flag.c
@@ -0,0 +1,268 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/printf.h>
+#include <klib/out.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "md_flag.h"
+
+struct cigar_t
+{
+	char * op;
+	int * count;
+	size_t size, length;
+};
+
+
+static void init_cigar_t( struct cigar_t * c, size_t size )
+{
+	if ( c != NULL )
+	{
+		c->size = 0;
+		c->length = 0;
+		c->op = malloc( sizeof( c->op[ 0 ] ) * size );
+		if ( c->op != NULL )
+		{
+			c->count = malloc( sizeof( c->count[ 0 ] ) * size );
+			if ( c->count != NULL )
+				c->size = size;
+			else
+				free( ( void * ) c->op );
+		}
+	}
+}
+
+static void resize_cigar_t( struct cigar_t * c, size_t new_size )
+{
+	if ( c != NULL )
+	{
+		if ( c->size == 0 )
+			init_cigar_t( c, new_size );
+		else if ( c->size < new_size )
+		{
+			char * temp_op = c->op;
+			c->op = realloc( c->op, sizeof( c->op[ 0 ] ) * new_size );
+			if ( c->op != NULL )
+			{
+				int * temp_count = c->count;
+				c->count = realloc( c->count, sizeof( c->count[ 0 ] ) * new_size );
+				if ( c->count != NULL )
+					c->size = new_size;
+				else
+					c->count = temp_count;
+			}
+			else
+				c->op = temp_op;
+		}
+	}
+}
+
+static void append_to_cigar_t( struct cigar_t * c, char op, int count )
+{
+	if ( c->length < c->size )
+	{
+		c->op[ c->length ] = op;
+		c->count[ c->length ++ ] = count;
+	}
+}
+
+void parse_cigar_t( struct cigar_t * c, const char * cigar_str )
+{
+	if ( c != NULL && cigar_str != NULL && cigar_str[ 0 ] != 0 )
+	{
+		resize_cigar_t( c, strlen( cigar_str ) );
+		if ( c->size > 0 )
+		{
+			int count = 0;
+			while ( *cigar_str != 0 && c->length < c->size )
+			{
+				if ( isdigit( *cigar_str ) )
+				{
+					count = ( count * 10 ) + ( *cigar_str - '0' );
+				}
+				else
+				{
+					if ( count == 0 ) count = 1;
+					append_to_cigar_t( c, *cigar_str, count );
+					count = 0;
+				}
+				cigar_str++;
+			}
+		}
+	}
+}
+
+struct cigar_t * make_cigar_t( const char * cigar_str, const size_t cigar_len )
+{
+	struct cigar_t * res = malloc( sizeof * res );
+	if ( res != NULL )
+	{
+		size_t size;
+		if ( cigar_str != NULL && cigar_str[ 0 ] != 0 && cigar_len > 0 )
+			size = cigar_len;
+		else
+			size = 1024;
+		init_cigar_t( res, size );
+		if ( res->size == size )
+			parse_cigar_t( res, cigar_str );
+	}
+	return res;
+}
+
+
+void free_cigar_t( struct cigar_t * c )
+{
+	if ( c != NULL )
+	{
+		if ( c->op != NULL )
+		{
+			free( ( void * ) c->op );
+			c->op = NULL;
+		}
+		if ( c->count != NULL )
+		{
+			free( ( void * ) c->count );
+			c->count = NULL;
+		}
+		free( ( void * ) c );
+	}
+}
+
+
+static rc_t kout_delete( int count, int *match_count,
+						 const uint8_t * ref, const INSDC_coord_len ref_len, int *ref_idx )
+{
+	rc_t rc = 0;
+	
+	if ( *match_count > 0 )
+	{
+		rc = KOutMsg( "%d", *match_count );
+		*match_count = 0;
+	}
+	
+	if ( rc == 0 )
+	{
+		if ( ( *ref_idx + count ) < ref_len )
+		{
+			rc = KOutMsg( "^%.*s", count, &(ref[ *ref_idx ] ) );
+			(*ref_idx) += count;
+		}
+		else
+			rc = RC( rcExe, rcNoTarg, rcAllocating, rcItem, rcIncomplete );
+	}
+	return rc;
+}
+
+
+static rc_t kout_match( int count, int *match_count,
+						const char * read, size_t read_len, int *read_idx,
+						const uint8_t *ref, const INSDC_coord_len ref_len, int *ref_idx )
+{
+	rc_t rc = 0;
+	int i;
+	for ( i = 0; i < count && rc == 0; ++i )
+	{
+		if ( *read_idx < read_len && *ref_idx < ref_len )
+		{
+			if ( read[ (*read_idx)++ ] == ref[ *ref_idx ] )
+			{
+				(*match_count)++;
+			}
+			else
+			{
+				rc = KOutMsg( "%d%c", *match_count, ref[ *ref_idx ] );
+				*match_count = 0;
+			}
+			(*ref_idx)++;
+		}
+		else
+			rc = RC( rcExe, rcNoTarg, rcAllocating, rcItem, rcIncomplete );
+	}
+	return rc;
+}
+
+
+static rc_t kout_tag( const struct cigar_t * c,
+					  const char * read,
+					  const size_t read_len,
+					  const uint8_t * ref,
+					  const INSDC_coord_len ref_len )
+{
+	rc_t rc = 0;
+	if ( c != NULL && read != NULL && read_len > 0 && ref != NULL && ref_len > 0 )
+	{
+		rc = KOutMsg( "\tMD:Z:" );
+		if ( rc == 0 )
+		{
+			int read_idx = 0;
+			int ref_idx = 0;
+			int match_count = 0;
+			int cigar_idx;
+			for ( cigar_idx = 0; cigar_idx < c->length && rc == 0; ++cigar_idx )
+			{
+				int count = c->count[ cigar_idx ];
+				switch ( c->op[ cigar_idx ] )
+				{
+					case 'D' : rc = kout_delete( count, &match_count, ref, ref_len, &ref_idx ); break;
+					
+					case 'I' : read_idx += count; break;
+
+					case 'M' : rc = kout_match( count, &match_count, read, read_len, &read_idx, ref, ref_len, &ref_idx ); break;
+				}
+			}
+			if ( rc == 0 && match_count > 0 )
+				rc = KOutMsg( "%d", match_count );
+		}
+	}
+	else
+		rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcIncomplete );
+	return rc;
+}
+
+
+rc_t kout_md_tag_from_cigar_string( const char * cigar_str,
+									const size_t cigar_len,
+									const char * read,
+									const size_t read_len,
+									const uint8_t * ref,
+									const INSDC_coord_len ref_len )
+{
+	rc_t rc = 0;
+	struct cigar_t * cigar = make_cigar_t( cigar_str, cigar_len );
+	if ( cigar == NULL )
+		rc = RC( rcExe, rcNoTarg, rcAllocating, rcItem, rcIncomplete );
+	else
+	{
+		rc = kout_tag( cigar, read, read_len, ref, ref_len );
+		free_cigar_t( cigar );
+	}
+	return rc;
+}
diff --git a/tools/sra-pileup/md_flag.h b/tools/sra-pileup/md_flag.h
new file mode 100644
index 0000000..f430e94
--- /dev/null
+++ b/tools/sra-pileup/md_flag.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_md_flag_
+#define _h_md_flag_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+
+rc_t kout_md_tag_from_cigar_string( const char * cigar_str,
+									const size_t cigar_len,
+									const char * read,
+									const size_t read_len,
+									const uint8_t * ref,
+									const INSDC_coord_len ref_len );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/sra-pileup/out_redir.c b/tools/sra-pileup/out_redir.c
new file mode 100644
index 0000000..c089d78
--- /dev/null
+++ b/tools/sra-pileup/out_redir.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "out_redir.h"
+
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+#include <sysalloc.h>
+
+static rc_t CC out_redir_callback( void * self, const char * buffer, size_t bufsize, size_t * num_writ )
+{
+    out_redir * redir = ( out_redir * )self;
+    rc_t rc = KFileWriteAll( redir->kfile, redir->pos, buffer, bufsize, num_writ );
+    if ( rc == 0 )
+        redir->pos += *num_writ;
+    return rc;
+}
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize )
+{
+    rc_t rc;
+    KFile *output_file;
+
+    if ( filename != NULL )
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        else
+        {
+            rc = KDirectoryCreateFile ( dir, &output_file, false, 0664, kcmInit, "%s", filename );
+            KDirectoryRelease( dir );
+        }
+    }
+    else
+        rc = KFileMakeStdOut ( &output_file );
+
+    if ( rc == 0 )
+    {
+        KFile *temp_file;
+
+        /* wrap the output-file in compression, if requested */
+        switch ( mode )
+        {
+            case orm_gzip  : rc = KFileMakeGzipForWrite( &temp_file, output_file ); break;
+            case orm_bzip2 : rc = KFileMakeBzip2ForWrite( &temp_file, output_file ); break;
+            case orm_uncompressed : break;
+        }
+        if ( rc == 0 )
+        {
+            if ( mode != orm_uncompressed )
+            {
+                KFileRelease( output_file );
+                output_file = temp_file;
+            }
+
+            /* wrap the output/compressed-file in buffering, if requested */
+            if ( bufsize != 0 )
+            {
+                rc = KBufFileMakeWrite( &temp_file, output_file, false, bufsize );
+                if ( rc == 0 )
+                {
+                    KFileRelease( output_file );
+                    output_file = temp_file;
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                self->kfile = output_file;
+                self->org_writer = KOutWriterGet();
+                self->org_data = KOutDataGet();
+                self->pos = 0;
+                rc = KOutHandlerSet( out_redir_callback, self );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+void release_out_redir( out_redir * self )
+{
+    KFileRelease( self->kfile );
+    if( self->org_writer != NULL )
+    {
+        KOutHandlerSet( self->org_writer, self->org_data );
+    }
+    self->org_writer = NULL;
+}
+
diff --git a/tools/sra-pileup/out_redir.h b/tools/sra-pileup/out_redir.h
new file mode 100644
index 0000000..6eacab5
--- /dev/null
+++ b/tools/sra-pileup/out_redir.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_out_redir_
+#define _h_out_redir_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+
+enum out_redir_mode
+{
+    orm_uncompressed = 0,
+    orm_gzip,
+    orm_bzip2
+};
+
+
+/* GLOBAL VARIABLES */
+typedef struct out_redir
+{
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} out_redir;
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize );
+
+void release_out_redir( out_redir * self );
+
+#endif
diff --git a/tools/sra-pileup/perf_log.c b/tools/sra-pileup/perf_log.c
new file mode 100644
index 0000000..e21b475
--- /dev/null
+++ b/tools/sra-pileup/perf_log.c
@@ -0,0 +1,273 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/time.h>
+#include <klib/printf.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <stdarg.h>
+
+typedef struct perf_log perf_log;
+struct perf_log
+{
+    KFile * perf_log_file;
+    KTime time_stamp;
+    const char * tool_name;
+    const char * section_name;
+    const char * sub_section_name;
+
+    KTime_t tool_start;
+    KTime_t section_start;
+    KTime_t sub_section_start;
+    KTime_t chunk_start;
+
+    uint64_t file_pos;
+    uint64_t counter;
+    uint64_t limit;
+};
+
+
+const char * perf_log_unknown = "unknown";
+
+static const char * value_or_unknown( const char * value )
+{
+    const char * s;
+    if ( value == NULL ) s = perf_log_unknown; else s = value;
+    return s;
+}
+
+
+static void perf_log_write_args( struct perf_log * pl, const char *fmt, va_list vargs )
+{
+    if ( pl != NULL )
+    {
+        char buffer[ 1024 ];
+        size_t num_writ;
+        rc_t rc = string_vprintf ( buffer, sizeof buffer, &num_writ, fmt, vargs );
+        if ( rc == 0 )
+        {
+            size_t num_writ_2;
+            rc = KFileWriteAll ( pl->perf_log_file, pl->file_pos, buffer, num_writ, &num_writ_2 );
+            if ( rc == 0 )
+                pl->file_pos += num_writ_2;
+        }
+    }
+}
+
+
+static void perf_log_write( struct perf_log * pl, const char *fmt, ... )
+{
+    if ( pl != NULL )
+    {
+        va_list args;
+
+        va_start ( args, fmt );
+        perf_log_write_args ( pl, fmt, args );
+        va_end ( args );
+    }
+}
+
+
+static void write_tool_start( struct perf_log * pl )
+{
+    KTime t;
+    KTimeLocal ( &t, pl->tool_start );
+    perf_log_write( pl, "start >%s< at %T\n", value_or_unknown( pl->tool_name ), &t );
+}
+
+
+static void write_tool_end( struct perf_log * pl )
+{
+    KTime_t tool_end = KTimeStamp();
+    KTime t;
+    KTimeLocal ( &t, tool_end );
+    perf_log_write( pl, "end.. >%s< at %T ( %lu seconds )\n",
+                    value_or_unknown( pl->tool_name ), &t, ( tool_end - pl->tool_start ) );
+}
+
+struct perf_log * make_perf_log( const char * filename, const char * toolname )
+{
+    struct perf_log * res = NULL;
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir ( &dir );
+    if ( rc == 0 )
+    {
+        KFile * f;
+        rc = KDirectoryCreateFile ( dir, &f, false, 0664, kcmInit, "%s", filename );
+        if ( rc == 0 )
+        {
+            res = malloc( sizeof * res );
+            if ( res != NULL )
+            {
+                res->perf_log_file = f;
+                KTimeLocal ( &res->time_stamp, KTimeStamp() );
+                if ( toolname != NULL )
+                    res->tool_name = string_dup_measure ( toolname, NULL );
+                else
+                    res->tool_name = NULL;
+                res->section_name = NULL;
+                res->sub_section_name = NULL;
+                res->tool_start = KTimeStamp();
+                res->section_start = res->tool_start;
+                res->sub_section_start = res->tool_start;
+                res->chunk_start = res->tool_start;
+
+                res->file_pos = 0;
+                res->counter = 0;
+                res->limit = 10000;
+                write_tool_start( res );
+            }
+            else
+                KFileRelease ( f );
+        }
+        KDirectoryRelease ( dir );
+    }
+    return res;
+}
+
+
+void free_perf_log( struct perf_log * pl )
+{
+    if ( pl != NULL )
+    {
+        write_tool_end( pl );
+        KFileRelease ( pl->perf_log_file );
+        if ( pl->tool_name != NULL ) free( ( void * )pl->tool_name );
+        free( ( void * ) pl );
+    }
+}
+
+
+void perf_log_start_section( struct perf_log * pl, const char * section_name )
+{
+    if ( pl != NULL )
+    {
+        KTime t;
+        pl->section_start = KTimeStamp();
+        KTimeLocal ( &t, pl->section_start );
+
+        if ( pl->section_name != NULL ) free( ( void * ) pl->section_name );
+        if ( section_name != NULL )
+            pl->section_name = string_dup_measure ( section_name, NULL );
+        else
+            pl->section_name = NULL;
+
+        perf_log_write( pl, "start [%s] at %T\n",
+                        value_or_unknown( pl->section_name ), &t );
+    }
+}
+
+
+void perf_log_end_section( struct perf_log * pl )
+{
+    if ( pl != NULL )
+    {
+        KTime_t section_end = KTimeStamp();
+        KTime t;
+        KTimeLocal ( &t, section_end );
+        perf_log_write( pl, "end.. [%s] at %T ( %lu seconds )\n",
+                        value_or_unknown( pl->section_name ), &t, ( section_end - pl->section_start ) );
+
+        if ( pl->section_name != NULL )
+        {
+            free( ( void * ) pl->section_name );
+            pl->section_name = NULL;
+        }
+    }
+}
+
+
+void perf_log_start_sub_section( struct perf_log * pl, const char * sub_section_name )
+{
+    if ( pl != NULL )
+    {
+        KTime t;
+        pl->sub_section_start = KTimeStamp();
+        pl->chunk_start = pl->sub_section_start;
+        pl->counter = 0;
+        KTimeLocal ( &t, pl->sub_section_start );
+
+        if ( pl->sub_section_name != NULL ) free( ( void * ) pl->sub_section_name );
+        if ( sub_section_name != NULL )
+            pl->sub_section_name = string_dup_measure ( sub_section_name, NULL );
+        else
+            pl->sub_section_name = NULL;
+
+        perf_log_write( pl, "start (%s) at %T\n",
+                        value_or_unknown( pl->sub_section_name ), &t );
+    }
+}
+
+
+void perf_log_end_sub_section( struct perf_log * pl )
+{
+    if ( pl != NULL )
+    {
+        KTime_t sub_section_end = KTimeStamp();
+        KTime t;
+        KTimeLocal ( &t, sub_section_end );
+        perf_log_write( pl, "end.. (%s) at %T ( %lu seconds )\n",
+                        value_or_unknown( pl->sub_section_name ), &t, ( sub_section_end - pl->sub_section_start ) );
+
+        if ( pl->sub_section_name != NULL )
+        {
+            free( ( void * ) pl->sub_section_name );
+            pl->sub_section_name = NULL;
+        }
+    }
+}
+
+
+static uint64_t lpm( uint64_t seconds, uint64_t written )
+{
+    uint64_t res = 0;
+    if ( seconds > 0 )
+        res = ( written * 60 ) / seconds;
+    return res;
+}
+
+
+void perf_log_line( struct perf_log * pl, uint64_t pos )
+{
+    if ( pl != NULL )
+    {
+        pl->counter++;
+        if ( pl->counter > pl->limit )
+        {
+            KTime_t chunk_end = KTimeStamp();
+            uint64_t seconds = ( chunk_end - pl->chunk_start );
+            
+            perf_log_write( pl, "%lu lines in %lu seconds, at %lu, lpm = %lu\n",
+                            pl->limit, seconds, pos, lpm( seconds, pl->counter ) );
+
+            pl->counter = 0;
+            pl->chunk_start = chunk_end;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tools/sra-pileup/perf_log.h b/tools/sra-pileup/perf_log.h
new file mode 100644
index 0000000..7ca9d13
--- /dev/null
+++ b/tools/sra-pileup/perf_log.h
@@ -0,0 +1,52 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_perf_log_
+#define _h_perf_log_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct perf_log;
+
+struct perf_log * make_perf_log( const char * filename, const char * toolname );
+void free_perf_log( struct perf_log * pl );
+
+void perf_log_start_section( struct perf_log * pl, const char * section_name );
+void perf_log_end_section( struct perf_log * pl );
+
+void perf_log_start_sub_section( struct perf_log * pl, const char * sub_section_name );
+void perf_log_end_sub_section( struct perf_log * pl );
+
+void perf_log_line( struct perf_log * pl, uint64_t pos );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_perf_log_ */
diff --git a/tools/sra-pileup/pileup_counters.c b/tools/sra-pileup/pileup_counters.c
new file mode 100644
index 0000000..b490139
--- /dev/null
+++ b/tools/sra-pileup/pileup_counters.c
@@ -0,0 +1,447 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+static uint32_t percent( uint32_t v1, uint32_t v2 )
+{
+    uint32_t sum = v1 + v2;
+    uint32_t res = 0;
+    if ( sum > 0 )
+        res = ( ( v1 * 100 ) / sum );
+    return res;
+}
+
+typedef struct indel_fragment
+{
+    BSTNode node;
+    const char * bases;
+    uint32_t len;
+    uint32_t count;
+} indel_fragment;
+
+
+static indel_fragment * make_indel_fragment( const char * bases, uint32_t len )
+{
+    indel_fragment * res = malloc( sizeof * res );
+    if ( res != NULL )
+    {
+        res->bases = string_dup ( bases, len );
+        if ( res->bases == NULL )
+        {
+            free( res );
+            res = NULL;
+        }
+        else
+        {
+            res->len = len;
+            res->count = 1;
+        }
+    }
+    return res;
+}
+
+
+static void CC free_indel_fragment( BSTNode * n, void * data )
+{
+    indel_fragment * fragment = ( indel_fragment * ) n;
+    if ( fragment != NULL )
+    {
+        free( ( void * ) fragment->bases );
+        free( fragment );
+    }
+}
+
+
+static void free_fragments( BSTree * fragments )
+{    
+    BSTreeWhack ( fragments, free_indel_fragment, NULL );
+}
+
+
+typedef struct find_fragment_ctx
+{
+    const char * bases;
+    uint32_t len;
+} find_fragment_ctx;
+
+
+static int64_t CC cmp_fragment_vs_find_ctx( const void *item, const BSTNode *n )
+{
+    const indel_fragment * fragment = ( const indel_fragment * )n;
+    const find_fragment_ctx * fctx = ( const find_fragment_ctx * )item;
+    return string_cmp ( fctx->bases, fctx->len, fragment->bases, fragment->len, -1 );
+}
+
+
+static int64_t CC cmp_fragment_vs_fragment( const BSTNode *item, const BSTNode *n )
+{
+    const indel_fragment * f1 = ( const indel_fragment * )item;
+    const indel_fragment * f2 = ( const indel_fragment * )n;
+    return string_cmp ( f1->bases, f1->len, f2->bases, f2->len, -1 );
+}
+
+
+static void count_indel_fragment( BSTree * fragments, const INSDC_4na_bin *bases, uint32_t len )
+{
+    find_fragment_ctx fctx;
+
+    fctx.bases = malloc( len );
+    if ( fctx.bases != NULL )
+    {
+        indel_fragment * fragment;
+        uint32_t i;
+
+        fctx.len = len;
+        for ( i = 0; i < len; ++i )
+            ( ( char * )fctx.bases )[ i ] = _4na_to_ascii( bases[ i ], false );
+
+        fragment = ( indel_fragment * ) BSTreeFind ( fragments, &fctx, cmp_fragment_vs_find_ctx );
+        if ( fragment == NULL )
+        {
+            fragment = make_indel_fragment( fctx.bases, len );
+            if ( fragment != NULL )
+            {
+                rc_t rc = BSTreeInsert ( fragments, ( BSTNode * )fragment, cmp_fragment_vs_fragment );
+                if ( rc != 0 )
+                    free_indel_fragment( ( BSTNode * )fragment, NULL );
+            }
+        }
+        else
+            fragment->count++;
+
+        free( ( void * ) fctx.bases );
+    }
+}
+
+
+typedef struct walk_fragment_ctx
+{
+    rc_t rc;
+    uint32_t n;
+} walk_fragment_ctx;
+
+
+static void CC on_fragment( BSTNode *n, void *data )
+{
+    walk_fragment_ctx * wctx = data;
+    const indel_fragment * fragment = ( const indel_fragment * )n;
+    if ( wctx->rc == 0 )
+    {
+        if ( wctx->n == 0 )
+            wctx->rc = KOutMsg( "%u-%.*s", fragment->count, fragment->len, fragment->bases );
+        else
+            wctx->rc = KOutMsg( "|%u-%.*s", fragment->count, fragment->len, fragment->bases );
+        wctx->n++;
+    }
+}
+
+
+static rc_t print_fragments( BSTree * fragments )
+{
+    walk_fragment_ctx wctx;
+    wctx.rc = 0;
+    wctx.n = 0;
+    BSTreeForEach ( fragments, false, on_fragment, &wctx );
+    return wctx.rc;
+}
+
+/* =========================================================================================== */
+
+typedef struct pileup_counters
+{
+    uint32_t matches;
+    uint32_t mismatches[ 4 ];
+    uint32_t inserts;
+    uint32_t deletes;
+    uint32_t forward;
+    uint32_t reverse;
+    uint32_t starting;
+    uint32_t ending;
+    BSTree insert_fragments;
+    BSTree delete_fragments;
+} pileup_counters;
+
+
+static void clear_counters( pileup_counters * counters )
+{
+    uint32_t i;
+
+    counters->matches = 0;
+    for ( i = 0; i < 4; ++i )
+        counters->mismatches[ i ] = 0;
+    counters->inserts = 0;
+    counters->deletes = 0;
+    counters->forward = 0;
+    counters->reverse = 0;
+    counters->starting = 0;
+    counters->ending = 0;
+    BSTreeInit( &(counters->insert_fragments) );
+    BSTreeInit( &(counters->delete_fragments) );
+}
+
+
+static void walk_counter_state( ReferenceIterator *ref_iter, int32_t state, bool reverse,
+                                pileup_counters * counters )
+{
+    if ( ( state & align_iter_invalid ) == align_iter_invalid )
+        return;
+
+    if ( ( state & align_iter_skip ) != align_iter_skip )
+    {
+        if ( ( state & align_iter_match ) == align_iter_match )
+            (counters->matches)++;
+        else
+        {
+            char c = _4na_to_ascii( state, false );
+            switch( c )
+            {
+                case 'A' : ( counters->mismatches[ 0 ] )++; break;
+                case 'C' : ( counters->mismatches[ 1 ] )++; break;
+                case 'G' : ( counters->mismatches[ 2 ] )++; break;
+                case 'T' : ( counters->mismatches[ 3 ] )++; break;
+            }
+        }
+    }
+
+    if ( reverse )
+        (counters->reverse)++;
+    else
+        (counters->forward)++;
+
+    if ( ( state & align_iter_insert ) == align_iter_insert )
+    {
+        const INSDC_4na_bin *bases;
+        uint32_t n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+        (counters->inserts) += n;
+        count_indel_fragment( &(counters->insert_fragments), bases, n );
+    }
+
+    if ( ( state & align_iter_delete ) == align_iter_delete )
+    {
+        const INSDC_4na_bin *bases;
+        INSDC_coord_zero ref_pos;
+        uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+        if ( bases != NULL )
+        {
+            (counters->deletes) += n;
+            count_indel_fragment( &(counters->delete_fragments), bases, n );
+            free( (void *) bases );
+        }
+    }
+
+    if ( ( state & align_iter_first ) == align_iter_first )
+        ( counters->starting)++;
+
+    if ( ( state & align_iter_last ) == align_iter_last )
+        ( counters->ending)++;
+}
+
+
+static rc_t print_counter_line( const char * ref_name,
+                                INSDC_coord_zero ref_pos,
+                                INSDC_4na_bin ref_base,
+                                uint32_t depth,
+                                pileup_counters * counters )
+{
+    char c = _4na_to_ascii( ref_base, false );
+
+    rc_t rc = KOutMsg( "%s\t%u\t%c\t%u\t", ref_name, ref_pos + 1, c, depth );
+
+    if ( rc == 0 && counters->matches > 0 )
+        rc = KOutMsg( "%u", counters->matches );
+
+    if ( rc == 0 /* && counters->mismatches[ 0 ] > 0 */ )
+        rc = KOutMsg( "\t%u-A", counters->mismatches[ 0 ] );
+
+    if ( rc == 0 /* && counters->mismatches[ 1 ] > 0 */ )
+        rc = KOutMsg( "\t%u-C", counters->mismatches[ 1 ] );
+
+    if ( rc == 0 /* && counters->mismatches[ 2 ] > 0 */ )
+        rc = KOutMsg( "\t%u-G", counters->mismatches[ 2 ] );
+
+    if ( rc == 0 /* && counters->mismatches[ 3 ] > 0 */ )
+        rc = KOutMsg( "\t%u-T", counters->mismatches[ 3 ] );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\tI:" );
+    if ( rc == 0 )
+        rc = print_fragments( &(counters->insert_fragments) );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\tD:" );
+    if ( rc == 0 )
+        rc = print_fragments( &(counters->delete_fragments) );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\t%u%%", percent( counters->forward, counters->reverse ) );
+
+    if ( rc == 0 && counters->starting > 0 )
+        rc = KOutMsg( "\tS%u", counters->starting );
+
+    if ( rc == 0 && counters->ending > 0 )
+        rc = KOutMsg( "\tE%u", counters->ending );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    free_fragments( &(counters->insert_fragments) );
+    free_fragments( &(counters->delete_fragments) );
+
+    return rc;
+}
+
+
+/* ........................................................................................... */
+
+
+static rc_t CC walk_counters_enter_ref_pos( walk_data * data )
+{
+    clear_counters( data->data );
+    return 0;
+}
+
+static rc_t CC walk_counters_exit_ref_pos( walk_data * data )
+{
+    rc_t rc = print_counter_line( data->ref_name, data->ref_pos, data->ref_base, data->depth, data->data );
+    return rc;
+}
+
+static rc_t CC walk_counters_placement( walk_data * data )
+{
+    walk_counter_state( data->ref_iter, data->state, data->xrec->reverse, data->data );
+    return 0;
+}
+
+rc_t walk_counters( ReferenceIterator *ref_iter, pileup_options *options )
+{
+    walk_data data;
+    walk_funcs funcs;
+    pileup_counters counters;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    data.data = &counters;
+
+    funcs.on_enter_ref = NULL;
+    funcs.on_exit_ref = NULL;
+
+    funcs.on_enter_ref_window = NULL;
+    funcs.on_exit_ref_window = NULL;
+
+    funcs.on_enter_ref_pos = walk_counters_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_counters_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = NULL;
+    funcs.on_exit_spotgroup = NULL;
+
+    funcs.on_placement = walk_counters_placement;
+
+    return walk_0( &data, &funcs );
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t print_mismatches_line( const char * ref_name,
+                                   INSDC_coord_zero ref_pos,
+                                   uint32_t depth,
+                                   uint32_t min_mismatch_percent,
+                                   pileup_counters * counters )
+{
+    rc_t rc = 0;
+    if ( depth > 0 )
+    {
+        uint32_t total_mismatches = counters->mismatches[ 0 ] +
+                                    counters->mismatches[ 1 ] +
+                                    counters->mismatches[ 2 ] +
+                                    counters->mismatches[ 3 ];
+	if ( total_mismatches * 100 >= min_mismatch_percent * depth) 
+        {
+                rc = KOutMsg( "%s\t%u\t%u\t%u\n", ref_name, ref_pos + 1, depth, total_mismatches );
+        }
+    }
+    
+    free_fragments( &(counters->insert_fragments) );
+    free_fragments( &(counters->delete_fragments) );
+
+    return rc;
+}
+
+
+/* ........................................................................................... */
+
+
+static rc_t CC walk_mismatches_enter_ref_pos( walk_data * data )
+{
+    clear_counters( data->data );
+    return 0;
+}
+
+static rc_t CC walk_mismatches_exit_ref_pos( walk_data * data )
+{
+    rc_t rc = print_mismatches_line( data->ref_name, data->ref_pos,
+                                     data->depth, data->options->min_mismatch, data->data );
+    return rc;
+}
+
+static rc_t CC walk_mismatches_placement( walk_data * data )
+{
+    walk_counter_state( data->ref_iter, data->state, data->xrec->reverse, data->data );
+    return 0;
+}
+
+
+rc_t walk_mismatches( ReferenceIterator *ref_iter, pileup_options * options )
+{
+    walk_data data;
+    walk_funcs funcs;
+    pileup_counters counters;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    data.data = &counters;
+
+    funcs.on_enter_ref = NULL;
+    funcs.on_exit_ref = NULL;
+
+    funcs.on_enter_ref_window = NULL;
+    funcs.on_exit_ref_window = NULL;
+
+    funcs.on_enter_ref_pos = walk_mismatches_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_mismatches_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = NULL;
+    funcs.on_exit_spotgroup = NULL;
+
+    funcs.on_placement = walk_mismatches_placement;
+
+    return walk_0( &data, &funcs );
+}
diff --git a/tools/sra-pileup/pileup_counters.h b/tools/sra-pileup/pileup_counters.h
new file mode 100644
index 0000000..f70f3a7
--- /dev/null
+++ b/tools/sra-pileup/pileup_counters.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_counters_
+#define _h_pileup_counters_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t walk_counters( ReferenceIterator *ref_iter, pileup_options *options );
+rc_t walk_mismatches( ReferenceIterator *ref_iter, pileup_options * options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_counters_ */
diff --git a/tools/sra-pileup/pileup_indels.c b/tools/sra-pileup/pileup_indels.c
new file mode 100644
index 0000000..ea10cea
--- /dev/null
+++ b/tools/sra-pileup/pileup_indels.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+typedef struct indel_counters
+{
+    uint32_t coverage;
+    uint32_t deletes;
+    uint32_t inserts;
+} indel_counters;
+
+
+static rc_t CC walk_indels_enter_ref_pos( walk_data * data )
+{
+    indel_counters * vc = data->data;
+    memset( vc, 0, sizeof *vc );
+    return 0;
+}
+
+
+static rc_t CC walk_indels_exit_ref_pos( walk_data * data )
+{
+	rc_t rc = 0;
+    if ( data->depth > 0 )
+    {
+        indel_counters * vc = data->data;
+		if ( ( vc -> deletes + vc -> inserts ) > 0 )
+		{
+			char ref_base = _4na_to_ascii( data->ref_base, false );
+
+/*
+        A ... ref-name
+        B ... ref-pos
+        C ... ref-base
+        D ... coverage
+
+        E ... total deletes
+        F ... total insertes
+                          A   B   C   D   E   F
+*/
+			rc = KOutMsg( "%s\t%u\t%c\t%u\t%u\t%u\n", 
+                     data->ref_name, data->ref_pos + 1, ref_base, data->depth,
+                     vc->deletes, vc->inserts );
+		}
+    }
+	return rc;
+}
+
+
+static rc_t CC walk_indels_placement( walk_data * data )
+{
+    int32_t state = data->state;
+    if ( ( state & align_iter_invalid ) != align_iter_invalid )
+    {
+        indel_counters * vc = data->data;
+
+        if ( ( state & align_iter_skip ) == align_iter_skip )
+            ( vc->deletes ) ++;
+
+        if ( ( state & align_iter_insert ) == align_iter_insert )
+            ( vc->inserts )++;
+    }
+    return 0;
+}
+
+
+rc_t walk_indels( ReferenceIterator *ref_iter, pileup_options * options )
+{
+    walk_data data;
+    walk_funcs funcs;
+
+    indel_counters v_counters;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    data.data = &v_counters;
+
+    funcs.on_enter_ref = NULL;
+    funcs.on_exit_ref = NULL;
+
+    funcs.on_enter_ref_window = NULL;
+    funcs.on_exit_ref_window = NULL;
+
+    funcs.on_enter_ref_pos = walk_indels_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_indels_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = NULL;
+    funcs.on_exit_spotgroup = NULL;
+
+    funcs.on_placement = walk_indels_placement;
+
+    return walk_0( &data, &funcs );
+}
diff --git a/tools/sra-pileup/pileup_indels.h b/tools/sra-pileup/pileup_indels.h
new file mode 100644
index 0000000..2eefc1c
--- /dev/null
+++ b/tools/sra-pileup/pileup_indels.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_indels_
+#define _h_pileup_indels_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t walk_indels( ReferenceIterator *ref_iter, pileup_options * options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_indels_ */
diff --git a/tools/sra-pileup/pileup_index.c b/tools/sra-pileup/pileup_index.c
new file mode 100644
index 0000000..7534c85
--- /dev/null
+++ b/tools/sra-pileup/pileup_index.c
@@ -0,0 +1,122 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+static uint32_t percent( uint32_t v1, uint32_t v2 )
+{
+    uint32_t sum = v1 + v2;
+    uint32_t res = 0;
+    if ( sum > 0 )
+        res = ( ( v1 * 100 ) / sum );
+    return res;
+}
+
+
+typedef struct index_counters
+{
+    uint32_t base_counts[ 4 ];   /* 0...A, 1...C, 2...G, 3...T */
+    uint32_t inserts;
+    uint32_t deletes;
+    uint32_t forward;
+    uint32_t reverse;
+} index_counters;
+
+
+static rc_t CC walk_index_enter_ref_pos( walk_data * data )
+{
+    index_counters * ic = data->data;
+    memset( ic, 0, sizeof *ic );
+    return 0;
+}
+
+
+static rc_t CC walk_index_exit_ref_pos( walk_data * data )
+{
+    index_counters * ic = data->data;
+    if ( ic->forward + ic->reverse == 0 )
+        return 0;
+    else
+        return KOutMsg( "%s\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\n", 
+                     data->ref_name, data->ref_pos + 1, 
+                     ic->base_counts[ 0 ], ic->base_counts[ 1 ], ic->base_counts[ 2 ], ic->base_counts[ 3 ],
+                     ic->inserts, ic->deletes, percent( ic->forward, ic->reverse ) );
+}
+
+
+static rc_t CC walk_index_placement( walk_data * data )
+{
+    int32_t state = data->state;
+    if ( ( state & align_iter_invalid ) != align_iter_invalid )
+    {
+        index_counters * ic = data->data;
+
+        if ( ( state & align_iter_skip ) == align_iter_skip )
+            ( ic->deletes ) ++;
+        else
+            ic->base_counts[ _4na_to_index( state ) ] ++;
+
+        if ( data->xrec->reverse )
+            ( ic->reverse )++;
+        else
+            ( ic->forward )++;
+
+        if ( ( state & align_iter_insert ) == align_iter_insert )
+            ( ic->inserts )++;
+    }
+    return 0;
+}
+
+
+rc_t walk_index( ReferenceIterator *ref_iter, pileup_options * options )
+{
+    walk_data data;
+    walk_funcs funcs;
+    index_counters i_counters;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    data.data = &i_counters;
+
+    funcs.on_enter_ref = NULL;
+    funcs.on_exit_ref = NULL;
+
+    funcs.on_enter_ref_window = NULL;
+    funcs.on_exit_ref_window = NULL;
+
+    funcs.on_enter_ref_pos = walk_index_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_index_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = NULL;
+    funcs.on_exit_spotgroup = NULL;
+
+    funcs.on_placement = walk_index_placement;
+
+    return walk_0( &data, &funcs );
+}
diff --git a/tools/sra-pileup/pileup_index.h b/tools/sra-pileup/pileup_index.h
new file mode 100644
index 0000000..7e07bc9
--- /dev/null
+++ b/tools/sra-pileup/pileup_index.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_index_
+#define _h_pileup_index_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t walk_index( ReferenceIterator *ref_iter, pileup_options * options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_index_ */
diff --git a/tools/sra-pileup/pileup_options.h b/tools/sra-pileup/pileup_options.h
new file mode 100644
index 0000000..9b02adc
--- /dev/null
+++ b/tools/sra-pileup/pileup_options.h
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_options_
+#define _h_pileup_options_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ref_regions.h"
+#include "cmdline_cmn.h"
+
+typedef struct pileup_options
+{
+    common_options cmn;     /* from cmdline_cmn.h */
+    bool process_dups;
+    bool omit_qualities;
+    bool read_tlen;
+    bool no_skip;
+    bool show_id;
+    bool div_by_spotgrp;
+	bool depth_per_spotgrp;
+    bool use_seq_name;
+    uint32_t minmapq;
+    uint32_t min_mismatch;
+    uint32_t merge_dist;
+    uint32_t source_table;
+    uint32_t function;  /* sra_pileup_samtools, sra_pileup_counters, sra_pileup_stat, 
+                           sra_pileup_report_ref, sra_pileup_report_ref_ext, sra_pileup_debug, etc */
+    struct skiplist * skiplist;     /* from ref_regions.h */
+} pileup_options;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  pileup_options_ */
diff --git a/tools/sra-pileup/pileup_stat.c b/tools/sra-pileup/pileup_stat.c
new file mode 100644
index 0000000..8e74124
--- /dev/null
+++ b/tools/sra-pileup/pileup_stat.c
@@ -0,0 +1,391 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+#include <klib/sort.h>
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+static uint32_t percent( uint32_t v1, uint32_t v2 )
+{
+    uint32_t sum = v1 + v2;
+    uint32_t res = 0;
+    if ( sum > 0 )
+        res = ( ( v1 * 100 ) / sum );
+    return res;
+}
+
+typedef struct tlen_array
+{
+    uint32_t * values;
+    uint32_t capacity;
+    uint32_t members;
+    uint32_t zeros;
+} tlen_array;
+
+
+static rc_t init_tlen_array( tlen_array * a, uint32_t init_capacity )
+{
+    rc_t rc = 0;
+    a->values = malloc( sizeof ( a->values[ 0 ] ) * init_capacity );
+    if ( a->values == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted );
+    else
+    {
+        a->capacity = init_capacity;
+        a->members = 0;
+        a->zeros = 0;
+    }
+    return rc;
+}
+
+
+static void finish_tlen_array( tlen_array * a )
+{
+    if ( a->values != NULL )
+    {
+        free( a->values );
+        a->values = NULL;
+    }
+}
+
+
+static rc_t realloc_tlen_array( tlen_array * a, uint32_t new_depth )
+{
+    rc_t rc = 0;
+    if ( new_depth > a->capacity )
+    {
+        void * p = realloc( a->values, ( sizeof ( a->values[ 0 ] ) ) * new_depth );
+        if ( a->values == NULL )
+            rc = RC ( rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted );
+        else
+        {
+            a->values = p;
+            a->capacity = new_depth;
+        }
+    }
+    return rc;
+}
+
+
+static void remove_from_tlen_array( tlen_array * a, uint32_t count )
+{
+    if ( count > 0 )
+    {
+        if ( a->members < count )
+            a->members = 0;
+        else
+        {
+            a->members -= count;
+            memmove( &(a->values[ 0 ]), &(a->values[ count ]), a->members * ( sizeof a->values[ 0 ] ) );
+        }
+    }
+}
+
+
+static bool add_tlen_to_array( tlen_array * a, uint32_t value )
+{
+    bool res = ( value != 0 );
+    if ( !res )
+        a->zeros++;
+    else
+        a->values[ a->members++ ] = value;
+    return res;
+}
+
+
+#define INIT_WINDOW_SIZE 50
+#define MAX_SEQLEN_COUNT 500000
+
+typedef struct strand
+{
+    uint32_t alignment_count, window_size, window_max, seq_len_accu_count;
+    uint64_t seq_len_accu;
+    tlen_array tlen_w;          /* tlen accumulater for all alignmnts starting/ending in window ending at current position */
+    tlen_array tlen_l;          /* array holding the length of all position-slices in the window */
+    tlen_array zeros;
+} strand;
+
+
+typedef struct stat_counters
+{
+    strand pos;
+    strand neg;
+} stat_counters;
+
+
+static rc_t prepare_strand( strand * strand, uint32_t initial_size )
+{
+    rc_t rc = init_tlen_array( &strand->tlen_w, initial_size );
+    if ( rc == 0 )
+        rc = init_tlen_array( &strand->tlen_l, initial_size );
+    if ( rc == 0 )
+        rc = init_tlen_array( &strand->zeros, initial_size );
+    if ( rc == 0 )
+    {
+        strand->window_size = 0;
+        strand->window_max = INIT_WINDOW_SIZE;
+        strand->seq_len_accu_count = 0;
+        strand->seq_len_accu = 0;
+    }
+    return rc;
+}
+
+
+static rc_t prepare_stat_counters( stat_counters * counters, uint32_t initial_size )
+{
+    rc_t rc = prepare_strand( &counters->pos, initial_size );
+    if ( rc == 0 )
+        rc = prepare_strand( &counters->neg, initial_size );
+    return rc;
+}
+
+
+static void finish_strand( strand * strand )
+{
+    finish_tlen_array( &strand->tlen_w );
+    finish_tlen_array( &strand->tlen_l );
+    finish_tlen_array( &strand->zeros );
+}
+
+
+static void finish_stat_counters( stat_counters * counters )
+{
+    finish_strand( &counters->pos );
+    finish_strand( &counters->neg );
+}
+
+
+static rc_t realloc_strand( strand * strand, uint32_t new_depth )
+{
+    rc_t rc = realloc_tlen_array( &strand->tlen_w, strand->tlen_w.members + new_depth );
+    if ( rc == 0 )
+        rc = realloc_tlen_array( &strand->tlen_l, strand->tlen_l.members + new_depth );
+    if ( rc == 0 )
+        rc = realloc_tlen_array( &strand->zeros, strand->zeros.members + new_depth );
+    strand->alignment_count = 0;
+    return rc;
+}
+
+
+static void on_new_ref_position_strand( strand * strand )
+{
+    if ( ( strand->seq_len_accu_count < MAX_SEQLEN_COUNT ) && ( strand->seq_len_accu_count > 0 ) )
+    {
+        uint64_t w = ( strand->seq_len_accu / strand->seq_len_accu_count );
+        if ( w > strand->window_max )
+            strand->window_max = w;
+    }
+
+    if ( strand->window_size >= strand->window_max )
+    {
+        uint32_t to_remove = strand->tlen_l.values[ 0 ];
+        remove_from_tlen_array( &strand->tlen_w, to_remove );
+        remove_from_tlen_array( &strand->tlen_l, 1 );
+
+        to_remove = strand->zeros.values[ 0 ];
+        strand->tlen_w.zeros -= to_remove;
+        remove_from_tlen_array( &strand->zeros, 1 );
+    }
+    else
+        strand->window_size++;
+    strand->tlen_l.values[ strand->tlen_l.members++ ] = 0;
+    strand->zeros.values[ strand->zeros.members++ ] = 0;
+}
+
+
+static uint32_t medium( tlen_array * a )
+{
+    if ( a->members == 0 )
+        return 0;
+    else
+        return a->values[ a->members >> 1 ];
+}
+
+
+static uint32_t percentil( tlen_array * a, uint32_t p )
+{
+    if ( a->members == 0 )
+        return 0;
+    else
+        return a->values[ ( a->members * p ) / 100 ];
+}
+
+
+static rc_t print_header_line( void )
+{
+    return KOutMsg( "\nREFNAME----\tREFPOS\tREFBASE\tDEPTH\tSTRAND%%\tTL+#0\tTL+10%%\tTL+MED\tTL+90%%\tTL-#0\tTL-10%%\tTL-MED\tTL-90%%\n\n" );
+}
+
+
+/* ........................................................................................... */
+
+
+static rc_t CC walk_stat_enter_ref_window( walk_data * data )
+{
+    stat_counters * counters = data->data;
+    counters->pos.tlen_w.members = 0;
+    counters->pos.tlen_l.members = 0;
+    counters->neg.tlen_w.members = 0;
+    counters->neg.tlen_l.members = 0;
+    return 0;
+}
+
+
+static rc_t CC walk_stat_enter_ref_pos( walk_data * data )
+{
+    rc_t rc;
+    stat_counters * counters = data->data;
+
+    on_new_ref_position_strand( &counters->pos );
+    on_new_ref_position_strand( &counters->neg );
+
+    rc = realloc_strand( &counters->pos, data->depth );
+    if ( rc == 0 )
+        rc = realloc_strand( &counters->neg, data->depth );
+
+    return rc;
+}
+
+
+static rc_t CC walk_stat_exit_ref_pos( walk_data * data )
+{
+    char c = _4na_to_ascii( data->ref_base, false );
+    stat_counters * counters = data->data;
+
+    /* REF-NAME, REF-POS, REF-BASE, DEPTH */
+    rc_t rc = KOutMsg( "%s\t%u\t%c\t%u\t", data->ref_name, data->ref_pos + 1, c, data->depth );
+
+    /* STRAND-ness */
+    if ( rc == 0 )
+        rc = KOutMsg( "%u%%\t", percent( counters->pos.alignment_count, counters->neg.alignment_count ) );
+
+    /* TLEN-Statistic for sliding window, only starting/ending placements */
+    if ( rc == 0 )
+    {
+        tlen_array * a = &counters->pos.tlen_w;
+        if ( a->members > 1 )
+            ksort_uint32_t ( a->values, a->members );
+
+        rc = KOutMsg( "%u\t%u\t%u\t%u\t", a->zeros, percentil( a, 10 ), medium( a ), percentil( a, 90 ) );
+        if ( rc == 0 )
+        {
+            a = &counters->neg.tlen_w;
+            if ( a->members > 1 )
+                ksort_uint32_t ( a->values, a->members );
+            rc = KOutMsg( "%u\t%u\t%u\t%u\t", a->zeros, percentil( a, 10 ), medium( a ), percentil( a, 90 ) );
+        }
+    }
+
+/*
+    KOutMsg( "( %u,%u )\t", counters->pos.window_max, counters->neg.window_max );
+    KOutMsg( "< %u.%u, %u.%u ( %u.%u, %u.%u ) >",
+            counters->pos.tlen_w.members, counters->pos.tlen_w.capacity, counters->neg.tlen_w.members, counters->neg.tlen_w.capacity,
+            counters->pos.tlen_l.members, counters->pos.tlen_l.capacity, counters->neg.tlen_l.members, counters->neg.tlen_l.capacity );
+*/
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    return rc;
+}
+
+
+static void walk_strand_placement( strand * strand, int32_t tlen, INSDC_coord_len seq_len )
+{
+    tlen_array * a;
+    uint32_t value =  ( tlen < 0 ) ? -tlen : tlen;
+    if ( add_tlen_to_array( &strand->tlen_w, value ) )
+        a = &strand->tlen_l;
+    else
+        a = &strand->zeros;
+    a->values[ a->members - 1 ]++;
+
+    if ( strand->seq_len_accu_count < MAX_SEQLEN_COUNT )
+    {
+        strand->seq_len_accu += seq_len;
+        strand->seq_len_accu_count++;
+    }
+}
+
+
+static rc_t CC walk_stat_placement( walk_data * data )
+{
+    int32_t state = data->state;
+    if ( ( state & align_iter_invalid ) != align_iter_invalid )
+    {
+        bool reverse = data->xrec->reverse;
+        stat_counters * counters = data->data;
+        strand * strand = ( reverse ) ? &counters->neg : &counters->pos;
+
+        strand->alignment_count++;
+
+        /* for TLEN-statistic on starting/ending placements at this pos */
+        if ( ( ( state & align_iter_last ) == align_iter_last )&&( reverse ) )
+            walk_strand_placement( strand, data->xrec->tlen, data->rec->len );
+        else if ( ( ( state & align_iter_first ) == align_iter_first )&&( !reverse ) )
+            walk_strand_placement( strand, data->xrec->tlen, data->rec->len );
+    }
+    return 0;
+}
+
+
+rc_t walk_stat( ReferenceIterator *ref_iter, pileup_options *options )
+{
+    walk_data data;
+    walk_funcs funcs;
+    stat_counters counters;
+
+    rc_t rc = print_header_line();
+    if ( rc == 0 )
+        rc = prepare_stat_counters( &counters, 1024 );
+    if ( rc == 0 )
+    {
+        data.ref_iter = ref_iter;
+        data.options = options;
+        data.data = &counters;
+
+        funcs.on_enter_ref = NULL;
+        funcs.on_exit_ref = NULL;
+
+        funcs.on_enter_ref_window = walk_stat_enter_ref_window;
+        funcs.on_exit_ref_window = NULL;
+
+        funcs.on_enter_ref_pos = walk_stat_enter_ref_pos;
+        funcs.on_exit_ref_pos = walk_stat_exit_ref_pos;
+
+        funcs.on_enter_spotgroup = NULL;
+        funcs.on_exit_spotgroup = NULL;
+
+        funcs.on_placement = walk_stat_placement;
+
+        rc = walk_0( &data, &funcs );
+
+        finish_stat_counters( &counters );
+    }
+    return rc;
+}
\ No newline at end of file
diff --git a/tools/sra-pileup/pileup_stat.h b/tools/sra-pileup/pileup_stat.h
new file mode 100644
index 0000000..7575822
--- /dev/null
+++ b/tools/sra-pileup/pileup_stat.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_stat_
+#define _h_pileup_stat_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t walk_stat( ReferenceIterator *ref_iter, pileup_options *options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_stat_ */
diff --git a/tools/sra-pileup/pileup_v2.c b/tools/sra-pileup/pileup_v2.c
new file mode 100644
index 0000000..015bf6a
--- /dev/null
+++ b/tools/sra-pileup/pileup_v2.c
@@ -0,0 +1,382 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+#include <kapp/args.h>
+
+#include "pileup_options.h"
+#include "dyn_string.h"
+#include "ref_walker.h"
+#include "4na_ascii.h"
+
+/*
+static rc_t CC pileup_test_enter_ref( ref_walker_data * rwd )
+{
+    return KOutMsg( "\nentering >%s<\n", rwd->ref_name );
+}
+
+static rc_t CC pileup_test_exit_ref( ref_walker_data * rwd )
+{
+    return KOutMsg( "exit >%s<\n", rwd->ref_name );
+}
+
+static rc_t CC pileup_test_enter_ref_window( ref_walker_data * rwd )
+{
+    return KOutMsg( "   enter window >%s< [ %,lu ... %,lu ]\n", rwd->ref_name, rwd->ref_start, rwd->ref_end );
+}
+
+static rc_t CC pileup_test_exit_ref_window( ref_walker_data * rwd )
+{
+    return KOutMsg( "   exit window >%s< [ %,lu ... %,lu ]\n", rwd->ref_name, rwd->ref_start, rwd->ref_end );
+}
+
+static rc_t CC pileup_test_enter_ref_pos( ref_walker_data * rwd )
+{
+    return KOutMsg( "   enter pos [ %,lu ], d=%u\n", rwd->pos, rwd->depth );
+}
+
+static rc_t CC pileup_test_exit_ref_pos( ref_walker_data * rwd )
+{
+    return KOutMsg( "   exit pos [ %,lu ], d=%u\n", rwd->pos, rwd->depth );
+}
+
+static rc_t CC pileup_test_enter_spot_group( ref_walker_data * rwd )
+{
+    return KOutMsg( "       enter spot-group [ %,lu ], %.*s\n", rwd->pos, rwd->spot_group_len, rwd->spot_group );
+}
+
+static rc_t CC pileup_test_exit_spot_group( ref_walker_data * rwd )
+{
+    return KOutMsg( "       exit spot-group [ %,lu ], %.*s\n", rwd->pos, rwd->spot_group_len, rwd->spot_group );
+}
+
+static rc_t CC pileup_test_alignment( ref_walker_data * rwd )
+{
+    rc_t rc = KOutMsg( "          alignment\t" );
+    if ( rc == 0 )
+    {
+        if ( !rwd->valid )
+        {
+            KOutMsg( "invalid" );
+        }
+        else
+        {
+            KOutMsg( "%s%s", rwd->reverse ? "<" : ">", rwd->match ? "." : "!" );
+        }
+    }
+    KOutMsg( "\n" );
+    return rc;
+}
+
+static rc_t pileup_test( Args * args, pileup_options *options )
+{
+    struct ref_walker * walker;
+    rc_t rc = ref_walker_create( &walker );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count;
+        rc = ArgsParamCount( args, &count );
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char * src = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&src );
+            if ( rc == 0 && src != NULL )
+                rc = ref_walker_add_source( walker, src );
+        }
+
+        if ( rc == 0 )
+        {
+            rc = ArgsOptionCount( args, OPTION_REF, &count );
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char * s = NULL;
+                rc = ArgsOptionValue( args, OPTION_REF, idx, (const void **)&s );
+                if ( rc == 0 && s != NULL )
+                    rc = ref_walker_parse_and_add_range( walker, s );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            ref_walker_callbacks callbacks = 
+                {   pileup_test_enter_ref,
+                    pileup_test_exit_ref,
+                    pileup_test_enter_ref_window,
+                    pileup_test_exit_ref_window,
+                    pileup_test_enter_ref_pos,
+                    pileup_test_exit_ref_pos,
+                    pileup_test_enter_spot_group,
+                    pileup_test_exit_spot_group,
+                    pileup_test_alignment };
+            rc = ref_walker_set_callbacks( walker, &callbacks );
+        }
+
+        if ( rc == 0 )
+            rc = ref_walker_walk( walker, NULL );
+
+        ref_walker_destroy( walker );
+    }
+    return rc;
+}
+*/
+
+
+/* =========================================================================================== */
+
+
+typedef struct pileup_v2_ctx
+{
+    struct dyn_string * bases;
+    struct dyn_string * qual;
+    bool print_qual;
+    bool div_by_spotgrp;
+    bool debug;
+} pileup_v2_ctx;
+
+
+static rc_t CC pileup_v2_enter_ref_pos( ref_walker_data * rwd )
+{
+    pileup_v2_ctx * ctx = rwd->data;
+    /* make shure that bases/qual have the necessary length ( depth * 2 ) */
+    uint32_t l = ( rwd->depth * 2 );
+    rc_t rc = expand_dyn_string( ctx->bases, l );
+    if ( rc == 0 )
+        reset_dyn_string( ctx->bases );
+    if ( rc == 0 && ctx->print_qual )
+    {
+        rc = expand_dyn_string( ctx->qual, l );
+        if ( rc == 0 )
+            reset_dyn_string( ctx->qual );
+    }
+    return rc;
+}
+
+
+static rc_t CC pileup_v2_exit_ref_pos( ref_walker_data * rwd )
+{
+    pileup_v2_ctx * ctx = rwd->data;
+    rc_t rc = KOutMsg( "%s\t%u\t%c\t%u\t", rwd->ref_name, rwd->pos + 1, rwd->ascii_ref_base, rwd->depth );
+    if ( rc == 0 )
+        rc = print_dyn_string( ctx->bases );
+    if ( rc == 0 && ctx->print_qual )
+    {
+        rc = KOutMsg( "\t" );
+        if ( rc == 0 )
+            rc = print_dyn_string( ctx->qual );
+    }
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t CC pileup_v2_enter_spot_group( ref_walker_data * rwd )
+{
+    rc_t rc = 0;
+    pileup_v2_ctx * ctx = rwd->data;
+    if ( ctx->div_by_spotgrp )
+    {
+        if ( dyn_string_len( ctx->bases ) > 0 )
+            rc = add_char_2_dyn_string( ctx->bases, '\t' );
+        if ( rc == 0 && ctx->print_qual && dyn_string_len( ctx->qual ) > 0 )
+            rc = add_char_2_dyn_string( ctx->qual, '\t' );
+    }
+    return rc;
+}
+
+
+static rc_t CC pileup_v2_alignment( ref_walker_data * rwd )
+{
+    rc_t rc = 0;
+    pileup_v2_ctx * ctx = rwd->data;
+
+    if ( !rwd->valid )
+    {
+        rc = add_char_2_dyn_string( ctx->bases, '?' );
+        if ( rc == 0 && ctx->print_qual )
+            rc = add_char_2_dyn_string( ctx->qual, '?' );
+    }
+    else
+    {
+        if ( rwd->first )
+        {
+            char s[ 3 ];
+            int32_t c = rwd->mapq + 33;
+            if ( c > '~' ) { c = '~'; }
+            if ( c < 33 ) { c = 33; }
+            s[ 0 ] = '^';
+            s[ 1 ] = c;
+            s[ 2 ] = 0;
+            rc = add_string_2_dyn_string( ctx->bases, s );
+        }
+
+
+        if ( rc == 0 )
+        {
+            if ( rwd->skip )
+            {
+                if ( rwd->reverse )
+                    rc = add_char_2_dyn_string( ctx->bases, '<' );
+                else
+                    rc = add_char_2_dyn_string( ctx->bases, '>' );
+            }
+            else
+            {
+                if ( rwd->match )
+                    rc = add_char_2_dyn_string( ctx->bases, ( rwd->reverse ? ',' : '.' ) );
+                else
+                    rc = add_char_2_dyn_string( ctx->bases, rwd->ascii_alignment_base );
+            }
+        }
+
+        if ( rc == 0 && rwd->ins )
+        {
+            uint32_t i, n = rwd->ins_bases_count;
+            
+            rc = print_2_dyn_string( ctx->bases, "+%u", rwd->ins_bases_count );
+            for ( i = 0; i < n && rc == 0; ++i )
+                rc = add_char_2_dyn_string( ctx->bases, _4na_to_ascii( rwd->ins_bases[ i ], rwd->reverse ) );
+        }
+
+        if ( rc == 0 && rwd->del && rwd->del_bases_count > 0 && rwd->del_bases != NULL )
+        {
+            uint32_t i, n = rwd->del_bases_count;
+            rc = print_2_dyn_string( ctx->bases, "-%u", n );
+            for ( i = 0; i < n && rc == 0; ++i )
+                rc = add_char_2_dyn_string( ctx->bases, _4na_to_ascii( rwd->del_bases[ i ], rwd->reverse ) );
+        }
+
+        if ( rc == 0 && rwd->last )
+            rc = add_char_2_dyn_string( ctx->bases, '$' );
+
+        if ( rc == 0 && ctx->print_qual )
+        {
+            rc = add_char_2_dyn_string( ctx->qual, rwd->quality );
+        }
+    }
+
+    return rc;
+}
+
+
+rc_t pileup_v2( Args * args, pileup_options *options )
+{
+    struct ref_walker * walker;
+
+    /* create walker */
+    rc_t rc = ref_walker_create( &walker );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count;
+
+        /* add sources to walker */
+        rc = ArgsParamCount( args, &count );
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char * src = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&src );
+            if ( rc == 0 && src != NULL )
+                rc = ref_walker_add_source( walker, src );
+        }
+
+        /* add ranges to walker */
+        if ( rc == 0 )
+        {
+            rc = ArgsOptionCount( args, OPTION_REF, &count );
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char * s = NULL;
+                rc = ArgsOptionValue( args, OPTION_REF, idx, (const void **)&s );
+                if ( rc == 0 && s != NULL )
+                    rc = ref_walker_parse_and_add_range( walker, s );
+            }
+        }
+
+        /* set callbacks for walker */
+        if ( rc == 0 )
+        {
+            ref_walker_callbacks callbacks = 
+                {   NULL,
+                    NULL,
+                    NULL,
+                    NULL,
+                    pileup_v2_enter_ref_pos,
+                    pileup_v2_exit_ref_pos,
+                    pileup_v2_enter_spot_group,
+                    NULL,
+                    pileup_v2_alignment };
+            rc = ref_walker_set_callbacks( walker, &callbacks );
+        }
+
+        /* translate the commandline options into walker 'INTERESTS' */
+        if ( rc == 0 )
+        {
+            uint32_t interest = RW_INTEREST_INDEL | RW_INTEREST_BASE;
+
+            if ( options->process_dups ) interest |= RW_INTEREST_DUPS;
+            if ( !options->omit_qualities ) interest |= RW_INTEREST_QUAL;
+            if ( !options->no_skip ) interest |= RW_INTEREST_SKIP;
+            if ( options->show_id ) interest |= RW_INTEREST_DEBUG;
+            if ( options->use_seq_name ) interest |= RW_INTEREST_SEQNAME;
+            if ( options->cmn.tab_select & primary_ats ) interest |= RW_INTEREST_PRIM;
+            if ( options->cmn.tab_select & secondary_ats ) interest |= RW_INTEREST_SEC;
+            if ( options->cmn.tab_select & evidence_ats ) interest |= RW_INTEREST_EV;
+
+            rc = ref_walker_set_interest( walker, interest );
+            if ( rc == 0 )
+                rc = ref_walker_set_min_mapq( walker, options->minmapq );
+        }
+
+        /* let the walker call the callbacks while iterating over the sources/ranges */
+        if ( rc == 0 )
+        {
+            pileup_v2_ctx ctx;
+            memset( &ctx, 0, sizeof ctx );
+            rc = allocated_dyn_string ( &ctx.bases, 1000 );
+            if ( rc == 0 )
+            {
+                rc = allocated_dyn_string ( &ctx.qual, 1000 );
+                if ( rc == 0 )
+                {
+                    ctx.print_qual = !options->omit_qualities;
+                    ctx.div_by_spotgrp = options->div_by_spotgrp;
+                    ctx.debug = options->show_id;
+
+                    /***********************************/
+                    rc = ref_walker_walk( walker, &ctx );
+                    /***********************************/
+
+                    free_dyn_string ( ctx.qual );
+                }
+                free_dyn_string ( ctx.bases );
+            }
+        }
+
+        /* destroy the walker */
+        ref_walker_destroy( walker );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/pileup_v2.h b/tools/sra-pileup/pileup_v2.h
new file mode 100644
index 0000000..7b1313c
--- /dev/null
+++ b/tools/sra-pileup/pileup_v2.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_v2_
+#define _h_pileup_v2_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t pileup_v2( Args * args, pileup_options *options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_v2_ */
diff --git a/tools/sra-pileup/pileup_varcount.c b/tools/sra-pileup/pileup_varcount.c
new file mode 100644
index 0000000..d5834cf
--- /dev/null
+++ b/tools/sra-pileup/pileup_varcount.c
@@ -0,0 +1,139 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+typedef struct var_counters
+{
+    uint32_t coverage;
+    uint32_t base_counts[ 4 ];      /* 0...A, 1...C, 2...G, 3...T */
+    uint32_t deletes;
+    uint32_t inserts;
+    uint32_t insert_after[ 4 ];     /* 0...A, 1...C, 2...G, 3...T */
+} var_counters;
+
+
+static rc_t CC walk_varcount_enter_ref_pos( walk_data * data )
+{
+    var_counters * vc = data->data;
+    memset( vc, 0, sizeof *vc );
+    return 0;
+}
+
+
+static rc_t CC walk_varcount_exit_ref_pos( walk_data * data )
+{
+    if ( data->depth == 0 )
+        return 0;
+    else
+    {
+        var_counters * vc = data->data;
+        char ref_base = _4na_to_ascii( data->ref_base, false );
+
+/*
+        A ... ref-name
+        B ... ref-pos
+        C ... ref-base
+        D ... coverage
+
+        E ... A ( if mismatch )
+        F ... C ( if mismatch )
+        G ... G ( if mismatch )
+        H ... T ( if mismatch )
+
+        I ... total deletes
+        J ... total inserts
+
+        K ... inserts after A
+        L ... inserts after C
+        M ... inserts after G
+        N ... inserts after T
+
+                          A   B   C   D   E   F   G   H   I   J   K   L   M   N
+*/                         
+        return KOutMsg( "%s\t%u\t%c\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\n", 
+                     data->ref_name, data->ref_pos + 1, ref_base, data->depth,
+
+                     vc->base_counts[ 0 ], vc->base_counts[ 1 ], vc->base_counts[ 2 ], vc->base_counts[ 3 ],
+                     vc->deletes, vc->inserts,
+                     vc->insert_after[ 0 ], vc->insert_after[ 1 ], vc->insert_after[ 2 ], vc->insert_after[ 3 ] );
+    }
+}
+
+
+static rc_t CC walk_varcount_placement( walk_data * data )
+{
+    int32_t state = data->state;
+    if ( ( state & align_iter_invalid ) != align_iter_invalid )
+    {
+        var_counters * vc = data->data;
+        uint32_t idx = _4na_to_index( state );
+
+        if ( ( state & align_iter_skip ) == align_iter_skip )
+            ( vc->deletes ) ++;
+        else if ( ( state & align_iter_match ) != align_iter_match )
+            vc->base_counts[ idx ] ++;
+
+        if ( ( state & align_iter_insert ) == align_iter_insert )
+        {
+            ( vc->inserts )++;
+            vc->insert_after[ idx ] ++;
+        }
+    }
+    return 0;
+}
+
+
+rc_t walk_varcount( ReferenceIterator *ref_iter, pileup_options * options )
+{
+    walk_data data;
+    walk_funcs funcs;
+
+    var_counters v_counters;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    data.data = &v_counters;
+
+    funcs.on_enter_ref = NULL;
+    funcs.on_exit_ref = NULL;
+
+    funcs.on_enter_ref_window = NULL;
+    funcs.on_exit_ref_window = NULL;
+
+    funcs.on_enter_ref_pos = walk_varcount_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_varcount_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = NULL;
+    funcs.on_exit_spotgroup = NULL;
+
+    funcs.on_placement = walk_varcount_placement;
+
+    return walk_0( &data, &funcs );
+}
diff --git a/tools/sra-pileup/pileup_varcount.h b/tools/sra-pileup/pileup_varcount.h
new file mode 100644
index 0000000..a89ca9a
--- /dev/null
+++ b/tools/sra-pileup/pileup_varcount.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_pileup_varcount_
+#define _h_pileup_varcount_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t walk_varcount( ReferenceIterator *ref_iter, pileup_options * options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_pileup_varcount_ */
diff --git a/tools/sra-pileup/read_fkt.c b/tools/sra-pileup/read_fkt.c
new file mode 100644
index 0000000..4f2ae53
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.c
@@ -0,0 +1,718 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include <sysalloc.h>
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) bool",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const bool * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) bool failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_bool_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const bool **res, uint32_t *res_len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) bool ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        bool * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( res_len != NULL )
+                *res_len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_uint8( int64_t row_id, const VCursor * cursor, uint32_t idx, uint8_t *res, uint8_t dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) uint8",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const uint8_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) char_ptr failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_uint8_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) uint8 ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const uint8_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) char_ptr failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_uint32( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) uint32",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        uint32_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) uint32_t failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_uint32_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint32_t **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) uint32 ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        uint32_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) uint32_t (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_int32( int64_t row_id, const VCursor * cursor, uint32_t idx, int32_t *res, int32_t dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) int32",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        int32_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) uint32_t failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_int32_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const int32_t **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) int32 ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        int32_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) uint32_t (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) int64",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const int64_t *value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) int64 failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_int64_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const int64_t **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) int64 ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        int64_t * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) uint64_t (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_char_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) char ptr",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const char * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) char_ptr failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, INSDC_coord_zero dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_zero",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        INSDC_coord_zero * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_zero failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_zero (ptr)",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const INSDC_coord_zero * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_zero (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_INSDC_coord_one( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_one *res, INSDC_coord_one dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_one",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        INSDC_coord_one * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_one failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_one_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_one **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_one (ptr)",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        INSDC_coord_one * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_one (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res, INSDC_coord_len dflt, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_len", 
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        INSDC_coord_len * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_len failed", 
+                "tr=%li,ti=%u,hi=$u", row_id, idx, hint ) );
+        }
+        else
+        {
+            *res = ( row_len > 0 ) ? *value : dflt;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_coord_len (ptr)", 
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const INSDC_coord_len * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_coord_len (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_read_type (ptr)", 
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const INSDC_read_type * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_read_type (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_read_filter (ptr)",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const INSDC_read_filter * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_read_filter (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len, const char * hint )
+{
+    rc_t rc;
+    if ( idx == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcItem, rcInvalid );    
+        (void)PLOGERR( klogInt, ( klogInt, rc, "column idx invalid at row#$(tr) . $(hi) ) INSDC_dna_text (ptr)",
+            "tr=%li,hi=%s", row_id, hint ) );
+    }
+    else
+    {
+        const INSDC_dna_text * value;
+        uint32_t elem_bits, boff, row_len;
+        rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( row#$(tr) . idx#$(ti) . $(hi) ) INSDC_dna_text (ptr) failed", 
+                "tr=%li,ti=%u,hi=%s", row_id, idx, hint ) );
+        }
+        else
+        {
+            if ( row_len > 0 )
+                *res = value;
+            if ( len != NULL )
+                *len = row_len;
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------------------------------------------------- */
+
+bool namelist_contains( const KNamelist *names, const char * a_name )
+{
+    bool res = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( names, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        uint32_t idx;
+        size_t a_name_len = string_size( a_name );
+        for ( idx = 0; idx < count && rc == 0 && !res; ++idx )
+        {
+            const char * s;
+            rc = KNamelistGet( names, idx, &s );
+            if ( rc == 0 && s != NULL )
+            {
+                size_t s_len = string_size( s );
+                size_t max_len = a_name_len > s_len ? a_name_len : s_len;
+                int cmp = string_cmp( a_name, a_name_len, s, s_len, max_len );
+                if ( cmp == 0 )
+                    res = true;
+            }
+        }
+    }
+    return res;
+}
+
+
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx )
+{
+    rc_t rc = VCursorAddColumn( cursor, idx, "%s", colname );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorAddColumn( $(cn) ) failed", "cn=%s", colname ) );
+    }
+    return rc;
+}
+
+
+static const char * col_name_without_type( const char * colname )
+{
+    const char * res = colname;
+    const char * s = string_chr( colname, string_size( colname ), ')' );
+    if ( s != NULL )
+        res = ++s;
+    return res;
+}
+
+void add_opt_column( const VCursor * cursor, const KNamelist *names, const char *colname, uint32_t * idx )
+{
+    bool available = namelist_contains( names, col_name_without_type( colname ) );
+    if ( available )
+    {
+        rc_t rc = VCursorAddColumn( cursor, idx, "%s", colname );
+        if ( rc != 0 )
+            *idx = COL_NOT_AVAILABLE;
+    }
+    else
+    {
+        *idx = COL_NOT_AVAILABLE;
+    }
+}
diff --git a/tools/sra-pileup/read_fkt.h b/tools/sra-pileup/read_fkt.h
new file mode 100644
index 0000000..6ba6fa8
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.h
@@ -0,0 +1,82 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_read_fkt_
+#define _h_read_fkt_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/cursor.h>
+#include <insdc/sra.h>
+
+#define COL_NOT_AVAILABLE 0xFFFFFFFF
+#define INVALID_COLUMN 0xFFFFFFFF
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt, const char * hint );
+rc_t read_bool_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const bool **res, uint32_t *res_len, const char * hint );
+
+rc_t read_uint8( int64_t row_id, const VCursor * cursor, uint32_t idx, uint8_t *res, uint8_t dflt, const char * hint );
+rc_t read_uint8_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, uint32_t *len, const char * hint );
+
+rc_t read_uint32( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt, const char * hint );
+rc_t read_uint32_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint32_t **res, uint32_t *len, const char * hint );
+
+rc_t read_int32( int64_t row_id, const VCursor * cursor, uint32_t idx, int32_t *res, int32_t dflt, const char * hint );
+rc_t read_int32_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const int32_t **res, uint32_t *len, const char * hint );
+
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt, const char * hint );
+rc_t read_int64_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const int64_t **res, uint32_t *len, const char * hint );
+
+rc_t read_char_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, uint32_t *len, const char * hint );
+
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, INSDC_coord_zero dflt, const char * hint );
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len, const char * hint );
+
+rc_t read_INSDC_coord_one( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_one *res, INSDC_coord_one dflt, const char * hint );
+rc_t read_INSDC_coord_one_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_one **res, uint32_t *len, const char * hint );
+
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res, INSDC_coord_len dflt, const char * hint );
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len, const char * hint );
+
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len, const char * hint );
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len, const char * hint );
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len, const char * hint );
+
+bool namelist_contains( const KNamelist * names, const char * a_name );
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx );
+void add_opt_column( const VCursor * cursor, const KNamelist *names, const char *colname, uint32_t * idx );
+
+#endif
diff --git a/tools/sra-pileup/ref_regions.c b/tools/sra-pileup/ref_regions.c
new file mode 100644
index 0000000..c628927
--- /dev/null
+++ b/tools/sra-pileup/ref_regions.c
@@ -0,0 +1,825 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "ref_regions.h"
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/container.h>
+
+#include <stdlib.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <strtol.h>
+
+/* =========================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+struct skip_range
+{
+    uint64_t start;
+    uint64_t end;
+} skip_range;
+
+
+static struct skip_range * make_skip_range( const uint64_t start, const uint64_t end )
+{
+    struct skip_range *res = calloc( 1, sizeof *res );
+    if ( res != NULL )
+    {
+        res->start = start;
+        res->end = end;
+    }
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+struct reference_range
+{
+    uint64_t start;
+    uint64_t end;
+    Vector skip;
+} reference_range;
+
+
+static struct reference_range * make_range( const uint64_t start, const uint64_t end )
+{
+    struct reference_range *res = calloc( 1, sizeof *res );
+    if ( res != NULL )
+    {
+        res->start = start;
+        res->end = end;
+        VectorInit ( &res->skip, 0, 5 );
+    }
+    return res;
+}
+
+
+static void CC release_skip( void * item, void * data ) { free( item ); }
+
+static void free_range( struct reference_range * self )
+{
+    VectorWhack ( &self->skip, release_skip, NULL );
+    free( self );
+}
+
+static int64_t cmp_range( const struct reference_range * a, const struct reference_range * b )
+{
+	if ( a != NULL && b != NULL )
+	{
+        if ( a->start < b->start )
+            return -1;
+        else if ( a->start > b->start )
+            return 1;
+        else if ( a->end < b->end )
+            return -1;
+        else if ( a->end > b->end )
+            return 1;
+        else
+            return 0;
+	}
+	return 1; /* question from ukrainch: so, cmp_range cannot be used for sorting? */
+}
+
+
+static bool range_overlapp( const struct reference_range * a, const struct reference_range * b )
+{
+	if ( a != NULL && b != NULL )
+	    return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+	return false;
+}
+
+
+static uint64_t range_distance( const struct reference_range * a, const struct reference_range * b )
+{
+	if ( a != NULL && b != NULL )
+		return ( b->start - a->end );
+	return 0;
+}
+
+/* =========================================================================================== */
+
+struct reference_region
+{
+    BSTNode node;
+    const char * name;
+    Vector ranges;
+} reference_region;
+
+
+static struct reference_region * make_reference_region( const char *name )
+{
+    struct reference_region *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        VectorInit ( &res->ranges, 0, 5 );
+    }
+    return res;
+}
+
+
+static int64_t CC cmp_range_wrapper( const void *item, const void *n )
+{   return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( struct reference_region * self, const uint64_t start, const uint64_t end )
+{
+    rc_t rc = 0;
+    struct reference_range *r = make_range( start, end );
+    if ( r == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+#define RR_NAME  1
+#define RR_START 2
+#define RR_END   3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+    if ( *dst < ( size - 1 ) )
+        s[ *dst ] = c;
+    (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+    if ( *dst > size )
+        s[ size - 1 ] = 0;
+    else
+        s[ *dst ] = 0;
+    *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+    uint64_t res = 0;
+    char *endp;
+    finish_txt( s, size, dst );
+    res = strtou64( s, &endp, 10 );
+    return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+                              uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+
+    *start = 0;
+    *end   = 0;
+    name[ 0 ] = 0;
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 4096 ];
+        st = RR_NAME;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_NAME  : if ( c == ':' )
+                                {
+                                    finish_txt( name, len, &dst );
+                                    st = RR_START;
+                                }
+                                else
+                                {
+                                    put_c( name, len, &dst, c );
+                                }
+                                break;
+
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_NAME  : finish_txt( name, len, &dst );
+                            break;
+
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static void CC release_ranges_wrapper( void * item, void * data ) { free_range( item ); }
+
+static void free_reference_region( struct reference_region * self )
+{
+    free( (void*)self->name );
+    VectorWhack ( &self->ranges, release_ranges_wrapper, NULL );
+    free( self );
+}
+
+
+static void merge_overlapping_ranges( struct reference_region * self )
+{
+    uint32_t n = VectorLength( &self->ranges );
+    uint32_t i = 0;
+    struct reference_range * a = NULL;
+    while ( i < n )
+    {
+        struct reference_range * b = VectorGet ( &self->ranges, i );
+        bool remove = false;
+        if ( a != NULL )
+        {
+            remove = range_overlapp( a, b );
+            if ( remove )
+            {
+                struct reference_range * r;
+                a->end = b->end;
+                VectorRemove ( &self->ranges, i, (void**)&r );
+                free( r );
+                n--;
+            }
+        }
+        if ( !remove )
+        {
+            a = b;
+            ++i;
+        }
+    }
+}
+
+
+static void merge_close_ranges_and_create_filter( struct reference_region * self, uint64_t merge_diff )
+{
+    uint32_t n = VectorLength( &self->ranges );
+    uint32_t i = 0;
+    struct reference_range * a = NULL;
+    while ( i < n )
+    {
+        struct reference_range * b = VectorGet ( &self->ranges, i );
+        bool remove = false;
+        if ( a != NULL )
+        {
+            /* get the distance between a and b */
+            uint64_t d = range_distance( a, b );
+            remove = ( d < merge_diff );
+            if ( remove )
+            {
+                struct reference_range * r;
+
+                /* add the gap to the skip-vector of a */
+                struct skip_range * sr = make_skip_range( a->end + 1, b->start - 1 );
+                VectorAppend ( &( a->skip ), NULL, sr );
+
+                /* expand a to merge with b */
+                a->end = b->end;
+
+                /* remove b */
+                VectorRemove ( &self->ranges, i, (void**)&r );
+                free( r );
+                n--;
+            }
+        }
+        if ( !remove )
+        {
+            a = b;
+            ++i;
+        }
+    }
+}
+
+
+/* =========================================================================================== */
+
+static int64_t CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const struct reference_region * r = ( const struct reference_region * )n;
+    return cmp_pchar( (const char *)item, r->name );
+}
+
+static struct reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+    return ( struct reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+static int64_t CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const struct reference_region * a = ( const struct reference_region * )item;
+   const struct reference_region * b = ( const struct reference_region * )n;
+   return cmp_pchar( a->name, b->name );
+}
+
+
+rc_t add_region( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+    rc_t rc;
+
+    struct reference_region * r = find_reference_region( regions, name );
+    if ( r == NULL )
+    {
+        r = make_reference_region( name );
+        if ( r == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+            rc = add_ref_region_range( r, start, end );
+        if ( rc == 0 )
+            rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+        if ( rc != 0 )
+            free_reference_region( r );
+    }
+    else
+    {
+        rc = add_ref_region_range( r, start, end );
+    }
+    return rc;
+}
+
+
+rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+    uint64_t start, end;
+    char name[ 4096 ];
+    parse_definition( s, name, sizeof name, &start, &end );
+    if ( name[ 0 ] == 0 )
+        return RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+        return add_region( regions, name, start, end );
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC slice_report_wrapper( BSTNode *n, void *data )
+{
+    const struct reference_region * r = ( const struct reference_region * )n;
+    uint32_t nr = VectorLength( &( r->ranges ) );
+
+    KOutMsg( "\n-[%s]:\n", r->name );
+    if ( nr == 0 )
+        KOutMsg( " no ranges!\n" );
+    else
+    {
+        uint32_t i, j;
+        for ( i = 0; i < nr; ++i )
+        {
+            const struct reference_range * rr = ( const struct reference_range * ) VectorGet ( &( r->ranges ), i );
+            uint32_t ns = VectorLength( &( rr->skip ) );
+            KOutMsg( "  %u ... %u\n", rr->start, rr->end );
+            for ( j = 0; j < ns; ++j )
+            {
+                const struct skip_range * sr = ( const struct skip_range * ) VectorGet ( &( rr->skip ), j );
+                KOutMsg( "  ___skip %u ... %u\n", sr->start, sr->end );
+            }
+        }
+    }
+}
+
+
+void slice_report( BSTree * regions )
+{
+    KOutMsg( "\n\nstart slice-report:\n" );
+    BSTreeForEach ( regions, false, slice_report_wrapper, NULL );
+    KOutMsg( "\nend slice-report\n\n" );
+}
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+    struct reference_region * rr = ( struct reference_region * )n;
+    uint64_t * merge_diff = data;
+    merge_overlapping_ranges( rr );
+    if ( *merge_diff > 0 )
+        merge_close_ranges_and_create_filter( rr, *merge_diff );
+}
+
+
+void check_ref_regions( BSTree * regions, uint64_t merge_diff )
+{
+    BSTreeForEach ( regions, false, check_refrange_wrapper, &merge_diff );
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+    free_reference_region( ( struct reference_region * ) n );
+}
+
+
+void free_ref_regions( BSTree * regions )
+{    
+    BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    struct reference_region * r = ( struct reference_region * ) n;
+    uint32_t * count = ( uint32_t * ) data;
+    *count += VectorLength( &(r->ranges) );
+}
+
+
+uint32_t count_ref_regions( BSTree * regions )
+{
+    uint32_t res = 0;
+    BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct foreach_ref_region_func
+{
+    rc_t ( CC * on_region ) ( const char * name, const struct reference_range * range, void *data );
+    void * data;
+    rc_t rc;
+} foreach_ref_region_func;
+
+
+static bool CC foreach_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    struct reference_region * r = ( struct reference_region * ) n;
+    foreach_ref_region_func * func = ( foreach_ref_region_func * )data;
+
+    if ( func->rc == 0 )
+    {
+        uint32_t i, v_count = VectorLength( &( r->ranges ) );
+
+        for ( i = 0; i < v_count && func->rc == 0; ++i )
+        {
+            struct reference_range * rr = VectorGet ( &( r->ranges ), i );
+            func->rc = func->on_region( r->name, rr, func->data );    
+        }
+    }
+    return ( func->rc != 0 );
+}
+
+
+rc_t foreach_ref_region( BSTree * regions,
+    rc_t ( CC * on_region ) ( const char * name, const struct reference_range * range, void *data ), 
+    void *data )
+{
+    foreach_ref_region_func func;
+
+    func.on_region = on_region;
+    func.data = data;
+    func.rc = 0;
+    BSTreeDoUntil ( regions, false, foreach_ref_region_wrapper, &func );
+    return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+
+const struct reference_region * get_first_ref_node( const BSTree * regions )
+{
+    return ( const struct reference_region * ) BSTreeFirst ( regions );
+}
+
+
+const struct reference_region * get_next_ref_node( const struct reference_region * node )
+{
+    return ( const struct reference_region * ) BSTNodeNext( ( const BSTNode * ) node );
+}
+    
+
+const char * get_ref_node_name( const struct reference_region * node )
+{
+    return ( node->name );
+}
+
+
+uint32_t get_ref_node_range_count( const struct reference_region * node )
+{
+    return VectorLength( &( node->ranges ) );
+}
+
+
+const struct reference_range * get_ref_range( const struct reference_region * node, uint32_t idx )
+{
+    const struct reference_range * res = NULL;
+    if ( node != NULL )
+    {
+        uint32_t n = VectorLength( &( node->ranges ) );
+        if ( ( idx >=0 ) && ( idx < n ) )
+        {
+            res = ( const struct reference_range * ) VectorGet ( &( node->ranges ), idx );
+        }
+    }
+    return res;
+}
+
+
+uint64_t get_ref_range_start( const struct reference_range * range )
+{
+    uint64_t res = 0;
+    if ( range != NULL )
+        res = range->start;
+    return res;
+}
+
+
+uint64_t get_ref_range_end( const struct reference_range * range )
+{
+    uint64_t res = 0;
+    if ( range != NULL )
+        res = range->end;
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+struct skiplist_ref_node
+{
+    BSTNode node;
+    const char * name;
+    int32_t current_id;
+    const struct skip_range * current_skip_range;
+    Vector skip_ranges;     /* holds skip_range structs */
+} skiplist_ref_node;
+
+
+struct skiplist
+{
+    BSTree nodes;           /* a tree of skiplist_ref_node 's */
+    uint32_t node_count;
+    struct skiplist_ref_node * current;
+} skiplist;
+
+
+/* helper func to detect if the given reference_region has ranges to be skiped */
+static bool reference_region_has_skip_ranges( const struct reference_region * r )
+{
+    bool res = false;
+	if ( r != NULL )
+	{
+		uint32_t i, n = VectorLength( &r->ranges );
+		for ( i = 0; i < n && !res; ++i )
+		{
+			const struct reference_range * rr = VectorGet ( &( r->ranges ), i );
+			if ( rr != NULL )
+			{
+				if ( VectorLength( &rr->skip ) > 0 ) res = true;
+			}
+		}
+	}
+    return res;
+}
+
+
+/* helper to create a skiplist-node, walk the given the ref-region fo find and enter all skip positions */
+static struct skiplist_ref_node * make_skiplist_ref_node( const struct reference_region * r )
+{
+    struct skiplist_ref_node * res = calloc( 1, sizeof *res );
+    if ( res != NULL )
+    {
+        uint32_t i, n = VectorLength( &r->ranges );
+        res->name = string_dup_measure ( r->name, NULL );
+        VectorInit ( &res->skip_ranges, 0, 5 );
+        /* walk the ranges-Vector of the reference-region */
+        for ( i = 0; i < n; ++i )
+        {
+            const struct reference_range * rr = VectorGet ( &( r->ranges ), i );
+            /* walk the skip-Vector of the reference-range */
+            uint32_t j, n1 = VectorLength( &rr->skip );
+            for ( j = 0; j < n1; ++j )
+            {
+                const struct skip_range * sr = VectorGet ( &( rr->skip ), j );
+                if ( sr != NULL )
+                {
+                    struct skip_range * csr = make_skip_range( sr->start, sr->end );
+                    if ( csr != NULL )
+                        VectorAppend ( &( res->skip_ranges ), NULL, csr );
+                }
+            }
+        }
+        res->current_id = 0;
+        res->current_skip_range = VectorGet ( &( res->skip_ranges ), 0 );
+    }
+    return res;
+}
+
+
+/* helper call back for BSTreeInsert into skiplist->nodes */
+static int64_t CC srn_vs_srn_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const struct skiplist_ref_node * a = ( const struct skiplist_ref_node * )item;
+   const struct skiplist_ref_node * b = ( const struct skiplist_ref_node * )n;
+   return cmp_pchar( a->name, b->name );
+}
+
+
+/* call back for each reference-region to generate eventually a skiplist_ref_node */
+static void CC visit_region_node_for_skiplist( BSTNode *n, void *data )
+{
+    const struct reference_region * r = ( const struct reference_region * ) n;
+    struct skiplist * skl = ( struct skiplist * ) data;
+    if ( r != NULL && skl != NULL )
+    {
+        /* walk the reference-region, detect if we even have something to skip in here */
+        if ( reference_region_has_skip_ranges( r ) )
+        {
+            struct skiplist_ref_node * srn = make_skiplist_ref_node( r );
+            if ( srn != NULL )
+            {
+                BSTreeInsert ( &(skl->nodes), ( BSTNode * )srn, srn_vs_srn_wrapper );
+                skl->node_count++;
+            }
+        }
+    }
+}
+
+struct skiplist * skiplist_make( BSTree * regions )
+{
+    struct skiplist *res = calloc( 1, sizeof *res );
+    if ( res != NULL )
+    {
+        BSTreeInit( &(res->nodes) );
+        res->current = NULL;
+        res->node_count = 0;
+
+        /* walk the given regions-tree to generate the skip-list */
+        BSTreeForEach ( regions, false, visit_region_node_for_skiplist, res );
+        if ( res->node_count == 0 )
+        {
+            skiplist_release( res );
+            res = NULL;
+        }
+    }
+    return res;
+}
+
+
+static void CC release_skiplist_entry( BSTNode * n, void * data )
+{
+    struct skiplist_ref_node * node = ( struct skiplist_ref_node * )n;
+    if ( node->name != NULL ) free( ( void * ) node->name );
+    VectorWhack ( &node->skip_ranges, release_skip, NULL );     /* wrapper callback reused from above */
+    free( ( void * ) node );
+}
+
+
+void skiplist_release( struct skiplist * list )
+{
+    if ( list != NULL )
+    {
+        BSTreeWhack ( &(list->nodes), release_skiplist_entry, NULL );
+        free( ( void * ) list );
+    }
+}
+
+
+static int64_t CC pchar_vs_srn_cmp( const void * item, const BSTNode * n )
+{
+   const char * name = item;
+   const struct skiplist_ref_node * b = ( const struct skiplist_ref_node * )n;
+   return cmp_pchar( name, b->name );
+
+}
+
+
+void skiplist_enter_ref( struct skiplist * list, const char * name )
+{
+    if ( list != NULL )
+    {
+        if ( name == NULL )
+            list->current = NULL;
+        else
+        {
+            struct skiplist_ref_node * cur_node = ( struct skiplist_ref_node * )BSTreeFind ( &( list->nodes ), name, pchar_vs_srn_cmp );
+            list->current = cur_node;
+			if ( cur_node != NULL )
+			{
+				cur_node->current_id = 0;
+				cur_node->current_skip_range = VectorGet ( &( cur_node->skip_ranges ), 0 );
+			}
+        }
+    }
+}
+
+
+bool skiplist_is_skip_position( struct skiplist * list, uint64_t pos )
+{
+    if ( list != NULL )
+    {
+        struct skiplist_ref_node * cur_node = list->current;
+        if ( cur_node != NULL )
+        {
+            const struct skip_range * curr_skip_range = cur_node->current_skip_range;
+            if ( curr_skip_range != NULL )
+            {
+                if ( pos < curr_skip_range->start ) return false;
+                if ( pos <= curr_skip_range->end ) return true;
+                cur_node->current_id++;
+                cur_node->current_skip_range = VectorGet ( &( cur_node->skip_ranges ), cur_node->current_id );
+            }
+        }
+    }
+    return false;
+}
+
+
+static void CC skiplist_report_cb( BSTNode *n, void *data )
+{
+    const struct skiplist_ref_node * node = ( const struct skiplist_ref_node * )n;
+    uint32_t nr = VectorLength( &( node->skip_ranges ) );
+
+    KOutMsg( "\n-[%s]:\n", node->name );
+    if ( n == 0 )
+        KOutMsg( " no ranges!\n" );
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < nr; ++i )
+        {
+            const struct skip_range * sr = ( const struct skip_range * ) VectorGet ( &( node->skip_ranges ), i );
+            KOutMsg( "  %u ... %u\n", sr->start, sr->end );
+        }
+    }
+}
+
+
+void skiplist_report( const struct skiplist * list )
+{
+    if ( list != NULL )
+    {
+        KOutMsg( "\n\nstart skiplist-report:\n" );
+        BSTreeForEach ( &( list->nodes ), false, skiplist_report_cb, NULL );
+        KOutMsg( "\nend skiplist-report\n\n" );
+    }
+}
diff --git a/tools/sra-pileup/ref_regions.h b/tools/sra-pileup/ref_regions.h
new file mode 100644
index 0000000..178c3b2
--- /dev/null
+++ b/tools/sra-pileup/ref_regions.h
@@ -0,0 +1,71 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ref_regions_
+#define _h_ref_regions_
+
+#include <klib/container.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct reference_range;
+struct reference_region;
+struct skiplist;
+
+rc_t parse_and_add_region( BSTree * regions, const char * s );
+rc_t add_region( BSTree * regions, const char * name, const uint64_t start, const uint64_t end );
+void check_ref_regions( BSTree * regions, uint64_t merge_diff );
+void free_ref_regions( BSTree * regions );
+uint32_t count_ref_regions( BSTree * regions );
+rc_t foreach_ref_region( BSTree * regions,
+    rc_t ( CC * on_region ) ( const char * name, const struct reference_range * range, void *data ), 
+    void *data );
+
+
+const struct reference_region * get_first_ref_node( const BSTree * regions );
+const struct reference_region * get_next_ref_node( const struct reference_region * node );
+const char * get_ref_node_name( const struct reference_region * node );
+uint32_t get_ref_node_range_count( const struct reference_region * node );
+
+
+const struct reference_range * get_ref_range( const struct reference_region * node, uint32_t idx );
+uint64_t get_ref_range_start( const struct reference_range * range );
+uint64_t get_ref_range_end( const struct reference_range * range );
+
+
+struct skiplist * skiplist_make( BSTree * regions );
+void skiplist_release( struct skiplist * list );
+void skiplist_enter_ref( struct skiplist * list, const char * name );
+bool skiplist_is_skip_position( struct skiplist * list, uint64_t pos );
+void skiplist_report( const struct skiplist * list );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_ref_regions_ */
diff --git a/tools/sra-pileup/ref_walker.c b/tools/sra-pileup/ref_walker.c
new file mode 100644
index 0000000..0833854
--- /dev/null
+++ b/tools/sra-pileup/ref_walker.c
@@ -0,0 +1,1028 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ref_regions.h"
+#include "ref_walker.h"
+
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/vector.h>
+#include <klib/log.h>
+#include <klib/out.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <kdb/manager.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+
+#include <align/manager.h>
+#include <align/reference.h>
+#include <align/iterator.h>
+
+#include <sra/sraschema.h>
+
+#include <stdlib.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <string.h>
+
+
+
+/* ================================================================================================ */
+
+
+/***************************************
+    N (0x4E)  n (0x6E)  <--> 0x0
+    A (0x41)  a (0x61)  <--> 0x1
+    C (0x43)  c (0x63)  <--> 0x2
+    M (0x4D)  m (0x6D)  <--> 0x3
+    G (0x47)  g (0x67)  <--> 0x4
+    R (0x52)  r (0x72)  <--> 0x5
+    S (0x53)  s (0x73)  <--> 0x6
+    V (0x56)  v (0x76)  <--> 0x7
+    T (0x54)  t (0x74)  <--> 0x8
+    W (0x57)  w (0x77)  <--> 0x9
+    Y (0x59)  y (0x79)  <--> 0xA
+    H (0x48)  h (0x68)  <--> 0xB
+    K (0x4B)  k (0x6B)  <--> 0xC
+    D (0x44)  d (0x64)  <--> 0xD
+    B (0x42)  b (0x62)  <--> 0xE
+    N (0x4E)  n (0x6E)  <--> 0xF
+***************************************/
+
+
+static char _4na_2_ascii_tab[] =
+{
+/*  0x0  0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+    'N', 'A', 'C', 'M', 'G', 'R', 'S', 'V', 'T', 'W', 'Y', 'H', 'K', 'D', 'B', 'N',
+    'n', 'a', 'c', 'm', 'g', 'r', 's', 'v', 't', 'w', 'y', 'h', 'k', 'd', 'b', 'n'
+};
+
+
+static char _4na_to_ascii( INSDC_4na_bin c, bool reverse )
+{
+    return _4na_2_ascii_tab[ ( c & 0x0F ) | ( reverse ? 0x10 : 0 ) ];
+}
+
+
+/* ================================================================================================ */
+
+
+struct ref_walker
+{
+    /* objects that stay alive during the livetime of the ref-walker */
+    KDirectory * dir;
+    const VDBManager * vmgr;
+    VSchema * vschema;
+    const AlignMgr * amgr;
+    VFSManager * vfs_mgr;
+    PlacementRecordExtendFuncs cb_block;
+    struct skiplist * skiplist;
+    
+    /* options for the Reference-Iterator */
+    int32_t min_mapq;
+    uint32_t interest;
+    uint64_t merge_diff;
+    bool prepared;
+    char * spot_group;
+
+    /* manages the sources and regions requested */
+    VNamelist * sources;
+    BSTree regions;
+
+    /* enter/exit reference */
+    rc_t ( CC * on_enter_ref ) ( ref_walker_data * rwd );
+    rc_t ( CC * on_exit_ref ) ( ref_walker_data * rwd );
+
+    /* enter/exit reference-window */
+    rc_t ( CC * on_enter_ref_window ) ( ref_walker_data * rwd );
+    rc_t ( CC * on_exit_ref_window ) ( ref_walker_data * rwd );
+
+    /* enter/exit reference-pos */
+    rc_t ( CC * on_enter_ref_pos ) ( ref_walker_data * rwd );
+    rc_t ( CC * on_exit_ref_pos ) ( ref_walker_data * rwd );
+
+    /* enter/exit spot-group */
+    rc_t ( CC * on_enter_spot_group ) ( ref_walker_data * rwd );
+    rc_t ( CC * on_exit_spot_group ) ( ref_walker_data * rwd );
+
+    /* alignment */
+    rc_t ( CC * on_alignment ) ( ref_walker_data * rwd );
+
+    /* callbacks for different events */
+} ref_walker;
+
+
+static void ref_walker_release( struct ref_walker * self )
+{
+    KDirectoryRelease( self->dir );
+    VDBManagerRelease( self->vmgr );
+    VSchemaRelease( self->vschema );
+    AlignMgrRelease ( self->amgr );
+    VFSManagerRelease ( self->vfs_mgr );
+    VNamelistRelease ( self->sources );
+    free_ref_regions( &self->regions );
+    free( ( void * )self->spot_group );
+    if ( self->skiplist != NULL ) skiplist_release( self->skiplist );
+}
+
+
+/* ================================================================================================ */
+/* data/callbacks used by Reference-iterator */
+
+
+typedef struct walker_col_ids
+{
+    uint32_t idx_quality;
+    uint32_t idx_ref_orientation;
+    uint32_t idx_read_filter;
+    uint32_t idx_template_len;
+} walker_col_ids;
+
+
+typedef struct walker_rec
+{
+    bool reverse;   /* orientation towards reference ( false...in ref-orientation / true...reverse) */
+    int32_t tlen;   /* template-len, for statistical analysis */
+    uint8_t * quality;  /* ptr to quality... ( for sam-output ) */
+} walker_rec;
+
+
+static rc_t read_base_and_len( struct VCursor const *curs,
+                               uint32_t column_idx,
+                               int64_t row_id,
+                               const void ** base,
+                               uint32_t * len )
+{
+    uint32_t elem_bits, boff, len_intern;
+    const void * ptr;
+    rc_t rc = VCursorCellDataDirect ( curs, row_id, column_idx, &elem_bits, &ptr, &boff, &len_intern );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+    }
+    else
+    {
+        if ( len != NULL ) *len = len_intern;
+        if ( base != NULL ) *base = ptr;
+    }
+    return rc;
+}
+
+
+static rc_t CC populate_data( void *obj, const PlacementRecord *placement,
+        struct VCursor const *curs, INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+        void *data, void * placement_ctx )
+{
+    walker_rec * rec = obj;
+    struct ref_walker * walker = data;
+    walker_col_ids * col_ids = placement_ctx;
+    rc_t rc = 0;
+
+    rec->quality = NULL;
+    if ( !( walker->interest & RW_INTEREST_DUPS ) )
+    {
+        const uint8_t * read_filter;
+        uint32_t read_filter_len;
+        rc = read_base_and_len( curs, col_ids->idx_read_filter, placement->id,
+                                (const void **)&read_filter, &read_filter_len );
+        if ( rc == 0 )
+        {
+            if ( ( *read_filter == SRA_READ_FILTER_REJECT )||
+                 ( *read_filter == SRA_READ_FILTER_CRITERIA ) )
+            {
+                rc = RC( rcAlign, rcType, rcAccessing, rcId, rcIgnored );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        const bool * orientation;
+        rc = read_base_and_len( curs, col_ids->idx_ref_orientation, placement->id,
+                                (const void **)&orientation, NULL );
+        if ( rc == 0 )
+            rec->reverse = *orientation;
+    }
+
+    if ( rc == 0 && ( walker->interest & RW_INTEREST_QUAL ) )
+    {
+        const uint8_t * quality;
+        uint32_t quality_len;
+
+        rc = read_base_and_len( curs, col_ids->idx_quality, placement->id,
+                                (const void **)&quality, &quality_len );
+        if ( rc == 0 )
+        {
+            rec->quality = ( uint8_t * )rec;
+            rec->quality += sizeof ( * rec );
+            memmove( rec->quality, quality, quality_len );
+        }
+    }
+
+    if ( rc == 0 && ( walker->interest & RW_INTEREST_TLEN ) )
+    {
+        const int32_t * tlen;
+        uint32_t tlen_len;
+
+        rc = read_base_and_len( curs, col_ids->idx_template_len, placement->id,
+                                (const void **)&tlen, &tlen_len );
+        if ( rc == 0 && tlen_len > 0 )
+            rec->tlen = *tlen;
+        else
+            rec->tlen = 0;
+    }
+    else
+        rec->tlen = 0;
+
+    return rc;
+}
+
+
+static rc_t CC alloc_size( struct VCursor const *curs, int64_t row_id, size_t * size,
+                           void *data, void * placement_ctx )
+{
+    rc_t rc = 0;
+    walker_rec * rec;
+    struct ref_walker * walker = data;
+    walker_col_ids * col_ids = placement_ctx;
+    *size = ( sizeof *rec );
+
+    if ( walker->interest & RW_INTEREST_QUAL )
+    {
+        uint32_t q_len;
+        rc = read_base_and_len( curs, col_ids->idx_quality, row_id, NULL, &q_len );
+        if ( rc == 0 )
+            *size += q_len;
+    }
+    return rc;
+}
+
+
+/* ================================================================================================ */
+
+
+static rc_t ref_walker_init( struct ref_walker * self )
+{
+    rc_t rc = KDirectoryNativeDir( &self->dir );
+    if ( rc == 0 )
+        rc = VDBManagerMakeRead ( &self->vmgr, self->dir );
+    if ( rc == 0 )
+        rc = VDBManagerMakeSRASchema( self->vmgr, &self->vschema );
+    if ( rc == 0 )
+        rc = AlignMgrMakeRead ( &self->amgr );
+    if ( rc == 0 )
+        rc =  VFSManagerMake ( &self->vfs_mgr );        
+    if ( rc == 0 )
+        rc = VNamelistMake ( &self->sources, 10 );
+
+    self->cb_block.data = self;
+    self->cb_block.destroy = NULL;
+    self->cb_block.populate = populate_data;
+    self->cb_block.alloc_size = alloc_size;
+    self->cb_block.fixed_size = 0;
+
+    BSTreeInit( &self->regions );
+    self->interest = RW_INTEREST_PRIM;
+    self->skiplist = 0;
+    self->merge_diff = 0;
+    
+    if ( rc != 0 )
+        ref_walker_release( self );
+    return rc;
+}
+
+
+/* ================================================================================================ */
+
+
+rc_t ref_walker_create( struct ref_walker ** self )
+{
+    rc_t rc;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        struct ref_walker * o = calloc( 1, sizeof **self );
+        *self = NULL;
+        if ( o == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            rc = ref_walker_init( o );
+            if ( rc == 0 )
+            {
+                *self = o;
+            }
+            else
+                free( ( void * )o );
+        }
+    }
+    return rc;
+}
+
+
+/* ================================================================================================ */
+
+
+rc_t ref_walker_set_min_mapq( struct ref_walker * self, int32_t min_mapq )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    self->min_mapq = min_mapq;
+    return 0;
+}
+
+
+rc_t ref_walker_set_spot_group( struct ref_walker * self, const char * spot_group )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    self->spot_group = string_dup ( spot_group, string_size( spot_group ) );
+    return 0;
+}
+    
+
+rc_t ref_walker_set_merge_diff( struct ref_walker * self, uint64_t merge_diff )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    self->merge_diff = merge_diff;
+    return 0;
+}
+
+rc_t ref_walker_set_interest( struct ref_walker * self, uint32_t interest )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    self->interest = interest;
+    return 0;
+}
+
+
+rc_t ref_walker_get_interest( struct ref_walker * self, uint32_t * interest )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    if ( interest == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcParam, rcNull );
+    *interest = self->interest;
+    return 0;
+}
+
+/* ================================================================================================ */
+
+
+rc_t ref_walker_set_callbacks( struct ref_walker * self, ref_walker_callbacks * callbacks )
+{
+    if ( self == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+    if ( callbacks == NULL )
+        return RC( rcApp, rcNoTarg, rcAccessing, rcParam, rcNull );
+
+    self->on_enter_ref = callbacks->on_enter_ref;
+    self->on_exit_ref = callbacks->on_exit_ref;
+    self->on_enter_ref_window = callbacks->on_enter_ref_window;
+    self->on_exit_ref_window = callbacks->on_exit_ref_window;
+    self->on_enter_ref_pos = callbacks->on_enter_ref_pos;
+    self->on_exit_ref_pos = callbacks->on_exit_ref_pos;
+    self->on_enter_spot_group = callbacks->on_enter_spot_group;
+    self->on_exit_spot_group = callbacks->on_exit_spot_group;
+    self->on_alignment = callbacks->on_alignment;
+
+    return 0;
+}
+
+
+/* ================================================================================================ */
+
+
+rc_t ref_walker_add_source( struct ref_walker * self, const char * src )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    else
+        rc = VNamelistAppend ( self->sources, src );
+    return rc;
+}
+
+
+rc_t ref_walker_parse_and_add_range( struct ref_walker * self, const char * range )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    else
+        rc = parse_and_add_region( &self->regions, range );
+    return rc;
+}
+
+
+rc_t ref_walker_add_range( struct ref_walker * self, const char * name, const uint64_t start, const uint64_t end )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    else
+        rc = add_region( &self->regions, name, start, end );
+    return rc;
+}
+
+
+static rc_t ref_walker_prepare_1_src( struct ref_walker * self, const char * name )
+{
+    VPath * path = NULL;
+    const VPath * local_cache = NULL;
+    const KFile * remote_file = NULL;
+    rc_t rc = VFSManagerResolveSpec ( self->vfs_mgr, name, &path, &remote_file, &local_cache, true );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot resolve '$(n)' via VFSManager", "n=%s", name ) );
+    }
+    else
+    {
+        char buffer[ 4096 ];
+        size_t num_read;
+        rc = VPathReadPath ( path, buffer, sizeof buffer, &num_read );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogErr, ( klogErr, rc, "cannot read path from vpath for '$(n)'", "n=%s", name ) );
+        }
+        else
+        {
+            if ( rc == 0 )
+            {
+                int path_type = ( VDBManagerPathType ( self->vmgr, "%s", buffer ) & ~ kptAlias );
+                if ( path_type == kptDatabase )
+                {
+                    const ReferenceList * reflist;
+                    uint32_t options = ( ereferencelist_usePrimaryIds | 
+                                         ereferencelist_useSecondaryIds |
+                                         ereferencelist_useEvidenceIds );
+                    rc = ReferenceList_MakePath( &reflist, self->vmgr, name, options, 0, NULL, 0 );
+                    if ( rc != 0 )
+                    {
+                        PLOGERR( klogErr, ( klogErr, rc, "cannot create ReferenceList for '$(n)'", "n=%s", name ) );
+                    }
+                    else
+                    {
+                        uint32_t count;
+                        rc = ReferenceList_Count( reflist, &count );
+                        if ( rc != 0 )
+                        {
+                            PLOGERR( klogErr, ( klogErr, rc, "ReferenceList_Count() for '$(n)' failed", "n=%s", name ) );
+                        }
+                        else
+                        {
+                            uint32_t idx;
+                            for ( idx = 0; idx < count && rc == 0; ++idx )
+                            {
+                                const ReferenceObj * refobj;
+                                rc = ReferenceList_Get( reflist, &refobj, idx );
+                                if ( rc != 0 )
+                                {
+                                    LOGERR( klogInt, rc, "ReferenceList_Get() failed" );
+                                }
+                                else
+                                {
+                                    const char * seqid;
+                                    rc = ReferenceObj_SeqId( refobj, &seqid );
+                                    if ( rc == 0 )
+                                    {
+                                        INSDC_coord_len seqlen;
+                                        rc = ReferenceObj_SeqLength( refobj, &seqlen );
+                                        if ( rc == 0 )
+                                        {
+                                            rc = add_region( &self->regions, seqid, 0, seqlen - 1 );
+                                        }
+                                    }
+                                    ReferenceObj_Release( refobj );
+                                }
+                            }
+                        }
+                        ReferenceList_Release( reflist );
+                    }
+                }
+            }
+        }
+        KFileRelease( remote_file );
+        VPathRelease ( local_cache );
+        VPathRelease ( path );
+    }
+    return rc;
+}
+
+
+static rc_t ref_walker_prepare( struct ref_walker * self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        uint32_t s_count = 0;
+        rc = VNameListCount ( self->sources, &s_count );
+        if ( rc == 0 && s_count > 0 )
+        {
+            uint32_t r_count = count_ref_regions( &self->regions );
+            if ( r_count == 0 )
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < s_count && rc == 0; ++idx )
+                {
+                    const char * name = NULL;
+                    rc = VNameListGet ( self->sources, idx, &name );
+                    if ( rc == 0 && name != NULL )
+                        rc = ref_walker_prepare_1_src( self, name );
+                }
+            }
+        }
+        check_ref_regions( &self->regions, self->merge_diff );
+        if ( self->merge_diff > 0 )
+            self->skiplist = skiplist_make( &self->regions );
+        self->prepared = ( rc == 0 );
+    }
+    return rc;
+}
+
+
+static uint32_t ref_walker_make_reflist_options( struct ref_walker * self )
+{
+    uint32_t res = ereferencelist_4na;
+
+    if ( self->interest & RW_INTEREST_PRIM )
+        res |= ereferencelist_usePrimaryIds;
+
+    if ( self->interest & RW_INTEREST_SEC )
+        res |= ereferencelist_useSecondaryIds;
+
+    if ( self->interest & RW_INTEREST_EV )
+        res |= ereferencelist_useEvidenceIds;
+
+    return res;
+}
+
+
+static rc_t make_cursor_ids( Vector * cursor_id_vector, walker_col_ids ** cursor_ids )
+{
+    rc_t rc;
+    walker_col_ids * ids = malloc( sizeof * ids );
+    if ( ids == NULL )
+        rc = RC ( rcApp, rcNoTarg, rcOpening, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorAppend ( cursor_id_vector, NULL, ids );
+        if ( rc != 0 )
+            free( ids );
+        else
+            *cursor_ids = ids;
+    }
+    return rc;
+}
+
+#define COL_QUALITY "QUALITY"
+#define COL_REF_ORIENTATION "REF_ORIENTATION"
+#define COL_READ_FILTER "READ_FILTER"
+#define COL_TEMPLATE_LEN "TEMPLATE_LEN"
+
+static rc_t add_required_columns( struct ref_walker * self, const VTable *tbl, const VCursor ** cursor,
+                                  walker_col_ids * cursor_ids )
+{
+    rc_t rc = VTableCreateCursorRead ( tbl, cursor );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VTableCreateCursorRead() failed" );
+    }
+
+    if ( rc == 0 && ( self->interest & RW_INTEREST_QUAL ) )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_quality, COL_QUALITY );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(QUALITY) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_ref_orientation, COL_REF_ORIENTATION );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(REF_ORIENTATION) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_read_filter, COL_READ_FILTER );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(READ_FILTER) failed" );
+        }
+    }
+
+    if ( rc == 0 && ( self->interest & RW_INTEREST_TLEN ) )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_template_len, COL_TEMPLATE_LEN );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(TEMPLATE_LEN) failed" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t ref_walker_add_iterator( struct ref_walker * self, const char * ref_name,
+                        uint64_t start, uint64_t end, const char * src_name, Vector * cur_id_vector,
+                        const VDatabase *db, const ReferenceObj * ref_obj, ReferenceIterator * ref_iter,
+                        const char * table_name, align_id_src id_selector )
+{
+    walker_col_ids * cursor_ids;
+    rc_t rc = make_cursor_ids( cur_id_vector, &cursor_ids );
+    if ( rc == 0 )
+    {
+        const VTable *tbl;
+        rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "%s", table_name );
+        if ( rc == 0 )
+        {
+            const VCursor *cursor;
+            rc = add_required_columns( self, tbl, &cursor, cursor_ids );
+            if ( rc == 0 )
+            {
+                rc = ReferenceIteratorAddPlacements ( ref_iter,             /* the outer ref-iter */
+                                                      ref_obj,              /* the ref-obj for this chromosome */
+                                                      start - 1,            /* start ( zero-based ) */
+                                                      ( end - start ) + 1,  /* length */
+                                                      NULL,                 /* ref-cursor */
+                                                      cursor,               /* align-cursor */
+                                                      id_selector,          /* which id's */
+                                                      self->spot_group,     /* what read-group */
+                                                      cursor_ids            /* placement-context */
+                                                     );
+                VCursorRelease( cursor );
+            }
+            VTableRelease ( tbl );
+        }
+    }
+    return rc;
+}
+
+
+#define TBL_PRIM "PRIMARY_ALIGNMENT"
+#define TBL_SEC  "SECONDARY_ALIGNMENT"
+#define TBL_EV   "EVIDENCE_ALIGNMENT"
+
+rc_t CC Quitting( void );
+
+static rc_t ref_walker_walk_alignment( struct ref_walker * self,
+                                       ReferenceIterator * ref_iter,
+                                       const PlacementRecord * rec,
+                                       ref_walker_data * rwd )
+{
+    rc_t rc;
+
+    /* cast the generic record comming from the iterator into the tool-specific one */
+    walker_rec * xrec = PlacementRecordCast ( rec, placementRecordExtension1 );
+
+    /* get all the state of the ref_iter out */
+    rwd->state = ReferenceIteratorState ( ref_iter, &rwd->seq_pos );
+    rwd->valid = ( ( rwd->state & align_iter_invalid ) == 0 );
+
+    rwd->first = ( ( rwd->state & align_iter_first ) == align_iter_first );
+    rwd->last  = ( ( rwd->state & align_iter_last ) == align_iter_last );
+
+    rwd->match = ( ( rwd->state & align_iter_match ) == align_iter_match );
+    rwd->skip  = ( ( rwd->state & align_iter_skip ) == align_iter_skip );
+
+    rwd->reverse = xrec->reverse;
+
+    if ( self->interest & RW_INTEREST_BASE )
+    {
+        rwd->bin_alignment_base = ( rwd->state & 0x0F );
+        if ( !rwd->match )
+            rwd->ascii_alignment_base = _4na_to_ascii( rwd->state, rwd->reverse );
+        else
+            rwd->ascii_alignment_base = rwd->ascii_ref_base;
+    }
+
+    if ( self->interest & RW_INTEREST_QUAL )
+    {
+        if ( rwd->skip )
+            rwd->quality = ( xrec->quality[ rwd->seq_pos + 1 ] + 33 );
+        else
+            rwd->quality = ( xrec->quality[ rwd->seq_pos ] + 33 );
+    }
+
+    rwd->mapq = rec->mapq;
+
+    if ( self->interest & RW_INTEREST_INDEL )
+    {
+        rwd->ins   = ( ( rwd->state & align_iter_insert ) == align_iter_insert );
+        rwd->del   = ( ( rwd->state & align_iter_delete ) == align_iter_delete );
+
+        if ( rwd->ins )
+            rwd->ins_bases_count = ReferenceIteratorBasesInserted ( ref_iter, &rwd->ins_bases );
+        if ( rwd->del )
+            rwd->del_bases_count = ReferenceIteratorBasesDeleted ( ref_iter, &rwd->del_ref_pos, &rwd->del_bases );
+    }
+
+    if ( self->interest & RW_INTEREST_DEBUG )
+    {
+        rwd->alignment_id = rec->id;
+        rwd->alignment_start_pos = rec->pos;
+        rwd->alignment_len = rec->len;
+    }
+
+    rc = self->on_alignment( rwd );
+
+    if ( self->interest & RW_INTEREST_INDEL && rwd->del && ( rwd->del_bases_count > 0 ) )
+        free( ( void * )rwd->del_bases );
+
+    return rc;
+}
+
+
+/* free all cursor-ids-blocks created in parallel with the alignment-cursor */
+static void CC cur_id_vector_entry_whack( void *item, void *data )
+{
+    walker_col_ids * ids = item;
+    free( ids );
+}
+
+static rc_t ref_walker_walk_ref_range( struct ref_walker * self, ref_walker_data * rwd )
+{
+    ReferenceIterator * ref_iter;
+    rc_t rc = AlignMgrMakeReferenceIterator ( self->amgr, &ref_iter, &self->cb_block, self->min_mapq ); /* align/iterator.h */
+    if ( rc == 0 )
+    {
+        /* construct the reference iterator */
+
+        uint32_t idx, count;
+        uint32_t reflist_options = ref_walker_make_reflist_options( self ); /* above */
+        Vector cur_id_vector;
+        VectorInit ( &cur_id_vector, 0, 12 );
+
+        rc = VNameListCount ( self->sources, &count );
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char * src_name = NULL;
+            rc = VNameListGet ( self->sources, idx, &src_name );
+            if ( rc == 0 && src_name != NULL )
+            {
+                const VDatabase *db;
+                rc = VDBManagerOpenDBRead ( self->vmgr, &db, self->vschema, "%s", src_name );
+                if ( rc == 0 )
+                {
+                    const ReferenceList * ref_list;
+                    rc = ReferenceList_MakeDatabase( &ref_list, db, reflist_options, 0, NULL, 0 );
+                    if ( rc == 0 )
+                    {
+                        const ReferenceObj * ref_obj;
+                        rc = ReferenceList_Find( ref_list, &ref_obj, rwd->ref_name, string_size( rwd->ref_name ) );
+                        if ( rc == 0 )
+                        {
+                            INSDC_coord_len len;
+                            rc = ReferenceObj_SeqLength( ref_obj, &len );
+                            if ( rc == 0 )
+                            {
+                                if ( rwd->ref_start == 0 )
+                                    rwd->ref_start = 1;
+                                if ( ( rwd->ref_end == 0 )||( rwd->ref_end > len + 1 ) )
+                                    rwd->ref_end = ( len - rwd->ref_start ) + 1;
+
+                                if ( self->interest & RW_INTEREST_PRIM )
+                                    rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, 
+                                            &cur_id_vector, db, ref_obj, ref_iter, TBL_PRIM, primary_align_ids );
+
+                                if ( rc == 0 && ( self->interest & RW_INTEREST_SEC ) )
+                                    rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, 
+                                            &cur_id_vector, db, ref_obj, ref_iter, TBL_SEC, secondary_align_ids );
+
+                                if ( rc == 0 && ( self->interest & RW_INTEREST_EV ) )
+                                    rc = ref_walker_add_iterator( self, rwd->ref_name, rwd->ref_start, rwd->ref_end, src_name, 
+                                            &cur_id_vector, db, ref_obj, ref_iter, TBL_EV, evidence_align_ids );
+
+                            }
+                            ReferenceObj_Release( ref_obj );
+                        }
+                        ReferenceList_Release( ref_list );
+                    }
+                    VDatabaseRelease( db );
+                }
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            /* walk the reference iterator */
+            
+            /* because in this strategy, each ref-iter contains only 1 ref-obj, no need for a loop */
+            struct ReferenceObj const * ref_obj;
+            rc = ReferenceIteratorNextReference( ref_iter, NULL, NULL, &ref_obj );
+            if ( rc == 0 && ref_obj != NULL )
+            {
+
+                if ( self->interest & RW_INTEREST_SEQNAME )
+                    rc = ReferenceObj_Name( ref_obj, &rwd->ref_name );
+                else
+                    rc = ReferenceObj_SeqId( ref_obj, &rwd->ref_name );
+
+                if ( rc == 0 )
+                {
+                    INSDC_coord_zero first_pos;
+                    INSDC_coord_len len;
+                    rc_t rc_w = 0, rc_p;
+                    while ( rc == 0 && rc_w == 0 )
+                    {
+                        rc_w = ReferenceIteratorNextWindow ( ref_iter, &first_pos, &len );
+                        if ( rc_w == 0 )
+                        {
+                            rc_p = 0;
+                            while( rc == 0 && rc_p == 0 )
+                            {
+                                rc_p = ReferenceIteratorNextPos ( ref_iter, ( self->interest & RW_INTEREST_SKIP ) );
+                                if ( rc_p == 0 )
+                                {
+                                    rc = ReferenceIteratorPosition ( ref_iter, &rwd->pos, &rwd->depth, &rwd->bin_ref_base );
+                                    if ( rwd->depth > 0 && rc == 0 )
+                                    {
+                                        rc_t rc_sg = 0;
+                                        bool skip = false;
+
+                                        if ( self->skiplist != NULL )
+                                            skip = skiplist_is_skip_position( self->skiplist, rwd->pos + 1 );
+
+                                        if ( !skip )
+                                        {
+                                            rwd->ascii_ref_base = _4na_to_ascii( rwd->bin_ref_base, false );
+                                            if ( self->on_enter_ref_pos != NULL )
+                                                rc = self->on_enter_ref_pos( rwd );
+
+                                            while ( rc_sg == 0 && rc == 0 )
+                                            {
+                                                rc_sg = ReferenceIteratorNextSpotGroup ( ref_iter, &rwd->spot_group, &rwd->spot_group_len );
+                                                if ( rc_sg == 0 )
+                                                {
+                                                    rc_t rc_pr = 0;
+                                                    if ( self->on_enter_spot_group != NULL )
+                                                        rc = self->on_enter_spot_group( rwd );
+
+                                                    while ( rc == 0 && rc_pr == 0 )
+                                                    {
+                                                        const PlacementRecord * rec;
+                                                        rc_pr = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+                                                        if ( rc_pr == 0 && self->on_alignment != NULL )
+                                                            rc = ref_walker_walk_alignment( self, ref_iter, rec, rwd );
+                                                    }
+
+                                                    if ( self->on_exit_spot_group != NULL )
+                                                        rc = self->on_exit_spot_group( rwd );
+                                                }
+                                            }
+                                            if ( self->on_exit_ref_pos != NULL )
+                                                rc = self->on_exit_ref_pos( rwd );
+                                        }
+                                    }
+                                    rc = Quitting();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        ReferenceIteratorRelease ( ref_iter );
+
+        /* free cur_id_vector */
+        VectorWhack ( &cur_id_vector, cur_id_vector_entry_whack, NULL );
+    }
+    return rc;
+}
+
+
+static rc_t ref_walker_walk_ref_region( struct ref_walker * self, 
+                        const struct reference_region * region, ref_walker_data * rwd )
+{
+    rc_t rc = 0;
+    uint32_t idx, count = get_ref_node_range_count( region );
+    rwd->ref_name = get_ref_node_name( region );
+    
+    rwd->ref_start = 0;
+    rwd->ref_end = 0;
+    rwd->pos = 0;
+    rwd->depth = 0;
+    rwd->bin_ref_base = 0;
+    rwd->ascii_ref_base = 0;
+    rwd->spot_group = NULL;
+    rwd->spot_group_len = 0;
+    rwd->state = 0;
+    rwd->reverse = 0;
+    
+    if ( self->on_enter_ref != NULL )
+        rc = self->on_enter_ref( rwd );
+
+    if ( rc == 0 )
+    {
+        if ( self->skiplist != NULL )
+            skiplist_enter_ref( self->skiplist, rwd->ref_name );
+
+        for ( idx = 0; idx < count; ++ idx )
+        {
+            const struct reference_range * range = get_ref_range( region, idx );
+            if ( range != NULL )
+            {
+                rwd->ref_start = get_ref_range_start( range );
+                rwd->ref_end = get_ref_range_end( range );
+                if ( self->on_enter_ref_window != NULL )
+                    rc = self->on_enter_ref_window( rwd );
+                if ( rc == 0 )
+                {
+                    rc = ref_walker_walk_ref_range( self, rwd );
+                    if ( rc == 0 && self->on_exit_ref_window != NULL )
+                        rc = self->on_exit_ref_window( rwd );
+                }
+                rwd->ref_start = 0;
+                rwd->ref_end = 0;
+            }
+        }
+        
+        if ( self->on_exit_ref != NULL )
+            rc = self->on_exit_ref( rwd );
+    }
+    rwd->ref_name = NULL;
+
+    return rc;
+}
+
+
+rc_t ref_walker_walk( struct ref_walker * self, void * data )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( !self->prepared )
+            rc = ref_walker_prepare( self );
+
+        if ( rc == 0 && self->prepared )
+        {
+            const struct reference_region * region = get_first_ref_node( &self->regions );
+            while ( region != NULL && rc == 0 )
+            {
+                ref_walker_data rwd;    /* this record will be passed to all the enter/exit callback's */
+                rwd.data = data;
+
+                rc = ref_walker_walk_ref_region( self, region, &rwd );
+                if ( rc == 0 )
+                    region = get_next_ref_node( region );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t ref_walker_destroy( struct ref_walker * self )
+{
+    rc_t rc = 0;
+    if ( self != NULL )
+    {
+        ref_walker_release( self );
+        free( ( void * ) self );
+    }
+    return rc;
+}
+
diff --git a/tools/sra-pileup/ref_walker.h b/tools/sra-pileup/ref_walker.h
new file mode 100644
index 0000000..db109a9
--- /dev/null
+++ b/tools/sra-pileup/ref_walker.h
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ref_walker_
+#define _h_ref_walker_
+
+#include <klib/container.h>
+#include <insdc/sra.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ref_walker;
+
+
+/* create the ref-walker ( not ref-counted ) */
+rc_t ref_walker_create( struct ref_walker ** self );
+
+#define RW_INTEREST_INDEL   0x0001
+#define RW_INTEREST_DEBUG   0x0002
+#define RW_INTEREST_BASE    0x0004
+#define RW_INTEREST_QUAL    0x0008
+#define RW_INTEREST_SKIP    0x0010
+#define RW_INTEREST_DUPS    0x0020
+#define RW_INTEREST_TLEN    0x0040
+#define RW_INTEREST_SEQNAME 0x0080
+#define RW_INTEREST_PRIM    0x0100
+#define RW_INTEREST_SEC     0x0200
+#define RW_INTEREST_EV      0x0400
+
+typedef struct ref_walker_data
+{
+    /* for the reference - level */
+    const char * ref_name;
+    uint64_t ref_start;
+    uint64_t ref_end;
+
+    /* for the position - level */
+    INSDC_coord_zero pos;
+    uint32_t depth;
+    INSDC_4na_bin bin_ref_base;
+    char ascii_ref_base;
+
+    /* for the spot-group - level */
+    const char * spot_group;
+    size_t spot_group_len;
+
+    /* for the alignment - level */
+    int32_t state, mapq;
+    INSDC_4na_bin bin_alignment_base;
+    char ascii_alignment_base;
+    char quality;
+    INSDC_coord_zero seq_pos;
+    bool ins, del, reverse, first, last, skip, match, valid;
+
+    /* indels for alignment */
+    const INSDC_4na_bin * ins_bases;
+    uint32_t ins_bases_count;
+
+    INSDC_coord_zero del_ref_pos;
+    const INSDC_4na_bin * del_bases;
+    uint32_t del_bases_count;
+
+    /* for debugging purpose */
+    uint64_t alignment_id;
+    uint32_t alignment_start_pos;
+    uint32_t alignment_len;
+
+    void * data;
+} ref_walker_data;
+
+
+typedef rc_t ( CC * ref_walker_callback )( ref_walker_data * rwd );
+
+
+typedef struct ref_walker_callbacks
+{
+    ref_walker_callback on_enter_ref;
+    ref_walker_callback on_exit_ref;
+
+    ref_walker_callback on_enter_ref_window;
+    ref_walker_callback on_exit_ref_window;
+
+    ref_walker_callback on_enter_ref_pos;
+    ref_walker_callback on_exit_ref_pos;
+
+    ref_walker_callback on_enter_spot_group;
+    ref_walker_callback on_exit_spot_group;
+
+    ref_walker_callback on_alignment;
+} ref_walker_callbacks;
+
+
+/* set boolean / numeric parameters */
+rc_t ref_walker_set_min_mapq( struct ref_walker * self, int32_t min_mapq );
+rc_t ref_walker_set_spot_group( struct ref_walker * self, const char * spot_group );
+rc_t ref_walker_set_merge_diff( struct ref_walker * self, uint64_t merge_diff );
+rc_t ref_walker_set_interest( struct ref_walker * self, uint32_t interest );
+rc_t ref_walker_get_interest( struct ref_walker * self, uint32_t * interest );
+
+/* set callbacks */
+rc_t ref_walker_set_callbacks( struct ref_walker * self, ref_walker_callbacks * callbacks );
+
+/* add_sources and ranges */
+rc_t ref_walker_add_source( struct ref_walker * self, const char * src );
+
+rc_t ref_walker_parse_and_add_range( struct ref_walker * self, const char * range );
+
+rc_t ref_walker_add_range( struct ref_walker * self, const char * name, const uint64_t start, const uint64_t end );
+
+
+/* walk the sources/ranges by calling the supplied call-backs, passing data to the callbacks */
+rc_t ref_walker_walk( struct ref_walker * self, void * data );
+
+
+/* destroy the ref-walker */
+rc_t ref_walker_destroy( struct ref_walker * self );
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_ref_walker_ */
diff --git a/tools/sra-pileup/ref_walker_0.c b/tools/sra-pileup/ref_walker_0.c
new file mode 100644
index 0000000..a620ec0
--- /dev/null
+++ b/tools/sra-pileup/ref_walker_0.c
@@ -0,0 +1,231 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ref_walker_0.h"
+
+rc_t CC Quitting( void );
+
+static rc_t walk_placements( walk_data * data, walk_funcs * funcs )
+{
+    rc_t rc;
+    do
+    {
+        rc = ReferenceIteratorNextPlacement ( data->ref_iter, &data->rec );
+        if ( GetRCState( rc ) != rcDone )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextPlacement() failed" );
+            }
+            else
+            {
+                data->state = ReferenceIteratorState ( data->ref_iter, &data->seq_pos );
+                data->xrec = ( tool_rec * ) PlacementRecordCast ( data->rec, placementRecordExtension1 );
+                if ( funcs->on_placement != NULL )
+                    rc = funcs->on_placement( data );
+            }
+        }
+    } while ( rc == 0 );
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_spot_group( walk_data * data, walk_funcs * funcs )
+{
+    rc_t rc;
+    do
+    {
+        rc = ReferenceIteratorNextSpotGroup ( data->ref_iter, &data->spotgroup, &data->spotgroup_len );
+        if ( GetRCState( rc ) != rcDone )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+            }
+            else
+            {
+                if ( funcs->on_enter_spotgroup != NULL )
+                    rc = funcs->on_enter_spotgroup( data );
+                if ( rc == 0 )
+                    rc = walk_placements( data, funcs );
+                if ( rc == 0 && funcs->on_exit_spotgroup != NULL )
+                    rc = funcs->on_exit_spotgroup( data );
+            }
+        }
+    } while ( rc == 0 );
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_ref_pos( walk_data * data, walk_funcs * funcs )
+{
+    rc_t rc;
+    do
+    {
+        rc = ReferenceIteratorNextPos ( data->ref_iter, !data->options->no_skip );
+        if ( GetRCState( rc ) != rcDone )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+            }
+            else
+            {
+                rc = ReferenceIteratorPosition ( data->ref_iter, &data->ref_pos, &data->depth, &data->ref_base );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogInt, rc, "ReferenceIteratorPosition() failed" );
+                }
+                else if ( data->depth > 0 )
+                {
+                    bool skip = false;
+
+                    if ( data->options->skiplist != NULL )
+                        skip = skiplist_is_skip_position( data->options->skiplist, data->ref_pos + 1 );
+
+                    if ( !skip )
+                    {
+                        if ( funcs->on_enter_ref_pos != NULL )
+                            rc = funcs->on_enter_ref_pos( data );
+                        if ( rc == 0 )
+                            rc = walk_spot_group( data, funcs );
+                        if ( rc == 0 && funcs->on_exit_ref_pos != NULL )
+                            rc = funcs->on_exit_ref_pos( data );
+                    }
+                }
+            }
+            if ( rc == 0 ) { rc = Quitting(); }
+        }
+    } while ( rc == 0 );
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_ref_window( walk_data * data, walk_funcs * funcs )
+{
+    rc_t rc;
+    do
+    {
+        rc = ReferenceIteratorNextWindow ( data->ref_iter, &data->ref_window_start, &data->ref_window_len );
+        if ( GetRCState( rc ) != rcDone )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextWindow() failed" );
+            }
+            else
+            {
+                if ( funcs->on_enter_ref_window != NULL )
+                    rc = funcs->on_enter_ref_window( data );
+                if ( rc == 0 )
+                    rc = walk_ref_pos( data, funcs );
+                if ( rc == 0 && funcs->on_exit_ref_window != NULL )
+                    rc = funcs->on_exit_ref_window( data );
+            }
+        }
+    } while ( rc == 0 );
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+rc_t walk_0( walk_data * data, walk_funcs * funcs )
+{
+    rc_t rc;
+
+    data->ref_start = 0;
+    data->ref_len = 0;
+    data->ref_name = NULL;
+    data->ref_obj = NULL;
+    data->ref_window_start = 0;
+    data->ref_window_len = 0;
+    data->ref_pos = 0;
+    data->depth = 0;
+    data->ref_base = 0;
+    data->spotgroup = NULL;
+    data->spotgroup_len = 0;
+    data->rec = NULL;
+    data->xrec = NULL;
+    data->state = 0;
+    data->seq_pos = 0;
+
+    do
+    {
+        rc = ReferenceIteratorNextReference( data->ref_iter, &data->ref_start, &data->ref_len, &data->ref_obj );
+        if ( GetRCState( rc ) != rcDone )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+            }
+            else if ( data->ref_obj != NULL )
+            {
+                if ( data->options->use_seq_name )
+                    rc = ReferenceObj_Name( data->ref_obj, &data->ref_name );
+                else
+                    rc = ReferenceObj_SeqId( data->ref_obj, &data->ref_name );
+
+                if ( data->options->skiplist != NULL )
+                    skiplist_enter_ref( data->options->skiplist, data->ref_name );
+
+                if ( rc != 0 )
+                {
+                    if ( data->options->use_seq_name )
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+                    }
+                    else
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+                    }
+                }
+                else
+                {
+					rc = ReferenceObj_SeqLength( data->ref_obj, &data->ref_len );
+					if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed" );
+                    }
+					else
+					{
+						if ( funcs->on_enter_ref != NULL )
+							rc = funcs->on_enter_ref( data );
+						if ( rc == 0 )
+							rc = walk_ref_window( data, funcs );
+						if ( rc == 0 && funcs->on_exit_ref != NULL )
+							rc = funcs->on_exit_ref( data );
+					}
+                }
+            }
+        }
+    } while ( rc == 0 );
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    if ( GetRCState( rc ) == rcCanceled ) { rc = 0; }
+    return rc;
+}
diff --git a/tools/sra-pileup/ref_walker_0.h b/tools/sra-pileup/ref_walker_0.h
new file mode 100644
index 0000000..e7c0253
--- /dev/null
+++ b/tools/sra-pileup/ref_walker_0.h
@@ -0,0 +1,107 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ref_walker_0_
+#define _h_ref_walker_0_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pileup_options.h"
+
+#include <insdc/sra.h>
+
+#include <stdlib.h>
+#include <sysalloc.h>
+#include <string.h>
+#include <os-native.h>
+
+typedef struct tool_rec tool_rec;
+struct tool_rec
+{
+    bool reverse;   /* orientation towards reference ( false...in ref-orientation / true...reverse) */
+    int32_t tlen;   /* template-len, for statistical analysis */
+    uint32_t quality_len;
+    uint8_t * quality;  /* ptr to quality... ( for sam-output ) */
+};
+
+
+typedef struct walk_data walk_data;
+struct walk_data
+{
+    void *data;                             /* opaque pointer to data passed to each function */
+    ReferenceIterator *ref_iter;            /* the global reference-iter */
+    pileup_options *options;                /* the tool-options */
+    struct ReferenceObj const * ref_obj;    /* the current reference-object */
+    const char * ref_name;                  /* the name of the current reference */
+    INSDC_coord_zero ref_start;             /* start of the current reference */
+    INSDC_coord_len ref_len;                /* length of the current reference */
+    INSDC_coord_zero ref_window_start;      /* start of the current reference-window */
+    INSDC_coord_len ref_window_len;         /* length of the current reference-window */
+    INSDC_coord_zero ref_pos;               /* current position on the reference */
+    uint32_t depth;                         /* coverage at the current position */
+    INSDC_4na_bin ref_base;                 /* reference-base at the current position */
+    const char * spotgroup;                 /* name of the current spotgroup ( can be NULL! ) */
+    size_t spotgroup_len;                   /* length of the name of the current spotgroup ( can be 0 ) */
+    const PlacementRecord *rec;             /* current placement-record */
+    tool_rec * xrec;                        /* current extended placement-record (orientation, quality...) */
+    int32_t state;                          /* state of the current placement at the current ref-pos ( bitmasked!) */
+    INSDC_coord_zero seq_pos;               /* position inside the alignment at the current ref-pos */
+};
+
+
+typedef struct walk_funcs walk_funcs;
+struct walk_funcs
+{
+    /* changing reference */
+    rc_t ( CC * on_enter_ref ) ( walk_data * data );
+    rc_t ( CC * on_exit_ref ) ( walk_data * data );
+
+    /* changing reference-window */
+    rc_t ( CC * on_enter_ref_window ) ( walk_data * data );
+    rc_t ( CC * on_exit_ref_window ) ( walk_data * data );
+
+    /* changing reference-position */
+    rc_t ( CC * on_enter_ref_pos ) ( walk_data * data );
+    rc_t ( CC * on_exit_ref_pos ) ( walk_data * data );
+
+    /* changing spot-group */
+    rc_t ( CC * on_enter_spotgroup ) ( walk_data * data );
+    rc_t ( CC * on_exit_spotgroup ) ( walk_data * data );
+
+    /* on each alignment */
+    rc_t ( CC * on_placement ) ( walk_data * data );
+};
+
+
+rc_t walk_0( walk_data * data, walk_funcs * funcs );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_ref_walker_0_ */
diff --git a/tools/sra-pileup/report_deletes.c b/tools/sra-pileup/report_deletes.c
new file mode 100644
index 0000000..21e376e
--- /dev/null
+++ b/tools/sra-pileup/report_deletes.c
@@ -0,0 +1,259 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "report_deletes.h"
+#include "cg_tools.h"
+
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <kfs/file.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+
+#include <kdb/manager.h>
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+rc_t CC Quitting ( void );
+
+static rc_t cigar_loop( const VCursor *cur,
+                        uint32_t cigar_idx,
+                        int64_t first,
+                        uint64_t count,
+                        uint32_t min_len )
+{
+    rc_t rc = 0;
+    int64_t row_id, last_row = ( first + count );
+    rna_splice_candidates candidates;
+
+    for ( row_id = first; ( row_id < last_row ) && ( rc == 0 ) && ( Quitting() == 0 ); row_id++ )
+    {
+        const char * cigar;
+        uint32_t row_len;
+        rc = VCursorCellDataDirect ( cur, row_id, cigar_idx, NULL, ( const void ** )&cigar, NULL, &row_len );
+        if ( rc == 0 )
+        {
+            candidates.count = 0;
+            candidates.fwd_matched = 0;
+            candidates.rev_matched = 0;
+
+            rc = discover_rna_splicing_candidates( row_len, cigar, min_len, &candidates );
+            if ( rc == 0 && candidates.count > 0 )
+            {
+                rc = KOutMsg( "%d rna-splice-candidates at row #%ld : %.*s\n", candidates.count, row_id, row_len, cigar );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t report_deletes_db( const VDBManager *vdb_mgr,
+                               const char * path,
+                               uint32_t min_len )
+{
+    const VDatabase *db;
+    rc_t rc = VDBManagerOpenDBRead( vdb_mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr,
+                 ( klogInt, rc, "cannot open database $(db_name)", "db_name=%s", path ) );
+    }
+    else
+    {
+        const VTable *tab;
+        rc = VDatabaseOpenTableRead( db, &tab, "PRIMARY_ALIGNMENT" );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot open table PRIMARY_ALIGNMENT" );
+        }
+        else
+        {
+            const VCursor *cur;
+            rc = VTableCreateCursorRead( tab, &cur );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot open cursor on table PRIMARY_ALIGNMENT" );
+            }
+            else
+            {
+                uint32_t cigar_idx;
+                rc = VCursorAddColumn( cur, &cigar_idx, "CIGAR_SHORT" );
+                if ( rc != 0 )
+                {
+                    (void)LOGERR( klogErr, rc, "cannot add CIGAR_SHORT to cursor" );
+                }
+                else
+                {
+                    rc = VCursorOpen( cur );
+                    if ( rc != 0 )
+                    {
+                        (void)LOGERR( klogErr, rc, "cannot open cursor" );
+                    }
+                    else
+                    {
+                        int64_t first;
+                        uint64_t count;
+                        rc = VCursorIdRange ( cur, cigar_idx, &first, &count );
+                        if ( rc != 0 )
+                        {
+                            (void)LOGERR( klogErr, rc, "cannot detect row-range" );
+                        }
+                        else
+                        {
+                            rc = cigar_loop( cur, cigar_idx, first, count, min_len );
+                        }
+                    }
+                }
+                VCursorRelease( cur );
+            }
+            VTableRelease( tab );
+        }
+        VDatabaseRelease( db );
+    }
+    return rc;
+}
+
+
+static rc_t report_deletes_spec( const VDBManager *vdb_mgr,
+                                 VFSManager * vfs_mgr,
+                                 const char * spec,
+                                 uint32_t min_len )
+{
+    rc_t rc = KOutMsg( "\nreporting deletes of '%s'\n", spec );
+    if ( rc == 0 )
+    {
+        VPath * path = NULL;
+        const VPath * local_cache = NULL;
+        const KFile * remote_file = NULL;
+        rc = VFSManagerResolveSpec ( vfs_mgr, spec, &path, &remote_file, &local_cache, true );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot resolve spec via VFSManager" );
+        }
+        else
+        {
+            char buffer[ 4096 ];
+            size_t num_read;
+            rc = VPathReadPath ( path, buffer, sizeof buffer, &num_read );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot read path from vpath" );
+            }
+            else
+            {
+                int path_type = ( VDBManagerPathType ( vdb_mgr, "%s", buffer ) & ~ kptAlias );
+                switch( path_type )
+                {
+                    case kptDatabase : rc = report_deletes_db( vdb_mgr, buffer, min_len ); break;
+
+                    case kptTable    : KOutMsg( "cannot report deletes on a table-object\n" );
+                                        rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+                                        (void)LOGERR( klogErr, rc, "cannot report references on a table-object" );
+                                       break;
+
+                    default          : KOutMsg( "the given object is not a vdb-database\n" );
+                                        rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+                                        (void)LOGERR( klogErr, rc, "the given object is not a vdb-database" );
+                                       break;
+                }
+            }
+            KFileRelease( remote_file );
+            VPathRelease ( local_cache );
+            VPathRelease ( path );
+        }
+    }
+    return rc;
+
+}
+
+
+rc_t report_deletes( Args * args, uint32_t min_len )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else
+    {
+        KDirectory *dir; 
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+        else
+        {
+            const VDBManager *vdb_mgr;
+            rc = VDBManagerMakeRead ( &vdb_mgr, dir );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+            }
+            else
+            {
+                VFSManager * vfs_mgr;
+                rc =  VFSManagerMake ( &vfs_mgr );
+                if ( rc != 0 )
+                {
+                    (void)LOGERR( klogErr, rc, "cannot make vfs-manager" );
+                }
+                else
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char *param = NULL;
+                        rc = ArgsParamValue( args, idx, (const void **)&param );
+                        if ( rc != 0 )
+                        {
+                            LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+                        }
+                        else
+                        {
+                            rc = report_deletes_spec( vdb_mgr, vfs_mgr, param, min_len );
+                        }
+                    }
+                    VFSManagerRelease ( vfs_mgr );
+                }
+                VDBManagerRelease( vdb_mgr );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/report_deletes.h b/tools/sra-pileup/report_deletes.h
new file mode 100644
index 0000000..9cc12ac
--- /dev/null
+++ b/tools/sra-pileup/report_deletes.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_report_deletes_
+#define _h_report_deletes_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+#include <klib/rc.h>
+
+rc_t report_deletes( Args * args, uint32_t min_len );
+
+#endif
diff --git a/tools/sra-pileup/reref.c b/tools/sra-pileup/reref.c
new file mode 100644
index 0000000..65f75ed
--- /dev/null
+++ b/tools/sra-pileup/reref.c
@@ -0,0 +1,550 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "reref.h"
+
+#include <klib/text.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+
+#include <align/reference.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+#if 0
+
+typedef struct report_row_ctx
+{
+    uint32_t prim_idx;
+    uint32_t sec_idx;
+    int64_t row_id;
+} report_row_ctx;
+
+
+static rc_t report_ref_row( const VCursor *cur, report_row_ctx * row_ctx )
+{
+    rc_t rc = 0;
+    uint32_t elem_bits, boff, prim_count, sec_count;
+    const void *base;
+    rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->prim_idx, &elem_bits, &base, &boff, &prim_count );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot read colum >PRIMARY_ALIGNMENT_IDS<" );
+    }
+    else
+    {
+        rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->sec_idx, &elem_bits, &base, &boff, &sec_count );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot read colum >SECONDARY_ALIGNMENT_IDS<" );
+        }
+        else if ( prim_count > 0 || sec_count > 0 )
+        {
+            rc = KOutMsg( "ROW[ %,lu ]: PRIM:%,u SEC:%,u\n", row_ctx->row_id, prim_count, sec_count );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_cursor( const VCursor *cur, int64_t start, int64_t stop )
+{
+    report_row_ctx row_ctx;
+    rc_t rc = VCursorAddColumn ( cur, &row_ctx.prim_idx, "PRIMARY_ALIGNMENT_IDS" );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot add column >PRIMARY_ALIGNMENT_IDS<" );
+    }
+    else
+    {
+        rc = VCursorAddColumn ( cur, &row_ctx.sec_idx, "SECONDARY_ALIGNMENT_IDS" );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot add column >SECONDARY_ALIGNMENT_IDS<" );
+        }
+        else
+        {
+            rc = VCursorOpen ( cur );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot open REFERENCE-CURSOR" );
+            }
+            else
+            {
+                for ( row_ctx.row_id = start; rc == 0 && row_ctx.row_id <= stop; ++row_ctx.row_id )
+                {
+                    rc = report_ref_row( cur, &row_ctx );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_table( const VDBManager *vdb_mgr, const char * path, int64_t start, int64_t stop )
+{
+    const VDatabase* db;
+    rc_t rc = VDBManagerOpenDBRead ( vdb_mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot open vdb-database" );
+    }
+    else
+    {
+        const VTable* tb;
+        rc = VDatabaseOpenTableRead ( db, &tb, "REFERENCE" );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot open REFERENCE-table" );
+        }
+        else
+        {
+            const VCursor *cur;
+            rc = VTableCreateCursorRead ( tb, &cur );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot open REFERENCE-cursor" );
+            }
+            else
+            {
+                rc = report_ref_cursor( cur, start, stop );
+                VCursorRelease( cur );
+            }
+            VTableRelease ( tb );
+        }
+        VDatabaseRelease ( db );
+    }
+    return rc;
+}
+#endif
+
+
+static rc_t report_ref_table2( const ReferenceObj* ref_obj, int64_t start, int64_t stop )
+{
+    rc_t rc = 0;
+    int64_t row_id, max_prim_at, max_sec_at, max_ev_at;
+    uint64_t sum_prim, sum_sec, sum_ev, max_prim, max_sec, max_ev;
+    sum_prim = sum_sec = sum_ev = max_prim = max_sec = max_ev = 0;
+
+    for ( row_id = start; rc == 0 && row_id <= stop; ++row_id )
+    {
+        uint32_t count[ 3 ];
+        rc = ReferenceObj_GetIdCount( ref_obj, row_id, count );
+        if ( rc == 0 )
+        {
+            sum_prim += count[ 0 ];
+            sum_sec  += count[ 1 ];
+            sum_ev   += count[ 2 ];
+
+            if ( count[ 0 ] > max_prim )
+            {
+                max_prim = count[ 0 ];
+                max_prim_at = row_id;
+            }
+            if ( count[ 1 ] > max_sec )
+            {
+                max_sec = count[ 1 ];
+                max_sec_at = row_id;
+            }
+            if ( count[ 2 ] > max_ev )
+            {
+                max_ev = count[ 2 ];
+                max_ev_at = row_id;
+            }
+        }
+    }
+
+    rc = KOutMsg( "alignments:\t%,u PRI\t%,u SEC\t%,u EV\n", sum_prim, sum_sec, sum_ev );
+    if ( rc == 0 && max_prim > 0 )
+    {
+        uint64_t from = ( ( max_prim_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. PRI:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_prim, max_prim_at, from, from + 4999 );
+    }
+    if ( rc == 0 && max_sec > 0 )
+    {
+        uint64_t from = ( ( max_sec_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. SEC:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_sec, max_sec_at, from, from + 4999 );
+    }
+    if ( rc == 0 && max_ev > 0 )
+    {
+        uint64_t from = ( ( max_ev_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. EV:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_ev, max_ev_at, from, from + 4999 );
+    }
+    return rc;
+}
+
+
+const char * ss_Database        = "Database";
+const char * ss_Table           = "Table";
+const char * ss_PrereleaseTbl   = "Prerelease Table";
+const char * ss_Column          = "Column";
+const char * ss_Index           = "Index";
+const char * ss_NotFound        = "not found";
+const char * ss_BadPath         = "bad path";
+const char * ss_File            = "File";
+const char * ss_Dir             = "Dir";
+const char * ss_CharDev         = "CharDev";
+const char * ss_BlockDev        = "BlockDev";
+const char * ss_FIFO            = "FIFO";
+const char * ss_ZombieFile      = "ZombieFile";
+const char * ss_Dataset         = "Dataset";
+const char * ss_Datatype        = "Datatype";
+const char * ss_unknown         = "unknown pathtype";
+
+
+static const char * path_type_2_str( const uint32_t pt )
+{
+    const char * res = ss_unknown;
+    switch ( pt )
+    {
+    case kptDatabase      :   res = ss_Database; break;
+    case kptTable         :   res = ss_Table; break;
+    case kptPrereleaseTbl :   res = ss_PrereleaseTbl; break;
+    case kptColumn        :   res = ss_Column; break;
+    case kptIndex         :   res = ss_Index; break;
+    case kptNotFound      :   res = ss_NotFound; break;
+    case kptBadPath       :   res = ss_BadPath; break;
+    case kptFile          :   res = ss_File; break;
+    case kptDir           :   res = ss_Dir; break;
+    case kptCharDev       :   res = ss_CharDev; break;
+    case kptBlockDev      :   res = ss_BlockDev; break;
+    case kptFIFO          :   res = ss_FIFO; break;
+    case kptZombieFile    :   res = ss_ZombieFile; break;
+    case kptDataset       :   res = ss_Dataset; break;
+    case kptDatatype      :   res = ss_Datatype; break;
+    default               :   res = ss_unknown; break;
+    }
+    return res;
+}
+
+/*
+static rc_t resolve_accession( VFSManager * vfs_mgr, const char * accession, const String ** path )
+{
+    VResolver * resolver;
+    rc_t rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+    if ( rc != 0 )
+        KOutMsg( "cannot get VResolver from VFSManger for '%s'\n", accession );
+    else
+    {
+        VPath * vpath;
+        rc = VFSManagerMakePath( vfs_mgr, &vpath, "ncbi-acc:%s?vdb-ctx=refseq", accession );
+        if ( rc != 0 )
+            KOutMsg( "cannot make VPath from VFSManger for '%s'\n", accession );
+        else
+        {
+            const VPath * local;
+            const VPath * remote;
+
+            rc = VResolverQuery ( resolver, 0, vpath, &local, &remote, NULL );
+            if ( rc != 0 )
+                KOutMsg( "cannot resolve '%s'\n", accession );
+            else
+            {
+                if ( local != NULL )
+                    rc = VPathMakeString( local, path );
+                else 
+                    rc = VPathMakeString( remote, path );
+                if ( local != NULL )
+                    VPathRelease ( local );
+                if ( remote != NULL )
+                    VPathRelease ( remote );
+            }
+            VPathRelease ( vpath );
+        }
+        VResolverRelease( resolver );
+    }
+    return rc;
+}
+*/
+
+static rc_t resolve_accession( VFSManager * vfs_mgr, const char * acc, const String ** resolved )
+{
+	VResolver * resolver;
+	rc_t rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+	if ( rc != 0 )
+	{
+		(void)LOGERR( klogErr, rc, "VFSManagerGetResolver() failed" );
+	}
+	else
+	{
+		VPath * acc_vpath;
+		rc = VFSManagerMakePath( vfs_mgr, &acc_vpath, "ncbi-acc:%s", acc );
+		if ( rc != 0 )
+		{
+			(void)LOGERR( klogErr, rc, "VFSManagerMakePath() failed" );
+		}
+		else
+		{
+			const VPath * local = NULL;
+			const VPath * remote = NULL;
+			rc = VResolverQuery ( resolver, 0, acc_vpath, &local, &remote, NULL );
+			if ( rc != 0 )
+			{
+				(void)LOGERR( klogErr, rc, "VResolverQuery() failed" );
+			}
+			else
+			{
+				if ( local != NULL )
+					rc = VPathMakeString( local, resolved );
+				else if ( remote != NULL )
+					rc = VPathMakeString( remote, resolved );
+				else
+					rc = KOutMsg( "cannot resolve '%s'\n", acc );					
+
+				if ( local != NULL ) VPathRelease ( local );
+				if ( remote != NULL ) VPathRelease ( remote );
+			}
+			VPathRelease ( acc_vpath );
+		}
+		VResolverRelease( resolver );
+	}
+    return rc;
+}
+
+
+static rc_t report_ref_loc( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * seq_id )
+{
+    const String * path;
+    rc_t rc = resolve_accession( vfs_mgr, seq_id, &path );
+    if ( rc == 0 )
+    {
+        rc = KOutMsg( "location:\t%S\n", path );
+        if ( rc == 0 )
+        {
+            uint32_t pt = VDBManagerPathType ( vdb_mgr, "%S", path );
+            const char * spt = path_type_2_str( pt );
+            rc = KOutMsg( "pathtype:\t%s\n", spt );
+        }
+        free ( (void*) path );
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_obj( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, uint32_t idx,
+                            const ReferenceObj* ref_obj, bool extended )
+{
+    const char * s;
+    const char * seq_id;
+    INSDC_coord_len len;
+    bool circular, external;
+    int64_t start, stop;
+
+    rc_t rc = ReferenceObj_Name( ref_obj, &s );
+    if ( rc == 0 )
+        rc = KOutMsg( "\nREF[%u].Name     = '%s'\n", idx, s );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_SeqId( ref_obj, &seq_id );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].SeqId    = '%s'\n", idx, seq_id );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_SeqLength( ref_obj, &len );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Length   = %,u\n", idx, len );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_Circular( ref_obj, &circular );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Circular = %s\n", idx, circular ? "yes" : "no" );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_IdRange( ref_obj, &start, &stop );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].IdRange  = [%,lu]...[%,lu]\n", idx, start, stop );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_External( ref_obj, &external, NULL );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Extern   = %s\n", idx, external ? "yes" : "no" );
+    if ( rc == 0 && external )
+    {
+        rc = report_ref_loc( vdb_mgr, vfs_mgr, seq_id );
+    }
+
+    if ( rc == 0 && extended )
+        rc = report_ref_table2( ref_obj, start, stop );
+
+    return rc;
+}
+
+
+static rc_t report_ref_database( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, bool extended )
+{
+	const VDatabase *db;
+	rc_t rc = VDBManagerOpenDBRead ( vdb_mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "VDBManagerOpenDBRead() failed" );
+    }
+	else
+	{
+		const ReferenceList * reflist;
+		uint32_t options = ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds );
+		rc = ReferenceList_MakeDatabase( &reflist, db, options, 0, NULL, 0 );
+		if ( rc != 0 )
+		{
+			(void)LOGERR( klogErr, rc, "ReferenceList_MakeDatabase() failed" );
+		}
+		else
+		{
+			uint32_t count;
+			rc = ReferenceList_Count( reflist, &count );
+			if ( rc != 0 )
+			{
+				(void)LOGERR( klogErr, rc, "ReferenceList_Count() failed" );
+			}
+			else
+			{
+				rc = KOutMsg( "this object uses %u references\n", count );
+				if ( rc == 0 )
+				{
+					uint32_t idx;
+					for ( idx = 0; idx < count && rc == 0; ++idx )
+					{
+						const ReferenceObj* ref_obj;
+						rc = ReferenceList_Get( reflist, &ref_obj, idx );
+						if ( rc != 0 )
+						{
+							(void)LOGERR( klogErr, rc, "ReferenceList_Get() failed" );
+						}
+						else
+						{
+							rc = report_ref_obj( vdb_mgr, vfs_mgr, path, idx, ref_obj, extended );
+							ReferenceObj_Release( ref_obj );
+						}
+					}
+				}
+			}
+			ReferenceList_Release( reflist );
+		}
+		VDatabaseRelease( db );
+    }
+    return rc;
+}
+
+static rc_t report_references( const VDBManager *vdb_mgr, VFSManager * vfs_mgr,
+							   const char * spec, bool extended )
+{
+	const String * resolved = NULL;
+	rc_t rc = resolve_accession( vfs_mgr, spec, &resolved );
+	if ( rc == 0 && resolved != NULL )
+	{
+		rc = KOutMsg( "resolved into '%S'\n", resolved );
+		if ( rc == 0 )
+		{
+			int path_type = ( VDBManagerPathType ( vdb_mgr, "%s", spec ) & ~ kptAlias );
+			switch( path_type )
+			{
+				case kptDatabase : rc = report_ref_database( vdb_mgr, vfs_mgr, spec, extended );
+								   break;
+
+				case kptTable    : KOutMsg( "cannot report references on a table-object\n" );
+									rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+									(void)LOGERR( klogErr, rc, "cannot report references on a table-object" );
+								   break;
+
+				default          : KOutMsg( "the given object is not a vdb-database\n" );
+									rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+									(void)LOGERR( klogErr, rc, "the given object is not a vdb-database" );
+								   break;
+			}
+		}
+		StringWhack ( resolved );
+	}
+    return rc;
+}
+
+
+rc_t report_on_reference( Args * args, bool extended )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else
+    {
+        KDirectory *dir; 
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+        else
+        {
+            const VDBManager *vdb_mgr;
+            rc = VDBManagerMakeRead ( &vdb_mgr, dir );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+            }
+            else
+            {
+                VFSManager * vfs_mgr;
+                rc =  VFSManagerMake ( &vfs_mgr );
+                if ( rc != 0 )
+                {
+                    (void)LOGERR( klogErr, rc, "cannot make vfs-manager" );
+                }
+                else
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char *param = NULL;
+                        rc = ArgsParamValue( args, idx, (const void **)&param );
+                        if ( rc != 0 )
+                        {
+                            LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+                        }
+                        else
+                        {
+                            rc = report_references( vdb_mgr, vfs_mgr, param, extended );
+                        }
+                    }
+                    VFSManagerRelease ( vfs_mgr );
+                }
+                VDBManagerRelease( vdb_mgr );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/reref.h b/tools/sra-pileup/reref.h
new file mode 100644
index 0000000..85bbd5d
--- /dev/null
+++ b/tools/sra-pileup/reref.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_reref_
+#define _h_reref_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+
+rc_t report_on_reference( Args * args, bool extended );
+
+#endif
diff --git a/tools/sra-pileup/rna_splice_log.c b/tools/sra-pileup/rna_splice_log.c
new file mode 100644
index 0000000..387e617
--- /dev/null
+++ b/tools/sra-pileup/rna_splice_log.c
@@ -0,0 +1,374 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/vector.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <string.h>
+
+#include "rna_splice_log.h"
+
+typedef struct rna_splice_dict rna_splice_dict;
+struct rna_splice_dict
+{
+    KVector * v;
+};
+
+
+struct rna_splice_dict * make_rna_splice_dict( void )
+{
+    struct rna_splice_dict * res = NULL;
+    KVector * v;
+    rc_t rc = KVectorMake ( &v );
+    if ( rc == 0 )
+    {
+        res = calloc( 1, sizeof * res );
+        if ( res != NULL )
+        {
+            res->v = v;
+        }
+        else
+        {
+            KVectorRelease ( v );
+        }
+    }
+    return res;
+}
+
+
+void free_rna_splice_dict( struct rna_splice_dict * dict )
+{
+    if ( dict != NULL )
+    {
+        KVectorRelease ( dict->v );
+        free( dict );
+    }
+}
+
+
+typedef struct splice_dict_key splice_dict_key;
+struct splice_dict_key
+{
+    uint32_t len;
+    uint32_t pos;
+};
+
+union dict_key_union
+{
+    uint64_t key;
+    splice_dict_key key_struct;
+};
+
+union dict_value_union
+{
+    uint64_t value;
+    splice_dict_entry entry;
+};
+
+
+bool rna_splice_dict_get( struct rna_splice_dict * dict,
+                          uint32_t pos, uint32_t len, splice_dict_entry * entry )
+{
+    bool res = false;
+    if ( dict != NULL )
+    {
+        rc_t rc;
+        union dict_key_union ku;
+        union dict_value_union vu;
+
+        ku.key_struct.pos = pos;
+        ku.key_struct.len = len;
+        rc = KVectorGetU64 ( dict->v, ku.key, &(vu.value) );
+        res = ( rc == 0 );
+        if ( res && entry != NULL )
+        {
+            entry->count = vu.entry.count;
+            entry->intron_type = vu.entry.intron_type;
+        }
+    }
+    return res;
+}
+
+
+void rna_splice_dict_set( struct rna_splice_dict * dict,
+                          uint32_t pos, uint32_t len, const splice_dict_entry * entry )
+{
+    if ( dict != NULL && entry != NULL )
+    {
+        union dict_key_union ku;
+        union dict_value_union vu;
+
+        ku.key_struct.pos = pos;
+        ku.key_struct.len = len;
+        vu.entry.count = entry->count;
+        vu.entry.intron_type = entry->intron_type;
+        KVectorSetU64 ( dict->v, ku.key, vu.value );
+    }
+}
+
+
+/* --------------------------------------------------------------------------- */
+
+
+typedef struct rna_splice_log rna_splice_log;
+struct rna_splice_log
+{
+    KFile * log_file;
+    const char * tool_name;
+    struct ReferenceObj const * ref_obj;
+
+    char ref_name[ 1024 ];
+    uint64_t log_file_pos;
+};
+
+
+struct rna_splice_log * make_rna_splice_log( const char * filename, const char * toolname )
+{
+    struct rna_splice_log * res = NULL;
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir ( &dir );
+    if ( rc == 0 )
+    {
+        KFile * f;
+        rc = KDirectoryCreateFile ( dir, &f, false, 0664, kcmInit, "%s", filename );
+        if ( rc == 0 )
+        {
+            res = calloc( 1, sizeof * res );
+            if ( res != NULL )
+            {
+                res->log_file = f;
+                if ( toolname != NULL )
+                    res->tool_name = string_dup_measure ( toolname, NULL );
+            }
+            else
+                KFileRelease ( f );
+        }
+        KDirectoryRelease ( dir );
+    }
+    return res;
+}
+
+
+void free_rna_splice_log( struct rna_splice_log * sl )
+{
+    if ( sl != NULL )
+    {
+        KFileRelease ( sl->log_file );
+        if ( sl->tool_name != NULL ) free( ( void * )sl->tool_name );
+        free( ( void * ) sl );
+    }
+}
+
+
+void rna_splice_log_enter_ref( struct rna_splice_log * sl,
+                               const char * ref_name,
+                               struct ReferenceObj const * ref_obj )
+{
+    if ( sl != NULL )
+    {
+        if ( ref_name != NULL )
+            string_copy_measure ( sl->ref_name, sizeof( sl->ref_name ), ref_name );
+        else
+            sl->ref_name[ 0 ] = 0;
+
+        sl->ref_obj = ref_obj;
+    }
+}
+
+
+static void copy_read_and_reverse_complement( uint8_t * dst, const uint8_t * const src, INSDC_coord_len const count )
+{
+    static char const compl[] = {
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 , '.',  0 , 
+        '0', '1', '2', '3',  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
+    };
+
+    INSDC_coord_len i, j;
+    
+    for ( i = 0, j = count - 1; i != count; ++i, --j )
+    {
+        dst[ i ] = compl[ src[ j ] ];
+    }
+}
+
+
+#define PRE_POST_LEN 10
+#define EDGE_LEN ( ( PRE_POST_LEN * 2 ) + 2 )
+
+
+static rc_t write_to_file( struct rna_splice_log * sl, const uint8_t * src, size_t len )
+{
+    size_t num_writ;
+    rc_t rc = KFileWriteAll( sl->log_file, sl->log_file_pos, src, len, &num_writ );
+    if ( rc == 0 )
+        sl->log_file_pos += num_writ;
+    return rc;
+}
+
+static rc_t print_edge( struct rna_splice_log * sl,
+                        INSDC_coord_zero pos,
+                        bool const reverse_complement,
+                        bool const add_newline )
+{
+    rc_t rc;
+    INSDC_coord_len from_ref_obj, to_read;
+    uint8_t buffer[ EDGE_LEN + 1 ];
+    INSDC_coord_zero rd_pos = 0;
+    uint32_t pre_len = PRE_POST_LEN;
+    uint32_t post_len = PRE_POST_LEN;
+
+    if ( pos >= PRE_POST_LEN )
+        rd_pos = ( pos - PRE_POST_LEN ); /* in the rare case the delete is at the very beginning of the alignment */
+    else
+        pre_len = pos; /* rd_pos is still 0, what we want*/
+
+    to_read = pre_len + post_len + 2;
+    rc = ReferenceObj_Read( sl->ref_obj, rd_pos, to_read, buffer, &from_ref_obj );
+    if ( rc == 0 )
+    {
+        uint8_t complement[ EDGE_LEN + 1 ];
+        uint8_t to_write[ EDGE_LEN + 5 ];
+        uint8_t * ref_bytes = buffer;
+
+        if ( from_ref_obj < to_read )
+            post_len -= ( to_read - from_ref_obj );
+
+        if ( reverse_complement )
+        {
+            copy_read_and_reverse_complement( complement, buffer, from_ref_obj );
+            ref_bytes = complement;
+        }
+        memmove( to_write, ref_bytes, pre_len );
+        to_write[ pre_len ] = '\t';
+        to_write[ pre_len + 1 ] = ref_bytes[ pre_len ];
+        to_write[ pre_len + 2 ] = ref_bytes[ pre_len + 1 ];
+        to_write[ pre_len + 3 ] = '\t';
+        memmove( &( to_write[ pre_len + 4 ] ), &( ref_bytes[ pre_len + 2 ] ), post_len );
+
+        if ( add_newline )
+            to_write[ pre_len + post_len + 4 ] = '\n';
+        else
+            to_write[ pre_len + post_len + 4 ] = '\t';
+
+        rc = write_to_file( sl, to_write, pre_len + post_len + 5 );
+    }
+    return rc;
+}
+
+
+/*
+#define INTRON_UNKNOWN 0
+#define INTRON_FWD 1
+#define INTRON_REV 2
+*/
+
+static const char intron_type_to_ascii[] = { 'u', '+', '-', 'u' };
+
+static rc_t CC on_dict_key_value( uint64_t key, uint64_t value, void * user_data )
+{
+    rc_t rc = 0;
+    struct rna_splice_log * sl = ( struct rna_splice_log * )user_data;
+    if ( sl != NULL )
+    {
+        char tmp[ 512 ];
+        size_t num_writ;
+        union dict_key_union ku;
+        union dict_value_union vu;
+        char intron;
+        bool reverse_complement;
+
+        ku.key = key;
+        vu.value = value;
+        intron = intron_type_to_ascii[ vu.entry.intron_type & 0x03 ];
+        reverse_complement = ( ( vu.entry.intron_type & 0x03 ) == INTRON_REV );
+
+        rc = string_printf ( tmp, sizeof tmp, &num_writ,
+                             "%s\t%u\t%u\t%u\t%c\t",
+                             sl->ref_name, ku.key_struct.pos + 1, ku.key_struct.len, vu.entry.count, intron );
+        if ( rc == 0 )
+            rc = write_to_file( sl, ( uint8_t * )tmp, num_writ );
+
+        if ( reverse_complement )
+        {
+            if ( rc == 0 )
+                rc = print_edge( sl, ku.key_struct.pos + ku.key_struct.len - 2, true, false );
+            if ( rc == 0 )
+                rc = print_edge( sl, ku.key_struct.pos, true, true );
+        }
+        else
+        {
+            if ( rc == 0 )
+                rc = print_edge( sl, ku.key_struct.pos, false, false );
+            if ( rc == 0 )
+                rc = print_edge( sl, ku.key_struct.pos + ku.key_struct.len - 2, false, true );
+        }
+    }
+    return rc;
+}
+
+
+void rna_splice_log_exit_ref( struct rna_splice_log * sl, struct rna_splice_dict * dict )
+{
+    if ( sl != NULL && dict != NULL )
+    {
+        KVectorVisitU64 ( dict->v, false, on_dict_key_value, sl );
+    }
+}
+
diff --git a/tools/sra-pileup/rna_splice_log.h b/tools/sra-pileup/rna_splice_log.h
new file mode 100644
index 0000000..feb98eb
--- /dev/null
+++ b/tools/sra-pileup/rna_splice_log.h
@@ -0,0 +1,87 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_rna_splice_log_
+#define _h_rna_splice_log_
+
+#include <insdc/insdc.h>
+#include <align/reference.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define INTRON_UNKNOWN 0
+#define INTRON_FWD 1
+#define INTRON_REV 2
+
+typedef struct splice_dict_entry splice_dict_entry;
+struct splice_dict_entry
+{
+    uint32_t count;
+    uint32_t intron_type;
+};
+
+struct rna_splice_dict;
+
+struct rna_splice_dict * make_rna_splice_dict( void );
+
+void free_rna_splice_dict( struct rna_splice_dict * dict );
+
+bool rna_splice_dict_get( struct rna_splice_dict * dict,
+                          uint32_t pos,
+                          uint32_t len,
+                          splice_dict_entry * entry );
+
+void rna_splice_dict_set( struct rna_splice_dict * dict,
+                          uint32_t pos,
+                          uint32_t len,
+                          const splice_dict_entry * entry );
+
+/* --------------------------------------------------------------------------- */
+
+
+struct rna_splice_log;
+
+struct rna_splice_log * make_rna_splice_log( const char * filename,
+                                             const char * toolname );
+
+void free_rna_splice_log( struct rna_splice_log * sl );
+
+void rna_splice_log_enter_ref( struct rna_splice_log * sl,
+                               const char * ref_name,
+                               struct ReferenceObj const * ref_obj );
+
+void rna_splice_log_exit_ref( struct rna_splice_log * sl,
+                              struct rna_splice_dict * dict );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_rna_splice_log_ */
diff --git a/tools/sra-pileup/sam-aligned.c b/tools/sra-pileup/sam-aligned.c
new file mode 100644
index 0000000..1ed9b75
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.c
@@ -0,0 +1,2408 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <align/manager.h>
+#include <align/iterator.h>
+#include <kapp/main.h>
+#include <ctype.h>
+#include <sysalloc.h>
+
+#include "read_fkt.h"
+#include "cg_tools.h"
+#include "rna_splice_log.h"
+#include "sam-aligned.h"
+#include "md_flag.h"
+
+const char * PRIM_TABLE = "PRIMARY_ALIGNMENT";
+const char * SEC_TABLE = "SECONDARY_ALIGNMENT";
+const char * EV_INT_TABLE = "EVIDENCE_INTERVAL";
+const char * EV_AL_TABLE = "EVIDENCE_ALIGNMENT";
+
+
+/* -------------------------------------------------------------------------------------------
+    column                      PRIM    SEC     EV_INT      EV_ALIGN ( outside of iterator )
+
+    SEQ_SPOT_ID                 X       X       -           X
+    SAM_FLAGS                   X       X       -           -
+    CIGAR_LONG                  X       X       X           X 
+    CIGAR_SHORT                 X       X       X           X
+    CIGAR_LONG_LEN              X       X       X           X 
+    CIGAR_SHORT_LEN             X       X       X           X
+    MATE_ALIGN_ID               X       X       -           -
+    MATE_REF_NAME               X       X       -           -
+    MATE_REF_POS                X       X       -           -
+    TEMPLATE_LEN                X       X       -           -
+    READ                        X       X       X           X
+    READ_LEN                    X       X       X           X
+    MISMATCH_READ               X       X       X           X
+    SAM_QUALITY                 X       X       X           X
+    REF_ORIENTATION             X       X       X           X
+    EDIT_DISTANCE               X       X       X           X
+    SEQ_SPOT_GROUP              X       X       -           X
+    SEQ_READ_ID                 X       X       -           X
+    RAW_READ                    X       X       X           X
+    READ_FILTER                 X       X       X           X
+    EVIDENCE_ALIGNMENT_IDS      -       -       X           -
+    REF_POS                                                 o
+    REF_PLOIDY                                              o
+    ALIGNMENT_COUNT             X       X       -           X
+    SEQ_NAME                                                X
+    MAPQ                                                    X
+    ALIGN_GROUP                 X       -       -           -
+    RNA_ORIENTATION             X       X
+    LINKAGE_GROUP               X       X
+   -------------------------------------------------------------------------------------------*/
+
+
+#define COL_NOT_AVAILABLE 0xFFFFFFFF
+
+#define COL_SEQ_SPOT_ID "(I64)SEQ_SPOT_ID"
+#define COL_SAM_FLAGS "(U32)SAM_FLAGS"
+#define COL_LONG_CIGAR "(ascii)CIGAR_LONG"
+#define COL_SHORT_CIGAR "(ascii)CIGAR_SHORT"
+#define COL_MATE_ALIGN_ID "(I64)MATE_ALIGN_ID"
+#define COL_MATE_REF_NAME "(ascii)MATE_REF_NAME"
+#define COL_MATE_REF_SEQ_ID "(ascii)MATE_REF_SEQ_ID"
+#define COL_MATE_REF_POS "(INSDC:coord:zero)MATE_REF_POS"
+#define COL_TEMPLATE_LEN "(I32)TEMPLATE_LEN"
+#define COL_MISMATCH_READ "(ascii)MISMATCH_READ"
+#define COL_SAM_QUALITY "(INSDC:quality:text:phred_33)SAM_QUALITY"
+#define COL_REF_ORIENTATION "(bool)REF_ORIENTATION"
+#define COL_EDIT_DIST "(U32)EDIT_DISTANCE"
+#define COL_SEQ_SPOT_GROUP "(ascii)SEQ_SPOT_GROUP"
+#define COL_SEQ_READ_ID "(INSDC:coord:one)SEQ_READ_ID"
+#define COL_RAW_READ "(INSDC:dna:text)RAW_READ"
+#define COL_PLOIDY "(NCBI:align:ploidy)PLOIDY"
+#define COL_CIGAR_LONG_LEN "(INSDC:coord:len)CIGAR_LONG_LEN"
+#define COL_CIGAR_SHORT_LEN "(INSDC:coord:len)CIGAR_SHORT_LEN"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_EV_ALIGNMENTS "(I64)EVIDENCE_ALIGNMENT_IDS"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+#define COL_REF_PLOIDY "(U32)REF_PLOIDY"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+#define COL_AL_COUNT "(U8)ALIGNMENT_COUNT"
+#define COL_SEQ_NAME "(ascii)SEQ_NAME"
+#define COL_MAPQ "(I32)MAPQ"
+#define COL_ALIGN_GROUP "(ascii)ALIGN_GROUP"
+#define COL_RNA_ORIENTATION "(ascii)RNA_ORIENTATION"
+#define COL_LNK_GROUP "(ascii)LINKAGE_GROUP"
+
+enum align_table_type
+{
+    att_primary = 0,
+    att_secondary,
+    att_evidence
+};
+
+
+/* the part common to prim/sec/ev-alignment */
+typedef struct align_cmn_context
+{
+    const VCursor * cursor;
+
+    uint32_t seq_spot_id_idx;
+    uint32_t cigar_idx;
+    uint32_t cigar_len_idx;
+    uint32_t read_idx;
+    uint32_t read_len_idx;
+    uint32_t edit_dist_idx;
+    uint32_t seq_spot_group_idx;
+    uint32_t seq_read_id_idx;
+    uint32_t raw_read_idx;
+    uint32_t sam_quality_idx;
+    uint32_t ref_orientation_idx;
+    uint32_t read_filter_idx;
+    uint32_t al_count_idx;
+} align_cmn_context;
+
+
+typedef struct align_table_context
+{
+    CigOps * cig_op_buffer;
+    uint32_t cig_op_buffer_len;
+
+    /* which Reference-Obj in the ReferenceList we are aligning against... */
+    const ReferenceObj* ref_obj;
+    uint32_t ref_idx;
+
+    /* which index into the input-files object / needed to distinguish cache entries with the same number
+       but comming from different input-files */
+    uint32_t db_idx;
+
+    /* objects of which table are we aligning PRIM/SEC/EV ? */
+    enum align_table_type align_table_type;
+
+    /* the part common to prim/sec/ev-alignment */
+    align_cmn_context cmn;
+
+    /* this is specific to pim/sec */
+    uint32_t sam_flags_idx;
+    uint32_t mate_align_id_idx;
+    uint32_t mate_ref_name_idx;
+    uint32_t mate_ref_pos_idx;
+    uint32_t tlen_idx;
+    uint32_t rna_orientation_idx;
+
+    /* this is only in prim */
+    uint32_t al_group_idx;
+    uint32_t lnk_group_idx;
+    
+    /* this is specific to ev-interval/ev-alignmnet */
+    uint32_t ploidy_idx;
+    uint32_t ev_alignments_idx;
+    uint32_t ref_pos_idx;
+    uint32_t ref_ploidy_idx;
+    uint32_t seq_name_idx;
+    uint32_t mapq_idx;
+
+    /* the common part repeats for evidence-alignment */
+    align_cmn_context eval;
+} align_table_context;
+
+
+static void invalidate_all_cmn_column_idx( align_cmn_context * const actx )
+{
+    actx->seq_spot_id_idx       = COL_NOT_AVAILABLE;
+    actx->cigar_idx             = COL_NOT_AVAILABLE;    
+    actx->cigar_len_idx         = COL_NOT_AVAILABLE;
+    actx->read_idx              = COL_NOT_AVAILABLE;
+    actx->read_len_idx          = COL_NOT_AVAILABLE;    
+    actx->edit_dist_idx         = COL_NOT_AVAILABLE;
+    actx->seq_spot_group_idx    = COL_NOT_AVAILABLE;
+    actx->seq_read_id_idx       = COL_NOT_AVAILABLE;
+    actx->raw_read_idx          = COL_NOT_AVAILABLE;
+    actx->sam_quality_idx       = COL_NOT_AVAILABLE;
+    actx->ref_orientation_idx   = COL_NOT_AVAILABLE;
+    actx->read_filter_idx       = COL_NOT_AVAILABLE;
+    actx->al_count_idx          = COL_NOT_AVAILABLE;
+}
+
+static void invalidate_all_column_idx( align_table_context * const atx )
+{
+    atx->sam_flags_idx      = COL_NOT_AVAILABLE;
+    atx->mate_align_id_idx  = COL_NOT_AVAILABLE;
+    atx->mate_ref_name_idx  = COL_NOT_AVAILABLE;
+    atx->mate_ref_pos_idx   = COL_NOT_AVAILABLE;
+    atx->tlen_idx           = COL_NOT_AVAILABLE;
+    atx->rna_orientation_idx= COL_NOT_AVAILABLE;
+    atx->ploidy_idx         = COL_NOT_AVAILABLE;
+    atx->ev_alignments_idx  = COL_NOT_AVAILABLE;
+    atx->ref_pos_idx        = COL_NOT_AVAILABLE;
+    atx->ref_ploidy_idx     = COL_NOT_AVAILABLE;
+    atx->seq_name_idx       = COL_NOT_AVAILABLE;
+    atx->mapq_idx           = COL_NOT_AVAILABLE;
+    atx->al_group_idx       = COL_NOT_AVAILABLE;
+    atx->lnk_group_idx      = COL_NOT_AVAILABLE;
+    invalidate_all_cmn_column_idx( &atx->cmn );
+    invalidate_all_cmn_column_idx( &atx->eval );
+}
+
+
+static void init_align_table_context( align_table_context * const atx,
+                                      const uint32_t db_idx,
+                                      const ReferenceObj* ref_obj )
+{
+    atx->db_idx = db_idx;
+    atx->ref_obj = ref_obj;
+    atx->cig_op_buffer = NULL;
+    atx->cig_op_buffer_len = 0;
+    invalidate_all_column_idx( atx );
+}
+
+
+static void free_align_table_context( align_table_context * atx )
+{
+    if ( atx != NULL )
+    {
+        if ( atx->cig_op_buffer != NULL )
+            free( atx->cig_op_buffer );
+
+        VCursorRelease( atx->cmn.cursor );
+        VCursorRelease( atx->eval.cursor );
+        free( atx );
+    }
+}
+
+
+static rc_t adjust_align_table_context_cig_op_buffer( align_table_context * atx, uint32_t read_len )
+{
+    rc_t rc = 0;
+
+    uint32_t reqested = ( read_len * 3 );
+    if ( reqested < 1024 ) reqested = 1024;
+
+    if ( atx->cig_op_buffer_len < reqested )
+    {
+        void * org_buffer = NULL;
+
+        if ( atx->cig_op_buffer == NULL )
+            atx->cig_op_buffer = malloc( reqested );
+        else
+        {
+            org_buffer = atx->cig_op_buffer;
+            atx->cig_op_buffer = realloc( org_buffer, reqested );
+        }
+
+        if ( atx->cig_op_buffer == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            (void)LOGERR( klogInt, rc, "cigar-op-buffer-allocation failed" );
+            if ( org_buffer != NULL )
+                free( org_buffer );
+        }
+        else
+        {
+            atx->cig_op_buffer_len = reqested;
+        }
+    }
+
+    return rc;
+}
+
+
+/* src: 'P'rimary, 'S'econdary, Evidence_'I'nterval, Evidence_'A'lignment */
+static rc_t prepare_cmn_table_rows( const samdump_opts * const opts,
+                                    const VTable * tbl,
+                                    align_cmn_context * const cmn,
+                                    char src,
+                                    struct KNamelist * available_columns )
+{
+    rc_t rc = 0;
+    const VCursor * cursor = cmn->cursor;
+
+    if ( src == 'P' || src == 'S' )
+        rc = add_column( cursor, COL_SEQ_SPOT_ID, &cmn->seq_spot_id_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+    {
+        if ( opts->use_long_cigar )
+        {
+            rc = add_column( cursor, COL_LONG_CIGAR, &cmn->cigar_idx ); /* read_fkt.c */
+            if ( rc == 0 && ( src == 'I' || src == 'A' ) )
+                rc = add_column( cursor, COL_CIGAR_LONG_LEN, &cmn->cigar_len_idx ); /* read_fkt.c */
+        }
+        else
+        {
+            rc = add_column( cursor, COL_SHORT_CIGAR, &cmn->cigar_idx ); /* read_fkt.c */
+            if ( rc == 0 && ( src == 'I' || src == 'A' ) )
+                rc = add_column( cursor, COL_CIGAR_SHORT_LEN, &cmn->cigar_len_idx ); /* read_fkt.c */
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        if ( opts->print_matches_as_equal_sign )
+            rc = add_column( cursor, COL_MISMATCH_READ, &cmn->read_idx ); /* read_fkt.c */
+        else
+            rc = add_column( cursor, COL_READ, &cmn->read_idx ); /* read_fkt.c */
+    }
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_READ_LEN, &cmn->read_len_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_SAM_QUALITY, &cmn->sam_quality_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_REF_ORIENTATION, &cmn->ref_orientation_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_EDIT_DIST, &cmn->edit_dist_idx ); /* read_fkt.c */
+
+    if ( rc == 0 && ( src == 'P' || src == 'S' || src == 'A' ) )
+        rc = add_column( cursor, COL_SEQ_SPOT_GROUP, &cmn->seq_spot_group_idx ); /* read_fkt.c */
+
+    if ( rc == 0 && ( src == 'P' || src == 'S' || src == 'A' ) )
+        rc = add_column( cursor, COL_SEQ_READ_ID, &cmn->seq_read_id_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_RAW_READ, &cmn->raw_read_idx ); /* read_fkt.c */
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_READ_FILTER, &cmn->read_filter_idx ); /* read_fkt.c */
+
+    if ( rc == 0 && ( src == 'P' || src == 'S' || src == 'A' ) )
+        add_opt_column( cursor, available_columns, COL_AL_COUNT, &cmn->al_count_idx ); /* read_fkt.c */
+
+    return rc;
+}
+
+
+static rc_t prepare_prim_sec_table_cursor( const samdump_opts * const opts,
+                                           const VDatabase * db,
+                                           const char * table_name,
+                                           align_table_context * const atx )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead( db, &tbl, "%s", table_name );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        if ( opts->cursor_cache_size == 0 )
+            rc = VTableCreateCursorRead( tbl, &atx->cmn.cursor );
+        else
+            rc = VTableCreateCachedCursorRead( tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            struct KNamelist * available_columns;
+            char table_char = 'P';
+            const VCursor * cursor = atx->cmn.cursor;
+            
+            if ( cmp_pchar( table_name, "SECONDARY_ALIGNMENT" ) == 0 )
+                table_char = 'S';
+            
+            rc = VTableListReadableColumns ( tbl, &available_columns );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, 
+                    "VTableListReadableColumns( $(src) ) failed", "src=%c", table_char ) );
+            }
+            else
+            {
+                rc = prepare_cmn_table_rows( opts, tbl, &atx->cmn, table_char, available_columns );
+
+                if ( rc == 0 )
+                    rc = add_column( cursor, COL_SAM_FLAGS, &atx->sam_flags_idx ); /* read_fkt.c */
+
+                /*  i don't have to add REF_NAME or REF_SEQ_ID, because i have it from the ref_obj later
+                    i don't have to add REF_POS, because i have it from the iterator later
+                    i don't have to add MAPQ, it is in the PlacementRecord later
+                        ... when walking the iterator ...
+                */
+                if ( rc == 0 )
+                    rc = add_column( cursor, COL_MATE_ALIGN_ID, &atx->mate_align_id_idx ); /* read_fkt.c */
+                if ( rc == 0 )
+                    rc = add_column( cursor, opts->use_seqid_as_refname ? COL_MATE_REF_SEQ_ID : COL_MATE_REF_NAME, &atx->mate_ref_name_idx ); /* read_fkt.c */
+                if ( rc == 0 )
+                    rc = add_column( cursor, COL_MATE_REF_POS, &atx->mate_ref_pos_idx ); /* read_fkt.c */
+                if ( rc == 0 )
+                    rc = add_column( cursor, COL_TEMPLATE_LEN, &atx->tlen_idx ); /* read_fkt.c */
+                if ( rc == 0 )
+                    add_opt_column( cursor, available_columns, COL_RNA_ORIENTATION, &atx->rna_orientation_idx ); /* read_fkt.c */
+
+                if ( table_char == 'P' )
+                {
+                    if ( rc == 0 )
+                        add_opt_column( cursor, available_columns, COL_ALIGN_GROUP, &atx->al_group_idx ); /* read_fkt.c */
+
+                    if ( rc == 0  )
+                        add_opt_column( cursor, available_columns, COL_LNK_GROUP, &atx->lnk_group_idx ); /* read_fkt.c */
+                }
+                
+                KNamelistRelease( available_columns );
+            }
+            if ( rc != 0 )
+                VCursorRelease( cursor );
+        }
+        VTableRelease ( tbl ); /* the cursor keeps the table alive */
+    }
+    return rc;
+}
+
+
+static rc_t prepare_sub_ev_alignment_table_cursor( const samdump_opts * const opts,
+                                                   const VDatabase * db,
+                                                   align_table_context * const atx )
+{
+    rc_t rc = add_column( atx->cmn.cursor, COL_EV_ALIGNMENTS, &atx->ev_alignments_idx );
+    if ( rc == 0 )
+    {
+        const VTable *evidence_alignment_tbl;
+        rc = VDatabaseOpenTableRead( db, &evidence_alignment_tbl, EV_AL_TABLE );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", EV_AL_TABLE ) );
+        }
+        else
+        {
+            if ( opts->cursor_cache_size == 0 )
+                rc = VTableCreateCursorRead( evidence_alignment_tbl, &atx->eval.cursor );
+            else
+                rc = VTableCreateCachedCursorRead( evidence_alignment_tbl, &atx->eval.cursor, opts->cursor_cache_size );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", EV_AL_TABLE ) );
+            }
+            else
+            {
+                struct KNamelist * available_columns;
+
+                rc = VTableListReadableColumns ( evidence_alignment_tbl, &available_columns );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, 
+                        "VTableListReadableColumns( $(src) ) failed", "src=%c", 'A' ) );
+                }
+                else
+                {
+                    rc = prepare_cmn_table_rows( opts, evidence_alignment_tbl, &atx->eval,
+                                'A', available_columns ); /* common to prim/sec/ev-align */
+                    KNamelistRelease( available_columns );
+                }
+                
+                if ( rc == 0 )
+                {
+                    /* special to ev-align */
+                    rc = add_column( atx->eval.cursor, COL_REF_POS, &atx->ref_pos_idx ); /* read_fkt.c */
+                    if ( rc == 0 )
+                        rc = add_column( atx->eval.cursor, COL_REF_PLOIDY, &atx->ref_ploidy_idx ); /* read_fkt.c */
+                    if ( rc == 0 )
+                        rc = add_column( atx->eval.cursor, COL_SEQ_NAME, &atx->seq_name_idx ); /* read_fkt.c */
+                    if ( rc == 0 )
+                        rc = add_column( atx->eval.cursor, COL_MAPQ, &atx->mapq_idx ); /* read_fkt.c */
+                }
+                rc = VCursorOpen( atx->eval.cursor );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( $(tn) ) failed", "tn=%s", EV_AL_TABLE ) );
+                }
+            }
+            VTableRelease ( evidence_alignment_tbl ); /* the cursor keeps the table alive */
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_evidence_table_cursor( const samdump_opts * const opts,
+                                           const VDatabase * db,
+                                           const char * table_name,
+                                           align_table_context * const atx )
+{
+    const VTable *evidence_interval_tbl;
+    rc_t rc = VDatabaseOpenTableRead( db, &evidence_interval_tbl, "%s", table_name );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        if ( opts->cursor_cache_size == 0 )
+            rc = VTableCreateCursorRead( evidence_interval_tbl, &atx->cmn.cursor );
+        else
+            rc = VTableCreateCachedCursorRead( evidence_interval_tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            struct KNamelist * available_columns;
+
+            rc = VTableListReadableColumns ( evidence_interval_tbl, &available_columns );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, 
+                    "VTableListReadableColumns( $(src) ) failed", "src=%c", 'I' ) );
+            }
+            else
+            {
+                rc = prepare_cmn_table_rows( opts, evidence_interval_tbl, &atx->cmn,
+                            'I', available_columns ); /* common to prim/sec/ev-align */
+                KNamelistRelease( available_columns );
+            }
+        
+            if ( rc == 0 )
+                rc = add_column( atx->cmn.cursor, COL_PLOIDY, &atx->ploidy_idx ); /* read_fkt.c */
+
+            if ( rc == 0 && ( opts->dump_cg_sam || opts->dump_cg_ev_dnb ) )
+                rc = prepare_sub_ev_alignment_table_cursor( opts, db, atx );
+
+            if ( rc != 0 )
+                VCursorRelease( atx->cmn.cursor );
+        }
+        VTableRelease ( evidence_interval_tbl ); /* the cursor keeps the table alive */
+    }
+    return rc;
+}
+
+
+static rc_t add_table_pl_iter( const samdump_opts * const opts,
+                               PlacementSetIterator * const set_iter,
+                               const ReferenceObj * const ref_obj,
+                               const input_database * const idb,
+                               INSDC_coord_zero ref_pos,
+                               INSDC_coord_len ref_len,
+                               const char * spot_group,
+                               const char * table_name,
+                               align_id_src id_src_selector,
+                               Vector * const context_list )
+{
+    rc_t rc = 0;
+    align_table_context * atx;
+    PlacementRecordExtendFuncs ext_0; /* ReferenceObj_MakePlacementIterator makes copies of the elements */
+
+    memset( &ext_0, 0, sizeof ext_0 );
+    atx = calloc( 1, sizeof * atx );
+    if ( atx == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)PLOGERR( klogInt, ( klogInt, rc, "align-context-allocation for $(tn) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        init_align_table_context( atx, idb->db_idx, ref_obj );
+        rc = ReferenceObj_Idx( ref_obj, &atx->ref_idx );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "failed to detect ref-idx for $(tn) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            switch( id_src_selector )
+            {
+                case primary_align_ids   :  atx->align_table_type = att_primary;
+                                            rc = prepare_prim_sec_table_cursor( opts, idb->db, table_name, atx );
+                                            break;
+
+                case secondary_align_ids :  atx->align_table_type = att_secondary;
+                                            rc = prepare_prim_sec_table_cursor( opts, idb->db, table_name, atx );
+                                            break;
+
+                case evidence_align_ids  :  atx->align_table_type = att_evidence;
+                                            rc = prepare_evidence_table_cursor( opts, idb->db, table_name, atx );
+                                            break;
+            }
+        }
+        if ( rc == 0 )
+        {
+            ext_0.data = atx;
+            /* we must put the atx-ptr into a global list, in order to close everything later at the end... */
+        }
+        else
+            free_align_table_context( atx );
+    }
+
+    if ( rc == 0 )
+    {
+        int32_t min_mapq = 0;
+        PlacementIterator *pl_iter;
+
+        if ( opts->use_min_mapq )
+            min_mapq = opts->min_mapq;
+
+        rc = ReferenceObj_MakePlacementIterator( ref_obj, /* the reference-obj it is made from */
+            &pl_iter,           /* the placement-iterator we want to make */
+            ref_pos,            /* where it starts on the reference */
+            ref_len,            /* the whole length of this reference/chromosome */
+            min_mapq,           /* no minimal mapping-quality to filter out */
+            NULL,               /* no special reference-cursor */
+            atx->cmn.cursor,    /* a cursor into the PRIMARY/SECONDARY/EVIDENCE-table */
+            id_src_selector,    /* what ID-source to select from REFERENCE-table (ref_obj) */
+            &ext_0,             /* placement-record extensions #0 with data-ptr pointing to cursor/index-struct */
+            NULL,               /* no placement-record extensions #1 */
+            spot_group,         /* optional spotgroup re-grouping */
+            NULL                /* source-cursor specific data/context */
+            );
+        if ( rc == 0 )
+        {
+            rc = PlacementSetIteratorAddPlacementIterator ( set_iter, pl_iter );
+            /* if the iterator-set was not able to take ownership of the new iterator
+               we have to release the iterator right here! */
+            if ( rc != 0 )
+                PlacementIteratorRelease( pl_iter );
+
+            /* if the new iterator has actually no placements inside, the call
+               to PlacementSetIteratorAddPlacementIterator() returned rcDone, which is OK - we continue... */
+            if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+        }
+    }
+
+    if ( rc == 0 )
+        rc = VectorAppend ( context_list, NULL, atx );
+    return rc;
+}
+
+
+static rc_t add_pl_iters( const samdump_opts * const opts,
+                          PlacementSetIterator * const set_iter,
+                          const ReferenceObj * const ref_obj,
+                          const input_database * const idb,
+                          INSDC_coord_zero ref_pos,
+                          INSDC_coord_len ref_len,
+                          const char * spot_group,
+                          Vector * const context_list )
+{
+    KNamelist *tables;
+    rc_t rc = VDatabaseListTbl( idb->db, &tables );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseListTbl( $(tn) ) failed", "tn=%s", idb->path ) );
+    }
+    else
+    {
+        if ( opts->dump_primary_alignments && namelist_contains( tables, PRIM_TABLE ) ) /* read_fkt.c */
+        {
+            rc = add_table_pl_iter( opts, set_iter, ref_obj, idb, ref_pos, ref_len, spot_group, 
+                                    PRIM_TABLE, primary_align_ids, context_list );
+        }
+
+        if ( rc == 0 && opts->dump_secondary_alignments && namelist_contains( tables, SEC_TABLE ) )
+        {
+            rc = add_table_pl_iter( opts, set_iter, ref_obj, idb, ref_pos, ref_len, spot_group, 
+                                    SEC_TABLE, secondary_align_ids, context_list );
+        }
+
+        if ( rc == 0 )
+        {
+            bool b0 = ( opts->dump_cg_evidence && 
+                        namelist_contains( tables, EV_INT_TABLE ) );
+
+            bool b1 = ( ( opts->dump_cg_sam || opts->dump_cg_ev_dnb ) && 
+                        namelist_contains( tables, EV_INT_TABLE ) &&
+                        namelist_contains( tables, EV_AL_TABLE ) );
+
+            if ( b0 || b1 )
+            {
+                rc = add_table_pl_iter( opts, set_iter, ref_obj, idb, ref_pos, ref_len, spot_group, 
+                                        EV_INT_TABLE, evidence_align_ids, context_list );
+            }
+        }
+        KNamelistRelease( tables );
+    }
+    return rc;
+}
+
+
+/* the user did not specify ranges on the reference, that means the whole file has to be dumped...
+   the reflist is iterated over all ref-objects it contains ... */
+static rc_t prepare_whole_files( const samdump_opts * const opts,
+                                 const input_files * const ifs,
+                                 PlacementSetIterator * const set_iter,
+                                 Vector * const context_list )
+{
+    rc_t rc = 0;
+    uint32_t db_idx;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+    {
+        const input_database * idb = VectorGet( &ifs->dbs, db_idx );
+        if ( idb != NULL )
+        {
+            uint32_t refobj_count;
+            rc = ReferenceList_Count( idb->reflist, &refobj_count );
+            if ( rc == 0 && refobj_count > 0 )
+            {
+                uint32_t ref_idx;
+                for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+                {
+                    const ReferenceObj* ref_obj;
+                    rc = ReferenceList_Get( idb->reflist, &ref_obj, ref_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        INSDC_coord_len ref_len;
+                        rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+                        if ( rc == 0 )
+                            rc = add_pl_iters( opts,
+                                set_iter,
+                                ref_obj,
+                                idb,
+                                0,                  /* where it starts on the reference */
+                                ref_len,            /* the whole length of this reference/chromosome */
+                                NULL,               /* no spotgroup re-grouping (yet) */
+                                context_list
+                                );
+                        ReferenceObj_Release( ref_obj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct on_region_ctx
+{
+    rc_t rc;
+    const samdump_opts * opts;
+    input_database * idb;
+    PlacementSetIterator * set_iter;
+    Vector *context_list;
+} on_region_ctx;
+
+
+static void CC on_region( BSTNode *n, void *data )
+{
+    on_region_ctx * rctx = data;
+    if ( rctx->rc == 0 )
+    {
+        reference_region * ref_rgn = ( reference_region * )n;
+        const ReferenceObj * ref_obj;
+        rctx->rc = ReferenceList_Find( rctx->idb->reflist, &ref_obj, ref_rgn->name, string_size( ref_rgn->name ) );
+        if ( rctx->rc == 0 )
+        {
+            uint32_t range_idx, range_count = VectorLength( &ref_rgn->ranges );
+            for ( range_idx = 0; range_idx < range_count && rctx->rc == 0; ++range_idx )
+            {
+                range * r = VectorGet( &ref_rgn->ranges, range_idx );
+                if ( r != NULL )
+                {
+                    INSDC_coord_len len;
+                    if ( r->start == 0 && r->end == 0 )
+                    {
+                        r->start = 1;
+                        rctx->rc = ReferenceObj_SeqLength( ref_obj, &len );
+                        if ( rctx->rc == 0 )
+                            r->end = ( r->start + len );
+                    }
+                    else
+                    {
+                        len = ( r->end - r->start + 1 );
+                    }
+                    if ( rctx->rc == 0 )
+                    {
+                        rctx->rc = add_pl_iters( rctx->opts, rctx->set_iter, ref_obj, rctx->idb,
+                            r->start,           /* where the range starts on the reference */
+                            len,                /* the length of this range */
+                            NULL,               /* no spotgroup re-grouping (yet) */
+                            rctx->context_list
+                            );
+                    }
+                }
+            }
+            ReferenceObj_Release( ref_obj );
+        }
+        else
+        {
+            if ( GetRCState( rctx->rc ) == rcNotFound ) rctx->rc = 0;
+        }
+    }
+}
+
+
+static rc_t prepare_regions( const samdump_opts * const opts,
+                             const input_files * const ifs,
+                             PlacementSetIterator * const set_iter,
+                             Vector * const context_list )
+{
+    uint32_t db_idx;
+    on_region_ctx rctx;
+
+    rctx.rc = 0;
+    rctx.opts = opts;
+    rctx.set_iter = set_iter;
+    rctx.context_list = context_list;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rctx.rc == 0; ++db_idx )
+    {
+        rctx.idb = VectorGet( &ifs->dbs, db_idx );
+        if ( rctx.idb != NULL )
+            BSTreeForEach( ( BSTree * ) &opts->regions, false, on_region, &rctx );
+    }
+    return rctx.rc;
+}
+
+
+static uint32_t calc_mate_flags( uint32_t flags )
+{
+    uint32_t res = ( flags & 0x1 ) |
+                   ( flags & 0x2 ) |
+                   ( ( flags & 0x8 ) >> 1 ) |
+                   ( ( flags & 0x4 ) << 1 ) |
+                   ( ( flags & 0x20 ) >> 1 ) |
+                   ( ( flags & 0x10 ) << 1 ) |
+                   ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+                   ( flags & 0x700 );
+    return res;
+}
+
+
+static const char *equal_sign = "=";
+
+
+static rc_t print_qslice( const samdump_opts * const opts,
+                          bool reverse,
+                          const char * source,
+                          uint32_t source_str_len,
+                          uint32_t * source_offset,
+                          const uint32_t * source_len_vector,
+                          uint32_t source_len_vector_len,
+                          uint32_t slice_nr )
+{
+    rc_t rc = 0;
+    if ( *source_offset > source_str_len || slice_nr >= source_len_vector_len )
+        rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcInvalid );
+    else
+    {
+        uint32_t len = source_len_vector[ slice_nr ];
+        if ( len > 0 )
+        {
+            const char * ptr = &source[ *source_offset ];
+            rc = dump_quality_33( opts, ptr, len, reverse ); /* sam-dump-opts.c */
+            if ( rc == 0 )
+            {
+                rc = KOutMsg( "" );
+                if ( rc == 0 )
+                    *source_offset += len;
+            }
+        }
+        else
+            rc = KOutMsg( "*" );
+    }
+    return rc;
+}
+
+
+static rc_t modify_and_print_cigar( const char * cigar,
+                                    size_t cigar_len,
+                                    CigOps *ref_cig,
+                                    int32_t ref_cig_len,
+                                    INSDC_coord_zero ref_pos,
+                                    uint32_t read_len )
+{
+    rc_t rc;
+    if ( cigar_len > 0 )
+    {
+        char cigbuf[ MAX_CG_CIGAR_LEN ];
+        CigOps al_cig[ 1024 ];
+        ExplodeCIGAR( al_cig, 1024, cigar, cigar_len );
+        CombineCIGAR( cigbuf, al_cig, read_len, ref_pos, ref_cig, ref_cig_len );
+        rc = KOutMsg( "%s\t", cigbuf );
+    }
+    else
+        rc = KOutMsg( "*\t" );
+    return rc;
+}
+
+
+static rc_t get_READ_QUALITY_EDIT_DIST( cg_cigar_output * cgc_output,
+                                        int64_t align_id,
+                                        const align_cmn_context * acc )
+{
+    /* get READ, QUALITY and EIDT_DIST before cigar manipulation because we need/change these values */
+    rc_t rc = read_char_ptr( align_id, acc->cursor, acc->read_idx, &cgc_output->p_read.ptr, &cgc_output->p_read.len, "READ" );
+    if ( rc == 0 )
+        rc = read_char_ptr( align_id, acc->cursor, acc->sam_quality_idx, &cgc_output->p_quality.ptr, &cgc_output->p_quality.len, "SAM_QUALITY" );
+    if ( rc == 0 )
+        rc = read_int32( align_id, acc->cursor, acc->edit_dist_idx, &cgc_output->edit_dist, 0, "EDIT_DIST" );
+    cgc_output->p_tags.len = 0;
+    return rc;
+}
+
+
+static rc_t read_ref_orientation_and_seq_read_id( cg_cigar_input * cgc_input,
+                                                  int64_t align_id,
+                                                  const align_cmn_context * acc )
+{
+    rc_t rc = read_bool( align_id, acc->cursor, acc->ref_orientation_idx, &cgc_input->orientation, false, "REF_ORIENT" );
+    if ( rc == 0 )
+        rc = read_INSDC_coord_one( align_id, acc->cursor, acc->seq_read_id_idx, &cgc_input->seq_req_id, 0, "SEQ_READ_ID" );
+    return rc;
+}
+
+/* this function expects:
+    READ        in : cgc_output->p_read.ptr, cgc_output->p_read.len
+    SAM_QUALITY in : cgc_output->p_quality.ptr, cgc_output->p_quality.len
+    CIGAR       in : cgc_input->p_cigar.ptr, cgc_input->p_cigar.len
+    EDIT_DIST   in : cgc_output->edit_dist
+*/
+static rc_t cg_cigar_treatments( enum cigar_treatment what_treatment,
+                                 cg_cigar_input * cgc_input,
+                                 cg_cigar_output * cgc_output,
+                                 int64_t align_id,
+                                 const align_cmn_context * acc )
+{
+    rc_t rc = 0;
+    switch ( what_treatment )
+    {
+        case ct_unchanged : cgc_output->p_cigar.len  = cgc_input->p_cigar.len;
+                            cgc_output->p_cigar.ptr = cgc_input->p_cigar.ptr;
+                            break;
+
+        case ct_cg_style  : rc = read_ref_orientation_and_seq_read_id( cgc_input, align_id, acc );
+                            if ( rc == 0 )
+                            {
+                                cgc_input->edit_dist_available = true;
+                                cgc_input->edit_dist = cgc_output->edit_dist;
+                                rc = make_cg_cigar( cgc_input, cgc_output );
+                                if ( rc == 0 )
+                                {
+                                    cgc_output->p_cigar.len = cgc_output->cigar_len;
+                                    cgc_output->p_cigar.ptr = cgc_output->cigar;
+                                }
+                            }
+                            break;
+
+        case ct_cg_merge :  rc = read_ref_orientation_and_seq_read_id( cgc_input, align_id, acc );
+                            if ( rc == 0 )
+                            {
+                                cgc_input->p_read.ptr = cgc_output->p_read.ptr;
+                                cgc_input->p_read.len = cgc_output->p_read.len;
+                                cgc_input->p_quality.ptr = cgc_output->p_quality.ptr;
+                                cgc_input->p_quality.len = cgc_output->p_quality.len;
+                                cgc_input->edit_dist_available = true;
+                                cgc_input->edit_dist = cgc_output->edit_dist;
+                                rc = make_cg_merge( cgc_input, cgc_output );
+                                if ( rc == 0 )
+                                {
+                                    cgc_output->p_cigar.len = cgc_output->cigar_len;
+                                    cgc_output->p_cigar.ptr = cgc_output->cigar;
+                                }
+                            }
+                            break;
+    }
+    return rc;
+}
+
+
+static rc_t print_quality_or_star( const samdump_opts * const opts,
+                                   const char * const q,
+                                   uint32_t q_len,
+                                   uint32_t r_len )
+{
+    rc_t rc;
+    bool star_qual = ( q_len == 0 || q_len != r_len );
+    if ( !star_qual && q[ 0 ] == 255 )
+    {
+        uint32_t i = 0;
+        while ( i < q_len && q[ i ] == 255 ) i++;
+        star_qual = ( i == q_len );
+    }
+    
+    if ( star_qual )
+        rc = KOutMsg( "*" );
+    else
+        rc = dump_quality_33( opts, q, q_len, false ); /* sam-dump-opts.c */
+
+    return rc;
+}
+    
+
+/* triggered by option "--CG-SAM" */
+static rc_t print_evidence_alignment_cg_sam( const samdump_opts * const opts,
+                                             const PlacementRecord * const rec,
+                                             const align_table_context * const atx,
+                                             int64_t align_id,
+                                             uint32_t ploidy_idx,
+                                             const char * ref_name,
+                                             INSDC_coord_zero allele_pos,
+                                             int32_t ref_cig_len )
+{
+    const VCursor * cursor = atx->eval.cursor;
+    INSDC_coord_zero ref_pos;
+    uint32_t seq_name_len, sam_flags, spot_group_len = 0;
+    const char * seq_name, * spot_group;
+    int32_t mapq;
+    cg_cigar_output cgc_output;
+
+    rc_t rc = read_char_ptr( align_id, cursor, atx->seq_name_idx, &seq_name, &seq_name_len, "SEQ_NAME" );
+    if ( rc == 0 && atx->eval.seq_spot_group_idx != COL_NOT_AVAILABLE )
+        rc = read_char_ptr( align_id, cursor, atx->eval.seq_spot_group_idx, &spot_group, &spot_group_len, "SEQ_SPOT_GROUP" );
+
+    if ( rc == 0 )
+    {
+        if ( opts->print_cg_names )
+        {
+            if ( spot_group_len > 0 )
+                /* SAM-FIELD: QNAME     constructed from spot-group/seq-name */
+                rc = KOutMsg( "%.*s-1:%.*s\t", spot_group_len, spot_group, seq_name_len, seq_name );
+
+        }
+        else
+        {
+            if ( seq_name_len > 0 )
+                /* SAM-FIELD: QNAME     constructed from allel-id/sub-id */
+                rc = KOutMsg( "%.*s/ALLELE_%li.%u\t", seq_name_len, seq_name, rec->id, ploidy_idx );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = read_INSDC_coord_zero( align_id, cursor, atx->ref_pos_idx, &ref_pos, 0, "REF_POS" );
+
+    if ( rc == 0 )
+        rc = read_int32( align_id, cursor, atx->mapq_idx, &mapq, 0, "MAPQ" );
+
+    if ( rc == 0 )
+    {
+        uint8_t ref_orient;
+        rc = read_uint8( align_id, cursor, atx->eval.ref_orientation_idx, &ref_orient, 0, "REF_ORIENT" );
+        if ( rc == 0 )
+        {
+            INSDC_coord_one seq_read_id;
+            bool cmpl = ref_orient;
+            rc = read_INSDC_coord_one( align_id, cursor, atx->eval.seq_read_id_idx, &seq_read_id, 0, "SEQ_READ_ID" );
+            sam_flags = ( 1 | ( cmpl ? 0x10 : 0 ) | ( seq_read_id == 1 ? 0x40 : 0x80 ) );
+        }
+    }
+
+    /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+    /* SAM-FIELD: RNAME     SRA-column: ALLEL-NAME.ploidy_idx */
+    /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+    /* SAM-FIELD: MAPQ      SRA-column: MAPQ ( from evidence-alignment-table, not from allel! ) */
+    if ( rc == 0 )
+        rc = KOutMsg( "%u\t%s\t%i\t%d\t", sam_flags, ref_name, allele_pos + ref_pos + 1, mapq );
+
+    /* get READ, QUALITY and EIDT_DIST before cigar manipulation because we need/change these values */
+    if ( rc == 0 )
+        rc = get_READ_QUALITY_EDIT_DIST( &cgc_output, align_id, &atx->eval );
+
+    /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / with special treatment */
+    if ( rc == 0 )
+    {
+        cg_cigar_input cgc_input;
+        rc = read_char_ptr( align_id, cursor, atx->eval.cigar_idx, &cgc_input.p_cigar.ptr, &cgc_input.p_cigar.len, "CIGAR" );
+        if ( rc == 0 )
+            rc = cg_cigar_treatments( opts->cigar_treatment, &cgc_input, &cgc_output, align_id, &atx->eval );
+        if ( rc == 0 )
+            rc = modify_and_print_cigar( cgc_output.p_cigar.ptr, cgc_output.p_cigar.len,
+                                         atx->cig_op_buffer, ref_cig_len, ref_pos, cgc_output.p_read.len );
+    }
+
+    /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME '*' no mates! */
+    /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 '0' no mates */
+    /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN '0' not in table */
+    /* SAM-FIELD: SEQ       SRA-column: READ  */
+    if ( rc == 0 )
+        rc = KOutMsg( "*\t0\t0\t%.*s\t", cgc_output.p_read.len, cgc_output.p_read.ptr );
+
+    /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY */
+    if ( rc == 0 )
+        rc = print_quality_or_star( opts, cgc_output.p_quality.ptr, cgc_output.p_quality.len, cgc_output.p_read.len ); /* above */
+    
+    /* OPT SAM-FIELD: RG     SRA-column: SEQ_SPOT_GROUP */
+    if ( rc == 0 && spot_group_len > 0 )
+        rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+    if ( rc == 0 && cgc_output.p_tags.len > 0 )
+        rc = KOutMsg( "\t%.*s", cgc_output.p_tags.len, cgc_output.p_tags.ptr );
+
+    /* OPT SAM-FIELD: ZI     SRA-column: rec->id */
+    /* OPT SAM-FIELD: ZA     SRA-column: ploidy_idx */
+    if ( rc == 0 )
+        rc = KOutMsg( "\tZI:i:%li\tZA:i:%u", rec->id, ploidy_idx );
+
+    /* OPT SAM-FIELD: NH     SRA-column: ALIGNMENT_COUNT */
+    if ( rc == 0 && atx->eval.al_count_idx != COL_NOT_AVAILABLE )
+    {
+        const uint8_t * al_count;
+        uint32_t al_count_len;
+        rc = read_uint8_ptr( align_id, cursor, atx->eval.al_count_idx, &al_count, &al_count_len, "ALIGNMENT_COUNT" );
+        if ( rc == 0 && al_count_len > 0 )
+            rc = KOutMsg( "\tNH:i:%u", *al_count );
+    }
+
+    /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE */
+    if ( rc == 0 )
+        rc = KOutMsg( "\tNM:i:%u", cgc_output.edit_dist );
+
+    /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+    if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+        rc = KOutMsg( "\tXI:i:%u", align_id );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    return rc;
+}
+
+
+/*  triggered by option --CG-evidence-dnb */
+static rc_t print_evidence_alignment_cg_ev_dnb( const samdump_opts * const opts,
+                                                const PlacementRecord * const rec,
+                                                const align_table_context * const atx,
+                                                int64_t align_id,
+                                                uint32_t ploidy_idx )
+{
+    const VCursor * cursor = atx->eval.cursor;
+    INSDC_coord_zero ref_pos;
+    uint32_t seq_name_len, sam_flags, spot_group_len = 0;
+    int32_t mapq;
+    const char * seq_name, * spot_group;
+    cg_cigar_output cgc_output;
+
+    rc_t rc = read_char_ptr( align_id, cursor, atx->seq_name_idx, &seq_name, &seq_name_len, "SEQ_NAME" );
+    if ( rc == 0 && atx->eval.seq_spot_group_idx != COL_NOT_AVAILABLE )
+        rc = read_char_ptr( align_id, cursor, atx->eval.seq_spot_group_idx, &spot_group, &spot_group_len, "SEQ_SPOT_GROUP" );
+
+    if ( rc == 0 )
+    {
+        if ( opts->print_cg_names )
+        {
+            if ( spot_group_len > 0 )
+                /* SAM-FIELD: QNAME     constructed from spot-group/seq-name */
+                rc = KOutMsg( "%.*s-1:%.*s\t", spot_group_len, spot_group, seq_name_len, seq_name );
+
+        }
+        else
+        {
+            if ( seq_name_len > 0 )
+                /* SAM-FIELD: QNAME     constructed from allel-id/sub-id */
+                rc = KOutMsg( "%.*s/ALLELE_%li.%u\t", seq_name_len, seq_name, rec->id, ploidy_idx );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = read_INSDC_coord_zero( align_id, cursor, atx->ref_pos_idx, &ref_pos, 0, "REF_POS" );
+
+    if ( rc == 0 )
+        rc = read_int32( align_id, cursor, atx->mapq_idx, &mapq, 0, "MAPQ" );
+
+    if ( rc == 0 )
+    {
+        uint8_t ref_orient;
+        rc = read_uint8( align_id, cursor, atx->eval.ref_orientation_idx, &ref_orient, 0, "REF_ORIENT" );
+        if ( rc == 0 )
+        {
+            INSDC_coord_one seq_read_id;
+            bool cmpl = ref_orient;
+            rc = read_INSDC_coord_one( align_id, cursor, atx->eval.seq_read_id_idx, &seq_read_id, 0, "SEQ_READ_ID" );
+            sam_flags = ( 1 | ( cmpl ? 0x10 : 0 ) | ( seq_read_id == 1 ? 0x40 : 0x80 ) );
+        }
+    }
+
+    /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+    /* SAM-FIELD: RNAME     SRA-column: ALLEL-NAME.ploidy_idx */
+    /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+    /* SAM-FIELD: MAPQ      SRA-column: MAPQ ( from evidence-alignment-table, not from allel! ) */
+    if ( rc == 0 )
+        rc = KOutMsg( "%u\tALLELE_%li.%u\t%i\t%d\t", sam_flags, rec->id, ploidy_idx, ref_pos + 1, mapq );
+
+    /* get READ, QUALITY and EIDT_DIST before cigar manipulation because we need/change these values */
+    if ( rc == 0 )
+        rc = get_READ_QUALITY_EDIT_DIST( &cgc_output, align_id, &atx->eval );
+
+    /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / with or without treatment */
+    if ( rc == 0 )
+    {
+        cg_cigar_input cgc_input;
+        rc = read_char_ptr( align_id, cursor, atx->eval.cigar_idx, &cgc_input.p_cigar.ptr, &cgc_input.p_cigar.len, "CIGAR" );
+        if ( rc == 0 )
+        rc = cg_cigar_treatments( opts->cigar_treatment, &cgc_input, &cgc_output, align_id, &atx->eval );
+        if ( rc == 0 )
+            rc = cg_canonical_print_cigar( cgc_output.p_cigar.ptr, cgc_output.p_cigar.len);
+        if(rc == 0) rc = KOutMsg( "\t");
+    }
+
+    /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME '*' no mates! */
+    /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 '0' no mates */
+    /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN '0' not in table */
+    /* SAM-FIELD: SEQ       SRA-column: READ  */
+    if ( rc == 0 )
+        rc = KOutMsg( "*\t0\t0\t%.*s\t", cgc_output.p_read.len, cgc_output.p_read.ptr );
+
+    /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY */
+    if ( rc == 0 )
+        rc = print_quality_or_star( opts, cgc_output.p_quality.ptr, cgc_output.p_quality.len, cgc_output.p_read.len ); /* above */
+    
+    /* OPT SAM-FIELD: RG     SRA-column: SEQ_SPOT_GROUP */
+    if ( rc == 0 && spot_group_len > 0 )
+        rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+    if ( rc == 0 && cgc_output.p_tags.len > 0 )
+        rc = KOutMsg( "\t%.*s", cgc_output.p_tags.len, cgc_output.p_tags.ptr );
+
+    /* OPT SAM-FIELD: NH     SRA-column: ALIGNMENT_COUNT */
+    if ( rc == 0 && atx->eval.al_count_idx != COL_NOT_AVAILABLE )
+    {
+        const uint8_t * al_count;
+        uint32_t al_count_len;
+        rc = read_uint8_ptr( align_id, cursor, atx->eval.al_count_idx, &al_count, &al_count_len, "ALIGNMENT_COUNT" );
+        if ( rc == 0 && al_count_len > 0 )
+            rc = KOutMsg( "\tNH:i:%u", *al_count );
+    }
+
+    /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE */
+    if ( rc == 0 )
+        rc = KOutMsg( "\tNM:i:%u", cgc_output.edit_dist );
+
+    /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+    if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+        rc = KOutMsg( "\tXI:i:%u", align_id );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    return rc;
+}
+
+
+/* print minimal one alignment from the EVIDENCE-INTERVAL / EVIDENCE-ALIGNMENT - table(s) 
+   triggered by option "--CG-SAM / --CG-evidence / --CG-evidence-dnb */
+static rc_t print_alignment_sam_ev( const samdump_opts * const opts,
+                                    const char * ref_name,
+                                    INSDC_coord_zero pos,
+                                    const PlacementRecord * const rec,
+                                    align_table_context * const atx )
+{
+    uint32_t ploidy;
+    const VCursor * cursor = atx->cmn.cursor;
+    rc_t rc = read_uint32( rec->id, cursor, atx->ploidy_idx, &ploidy, 0, "PLOIDY" );
+    if ( rc == 0 && ploidy > 0 )
+    {
+        uint32_t ploidy_idx, cigar_len_vector_len, read_len_vector_len, edit_dist_vector_len, cigar_str_len, read_len, quality_str_len;
+        uint32_t quality_offset = 0;
+        const uint32_t *cigar_len_vector, *read_len_vector, *edit_dist_vector;
+        const char * cigar, *read, *quality;
+        char * transformed_cigar = NULL;
+        char * org_transformed_cigar = NULL;
+        
+        rc = read_char_ptr( rec->id, cursor, atx->cmn.cigar_idx, &cigar, &cigar_str_len, "CIGAR" );
+        if ( rc == 0 )
+        {
+            org_transformed_cigar = string_dup ( cigar, cigar_str_len );
+            if ( org_transformed_cigar != NULL )
+            {
+                uint32_t i;
+                for ( i = 0; i < cigar_str_len; ++i )
+                {
+                    if ( org_transformed_cigar[ i ] == 'S' ) org_transformed_cigar[ i ] = 'I';
+                }
+                transformed_cigar = org_transformed_cigar;
+            }
+        }
+        
+        if ( rc == 0 )
+            rc = read_uint32_ptr( rec->id, cursor, atx->cmn.cigar_len_idx, &cigar_len_vector, &cigar_len_vector_len, "CIGAR_LEN" );
+        if ( rc == 0 )
+            rc = read_char_ptr( rec->id, cursor, atx->cmn.read_idx, &read, &read_len, "READ" );
+        if ( rc == 0 )
+            rc = read_uint32_ptr( rec->id, cursor, atx->cmn.read_len_idx, &read_len_vector, &read_len_vector_len, "READ_LEN" );
+        if ( rc == 0 )
+            rc = read_char_ptr( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_str_len, "QUALITY" );
+        if ( rc == 0 )
+            rc = read_uint32_ptr( rec->id, cursor, atx->cmn.edit_dist_idx, &edit_dist_vector, &edit_dist_vector_len, "EDIT_DIST" );
+
+        for ( ploidy_idx = 0; ploidy_idx < ploidy && rc == 0; ++ploidy_idx )
+        {
+            uint32_t cigar_slice_len = cigar_len_vector[ ploidy_idx ];
+            uint32_t read_slice_len = read_len_vector[ ploidy_idx ];
+            if ( opts->dump_cg_evidence )
+            {
+                /* SAM-FIELD: QNAME     SRA-column: eventually prefixed row-id into EVIDENCE_INTERVAL - table */
+                /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+                /* SAM-FIELD: RNAME     SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+                /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+                /* SAM-FIELD: MAPQ      SRA-column: MAPQ */
+                if ( rc == 0 )
+                {
+                    if ( opts->print_cg_names )
+                        rc = KOutMsg( "-1:0\t" );
+                    else
+                        rc = KOutMsg( "ALLELE_%li.%u\t", rec->id, ploidy_idx + 1 );
+                }
+
+                if ( rc == 0 )
+                    rc = KOutMsg( "0\t%s\t%u\t%d\t", ref_name, pos + 1, rec->mapq );
+
+                /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / CIGAR_LONG sliced!!! */
+                if ( rc == 0 )
+                    rc = KOutMsg( "%.*s\t", cigar_slice_len, transformed_cigar );
+
+                /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+                /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+                /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+                /* SAM-FIELD: SEQ       SRA-column: READ sliced!!! */
+                if ( rc == 0 )
+                    rc = KOutMsg( "*\t0\t0\t%.*s\t", read_slice_len, read );
+
+                /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY sliced!!! */
+                if ( rc == 0 )
+                {
+                    if ( quality_str_len == read_slice_len )
+                        rc = print_qslice( opts, false, quality, quality_str_len, &quality_offset, read_len_vector, read_len_vector_len, ploidy_idx );
+                    else
+                        rc = KOutMsg( "*" );
+                }
+                
+                /* OPT SAM-FIELD: RG     SRA-column: ploidy_idx */
+                if ( rc == 0 )
+                    rc = KOutMsg( "\tRG:Z:ALLELE_%u", ploidy_idx + 1 );
+
+                /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+                if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                    rc = KOutMsg( "\tXI:i:%u", rec->id );
+
+                /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE sliced!!! */
+                if ( rc == 0 && ( ploidy_idx < edit_dist_vector_len ) )
+                    rc = KOutMsg( "\tNM:i:%u", edit_dist_vector[ ploidy_idx ] );
+
+                if ( rc == 0 )
+                    rc = KOutMsg( "\n" );
+            }
+
+            /* we do that here per ALLEL-READ, not at the end per ALLEL, because we have to test which alignments
+               fit the ploidy_idx */
+
+            if ( rc == 0 && ( opts->dump_cg_sam || opts->dump_cg_ev_dnb ) )
+            {
+                const int64_t *ev_al_ids;
+                uint32_t ev_al_ids_count, read_id;
+
+                rc = read_int64_ptr( rec->id, atx->cmn.cursor, atx->ev_alignments_idx, &ev_al_ids, &ev_al_ids_count, "EV_ALIGNMENTS" );
+                for ( read_id = 0; read_id < ev_al_ids_count && rc == 0; ++read_id )
+                {
+                    uint32_t ref_ploidy;
+                    int64_t align_id = ev_al_ids[ read_id ];
+                    rc = read_uint32( align_id, atx->eval.cursor, atx->ref_ploidy_idx, &ref_ploidy, 0, "PLOIDY" );
+
+                    if ( rc == 0 && ( ref_ploidy == ( ploidy_idx + 1 ) ) )
+                    {
+                        if ( rc == 0 && opts->dump_cg_sam )
+                        {
+                            rc = adjust_align_table_context_cig_op_buffer( atx, read_slice_len );
+                            if ( rc == 0 )
+                            {
+                                int32_t ref_cig_len = ExplodeCIGAR( atx->cig_op_buffer, atx->cig_op_buffer_len, cigar, cigar_slice_len );
+                                rc = print_evidence_alignment_cg_sam( opts, rec, atx, align_id, ploidy_idx + 1, ref_name, pos, ref_cig_len );
+                            }
+                        }
+
+                        if ( rc == 0 && opts->dump_cg_ev_dnb )
+                            rc = print_evidence_alignment_cg_ev_dnb( opts, rec, atx, align_id, ploidy_idx + 1 );
+                    }
+                }
+            }
+
+            /* advance the cigar-slice... */
+            cigar += cigar_slice_len;
+            if ( transformed_cigar != NULL )
+                transformed_cigar += cigar_slice_len;
+            read += read_slice_len;
+        }
+        if ( org_transformed_cigar != NULL )
+            free( org_transformed_cigar );
+    }
+    return rc;
+}
+
+
+static rc_t opt_field_spot_group( const VCursor * cursor, uint32_t col_id, int64_t row_id )
+{
+    const char * value = NULL;
+    uint32_t len;    
+    rc_t rc = read_char_ptr( row_id, cursor, col_id, &value, &len, "SPOT_GROUP" );
+    if ( rc == 0 && len > 0 )
+        rc = KOutMsg( "\tRG:Z:%.*s", len, value );
+    return rc;
+}
+
+
+static rc_t opt_field_lnk_group( const VCursor * cursor, uint32_t col_id, int64_t row_id )
+{
+    const char * value = NULL;
+    uint32_t len;    
+    rc_t rc = read_char_ptr( row_id, cursor, col_id, &value, &len, "LINKAGE_GROUP" );
+    if ( rc == 0 && len > 0 )
+    {
+        enum { ofl_norm, ofl_cb1, ofl_cb2, ofl_cb3, ofl_cb4, ofl_ub1, ofl_ub2, ofl_ub3, ofl_ub4 };
+        
+        String CB, UB;
+        uint32_t idx, state;
+        
+        StringInit( &CB, NULL, 0, 0 );
+        StringInit( &UB, NULL, 0, 0 );
+        for ( idx = 0, state = ofl_norm; idx < len; ++idx )
+        {
+            switch ( state )
+            {
+                case ofl_norm : state = ( value[ idx ] == 'C' ) ? ofl_cb1 : ofl_norm; break;
+                case ofl_cb1  : state = ( value[ idx ] == 'B' ) ? ofl_cb2 : ofl_norm; break;
+                case ofl_cb2  : state = ( value[ idx ] == ':' ) ? ofl_cb3 : ofl_norm; break;
+                case ofl_cb3  : if ( value[ idx ] == '|' )
+                                    state = ofl_ub1;
+                                else
+                                {
+                                    if ( CB.addr == NULL )
+                                        { StringInit( &CB, &value[ idx ], 1, 1 ); }
+                                    else
+                                        { CB.len += 1; CB.size += 1; }
+                                }
+                                break;
+                case ofl_ub1  : state = ( value[ idx ] == 'U' ) ? ofl_ub2 : ofl_norm; break;
+                case ofl_ub2  : state = ( value[ idx ] == 'B' ) ? ofl_ub3 : ofl_norm; break;
+                case ofl_ub3  : state = ( value[ idx ] == ':' ) ? ofl_ub4 : ofl_norm; break;
+                case ofl_ub4  : if ( UB.addr == NULL )
+                                    { StringInit( &UB, &value[ idx ], 1, 1 ); }
+                                else
+                                    { UB.len += 1; UB.size += 1; }
+                                break;
+            }
+        }
+        
+        if ( CB.addr == NULL && UB.addr == NULL )
+            { rc = KOutMsg( "\tBX:Z:%.*s", len, value ); }
+        else
+            { rc = KOutMsg( "\tCB:Z:%S\tUB:Z:%S", &CB, &UB ); }
+    }
+    return rc;
+}
+
+static rc_t print_alignment_sam_ps( const samdump_opts * const opts,
+                                    const char * ref_name,
+                                    INSDC_coord_zero pos,
+                                    matecache * const mc,
+                                    struct rna_splice_dict * splice_dict,
+                                    const PlacementRecord * const rec,
+                                    const align_table_context * const atx )
+{
+    uint32_t sam_flags = 0, NM_adjustments = 0, seq_spot_id_len, mate_ref_pos_len = 0, mate_ref_name_len = string_size( ref_name );
+    INSDC_coord_zero mate_ref_pos = 0;
+    INSDC_coord_len tlen = 0;
+    int64_t mate_align_id = 0, id = rec->id;
+    const int64_t * seq_spot_id;
+    const char * mate_ref_name = ref_name;
+    const VCursor * cursor = atx->cmn.cursor;
+    cg_cigar_output cgc_output;
+    rna_splice_candidates candidates; /* in cg_tools.h */
+    bool rna_not_homogeneous_flag = false;
+
+    /* SAM-FIELD: NONE      SRA-column: MATE_ALIGN_ID ( int64 ) ... for cache lookup's */
+    rc_t rc = read_int64( id, cursor, atx->mate_align_id_idx, &mate_align_id, 0, "MATE_ALIGN_ID" );
+
+    candidates.count = 0;
+    candidates.fwd_matched = 0;
+    candidates.rev_matched = 0;
+
+    /* pre-read seq-spot-id, needed for unaligned cache and SAM-field QNAME */
+    if ( rc == 0 )
+        rc = read_int64_ptr( id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len, "SEQ_SPOT_ID" );
+
+    /* try to find the info about the mate in the CACHE... */
+    if ( rc == 0 )
+    {
+        if ( mate_align_id != 0 )
+        {
+            if ( opts->use_mate_cache && mc != NULL )
+            {
+                rc = matecache_lookup_same_ref( mc, atx->db_idx, mate_align_id, &mate_ref_pos, &sam_flags, &tlen );
+                if ( rc == 0 )
+                {
+                    /* we found it in the the sam-ref-matecache */
+                    const INSDC_read_filter * read_filter;
+                    uint32_t read_filter_len;
+
+                    /* cache entry-found! (on the same reference) -> that means we have now mate_ref_pos, flags and tlen */
+                    matecache_remove_same_ref( mc, atx->db_idx, mate_align_id );
+                    mate_ref_name = equal_sign;
+                    mate_ref_name_len = 1;
+                    mate_ref_pos_len = 1;
+
+                    /* read the read-filter column and adjust the sam-flags value to reflect the presense
+                       of the flag SRA_READ_FILTER_REJECT, if it is there switch 0x200 on, of not switch 0x200 off */
+                    rc = read_INSDC_read_filter_ptr( id, cursor, atx->cmn.read_filter_idx, &read_filter, &read_filter_len, "RD_FILTER" );
+                    if ( rc == 0 && read_filter_len > 0 )
+                    {
+                        if ( ( read_filter[ 0 ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+                            sam_flags |= 0x200;
+                        else
+                            sam_flags &= ~0x200;
+
+                        if ( ( read_filter[ 0 ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+                            sam_flags |= 0x400;
+                        else
+                            sam_flags &= ~0x400;
+                    }
+                }
+                else
+                {
+                    /* we did not find it in the the sam-ref-matecache */
+                    rc = RC( rcApp, rcNoTarg, rcAccessing, rcItem, rcNotFound );
+                }
+            }
+            else
+            {
+                rc = RC( rcApp, rcNoTarg, rcAccessing, rcItem, rcNotFound );
+            }
+        }
+
+        if ( ( mate_align_id != 0 && GetRCState( rc ) == rcNotFound )||( mate_align_id == 0 ) )
+        {
+            /* no cache entry-found OR do not use mate-cache
+               ---> that means we have to read it from the table... */
+
+            rc = read_char_ptr( id, cursor, atx->mate_ref_name_idx, &mate_ref_name, &mate_ref_name_len, "MATE_REF_NAME" );
+            if ( rc == 0 )
+                rc = read_INSDC_coord_zero( id, cursor, atx->mate_ref_pos_idx, &mate_ref_pos, 0, "MATE_REF_POS" );
+            if ( rc == 0 )
+                rc = read_INSDC_coord_len( id, cursor, atx->tlen_idx, &tlen, 0, "TLEN" );
+            if ( rc == 0 )
+                rc = read_uint32( id, cursor, atx->sam_flags_idx, &sam_flags, 0, "SAM_FLAGS" );
+
+            if ( rc == 0 )
+            {
+                int32_t cmp = -1;
+                if ( mate_ref_name_len > 0 )
+                {
+                    size_t ref_name_len = string_size( ref_name );
+                    size_t cmp_len = ( mate_ref_name_len > ref_name_len ? mate_ref_name_len : ref_name_len );
+                    cmp = string_cmp( mate_ref_name, mate_ref_name_len, ref_name, ref_name_len, cmp_len );
+                    if ( cmp == 0 )
+                    {
+                        mate_ref_name = equal_sign;
+                        mate_ref_name_len = 1;
+                    }
+                }
+
+                if ( opts->use_mate_cache )
+                {
+                    if ( mate_align_id != 0 && mate_ref_name_len > 0 && cmp == 0 )
+                    {
+                        /* now that we have the data, store it in sam-ref-cache it the mate is on the same ref. */
+                        uint32_t mate_flags = calc_mate_flags( sam_flags );
+                        rc = matecache_insert_same_ref( mc, atx->db_idx, id, pos, mate_flags, -tlen );
+                    }
+
+                    if ( mate_align_id == 0 && mate_ref_name_len == 0 && opts->print_half_unaligned_reads &&
+                         atx->align_table_type == att_primary )
+                    {
+                        int64_t key = id;
+                        rc = matecache_insert_unaligned( mc, atx->db_idx, key, pos, atx->ref_idx, *seq_spot_id );
+                    }
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && opts->use_matepair_filter && !filter_by_matepair_dist( opts, tlen ) )
+        return 0;
+
+    /* SAM-FIELD: QNAME     SRA-column: SEQ_SPOT_ID ( int64 ) */
+    if ( rc == 0 )
+    {
+        if ( seq_spot_id_len > 0 )
+        {
+            if ( opts->print_spot_group_in_name | opts->print_cg_names )
+            {
+                const char * spot_group;
+                uint32_t spot_group_len;
+                rc = read_char_ptr( id, cursor, atx->cmn.seq_spot_group_idx, &spot_group, &spot_group_len, "SPOT_GROUP" );
+                if ( rc == 0 )
+                    rc = dump_name( opts, *seq_spot_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+            }
+            else
+                rc = dump_name( opts, *seq_spot_id, NULL, 0 ); /* sam-dump-opts.c */
+        }
+        else
+            rc = KOutMsg( "*" );
+    }
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\t" );
+
+    /* massage the sam-flag if we are not dumping unaligned reads... */
+    if ( !opts->dump_unaligned_reads    /** not going to dump unaligned **/
+         && ( sam_flags & 0x1 )         /** but we have sequenced multiple fragments **/
+         && ( sam_flags & 0x8 ) )       /** and not all of them align **/
+        /*** remove flags talking about multiple reads **/
+        /* turn off 0x001 0x008 0x040 0x080 */
+        sam_flags &= ~0xC9;
+
+    /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+    /* SAM-FIELD: RNAME     SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+    /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+    /* SAM-FIELD: MAPQ      SRA-column: MAPQ */
+    if ( rc == 0 )
+        rc = KOutMsg( "%u\t%s\t%u\t%d\t", sam_flags, ref_name, pos + 1, rec->mapq );
+
+    /* get READ, QUALITY and EIDT_DIST before cigar manipulation because we need/change these values */
+    if ( rc == 0 )
+        rc = get_READ_QUALITY_EDIT_DIST( &cgc_output, id, &atx->cmn );
+
+    /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / with or without treatment */
+    if ( rc == 0 )
+    {
+        cg_cigar_input cgc_input;
+        char * temp_cigar = NULL;
+        static char const *bogus_quality = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
+
+        rc = read_char_ptr( id, cursor, atx->cmn.cigar_idx, &cgc_input.p_cigar.ptr, &cgc_input.p_cigar.len, "CIGAR" );
+        if ( rc == 0 )
+        {
+            if ( cgc_output.p_quality.len == 0 )
+            {
+                cgc_output.p_quality.ptr = bogus_quality;
+                cgc_output.p_quality.len = 35;
+            }
+            rc = cg_cigar_treatments( opts->cigar_treatment, &cgc_input, &cgc_output, id, &atx->cmn );
+        }
+
+        if ( opts->rna_splicing )
+        {
+            { /*** reset previous identification of N to D ***/
+                int i;
+                char *c = ( char * )cgc_output.p_cigar.ptr;
+                for( i = 0; i < cgc_output.p_cigar.len; i++ )
+                {
+                    if ( c[ i ] == 'N' ) c[ i ] = 'D';
+                }
+            }
+            
+            /* discover which cigar-operations could be a RNA-splice ( it is a D-operation with min length of 10 ) */
+            rc = discover_rna_splicing_candidates( cgc_output.p_cigar.len, cgc_output.p_cigar.ptr, 10, &candidates ); /* cg_tools.c */
+            if ( rc == 0 && candidates.count > 0 )
+            {
+                /* we discover by comparing against the reference if a candidate is a RNA-splice and if it is forward or reverse */
+                rc = check_rna_splicing_candidates_against_ref( rec->ref, opts->rna_splice_level, pos, &candidates ); /* cg_tools.c */
+                if ( rc == 0 && ( candidates.fwd_matched > 0 || candidates.rev_matched > 0 ) )
+                {
+                    /* set the warning-flag that we have an alignment with not homogeneous RNA-splices */
+                    if ( candidates.fwd_matched > 0 && candidates.rev_matched > 0 )
+                        rna_not_homogeneous_flag = true;
+
+                    temp_cigar = malloc( cgc_output.p_cigar.len + 1 ); /* temp_cigar will be released at the end of this block */
+                    if ( temp_cigar != NULL )
+                    {
+                        /* create a new cigarstring by applying the candidates to the cigar-string */
+                        rc = change_rna_splicing_cigar( cgc_output.p_cigar.len, temp_cigar, &candidates, &NM_adjustments ); /* cg_tools.c */
+                        if ( rc == 0 )
+                            cgc_output.p_cigar.ptr = temp_cigar;
+                    }
+                }
+
+                /* rna-splice-log */
+                if ( opts->rna_splice_log != NULL )
+                {
+                    /* record all the candidates... */
+                    uint32_t c_idx;
+                    for ( c_idx = 0; c_idx < candidates.count; c_idx++ )
+                    {
+                        rna_splice_candidate * candidate = &( candidates.candidates[ c_idx ] );
+                        splice_dict_entry entry;
+                        uint32_t intron_pos = pos + candidate->ref_offset;
+                        if ( rna_splice_dict_get( splice_dict, intron_pos, candidate->len, &entry ) )
+                        {
+                            entry.count += 1;
+                            rna_splice_dict_set( splice_dict, intron_pos, candidate->len, &entry );
+                        }
+                        else
+                        {
+                            entry.count = 1;
+                            entry.intron_type = candidate->matched;
+                            rna_splice_dict_set( splice_dict, intron_pos, candidate->len, &entry );
+                        }
+                    }
+                }
+
+            }
+            if ( candidates.cigops != NULL )
+                free( ( void * ) candidates.cigops );
+        }
+        if ( rc == 0 )
+            rc = KOutMsg( "%.*s\t", cgc_output.p_cigar.len, cgc_output.p_cigar.ptr );
+
+        if ( temp_cigar != NULL )
+            free( temp_cigar );
+    }
+
+    /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+    /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+    /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+    if ( rc == 0 )
+    {
+        if ( mate_ref_name_len > 0 )
+        {
+            rc = KOutMsg( "%.*s\t%u\t%d\t", mate_ref_name_len, mate_ref_name, mate_ref_pos + 1, tlen );
+        }
+        else
+        {
+            if ( mate_ref_pos_len == 0 )
+                rc = KOutMsg( "*\t0\t%d\t", tlen );
+            else
+                rc = KOutMsg( "*\t%u\t%d\t", mate_ref_pos, tlen );
+        }
+    }
+
+    /* SAM-FIELD: SEQ       SRA-column: READ */
+    if ( rc == 0 )
+        rc = KOutMsg( "%.*s\t", cgc_output.p_read.len, cgc_output.p_read.ptr );
+
+    /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY */
+    if ( rc == 0 )
+        rc = print_quality_or_star( opts, cgc_output.p_quality.ptr, cgc_output.p_quality.len, cgc_output.p_read.len ); /* above */    
+
+    /* OPT SAM-FIELD: RG     SRA-column: SPOT_GROUP */
+    if ( rc == 0 && ( atx->cmn.seq_spot_group_idx != COL_NOT_AVAILABLE ) )
+        rc = opt_field_spot_group( cursor, atx->cmn.seq_spot_group_idx, id );
+
+    /* OPT SAM-FIELD: BZ     SRA-column: LINKAGE_GROUP */
+    if ( rc == 0 && ( atx->lnk_group_idx != COL_NOT_AVAILABLE ) )
+        rc = opt_field_lnk_group( cursor, atx->lnk_group_idx, id );
+
+    if ( rc == 0 && cgc_output.p_tags.len > 0 )
+        rc = KOutMsg( "\t%.*s", cgc_output.p_tags.len, cgc_output.p_tags.ptr );
+
+    /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+    if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+        rc = KOutMsg( "\tXI:i:%u", id );
+
+    /* to match sam-tools output: in case we are dumping this in CG-mode.... */
+    if ( rc == 0 && ( opts->cigar_treatment != ct_unchanged ) && ( atx->al_group_idx != COL_NOT_AVAILABLE ) )
+    {
+        const char * align_grp;
+        uint32_t align_grp_len;
+        rc = read_char_ptr( id, cursor, atx->al_group_idx, &align_grp, &align_grp_len, "ALIGN_GROUP" );
+        if ( rc == 0 && align_grp_len > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; rc == 0 && i < align_grp_len - 1; ++i )
+            {
+                if ( align_grp[ i ] == '_' )
+                {
+                    rc = KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, align_grp, align_grp + i + 1 );
+                    break;
+                }
+            }
+        }
+    }
+    
+    /* OPT SAM-FIELD: NH     SRA-column: ALIGNMENT_COUNT */
+    if ( rc == 0 && atx->cmn.al_count_idx != COL_NOT_AVAILABLE )
+    {
+        const uint8_t * al_count;
+        uint32_t al_count_len;
+        rc = read_uint8_ptr( id, cursor, atx->cmn.al_count_idx, &al_count, &al_count_len, "ALIGNMENT_COUNT" );
+        if ( rc == 0 && al_count_len > 0 )
+            rc = KOutMsg( "\tNH:i:%u", *al_count );
+    }
+
+    /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE */
+    if ( rc == 0 )
+        rc = KOutMsg( "\tNM:i:%u", ( cgc_output.edit_dist - NM_adjustments ) );
+
+    /* OPT SAM-FIELD: XS:A:+/-  SRA-column: RNA-SPLICING detected via computation, or from the RNA_ORIENTATION - column */
+    if ( rc == 0 )
+    {
+        if ( opts->rna_splicing )
+        {
+            /* analysis of rna-splicing explicitly requested at the commandline */
+            if ( candidates.fwd_matched > 0 || candidates.rev_matched > 0 )
+            {
+                if ( candidates.fwd_matched > 0 )
+                    rc = KOutMsg( "\tXS:A:+" );
+                else 
+                    rc = KOutMsg( "\tXS:A:-" );
+            }
+        }
+        else
+        {
+            /* have a look if we have a RNA_ORIENTATION - column available */
+            if ( atx->rna_orientation_idx != COL_NOT_AVAILABLE )
+            {
+                const char * rna_orientation;
+                uint32_t rna_orientation_len;
+                rc = read_char_ptr( id, cursor, atx->rna_orientation_idx,
+                                    &rna_orientation, &rna_orientation_len, "RNA_ORIENTATION" );
+                if ( rc == 0 && rna_orientation_len > 0 )
+                {
+                    rc = KOutMsg( "\tXS:A:%c", rna_orientation[ 0 ] );
+                }
+            }
+        }
+    }
+
+    /* OPT SAM_FIELD: MD    reports Mismatches and Deletions */
+    if ( rc == 0 && opts->with_md_flag )
+    {
+        uint8_t * alig_ref = malloc( rec->len );
+        if ( alig_ref == NULL )
+            rc = RC( rcExe, rcNoTarg, rcAllocating, rcMemory, rcExhausted );
+        else
+        {
+            INSDC_coord_len ref_len;
+            rc = ReferenceObj_Read( rec->ref, pos, rec->len, alig_ref, &ref_len );
+            if ( rc == 0 )
+            {
+                rc = kout_md_tag_from_cigar_string( cgc_output.p_cigar.ptr, cgc_output.p_cigar.len, /* cigar */
+                        cgc_output.p_read.ptr, cgc_output.p_read.len,                               /* read */
+                        alig_ref, ref_len );                                                        /* reference */
+            }
+            free( alig_ref );
+        }
+    }
+    
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    /* print a log-info if have to because RNA-splicing is requested and we have not homogeneous bits */
+    if ( rna_not_homogeneous_flag )
+    {
+        KLogLevel tmp_lvl = KLogLevelGet();
+        KLogLevelSet( klogInfo );
+
+        (void)PLOGMSG( klogInfo, ( klogInfo, "not homogeneous RNA-splices found in alignment #$(an) at $(ref).$(pos)", 
+                        "an=%lu,ref=%s,pos=%u", id, ref_name, pos ) );
+
+        KLogLevelSet( tmp_lvl );
+    }
+
+    return rc;
+}
+
+
+static rc_t print_alignment_fastx( const samdump_opts * const opts,
+                                   const char * ref_name,
+                                   INSDC_coord_zero pos,
+                                   matecache * const mc,
+                                   const PlacementRecord * const rec,
+                                   const align_table_context * const atx )
+{
+    bool orientation;
+    const VCursor *cursor = atx->cmn.cursor;
+    int64_t mate_align_id;
+    const int64_t * seq_spot_id;
+    uint32_t seq_spot_id_len;
+
+    rc_t rc = read_int64_ptr( rec->id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len, "SEQ_SPOT_ID" );
+
+    /* this is here to detect if the mate is aligned, if NOT, we want to put it into the unaligned-cache! */
+    if ( rc == 0 && opts->print_half_unaligned_reads )
+    {
+        rc = read_int64( rec->id, cursor, atx->mate_align_id_idx, &mate_align_id, 0, "MATE_ALIGN_ID" );
+        if ( rc == 0 && mate_align_id == 0 && mc != NULL && opts->use_mate_cache )
+        {
+            rc = matecache_insert_unaligned( mc, atx->db_idx, rec->id, pos, atx->ref_idx, *seq_spot_id );
+        }
+    }
+
+    if ( opts->output_format == of_fastq )
+        rc = KOutMsg( "@" );
+    else
+        rc = KOutMsg( ">" );
+
+    /* SAM-FIELD: QNAME     1.row: name */
+    if ( rc == 0 )
+    {
+        if ( seq_spot_id_len > 0 )
+        {
+            if ( opts->print_spot_group_in_name )
+            {
+                const char * spot_grp;
+                uint32_t spot_grp_len;
+                rc = read_char_ptr( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_grp, &spot_grp_len, "SEQ_SPOT_GROUP" );
+                if ( rc == 0 )
+                    rc = dump_name( opts, *seq_spot_id, spot_grp, spot_grp_len ); /* sam-dump-opts.c */
+            }
+            else
+                rc = dump_name( opts, *seq_spot_id, NULL, 0 ); /* sam-dump-opts.c */
+        }
+        else
+            rc = KOutMsg( "*" );
+
+        if ( rc == 0 )
+        {
+            uint32_t seq_read_id;
+            rc = read_uint32( rec->id, cursor, atx->cmn.seq_read_id_idx, &seq_read_id, 0, "SEQ_READ_ID" );
+            if ( rc == 0 )
+                rc = KOutMsg( "/%u", seq_read_id );
+        }
+    }
+
+    /* SRA-column: REF_ORIENTATION ( bool ) ... needed for quality */
+    if ( rc == 0 )
+        rc = read_bool( rec->id, cursor, atx->cmn.ref_orientation_idx, &orientation, false, "REF_ORIENT" );
+
+    /* source of the alignment: primary/secondary/evidence */
+    if ( rc == 0 )
+    {
+        switch( atx->align_table_type )
+        {
+        case att_primary    :   rc = KOutMsg( " primary" ); break;
+        case att_secondary  :   rc = KOutMsg( " secondary" ); break;
+        case att_evidence   :   rc = KOutMsg( " evidence" ); break;
+        }
+    }
+
+    /* against what reference aligned, at what position, with what mapping-quality */
+    if ( rc == 0 )
+        rc = KOutMsg( " ref=%s pos=%u mapq=%i\n", ref_name, pos + 1, rec->mapq );
+
+    /* READ at a new line */
+    if ( rc == 0 )
+    {
+        const char * read;
+        uint32_t read_size;
+        rc = read_char_ptr( rec->id, cursor, atx->cmn.raw_read_idx, &read, &read_size, "RAW_READ" );
+        if ( rc == 0 )
+        {
+            if ( read_size > 0 )
+                rc = KOutMsg( "%.*s\n", read_size, read );
+            else
+                rc = KOutMsg( "*\n" );
+        }
+    }
+
+    /* QUALITY on a new line if in fastq-mode */
+    if ( rc == 0 && opts->output_format == of_fastq )
+    {
+        rc = KOutMsg( "+\n" );
+        if ( rc == 0 )
+        {
+            const char * quality;
+            uint32_t quality_size;
+            rc = read_char_ptr( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_size, "SAM_QUALITY" );
+            if ( rc == 0 )
+            {
+                if ( quality_size > 0 )
+                    rc = dump_quality_33( opts, quality, quality_size, false );
+                else
+                    rc = KOutMsg( "*" );
+            }
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+    }
+
+    return rc;
+}
+
+
+/* print one record of alignment-information in SAM-format */
+static rc_t walk_position( const samdump_opts * const opts,
+                           PlacementSetIterator * const set_iter,
+                           const char * ref_name,
+                           INSDC_coord_zero pos,
+                           matecache * const mc,
+                           struct rna_splice_dict * splice_dict,
+                           INSDC_coord_zero first_pos,
+                           INSDC_coord_len len )
+{
+    rc_t rc = 0;
+    while ( rc == 0 )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            const PlacementRecord *rec;
+            rc = PlacementSetIteratorNextRecordAt( set_iter, pos, &rec );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextRecordAt() failed" );
+                }
+            }
+            else
+            {
+
+#if _DEBUGGING
+                if ( opts->perf_log != NULL )
+                    perf_log_line( opts->perf_log, pos );
+#endif
+
+                /* We have to do this here, becasue the nature of the iterator is to return all alignments that
+                   touch ( stick into ) the requested interval. But: sam-dump has to dump alignments that
+                   !! start !! in the requested interval. */
+                if ( pos >= first_pos )
+                {
+                    align_table_context * atx = PlacementRecord_get_ext_data_ptr( rec, placementRecordExtension0 );
+                    if ( atx == NULL )
+                    {
+                        rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcNull );
+                        LOGERR( klogInt, rc, "no placement-record-context available" );
+                    }
+                    else
+                    {
+                        if ( opts->output_format == of_sam )
+                        {
+                            if ( atx->align_table_type == att_evidence )
+                                rc = print_alignment_sam_ev( opts, ref_name, pos, rec, atx );
+                            else
+                                rc = print_alignment_sam_ps( opts, ref_name, pos, mc, splice_dict, rec, atx );
+                        }
+                        else
+                            rc = print_alignment_fastx( opts, ref_name, pos, mc, rec, atx );
+                    }
+                }
+                PlacementRecordWhack ( rec );
+
+
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_window( const samdump_opts * const opts,
+                         PlacementSetIterator * const set_iter,
+                         const char * ref_name,
+                         matecache * const mc,
+                         struct rna_splice_dict * splice_dict,
+                         INSDC_coord_zero first_pos,
+                         INSDC_coord_len len )
+{
+    rc_t rc = 0;
+    while ( rc == 0 )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            INSDC_coord_zero pos;
+            rc = PlacementSetIteratorNextAvailPos( set_iter, &pos, NULL );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextAvailPos() failed" );
+                }
+            }
+            else
+            {
+                rc = walk_position( opts, set_iter, ref_name, pos, mc, splice_dict, first_pos, len );
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_reference( const samdump_opts * const opts,
+                            PlacementSetIterator * const set_iter,
+                            struct ReferenceObj const * ref_obj,
+                            const char * ref_name,
+                            matecache * const mc )
+{
+    rc_t rc = 0;
+    struct rna_splice_dict * splice_dict = NULL;
+
+    if ( opts->rna_splicing )
+    {
+        splice_dict = make_rna_splice_dict();
+        /* rna-splice-log */
+        if ( opts->rna_splice_log != NULL )
+            rna_splice_log_enter_ref( opts->rna_splice_log, ref_name, ref_obj );
+    }
+
+    while ( rc == 0 )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            INSDC_coord_zero first_pos;
+            INSDC_coord_len len;
+            rc = PlacementSetIteratorNextWindow( set_iter, &first_pos, &len );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextWindow() failed" );
+                }
+            }
+            else
+                rc = walk_window( opts, set_iter, ref_name, mc, splice_dict, first_pos, len );
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+
+    if ( rc == 0 && mc != NULL && opts->use_mate_cache )
+        rc = matecache_clear_same_ref( mc );
+
+    if ( splice_dict != NULL )
+    {
+        /* rna-splice-log */
+        if ( opts->rna_splice_log != NULL )
+            rna_splice_log_exit_ref( opts->rna_splice_log, splice_dict );
+        free_rna_splice_dict( splice_dict );
+    }
+
+    return rc;
+}
+
+
+static rc_t walk_placements( const samdump_opts * const opts,
+                             PlacementSetIterator * const set_iter,
+                             matecache * const mc )
+{
+    rc_t rc = 0;
+    while ( rc == 0 )
+    {
+        struct ReferenceObj const * ref_obj;
+
+        rc = PlacementSetIteratorNextReference( set_iter, NULL, NULL, &ref_obj );
+        if ( rc == 0 )
+        {
+            if ( ref_obj != NULL )
+            {
+                const char * ref_name = NULL;
+                if ( opts->use_seqid_as_refname )
+                    rc = ReferenceObj_SeqId( ref_obj, &ref_name );
+                else
+                    rc = ReferenceObj_Name( ref_obj, &ref_name );
+
+                if ( rc == 0 )
+                {
+#if _DEBUGGING
+                    if ( opts->perf_log != NULL )
+                        perf_log_start_sub_section( opts->perf_log, ref_name );
+#endif
+
+                    rc = walk_reference( opts, set_iter, ref_obj, ref_name, mc );
+
+#if _DEBUGGING
+                    if ( opts->perf_log != NULL )
+                        perf_log_end_sub_section( opts->perf_log );
+#endif
+                }
+                else
+                {
+                    if ( opts->use_seqid_as_refname )
+                    {
+                        (void)LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+                    }
+                    else
+                    {
+                        (void)LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+                    }
+                }
+            }
+        }
+        else if ( GetRCState( rc ) != rcDone )
+        {
+            (void)LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+        }
+    }
+
+    if ( GetRCState( rc ) == rcDone )
+        rc = 0;
+    return rc;
+}
+
+
+
+static void CC destroy_align_table_context( void *item, void *data )
+{
+    align_table_context * atx = item;
+    free_align_table_context( atx );
+}
+
+
+static rc_t print_all_aligned_spots_of_this_reference( const samdump_opts * const opts,
+                                                       const input_database * const ids,
+                                                       matecache * const mc,
+                                                       const AlignMgr * const a_mgr,
+                                                       const ReferenceObj * const ref_obj )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        INSDC_coord_len ref_len;
+
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+        if ( rc == 0 )
+        {
+            rc = add_pl_iters( opts, set_iter, ref_obj, ids,
+                0,                  /* where it starts on the reference */
+                ref_len,            /* the whole length of this reference/chromosome */
+                NULL,               /* no spotgroup re-grouping (yet) */
+                &context_list
+                );
+            if ( rc == 0 )
+                rc = walk_placements( opts, set_iter, mc );
+        }
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   the user did not specify regions, print all alignments from all input-files
+   this is strategy #1 to do this, create a ref_iter for every reference each
+    + ... less cursors will be open at the same time, more resource efficient
+    - ... if more than one input-file, the output will be sorted only within each reference
+*/
+static rc_t print_all_aligned_spots_0( const samdump_opts * const opts,
+                                       const input_files * const ifs,
+                                       matecache * const mc,
+                                       const AlignMgr * const a_mgr )
+{
+    rc_t rc = 0;
+    uint32_t db_idx;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+    {
+        const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+        if ( ids != NULL )
+        {
+            uint32_t refobj_count;
+            rc = ReferenceList_Count( ids->reflist, &refobj_count );
+            if ( rc == 0 && refobj_count > 0 )
+            {
+                uint32_t ref_idx;
+                for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+                {
+                    const ReferenceObj * ref_obj;
+                    rc = ReferenceList_Get( ids->reflist, &ref_obj, ref_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        rc = print_all_aligned_spots_of_this_reference( opts, ids, mc, a_mgr, ref_obj );
+                        ReferenceObj_Release( ref_obj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*
+   the user did not specify regions, print all alignments from all input-files
+   this is strategy #2 to do this, throw all iterators for all input-files and all there references
+   into one set_iter.
+    + ... if more than one input-file, everything will be sorted
+    - ... creates a large number of open cursors ( because of sub-cursors due to schema-functions )
+          this can result in not beeing able to perform the functions at all because of running out of resources
+    - ... a long delay at start up, before the 1st alignment is printed ( all the cursors have to be opened )
+*/
+static rc_t print_all_aligned_spots_1( const samdump_opts * const opts,
+                                       const input_files * const ifs,
+                                       matecache * const mc,
+                                       const AlignMgr * const a_mgr )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = prepare_whole_files( opts, ifs, set_iter, &context_list );
+
+        if ( rc == 0 )
+            rc = walk_placements( opts, set_iter, mc );
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   the user has specified certain regions on the references,
+   print only alignments, that start in these regions
+*/
+static rc_t print_selected_aligned_spots( const samdump_opts * const opts,
+                                          const input_files * const ifs,
+                                          matecache * const mc,
+                                          const AlignMgr * const a_mgr )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = prepare_regions( opts, ifs, set_iter, &context_list );
+
+        if ( rc == 0 )
+            rc = walk_placements( opts, set_iter, mc );
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   this is called from sam-dump3.c, it prepares the iterators and then walks them
+   ---> only entry into this module <--- 
+*/
+rc_t print_aligned_spots( const samdump_opts * const opts,
+                          const input_files * const ifs,
+                          matecache * const mc )
+{
+    rc_t rc;
+    const AlignMgr * a_mgr;
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_start_section( opts->perf_log, "aligned spots" );
+#endif
+
+    /* first we make an alignment-manager */
+    rc = AlignMgrMakeRead( &a_mgr );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create alignment-manager" );
+    }
+    else
+    {
+        if ( opts->region_count == 0 )
+        {
+            /* the user did not specify regions to be printed ==> print all alignments */
+            switch( opts->dump_mode )
+            {
+                case dm_one_ref_at_a_time : rc = print_all_aligned_spots_0( opts, ifs, mc, a_mgr ); break;
+                case dm_prepare_all_refs  : rc = print_all_aligned_spots_1( opts, ifs, mc, a_mgr ); break;
+            }
+        }
+        else
+        {
+            /* the user did specify regions to be printed ==> print only the alignments in these regions */
+            rc = print_selected_aligned_spots( opts, ifs, mc, a_mgr );
+        }
+        AlignMgrRelease( a_mgr );
+    }
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_end_section( opts->perf_log );
+#endif
+
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-aligned.h b/tools/sra-pileup/sam-aligned.h
new file mode 100644
index 0000000..0ef4204
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_aligned_
+#define _h_sam_aligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+#define COL_READ "(INSDC:dna:text)READ"
+
+rc_t print_aligned_spots( const samdump_opts * const opts,
+                          const input_files * const ifs,
+                          matecache * const mc );
+
+#endif
diff --git a/tools/sra-pileup/sam-dump-opts.c b/tools/sra-pileup/sam-dump-opts.c
new file mode 100644
index 0000000..24e262c
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.c
@@ -0,0 +1,1676 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "sam-dump-opts.h"
+#include "perf_log.h"
+
+#include <klib/time.h>
+#include <align/quality-quantizer.h>
+#include <sysalloc.h>
+
+#define CURSOR_CACHE_SIZE 256*1024*1024
+
+/* =========================================================================================== */
+
+
+int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static range * make_range( const uint64_t start, const uint64_t end )
+{
+    range *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->start = start;
+        res->end = end;
+    }
+    return res;
+}
+
+
+static int64_t cmp_range( const range * a, const range * b )
+{
+    if ( a->start < b->start )
+        return -1;
+    else if ( a->start > b->start )
+        return 1;
+    else if ( a->end < b->end )
+        return -1;
+    else if ( a->end > b->end )
+        return 1;
+    else
+        return 0;
+}
+
+
+static bool range_overlapp( const range * a, const range * b )
+{
+    return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+}
+
+
+/* =========================================================================================== */
+
+
+static reference_region * make_reference_region( const char *name )
+{
+    reference_region *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        if ( res->name == NULL )
+        {
+            free( res );
+            res = NULL;
+        }
+        else
+            VectorInit ( &res->ranges, 0, 5 );
+    }
+    return res;
+}
+
+
+static int64_t CC cmp_range_wrapper( const void *item, const void *n )
+{   return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( reference_region * self, const uint64_t start, const uint64_t end )
+{
+    rc_t rc = 0;
+    range *r = make_range( start, end );
+    if ( r == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+#define RR_NAME  1
+#define RR_START 2
+#define RR_END   3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+    if ( *dst < ( size - 1 ) )
+        s[ *dst ] = c;
+    (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+    if ( *dst > size )
+        s[ size - 1 ] = 0;
+    else
+        s[ *dst ] = 0;
+    *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+    uint64_t res = 0;
+    char *endp;
+    finish_txt( s, size, dst );
+    res = strtou64( s, &endp, 10 );
+    return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+                              uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+
+    *start = 0;
+    *end   = 0;
+    name[ 0 ] = 0;
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 32 ];
+        st = RR_NAME;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_NAME  : if ( c == ':' )
+                                {
+                                    finish_txt( name, len, &dst );
+                                    st = RR_START;
+                                }
+                                else
+                                {
+                                    put_c( name, len, &dst, c );
+                                }
+                                break;
+
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_NAME  : finish_txt( name, len, &dst );
+                            break;
+
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static void CC release_range_wrapper( void * item, void * data )
+{
+    free( item );
+}
+
+
+static void free_reference_region( reference_region * self )
+{
+    free( (void*)self->name );
+    VectorWhack ( &self->ranges, release_range_wrapper, NULL );
+    free( self );
+}
+
+
+static void check_ref_region_ranges( reference_region * self )
+{
+    uint32_t n = VectorLength( &self->ranges );
+    uint32_t i = 0;
+    range *a = NULL;
+    while ( i < n )
+    {
+        range *b = VectorGet ( &self->ranges, i );
+        bool remove = false;
+        if ( a != NULL )
+        {
+            remove = range_overlapp( a, b );
+            if ( remove )
+            {
+                range *r;
+                a->end = b->end;
+                VectorRemove ( &self->ranges, i, (void**)&r );
+                free( r );
+                n--;
+            }
+        }
+        if ( !remove )
+        {
+            a = b;
+            ++i;
+        }
+    }
+}
+
+
+/* =========================================================================================== */
+
+
+static int64_t CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const reference_region * r = ( const reference_region * )n;
+    return cmp_pchar( (const char *)item, r->name );
+}
+
+static reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+    return ( reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+
+typedef struct frrl
+{
+    const char * name;
+    size_t len;
+} frrl;
+
+
+static int cmp_pchar_vs_len( const char * a, const char * b, size_t len_b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+static int64_t CC reference_vs_frr_wrapper( const void *item, const BSTNode *n )
+{
+    const reference_region * r = ( const reference_region * )n;
+    const frrl * ctx = item;
+    return cmp_pchar_vs_len( r->name, ctx->name, ctx->len );
+}
+
+static reference_region * find_reference_region_len( BSTree * regions, const char * name, size_t len )
+{
+    frrl ctx;
+    ctx.name = name;
+    ctx.len  = len;
+    return ( reference_region * ) BSTreeFind ( regions, &ctx, reference_vs_frr_wrapper );
+}
+
+
+static int64_t CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const reference_region * a = ( const reference_region * )item;
+   const reference_region * b = ( const reference_region * )n;
+   return cmp_pchar( a->name, b->name );
+}
+
+static rc_t add_refrange( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+    rc_t rc;
+
+    reference_region * r = find_reference_region( regions, name );
+    if ( r == NULL )
+    {
+        r = make_reference_region( name );
+        if ( r == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+            rc = add_ref_region_range( r, start, end );
+        if ( rc == 0 )
+            rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+        if ( rc != 0 )
+            free_reference_region( r );
+    }
+    else
+    {
+        rc = add_ref_region_range( r, start, end );
+    }
+    return rc;
+}
+
+
+static rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+    rc_t rc = 0;
+    uint64_t start, end;
+    char name[ 4096 ];
+    parse_definition( s, name, sizeof name, &start, &end );
+    if ( name[ 0 ] == 0 )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        uint64_t start_0based = ( start > 0 ) ? start - 1 : 0;
+        uint64_t end_0based = ( end > 0 ) ? end - 1 : 0;
+        if ( end_0based != 0 && end_0based < start_0based )
+        {
+            uint64_t temp = end_0based;
+            end_0based = start_0based;
+            start_0based = temp;
+        }
+        rc = add_refrange( regions, name, start_0based, end_0based );
+    }
+    return rc;
+}
+
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+    check_ref_region_ranges( ( reference_region * ) n );
+}
+
+
+static void check_ref_regions( BSTree * regions )
+{
+    BSTreeForEach ( regions, false, check_refrange_wrapper, NULL );
+}
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+    free_reference_region( ( reference_region * ) n );
+}
+
+
+static void free_ref_regions( BSTree * regions )
+{    
+    BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    uint32_t * count = ( uint32_t * ) data;
+    *count += VectorLength( &(r->ranges) );
+}
+
+
+static uint32_t count_ref_regions( BSTree * regions )
+{
+    uint32_t res = 0;
+    BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC foreach_reference_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    foreach_reference_func * func = ( foreach_reference_func * )data;
+
+    if ( func->rc == 0 )
+        func->rc = func->on_reference( r->name, &(r->ranges), func->data );
+}
+
+
+rc_t foreach_reference( BSTree * regions,
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ), 
+    void *data )
+{
+    foreach_reference_func func;
+
+    func.on_reference = on_reference;
+    func.data = data;
+    func.rc = 0;
+    BSTreeForEach ( regions, false, foreach_reference_wrapper, &func );
+    return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+/* s = 1000-2000 */
+static void parse_matepair_definition( const char *s, uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 32 ];
+        st = RR_START;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static rc_t parse_and_add_matepair_dist( Vector * dist_vector, const char * s )
+{
+    rc_t rc = 0;
+    uint64_t start = 0, end = 0;
+    range *r;
+
+    if ( cmp_pchar( s, "unknown" ) != 0 )
+        parse_matepair_definition( s, &start, &end );
+
+    r = make_range( start, end );
+    if ( r == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "error storing matepair-distance" );
+    }
+    else
+    {
+        rc = VectorInsert ( dist_vector, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen )
+{
+    bool res = false;
+
+    uint32_t count = VectorLength( &opts->mp_dist );
+    if ( count > 0 )
+    {
+        uint32_t idx, tlen_v;
+
+        res = false;
+        if ( tlen < 0 )
+            tlen_v = -(tlen);
+        else
+            tlen_v = tlen;
+
+        for ( idx = 0; idx < count && !res; ++idx )
+        {
+            range * r = VectorGet( &opts->mp_dist, idx );
+            if ( r != NULL )
+                res = ( ( tlen_v >= r->start )&&( tlen_v <= r->end ) );
+        }
+    }
+    return res;
+}
+
+/* =========================================================================================== */
+
+
+static rc_t get_bool_option( Args * args, const char * name, bool *value )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error reading comandline option '$(t)'", "t=%s", name ) );
+    }
+    else
+    {
+        *value = ( count > 0 );
+    }
+    return rc;
+}
+
+
+static rc_t gather_region_options( Args * args, samdump_opts * opts )
+{
+    uint32_t count;
+
+    rc_t rc = ArgsOptionCount( args, OPT_REGION, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+    }
+    else if ( count > 0 )
+    {
+        uint32_t i;
+
+        BSTreeInit( &opts->regions );
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPT_REGION, i, (const void **)&s );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_REGION ) );
+            }
+            else
+                rc = parse_and_add_region( &opts->regions, s );
+        }
+        if ( rc == 0 )
+        {
+            check_ref_regions( &opts->regions );
+            opts->region_count = count_ref_regions( &opts->regions );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t gather_matepair_distances( Args * args, samdump_opts * opts )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPT_MATE_DIST, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+    }
+    else if ( count > 0 )
+    {
+        uint32_t i;
+
+        VectorInit( &opts->mp_dist, 0, 10 );
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPT_MATE_DIST, i, (const void **)&s );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_MATE_DIST ) );
+            }
+            else
+                rc = parse_and_add_matepair_dist( &opts->mp_dist, s );
+        }
+        opts->use_matepair_filter = ( VectorLength( &opts->mp_dist ) > 0 );
+    }
+    return rc;
+}
+
+
+static rc_t gather_2_bool( Args * args, const char *name1, const char *name2, bool *b1, bool *b2 )
+{
+    rc_t rc = get_bool_option( args, name1, b1 );
+    if ( rc != 0 ) return rc;
+
+    rc = get_bool_option( args, name2, b2 );
+    if ( rc != 0 ) return rc;
+
+    if ( *b1 && *b2 )
+    {
+        rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, "the parameters '--$(p1)' and '--$(p2)' are mutually exclusive", 
+                      "p1=%s,p2=%s", name1, name2 ) );
+    }
+    return rc;
+}
+
+
+static rc_t gather_flag_options( Args * args, samdump_opts * opts )
+{
+    bool dump_prim_only;
+
+    /* do we have to dump unaligned reads too? */
+    rc_t rc = get_bool_option( args, OPT_UNALIGNED, &opts->dump_unaligned_reads );
+    if ( rc != 0 ) return rc;
+
+    /* assume we have to dump primary alignments, maybe switched off later by other option */
+    opts->dump_primary_alignments = true;
+
+    /* we are dumping secondary alignments only if the user does
+       not explicitly ask for "primary only" */
+    rc = get_bool_option( args, OPT_PRIM_ONLY, &dump_prim_only );
+    if ( rc != 0 ) return rc;
+    opts->dump_secondary_alignments = !dump_prim_only;
+
+    /* check if we are asked to be in cga-tool compatible mode */
+    rc = get_bool_option( args, OPT_CG_SAM, &opts->dump_cg_sam );
+    if ( rc != 0 ) return rc;
+
+    /* check if we have to dump "EVIDENCE_INTERVAL" against the reference */
+    rc = get_bool_option( args, OPT_CG_EVIDENCE, &opts->dump_cg_evidence );
+    if ( rc != 0 ) return rc;
+
+    /* check if we have to dump "EVIDENCE_ALIGNMENT" against "EVIDENCE_INTERVAL" */
+    rc = get_bool_option( args, OPT_CG_EV_DNB, &opts->dump_cg_ev_dnb );
+    if ( rc != 0 ) return rc;
+
+    {
+        bool dump_cg_mappings;
+
+        /* look if cg-mappings is requested */
+        rc = get_bool_option( args, OPT_CG_MAPP, &dump_cg_mappings );
+        if ( rc != 0 ) return rc;
+
+        /* do some mode logic ... */
+        if ( !dump_cg_mappings &&
+             ( opts->dump_cga_tools_mode || opts->dump_cg_evidence || opts->dump_cg_ev_dnb || opts->dump_cg_sam ) )
+        {
+            opts->dump_primary_alignments = false;
+            opts->dump_secondary_alignments = false;
+            opts->dump_unaligned_reads = false;
+        }
+        else
+        {
+            opts->dump_primary_alignments = true;
+            opts->dump_secondary_alignments = !dump_prim_only;
+            /* opts->dump_unaligned_reads = ( opts->dump_unaligned_reads && opts->region_count == 0 ); */
+        }
+    }
+
+    /* do we have to print the long-version of the cigar-string? */
+    rc = get_bool_option( args, OPT_CIGAR_LONG, &opts->use_long_cigar );
+    if ( rc != 0 ) return rc;
+
+    /* print the sequence-id instead of the sequence-name */
+    rc = get_bool_option( args, OPT_USE_SEQID, &opts->use_seqid_as_refname );
+    if ( rc != 0 ) return rc;
+
+    /* print the READ where matched bases are replaced with '=' */
+    rc = get_bool_option( args, OPT_HIDE_IDENT, &opts->print_matches_as_equal_sign );
+    if ( rc != 0 ) return rc;
+
+    {
+        bool recalc_header, dont_print_header;
+
+        /* do we have to recalculate the header instead of printing the meta-data */
+        rc = get_bool_option( args, OPT_RECAL_HDR, &recalc_header );
+        if ( rc != 0 ) return rc;
+        /* should we suppress the header completely */
+        rc = get_bool_option( args, OPT_NO_HDR, &dont_print_header );
+        if ( rc != 0 ) return rc;
+        if ( dont_print_header )
+            opts->header_mode = hm_none;
+        else if ( recalc_header )
+            opts->header_mode = hm_recalc;
+        else
+            opts->header_mode = hm_dump;
+    }
+
+    {
+        bool cigar_cg, cigar_cg_merge;
+
+        /* do we have to transform cigar into cg-style ( has B/N ) */
+        /* do we have to transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+        rc = gather_2_bool( args, OPT_CIGAR_CG, OPT_CIGAR_CG_M, &cigar_cg, &cigar_cg_merge );
+        if ( rc != 0 ) return rc;
+        if ( cigar_cg )
+            opts->cigar_treatment = ct_cg_style;
+        if ( cigar_cg_merge )
+            opts->cigar_treatment = ct_cg_merge;
+    }
+
+    {
+        bool gzip, bzip2;
+
+        /* do we have to compress the output with gzip ? */
+        /* do we have to compress the output with bzip2 ? */
+        rc = gather_2_bool( args, OPT_GZIP, OPT_BZIP2, &gzip, &bzip2 );
+        if ( rc != 0 ) return rc;
+        if ( gzip )
+            opts->output_compression = oc_gzip;
+        if ( bzip2 )
+            opts->output_compression = oc_bzip2;
+    }
+
+
+    {
+        bool fasta, fastq;
+
+        /* output in FASTA - mode  ? */
+        /* output in FASTQ - mode  ? */
+        rc = gather_2_bool( args, OPT_FASTA, OPT_FASTQ, &fasta, &fastq );
+        if ( rc != 0 ) return rc;
+        if ( fasta )
+            opts->output_format = of_fasta;
+        if ( fastq )
+            opts->output_format = of_fastq;
+    }
+
+
+    /* do we have to reverse unaligned reads if the flag in the row says so */
+    rc = get_bool_option( args, OPT_REVERSE, &opts->reverse_unaligned_reads );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to add the spotgroup to the qname-column */
+    rc = get_bool_option( args, OPT_SPOTGRP, &opts->print_spot_group_in_name );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to report options instead of executing */
+    rc = get_bool_option( args, OPT_REPORT, &opts->report_options );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the alignment id in column XI */
+    rc = get_bool_option( args, OPT_XI_DEBUG, &opts->print_alignment_id_in_column_xi );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the alignment id in column XI */
+    rc = get_bool_option( args, OPT_CACHEREPORT, &opts->report_cache );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to dump unaligned reads only */
+    rc = get_bool_option( args, OPT_UNALIGNED_ONLY, &opts->dump_unaligned_only );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the spot-group in a special way */
+    rc = get_bool_option( args, OPT_CG_NAMES, &opts->print_cg_names );
+    if ( rc != 0 ) return rc;
+
+    /* do we use a mate-cache */
+    rc = get_bool_option( args, OPT_NO_MATE_CACHE, &opts->use_mate_cache );
+    if ( rc != 0 ) return rc;
+    opts->use_mate_cache = !opts->use_mate_cache;
+
+    /* do we use a mate-cache */
+    rc = get_bool_option( args, OPT_LEGACY, &opts->force_legacy );
+    if ( rc != 0 ) return rc;
+
+    rc = get_bool_option( args, OPT_NEW, &opts->force_new );
+    if ( rc != 0 ) return rc;
+
+    if ( opts->force_new && opts->force_legacy )
+        opts->force_new = false;
+
+    /* do we have to merge cigar ( and read/qual ) for cg-operations in cigar */
+    rc = get_bool_option( args, OPT_CIGAR_CG_M, &opts->merge_cg_cigar );
+    if ( rc != 0 ) return rc;
+
+    /* do we enable rna-splicing */
+    rc = get_bool_option( args, OPT_RNA_SPLICE, &opts->rna_splicing );
+    if ( rc != 0 ) return rc;
+    
+    /* do we disable multi-threading */    
+    rc = get_bool_option( args, OPT_NO_MT, &opts->no_mt );
+    
+    /* do we have to generate the MD-flag */ 
+    rc = get_bool_option( args, OPT_MD_FLAG, &opts->with_md_flag );
+	
+    /* forcing to use the legacy code in case of Evidence-Dnb was requested */
+    if ( rc == 0 )
+    {
+        if ( opts->dump_cg_ev_dnb )
+        {
+            opts->force_legacy = true;
+            opts->force_new = false;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_str_option( Args * args, const char * name, const char ** s )
+{
+    uint32_t count;
+
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *s = NULL;
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", name ) );
+    }
+    else if ( count > 0 )
+    {
+        rc = ArgsOptionValue( args, name, 0, (const void **)s );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", name ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_uint32_option( Args * args, const char * name, uint32_t def, uint32_t * value, bool dflt_if_zero )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *value = def;
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtou32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else if ( dflt_if_zero && *value == 0 )
+            *value = def;
+    }
+    return rc;
+}
+
+
+static rc_t get_int32_options( Args * args, const char * name, int32_t * value, bool * used )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtoi32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else
+        {
+            if ( used != NULL )
+                *used = true;
+        }
+    }
+    return rc;
+}
+
+/*
+static rc_t get_int64_option( Args * args, const char * name, uint64_t def, uint64_t * value )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *value = def;
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtou32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else if ( *value == 0 )
+            *value = def;
+    }
+    return rc;
+}
+*/
+
+static rc_t gather_int_options( Args * args, samdump_opts * opts )
+{
+    rc_t rc = get_uint32_option( args, OPT_MATE_GAP, 10000, &opts->mape_gap_cache_limit, true );
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPT_OUTBUFSIZE, 1024 * 32, &opts->output_buffer_size, false );
+
+    if ( rc == 0 )
+    {
+        uint32_t cs;
+        rc = get_uint32_option( args, OPT_CURSOR_CACHE, CURSOR_CACHE_SIZE, &cs, false );
+        if ( rc == 0 )
+            opts->cursor_cache_size = ( size_t )cs;
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t mode;
+        rc = get_uint32_option( args, OPT_DUMP_MODE, 0, &mode, true );
+        if ( rc == 0 )
+        {
+            switch( mode )
+            {
+                case 0  : opts->dump_mode = dm_one_ref_at_a_time; break;
+                case 1  : opts->dump_mode = dm_prepare_all_refs; break;
+                default : opts->dump_mode = dm_one_ref_at_a_time; break;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+        rc = get_int32_options( args, OPT_MIN_MAPQ, &opts->min_mapq, &opts->use_min_mapq );
+
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPT_RNA_SPLICEL, 0, &opts->rna_splice_level, true );
+
+    return rc;
+}
+
+
+static rc_t gather_string_options( Args * args, samdump_opts * opts )
+{
+    const char * s;
+    uint32_t count;
+
+    rc_t rc = get_str_option( args, OPT_PREFIX, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->qname_prefix = string_dup_measure( s, NULL );
+        if ( opts->qname_prefix == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing QNAME-PREFIX" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_str_option( args, OPT_Q_QUANT, &s );
+        if ( rc == 0 && s != NULL )
+        {
+            opts->qual_quant = string_dup_measure( s, NULL );
+            if ( opts->qual_quant == NULL )
+            {
+                rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+                (void)LOGERR( klogErr, rc, "error storing QUAL-QUANT" );
+            }
+            else
+            {
+                bool bres = QualityQuantizerInitMatrix( opts->qual_quant_matrix, opts->qual_quant );
+                if ( !bres )
+                {
+                    rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+                    (void)LOGERR( klogErr, rc, "error initializing quality-quantizer-matrix" );
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_str_option( args, OPT_OUTPUTFILE, &s );
+        if ( rc == 0 && s != NULL )
+        {
+            opts->outputfile = string_dup_measure( s, NULL );
+            if ( opts->outputfile == NULL )
+            {
+                rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+                (void)LOGERR( klogErr, rc, "error storing OUTPUTFILE" );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = ArgsOptionCount( args, OPT_HDR_COMMENT, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            rc = VNamelistMake( &opts->hdr_comments, 10 );
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * src;
+                rc = ArgsOptionValue( args, OPT_HDR_COMMENT, i, (const void **)&src );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)' #$(n)", 
+                                              "t=%s,n=%u", OPT_HDR_COMMENT, i ) );
+                }
+                else
+                {
+                    rc = VNamelistAppend( opts->hdr_comments, src );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "error appending hdr-comment '$(t)'", 
+                                                  "t=%s", src ) );
+                    }
+                }
+            }
+            if ( rc != 0 )
+            {
+                VNamelistRelease( opts->hdr_comments );
+                opts->hdr_comments = NULL;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = ArgsParamCount( args, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            rc = VNamelistMake( &opts->input_files, 10 );
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * src;
+                rc = ArgsParamValue( args, i, (const void **)&src );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline param #$(n)", 
+                                              "n=%u", i ) );
+                }
+                else
+                {
+                    rc = VNamelistAppend( opts->input_files, src );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "error appending input_file '$(t)'", 
+                                                  "t=%s", src ) );
+                    }
+                }
+            }
+            if ( rc != 0 )
+            {
+                VNamelistRelease( opts->input_files );
+                opts->input_files = NULL;
+            }
+        }
+        opts->input_file_count = count;
+    }
+
+    rc = get_str_option( args, OPT_CIGAR_TEST, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->cigar_test = string_dup_measure( s, NULL );
+        if ( opts->cigar_test == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing CIGAR-TEST into sam-dump-options" );
+        }
+    }
+
+    rc = get_str_option( args, OPT_HDR_FILE, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->header_file = string_dup_measure( s, NULL );
+        if ( opts->header_file == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing HDR-FILE into sam-dump-options" );
+        }
+        else
+            opts->header_mode = hm_file;
+    }
+
+    opts->perf_log = NULL;
+
+#if _DEBUGGING
+    rc = get_str_option( args, OPT_TIMING, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->timing_file = string_dup_measure( s, NULL );
+        if ( opts->timing_file == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing timing-FILE into sam-dump-options" );
+        }
+        else
+            opts->perf_log = make_perf_log( opts->timing_file, "sam-dump" );
+    }
+#endif
+
+    rc = get_str_option( args, OPT_RNA_SPLICE_LOG, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->rna_splice_log_file = string_dup_measure( s, NULL );
+        if ( opts->rna_splice_log_file == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing rna-splice-log-FILE into sam-dump-options" );
+        }
+        else
+            opts->rna_splice_log = make_rna_splice_log( opts->rna_splice_log_file, "sam-dump" );
+    }
+
+    return rc;
+}
+
+
+/*********************************************************************************************
+
+                                            fa ... fully aligned reads
+                                            ha ... half aligned reads
+                                            hu ... half unaligned reads
+                                            fu ... fully unaligned reads
+
+    regions > 0     |   dump-unaligned  |
+    ----------------------------------------------------------------------
+        no          |       no          |   fa  ha  hu
+        no          |       yes         |   fa  ha  hu  fu
+        yes         |       no          |   fa  ha
+        yes         |       yes         |   fa  ha  hu
+
+*********************************************************************************************/
+static void gather_unaligned_options( samdump_opts * opts )
+{
+    if ( opts->region_count == 0 )
+    {
+        if ( opts->dump_unaligned_only )
+        {
+            opts->print_half_unaligned_reads  = false;
+            opts->print_fully_unaligned_reads = true;
+        }
+        else
+        {
+            opts->print_half_unaligned_reads  = true;
+            opts->print_fully_unaligned_reads = opts->dump_unaligned_reads;
+        }
+    }
+    else
+    {
+        opts->print_fully_unaligned_reads = false;
+        opts->print_half_unaligned_reads  = opts->dump_unaligned_reads;
+    }
+}
+
+/* =========================================================================================== */
+
+
+static rc_t CC report_reference_cb( const char * name, Vector * ranges, void *data )
+{
+    rc_t rc = KOutMsg( "region: <%s>\n",  name );
+    if ( rc == 0 )
+    {
+        uint32_t count = VectorLength( ranges );
+        if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = VectorStart( ranges ); i < count && rc == 0; ++i )
+            {
+                range *r = VectorGet( ranges, i );
+                if ( r->end == 0 )
+                {
+                    if ( r->start == 0 )
+                        rc = KOutMsg( "\t[ start ... end ]\n" );
+                    else
+                        rc = KOutMsg( "\t[ %u ... ]\n", r->start );
+                }
+                else
+                    rc = KOutMsg( "\t[ %u ... %u ]\n", r->start, r->end );
+            }
+        }
+    }
+    return rc;
+}
+
+
+void report_options( const samdump_opts * opts )
+{
+    rc_t rc;
+    uint32_t len;
+
+    KOutMsg( "dump unaligned reads  : %s\n",  opts->dump_unaligned_reads ? "YES" : "NO" );
+    KOutMsg( "dump unaligned only   : %s\n",  opts->dump_unaligned_only ? "YES" : "NO" );
+    KOutMsg( "dump prim. alignments : %s\n",  opts->dump_primary_alignments ? "YES" : "NO" );
+    KOutMsg( "dump sec. alignments  : %s\n",  opts->dump_secondary_alignments ? "YES" : "NO" );
+    KOutMsg( "dump cga-tools-mode   : %s\n",  opts->dump_cga_tools_mode ? "YES" : "NO" );
+    KOutMsg( "dump cg-evidence      : %s\n",  opts->dump_cg_evidence ? "YES" : "NO" );
+    KOutMsg( "dump cg-ev-dnb        : %s\n",  opts->dump_cg_ev_dnb ? "YES" : "NO" );
+    KOutMsg( "dump cg-sam           : %s\n",  opts->dump_cg_sam ? "YES" : "NO" );
+    KOutMsg( "merge cg-cigar        : %s\n",  opts->merge_cg_cigar ? "YES" : "NO" );
+
+    KOutMsg( "use long cigar        : %s\n",  opts->use_long_cigar ? "YES" : "NO" );
+    KOutMsg( "print seqid           : %s\n",  opts->use_seqid_as_refname ? "YES" : "NO" );
+    KOutMsg( "print READ with '='   : %s\n",  opts->print_matches_as_equal_sign ? "YES" : "NO" );
+    KOutMsg( "reverse unaligned rd  : %s\n",  opts->reverse_unaligned_reads ? "YES" : "NO" );
+    KOutMsg( "add spotgrp to qname  : %s\n",  opts->print_spot_group_in_name ? "YES" : "NO" );
+    KOutMsg( "print id in col. XI   : %s\n",  opts->print_alignment_id_in_column_xi ? "YES" : "NO" );
+    KOutMsg( "report matecache      : %s\n",  opts->report_cache ? "YES" : "NO" );
+    KOutMsg( "print cg-names        : %s\n",  opts->print_cg_names ? "YES" : "NO" );
+
+    switch( opts->header_mode )
+    {
+        case hm_none   : KOutMsg( "header-mode           : dont print\n" ); break;
+        case hm_recalc : KOutMsg( "header-mode           : recalculate\n" ); break;
+        case hm_dump   : KOutMsg( "header-mode           : print meta-data\n" ); break;
+        case hm_file   : KOutMsg( "header-mode           : take from '%s'\n", opts->header_file ); break;
+        default        : KOutMsg( "header-mode           : unknown\n" ); break;
+    }
+
+    switch( opts->cigar_treatment )
+    {
+        case ct_unchanged : KOutMsg( "cigar-treatment       : unchanged\n" ); break;
+        case ct_cg_style  : KOutMsg( "cigar-treatment       : transform cg to 'cg-style\n" ); break;
+        case ct_cg_merge  : KOutMsg( "cigar-treatment       : transform cg to valid SAM\n" ); break;
+        default           : KOutMsg( "cigar-treatment       : unknow'\n" ); break;
+    }
+
+    switch( opts->output_compression )
+    {
+        case oc_none  : KOutMsg( "output-compression    : none\n" ); break;
+        case oc_gzip  : KOutMsg( "output-compression    : gzip\n" ); break;
+        case oc_bzip2 : KOutMsg( "output-compression    : bzip2\n" ); break;
+        default       : KOutMsg( "output-compression    : unknown\n" ); break;
+    }
+
+    switch( opts->output_format )
+    {
+        case of_sam   : KOutMsg( "output-format         : SAM\n" ); break;
+        case of_fasta : KOutMsg( "output-format         : FASTA\n" ); break;
+        case of_fastq : KOutMsg( "output-format         : FASTQ\n" ); break;
+        default       : KOutMsg( "output-format         : unknown\n" ); break;
+    }
+
+    switch( opts->dump_mode )
+    {
+        case dm_one_ref_at_a_time : KOutMsg( "dump-mode             : one ref at a time\n" ); break;
+        case dm_prepare_all_refs  : KOutMsg( "dump-mode             : prepare all refs\n" ); break;
+        default                   : KOutMsg( "dump-mode             : unknown\n" ); break;
+    }
+
+    KOutMsg( "number of regions     : %u\n",  opts->region_count );
+    if ( opts->region_count > 0 )
+        foreach_reference( (BSTree *)&opts->regions, report_reference_cb, NULL );
+
+    if ( opts->qname_prefix == NULL )
+        KOutMsg( "qname-prefix          : NONE\n" );
+    else
+        KOutMsg( "qname-prefix          : '%s'\n",  opts->qname_prefix );
+
+    if ( opts->qual_quant == NULL )
+        KOutMsg( "quality-quantization  : NONE\n" );
+    else
+        KOutMsg( "quality-quantization  : '%s'\n",  opts->qual_quant );
+
+    if ( opts->hdr_comments != NULL )
+    {
+        rc = VNameListCount( opts->hdr_comments, &len );
+        if ( rc == 0 && len > 0 )
+        {
+            uint32_t i;
+
+            KOutMsg( "header-comments-count : %u\n",  len );
+            for ( i = 0; i < len; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->hdr_comments, i, &s );
+                if ( rc == 0 && s != NULL )
+                    KOutMsg( "header-comment[ %u ]  : '%s'\n",  i, s );
+            }
+        }
+    }
+
+    if ( opts->input_files != NULL )
+    {
+        rc = VNameListCount( opts->input_files, &len );
+        if ( rc == 0 && len > 0 )
+        {
+            uint32_t i;
+
+            KOutMsg( "input-file-count      : %u\n",  len );
+            for ( i = 0; i < len; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->input_files, i, &s );
+                if ( rc == 0 && s != NULL )
+                    KOutMsg( "input-file[ %u ]      : '%s'\n",  i, s );
+            }
+        }
+    }
+
+    len = VectorLength( &opts->mp_dist );
+    if ( len > 0 )
+    {
+        uint32_t i;
+
+        KOutMsg( "matepair-dist-filters : %u\n",  len );
+        for ( i = 0; i < len; ++i )
+        {
+            range *r = VectorGet( &opts->mp_dist, i );
+            if ( r != NULL )
+                KOutMsg( "matepair-dist[ %u ]   : '%u ... %u'\n",  i, r->start, r->end );
+        }
+    }
+
+    KOutMsg( "mate-gap-cache-limit  : %u\n",  opts->mape_gap_cache_limit );
+    KOutMsg( "outputfile            : %s\n",  opts->outputfile );
+    KOutMsg( "outputbuffer-size     : %u\n",  opts->output_buffer_size );
+    KOutMsg( "cursor-cache-size     : %u\n",  opts->cursor_cache_size );
+
+    KOutMsg( "use mate-cache        : %s\n",  opts->use_mate_cache ? "YES" : "NO" );
+    KOutMsg( "force legacy code     : %s\n",  opts->force_legacy ? "YES" : "NO" );
+    KOutMsg( "use min-mapq          : %s\n",  opts->use_min_mapq ? "YES" : "NO" );
+    KOutMsg( "min-mapq              : %i\n",  opts->min_mapq );
+    KOutMsg( "rna-splicing          : %s\n",  opts->rna_splicing ? "YES" : "NO" );
+    KOutMsg( "rna-splice-level      : %u\n",  opts->rna_splice_level );
+    KOutMsg( "rna-splice-log        : %s\n",  opts->rna_splice_log_file );
+
+    KOutMsg( "multithreading        : %s\n",  opts->no_mt ? "NO" : "YES" );  
+    KOutMsg( "with-MD-flag          : %s\n",  opts->with_md_flag ? "NO" : "YES" );
+	
+#if _DEBUGGING
+    if ( opts->timing_file != NULL )
+        KOutMsg( "timing-file           : '%s'\n",  opts->timing_file );
+    else
+        KOutMsg( "timing-file           : NONE\n" );
+#endif
+
+}
+
+
+/* =========================================================================================== */
+
+
+void release_options( samdump_opts * opts )
+{
+    free_ref_regions( &opts->regions );
+    if ( opts->qname_prefix != NULL )
+        free( (void*)opts->qname_prefix );
+    if ( opts->qual_quant != NULL )
+        free( (void*)opts->qual_quant );
+    if( opts->outputfile != NULL )
+        free( (void*)opts->outputfile );
+    if( opts->header_file != NULL )
+        free( (void*)opts->header_file );
+    if( opts->timing_file != NULL )
+        free( (void*)opts->timing_file );
+    if( opts->rna_splice_log_file != NULL )
+        free( (void*)opts->rna_splice_log_file );
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        free_perf_log( opts->perf_log );
+#endif
+
+    if ( opts->rna_splice_log != NULL )
+        free_rna_splice_log( opts->rna_splice_log );
+
+    VNamelistRelease( opts->hdr_comments );
+    VNamelistRelease( opts->input_files );
+    VectorWhack ( &opts->mp_dist, release_range_wrapper, NULL );
+}
+
+/* =========================================================================================== */
+
+
+rc_t gather_options( Args * args, samdump_opts * opts )
+{
+    rc_t rc = gather_region_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_flag_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_string_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_int_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_matepair_distances( args, opts );
+    if ( rc == 0 )
+        gather_unaligned_options( opts );
+    return rc;
+}
+
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+                                  uint64_t start, uint64_t end )
+{
+    bool res = false;
+    if ( opts != NULL )
+    {
+        reference_region *rr = find_reference_region_len( ( BSTree * )&opts->regions, refname, refname_len );
+        if ( rr != NULL )
+        {
+            Vector *v = &(rr->ranges);
+            uint32_t i, count = VectorLength( v );
+            for ( i = 0; i < count && !res; ++i )
+            {
+                range * r = VectorGet ( v, i );
+                if ( r != NULL )
+                {
+                    res = ( ( end >= r->start )&&( start <= r->end ) );
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+                const char * spot_group, uint32_t spot_group_len )
+{
+    rc_t rc;
+
+    if ( opts->print_cg_names )
+    {
+        if ( spot_group != NULL && spot_group_len != 0 )
+            rc = KOutMsg( "%.*s-1:%lu", spot_group_len, spot_group, seq_spot_id );
+        else
+            rc = KOutMsg( "%lu", seq_spot_id );
+    }
+    else
+    {
+        if ( opts->qname_prefix != NULL )
+        {
+            /* we do have to print a prefix */
+            if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+                rc = KOutMsg( "%s.%lu.%.*s", opts->qname_prefix, seq_spot_id, spot_group_len, spot_group );
+            else
+            /* we do NOT have to append the spot-group */
+                rc = KOutMsg( "%s.%lu", opts->qname_prefix, seq_spot_id );
+        }
+        else
+        {
+            /* we do NOT have to print a prefix */
+            if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+                rc = KOutMsg( "%lu.%.*s", seq_spot_id, spot_group_len, spot_group );
+            else
+            /* we do NOT have to append the spot-group */
+                rc = KOutMsg( "%lu", seq_spot_id );
+        }
+    }
+    return rc;
+}
+
+
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+                       const char * spot_group, uint32_t spot_group_len )
+{
+    rc_t rc;
+
+    if ( opts->qname_prefix != NULL )
+    {
+        /* we do have to print a prefix */
+        if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+            rc = KOutMsg( "%s.%.*s%.*s", opts->qname_prefix, name_len, name, spot_group_len, spot_group );
+        else
+        /* we do NOT have to append the spot-group */
+            rc = KOutMsg( "%s.%.*s", opts->qname_prefix, name_len, name );
+    }
+    else
+    {
+        /* we do NOT have to print a prefix */
+        if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+            rc = KOutMsg( "%.*s.%.*s", name_len, name, spot_group_len, spot_group );
+        else
+        /* we do NOT have to append the spot-group */
+            rc = KOutMsg( "%.*s", name_len, name );
+    }
+    return rc;
+}
+
+#define USE_KWRT_HANDLER 1
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+    uint32_t i;
+    rc_t rc = 0;
+    bool quantize = ( opts->qual_quant != NULL );
+
+    size_t size = 0;
+    char buffer [ 4096 ];
+#if USE_KWRT_HANDLER
+    size_t num_writ;
+    KWrtHandler * kout_msg_handler = KOutHandlerGet ();
+    assert ( kout_msg_handler != NULL );
+#endif
+    if ( reverse )
+    {
+        if ( quantize )
+        {
+            for ( i = qual_len; i > 0; )
+            {
+                uint32_t qual = quality[ -- i ];
+                buffer [ size ] = ( opts->qual_quant_matrix[ qual ] + 33 );
+                if ( ++ size == sizeof buffer )
+                {
+#if USE_KWRT_HANDLER
+                    rc = ( * kout_msg_handler -> writer ) ( kout_msg_handler -> data, buffer, size, & num_writ );
+#else
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+#endif
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+        }
+        else
+        {
+            for ( i = qual_len; i > 0; )
+            {
+                buffer [ size ] = quality[ -- i ] + 33;
+                if ( ++ size == sizeof buffer )
+                {
+#if USE_KWRT_HANDLER
+                    rc = ( * kout_msg_handler -> writer ) ( kout_msg_handler -> data, buffer, size, & num_writ );
+#else
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+#endif
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+        }
+    }
+    else
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len; ++i )
+            {
+                uint32_t qual = quality[ i ];
+                buffer [ size ] = opts->qual_quant_matrix[ qual ] + 33;
+                if ( ++ size == sizeof buffer )
+                {
+#if USE_KWRT_HANDLER
+                    rc = ( * kout_msg_handler -> writer ) ( kout_msg_handler -> data, buffer, size, & num_writ );
+#else
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+#endif
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+
+        }
+        else
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                buffer [ size ] = quality[ i ] + 33;
+                if ( ++ size == sizeof buffer )
+                {
+#if USE_KWRT_HANDLER
+                    rc = ( * kout_msg_handler -> writer ) ( kout_msg_handler -> data, buffer, size, & num_writ );
+#else
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+#endif
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && size != 0 )
+    {
+#if USE_KWRT_HANDLER
+        rc = ( * kout_msg_handler -> writer ) ( kout_msg_handler -> data, buffer, size, & num_writ );
+#else
+        rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+#endif
+    }
+    return rc;
+}
+
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+    uint32_t i;
+    rc_t rc = 0;
+    bool quantize = ( opts->qual_quant != NULL );
+
+    size_t size = 0;
+    char buffer [ 4096 ];
+
+    if ( reverse )
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ qual_len - i - 1 ] - 33;
+                buffer [ size ] = ( opts->qual_quant_matrix[ qual ] + 33 );
+                if ( ++ size == sizeof buffer )
+                {
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+        }
+        else
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                buffer [ size ] = quality[ qual_len - i - 1 ];
+                if ( ++ size == sizeof buffer )
+                {
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+        }
+    }
+    else
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ i ] - 33;
+                buffer [ size ] = opts->qual_quant_matrix[ qual ] + 33;
+                if ( ++ size == sizeof buffer )
+                {
+                    rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+                    if ( rc != 0 )
+                        break;
+                    size = 0;
+                }
+            }
+
+        }
+        else
+        {
+            rc = KOutMsg( "%.*s", qual_len, quality );
+        }
+    }
+
+    if ( rc == 0 && size != 0 )
+        rc = KOutMsg( "%.*s", ( uint32_t ) size, buffer );
+
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-dump-opts.h b/tools/sra-pileup/sam-dump-opts.h
new file mode 100644
index 0000000..71c0ba8
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.h
@@ -0,0 +1,306 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sam_dump_opts_
+#define _h_sam_dump_opts_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <kapp/args.h>
+#include "perf_log.h"
+#include "rna_splice_log.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <strtol.h>
+
+
+#define OPT_UNALIGNED   "unaligned"
+#define OPT_PRIM_ONLY   "primary"
+#define OPT_CIGAR_LONG  "cigar-long"
+#define OPT_CG_SAM      "CG-SAM"
+#define OPT_CG_EVIDENCE "CG-evidence"
+#define OPT_CG_EV_DNB   "CG-ev-dnb"
+#define OPT_CG_MAPP     "CG-mappings"
+#define OPT_REGION      "aligned-region"
+#define OPT_RECAL_HDR   "header"
+#define OPT_HDR_FILE    "header-file"
+#define OPT_NO_HDR      "no-header"
+#define OPT_USE_SEQID   "seqid"
+#define OPT_HIDE_IDENT  "hide-identical"
+#define OPT_CIGAR_CG    "cigar-CG"
+#define OPT_CIGAR_CG_M  "cigar-CG-merge"
+#define OPT_PREFIX      "prefix"
+#define OPT_REVERSE     "reverse"
+#define OPT_SPOTGRP     "spot-group"
+#define OPT_MATE_GAP    "mate-cache-row-gap"
+#define OPT_XI_DEBUG    "XI"
+#define OPT_Q_QUANT     "qual-quant"
+#define OPT_GZIP        "gzip"
+#define OPT_BZIP2       "bzip2"
+#define OPT_FASTQ       "fastq"
+#define OPT_FASTA       "fasta"
+#define OPT_HDR_COMMENT "header-comment"
+#define OPT_MATE_DIST   "matepair-distance"
+#define OPT_OUTPUTFILE  "output-file"
+#define OPT_OUTBUFSIZE  "output-buffer-size"
+#define OPT_REPORT      "report"
+#define OPT_CACHEREPORT "cachereport"
+#define OPT_UNALIGNED_ONLY "unaligned-spots-only"
+#define OPT_CG_NAMES    "CG-names"
+#define OPT_CIGAR_TEST  "cigar-test"
+#define OPT_CURSOR_CACHE "cursor-cache"
+#define OPT_DUMP_MODE   "dump-mode"
+#define OPT_MIN_MAPQ    "min-mapq"
+#define OPT_NO_MATE_CACHE "no-mate-cache"
+#define OPT_LEGACY      "legacy"
+#define OPT_NEW         "new"
+#define OPT_RNA_SPLICE  "rna-splicing"
+#define OPT_RNA_SPLICEL "rna-splice-level"
+#define OPT_RNA_SPLICE_LOG "rna-splice-log"
+#define OPT_NO_MT       "disable-multithreading"
+#define OPT_TIMING      "timing"
+#define OPT_MD_FLAG     "with-md-flag"
+
+typedef struct range
+{
+    uint64_t start;
+    uint64_t end;
+} range;
+
+
+typedef struct reference_region
+{
+    BSTNode node;
+    const char * name;      /* the name of the reference */
+    Vector ranges;          /* what regions on this reference */
+} reference_region;
+
+
+enum header_mode
+{
+    hm_none = 0,    /* do not dump the headers at all */
+    hm_recalc,      /* recalculate the headers */
+    hm_dump,        /* dump the header found in metadata */
+    hm_file         /* take the complete header part from a file */
+};
+
+enum output_format
+{
+    of_sam = 0,     /* use sam-tools format */
+    of_fasta,       /* use fasta-format */
+    of_fastq        /* use fastq-format */
+};
+
+enum output_compression
+{
+    oc_none = 0,    /* do not compress output */
+    oc_gzip,        /* compress output with gzip */
+    oc_bzip2        /* compress output with bzip2 */
+};
+
+enum cigar_treatment
+{
+    ct_unchanged = 0,   /* use the cigar-string as it is stored */
+    ct_cg_style,        /* transform cigar into cg-style ( has B/N ) */
+    ct_cg_merge         /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+};
+
+
+enum dump_mode
+{
+    /* in case of: aligned reads requested + no regions given */
+    dm_one_ref_at_a_time = 0,   /* create a set-iter each for every reference sequentially, put only one reference into it */
+    dm_prepare_all_refs         /* create only ONE set-iter, put ALL references into it */
+};
+
+
+typedef struct samdump_opts
+{
+    /* tree with regions, each node has a sorted vector of ranges, can be empty ... */
+    BSTree regions;     /* contains reference_region structs */
+
+    /* vector with header-comments, can be empty... */
+    VNamelist * hdr_comments;
+
+    /* vector input files/accessions/url's */
+    VNamelist * input_files;
+
+    /* vector with metapair-distances... */
+    Vector mp_dist;
+
+    /* prepend qname with this prefix */
+    const char * qname_prefix;
+
+    /* the quality quantization string */
+    const char * qual_quant;
+
+    /* optional outputfile */
+    const char * outputfile;
+
+    /* optional header-file */
+    const char * header_file;
+
+    /* cigar-test >>> not advertized! */
+    const char * cigar_test;
+
+    /* timing-file >>> not advertized! */
+    const char * timing_file;
+
+    /* log file for rna-splicing-events */
+    const char * rna_splice_log_file;
+
+    /* timing-performane-log, created if timing_file given */
+    struct perf_log * perf_log;
+
+    /* logging of rna-splicing on reqest */
+    struct rna_splice_log * rna_splice_log;
+
+    uint32_t region_count;
+    uint32_t input_file_count;
+    uint32_t rna_splice_level;  /* can be 0 || 1 || 2 */
+
+    int32_t min_mapq;
+
+    /* how much buffering on the output-buffer, of OFF if zero */
+    uint32_t output_buffer_size;
+
+    /* mate's farther apart than this are not cached */
+    uint32_t mape_gap_cache_limit;
+
+    size_t cursor_cache_size;
+
+    /* how the sam-headers are treated */
+    enum header_mode header_mode;
+
+    /* how the cigar-string is treated */
+    enum cigar_treatment cigar_treatment;
+
+    /* in which format should the output be created */
+    enum output_format output_format;
+
+    /* should the output be compressed / in which format */
+    enum output_compression output_compression;
+
+    /* how to process in case of: aligned reads requested + no regions given */
+    enum dump_mode dump_mode;
+
+    /* use a mate-cache to dump aligned and half-aligned reads */
+    bool use_mate_cache;
+    bool force_legacy;
+    bool force_new;
+
+    /* which tables have to be processed/dumped */
+    bool dump_primary_alignments;
+    bool dump_secondary_alignments;
+    bool dump_cg_evidence;
+    bool dump_cg_sam;
+    bool dump_cg_ev_dnb;
+    bool merge_cg_cigar;
+
+    bool dump_unaligned_reads;
+    bool dump_unaligned_only;
+    bool dump_cga_tools_mode;
+
+    /* what alignment/unaligned reads should be dumped */
+    bool print_half_unaligned_reads;
+    bool print_fully_unaligned_reads;
+
+    /* flag that shows if we need to filter by matepair-distance */
+    bool use_matepair_filter;
+    bool use_min_mapq;
+
+    /* options changing the output-format */
+    bool use_seqid_as_refname;
+    bool use_long_cigar;
+    bool print_matches_as_equal_sign;
+    bool print_spot_group_in_name;
+    bool reverse_unaligned_reads;
+    bool print_alignment_id_in_column_xi;
+    bool report_options;
+    bool report_cache;
+    bool print_cg_names;
+    bool rna_splicing;
+
+    /* option to disable multi-threading */
+    bool no_mt;
+    
+	bool with_md_flag;
+	
+    uint8_t qual_quant_matrix[ 256 ];
+} samdump_opts;
+
+
+typedef struct foreach_reference_func
+{
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data );
+    const char * name;
+    void * data;
+    rc_t rc;
+} foreach_reference_func;
+
+
+rc_t foreach_reference( BSTree * regions,
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ), 
+    void *data );
+
+int cmp_pchar( const char * a, const char * b );
+
+rc_t gather_options( Args * args, samdump_opts * opts );
+void report_options( const samdump_opts * opts );
+void release_options( samdump_opts * opts );
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen );
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+                                  uint64_t start, uint64_t len );
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+                const char * spot_group, uint32_t spot_group_len );
+
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+                       const char * spot_group, uint32_t spot_group_len );
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+#endif
diff --git a/tools/sra-pileup/sam-dump.c b/tools/sra-pileup/sam-dump.c
new file mode 100644
index 0000000..ac2ca96
--- /dev/null
+++ b/tools/sra-pileup/sam-dump.c
@@ -0,0 +1,4905 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/report.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <vdb/report.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/schema.h>
+#include <vdb/dependencies.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/quality-quantizer.h>
+
+#include <kfs/directory.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <string.h>
+#include <strtol.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+
+#if _ARCH_BITS == 64
+#define USE_MATE_CACHE 1
+#define CURSOR_CACHE (4 * 1024 * 1024 * 1024UL)
+#else
+#define USE_MATE_CACHE 0
+#define CURSOR_CACHE (256 * 1024 * 1024)
+#endif
+
+rc_t cg_canonical_print_cigar( const char * cigar, size_t cigar_len);
+
+
+
+typedef struct TAlignedRegion_struct
+{
+    char name[1024];
+    struct {
+        INSDC_coord_zero from;
+        INSDC_coord_zero to;
+    } r[10240];
+    int rq;
+    INSDC_coord_zero max_to;
+    INSDC_coord_zero min_from;
+    int printed;
+} TAlignedRegion;
+
+
+typedef struct TMatepairDistance_struct
+{
+    uint32_t from;
+    uint32_t to;
+} TMatepairDistance;
+
+
+struct params_s
+{
+    /* which outputs are on */
+    bool primaries;
+    bool secondaries;
+    bool unaligned;
+    bool cg_evidence;
+    bool cg_ev_dnb;
+    bool cg_sam;
+    
+    bool use_seqid;
+    bool long_cigar;
+    bool reheader;
+    bool noheader;
+    bool hide_identical;
+    bool fasta;
+    bool fastq;
+    bool spot_group_in_name;
+    bool cg_friendly_names;
+    bool reverse_unaligned;
+    bool unaligned_spots;
+    
+    bool output_gzip;
+    bool output_bz2;
+    
+    bool xi;
+    int cg_style; /* 0: raw; 1: with B's; 2: without B's, fixed up SEQ/QUAL; */
+    char const *name_prefix;
+    /* region filter data */
+    TAlignedRegion* region;
+    uint32_t region_qty;
+    /* distance filter data */
+    bool mp_dist_unknown;
+    TMatepairDistance* mp_dist;
+    uint32_t mp_dist_qty;
+    uint32_t test_rows;
+
+    /* mate info cache */
+    int64_t mate_row_gap_cachable;
+    
+    char const **comments;
+    
+    bool quantizeQual;
+    uint8_t qualQuant[256];
+    uint8_t qualQuantSingle; /*** the quality is quantized - single value, no need to retrieve **/
+};
+
+
+struct params_s const *param;
+ReferenceList const *gRefList;
+
+
+typedef union UData_union
+{
+    void const *v;
+    uint32_t const *u32;
+    int32_t const *i32;
+    int64_t const *i64;
+    uint64_t const *u64;
+    uint8_t const *u8;
+    char const *str;
+    bool const *tf;
+    INSDC_coord_one* coord1;
+    INSDC_coord_zero* coord0;
+    INSDC_coord_len* coord_len;
+    INSDC_coord_val* coord_val;
+    INSDC_SRA_xread_type* read_type;
+    INSDC_SRA_read_filter* read_filter;
+} UData;
+
+
+typedef struct SCol_struct
+{
+    char const *name;
+    uint32_t idx;
+    UData base;
+    uint32_t len;
+    bool optional;
+} SCol;
+
+
+typedef struct STable_struct
+{
+    char const *name;
+    VTable const *vtbl;
+} STable;
+
+
+typedef struct SCursCache_struct
+{
+    KVector* cache;
+    KVector* cache_unaligned_mate; /* keeps unaligned-mate for a half-aligned spots */
+    uint32_t sam_flags;
+    INSDC_coord_zero pnext;
+    int32_t tlen;
+    ReferenceObj const *ref;
+    /* cache stats */
+    uint64_t projected;
+    uint64_t added;
+    uint64_t hit;
+    uint64_t bad;
+} SCursCache;
+
+
+typedef struct SCurs_struct
+{
+    STable const *tbl;
+    VCursor const *vcurs;
+    SCursCache* cache;
+    SCursCache cache_local;
+    uint64_t col_reads_qty;
+} SCurs;
+
+enum eDSTableType
+{
+    edstt_NotSpecified,
+    edstt_Reference,
+    edstt_Sequence,
+    edstt_PrimaryAlignment,
+    edstt_SecondaryAlignment,
+    edstt_EvidenceAlignment,
+    edstt_EvidenceInterval
+};
+
+
+typedef struct DataSource_s {
+    STable tbl;
+    SCurs curs;
+    SCol *cols;
+    enum eDSTableType type;
+} DataSource;
+
+
+#define DATASOURCE_INIT(O, NAME) do { memset(&O, 0, sizeof(O)); O.tbl.name = NAME; O.curs.tbl = &O.tbl; } while(0)
+
+
+typedef struct SAM_dump_ctx_s
+{
+    VDatabase const *db;
+    char const *fullPath;
+    char const *accession;
+    char const *readGroup;
+    
+    DataSource ref;
+    DataSource pri;
+    DataSource sec;
+    DataSource evi;
+    DataSource eva;
+    DataSource seq;
+} SAM_dump_ctx_t;
+
+
+enum ealg_col
+{
+    alg_SEQ_SPOT_ID = 0,
+    alg_SEQ_NAME,
+    alg_MAPQ,
+    alg_CIGAR,
+    alg_READ,
+    alg_READ_START,
+    alg_READ_LEN,
+    alg_CIGAR_LEN,
+    alg_SAM_QUALITY,
+    alg_SPOT_GROUP,
+    alg_SEQ_SPOT_GROUP,
+    alg_SEQ_READ_ID,
+    alg_REVERSED,
+    alg_ALIGNMENT_COUNT,
+    alg_EDIT_DISTANCE,
+    alg_READ_FILTER,
+    alg_MATE_ALIGN_ID,
+    alg_MATE_REF_NAME,
+    alg_SAM_FLAGS,
+    alg_REF_START,
+    alg_MATE_REF_POS,
+    alg_ALIGN_GROUP,
+    alg_EVIDENCE_ALIGNMENT_IDS,
+    alg_REF_PLOIDY,
+    alg_REF_ID,
+    alg_MATE_REF_ID,
+    alg_HAS_MISMATCH,
+    alg_REGION_FILTER,
+    alg_REF_NAME = alg_REGION_FILTER,
+    alg_REF_SEQ_ID,
+    alg_REF_POS,
+    alg_REF_LEN,
+    alg_DISTANCE_FILTER,
+    alg_TEMPLATE_LEN = alg_DISTANCE_FILTER,
+    alg_CG_TAGS_STR
+};
+
+
+SCol const g_alg_col_tmpl[] =
+{
+    { "SEQ_SPOT_ID", 0, {NULL}, 0, true },
+    { "SEQ_NAME", 0, {NULL}, 0, false },
+    { "MAPQ", 0, {NULL}, 0, false },
+    { "?CIGAR column name?", 0, {NULL}, 0, false },
+    { "?READ column name?", 0, {NULL}, 0, false },
+    { "READ_START", 0, {NULL}, 0, false }, /* READ_START */
+    { "READ_LEN", 0, {NULL}, 0, false }, /* READ_LEN */
+    { "?CIGAR_LEN column name?", 0, {NULL}, 0, true }, /* CIGAR_LEN */
+    { "SAM_QUALITY", 0, {NULL}, 0, false },
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_READ_ID", 0, {NULL}, 0, true },
+    { "REF_ORIENTATION", 0, {NULL}, 0, true },
+    { "ALIGNMENT_COUNT", 0, {NULL}, 0, true },
+    { "EDIT_DISTANCE", 0, {NULL}, 0, false },
+    { "", 0, {NULL}, 0, false },
+    /* start cols used as standalone in DumpUnaligned */
+    /* MATE_ALIGN_ID col must preceeed
+       MATE_REF_NAME, MATE_REF_POS, SAM_FLAGS, TEMPLATE_LEN for cache to work */
+    { "MATE_ALIGN_ID", 0, {NULL}, 0, false },
+    { "?MATE_REF_NAME column name?", 0, {NULL}, 0, false },
+    { "SAM_FLAGS", 0, {NULL}, 0, false },
+    { "REF_START", 0, {NULL}, 0, false },  /* priming cursor cache */
+    { "MATE_REF_POS", 0, {NULL}, 0, false },
+    { "ALIGN_GROUP", 0, {NULL}, 0, true },
+    { "", 0, {NULL}, 0, true }, /* EVIDENCE_ALIGNMENT_IDS */
+    { "", 0, {NULL}, 0, true }, /* REF_PLOIDY */
+    { "REF_ID", 0, {NULL}, 0, true }, /* REF_ID */
+    { "MATE_REF_ID", 0, {NULL}, 0, true }, /* priming cursor cache */
+    { "(bool)HAS_MISMATCH", 0, {NULL}, 0, true },
+    /* these are read before any other for filtering so they must be last */
+    { "REF_NAME", 0, {NULL}, 0, false },
+    { "REF_SEQ_ID", 0, {NULL}, 0, false },
+    { "REF_POS", 0, {NULL}, 0, false },
+    /* end cols used as standalone in DumpUnaligned */
+    { "REF_LEN", 0, {NULL}, 0, false },
+    { "TEMPLATE_LEN", 0, {NULL}, 0, false },
+    { NULL, 0, {NULL}, 0, false }, /* alg_CG_TAGS_STR */
+    { NULL, 0, {NULL}, 0, false }
+};
+
+enum eseq_col
+{
+    seq_READ = 0,
+    seq_QUALITY,
+    seq_SPOT_GROUP,
+    seq_READ_START,
+    seq_READ_LEN,
+    seq_READ_TYPE,
+    seq_READ_FILTER,
+    seq_NAME,
+    seq_PRIMARY_ALIGNMENT_ID
+};
+
+static 
+SCol const gSeqCol[] =
+{
+    { "READ", 0, {NULL}, 0, false },
+    { "(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false },
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "READ_START", 0, {NULL}, 0, true },
+    { "READ_LEN", 0, {NULL}, 0, true },
+    { "READ_TYPE", 0, {NULL}, 0, true },
+    { "READ_FILTER", 0, {NULL}, 0, true },
+    { "NAME", 0, {NULL}, 0, true },
+    /* must be last in list to avoid reading all columns */
+    { "PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true },
+    { NULL, 0, {NULL}, 0, false }
+};
+
+
+static rc_t RefSeqPrint( void )
+{
+    rc_t rc = 0;
+    uint32_t i, count = 0;
+    
+    rc = ReferenceList_Count( gRefList, &count );
+    for( i = 0; rc == 0 && i < count; i++ )
+    {
+        ReferenceObj const *obj;
+        rc = ReferenceList_Get( gRefList, &obj, i );
+        if ( rc == 0 )
+        {
+            char const *seqid = NULL;
+            rc = ReferenceObj_SeqId( obj, &seqid );
+            if ( rc == 0 )
+            {
+                char const *name = NULL;
+                rc = ReferenceObj_Name( obj, &name );
+                if ( rc == 0 )
+                {
+                    INSDC_coord_len len;
+                    rc = ReferenceObj_SeqLength( obj, &len );
+                    if ( rc == 0 )
+                    {
+                        char const *nm;
+                        if ( param->use_seqid && seqid != NULL && seqid[ 0 ] != '\0' )
+                        {
+                            nm = seqid;
+                        }
+                        else
+                        {
+                            nm = name;
+                        }
+                        KOutMsg( "@SQ\tSN:%s", nm );
+                        if ( nm != seqid && seqid != NULL && seqid[ 0 ] != '\0' && strcmp( nm, seqid ) != 0)
+                        {
+                            KOutMsg( "\tAS:%s", seqid );
+                        }
+                        KOutMsg( "\tLN:%u\n", len );
+                    }
+                }
+            }
+            ReferenceObj_Release( obj );
+        }
+    }
+    return rc;
+}
+
+
+#if USE_MATE_CACHE
+static rc_t Cache_Init( SCursCache* c )
+{
+    if ( c != NULL )
+    {
+	rc_t rc;
+        memset( c, 0, sizeof( *c ) );
+        rc=KVectorMake( &c->cache );
+	if(rc == 0){
+		rc=KVectorMake( &c->cache_unaligned_mate );
+	}
+    }
+    return 0;
+}
+
+
+static void Cache_Close( char const *name, SCursCache* c )
+{
+    if ( c != NULL )
+    {
+        KVectorRelease( c->cache );
+        KVectorRelease( c->cache_unaligned_mate );
+        if ( c->added > 0 )
+        {
+            SAM_DUMP_DBG( 2, ( "%s cache stats: projected %lu added of those %lu; "
+                               "hits %lu of those broken %lu;\n",
+                               name, c->projected, c->added, c->hit, c->bad ) );
+        }
+    }
+    memset( c, 0, sizeof( *c ) );
+}
+
+
+static rc_t Cache_Add( uint64_t key, SCurs const *curs, SCol const *cols )
+{
+    /* compact values for mate record to cache as:
+        pos_delta - 32bit, ref_proj - 11bit, flags - 11bit, rnext_idx - 10bit = 64bit
+    */
+    rc_t rc = 0;
+    ReferenceObj const *r = NULL;
+    uint32_t rid = 0;
+    uint64_t val = 0;
+    int64_t mate_id = cols[ alg_MATE_ALIGN_ID ].len > 0 ? cols[ alg_MATE_ALIGN_ID ].base.i64[ 0 ] : 0;
+
+    rc = ReferenceList_Find( gRefList, &r, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len );
+    if ( rc == 0 )
+    {
+        rc = ReferenceObj_Idx( r, &rid );
+    }
+#if _DEBUGGING
+    {
+        char const *rname = NULL;
+        curs->cache->projected++;
+        ReferenceObj_Name( r, &rname );
+        SAM_DUMP_DBG( 10, ( "to cache row %li for mate %li: %u,%s[%hu],%u,%u,%i",
+            key, mate_id, cols[ alg_SAM_FLAGS ].base.u32[ 0 ], rname, rid,
+            cols[ alg_REF_POS ].len ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_MATE_REF_POS ].len ? cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_TEMPLATE_LEN ].len > 0 ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0));
+    }
+#endif
+    if ( rc == 0 && !( rid & 0xFC00 ) )
+    {
+        int64_t pos_delta64;
+        int32_t pos_delta32;
+
+        if ( mate_id != 0 )
+        {
+            ReferenceObj const *rm = NULL;
+            uint32_t rm_id;
+
+            rc = ReferenceList_Find( gRefList, &rm, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len );
+            if ( rc == 0 )
+            {
+                rc = ReferenceObj_Idx( rm, &rm_id );
+            }
+            assert( rm != NULL );
+            if ( rc == 0 && rid != rm_id )
+            {
+                char const *rm_name = NULL;
+                ReferenceObj_Name( rm, &rm_name );
+                mate_id = 0;
+                SAM_DUMP_DBG( 10, ( " mate ref differ: %s[%hu]!", rm_name, rm_id ) );
+            }
+            ReferenceObj_Release( rm );
+        }
+
+        if ( mate_id != 0 )
+        {
+            pos_delta64 = cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] - cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+        else
+        {
+            pos_delta64 = cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+
+        pos_delta32 = pos_delta64;
+        if ( pos_delta64 == pos_delta32 )
+        {
+            int64_t ref_proj;
+            if ( mate_id == 0 )
+            {
+                ref_proj = 0; /* indicates full value in delta */
+            }
+            else if ( cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] < 0 )
+            {
+                assert( pos_delta32 <= 0 );
+                ref_proj = pos_delta32 - cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ];
+            }
+            else
+            {
+                assert( pos_delta32 >= 0 );
+                ref_proj = cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] - pos_delta32;
+            }
+
+            if ( !( ref_proj & 0xFFFFF800 ) )
+            {
+                val = ( pos_delta64 << 32 ) | ( ref_proj << 21 ) | ( cols[ alg_SAM_FLAGS ].base.u32[ 0 ] << 10 ) | rid;
+                rc = KVectorSetU64( curs->cache->cache, key, val );
+            }
+        }
+    }
+    ReferenceObj_Release( r );
+
+#if _DEBUGGING
+    if ( val == 0 )
+    {
+        SAM_DUMP_DBG( 10, ( " --> out of range\n" ) );
+    }
+    else
+    {
+        SAM_DUMP_DBG( 10, ( " --> %016lX\n", val ) );
+        curs->cache->added++;
+    }
+#endif
+    return rc;
+}
+
+
+static rc_t Cache_Get( SCurs const *curs, uint64_t key, uint64_t* val )
+{
+    rc_t rc = KVectorGetU64( curs->cache->cache, key, val );
+    if ( rc == 0 )
+    {
+        uint32_t id = ( *val & 0x3FF );
+#if _DEBUGGING
+        curs->cache->hit++;
+#endif
+        KVectorUnset( curs->cache->cache, key );
+        rc = ReferenceList_Get( gRefList, &curs->cache->ref, id );
+        if ( rc != 0 )
+        {
+            *val = 0;
+            curs->cache->ref = NULL;
+            rc = RC( rcExe, rcNoTarg, rcSearching, rcItem, rcNotFound );
+#if _DEBUGGING
+            curs->cache->bad++;
+#endif
+        }
+        else
+        {
+            SAM_DUMP_DBG( 10, ( "from cache row %li %016lX", key, *val ) );
+        }
+    }
+    return rc;
+}
+
+
+static void Cache_Unpack( uint64_t val, int64_t mate_id, SCurs const *curs, SCol* cols )
+{
+    int32_t pos_delta = ( val & 0xFFFFFFFF00000000 ) >> 32;
+    uint32_t ref_proj = ( val & 0x00000000FFE00000 ) >> 21;
+    uint32_t flags = ( val & 0x00000000001FFC00 ) >> 10;
+
+    if ( mate_id != 0 )
+    {
+        /* adjust flags for mate record */
+        curs->cache->sam_flags = ( flags & 0x1 ) |
+                                 ( flags & 0x2 ) |
+                                 ( ( flags & 0x8 ) >> 1 ) |
+                                 ( ( flags & 0x4 ) << 1 ) |
+                                 ( ( flags & 0x20 ) >> 1 ) |
+                                 ( ( flags & 0x10 ) << 1 ) |
+                                 ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+                                 ( flags & 0x700 );
+    }
+    else
+    {
+        /* preserve flags as if original records is restored */
+        curs->cache->sam_flags = flags;
+    }
+    cols[ alg_SAM_FLAGS ].base.u32 = &curs->cache->sam_flags;
+    cols[ alg_SAM_FLAGS ].len = sizeof( curs->cache->sam_flags );
+
+    if ( param->use_seqid )
+    {
+        ReferenceObj_SeqId( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+    else
+    {
+        ReferenceObj_Name( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+
+    cols[ alg_MATE_REF_NAME ].len = string_size( cols[ alg_MATE_REF_NAME ].base.str );
+
+    if ( ref_proj == 0 )
+    {
+        curs->cache->pnext = pos_delta;
+        curs->cache->tlen = 0;
+    }
+    else if ( pos_delta > 0 )
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = - ( ref_proj + pos_delta );
+    }
+    else
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = ref_proj - pos_delta;
+    }
+
+    cols[ alg_MATE_REF_POS ].base.coord0 = &curs->cache->pnext;
+    cols[ alg_MATE_REF_POS ].len = sizeof( curs->cache->pnext );
+    cols[ alg_TEMPLATE_LEN ].base.i32 = &curs->cache->tlen;
+    cols[ alg_TEMPLATE_LEN ].len = sizeof( curs->cache->tlen );
+    {
+        uint32_t id;
+        ReferenceObj_Idx( curs->cache->ref, &id );
+        SAM_DUMP_DBG( 10, ( " --> mate %li: %u,%s[%hu],%u,%i\n",
+            mate_id, curs->cache->sam_flags, cols[ alg_MATE_REF_NAME ].base.str,
+            id, curs->cache->pnext, curs->cache->tlen ) );
+    }
+}
+#endif /* USE_MATE_CACHE */
+
+#if 0
+static rc_t OpenVTable( VDatabase const *db, STable* tbl, char const *name, bool optional )
+{
+    rc_t rc = VDatabaseOpenTableRead( db, &tbl->vtbl, "%s", name );
+    if ( GetRCState( rc ) == rcNotFound && optional )
+    {
+        rc = 0;
+        tbl->vtbl = NULL;
+    }
+    tbl->name = name;
+    return rc;
+}
+#endif
+
+static rc_t Cursor_Open( STable const *const tbl, SCurs *const curs, SCol cols[], SCursCache* cache )
+{
+    rc_t rc = 0;
+    unsigned i;
+
+    curs->vcurs = NULL;
+    if ( tbl == NULL || tbl->vtbl == NULL )
+        return 0;
+
+    rc = VTableCreateCachedCursorRead( tbl->vtbl, &curs->vcurs, CURSOR_CACHE );
+    if ( rc != 0 )
+        return rc;
+    
+    rc = VCursorPermitPostOpenAdd( curs->vcurs );
+    if ( rc != 0 )
+        return rc;
+
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( curs->vcurs );
+        if ( rc == 0 )
+        {
+#if USE_MATE_CACHE
+            if ( cache != NULL )
+            {
+                curs->cache = cache;
+            }
+            else
+            {
+                curs->cache = &curs->cache_local;
+                rc = Cache_Init( &curs->cache_local );
+            }
+#endif /* USE_MATE_CACHE */
+            curs->tbl = tbl;
+        }
+    }
+    
+    for ( i = 0; cols[ i ].name != NULL; ++i )
+    {
+        if ( cols[ i ].name[ 0 ] == 0 )
+            continue;
+        rc = VCursorAddColumn( curs->vcurs, &cols[ i ].idx, "%s", cols[ i ].name );
+        if ( GetRCObject( rc ) == ( enum RCObject ) rcColumn )
+        {
+            switch ( GetRCState( rc ) )
+            {
+            case rcNotFound:
+            case rcUndefined:
+                if ( !cols[ i ].optional )
+                    break;
+            case rcExists:
+                rc = 0;
+            default:
+                break;
+            }
+        }
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t) column $(c)", "t=%s,c=%s", tbl->name, cols[ i ].name ) );
+            break;
+        }
+    }
+    if ( rc != 0 )
+    {
+        VCursorRelease( curs->vcurs );
+        curs->vcurs = NULL;
+        if ( rc != KLogLastErrorCode() )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t)", "t=%s", tbl->name ) );
+        }
+    }
+    else
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s\n", __func__, curs->tbl->name ) );
+    }
+    return rc;
+}
+
+
+static void Cursor_Close( SCurs* curs )
+{
+    if ( curs != NULL && curs->vcurs != NULL )
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s, columns rows read %lu\n", __func__, curs->tbl->name, curs->col_reads_qty ) );
+        VCursorRelease( curs->vcurs );
+#if USE_MATE_CACHE
+        if ( curs->cache == &curs->cache_local )
+        {
+            Cache_Close( curs->tbl->name, curs->cache );
+        }
+#endif /* USE_MATE_CACHE */
+        memset( curs, 0, sizeof( *curs ) );
+    }
+}
+
+
+static rc_t Cursor_Read( DataSource *ds, int64_t row_id, int firstCol, unsigned nCols )
+{
+    rc_t rc = 0;
+
+    if ( ds->curs.vcurs == NULL )
+    {
+        rc = Cursor_Open( &ds->tbl, &ds->curs, ds->cols, ds->curs.cache );
+        if ( rc != 0 )
+            return rc;
+    }
+    if (1)
+    {
+        SCol *const col = &ds->cols[ firstCol ];
+        unsigned i;
+        
+        for ( i = 0; i < nCols && col[ i ].name; ++i )
+        {
+            uint32_t const idx = col[ i ].idx;
+            
+            if ( idx != 0 )
+            {
+                uint32_t elem_bits;
+                uint32_t bit_offset;
+                uint32_t elem_count;
+                void const *base;
+                
+                rc = VCursorCellDataDirect( ds->curs.vcurs, row_id, idx, &elem_bits, &base, &bit_offset, &elem_count );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+                                               ds->tbl.name, row_id, col[ i ].name ) );
+                    return rc;
+                }
+                
+                assert( bit_offset == 0 );
+                assert( elem_bits % 8 == 0 );
+                
+                col[ i ].base.v = base;
+                col[ i ].len = elem_count;
+            }
+        }
+    }
+    return rc;
+}
+
+struct
+{
+    KWrtWriter writer;
+    void* data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = {NULL};
+
+
+static rc_t CC BufferedWriter( void *const self, char const buffer[], size_t const bufsize, size_t *const pnum_writ )
+{
+    rc_t rc = 0;
+    size_t written = 0;
+
+    assert( buffer != NULL );
+
+    while ( written < bufsize )
+    {
+        size_t n;
+
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos + written, &buffer[ written ], bufsize - written, &n );
+        if ( rc != 0 )
+            break;
+        written += n;
+    }
+    g_out_writer.pos += written;
+    if ( pnum_writ != NULL )
+        *pnum_writ = written;
+    return rc;
+}
+
+
+static rc_t BufferedWriterMake( bool gzip, bool bzip2 )
+{
+    rc_t rc = 0;
+
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else if ( g_out_writer.writer != NULL )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        rc = KFileMakeStdOut( &g_out_writer.kfile );
+        if ( rc == 0 )
+        {
+            g_out_writer.pos = 0;
+            if ( gzip )
+            {
+                KFile* gz;
+                rc = KFileMakeGzipForWrite( &gz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = gz;
+                }
+            }
+            else if ( bzip2 )
+            {
+                KFile* bz;
+                rc = KFileMakeBzip2ForWrite( &bz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = bz;
+                }
+            }
+            if ( rc == 0 )
+            {
+                KFile* buf;
+                rc = KBufFileMakeWrite( &buf, g_out_writer.kfile, false, 128 * 1024 );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = buf;
+                    g_out_writer.writer = KOutWriterGet();
+                    g_out_writer.data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static void BufferedWriterRelease( bool flush )
+{
+    if ( flush )
+    {
+        /* avoid flushing buffered data after failure */
+        KFileRelease( g_out_writer.kfile );
+    }
+    if ( g_out_writer.writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.writer, g_out_writer.data );
+    }
+    g_out_writer.writer = NULL;
+}
+
+
+typedef struct ReadGroup
+{
+    BSTNode node;
+    char name[ 1024 ];
+} ReadGroup;
+
+
+static int64_t CC ReadGroup_sort( BSTNode const *item, BSTNode const *node )
+{
+    return strcmp( ( ( ReadGroup const * )item )->name, ( ( ReadGroup const * ) node )->name );
+}
+
+
+static rc_t ReadGroup_print( char const *nm )
+{
+    rc_t rc = 0;
+    if ( nm[ 0 ] != '\0' && strcasecmp( nm, "default" ) )
+    {
+        rc = KOutMsg( "@RG\tID:%s\n", nm );
+    }
+    return rc;
+}
+
+
+static void CC ReadGroup_dump( BSTNode *n, void *data )
+{
+    ReadGroup const *g = ( ReadGroup* )n;
+    ReadGroup_print( g->name );
+}
+
+
+static rc_t CC DumpReadGroupsScan( STable const *tbl )
+{
+    SCol cols[] =
+    {
+        { "SPOT_GROUP", 0, {NULL}, 0, false },
+        { NULL, 0, {NULL}, 0, false }
+    };
+    rc_t rc = 0;
+    BSTree tree;
+    DataSource ds;
+
+    memset( &ds, 0, sizeof( ds ) );
+    ds.cols = cols;
+
+    BSTreeInit( &tree );
+    rc = Cursor_Open( tbl, &ds.curs, ds.cols, NULL );
+    if ( rc == 0 )
+    {
+        int64_t start;
+        uint64_t count;
+
+        rc = VCursorIdRange( ds.curs.vcurs, 0, &start, &count );
+        if ( rc == 0 )
+        {
+            ReadGroup* node = NULL;
+            uint32_t last_len = 0;
+
+            while ( count > 0 && rc == 0 )
+            {
+                rc = Cursor_Read( &ds, start, 0, ~(unsigned)0 );
+                if ( rc == 0 && cols[ 0 ].len != 0 )
+                {
+                    if ( node == NULL ||
+                         last_len != cols[ 0 ].len ||
+                         strncmp( cols[ 0 ].base.str, node->name, cols[ 0 ].len ) != 0 )
+                    {
+                        node = malloc( sizeof( *node ) );
+                        if ( node == NULL )
+                        {
+                            rc = RC( rcExe, rcNode, rcConstructing, rcMemory, rcExhausted );
+                        }
+                        else if ( cols[ 0 ].len > sizeof( node->name ) )
+                        {
+                            rc = RC( rcExe, rcString, rcCopying, rcBuffer, rcInsufficient ); 
+                        }
+                        else
+                        {
+                            last_len = cols[ 0 ].len;
+                            string_copy( node->name, ( sizeof node->name ) - 1, cols[ 0 ].base.str, last_len );
+                            node->name[ last_len ] = '\0';
+                            rc = BSTreeInsertUnique( &tree, &node->node, NULL, ReadGroup_sort );
+                            if ( GetRCState( rc ) == rcExists )
+                            {
+                                free( node );
+                                rc = 0;
+                            }
+                        }
+                    }
+                }
+                else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
+                    rc = 0;
+                }
+                start++;
+                count--;
+            }
+        }
+        Cursor_Close( &ds.curs );
+    }
+
+    if ( rc == 0 )
+    {
+        BSTreeForEach( &tree, false, ReadGroup_dump, NULL );
+    }
+    else if ( rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+    }
+    BSTreeWhack( &tree, NULL, NULL );
+    return rc;
+}
+
+
+rc_t CC DumpReadGroups( STable const *tbl )
+{
+    rc_t rc = 0;
+    KMetadata const *m;
+
+    /* try getting list from stats meta */
+    rc = VTableOpenMetadataRead( tbl->vtbl, &m );
+    if ( rc == 0 )
+    {
+        KMDataNode const *n;
+        rc = KMetadataOpenNodeRead( m, &n, "/STATS/SPOT_GROUP" );
+        if ( rc == 0 )
+        {
+            KNamelist* names;
+            rc = KMDataNodeListChild( n, &names );
+            if ( rc == 0 )
+            {
+                uint32_t i, q;
+                rc = KNamelistCount( names, &q );
+                if ( rc == 0 )
+                {
+                    for ( i = 0; rc == 0 && i < q; i++ )
+                    {
+                        char const *nm;
+                        rc = KNamelistGet( names, i, &nm );
+                        if ( rc == 0 )
+                        {
+                            rc = ReadGroup_print( nm );
+                        }
+                    }
+                }
+                KNamelistRelease( names );
+            }
+            KMDataNodeRelease( n );
+        }
+        KMetadataRelease( m );
+    }
+
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        rc = DumpReadGroupsScan( tbl );
+    }
+    else if ( rc != 0 && rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+    }
+    return rc;
+}
+
+static rc_t Cursor_ReadAlign( SCurs const *curs, int64_t row_id, SCol* cols, uint32_t idx )
+{
+    rc_t rc = 0;
+    SCol* c = NULL;
+    SCol* mate_id = NULL;
+#if USE_MATE_CACHE
+    uint64_t cache_val = 0;
+    bool cache_miss = false;
+#endif /* USE_MATE_CACHE */
+
+    
+    for( ; rc == 0 && cols[ idx ].name != NULL; idx++ )
+    {
+        c = &cols[ idx ];
+        if ( c->idx != 0 )
+        {
+#if USE_MATE_CACHE
+            if ( mate_id != NULL && curs->cache != NULL && !cache_miss &&
+                ( idx == alg_SAM_FLAGS || idx == alg_MATE_REF_NAME || idx == alg_MATE_REF_POS || idx == alg_TEMPLATE_LEN ) &&
+                mate_id->idx && mate_id->len > 0 && mate_id->base.i64[ 0 ] > 0 )
+            {
+                if ( cache_val != 0 )
+                {
+                    continue;
+                }
+                rc = Cache_Get( curs, mate_id->base.u64[ 0 ], &cache_val );
+                if ( rc == 0 )
+                {
+                    continue;
+                }
+                else if ( !( GetRCObject( rc ) == rcItem && GetRCState( rc ) == rcNotFound ) )
+                {
+                    break;
+                }
+                else
+                {
+                    /* avoid multiple lookups in cache */
+                    cache_miss = true;
+                }
+            }
+#endif /* USE_MATE_CACHE */
+            rc = VCursorCellDataDirect( curs->vcurs, row_id, c->idx, NULL, &c->base.v, NULL, &c->len );
+            if ( rc == 0 )
+            {
+                if ( idx == alg_SEQ_SPOT_ID && ( c->len  ==0 || c->base.i64[ 0 ] == 0 ) )
+                {
+                    return RC( rcExe, rcColumn, rcReading, rcRow, rcNotFound );
+                }
+                if ( idx == alg_MATE_ALIGN_ID )
+                {
+                    mate_id = &cols[ alg_MATE_ALIGN_ID ];
+                }
+#if _DEBUGGING
+                ( ( SCurs* )curs )->col_reads_qty++;
+#endif
+            }
+        }
+        else
+        {
+            static INSDC_coord_zero readStart;
+            static INSDC_coord_len  readLen;
+            static INSDC_coord_len  cigarLen;
+            
+            switch ( (int)idx )
+            {
+            case alg_READ_START:
+                readStart = 0;
+                c->base.coord0 = &readStart;
+                c->len = 1;
+                break;
+            case alg_READ_LEN:
+                readLen = cols[ alg_READ ].len;
+                c->base.coord_len = &readLen;
+                c->len = 1;
+                break;
+            case alg_CIGAR_LEN:
+                cigarLen = cols[ alg_CIGAR ].len;
+                c->base.coord_len = &cigarLen;
+                c->len = 1;
+                break;
+            }
+        }
+    }
+
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+            curs->tbl->name, row_id, c ? c->name : "<none>" ) );
+#if USE_MATE_CACHE
+    }
+    else if ( curs->cache == NULL )
+    {
+    }
+    else if ( cache_val == 0 )
+    {
+        /* this row is not from cache */
+        int64_t mate_align_id = ( mate_id != NULL && mate_id->len > 0 ) ? mate_id->base.i64[ 0 ] : 0;
+        if ( cols[ 0 ].idx != 0 && /* we have full cursor which means we are reading alignment table */
+            /* no mate -> unaligned (not secondary!) */
+            ( ( mate_align_id == 0 && param->unaligned && curs->cache != &curs->cache_local ) ||
+            /* 2nd mate with higher rowid and more than set gap rows away */
+              ( mate_align_id != 0 && mate_align_id > row_id && ( mate_align_id - row_id) > param->mate_row_gap_cachable ) ) )
+        {
+          rc = Cache_Add( row_id, curs, cols );
+        }
+	if(param->unaligned == true && mate_align_id == 0 ){
+	  rc = KVectorSetBool( curs->cache->cache_unaligned_mate, cols[alg_SEQ_SPOT_ID].base.i64[0], true );
+        }
+    }
+    else
+    {
+        Cache_Unpack( cache_val, row_id, curs, cols );
+#endif /* USE_MATE_CACHE */
+    }
+    return rc;
+}
+
+
+static rc_t DumpName( char const *name, size_t name_len,
+                      const char spot_group_sep, char const *spot_group,
+                      size_t spot_group_len, int64_t spot_id )
+{
+    rc_t rc = 0;
+    if ( param->cg_friendly_names )
+    {
+        rc = KOutMsg( "%.*s-1:%lu", spot_group_len, spot_group, spot_id );
+    }
+    else
+    {
+        if ( param->name_prefix != NULL )
+        {
+            rc = KOutMsg( "%s.", param->name_prefix );
+        }
+        rc = BufferedWriter( NULL, name, name_len, NULL );
+        if ( rc == 0 && param->spot_group_in_name && spot_group_len > 0 )
+        {
+            rc = BufferedWriter( NULL, &spot_group_sep, 1, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, spot_group, spot_group_len, NULL );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t DumpQuality( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+    rc_t rc = 0;
+    if ( quality == NULL )
+    {
+        unsigned i;
+
+        for ( i = 0; rc == 0 && i < count; ++i )
+        {
+            char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+            rc = BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else if ( reverse || quantize )
+    {
+        unsigned i;
+
+        for ( i = 0; rc == 0 && i < count; ++i )
+        {
+            char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+            char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual;
+
+            rc = BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else
+    {
+        rc = BufferedWriter( NULL, quality, count, NULL );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnalignedFastX( const SCol cols[], uint32_t read_id, INSDC_coord_zero readStart, INSDC_coord_len readLen, int64_t row_id )
+{
+    /* fast[AQ] represnted in SAM fields:
+       [@|>]QNAME unaligned
+       SEQ
+       +
+       QUAL
+    */
+    rc_t rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+
+    /* QNAME: [PFX.]SEQUENCE:NAME[#SPOT_GROUP] */
+    if ( rc == 0 )
+        rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '#',
+                       cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+    if ( rc == 0 && read_id > 0 )
+    {
+        rc = KOutMsg( "/%u", read_id );
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, " unaligned\n", 11, NULL );
+
+    /* SEQ: SEQUENCE.READ */
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[readStart], readLen, NULL );
+    if ( rc == 0 && param->fastq )
+    {
+        /* QUAL: SEQUENCE.QUALITY */
+        rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+        if ( rc == 0 )
+            rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, false, param->quantizeQual );
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\n", 1, NULL );
+    return rc;
+}
+
+
+static rc_t DumpAlignedFastX( const SCol cols[], int64_t const alignId, uint32_t read_id, bool primary, bool secondary )
+{
+    rc_t rc = 0;
+    size_t nm;
+    unsigned readId;
+    unsigned const nreads = cols[ alg_READ_LEN ].len;
+
+    for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+    {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char synth_qname[ 40 ];
+        int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = cols[ alg_READ_LEN ].base.coord_len[ readId ];
+
+        /* fast[AQ] represnted in SAM fields:
+           [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
+           SEQ
+           +
+           QUAL
+        */
+        rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+        /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        if ( rc == 0 )
+            rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id);
+
+        if ( rc == 0 && read_id > 0 )
+            rc = KOutMsg( "/%u", read_id );
+
+        if ( rc == 0 )
+        {
+            if ( primary )
+            {
+                rc = BufferedWriter( NULL, " primary", 8, NULL );
+            }
+            else if ( secondary )
+            {
+                rc = BufferedWriter( NULL, " secondary", 10, NULL );
+            }
+        }
+
+        /* RNAME: REF_NAME or REF_SEQ_ID */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, " ref=", 5, NULL );
+        if ( rc == 0 )
+        {
+            if ( param->use_seqid )
+            {
+                rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+            }
+            else
+            {
+                rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+            }
+        }
+
+        /* POS: REF_POS, MAPQ: MAPQ */
+        if ( rc == 0 )
+            rc = KOutMsg( " pos=%u mapq=%i\n", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1, cols[ alg_MAPQ ].base.i32[ 0 ] );
+        
+        /* SEQ: READ */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, read, readlen, NULL );
+        if ( rc == 0 && param->fastq )
+        {
+            /* QUAL: SAM_QUALITY */
+            rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+            if ( rc == 0 )
+                rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+        }
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\n", 1, NULL );
+    }
+    return rc;
+}
+
+
+static
+rc_t DumpUnalignedSAM( const SCol cols[], uint32_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
+                       char const *rnext, uint32_t rnext_len, INSDC_coord_zero pnext, char const readGroup[], int64_t row_id )
+{
+    unsigned i;
+
+    /* QNAME: [PFX.]NAME[.SPOT_GROUP] */
+    rc_t rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '.',
+              cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+
+    /* all these fields are const text for now */
+    if ( rc == 0 )
+        rc = KOutMsg( "\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t",
+             flags, rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext );
+    /* SEQ: SEQUENCE.READ */
+    if ( flags & 0x10 )
+    {
+        for( i = 0; i < readLen && rc == 0; i++ )
+        {
+            char base;
+
+            DNAReverseCompliment( &cols[ seq_READ ].base.str[ readStart + readLen - 1 - i ], &base, 1 );
+            rc = BufferedWriter( NULL, &base, 1, NULL );
+        }
+    }
+    else
+    {
+        rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[ readStart ], readLen, NULL );
+    }
+
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\t", 1, NULL );
+    /* QUAL: SEQUENCE.QUALITY */
+    if ( rc == 0 )
+        rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, flags & 0x10, param->quantizeQual );
+
+    /* optional fields: */
+    if ( rc == 0 )
+    {
+        if ( readGroup )
+        {
+            rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+        }
+        else if ( cols[ seq_SPOT_GROUP ].len > 0 )
+        {
+            /* read group */
+            rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, NULL );
+        }
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\n", 1, NULL );
+    return rc;
+}
+
+
+static
+rc_t DumpAlignedSAM( SAM_dump_ctx_t *const ctx,
+                     DataSource const *ds,
+                     int64_t alignId,
+                     char const readGroup[],
+                     int type)
+{
+    rc_t rc = 0;
+    unsigned const nreads = ds->cols[ alg_READ_LEN ].len;
+    SCol const *const cols = ds->cols;
+    int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+    INSDC_coord_one const read_id = cols[alg_SEQ_READ_ID].len > 0 ? cols[alg_SEQ_READ_ID].base.coord1[0] : 0;
+    INSDC_SRA_read_filter const *align_filter = cols[alg_READ_FILTER].len == nreads ? cols[alg_READ_FILTER].base.read_filter : NULL;
+    INSDC_SRA_read_filter seq_filter = 0;
+    unsigned readId;
+    unsigned cigOffset = 0;
+    
+    if ( align_filter == NULL && spot_id && read_id && ctx->seq.cols )
+    {
+        rc_t rc;
+        
+        rc = Cursor_Read(&ctx->seq, spot_id, seq_READ_FILTER, 1);
+        if (rc == 0 && ctx->seq.cols[seq_READ_FILTER].len >= read_id)
+            seq_filter = ctx->seq.cols[seq_READ_FILTER].base.read_filter[read_id - 1];
+    }
+
+    for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+    {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = nreads > 1 ? cols[ alg_READ_LEN ].base.coord_len[ readId ] : cols[ alg_READ ].len;
+        unsigned const sflags = cols[ alg_SAM_FLAGS ].base.v ? cols[ alg_SAM_FLAGS ].base.u32[ readId ] : 0;
+        INSDC_SRA_read_filter const filt = align_filter ? align_filter[readId] : seq_filter;
+        unsigned const flags = (sflags & ~((unsigned)0x200)) | ((filt == SRA_READ_FILTER_REJECT) ? 0x200 : 0);
+        char const *const cigar = cols[ alg_CIGAR ].base.str + cigOffset;
+        unsigned const cigLen = nreads > 1 ? cols[ alg_CIGAR_LEN ].base.coord_len[ readId ] : cols[ alg_CIGAR ].len;
+        size_t nm;
+        char synth_qname[1024];
+        
+        cigOffset += cigLen;
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "ALLELE_%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        else if (ds->type == edstt_EvidenceAlignment) {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%u/ALLELE_%li.%u", spot_id, cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id );
+
+        /* FLAG: SAM_FLAGS */
+        if ( rc == 0 )
+        {
+            if ( ds->type == edstt_EvidenceAlignment )
+            {
+                bool const cmpl = cols[alg_REVERSED].base.v && readId < cols[alg_REVERSED].len ? cols[alg_REVERSED].base.tf[readId] : false;
+                rc = KOutMsg( "\t%u\t", 1 | (cmpl ? 0x10 : 0) | (read_id == 1 ? 0x40 : 0x80) );
+            }
+            else if ( !param->unaligned      /** not going to dump unaligned **/
+                 && ( flags & 0x1 )     /** but we have sequenced multiple fragments **/
+                 && ( flags & 0x8 ) )   /** and not all of them align **/
+            {
+                /*** remove flags talking about multiple reads **/
+                /* turn off 0x001 0x008 0x040 0x080 */
+                rc = KOutMsg( "\t%u\t", flags & ~0xC9 );
+            }
+            else
+            {
+                rc = KOutMsg( "\t%u\t", flags );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            if ( ds->type == edstt_EvidenceAlignment && type == 0 )
+            {
+                rc = KOutMsg( "ALLELE_%li.%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            }
+            else
+            {
+                /* RNAME: REF_NAME or REF_SEQ_ID */
+                if ( param->use_seqid )
+                    rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+                else
+                    rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+            }
+        }
+
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* POS: REF_POS */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1 );
+
+        /* MAPQ: MAPQ */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_MAPQ ].base.i32[ 0 ] );
+
+        /* CIGAR: CIGAR_* */
+        if ( ds->type == edstt_EvidenceInterval )
+        {
+            unsigned i;
+            
+            for ( i = 0; i != cigLen && rc == 0; ++i )
+            {
+                char ch = cigar[i];
+                if ( ch == 'S' ) ch = 'I';
+                rc = BufferedWriter(NULL, &ch, 1, NULL);
+            }
+        }
+	else if(ds->type == edstt_EvidenceAlignment)
+	{
+		rc = cg_canonical_print_cigar(cigar,cigLen);
+	}
+        else
+        {
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, cigar, cigLen, NULL );
+        }
+
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* RNEXT: MATE_REF_NAME or '*' */
+        /* PNEXT: MATE_REF_POS or 0 */
+        if ( rc == 0 )
+        {
+            if ( cols[ alg_MATE_REF_NAME ].len )
+            {
+                if ( cols[ alg_MATE_REF_NAME ].len == cols[ alg_REF_NAME ].len &&
+                    memcmp( cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len ) == 0 )
+                {
+                    rc = BufferedWriter( NULL, "=\t", 2, NULL );
+                }
+                else
+                {
+                    rc = BufferedWriter( NULL, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len, NULL );
+                    if ( rc == 0 )
+                        rc = BufferedWriter( NULL, "\t", 1, NULL );
+                }
+                if ( rc == 0 )
+                    rc = KOutMsg( "%u\t", cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] + 1 );
+            }
+            else
+            {
+                rc = BufferedWriter( NULL, "*\t0\t", 4, NULL );
+            }
+        }
+
+        /* TLEN: TEMPLATE_LEN */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_TEMPLATE_LEN ].base.v ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0 );
+
+        /* SEQ: READ */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, read, readlen, NULL );
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+
+        /* QUAL: SAM_QUALITY */
+        if ( rc == 0 )
+            rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+    
+        /* optional fields: */
+        if ( rc == 0 && ds->type == edstt_EvidenceInterval )
+            rc = KOutMsg( "\tRG:Z:ALLELE_%u", readId + 1 );
+
+        if ( rc == 0 )
+        {
+            if ( readGroup )
+            {
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+            }
+            else if ( cols[ alg_SPOT_GROUP ].len > 0 )
+            {
+                /* read group */
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, cols[ alg_SPOT_GROUP ].base.str, cols[ alg_SPOT_GROUP ].len, NULL );
+            }
+            else if ( cols[ alg_SEQ_SPOT_GROUP ].len > 0 )
+            {
+                /* backward compatibility */
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, cols[ alg_SEQ_SPOT_GROUP ].base.str, cols[ alg_SEQ_SPOT_GROUP ].len, NULL );
+            }
+        }
+
+        if ( rc == 0 && param->cg_style > 0 && cols[ alg_CG_TAGS_STR ].len > 0 )
+            rc = BufferedWriter( NULL, cols[ alg_CG_TAGS_STR ].base.str, cols[ alg_CG_TAGS_STR ].len, NULL );
+
+        if ( rc == 0 )
+        {
+            if ( param->cg_style > 0 && cols[ alg_ALIGN_GROUP ].len > 0 )
+            {
+                char const *ZI = cols[ alg_ALIGN_GROUP ].base.str;
+                unsigned i;
+                
+                for ( i = 0; rc == 0 && i < cols[ alg_ALIGN_GROUP ].len - 1; ++i )
+                {
+                    if ( ZI[ i ] == '_' )
+                    {
+                        rc = KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, ZI, ZI + i + 1 );
+                        break;
+                    }
+                }
+            }
+            else if ( ds->type == edstt_EvidenceAlignment && type == 1 )
+            {
+                rc = KOutMsg( "\tZI:i:%li\tZA:i:%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            }
+        }
+
+        /* align id */
+        if ( rc == 0 && param->xi )
+            rc = KOutMsg( "\tXI:i:%li", alignId );
+
+        /* hit count */
+        if ( rc == 0 && cols[alg_ALIGNMENT_COUNT].len )
+            rc = KOutMsg( "\tNH:i:%i", (int)cols[ alg_ALIGNMENT_COUNT ].base.u8[ readId ] );
+
+        /* edit distance */
+        if ( rc == 0 && cols[ alg_EDIT_DISTANCE ].len )
+            rc = KOutMsg( "\tNM:i:%i", cols[ alg_EDIT_DISTANCE ].base.i32[ readId ] );
+
+        if ( rc == 0 )
+            rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnalignedReads( SAM_dump_ctx_t *const ctx, SCol const calg_col[], int64_t row_id, uint64_t* rcount )
+{
+    rc_t rc = 0;
+    uint32_t i, nreads = 0;
+
+    if ( calg_col != NULL )
+    {
+        if ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x02 )
+        {
+            /* skip all aligned rows by flag */
+            return rc;
+        }
+        /* get primary alignments only */
+        rc = Cursor_Read( &ctx->seq, calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ], seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            for ( i = 0; i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+            {
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] < row_id )
+                    {
+                        /* unaligned were printed with 1st aligment */
+                        return rc;
+                    }
+                }
+                else
+                {
+                    nreads++;
+                }
+            }
+            if ( nreads == ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len )
+            {
+                /* skip all aligned rows by actual data, if flag above is not set properly */
+                return rc;
+            }
+            row_id = calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ];
+        }
+    }
+    if ( rc == 0 )
+    {
+        rc = Cursor_Read( &ctx->seq, row_id, 0, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            unsigned non_empty_reads = 0;
+            
+            nreads = ctx->seq.cols[ seq_READ_LEN ].idx != 0 ? ctx->seq.cols[ seq_READ_LEN ].len : 1;
+
+            for( i = 0; i < nreads; i++ ) {
+                unsigned const readLen = ctx->seq.cols[ seq_READ_LEN ].idx
+                                       ? ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ]
+                                       : 0;
+                
+                if (readLen)
+                    ++non_empty_reads;
+            }
+            for( i = 0; i < nreads; i++ )
+            {
+                INSDC_coord_zero readStart;
+                INSDC_coord_len readLen;
+
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx != 0 && 
+                     ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    continue;
+                }
+
+                if ( ctx->seq.cols[ seq_READ_TYPE ].idx != 0 && 
+                     !( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_BIOLOGICAL ) )
+                {
+                    continue;
+                }
+
+                readLen = ctx->seq.cols[ seq_READ_LEN ].idx ? 
+                            ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ] :
+                            ctx->seq.cols[ seq_READ ].len;
+                if ( readLen == 0 )
+                {
+                    continue;
+                }
+
+                readStart = ctx->seq.cols[ seq_READ_START ].idx ?
+                                ctx->seq.cols[ seq_READ_START ].base.coord0[ i ] :
+                                0;
+                if ( param->fasta || param->fastq )
+                {
+                    rc = DumpUnalignedFastX( ctx->seq.cols, nreads > 1 ? i + 1 : 0, readStart, readLen, row_id );
+                }
+                else
+                {
+                    uint32_t cflags = 0x4;
+                    if ( param->reverse_unaligned )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x10;
+                        }
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i == nreads - 1 ? 0 : ( i + 1 ) ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x20;
+                        }
+                    }
+                    if ( ctx->seq.cols[ seq_READ_FILTER ].idx != 0 )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_REJECT )
+                        {
+                            cflags |= 0x200;
+                        }
+                        else if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_CRITERIA )
+                        {
+                            cflags |= 0x400;
+                        }
+                    }
+                    if ( calg_col == NULL )
+                    {
+                        rc = DumpUnalignedSAM( ctx->seq.cols, cflags |
+                                          ( non_empty_reads > 1 ? ( 0x1 | 0x8 | ( i == 0 ? 0x40 : 0x00 ) | ( i == nreads - 1 ? 0x80 : 0x00 ) ) : 0x00 ),
+                                          readStart, readLen, NULL, 0, 0, ctx->readGroup, row_id );
+                    }
+                    else
+                    {
+                        int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
+                        uint16_t flags = cflags | 0x1 |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x10 ) << 1 ) |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x40 ) ? 0x80 : 0x40 );
+                        rc = DumpUnalignedSAM( ctx->seq.cols, flags, readStart, readLen,
+                                          calg_col[ c ].base.str, calg_col[ c ].len,
+                                          calg_col[ alg_REF_POS ].base.coord0[ 0 ] + 1, ctx->readGroup, row_id );
+                    }
+                }
+                *rcount = *rcount + 1;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static bool AlignRegionFilter( SCol const *cols )
+{
+    if ( param->region_qty == 0 )
+        return true;
+    if ( cols[ alg_REF_NAME ].len != 0 || cols[ alg_REF_SEQ_ID ].len != 0 )
+    {
+        unsigned i;
+
+        assert( cols[ alg_REF_POS ].len == cols[ alg_REF_LEN ].len );
+
+        for ( i = 0; i < param->region_qty; i++ )
+        {
+            unsigned j;
+            
+            for ( j = 0; j < cols[ alg_REF_POS ].len; j++ )
+            {
+                unsigned const refStart_zero = cols[ alg_REF_POS ].base.coord0[ j ];
+                unsigned const refEnd_exclusive = refStart_zero + cols[ alg_REF_LEN ].base.coord_len[ j ];
+                unsigned k;
+                
+                for ( k = 0; k < param->region[ i ].rq; k++ )
+                {
+                    unsigned const from_zero = param->region[ i ].r[ k ].from;
+                    unsigned const to_inclusive = param->region[ i ].r[ k ].to;
+                    
+                    if ( from_zero < refEnd_exclusive && refStart_zero <= to_inclusive )
+                        return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+
+static bool AlignDistanceFilter( SCol const *cols )
+{
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        if ( cols[ alg_TEMPLATE_LEN ].len == 0 && param->mp_dist_unknown )
+        {
+            return true;
+        }
+        else
+        {
+            uint32_t i, j;
+            for( i = 0; i < param->mp_dist_qty; i++ )
+            {
+                for( j = 0; j < cols[ alg_TEMPLATE_LEN ].len; j++ )
+                {
+                    if ( ( cols[ alg_TEMPLATE_LEN ].base.i32[ j ] == 0 && param->mp_dist_unknown ) ||
+                         ( param->mp_dist[ i ].from <= cols[ alg_TEMPLATE_LEN ].base.i32[ j ] &&
+                         cols[ alg_TEMPLATE_LEN ].base.i32[ j ] <= param->mp_dist[ i ].to ) )
+                    {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    return true;
+}
+
+
+typedef struct cgOp_s
+{
+    uint16_t length;
+    uint8_t type; /* 0: match, 1: insert, 2: delete */
+    char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+    unsigned i;
+    
+    SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+    for ( i = 0; i < ops; ++i )
+    {
+        if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+        }
+        else
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+        }
+    }
+    SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+static rc_t CIGAR_to_CG_Ops( cgOp op[], unsigned const maxOps,
+                             unsigned *const opCnt,
+                             unsigned gap[ 3 ],
+                             char const cigar[], unsigned const ciglen,
+                             unsigned *const S_adjust,
+                             unsigned *const CG_adjust,
+                             unsigned const read,
+                             bool const reversed,
+			     bool * has_ref_offset_type)
+{
+    unsigned i;
+    unsigned ops = 0;
+    unsigned gapno;
+
+    *opCnt = 0;
+    *S_adjust = 0;
+    for ( i = 0; i < ciglen; ++ops )
+    {
+        char opChar=0;
+        int opLen=0;
+        int n;
+
+	for(n=0;n+i<ciglen && isdigit(cigar[n+i]);n++){
+		opLen = opLen * 10 + cigar[n+i] - '0';
+	}
+	if(n+i<ciglen){
+		opChar = cigar[n+i];
+		n++;
+	}
+        if ( ops + 1 >= maxOps )
+            return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+        i += n;
+        
+        op[ ops ].length = opLen;
+        op[ ops ].code = opChar;
+        switch ( opChar )
+        {
+        case 'M':
+        case '=':
+        case 'X':
+            op[ ops ].type = 0;
+            break;
+        case 'S':
+            *S_adjust += opLen;
+        case 'I':
+            op[ ops ].type = 1;
+            op[ ops ].code = 'I';
+            break;
+	case 'N':
+	    *has_ref_offset_type=true;
+        case 'D':
+            op[ ops ].type = 2;
+            break;
+        default:
+            return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+        }
+    }
+    *opCnt = ops;
+    gap[ 0 ] = gap[ 1 ] = gap[ 2 ] = ops;
+    print_CG_cigar( __LINE__, op, ops, NULL );
+    if ( ops < 3 )
+        return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+    {
+        unsigned fwd = 0; /* 5 10 10 10 */
+        unsigned rev = 0; /* 10 10 10 5 */
+        unsigned acc; /* accumulated length */
+        
+        if ( ( read == 1 && !reversed ) || ( read == 2 && reversed ) )
+        {
+            for ( i = 0, acc = 0; i < ops  && acc <=5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const right = acc - 5;
+                        unsigned const left = op[ i ].length - right;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                        
+                        fwd = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else if ( ( read == 2 && !reversed ) || ( read == 1 && reversed ) )
+        {
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i ].type == 1 )
+                    {
+                        rev = i;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const left = acc - 5;
+                        unsigned const right = op[ i ].length - left;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                         
+                        rev = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* fprintf(stderr, "guessing layout\n"); */
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                    }
+                }
+            }
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[i].type == 1 )
+                    {
+                        rev = i;
+                    }
+                }
+            }
+            if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+            {
+                if(!(*has_ref_offset_type)) for ( i = 0; i < ops; ++i )
+                {
+                    if ( op[ i ].type == 2 )
+                    {
+                        op[ i ].code = 'N';
+                        *CG_adjust += op[ i ].length;
+                    }
+                }
+                return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+            }
+        }
+        if ( fwd && op[ fwd ].type == 1 )
+        {
+            for ( i = ops, acc = 0; i > fwd + 1; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const r = 10 + op[ i ].length - acc;
+                            unsigned const l = op[ i ].length - r;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            i += 2;
+                        }
+                        else if ( i - 1 > fwd )
+                        {
+                            if ( op[ i - 1 ].type == 2 )
+                                 op[ i - 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i ].length = 0;
+                                op[ i ].type = 2;
+                                op[ i ].code = 'N';
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            /** change I to B+M **/
+            op[ fwd ].code = 'B';
+            memmove( &op[ fwd + 1 ], &op[ fwd ], ( ops - fwd ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ fwd + 1 ].code = 'M';
+            *opCnt = ops;
+            /** set the gaps now **/
+            for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+            {
+                --i;
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = fwd;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
+        }
+        if ( rev && op[ rev ].type == 1 )
+        {
+            for ( acc = i = 0; i < rev; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const l = 10 + op[ i ].length - acc;
+                            unsigned const r = op[ i ].length - l;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            rev += 2;
+                            i += 2;
+                        }
+                        else if ( i + 1 < rev )
+                        {
+                            if ( op[ i + 1 ].type == 2)
+                                 op[ i + 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i + 1 ].length = 0;
+                                op[ i + 1 ].type = 2;
+                                op[ i + 1 ].code = 'N';
+                                rev += 1;
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+            {
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = rev;
+            op[ rev ].code = 'B';
+            memmove( &op[ rev + 1 ], &op[ rev ], ( ops - rev ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ rev + 1 ].code = 'M';
+            *opCnt = ops;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
+        }
+    }
+    return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t GenerateCGData( SCol cols[], unsigned style )
+{
+    rc_t rc = 0;
+    
+    memset( &cols[ alg_CG_TAGS_STR], 0, sizeof( cols[ alg_CG_TAGS_STR ] ) );
+    
+    if ( cols[ alg_READ ].len == 35 && cols[ alg_SAM_QUALITY ].len == 35 )
+    {
+        static char newCIGAR[ 35 * 11 ];
+        static int32_t newEditDistance;
+        unsigned gap[ 3 ] = { 0, 0, 0 };
+        cgOp cigOp[ 35 ];
+        unsigned opCnt;
+        unsigned i;
+        unsigned j;
+        size_t sz;
+        unsigned S_adjust = 0;
+        unsigned CG_adjust = 0;
+        unsigned const read = cols[ alg_SEQ_READ_ID ].len && cols[ alg_REVERSED ].len ? cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        bool const reversed = cols[ alg_REVERSED ].len ? cols[ alg_REVERSED ].base.u8[ 0 ] : false;
+	bool has_ref_offset_type = false;
+        
+        rc = CIGAR_to_CG_Ops( cigOp, sizeof( cigOp ) / sizeof( cigOp[ 0 ] ), &opCnt, gap,
+                              cols[ alg_CIGAR ].base.str, cols[ alg_CIGAR ].len,
+                              &S_adjust, &CG_adjust, read, reversed, &has_ref_offset_type );
+        if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+        {
+            rc = 0;
+            if ( style == 1 )
+                goto CLEAN_CIGAR;
+            else
+                goto PRINT_CIGAR;
+        }
+        if ( rc != 0 )
+            return 0;
+
+        if ( !has_ref_offset_type && CG_adjust == 0 )
+            CG_adjust = ( gap[ 0 ] < opCnt ? cigOp[ gap[ 0 ] ].length : 0 )
+                      + ( gap[ 1 ] < opCnt ? cigOp[ gap[ 1 ] ].length : 0 )
+                      + ( gap[ 2 ] < opCnt ? cigOp[ gap[ 2 ] ].length : 0 );
+
+        print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+        if ( style == 1 )
+        {
+            static char newSeq[ 35 ];
+            static char newQual[ 35 ];
+            static char tags[ 35*22 + 1 ];
+            unsigned const B_len = cigOp[ gap[ 0 ] ].length;
+            unsigned const B_at = gap[ 0 ] < gap[ 2 ] ? 5 : 30;
+            
+            if ( 0 < B_len && B_len < 5 )
+            {
+                memmove( newSeq, cols[ alg_READ ].base.v, 35 );
+                memmove( newQual, cols[ alg_SAM_QUALITY ].base.v, 35 );
+                
+                cols[ alg_CG_TAGS_STR ].base.v = tags;
+                
+                cols[ alg_READ ].base.v = newSeq;
+                cols[ alg_READ ].len = 35 - B_len;
+                
+                cols[ alg_SAM_QUALITY ].base.v = newQual;
+                cols[ alg_SAM_QUALITY ].len = 35 - B_len;
+                
+                /* nBnM -> nB0M */
+                cigOp[ gap[ 0 ] + 1 ].length -= B_len;
+                if ( gap[ 0 ] < gap[ 2 ] )
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        5 - B_len, B_len, 30 - B_len, 2 * B_len, &newSeq[ 5 - B_len ], 2 * B_len, &newQual[ 5 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
+                    }
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                else
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        30 - B_len, B_len, 5 - B_len, 2 * B_len, &newSeq[ 30 - B_len ], 2 * B_len, &newQual[ 30 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
+                    }
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                if ( rc == 0 )
+                {
+                    for ( i = B_at; i < B_at + B_len; ++i )
+                    {
+                        int const Lq = newQual[ i - B_len ];
+                        int const Rq = newQual[ i ];
+
+                        if ( Lq <= Rq )
+                        {
+                            newSeq[ i - B_len ] = newSeq[ i ];
+                            newQual[ i - B_len ] = Rq;
+                        }
+                        else
+                        {
+                            newSeq[ i ] = newSeq[ i - B_len ];
+                            newQual[ i ] = Lq;
+                        }
+                    }
+                    memmove( &newSeq [ B_at ], &newSeq [ B_at + B_len ], 35 - B_at - B_len );
+                    memmove( &newQual[ B_at ], &newQual[ B_at + B_len ], 35 - B_at - B_len );
+                }
+            }
+            else
+            {
+                int len = cigOp[ gap[ 0 ] ].length;
+                
+                cigOp[ gap[ 0 ] ].code = 'I';
+                for (i = gap[0] + 1; i < opCnt && len > 0; ++i) {
+                    if (cigOp[i].length <= len){
+                        len -= cigOp[i].length;
+                        cigOp[i].length = 0;
+                    }
+                    else {
+                        cigOp[i].length -= len;
+                        len = 0;
+                    }
+                }
+                if(!has_ref_offset_type) CG_adjust -= cigOp[ gap[ 0 ] ].length;
+            }
+        }
+        if ( rc == 0 )
+        {
+        PRINT_CIGAR:
+        CLEAN_CIGAR:
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            /* remove zero length ops */
+            for ( j = i = 0; i < opCnt; )
+            {
+                if ( cigOp[ j ].length == 0)
+                {
+                    ++j;
+                    --opCnt;
+                    continue;
+                }
+                cigOp[ i++ ] = cigOp[ j++ ];
+            }
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            if ( cols[ alg_EDIT_DISTANCE ].len )
+            {
+                int const edit_distance = cols[ alg_EDIT_DISTANCE ].base.i32[ 0 ];
+                int const adjusted = edit_distance + S_adjust - CG_adjust;
+            
+                newEditDistance = adjusted > 0 ? adjusted : 0;
+                SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", edit_distance, newEditDistance, S_adjust, CG_adjust ) );
+                cols[ alg_EDIT_DISTANCE ].base.v = &newEditDistance;
+                cols[ alg_EDIT_DISTANCE ].len = 1;
+            }
+            /* merge adjacent ops */
+            for ( i = opCnt; i > 1; )
+            {
+                --i;
+                if ( cigOp[ i - 1 ].code == cigOp[ i ].code )
+                {
+                    cigOp[ i - 1 ].length += cigOp[ i ].length;
+                    memmove( &cigOp[ i ], &cigOp[ i + 1 ], ( opCnt - 1 - i ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+            }
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            for ( i = j = 0; i < opCnt && rc == 0; ++i )
+            {
+                rc = string_printf( &newCIGAR[ j ], sizeof( newCIGAR ) - j, &sz, "%u%c", cigOp[ i ].length, cigOp[ i ].code);
+                j += sz;
+            }
+            cols[ alg_CIGAR ].base.v = newCIGAR;
+            cols[ alg_CIGAR ].len = j;
+        }
+    }
+    return rc;
+}
+
+
+static bool DumpAlignedRow( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                    int64_t row,
+                    bool const primary,
+                    int const cg_style,
+                    rc_t *prc )
+{
+    rc_t rc = 0;
+    
+    /* if SEQ_SPOT_ID is open then skip rows with no SEQ_SPOT_ID */
+    if ( ds->cols[ alg_SEQ_SPOT_ID ].idx )
+    {
+        rc = Cursor_Read( ds, row, alg_SEQ_SPOT_ID, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( ds->cols[ alg_SEQ_SPOT_ID ].len == 0 ||
+             ds->cols[ alg_SEQ_SPOT_ID ].base.i64[ 0 ] == 0 )
+            return false;
+    }
+
+    /* skip rows that fail mate distance filter */
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        rc = Cursor_Read( ds, row, alg_TEMPLATE_LEN, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( !AlignDistanceFilter( ds->cols ) )
+            return false;
+    }
+
+    rc = Cursor_ReadAlign( &ds->curs, row, ds->cols, 0 );
+    if ( rc != 0 )
+    {
+        if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+            *prc = rc;
+        return false;
+    }
+
+    if ( param->fasta || param->fastq )
+    {
+        unsigned const read_id = ds->cols[ alg_SEQ_READ_ID ].base.v ? ds->cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        
+        rc = DumpAlignedFastX( ctx->pri.cols, row, read_id, primary, false );
+    }
+    else
+    {
+        if ( cg_style != 0 )
+        {
+            rc = GenerateCGData( ds->cols, cg_style );
+            if ( rc != 0 )
+            {
+                *prc = rc;
+                return false;
+            }
+        }
+        rc = DumpAlignedSAM(ctx, ds, row, ctx->readGroup, 0 );
+    }
+    *prc = rc;
+    return true;
+}
+
+
+static rc_t DumpAlignedRowList( SAM_dump_ctx_t *const ctx, DataSource *const ds, SCol const *const ids,
+                        int64_t *rcount,
+                        bool const primary,
+                        int const cg_style,
+                        bool const noFilter )
+{
+    rc_t rc;
+    unsigned i;
+    unsigned const n = ids->len;
+
+    for ( i = 0; ( rc = Quitting() ) == 0 && i < n; ++i )
+    {
+        int64_t const row = ids->base.i64[ i ];
+
+        if ( ! noFilter )
+            rc = Cursor_Read( ds, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+        if ( rc == 0 )
+        {
+            if ( noFilter || AlignRegionFilter(ds->cols) )
+            {
+                if ( DumpAlignedRow( ctx, ds, row, primary, cg_style, &rc ) )
+                    ++*rcount;
+                if ( rc != 0 )
+                    break;
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t DumpAlignedRowListIndirect( SAM_dump_ctx_t *const ctx,
+                                DataSource *const indirectSource,
+                                DataSource *const directSource,
+                                SCol const *const directIDs,
+                                int64_t *rcount,
+                                bool const primary,
+                                int const cg_style )
+{
+    unsigned i;
+
+    for ( i = 0; i < directIDs->len; ++i )
+    {
+        int64_t const row = directIDs->base.i64[ i ];
+        rc_t rc = Cursor_Read( directSource, row, alg_REGION_FILTER, ~(unsigned)0 );
+        
+        if ( rc != 0 )
+            return rc;
+        
+        if ( !AlignRegionFilter( directSource->cols ) )
+            continue;
+            
+        rc = Cursor_Read( directSource, row, alg_EVIDENCE_ALIGNMENT_IDS, 1 );
+        if ( rc != 0 )
+            return rc;
+        
+        rc = DumpAlignedRowList( ctx, indirectSource, &directSource->cols[ alg_EVIDENCE_ALIGNMENT_IDS ],
+                                 rcount, primary, cg_style, true );
+        if ( rc != 0 )
+            return rc;
+    }
+    return 0;
+}
+
+
+enum e_tables
+{
+    primary_alignment,
+    secondary_alignment,
+    evidence_interval,
+    evidence_alignment
+};
+
+enum e_IDS_opts
+{
+    primary_IDS             = ( 1 << primary_alignment ),
+    secondary_IDS           = ( 1 << secondary_alignment ),
+    evidence_interval_IDS   = ( 1 << evidence_interval ),
+    evidence_alignment_IDS  = ( 1 << evidence_alignment )
+};
+
+
+static rc_t DumpAlignedRowList_cb( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn,
+                                   int options, int which, int64_t *rcount, SCol const *const IDS )
+{
+    /*SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
+        param->region[r].name, start, start + count - 1, cur_pos));*/
+    switch ( which )
+    {
+    case primary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->pri, IDS, rcount, true, param->cg_style, false );
+
+    case secondary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->sec, IDS, rcount, false, param->cg_style, false );
+
+    case evidence_interval_IDS:
+        {
+            rc_t rc = 0;
+
+            if ( ( options & evidence_interval_IDS ) != 0 )
+                rc = DumpAlignedRowList( ctx, &ctx->evi, IDS, rcount, true, 0, false );
+
+            if ( rc == 0 && ( options & evidence_alignment_IDS ) != 0 )
+                rc = DumpAlignedRowListIndirect( ctx, &ctx->eva, &ctx->evi, IDS, rcount, true, param->cg_style );
+
+            return rc;
+        }
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+typedef struct CigOps{
+	char op;
+	int8_t	 ref_sign; /*** 0;+1;-1; ref_offset = ref_sign * offset ***/
+	int8_t	 seq_sign; /*** 0;+1;-1; seq_offset = seq_sign * offset ***/
+	uint32_t oplen;
+} CigOps;
+
+static void SetCigOp(CigOps *dst,char op,uint32_t oplen)
+{
+	dst->op    = op;
+	dst->oplen = oplen;
+	switch(op) { /*MX= DN B IS PH*/
+	 case 'M': case 'X': case '=':
+		dst->ref_sign=+1;
+		dst->seq_sign=+1;
+		break;
+	 case 'D': case 'N':
+		dst->ref_sign=+1;
+                dst->seq_sign= 0;
+                break;
+	 case 'B': 
+		dst->ref_sign=-1;
+                dst->seq_sign= 0;
+                break;
+	 case 'S': case 'I':
+		dst->ref_sign= 0;
+                dst->seq_sign=+1;
+                break;
+	 case 'P': case 'H':
+	  case 0: /** terminating op **/
+		dst->ref_sign= 0;
+                dst->seq_sign= 0;
+                break;
+	  default:
+		assert(0);
+                break;
+	}
+}
+
+static unsigned ExplodeCIGAR( CigOps dst[], unsigned len, char const cigar[], unsigned ciglen )
+{
+    unsigned i;
+    unsigned j;
+    int opLen;
+    
+    for ( i = j = opLen=0; i < ciglen; i++) {
+	if(isdigit(cigar[i])){
+		opLen = opLen * 10 + cigar[i] - '0';
+	} else {
+		assert(isalpha(cigar[i]));
+		SetCigOp(dst+j,cigar[i],opLen);
+		opLen=0;
+		j++;
+	}
+    }
+    SetCigOp(dst+j,0,0);
+    j++;
+    return j;
+}
+
+
+#define CG_CIGAR_STRING_MAX (35 * 11 + 1)
+
+
+#if 0
+static unsigned FormatCIGAR( char dst[], unsigned cp, unsigned oplen, int opcode )
+{
+    size_t sz;
+    string_printf( dst + cp, CG_CIGAR_STRING_MAX - cp, &sz, "%u%c", oplen, opcode );
+    return sz;
+}
+
+
+static unsigned DeletedCIGAR( char dst[], unsigned const cp, int opcode, unsigned D,
+                              uint32_t const Op[], int ri, unsigned len )
+{
+    unsigned i;
+    unsigned curPos = 0;
+    int curOp = opcode;
+    unsigned oplen = 0;
+    
+    for ( i = 0; i < D && ri < len; ++i, ++ri )
+    {
+        uint32_t const op = Op[ ri ];
+        int const d = op >> 2;
+        int const m = op & 1;
+        int const nxtOp = m ? opcode : 'P';
+        
+        if ( d != 0 )
+        {
+            if ( oplen != 0 )
+                curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            curPos += FormatCIGAR( dst, cp, d, 'D' );
+            oplen = 0;
+        }
+        if ( oplen == 0 || nxtOp == curOp )
+        {
+            ++oplen;
+        }
+        else
+        {
+            curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            oplen = 1;
+        }
+        curOp = nxtOp;
+    }
+
+    if ( oplen != 0 && curOp != opcode)
+    {
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+        oplen = 0;
+    }
+    if ( i < D )
+        oplen += D - i;
+    if ( oplen )
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, opcode );
+    return curPos;
+}
+#endif
+
+static char merge_M_type_ops(char a,char b)
+{ /*MX=*/
+	char c=0;
+	switch(b){
+	 case 'X':
+		switch(a){
+		 case '=': c='X'; break;
+		 case 'X': c='M'; break; /**we don't know - 2X may create '=' **/
+		 case 'M': c='M'; break;
+		}
+		break;
+	 case 'M':
+		c='M';
+		break;
+	 case '=':
+		c=a;
+		break;
+	}
+	assert(c!=0);
+	return c;
+}
+
+
+static unsigned CombineCIGAR( char dst[], CigOps const seqOp[], unsigned seq_len,
+                              int refPos, CigOps const refOp[], unsigned ref_len )
+{
+    bool     done=false;
+    unsigned ciglen=0,last_ciglen=0;
+    char     last_cig_op;
+    uint32_t last_cig_oplen=0;
+    int	     si=0,ri=0;
+    CigOps   seq_cop={0,0,0,0},ref_cop={0,0,0,0};
+    int	     seq_pos=0; /** seq_pos is tracked roughly - with every extraction from seqOp **/
+    int      ref_pos=0; /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+    int	     delta=refPos; /*** delta in relative positions of seq and ref **/
+			   /*** when delta < 0 - rewind or extend the reference ***/
+			   /*** wher delta > 0 - skip reference  ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+	if( last_cig_oplen > 0 && last_cig_op == OP){							\
+                last_cig_oplen += OPLEN;								\
+                ciglen = last_ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        } else {											\
+                last_ciglen = ciglen;									\
+                last_cig_oplen = OPLEN;									\
+                last_cig_op    = OP;									\
+                ciglen = ciglen      + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        }
+    while(!done){
+	while(delta < 0){ 
+		ref_pos += delta; /** we will make it to back up this way **/
+		if(ri > 0){ /** backing up on ref if possible ***/
+			int avail_oplen = refOp[ri-1].oplen - ref_cop.oplen;
+			if(avail_oplen > 0 ){
+				if((-delta) <= avail_oplen * ref_cop.ref_sign){ /*** rewind within last operation **/
+					ref_cop.oplen -= delta;
+					delta -= delta * ref_cop.ref_sign;
+				} else { /*** rewind the whole ***/
+					ref_cop.oplen += avail_oplen;
+					delta += avail_oplen * ref_cop.ref_sign;
+				}
+			} else {
+				ri--;
+				/** pick the previous as used up **/
+				ref_cop = refOp[ri-1];
+				ref_cop.oplen =0; 
+			}
+		} else { /** extending the reference **/
+			SetCigOp(&ref_cop,'=',ref_cop.oplen - delta);
+			delta = 0;
+		}
+		ref_pos -= delta; 
+	}
+	if(ref_cop.oplen == 0){ /*** advance the reference ***/
+		ref_cop = refOp[ri++];
+		if(ref_cop.oplen == 0) { /** extending beyond the reference **/
+			SetCigOp(&ref_cop,'=',1000);
+		}
+		assert(ref_cop.oplen > 0 );
+	}
+	if(delta > 0){ /***  skip refOps ***/
+		ref_pos += delta; /** may need to back up **/
+		if(delta >=  ref_cop.oplen){ /** full **/
+			delta -= ref_cop.oplen * ref_cop.ref_sign;
+			ref_cop.oplen = 0;
+		} else { /** partial **/
+			ref_cop.oplen -= delta;
+			delta -= delta * ref_cop.ref_sign;
+		}
+		ref_pos -= delta; /** if something left - restore ***/
+		continue;
+	}
+	/*** seq and ref should be synchronized here **/
+	assert(delta == 0);
+	if(seq_cop.oplen == 0){ /*** advance sequence ***/
+		if(seq_pos < seq_len){
+			seq_cop = seqOp[si++];
+			assert(seq_cop.oplen > 0 );
+			seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+		} else {
+			done=true;
+		}
+	}
+        if(!done){
+		int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+		int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+		int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+		int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+		assert( ref_ref_step >= 0); /** no B in the reference **/
+		if( seq_ref_step <= 0){ /** BSIPH in the sequence against anything ***/
+			MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+			seq_cop.oplen = 0;
+			delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+		} else if(ref_ref_step <= 0){ /** MX=DN against SIPH in the reference***/
+			if(ref_seq_step == 0){ /** MX=DN against PH **/
+				MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+				ref_cop.oplen = 0;
+			} else {
+				int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+				if(seq_seq_step == 0){ /** DN agains SI **/
+					MACRO_BUILD_CIGAR('P',min_len);
+				} else { /** MX= agains SI ***/
+					MACRO_BUILD_CIGAR( ref_cop.op,min_len);
+				}
+				seq_cop.oplen -= min_len;
+				ref_cop.oplen -= min_len;
+			}
+		} else { /*MX=DN  against MX=DN*/
+			int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+			if(seq_seq_step == 0){ /* DN against MX=DN */
+				if(ref_seq_step == 0){ /** padding DN against DN **/
+					MACRO_BUILD_CIGAR('P',min_len);
+					ref_cop.oplen -= min_len;
+					seq_cop.oplen -= min_len;
+				} else { /* DN against MX= **/
+					MACRO_BUILD_CIGAR(seq_cop.op,min_len);
+					seq_cop.oplen -= min_len;
+				}
+			} else if (ref_cop.seq_sign == 0){ /* MX= against DN - always wins */
+				MACRO_BUILD_CIGAR(ref_cop.op,min_len);
+				ref_cop.oplen -= min_len;
+			} else { /** MX= against MX= ***/
+				MACRO_BUILD_CIGAR(merge_M_type_ops(seq_cop.op,ref_cop.op),min_len);
+				ref_cop.oplen -= min_len;
+				seq_cop.oplen -= min_len;
+			}
+			ref_pos += min_len;
+		}
+        }
+    }
+    return ciglen;
+}
+
+
+static rc_t DumpCGSAM( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn, int options,
+                       int which, int64_t *rows, SCol const *const ids )
+{
+    if ( which == evidence_interval_IDS )
+    {
+        rc_t rc = 0;
+        unsigned i;
+        
+        for ( i = 0; i < ids->len; ++i )
+        {
+            int64_t const rowInterval = ids->base.i64[ i ];
+
+            rc = Cursor_Read( &ctx->evi, rowInterval, alg_REGION_FILTER, ~(0u) );
+            if ( rc == 0 )
+            {
+                if ( AlignRegionFilter( ctx->evi.cols ) )
+                {
+                    rc = Cursor_ReadAlign( &ctx->evi.curs, rowInterval, ctx->evi.cols, 0 );
+                    if ( rc == 0 )
+                    {
+                        unsigned const evidence = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].len;
+                        if ( evidence != 0 )
+                        {
+                            INSDC_coord_len const *const refLen = ctx->evi.cols[ alg_READ_LEN ].base.coord_len;
+                            INSDC_coord_len const *const cigLen = ctx->evi.cols[ alg_CIGAR_LEN ].base.coord_len;
+                            unsigned const ploids = ctx->evi.cols[ alg_CIGAR_LEN ].len;
+                            unsigned const totalIntervalReadLen = ctx->evi.cols[ alg_READ ].len;
+			    CigOps  refCigOps_stack[1024];
+			    CigOps *refCigOps_heap=NULL;
+                            CigOps *refCigOps;
+
+			    if( totalIntervalReadLen > 1000){
+				refCigOps=refCigOps_heap = malloc( sizeof( refCigOps[ 0 ] ) * (totalIntervalReadLen+ploids) );
+			    } else {
+				refCigOps=refCigOps_stack;
+			    }
+                            
+                            if ( refCigOps != NULL )
+                            {
+                                unsigned j;
+                                unsigned start;
+                                unsigned cigop_starts[256];
+                                
+                                assert(ploids < 256);
+                                
+                                for ( start = j = 0, cigop_starts[0]=0; j < ploids; ++j )
+                                {
+                                    unsigned len = cigLen[ j ];
+                                    cigop_starts[j+1] = cigop_starts[j] + ExplodeCIGAR( refCigOps + cigop_starts[j], refLen[ j ], 
+                                                                                       ctx->evi.cols[ alg_CIGAR ].base.str + start, len );
+                                    start += len;
+                                }
+                                
+                                for ( j = 0; j < evidence; ++j )
+                                {
+                                    int64_t const rowAlign = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].base.i64[ j ];
+                                    
+                                    rc = Cursor_ReadAlign( &ctx->eva.curs, rowAlign, ctx->eva.cols, 0 );
+                                    if ( rc == 0 )
+                                    {
+                                        if(param->cg_style != 0)
+                                            rc = GenerateCGData( ctx->eva.cols, param->cg_style );
+                                        if ( rc == 0 )
+                                        {
+                                            int const ploidy = ctx->eva.cols[ alg_REF_PLOIDY ].base.u32[ 0 ];
+                                            int const readLen = ctx->eva.cols[ alg_READ ].len;
+                                            INSDC_coord_zero refPos = ctx->eva.cols[ alg_REF_POS ].base.coord0[ 0 ];
+                                            CigOps op[ 36 ];
+                                            char cigbuf[ CG_CIGAR_STRING_MAX ];
+                                            
+                                            memset( cigbuf, 0, CG_CIGAR_STRING_MAX );
+                                            ExplodeCIGAR( op, readLen, ctx->eva.cols[ alg_CIGAR ].base.str,
+                                                         ctx->eva.cols[ alg_CIGAR ].len );
+                                            ctx->eva.cols[ alg_CIGAR ].len = CombineCIGAR( cigbuf, op, readLen, refPos, 
+                                                                                          refCigOps + cigop_starts[ ploidy - 1 ], refLen[ ploidy - 1 ] );
+                                            ctx->eva.cols[ alg_CIGAR ].base.str = cigbuf;
+                                            ctx->eva.cols[ alg_REF_POS ].base.v = &refPos;
+                                            refPos += ctx->evi.cols[ alg_REF_POS ].base.coord0[ 0 ] ;
+			  		    if(refPos < 0){
+						ReferenceObj const *r = NULL;
+    						rc = ReferenceList_Find( gRefList, &r,
+									ctx->evi.cols[ alg_REF_NAME ].base.str,
+									ctx->evi.cols[ alg_REF_NAME ].len );
+						if(rc == 0){
+							bool circular=false;
+							rc=ReferenceObj_Circular(r, &circular);
+							if(rc == 0 && circular){
+								INSDC_coord_len len;
+								rc=ReferenceObj_SeqLength(r,&len);
+								if(rc == 0)
+									refPos += len;
+							}
+							ReferenceObj_Release(r);
+						}
+					    }
+                                            rc = DumpAlignedSAM( ctx, &ctx->eva, rowAlign, ctx->readGroup, 1 );
+                                            ++*rows;
+                                        }
+                                        else
+                                            break;
+                                    }
+                                    else
+                                        break;
+                                }
+				if(refCigOps_heap) free( refCigOps_heap );
+                            }
+                            else
+                                rc = RC( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
+                        }
+                    }
+                }
+            }
+            else
+                break;
+            rc = rc ? rc : Quitting();
+            if ( rc != 0 )
+                break;
+        }
+        return rc;
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+static rc_t ForEachAlignedRegion( SAM_dump_ctx_t *const ctx, enum e_IDS_opts const Options,
+    rc_t ( *user_func )( SAM_dump_ctx_t *ctx, TAlignedRegion const *rgn, int options, int which, int64_t *rows, SCol const *IDS ) )
+{
+    SCol cols[] =
+    {
+        { "MAX_SEQ_LEN", 0, { NULL }, 0, false },
+        { "OVERLAP_REF_POS", 0, { NULL }, 0, true },
+        { "PRIMARY_ALIGNMENT_IDS", 0, { NULL }, 0, false },
+        { "SECONDARY_ALIGNMENT_IDS", 0, { NULL }, 0, true },
+        { "EVIDENCE_INTERVAL_IDS", 0, { NULL }, 0, true }, 
+        { NULL, 0, { NULL }, 0, false }
+    };
+    enum eref_col
+    {
+        ref_MAX_SEQ_LEN = 0,
+        ref_OVERLAP_REF_LEN,
+        ref_PRIMARY_ALIGNMENT_IDS,
+        ref_SECONDARY_ALIGNMENT_IDS,
+        ref_EVIDENCE_INTERVAL_IDS
+    };
+
+    KIndex const *iname = NULL;
+    int64_t rows = 0;
+    rc_t rc = 0;
+    int options = Options & 7;
+
+    if ( Options & evidence_alignment_IDS )
+        options |= evidence_interval_IDS;
+
+    if ( ( options & primary_IDS ) == 0 )
+        cols[ ref_PRIMARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & secondary_IDS ) == 0 )
+        cols[ ref_SECONDARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & evidence_interval_IDS ) == 0 )
+        cols[ ref_EVIDENCE_INTERVAL_IDS ].name = "";
+    
+    ctx->ref.cols = cols;
+    
+    rc = VTableOpenIndexRead( ctx->ref.tbl.vtbl, &iname, "i_name" );
+    if ( rc == 0 )
+    {
+        rc = Cursor_Open( &ctx->ref.tbl, &ctx->ref.curs, ctx->ref.cols, NULL );
+        if ( rc == 0 )
+        {
+            int64_t rowid = 1;
+            uint64_t count = 0;
+            char refname[ 1024 ];
+            size_t sz;
+            
+            if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~primary_IDS;
+            if ( ctx->ref.cols[ ref_SECONDARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~secondary_IDS;
+            if ( ctx->ref.cols[ ref_EVIDENCE_INTERVAL_IDS ].idx == 0 )
+                options &= ~evidence_interval_IDS;
+
+            /* new: if we have a list of regions, reset the their print-flag */
+            if ( param->region_qty > 0 )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    param->region[ r ].printed = 0;
+                }
+            }
+
+            while ( ( rc = KIndexProjectText(iname, rowid + count, &rowid, &count, refname, sizeof( refname ), &sz ) ) == 0 )
+            {
+                bool include;
+                unsigned r;
+                unsigned max_to = UINT_MAX;
+                unsigned min_from = 0;
+                
+                for ( include = false, r = 0; r < param->region_qty; ++r )
+                {
+                    if ( sz == string_size( param->region[ r ].name ) &&
+                         memcmp( param->region[ r ].name, refname, sz ) == 0 )
+                    {
+                        include = true;
+                        max_to = param->region[ r ].max_to;
+                        min_from = param->region[ r ].min_from;
+                        param->region[ r ].printed++; /* new: mark a region as printed */
+                        break;
+                    }
+                }
+
+                if ( param->region_qty == 0 || include )
+                {
+                    int64_t const endrow_exclusive = rowid + count;
+                    unsigned m;
+                    unsigned k;
+                    
+                    for ( k = 0, m = 1; rc == 0 && k < 3; ++k, m <<= 1 )
+                    {
+                        if ( m & options )
+                        {
+                            unsigned lookback = 0;
+                            int64_t row;
+                            int32_t row_start_offset;
+                            unsigned pos;
+			    unsigned const maxseqlen = 5000; /***** TODO: this code is to be rewritten anyway ****/
+                            
+                            if ( param->region_qty )
+                            {
+                                if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].idx )
+                                {
+                                    rc = Cursor_Read( &ctx->ref, rowid, 0, ~(0u) );
+                                    if ( rc != 0 )
+                                        break;
+                                    if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].len > k )
+                                    {
+                                        unsigned const overlap = ctx->ref.cols[ ref_OVERLAP_REF_LEN ].base.coord0[ k ];
+                                        
+                                        if ( overlap != 0 )
+                                        {
+                                            
+                                            assert( overlap < rowid * maxseqlen );
+                                            lookback = ( rowid - ( overlap / maxseqlen ) );
+                                        }
+                                    }
+                                }
+                                else
+                                    lookback = 1;
+                            }
+			    row_start_offset = min_from/maxseqlen - lookback;
+			   if(row_start_offset < 0) row_start_offset=0;
+			    
+
+                            for ( pos = row_start_offset*maxseqlen, row = rowid + row_start_offset; rc == 0 && row < endrow_exclusive; ++row )
+                            {
+                                if ( row < 1 )
+                                {
+                                    row = 0;
+                                    continue;
+                                }
+                                rc = Cursor_Read( &ctx->ref, row, 0, ~(0u) );
+                                if ( rc != 0 )
+                                    break;
+                                if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ].len > 0 )
+                                    rc = user_func( ctx, &param->region[r], Options, m, &rows,
+                                                    &ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ] );
+                                pos += ctx->ref.cols[ ref_MAX_SEQ_LEN ].base.u32[ 0 ];
+                                if ( pos >= max_to )
+                                    break;
+                                if ( param->test_rows != 0 && rows > param->test_rows )
+                                    break;
+                            }
+                        }
+                    }
+                }
+                if ( param->test_rows != 0 && rows > param->test_rows )
+                    break;
+                if ( rc != 0 )
+                    break;
+            } /* while */
+
+            /* new: walk the list of regions and report what was NOT printed ( found ) ... */
+            if ( param->region_qty > 0 && GetRCState( rc ) != rcCanceled )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    if ( param->region[ r ].printed == 0 )
+                    {
+                        (void)PLOGMSG( klogWarn, ( klogWarn, "reference >$(a)< not found", "a=%s", param->region[ r ].name ) );
+                    }
+                }
+            }
+
+            if ( GetRCObject( rc ) == rcId && GetRCState( rc ) == rcNotFound )
+            {
+                rc = 0;
+            }
+
+        }
+    }
+    Cursor_Close( &ctx->ref.curs );
+    KIndexRelease( iname );
+    
+    return rc;
+}
+
+
+static rc_t DumpAlignedTable( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                              bool const primary, int const cg_style, unsigned *const rcount )
+{
+    unsigned i;
+    int64_t start;
+    uint64_t count;
+    rc_t rc = VCursorIdRange( ds->curs.vcurs, 0, &start, &count );
+    
+    if ( rc != 0 )
+        return rc;
+    for ( i = 0; i != (unsigned)count; ++i )
+    {
+        if ( DumpAlignedRow(ctx, ds, start + i, primary, cg_style, &rc ) )
+            ++*rcount;
+        if ( rc != 0 || ( rc = Quitting() ) != 0 )
+            return rc;
+        if ( param->test_rows && *rcount > param->test_rows )
+            break;
+    }
+    return 0;
+}
+
+
+static rc_t DumpUnsorted( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+    unsigned rcount;
+    
+    if ( rc == 0 && param->cg_evidence )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_INTERVAL\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->evi, false, 0, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) allele sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && param->cg_ev_dnb )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->eva, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) support sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->pri.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s PRIMARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->pri, true, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) primary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->sec.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s SECONDARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->sec, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) secondary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnaligned( SAM_dump_ctx_t *const ctx, bool const aligned )
+{
+    rc_t rc = 0;
+    int64_t start = 0;
+    uint64_t count = 0;
+
+    rc = VCursorIdRange( ctx->seq.curs.vcurs, 0, &start, &count );
+    if ( rc == 0 )
+    {
+        uint64_t rcount = 0;
+        if ( param->test_rows != 0 && count > param->test_rows )
+        {
+            count = param->test_rows;
+        }
+        SAM_DUMP_DBG( 2, ( "%s SEQUENCE table range from %ld qty %lu\n", ctx->accession, start, count ) );
+        while ( count > 0 && rc == 0 )
+        {
+            uint32_t i;
+
+            if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx == 0)
+            {
+                rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+            }
+            else
+            {
+                /* avoid reading whole sequence cursor data unnecessarily */
+                rc = Cursor_Read( &ctx->seq, start, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+                if ( rc == 0 )
+                {
+                    /* find if its completely unaligned */
+                    int64_t min_prim_id = 0;
+                    bool has_unaligned = false;
+                    for ( i = 0; rc == 0 && i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+                    {
+                        int64_t x = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ];
+                        has_unaligned |= x == 0;
+                        if ( ( min_prim_id == 0 && x != 0 ) || min_prim_id < x )
+                        {
+                            min_prim_id = x;
+                        }
+                    }
+                    if ( min_prim_id == 0 )
+                    {
+                        rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+                    }
+                    else if ( has_unaligned && !param->unaligned_spots )
+                    {
+                        if ( rc == 0 )
+                        {
+#if USE_MATE_CACHE
+                            uint64_t val;
+                            rc = Cache_Get( &ctx->pri.curs, min_prim_id, &val );
+                            if ( rc == 0 )
+                            {
+                                ctx->pri.cols[ alg_REF_POS ].len = 0;
+                                Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &start;
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+                                memmove( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memmove( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memmove( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+                            }
+                            else if ( !( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcItem ) )
+                            {
+                                break;
+                            }
+                            else
+                            {
+#endif /* USE_MATE_CACHE */
+                                rc = Cursor_ReadAlign( &ctx->pri.curs, min_prim_id, ctx->pri.cols, alg_MATE_ALIGN_ID );
+#if USE_MATE_CACHE
+                            }
+#endif /* USE_MATE_CACHE */
+                            rc = rc ? rc : DumpUnalignedReads( ctx, ctx->pri.cols, min_prim_id, &rcount );
+                        }
+                    }
+                } else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
+                    rc = 0;
+                }
+            }
+            start++;
+            count--;
+            rc = rc ? rc : Quitting();
+        }
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) unaligned sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+#if USE_MATE_CACHE
+static rc_t FlushUnalignedRead_cb (uint64_t key, bool value,void *user_data)
+{
+	rc_t rc;
+	int64_t spot_id = (int64_t) key;
+	int64_t aligned_mate_id = (int64_t) value;
+	SAM_dump_ctx_t *const ctx = user_data;
+	rc = Cursor_Read( &ctx->seq, spot_id, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+	if ( rc == 0 ) {
+		uint64_t rcount;
+		uint64_t val;
+		assert(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len == 2);
+		if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0]==0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1];
+			assert(aligned_mate_id != 0);
+		} else if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1] == 0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0];
+			assert(aligned_mate_id != 0);
+		} else {
+			assert(0);
+		}
+                rc = Cache_Get( &ctx->pri.curs, aligned_mate_id, &val );
+                if ( rc == 0 ) {
+			ctx->pri.cols[ alg_REF_POS ].len = 0;
+			Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &spot_id;
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+			memmove( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memmove( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memmove( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+			rc =DumpUnalignedReads( ctx, ctx->pri.cols, aligned_mate_id, &rcount );
+		}
+	}
+        return rc;
+}
+static rc_t FlushUnaligned( SAM_dump_ctx_t *const ctx, const SCursCache * cache )
+{
+    return KVectorVisitBool (cache->cache_unaligned_mate, false, FlushUnalignedRead_cb, ctx );
+}
+#endif
+
+static rc_t DumpHeader( SAM_dump_ctx_t const *ctx )
+{
+    bool reheader = param->reheader;
+    rc_t rc = 0;
+    
+    if ( !reheader )
+    {
+        if ( ctx->db )
+        {
+            /* grab header from db meta node */
+            KMetadata const *meta;
+            
+            rc = VDatabaseOpenMetadataRead( ctx->db, &meta );
+            if ( rc == 0 )
+            {
+                KMDataNode const *node;
+                
+                rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+                KMetadataRelease( meta );
+                
+                if ( rc == 0 )
+                {
+                    size_t offset = 0;
+                    
+                    for ( offset = 0; ; )
+                    {
+                        size_t remain;
+                        size_t nread;
+                        char buffer[ 4096 ];
+                        
+                        rc = KMDataNodeRead( node, offset, buffer, sizeof(buffer), &nread, &remain );
+                        if ( rc != 0 )
+                            break;
+                        BufferedWriter( NULL, buffer, nread, NULL );
+                        if ( remain == 0 )
+                        {
+                            if ( buffer[nread - 1] != '\n' )
+                            {
+                                 buffer[ 0 ] = '\n';
+                                 rc = BufferedWriter( NULL, buffer, 1, NULL );
+                            }
+                            break;
+                        }
+                        offset += nread;
+                    }
+                    KMDataNodeRelease(node);
+                }
+                else if ( GetRCState( rc ) == rcNotFound )
+                {
+                    reheader = true;
+                    rc = 0;
+                }
+            }
+        }
+        else
+        {
+            reheader = true;
+            rc = 0;
+        }
+    }
+
+    if ( rc == 0 && reheader )
+    {
+        rc = KOutMsg( "@HD\tVN:1.3\n" );
+        if ( rc == 0 && gRefList )
+            rc = RefSeqPrint();
+        if ( rc == 0 && ctx->readGroup )
+            rc = ReadGroup_print( ctx->readGroup );
+        if ( rc == 0 && ctx->seq.tbl.vtbl )
+            rc = DumpReadGroups( &ctx->seq.tbl );
+    }
+
+    if ( rc == 0 && param->comments )
+    {
+        unsigned i;
+        
+        for( i = 0; rc == 0 && param->comments[ i ]; ++i )
+            rc = KOutMsg( "@CO\t%s\n", param->comments[ i ] );
+    }
+    return rc;
+}
+
+
+static rc_t DumpDB( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+
+    if ( ctx->ref.tbl.vtbl != NULL )
+        rc = ReferenceList_MakeTable( &gRefList, ctx->ref.tbl.vtbl, 0, CURSOR_CACHE, NULL, 0 );
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+    {
+        if ( param->region_qty ){
+            rc = ForEachAlignedRegion(  ctx
+                                      ,   ( param->primaries   ? primary_IDS : 0 )
+                                        | ( param->secondaries ? secondary_IDS : 0 )
+                                        | ( param->cg_evidence ? evidence_interval_IDS : 0 )
+                                        | ( param->cg_ev_dnb   ? evidence_alignment_IDS : 0 )
+                                      , DumpAlignedRowList_cb );
+#if USE_MATE_CACHE
+	    if ( rc == 0 && param->unaligned ){
+                rc = FlushUnaligned( ctx,ctx->pri.curs.cache);
+	    }
+#endif
+	}
+        if ( param->cg_sam )
+            rc = ForEachAlignedRegion( ctx, evidence_interval_IDS, DumpCGSAM );
+
+        if ( param->region_qty == 0 )
+        {
+            rc = DumpUnsorted( ctx );
+            if ( rc == 0 && param->unaligned )
+                rc = DumpUnaligned( ctx, ctx->pri.tbl.vtbl != NULL );
+        }
+    }
+    ReferenceList_Release( gRefList );
+    return rc;
+}
+
+
+static rc_t DumpTable( SAM_dump_ctx_t *ctx )
+{
+    rc_t rc = 0;
+
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+        rc = DumpUnaligned( ctx, false );
+    return rc;
+}
+
+
+static rc_t ProcessTable( VDBManager const *mgr, char const fullPath[],
+                          char const accession[], char const readGroup[] )
+{
+    VTable const *tbl;
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tbl, 0, "%s", fullPath );
+    
+    if ( rc != 0 )
+    {
+        VSchema *schema;
+        
+        rc = VDBManagerMakeSRASchema( mgr, &schema );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tbl, schema, "%s", fullPath );
+            VSchemaRelease( schema );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        SAM_dump_ctx_t ctx;
+        SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+        
+        memset( &ctx, 0, sizeof( ctx ) );
+        
+        ctx.fullPath = fullPath;
+        ctx.accession = accession;
+        ctx.readGroup = readGroup;
+        
+        DATASOURCE_INIT( ctx.seq, accession );
+        ctx.seq.tbl.vtbl = tbl;
+        ctx.seq.type = edstt_Sequence;
+        
+        ReportResetTable( fullPath, tbl );
+
+        ctx.seq.cols = seq_cols;
+        memmove( ctx.seq.cols, gSeqCol, sizeof( gSeqCol ) );
+        rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        if ( rc == 0 ) {
+            rc = DumpTable( &ctx );
+            Cursor_Close(&ctx.seq.curs);
+        }
+        VTableRelease( tbl );
+    }
+    return rc;
+}
+
+
+static void SetupColumns( DataSource *ds, enum eDSTableType type )
+{
+    memmove( ds->cols, g_alg_col_tmpl, sizeof( g_alg_col_tmpl ) );
+    
+    ds->type = type;
+    if ( param->use_seqid )
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_SEQ_ID";
+    else
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_NAME";
+    
+    if ( param->fasta || param->fastq )
+        ds->cols[ alg_READ ].name = "RAW_READ";
+    else if ( param->hide_identical )
+        ds->cols[ alg_READ ].name = "MISMATCH_READ";
+    else
+        ds->cols[ alg_READ ].name = "READ";
+    
+    if ( param->long_cigar )
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_LONG";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_LONG_LEN";
+    }
+    else
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_SHORT";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_SHORT_LEN";
+    }
+
+    if(param->qualQuant && param->qualQuantSingle){ /** we don't really need quality ***/
+	ds->cols[ alg_SAM_QUALITY   ].name = "";
+    }
+    
+    switch ( type )
+    {
+    case edstt_EvidenceInterval:
+	
+        ds->cols[ alg_SEQ_SPOT_ID   ].name = "";
+        ds->cols[ alg_SEQ_NAME      ].name = "";
+        ds->cols[ alg_SAM_QUALITY   ].name = "";
+        ds->cols[ alg_SPOT_GROUP    ].name = "";
+        ds->cols[ alg_SEQ_SPOT_GROUP].name = "";
+        ds->cols[ alg_SEQ_READ_ID   ].name = "";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        if ( param->cg_sam || param->cg_ev_dnb )
+            ds->cols[ alg_EVIDENCE_ALIGNMENT_IDS ].name = "EVIDENCE_ALIGNMENT_IDS";
+        break;
+
+    case edstt_EvidenceAlignment:
+        ds->cols[ alg_REF_PLOIDY    ].name = "REF_PLOIDY";
+        ds->cols[ alg_REF_ID        ].name = "REF_ID";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        break;
+    default:
+        break;
+    }
+}
+
+
+static rc_t ProcessDB( VDatabase const *db, char const fullPath[],
+                       char const accession[], char const readGroup[] )
+{
+    char const *const refTableName = (   param->region_qty > 0
+                                      || param->cg_evidence
+                                      || param->cg_ev_dnb
+                                      || param->cg_sam
+                                      || param->reheader
+                                      || param->primaries
+                                      || param->secondaries
+                                     )
+                                   ? "REFERENCE"
+                                   : 0;
+    char const *const priTableName = param->primaries   ? "PRIMARY_ALIGNMENT" : 0;
+    char const *const secTableName = param->secondaries ? "SECONDARY_ALIGNMENT" : 0;
+    char const *const seqTableName = ( param->unaligned || param->reheader ) ? "SEQUENCE" : 0;
+    char const *const eviTableName = ( param->cg_evidence || ( param->cg_ev_dnb & ( param->region_qty > 0 ) ) || param->cg_sam ) ? "EVIDENCE_INTERVAL" : 0;
+    char const *const evaTableName = ( param->cg_ev_dnb   || param->cg_sam ) ? "EVIDENCE_ALIGNMENT" : 0;
+    
+    SAM_dump_ctx_t ctx;
+    SCol align_cols[ ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) * 4 ];
+    SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+    rc_t rc = 0;
+    
+    memset( &ctx, 0, sizeof( ctx ) );
+    memset( align_cols, 0, sizeof( align_cols ) );
+    memset( seq_cols, 0, sizeof( seq_cols ) );
+    
+    ctx.db = db;
+    ctx.fullPath = fullPath;
+    ctx.accession = accession;
+    ctx.readGroup = readGroup;
+    
+    DATASOURCE_INIT( ctx.seq, seqTableName );
+    DATASOURCE_INIT( ctx.ref, refTableName );
+    DATASOURCE_INIT( ctx.pri, priTableName );
+    DATASOURCE_INIT( ctx.sec, secTableName );
+    DATASOURCE_INIT( ctx.evi, eviTableName );
+    DATASOURCE_INIT( ctx.eva, evaTableName );
+    
+    if ( ctx.seq.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, "%s", ctx.seq.tbl.name );
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memmove(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        }
+    }
+    ctx.pri.cols = &align_cols[ 0 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.sec.cols = &align_cols[ 1 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.evi.cols = &align_cols[ 2 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.eva.cols = &align_cols[ 3 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    
+    SetupColumns( &ctx.pri, edstt_PrimaryAlignment );
+    SetupColumns( &ctx.sec, edstt_SecondaryAlignment );
+    SetupColumns( &ctx.evi, edstt_EvidenceInterval );
+    SetupColumns( &ctx.eva, edstt_EvidenceAlignment );
+    
+    if ( ctx.pri.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.pri.tbl.vtbl, "%s", ctx.pri.tbl.name );
+    if ( ctx.sec.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.sec.tbl.vtbl, "%s", ctx.sec.tbl.name );
+    if ( ctx.evi.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.evi.tbl.vtbl, "%s", ctx.evi.tbl.name );
+    if ( ctx.eva.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.eva.tbl.vtbl, "%s", ctx.eva.tbl.name );
+    
+    if (   ctx.pri.tbl.vtbl == NULL
+        && ctx.sec.tbl.vtbl == NULL
+        && ctx.evi.tbl.vtbl == NULL
+        && ctx.eva.tbl.vtbl == NULL )
+    {
+        memset (&ctx.pri, 0, sizeof( ctx.pri ) * 4 );
+        if ( ctx.seq.tbl.name == NULL )
+        {
+            ctx.seq.tbl.name = "SEQUENCE";
+            rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, "%s", ctx.seq.tbl.name );
+        }
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memmove(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open(&ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL);
+            if ( rc == 0 )
+            {
+                rc = DumpTable( &ctx );
+                Cursor_Close(&ctx.seq.curs);
+            }
+            VTableRelease(ctx.seq.tbl.vtbl);
+        }
+        VDatabaseRelease( db );
+        return rc;
+    }
+    ReportResetDatabase( fullPath, db );
+    
+    if ( ctx.ref.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.ref.tbl.vtbl, "%s", ctx.ref.tbl.name );
+        ctx.ref.type = edstt_Reference;
+    }
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.pri.tbl, &ctx.pri.curs, ctx.pri.cols, ctx.seq.curs.cache );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.sec.tbl, &ctx.sec.curs, ctx.sec.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.evi.tbl, &ctx.evi.curs, ctx.evi.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.eva.tbl, &ctx.eva.curs, ctx.eva.cols, NULL );
+    if ( rc == 0 )
+        rc = DumpDB( &ctx );
+    
+    Cursor_Close(&ctx.ref.curs);
+    Cursor_Close(&ctx.pri.curs);
+    Cursor_Close(&ctx.sec.curs);
+    Cursor_Close(&ctx.evi.curs);
+    Cursor_Close(&ctx.eva.curs);
+    Cursor_Close(&ctx.seq.curs);
+    
+    VTableRelease( ctx.ref.tbl.vtbl );
+    VTableRelease( ctx.pri.tbl.vtbl );
+    VTableRelease( ctx.sec.tbl.vtbl );
+    VTableRelease( ctx.evi.tbl.vtbl );
+    VTableRelease( ctx.eva.tbl.vtbl );
+    VTableRelease( ctx.seq.tbl.vtbl );
+    
+    return rc;
+}
+
+#if 0
+rc_t ResolvePath( char const *accession, char const ** path )
+{
+    rc_t rc = 0;
+    static char tblpath[ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+    static SRAPath* pmgr = NULL;
+    
+    if ( accession == NULL && path == NULL )
+    {
+        SRAPathRelease( pmgr );
+        return 0;
+    }
+    if (   pmgr != NULL
+        || ( rc = SRAPathMake( &pmgr, NULL ) ) == 0
+        || ( GetRCState( rc ) == rcNotFound && GetRCTarget( rc ) == rcDylib ) )
+    {
+        *path = tblpath;
+        tblpath[ 0 ] = '\0';
+        rc = 0;
+        do {
+            if ( pmgr != NULL && !SRAPathTest( pmgr, accession ) )
+            {
+                /* try to resolve the path using mgr */
+                rc = SRAPathFind( pmgr, accession, tblpath, sizeof( tblpath ) );
+                if ( rc == 0 )
+                    break;
+            }
+            if ( string_size( accession ) >= sizeof( tblpath ) )
+            {
+                rc = RC( rcExe, rcPath, rcResolving, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+                rc = 0;
+            }
+        } while( false );
+    }
+#else
+    if ( accession != NULL && path != NULL )
+    {
+        *path = tblpath;
+        string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+    }
+#endif
+
+    return rc;
+}
+#endif
+
+
+static rc_t ProcessPath( VDBManager const *mgr, char const Path[] )
+{
+#if 0
+    unsigned pathlen = string_size( Path );
+    char *readGroup = NULL;
+    char *path = NULL;
+    unsigned i;
+    rc_t rc;
+    
+    /* strip trailing path seperators */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '/' || ch == '\\' )
+            --pathlen;
+        else
+            break;
+    }
+
+    /* find read group alias */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '=' )
+        {
+            unsigned const pos = i + 1;
+            unsigned const len = pathlen - pos;
+            
+            pathlen = i;
+            
+            readGroup = malloc( len + 1 );
+            if ( readGroup == NULL )
+                return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+            memmove( readGroup, &Path[ pos ], len );
+            readGroup[ len ] = '\0';
+            break;
+        }
+    }
+
+    path = malloc( pathlen + 1 );
+    if ( path == NULL )
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    memmove( path, Path, pathlen );
+    path[ pathlen ] = '\0';
+    
+    rc = ReportResetObject( path );
+    if ( rc == 0 )
+    {
+        char const *fullPath;
+
+        rc = ResolvePath( path, &fullPath );
+        if ( rc == 0 )
+        {
+            char const *accession = fullPath;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &fullPath[ i + 1 ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", fullPath );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, fullPath, accession, readGroup );
+                VDatabaseRelease( db );
+            }
+            else
+                rc = ProcessTable( mgr, fullPath, accession, readGroup );
+        }
+    }
+    free( path );
+    free( readGroup );
+    return rc;
+
+#else
+
+    char * pc;
+    rc_t rc = 0;
+    size_t pathlen = string_size ( Path );
+
+    /* look for scheme */
+    pc = string_chr ( Path, pathlen, ':' );
+    if (pc == NULL)
+    {
+        char *readGroup;
+        char *path;
+        size_t i;
+
+        /* no scheme found - must be simple fs path */
+    /* old: ---unused label */
+        readGroup = NULL;
+        path = NULL;
+    
+        /* strip trailing path separators */
+        for ( i = pathlen; i > 0; -- pathlen )
+        {
+            int const ch = Path[ --i ];
+            if ( ch != '/' && ch != '\\' )
+                break;
+        }
+
+        /* find read group alias */
+        for ( i = pathlen; i > 0; )
+        {
+            int const ch = Path[ --i ];
+        
+            if ( ch == '=' )
+            {
+                size_t const pos = i + 1;
+                size_t const len = pathlen - pos;
+            
+                pathlen = i;
+            
+                readGroup = malloc( len + 1 );
+                if ( readGroup == NULL )
+                    return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+                memmove( readGroup, &Path[ pos ], len );
+                readGroup[ len ] = '\0';
+                break;
+            }
+        }
+
+        path = malloc( pathlen + 1 );
+        if ( path == NULL )
+            return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+        memmove( path, Path, pathlen );
+        path[ pathlen ] = '\0';
+    
+        rc = ReportResetObject( path );
+        if ( rc == 0 )
+        {
+            char const *accession = path;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &path[ i + 1 ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", path );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, path, accession, readGroup );
+                if (UIError(rc, db, NULL)) {
+                    UIDatabaseLOGError(rc, db, true);
+/*                  *error_reported = true; */
+                }
+                VDatabaseRelease( db );
+            }
+            else {
+                rc = ProcessTable( mgr, path, accession, readGroup );
+                if (UIError(rc, NULL, NULL)) {
+                    UITableLOGError(rc, NULL, true);
+/*                  *error_reported = true; */
+                }
+            }
+        }
+        free( path );
+        free( readGroup );
+        return rc;
+    }
+    else
+    {
+        VFSManager * vfs;
+        rc = VFSManagerMake ( & vfs );
+        if ( rc == 0 )
+        {
+            VPath * vpath;
+            char * basename;
+            size_t zz;
+            char buffer [8193];
+            char readgroup_ [257];
+            char * readgroup;
+
+            rc = VFSManagerMakePath (vfs, &vpath, "%s", Path);
+            VFSManagerRelease ( vfs );
+            if ( rc == 0 )
+            {
+                char * ext;
+
+                rc = VPathReadPath (vpath, buffer, sizeof buffer - 1, &zz);
+                if ( rc == 0 )
+                {
+                loop:
+                    basename = string_rchr (buffer, zz, '/');
+                    if ( basename == NULL )
+                        basename = buffer;
+                    else
+                    {
+                        if (basename[1] == '\0')
+                        {
+                            basename[0] = '\0';
+                            goto loop;
+                        }
+                        ++ basename;
+                        zz -= basename - buffer;
+                    }
+
+                    /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+                    ext = string_rchr( basename, zz, '.' );
+                    if ( ext != NULL )
+                    {
+                        if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ".ncbi_enc" ) == 0 )
+                        {
+                            zz -= ext - basename;
+                            *ext = '\0';
+                            ext = string_rchr( basename, zz, '.' );
+                        }
+
+                        if ( ext != NULL )
+                        {
+                            if ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 )
+                            {
+                                zz -= ext - basename;
+                                *ext = '\0';
+                                ext = string_rchr( basename, zz, '.' );
+                                if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+                                    *ext = '\0';
+                            }
+                        }
+                    }
+                
+                    rc = VPathOption (vpath, vpopt_readgroup, readgroup_, 
+                                      sizeof readgroup_ - 1, &zz);
+                    if ( rc == 0 )
+                        readgroup = readgroup_;
+                    else if ( GetRCState ( rc ) == rcNotFound )
+                    {
+                        rc = 0;
+                        readgroup = NULL;
+                    }
+
+
+                    if ( rc == 0 )
+                    {
+                        VDatabase const *db;
+                        
+                        rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", Path );
+                        if ( rc == 0 )
+                        {
+                            rc = ProcessDB( db, Path, basename, readgroup );
+                            VDatabaseRelease( db );
+                        }
+                        else
+                            rc = ProcessTable( mgr, Path, basename, readgroup );
+                    }
+                }
+
+                VPathRelease (vpath);
+            }
+        }
+    }
+    return rc;
+#endif
+}
+
+/*
+ver_t CC KAppVersion( void )
+{
+    return SAM_DUMP_VERS;
+}
+*/
+
+char const *unaligned_usage[] = {"Output unaligned reads", NULL};
+char const *unaligned_only_usage[] = {"Only output unaligned spots", NULL};
+char const *primaryonly_usage[] = {"Output only primary alignments", NULL};
+char const *cigartype_usage[] = {"Output long version of CIGAR", NULL};
+char const *cigarCG_usage[] = {"Output CG version of CIGAR", NULL};
+char const *cigarCGMerge_usage[] = {"Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns", NULL};
+char const *CG_evidence[] = {"Output CG evidence aligned to reference", NULL};
+char const *CG_ev_dnb[] = {"Output CG evidence DNB's aligned to evidence", NULL};
+char const *CG_SAM[] = {"Output CG evidence DNB's aligned to reference ", NULL};
+char const *CG_mappings[] = {"Output CG sequences aligned to reference ", NULL};
+char const *header_usage[] = {"Replace original BAM header with a reconstructed one", NULL};
+char const *noheader_usage[] = {"Do not output headers", NULL};
+char const *region_usage[] = {"Filter by position on genome.",
+                              "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+                              "\"from\" and \"to\" are 1-based coordinates", NULL};
+char const *distance_usage[] = {"Filter by distance between matepairs.",
+                                "Use \"unknown\" to find matepairs split between the references.",
+                                "Use from-to to limit matepair distance on the same reference", NULL};
+char const *seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
+char const *identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
+char const *gzip_usage[] = {"Compress output using gzip", NULL};
+char const *bzip2_usage[] = {"Compress output using bzip2", NULL};
+char const *qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
+char const *fasta_usage[] = {"Produce Fasta formatted output", NULL};
+char const *fastq_usage[] = {"Produce FastQ formatted output", NULL};
+char const *prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
+char const *reverse_usage[] = {"Reverse unaligned reads according to read type", NULL};
+char const *comment_usage[] = {"Add comment to header. Use multiple times for several lines. Use quotes", NULL};
+char const *XI_usage[] = {"Output cSRA alignment id in XI column", NULL};
+char const *qual_quant_usage[] = {"Quality scores quantization level",
+                                  "a string like '1:10,10:20,20:30,30:-'", NULL};
+char const *CG_names[] = { "Generate CG friendly read names", NULL};
+
+char const *usage_params[] =
+{
+    NULL,                       /* unaligned */
+    NULL,                       /* unaligned-only */
+    NULL,                       /* primaryonly */
+    NULL,                       /* cigartype */
+    NULL,                       /* cigarCG */
+    NULL,                       /* header */
+    NULL,                       /* no-header */
+    "text",                     /* comment */
+    "name[:from-to]",           /* region */
+    "from-to|'unknown'",        /* distance */
+    NULL,                       /* seq-id */
+    NULL,                       /* identical-bases */
+    NULL,                       /* gzip */
+    NULL,                       /* bzip2 */
+    NULL,                       /* qname */
+    NULL,                       /* fasta */
+    NULL,                       /* fastq */
+    "prefix",                   /* prefix */
+    NULL,                       /* reverse */
+    NULL,                       /* test-rows */
+    NULL,                       /* mate-row-gap-cacheable */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* XI */
+    "quantization string",      /* qual-quant */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* CG-evidence */
+    NULL,                       /* CG-ev-dnb */
+    NULL,                       /* CG-mappings */
+    NULL,                       /* CG-SAM */
+    NULL                        /* CG-names */
+};
+
+enum eArgs
+{
+    earg_unaligned = 0,         /* unaligned */
+    earg_unaligned_only,        /* unaligned */
+    earg_prim_only,             /* primaryonly */
+    earg_cigartype,             /* cigartype */
+    earg_cigarCG,               /* cigarCG */
+    earg_header,                /* header */
+    earg_noheader,              /* no-header */
+    earg_comment,               /* comment */
+    earg_region,                /* region */
+    earg_distance,              /* distance */
+    earg_seq_id,                /* seq-id */
+    earg_identicalbases,        /* identical-bases */
+    earg_gzip,                  /* gzip */
+    earg_bzip2,                 /* bzip2 */
+    earg_qname,                 /* qname */
+    earg_fastq,                 /* fasta */
+    earg_fasta,                 /* fastq */
+    earg_prefix,                /* prefix */
+    earg_reverse,               /* reverse */
+    earg_test_rows,             /* test-rows */
+    earg_mate_row_gap_cachable, /* mate-row-gap-cacheable */
+    earg_cigarCG_merge,         /* cigarCGMerge */
+    earg_XI,                    /* XI */
+    earg_QualQuant,             /* qual-quant */
+    earg_CG_evidence,           /* CG-evidence */
+    earg_CG_ev_dnb,             /* CG-ev-dnb */
+    earg_CG_mappings,           /* CG-mappings */
+    earg_CG_SAM,                /* CG-SAM */
+    earg_CG_names               /* CG-names */
+};
+
+OptDef DumpArgs[] =
+{
+    { "unaligned", "u", NULL, unaligned_usage, 0, false, false },           /* unaligned */
+    { "unaligned-only", "U", NULL, unaligned_usage, 0, false, false },      /* unaligned-only */
+    { "primary", "1", NULL, primaryonly_usage, 0, false, false },           /* primaryonly */
+    { "cigar-long", "c", NULL, cigartype_usage, 0, false, false },          /* cigartype */
+    { "cigar-CG", NULL, NULL, cigarCG_usage, 0, false, false },             /* cigarCG */
+    { "header", "r", NULL, header_usage, 0, false, false },                 /* header */
+    { "no-header", "n", NULL, noheader_usage, 0, false, false },            /* no-header */
+    { "header-comment", NULL, NULL, comment_usage, 0, true, false },        /* comment */
+    { "aligned-region", NULL, NULL, region_usage, 0, true, false },         /* region */
+    { "matepair-distance", NULL, NULL, distance_usage, 0, true, false },    /* distance */
+    { "seqid", "s", NULL, seq_id_usage, 0, false, false },                  /* seq-id */
+    { "hide-identical", "=", NULL, identicalbases_usage, 0, false, false }, /* identical-bases */
+    { "gzip", NULL, NULL, gzip_usage, 0, false, false },                    /* gzip */
+    { "bzip2", NULL, NULL, bzip2_usage, 0, false, false },                  /* bzip2 */
+    { "spot-group", "g", NULL, qname_usage, 0, false, false },              /* qname */
+    { "fastq", NULL, NULL, fastq_usage, 0, false, false },                  /* fasta */
+    { "fasta", NULL, NULL, fasta_usage, 0, false, false },                  /* fastq */
+    { "prefix", "p", NULL, prefix_usage, 0, true, false },                  /* prefix */
+    { "reverse", NULL, NULL, reverse_usage, 0, false, false },              /* reverse */
+    { "test-rows", NULL, NULL, NULL, 0, true, false },                      /* test-rows */
+    { "mate-cache-row-gap", NULL, NULL, NULL, 0, true, false },             /* mate-row-gap-cacheable */
+    { "cigar-CG-merge", NULL, NULL, cigarCGMerge_usage, 0, false, false },  /* cigarCGMerge */
+    { "XI", NULL, NULL, XI_usage, 0, false, false },                        /* XI */
+    { "qual-quant", "Q", NULL, qual_quant_usage, 0, true, false },          /* qual-quant */
+    { "CG-evidence", NULL, NULL, CG_evidence, 0, false, false },            /* CG-evidence */
+    { "CG-ev-dnb"  , NULL, NULL, CG_ev_dnb  , 0, false, false },            /* CG-ev-dnb */
+    { "CG-mappings", NULL, NULL, CG_mappings, 0, false, false },            /* CG-mappings */
+    { "CG-SAM", NULL, NULL, CG_SAM, 0, false, false },                      /* CG-SAM */
+    { "CG-names", NULL, NULL, CG_names, 0, false, false },                  /* CG-names */
+    { "legacy", NULL, NULL, NULL, 0, false, false }
+};
+
+
+/*
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+    return KOutMsg( "Usage:\n"
+        "\t%s [options] path-to-run[ path-to-run ...] > output.sam\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args)
+{
+    char const *progname = UsageDefaultName;
+    char const *fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i;
+
+    rc = ArgsProgram( args, &fullpath, &progname );
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+    for( i = 0; i < sizeof( DumpArgs ) / sizeof( DumpArgs[ 0 ] ); i++ )
+    {
+        if ( DumpArgs[ i ].help != NULL )
+        {
+            HelpOptionLine( DumpArgs[ i ].aliases, DumpArgs[ i ].name,
+                            usage_params[ i ], DumpArgs[ i ].help);
+        }
+    }
+    KOutMsg( "\n" );
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+*/
+
+#define ARGS_COUNT (sizeof(DumpArgs)/sizeof(DumpArgs[0]))
+
+
+static unsigned ParamCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsParamCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static unsigned ArgCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsArgvCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t CountArgs( Args const *const args, unsigned count[],
+                       char const **const errmsg )
+{
+    rc_t rc;
+    unsigned const pcount = ParamCount( args, &rc );
+    
+    memset( count, 0, ARGS_COUNT );
+    if ( rc != 0 || pcount == 0 )
+    {
+        *errmsg = "";
+        MiniUsage( args );
+        return ( ArgCount( args, NULL ) < 2 )
+             ? 0
+             : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+    }
+#define COUNT_ARG(E) do {\
+    char const *const optname = DumpArgs[ (E) ].name; \
+    if ( ( rc = ArgsOptionCount( args, optname, &count[ (E) ] ) ) != 0 ) { \
+        *errmsg = optname; \
+        return rc; \
+    } } while( 0 )
+    
+    
+    /* record source options */
+    COUNT_ARG( earg_unaligned );
+    COUNT_ARG( earg_unaligned_only );
+    COUNT_ARG( earg_prim_only );
+    COUNT_ARG( earg_CG_evidence );
+    COUNT_ARG( earg_CG_ev_dnb );
+    COUNT_ARG( earg_CG_mappings );
+    COUNT_ARG( earg_CG_SAM );
+    
+    /* record filter options */
+    COUNT_ARG( earg_region );
+    COUNT_ARG( earg_distance );
+    
+    /* output format options */
+    COUNT_ARG( earg_fastq );
+    COUNT_ARG( earg_fasta );
+    
+    /* SAM header options */
+    COUNT_ARG( earg_header );
+    COUNT_ARG( earg_noheader );
+    COUNT_ARG( earg_comment );
+    
+    /* SAM field options */
+    COUNT_ARG( earg_prefix );
+    COUNT_ARG( earg_qname );
+    COUNT_ARG( earg_seq_id );
+    COUNT_ARG( earg_CG_names );
+    
+    COUNT_ARG( earg_cigartype );
+    COUNT_ARG( earg_cigarCG );
+    COUNT_ARG( earg_cigarCG_merge );
+    
+    COUNT_ARG( earg_identicalbases );
+    COUNT_ARG( earg_reverse );
+    COUNT_ARG( earg_QualQuant );
+    
+    /* output encoding options */
+    COUNT_ARG( earg_gzip );
+    COUNT_ARG( earg_bzip2 );
+    
+    COUNT_ARG( earg_mate_row_gap_cachable );
+    
+    /* debug options */
+    COUNT_ARG( earg_XI );
+    COUNT_ARG( earg_test_rows );
+#undef COUNT_ARG
+    return 0;
+}
+
+
+static unsigned GetOptValU( Args const *const args, char const *const argname,
+                            unsigned const defval, rc_t *const prc )
+{
+    unsigned y = defval;
+    char const *valstr;
+    rc_t rc = ArgsOptionValue( args, argname, 0, (const void **)&valstr );
+    
+    if ( rc == 0 )
+    {
+        char *endp;
+        
+        y = strtou32( valstr, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            y = 0;
+        }
+        if ( y == 0 )
+            y = defval;
+    }
+    if ( prc )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t GetComments( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    parms->comments = calloc( n + 1, sizeof( parms->comments[ 0 ] ) );
+    if ( parms->comments != NULL )
+    {
+        unsigned i;
+        
+        for ( i = 0; i < n; ++i )
+        {
+            rc_t const rc = ArgsOptionValue( args, DumpArgs[ earg_comment ].name, i, (const void **)&parms->comments[ i ] );
+            if ( rc != 0 )
+            {
+                free( ( void * )parms->comments );
+                parms->comments = NULL;
+                return rc;
+            }
+        }
+        return 0;
+    }
+    else
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+}
+
+
+static rc_t ParseFromTo( int *const pFrom, int *const pTo, char const str[] )
+{
+    /* $str =~ /((\d+)-(\d+))|(-(\d+))|(\d+)/ */
+    int n;
+    char fr_str[ 16 ];
+    char to_str[ 16 ];
+    uint32_t fr = 0;
+    uint32_t to = 0;
+    int i = sscanf( str, "%15[0-9]-%15[0-9]%n", fr_str, to_str, &n );
+    
+    if ( i != 2 )
+    {
+        unsigned const offset = ( str[ 0 ] == '-' ) ? 1 : 0;
+        
+        fr = 0;
+        i = sscanf( str + offset, "%15[0-9]%n", to_str, &n );
+        if ( i != 1 )
+            return RC( rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange );
+        to = strtou32( to_str, 0, 0 );
+    }
+    else
+    {
+        fr = strtou32( fr_str, 0, 0 );
+        to = strtou32( to_str, 0, 0 );
+        
+        if ( to < fr )
+        {
+            uint32_t const tmp = to;
+            to = fr;
+            fr = tmp;
+        }
+    }
+    /* was the entire string consumed */
+    if ( str[ n ] != 0 )
+        return RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+    *pFrom = ( int )fr;
+    *pTo = ( int )to;
+    return 0;
+}
+
+
+static rc_t GetDistance( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TMatepairDistance *const mpd = calloc( n, sizeof( mpd[ 0 ] ) );
+    
+    if ( mpd == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            int from = 0;
+            int to = 0;
+
+            rc = ArgsOptionValue( args, DumpArgs[earg_distance].name, i, (const void **)&valstr );
+            if ( rc != 0 )
+                break;
+            if ( strcasecmp( valstr, "unknown" ) == 0 )
+            {
+                parms->mp_dist_unknown = true;
+                continue;
+            }
+            rc = ParseFromTo( &from, &to, valstr );
+            if ( rc != 0 )
+                break;
+            if ( ( from != 0 ) || ( to != 0 ) )
+            {
+                mpd[ j ].from = from;
+                mpd[ j ].to = to;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->mp_dist = mpd;
+            parms->mp_dist_qty = j;
+            
+            SAM_DUMP_DBG( 2, ( "filter by mate pair distance\n" ) );
+            if ( parms->mp_dist_unknown )
+                SAM_DUMP_DBG( 2, ( "    distance: unknown\n" ) );
+            for ( i = 0; i < j; ++i )
+            {
+                SAM_DUMP_DBG( 2, ( "    distance [%lu-%lu]\n",
+                              parms->mp_dist[ i ].from, parms->mp_dist[ i ].to ) );
+            }
+        }
+        else
+            free( mpd );
+    }
+    return rc;
+}
+
+
+static rc_t GetRegion( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TAlignedRegion *const reg = calloc( n, sizeof( reg[ 0 ] ) );
+    
+    if ( reg == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( rc = 0, j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            char const *sep;
+            unsigned namelen;
+            unsigned f;
+            unsigned e;
+            TAlignedRegion r;
+
+	    memset(&r,0,sizeof(r));
+            
+            rc = ArgsOptionValue( args, DumpArgs[ earg_region ].name, i, (const void **)&valstr );
+            if ( rc != 0 ) break;
+            
+            sep = strchr( valstr, ':' );
+            if ( sep != NULL )
+                namelen = sep - valstr;
+            else
+                namelen = string_size( valstr );
+            
+            if ( namelen >= sizeof( r.name ) )
+                return RC( rcExe, rcArgv, rcProcessing, rcParam, rcTooLong );
+            
+            memmove( r.name, valstr, namelen );
+            r.name[ namelen ] = '\0';
+            
+            r.rq = UINT_MAX;
+            if ( sep != NULL )
+            {
+                int from = -1;
+                int to = -1;
+                
+                rc = ParseFromTo( &from, &to, sep + 1 );
+                if ( rc != 0 )
+                    break;
+                if ( from > 0 ) /* convert to 0-based */
+                    --from;
+                else if ( to > 0 )
+                    from = 0;
+                if ( to > 0 )
+                    --to;
+                else if ( from >= 0 && to < 0 )
+                    to = from;
+                if ( from >= 0 || to >= 0 )
+                {
+                    if ( from > to )
+                    {
+                        int tmp = to;
+                        to = from;
+                        from = tmp;
+                    }
+                    r.r[ 0 ].from = from;
+                    r.r[ 0 ].to = to;
+                    r.rq = 1;
+                }
+            }
+            
+            for ( f = 0, e = j; f < e; )
+            {
+                unsigned const m = ( ( f + e ) / 2 );
+                int const diff = strcmp( r.name, reg[ m ].name );
+                
+                if ( diff < 0 )
+                    e = m;
+                else
+                    f = m + 1;
+            }
+            if ( 0 < e && e < j && strcmp( r.name, reg[ e-1 ].name ) == 0 )
+            {
+                TAlignedRegion *const fnd = &reg[ e - 1 ];
+                
+                if ( fnd->rq != UINT_MAX )
+                {
+                    for ( f = 0, e = fnd->rq; f < e; )
+                    {
+                        unsigned const m = ( ( f + e ) / 2 );
+                        
+                        if ( r.r[ 0 ].from < fnd->r[ m ].from )
+                            e = m;
+                        else
+                            f = m + 1;
+                    }
+                    if ( fnd->rq >= ( sizeof( r.r ) / sizeof( r.r[0] ) ) )
+                    {
+                        rc = RC( rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient );
+                        break;
+                    }
+                    memmove( &fnd->r[ e +1 ], &fnd->r[ e ], ( fnd->rq - e ) * sizeof( fnd->r[ 0 ] ) );
+                    fnd->r[ e ] = r.r[ 0 ];
+                    ++fnd->rq;
+                }
+            }
+            else
+            {
+                memmove( &reg[ e + 1 ], &reg[ e ], ( j - e ) * sizeof( reg[ 0 ] ) );
+                reg[ e ] = r;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->region = reg;
+            parms->region_qty = j;
+            
+            for ( i = 0; i < parms->region_qty; ++i )
+            {
+                TAlignedRegion *const r = &parms->region[ i ];
+                
+                SAM_DUMP_DBG( 2, ( "filter by %s\n", r->name ) );
+                if ( r->rq == UINT_MAX )
+                {
+                    r->rq = 1;
+                    r->r[ 0 ].from = 0;
+                    r->r[ 0 ].to = UINT_MAX;
+                }
+                for ( j = 0; j < r->rq; ++j )
+                {
+                    unsigned const to = r->r[ j ].to;
+                    unsigned const from = r->r[ j ].from;
+                    
+                    SAM_DUMP_DBG( 2, ( "   range: [%u:%u]\n", r->r[ j ].from, to ) );
+                    if ( r->max_to < to ) r->max_to = to;
+                    if ( r->min_from < from ) r->min_from = from;
+                }
+            }
+        }
+        else
+            free( reg );
+    }
+    return rc;
+}
+
+
+static rc_t GetQualQuant( Args const *const args, struct params_s *const parms )
+{
+    char const *valstr;
+    int i;
+    rc_t rc = ArgsOptionValue( args, DumpArgs[ earg_QualQuant ].name, 0, (const void **)&valstr );
+    
+    if ( rc == 0 && strcmp( valstr, "0" ) != 0 )
+        parms->quantizeQual = QualityQuantizerInitMatrix( parms->qualQuant, valstr );
+    for(i=1; parms->qualQuant[i]==parms->qualQuant[0] && i<256;i++){}
+    if(i<256) parms->qualQuantSingle=0;
+    else      parms->qualQuantSingle = parms->qualQuant[0];
+    return rc;
+}
+
+
+static rc_t GetArgs( Args const *const args, unsigned const count[],
+                     char const **const errmsg )
+{
+    static struct params_s parms;
+    bool const multipass = ParamCount( args, 0 ) > 1;
+    rc_t rc;
+    
+    memset( &parms, 0, sizeof( parms ) );
+    
+    if ( count[ earg_comment ] )
+    {
+        rc = GetComments( args, &parms, count[ earg_comment ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_comment ].name;
+            return rc;
+        }
+    }
+    
+    if ( count[ earg_region ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetRegion( args, &parms, count[ earg_region ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_region ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_distance ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetDistance( args, &parms, count[ earg_distance ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_distance ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_QualQuant ] )
+    {
+        rc = GetQualQuant( args, &parms );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_QualQuant ].name;
+            return rc;
+        }
+    }
+    
+    parms.cg_sam = ( count[ earg_CG_SAM ] != 0 );
+    parms.cg_evidence = ( count[ earg_CG_evidence ] != 0 );
+    parms.cg_ev_dnb = ( count[ earg_CG_ev_dnb ] != 0 );
+    
+    if ( count[ earg_CG_mappings ] == 0 &&
+         ( parms.cg_sam || parms.cg_evidence || parms.cg_ev_dnb ) )
+    {
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = false;
+    }
+    else
+    {
+        parms.primaries = true;
+        parms.secondaries = ( count[ earg_prim_only ] == 0 );
+        parms.unaligned = ( ( count[ earg_unaligned ] != 0 ) /*&& ( parms.region_qty == 0 )*/ );
+    }
+    
+    parms.long_cigar = ( count[ earg_cigartype ] != 0 );
+    parms.use_seqid = ( ( count[ earg_seq_id ] != 0 ) || multipass );
+    parms.hide_identical = ( count[ earg_identicalbases ] != 0 );
+    parms.fasta = ( count[ earg_fasta ] != 0 );
+    parms.fastq = ( count[ earg_fastq ] != 0 );
+    parms.reverse_unaligned = ( count[ earg_reverse ] != 0 );
+    parms.cg_friendly_names = count[ earg_CG_names ] != 0;
+    parms.spot_group_in_name = ( count[ earg_qname ] != 0 || multipass );
+    parms.noheader = ( ( count[ earg_noheader ] != 0 ) || parms.fasta || parms.fastq || multipass );
+    parms.reheader = ( ( count[ earg_header ] != 0 ) && !parms.noheader );
+    parms.xi = ( count[ earg_XI ] != 0 );
+    if ( ( count[ earg_cigarCG ] == 0 ) && ( count[ earg_cigarCG_merge ] == 0 ) )
+    {
+        parms.cg_style = 0;
+    }
+    else if ( count[ earg_cigarCG ] == 0 )
+    {
+        parms.cg_style = 1;
+        parms.long_cigar = false;
+    }
+    else if ( count[ earg_cigarCG_merge ] == 0 )
+    {
+        parms.cg_style = 2;
+    }
+    else
+    {
+        rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInconsistent );
+        *errmsg = "cigar-CG and CG are mutually exclusive";
+        parms.cg_style = 0;
+    }
+
+    if (count[ earg_unaligned_only ] > 0) {
+        parms.unaligned_spots = true;
+        
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = true;
+        parms.cg_ev_dnb = false;
+        parms.cg_evidence = false;
+        parms.cg_sam = false;
+        parms.cg_style = 0;
+    }
+    
+    parms.test_rows = GetOptValU( args, DumpArgs[ earg_test_rows ].name, 0, NULL );
+    parms.mate_row_gap_cachable = GetOptValU( args, DumpArgs[ earg_mate_row_gap_cachable ].name, 1000000, NULL );
+    
+    param = &parms;
+    return 0;
+}
+
+
+static rc_t GetParams( Args const *const args, char const **const errmsg )
+{
+    unsigned count[ ARGS_COUNT ];
+    rc_t rc = CountArgs( args, count, errmsg );
+    
+    if ( rc == 0 )
+        rc = GetArgs( args, count, errmsg );
+    return rc;
+}
+
+
+rc_t CC SAM_Dump_Main( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    Args* args;
+    char const *errmsg = "stop";
+    bool error_reported = false;
+
+    memset( &g_out_writer, 0, sizeof( g_out_writer ) );
+    KOutHandlerSetStdOut();
+    KStsHandlerSetStdErr();
+    KLogHandlerSetStdErr();
+    (void)KDbgHandlerSetStdErr();
+
+    ReportBuildDate( __DATE__ );
+
+    rc = ArgsMakeAndHandle( &args, argc, argv, 1, DumpArgs, ARGS_COUNT );
+    if ( rc == 0 )
+    {
+        uint32_t pcount;
+
+        rc = ArgsParamCount( args, &pcount );
+        if ( rc != 0 || pcount < 1 )
+        {
+            errmsg = "";
+            rc = argc < 2 ? 0 : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+            MiniUsage( args );
+        }
+        else if ( ( rc = GetParams( args, &errmsg ) ) != 0 )
+        {
+        }
+        else
+        {
+            VDBManager const *mgr;
+            
+            rc = VDBManagerMakeRead( &mgr, NULL );
+            if ( rc == 0 )
+            {
+                rc = BufferedWriterMake( param->output_gzip, param->output_bz2 );
+                if ( rc == 0 )
+                {
+                    unsigned i;
+                    
+                    for ( i = 0; i < pcount; ++i )
+                    {
+                        char const *arg;
+                        
+                        rc = ArgsParamValue( args, i, (const void **)&arg );
+                        if ( rc != 0 ) break;
+                        rc = ProcessPath( mgr, arg );
+#if _ARCH_BITS < 64
+                        /* look for "param excessive while writing vector within container module" */
+                        if (GetRCState(rc) == rcExcessive &&
+                            GetRCObject(rc) == rcParam &&
+                            GetRCContext(rc) == rcWriting &&
+                            GetRCTarget(rc) == rcVector &&
+                            GetRCModule(rc) == rcCont)
+                        {
+                            ( void )PLOGMSG( klogErr, (klogErr, "This run '$(run)' contains too many reads to be processed with a $(bits)-bit executable; please try again with a 64-bit executable.", "run=%s,bits=%u", arg, _ARCH_BITS));
+                        }
+#endif
+                        if ( rc != 0 ) break;
+                    }
+                    BufferedWriterRelease( rc == 0 );
+                }
+                VDBManagerRelease( mgr );
+            }
+        }
+        ArgsWhack( args );
+    }
+
+    if ( rc != 0 && !error_reported )
+    {
+        if ( errmsg[ 0 ] )
+        {
+            ( void )LOGERR( klogErr, rc, errmsg );
+        } else if ( KLogLastErrorCode() != rc )
+        {
+            ( void )LOGERR( klogErr, rc, "stop" );
+        }
+    }
+
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
+
+
+rc_t CC Legacy_KMain( int argc, char* argv[] )
+{
+    char filename[ 4096 ];
+    /*
+       Try to find a option-file - parameter in the original parameters 
+       This is a hack to teach sam-dump to read it's parameters from a file/pipe instead
+       of the commandline
+       It is neccessary because the code above does not use libkapp to parse parameters!
+    */
+    rc_t rc = Args_find_option_in_argv( argc, argv, "--option-file", filename, sizeof filename );
+    if ( rc == 0 )
+    {
+        int new_argc;
+        char ** new_argv;
+        /* we found it! Now comes the special treatment: we fake a new argc/argv-pair! */
+        rc = Args_tokenize_file_and_progname_into_argv( filename, "sam-dump", &new_argc, &new_argv );
+        if ( rc == 0 )
+        {
+            /* pass the faked input-parameters from */
+            rc = SAM_Dump_Main( new_argc, new_argv );
+
+            Args_free_token_argv( new_argc, new_argv );
+        }
+    }
+    else
+    {
+        /* we did not found the special option, just use the commandline-parameters unchanged */
+        rc = SAM_Dump_Main( argc, argv );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-dump3.c b/tools/sra-pileup/sam-dump3.c
new file mode 100644
index 0000000..2d80224
--- /dev/null
+++ b/tools/sra-pileup/sam-dump3.c
@@ -0,0 +1,563 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <kapp/main.h>
+#include <vdb/report.h> /* ReportSetVDBManager */
+#include <vdb/vdb-priv.h> /* VDBManagerDisablePagemapThread() */
+#include <klib/report.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "sam-hdr.h"
+#include "sam-hdr1.h"
+#include "matecache.h"
+#include "cg_tools.h"
+#include "out_redir.h"
+#include "sam-aligned.h"
+#include "sam-unaligned.h"
+
+
+char const *sd_unaligned_usage[]      = { "Output unaligned reads along with aligned reads",
+                                       NULL };
+
+char const *sd_primaryonly_usage[]    = { "Output only primary alignments",
+                                       NULL };
+
+char const *sd_cigartype_usage[]      = { "Output long version of CIGAR",
+                                       NULL };
+
+char const *sd_cigarCG_usage[]        = { "Output CG version of CIGAR",
+                                       NULL };
+
+char const *sd_cigarCGMerge_usage[]   = { "Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns",
+                                       NULL };
+
+char const *sd_CG_evidence[]          = { "Output CG evidence aligned to reference", 
+                                       NULL };
+
+char const *sd_CG_ev_dnb[]            = { "Output CG evidence DNB's aligned to evidence",
+                                       NULL };
+
+char const *sd_CG_SAM[]               = { "Output CG evidence DNB's aligned to reference ", 
+                                       NULL };
+
+char const *sd_CG_mappings[]          = { "Output CG sequences aligned to reference ",
+                                       NULL };
+
+char const *sd_header_usage[]         = { "Always reconstruct header",
+                                       NULL };
+
+char const *sd_header_file_usage[]    = { "take all headers from this file",
+                                       NULL };
+
+char const *sd_noheader_usage[]       = { "Do not output headers",
+                                       NULL };
+
+char const *sd_region_usage[]         = { "Filter by position on genome.",
+                                       "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+                                       "\"from\" and \"to\" (inclusive) are 1-based coordinates",
+                                       NULL };
+
+char const *sd_distance_usage[]       = { "Filter by distance between matepairs.",
+                                       "Use \"unknown\" to find matepairs split between the references.",
+                                       "Use from-to (inclusive) to limit matepair distance on the same reference",
+                                       NULL };
+
+char const *sd_seq_id_usage[]         = { "Print reference SEQ_ID in RNAME instead of NAME",
+                                       NULL };
+
+char const *sd_identicalbases_usage[] = { "Output '=' if base is identical to reference",
+                                       NULL };
+
+char const *sd_gzip_usage[]           = { "Compress output using gzip",
+                                       NULL };
+
+char const *sd_bzip2_usage[]          = { "Compress output using bzip2",
+                                       NULL };
+
+char const *sd_qname_usage[]          = { "Add .SPOT_GROUP to QNAME",
+                                       NULL };
+
+char const *sd_fasta_usage[]          = { "Produce Fasta formatted output",
+                                       NULL };
+
+char const *sd_fastq_usage[]          = { "Produce FastQ formatted output",
+                                       NULL };
+
+char const *sd_prefix_usage[]         = { "Prefix QNAME: prefix.QNAME",
+                                       NULL };
+
+char const *sd_reverse_usage[]        = { "Reverse unaligned reads according to read type",
+                                       NULL };
+
+char const *sd_comment_usage[]        = { "Add comment to header. Use multiple times for several lines. Use quotes",
+                                       NULL };
+
+char const *sd_XI_usage[]             = { "Output cSRA alignment id in XI column",
+                                       NULL };
+
+char const *sd_qual_quant_usage[]     = { "Quality scores quantization level",
+                                       "a string like '1:10,10:20,20:30,30:-'",
+                                       NULL };
+
+char const *sd_report_usage[]         = { "report options instead of executing",
+                                       NULL };
+
+char const *sd_outputfile_usage[]     = { "print output into this file (instead of STDOUT)",
+                                       NULL };
+
+char const *sd_outbufsize_usage[]     = { "size of output-buffer(dflt:32k, 0...off)",
+                                       NULL };
+
+char const *sd_cachereport_usage[]    = { "print report about mate-pair-cache",
+                                       NULL };
+
+char const *sd_unaligned_only_usage[] = { "output reads for spots with no aligned reads",
+                                       NULL };
+
+char const *sd_cg_names_usage[]       = { "prints cg-style spotgroup.spotid formed names",
+                                       NULL };
+
+char const *sd_cur_cache_usage[]      = { "open cached cursor with this size",
+                                       NULL };
+
+char const *sd_min_mapq_usage[]       = { "min. mapq an alignment has to have, to be printed",
+                                       NULL };
+
+char const *sd_no_mate_cache_usage[]  = { "do not use a mate-cache, slower but less memory usage",
+                                       NULL };
+
+char const *rna_splice_usage[]        = { "modify cigar-string (replace .D. with .N.) and add output flags (XS:A:+/-) ",
+                                           "when rna-splicing is detected by match to spliceosome recognition sites",
+                                       NULL };
+
+char const *rna_splicel_usage[]       = { "level of rna-splicing detection (0,1,2)",
+                                           "when testing for spliceosome recognition sites ",
+                                           "0=perfect match, 1=one mismatch, 2=two mismatches ",
+                                           "one on each site",
+                                       NULL };
+
+char const *rna_splice_log_usage[]    = { "file, into which rna-splice events are written", NULL };
+
+char const *no_mt_usage[]             = { "disable multithreading", NULL };
+
+char const *with_md_flag_usage[]      = { "print MD-flag", NULL };
+                                      
+OptDef SamDumpArgs[] =
+{
+    { OPT_UNALIGNED,     "u", NULL, sd_unaligned_usage,      0, false, false },  /* print unaligned reads */
+    { OPT_PRIM_ONLY,     "1", NULL, sd_primaryonly_usage,    0, false, false },  /* print only primary alignments */
+    { OPT_CIGAR_LONG,    "c", NULL, sd_cigartype_usage,      0, false, false },  /* use long cigar-string instead of short */
+    { OPT_CIGAR_CG,     NULL, NULL, sd_cigarCG_usage,        0, false, false },  /* transform cigar into cg-style ( has B/N ) */
+    { OPT_RECAL_HDR,     "r", NULL, sd_header_usage,         0, false, false },  /* recalculate header */
+    { OPT_HDR_FILE,     NULL, NULL, sd_header_file_usage,    0, true, false },  /* take headers from file */
+    { OPT_NO_HDR,        "n", NULL, sd_noheader_usage,       0, false, false },  /* do not print header */
+    { OPT_HDR_COMMENT,  NULL, NULL, sd_comment_usage,        0, true,  false },  /* insert this comment into header */
+    { OPT_REGION,       NULL, NULL, sd_region_usage,         0, true,  false },  /* filter by region */
+    { OPT_MATE_DIST,    NULL, NULL, sd_distance_usage,       0, true,  false },  /* filter by a list of mate-pair-distances */
+    { OPT_USE_SEQID,     "s", NULL, sd_seq_id_usage,         0, false, false },  /* print seq-id instead of seq-name*/
+    { OPT_HIDE_IDENT,    "=", NULL, sd_identicalbases_usage, 0, false, false },  /* replace bases that match the reference with '=' */
+    { OPT_GZIP,         NULL, NULL, sd_gzip_usage,           0, false, false },  /* compress the output with gzip */
+    { OPT_BZIP2,        NULL, NULL, sd_bzip2_usage,          0, false, false },  /* compress the output with bzip2 */
+    { OPT_SPOTGRP,       "g", NULL, sd_qname_usage,          0, false, false },  /* add spotgroup to qname */
+    { OPT_FASTQ,        NULL, NULL, sd_fastq_usage,          0, false, false },  /* output-format = fastq ( instead of SAM ) */
+    { OPT_FASTA,        NULL, NULL, sd_fasta_usage,          0, false, false },  /* output-format = fasta ( instead of SAM ) */
+    { OPT_PREFIX,        "p", NULL, sd_prefix_usage,         0, true,  false },  /* prefix QNAME with this string */
+    { OPT_REVERSE,      NULL, NULL, sd_reverse_usage,        0, false, false },  /* reverse unaligned reads if reverse-flag set*/
+    { OPT_MATE_GAP,     NULL, NULL, NULL,                    0, true,  false },  /* int value, mate's farther apart than this are not cached */
+    { OPT_CIGAR_CG_M,   NULL, NULL, sd_cigarCGMerge_usage,   0, false, false },  /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY)*/
+    { OPT_XI_DEBUG,     NULL, NULL, sd_XI_usage,             0, false, false },  /* output alignment id for debugging... XI:I:NNNNNNN */
+    { OPT_Q_QUANT,       "Q", NULL, sd_qual_quant_usage,     0, true,  false },  /* quality-quantization string */
+    { OPT_CG_EVIDENCE,  NULL, NULL, sd_CG_evidence,          0, false, false },  /* CG-evidence */
+    { OPT_CG_EV_DNB,    NULL, NULL, sd_CG_ev_dnb,            0, false, false },  /* CG-ev-dnb */
+    { OPT_CG_MAPP,      NULL, NULL, sd_CG_mappings,          0, false, false },  /* CG-mappings */
+    { OPT_CG_SAM,       NULL, NULL, sd_CG_SAM,               0, false, false },  /* cga-tools emulation mode */
+    { OPT_REPORT,       NULL, NULL, sd_report_usage,         0, false, false },  /* report options instead of executing */
+    { OPT_OUTPUTFILE,   NULL, NULL, sd_outputfile_usage,     0, true,  false },  /* write into output-file */
+    { OPT_OUTBUFSIZE,   NULL, NULL, sd_outbufsize_usage,     0, true,  false },  /* size of output-buffer */
+    { OPT_CACHEREPORT,  NULL, NULL, sd_cachereport_usage,    0, false, false },  /* report usage of mate-pair-cache */
+    { OPT_UNALIGNED_ONLY,NULL, NULL, sd_unaligned_only_usage, 0, false, false }, /* print only unaligned spots */
+    { OPT_CG_NAMES,     NULL, NULL, sd_cg_names_usage,       0, false, false },  /* print cg-style spotnames */
+    { OPT_CURSOR_CACHE, NULL, NULL, sd_cur_cache_usage,      0, true,  false },  /* size of cursor cache */
+    { OPT_MIN_MAPQ,     NULL, NULL, sd_min_mapq_usage,       0, true,  false },  /* minimal mapping quality */
+    { OPT_NO_MATE_CACHE,NULL, NULL, sd_no_mate_cache_usage,  0, false, false },  /* do not use mate-cache */
+    { OPT_RNA_SPLICE,   NULL, NULL, rna_splice_usage,        0, false, false },  /* detect rna-splicing in sequence */
+    { OPT_RNA_SPLICEL,  NULL, NULL, rna_splicel_usage,       0, true,  false },  /* level of rna-splicing detection */
+    { OPT_RNA_SPLICE_LOG,  NULL, NULL, rna_splice_log_usage, 0, true,  false },  /* filename to log rna-splice events into */
+    { OPT_NO_MT,        NULL, NULL, no_mt_usage,              0, false, false },   /* force new code-path */    
+    { OPT_MD_FLAG,		NULL, NULL, with_md_flag_usage,       0, false, false },    /* print the MD-flag */	
+    { OPT_DUMP_MODE,    NULL, NULL, NULL,                    0, true,  false },  /* how to produce aligned reads if no regions given */
+    { OPT_CIGAR_TEST,   NULL, NULL, NULL,                    0, true,  false },  /* test cg-treatment of cigar string */
+    { OPT_LEGACY,       NULL, NULL, NULL,                    0, false, false },  /* force legacy code-path */
+    { OPT_NEW,          NULL, NULL, NULL,                    0, false, false },   /* force new code-path */
+    { OPT_TIMING,       NULL, NULL, NULL,                    0, true, false }    /* optional timing */
+};
+
+char const *sd_usage_params[] =
+{
+    NULL,                       /* unaligned */
+    NULL,                       /* primaryonly */
+    NULL,                       /* cigartype */
+    NULL,                       /* cigarCG */
+    NULL,                       /* recalc header */
+    "filename",                 /* take headers from file */
+    NULL,                       /* no-header */
+    "text",                     /* hdr-comment */
+    "name[:from-to]",           /* region */
+    "from-to|'unknown'",        /* mate distance filter*/
+    NULL,                       /* seq-id */
+    NULL,                       /* identical-bases */
+    NULL,                       /* gzip */
+    NULL,                       /* bzip2 */
+    NULL,                       /* qname */
+    NULL,                       /* fasta */
+    NULL,                       /* fastq */
+    "prefix",                   /* prefix */
+    NULL,                       /* reverse */
+    NULL,                       /* mate-row-gap-cacheable */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* XI */
+    "quantization string",      /* qual-quant */
+    NULL,                       /* CG-evidence */
+    NULL,                       /* CG-ev-dnb */
+    NULL,                       /* CG-mappings */
+    NULL,                       /* CG-SAM */
+    NULL,                       /* report */
+    NULL,                       /* outputfile */
+    NULL,                       /* outputfile buffsize */
+    NULL,                       /* cachereport */
+    NULL,                       /* unaligned-only */
+    NULL,                       /* CG-names */
+    NULL,                       /* cursor cache */
+    NULL,                       /* min_mapq */
+    NULL,                       /* no mate-cache */
+    NULL,                       /* detect rna-splicing in sequence */
+    NULL,                       /* level of rna-splicing detection */
+    NULL,                       /* file to log rna-splice-events into */
+    NULL,                       /* no-mt */
+    NULL,                       /* with-md-flag */	
+    NULL,                       /* dump_mode */
+    NULL,                       /* cigar test */
+    NULL,                       /* force legacy code path */
+    NULL,                       /* force new code path */
+    NULL                        /* optional timing */
+};
+
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+    return KOutMsg( "Usage:\n"
+        "\t%s [options] path-to-run[ path-to-run ...]\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args )
+{
+    char const *progname = UsageDefaultName;
+    char const *fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i, n;
+
+    rc = ArgsProgram( args, &fullpath, &progname );
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+
+    n = sizeof( SamDumpArgs ) / sizeof( SamDumpArgs[ 0 ] );
+    n--; /* do not print the last option in the SamDumpArgs as help */
+    for( i = 0; i < n; i++ )
+    {
+        if ( SamDumpArgs[ i ].help != NULL )
+        {
+            HelpOptionLine( SamDumpArgs[ i ].aliases, SamDumpArgs[ i ].name,
+                            sd_usage_params[ i ], SamDumpArgs[ i ].help );
+        }
+    }
+    KOutMsg( "\n" );
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static uint32_t tabsel_2_ReferenceList_Options( const samdump_opts * opts )
+{
+    uint32_t res = 0;
+    if ( opts->dump_primary_alignments )
+        res |= ereferencelist_usePrimaryIds;
+    if ( opts->dump_secondary_alignments )
+        res |= ereferencelist_useSecondaryIds;
+    if ( opts->dump_cg_evidence | opts->dump_cg_ev_dnb | opts->dump_cg_sam )
+        res |= ereferencelist_useEvidenceIds;
+    return res;
+}
+
+
+static rc_t print_samdump( const samdump_opts * const opts )
+{
+    KDirectory *dir;
+
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create native directory" );
+    }
+    else
+    {
+        const VDBManager *mgr;
+        rc = VDBManagerMakeRead( &mgr, dir );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot create vdb-manager" );
+        }
+        else
+        {
+            input_files * ifs; /* input_files.h */
+            uint32_t reflist_opt = tabsel_2_ReferenceList_Options( opts );
+
+            ReportSetVDBManager( mgr ); /**/
+
+            if ( opts->no_mt )
+            {
+                rc = VDBManagerDisablePagemapThread ( mgr );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogInt, rc, "VDBManagerDisablePagemapThread() failed" );
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                rc = discover_input_files( &ifs, mgr, opts->input_files, reflist_opt ); /* inputfiles.c */
+                if ( rc == 0 )
+                {
+                    if ( ifs->database_count == 0 && ifs->table_count == 0 )
+                    {
+                        rc = RC( rcExe, rcFile, rcReading, rcItem, rcNotFound );
+                        (void)LOGERR( klogErr, rc, "input object(s) not found" );
+                    }
+                    else
+                    {
+                        matecache * mc = NULL;
+
+                        if ( opts->use_mate_cache )
+                            rc = make_matecache( &mc, ifs->database_count );
+
+                        if ( rc == 0 )
+                        {
+                            /* print output of header */
+                            if ( ( opts->output_format == of_sam )  &&
+                                 ( ifs->database_count > 0 )        &&
+                                 ( opts->header_mode != hm_none )   &&
+                                 !opts->dump_unaligned_only ) 
+                            /* ------------------------------------------------------ */
+                                rc = print_headers_1( opts, ifs ); /* sam-hdr.c */
+                            /* ------------------------------------------------------ */
+
+
+                            /* print output of aligned reads */
+                            if ( rc == 0 && 
+                                 ifs->database_count > 0 && 
+                                 !opts->dump_unaligned_only )
+                            /* ------------------------------------------------------ */
+                                rc = print_aligned_spots( opts, ifs, mc ); /* sam-aligned.c */
+                            /* ------------------------------------------------------ */
+
+
+                            /* print output of unaligned reads */
+                            if ( rc == 0 )
+                            {
+                                /* ------------------------------------------------------ */
+                                rc = print_unaligned_spots( opts, ifs, mc ); /* sam-unaligned.c */
+                                /* ------------------------------------------------------ */
+                            }
+
+                            if ( opts->use_mate_cache )
+                            {
+                                if ( opts->report_cache )
+                                    rc = matecache_report( mc ); /* matecache.c */
+                                release_matecache( mc ); /* matecache.c */
+                            }
+                        }
+                    }
+                    release_input_files( ifs ); /* inputfiles.c */
+                }
+            }
+            VDBManagerRelease( mgr );
+        }
+        KDirectoryRelease( dir );
+    }
+    return rc;
+}
+
+
+static rc_t perform_cigar_test( const samdump_opts * const opts )
+{
+    rc_t rc;
+    cg_cigar_input input;
+    cg_cigar_output output;
+
+    memset( &input, 0, sizeof input );
+    memset( &output, 0, sizeof output );
+
+    input.p_cigar.len = string_size( opts->cigar_test );
+    input.p_cigar.ptr = opts->cigar_test;
+
+    rc = make_cg_cigar( &input, &output );
+    if ( rc == 0 )
+    {
+        KOutMsg( "%s\n", output.cigar );
+    }
+    else
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error testing cg-cigar treatment '$(t)'", 
+                                  "t=%s", opts->cigar_test ) );
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+static rc_t samdump_main( Args * args, const samdump_opts * const opts )
+{
+    rc_t rc = 0;
+    out_redir redir; /* from out_redir.h */
+    enum out_redir_mode mode;
+
+    switch( opts->output_compression )
+    {
+        case oc_none  : mode = orm_uncompressed; break;
+        case oc_gzip  : mode = orm_gzip; break;
+        case oc_bzip2 : mode = orm_bzip2; break;
+    }
+
+    rc = init_out_redir( &redir, mode, opts->outputfile, opts->output_buffer_size ); /* from out_redir.c */
+    if ( rc == 0 )
+    {
+        if ( opts->report_options )
+        {
+            report_options( opts ); /* from sam-dump-opts.c */
+        }
+        else if ( opts->cigar_test != NULL )
+        {
+            rc = perform_cigar_test( opts );
+        }
+        else
+        {
+            if ( opts->input_file_count < 1 )
+            {
+                rc = RC( rcExe, rcArgv, rcParsing, rcParam, rcInvalid );
+                (void)LOGERR( klogErr, rc, "no inputfiles given at commandline" );
+                Usage( args );
+            }
+            else
+            {
+            /* ------------------------------------------------------ */
+                rc = print_samdump( opts );
+            /* ------------------------------------------------------ */
+            }
+        }
+        release_out_redir( &redir ); /* from out_redir.c */
+    }
+    return rc;
+}
+
+
+/* forward declaration, code is in sam-dump.c */
+rc_t CC Legacy_KMain( int argc, char* argv[] );
+
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    bool call_legacy_dumper = false;
+
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    }
+    else
+    {
+        Args * args;
+
+        KLogHandlerSetStdErr();
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1, 
+                                SamDumpArgs, sizeof SamDumpArgs / sizeof SamDumpArgs [ 0 ] );
+        if ( rc == 0 )
+        {
+            samdump_opts opts; /* from sam-dump-opts.h */
+
+            memset( &opts, 0, sizeof opts );
+            rc = gather_options( args, &opts ); /* from sam-dump-opts.c */
+            if ( rc == 0 )
+            {
+                call_legacy_dumper = opts.force_legacy;
+                if ( !call_legacy_dumper )
+                {
+                    ReportBuildDate( __DATE__ );
+                    rc = samdump_main( args, &opts );
+                }
+                /* because the options have sub-structures, like tree/vector's */
+                release_options( &opts ); /* from sam-dump-opts.c */
+            }
+            ArgsWhack( args );
+        }
+    }
+
+    /* trick to call the legacy sam-dump code if cg-functionality is requested */
+    if ( call_legacy_dumper )
+    {
+        rc = Legacy_KMain( argc, argv );
+    }
+    else
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.c b/tools/sra-pileup/sam-hdr.c
new file mode 100644
index 0000000..1e5ca02
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.c
@@ -0,0 +1,728 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/time.h>
+#include <kfs/file.h>
+#include <kfs/filetools.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <align/reference.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+static rc_t print_headers_from_metadata( const VDatabase * db, bool * recalc, const char * path )
+{
+    const KMetadata * meta;
+    rc_t rc = VDatabaseOpenMetadataRead( db, &meta );
+    if ( rc != 0 )
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", path ) );
+    else
+    {
+        const KMDataNode * node;
+        rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                *recalc = true;
+                rc = 0;
+            }
+            else
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'BAM_HEADER' from '$(t)'", "t=%s", path ) );
+        }
+        else
+        {
+            size_t offset = 0, num_read, remaining = ~0;
+            char buffer[ 40960 ];
+            while ( rc == 0 && remaining > 0 )
+            {
+                rc = KMDataNodeRead( node, offset, buffer, sizeof( buffer ),
+                                     &num_read, &remaining );
+                if ( rc == 0 )
+                {
+                    rc = KOutMsg( "%.*s", ( uint32_t )num_read, buffer );
+                    offset += num_read;
+                }
+            }
+            if ( rc == 0 && buffer[ num_read - 1 ] != '\n' )
+            {
+                rc = KOutMsg( "\n" );
+            }
+            KMDataNodeRelease( node );
+        }
+        KMetadataRelease( meta );
+    }
+    return rc;
+}
+
+
+typedef struct seq_id_node
+{
+    BSTNode node;
+    char * seq_id;
+    char * name;
+    INSDC_coord_len seq_len;
+} seq_id_node;
+
+
+static int cmp_pchar_0( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+static seq_id_node * make_seq_id_node( const char * seq_id, const char * name, INSDC_coord_len seq_len )
+{
+    seq_id_node *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup( name, string_size( name ) );
+        res->seq_id = string_dup( seq_id, string_size( seq_id ) );
+        res->seq_len = seq_len;
+    }
+    return res;
+}
+
+
+static void free_seq_id_node( seq_id_node * node )
+{
+    if ( node != NULL )
+    {
+        if ( node->seq_id != NULL )
+            free( node->seq_id );
+        if ( node->name != NULL )
+            free( node->name );
+        free( node );
+    }
+}
+
+
+static void CC free_seq_id_tree_callback( BSTNode *n, void * data )
+{
+    free_seq_id_node( ( seq_id_node * )n );
+}
+
+
+static void free_seq_id_tree( BSTree * tree )
+{
+    BSTreeWhack( tree, free_seq_id_tree_callback, NULL );
+}
+
+
+static int64_t CC seq_id_node_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const seq_id_node * node = ( const seq_id_node * )n;
+    return cmp_pchar_0( (const char *)item, node->seq_id );
+}
+
+
+static seq_id_node * find_seq_id_node( BSTree * tree, const char * key )
+{
+    return ( seq_id_node * ) BSTreeFind( tree, key, seq_id_node_vs_pchar_wrapper );
+}
+
+
+static int64_t CC node_vs_node_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const seq_id_node * a = ( const seq_id_node * )item;
+   const seq_id_node * b = ( const seq_id_node * )n;
+   return cmp_pchar_0( a->seq_id, b->seq_id );
+}
+
+
+static rc_t add_seq_id_node( BSTree * tree, const char * seq_id, const char * name, INSDC_coord_len len )
+{
+    rc_t rc = 0;
+    seq_id_node * node = make_seq_id_node( seq_id, name, len );
+    if ( node != NULL )
+    {
+        rc = BSTreeInsert( tree, (BSTNode *)node, node_vs_node_wrapper );
+        if ( rc != 0 )
+            free_seq_id_node( node );
+    }
+    else
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    return rc;
+}
+
+
+static rc_t build_seq_id_tree( BSTree * tree, input_files * ifs )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+    {
+        input_database * id = VectorGet( &ifs->dbs, i );
+        if ( id != NULL )
+        {
+            uint32_t rcount;
+            rc = ReferenceList_Count( id->reflist, &rcount );
+            if ( rc == 0 && rcount > 0 )
+            {
+                uint32_t r_idx;
+                for ( r_idx = 0; r_idx < rcount && rc == 0; ++r_idx )
+                {
+                    const ReferenceObj * ref_obj;
+                    rc = ReferenceList_Get( id->reflist, &ref_obj, r_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        const char * seqid;
+                        rc = ReferenceObj_SeqId( ref_obj, &seqid );
+                        if ( rc == 0 )
+                        {
+                            const char * name;
+                            rc = ReferenceObj_Name( ref_obj, &name );
+                            if ( rc == 0 )
+                            {
+                                INSDC_coord_len seq_len;
+                                rc = ReferenceObj_SeqLength( ref_obj, &seq_len );
+                                if ( rc == 0 )
+                                {
+                                    seq_id_node * node = find_seq_id_node( tree, seqid );
+                                    if ( node != NULL )
+                                    {
+                                        if ( node->seq_len != seq_len )
+                                            rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+                                    }
+                                    else
+                                        rc = add_seq_id_node( tree, seqid, name, seq_len );
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct hdr_print_ctx
+{
+    rc_t rc;
+    bool use_seq_id;
+} hdr_print_ctx;
+
+
+static void CC print_header_callback( BSTNode *n, void *data )
+{
+    seq_id_node * node = ( seq_id_node * )n;
+    hdr_print_ctx * hctx = ( hdr_print_ctx * )data;
+    if ( hctx->rc == 0 )
+    {
+        if ( hctx->use_seq_id )
+            hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->seq_id, node->seq_len );
+        else
+        {
+            if ( cmp_pchar_0( node->seq_id, node->name ) == 0 )
+                hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->name, node->seq_len );
+            else
+                hctx->rc = KOutMsg( "@SQ\tSN:%s\tAS:%s\tLN:%u\n", node->name, node->seq_id, node->seq_len );
+        }
+    }
+}
+
+
+static rc_t extract_spotgroups_from_stats( VNamelist * spotgroups, input_database * id, const KMetadata * meta )
+{
+    const KMDataNode * node;
+    rc_t rc = KMetadataOpenNodeRead( meta, &node, "STATS/SPOT_GROUP" );
+    if ( rc != 0 )
+       (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'STATS/SPOT_GROUP' from '$(t)'", "t=%s", id->path ) );
+    else
+    {
+        KNamelist * node_childs;
+        rc = KMDataNodeListChildren( node, &node_childs );
+        if ( rc != 0 )
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot list children of SPOT_GROUP-node in '$(t)'", "t=%s", id->path ) );
+        else
+        {
+            uint32_t n_count;
+            rc = KNamelistCount( node_childs, &n_count );
+            if ( rc == 0 && n_count > 0 )
+            {
+                uint32_t n_idx;
+                for ( n_idx = 0; n_idx < n_count && rc == 0; ++n_idx )
+                {
+                    const char * spotgroup;
+                    rc = KNamelistGet( node_childs, n_idx, &spotgroup );
+                    if ( rc == 0 && spotgroup != NULL )
+                    {
+                        uint32_t found;
+                        rc_t rc1 = VNamelistIndexOf( spotgroups, spotgroup, &found );
+                        if ( GetRCState( rc1 ) == rcNotFound )
+                            rc = VNamelistAppend( spotgroups, spotgroup );
+                    }
+                }
+            }
+            KNamelistRelease( node_childs );
+        }
+        KMDataNodeRelease( node );
+    }
+    return rc;
+}
+
+
+#define STATE_ALPHA 0
+#define STATE_LF 1
+#define STATE_NL 2
+
+typedef struct buffer_range
+{
+    const char * start;
+    uint32_t processed, count, state;
+} buffer_range;
+
+
+static const char empty_str[ 2 ] = { ' ', 0 };
+
+
+static rc_t LoadFromBuffer( buffer_range * range,
+                            rc_t ( CC * wr ) ( void * dst, const String * S ), 
+                            void * dst )
+{
+    rc_t rc = 0;
+    uint32_t idx;
+    const char * p = range->start;
+    String S, S_empty;
+
+    S.addr = p;
+    S.len = S.size = range->processed;
+    S_empty.addr = empty_str;
+    S_empty.len = S_empty.size = 1;
+    for ( idx = range->processed; idx < range->count && rc == 0; ++idx )
+    {
+        switch( p[ idx ] )
+        {
+            case 0x0A : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> LF */
+                                                rc = wr ( dst, &S );
+                                                range->state = STATE_LF;
+                                                break;
+
+                            case STATE_LF : /* LF --> LF */
+                                             rc = wr ( dst, &S_empty );
+                                             break;
+
+                            case STATE_NL : /* NL --> LF */
+                                             rc = wr ( dst, &S_empty );
+                                             range->state = STATE_LF;
+                                             break;
+                        }
+                        break;
+
+            case 0x0D : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> NL */
+                                                rc = wr( dst, &S_empty );
+                                                range->state = STATE_NL;
+                                                break;
+
+                            case STATE_LF : /* LF --> NL */
+                                             range->state = STATE_NL;
+                                             break;
+
+                            case STATE_NL : /* NL --> NL */
+                                             rc = wr ( dst, &S_empty );
+                                             break;
+                        }
+                        break;
+
+            default   : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> ALPHA */
+                                                S.len++; S.size++;
+                                                break;
+
+                            case STATE_LF : /* LF --> ALPHA */
+                                             S.addr = &p[ idx ]; S.len = S.size = 1;
+                                             range->state = STATE_ALPHA;
+                                             break;
+
+                            case STATE_NL : /* NL --> ALPHA */
+                                             S.addr = &p[ idx ]; S.len = S.size = 1;
+                                             range->state = STATE_ALPHA;
+                                             break;
+                        }
+                        break;
+        }
+    }
+    if ( range->state == STATE_ALPHA )
+    {
+        range->start = S.addr;
+        range->count = S.len;
+    }
+    else
+        range->count = 0;
+    return rc;
+}
+
+
+static rc_t read_2_namelist( VNamelist * namelist, char * buffer, size_t bsize,
+                             rc_t ( CC * rd ) ( const void * src, uint64_t pos, void * buffer, size_t bsize, size_t * num_read ),
+                             rc_t ( CC * wr ) ( void * dst, const String * S ),
+                             const void * src, void * dst )
+{
+    rc_t rc = 0;
+    uint64_t pos = 0;
+    buffer_range range;
+    bool done = false;
+
+    range.start = buffer;
+    range.count = 0;
+    range.processed = 0;
+    range.state = STATE_ALPHA;
+
+    do
+    {
+        size_t num_read;
+        rc = rd ( src, pos, ( char * )( range.start + range.processed ),
+                            bsize - range.processed, &num_read );
+        if ( rc == 0 )
+        {
+            done = ( num_read == 0 );
+            if ( !done )
+            {
+                range.start = buffer;
+                range.count = range.processed + num_read;
+
+                LoadFromBuffer( &range, wr, dst );
+                if ( range.count > 0 )
+                {
+                    memmove ( buffer, range.start, range.count );
+                }
+                range.start = buffer;
+                range.processed = range.count;
+
+                pos += num_read;
+            }
+            else if ( range.state == STATE_ALPHA )
+            {
+                String S;
+                S.addr = range.start;
+                S.len = S.size = range.count;
+                rc = wr ( dst, &S );
+            }
+        }
+    } while ( rc == 0 && !done );
+
+    return rc;
+}
+
+
+static rc_t CC write_to_namelist( void * dst, const String * S )
+{
+    rc_t rc = 0;
+    VNamelist * namelist = dst;
+    if ( S->len > 3 && S->addr[ 0 ] == '@' && S->addr[ 1 ] == 'R' && S->addr[ 2 ] == 'G' )
+        rc = VNamelistAppendString ( namelist, S );
+    return rc;
+}
+
+static rc_t CC read_from_metadata_node( const void * src, uint64_t pos, void * buffer, size_t bsize, size_t * num_read )
+{
+    const KMDataNode * node = src;
+    size_t remaining;
+    return KMDataNodeRead( node, pos, buffer, bsize, num_read, &remaining );
+}
+
+
+static rc_t extract_spotgroups_from_bam_hdr( VNamelist * spotgroups, input_database * id, const KMetadata * meta )
+{
+    const KMDataNode * node;
+    rc_t rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+    /* do not report if the node cannot be found, because this would produce an error message when a database does
+       not have this node, which can is OK */
+    if ( rc == 0 )
+    {
+        char buffer[ 4096 ];
+        rc = read_2_namelist( spotgroups, buffer, sizeof buffer, 
+                              read_from_metadata_node, write_to_namelist,
+                              node, spotgroups );
+        KMDataNodeRelease( node );
+    }
+    return rc;
+}
+
+
+static rc_t extract_spotgroups( VNamelist * spotgroups, input_files * ifs, bool from_stats )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+    {
+        input_database * id = VectorGet( &ifs->dbs, i );
+        if ( id != NULL )
+        {
+            if ( from_stats )
+            {
+                const VTable * tab;
+                rc = VDatabaseOpenTableRead( id->db, &tab, "SEQUENCE" );
+                if ( rc != 0 )
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE in '$(t)'", "t=%s", id->path ) );
+                else
+                {
+                    const KMetadata * meta;
+                    rc = VTableOpenMetadataRead( tab, &meta );
+                    if ( rc != 0 )
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", id->path ) );
+                    else
+                    {
+                        if ( from_stats )
+                            rc = extract_spotgroups_from_stats( spotgroups, id, meta );
+                        KMetadataRelease( meta );
+                    }
+                    VTableRelease( tab );
+                }
+            }
+            else
+            {
+                const KMetadata * meta;
+                rc = VDatabaseOpenMetadataRead( id->db, &meta );
+                /* do not report if metadata cannot be found, because this would produce an error message when a database has
+                   no metadata at all */
+                if ( rc == 0 )
+                {
+                    rc = extract_spotgroups_from_bam_hdr( spotgroups, id, meta );
+                    KMetadataRelease( meta );
+                }
+
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_spotgroups( VNamelist * spotgroups, bool from_stats )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( spotgroups, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = VNameListGet( spotgroups, i, &s );
+            if ( rc == 0 && s != NULL )
+            {
+                if ( from_stats )
+                {
+                    if ( cmp_pchar( s, "default" ) != 0 )
+                        rc = KOutMsg( "@RG\tID:%s\n", s );
+                }
+                else
+                {
+                    rc = KOutMsg( "%s\n", s );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_headers_by_recalculating( const samdump_opts * opts, input_files * ifs )
+{
+    rc_t rc = KOutMsg( "@HD\tVN:1.3\n" );
+    if ( rc == 0 )
+    {
+        BSTree tree;
+
+        /* collect sequenc-id's and names and their lengths, unique by sequence-id */
+        BSTreeInit( &tree );
+        rc = build_seq_id_tree( &tree, ifs );
+        if ( rc == 0 )
+        {
+            hdr_print_ctx hctx;
+            hctx.rc = 0;
+            hctx.use_seq_id = opts->use_seqid_as_refname;
+            /* ptrint it */
+            BSTreeForEach( &tree, false, print_header_callback, &hctx );
+            rc = hctx.rc;
+        }
+        free_seq_id_tree( &tree );
+
+        /* collect spot-groups ( unique ) */
+        if ( rc == 0 )
+        {
+            VNamelist * spotgroups;
+            rc = VNamelistMake( &spotgroups, 10 );
+            if ( rc == 0 )
+            {
+                bool from_stats = false;
+                rc = extract_spotgroups( spotgroups, ifs, from_stats );
+                if ( rc == 0 )
+                    rc = print_spotgroups( spotgroups, from_stats );
+                else
+                    rc = 0; /* otherwise the tool would be not able to handle something that has no headers */
+                VNamelistRelease( spotgroups );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_headers_from_file( const samdump_opts * opts )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir ( &dir );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cant created native directory for file '$(t)'", "t=%s", opts->header_file ) );
+    }
+    else
+    {
+        const struct KFile * f;
+        rc = KDirectoryOpenFileRead ( dir, &f, "%s", opts->header_file );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cant open file '$(t)'", "t=%s", opts->header_file ) );
+        }
+        else
+        {
+            VNamelist * headers;
+            rc = VNamelistMake ( &headers, 25 );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cant create container for file '$(t)'", "t=%s", opts->header_file ) );
+            }
+            else
+            {
+                rc = LoadKFileToNameList( f, headers );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cant load file '$(t)' into container", "t=%s", opts->header_file ) );
+                }
+                else
+                {
+                    uint32_t count;
+                    rc = VNameListCount ( headers, &count );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "cant get count for container of '$(t)'", "t=%s", opts->header_file ) );
+                    }
+                    else
+                    {
+                        uint32_t i;
+                        for ( i = 0; i < count && rc == 0; ++i )
+                        {
+                            const char * line;
+                            rc = VNameListGet ( headers, i, &line );
+                            if ( rc != 0 )
+                            {
+                                (void)PLOGERR( klogErr, ( klogErr, rc, "cant get line #$(t) from container", "t=%u", i ) );
+                            }
+                            else
+                            {
+                                rc = KOutMsg( "%s\n", line );
+                            }
+                        }
+                    }
+                }
+                VNamelistRelease ( headers );
+            }
+            KFileRelease ( f );
+        }
+        KDirectoryRelease ( dir );
+    }
+    return rc;
+}
+
+
+static rc_t print_org_headers( const samdump_opts * opts, input_files * ifs )
+{
+    rc_t rc = 0;
+    bool recalc = ( ifs->database_count > 1 );
+    if ( !recalc )
+    {
+        input_database * id = VectorGet( &ifs->dbs, 0 );
+        rc = print_headers_from_metadata( id->db, &recalc, id->path );
+    }
+    if ( rc == 0 && recalc )
+        rc = print_headers_by_recalculating( opts, ifs );
+    return rc;
+}
+
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs )
+{
+    rc_t rc = 0;
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_start_section( opts->perf_log, "headers" );
+#endif
+
+    switch( opts->header_mode )
+    {
+        case hm_dump    :  rc = print_org_headers( opts, ifs ); break;
+
+        case hm_recalc  :   rc = print_headers_by_recalculating( opts, ifs ); break;
+
+        case hm_file    :   rc = print_headers_from_file( opts ); break;
+
+        case hm_none    :   break; /* to not let the compiler complain about not handled enum */
+    }
+
+    /* attach header comments from the commandline */
+    if ( rc == 0 && opts->hdr_comments != NULL )
+    {
+        uint32_t count;
+        rc = VNameListCount( opts->hdr_comments, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->hdr_comments, i, &s );
+                if ( rc == 0 && s != NULL )
+                    rc = KOutMsg( "@CO\t%s\n", s );
+            }
+        }
+    }
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_end_section( opts->perf_log );
+#endif
+
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.h b/tools/sra-pileup/sam-hdr.h
new file mode 100644
index 0000000..7b373c4
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_headers_
+#define _h_sam_headers_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs );
+
+#endif
diff --git a/tools/sra-pileup/sam-hdr1.c b/tools/sra-pileup/sam-hdr1.c
new file mode 100644
index 0000000..ad3e6ce
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr1.c
@@ -0,0 +1,894 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/filetools.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <sysalloc.h>
+
+#include "sam-hdr1.h"
+
+
+typedef struct headers
+{
+    VNamelist * SQ_Lines_1;
+    VNamelist * SQ_Lines_2;
+    VNamelist * SQ_Lines_3;
+    
+    VNamelist * RG_Lines_1;
+    VNamelist * RG_Lines_2;
+    VNamelist * RG_Lines_3;
+    
+    VNamelist * Other_Lines;
+    VNamelist * HD_Lines;
+} headers;
+
+
+static void release_lines( VNamelist ** lines )
+{
+    if ( *lines != NULL )
+    {
+        VNamelistRelease ( *lines );
+        lines = NULL;
+    }
+}
+
+
+static void release_headers( headers * h )
+{
+    release_lines( &h->HD_Lines );
+    release_lines( &h->Other_Lines );
+    
+    release_lines( &h->RG_Lines_1 );
+    release_lines( &h->RG_Lines_2 );    
+    release_lines( &h->RG_Lines_3 );
+    
+    release_lines( &h->SQ_Lines_1 );
+    release_lines( &h->SQ_Lines_2 );
+    release_lines( &h->SQ_Lines_3 );
+}
+
+
+static rc_t init_headers( headers * h, uint32_t blocksize )
+{
+    rc_t rc;
+    
+    h->SQ_Lines_1 = NULL;
+    h->SQ_Lines_2 = NULL;
+    h->SQ_Lines_3 = NULL;
+    
+    h->RG_Lines_1 = NULL;
+    h->RG_Lines_2 = NULL;
+    h->RG_Lines_3 = NULL;
+    
+    h->Other_Lines = NULL;
+    h->HD_Lines = NULL;
+    
+    rc = VNamelistMake( &h->SQ_Lines_1, blocksize );
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->SQ_Lines_2, blocksize );
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->SQ_Lines_3, blocksize );
+
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->RG_Lines_1, blocksize );
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->RG_Lines_2, blocksize );
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->RG_Lines_3, blocksize );
+
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->Other_Lines, blocksize );
+    if ( rc == 0 )
+        rc = VNamelistMake( &h->HD_Lines, blocksize );
+
+    if ( rc != 0 )
+        release_headers( h );
+        
+    return rc;
+}
+
+
+static void process_line( headers * h, int hdr_idx, const char * line, size_t len )
+{
+    if ( len > 3 && line[ 0 ] == '@' )
+    {
+        if ( line[ 1 ] == 'S' && line[ 2 ] == 'Q' )
+        {
+            switch( hdr_idx )
+            {
+                case 1 : VNamelistAppend( h->SQ_Lines_1, line ); break;
+                case 2 : VNamelistAppend( h->SQ_Lines_2, line ); break;
+                case 3 : VNamelistAppend( h->SQ_Lines_3, line ); break;
+            }
+        }
+        else if ( line[ 1 ] == 'R' && line[ 2 ] == 'G' )
+        {
+            switch( hdr_idx )
+            {
+                case 1 : VNamelistAppend( h->RG_Lines_1, line ); break;
+                case 2 : VNamelistAppend( h->RG_Lines_2, line ); break;
+                case 3 : VNamelistAppend( h->RG_Lines_3, line ); break;
+            }
+        }
+        else if ( line[ 1 ] == 'H' && line[ 2 ] == 'D' )
+            VNamelistAppend( h->HD_Lines, line );
+        else
+            VNamelistAppend( h->Other_Lines, line );
+    }
+}
+
+
+static rc_t process_lines( headers * h, int hdr_idx, VNamelist * content, const char * identifier )
+{
+    uint32_t i, count;
+    rc_t rc = VNameListCount( content, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cant get count for content of '$(t)'", "t=%s", identifier ) );
+    }
+    else
+    {
+        const char * line = NULL;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            rc = VNameListGet( content, i, &line );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cant get line #$(t) from content", "t=%u", i ) );
+            }
+            else
+                process_line( h, hdr_idx, line, string_measure( line, NULL ) );
+        }
+    }
+    return rc;
+}
+
+
+#define STATE_ALPHA 0
+#define STATE_LF 1
+#define STATE_NL 2
+
+typedef struct buffer_range
+{
+    const char * buffer;
+    size_t size, state;
+} buffer_range;
+
+
+static const char empty_str[ 2 ] = { ' ', 0 };
+
+
+static void LoadFromBuffer( VNamelist * nl, buffer_range * range )
+{
+    size_t idx;
+    const char * p = range->buffer;
+    String S;
+
+    S.addr = p;
+    S.len = S.size = 0;
+    for ( idx = 0; idx < range->size; ++idx )
+    {
+        switch( p[ idx ] )
+        {
+            case 0x0A : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> LF */
+                                                VNamelistAppendString ( nl, &S );
+                                                range->state = STATE_LF;
+                                                break;
+
+                            case STATE_LF : /* LF --> LF */
+                                             VNamelistAppend ( nl, empty_str );
+                                             break;
+
+                            case STATE_NL : /* NL --> LF */
+                                             VNamelistAppend ( nl, empty_str );
+                                             range->state = STATE_LF;
+                                             break;
+                        }
+                        break;
+
+            case 0x0D : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> NL */
+                                                VNamelistAppendString ( nl, &S );
+                                                range->state = STATE_NL;
+                                                break;
+
+                            case STATE_LF : /* LF --> NL */
+                                             range->state = STATE_NL;
+                                             break;
+
+                            case STATE_NL : /* NL --> NL */
+                                             VNamelistAppend ( nl, empty_str );
+                                             break;
+                        }
+                        break;
+
+            default   : switch( range->state )
+                        {
+                            case STATE_ALPHA : /* ALPHA --> ALPHA */
+                                                S.len++; S.size++;
+                                                break;
+
+                            case STATE_LF : /* LF --> ALPHA */
+                                             S.addr = &p[ idx ]; S.len = S.size = 1;
+                                             range->state = STATE_ALPHA;
+                                             break;
+
+                            case STATE_NL : /* NL --> ALPHA */
+                                             S.addr = &p[ idx ]; S.len = S.size = 1;
+                                             range->state = STATE_ALPHA;
+                                             break;
+                        }
+                        break;
+        }
+    }
+    if ( range->state == STATE_ALPHA && S.len > 0 )
+        VNamelistAppendString ( nl, &S );
+}
+
+
+static rc_t Load_Namelist_From_Node( VNamelist * dst, const KMDataNode * node )
+{
+    size_t num_read, remaining;
+    char b[ 10 ];
+    rc_t rc = KMDataNodeRead( node, 0, b, sizeof( b ), &num_read, &remaining );
+    if ( rc == 0 )
+    {
+        size_t bsize = num_read + remaining;
+        buffer_range range;
+        range.buffer = malloc( bsize );
+        if ( range.buffer != NULL )
+        {
+            rc = KMDataNodeRead( node, 0, ( void * )range.buffer, bsize, &range.size, &remaining );
+            if ( rc == 0 )
+            {
+                range.state = STATE_ALPHA;
+                LoadFromBuffer( dst, &range );
+            }
+            free( ( void * ) range.buffer );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_BAM_HEADER( headers * h, int hdr_idx, input_files * ifs )
+{
+    rc_t rc = 0;
+    if ( ifs->database_count > 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < ifs->database_count && rc == 0; ++idx )
+        {
+            input_database * id = VectorGet( &ifs->dbs, idx );
+            if ( id != NULL )
+            {
+                const KMetadata * meta;
+                rc = VDatabaseOpenMetadataRead( id->db, &meta );
+                if ( rc == 0 )
+                {
+                    const KMDataNode * node;
+                    rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+                    if ( rc == 0 )
+                    {
+                        VNamelist * content;
+                        rc = VNamelistMake ( &content, 25 );
+                        if ( rc != 0 )
+                        {
+                            (void)PLOGERR( klogErr, ( klogErr, rc, "cant create container for '$(t)'", "t=%s", id->path ) );
+                        }
+                        else
+                        {
+                            rc = Load_Namelist_From_Node( content, node );
+                            if ( rc == 0 )
+                                rc = process_lines( h, hdr_idx, content, id->path );
+                            VNamelistRelease( content );
+                        }
+                        KMDataNodeRelease( node );
+                    }
+                    else
+                        rc = 0;
+                    KMetadataRelease( meta );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_spotgroup_stats( headers * h, int hdr_idx, const KMDataNode * node, const KNamelist * spot_groups )
+{
+    uint32_t count;
+    rc_t rc = KNamelistCount( spot_groups, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * name = NULL; /* this is the name of the node !!!NOT!!! the name of the spotgroup! */
+            rc = KNamelistGet( spot_groups, i, &name );
+            if ( rc == 0 && name != NULL )
+            {
+                const KMDataNode * spot_count_node;
+                rc = KMDataNodeOpenNodeRead( node, &spot_count_node, "%s/SPOT_COUNT", name );
+                if ( rc == 0 )
+                {
+                    uint64_t spot_count = 0;
+                    rc = KMDataNodeReadAsU64( spot_count_node, &spot_count );
+                    if ( rc == 0 )
+                    {
+                        if ( spot_count > 0 )
+                        {
+                            const KMDataNode * spot_group_node;
+                            rc = KMDataNodeOpenNodeRead( node, &spot_group_node, name );            
+                            if ( rc == 0 )
+                            {
+                                char name_attr[ 2048 ];
+                                char buffer[ 2048 ];
+                                size_t num_writ;
+                                rc = KMDataNodeReadAttr( spot_group_node, "name", name_attr, sizeof name_attr, &num_writ );
+                                rc = string_printf( buffer, sizeof buffer, &num_writ,
+                                            "@RG\tID:%s", rc == 0 ? name_attr : name );
+                                if ( rc == 0 )
+                                    process_line( h, hdr_idx, buffer, num_writ );
+                                KMDataNodeRelease( spot_group_node );                
+                            }
+                        }
+                    }
+                    else
+                        rc = 0;
+                    KMDataNodeRelease( spot_count_node );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_stats( headers * h, int hdr_idx, input_files * ifs )
+{
+    rc_t rc = 0;
+    if ( ifs->database_count > 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < ifs->database_count && rc == 0; ++idx )
+        {
+            input_database * id = VectorGet( &ifs->dbs, idx );
+            if ( id != NULL )
+            {
+                const VTable * seq_table = NULL;
+                rc = VDatabaseOpenTableRead( id->db, &seq_table, "SEQUENCE" );
+                if ( rc == 0 )
+                {
+                    const KMetadata * meta;
+                    rc = VTableOpenMetadataRead( seq_table, &meta );
+                    if ( rc == 0 )
+                    {
+                        const KMDataNode * node;
+                        rc = KMetadataOpenNodeRead( meta, &node, "STATS/SPOT_GROUP" );
+                        if ( rc == 0 )
+                        {
+                            KNamelist * spot_groups;
+                            rc = KMDataNodeListChildren( node, &spot_groups );
+                            if ( rc == 0 )
+                            {
+                                rc = collect_from_spotgroup_stats( h, hdr_idx, node, spot_groups );
+                                KNamelistRelease( spot_groups );
+                            }
+                            KMDataNodeRelease( node );
+                        }
+                        KMetadataRelease( meta );
+                    }
+                    VTableRelease( seq_table );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_file( headers * h, int hdr_idx, const char * filename )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir ( &dir );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cant created native directory for file '$(t)'", "t=%s", filename ) );
+    }
+    else
+    {
+        const struct KFile * f;
+        rc = KDirectoryOpenFileRead ( dir, &f, "%s", filename );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cant open file '$(t)'", "t=%s", filename ) );
+        }
+        else
+        {
+            VNamelist * content;
+            rc = VNamelistMake ( &content, 25 );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cant create container for file '$(t)'", "t=%s", filename ) );
+            }
+            else
+            {
+                rc = LoadKFileToNameList( f, content );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cant load file '$(t)' into container", "t=%s", filename ) );
+                }
+                else
+                    rc = process_lines( h, hdr_idx, content, filename );
+                VNamelistRelease( content );
+            }
+            KFileRelease ( f );
+        }
+        KDirectoryRelease ( dir );
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_references( headers * h, int hdr_idx, input_files * ifs , bool use_seqid)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+    {
+        input_database * id = VectorGet( &ifs->dbs, i );
+        if ( id != NULL )
+        {
+            uint32_t rcount;
+            rc = ReferenceList_Count( id->reflist, &rcount );
+            if ( rc == 0 && rcount > 0 )
+            {
+                uint32_t r_idx;
+                for ( r_idx = 0; r_idx < rcount && rc == 0; ++r_idx )
+                {
+                    const ReferenceObj * ref_obj;
+                    rc = ReferenceList_Get( id->reflist, &ref_obj, r_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        const char * seqid;
+                        rc = ReferenceObj_SeqId( ref_obj, &seqid );
+                        if ( rc == 0 )
+                        {
+                            const char * name;
+                            rc = ReferenceObj_Name( ref_obj, &name );
+                            if ( rc == 0 )
+                            {
+                                INSDC_coord_len seq_len;
+                                rc = ReferenceObj_SeqLength( ref_obj, &seq_len );
+                                if ( rc == 0 )
+                                {
+                                    char buffer[ 2048 ];
+                                    size_t num_writ;
+                                    rc = string_printf( buffer, sizeof buffer, &num_writ, "@SQ\tSN:%s\tLN:%lu", use_seqid?seqid:name, seq_len );
+                                    if ( rc == 0 )
+                                        process_line( h, hdr_idx, buffer, num_writ );
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct hdr_tag
+{
+    String key, value;
+} hdr_tag;
+
+
+typedef struct hdr_line
+{
+    String line_key;
+    hdr_tag tags[ 32 ];
+    uint32_t n_tags;
+} hdr_line;
+
+
+static bool parse_hdr_line( hdr_line * hl, const char * line )
+{
+    size_t i, tl = 0, start = 3, len = string_size( line );
+    bool res = ( len > start && line[ 0 ] == '@' );
+    hl->n_tags = 0;
+    if ( res )
+    {
+        uint32_t colons = 0;
+        StringInit( &hl->line_key, &line[ 1 ], 2, 2 );
+        for( i = start; i < len; ++i )
+        {
+            switch ( line[ i ] )
+            {
+                case '\t' :        if ( tl > 0 )
+                                {
+                                    StringInit( &hl->tags[ hl->n_tags ].value, &line[ start ], tl, tl );
+                                    ( hl->n_tags )++;
+                                    tl = 0;
+                                }
+                                start = i + 1;
+                                colons = 0;
+                                break;
+
+                case ':'  :        if ( colons == 0 )
+                                {
+                                    if ( tl > 0 )
+                                    {
+                                        StringInit( &hl->tags[ hl->n_tags ].key, &line[ start ], tl, tl );
+                                        tl = 0;
+                                    }
+                                    start = i + 1;
+                                }
+                                else
+                                    tl++;
+                                colons++;
+                                break;
+                
+                default :         tl++;
+                                break;
+            }
+        }
+        if ( tl > 0 )
+        {
+            StringInit( &hl->tags[ hl->n_tags ].value, &line[ start ], tl, tl );
+            ( hl->n_tags )++;
+        }
+    }
+    else
+        StringInit( &hl->line_key, NULL, 0, 0 );
+    return res;
+}
+
+
+static rc_t print_hdr_line( char * buffer, size_t buflen, const hdr_line * hl )
+{
+    rc_t rc = 0;
+    buffer[ 0 ] = 0;
+    if ( hl->line_key.len > 0 )
+    {
+        size_t num_writ, total_writ = 0, i;
+        rc = string_printf( buffer, buflen, &num_writ, "@%S", &hl->line_key );
+        for ( i = 0; i < hl->n_tags && rc == 0; ++i )
+        {
+            total_writ += num_writ;
+            if ( buflen > total_writ )
+                rc = string_printf( &buffer[ total_writ ], buflen - total_writ, &num_writ,
+                                "\t%S:%S", &hl->tags[ i ].key, &hl->tags[ i ].value );
+        }
+    }
+    return rc;
+}
+
+static bool sam_hdr_id( const hdr_line * hl1, const hdr_line * hl2 )
+{
+    bool res = ( hl1 != NULL && hl2 != NULL );
+    if ( res )
+        res = ( ( hl1->n_tags > 0 ) && ( hl2->n_tags > 0 ) );
+    if ( res )
+        res = ( 0 == StringCompare( &hl1->tags[ 0 ].value, &hl2->tags[ 0 ].value ) );
+    return res;
+}
+
+static bool has_tag( const String * tag_id, hdr_line * dst )
+{
+    bool res = false;
+    uint32_t i;
+    for ( i = 0; i < dst->n_tags && !res; ++i )
+        res = ( 0 == StringCompare( tag_id, &dst->tags[ i ].key ) );
+    return res;
+}
+
+static void merge_tag( const hdr_tag * tag, hdr_line * dst )
+{
+    if ( !has_tag( &tag->key, dst ) )
+    {
+        dst->tags[ dst->n_tags ] = *tag;
+        ( dst->n_tags )++;
+    }
+}
+
+static void merge_hdr_line( const hdr_line * src, hdr_line * dst )
+{
+    if ( src != NULL && dst != NULL )
+    {
+        uint32_t i;
+        for ( i = 0; i < src->n_tags; ++i )
+            merge_tag( &src->tags[ i ], dst );
+    }
+}
+
+
+static rc_t for_each_line( const VNamelist * src,
+                           rc_t ( * f ) ( const char * line, void * context ),
+                           void * context )
+{
+    uint32_t idx, count;
+    rc_t rc = VNameListCount( src, &count );
+    for ( idx = 0; idx < count && rc == 0; ++idx )
+    {
+        const char * line = NULL;
+        rc = VNameListGet( src, idx, &line );
+        if ( rc == 0 )
+            rc = f( line, context );
+    }
+    return rc;
+}
+
+
+static rc_t merge_header_tags( const char * line, void * context )
+{
+    hdr_line * h_parent = context;
+    hdr_line h;
+    if ( parse_hdr_line( &h, line ) )
+    {
+        /* merge the tags! */
+        if ( sam_hdr_id( h_parent, &h ) )
+            merge_hdr_line( h_parent, &h );
+    }
+    return 0;
+}
+
+
+typedef struct merge_ctx
+{
+    VNamelist * dst;
+    const VNamelist * other;
+    bool unique;
+} merge_ctx;
+
+
+static rc_t merge_header_tags_callback( const char * line, void * context )
+{
+    rc_t rc = 0;
+    merge_ctx * mc = context;
+    hdr_line h;
+    if ( parse_hdr_line( &h, line ) )
+    {
+        rc = for_each_line( mc->other, merge_header_tags, &h );
+        if ( rc == 0 )
+        {
+            char buffer[ 2048 ];
+            rc = print_hdr_line( buffer, sizeof buffer, &h );
+            if ( rc == 0 && buffer[ 0 ] != 0 )
+            {
+                bool do_append = true;
+                if ( mc->unique )
+                {
+                    uint32_t found;
+                    rc_t rc1 = VNamelistIndexOf( mc->dst, buffer, &found );
+                    do_append = ( rc1 != 0 );
+                }
+                if ( do_append )
+                    rc = VNamelistAppend( mc->dst, buffer );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* SQ-lines have to be uniue by the SN-tag */
+/* RG-lines have to be uniue by the ID-tag */
+static rc_t merge_header_tags_of_2_lists( VNamelist ** lines_1, const VNamelist * lines_2, bool unique )
+{
+    rc_t rc;
+    merge_ctx mc;
+    memset( &mc, 0, sizeof mc );
+    mc.unique = unique;
+    rc = VNamelistMake( &mc.dst, 25 );
+    if ( rc == 0 )
+    {
+        mc.other = lines_2;
+        rc = for_each_line( *lines_1, merge_header_tags_callback, &mc );
+        if ( rc == 0 )
+        {
+            VNamelistRelease( *lines_1 );
+            *lines_1 = mc.dst;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t collect_from_bam_hdr( headers * dst, input_files * ifs, bool use_seqid )
+{
+    uint32_t count;
+    rc_t rc = collect_from_BAM_HEADER( dst, 1, ifs );
+    if ( rc == 0 )
+    {
+        rc = VNameListCount( dst->SQ_Lines_1, &count );
+        if ( rc == 0 && ( count == 0 || use_seqid ) )
+            rc = collect_from_references( dst, 2, ifs , use_seqid);    
+    }
+    if ( rc == 0 )
+    {
+        rc = VNameListCount( dst->RG_Lines_1, &count );
+        if ( rc == 0 && count == 0 )
+            rc = collect_from_stats( dst, 1, ifs );    
+    }
+    return rc;
+}
+
+
+static rc_t collect_by_recalc( headers * h, input_files * ifs, bool use_seqid )
+{
+    rc_t rc = collect_from_references( h, 1, ifs, use_seqid );
+    if ( rc == 0 )
+        rc = collect_from_stats( h, 1, ifs );
+    return rc;
+}
+
+
+static rc_t collect_from_src_and_files( headers * h, input_files * ifs, const char * filename, bool use_seqid )
+{
+    rc_t rc = collect_from_bam_hdr( h, ifs, use_seqid );
+    if ( rc == 0 && filename != NULL )
+        rc = collect_from_file( h, 3, filename );
+    return rc;
+}
+
+
+static rc_t print_HD_line( const VNamelist * lines )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( lines, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        const char * line = NULL;
+        rc = VNameListGet( lines, 0, &line );
+        if ( rc == 0 && line != NULL )
+            rc = KOutMsg( "%s\n", line );
+        else
+            rc = KOutMsg( "@HD\tVN:1.2\tSO:coordinate\n" );
+    }
+    else
+        rc = KOutMsg( "@HD\tVN:1.2\tSO:coordinate\n" );
+    return rc;
+}
+
+
+static rc_t print_callback( const char * line, void * context ) { return KOutMsg( "%s\n", line ); }
+
+
+static rc_t merge_and_print( VNamelist ** L1, const VNamelist * L2, bool print_L2_if_only_src )
+{
+    uint32_t count1, count2;
+    
+    rc_t rc = VNameListCount( *L1, &count1 );
+    if ( rc == 0 )
+        rc = VNameListCount( L2, &count2 );
+    if ( rc == 0 )
+    {
+        if ( count1 > 0 && count2 > 0 )
+        {
+            if ( rc == 0 )
+                rc = merge_header_tags_of_2_lists( L1, L2, true );
+            if ( rc == 0 )
+                rc = for_each_line( *L1, print_callback, NULL );
+        }
+        else if ( count1 > 0 )
+        {
+            rc = for_each_line( *L1, print_callback, NULL );
+        }
+        else if ( print_L2_if_only_src && ( count2 > 0 ) )
+        {
+            rc = for_each_line( L2, print_callback, NULL );
+        }
+    }
+    return rc;
+}
+
+
+rc_t print_headers_1( const samdump_opts * opts, input_files * ifs )
+{
+    headers h;
+    rc_t rc = init_headers( &h, 25 );
+    if ( rc == 0 )
+    {
+        /* collect ... */
+        
+        switch( opts->header_mode )
+        {
+            /* collect the headers that were written by the loader
+               with special case if the user requested the seq-id to be used
+               the bam-header-lines will be in list#1
+               the recalculated-lines ( if requested via --seqid ) will be in list #2
+            */
+            case hm_dump    :  rc = collect_from_bam_hdr( &h, ifs, opts->use_seqid_as_refname );
+
+                                if ( rc == 0 )
+                                    rc = print_HD_line( h.HD_Lines );
+
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.SQ_Lines_1, print_callback, NULL );
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.SQ_Lines_2, print_callback, NULL );
+
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.RG_Lines_1, print_callback, NULL );
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.RG_Lines_2, print_callback, NULL );
+
+                                break;
+
+            /* collect the headers by iterating over the REFERENCE-table
+               the recalculated-lines will be in list #1
+            */
+            case hm_recalc  :  rc = collect_by_recalc( &h, ifs, opts->use_seqid_as_refname );
+                                if ( rc == 0 )
+                                    rc = print_HD_line( h.HD_Lines );
+
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.SQ_Lines_1, print_callback, NULL );
+                                if ( rc == 0 )
+                                    rc = for_each_line( h.RG_Lines_1, print_callback, NULL );
+
+                                break;
+
+            /* collect the headers that were written by the loader ( list #1 )
+               with special case if the user requested the seqid to be used ( list #2 )
+               and merge header-fields with the ones from a user-supplied file ( list #3 )
+            */
+            case hm_file    :  rc = collect_from_src_and_files( &h, ifs, opts->header_file, opts->use_seqid_as_refname );
+                                if ( rc == 0 )
+                                    rc = print_HD_line( h.HD_Lines );
+                                if ( rc == 0 )
+                                    rc = merge_and_print( &h.SQ_Lines_1, h.SQ_Lines_3, true );
+                                if ( rc == 0 )
+                                    rc = merge_and_print( &h.RG_Lines_1, h.RG_Lines_3, true );
+                                if ( rc == 0 )
+                                    rc = merge_and_print( &h.SQ_Lines_2, h.SQ_Lines_3, false );
+                                if ( rc == 0 )
+                                    rc = merge_and_print( &h.RG_Lines_2, h.RG_Lines_3, false );
+                                    
+                                break;
+
+            case hm_none    :  break; /* to not let the compiler complain about not handled enum */
+        }
+
+        /* all other lines collected: ( not HD,SQ,RG ) */
+        if ( rc == 0 )
+            rc = for_each_line( h.Other_Lines, print_callback, NULL );
+
+        release_headers( &h );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr1.h b/tools/sra-pileup/sam-hdr1.h
new file mode 100644
index 0000000..4e7f645
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr1.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_headers_1_
+#define _h_sam_headers_1_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+rc_t print_headers_1( const samdump_opts * opts, input_files * ifs );
+
+#endif
diff --git a/tools/sra-pileup/sam-unaligned.c b/tools/sra-pileup/sam-unaligned.c
new file mode 100644
index 0000000..9d0d72a
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.c
@@ -0,0 +1,1565 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include "sam-unaligned.h"
+#include <kapp/main.h>
+#include <sysalloc.h>
+#include <ctype.h>
+
+#define COL_READ "(INSDC:dna:text)READ"
+#define COL_REF_NAME "(ascii)REF_NAME"
+#define COL_REF_SEQ_ID "(ascii)REF_SEQ_ID"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+
+typedef struct prim_table_ctx
+{
+    const VCursor * cursor;
+
+    uint32_t ref_name_idx;
+    uint32_t ref_seq_id_idx;
+    uint32_t ref_pos_idx;
+} prim_table_ctx;
+
+
+static rc_t prepare_prim_table_ctx( const samdump_opts * const opts,
+                                    const input_table * const itab,
+                                    prim_table_ctx * const ptx )
+{
+    rc_t rc;
+
+    if ( opts->cursor_cache_size == 0 )
+        rc = VTableCreateCursorRead( itab->tab, &ptx->cursor );
+    else
+        rc = VTableCreateCachedCursorRead( itab->tab, &ptx->cursor, opts->cursor_cache_size );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+    }
+    else
+    {
+        rc = add_column( ptx->cursor, COL_REF_NAME, &ptx->ref_name_idx );
+        if ( rc == 0 )
+            rc = add_column( ptx->cursor, COL_REF_SEQ_ID, &ptx->ref_seq_id_idx );
+        if ( rc == 0 )
+            rc = add_column( ptx->cursor, COL_REF_POS, &ptx->ref_pos_idx );
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen( ptx->cursor );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+#define COL_ALIGN_COUNT "(U8)ALIGNMENT_COUNT"
+#define COL_SPOT_ID "(INSDC:SRA:spotid_t)SPOT_ID"
+#define COL_PRIM_AL_ID "(I64)PRIMARY_ALIGNMENT_ID"
+#define COL_READ_TYPE "(INSDC:SRA:xread_type)READ_TYPE"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_READ_START "(INSDC:coord:zero)READ_START"
+/* #define COL_QUALITY "(INSDC:quality:text:phred_33)QUALITY" */
+#define COL_QUALITY "(INSDC:quality:phred)QUALITY"
+#define COL_SPOT_GROUP "(ascii)SPOT_GROUP"
+#define COL_NAME "(ascii)NAME"
+#define COL_LNK_GROUP "(ascii)LINKAGE_GROUP"
+
+typedef struct seq_table_ctx
+{
+    const VCursor * cursor;
+
+    uint32_t align_count_idx;
+    uint32_t prim_al_id_idx;
+    uint32_t read_type_idx;
+    uint32_t read_filter_idx;
+    uint32_t read_len_idx;
+    uint32_t read_start_idx;
+    uint32_t read_idx;
+    uint32_t quality_idx;
+    uint32_t spot_group_idx;
+    uint32_t name_idx;
+    uint32_t lnk_group_idx;
+} seq_table_ctx;
+
+
+static rc_t prepare_seq_table_ctx( const samdump_opts * const opts,
+                                   const input_table * const itab,
+                                   seq_table_ctx * const stx )
+{
+    struct KNamelist * available_columns;
+    rc_t rc = VTableListReadableColumns ( itab->tab, &available_columns );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, 
+            "VTableListReadableColumns( SEQUENCE ) for $(tn) failed", "tn=%s", itab->path ) );
+    }
+    else
+    {
+        if ( opts->cursor_cache_size == 0 )
+            rc = VTableCreateCursorRead( itab->tab, &stx->cursor );
+        else
+            rc = VTableCreateCachedCursorRead( itab->tab, &stx->cursor, opts->cursor_cache_size );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( SEQUENCE ) for $(tn) failed", "tn=%s", itab->path ) );
+        }
+        else
+        {
+            add_opt_column( stx->cursor, available_columns, COL_ALIGN_COUNT, &stx->align_count_idx ); /* read_fkt.c */
+            add_opt_column( stx->cursor, available_columns, COL_PRIM_AL_ID, &stx->prim_al_id_idx );
+            add_opt_column( stx->cursor, available_columns, COL_NAME, &stx->name_idx );
+            add_opt_column( stx->cursor, available_columns, COL_LNK_GROUP, &stx->lnk_group_idx );
+            
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_READ_TYPE, &stx->read_type_idx ); /* read_fkt.c */
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_READ_FILTER, &stx->read_filter_idx );
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_READ_LEN, &stx->read_len_idx );
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_READ_START, &stx->read_start_idx );
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_READ, &stx->read_idx );
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_QUALITY, &stx->quality_idx );
+            if ( rc == 0 )
+                rc = add_column( stx->cursor, COL_SPOT_GROUP, &stx->spot_group_idx );
+        }
+        KNamelistRelease( available_columns );
+    }
+    return rc;
+}
+
+
+typedef struct seq_row
+{
+    uint32_t nreads;
+
+    bool fully_unaligned;
+    bool partly_unaligned;
+    bool filtered_out;
+} seq_row;
+
+
+static rc_t complain_size_diff( int64_t row_id, const char * txt )
+{
+    rc_t rc = RC( rcExe, rcNoTarg, rcConstructing, rcSize, rcInvalid );
+    (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(tx)", "rn=%ld,tx=%s", row_id, txt ) );
+    return rc;
+}
+
+
+static rc_t read_seq_row( const samdump_opts * const opts,
+                          const seq_table_ctx * const stx,
+                          const int64_t row_id,
+                          seq_row * const row )
+{
+    rc_t rc = 0;
+
+    if ( stx->align_count_idx == INVALID_COLUMN )
+    {
+        const INSDC_read_type *ptr;
+
+        row->fully_unaligned = true;
+        row->partly_unaligned = false;
+        row->filtered_out = false;
+        rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, &ptr, &row->nreads, "READ_TYPE" );
+    }
+    else
+    {
+        const uint8_t * u8ptr;
+        uint32_t len;
+
+        /* ALIGNMENT_COUNT ... only to detect if reads are unaligned, could be done with PRIMARY_ALINGMENT too,
+           but this one is only 8 bit instead of 64 bit, that means faster */
+        rc = read_uint8_ptr( row_id, stx->cursor, stx->align_count_idx, &u8ptr, &len, "ALIGN_COUNT" );
+        if ( rc == 0 )
+        {
+            uint32_t i, n;
+
+            row->nreads = len;
+            for ( i = 0, n = 0; i < len; ++i )
+                if ( u8ptr[ i ] != 0 )
+                    n++;
+            row->fully_unaligned = ( n == 0 );
+            row->partly_unaligned = ( n < len && n > 0 );
+
+            if ( row->partly_unaligned )
+                row->filtered_out = !opts->print_half_unaligned_reads;
+            else if ( row->fully_unaligned )
+                row->filtered_out = !opts->print_fully_unaligned_reads;
+            else
+                row->filtered_out = true;
+        }
+    }
+    return rc;
+}
+
+
+/**********************************************************************************
+
+    0x001   template having multiple fragments in sequencing
+            (row->nreads > 1 )
+
+    0x002   each fragment properly aligned according to the aligner
+            ( never the case in an unaligned read )
+
+    0x004   fragment unmapped
+            ( always true in an unaligned read )
+
+    0x008   next fragment in the template unmapped
+            ( is the mate aligned? next: read_idx+1, if read_idx==row->nreads-1 then read_idx-1 )
+
+    0x010   SEQ being reverse complemented
+            ( column 'READ_TYPE' has bit READ_TYPE_REVERSE set )
+
+    0x020   SEQ of the next fragment in the template being reversed
+            ( is the mate reversed? )
+
+    0x040   the first fragment in the template
+            ( read_idx == 0 )
+
+    0x080   the last fragment in the template
+            ( read_idx == ( row->nreads - 1 ) )
+
+    0x100   secondary alignment
+            ( never the case in an unaligned read )
+
+    0x200   not passing quality controls
+            ( column 'READ_FILTER' has bit READ_FILTER_REJECT set )
+
+    0x400   PCR or optical duplicate
+            ( column 'READ_FILTER' has bit READ_FILTER_CRITERIA set )
+
+**********************************************************************************/
+static uint32_t calculate_unaligned_sam_flags_db( uint32_t nreads,
+                                                  uint32_t read_idx,
+                                                  uint32_t mate_idx,
+                                                  int64_t mate_id,
+                                                  const INSDC_read_type * read_type,
+                                                  bool reverse_flag,
+                                                  const INSDC_read_filter * read_filter )
+{
+    uint32_t res = 0x04;
+
+    if ( nreads > 1 )
+    {
+        res |= 0x01;
+        /* the following test only make sense if there is a mate */
+
+        if ( mate_id == 0 )
+            res |= 0x08;
+        if ( ( read_type[ mate_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE )
+            res |= 0x020;
+        if ( read_idx == 0 )
+            res |= 0x040;
+        if ( read_idx == ( nreads - 1 ) )
+            res |= 0x080;
+    }
+
+    if ( reverse_flag )
+        res |= 0x010;
+    if ( ( read_filter[ read_idx ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+        res |= 0x200;
+    if ( ( read_filter[ read_idx ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+        res |= 0x400;
+    return res;
+}
+
+
+const char * ref_name_star = "*";
+
+static rc_t get_mate_info( const prim_table_ctx * const ptx,
+                           const matecache * const mc,
+                           const input_database * const ids,
+                           const int64_t row_id,
+                           const int64_t mate_id,
+                           const uint32_t nreads,
+                           const char ** mate_ref_name,
+                           uint32_t * const mate_ref_name_len,
+                           INSDC_coord_zero * const mate_ref_pos )
+{
+    rc_t rc = 0;
+
+    *mate_ref_name = ref_name_star;
+    *mate_ref_name_len = 1;
+    *mate_ref_pos = 0;
+    if ( nreads < 2 )
+        return rc;
+
+    if ( mate_id != 0 )
+    {
+        uint32_t ref_idx;
+        int64_t seq_spot_id;
+        rc = matecache_lookup_unaligned( mc, ids->db_idx, mate_id, mate_ref_pos, &ref_idx, &seq_spot_id );
+        if ( rc == 0 )
+        {
+            const ReferenceObj* refobj;
+            *mate_ref_pos += 1;
+            /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+            rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+            }
+            else
+            {
+                rc = ReferenceObj_Name( refobj, mate_ref_name );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+                }
+                else
+                {
+                    *mate_ref_name_len = string_size( *mate_ref_name );
+                }
+            }
+        }
+        else if ( GetRCState( rc ) == rcNotFound )
+        {
+            /* we have a mate and it is aligned! ---> look it up in the PRIMARY_ALIGNMENT - table*/
+            const char * ptr;
+            uint32_t len;
+
+            rc = read_char_ptr( mate_id, ptx->cursor, ptx->ref_name_idx, &ptr, &len, "REF_NAME" );
+            if ( rc == 0 && len > 0 )
+            {
+                *mate_ref_name = ptr;
+                *mate_ref_name_len = len;
+            }
+
+            if ( rc == 0 )
+            {
+                INSDC_coord_zero pos;
+                rc = read_INSDC_coord_zero( mate_id, ptx->cursor, ptx->ref_pos_idx, &pos, 0, "REF_POS" );
+                if ( rc == 0 )
+                {
+                    *mate_ref_pos = ( pos + 1 );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_sliced_read( const INSDC_dna_text * read,
+                               uint32_t read_idx,
+                               bool reverse,
+                               const INSDC_coord_zero * read_start,
+                               const INSDC_coord_len * read_len )
+{
+    rc_t rc = 0;
+    const INSDC_dna_text * ptr = read + read_start[ read_idx ];
+    if ( !reverse )
+    {
+        rc = KOutMsg( "%.*s", read_len[ read_idx ], ptr );
+    }
+    else
+    {
+        const char cmp_tbl [] =
+        {
+            'T', 'V', 'G', 'H', 'E', 'F', 'C', 'D',
+            'I', 'J', 'M', 'L', 'K', 'N', 'O', 'P',
+            'Q', 'Y', 'S', 'A', 'U', 'B', 'W', 'X',
+            'R', 'Z'
+        };
+
+        int32_t i = ( read_len[ read_idx ] - 1 );
+        while( i >= 0 && rc == 0 )
+        {
+            int c = ptr [ i ];
+            if ( isalpha ( c ) )
+            {
+                if ( islower ( c )  )
+                     c = tolower ( cmp_tbl [ toupper ( c ) - 'A' ] );
+                else
+                     c = cmp_tbl [ c - 'A' ];
+            }
+
+            rc = KOutMsg( "%c", ( char ) c );
+            i--;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_sliced_quality( const samdump_opts * const opts,
+                                  const char * quality,
+                                  uint32_t read_idx,
+                                  bool reverse,
+                                  const INSDC_coord_zero * read_start,
+                                  const INSDC_coord_len * read_len )
+{
+    const char * ptr = quality + read_start[ read_idx ];
+    return dump_quality( opts, ptr, read_len[ read_idx ], reverse ); /* sam-dump-opts.c */
+}
+
+
+static rc_t dump_the_other_read( const seq_table_ctx * const stx,
+                                 const prim_table_ctx * const ptx,
+                                 const int64_t row_id,
+                                 const uint32_t mate_idx )
+{
+    uint32_t row_len;
+    const int64_t *prim_al_id_ptr;
+
+    /* read from the SEQUENCE-table the value of the colum "PRIMARY_ALIGNMENT_ID"[ mate_idx ] */
+    rc_t rc = read_int64_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_al_id_ptr, &row_len, "PRIM_AL_ID" );
+    if ( rc == 0 )
+    {
+        if ( row_len == 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+        }
+        else if ( mate_idx >= row_len )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "mate_idx invalid in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+        }
+        else
+        {
+            /* read from the PRIMARY_ALIGNMENT_TABLE the value of the columns "REF_NAME" and "REF_POS" */
+            int64_t a_row_id = prim_al_id_ptr[ mate_idx ];
+            if ( a_row_id == 0 )
+            {
+                rc = KOutMsg( "*\t0\t" );
+            }
+            else
+            {
+                const char * ref_name;
+                uint32_t ref_name_len;
+                rc = read_char_ptr( a_row_id, ptx->cursor, ptx->ref_name_idx, &ref_name, &ref_name_len, "REF_NAME" );
+                if ( rc == 0 )
+                {
+                    if ( ref_name_len == 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of PRIM.REF_NAME", "rn=%ld", a_row_id ) );
+                    }
+                    else
+                    {
+                        const INSDC_coord_zero *ref_pos;
+                        rc = read_INSDC_coord_zero_ptr( a_row_id, ptx->cursor, ptx->ref_pos_idx, &ref_pos, &row_len, "REF_POS" );
+                        if ( rc == 0 )
+                        {
+                            rc = KOutMsg( "%.*s\t%i\t", ref_name_len, ref_name, ref_pos[ 0 ] + 1 );
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static uint32_t calc_mate_idx( const uint32_t n_reads, const uint32_t read_idx )
+{
+    if ( read_idx == ( n_reads - 1 ) )
+        return ( read_idx - 1 );
+    else
+        return ( read_idx + 1 );
+}
+
+
+static rc_t read_quality( const seq_table_ctx * const stx,
+                          const int64_t row_id,
+                          const char **quality,
+                          const uint32_t read_len )
+{
+    uint32_t quality_len;
+    rc_t rc = read_char_ptr( row_id, stx->cursor, stx->quality_idx, quality, &quality_len, "QUALITY" );
+    if ( rc == 0 && read_len != quality_len )
+        rc = complain_size_diff( row_id, "QUALITY" );
+    return rc;
+}
+
+
+static rc_t read_read_type( const seq_table_ctx * const stx,
+                            const int64_t row_id,
+                            const INSDC_read_type **read_type,
+                            const uint32_t read_len )
+{
+    uint32_t read_type_len;
+    rc_t rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, read_type, &read_type_len, "READ_TYPE" );
+    if ( rc == 0 && read_type_len != read_len )
+        rc = complain_size_diff( row_id, "READ_TYPE" );
+    return rc;
+}
+
+
+static rc_t read_read_filter( const seq_table_ctx * const stx,
+                              const int64_t row_id,
+                              const INSDC_read_filter **read_filter,
+                              const uint32_t read_len )
+{
+    uint32_t read_filter_len;
+    rc_t rc = read_INSDC_read_filter_ptr( row_id, stx->cursor, stx->read_filter_idx, read_filter, &read_filter_len, "READ_FILTER" );
+    if ( rc == 0 && read_filter_len != read_len )
+        rc = complain_size_diff( row_id, "READ_FILTER" );
+    return rc;
+}
+
+
+static rc_t read_read_start( const seq_table_ctx * const stx,
+                             const int64_t row_id,
+                             const INSDC_coord_zero **read_start,
+                             const uint32_t nreads )
+{
+    uint32_t read_start_len;
+    rc_t rc = read_INSDC_coord_zero_ptr( row_id, stx->cursor, stx->read_start_idx, read_start, &read_start_len, "READ_START" );
+    if ( rc == 0 && nreads != read_start_len )
+        rc = complain_size_diff( row_id, "READ_START" );
+    return rc;
+}
+
+
+static rc_t read_read_len( const seq_table_ctx * const stx,
+                           const int64_t row_id,
+                           const INSDC_coord_len **read_len,
+                           const uint32_t nreads )
+{
+    uint32_t read_len_len;
+    rc_t rc = read_INSDC_coord_len_ptr( row_id, stx->cursor, stx->read_len_idx, read_len, &read_len_len, "READ_LEN" );
+    if ( rc == 0 && nreads != read_len_len )
+        rc = complain_size_diff( row_id, "READ_LEN" );
+    return rc;
+}
+
+
+static bool calc_reverse_flag( const samdump_opts * const opts,
+                               const uint32_t read_idx,
+                               const INSDC_read_type * read_type )
+{
+    bool res = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+    if ( res )
+        res = opts -> reverse_unaligned_reads;
+    return res;
+}
+
+
+static rc_t opt_field_spot_group( const seq_table_ctx * const stx, int64_t row_id )
+{
+    const char * spot_group = NULL;
+    uint32_t spot_group_len;    
+    rc_t rc = read_char_ptr( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len, "SPOT_GROUP" );
+    if ( rc == 0 && spot_group_len > 0 )
+        rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+    return rc;
+}
+
+static rc_t opt_field_lnk_group( const seq_table_ctx * const stx, int64_t row_id )
+{
+    const char * lnk_grp;
+    uint32_t lnk_grp_len;
+    rc_t rc = read_char_ptr( row_id, stx->cursor, stx->lnk_group_idx, &lnk_grp, &lnk_grp_len, "LINKAGE_GROUP" );
+    if ( rc == 0 && lnk_grp_len > 0 )
+        rc = KOutMsg( "\tBX:Z:%.*s", lnk_grp_len, lnk_grp );
+    return rc;
+}
+
+static rc_t dump_seq_row_sam_filtered( const samdump_opts * const opts,
+                                       const seq_table_ctx * const stx,
+                                       const prim_table_ctx * const ptx,
+                                       const matecache * const mc,
+                                       const input_database * const ids,
+                                       const int64_t row_id,
+                                       const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    const int64_t * prim_align_ids;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_int64_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len, "PRIM_AL_ID" );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        int64_t align_id = prim_align_ids[ read_idx ];
+        if ( align_id == 0 &&              /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )    /* and has a length! */
+        {
+            uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+
+            /*  here we have to find out if the read is actually requested: 
+                -----------------------------------------------------------
+                read from the SEQ-table the ID of the mate in PRIM-table
+                look if we have the requested ID in the mate-cache, if not here it ends...
+            */
+            align_id = prim_align_ids[ mate_idx ];
+            if ( align_id != 0 )
+            {
+                uint32_t ref_idx;
+                INSDC_coord_zero mate_ref_pos;
+                int64_t seq_spot_id;
+                /* this is the filter: we look up in the mate-cache! */
+                rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+                if ( rc == 0 )
+                {
+                    const ReferenceObj* refobj;
+                    /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+                    rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+                    }
+                    else
+                    {
+                        const char * mate_ref_name;
+                        rc = ReferenceObj_Name( refobj, &mate_ref_name );
+                        if ( rc != 0 )
+                        {
+                            (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+                        }
+                        else
+                        {
+                            bool reverse = false;
+
+                            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "%ld\t", seq_spot_id );
+
+                            if ( rc == 0 && read_type == NULL )
+                                rc = read_read_type( stx, row_id, &read_type, nreads );
+
+                            if ( rc == 0 )
+                                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+                            if ( rc == 0 && read_filter == NULL )
+                                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+                            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+                            if ( rc == 0 )
+                            {
+                                uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx, 
+                                                                                    align_id, read_type, reverse, read_filter );
+                                rc = KOutMsg( "%u\t", sam_flags );
+                            }
+
+                            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+                            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+                            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+                            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "*\t0\t0\t*\t" );
+
+                            /* SAM-FIELD: RNEXT     SRA-column: found in cache */
+                            /* SAM-FIELD: POS       SRA-column: found in cache */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "%s\t%li\t", mate_ref_name, mate_ref_pos + 1 );
+
+                            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "0\t" );
+
+                            if ( rc == 0 && read == NULL )
+                                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+                            if ( rc == 0 && quality == NULL )
+                                rc = read_quality( stx, row_id, &quality, rd_len );
+                            if ( rc == 0 && read_start == NULL )
+                                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+                            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+                            if ( rc == 0 )
+                                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+                            if ( rc == 0 )
+                                rc = KOutMsg( "\t" );
+
+                            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+                            if ( rc == 0 )
+                                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+                            /* OPT SAM-FIELD:       SRA-column: ALIGN_ID */
+                            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+                            /* OPT SAM-FIELD:      SRA-column: SPOT_GROUP */
+                            if ( rc == 0 && stx->spot_group_idx != COL_NOT_AVAILABLE )
+                                rc = opt_field_spot_group( stx, row_id );
+
+                            /* OPT SAM-FIELD:       SRA-column: LINKAGE_GROUP */
+                            if ( rc == 0 && stx->lnk_group_idx != COL_NOT_AVAILABLE )
+                                rc = opt_field_lnk_group( stx, row_id );
+                            
+                            if ( rc == 0 )
+                                rc = KOutMsg( "\n" );
+                        }
+                    }
+                }
+                else
+                {
+                    rc = 0;     /* it is OK if an alignment is not found in the cache, do not terminate! */
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_prim_row_sam( const samdump_opts * const opts,
+                                   const seq_table_ctx * const stx,
+                                   const prim_table_ctx * const ptx,
+                                   const matecache * const mc,
+                                   const input_database * const ids,
+                                   const int64_t row_id,
+                                   const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    const int64_t * prim_align_ids;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_int64_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len, "PRIM_AL_ID" );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&     /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )             /* and has a length! */
+        {
+            bool reverse = false, mate_available = false;
+            uint32_t mate_idx = 0;
+            int64_t mate_id = 0;
+
+            if ( nreads > 1 )
+            {
+                if ( read_idx == ( nreads - 1 ) )
+                    mate_idx = read_idx - 1;
+                else
+                    mate_idx = read_idx + 1;
+                mate_available = true;
+            }
+
+            if ( mate_available && mate_idx < prim_align_ids_len ) 
+                mate_id = prim_align_ids[ mate_idx ];
+
+            if ( rc == 0 && read_type == NULL )
+                rc = read_read_type( stx, row_id, &read_type, nreads );
+            if ( rc == 0 )
+                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+            if ( rc == 0 && read_filter == NULL )
+                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+            if ( rc == 0 )
+                rc = KOutMsg( "%ld\t", row_id );
+
+            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+            if ( rc == 0 )
+            {
+                uint32_t sam_flags;
+                if ( stx->prim_al_id_idx != INVALID_COLUMN )
+                {
+                    uint32_t temp_nreads = nreads;
+                    if ( mate_id == 0 && read_len[ mate_idx ] == 0 ) temp_nreads--;
+                    sam_flags = calculate_unaligned_sam_flags_db( temp_nreads, read_idx, mate_idx, 
+                                            mate_id, read_type, reverse, read_filter );
+                }
+                else
+                {
+                    if ( reverse )
+                        sam_flags = ( 0x04 | 0x10 );
+                    else
+                        sam_flags = 0x04;
+                }
+                rc = KOutMsg( "%u\t", sam_flags );
+            }
+
+            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+            if ( rc == 0 )
+                rc = KOutMsg( "*\t0\t0\t*\t" );
+
+            /* SAM-FIELD: RNEXT     SRA-column: look up in cache, or none */
+            /* SAM-FIELD: POS       SRA-column: look up in cache, or none */
+            if ( rc == 0 )
+            {
+                if ( ptx == NULL )
+                {
+                    rc = KOutMsg( "0\t0\t" );   /* no way to get that without PRIM_ALIGN-table */
+                }
+                else
+                {
+                    if ( opts->use_mate_cache && mc != NULL && ids != NULL )
+                    {
+                        const char * mate_ref_name;
+                        uint32_t mate_ref_name_len;
+                        INSDC_coord_zero mate_ref_pos;
+
+                        rc = get_mate_info( ptx, mc, ids, row_id, mate_id, nreads, &mate_ref_name, &mate_ref_name_len, &mate_ref_pos );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "%.*s\t%li\t", mate_ref_name_len, mate_ref_name, mate_ref_pos );
+                    }
+                    else
+                    {
+                        /* print the mate info */
+                        rc = dump_the_other_read( stx, ptx, row_id, mate_idx );
+                    }
+                }
+            }
+
+
+            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+            if ( rc == 0 )
+                rc = KOutMsg( "0\t" );
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\t" );
+
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+
+            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+            /* OPT SAM-FIIELD:      SRA-column: ALIGN_ID */
+            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+            /* OPT SAM-FIIELD:      SRA-column: SPOT_GROUP */
+            if ( rc == 0 && stx->spot_group_idx != COL_NOT_AVAILABLE )
+                rc = opt_field_spot_group( stx, row_id );
+
+            /* OPT SAM-FIELD:       SRA-column: LINKAGE_GROUP */
+            if ( rc == 0 && stx->lnk_group_idx != COL_NOT_AVAILABLE )
+                rc = opt_field_lnk_group( stx, row_id );
+
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+    }
+    return rc;
+}
+
+
+/* called if we are dumping from a legacy table instead from a database */
+static rc_t dump_seq_row_sam( const samdump_opts * const opts,
+                              const seq_table_ctx * const stx,
+                              const int64_t row_id,
+                              const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, name_len;
+    const char * quality = NULL;
+    const char * name = NULL;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+    if ( rc == 0 )
+    {
+        if ( stx->name_idx != COL_NOT_AVAILABLE )
+            rc = read_char_ptr( row_id, stx->cursor, stx->name_idx, &name, &name_len, "NAME" );
+        else
+            name_len = 0;
+    }
+    if ( rc == 0 )
+        rc = read_read_type( stx, row_id, &read_type, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( ( read_len[ read_idx ] > 0 ) &&             /* has a length! */
+             ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+        {
+            bool reverse = false;
+            uint32_t mate_idx = 0;
+
+            if ( nreads > 1 )
+            {
+                if ( read_idx == ( nreads - 1 ) )
+                    mate_idx = read_idx - 1;
+                else
+                    mate_idx = read_idx + 1;
+            }
+
+            if ( rc == 0 ) /* types in interfaces/insdc/insdc.h */
+                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+            if ( rc == 0 && read_filter == NULL )
+                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+            if ( rc == 0 )
+            {
+                if ( name != NULL && name_len > 0 )
+                    rc = KOutMsg( "%.*s\t", name_len, name );
+                else
+                    rc = KOutMsg( "%lu\t", row_id );
+            }
+
+            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+            if ( rc == 0 )
+            {
+                uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx, 
+                                            0, read_type, reverse, read_filter );
+                rc = KOutMsg( "%u\t", sam_flags );
+            }
+
+            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+            /* SAM-FIELD: RNEXT     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+
+            if ( rc == 0 )
+                rc = KOutMsg( "*\t0\t0\t*\t*\t0\t0\t" );
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\t" );
+
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+
+            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+            /* OPT SAM-FIIELD:      SRA-column: ALIGN_ID */
+            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+            /* OPT SAM-FIIELD:      SRA-column: SPOT_GROUP */
+            if ( rc == 0 && stx->spot_group_idx != COL_NOT_AVAILABLE )
+                rc = opt_field_spot_group( stx, row_id );
+
+            /* OPT SAM-FIELD:       SRA-column: LINKAGE_GROUP */
+            if ( rc == 0 && stx->lnk_group_idx != COL_NOT_AVAILABLE )
+                rc = opt_field_lnk_group( stx, row_id );
+
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_row_fastx_filtered( const samdump_opts * const opts,
+                                         const seq_table_ctx * const stx,
+                                         const prim_table_ctx * const ptx,
+                                         const matecache * const mc,
+                                         const input_database * const ids,
+                                         const int64_t row_id,
+                                         const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len, spot_group_len = 0;
+    const int64_t * prim_align_ids;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_int64_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len, "PRIM_AL_ID" );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&    /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )            /* and has a length! */
+        {
+            uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+            int64_t align_id = prim_align_ids[ mate_idx ];
+            if ( align_id != 0 )
+            {
+                uint32_t ref_idx;
+                INSDC_coord_zero mate_ref_pos;
+                int64_t seq_spot_id;
+                rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+                if ( rc == 0 )
+                {
+                    bool reverse;
+
+                    /* the NAME */
+                    if ( opts->output_format == of_fastq )
+                        rc = KOutMsg( "@" );
+                    else
+                        rc = KOutMsg( ">" );
+
+                    if ( rc == 0 )
+                    {
+                        if ( opts->print_spot_group_in_name && spot_group == NULL )
+                            rc = read_char_ptr( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len, "SPOT_GROUP" );
+                        if ( rc == 0 )
+                            rc = dump_name( opts, seq_spot_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+                        if ( rc == 0 )
+                            rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+                    }
+
+                    if ( rc == 0 && read == NULL )
+                        rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+                    if ( rc == 0 && quality == NULL )
+                        rc = read_quality( stx, row_id, &quality, rd_len );
+                    if ( rc == 0 && read_type == NULL )
+                        rc = read_read_type( stx, row_id, &read_type, nreads );
+                    if ( rc == 0 )
+                        reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+                    if ( rc == 0 && read_start == NULL )
+                        rc = read_read_start( stx, row_id, &read_start, nreads );
+
+                    /* the READ */
+                    if ( rc == 0 )
+                        rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+                    if ( rc == 0 )
+                        rc = KOutMsg( "\n" );
+
+                    /* in case of fastq : the QUALITY-line */
+                    if ( rc == 0 && opts->output_format == of_fastq )
+                    {
+                        rc = KOutMsg( "+\n" );
+                        if ( rc == 0 )
+                            rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "\n" );
+                    }
+                }
+                else
+                {
+                    rc = 0;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_row_fastx( const samdump_opts * const opts,
+                                const seq_table_ctx * const stx,
+                                const int64_t row_id,
+                                const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len, spot_group_len = 0;
+    const int64_t * prim_align_ids;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL ;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_int64_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len, "PRIM_AL_IDS" );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&    /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )            /* and has a length! */
+        {
+            bool reverse;
+
+            /* the NAME */
+            if ( opts->output_format == of_fastq )
+                rc = KOutMsg( "@" );
+            else
+                rc = KOutMsg( ">" );
+            if ( rc == 0 )
+            {
+                if ( opts->print_spot_group_in_name && spot_group == NULL )
+                    rc = read_char_ptr( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len, "SPOT_GROUP" );
+                if ( rc == 0 )
+                    rc = dump_name( opts, row_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+                if ( rc == 0 )
+                    rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+            }
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+            if ( rc == 0 && read_type == NULL )
+                rc = read_read_type( stx, row_id, &read_type, nreads );
+            if ( rc == 0 )
+                reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* the READ */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            /* in case of fastq : the QUALITY-line */
+            if ( rc == 0 && opts->output_format == of_fastq )
+            {
+                rc = KOutMsg( "+\n" );
+                if ( rc == 0 )
+                    rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "\n" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_tab_row_fastx( const samdump_opts * const opts,
+                                    const seq_table_ctx * const stx,
+                                    const int64_t row_id,
+                                    const uint32_t nreads )
+{
+    uint32_t read_idx, rd_len, name_len, spot_group_len = 0;
+    const char * quality = NULL;
+    const char * name;
+    const INSDC_dna_text * read = NULL ;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+
+    rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+    if ( rc == 0 )
+        rc = read_char_ptr( row_id, stx->cursor, stx->name_idx, &name, &name_len, "NAME" );
+    if ( rc == 0 )
+        rc = read_read_type( stx, row_id, &read_type, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( ( read_len[ read_idx ] > 0 ) &&            /* has a length! */
+             ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+        {
+            bool reverse;
+
+            /* the NAME */
+            if ( opts->output_format == of_fastq )
+                rc = KOutMsg( "@" );
+            else
+                rc = KOutMsg( ">" );
+            if ( rc == 0 )
+            {
+                if ( opts->print_spot_group_in_name && spot_group == NULL )
+                    rc = read_char_ptr( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len, "SPOT_GROUP" );
+
+                if ( rc == 0 )
+                    rc = dump_name_legacy( opts, name, name_len, spot_group, spot_group_len ); /* sam-dump-opts.c */
+
+                if ( rc == 0 )
+                    rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+            }
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len, "READ" );
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+            if ( rc == 0 )
+                reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* the READ */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            /* in case of fastq : the QUALITY-line */
+            if ( rc == 0 && opts->output_format == of_fastq )
+            {
+                if ( quality == NULL )
+                    rc = read_quality( stx, row_id, &quality, rd_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "+\n" );
+                if ( rc == 0 )
+                    rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "\n" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct unaligned_callback_ctx
+{
+    const samdump_opts * opts;
+    const input_database * ids;
+    const matecache * mc;
+    seq_table_ctx * stx;
+    prim_table_ctx * ptx;
+} unaligned_callback_ctx;
+
+
+static rc_t CC on_unaligned_seq_id( int64_t seq_id, int64_t al_id, void * user_data )
+{
+    rc_t rc = Quitting();
+    if ( rc == 0 )
+    {
+        seq_row row;
+        unaligned_callback_ctx * u_ctx = user_data;
+        rc = read_seq_row( u_ctx->opts, u_ctx->stx, seq_id, &row );
+        if ( rc == 0 && !row.filtered_out )
+        {
+            switch( u_ctx->opts->output_format )
+            {
+                case of_sam   : rc = dump_seq_row_sam_filtered( u_ctx->opts, u_ctx->stx, u_ctx->ptx, u_ctx->mc, u_ctx->ids, seq_id, row.nreads ); break;
+                case of_fasta : /* fall through intended ! */
+                case of_fastq : rc = dump_seq_row_fastx_filtered( u_ctx->opts, u_ctx->stx, u_ctx->ptx, u_ctx->mc, u_ctx->ids, seq_id, row.nreads ); break;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_unaligned_database_filtered_2( const samdump_opts * const opts,
+                                                 const input_table * const seq,
+                                                 const input_table * const prim,
+                                                 const matecache * const mc,
+                                                 const input_database * const ids )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            prim_table_ctx ptx;
+            rc = prepare_prim_table_ctx( opts, prim, &ptx );
+            if ( rc == 0 )
+            {
+                unaligned_callback_ctx u_ctx;
+                u_ctx.opts = opts;
+                u_ctx.ids = ids;
+                u_ctx.mc = mc;
+                u_ctx.stx = &stx;
+                u_ctx.ptx = &ptx;
+                rc = foreach_unaligned_entry( mc, ids->db_idx, on_unaligned_seq_id, &u_ctx );
+                VCursorRelease( ptx.cursor );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* we are printing from a sra-database, we print half aligned reads only if we find them in the mate-cache */
+static rc_t print_unaligned_database_filtered( const samdump_opts * const opts,
+                                               const input_table * const seq,
+                                               const input_table * const prim,
+                                               const matecache * const mc,
+                                               const input_database * const ids )
+{
+    return print_unaligned_database_filtered_2( opts, seq, prim, mc, ids );
+#if 0
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            int64_t first_row;
+            uint64_t row_count;
+            rc = VCursorIdRange( stx.cursor, stx.prim_al_id_idx, &first_row, &row_count );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+            }
+            else
+            {
+                prim_table_ctx ptx;
+                rc = prepare_prim_table_ctx( opts, prim, &ptx );
+                if ( rc == 0 )
+                {
+                    int64_t row_id;
+                    seq_row row;
+
+                    for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0; ++row_id )
+                    {
+                        rc = Quitting();
+                        if ( rc == 0 )
+                        {
+                            rc = read_seq_row( opts, &stx, row_id, &row );
+                            if ( rc == 0 && !row.filtered_out )
+                            {
+                                switch( opts->output_format )
+                                {
+                                    case of_sam   : rc = dump_seq_row_sam_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads ); break;
+                                    case of_fasta : /* fall through intended ! */
+                                    case of_fastq : rc = dump_seq_row_fastx_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads ); break;
+                                }
+                            }
+                        }
+                    }
+                    VCursorRelease( ptx.cursor );
+                }
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+#endif
+}
+
+
+/* we are printing from a sra-database, we print all unaligned read we can find */
+static rc_t print_unaligned_database_full( const samdump_opts * const opts,
+                                           const input_table * const seq,
+                                           const input_table * const prim,
+                                           const matecache * const mc,
+                                           const input_database * const ids )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            prim_table_ctx ptx;
+            if ( opts->output_format == of_sam )
+                rc = prepare_prim_table_ctx( opts, prim, &ptx );
+            if ( rc == 0 )
+            {
+                int64_t first_row, row_id;
+                uint64_t row_count;
+                rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+                }
+                else
+                {
+                    seq_row row;
+                    for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0; ++row_id )
+                    {
+                        rc = Quitting();
+                        if ( rc == 0 )
+                        {
+                            rc = read_seq_row( opts, &stx, row_id, &row );
+                            if ( rc == 0 && !row.filtered_out )
+                            {
+                                switch( opts->output_format )
+                                {
+                                    case of_sam   : rc = dump_seq_prim_row_sam( opts, &stx, &ptx, mc, ids, row_id, row.nreads ); break;
+                                    case of_fasta : /* fall through intended ! */
+                                    case of_fastq : rc = dump_seq_row_fastx( opts, &stx, row_id, row.nreads ); break;
+                                }
+                            }
+                        }
+                    }
+                }
+                if ( opts->output_format == of_sam )
+                    VCursorRelease( ptx.cursor );
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+}
+
+
+/* we are printing from a (legacy) table not from a database! */
+static rc_t print_unaligned_table( const samdump_opts * const opts,
+                                   const input_table * const seq )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            int64_t first_row, row_id;
+            uint64_t row_count;
+            rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+            }
+            else
+            {
+                seq_row row;
+                for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0; ++row_id )
+                {
+                    rc = Quitting();
+                    if ( rc == 0 )
+                    {
+                        rc = read_seq_row( opts, &stx, row_id, &row );
+                        if ( rc == 0 && !row.filtered_out )
+                        {
+                            switch( opts->output_format )
+                            {
+                                case of_sam   : rc = dump_seq_row_sam( opts, &stx, row_id, row.nreads ); break;
+                                case of_fasta : /* fall through intended ! */
+                                case of_fastq : rc = dump_seq_tab_row_fastx( opts, &stx, row_id, row.nreads ); break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+}
+
+
+/* entry point from sam-dump3.c */
+rc_t print_unaligned_spots( const samdump_opts * const opts,
+                            const input_files * const ifs,
+                            const matecache * const mc )
+{
+    rc_t rc = 0;
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_start_section( opts->perf_log, "unaligned spots" );
+#endif
+
+    if ( ( ifs->database_count > 0 ) && ( opts->dump_unaligned_reads || opts->dump_unaligned_only ) )
+    {
+        uint32_t db_idx;
+        for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+        {
+            const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+            if ( ids != NULL )
+            {
+                input_table seq;
+
+                seq.path = ids->path;
+                rc = VDatabaseOpenTableRead( ids->db, &seq.tab, "SEQUENCE" );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table SEQUENCE for $(tn)", "tn=%s", ids->path ) );
+                }
+                else
+                {
+                    input_table prim;
+                    prim.path = ids->path;
+                    rc = VDatabaseOpenTableRead( ids->db, &prim.tab, "PRIMARY_ALIGNMENT" );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table PRIMARY_ALIGNMENT $(tn)", "tn=%s", ids->path ) );
+                    }
+                    else
+                    {
+                        if ( opts->region_count > 0 )
+                        {
+                            rc = print_unaligned_database_filtered( opts, &seq, &prim, mc, ids );
+                        }
+                        else
+                        {
+                            rc = print_unaligned_database_full( opts, &seq, &prim, mc, ids );
+                        }
+                        VTableRelease( prim.tab );
+                    }
+                    VTableRelease( seq.tab );
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && ifs->table_count > 0 )
+    {
+        uint32_t tab_idx;
+        for ( tab_idx = 0; tab_idx < ifs->table_count && rc == 0; ++tab_idx )
+        {
+            input_table * itab = VectorGet( &ifs->tabs, tab_idx );
+            if ( itab != NULL )
+                rc = print_unaligned_table( opts, itab );
+        }
+    }
+
+#if _DEBUGGING
+    if ( opts->perf_log != NULL )
+        perf_log_end_section( opts->perf_log );
+#endif
+
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-unaligned.h b/tools/sra-pileup/sam-unaligned.h
new file mode 100644
index 0000000..98624be
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_unaligned_
+#define _h_sam_unaligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+rc_t print_unaligned_spots( const samdump_opts * const opts,
+                            const input_files * const ifs,
+                            const matecache * const mc );
+
+#endif
diff --git a/tools/sra-pileup/splitfastq.pl b/tools/sra-pileup/splitfastq.pl
new file mode 100755
index 0000000..c110599
--- /dev/null
+++ b/tools/sra-pileup/splitfastq.pl
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+use IO::File;
+
+my $line;
+my $state = 0;
+my %filehandles;
+my $current_filehandle;
+my $base =  $ARGV[ 0 ];
+
+if ( !defined ( $base ) )
+{
+    $base = "out";
+}
+
+while ( defined ( $line = <STDIN> ) )
+{
+    #remove line-feeds, white space etc.
+    chomp( $line );
+
+    if ( $state == 0 )
+    {
+        # get the first word
+        my $word0 = ( split( /\s+/, $line ) )[ 0 ];
+
+        # start with the beginning of the word, until '/' found, continue with numbers to end of string
+        if ( $word0 =~ /^[^\/]+\/(\d+)$/ )
+        {
+            # grep what matched after the '/'
+            my $selector = $1;
+            if ( !defined ( $filehandles{$selector}) )
+            {
+                $filehandles{$selector} = new IO::File( "$base.$selector.fastq", "w" );
+            }
+            $current_filehandle = $filehandles{$selector};
+        }
+    }
+
+    if ( defined( $current_filehandle ) )
+    {
+        $current_filehandle -> print( "$line\n" );
+    }
+
+    $state ++;
+    $state &= 0x3;
+}
\ No newline at end of file
diff --git a/tools/sra-pileup/sra-pileup.c b/tools/sra-pileup/sra-pileup.c
new file mode 100644
index 0000000..65b4c75
--- /dev/null
+++ b/tools/sra-pileup/sra-pileup.c
@@ -0,0 +1,1640 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ref_regions.h"
+#include "cmdline_cmn.h"
+#include "out_redir.h"
+#include "pileup_options.h"
+#include "dyn_string.h"
+#include "reref.h"
+#include "report_deletes.h"
+#include "ref_walker_0.h"
+#include "ref_walker.h"
+#include "walk_debug.h"
+#include "4na_ascii.h"
+#include "pileup_counters.h"
+#include "pileup_index.h"
+#include "pileup_varcount.h"
+#include "pileup_indels.h"
+#include "pileup_stat.h"
+#include "pileup_v2.h"
+
+#include <kapp/main.h>
+
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/report.h>
+#include <klib/vector.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <insdc/sra.h>
+
+#include <kdb/manager.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/report.h> /* ReportSetVDBManager() */
+#include <vdb/vdb-priv.h> /* VDBManagerDisablePagemapThread() */
+
+#include <sra/sraschema.h>
+#include <align/manager.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <string.h>
+
+#define COL_QUALITY "QUALITY"
+#define COL_REF_ORIENTATION "REF_ORIENTATION"
+#define COL_READ_FILTER "READ_FILTER"
+#define COL_TEMPLATE_LEN "TEMPLATE_LEN"
+
+#define OPTION_MINMAPQ "minmapq"
+#define ALIAS_MINMAPQ  "q"
+
+#define OPTION_DUPS    "duplicates"
+#define ALIAS_DUPS     "d"
+
+#define OPTION_NOQUAL  "noqual"
+#define ALIAS_NOQUAL   "n"
+
+#define OPTION_NOSKIP  "noskip"
+#define ALIAS_NOSKIP   "s"
+
+#define OPTION_SHOWID  "showid"
+#define ALIAS_SHOWID   "i"
+
+#define OPTION_SPOTGRP "spotgroups"
+#define ALIAS_SPOTGRP  "p"
+
+#define OPTION_SEQNAME "seqname"
+#define ALIAS_SEQNAME  "e"
+
+#define OPTION_MIN_M   "minmismatch"
+#define OPTION_MERGE   "merge-dist"
+
+#define OPTION_DEPTH_PER_SPOTGRP	"depth-per-spotgroup"
+
+#define OPTION_FUNC    "function"
+#define ALIAS_FUNC     NULL
+
+#define FUNC_COUNTERS   "count"
+#define FUNC_STAT       "stat"
+#define FUNC_RE_REF     "ref"
+#define FUNC_RE_REF_EXT "ref-ex"
+#define FUNC_DEBUG      "debug"
+#define FUNC_MISMATCH   "mismatch"
+#define FUNC_INDEX      "index"
+#define FUNC_TEST       "test"
+#define FUNC_VARCOUNT   "varcount"
+#define FUNC_DELETES    "deletes"
+#define FUNC_INDELS     "indels"
+
+enum
+{
+    sra_pileup_samtools = 0,
+    sra_pileup_counters = 1,
+    sra_pileup_stat = 2,
+    sra_pileup_report_ref = 3,
+    sra_pileup_report_ref_ext = 4,
+    sra_pileup_debug = 5,
+    sra_pileup_mismatch = 6,
+    sra_pileup_index = 7,
+    sra_pileup_test = 8,
+    sra_pileup_varcount = 9,
+    sra_pileup_deletes = 10,
+	sra_pileup_indels = 11
+};
+
+static const char * minmapq_usage[]         = { "Minimum mapq-value, ", 
+                                                "alignments with lower mapq",
+                                                "will be ignored (default=0)", NULL };
+
+static const char * dups_usage[]            = { "process duplicates 0..off/1..on", NULL };
+
+static const char * noqual_usage[]          = { "Omit qualities in output", NULL };
+
+static const char * noskip_usage[]          = { "Does not skip reference-regions without alignments", NULL };
+
+static const char * showid_usage[]          = { "Shows alignment-id for every base", NULL };
+
+static const char * spotgrp_usage[]         = { "divide by spotgroups", NULL };
+
+static const char * dpgrp_usage[]         	= { "print depth per spotgroup", NULL };
+
+static const char * seqname_usage[]         = { "use original seq-name", NULL };
+
+static const char * min_m_usage[]           = { "min percent of mismatches used in function mismatch, default is 5%", NULL };
+
+static const char * merge_usage[]           = { "If adjacent slices are closer than this, ",
+                                                "they are merged and a skiplist is created. ", 
+                                                "a value of zero disables the feature, default is 10000", NULL };
+
+static const char * no_qual_usage[]         = { "omit qualities", NULL };
+
+static const char * func_ref_usage[]        = { "list references", NULL };
+static const char * func_ref_ex_usage[]     = { "list references + coverage", NULL };
+static const char * func_count_usage[]      = { "sort pileup with counters", NULL };
+static const char * func_stat_usage[]       = { "strand/tlen statistic", NULL };
+static const char * func_mismatch_usage[]   = { "only lines with mismatch", NULL };
+static const char * func_index_usage[]      = { "list deletion counts", NULL };
+static const char * func_indels_usage[]     = { "list only inserts/deletions", NULL };
+
+static const char * func_varcount_usage[]   = { "variation counters: ", 
+                                                "ref-name, ref-pos, ref-base, coverage, ",
+                                                "mismatch A, mismatch C, mismatch G, mismatch T,",
+                                                "deletes, inserts,",
+                                                "ins after A, ins after C, ins after G, ins after T", NULL };
+
+static const char * func_deletes_usage[]    = { "list deletions greater then 20", NULL };
+
+static const char * func_usage[]            = { "alternative functionality", NULL };
+
+OptDef MyOptions[] =
+{
+    /*name,           	alias,         	hfkt,	usage-help,		maxcount, needs value, required */
+    { OPTION_MINMAPQ,	ALIAS_MINMAPQ,	NULL,	minmapq_usage,	1,        true,        false },
+    { OPTION_DUPS,		ALIAS_DUPS,		NULL,	dups_usage,		1,        true,        false },
+    { OPTION_NOQUAL,	ALIAS_NOQUAL,	NULL,	noqual_usage,	1,        false,       false },
+    { OPTION_NOSKIP,	ALIAS_NOSKIP,	NULL,	noskip_usage,	1,        false,       false },
+    { OPTION_SHOWID,	ALIAS_SHOWID,	NULL,	showid_usage,	1,        false,       false },
+    { OPTION_SPOTGRP,	ALIAS_SPOTGRP,	NULL,	spotgrp_usage,	1,        false,       false },
+	{ OPTION_DEPTH_PER_SPOTGRP, NULL,	NULL,	dpgrp_usage,	1,        false,       false },
+    { OPTION_SEQNAME,	ALIAS_SEQNAME,	NULL,	seqname_usage,	1,        false,       false },
+    { OPTION_MIN_M,		NULL,			NULL,	min_m_usage,	1,        true,        false },
+    { OPTION_MERGE,		NULL,			NULL,	merge_usage,	1,        true,        false },
+    { OPTION_FUNC,		ALIAS_FUNC,		NULL,	func_usage,		1,        true,        false }
+};
+
+/* =========================================================================================== */
+
+typedef struct pileup_callback_data
+{
+    const AlignMgr *almgr;
+    pileup_options *options;
+} pileup_callback_data;
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, (const void **)res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_uint32_option( const Args *args, const char *name,
+                        uint32_t *res, const uint32_t def )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    if ( rc == 0 && s != NULL )
+        *res = atoi( s );
+    else
+        *res = def;
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = -1;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+/* =========================================================================================== */
+
+
+static rc_t get_pileup_options( Args * args, pileup_options *opts )
+{
+    rc_t rc = get_common_options( args, &opts->cmn );
+    opts->function = sra_pileup_samtools;
+
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPTION_MINMAPQ, &opts->minmapq, 0 );
+
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPTION_MIN_M, &opts->min_mismatch, 5 );
+
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPTION_MERGE, &opts->merge_dist, 10000 );
+        
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_DUPS, &opts->process_dups, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_NOQUAL, &opts->omit_qualities, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_NOSKIP, &opts->no_skip, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SHOWID, &opts->show_id, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SPOTGRP, &opts->div_by_spotgrp, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_DEPTH_PER_SPOTGRP, &opts->depth_per_spotgrp, false );
+		
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SEQNAME, &opts->use_seq_name, false );
+
+    if ( rc == 0 )
+    {
+        const char * fkt = NULL;
+        rc = get_str_option( args, OPTION_FUNC, &fkt );
+        if ( rc == 0 && fkt != NULL )
+        {
+            if ( cmp_pchar( fkt, FUNC_COUNTERS ) == 0 )
+                opts->function = sra_pileup_counters;
+            else if ( cmp_pchar( fkt, FUNC_STAT ) == 0 )
+                opts->function = sra_pileup_stat;
+            else if ( cmp_pchar( fkt, FUNC_RE_REF ) == 0 )
+                opts->function = sra_pileup_report_ref;
+            else if ( cmp_pchar( fkt, FUNC_RE_REF_EXT ) == 0 )
+                opts->function = sra_pileup_report_ref_ext;
+            else if ( cmp_pchar( fkt, FUNC_DEBUG ) == 0 )
+                opts->function = sra_pileup_debug;
+            else if ( cmp_pchar( fkt, FUNC_MISMATCH ) == 0 )
+                opts->function = sra_pileup_mismatch;
+            else if ( cmp_pchar( fkt, FUNC_INDEX ) == 0 )
+                opts->function = sra_pileup_index;
+            else if ( cmp_pchar( fkt, FUNC_TEST ) == 0 )
+                opts->function = sra_pileup_test;
+            else if ( cmp_pchar( fkt, FUNC_VARCOUNT ) == 0 )
+                opts->function = sra_pileup_varcount;
+            else if ( cmp_pchar( fkt, FUNC_DELETES ) == 0 )
+                opts->function = sra_pileup_deletes;
+            else if ( cmp_pchar( fkt, FUNC_INDELS ) == 0 )
+                opts->function = sra_pileup_indels;
+        }
+    }
+    return rc;
+}
+
+/* GLOBAL VARIABLES */
+struct {
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = { NULL };
+
+const char UsageDefaultName[] = "sra-pileup";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [options]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+    KOutMsg ( "Options:\n" );
+    print_common_helplines();
+    HelpOptionLine ( ALIAS_MINMAPQ, OPTION_MINMAPQ, "min. mapq", minmapq_usage );
+    HelpOptionLine ( ALIAS_DUPS, OPTION_DUPS, "dup-mode", dups_usage );
+    HelpOptionLine ( ALIAS_SPOTGRP, OPTION_SPOTGRP, NULL, spotgrp_usage );
+    HelpOptionLine ( NULL, OPTION_DEPTH_PER_SPOTGRP, NULL, dpgrp_usage );	
+    HelpOptionLine ( ALIAS_SEQNAME, OPTION_SEQNAME, NULL, seqname_usage );
+    HelpOptionLine ( NULL, OPTION_MIN_M, NULL, min_m_usage );
+    HelpOptionLine ( NULL, OPTION_MERGE, NULL, merge_usage );
+    HelpOptionLine ( ALIAS_NOQUAL, OPTION_NOQUAL, NULL, no_qual_usage );
+
+    HelpOptionLine ( NULL, "function ref",      NULL, func_ref_usage );
+    HelpOptionLine ( NULL, "function ref-ex",   NULL, func_ref_ex_usage );
+    HelpOptionLine ( NULL, "function count",    NULL, func_count_usage );
+    HelpOptionLine ( NULL, "function stat",     NULL, func_stat_usage );
+    HelpOptionLine ( NULL, "function mismatch", NULL, func_mismatch_usage );
+    HelpOptionLine ( NULL, "function index",    NULL, func_index_usage );
+    HelpOptionLine ( NULL, "function varcount", NULL, func_varcount_usage );
+    HelpOptionLine ( NULL, "function deletes",  NULL, func_deletes_usage );
+    HelpOptionLine ( NULL, "function indels",   NULL, func_indels_usage );
+	
+    KOutMsg ( "\nGrouping of accessions into artificial spotgroups:\n" );
+    KOutMsg ( "  sra-pileup SRRXXXXXX=a SRRYYYYYY=b SRRZZZZZZ=a\n\n" );
+
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+/*
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+    rc_t rc = 0;
+
+    assert( buffer != NULL );
+    assert( num_writ != NULL );
+
+    do {
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+        if ( rc == 0 )
+        {
+            buffer += *num_writ;
+            bufsize -= *num_writ;
+            g_out_writer.pos += *num_writ;
+        }
+    } while ( rc == 0 && bufsize > 0 );
+    return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+    rc_t rc = 0;
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+        else
+        {
+            KFile *of;
+            rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+            if ( rc == 0 )
+            {
+                KFile *buf;
+                if ( gzip )
+                {
+                    KFile *gz;
+                    rc = KFileMakeGzipForWrite( &gz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = gz;
+                    }
+                }
+                if ( bzip2 )
+                {
+                    KFile *bz;
+                    rc = KFileMakeBzip2ForWrite( &bz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = bz;
+                    }
+                }
+
+                rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+                if ( rc == 0 )
+                {
+                    g_out_writer.kfile = buf;
+                    g_out_writer.org_writer = KOutWriterGet();
+                    g_out_writer.org_data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+                    }
+                }
+                KFileRelease( of );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+    KFileRelease( g_out_writer.kfile );
+    if( g_out_writer.org_writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+    }
+    g_out_writer.org_writer = NULL;
+}
+*/
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t read_base_and_len( struct VCursor const *curs,
+                               uint32_t column_idx,
+                               int64_t row_id,
+                               const void ** base,
+                               uint32_t * len )
+{
+    uint32_t elem_bits, boff, len_intern;
+    const void * ptr;
+    rc_t rc = VCursorCellDataDirect ( curs, row_id, column_idx, &elem_bits, &ptr, &boff, &len_intern );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+    }
+    else
+    {
+        if ( len != NULL ) *len = len_intern;
+        if ( base != NULL ) *base = ptr;
+    }
+    return rc;
+}
+
+
+static rc_t CC populate_tooldata( void *obj, const PlacementRecord *placement,
+        struct VCursor const *curs, INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+        void *data, void * placement_ctx )
+{
+    tool_rec * rec = ( tool_rec * ) obj;
+    pileup_callback_data * cb_data = ( pileup_callback_data * )data;
+    pileup_col_ids * col_ids = placement_ctx;
+    rc_t rc = 0;
+
+    rec->quality = NULL;
+    if ( !cb_data->options->process_dups )
+    {
+        const uint8_t * read_filter;
+        uint32_t read_filter_len;
+        rc = read_base_and_len( curs, col_ids->idx_read_filter, placement->id,
+                                (const void **)&read_filter, &read_filter_len );
+        if ( rc == 0 )
+        {
+            if ( ( *read_filter == SRA_READ_FILTER_REJECT )||
+                 ( *read_filter == SRA_READ_FILTER_CRITERIA ) )
+            {
+                rc = RC( rcAlign, rcType, rcAccessing, rcId, rcIgnored );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        const bool * orientation;
+        rc = read_base_and_len( curs, col_ids->idx_ref_orientation, placement->id,
+                                (const void **)&orientation, NULL );
+        if ( rc == 0 )
+            rec->reverse = *orientation;
+    }
+
+    if ( rc == 0 && !cb_data->options->omit_qualities )
+    {
+        const uint8_t * quality;
+        /*uint32_t quality_len;*/
+
+        rc = read_base_and_len( curs, col_ids->idx_quality, placement->id,
+                                (const void **)&quality, &rec->quality_len );
+        if ( rc == 0 )
+        {
+            rec->quality = ( uint8_t * )rec;
+            rec->quality += sizeof ( * rec );
+            memmove( rec->quality, quality, rec->quality_len );
+        }
+    }
+
+    if ( rc == 0 && cb_data->options->read_tlen )
+    {
+        const int32_t * tlen;
+        uint32_t tlen_len;
+
+        rc = read_base_and_len( curs, col_ids->idx_template_len, placement->id,
+                                (const void **)&tlen, &tlen_len );
+        if ( rc == 0 && tlen_len > 0 )
+            rec->tlen = *tlen;
+        else
+            rec->tlen = 0;
+    }
+    else
+        rec->tlen = 0;
+
+    return rc;
+}
+
+
+static rc_t CC alloc_size( struct VCursor const *curs, int64_t row_id, size_t * size, void *data, void * placement_ctx )
+{
+    rc_t rc = 0;
+    tool_rec * rec;
+    pileup_callback_data *cb_data = ( pileup_callback_data * )data;
+    pileup_col_ids * col_ids = placement_ctx;
+    *size = ( sizeof *rec );
+
+    if ( !cb_data->options->omit_qualities )
+    {
+        uint32_t q_len;
+        rc = read_base_and_len( curs, col_ids->idx_quality, row_id, NULL, &q_len );
+        if ( rc == 0 )
+            *size += q_len;
+    }
+    return rc;
+}
+
+
+static rc_t walk_ref_position( ReferenceIterator *ref_iter,
+                               const PlacementRecord *rec,
+                               struct dyn_string *line,
+                               char * qual,
+                               pileup_options *options )
+{
+    rc_t rc = 0;
+    INSDC_coord_zero seq_pos;
+    int32_t state = ReferenceIteratorState ( ref_iter, &seq_pos );
+    tool_rec *xrec = ( tool_rec * ) PlacementRecordCast ( rec, placementRecordExtension1 );
+    bool reverse = xrec->reverse;
+
+    if ( !options->omit_qualities )
+    {
+        if ( seq_pos < xrec->quality_len )
+            *qual = xrec->quality[ seq_pos ];
+        else
+            *qual = 2;
+    }
+
+    if ( ( state & align_iter_invalid ) == align_iter_invalid )
+    {
+        return add_char_2_dyn_string( line, '?' );
+    }
+
+    if ( ( state & align_iter_first ) == align_iter_first )
+    {
+        char s[ 3 ];
+        int32_t c = rec->mapq + 33;
+        if ( c > '~' ) { c = '~'; }
+        if ( c < 33 ) { c = 33; }
+        s[ 0 ] = '^';
+        s[ 1 ] = c;
+        s[ 2 ] = 0;
+        rc = add_string_2_dyn_string( line, s );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( ( state & align_iter_skip ) == align_iter_skip )
+        {
+            if ( reverse )
+                rc = add_char_2_dyn_string( line, '<' );
+            else
+                rc = add_char_2_dyn_string( line, '>' );
+            if ( !options->omit_qualities )
+                *qual = xrec->quality[ seq_pos + 1 ];
+        }
+        else
+        {
+            if ( ( state & align_iter_match ) == align_iter_match )
+                rc = add_char_2_dyn_string( line, ( reverse ? ',' : '.' ) );
+            else
+                rc = add_char_2_dyn_string( line, _4na_to_ascii( state, reverse ) );
+        }
+    }
+
+    if ( ( state & align_iter_insert ) == align_iter_insert )
+    {
+        const INSDC_4na_bin *bases;
+        uint32_t i;
+        uint32_t n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+        
+        rc = print_2_dyn_string( line, "+%u", n );
+        for ( i = 0; i < n && rc == 0; ++i )
+        {
+            rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+        }
+    }
+
+    if ( ( state & align_iter_delete ) == align_iter_delete )
+    {
+        const INSDC_4na_bin *bases;
+        INSDC_coord_zero ref_pos;
+        uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+        if ( bases != NULL )
+        {
+            uint32_t i;
+            rc = print_2_dyn_string( line, "-%u", n );
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+            }
+            free( (void *) bases );
+        }
+    }
+
+    if ( ( ( state & align_iter_last ) == align_iter_last )&& ( rc == 0 ) )
+        rc = add_char_2_dyn_string( line, '$' );
+
+    if ( options->show_id )
+        rc = print_2_dyn_string( line, "(%,lu:%,d-%,d/%u)",
+                                 rec->id, rec->pos + 1, rec->pos + rec->len, seq_pos );
+
+    return rc;
+}
+
+
+static rc_t walk_alignments( ReferenceIterator *ref_iter,
+                             struct dyn_string *line,
+							 struct dyn_string *events,
+                             struct dyn_string *qualities,
+                             pileup_options *options )
+{
+    uint32_t depth = 0;
+    rc_t rc;
+	
+	reset_dyn_string( events );
+    do
+    {
+        const PlacementRecord *rec;
+        rc = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+        if ( rc == 0 )
+            rc = walk_ref_position( ref_iter, rec, events, dyn_string_char( qualities, depth++ ), options );
+        if ( rc == 0 )
+            rc = Quitting();
+    } while ( rc == 0 );
+
+	if ( options->depth_per_spotgrp )
+		print_2_dyn_string( line, "%d\t", depth );
+
+	add_dyn_string_2_dyn_string( line, events );
+	
+    if ( !options->omit_qualities )
+    {
+        uint32_t i;
+        add_char_2_dyn_string( line, '\t' );
+        for ( i = 0; i < depth; ++i )
+        {
+            char * c = dyn_string_char( qualities, i );
+            add_char_2_dyn_string( line, *c + 33 );
+        }
+    }
+
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_spot_groups( ReferenceIterator *ref_iter,
+                              struct dyn_string *line,
+							  struct dyn_string *events,
+                              struct dyn_string *qualities,
+                              pileup_options *options )
+{
+    rc_t rc;
+	reset_dyn_string( events );
+    do
+    {
+        rc = ReferenceIteratorNextSpotGroup ( ref_iter, NULL, NULL );
+        if ( rc == 0 )
+            add_char_2_dyn_string( line, '\t' );
+        if ( rc == 0 )
+            rc = walk_alignments( ref_iter, line, events, qualities, options );
+    } while ( rc == 0 );
+
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_position( ReferenceIterator *ref_iter,
+                           const char * refname,
+                           struct dyn_string *line,
+						   struct dyn_string *events,
+                           struct dyn_string *qualities,
+                           pileup_options *options )
+{
+    INSDC_coord_zero pos;
+    uint32_t depth;
+    INSDC_4na_bin base;
+
+    rc_t rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, &base );
+    if ( rc != 0 )
+    {
+        if ( GetRCState( rc ) != rcDone )
+        {
+            LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+        }
+    }
+    else if ( ( depth > 0 )||( options->no_skip ) )
+    {
+        bool skip = skiplist_is_skip_position( options->skiplist, pos + 1 );
+        if ( !skip )
+        {
+            rc = expand_dyn_string( line, ( 5 * depth ) + 100 );
+            if ( rc == 0 )
+            {
+				rc = expand_dyn_string( events, ( 5 * depth ) + 100 );
+				if ( rc == 0 )
+				{
+					rc = expand_dyn_string( qualities, depth + 100 );
+					if ( rc == 0 )
+					{
+						char c = _4na_to_ascii( base, false );
+
+						reset_dyn_string( line );
+					
+						if ( options->depth_per_spotgrp )
+							rc = print_2_dyn_string( line, "%s\t%u\t%c", refname, pos + 1, c );
+						else
+							rc = print_2_dyn_string( line, "%s\t%u\t%c\t%u", refname, pos + 1, c, depth );
+							
+						if ( rc == 0 )
+						{
+							if ( depth > 0 )
+								rc = walk_spot_groups( ref_iter, line, events, qualities, options );
+
+							/* only one KOutMsg() per line... */
+							if ( rc == 0 )
+								rc = KOutMsg( "%s\n", dyn_string_char( line, 0 ) );
+
+							if ( GetRCState( rc ) == rcDone )
+								rc = 0;
+						}
+					}
+				}
+            }
+        }
+    } 
+    return rc;
+}
+
+
+static rc_t walk_reference_window( ReferenceIterator *ref_iter,
+                                   const char * refname,
+                                   struct dyn_string *line,
+								   struct dyn_string *events,
+                                   struct dyn_string *qualities,
+                                   pileup_options *options )
+{
+    rc_t rc = 0;
+    while ( rc == 0 )
+    {
+        rc = ReferenceIteratorNextPos ( ref_iter, !options->no_skip );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcDone )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+            }
+        }
+        else
+        {
+            rc = walk_position( ref_iter, refname, line, events, qualities, options );
+        }
+        if ( rc == 0 )
+        {
+            rc = Quitting();
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_reference( ReferenceIterator *ref_iter,
+                            const char * refname,
+                            pileup_options *options )
+{
+    struct dyn_string * line;
+    rc_t rc = allocated_dyn_string ( &line, 4096 );
+    if ( rc == 0 )
+    {
+		struct dyn_string * events;
+		rc_t rc = allocated_dyn_string ( &events, 4096 );
+		if ( rc == 0 )
+		{
+			struct dyn_string * qualities;
+			rc = allocated_dyn_string ( &qualities, 4096 );
+			if ( rc == 0 )
+			{
+				while ( rc == 0 )
+				{
+					rc = Quitting ();
+					if ( rc == 0 )
+					{
+						INSDC_coord_zero first_pos;
+						INSDC_coord_len len;
+						rc = ReferenceIteratorNextWindow ( ref_iter, &first_pos, &len );
+						if ( rc != 0 )
+						{
+							if ( GetRCState( rc ) != rcDone )
+							{
+								LOGERR( klogInt, rc, "ReferenceIteratorNextWindow() failed" );
+							}
+						}
+						else
+							rc = walk_reference_window( ref_iter, refname, line, events, qualities, options );
+					}
+				}
+				free_dyn_string ( qualities );
+			}
+			free_dyn_string( events );
+		}
+        free_dyn_string ( line );
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t walk_ref_iter( ReferenceIterator *ref_iter, pileup_options *options )
+{
+    rc_t rc = 0;
+    while( rc == 0 )
+    {
+        /* this is the 1st level of walking the reference-iterator: 
+           visiting each (requested) reference */
+        struct ReferenceObj const * refobj;
+
+        rc = ReferenceIteratorNextReference( ref_iter, NULL, NULL, &refobj );
+        if ( rc == 0 )
+        {
+            if ( refobj != NULL )
+            {
+                const char * refname = NULL;
+                if ( options->use_seq_name )
+                    rc = ReferenceObj_Name( refobj, &refname );
+                else
+                    rc = ReferenceObj_SeqId( refobj, &refname );
+
+                if ( rc == 0 )
+                {
+                    if ( options->skiplist != NULL )
+                        skiplist_enter_ref( options->skiplist, refname );
+                    rc = walk_reference( ref_iter, refname, options );
+                }
+                else
+                {
+                    if ( options->use_seq_name )
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+                    }
+                    else
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+                    }
+                }
+            }
+        }
+        else
+        {
+            if ( GetRCState( rc ) != rcDone )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    if ( GetRCState( rc ) == rcCanceled ) { rc = 0; }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+static rc_t add_quality_and_orientation( const VTable *tbl, const VCursor ** cursor,
+                                         bool omit_qualities, bool read_tlen, pileup_col_ids * cursor_ids )
+{
+    rc_t rc = VTableCreateCursorRead ( tbl, cursor );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VTableCreateCursorRead() failed" );
+    }
+
+    if ( rc == 0 && !omit_qualities )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_quality, COL_QUALITY );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(QUALITY) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_ref_orientation, COL_REF_ORIENTATION );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(REF_ORIENTATION) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_read_filter, COL_READ_FILTER );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(READ_FILTER) failed" );
+        }
+    }
+
+    if ( rc == 0 && read_tlen )
+    {
+        rc = VCursorAddColumn ( *cursor, &cursor_ids->idx_template_len, COL_TEMPLATE_LEN );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(TEMPLATE_LEN) failed" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_prim_cursor( const VDatabase *db, const VCursor ** cursor,
+                                 bool omit_qualities, bool read_tlen, pileup_col_ids * cursor_ids )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "PRIMARY_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(PRIMARY_ALIGNMENT) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities, read_tlen, cursor_ids );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_sec_cursor( const VDatabase *db, const VCursor ** cursor,
+                                bool omit_qualities, bool read_tlen, pileup_col_ids * cursor_ids )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "SECONDARY_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(SECONDARY_ALIGNMENT) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities, read_tlen, cursor_ids );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_evidence_cursor( const VDatabase *db, const VCursor ** cursor,
+                                     bool omit_qualities, bool read_tlen, pileup_col_ids * cursor_ids )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "EVIDENCE_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(EVIDENCE) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities, read_tlen, cursor_ids );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+#if 0
+static void show_placement_params( const char * prefix, const ReferenceObj *refobj,
+                                   uint32_t start, uint32_t end )
+{
+    const char * name;
+    rc_t rc = ReferenceObj_SeqId( refobj, &name );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+    }
+    else
+    {
+        KOutMsg( "prepare %s: <%s> %u..%u\n", prefix, name, start, end ) ;
+    }
+}
+#endif
+
+
+static rc_t make_cursor_ids( Vector *cursor_id_vector, pileup_col_ids ** cursor_ids )
+{
+    rc_t rc;
+    pileup_col_ids * ids = malloc( sizeof * ids );
+    if ( ids == NULL )
+        rc = RC ( rcApp, rcNoTarg, rcOpening, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorAppend ( cursor_id_vector, NULL, ids );
+        if ( rc != 0 )
+            free( ids );
+        else
+            *cursor_ids = ids;
+    }
+    return rc;
+}
+
+
+static rc_t CC prepare_section_cb( prepare_ctx * ctx, const struct reference_range * range )
+{
+    rc_t rc = 0;
+    INSDC_coord_len len;
+    if ( ctx->db == NULL || ctx->refobj == NULL )
+    {
+        rc = SILENT_RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+        /* it is opened in prepare_db_table even if ctx->db == NULL */
+        PLOGERR( klogErr, ( klogErr, rc, "failed to process $(path)",
+            "path=%s", ctx->path == NULL ? "input argument" : ctx->path));
+        ReportSilence();
+    }
+    else
+    {
+        rc = ReferenceObj_SeqLength( ctx->refobj, &len );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed" );
+        }
+        else
+        {
+            uint32_t start, end;
+            rc_t rc1 = 0, rc2 = 0, rc3 = 0;
+
+            if ( range == NULL )
+            {
+                start = 1;
+                end = ( len - start ) + 1;
+            }
+            else
+            {
+                start = get_ref_range_start( range );
+                end   = get_ref_range_end( range );
+            }
+
+            if ( start == 0 ) start = 1;
+            if ( ( end == 0 )||( end > len + 1 ) )
+            {
+                end = ( len - start ) + 1;
+            }
+            
+            /* depending on ctx->select prepare primary, secondary or both... */
+            if ( ctx->use_primary_alignments )
+            {
+                if ( ctx->prim_cur == NULL )
+                {
+                    rc1 = make_cursor_ids( ctx->data, &ctx->prim_cur_ids );
+                    if ( rc1 != 0 )
+                    {
+                        LOGERR( klogInt, rc1, "cannot create cursor-ids for prim. alignment cursor" );
+                    }
+                    else
+                        rc1 = prepare_prim_cursor( ctx->db, &ctx->prim_cur, ctx->omit_qualities,
+                                                   ctx->read_tlen, ctx->prim_cur_ids );
+                }
+
+                if ( rc1 == 0 )
+                {
+                    /* show_placement_params( "primary", ctx->refobj, start, end ); */
+                    rc1 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          ctx->prim_cur,        /* align-cursor */
+                                                          primary_align_ids,    /* which id's */
+                                                          ctx->spot_group,      /* what read-group */
+                                                          ctx->prim_cur_ids     /* placement-context */
+                                                         );
+                    if ( rc1 != 0 )
+                    {
+                        LOGERR( klogInt, rc1, "ReferenceIteratorAddPlacements(prim) failed" );
+                    }
+                }
+            }
+
+            if ( ctx->use_secondary_alignments )
+            {
+                if ( ctx->sec_cur == NULL )
+                {
+                    rc2 = make_cursor_ids( ctx->data, &ctx->sec_cur_ids );
+                    if ( rc2 != 0 )
+                    {
+                        LOGERR( klogInt, rc2, "cannot create cursor-ids for sec. alignment cursor" );
+                    }
+                    else
+                        rc2 = prepare_sec_cursor( ctx->db, &ctx->sec_cur, ctx->omit_qualities,
+                                                  ctx->read_tlen, ctx->sec_cur_ids );
+                }
+
+                if ( rc2 == 0 )
+                {
+                    /* show_placement_params( "secondary", ctx->refobj, start, end ); */
+                    rc2 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          ctx->sec_cur,         /* align-cursor */
+                                                          secondary_align_ids,  /* which id's */
+                                                          ctx->spot_group,      /* what read-group */
+                                                          ctx->sec_cur_ids      /* placement-context */
+                                                         );
+                    if ( rc2 != 0 )
+                    {
+                        LOGERR( klogInt, rc2, "ReferenceIteratorAddPlacements(sec) failed" );
+                    }
+                }
+            }
+
+            if ( ctx->use_evidence_alignments )
+            {
+                if ( ctx->ev_cur == NULL )
+                {
+                    rc3 = make_cursor_ids( ctx->data, &ctx->ev_cur_ids );
+                    if ( rc3 != 0 )
+                    {
+                        LOGERR( klogInt, rc3, "cannot create cursor-ids for ev. alignment cursor" );
+                    }
+                    else
+                        rc3 = prepare_evidence_cursor( ctx->db, &ctx->ev_cur, ctx->omit_qualities,
+                                                       ctx->read_tlen, ctx->ev_cur_ids );
+                }
+
+                if ( rc3 == 0 )
+                {
+                    /* show_placement_params( "evidende", ctx->refobj, start, end ); */
+                    rc3 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          ctx->ev_cur,          /* align-cursor */
+                                                          evidence_align_ids,   /* which id's */
+                                                          ctx->spot_group,      /* what read-group */
+                                                          ctx->ev_cur_ids       /* placement-context */
+                                                         );
+                    if ( rc3 != 0 )
+                    {
+                        LOGERR( klogInt, rc3, "ReferenceIteratorAddPlacements(evidence) failed" );
+                    }
+                }
+            }
+
+            if ( rc1 == SILENT_RC( rcAlign, rcType, rcAccessing, rcRow, rcNotFound ) )
+            { /* from allocate_populate_rec */
+                rc = rc1;
+            }
+            else if ( rc1 == 0 )
+                rc = 0;
+            else if ( rc2 == 0 )
+                rc = 0;
+            else if ( rc3 == 0 )
+                rc = 0;
+            else
+                rc = rc1;
+        }
+    }
+    return rc;
+}
+
+
+typedef struct foreach_arg_ctx
+{
+    pileup_options *options;
+    const VDBManager *vdb_mgr;
+    VSchema *vdb_schema;
+    ReferenceIterator *ref_iter;
+    BSTree *ranges;
+    Vector *cursor_ids;
+} foreach_arg_ctx;
+
+
+/* called for each source-file/accession */
+static rc_t CC on_argument( const char * path, const char * spot_group, void * data )
+{
+    rc_t rc = 0;
+    foreach_arg_ctx * ctx = ( foreach_arg_ctx * )data;
+
+    int path_type = ( VDBManagerPathType ( ctx->vdb_mgr, "%s", path ) & ~ kptAlias );
+    if ( path_type != kptDatabase )
+    {
+        rc = RC ( rcApp, rcNoTarg, rcOpening, rcItem, rcUnsupported );
+        PLOGERR( klogErr, ( klogErr, rc, "failed to open '$(path)', it is not a vdb-database", "path=%s", path ) );
+    }
+    else
+    {
+        const VDatabase *db;
+        rc = VDBManagerOpenDBRead ( ctx->vdb_mgr, &db, ctx->vdb_schema, "%s", path );
+        if ( rc != 0 )
+        {
+            rc = RC ( rcApp, rcNoTarg, rcOpening, rcItem, rcUnsupported );
+            PLOGERR( klogErr, ( klogErr, rc, "failed to open '$(path)'", "path=%s", path ) );
+        }
+        else
+        {
+            bool is_csra = VDatabaseIsCSRA ( db );
+            VDatabaseRelease ( db );
+            if ( !is_csra )
+            {
+                rc = RC ( rcApp, rcNoTarg, rcOpening, rcItem, rcUnsupported );
+                PLOGERR( klogErr, ( klogErr, rc, "failed to open '$(path)', it is not a csra-database", "path=%s", path ) );
+            }
+            else
+            {
+                prepare_ctx prep;   /* from cmdline_cmn.h */
+
+                prep.omit_qualities = ctx->options->omit_qualities;
+                prep.read_tlen = ctx->options->read_tlen;
+                prep.use_primary_alignments = ( ( ctx->options->cmn.tab_select & primary_ats ) == primary_ats );
+                prep.use_secondary_alignments = ( ( ctx->options->cmn.tab_select & secondary_ats ) == secondary_ats );
+                prep.use_evidence_alignments = ( ( ctx->options->cmn.tab_select & evidence_ats ) == evidence_ats );
+                prep.ref_iter = ctx->ref_iter;
+                prep.spot_group = spot_group;
+                prep.on_section = prepare_section_cb;
+                prep.data = ctx->cursor_ids;
+                prep.path = path;
+                prep.db = NULL;
+                prep.prim_cur = NULL;
+                prep.sec_cur = NULL;
+                prep.ev_cur = NULL;
+                
+                rc = prepare_ref_iter( &prep, ctx->vdb_mgr, ctx->vdb_schema, path, ctx->ranges ); /* cmdline_cmn.c */
+                if ( rc == 0 && prep.db == NULL )
+                {
+                    rc = RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+                    LOGERR( klogInt, rc, "unsupported source" );
+                }
+                if ( prep.prim_cur != NULL ) VCursorRelease( prep.prim_cur );
+                if ( prep.sec_cur != NULL ) VCursorRelease( prep.sec_cur );
+                if ( prep.ev_cur != NULL ) VCursorRelease( prep.ev_cur );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* free all cursor-ids-blocks created in parallel with the alignment-cursor */
+static void CC cur_id_vector_entry_whack( void *item, void *data )
+{
+    pileup_col_ids * ids = item;
+    free( ids );
+}
+
+
+static rc_t pileup_main( Args * args, pileup_options *options )
+{
+    foreach_arg_ctx arg_ctx;
+    pileup_callback_data cb_data;
+    KDirectory * dir = NULL;
+    Vector cur_ids_vector;
+
+    /* (1) make the align-manager ( necessary to make a ReferenceIterator... ) */
+    rc_t rc = AlignMgrMakeRead ( &cb_data.almgr );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+    }
+
+    VectorInit ( &cur_ids_vector, 0, 20 );
+    cb_data.options = options;
+    arg_ctx.options = options;
+    arg_ctx.vdb_schema = NULL;
+    arg_ctx.cursor_ids = &cur_ids_vector;
+
+    /* (2) make the reference-iterator */
+    if ( rc == 0 )
+    {
+        PlacementRecordExtendFuncs cb_block;
+
+        cb_block.data = &cb_data;
+        cb_block.destroy = NULL;
+        cb_block.populate = populate_tooldata;
+        cb_block.alloc_size = alloc_size;
+        cb_block.fixed_size = 0;
+
+        rc = AlignMgrMakeReferenceIterator ( cb_data.almgr, &arg_ctx.ref_iter, &cb_block, options->minmapq );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "AlignMgrMakeReferenceIterator() failed" );
+        }
+    }
+
+    /* (3) make a KDirectory ( necessary to make a vdb-manager ) */
+    if ( rc == 0 )
+    {
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+    }
+
+    /* (4) make a vdb-manager */
+    if ( rc == 0 )
+    {
+        rc = VDBManagerMakeRead ( &arg_ctx.vdb_mgr, dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+        }
+        else
+        {
+            ReportSetVDBManager( arg_ctx.vdb_mgr );
+        }
+    }
+
+
+    if ( rc == 0 && options->cmn.no_mt )
+    {
+        rc = VDBManagerDisablePagemapThread ( arg_ctx.vdb_mgr );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDBManagerDisablePagemapThread() failed" );
+        }
+    }
+    
+    /* (5) make a vdb-schema */
+    if ( rc == 0 )
+    {
+        rc = VDBManagerMakeSRASchema( arg_ctx.vdb_mgr, &arg_ctx.vdb_schema );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDBManagerMakeSRASchema() failed" );
+        }
+        else if ( options->cmn.schema_file != NULL )
+        {
+            rc = VSchemaParseFile( arg_ctx.vdb_schema, "%s", options->cmn.schema_file );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VSchemaParseFile() failed" );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        switch( options->function )
+        {
+            case sra_pileup_counters    : options->omit_qualities = true;
+                                          options->read_tlen = false;
+                                          break;
+
+            case sra_pileup_stat        : options->omit_qualities = true;
+                                          options->read_tlen = true;
+                                          break;
+
+            case sra_pileup_debug       : options->omit_qualities = true;
+                                          options->read_tlen = true;
+                                          break;
+
+            case sra_pileup_samtools    : options->read_tlen = false;
+                                          break;
+                                          
+            case sra_pileup_mismatch    : options->omit_qualities = true;
+                                          options->read_tlen = false;
+                                          break;
+
+            case sra_pileup_index      : options->omit_qualities = true;
+                                          options->read_tlen = false;
+                                          break;
+
+            case sra_pileup_varcount   : options->omit_qualities = true;
+                                          options->read_tlen = false;
+                                          break;
+        }
+    }
+
+    /* (5) loop through the given input-filenames and load the ref-iter with it's input */
+    if ( rc == 0 )
+    {
+        BSTree regions;
+        rc = init_ref_regions( &regions, args ); /* cmdline_cmn.c */
+        if ( rc == 0 )
+        {
+            bool empty = false;
+
+            check_ref_regions( &regions, options->merge_dist ); /* sanitize input, merge slices... */
+            options->skiplist = skiplist_make( &regions ); /* create skiplist for neighboring slices */
+
+            arg_ctx.ranges = ®ions;
+            rc = foreach_argument( args, dir, options->div_by_spotgrp, &empty, on_argument, &arg_ctx ); /* cmdline_cmn.c */
+            if ( empty )
+            {
+                Usage ( args );
+                rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcInsufficient );
+            }
+            free_ref_regions( &regions );
+        }
+    }
+
+    /* (6) walk the "loaded" ref-iterator ===> perform the pileup */
+    if ( rc == 0 )
+    {
+        /* ============================================== */
+        switch( options->function )
+        {
+            case sra_pileup_stat        : rc = walk_stat( arg_ctx.ref_iter, options ); break;
+            case sra_pileup_counters    : rc = walk_counters( arg_ctx.ref_iter, options ); break;
+            case sra_pileup_debug       : rc = walk_debug( arg_ctx.ref_iter, options ); break;
+            case sra_pileup_mismatch    : rc = walk_mismatches( arg_ctx.ref_iter, options ); break;
+            case sra_pileup_index       : rc = walk_index( arg_ctx.ref_iter, options ); break;
+            case sra_pileup_varcount    : rc = walk_varcount( arg_ctx.ref_iter, options ); break;
+			case sra_pileup_indels      : rc = walk_indels( arg_ctx.ref_iter, options ); break;
+            default :  rc = walk_ref_iter( arg_ctx.ref_iter, options ); break;
+        }
+        /* ============================================== */
+    }
+
+    if ( arg_ctx.vdb_mgr != NULL ) VDBManagerRelease( arg_ctx.vdb_mgr );
+    if ( arg_ctx.vdb_schema != NULL ) VSchemaRelease( arg_ctx.vdb_schema );
+    if ( dir != NULL ) KDirectoryRelease( dir );
+    if ( arg_ctx.ref_iter != NULL ) ReferenceIteratorRelease( arg_ctx.ref_iter );
+    if ( cb_data.almgr != NULL ) AlignMgrRelease ( cb_data.almgr );
+    VectorWhack ( &cur_ids_vector, cur_id_vector_entry_whack, NULL );
+
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    ReportBuildDate( __DATE__ );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    }
+    else
+    {
+        Args * args;
+
+        /* KLogHandlerSetStdErr(); */
+        rc = ArgsMakeAndHandle( &args, argc, argv, 2,
+            MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ],
+            CommonOptions_ptr(), CommonOptions_count() );
+        if ( rc == 0 )
+        {
+            rc = parse_inf_file( args ); /* cmdline_cmn.h */
+            if ( rc == 0 )
+            {
+                pileup_options options;
+                rc = get_pileup_options( args, &options );
+                if ( rc == 0 )
+                {
+					out_redir redir; /* from out_redir.h */
+					enum out_redir_mode mode;
+
+					options.skiplist = NULL;
+					
+					if ( options.cmn.gzip_output )
+						mode = orm_gzip;
+					else if ( options.cmn.bzip_output )
+						mode = orm_bzip2;
+					else
+						mode = orm_uncompressed;
+
+					rc = init_out_redir( &redir, mode, options.cmn.output_file, 32 * 1024 ); /* from out_redir.c */
+					
+					/*
+                    if ( options.cmn.output_file != NULL )
+                    {
+                        rc = set_stdout_to( options.cmn.gzip_output,
+                                            options.cmn.bzip_output,
+                                            options.cmn.output_file,
+                                            32 * 1024 );
+                    }
+					*/
+					
+                    if ( rc == 0 )
+                    {
+                        if ( options.function == sra_pileup_report_ref ||
+                             options.function == sra_pileup_report_ref_ext )
+                        {
+                            rc = report_on_reference( args, options.function == sra_pileup_report_ref_ext ); /* reref.c */
+                        }
+                        else if ( options.function == sra_pileup_deletes )
+                        {
+                            rc = report_deletes( args, 10 ); /* see above */
+                        }
+                        else if ( options.function == sra_pileup_test )
+                        {
+                            rc = pileup_v2( args, &options ); /* see above */
+                        }
+                        else
+                        {
+                            /* ============================== */
+                            rc = pileup_main( args, &options );
+                            /* ============================== */
+                        }
+                    }
+
+					/*
+                    if ( options.cmn.output_file != NULL )
+                        release_stdout_redirection();
+					*/
+					release_out_redir( &redir ); /* from out_redir.c */
+					
+                    if ( options.skiplist != NULL )
+                        skiplist_release( options.skiplist );
+                }
+            }
+            ArgsWhack( args );
+        }
+    }
+
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/walk_debug.c b/tools/sra-pileup/walk_debug.c
new file mode 100644
index 0000000..18d7ae7
--- /dev/null
+++ b/tools/sra-pileup/walk_debug.c
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "ref_walker_0.h"
+#include "4na_ascii.h"
+
+#include <klib/out.h>
+#include <klib/printf.h>
+
+static rc_t CC walk_debug_enter_ref( walk_data * data )
+{   return KOutMsg( "ENTER REF '%s' ( start:%,u / len:%,u )\n", data->ref_name, data->ref_start, data->ref_len );   }
+
+static rc_t CC walk_debug_exit_ref( walk_data * data )
+{   return KOutMsg( "EXIT  REF '%s' ( start: %,u / len:%,u )\n", data->ref_name, data->ref_start, data->ref_len );   }
+
+static rc_t CC walk_debug_enter_ref_window( walk_data * data )
+{   return KOutMsg( "  ENTER REF-WINDOW ( start: %,u / len:%,u )\n", data->ref_window_start, data->ref_window_len );   }
+
+static rc_t CC walk_debug_exit_ref_window( walk_data * data )
+{   return KOutMsg( "  EXIT  REF-WINDOW ( start: %,u / len:%,u )\n", data->ref_window_start, data->ref_window_len );   }
+
+static rc_t CC walk_debug_enter_ref_pos( walk_data * data )
+{   return KOutMsg( "    ENTER REF-POS ( %u / depth=%u / '%c' )\n", data->ref_pos, data->depth, _4na_to_ascii( data->ref_base, false ) );   }
+
+static rc_t CC walk_debug_exit_ref_pos( walk_data * data )
+{   return KOutMsg( "    EXIT  REF-POS ( %u / depth=%u / '%c' )\n", data->ref_pos, data->depth, _4na_to_ascii( data->ref_base, false ) );   }
+
+static rc_t CC walk_debug_enter_sg( walk_data * data )
+{   return KOutMsg( "      ENTER SPOTGROUP '%s'\n", data->spotgroup );   }
+
+static rc_t CC walk_debug_exit_sg( walk_data * data )
+{   return KOutMsg( "      EXIT SPOTGROUP '%s'\n", data->spotgroup );   }
+
+static rc_t CC walk_debug_placement( walk_data * data )
+{
+	int32_t state = data->state;
+	bool m = ( ( state & align_iter_match ) == align_iter_match );
+
+    rc_t rc = KOutMsg( "        #%.08lu %c %c %c ",
+						data->rec->id,
+						( data->xrec->reverse ? 'R' : 'F' ),
+						_4na_to_ascii( data->state, data->xrec->reverse ),
+						( m ? 'M' : '!' ) );
+	if ( rc == 0 )
+	{
+		if ( ( state & align_iter_first ) == align_iter_first )
+		{
+			char c = data->rec->mapq + 33;
+			if ( c > '~' ) { c = '~'; }
+			if ( c < 33 ) { c = 33; }
+			rc = KOutMsg( "^%c ", c );
+		}
+		else if ( ( state & align_iter_last ) == align_iter_last )	
+		{
+			rc = KOutMsg( "$ " );
+		}
+	}
+
+	if ( rc == 0 && ( ( state & align_iter_skip ) == align_iter_skip ) )
+	{
+		rc = KOutMsg( "%c ", ( data->xrec->reverse ? '<' : '>' ) );
+	}
+
+    if ( rc == 0 && ( ( state & align_iter_insert ) == align_iter_insert ) )
+    {
+		const INSDC_4na_bin *bases;
+        uint32_t i, n = ReferenceIteratorBasesInserted ( data -> ref_iter, &bases );
+		if ( bases != NULL )
+		{
+			char temp[ 4096 ];
+			if ( n > sizeof temp ) n = sizeof temp;
+			for ( i = 0; i < n; ++i ) temp[ i ] = _4na_to_ascii( bases[ i ], data->xrec->reverse );
+			rc = KOutMsg( "+%u{%.*s} ", n, n, temp );
+		}
+    }
+	
+    if ( rc == 0 && ( ( state & align_iter_delete ) == align_iter_delete ) )
+    {
+        INSDC_coord_zero ref_pos;
+		const INSDC_4na_bin *bases;
+        uint32_t i, n = ReferenceIteratorBasesDeleted ( data -> ref_iter, &ref_pos, &bases );
+        if ( bases != NULL )
+        {
+			char temp[ 4096 ];
+			if ( n > sizeof temp ) n = sizeof temp;
+			for ( i = 0; i < n; ++i ) temp[ i ] = _4na_to_ascii( bases[ i ], data->xrec->reverse );
+			rc = KOutMsg( "-%u{%.*s} ", n, n, temp );
+            free( (void *) bases );
+        }
+    }
+	
+	if ( rc == 0 )
+		rc = KOutMsg( "( TLEN %,i )\n",	data->xrec->tlen );
+		
+	return rc;
+}
+
+
+rc_t walk_debug( ReferenceIterator *ref_iter, pileup_options *options )
+{
+    rc_t rc;
+    walk_data data;
+    walk_funcs funcs;
+
+    data.ref_iter = ref_iter;
+    data.options = options;
+    
+    funcs.on_enter_ref = walk_debug_enter_ref;
+    funcs.on_exit_ref = walk_debug_exit_ref;
+
+    funcs.on_enter_ref_window = walk_debug_enter_ref_window;
+    funcs.on_exit_ref_window = walk_debug_exit_ref_window;
+
+    funcs.on_enter_ref_pos = walk_debug_enter_ref_pos;
+    funcs.on_exit_ref_pos = walk_debug_exit_ref_pos;
+
+    funcs.on_enter_spotgroup = walk_debug_enter_sg;
+    funcs.on_exit_spotgroup = walk_debug_exit_sg;
+    
+    funcs.on_placement = walk_debug_placement;
+
+    rc = walk_0( &data, &funcs );
+    return rc;
+}
diff --git a/tools/sra-pileup/walk_debug.h b/tools/sra-pileup/walk_debug.h
new file mode 100644
index 0000000..03fc1b0
--- /dev/null
+++ b/tools/sra-pileup/walk_debug.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_walk_debug_
+#define _h_walk_debug_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ref_walker_0.h"
+
+rc_t walk_debug( ReferenceIterator *ref_iter, pileup_options *options );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_walk_debug_ */
diff --git a/tools/sra-pileup/writer.c b/tools/sra-pileup/writer.c
new file mode 100644
index 0000000..b24c1d9
--- /dev/null
+++ b/tools/sra-pileup/writer.c
@@ -0,0 +1,137 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/report.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include "cmdline_cmn.h"
+#include "writer.h"
+
+struct {
+    KWrtWriter writer;
+    void* data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = {NULL};
+
+static
+rc_t CC BufferedWriter(void* self, const char* buffer, size_t bufsize, size_t* num_writ)
+{
+    rc_t rc = 0;
+
+    assert(buffer != NULL);
+    assert(num_writ != NULL);
+
+    do {
+        if( (rc = KFileWrite(g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ)) == 0 ) {
+            buffer += *num_writ;
+            bufsize -= *num_writ;
+            g_out_writer.pos += *num_writ;
+        }
+    } while(rc == 0 && bufsize > 0);
+    return rc;
+}
+
+rc_t OUTSTR_(const char* buf, size_t buf_sz)
+{
+    size_t nm;
+    return BufferedWriter(NULL, buf, buf_sz, &nm);
+}
+
+rc_t BufferedWriterMake(const common_options* opt)
+{
+    rc_t rc = 0;
+
+    if( opt == NULL || (opt->gzip_output && opt->bzip_output) ) {
+        rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcInvalid);
+    } else if( g_out_writer.writer != NULL ) {
+        rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous);
+    }
+    if( opt->output_file != NULL ) {
+        KDirectory *dir;
+        if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+            rc = KDirectoryCreateFile(dir, &g_out_writer.kfile, false, 0664, kcmInit, "%s", opt->output_file);
+            KDirectoryRelease(dir);
+        }
+    } else {
+        KOutHandlerSetStdOut();
+        KStsHandlerSetStdErr();
+        KLogHandlerSetStdErr();
+        KDbgHandlerSetStdErr();
+        rc = KFileMakeStdOut(&g_out_writer.kfile);
+    }
+    if( rc == 0 ) {
+        g_out_writer.pos = 0;
+        if( opt->gzip_output ) {
+            KFile* gz;
+            if( (rc = KFileMakeGzipForWrite(&gz, g_out_writer.kfile)) == 0 ) {
+                KFileRelease(g_out_writer.kfile);
+                g_out_writer.kfile = gz;
+            }
+        } else if( opt->bzip_output ) {
+            KFile* bz;
+            if( (rc = KFileMakeBzip2ForWrite(&bz, g_out_writer.kfile)) == 0 ) {
+                KFileRelease(g_out_writer.kfile);
+                g_out_writer.kfile = bz;
+            }
+        }
+        if( rc == 0 ) {
+            KFile* buf;
+            if( (rc = KBufFileMakeWrite(&buf, g_out_writer.kfile, false, 128 * 1024)) == 0 ) {
+                KFileRelease(g_out_writer.kfile);
+                g_out_writer.kfile = buf;
+                g_out_writer.writer = KOutWriterGet();
+                g_out_writer.data = KOutDataGet();
+                rc = KOutHandlerSet(BufferedWriter, &g_out_writer);
+            }
+        }
+    }
+    return rc;
+}
+
+void BufferedWriterRelease( bool flush )
+{
+    if( flush ) {
+        /* avoid flushing buffered data after failure */
+        KFileRelease(g_out_writer.kfile);
+    }
+    if( g_out_writer.writer != NULL ) {
+        KOutHandlerSet(g_out_writer.writer, g_out_writer.data);
+    }
+    g_out_writer.writer = NULL;
+}
diff --git a/tools/sra-pileup/writer.h b/tools/sra-pileup/writer.h
new file mode 100644
index 0000000..9ef8a0c
--- /dev/null
+++ b/tools/sra-pileup/writer.h
@@ -0,0 +1,32 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+
+rc_t BufferedWriterMake(const common_options* opt);
+
+void BufferedWriterRelease(bool flush);
+
+rc_t OUTSTR_(const char* buf, size_t buf_sz);
diff --git a/tools/sra-seq-count/Makefile b/tools/sra-seq-count/Makefile
new file mode 100644
index 0000000..bfb1d33
--- /dev/null
+++ b/tools/sra-seq-count/Makefile
@@ -0,0 +1,83 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-seq-count
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	sra-seq-count
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# Common dumper definitions
+#
+TOOL_LIBS = \
+	-skapp	\
+	-stk-version \
+	-sncbi-ngs-c++ \
+	-sngs-c++ \
+	-sncbi-vdb-static
+
+#-------------------------------------------------------------------------------
+# fastq-dump
+#
+TOOL_SRC = \
+	main_fkt \
+	sra-seq-count
+	
+INCDIRS += -I $(TOP)/ngs/ngs-c++
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+$(BINDIR)/sra-seq-count: $(TOOL_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TOOL_LIBS)
diff --git a/tools/sra-seq-count/main_fkt.c b/tools/sra-seq-count/main_fkt.c
new file mode 100644
index 0000000..60d0720
--- /dev/null
+++ b/tools/sra-seq-count/main_fkt.c
@@ -0,0 +1,203 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "options.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#define OPTION_ID_ATTR         	"id_attr"
+#define OPTION_FEATURE_TYPE    	"feature_type"
+#define OPTION_MODE            	"mode"
+
+#define ALIAS_ID_ATTR          	"i"
+#define ALIAS_FEATURE_TYPE     	"f"
+#define ALIAS_MODE     			"m"
+
+#define DEFAULT_ID_ATTR         "gene_id"
+#define DEFAULT_FEATURE_TYPE    "exon"
+
+static const char * id_attr_usage[] 		= { "id-attr (default gene_id)", NULL };
+static const char * feature_type_usage[] 	= { "feature-type (default exon)", NULL };
+static const char * mode_usage[] 			= { "output-mode (norm, debug)", NULL };
+
+OptDef sra_seq_count_options[] =
+{
+    { OPTION_ID_ATTR, 		ALIAS_ID_ATTR,			NULL, id_attr_usage,		1, true, false },
+    { OPTION_FEATURE_TYPE, 	ALIAS_FEATURE_TYPE, 	NULL, feature_type_usage, 	1, true, false },
+    { OPTION_MODE, 			ALIAS_MODE, 			NULL, mode_usage, 			1, true, false }	
+};
+
+const char UsageDefaultName[] = "sra-seq-count";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ( 	"\n"
+						"Usage:\n"
+						"  %s <sra-accession> <gtf-file> [options]\n"
+						"\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+    HelpOptionLine ( ALIAS_ID_ATTR,			OPTION_ID_ATTR,			NULL, 		id_attr_usage );
+    HelpOptionLine ( ALIAS_FEATURE_TYPE, 	OPTION_FEATURE_TYPE, 	NULL, 		feature_type_usage );
+    HelpOptionLine ( ALIAS_MODE, 			OPTION_MODE, 			NULL, 		mode_usage );
+
+    KOutMsg ( "\n" );	
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+static rc_t get_str_option( const Args * args, const char * option_name, const char ** dst, const char * default_value )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option_name, &count );
+    if ( ( rc == 0 )&&( count > 0 ) )
+        rc = ArgsOptionValue( args, option_name, 0, (const void **)dst );
+	else
+		(*dst) = string_dup_measure ( default_value, NULL );
+    return rc;
+}
+
+
+static rc_t gather_options( const Args * args, struct sra_seq_count_options * options )
+{
+	rc_t rc;
+
+	memset ( options, 0, sizeof *options );
+	rc = get_str_option( args, OPTION_ID_ATTR, &options->id_attrib, DEFAULT_ID_ATTR );
+	if ( rc == 0 )
+		rc = get_str_option( args, OPTION_FEATURE_TYPE, &options->feature_type, DEFAULT_FEATURE_TYPE );
+	if ( rc == 0 )
+	{
+		const char * mode;
+		rc = get_str_option( args, OPTION_MODE, &mode, "norm" );
+		if ( rc == 0 )
+		{
+			if ( mode[ 0 ] == 'd' && mode[ 1 ] == 'e' && mode[ 2 ] == 'b' && mode[ 3 ] == 'u' &&
+				 mode[ 4 ] == 'g' && mode[ 5 ] == 0 )
+			{
+				options -> output_mode = SSC_MODE_DEBUG;
+			}
+		}
+	}
+	
+	if ( rc == 0 )
+	{
+		uint32_t count;
+		rc = ArgsParamCount( args, &count );
+		if ( rc == 0 )
+		{
+			if ( count == 2 )
+			{
+				rc = ArgsParamValue( args, 0, (const void **)&options->sra_accession );
+				if ( rc == 0 )
+					rc = ArgsParamValue( args, 1, (const void **)&options->gtf_file );
+				if ( rc == 0 )
+					options -> valid = true;
+			}
+			else
+			{
+				UsageSummary ( UsageDefaultName );
+			}
+		}
+	}
+	return rc;
+}
+
+
+static rc_t report_options( const struct sra_seq_count_options * options )
+{
+	rc_t rc = KOutMsg( "accession    : %s\n", options->sra_accession );
+	if ( rc == 0 )
+		rc =  KOutMsg( "gtf-file     : %s\n", options->gtf_file );
+	if ( rc == 0 )
+		rc =  KOutMsg( "id-attr      : %s\n", options->id_attrib );
+	if ( rc == 0 )
+		rc =  KOutMsg( "feature-type : %s\n", options->feature_type );
+	if ( rc == 0 )
+	{
+		switch ( options->output_mode )
+		{
+			case SSC_MODE_NORMAL : rc =  KOutMsg( "output-mode  : mormal\n" ); break;
+			case SSC_MODE_DEBUG  : rc =  KOutMsg( "output-mode  : debug\n" ); break;
+			default              : rc =  KOutMsg( "output-mode  : unknown\n" ); break;
+		}
+	}
+	return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+								  sra_seq_count_options, 
+								  ( sizeof sra_seq_count_options / sizeof sra_seq_count_options [ 0 ] ) );
+    if ( rc == 0 )
+    {
+        struct sra_seq_count_options options;
+		rc = gather_options( args, &options );
+		if ( rc == 0 && options.valid )
+		{
+			rc = report_options( &options );
+			if ( rc == 0 )
+			{
+				rc = matching( &options );	/* here we are calling into C++ */
+			}
+		}
+        ArgsWhack ( args );
+    }
+    return rc;
+}
diff --git a/tools/sra-seq-count/options.h b/tools/sra-seq-count/options.h
new file mode 100644
index 0000000..95d4c57
--- /dev/null
+++ b/tools/sra-seq-count/options.h
@@ -0,0 +1,56 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sra_seq_count_options_
+#define _h_sra_seq_count_options_
+
+#include <os-native.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SSC_MODE_NORMAL	0
+#define SSC_MODE_DEBUG	1
+
+struct sra_seq_count_options
+{
+    const char * sra_accession;
+    const char * gtf_file;
+    const char * id_attrib;
+    const char * feature_type;
+	int output_mode;
+	bool valid;
+};
+
+int matching( const struct sra_seq_count_options * options );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/tools/sra-seq-count/range.hpp b/tools/sra-seq-count/range.hpp
new file mode 100644
index 0000000..c91498b
--- /dev/null
+++ b/tools/sra-seq-count/range.hpp
@@ -0,0 +1,307 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _hpp_seq_ranges_
+#define _hpp_seq_ranges_
+
+#include <list>
+
+namespace seq_ranges {
+
+enum e_range_relation {
+	rr_before,
+	rr_begin,
+	rr_span,
+	rr_inside,
+	rr_end,
+	rr_after
+};
+
+
+/* -----------------------------------------------------------------------
+	range-relations:
+
+	A            |-------------|
+	B   |-----|
+	A.range_rel( B ) = rr_before
+
+	A      |-------------|
+	B   |-----|
+	A.range_rel( B ) = rr_begin
+
+	A      |-------------|
+	B   |-------------------|
+	A.range_rel( B ) = rr_span
+	
+	A      |-------------|
+	B           |-----|
+	A.range_rel( B ) = rr_inside
+	
+	A   |-------------|
+	B              |-----|
+	A.range_rel( B ) = rr_end
+
+	A   |-------------|
+	B                    |-----|
+	A.range_rel( B ) = rr_after
+	
+   ----------------------------------------------------------------------- */
+
+class range
+{
+	private :
+		long start;
+		long end;
+
+	public :
+		range( void ) : start( 0 ), end( 0 ) { }
+		range( long start_, long end_ ) : start( start_ ), end( end_ ) { }
+		range( const range &other ) : start( other.start ), end( other.end ) { }
+		
+		range( const std::string &start_, const std::string &end_ ) : start( 0 ), end( 0 )
+		{
+			bool valid = ( convert_value( start_, start ) && convert_value( end_, end ) );
+			if ( !valid ) set( 0, 0 );
+		}
+
+		range& operator= ( const range &other )
+		{
+			if ( this == &other ) return *this;
+			start = other.start;
+			end = other.end;
+			return *this;
+		}
+
+		void set( long start_, long end_ ) { start = start_; end = end_; }
+
+		static bool convert_value( const std::string value_, long &value )
+		{
+			bool res = true;
+			std::istringstream ( value_ ) >> value;
+			if ( value < 1 )
+				res = false;
+			return res;
+		}
+		
+		/* does this range end before the other range starts ? */
+		bool ends_before( const range &other ) const { return ( end < other.start ); }
+
+		/* does this range start after the other range ends ? */
+		bool starts_after( const range &other ) const { return ( start > other.end ); }
+		
+		bool intersect( const range &other ) const
+		{
+			e_range_relation rr = range_relation( other );
+			return ( rr == rr_begin || rr == rr_span || rr == rr_inside || rr == rr_end );
+		}
+
+		bool intersect( const long value ) const
+		{ return ( value >= start && value <= end ); }
+		
+		void include( const range &other )
+		{
+			if ( other.start < start ) start = other.start;
+			if ( other.end > end ) end = other.end;
+		}
+		
+		bool merge( const range &other )
+		{
+			bool res = intersect( other );
+			if ( res ) include( other );
+			return res;
+		}
+
+		enum e_range_relation range_relation( const range &other ) const
+		{
+			enum e_range_relation res;
+			if ( other.start < start )
+			{
+				if ( other.end < start )
+					res = rr_before;
+				else if ( other.end <= end )
+					res = rr_begin;
+				else
+					res = rr_span;
+			}
+			else
+			{
+				if ( other.start <= end )
+				{
+					if ( other.end <= end )
+						res = rr_inside;
+					else
+						res = rr_end;
+				}
+				else
+					res = rr_after;
+			}
+			
+			return res;
+		}
+		
+		long get_start( void ) const { return start; }
+		long get_end( void ) const { return end; }
+		bool empty( void ) const { return ( start == 0 && end == 0 ); }
+
+		void print( std::ostream &stream ) const { stream << "[ " << start << " .. " << end << " ]"; }
+
+		friend std::ostream& operator<< ( std::ostream &stream, const range &other )
+		{
+			other.print( stream );
+			return stream;
+		}
+		
+		static std::string range_relation_2_str( enum e_range_relation rr )
+		{
+			switch ( rr )
+			{
+				case rr_before : return std::string( "before" ); break;
+				case rr_begin  : return std::string( "begin" ); break;
+				case rr_span   : return std::string( "span" ); break;
+				case rr_inside : return std::string( "inside" ); break;		
+				case rr_end    : return std::string( "end" ); break;		
+				case rr_after  : return std::string( "after" ); break;				
+			}
+			return std::string( "unknown" );
+		}
+		
+};
+
+
+bool compare_ranges ( const range * first, const range * second )
+{
+	return ( first -> get_start() < second -> get_start() );
+}
+
+
+struct ranges_relation
+{
+	bool has_inside;
+	bool has_partial;
+
+	void clear( void ) { has_inside = has_partial = false; }
+	
+	void print( std::ostream &stream ) const { stream << "inside: " << has_inside << ", partial: " << has_partial; }
+	
+	friend std::ostream& operator<< ( std::ostream &stream, const ranges_relation &other )
+	{
+		other.print( stream );
+		return stream;
+	}
+};
+
+
+class ranges
+{
+	private :
+		std::list< range * > range_list;
+		long count;
+		
+	public :
+		ranges( void ) : count( 0 ) {}
+		~ranges( void ) { clear(); }
+		
+		void clear( void )
+		{
+			while ( !range_list.empty() )
+			{
+				range * r = range_list.front();
+				range_list.pop_front();
+				if ( r != NULL ) delete r;
+			}
+			count = 0;
+		}
+		
+		void add( range * r ){ if ( r != NULL ) { range_list.push_back( r ); count++; } }
+		void add( const range &r ){ add( new range( r ) ); }
+
+		void merge( const range &r1 )
+		{
+			bool merged = false;
+			std::list< range * >::iterator it;
+			for ( it = range_list.begin(); it != range_list.end() && !merged; ++it )
+			{
+				range * r = *it;
+				if ( r != NULL )
+					merged = r -> merge( r1 );
+			}
+			if ( !merged ) add( r1 );
+		}
+		
+		void sort( void ) { range_list.sort( compare_ranges ); }
+		long get_count( void ) { return count; }
+		
+		void compare_sample( const ranges &sample, ranges_relation &res ) const
+		{
+			res.clear();
+			bool done = false;
+			
+			// we take each range of the sample and compare it against each range of self
+			std::list< range * >::const_iterator sample_it;
+			for ( sample_it = sample.range_list.begin(); sample_it != sample.range_list.end() && !done; ++sample_it )
+			{
+				const range * sample_range = *sample_it;
+				std::list< range * >::const_iterator pattern_it;
+				for ( pattern_it = range_list.begin(); pattern_it != range_list.end() && !done; ++pattern_it )	
+				{
+					const range * pattern_range( *pattern_it );
+					enum e_range_relation rr = pattern_range -> range_relation( *sample_range );
+					switch( rr )
+					{
+						case rr_before 	: break;
+						case rr_begin	: res.has_partial = true; break;
+						case rr_span	: res.has_partial = true; break;
+						case rr_inside 	: res.has_inside = true; break;
+						case rr_end		: res.has_partial = true; break;
+						case rr_after	: break;
+					}
+					done = ( res.has_partial && res.has_inside );
+				}
+			}
+		}
+		
+		void print( std::ostream &stream ) const
+		{
+			std::list< range * >::const_iterator it;
+			for ( it = range_list.begin(); it != range_list.end(); ++it )
+			{
+				range * r = *it;
+				if ( r != NULL ) stream << *r << " ";
+			}
+		}		
+
+		friend std::ostream& operator<< ( std::ostream &stream, const ranges &other )
+		{
+			other.print( stream );
+			return stream;
+		}
+
+};
+
+};  // namespace seq_ranges
+
+#endif // _hpp_seq_ranges_
+
diff --git a/tools/sra-seq-count/sra-seq-count.cpp b/tools/sra-seq-count/sra-seq-count.cpp
new file mode 100644
index 0000000..ccf1faa
--- /dev/null
+++ b/tools/sra-seq-count/sra-seq-count.cpp
@@ -0,0 +1,688 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ngs/ncbi/NGS.hpp>
+#include <ngs/ErrorMsg.hpp>
+#include <ngs/ReadCollection.hpp>
+#include <ngs/AlignmentIterator.hpp>
+#include <ngs/Alignment.hpp>
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <stdexcept>
+#include <vector>
+#include <list>
+#include <algorithm>
+
+#include "options.h"
+#include "range.hpp"
+
+using namespace seq_ranges;
+
+
+struct feature_range
+{
+	const std::string ref_name;
+	const std::string feature_id;
+	const char strand;
+	range ft_range;
+
+	feature_range( const std::string &ref_name_, const std::string &feature_id_,
+				   const long start_, const long end_, const char strand_ )
+		: ref_name( ref_name_ ), feature_id( feature_id_ ), strand( strand_ ), ft_range( start_, end_ )
+	{ }
+};
+
+
+class feature
+{
+	private :
+		const std::string ref_name;
+		const std::string feature_id;
+		const char strand;		
+		ranges feature_ranges;
+		range outer;
+		long counter;
+
+	public :
+		feature( const feature_range &fr ) : ref_name( fr.ref_name ), feature_id( fr.feature_id ),
+				strand( fr.strand ), outer( fr.ft_range ), counter( 0 )
+		{
+			feature_ranges.add( fr.ft_range );
+		}
+	
+		bool add( const feature_range &fr )
+		{
+			bool res = ( feature_id == fr.feature_id );
+			if ( res )
+			{
+				feature_ranges.merge( fr.ft_range );
+				outer.include( fr.ft_range );
+			}
+			return res;
+		}
+
+		void debug_report ( void )
+		{
+			std::cout << "FEATURE: " << feature_id << " ( refname: " << ref_name << " ) strand = '" << strand << "' " << outer << std::endl;
+			std::cout << feature_ranges << std::endl;
+			std::cout << "counter : " << counter << std::endl;
+			std::cout << std::endl;
+		}
+
+		void report ( int output_mode )
+		{
+			if ( counter > 0 )
+			{
+				if ( output_mode == SSC_MODE_NORMAL )
+				{
+					std::cout << feature_id << "\t" << counter << std::endl;
+				}
+				else
+				{
+					std::cout << ref_name << "." << outer << "(" << feature_ranges.get_count() << ") "
+						<< feature_id << "\t" << counter << std::endl;
+				}
+			}
+		}
+
+		void sort_ranges( void ) { feature_ranges.sort(); }		
+		void get_ref_name( std::string &s ) { s = ref_name; }
+		void get_outer_range( range &r ) { r = outer; }
+
+		/* does this feature end before the given range */
+		bool ends_before( const range &r ) const { return outer.ends_before( r ); }
+		bool is_ref( const std::string &r_name ) { return ( ref_name == r_name ); }
+		long start( void ) { return outer.get_start(); }
+		
+		void check( const range &r ) { if ( outer.intersect( r ) ) counter++; }
+};
+
+
+void trim( std::string &s )
+{
+	bool to_trim = false;
+	std::size_t pos = 0;
+	std::size_t len = s.length();
+	while ( s[ pos ] == ' ' && len > 0 )
+	{
+		pos++;
+		len--;
+		to_trim = true;
+	}
+	while ( s[ pos + len - 1 ] == ' ' )
+	{
+		len--;
+		to_trim = true;
+	}
+	if ( to_trim )
+		s = s.substr( pos, len );
+}
+
+
+void split_attr( const std::string &attr, const std::string &idattr, std::string &feature_id )
+{
+	std::size_t from = 0;
+	std::size_t pos = 0;
+	bool done = false;
+	feature_id.clear();
+	while ( !done )
+	{
+		pos = attr.find( ";", from );
+		done = ( pos == std::string::npos );
+		std::string sub_attr = attr.substr( from, pos - from );
+		std::size_t sub_pos = sub_attr.find( "\"" );
+		if ( sub_pos != std::string::npos )
+		{
+			std::string sub_name = sub_attr.substr( 0, sub_pos - 1 );
+			trim( sub_name );
+			if ( sub_name == idattr )
+			{
+				feature_id = sub_attr.substr( sub_pos + 1, sub_attr.length() - ( sub_pos + 2 ) );
+				done = true;
+			}
+		}
+		if ( !done ) from = pos + 1;
+	}
+}
+
+
+bool split_line( const std::string &line, const std::string feature_type, const std::string &idattr,
+				 std::string &ref_name, std::string &feature_id,
+				 long &start, long &end, char &strand )
+{
+	bool res = ( ( line.length() > 0 )&&( line[ 0 ] != '#' ) );
+	if ( res )
+	{
+		int field = 0;
+		std::string attr;
+		std::size_t from = 0;
+		std::size_t pos = 0;
+		start = end = 0;
+		long value;
+		bool done = false;
+		while ( !done )
+		{
+			pos = line.find( "\t", from );
+			done = ( pos == std::string::npos );
+			switch( field++ )
+			{
+				case 0 : ref_name = line.substr( from, pos - from ); break;
+				case 2 : if ( feature_type != line.substr( from, pos - from ) )
+						  {
+								done = true;
+								res = false;
+						  }
+						  break;
+				case 3 : if ( range::convert_value( line.substr( from, pos - from ), value ) ) start = value; break;
+				case 4 : if ( range::convert_value( line.substr( from, pos - from ), value ) ) end = value; break;
+				case 6 : if ( ( pos - from ) > 0 ) strand = line[ from ]; else strand = '?'; break;
+				case 8 : attr = line.substr( from, pos - from ); break;
+			}
+			if ( !done ) from = pos + 1;
+		}
+		
+		if ( res ) split_attr( attr, idattr, feature_id );
+	}
+	return res;
+}
+
+
+class gtf_iter
+{
+	private :
+		const std::string filename;
+		const std::string idattr;
+		const std::string feature_type;
+		feature_range * stored_feature_range;
+		feature * stored_next_feature;
+		std::ifstream inputstream;
+		
+		feature_range * read_next_feature_range( void )
+		{
+			feature_range * res = NULL;
+			if ( inputstream.good() )
+			{
+				std::string line;
+				if ( std::getline( inputstream, line ) )
+				{
+					std::string ref_name, feature_id;
+					long start, end;
+					char strand;
+					if ( split_line( line, feature_type, idattr,
+									  ref_name, feature_id, start, end, strand ) )
+					{
+						res = new feature_range( ref_name, feature_id, start, end, strand );
+					}
+				}
+			}
+			return res;
+		}
+
+		feature_range * next_feature_range( void )
+		{
+			feature_range * res = NULL;
+			if ( stored_feature_range != NULL )
+			{
+				res = stored_feature_range;
+				stored_feature_range = NULL;
+			}
+			else while ( inputstream.good() && res == NULL )
+			{
+				/* because read_next_feature_range can return NULL if the line contains the wrong feature_type */
+				res = read_next_feature_range();
+			}
+			return res;
+		}
+
+		feature * read_next_feature( void )
+		{
+			feature * res = NULL;
+			feature_range * fr = next_feature_range();
+			if ( fr != NULL )
+			{
+				res = new feature( *fr );
+				delete fr;
+				bool done = ( res == NULL );
+				while ( !done )
+				{
+					fr = next_feature_range();
+					done = ( fr == NULL );
+					if ( !done )
+					{
+						done = !( res -> add( *fr ) );
+						if ( done )
+							stored_feature_range = fr;
+						else
+							delete fr;
+					}
+				}
+				if ( done ) res->sort_ranges();
+			}
+			return res;
+		}
+		
+	public :
+		gtf_iter( const char * filename_, const std::string &idattr_, const std::string &feature_type_  ) :
+			filename( filename_ ), idattr( idattr_ ), feature_type( feature_type_ ),
+			stored_feature_range( NULL ), inputstream( filename_ )
+			{
+				stored_next_feature = read_next_feature();
+			}
+		
+		bool good( void ) { return ( stored_next_feature != NULL ); }
+		
+		feature * next_feature( void )
+		{
+			feature * res = stored_next_feature;
+			if ( res != NULL )
+				stored_next_feature = read_next_feature();
+			return res;
+		}
+
+		feature * forward_to_next_ref( const std::string & ref )
+		{
+			feature * res = NULL;
+			bool done = false;
+			while ( !done )
+			{
+				res = next_feature();
+				done = ( res == NULL );
+				if ( !done )
+				{
+					if ( res -> is_ref( ref ) )
+						delete res;
+					else
+						done = true;
+				}
+			}
+			return res;
+		}
+		
+		long peek_next_feature_start( void )
+		{
+			if ( stored_next_feature != NULL )
+				return stored_next_feature -> start();
+			else
+				return 0;
+		}
+
+		bool peek_next_feature_range( range &r )
+		{
+			bool res = ( stored_next_feature != NULL );
+			if ( res ) stored_next_feature -> get_outer_range( r );
+			return res;
+		}
+		
+		bool peek_next_feature_is_ref( const std::string &ref_name )
+		{
+			if ( stored_next_feature != NULL )
+				return stored_next_feature -> is_ref( ref_name );
+			else
+				return false;
+		}
+};
+
+
+class global_counter
+{
+	private:
+		long refs;
+		long total_alignments;
+		long no_feature;
+		long ambiguous;
+		long too_low_qual;
+		long not_aligned;
+		long not_unique;
+		
+	public:
+		global_counter( void ) : refs( 0 ), total_alignments( 0 ), no_feature( 0 ), ambiguous( 0 ),
+				too_low_qual( 0 ), not_aligned( 0 ), not_unique( 0 ) {}
+
+		void inc_refs( void ) { refs++; }		
+		void inc_total_alignments( void ) { total_alignments++; }
+		void inc_no_feature( void ) { no_feature++; }
+		void inc_ambiguous( void ) { ambiguous++; }
+		void inc_too_low_qual( void ) { too_low_qual++; }
+		void inc_not_aligned( void ) { not_aligned++; }
+		void inc_not_unique( void ) { not_unique++; }
+		
+		void report( void )
+		{
+			std::cout << std::endl;
+			std::cout << "__no_feature\t" << no_feature << std::endl;
+			std::cout << "__ambiguous\t" << ambiguous << std::endl;
+			std::cout << "__too_low_aQual\t" << too_low_qual << std::endl;
+			std::cout << "__not_aligned\t" << not_aligned << std::endl;
+			std::cout << "__alignment_not_unique\t" << not_unique << std::endl;
+
+			std::cout << std::endl << "total\t" << total_alignments << std::endl;
+			std::cout << "refs\t" << refs << std::endl << std::endl;
+		}
+};
+
+
+class feature_list
+{
+	private :
+		const std::string &ref_name;
+		int output_mode;
+		std::list< feature * > flist;
+
+		void clear( void )
+		{
+			while ( !flist.empty() )
+			{
+				feature * f = flist.front();
+				flist.pop_front();
+				if ( f != NULL ) delete f;
+			}
+		}
+
+		void add( feature * f )
+		{
+			flist.push_back( f );
+		}
+		
+	public :
+		feature_list( const std::string &ref_name_, int output_mode_, feature * f )
+			: ref_name( ref_name_ ), output_mode( output_mode_ ) { add( f ); }
+		~feature_list( void ) { clear(); }
+
+		bool empty( void ) { return flist.empty(); }
+		
+		void remove_all_features_before( const range &al_range )
+		{
+			bool done = flist.empty();
+			while ( !done )
+			{
+				feature * f = flist.front();
+				if ( f -> ends_before( al_range ) )
+				{
+					flist.pop_front();
+					f -> report( output_mode );
+					done = flist.empty();
+					delete f;
+				}
+				else
+					done = true;
+			}
+		}
+
+		void load_all_features_starting_inside( const range &al_range, gtf_iter &gtf_it )
+		{
+			bool done = false;
+			while ( !done )
+			{
+				done = !gtf_it.peek_next_feature_is_ref( ref_name );
+				if ( !done )
+				{
+					range r;
+					done = !gtf_it.peek_next_feature_range( r );
+					if ( !done )
+					{
+						if ( r.ends_before( al_range ) )
+						{
+							/* we can skip this feature! */
+							feature * f = gtf_it.next_feature();
+							delete f;
+						}
+						else if ( r.starts_after( al_range ) )
+						{
+							/* we are done, this feature if for alignments that come later */
+							done = true;
+						}
+						else
+						{
+							feature * f = gtf_it.next_feature();
+							if ( f != NULL ) add( f );
+						}
+					}
+				}
+			}
+		}
+		
+		void count_matches_between_alignment_and_features( const range &al_range )
+		{
+			std::list< feature * >::iterator it;
+			for ( it = flist.begin(); it != flist.end(); ++it )
+			{
+				feature * f = *it;
+				if ( f != NULL )
+				{
+					f -> check( al_range );
+				}
+			}
+		}
+};
+
+
+class iter_window
+{
+	private :
+		ngs::ReadCollection &run;	
+		gtf_iter &gtf_it;
+		int output_mode;
+		global_counter counter;
+		
+	public :
+		iter_window( ngs::ReadCollection &run_, gtf_iter &gtf_it_, int output_mode_ )
+			: run( run_ ), gtf_it( gtf_it_ ), output_mode( output_mode_ ) {}
+
+		void walk( void )
+		{
+			feature * f = gtf_it.next_feature();
+			while ( f != NULL )
+			{
+				/* get the name of the reference of the fist feature in here... */
+				std::string ref_name;
+				f -> get_ref_name( ref_name );
+				try
+				{
+					ngs::Reference ref = run.getReference ( ref_name );
+					try
+					{
+						bool done = false;
+						feature_list flist( ref_name, output_mode, f );
+						ngs::AlignmentIterator al_iter = ref.getAlignments( ngs::Alignment::primaryAlignment );
+
+						std::cout << std::endl << "processing ref: " << ref_name << std::endl;
+						std::cout << "-------------------------------------------" << std::endl;
+						counter.inc_refs();
+						
+						/* now walk all alignments of this al_iter */
+						while ( al_iter.nextAlignment() && !done )
+						{
+							int64_t  pos = al_iter.getAlignmentPosition() + 1; /* al_iter returns 0-based ! */
+							uint64_t len = al_iter.getAlignmentLength();
+							
+							const range al_range( pos, pos + len - 1 );
+							
+							/* remove and report all features that end before this alignment */
+							flist.remove_all_features_before( al_range );
+							flist.load_all_features_starting_inside( al_range, gtf_it );
+							
+							/* now we can count matches between the feature-list and this alignment */
+							flist.count_matches_between_alignment_and_features( al_range );
+							
+							/* look if we have to cancel the loop if the feature-list is empty
+							   and we have no more features in this reference */
+							if ( flist.empty() )
+							{
+								done = ( gtf_it.peek_next_feature_start() == 0 );
+								if ( !done )
+									done = !gtf_it.peek_next_feature_is_ref( ref_name );
+							}
+							counter.inc_total_alignments();
+						}
+						f = gtf_it.forward_to_next_ref( ref_name );
+					}
+					catch ( ngs::ErrorMsg e )
+					{
+						std::cout << "error in ref " << ref_name << " : " << e.what() << std::endl;
+						f = NULL;
+					}
+				}
+				catch ( ngs::ErrorMsg e )
+				{
+					f = gtf_it.forward_to_next_ref( ref_name );
+				}
+
+			}
+			counter.report();
+		}
+};
+
+
+int matching( const struct sra_seq_count_options * options )
+{
+	int res = 0;
+	
+	std::string id_attr( options->id_attrib );
+	std::string feature_type( options->feature_type );
+
+	/* create the ngs-iterator, which delivers references and alignments */
+	try
+	{
+		ngs::ReadCollection run ( ncbi::NGS::openReadCollection( options->sra_accession ) );
+		
+		/* create the gtf-iterator, which delivers gtf-features */		
+		gtf_iter gtf_it( options->gtf_file, id_attr, feature_type );
+		
+		/* create a iterator window that walks both iterators to count alignments for the features */
+		iter_window window( run, gtf_it, options->output_mode );
+		
+		/* walk the window... */
+		window.walk();
+	}
+	catch ( ngs::ErrorMsg e )
+	{
+		std::cout << "cannot open " << options->sra_accession << " because " << e.what() << std::endl;
+	}
+	return res;
+}
+
+
+int list_refs_in_gtf( const char * gtf )
+{
+	int res = 0;
+	long feature_count = 0;
+	long feature_ref_count = 0;
+	std::string ref_name;
+	std::string id_attr( "gene_id" );
+	std::string feature_type( "exon" );
+
+	/* create the gtf-iterator, which delivers gtf-features */		
+	gtf_iter gtf_it( gtf, id_attr, feature_type );
+	
+	feature * f = gtf_it.next_feature();
+	while ( f != NULL )
+	{
+		/* count feature */
+		feature_count ++;
+
+		if ( f -> is_ref( ref_name ) )
+		{
+			feature_ref_count++;
+		}
+		else
+		{
+			if ( feature_ref_count > 0 )
+			{
+				std::cout << ref_name << "\t" << feature_ref_count << std::endl;
+				feature_ref_count = 0;
+			}
+			f -> get_ref_name( ref_name );
+		}
+
+		/* dispose feature */
+		delete f;
+		f = gtf_it.next_feature();	
+	}
+	std::cout << feature_count << " features" << std::endl;
+	
+	return res;
+}
+
+
+void print_rr( const range &A, const range &B )
+{
+	std::cout << A << " --- " << B << " : " << range::range_relation_2_str( A.range_relation( B ) ) << std::endl;
+}
+
+void rr_test( void )
+{
+	/*
+	print_rr( range( 10, 20 ), range( 5, 7 ) );
+	print_rr( range( 10, 20 ), range( 5, 10 ) );
+
+	print_rr( range( 10, 20 ), range( 5, 12 ) );
+	print_rr( range( 10, 20 ), range( 5, 20 ) );
+	
+	print_rr( range( 10, 20 ), range( 5, 22 ) );
+	
+	print_rr( range( 10, 20 ), range( 10, 20 ) );
+	print_rr( range( 10, 20 ), range( 5, 25 ) );
+	
+	print_rr( range( 10, 20 ), range( 15, 25 ) );
+	print_rr( range( 10, 20 ), range( 20, 25 ) );
+
+	print_rr( range( 10, 20 ), range( 25, 35 ) );
+	*/
+	
+	ranges rl;
+	rl.add( range( 10, 20 ) );
+	rl.add( range( 70, 80 ) );	
+	rl.add( range( 30, 40 ) );
+	rl.add( range( 50, 60 ) );
+	rl.merge( range( 18, 22 ) );	
+	
+	rl.sort();
+	
+	std::cout << rl << std::endl;
+}
+
+/*
+int main( int argc, const char* argv[] )
+{
+	int res = 0;
+	if ( argc < 3 )
+	{
+		std::cout << "\nusage : gene_count sra_accession genes.gtf\n";
+		res = -1;
+	}
+	else
+	{
+		matching( argv[ 1 ], argv[ 2 ] );
+		// list_refs_in_gtf( argv[ 2 ] );
+		// rr_test();
+	}
+	
+    return res;
+}
+*/
diff --git a/tools/sra-shell/Makefile b/tools/sra-shell/Makefile
new file mode 100644
index 0000000..a3f9d33
--- /dev/null
+++ b/tools/sra-shell/Makefile
@@ -0,0 +1,58 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-shell
+
+include $(TOP)/build/Makefile.shell
+
+
+#-------------------------------------------------------------------------------
+# default
+#
+SUBDIRS = \
+	parser \
+	job-exec \
+	sra-shell \
+	turboVision \
+	guilib \
+	sra-gui
+
+
+# common targets for non-leaf Makefiles; must follow a definition of SUBDIRS
+include $(TOP)/build/Makefile.targets
+
+$(SUBDIRS):
+	@ $(MAKE) -C $@
+
+.PHONY: default $(SUBDIRS) 
+
+#-------------------------------------------------------------------------------
+# pass-through
+#
+out debug profile release GCC ICC VC++:
+	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env $@
+
+.PHONY: out debug profile release GCC ICC VC++
diff --git a/tools/sra-shell/guilib/Makefile b/tools/sra-shell/guilib/Makefile
new file mode 100644
index 0000000..6910c3d
--- /dev/null
+++ b/tools/sra-shell/guilib/Makefile
@@ -0,0 +1,71 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/guilib
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+	guilib
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+	
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+.PHONY: all std $(INT_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# guilib
+#
+
+GUILIB_SRC = \
+
+GUILIB_OBJ = \
+	$(addsuffix .$(OBJX),$(GUILIB_SRC))
+
+$(ILIBDIR)/guilib: $(GUILIB_OBJ)
+	$(LP) --slib -o $@ $^ 
diff --git a/tools/sra-shell/job-exec/Makefile b/tools/sra-shell/job-exec/Makefile
new file mode 100644
index 0000000..5b900d8
--- /dev/null
+++ b/tools/sra-shell/job-exec/Makefile
@@ -0,0 +1,71 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/job-exec
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+	job-exec
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+	
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+.PHONY: all std $(INT_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# job-exec
+#
+
+JOB_EXEC_SRC = \
+
+JOB_EXEC_OBJ = \
+	$(addsuffix .$(OBJX),$(JOB_EXEC_SRC))
+
+$(ILIBDIR)/job-exec: $(JOB_EXEC_OBJ)
+	$(LP) --slib -o $@ $^ 
diff --git a/tools/sra-shell/parser/Makefile b/tools/sra-shell/parser/Makefile
new file mode 100644
index 0000000..741d0f1
--- /dev/null
+++ b/tools/sra-shell/parser/Makefile
@@ -0,0 +1,71 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/parser
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+	sra-shell-parser
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+	
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+.PHONY: all std $(INT_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-shell-parser
+#
+
+PARSER_SRC = \
+
+PARSER_OBJ = \
+	$(addsuffix .$(OBJX),$(PARSER_SRC))
+
+$(ILIBDIR)/sra-shell-parser: $(PARSER_OBJ)
+	$(LP) --slib -o $@ $^ 
diff --git a/tools/sra-shell/parser/sra-shell-lex.l b/tools/sra-shell/parser/sra-shell-lex.l
new file mode 100644
index 0000000..a2f883f
--- /dev/null
+++ b/tools/sra-shell/parser/sra-shell-lex.l
@@ -0,0 +1,103 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{ 
+    #include "sra-shell-parse.h"
+    #include "sra-shell-tokens.h"    
+    
+    #define YYSTYPE SRAShellToken
+
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText     = yytext;   \
+        yylval -> tokenLength   = yyleng;   \
+        yylval -> line_no       = yylineno; \
+        yylval -> column_no     = yyextra -> column; \
+        yyextra -> column += yyleng; \
+        yyextra -> length += yyleng; \
+        yyextra -> lastToken = yylval; 
+
+    #define ENDLINE \
+        yyextra -> column=1;\
+        return shENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    static void SRAShell_fatal_error(yyconst char* msg);
+    #define YY_FATAL_ERROR(msg) SRAShell_fatal_error(msg)
+    
+%}
+
+%option never-interactive nounistd yylineno reentrant bison-bridge stack noyywrap
+
+%option prefix="SRAShell"
+%option extra-type="SRAShellParseBlock*"
+
+ /*%option debug*/
+
+ws          [ \t]+
+digits      [0-9]+
+alphanum    [A-Za-z0-9\-_]+
+eol         (\r\n|\r|\n)
+
+%%
+
+. { return yytext[0]; }
+
+{eol} { ENDLINE; }
+
+%%    
+
+rc_t CC SRAShellScan_yylex_init(SRAShellParseBlock* sb, bool debug)
+{
+    if (yylex_init_extra(sb, &sb->scanner) != 0)
+    {
+        return RC ( rcApp, rcFile, rcParsing, rcMemory, rcExhausted );
+    }       
+
+    yyset_debug(debug ? 1 : 0, sb->scanner);
+
+    return 0;
+}
+
+void CC SRAShellScan_yylex_destroy(SRAShellParseBlock* sb)
+{
+    if (sb->scanner)
+    {
+        yylex_destroy(sb->scanner);
+    }       
+    sb->scanner=0;
+}
+
+void SRAShell_fatal_error(yyconst char* msg)
+{
+    rc_t rc = RC ( rcApp, rcFile, rcParsing, rcError, rcUnexpected );
+    LogErr(klogErr, rc, msg);
+    exit(rc);  
+}
diff --git a/tools/sra-shell/parser/sra-shell.y b/tools/sra-shell/parser/sra-shell.y
new file mode 100644
index 0000000..cf72beb
--- /dev/null
+++ b/tools/sra-shell/parser/sra-shell.y
@@ -0,0 +1,54 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{  
+    #include "sra-shell-parse.h"
+
+    #define YYSTYPE SRAShellToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "sra-shell-tokens.h"
+%}
+
+%pure-parser
+%parse-param {SRAShellParseBlock* pb }
+%lex-param {SRAShellParseBlock* pb }
+%error-verbose 
+%name-prefix="SRAShell"
+
+%token shNUMBER
+%token shALPHANUM
+%token shWS
+%token shENDLINE
+%token shTOKEN
+%token shUNRECOGNIZED
+%token shENDOFTEXT 0
+
+%%
+
+%%
+
diff --git a/tools/sra-shell/sra-gui/Makefile b/tools/sra-shell/sra-gui/Makefile
new file mode 100644
index 0000000..3ef9778
--- /dev/null
+++ b/tools/sra-shell/sra-gui/Makefile
@@ -0,0 +1,80 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/sra-gui
+
+EXT_TOOLS = \
+    sra-gui
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) 
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#------------------------------------------------------------------------------
+# sra-gui
+#
+SRA_GUI_SRC = \
+	sra-gui
+
+SRA_GUI_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_GUI_SRC))
+
+SRA_GUI_LIB = \
+	-lkapp \
+	-stk-version \
+	-lncbi-vdb \
+
+$(BINDIR)/sra-gui: $(SRA_GUI_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../../shared/toolkit.vers -o $@ $^ $(SRA_GUI_LIB)
+
diff --git a/tools/sra-shell/sra-gui/sra-gui.c b/tools/sra-shell/sra-gui/sra-gui.c
new file mode 100644
index 0000000..f9095ea
--- /dev/null
+++ b/tools/sra-shell/sra-gui/sra-gui.c
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/out.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "sra-gui";
+
+rc_t CC UsageSummary(const char *prog_name)
+{
+    return KOutMsg ( "Usage: %s [options] path [ path... ]\n"
+                     "\n"
+                     , prog_name );
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    return 0;
+}
diff --git a/tools/sra-shell/sra-shell/Makefile b/tools/sra-shell/sra-shell/Makefile
new file mode 100644
index 0000000..ef36c2e
--- /dev/null
+++ b/tools/sra-shell/sra-shell/Makefile
@@ -0,0 +1,87 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/sra-shell
+
+EXT_TOOLS = \
+    sra-shell
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) 
+
+#-------------------------------------------------------------------------------
+# clean
+#
+INTERM_SRC = \
+	$(SRCDIR)/shell-lex.c \
+	$(SRCDIR)/shell-grammar.c \
+	$(SRCDIR)/shell-tokens.h 
+
+clean: stdclean
+
+.PHONY: clean
+
+.PRECIOUS: $(INTERM_SRC)
+
+#------------------------------------------------------------------------------
+# sra-shell
+#
+SRA_SHELL_SRC = \
+	sra-shell
+
+SRA_SHELL_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_SHELL_SRC))
+
+SRA_SHELL_LIB = \
+	-lkapp \
+	-stk-version \
+	-lncbi-vdb \
+
+$(BINDIR)/sra-shell: $(SRA_SHELL_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../../shared/toolkit.vers -o $@ $^ $(SRA_SHELL_LIB)
+
diff --git a/tools/sra-shell/sra-shell/sra-shell.c b/tools/sra-shell/sra-shell/sra-shell.c
new file mode 100644
index 0000000..66d30dd
--- /dev/null
+++ b/tools/sra-shell/sra-shell/sra-shell.c
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/out.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+rc_t CC Usage ( const Args * args )
+{
+    return 0;
+}
+
+const char UsageDefaultName[] = "sra-shell";
+
+rc_t CC UsageSummary(const char *prog_name)
+{
+    return KOutMsg ( "Usage: %s [options] path [ path... ]\n"
+                     "\n"
+                     , prog_name );
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    return 0;
+}
diff --git a/tools/sra-shell/turboVision/Makefile b/tools/sra-shell/turboVision/Makefile
new file mode 100644
index 0000000..9ff9c76
--- /dev/null
+++ b/tools/sra-shell/turboVision/Makefile
@@ -0,0 +1,71 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../../..)
+MODULE = tools/sra-shell/turboVision
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+	turboVision
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+	
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+.PHONY: all std $(INT_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# turboVision
+#
+
+TURBOVISION_SRC = \
+
+TURBOVISION_OBJ = \
+	$(addsuffix .$(OBJX),$(TURBOVISION_SRC))
+
+$(ILIBDIR)/turboVision: $(TURBOVISION_OBJ)
+	$(LP) --slib -o $@ $^ 
diff --git a/tools/sra-sort/Makefile b/tools/sra-sort/Makefile
new file mode 100644
index 0000000..7cfe85b
--- /dev/null
+++ b/tools/sra-sort/Makefile
@@ -0,0 +1,125 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-sort
+
+include $(TOP)/build/Makefile.shell
+
+INT_TOOLS = \
+	dump-blob-boundaries
+
+EXT_TOOLS = \
+
+ifneq (win,$(OS))
+EXT_TOOLS += sra-sort
+endif	
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+include $(SRCDIR)/Makefile.$(COMP)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-sort
+#
+SRA_SORT_SRC = \
+	caps \
+	mem \
+	membank \
+	paged-membank \
+	paged-mmapbank \
+	except \
+	idx-mapping \
+	map-file \
+	col-pair \
+	row-set \
+	simple-row-set \
+	mapping-row-set \
+	sorting-row-set \
+	meta-pair \
+	dir-pair \
+	tbl-pair \
+	db-pair \
+	glob-poslen \
+	poslen-col-pair \
+	ref-alignid-col \
+	buff-writer \
+	id-mapper-col \
+	capture-first-half-aligned \
+	csra-tbl \
+	csra-pair \
+	run \
+	sra-sort \
+	xcheck-ref-align
+
+SRA_SORT_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_SORT_SRC))
+
+SRA_SORT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/sra-sort: $(SRA_SORT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRA_SORT_LIB)
+
+#-------------------------------------------------------------------------------
+# dump-blob-boundaries
+#
+DBB_SRC = \
+	dump-blob-boundaries
+
+DBB_OBJ = \
+	$(addsuffix .$(OBJX),$(DBB_SRC))
+
+DBB_LIB = \
+	-lncbi-vdb \
+
+$(BINDIR)/dump-blob-boundaries: $(DBB_OBJ)
+	$(LD) --exe -o $@ $^ $(DBB_LIB)
diff --git a/tools/sra-sort/Makefile.cc b/tools/sra-sort/Makefile.cc
new file mode 100644
index 0000000..ca33e13
--- /dev/null
+++ b/tools/sra-sort/Makefile.cc
@@ -0,0 +1,24 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
diff --git a/tools/sra-sort/Makefile.clang b/tools/sra-sort/Makefile.clang
new file mode 100644
index 0000000..bad5e3a
--- /dev/null
+++ b/tools/sra-sort/Makefile.clang
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = -std=gnu99 -fgnu89-inline
+
diff --git a/tools/sra-sort/Makefile.gcc b/tools/sra-sort/Makefile.gcc
new file mode 100644
index 0000000..02182c4
--- /dev/null
+++ b/tools/sra-sort/Makefile.gcc
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = $(shell $(SRCDIR)/gcc-ped.sh -std=gnu99 -fgnu89-inline)
+
diff --git a/tools/sra-sort/buff-writer.c b/tools/sra-sort/buff-writer.c
new file mode 100644
index 0000000..9c4b9e4
--- /dev/null
+++ b/tools/sra-sort/buff-writer.c
@@ -0,0 +1,789 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct BufferedPairColWriter BufferedPairColWriter;
+#define COLWRITER_IMPL BufferedPairColWriter
+
+#include "buff-writer.h"
+#include "row-set.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/sort.h>
+#include <klib/rc.h>
+#include <kdb/btree.h>
+
+#include <string.h>
+#include <bitstr.h>
+
+FILE_ENTRY ( buff-writer );
+
+
+/*--------------------------------------------------------------------------
+ * BufferedPairColWriter
+ */
+struct BufferedPairColWriter
+{
+    ColumnWriter dad;
+
+    cSRATblPair *tbl;   /* borrowed reference to table        */
+
+    ColumnWriter *cw;   /* where to write data                */
+
+    MemBank *mbank;     /* paged memory bank                  */
+#define MAX_VOCAB_SIZE 32*1024
+    /*** introducing VOCABULARY value->id->vocab_value ***/
+    KBTree	*vocab_key2id;
+    const void	*vocab_id2val[MAX_VOCAB_SIZE];
+    uint32_t	vocab_cnt;
+    /******************************************************/
+    MapFile *idx;       /* optional row-id mapping index      */
+
+    union
+    {
+        /* for mapping writers */
+        struct
+        {
+            union
+            {
+                /* "immediate" data - size <= 64 bits and row_len == 1 */
+                uint64_t imm;
+
+                /* "indirect" data - stored in "mbank" */
+                void *ptr;
+
+            } val;
+            int64_t new_id;
+        } *data;
+
+        /* standard ( old_id, new_id ) mapping pair */
+        IdxMapping *map;
+
+        /* for non-mapping writers */
+        int64_t *ids;
+
+    } u;
+
+    /* for non-mapping writers - new=>old ord */
+    uint32_t *ord;
+
+    size_t num_items;   /* total number of items              */
+    size_t cur_item;    /* index of currently available item  */
+    size_t num_immed;   /* number of immediate items written  */
+
+    uint32_t elem_bits; /* number of bits of each element     */
+    uint32_t min_row_len;
+    uint32_t max_row_len;
+};
+
+static
+void BufferedPairColWriterWhack ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapFileRelease ( self -> idx, ctx );
+    MemBankRelease ( self -> mbank, ctx );
+    if(self -> vocab_key2id) KBTreeRelease  ( self -> vocab_key2id );
+    ColumnWriterRelease ( self -> cw, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *BufferedPairColWriterFullSpec ( const BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPreCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPostCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> mbank != NULL )
+    {
+        MemBankRelease ( self -> mbank, ctx );
+        self -> mbank = NULL;
+    }
+    if ( self -> vocab_key2id != NULL )
+    {
+	KBTreeRelease  ( self -> vocab_key2id );
+	self -> vocab_key2id = 0;
+	self -> vocab_cnt = 0;
+    }
+
+    ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterMapValues ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t i;
+    int64_t id;
+    bool assign_ids = ( bool ) self -> dad . align [ 0 ];
+
+    if ( self -> elem_bits != 64 )
+    {
+        rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "column '%s' does not have 64-bit elements and cannot be mapped",
+            ColumnWriterFullSpec ( self -> cw, ctx ) );
+        return;
+    }
+
+    if ( self -> num_immed != self -> num_items )
+    {
+#if DISALLOW_VARIABLE_ROW_LENGTH_MAPPING
+        rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "column '%s' does not have fixed row-length of 1 and cannot be mapped",
+            ColumnWriterFullSpec ( self -> cw, ctx ) );
+#else
+        const uint32_t *base;
+        /* detect case when we have ids that were written
+           sparsely ( as NULLs ) rather than densely ( zeros for NULL ). */
+        if ( self -> min_row_len == 0 && self -> max_row_len == 1 )
+        {
+            for ( i = 0; i < self -> num_items; ++ i )
+            {
+                base = self -> u . data [ i ] . val . ptr;
+                if ( base != NULL )
+                    memmove ( & self -> u . data [ i ] . val . imm, & base [ 1 ], 8 );
+            }
+
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+            self -> num_immed = self -> num_items;
+            self -> min_row_len = 1;
+	    
+        }
+        else
+        {
+            STATUS ( 3, "randomly mapping old=>new values" );
+            for ( i = 0; i < self -> num_immed; ++ i )
+            {
+                uint32_t *base;
+
+                id = self -> u . data [ i ] . val . imm;
+
+                ON_FAIL ( base = MemBankAlloc ( self -> mbank, ctx, sizeof id + sizeof * base, false ) )
+                    return;
+
+                if ( id != 0 )
+                {
+                    ON_FAIL ( id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                        return;
+                }
+
+                memmove ( & base [ 1 ], & id, sizeof id );
+                base [ 0 ] = 1;
+                self -> u . data [ i ] . val . ptr = base;
+            }
+            for ( self -> num_immed = 0; i < self -> num_items; ++ i )
+            {
+                base = self -> u . data [ i ] . val . ptr;
+                if ( base != NULL )
+                {
+                    uint32_t j, row_len = base [ 0 ];
+                    int64_t *ids = ( int64_t* ) & base [ 1 ];
+                    for ( j = 0; j < row_len; ++ j )
+                    {
+                        id = ids [ j ];
+                        if ( id != 0 )
+                        {
+                            ON_FAIL ( ids [ j ] = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                                return;
+                        }
+                    }
+                }
+            }
+            return;
+        }
+#endif
+    }
+
+    STATUS ( 3, "sorting %,u ( data, new_id ) map entries on immediate value", self -> num_items );
+#if USE_OLD_KSORT
+    ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+    IdxMappingSortOld ( self -> u . map, ctx, self -> num_items );
+#endif
+
+    STATUS ( 3, "mapping old=>new values" );
+    for ( i = 0; i < self -> num_items; ++ i )
+    {
+        id = self -> u . map [ i ] . old_id;
+        if ( id != 0 )
+        {
+            ON_FAIL ( self -> u . map [ i ] . old_id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                break;
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteMapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t *base;
+    size_t i, row_bytes;
+    const size_t pg_size = 256 * 1024;
+
+    /* detect first write */
+    if ( self -> u . data == NULL )
+    {
+        /* get map and content length from table */
+        assert ( self -> idx != NULL );
+        ON_FAIL ( self -> u . map = RowSetIteratorGetIdxMapping ( self -> tbl -> rsi, ctx, & self -> num_items ) )
+        {
+            ANNOTATE ( "failed to get ( old_id, new_id ) map for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            return;
+        }
+
+        /* require elem_bits to be constant for column */
+        self -> elem_bits = elem_bits;
+
+        /* OPTIMIZATION:
+           IFF elem_bits <= 64 and row_len == 1, store in union
+           otherwise, use membank. This requires that if row_len
+           ever changes, we have to recover. */
+        if ( elem_bits > 64 || row_len != 1 )
+        {
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+                return;
+        }
+
+        /* initialize min/max */
+        self -> min_row_len = self -> max_row_len = row_len;
+    }
+
+    /* elem_bits should be constant */
+    assert ( self -> elem_bits == elem_bits );
+
+    /* handle optimized case */
+    if ( self -> mbank == NULL )
+    {
+        /* first, detect a change */
+        if ( row_len == 1 )
+        {
+            /* continue on optimized case */
+            row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+            if ( boff != 0 )
+            {
+                bitcpy ( & self -> u . data [ self -> cur_item ] . val . imm,
+                    0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            }
+            else
+            {
+                memmove ( & self -> u . data [ self -> cur_item ] . val . imm, data, row_bytes );
+            }
+
+            /* record another immediate row */
+            ++ self -> num_immed;
+
+            /* detect last row */
+            if ( ++ self -> cur_item < self -> num_items )
+                return;
+
+            /* map values */
+            TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+            {
+                /* need to resort map on new_id */
+                STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+                ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+                IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+                /* write all rows to column writer */
+                STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+                for ( i = 0; i < self -> num_items; ++ i )
+                {
+                    /* write out row */
+                    ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+                        break;
+                }
+            }
+
+            /* forget about map */
+            self -> u . map = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            return;
+        }
+
+        /* need to recover */
+        ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+            return;
+    }
+
+    /* update min/max row-len */
+    if ( row_len < self -> min_row_len )
+        self -> min_row_len = row_len;
+    else if ( row_len > self -> max_row_len )
+        self -> max_row_len = row_len;
+
+    /* handle zero-length rows specially */
+    if ( row_len == 0 )
+        self -> u . data [ self -> cur_item ] . val . ptr = NULL;
+    else
+    {
+        /* allocate space for the row */
+        row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+        TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+        {
+            /* copy it in */
+            memmove ( base, & row_len, sizeof row_len );
+            if ( boff != 0 )
+                bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            else
+                memmove ( & base [ 1 ], data, row_bytes );
+
+            /* remember its location in the map */
+            self -> u . data [ self -> cur_item ] . val . ptr = base;
+
+            /* remember the last input pointer */
+        }
+    }
+
+    if ( ! FAILED () )
+    {
+        /* detect last row */
+        if ( ++ self -> cur_item == self -> num_items )
+        {
+            /* map values */
+            TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+            {
+                /* need to resort map on new_id */
+                STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+                ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+                IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+                /* write all rows to column writer */
+                STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+                for ( i = 0; i < self -> num_immed; ++ i )
+                {
+                    /* write out row */
+                    ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+                        break;
+                }
+                for ( ; ! FAILED () && i < self -> num_items; ++ i )
+                {
+                    /* write out row */
+                    base = self -> u . data [ i ] . val . ptr;
+                    if ( base == NULL )
+                        ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, "", 0, 0 );
+                    else
+                        ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & base [ 1 ], 0, base [ 0 ] );
+                }
+            }
+
+            /* drop the mem-bank */
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+
+            /* forget about map */
+            self -> u . data = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteUnmapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t i, j, row_bytes;
+    const size_t pg_size = 256 * 1024;
+
+    /* detect first write */
+    if ( self -> u . data == NULL )
+    {
+        /* get ids, ord and content length from table */
+        assert ( self -> idx == NULL );
+        ON_FAIL ( self -> u . ids = RowSetIteratorGetSourceIds ( self -> tbl -> rsi, ctx, & self -> ord, & self -> num_items ) )
+        {
+            ANNOTATE ( "failed to get old_id, ord maps for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            return;
+        }
+
+        /* require elem_bits to be constant for column */
+        self -> elem_bits = elem_bits;
+
+        /* OPTIMIZATION:
+           IFF elem_bits <= 64 and row_len == 1, store in union
+           otherwise, use membank. This requires that if row_len
+           ever changes, we have to recover. */
+        if ( elem_bits > 64 || row_len != 1 )
+        {
+	    rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+                              false, kbtOpaqueKey,
+                              1, 1024, sizeof ( uint32_t ),
+                              NULL
+                              );
+	    if(rc != 0) self->vocab_key2id = NULL;
+	    self->vocab_cnt=0;
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+               return;
+        }
+        /* initialize min/max */
+        self -> min_row_len = self -> max_row_len = row_len;
+    }
+
+    /* elem_bits should be constant */
+    assert ( self -> elem_bits == elem_bits );
+
+    /* handle optimized case */
+    if ( self -> mbank == NULL )
+    {
+        /* first, detect a change */
+        if ( row_len == 1 )
+        {
+            /* continue on optimized case */
+            row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+            if ( boff != 0 )
+            {
+                bitcpy ( & self -> u . ids [ self -> cur_item ],
+                    0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            }
+            else
+            {
+                memmove ( & self -> u . ids [ self -> cur_item ], data, row_bytes );
+            }
+
+            /* record another immediate row */
+            ++ self -> num_immed;
+
+            /* detect last row */
+            if ( ++ self -> cur_item < self -> num_items )
+                return;
+
+            /* write all rows to column writer */
+            STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            for ( i = 0; i < self -> num_items; ++ i )
+            {
+                /* map to new order */
+                j = self -> ord [ i ];
+
+                /* write out row */
+                ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 ) )
+                    break;
+            }
+
+            /* forget about map */
+            self -> u . ids = NULL;
+            self -> ord = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            return;
+        }
+
+        /* need to recover */
+	{
+	    rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+                              false, kbtOpaqueKey,
+                              1, 1024, sizeof ( uint32_t ),
+                              NULL
+                              );
+	    if(rc != 0) self->vocab_key2id = NULL;
+	    self->vocab_cnt=0;
+            /* create a memory bank */
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+               return;
+	}
+    }
+
+    /* update min/max row-len */
+    if ( row_len < self -> min_row_len )
+        self -> min_row_len = row_len;
+    else if ( row_len > self -> max_row_len )
+        self -> max_row_len = row_len;
+
+    /* handle zero-length rows specially */
+    if ( row_len == 0 ){
+        self -> u . ids [ self -> cur_item ] = 0;
+    } else {
+    	uint32_t *base = NULL; 
+        row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+	if(self -> vocab_key2id){
+		rc_t rc;
+		bool wasInserted;
+		uint64_t tmp_id=self -> vocab_cnt;
+		if( self -> vocab_cnt < sizeof(self -> vocab_id2val)/sizeof(self -> vocab_id2val[0])){
+			rc = KBTreeEntry(self -> vocab_key2id, &tmp_id, &wasInserted, data, row_bytes);
+		} else {
+			rc = KBTreeFind (self -> vocab_key2id, &tmp_id, data, row_bytes);
+			if(rc == 0) wasInserted=false;
+		}
+		if(rc == 0){ /*** either entered or found **/
+			if(wasInserted){/** allocate and remember in vocabulary ***/
+				/* allocate space for the row */
+				TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+				{
+				    /* copy it in */
+				    base[0] = row_len;
+				    if ( boff != 0 ) bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+				    else memmove ( & base [ 1 ], data, row_bytes );
+				    self -> vocab_id2val[self -> vocab_cnt++] = base; 
+				}
+			} else { /** get from vocabulary **/
+				assert(tmp_id < self -> vocab_cnt);
+				base = (uint32_t*)self -> vocab_id2val[tmp_id];
+			}
+		}
+		rc = 0;
+	}
+	if(base == NULL){
+		TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+		{
+		    /* copy it in */
+		    base[0] = row_len;
+		    if ( boff != 0 )
+			bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+		    else
+			memmove ( & base [ 1 ], data, row_bytes );
+		}
+
+	}
+	/* remember base location in the map */
+	self -> u . ids [ self -> cur_item ] = ( int64_t ) ( size_t ) base;
+	/* remember the last input pointer */
+    }
+
+    if ( ! FAILED () )
+    {
+        /* detect last row */
+        if ( ++ self -> cur_item == self -> num_items )
+        {
+            /* write all rows to column writer */
+	    uint32_t *last_base=NULL;
+	    uint32_t   cnt=0;
+            STATUS ( 3, "writing cell data to '%s' num_items=%ld vocab_size=%d num_immed=%d", ColumnWriterFullSpec ( self -> cw, ctx ), self -> num_items, self ->vocab_cnt, self -> num_immed );
+            for ( i = 0; ! FAILED () && i < self -> num_items; ++ i )
+            {
+                /* map to new order */
+                j = self -> ord [ i ];
+                if ( j < self -> num_immed ){
+		    if(cnt > 0){ /*** flush accumulated count ***/
+			if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+			else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+			last_base=NULL;
+			cnt=0;
+		    }
+                    ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 );
+                } else {
+                    /* accumulate repeated rows */
+                    void* ptr = (void*)(size_t)self->u.ids [ j ];
+		    if (cnt == 0){
+			cnt=1;
+			last_base = ptr;
+		    } else if (ptr == last_base){
+			cnt++;
+		    } else {
+			if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+			else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+			last_base = ptr;
+			cnt=1;
+		    }
+                }
+	   }
+	   if(cnt > 0){ /*** flush accumulated count ***/
+		if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+		else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+            }
+            /* drop the mem-bank */
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+
+            /* forget about map */
+            self -> u . ids = NULL;
+            self -> ord = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            /* cleanup vocabulary */
+            if(self -> vocab_key2id ) {
+                KBTreeRelease  ( self -> vocab_key2id );
+                self -> vocab_key2id = 0;
+            }
+            self -> vocab_cnt = 0;
+
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteStatic ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+    INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+
+static
+void BufferedPairColWriterCommit ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> cw, ctx );
+}
+
+
+struct ColumnWriter_vt UnmappedBufferedPairColWriter_vt =
+{
+    BufferedPairColWriterWhack,
+    BufferedPairColWriterFullSpec,
+    BufferedPairColWriterPreCopy,
+    BufferedPairColWriterPostCopy,
+    BufferedPairColWriterWriteUnmapped,
+    BufferedPairColWriterWriteStatic,
+    BufferedPairColWriterCommit
+};
+
+
+struct ColumnWriter_vt MappedBufferedPairColWriter_vt =
+{
+    BufferedPairColWriterWhack,
+    BufferedPairColWriterFullSpec,
+    BufferedPairColWriterPreCopy,
+    BufferedPairColWriterPostCopy,
+    BufferedPairColWriterWriteMapped,
+    BufferedPairColWriterWriteStatic,
+    BufferedPairColWriterCommit
+};
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( cSRATblPair *self,
+    const ctx_t *ctx, ColumnWriter *writer )
+{
+    FUNC_ENTRY ( ctx );
+
+    BufferedPairColWriter *buff;
+
+    TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+    {
+        TRY ( ColumnWriterInit ( & buff -> dad, ctx, & UnmappedBufferedPairColWriter_vt, false ) )
+        {
+            /* duplicate our friend */
+            TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                /* borrowed ( weak ) reference
+                   cannot duplicate without creating cycle */
+                buff -> tbl = self;
+
+                return & buff -> dad;
+            }
+        }
+
+        MemFree ( ctx, buff, sizeof * buff );
+    }
+
+    return NULL;
+}
+
+/* MakeBufferedIdRemapColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  maps all ids through index MapFile
+ *  then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( cSRATblPair *self,
+    const ctx_t *ctx, ColumnWriter *writer, MapFile *idx, bool assign_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    BufferedPairColWriter *buff;
+
+    TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+    {
+        TRY ( ColumnWriterInit ( & buff -> dad, ctx, & MappedBufferedPairColWriter_vt, idx != NULL ) )
+        {
+            /* duplicate our friend */
+            TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                TRY ( buff -> idx = MapFileDuplicate ( idx, ctx ) )
+                {
+                    /* borrowed ( weak ) reference
+                       cannot duplicate without creating cycle */
+                    buff -> tbl = self;
+
+                    /* preserve boolean in one of Dad's align bytes */
+                    buff -> dad . align [ 0 ] = assign_ids;
+
+                    return & buff -> dad;
+                }
+
+                ColumnWriterRelease ( writer, ctx );
+            }
+        }
+
+        MemFree ( ctx, buff, sizeof * buff );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/buff-writer.h b/tools/sra-sort/buff-writer.h
new file mode 100644
index 0000000..261788a
--- /dev/null
+++ b/tools/sra-sort/buff-writer.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_buff_writer_
+#define _h_sra_sort_buff_writer_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct cSRATblPair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( struct cSRATblPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer );
+
+/* MakeBufferedIdRemapColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  maps all ids through index MapFile
+ *  then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( struct cSRATblPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_buff_writer_ */
diff --git a/tools/sra-sort/caps.c b/tools/sra-sort/caps.c
new file mode 100644
index 0000000..9becbb1
--- /dev/null
+++ b/tools/sra-sort/caps.c
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+
+#include <vdb/manager.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+
+#include <string.h>
+
+FILE_ENTRY ( caps );
+
+/*--------------------------------------------------------------------------
+ * Caps
+ *  a very watered down version of vdb-3 capabilities
+ */
+
+
+/* Init
+ *  initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx )
+{
+    if ( caps != NULL )
+    {
+        memset ( caps, 0, sizeof * caps );
+        if ( ctx != NULL && ctx -> caps != NULL )
+        {
+            const Caps *orig = ctx -> caps;
+            FUNC_ENTRY ( ctx );
+            TRY ( caps -> mem = MemBankDuplicate ( orig -> mem, ctx ) )
+            {
+                rc_t rc = KConfigAddRef ( caps -> cfg = orig -> cfg );
+                if ( rc != 0 )
+                {
+                    caps -> cfg = NULL;
+                    ERROR ( rc, "failed to duplicate reference to KConfig" );
+                }
+                else
+                {
+                    rc = KDBManagerAddRef ( caps -> kdb = orig -> kdb );
+                    if ( rc != 0 )
+                    {
+                        caps -> kdb = NULL;
+                        ERROR ( rc, "failed to duplicate reference to KDBManager" );
+                    }
+                    else
+                    {
+                        rc = VDBManagerAddRef ( caps -> vdb = orig -> vdb );
+                        if ( rc != 0 )
+                        {
+                            caps -> vdb = NULL;
+                            ERROR ( rc, "failed to duplicate reference to VDBManager" );
+                        }
+                        else
+                        {
+                            caps -> tool = orig -> tool;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/* Whack
+ *  release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        rc_t rc;
+        MemBank *mem;
+
+        self -> tool = NULL;
+
+        rc = VDBManagerRelease ( self -> vdb );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to VDBManager" );
+        self -> vdb = NULL;
+
+        rc = KDBManagerRelease ( self -> kdb );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to KDBManager" );
+        self -> kdb = NULL;
+
+        rc = KConfigRelease ( self -> cfg );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to KConfig" );
+        self -> cfg = NULL;
+
+        mem = self -> mem;
+        MemBankRelease ( mem, ctx );
+        self -> mem = NULL;
+    }
+}
diff --git a/tools/sra-sort/caps.h b/tools/sra-sort/caps.h
new file mode 100644
index 0000000..7368556
--- /dev/null
+++ b/tools/sra-sort/caps.h
@@ -0,0 +1,70 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_caps_
+#define _h_sra_sort_caps_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MemBank;
+struct KConfig;
+struct KDBManager;
+struct VDBManager;
+struct Tool;
+
+
+/*--------------------------------------------------------------------------
+ * Caps
+ *  a very watered-down version of vdb-3 capabilities
+ */
+typedef struct Caps Caps;
+struct Caps
+{
+    struct MemBank *mem;
+    struct KConfig const *cfg;
+    struct KDBManager *kdb;
+    struct VDBManager *vdb;
+    struct Tool const *tool;
+};
+
+
+/* Init
+ *  initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx );
+
+
+/* Whack
+ *  release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx );
+
+#endif
diff --git a/tools/sra-sort/capture-first-half-aligned.c b/tools/sra-sort/capture-first-half-aligned.c
new file mode 100644
index 0000000..73cd829
--- /dev/null
+++ b/tools/sra-sort/capture-first-half-aligned.c
@@ -0,0 +1,192 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct CaptureFirstHalfAlignedColWriter CaptureFirstHalfAlignedColWriter;
+#define COLWRITER_IMPL CaptureFirstHalfAlignedColWriter
+
+#include "csra-pair.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( capture-first-half-aligned );
+
+
+/*--------------------------------------------------------------------------
+ * CaptureFirstHalfAlignedColWriter
+ */
+struct CaptureFirstHalfAlignedColWriter
+{
+    ColumnWriter dad;
+
+    int64_t row_id;
+    cSRAPair *csra;
+    ColumnWriter *writer;
+};
+
+static
+void CaptureFirstHalfAlignedColWriterWhack ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterRelease ( self -> writer, ctx );
+    self -> csra = NULL;
+    self -> writer = NULL;
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *CaptureFirstHalfAlignedColWriterFullSpec ( const CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPreCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPostCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWrite ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+    if ( csra -> first_half_aligned_spot == 0 )
+    {
+        uint32_t i;
+        const int64_t *row = data;
+
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( row [ i ] == 0 )
+            {
+                csra -> first_half_aligned_spot = self -> row_id;
+                break;
+            }
+        }
+    }
+
+    TRY ( ColumnWriterWrite ( self -> writer, ctx, elem_bits, data, boff, row_len ) )
+    {
+        ++ self -> row_id;
+    }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWriteStatic ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+    if ( csra -> first_half_aligned_spot == 0 )
+    {
+        uint32_t i;
+        const int64_t *row = data;
+
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( row [ i ] == 0 )
+            {
+                csra -> first_half_aligned_spot = self -> row_id;
+                break;
+            }
+        }
+    }
+
+    TRY ( ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, data, boff, row_len, count ) )
+    {
+        self -> row_id += count;
+    }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterCommit ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> writer, ctx );
+}
+
+static ColumnWriter_vt CaptureFirstHalfAlignedColWriter_vt =
+{
+    CaptureFirstHalfAlignedColWriterWhack,
+    CaptureFirstHalfAlignedColWriterFullSpec,
+    CaptureFirstHalfAlignedColWriterPreCopy,
+    CaptureFirstHalfAlignedColWriterPostCopy,
+    CaptureFirstHalfAlignedColWriterWrite,
+    CaptureFirstHalfAlignedColWriterWriteStatic,
+    CaptureFirstHalfAlignedColWriterCommit
+};
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ *  a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ *  half-aligned spots and capturing the first occurrence.
+ */
+ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+    const ctx_t *ctx, ColumnWriter *writer )
+{
+    FUNC_ENTRY ( ctx );
+
+    CaptureFirstHalfAlignedColWriter *mon;
+
+    TRY ( mon = MemAlloc ( ctx, sizeof * mon, false ) )
+    {
+        TRY ( ColumnWriterInit ( & mon -> dad, ctx, & CaptureFirstHalfAlignedColWriter_vt, false ) )
+        {
+            mon -> row_id = 1;
+            mon -> csra = self;
+            TRY ( mon -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                return & mon -> dad;
+            }
+        }
+
+        MemFree ( ctx, mon, sizeof * mon );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/col-pair.c b/tools/sra-sort/col-pair.c
new file mode 100644
index 0000000..4394bff
--- /dev/null
+++ b/tools/sra-sort/col-pair.c
@@ -0,0 +1,818 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleColumnReader SimpleColumnReader;
+#define COLREADER_IMPL SimpleColumnReader
+
+typedef struct SimpleColumnWriter SimpleColumnWriter;
+#define COLWRITER_IMPL SimpleColumnWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "row-set.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnReader
+ *  implementation of ColumnReader based upon VCursor direct read
+ */
+struct SimpleColumnReader
+{
+    ColumnReader dad;
+
+    const VCursor *curs;
+    uint32_t idx;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void SimpleColumnReaderWhack ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t bytes = sizeof * self + self -> full_spec_size;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        WARN ( "VCursorRelease failed on '%s'", self -> full_spec );
+
+    self -> curs = NULL;
+    MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *SimpleColumnReaderFullSpec ( const SimpleColumnReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+static
+uint64_t SimpleColumnReaderIdRange ( const SimpleColumnReader *self,
+    const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t count;
+
+    rc = VCursorIdRange ( self -> curs, self -> idx, opt_first, & count );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorIdRange failed for column '%s'", self -> full_spec );
+
+    return count;
+}
+
+
+/* DummyStub
+ *  useful for pre/post-copy
+ */
+static
+void SimpleColumnReaderDummyStub ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+}
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+static
+const void *SimpleColumnReaderRead ( SimpleColumnReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx, elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorCellDataDirect ( %ld ) failed for column '%s'", row_id, self -> full_spec );
+
+    return base;
+}
+
+static ColumnReader_vt SimpleColumnReader_vt =
+{
+    SimpleColumnReaderWhack,
+    SimpleColumnReaderFullSpec,
+    SimpleColumnReaderIdRange,
+    SimpleColumnReaderDummyStub,
+    SimpleColumnReaderDummyStub,
+    SimpleColumnReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in serial order
+ */
+
+
+/* MakeColumnReader
+ *  make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( TablePair *self, const ctx_t *ctx,
+    const VCursor *opt_curs, const char *colspec, bool required )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorRead ( self -> stbl, & curs );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t idx;
+        rc = VCursorAddColumn ( curs, & idx, "%s", colspec );
+        if ( rc != 0 && GetRCState ( rc ) != rcExists )
+        {
+            if ( required )
+                ERROR ( rc, "failed to add column 'src.%s.%s' to cursor", self -> full_spec, colspec );
+        }
+        else
+        {
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+            {
+                if ( required )
+                    ERROR ( rc, "failed to open cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+            }
+            else
+            {
+                SimpleColumnReader *col;
+                size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+                TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                {
+                    ColumnReaderInit ( & col -> dad, ctx, & SimpleColumnReader_vt );
+                    col -> curs = curs;
+                    col -> idx = idx;
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "src.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+                CATCH_ALL ()
+                {
+                    ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnReader", sizeof * col + full_spec_size );
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnReader" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnReader" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnReader" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnReader" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnReader* ) self;
+}
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt )
+{
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad ColumnReader" );
+    }
+    else
+    {
+        self -> vt = vt;
+        KRefcountInit ( & self -> refcount, 1, "ColumnReader", "init", "" );
+        self -> presorted = false;
+        memset ( self -> align, 0, sizeof self -> align );
+    }
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnWriter
+ *  implementation of ColumnWriter based upon VCursor
+ */
+struct SimpleColumnWriter
+{
+    ColumnWriter dad;
+
+    VCursor *curs;
+    uint32_t idx;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void SimpleColumnWriterWhack ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *SimpleColumnWriterFullSpec ( const SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+void SimpleColumnWriterDummyStub ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void SimpleColumnWriterWrite ( SimpleColumnWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorOpenRow ( self -> curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorCommitRow ( self -> curs );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+        }
+
+        rc = VCursorCloseRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+    }
+}
+
+static
+void SimpleColumnWriterWriteStatic ( SimpleColumnWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    for ( ; ! FAILED () && count > 0; -- count )
+    {
+        rc_t rc = VCursorOpenRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorCommitRow ( self -> curs );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorCommitRow failed for column '%s'", self -> full_spec );
+                else if ( count > 1 )
+                {
+                    /* setting it small since threshold is detected in CommitRow, but execused on CloseRow */
+                    uint64_t cnt = ( count < 0x10000000U ) ? count : 0x10000000U; 
+                    rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+                    if ( rc != 0 )
+                        SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+                    else
+                        count -= cnt - 1;
+                }
+            }
+
+            rc = VCursorCloseRow ( self -> curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+        }
+    }
+}
+
+static
+void SimpleColumnWriterCommit ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorCommit ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorRelease ( self -> curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+        else
+        {
+            self -> curs = NULL;
+        }
+    }
+}
+
+
+static ColumnWriter_vt SimpleColumnWriter_vt =
+{
+    SimpleColumnWriterWhack,
+    SimpleColumnWriterFullSpec,
+    SimpleColumnWriterDummyStub,
+    SimpleColumnWriterDummyStub,
+    SimpleColumnWriterWrite,
+    SimpleColumnWriterWriteStatic,
+    SimpleColumnWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ *  interface to write column in serial order
+ */
+
+
+/* MakeColumnWriter
+ *  make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( TablePair *self, const ctx_t *ctx,
+   VCursor *opt_curs, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t idx;
+        rc = VCursorAddColumn ( curs, & idx, "%s", colspec );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, colspec );
+        else
+        {
+            VCursorSuspendTriggers ( curs );
+
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to open cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+            else
+            {
+                SimpleColumnWriter *col;
+                size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+                TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                {
+                    ColumnWriterInit ( & col -> dad, ctx, & SimpleColumnWriter_vt, false );
+                    col -> curs = curs;
+                    col -> idx = idx;
+
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "dst.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+                CATCH_ALL ()
+                {
+                    ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnWriter", sizeof * col + full_spec_size );
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnWriter" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnWriter" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnWriter" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnWriter" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnWriter* ) self;
+}
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx, const ColumnWriter_vt *vt, bool mapped )
+{
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad ColumnWriter" );
+    }
+    else
+    {
+        self -> vt = vt;
+        KRefcountInit ( & self -> refcount, 1, "ColumnWriter", "init", "" );
+        self -> mapped = mapped;
+        memset ( self -> align, 0, sizeof self -> align );
+    }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ *  interface to pairing of source and destination columns
+ */
+
+/* Whack
+ */
+static
+void ColumnPairWhack ( ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnReaderRelease ( self -> reader, ctx );
+    ColumnWriterRelease ( self -> writer, ctx );
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+/* MakeColumnPair
+ *  make a simple ColumnPair
+ *  takes an optional source VCursor
+ *  and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + 1;
+
+    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+    {
+        TRY ( col -> reader = ColumnReaderDuplicate ( reader, ctx ) )
+        {
+            TRY ( col -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                rc_t rc;
+
+                col -> full_spec_size = full_spec_size;
+                KRefcountInit ( & col -> refcount, 1, "ColumnPair", "make", colspec );
+                col -> is_static = false;
+                col -> is_mapped = writer -> mapped;
+                col -> presorted = reader -> presorted;
+                col -> large = large;
+
+                rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                    "%s.%s", self -> full_spec, colspec );
+                if ( rc == 0 )
+                {
+                    col -> colspec = & col -> full_spec [ self -> full_spec_size + 1 ];
+                    return col;
+                }
+
+                ABORT ( rc, "miscalculated string size" );
+            }
+
+            ColumnReaderRelease ( col -> reader, ctx );
+        }
+
+        MemFree ( ctx, col, sizeof * col + full_spec_size );
+    }
+
+    return NULL;
+}
+
+ColumnPair *TablePairMakeStaticColumnPair ( TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    TRY ( col = TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, false ) )
+    {
+        if ( col != NULL )
+            col -> is_static = true;
+    }
+
+    return col;
+}
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ColumnPairWhack ( self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcColumn, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcColumn, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnPair" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnPair* ) self;
+}
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnReaderPreCopy ( self -> reader, ctx );
+    ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnReaderPostCopy ( self -> reader, ctx );
+    ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+
+/* Copy
+ *  copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, RowSet *rs )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 3, "copying column '%s'", self -> full_spec );
+
+    TRY ( RowSetReset ( rs, ctx, self -> is_static ) )
+    {
+        TRY ( ColumnPairPreCopy ( self, ctx ) )
+        {
+            while ( ! FAILED () )
+            {
+                rc_t rc;
+                size_t i, count;
+                int64_t row_ids [ 8 * 1024 ];
+
+                ON_FAIL ( count = RowSetNext ( rs, ctx, row_ids, sizeof row_ids / sizeof row_ids [ 0 ] ) )
+                    break;
+                if ( count == 0 )
+                    break;
+
+                rc = Quitting ();
+                if ( rc != 0 )
+                {
+                    INFO_ERROR ( rc, "quitting" );
+                    break;
+                }
+
+                for ( i = 0; ! FAILED () && i < count; ++ i )
+                {
+                    const void *base;
+                    uint32_t elem_bits, boff, row_len;
+                    
+                    TRY ( base = ColumnReaderRead ( self -> reader, ctx, row_ids [ i ], & elem_bits, & boff, & row_len ) )
+                    {
+                        ColumnWriterWrite ( self -> writer, ctx, elem_bits, base, boff, row_len );
+                    }
+                }
+            }
+
+            ColumnPairPostCopy ( self, ctx );
+        }
+    }
+}
+
+
+/* CopyStatic
+ *  copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+    uint32_t elem_bits, boff, row_len;
+
+    if ( ! self -> is_static )
+    {
+        rc = RC ( rcExe, rcColumn, rcCopying, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "'%s' IS NOT A STATIC COLUMN", self -> full_spec );
+        return;
+    }
+
+    STATUS ( 3, "copying static column '%s'", self -> full_spec );
+                    
+    TRY ( base = ColumnReaderRead ( self -> reader, ctx, first_id, & elem_bits, & boff, & row_len ) )
+    {
+        ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, base, boff, row_len, count );
+    }
+}
diff --git a/tools/sra-sort/col-pair.h b/tools/sra-sort/col-pair.h
new file mode 100644
index 0000000..b14df08
--- /dev/null
+++ b/tools/sra-sort/col-pair.h
@@ -0,0 +1,323 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_col_pair_
+#define _h_sra_sort_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct RowSet;
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in random order
+ */
+typedef struct ColumnReader_vt ColumnReader_vt;
+
+typedef struct ColumnReader ColumnReader;
+struct ColumnReader
+{
+    const ColumnReader_vt *vt;
+    KRefcount refcount;
+    bool presorted;
+    uint8_t align [ 3 ];
+};
+
+#ifndef COLREADER_IMPL
+#define COLREADER_IMPL ColumnReader
+#endif
+
+struct ColumnReader_vt
+{
+    /* called by Release */
+    void ( * whack ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* full spec */
+    const char* ( * full_spec ) ( const COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* id-range */
+    uint64_t ( * id_range ) ( const COLREADER_IMPL *self, const ctx_t *ctx, int64_t *opt_first );
+
+    /* pre-post copy handlers */
+    void ( * pre_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve next source row */
+    const void* ( * read ) ( COLREADER_IMPL *self, const ctx_t *ctx,
+        int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len );
+};
+
+
+/* MakeColumnReader
+ *  make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( struct TablePair *self, const ctx_t *ctx,
+    struct VCursor const *opt_curs, const char *colspec, bool required );
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ *  returns 'src.<tbl>.<colspec>'
+ */
+#define ColumnReaderFullSpec( self, ctx ) \
+    POLY_DISPATCH_PTR ( full_spec, self, const COLREADER_IMPL, ctx )
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+#define ColumnReaderIdRange( self, ctx, opt_first ) \
+    POLY_DISPATCH_INT ( id_range, self, const COLREADER_IMPL, ctx, opt_first )
+
+
+/* PreCopy
+ * PostCopy
+ *  handlers for any operations
+ */
+#define ColumnReaderPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, COLREADER_IMPL, ctx )
+#define ColumnReaderPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, COLREADER_IMPL, ctx )
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+#define ColumnReaderRead( self, ctx, row_id, elem_bits, boff, row_len )  \
+    POLY_DISPATCH_PTR ( read, self, COLREADER_IMPL, ctx, row_id, elem_bits, boff, row_len )
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt );
+
+/* Destroy
+ */
+#define ColumnReaderDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ *  interface to write column in serial order
+ */
+typedef struct ColumnWriter_vt ColumnWriter_vt;
+
+typedef struct ColumnWriter ColumnWriter;
+struct ColumnWriter
+{
+    const ColumnWriter_vt *vt;
+    KRefcount refcount;
+    bool mapped;
+    uint8_t align [ 3 ];
+};
+
+#ifndef COLWRITER_IMPL
+#define COLWRITER_IMPL ColumnWriter
+#endif
+
+struct ColumnWriter_vt
+{
+    /* called by Release */
+    void ( * whack ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* full spec */
+    const char* ( * full_spec ) ( const COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* pre-post copy handlers */
+    void ( * pre_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* write row to destination */
+    void ( * write ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+        uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len );
+    void ( * write_static ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+        uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count );
+
+    /* commit all writes */
+    void ( * commit ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeColumnWriter
+ *  make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( struct TablePair *self, const ctx_t *ctx,
+    struct VCursor *opt_curs, const char *colspec );
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ *  returns 'dst.<tbl>.<colspec>'
+ */
+#define ColumnWriterFullSpec( self, ctx ) \
+    POLY_DISPATCH_PTR ( full_spec, self, const COLWRITER_IMPL, ctx )
+
+
+/* PreCopy
+ * PostCopy
+ *  handlers for any operations
+ */
+#define ColumnWriterPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, COLWRITER_IMPL, ctx )
+#define ColumnWriterPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, COLWRITER_IMPL, ctx )
+
+
+/* Write
+ *  write a row of data
+ */
+#define ColumnWriterWrite( self, ctx, elem_bits, data, boff, row_len ) \
+    POLY_DISPATCH_VOID ( write, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len )
+
+/* WriteStatic
+ *  writes a repeated row
+ */
+#define ColumnWriterWriteStatic( self, ctx, elem_bits, data, boff, row_len, count ) \
+    POLY_DISPATCH_VOID ( write_static, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len, count )
+
+
+/* Commit
+ *  commits all writes
+ */
+#define ColumnWriterCommit( self, ctx ) \
+    POLY_DISPATCH_VOID ( commit, self, COLWRITER_IMPL, ctx )
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx,
+    const ColumnWriter_vt *vt, bool mapped );
+
+/* Destroy
+ */
+#define ColumnWriterDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ *  interface to pairing of source and destination columns
+ */
+typedef struct ColumnPair ColumnPair;
+struct ColumnPair
+{
+    ColumnReader *reader;
+    ColumnWriter *writer;
+
+    const char *colspec;
+
+    size_t full_spec_size;
+
+    KRefcount refcount;
+
+    bool is_static;
+
+    bool is_mapped;
+
+    bool presorted;
+
+    bool large;
+
+    char full_spec [ 1 ];
+};
+
+
+/* MakeColumnPair
+ *  make a simple ColumnPair
+ *  takes an optional source VCursor
+ *  and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( struct TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large );
+
+ColumnPair *TablePairMakeStaticColumnPair ( struct TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx );
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, struct RowSet *rs );
+
+
+/* CopyStatic
+ *  copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count );
+
+
+#endif /* _h_sra_sort_col_pair_ */
diff --git a/tools/sra-sort/csra-pair.c b/tools/sra-sort/csra-pair.c
new file mode 100644
index 0000000..f58d9ff
--- /dev/null
+++ b/tools/sra-sort/csra-pair.c
@@ -0,0 +1,228 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRAPair;
+#define DBPAIR_IMPL struct cSRAPair
+
+#include "csra-pair.h"
+#include "csra-tbl.h"
+#include "meta-pair.h"
+#include "dir-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-pair );
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+static
+void cSRAPairWhack ( cSRAPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* destroy me */
+    MapFileRelease ( self -> seq_idx, ctx );
+    MapFileRelease ( self -> sa_idx, ctx );
+    MapFileRelease ( self -> pa_idx, ctx );
+
+    DbPairDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+TablePair *cSRAPairMakeTablePair ( cSRAPair *self, const ctx_t *ctx,
+     const char *member, const char *name, uint32_t align_idx, bool required, bool reorder,
+     TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    TablePair *tbl;
+
+    if ( name == NULL )
+        name = member;
+
+    TRY ( tbl = DbPairMakeTablePair ( & self -> dad, ctx, member, name, required, reorder, make ) )
+    {
+        if ( tbl != NULL )
+        {
+            TRY ( DbPairAddTablePair ( & self -> dad, ctx, tbl ) )
+            {
+                ( ( cSRATblPair* ) tbl ) -> align_idx = align_idx;
+                return tbl;
+            }
+
+            TablePairRelease ( tbl, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+static
+void cSRAPairExplode ( cSRAPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    DirPair * dir;
+    TablePair * tbl;
+
+    TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "REFERENCE", NULL, 0, true, false, cSRATblPairMakeRef ) )
+    {
+        self -> reference = tbl;
+
+        TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "PRIMARY_ALIGNMENT", NULL, 1, true, true, cSRATblPairMakeAlign ) )
+        {
+            self -> prim_align = tbl;
+
+#if SEQUENCE_BEFORE_SECONDARY
+            TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "SEQUENCE", 0, false, true, cSRATblPairMakeSeq ) )
+            {
+                self -> sequence = tbl;
+#endif
+
+                TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "SECONDARY_ALIGNMENT", NULL, 2, false, true, cSRATblPairMakeAlign ) )
+                {
+                    self -> sec_align = tbl;
+
+                    TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "EVIDENCE_ALIGNMENT", 3, false, false, cSRATblPairMakeAlign ) )
+                    {
+                        self -> evidence_align = tbl;
+
+#if ! SEQUENCE_BEFORE_SECONDARY
+                        TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "SEQUENCE", 0, false, true, cSRATblPairMakeSeq ) )
+                        {
+                            self -> sequence = tbl;
+#endif
+
+                            TRY ( dir = DbPairMakeDirPair ( & self -> dad, ctx, "extra", false, DbPairMakeStdDirPair ) )
+                            {
+                                ON_FAIL ( DbPairAddDirPair ( & self -> dad, ctx, dir ) )
+                                    DirPairRelease ( dir, ctx );
+                            }
+#if ! SEQUENCE_BEFORE_SECONDARY
+                        }
+#endif
+                    }
+                }
+#if SEQUENCE_BEFORE_SECONDARY
+            }
+#endif
+        }
+    }
+}
+
+static
+const char *cSRAPairGetTblMember ( const cSRAPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* special kludge for "SEQUENCE" table */
+    if ( strcmp ( name, "SEQUENCE" ) == 0 )
+    {
+        /* determine whether table has CMP_CSREAD */
+        rc_t rc;
+        const VCursor *curs;
+
+        STATUS ( 4, "determining member name of SEQUENCE table" );
+
+        rc = VTableCreateCursorRead ( src, & curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableOpenCursorRead failed on '%s.%s'", self -> dad . full_spec, name );
+        else
+        {
+            uint32_t idx;
+            rc = VCursorAddColumn ( curs, & idx, "CMP_CSREAD" );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen ( curs );
+                if ( rc == 0 )
+                    name = "CS_SEQUENCE";
+            }
+
+            VCursorRelease ( curs );
+        }
+
+        STATUS ( 4, "SEQUENCE table member name determined to be '%s'", name );
+    }
+
+    return name;
+}
+
+static DbPair_vt cSRAPair_vt =
+{
+    cSRAPairWhack,
+    cSRAPairExplode,
+    cSRAPairGetTblMember
+};
+
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *db;
+
+    TRY ( db = MemAlloc ( ctx, sizeof * db, true ) )
+    {
+        TRY ( DbPairInit ( & db -> dad, ctx, & cSRAPair_vt, src, dst, name, NULL ) )
+        {
+            static const char *exclude_tbls [] =
+            {
+                "EVIDENCE_ALIGNMENT",
+                "PRIMARY_ALIGNMENT",
+                "REFERENCE",
+                "SECONDARY_ALIGNMENT",
+                "SEQUENCE"
+            };
+            db -> dad . exclude_tbls = exclude_tbls;
+
+            return & db -> dad;
+        }
+
+        MemFree ( ctx, db, sizeof * db );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/csra-pair.h b/tools/sra-sort/csra-pair.h
new file mode 100644
index 0000000..48791d0
--- /dev/null
+++ b/tools/sra-sort/csra-pair.h
@@ -0,0 +1,87 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_pair_
+#define _h_sra_sort_csra_pair_
+
+#ifndef _h_sra_sort_db_pair_
+#include "db-pair.h"
+#endif
+
+
+#define SEQUENCE_BEFORE_SECONDARY 1
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct cSRAPair cSRAPair;
+struct cSRAPair
+{
+    DbPair dad;
+
+    /* for ultimate metadata */
+    int64_t first_half_aligned_spot;
+    int64_t first_unaligned_spot;
+
+    /* the reference table */
+    struct TablePair *reference;
+
+    /* the alignment tables */
+    struct TablePair *prim_align, *sec_align, *evidence_align;
+
+    /* the sequence table */
+    struct TablePair *sequence;
+
+    /* mapping indices */
+    struct MapFile *pa_idx, *sa_idx, *seq_idx;
+};
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ *  a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ *  half-aligned spots and capturing the first occurrence.
+ */
+struct ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer );
+
+
+#endif /* _h_sra_sort_csra_pair_ */
diff --git a/tools/sra-sort/csra-tbl.c b/tools/sra-sort/csra-tbl.c
new file mode 100644
index 0000000..5b3401a
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.c
@@ -0,0 +1,798 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRATblPair;
+#define TBLPAIR_IMPL struct cSRATblPair
+
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ref-alignid-col.h"
+#include "row-set.h"
+#include "id-mapper-col.h"
+#include "buff-writer.h"
+#include "poslen-col-pair.h"
+#include "meta-pair.h"
+#include "map-file.h"
+#include "xcheck.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/table.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-tbl );
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ *  generic database object pair
+ */
+
+static
+void cSRATblPairWhack ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    TablePairDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void cSRATblPairDummyStub ( cSRATblPair *self, const ctx_t *ctx )
+{
+}
+
+
+/* REFERENCE table
+ */
+static
+ColumnPair *cSRATblPairMakePrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)PRIMARY_ALIGNMENT_IDS";
+
+    TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+              csra -> prim_align, csra -> pa_idx, colspec ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSecAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    if ( csra -> sec_align != NULL )
+    {
+        ColumnReader *reader;
+        const char *colspec = "(I64)SECONDARY_ALIGNMENT_IDS";
+
+        TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+                  csra -> sec_align, csra -> sa_idx, colspec ) )
+        {
+            ColumnWriter *writer;
+            TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+            {
+                col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+                ColumnWriterRelease ( writer, ctx );
+            }
+            
+            ColumnReaderRelease ( reader, ctx );
+        }
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairExplodeRef ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    TRY ( col = cSRATblPairMakePrimAlignIdColPair ( self, ctx ) )
+    {
+        TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+        {
+            TRY ( col = cSRATblPairMakeSecAlignIdColPair ( self, ctx ) )
+            {
+                TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+                {
+                }
+                CATCH_ALL ()
+                {
+                    ColumnPairRelease ( col, ctx );
+                }
+            }
+        }
+        CATCH_ALL ()
+        {
+            ColumnPairRelease ( col, ctx );
+        }
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairRef ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorRef ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    const bool is_paired = false;
+    assert ( mapping == false );
+    return TablePairMakeRowSetIterator ( & self -> dad, ctx, NULL, is_paired, large );
+}
+
+static TablePair_vt cSRATblPair_Ref_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairDummyStub,
+    cSRATblPairExplodeRef,
+    cSRATblPairMakeColumnPairRef,
+    cSRATblPairDummyStub,
+    cSRATblPairDummyStub,
+    cSRATblPairGetRowSetIteratorRef
+};
+
+
+
+/* *_ALIGNMENT tables
+ */
+
+static
+void cSRATblPairWhackMappingIdx ( cSRATblPair * self, const ctx_t * ctx )
+{
+    cSRAPair *csra = self -> csra;
+
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    self -> rsi = NULL;
+
+    MapFileRelease ( csra -> pa_idx, ctx );
+    csra -> pa_idx = NULL;
+
+    MapFileRelease ( csra -> seq_idx, ctx );
+    csra -> seq_idx = NULL;
+}
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPairPrim ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)SEQ_SPOT_ID";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            ColumnWriter *mapped;
+            const bool can_assign_ids = true;
+            TRY ( mapped = TablePairMakeMapRowIdWriter ( & self -> dad, ctx, writer, csra -> seq_idx, can_assign_ids ) )
+            {
+                ColumnWriter *buffered;
+                TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, mapped ) )
+                {
+                    col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+                    ColumnWriterRelease ( buffered, ctx );
+                }
+
+                ColumnWriterRelease ( mapped, ctx );
+            }
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)SEQ_SPOT_ID";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            ColumnWriter *buffered;
+            /* create a buffered writer with NO id-assignment capabilities. */
+            TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+                      writer, csra -> seq_idx, false ) )
+            {
+                col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+                ColumnWriterRelease ( buffered, ctx );
+            }
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakePoslenColPair ( cSRATblPair *self, const ctx_t *ctx, const MapFile *idx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+
+    ColumnReader *reader;
+    const char *colspec = "(U64)GLOBAL_POSLEN";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakePoslenColReader ( & self -> dad, ctx, idx, colspec ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakePoslenColWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    cSRAPair *csra = self -> csra;
+
+    switch ( self -> align_idx )
+    {
+    case 1:
+        csra -> pa_idx = MapFileMakeForPoslen ( ctx, csra -> prim_align -> name );
+        break;
+    case 2:
+        csra -> sa_idx = MapFileMakeForPoslen ( ctx, csra -> sec_align -> name );
+        break;
+    }
+}
+
+static
+void cSRATblPairExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    /* create special case for SEQ_SPOT_ID */
+    switch ( self -> align_idx )
+    {
+    case 1:
+        col = cSRATblPairMakeSeqSpotIdColPairPrim ( self, ctx );
+        break;
+    case 0:
+    case 2:
+    case 3:
+        col = cSRATblPairMakeSeqSpotIdColPair ( self, ctx );
+        break;
+    default:
+        ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+        return;
+    }
+
+    if ( ! FAILED () )
+    {
+        TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+        {
+            cSRAPair *csra = self -> csra;
+
+            switch ( self -> align_idx )
+            {
+            case 1:
+                col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> pa_idx );
+                break;
+            case 2:
+                col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> sa_idx );
+                break;
+            default:
+                return;
+            }
+
+            if ( ! FAILED () )
+            {
+                TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+                {
+                    return;
+                }
+            }
+        }
+
+        ColumnPairRelease ( col, ctx );
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairAlign ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapFile *idx = NULL;
+    ColumnPair *col = NULL;
+    ColumnWriter *buffered;
+
+    switch ( self -> align_idx )
+    {
+    case 0:
+    case 3:
+        return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+    case 1:
+    case 2:
+    {
+        /* look for special MATE_ALIGN_ID column */
+        const char *colname = strrchr ( colspec, ')' );
+        if ( colname ++ == NULL )
+            colname = colspec;
+        if ( strcmp ( colname, "MATE_ALIGN_ID" ) == 0 )
+        {
+            cSRAPair *csra = self -> csra;
+            idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+        }
+        break;
+    }
+
+    default:
+        ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+        return NULL;
+    }
+
+    /* create a buffer on writer, possibly with mapping */
+    buffered = ( idx != NULL ) ?
+        /* create a buffered mapping writer but WITHOUT id assignment capabilities */
+        cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx, writer, idx, false ):
+        /* create a normal buffered writer */
+        cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer );
+
+    if ( ! FAILED () )
+    {
+        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+        ColumnWriterRelease ( buffered, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPostCopyAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    self -> rsi = NULL;
+
+    if ( self -> align_idx == 2 )
+    {
+        MapFileRelease ( self -> csra -> sa_idx, ctx );
+        self -> csra -> sa_idx = NULL;
+    }
+
+    switch ( self -> align_idx )
+    {
+    case 1:
+        CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> prim_align -> dtbl, "PRIMARY_ALIGNMENT" );
+        break;
+    case 2:
+        CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> sec_align -> dtbl, "SECONDARY_ALIGNMENT" );
+
+#if SEQUENCE_BEFORE_SECONDARY
+        cSRATblPairWhackMappingIdx ( self, ctx );
+#endif
+
+        break;
+    }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorAlign ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        MapFile *idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+        TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, idx, mapping, large ) )
+        {
+            return RowSetIteratorDuplicate ( self -> rsi, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+
+static TablePair_vt cSRATblPair_Align_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairPreExplodeAlign,
+    cSRATblPairExplodeAlign,
+    cSRATblPairMakeColumnPairAlign,
+    cSRATblPairDummyStub,
+    cSRATblPairPostCopyAlign,
+    cSRATblPairGetRowSetIteratorAlign
+};
+
+
+
+/* SEQUENCE table
+ */
+
+static
+ColumnPair *cSRATblPairMakeSeqPrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)PRIMARY_ALIGNMENT_ID";
+
+    /* this column may not be present if there are no alignments */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, false ) )
+    {
+        if ( reader != NULL )
+        {
+            ColumnWriter *writer;
+            TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+            {
+                ColumnWriter *capture;
+                TRY ( capture = cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( csra, ctx, writer ) )
+                {
+                    ColumnWriter *buffered;
+
+                    /* create a buffered writer WITHOUT id-assignment capabilities. */
+                    TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+                              capture, csra -> pa_idx, false ) )
+                    {
+                        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, true );
+
+                        ColumnWriterRelease ( buffered, ctx );
+                    }
+
+                    ColumnWriterRelease ( capture, ctx );
+                }
+                
+                ColumnWriterRelease ( writer, ctx );
+            }
+            
+            ColumnReaderRelease ( reader, ctx );
+        }
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreExplodeSeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairExplode ( & self -> dad, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        TRY ( csra -> seq_idx = MapFileMake ( ctx, self -> dad . name, true ) )
+        {
+            TRY ( MapFileSetIdRange ( csra -> seq_idx, ctx, self -> dad . first_id,
+                      self -> dad . last_excl - self -> dad . first_id ) )
+            {
+                ColumnPair *col;
+
+                /* create special case for PRIMARY_ALIGNMENT_ID */
+                TRY ( col = cSRATblPairMakeSeqPrimAlignIdColPair ( self, ctx ) )
+                {
+                    TablePairAddColumnPair ( & self -> dad, ctx, col );
+                }
+            }
+        }
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairSeq ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    ColumnWriter *buffered;
+
+    TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer ) )
+    {
+        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+        ColumnWriterRelease ( buffered, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+    STATUS ( 3, "assigning new row-ids to unaligned sequences" );
+    csra -> first_unaligned_spot = MapFileAllocMissingNewIds ( self -> csra -> seq_idx, ctx );
+}
+
+static
+void cSRATblPairPostCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+#if ! SEQUENCE_BEFORE_SECONDARY
+    cSRATblPairWhackMappingIdx ( self, ctx );
+#endif
+
+    /* record markers in metadata */
+    if ( ! FAILED () && ( csra -> first_half_aligned_spot != 0 || csra -> first_unaligned_spot != 0 ) )
+    {
+        MetaPair *meta = self -> dad . meta;
+        KMDataNode *unaligned_node;
+        const char *node_path = "unaligned";
+        rc_t rc = KMetadataOpenNodeUpdate ( meta -> dmeta, & unaligned_node, "%s", node_path );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to open '%s'", node_path );
+        else
+        {
+            KMDataNode *node;
+            if ( csra -> first_half_aligned_spot != 0 )
+            {
+                node_path = "first-half-aligned";
+                rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, "%s", node_path );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+                else
+                {
+                    rc = KMDataNodeWriteB64 ( node, & csra -> first_half_aligned_spot );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+                    KMDataNodeRelease ( node );
+                }
+            }
+
+            if ( ! FAILED () && csra -> first_unaligned_spot != 0 )
+            {
+                node_path = "first-unaligned";
+                rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, "%s", node_path );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+                else
+                {
+                    rc = KMDataNodeWriteB64 ( node, & csra -> first_unaligned_spot );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+                    KMDataNodeRelease ( node );
+                }
+            }
+
+            KMDataNodeRelease ( unaligned_node );
+        }
+    }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorSeq ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, csra -> seq_idx, mapping, large ) )
+        {
+            return RowSetIteratorDuplicate ( self -> rsi, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+static TablePair_vt cSRATblPair_Seq_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairPreExplodeSeq,
+    cSRATblPairDummyStub,
+    cSRATblPairMakeColumnPairSeq,
+    cSRATblPairPreCopySeq,
+    cSRATblPairPostCopySeq,
+    cSRATblPairGetRowSetIteratorSeq
+};
+
+
+
+/* Init
+ *  common initialization code
+ */
+static
+void cSRATblPairInit ( void *self, cSRATblPair *tbl )
+{
+    tbl -> csra = self;
+    tbl -> rsi = NULL;
+    tbl -> align_idx = 0;
+}
+
+
+/* MakeRef
+ *  special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Ref_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_IDS", "SECONDARY_ALIGNMENT_IDS", "READ", "SPOT_GROUP", NULL };
+            static const char *nonstatic_cols [] = { "NAME", NULL };
+            tbl -> dad . exclude_col_names = exclude_cols;
+            tbl -> dad . nonstatic_col_names = nonstatic_cols;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+
+/* MakeAlign
+ *  special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Align_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "GLOBAL_REF_START", "READ_LEN", "REF_ID", "REF_START", "REF_LEN", "SEQ_SPOT_ID", NULL };
+            static const char *unsorted_exclude_cols [] = { "READ_LEN", "SEQ_SPOT_ID", NULL };
+            tbl -> dad . exclude_col_names = reorder ? exclude_cols : unsorted_exclude_cols;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+
+/* MakeSeq
+ *  special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Seq_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_ID", NULL };
+            static const char *nonstatic_cols [] = { "NAME_FMT", NULL };
+            static const char *large_cols [] = { "CMP_READ", "QUALITY", NULL };
+            static const char *exclude_meta [] = { "unaligned", NULL };
+            tbl -> dad . exclude_col_names = exclude_cols;
+            tbl -> dad . nonstatic_col_names = nonstatic_cols;
+            tbl -> dad . large_col_names = large_cols;
+            tbl -> dad . exclude_meta = exclude_meta;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/csra-tbl.h b/tools/sra-sort/csra-tbl.h
new file mode 100644
index 0000000..7eae0b2
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_tbl_
+#define _h_sra_sort_csra_tbl_
+
+#ifndef _h_sra_sort_tbl_pair_
+#include "tbl-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct cSRAPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct cSRATblPair cSRATblPair;
+struct cSRATblPair
+{
+    TablePair dad;
+
+    /* database */
+    struct cSRAPair *csra;
+
+    /* special rowset iterator */
+    struct RowSetIterator *rsi;
+
+    /* if an alignment table, which one? */
+    uint32_t align_idx;
+};
+
+
+/* MakeRef
+ *  special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeAlign
+ *  special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeSeq
+ *  special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+#endif /* _h_sra_sort_csra_tbl_ */
diff --git a/tools/sra-sort/ctx.h b/tools/sra-sort/ctx.h
new file mode 100644
index 0000000..cfd4275
--- /dev/null
+++ b/tools/sra-sort/ctx.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ctx_
+#define _h_sra_sort_ctx_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct Caps;
+
+
+/*--------------------------------------------------------------------------
+ * file entry
+ *  modified from vdb-3 to not place requirements on Makefile
+ */
+#if ! defined __mod__ && ! defined __file__
+#define FILE_ENTRY( __file_name__ )                                     \
+    static const char __mod__ [] = "tools/sra-sort";                    \
+    static const char __file__ [] = STRINGIZE_DEFINE ( __file_name__ )
+#else
+#define FILE_ENTRY( __file_name__ ) /* already defined */
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * ctx_info_t
+ */
+typedef struct ctx_info_t ctx_info_t;
+struct ctx_info_t
+{
+    const char *mod;
+    const char *file;
+    const char *func;
+};
+
+#define DECLARE_CTX_INFO() \
+    static ctx_info_t ctx_info = { __mod__, __file__, __func__ }
+
+
+/*--------------------------------------------------------------------------
+ * ctx_t
+ *  modified from vdb-3
+ */
+struct ctx_t
+{
+    struct Caps const *caps;
+    const ctx_t *caller;
+    const ctx_info_t *info;
+    volatile rc_t rc;
+};
+
+
+/* INIT
+ *  initialize local context block
+ */
+static __inline__
+const ctx_t ctx_init ( ctx_t *new_ctx, const ctx_t **ctxp, const ctx_info_t *info )
+{
+    const ctx_t *ctx = * ctxp;
+    ctx_t local_ctx = { ctx -> caps, ctx, info };
+    * ctxp = new_ctx;
+    return local_ctx;
+}
+
+
+/* FUNC_ENTRY
+ */
+#define FUNC_ENTRY( ctx )                                               \
+    DECLARE_CTX_INFO ();                                                \
+    ctx_t local_ctx = ctx_init ( & local_ctx, & ( ctx ), & ctx_info )
+
+
+/* POP_CTX
+ *  intended to have VERY specific usage
+ */
+#define POP_CTX( ctx ) \
+    ctx = ctx -> caller
+
+
+#endif
diff --git a/tools/sra-sort/db-pair.c b/tools/sra-sort/db-pair.c
new file mode 100644
index 0000000..7be477d
--- /dev/null
+++ b/tools/sra-sort/db-pair.c
@@ -0,0 +1,885 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DbPair StdDbPair;
+#define DBPAIR_IMPL StdDbPair
+
+#include "db-pair.h"
+#include "csra-pair.h"
+#include "tbl-pair.h"
+#include "dir-pair.h"
+#include "meta-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/database.h>
+#include <kdb/meta.h>
+#include <kdb/kdb-priv.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( db-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdDbPair
+ *  generic database object pair
+ */
+
+static
+void StdDbPairWhack ( StdDbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    DbPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdDbPairExplode ( StdDbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+}
+
+static
+const char *StdDbPairGetTblMember ( const StdDbPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+    return name;
+}
+
+static DbPair_vt StdDbPair_vt =
+{
+    StdDbPairWhack,
+    StdDbPairExplode,
+    StdDbPairGetTblMember
+};
+
+static
+DbPair *StdDbPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdDbPair *db;
+
+    TRY ( db = MemAlloc ( ctx, sizeof * db, false ) )
+    {
+        TRY ( DbPairInit ( db, ctx, & StdDbPair_vt, src, dst, name, opt_full_spec ) )
+        {
+            return db;
+        }
+
+        MemFree ( ctx, db, sizeof * db );
+    }
+
+    return NULL;
+}
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ *  interface code
+ */
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+static
+bool is_csra_db ( const VDatabase *src, const ctx_t *ctx )
+{
+    /* TBD - hack'o-matic */
+    return true;
+}
+
+DbPair *DbPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* intercept certain types of databases - right now cSRA */
+    if ( is_csra_db ( src, ctx ) )
+        return cSRAPairMake ( ctx, src, dst, name );
+
+    return StdDbPairMake ( ctx, src, dst, name, NULL );
+}
+
+DbPair *DbPairMakeStdDbPair ( DbPair *self, const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return StdDbPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "DbPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDatabase, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release DbPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "DbPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDatabase, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate DbPair" );
+            return NULL;
+        }
+    }
+
+    return ( DbPair* ) self;
+}
+
+
+/* Copy
+ */
+static
+bool CC DbPairCopyDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DbPairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairCopyTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairCopyDirPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DirPairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+void DbPairCopy ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 2, "copying database '%s'", self -> full_spec );
+
+    /* copy metadata */
+    MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+
+    /* copy all child databases */
+    if ( ! FAILED () && VectorLength ( & self -> dbs ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' sub-databases", self -> full_spec );
+        VectorDoUntil ( & self -> dbs, false, DbPairCopyDbPair, ( void* ) ctx );
+    }
+
+    /* now we should be able to copy each table */
+    if ( ! FAILED () && VectorLength ( & self -> tbls ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' tables", self -> full_spec );
+        VectorDoUntil ( & self -> tbls, false, DbPairCopyTablePair, ( void* ) ctx );
+    }
+
+    /* copy any directories - extra */
+    if ( ! FAILED () && VectorLength ( & self -> dirs ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' directories", self -> full_spec );
+        VectorDoUntil ( & self -> dirs, false, DbPairCopyDirPair, ( void* ) ctx );
+    }
+}
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed tables and databases
+ *  and create a proper pair of KMetadata
+ */
+static
+MetaPair *DbPairExplodeMetaPair ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    MetaPair *meta = NULL;
+    const KMetadata *smeta;
+
+    rc = VDatabaseOpenMetadataRead ( self -> sdb, & smeta );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+    else
+    {
+        KMetadata *dmeta;
+        rc = VDatabaseOpenMetadataUpdate ( self -> ddb, & dmeta );
+        if ( rc != 0 )
+            ERROR ( rc, "VDatabaseOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+        else
+        {
+            meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+            KMetadataRelease ( dmeta );
+        }
+        
+        KMetadataRelease ( smeta );
+    }
+
+    return meta;
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx );
+
+static
+bool CC DbPairExplodeDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DbPairExplode ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairPreExplodeTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairPreExplode ( ( ( TablePair* ) item ), ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+#if 0
+static
+void DbPairDefaultExplodeDB ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *names;
+
+    rc = VDatabaseListDB ( self -> sdb, & names );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseListDB failed listing '%s' databases", self -> full_spec );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( names, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing '%s' databases", self -> full_spec );
+        else if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; ! FAILED () && i < count; ++ i )
+            {
+                DbPair *db;
+
+                const char *name;
+                rc = KNamelistGet ( names, i, & name );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' databases", i, self -> full_spec );
+                    break;
+                }
+
+                if ( self -> exclude_dbs != NULL )
+                {
+                    uint32_t j;
+                    for ( j = 0; self -> exclude_dbs [ j ] != NULL; ++ j )
+                    {
+                        if ( strcmp ( name, self -> exclude_dbs [ j ] ) == 0 )
+                        {
+                            name = NULL;
+                            break;
+                        }
+                    }
+                    if ( name == NULL )
+                        continue;
+                }
+
+                TRY ( db = DbPairMakeDbPair ( self, ctx, name, name, true, DbPairMakeStdDbPair ) )
+                {
+                    ON_FAIL ( DbPairAddDbPair ( self, ctx, db ) )
+                    {
+                        DbPairRelease ( db, ctx );
+                    }
+                }
+            }
+        }
+
+        KNamelistRelease ( names );
+    }
+}
+#endif
+
+static
+void DbPairDefaultExplodeTbl ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *names;
+
+    rc = VDatabaseListTbl ( self -> sdb, & names );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseListTbl failed listing '%s' tables", self -> full_spec );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( names, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing '%s' tables", self -> full_spec );
+        else if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; ! FAILED () && i < count; ++ i )
+            {
+                TablePair *tbl;
+
+                const char *name;
+                rc = KNamelistGet ( names, i, & name );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' tables", i, self -> full_spec );
+                    break;
+                }
+
+                if ( self -> exclude_tbls != NULL )
+                {
+                    uint32_t j;
+                    for ( j = 0; self -> exclude_tbls [ j ] != NULL; ++ j )
+                    {
+                        if ( strcmp ( name, self -> exclude_tbls [ j ] ) == 0 )
+                        {
+                            name = NULL;
+                            break;
+                        }
+                    }
+                    if ( name == NULL )
+                        continue;
+                }
+
+                TRY ( tbl = DbPairMakeTablePair ( self, ctx, name, name, true, false, DbPairMakeStdTblPair ) )
+                {
+                    ON_FAIL ( DbPairAddTablePair ( self, ctx, tbl ) )
+                    {
+                        TablePairRelease ( tbl, ctx );
+                    }
+                }
+            }
+        }
+
+        KNamelistRelease ( names );
+    }
+}
+
+static
+void DbPairDefaultExplode ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+#if 0
+    TRY ( DbPairDefaultExplodeDB ( self, ctx ) )
+#endif
+    {
+        DbPairDefaultExplodeTbl ( self, ctx );
+    }
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 2, "exploding database '%s'", self -> full_spec );
+
+    /* first, ask subclass to perform explicit explode */
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcDatabase, rcAccessing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DbPair" );
+    }
+    else
+    {
+        TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+        {
+            /* next, perform default self-explode for all dbs, tbls not excluded */
+            TRY ( DbPairDefaultExplode ( self, ctx ) )
+            {
+                /* now create metadata pair */
+                if ( self -> meta == NULL )
+                    self -> meta = DbPairExplodeMetaPair ( self, ctx );
+                if ( ! FAILED () )
+                {
+                    /* now explode all child dbs, tbls */
+                    TRY ( VectorDoUntil ( & self -> dbs, false, DbPairExplodeDbPair, ( void* ) ctx ) )
+                    {
+                        VectorDoUntil ( & self -> tbls, false, DbPairPreExplodeTablePair, ( void* ) ctx );
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const Tool *tp = ctx -> caps -> tool;
+
+    STATUS ( 1, "input database is '%s'", tp -> src_path );
+    STATUS ( 1, "output database is '%s'", tp -> dst_path );
+
+    /* the first thing to do is to explode the database
+       to create sub-dbs, sub-tables, and metadata */
+    TRY ( DbPairExplode ( self, ctx ) )
+    {
+        /* now copy */
+        DbPairCopy ( self, ctx );
+    }
+
+    if ( FAILED () )
+        STATUS ( 1, "failed processing database '%s'", self -> full_spec );
+    else
+        STATUS ( 1, "finished processing database '%s'", self -> full_spec );
+}
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+    DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VDatabase *src, VDatabase *dst, const char *name ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VDatabase *src;
+    DbPair *db = NULL;
+                
+    STATUS ( 4, "creating db pair '%s.%s'", self -> full_spec, name );
+    rc = VDatabaseOpenDBRead ( self -> sdb, & src, "%s", name );
+    if ( rc != 0 )
+    {
+        if ( required )
+            ERROR ( rc, "VDatabaseOpenDBRead: failed to open db '%s.%s'", self -> full_spec, name );
+        else
+            STATUS ( 4, "optional db '%s.%s' was not opened", self -> full_spec, name );
+    }
+    else
+    {
+#if 0
+        if ( member == NULL )
+            member = DbPairGetTblMember ( self, ctx, src, name );
+#endif
+
+        if ( ! FAILED () )
+        {
+            VDatabase *dst;
+            const Tool *tp = ctx -> caps -> tool;
+            rc = VDatabaseCreateDB ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), "%s", name );
+            if ( rc != 0 )
+                ERROR ( rc, "VDatabaseCreateDB: failed to create %s db '%s.%s'", member, self -> full_spec, name );
+            else
+            {
+                db = ( * make ) ( self, ctx, src, dst, name );
+
+                VDatabaseRelease ( dst );
+            }
+        }
+
+        VDatabaseRelease ( src );
+    }
+
+    return db;
+}
+
+
+/* MakeTablePair
+ */
+TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required, bool reorder,
+    TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VTable *src;
+    TablePair *tbl = NULL;
+                
+    STATUS ( 4, "creating table pair '%s.%s'", self -> full_spec, name );
+    rc = VDatabaseOpenTableRead ( self -> sdb, & src, "%s", name );
+    if ( rc != 0 )
+    {
+        if ( required )
+            ERROR ( rc, "VDatabaseOpenTableRead: failed to open table '%s.%s'", self -> full_spec, name );
+        else
+            STATUS ( 4, "optional table '%s.%s' was not opened", self -> full_spec, name );
+    }
+    else
+    {
+        if ( member == NULL )
+            member = DbPairGetTblMember ( self, ctx, src, name );
+
+        if ( ! FAILED () )
+        {
+            VTable *dst;
+            const Tool *tp = ctx -> caps -> tool;
+            rc = VDatabaseCreateTable ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), "%s", name );
+            if ( rc != 0 )
+                ERROR ( rc, "VDatabaseCreateTable: failed to create %s table '%s.%s'", member, self -> full_spec, name );
+            else
+            {
+                tbl = ( * make ) ( self, ctx, src, dst, name, reorder );
+
+                VTableRelease ( dst );
+            }
+        }
+
+        VTableRelease ( src );
+    }
+
+    return tbl;
+}
+
+
+/* AddDbPair
+ *  called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    STATUS ( 4, "adding db pair '%s'", db -> full_spec );
+    rc = VectorAppend ( & self -> dbs, NULL, ( const void* ) db );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "failed to add db pair '%s'", db -> full_spec );
+}
+
+
+/* AddTablePair
+ *  called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, TablePair *tbl )
+{
+    if ( tbl != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+
+        STATUS ( 4, "adding table pair '%s'", tbl -> full_spec );
+        rc = VectorAppend ( & self -> tbls, NULL, ( const void* ) tbl );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add table pair '%s'", tbl -> full_spec );
+    }
+}
+
+
+/* MakeDirPair
+ */
+DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+    DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const KDirectory *src, KDirectory *dst, const char *name ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    DirPair *dir = NULL;
+    const KDatabase *sdb;
+                
+    STATUS ( 4, "creating directory pair '%s./%s'", self -> full_spec, name );
+
+    rc = VDatabaseOpenKDatabaseRead ( self -> sdb, & sdb );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseRead: failed to access KDatabase 'src.%s'", self -> full_spec );
+    else
+    {
+        KDatabase *ddb;
+        rc = VDatabaseOpenKDatabaseUpdate ( self -> ddb, & ddb );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseUpdate: failed to access KDatabase 'dst.%s'", self -> full_spec );
+        else
+        {
+            const KDirectory *sdir;
+            rc = KDatabaseOpenDirectoryRead ( sdb, & sdir );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryRead: failed to access KDirectory 'src.%s'", self -> full_spec );
+            else
+            {
+                KDirectory *ddir;
+                rc = KDatabaseOpenDirectoryUpdate ( ddb, & ddir );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryUpdate: failed to access KDirectory 'dst.%s'", self -> full_spec );
+                else
+                {
+                    switch ( KDirectoryPathType ( sdir, "%s", name ) )
+                    {
+                    case kptNotFound:
+                        if ( required )
+                        {
+                            rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcNotFound );
+                            ERROR ( rc, "required directory 'src.%s./%s' does not exist", self -> full_spec, name );
+                        }
+                        break;
+
+                    case kptBadPath:
+                        rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcInvalid );
+                        INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is invalid", self -> full_spec, name );
+                        break;
+
+                    case kptDir:
+                    case kptDir | kptAlias:
+                    {
+                        dir = ( * make ) ( self, ctx, sdir, ddir, name );
+                        break;
+                    }
+
+                    default:
+                        rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcIncorrect );
+                        INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is not a directory", self -> full_spec, name );
+                    }
+
+                    KDirectoryRelease ( ddir );
+                }
+
+                KDirectoryRelease ( sdir );
+            }
+
+            KDatabaseRelease ( ddb );
+        }
+
+        KDatabaseRelease ( sdb );
+    }
+
+    return dir;
+}
+
+
+/* AddDirPair
+ *  called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir )
+{
+    if ( dir != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+
+        STATUS ( 4, "adding directory pair '%s'", dir -> full_spec );
+        rc = VectorAppend ( & self -> dirs, NULL, ( const void* ) dir );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add directory pair '%s'", dir -> full_spec );
+    }
+}
+
+
+/* Init
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+    const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcDatabase, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DbPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+    VectorInit ( & self -> dbs, 0, 4 );
+    VectorInit ( & self -> tbls, 0, 8 );
+    VectorInit ( & self -> dirs, 0, 8 );
+
+    if ( opt_full_spec == NULL )
+        opt_full_spec = "";
+
+    rc = VDatabaseAddRef ( self -> sdb = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate db 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+    else
+    {
+        rc = VDatabaseAddRef ( self -> ddb = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate db 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+        else
+        {
+            char *full_spec;
+
+            self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+            if ( opt_full_spec [ 0 ] != 0  )
+                ++ self -> full_spec_size;
+
+            TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                if ( opt_full_spec [ 0 ] != 0 )
+                    rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+                else
+                    strcpy ( full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    static const char *no_exclude [] = { NULL };
+
+                    self -> full_spec = full_spec;
+                    self -> name = full_spec;
+                    if ( opt_full_spec [ 0 ] != 0 )
+                        self -> name += string_size ( opt_full_spec ) + 1;
+
+                    self -> exclude_dbs = no_exclude;
+                    self -> exclude_tbls = no_exclude;
+                    self -> exclude_meta = no_exclude;
+
+                    KRefcountInit ( & self -> refcount, 1, "DbPair", "init", name );
+                    return;
+                }
+            }
+
+            VDatabaseRelease ( self -> ddb );
+            self -> ddb = NULL;
+        }
+
+        VDatabaseRelease ( self -> sdb );
+        self -> sdb = NULL;
+    }
+}
+
+/* Destroy
+ *  destroys superclass items
+ */
+static
+void CC DbPairReleaseDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    DbPairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TablePairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseDirPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    DirPairRelease ( item, ctx );
+}
+
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    VectorWhack ( & self -> dbs, DbPairReleaseDbPair, ( void* ) ctx );
+    VectorWhack ( & self -> tbls, DbPairReleaseTablePair, ( void* ) ctx );
+    VectorWhack ( & self -> dirs, DbPairReleaseDirPair, ( void* ) ctx );
+
+    MetaPairRelease ( self -> meta, ctx );
+
+    rc = VDatabaseRelease ( self -> ddb );
+    if ( rc != 0 )
+        WARN ( "VDatabaseRelease failed on 'dst.%s'", self -> full_spec );
+    VDatabaseRelease ( self -> sdb );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/db-pair.h b/tools/sra-sort/db-pair.h
new file mode 100644
index 0000000..94bf817
--- /dev/null
+++ b/tools/sra-sort/db-pair.h
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_db_pair_
+#define _h_sra_sort_db_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct VTable;
+struct VDatabase;
+struct TablePair;
+struct MetaPair;
+struct DirPair;
+
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct DbPair_vt DbPair_vt;
+
+typedef struct DbPair DbPair;
+struct DbPair
+{
+    /* polymorphic */
+    const DbPair_vt *vt;
+
+    /* the pair of VDatabases */
+    struct VDatabase const *sdb;
+    struct VDatabase *ddb;
+
+    /* the set of enclosed DbPairs */
+    Vector dbs;
+
+    /* the set of TablePairs */
+    Vector tbls;
+
+    /* the set of DirPairs */
+    Vector dirs;
+
+    /* the pair of KMetadata */
+    struct MetaPair *meta;
+
+    /* exclusions */
+    const char **exclude_dbs;
+    const char **exclude_tbls;
+    const char **exclude_meta;
+
+    /* simple db name */
+    const char *name;
+
+    /* full db spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef DBPAIR_IMPL
+#define DBPAIR_IMPL DbPair
+#endif
+
+struct DbPair_vt
+{
+    void ( * whack ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * explode ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+    const char* ( * get_tbl_mbr ) ( const DBPAIR_IMPL *self, const ctx_t *ctx,
+        struct VTable const *src, const char *name );
+};
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *DbPairMake ( const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void DbPairCopy ( DbPair *self, const ctx_t *ctx );
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx );
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+    DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct VDatabase const *src, struct VDatabase *dst, const char *name )
+     );
+
+DbPair *DbPairMakeStdDbPair ( struct DbPair *self, const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeTablePair
+ */
+struct TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx,
+    const char *member, const char *name, bool required, bool reorder,
+    struct TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct VTable const *src, struct VTable *dst, const char *name, bool reorder )
+     );
+
+
+/* GetTblMember
+ *  v1 schema does not preserve member name with an object
+ *  some schemas confuse types with the same name
+ */
+#define DbPairGetTblMember( self, ctx, src, name ) \
+    POLY_DISPATCH_PTR ( get_tbl_mbr, self, const DBPAIR_IMPL, ctx, src, name )
+
+
+/* AddDbPair
+ *  called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db );
+
+
+/* AddTablePair
+ *  called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, struct TablePair *tbl );
+
+
+/* MakeDirPair
+ */
+struct DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+    struct DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct KDirectory const *src, struct KDirectory *dst, const char *name )
+     );
+
+
+/* AddDirPair
+ *  called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir );
+
+
+/* Init
+ *  initialize superclass with vt
+ *  also db pair and name
+ *  plus optional full-spec
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+    struct VDatabase const *src, struct VDatabase *dst,
+    const char *name, const char *opt_full_spec );
+
+/* Destroy
+ *  destroys superclass items
+ */
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_db_pair_ */
diff --git a/tools/sra-sort/dir-pair.c b/tools/sra-sort/dir-pair.c
new file mode 100644
index 0000000..da46b74
--- /dev/null
+++ b/tools/sra-sort/dir-pair.c
@@ -0,0 +1,504 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DirPair StdDirPair;
+#define DIRPAIR_IMPL StdDirPair
+
+#include "dir-pair.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( dir-pair );
+
+
+static
+void StdDirPairWhack ( StdDirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    DirPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static DirPair_vt StdDirPair_vt =
+{
+    StdDirPairWhack
+};
+
+
+/* Make
+ *  make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst,
+    const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdDirPair *dir;
+
+    TRY ( dir = MemAlloc ( ctx, sizeof * dir, false ) )
+    {
+        TRY ( DirPairInit ( dir, ctx, & StdDirPair_vt, src, dst, name, opt_full_spec ) )
+        {
+            return dir;
+        }
+
+        MemFree ( ctx, dir, sizeof * dir );
+    }
+
+    return NULL;
+}
+
+
+DirPair *DbPairMakeStdDirPair ( DbPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return DirPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ *  called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "DirPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDirectory, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release DirPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "DirPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDirectory, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate DirPair" );
+            return NULL;
+        }
+    }
+
+    return ( DirPair* ) self;
+}
+
+
+/* Copy
+ *  copy from source to destination directory
+ */
+typedef struct DirPairCopyParams DirPairCopyParams;
+struct DirPairCopyParams
+{
+    const DirPair *self;
+    const ctx_t *ctx;
+    char *relpath;
+    size_t psize;
+    const KDirectory *src;
+    KDirectory *dst;
+};
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath, size_t psize );
+
+static
+rc_t DirPairCopyFile ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get source access mode */
+    uint32_t access;
+    rc_t rc = KDirectoryAccess ( src, & access, "%s", relpath );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to determine access mode of file 'dst.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        KFile *d;
+        rc = KDirectoryCreateFile ( dst, & d, false, access, kcmInit | kcmParents, "%s", relpath );
+        if ( rc != 0 )
+        {
+            ERROR ( rc, "failed to create file 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        }
+        else
+        {
+            const KFile *s;
+            /* open source */
+            rc = KDirectoryOpenFileRead ( src, & s, "%s", relpath );
+            if ( rc != 0 )
+            {
+                ERROR ( rc, "failed to open file 'src.%.*s%s'",
+                        self -> owner_spec_size, self -> full_spec, relpath );
+            }
+            else
+            {
+                const KMMap *mm;
+                rc = KMMapMakeMaxRead ( & mm, s );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "failed to map file 'src.%.*s%s'",
+                            self -> owner_spec_size, self -> full_spec, relpath );
+                }
+                else
+                {
+                    uint64_t mm_pos;
+
+                    /* get initial position and size */
+                    rc = KMMapPosition ( mm, & mm_pos );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "failed to determine position of map file 'src.%.*s%s'",
+                                self -> owner_spec_size, self -> full_spec, relpath );
+                    }
+                    else
+                    {
+                        size_t mm_size;
+                        rc = KMMapSize ( mm, & mm_size );
+                        if ( rc != 0 )
+                        {
+                            ERROR ( rc, "failed to determine size of map file 'src.%.*s%s'",
+                                    self -> owner_spec_size, self -> full_spec, relpath );
+                        }
+                        else while ( mm_size != 0 )
+                        {
+                            size_t num_writ;
+                            const void *mm_addr;
+
+                            /* access address */
+                            rc = KMMapAddrRead ( mm, & mm_addr );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "failed to access address of map file 'src.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+
+                            /* write region to output */
+                            rc = KFileWriteAll ( d, mm_pos, mm_addr, mm_size, & num_writ );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+                            if ( num_writ != mm_size )
+                            {
+                                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                                ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+
+                            /* now try to shift region */
+                            mm_pos += mm_size;
+                            rc = KMMapReposition ( mm, mm_pos, & mm_size );
+                            if ( rc != 0 )
+                            {
+                                if ( GetRCState ( rc ) == rcInvalid )
+                                    rc = 0;
+                                else
+                                {
+                                    ERROR ( rc, "failed to remap file 'src.%.*s%s'",
+                                            self -> owner_spec_size, self -> full_spec, relpath );
+                                }
+                                break;
+                            }
+                        }
+                    }
+
+                    KMMapRelease ( mm );
+                }
+
+                KFileRelease ( s );
+            }
+
+            KFileRelease ( d );
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t DirPairCopyAlias ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+#if WINDOWS
+    rc = RC ( rcExe, rcAlias, rcCopying, rcFunction, rcUnsupported );
+    ERROR ( rc, "Windows... failed to create alias 'dst.%.*s%s'",
+            self -> owner_spec_size, self -> full_spec, relpath );
+#else
+    char apath [ 4096 ];
+
+    /* resolve the alias */
+    rc = KDirectoryResolveAlias ( src, false, apath, sizeof apath, "%s", relpath );    
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to resolve alias 'src.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        rc = KDirectoryCreateAlias ( dst, 0777, kcmInit, apath, relpath );
+        if ( rc != 0 )
+        {
+            ERROR ( rc, "failed to create alias 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        }
+    }
+#endif
+
+    return rc;
+}
+
+static
+rc_t CC DirPairCopyEntry ( const KDirectory *local, uint32_t type, const char *name, void *data )
+{
+    DirPairCopyParams *pb = data;
+    const ctx_t *ctx = pb -> ctx;
+
+    FUNC_ENTRY ( ctx );
+
+    const DirPair *self = pb -> self;
+    char *relpath = pb -> relpath;
+    size_t num_writ, psize = pb -> psize;
+
+    /* since we are walking two directories in parallel,
+       build a path relative to each base directory and go */
+    rc_t rc = string_printf ( & relpath [ psize ], 4096 - psize, & num_writ, "/%s", name );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to build path for entry '%.*s%.*s/%s'",
+                self -> owner_spec_size, self -> full_spec,
+                ( uint32_t ) psize, relpath, name );
+        return rc;
+    }
+
+    /* see what type of entry we have */
+    switch ( type )
+    {
+    case kptFile:
+        return DirPairCopyFile ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+    case kptDir:
+        return DirPairCopyDir ( pb -> self, ctx, pb -> src, pb -> dst, relpath, psize + num_writ );
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        return DirPairCopyAlias ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+    }
+
+    rc = RC ( rcExe, rcDirectory, rcVisiting, rcType, rcUnsupported );
+    ERROR ( rc, "cannot copy entry '%.*s%s' - not a supported file system type",
+            self -> owner_spec_size, self -> full_spec, relpath );
+    return rc;
+}
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath, size_t psize )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get source access mode */
+    uint32_t access;
+    rc_t rc = KDirectoryAccess ( src, & access, "%s", relpath );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to determine access mode of directory 'src.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        /* create the destination directory */
+        rc = KDirectoryCreateDir ( dst, access, kcmOpen | kcmParents, "%s", relpath );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to create directory 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        else
+        {
+            DirPairCopyParams pb;
+
+            pb . self = self;
+            pb . ctx = ctx;
+            pb . relpath = relpath;
+            pb . psize = psize;
+            pb . src = src;
+            pb . dst = dst;
+
+            /* going to perform shallow copy */
+            rc = KDirectoryVisit ( src, false, DirPairCopyEntry, & pb, "%s", relpath );
+        }
+    }
+
+    return rc;
+}
+
+
+void DirPairCopy ( DirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t psize;
+    char relpath [ 4096 ];
+
+    STATUS ( 2, "copying directory '%s'", self -> full_spec );
+
+    rc = string_printf ( relpath, sizeof relpath, & psize, "./%s", self -> name );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "failed to build initial path string for '%s'", self -> full_spec );
+    else
+    {
+        DirPairCopyDir ( self, ctx, self -> sdir, self -> ddir, relpath, psize );
+    }
+}
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+    const KDirectory *src, KDirectory *dst,
+    const char *name, const char *full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcDirectory, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DirPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    rc = KDirectoryAddRef ( self -> sdir = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate dir 'src.%s./%s'", full_spec, name );
+    else
+    {
+        rc = KDirectoryAddRef ( self -> ddir = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate dir 'dst.%s./%s'", full_spec, name );
+        else
+        {
+            char *new_full_spec;
+
+            self -> owner_spec_size = ( uint32_t ) string_size ( full_spec );
+            self -> full_spec_size = self -> owner_spec_size + string_size ( name ) + 2;
+
+            TRY ( new_full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                rc = string_printf ( new_full_spec, self -> full_spec_size + 1, NULL, "%s./%s", full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    self -> full_spec = new_full_spec;
+                    self -> name = new_full_spec + self -> owner_spec_size + 2;
+
+                    KRefcountInit ( & self -> refcount, 1, "DirPair", "init", name );
+                    return;
+                }
+            }
+
+            KDirectoryRelease ( self -> ddir );
+            self -> ddir = NULL;
+        }
+
+        KDirectoryRelease ( self -> sdir );
+        self -> sdir = NULL;
+    }
+}
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = KDirectoryRelease ( self -> ddir );
+    if ( rc != 0 )
+        WARN ( "KDirectoryRelease failed on 'dst.%s'", self -> full_spec );
+    KDirectoryRelease ( self -> sdir );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/dir-pair.h b/tools/sra-sort/dir-pair.h
new file mode 100644
index 0000000..7bccb93
--- /dev/null
+++ b/tools/sra-sort/dir-pair.h
@@ -0,0 +1,124 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_dir_pair_
+#define _h_sra_sort_dir_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * DirPair
+ *  interface to pairing of source and destination directories
+ */
+typedef struct DirPair_vt DirPair_vt;
+
+typedef struct DirPair DirPair;
+struct DirPair
+{
+    /* polymorphic */
+    const DirPair_vt *vt;
+
+    /* the pair of KDirectories */
+    struct KDirectory const *sdir;
+    struct KDirectory *ddir;
+
+    /* simple directory name */
+    const char *name;
+
+    /* full directory spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+
+    /* owner spec size */
+    uint32_t owner_spec_size;
+};
+
+#ifndef DIRPAIR_IMPL
+#define DIRPAIR_IMPL DirPair
+#endif
+
+struct DirPair_vt
+{
+    void ( * whack ) ( DIRPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ *  make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+    struct KDirectory const *src, struct KDirectory *dst,
+    const char *name, const char *full_spec );
+
+DirPair *DbPairMakeStdDirPair ( struct DbPair *self, const ctx_t *ctx,
+    struct KDirectory const *src, struct KDirectory *dst, const char *name );
+
+
+/* Release
+ *  called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination directory
+ */
+void DirPairCopy ( DirPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+    struct KDirectory const *src, struct KDirectory *dst,
+    const char *name, const char *opt_full_spec );
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_dir_pair_ */
diff --git a/tools/sra-sort/dump-blob-boundaries.c b/tools/sra-sort/dump-blob-boundaries.c
new file mode 100644
index 0000000..76cef4e
--- /dev/null
+++ b/tools/sra-sort/dump-blob-boundaries.c
@@ -0,0 +1,203 @@
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+
+static int64_t blob_limit = 10;
+
+static
+uint32_t dump_col ( const KColumn *col, const char *dbname, const char *tblname, const char *colname )
+{
+    rc_t rc = 0;
+    int64_t row, first;
+    const KColumnBlob *blob;
+    uint32_t count, num_blobs;
+
+    for ( num_blobs = 0, row = 1; rc == 0 && num_blobs < blob_limit; ++ num_blobs, row = first + count )
+    {
+        rc = KColumnOpenBlobRead ( col, & blob, row );
+        if ( rc == 0 )
+        {
+            rc = KColumnBlobIdRange ( blob, & first, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to get row-range for blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+            else
+            {
+                size_t num_read, remaining;
+                rc = KColumnBlobRead ( blob, 0, & first, 0, & num_read, & remaining );
+                if ( rc != 0 )
+                    fprintf ( stderr, "failed to get size of blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+                else
+                {
+                    printf ( "  %ld .. %ld ( %u rows ), %zu bytes\n", first, first + count - 1, count, remaining );
+                }
+            }
+
+            KColumnBlobRelease ( blob );
+        }
+        else if ( GetRCState ( rc ) == rcNotFound )
+            return num_blobs;
+        else
+        {
+            fprintf ( stderr, "failed to open blob for row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+        }
+    }
+
+    for ( ; rc == 0; ++ num_blobs, row = first + count )
+    {
+        rc = KColumnOpenBlobRead ( col, & blob, row );
+        if ( rc == 0 )
+        {
+            rc = KColumnBlobIdRange ( blob, & first, & count );
+            KColumnBlobRelease ( blob );
+        }
+    }
+
+    return num_blobs;
+}
+
+static
+void dump_col_name ( const KTable *tbl, const char *dbname, const char *tblname, const char *colname )
+{
+    const KColumn *col;
+    rc_t rc = KTableOpenColumnRead ( tbl, & col, "%s", colname );
+    if ( rc != 0 )
+        fprintf ( stderr, "failed to open column '%s.%s.%s'\n", dbname, tblname, colname );
+    else
+    {
+        uint32_t num_blobs;
+        printf ( "COLUMN '%s.%s.%s'\n", dbname, tblname, colname );
+        num_blobs = dump_col ( col, dbname, tblname, colname );
+        KColumnRelease ( col );
+        if ( num_blobs > blob_limit )
+            printf ( "  %u blobs in column\n", num_blobs );
+    }
+}
+
+static
+void dump_tbl ( const KTable *tbl, const char *tblname, int argc, char *argv [] )
+{
+    if ( argc >= 4 )
+    {
+        int i;
+        for ( i = 3; i < argc; ++ i )
+        {
+            dump_col_name ( tbl, argv [ 1 ], tblname, argv [ i ] );
+        }
+    }
+    else
+    {
+        KNamelist *names;
+        rc_t rc = KTableListCol ( tbl, & names );
+        if ( rc != 0 )
+            fprintf ( stderr, "failed to list columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to count columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count; ++ i )
+                {
+                    const char *name;
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                        fprintf ( stderr, "failed to access column name [ %u ] for tbl '%s.%s'\n", i, argv [ 1 ], tblname );
+                    else
+                    {
+                        dump_col_name ( tbl, argv [ 1 ], tblname, name );
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+static
+void dump_tbl_name ( const KDatabase *db, const char *tblname, int argc, char *argv [] )
+{
+    const KTable *tbl;
+    rc_t rc = KDatabaseOpenTableRead ( db, & tbl, "%s", tblname );
+    if ( rc != 0 )
+        fprintf ( stderr, "failed to open table '%s.%s'\n", argv [ 1 ], tblname );
+    else
+    {
+        dump_tbl ( tbl, tblname, argc, argv );
+        KTableRelease ( tbl );
+    }
+}
+
+static
+void dump_db ( const KDatabase *db, int argc, char *argv [] )
+{
+    if ( argc >= 3 )
+        dump_tbl_name ( db, argv [ 2 ], argc, argv );
+    else
+    {
+        KNamelist *names;
+        rc_t rc = KDatabaseListTbl ( db, & names );
+        if ( rc != 0 )
+            fprintf ( stderr, "failed to list tables for db '%s'\n", argv [ 1 ] );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to count tables for db '%s'\n", argv [ 1 ] );
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count; ++ i )
+                {
+                    const char *name;
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                        fprintf ( stderr, "failed to access table name [ %u ] for db '%s'\n", i, argv [ 1 ] );
+                    else
+                    {
+                        dump_tbl_name ( db, name, argc, argv );
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+int main ( int argc, char *argv [] )
+{
+    if ( argc < 2 )
+        printf ( "Usage: %s database [ table [ col ... ] ]\n", argv [ 0 ] );
+    else
+    {
+        const KDBManager *mgr;
+        rc_t rc = KDBManagerMakeRead ( & mgr, NULL );
+        if ( rc == 0 )
+        {
+            const KDatabase *db;
+            rc = KDBManagerOpenDBRead ( mgr, & db, "%s", argv [ 1 ] );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to open database '%s'\n", argv [ 1 ] );
+            else
+            {
+                dump_db ( db, argc, argv );
+                KDatabaseRelease ( db );
+            }
+
+            KDBManagerRelease ( mgr );
+        }
+    }
+
+    return 0;
+}
diff --git a/tools/sra-sort/except.c b/tools/sra-sort/except.c
new file mode 100644
index 0000000..740f37c
--- /dev/null
+++ b/tools/sra-sort/except.c
@@ -0,0 +1,232 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "except.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/printf.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include "status.h"
+
+FILE_ENTRY ( except );
+
+
+/*--------------------------------------------------------------------------
+ * exception-related activities
+ */
+
+static
+rc_t log_msg ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return pLogMsg ( lvl, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+                     "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     msg );
+#else
+    return LogMsg ( lvl, msg );
+#endif
+}
+
+static
+rc_t log_err ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, rc_t rc, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return pLogErr ( lvl, rc, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+                     "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     msg );
+#else
+    return LogErr ( lvl, rc, msg );
+#endif
+}
+
+static
+rc_t status_msg ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return KStsMsg ( "%s/%s.c:%u: %s: [ %u ] %s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     level,
+                     msg );
+#else
+    return KStsMsg ( "%s", msg );
+#endif
+}
+
+
+/* Annotate
+ *  make some annotation
+ *  but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... )
+{
+    rc_t rc2;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogInt, rc2, "Annotate failure" );
+    else
+        log_msg ( ctx, lineno, level, buff );
+
+    va_end ( args );
+}
+
+
+/* Error
+ *  make an annotation
+ *  record an error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... )
+{
+    rc_t rc2;
+    ctx_t *mctx;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogInt, rc2, "Error annotation failure" );
+    else
+        log_err ( ctx, lineno, level, rc, buff );
+
+    va_end ( args );
+
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = rc;
+}
+
+
+/* Abort
+ *  make an annotation
+ *  record an error as an rc_t
+ *  exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... )
+{
+    rc_t rc2;
+    ctx_t *mctx;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogFatal, rc2, "Abort annotation failure" );
+    else
+        log_err ( ctx, lineno, klogFatal, rc, buff );
+
+    va_end ( args );
+
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = rc;
+
+    exit ( -1 );
+}
+
+
+/* Clear
+ *  clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx )
+{
+    ClearError ( ctx );
+}
+
+
+/* ClearError
+ *  clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx )
+{
+    ctx_t *mctx;
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc != 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = 0;
+}
+
+
+/* Status
+ *  report status
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... )
+{
+    if ( KStsLevelGet () >= level )
+    {
+        rc_t rc2;
+        size_t num_writ;
+        char buff [ 8 * 1024 ];
+
+        va_list args;
+        va_start ( args, msg );
+
+        rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+        if ( rc2 != 0 )
+            log_err ( ctx, lineno, klogInt, rc2, "Status failure" );
+        else
+            status_msg ( ctx, lineno, level, buff );
+
+        va_end ( args );
+    }
+}
+
+/* POLY_DISPATCH
+ *  dispatch a polymorphic message
+ */
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg )
+{
+    rc_t rc = RC ( rcExe, rcFunction, rcResolving, rcSelf, rcNull );
+    Error ( ctx, lineno, klogInt, rc, "cannot dispatch message '%s'", msg );
+}
diff --git a/tools/sra-sort/except.h b/tools/sra-sort/except.h
new file mode 100644
index 0000000..911149b
--- /dev/null
+++ b/tools/sra-sort/except.h
@@ -0,0 +1,160 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_except_
+#define _h_sra_sort_except_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_log_
+#include <klib/log.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * exception-related macros
+ */
+
+
+/* ANNOTATE
+ *  make some annotation
+ *  but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... );
+#define ANNOTATE( msg, ... ) \
+    Annotate ( ctx, __LINE__, klogInfo, msg, ## __VA_ARGS__ )
+
+
+/* WARN
+ *  make some annotation
+ *  but not an error
+ */
+#define WARN( msg, ... ) \
+    Annotate ( ctx, __LINE__, klogWarn, msg, ## __VA_ARGS__ )
+
+
+/* INFO_ERROR
+ *  make an annotation
+ *  record an informational error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... );
+#define INFO_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogInfo, rc, msg, ## __VA_ARGS__ )
+
+
+/* ERROR
+ *  make an annotation
+ *  record an error as an rc_t
+ */
+#ifdef ERROR
+#undef ERROR
+#endif
+#define ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogErr, rc, msg, ## __VA_ARGS__ )
+
+
+/* INTERNAL_ERROR
+ *  make an annotation
+ *  record an internal error as an rc_t
+ */
+#define INTERNAL_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogInt, rc, msg, ## __VA_ARGS__ )
+
+
+/* SYSTEM_ERROR
+ *  make an annotation
+ *  record a system error as an rc_t
+ */
+#define SYSTEM_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogSys, rc, msg, ## __VA_ARGS__ )
+
+
+/* ABORT
+ *  make an annotation
+ *  record an error as an rc_t
+ *  exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... );
+#define ABORT( rc, msg, ... )                        \
+    Abort ( ctx, __LINE__, rc, msg, ## __VA_ARGS__ )
+
+
+/* FAILED
+ *  a test of rc within ctx_t
+ */
+#ifdef FAILED
+#undef FAILED
+#endif
+#define FAILED() \
+    ( ctx -> rc != 0 )
+
+
+/* TRY
+ *  another C language "try" macro
+ */
+#define TRY( expr ) \
+    expr; \
+    if ( ! FAILED () )
+
+
+/* CATCH
+ *  attempts to catch rc on certain types
+ */
+#define CATCH( obj_code, state_code ) \
+    else if ( GetRCObject ( ctx -> rc ) == obj_code && GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_STATE( state_code ) \
+    else if ( GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_OBJ( obj_code ) \
+    else if ( GetRCObject ( ctx -> rc ) == obj_code )
+#define CATCH_ALL() \
+    else
+
+/* ON_FAIL
+ */
+#define ON_FAIL( expr ) \
+    expr; \
+    if ( FAILED () )
+
+
+/* CLEAR
+ *  clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx );
+#define CLEAR() \
+    ClearAnnotation ( ctx )
+
+
+/* CLEAR_ERR
+ *  clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx );
+#define CLEAR_ERR() \
+    ClearError ( ctx )
+
+
+#endif
diff --git a/tools/sra-sort/gcc-ped.sh b/tools/sra-sort/gcc-ped.sh
new file mode 100755
index 0000000..7db5891
--- /dev/null
+++ b/tools/sra-sort/gcc-ped.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# test gcc for support of supplied parameters
+
+if test $# -ge 4
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 $4 > /dev/null 2>&1 )
+    then
+	echo $1 $2 $3 $4
+	exit 0
+    fi
+fi
+
+if test $# -ge 3
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 > /dev/null 2>&1 )
+    then
+	echo $1 $2 $3
+	exit 0
+    fi
+fi
+
+if test $# -ge 2
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 > /dev/null 2>&1 )
+    then
+	echo $1 $2
+	exit 0
+    fi
+fi
+
+if test $# -ge 1
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 > /dev/null 2>&1 )
+    then
+	echo $1
+	exit 0
+    fi
+fi
diff --git a/tools/sra-sort/glob-poslen.c b/tools/sra-sort/glob-poslen.c
new file mode 100644
index 0000000..4f028a4
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.c
@@ -0,0 +1,349 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct GlobalPosLenReader;
+#define COLREADER_IMPL struct GlobalPosLenReader
+
+#include "glob-poslen.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <insdc/insdc.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <klib/printf.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( glob-poslen );
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+struct GlobalPosLenReader
+{
+    ColumnReader dad;
+
+    uint64_t poslen;
+
+    const VCursor *curs;
+    uint32_t idx [ 3 ];
+
+    uint32_t chunk_size;
+
+    size_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void GlobalPosLenReaderWhack ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    VCursorRelease ( self -> curs );
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+static
+const char *GlobalPosLenReaderFullSpec ( const GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+uint64_t GlobalPosLenReaderIdRange ( const GlobalPosLenReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t count;
+
+    rc = VCursorIdRange ( self -> curs, 0, opt_first, & count );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorIdRange failed on '%s'", self -> full_spec );
+
+    return count;
+}
+
+static
+void GlobalPosLenReaderPreCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+}
+
+static
+void GlobalPosLenReaderPostCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    /* called after a single copy
+       assumes that entire row-range of table has been copied */
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on '%s'", self -> full_spec );
+    else
+        self -> curs = NULL;
+}
+
+static
+const void *GlobalPosLenReaderReadGlobal ( GlobalPosLenReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    assert ( elem_bits != NULL );
+    assert ( boff != NULL );
+    assert ( row_len != NULL );
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+        elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+    else
+    {
+        INSDC_coord_len ref_len;
+        assert ( * boff == 0 );
+        assert ( * row_len == 1 );
+        assert ( * elem_bits == sizeof ref_len * 8 );
+        ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+        rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+            elem_bits, & base, boff, row_len );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read GLOBAL_REF_START for row %ld", row_id );
+        else
+        {
+            uint64_t pos;
+            assert ( * boff == 0 );
+            assert ( * row_len == 1 );
+            assert ( * elem_bits == sizeof ( uint64_t ) * 8 );
+            pos = ( ( const uint64_t* ) base ) [ 0 ];
+
+            self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+            assert ( decode_pos_len ( self -> poslen ) == pos );
+            assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+            return & self -> poslen;
+        }
+    }
+
+    return NULL;
+
+}
+
+static
+const void *GlobalPosLenReaderReadLocal ( GlobalPosLenReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    assert ( elem_bits != NULL );
+    assert ( boff != NULL );
+    assert ( row_len != NULL );
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+        elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+    else
+    {
+        INSDC_coord_len ref_len;
+        assert ( * boff == 0 );
+        assert ( * row_len == 1 );
+        assert ( * elem_bits == sizeof ref_len * 8 );
+        ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+        rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+            elem_bits, & base, boff, row_len );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read REF_START for row %ld", row_id );
+        else
+        {
+            INSDC_coord_zero ref_start;
+            assert ( * boff == 0 );
+            assert ( * row_len == 1 );
+            assert ( * elem_bits == sizeof ref_start * 8 );
+            ref_start = ( ( const INSDC_coord_zero* ) base ) [ 0 ];
+
+            rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 2 ],
+                elem_bits, & base, boff, row_len );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to read REF_ID for row %ld", row_id );
+            else
+            {
+                int64_t ref_id;
+                assert ( * boff == 0 );
+                assert ( * row_len == 1 );
+                assert ( * elem_bits == sizeof ref_id * 8 );
+                ref_id = ( ( const int64_t* ) base ) [ 0 ];
+
+                if ( ref_id <= 0 )
+                    self -> poslen = 0;
+                else
+                {
+                    uint64_t pos = local_to_global ( ref_id, self -> chunk_size, ref_start );
+                    self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+                    assert ( global_to_row_id ( pos, self -> chunk_size ) == ref_id );
+                    assert ( decode_pos_len ( self -> poslen ) == pos );
+                    assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+                }
+
+                return & self -> poslen;
+            }
+        }
+    }
+
+    return NULL;
+}
+
+static  ColumnReader_vt GlobalPosLenReader_vt =
+{
+    GlobalPosLenReaderWhack,
+    GlobalPosLenReaderFullSpec,
+    GlobalPosLenReaderIdRange,
+    GlobalPosLenReaderPreCopy,
+    GlobalPosLenReaderPostCopy,
+    GlobalPosLenReaderReadGlobal
+};
+
+static  ColumnReader_vt LocalPosLenReader_vt =
+{
+    GlobalPosLenReaderWhack,
+    GlobalPosLenReaderFullSpec,
+    GlobalPosLenReaderIdRange,
+    GlobalPosLenReaderPreCopy,
+    GlobalPosLenReaderPostCopy,
+    GlobalPosLenReaderReadLocal
+};
+
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( TablePair *self, const ctx_t *ctx, uint32_t chunk_size )
+{
+    FUNC_ENTRY ( ctx );
+
+    GlobalPosLenReader *reader;
+    size_t full_spec_size = self -> full_spec_size + sizeof "src..GLOBAL_POSLEN" - 1;
+
+    TRY ( reader = MemAlloc ( ctx, sizeof * reader + full_spec_size, false ) )
+    {
+        /* we don't yet know whether the reader will have GLOBAL_REF_START */
+        TRY ( ColumnReaderInit ( & reader -> dad, ctx, & GlobalPosLenReader_vt ) )
+        {
+            rc_t rc = string_printf ( reader -> full_spec, full_spec_size + 1, NULL, "src.%s.GLOBAL_POSLEN", self -> full_spec );
+            if ( rc != 0 )
+                ABORT ( rc, "cannot seem to calculate string sizes" );
+            else
+            {
+                rc = VTableCreateCursorRead ( self -> stbl, & reader -> curs );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to create cursor on 'src.%s'", self -> full_spec );
+                else
+                {
+                    /* we need length as a 2nd sorting key */
+                    rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 0 ], "REF_LEN" );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VCursorAddColumn failed on '%s' cursor", self -> full_spec );
+                    else
+                    {
+                        /* add columns AFTER open */
+                        rc = VCursorPermitPostOpenAdd ( reader -> curs );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VCursorPermitPostOpenAdd failed on '%s' cursor", self -> full_spec );
+                        else
+                        {
+                            /* open single-column cursor - errors adding further columns
+                               help determine what type of positioning we have */
+                            rc = VCursorOpen ( reader -> curs );
+                            if ( rc != 0 )
+                                ERROR ( rc, "VCursorOpen failed on '%s' cursor", self -> full_spec );
+                            else
+                            {
+                                /* finish initialization */
+                                reader -> chunk_size = chunk_size;
+                                reader -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                                /* now try to get GLOBAL_REF_START */
+                                rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "GLOBAL_REF_START" );
+                                if ( rc == 0 )
+                                {
+                                    STATUS ( 3, "'%s' table has GLOBAL_REF_START", self -> full_spec );
+                                    
+                                    /* retrieval function returns this position directly */
+                                    return & reader -> dad;
+                                }
+
+                                /* try for local refpos */
+                                rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "REF_START" );
+                                if ( rc == 0 )
+                                    rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 2 ], "REF_ID" );
+                                if ( rc == 0 )
+                                {
+                                    STATUS ( 3, "'%s' table has local REF_START", self -> full_spec );
+
+                                    /* retrieval function synthesizes local to global */
+                                    reader -> dad . vt = & LocalPosLenReader_vt;
+                                    return & reader -> dad;
+                                }
+
+                                ERROR ( rc, "failed to populate '%s' cursor", reader -> full_spec );
+                            }
+                        }
+                    }
+
+                    VCursorRelease ( reader -> curs );
+                }
+            }
+        }
+
+        MemFree ( ctx, reader, sizeof * reader + full_spec_size );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/glob-poslen.h b/tools/sra-sort/glob-poslen.h
new file mode 100644
index 0000000..0a39102
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.h
@@ -0,0 +1,95 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_glob_poslen_
+#define _h_sra_sort_glob_poslen_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * inline functions
+ */
+#define MAX_POS_BITS 34
+#define MAX_LEN_BITS ( 64 - MAX_POS_BITS )
+
+
+static __inline__
+uint64_t encode_pos_len ( uint64_t pos, uint32_t len )
+{
+    assert ( pos < ( ( ~ ( uint64_t ) 0 ) >> MAX_LEN_BITS ) );
+    assert ( 0 < len && len <= ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+
+    /* position ascending, length descending */
+    return ( ( pos + 1 ) << MAX_LEN_BITS ) - len;
+}
+
+static __inline__
+uint64_t decode_pos_len ( uint64_t pos_len )
+{
+    return pos_len >> MAX_LEN_BITS;
+}
+
+static __inline__
+uint32_t poslen_to_len ( uint64_t pos_len )
+{
+    return ( 1U << MAX_LEN_BITS ) - ( ( uint32_t ) pos_len & ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+}
+
+static __inline__
+uint64_t local_to_global ( int64_t row_id, uint32_t chunk_size, uint32_t offset )
+{
+    assert ( row_id > 0 );
+    return ( row_id - 1 ) * chunk_size + offset;
+}
+
+static __inline__
+int64_t global_to_row_id ( uint64_t pos, uint32_t chunk_size )
+{
+    return ( pos / chunk_size ) + 1;
+}
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+typedef struct GlobalPosLenReader GlobalPosLenReader;
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( struct TablePair *self, const ctx_t *ctx, uint32_t chunk_size );
+
+
+#endif /* _h_sra_sort_glob_poslen_ */
diff --git a/tools/sra-sort/id-mapper-col.c b/tools/sra-sort/id-mapper-col.c
new file mode 100644
index 0000000..460df8a
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.c
@@ -0,0 +1,260 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MapRowIdColWriter MapRowIdColWriter;
+#define COLWRITER_IMPL MapRowIdColWriter
+
+#include "id-mapper-col.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( id-mapper-col );
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+struct MapRowIdColWriter
+{
+    ColumnWriter dad;
+
+    ColumnWriter *cw;
+
+    MapFile *idx;
+
+    int64_t *row;
+    uint32_t max_row_len;
+
+    bool assign_ids;
+};
+
+/* called by Release */
+static
+void MapRowIdColWriterDestroy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnWriterRelease ( self -> cw, ctx );
+    self -> cw = NULL;
+
+    MapFileRelease ( self -> idx, ctx );
+    self -> idx = NULL;
+
+    if ( self -> row != NULL )
+    {
+        MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+        self -> row = NULL;
+        self -> max_row_len = 0;
+    }
+}
+
+static
+void MapRowIdColWriterWhack ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MapRowIdColWriterDestroy ( self, ctx );
+    ColumnWriterDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+/* full spec */
+static
+const char* MapRowIdColWriterFullSpec ( const MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPreCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPostCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> max_row_len > 16 )
+    {
+        void *row;
+        TRY ( row = MemAlloc ( ctx, sizeof * self -> row * 16, false ) )
+        {
+            MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+            self -> row = row;
+            self -> max_row_len = 16;
+        }
+        CATCH_ALL ()
+        {
+            CLEAR ();
+        }
+    }
+
+    ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+/* write row to destination */
+static
+void MapRowIdColWriterWrite ( MapRowIdColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t i;
+
+    /* here is where the VALUE coming in, which is a row-id,
+       gets mapped to its new value before being written out */
+    assert ( elem_bits == sizeof * self -> row * 8 );
+    assert ( boff == 0 );
+
+    /* resize row if needed */
+    if ( self -> max_row_len < row_len )
+    {
+        MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+
+        self -> max_row_len = ( row_len + 15 ) & ~ 15U;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof * self -> row * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to allocate memory for %u row-ids", self -> max_row_len );
+            return;
+        }
+    }
+
+    /* copy row */
+    memmove ( self -> row, data, row_len * sizeof * self -> row );
+
+    /* map ids */
+    for ( i = 0; i < row_len; ++ i )
+    {
+        if ( self -> row [ i ] != 0 )
+        {
+            int64_t new_id;
+
+            /* map old row-id to new row-id */
+            ON_FAIL ( new_id = MapFileMapSingleOldToNew ( self -> idx, ctx, self -> row [ i ], self -> assign_ids ) )
+            {
+                ANNOTATE ( "failed to map source row-id %ld", self -> row [ i ] );
+                return;
+            }
+            if ( new_id == 0 )
+            {
+                rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcId, rcNotFound );
+                ERROR ( rc, "failed to map source row-id %ld", self -> row [ i ] );
+                return;
+            }
+
+            self -> row [ i ] = new_id;
+        }
+    }
+
+    /* now write the translated ids */
+    ColumnWriterWrite ( self -> cw, ctx, sizeof * self -> row * 8, self -> row, 0, row_len );
+}
+
+static
+void MapRowIdColWriterWriteStatic ( MapRowIdColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+    INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+/* commit all writes */
+static
+void MapRowIdColWriterCommit ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> cw, ctx );
+    MapRowIdColWriterDestroy ( self, ctx );
+}
+
+static ColumnWriter_vt MapRowIdColWriter_vt =
+{
+    MapRowIdColWriterWhack,
+    MapRowIdColWriterFullSpec,
+    MapRowIdColWriterPreCopy,
+    MapRowIdColWriterPostCopy,
+    MapRowIdColWriterWrite,
+    MapRowIdColWriterWriteStatic,
+    MapRowIdColWriterCommit
+};
+
+
+/* MakeMapRowIdWriter
+ *  if "assign_ids" is true, the MapFile will be asked to
+ *  map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( TablePair *self,
+    const ctx_t *ctx, ColumnWriter *cw, MapFile *idx, bool assign_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapRowIdColWriter *writer;
+
+    TRY ( writer = MemAlloc ( ctx, sizeof * writer, false ) )
+    {
+        TRY ( ColumnWriterInit ( & writer -> dad, ctx, & MapRowIdColWriter_vt, true ) )
+        {
+            writer -> max_row_len = 16;
+            TRY ( writer -> row = MemAlloc ( ctx, sizeof * writer -> row * writer -> max_row_len, false ) )
+            {
+                TRY ( writer -> idx = MapFileDuplicate ( idx, ctx ) )
+                {
+                    TRY ( writer -> cw = ColumnWriterDuplicate ( cw, ctx ) )
+                    {
+                        writer -> assign_ids = assign_ids;
+                        return & writer -> dad;
+                    }
+
+                    MapFileRelease ( writer -> idx, ctx );
+                }
+
+                ColumnWriterDestroy ( & writer -> dad, ctx );
+            }
+
+            MemFree ( ctx, writer -> row, sizeof * writer -> row * writer -> max_row_len );
+        }
+
+        MemFree ( ctx, writer, sizeof * writer );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/id-mapper-col.h b/tools/sra-sort/id-mapper-col.h
new file mode 100644
index 0000000..ae5770f
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_id_mapper_col_
+#define _h_sra_sort_id_mapper_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+
+/* MakeMapRowIdWriter
+ *  if "assign_ids" is true, the MapFile will be asked to
+ *  map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( struct TablePair *self,
+    const ctx_t *ctx, ColumnWriter *cw, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_id_mapper_col_ */
diff --git a/tools/sra-sort/idx-mapping.c b/tools/sra-sort/idx-mapping.c
new file mode 100644
index 0000000..5552415
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.c
@@ -0,0 +1,88 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "idx-mapping.h"
+#include "ctx.h"
+
+#include <klib/sort.h>
+
+FILE_ENTRY ( idx-mapping );
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *  
+ */
+
+#if USE_OLD_KSORT
+
+int64_t CC IdxMappingCmpOld ( const void *a, const void *b, void *data )
+{
+    const IdxMapping *ap = a;
+    const IdxMapping *bp = b;
+
+    return ap -> old_id < bp -> old_id ? -1 : ap -> old_id > bp -> old_id;
+}
+
+int64_t CC IdxMappingCmpNew ( const void *a, const void *b, void *data )
+{
+    const IdxMapping *ap = a;
+    const IdxMapping *bp = b;
+
+    return ap -> new_id < bp -> new_id ? -1 : ap -> new_id > bp -> new_id;
+}
+
+#else /* USE_OLD_KSORT */
+
+#define T( x ) ( ( const IdxMapping* ) ( x ) )
+
+#define SWAP( a, b, off, size ) KSORT_TSWAP ( IdxMapping, a, b )
+
+
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+    ( ( T ( a ) -> old_id < T ( b ) -> old_id ) ? -1 : ( T ( a ) -> old_id > T ( b ) -> old_id ) )
+
+    KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+    ( ( T ( a ) -> new_id < T ( b ) -> new_id ) ? -1 : ( T ( a ) -> new_id > T ( b ) -> new_id ) )
+
+    KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+#undef T
+#undef SWAP
+
+#endif /* USE_OLD_KSORT */
diff --git a/tools/sra-sort/idx-mapping.h b/tools/sra-sort/idx-mapping.h
new file mode 100644
index 0000000..bbd031b
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_idx_mapping_
+#define _h_sra_sort_idx_mapping_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *  
+ */
+typedef struct IdxMapping IdxMapping;
+struct IdxMapping
+{
+    int64_t old_id, new_id;
+};
+
+#if USE_OLD_KSORT
+
+/* ksort callbacks */
+int64_t CC IdxMappingCmpOld ( const void *a, const void *b, void *data );
+int64_t CC IdxMappingCmpNew ( const void *a, const void *b, void *data );
+
+#else
+
+/* ksort_inlines */
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count );
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count );
+
+#endif
+
+#endif /* _h_sra_sort_idx_mapping_ */
diff --git a/tools/sra-sort/map-file.c b/tools/sra-sort/map-file.c
new file mode 100644
index 0000000..18b27db
--- /dev/null
+++ b/tools/sra-sort/map-file.c
@@ -0,0 +1,1192 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "map-file.h"
+#include "idx-mapping.h"
+#include "ctx.h"
+#include "caps.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <endian.h>
+#include <byteswap.h>
+
+#include "except.h"
+
+FILE_ENTRY ( map-file );
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ *  a file for storing id mappings
+ */
+struct MapFile
+{
+    int64_t first_id;
+    uint64_t num_ids;
+    uint64_t num_mapped_ids;
+    int64_t max_new_id;
+    KFile *f_old, *f_new, *f_pos;
+    size_t id_size;
+    KRefcount refcount;
+};
+
+
+/* Whack
+ */
+static
+void MapFileWhack ( MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = KFileRelease ( self -> f_old );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KFileRelease failed on old=>new" );
+    else
+    {
+        rc = KFileRelease ( self -> f_new );
+        if ( rc != 0 )
+            ABORT ( rc, "KFileRelease failed on new=>old" );
+        else if ( self -> f_pos != NULL )
+        {
+            rc = KFileRelease ( self -> f_pos );
+            if ( rc != 0 )
+                ABORT ( rc, "KFileRelease failed on global poslen temp column" );
+        }
+        
+        MemFree ( ctx, self, sizeof * self );
+    }
+}
+
+
+/* Make
+ *  creates an id map
+ */
+static
+void MapFileMakeFork ( KFile **fp, const ctx_t *ctx, const char *name,
+    KDirectory *wd, const char *tmpdir, int pid, size_t bsize, const char *fork )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* create temporary KFile */
+    rc_t rc;
+    KFile *backing;
+
+    rc = KDirectoryCreateFile ( wd, & backing, true,
+        0600, kcmInit | kcmParents, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "failed to create %s id map file '%s'", fork, name );
+    else
+    {
+#if ! WINDOWS
+        /* never try to remove files on Windows */
+        if ( ctx -> caps -> tool -> unlink_idx_files )
+        {
+            /* unlink KFile */
+            rc = KDirectoryRemove ( wd, false, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+            if ( rc != 0 )
+                WARN ( "failed to unlink %s id map file '%s'", fork, name );
+        }
+#endif
+
+        /* create a read/write buffer file */
+        rc = KBufFileMakeWrite ( fp, backing, true, bsize );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to create buffer for %s id map file '%s'", fork, name );
+
+        KFileRelease ( backing );
+    }
+}
+
+static
+MapFile *MapFileMakeInt ( const ctx_t *ctx, const char *name, bool random, bool for_poslen )
+{
+    MapFile *mf;
+    TRY ( mf = MemAlloc ( ctx, sizeof * mf, true ) )
+    {
+        /* create KDirectory */
+        KDirectory *wd;
+        rc_t rc = KDirectoryNativeDir ( & wd );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to create native directory" );
+        else
+        {
+            const Tool *tp = ctx -> caps -> tool;
+            size_t bsize = random ? tp -> map_file_random_bsize : tp -> map_file_bsize;
+
+            /* create old=>new id file */
+            TRY ( MapFileMakeFork ( & mf -> f_old, ctx, name, wd, tp -> tmpdir, tp -> pid, bsize, "old" ) )
+            {
+                TRY ( MapFileMakeFork ( & mf -> f_new, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "new" ) )
+                {
+                    if ( for_poslen )
+                        MapFileMakeFork ( & mf -> f_pos, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "pos" );
+
+                    KDirectoryRelease ( wd );
+
+                    if ( ! FAILED () )
+                    {
+                        /* this is our guy */
+                        KRefcountInit ( & mf -> refcount, 1, "MapFile", "make", name );
+                        
+                        return mf;
+                    }
+
+                    KFileRelease ( mf -> f_new );
+                }
+
+                KFileRelease ( mf -> f_old );
+            }
+
+            KDirectoryRelease ( wd );
+        }
+
+        MemFree ( ctx, mf, sizeof * mf );
+    }
+
+    return NULL;
+}
+
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random )
+{
+    FUNC_ENTRY ( ctx );
+    return MapFileMakeInt ( ctx, name, random, false );
+}
+
+/* MakeForPoslen
+ *  creates an id map with an additional poslen file
+ *  this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ *  that use *_ALIGNMENT global position and length as a sorting key
+ *  we drop it to a file after its generation so that it can be
+ *  picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return MapFileMakeInt ( ctx, name, false, true );
+}
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MapFile" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            MapFileWhack ( ( MapFile* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcFile, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release MapFile" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MapFile" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcFile, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate MapFile" );
+            return NULL;
+        }
+    }
+
+    return ( MapFile* ) self;
+}
+
+
+/* SsetIdRange
+ *  required second-stage initialization
+ *  must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+    int64_t first_id, uint64_t num_ids )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self" );
+    }
+    else if ( self -> max_new_id != 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcConstraint, rcViolated );
+        INTERNAL_ERROR ( rc, "cannot change id range after writing has begun" );
+    }
+    else
+    {
+        /* record new first id and count */
+        self -> first_id = first_id;
+        self -> num_ids = num_ids;
+
+        /* determine id size for all ids PLUS 0 for NULL */
+        for ( ++ num_ids, self -> id_size = 1; self -> id_size < 8; ++ self -> id_size )
+        {
+            if ( num_ids <= ( ( uint64_t ) 1 ) << ( self -> id_size * 8 ) )
+                break;
+        }
+    }
+}
+
+
+/* First
+ *  return first mapped id
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx )
+{
+    return self -> first_id;
+}
+
+
+/* Count
+ *  return num_ids
+ */
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx )
+{
+    return self -> num_ids;
+}
+
+
+/* SetOldToNew
+ *  write old=>new id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        size_t i;
+        for ( i = 0; i < count; ++ i )
+        {
+            size_t num_writ;
+            /* zero-based index */
+            int64_t old_id = ids [ i ] . old_id - self -> first_id;
+            /* position in bytes */
+            uint64_t pos = old_id * self -> id_size;
+            /* 1-based translated new-id */
+            int64_t new_id = ids [ i ] . new_id - self -> first_id + 1;
+            assert ( old_id >= 0 );
+            assert ( new_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            new_id = bswap_64 ( new_id );
+#endif
+            rc = KFileWriteAll ( self -> f_old, pos, & new_id, self -> id_size, & num_writ );
+            if ( rc != 0 )
+            {
+                SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+                break;
+            }
+
+            if ( num_writ != self -> id_size )
+            {
+                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+                break;
+            }
+        }
+    }
+}
+
+
+/* SetNewToOld
+ *  write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        if ( ! ctx -> caps -> tool -> write_new_to_old )
+            self -> max_new_id = self -> first_id + count - 1;
+        else
+        {
+            size_t i;
+            for ( i = 0; i < count; ++ i )
+            {
+                size_t num_writ;
+                /* zero based index */
+                int64_t new_id = ids [ i ] . new_id - self -> first_id;
+                /* zero based byte offset */
+                uint64_t pos = new_id * self -> id_size;
+                /* 1-based translated old-id */
+                int64_t old_id = ids [ i ] . old_id - self -> first_id + 1;
+                assert ( new_id >= 0 );
+                assert ( old_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+                old_id = bswap_64 ( old_id );
+#endif
+                rc = KFileWriteAll ( self -> f_new, pos, & old_id, self -> id_size, & num_writ );
+                if ( rc != 0 )
+                {
+                    SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+                    break;
+                }
+                
+                if ( num_writ != self -> id_size )
+                {
+                    rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                    SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+                    break;
+                }
+                
+                self -> max_new_id = new_id + self -> first_id;
+            }
+        }
+    }
+}
+
+
+/* SetPoslen
+ *  write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> f_pos == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcFile, rcIncorrect );
+        INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        /* start writing after the last new id recorded */
+        uint64_t pos = ( self -> max_new_id - self -> first_id + 1 ) * sizeof ids -> new_id;
+
+        size_t i;
+        for ( i = 0; i < count; pos += sizeof ids -> new_id, ++ i )
+        {
+            size_t num_writ;
+            int64_t poslen = ids [ i ] . new_id;
+#if __BYTE_ORDER == __BIG_ENDIAN
+            poslen = bswap_64 ( poslen );
+#endif
+            rc = KFileWriteAll ( self -> f_pos, pos, & poslen, sizeof ids -> new_id, & num_writ );
+            if ( rc != 0 )
+            {
+                SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+                break;
+            }
+
+            if ( num_writ != sizeof ids -> new_id )
+            {
+                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+                break;
+            }
+        }
+    }
+}
+
+
+/* ReadPoslen
+ *  read global position/length in new-id order
+ *  starts reading at the indicated row
+ *  returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, uint64_t *poslen, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t total = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> f_pos == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcFile, rcIncorrect );
+        INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+    }
+    /* the column is read until end, but
+       this is not an error. just return no-more-data */
+    else if ( start_id == self -> first_id + self -> num_ids )
+        return 0;
+    else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within column range ( %ld .. %ld )",
+            start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else if ( max_count != 0 )
+    {
+        /* limit read to number of ids in index */
+        if ( start_id + max_count > self -> first_id + self -> num_ids )
+            max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+        if ( poslen == NULL )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+            INTERNAL_ERROR ( rc, "bad buffer parameter" );
+        }
+        else
+        {
+            /* read as many bytes of id as possible */
+            size_t num_read, to_read = max_count * sizeof * poslen;
+            uint64_t pos = ( start_id - self -> first_id ) * sizeof * poslen;
+            rc = KFileReadAll ( self -> f_pos, pos, poslen, to_read, & num_read );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+            else
+            {
+                total = ( size_t ) ( num_read / sizeof * poslen );
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+                {
+                    /* revert byte-order */
+                    size_t i;
+                    for ( i = 0; i < total; ++ i )
+                        poslen [ i ] = bswap_64 ( poslen [ i ] );
+                }
+#endif
+            }
+        }
+    }
+
+    return total;
+}
+
+
+/* AllocMissingNewIds
+ *  it is possible to have written fewer new=>old mappings
+ *  than are supposed to be there, e.g. SEQUENCE that gets
+ *  initially written by align tables. unaligned sequences
+ *  need to fill in the remainder.
+ */
+static
+size_t make_missing_entry ( MapFile *self, const ctx_t *ctx,
+    IdxMapping *missing, size_t i, size_t max_missing_ids,
+    int64_t old_id, int64_t new_id )
+{
+    if ( i == max_missing_ids )
+    {
+        ON_FAIL ( MapFileSetNewToOld ( self, ctx, missing, i ) )
+            return i;
+
+        i = 0;
+    }
+
+    /* insert into missing id map */
+    missing [ i ] . old_id = old_id;
+    missing [ i ] . new_id = new_id;
+
+    /* update old=>new mapping */
+    MapFileSetOldToNew ( self, ctx, & missing [ i ], 1 );
+
+    return i + 1;
+}
+
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    int64_t first_allocated = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        uint64_t num_missing_ids = self -> num_ids - ( self -> max_new_id - self -> first_id + 1 );
+        if ( num_missing_ids != 0 )
+        {
+            IdxMapping *missing;
+
+            /* determine maximum missing id mappings */
+            size_t max_missing_ids = ctx -> caps -> tool -> max_missing_ids;
+            if ( ( uint64_t ) max_missing_ids > num_missing_ids )
+                max_missing_ids = ( size_t ) num_missing_ids;
+
+            /* allocate a buffer of IdxMapping */
+            TRY ( missing = MemAlloc ( ctx, sizeof * missing * max_missing_ids, false ) )
+            {
+                /* use a scan buffer somewhere around 32K,
+                   to keep page-file cache focused on a few pages */
+                void *scan_buffer;
+                const size_t scan_buffer_size = 32 * 1024;
+                TRY ( scan_buffer = MemAlloc ( ctx, scan_buffer_size, false ) )
+                {
+                    size_t i, num_read;
+                    int64_t new_id, old_id = self -> first_id;
+                    uint64_t eof = self -> num_ids * self -> id_size;
+
+                    /* this guy will be used to assign new ids */
+                    int64_t max_new_id = self -> max_new_id;
+                    int64_t entry_max_new_id = self -> max_new_id;
+
+
+                    /* in a loop, read as many ids as possible into scan buffer
+                       the number is dependent upon self->id_size */
+                    for ( i = 0; ; old_id += num_read )
+                    {
+                        size_t j, to_read;
+
+                        /* determine position from old_id */
+                        uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+                        if ( pos == eof )
+                            break;
+
+                        /* determine bytes to read - this must be limited
+                           or we risk tricking page-buffer into resizing */
+                        to_read = scan_buffer_size;
+                        if ( pos + to_read > eof )
+                            to_read = ( size_t ) ( eof - pos );
+
+                        /* read as many bytes as we can */
+                        rc = KFileReadAll ( self -> f_old, pos, scan_buffer, to_read, & num_read );
+                        if ( rc != 0 )
+                        {
+                            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+                            break;
+                        }
+
+                        /* convert to count */                        
+                        num_read /= self -> id_size;
+                        if ( num_read == 0 )
+                        {
+                            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+                            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+                            break;
+                        }
+
+                        /* scan for zeros, and for every zero found,
+                           make entry into IdxMapping table, writing
+                           new-id back to old=>new map */
+                        switch ( self -> id_size )
+                        {
+                        case 1:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint8_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 2:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint16_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 3:
+                            for ( num_read *= 3, j = 0; j < num_read; j += 3 )
+                            {
+                                if ( ( ( const uint8_t* ) scan_buffer ) [ j + 0 ] == 0 &&
+                                     ( ( const uint8_t* ) scan_buffer ) [ j + 1 ] == 0 &&
+                                     ( ( const uint8_t* ) scan_buffer ) [ j + 2 ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j / 3, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            num_read /= 3;
+                            break;
+                        case 4:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint32_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 8:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint64_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        default:
+                            for ( num_read *= self -> id_size, j = 0; j < num_read; j += self -> id_size )
+                            {
+                                new_id = 0;
+                                memmove ( & new_id, & ( ( const uint8_t* ) scan_buffer ) [ j ], self -> id_size );
+                                if ( new_id == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j / self -> id_size, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            num_read /= self -> id_size;
+                        }
+                    }
+
+                    if ( ! FAILED () && i != 0 )
+                        MapFileSetNewToOld ( self, ctx, missing, i );
+
+                    assert ( FAILED () || self -> max_new_id == max_new_id );
+
+                    if ( max_new_id != entry_max_new_id )
+                        first_allocated = entry_max_new_id + 1;
+
+                    MemFree ( ctx, scan_buffer, scan_buffer_size );
+                }
+
+                MemFree ( ctx, missing, sizeof * missing * max_missing_ids );
+            }
+        }
+    }
+
+    return first_allocated;
+}
+
+
+/* ReadNewToOld
+ *  reads a bunch of new=>old mappings
+ */
+static
+size_t MapFileReadNewToOld ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t total = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    /* the new=>old mapping is read until end, but
+       this is not an error. just return no-more-data */
+    else if ( start_id == self -> first_id + self -> num_ids )
+        return 0;
+    else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within map range ( %ld .. %ld )",
+            start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else if ( max_count != 0 )
+    {
+        /* limit read to number of ids in index */
+        if ( start_id + max_count > self -> first_id + self -> num_ids )
+            max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+        if ( ids == NULL )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+            INTERNAL_ERROR ( rc, "bad buffer parameter" );
+        }
+        else
+        {
+            /* read as many bytes of id as possible */
+            size_t num_read, to_read = max_count * self -> id_size;
+            uint64_t pos = ( start_id - self -> first_id ) * self -> id_size;
+            rc = KFileReadAll ( self -> f_new, pos, ids, to_read, & num_read );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+            else
+            {
+                size_t i;
+                const char *packed = ( const char* ) ids;
+                total = ( size_t ) ( num_read /self -> id_size );
+
+                /* read each packed id as little-endian integer onto
+                   pre-zeroed 64-bit integer, swap if needed */
+                for ( num_read = total * self -> id_size, i = total; i > 0; )
+                {
+                    int64_t unpacked = 0;
+
+                    num_read -= self -> id_size;
+                    -- i;
+
+                    memmove ( & unpacked, & packed [ num_read ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+                    unpacked = bswap_64 ( unpacked );
+#endif
+                    if ( unpacked != 0 )
+                        unpacked += self -> first_id - 1;
+
+                    ids [ i ] . old_id = unpacked;
+                    ids [ i ] . new_id = start_id + i;
+                }
+            }
+        }
+    }
+
+    return total;
+}
+
+
+/* SelectOldToNewPairs
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t eof;
+    int64_t end_excl;
+    size_t i, j, total;
+
+    /* limit read to number of ids in index */
+    if ( start_id + max_count > self -> first_id + self -> num_ids )
+        max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+    /* range is start_id to end_excl */
+    end_excl = start_id + max_count;
+
+    /* eof for f_old */
+    eof = self -> num_ids * self -> id_size;
+
+    for ( total = i = 0; i < max_count; total += j )
+    {
+        rc_t rc;
+        size_t off, num_read;
+        char buff [ 32 * 1024 ];
+
+        /* read some data from file */
+        uint64_t pos = total * self -> id_size;
+        size_t to_read = sizeof buff;
+	if ( pos == eof )
+	    break;
+        if ( pos + to_read > eof )
+            to_read = ( size_t ) ( eof - pos );
+        rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+        if ( rc != 0 )
+        {
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+            break;
+        }
+
+        /* reached end - requested more ids than we have */
+        if ( num_read == 0 )
+            break;
+
+        /* the number of whole ids actually read */
+        if ( ( num_read /= self -> id_size ) == 0 )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+            SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+            break;
+        }
+
+        /* select new-ids from ids read */
+        for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+        {
+            int64_t unpacked = 0;
+            memmove ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            unpacked = bswap_64 ( unpacked );
+#endif
+            /* only offset non-zero (NULL) ids */
+            if ( unpacked != 0 )
+                unpacked += self -> first_id - 1;
+
+            /* if id meets criteria */
+            if ( unpacked >= start_id && unpacked < end_excl )
+            {
+                ids [ i ] . old_id = self -> first_id + total + j;
+                ids [ i ] . new_id = unpacked;
+                if ( ++ i == max_count )
+                    break;
+            }
+        }
+    }
+
+    return i;
+}
+
+
+/* SelectOldToNewSingle
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t eof;
+    int64_t end_excl;
+    size_t i, j, total;
+
+    /* limit read to number of ids in index */
+    if ( start_id + max_count > self -> first_id + self -> num_ids )
+        max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+    /* range is start_id to end_excl */
+    end_excl = start_id + max_count;
+
+    /* eof for f_old */
+    eof = self -> num_ids * self -> id_size;
+
+    for ( total = i = 0; i < max_count; total += j )
+    {
+        rc_t rc;
+        size_t off, num_read;
+        char buff [ 32 * 1024 ];
+
+        /* read some data from file */
+        uint64_t pos = total * self -> id_size;
+        size_t to_read = sizeof buff;
+	if ( pos == eof )
+            break;
+        if ( pos + to_read > eof )
+            to_read = ( size_t ) ( eof - pos );
+        rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+        if ( rc != 0 )
+        {
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+            break;
+        }
+
+        /* reached end - requested more ids than we have */
+        if ( num_read == 0 )
+            break;
+
+        /* the number of whole ids actually read */
+        if ( ( num_read /= self -> id_size ) == 0 )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+            SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+            break;
+        }
+
+        /* select new-ids from ids read */
+        for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+        {
+            int64_t unpacked = 0;
+            memmove ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            unpacked = bswap_64 ( unpacked );
+#endif
+            /* only offset non-zero (NULL) ids */
+            if ( unpacked != 0 )
+                unpacked += self -> first_id - 1;
+
+            /* if id meets criteria */
+            if ( unpacked >= start_id && unpacked < end_excl )
+            {
+                ids [ i ] = self -> first_id + total + j;
+                assert ( i <= 0xFFFFFFFF );
+                if ( opt_ord != NULL )
+                    opt_ord [ unpacked - start_id ] = ( uint32_t ) i;
+                if ( ++ i == max_count )
+                    break;
+            }
+        }
+    }
+
+    return i;
+}
+
+
+/* MapSingleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t old_id, bool insert )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    int64_t new_id = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( old_id < self -> first_id || old_id >= self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "old_id ( %ld ) is not within map range ( %ld .. %ld )",
+            old_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else
+    {
+        size_t num_read, to_read = self -> id_size;
+        uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+        rc = KFileReadAll ( self -> f_old, pos, & new_id, to_read, & num_read );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+        else
+        {
+#if __BYTE_ORDER == __BIG_ENDIAN
+            new_id = bswap_64 ( new_id );
+#endif
+            if ( new_id != 0 )
+                new_id += self -> first_id - 1;
+            else if ( insert )
+            {
+                /* create a mapping using the last known
+                   new id plus one as the id to assign on insert */
+                IdxMapping mapping;
+                mapping . old_id = old_id;
+                mapping . new_id = self -> max_new_id + 1;
+
+                TRY ( MapFileSetOldToNew ( self, ctx, & mapping, 1 ) )
+                {
+                    TRY ( MapFileSetNewToOld ( self, ctx, & mapping, 1 ) )
+                    {
+                        new_id = mapping . new_id;
+
+                        if ( self -> num_ids >= 100000 )
+                        {
+                            uint64_t scaled = ++ self -> num_mapped_ids * 100;
+                            uint64_t prior = scaled - 100;
+                            if ( ( prior / self -> num_ids ) != ( scaled /= self -> num_ids ) )
+                                STATUS ( 2, "have mapped %lu%% ids", scaled );
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return new_id;
+}
+
+
+/* ConsistencyCheck
+ */
+static
+void MapFileCrossCheck ( const MapFile *self, const ctx_t *ctx, IdxMapping *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t total;
+    size_t num_read;
+    int64_t last_old, last_new;
+
+    for ( last_old = last_new = -1, total = 0; total < self -> num_ids; total += num_read )
+    {
+        int64_t id;
+        size_t i;
+
+        STATUS ( 2, "reading new=>old ids" );
+
+        ON_FAIL ( num_read = MapFileReadNewToOld ( self, ctx, self -> first_id + total, ids, max_ids ) )
+        {
+            ANNOTATE ( "failed to read new=>old ids" );
+            return;
+        }
+
+        STATUS ( 2, "read %,u pairs", num_read );
+
+        STATUS ( 2, "checking for repeats in new-id space" );
+        for ( i = 0; i < num_read; last_new = id, ++ i )
+        {
+            id = ids [ i ] . new_id;
+            if ( id == last_new )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+                ERROR ( rc, "new id %,ld repeats", id );
+                return;
+            }
+        }
+
+        STATUS ( 2, "sorting on old id" );
+
+#if USE_OLD_KSORT
+        ksort ( ids, num_read, sizeof ids [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+        IdxMappingSortOld ( ids, ctx, num_read );
+#endif
+
+        STATUS ( 2, "checking for repeats in old-id space" );
+        for ( i = 0; i < num_read; last_old = id, ++ i )
+        {
+            id = ids [ i ] . old_id;
+            if ( id == last_old )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+                ERROR ( rc, "old id %,ld repeats", id );
+                return;
+            }
+        }
+
+        STATUS ( 2, "cross-checking against old=>new index" );
+
+        for ( i = 0; i < num_read; ++ i )
+        {
+            int64_t new_id;
+
+            /* cast away const on "self" for prototype,
+               but function is only non-const if "insert"
+               were true - we use "false" */
+            ON_FAIL ( new_id = MapFileMapSingleOldToNew ( ( MapFile* ) self, ctx, ids [ i ] . old_id, false ) )
+                return;
+
+            if ( new_id != ids [ i ] . new_id )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcUnequal );
+                ERROR ( rc, "mismatch of new ids %,ld != %,ld", new_id, ids [ i ] . new_id );
+                return;
+            }
+        }
+    }
+}
+
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    IdxMapping *ids;
+    const size_t max_ids = 1024 * 1024;
+
+    STATUS ( 2, "running consistency check on index files" );
+
+    /* "self" is valid */
+    if ( self == NULL )
+    {
+        ANNOTATE ( "checking the validity of a NULL MapFile" );
+        return;
+    }
+
+    STATUS ( 2, "checking id_size" );
+
+    /* number of ids requires some number of bits */
+    if ( ( ( uint64_t ) 1 << ( self -> id_size * 8 ) ) < self -> num_ids )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "calculated id size ( %zu bytes ) is insufficient to represent count of %,lu ids",
+                self -> id_size, self -> num_ids );
+        return;
+    }
+
+    STATUS ( 2, "allocating id buffer" );
+
+    TRY ( ids = MemAlloc ( ctx, sizeof * ids * max_ids, false ) )
+    {
+        MapFileCrossCheck ( self, ctx, ids, max_ids );
+        MemFree ( ctx, ids, sizeof * ids * max_ids );
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate memory ( %zu pairs ) for consistency check", max_ids );
+        return;
+    }
+
+    STATUS ( 2, "finished idx consistency check" );
+}
diff --git a/tools/sra-sort/map-file.h b/tools/sra-sort/map-file.h
new file mode 100644
index 0000000..992d765
--- /dev/null
+++ b/tools/sra-sort/map-file.h
@@ -0,0 +1,172 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_map_file_
+#define _h_sra_sort_map_file_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ *  a file for storing id mappings
+ */
+typedef struct MapFile MapFile;
+
+
+/* Make
+ *  creates an id map
+ */
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random_access );
+
+
+/* MakeForPoslen
+ *  creates an id map with an additional poslen file
+ *  this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ *  that use *_ALIGNMENT global position and length as a sorting key
+ *  we drop it to a file after its generation so that it can be
+ *  picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name );
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetIdRange
+ *  required second-stage initialization
+ *  must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+    int64_t first_id, uint64_t num_ids );
+
+
+/* First
+ *  return first mapped id
+ * Count
+ *  return number of ids
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx );
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetOldToNew
+ *  write new=>old id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* SetNewToOld
+ *  write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* SetPoslen
+ *  write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* ReadPoslen
+ *  read global position/length in new-id order
+ *  starts reading at the indicated row
+ *  returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, uint64_t *poslen, size_t max_count );
+
+
+/* AllocMissingNewIds
+ *  it is possible to have written fewer new=>old mappings
+ *  than are supposed to be there, e.g. SEQUENCE that gets
+ *  initially written by align tables. unaligned sequences
+ *  need to fill in the remainder.
+ *
+ *  returns the first newly allocated id
+ */
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx );
+
+
+/* SelectOldToNewPairs
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, struct IdxMapping *ids, size_t max_count );
+
+
+/* SelectOldToNewSingle
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count );
+
+
+/* MapSingleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t old_id, bool insert );
+
+
+/* MapMultipleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+void MapFileMapMultipleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t *ids, size_t count, bool insert );
+
+
+/* ConsistencyCheck
+ *  should be const, but MapFileOldToNew claims to be non-const
+ *  and is used within. only non-const if "insert" is true.
+ */
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/mapping-row-set.c b/tools/sra-sort/mapping-row-set.c
new file mode 100644
index 0000000..6e69549
--- /dev/null
+++ b/tools/sra-sort/mapping-row-set.c
@@ -0,0 +1,496 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MappingRowSet MappingRowSet;
+#define ROWSET_IMPL MappingRowSet
+
+typedef struct MappingRowSetIterator MappingRowSetIterator;
+#define ROWSET_ITER_IMPL MappingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( mapping-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct MappingRowSetIterator
+{
+    RowSetIterator dad;
+
+    /* base row-id */
+    int64_t row_id;
+
+    /* last row-id + 1 */
+    int64_t last_excl;
+
+    /* takes its input from new=>old index */
+    const MapFile *idx;
+
+    /* working data within map */
+    IdxMapping *map;
+    size_t max_elems;
+    size_t num_elems;
+
+    bool large;
+};
+
+/*--------------------------------------------------------------------------
+ * MappingRowSet
+ *  implementation of RowSet based upon auto-generated id pairs
+ */
+struct MappingRowSet
+{
+    RowSet dad;
+
+    /* keep-alive reference */
+    MappingRowSetIterator *iter;
+
+    /* working data within map */
+    IdxMapping *map;
+    size_t num_elems;
+    size_t cur_elem;
+};
+
+static
+void MappingRowSetWhack ( MappingRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t MappingRowSetNextStat ( MappingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* the starting row-id is taken from row-set-iterator
+       and offset by our current element counter */
+    int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+    /* limit id generation to request */
+    size_t i, to_set = self -> num_elems - self -> cur_elem;
+    if ( to_set > max_ids )
+        to_set = max_ids;
+
+    /* fill request with serial numbers
+       could just as easily be the same number
+       the important thing is to limit the count
+       and produce the correct range */
+    for ( i = 0; i < to_set; ++ i )
+        ids [ i ] = row_id + i;
+
+    /* advance counter */
+    self -> cur_elem += to_set;
+    return to_set;
+}
+
+static
+size_t MappingRowSetNextPhys ( MappingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* limit copy to request */
+    size_t i, to_copy = self -> num_elems - self -> cur_elem;
+    if ( to_copy > max_ids )
+        to_copy = max_ids;
+
+    /* copy out old-ids */
+    for ( i = 0; i < to_copy; ++ i )
+        ids [ i ] = self -> map [ self -> cur_elem + i ] . old_id;
+
+    /* advance counter */
+    self -> cur_elem += to_copy;
+    return to_copy;
+}
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MappingRowSetPhys_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextPhys,
+    MappingRowSetReset
+};
+
+static RowSet_vt MappingRowSetStat_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextStat,
+    MappingRowSetReset
+};
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & MappingRowSetStat_vt;
+    }
+    else
+    {
+        size_t i, max_elems;
+        MappingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & MappingRowSetPhys_vt;
+
+        /* limit id generation */
+        max_elems = iter -> max_elems;
+        if ( iter -> row_id + max_elems >= iter -> last_excl )
+            max_elems = ( size_t ) ( iter -> last_excl - iter -> row_id );
+
+        STATUS ( 4, "auto-generating %,zu ( old_id, new_id ) pairs where new_id >= %ld",
+                 max_elems, iter -> row_id );
+        for ( i = 0; i < max_elems; ++ i )
+            iter -> map [ i ] . old_id = iter -> map [ i ] . new_id = iter -> row_id + i;
+
+        self -> num_elems = iter -> num_elems = max_elems;
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MapFileMappingRowSetPhys_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextPhys,
+    MapFileMappingRowSetReset
+};
+
+static RowSet_vt MapFileMappingRowSetStat_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextStat,
+    MapFileMappingRowSetReset
+};
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & MapFileMappingRowSetStat_vt;
+    }
+    else
+    {
+        MappingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & MapFileMappingRowSetPhys_vt;
+
+        /* read new-ids from file, selecting only those within range */
+        STATUS ( 3, "selecting first %,zu ( old_id, new_id ) pairs from old=>new where new_id >= %,ld",
+                 iter -> max_elems, iter -> row_id );
+        ON_FAIL ( iter -> num_elems = MapFileSelectOldToNewPairs ( iter -> idx, ctx,
+                      iter -> row_id, iter -> map, iter -> max_elems ) )
+            return;
+
+        self -> num_elems = iter -> num_elems;
+        STATUS ( 3, "selected %,zu ( old_id, new_id ) pairs", self -> num_elems );
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ *  interface to iterate RowSets
+ */
+
+static
+void MappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map != NULL )
+        MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void MapFileMappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map != NULL )
+        MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+    MapFileRelease ( self -> idx, ctx );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *MappingRowSetIteratorMakeTheRowSet ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    FUNC_ENTRY ( ctx );
+
+    MappingRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            rs -> map = self -> map;
+            rs -> iter = ( MappingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+            rs -> num_elems = self -> num_elems;
+            rs -> cur_elem = 0;
+            return & rs -> dad;
+        }
+
+        MemFree ( ctx, rs, sizeof * rs );
+    }
+
+    return NULL;
+ }
+
+static
+struct IdxMapping *MappingRowSetIteratorGetIdxMapping ( MappingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+        ERROR ( rc, "IdxMapping array is NULL" );
+        if ( num_items != NULL )
+            * num_items = 0;
+        return NULL;
+    }
+
+    if ( num_items != NULL )
+        * num_items = self -> num_elems;
+    return self -> map;
+}
+
+static
+int64_t *MappingRowSetIteratorGetSourceIds ( MappingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetSourceIds ON MAPPING ROWSET ITERATOR" );
+
+    if ( opt_ord != NULL )
+        * opt_ord = NULL;
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+void MappingRowSetIteratorAllocMap ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* determine the maximum number of elements */
+    const Tool *tp = ctx -> caps -> tool;
+    uint64_t count = self -> last_excl - self -> row_id;
+    self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+    if ( ( uint64_t ) self -> max_elems > count )
+        self -> max_elems = ( size_t ) count;
+
+    /* try to allocate the memory
+       this may be limited by the MemBank */
+    do
+    {
+        CLEAR ();
+
+        TRY ( self -> map = MemAlloc ( ctx, sizeof self -> map [ 0 ] * self -> max_elems, false ) )
+        {
+            STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+            return;
+        }
+
+        self -> max_elems >>= 1;
+    }
+    while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+    ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *MappingRowSetIteratorNextInt ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    /* no FUNC_ENTRY */
+
+    RowSet *rs = NULL;
+
+    /* on first invocation, allocate the map */
+    if ( self -> map == NULL )
+    {
+        ON_FAIL ( MappingRowSetIteratorAllocMap ( self, ctx ) )
+            return NULL;
+    }
+
+    /* advance row_id */
+    self -> row_id += self -> num_elems;
+    self -> num_elems = 0;
+
+    /* create the empty row-set */
+    if ( self -> row_id < self -> last_excl )
+        rs = MappingRowSetIteratorMakeTheRowSet ( self, ctx, vt );
+
+    return rs;
+}
+
+static
+RowSet *MappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return MappingRowSetIteratorNextInt ( self, ctx, & MappingRowSetPhys_vt );
+}
+
+static
+RowSet *MapFileMappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return MappingRowSetIteratorNextInt ( self, ctx, & MapFileMappingRowSetPhys_vt );
+}
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+static RowSetIterator_vt MappingRowSetIterator_vt =
+{
+    MappingRowSetIteratorWhack,
+    MappingRowSetIteratorGetIdxMapping,
+    MappingRowSetIteratorGetSourceIds,
+    MappingRowSetIteratorNext
+};
+
+/* MakeMappingRowSetIterator
+ *  runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeMappingRowSetIterator ( TablePair *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> first_id > self -> last_excl )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+        INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+    }
+    else
+    {
+        MappingRowSetIterator *rsi;
+
+        TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+        {
+            TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MappingRowSetIterator_vt ) )
+            {
+                rsi -> row_id = self -> first_id;
+                rsi -> last_excl = self -> last_excl;
+                rsi -> large = large;
+                return & rsi -> dad;
+            }
+
+            MemFree ( ctx, rsi, sizeof * rsi );
+        }
+    }
+
+    return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt MapFileMappingRowSetIterator_vt =
+{
+    MapFileMappingRowSetIteratorWhack,
+    MappingRowSetIteratorGetIdxMapping,
+    MappingRowSetIteratorGetSourceIds,
+    MapFileMappingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeMappingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    MappingRowSetIterator *rsi;
+
+    /* create the iterator */
+    TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+    {
+        TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MapFileMappingRowSetIterator_vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+            {
+                TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+                {
+                    TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+                    {
+                        rsi -> large = large;
+                        return & rsi -> dad;
+                    }
+                }
+            }
+        }
+
+        MemFree ( ctx, rsi, sizeof * rsi );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/mem.c b/tools/sra-sort/mem.c
new file mode 100644
index 0000000..313a90f
--- /dev/null
+++ b/tools/sra-sort/mem.c
@@ -0,0 +1,68 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+FILE_ENTRY ( mem );
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ *  memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear )
+{
+    assert ( ctx != NULL );
+    assert ( ctx -> caps != NULL );
+    assert ( ctx -> caps -> mem != NULL );
+
+    return MemBankAlloc ( ctx -> caps -> mem, ctx, bytes, clear );
+}
+
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes )
+{
+    if ( mem != NULL )
+    {
+        assert ( ctx != NULL );
+        assert ( ctx -> caps != NULL );
+        assert ( ctx -> caps -> mem != NULL );
+
+        MemBankFree ( ctx -> caps -> mem, ctx, mem, bytes );
+    }
+}
+
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota )
+{
+    assert ( ctx != NULL );
+    assert ( ctx -> caps != NULL );
+    assert ( ctx -> caps -> mem != NULL );
+
+    return MemBankInUse ( ctx -> caps -> mem, ctx, opt_quota );
+}
diff --git a/tools/sra-sort/mem.h b/tools/sra-sort/mem.h
new file mode 100644
index 0000000..fc3db7e
--- /dev/null
+++ b/tools/sra-sort/mem.h
@@ -0,0 +1,128 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_mem_
+#define _h_sra_sort_mem_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ *  memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear );
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes );
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota );
+
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+typedef struct MemBank_vt MemBank_vt;
+
+typedef struct MemBank MemBank;
+struct MemBank
+{
+    const MemBank_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef MEMBANK_IMPL
+#define MEMBANK_IMPL MemBank
+#endif
+
+struct MemBank_vt
+{
+    void ( * whack ) ( MEMBANK_IMPL *self, const ctx_t *ctx );
+    size_t ( * in_use ) ( const MEMBANK_IMPL *self, const ctx_t *ctx, size_t *opt_quota );
+    void* ( * alloc ) ( MEMBANK_IMPL *self, const ctx_t *ctx, size_t bytes, bool clear );
+    void ( * free ) ( MEMBANK_IMPL *self, const ctx_t *ctx, void *mem, size_t bytes );
+};
+
+
+/* Make
+ *  make a new memory bank
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota );
+
+
+/* MakePaged
+ *  make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx );
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx );
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+#define MemBankInUse( self, ctx, opt_quota ) \
+    POLY_DISPATCH_INT ( in_use, self, const MEMBANK_IMPL, ctx, opt_quota )
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+#define MemBankAlloc( self, ctx, bytes, clear ) \
+    POLY_DISPATCH_PTR ( alloc, self, MEMBANK_IMPL, ctx, bytes, clear )
+
+
+/* Free
+ *  returns memory to bank
+ *  ignored by paged bank
+ *  burden on caller to remember allocation size
+ */
+#define MemBankFree( self, ctx, mem, bytes ) \
+    POLY_DISPATCH_VOID ( free, self, MEMBANK_IMPL, ctx, mem, bytes )
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name );
+
+/* Destroy
+ */
+#define MemBankDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+#endif
diff --git a/tools/sra-sort/membank-priv.h b/tools/sra-sort/membank-priv.h
new file mode 100644
index 0000000..69301d4
--- /dev/null
+++ b/tools/sra-sort/membank-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_membank_priv_
+#define _h_sra_sort_membank_priv_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ */
+
+/* MakePagedMMap
+ *  make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+#endif
diff --git a/tools/sra-sort/membank.c b/tools/sra-sort/membank.c
new file mode 100644
index 0000000..6f29b75
--- /dev/null
+++ b/tools/sra-sort/membank.c
@@ -0,0 +1,296 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MemBankImpl MemBankImpl;
+#define MEMBANK_IMPL MemBankImpl
+
+#include <sysalloc.h>
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/refcount.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+#include <atomic.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemBankImpl
+ *  maintains a quota
+ */
+struct MemBankImpl
+{
+    MemBank dad;
+    size_t quota;
+    atomic_t avail;
+};
+
+static
+void MemBankImplWhack ( MemBankImpl *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    Caps *caps;
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    caps = ( Caps* ) ctx -> caps;
+    if ( & self -> dad != caps -> mem )
+        MemBankFree ( caps -> mem, ctx, self, sizeof * self );
+    else
+    {
+        free ( self );
+        caps -> mem = NULL;
+    }
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t MemBankImplInUse ( const MemBankImpl *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> quota - atomic_read ( & self -> avail );
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *MemBankImplAlloc ( MemBankImpl *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    if ( self != NULL )
+    {
+        /* allocation from the raw bank */
+        rc_t rc;
+        FUNC_ENTRY ( ctx );
+
+        /* update "avail" atomicially */
+        size_t remaining, avail;
+        for ( avail = atomic_read ( & self -> avail ); avail >= bytes; avail = remaining )
+        {
+            /* subtract the bytes */
+            remaining = atomic_test_and_set ( & self -> avail,
+                ( atomic_int ) ( avail - bytes ), ( atomic_int ) avail );
+            if ( remaining == avail )
+            {
+                /* try to allocate the memory directly */
+                void *mem = clear ? calloc ( 1, bytes ) : malloc ( bytes );
+                if ( mem == NULL )
+                {
+                    /* failed to get memory */
+                    atomic_add ( & self -> avail, ( atomic_int ) bytes );
+                    rc = RC ( rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted );
+                    ERROR ( rc, "failed to allocate %zu bytes of memory", bytes );
+                }
+                else if ( bytes > 256 * 1024 )
+                {
+                    if ( bytes > 1024 * 1024 )
+                        STATUS ( 3, "allocated %,zu bytes of memory", bytes );
+                    else
+                        STATUS ( 4, "allocated %,zu bytes of memory", bytes );
+                }
+
+                return mem;
+            }
+        }
+
+        /* at this point we could be using a timeout */
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+        ERROR ( rc, "quota exceeded allocating %zu bytes of memory", bytes );
+    }
+
+    return NULL;
+}
+
+
+/* Free
+ *  returns memory to bank
+ *  ignored by paged bank
+ *  burden on caller to remember allocation size
+ */
+static
+void MemBankImplFree ( MemBankImpl *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+    if ( mem != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        if ( self == NULL )
+        {
+            rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcSelf, rcNull );
+            ERROR ( rc, "attempt to return memory to NULL MemBank" );
+        }
+        else
+        {
+            /* release the memory */
+            free ( mem );
+
+            /* update the counters */
+            if ( bytes == 0 )
+                ANNOTATE ( "freed memory with size of 0 bytes" );
+            else
+            {
+                atomic_add ( & self -> avail, ( atomic_int ) bytes );
+
+                if ( bytes > 256 * 1024 )
+                {
+                    if ( bytes > 1024 * 1024 )
+                        STATUS ( 3, "freed %,zu bytes of memory", bytes );
+                    else
+                        STATUS ( 4, "freed %,zu bytes of memory", bytes );
+                }
+            }
+        }
+    }
+}
+
+static MemBank_vt MemBankImpl_vt =
+{
+    MemBankImplWhack,
+    MemBankImplInUse,
+    MemBankImplAlloc,
+    MemBankImplFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+
+/* Make
+ *  make a new memory bank
+ *  in a real system, this could make a bank linked to
+ *  the primordial one. in this system, there is only
+ *  a single bank, so this function is overloaded to
+ *  create both the primordial and to reset quota on it.
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota )
+{
+    FUNC_ENTRY ( ctx );
+
+    MemBankImpl *mem = malloc ( sizeof * mem );
+    if ( mem == NULL )
+        exit ( -1 );
+
+    MemBankInit ( & mem -> dad, ctx, & MemBankImpl_vt, "Process MemBank" );
+
+    if ( quota < 4096 )
+        quota = 4096;
+
+    mem -> quota = quota;
+    atomic_set ( & mem -> avail, ( atomic_int ) ( quota - sizeof * mem ) );
+
+    return & mem -> dad;
+}
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "MemBank", "Make", name );
+    self -> align = 0;
+}
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MemBank" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative: {
+            FUNC_ENTRY ( ctx );
+            rc_t rc = RC ( rcExe, rcMemory, rcAttaching, rcRange, rcExcessive );
+            ERROR ( rc, "excessive references on MemBank" );
+            return NULL;
+        }}
+    }
+    return ( MemBank* ) self;
+}
+
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MemBank" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( MEMBANK_IMPL* ) self, ctx );
+            break;
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative: {
+            FUNC_ENTRY ( ctx );
+            rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcRange, rcExcessive );
+            ERROR ( rc, "excessive releases on MemBank" );
+        }}
+    }
+}
diff --git a/tools/sra-sort/meta-pair.c b/tools/sra-sort/meta-pair.c
new file mode 100644
index 0000000..a067fe2
--- /dev/null
+++ b/tools/sra-sort/meta-pair.c
@@ -0,0 +1,458 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MetaPair StdMetaPair;
+#define METAPAIR_IMPL StdMetaPair
+
+#include "meta-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( meta-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdMetaPair
+ */
+
+static
+void StdMetaPairWhack ( StdMetaPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MetaPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static MetaPair_vt StdMetaPair_vt =
+{
+    StdMetaPairWhack
+};
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ *  interface to pairing of source and destination tables
+ */
+
+
+/* Make
+ *  make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+    const KMetadata *src, KMetadata *dst, const char *full_path )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdMetaPair *meta;
+
+    TRY ( meta = MemAlloc ( ctx, sizeof * meta, false ) )
+    {
+        TRY ( MetaPairInit ( meta, ctx, & StdMetaPair_vt, src, dst, full_path ) )
+        {
+            return meta;
+        }
+
+        MemFree ( ctx, meta, sizeof * meta );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MetaPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcMetadata, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release MetaPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MetaPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcMetadata, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate MetaPair" );
+            return NULL;
+        }
+    }
+
+    return ( MetaPair* ) self;
+}
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+    const KMetadata *src, KMetadata *dst, const char *full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcMetadata, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad MetaPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    rc = KMetadataAddRef ( self -> smeta = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate metadata 'src.%s'", full_spec );
+    else
+    {
+        rc = KMetadataAddRef ( self -> dmeta = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate metadata 'dst.%s'", full_spec );
+        else
+        {
+            KRefcountInit ( & self -> refcount, 1, "MetaPair", "init", full_spec );
+            return;
+        }
+
+        KMetadataRelease ( self -> smeta );
+        self -> smeta = NULL;
+    }
+}
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = KMetadataRelease ( self -> dmeta );
+    if ( rc != 0 )
+        WARN ( "KMetadataRelease failed" );
+    KMetadataRelease ( self -> smeta );
+
+    memset ( self, 0, sizeof * self );
+}
+
+
+static
+void copy_meta_node_value ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    char buff [ 32*1024 ];
+    size_t num_read, remaining;
+
+    rc = KMDataNodeRead ( src, 0, buff, sizeof buff, & num_read, & remaining );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+    else if ( num_read != 0 )
+    {
+        rc = KMDataNodeWrite ( dst, buff, num_read );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "KMDataNodeWrite failed" );
+        else
+        {
+            size_t offset;
+            for ( offset = num_read; remaining != 0; offset += num_read )
+            {
+                rc = KMDataNodeRead ( src, offset, buff, sizeof buff, & num_read, & remaining );
+                if ( rc != 0 )
+                {
+                    INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+                    break;
+                }
+                rc = KMDataNodeAppend ( dst, buff, num_read );
+                if ( rc != 0 )
+                {
+                    SYSTEM_ERROR ( rc, "KMDataNodeAppend failed" );
+                    break;
+                }
+            }
+        }
+    }
+}
+
+static
+void copy_meta_node_attr ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t num_read;
+    char buff [ 32*1024 ];
+
+    rc = KMDataNodeReadAttr ( src, name, buff, sizeof buff, & num_read );
+    if ( rc != 0 )
+        ERROR ( rc, "KMDataNodeReadAttr '%s' failed", name );
+    else
+    {
+        rc = KMDataNodeWriteAttr ( dst, name, buff );
+        if ( rc != 0 )
+            ERROR ( rc, "KMDataNodeWriteAttr '%s' failed", name );
+    }
+}
+
+
+static
+const char *filter_node_name ( const char *name, size_t nsize, const char **exclude )
+{
+    uint32_t i;
+    for ( i = 0; exclude [ i ] != NULL; ++ i )
+    {
+        const char *x = exclude [ i ];
+        size_t xsize = strlen ( x );
+
+        /* allow exclude to be a prefix */
+        if ( xsize > 0 && x [ xsize - 1 ] == '*' )
+        {
+            if ( nsize < -- xsize )
+                continue;
+        }
+        else if ( nsize != xsize )
+        {
+            continue;
+        }
+
+        if ( memcmp ( name, x, xsize ) == 0 )
+            return NULL;
+    }
+
+    return name;
+ }
+
+
+static
+void copy_meta_node ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst,
+    char path [ 32*1024 ], size_t psize, const char *owner_spec, const char **exclude )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* first, copy value */
+    TRY ( copy_meta_node_value ( src, ctx, dst ) )
+    {
+        /* next, copy attributes */
+        KNamelist *names;
+        rc_t rc = KMDataNodeListAttr ( src, & names );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMDataNodeListAttr failed" );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+            else
+            {
+                uint32_t i;
+                const char *name;
+                for ( i = 0; i < count; ++ i )
+                {
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                    {
+                        INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+                        break;
+                    }
+
+                    ON_FAIL ( copy_meta_node_attr ( src, ctx, dst, name ) )
+                        break;
+                }
+
+                if ( ! FAILED () )
+                {
+                    KNamelistRelease ( names );
+
+                    /* last, copy children */
+                    rc = KMDataNodeListChildren ( src, & names );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeListChildren failed" );
+                    else
+                    {
+                        rc = KNamelistCount ( names, & count );
+                        if ( rc != 0 )
+                            INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+                        else if ( psize + 1 == 32*1024 )
+                        {
+                            rc = RC ( rcExe, rcNode, rcCopying, rcBuffer, rcInsufficient );
+                            ERROR ( rc, "metadata path too long" );
+                        }
+                        else
+                        {
+                            for ( i = 0; i < count; ++ i )
+                            {
+                                KMDataNode *dchild;
+                                const KMDataNode *schild;
+
+                                size_t nsize;
+                                static const char *always_exclude [] =
+                                {
+                                    ".seq", "col", "schema", 
+                                    "HUFFMAN*", "MSC454*", "NREADS", "NUMBER_P*", "NUMBER_S*",
+                                    NULL
+                                };
+
+                                rc = KNamelistGet ( names, i, & name );
+                                if ( rc != 0 )
+                                {
+                                    INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+                                    break;
+                                }
+
+                                nsize = string_size ( name );
+                                if ( psize + nsize + 1 >= 32*1024 )
+                                {
+                                    WARN ( "skipping node '%.*s/%s' - path too long", ( uint32_t ) psize, path, name );
+                                    continue;
+                                }
+
+                                if ( psize != 0 )
+                                    path [ psize ++ ] = '/';
+                                strcpy ( & path [ psize ], name );
+
+                                if ( exclude != NULL )
+                                {
+                                    name = filter_node_name ( name, nsize, exclude );
+                                    if ( name == NULL )
+                                        continue;
+                                }
+
+                                name = filter_node_name ( name, nsize, always_exclude );
+                                if ( name == NULL )
+                                    continue;
+
+                                rc = KMDataNodeOpenNodeRead ( src, & schild, "%s", name );
+                                if ( rc != 0 )
+                                    ERROR ( rc, "failed to open source metadata node '%s'", name );
+                                else
+                                {
+                                    rc = KMDataNodeOpenNodeUpdate ( dst, & dchild, "%s", name );
+                                    if ( rc != 0 )
+                                        ERROR ( rc, "failed to open destination metadata node '%s'", name );
+                                    else
+                                    {
+                                        copy_meta_node ( schild, ctx, dchild, path, psize + nsize, owner_spec, exclude );
+                                        KMDataNodeRelease ( dchild );
+                                    }
+
+                                    KMDataNodeRelease ( schild );
+                                }
+
+                                if ( FAILED () )
+                                    break;
+                            }
+                        }
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx, const char *owner_spec, const char **exclude )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    char path [ 32*1024 ];
+    const KMDataNode *src;
+
+    STATUS ( 3, "copying '%s' metadata", owner_spec );
+
+    rc = KMetadataOpenNodeRead ( self -> smeta, & src, "/" );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "KMetadataOpenNodeRead failed to obtain '%s' root node", owner_spec );
+    else
+    {
+        KMDataNode *dst;
+        rc = KMetadataOpenNodeUpdate ( self -> dmeta, & dst, "/" );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to obtain '%s' root node", owner_spec );
+        else
+        {
+            path [ 0 ] = 0;
+            copy_meta_node ( src, ctx, dst, path, 0, owner_spec, exclude );
+
+            KMDataNodeRelease ( dst );
+        }
+
+        KMDataNodeRelease ( src );
+    }
+
+    STATUS ( 3, "finished copying metadata" );
+}
diff --git a/tools/sra-sort/meta-pair.h b/tools/sra-sort/meta-pair.h
new file mode 100644
index 0000000..1aa65e5
--- /dev/null
+++ b/tools/sra-sort/meta-pair.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_meta_pair_
+#define _h_sra_sort_meta_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KMetadata;
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct MetaPair_vt MetaPair_vt;
+
+typedef struct MetaPair MetaPair;
+struct MetaPair
+{
+    /* polymorphic */
+    const MetaPair_vt *vt;
+
+    /* the pair of KMetadata */
+    struct KMetadata const *smeta;
+    struct KMetadata *dmeta;
+
+    KRefcount refcount;
+};
+
+#ifndef METAPAIR_IMPL
+#define METAPAIR_IMPL MetaPair
+#endif
+
+struct MetaPair_vt
+{
+    void ( * whack ) ( METAPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ *  make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+    struct KMetadata const *src, struct KMetadata *dst,
+    const char *full_path );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+    struct KMetadata const *src, struct KMetadata *dst, const char *full_spec );
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx,
+    const char *owner_spec, const char **exclude );
+
+
+#endif /* _h_sra_sort_meta_pair_ */
diff --git a/tools/sra-sort/paged-membank.c b/tools/sra-sort/paged-membank.c
new file mode 100644
index 0000000..a91c4d4
--- /dev/null
+++ b/tools/sra-sort/paged-membank.c
@@ -0,0 +1,244 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMemBank PagedMemBank;
+#define MEMBANK_IMPL PagedMemBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemPage
+ */
+typedef struct MemPage MemPage;
+struct MemPage
+{
+    SLNode n;
+    size_t used;
+};
+
+/*--------------------------------------------------------------------------
+ * PagedMemBank
+ *  designed to allocate a lot of little bits of memory
+ *  and then free them all at once
+ */
+struct PagedMemBank
+{
+    MemBank dad;
+    size_t quota;
+    size_t avail;
+    size_t pgsize;
+    SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMemBankWhack ( PagedMemBank *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    MemPage *pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+    while ( pg != NULL )
+    {
+        MemFree ( ctx, pg, self -> pgsize );
+        pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+    }
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t PagedMemBankInUse ( const PagedMemBank *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> quota - self -> avail;
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *PagedMemBankAlloc ( PagedMemBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    void *mem;
+    size_t avail;
+
+    /* check current alloc page */
+    MemPage *pg = ( MemPage* ) SLListHead ( & self -> pages );
+    if ( pg != NULL )
+    {
+        /* calculate bytes available */
+        avail = self -> pgsize - pg -> used;
+        if ( avail >= bytes )
+        {
+            /* got the memory */
+            mem = & ( ( uint8_t* ) pg ) [ pg -> used ];
+            pg -> used += bytes;
+
+            /* zero it out if so requested */
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+    }
+
+    /* either didn't have a page or didn't have enough memory
+       test for being able to fit in ANY page */
+    if ( bytes > self -> pgsize - sizeof * pg )
+    {
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+        ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+        return NULL;
+    }
+
+    /* allocate the bytes */
+    if ( self -> avail >= self -> pgsize )
+    {
+        /* going to allocate a full page */
+        self -> avail -= self -> pgsize;
+
+        /* ask process for memory block */
+        TRY ( pg = MemAlloc ( ctx, self -> pgsize, false ) )
+        {
+            /* got it - push it onto stack */
+            pg -> used = sizeof * pg + bytes;
+            SLListPushHead ( & self -> pages, & pg -> n );
+
+            /* clear memory of asked */
+            mem = pg + 1;
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+
+        /* return with error from main MemBank */
+        return NULL;
+    }
+
+    /* at this point we could be using a timeout */
+    rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+    ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+    return NULL;
+}
+
+
+/* Free
+ *  ignored by paged bank
+ */
+static
+void PagedMemBankFree ( PagedMemBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMemBank_vt =
+{
+    PagedMemBankWhack,
+    PagedMemBankInUse,
+    PagedMemBankAlloc,
+    PagedMemBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+/* MakePaged
+ *  make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+    FUNC_ENTRY ( ctx );
+    PagedMemBank *mem;
+
+    /* special case for using memory mapped banks */
+    if ( ctx -> caps -> tool -> mmapdir != NULL )
+        return MemBankMakePagedMMap ( ctx, quota, pgsize );
+
+    if ( pgsize < 4096 )
+        pgsize = 4096;
+
+    if ( quota < pgsize )
+        quota = pgsize;
+
+    TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+    {
+        TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMemBank_vt, "Task MemBank" ) )
+        {
+            mem -> quota = mem -> avail = quota;
+            mem -> pgsize = pgsize;
+            return & mem -> dad;
+        }
+
+        MemFree ( ctx, mem, sizeof * mem );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/paged-mmapbank.c b/tools/sra-sort/paged-mmapbank.c
new file mode 100644
index 0000000..aa6d6e5
--- /dev/null
+++ b/tools/sra-sort/paged-mmapbank.c
@@ -0,0 +1,399 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMMapBank PagedMMapBank;
+#define MEMBANK_IMPL PagedMMapBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <kfs/mmap.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-mmapbank );
+
+
+/*--------------------------------------------------------------------------
+ * MMapPage
+ *  a "page" which is really an entire mmap
+ */
+typedef struct MMapPage MMapPage;
+struct MMapPage
+{
+    SLNode n;
+    KMMap *mmap;
+    uint8_t *addr;
+    size_t size;
+    size_t used;
+};
+
+static
+void CC MMapPageWhack ( SLNode *n, void *data )
+{
+    MMapPage *self = ( MMapPage* ) n;
+    const ctx_t *ctx = ( const void* ) data;
+
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc = KMMapRelease ( self -> mmap );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KMMapRelease failed" );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/*--------------------------------------------------------------------------
+ * PagedMMapBank
+ *  a memory bank based upon system mmap
+ */
+struct PagedMMapBank
+{
+    MemBank dad;
+    size_t quota;
+    size_t used;
+    size_t pgsize;
+    KFile *backing;
+    SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMMapBankWhack ( PagedMMapBank *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    SLListWhack ( & self -> pages, MMapPageWhack, ( void* ) ctx );
+
+    rc = KFileRelease ( self -> backing );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KFileRelease failed on backing file" );
+    self -> backing = NULL;
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t PagedMMapBankInUse ( const PagedMMapBank *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> used;
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* CreateBacking
+ */
+static
+void PagedMMapBankCreateBacking ( PagedMMapBank *self, const ctx_t *ctx, KFile **backing )
+{
+    FUNC_ENTRY ( ctx );
+
+    KDirectory *wd;
+    rc_t rc = KDirectoryNativeDir ( & wd );
+    if ( rc != 0 )
+        ABORT ( rc, "KDirectoryNativeDir failed" );
+    else
+    {
+        static uint32_t file_no;
+        const Tool *tp = ctx -> caps -> tool;
+
+        ++ file_no;
+        STATUS ( 5, "creating backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+
+        rc = KDirectoryCreateFile ( wd, backing, true,
+            0600, kcmInit | kcmParents, "%s/sra-sort-buffer.%d.%u",
+            tp -> mmapdir, tp -> pid, file_no );
+        if ( rc != 0 )
+            ABORT ( rc, "KDirectoryCreateFile failed when creating mem-mapped buffer" );
+        else
+        {
+#if ! WINDOWS
+            /* unlinking file is a wonderful thing */
+            if ( tp -> unlink_idx_files )
+            {
+                /* unlink KFile */
+                STATUS ( 5, "unlinking backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+                rc = KDirectoryRemove ( wd, false, "%s/sra-sort-buffer.%d.%u",
+                    tp -> mmapdir, tp -> pid, file_no );
+                if ( rc != 0 )
+                    WARN ( "failed to unlink mem-mapped buffer file #%u", file_no );
+            }
+#endif
+            /* set initial size to a page */
+            rc = KFileSetSize ( * backing, self -> pgsize );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "KFileSetSize failed to set file to %zu bytes", self -> pgsize );
+        }
+
+        KDirectoryRelease ( wd );
+    }
+}
+
+
+/* ExtendBacking
+ *  creates a backing file if not there
+ *  extends it otherwise
+ */
+static
+void PagedMMapBankExtendBacking ( PagedMMapBank *self, const ctx_t *ctx )
+{
+#if USE_SINGLE_BACKING_FILE
+
+    /* this code is only useful if using a single file for all maps */
+    FUNC_ENTRY ( ctx );
+
+    /* create the file on first attempt */
+    if ( self -> backing == NULL )
+    {
+        assert ( self -> used == 0 );
+        PagedMMapBankCreateBacking ( self, ctx, & self -> backing )l
+    }
+    else
+    {
+        /* extend the file */
+        rc_t rc;
+        STATUS ( 4, "extending common buffer file to %,zu bytes", self -> used + self -> pgsize );
+        rc = KFileSetSize ( self -> backing, self -> used + self -> pgsize );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "KFileSetSize failed to extend file size to %zu bytes", self -> used + self -> pgsize );
+    }
+#endif
+}
+
+
+/* MapPage
+ */
+static
+void PagedMMapBankMapPage ( PagedMMapBank *self, const ctx_t *ctx, MMapPage *pg )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+#if USE_SINGLE_BACKING_FILE
+    STATUS ( 4, "allocating new mmap of %,zu bytes onto common file at offset %,zu", self -> pgsize, self -> used );
+    rc = KMMapMakeRgnUpdate ( & pg -> mmap, self -> backing, self -> used, self -> pgsize );
+#else
+    KFile *backing;
+    ON_FAIL ( PagedMMapBankCreateBacking ( self, ctx, & backing ) )
+        return;
+
+    STATUS ( 4, "allocating new mmap of %,zu bytes onto its own file", self -> pgsize );
+    rc = KMMapMakeRgnUpdate ( & pg -> mmap, backing, 0, self -> pgsize );
+    KFileRelease ( backing );
+#endif
+
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KMMapMakeRgnUpdate failed creating %zu byte region", self -> pgsize );
+    else
+    {
+        rc = KMMapAddrUpdate ( pg -> mmap, ( void** ) & pg -> addr );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMMapAddrUpdate failed" );
+        else
+        {
+            rc = KMMapSize ( pg -> mmap, & pg -> size );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KMMapSize failed" );
+            else
+            {
+                pg -> used = 0;
+                self -> used += self -> pgsize;
+                STATUS ( 4, "total mem-mapped buffer space: %,zu bytes", self -> used );
+                return;
+            }
+        }
+
+        KMMapRelease ( pg -> mmap );
+        pg -> mmap = NULL;
+    }
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *PagedMMapBankAlloc ( PagedMMapBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    void *mem;
+    size_t avail;
+
+    /* check current alloc page */
+    MMapPage *pg = ( MMapPage* ) SLListHead ( & self -> pages );
+    if ( pg != NULL )
+    {
+        /* calculate bytes available */
+        avail = pg -> size - pg -> used;
+        if ( avail >= bytes )
+        {
+            /* got the memory */
+            mem = & pg -> addr [ pg -> used ];
+            pg -> used += bytes;
+
+            /* zero it out if so requested */
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+    }
+
+    /* either didn't have a page or didn't have enough memory
+       test for being able to fit in ANY page */
+    if ( bytes > self -> pgsize )
+    {
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+        ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+        return NULL;
+    }
+
+    /* allocate the bytes */
+    if ( self -> used + self -> pgsize <= self -> quota )
+    {
+        /* ask process for memory block */
+        TRY ( pg = MemAlloc ( ctx, sizeof * pg, false ) )
+        {
+            /* increase size of underlying file */
+            TRY ( PagedMMapBankExtendBacking ( self, ctx ) )
+            {
+                TRY ( PagedMMapBankMapPage ( self, ctx, pg ) )
+                {
+                    /* got it - push it onto stack */
+                    SLListPushHead ( & self -> pages, & pg -> n );
+
+                    /* clear memory of asked */
+                    mem = pg  -> addr;
+                    pg -> used = bytes;
+                    if ( clear )
+                        memset ( mem, 0, bytes );
+
+                    return mem;
+                }
+            }
+
+            MemFree ( ctx, pg, sizeof * pg );
+        }
+
+        return NULL;
+    }
+
+    /* at this point we could be using a timeout */
+    rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+    ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+    return NULL;
+}
+
+
+/* Free
+ *  ignored by paged bank
+ */
+static
+void PagedMMapBankFree ( PagedMMapBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMMapBank_vt =
+{
+    PagedMMapBankWhack,
+    PagedMMapBankInUse,
+    PagedMMapBankAlloc,
+    PagedMMapBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+/* MakePagedMMap
+ *  make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+    FUNC_ENTRY ( ctx );
+    PagedMMapBank *mem;
+
+    if ( pgsize < 256 * 1024 * 1024 )
+        pgsize = 256 * 1024 * 1024;
+
+    if ( quota < pgsize )
+        quota = pgsize;
+
+    TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+    {
+        TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMMapBank_vt, "Memory Mapped Task MemBank" ) )
+        {
+            mem -> quota = quota;
+            mem -> pgsize = pgsize;
+            return & mem -> dad;
+        }
+
+        MemFree ( ctx, mem, sizeof * mem );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.c b/tools/sra-sort/poslen-col-pair.c
new file mode 100644
index 0000000..51983d8
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.c
@@ -0,0 +1,559 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PoslenColReader PoslenColReader;
+#define COLREADER_IMPL PoslenColReader
+
+typedef struct PoslenColWriter PoslenColWriter;
+#define COLWRITER_IMPL PoslenColWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "glob-poslen.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( poslen-col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColReader
+ *  implementation of ColumnReader based upon MapFile temp column read
+ */
+struct PoslenColReader
+{
+    ColumnReader dad;
+
+    /* cached first id in column */
+    int64_t first_id;
+
+    /* buffer for reading poslen */
+    int64_t start_id, excl_stop_id;
+    uint64_t *buff;
+    size_t max_ids;
+
+    /* source of poslen */
+    const MapFile *tmp_col;
+
+    size_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void PoslenColReaderWhack ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* self-bytes */
+    size_t bytes = sizeof * self + self -> full_spec_size;
+
+    /* free buffer */
+    if ( self -> buff != NULL )
+    {
+        ON_FAIL ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+        {
+            CLEAR ();
+        }
+        self -> buff = NULL;
+    }
+
+    /* release MapFile */
+    ON_FAIL ( MapFileRelease ( self -> tmp_col, ctx ) )
+    {
+        WARN ( "MapFileRelease failed on '%s'", self -> full_spec );
+        CLEAR ();
+    }
+    self -> tmp_col = NULL;
+
+    /* free self */
+    MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *PoslenColReaderFullSpec ( const PoslenColReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+static
+uint64_t PoslenColReaderIdRange ( const PoslenColReader *self,
+    const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( opt_first != NULL )
+    {
+        ON_FAIL ( * opt_first = self -> first_id )
+            return 0;
+    }
+
+    return MapFileCount ( self -> tmp_col, ctx );
+}
+
+
+/* PreCopy
+ *  create buffer
+ */
+static
+void PoslenColReaderPreCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const Tool *tp = ctx -> caps -> tool;
+
+    self -> max_ids = tp -> max_poslen_ids;
+    if ( tp -> max_poslen_ids < 4096 )
+        self -> max_ids = 4096;
+
+    TRY ( self -> buff = MemAlloc ( ctx, self -> max_ids * sizeof * self -> buff, false ) )
+    {
+        self -> start_id = self -> excl_stop_id = self -> first_id;
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate buffer for PoslenColReader" );
+    }
+}
+
+
+/* PostCopy
+ *  douse buffer
+ */
+static
+void PoslenColReaderPostCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> buff != NULL )
+    {
+        TRY ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+        {
+            self -> buff = NULL;
+        }
+    }
+}
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+static
+const void *PoslenColReaderRead ( PoslenColReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t dummy;
+
+    if ( elem_bits == NULL )
+        elem_bits = & dummy;
+    if ( boff == NULL )
+        boff = & dummy;
+    if ( row_len == NULL )
+        row_len = & dummy;
+
+    * elem_bits = 64;
+    * boff = 0;
+    * row_len = 0;
+
+    assert ( self -> buff != NULL );
+
+    if ( row_id < self -> start_id || row_id >= self -> excl_stop_id )
+    {
+        size_t num_read;
+
+        if ( row_id < self -> first_id )
+            return NULL;
+
+        /* generate page-aligned starting id */
+        self -> start_id = ( row_id - self -> first_id );
+        self -> start_id -= self -> start_id % self -> max_ids;
+        self -> start_id += self -> first_id;
+        assert ( self -> start_id + self -> max_ids > row_id );
+
+        /* read into buffer */
+        ON_FAIL ( num_read = MapFileReadPoslen ( self -> tmp_col, ctx, self -> start_id, self -> buff, self -> max_ids ) )
+        {
+            self -> start_id = self -> excl_stop_id = self -> first_id;
+            return NULL;
+        }
+        self -> excl_stop_id = self -> start_id + num_read;
+
+        if ( row_id >= self -> excl_stop_id )
+            return NULL;
+    }
+
+    * row_len = 1;
+    return & self -> buff [ row_id - self -> start_id ];
+}
+
+static ColumnReader_vt PoslenColReader_vt =
+{
+    PoslenColReaderWhack,
+    PoslenColReaderFullSpec,
+    PoslenColReaderIdRange,
+    PoslenColReaderPreCopy,
+    PoslenColReaderPostCopy,
+    PoslenColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ *  make temporary column reader
+ */
+ColumnReader *TablePairMakePoslenColReader ( TablePair *self, const ctx_t *ctx,
+    const MapFile *tmp_col, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    PoslenColReader *col;
+    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+    {
+        TRY ( ColumnReaderInit ( & col -> dad, ctx, & PoslenColReader_vt ) )
+        {
+            TRY ( col -> first_id = MapFileFirst ( tmp_col, ctx ) )
+            {
+                TRY ( col -> tmp_col = MapFileDuplicate ( tmp_col, ctx ) )
+                {
+                    rc_t rc;
+
+                    col -> dad . presorted = true;
+                    col -> start_id = col -> excl_stop_id = col -> first_id;
+                    col -> buff = NULL;
+                    col -> max_ids = ctx -> caps -> tool -> max_poslen_ids;
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "src.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+            }
+        }
+
+        MemFree ( ctx, col, sizeof * col + full_spec_size );
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate %zu bytes for PoslenColReader", sizeof * col + full_spec_size );
+    }
+
+    return NULL;
+
+}
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColWriter
+ *  implementation of ColumnWriter based upon VCursor
+ */
+struct PoslenColWriter
+{
+    ColumnWriter dad;
+
+    VCursor *curs;
+    uint32_t global_ref_start;
+    uint32_t ref_len;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void PoslenColWriterWhack ( PoslenColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *PoslenColWriterFullSpec ( const PoslenColWriter *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+void PoslenColWriterDummyStub ( PoslenColWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void PoslenColWriterWrite ( PoslenColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t poslen;
+
+    uint32_t ref_len;
+    uint64_t global_ref_start;
+
+    assert ( elem_bits == 64 );
+    assert ( boff == 0 );
+    assert ( row_len == 1 );
+
+    memmove ( & poslen, data, sizeof poslen );
+    global_ref_start = decode_pos_len ( poslen );
+    ref_len = poslen_to_len ( poslen );
+
+    rc = VCursorOpenRow ( self -> curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorCommitRow ( self -> curs );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+            }
+        }
+
+        rc = VCursorCloseRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+    }
+}
+
+static
+void PoslenColWriterWriteStatic ( PoslenColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t poslen;
+
+    uint32_t ref_len;
+    uint64_t global_ref_start;
+
+    assert ( elem_bits == 64 );
+    assert ( boff == 0 );
+    assert ( row_len == 1 );
+
+    memmove ( & poslen, data, sizeof poslen );
+    global_ref_start = decode_pos_len ( poslen );
+    ref_len = poslen_to_len ( poslen );
+
+    for ( ; ! FAILED () && count > 0; -- count )
+    {
+        rc_t rc = VCursorOpenRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+                else
+                {
+                    rc = VCursorCommitRow ( self -> curs );
+                    if ( rc != 0 )
+                        SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+                    else if ( count > 1 )
+                    {
+                        uint64_t cnt = (count < 0x10000000U ) ? count : 0x10000000U;
+                        rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+                        if ( rc != 0 )
+                            SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+                        count -= cnt - 1;
+                    }
+                }
+            }
+
+            rc = VCursorCloseRow ( self -> curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+        }
+    }
+}
+
+static
+void PoslenColWriterCommit ( PoslenColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorCommit ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorRelease ( self -> curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+        else
+        {
+            self -> curs = NULL;
+        }
+    }
+}
+
+
+static ColumnWriter_vt PoslenColWriter_vt =
+{
+    PoslenColWriterWhack,
+    PoslenColWriterFullSpec,
+    PoslenColWriterDummyStub,
+    PoslenColWriterDummyStub,
+    PoslenColWriterWrite,
+    PoslenColWriterWriteStatic,
+    PoslenColWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColWriter
+ */
+ColumnWriter *TablePairMakePoslenColWriter ( TablePair *self, const ctx_t *ctx,
+   VCursor *opt_curs, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t global_ref_start;
+        const char *subcolspec = "(U64)GLOBAL_REF_START";
+        rc = VCursorAddColumn ( curs, & global_ref_start, subcolspec );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+        else
+        {
+            uint32_t ref_len;
+            subcolspec = "(INSDC:coord:len)REF_LEN";
+            rc = VCursorAddColumn ( curs, & ref_len, subcolspec );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+            else
+            {
+                VCursorSuspendTriggers ( curs );
+                rc = VCursorOpen ( curs );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to open cursor on columns for 'dst.%s.%s'", self -> full_spec, colspec );
+                else
+                {
+                    PoslenColWriter *col;
+                    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+                    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                    {
+                        ColumnWriterInit ( & col -> dad, ctx, & PoslenColWriter_vt, false );
+                        col -> curs = curs;
+                        col -> global_ref_start = global_ref_start;
+                        col -> ref_len = ref_len;
+
+                        col -> full_spec_size = ( uint32_t ) full_spec_size;
+                        rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                            "dst.%s.%s", self -> full_spec, colspec );
+                        if ( rc == 0 )
+                            return & col -> dad;
+
+                        ABORT ( rc, "miscalculated string size" );
+                    }
+                    CATCH_ALL ()
+                    {
+                        ANNOTATE ( "failed to allocate %zu bytes for PoslenColWriter", sizeof * col + full_spec_size );
+                    }
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.h b/tools/sra-sort/poslen-col-pair.h
new file mode 100644
index 0000000..e4f4087
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_poslen_col_pair_
+#define _h_sra_sort_poslen_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct ColumnReader;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ *  make temporary column reader
+ */
+struct ColumnReader *TablePairMakePoslenColReader ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *tmp_col, const char *colspec );
+
+
+/* MakePoslenColWriter
+ */
+struct ColumnWriter *TablePairMakePoslenColWriter ( struct TablePair *self,
+    const ctx_t *ctx, struct VCursor *opt_curs, const char *colspec );
+
+
+
+#endif /* _h_sra_sort_poslen_col_pair_ */
diff --git a/tools/sra-sort/ref-alignid-col.c b/tools/sra-sort/ref-alignid-col.c
new file mode 100644
index 0000000..6491484
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.c
@@ -0,0 +1,702 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct AlignIdColReader;
+#define COLREADER_IMPL struct AlignIdColReader
+
+#include "ref-alignid-col.h"
+#include "glob-poslen.h"
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <kapp/main.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( ref-alignid-col );
+
+
+/*--------------------------------------------------------------------------
+ * IdPosLen
+ */
+typedef struct IdPosLen IdPosLen;
+struct IdPosLen
+{
+    int64_t id;
+    uint64_t poslen;
+};
+
+#if USE_OLD_KSORT
+static
+int64_t CC IdPosLenCmpPos ( const void *a, const void *b, void *data )
+{
+    const IdPosLen *ap = a;
+    const IdPosLen *bp = b;
+
+    if ( ap -> poslen < bp -> poslen )
+        return -1;
+    if ( ap -> poslen > bp -> poslen )
+        return 1;
+
+    return ap -> id < bp -> id ? -1 : ap -> id > bp -> id;
+}
+
+static
+int64_t CC cmp_int64_t ( const void *a, const void *b, void *data )
+{
+    const int64_t *ap = a;
+    const int64_t *bp = b;
+
+    return * ap < * bp ? -1 : * ap > * bp;
+}
+#else
+
+static
+void ksort_IdPosLen_pos ( IdPosLen *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )                               \
+    do                                                        \
+    {                                                         \
+        IdPosLen tmp = * ( const IdPosLen* ) ( a );           \
+        * ( IdPosLen* ) ( a ) = * ( const IdPosLen* ) ( b );  \
+        * ( IdPosLen* ) ( b ) = tmp;                          \
+    } while ( 0 )
+
+
+#define CMP( a, b )                                                                                   \
+     ( ( ( ( const IdPosLen* ) ( a ) ) -> poslen == ( ( const IdPosLen* ) ( b ) ) -> poslen ) ?       \
+       ( ( ( const IdPosLen* ) ( a ) ) -> id < ( ( const IdPosLen* ) ( b ) ) -> id ) ? -1 :           \
+       ( ( ( const IdPosLen* ) ( a ) ) -> id > ( ( const IdPosLen* ) ( b ) ) -> id )                  \
+       : ( ( ( const IdPosLen* ) ( a ) ) -> poslen < ( ( const IdPosLen* ) ( b ) ) -> poslen ) ? -1 : \
+       ( ( ( const IdPosLen* ) ( a ) ) -> poslen > ( ( const IdPosLen* ) ( b ) ) -> poslen ) )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+
+}
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+typedef struct AlignIdColReader AlignIdColReader;
+struct AlignIdColReader
+{
+    ColumnReader dad;
+
+    /* state for id range:
+       first = slot [ 0 ] of map
+       row_id = needs to match request - we only accept serial scans
+       next_id = next id to fetch from "ids"
+       last_excl = end of "ids" */
+    int64_t first, row_id, next_id, last_excl;
+
+    /* sequence for handing out new ids */
+    int64_t new_id;
+
+    /* reader onto our join index column */
+    ColumnReader *ids;
+
+    /* reader onto alignment table
+       to retrieve GLOBAL_REF_START + REF_LEN */
+    ColumnReader *poslen;
+
+    /* bi-directional index for writing
+       new=>old and old=>new mappings */
+    MapFile *idx;
+
+    /* buffer for sorted data */
+    union
+    {
+        int64_t *ids;
+        IdPosLen *id_poslen;
+        IdxMapping *id_map;
+    } u;
+    size_t max_elems;
+    size_t num_elems;
+    size_t cur_elem;
+
+    /* buffer for id row */
+    int64_t *row;
+    size_t max_row_len;
+
+    /* chunk-size */
+    size_t chunk_size;
+
+    /* whether we have all ids or not */
+    bool entire_table;
+};
+
+static
+void AlignIdColReaderDestroy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    if ( self -> ids != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        STATUS ( 4, "destroying align-column reader '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+
+        /* tear everything down */
+        MapFileRelease ( self -> idx, ctx );
+        self -> idx = NULL;
+
+        ColumnReaderRelease ( self -> poslen, ctx );
+        self -> poslen = NULL;
+
+        ColumnReaderRelease ( self -> ids, ctx );
+        self -> ids = NULL;
+
+        if ( self -> u . id_poslen != NULL )
+        {
+            MemFree ( ctx, self -> u . id_poslen, sizeof * self -> u . id_poslen * self -> max_elems );
+            self -> u . id_poslen = NULL;
+        }
+        if ( self -> row != NULL )
+        {
+            MemFree ( ctx, self -> row, sizeof self -> row [ 0 ] * self -> max_row_len );
+            self -> row = NULL;
+        }
+    }
+}
+
+static
+void AlignIdColReaderWhack ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* tear down self */
+    AlignIdColReaderDestroy ( self, ctx );
+
+    /* tear down super-class */
+    ColumnReaderDestroy ( & self -> dad, ctx );
+
+    /* gone */
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *AlignIdColReaderFullSpec ( const AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnReaderFullSpec ( self -> ids, ctx );
+}
+
+static
+uint64_t AlignIdColReaderIdRange ( const AlignIdColReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnReaderIdRange ( self -> ids, ctx, opt_first );
+}
+
+static
+void AlignIdColReaderFlushToIdx ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> idx != NULL )
+    {
+        const Tool *tp = ctx -> caps -> tool;
+
+        /* write new=>old ids  */
+        STATUS ( 3, "%s new=>old id map", tp -> write_new_to_old ? "writing" : "setting" );
+        ON_FAIL ( MapFileSetNewToOld ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to record new to old id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return;
+        }
+        if ( tp -> sort_before_old2new )
+        {
+            /* sort by old ids */
+            STATUS ( 3, "sorting id-map by old-id" );
+#if USE_OLD_KSORT
+            ksort ( self -> u . id_map, self -> num_elems, sizeof self -> u . id_map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+            IdxMappingSortOld ( self -> u . id_map, ctx, self -> num_elems );
+#endif
+        }
+
+        /* write old=>new ids  */
+        STATUS ( 3, "writing old=>new id map" );
+        ON_FAIL ( MapFileSetOldToNew ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to record old to new id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return;
+        }
+
+        STATUS ( 3, "done writing id maps" );
+    }
+
+    /* empty buffer */
+    self -> first = self -> next_id;
+}
+
+static
+void AlignIdColReaderPreCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    /* TBD - a good place to allocate memory */
+}
+
+static
+void AlignIdColReaderPostCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* called after a single copy
+       assumes that entire row-range of table has been copied */
+
+    /* tear down self */
+    AlignIdColReaderDestroy ( self, ctx );
+}
+
+static
+const void *AlignIdColReaderRead ( AlignIdColReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+    uint32_t num_read32;
+    size_t i, num_read;
+
+    /* handle bad parameters */
+    uint32_t dummy [ 3 ];
+    if ( elem_bits == NULL )
+        elem_bits = & dummy [ 0 ];
+    if ( boff == NULL )
+        boff = & dummy [ 1 ];
+    if ( row_len == NULL )
+        row_len = & dummy [ 2 ];
+
+    /* THERE ARE three stages to this method:
+       1a. detect need to allocate id map
+       1b. detect need to flush to index
+       2.  detect need to refresh id map
+       3.  respond to read request
+     */
+
+    if ( row_id != self -> row_id )
+    {
+        /* error condition */
+        rc = RC ( rcExe, rcCursor, rcReading, rcParam, rcIncorrect );
+        INTERNAL_ERROR ( rc, "AlignIdColReader only supports serial access" );
+        return NULL;
+    }
+
+    /* stage 1 - allocate or flush */
+    if ( self -> u . ids == NULL && ! self -> entire_table )
+    {
+        /* limit ids to actual count */
+        uint64_t num_ids = MapFileCount ( self -> idx, ctx );
+        self -> max_elems = ctx -> caps -> tool -> max_ref_idx_ids;
+        if ( ( uint64_t ) self -> max_elems > num_ids )
+            self -> max_elems = ( size_t ) num_ids;
+
+        /* allocate the buffer */
+        do
+        {
+            CLEAR ();
+
+            TRY ( self -> u . id_poslen = MemAlloc ( ctx, sizeof self -> u . id_poslen [ 0 ] * self -> max_elems, false ) )
+            {
+                STATUS ( 4, "allocated map buffer with %,zu elements", self -> max_elems );
+                break;
+            }
+
+            self -> max_elems >>= 1;
+        }
+        while ( self -> max_elems >= 1024 * 1024 );
+
+        if ( FAILED () )
+        {
+            ANNOTATE ( "failed to allocate id buffer" );
+            return NULL;
+        }
+
+        /* notice if we have the entire table */
+        if ( ( uint64_t ) self -> max_elems == num_ids )
+            self -> entire_table = true;
+
+        /* allocate a row buffer */
+        self -> max_row_len = 8 * 1024;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 8 ] * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to allocate row buffer" );
+            return NULL;
+        }
+
+        assert ( self -> first == self -> next_id );
+        assert ( self -> first == row_id );
+    }
+    else if ( row_id == self -> next_id && self -> first < row_id )
+    {
+        ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+            return NULL;
+    }
+
+    /* stage 2 - refresh */
+    if ( self -> first == self -> next_id )
+    {
+        /* if there are no more rows, return NULL  */
+        if ( self -> next_id == self -> last_excl )
+        {
+            STATUS ( 3, "done reading '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return NULL;
+        }
+
+        self -> cur_elem = 0;
+
+        /* if the entire table will be read into memory,
+           there is no point in reading/sorting the ids */
+        if ( self -> entire_table )
+        {
+            STATUS ( 3, "auto-generating %,zu ids for '%s'", self -> max_elems, ColumnReaderFullSpec ( self -> ids, ctx ) );
+            for ( i = 0; i < self -> max_elems; ++ i )
+            {
+                self -> u . id_poslen [ i ] . id = self -> first + i;
+#if _DEBUGGING
+                self -> u . id_poslen [ i ] . poslen = 0;
+#endif
+            }
+
+            self -> num_elems = self -> max_elems;
+            self -> next_id = self -> last_excl;
+        }
+        else
+        {
+            /* read up to max_elems into id array */
+            STATUS ( 3, "reading ids from '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            for ( self -> num_elems = 0; self -> next_id < self -> last_excl; self -> num_elems += num_read, ++ self -> next_id )
+            {
+                /* read a row of ids */
+                ON_FAIL ( base = ColumnReaderRead ( self -> ids, ctx, self -> next_id, elem_bits, boff, & num_read32 ) )
+                {
+                    ANNOTATE ( "failed to read id column" );
+                    return NULL;
+                }
+
+                /* we expect empty rows */
+                num_read = num_read32;
+                if ( num_read == 0 )
+                    continue;
+
+                assert ( * elem_bits == sizeof self -> u . ids [ 0 ] * 8 );
+                assert ( * boff == 0 );
+
+                /* detect when buffer is full */
+                if ( self -> num_elems + num_read > self -> max_elems )
+                {
+                    /* if we've read at least one row, then we're okay */
+                    if ( self -> first < self -> next_id )
+                        break;
+
+                    /* error condition - buffer was too small to read a single row */
+                    rc = RC ( rcExe, rcCursor, rcReading, rcBuffer, rcInsufficient );
+                    ERROR ( rc, "allocated buffer was too small ( %zu elems ) to read a single row ( id %ld, row-len %zu )",
+                            self -> max_elems, self -> next_id, num_read );
+                    return NULL;
+                }
+
+                /* bring them in */
+                memmove ( & self -> u . ids [ self -> num_elems ], base, num_read * sizeof self -> u . ids [ 0 ] );
+            }
+
+            /* sort to produce sparse but ordered list */
+            STATUS ( 3, "sorting %,zu 64-bit ids", self -> num_elems );
+#if USE_OLD_KSORT
+            ksort ( self -> u . ids, self -> num_elems, sizeof self -> u . ids [ 0 ], cmp_int64_t, ( void* ) ctx );
+#else
+            ksort_int64_t ( self -> u . ids, self -> num_elems );
+#endif
+
+            /* transform from ids to id_poslen */
+            STATUS ( 3, "expanding ids to ( id, position, len ) tuples" );
+            for ( i = self -> num_elems; i > 1 ; )
+            {
+                -- i;
+                self -> u . id_poslen [ i ] . id = self -> u . ids [ i ];
+            }
+        }
+
+        /* read num_elems from poslen */
+        STATUS ( 3, "reading ( position, len ) pairs from '%s'", ColumnReaderFullSpec ( self -> poslen, ctx ) );
+        for ( i = 0; i < self -> num_elems; ++ i )
+        {
+            ON_FAIL ( base = ColumnReaderRead ( self -> poslen, ctx, self -> u . id_poslen [ i ] . id, elem_bits, boff, & num_read32 ) )
+            {
+                ANNOTATE ( "failed to read global ref-start from alignment table" );
+                return NULL;
+            }
+
+            num_read = num_read32;
+            assert ( * elem_bits == sizeof self -> u . id_poslen [ 0 ] . poslen * 8 );
+            assert ( * boff == 0 );
+            assert ( num_read == 1 );
+
+            self -> u . id_poslen [ i ] . poslen = * ( uint64_t* ) base;
+        }
+
+        /* sort by poslen */
+        STATUS ( 3, "sorting ( id, position, len ) tuples on position, len DESC" );
+#if USE_OLD_KSORT
+        ksort ( self -> u . id_poslen, self -> num_elems, sizeof self -> u . id_poslen [ 0 ], IdPosLenCmpPos, ( void* ) ctx );
+#else
+        ksort_IdPosLen_pos ( self -> u . id_poslen, self -> num_elems );
+#endif
+
+        /* write poslen to temp column */
+        STATUS ( 3, "writing ( position, len ) to temp column" );
+        ON_FAIL ( MapFileSetPoslen ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to write temporary poslen column for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return NULL;
+        }
+
+        STATUS ( 3, "done writing ( position, len )" );
+    }
+
+    /* stage 3 - build a row */
+    for ( num_read = ( size_t ) ( self -> num_elems - self -> cur_elem ), i = 0; i < num_read; ++ i )
+    {
+        /* whatever the current element is, it must belong to this row */
+        uint64_t pos = decode_pos_len ( self -> u . id_poslen [ self -> cur_elem + i ] . poslen );
+        int64_t cur_row_id = global_to_row_id ( pos, self -> chunk_size );
+        if ( cur_row_id != row_id )
+        {
+            num_read = i;
+            break;
+        }
+    }
+
+    /* "num_read" now has the number of elements in this row */
+    if ( num_read > self -> max_row_len )
+    {
+        STATUS ( 4, "reallocating row buffer for row-length %,zu", num_read );
+
+        /* realloc the row buffer */
+        MemFree ( ctx, self -> row, self -> max_row_len * sizeof self -> row [ 0 ] );
+
+        self -> max_row_len = ( num_read + 4095 ) & ~ ( size_t ) 4095;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 0 ] * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to reallocate row buffer" );
+            return NULL;
+        }
+    }
+
+    /* build the row, assigning new ids */
+    for ( i = 0; i < num_read; ++ i )
+    {
+        self -> row [ i ] = ++ self -> new_id;
+        self -> u . id_map [ self -> cur_elem + i ] . new_id = self -> new_id;
+    }
+
+    /* advance row_id */
+    self -> cur_elem += num_read;
+    if ( ++ self -> row_id == self -> last_excl )
+    {
+        /* if this was the last row, flush index  */
+        ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+            return NULL;
+
+        if ( ctx -> caps -> tool -> idx_consistency_check && self -> idx != NULL )
+        {
+            ON_FAIL ( MapFileConsistencyCheck ( self -> idx, ctx ) )
+                return NULL;
+        }
+    }
+
+    /* return row */
+    * elem_bits = sizeof self -> row [ 0 ] * 8;
+    * boff = 0;
+    * row_len = num_read;
+    return self -> row;
+}
+
+static ColumnReader_vt AlignIdColReader_vt =
+{
+    AlignIdColReaderWhack,
+    AlignIdColReaderFullSpec,
+    AlignIdColReaderIdRange,
+    AlignIdColReaderPreCopy,
+    AlignIdColReaderPostCopy,
+    AlignIdColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ */
+static
+size_t RefTblPairGetChunkSize ( TablePair *self, const ctx_t *ctx, const VCursor **cursp )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VTableCreateCursorRead ( self -> stbl, cursp );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on '%s'", self -> full_spec );
+    else
+    {
+        uint32_t idx;
+        const VCursor *curs = * cursp;
+        rc = VCursorAddColumn ( curs, & idx, "MAX_SEQ_LEN" );
+        if ( rc != 0 )
+            rc = VCursorAddColumn ( curs, & idx, "CHUNK_SIZE" );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorAddColumn - failed to determine chunk size of '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+                ERROR ( rc, "VCursorOpen - failed to determine chunk size of '%s'", self -> full_spec );
+            else
+            {
+                uint32_t row_len, chunk_size;
+                rc = VCursorReadDirect ( curs, 1, idx,
+                    sizeof chunk_size * 8, & chunk_size, 1, & row_len );
+                if ( rc != 0 )
+                    ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+                else if ( row_len != 1 )
+                {
+                    rc = RC ( rcExe, rcCursor, rcReading, rcData, rcInsufficient );
+                    ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+                }
+                else
+                {
+                    STATUS ( 3, "'%s' chunk size determined to be %u", self -> full_spec, chunk_size );
+                    return chunk_size;
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+        * cursp = NULL;
+    }
+
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in random order
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( TablePair *self,
+    const ctx_t *ctx, TablePair *align_tbl, MapFile *idx, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t chunk_size;
+    const VCursor *curs;
+
+    /* determine chunk size and keep cursor for id reader */
+    TRY ( chunk_size = RefTblPairGetChunkSize ( self, ctx, & curs ) )
+    {
+        ColumnReader *ids;
+
+        /* need to create a traditional reader on self */
+        TRY ( ids = TablePairMakeColumnReader ( self, ctx, curs, colspec, true ) )
+        {
+            ColumnReader *poslen;
+
+            /* need to create a poslen reader on align_tbl */
+            TRY ( poslen = TablePairMakeGlobalPosLenReader ( align_tbl, ctx, ( uint32_t ) chunk_size ) )
+            {
+                int64_t first;
+                uint64_t count;
+
+                /* need to create a mapfile based on range of poslen */
+                TRY ( count = ColumnReaderIdRange ( poslen, ctx, & first ) )
+                {
+                    TRY ( MapFileSetIdRange ( idx, ctx, first, count ) )
+                    {
+                        AlignIdColReader *col;
+                        TRY ( col = MemAlloc ( ctx, sizeof * col, true ) )
+                        {
+                            TRY ( ColumnReaderInit ( & col -> dad, ctx, & AlignIdColReader_vt ) )
+                            {
+                                /* one more point of failure when obtaining the id range */
+                                TRY ( count = ColumnReaderIdRange ( ids, ctx, & first ) )
+                                {
+                                    TRY ( col -> idx = MapFileDuplicate ( idx, ctx ) )
+                                    {
+                                        col -> first = col -> row_id = col -> next_id = first;
+                                        col -> last_excl = first + count;
+                                        col -> ids = ids;
+                                        col -> poslen = poslen;
+                                        col -> chunk_size = chunk_size;
+                                        col -> entire_table = false;
+                                    
+                                        /* the actual working buffer is allocated upon demand
+                                           to avoid occupying space while waiting to execute */
+
+                                        /* douse the cursor here */
+                                        VCursorRelease ( curs );
+
+                                        return & col -> dad;
+                                    }
+                                }
+                            }
+                            
+                            MemFree ( ctx, col, sizeof * col );
+                        }
+                        
+                        MapFileRelease ( idx, ctx );
+                    }
+                }
+                
+                ColumnReaderRelease ( poslen, ctx );
+            }
+            
+            ColumnReaderRelease ( ids, ctx );
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/ref-alignid-col.h b/tools/sra-sort/ref-alignid-col.h
new file mode 100644
index 0000000..9b5ee84
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ref_alignid_col_
+#define _h_sra_sort_ref_alignid_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( struct TablePair *self,
+    const ctx_t *ctx, struct TablePair *align_tbl, struct MapFile *idx, const char *colspec );
+
+
+#endif /* _h_sra_sort_ref_alignid_col_ */
diff --git a/tools/sra-sort/row-set-priv.h b/tools/sra-sort/row-set-priv.h
new file mode 100644
index 0000000..62c50d6
--- /dev/null
+++ b/tools/sra-sort/row-set-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_priv_
+#define _h_sra_sort_row_set_priv_
+
+#ifndef _h_sra_sort_row_set_
+#include "row-set.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  the basic 4 types
+ */
+RowSetIterator * MapFileMakeMappingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * MapFileMakeSortingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeMappingRowSetIterator ( struct TablePair *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeSimpleRowSetIterator ( struct TablePair *self, const ctx_t *ctx );
+
+#endif /* _h_sra_sort_row_set_priv_ */
diff --git a/tools/sra-sort/row-set.c b/tools/sra-sort/row-set.c
new file mode 100644
index 0000000..59f1851
--- /dev/null
+++ b/tools/sra-sort/row-set.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <klib/rc.h>
+
+FILE_ENTRY ( row-set );
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ *  interface to iterate row-ids
+ */
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "RowSet" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release RowSet" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "RowSet" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate RowSet" );
+            return NULL;
+        }
+    }
+
+    return ( RowSet* ) self;
+}
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "RowSet", "init", "" );
+    self -> align = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  interface to iterate RowSets
+ */
+
+/* MakeRowSetIterator
+ *  make RowSet iterator based upon parameters
+ *  each RowSet will generate row-ids in src order
+ *
+ *  "sort_idx" [ IN ]
+ *    if NULL, the RowSet objects will auto-generate row-ids
+ *    otherwise, src row-ids will be selected from MapFile
+ *
+ *  "pairs" [ IN ]
+ *    if true, the row-ids will be generated into an IdxMapping pair
+ *    if false but "idx" is not NULL, the src row-ids will be generated
+ *      into a single-id map, and new ordering preserved in parallel
+ *    if false and "idx" is NULL, no additional structure will be generated
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *sort_idx, bool pairs, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( sort_idx != NULL )
+    {
+        if ( pairs )
+            return MapFileMakeMappingRowSetIterator ( sort_idx, ctx, large );
+
+        return MapFileMakeSortingRowSetIterator ( sort_idx, ctx, large );
+    }
+
+    if ( pairs )
+        return TablePairMakeMappingRowSetIterator ( self, ctx, large );
+
+    return TablePairMakeSimpleRowSetIterator ( self, ctx );
+}
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "RowSetIterator" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release RowSetIterator" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "RowSetIterator" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate RowSetIterator" );
+            return NULL;
+        }
+    }
+
+    return ( RowSetIterator* ) self;
+}
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt )
+{
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "RowSetIterator", "init", "" );
+    self -> align = 0;
+}
diff --git a/tools/sra-sort/row-set.h b/tools/sra-sort/row-set.h
new file mode 100644
index 0000000..8ffa38a
--- /dev/null
+++ b/tools/sra-sort/row-set.h
@@ -0,0 +1,215 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_
+#define _h_sra_sort_row_set_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ *  interface to iterate row-ids
+ */
+typedef struct RowSet_vt RowSet_vt;
+
+typedef struct RowSet RowSet;
+struct RowSet
+{
+    const RowSet_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef ROWSET_IMPL
+#define ROWSET_IMPL RowSet
+#endif
+
+struct RowSet_vt
+{
+    /* called by Release */
+    void ( * whack ) ( ROWSET_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve next set of row-ids */
+    size_t ( * next ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+        int64_t *ids, size_t max_ids );
+
+    /* reset iterator to initial state */
+    void ( * reset ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+        bool for_static );
+};
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx );
+
+
+/* Next
+ *  return next set of row-ids
+ *  returns 0 if no rows are available
+ */
+#define RowSetNext( self, ctx, ids, max_ids ) \
+    POLY_DISPATCH_INT ( next, self, ROWSET_IMPL, ctx, ids, max_ids )
+
+
+/* Reset
+ *  reset iterator to beginning
+ */
+#define RowSetReset( self, ctx, for_static ) \
+    POLY_DISPATCH_VOID ( reset, self, ROWSET_IMPL, ctx, for_static )
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt );
+
+/* Destroy
+ */
+#define RowSetDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  interface to iterate RowSets
+ */
+typedef struct RowSetIterator_vt RowSetIterator_vt;
+
+typedef struct RowSetIterator RowSetIterator;
+struct RowSetIterator
+{
+    const RowSetIterator_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef ROWSET_ITER_IMPL
+#define ROWSET_ITER_IMPL RowSetIterator
+#endif
+
+struct RowSetIterator_vt
+{
+    /* called by Release */
+    void ( * whack ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve row-id mapping pair */
+    struct IdxMapping* ( * get_idx_mapping ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+        size_t *num_items );
+
+    /* retrieve src row-id array */
+    int64_t* ( * get_src_ids ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+        uint32_t **opt_ord, size_t *num_items );
+
+    /* retrieve next row-set */
+    RowSet* ( * next ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeRowSetIterator
+ *  make RowSet iterator based upon parameters
+ *  each RowSet will generate row-ids in src order
+ *
+ *  "sort_idx" [ IN ]
+ *    if NULL, the RowSet objects will auto-generate row-ids
+ *    otherwise, src row-ids will be selected from MapFile
+ *
+ *  "pairs" [ IN ]
+ *    if true, the row-ids will be generated into an IdxMapping pair
+ *    if false but "idx" is not NULL, the src row-ids will be generated
+ *      into a single-id map, and new ordering preserved in parallel
+ *    if false and "idx" is NULL, no additional structure will be generated
+ *
+ *  "large" [ IN ]
+ *    if true, use a reduced id-range for the row-set
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *sort_idx, bool pairs, bool large );
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx );
+
+
+/* GetIdxMapping
+ *  a little bit of plumbing to get the IdxMapping map
+ */
+#define RowSetIteratorGetIdxMapping( self, ctx, num_items ) \
+    POLY_DISPATCH_PTR ( get_idx_mapping, self, ROWSET_ITER_IMPL, ctx, num_items )
+
+
+/* GetSourceIds
+ *  a little bit of plumbing to get the individual source ids
+ *  and optional new id ordering
+ */
+#define RowSetIteratorGetSourceIds( self, ctx, opt_ord, num_items ) \
+    POLY_DISPATCH_PTR ( get_src_ids, self, ROWSET_ITER_IMPL, ctx, opt_ord, num_items )
+
+
+/* Next
+ *  return next RowSet
+ *  returns NULL if no rows are available
+ */
+#define RowSetIteratorNext( self, ctx ) \
+    POLY_DISPATCH_PTR ( next, self, ROWSET_ITER_IMPL, ctx )
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt );
+
+/* Destroy
+ */
+#define RowSetIteratorDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+#endif /* _h_sra_sort_row_set_ */
diff --git a/tools/sra-sort/run.c b/tools/sra-sort/run.c
new file mode 100644
index 0000000..e64d31d
--- /dev/null
+++ b/tools/sra-sort/run.c
@@ -0,0 +1,388 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "sra-sort.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <sra/sraschema.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <kfg/config.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( run );
+
+static
+void typename_to_config_path ( const char *in, char *out )
+{
+    bool end;
+    uint32_t i;
+
+    for ( end = false, i = 0; ! end; ++ i )
+    {
+        switch ( out [ i ] = in [ i ] )
+        {
+        case ':':
+            out [ i ] = '/';
+            break;
+        case ' ':
+        case '#':
+            out [ i ] = 0;
+        case 0:
+            end = true;
+            return;
+        }
+    }
+}
+
+static
+bool map_typename_builtin ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t copied;
+
+#define ALIGN_EVIDENCE_MAP "NCBI:align:db:alignment_evidence_sorted"
+#define ALIGN_UNSORTED_MAP "NCBI:align:db:alignment_sorted"
+#define ALIGN_SRC          "align/align.vschema"
+
+    if ( strcmp ( out, "NCBI/align/db/alignment_evidence" ) == 0 )
+        copied = string_copy ( out, size, ALIGN_EVIDENCE_MAP, sizeof ALIGN_EVIDENCE_MAP - 1 );
+    else if ( strcmp ( out, "NCBI/align/db/alignment_unsorted" ) == 0 )
+        copied = string_copy ( out, size, ALIGN_UNSORTED_MAP, sizeof ALIGN_UNSORTED_MAP - 1 );
+    else
+    {
+        strcpy ( out, in );
+        schema_src [ 0 ] = 0;
+        return false;
+    }
+
+    if ( copied != size )
+    {
+        out [ copied ] = 0;
+        copied = string_copy ( schema_src, size, ALIGN_SRC, sizeof ALIGN_SRC - 1 );
+    }
+
+    if ( copied == size )
+    {
+        rc_t rc = RC ( rcExe, rcType, rcCopying, rcBuffer, rcInsufficient );
+        INTERNAL_ERROR ( rc, "failed to copy a built-in constant" );
+        strcpy ( out, in );
+        schema_src [ 0 ] = 0;
+        return false;
+    }
+
+#undef ALIGN_EVIDENCE_MAP
+#undef ALIGN_UNSORTED_MAP
+#undef ALIGN_SRC
+
+    schema_src [ copied ] = 0;
+    return true;
+}
+
+static
+bool map_typename ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const KConfigNode *n;
+    size_t num_read, remaining;
+
+    typename_to_config_path ( in, out );
+
+    rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/%s/%s", sub_node, out );
+    if ( rc != 0 )
+        return map_typename_builtin ( ctx, sub_node, in, out, schema_src, size );
+
+    rc = KConfigNodeRead ( n, 0, out, size - 1, & num_read, & remaining );
+    if ( rc != 0 )
+        ERROR ( rc, "KConfigNodeRead failed" );
+    else if ( remaining != 0 )
+    {
+        rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+        ERROR ( rc, "type map of '%s' is too long", in );
+    }
+    else
+    {
+        out [ num_read ] = 0;
+        typename_to_config_path ( out, schema_src );
+
+        KConfigNodeRelease ( n );
+        rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/schema-src/%s", schema_src );
+        if ( rc != 0 )
+            ERROR ( rc, "KConfigOpenNodeRead - failed to find entry 'sra-sort/schema-src/%s'", schema_src );
+        else
+        {
+            rc = KConfigNodeRead ( n, 0, schema_src, size - 1, & num_read, & remaining );
+            if ( rc != 0 )
+                ERROR ( rc, "KConfigNodeRead failed" );
+            else if ( remaining != 0 )
+            {
+                rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+                ERROR ( rc, "type map of '%s' is too long", in );
+            }
+            else
+            {
+                schema_src [ num_read ] = 0;
+            }
+        }
+    }
+
+    KConfigNodeRelease ( n );
+    return true;
+}
+
+static
+VSchema *map_schema_types ( TypeParams *type, const ctx_t *ctx, const VSchema *src_schema )
+{
+    FUNC_ENTRY ( ctx );
+
+    bool mapped;
+    char schema_src [ 256 ];
+    assert ( sizeof schema_src == sizeof type -> dst_type );
+
+    TRY ( mapped = map_typename ( ctx, "out-map", type -> src_type, type -> dst_type, schema_src, sizeof schema_src ) )
+    {
+        rc_t rc;
+        VSchema *dst_schema;
+
+        if ( ! mapped )
+        {
+            type -> view_type [ 0 ] = 0;
+            rc = VSchemaAddRef ( src_schema );
+            if ( rc != 0 )
+                ERROR ( rc, "VSchemaAddRef failed" );
+            return ( VSchema* ) src_schema;
+        }
+
+        rc = VDBManagerMakeSchema ( ctx -> caps -> vdb, & dst_schema );
+        if ( rc != 0 )
+            ERROR ( rc, "VDBManagerMakeSchema failed" );
+        else
+        {
+            rc = VSchemaParseFile ( dst_schema, "%s", schema_src );
+            if ( rc != 0 )
+                ERROR ( rc, "VSchemaParseFile failed adding file '%s' for destination", src_schema );
+            else
+            {
+                TRY ( mapped = map_typename ( ctx, "view-map", type -> src_type, type -> view_type, schema_src, sizeof schema_src ) )
+                {
+                    if ( ! mapped )
+                    {
+                        type -> view_type [ 0 ] = 0;
+                        return dst_schema;
+                    }
+
+                    rc = VSchemaParseFile ( dst_schema, "%s", schema_src );
+                    if ( rc == 0 )
+                        return dst_schema;
+
+                    ERROR ( rc, "VSchemaParseFile failed adding file '%s' for view", src_schema );
+                }
+            }
+
+            VSchemaRelease ( dst_schema );
+        }
+    }
+
+    return NULL;
+}
+
+/* open_db
+ *  called from run
+ *  determines the type of schema
+ *  opens output object
+ *  dispatches to the appropriate handler
+ */
+static
+void open_db ( const ctx_t *ctx, const VDatabase **srcp )
+{
+    FUNC_ENTRY ( ctx );
+
+    const VDatabase *src = *srcp;
+
+    const VSchema *src_schema;
+    rc_t rc = VDatabaseOpenSchema ( src, & src_schema );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseOpenSchema failed" );
+    else
+    {
+        TypeParams type;
+        rc = VDatabaseTypespec ( src, type . src_type, sizeof type . src_type );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to obtain database typespec" );
+        else
+        {
+            VSchema *dst_schema;
+
+            /* map input type to output type */
+            TRY ( dst_schema = map_schema_types ( & type, ctx, src_schema ) )
+            {
+                const Tool *tp = ctx -> caps -> tool;
+
+                /* if view was remapped, reopen the database */
+                if ( type . view_type [ 0 ] != 0 )
+                {
+                    VSchemaRelease ( src_schema );
+                    rc = VSchemaAddRef ( dst_schema );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "VSchemaAddRef failed" );
+                        src_schema = NULL;
+                    }
+                    else
+                    {
+                        src_schema = dst_schema;
+                        VDatabaseRelease ( src );
+                        rc = VDBManagerOpenDBRead ( ctx -> caps -> vdb, srcp, src_schema, "%s", tp -> src_path );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDBManagerOpenDBRead failed reopening db '%s'", tp -> src_path );
+                        src = *srcp;
+                    }
+                }
+
+                if ( ! FAILED () )
+                {
+                    VDatabase *dst;
+                    rc = VDBManagerCreateDB ( ctx -> caps -> vdb, & dst, dst_schema,
+                                              type . dst_type, tp -> db . cmode, "%s", tp -> dst_path );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VDBManagerCreateDB failed to create '%s' with type '%s'", tp -> dst_path, type . dst_type );
+                    else
+                    {
+                        rc = VDatabaseColumnCreateParams ( dst, tp -> col . cmode, tp -> col . checksum, tp -> col . pgsize );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDatabaseColumnCreateParams: failed to set column create params on db '%s'", tp -> dst_path );
+                        else
+                        {
+                            DbPair *pb;
+
+                            /* TBD - this has to be fixed to use proper stuff */
+                            const char *name = strrchr ( tp -> src_path, '/' );
+                            if ( name ++ == NULL )
+                                name = tp -> src_path;
+
+                            TRY ( pb = DbPairMake ( ctx, src, dst, name ) )
+                            {
+                                DbPairRun ( pb, ctx );
+                                DbPairRelease ( pb, ctx );
+                            }
+                        }
+
+                        rc = VDatabaseRelease ( dst );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDatabaseRelease failed on '%s'", tp -> dst_path );
+                    }
+                }
+
+                VSchemaRelease ( dst_schema );
+            }
+        }
+
+        VSchemaRelease ( src_schema );
+    }
+}
+
+
+/* open_tbl
+ *  called from run
+ *  determines the type of schema
+ *  opens output object
+ *  dispatches to the appropriate handler
+ */
+static
+void open_tbl ( const ctx_t *ctx, const VTable **tblp )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc = RC ( rcExe, rcFunction, rcExecuting, rcFunction, rcUnsupported );
+    ERROR ( rc, "unimplemented function" );
+}
+
+/* run
+ *  called from KMain
+ *  determines the type of object being copied/sorted
+ *  opens input object
+ *  dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    VDBManager *mgr = ctx -> caps -> vdb;
+    const Tool *tp = ctx -> caps -> tool;
+
+    const VDatabase *db;
+    rc_t rc = VDBManagerOpenDBRead ( mgr, & db, NULL, "%s", tp -> src_path );
+    if ( rc == 0 )
+    {
+        open_db ( ctx, & db );
+        VDatabaseRelease ( db );
+    }
+    else
+    {
+        const VTable *tbl;
+        rc_t rc2 = VDBManagerOpenTableRead ( mgr, & tbl, NULL, "%s", tp -> src_path );
+        if ( rc2 == 0 )
+        {
+            rc = 0;
+            open_tbl ( ctx, & tbl );
+            VTableRelease ( tbl );
+        }
+        else
+        {
+            VSchema *sra_dflt;
+            rc2 = VDBManagerMakeSRASchema ( mgr, & sra_dflt );
+            if ( rc2 == 0 )
+            {
+                rc2 = VDBManagerOpenTableRead ( mgr, & tbl, sra_dflt, "%s", tp -> src_path );
+                if ( rc2 == 0 )
+                {
+                    rc = 0;
+                    open_tbl ( ctx, & tbl );
+                    VTableRelease ( tbl );
+                }
+                
+                VSchemaRelease ( sra_dflt );
+            }
+        }
+    }
+
+    if ( rc != 0 )
+        ERROR ( rc, "failed to open object '%s'", tp -> src_path );
+}
diff --git a/tools/sra-sort/simple-row-set.c b/tools/sra-sort/simple-row-set.c
new file mode 100644
index 0000000..e4e5833
--- /dev/null
+++ b/tools/sra-sort/simple-row-set.c
@@ -0,0 +1,212 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleRowSet SimpleRowSet;
+#define ROWSET_IMPL SimpleRowSet
+
+typedef struct SimpleRowSetIterator SimpleRowSetIterator;
+#define ROWSET_ITER_IMPL SimpleRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( simple-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSet
+ *  implementation of RowSet based upon auto-generated serial ids
+ */
+struct SimpleRowSet
+{
+    RowSet dad;
+    int64_t first, row_id, last_excl;
+};
+
+static
+void SimpleRowSetWhack ( SimpleRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SimpleRowSetNext ( SimpleRowSet *self, const ctx_t *ctx,
+    int64_t *row_ids, size_t max_ids )
+{
+    if ( row_ids != NULL )
+    {
+        size_t i;
+
+        uint64_t max_avail = self -> last_excl - self -> row_id;
+        if ( max_avail < ( uint64_t ) max_ids )
+            max_ids = ( size_t ) max_avail;
+
+        for ( i = 0; i < max_ids; ++ i )
+            row_ids [ i ] = self -> row_id + i;
+
+        self -> row_id += max_ids;
+        return max_ids;
+    }
+    return 0;
+}
+
+static
+void SimpleRowSetReset ( SimpleRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    self -> row_id = self -> first;
+}
+
+static RowSet_vt SimpleRowSet_vt =
+{
+    SimpleRowSetWhack,
+    SimpleRowSetNext,
+    SimpleRowSetReset
+};
+
+
+/* Make
+ */
+static
+RowSet *SimpleRowSetMake ( const ctx_t *ctx, int64_t first, int64_t last_excl )
+{
+    FUNC_ENTRY ( ctx );
+
+    SimpleRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        RowSetInit ( & rs -> dad, ctx, & SimpleRowSet_vt );
+        rs -> first = rs -> row_id = first;
+        rs -> last_excl = last_excl;
+        return & rs -> dad;
+    }
+
+    return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct SimpleRowSetIterator
+{
+    RowSetIterator dad;
+    RowSet *rs;
+};
+
+static
+void SimpleRowSetIteratorWhack ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetRelease ( self -> rs, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+struct IdxMapping *SimpleRowSetIteratorGetIdxMapping ( SimpleRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetIdxMapping ON SIMPLE ROWSET ITERATOR" );
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+int64_t *SimpleRowSetIteratorGetSourceIds ( SimpleRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetSourceIds ON SIMPLE ROWSET ITERATOR" );
+
+    if ( opt_ord != NULL )
+        * opt_ord = NULL;
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+RowSet *SimpleRowSetIteratorNext ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+    RowSet *rs = self -> rs;
+    self -> rs = NULL;
+    return rs;    
+}
+
+static RowSetIterator_vt SimpleRowSetIterator_vt =
+{
+    SimpleRowSetIteratorWhack,
+    SimpleRowSetIteratorGetIdxMapping,
+    SimpleRowSetIteratorGetSourceIds,
+    SimpleRowSetIteratorNext
+};
+
+
+/* MakeSimpleRowSetIterator
+ *  make simple row-id iterator
+ *  runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeSimpleRowSetIterator ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> first_id > self -> last_excl )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+        INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+    }
+    else
+    {
+        SimpleRowSetIterator *it;
+
+        TRY ( it = MemAlloc ( ctx, sizeof * it, false ) )
+        {
+            RowSetIteratorInit ( & it -> dad, ctx, & SimpleRowSetIterator_vt );
+            TRY ( it -> rs = SimpleRowSetMake ( ctx, self -> first_id, self -> last_excl ) )
+            {
+                return & it -> dad;
+            }
+
+            MemFree ( ctx, it, sizeof * it );
+        }
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/sort-defs.h b/tools/sra-sort/sort-defs.h
new file mode 100644
index 0000000..329143d
--- /dev/null
+++ b/tools/sra-sort/sort-defs.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_defs_
+#define _h_sra_sort_defs_
+
+#ifndef _h_kfc_callconv_
+#include <kfc/callconv.h>
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <assert.h>
+
+/* prevent inclusion of <kfc/defs.h> */
+#define _h_kfc_defs_ 1
+
+
+/*--------------------------------------------------------------------------
+ * NAME_VERS
+ *  synthesize versioned type and message names
+ */
+#define NAME_VERS( name, maj_vers ) \
+    MAKE_NAME_VERS1 ( name, maj_vers )
+#define MAKE_NAME_VERS1( name, maj_vers ) \
+    MAKE_NAME_VERS2 ( name, maj_vers )
+#define MAKE_NAME_VERS2( name, maj_vers ) \
+    name ## _v ## maj_vers
+
+typedef uint32_t rc_t, ver_t;
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <assert.h>
+
+#if _DEBUGGING &&! defined SRA_SORT_CHECK_NULL_SELF
+#define SRA_SORT_CHECK_NULL_SELF 1
+#endif
+
+#define USE_OLD_KSORT 0
+
+
+/*--------------------------------------------------------------------------
+ * vdb-3 items missing from klib/defs.h
+ */
+typedef uint32_t caps_t;
+typedef struct ctx_t ctx_t;
+#define STRINGIZE( str ) # str
+#define STRINGIZE_DEFINE( def ) STRINGIZE ( def )
+
+
+/* POLY_DISPATCH
+ *  dispatch a polymorphic message
+ */
+#if  SRA_SORT_CHECK_NULL_SELF
+
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg );
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? null_self_error ( ctx, __LINE__, # msg ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), 0 ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), NULL ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#else
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+
+#endif
+
+#endif /* _h_sra_sort_defs_ */
diff --git a/tools/sra-sort/sorting-row-set.c b/tools/sra-sort/sorting-row-set.c
new file mode 100644
index 0000000..cb5493d
--- /dev/null
+++ b/tools/sra-sort/sorting-row-set.c
@@ -0,0 +1,405 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SortingRowSet SortingRowSet;
+#define ROWSET_IMPL SortingRowSet
+
+typedef struct SortingRowSetIterator SortingRowSetIterator;
+#define ROWSET_ITER_IMPL SortingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( sorting-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct SortingRowSetIterator
+{
+    RowSetIterator dad;
+
+    /* base row-id */
+    int64_t row_id;
+
+    /* last row-id + 1 */
+    int64_t last_excl;
+
+    /* takes its input from new=>old index */
+    const MapFile *idx;
+
+    /* working data within map */
+    int64_t *src_ids;
+    uint32_t *new_ord;
+    size_t max_elems;
+    size_t num_elems;
+
+    /* if true, use setting for large-columns */
+    bool large;
+
+    /* if true, no need to regenerate new_ord */
+    bool new_ord_valid;
+};
+
+/*--------------------------------------------------------------------------
+ * SortingRowSet
+ *  implementation of RowSet based upon auto-generated id pairs
+ */
+struct SortingRowSet
+{
+    RowSet dad;
+
+    /* keep-alive reference */
+    SortingRowSetIterator *iter;
+
+    /* working data within map */
+    int64_t *src_ids;
+    size_t num_elems;
+    size_t cur_elem;
+};
+
+static
+void SortingRowSetWhack ( SortingRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SortingRowSetNextStat ( SortingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* the starting row-id is taken from row-set-iterator
+       and offset by our current element counter */
+    int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+    /* limit id generation to request */
+    size_t i, to_set = self -> num_elems - self -> cur_elem;
+    if ( to_set > max_ids )
+        to_set = max_ids;
+
+    /* fill request with serial numbers
+       could just as easily be the same number
+       the important thing is to limit the count
+       and produce the correct range */
+    for ( i = 0; i < to_set; ++ i )
+        ids [ i ] = row_id + i;
+
+    /* advance counter */
+    self -> cur_elem += to_set;
+    return to_set;
+}
+
+static
+size_t SortingRowSetNextPhys ( SortingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* limit copy to request */
+    size_t to_copy = self -> num_elems - self -> cur_elem;
+    if ( to_copy > max_ids )
+        to_copy = max_ids;
+
+    /* copy out old-ids */
+    memmove ( ids, & self -> src_ids [ self -> cur_elem ], to_copy * sizeof ids [ 0 ] );
+
+    /* advance counter */
+    self -> cur_elem += to_copy;
+    return to_copy;
+}
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt SortingRowSetPhys_vt =
+{
+    SortingRowSetWhack,
+    SortingRowSetNextPhys,
+    SortingRowSetReset
+};
+
+static RowSet_vt SortingRowSetStat_vt =
+{
+    SortingRowSetWhack,
+    SortingRowSetNextStat,
+    SortingRowSetReset
+};
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & SortingRowSetStat_vt;
+    }
+    else
+    {
+        SortingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & SortingRowSetPhys_vt;
+
+        if ( iter -> new_ord_valid )
+        {
+            /* read new-ids from file, selecting old-ids within range */
+            STATUS ( 3, "selecting first %,zu ids from old=>new where new_id >= %,ld",
+                     iter -> max_elems, iter -> row_id );
+            iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+                iter -> row_id, iter -> src_ids, NULL, iter -> max_elems );
+        }
+        else
+        {
+            /* read new-ids from file, init new-ord, selecting old-ids within range */
+            STATUS ( 3, "selecting first %,zu ids, new_ord from old=>new where new_id >= %,ld",
+                     iter -> max_elems, iter -> row_id );
+            TRY ( iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+                      iter -> row_id, iter -> src_ids, iter -> new_ord, iter -> max_elems ) )
+            {
+                iter -> new_ord_valid = true;
+            }
+        }
+
+        if ( FAILED () )
+            return;
+
+        self -> num_elems = iter -> num_elems;
+        STATUS ( 3, "selected %,zu ids", self -> num_elems );
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ *  interface to iterate RowSets
+ */
+
+static
+void SortingRowSetIteratorWhack ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> src_ids != NULL )
+        MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+    if ( self -> new_ord != NULL )
+        MemFree ( ctx, self -> new_ord, sizeof self -> new_ord [ 0 ] * self -> max_elems );
+
+    MapFileRelease ( self -> idx, ctx );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *SortingRowSetIteratorMakeTheRowSet ( SortingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    FUNC_ENTRY ( ctx );
+
+    SortingRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            rs -> src_ids = self -> src_ids;
+            rs -> iter = ( SortingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+            rs -> num_elems = self -> num_elems;
+            rs -> cur_elem = 0;
+            return & rs -> dad;
+        }
+
+        MemFree ( ctx, rs, sizeof * rs );
+    }
+
+    return NULL;
+ }
+
+static
+struct IdxMapping *SortingRowSetIteratorGetIdxMapping ( SortingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetIdxMapping ON SORTING ROWSET ITERATOR" );
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+int64_t *SortingRowSetIteratorGetSourceIds ( SortingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( opt_ord != NULL )
+        * opt_ord = self -> new_ord;
+
+    if ( self -> src_ids == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+        ERROR ( rc, "source id array is NULL" );
+        if ( num_items != NULL )
+            * num_items = 0;
+        return NULL;
+    }
+
+    if ( num_items != NULL )
+        * num_items = self -> num_elems;
+    return self -> src_ids;
+}
+
+static
+void SortingRowSetIteratorAllocMap ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* determine the maximum number of elements */
+    const Tool *tp = ctx -> caps -> tool;
+    uint64_t count = self -> last_excl - self -> row_id;
+    self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+    if ( ( uint64_t ) self -> max_elems > count )
+        self -> max_elems = ( size_t ) count;
+
+    /* try to allocate the memory
+       this may be limited by the MemBank */
+    do
+    {
+        CLEAR ();
+
+        TRY ( self -> src_ids = MemAlloc ( ctx, sizeof self -> src_ids [ 0 ] * self -> max_elems, false ) )
+        {
+            TRY ( self -> new_ord = MemAlloc ( ctx, sizeof self -> new_ord [ 0 ] * self -> max_elems, false ) )
+            {
+                STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+                return;
+            }
+
+            MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+            self -> src_ids = NULL;
+        }
+
+        self -> max_elems >>= 1;
+    }
+    while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+    ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *SortingRowSetIteratorNext ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    RowSet *rs = NULL;
+
+    /* on first invocation, allocate the map */
+    if ( self -> src_ids == NULL )
+    {
+        ON_FAIL ( SortingRowSetIteratorAllocMap ( self, ctx ) )
+            return NULL;
+
+        assert ( self -> src_ids != NULL );
+        assert ( self -> new_ord != NULL );
+    }
+
+    /* advance row_id */
+    self -> row_id += self -> num_elems;
+    self -> num_elems = 0;
+    self -> new_ord_valid = false;
+
+    /* create the empty row-set */
+    if ( self -> row_id < self -> last_excl )
+        rs = SortingRowSetIteratorMakeTheRowSet ( self, ctx, & SortingRowSetPhys_vt );
+
+    return rs;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt SortingRowSetIterator_vt =
+{
+    SortingRowSetIteratorWhack,
+    SortingRowSetIteratorGetIdxMapping,
+    SortingRowSetIteratorGetSourceIds,
+    SortingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeSortingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    SortingRowSetIterator *rsi;
+
+    /* create the iterator */
+    TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+    {
+        TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & SortingRowSetIterator_vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+            {
+                TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+                {
+                    TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+                    {
+                        rsi -> large = large;
+                        return & rsi -> dad;
+                    }
+                }
+            }
+        }
+
+        MemFree ( ctx, rsi, sizeof * rsi );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/sra-sort.c b/tools/sra-sort/sra-sort.c
new file mode 100644
index 0000000..4845f86
--- /dev/null
+++ b/tools/sra-sort/sra-sort.c
@@ -0,0 +1,746 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <strtol.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+
+FILE_ENTRY ( sra-sort );
+
+
+/* this goes away in vdb-3 */
+const char UsageDefaultName [] = "sra-sort";
+
+rc_t CC UsageSummary ( const char *prog_name )
+{
+    return KOutMsg ( "Usage: %s [options] src-object dst-object\n"
+                     "       %s [options] src-object [src-object...] dst-dir\n"
+                     "\n"
+                     , prog_name
+                     , prog_name
+        );
+}
+
+#define OPT_IGNORE_FAILURE "ignore-failure"
+#define OPT_FORCE "force"
+#define OPT_MEM_LIMIT "mem-limit"
+#define OPT_MAP_FILE_BSIZE "map-file-bsize"
+#define OPT_MAX_IDX_IDS "max-idx-ids"
+#define OPT_MAX_REF_IDX_IDS "max-ref-idx-ids"
+#define OPT_MAX_LARGE_IDX_IDS "max-large-idx-ids"
+#define OPT_TEMP_DIR "tempdir"
+#define OPT_MMAP_DIR "mmapdir"
+#define OPT_UNSORTED_OLD_NEW "unsorted-old-new"
+
+#define OPT_COLUMN_MD5 "column-md5"
+#define OPT_NO_COLUMN_CHECKSUM "no-column-checksum"
+
+#define OPT_BLOB_CRC32 "blob-crc32"
+#define OPT_BLOB_MD5 "blob-md5"
+#define OPT_NO_BLOB_CHECKSUM "no-blob-checksum"
+
+#define OPT_KEEP_IDX_FILES "keep-idx-files"
+#define OPT_IDX_CONSISTENCY_CHECK "idx-cc"
+
+static const char *hlp_ignore_failure [] = { "ignore failure when sorting multiple objects",
+                                             "i.e. continue in spite of previous errors", NULL };
+static const char *hlp_force [] = { "force overwrite of existing destination", NULL };
+static const char *hlp_mem_limit [] = { "sets limit on dynamic memory usage", NULL };
+static const char *hlp_map_file_bsize [] = { "sets id map-file cache size", NULL };
+static const char *hlp_max_idx_ids [] = { "sets number of join-index ids to process at a time", NULL };
+static const char *hlp_max_ref_idx_ids [] = { "sets number of join-index ids to process within REFERENCE table", NULL };
+static const char *hlp_max_large_idx_ids [] = { "sets number of rows to process with large columns", NULL };
+static const char *hlp_temp_dir [] = { "sets a specific directory to use for temporary files", NULL };
+static const char *hlp_mmap_dir [] = { "sets a specific directory to use for memory-mapped buffers", NULL };
+static const char *hlp_unsorted_old_new [] = { "write old=>new index in unsorted order", NULL };
+
+static const char *hlp_column_md5 [] = { "generate md5sum compatible checksum files for each column [default]", NULL };
+static const char *hlp_no_column_checksum [] = { "disable generation of column checksums", NULL };
+
+static const char *hlp_blob_crc32 [] = { "generate CRC32 checksums for each blob [default]", NULL };
+static const char *hlp_blob_md5 [] = { "generate MD5 checksums for each blob", NULL };
+static const char *hlp_no_blob_checksum [] = { "disable generation of blob checksums", NULL };
+
+#if _DEBUGGING
+static const char *hlp_keep_idx_files [] = { "keep temporary index files for debugging", NULL };
+static const char *hlp_idx_consistency_check [] = { "run consistency check on index files", NULL };
+#endif
+
+static OptDef options [] =
+{
+    /* 1. long-name
+       2. list of single character short names
+       3. help-gen function
+       4. list of help strings, NULL terminated
+       5. max count
+       6. option requires value
+       7. option is required
+    */
+    { OPT_IGNORE_FAILURE, "i", NULL, hlp_ignore_failure, 1, false, false }
+  , { OPT_FORCE, "f", NULL, hlp_force, 1, false, false }
+  , { OPT_MEM_LIMIT, NULL, NULL, hlp_mem_limit, 1, true, false }
+  , { OPT_MAP_FILE_BSIZE, NULL, NULL, hlp_map_file_bsize, 1, true, false }
+  , { OPT_MAX_IDX_IDS, NULL, NULL, hlp_max_idx_ids, 1, true, false }
+  , { OPT_MAX_REF_IDX_IDS, NULL, NULL, hlp_max_ref_idx_ids, 1, true, false }
+  , { OPT_MAX_LARGE_IDX_IDS, NULL, NULL, hlp_max_large_idx_ids, 1, true, false }
+  , { OPT_TEMP_DIR, NULL, NULL, hlp_temp_dir, 1, true, false }
+  , { OPT_MMAP_DIR, NULL, NULL, hlp_mmap_dir, 1, true, false }
+  , { OPT_UNSORTED_OLD_NEW, NULL, NULL, hlp_unsorted_old_new, 1, false, false }
+
+  , { OPT_COLUMN_MD5, NULL, NULL, hlp_column_md5, 1, false, false }
+  , { OPT_NO_COLUMN_CHECKSUM, NULL, NULL, hlp_no_column_checksum, 1, false, false }
+  , { OPT_BLOB_CRC32, NULL, NULL, hlp_blob_crc32, 1, false, false }
+  , { OPT_BLOB_MD5, NULL, NULL, hlp_blob_md5, 1, false, false }
+  , { OPT_NO_BLOB_CHECKSUM, NULL, NULL, hlp_no_blob_checksum, 1, false, false }
+#if _DEBUGGING
+  , { OPT_KEEP_IDX_FILES, NULL, NULL, hlp_keep_idx_files, 1, false, false }
+  , { OPT_IDX_CONSISTENCY_CHECK, NULL, NULL, hlp_idx_consistency_check, 1, false, false }
+#endif
+};
+
+static const char *option_params [] =
+{
+    NULL
+  , NULL
+  , "bytes"
+  , "cache-size"
+  , "num-ids"
+  , "num-ids"
+  , "num-ids"
+  , "path-to-tmp"
+  , "path-to-mmaps"
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+#if _DEBUGGING
+  , NULL
+  , NULL
+#endif
+};
+
+rc_t CC Usage ( const Args *args )
+{
+    uint32_t i;
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+    
+    UsageSummary ( progname );
+    
+    KOutMsg ( "Options:\n" );
+    
+    for ( i = 0; i < sizeof options / sizeof options [ 0 ]; ++ i )
+    {
+        HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+            option_params [ i ], options [ i ] . help );
+    }
+
+    HelpOptionsStandard ();
+    
+    HelpVersion ( fullpath, KAppVersion () );
+
+    return 0;
+}
+
+static
+const char *ArgsGetOptStr ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    const char *val = NULL;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+    {
+        rc = ArgsOptionValue ( self, optname, 0, (const void **)& val );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+    }
+
+    return val;
+}
+
+static
+uint64_t ArgsGetOptU64 ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    uint64_t val = 0;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+    {
+        const char *str;
+        rc = ArgsOptionValue ( self, optname, 0, (const void **)& str );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+        else
+        {
+            char *end;
+            val = strtou64 ( str, & end, 0 );
+            if ( end [ 0 ] != 0 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcIncorrect );
+                ERROR ( rc, "bad '%s' parameter: '%s'", optname, str );
+            }
+        }
+    }
+
+    return val;
+}
+
+static
+bool ArgsGetOptBool ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    bool val = false;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+        val = true;
+
+    return val;
+}
+
+static
+uint64_t KConfigGetNodeU64 ( const ctx_t *ctx, const char *path, bool *found )
+{
+    rc_t rc;
+    uint64_t val = 0;
+    const KConfigNode *n;
+
+    bool dummy;
+    if ( found == NULL )
+        found = & dummy;
+
+    rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/map_file_bsize" );
+    if ( rc == 0 )
+    {
+        char buff [ 256 ];
+        size_t num_read, remaining;
+
+        rc = KConfigNodeRead ( n, 0, buff, sizeof buff - 1, & num_read, & remaining );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read KConfig node '%s'", path );
+        else if ( remaining != 0 )
+        {
+            rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+            ERROR ( rc, "failed to read KConfig node '%s'", path );
+        }
+        else
+        {
+            char *end;
+            buff [ num_read ] = 0;
+            val = strtou64 ( buff, & end, 0 );
+            if ( end [ 0 ] != 0 )
+            {
+                rc = RC ( rcExe, rcNode, rcReading, rcNumeral, rcIncorrect );
+                ERROR ( rc, "bad '%s' config value: '%s'", path, buff );
+            }
+        }
+
+        KConfigNodeRelease ( n );
+    }
+
+    return val;
+}
+
+static
+void initialize_params ( const ctx_t *ctx, Caps *caps, Tool *tp, Selection *sel, Args *args )
+{
+    bool found=false;
+    uint64_t val;
+    uint32_t count;
+    const char *str;
+
+    int col_md5 = kcmMD5;
+
+    memset ( sel, 0, sizeof * sel );
+    memset ( tp, 0, sizeof * tp );
+    tp -> sel = sel;
+
+    /* default to host tmp */
+    tp -> tmpdir = "/tmp";
+
+    /* default to mmap dir */
+    tp -> mmapdir = NULL;
+
+    /* default buffer size for map cache */
+    tp -> map_file_bsize = 64 * 1024 * 1024;
+    tp -> map_file_random_bsize = tp -> map_file_bsize;
+
+    /* default max index ids to gather at a time */
+    tp -> max_ref_idx_ids = tp -> max_large_idx_ids = tp -> max_idx_ids = 256 * 1024 * 1024;
+    tp -> max_poslen_ids = 64 * 1024 * 1024;
+    tp -> min_idx_ids =  64 * 1024 * 1024;
+    tp -> max_missing_ids = tp -> max_idx_ids;
+
+#if 0
+    /* refpos cache size */
+    tp -> refpos_cache_capacity = 100 * 1024 * 1024;
+#endif
+
+    /* for creating mapping files */
+    tp -> pid = getpid ();
+
+    /* db create defaults */
+    tp -> db . cmode = kcmCreate;
+
+    /* tbl create defaults */
+    tp -> tbl . cmode = kcmCreate;
+
+    /* column create mode defaults */
+    tp -> col . pgsize = 1;
+    tp -> col . cmode = kcmInit;
+    tp -> col . checksum = kcsCRC32;
+
+    /* normally do not ignore failures */
+    tp -> ignore = false;
+
+    /* normally do not force overwrite */
+    tp -> force = false;
+
+    /* not needed under normal circumstances */
+    tp -> write_new_to_old = false;
+tp->write_new_to_old=true;
+
+    /* default is to sort on old */
+    tp -> sort_before_old2new = true;
+
+    /* when debugging, this can be turned off */
+    tp -> unlink_idx_files = true;
+    tp -> idx_consistency_check = false;
+
+
+    /* record them as caps */
+    caps -> tool = tp;
+
+    /* look in config */
+    /* TBD - COMPLETE THIS */
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_bsize", & found ) )
+        return;
+    if ( found )
+        tp -> map_file_bsize = tp -> map_file_random_bsize = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_random_bsize", & found ) )
+        return;
+    if ( found )
+        tp -> map_file_random_bsize = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_idx_ids", & found ) )
+        return;
+    if ( found )
+        tp -> max_idx_ids = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_ref_idx_ids", & found ) )
+        return;
+    if ( found )
+        tp -> max_ref_idx_ids = ( size_t ) val;
+
+    /* finally look in args */
+    ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_TEMP_DIR, & count ) )
+        return;
+    if ( count != 0 && str [ 0 ] != 0 )
+        tp -> tmpdir = str;
+
+    ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_MMAP_DIR, & count ) )
+        return;
+    if ( count != 0 && str [ 0 ] != 0 )
+        tp -> mmapdir = str;
+
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAP_FILE_BSIZE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> map_file_random_bsize = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_idx_ids = tp -> max_ref_idx_ids = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_REF_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_ref_idx_ids = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_LARGE_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_large_idx_ids = ( size_t ) val;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IGNORE_FAILURE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> ignore = true;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_FORCE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> force = true;
+   
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_UNSORTED_OLD_NEW, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> sort_before_old2new = false;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_COLUMN_MD5, & count ) )
+        return;
+    if ( count != 0 )
+        col_md5 = kcmMD5;
+    else
+    {
+        ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_COLUMN_CHECKSUM, & count ) )
+            return;
+        if ( count != 0 )
+            col_md5 = 0;
+    }
+
+    tp -> db . cmode |= col_md5;
+    tp -> tbl . cmode |= col_md5;
+    tp -> col . cmode |= col_md5;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_CRC32, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> col . checksum = kcsCRC32;
+    else
+    {
+        ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_MD5, & count ) )
+            return;
+        if ( count != 0 )
+            tp -> col . checksum = kcsMD5;
+        else
+        {
+            ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_BLOB_CHECKSUM, & count ) )
+                return;
+            if ( count != 0 )
+                tp -> col . checksum = kcsNone;
+        }
+    }
+
+#if _DEBUGGING
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_KEEP_IDX_FILES, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> unlink_idx_files = false;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IDX_CONSISTENCY_CHECK, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> idx_consistency_check = tp -> write_new_to_old = true;
+#endif
+}
+
+static
+void initialize_caps ( const ctx_t *ctx, Caps *caps, Args *args )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get specified limit */
+    uint32_t count;
+    size_t mem_limit = ( size_t ) ArgsGetOptU64 ( args, ctx, OPT_MEM_LIMIT, & count );
+    if ( ! FAILED () && count != 0 )
+    {
+        MemBank *mem;
+        TRY ( mem = MemBankMake ( ctx, mem_limit ) )
+        {
+            MemBankRelease ( caps -> mem, ctx );
+            caps -> mem = mem;
+        }
+    }
+
+    if ( ! FAILED () )
+    {
+        /* here's a chance to pick up special config */
+        /* TBD */
+
+        /* open up KConfig */
+        rc_t rc = KConfigMake ( ( KConfig** ) & caps -> cfg, NULL );
+        if ( rc != 0 )
+            ERROR ( rc, "KConfigMake failed" );
+    }
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    DECLARE_CTX_INFO ();
+
+    /* initialize context */
+    Caps caps;
+    ctx_t main_ctx = { & caps, NULL, & ctx_info };
+    const ctx_t *ctx = & main_ctx;
+    CapsInit ( & caps, NULL );
+
+    if ( argc <= 1 )
+        main_ctx . rc = UsageSummary ( "sra-sort" );
+    else
+    {
+        /* create MemBank with unlimited quota */
+        TRY ( caps . mem = MemBankMake (  ctx, -1 ) )
+        {
+            rc_t rc = VDBManagerMakeUpdate ( & caps . vdb, NULL );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to create VDBManager" );
+            else
+            {
+                rc = VDBManagerOpenKDBManagerUpdate ( caps . vdb, & caps . kdb );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to create KDBManager" );
+                else
+                {
+                    Args * args;
+                    rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+                        options, sizeof options / sizeof options [ 0 ] );
+                    if ( rc != 0 )
+                        ERROR ( rc, "failed to parse command line" );
+                    else
+                    {
+                        TRY ( initialize_caps ( ctx, & caps, args ) )
+                        {
+                            Tool tp;
+                            Selection sel;
+                            TRY ( initialize_params ( ctx, & caps, & tp, & sel, args ) )
+                            {
+                                uint32_t count;
+                                rc = ArgsParamCount ( args, & count );
+                                if ( rc != 0 )
+                                    ERROR ( rc, "ArgsParamCount failed" );
+                                else if ( count < 2 )
+                                {
+                                    rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+                                    ERROR ( rc, "expected source and destination parameters" );
+                                }
+                                else
+                                {
+                                    /* check type of last parameter */
+                                    const char *dst;
+                                    rc = ArgsParamValue ( args, count - 1, (const void **)& dst );
+                                    if ( rc != 0 )
+                                        ERROR ( rc, "ArgsParamValue [ %u ] failed", count - 1 );
+                                    else
+                                    {
+                                        enum RCTarget targ = rcNoTarg;
+
+                                        bool dst_is_dir = false;
+                                        int dst_type = KDBManagerPathType ( caps . kdb, "%s", dst ) & ~ kptAlias;
+                                        if ( dst_type == kptDir )
+                                            dst_is_dir = true;
+                                        else if ( count != 2 )
+                                        {
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "multiple source objects require last parameter to be a directory" );
+                                        }
+                                        else switch ( dst_type )
+                                        {
+                                        case kptNotFound:
+                                            tp . db . cmode |= kcmParents;
+                                            tp . tbl . cmode |= kcmParents;
+                                            break;
+                                        case kptFile:
+                                        case kptFile | kptAlias:
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "destination object is a file - remove first or rename before trying again" );
+                                            break;
+                                        case kptDatabase:
+                                            targ = rcDatabase;
+                                            break;
+                                        case kptTable:
+                                            targ = rcTable;
+                                            break;
+                                        case kptPrereleaseTbl:
+                                            dst_type = kptTable;
+                                            break;
+                                        default:
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "destination object type cannot be overwritten" );
+                                            break;
+                                        }
+
+                                        if ( ! FAILED () )
+                                        {
+                                            if ( dst_is_dir )
+                                            {
+                                                uint32_t i;
+                                                rc_t first_rc = 0;
+                                                bool issue_divider_line;
+
+                                                if ( tp . force )
+                                                {
+                                                    tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+                                                    tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+                                                }
+                                                
+                                                for ( issue_divider_line = false, i = 0; i < count - 1; issue_divider_line = true, ++ i )
+                                                {
+                                                    rc = ArgsParamValue ( args, i, (const void **)& tp . src_path );
+                                                    if ( rc != 0 )
+                                                        ERROR ( rc, "ArgParamValue [ %u ] failed", i );
+                                                    else
+                                                    {
+                                                        char dst_path [ 4096 ];
+                                                        const char *leaf = strrchr ( tp . src_path, '/' );
+                                                        if ( leaf ++ == NULL )
+                                                            leaf = tp . src_path;
+                                                        rc = string_printf ( dst_path, sizeof dst_path, NULL, "%s/%s", dst, leaf );
+                                                        if ( rc != 0 )
+                                                            ERROR ( rc, "string_printf on param [ %u ] failed", i );
+                                                        else
+                                                        {
+                                                            size_t size = string_size ( dst_path );
+                                                            char *ext = string_rchr ( dst_path, size, '.' );
+                                                            if ( ext != NULL )
+                                                            {
+                                                                size -= ext - dst_path;
+                                                                switch ( size )
+                                                                {
+                                                                case 4:
+                                                                    if ( strcase_cmp ( ext, 4, ".sra", 4, 4 ) == 0 )
+                                                                        * ext = 0;
+                                                                    break;
+                                                                case 5:
+                                                                    if ( strcase_cmp ( ext, 5, ".csra", 5, 5 ) == 0 )
+                                                                        * ext = 0;
+                                                                    break;
+                                                                }
+                                                            }
+
+                                                            if ( issue_divider_line )
+                                                                STATUS ( 1, "################################################################" );
+
+                                                            tp . dst_path = dst_path;
+                                                            ON_FAIL ( run ( ctx ) )
+                                                            {
+                                                                if ( ! tp . ignore )
+                                                                    break;
+
+                                                                if ( first_rc == 0 )
+                                                                    first_rc = ctx -> rc;
+
+                                                                CLEAR ();
+                                                            }
+                                                        }
+                                                    }
+                                                }
+
+                                                if ( first_rc != 0 )
+                                                    main_ctx . rc = first_rc;
+                                            }
+                                            else
+                                            {
+                                                tp . dst_path = dst;
+                                                rc = ArgsParamValue ( args, 0, (const void **)& tp . src_path );
+                                                if ( rc != 0 )
+                                                    ERROR ( rc, "ArgParamValue [ 0 ] failed" );
+                                                else
+                                                {
+                                                    int src_type;
+
+                                                    switch ( dst_type )
+                                                    {
+                                                    case kptDatabase:
+                                                    case kptTable:
+                                                        src_type = KDBManagerPathType ( caps . kdb, "%s", tp . src_path ) & ~ kptAlias;
+                                                        if ( src_type == kptPrereleaseTbl )
+                                                            src_type = kptTable;
+                                                        if ( src_type != dst_type )
+                                                        {
+                                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                                            ERROR ( rc, "source and destination object types are not compatible" );
+                                                        }
+                                                        else if ( ! tp . force )
+                                                        {
+                                                            rc = RC ( rcExe, targ, rcCopying, targ, rcExists );
+                                                            ERROR ( rc, "destination object cannot be overwritten - try again with '-f'" );
+                                                        }
+                                                        else
+                                                        {
+                                                            tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+                                                            tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+                                                        }
+                                                    }
+
+                                                    if ( ! FAILED () )
+                                                        run ( ctx );
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        ArgsWhack ( args );
+                    }
+                }
+            }
+
+            CapsWhack ( & caps, ctx );
+        }
+    }
+
+    return main_ctx . rc;
+}
diff --git a/tools/sra-sort/sra-sort.h b/tools/sra-sort/sra-sort.h
new file mode 100644
index 0000000..027d591
--- /dev/null
+++ b/tools/sra-sort/sra-sort.h
@@ -0,0 +1,171 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_
+#define _h_sra_sort_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifndef _h_kdb_column_
+#include <kdb/column.h>
+#endif
+
+
+#define NEW_TYPES 1
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * Selection
+ *  input selection criteria
+ */
+typedef struct Selection Selection;
+struct Selection
+{
+    int dummy;
+};
+
+/*--------------------------------------------------------------------------
+ * Tool
+ *  parameter block generated by KMain
+ */
+typedef struct Tool Tool;
+struct Tool
+{
+    /* input selection */
+    const Selection *sel;
+
+    /* directory for temporary files */
+    const char *tmpdir;
+
+    /* directory for mmap page files */
+    const char *mmapdir;
+
+    /* source object path */
+    const char *src_path;
+
+    /* destination object path */
+    const char *dst_path;
+
+    /* buffer size for id map files */
+    size_t map_file_bsize;
+    size_t map_file_random_bsize;
+
+    /* the number of ids to gather at a time */
+    size_t max_ref_idx_ids;
+    size_t max_large_idx_ids;
+    size_t max_poslen_ids;
+    size_t max_idx_ids;
+    size_t min_idx_ids;
+
+    /* the number of missing SEQUENCE ids to gather at a time */
+    size_t max_missing_ids;
+
+    /* pid of tool */
+    int pid;
+
+    /* db create mode */
+    struct
+    {
+        KCreateMode cmode;
+    } db;
+
+    /* tbl create mode */
+    struct
+    {
+        KCreateMode cmode;
+    } tbl;
+
+    /* column blob checksum mode */
+    struct
+    {
+        size_t pgsize;
+        KCreateMode cmode;
+        KChecksum checksum;
+    } col;
+
+    /* ignore failure on multiple sorts */
+    bool ignore;
+
+    /* force overwrite */
+    bool force;
+
+    /* write new=>old mappings
+       not normally needed */
+    bool write_new_to_old;
+
+    /* whether to apply a sort on old-id
+       before writing old=>new mapping or
+       to let pagefile handle it */
+    bool sort_before_old2new;
+
+    /* normally remove idx files right away
+       but if they are being debugged... */
+    bool unlink_idx_files;
+
+    /* perform consistency check on index */
+    bool idx_consistency_check;
+};
+
+
+/*--------------------------------------------------------------------------
+ * TypeParams
+ *  object type params
+ */
+typedef struct TypeParams TypeParams;
+struct TypeParams
+{
+    char src_type [ 256 ];
+    char dst_type [ 256 ];
+    char view_type [ 256 ];
+};
+
+
+/*--------------------------------------------------------------------------
+ * sra-sort functions
+ */
+
+/* run
+ *  called from KMain
+ *  determines the type of object being copied/sorted
+ *  opens input object
+ *  dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/status.h b/tools/sra-sort/status.h
new file mode 100644
index 0000000..6c88ead
--- /dev/null
+++ b/tools/sra-sort/status.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_status_
+#define _h_sra_sort_status_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * status generation
+ */
+
+
+/* STATUS
+ *  give feedback
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... );
+
+#undef STATUS
+#define STATUS( lvl, msg, ... ) \
+    Status ( ctx, __LINE__, lvl, msg, ## __VA_ARGS__ )
+
+
+#endif
diff --git a/tools/sra-sort/tbl-pair.c b/tools/sra-sort/tbl-pair.c
new file mode 100644
index 0000000..01e2a0a
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.c
@@ -0,0 +1,1055 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct TablePair StdTblPair;
+#define TBLPAIR_IMPL StdTblPair
+
+#include "tbl-pair.h"
+#include "col-pair.h"
+#include "db-pair.h"
+#include "meta-pair.h"
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( tbl-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdTblPair
+ *  generic database object pair
+ */
+
+static
+void StdTblPairWhack ( StdTblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    TablePairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdTblPairDummyStub ( StdTblPair *self, const ctx_t *ctx )
+{
+}
+
+static
+ColumnPair *StdTblPairMakeColumnPair ( StdTblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *StdTblPairGetRowSetIterator ( StdTblPair *self, const ctx_t *ctx, bool mapped, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeRowSetIterator ( self, ctx, NULL, mapped, large );
+}
+
+static TablePair_vt StdTblPair_vt =
+{
+    StdTblPairWhack,
+    StdTblPairDummyStub,
+    StdTblPairDummyStub,
+    StdTblPairMakeColumnPair,
+    StdTblPairDummyStub,
+    StdTblPairDummyStub,
+    StdTblPairGetRowSetIterator
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ *  interface code
+ */
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdTblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( tbl, ctx, & StdTblPair_vt, src, dst, name, opt_full_spec, reorder ) )
+        {
+            return tbl;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+TablePair *DbPairMakeStdTblPair ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMake ( ctx, src, dst, name, self -> full_spec, reorder );
+}
+
+
+/* Release
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "TablePair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcTable, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release TablePair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "TablePair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcTable, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate TablePair" );
+            return NULL;
+        }
+    }
+
+    return ( TablePair* ) self;
+}
+
+
+/* CommitColumnPair
+ */
+static
+bool CC TablePairCommitColumnPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    ColumnPair *col = item;
+    TRY ( ColumnWriterCommit ( col -> writer, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+
+/* ReleaseColumnPair
+ */
+static
+void CC TablePairReleaseColumnPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    ColumnPairRelease ( item, ctx );
+}
+
+
+/* Copy
+ *  the table has to obtain a RowSetIterator
+ *  which it walks vertically
+ *
+ *  for each RowSet, it walks its columns horizontally,
+ *  resetting it between columns
+ */
+static
+void TablePairCopyStaticColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy static columns */
+    uint32_t count = VectorLength ( & self -> static_cols );
+    if ( count != 0 )
+    {
+#if OLD_STATIC_WRITE
+        RowSetIterator *rsi;
+        TRY ( rsi = TablePairMakeRowSetIterator ( self, ctx, NULL, false ) )
+        {
+#endif
+            STATUS ( 2, "copying '%s' static columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+#if OLD_STATIC_WRITE
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+#endif
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> static_cols, i );
+                    assert ( col != NULL );
+#if OLD_STATIC_WRITE
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+#else
+                    ON_FAIL ( ColumnPairCopyStatic ( col, ctx, self -> first_id, self -> last_excl - self -> first_id ) )
+                        break;
+#endif
+                }
+
+#if OLD_STATIC_WRITE
+                RowSetRelease ( rs, ctx );
+#else
+                break;
+#endif
+            }
+
+#if OLD_STATIC_WRITE
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+#endif
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing static columns" );
+            VectorDoUntil ( & self -> static_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing static columns" );
+        VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyPresortColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy remaining columns */
+    uint32_t count = VectorLength ( & self -> presort_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        TRY ( rsi = TablePairMakeSimpleRowSetIterator ( self, ctx ) )
+        {
+            STATUS ( 2, "copying '%s' presorted columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> presort_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing presorted columns" );
+            VectorDoUntil ( & self -> presort_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing presorted columns" );
+        VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy mapped columns */
+    uint32_t count = VectorLength ( & self -> mapped_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = true;
+        const bool is_large = false;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' mapped columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> mapped_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing mapped columns" );
+            VectorDoUntil ( & self -> mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing mapped columns" );
+        VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyLargeColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy large columns */
+    uint32_t count = VectorLength ( & self -> large_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = false;
+        const bool is_large = true;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' large columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> large_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing large columns" );
+            VectorDoUntil ( & self -> large_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing large columns" );
+        VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyLargeMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy large mapped columns */
+    uint32_t count = VectorLength ( & self -> large_mapped_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = true;
+        const bool is_large = true;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' large mapped columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> large_mapped_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing large mapped columns" );
+            VectorDoUntil ( & self -> large_mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing large mapped columns" );
+        VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyNormalColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy remaining columns */
+    uint32_t count = VectorLength ( & self -> normal_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = false;
+        const bool is_large = false;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> normal_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing columns" );
+            VectorDoUntil ( & self -> normal_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing columns" );
+        VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+void TablePairCopy ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t in_use, quota;
+
+    /* copy columns */
+    
+
+    ON_FAIL ( TablePairExplode ( self, ctx ) )
+        return;
+
+    STATUS ( 2, "copying table '%s'", self -> full_spec );
+
+    in_use = MemInUse ( ctx, & quota );
+    if ( ( quota + 1 ) != 0 )
+        STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+    else
+        STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+    TRY ( TablePairPreCopy ( self, ctx ) )
+    {
+        TRY ( TablePairCopyStaticColumns ( self, ctx ) )
+        {
+            TRY ( TablePairCopyPresortColumns ( self, ctx ) )
+            {
+                TRY ( TablePairCopyMappedColumns ( self, ctx ) )
+                {
+                    TRY ( TablePairCopyLargeColumns ( self, ctx ) )
+                    {
+                        TRY ( TablePairCopyLargeMappedColumns ( self, ctx ) )
+                        {
+                            TablePairCopyNormalColumns ( self, ctx );
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /* cleanup */
+    if ( ! FAILED () )
+        TablePairPostCopy ( self, ctx );
+
+    in_use = MemInUse ( ctx, & quota );
+    if ( ( quota + 1 ) != 0 )
+        STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+    else
+        STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+    STATUS ( 2, "finished with table '%s'", self -> full_spec );
+}
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed columns
+ *  and create a proper pair of KMetadata
+ */
+static
+MetaPair *TablePairExplodeMetaPair ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    MetaPair *meta = NULL;
+    const KMetadata *smeta;
+
+    rc = VTableOpenMetadataRead ( self -> stbl, & smeta );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+    else
+    {
+        KMetadata *dmeta;
+        rc = VTableOpenMetadataUpdate ( self -> dtbl, & dmeta );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+        else
+        {
+            meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+            KMetadataRelease ( dmeta );
+        }
+        
+        KMetadataRelease ( smeta );
+    }
+
+    return meta;
+}
+
+static
+ColumnPair *TablePairMatchColumnPair ( TablePair *self, const ctx_t *ctx, const char *name, bool required )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *types;
+    ColumnPair *col = NULL;
+
+    rc = VTableListWritableDatatypes ( self -> dtbl, name, & types );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableListWritableDatatypes failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( types, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+        else
+        {
+            const VCursor *scurs;
+            rc = VTableCreateCursorRead ( self -> stbl, & scurs );
+            if ( rc != 0 )
+                ERROR ( rc, "VTableCreateCursorRead failed on 'src.%s'", self -> full_spec, name );
+            else
+            {
+                rc = VCursorPermitPostOpenAdd ( scurs );
+                if ( rc != 0 )
+                    ERROR ( rc, "VCursorPermitPostOpenAdd failed on 'src.%s'", self -> full_spec, name );
+                else
+                {
+                    rc = VCursorOpen ( scurs );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VCursorOpen failed with no contents on 'src.%s'", self -> full_spec, name );
+                    else
+                    {
+                        uint32_t i;
+                        for ( i = 0; i < count; ++ i )
+                        {
+                            uint32_t idx;
+                            char colspec [ 256 ];
+
+                            const char *td;
+                            rc = KNamelistGet ( types, i, & td );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s.%s' datatypes", i, self -> full_spec, name );
+                                break;
+                            }
+
+                            rc = string_printf ( colspec, sizeof colspec, NULL, "(%s)%s", td, name );
+                            if ( rc != 0 )
+                            {
+                                ABORT ( rc, "failed creating colspec for 'dst.%s.%s'", self -> full_spec, name );
+                                break;
+                            }
+
+                            rc = VCursorAddColumn ( scurs, & idx, "%s", colspec );
+                            if ( rc == 0 )
+                            {
+                                ColumnReader *reader;
+                                TRY ( reader = TablePairMakeColumnReader ( self, ctx, scurs, colspec, true ) )
+                                {
+                                    ColumnWriter *writer;
+                                    TRY ( writer = TablePairMakeColumnWriter ( self, ctx, NULL, colspec ) )
+                                    {
+                                        uint32_t j;
+                                        bool large = false;
+                                        bool is_static = VTableHasStaticColumn ( self -> stbl, name );
+                                        if ( is_static )
+                                        {
+                                            if ( self -> nonstatic_col_names != NULL )
+                                            {
+                                                for ( j = 0; self -> nonstatic_col_names [ j ] != NULL; ++ j )
+                                                {
+                                                    if ( strcmp ( name, self -> nonstatic_col_names [ j ] ) == 0 )
+                                                    {
+                                                        is_static = false;
+                                                        break;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                        else if ( self -> large_col_names != NULL )
+                                        {
+                                            for ( j = 0; self -> large_col_names [ j ] != NULL; ++ j )
+                                            {
+                                                if ( strcmp ( name, self -> large_col_names [ j ] ) == 0 )
+                                                {
+                                                    large = true;
+                                                    break;
+                                                }
+                                            }
+                                        }
+
+                                        /* at this point, if the column is static, then avoid
+                                           any rigorous treatment and create an otherwise normal
+                                           column pair. may want to special case it for reporting */
+                                        col = is_static
+                                            ? TablePairMakeStaticColumnPair ( self, ctx, reader, writer, colspec )
+                                            : ( * self -> vt -> make_column_pair ) ( ( TBLPAIR_IMPL* ) self, ctx, reader, writer, colspec, large );
+
+                                        ColumnWriterRelease ( writer, ctx );
+                                    }
+
+                                    ColumnReaderRelease ( reader, ctx );
+                                }
+                                break;
+                            }
+                        }
+
+                        if ( col == NULL && ! FAILED () )
+                            ANNOTATE ( "column '%s' cannot be written", name );
+                    }
+                }
+
+
+                VCursorRelease ( scurs );
+            }
+        }
+
+        KNamelistRelease ( types );
+    }
+
+    return col;
+}
+
+static
+void TablePairDefaultExplode ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *pnames;
+
+    /* look at the physical columns in source */
+    rc = VTableListPhysColumns ( self -> stbl, & pnames );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableListWritableColumns failed listing 'src.%s' physical columns", self -> full_spec );
+    else
+    {
+        KNamelist *dnames;
+
+        /* this gives us the columns that could potentially take input */
+        rc = VTableListSeededWritableColumns ( self -> dtbl, & dnames, pnames );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableListWritableColumns failed listing 'dst.%s' columns", self -> full_spec );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( dnames, & count );
+            if ( rc != 0 )
+                ERROR ( rc, "KNamelistCount failed listing 'dst.%s' columns", self -> full_spec );
+            else if ( count > 0 )
+            {
+                uint32_t i;
+                for ( i = 0; ! FAILED () && i < count; ++ i )
+                {
+                    ColumnPair *col;
+
+                    const char *name;
+                    rc = KNamelistGet ( dnames, i, & name );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s' columns", i, self -> full_spec );
+                        break;
+                    }
+
+                    /* filter out the column names that are specifically excluded */
+                    if ( self -> exclude_col_names != NULL )
+                    {
+                        uint32_t j;
+                        for ( j = 0; self -> exclude_col_names [ j ] != NULL; ++ j )
+                        {
+                            if ( strcmp ( name, self -> exclude_col_names [ j ] ) == 0 )
+                            {
+                                name = NULL;
+                                break;
+                            }
+                        }
+                        if ( name == NULL )
+                            continue;
+                    }
+
+                    TRY ( col = TablePairMatchColumnPair ( self, ctx, name, true ) )
+                    {
+                        if ( col != NULL )
+                        {
+                            ON_FAIL ( TablePairAddColumnPair ( self, ctx, col ) )
+                            {
+                                ColumnPairRelease ( col, ctx );
+                            }
+                        }
+                    }
+                }
+            }
+            
+            KNamelistRelease ( dnames );
+        }
+
+        KNamelistRelease ( pnames );
+    }
+}
+
+void TablePairExplode ( TablePair *self, const ctx_t *ctx )
+{
+    if ( ! self -> exploded )
+    {
+        FUNC_ENTRY ( ctx );
+
+        STATUS ( 2, "exploding table '%s'", self -> full_spec );
+
+        /* first, ask subclass to perform explicit explode */
+        TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+        {
+            if ( self -> meta == NULL )
+            {
+                TRY ( self -> meta = TablePairExplodeMetaPair ( self, ctx ) )
+                {
+                    MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+                    STATUS ( 3, "releasing metadata" );
+                    MetaPairRelease ( self -> meta, ctx );
+                    self -> meta = NULL;
+                }
+            }
+
+            if ( ! FAILED () )
+            {
+                /* next, perform default self-explode for all columns not excluded */
+                TRY ( TablePairDefaultExplode ( self, ctx ) )
+                {
+                    /* now create metadata pair */
+                    if ( self -> meta == NULL )
+                        self -> meta = TablePairExplodeMetaPair ( self, ctx );
+                    if ( ! FAILED () )
+                        self -> exploded = true;
+                }
+            }
+        }
+    }
+}
+
+
+/* AddColumnPair
+ *  called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, ColumnPair *col )
+{
+    if ( col != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+        Vector *v = & self -> normal_cols;
+
+        const char *col_type = "";
+        const char *col_size = "";
+
+        if ( col -> large )
+        {
+            col_size = "large ";
+            v = & self -> large_cols;
+        }
+
+        if ( col -> is_static )
+        {
+            col_type = "static ";
+            v = & self -> static_cols;
+        }
+        else if ( col -> presorted )
+        {
+            col_type = "presorted ";
+            v = & self -> presort_cols;
+        }
+        else if ( col -> is_mapped )
+        {
+            col_type = "mapped ";
+            v = col -> large ? & self -> large_mapped_cols : & self -> mapped_cols;
+        }
+
+        STATUS ( 4, "adding %s%scolumn pair '%s'", col_size, col_type, col -> full_spec );
+        rc = VectorAppend ( v, NULL, ( const void* ) col );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add column pair '%s'", col -> full_spec );
+        else
+        {
+            int64_t first;
+            uint64_t count;
+
+            TRY ( count = ColumnReaderIdRange ( col -> reader, ctx, & first ) )
+            {
+                int64_t last_excl = first + count;
+                if ( first < self -> first_id )
+                    self -> first_id = first;
+                /* Static columns may have incorrect range in legacy data */
+                if ( last_excl > self -> last_excl && !col->is_static)
+                    self -> last_excl = last_excl;
+            }
+        }
+    }
+}
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+    const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    VectorInit ( & self -> static_cols, 0, 32 );
+    VectorInit ( & self -> presort_cols, 0, 4 );
+    VectorInit ( & self -> large_cols, 0, 32 );
+    VectorInit ( & self -> mapped_cols, 0, 32 );
+    VectorInit ( & self -> large_mapped_cols, 0, 32 );
+    VectorInit ( & self -> normal_cols, 0, 32 );
+
+    if ( opt_full_spec == NULL )
+        opt_full_spec = "";
+
+    rc = VTableAddRef ( self -> stbl = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate tbl 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+    else
+    {
+        rc = VTableAddRef ( self -> dtbl = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate tbl 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+        else
+        {
+            char *full_spec;
+
+            self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+            if ( opt_full_spec [ 0 ] != 0  )
+                ++ self -> full_spec_size;
+
+            TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                if ( opt_full_spec [ 0 ] != 0 )
+                    rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+                else
+                    strcpy ( full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    const Tool *tp = ctx -> caps -> tool;
+
+                    self -> full_spec = full_spec;
+                    self -> name = full_spec;
+                    if ( opt_full_spec [ 0 ] != 0 )
+                        self -> name += string_size ( opt_full_spec ) + 1;
+
+                    /* start with an invalid range */
+                    self -> first_id = ( int64_t ) ( ~ ( uint64_t ) 0 >> 1 );
+                    self -> last_excl = - self -> first_id;
+
+                    /* row-set id ranges */
+                    self -> max_idx_ids = tp -> max_idx_ids;
+                    self -> min_idx_ids = tp -> min_idx_ids;
+
+                    /* record reordering */
+                    self -> reorder = reorder;
+
+                    KRefcountInit ( & self -> refcount, 1, "TablePair", "init", name );
+                    return;
+                }
+            }
+
+            VTableRelease ( self -> dtbl );
+            self -> dtbl = NULL;
+        }
+
+        VTableRelease ( self -> stbl );
+        self -> stbl = NULL;
+    }
+}
+
+/* Destroy
+ *  destroys superclass items
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+
+    MetaPairRelease ( self -> meta, ctx );
+
+    rc = VTableReindex ( self -> dtbl );
+    if ( rc != 0 )
+        WARN ( "VTableReindex failed on 'dst.%s'", self -> full_spec );
+    rc = VTableRelease ( self -> dtbl );
+    if ( rc != 0 )
+        WARN ( "VTableRelease failed on 'dst.%s'", self -> full_spec );
+    VTableRelease ( self -> stbl );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/tbl-pair.h b/tools/sra-sort/tbl-pair.h
new file mode 100644
index 0000000..4ee383e
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.h
@@ -0,0 +1,209 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_tbl_pair_
+#define _h_sra_sort_tbl_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+struct DbPair;
+struct ColumnReader;
+struct ColumnWriter;
+struct ColumnPair;
+struct MetaPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct TablePair_vt TablePair_vt;
+
+typedef struct TablePair TablePair;
+struct TablePair
+{
+    /* table id range */
+    int64_t first_id, last_excl;
+
+    /* polymorphic */
+    const TablePair_vt *vt;
+
+    /* the pair of VTables */
+    struct VTable const *stbl;
+    struct VTable *dtbl;
+
+    /* the pair of KMetadata */
+    struct MetaPair *meta;
+
+    /* the ColumnPairs */
+    Vector static_cols;
+    Vector presort_cols;
+    Vector large_cols;
+    Vector mapped_cols;
+    Vector large_mapped_cols;
+    Vector normal_cols;
+
+    /* filters */
+    const char **exclude_meta;
+    const char **exclude_col_names;
+    const char **mapped_col_names;
+    const char **nonstatic_col_names;
+    const char **large_col_names;
+
+    /* row-set id ranges */
+    size_t max_idx_ids;
+    size_t min_idx_ids;
+
+    /* simple table name */
+    const char *name;
+
+    /* full table spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+
+    /* true if table will be reordered */
+    bool reorder;
+
+    /* true if already exploded */
+    bool exploded;
+
+    uint8_t align [ 2 ];
+};
+
+#ifndef TBLPAIR_IMPL
+#define TBLPAIR_IMPL TablePair
+#endif
+
+struct TablePair_vt
+{
+    void ( * whack ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * pre_explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    struct ColumnPair* ( *make_column_pair ) ( TBLPAIR_IMPL *self, const ctx_t *ctx,
+        struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large );
+    void ( * pre_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    struct RowSetIterator* ( *get_rowset_iter ) ( TBLPAIR_IMPL *self,
+        const ctx_t *ctx, bool mapped, bool large );
+};
+
+
+/* Make
+ *  make a standard table pair from existing VTable objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst,
+    const char *name, const char *opt_full_spec, bool reorder );
+
+TablePair *DbPairMakeStdTblPair ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination table
+ */
+void TablePairCopy ( TablePair *self, const ctx_t *ctx );
+
+
+/* PreExplode
+ *  perform explosion before overall coopy
+ */
+#define TablePairPreExplode( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_explode, self, TBLPAIR_IMPL, ctx )
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed columns
+ *  and create a proper pair of KMetadata
+ */
+void TablePairExplode ( TablePair *self, const ctx_t *ctx );
+
+
+/* AddColumnPair
+ *  called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, struct ColumnPair *col );
+
+
+/* PreCopy
+ * PostCopy
+ *  give table a chance to prepare and cleanup
+ */
+#define TablePairPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, TBLPAIR_IMPL, ctx )
+#define TablePairPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, TBLPAIR_IMPL, ctx )
+
+
+/* GetRowSetIterator
+ *  returns an iterator for copying
+ */
+#define TablePairGetRowSetIterator( self, ctx, mapped, large ) \
+    POLY_DISPATCH_PTR ( get_rowset_iter, self, TBLPAIR_IMPL, ctx, mapped, large )
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+    struct VTable const *src, struct VTable *dst,
+    const char *name, const char *opt_full_spec, bool reorder );
+
+/* Destroy
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_tbl_pair_ */
diff --git a/tools/sra-sort/xcheck-ref-align.c b/tools/sra-sort/xcheck-ref-align.c
new file mode 100644
index 0000000..4a0288b
--- /dev/null
+++ b/tools/sra-sort/xcheck-ref-align.c
@@ -0,0 +1,411 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kapp/main.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kproc/thread.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+#if ! _DEBUGGING
+#define USE_BGTHREAD 1
+#endif
+
+FILE_ENTRY ( xcheck-ref-align );
+
+
+/*--------------------------------------------------------------------------
+ * TestReferenceCell
+ *  properly sorted tables will allow both columns to be walked.
+ *  each row of the REFERENCE table column MUST contain zero or more
+ *  sequential integers, and the first integer MUST continue the sequence
+ *  established by previous rows. therefore, the row will be fully specified
+ *  by a start and stop id pair.
+ */
+static
+int64_t TestReferenceCell ( const ctx_t *ctx,
+    const VCursor *ref_curs, uint32_t align_ids_idx,
+    const char *align_name, int64_t ref_row_id, int64_t excl_ref_last_idx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const int64_t *cell;
+    uint32_t elem_bits, boff, row_len;
+
+    rc_t rc = VCursorCellDataDirect ( ref_curs, ref_row_id, align_ids_idx,
+        & elem_bits, ( const void** ) & cell, & boff, & row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from REFERENCE cursor", ref_row_id );
+    else if ( elem_bits != sizeof * cell * 8 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from REFERENCE cursor", elem_bits, ref_row_id );
+    }
+    else if ( boff != 0 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from REFERENCE cursor", boff, ref_row_id );
+    }
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( cell [ i ] != excl_ref_last_idx + i )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+                ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+                        align_name, ref_row_id, excl_ref_last_idx + i, cell [ i ] );
+                break;
+            }
+        }
+
+        excl_ref_last_idx += row_len;
+    }
+
+    return excl_ref_last_idx;
+}
+
+static
+void TestAlignCell ( const ctx_t *ctx,
+    const VCursor *align_curs, uint32_t ref_id_idx,
+    const char *align_name, int64_t align_row_id, int64_t ref_row_id )
+{
+    FUNC_ENTRY ( ctx );
+
+    const int64_t *cell;
+    uint32_t elem_bits, boff, row_len;
+
+
+    rc_t rc = VCursorCellDataDirect ( align_curs, align_row_id, ref_id_idx,
+        & elem_bits, ( const void** ) & cell, & boff, & row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from %s cursor", align_row_id, align_name );
+    else if ( elem_bits != sizeof * cell * 8 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from %s cursor", elem_bits, align_row_id, align_name );
+    }
+    else if ( boff != 0 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from %s cursor", boff, align_row_id, align_name );
+    }
+    else if ( row_len != 1 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - row_len of %u reading row %ld from %s cursor", row_len, align_row_id, align_name );
+    }
+    else if ( * cell != ref_row_id )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+        ERROR ( rc, "%s.REF_ID.%ld: expected id %ld but found %ld",
+                align_name, align_row_id, ref_row_id, cell [ 0 ] );
+    }
+}
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCols
+ *  performs the cross-check
+ */
+static
+void CrossCheckRefAlignCols ( const ctx_t *ctx,
+    const VCursor *ref_curs, uint32_t align_ids_idx,
+    const VCursor *align_curs, uint32_t ref_id_idx, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    int64_t ref_row_id, excl_ref_last_id;
+    rc_t rc = VCursorIdRange ( ref_curs, 0, & ref_row_id, ( uint64_t* ) & excl_ref_last_id );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on REFERENCE cursor" );
+    else
+    {
+        int64_t align_row_id, excl_align_last_id;
+
+        excl_ref_last_id += ref_row_id;
+
+        rc = VCursorIdRange ( align_curs, 0, & align_row_id, ( uint64_t* ) & excl_align_last_id );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on %s cursor", align_name );
+        else
+        {
+            int64_t excl_last_align_idx;
+
+            excl_align_last_id += align_row_id;
+
+            for ( excl_last_align_idx = 1; ref_row_id < excl_ref_last_id; ++ ref_row_id )
+            {
+                int64_t first_align_idx = excl_last_align_idx;
+
+                /* rule for bailing out */
+                rc = Quitting ();
+                if ( rc != 0 || FAILED () )
+                    break;
+
+                /* the REFERENCE id cell should be filled purely with sequential ids */
+                TRY ( excl_last_align_idx = TestReferenceCell ( ctx, ref_curs, align_ids_idx,
+                          align_name, ref_row_id, excl_last_align_idx ) )
+                {
+                    /* the ids must be within the range of the alignment table */
+                    if ( excl_last_align_idx > excl_align_last_id )
+                    {
+                        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcExcessive );
+                        ERROR ( rc, "REFERENCE.%s_IDS.%ld: references non-existant rows ( %ld .. %ld : max %ld )",
+                                align_name, ref_row_id, first_align_idx, excl_last_align_idx, excl_align_last_id );
+                        break;
+                    }
+
+                    /* this is more of a permanent assert */
+                    if ( first_align_idx != align_row_id )
+                    {
+                        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+                        ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+                                align_name, ref_row_id, first_align_idx, align_row_id );
+                        break;
+                    }
+
+                    /* each of the rows in alignment table must point back
+                       to the same row in the REFERENCE table */
+                    for ( ; align_row_id < excl_last_align_idx; ++ align_row_id )
+                    {
+                        ON_FAIL ( TestAlignCell ( ctx, align_curs, ref_id_idx,
+                                      align_name, align_row_id, ref_row_id ) )
+                            break;
+                    }
+                }
+            }
+
+            /* at this point, we must have seen every record */
+            if ( ! FAILED () )
+            {
+                if ( ref_row_id != excl_ref_last_id )
+                {
+                    rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+                    ERROR ( rc, "REFERENCE.%s_IDS: scan stopped on row %ld of %ld",
+                            align_name, ref_row_id, excl_ref_last_id );
+                }
+                if ( align_row_id != excl_align_last_id )
+                {
+                    rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+                    ERROR ( rc, "%s.REF_ID: scan stopped on row %ld of %ld",
+                            align_name, align_row_id, excl_align_last_id );
+                }
+            }
+        }
+    }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCurs
+ *  adds columns and opens cursors
+ */
+static
+void CrossCheckRefAlignCurs ( const ctx_t *ctx,
+    const VCursor *ref_curs, const VCursor *align_curs, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t align_ids_idx;
+    rc_t rc = VCursorAddColumn ( ref_curs, & align_ids_idx, "%s_IDS", align_name );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column '%s_IDS' to REFERENCE cursor", align_name );
+    else
+    {
+        uint32_t ref_id_idx;
+        rc = VCursorAddColumn ( align_curs, & ref_id_idx, "REF_ID" );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column 'REF_ID' to %s cursor", align_name );
+        else
+        {
+            rc = VCursorOpen ( ref_curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on REFERENCE table" );
+            else
+            {
+                rc = VCursorOpen ( align_curs );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on %s table", align_name );
+                else
+                {
+                    rc = VCursorSetRowId ( ref_curs, 1 );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on REFERENCE cursor" );
+                    else
+                    {
+                        rc = VCursorSetRowId ( align_curs, 1 );
+                        if ( rc != 0 )
+                            INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on %s cursor", align_name );
+                        else
+                        {
+                            CrossCheckRefAlignCols ( ctx, ref_curs, align_ids_idx, align_curs, ref_id_idx, align_name );
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ *  checks REFERENCE.<name>_IDS for properly sorted form
+ *  runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+static
+void CrossCheckRefAlignTblInt ( const ctx_t *ctx,
+    const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VCursor *ref_curs;
+
+    rc = VTableCreateCursorRead ( ref_tbl, & ref_curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on REFERENCE table" );
+    else
+    {
+        const VCursor *align_curs;
+        rc = VTableCreateCursorRead ( align_tbl, & align_curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on %s table", align_name );
+        else
+        {
+            rc = VCursorLinkedCursorSet(align_curs,"REFERENCE",ref_curs);
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorLinkedCursorSet - failed to link cursor on REFERENCE table" );
+            else
+            {
+                CrossCheckRefAlignCurs ( ctx, ref_curs, align_curs, align_name );
+            }
+
+            VCursorRelease ( align_curs );
+        }
+
+        VCursorRelease ( ref_curs );
+    }
+}
+
+#if USE_BGTHREAD
+
+typedef struct CrossCheckRefAlignTblData CrossCheckRefAlignTblData;
+struct CrossCheckRefAlignTblData
+{
+    Caps caps;
+    const VTable *ref_tbl, *align_tbl;
+    char align_name [ 1 ];
+};
+
+static
+rc_t CC CrossCheckRefAlignTblRun ( const KThread *self, void *data )
+{
+    CrossCheckRefAlignTblData *pb = data;
+
+    DECLARE_CTX_INFO ();
+    ctx_t thread_ctx = { & pb -> caps, NULL, & ctx_info };
+    const ctx_t *ctx = & thread_ctx;
+
+    STATUS ( 2, "running consistency-check on background thread" );
+
+    CrossCheckRefAlignTblInt ( ctx, pb -> ref_tbl, pb -> align_tbl, pb -> align_name );
+
+    STATUS ( 2, "finished consistency-check on background thread" );
+
+    VTableRelease ( pb -> align_tbl );
+    VTableRelease ( pb -> ref_tbl );
+    CapsWhack ( & pb -> caps, ctx );
+
+    return ctx -> rc;
+}
+
+#endif
+
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+    const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+#if USE_BGTHREAD
+    size_t name_len;
+    CrossCheckRefAlignTblData *pb;
+#endif
+
+    STATUS ( 2, "consistency-check on join indices between REFERENCE and %s tables", align_name );
+
+#if USE_BGTHREAD
+    name_len = strlen ( align_name );
+    TRY ( pb = MemAlloc ( ctx, sizeof * pb + name_len, false ) )
+    {
+        TRY ( CapsInit ( & pb -> caps, ctx ) )
+        {
+            rc_t rc = VTableAddRef ( pb -> ref_tbl = ref_tbl );
+            if ( rc != 0 )
+                ERROR ( rc, "VTableAddRef failed on REFERENCE table" );
+            else
+            {
+                rc = VTableAddRef ( pb -> align_tbl = align_tbl );
+                if ( rc != 0 )
+                    ERROR ( rc, "VTableAddRef failed on %s table", align_name );
+                else
+                {
+                    KThread *t;
+
+                    strcpy ( pb -> align_name, align_name );
+
+                    rc = KThreadMake ( & t, CrossCheckRefAlignTblRun, pb );
+                    if ( rc == 0 )
+                    {
+                        return;
+                    }
+
+                    VTableRelease ( pb -> align_tbl );
+                }
+
+                VTableRelease ( pb -> ref_tbl );
+            }
+
+            CapsWhack ( & pb -> caps, ctx );
+        }
+
+        MemFree ( ctx, pb, sizeof * pb + name_len );
+    }
+#else
+    CrossCheckRefAlignTblInt ( ctx, ref_tbl, align_tbl, align_name );
+#endif
+}
diff --git a/tools/sra-sort/xcheck.h b/tools/sra-sort/xcheck.h
new file mode 100644
index 0000000..adf44c5
--- /dev/null
+++ b/tools/sra-sort/xcheck.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_xcheck_
+#define _h_sra_sort_xcheck_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ *  checks REFERENCE.<name>_IDS for properly sorted form
+ *  runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+    struct VTable const *ref_tbl, struct VTable const *align_tbl, const char *align_name );
+
+#endif
diff --git a/tools/sra-stat/Makefile b/tools/sra-stat/Makefile
new file mode 100644
index 0000000..65cceea
--- /dev/null
+++ b/tools/sra-stat/Makefile
@@ -0,0 +1,80 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra-stat
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	sra-stat \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-stat
+#  sra statistics
+#
+SRASTAT_SRC = \
+	sra \
+	sra-stat \
+
+SRASTAT_OBJ = \
+	$(addsuffix .$(OBJX),$(SRASTAT_SRC))
+
+SRASTAT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-sload \
+	-lm \
+
+$(BINDIR)/sra-stat: $(SRASTAT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRASTAT_LIB)
+
diff --git a/tools/sra-stat/sra-stat.c b/tools/sra-stat/sra-stat.c
new file mode 100644
index 0000000..5ff70d6
--- /dev/null
+++ b/tools/sra-stat/sra-stat.c
@@ -0,0 +1,3634 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "sra-stat.h" /* VTableMakeSingleFileArchive_ */
+
+#include <insdc/sra.h> /* SRA_READ_TYPE_BIOLOGICAL */
+
+#include <kapp/log-xml.h> /* XMLLogger */
+#include <kapp/main.h>
+#include <kapp/progressbar.h> /* KLoadProgressbar */
+
+#include <kdb/database.h> /* KDatabase */
+#include <kdb/kdb-priv.h>
+#include <kdb/manager.h> /* KDBManager */
+#include <kdb/meta.h> /* KMetadata */
+#include <kdb/namelist.h> /* KMDataNodeListChild */
+#include <kdb/table.h>
+
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+
+#include <klib/checksum.h>
+#include <klib/container.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/log.h> /* LOGERR */
+#include <klib/namelist.h>
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/sort.h> /* ksort */
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+
+#include <vdb/cursor.h> /* VCursor */
+#include <vdb/database.h> /* VDatabaseRelease */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/schema.h> /* VSchema */
+#include <vdb/table.h> /* VTableRelease */
+#include <vdb/vdb-priv.h> /* VDBManagerGetKDBManagerRead */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/path.h> /* VPath */
+#include <vfs/resolver.h> /* VResolver */
+
+#include <os-native.h> /* strtok_r on Windows */
+
+#include <assert.h>
+#include <math.h> /* sqrt */
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+/* #include <stdio.h> */ /* stderr */
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt, rc, \
+        "$(name): $(msg)", "name=%s,msg=%s", name, msg)))
+
+#define DISP_RC_Read(rc, name, spot, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt, rc, "column $(name), spot $(spot): $(msg)", \
+        "name=%s,spot=%lu,msg=%s", name, spot, msg)))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+#define MAX_NREADS 2*1024
+
+#define DEFAULT_CURSOR_CAPACITY (1024*1024*1024UL)
+
+/********** _XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+static
+rc_t CC _XMLLogger_Encode(const char* src,
+    char* aDst, size_t dst_sz, size_t *num_writ)
+{
+    rc_t rc = 0;
+    size_t bytes;
+    const char* p;
+    char* dst = aDst;
+
+    assert(src != NULL && num_writ != NULL);
+
+    *num_writ = 0;
+    if( *src == '\0' ) {
+        *dst = *src;
+    } else {
+        do {
+            switch(*src) {
+                case '\'':
+                    bytes = 6;
+                    p = "'";
+                    break;
+                case '"':
+                    bytes = 6;
+                    p = """;
+                    break;
+                case '&':
+                    bytes = 5;
+                    p = "&";
+                    break;
+                case '<':
+                    bytes = 4;
+                    p = "<";
+                    break;
+                case '>':
+                    bytes = 4;
+                    p = ">";
+                    break;
+                default:
+                    bytes = 1;
+                    p = src;
+                    break;
+            }
+            if( (*num_writ + bytes) > dst_sz ) {
+                rc = RC(rcExe, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+            } else {
+                memmove(dst, p, bytes);
+                *num_writ = *num_writ + bytes;
+                dst += bytes;
+            }
+        } while(rc == 0 && *++src != '\0');
+        if (rc == 0 && *src == '\0' && ((*num_writ + bytes) <= dst_sz)) {
+            *dst = *src;
+        }
+    }
+    return rc;
+}
+
+/*********** XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+typedef struct BAM_HEADER_RG { /* @RG: Read group. */
+    char* ID; /* Read group identifier. */
+    char* LB; /* Library. */
+    char* SM; /* Sample. */
+} BAM_HEADER_RG;
+static
+rc_t BAM_HEADER_RG_copy(BAM_HEADER_RG* dest, const BAM_HEADER_RG* src)
+{
+    assert(dest && !dest->ID && !dest->LB && !dest->SM
+        && src  &&  src ->ID &&  src ->LB &&  src ->SM);
+
+    dest->ID = strdup(src->ID);
+    dest->LB = strdup(src->LB);
+    dest->SM = strdup(src->SM);
+
+    if (!dest->ID || !dest->LB || !dest->SM) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    return 0;
+}
+
+static void BAM_HEADER_RG_free(BAM_HEADER_RG* rg) {
+    assert(rg);
+
+    free(rg->ID);
+    free(rg->LB);
+    free(rg->SM);
+
+    rg->ID = rg->LB = rg->SM = NULL;
+}
+
+static void BAM_HEADER_RG_print_xml(const BAM_HEADER_RG* rg) {
+    rc_t rc = 0;
+    char library[1024] = "";
+    char sample[1024] = "";
+    char* l = library;
+    char* s = sample;
+    size_t num_writ = 0;
+
+    assert(rg);
+
+    if (rg->LB) {
+        rc = _XMLLogger_Encode(rg->LB, library, sizeof library, &num_writ);
+        if (rc != 0) {
+            l = rg->LB;
+            PLOGMSG(klogWarn, (klogWarn, "Library value is too long: "
+                "XML-safe conversion was disabled for @RG\tID:$(ID)\tLB:$(LB)"
+                "ID=%s,LB=%s", rg->ID, rg->LB));
+        }
+
+        OUTMSG((" library=\"%s\"", l ? l : ""));
+    }
+
+    if (rg->SM) {
+        rc = _XMLLogger_Encode(rg->SM, sample, sizeof sample, &num_writ);
+        if (rc != 0) {
+            s = rg->SM;
+            PLOGMSG(klogWarn, (klogWarn, "Sample value is too long: "
+                "XML-safe conversion was disabled for @RG\tID:$(ID)\tSM:$(SM)"
+                "ID=%s,SM=%s", rg->ID, rg->SM));
+        }
+
+        OUTMSG((" sample=\"%s\"" , s ? s : ""));
+    }
+}
+
+typedef struct SraStats {
+    BSTNode n;
+    char     spot_group[1024]; /* SPOT_GROUP Column */
+    uint64_t spot_count; /*** spot count ***/
+    uint64_t spot_count_mates; /*** spots with mates ***/
+    uint64_t bio_len; /** biological len (BIO_BASE_COUNT) **/
+    uint64_t bio_len_mates; /** biological len when mates are present**/
+    uint64_t total_len; /** total len (BASE_COUNT) **/
+    uint64_t bad_spot_count; /** number of spots flagged with rd_filter=2 **/
+    uint64_t bad_bio_len;        /** biological length of bad spots ***/
+    uint64_t filtered_spot_count; /* number of spots flagged with rd_filter=2 */
+    uint64_t filtered_bio_len;   /** biological length of filtered spots **/
+    uint64_t total_cmp_len; /* CMP_READ : compressed */
+    BAM_HEADER_RG BAM_HEADER;
+} SraStats;
+typedef struct Statistics {  /* READ_LEN columnn */
+    /* average READ_LEN value */
+    /* READ_LEN standard deviation. Is calculated just when requested. */
+    /* running (continuous) standard deviation */
+
+    int64_t n; /* number of values */
+    double a; /* the mean value */
+    double q; /* Qi = Q[i-1] + (Xi - A[i-1])(Xi - Ai) */
+
+    bool variable; /* variable or fixed value */
+    double prev_val;
+} Statistics;
+typedef struct Statistics2 {
+    int n;
+    double average;
+    double diff_sq_sum;
+} Statistics2;
+static
+void Statistics2Init(Statistics2* self, double sum, int64_t  count)
+{
+    assert(self);
+
+    if (count) {
+        self->average = sum / count;
+    }
+}
+
+static void Statistics2Add(Statistics2* self, double value) {
+    double diff = 0;
+
+    assert(self);
+
+    ++self->n;
+
+    diff = value - self->average;
+    self->diff_sq_sum += diff * diff;
+}
+
+static void Statistics2Print(const Statistics2* selfs,
+    uint32_t nreads, const char* indent,
+
+     /* the same as in <Statistics: just to make <Statistics> and <Statistics2>
+        look the same */
+    uint64_t spot_count)
+{
+    int i = 0;
+
+    if (nreads) {
+        assert(selfs && indent);
+    }
+
+    OUTMSG(("%s<Statistics2 nreads=\"%u\" nspots=\"%lu\">\n",
+        indent, nreads, spot_count));
+
+    for (i = 0; i < nreads; ++i) {
+        double dev = 0;
+        const Statistics2* stats = selfs + i;
+        double avr = stats->average;
+        if (stats->n > 0) {
+            dev = sqrt(stats->diff_sq_sum / stats->n);
+        }
+
+        OUTMSG(("%s  "
+            "<Read index=\"%d\" count=\"%ld\" average=\"%f\" stdev=\"%f\"/>\n",
+            indent, i, stats->n, avr, dev));
+    }
+
+    OUTMSG(("%s</Statistics2>\n", indent));
+}
+
+static bool columnUndefined(rc_t rc) {
+    return rc == SILENT_RC(rcVDB, rcCursor, rcOpening , rcColumn, rcUndefined)
+        || rc == SILENT_RC(rcVDB, rcCursor, rcUpdating, rcColumn, rcNotFound );
+}
+
+typedef struct {
+    uint64_t cnt[5];
+    bool CS_NATIVE;
+    const VCursor   *curs;
+    uint32_t         idx;
+
+    bool finalized;
+} Bases;
+
+static rc_t BasesInit(Bases *self, const VTable *vtbl) {
+    rc_t rc = 0;
+
+    assert(self);
+    memset(self, 0, sizeof *self);
+
+    if (rc == 0) {
+        const char name[] = "CS_NATIVE";
+        const void *base = NULL;
+
+        const VCursor *curs = NULL;
+        uint32_t idx = 0;
+
+        self->CS_NATIVE = true;
+
+        rc = VTableCreateCachedCursorRead(vtbl, &curs, DEFAULT_CURSOR_CAPACITY);
+        DISP_RC(rc, "Cannot VTableCreateCachedCursorRead");
+
+        if (rc == 0) {
+            rc = VCursorPermitPostOpenAdd(curs);
+            DISP_RC(rc, "Cannot VCursorPermitPostOpenAdd");
+        }
+
+        if (rc == 0) {
+            rc = VCursorOpen(curs);
+            DISP_RC(rc, "Cannot VCursorOpen");
+        }
+
+        if (rc == 0) {
+            rc = VCursorAddColumn(curs, &idx, "%s", name);
+            if (rc != 0) {
+                if (columnUndefined(rc)) {
+                    self->CS_NATIVE = false;
+                    rc = 0;
+                }
+                else {
+                    DISP_RC(rc, "Cannot VCursorAddColumn(CS_NATIVE)");
+                }
+            }
+            else {
+                bitsz_t boff = ~0;
+                bitsz_t row_bits = ~0;
+
+                uint32_t elem_bits = 0, elem_off = 0, elem_cnt = 0;
+                rc = VCursorCellDataDirect(curs, 1, idx,
+                    &elem_bits, &base, &elem_off, &elem_cnt);
+                boff     = elem_off * elem_bits;
+                row_bits = elem_cnt * elem_bits;
+
+                if (boff != 0 || row_bits != 8) {
+                    rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+                    PLOGERR(klogInt, (klogErr, rc, "invalid boff or row_bits "
+                        "while VCursorCellDataDirect($(name))",
+                        "name=%s", name));
+                }
+
+                if (rc == 0) {
+                    self->CS_NATIVE = *((bool*)base);
+                }
+
+            }
+        }
+
+        RELEASE(VCursor, curs);
+    }
+
+    {
+        const char *name = self->CS_NATIVE ? "CSREAD" : "READ";
+        const char *datatype
+            = self->CS_NATIVE ? "INSDC:x2cs:bin" : "INSDC:x2na:bin";
+        rc = VTableCreateCachedCursorRead(vtbl, &self->curs, DEFAULT_CURSOR_CAPACITY);
+        DISP_RC(rc, "Cannot VTableCreateCachedCursorRead");
+        if (rc == 0) {
+            rc = VCursorAddColumn(self->curs,
+                &self->idx, "(%s)%s", datatype, name);
+            if (rc != 0) {
+                PLOGERR(klogInt, (klogInt, rc,
+                    "Cannot VCursorAddColumn(($(type)),$(name)",
+                    "type=%s,name=%s", datatype, name));
+            }
+        }
+        if (rc == 0) {
+            rc = VCursorOpen(self->curs);
+            if (rc != 0) {
+                PLOGERR(klogInt, (klogInt, rc,
+                    "Cannot VCursorOpen(($(type)),$(name)))",
+                    "type=%s,name=%s", datatype, name));
+            }
+        }
+    }
+
+    return rc;
+}
+
+static void BasesFinalize(Bases *self) {
+    assert(self);
+
+    if (self->curs == NULL) {
+        LOGMSG(klogInfo, "Bases statistics will not be printed : "
+            "READ cursor was not opened during BasesFinalize()");
+        return;
+    }
+
+    self->finalized = true;
+}
+
+static rc_t BasesRelease(Bases *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(VCursor  , self->curs);
+
+    return rc;
+}
+
+static void BasesAdd(Bases *self, int64_t spotid) {
+    rc_t rc = 0;
+    const void *base = NULL;
+    bitsz_t row_bits = ~0;
+    bitsz_t i = ~0;
+    const unsigned char *bases = NULL;
+
+    assert(self);
+
+    if (self->curs == NULL) {
+        return;
+    }
+
+    {
+        uint32_t elem_bits = 0, elem_off = 0, elem_cnt = 0;
+        rc = VCursorCellDataDirect(self->curs, spotid, self->idx,
+            &elem_bits, &base, &elem_off, &elem_cnt);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogErr, rc,
+                "while VCursorCellDataDirect(READ, $(type))",
+                "type=%s", self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE"));
+            BasesRelease(self);
+            return;
+        }
+
+        row_bits = elem_cnt * elem_bits;
+    }
+
+    if ((row_bits % 8) != 0) {
+        rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+        PLOGERR(klogInt, (klogErr, rc, "Invalid row_bits '$(row_bits) "
+            "while VCursorCellDataDirect(READ, $(type), spotid=$(spotid))",
+            "row_bits=%lu,type=%s,spotid=%lu",
+            row_bits, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE", spotid));
+        BasesRelease(self);
+        return;
+    }
+
+    row_bits /= 8;
+    bases = base;
+    for (i = 0; i < row_bits; ++i) {
+        unsigned char base = bases[i];
+        if (base > 4) {
+            rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+            PLOGERR(klogInt, (klogErr, rc,
+                "Invalid READ column value '$(base) while VCursorCellDataDirect"
+                "($(type), spotid=$(spotid), index=$(i))",
+                "base=%d,type=%s,spotid=%lu,index=%lu",
+                base, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE",
+                spotid, i));
+            BasesRelease(self);
+            return;
+        }
+        ++self->cnt[base];
+    }
+}
+
+static rc_t BasesPrint(const Bases *self,
+    uint64_t base_count, const char* indent)
+{
+    rc_t rc = 0;
+
+    const char tag[] = "Bases";
+    const char *name = NULL;
+    int i = ~0;
+
+    assert(self);
+
+    if (!self->finalized) {
+        LOGMSG(klogInfo, "Bases statistics will not be printed : "
+            "Bases object was not finalized during BasesPrint()");
+        return rc;
+    }
+
+    name = self->CS_NATIVE ? "0123." : "ACGTN";
+
+    OUTMSG(("%s<%s cs_native=\"%s\" count=\"%lu\">\n",
+        indent, tag, self->CS_NATIVE ? "true" : "false", base_count));
+
+    for (i = 0; i < 5; ++i) {
+        OUTMSG(("%s  <Base value=\"%c\" count=\"%lu\"/>\n",
+            indent, name[i], self->cnt[i]));
+    }
+
+    OUTMSG(("%s</%s>\n", indent, tag));
+
+    if (self->cnt[0] + self->cnt[1] + self->cnt[2] +
+        self->cnt[3] + self->cnt[4] != base_count)
+    {
+        rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+        LOGERR(klogErr, rc, "stored base count did not match observed base count");
+    }
+
+    return rc;
+}
+
+typedef struct {
+    uint64_t spot_count;
+    uint64_t spot_count_mates;
+    uint64_t BIO_BASE_COUNT; /* bio_len */
+    uint64_t bio_len_mates;
+    uint64_t BASE_COUNT; /* total_len */
+    uint64_t bad_spot_count;
+    uint64_t bad_bio_len;
+    uint64_t filtered_spot_count;
+    uint64_t filtered_bio_len;
+    uint64_t total_cmp_len; /* CMP_READ : compressed */
+
+    bool variable_nreads;
+    uint32_t nreads; /* if (nreads == 0) then (nreads is variable) */
+    Statistics * stats ; /* nreads elements */
+    Statistics2* stats2; /* nreads elements */
+
+    Bases bases_count;
+} SraStatsTotal;
+static
+rc_t SraStatsTotalMakeStatistics(SraStatsTotal* self, uint32_t nreads)
+{
+    assert(self);
+
+    if (nreads == 0) {
+        return 0;
+    }
+
+    assert(self->stats == NULL);
+    self->stats = calloc(nreads, sizeof *self->stats);
+    if (self->stats == NULL) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    assert(self->stats2 == NULL);
+    self->stats2 = calloc(nreads, sizeof *self->stats2);
+    if (self->stats2 == NULL) {
+        free(self->stats);
+        self->stats = NULL;
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    self->nreads = nreads;
+
+    return 0;
+}
+
+static
+void SraStatsTotalStatistics2Init(SraStatsTotal* self,
+    int nreads, uint64_t* sums, uint64_t* count)
+{
+    int i = 0;
+    assert(self);
+    if (nreads) {
+        assert(sums);
+    }
+    for (i = 0; i < nreads; ++i) {
+        uint64_t sum = sums[i];
+        Statistics2* stats = self->stats2 + i;
+        assert(stats);
+        Statistics2Init(stats, sum, count[i]);
+    }
+}
+
+static rc_t SraStatsTotalFree(SraStatsTotal* self) {
+    assert(self);
+
+    free(self->stats);
+    self->stats = NULL;
+
+    free(self->stats2);
+    self->stats2 = NULL;
+
+    BasesRelease(&self->bases_count);
+
+    self->nreads = 0;
+
+    return 0;
+}
+
+static void StatisticsAdd(Statistics* self, double value) {
+    double a_1 = 0;
+
+    /* http://en.wikipedia.org/wiki/Stdev#Rapid_calculation_methods */
+
+    assert(self);
+
+    a_1 = self->a;
+
+    if (self->n++ == 0) {
+        self->prev_val = value;
+    }
+    else if (self->prev_val != value) {
+        self->variable = true;
+    }
+
+    self->a += (value - a_1) / self->n;
+    self->q += ((double)value - a_1) * ((double)value - self->a);
+}
+
+static double StatisticsAverage(const Statistics* self) {
+    assert(self);
+
+    return self->a;
+}
+
+static double StatisticsStdev(const Statistics* self) {
+    assert(self);
+
+    if (self->n == 0) {
+        return 0;
+    }
+
+    return sqrt(self->q / self->n);
+}
+
+static
+void SraStatsTotalAdd(SraStatsTotal* self,
+    uint32_t* values, uint32_t nreads)
+{
+    int i = ~0;
+
+    assert(self && values);
+
+    if (self->nreads != nreads) {
+        self->variable_nreads = true;
+    }
+
+    if (self->variable_nreads) {
+        return;
+    }
+
+    for (i = 0; i < nreads; ++i) {
+        uint32_t value = values[i];
+        if (value > 0) {
+            Statistics* stats = self->stats + i;
+            assert(stats);
+
+            StatisticsAdd(stats, value);
+        }
+    }
+}
+
+static
+void SraStatsTotalAdd2(SraStatsTotal* self, uint32_t* values) {
+    int i = 0;
+
+    assert(self && values);
+
+    for (i = 0; i < self->nreads; ++i) {
+        uint32_t value = values[i];
+        if (value > 0) {
+            Statistics2* stats = self->stats2 + i;
+            assert(stats);
+
+            Statistics2Add(stats, value);
+        }
+    }
+}
+
+static double s_Round(double X) { return floor(X + 0.5); }
+
+static
+void print_double_or_int(const char* name, double val, bool variable) {
+    double rnd = s_Round(val);
+    assert(name);
+    if (variable) {
+        OUTMSG((" %s=\"%.2f\"", name, val));
+    }
+    else {
+        OUTMSG((" %s=\"%d\"", name, (int)rnd));
+    }
+}
+
+static void StatisticsPrint(const Statistics* selfs,
+    uint32_t nreads, const char* indent)
+{
+    int i = ~0;
+
+    if (nreads) {
+        assert(selfs && indent);
+    }
+
+    for (i = 0; i < nreads; ++i) {
+        const Statistics* stats = selfs + i;
+        double avr = StatisticsAverage(stats);
+        double dev = StatisticsStdev(stats);
+
+        OUTMSG(("%s  <Read index=\"%d\"", indent, i));
+        OUTMSG((" count=\"%ld\"", stats->n, i));
+        print_double_or_int("average", avr, stats->variable);
+        print_double_or_int("stdev"  , dev, stats->variable);
+        OUTMSG(("/>\n"));
+    }
+}
+
+static rc_t StatisticsDiff(const Statistics* ss,
+    const Statistics2* ss2, uint32_t nreads)
+{
+    rc_t rc = 0;
+
+    int i = ~0;
+
+    assert(ss && ss2);
+
+    for (i = 0; i < nreads; ++i) {
+        const Statistics * s  = ss  + i;
+        const Statistics2* s2 = ss2 + i;
+
+        double d  = StatisticsStdev(s);
+        double d2 = sqrt(s2->diff_sq_sum / s2->n);
+
+        double diff = d - d2;
+        if (diff < 0) {
+            diff = -diff;
+        }
+
+        if (diff > 1e-6) {
+              /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing calculated standard deviations");
+        }
+
+        if (s->n != s2->n) {
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing read statistics counts");
+        }
+
+        diff = StatisticsAverage(s) - s2->average;
+        if (diff < 0) {
+            diff = -diff;
+        }
+        if (diff > 1e-10) {
+              /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing calculated average");
+        }
+    }
+
+    return rc;
+}
+
+static rc_t SraStatsTotalPrintStatistics(
+    const SraStatsTotal* self, const char* indent, bool test)
+{
+    rc_t rc = 0;
+
+    assert(self && indent);
+
+    OUTMSG(("%s<Statistics nreads=\"", indent));
+
+    if (self->variable_nreads) {
+        OUTMSG(("variable\"/>\n"));
+    }
+    else {
+        OUTMSG(("%u\"", self->nreads));
+        OUTMSG((" nspots=\"%lu\">\n", self->spot_count));
+        StatisticsPrint(self->stats, self->nreads, indent);
+        OUTMSG(("%s</Statistics>\n", indent));
+
+        if (test) {
+            Statistics2Print(self->stats2, self->nreads, indent,
+                self->spot_count);
+            rc = StatisticsDiff(self->stats, self->stats2, self->nreads);
+        }
+    }
+
+    return rc;
+}
+
+typedef struct srastat_parms {
+    const char* table_path;
+
+    bool xml; /* output format (txt or xml) */
+    bool printMeta;
+    bool quick; /* quick mode: stats from meta */
+    bool skip_members; /* not to print spot_group statistics */
+    bool progress;     /* show progress */
+    bool skip_alignment; /* not to print alignment info */
+    bool print_arcinfo;
+    bool statistics; /* calculate average and stdev */
+    bool test; /* test stdev */
+
+    const XMLLogger *logger;
+
+    int64_t  start, stop;
+
+    bool hasSPOT_GROUP;
+    bool variableReadLength;
+
+    SraStatsTotal total; /* is used in srastat_print */
+} srastat_parms;
+typedef struct SraStatsMeta {
+    bool found;
+    uint64_t BASE_COUNT;
+    uint64_t BIO_BASE_COUNT;
+    uint64_t CMP_BASE_COUNT; /* compressed base count when present */
+    uint64_t spot_count;
+    char* spot_group; /* optional */
+    BAM_HEADER_RG BAM_HEADER;
+} SraStatsMeta;
+typedef struct MetaDataStats {
+    bool found;
+    SraStatsMeta table;
+    uint32_t spotGroupN;
+    SraStatsMeta *spotGroup;
+} MetaDataStats;
+typedef struct SraSizeStats { uint64_t size; } SraSizeStats;
+typedef struct Formatter {
+    char name[256];
+    char vers[256];
+} Formatter;
+typedef struct Loader {
+    char date[256];
+    char name[256];
+    char vers[256];
+} Loader;
+typedef struct SraMeta {
+    uint32_t metaVersion;
+    int32_t tblVersion;
+    time_t loadTimestamp;
+    Formatter formatter;
+    Loader loader;
+} SraMeta;
+typedef struct ArcInfo_struct {
+    KTime_t timestamp;
+    struct {
+        const char* tag;
+        uint64_t size;
+        char md5[32 + 1];
+    } i[2];
+} ArcInfo;
+typedef struct Quality {
+    uint32_t value;
+    uint64_t count;
+} Quality;
+typedef struct QualityStats {
+    Quality* QUALITY;
+    size_t allocated;
+    size_t used;
+} QualityStats;
+typedef enum EMetaState {
+    eMSNotFound,
+    eMSFound
+} EMetaState;
+typedef struct Count {
+    EMetaState state;
+    uint64_t value;
+} Count;
+typedef struct Counts {
+    char* tableName;
+    EMetaState tableState;
+    EMetaState metaState;
+    Count BASE_COUNT;
+    Count SPOT_COUNT;
+} Counts;
+typedef struct TableCounts {
+    EMetaState state;
+    Counts* count;
+    size_t allocated;
+    size_t used;
+} TableCounts;
+typedef struct Ctx {
+    const BSTree* tr;
+    const MetaDataStats* meta;
+    const SraMeta* info;
+    const SraSizeStats* sizes;
+    const ArcInfo* arc_info;
+    srastat_parms* pb;
+    SraStatsTotal* total;
+    const VDatabase* db;
+    QualityStats quality;
+    TableCounts tables;
+} Ctx;
+typedef rc_t (CC * RG_callback)(const BAM_HEADER_RG* rg, const void* data);
+static
+rc_t CC meta_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+    rc_t rc = 0;
+
+    const MetaDataStats* meta = data;
+
+    int i = 0;
+    bool found = false;
+
+    assert(rg && meta && rg->ID);
+
+    for (i = 0; i < meta->spotGroupN && rc == 0; ++i) {
+        SraStatsMeta* ss = &meta->spotGroup[i];
+        const char* spot_group = ss->spot_group;
+
+        assert(spot_group);
+        if (strcmp(spot_group, rg->ID) == 0) {
+            rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+            found = true;
+            break;
+        }
+    }
+
+    if (rc == 0 && !found) {
+        /* There could be Read groups that are present in the BAM_HEADER 
+        but missed in the csra. We was just ignore them. */
+    }
+
+    return rc;
+}
+
+static int64_t CC srastats_cmp(const void *item, const BSTNode *n) {
+    const char *sg = item;
+    const SraStats *ss = ( const SraStats* ) n;
+
+    return strcmp(sg,ss->spot_group);
+}
+
+static
+rc_t CC tree_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+    rc_t rc = 0;
+
+    const BSTree* tr = data;
+    SraStats* ss = NULL;
+
+    assert(rg && tr && rg->ID);
+
+    ss = (SraStats*) BSTreeFind(tr, rg->ID, srastats_cmp);
+    if (ss == NULL) {
+        /* There could be Read groups that are present in the BAM_HEADER 
+        but missed in the csra. We was just ignore them. */
+    }
+    else {
+        rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+    }
+
+    return rc;
+}
+
+static int64_t CC QualityCmp(const void* s1, const void* s2, void *data) {
+    const Quality* q1 = s1;
+    const Quality* q2 = s2;
+    assert(q1 && q2);
+    return (int64_t)q1->value - (int64_t)q2->value;
+}
+
+static int64_t CC CountsCmp(const void* v1, const void* v2, void *data) {
+    const Counts* e1 = v1;
+    const Counts* e2 = v2;
+    assert(e1 && e2 && e1->tableName && e2->tableName);
+    return strcmp(e1->tableName, e2->tableName);
+}
+
+static rc_t QualityParse(Quality* self,
+    const KMDataNode* node, const char* name)
+{
+    rc_t rc = 0;
+    const char start[] = "PHRED_";
+    int i = strlen(start);
+
+    assert(self && name);
+
+    if (strlen(name) <= strlen(start)) {
+        rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+        PLOGERR(klogInt, (klogErr, rc,
+            "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+        return rc;
+    }
+
+    self->value = 0;
+    for (; i < strlen(name); ++i) {
+        if (name[i] < '0' || name[i] > '9') {
+            rc_t rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+            PLOGERR(klogInt, (klogErr, rc,
+                "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+            return rc;
+        }
+        self->value = self->value * 10 + name[i] - '0';
+    }
+
+    rc = KMDataNodeReadAsU64(node, &self->count);
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogErr, rc,
+            "while reading the value of STATS/QUALITY/$(name)",
+            "name=%s", name));
+    }
+
+    return rc;
+}
+
+static rc_t QualityStatsRead1(QualityStats* self,
+    const KMDataNode* parent, const char* name)
+{
+    const KMDataNode* node = NULL;
+
+    rc_t rc = KMDataNodeOpenNodeRead(parent, &node, "%s", name);
+    DISP_RC2(rc, name, "while calling KMDataNodeOpenNodeRead");
+
+    if (rc == 0) {
+        size_t size = 64;
+        assert(self);
+        if (self->allocated == 0) {
+            assert(self->QUALITY == NULL && self->used == 0);
+            self->QUALITY = malloc(size * sizeof *self->QUALITY);
+            if (self->QUALITY == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->allocated = size;
+        }
+        else if (self->used >= self->allocated) {
+            Quality* tmp = NULL;
+            size = self->allocated * 2;
+            tmp = realloc(self->QUALITY, size * sizeof *self->QUALITY);
+            if (tmp == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->QUALITY = tmp;
+            self->allocated = size;
+        }
+    }
+
+    if (rc == 0) {
+        assert((self->used < self->allocated) && self->QUALITY);
+        rc = QualityParse(&self->QUALITY[self->used], node, name);
+        if (rc == 0)
+        {   ++self->used; }
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return rc;
+}
+
+static rc_t QualityStatsRead(QualityStats* self, const KMetadata* meta) {
+    rc_t rc = 0;
+    const char name[] = "STATS/QUALITY";
+    const KMDataNode* node = NULL;
+
+    assert(self && meta);
+
+    memset(self, 0, sizeof *self);
+
+    rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+            return 0;
+        }
+        DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+    }
+
+    if (rc == 0 && node) {
+        KNamelist* names = NULL;
+        rc = KMDataNodeListChild(node, &names);
+        DISP_RC2(rc, name, "while calling KMDataNodeListChild");
+        if (rc == 0) {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            DISP_RC2(rc, name, "while calling KNamelistCount");
+            if (rc == 0) {
+                uint32_t i = ~0;
+                for (i = 0; i < count && rc == 0; ++i) {
+                    const char* child = NULL;
+                    rc = KNamelistGet(names, i, &child);
+                    if (rc != 0) {
+                       PLOGERR(klogInt, (klogInt, rc,
+                            "while calling STATS/QUALITY::KNamelistGet($(idx))",
+                            "idx=%i", i));
+                    }
+                    else
+                    {   rc = QualityStatsRead1(self, node, child); }
+                }
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return 0;
+}
+
+static
+void QualityStatsSort(QualityStats* self)
+{
+    assert(self);
+    ksort(self->QUALITY, self->used, sizeof *self->QUALITY, QualityCmp, NULL);
+}
+
+static
+void TableCountsSort(TableCounts* self)
+{
+    assert(self);
+    ksort(self->count, self->used, sizeof *self->count, CountsCmp, NULL);
+}
+static
+rc_t QualityStatsPrint(const QualityStats* self, const char* indent)
+{
+    size_t i = ~0;
+    const char tag[] = "QualityCount";
+    assert(self && indent);
+
+    if (self->allocated == 0)
+    {   return 0; }
+
+    OUTMSG(("%s<%s>\n", indent, tag));
+    for (i = 0; i < self->used; ++i) {
+        Quality* q = &self->QUALITY[i];
+        OUTMSG(("  %s<Quality value=\"%lu\" count=\"%lu\"/>\n",
+            indent, q->value, q->count));
+    }
+    OUTMSG(("%s</%s>\n", indent, tag));
+
+    return 0;
+}
+
+static
+void QualityStatsRelease(QualityStats* self)
+{
+    assert(self);
+    free(self->QUALITY);
+    memset(self, 0, sizeof *self);
+}
+
+static
+rc_t CountRead(Count* self, const char* name, const KMDataNode* parent)
+{
+    rc_t rc = 0;
+
+    const KMDataNode* node = NULL;
+
+    assert(self && parent && name);
+
+    memset(self, 0, sizeof *self);
+
+    rc = KMDataNodeOpenNodeRead(parent, &node, "%s", name);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+            rc = 0;
+        }
+        DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+    }
+    else {
+        rc = KMDataNodeReadAsU64(node, &self->value);
+        DISP_RC2(rc, name, "while calling KMDataNodeReadAsU64");
+        if (rc == 0)
+        {   self->state = eMSFound; }
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return rc;
+}
+
+static
+rc_t TableCountsRead1(TableCounts* self,
+    const VDatabase* db, const char* tableName)
+{
+    const VTable* tbl = NULL;
+    const KMetadata* meta = NULL;
+    const char name[] = "STATS/TABLE";
+    const KMDataNode* node = NULL;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, "%s", tableName);
+    DISP_RC2(rc, tableName, "while calling VDatabaseOpenTableRead");
+
+    if (rc == 0) {
+        size_t size = 8;
+        assert(self);
+        if (self->allocated == 0) {
+            assert(self->count == NULL && self->used == 0);
+            self->count = malloc(size * sizeof *self->count);
+            if (self->count == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->allocated = size;
+        }
+        else if (self->used >= self->allocated) {
+            Counts* tmp = NULL;
+            size = self->allocated * 2;
+            tmp = realloc(self->count, size * sizeof *self->count);
+            if (tmp == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->count = tmp;
+            self->allocated = size;
+        }
+    }
+    if (rc == 0) {
+        assert(self->used < self->allocated && self->count);
+    }
+    if (rc == 0) {
+        rc = VTableOpenMetadataRead(tbl, &meta);
+        DISP_RC2(rc, name, "while calling VTableOpenMetadataRead");
+    }
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+        else
+        {   assert(node); }
+    }
+
+    if (rc == 0 && node != NULL) {
+        Counts* c = NULL;
+        assert((self->used < self->allocated) && (self->count != NULL));
+        c = &self->count[self->used];
+        memset(c, 0, sizeof *c);
+        c->tableName = strdup(tableName);
+        if (c->tableName == NULL)
+        {   return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+        c->tableState = eMSFound;
+        c->metaState = eMSFound;
+        rc = CountRead(&c->BASE_COUNT, "BASE_COUNT", node);
+
+        {
+            rc_t rc2 = CountRead(&c->SPOT_COUNT, "SPOT_COUNT", node);
+            if (rc2 != 0 && rc == 0)
+            {   rc = rc2; }
+        }
+
+        if (rc == 0)
+        {   ++self->used; }
+    }
+
+    RELEASE(KMDataNode, node);
+    RELEASE(KMetadata, meta);
+    RELEASE(VTable, tbl);
+
+    return rc;
+}
+
+static
+rc_t TableCountsRead(TableCounts* self, const VDatabase* db)
+{
+    rc_t rc = 0;
+    KNamelist* names = NULL;
+
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    if (db == NULL)
+    {   return 0; }
+
+    rc = VDatabaseListTbl(db, &names);
+    DISP_RC(rc, "while calling VDatabaseListTbl");
+    if (rc == 0) {
+        uint32_t count = 0;
+        rc = KNamelistCount(names, &count);
+        DISP_RC(rc, "while calling VDatabaseListTbl::KNamelistCount");
+        if (rc == 0) {
+            uint32_t i = ~0;
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* table = NULL;
+                rc = KNamelistGet(names, i, &table);
+                if (rc != 0) {
+                   PLOGERR(klogInt, (klogInt, rc,
+                        "while calling VDatabaseListTbl::KNamelistGet($(idx))",
+                        "idx=%i", i));
+                }
+                else
+                {   rc = TableCountsRead1(self, db, table); }
+            }
+        }
+    }
+
+    RELEASE(KNamelist, names);
+
+    return rc;
+}
+
+static
+rc_t CountPrint(const Count* self, const char* indent, const char* tag)
+{
+    assert(self && indent && tag);
+    switch (self->state) {
+        case eMSNotFound:
+            OUTMSG(("  %s<%s state=\"not found\"/>\n", indent, tag));
+            break;
+        case eMSFound:
+            OUTMSG(("  %s<%s count=\"%lu\"/>\n", indent, tag, self->value));
+            break;
+        default:
+            assert(0);
+            OUTMSG(("  %s<%s state=\"UNEXPECTED\"/>\n", indent, tag));
+            break;
+    }
+    return 0;
+}
+
+static
+rc_t TableCountsPrint(const TableCounts* self, const char* indent)
+{
+    rc_t rc = 0;
+    const char tag[] = "Databases";
+
+    assert(self && indent);
+
+    if (self->allocated == 0)
+    {   return 0; }
+
+    OUTMSG(("%s<%s>\n", indent, tag));
+    {
+        size_t i = ~0;
+        const char tag[] = "Database";
+        OUTMSG(("  %s<%s>\n", indent, tag));
+        for (i = 0; i < self->used; ++i) {
+            const char tag[] = "Statistics";
+            const Counts* p = &self->count[i];
+            OUTMSG(("    %s<Table name=\"%s\">\n", indent, p->tableName));
+            switch (p->metaState) {
+            case eMSNotFound:
+                OUTMSG(("      %s<%s source=\"meta\" state=\"not found\"/>\n",
+                    indent, tag));
+                break;
+            case eMSFound: {
+                char buf[512];
+                OUTMSG(("      %s<%s source=\"meta\">\n", indent, tag));
+                rc = string_printf(buf, sizeof buf, NULL, "      %s", indent);
+                if (rc == 0) {
+                    CountPrint(&p->SPOT_COUNT, buf, "Rows");
+                    CountPrint(&p->BASE_COUNT, buf, "Elements");
+                }
+                OUTMSG(("      %s</%s>\n", indent, tag));
+                break;
+              }
+            default:
+                assert(0);
+                OUTMSG(("      %s<%s source=\"meta\" state=\"UNEXPECTED\"/>\n",
+                    indent, tag));
+                break;
+            }
+            OUTMSG(("    %s</Table>\n", indent));
+        }
+        OUTMSG(("  %s</%s>\n", indent, tag));
+    }
+    OUTMSG(("%s</%s>\n", indent, tag));
+
+    return rc;
+}
+
+static
+void TableCountsRelease(TableCounts* self)
+{
+    size_t i = ~0;
+    assert(self);
+    for (i = 0; i < self->used; ++i) {
+        assert(self->count);
+        free(self->count[i].tableName);
+        self->count[i].tableName = NULL;
+    }
+    free(self->count);
+    memset(self, 0, sizeof *self);
+}
+
+static
+rc_t parse_bam_header(const VDatabase* db,
+    const RG_callback cb, const void* data)
+{
+    rc_t rc = 0;
+    const char name[] = "BAM_HEADER";
+    const KMetadata* meta = NULL;
+    const KMDataNode* node = NULL;
+    char* buffer = NULL;
+
+    if (db == NULL) {
+        return rc;
+    }
+    assert(cb);
+
+    if (rc == 0) {
+        rc = VDatabaseOpenMetadataRead(db, &meta);
+        DISP_RC(rc, "while calling VDatabaseOpenMetadataRead");
+    }
+
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                return 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+    }
+
+    if (rc == 0) {
+        size_t num_read = 0;
+        size_t remaining = 0;
+        rc = KMDataNodeRead(node, 0, NULL, 0, &num_read, &remaining);
+        DISP_RC2(rc, name, "while calling KMDataNodeRead");
+        assert(num_read == 0);
+        if (rc == 0 && remaining > 0) {
+            buffer = malloc(remaining + 1);
+            if (buffer == NULL) {
+                rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            else {
+                size_t size = 0;
+                rc = KMDataNodeReadCString(node, buffer, remaining + 1, &size);
+                DISP_RC2(rc, name, "while calling KMDataNodeReadCString");
+                assert(size == remaining);
+            }
+        }
+    }
+
+    if (rc == 0 && buffer) {
+        const char* token = strtok(buffer, "\n");
+        while (token) {
+            const char RG[] = "@RG\t";
+            if (strncmp(token, RG, sizeof RG - 1) == 0) {
+                const char ID[] = "\tID:";
+                const char LB[] = "\tLB:";
+                const char SM[] = "\tSM:";
+                char* id_end = NULL;
+                char* lb_end = NULL;
+                char* sm_end = NULL;
+                BAM_HEADER_RG rg;
+                memset(&rg, 0, sizeof rg);
+                rg.ID = strstr(token, ID);
+                rg.LB = strstr(token, LB);
+                rg.SM = strstr(token, "\tSM:");
+                if (rg.ID) {
+                    rg.ID += sizeof ID - 1;
+                }
+                if (rg.ID) {
+                    id_end = strchr(rg.ID, '\t');
+                }
+                if (rg.LB) {
+                    rg.LB += sizeof LB - 1;
+                }
+                if (rg.LB) {
+                    lb_end = strchr(rg.LB, '\t');
+                }
+                if (rg.SM) {
+                    rg.SM += sizeof SM - 1;
+                }
+                if (rg.SM) {
+                    sm_end = strchr(rg.SM, '\t');
+                }
+                if (id_end) {
+                    *id_end = '\0';
+                }
+                if (lb_end) {
+                    *lb_end = '\0';
+                }
+                if (sm_end) {
+                    *sm_end = '\0';
+                }
+                if (rg.ID && rg.LB && rg.SM) {
+                    rc = cb(&rg, data);
+                }
+                if (rc) {
+                    break;
+                }
+            }
+            token = strtok(NULL, "\n");
+        }
+    }
+    free(buffer);
+    buffer = NULL;
+    RELEASE(KMDataNode, node);
+    RELEASE(KMetadata, meta);
+    return rc;
+}
+
+static
+void SraStatsMetaDestroy(SraStatsMeta* self)
+{
+    if (self == NULL)
+    {   return; }
+    BAM_HEADER_RG_free(&self->BAM_HEADER);
+    free(self->spot_group);
+    self->spot_group = NULL;
+}
+
+static
+rc_t CC fileSizeVisitor(const KDirectory* dir,
+    uint32_t type, const char* name, void* data)
+{
+    rc_t rc = 0;
+
+    SraSizeStats* sizes = (SraSizeStats*) data;
+
+    if (type & kptAlias)
+    {   return rc; }
+
+    assert(sizes);
+
+    switch (type) {
+        case kptFile: {
+            uint64_t size = 0;
+            rc = KDirectoryFileSize(dir, &size, "%s", name);
+            DISP_RC2(rc, name, "while calling KDirectoryFileSize");
+            if (rc == 0) {
+                sizes->size += size;
+                DBGMSG(DBG_APP, DBG_COND_1,
+                    ("File '%s', size %lu\n", name, size));
+            }
+            break;
+        }
+        case kptDir: 
+            DBGMSG(DBG_APP, DBG_COND_1, ("Dir '%s'\n", name));
+            rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, "%s", name);
+            DISP_RC2(rc, name, "while calling KDirectoryVisit");
+            break;
+        default:
+            rc = RC(rcExe, rcDirectory, rcVisiting, rcType, rcUnexpected);
+            DISP_RC2(rc, name, "during KDirectoryVisit");
+            break;
+    }
+
+    return rc;
+}
+
+static rc_t GetTableModDate(const VDBManager *mgr,
+    KTime_t *mtime, const char *spec)
+{
+    VFSManager *vfs = NULL;
+    VResolver  *resolver = NULL;
+    VPath *accession = NULL;
+    const VPath *tblpath = NULL;
+    const KDBManager *kmgr = NULL;
+    char aPath[4096] = "";
+    const char *path = aPath;
+    rc_t rc = VFSManagerMake(&vfs);
+    DISP_RC(rc, "VFSManagerMake");
+    assert(mtime);
+    *mtime = 0;
+    if (rc == 0) {
+        rc = VFSManagerGetResolver(vfs, &resolver);
+        DISP_RC(rc, "VFSManagerGetResolver");
+    }
+    if (rc == 0) {
+        rc = VFSManagerMakePath(vfs, &accession, spec);
+        DISP_RC(rc, "VFSManagerMakePath");
+    }
+    if (rc == 0) {
+        assert(accession);
+        if (VPathIsAccessionOrOID(accession)) {
+            rc = VResolverLocal(resolver, accession, &tblpath);
+            DISP_RC(rc, "VResolverLocal");
+            if (rc == 0) {
+                //size_t size;
+                rc = VPathReadPath(tblpath, aPath, sizeof aPath, NULL);//& size)
+                path = aPath;
+            }
+        }
+        else {
+            path = spec;
+        }
+    }
+    if (rc == 0) {
+        rc = VDBManagerGetKDBManagerRead(mgr, &kmgr);
+        DISP_RC(rc, "VDBManagerGetKDBManagerRead");
+    }
+    if (rc == 0) {
+        rc = KDBManagerGetTableModDate(kmgr, mtime, "%s", path);
+    }
+    RELEASE(KDBManager, kmgr);
+    RELEASE(VPath, tblpath);
+    RELEASE(VPath, accession);
+    RELEASE(VResolver, resolver);
+    RELEASE(VFSManager, vfs);
+    return rc;
+}
+
+static rc_t get_arc_info(const char *path, ArcInfo *arc_info,
+    const VDBManager *vmgr, const VTable *vtbl)
+{
+    rc_t rc = 0;
+    memset(arc_info, 0, sizeof(*arc_info));
+
+    if ((rc = GetTableModDate(vmgr, &arc_info->timestamp, path)) == 0 ) {
+        uint32_t i;
+        for(i = 0; i < sizeof(arc_info->i) / sizeof(arc_info->i[0]); i++) {
+            const KFile* kfile;
+            arc_info->i[i].tag = i == 0 ? "sra" : "lite.sra";
+            if ((rc = VTableMakeSingleFileArchive(vtbl, &kfile, i == 1)) == 0) {
+                MD5State md5;
+                uint64_t pos = 0;
+                uint8_t buffer[256 * 1024];
+                size_t num_read = 0, x;
+
+                MD5StateInit(&md5);
+                do {
+                    if( (rc = KFileRead(kfile, pos, buffer, sizeof(buffer), &num_read)) == 0 ) {
+                        MD5StateAppend(&md5, buffer, num_read);
+                        pos += num_read;
+                    }
+                    rc = Quitting();
+                    if (rc != 0) {
+                        LOGMSG(klogWarn, "Interrupted");
+                    }
+                } while(rc == 0 && num_read != 0);
+                if (rc == 0 &&
+                    (rc = KFileSize(kfile, &arc_info->i[i].size)) == 0)
+                {
+                    uint8_t digest[16];
+                    MD5StateFinish(&md5, digest);
+                    for(pos = 0, x = 0; rc == 0 && pos < sizeof(digest); pos++) {
+                        rc = string_printf(&arc_info->i[i].md5[x], sizeof(arc_info->i[i].md5) - x, &num_read, "%02x", digest[pos]);
+                        x += num_read;
+                    }
+                }
+                KFileRelease(kfile);
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t get_size( SraSizeStats* sizes, const VTable *vtbl) {
+    rc_t rc = 0;
+
+    const KDatabase* kDb = NULL;
+    const KTable* kTbl = NULL;
+    const KDirectory* dir = NULL;
+
+    assert(vtbl && sizes);
+    rc = VTableOpenKTableRead(vtbl, &kTbl);
+    DISP_RC(rc, "while calling VTableOpenKTableRead");
+
+    if (rc == 0) {
+        rc = KTableOpenParentRead(kTbl, &kDb);
+        DISP_RC(rc, "while calling KTableOpenParentRead");
+    }
+
+    if (rc == 0 && kDb) {
+        while (rc == 0) {
+            const KDatabase* par = NULL;
+            rc = KDatabaseOpenParentRead(kDb, &par);
+            DISP_RC(rc, "while calling KDatabaseOpenParentRead");
+            if (par == NULL)
+            {   break; }
+            else {
+                RELEASE(KDatabase, kDb);
+                kDb = par;
+            }
+        }
+        if (rc == 0) {
+            rc = KDatabaseOpenDirectoryRead(kDb, &dir);
+            DISP_RC(rc, "while calling KDatabaseOpenDirectoryRead");
+        }
+    }
+
+    if (rc == 0 && dir == NULL) {
+        rc = KTableOpenDirectoryRead(kTbl, &dir);
+        DISP_RC(rc, "while calling KTableOpenDirectoryRead");
+    }
+
+    memset(sizes, 0, sizeof *sizes);
+
+    if (rc == 0) {
+        rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, NULL);
+        DISP_RC(rc, "while calling KDirectoryVisit");
+    }
+
+    RELEASE(KDirectory, dir);
+    RELEASE(KTable, kTbl);
+    RELEASE(KDatabase, kDb);
+
+    return rc;
+}
+
+static
+rc_t readTxtAttr(const KMDataNode* self, const char* name, const char* attrName,
+    char* buf, size_t buf_size)
+{
+    rc_t rc = 0;
+    size_t num_read = 0;
+
+    if (self == NULL) {
+        rc = RC(rcExe, rcMetadata, rcReading, rcSelf, rcNull);
+        return rc;
+    }
+
+    assert(self && name && attrName && buf && buf_size);
+
+    rc = KMDataNodeReadAttr(self, attrName, buf, buf_size, &num_read);
+    if (rc != 0) {
+        PLOGERR(klogErr, (klogErr, rc, "Cannot read '$(name)@$(attr)'",
+            "name=%s,attr=%s", name, attrName));
+    }
+    else { DBGMSG(DBG_APP, DBG_COND_1, ("%s@%s = %s\n", name, attrName, buf)); }
+
+    return rc;
+}
+
+static
+rc_t get_load_info(const KMetadata* meta, SraMeta* info)
+{
+    rc_t rc = 0;
+    const KMDataNode* node = NULL;
+    assert(meta && info);
+    memset(info, 0, sizeof *info);
+    info->metaVersion = 99;
+    info->tblVersion = -1;
+
+    if (rc == 0) {
+        rc = KMetadataVersion(meta, &info->metaVersion);
+        DISP_RC(rc, "While calling KMetadataVersion");
+        if (rc == 0) {
+            DBGMSG(DBG_APP, DBG_COND_1,
+                ("KMetadataVersion=%d\n",info->metaVersion));
+            switch (info->metaVersion) {
+                case 1:
+                    info->tblVersion = 0;
+                    break;
+                case 2: {
+                    const char name[] = "SOFTWARE/loader";
+                    rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+                    if (rc != 0) {
+                        if (GetRCState(rc) == rcNotFound) {
+                            DBGMSG(DBG_APP,DBG_COND_1,("%s: not found\n",name));
+                            rc = 0;
+                        }
+                        DISP_RC2(rc, name,
+                            "while calling KMetadataOpenNodeRead");
+                    }
+                    else {
+                        rc = readTxtAttr(node, name, "vers",
+                            info->loader.vers, sizeof info->loader.vers);
+                        if (rc == 0) {
+                            if (strncmp("2.", info->loader.vers, 2) == 0)
+                            {      info->tblVersion = 2; }
+                            else { info->tblVersion = 1; }
+                        }
+                        else if (GetRCState(rc) == rcNotFound) {
+                            DBGMSG(DBG_APP,DBG_COND_1,
+                                ("%s/@%s: not found\n", name, "vers"));
+                            rc = 0;
+                        }
+                        if (rc == 0) {
+                            rc = readTxtAttr(node, name, "date",
+                                info->loader.date, sizeof info->loader.date);
+                            if (GetRCState(rc) == rcNotFound) {
+                                DBGMSG(DBG_APP,DBG_COND_1,
+                                    ("%s/@%s: not found\n", name, "date"));
+                                rc = 0;
+                            }
+                        }
+                        if (rc == 0) {
+                            rc = readTxtAttr(node, name, "name",
+                                info->loader.name, sizeof info->loader.name);
+                            if (GetRCState(rc) == rcNotFound) {
+                                DBGMSG(DBG_APP,DBG_COND_1,
+                                    ("%s/@%s: not found\n", name, "name"));
+                                rc = 0;
+                            }
+                        }
+                    }
+                    break;
+                }
+                default:
+                    rc = RC(rcExe, rcMetadata, rcReading, rcData, rcUnexpected);
+                    PLOGERR(klogErr, (klogErr, rc,
+                        "Unexpected MetadataVersion: $(version)",
+                        "version=%d", info->metaVersion));
+                    break;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        const char name[] = "SOFTWARE/formatter";
+        RELEASE(KMDataNode, node);
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound ) {
+                DBGMSG(DBG_APP,DBG_COND_1,("%s: not found\n",name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+        else {
+            if (rc == 0) {
+                rc = readTxtAttr(node, name, "vers",
+                    info->formatter.vers, sizeof info->formatter.vers);
+                if (GetRCState(rc) == rcNotFound) {
+                    DBGMSG(DBG_APP,DBG_COND_1,
+                        ("%s/@%s: not found\n", name, "vers"));
+                    rc = 0;
+                }
+            }
+            if (rc == 0) {
+                rc = readTxtAttr(node, name, "name",
+                    info->formatter.name, sizeof info->formatter.name);
+                if (GetRCState(rc) == rcNotFound) {
+                    DBGMSG(DBG_APP,DBG_COND_1,
+                        ("%s/@%s: not found\n", name, "name"));
+                    rc = 0;
+                }
+            }
+        }
+    }
+
+    if (rc == 0) {
+        const char name[] = "LOAD/timestamp";
+        RELEASE(KMDataNode, node);
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound ) {
+                DBGMSG(DBG_APP,DBG_COND_1,("%s: not found\n",name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+        else {
+            size_t num_read = 0;
+            size_t remaining = 0;
+            rc = KMDataNodeRead(node, 0,
+                &info->loadTimestamp, sizeof info->loadTimestamp,
+                &num_read, &remaining);
+            if (rc == 0) {
+                if (remaining || num_read != sizeof info->loadTimestamp) {
+                    rc = RC(rcExe, rcMetadata, rcReading, rcData, rcIncorrect);
+                }
+            }
+            else {
+                if (GetRCState(rc) == rcNotFound) {
+                    DBGMSG(DBG_APP, DBG_COND_1, ("%s: not found\n", name));
+                    rc = 0;
+                }
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return rc;
+}
+
+static
+rc_t readStatsMetaNode(const KMDataNode* parent, const char* parentName,
+    const char* name, uint64_t* result, bool quick, bool optional)
+{
+    rc_t rc = 0;
+
+    const KMDataNode* node = NULL;
+
+    assert(parent && parentName && name && result);
+
+    rc = KMDataNodeOpenNodeRead(parent, &node, "%s", name);
+    if (rc != 0)
+    {
+        if (GetRCState(rc) == rcNotFound && optional)
+        {
+            *result = 0;
+            rc = 0;
+        }
+        else if ( quick )
+        {
+            PLOGERR(klogInt, (klogInt, rc, "while opening $(parent)/$(child)",
+                              "parent=%s,child=%s", parentName, name));
+        }
+    }
+    else {
+        rc = KMDataNodeReadAsU64(node, result);
+        if (GetRCObject(rc) == rcTransfer && GetRCState(rc) == rcIncomplete) {
+            *result = 0;
+            rc = 0;
+        }
+        if ( rc != 0 && quick )
+        {
+            PLOGERR(klogInt, (klogInt, rc, "while reading $(parent)/$(child)",
+                              "parent=%s,child=%s", parentName, name));
+        }
+    }
+    
+    RELEASE(KMDataNode, node);
+    
+    return rc;
+}
+
+static
+rc_t readStatsMetaAttr(const KMDataNode* parent, const char* parentName,
+    const char* name, char ** result, bool quick, bool optional)
+{
+    rc_t rc = 0;
+    char temp[4096];
+    size_t actsize;
+
+    assert(parent && parentName && name && result);
+
+    rc = KMDataNodeReadAttr(parent, name, temp, sizeof(temp), &actsize);
+    if (GetRCState(rc) == rcInsufficient)
+    {
+        *result = malloc(actsize + 1);
+        if (*result)
+            rc = KMDataNodeReadAttr(parent, name, *result, actsize, &actsize);
+    }
+    else if (rc == 0)
+    {
+        *result = strdup(temp);
+    }
+    if (rc == 0 && *result == NULL)
+    {
+        rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+    else if (rc != 0)
+    {
+        if (GetRCState(rc) == rcNotFound && optional)
+        {
+            *result = 0;
+            rc = 0;
+        }
+        else
+        {
+            PLOGERR(klogInt, (klogInt, rc, "while opening $(parent)[$(child)]",
+                "parent=%s,child=%s", parentName, name));
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t readStatsMetaNodes(const KMDataNode* parent, const char* name,
+                        SraStatsMeta* stats, bool quick)
+{
+    rc_t rc = 0;
+    const char *const parentName = name ? name : "STATS/TABLE";
+
+    assert(parent && stats);
+
+    if (name) {
+        char *tempname;
+
+        rc = readStatsMetaAttr(parent, parentName, "name", &tempname, quick, true);
+        if (rc == 0) {
+            if (tempname)
+                stats->spot_group = tempname;
+            else {
+                stats->spot_group = strdup(name);
+                if (stats->spot_group == NULL)
+                {   rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+            }
+        }
+    }
+
+    if (rc == 0) {
+        rc = readStatsMetaNode(parent,
+            parentName, "BASE_COUNT", &stats->BASE_COUNT, quick, false);
+    }
+    if (rc == 0) {
+        rc = readStatsMetaNode(parent,
+            parentName, "BIO_BASE_COUNT", &stats->BIO_BASE_COUNT, quick, false);
+    }
+    if (rc == 0) {
+        rc = readStatsMetaNode(parent,
+            parentName, "SPOT_COUNT", &stats->spot_count, quick, false);
+    }
+    if (rc == 0) {
+        rc = readStatsMetaNode(parent,
+            parentName, "CMP_BASE_COUNT", &stats->CMP_BASE_COUNT, quick, true);
+    }
+
+    if (rc == 0)
+    {   stats->found = true; }
+    else { SraStatsMetaDestroy(stats); }
+
+    return rc;
+}
+
+static
+rc_t get_stats_meta(const KMetadata* meta,
+    MetaDataStats* stats, bool quick)
+{
+    rc_t rc = 0;
+    assert(meta && stats);
+    memset(stats, 0, sizeof *stats);
+
+    if (rc == 0) {
+        const char name[] = "STATS/TABLE";
+        const KMDataNode* node = NULL;
+        rc = KMetadataOpenNodeRead(meta, &node, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+        if (rc == 0 && node)
+        {   rc = readStatsMetaNodes(node, NULL, &stats->table, quick); }
+        RELEASE(KMDataNode, node);
+    }
+
+    if (rc == 0) {
+        const char name[] = "STATS/SPOT_GROUP";
+        const KMDataNode* parent = NULL;
+        rc = KMetadataOpenNodeRead(meta, &parent, "%s", name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+
+        if (rc == 0 && parent) {
+            uint32_t count = 0, i = 0;
+            KNamelist* names = NULL;
+            rc = KMDataNodeListChild(parent, &names);
+            DISP_RC2(rc, name, "while calling KMDataNodeListChild");
+            if (rc == 0) {
+                rc = KNamelistCount(names, &count);
+                DISP_RC2(rc, name, "while calling KNamelistCount");
+                if (rc == 0) {
+                    stats->spotGroupN = count;
+                    stats->spotGroup = calloc(count, sizeof *stats->spotGroup);
+                    if (stats->spotGroup == NULL) {
+                        rc = RC(rcExe,
+                            rcStorage, rcAllocating, rcMemory, rcExhausted);
+                    }
+                }
+            }
+
+            for (i = 0; i < count && rc == 0; ++i) {
+                const KMDataNode* node = NULL;
+                const char* child = NULL;
+                rc = KNamelistGet(names, i, &child);
+                if (rc != 0) {
+                    PLOGERR(klogInt, (klogInt, rc,
+                        "while calling STATS/SPOT_GROUP::KNamelistGet($(idx))",
+                        "idx=%i", i));
+                }
+                else {
+                    rc = KMDataNodeOpenNodeRead(parent, &node, "%s", child);
+                    DISP_RC2(rc, child, "while calling KMDataNodeOpenNodeRead");
+                }
+                if (rc == 0) {
+                    rc = readStatsMetaNodes
+                        (node, child, &stats->spotGroup[i], quick);
+                }
+                RELEASE(KMDataNode, node);
+            }
+            RELEASE(KNamelist, names);
+        }
+        RELEASE(KMDataNode, parent);
+    }
+
+    if (rc == 0) {
+        uint32_t i = 0;
+        bool found = stats->table.found;
+        for (i = 0; i < stats->spotGroupN && found; ++i)
+        {   found = stats->spotGroup[i].found; }
+        stats->found = found;
+    }
+
+    return rc;
+}
+
+static
+void srastatmeta_print(const MetaDataStats* meta, srastat_parms *pb)
+{
+    uint32_t i = 0;
+    assert(pb && meta);
+
+    if (meta->spotGroupN) {
+        for (i = 0; i < meta->spotGroupN; ++i) {
+            const SraStatsMeta* ss = &meta->spotGroup[i];
+            if (!pb->skip_members) {
+                const char* spot_group = "";
+                if (strcmp("default", ss->spot_group) != 0)
+                {   spot_group = ss->spot_group; }
+                if ((spot_group == NULL || spot_group[0] == '\0')
+                    && meta->spotGroupN > 1)
+                {
+                    /* skip an empty "extra" 'default' spot_group */
+                    if (ss->BASE_COUNT == 0     && ss->BIO_BASE_COUNT == 0 &&
+                        ss->CMP_BASE_COUNT == 0 && ss->spot_count == 0)
+                    {   continue; }
+                }
+                if (pb->xml) {
+                    if (pb->hasSPOT_GROUP) {
+                       OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
+                       OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                            ss->spot_count, ss->BASE_COUNT));
+                       OUTMSG((" base_count_bio=\"%ld\"", ss->BIO_BASE_COUNT));
+                       if (ss->CMP_BASE_COUNT > 0) {
+                           OUTMSG((" cmp_base_count=\"%ld\"",
+                               ss->CMP_BASE_COUNT));
+                       }
+                       BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+                       OUTMSG(("/>\n"));
+                    }
+                }
+                else {
+                    OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+                        pb->table_path, spot_group, ss->spot_count,
+                        ss->BASE_COUNT, ss->BIO_BASE_COUNT));
+                }
+            }
+            pb->total.spot_count += ss->spot_count;
+            pb->total.BASE_COUNT += ss->BASE_COUNT;
+            pb->total.BIO_BASE_COUNT += ss->BIO_BASE_COUNT;
+            pb->total.total_cmp_len += ss->CMP_BASE_COUNT;
+        }
+    }
+    else {
+        if (!pb->xml && !(pb->quick && pb->skip_members)) {
+                const char* spot_group = "";
+                OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+                        pb->table_path, spot_group, meta->table.spot_count,
+                        meta->table.BASE_COUNT, meta->table.BIO_BASE_COUNT));
+        }
+        pb->total.spot_count = meta->table.spot_count;
+        pb->total.BASE_COUNT = meta->table.BASE_COUNT;
+        pb->total.BIO_BASE_COUNT = meta->table.BIO_BASE_COUNT;
+        pb->total.total_cmp_len = meta->table.CMP_BASE_COUNT;
+    }
+}
+
+static
+void CC srastat_print( BSTNode* n, void* data )
+{
+    srastat_parms *pb = (srastat_parms*) data;
+    const SraStats *ss = (const SraStats*) n;
+    assert(pb && ss);
+    if (!pb->skip_members) {
+        if (pb->xml) {
+            if (pb->hasSPOT_GROUP) {
+                OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
+                OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"", ss->spot_count, ss->total_len));
+                OUTMSG((" base_count_bio=\"%ld\"", ss->bio_len));
+                OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"", ss->spot_count_mates, ss->bio_len_mates));
+                OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"", ss->bad_spot_count, ss->bad_bio_len));
+                OUTMSG((" spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+                    ss->filtered_spot_count, ss->filtered_bio_len));
+                if (ss->total_cmp_len > 0)
+                {   OUTMSG((" cmp_base_count=\"%ld\"", ss->total_cmp_len)); }
+                BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+                OUTMSG(("/>\n"));
+            }
+        }
+        else {
+            OUTMSG(("%s|%s|%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+                pb->table_path,ss->spot_group,ss->spot_count,ss->total_len,ss->bio_len,ss->spot_count_mates,ss->bio_len_mates,
+                ss->bad_spot_count,ss->bad_bio_len,ss->filtered_spot_count,ss->filtered_bio_len));
+        }
+    }
+    pb->total.spot_count += ss->spot_count;
+    pb->total.spot_count_mates += ss->spot_count_mates;
+    pb->total.BIO_BASE_COUNT += ss->bio_len;
+    pb->total.bio_len_mates += ss->bio_len_mates;
+    pb->total.BASE_COUNT += ss->total_len;
+    pb->total.bad_spot_count += ss->bad_spot_count;
+    pb->total.bad_bio_len += ss->bad_bio_len;
+    pb->total.filtered_spot_count += ss->filtered_spot_count;
+    pb->total.filtered_bio_len += ss->filtered_bio_len;
+    pb->total.total_cmp_len += ss->total_cmp_len;
+}
+
+static
+rc_t process_align_info(const char* indent, const Ctx* ctx)
+{
+    rc_t rc = 0;
+    uint32_t count = 0;
+    int i = 0;
+    const VDBDependencies* dep = NULL;
+
+    assert(indent && ctx);
+
+    if (ctx->db == NULL) {
+        return rc;
+    }
+
+    rc = VDatabaseListDependencies(ctx->db, &dep, false);
+    DISP_RC2(rc, ctx->pb->table_path,
+        "while calling VDatabaseListDependencies");
+
+    rc = VDBDependenciesCount(dep, &count);
+    if (rc) {
+        DISP_RC(rc, "while calling VDBDependenciesCount");
+        return rc;
+    }
+
+
+    OUTMSG(("%s<AlignInfo>\n", indent));
+
+    for (i = 0; i < count && rc == 0; ++i) {
+        bool circular = false;
+        const char* name = NULL;
+        const char* path = NULL;
+        bool local = false;
+        const char* seqId = NULL;
+
+        rc = VDBDependenciesCircular(dep, &circular, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesCircular");
+            break;
+        }
+        rc = VDBDependenciesName(dep, &name, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesName");
+            break;
+        }
+        rc = VDBDependenciesPath(dep, &path, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesPath");
+            break;
+        }
+        rc = VDBDependenciesLocal(dep, &local, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesLocal");
+            break;
+        }
+        rc = VDBDependenciesSeqId(dep, &seqId, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesSeqId");
+            break;
+        }
+
+        OUTMSG((
+            "%s  <Ref seqId=\"%s\" name=\"%s\" circular=\"%s\" local=\"%s\"",
+            indent, seqId, name, (circular ? "true" : "false"),
+            (local ? "local" : "remote")));
+        if (path && path[0]) {
+            OUTMSG((" path=\"%s\"", path));
+        }
+        OUTMSG(("/>\n"));
+    }
+
+    OUTMSG(("%s</AlignInfo>\n", indent));
+
+    RELEASE(VDBDependencies, dep);
+
+    return rc;
+}
+
+static
+rc_t print_results(const Ctx* ctx)
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    bool mismatch = false;
+
+    assert(ctx && ctx->pb
+        && ctx->tr && ctx->sizes && ctx->info && ctx->meta && ctx->total);
+
+    if (ctx->pb->quick) {
+        if ( ! ctx->meta -> found )
+            LOGMSG(klogWarn, "Statistics metadata not found");
+        else
+        {
+            ctx->pb->hasSPOT_GROUP = ctx->meta->spotGroupN > 1 ||
+                (ctx->meta->spotGroupN == 1
+                 && strcmp("default", ctx->meta->spotGroup[0].spot_group) != 0);
+        }
+    }
+
+    if (ctx->meta->found && ! ctx->pb->quick) {
+/*      bool mismatch = false; */
+        SraStats* ss = (SraStats*)BSTreeFind(ctx->tr, "", srastats_cmp);
+        const SraStatsMeta* m = &ctx->meta->table;
+        if (ctx->total->BASE_COUNT != m->BASE_COUNT)
+        { mismatch = true; }
+        if (ctx->total->BIO_BASE_COUNT != m->BIO_BASE_COUNT)
+        { mismatch = true; }
+        if (ctx->total->spot_count != m->spot_count)
+        { mismatch = true; }
+        if (ctx->total->total_cmp_len != m->CMP_BASE_COUNT)
+        { mismatch = true; }
+        if (ss != NULL) {
+            const SraStatsMeta* m = &ctx->meta->table;
+            uint32_t i = 0;
+            for (i = 0; i < ctx->meta->spotGroupN && !mismatch; ++i) {
+                const char* spot_group = "";
+                m = &ctx->meta->spotGroup[i];
+                assert(m);
+                if (strcmp("default", m->spot_group) != 0)
+                {   spot_group = m->spot_group; }
+                ss = (SraStats*)BSTreeFind(ctx->tr, spot_group, srastats_cmp);
+                if (ss == NULL) {
+                    mismatch = true;
+                    break;
+                }
+                if (ss->total_len != m->BASE_COUNT
+                    || ss->bio_len != m->BIO_BASE_COUNT
+                    || ss->spot_count != m->spot_count
+                    || ss->total_cmp_len != m->CMP_BASE_COUNT)
+                {
+                    mismatch = true;
+                    break;
+                }
+            }
+        }
+    }
+
+    if (ctx->pb->xml) {
+        OUTMSG(("<Run accession=\"%s\"", ctx->pb->table_path));
+        if (!ctx->pb->quick || ! ctx->meta->found) {
+            OUTMSG((" read_length=\"%s\"",
+                ctx->pb->variableReadLength ? "variable" : "fixed"));
+        }
+        if (ctx->pb->quick) {
+            OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                ctx->meta->table.spot_count, ctx->meta->table.BASE_COUNT));
+            OUTMSG((" base_count_bio=\"%ld\"",
+                ctx->meta->table.BIO_BASE_COUNT));
+            if (ctx->meta->table.CMP_BASE_COUNT > 0) {
+                OUTMSG((" cmp_base_count=\"%ld\"",
+                    ctx->meta->table.CMP_BASE_COUNT));
+            }
+        }
+        else {
+            OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                ctx->total->spot_count, ctx->total->BASE_COUNT));
+            OUTMSG((" base_count_bio=\"%ld\"", ctx->total->BIO_BASE_COUNT));
+            OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"",
+                ctx->total->spot_count_mates, ctx->total->bio_len_mates));
+            OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"",
+                ctx->total->bad_spot_count, ctx->total->bad_bio_len));
+            OUTMSG((
+                " spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+                ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
+            if (ctx->total->total_cmp_len > 0) {
+                OUTMSG((" cmp_base_count=\"%ld\"", ctx->total->total_cmp_len));
+            }
+        }
+        OUTMSG((">\n"));
+    }
+    else if (ctx->pb->skip_members) {
+        if (ctx->pb->quick) {
+            OUTMSG(("%s||%ld:%ld:%ld|:|:|:\n",
+                ctx->pb->table_path, ctx->meta->table.spot_count,
+                ctx->meta->table.BASE_COUNT, ctx->meta->table.BIO_BASE_COUNT));
+        }
+        else {
+            OUTMSG(("%s||%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+                ctx->pb->table_path,
+                ctx->total->spot_count, ctx->total->BASE_COUNT,
+                ctx->total->BIO_BASE_COUNT,
+                ctx->total->spot_count_mates, ctx->total->bio_len_mates,
+                ctx->total->bad_spot_count, ctx->total->bad_bio_len,
+                ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
+        }
+    }
+
+    if (ctx->pb->quick && ctx->meta->found) {
+        memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+        rc = parse_bam_header(ctx->db, meta_RG_callback, ctx->meta);
+        srastatmeta_print(ctx->meta, ctx->pb);
+        if (ctx->pb->total.spot_count != ctx->meta->table.spot_count ||
+            ctx->pb->total.BIO_BASE_COUNT != ctx->meta->table.BIO_BASE_COUNT ||
+            ctx->pb->total.BASE_COUNT != ctx->meta->table.BASE_COUNT ||
+            ctx->pb->total.total_cmp_len != ctx->meta->table.CMP_BASE_COUNT)
+        {
+            rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+        }
+        assert(rc == 0);
+    }
+    else {
+        memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+        rc = parse_bam_header(ctx->db, tree_RG_callback, ctx->tr);
+        BSTreeForEach(ctx->tr, false, srastat_print, ctx->pb);
+        if (ctx->meta->found) {
+            const SraStatsMeta* m = &ctx->meta->table;
+            if (ctx->pb->total.BASE_COUNT != m->BASE_COUNT
+                || ctx->pb->total.BIO_BASE_COUNT != m->BIO_BASE_COUNT
+                || ctx->pb->total.spot_count != m->spot_count)
+            {
+                mismatch = true;
+            }
+            if (ctx->pb->total.total_cmp_len != m->CMP_BASE_COUNT)
+            {   mismatch = true; }
+        }
+        if (ctx->pb->total.spot_count != ctx->total->spot_count ||
+            ctx->pb->total.spot_count_mates != ctx->total->spot_count_mates ||
+            ctx->pb->total.BIO_BASE_COUNT != ctx->total->BIO_BASE_COUNT ||
+            ctx->pb->total.bio_len_mates != ctx->total->bio_len_mates ||
+            ctx->pb->total.BASE_COUNT != ctx->total->BASE_COUNT ||
+            ctx->pb->total.bad_spot_count != ctx->total->bad_spot_count ||
+            ctx->pb->total.bad_bio_len != ctx->total->bad_bio_len ||
+            ctx->pb->total.filtered_spot_count
+                != ctx->total->filtered_spot_count ||
+            ctx->pb->total.filtered_bio_len != ctx->total->filtered_bio_len ||
+            ctx->pb->total.total_cmp_len != ctx->total->total_cmp_len)
+        {
+            rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+        }
+        assert(rc == 0);
+    }
+
+    if (ctx->pb->xml) {
+        if (ctx->sizes) {
+            OUTMSG(("  <Size value=\"%lu\" units=\"bytes\"/>\n",
+                ctx->sizes->size));
+        }
+        if (ctx->pb->printMeta && ctx->info->tblVersion >= 0) {
+            OUTMSG(("  <Table vers=\"%d\">\n    <Meta vers=\"%d\">\n",
+                ctx->info->tblVersion, ctx->info->metaVersion));
+            if (ctx->info->formatter.name[0] || ctx->info->formatter.vers[0] ||
+                ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+                ctx->info->loader.vers[0])
+            {
+                OUTMSG(("      <SOFTWARE>\n"));
+                if (ctx->info->formatter.name[0] ||
+                    ctx->info->formatter.vers[0])
+                {
+                    OUTMSG(("        <formatter"));
+                    if (ctx->info->formatter.name[0])
+                    {   OUTMSG((" name=\"%s\"", ctx->info->formatter.name)); }
+                    if (ctx->info->formatter.vers[0])
+                    {   OUTMSG((" vers=\"%s\"", ctx->info->formatter.vers)); }
+                    OUTMSG(("/>\n"));
+                }
+                if (ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+                    ctx->info->loader.vers[0])
+                {
+                    OUTMSG(("        <loader"));
+                    if (ctx->info->loader.date[0])
+                    {   OUTMSG((" date=\"%s\"", ctx->info->loader.date)); }
+                    if (ctx->info->loader.name[0])
+                    {   OUTMSG((" name=\"%s\"", ctx->info->loader.name)); }
+                    if (ctx->info->loader.vers[0])
+                    {   OUTMSG((" vers=\"%s\"", ctx->info->loader.vers)); }
+                    OUTMSG(("/>\n"));
+                }
+                OUTMSG(("      </SOFTWARE>\n"));
+            }
+            if (ctx->info->loadTimestamp) {
+                char       buf[80];
+                struct tm* ts = localtime(&ctx->info->loadTimestamp);
+                strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
+                OUTMSG(("      <LOAD timestamp=\"%lX\">%s</LOAD>\n",
+                    ctx->info->loadTimestamp, buf));
+            }
+            OUTMSG(("    </Meta>\n  </Table>\n"));
+        }
+        if (rc == 0 && !ctx->pb->quick) {
+            rc2 = BasesPrint(&ctx->total->bases_count,
+                ctx->total->BASE_COUNT, "  ");
+        }
+        if (rc == 0 && !ctx->pb->skip_alignment) {
+            rc = process_align_info("  ", ctx);
+        }
+        if (rc == 0 && ctx->pb->statistics) {
+            rc = SraStatsTotalPrintStatistics(ctx->total, "  ", ctx->pb->test);
+        }
+        if (rc == 0 && ctx->pb->print_arcinfo) {
+            const ArcInfo* a = ctx->arc_info;
+            uint32_t i;
+            char b[1024];
+            time_t ts = a->timestamp;
+            struct tm* tm = localtime(&ts);
+
+            if( tm == NULL ) {
+                rc = RC(rcExe, rcData, rcReading, rcParam, rcInvalid);
+            }
+            else {
+                size_t k = strftime(b, sizeof(b), "%Y-%m-%dT%H:%M:%S", tm);
+                OUTMSG(("  <Archive timestamp=\"%.*s\"", k, b));
+                for(i = 0; i < sizeof(a->i) / sizeof(a->i[0]); i++) {
+                    OUTMSG((" size.%s=\"%lu\" md5.%s=\"%s\"",
+                        a->i[i].tag, a->i[i].size, a->i[i].tag, a->i[i].md5));
+                }
+                OUTMSG((" />\n"));
+            }
+        }
+        if (rc == 0)
+        {   rc = QualityStatsPrint(&ctx->quality, "  "); }
+        if (rc == 0)
+        {   rc = TableCountsPrint(&ctx->tables, "  "); }
+        OUTMSG(("</Run>\n"));
+    }
+    if (mismatch && ctx->pb->start == 0 && ctx->pb->stop == 0) {
+        /* check mismatch just when no --start, --stop specified */
+        LOGMSG(klogWarn,
+            "Mismatch between calculated and recorded statistics");
+    }
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    return rc;
+}
+
+static
+void CC bst_whack_free ( BSTNode *n, void *ignore )
+{
+    SraStats* ss = (SraStats*)n;
+    BAM_HEADER_RG_free(&ss->BAM_HEADER);
+    free(ss);
+}
+
+static 
+int64_t CC srastats_sort ( const BSTNode *item, const BSTNode *n )
+{
+    const SraStats *ss = ( const SraStats* ) item;
+    return srastats_cmp(ss->spot_group,n);
+}
+
+static rc_t sra_stat(srastat_parms* pb, BSTree* tr,
+    SraStatsTotal* total, const VTable *vtbl)
+{
+    rc_t rc = 0;
+
+    const VCursor *curs = NULL;
+
+/*  const char CMP_READ  [] = "CMP_READ"; */
+    const char PRIMARY_ALIGNMENT_ID[] = "PRIMARY_ALIGNMENT_ID";
+    const char RD_FILTER [] = "RD_FILTER";
+    const char READ_LEN  [] = "READ_LEN";
+    const char READ_TYPE [] = "READ_TYPE";
+    const char SPOT_GROUP[] = "SPOT_GROUP";
+
+    uint32_t idxPRIMARY_ALIGNMENT_ID = 0;
+    uint32_t idxRD_FILTER = 0;
+    uint32_t idxREAD_LEN = 0;
+    uint32_t idxREAD_TYPE = 0;
+    uint32_t idxSPOT_GROUP = 0;
+
+    int g_nreads = 0;
+    int64_t  n_spots = 0;
+    int64_t start = 0;
+    int64_t stop  = 0;
+
+    /* filled with dREAD_LEN[i] for (spotid == start);
+       used to check fixedReadLength */
+    uint64_t g_totalREAD_LEN[MAX_NREADS];
+    uint64_t g_nonZeroLenReads[MAX_NREADS];
+    memset(g_totalREAD_LEN, 0, sizeof g_totalREAD_LEN);
+    memset(g_nonZeroLenReads, 0, sizeof g_nonZeroLenReads);
+
+    rc = VTableCreateCachedCursorRead(vtbl, &curs, DEFAULT_CURSOR_CAPACITY);
+    DISP_RC(rc, "Cannot VTableCreateCachedCursorRead");
+
+    if (rc == 0) {
+        rc = VCursorPermitPostOpenAdd(curs);
+        DISP_RC(rc, "Cannot VCursorPermitPostOpenAdd");
+    }
+
+    if (rc == 0) {
+        rc = VCursorOpen(curs);
+        DISP_RC(rc, "Cannot VCursorOpen");
+    }
+
+    assert(pb && vtbl && tr && total);
+
+    if (rc == 0) {
+        const char* name = READ_LEN;
+        rc = VCursorAddColumn(curs, &idxREAD_LEN, "%s", name);
+        DISP_RC2(rc, name, "while calling VCursorAddColumn");
+    }
+    if (rc == 0) {
+        const char* name = READ_TYPE;
+        rc = VCursorAddColumn(curs, &idxREAD_TYPE, "%s", name);
+        DISP_RC2(rc, name, "while calling VCursorAddColumn");
+    }
+
+    if (rc == 0) {
+        {
+            const char* name = SPOT_GROUP;
+            rc = VCursorAddColumn(curs, &idxSPOT_GROUP, "%s", name);
+            if (columnUndefined(rc)) {
+                idxSPOT_GROUP = 0;
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling VCursorAddColumn");
+        }
+        if (rc == 0) {
+            if (rc == 0) {
+                const char* name = RD_FILTER;
+                rc = VCursorAddColumn(curs, &idxRD_FILTER, "%s", name);
+                if (columnUndefined(rc)) {
+                    idxRD_FILTER = 0;
+                    rc = 0;
+                }
+                DISP_RC2(rc, name, "while calling VCursorAddColumn");
+            }
+/*          if (rc == 0) {
+                const char* name = CMP_READ;
+                rc = SRATableOpenColumnRead
+                    (tbl, &cCMP_READ, name, "INSDC:dna:text");
+                if (GetRCState(rc) == rcNotFound)
+                {   rc = 0; }
+                DISP_RC2(rc, name, "while calling SRATableOpenColumnRead");
+            } */
+            if (rc == 0) {
+                const char* name = PRIMARY_ALIGNMENT_ID;
+                rc = VCursorAddColumn(curs, &idxPRIMARY_ALIGNMENT_ID,
+                    "%s", name);
+                if (columnUndefined(rc)) {
+                    idxPRIMARY_ALIGNMENT_ID = 0;
+                    rc = 0;
+                }
+                DISP_RC2(rc, name, "while calling VCursorAddColumn");
+            }
+            if (rc == 0) {
+                int64_t first = 0;
+                uint64_t count = 0;
+                int64_t spotid;
+                pb->hasSPOT_GROUP = 0;
+                rc = VCursorIdRange(curs, 0, &first, &count);
+                DISP_RC(rc, "VCursorIdRange() failed");
+                if (rc == 0) {
+                    rc = BasesInit(&total->bases_count, vtbl);
+                }
+                if (rc == 0) {
+                    const KLoadProgressbar *pr = NULL;
+                    bool bad_read_filter = false;
+                    bool fixedNReads = true;
+                    bool fixedReadLength = true;
+
+                    uint32_t g_dREAD_LEN[MAX_NREADS];
+
+                    memset(g_dREAD_LEN, 0, sizeof g_dREAD_LEN);
+
+                    if (pb->start > 0) {
+                        start = pb->start;
+                        if (start < first) {
+                            start = first;
+                        }
+                    }
+                    else {
+                        start = first;
+                    }
+
+                    if (pb->stop > 0) {
+                        stop = pb->stop;
+                        if (stop > first + count) {
+                            stop = first + count;
+                        }
+                    }
+                    else {
+                        stop = first + count;
+                    }
+
+                    for (spotid = start; spotid < stop && rc == 0; ++spotid) {
+                        SraStats* ss;
+                        uint32_t dREAD_LEN  [MAX_NREADS];
+                        uint8_t  dREAD_TYPE [MAX_NREADS];
+                        uint8_t  dRD_FILTER [MAX_NREADS];
+                        char     dSPOT_GROUP[MAX_NREADS] = "NULL";
+
+                        const void* base;
+                        bitsz_t boff, row_bits;
+                        int nreads;
+
+                        rc = Quitting();
+                        if (rc != 0) {
+                            LOGMSG(klogWarn, "Interrupted");
+                        }
+
+                        if (rc == 0 && pb->progress && pr == NULL) {
+                            rc = KLoadProgressbar_Make(&pr, stop + 1 - start);
+                            if (rc != 0) {
+                                DISP_RC(rc, "cannot initialize progress bar");
+                                rc = 0;
+                                pr = NULL;
+                            }
+                            else if (stop - start > 99) {
+                                KLoadProgressbar_Process(pr, 0, true);
+                            }
+                        }
+
+                        if (rc == 0) {
+                            rc = VCursorColumnRead(curs, spotid,
+                                idxREAD_LEN, &base, &boff, &row_bits);
+                            DISP_RC_Read(rc, READ_LEN, spotid,
+                                "while calling VCursorColumnRead");
+                        }
+                        if (rc == 0) {
+                            if (boff & 7) {
+                                rc = RC(rcExe, rcColumn, rcReading,
+                                    rcOffset, rcInvalid);
+                            }
+                            if (row_bits & 7) {
+                                rc = RC(rcExe, rcColumn, rcReading,
+                                    rcSize, rcInvalid);
+                            }
+                            if ((row_bits >> 3) > sizeof(dREAD_LEN)) {
+                                rc = RC(rcExe, rcColumn, rcReading,
+                                    rcBuffer, rcInsufficient);
+                            }
+                            DISP_RC_Read(rc, READ_LEN, spotid,
+                                "after calling VCursorColumnRead");
+                        }
+                        if (rc == 0) {
+                            int i, bio_len, bio_count, bad_cnt, filt_cnt;
+                            memmove(dREAD_LEN,
+                                ((const char*)base) + (boff>>3), row_bits >> 3);
+                            nreads = (row_bits >> 3) / sizeof(*dREAD_LEN);
+                            if (spotid == start) {
+                                g_nreads = nreads;
+                                if (pb->statistics) {
+                                    rc = SraStatsTotalMakeStatistics
+                                        (total, g_nreads);
+                                }
+                            }
+                            else if (g_nreads != nreads) {
+                                fixedNReads = false;
+                            }
+
+                            if (rc == 0) {
+                                rc = VCursorColumnRead(curs, spotid,
+                                    idxREAD_TYPE, &base, &boff, &row_bits);
+                                DISP_RC_Read(rc, READ_TYPE, spotid,
+                                    "while calling VCursorColumnRead");
+                                if (rc == 0) {
+                                    if (boff & 7) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcOffset, rcInvalid);
+                                    }
+                                    if (row_bits & 7) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcSize, rcInvalid);
+                                    }
+                                    if ((row_bits >> 3) > sizeof(dREAD_TYPE)) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcBuffer, rcInsufficient);
+                                    }
+                                    if ((row_bits >> 3) !=  nreads) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcData, rcIncorrect);
+                                    }
+                                    DISP_RC_Read(rc, READ_TYPE, spotid,
+                                        "after calling VCursorColumnRead");
+                                }
+                            }
+                            if (rc == 0) {
+                                memmove(dREAD_TYPE,
+                                    ((const char*)base) + (boff >> 3),
+                                    row_bits >> 3);
+                                if (idxSPOT_GROUP != 0) {
+                                    rc = VCursorColumnRead(curs, spotid,
+                                        idxSPOT_GROUP, &base, &boff, &row_bits);
+                                    DISP_RC_Read(rc, SPOT_GROUP, spotid,
+                                        "while calling VCursorColumnRead");
+                                    if (rc == 0) {
+                                        if (row_bits > 0) {
+                                            if (boff & 7) {
+                                                rc = RC(rcExe, rcColumn,
+                                                    rcReading,
+                                                    rcOffset, rcInvalid);
+                                            }
+                                            if (row_bits & 7) {
+                                                rc = RC(rcExe, rcColumn,
+                                                    rcReading,
+                                                    rcSize, rcInvalid); }
+                                            if ((row_bits >> 3)
+                                                > sizeof(dSPOT_GROUP))
+                                            {
+                                                rc = RC(rcExe, rcColumn,
+                                                    rcReading,
+                                                    rcBuffer, rcInsufficient);
+                                            }
+                                            DISP_RC_Read(rc, SPOT_GROUP, spotid,
+                                               "after calling VCursorColumnRead"
+                                               );
+                                            if (rc == 0) {
+                                                int n = row_bits >> 3;
+                                                memmove(dSPOT_GROUP,
+                                                  ((const char*)base)+(boff>>3),
+                                                  row_bits>>3);
+                                                dSPOT_GROUP[n]='\0';
+                                                if (n > 1 ||
+                                                    (n == 1 && dSPOT_GROUP[0]))
+                                                {
+                                                    pb -> hasSPOT_GROUP = 1;
+                                                }
+                                            }
+                                        }
+                                        else {
+                                            dSPOT_GROUP[0]='\0';
+                                        }
+                                    }
+                                    else {
+                                        break;
+                                    }
+                                }
+                            }
+                            if (rc == 0) {
+                                uint64_t cmp_len = 0; /* CMP_READ */
+                                if (idxRD_FILTER != 0) {
+                                    rc = VCursorColumnRead(curs, spotid,
+                                        idxRD_FILTER, &base, &boff, &row_bits);
+                                    DISP_RC_Read(rc, RD_FILTER, spotid,
+                                        "while calling VCursorColumnRead");
+                                    if (rc == 0) {
+                                        int size = row_bits >> 3;
+                                        if (boff & 7) {
+                                            rc = RC(rcExe, rcColumn, rcReading,
+                                                rcOffset, rcInvalid); }
+                                        if (row_bits & 7) {
+                                            rc = RC(rcExe, rcColumn, rcReading,
+                                                rcSize, rcInvalid);
+                                        }
+                                        if (size > sizeof dRD_FILTER) {
+                                            rc = RC(rcExe, rcColumn, rcReading,
+                                                rcBuffer, rcInsufficient);
+                                        }
+                                        DISP_RC_Read(rc, RD_FILTER, spotid,
+                                            "after calling VCursorColumnRead");
+                                        if (rc == 0) {
+                                            memmove(dRD_FILTER,
+                                                ((const char*)base) + (boff>>3),
+                                                size);
+                                            if (size < nreads) {
+                             /* RD_FILTER is expected to have nreads elements */
+                                                if (size == 1) {
+                             /* fill all RD_FILTER elements with RD_FILTER[0] */
+                                                    int i = 0;
+                                                    for (i = 1; i < nreads;
+                                                        ++i)
+                                                    {
+                                                        memmove(dRD_FILTER + i,
+                                                  ((const char*)base)+(boff>>3),
+                                                  1);
+                                                    }
+                                                    if
+                                                     (!bad_read_filter)
+                                                    {
+                                                        bad_read_filter = true;
+                                                        PLOGMSG(klogWarn,
+                                                            (klogWarn,
+             "RD_FILTER column size is 1 but it is expected to be $(n)",
+                                                            "n=%d", nreads));
+                                                    }
+                                                }
+                                                else {
+                                  /* something really bad with RD_FILTER column:
+                                     let's pretend it does not exist */
+                                                    idxRD_FILTER = 0;
+                                                    bad_read_filter = true;
+                                                    PLOGMSG(klogWarn,
+                                                        (klogWarn,
+             "RD_FILTER column size is $(real) but it is expected to be $(exp)",
+                                                        "real=%d,exp=%d",
+                                                        size, nreads));
+                                                }
+                                            }
+                                        }
+                                    }
+                                    else {
+                                        break;
+                                    }
+                                }
+                                if (idxPRIMARY_ALIGNMENT_ID != 0) {
+                                    rc = VCursorColumnRead(curs, spotid,
+                                        idxPRIMARY_ALIGNMENT_ID,
+                                        &base, &boff, &row_bits);
+                                    DISP_RC_Read(rc, PRIMARY_ALIGNMENT_ID,
+                                        spotid,
+                                        "while calling VCursorColumnRead");
+                                    if (boff & 7) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcOffset, rcInvalid); }
+                                    if (row_bits & 7) {
+                                        rc = RC(rcExe, rcColumn, rcReading,
+                                            rcSize, rcInvalid);
+                                    }
+                                    DISP_RC_Read(rc, PRIMARY_ALIGNMENT_ID,
+                                       spotid,
+                                       "after calling calling VCursorColumnRead"
+                                       );
+                                    if (rc == 0) {
+                                        int i = 0;
+                                        const int64_t* pii = base;
+                                        assert(nreads);
+                                        for (i = 0; i < nreads; ++i) {
+                                            if (pii[i] == 0) {
+                                                cmp_len += dREAD_LEN[i];
+                                            }
+                                        }
+                                    }
+                                }
+/*                              if (cCMP_READ) {
+      rc = SRAColumnRead(cCMP_READ, spotid, &base, &boff, &row_bits);
+      DISP_RC_Read(rc, CMP_READ, spotid, "while calling SRAColumnRead");
+      if (boff & 7)
+      {   rc = RC(rcExe, rcColumn, rcReading, rcOffset, rcInvalid); }
+      if (row_bits & 7)
+      {   rc = RC(rcExe, rcColumn, rcReading, rcSize, rcInvalid); }
+      DISP_RC_Read(rc, CMP_READ, spotid, "after calling calling SRAColumnRead");
+      if (rc == 0)
+      {   assert(cmp_len == row_bits >> 3); }
+                                               } */
+
+                                ss = (SraStats*)BSTreeFind
+                                    (tr, dSPOT_GROUP, srastats_cmp);
+                                if (ss == NULL) {
+                                    ss = calloc(1, sizeof(*ss));
+                                    if (ss == NULL) {
+                                        rc = RC(rcExe, rcStorage, rcAllocating,
+                                            rcMemory, rcExhausted);
+                                        break;
+                                    }
+                                    else {
+                                        strcpy(ss->spot_group, dSPOT_GROUP);
+                                        BSTreeInsert
+                                            (tr, (BSTNode*)ss, srastats_sort);
+                                    }
+                                }
+                                ++ss->spot_count;
+                                ++total->spot_count;
+
+                                ss->total_cmp_len += cmp_len;
+                                total->total_cmp_len += cmp_len;
+
+                                BasesAdd(&total->bases_count, spotid);
+
+                                if (pb->statistics) {
+                                    SraStatsTotalAdd(total, dREAD_LEN, nreads);
+                                }
+                                for (bio_len = bio_count = i = bad_cnt
+                                        = filt_cnt = 0;
+                                    (i < nreads) && (rc == 0); i++)
+                                {
+                                    if (dREAD_LEN[i] > 0) {
+                                        g_totalREAD_LEN[i] += dREAD_LEN[i];
+                                        ++g_nonZeroLenReads[i];
+                                    }
+                                    if (spotid == start) {
+                                        g_dREAD_LEN[i] = dREAD_LEN[i];
+                                    }
+                                    else if (g_dREAD_LEN[i] != dREAD_LEN[i]) {
+                                        fixedReadLength = false;
+                                    }
+
+                                    if (dREAD_LEN[i] > 0) {
+                                        bool biological = false;
+                                        ss->total_len += dREAD_LEN[i];
+                                        total->BASE_COUNT += dREAD_LEN[i];
+                                        if ((dREAD_TYPE[i]
+                                            & SRA_READ_TYPE_BIOLOGICAL) != 0)
+                                        {
+                                            biological = true;
+                                            bio_len += dREAD_LEN[i];
+                                            bio_count++;
+                                        }
+                                        if (idxRD_FILTER != 0) {
+                                            switch (dRD_FILTER[i]) {
+                                                case SRA_READ_FILTER_PASS:
+                                                    break;
+                                                case SRA_READ_FILTER_REJECT:
+                                                case SRA_READ_FILTER_CRITERIA:
+                                                    if (biological) {
+                                                        ss->bad_bio_len
+                                                            += dREAD_LEN[i];
+                                                        total->bad_bio_len
+                                                            += dREAD_LEN[i];
+                                                    }
+                                                    bad_cnt++;
+                                                    break;
+                                                case SRA_READ_FILTER_REDACTED:
+                                                    if (biological) {
+                                                        ss->filtered_bio_len
+                                                            += dREAD_LEN[i];
+                                                        total->filtered_bio_len
+                                                            += dREAD_LEN[i];
+                                                    }
+                                                    filt_cnt++;
+                                                    break;
+                                                default:
+                                                    rc = RC(rcExe, rcColumn,
+                                                        rcReading,
+                                                        rcData, rcUnexpected);
+                                                    PLOGERR(klogInt,
+                                                        (klogInt, rc,
+    "spot=$(spot), read=$(read), READ_FILTER=$(val)", "spot=%lu,read=%d,val=%d",
+                                                        spotid, i,
+                                                        dRD_FILTER[i]));
+                                                    break;
+                                            }
+                                        }
+                                    }
+                                }
+                                ss->bio_len += bio_len;
+                                total->BIO_BASE_COUNT += bio_len;
+                                if (bio_count > 1) {
+                                    ++ss->spot_count_mates;
+                                    ++total->spot_count_mates;
+                                    ss->bio_len_mates += bio_len;
+                                    total->bio_len_mates += bio_len;
+                                }
+                                if (bad_cnt) {
+                                    ss->bad_spot_count++;
+                                    total->bad_spot_count++;
+                                }
+                                if (filt_cnt) {
+                                    ss->filtered_spot_count++;
+                                    total->filtered_spot_count++;
+                                }
+                            }
+
+                            if (rc == 0 && pb->progress) {
+                                KLoadProgressbar_Process(pr, 1, false);
+                            }
+                        }
+                    } /* for (spotid = start; spotid <= stop && rc == 0;
+                              ++spotid) */
+
+                    if (rc == 0) {
+                        BasesFinalize(&total->bases_count);
+                        pb->variableReadLength = !fixedReadLength;
+
+              /* --- g_totalREAD_LEN[i] is sum(READ_LEN[i]) for all spots --- */
+                        if (fixedNReads) {
+                            int i = 0;
+                            if (stop >= start) {
+                                n_spots = stop - start;
+                            }
+                            if (n_spots > 0) {
+                                for (i = 0; i < g_nreads && rc == 0; ++i) {
+                                    if (fixedReadLength) {
+                                        assert(g_totalREAD_LEN[i] / n_spots
+                                            == g_dREAD_LEN[i]);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    if (rc == 0) {
+                        KLoadProgressbar_Release(pr, true);
+                        pr = NULL;
+                    }
+                }
+            }
+        }
+    }
+
+    RELEASE(VCursor, curs);
+
+    if (pb->test && rc == 0) {
+        uint32_t idx = 0;
+        int i = 0;
+        int64_t spotid = 0;
+
+        double average[MAX_NREADS];
+        double diff_sq[MAX_NREADS];
+        SraStatsTotalStatistics2Init(total,
+            g_nreads, g_totalREAD_LEN, g_nonZeroLenReads);
+        memset(diff_sq, 0, sizeof diff_sq);
+        for (i = 0; i < g_nreads; ++i) {
+            average[i] = (double)g_totalREAD_LEN[i] / n_spots;
+        }
+
+        rc = VTableCreateCachedCursorRead(vtbl, &curs, DEFAULT_CURSOR_CAPACITY);
+        DISP_RC(rc, "Cannot VTableCreateCachedCursorRead");
+
+        if (rc == 0) {
+            const char* name = READ_LEN;
+            rc = VCursorAddColumn(curs, &idx, "%s", name);
+            DISP_RC(rc, "Cannot VCursorAddColumn(READ_LEN)");
+            if (rc == 0) {
+                rc = VCursorOpen(curs);
+                if (rc != 0) {
+                    PLOGERR(klogInt, (klogInt,
+                        rc, "Cannot VCursorOpen($(name))", "name=%s", name));
+                }
+            }
+        }
+
+        for (spotid = start; spotid < stop && rc == 0; ++spotid) {
+            uint32_t dREAD_LEN[MAX_NREADS];
+            const void* base;
+            bitsz_t boff, row_bits;
+            if (rc == 0) {
+                rc = VCursorColumnRead(curs, spotid,
+                    idx, &base, &boff, &row_bits);
+                DISP_RC_Read(rc, READ_LEN, spotid,
+                    "while calling VCursorColumnRead");
+            }
+            if (rc == 0) {
+                memmove(dREAD_LEN, ((const char*)base) + (boff>>3), row_bits>>3);
+            }
+            for (i = 0; i < g_nreads; ++i) {
+                diff_sq[i] +=
+                    (dREAD_LEN[i] - average[i]) * (dREAD_LEN[i] - average[i]);
+            }
+            SraStatsTotalAdd2(total, dREAD_LEN);
+        }
+        RELEASE(VCursor, curs);
+    }
+
+    return rc;
+}
+
+static
+void CtxRelease(Ctx* ctx)
+{
+    assert(ctx);
+
+    QualityStatsRelease(&ctx->quality);
+    TableCountsRelease(&ctx->tables);
+
+    memset(ctx, 0, sizeof *ctx);
+}
+static
+rc_t run(srastat_parms* pb)
+{
+    rc_t rc = 0;
+    const VDBManager* vmgr = NULL;
+
+    assert(pb && pb->table_path);
+
+    rc = VDBManagerMakeRead(&vmgr, NULL);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "failed to open VDBManager");
+    }
+    else {
+        SraSizeStats sizes;
+        ArcInfo arc_info;
+        SraMeta info;
+        const VTable* vtbl = NULL;
+
+        VSchema *schema = NULL;
+
+        rc = VDBManagerMakeSRASchema(vmgr, &schema);
+        if (rc != 0) {
+            LOGERR(klogInt, rc, "cannot VDBManagerMakeSRASchema");
+        }
+        if (rc == 0) {
+            rc = VDBManagerOpenTableRead(vmgr, &vtbl,
+                schema, "%s", pb->table_path);
+            if (rc != 0 && GetRCObject(rc) == (enum RCObject)rcTable
+                        && GetRCState (rc) == rcIncorrect)
+            {
+                const char altname[] = "SEQUENCE";
+                const VDatabase *db = NULL;
+                rc_t rc2 = VDBManagerOpenDBRead(vmgr,
+                    &db, schema, pb->table_path);
+                if (rc2 == 0) {
+                    rc2 = VDatabaseOpenTableRead(db, &vtbl, "%s", altname);
+                    if (rc2 == 0) {
+                        rc = 0;
+                    }
+                }
+                VDatabaseRelease ( db );
+            }
+            if (rc != 0) {
+                PLOGERR(klogInt, (klogInt, rc,
+                    "'$(spec)'", "spec=%s", pb->table_path));
+            }
+        }
+        if (rc == 0) {
+            MetaDataStats stats;
+            SraStatsTotal total;
+            const KTable* ktbl = NULL;
+            const KMetadata* meta = NULL;
+            const VDatabase* db = NULL;
+
+            BSTree tr;
+            Ctx ctx;
+
+            BSTreeInit(&tr);
+            memset(&ctx, 0, sizeof ctx);
+
+            memset(&total, 0, sizeof total);
+
+            rc = VTableOpenKTableRead(vtbl, &ktbl);
+            DISP_RC(rc, "While calling VTableOpenKTableRead");
+            if (rc == 0) {
+                rc = KTableOpenMetadataRead(ktbl, &meta);
+                DISP_RC(rc, "While calling KTableOpenMetadataRead");
+            }
+            if (rc == 0) {
+                rc = VTableOpenParentRead(vtbl, &db);
+                DISP_RC2(rc, pb->table_path,
+                    "while calling VTableOpenParentRead");
+            }
+            if (rc == 0) {
+                rc = get_stats_meta(meta, &stats, pb->quick);
+                if (rc == 0) {
+                    if (pb->quick && !stats.found) {
+                        LOGMSG(klogWarn, "Statistics metadata not found: "
+                            "performing full table scan");
+                        pb->quick = false;
+                    }
+                }
+                rc = 0;
+            }
+            if (rc == 0) {
+                rc = get_size(&sizes, vtbl);
+            }
+            if (rc == 0 && pb->printMeta) {
+                rc = get_load_info(meta, &info);
+            }
+            if (rc == 0 && !pb->quick) {
+                rc = sra_stat(pb, &tr, &total, vtbl);
+            }
+            if (rc == 0 && pb->print_arcinfo ) {
+                rc = get_arc_info(pb->table_path, &arc_info, vmgr, vtbl);
+            }
+            if (rc == 0) {
+                rc = QualityStatsRead(&ctx.quality, meta);
+                if (rc == 0) {
+                    QualityStatsSort(&ctx.quality);
+                }
+            }
+            if (rc == 0) {
+                rc = TableCountsRead(&ctx.tables, db);
+                if (rc == 0) {
+                    TableCountsSort(&ctx.tables);
+                }
+            }
+            if (rc == 0) {
+                ctx.db = db;
+                ctx.info = &info;
+                ctx.meta = &stats;
+                ctx.pb = pb;
+                ctx.sizes = &sizes;
+                ctx.total = &total;
+                ctx.arc_info = &arc_info;
+                ctx.tr = &tr;
+                rc = print_results(&ctx);
+            }
+            BSTreeWhack(&tr, bst_whack_free, NULL);
+            SraStatsTotalFree(&total);
+            RELEASE(VDatabase, db);
+            RELEASE(KTable, ktbl);
+            {
+                int i; 
+                for (i = 0; i < stats.spotGroupN; ++i) {
+                    SraStatsMetaDestroy(&stats.spotGroup[i]);
+                }
+
+                SraStatsMetaDestroy(&stats.table);
+
+                free(stats.spotGroup);
+                stats.spotGroup = NULL;
+            }
+            CtxRelease(&ctx);
+            RELEASE(KMetadata, meta);
+        }
+        RELEASE(VSchema, schema);
+        RELEASE(VTable, vtbl);
+    }
+
+    RELEASE(VDBManager, vmgr);
+
+    return rc;
+}
+
+/* Usage */
+#define ALIAS_ALIGN    "a"
+#define OPTION_ALIGN   "alignment"
+
+#define ALIAS_ARCINFO  NULL
+#define OPTION_ARCINFO "archive-info"
+
+#define ALIAS_START    "b"
+#define OPTION_START   "start"
+
+#define ALIAS_STOP     "e"
+#define OPTION_STOP    "stop"
+
+#define ALIAS_SPT_D    "d"
+#define OPTION_SPT_D   "spot-desc"
+
+#define ALIAS_META     "m"
+#define OPTION_META    "meta"
+
+#define ALIAS_MEMBR    NULL
+#define OPTION_MEMBR   "member-stats"
+
+#define ALIAS_PROGRESS "p"
+#define OPTION_PROGRESS "show_progress"
+
+#define ALIAS_QUICK    "q"
+#define OPTION_QUICK   "quick"
+
+#define ALIAS_STATS    "s"
+#define OPTION_STATS   "statistics"
+
+#define ALIAS_TEST     "t"
+#define OPTION_TEST    "test"
+
+#define ALIAS_XML      "x"
+#define OPTION_XML     "xml"
+
+static const char * align_usage[] = { "print alignment info, default is on"
+                                                                   , NULL };
+static const char * spt_d_usage[] = { "print table spot descriptor", NULL };
+static const char * membr_usage[] = { "print member stats, default is on"
+                                                          , NULL };
+static const char *progress_usage[] = { "show the percentage of completion"
+                                                          , NULL };
+static const char * meta_usage[] = { "print load metadata", NULL };
+static const char * start_usage[] = { "starting spot id, default is 1", NULL };
+static const char * stop_usage[] = { "ending spot id, default is max", NULL };
+static const char * stats_usage[] = {
+       "calculate READ_LEN average and standard deviation", NULL };
+static const char * quick_usage[] = {
+   "quick mode: get statistics from metadata;", "do not scan the table", NULL };
+static const char * test_usage[] = {
+   "test READ_LEN average and standard deviation calculation", NULL };
+static const char * xml_usage[] = { "output as XML, default is text", NULL };
+static const char * arcinfo_usage[] = { "output archive info, default is off"
+                                                                    , NULL };
+
+OptDef Options[] = {
+      { OPTION_ALIGN   , ALIAS_ALIGN   , NULL, align_usage   , 1, true , false }
+    , { OPTION_SPT_D   , ALIAS_SPT_D   , NULL, spt_d_usage   , 1, false, false }
+    , { OPTION_MEMBR   , ALIAS_MEMBR   , NULL, membr_usage   , 1, true , false }
+    , { OPTION_PROGRESS, ALIAS_PROGRESS, NULL, progress_usage, 1, false, false }
+    , { OPTION_ARCINFO , ALIAS_ARCINFO , NULL, arcinfo_usage , 0, false, false }
+    , { OPTION_META    , ALIAS_META    , NULL, meta_usage    , 1, false, false }
+    , { OPTION_QUICK   , ALIAS_QUICK   , NULL, quick_usage   , 1, false, false }
+    , { OPTION_START   , ALIAS_START   , NULL, start_usage   , 1, true,  false }
+    , { OPTION_STATS   , ALIAS_STATS   , NULL, stats_usage   , 1, false, false }
+    , { OPTION_STOP    , ALIAS_STOP    , NULL, stop_usage    , 1, true,  false }
+    , { OPTION_TEST    , ALIAS_TEST    , NULL, test_usage    , 1, false, false }
+    , { OPTION_XML     , ALIAS_XML     , NULL, xml_usage     , 1, false, false }
+};
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] table\n"
+        "\n"
+        "Summary:\n"
+        "  Display table statistics\n"
+        "\n", progname);
+}
+
+const char UsageDefaultName[] = "sra-stat";
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine(ALIAS_XML     , OPTION_XML     , NULL      , xml_usage);
+    HelpOptionLine(ALIAS_START   , OPTION_START   , "row-id"  , start_usage);
+    HelpOptionLine(ALIAS_STOP    , OPTION_STOP    , "row-id"  , stop_usage);
+    HelpOptionLine(ALIAS_META    , OPTION_META    , NULL      , meta_usage);
+    HelpOptionLine(ALIAS_QUICK   , OPTION_QUICK   , NULL      , quick_usage);
+    HelpOptionLine(ALIAS_MEMBR   , OPTION_MEMBR   , "on | off", membr_usage);
+    HelpOptionLine(ALIAS_ARCINFO , OPTION_ARCINFO , NULL      , arcinfo_usage);
+    HelpOptionLine(ALIAS_STATS   , OPTION_STATS   , NULL      , stats_usage);
+    HelpOptionLine(ALIAS_ALIGN   , OPTION_ALIGN   , "on | off", align_usage);
+    HelpOptionLine(ALIAS_PROGRESS, OPTION_PROGRESS, NULL      , progress_usage);
+    XMLLogger_Usage();
+
+    KOutMsg ("\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc = 0;
+
+    srastat_parms pb;
+    memset(&pb, 0, sizeof pb);
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 2, Options,
+        sizeof Options / sizeof(OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+    if (rc == 0) {
+        do {
+            uint32_t pcount = 0;
+            const char* pc = NULL;
+
+            {
+                rc = ArgsOptionCount (args, OPTION_START, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount == 1) {
+                    rc = ArgsOptionValue (args, OPTION_START, 0, (const void **)&pc);
+                    if (rc != 0) {
+                        break;
+                    }
+
+                    pb.start = AsciiToU32 (pc, NULL, NULL);
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_STOP, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+
+                if (pcount == 1) {
+                    rc = ArgsOptionValue (args, OPTION_STOP, 0, (const void **)&pc);
+                    if (rc != 0) {
+                        break;
+                    }
+
+                    pb.stop = AsciiToU32 (pc, NULL, NULL);
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_XML, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    pb.xml = true;
+                }
+            }
+
+            {
+                rc = ArgsOptionCount (args, OPTION_QUICK, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    pb.quick = true;
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_META, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    pb.printMeta = true;
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_MEMBR, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    const char* v = NULL;
+                    rc = ArgsOptionValue (args, OPTION_MEMBR, 0, (const void **)&v);
+                    if (rc != 0) {
+                        break;
+                    }
+                    if (!strcmp(v, "off")) {
+                        pb.skip_members = true;
+                    }
+                }
+            }
+
+            {
+                rc = ArgsOptionCount(args, OPTION_PROGRESS, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+                if (pcount > 0) {
+                    KLogLevel l = KLogLevelGet();
+                    pb.progress = true;
+                    rc = ArgsOptionCount(args, OPTION_LOG_LEVEL, &pcount);
+                    if (rc == 0) {
+                        if (pcount == 0) {
+                            if (l < klogInfo) {
+                                KLogLevelSet(klogInfo);
+                            }
+                        }
+                        else if (l < klogInfo) {
+                            LOGMSG(klogWarn, "log-level was set: "
+                                "progress will not be shown");
+                        }
+                    }
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_ARCINFO, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                pb.print_arcinfo = pcount > 0;
+            }
+
+            {
+                rc = ArgsOptionCount (args, OPTION_ALIGN, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    const char* v = NULL;
+                    rc = ArgsOptionValue (args, OPTION_ALIGN, 0, (const void **)&v);
+                    if (rc != 0) {
+                        break;
+                    }
+                    if (!strcmp(v, "off")) {
+                        pb.skip_alignment = true;
+                    }
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_STATS, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    pb.statistics = true;
+                }
+
+
+                rc = ArgsOptionCount (args, OPTION_TEST, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount > 0) {
+                    pb.test = pb.statistics = true;
+                }
+            }
+
+            {
+                rc = ArgsParamCount (args, &pcount);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pcount == 0) {
+                    MiniUsage (args);
+                    exit(1);
+                }
+
+
+                rc = ArgsParamValue (args, 0, (const void **)&pb.table_path);
+                if (rc != 0) {
+                    break;
+                }
+
+                if (pb.statistics && (pb.quick || ! pb.xml)) {
+                    KOutMsg("\n--" OPTION_STATS
+                        " option can be used just in XML NON-QUICK mode\n");
+                    MiniUsage (args);
+                    exit(1);
+                }
+
+                rc = XMLLogger_Make(&pb.logger, NULL, args);
+                if (rc != 0) {
+                    DISP_RC(rc, "cannot initialize XMLLogger");
+                    rc = 0;
+                }
+            }
+        } while (0);
+    }
+
+    if (rc == 0) {
+        rc = run(&pb);
+    }
+    else {
+        DISP_RC(rc, "while processing command line");
+    }
+
+    XMLLogger_Release(pb.logger);
+
+    {
+        rc_t rc2 = ArgsWhack(args);
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
diff --git a/tools/sra-stat/sra-stat.h b/tools/sra-stat/sra-stat.h
new file mode 100644
index 0000000..1415ae2
--- /dev/null
+++ b/tools/sra-stat/sra-stat.h
@@ -0,0 +1,42 @@
+#ifndef _h_sra_stat_tools_
+#define _h_sra_stat_tools_
+
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/defs.h> /* rc_t */
+
+struct KFile;
+struct VCursor;
+struct VTable;
+
+rc_t CC VCursorColumnRead(const struct VCursor *self, int64_t id,
+    uint32_t idx, const void **base, bitsz_t *offset, bitsz_t *size);
+
+rc_t CC VTableMakeSingleFileArchive(const struct VTable *self,
+    const struct KFile **sfa, bool lightweight);
+
+#endif /* _h_sra_stat_tools_ */
diff --git a/tools/sra-stat/sra.c b/tools/sra-stat/sra.c
new file mode 100644
index 0000000..b68e533
--- /dev/null
+++ b/tools/sra-stat/sra.c
@@ -0,0 +1,446 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*  A couple of function to ease migration from libsra to libvdb use.
+*  Maybe could be improved/optimized/removed later.
+*/
+
+#include "sra-stat.h" /* VTableMakeSingleFileArchive_ */
+
+#include <kdb/database.h> /* KDatabase */
+#include <kdb/kdb-priv.h> /* KDatabaseOpenDirectoryRead */
+#include <kdb/table.h> /* KTableRelease */
+
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+#include <kfs/toc.h> /* KDirectoryOpenTocFileRead */
+
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/log.h> /* LOGERR */
+#include <klib/rc.h>
+#include <klib/vector.h> /* Vector */
+
+#include <vdb/cursor.h> /* VCursor */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/table.h> /* VTableOpenParentRead */
+#include <vdb/vdb-priv.h> /* VDatabaseOpenKDatabaseRead */
+
+#include <string.h> /* memcmp */
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/* sfa_sort
+ *  reorders list
+ */
+enum sfa_path_type_id {
+    sfa_not_set = -1,
+    sfa_exclude,
+    sfa_non_column,
+    sfa_required,
+    sfa_preferred,
+    sfa_optional
+};
+#if _DEBUGGING
+static const char* sfa_path_type_id[] = {
+    "not_set",
+    "exclude",
+    "non_column",
+    "required",
+    "preferred",
+    "optional"
+};
+#endif
+
+#define MATCH( ptr, str ) \
+    ( (memcmp(ptr, str, sizeof(str) - 2) == 0 && \
+       ((ptr)[sizeof(str) - 2] == '\0' || (ptr)[sizeof(str) - 2] == '/')) \
+        ? (ptr) += sizeof(str) - (((ptr)[sizeof(str) - 2] == '/') ? 1 : 2) \
+        : (const char*) 0)
+
+static
+enum sfa_path_type_id CC sfa_path_type_tbl( const char *path )
+{
+    /* use first character as distinguisher for match */
+    switch ( path [ 0 ] )
+    {
+    case 'c':
+        /* perhaps it's a column */
+        if ( MATCH ( path, "col/" ) )
+        {
+            switch ( path [ 0 ] )
+            {
+            case 'D':
+                if ( MATCH ( path, "DELETION_QV/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "DELETION_TAG/" ) )
+                    return sfa_optional;
+                break;
+            case 'H':
+                if ( MATCH ( path, "HOLE_NUMBER/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "HOLE_STATUS/" ) )
+                    return sfa_optional;
+                break;
+            case 'I':
+                if ( MATCH ( path, "INTENSITY/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "INSERTION_QV/" ) )
+                    return sfa_optional;
+                break;
+            case 'N':
+                if ( MATCH ( path, "NAME_FMT/" ) )
+                    return sfa_preferred;
+                if ( MATCH ( path, "NAME/" ) )
+                    return sfa_preferred;
+                if ( MATCH ( path, "NOISE/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "NUM_PASSES/" ) )
+                    return sfa_optional;
+                break;
+            case 'P':
+                if ( MATCH ( path, "POSITION/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "PRE_BASE_FRAMES/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "PULSE_INDEX/" ) )
+                    return sfa_optional;
+                break;
+            case 'Q':
+                if ( MATCH ( path, "QUALITY2/" ) )
+                    return sfa_optional;
+                break;
+            case 'S':
+                if ( MATCH ( path, "SIGNAL/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "SPOT_NAME/" ) )
+                    return sfa_preferred;
+                if ( MATCH ( path, "SUBSTITUTION_QV/" ) )
+                    return sfa_optional;
+                if ( MATCH ( path, "SUBSTITUTION_TAG/" ) )
+                    return sfa_optional;
+                break;
+            case 'W':
+                if ( MATCH ( path, "WIDTH_IN_FRAMES/" ) )
+                    return sfa_optional;
+                break;
+            case 'X':
+            case 'Y':
+                if ( path [ 1 ] == '/' )
+                    return sfa_preferred;
+                break;
+            }
+        }
+        return sfa_required;
+
+    case 'i':
+        /* look for skey index */
+        if ( MATCH ( path, "idx/skey" ) )
+            if ( path [ 0 ] == 0 || strcmp ( path, ".md5" ) == 0 )
+                return sfa_preferred;
+        if ( MATCH ( path, "idx/fuse-" ) )
+            return sfa_exclude;
+        break;
+
+    case 's':
+        /* look for old skey index */
+        if ( MATCH ( path, "skey" ) )
+            if ( path [ 0 ] == 0 || strcmp ( path, ".md5" ) == 0 )
+                return sfa_preferred;
+        break;
+    }
+    /* anything not recognized is non-column required */
+    return sfa_non_column;
+}
+
+static
+enum sfa_path_type_id CC sfa_path_type_db ( const char *path )
+{
+    /* use first character as distinguisher for match */
+    switch ( path [ 0 ] )
+    {
+    case 't':
+        /* perhaps it's a table */
+        if ( MATCH ( path, "tbl/" ) )
+        {
+            switch ( path [ 0 ] )
+            {
+            case 0:
+                return sfa_non_column;
+            case 'S':
+                if ( MATCH ( path, "SEQUENCE/" ) )
+                    return sfa_path_type_tbl(path);
+                break;
+            case 'C':
+                if ( MATCH ( path, "CONSENSUS/" ) )
+                    return sfa_path_type_tbl(path);
+                break;
+            case 'P':
+                if ( MATCH ( path, "PRIMARY_ALIGNMENT/" ) )
+                    return sfa_path_type_tbl(path);
+                break;
+            case 'R':
+                if ( MATCH ( path, "REFERENCE/" ) )
+                    return sfa_path_type_tbl(path);
+                break;
+            }
+            /* all other tables are optional */
+            return sfa_optional;
+        }
+    }
+    /* anything not recognized is non-column required */
+    return sfa_non_column;
+}
+
+typedef enum sfa_path_type_id (CC *sfa_path_type_func)( const char *path );
+
+typedef
+struct to_nv_data_struct
+{
+    const KDirectory * d;
+    Vector * v;
+    rc_t rc;
+    sfa_path_type_func path_type;
+} to_nv_data;
+
+/* sfa_filter
+ *  if a name is found in list, exclude it
+ */
+#define DEBUG_SORT(msg) DBGMSG (DBG_APP, DBG_FLAG(DBG_APP_0), msg)
+
+typedef struct reorder_t_struct {
+    const char * path;
+    uint64_t     size;
+    enum sfa_path_type_id type_id;
+} reorder_t;
+
+static
+void CC to_nv (void * _item, void * _data)
+{
+    const char* path = _item;
+    to_nv_data* data = _data;
+    reorder_t* obj;
+
+    if (data->rc == 0)
+    {
+        obj = malloc (sizeof (*obj));
+        if (obj == NULL)
+            data->rc
+            = RC(rcSRA, rcVector, rcConstructing, rcMemory, rcExhausted);
+        else
+        {
+            rc_t rc = KDirectoryFileSize (data->d, &obj->size, "%s", path);
+            if (rc == 0)
+            {
+                obj->path = path;
+                obj->type_id = data->path_type(path);
+                rc = VectorAppend (data->v, NULL, obj);
+            }
+
+            if (rc)
+            {
+                free (obj);
+                data->rc = rc;
+            }
+        }
+    }
+}
+
+static
+int64_t CC sfa_path_cmp ( const void **_a, const void **_b, void * ignored )
+{
+    const reorder_t * a = *_a;
+    const reorder_t * b = *_b;
+    int ret;
+
+    DEBUG_SORT(("%s enter\t%s %s %lu \t%s %s %lu", __func__, 
+                a->path, sfa_path_type_id[a->type_id + 1], a->size,
+                b->path, sfa_path_type_id[b->type_id + 1], b->size));
+
+    ret = a->type_id - b->type_id;
+    if (ret == 0)
+    {
+        if (a->size > b->size)
+            ret = 1;
+        else if (a->size < b->size)
+            ret = -1;
+        else
+            ret = strcmp (a->path, b->path);
+    }
+    DEBUG_SORT(("\t%d\n", ret));
+    return ret;
+}
+
+static
+void CC item_whack (void * item, void * ignored)
+{
+    free (item);
+}
+
+static
+rc_t CC sfa_sort(const KDirectory *dir, Vector *v, sfa_path_type_func func) {
+    /* assume "v" is a vector of paths - hopefully relative to "dir" */
+    Vector nv;
+    to_nv_data data;
+    uint32_t base;
+
+    DEBUG_SORT(("%s enter\n", __func__));
+
+    base = VectorStart (v);
+    VectorInit (&nv, base, VectorLength (v));
+    data.d = dir;
+    data.v = &nv;
+    data.rc = 0;
+    data.path_type = func;
+
+    VectorForEach (v, false, to_nv, &data);
+
+    if(data.rc == 0) {
+        uint32_t idx = 0;
+        uint32_t limit = VectorLength (v) + base;
+
+        VectorReorder(&nv, sfa_path_cmp, NULL);
+
+        for (idx = base; idx < limit; ++idx) {
+            const reorder_t * tmp;
+            void * ignore;
+
+            tmp = VectorGet (&nv, idx);
+            data.rc = VectorSwap (v, idx + base, tmp->path, &ignore);
+            if(data.rc) {
+                break;
+            }
+        }
+    }
+    VectorWhack (&nv, item_whack, NULL);
+    DEBUG_SORT(("%s exit %d %R\n", __func__, data.rc, data.rc));
+    return data.rc;
+}
+
+static rc_t CC sfa_sort_db(const KDirectory *dir, Vector *v) {
+    return sfa_sort(dir, v, sfa_path_type_db);
+}
+
+static
+bool CC sfa_filter(const KDirectory *dir, const char *leaf, void* func)
+{
+    bool ret = true;
+    sfa_path_type_func f = (sfa_path_type_func)func;
+    enum sfa_path_type_id type = f(leaf);
+
+    ret = type >= sfa_non_column;
+    DEBUG_SORT(("%s: %s %s %s\n",
+        __func__, leaf, sfa_path_type_id[type + 1], ret ? "keep" : "drop"));
+    return ret;
+}
+
+static
+bool CC sfa_filter_light(const KDirectory *dir, const char *leaf, void* func)
+{
+    bool ret = true;
+    sfa_path_type_func f = (sfa_path_type_func)func;
+
+    enum sfa_path_type_id type = f(leaf);
+
+    ret = type >= sfa_non_column && type < sfa_optional;
+    DEBUG_SORT(("%s: %s %s %s\n",
+        __func__, leaf, sfa_path_type_id[type + 1], ret ? "keep" : "drop"));
+    return ret;
+}
+
+static rc_t CC sfa_sort_tbl(const KDirectory *dir, Vector *v) {
+    return sfa_sort(dir, v, sfa_path_type_tbl);
+}
+
+rc_t CC VTableMakeSingleFileArchive(const VTable *self,
+    const KFile **sfa, bool  lightweight)
+{
+    const VDatabase *db = NULL;
+    rc_t rc = VTableOpenParentRead(self, &db);
+
+    assert(sfa);
+
+    *sfa = NULL;
+
+    if (rc == 0 && db != NULL) {
+        const KDatabase *kdb = NULL;
+        const KDirectory *db_dir = NULL;
+        rc = VDatabaseOpenKDatabaseRead(db, &kdb);
+        DISP_RC(rc, "VDatabaseOpenKDatabaseRead");
+
+        if (rc == 0) {
+            rc = KDatabaseOpenDirectoryRead(kdb, &db_dir);
+            DISP_RC(rc, "KDatabaseOpenDirectoryRead");
+        }
+
+        if (rc == 0) {
+            rc = KDirectoryOpenTocFileRead(db_dir, sfa, sraAlign4Byte,
+                lightweight ? sfa_filter_light : sfa_filter,
+                (void *)sfa_path_type_db, sfa_sort_db);
+        }
+
+        RELEASE(KDirectory, db_dir);
+        RELEASE(KDatabase, kdb);
+    }
+    else {
+        const KTable *ktbl = NULL;
+        rc = VTableOpenKTableRead(self, &ktbl);
+        if (rc == 0) {
+            const KDirectory *tbl_dir = NULL;
+            rc = KTableGetDirectoryRead(ktbl, &tbl_dir);
+            if (rc == 0) {
+                rc = KDirectoryOpenTocFileRead(tbl_dir, sfa, sraAlign4Byte,
+                    lightweight ? sfa_filter_light : sfa_filter,
+                    (void *)sfa_path_type_tbl, sfa_sort_tbl);
+                KDirectoryRelease( tbl_dir );
+                KTableRelease(ktbl);
+            }
+        }
+    }
+
+    RELEASE(VDatabase, db);
+
+    return rc;
+}
+
+rc_t CC VCursorColumnRead(const VCursor *self, int64_t id,
+    uint32_t idx, const void **base, bitsz_t *offset, bitsz_t *size)
+{
+    uint32_t elem_bits = 0, elem_off = 0, elem_cnt = 0;
+    rc_t rc = VCursorCellDataDirect(self, id, idx,
+        &elem_bits, base, &elem_off, &elem_cnt);
+
+    assert(offset && size);
+
+    if (rc == 0) {
+        *offset = elem_off * elem_bits;
+        *size   = elem_cnt * elem_bits;
+    }
+    else {
+        *offset = *size = 0;
+    }
+
+    return rc;
+}
diff --git a/tools/sra/.cvsignore b/tools/sra/.cvsignore
new file mode 100644
index 0000000..29f1a27
--- /dev/null
+++ b/tools/sra/.cvsignore
@@ -0,0 +1 @@
+*.vers.h
diff --git a/tools/sra/Makefile b/tools/sra/Makefile
new file mode 100644
index 0000000..fea3026
--- /dev/null
+++ b/tools/sra/Makefile
@@ -0,0 +1,77 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/sra
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	table-vers
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# table-vers
+#
+TABLE_VERS_SRC = \
+	table-vers
+
+TABLE_VERS_OBJ = \
+	$(addsuffix .$(OBJX),$(TABLE_VERS_SRC))
+
+TABLE_VERS_LIB = \
+	-lkapp \
+	-stk-version \
+	-lncbi-vdb \
+	-lm
+
+$(BINDIR)/table-vers: $(TABLE_VERS_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(TABLE_VERS_LIB)
+
diff --git a/tools/sra/sra-dbcc.c b/tools/sra/sra-dbcc.c
new file mode 100644
index 0000000..e180edb
--- /dev/null
+++ b/tools/sra/sra-dbcc.c
@@ -0,0 +1,435 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <kapp/main.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/debug.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/namelist.h>
+#include <kdb/meta.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+#include <kfs/arc.h>
+#include <kfs/sra.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+rc_t CC Usage ( struct Args const * args ) { return 0; }
+
+static rc_t ValidateColumn(const KColumn *col,
+                           const char *name,
+                           int64_t start, int64_t stop,
+                           int64_t *min, int64_t *max,
+                           bool *gapped)
+{
+    rc_t rc;
+    int64_t row;
+    const KColumnBlob *blob;
+    
+    for (row = start; (rc = Quitting()) == 0 && row < stop; ) {
+        int64_t first;
+        uint32_t count;
+        
+        rc = KColumnOpenBlobRead(col, &blob, row);
+        if (rc == 0) {
+            rc = KColumnBlobIdRange(blob, &first, &count);
+            if (rc == 0)
+                rc = KColumnBlobValidate(blob);
+            rc = KColumnBlobRelease(blob);
+        }
+        if (rc) {
+            PLOGERR(klogErr, (klogErr, rc, "$(column) rows $(start) to $(stop)", PLOG_3(PLOG_S(column), PLOG_I64(start), PLOG_I64(stop)), name, first, first + count));
+            return rc;
+        }
+        if (row != first)
+            *gapped |= true;
+        if (row == start)
+            *min = first;
+        row = first + count;
+        *max = row;
+    }
+    if (row != stop)
+        *gapped |= true;
+    return rc;
+}
+
+static
+rc_t CheckTable(const char path[])
+{
+    rc_t rc;
+    const KDBManager *mgr;
+    bool gapped = false;
+    bool allsame = true;
+    int64_t first_row;
+    int64_t last_row;
+    
+    PLOGMSG(klogInfo, (klogInfo, "verifying column data for '$(path)'", PLOG_S(path), path));
+    rc = KDBManagerMakeRead(&mgr, NULL);
+    if (rc == 0) {
+        const KTable* tbl;
+        
+        rc = KDBManagerOpenTableRead(mgr, &tbl, "%s", path);
+        if (rc == 0) {
+            KNamelist *names;
+            
+            rc = KTableListCol(tbl, &names);
+            if (rc == 0) {
+                uint32_t count;
+                rc = KNamelistCount(names, &count);
+                if (rc == 0) {
+                    unsigned i;
+                    const char *colname;
+                    
+                    for (i = 0; i != count && rc == 0; ++i) {
+                        rc = KNamelistGet(names, i, &colname);
+                        if (rc == 0) {
+                            const KColumn *kcol;
+                            
+                            rc = KTableOpenColumnRead(tbl, &kcol, "%s", colname);
+                            if (rc == 0) {
+                                int64_t start;
+                                uint64_t rcount;
+                                int64_t min;
+                                int64_t max;
+                                
+                                rc = KColumnIdRange(kcol, &start, &rcount);
+                                if (rc == 0) {
+                                    PLOGMSG(klogInfo, (klogInfo, "validating data for column '$(name)'...", PLOG_S(name), colname));
+                                    rc = ValidateColumn(kcol, colname, start, start + rcount, &min, &max, &gapped);
+                                    if (rc == 0) {
+                                        PLOGMSG(klogInfo, (klogInfo, "data for column '$(name)' ok", PLOG_S(name), colname));
+                                        if (i == 0) {
+                                            first_row = min;
+                                            last_row = max;
+                                        }
+                                        else if (first_row != min || last_row != max)
+                                            allsame = false;
+                                    }
+                                    else {
+                                        PLOGERR(klogErr, (klogErr, rc, "data for column '$(name)'", PLOG_S(name), colname));
+                                    }
+
+                                    rc = 0;
+                                }
+                                else {
+                                    PLOGERR(klogErr, (klogErr, rc, "KColumn '$(name)'", PLOG_S(name), colname));
+                                    rc = 0;
+                                }
+                                KColumnRelease(kcol);
+                            }
+                            else {
+                                PLOGERR(klogErr, (klogErr, rc, "KColumn '$(name)'", PLOG_S(name), colname));
+                                rc = 0;
+                            }
+                        }
+                        else {
+                            PLOGERR(klogErr, (klogErr, rc, "KColumn #$(number)", PLOG_U32(number), (uint32_t)i));
+                            rc = 0;
+                        }
+                    }
+                }
+                else {
+                    PLOGERR(klogErr, (klogErr, rc, "KNamelistCount", ""));
+                }
+            }
+            KTableRelease(tbl);
+        }
+        else {
+            PLOGERR(klogErr, (klogErr, rc, "KTable '$(name)'", PLOG_S(name), path));
+        }
+        KDBManagerRelease(mgr);
+    }
+    else {
+        PLOGERR(klogErr, (klogErr, rc, "KDBManagerMakeRead", ""));
+    }
+    return rc;
+}
+
+typedef struct CheckMD5Node_struct {
+    BSTNode dad;
+    char file[4096];
+    bool md5;
+    uint8_t digest[16];
+} CheckMD5Node;
+
+typedef struct CheckMD5_Data_struct {
+    BSTree files;
+    bool md5;
+    uint8_t digest[16];
+} CheckMD5_Data;
+
+static
+int CC CheckMD5Node_Cmp( const BSTNode *item, const BSTNode *n )
+{
+    return strcmp(((CheckMD5Node*)item)->file, ((CheckMD5Node*)n)->file);
+}
+
+static
+rc_t CC CheckMD5Visitor(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+    rc_t rc = 0;
+    CheckMD5_Data* d = (CheckMD5_Data*)data;
+    
+    if(type == kptFile ) {
+        if( strcmp(name, "md5") == 0 || strcmp(&name[strlen(name) - 4], ".md5") == 0 ) {
+            const KFile* kfmd5;
+            if( (rc = KDirectoryOpenFileRead(dir, &kfmd5, "%s", name)) == 0 ) {
+                const KMD5SumFmt *md5;
+                if( (rc = KMD5SumFmtMakeRead(&md5, kfmd5)) == 0 ) {
+                    uint32_t count = 0;
+                    if( (rc = KMD5SumFmtCount(md5, &count)) == 0 ) {
+                        char buf[4096];
+                        bool bin;
+                        do {
+                            if( (rc = KMD5SumFmtGet(md5, --count, buf, sizeof(buf) - 1, d->digest, &bin)) == 0 ) {
+                                DBGMSG(DBG_APP, 0, ("md5 for $(nm) ", PLOG_S(nm), buf));
+                                d->md5 = true;
+                                rc = CheckMD5Visitor(dir, kptFile, buf, data);
+                                d->md5 = false;
+                            }
+                        } while( rc == 0 && count > 0 );
+                    }
+                    rc = KMD5SumFmtRelease(md5);
+                } else {
+                    KFileRelease(kfmd5);
+                }
+            }
+        } else {
+            CheckMD5Node* node = calloc(1, sizeof(*node));
+            if( (rc = KDirectoryResolvePath(dir, true, node->file, sizeof(node->file) - 1, "%s", name)) == 0 ) {
+                BSTNode* existing = NULL;
+                if( (rc = BSTreeInsertUnique(&d->files, &node->dad, &existing, CheckMD5Node_Cmp)) == 0 ) {
+                    DBGMSG(DBG_APP, 0, ("adding $(nm) ", PLOG_S(nm), node->file));
+                    if( d->md5 ) {
+                        node->md5 = true;
+                        memmove(node->digest, d->digest, sizeof(d->digest));
+                    }
+                } else if( GetRCState(rc) == rcExists ) {
+                    DBGMSG(DBG_APP, 0, ("updating $(nm) ", PLOG_S(nm), node->file));
+                    if( d->md5 ) {
+                        ((CheckMD5Node*)existing)->md5 = true;
+                        memmove(((CheckMD5Node*)existing)->digest, d->digest, sizeof(d->digest));
+                    }
+                    free(node);
+                    rc = 0;
+                }
+                if( rc != 0 ) {
+                    free(node);
+                }
+            }
+        }
+    } else if( (type != kptDir) && !(type & kptAlias) ) {
+        rc = RC(rcExe, rcTable, rcVisiting, rcDirEntry, rcInvalid);
+        PLOGERR(klogInfo, (klogInfo, rc, "$(nm)", PLOG_S(nm), name));
+    }
+    return rc;
+}
+
+typedef struct CheckMD5_WalkData_struct {
+    const KDirectory* dir;
+    rc_t rc;
+} CheckMD5_WalkData;
+
+static
+bool CC CheckMD5_Walk( BSTNode *n, void *data )
+{
+    rc_t rc = 0;
+    CheckMD5Node* m = (CheckMD5Node*)n;
+    CheckMD5_WalkData* d = (CheckMD5_WalkData*)data;
+    
+    if( m->md5 ) {
+        const KFile* kf;
+        DBGMSG(DBG_APP, 0, ("verifying $(nm) ", PLOG_S(nm), m->file));
+        if( (rc = KDirectoryOpenFileRead(d->dir, &kf, "%s", m->file)) == 0 ) {
+            const KFile* kfmd5;
+            if( (rc = KFileMakeMD5Read(&kfmd5, kf, m->digest)) == 0 ) {
+                char buf[10240];
+                size_t nr;
+                if( (rc = KFileRead(kfmd5, ~0, buf, sizeof(buf), &nr)) != 0 ) {
+                    PLOGERR(klogErr, (klogErr, rc, "MD5 check failed for file $(name)", PLOG_S(name), m->file));
+                }
+                KFileRelease(kfmd5);
+            } else {
+                KFileRelease(kf);
+            }
+        }
+    } else if( strcmp(&m->file[strlen(m->file) - 5 ], "/lock") != 0 &&
+              strcmp(&m->file[strlen(m->file) - 7 ], "/sealed") != 0) {
+        rc = RC(rcExe, rcTable, rcValidating, rcConstraint, rcInconsistent);
+        PLOGERR(klogWarn, (klogWarn, rc, "missing MD5 for file $(name)", PLOG_S(name), m->file));
+    }
+    d->rc = rc ? rc : d->rc;
+    if( d->rc == 0 && (d->rc = Quitting()) != 0 ) {
+        return true;
+    }
+    return false;
+}
+
+static
+rc_t CheckMD5(const char* path)
+{
+    rc_t rc = 0;
+    const KDirectory* dir = NULL;
+    
+    PLOGMSG(klogInfo, (klogInfo, "verifying MD5 for '$(path)'", PLOG_S(path), path));
+    if( (rc = KDirectoryNativeDir((KDirectory**)&dir)) == 0 ) {
+        uint32_t type = KDirectoryPathType(dir, "%s", path) & ~kptAlias;
+        
+        if( type == kptFile ) {
+            const KDirectory* adir = NULL;
+            
+            rc = KDirectoryOpenSraArchiveRead(dir, &adir, true, "%s", path);
+            if (rc == 0 ) {
+                KDirectoryRelease(dir);
+                dir = adir;
+                path = ".";
+            }
+        } else if( type != kptDir ) {
+            rc = RC(rcExe, rcTable, rcValidating, rcArc, rcUnknown);
+        }
+        if( rc == 0 ) {
+            CheckMD5_Data data;
+            BSTreeInit(&data.files);
+            data.md5 = false;
+            if( (rc = KDirectoryVisit(dir, true, CheckMD5Visitor, &data, "%s", path)) == 0 ) {
+                CheckMD5_WalkData wd;
+                wd.dir = dir;
+                wd.rc = 0;
+                BSTreeDoUntil(&data.files, false, CheckMD5_Walk, &wd);
+                rc = wd.rc;
+                LOGERR(rc ? klogErr : klogInfo, rc, "verifying MD5");
+            }
+        }
+        KDirectoryRelease(dir);
+    }
+    return rc;
+}
+
+
+static char const* const defaultLogLevel = 
+#if _DEBUGGING
+"debug5";
+#else
+"info";
+#endif
+
+/*******************************************************************************
+ * Usage
+ *******************************************************************************/
+static void usage(const char *progName)
+{
+    const char* p = strrchr(progName, '/');
+    p = p ? p + 1 : progName;
+    printf("\nUsage: %s [options] table\n\n", p);
+    printf(
+           "    -5, --md5        Check components md5s if present, fail otherwise, unless other checks are requested (default: yes)\n"
+           "    -b, --blob-crc   Check blobs CRC32 (default: no)\n"
+/*           "    -i, --index      Check 'skey' index (default: no)\n"*/
+           "\n"
+           "    -h, --help       This help\n"
+           "    -v, --version    Program version\n"
+           "\n");
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc = 0;
+    int i;
+    const char* arg;
+    const char* src_path = "missing parameter";
+    bool md5_chk = true, md5_chk_explicit = false;
+    bool blob_crc = false;
+    bool index_chk = false;
+
+    KLogLevelSet(klogInfo);
+    
+    for(i = 1; rc == 0 && i < argc; i++) {
+        if( argv[i][0] != '-' ) {
+            src_path = argv[i];
+            break;
+        } else if(strcmp(argv[i], "-5") == 0 || strcmp(argv[i], "--md5") == 0 ) {
+            md5_chk_explicit = true;
+        } else if(strcmp(argv[i], "-b") == 0 || strcmp(argv[i], "--blob-crc") == 0 ) {
+            blob_crc = true;
+/*        } else if(strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--index") == 0 ) {
+            index_chk = true;
+*/
+        } else if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0 ) {
+            usage(argv[0]);
+            return 0;
+        } else if(strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0 ) {
+            printf("Version: %u.%u.%u\n", KAppVersion() >> 24, (KAppVersion() >> 16) & 0xFF, KAppVersion() & 0xFFFF);
+            return 0;
+        } else {
+            usage(argv[0]);
+            rc = RC(rcExe, rcArgv, rcReading, rcParam, rcUnknown);
+        }
+    }
+    if(i != argc - 1) {
+        usage(argv[0]);
+        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcUnexpected);
+    }
+    
+    if( rc != 0 ) {
+    }
+    else if( src_path == NULL ) {
+        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcNotFound);
+    }
+    else {
+        if( blob_crc || index_chk ) {
+            /* if blob or index is requested, md5 is off unless explicitly requested */
+            md5_chk = md5_chk_explicit;
+        }
+        if( md5_chk ) {
+            rc = CheckMD5(src_path);
+            if( GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcInconsistent ) {
+                blob_crc = true;
+                rc = 0;
+            }
+        }
+        if (rc == 0 && blob_crc) {
+            rc = CheckTable(src_path);
+        }
+        if (rc == 0 && index_chk) {
+            /* rc = ValidateSKeyIndex(tbl); */
+        }
+    }
+    if( rc == 0 ) {
+        LOGMSG(klogInfo, "check ok");
+    } else {
+        PLOGERR(klogErr, (klogErr, rc, "check failed: '$(table)'", PLOG_S(table), src_path));
+    }
+    return rc;
+}
diff --git a/tools/sra/table-vers.c b/tools/sra/table-vers.c
new file mode 100644
index 0000000..ff9c9a8
--- /dev/null
+++ b/tools/sra/table-vers.c
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * =============================================================================
+ */
+
+#include <kapp/main.h>
+
+#include <vdb/manager.h> /* VDBManager */
+
+#include <kdb/database.h> /* KDatabase */
+#include <kdb/table.h> /* KDBTable */
+
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h> /* RC */
+
+#include <assert.h>
+#include <stdio.h> /* printf */
+#include <string.h> /* memset */
+
+#define DISP_RC(rc,msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+typedef enum EOutType {
+    eTxt,
+    eXml
+} EOutType;
+
+typedef struct CmdLine {
+	const char* table;
+    EOutType outType;
+} CmdLine;
+
+#define OPTION_OUTPUT  "output"
+#define ALIAS_OUTPUT   "o"
+
+static const char* output_usage[] = {
+    "Output type: one of (t | x)", "where 't' - text (default), 'x' - xml", NULL
+};
+
+OptDef Options[] =  {
+     { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true, false }
+};
+
+const char UsageDefaultName[] = "vable-vers";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg("Usage:\n"
+            "  %s [Options] <table>\n", progname);
+}
+
+rc_t CC Usage(const Args* args)
+{
+    rc_t rc = 0;
+    const char* progname = UsageDefaultName;
+    const char* fullpath = UsageDefaultName;
+
+    assert(args);
+
+    rc = ArgsProgram(args, &fullpath, &progname);
+    if (rc)
+    {    progname = fullpath = UsageDefaultName; }
+
+    UsageSummary(progname);
+
+    OUTMSG(("\nOptions\n"));
+
+    HelpOptionLine(ALIAS_OUTPUT, OPTION_OUTPUT, "type", output_usage);
+
+    HelpOptionsStandard();
+
+    HelpVersion(fullpath, KAppVersion());
+
+    return rc;
+}
+
+static rc_t CmdLineInit(const Args* args, CmdLine* cmdArgs)
+{
+    rc_t rc = 0;
+
+    assert(args && cmdArgs);
+
+    memset(cmdArgs, 0, sizeof *cmdArgs);
+
+    while (rc == 0) {
+        const char* outType = NULL;
+        uint32_t pcount = 0;
+
+        /* output type */
+        rc = ArgsOptionCount(args, OPTION_OUTPUT, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing output type");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many output type parameters");
+            break;
+        }
+        else if (pcount == 1) {
+            rc = ArgsOptionValue(args, OPTION_OUTPUT, 0, (const void **)&outType);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure retrieving output type");
+                break;
+            }
+            else if (outType != NULL) {
+                if (strncmp(outType, "x", 1) == 0) {
+                    cmdArgs->outType = eXml;
+                }
+                else if (strncmp(outType, "t", 1) == 0) {
+                    cmdArgs->outType = eTxt;
+                }
+                else {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc, "Bad output type value");
+                    break;
+                }
+            }
+        }
+
+        /* table path parameter */
+        rc = ArgsParamCount(args, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing table name");
+            break;
+        }
+        if (pcount < 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR(klogErr, rc, "Missing table parameter");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many table parameters");
+            break;
+        }
+        rc = ArgsParamValue(args, 0, (const void **)&cmdArgs->table);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure retrieving table name");
+            break;
+        }
+
+        break;
+    }
+
+    if (rc != 0) {
+        MiniUsage (args);
+    }
+
+    return rc;
+}
+
+rc_t CC KMain(int argc, char* argv[])
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+    const VDBManager* mgr = NULL;
+
+    CmdLine cmdArgs;
+
+    LogLevelSet("info");
+
+    rc = ArgsMakeAndHandle
+        (&args, argc, argv, 1, Options, sizeof Options / sizeof(Options[0]));
+
+    if (rc == 0) {
+        rc = CmdLineInit(args, &cmdArgs);
+    }
+    if (rc == 0) {
+        DBGMSG(DBG_APP,DBG_COND_1, ("out type = '%d'\n",cmdArgs.outType));
+        PLOGMSG
+            (klogInfo,(klogInfo, "Checking $(tbl)", "tbl=%s", cmdArgs.table));
+        rc = VDBManagerMakeRead(&mgr, NULL);
+        DISP_RC(rc, "while calling VDBManagerMakeRead");
+    }
+    if (rc == 0) {
+        ver_t version = 0;
+        rc = VDBManagerGetObjVersion(mgr, &version, cmdArgs.table);
+        if (rc == 0) {
+            uint32_t maj =  version >> 24;
+            uint32_t min = (version >> 16) & 0xFF;
+            uint32_t rel =  version & 0xFFFF;
+            switch (cmdArgs.outType) {
+                case eTxt:
+                    OUTMSG(("v%d\n", maj));
+                    break;
+                case eXml:
+                    OUTMSG(("<Object vers=\"%u\" path=\"%s\">",
+                        maj, cmdArgs.table));
+                    if (min || rel) {
+                        OUTMSG(("<loader vers=\"%u.%u.%u\"/>", maj, min, rel));
+                    }
+                    OUTMSG(("</Object>\n"));
+                    break;
+            }
+        } else {
+            PLOGERR(klogErr,
+                (klogErr, rc, "'$(path)'", "path=%s", cmdArgs.table));
+        }
+    }
+
+    RELEASE(VDBManager, mgr);
+
+    ArgsWhack(args);
+
+    return rc;
+}
+
+/************************************ EOF ****************** ******************/
diff --git a/tools/srapath/Makefile b/tools/srapath/Makefile
new file mode 100644
index 0000000..d4b20ff
--- /dev/null
+++ b/tools/srapath/Makefile
@@ -0,0 +1,79 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/srapath
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	srapath
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+	
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# srapath
+#
+SRAPATH_SRC = \
+	helper \
+	line_iter \
+	cgi_request \
+	srapath
+
+SRAPATH_OBJ = \
+	$(addsuffix .$(OBJX),$(SRAPATH_SRC))
+
+SRAPATH_LIB += \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+
+$(BINDIR)/srapath: $(SRAPATH_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SRAPATH_LIB)
+
diff --git a/tools/srapath/cgi_request.c b/tools/srapath/cgi_request.c
new file mode 100644
index 0000000..7bf91bb
--- /dev/null
+++ b/tools/srapath/cgi_request.c
@@ -0,0 +1,853 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cgi_request.h"
+#include "helper.h"
+#include "line_iter.h"
+
+#include <klib/text.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <kns/manager.h>
+#include <kns/http.h>
+#include <kns/stream.h>
+
+#include <string.h>
+
+typedef struct cgi_request
+{
+    char * url;
+    KNSManager * kns_mgr;
+    VNamelist * params;
+} cgi_request;
+
+
+void release_cgi_request( struct cgi_request * request )
+{
+    if ( request != NULL )
+    {
+        if ( request->kns_mgr != NULL )
+            KNSManagerRelease( request->kns_mgr );
+        if ( request->params != NULL )
+            VNamelistRelease( request->params );
+        if ( request->url != NULL )
+            free( ( void * ) request->url );
+        free( ( void * ) request );
+    }
+}
+
+
+rc_t make_cgi_request( struct cgi_request ** request, const char * url )
+{
+    rc_t rc = 0;
+    cgi_request * r = calloc( 1, sizeof * r );
+    if ( r == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "calloc( %d ) -> %R", ( sizeof * r ), rc );
+    }
+    else
+    {
+        r->url = string_dup_measure( url, NULL );
+        if ( r->url == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            ErrMsg( "string_dup_measure( '%s' ) -> %R", url, rc );
+        }
+        else
+        {
+            rc = VNamelistMake( &r->params, 10 );
+            if ( rc != 0 )
+                ErrMsg( "VNamelistMake() -> %R", rc );
+            else
+            {
+                rc = KNSManagerMake( &r->kns_mgr );
+                if ( rc != 0 )
+                    ErrMsg( "KNSManagerMake() -> %R", rc );
+                else
+                    *request = r;
+            }
+        }
+        if ( rc != 0 )
+            release_cgi_request( r );
+    }
+    return rc;
+}
+
+
+rc_t add_cgi_request_param( struct cgi_request * request, const char * fmt, ... )
+{
+    rc_t rc;
+    if ( request == NULL || fmt == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        va_list args;
+        char buffer[ 4096 ];
+        size_t num_writ;
+        
+        va_start ( args, fmt );
+        rc = string_vprintf( buffer, sizeof buffer, &num_writ, fmt, args );
+        if ( rc != 0 )
+            ErrMsg( "string_vprintf( '%s' ) -> %R", fmt, rc );
+        else
+        {
+            rc = VNamelistAppend( request->params, buffer );
+            if ( rc != 0 )
+                ErrMsg( "VNamelistAppend( '%s' ) -> %R", buffer, rc );
+        }   
+        va_end ( args );
+    }
+    return rc;
+}
+
+
+typedef struct add_ctx
+{
+    struct cgi_request * request;
+    const char * fmt;
+} add_ctx;
+
+static rc_t add_item( const char * item, void * data )
+{
+    add_ctx * actx = data;
+    return add_cgi_request_param( actx->request, actx->fmt, item );
+}
+
+rc_t add_cgi_request_params( struct cgi_request * request, const char * fmt, const VNamelist * src )
+{
+    rc_t rc;
+    if ( request == NULL || fmt == NULL || src == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        add_ctx actx = { request, fmt };
+        rc = foreach_item( src, add_item, &actx );
+    }
+    return rc;
+}
+
+rc_t clear_cgi_request_params( struct cgi_request * request )
+{
+    rc_t rc;
+    if ( request == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( request->params != NULL )
+        {
+            rc = VNamelistRelease( request->params );
+            if ( rc == 0 )
+                rc = VNamelistMake( &request->params, 10 );
+        }
+    }
+    return rc;
+}
+
+char * get_url_of_cgi_request( struct cgi_request * request )
+{
+    if ( request != NULL )
+        return request->url;
+    return NULL;
+}
+
+rc_t perform_cgi_request( struct cgi_request * request,
+                          struct KStream ** reply_stream,
+                          uint32_t * rslt_code )
+{
+    rc_t rc;
+    if ( request == NULL || reply_stream == NULL || rslt_code == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        ver_t http_vers = 0x01010000;
+        KClientHttpRequest * kns_req;
+
+        *reply_stream = NULL;
+        rc = KNSManagerMakeClientRequest( request->kns_mgr, &kns_req, http_vers, NULL, "%s", request->url );
+        if ( rc != 0 )
+            ErrMsg( "KNSManagerMakeClientRequest( '%s' ) -> %R", request->url, rc );
+        else
+        {
+            uint32_t count;
+            rc = VNameListCount( request->params, &count );
+            if ( rc != 0 )
+                ErrMsg( "VNameListCount() -> %R", rc );
+            else
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < count && rc == 0; ++idx )
+                {
+                    const char * s;
+                    rc = VNameListGet( request->params, idx, &s );
+                    if ( rc != 0 )
+                        ErrMsg( "VNameListGet( #%d ) -> %R", idx, rc );
+                    else
+                    {
+                        rc = KClientHttpRequestAddPostParam( kns_req, "%s", s );
+                        if ( rc != 0 )
+                            ErrMsg( "KClientHttpRequestAddPostParam( '%s' ) -> %R", s, rc );
+                    }
+                }
+                if ( rc == 0 )
+                {
+                    KClientHttpResult * kns_rslt;
+                    rc = KClientHttpRequestPOST( kns_req, &kns_rslt );
+                    if ( rc != 0 )
+                        ErrMsg( "KClientHttpRequestPOST() -> %R", rc );
+                    else
+                    {
+                        rc = KClientHttpResultStatus( kns_rslt, rslt_code, NULL, 0, NULL );
+                        if ( rc != 0 )
+                            ErrMsg( "KClientHttpResultStatus() -> %R", rc );
+                        else
+                        {
+                            rc = KClientHttpResultGetInputStream( kns_rslt, reply_stream );
+                            if ( rc != 0 )
+                                ErrMsg( "KClientHttpResultGetInputStream() -> %R", rc );
+                        }
+                        KClientHttpResultRelease( kns_rslt );
+                    }
+                }
+            }
+            KClientHttpRequestRelease( kns_req );
+        }
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+static void CC free_reply_obj( void * obj, void * data )
+{
+    if ( obj != NULL )
+    {
+        reply_obj * o = obj;
+        if ( o->prj_id != NULL ) StringWhack( o->prj_id );        
+        if ( o->obj_type != NULL ) StringWhack( o->obj_type );
+        if ( o->id != NULL ) StringWhack( o->id );
+        if ( o->name != NULL ) StringWhack( o->name );
+        if ( o->date != NULL ) StringWhack( o->date );
+        if ( o->checksum != NULL ) StringWhack( o->checksum );
+        if ( o->ticket != NULL ) StringWhack( o->ticket );
+        if ( o->path != NULL ) StringWhack( o->path );
+        if ( o->message != NULL ) StringWhack( o->message );
+        free( obj );
+    }
+}
+
+static rc_t clone_reply_obj( const reply_obj * src, reply_obj ** dst )
+{
+    rc_t rc = 0;
+    reply_obj * o = calloc( 1, sizeof * o );
+    if ( o == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "calloc( %d ) -> %R", ( sizeof * o ), rc );
+    }
+    else
+    {
+        if ( src->prj_id != NULL ) rc = StringCopy( &o->prj_id, src->prj_id );    
+        if ( rc == 0 && src->obj_type != NULL ) rc = StringCopy( &o->obj_type, src->obj_type );
+        if ( rc == 0 && src->id != NULL ) rc = StringCopy( &o->id, src->id );
+        if ( rc == 0 && src->name != NULL ) rc = StringCopy( &o->name, src->name );
+        if ( rc == 0 && src->date != NULL ) rc = StringCopy( &o->date, src->date );
+        if ( rc == 0 && src->checksum != NULL ) rc = StringCopy( &o->checksum, src->checksum );
+        if ( rc == 0 && src->ticket != NULL ) rc = StringCopy( &o->ticket, src->ticket );
+        if ( rc == 0 && src->path != NULL ) rc = StringCopy( &o->path, src->path );
+        if ( rc == 0 && src->message != NULL ) rc = StringCopy( &o->message, src->message );
+        
+        o->version = src->version;
+        o->size = src->size;
+        o->code = src->code;
+        
+        if ( rc == 0 )
+            *dst = o;
+        else
+            free_reply_obj( o, NULL );
+    }
+    return rc;
+}
+
+
+typedef struct reply_obj_list
+{
+    Vector v;
+} reply_obj_list;
+
+
+void release_reply_obj_list( struct reply_obj_list * list )
+{
+    VectorWhack( &list->v, free_reply_obj, NULL );
+}
+
+static rc_t make_reply_obj_list( struct reply_obj_list ** list )
+{
+    rc_t rc = 0;
+    reply_obj_list * l = calloc( 1, sizeof * l );
+    if ( l == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "calloc( %d ) -> %R", ( sizeof * l ), rc );
+    }
+    else
+    {
+        VectorInit( &l->v, 0, 5 );
+        *list = l;
+    }
+    return rc;
+}
+
+static rc_t add_clone_to_reply_obj_list( reply_obj_list * list, const reply_obj * src )
+{
+    reply_obj * clone;
+    rc_t rc = clone_reply_obj( src, &clone );
+    if ( rc == 0 )
+        rc = VectorAppend( &list->v, NULL, clone );
+    return rc;
+}
+
+static rc_t add_reply_to_list_cb( const reply_obj * obj, void * data )
+{
+    reply_obj_list * l = data;
+    return add_clone_to_reply_obj_list( l, obj );
+}
+
+typedef struct reply_obj_ctx
+{
+    on_reply_obj_t on_obj;
+    void * data;
+    rc_t rc;
+} reply_obj_ctx;
+
+static void CC reply_obj_cb( void * item, void * data )
+{
+    reply_obj_ctx * rctx = data;
+    if ( rctx->rc == 0 )
+        rctx->rc = rctx->on_obj( item, rctx->data );
+}
+
+rc_t foreach_reply_obj( struct reply_obj_list * list,
+                        on_reply_obj_t on_obj,
+                        void * data )
+{
+    reply_obj_ctx rctx = { on_obj, data, 0 };
+    VectorForEach( &list->v, false, reply_obj_cb, &rctx );
+    return rctx.rc;
+}
+
+
+static int64_t find_obj_cmp( const void *key, const void *n )
+{
+    const String * id = key;
+    const reply_obj * obj = n;
+    return StringCompare( id, obj->id );
+}
+
+static reply_obj * find_obj( struct reply_obj_list * list, const String * id )
+{
+    return VectorFind( &list->v, id, NULL, find_obj_cmp );
+}
+
+typedef struct reply_parse_ctx
+{
+    on_reply_obj_t on_obj;
+    void * data;
+    ver_maj_min version;
+} reply_parse_ctx;
+
+
+/* ------------------------------------------------------------------------ */
+
+enum request_type { request_type_names, request_type_search };
+
+static const char * names_cgi_url = "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi";
+static const char * search_cgi_url = "https://www.ncbi.nlm.nih.gov/Traces/names/search.cgi";
+
+static const char * validate_url( const char * src, enum request_type request_type )
+{
+    const char * res = src;
+    if ( src == NULL )
+    {
+        switch( request_type )
+        {
+            case request_type_names  : res = names_cgi_url; break;
+            case request_type_search : res = search_cgi_url; break;
+        }
+    }
+    return res;
+}
+
+
+static const char * names_cgi_ver = "3.0";
+static const char * search_cgi_ver = "1.0";
+
+static const char * validate_ver( const char * src, enum request_type request_type )
+{
+    const char * res = src;
+    if ( src == NULL )
+    {
+        switch( request_type )
+        {
+            case request_type_names  : res = names_cgi_ver; break;
+            case request_type_search : res = search_cgi_ver; break;
+        }
+    }
+    return res;
+}
+
+
+static void validate_request_params( const request_params * src, request_params * dst )
+{
+    dst->names_url      = validate_url( src->names_url,  request_type_names );
+    dst->names_ver      = validate_ver( src->names_ver,  request_type_names );
+    dst->search_url     = validate_url( src->search_url, request_type_search );
+    dst->search_ver     = validate_ver( src->search_ver, request_type_search );
+
+    dst->params         = src->params;
+    dst->terms          = src->terms;
+    dst->buffer_size    = src->buffer_size;
+    dst->timeout_ms     = src->timeout_ms;
+}
+
+/* ------------------------------------------------------------------------ */
+
+
+rc_t raw_names_request( const request_params * request,
+                        on_string_t on_line,
+                        uint32_t * rslt_code,
+                        void * data )
+{
+    rc_t rc;
+    cgi_request * req;
+    request_params validated_request;
+
+    validate_request_params( request, &validated_request );
+    rc = make_cgi_request( &req, validated_request.names_url );
+    if ( rc == 0 )
+    {
+        const char ** ptr = validated_request.terms;
+        rc = add_cgi_request_param( req, "version=%s", validated_request.names_ver );
+        while ( rc == 0 && *ptr != NULL )
+        {
+            rc = add_cgi_request_param( req, "acc=%s", *ptr );
+            ptr++;
+        }
+        ptr = validated_request.params;
+        while ( rc == 0 && *ptr != NULL )
+        {
+            rc = add_cgi_request_param( req, "%s", *ptr );
+            ptr++;
+        }
+        if ( rc == 0 )
+        {
+            struct KStream * stream;
+            rc = perform_cgi_request( req, &stream, rslt_code );
+            if ( rc == 0 )
+            {
+                rc = stream_line_read( stream, on_line,
+                    validated_request.buffer_size, validated_request.timeout_ms, data );
+                KStreamRelease( stream );
+            }
+        }
+        release_cgi_request( req );
+    }
+    return rc;
+}
+
+
+static rc_t names_token_v_1_0( const String * token, uint32_t id, void * data )
+{
+    rc_t rc = 0;
+    if ( token->len > 0 )
+    {
+        reply_obj * obj = data;
+        switch( id )
+        {
+            case 0 : rc = StringCopy( &obj->id, token ); break;
+            case 1 : rc = StringCopy( &obj->ticket, token ); break;
+            case 2 : rc = StringCopy( &obj->path, token ); break;
+            case 3 : obj->code = StringToU64( token, &rc ); break;
+            case 4 : rc = StringCopy( &obj->message, token ); break;
+        }
+    }
+    return rc;
+}
+
+static rc_t names_token_v_1_1( const String * token, uint32_t id, void * data )
+{
+    rc_t rc = 0;
+    if ( token->len > 0 )
+    {
+        reply_obj * obj = data;
+        switch( id )
+        {
+            case 0 : rc = StringCopy( &obj->id, token ); break;
+            case 1 : /* ??? */ break;
+            case 2 : /* ??? */ break;
+            case 3 : obj->size = StringToU64( token, &rc ); break;
+            case 4 : rc = StringCopy( &obj->date, token ); break;
+            case 5 : rc = StringCopy( &obj->checksum, token ); break;
+            case 6 : rc = StringCopy( &obj->ticket, token ); break;
+            case 7 : rc = StringCopy( &obj->path, token ); break;
+            case 8 : obj->code = StringToU64( token, &rc ); break;
+            case 9 : rc = StringCopy( &obj->message, token ); break;
+        }
+    }
+    return rc;
+}
+
+static rc_t names_token_v_3_0( const String * token, uint32_t id, void * data )
+{
+    rc_t rc = 0;
+    if ( token->len > 0 )
+    {
+        reply_obj * obj = data;
+        switch( id )
+        {
+            case 0 : rc = StringCopy( &obj->obj_type, token ); break;
+            case 1 : rc = StringCopy( &obj->id, token ); break;
+            case 2 : obj->size = StringToU64( token, &rc ); break;
+            case 3 : rc = StringCopy( &obj->date, token ); break;
+            case 4 : rc = StringCopy( &obj->checksum, token ); break;
+            case 5 : rc = StringCopy( &obj->ticket, token ); break;
+            case 6 : rc = StringCopy( &obj->path, token ); break;
+            case 7 : obj->code = StringToU64( token, &rc ); break;
+            case 8 : rc = StringCopy( &obj->message, token ); break;
+        }
+    }
+    return rc;
+}
+
+static rc_t on_names_line( const String * line, void * data )
+{
+    rc_t rc = 0;
+    reply_parse_ctx * rctx = data;
+    if ( line != NULL && line->len > 0 )
+    {
+        if ( line->addr[ 0 ] == '#' ) /* helper.c */
+        {
+            extract_versionS( &rctx->version, line );
+        }
+        else
+        {
+            reply_obj obj;
+            memset( &obj, 0, sizeof obj );
+            
+            if ( rctx->version.major == 1 )
+            {
+                switch( rctx->version.minor )
+                {
+                    case 0 : rc = foreach_token( line, names_token_v_1_0, '|', &obj ); break;
+                    case 1 : rc = foreach_token( line, names_token_v_1_1, '|', &obj ); break;
+                }
+            }
+            else if ( rctx->version.major == 3 )
+                rc = foreach_token( line, names_token_v_3_0, '|', &obj );
+
+            obj.version = rctx->version;
+            if ( rc == 0 )
+                rc = rctx->on_obj( &obj, rctx->data );
+        }
+    }
+    return rc;
+}
+
+
+rc_t parsed_names_request( const request_params * request,
+                           on_reply_obj_t on_obj,
+                           uint32_t * rslt_code,
+                           void * data )
+{
+    reply_parse_ctx rctx = { on_obj, data, { 0, 0 } };
+    return raw_names_request( request, on_names_line, rslt_code, &rctx );
+}
+
+rc_t names_request_to_list( const request_params * request,
+                            uint32_t * rslt_code,
+                            struct reply_obj_list ** list )
+{
+    reply_obj_list * l;
+    rc_t rc = make_reply_obj_list( &l );
+    if ( rc == 0 )
+    {
+        rc = parsed_names_request( request, add_reply_to_list_cb, rslt_code, l );
+        if ( rc == 0 )
+            *list = l;
+        else
+            release_reply_obj_list( l );
+    }
+    return rc;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+
+rc_t raw_search_request( const request_params * request,
+                        on_string_t on_line,
+                        uint32_t * rslt_code,
+                        void * data )
+{
+    rc_t rc;
+    cgi_request * req;
+    request_params validated_request;
+
+    validate_request_params( request, &validated_request );
+    rc = make_cgi_request( &req, validated_request.search_url );
+    if ( rc == 0 )
+    {
+        const char ** ptr = validated_request.terms;
+        rc = add_cgi_request_param( req, "version=%s", validated_request.search_ver );
+        while ( rc == 0 && *ptr != NULL )
+        {
+            rc = add_cgi_request_param( req, "term=%s", *ptr );
+            ptr++;
+        }
+        ptr = validated_request.params;
+        while ( rc == 0 && *ptr != NULL )
+        {
+            rc = add_cgi_request_param( req, "%s", *ptr );
+            ptr++;
+        }
+        if ( rc == 0 )
+        {
+            struct KStream * stream;
+            rc = perform_cgi_request( req, &stream, rslt_code );
+            if ( rc == 0 )
+            {
+                rc = stream_line_read( stream, on_line,
+                    validated_request.buffer_size, validated_request.timeout_ms, data );
+                KStreamRelease( stream );
+            }
+        }
+        release_cgi_request( req );
+    }
+    return rc;
+}
+
+static rc_t search_token_v_2_0( const String * token, uint32_t id, void * data )
+{
+    rc_t rc = 0;
+    if ( token->len > 0 )
+    {
+        reply_obj * obj = data;
+        switch( id )
+        {
+            case 0 : rc = StringCopy( &obj->prj_id, token ); break;
+            case 1 : rc = StringCopy( &obj->obj_type, token ); break;
+            case 2 : rc = StringCopy( &obj->id, token ); break;
+            case 3 : rc = StringCopy( &obj->name, token ); break;
+            case 4 : rc = StringCopy( &obj->path, token ); break;
+            case 5 : obj->size = StringToU64( token, &rc ); break;
+            case 6 : rc = StringCopy( &obj->message, token ); break;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t on_search_line( const String * line, void * data )
+{
+    rc_t rc = 0;
+    reply_parse_ctx * rctx = data;
+    if ( line != NULL && line->len > 0 )
+    {
+        switch( line->addr[ 0 ] )
+        {
+            case '#' : extract_versionS( &rctx->version, line ); break;
+            case '$' : break;
+            default  : {
+                            reply_obj obj;
+                            memset( &obj, 0, sizeof obj );
+                            if ( rctx->version.major == 2 )
+                            {
+                                if ( rctx->version.minor == 0 )
+                                    rc = foreach_token( line, search_token_v_2_0, '|', &obj );
+                            }
+                            obj.version = rctx->version;
+                            if ( rc == 0 )
+                                rc = rctx->on_obj( &obj, rctx->data );
+                        }
+                        break;
+        }
+    }
+    return rc;
+}
+
+
+rc_t parsed_search_request( const request_params * request,
+                            on_reply_obj_t on_obj,
+                            uint32_t * rslt_code,
+                            void * data )
+{
+    reply_parse_ctx rctx = { on_obj, data, { 0, 0 } };
+    return raw_search_request( request, on_search_line, rslt_code, &rctx );
+}
+
+
+static rc_t on_obj_for_count( const reply_obj * obj, void * data )
+{
+    if ( obj != NULL && data != NULL )
+    {
+        uint32_t * count = data;
+        if ( obj->id != NULL ) *count += 1;
+    }
+    return 0;
+}
+
+
+typedef struct obj_add_ptr
+{
+    const char ** ptr;
+    uint32_t idx;
+} obj_add_ptr;
+
+static rc_t on_obj_for_add_ptr( const reply_obj * obj, void * data )
+{
+    if ( obj != NULL && data != NULL )
+    {
+        obj_add_ptr * o = data;
+        if ( obj->id != NULL )
+        {
+            o->ptr[ o->idx ] = obj->id->addr;
+            o->idx++;
+        }
+    }
+    return 0;
+}
+
+static rc_t reply_obj_list_2_ptrs( struct reply_obj_list * list, const char *** ptr )
+{
+    uint32_t count = 0;
+    rc_t rc = foreach_reply_obj( list, on_obj_for_count, &count );
+    *ptr = NULL;
+    if ( rc == 0 )
+    {
+        if ( count > 0 )
+        {
+            const char ** x = calloc( count + 1, sizeof *x );
+            if ( x == NULL )
+            {
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                ErrMsg( "calloc( %d ) -> %R", count * ( sizeof * x ), rc );
+            }
+            else
+            {
+                obj_add_ptr o = { x, 0 };
+                rc = foreach_reply_obj( list, on_obj_for_add_ptr, &o );
+                if ( rc == 0 )
+                    *ptr = x;
+                else
+                    free( ( void * ) x );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t on_enter_path( const reply_obj * obj, void * data )
+{
+    rc_t rc = 0;
+    if ( obj != NULL && data != NULL )
+    {
+        reply_obj_list * list = data;
+        reply_obj * found = find_obj( list, obj->id );
+        if ( found != NULL )
+        {
+            if ( found->path != NULL ) StringWhack( found->path );
+            rc = StringCopy( &found->path, obj->path );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_sub_request( const request_params * request,
+                                 uint32_t * rslt_code,
+                                 struct reply_obj_list * list )
+{
+    rc_t rc;
+    request_params sub_request;
+    
+    sub_request.names_url   = request->names_url;
+    sub_request.search_url  = request->search_url;
+    sub_request.names_ver   = request->names_ver;
+    sub_request.search_ver  = request->search_ver;
+    sub_request.params      = request->params;
+    sub_request.terms       = NULL;
+    sub_request.buffer_size = request->buffer_size;
+    sub_request.timeout_ms  = request->timeout_ms;
+
+    rc = reply_obj_list_2_ptrs( list, &sub_request.terms );
+    if ( rc == 0 && sub_request.terms != NULL )
+    {
+        struct reply_obj_list * sub_list;
+        rc = names_request_to_list( &sub_request, rslt_code, &sub_list );
+        if ( rc == 0 )
+        {
+            /* walk the sub-list and enter the paths found into the list */
+            rc = foreach_reply_obj( sub_list, on_enter_path, list );
+            release_reply_obj_list( sub_list );
+        }
+        free( ( void * )sub_request.terms );
+    }
+    return rc;
+}
+
+
+rc_t search_request_to_list( const request_params * request,
+                            uint32_t * rslt_code,
+                            struct reply_obj_list ** list,
+                            bool resolve_path )
+{
+    reply_obj_list * l;
+    rc_t rc = make_reply_obj_list( &l );
+    if ( rc == 0 )
+    {
+        rc = parsed_search_request( request, add_reply_to_list_cb, rslt_code, l );
+        if ( rc == 0 )
+        {
+            if ( resolve_path )
+            {
+                rc = perform_sub_request( request, rslt_code, l );
+                if ( rc == 0 )
+                    *list = l;
+                else
+                    release_reply_obj_list( l );
+            }
+            else
+                *list = l;
+        }
+        else
+            release_reply_obj_list( l );
+    }
+    return rc;
+}
diff --git a/tools/srapath/cgi_request.h b/tools/srapath/cgi_request.h
new file mode 100644
index 0000000..7f4b91c
--- /dev/null
+++ b/tools/srapath/cgi_request.h
@@ -0,0 +1,129 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cgi_request_
+#define _h_cgi_request_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_helper_
+#include "helper.h"
+#endif
+
+/* ------------------------------------------------------------------------ */
+
+
+typedef struct request_params
+{
+    const char * names_url;     /* NULL ... default url  */
+    const char * search_url;    /* NULL ... default url  */
+    const char * names_ver;     /* NULL ... default vers */
+    const char * search_ver;    /* NULL ... default vers */
+    const char ** params;       /* NULL ... none */
+    const char ** terms;        /* mandatory... NULL-terminated list of terms */
+    size_t buffer_size;
+    uint32_t timeout_ms;
+} request_params;
+
+
+/* ------------------------------------------------------------------------ */
+
+
+typedef rc_t ( * on_string_t )( const String * line, void * data );
+
+typedef struct reply_obj        /*  names       search  */
+{
+    const String * prj_id;       /*  -           X       */
+    const String * obj_type;     /*  X           X       */
+    const String * id;           /*  X           X       */
+    const String * date;         /*  X           -       */
+    const String * checksum;     /*  X           -       */
+    const String * ticket;       /*  X           -       */
+    const String * name;         /*  -           X       */
+    const String * path;         /*  X           X       */
+    const String * message;      /*  X           X       */
+    size_t size;                 /*  X           X       */    
+    ver_maj_min version;         /*  X           X       */
+    uint32_t code;               /*  X           -       */    
+} reply_obj;
+
+struct reply_obj_list;
+
+void release_reply_obj_list( struct reply_obj_list * list );
+
+typedef rc_t ( * on_reply_obj_t )( const reply_obj * obj, void * data );
+
+rc_t foreach_reply_obj( struct reply_obj_list * list,
+                        on_reply_obj_t on_obj,
+                        void * data );
+
+
+/* ------------------------------------------------------------------------ */
+
+
+rc_t raw_names_request( const request_params * request,
+                        on_string_t on_line,
+                        uint32_t * rslt_code,
+                        void * data );
+
+rc_t parsed_names_request( const request_params * request,
+                           on_reply_obj_t on_obj,
+                           uint32_t * rslt_code,
+                           void * data );
+
+rc_t names_request_to_list( const request_params * request,
+                            uint32_t * rslt_code,
+                            struct reply_obj_list ** list );
+
+/* ------------------------------------------------------------------------ */
+
+
+rc_t raw_search_request( const request_params * request,
+                        on_string_t on_line,
+                        uint32_t * rslt_code,
+                        void * data );
+
+rc_t parsed_search_request( const request_params * request,
+                            on_reply_obj_t on_obj,
+                            uint32_t * rslt_code,
+                            void * data );
+
+rc_t search_request_to_list( const request_params * request,
+                            uint32_t * rslt_code,
+                            struct reply_obj_list ** list,
+                            bool resolve_path );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/srapath/helper.c b/tools/srapath/helper.c
new file mode 100644
index 0000000..1244e35
--- /dev/null
+++ b/tools/srapath/helper.c
@@ -0,0 +1,464 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "helper.h"
+
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+
+rc_t ErrMsg( const char * fmt, ... )
+{
+    rc_t rc;
+    char buffer[ 4096 ];
+    size_t num_writ;
+
+    va_list list;
+    va_start( list, fmt );
+    rc = string_vprintf( buffer, sizeof buffer, &num_writ, fmt, list );
+    if ( rc == 0 )
+        rc = pLogMsg( klogErr, "$(E)", "E=%s", buffer );
+    va_end( list );
+    return rc;
+} 
+
+rc_t CC ArgsOptionCount( const struct Args * self, const char * option_name, uint32_t * count );
+rc_t CC ArgsOptionValue( const struct Args * self, const char * option_name, uint32_t iteration, const void ** value );
+
+const char * get_str_option( const struct Args *args, const char *name, const char * dflt )
+{
+    const char* res = dflt;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        rc = ArgsOptionValue( args, name, 0, (const void**)&res );
+        if ( rc != 0 ) res = dflt;
+    }
+    return res;
+}
+
+bool get_bool_option( const struct Args *args, const char *name )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    return ( rc == 0 && count > 0 );
+}
+
+
+uint64_t get_uint64_t_option( const struct Args * args, const char *name, uint64_t dflt )
+{
+    uint64_t res = dflt;
+    const char * s = get_str_option( args, name, NULL );
+    if ( s != NULL )
+    {
+        size_t l = string_size( s );
+        if ( l > 0 )
+        {
+            char * endptr;
+            res = strtol( s, &endptr, 0 );
+        }
+    }
+    return res;
+}
+
+uint32_t get_uint32_t_option( const struct Args * args, const char *name, uint32_t dflt )
+{
+    return ( get_uint64_t_option( args, name, dflt ) & 0xFFFFFFFF );
+}
+
+size_t get_size_t_option( const struct Args * args, const char *name, size_t dflt )
+{
+    size_t res = dflt;
+    const char * s = get_str_option( args, name, NULL );
+    if ( s != NULL )
+    {
+        size_t l = string_size( s );
+        if ( l > 0 )
+        {
+            size_t multipl = 1;
+            switch( s[ l - 1 ] )
+            {
+                case 'k' :
+                case 'K' : multipl = 1024; break;
+                case 'm' :
+                case 'M' : multipl = 1024 * 1024; break;
+                case 'g' :
+                case 'G' : multipl = 1024 * 1024 * 1024; break;
+            }
+            
+            if ( multipl > 1 )
+            {
+                char * src = string_dup( s, l - 1 );
+                if ( src != NULL )
+                {
+                    char * endptr;
+                    res = strtol( src, &endptr, 0 ) * multipl;
+                    free( src );
+                }
+            }
+            else
+            {
+                char * endptr;
+                res = strtol( s, &endptr, 0 );
+            }
+        }
+    }
+    return res;
+}
+
+
+func_t get_func_t( const char * function )
+{
+    func_t res = ft_resolve;
+    if ( function != NULL && function[ 0 ] != 0 )
+    {
+        String Function, F_names;
+        StringInitCString( &Function, function );
+        StringInitCString( &F_names, "names" );
+        if ( 0 == StringCaseCompare ( &Function, &F_names ) )
+            res = ft_names;
+        else
+        {
+            String F_search;
+            StringInitCString( &F_search, "search" );
+            if ( 0 == StringCaseCompare ( &Function, &F_search ) )
+                res = ft_search;
+        }
+    }
+    return res;
+}
+
+typedef enum evs{ evs_pre_txt, evs_maj, evs_mid_txt, evs_min, evs_post_txt } evs_t;
+
+static evs_t txt_2_num( String * S, const char * src, evs_t next )
+{
+    if ( S->addr == NULL ) StringInit( S, src, 0, 0 );
+    S->len++;
+    S->size++;
+    return next;
+}
+
+static evs_t num_2_txt( String * S, uint8_t * vers_part, evs_t next )
+{
+    uint64_t value = StringToU64( S, NULL );
+    *vers_part = ( value & 0xFF );
+    StringInit( S, NULL, 0, 0 );
+    return next;
+}
+
+void extract_versionS( ver_maj_min * ver, const String * version_string )
+{
+    if ( ver != NULL && version_string != NULL )
+    {
+        evs_t status = evs_pre_txt;
+        uint32_t idx = 0;
+        String S;
+
+        ver->major = 0;
+        ver->minor = 0;
+        StringInit( &S, NULL, 0, 0 );
+        while( idx < version_string->len )
+        {
+            const char * src = &version_string->addr[ idx ];
+            bool is_num = ( *src >= '0' && *src <= '9' );
+            switch( status )
+            {
+                case evs_pre_txt  : if ( is_num ) status = txt_2_num( &S, src, evs_maj );
+                                    break;
+                                    
+                case evs_maj      : if ( is_num )
+                                        { S.len++; S.size++; }
+                                    else
+                                        status = num_2_txt( &S, &ver->major, evs_mid_txt );
+                                    break;
+                
+                case evs_mid_txt  : if ( is_num ) status = txt_2_num( &S, src, evs_min );
+                                    break;
+                                    
+                case evs_min      : if ( is_num )
+                                        { S.len++; S.size++; }
+                                    else
+                                        status = num_2_txt( &S, &ver->minor, evs_post_txt );
+                                    break;
+                                    
+                case evs_post_txt : break;
+            }
+            idx++;
+        }
+        if ( status == evs_maj )
+            num_2_txt( &S, &ver->major, evs_maj );
+        else if ( status == evs_min )
+            num_2_txt( &S, &ver->minor, evs_min );
+    }
+}
+
+void extract_version( ver_maj_min * ver, const char * version_string )
+{
+    String S;
+    StringInitCString( &S, version_string );
+    extract_versionS( ver, &S );
+}
+
+pns_ver_t get_ver_t_S( const String * version, pns_ver_t default_version )
+{
+    pns_ver_t res = default_version;
+    if ( version != NULL && version->len > 0 )
+    {
+        String V_1_0;
+        StringInitCString( &V_1_0, "1.0" );
+        if ( 0 == StringCaseCompare( version, &V_1_0 ) )
+            res = vt_1_0;
+        else
+        {
+            String V_1_1;
+            StringInitCString( &V_1_1, "1.1" );
+            if ( 0 == StringCaseCompare( version, &V_1_1 ) )
+                res = vt_1_1;
+            else
+            {
+                String V_3_0;
+                StringInitCString( &V_3_0, "3.0" );
+                if ( 0 == StringCaseCompare( version, &V_3_0 ) )
+                    res = vt_3_0;
+            }
+        }
+    }
+    return res;
+}
+
+pns_ver_t get_ver_t( const char * version, pns_ver_t default_version )
+{
+    pns_ver_t res = default_version;
+    if ( version != NULL && version[ 0 ] != 0 )
+    {
+        String Sversion;
+        if ( version[ 0 ] == '#' )
+            StringInitCString( &Sversion, &version[ 1 ] );
+        else
+            StringInitCString( &Sversion, version );
+        res = get_ver_t_S( &Sversion, default_version );
+    }
+    return res;
+}
+
+
+rc_t CC ArgsParamCount( const struct Args * self, uint32_t * count );
+rc_t CC ArgsParamValue( const struct Args * self, uint32_t iteration, const void ** value );
+rc_t CC ArgsOptionValue ( const struct Args * self, const char * option_name, uint32_t iteration, const void ** value );
+
+rc_t foreach_arg( const struct Args * args,
+                  rc_t ( * on_arg )( const char * arg, void * data ),
+                  void * data )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        ErrMsg( "ArgsParamCount() -> %R", rc );
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++ idx )
+        {
+            const char * value;
+            rc = ArgsParamValue( args, idx, ( const void ** )&value );
+            if ( rc != 0 )
+                ErrMsg( "ArgsParamValue( #%d) -> %R", idx, rc );
+            else
+                rc = on_arg( value, data );
+        }
+    }
+    return rc;
+}
+
+rc_t args_to_ptrs( const struct Args * args, const char *** ptr )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        ErrMsg( "ArgsOptionCount() -> %R", rc );
+    else
+    {
+        const char ** x = calloc( count + 1, sizeof *x );
+        if ( x == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            ErrMsg( "calloc( %d ) -> %R", count * ( sizeof * x ), rc );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; rc == 0 && idx < count; ++idx )
+            {
+                rc = ArgsParamValue( args, idx, ( const void ** )&( x[ idx ] ) );
+                if ( rc != 0 )
+                    ErrMsg( "ArgsParamValue( #%d) -> %R", idx, rc );
+            }
+            if ( rc == 0 )
+                *ptr = x;
+            else
+                free( ( void * ) x );
+        }
+    }
+    return rc;
+
+}
+
+rc_t foreach_option( const struct Args * args, const char * option_name,
+                     rc_t ( * on_option )( const char * arg, void * data ),
+                     void * data )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option_name, &count );
+    if ( rc != 0 )
+        ErrMsg( "ArgsOptionCount() -> %R", rc );
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++ idx )
+        {
+            const char * value;
+            rc = ArgsOptionValue( args, option_name, idx, ( const void ** )&value );
+            if ( rc != 0 )
+                ErrMsg( "ArgsOptionValue( #%d) -> %R", idx, rc );
+            else
+                rc = on_option( value, data );
+        }
+    }
+    return rc;
+}
+
+static rc_t add_to_namelist( const char * arg, void * data )
+{
+    VNamelist * dst = data;
+    return VNamelistAppend( dst, arg );
+}
+
+
+rc_t args_to_namelist( const struct Args * args, VNamelist ** dst )
+{
+    rc_t rc = VNamelistMake( dst, 10 );
+    if ( rc != 0 )
+        ErrMsg( "VNamelistMake() -> %R", rc );
+    else
+        rc = foreach_arg( args, add_to_namelist, *dst );
+    return rc;
+}
+
+rc_t options_to_namelist( const struct Args * args, const char * option_name,
+                          VNamelist ** dst )
+{
+    rc_t rc = VNamelistMake( dst, 10 );
+    if ( rc != 0 )
+        ErrMsg( "VNamelistMake() -> %R", rc );
+    else
+        rc = foreach_option( args, option_name, add_to_namelist, *dst );
+    return rc;
+}
+
+rc_t options_to_ptrs( const struct Args * args, const char * option_name, const char *** ptr )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option_name, &count );
+    if ( rc != 0 )
+        ErrMsg( "ArgsOptionCount() -> %R", rc );
+    else
+    {
+        const char ** x = calloc( count + 1, sizeof *x );
+        if ( x == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            ErrMsg( "calloc( %d ) -> %R", count * ( sizeof * x ), rc );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; rc == 0 && idx < count; ++idx )
+            {
+                rc = ArgsOptionValue( args, option_name, idx, ( const void ** )&( x[ idx ] ) );
+                if ( rc != 0 )
+                    ErrMsg( "ArgsOptionValue( #%d) -> %R", idx, rc );
+            }
+            if ( rc == 0 )
+                *ptr = x;
+            else
+                free( ( void * ) x );
+        }
+    }
+    return rc;
+}
+
+rc_t foreach_item( const VNamelist * src, 
+                   rc_t ( * on_item )( const char * item, void * data ),
+                   void * data )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( src, &count );
+    if ( rc == 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char * value;
+            rc = VNameListGet( src, idx, &value );
+            if ( rc == 0 && value != NULL )
+                rc = on_item( value, data );
+        }
+    }
+    return rc;
+}
+
+rc_t foreach_token( const String * line,
+                    token_handler_t token_handler,
+                    char delim,
+                    void * data )
+{
+    rc_t rc = 0;
+    String token;
+    uint32_t idx, id;
+    
+    token.addr = line->addr;
+    token.len = token.size = 0;
+    for ( idx = 0, id = 0; rc == 0 && idx < line->len; ++idx )
+    {
+        if ( line->addr[ idx ] == delim )
+        {
+            rc = token_handler( &token, id++, data );
+            token.len = token.size = 0;
+        }
+        else
+        {
+            if ( token.len == 0 )
+                token.addr = &line->addr[ idx ];
+            token.len++;
+            token.size++;
+        }
+    }
+    if ( token.len > 0 )
+        rc = token_handler( &token, id, data );
+    return rc;
+}
\ No newline at end of file
diff --git a/tools/srapath/helper.h b/tools/srapath/helper.h
new file mode 100644
index 0000000..fac432d
--- /dev/null
+++ b/tools/srapath/helper.h
@@ -0,0 +1,108 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_helper_
+#define _h_helper_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_klib_namelist_
+#include <klib/namelist.h>
+#endif
+
+#ifndef _h_kns_stream_
+#include <kns/stream.h>
+#endif
+
+rc_t ErrMsg( const char * fmt, ... );
+
+struct Args;
+
+const char * get_str_option( const struct Args *args, const char *name, const char * dflt );
+bool get_bool_option( const struct Args *args, const char *name );
+size_t get_size_t_option( const struct Args * args, const char *name, size_t dflt );
+uint32_t get_uint32_t_option( const struct Args * args, const char *name, uint32_t dflt );
+uint64_t get_uint64_t_option( const struct Args * args, const char *name, uint64_t dflt );
+
+typedef enum func_t { ft_resolve, ft_names, ft_search } func_t;
+func_t get_func_t( const char * function );
+
+rc_t foreach_arg( const struct Args * args,
+                  rc_t ( * on_arg )( const char * arg, void * data ),
+                  void * data );
+rc_t args_to_namelist( const struct Args * args, VNamelist ** dst );
+rc_t args_to_ptrs( const struct Args * args, const char *** ptr );
+
+rc_t foreach_option( const struct Args * args, const char * option_name,
+                     rc_t ( * on_option )( const char * arg, void * data ),
+                     void * data );
+rc_t options_to_namelist( const struct Args * args, const char * option_name, VNamelist ** dst );
+rc_t options_to_ptrs( const struct Args * args, const char * option_name, const char *** ptr );
+
+rc_t foreach_item( const VNamelist * src, 
+                   rc_t ( * on_item )( const char * item, void * data ),
+                   void * data );
+                  
+typedef enum pns_ver_t { vt_unknown, vt_1_0, vt_1_1, vt_3_0 } pns_ver_t;
+
+pns_ver_t get_ver_t( const char * version, pns_ver_t default_version );
+pns_ver_t get_ver_t_S( const String * version, pns_ver_t default_version );
+
+typedef struct ver_maj_min
+{
+    uint8_t major;
+    uint8_t minor;
+} ver_maj_min;
+
+
+void extract_versionS( ver_maj_min * ver, const String * version_string );
+void extract_version( ver_maj_min * ver, const char * version_string );
+
+pns_ver_t get_ver_t_S( const String * version, pns_ver_t default_version );
+
+
+typedef rc_t ( * token_handler_t )( const String * token, uint32_t id, void * data );
+
+rc_t foreach_token( const String * line,
+                    token_handler_t token_handler,
+                    char delim,
+                    void * data );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/srapath/line_iter.c b/tools/srapath/line_iter.c
new file mode 100644
index 0000000..a5ead82
--- /dev/null
+++ b/tools/srapath/line_iter.c
@@ -0,0 +1,241 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "line_iter.h"
+#include "helper.h"
+
+#include <kfs/file.h>
+#include <klib/out.h>
+#include <klib/time.h>
+#include <kproc/timeout.h>
+
+#include "os-native.h"
+
+#define ITER_DONE 0x01
+#define ITER_EOF  0x02
+
+typedef struct line_iter
+{
+    const struct KStream * stream;
+    String buffer, content, line;
+    uint32_t state, timeout_ms;
+} line_iter;
+
+
+void release_line_iter( struct line_iter * iter )
+{
+    if ( iter != NULL )
+    {
+        if ( iter->buffer.addr != NULL )
+            free( ( void * ) iter->buffer.addr );
+        free( ( void * ) iter );
+    }
+}
+
+
+static uint32_t read_line_iter( struct line_iter * iter )
+{
+    uint32_t res = 0;
+    if ( iter->content.size > 0 )
+        memmove( (void *)iter->buffer.addr, iter->content.addr, iter->content.size );
+    iter->content.addr = iter->buffer.addr;
+    {
+        char * dst = ( char * )iter->buffer.addr + iter->content.size;
+        size_t num_read;
+        size_t to_read = ( ( iter->buffer.size - 1 ) - iter->content.size );
+        timeout_t tm;
+        
+        rc_t rc = TimeoutInit( &tm, iter->timeout_ms );
+        if ( rc != 0 )
+            ErrMsg( "TimeoutInit( 5000 ) -> %R", rc );
+        else
+        {
+            rc = TimeoutPrepare( &tm );
+            if ( rc != 0 )
+                ErrMsg( "TimeoutPrepare() -> %R", rc );
+            else
+            {
+                rc = KStreamTimedRead( iter->stream, dst, iter->buffer.size - iter->content.size, &num_read, &tm );
+                if ( rc == 0 )
+                {
+                    iter->content.size += num_read;
+                    res = num_read;
+                    if ( num_read < to_read )
+                        iter->state |= ITER_EOF;
+                    else
+                        iter->state &= ~ITER_EOF;
+                }
+                else
+                {
+                    KOutMsg( "KStreamTimedRead() = %R, (%d)\n", rc, num_read );
+                    iter->state |= ITER_DONE;
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+static bool slice_iter_content( struct line_iter * iter, size_t by )
+{
+    size_t l;                
+    iter->line.addr = iter->content.addr;
+    iter->line.len  = by;
+    iter->line.size = by;
+    l = ( by + 1 );
+    iter->content.addr += l;
+    if ( l < iter->content.size )
+        iter->content.size -= l;
+    else
+        iter->content.size = 0;
+    return true;
+}
+
+
+bool advance_line_iter( struct line_iter * iter )
+{
+    bool res = ( 0 == ( iter->state & ITER_DONE ) );
+    if ( res )
+    {
+        if ( iter->content.size == 0 )
+            read_line_iter( iter );
+
+        if ( iter->content.size == 0 && ( iter->state & ITER_EOF ) )
+        {
+            iter->state |= ITER_DONE;
+            res = false;
+        }
+        else
+        {
+            char * newline = string_chr( iter->content.addr, iter->content.size, '\n' );
+            if ( newline == NULL )
+            {
+                if ( read_line_iter( iter ) == 0 )
+                    KSleepMs( 100 );
+                res = advance_line_iter( iter ); /* recursion! */
+            }
+            else
+                res = slice_iter_content( iter, newline - iter->content.addr );
+        }
+    }
+    return res;
+}
+
+
+String * get_line_iter( struct line_iter * iter )
+{
+    String * res = NULL;
+    if ( iter != NULL )
+    {
+        if ( 0 == ( iter->state & ITER_DONE ) )
+            res = &iter->line;
+    }
+    return res;
+}
+
+
+bool is_line_iter_done( const struct line_iter * iter )
+{
+    if ( iter != NULL )
+        return ( iter->state & ITER_DONE );
+    return true;
+}
+
+
+rc_t make_line_iter( struct line_iter ** iter,
+                     const struct KStream * stream,
+                     size_t buffer_size,
+                     uint32_t timeout_ms )
+{
+    rc_t rc = 0;
+    line_iter * l = calloc( 1, sizeof * l );
+    if ( l == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        ErrMsg( "calloc( %d ) -> %R", ( sizeof * l ), rc );
+    }
+    else
+    {
+        l->stream = stream;
+        l->buffer.addr = malloc( buffer_size );
+        if ( l->buffer.addr == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            ErrMsg( "malloc( %d ) -> %R", ( buffer_size ), rc );
+            free( ( void * ) l );
+        }
+        else
+        {
+            l->buffer.size = buffer_size;
+            l->buffer.len = buffer_size;
+            l->content.addr = l->buffer.addr;
+            l->timeout_ms = timeout_ms;
+            read_line_iter( l );
+            if ( advance_line_iter( l ) )
+            {
+                *iter = l;
+            }
+            else
+            {
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcRange, rcInvalid );
+                release_line_iter( l );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t stream_line_read( const struct KStream * stream, stream_line_handler_t on_line,
+                       size_t buffer_size, uint32_t timeout_ms, void * data )
+{
+    struct line_iter * iter;
+    rc_t rc = make_line_iter( &iter, stream, buffer_size, timeout_ms );
+    if ( rc == 0 )
+    {
+        while ( rc == 0 && !is_line_iter_done( iter ) )
+        {
+            String * line = get_line_iter( iter );
+            rc = on_line( line, data );
+            advance_line_iter( iter );
+        }
+        release_line_iter( iter );
+    }
+    return rc;
+}
+
+
+static rc_t print_stream_line( const String * line, void * data )
+{
+    return KOutMsg( "%S\n", line );
+}
+
+rc_t print_stream( const struct KStream * stream, size_t buffer_size,
+        uint32_t timeout_ms, void * data )
+{
+    return stream_line_read( stream, print_stream_line, buffer_size, timeout_ms, data );
+}
diff --git a/tools/srapath/line_iter.h b/tools/srapath/line_iter.h
new file mode 100644
index 0000000..94a524d
--- /dev/null
+++ b/tools/srapath/line_iter.h
@@ -0,0 +1,71 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_line_iter_
+#define _h_line_iter_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_kns_stream_
+#include <kns/stream.h>
+#endif
+
+struct line_iter;
+
+void release_line_iter( struct line_iter * iter );
+bool advance_line_iter( struct line_iter * iter );
+String * get_line_iter( struct line_iter * iter );
+bool is_line_iter_done( const struct line_iter * iter );
+
+rc_t make_line_iter( struct line_iter ** iter, const struct KStream * stream,
+        size_t buffer_size, uint32_t timeout_ms );
+
+typedef rc_t ( * stream_line_handler_t )( const String * line, void * data );
+
+rc_t stream_line_read( const struct KStream * stream, stream_line_handler_t on_line,
+        size_t buffer_size, uint32_t timeout_ms, void * data );
+
+typedef rc_t ( * stream_handler_t )( const struct KStream * stream, void * data );
+
+rc_t print_stream( const struct KStream * stream, size_t buffer_size,
+        uint32_t timeout_ms, void * data );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/srapath/srapath.c b/tools/srapath/srapath.c
new file mode 100644
index 0000000..c384524
--- /dev/null
+++ b/tools/srapath/srapath.c
@@ -0,0 +1,439 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "helper.h"
+#include "cgi_request.h"
+#include "line_iter.h"
+
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kfs/directory.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h> /* STSMSG */
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <sysalloc.h>
+
+
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+
+static const char * func_usage[] = { "function to perform (resolve, names, search) default=resolve", NULL };
+#define OPTION_FUNC   "funtion"
+#define ALIAS_FUNC    "f"
+
+static const char * timeout_usage[] = { "timeout-value for request", NULL };
+#define OPTION_TIMEOUT "timeout"
+#define ALIAS_TIMEOUT "t"
+
+static const char * vers_usage[] = { "version-string for cgi-calls", NULL };
+#define OPTION_VERS   "vers"
+#define ALIAS_VERS    "e"
+
+static const char * url_usage[] = { "url to be used for cgi-calls", NULL };
+#define OPTION_URL    "url"
+#define ALIAS_URL     "u"
+
+static const char * param_usage[] = { "param to be added to cgi-call (tic=XXXXX)", NULL };
+#define OPTION_PARAM  "param"
+#define ALIAS_PARAM   "p"
+
+static const char * raw_usage[] = { "print the raw reply (instead of parsing it)", NULL };
+#define OPTION_RAW    "raw"
+#define ALIAS_RAW     "r"
+
+static const char * size_usage[] = { "print size of object", NULL };
+#define OPTION_SIZE   "size"
+#define ALIAS_SIZE    "s"
+
+static const char * date_usage[] = { "print date of object", NULL };
+#define OPTION_DATE   "date"
+#define ALIAS_DATE    "d"
+
+OptDef ToolOptions[] =
+{
+    { OPTION_FUNC,      ALIAS_FUNC,      NULL, func_usage,       1,  true,   false },
+    { OPTION_TIMEOUT,   ALIAS_TIMEOUT,   NULL, timeout_usage,    1,  true,   false },
+    { OPTION_VERS,      ALIAS_VERS,      NULL, vers_usage,       1,  true,   false },
+    { OPTION_URL,       ALIAS_URL,       NULL, url_usage,        1,  true,   false },
+    { OPTION_PARAM,     ALIAS_PARAM,     NULL, param_usage,      10, true,   false },
+    { OPTION_SIZE,      ALIAS_SIZE,      NULL, size_usage,       1,  false,  false },
+    { OPTION_DATE,      ALIAS_DATE,      NULL, date_usage,       1,  false,  false },
+    { OPTION_RAW,       ALIAS_RAW,       NULL, raw_usage,        1,  false,  false }
+};
+
+const char UsageDefaultName[] = "srapath";
+
+
+rc_t CC UsageSummary( const char * progname )
+{
+    return OUTMSG(("\n"
+        "Usage:\n"
+        "  %s [options] <accession> ...\n\n"
+        "Summary:\n"
+        "  Tool to produce a list of full paths to files\n"
+        "  (SRA and WGS runs, refseqs: reference sequences)\n"
+        "  from list of NCBI accessions.\n"
+        "\n", progname));
+}
+
+
+rc_t CC Usage( const Args *args )
+{
+    rc_t rc;
+    uint32_t idx, count = ( sizeof ToolOptions ) / ( sizeof ToolOptions[ 0 ] );
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+
+    if ( args == NULL )
+        rc = RC( rcExe, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary( progname );
+
+    OUTMSG((
+        "  Output paths are ordered according to accession list.\n"
+        "\n"
+        "  The accession search path will be determined according to the\n"
+        "  configuration. It will attempt to find files in local and site\n"
+        "  repositories, and will also check remote repositories for run\n"
+        "  location.\n"));
+    OUTMSG((
+        "  This tool produces a path that is 'likely' to be a run, in that\n"
+        "  an entry exists in the file system at the location predicted.\n"
+        "  It is possible that this path will fail to produce success upon\n"
+        "  opening a run if the path does not point to a valid object.\n\n"));
+
+    OUTMSG(( "Options:\n" ));
+
+    for ( idx = 0; idx < count; ++idx ) /* start with 1, do not advertize row-range-option*/
+        HelpOptionLine( ToolOptions[ idx ].aliases, ToolOptions[ idx ].name, NULL, ToolOptions[ idx ].help );
+
+    OUTMSG(( "\n" ));
+    HelpOptionsStandard();
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+static rc_t resolve_one_argument( VFSManager * mgr, VResolver * resolver, const char * pc )
+{
+    const VPath * upath = NULL;
+    rc_t rc = VFSManagerMakePath( mgr, ( VPath** )&upath, "%s", pc );
+    if ( rc != 0 )
+        PLOGMSG( klogErr, ( klogErr, "failed to create VPath-object from '$(name)'", "name=%s", pc ) );
+    else
+    {
+        const VPath * local;
+        const VPath * remote;
+
+        rc = VResolverQuery( resolver, 0, upath, &local, &remote, NULL );
+        if ( rc == 0 )
+        {
+            const String * s;
+
+            if ( local != NULL )
+                rc = VPathMakeString( local, &s );
+            else 
+                rc = VPathMakeString( remote, &s );
+            if ( rc == 0 )
+            {
+                OUTMSG(("%S\n", s));
+                free( ( void* )s );
+            }
+            VPathRelease( local );
+            VPathRelease( remote );
+        }
+        else
+        {
+            KDirectory * cwd;
+            rc_t orc = VFSManagerGetCWD( mgr, &cwd );
+            if ( orc == 0 )
+            {
+                KPathType kpt = KDirectoryPathType( cwd, "%s", pc );
+                switch ( kpt &= ~kptAlias )
+                {
+                    case kptNotFound : STSMSG( 1, ( "'%s': not found while "
+                                                     "searching the file system",
+                                                     pc ) );
+                                        break;
+
+                    case kptBadPath  : STSMSG( 1, ( "'%s': bad path while "
+                                                     "searching the file system",
+                                                     pc ) );
+                                        break;
+
+                    default :          STSMSG( 1, ( "'%s': "
+                                                     "found in the file system",
+                                                     pc ) );
+                                        rc = 0;
+                                        break;
+                }
+            }
+            if ( orc == 0 && rc == 0 )
+            {
+                if ( rc != 0 )
+                {
+                    PLOGMSG( klogErr, ( klogErr, "'$(name)': not found", "name=%s", pc ) );
+                }
+                else
+                {
+                    char resolved[ PATH_MAX ] = "";
+                    rc = KDirectoryResolvePath( cwd, true, resolved, sizeof resolved, "%s", pc );
+                    if ( rc == 0 )
+                    {
+                        STSMSG( 1, ( "'%s': found in "
+                                     "the current directory at '%s'",
+                                     pc, resolved ) );
+                        OUTMSG(( "%s\n", resolved ));
+                    }
+                    else
+                    {
+                        STSMSG( 1, ( "'%s': cannot resolve "
+                                     "in the current directory",
+                                     pc ) );
+                        OUTMSG(( "./%s\n", pc ));
+                    }
+                }
+            }
+            KDirectoryRelease( cwd );
+        }
+    }
+    VPathRelease( upath );
+    return rc;
+}
+
+
+static rc_t resolve_arguments( Args * args )
+{
+    uint32_t acount;
+    rc_t rc = ArgsParamCount( args, &acount );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to count parameters" );
+    else if ( acount < 1 )
+    {
+        /* That useless: rc = */ MiniUsage( args );
+        rc = RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+    }
+    else
+    {
+        VFSManager * mgr;
+        rc = VFSManagerMake( &mgr );
+        if ( rc != 0 )
+            LOGERR ( klogErr, rc, "failed to create VFSManager object" );
+        else
+        {
+            VResolver * resolver;
+            rc = VFSManagerGetResolver( mgr, &resolver );
+            if ( rc != 0 )
+                LOGERR ( klogErr, rc, "failed to get VResolver object" );
+            else
+            {
+                uint32_t idx;
+                for ( idx = 0; rc == 0 && idx < acount; ++ idx )
+                {
+                    const char * pc;
+                    rc = ArgsParamValue( args, idx, ( const void ** )&pc );
+                    if ( rc != 0 )
+                        LOGERR( klogInt, rc, "failed to retrieve parameter value" );
+                    else
+                        rc = resolve_one_argument( mgr, resolver, pc );
+                }
+                VResolverRelease( resolver );
+            }
+            VFSManagerRelease( mgr );
+        }
+    }
+    return rc;
+}
+
+
+/* ---------------------------------------------------------------------------- */
+
+static rc_t on_reply_line( const String * line, void * data )
+{
+    return KOutMsg( "%S\n", line );
+}
+
+typedef struct out_fmt
+{
+    bool raw, print_size, print_date;
+} out_fmt;
+
+
+static rc_t prepare_request( const Args * args, request_params * r, out_fmt * fmt,
+                             bool for_names )
+{
+    rc_t rc = args_to_ptrs( args, &r->terms ); /* helper.c */
+    if ( rc == 0 )
+        rc = options_to_ptrs( args, OPTION_PARAM, &r->params ); /* helper.c */
+    if ( rc == 0 )
+    {
+        if ( for_names )
+        {
+            r->names_url  = get_str_option( args, OPTION_URL, NULL ); /* helper.c */
+            r->names_ver  = get_str_option( args, OPTION_VERS, NULL ); /* helper.c */
+            r->search_url = NULL;
+            r->search_ver = NULL;
+            
+        }
+        else
+        {
+            r->names_url  = NULL;
+            r->names_ver  = NULL;
+            r->search_url = get_str_option( args, OPTION_URL, NULL ); /* helper.c */
+            r->search_ver = get_str_option( args, OPTION_VERS, NULL ); /* helper.c */
+        }
+        r->buffer_size = 4096;
+        r->timeout_ms = get_uint32_t_option( args, OPTION_TIMEOUT, 5000 );
+    }
+    fmt->raw = get_bool_option( args, OPTION_RAW );
+    fmt->print_size = get_bool_option( args, OPTION_SIZE );
+    fmt->print_date = get_bool_option( args, OPTION_DATE );
+    return rc;
+}
+
+
+/* ---------------------------------------------------------------------------- */
+
+static rc_t print_names_reply( const reply_obj * obj, void * data )
+{
+    rc_t rc;
+    out_fmt * fmt = data;
+    
+    if ( obj->code == 200 )
+    {
+        if ( fmt->print_size )
+            rc = KOutMsg( "%22S %,12lu --> %S\n", obj->id, obj->size, obj->path );
+        else
+            rc = KOutMsg( "%22S --> %S\n", obj->id, obj->path );
+    }
+    else
+        rc = KOutMsg( "%22S --> %S (%d)\n", obj->id, obj->message, obj->code );
+
+    return rc;
+}
+
+static rc_t names_cgi( const Args * args )
+{
+    request_params r; /* cgi_request.h */
+    out_fmt fmt;
+    rc_t rc = prepare_request( args, &r, &fmt, true );
+    if ( rc == 0 )
+    {
+        uint32_t rslt_code;
+
+        if ( fmt.raw )
+            rc = raw_names_request( &r, on_reply_line, &rslt_code, NULL ); /* cgi_request.c */
+        else
+        {
+            struct reply_obj_list * list; /* cgi_request.h */
+            rc = names_request_to_list( &r, &rslt_code, &list ); /* cgi_request.c */
+            if ( rc == 0 )
+            {
+                rc = foreach_reply_obj( list, print_names_reply, &fmt ); /* cgi_request.c */
+                release_reply_obj_list( list ); /* cgi_request.c */
+            }
+        }
+        
+        free( ( void * ) r.terms );
+        free( ( void * ) r.params );
+    }
+    return rc;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+static rc_t print_search_reply( const reply_obj * obj, void * data )
+{
+    return KOutMsg( "(%S) %S --> %S\n", obj->obj_type, obj->id, obj->path );
+}
+
+static rc_t search_cgi( const Args * args )
+{
+    request_params r; /* cgi_request.h */
+    out_fmt fmt;
+    rc_t rc = prepare_request( args, &r, &fmt, false );
+    if ( rc == 0 )
+    {
+        uint32_t rslt_code;
+
+        if ( fmt.raw )
+            rc = raw_search_request( &r, on_reply_line, &rslt_code, NULL ); /* cgi_request.c */
+        else
+        {
+            struct reply_obj_list * list; /* cgi_request.h */
+            rc = search_request_to_list( &r, &rslt_code, &list, true ); /* cgi_request.c */
+            if ( rc == 0 )
+            {
+                rc = foreach_reply_obj( list, print_search_reply, &fmt ); /* cgi_request.c */
+                release_reply_obj_list( list ); /* cgi_request.c */
+            }
+        }
+
+        free( ( void * ) r.terms );
+        free( ( void * ) r.params );
+    }
+    return rc;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    Args * args;
+    uint32_t num_options = sizeof ToolOptions / sizeof ToolOptions [ 0 ];
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1, ToolOptions, num_options );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "failed to parse arguments" );
+    else
+    {
+        const char * f = get_str_option( args, OPTION_FUNC, NULL );
+        func_t ft = get_func_t( f );
+        switch ( ft )
+        {
+            case ft_resolve : rc = resolve_arguments( args ); break;
+            case ft_names   : rc = names_cgi( args ); break;
+            case ft_search  : rc = search_cgi( args ); break;
+        }
+        ArgsWhack( args );
+    }
+    return rc;
+}
diff --git a/tools/update-schema/.cvsignore b/tools/update-schema/.cvsignore
new file mode 100644
index 0000000..29f1a27
--- /dev/null
+++ b/tools/update-schema/.cvsignore
@@ -0,0 +1 @@
+*.vers.h
diff --git a/tools/update-schema/Makefile b/tools/update-schema/Makefile
new file mode 100644
index 0000000..dba9840
--- /dev/null
+++ b/tools/update-schema/Makefile
@@ -0,0 +1,77 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/update-schema
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	vdb-update-schema
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# update-schema
+#
+UPDATE_SCHEMA_SRC = \
+	update-schema \
+
+UPDATE_SCHEMA_OBJ = \
+	$(addsuffix .$(OBJX),$(UPDATE_SCHEMA_SRC))
+
+UPDATE_SCHEMA_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+
+$(BINDIR)/vdb-update-schema: $(UPDATE_SCHEMA_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(UPDATE_SCHEMA_LIB)
+
+#-------------------------------------------------------------------------------
diff --git a/tools/update-schema/update-schema.c b/tools/update-schema/update-schema.c
new file mode 100644
index 0000000..2ca2905
--- /dev/null
+++ b/tools/update-schema/update-schema.c
@@ -0,0 +1,454 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <vdb/vdb-priv.h> /* VTableStoreSchema */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/table.h>
+#include <vdb/schema.h> /* VSchema */
+#include <kdb/meta.h>
+#include <klib/out.h> /* OUTMSG */
+#include <klib/log.h> /* LOGERR */
+#include <klib/rc.h>
+#include <insdc/sra.h> /* SRA_PLATFORM_ ... */
+#include <assert.h>
+#include <string.h> /* memset */
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
+#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+typedef struct CmdArgs {
+    const char* run;
+    const char* schema;
+    const char* sPlatform;
+    uint8_t platform;
+    Args* args;
+    uint32_t count;
+    uint32_t i;
+} CmdArgs;
+typedef struct Db {
+    VDBManager* mgr;
+    VSchema* schema;
+    VTable* tbl;
+    KMetadata* meta;
+    bool frozen;
+    bool updatedPlatf;
+    bool deletedSchema;
+} Db;
+#define OPTION_PLATF "platform"
+#define ALIAS_PLATF  "p"
+static const char* platf_usage[] = { "Platform: LS454 | ILLUMINA | HELICOS",
+    " | ABI_SOLID | COMPLETE_GENOMICS", " | PACBIO_SMRT | ION_TORRENT | CAPILLARY | OXFORD_NANOPORE", NULL };
+#define OPTION_SCHEMA "schema"
+#define ALIAS_SCHEMA  "s"
+static const char* schema_usage[] = { "Schema", NULL };
+#define OPTION_RUN   "out"
+#define ALIAS_RUN    "o"
+static const char* run_usage   [] = { "Run", NULL };
+OptDef Options[] =  {
+      { OPTION_RUN   , ALIAS_RUN   , NULL, run_usage   , 1, true , true }
+    , { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true , true }
+    , { OPTION_PLATF , ALIAS_PLATF , NULL, platf_usage , 1, true , true }
+};
+
+rc_t CC UsageSummary (const char * progname)
+{    
+    OUTMSG (("\n"
+             "Usage:\n"
+             "  %s -o <run> [ -s <schema-table-or-db-spec>\n"
+             "      [ -p <platform-name> ] ] <schema-file> ...\n"
+             "\n"
+             "Summary:\n"
+             "  Update table schema\n"
+             "\n", progname));
+    return 0;
+}
+
+const char UsageDefaultName[] = "check-blob-size";
+#define def_name UsageDefaultName
+
+rc_t CC Usage(const Args* args)
+{
+    rc_t rc = 0;
+    const char* progname = def_name;
+    const char* fullpath = def_name;
+    assert(args);
+    rc = ArgsProgram(args, &fullpath, &progname);
+    if (rc)
+    {    progname = fullpath = def_name; }
+    UsageSummary(progname);
+    OUTMSG(("\nOptions\n"));
+    HelpOptionLine(ALIAS_RUN, OPTION_RUN   , "run"              , run_usage);
+    HelpOptionLine
+               (ALIAS_SCHEMA, OPTION_SCHEMA, "schema-table-spec", schema_usage);
+    HelpOptionLine(ALIAS_PLATF, OPTION_PLATF, "platform-name"   , platf_usage);
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+    return rc;
+}
+
+/* MINIUSAGE(def_name) */
+static rc_t CmdArgsInit(int argc, char** argv, CmdArgs* cmdArgs)
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+    assert(argv && cmdArgs);
+
+    memset(cmdArgs, 0, sizeof *cmdArgs);
+
+    rc = ArgsMakeAndHandle(&cmdArgs->args,
+        argc, argv, 1, Options, sizeof Options / sizeof Options[0]);
+    DISP_RC(rc, "while calling ArgsMakeAndHandle");
+    args = cmdArgs->args;
+
+    while (rc == 0) {
+        uint32_t pcount = 0;
+
+        /* run parameter */
+        rc = ArgsOptionCount(args, OPTION_RUN, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing run name");
+            break;
+        }
+        if (pcount < 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR(klogErr, rc, "Missing run parameter");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many run parameters");
+            break;
+        }
+        rc = ArgsOptionValue (args, OPTION_RUN, 0, (const void **)&cmdArgs->run);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure retrieving run name");
+            break;
+        }
+
+        /* platform parameter */
+        rc = ArgsOptionCount(args, OPTION_PLATF, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing platform");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many platform parameters");
+            break;
+        }
+        assert(SRA_PLATFORM_UNDEFINED == 0);
+        if (pcount == 1) {
+            uint8_t p = SRA_PLATFORM_UNDEFINED;
+            const char* arg = NULL;
+            rc = ArgsOptionValue(args, OPTION_PLATF, 0, (const void **)&arg);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure retrieving platform");
+                break;
+            }
+            if      (!strcmp(arg, "454"))
+            {   p = SRA_PLATFORM_454; }
+            else if (!strcmp(arg, "LS454"))
+            {   p = SRA_PLATFORM_454; }
+            else if (!strcmp(arg, "ILLUMINA"))
+            {   p = SRA_PLATFORM_ILLUMINA; }
+            else if (!strcmp(arg, "HELICOS"))
+            {   p = SRA_PLATFORM_HELICOS; }
+            else if (!strcmp(arg, "ABI_SOLID"))
+            {   p = SRA_PLATFORM_ABSOLID; }
+            else if (!strcmp(arg, "COMPLETE_GENOMICS"))
+            {   p = SRA_PLATFORM_COMPLETE_GENOMICS; }
+            else if (!strcmp(arg, "PACBIO_SMRT"))
+            {   p = SRA_PLATFORM_PACBIO_SMRT; }
+            else if (!strcmp(arg, "ION_TORRENT"))
+            {   p = SRA_PLATFORM_ION_TORRENT; }
+            else if (!strcmp(arg, "CAPILLARY"))
+            {   p = SRA_PLATFORM_CAPILLARY; }
+            else if (!strcmp(arg, "OXFORD_NANOPORE"))
+            {   p = SRA_PLATFORM_OXFORD_NANOPORE; }
+            else {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                PLOGERR(klogInt, (klogInt, rc, "Invalid platform: $(name)",
+                    "name=%s", arg));
+                break;
+            }
+            cmdArgs->platform = p;
+            cmdArgs->sPlatform = arg;
+        }
+
+        /* schema parameter */
+        rc = ArgsOptionCount(args, OPTION_SCHEMA, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure parsing schema");
+            break;
+        }
+        if (pcount > 1) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
+            LOGERR(klogErr, rc, "Too many schema parameters");
+            break;
+        }
+        else if (pcount == 1) {
+            rc = ArgsOptionValue(args, OPTION_SCHEMA, 0, (const void **)&cmdArgs->schema);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure retrieving schema");
+                break;
+            }
+        }
+        else if (/* pcount < 0 && */ cmdArgs->platform) {
+            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            LOGERR
+                (klogErr, rc, "Schema is required when platform is specified");
+        }
+
+        break;
+    }
+
+    if (rc == 0) {
+        do {
+            rc = ArgsParamCount(args, &cmdArgs->count);
+            if (rc) {
+                DISP_RC(rc, "while calling ArgsParamCount");
+                break;
+            }
+            if (cmdArgs->count < 1) {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+                LOGERR(klogErr, rc, "Missing schema parameter");
+                break;
+            }
+        } while (false);
+    }
+
+    if (rc != 0)
+    {   MiniUsage(cmdArgs->args); }
+
+    return rc;
+}
+
+static rc_t CmdArgsGetNextParam(CmdArgs* args, const char** param)
+{
+    rc_t rc = 0;
+    assert(args && param);
+    *param = NULL;
+    if (args->i >= args->count) /* no more parameters to give :( */
+    {   return rc; }
+    rc = ArgsParamValue(args->args, args->i, (const void **)param);
+    if (rc) {
+        PLOGERR(klogInt, (klogInt, rc,
+            "while calling ArgsParamValue($(i))", "i=%d", args->i));
+    }
+    ++args->i;
+    return rc;
+}
+
+static rc_t DbConstruct(Db* db, CmdArgs* args) {
+    rc_t rc = 0;
+    assert(db && args);
+    memset(db, 0, sizeof *db);
+    if (rc == 0) {
+        rc = VDBManagerMakeUpdate(&db->mgr, NULL);
+        DISP_RC(rc, "While calling VDBManagerMakeUpdate");
+    }
+    if (rc == 0) {
+        rc = VDBManagerMakeSchema(db->mgr, &db->schema);
+        DISP_RC(rc, "While calling VDBManagerMakeSchema");
+    }
+    while (rc == 0) {
+        const char* param = NULL;
+        rc = CmdArgsGetNextParam(args, &param);
+        if (param == NULL)
+        {   break; }
+        rc = VSchemaParseFile(db->schema, "%s", param);
+        DISP_RC2(rc, param, "While calling VSchemaParseFile");
+    }
+    if (rc == 0) {
+        rc =
+            VDBManagerOpenTableUpdate(db->mgr, &db->tbl, db->schema, args->run);
+        DISP_RC2(rc, args->run, "While calling VDBManagerOpenTableUpdate");
+    }
+    if (rc == 0) {
+        rc = VTableOpenMetadataUpdate(db->tbl, &db->meta);
+        DISP_RC(rc, "While calling VTableOpenMetadataUpdate");
+    }
+    return rc;
+}
+
+static rc_t DbBeginTran(Db* self)
+{
+    rc_t rc = 0;
+    assert(self);
+    if (rc == 0) {
+        rc = KMetadataFreeze(self->meta);
+        DISP_RC(rc, "While calling KMetadataFreeze");
+        if (rc == 0)
+        {   self->frozen = true; }
+    }
+    return rc;
+}
+
+static rc_t DbUpdatePlatform(Db* self, const CmdArgs* args)
+{
+    rc_t rc = 0;
+    bool toUpdate = false;
+    const char path[] = "col/PLATFORM/row";
+    const KMDataNode* rNode = NULL;
+    KMDataNode* uNode = NULL;
+    assert(self && args);
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(self->meta, &rNode, "%s", path);
+        DISP_RC2(rc, path, "While calling KMetadataOpenNodeRead");
+    }
+    if (rc == 0) {
+        uint8_t p = SRA_PLATFORM_UNDEFINED;
+        rc = KMDataNodeReadB8(rNode, &p);
+        DISP_RC2(rc, path, "While reading KMetaNode");
+        if (rc == 0 && p == args->platform) {
+            PLOGMSG(klogWarn, (klogWarn,
+                "PLATFORM is set already to $(PLATFORM)",
+                "PLATFORM=%s", args->sPlatform));
+        }
+        else { toUpdate = true; }
+    }
+    DESTRUCT(KMDataNode, rNode);
+    if (toUpdate) {
+        if (rc == 0) {
+            rc = KMetadataOpenNodeUpdate(self->meta, &uNode, "%s", path);
+            DISP_RC2(rc, path, "While calling KMetadataOpenNodeUpdate");
+        }
+        if (rc == 0) {
+            rc = KMDataNodeWriteB8(uNode, &args->platform);
+            DISP_RC2(rc, path, "While writing KMetaNode");
+            if (rc == 0)
+            {   self->updatedPlatf = true; }
+        }
+    }
+    DESTRUCT(KMDataNode, uNode);
+    return rc;
+}
+
+static rc_t DbDeleteSchema(Db* self)
+{
+    rc_t rc = 0;
+    KMDataNode* uNode = NULL;
+    const char path[] = "schema";
+    assert(self);
+    if (rc == 0) {
+        rc = KMetadataOpenNodeUpdate(self->meta, &uNode, "%s", path);
+        DISP_RC2(rc, path, "While calling KMetadataOpenNodeUpdate");
+    }
+    if (rc == 0) {
+        rc = KMDataNodeDropAll(uNode);
+        DISP_RC2(rc, path, "While calling KMDataNodeDropAll");
+        if (rc == 0)
+        {   self->deletedSchema = true; }
+    }
+    DESTRUCT(KMDataNode, uNode);
+    return rc;
+}
+
+static rc_t DbCloseTbl(Db* self)
+{
+    rc_t rc = 0;
+    assert(self);
+    DESTRUCT(KMetadata, self->meta);
+    DESTRUCT(VTable, self->tbl);
+    return rc;
+}
+
+static rc_t DbDestruct(Db* self) {
+    rc_t rc = 0;
+    assert(self);
+    DESTRUCT(KMetadata, self->meta);
+    DESTRUCT(VTable, self->tbl);
+    DESTRUCT(VSchema, self->schema);
+    DESTRUCT(VDBManager, self->mgr);
+    return rc;
+}
+
+static rc_t DbStoreSchema(Db* self, const CmdArgs* args)
+{
+    rc_t rc = 0;
+    bool metaUpdated = false;
+    assert(self && args);
+    if (self->updatedPlatf || self->deletedSchema)
+    {   metaUpdated = true; }
+    if (metaUpdated) {
+        if (rc == 0) {
+            rc = DbCloseTbl(self);
+            DISP_RC(rc, "While calling VTableRelease");
+        }
+        if (rc == 0) {
+            rc = VDBManagerCreateTable(self->mgr,
+                                       &self->tbl, self->schema, args->schema, kcmOpen, "%s", args->run);
+            DISP_RC2(rc, args->run, "While calling VDBManagerCreateTable");
+        }
+    }
+    else {
+        rc = VTableStoreSchema(self->tbl);
+        DISP_RC(rc, "While calling VTableStoreSchema");
+    }
+    return rc;
+}
+
+static rc_t DbRollbackTran(Db* self)
+{
+    rc_t rc = 0;
+    assert(self);
+    return rc;
+}
+
+rc_t CC KMain(int argc, char* argv[])
+{
+    rc_t rc = 0;
+    CmdArgs args;
+    Db db;
+    memset(&db, 0, sizeof db);
+    if (rc == 0)
+    {   rc = CmdArgsInit(argc, argv, &args); }
+    if (rc == 0)
+    {   rc = DbConstruct(&db, &args); }
+    if (rc == 0) {
+        rc = DbBeginTran(&db);
+        if (rc == 0 && args.platform)
+        {   rc = DbUpdatePlatform(&db, &args); }
+        if (rc == 0 && args.schema)
+        {   rc = DbDeleteSchema(&db); }
+        if (rc == 0)
+        {   rc = DbStoreSchema(&db, &args); }
+        if (rc != 0)
+        {   DbRollbackTran(&db); }
+    }
+    {
+        rc_t rc2 = DbDestruct(&db);
+        if (rc2 != 0 && rc == 0)
+        {   rc = rc2; }
+    }
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/util/Makefile b/tools/util/Makefile
new file mode 100644
index 0000000..1c62d56
--- /dev/null
+++ b/tools/util/Makefile
@@ -0,0 +1,393 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/util
+
+INT_TOOLS = \
+    crc32sum \
+    kdb-index \
+    pacbio-correct \
+    schema-replace \
+    sortreadtest \
+    rowwritetest \
+    samview \
+    testld \
+    txt2kdb \
+#   pseudo-aligner \
+
+
+EXT_TOOLS = \
+	rcexplain \
+	kdbmeta \
+	md5cp \
+	vdb-lock \
+	vdb-unlock \
+	test-sra \
+	vdb-passwd \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+	
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# rcexplain - explain a return code observed in debugger
+#
+RCEXPLAIN_SRC = \
+	rcexplain
+
+RCEXPLAIN_OBJ = \
+	$(addsuffix .$(OBJX),$(RCEXPLAIN_SRC))
+
+RCEXPLAIN_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+$(BINDIR)/rcexplain: $(RCEXPLAIN_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(RCEXPLAIN_LIB)
+
+
+#-------------------------------------------------------------------------------
+# kdbmeta - query and update metadata files
+#
+KDBMETA_SRC = \
+	kdbmeta
+
+KDBMETA_OBJ = \
+	$(addsuffix .$(OBJX),$(KDBMETA_SRC))
+
+KDBMETA_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/kdbmeta: $(KDBMETA_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(KDBMETA_LIB)
+
+
+#-------------------------------------------------------------------------------
+# vdb-lock
+#  lock a vdb object
+#
+VDB_LOCK_SRC = \
+	vdb-lock
+
+VDB_LOCK_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_LOCK_SRC))
+
+VDB_LOCK_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/vdb-lock: $(VDB_LOCK_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_LOCK_LIB)
+
+
+#-------------------------------------------------------------------------------
+# vdb-unlock
+#  unlock a vdb object
+#
+VDB_UNLOCK_SRC = \
+	vdb-unlock
+
+VDB_UNLOCK_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_UNLOCK_SRC))
+
+VDB_UNLOCK_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/vdb-unlock: $(VDB_UNLOCK_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_UNLOCK_LIB)
+
+
+#-------------------------------------------------------------------------------
+# testld - test dynamic load of libraries
+#
+TESTLD_SRC = \
+	testld
+
+TESTLD_OBJ = \
+	$(addsuffix .$(OBJX),$(TESTLD_SRC))
+
+TESTLD_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/testld: $(TESTLD_OBJ)
+	$(LD) --exe -o $@ $^ $(TESTLD_LIB)
+
+
+#-------------------------------------------------------------------------------
+# test-sra: print config, resolve sra, check dependencies
+#
+
+T_SRC = \
+	PrintOS \
+	test-sra \
+
+T_OBJ = \
+	$(addsuffix .$(OBJX),$(T_SRC))
+
+T_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/test-sra: $(T_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(T_LIB)
+
+#-------------------------------------------------------------------------------
+# txt2kdb - test dynamic load of libraries
+#
+TXT2KDB_SRC = \
+	txt2kdb
+
+TXT2KDB_OBJ = \
+	$(addsuffix .$(OBJX),$(TXT2KDB_SRC))
+
+TXT2KDB_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+
+
+$(BINDIR)/txt2kdb: $(TXT2KDB_OBJ)
+	$(LD) --exe -o $@ $^ $(TXT2KDB_LIB)
+
+#----------------------------------------------------------------
+# md5cp
+#
+MD5CP_SRC = \
+	md5cp
+
+MD5CP_OBJ = \
+	$(addsuffix .$(OBJX),$(MD5CP_SRC))
+
+MD5CP_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/md5cp: $(MD5CP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(MD5CP_LIB)
+
+
+#----------------------------------------------------------------
+# rowwritetest
+#
+ROWWRITETEST_SRC = \
+	rowwritetest
+
+ROWWRITETEST_OBJ = \
+	$(addsuffix .$(OBJX),$(ROWWRITETEST_SRC))
+
+ROWWRITETEST_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+
+
+$(BINDIR)/rowwritetest: $(ROWWRITETEST_OBJ)
+	$(LD) --exe -o $@ $^ $(ROWWRITETEST_LIB)
+
+
+#-------------------------------------------------------------------------------
+# crc32sum 
+#  behaves a lot like md5sum
+#
+CRC32SUM_SRC = \
+	crc32sum
+
+CRC32SUM_OBJ = \
+	$(addsuffix .$(OBJX),$(CRC32SUM_SRC))
+
+CRC32SUM_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/crc32sum: $(CRC32SUM_OBJ)
+	$(LD) --exe -o $@ $^ $(CRC32SUM_LIB)
+
+
+#-------------------------------------------------------------------------------
+# samview
+#  for testing bam/sam code
+#
+SAMVIEW_SRC = \
+	samview
+
+SAMVIEW_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMVIEW_SRC))
+
+SAMVIEW_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/samview: $(SAMVIEW_OBJ)
+	$(LD) --exe -o $@ $^ $(SAMVIEW_LIB)
+
+
+#-------------------------------------------------------------------------------
+# pseudo-aligner
+#  for generating test data
+#
+SUDO_ALGN_SRC = \
+	pseudo-aligner
+
+SUDO_ALGN_OBJ = \
+	$(addsuffix .$(OBJX),$(SUDO_ALGN_SRC))
+
+$(BINDIR)/pseudo-aligner: $(SUDO_ALGN_OBJ)
+	$(LP) --exe -o $@ $^
+
+
+#----------------------------------------------------------------
+# sortreadtest
+#
+SORTREADTEST_SRC = \
+	sortreadtest
+
+SORTREADTEST_OBJ = \
+	$(addsuffix .$(OBJX),$(SORTREADTEST_SRC))
+
+SORTREADTEST_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-wvdb \
+
+
+$(BINDIR)/sortreadtest: $(SORTREADTEST_OBJ)
+	$(LD) --exe -o $@ $^ $(SORTREADTEST_LIB)
+
+
+#----------------------------------------------------------------
+# vdb-passwd
+#
+VDB_PASSWD_SRC = \
+	vdb-passwd \
+	syspass
+
+VDB_PASSWD_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_PASSWD_SRC))
+
+VDB_PASSWD_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+
+$(BINDIR)/vdb-passwd: $(VDB_PASSWD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_PASSWD_LIB)
+
+
+#----------------------------------------------------------------
+# schema-replace
+#
+SCHEMA_REPLACE_SRC = \
+	schema-replace
+
+SCHEMA_REPLACE_OBJ = \
+	$(addsuffix .$(OBJX),$(SCHEMA_REPLACE_SRC))
+
+SCHEMA_REPLACE_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/schema-replace: $(SCHEMA_REPLACE_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(SCHEMA_REPLACE_LIB)
+
+#-------------------------------------------------------------------------------
+# pacbio-correct-tool
+#
+PACBIO_CORRECT_SRC = \
+	pacbio-correct
+
+PACBIO_CORRECT_OBJ = \
+	$(addsuffix .$(OBJX),$(PACBIO_CORRECT_SRC))
+
+PACBIO_CORRECT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+
+
+$(BINDIR)/pacbio-correct: $(PACBIO_CORRECT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(PACBIO_CORRECT_LIB)
+
+#-------------------------------------------------------------------------------
+# kdb-index
+#
+KDBINDEX_SRC = \
+	kdb-index
+
+KDBINDEX_OBJ = \
+	$(addsuffix .$(OBJX),$(KDBINDEX_SRC))
+
+KDBINDEX_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+
+$(BINDIR)/kdb-index: $(KDBINDEX_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(KDBINDEX_LIB)
diff --git a/tools/util/crc32sum.c b/tools/util/crc32sum.c
new file mode 100644
index 0000000..5d13c9e
--- /dev/null
+++ b/tools/util/crc32sum.c
@@ -0,0 +1,272 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/args.h>
+#include <klib/checksum.h>
+#include <klib/status.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <kapp/main.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+static
+int crc32sum_calc ( FILE *in, uint32_t *crc32 )
+{
+    int status;
+    char *buff = malloc ( 32 * 1024 );
+    if ( buff == NULL )
+        return errno;
+
+    for ( status = 0, * crc32 = 0;; )
+    {
+        size_t num_read = fread ( buff, 1, 32 * 1024, in );
+        if ( num_read == 0 )
+        {
+            if ( ! feof ( in ) )
+                status = ferror ( in );
+            break;
+        }
+
+        * crc32 = CRC32 ( * crc32, buff, num_read );
+    }
+
+    free ( buff );
+
+    return status;
+}
+
+static
+int crc32sum_check ( FILE *in, const char *fname )
+{
+    int cnt, mismatches;
+    char line [ 5 * 1024 ];
+    for ( cnt = mismatches = 0; fgets ( line, sizeof line, in ) != NULL; ++ cnt )
+    {
+        char *p;
+        FILE *src;
+        int status, bin = 0;
+        uint32_t prior, crc32;
+
+        if ( line [ 0 ] == 0 )
+        {
+            -- cnt;
+            continue;
+        }
+
+        p = strrchr ( line, '\n' );
+        if ( p != 0 )
+            * p = 0;
+
+        prior = strtoul ( line, & p, 16 );
+        if ( ( p - line ) != 8 || p [ 0 ] != ' ' )
+        {
+            fprintf ( stderr, "badly formatted file '%s'\n", fname );
+            return EINVAL;
+        }
+
+        if ( p [ 1 ] == '*' )
+            bin = 1;
+        else if ( p [ 1 ] != ' ' )
+        {
+            fprintf ( stderr, "badly formatted file '%s'\n", fname );
+            return EINVAL;
+        }
+ 
+        src = fopen ( p += 2, bin ? "rb" : "r" );
+        if ( src == NULL )
+        {
+            status = errno;
+            fprintf ( stderr, "failed to open file '%s': %s\n", p, strerror ( status ) );
+            return status;
+        }
+
+        status = crc32sum_calc ( src, & crc32 );
+
+        fclose ( src );
+
+        if ( status != 0 )
+            fprintf ( stderr, "error processing file '%s': %s\n", p, strerror ( status ) );
+        else
+        {
+            printf ( "%s: %s\n", p, ( crc32 == prior ) ? "OK" : "FAILED" );
+            if ( crc32 != prior )
+                ++ mismatches;
+        }
+    }
+
+    if ( mismatches != 0 )
+        fprintf ( stderr, "WARNING: %d of %d computed checksums did NOT match\n", mismatches, cnt );
+
+    if ( ! feof ( in ) )
+        return ferror ( in );
+    return 0;
+}
+
+static
+int crc32sum_gen ( FILE *in, const char *fname, int bin )
+{
+    uint32_t crc32;
+    int status = crc32sum_calc ( in, & crc32 );
+    if ( status != 0 )
+        fprintf ( stderr, "error processing file '%s': %s\n", fname, strerror ( status ) );
+    else
+        printf ( "%08x %c%s\n", crc32, bin ? '*' : ' ', fname );
+    return status;
+}
+
+
+#define OPTION_BINARY "binary"
+#define OPTION_CHECK  "check"
+#define ALIAS_BINARY  "b"
+#define ALIAS_CHECK   "c"
+
+static const char * binary_usage[] = { "open file in binary mode", NULL };
+static const char * check_usage[]  = { "check CRC32 against given list", NULL };
+
+OptDef Options[] =
+{
+    { OPTION_BINARY, ALIAS_BINARY, NULL, binary_usage, 0, false, false },
+    { OPTION_CHECK,  ALIAS_CHECK,  NULL, check_usage,  0, false, false }
+};
+
+
+
+const char UsageDefaultName[] = "crc32sum";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg("\n"
+                   "Usage:\n"
+                   "  %s [Options] File [File ...]\n"
+                   "\n"
+                   "Summary:\n"
+                   "  Generate or test crc32 file checks\n"
+                   "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options\n");
+
+    HelpOptionLine (ALIAS_BINARY, OPTION_BINARY, NULL, binary_usage);
+
+    HelpOptionLine (ALIAS_CHECK, OPTION_CHECK, NULL, check_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+rc_t CC KMain (int argc, char * argv [])
+{
+    Args *args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1,
+                            Options, sizeof (Options) / sizeof (OptDef));
+    if (rc == 0)
+    {
+        do
+        {
+            uint32_t pcount;
+            int check;
+            int bin;
+
+            rc = ArgsOptionCount (args, OPTION_BINARY, &pcount);
+            if (rc) break;
+
+            bin = (pcount != 0);
+
+            rc = ArgsOptionCount (args, OPTION_CHECK, &pcount);
+            if (rc) break;
+
+            check = (pcount != 0);
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc) break;
+
+            if (pcount == 0)
+            {
+                MiniUsage(args);
+            }
+            else
+            {
+                uint32_t i;
+
+                CRC32Init ();
+           
+                for ( i = 0; i < pcount; ++ i )
+                {
+
+                    int status;
+                    const char *fname;
+                    FILE *in;
+
+                    rc = ArgsParamValue (args, i, (const void **)&fname);
+
+                    in = fopen ( fname, bin ? "rb" : "r" );
+
+                    if ( in == NULL )
+                    {
+                        fprintf ( stderr, "failed to open file '%s'\n", fname );
+                        return -1;
+                    }
+
+                    status = check ?
+                        crc32sum_check ( in, fname ):
+                        crc32sum_gen ( in, fname, bin );
+
+                    fclose ( in );
+
+                    if ( status != 0 )
+                        return status;
+                }
+            }
+        } while (0);
+    }
+
+    return 0;
+}
diff --git a/tools/util/kdb-index.c b/tools/util/kdb-index.c
new file mode 100644
index 0000000..30996db
--- /dev/null
+++ b/tools/util/kdb-index.c
@@ -0,0 +1,257 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/index.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <stdio.h>
+
+static bool keys_only;
+static const char * app_name;
+
+static
+rc_t run_idx ( const KIndex * idx, const char * spec )
+{
+    rc_t rc = 0;
+    uint64_t span;
+    int64_t id, start_id;
+
+    for ( id = 1; ; id = start_id + span )
+    {
+        size_t ksize;
+        char key [ 256 ];
+
+        rc = KIndexProjectText ( idx, id, & start_id, & span, key, sizeof key, & ksize );
+        if ( rc != 0 )
+        {
+            if ( GetRCState ( rc ) == rcNotFound && GetRCObject ( rc ) == rcId )
+                rc = 0;
+            break;
+        }
+
+        if ( keys_only )
+            KOutMsg ( "%s\n", key );
+        else
+            KOutMsg ( "'%s': start = %'ld, span = %'lu\n", key, start_id, span );
+
+#if 0
+        /* just for the fun of it, now try to look up the key */
+        {
+            int64_t start2;
+            uint64_t count2;
+            rc_t rc2 = KIndexFindText ( idx, key, & start2, & count2, NULL, NULL );
+            if ( rc2 != 0 )
+                fprintf ( stderr, "failed to find key '%s' in index\n", key );
+            else
+                KOutMsg ( "  key lookup returned start = %'ld, span = %'lu\n", start2, count2 );
+        }
+#endif
+    }
+
+    return rc;
+}
+
+static
+rc_t run_tbl ( const KTable * tbl, const char * spec, const char * idx_spec )
+{
+    const KIndex * idx;
+    rc_t rc = KTableOpenIndexRead ( tbl, & idx, "%s", idx_spec );
+    if ( rc == 0 )
+    {
+        rc = run_idx ( idx, spec );
+        KIndexRelease ( idx );
+    }
+
+    return rc;
+}
+
+static
+rc_t run_db ( const KDatabase * db, const char * spec, const char * tbl_idx )
+{
+    rc_t rc = 0;
+    const KTable * tbl;
+
+    size_t tlen = string_size ( tbl_idx );
+    const char * idx = string_chr ( tbl_idx, tlen, ':' );
+    if ( idx != NULL )
+    {
+        tlen = idx - tbl_idx;
+        ++ idx;
+    }
+
+    rc = KDatabaseOpenTableRead ( db, & tbl, "%.*s", ( uint32_t ) tlen, tbl_idx );
+    if ( rc == 0 )
+    {
+        rc = run_tbl ( tbl, spec, idx ? idx : "ref_spec" );
+        KTableRelease ( tbl );
+    }
+
+    return rc;
+}
+
+static
+rc_t run ( const KDBManager * mgr, const char * spec )
+{
+    rc_t rc = 0;
+
+    const KTable * tbl;
+    const KDatabase * db;
+
+    size_t slen = string_size ( spec );
+    const char * tbl_idx = string_chr ( spec, slen, ':' );
+    if ( tbl_idx != NULL )
+    {
+        slen = tbl_idx - spec;
+        ++ tbl_idx;
+    }
+
+    switch ( KDBManagerPathType ( mgr, "%.*s", ( uint32_t ) slen, spec ) )
+    {
+    case kptDatabase:
+        rc = KDBManagerOpenDBRead ( mgr, & db, "%.*s", ( uint32_t ) slen, spec );
+        if ( rc == 0 )
+        {
+            rc = run_db ( db, spec, tbl_idx ? tbl_idx : "STATS:ref_spec" );
+            KDatabaseRelease ( db );
+        }
+        break;
+    case kptTable:
+        rc = KDBManagerOpenTableRead ( mgr, & tbl, "%.*s", ( uint32_t ) slen, spec );
+        if ( rc == 0 )
+        {
+            rc = run_tbl ( tbl, spec, tbl_idx ? tbl_idx : "ref_spec" );
+            KTableRelease ( tbl );
+        }
+        break;
+    default:
+        rc = RC ( rcApp, rcMgr, rcAccessing, rcPath, rcIncorrect );
+    }
+    return rc;
+}
+
+static
+void print_help ( void )
+{
+    size_t nlen = string_size ( app_name );
+    const char * short_name = string_rchr ( app_name, nlen, '/' );
+    if ( short_name ++ == NULL )
+        short_name = app_name;
+
+    KOutMsg ( "\n"
+              "Usage:\n"
+              "  %s [ options ] obj-spec [ obj-spec.. ]\n"
+              "\n"
+              "Object Specification:\n"
+              "  <db-path-or-accession> [ ':' <table-name> [ ':' <index-name> ] ]\n"
+              "  <tbl-path-or-accession> [ ':' <index-name> ]\n"
+              "\n"
+              "Options:\n"
+              "  -k|--keys-only                   only list keys\n"
+              "  -h|--help                        print this message\n"
+              "\n"
+              "%s : %V\n"
+              "\n"
+              , short_name
+              , app_name
+              , KAppVersion ()
+        );
+}
+
+rc_t CC Usage ( struct Args const * args )
+{
+    return 0;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc = 0;
+    int i, count = 0;
+    const KDBManager * mgr;
+
+    app_name = argv [ 0 ];
+
+    for ( i = 1; i < argc; ++ i )
+    {
+        const char * arg = argv [ i ];
+        if ( arg [ 0 ] != '-' )
+            argv [ ++ count ] = ( char * ) arg;
+        else do switch ( ( ++ arg ) [ 0 ] )
+        {
+        case 'k':
+            keys_only = true;
+            break;
+        case 'h':
+        case '?':
+            print_help ();
+            return 0;
+        case '-':
+            ++ arg;
+            if ( strcmp ( arg, "keys-only" ) == 0 )
+                keys_only = true;
+            else if ( strcmp ( arg, "help" ) == 0 )
+            {
+                print_help ();
+                return 0;
+            }
+            else
+            {
+                fprintf ( stderr, "%s: unrecognized switch: '--%s'\n", argv [ 0 ], arg );
+                return -1;
+            }
+            arg = "\0";
+            break;
+        default:
+            fprintf ( stderr, "%s: unrecognized switch: '-%c'\n", argv [ 0 ], arg [ 0 ] );
+            return -1;
+        }
+        while ( arg [ 1 ] != 0 );
+    }
+
+    if ( count == 0 )
+    {
+        fprintf ( stderr, "%s: at least one object spec is required\n", argv [ 0 ] );
+        return -1;
+    }
+
+    rc = KDBManagerMakeRead ( & mgr, NULL );
+    if ( rc == 0 )
+    {
+
+        for ( i = 1; rc == 0 && i <= count; ++ i )
+            rc = run ( mgr, argv [ i ] );
+
+        KDBManagerRelease ( mgr );
+    }
+
+    return rc;
+}
diff --git a/tools/util/kdbmeta.c b/tools/util/kdbmeta.c
new file mode 100644
index 0000000..980a38a
--- /dev/null
+++ b/tools/util/kdbmeta.c
@@ -0,0 +1,1332 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+/*
+ * This program has a command line sytax that isn't suited to the 
+ * normally expected way of handling command line arguments.
+ *
+ * We'll use the normal Args processing for the standard options
+ * but a simple stepping throught the argv stored arguments
+ * for the "big loop"
+ */
+
+
+/* The original intention of this tool was to support updating nodes.
+   This was later removed with the thought that this functionality would
+   be better implemented by another tool.
+
+   Going to temporarily add it in...
+*/
+#define ALLOW_UPDATE 1
+
+#include <sra/srapath.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kdb/kdb-priv.h>
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/vector.h>
+#include <klib/namelist.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/writer.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+#include <os-native.h>
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+/* use cpp define CONST */
+#undef CONST
+#if ALLOW_UPDATE
+#define CONST
+#else
+#define CONST const
+#endif
+
+typedef struct KDBMetaParms KDBMetaParms;
+struct KDBMetaParms
+{
+    CONST KDBManager *mgr;
+    CONST KMetadata *md;
+    const char *targ;
+    const Vector *q;
+    rc_t rc;
+};
+
+/* select reporting
+ */
+static bool xml_ish = true;
+static int indent_lvl;
+static int tabsz = 2;
+static const char *spaces = "                                ";
+static bool as_unsigned = false;
+static bool as_valid_xml = true;
+static const char *table_arg = NULL;
+static bool read_only_arg = true;
+
+static
+void indent ( void )
+{
+    if ( indent_lvl > 0 )
+    {
+        int total, num_spaces = indent_lvl * tabsz;
+        for ( total = 0; total < num_spaces; total += 32 )
+        {
+            int to_write = num_spaces - total;
+            if ( to_write > 32 )
+                to_write = 32;
+            OUTMSG (( & spaces [ 32 - to_write ] ));
+        }
+    }
+}
+
+static
+void node_open ( const char *path, size_t plen )
+{
+    if ( plen && path[plen - 1] == '/' ) {
+    /* do not use trailing slash */
+        --plen;
+    }
+    if ( xml_ish )
+    {
+        int size = plen;
+        /* find leaf name of node */
+        const char *slash = string_rchr ( path, plen, '/' );
+        if ( slash ) {
+            /* make sure not to print trailing slash */
+            size = plen - (slash - path) - 1;
+            if ( size < 0 ) {
+                size = 0;
+            }
+        }
+
+        indent ();
+        OUTMSG (( "<%.*s", size, ( slash != NULL ) ? slash + 1 : path ));
+    }
+}
+
+static
+void node_close ( const char *path, size_t plen,
+    size_t vsize, uint32_t num_children, bool close_indent )
+{
+    if ( plen && path[plen - 1] == '/' ) {
+        --plen;
+    }
+    if ( xml_ish )
+    {
+        if ( vsize == 0 && num_children == 0 )
+            OUTMSG (( "/>\n" ));
+        else
+        {
+            int size = plen;
+            const char *slash = string_rchr ( path, plen, '/' );
+            if ( slash ) {
+                size = plen - (slash - path) - 1;
+                if ( size < 0 ) {
+                    size = 0;
+                }
+            }
+            if ( close_indent )
+                indent ();
+            OUTMSG (( "</%.*s>\n", size, ( slash != NULL ) ? slash + 1 : path ));
+        }
+    }
+}
+
+static
+void attr_select ( const char *name, const char *value )
+{
+    if ( xml_ish )
+        OUTMSG (( " %s=\"%s\"", name, value ));
+}
+
+static void value_print(char value) {
+    const char *replacement = NULL;
+
+    switch (value) {
+        case '\"':
+            replacement = """;
+            break;   
+        case '&':
+            replacement = "&";
+            break;   
+        case '<':
+            replacement = "<";
+            break;   
+        case '>':
+            replacement = ">";
+            break;
+        default:
+            break;
+    }
+
+    if (replacement != NULL && as_valid_xml) {
+        OUTMSG(("%s", replacement));
+    }
+    else {
+        OUTMSG(("%c", value));
+    }
+}
+
+static
+void value_select ( const char *value, size_t vlen, uint32_t num_children, bool *close_indent )
+{
+    if ( xml_ish )
+    {
+        size_t i;
+        bool binary = false;
+
+        /* discover if text or apparently binary */
+        for ( i = 0; i < vlen && ! binary; ++ i )
+        {
+            if ( ! isprint ( value [ i ] ) )
+            {
+                switch ( value [ i ] )
+                {
+                case '\t':
+                case '\r':
+                case '\n':
+                    break;
+                default:
+                    binary = true;
+                }
+            }
+        }
+
+        /* if there are children, create special tag */
+        if ( num_children != 0 || ( binary && vlen > 16 ) || ( vlen > 64 ) )
+        {
+            OUTMSG (( ">\n" ));
+            ++ indent_lvl;
+            indent ();
+            if ( num_children != 0 )
+                OUTMSG (( "<%%>" ));
+        }
+        else
+        {
+            OUTMSG (( ">" ));
+        }
+
+        /* if binary, print as hex */
+        if ( binary )
+        {
+            bool as_hex = !as_unsigned;
+            if( as_unsigned ) {
+                switch(vlen) {
+                    case 1:
+                        OUTMSG (( "%hu", ( ( const uint8_t* ) value ) [ 0 ] ));
+                        break;
+                    case 2:
+                        OUTMSG (( "%u", ( ( const uint16_t* ) value ) [ 0 ] ));
+                        break;
+                    case 4:
+                        OUTMSG (( "%u", ( ( const uint32_t* ) value ) [ 0 ] ));
+                        break;
+                    case 8:
+                        OUTMSG (( "%lu", ( ( const uint64_t* ) value ) [ 0 ] ));
+                        break;
+                    default:
+                        as_hex = true;
+                        break;
+                }
+            }
+            if( as_hex ) {
+                for ( i = 0; i < vlen; ++ i )
+                {
+                    if ( i != 0 && ( i & 15 ) == 0 )
+                    {
+                        OUTMSG (( "\n" ));
+                        indent ();
+                    }
+                    OUTMSG (( "\\x%02X", ( ( const uint8_t* ) value ) [ i ] ));
+                }
+            }
+        }
+
+        /* text */
+        else
+        {
+            /* int tab_stop; */
+
+            OUTMSG (( "'" ));
+            for ( /* tab_stop = 0, */ i = 0; i < vlen; ++ i )
+            {
+                switch ( value [ i ] )
+                {
+                case '\t': /* OUTMSG (( "%.*s", 4 - ( tab_stop & 3 ), "    " )); */
+                    /* tab_stop = ( tab_stop + 4 ) & -4; */
+                    OUTMSG (( "\t" ));
+                    break;
+                case '\r': OUTMSG (( "\\r" ));
+                    break;
+                case '\n': OUTMSG (( "\n" ));
+                    indent ();
+                    if ( i + 1 < vlen )
+                        OUTMSG (( " " ));
+                    /* tab_stop = 0; */
+                    break;
+                default:
+                    value_print(value[i]);
+                }
+            }
+            OUTMSG (( "'" ));
+        }
+
+        /* if there are children, close special tag */
+        if ( num_children != 0 )
+        {
+            OUTMSG (( "</%%>\n" ));
+            -- indent_lvl;
+            * close_indent = true;
+        }
+        else if ( ( binary && vlen > 16 ) || ( vlen > 64 ) )
+        {
+            OUTMSG (( "\n" ));
+            -- indent_lvl;
+            * close_indent = true;
+        }
+    }
+}
+
+static
+void children_begin ( size_t vsize, uint32_t num_children )
+{
+    ++ indent_lvl;
+
+    if ( vsize == 0 && num_children != 0 )
+        OUTMSG (( ">\n" ));
+}
+
+static
+void children_end ( void )
+{
+    if ( indent_lvl > 0 )
+        -- indent_lvl;
+}
+
+
+/* select
+ */
+static
+rc_t md_select_expr ( const KMDataNode *node, char *path, size_t psize, int plen, const char *attr, bool wildcard )
+{
+    rc_t rc;
+    const char *name;
+    uint32_t i, num_children;
+    KNamelist *children;
+    bool close_indent = false;
+
+    size_t vsize = 0;
+    char value [ 1024 ];
+
+    /* list node children */
+    rc = KMDataNodeListChild ( node, & children );
+    if ( rc == 0 )
+        rc = KNamelistCount ( children, & num_children );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to list child nodes of '$(path)'", "path=%s", path ));
+        return rc;
+    }
+
+    /* report on single node */
+    if ( ! wildcard )
+    {
+        if ( attr != NULL )
+        {
+            /* report only attribute */
+            rc = KMDataNodeReadAttr ( node, attr, value, sizeof value, & vsize );
+            if ( rc != 0 )
+            {
+                KNamelistRelease ( children );
+                if ( GetRCState ( rc ) == rcNotFound )
+                    return 0;
+
+                PLOGERR ( klogErr,  (klogErr, rc, "failed to read attribute '$(path)@$(attr)'", "path=%s,attr=%s", path, attr ));
+                return rc;
+            }
+
+            /* open node report */
+            node_open ( path, plen );
+
+            /* report attribute */
+            attr_select ( attr, value );
+
+            /* close it off */
+            node_close ( path, plen, 0, 0, false );
+
+            /* Exit here if an attribute was requested in query */
+            return 0;
+        }
+        else
+        {
+            uint32_t count;
+            size_t remaining;
+            char *vp = value;
+            KNamelist *attrs;
+
+            /* report entire node */
+            rc = KMDataNodeListAttr ( node, & attrs );
+            if ( rc == 0 )
+                rc = KNamelistCount ( attrs, & count );
+            if ( rc != 0 )
+            {
+                KNamelistRelease ( children );
+                PLOGERR ( klogErr,  (klogErr, rc, "failed to list attributes of '$(path)'", "path=%s", path ));
+                return rc;
+            }
+
+            /* open node report */
+            node_open ( path, plen );
+
+            /* report each attribute */
+            for ( i = 0; i < count; ++ i )
+            {
+                rc = KNamelistGet ( attrs, i, & name );
+                if ( rc != 0 )
+                    PLOGERR ( klogWarn,  (klogWarn, rc, "failed to read attribute name $(idx) of '$(path)'", "idx=%u,path=%s", i, path ));
+                else
+                {
+                    rc = KMDataNodeReadAttr ( node, name, value, sizeof value, & vsize );
+                    if ( rc != 0 )
+                    {
+                        KNamelistRelease ( children );
+                        KNamelistRelease ( attrs );
+                        PLOGERR ( klogErr,  (klogErr, rc, "failed to read attribute '$(path)@$(attr)'", "path=%s,attr=%s", path, name ));
+                        return rc;
+                    }
+
+                    /* report attribute */
+                    attr_select ( name, value );
+                }
+            }
+
+            /* done with header */
+            KNamelistRelease ( attrs );
+
+            /* read node value */
+            rc = KMDataNodeRead ( node, 0, value, sizeof value, & vsize, & remaining );
+            if ( rc != 0 )
+            {
+                KNamelistRelease ( children );
+                PLOGERR ( klogErr,  (klogErr, rc, "failed to read value of '$(path)'", "path=%s", path ));
+                return rc;
+            }
+
+            /* allocate a larger buffer if not complete */
+            if ( remaining != 0 )
+            {
+                size_t remaining_vsize;
+
+                vp = malloc ( vsize + remaining );
+                if ( vp == NULL )
+                {
+                    KNamelistRelease ( children );
+                    rc = RC ( rcExe, rcMetadata, rcAllocating, rcMemory, rcExhausted );
+                    PLOGERR ( klogInt,  (klogInt, rc, "failed to read value of '$(path)'", "path=%s", path ));
+                    return rc;
+                }
+                memmove ( vp, value, vsize );
+                rc = KMDataNodeRead ( node, vsize, & vp [ vsize ], remaining, & remaining_vsize, & remaining );
+                if ( rc == 0 && remaining != 0 )
+                    rc = RC ( rcExe, rcMetadata, rcReading, rcTransfer, rcIncomplete );
+                if ( rc != 0 )
+                {
+                    free ( vp );
+                    KNamelistRelease ( children );
+                    PLOGERR ( klogErr,  (klogErr, rc, "failed to read value of '$(path)'", "path=%s", path ));
+                    return rc;
+                }
+
+                vsize += remaining_vsize;
+            }
+
+            /* report node value */
+            if ( vsize != 0 )
+                value_select ( vp, vsize, num_children, & close_indent );
+
+            /* whack allocation */
+            if ( vp != value )
+                free ( vp );
+        }
+    }
+
+    if ( ! wildcard )
+        children_begin ( vsize, num_children );
+
+    /* if there are children, list them now */
+    for ( i = 0; i < num_children; ++ i )
+    {
+        rc = KNamelistGet ( children, i, & name );
+        if ( rc != 0 )
+            PLOGERR ( klogWarn,  (klogWarn, rc, "failed to read child name $(idx) of '$(path)'", "idx=%u,path=%.*s", i, plen, path ));
+        else
+        {
+            size_t childlen;
+            rc = string_printf ( & path [ plen ], psize - plen, & childlen, "/%s", name );
+            if ( rc != 0 )
+                PLOGERR ( klogWarn,  (klogWarn, rc, "failed to select child $(name) of '$(path)'", "name=%s,path=%.*s", name, plen, path ));
+            else
+            {
+                const KMDataNode *child;
+                rc = KMDataNodeOpenNodeRead ( node, & child, "%s", name );
+                if ( rc != 0 )
+                {
+                    KNamelistRelease ( children );
+                    PLOGERR ( klogErr,  (klogErr, rc, "failed to open child '$(path)'", "path=%s", path ));
+                    return rc;
+                }
+
+                /* recurse on child */
+                rc = md_select_expr ( child, path, psize, plen + childlen, attr, false );
+                close_indent = true;
+
+                KMDataNodeRelease ( child );
+
+                if ( rc != 0 )
+                {
+                    KNamelistRelease ( children );
+                    return rc;
+                }
+            }
+        }
+    }
+
+    if ( ! wildcard )
+        children_end ();
+
+    KNamelistRelease ( children );
+
+    path [ plen ] = 0;
+
+    if ( ! wildcard )
+        node_close ( path, plen, vsize, num_children, close_indent );
+
+    return 0;
+}
+
+#if ALLOW_UPDATE
+static
+rc_t md_update_expr ( KMDataNode *node, const char *path, const char *attr, const char *expr )
+{
+    rc_t rc;
+
+    /* according to documentation, "expr" is allowed to be text
+       or text with escaped hex sequences. examine for escaped hex */
+    size_t len = string_size ( expr );
+    char *buff = malloc ( len + 1 );
+    if ( buff == NULL )
+        rc = RC ( rcExe, rcMetadata, rcUpdating, rcMemory, rcExhausted );
+    else
+    {
+        size_t i, j;
+        for ( i = j = 0; i < len; ++ i, ++ j )
+        {
+            if ( ( buff [ j ] = expr [ i ] ) == '\\' )
+            {
+                /* we know "expr" is NUL-terminated, so this is safe */
+                if ( tolower ( expr [ i + 1 ] ) == 'x' &&
+                     isxdigit ( expr [ i + 2 ] ) &&
+                     isxdigit ( expr [ i + 3 ] ) )
+                {
+                    int msn = toupper ( expr [ i + 2 ] ) - '0';
+                    int lsn = toupper ( expr [ i + 3 ] ) - '0';
+                    if ( msn >= 10 )
+                        msn += '0' - 'A' + 10;
+                    if ( lsn >= 10 )
+                        lsn += '0' - 'A' + 10;
+                    buff [ j ] = ( char ) ( ( msn << 4 ) | lsn );
+                    i += 3;
+                }
+            }
+        }
+
+        if ( attr != NULL )
+        {
+            /* set attribute value */
+            buff [ j ] = 0;
+            rc = KMDataNodeWriteAttr ( node, attr, buff );
+        }
+        else
+        {
+            /* now set the value of the node */
+            rc = KMDataNodeWrite ( node, buff, j );
+        }
+        free ( buff );
+    }
+
+    return rc;
+}
+#endif
+
+static
+bool CC md_select ( void *item, void *data )
+{
+    bool fail = true;
+    KDBMetaParms *pb = data;
+
+    CONST KMDataNode *node;
+#if ALLOW_UPDATE
+    bool read_only = true;
+    if ( ! read_only_arg ) {
+        pb -> rc = KMetadataOpenNodeUpdate ( pb -> md, & node, NULL );
+        if ( pb -> rc == 0 )
+            read_only = false;
+    }
+#endif
+    if ( read_only )
+        pb -> rc = KMetadataOpenNodeRead ( pb -> md, ( const KMDataNode** ) & node, NULL );
+    if ( pb -> rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to open root node for '$(path)'", "path=%s", pb -> targ ));
+    else
+    {
+        bool wildcard;
+        char *expr, *attr, path [ 4096 ];
+        size_t len = string_copy_measure ( path, sizeof path, item );
+
+        /* detect assignment */
+        expr = string_rchr ( path, len, '=' );
+        if ( expr != NULL )
+        {
+            len = expr - path;
+            * expr ++ = 0;
+        }
+        attr = string_rchr ( path, len, '@' );
+        if ( attr != NULL )
+        {
+            len = attr - path;
+            * attr ++ = 0;
+        }
+
+        if ( expr != NULL )
+        {
+#if ALLOW_UPDATE
+            if ( read_only )
+            {
+                PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+                                      "'$(path)' is read-only - "
+                                      "'$(expr)' treated as select."
+                                      , "path=%s,expr=%s", pb -> targ, item ) );
+                expr = NULL;
+            }
+#else
+            PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+                                  "'$(expr)' treated as select.", "expr=%s", item ) );
+            expr = NULL;
+#endif
+        }
+
+        wildcard = false;
+        if ( len >= 1 && path [ len - 1 ] == '*' )
+        {
+            if ( len == 1 )
+            {
+                path [ len = 0 ] = 0;
+                wildcard = true;
+            }
+            else if ( len >= 2 && path [ len - 2 ] == '/' )
+            {
+                path [ len -= 2 ] = 0;
+                wildcard = true;
+            }
+        }
+
+#if ALLOW_UPDATE
+        if ( expr != NULL )
+        {
+            KMDataNode *root = node;
+
+            if ( wildcard || len == 0 )
+            {
+                pb -> rc = RC ( rcExe, rcMetadata, rcUpdating, rcExpression, rcIncorrect );
+                PLOGERR ( klogErr, ( klogErr, pb -> rc, "node updates require explicit paths - "
+                                     "'$(expr)' cannot be evaluated", "expr=%s", item ) );
+                return true;
+            }
+
+            pb -> rc = KMDataNodeOpenNodeUpdate ( root, & node, "%s", path );
+            KMDataNodeRelease ( root );
+
+            if ( pb -> rc != 0 )
+            {
+                PLOGERR ( klogErr,  (klogErr, pb -> rc,
+                    "failed to open node '$(node)' for '$(path)'",
+                                     "node=%s,path=%s", path, pb -> targ ));
+            }
+            else
+            {
+                pb -> rc = md_update_expr ( node, path, attr, expr );
+            }
+        }
+        else
+#endif
+
+        if ( len == 0 )
+            pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+        else
+        {
+            const KMDataNode *root = node;
+            pb -> rc = KMDataNodeOpenNodeRead ( root, ( const KMDataNode** ) & node, "%s", path );
+            KMDataNodeRelease ( root );
+
+            if ( pb -> rc != 0 )
+            {
+                PLOGERR ( klogErr,  (klogErr, pb -> rc,
+                    "failed to open node '$(node)' for '$(path)'",
+                                     "node=%s,path=%s", path, pb -> targ ));
+            }
+            else
+            {
+                pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+            }
+        }
+
+        if ( pb -> rc == 0 )
+            fail = false;
+
+        KMDataNodeRelease ( node );
+    }
+
+    return fail;
+}
+
+static
+rc_t col_select ( KDBMetaParms * pb)
+{
+    CONST KColumn *col;
+    rc_t rc;
+
+    bool read_only = true;
+
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenColumnUpdate ( pb -> mgr, & col, "%s", pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenColumnRead ( pb -> mgr, ( const KColumn** ) & col, "%s", pb->targ );
+    if ( rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to open column '$(col)'", "col=%s", pb->targ ));
+    else
+    {
+#if ALLOW_UPDATE
+        if ( ! read_only_arg ) {
+            read_only = false;
+            rc = KColumnOpenMetadataUpdate ( col, & pb -> md );
+            if ( rc != 0 )
+                read_only = true;
+        }
+#endif
+        if ( read_only )
+            rc = KColumnOpenMetadataRead ( col, ( const KMetadata** ) & pb -> md );
+        if ( rc != 0 )
+            PLOGERR ( klogErr,  (klogErr, rc, "failed to open metadata for column '$(col)'", "col=%s", pb->targ ));
+        else
+        {
+            bool fail;
+
+            fail = VectorDoUntil ( pb -> q, false, md_select, pb );
+
+            if (fail)
+                rc = pb->rc;
+
+            KMetadataRelease ( pb -> md ), pb -> md = NULL;
+        }
+
+        KColumnRelease ( col );
+    }
+    return rc;
+}
+
+static
+rc_t tbl_select ( KDBMetaParms * pb)
+{
+    CONST KTable *tbl;
+    rc_t rc;
+
+    bool read_only = true;
+
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenTableUpdate ( pb -> mgr, & tbl, "%s", pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenTableRead ( pb -> mgr, ( const KTable** ) & tbl, "%s", pb->targ );
+    if ( rc != 0 )
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to open table '$(tbl)'", "tbl=%s", pb->targ ));
+    else
+    {
+        read_only = true;
+#if ALLOW_UPDATE
+        if ( ! read_only_arg ) {
+            read_only = false;
+            rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+            if ( rc != 0 )
+                read_only = true;
+        }
+#endif
+        if ( read_only )
+            rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
+        if ( rc != 0 )
+            PLOGERR ( klogErr,  (klogErr, rc, "failed to open metadata for table '$(tbl)'", "tbl=%s", pb->targ ));
+        else
+        {
+            bool fail;
+
+            fail = VectorDoUntil ( pb -> q, false, md_select, pb );
+            if (fail)
+                rc = pb->rc;
+
+            KMetadataRelease ( pb -> md ), pb -> md = NULL;
+        }
+
+        KTableRelease ( tbl );
+    }
+
+    return rc;
+}
+
+static
+rc_t db_select (KDBMetaParms * pb)
+{
+    CONST KDatabase *db;
+    rc_t rc;
+
+    bool read_only = true;
+
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenDBUpdate ( pb -> mgr, & db, "%s", pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenDBRead ( pb -> mgr, ( const KDatabase** ) & db, "%s", pb->targ );
+    if ( rc != 0 ) {
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to open db '$(db)'",
+            "db=%s", pb->targ ));
+    }
+    else {
+        CONST KTable* tbl = NULL;
+        if (table_arg) {
+            read_only = true;
+#if ALLOW_UPDATE
+            if ( ! read_only_arg ) {
+                read_only = false;
+                rc = KDatabaseOpenTableUpdate ( db, &tbl, "%s", table_arg );
+                if ( rc != 0 )
+                    read_only = true;
+            }
+#endif
+            if ( read_only )
+                rc = KDatabaseOpenTableRead ( db, ( const KTable** ) &tbl, "%s", table_arg );
+            if ( rc != 0 ) {
+                PLOGERR ( klogErr,  (klogErr, rc,
+                    "failed to open table '$(table)'", "table=%s", table_arg ));
+            }
+        }
+        if ( rc == 0) {
+            if (tbl) {
+                read_only = true;
+#if ALLOW_UPDATE
+                if ( ! read_only_arg ) {
+                    read_only = false;
+                    rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+                    if ( rc != 0 )
+                        read_only = true;
+                }
+#endif
+                if ( read_only )
+                    rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr,  (klogErr, rc,
+                        "failed to open metadata for table '$(table)'",
+                        "table=%s", table_arg ));
+                }
+            }
+            else {
+                read_only = true;
+#if ALLOW_UPDATE
+                if ( ! read_only_arg ) {
+                    read_only = false;
+                    rc = KDatabaseOpenMetadataUpdate ( db, & pb -> md );
+                    if ( rc != 0 )
+                        read_only = true;
+                }
+#endif
+                if ( read_only )
+                    rc = KDatabaseOpenMetadataRead ( db, ( const KMetadata** ) & pb -> md );
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr,  (klogErr, rc,
+                        "failed to open metadata for db '$(db)'",
+                        "db=%s", pb->targ ));
+                }
+            }
+            if ( rc == 0 ) {
+                bool fail;
+
+                fail = VectorDoUntil ( pb -> q, false, md_select, pb );
+                if(fail)
+                    rc = pb->rc;
+                KMetadataRelease ( pb -> md ), pb -> md = NULL;
+            }
+        }
+        KTableRelease ( tbl );
+        KDatabaseRelease ( db );
+    }
+
+    return rc;
+}
+
+static
+rc_t tool_select ( CONST KDBManager * mgr, uint32_t type, const char * targ, const Vector * q)
+{
+    KDBMetaParms pb;
+    rc_t rc;
+
+    pb.mgr = mgr;
+    pb.md = NULL;
+    pb.targ = targ;
+    pb.q = q;
+    pb.rc = 0;
+
+    switch (type)
+    {
+    default:
+        rc = RC (rcExe, rcNoTarg, rcAccessing, rcParam, rcInvalid);
+        break;
+
+    case kptDatabase:
+        rc = db_select (&pb);
+        break;
+
+    case kptPrereleaseTbl:
+    case kptTable:
+        rc = tbl_select (&pb);
+        break;
+
+    case kptColumn:
+        rc = col_select (&pb);
+        break;
+    }
+    return rc;
+}
+
+const char UsageDefaultName[] = "kdbmeta";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [Options] <target> [<query> ...]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Display the contents of one or more metadata stores.\n"
+#if ALLOW_UPDATE
+                    "  Update metadata.\n"
+#endif
+                  , progname);
+}
+
+static const char *const t1 [] = { "path-to-database", "access database metadata", NULL };
+static const char *const t2 [] = { "path-to-table",    "access table metadata", NULL };
+static const char *const t3 [] = { "path-to-column",   "access column metadata", NULL };
+static const char *const t4 [] = { "accession",        "sra global access id", NULL };
+
+static const char *const q1 [] = { "*","all nodes and attributes", NULL };
+static const char *const q2 [] = { "NAME","a named root node and children", NULL };
+static const char *const q3 [] = { "PATH/NAME","an internal node and children", NULL };
+static const char *const q4 [] = { "<node>@ATTR","a named attribute", NULL };
+#if ALLOW_UPDATE
+static const char *const q5 [] = { "<obj>=VALUE","a simple value assignment where",
+                                   "value string is text, and binary",
+                                   "values use hex escape codes", NULL };
+#endif
+
+#define ALIAS_READ_ONLY             "r"
+#define OPTION_READ_ONLY            "read-only"
+static const char* USAGE_READ_ONLY[] = { "operate in read-only mode", NULL };
+
+#define ALIAS_TABLE             "T"
+#define OPTION_TABLE            "table"
+static const char* USAGE_TABLE[] = { "table-name", NULL };
+
+#define ALIAS_UNSIGNED             "u"
+#define OPTION_UNSIGNED            "unsigned"
+static const char* USAGE_UNSIGNED[]
+                                 = { "print numeric values as unsigned", NULL };
+
+#define OPTION_OUT "output"
+#define ALIAS_OUT  "X"
+static const char* USAGE_OUT[] = { "Output type: one of (xml text): ",
+    "whether to generate well-formed XML. Default: xml (well-formed)", NULL };
+
+const OptDef opt[] = {
+  { OPTION_TABLE    , ALIAS_TABLE    , NULL, USAGE_TABLE    , 1, true , false }
+ ,{ OPTION_UNSIGNED , ALIAS_UNSIGNED , NULL, USAGE_UNSIGNED , 1, false, false }
+#if ALLOW_UPDATE
+ ,{ OPTION_READ_ONLY, ALIAS_READ_ONLY, NULL, USAGE_READ_ONLY, 1, false, false }
+#endif
+ ,{ OPTION_OUT      , ALIAS_OUT      , NULL, USAGE_OUT      , 1, true , false }
+};
+
+static const char * const * target_usage [] = { t1, t2, t3, t4 };
+static const char * const * query_usage []  =
+{
+    q1, q2, q3, q4
+#if ALLOW_UPDATE
+    , q5
+#endif
+};
+
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    unsigned idx;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("  The target metadata are described by one or more\n"
+             "  target specifications, giving the path to a database, a table\n"
+             "  or a column. the command and query are executed on each target.\n"
+             "\n"
+             "  queries name one or more objects, and '*' acts as a wildcard.\n"
+             "  query objects are nodes or attributes. nodes are named with a\n"
+             "  hierarchical path, like a file-system path. attributes are given\n"
+             "  as a node path followed by a '@' followed by the attribute name.\n"
+             "\n"
+             "target:\n");
+
+    for (idx = 0; idx < sizeof (target_usage) / sizeof target_usage[0]; ++idx)
+        HelpParamLine ( (target_usage[idx])[0], (target_usage[idx])+1 );
+
+    OUTMSG (("\n"
+             "query:\n"));
+
+    for (idx = 0; idx < sizeof (query_usage) / sizeof query_usage[0]; ++idx)
+        HelpParamLine ( (query_usage[idx])[0], (query_usage[idx])+1 );
+
+    OUTMSG (("\n"
+             "Options:\n"));
+
+    for(idx = 0; idx < sizeof(opt) / sizeof(opt[0]); ++idx) {
+        const char *param = NULL;
+        if (strcmp(opt[idx].aliases, ALIAS_TABLE) == 0) {
+            param = "table";
+        }
+        else if (strcmp(opt[idx].aliases, ALIAS_OUT) == 0) {
+            param = "value";
+        }
+        HelpOptionLine(opt[idx].aliases, opt[idx].name, param, opt[idx].help);
+    }
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, opt, sizeof(opt) / sizeof(opt[0]));
+    if (rc == 0)
+    {
+        do 
+        {
+            const char * pc;
+            KDirectory *curwd;
+            uint32_t pcount;
+            int ix;
+
+#if ALLOW_UPDATE
+            read_only_arg = false;
+            rc = ArgsOptionCount (args, OPTION_READ_ONLY, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_READ_ONLY "' argument");
+                break;
+            }
+            read_only_arg = pcount > 0;
+#endif
+
+            rc = ArgsOptionCount (args, OPTION_UNSIGNED, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_UNSIGNED "' argument");
+                break;
+            }
+            as_unsigned = pcount > 0;
+
+            rc = ArgsOptionCount (args, OPTION_TABLE, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_TABLE "' argument");
+                break;
+            }
+            if (pcount) {
+                rc = ArgsOptionValue (args, OPTION_TABLE, 0, (const void **)&table_arg);
+                if (rc) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_TABLE "' argument");
+                    break;
+                }
+            }
+
+            rc = ArgsOptionCount (args, OPTION_OUT, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+                break;
+            }
+            if (pcount) {
+                const char* dummy = NULL;
+                rc = ArgsOptionValue (args, OPTION_OUT, 0, (const void **)&dummy);
+                if (rc) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_OUT "' argument");
+                    break;
+                }
+                else if (strcmp(dummy, "t") == 0) {
+                    as_valid_xml = false;
+                }
+            }
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 0)
+            {
+                OUTMSG (( "missing database target path and queries\n" ));
+                MiniUsage (args);
+                ArgsWhack(args);
+                exit(EXIT_FAILURE);
+            }
+
+            rc = KDirectoryNativeDir (&curwd);
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "Unable to open the file system");
+            }
+            else
+            {
+                CONST KDBManager * mgr;
+#if ALLOW_UPDATE
+                rc = KDBManagerMakeUpdate (&mgr, curwd);
+#else
+                rc = KDBManagerMakeRead (&mgr, curwd);
+#endif
+                if (rc)
+                    LOGERR (klogInt, rc, "Unable to open the database system");
+                else
+                {
+                    /* get target */
+                    rc = ArgsParamValue (args, 0, (const void **)&pc);
+                    if (rc)
+                        LOGERR (klogInt, rc, "Unable to read target parameter");
+                    else
+                    {
+                        char objpath [ 4096 ];
+                        bool found;
+                        uint32_t type;
+
+                        found = false;
+
+                        {
+                            const VFSManager * vfs;
+                            rc = KDBManagerGetVFSManager ( mgr, ( VFSManager ** )&vfs );
+                            if ( rc == 0 )
+                            {
+                                VResolver * resolver;
+                                rc = VFSManagerGetResolver ( vfs, & resolver );
+                                if ( rc == 0 )
+                                {
+                                    VPath * query;
+                                    rc = VFSManagerMakePath ( vfs, & query, "%s", pc );
+                                    if ( rc == 0 )
+                                    {
+                                        const VPath * local;
+                                        rc = VResolverQuery ( resolver, 0, query, & local, NULL, NULL );
+                                        if ( rc == 0 )
+                                        {
+                                            rc = VPathReadPath ( local, objpath, sizeof objpath, NULL );
+                                            if ( rc == 0 )
+                                                found = true;
+
+                                            VPathRelease ( local );
+                                        }
+                                        else if ( GetRCState ( rc ) == rcNotFound )
+                                        {
+                                            rc = 0;
+                                        }
+
+                                        VPathRelease ( query );
+                                    }
+
+                                    VResolverRelease ( resolver );
+                                }
+
+                                VFSManagerRelease ( vfs );
+                            }
+                        }
+
+                        if ( ! found)
+                        {
+                            rc = KDirectoryResolvePath (curwd, true, objpath,
+                                                        sizeof objpath, "%s", pc);
+
+                            if (rc)
+                                LOGERR (klogFatal, rc,
+                                    "Unable to resolved target path");
+                        }
+
+                        type = KDBManagerPathType (mgr, "%s", objpath);
+                            
+                        switch (type)
+                        {
+                        case kptDatabase:
+                        case kptPrereleaseTbl:
+                        case kptTable:
+                        case kptColumn:
+                            break;
+
+                        case kptBadPath:
+                            rc = RC ( rcDB, rcMgr, rcAccessing, rcPath, rcInvalid );
+                            PLOGERR ( klogErr, (klogErr, rc, "'$(path)' -- bad path", "path=%s", pc ));
+                            break;
+                        default:
+                            rc = RC ( rcDB, rcMgr, rcAccessing, rcPath, rcIncorrect );
+                            PLOGERR ( klogErr, (klogErr, rc, "'$(path)' -- type unknown", "path=%s", pc ));
+                            break;
+
+                        case kptNotFound:
+                            rc = RC ( rcDB, rcMgr, rcAccessing, rcPath, rcNotFound );
+                            PLOGERR ( klogErr, ( klogErr, rc, "'$(path)' not found", "path=%s", pc ));
+                            break;
+                        }
+                        if (rc == 0)
+                        {
+                            Vector q;
+
+                            VectorInit (&q, 0, 8);
+
+                            if (pcount == 1)
+                            {
+                                const char *default_query = "*";
+                                rc = VectorAppend (&q, NULL, default_query);
+                            }
+                            else for (ix = 1; ix < pcount; ++ix)
+                            {
+                                rc = ArgsParamValue (args, ix, (const void **)&pc);
+                                if (rc)
+                                    break;
+
+                                rc = ArgsParamValue (args, ix, (const void **)&pc);
+                                if (rc)
+                                    break;
+                                    
+                                rc = VectorAppend ( &q, NULL, pc );
+                                if (rc)
+                                    break;
+                            }
+
+                            if (rc)
+                                LOGERR (klogErr, rc, "Unable to queue queries");
+                            else
+                            {
+                                rc = tool_select (mgr, type, objpath, &q);
+                                
+                                VectorWhack (&q, NULL, NULL);
+                            }
+                        }
+                    }
+                    KDBManagerRelease (mgr);
+                }
+                KDirectoryRelease (curwd);
+            }
+        } while (0);
+    }
+    
+    ArgsWhack(args);
+    args = NULL;
+
+    return rc;
+}
diff --git a/tools/util/mac/syspass.c b/tools/util/mac/syspass.c
new file mode 100644
index 0000000..550af53
--- /dev/null
+++ b/tools/util/mac/syspass.c
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <readpassphrase.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    if (bufsiz == 0)
+    {   return 0; }
+
+    buf[0] = '\0';
+
+    if (readpassphrase(prompt, buf, bufsiz, 0) == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    return 0;
+}
diff --git a/tools/util/md5cp.c b/tools/util/md5cp.c
new file mode 100644
index 0000000..549ab09
--- /dev/null
+++ b/tools/util/md5cp.c
@@ -0,0 +1,702 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+
+#include <klib/vector.h>
+#include <klib/impl.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/md5.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MD5EXTENSION "md5"
+#define DEFAULTMODE 0664
+#define DEFAULT_DIR_MODE 0775
+
+/*
+Trying to mimic cp behavior, with a few differences, 
+mainly, that if -f not specified and target exists,
+we do not clobber files, but instead print something about it on the
+output.
+
+cp -r dir1 dir2 makes dir2/dir1
+cp -r dir1 <nonexistent-name> just "renames" directory dir1 to name
+-r not specified and dir copied from, ignores that directory.
+
+If multiple things are specified (more than 2)
+then the last one should exist and be a directory.
+
+-i should still be available, to ask what to do about things that would be clobbered.
+
+Need to think what to do when inputs are relative and absolute
+
+This needs to work with backslashes as well (i.e. independent of
+target platform).
+
+Need to worry about copying from a directory to itself
+Definitely don't want to copy a file from itself to itself
+
+Need also to worry about loops in references (when walking trees)
+
+What to do about symbolic links
+
+DONE: Need to make mode of file copied
+
+Need to make return code of executable be useful to scripts
+
+TESTS:
+
+copy file to nonexistent name (should create, and .md5 as well)
+do it again, make sure missing -f works (doesn't clobber).
+do it again with -f to see it clobbers.
+
+Make sure copying a directory to a file causes an error.
+
+make a directory with 2 files, copy to new (non-existent) name
+  without -r switch (should ignore directory)
+add -r switch, see creates the new name dir
+do it again, should create a subdirectory
+
+Check that mode is preserved on copying directory to new (nonexistent) name
+Check that mode is preserved on new files (created files)
+
+On existing files, the mode will be preserved on the TARGET file,
+unless -p is specified, in which case (like -f) the source will clobber
+the target protections.
+
+ */
+
+int interacative = 0;
+int force = 0;
+int recurse = 0;
+int test = 0;
+int clobber_protections = 0;
+int followlinks = 1;
+
+rc_t CopyDirectoryToExistingDirectory( const KDirectory *top, const char *inname, KDirectory *targettop, const char *outname );
+rc_t CopyFileToFile( const KDirectory *top, const char *inname, KDirectory *targettop, const char *outname );
+
+#define BUFSIZE 8192
+
+char buffer[BUFSIZE];
+
+/*
+ * out is a pre-allocated buffer.
+ */
+void JustTheName(const char *in, char *out) 
+{
+  int len;
+  int end;
+  int begin;
+  int i;
+  
+  len = strlen(in);
+  end = len;
+  end--;
+  while (end > 0 && in[end] == '/') {
+    end--;
+  }
+  begin = end;
+  while (begin > 0 && in[begin-1] != '/') {
+    begin--;
+  }
+  for (i=begin; i<=end; i++) {
+    *out++ = in[i];
+  }
+  *out++ = '\0';
+}
+
+bool PathIsMD5File(const KDirectory *dir, const char *inname)
+{
+  int extlen;
+  int inlen;
+
+  inlen = strlen(inname);
+  extlen = strlen(MD5EXTENSION);
+  if (strlen(inname) > extlen+1 &&
+      inname[inlen - extlen - 1] == '.' &&
+      0 == strcmp(inname+inlen-extlen, MD5EXTENSION)) {
+    return true;
+  }
+  return false;
+}
+
+bool CC PathIsFile( const KDirectory *dir, const char *name, void *data ) 
+{
+  uint32_t pathtype;
+  pathtype = KDirectoryPathType( dir, "%s", name );
+  return ((pathtype & ~kptAlias) == kptFile);
+}
+
+
+bool CC PathIsDir(const KDirectory *dir, const char *name, void *data) 
+{
+  uint32_t pathtype;
+  pathtype = KDirectoryPathType( dir, "%s", name );
+  return ((pathtype & ~kptAlias) == kptDir);
+}
+
+rc_t CopyMode( const KDirectory *source, const char *sourcename,
+	       KDirectory *target, char *targetname )
+{
+  /* Make sure they both exist and are the same type */
+  uint32_t src_pathtype;
+  uint32_t dest_pathtype;
+  uint32_t mode;
+  rc_t rc;
+
+  src_pathtype = KDirectoryPathType( source, "%s", sourcename );
+  dest_pathtype = KDirectoryPathType( target, "%s", targetname );
+  if ((src_pathtype & ~kptAlias) != (dest_pathtype & ~kptAlias)) {
+    return -1;
+  }
+  rc = KDirectoryAccess( source, &mode, "%s", sourcename );
+  if (rc != 0)
+    {
+      LOGERR ( klogInt, rc, sourcename );
+      return rc;
+    }
+  KDirectorySetAccess( target, false, mode, 0777, "%s", targetname );
+  return 0;
+}
+
+
+rc_t CopyDirectoryFiles( const KDirectory *source, KDirectory *dest ) {
+  rc_t rc;
+  KNamelist *list;
+  const char *name;
+  int i;
+  uint32_t count;
+  char resolved[1024];
+
+  rc = KDirectoryList( source, &list, PathIsFile, NULL, ".");
+  if (rc != 0)
+    {
+      /* This doesn't do what I thought. */
+      KDirectoryResolvePath( source, false, resolved, 1024, ".");
+      LOGERR ( klogInt, rc, resolved );
+      return rc;
+    }
+  KNamelistCount(list, &count);
+  for (i=0; i<count; i++) {
+    KNamelistGet(list, i, &name);
+    if (test) {
+      fprintf(stderr, "Will copy %s\n", name);
+    } else {
+      CopyFileToFile( source, name, dest, (char *)name );
+    }
+  }
+  return 0;
+}
+
+rc_t CopyDirectoryDirectories( const KDirectory *source, KDirectory *dest ) {
+  rc_t rc;
+  KNamelist *list;
+  const char *name;
+  int i;
+  uint32_t count;
+  uint32_t mode;
+  uint32_t pathtype;
+
+  KDirectoryList( source, &list, PathIsDir, NULL, ".");
+  KNamelistCount(list, &count);
+  for (i=0; i<count; i++) {
+    KNamelistGet(list, i, &name);
+    /* fprintf(stderr, "Creating directory %s\n", name); */
+    mode = DEFAULT_DIR_MODE;
+    rc = KDirectoryAccess( source, &mode, "%s", name);
+    if (rc != 0)
+      {
+	LOGERR ( klogInt, rc, name );
+	return rc;
+      }
+    pathtype = KDirectoryPathType( dest, "%s", name );
+    if ((pathtype & ~kptAlias) == kptNotFound) {
+        rc = KDirectoryCreateDir( dest, mode, kcmOpen, "%s", name );
+      if (rc != 0)
+	{
+	  LOGERR ( klogInt, rc, name );
+	  return rc;
+	}
+    } else if ((pathtype & ~kptAlias) == kptDir) {
+      if (clobber_protections) {
+          KDirectorySetAccess( dest, false, mode, 0777, "%s", name);
+      }
+    }
+    CopyDirectoryToExistingDirectory( source, name, dest, (char *)name);
+  }
+  return 0;
+}
+
+
+
+
+rc_t CopyFileToFile( const KDirectory *top, const char *inname, KDirectory *targettop, const char *outname )
+{
+  const KFile *in = NULL;
+  KFile *out = NULL;
+  KFile *md5file = NULL;
+  KMD5File *md5out = NULL;
+  KMD5SumFmt *md5sumfmt = NULL;
+  char md5filename[1024];
+  rc_t rc = 0;
+  uint32_t mode = 0;
+  uint32_t pathtype = 0;
+  uint32_t failed = 0;
+
+  if (PathIsMD5File(top, inname)) {
+    /* Skip it */
+    return 0;
+  }
+  
+  rc = KDirectoryOpenFileRead( top, &in, "%s", inname );
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+  mode = DEFAULTMODE;
+  rc = KDirectoryAccess( top, &mode, inname);
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+
+  /*
+   * Not sure here -- does kcmInit re-initialize the file mode as we specify?
+   * Or does it preserve the existing mode (and do we want it to)?
+   */
+  if (clobber_protections) {
+      pathtype = KDirectoryPathType( targettop, "%s", outname );
+    if ((pathtype & ~kptAlias) == kptFile) {
+        rc = KDirectorySetAccess( targettop, false, mode, 0777, "%s", outname);
+      if (rc != 0) {
+	failed = rc;
+	goto FAIL;
+      }
+    }
+  }
+
+  rc = KDirectoryCreateFile( targettop, &out, false, mode, (force? kcmInit: kcmCreate), "%s", outname );
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+  sprintf(md5filename, "%s.md5", outname);
+  rc = KDirectoryCreateFile( targettop, &md5file, false, DEFAULTMODE, (force? kcmInit: kcmCreate), "%s", md5filename);
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+
+  rc = KMD5SumFmtMakeUpdate( &md5sumfmt, md5file);
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+
+  rc = KMD5FileMakeWrite( &md5out, out, md5sumfmt, outname );
+  if (rc != 0) {
+    failed = rc;
+    goto FAIL;
+  }
+    
+  {  
+    uint64_t rpos = 0;
+    uint64_t wpos = 0;
+      
+    size_t numread;
+
+    while (true) {
+      rc = KFileRead( in, rpos, buffer, BUFSIZE, &numread );
+      /* fprintf(stderr, "Read %d bytes.\n", numread); */
+      if (rc == 0 && numread == 0) 
+	break;
+      if (rc != 0) {
+	failed = rc;
+	goto FAIL;
+      }
+      rpos += numread;
+
+      {
+	size_t numwritten = 0;
+	int written = 0;
+	while (written < numread) {
+	  rc = KFileWrite( (KFile *)md5out, wpos, buffer+written, numread-written, &numwritten );
+	  if (rc != 0) {
+	    failed = rc;
+	    break;
+	  }
+	  if (numwritten == 0) {
+	    fprintf(stderr, "Didn't write anything.\n");
+	    failed = -1;
+	    goto FAIL;
+	  }
+	  wpos += numwritten;
+	  written += numwritten;
+	}
+      }
+    }
+  }
+
+  /* Success also, check the value of failed to see if failed */
+ FAIL:
+
+  if (NULL != md5out) {
+    KFileRelease((KFile *)md5out);
+    md5out = NULL;
+  }
+
+  /*KFileRelease(out); */
+  if (NULL != md5sumfmt) {
+    KMD5SumFmtRelease(md5sumfmt);
+    md5sumfmt = NULL;
+  }
+  /*  KFileRelease(md5file); */
+  if (NULL != in) {
+    KFileRelease(in);
+    in = NULL;
+  }
+  /* KDirectoryRelease(top); */
+
+  if (failed) {
+      KDirectoryRemove( targettop, false, "%s", md5filename );
+      KDirectoryRemove( targettop, false, "%s", outname);
+  }
+
+  return failed;
+
+}  
+
+/*
+ * copies top/inname (a directory) 
+ * to targettop/outname, i.e. creates outname as a copy of that directory.
+ */
+rc_t CopyDirectoryToExistingDirectory( const KDirectory *top, const char *inname, KDirectory *targettop, const char *outname )
+{
+  rc_t rc;
+  uint32_t mode;
+  const KDirectory *source;
+  KDirectory *dest;
+  rc = KDirectoryOpenDirRead(top, &source, true, "%s", (const char *)inname);
+  if (rc != 0)
+    {
+      LOGERR ( klogInt, rc, "can't open input directory" );
+      return rc;
+    }
+  mode = DEFAULT_DIR_MODE;
+  rc = KDirectoryAccess( top, &mode, "%s", inname);
+  if (rc != 0)
+    {
+      LOGERR ( klogInt, rc, inname );
+      return rc;
+    }
+  rc = KDirectoryCreateDir( targettop, mode, kcmOpen, "%s", outname );
+  if (rc != 0)
+    {
+      LOGERR ( klogInt, rc, "can't create output directory" );
+      return rc;
+    }
+  if (clobber_protections) {
+      KDirectorySetAccess( targettop, false, mode, 0777, "%s", outname);
+  }
+  rc = KDirectoryOpenDirUpdate(targettop, &dest, true, "%s", outname);
+  if (rc != 0)
+    {
+      LOGERR ( klogInt, rc, "can't open directory for write" );
+      return rc;
+    }
+  CopyDirectoryFiles(source, dest);
+  CopyDirectoryDirectories( source, dest );
+
+  KDirectoryRelease( dest );
+  KDirectoryRelease( source );
+  return 0;
+}  
+
+#define OPTION_FORCE    "force"
+#define OPTION_RECURSE  "recursive"
+#define OPTION_PRESERVE "preserve"
+#define OPTION_TEST     "test"
+#define ALIAS_FORCE     "f"
+#define ALIAS_RECURSE   "r"
+#define ALIAS_PRESERVE  "p"
+#define ALIAS_TEST      "t"
+
+static const char * force_usage[]    = { "overwrite existing columns", NULL };
+static const char * recurse_usage[]  = { "Recurses over source directories",
+                                         "(directories are ignored otherwise).", NULL };
+static const char * preserve_usage[] = { "force replacement of existing modes on files", " and directories", NULL };
+static const char * test_usage[]     = { "?", NULL };
+
+
+OptDef Options[] = 
+{
+    { OPTION_FORCE,    ALIAS_FORCE,    NULL, force_usage,    0, false, false },
+    { OPTION_RECURSE,  ALIAS_RECURSE,  NULL, recurse_usage,  0, false, false },
+    { OPTION_PRESERVE, ALIAS_PRESERVE, NULL, preserve_usage, 0, false, false },
+    { OPTION_TEST,     ALIAS_TEST,     NULL, test_usage,     0, false, false }
+};
+
+
+const char UsageDefaultName[] = "md5cp";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s Options [file|directory ...] directory\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Copies files and/or directories, creating an md5sum checksum\n"
+                    "  (named file.md5) for all copied files.\n",
+                    progname);
+}
+
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("\n"
+             "Option:\n");
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+    HelpOptionLine (ALIAS_PRESERVE, OPTION_PRESERVE, NULL, preserve_usage);
+    HelpOptionLine (ALIAS_RECURSE, OPTION_RECURSE, NULL, recurse_usage);
+    HelpOptionLine (ALIAS_TEST, OPTION_TEST, NULL, test_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+rc_t run (Args * args)
+{
+    rc_t rc;
+
+    do 
+    {
+        const char * outname;
+        const char * source;
+        uint32_t pathtype;
+        KDirectory *top;
+        KDirectory *targettop;
+        uint32_t pcount;
+        uint32_t ix;
+        char sourcename [1024];
+
+        rc = KDirectoryNativeDir (&top);
+        if (rc)
+            break;
+        rc = ArgsParamCount (args, &pcount);
+        if (rc)
+            break;
+
+        if (pcount < 2)
+        {
+            MiniUsage (args);
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+            break;
+        }
+
+        rc = ArgsParamValue (args, 0, (const void **)&outname);
+        if (rc)
+            break;
+
+        pathtype = KDirectoryPathType (top, "%s", outname);
+        if ((pathtype & ~kptAlias) == kptDir)
+        {
+            /* 
+             * Copying things into an existing directory.
+             */
+            rc = KDirectoryOpenDirUpdate( top, &targettop, true, outname);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, outname);
+                break;
+            }
+
+            for (ix = 1; ix < pcount; ++ix)
+            {
+                
+                rc = ArgsParamValue (args, ix, (const void **)&source);
+                if (rc)
+                    break;
+
+                JustTheName (source, sourcename);
+                pathtype = KDirectoryPathType (top, "%s", sourcename);
+                if ((pathtype & ~kptAlias) == kptFile)
+                {
+                    CopyFileToFile (top, source, targettop, sourcename);
+                }
+                else if ((pathtype & ~kptAlias) == kptDir)
+                {
+                    if (!recurse)
+                    {
+                        STSMSG (0, ("Skipping directory %s\n", source));
+                        continue;
+                    }
+                    CopyDirectoryToExistingDirectory (top, source, targettop, sourcename);
+                }
+            }
+            if (rc)
+                break;
+
+            rc = KDirectoryRelease (targettop);
+/* this looks wrong */
+            if (rc)
+                LOGERR (klogInt, rc, outname);
+        }
+        else if ((pathtype * ~kptAlias) == kptFile)
+        {
+            if (!force)
+            {
+                STSMSG (0, ("File exists -- %s\n", outname));
+                break;
+            }
+            if (pcount > 2)
+            {
+                STSMSG (0, ("Target %s is a file. Too many parameters/\n", outname));
+                break;
+            }
+
+            rc = ArgsParamValue (args, 1, (const void **)&source);
+            if (rc)
+                break;
+
+            pathtype = KDirectoryPathType (top, "%s", source);
+
+            if ((pathtype & ~kptAlias) == kptDir)
+            {
+                STSMSG (0, ("Cannot overwrite file with directory %s\n", source));
+                break;
+            }
+            if ((pathtype & ~kptAlias) == kptFile)
+            {
+                CopyFileToFile (top, source, top, outname);
+            }
+        }
+        else if ((pathtype & ~kptAlias) == kptNotFound)
+        {
+            if (pcount > 2)
+            {
+                STSMSG (0, ("Directory %s does not exist.\n", outname));
+                break;
+            }
+
+            rc = ArgsParamValue (args, 1, (const void **)&source);
+            if (rc)
+                break;
+
+            pathtype = KDirectoryPathType (top, "%s", source);
+            if ((pathtype & ~kptAlias) == kptFile)
+            {
+                CopyFileToFile (top, source, top, outname);
+            }
+            else if ((pathtype & ~kptAlias) == kptDir)
+            {
+                if (!recurse)
+                {
+                    STSMSG (0, ("Skipping directory %s\n", source));
+                    break;
+                }
+                CopyDirectoryToExistingDirectory (top, source, top, outname);
+            }
+        }
+
+    } while (0);
+    return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, 
+                            Options, sizeof (Options) / sizeof (OptDef));
+    if (rc == 0)
+    {
+        do
+        {
+            uint32_t pcount;
+
+            rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+            if (rc)
+                break;
+
+            force = (pcount > 0);
+
+            rc = ArgsOptionCount (args, OPTION_RECURSE, &pcount);
+            if (rc)
+                break;
+
+            recurse = (pcount > 0);
+
+
+            rc = ArgsOptionCount (args, OPTION_TEST, &pcount);
+            if (rc)
+                break;
+
+            test = (pcount > 0);
+
+            rc = ArgsOptionCount (args, OPTION_PRESERVE, &pcount);
+            if (rc)
+                break;
+
+            clobber_protections = (pcount > 0);
+
+            rc  = run (args);
+
+        }while (0);
+
+        ArgsWhack (args);
+    }
+    return rc;
+}
+
diff --git a/tools/util/pacbio-correct.c b/tools/util/pacbio-correct.c
new file mode 100644
index 0000000..a9a49fe
--- /dev/null
+++ b/tools/util/pacbio-correct.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data", the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties", express or implied", including
+*  warranties of performance", merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kdb/database.h>
+#include <kdb/manager.h>
+
+#include <vdb/vdb-priv.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <sysalloc.h>
+
+const char UsageDefaultName[] = "pacbio-correct";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    OUTMSG ( ("\n"
+        "Usage:\n"
+        "  %s writable_object(s)\n"
+        "\n", progname) );
+    return 0;
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+    return rc;
+}
+
+const char CONSENSUS[] = "CONSENSUS";
+const char PULSE[] = "PULSE";
+const char SEQUENCE[] = "SEQUENCE";
+
+rc_t correct( const char * obj )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "creation of KDirectory failed" );
+    }
+    else
+    {
+        VDBManager * vdb_mgr;
+        rc = VDBManagerMakeUpdate ( &vdb_mgr, dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "creation of VDBManager failed" );
+        }
+        else
+        {
+            VDatabase * vdb_db;
+            rc = VDBManagerOpenDBUpdate ( vdb_mgr, &vdb_db, NULL, "%s", obj );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "vdb: open for update failed" );
+            }
+            else
+            {
+                KDatabase *kdb;
+                rc = VDatabaseOpenKDatabaseUpdate ( vdb_db, & kdb );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "kdb: open for update failed" );
+                }
+                else
+                {
+                    if ( KDatabaseExists ( kdb, kptTable, CONSENSUS ) )
+                    {
+                        if ( KDatabaseExists ( kdb, kptTable, PULSE ) )
+                        {
+                            OUTMSG(( "table >%s< does already exist in >%s<\n", PULSE, obj ));
+                        }
+                        else
+                        {
+                            if ( KDatabaseExists ( kdb, kptTable, SEQUENCE ) )
+                            {
+                                rc = KDatabaseRenameTable ( kdb, true, SEQUENCE, PULSE );
+                                if ( rc != 0 )
+                                {
+                                    LOGERR( klogErr, rc, "kdb: renaming table failed" );
+                                }
+                                else
+                                {
+                                    OUTMSG(( "table >%s< renamed to >%s< in >%s<\n", SEQUENCE, PULSE, obj ));
+                                }
+                                if ( rc == 0 )
+                                {
+                                    rc = KDatabaseAliasTable ( kdb, CONSENSUS, SEQUENCE );
+                                    if ( rc != 0 )
+                                    {
+                                        LOGERR( klogErr, rc, "kdb: creating table-alias failed" );
+                                    }
+                                    else
+                                    {
+                                        OUTMSG(( "alias >%s< created for >%s< in >%s<\n", SEQUENCE, CONSENSUS, obj ));
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        OUTMSG(( "table >%s< does not exist in >%s<\n", CONSENSUS, obj ));
+                    }
+                    KDatabaseRelease ( kdb );
+                }
+                VDatabaseRelease( vdb_db );
+            }
+            VDBManagerRelease( vdb_mgr );
+        }
+        KDirectoryRelease( dir );
+    }
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 0 );
+
+    KLogHandlerSetStdErr();
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "error creating internal structure" );
+    }
+    else
+    {
+        uint32_t count;
+        rc = ArgsParamCount( args, &count );
+        if ( rc != 0 )
+            LOGERR( klogErr, rc, "ArgsParamCount failed" );
+        else
+        {
+            if ( count < 1 )
+            {
+                rc = RC( rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid );
+                LOGERR( klogErr, rc, "object(s) missing" );
+                Usage ( args );
+            }
+            else
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < count && rc == 0; ++idx )
+                {
+                    const char *obj;
+                    rc = ArgsParamValue( args, idx, (const void **)&obj );
+                    if ( rc != 0 )
+                        LOGERR( klogErr, rc, "error reading commandline-parameter" );
+                    else
+                        rc = correct( obj ); /* ** <<<<<<<<<<<<<<<<<< ** */
+                }
+            }
+        }
+        ArgsWhack ( args );
+    }
+
+    return rc;
+}
diff --git a/tools/util/pseudo-aligner.cpp b/tools/util/pseudo-aligner.cpp
new file mode 100644
index 0000000..3548e37
--- /dev/null
+++ b/tools/util/pseudo-aligner.cpp
@@ -0,0 +1,566 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <iostream>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <map>
+#include <stdexcept>
+#include <vector>
+#include <utility>
+#include <math.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <time.h>
+
+using namespace std;
+
+static unsigned stringtoui(string const &str, int base = 0)
+{
+    if (str.length() == 0)
+        throw length_error("empty");
+    
+    char *endp = NULL;
+    auto const value = strtoul(str.c_str(), &endp, base);
+    
+    if (*endp != '\0')
+        throw invalid_argument("'" + str + "' is not convertible to an integer");
+    
+    if (value > unsigned(-1L))
+        throw range_error("'" + str + "' is too big");
+
+    return unsigned(value);
+}
+
+struct Settings {
+    ostream *refSeqStream;
+    ostream *fastqStream;
+    
+    int const templateLength;
+    int const readLength;
+    int const coverageTarget;
+    int const lengthTarget;
+    string const &refName;
+    
+    Settings(map<string, string> &args)
+    : templateLength(600)
+    , readLength(150)
+    , coverageTarget(stringtoui(args["coverage"]))
+    , lengthTarget(stringtoui(args["length"]))
+    , refName(args["refname"])
+    {
+        refSeqStream = new ofstream((refName + ".fasta").c_str());
+        fastqStream = new ofstream(args["fastq"].c_str());
+    }
+    ~Settings() {
+        delete refSeqStream;
+        delete fastqStream;
+    }
+    
+    static vector<string> const &paramNames() {
+        static auto const value = vector<string>({
+            "refname", "fastq", "coverage", "length"
+        });
+        return value;
+    }
+    static vector<string> const &paramTypes() {
+        static auto const value = vector<string>({
+            "name", "file", "integer", "integer"
+        });
+        return value;
+    }
+};
+
+static Settings const *settings;
+
+static double frand()
+{
+    return double(random()) / double(1 << 30) - 1.0;
+}
+
+static pair<double, double> normalRandom()
+{
+    for ( ; ; ) {
+        auto const x = frand();
+        auto const y = frand();
+        auto const r = x * x + y * y;
+        if (0.0 < r && r <= 1.0) {
+            auto const scale = sqrt(-2.0 * log(r) / r);
+            return make_pair(x * scale, y * scale);
+        }
+    }
+}
+
+class Quality {
+    struct Phred {
+        uint8_t value;
+
+        Phred() : value(2) {}
+        explicit Phred(uint8_t const other) : value(other) {}
+        char Char() const {
+            return value + 33;
+        }
+        static Phred random() {
+            return Phred(max(3, min(40, int(33 + normalRandom().first * 5))));
+        }
+    };
+    typedef vector<Phred> vector_t;
+    
+    vector_t vec;
+    explicit Quality(vector_t const &other) : vec(other) {}
+public:
+    ostream &print(ostream &stream, bool rev) const {
+        if (rev) {
+            for (auto i = vec.rbegin(); i != vec.rend(); ++i) {
+                stream << i->Char();
+            }
+        }
+        else {
+            for (auto i : vec) {
+                stream << i.Char();
+            }
+        }
+        return stream;
+    }
+    static Quality random() {
+        auto rslt = vector_t(settings->readLength);
+        
+        for (auto i : rslt) {
+            i = Phred::random();
+        }
+        return Quality(rslt);
+    }
+};
+
+struct Base {
+    uint8_t value;
+
+    Base() : value(0) {}
+    explicit Base(uint8_t newValue) : value(newValue) {}
+    char DNA() const {
+        static char const tr[] = "NACGT";
+        return tr[value];
+    }
+    Base complement() const {
+        return Base(value == 0 ? 0 : (5 - value));
+    }
+    static Base random() {
+        auto const GC = frand() > 0.2; // GC or AT
+        auto const AC = frand() > 0.0; // A or C
+        return Base(GC ? (AC ? 2 : 3) : (AC ? 1 : 4));
+    }
+};
+
+class Sequence {
+    friend class RefSequence;
+
+    typedef vector<Base> vector_t;
+    
+    vector_t vec;
+    
+    explicit Sequence(vector_t const &other) : vec(other) {}
+public:
+    Base operator[](int i) const { return vec[i]; }
+    ostream &print(ostream &stream, bool rev) const {
+        if (rev) {
+            for (auto i = vec.rbegin(); i != vec.rend(); ++i) {
+                stream << i->complement().DNA();
+            }
+        }
+        else {
+            for (auto i : vec) {
+                stream << i.DNA();
+            }
+        }
+        return stream;
+    }
+};
+
+class RefSequence {
+    struct RefBase {
+        Base base;
+        uint8_t count;
+        
+        RefBase() : base(0), count(0) {}
+        void increaseCoverageCount() {
+            if (count < 0xFF)
+                ++count;
+        }
+    };
+    typedef vector<RefBase> vector_t;
+    
+    vector_t vec;
+public:
+    RefSequence()
+    : vec(vector_t(settings->lengthTarget))
+    {}
+    
+    void fill(int const pos) {
+        auto const N = settings->readLength;
+        for (auto i = 0; i < N; ++i) {
+            if (vec[pos + i].count == 0)
+                vec[pos + i].base = Base::random();
+            vec[pos + i].increaseCoverageCount();
+        }
+    }
+    
+    void copy(int const pos, Sequence const &from, bool rev) {
+        auto const N = settings->readLength;
+        for (auto i = 0; i < N; ++i) {
+            if (vec[pos + i].count == 0) {
+                auto const j = rev ? (N - i - 1) : i;
+                auto const value = from[j];
+                auto const mutate = log10(frand()) < -1.5;
+                vec[pos + i].base = mutate ? Base::random() : rev ? value.complement() : value;
+            }
+            vec[pos + i].increaseCoverageCount();
+        }
+    }
+    
+    size_t size() const {
+        return vec.size();
+    }
+    void print() const {
+        auto &out = *settings->refSeqStream;
+        auto j = 0;
+        
+        out << '>' << settings->refName << endl;
+        for (auto i : vec) {
+            out << i.base.DNA();
+            if (++j == 70) {
+                j = 0;
+                out << endl;
+            }
+        }
+        if (j != 0)
+            out << endl;
+    }
+    
+    bool isOverCovered(int const pos) const {
+        auto const N = settings->readLength;
+        auto const max = 2 * settings->coverageTarget;
+        for (auto i = 0; i < N; ++i) {
+            if (vec[pos + i].count > max)
+                return true;
+        }
+        return false;
+    }
+    
+    int nextNotCovered(int const pos) const {
+        auto const N = settings->readLength;
+        for (auto i = 0; i < N; ++i) {
+            if (vec[pos + i].count == 0)
+                return i;
+        }
+        return N;
+    }
+    
+    int prevNotCovered(int const pos) const {
+        auto const N = settings->readLength;
+        for (auto i = N; i > 0; --i) {
+            if (vec[pos + i - 1].count == 0)
+                return i;
+        }
+        return 0;
+    }
+    
+    Sequence read(int const pos, bool rev)
+    {
+        auto rslt = vector<Base>(settings->readLength);
+        auto const N = settings->readLength;
+        for (auto i = 0; i < N; ++i) {
+            auto const mutate = log10(frand()) < -3.0;
+            auto const base = mutate ? Base::random() : vec[pos + i].base;
+            if (rev) {
+                rslt[N - 1 - i] = base.complement();
+            }
+            else {
+                rslt[i] = base;
+            }
+        }
+        return Sequence(rslt);
+    }
+
+};
+
+static void print1FastQ(uint64_t serialNo, int readNo, Sequence const &SEQ, Quality const &QUAL)
+{
+    auto &out = *settings->fastqStream;
+    
+    out << '@' << serialNo << '/' << readNo << endl;
+    SEQ.print(out, false) << endl << '+' << endl;
+    QUAL.print(out, false) << endl;
+}
+
+static void printFastQ(uint64_t serialNo, Sequence const &SEQ1, Sequence const &SEQ2, Quality const &QUAL1, Quality const &QUAL2)
+{
+    print1FastQ(serialNo, 1, SEQ1, QUAL1);
+    print1FastQ(serialNo, 2, SEQ2, QUAL2);
+}
+
+static int templateLength(int pos, int mpos, bool reversed)
+{
+    auto const aleft = reversed ? pos + settings->readLength - 1 : pos;
+    auto const aright = reversed ? pos - 1 : pos + settings->readLength;
+    auto const bleft = !reversed ? mpos + settings->readLength - 1 : mpos;
+    auto const bright = !reversed ? mpos - 1 : mpos + settings->readLength;
+    auto const left = min(aleft, bleft);
+    auto const right = max(aright, bright);
+    auto const value = right - left;
+    if (aright == right)
+        return -value;
+    return value;
+}
+
+static void printSAM(ostream &out, uint64_t name, int readNo, bool reversed, bool secondary, int pos, int lclip, int rclip, bool hardClip, int mpos, Sequence const &SEQ, Quality const &QUAL)
+{
+    auto const FLAG = 0x1 | 0x2 | (reversed ? 0x10 : 0) | (reversed ? 0 : 0x20) | (readNo == 1 ? 0x40 : 0) | (readNo == 2 ? 0x80 : 0) | (secondary ? 0x100 : 0);
+    out << name << '\t' << FLAG << '\t' << settings->refName << '\t' << pos + 1 + lclip << '\t' << (secondary ? 3 : 30) << '\t';
+    if (lclip)
+        out << lclip << (hardClip ? 'H' : 'S');
+    out << settings->readLength - lclip - rclip << 'M';
+    if (rclip)
+        out << rclip << (hardClip ? 'H' : 'S');
+    out << "\t=\t" << mpos + 1 << '\t' << templateLength(pos, mpos, reversed) << '\t';
+    SEQ.print(out, reversed) << '\t';
+    QUAL.print(out, reversed) << endl;
+}
+
+static uint64_t scramble(uint64_t const serialNo)
+{
+    static uint8_t scramble[256];
+    static uint8_t const *mixer = NULL;
+    
+    if (mixer == NULL) {
+        for (int i = 0; i < 256; ++i)
+            scramble[i] = i;
+        for (int k = 0; k < 256; ++k) {
+            for (int i = 0; i < 256; ++i) {
+                auto const j = random() % 256;
+                auto const xi = scramble[i];
+                auto const xj = scramble[j];
+                
+                scramble[i] = xj;
+                scramble[j] = xi;
+            }
+        }
+        mixer = scramble;
+    }
+    uint64_t rslt = 0;
+    auto carry = 0x55;
+    for (auto i = 0; i < 8; ++i) {
+        auto const j = serialNo >> (8 * i);
+        auto const k = mixer[(uint8_t)(j ^ carry)];
+        rslt = (uint64_t(k) << 56) | (rslt >> 8);
+        carry = k;
+    }
+    return rslt;
+}
+
+static pair<unsigned, unsigned> make_ipd_pair(void)
+{
+    for ( ; ; ) {
+        auto const r2 = normalRandom();
+        auto const ipd1 = r2.first * settings->templateLength / 10.0 + settings->templateLength;
+        auto const ipd2 = r2.second * settings->templateLength / 100.0 + ipd1;
+        if (ipd1 > settings->readLength && ipd2 > settings->readLength)
+            return make_pair((unsigned)ipd1, (unsigned)ipd2);
+    }
+}
+
+static pair<unsigned, unsigned> make_read_pair(unsigned const ipd)
+{
+/*
+ *            |<-------ipd------->|                             |rrrrrrrrr|
+ *                                |fffffffff|-------------------|
+ *            |-------------------|fffffffff|
+ *  |rrrrrrrrr|
+ *  ^second                       ^first                        ^second
+ */
+    for ( ; ; ) {
+        auto const r1 = frand();
+        auto const reversed = r1 < 0;
+        auto const pos1 = (reversed ? -r1 : r1) * settings->lengthTarget;
+        if (reversed && pos1 > settings->readLength + ipd) {
+            auto const pos2 = pos1 - settings->readLength - ipd;
+            return make_pair(pos1, pos2);
+        }
+        else {
+            auto const pos2 = pos1 + settings->readLength + ipd;
+            if (pos2 + settings->readLength <= settings->lengthTarget)
+                return make_pair(pos1, pos2);
+        }
+    }
+}
+
+static void run(void)
+{
+    auto ref = RefSequence();
+    uint64_t serialNo = 0;
+    
+    for (double coverage = 0.0; coverage/double(ref.size()) > settings->coverageTarget; ) {
+        auto const ipd = make_ipd_pair();
+        auto const pos = make_read_pair(ipd.first);
+        auto const rev = pos.first > pos.second;
+
+        if (ref.isOverCovered(pos.first) || ref.isOverCovered(pos.second))
+            continue;
+        
+        ref.fill(pos.first);
+        ref.fill(pos.second);
+
+        auto const SEQ1 = ref.read(pos.first, rev);
+        auto const SEQ2 = ref.read(pos.second, !rev);
+        auto const QUAL1 = Quality::random();
+        auto const QUAL2 = Quality::random();
+        auto const name = scramble(++serialNo);
+        
+        printFastQ(name, SEQ1, SEQ2, QUAL1, QUAL2);
+        printSAM(cout, name, 1, rev, false, pos.first, 0, 0, false, pos.second, SEQ1, QUAL1);
+        printSAM(cout, name, 2, !rev, false, pos.second, 0, 0, false, pos.first, SEQ2, QUAL2);
+        
+        coverage += 2 * settings->readLength;
+
+        for ( ; ; ) {
+            auto const pos = make_read_pair(ipd.second);
+            auto const rev = pos.first > pos.second;
+
+            if (ref.isOverCovered(pos.first) || ref.isOverCovered(pos.second))
+                break;
+            
+            auto const left1 = ref.nextNotCovered(pos.first);
+            auto const right1 = ref.prevNotCovered(pos.first);
+            if (right1 <= left1 || (right1 - left1) * 2 < settings->readLength)
+                break;
+
+            auto const left2 = ref.nextNotCovered(pos.second);
+            auto const right2 = ref.prevNotCovered(pos.second);
+            if (right2 <= left2 || (right2 - left2) * 2 < settings->readLength)
+                break;
+            
+            ref.copy(pos.first, SEQ1, rev);
+            ref.copy(pos.second, SEQ2, !rev);
+
+            printSAM(cout, name, 1, rev, true, pos.first, left1, settings->readLength - right1, false, pos.second, SEQ1, QUAL1);
+            printSAM(cout, name, 2, !rev, true, pos.second, left2, settings->readLength - right2, false, pos.first, SEQ2, QUAL2);
+
+            coverage += 2 * settings->readLength;
+            break;
+        }
+    }
+    ref.print();
+}
+
+static string getProgName(string const &argv0)
+{
+    auto const sep = argv0.find_last_of('/');
+    if (sep == string::npos)
+        return argv0;
+    return argv0.substr(sep + 1);
+}
+
+static string command_line(string const &progname, int argc, char *argv[])
+{
+    ostringstream oss;
+    
+    oss << progname;
+    while (++argv, --argc) {
+        oss << ' ' << *argv;
+    }
+    return oss.str();
+}
+
+static void usage(string const &progname, bool error)
+{
+    cerr << "Usage: " << progname;
+    for (int i = 0; i < Settings::paramNames().size(); ++i) {
+        cout << " [" << Settings::paramNames()[i] << "=<" << Settings::paramTypes()[i] << ">]";
+    }
+    cout << endl;
+    exit(error ? EXIT_FAILURE : EXIT_SUCCESS);
+}
+
+static map<string, string> loadArgs(int argc, char *argv[], string const &progname)
+{
+    map<string, string> args;
+
+    while (++argv, --argc) {
+        auto const arg = string(*argv);
+        bool found = false;
+        
+        if (arg == "--help" || arg == "-h" || arg == "-?")
+            usage(progname, false);
+        
+        for (auto i : Settings::paramNames()) {
+            if (arg.substr(0, i.length() + 1) == i + "=") {
+                args[i] = arg.substr(i.length() + 1);
+                found = true;
+                break;
+            }
+        }
+        if (!found) {
+            cerr << "Error: unknown parameter: '" << arg << "'" << endl;
+            usage(progname, true);
+        }
+    }
+    return args;
+}
+
+int main(int argc, char *argv[])
+{
+    auto const progname = getProgName(argv[0]);
+    auto const CL = command_line(progname, argc, argv);
+    auto args = loadArgs(argc, argv, progname);
+    
+    // set defaults
+    (void)args.insert(make_pair("refname", "R"));
+    (void)args.insert(make_pair("fastq", progname + ".fastq"));
+    (void)args.insert(make_pair("coverage", "30"));
+    (void)args.insert(make_pair("length", "500000"));
+    
+    try {
+        settings = new Settings(args);
+    }
+    catch (logic_error const &e) {
+        cerr << "Error: " << e.what() << endl;
+        usage(progname, true);
+    }
+
+    cout << "@HD\tVN:1.0\tSO:queryname" << endl;
+    cout << "@SQ\tSN:" << args["refname"] << "\tLN:" << args["length"] << "\tUR:" << args["refname"] << ".fasta" << endl;
+    cout << "@PG\tID:1\tPN:" << progname << "\tCL:" << CL << endl;
+    cout << "@CO\targuments: { ";
+    for (auto i : args) {
+        cout << i.first << "=" << i.second << "; ";
+    }
+    cout << "}" << endl;
+    
+    srandom((unsigned)(time(0)));
+    run();
+    delete settings;
+    return 0;
+}
diff --git a/tools/util/rcexplain.c b/tools/util/rcexplain.c
new file mode 100644
index 0000000..a96be94
--- /dev/null
+++ b/tools/util/rcexplain.c
@@ -0,0 +1,127 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+
+/*--------------------------------------------------------------------------
+ * KMain
+ *  invoked by platform specific "main" entrypoint
+ */
+const char UsageDefaultName[] = "rcexplain";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [Options] rc [rc ...]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Prints out error string to stdout for one or more return codes.\n",
+                    progname);
+}
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionsStandard();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    rc_t rc = 0;
+    Args * args;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 0);
+    if (rc == 0)
+    {
+        do
+        {
+            uint32_t pcount;
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+            
+            if (pcount == 0) {
+                MiniUsage(args);
+                rc = RC(rcExe, rcNoTarg, rcAllocating, rcParam, rcInvalid);
+            }
+            else
+            {
+                const char * pc;
+                rc_t exp;
+                uint32_t ix;
+
+                /* over rule any set log level */
+                rc = KLogLevelSet (klogInfo);
+
+                for (ix = 0; ix < pcount; ++ix)
+                {
+                    rc = ArgsParamValue (args, ix, (const void **)&pc);
+                    if (rc)
+                        break;
+
+                    exp = AsciiToU32 (pc, NULL, NULL);
+                    rc = LOGERR (klogInfo, exp, pc);
+                }
+            }
+
+        } while (0);
+
+        ArgsWhack (args);
+    }
+    return rc;
+}
diff --git a/tools/util/rowwritetest.c b/tools/util/rowwritetest.c
new file mode 100644
index 0000000..b791fa2
--- /dev/null
+++ b/tools/util/rowwritetest.c
@@ -0,0 +1,433 @@
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <string.h> /* memset */
+#include <stdio.h>  /* printf */
+#include <stdlib.h> /* malloc */
+#include <assert.h>
+#include <os-native.h>
+
+#define OPTION_TABLE "table-path"
+#define OPTION_ROW   "row-count"
+#define ALIAS_TABLE  "t"
+#define ALIAS_ROW    "r"
+
+static char buff [81];
+static const char * table_usage[] = { "Table path.  Defaults to", buff, NULL };
+static const char * row_usage[]   = { buff, NULL };
+OptDef MyOptions[] =
+{
+    { OPTION_TABLE, ALIAS_TABLE, NULL, table_usage, 1, true, false },
+    { OPTION_ROW,   ALIAS_ROW,   NULL, row_usage,   1, true, false }
+};
+
+#define COLUMNS 5
+#define ROWLEN 64
+#define ROWS 0x400000
+
+
+char tablePath[512];
+
+
+const char UsageDefaultName[] = "rowwritetest";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [-t|--table-path <path>] [-r|--row-count <rows>]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    OUTMSG (("Options:\n"));
+
+    rc = string_printf (buff, sizeof buff, NULL, "%s", tablePath);
+
+    HelpOptionLine (ALIAS_TABLE, OPTION_TABLE, "path", table_usage);
+
+    rc = string_printf (buff, sizeof buff, NULL, "Number of Rows.  Defaults to %u", ROWS);
+
+    HelpOptionLine (ALIAS_ROW, OPTION_ROW, "row", row_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+#define BUFFERS 3
+
+rc_t run (const char * table_path, uint64_t N )
+{
+    static const char *colInf[] = {
+        "C1: Same value, same length",
+        "C2: Var. value, same length",
+        "C3: Var. value, var. legnth",
+        "C4: Same value except I row",
+        "C5: Same value except L row" };
+    rc_t rc;
+    uint64_t row = 0;
+    VDBManager *mgr = NULL;
+    VSchema *schema = NULL;
+    VTable *table = NULL;
+    VCursor *cursor;
+    uint32_t idx[COLUMNS];
+    uint64_t total[COLUMNS];
+    int i = 0, j = 0, prev = 0;
+    char *buffer[BUFFERS];
+    
+
+
+
+    /* Initialize arrays */
+    memset(&idx, 0, sizeof idx);
+    memset(&total, 0, sizeof total);
+    for (i = 0; i < BUFFERS; ++i) {
+        char c;
+        size_t sz = ROWLEN + 1;
+        if (i == (BUFFERS - 1))
+            sz += ROWLEN;
+        buffer[i] = malloc(sz);
+        for (j = 0, c = 0; j < sz - 1; ++j, ++c) {
+            if (c >= ROWLEN)
+                c -= ROWLEN;
+            buffer[i][j] = '0' + c;
+        }
+        buffer[i][j] = '\0';
+    }
+    /* Create manager */
+    rc = VDBManagerMakeUpdate(&mgr, NULL);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "failed to open vdb library");
+    }
+    /* Initialize schema */
+    if (rc == 0) {
+        rc = VDBManagerMakeSchema(mgr, &schema);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to create empty schema");
+    }
+    if (rc == 0) {
+        char text[512] = "table Table #1 {\n";
+        char col [128];
+        for (i = 1; i <=  COLUMNS; ++i) {
+            sprintf(col,
+                "  column ascii C%d = .C%d; physical ascii .C%d = C%d;\n",
+                i, i, i, i);
+            strcat(text, col);
+        }
+        strcat(text, "};");
+        STSMSG(1,("Parsing schema:\n%s", text));
+        rc = VSchemaParseText(schema, "Schema", text, strlen(text));
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to parse schema");
+    }
+    /* Create table */
+    if (rc == 0) {
+        STSMSG(1,("Creating %s", tablePath));
+        rc = VDBManagerCreateTable(mgr, &table, schema, "Table", kcmInit,
+            tablePath);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to create table");
+    }
+    /* Initialize cursor */
+    if (rc == 0) {
+        rc = VTableCreateCursorWrite(table, &cursor, kcmInsert);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to create cursor");
+    }
+    for (i = 0; rc == 0 && i < COLUMNS; ++i) {
+        char col[3];
+        sprintf(col, "C%d", i + 1);
+        STSMSG(2,("Adding column %s to cursor", col));
+        rc = VCursorAddColumn(cursor, &idx[i], "%s", col);
+        if (rc != 0)
+            PLOGERR(klogInt, (klogInt, rc,
+                              "failed to add $(c) to cursor", "c=%s", col));
+    }
+    if (rc == 0) {
+        rc = VCursorOpen(cursor);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to open cursor");
+    }
+    /* Write data */
+    for (row = 0; row < N && rc == 0; ++row) {
+        int max = 2 * ROWLEN - 1;
+        int sz = 0;
+        if ((row % 2) == 0) {
+            int min = 1;
+            sz = min + (int) (max * (rand() / (RAND_MAX + 1.0)));
+            prev = sz;
+            buffer[1][0] = '1';
+        }
+        else {
+            sz = max + 1 - prev;
+            buffer[1][0] = '2';
+        }
+        rc = Quitting();
+        if (rc == 0) {
+            KStsLevel lvl = 2;
+            if (row > 0 && ((row % ROWS) == 0)) {
+                lvl = 1;
+            }
+            STSMSG (lvl, ("Writing row %ji / %ji",
+                          row + 1, N));
+            rc = VCursorOpenRow(cursor);
+            if (rc != 0)
+                LOGERR(klogInt, rc, "failed to open row");
+        }
+        for (j = 0; j < COLUMNS && rc == 0; ++j) {
+            uint32_t count = 0;
+            int buf = j;
+            switch (j) {
+                case 0:
+                case 1:
+                    count = strlen(buffer[j]);
+                    break;
+                case 2:
+                    count = sz;
+                    break;
+                case 3:
+                    buf = 0;
+                    if (row == 0)
+                        buf = 1;
+                    count = strlen(buffer[buf]);
+                    break;
+                case 4:
+                    buf = 0;
+                    if (row == (N - 1))
+                        buf = 1;
+                    count = strlen(buffer[buf]);
+                    break;
+                default:
+                    assert(0);
+                    break;
+            }
+            STSMSG (3, ("Row %ji/Col.%d: %sd %.*s\n",
+                        row + 1, j + 1, count, count, buffer[buf]));
+            rc = VCursorWrite
+                (cursor, idx[j], 8, buffer[buf], 0, count);
+            if (rc != 0)
+                PLOGERR(klogInt, (klogInt, rc, "failed to write row[$i]", "i=%d", j + 1));
+            total[j] += count;
+        }
+        if (rc == 0) {
+            rc = VCursorCommitRow(cursor);
+            if (rc != 0)
+                LOGERR(klogInt, rc, "failed to commit row");
+        }
+        if (rc == 0) {
+            rc = VCursorCloseRow(cursor);
+            if (rc != 0)
+                LOGERR(klogInt, rc, "failed to close row");
+        }
+    }
+    if (rc == 0) {
+        STSMSG (1, ("Commiting cursor\n"));
+        rc = VCursorCommit(cursor);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to commit cursor");
+    }
+    /* Cleanup */
+    VCursorRelease(cursor);
+    VTableRelease(table);
+    VSchemaRelease(schema);
+    VDBManagerRelease(mgr);
+    for (i = 0; i < BUFFERS; ++i) {
+        free(buffer[i]);
+    }
+    /* Log */
+    if (rc == 0) {
+        PLOGMSG(klogInfo, (klogInfo, "$(t)", "t=%s", tablePath));
+        PLOGMSG(klogInfo,(klogInfo, 
+            "$(n)($(N)) rows written - $(b) bytes per row",
+                          PLOG_I64(n) "," PLOG_X64(N) ",b=%d", N, N, ROWLEN));
+        for (i = 0; i < COLUMNS; ++i) {
+            PLOGMSG(klogInfo,(klogInfo, 
+                              "$(i): $(n)($(N)) bytes",
+                              "i=%s," PLOG_I64(n) "," PLOG_X64(N),
+                              colInf[i], total[i], total[i]));
+        }
+    }
+    if (rc == 0) {
+        KDirectory *dir = NULL;
+        uint64_t sizes[COLUMNS];
+        memset(&sizes, 0, sizeof sizes);
+        rc = KDirectoryNativeDir(&dir);
+        if (rc != 0)
+            LOGERR(klogInt, rc, "failed to KDirectoryNativeDir");
+        else {
+            for (i = 1; i <= COLUMNS; ++i) {
+                uint64_t size = 0;
+#define  FORMAT    "%s/col/%s/data"
+#define KFORMAT "$(d)/col/$(n)/data", "d=%s,n=%s"
+#define  STATUS(action) (action FORMAT, tablePath, name)
+                char name[3];
+
+                sprintf(name, "C%d", i);
+                STSMSG (1, STATUS("checking "));
+                rc = KDirectoryFileSize(dir, &size, FORMAT, tablePath, "%s", name);
+                if (rc != 0) {
+                    if (GetRCState(rc) == rcNotFound) {
+                        STSMSG (2, STATUS("not found "));
+                        rc = 0;
+                    }
+                    else
+                        PLOGERR(klogInt, (klogInt, rc,
+                                          "failed to check " KFORMAT, tablePath, name));
+                }
+                else {
+                    STSMSG (2, STATUS("found "));
+                }
+                PLOGMSG(klogInfo, (klogInfo, "Size of $(d)/col/$(n)/data = $(s)",
+                                   "d=%s,n=%s," PLOG_I64(s), tablePath, name, size));
+                sizes[i - 1] = size;
+            }
+        }
+        KDirectoryRelease(dir);
+        if (rc == 0) {
+            puts("");
+            KOutMsg("%ld rows, %d bytes per row:\n", N, ROWLEN);
+            for (i = 0; i < COLUMNS; ++i) {
+                puts(colInf[i]);
+            }
+            puts("");
+            for (i = 0; i < COLUMNS; ++i) {
+                int64_t over = sizes[i] - total[i];
+                KOutMsg("C%d: %9ld bytes written; "
+                    "%9ld in 'data'", i + 1, total[i], sizes[i]);
+                if (over > 0) {
+                    double p = 100.0 * over / sizes[i];
+                    printf(": %7ld extra bytes (%.4f%%)\n", over, p);
+                }
+                else {
+                    puts("");
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+
+
+rc_t CC KMain ( int argc, char *argv[] )
+{
+    rc_t rc = 0;
+    Args * args;
+
+    rc = ArgsMakeStandardOptions (&args);
+    if (rc == 0)
+    {
+        do
+        {
+            uint32_t pcount;
+
+            rc = ArgsAddOptionArray (args, MyOptions, sizeof MyOptions / sizeof (OptDef));
+            if (rc)
+                break;
+
+            rc = ArgsParse (args, argc, argv);
+            if (rc)
+                break;
+
+            /* quirky way default path is generated means this comes
+             * before standard argument handling */
+            rc = ArgsOptionCount (args, OPTION_TABLE, &pcount);
+            if (rc)
+                break;
+
+            if (pcount == 0)
+            {
+                static char * default_name = "RowWriteTestOutTable";
+                char * user;
+
+                user = getenv ("USER");
+
+                if (user)
+                    snprintf (tablePath, sizeof (tablePath),
+                              "/home/%s/%s", user, default_name);
+                else
+                    strncpy (tablePath, default_name, sizeof (tablePath));
+            }
+            else
+            {
+                const char * pc;
+
+                ArgsOptionValue (args, OPTION_TABLE, 0, (const void **)&pc);
+                strncpy (tablePath, pc, sizeof (tablePath));
+            }
+
+            rc = ArgsHandleStandardOptions (args);
+            if (rc)
+                break;
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+            
+            if (pcount)
+            {
+                const char * pc;
+
+                rc = ArgsArgvValue (args, 0, &pc);
+                if (rc)
+                    break;
+
+                rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcExcessive);
+              
+                PLOGERR (klogFatal, (klogFatal, rc, "$(P) takes no parameters", PLOG_S(P), pc));
+                break;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_ROW, &pcount);
+            if (rc == 0)
+            {
+                uint64_t row_count;
+
+                if (pcount)
+                {
+                    const char * pc;
+
+                    rc = ArgsOptionValue (args, OPTION_ROW, 0, (const void **)&pc);
+                    if (rc)
+                        break;
+
+                    row_count = AsciiToU32 (pc, NULL, NULL);
+                }
+                else
+                    row_count = ROWS;
+
+                rc = run (tablePath, row_count);
+            }
+        } while (0);
+
+        ArgsWhack (args);
+    }
+    return rc;
+}
diff --git a/tools/util/samview.c b/tools/util/samview.c
new file mode 100644
index 0000000..ffbd0dd
--- /dev/null
+++ b/tools/util/samview.c
@@ -0,0 +1,80 @@
+/* ===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+#include <klib/log.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <align/bam.h>
+
+static
+void samview(char const file[])
+{
+    char buffer[64*1024];
+    BAMFile const *bam;
+    rc_t rc = BAMFileMake(&bam, file);
+
+    if (rc == 0) {
+        char const *header;
+        size_t hsize;
+        BAMAlignment const *rec;
+
+        BAMFileGetHeaderText(bam, &header, &hsize);
+        fwrite(header, 1, hsize, stdout);
+
+        while ((rc = BAMFileRead2(bam, &rec)) == 0) {
+            size_t actsize = 0;
+
+            if (BAMAlignmentFormatSAM(rec, &actsize, sizeof(buffer), buffer) != 0)
+	        break;
+            fwrite(buffer, 1, actsize, stdout);
+            BAMAlignmentRelease(rec);
+        }
+        BAMFileRelease(bam);
+    }
+    LOGERR(klogWarn, rc, "Final RC");
+}
+
+rc_t CC UsageSummary(char const *name)
+{
+    return 0;
+}
+
+rc_t CC Usage(Args const *args)
+{
+    return 0;
+}
+
+rc_t CC KMain(int argc, char *argv[])
+{
+    while (--argc) {
+        samview(*++argv);
+    }
+    return 0;
+}
diff --git a/tools/util/schema-replace.c b/tools/util/schema-replace.c
new file mode 100644
index 0000000..3b0a669
--- /dev/null
+++ b/tools/util/schema-replace.c
@@ -0,0 +1,379 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+#include <kfs/directory.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define OPTION_SCHEMA         "schema"
+#define OPTION_DB_TYPE        "db_type"
+#define OPTION_TAB_TYPE       "tab_type"
+#define OPTION_TAB_NAME       "tab_name"
+
+#define ALIAS_SCHEMA          "s"
+#define ALIAS_DB_TYPE         "d"
+#define ALIAS_TAB_TYPE        "t"
+#define ALIAS_TAB_NAME        "n"
+
+static const char * schema_usage[] = { "path to file, that contains new schema", NULL };
+static const char * db_type_usage[] = { "string, specifies the type of the database", NULL };
+static const char * tab_type_usage[] = { "string, specifies the type of the selected table", NULL };
+static const char * tab_name_usage[] = { "string, specifies the name of the table to be processed", NULL };
+
+OptDef SchemaUpOptions[] =
+{
+    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true, true },
+    { OPTION_DB_TYPE, ALIAS_DB_TYPE, NULL, db_type_usage, 1, true, true },
+    { OPTION_TAB_TYPE, ALIAS_TAB_TYPE, NULL, tab_type_usage, 1, true, true },
+    { OPTION_TAB_NAME, ALIAS_TAB_NAME, NULL, tab_name_usage, 1, true, true }
+};
+
+const char UsageDefaultName[] = "schema-update";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [options]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage( const Args * args  )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullpath, &progname );
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary( progname );
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, NULL, schema_usage );
+    HelpOptionLine ( ALIAS_DB_TYPE, OPTION_DB_TYPE, NULL, db_type_usage );
+    HelpOptionLine ( ALIAS_TAB_TYPE, OPTION_TAB_TYPE, NULL, tab_type_usage );
+    HelpOptionLine ( ALIAS_TAB_NAME, OPTION_TAB_NAME, NULL, tab_name_usage );
+
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+    return rc;
+}
+
+static const char* get_str_option( const Args *my_args,
+                                   const char *name )
+{
+    const char* res = NULL;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        rc = ArgsOptionValue( my_args, name, 0, (const void **)&res );
+    }
+    return res;
+}
+
+
+typedef struct ctx
+{
+    VDBManager * vdb_mgr;
+    KDBManager * kdb_mgr;
+    VSchema *schema;
+
+    const char *db_type;
+    const char *tab_type;
+    const char *tab_name;
+
+    char * db_schema_buff;
+    size_t db_schema_len;
+    char * tab_schema_buff;
+    size_t tab_schema_len;
+} ctx;
+typedef ctx* p_ctx;
+
+
+static rc_t write_schema( KMetadata *meta, const char * schema_dump, size_t schema_len )
+{
+    KMDataNode *schema_node;
+    rc_t rc = KMetadataOpenNodeUpdate ( meta, &schema_node, "schema" );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeWrite ( schema_node, schema_dump, schema_len );
+        KMDataNodeRelease ( schema_node );
+    }
+    else
+        OUTMSG(( "error KMetadataOpenNodeUpdate: %R\n", rc ));
+    return rc;
+}
+
+
+static rc_t process_csra( p_ctx ctx, const char *csra )
+{
+    KDatabase *this_kdb;
+    rc_t rc = KDBManagerOpenDBUpdate ( ctx->kdb_mgr, &this_kdb, "%s", csra );
+    if ( rc == 0 )
+    {
+        /* do it for the whole database ... */
+        KMetadata *meta;
+        KTable *this_tab;
+
+        rc = KDatabaseOpenMetadataUpdate ( this_kdb, &meta );
+        if ( rc == 0 )
+        {
+            rc = write_schema( meta, ctx->db_schema_buff, ctx->db_schema_len );
+            KMetadataRelease ( meta );
+        }
+        else
+            OUTMSG(( "error KDatabaseOpenMetadataUpdate: %R\n", rc ));
+
+        /* do it for the selected table ... */
+        if ( rc == 0 )
+        {
+            rc = KDatabaseOpenTableUpdate ( this_kdb, &this_tab, "%s", ctx->tab_name );
+            if ( rc == 0 )
+            {
+                rc = KTableOpenMetadataUpdate ( this_tab, &meta );
+                if ( rc == 0 )
+                {
+                    rc = write_schema( meta, ctx->tab_schema_buff, ctx->tab_schema_len );
+                    KMetadataRelease ( meta );
+                }
+                else
+                    OUTMSG(( "error KTableOpenMetadataUpdate: %R\n", rc ));
+            }
+            else
+                OUTMSG(( "error KDatabaseOpenTableUpdate: %R\n", rc ));
+        }
+
+        KDatabaseRelease ( this_kdb );
+    }
+        else OUTMSG(( "error KDBManagerOpenDBUpdate: %R\n", rc ));
+    return rc;
+}
+
+
+static rc_t process_files( p_ctx ctx, Args * args )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc == 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *csra = NULL;
+            rc = ArgsParamValue( args, idx, (const void **)&csra );
+            if ( rc == 0 )
+            {
+                OUTMSG(( "\nprocessing: %s\n", csra ));
+                rc = process_csra( ctx, csra );
+                if ( rc == 0 )
+                    OUTMSG(( "processed: %s\n", csra ));
+            }
+        }
+    }
+/*
+    if ( ctx->db_schema_buff != NULL )
+        OUTMSG(( "%s\n", ctx->db_schema_buff ));
+    if ( ctx->tab_schema_buff != NULL )
+        OUTMSG(( "%s\n", ctx->tab_schema_buff ));
+*/
+    return rc;
+}
+
+
+typedef struct dump_ctx
+{
+    char *buffer;
+    size_t len;
+    size_t size;
+} dump_ctx;
+typedef dump_ctx* p_dump_ctx;
+
+
+static rc_t CC schema_dump_flush( void *dst, const void *buffer, size_t bsize )
+{
+    rc_t rc = -1;
+    p_dump_ctx ctx = dst;
+    if ( ctx->buffer == NULL )
+    {
+        ctx->size = bsize + 1;
+        ctx->buffer = malloc( ctx->size );
+        if ( ctx->buffer != NULL )
+        {
+            memmove ( ctx->buffer, buffer, bsize );
+            ctx->len = bsize;
+            rc = 0;
+        }
+    }
+    else
+    {
+        ctx->size += bsize;
+        ctx->buffer = realloc( ctx->buffer, ctx->size );
+        if ( ctx->buffer != NULL )
+        {
+            memmove ( &(ctx->buffer[ctx->len]), buffer, bsize );
+            ctx->len += bsize;
+            rc = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t predump_schema( VSchema *schema, const char * type,
+                            char **buffer, size_t *len )
+{
+    rc_t rc;
+    dump_ctx ctx;
+    ctx.buffer = NULL;
+    ctx.len = 0;
+    ctx.size = 0;
+
+    *buffer = NULL;
+    *len = 0;
+    rc = VSchemaDump( schema, sdmCompact, type, schema_dump_flush, &ctx );
+    if ( rc == 0 )
+    {
+        if ( ctx.buffer != NULL )
+        {
+            ctx.buffer[ ctx.len ] = 0;
+            *buffer = ctx.buffer;
+            *len = ctx.len;
+        }
+    }
+    else
+    {
+        if ( ctx.buffer != NULL )
+            free( ctx.buffer );
+    }
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+            SchemaUpOptions, sizeof SchemaUpOptions / sizeof SchemaUpOptions [ 0 ] );
+    if ( rc == 0 )
+    {
+        ctx ctx;
+        const char * schema_name = get_str_option( args, OPTION_SCHEMA );
+        ctx.db_type = get_str_option( args, OPTION_DB_TYPE );
+        ctx.tab_type = get_str_option( args, OPTION_TAB_TYPE );
+        ctx.tab_name = get_str_option( args, OPTION_TAB_NAME );
+
+        if ( schema_name != NULL && ctx.db_type != NULL &&
+             ctx.tab_type != NULL && ctx.tab_name )
+        {
+            KDirectory * directory;
+            OUTMSG(( "schema   : %s\n", schema_name ));
+            OUTMSG(( "db-type  : %s\n", ctx.db_type ));
+            OUTMSG(( "tab-type : %s\n", ctx.tab_type ));
+            OUTMSG(( "tab-name : %s\n", ctx.tab_name ));
+
+            rc = KDirectoryNativeDir( &directory );
+            if ( rc == 0 )
+            {
+                rc = VDBManagerMakeUpdate ( &ctx.vdb_mgr, directory );
+                if ( rc == 0 )
+                {
+                    rc = VDBManagerOpenKDBManagerUpdate ( ctx.vdb_mgr, &ctx.kdb_mgr );
+                    if ( rc ==  0 )
+                    {
+                        rc = VDBManagerMakeSchema( ctx.vdb_mgr, &ctx.schema );
+                        if ( rc == 0 )
+                        {
+                            rc = VSchemaParseFile( ctx.schema, "%s", schema_name );
+                            if ( rc == 0 )
+                            {
+                                rc = predump_schema( ctx.schema, ctx.db_type, 
+                                        &ctx.db_schema_buff, &ctx.db_schema_len );
+                                if ( rc == 0 )
+                                {
+                                    rc = predump_schema( ctx.schema, ctx.tab_type, 
+                                        &ctx.tab_schema_buff, &ctx.tab_schema_len );
+                                    if ( rc == 0 )
+                                    {
+                                        rc = process_files( &ctx, args );
+                                        free( ctx.tab_schema_buff );
+                                    }
+                                    free( ctx.db_schema_buff );
+                                }
+                            }
+                            else
+                                OUTMSG(( "error VSchemaParseFile %R\n", rc ));
+                            VSchemaRelease( ctx.schema );
+                        }
+                        else
+                            OUTMSG(( "error VDBManagerMakeSchema %R\n", rc ));
+                     }
+                    else
+                        OUTMSG(( "error VDBManagerOpenKDBManagerUpdate %R\n", rc ));
+                    VDBManagerRelease( ctx.vdb_mgr );
+                }
+                else
+                    OUTMSG(( "error VDBManagerMakeUpdate %R\n", rc ));
+                KDirectoryRelease( directory );
+            }
+            else
+                OUTMSG(( "error KDirectoryNativeDir %R\n", rc ));
+        }
+        else
+            OUTMSG(( "error obtaining arguments\n" ));
+        ArgsWhack( args );
+    }
+    return rc;
+}
+
diff --git a/tools/util/sortreadtest.c b/tools/util/sortreadtest.c
new file mode 100644
index 0000000..4fa9569
--- /dev/null
+++ b/tools/util/sortreadtest.c
@@ -0,0 +1,351 @@
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include <assert.h>
+#include <os-native.h>
+
+
+/*
+
+  default file is "ncbi/seq.vschema"
+  default table-spec "NCBI:tbl:base_space#2"
+
+*/
+#define SCHEMASPEC "ncbi/seq.vschema"
+#define TYPESPEC "NCBI:tbl:base_space#2"
+
+const char UsageDefaultName[] = "sortreadtest";
+
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [OPTIONS] file-path table-path [schema-path]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Write lines from file as rows to table using schema\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    OUTMSG (("Options:\n"));
+
+    HelpOptionsStandard ();
+
+    return rc;
+}
+
+typedef struct param_block
+{
+    const char * file_path;
+    const char * table_path;
+    const char * schema_path;
+
+    KDirectory * pwd;
+    const KFile * file;
+    const KMMap * mmap;
+    VDBManager * mgr;
+    VSchema * schema;
+    VTable * table;
+    VCursor * cursor;
+
+    const char * seq;
+    const char * eof;
+    size_t seq_size;
+
+
+    uint32_t    idx; /* column idx in the cursor for READ (should be 0 */
+
+}  param_block;
+
+rc_t get_a_sequence (param_block * pb)
+{
+    char * eol;
+    rc_t rc = 0;
+    if (pb->seq == NULL)        /* first call */
+    {
+        const void * annoying;
+        uint64_t file_pos;
+        size_t map_size;
+        uint64_t file_size;
+
+        rc = KFileSize (pb->file, &file_size);
+        if (rc)
+            return rc;
+
+        rc = KMMapAddrRead (pb->mmap, &annoying);
+        if (rc)
+            return rc;
+
+        pb->seq = annoying;
+
+        if (pb->seq == NULL)
+            return 0;
+
+        rc = KMMapPosition (pb->mmap, &file_pos);
+        if (rc)
+            return rc;
+
+        if (file_pos != 0)
+        {
+            rc = RC (rcExe, rcMemMap, rcAccessing, rcOffset, rcInvalid);
+            return rc;
+        }
+
+        rc = KMMapSize (pb->mmap, &map_size);
+        if (rc)
+            return rc;
+
+        if (map_size != file_size)
+        {
+            rc = RC (rcExe, rcMemMap, rcAccessing, rcFile, rcInvalid);
+            return rc;
+        }
+        pb->eof = pb->seq + map_size;
+    }
+    else
+    {
+        pb->seq += pb->seq_size + 1;
+
+        if (pb->seq >= pb->eof)
+        {
+            pb->seq = NULL;
+            return 0;
+        }
+    }
+
+    eol = string_chr (pb->seq, pb->eof - pb->seq, '\n');
+    if (eol == NULL)
+        pb->seq_size = pb->eof - pb->seq;
+    else
+        pb->seq_size = eol - pb->seq;
+
+    return rc;
+}
+
+
+rc_t write_rows (param_block * pb)
+{
+    rc_t rc = 0;
+
+    pb->seq = NULL;
+
+    do
+    {
+        rc = get_a_sequence (pb);
+        if (rc)
+        {
+            LOGERR (klogFatal, rc, "Failed to read a sequence");
+        }
+        else
+        {
+            if (pb->seq == NULL)
+                break;
+            rc = VCursorOpenRow (pb->cursor);
+            if (rc)
+            {
+                LOGERR (klogFatal, rc, "Failed to open row");
+                break;
+            }
+            else
+            {
+                rc_t rc2;
+                rc = VCursorWrite (pb->cursor, pb->idx, 8, pb->seq, 0, pb->seq_size);
+                if (rc)
+                    LOGERR (klogFatal, rc, "Failed to write row");
+                else
+                    rc = VCursorCommitRow (pb->cursor);
+                rc2 = VCursorCloseRow (pb->cursor);
+                if (rc == 0)
+                    rc = rc2;
+            }
+        }
+    } while (rc == 0);
+    
+    return rc;
+}
+
+
+rc_t open (param_block * pb)
+{
+    rc_t rc;
+
+    rc = KDirectoryNativeDir (&pb->pwd);
+    if (rc)
+        LOGERR (klogFatal, rc, "Failed to open file system");
+    else
+    {
+        rc = KDirectoryOpenFileRead (pb->pwd, &pb->file, "%s", pb->file_path);
+        if (rc)
+            LOGERR (klogFatal, rc, "Failed to open input file");
+        else
+        {
+            rc = KMMapMakeRead (&pb->mmap, pb->file);
+            if (rc)
+                LOGERR (klogFatal, rc, "unable to map file");
+            else
+            {
+                rc = VDBManagerMakeUpdate (&pb->mgr, pb->pwd);
+                if (rc)
+                    LOGERR (klogFatal, rc, "Failed to open DB Manager");
+                else
+                {
+                    rc = VDBManagerMakeSchema (pb->mgr, &pb->schema);
+                    if (rc)
+                        LOGERR (klogFatal, rc, "Failed to create a schema object");
+                    else
+                    {
+                        VSchemaAddIncludePath (pb->schema, "interfaces");
+
+                        rc = VSchemaParseFile (pb->schema, "%s", pb->schema_path);
+                        if (rc)
+                            LOGERR (klogFatal, rc, "Failed to parse schema");
+                        else
+                        {
+                            rc = VDBManagerCreateTable (pb->mgr, &pb->table, pb->schema,
+                                                        TYPESPEC, kcmCreate, "%s", pb->table_path);
+                            if (rc)
+                                LOGERR (klogFatal, rc, "Failed to create table");
+                            else
+                            {
+                                rc = VTableCreateCursorWrite (pb->table, &pb->cursor, kcmCreate);
+                                if (rc)
+                                    LOGERR (klogFatal, rc, "Failed to create cursor");
+                                else
+                                {
+                                    rc = VCursorAddColumn (pb->cursor, &pb->idx, "READ");
+                                    if (rc)
+                                        LOGERR (klogFatal, rc, "Failed to add READ to cursor");
+                                    else
+                                    {
+                                        rc = VCursorOpen (pb->cursor);
+                                        if (rc)
+                                            LOGERR (klogFatal, rc, "Failed to open cursor");
+                                        else
+                                        {
+                                            rc = write_rows (pb);
+                                            if (rc == 0)
+                                                VCursorCommit (pb->cursor);
+                                        }
+                                    }
+                                    VCursorRelease (pb->cursor);
+                                }
+                                VTableRelease (pb->table);
+                            }
+                        }
+                        VSchemaRelease (pb->schema);
+                    }
+                    VDBManagerRelease (pb->mgr);
+                }
+                KMMapRelease (pb->mmap);
+            }
+            KFileRelease (pb->file);
+        }
+        KDirectoryRelease (pb->pwd);
+    }
+    return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv[] )
+{
+    Args * args;
+    rc_t rc = 0;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 0 /*1, Options, sizeof Options / sizeof (&Options[1])*/);
+    if (rc)
+    {
+        LOGERR (klogInt, rc, "Failed to parse parameters");
+        return rc;
+    }
+    else
+    {
+        do
+        {
+            param_block pb;
+            uint32_t pcount;
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "Failed to get paramater count");
+                break;
+            }
+            switch (pcount)
+            {
+            default:
+                rc = MiniUsage (args);
+                goto bailout;
+                
+            case 2:
+                pb.schema_path = SCHEMASPEC;
+                break;
+
+            case 3:
+                pb.schema_path = NULL;
+                break;
+            }
+        
+            rc = ArgsParamValue (args, 0, (const void **)&pb.file_path);
+            if (rc)
+            {
+                LOGERR (klogInt,rc, "Failed to get file path");
+                break;
+            }
+
+            rc = ArgsParamValue (args, 1, (const void **)&pb.table_path);
+            if (rc)
+            {
+                LOGERR (klogInt,rc, "Failed to get table path");
+                break;
+            }
+            if (pb.schema_path == NULL)
+            {
+                rc = ArgsParamValue (args, 2, (const void **)&pb.schema_path);
+                if (rc)
+                {
+                    LOGERR (klogInt,rc, "Failed to get schema path");
+                    break;
+                }
+            }
+            rc = open (&pb);
+
+        } while (0);
+    bailout:
+        ArgsWhack (args);
+    }
+    if (rc)
+        LOGERR (klogFatal, rc, "Failed!");
+    else
+        KStsMsg("Exit success %R");
+
+
+    return rc;
+}
diff --git a/tools/util/syspass-priv.h b/tools/util/syspass-priv.h
new file mode 100644
index 0000000..6f8cb80
--- /dev/null
+++ b/tools/util/syspass-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_util_syspass_priv_
+#define _h_util_syspass_priv_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_util_syspass_priv_ */
diff --git a/tools/util/test-sra-priv.h b/tools/util/test-sra-priv.h
new file mode 100644
index 0000000..924e5e2
--- /dev/null
+++ b/tools/util/test-sra-priv.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_util_test_sra_priv_
+#define _h_util_test_sra_priv_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h> /* rc_t */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+rc_t PrintOS(bool xml);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_util_test_sra_priv_ */
diff --git a/tools/util/test-sra.c b/tools/util/test-sra.c
new file mode 100644
index 0000000..e00a73c
--- /dev/null
+++ b/tools/util/test-sra.c
@@ -0,0 +1,3724 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ==============================================================================
+*
+*/
+
+#include "test-sra-priv.h" /* PrintOS */
+
+#include <kapp/main.h> /* KMain */
+
+#include <kfg/config.h> /* KConfig */
+#include <kfg/kart.h> /* Kart */
+#include <kfg/repository.h> /* KRepositoryMgr */
+
+#include <kfs/dyload.h> /* KDyld */
+
+#include <klib/time.h> /* KTimeMsStamp */
+
+#include <kns/ascp.h> /* ascp_locate */
+#include <kns/endpoint.h> /* KEndPoint */
+#include <kns/http.h>
+#include <kns/http-priv.h> /* KClientHttpResultFormatMsg */
+#include <kns/kns-mgr-priv.h> /* KNSManagerMakeReliableClientRequest */
+#include <kns/manager.h>
+#include <kns/manager-ext.h> /* KNSManagerNewReleaseVersion */
+#include <kns/stream.h>
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/path.h> /* VPath */
+#include <vfs/resolver.h> /* VResolver */
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/report.h> /* ReportSetVDBManager */
+#include <vdb/schema.h> /* VSchemaRelease */
+#include <vdb/table.h> /* VDBManagerOpenTableRead */
+#include <vdb/vdb-priv.h> /* VDBManagerSetResolver */
+
+#include <kdb/manager.h> /* kptDatabase */
+
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+
+#include <klib/data-buffer.h> /* KDataBuffer */
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/log.h> /* KLogHandlerSet */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/printf.h> /* string_vprintf */
+#include <klib/rc.h>
+#include <klib/report.h> /* ReportForceFinalize */
+#include <klib/sra-release-version.h>
+#include <klib/text.h> /* String */
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <ctype.h> /* isprint */
+#include <stdlib.h> /* calloc */
+#include <string.h> /* memset */
+
+VFS_EXTERN rc_t CC VResolverProtocols ( VResolver * self,
+    VRemoteProtocols protocols );
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+#define HTTP_VERSION 0x01010000
+
+typedef enum {
+    eCfg            = 1,
+    eResolve        = 2,
+    eDependMissing  = 4,
+    eDependAll      = 8,
+    eNetwork       = 16,
+    eVersion       = 32,
+    eNewVersion    = 64,
+    eOpenTable    = 128,
+    eOpenDB       = 256,
+    eType         = 512,
+    eNcbiReport  = 1024,
+    eOS          = 2048,
+    eAscp        = 4096,
+    eAscpVerbose = 8192,
+    eNgs        = 16384,
+    ePrintFile  = 32768,
+    eAll        = 65536,
+    eNoTestArg = 131072,
+} Type;
+typedef uint64_t TTest;
+static const char TESTS[] = "crdDwsSoOtnufFgpa";
+typedef struct {
+    KConfig *cfg;
+    KDirectory *dir;
+    KNSManager *knsMgr;
+
+    const VDBManager *mgr;
+    uint32_t projectId;
+
+    VFSManager *vMgr;
+    const KRepositoryMgr *repoMgr;
+    VResolver *resolver;
+    VSchema *schema;
+
+    TTest tests;
+    bool recursive;
+    bool noVDBManagerPathType;
+    bool noRfs;
+    bool full;
+    bool xml;
+    bool network;
+
+    size_t bytes;
+
+    bool allowCaching;
+    VResolverEnableState cacheState;
+} Main;
+
+const char UsageDefaultName[] = "test-sra";
+
+rc_t CC UsageSummary(const char *prog_name) {
+    return KOutMsg(
+        "Usage:\n"
+        "  quick check mode:\n"
+        "   %s -Q [ name... ]\n\n"
+        "  full test mode:\n"
+        "   %s [+acdDfFgnoOprsStuw] [-acdDfFgnoOprsStuw] [-R] [-N] [-C]\n"
+        "            [-X <type>] [-L <path>] [options] name [ name... ]\n"
+        , prog_name, prog_name);
+}
+
+rc_t CC Usage(const Args *args) {
+    rc_t rc2 = 0;
+
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram(args, &fullpath, &progname);
+    if (rc != 0) {
+        progname = fullpath = UsageDefaultName;
+    }
+
+    rc2 = UsageSummary(progname);
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    rc2 = KOutMsg("\n"
+        "Test [SRA] object, resolve it, print dependencies, configuration\n\n"
+        "[+tests] - add tests\n"
+        "[-tests] - remove tests\n\n");
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    rc2 = KOutMsg(
+        "Tests:\n"
+        "  s - print SRA software information\n"
+        "  S - print SRA software information and latest SRA toolkit version\n"
+        "  u - print operation system information\n"
+        "  c - print configuration\n"
+        "  n - print NCBI error report\n"
+        "  f - print ascp information\n"
+        "  F - print verbose ascp information\n"
+        "  t - print object types\n"
+        "  g - print NGS information\n"
+        "  p - print content of resolved remote HTTP file\n"
+        "  w - run network test\n"
+    );
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    rc2 = KOutMsg(
+        "  r - call VResolver\n"
+        "  d - call ListDependencies(missing)\n"
+        "  D - call ListDependencies(all)\n"
+        "  o - call VDBManagerOpenTableRead(object)\n"
+        "  O - call VDBManagerOpenDBRead(object)\n"
+        "  a - all tests except VDBManagerOpen...Read and verbose ascp\n\n");
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    rc2 = KOutMsg(
+        "In quick check mode - the base checks are run;\n"
+        "in full test mode (default) all the tests are available.\n\n"
+        "In full mode, if no tests were specified then all tests will be run.\n"
+        "\n"
+        "-X < xml | text > - whether to generate well-formed XML\n"
+        "-R - check objects recursively\n"
+        "-N - do not call VDBManagerPathType\n"
+        "-C - do not disable caching (default: from configuration)\n"
+        "-b --bytes=K - print the first K bytes of resolved remote HTTP file)\n"
+        "                                                      (default: 256)\n"
+        "-l --library=<path to library> - print version of dynamic library\n"
+        "\n"
+        "More options:\n");
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    HelpOptionsStandard();
+
+    return rc;
+}
+
+static bool testArg(const char *arg, TTest *testOn, TTest *testOff) {
+    int j = 1;
+    TTest *res = NULL;
+
+    assert(arg && testOn && testOff);
+    if (arg[0] != '+' && arg[0] != '-') {
+        return false;
+    }
+
+    if (arg[0] == '-' &&
+        arg[1] != '\0' && strchr(TESTS, arg[1]) == NULL)
+    {
+        return false;
+    }
+
+    res = arg[0] == '-' ? testOff : testOn;
+
+    for (j = 1; arg[j] != '\0'; ++j) {
+        char *c = strchr(TESTS, arg[j]);
+        if (c != NULL) {
+            int64_t offset = c - TESTS;
+            *res |= 1 << offset;
+        }
+    }
+
+    return true;
+}
+
+static TTest Turn(TTest in, TTest tests, bool on) {
+    TTest c = 1;
+    for (c = 1; c < eAll; c <<= 1) {
+        if (tests & c) {
+            if (on) {
+                in |= c;
+            }
+            else {
+                in &= ~c;
+            }
+        }
+    }
+    return in;
+}
+
+static TTest processTests(TTest testsOn, TTest testsOff) {
+    TTest tests = 0;
+
+    bool allOn = false;
+    bool allOff = false;
+
+    if (testsOn & eAll && testsOff & eAll) {
+        testsOn &= ~eAll;
+        testsOff &= ~eAll;
+    }
+    else if (testsOn & eAll) {
+        allOn = true;
+    }
+    else if (testsOff & eAll) {
+        allOff = true;
+    }
+
+    if (allOn) {
+        tests = ~0;
+        tests = Turn(tests, testsOff, false);
+        tests = Turn(tests, eOpenTable  , testsOn & eOpenTable);
+        tests = Turn(tests, eOpenDB     , testsOn & eOpenDB);
+        tests = Turn(tests, eAscpVerbose, testsOn & eAscpVerbose);
+    }
+    else if (allOff) {
+        tests = Turn(tests, testsOn, true);
+    }
+    else if (testsOn != 0 || testsOff != 0) {
+        tests = Turn(tests, testsOff, false);
+        tests = Turn(tests, testsOn, true);
+    }
+    else /* no test argument provided */ {
+        tests = ~0;
+        tests = Turn(tests, eOpenTable, false);
+        tests = Turn(tests, eOpenDB, false);
+        tests = Turn(tests, eAscpVerbose, false);
+        tests = Turn(tests, ePrintFile, false);
+    }
+
+    if (tests & eAscpVerbose) {
+        tests = Turn(tests, eAscp, true);
+    }
+
+    if (tests & ePrintFile) {
+        tests = Turn(tests, eResolve, true);
+    }
+
+    if (tests & eNcbiReport) {
+        tests = Turn(tests, eCfg, false);
+    }
+
+    return tests;
+} 
+
+static void MainMakeQuick(Main *self) {
+    assert(self);
+#if 0
+    self->tests = eCurl;
+#endif
+}
+
+static void MainAddTest(Main *self, Type type) {
+    assert(self);
+    self->tests |= type;
+}
+
+static bool MainHasTest(const Main *self, Type type) {
+    return (self->tests & type) != 0;
+}
+
+static void MainPrint(const Main *self) {
+    return;
+
+    assert(self);
+
+    if (MainHasTest(self, eCfg)) {
+        KOutMsg("eCfg\n");
+    }
+
+    if (MainHasTest(self, eResolve)) {
+        KOutMsg("eResolve\n");
+    }
+
+    if (MainHasTest(self, eDependMissing)) {
+        KOutMsg("eDependMissing\n");
+    }
+
+    if (MainHasTest(self, eDependAll)) {
+        KOutMsg("eDependAll\n");
+    }
+
+#if 0
+    if (MainHasTest(self, eCurl)) {
+        KOutMsg("eCurl\n");
+    }
+#endif
+
+    if (MainHasTest(self, eVersion)) {
+        KOutMsg("eVersion\n");
+    }
+
+    if (MainHasTest(self, eNewVersion)) {
+        KOutMsg("eNewVersion\n");
+    }
+
+    if (MainHasTest(self, eOpenTable)) {
+        KOutMsg("eOpenTable\n");
+    }
+
+    if (MainHasTest(self, eOpenDB)) {
+        KOutMsg("eOpenDB\n");
+    }
+
+    if (MainHasTest(self, eType)) {
+        KOutMsg("eType\n");
+    }
+
+    if (MainHasTest(self, eNcbiReport)) {
+        KOutMsg("eNcbiReport\n");
+    }
+
+    if (MainHasTest(self, eAll)) {
+        KOutMsg("eAll\n");
+    }
+
+    if (MainHasTest(self, eNoTestArg)) {
+        KOutMsg("eNoTestArg\n");
+    }
+}
+
+static rc_t MainInitObjects(Main *self) {
+    rc_t rc = 0;
+
+    VResolver *resolver = NULL;
+
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&self->dir);
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeRead(&self->mgr, NULL);
+        ReportSetVDBManager(self->mgr);
+    }
+
+    if (rc == 0) {
+        rc = KConfigMake(&self->cfg, NULL);
+    }
+
+    if (rc == 0) {
+        rc = KConfigMakeRepositoryMgrRead(self->cfg, &self->repoMgr);
+        if (rc == 0) {
+             bool has_project_id = self->projectId != 0;
+             if (has_project_id) {
+                const KRepository *repository = NULL;
+                rc = KRepositoryMgrGetProtectedRepository(
+                    self->repoMgr, self->projectId, &repository);
+                if (rc == 0) {
+                    VResolver *resolver = NULL;
+                    rc = KRepositoryMakeResolver(
+                        repository, &resolver, self->cfg);
+                    if (rc == 0) {
+                         rc = VDBManagerSetResolver(self->mgr, resolver);
+                    }
+                    RELEASE(VResolver, resolver);
+                }
+                RELEASE(KRepository, repository);
+             }
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&self->vMgr);
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerGetResolver(self->vMgr, &resolver);
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerGetKNSMgr(self->vMgr, &self->knsMgr);
+    }
+
+    if (rc == 0) {
+        if (!self->allowCaching) {
+            self->cacheState = VResolverCacheEnable(resolver, vrAlwaysDisable);
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMakeResolver(self->vMgr, &self->resolver, self->cfg);
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeSRASchema(self->mgr, &self->schema);
+        if (rc != 0) {
+            OUTMSG(("VDBManagerMakeSRASchema() = %R\n", rc));
+        }
+    }
+
+    RELEASE(VResolver, resolver);
+
+    return rc;
+}
+
+static
+void _MainInit(Main *self, int argc, char *argv[], int *argi, char **argv2)
+{
+    int i = 0;
+
+    bool hasTestArg = false;
+
+    TTest testsOn = 0;
+    TTest testsOff = 0;
+
+    assert(self && argv && argi && argv2);
+
+    *argi = 0;
+    argv2[(*argi)++] = argv[0];
+
+    for (i = 1; i < argc; ++i) {
+        if (!testArg(argv[i], &testsOn, &testsOff)) {
+            argv2[(*argi)++] = argv[i];
+        }
+        else {
+            hasTestArg = true;
+        }
+    }
+
+    self->tests = processTests(testsOn, testsOff);
+
+    if (hasTestArg) {
+        self->tests &= ~eNoTestArg;
+    }
+    else {
+        self->tests |= eNoTestArg;
+    }
+
+    MainPrint(self);
+}
+
+static char** MainInit(Main *self, int argc, char *argv[], int *argi) {
+    char **argv2 = calloc(argc, sizeof *argv2);
+
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    if (argv2 != NULL) {
+        _MainInit(self, argc, argv, argi, argv2);
+    }
+
+    return argv2;
+}
+
+static rc_t MainCallCgiImpl(const Main *self,
+    const KConfigNode *node, const char *acc)
+{
+    rc_t rc = 0;
+    String *url = NULL;
+    KHttpRequest *req = NULL;
+    KDataBuffer result;
+    memset(&result, 0, sizeof result);
+    assert(self && node && acc);
+    if (rc == 0) {
+        rc = KConfigNodeReadString(node, &url);
+        if (url == NULL)
+            rc = RC(rcExe, rcNode, rcReading, rcString, rcNull);
+    }
+
+    if (rc == 0)
+        rc = KNSManagerMakeRequest(self->knsMgr,
+            &req, HTTP_VERSION, NULL, url->addr);
+
+    if (rc == 0)
+        rc = KHttpRequestAddPostParam ( req, "acc=%s", acc );
+
+    if (rc == 0) {
+        KHttpResult *rslt;
+        rc = KHttpRequestPOST ( req, & rslt );
+        if ( rc == 0 ) {
+            uint32_t code;
+            size_t msg_size;
+            char msg_buff [ 256 ];
+            rc = KHttpResultStatus(rslt,
+                & code, msg_buff, sizeof msg_buff, & msg_size);
+            if ( rc == 0 && code == 200 ) {
+                KStream * response;
+                rc = KHttpResultGetInputStream ( rslt, & response );
+                if ( rc == 0 ) {
+                    size_t num_read;
+                    size_t total = 0;
+                    KDataBufferMakeBytes ( & result, 4096 );
+                    while ( 1 ) {
+                        uint8_t *base;
+                        uint64_t avail = result . elem_count - total;
+                        if ( avail < 256 ) {
+                            rc = KDataBufferResize
+                                (&result, result.elem_count + 4096);
+                            if ( rc != 0 )
+                                break;
+                        }
+
+                        base = result . base;
+                        rc = KStreamRead(response, &base[total],
+                            result.elem_count - total, &num_read);
+                        if ( rc != 0 ) {
+                            if ( num_read > 0 )
+                                rc = 0;
+                            else
+                                break;
+                        }
+
+                        if ( num_read == 0 )
+                            break;
+
+                        total += num_read;
+                    }
+
+                    KStreamRelease ( response );
+                }
+            }
+
+            KHttpResultRelease ( rslt );
+        }
+    }
+    if (rc == 0) {
+        const char *start = (const void*)(result.base);
+        size_t size = KDataBufferBytes(&result);
+        if (*(start + size) != '\0')
+            rc = RC(rcExe, rcString, rcParsing, rcString, rcUnexpected);
+        if (strstr(start, "200|ok") == NULL)
+            rc = RC(rcExe, rcString, rcParsing, rcParam, rcIncorrect);
+    }
+    KDataBufferWhack(&result);
+    RELEASE(KHttpRequest, req);
+    free(url);
+    if (rc == 0)
+        OUTMSG(("NCBI access: ok\n"));
+    else
+        OUTMSG(("ERROR: cannot access NCBI Website\n"));
+    return rc;
+}
+
+static rc_t MainCallCgi(const Main *self,
+    const KConfigNode *node, const char *acc)
+{
+    rc_t rc = 0;
+    int i = 0, retryOnFailure = 2;
+    for (i = 0; i < retryOnFailure; ++i) {
+        rc = MainCallCgiImpl(self, node, acc);
+        if (rc == 0) {
+            break;
+        }
+        DBGMSG(DBG_KNS, DBG_FLAG(DBG_KNS_ERR), (
+            "@@@@@@@@2: MainCallCgi %d/%d = %R\n", i + 1, retryOnFailure, rc));
+    }
+    return rc;
+}
+
+#define rcResolver   rcTree
+static rc_t MainQuickResolveQuery(const Main *self, const char *acc) {
+    rc_t rc = 0;
+    VPath *query = NULL;
+    const VPath *remote = NULL;
+    const VPath *cache = NULL;
+    assert(self && acc);
+    rc = VFSManagerMakePath(self->vMgr, &query, "%s", acc);
+    if (rc == 0) {
+        if (!self->allowCaching) {
+            VResolverCacheEnable(self->resolver, self->cacheState);
+        }
+        rc = VResolverQuery(self->resolver, 0, query,
+            NULL, &remote, &cache);
+        if (!self->allowCaching) {
+            VResolverCacheEnable(self->resolver, vrAlwaysDisable);
+        }
+    }
+    if (rc == 0) {
+        if (remote != NULL) {
+            OUTMSG(("remote location: ok\n"));
+        }
+        else {
+            OUTMSG(("ERROR: cannot resolve remote location\n"));
+            rc = RC(rcExe, rcResolver, rcResolving, rcPath, rcNotFound);
+        }
+        if (cache != NULL) {
+            OUTMSG(("cache location: ok\n"));
+        }
+        else {
+            OUTMSG(("ERROR: cannot resolve cache location\n"));
+            rc = RC(rcExe, rcResolver, rcResolving, rcPath, rcNotFound);
+        }
+    }
+    else {
+        OUTMSG(("ERROR: cannot resolve public accession\n"));
+    }
+    RELEASE(VPath, cache);
+    RELEASE(VPath, remote);
+    RELEASE(VPath, query);
+    return rc;
+}
+
+static rc_t MainQuickCheck(const Main *self) {
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    const char acc[] = "SRR000001";
+    const char path[] = "/repository/remote/protected/CGI/resolver-cgi";
+    const KConfigNode *node = NULL;
+    assert(self);
+    rc = KConfigOpenNodeRead(self->cfg, &node, "%s", path);
+    if (rc == 0) {
+        OUTMSG(("configuration: found\n"));
+    }
+    else {
+        OUTMSG(("ERROR: configuration not found or incomplete\n"));
+    }
+    if (rc == 0) {
+        rc_t rc3 = MainCallCgi(self, node, acc);
+        if (rc3 != 0 && rc2 == 0) {
+            rc2 = rc3;
+        }
+
+        rc3 = MainQuickResolveQuery(self, acc);
+        if (rc3 != 0 && rc2 == 0) {
+            rc2 = rc3;
+        }
+    }
+    RELEASE(KConfigNode, node);
+    if (rc2 != 0 && rc == 0) {
+        rc = rc2;
+    }
+    return rc;
+}
+
+static rc_t MainPrintConfig(const Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (rc == 0) {
+        rc = KConfigPrint(self->cfg, 0);
+        if (rc != 0) {
+            OUTMSG(("KConfigPrint() = %R", rc));
+        }
+        OUTMSG(("\n"));
+    }
+
+    return rc;
+}
+
+static
+rc_t _KDBPathTypePrint(const char *head, KPathType type, const char *tail)
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    assert(head && tail);
+    {
+        rc_t rc2 = OUTMSG(("%s", head));
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    switch (type) {
+        case kptNotFound:
+            rc2 = OUTMSG(("NotFound"));
+            break;
+        case kptBadPath:
+            rc2 = OUTMSG(("BadPath"));
+            break;
+        case kptFile:
+            rc2 = OUTMSG(("File"));
+            break;
+        case kptDir:
+            rc2 = OUTMSG(("Dir"));
+            break;
+        case kptCharDev:
+            rc2 = OUTMSG(("CharDev"));
+            break;
+        case kptBlockDev:
+            rc2 = OUTMSG(("BlockDev"));
+            break;
+        case kptFIFO:
+            rc2 = OUTMSG(("FIFO"));
+            break;
+        case kptZombieFile:
+            rc2 = OUTMSG(("ZombieFile"));
+            break;
+        case kptDataset:
+            rc2 = OUTMSG(("Dataset"));
+            break;
+        case kptDatatype:
+            rc2 = OUTMSG(("Datatype"));
+            break;
+        case kptDatabase:
+            rc2 = OUTMSG(("Database"));
+            break;
+        case kptTable:
+            rc2 = OUTMSG(("Table"));
+            break;
+        case kptIndex:
+            rc2 = OUTMSG(("Index"));
+            break;
+        case kptColumn:
+            rc2 = OUTMSG(("Column"));
+            break;
+        case kptMetadata:
+            rc2 = OUTMSG(("Metadata"));
+            break;
+        case kptPrereleaseTbl:
+            rc2 = OUTMSG(("PrereleaseTbl"));
+            break;
+        default:
+            rc2 = OUTMSG(("unexpectedFileType(%d)", type));
+            assert(0);
+            break;
+    }
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    {
+        rc_t rc2 = OUTMSG(("%s", tail));
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+static bool isprintString(const unsigned char *s) {
+    assert(s);
+
+    while (*s) {
+        int c = *(s++);
+        if (!isprint(c)) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+static rc_t printString(const char *s) {
+    rc_t rc = 0;
+
+    const unsigned char *u = (unsigned char*)s;
+
+    assert(u);
+
+    if (isprintString(u)) {
+        return OUTMSG(("%s", u));
+    }
+
+    while (*u) {
+        rc_t rc2 = 0;
+        int c = *(u++);
+        if (isprint(c)) {
+            rc2 = OUTMSG(("%c", c));
+        }
+        else {
+            rc2 = OUTMSG(("\\%03o", c));
+        }
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryReport(const KDirectory *self,
+    const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+    rc_t rc = 0;
+    const KFile *f = NULL;
+
+    bool dummyB = false;
+    int64_t dummy = 0;
+
+    KPathType dummyT = kptNotFound;;
+    if (type == NULL) {
+        type = &dummyT;
+    }
+
+    if (alias == NULL) {
+        alias = &dummyB;
+    }
+    if (size == NULL) {
+        size = &dummy;
+    }
+
+    *type = KDirectoryPathType(self, "%s", name);
+
+    if (*type & kptAlias) {
+        OUTMSG(("alias|"));
+        *type &= ~kptAlias;
+        *alias = true;
+    }
+
+    rc = _KDBPathTypePrint("", *type, " ");
+
+    if (*type == kptFile) {
+        rc = KDirectoryOpenFileRead(self, &f, "%s", name);
+        if (rc != 0) {
+            OUTMSG(("KDirectoryOpenFileRead("));
+            printString(name);
+            OUTMSG((")=%R ", rc));
+        }
+        else {
+            uint64_t sz = 0;
+            rc = KFileSize(f, &sz);
+            if (rc != 0) {
+                OUTMSG(("KFileSize(%s)=%R ", name, rc));
+            }
+            else {
+                OUTMSG(("%,lu ", sz));
+                *size = sz;
+            }
+        }
+    }
+    else {
+        OUTMSG(("- "));
+    }
+
+    RELEASE(KFile, f);
+
+    return rc;
+}
+
+static rc_t _VDBManagerReport(const VDBManager *self,
+    const char *name, KPathType *type)
+{
+    KPathType dummy = kptNotFound;;
+
+    if (type == NULL) {
+        type = &dummy;
+    }
+
+    *type = VDBManagerPathType(self, "%s", name);
+
+    *type &= ~kptAlias;
+
+    return _KDBPathTypePrint("", *type, " ");
+}
+
+static rc_t _VDBManagerReportRemote
+    (const VDBManager *self, const char *name, const VSchema *schema)
+{
+    bool notFound = false;
+    const VDatabase *db = NULL;
+    const VTable *tbl = NULL;
+    rc_t rc = VDBManagerOpenDBRead(self, &db, schema, name);
+    if (rc == 0) {
+        RELEASE(VDatabase, db);
+        return _KDBPathTypePrint("", kptDatabase, " ");
+    }
+    else if (GetRCState(rc) == rcNotFound) {
+        notFound = true;
+    }
+    rc = VDBManagerOpenTableRead(self,  &tbl, schema, name);
+    if (rc == 0) {
+        RELEASE(VTable, tbl);
+        return _KDBPathTypePrint("", kptTable, " ");
+    }
+    else if (GetRCState(rc) == rcNotFound) {
+        notFound = true;
+    }
+    if (notFound) {
+        return OUTMSG(("NotFound "));
+    }
+    else {
+        return OUTMSG(("Unknown "));
+    }
+}
+
+static
+rc_t _KDirectoryFileHeaderReport(const KDirectory *self, const char *path)
+{
+    rc_t rc = 0;
+    char hdr[8] = "";
+    const KFile *f = NULL;
+    size_t num_read = 0;
+    size_t i = 0;
+
+    assert(self && path);
+
+    rc = KDirectoryOpenFileRead(self, &f, "%s", path);
+    if (rc != 0) {
+        OUTMSG(("KDirectoryOpenFileRead(%s) = %R\n", path, rc));
+        return rc;
+    }
+
+    rc = KFileReadAll(f, 0, hdr, sizeof hdr, &num_read);
+    if (rc != 0) {
+        OUTMSG(("KFileReadAll(%s, 8) = %R\n", path, rc));
+    }
+
+    for (i = 0; i < num_read && rc == 0; ++i) {
+        if (isprint(hdr[i])) {
+            OUTMSG(("%c", hdr[i]));
+        }
+        else {
+            OUTMSG(("\\X%02X", hdr[i]));
+        }
+    }
+    OUTMSG((" "));
+
+    RELEASE(KFile, f);
+    return rc;
+}
+
+static rc_t MainReport(const Main *self,
+    const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    rc = _KDirectoryReport(self->dir, name, size, type, alias);
+
+    if (!self->noVDBManagerPathType) {
+        _VDBManagerReport(self->mgr, name, type);
+    }
+
+    if (type != NULL && *type == kptFile) {
+        _KDirectoryFileHeaderReport(self->dir, name);
+    }
+
+    return rc;
+}
+
+static rc_t MainReportRemote(const Main *self, const char *name, int64_t size) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    OUTMSG(("%,lu ", size));
+
+    if (!self->noVDBManagerPathType) {
+        _VDBManagerReportRemote(self->mgr, name, self->schema);
+    }
+
+    return rc;
+}
+
+static rc_t MainOpenAs(const Main *self, const char *name, bool isDb) {
+    rc_t rc = 0;
+    const VTable *tbl = NULL;
+    const VDatabase *db = NULL;
+
+    assert(self);
+
+    if (isDb) {
+        rc = VDBManagerOpenDBRead(self->mgr, &db, self->schema, "%s", name);
+        ReportResetDatabase(name, db);
+        OUTMSG(("VDBManagerOpenDBRead(%s) = ", name));
+    }
+    else {
+        rc = VDBManagerOpenTableRead(self->mgr, &tbl, self->schema, "%s", name);
+        ReportResetTable(name, tbl);
+        OUTMSG(("VDBManagerOpenTableRead(%s) = ", name));
+    }
+    if (rc == 0) {
+        OUTMSG(("OK\n"));
+    }
+    else {
+        OUTMSG(("%R\n", rc));
+    }
+    RELEASE(VDatabase, db);
+    RELEASE(VTable, tbl);
+    return rc;
+}
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+typedef enum {
+      ePathLocal
+    , ePathRemote
+    , ePathCache
+} EPathType;
+static rc_t PrintContent(const KFile *f, uint64_t sz, size_t bytes)
+{
+    rc_t rc = 0;
+    size_t total = 0;
+    while (total < bytes) {
+        uint64_t pos = total;
+        unsigned char buffer[1024];
+        size_t num_read = 0;
+        rc = KFileRead(f, pos, buffer, sizeof buffer, &num_read);
+        if (rc == 0) {
+            size_t i = 0;
+            if (total == 0) {
+                OUTMSG(("\n", 0));
+            }
+            for (i = 0; i < num_read && total < bytes; ++i, ++total) {
+                if ((total % 16) == 0) {
+                    OUTMSG(("%04X:", total));
+                }
+                OUTMSG((" %02X", buffer[i]));
+                if ((total % 16) == 7) {
+                    OUTMSG((" |"));
+                }
+                if ((total % 16) == 15) {
+                    OUTMSG(("\n"));
+                }
+            }
+        } else {
+            break;
+        }
+    }
+    return rc;
+}
+static rc_t MainPathReport(const Main *self, rc_t rc, const VPath *path,
+    EPathType type, const char *name, const VPath* remote, int64_t *size,
+    bool fasp, const KFile *fRemote)
+{
+    const char *eol = "\n";
+    const char *bol = "";
+
+    assert(self);
+
+    if (self->xml) {
+        eol = "<br/>\n";
+        bol = "      ";
+    }
+
+    switch (type) {
+        case ePathLocal:
+            OUTMSG(("%sLocal:\t\t  ", bol));
+            break;
+        case ePathRemote:
+            OUTMSG(("%sRemote %s:\t  ", bol, fasp ? "FaspHttp" : "HttpFasp"));
+            break;
+        case ePathCache:
+            OUTMSG(("%sCache %s:\t  ", bol, fasp ? "FaspHttp" : "HttpFasp"));
+            if (remote == NULL) {
+                OUTMSG(("skipped%s", eol));
+                return rc;
+            }
+            break;
+    }
+    if (rc != 0) {
+        if (NotFoundByResolver(rc)) {
+            OUTMSG(("not found%s", eol));
+            rc = 0;
+        }
+        else {
+            switch (type) {
+                case ePathLocal:
+                    OUTMSG(("VResolverLocal(%s) = %R%s", name, rc, eol));
+                    break;
+                case ePathRemote:
+                    OUTMSG(("VResolverRemote(%s) = %R%s", name, rc, eol));
+                    break;
+                case ePathCache:
+                    OUTMSG(("VResolverCache(%s) = %R%s", name, rc, eol));
+                    break;
+            }
+        }
+    }
+    else {
+        const char ncbiFile[] = "ncbi-file:";
+        size_t sz = sizeof ncbiFile - 1;
+        const String *s = NULL;
+        char buffer[PATH_MAX] = "";
+        const char *fPath = buffer;
+        rc_t rc = VPathMakeString(path, &s);
+        if (rc != 0 || s == NULL || s->addr == NULL ||
+            string_cmp(s->addr, sz, ncbiFile, sz, (uint32_t)sz) == 0)
+        {
+            rc = VPathReadPath(path, buffer, sizeof buffer, NULL);
+        }
+        else {
+            fPath = s->addr;
+        }
+        if (rc == 0) {
+            OUTMSG(("%s ", fPath));
+            switch (type) {
+                case ePathLocal:
+                case ePathCache:
+                    rc = MainReport(self, fPath, size, NULL, NULL);
+                    break;
+                case ePathRemote: {
+                    uint64_t sz = 0;
+                    if (!fasp && fRemote != NULL) {
+                        rc = KFileSize(fRemote, &sz);
+                        if (rc != 0) {
+                            OUTMSG(("KFileSize(%s)=%R ", name, rc));
+                        }
+                        else {
+                            MainReportRemote(self, fPath, sz);
+                            *size = sz;
+                            if (MainHasTest(self, ePrintFile)) {
+                                if (self->xml) {
+                                    OUTMSG(("\n<bytes>"));
+                                }
+                                PrintContent(fRemote, sz, self->bytes);
+                                if (self->xml) {
+                                    OUTMSG(("</bytes>"));
+                                }
+                            }
+                        }
+                    }
+                    break;
+                }
+            }
+            OUTMSG(("%s", eol));
+        }
+        else {
+            const char *s = "";
+            switch (type) {
+                case ePathLocal:
+                    s = "Local";
+                    break;
+                case ePathCache:
+                    s = "Cache";
+                    break;
+                case ePathRemote:
+                    s = "Remote";
+                    break;
+                default:
+                    assert(0);
+                    break;
+            }
+            OUTMSG(("VPathMakeUri(VResolver%s(%s)) = %R%s", s, name, rc, eol));
+        }
+        if (type == ePathCache) {
+            char cachecache[PATH_MAX] = "";
+            if (rc == 0) {
+                rc = string_printf(cachecache,
+                    sizeof cachecache, NULL, "%s.cache", fPath);
+                if (rc != 0) {
+                    OUTMSG(("string_printf(%s) = %R%s", fPath, rc, eol));
+                }
+            }
+
+            if (rc == 0) {
+                OUTMSG((
+                    "%sCache.cache %s: ", bol, fasp ? "FaspHttp" : "HttpFasp"));
+                OUTMSG(("%s ", cachecache));
+                rc = MainReport(self, cachecache, NULL, NULL, NULL);
+                OUTMSG(("%s", eol));
+            }
+        }
+        free((void*)s);
+    }
+    return rc;
+}
+
+static rc_t MainResolveLocal(const Main *self, const VResolver *resolver,
+    const char *name, const VPath *acc, int64_t *size)
+{
+    rc_t rc = 0;
+
+    const VPath* local = NULL;
+
+    assert(self);
+
+    if (resolver == NULL) {
+        resolver = self->resolver;
+    }
+
+    rc = VResolverLocal(resolver, acc, &local);
+    rc = MainPathReport(self,
+        rc, local, ePathLocal, name, NULL, NULL, false, NULL);
+
+    RELEASE(VPath, local);
+
+    return rc;
+}
+
+static rc_t MainResolveRemote(const Main *self, VResolver *resolver,
+    const char *name, const VPath* acc, const VPath **remote, int64_t *size,
+    bool fasp)
+{
+    rc_t rc = 0;
+
+    const KFile* f = NULL;
+
+    assert(self && size && remote);
+
+    if (resolver == NULL) {
+        resolver = self->resolver;
+    }
+
+    rc = VResolverRemote(resolver,
+        fasp ? eProtocolFaspHttpHttps : 0, acc, remote);
+
+    if (rc == 0) {
+        rc_t rc = 0;
+        String str;
+        memset(&str, 0, sizeof str);
+        rc = VPathGetScheme(*remote, &str);
+        if (rc != 0) {
+            OUTMSG(("VPathGetScheme(%S) = %R\n", *remote, rc));
+        }
+        else {
+            String fasp;
+            CONST_STRING(&fasp, "fasp");
+            if (StringCompare(&str, &fasp) != 0) {
+                char path_str[8192];
+                rc = VPathReadUri(*remote, path_str, sizeof path_str, NULL);
+                if (rc != 0) {
+                    OUTMSG(("VPathReadUri(%S) = %R\n", *remote, rc));
+                }
+                else {
+                    rc = KNSManagerMakeHttpFile
+                        (self->knsMgr, &f, NULL, HTTP_VERSION, path_str);
+                }
+            }
+        }
+    }
+
+    rc = MainPathReport(self,
+        rc, *remote, ePathRemote, name, NULL, size, fasp, f);
+    RELEASE(KFile, f);
+
+    return rc;
+}
+
+static rc_t MainResolveCache(const Main *self, const VResolver *resolver,
+    const char *name, const VPath* remote, bool fasp)
+{
+    rc_t rc = 0;
+    const VPath* cache = NULL;
+
+    assert(self);
+    
+    if (remote == NULL) {
+        rc = MainPathReport(self,
+            rc, cache, ePathCache, name, remote, NULL, fasp, NULL);
+    }
+    else {
+        if (resolver == NULL) {
+            resolver = self->resolver;
+        }
+
+        if (!self->allowCaching) {
+            VResolverCacheEnable(resolver, self->cacheState);
+        }
+        rc = VResolverQuery(resolver, fasp ? eProtocolFasp : 0,
+            remote, NULL, NULL, &cache);
+        rc = MainPathReport(self,
+            rc, cache, ePathCache, name, remote, NULL, fasp, NULL);
+
+        RELEASE(VPath, cache);
+        if (!self->allowCaching) {
+            VResolverCacheEnable(resolver, vrAlwaysDisable);
+        }
+    }
+
+    return rc;
+}
+
+typedef enum {
+      eQueryAll
+    , eQueryLocal
+    , eQueryRemote
+} EQueryType ;
+static rc_t VResolverQueryByType(const Main *self, const VResolver *resolver,
+    const char *name, const VPath *query,
+    bool fasp, VRemoteProtocols protocols, EQueryType type)
+{
+    const char *eol = "\n";
+    const char *bol = "";
+
+    rc_t rc = 0;
+
+    const VPath *local = NULL;
+    const VPath *remote = NULL;
+    const VPath *cache = NULL;
+    const VPath **pLocal = NULL;
+    const VPath **pRemote = NULL;
+    const VPath **pCache = NULL;
+
+    uint32_t i;
+    VRemoteProtocols protos;
+    const char * proto [ eProtocolMaxPref ];
+
+    assert(self);
+
+    if (self->xml) {
+        eol = "<br/>\n";
+        bol = "      ";
+    }
+
+    switch (type) {
+        case eQueryLocal:
+        case eQueryAll:
+            pLocal = &local;
+        default:
+            break;
+    }
+
+    switch (type) {
+        case eQueryRemote:
+        case eQueryAll:
+            pRemote = &remote;
+            pCache = &cache;
+        default:
+            break;
+    }
+
+    if (pCache != NULL && !self->allowCaching) {
+        VResolverCacheEnable(resolver, vrAlwaysEnable);
+    }
+
+    proto [ 0 ] = NULL;
+    proto [ 1 ] = proto [ 2 ] = "";
+
+    for ( i = 0, protos = protocols; i < sizeof proto / sizeof proto [ 0 ] && protos != 0; protos >>= 3 )
+    {
+        switch ( protos & eProtocolMask )
+        {
+        case eProtocolHttp:
+            proto [ i ++ ] = "Http";
+            break;
+        case eProtocolFasp:
+            proto [ i ++ ] = "Fasp";
+            break;
+        case eProtocolHttps:
+            proto [ i ++ ] = "Https";
+            break;
+        }
+    }
+
+    rc = VResolverQuery(resolver, protocols, query, pLocal, pRemote, pCache);
+    OUTMSG(("%sVResolverQuery(%s, %s%s%s, local%s, remote%s, cache%s)= %R%s"
+            , bol
+            , name
+            , proto [ 0 ]
+            , proto [ 1 ]
+            , proto [ 2 ]
+            , pLocal == NULL ? "=NULL" : ""
+            , pRemote == NULL ? "=NULL" : ""
+            , pCache == NULL ? "=NULL" : ""
+            , rc
+            , eol
+      ));
+    if (rc == 0) {
+        if (local != NULL) {
+/*          rc2 =*/ MainPathReport(self,
+                rc, local, ePathLocal, name, NULL, NULL, false, NULL);
+        }
+        if (remote != NULL) {
+/*          rc2 =*/ MainPathReport(self,
+                rc, remote, ePathRemote, name, NULL, NULL, fasp, NULL);
+        }
+        if (cache != NULL) {
+            MainPathReport(self,
+                rc, cache, ePathCache, name, remote, NULL, fasp, NULL);
+        }
+    }
+
+    OUTMSG(("\n"));
+
+    RELEASE(VPath, local);
+    RELEASE(VPath, remote);
+    RELEASE(VPath, cache);
+
+    if (pCache != NULL && !self->allowCaching) {
+        VResolverCacheEnable(resolver, self->cacheState);
+    }
+
+    return rc;
+}
+
+static rc_t MainResolveQuery(const Main *self, const VResolver *resolver,
+    const char *name, const VPath *query, bool fasp)
+{
+    const char root[] = "Timer";
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    KTimeMs_t time = 0;
+    KTimeMs_t start_time = 0;
+
+    VRemoteProtocols protocols = 0;
+    if (fasp) {
+        protocols = eProtocolFaspHttpHttps;
+    }
+
+    if (resolver == NULL) {
+        resolver = self->resolver;
+    }
+
+    rc2 = VResolverQueryByType(self, resolver, name, query, fasp, protocols,
+        eQueryAll);
+    if (rc2 != 0 && rc == 0) {
+        rc = rc2;
+    }
+
+    if (self->xml) {
+        OUTMSG(("    <%s>\n", root));
+    }
+    else {
+        OUTMSG(("time started...\n"));
+    }
+    start_time = KTimeMsStamp();
+
+    rc2 = VResolverQueryByType(self, resolver, name, query, fasp, protocols,
+        eQueryLocal);
+    if (rc2 != 0 && rc == 0) {
+        rc = rc2;
+    }
+
+    rc2 = VResolverQueryByType(self, resolver, name, query, fasp, protocols,
+        eQueryRemote);
+    if (rc2 != 0 && rc == 0) {
+        rc = rc2;
+    }
+
+/* TODO check vdbcache */
+
+    time = KTimeMsStamp() - start_time;
+    if (self->xml) {
+        OUTMSG(("      <Time time=\"%d ms\"/>\n", time));
+        OUTMSG(("    </%s>\n", root));
+    }
+    else {
+        OUTMSG(("...elapsed time=\"%d ms\"\n\n", time));
+    }
+
+    return rc;
+}
+
+static rc_t _KartItemToVPath(const KartItem *self,
+    const VFSManager *vfs, VPath **path)
+{
+    uint64_t oid = 0;
+    rc_t rc = KartItemItemIdNumber(self, &oid);
+    if (rc == 0) {
+        rc = VFSManagerMakeOidPath(vfs, path, (uint32_t)oid);
+    }
+    else {
+        char path_str[PATH_MAX] = "";
+        const String *accession = NULL;
+        rc = KartItemAccession(self, &accession);
+        if (rc == 0) {
+            rc =
+                string_printf(path_str, sizeof path_str, NULL, "%S", accession);
+        }
+        if (rc == 0) {
+            rc = VFSManagerMakePath(vfs, path, path_str);
+        }
+    }
+    return rc;
+}
+
+static rc_t perform_read_test(void) { return 0; }
+
+static rc_t MainResolve(const Main *self, const KartItem *item,
+    const char *name, int64_t *localSz, int64_t *remoteSz, bool refseqCtx)
+{
+    const char root[] = "Resolve";
+    rc_t rc = 0;
+
+    VPath* acc = NULL;
+    VResolver* resolver = NULL;
+
+    assert(self);
+
+    if (self->xml) {
+        OUTMSG(("<%s>\n", root));
+    }
+
+    if (rc == 0) {
+        if (item == NULL) {
+            if (refseqCtx) {
+                rc = VFSManagerMakePath(self->vMgr, &acc,
+                    "ncbi-acc:%s?vdb-ctx=refseq", name);
+            }
+            else {
+                rc = VFSManagerMakePath(self->vMgr, &acc, "%s", name);
+            }
+            if (rc != 0) {
+                OUTMSG(("VFSManagerMakePath(%s) = %R\n", name, rc));
+            }
+        }
+        else {
+            const KRepository *p_protected = NULL;
+            uint64_t project = 0;
+            if (rc == 0) {
+                rc = KartItemProjIdNumber(item, &project);
+                if (rc != 0) {
+                    OUTMSG(("KartItemProjectIdNumber = %R\n", rc));
+                }
+            }
+            if (rc == 0) {
+                rc = _KartItemToVPath(item, self->vMgr, &acc);
+                if (rc != 0) {
+                    OUTMSG(("Invalid kart file row: %R\n", rc));
+                }
+            }
+            if (rc == 0) {
+                rc = KRepositoryMgrGetProtectedRepository(self->repoMgr, 
+                    (uint32_t)project, &p_protected);
+                if (rc != 0) {
+                    OUTMSG((
+                        "KRepositoryMgrGetProtectedRepository(%d) = %R\n",
+                        project, rc));
+                }
+            }
+            if (rc == 0) {
+                rc = KRepositoryMakeResolver(p_protected, &resolver,
+                    self->cfg);
+                if (rc != 0) {
+                    OUTMSG((
+                        "KRepositoryMakeResolver(%d) = %R\n", project, rc));
+                }
+            }
+            RELEASE(KRepository, p_protected);
+        }
+    }
+
+    if (rc == 0) {
+        const String *id = NULL;
+        const char root[] = "Query";
+        rc_t rc2 = 0;
+
+        const VPath* remote = NULL;
+
+        const char *attr = name;
+        if (attr == NULL) {
+            rc2 = KartItemItemId(item, &id);
+            if (rc2 != 0) {
+                OUTMSG(("KartItemItemId = %R\n", rc2));
+                rc2 = 0;
+                attr = "Accession";
+            }
+        }
+
+        if (self->xml) {
+            if (attr != NULL) {
+                OUTMSG(("  <%s name=\"%s\">\n", root, attr));
+            }
+            else {
+                OUTMSG(("  <%s name=\"%S\">\n", root, id));
+            }
+        }
+
+        rc = VDBManagerSetResolver(self->mgr, resolver);
+
+        rc2 = MainResolveLocal(self, resolver, name, acc, localSz);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveRemote(self, resolver, name, acc, &remote, remoteSz,
+            false);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveCache(self, resolver, name, remote, false);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        RELEASE(VPath, remote);
+
+        rc2 = MainResolveRemote(self, resolver, name, acc, &remote, remoteSz,
+            true);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveCache(self, resolver, name, remote, true);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        OUTMSG(("\n"));
+
+        rc2 = MainResolveQuery(self, resolver, name, acc, false);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveQuery(self, resolver, name, acc, true);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        RELEASE(VPath, remote);
+
+        if (MainHasTest(self, eNetwork)) {
+            perform_read_test();
+        }
+
+        if (self->xml) {
+            OUTMSG(("  </%s>\n", root));
+        }
+    }
+
+    RELEASE(VPath, acc); 
+    RELEASE(VResolver, resolver);
+
+    if (self->xml) {
+        OUTMSG(("</%s>\n", root));
+    }
+
+    return rc;
+}
+
+static
+rc_t MainDepend(const Main *self, const char *name, bool missing)
+{
+    const char root[] = "Dependencies";
+    const char *eol = "\n";
+    rc_t rc = 0;
+
+    const VDatabase *db = NULL;
+    const VDBDependencies* dep = NULL;
+    uint32_t count = 0;
+
+    assert(self);
+    eol = self->xml ? "<br/>\n" : "\n";
+
+    if (self->xml) {
+        OUTMSG(("<%s>\n", root));
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerOpenDBRead(self->mgr, &db, self->schema, "%s", name);
+        if (rc != 0) {
+            if (rc == SILENT_RC(rcVFS,rcMgr,rcOpening,rcDirectory,rcNotFound)) {
+                return 0;
+            }
+            OUTMSG(("VDBManagerOpenDBRead(%s) = %R\n", name, rc));
+        }
+    }
+
+    if (rc == 0) {
+        if (!self->allowCaching) {
+            VResolverCacheEnable(self->resolver, self->cacheState);
+        }
+        rc = VDatabaseListDependenciesWithCaching(db,
+            &dep, missing, !self->allowCaching);
+        if (rc != 0) {
+            OUTMSG(("VDatabaseListDependencies(%s, %s) = %R%s",
+                name, missing ? "missing" : "all", rc, eol));
+        }
+        if (!self->allowCaching) {
+            VResolverCacheEnable(self->resolver, vrAlwaysDisable);
+        }
+    }
+
+    if (rc == 0) {
+        rc = VDBDependenciesCount(dep, &count);
+        if (rc != 0) {
+            OUTMSG(("VDBDependenciesCount(%s, %s) = %R\n",
+                name, missing ? "missing" : "all", rc));
+        }
+        else {
+            OUTMSG(("VDBDependenciesCount(%s)=%d\n",
+                missing ? "missing" : "all", count));
+        }
+    }
+
+    if (rc == 0) {
+        uint32_t i = 0;
+        rc_t rc2 = 0;
+        for (i = 0; i < count; ++i) {
+            const char root[] = "Dependency";
+            bool b = true;
+            const char *s = NULL;
+            const char *seqId = NULL;
+            KPathType type = kptNotFound;
+
+            if (self->xml) {
+                OUTMSG(("<%s>\n", root));
+            }
+
+            OUTMSG((" %6d\t", i + 1));
+
+            rc2 = VDBDependenciesSeqId(dep, &seqId, i);
+            if (rc2 == 0) {
+                OUTMSG(("seqId=%s,", seqId));
+            }
+            else {
+                OUTMSG(("VDBDependenciesSeqId(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesName(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("name=%s,", s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesName(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesCircular(dep, &b, i);
+            if (rc2 == 0) {
+                OUTMSG(("circular=%s,", b ? "true" : "false"));
+            }
+            else {
+                OUTMSG(("VDBDependenciesCircular(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesType(dep, &type, i);
+            if (rc2 == 0) {
+                rc2 = _KDBPathTypePrint("type=", type, ",");
+                if (rc2 != 0 && rc == 0) {
+                    rc = rc2;
+                }
+            }
+            else {
+                OUTMSG(("VDBDependenciesType(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesLocal(dep, &b, i);
+            if (rc2 == 0) {
+                OUTMSG(("local=%s,", b ? "local" : "remote"));
+            }
+            else {
+                OUTMSG(("VDBDependenciesLocal(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPath(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("%s\tpathLocal=%s,", eol, s == NULL ? "notFound" : s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesPath(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPathRemote(dep, &s, i);
+            if (rc2 == 0) {
+                if (s == NULL) {
+                    OUTMSG(("%s\tpathRemote: notFound ", eol));
+                }
+                else {
+                    OUTMSG(("%s\tpathRemote: %s ", eol, s));
+                    if (!self->noRfs) {
+                        const KFile *f = NULL;
+                        rc2 = KNSManagerMakeHttpFile
+                            ( self->knsMgr, & f, NULL, HTTP_VERSION, s );
+                        if (rc2 != 0) {
+                            OUTMSG(("KNSManagerMakeHttpFile=%R", rc2));
+                            if (rc == 0) {
+                                rc = rc2;
+                            }
+                        }
+                        if (rc2 == 0) {
+                            uint64_t sz = 0;
+                            rc2 = KFileSize(f, &sz);
+                            if (rc2 != 0) {
+                                OUTMSG(("KFileSize=%R", rc2));
+                                if (rc == 0) {
+                                    rc = rc2;
+                                }
+                            }
+                            else {
+                                OUTMSG(("%,lu", sz));
+                            }
+                        }
+                        RELEASE(KFile, f);
+                    }
+                }
+            }
+            else {
+                OUTMSG(("VDBDependenciesPathRemote(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPathCache(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("%s\tpathCache: %s ", eol, s == NULL ? "notFound" : s));
+                if (s != NULL) {
+                    char cachecache[PATH_MAX] = "";
+                    rc2 = MainReport(self, s, NULL, NULL, NULL);
+                    OUTMSG(("%s", eol));
+                    if (rc == 0) {
+                        rc = rc2;
+                    }
+                    if (rc2 == 0) {
+                        rc2 = string_printf(cachecache,
+                            sizeof cachecache, NULL, "%s.cache", s);
+                        if (rc2 != 0) {
+                            if (rc == 0) {
+                                rc = rc2;
+                            }
+                            OUTMSG(("string_printf(%s) = %R%s", s, rc2, eol));
+                        }
+                    }
+                    if (rc == 0) {
+                        OUTMSG(("\tpathCache.cache: "));
+                        OUTMSG(("%s ", cachecache));
+                        rc = MainReport(self, cachecache, NULL, NULL, NULL);
+                    }
+                }
+            }
+            else {
+                OUTMSG(("VDBDependenciesPathCache(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc2));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+            if (MainHasTest(self, eResolve) && seqId != NULL) {
+                int64_t remoteSz = 0;
+                OUTMSG(("%s", eol));
+
+     /* ignore returned value :
+        resolver's errors are detected but not reported as test-sra's failure */
+                MainResolve(self, NULL, seqId, NULL, &remoteSz, true);
+            }
+
+            if (self->xml) {
+                OUTMSG(("</%s>\n", root));
+            }
+            else {
+                OUTMSG(("%s", eol));
+            }
+        }
+    }
+
+    RELEASE(VDBDependencies, dep);
+    RELEASE(VDatabase, db);
+
+    if (self->xml) {
+        OUTMSG(("</%s>\n", root));
+    }
+
+    return rc;
+}
+
+static rc_t MainPrintAscp(const Main *self) {
+    rc_t rc = 0;
+    bool status = false;
+    const char *b = self->xml ? "  <Ascp>\n"  : "";
+    const char *e = self->xml ? "  </Ascp>\n" : "\n";
+    const char *ascp_bin = NULL;
+    const char *private_file = NULL;
+    AscpOptions opt;
+    memset(&opt, 0, sizeof opt);
+    assert(self);
+    if (MainHasTest(self, eAscpVerbose)) {
+        status = true;
+    }
+    OUTMSG(("%s", b));
+    rc = ascp_locate(&ascp_bin, &private_file, true, status);
+    if (rc != 0) {
+        OUTMSG(("ascp_locate = %R\n", rc));
+    }
+    if (rc == 0) {
+        const char *b = self->xml ? "    <Ascp>"       : "ascp    : ";
+        const char *e = self->xml ? "</Ascp>\n" : "\n";
+        OUTMSG(("%s%s%s", b, ascp_bin == NULL ? "NotFound" : ascp_bin, e));
+    }
+    if (rc == 0) {
+        const char *b = self->xml ? "    <KeyFile>"    : "key file: ";
+        const char *e = self->xml ? "</KeyFile>\n" : "\n";
+        OUTMSG(("%s%s%s", b,
+            private_file == NULL ? "NotFound" : private_file, e));
+    }
+
+    rc = aspera_options(&opt);
+    if (rc != 0) {
+        OUTMSG(("%saspera_options = %R%s", b, rc, e));
+    }
+    if (rc == 0) {
+        const char *b = self->xml ? "    <MaxRate>"    : "max rate: ";
+        const char *e = self->xml ? "</MaxRate>\n" : "\n";
+        OUTMSG(("%s%s%s", b,
+            opt.target_rate == NULL ? "NotFound" : opt.target_rate, e));
+    }
+    if (rc == 0) {
+        const char *b = self->xml ? "    <Disabled>"    : "disabled: ";
+        const char *e = self->xml ? "</Disabled>\n" : "\n";
+        OUTMSG(("%s%s%s", b, opt.disabled ? "true" : "false", e));
+    }
+
+    if (ascp_bin != NULL) {
+        size_t num_writ = 0;
+        char command[PATH_MAX] = "";
+        const char *b = self->xml ? "<Version>\n"  : "";
+        const char *e = self->xml ? "</Version>\n" : "";
+        OUTMSG(("%s", b));
+        rc = string_printf(command, sizeof command, &num_writ,
+            "\"%s\" -A", ascp_bin);
+        if (rc != 0 || num_writ >= sizeof command) {
+            OUTMSG(("cannot generate ascp command: %R\n", rc));
+        }
+        else {
+            int s = system(command);
+            if (s != 0) {
+                OUTMSG(("system(%s) = %d\n", command, s));
+            }
+        }
+        OUTMSG(("%s", e));
+    }
+
+    free((void*)ascp_bin);
+    free((void*)private_file);
+
+    OUTMSG(("%s", e));
+    return 0;
+}
+
+#if 0
+static rc_t PrintCurl(bool full, bool xml) {
+    const char *b = xml ? "  <Curl>"  : "";
+    const char *e = xml ? "</Curl>" : "";
+
+    KNSManager *mgr = NULL;
+
+    rc_t rc = KNSManagerMake(&mgr);
+    if (rc != 0) {
+        OUTMSG(("%sKNSManagerMake = %R%s\n", b, rc, e));
+    }
+    else {
+        rc_t rc = KNSManagerAvail(mgr);
+        OUTMSG(("%s", b));
+
+        if (full) {
+            OUTMSG(("KNSManagerAvail = %R. ", rc));
+        }
+
+        if (rc == 0) {
+            const char *version_string = NULL;
+            rc = KNSManagerCurlVersion(mgr, &version_string);
+            if (rc == 0) {
+                if (full) {
+                    OUTMSG(("Curl Version = %s", version_string));
+                }
+            }
+            else {
+                OUTMSG(("KNSManagerCurlVersion = %R", rc));
+            }
+        }
+
+        if (rc == 0 && !full) {
+            OUTMSG(("libcurl: found"));
+        }
+        OUTMSG(("%s\n", e));
+    }
+
+    RELEASE(KNSManager, mgr);
+
+    return rc;
+}
+#endif
+
+#define kptKartITEM (kptAlias - 1)
+
+static rc_t _KartItemPrint(const KartItem *self, bool xml) {
+    const char root[] = "KartRow";
+    const String *elem = NULL;
+    if (xml) {
+        OUTMSG(("  <%s>\n", root));
+    }
+    {
+        const char root[] = "ProjId";
+        rc_t rc = KartItemProjId(self, &elem);
+        if (rc != 0) {
+            OUTMSG(("KartItem%s = %R\n", root, rc));
+        }
+        else if (xml) {
+            OUTMSG(("    <%s>%S</%s>\n", root, elem, root));
+        }
+        else {
+            OUTMSG(("%s: %S\n", root, elem));
+        }
+    }
+    {
+        const char root[] = "ItemId";
+        rc_t rc = KartItemItemId(self, &elem);
+        if (rc != 0) {
+            OUTMSG(("KartItem%s = %R\n", root, rc));
+        }
+        else if (xml) {
+            OUTMSG(("    <%s>%S</%s>\n", root, elem, root));
+        }
+        else {
+            OUTMSG(("%s: %S\n", root, elem));
+        }
+    }
+    {
+        const char root[] = "Accession";
+        rc_t rc = KartItemAccession(self, &elem);
+        if (rc != 0) {
+            OUTMSG(("KartItem%s = %R\n", root, rc));
+        }
+        else if (xml) {
+            OUTMSG(("    <%s>%S</%s>\n", root, elem, root));
+        }
+        else {
+            OUTMSG(("%s: %S\n", root, elem));
+        }
+    }
+    {
+        const char root[] = "Name";
+        rc_t rc = KartItemName(self, &elem);
+        if (rc != 0) {
+            OUTMSG(("KartItem%s = %R\n", root, rc));
+        }
+        else if (xml) {
+            OUTMSG(("    <%s>%S</%s>\n", root, elem, root));
+        }
+        else {
+            OUTMSG(("%s: %S\n", root, elem));
+        }
+    }
+    {
+        const char root[] = "ItemDesc";
+        rc_t rc = KartItemItemDesc(self, &elem);
+        if (rc != 0) {
+            OUTMSG(("KartItem%s = %R\n", root, rc));
+        }
+        else if (xml) {
+            OUTMSG(("    <%s>%S</%s>\n", root, elem, root));
+        }
+        else {
+            OUTMSG(("%s: %S\n", root, elem));
+        }
+    }
+    if (xml) {
+        OUTMSG(("  </%s>\n", root));
+    }
+    return 0;
+}
+
+/*static rc_t _KartPrint(const Kart *self, bool xml) {
+    const char root[] = "Kart";
+    if (xml) {
+        OUTMSG(("  <%s>\n", root));
+    }
+    rc_t rc = KartPrint(self);
+    if (rc != 0) {
+        OUTMSG(("KartPrint = %R\n", rc));
+    }
+    if (xml) {
+        OUTMSG(("  </%s>\n", root));
+    }
+    return 0;
+}
+static rc_t _KartPrintSized(const Kart *self, bool xml) {
+    return 0;
+}
+*/
+
+static rc_t _KartPrintNumbered(const Kart *self, bool xml) {
+    const char root[] = "Kart";
+    if (xml) {
+        OUTMSG(("  <%s numbered=\"true\">\n", root));
+    }
+    {
+        rc_t rc = KartPrintNumbered(self);
+        if (rc != 0) {
+            OUTMSG(("KartPrint = %R\n", rc));
+        }
+    }
+    if (xml) {
+        OUTMSG(("  </%s>\n", root));
+    }
+    return 0;
+}
+
+
+static rc_t ipv4_endpoint_to_string(char *buffer, size_t buflen, KEndPoint *ep)
+{
+	uint32_t b[4];
+	b[0] = ( ep->u.ipv4.addr & 0xFF000000 ) >> 24;
+	b[1] = ( ep->u.ipv4.addr & 0xFF0000 ) >> 16;
+	b[2] = ( ep->u.ipv4.addr & 0xFF00 ) >> 8;
+	b[3] = ( ep->u.ipv4.addr & 0xFF );
+	return string_printf( buffer, buflen, NULL, "ipv4: %d.%d.%d.%d : %d",
+						   b[0], b[1], b[2], b[3], ep->u.ipv4.port );
+}
+
+static rc_t ipv6_endpoint_to_string(char *buffer, size_t buflen, KEndPoint *ep)
+{
+	uint32_t b[8];
+	b[0] = ( ep->u.ipv6.addr[ 0  ] << 8 ) | ep->u.ipv6.addr[ 1  ];
+	b[1] = ( ep->u.ipv6.addr[ 2  ] << 8 ) | ep->u.ipv6.addr[ 3  ];
+	b[2] = ( ep->u.ipv6.addr[ 4  ] << 8 ) | ep->u.ipv6.addr[ 5  ];
+	b[3] = ( ep->u.ipv6.addr[ 6  ] << 8 ) | ep->u.ipv6.addr[ 7  ];
+	b[4] = ( ep->u.ipv6.addr[ 8  ] << 8 ) | ep->u.ipv6.addr[ 9  ];
+	b[5] = ( ep->u.ipv6.addr[ 10 ] << 8 ) | ep->u.ipv6.addr[ 11 ];
+	b[6] = ( ep->u.ipv6.addr[ 12 ] << 8 ) | ep->u.ipv6.addr[ 13 ];
+	b[7] = ( ep->u.ipv6.addr[ 14 ] << 8 ) | ep->u.ipv6.addr[ 15 ];
+	return string_printf( buffer, buflen, NULL,
+        "ipv6: %.04X:%.04X:%.04X:%.04X:%.04X:%.04X:%.04X:%.04X: :%d", 
+		b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], ep->u.ipv6.port );
+}
+
+static rc_t ipc_endpoint_to_string(char *buffer, size_t buflen, KEndPoint *ep)
+{
+	return string_printf( buffer, buflen, NULL, "ipc: %s", ep->u.ipc_name );
+}
+
+static
+rc_t endpoint_to_string( char * buffer, size_t buflen, KEndPoint * ep )
+{
+	rc_t rc;
+	switch( ep->type )
+	{
+		case epIPV4 : rc = ipv4_endpoint_to_string( buffer, buflen, ep ); break;
+		case epIPV6 : rc = ipv6_endpoint_to_string( buffer, buflen, ep ); break;
+		case epIPC  : rc = ipc_endpoint_to_string( buffer, buflen, ep ); break;
+		default     : rc = string_printf( buffer, buflen, NULL,
+                          "unknown endpoint-tyep %d", ep->type ); break;
+	}
+	return rc;
+}
+
+/* TODO: MAKE A DEEPER TEST; RESOLVE; PRINT HEADERS;
+         MAKE SURE UNDETECTED/UNACCESSIBLE URL IS REPORTED */
+static rc_t perform_dns_test(const Main *self, const char *eol, uint16_t port) {
+    rc_t rc = 0;
+
+    const char domain[] = "www.ncbi.nlm.nih.gov";
+    KEndPoint ep;
+    String s_domain;
+    KTimeMs_t time = 0;
+
+    KTimeMs_t start_time = KTimeMsStamp();
+
+    assert(self);
+
+    StringInitCString(&s_domain, domain);
+
+    rc = KNSManagerInitDNSEndpoint(self->knsMgr, &ep, &s_domain, port);
+    time = KTimeMsStamp() - start_time;
+
+    if (rc != 0)
+        OUTMSG
+            (("KNSManagerInitDNSEndpoint(%s, %d)=%R%s", domain, port, rc, eol));
+    else {
+        const char root[] = "DnsEndpoint";
+        char s_endpoint[1024] = "";
+        rc = endpoint_to_string(s_endpoint, sizeof s_endpoint, &ep);
+
+        if (self->xml)
+            OUTMSG(("    <%s "
+                "domain=\"%s\" port=\"%d\" address=\"%s\" time=\"%d ms\"/>\n",
+                root, domain, port, s_endpoint, time));
+        else
+            OUTMSG((
+                "%s domain=\"%s\" port=\"%d\" address=\"%s\" time=\"%d ms\"\n",
+                root, domain, port, s_endpoint, time));
+    }
+
+    return rc;
+}
+
+static rc_t ClientRequestTest(const Main *self, const char *eol,
+                              const char *url)
+{
+    rc_t rc = 0;
+
+    KClientHttpRequest *req = NULL;
+
+    KTimeMs_t time = 0;
+    KTimeMs_t start_time = KTimeMsStamp();
+
+    assert(self);
+
+    rc = KNSManagerMakeRequest(self->knsMgr, &req, HTTP_VERSION, NULL, url);
+
+    time = KTimeMsStamp() - start_time;
+
+    if (rc != 0)
+        OUTMSG(("KNSManagerMakeRequest(%s)=%R%s", url, rc, eol));
+    else {
+        const char root[] = "KNSManagerMakeRequest";
+        if (self->xml)
+            OUTMSG(("    <%s url=\"%s\" time=\"%d ms\"/>\n", root, url, time));
+        else
+            OUTMSG((     "%s url=\"%s\" time=\"%d ms\"\n"  , root, url, time));
+    }
+
+    RELEASE(KClientHttpRequest, req);
+
+    return rc;
+}
+
+static rc_t read_stream_into_databuffer(
+    KStream *stream, KDataBuffer *databuffer)
+{
+	rc_t rc;
+	
+	size_t total = 0;
+	KDataBufferMakeBytes( databuffer, 4096 );
+	while ( 1 )
+	{
+		size_t num_read;
+		uint8_t * base;
+		uint64_t avail = databuffer->elem_count - total;
+		if ( avail < 256 )
+		{
+			rc = KDataBufferResize( databuffer, databuffer->elem_count + 4096 );
+			if ( rc != 0 )
+			{
+				LogErr( klogErr, rc, "CGI: KDataBufferResize failed" );
+				break;
+			}
+		}
+		
+		base = databuffer->base;
+		rc = KStreamRead(stream, &base[total],
+            (size_t) databuffer->elem_count - total, &num_read);
+		if ( rc != 0 )
+		{
+			/* TBD - look more closely at rc */
+			if ( num_read > 0 )
+			{
+				LogErr( klogErr, rc, "CGI: KStreamRead failed" );
+				rc = 0;
+			}
+			else
+				break;
+		}
+
+		if ( num_read == 0 )
+			break;
+
+		total += num_read;
+	}
+
+	if ( rc == 0 )
+		databuffer->elem_count = total;
+	return rc;
+}
+
+static rc_t call_cgi(const Main *self, const char *cgi_url,
+    uint32_t ver_major, uint32_t ver_minor, const char *protocol,
+    const char *acc, KDataBuffer *databuffer, const char *eol)
+{
+    KClientHttpRequest * req = NULL;
+    char b [1024 ] = "";
+    rc_t rc = 0;
+    assert(self);
+    rc = KNSManagerMakeReliableClientRequest
+        (self->knsMgr, &req, HTTP_VERSION, NULL, cgi_url);
+    if (rc != 0) {
+        OUTMSG(
+            ("KNSManagerMakeReliableClientRequest(%s)=%R%s", cgi_url, rc, eol));
+    }
+    if (rc == 0) {
+        const char param[] = "acc";
+        rc = KHttpRequestAddPostParam( req, "%s=%s", param, acc);
+        if (rc != 0) {
+            OUTMSG(("KHttpRequestAddPostParam(%s)=%R%s", param, rc, eol));
+        }
+    }
+    if (rc == 0) {
+        const char param[] = "accept-proto";
+        rc = KHttpRequestAddPostParam( req, "%s=%s", param, protocol);
+        if (rc != 0) {
+            OUTMSG(("KHttpRequestAddPostParam(%s)=%R%s", param, rc, eol));
+        }
+    }
+    if (rc == 0) {
+        const char param[] = "version";
+        rc = KHttpRequestAddPostParam
+            (req, "%s=%u.%u", param, ver_major, ver_minor);
+        if (rc != 0) {
+            OUTMSG(("KHttpRequestAddPostParam(%s)=%R%s", param, rc, eol));
+        }
+    }
+    if (rc == 0) {
+        rc = KClientHttpRequestFormatMsg
+            ( req, b, sizeof b, "POST", NULL );
+    }
+    if (rc == 0) {
+        KHttpResult *rslt = NULL;
+        rc = KHttpRequestPOST(req, &rslt);
+        if (rc != 0) {
+            OUTMSG(("KHttpRequestPOST(%s)=%R%s", cgi_url, rc, eol));
+        }
+        else {
+            const char root[] = "StatusCode";
+            uint32_t code = 0;
+            rc = KHttpResultStatus(rslt, &code, NULL, 0, NULL);
+            if (rc != 0) {
+                OUTMSG(("KHttpResultStatus(%s)=%R%s", cgi_url, rc, eol));
+            }
+            else if (code != 200) {
+                if (self->xml) {
+                    OUTMSG(("    <%s>%d</%s>\n", root, code, root));
+                }
+                else {
+                    OUTMSG(("%s=%d\n", root, code));
+                }
+                rc = RC(rcNS, rcFile, rcReading, rcFile, rcInvalid);
+            }
+            else {
+                KStream *response = NULL;
+                rc = KHttpResultGetInputStream(rslt, &response);
+                if (rc != 0) {
+                    OUTMSG(("KHttpResultGetInputStream(%s)=%R%s",
+                        cgi_url, rc, eol));
+                }
+                else {
+                    rc = read_stream_into_databuffer(response, databuffer);
+                }
+                RELEASE(KStream, response);
+            }
+        }
+
+        RELEASE(KHttpResult, rslt);
+    }
+    RELEASE(KHttpRequest, req);
+    return rc;
+}
+
+static rc_t perform_cgi_test ( const Main * self,
+    const char * eol, const char * acc )
+{
+    rc_t rc = 0;
+    const char root[] = "Cgi";
+    KDataBuffer databuffer;
+    KTimeMs_t start_time = KTimeMsStamp();
+    if (acc == NULL) {
+        return 0;
+    }
+    assert(self);
+    memset(&databuffer, 0, sizeof databuffer);
+    if (self->xml) {
+        OUTMSG(("    <%s>\n", root));
+    }
+    {
+        KTimeMs_t time = 0;
+        const char root[] = "Response";
+        rc = call_cgi ( self,
+            "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi",
+            1, 2, "http,https", acc, & databuffer, eol );
+        time = KTimeMsStamp() - start_time;
+        if (rc == 0) {
+            const char *start = databuffer.base;
+            size_t size = KDataBufferBytes(&databuffer);
+            if (self->xml) {
+                OUTMSG(("    <%s time=\"%d ms\">%.*s</%s>\n",
+                    root, time, size, start, root));
+            }
+            else {
+                OUTMSG(("%s = \"%.*s\"  time=\"%d ms\"\n",
+                    root, size, start, time));
+            }
+        }
+    }
+    if (self->xml) {
+        OUTMSG(("    </%s>\n", root));
+    }
+    KDataBufferWhack ( & databuffer );
+    return rc;
+}
+
+static
+rc_t MainRanges ( const Main * self, const char * arg, const char * bol,
+    bool get, bool https )
+{
+    rc_t rc = 0;
+    const char * method = "Head";
+    const char * protocol = "http";
+    if ( get )
+        method = "Get";
+    if ( https )
+        protocol = "https";
+    if ( self -> xml )
+        OUTMSG ( ( "%s    <%s protocol=\"%s\">\n", bol, method, protocol ) );
+    {
+        char buffer [ 1024 ] = "";
+        KClientHttp * http = NULL;
+        KClientHttpRequest * req = NULL;
+        KClientHttpResult * rslt = NULL;
+        const char root [] = "Request";
+        size_t len = 0;
+        char * b = buffer;
+        size_t sizeof_b = sizeof buffer;
+        char * allocated = NULL;
+        String host;
+        CONST_STRING ( & host, "sra-download.ncbi.nlm.nih.gov" );
+        if ( self -> xml )
+            OUTMSG ( ( "%s      <%s host=\"%S\">\n", bol, root, & host ) );
+        else
+            OUTMSG ( ( "%s %s host=\"%S\" protocol=\"%s\"\n",
+                       method, root, & host, protocol ) );
+        if ( https )
+            rc = KNSManagerMakeClientHttps
+                ( self -> knsMgr, & http, NULL, HTTP_VERSION, & host, 0 );
+        else
+            rc = KNSManagerMakeClientHttp
+                ( self -> knsMgr, & http, NULL, HTTP_VERSION, & host, 0 );
+        if ( rc == 0 ) {
+            rc = KClientHttpMakeRequest( http, & req, "/srapub/%s", arg );
+            if ( rc != 0 )
+                OUTMSG ( ( "KClientHttpMakeRequest(%S,/srapub/%s)=%R\n",
+                           & host, arg, rc ) );
+        }
+        else
+            OUTMSG ( ( "KClientHttpMakeRequest(%S)=%R\n", & host, rc ) );
+        if ( get && rc == 0 ) {
+            rc = KClientHttpRequestByteRange ( req, 0, 4096 );
+            if ( rc != 0 )
+                OUTMSG ( ( "KClientHttpRequestByteRange(0,4096)=%R\n", rc ) );
+        }
+        if ( rc == 0 ) {
+            rc = KClientHttpRequestFormatMsg
+                ( req, b, sizeof_b, get ? "GET" : "HEAD", & len );
+            if ( GetRCObject ( rc ) == ( enum RCObject ) rcBuffer &&
+                    GetRCState ( rc ) == rcInsufficient )
+            {
+                free ( allocated );
+                sizeof_b = 0;
+                allocated = b = malloc ( len );
+                if ( allocated == NULL )
+                    rc = RC
+                        ( rcExe, rcData, rcAllocating, rcMemory, rcExhausted );
+                else {
+                    sizeof_b = len;
+                    rc = KClientHttpRequestFormatMsg
+                        ( req, b, sizeof_b, get ? "GET" : "HEAD", & len );
+                }
+            }
+            if ( rc == 0 )
+                OUTMSG ( ( "%s", b ) );
+            else
+                OUTMSG ( ( "KClientHttpRequestFormatMsg()=%R\n", rc ) );
+        }
+        if ( rc == 0 ) {
+            if ( get ) {
+                rc = KClientHttpRequestGET ( req, & rslt );
+                if ( rc != 0 )
+                    OUTMSG ( ( "KClientHttpRequestGET()=%R\n", rc ) );
+            }
+            else {
+                rc = KClientHttpRequestHEAD ( req, & rslt );
+                if ( rc != 0 )
+                    OUTMSG ( ( "KClientHttpRequestHEAD()=%R\n", rc ) );
+            }
+        }
+        if ( rc == 0 ) {
+            rc = KClientHttpResultFormatMsg
+                ( rslt, b, sizeof_b, & len, "", "\n" );
+            if ( GetRCObject ( rc ) == ( enum RCObject ) rcBuffer &&
+                 GetRCState ( rc ) == rcInsufficient )
+            {
+                free ( allocated );
+                sizeof_b = 0;
+                allocated = b = malloc ( len );
+                if ( allocated == NULL )
+                    rc = RC
+                        ( rcExe, rcData, rcAllocating, rcMemory, rcExhausted );
+                else {
+                    sizeof_b = len;
+                    rc = KClientHttpResultFormatMsg
+                        ( rslt, b, sizeof_b, & len, "", "\n" );
+                }
+            }
+            if ( rc != 0 )            
+                OUTMSG ( ( "KClientHttpResultFormatMsg()=%R\n", rc ) );
+        }
+        if ( self -> xml )
+            OUTMSG ( ( "%s      </%s>\n", bol, root ) );
+        if ( rc == 0 ) {
+            const char root [] = "Response";
+            if (self->xml)
+                OUTMSG(("%s      <%s>\n", bol, root));
+            else
+                OUTMSG(("%s\n", root));
+            OUTMSG ( ( "%s", b ) );
+            if (self->xml)
+                OUTMSG(("%s      </%s>\n", bol, root));
+            else
+                OUTMSG ( ( "\n" ) );
+        }
+        free ( allocated );
+        allocated = NULL;
+        b = buffer;
+        RELEASE ( KClientHttpResult, rslt );
+        RELEASE ( KClientHttpRequest, req );
+        RELEASE ( KClientHttp, http );
+    }
+    if ( self -> xml )
+        OUTMSG ( ( "%s    </%s>\n", bol, method ) );
+    return rc;
+}
+
+static rc_t MainNetwotk ( const Main * self,
+    const char * arg, const char * bol, const char * eol )
+{
+    const char root[] = "Network";
+    assert(self);
+    if (self->xml) {
+        OUTMSG(("%s<%s>\n", bol, root));
+    }
+    if (arg == NULL) {
+        const char root[] = "KNSManager";
+        bool enabled = KNSManagerGetHTTPProxyEnabled(self->knsMgr);
+        if (!enabled) {
+            if (self->xml) {
+                OUTMSG(("%s  <%s GetHTTPProxyEnabled=\"false\">\n", bol, root));
+            }
+            else {
+                OUTMSG(("KNSManagerGetHTTPProxyEnabled=\"false\"\n", root));
+            }
+        }
+        else {
+            if (self->xml) {
+                OUTMSG(("%s  <%s GetHTTPProxyEnabled=\"true\">\n", bol, root));
+            }
+            else {
+                OUTMSG(("KNSManagerGetHTTPProxyEnabled=\"true\"\n", root));
+            }
+        }
+        {
+            const HttpProxy *p = KNSManagerGetHttpProxy(self->knsMgr);
+            while (p) {
+                const char root[] = "HttpProxy";
+                const String *http_proxy = NULL;
+                uint16_t http_proxy_port = 0;
+                HttpProxyGet(p, &http_proxy, &http_proxy_port);
+                if (self->xml) {
+                    if ( http_proxy_port == 0) {
+                        OUTMSG ( ( "%s    <%s path=\"%S\"/>\n",
+                            bol, root, http_proxy ) );
+                    }
+                    else {
+                        OUTMSG(("%s    <%s path=\"%S\" port=\"%d\"/>\n",
+                            bol, root, http_proxy, http_proxy_port));
+                    }
+                }
+                else {
+                    if ( http_proxy_port == 0) {
+                        OUTMSG(("HTTPProxy=\"%S\"\n", http_proxy));
+                    }
+                    else {
+                        OUTMSG(("HTTPProxy=\"%S\":%d\n",
+                            http_proxy, http_proxy_port));
+                    }
+                }
+                p = HttpProxyGetNextHttpProxy ( p );
+            }
+        }
+        if (self->xml) {
+            OUTMSG(("%s  </%s>\n", bol, root));
+        }
+    }
+
+    if (arg == NULL) {
+        const char *user_agent = NULL;
+        rc_t rc = KNSManagerGetUserAgent(&user_agent);
+        if (rc != 0) {
+            OUTMSG(("KNSManagerGetUserAgent()=%R%s", rc, eol));
+        }
+        else {
+            const char root[] = "UserAgent";
+            if (self->xml) {
+                OUTMSG(("%s  <%s>%s</%s>\n", bol, root, user_agent, root));
+            }
+            else {
+                OUTMSG(("UserAgent=\"%s\"\n", user_agent));
+            }
+        }
+
+        perform_dns_test (self, eol,  80);
+        perform_dns_test (self, eol, 443);
+        ClientRequestTest(self, eol,
+ "https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current.version"
+            );
+    }
+
+    if (arg != NULL)
+        perform_cgi_test(self, eol, arg);
+
+    if ( arg != NULL ) {
+        const char root [] = "Ranges";
+        if ( self -> xml )
+            OUTMSG ( ( "%s  <%s>\n", bol, root ) );
+        else
+            OUTMSG ( ( "\n%s\n", root ) );
+        MainRanges ( self, arg, bol, true , false );
+        MainRanges ( self, arg, bol, true , true  );
+        MainRanges ( self, arg, bol, false, false );
+        MainRanges ( self, arg, bol, false, true  );
+        if ( self-> xml )
+            OUTMSG ( ( "%s  </%s>\n", bol, root ) );
+    }
+
+    if ( self -> xml )
+        OUTMSG ( ( "%s</%s>\n", bol, root ) );
+
+    return 0;
+}
+
+static rc_t MainExec ( const Main * self,
+    const KartItem * item, const char * aArg, ... )
+{
+    const char root[] = "Object";
+
+    rc_t rc = 0;
+    rc_t rce = 0;
+
+    KPathType type = kptNotFound;
+    bool alias = false;
+    int64_t directSz = -1;
+    int64_t localSz = -1;
+    int64_t remoteSz = -1;
+    size_t num_writ = 0;
+    char arg[PATH_MAX] = "";
+
+    const char *eol = NULL;
+
+    va_list args;
+    va_start(args, aArg);
+
+    assert(self);
+
+    eol = self->xml ? "<br/>\n" : "\n";
+
+    if (self->xml) {
+        OUTMSG(("<%s>\n", root));
+    }
+
+    if (item != NULL) {
+        type = kptKartITEM;
+
+        _KartItemPrint(item, self->xml);
+    }
+
+    else {
+        rc = string_vprintf(arg, sizeof arg, &num_writ, aArg, args);
+        if (rc != 0) {
+            OUTMSG(("string_vprintf(%s)=%R%s", aArg, rc, eol));
+            return rc;
+        }
+        assert(num_writ < sizeof arg);
+
+        OUTMSG(("\n"));
+        rc = printString(arg);
+        if (rc != 0) {
+            OUTMSG(("printString=%R%s", rc, eol));
+            return rc;
+        }
+        if (MainHasTest(self, eType)) {
+            OUTMSG((" "));
+            rc = MainReport(self, arg, &directSz, &type, &alias);
+        }
+        else {
+            type = KDirectoryPathType(self->dir, "%s", arg);
+        }
+        OUTMSG(("%s", eol));
+
+        if (MainHasTest(self, eOpenTable)) {
+            MainOpenAs(self, arg, false);
+        }
+        if (MainHasTest(self, eOpenDB)) {
+            MainOpenAs(self, arg, true);
+        }
+    }
+
+    if (self->recursive && type == kptDir && !alias) {
+        uint32_t i = 0;
+        uint32_t count = 0;
+        KNamelist *list = NULL;
+        rc = KDirectoryList(self->dir, &list, NULL, NULL, "%s", arg);
+        if (rc != 0) {
+            OUTMSG(("KDirectoryList(%s)=%R ", arg, rc));
+        }
+        else {
+            rc = KNamelistCount(list, &count);
+            if (rc != 0) {
+                OUTMSG(("KNamelistCount(KDirectoryList(%s))=%R ", arg, rc));
+            }
+        }
+        for (i = 0; i < count && rc == 0; ++i) {
+            const char *name = NULL;
+            rc = Quitting();
+            if (rc != 0) {
+                break;
+            }
+            rc = KNamelistGet(list, i, &name);
+            if (rc != 0) {
+                OUTMSG(("KNamelistGet(KDirectoryList(%s), %d)=%R ",
+                    arg, i, rc));
+            }
+            else {
+                rc_t rc2 = MainExec(self, NULL, "%s/%s", arg, name);
+                if (rc2 != 0 && rce == 0) {
+                    rce = rc2;
+                }
+            }
+        }
+        RELEASE(KNamelist, list);
+    }
+    else {
+        bool isKart = false;
+        Kart *kart = NULL;
+        if (type == kptFile) {
+            rc_t rc = KartMake(self->dir, arg, &kart, &isKart);
+            if (rc != 0) {
+                OUTMSG(("KartMake = %R\n", rc));
+            }
+        }
+
+        if (isKart) {
+            const KartItem *item = NULL;
+            while (true) {
+                rc_t rc2 = 0;
+                RELEASE(KartItem, item);
+                rc2 = Quitting();
+                if (rc2 != 0) {
+                    if (rce == 0) {
+                        rce = rc2;
+                    }
+                    break;
+                }
+                rc2 = KartMakeNextItem(kart, &item);
+                if (rc2 != 0) {
+                    OUTMSG(("KartMakeNextItem = %R\n", rc2));
+                    if (rce == 0) {
+                        rce = rc2;
+                    }
+                    break;
+                }
+                if (item == NULL) {
+                    break;
+                }
+                rc2 = MainExec(self, item, NULL);
+                if (rc2 != 0 && rce == 0) {
+                    rce = rc2;
+                }
+            }
+            if (true) {
+                _KartPrintNumbered(kart, self->xml);
+            }
+            /*if (true) {
+                _KartPrint(kart, self->xml);
+            }
+            if (true) {
+                _KartPrintSized(kart, self->xml);
+            }*/
+            KartRelease(kart);
+            kart = NULL;
+        }
+        else {
+            if (MainHasTest(self, eResolve)) {
+     /* ignore returned value :
+        resolver's errors are detected but not reported as test-sra's failure */
+                MainResolve(self, item, arg, &localSz, &remoteSz, false);
+            }
+
+            if (MainHasTest(self, eNetwork)) {
+                MainNetwotk(self, arg, "  ", eol);
+            }
+
+            if (item == NULL) { /* TODO || kartitem & database */
+                if (type == kptDatabase || type == kptNotFound) {
+                    if (MainHasTest(self, eDependMissing)) {
+                        rc_t rc2 = MainDepend(self, arg, true);
+                        if (rc == 0 && rc2 != 0) {
+                            rc = rc2;
+                        }
+                    }
+
+                    if (MainHasTest(self, eDependAll)) {
+                        rc_t rc2 = MainDepend(self, arg, false);
+                        if (rc == 0 && rc2 != 0) {
+                            rc = rc2;
+                        }
+                    }
+                }
+            }
+
+            if (MainHasTest(self, eResolve) && (
+                (directSz != -1 && localSz != -1 && directSz != localSz) ||
+                (remoteSz != -1 && localSz != -1 && localSz != remoteSz))
+               )
+            {
+                OUTMSG(("FILE SIZES DO NOT MATCH: "));
+                if (directSz != -1 && localSz != -1 &&
+                    directSz != remoteSz)
+                {
+                    OUTMSG(("direct=%ld != remote=%ld. ", directSz, remoteSz));
+                }
+                if (remoteSz != -1 && localSz != -1 &&
+                    localSz != remoteSz)
+                {
+                    OUTMSG(("local=%ld != remote=%ld. ", localSz, remoteSz));
+                }
+                OUTMSG(("\n"));
+            }
+
+        }
+    }
+
+    if (rce != 0 && rc == 0) {
+        rc = rce;
+    }
+
+    if (self->xml) {
+        OUTMSG(("</%s>\n", root));
+    }
+
+    va_end(args);
+    return rc;
+}
+
+static
+rc_t _SraReleaseVersionPrint(const SraReleaseVersion *self, rc_t rc, bool xml,
+    const char *error, const char *msg)
+{
+    assert(self && error && msg);
+
+    if (rc != 0) {
+        OUTMSG(("ERROR: %s.", error));
+    }
+    else {
+        char version[256] = "";
+        const char *eol = xml ? "<br/>\n" : "\n";
+        rc = SraReleaseVersionPrint(self, version, sizeof version, NULL);
+        if (rc == 0) {
+            rc = OUTMSG(("%s: %s.%s", msg, version, eol));
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KDyldLoadLib(KDyld *self, char *name, size_t sz,
+    const char *path, bool xml, int indent)
+{
+    rc_t rc = 0;
+    KDylib *lib = NULL;
+    rc = KDyldLoadLib(self, &lib, "%.*s", sz, path);
+    if (rc == 0) {
+        rc = OUTMSG(("LOADED %.*s\n", sz, path));
+    }
+    else {
+        rc = OUTMSG(("NOT LOADED %.*s\n", sz, path));
+    }
+    RELEASE(KDylib, lib);
+    return rc;
+}
+
+static rc_t _KHttpRequestPOST ( KHttpRequest * self,
+    KDataBuffer * result, size_t * total )
+{
+    rc_t rc = 0;
+    KHttpResult *rslt = NULL;
+    assert(result && total);
+    *total = 0;
+    rc = KHttpRequestPOST(self, &rslt);
+    if (rc == 0) {
+        uint32_t code = 0;
+        size_t msg_size = 0;
+        char msg_buff[256] = "";
+        rc = KHttpResultStatus(rslt,
+            &code, msg_buff, sizeof msg_buff, &msg_size);
+        if (rc == 0 && code == 200) {
+            KStream *response = NULL;
+            rc = KHttpResultGetInputStream( rslt, &response);
+            if (rc == 0) {
+                size_t num_read = 0;
+                KDataBufferMakeBytes(result, 4096);
+                while (true) {
+                    uint8_t *base = NULL;
+                    uint64_t avail = result->elem_count - *total;
+                    if (avail < 256) {
+                        rc = KDataBufferResize
+                            (result, result->elem_count + 4096);
+                        if (rc != 0) {
+                            break;
+                        }
+                    }
+                    base = result->base;
+                    rc = KStreamRead(response, &base[*total],
+                        result->elem_count - *total, &num_read);
+                    if (rc != 0) {
+                        if (num_read > 0) {
+                            rc = 0;
+                        }
+                        else {
+                            break;
+                        }
+                    }
+                    if (num_read == 0) {
+                        break;
+                    }
+                    *total += num_read;
+                }
+                RELEASE(KStream, response);
+            }
+        }
+    }
+    RELEASE(KHttpResult, rslt);
+    return rc;
+}
+
+static rc_t _MainPost ( const Main * self,
+    const char * name, char * buffer, size_t sz )
+{
+    rc_t rc = 0;
+
+    KHttpRequest *req = NULL;
+    KDataBuffer result;
+
+    size_t total = 0;
+
+    assert(self && buffer && sz);
+
+    memset ( & result, 0, sizeof result );
+    buffer[0] = '\0';
+
+    rc = KNSManagerMakeRequest(self->knsMgr, &req, HTTP_VERSION, NULL,
+        "https://trace.ncbi.nlm.nih.gov/Traces/sratoolkit/sratoolkit.cgi");
+
+    if (rc == 0) {
+        rc = KHttpRequestAddPostParam(req, "cmd=vers");
+    }
+    if (rc == 0) {
+        rc = KHttpRequestAddPostParam(req, "libname=%s", name);
+    }
+    if (rc == 0) {
+        rc = _KHttpRequestPOST(req, &result, &total);
+    }
+
+    if (rc == 0) {
+        const char *start = (const void*)(result.base);
+        if (total > 0) {
+            if (*(start + total - 1) != '\n') {
+                rc = RC(rcExe, rcString, rcParsing, rcString, rcUnexpected);
+            }
+            else {
+                string_copy(buffer, sz, start, total - 1);
+            }
+        }
+    }
+
+    KDataBufferWhack(&result);
+    RELEASE(KHttpRequest, req);
+
+    return rc;
+}
+
+static rc_t _MainPrintNgsInfo(const Main* self) {
+    rc_t rc = 0;
+    const char root[] = "Ngs";
+    KDyld *l = NULL;
+    assert(self);
+    if (self->xml) {
+        OUTMSG(("  <%s>\n", root));
+    }
+    {
+        const char root[] = "Latest";
+        char v[512];
+        if (self->xml) {
+            OUTMSG(("    <%s>\n", root));
+        }
+        {
+            const char name[] = "ncbi-vdb";
+            _MainPost(self, name, v, sizeof v);
+            if (self->xml) {
+                OUTMSG(("      <%s version=\"%s\"/>\n", name, v));
+            }
+            else {
+                OUTMSG(("%s latest version=\"%s\"\n", name, v));
+            }
+        }
+        {
+            const char name[] = "ngs-sdk";
+            _MainPost(self, name, v, sizeof v);
+            if (self->xml) {
+                OUTMSG(("      <%s version=\"%s\"/>\n", name, v));
+            }
+            else {
+                OUTMSG(("%s latest version=\"%s\"\n", name, v));
+                OUTMSG(("\n"));
+            }
+        }
+        if (self->xml) {
+            OUTMSG(("    </%s>\n", root));
+        }
+    }
+    rc = KDyldMake(&l);
+    {
+        String *result = NULL;
+        rc = KConfigReadString(self->cfg, "NCBI_HOME", &result);
+        if (rc == 0) {
+            bool found = false;
+            const KFile *f = NULL;
+            char *buffer = NULL;
+            char *ps = NULL;
+            size_t ls = 0;
+            char *pv = NULL;
+            size_t lv = 0;
+            assert(result);
+            rc = KDirectoryOpenFileRead
+                (self->dir, &f, "%s/LibManager.properties", result->addr);
+            if (rc == 0) {
+                uint64_t size = 0;
+                rc = KFileSize(f, &size);
+                if (rc == 0) {
+                    buffer = malloc(size + 1);
+                    if (buffer == NULL) {
+                        rc = RC(rcExe, rcData, rcAllocating,
+                            rcMemory, rcExhausted);
+                    }
+                    else {
+                        size_t num_read = 0;
+                        rc = KFileRead(f, 0, buffer, size + 1, &num_read);
+                        if (rc == 0) {
+#if _ARCH_BITS == 32
+                            const char* sneed = "/dll/ngs-sdk/32/loaded/path=";
+                            const char* vneed = "/dll/ncbi-vdb/32/loaded/path=";
+#else
+                            const char* sneed = "/dll/ngs-sdk/64/loaded/path=";
+                            const char* vneed = "/dll/ncbi-vdb/64/loaded/path=";
+#endif
+
+                            assert(num_read <= size);
+                            buffer[num_read] = '\0';
+                            found = true;
+
+                            ps = strstr(buffer, sneed);
+                            if (ps != NULL) {
+                                ps += strlen(sneed);
+                            }
+                            if (ps != NULL) {
+                                const char *e = strchr(ps, '\n');
+                                if (e != NULL) {
+                                    ls = e - ps;
+                                }
+                            }
+
+                            pv = strstr(buffer, vneed);
+                            if (pv != NULL) {
+                                pv += strlen(vneed);
+                            }
+                            if (pv != NULL) {
+                                const char *e = strchr(pv, '\n');
+                                if (e != NULL) {
+                                    lv = e - pv;
+                                }
+                            }
+                        }
+                    }
+                }
+                RELEASE(KFile, f);
+            }
+            if (self->xml) {
+                if (found) {
+                    OUTMSG(("    <LibManager>\n"
+                            "      <Properties>\n%s"
+                            "      </Properties>\n", buffer));
+                    if (ls != 0) {
+                        OUTMSG(("      <ngs-sdk>\n"
+                                "        <Path>%.*s</Path>\n", ls, ps));
+                        _KDyldLoadLib(l, "ngs-sdk", ls, ps, self->xml, 8);
+                        OUTMSG(("      </ngs-sdk>\n"));
+                    }
+                    if (lv != 0) {
+                        OUTMSG(("      <ncbi-vdb>\n"
+                                "        <Path>%.*s</Path>\n", lv, pv));
+                        _KDyldLoadLib(l, "ncbi-vdb", ls, ps, self->xml, 8);
+                        OUTMSG(("      </ncbi-vdb>\n"));
+                    }
+                    OUTMSG(("    </LibManager>\n"));
+                }
+                else {
+                    OUTMSG(("    <LibManager.properties/>\n"));
+                }
+            }
+            else {
+                OUTMSG(("LibManager.properties=\n"));
+                if (found) {
+                    OUTMSG(("%s\n", buffer));
+                    if (ls != 0) {
+                        OUTMSG(("LibManager.ngs-sdk='%.*s'\n", ls, ps));
+                    }
+                    if (lv != 0) {
+                        OUTMSG(("LibManager.ngs-sdk='%.*s'\n", lv, pv));
+                    }
+                }
+            }
+            free(buffer);
+            buffer = NULL;
+            free(result);
+            result = NULL;
+        }
+    }
+    {
+        const char root[] = "ncbi-vdb";
+        if (self->xml) {
+            OUTMSG(("    <%s>\n", root));
+        }
+        if (self->xml) {
+            OUTMSG(("    </%s>\n", root));
+        }
+    }
+    {
+        const char root[] = "ngs-sdk";
+        if (self->xml) {
+            OUTMSG(("    <%s>\n", root));
+        }
+        if (self->xml) {
+            OUTMSG(("    </%s>\n", root));
+        }
+    }
+    if (self->xml) {
+        OUTMSG(("  </%s>\n", root));
+    }
+    RELEASE(KDyld, l);
+    return rc;
+}
+
+static rc_t MainPrintVersion(Main *self) {
+    const char root[] = "Version";
+
+    rc_t rc = 0;
+
+    SraReleaseVersion version;
+    SraReleaseVersion newVersion;
+
+    assert(self);
+
+    if (MainHasTest(self, eNewVersion)) {
+        MainAddTest(self, eVersion);
+    }
+
+    if (!MainHasTest(self, eVersion)) {
+        return 0;
+    }
+    memset(&version, 0, sizeof version);
+    memset(&newVersion, 0, sizeof newVersion);
+    if (self->xml) {
+        OUTMSG(("  <%s>\n", root));
+    }
+    rc = SraReleaseVersionGet(&version);
+    rc = _SraReleaseVersionPrint(&version, rc, self->xml,
+        "cannot get SRA Toolkit release version",
+        "NCBI SRA Toolkit release version");
+
+    if (MainHasTest(self, eNewVersion)) {
+        int32_t isNew = 0;
+        rc = KNSManagerNewReleaseVersion(self->knsMgr, &newVersion);
+        rc = _SraReleaseVersionPrint(&newVersion, rc, self->xml,
+            "cannot get latest available SRA Toolkit release version",
+            "Latest available NCBI SRA Toolkit release version");
+        if (rc == 0) {
+            rc = SraReleaseVersionCmp(&version, &newVersion, &isNew);
+        }
+        if (rc == 0) {
+            if (isNew > 0) {
+                OUTMSG((
+           "A new version of SRA Toolkit is available for download from\n"
+           "\"https://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software\".\n"
+                ));
+            }
+            else if (isNew == 0) {
+                OUTMSG(("You already have the latest version of "
+                    "SRA Toolkit.\n"));
+            }
+            else {
+                OUTMSG(("Your version of "
+                    "SRA Toolkit is more recent than the latest available.\n"));
+            }
+        }
+    }
+
+    if (self->xml) {
+        OUTMSG(("  </%s>\n", root));
+    }
+    else if (self->full) {
+        OUTMSG(("\n"));
+    }
+
+    return rc;
+}
+
+static rc_t MainFini(Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(VResolver, self->resolver);
+    RELEASE(KConfig, self->cfg);
+    RELEASE(KNSManager, self->knsMgr);
+    RELEASE(KRepositoryMgr, self->repoMgr);
+    RELEASE(VFSManager, self->vMgr);
+    RELEASE(VDBManager, self->mgr);
+    RELEASE(KDirectory, self->dir);
+    RELEASE(VSchema, self->schema);
+
+    return rc;
+}
+
+#define OPTION_CACHE "allow-caching"
+#define ALIAS_CACHE  "C"
+static const char* USAGE_CACHE[] = { "do not disable caching", NULL };
+
+#define OPTION_BYTES "bytes"
+#define ALIAS_BYTES  "b"
+static const char* USAGE_BYTES[]
+    = { "print the first <K> bytes of resolved remote HTTP file", NULL };
+
+#define OPTION_FULL "full"
+#define ALIAS_FULL  NULL
+static const char* USAGE_FULL[] = { "full test mode", NULL };
+
+#define OPTION_LIB "library"
+#define ALIAS_LIB  "l"
+static const char* USAGE_LIB[] = { "report version of dynamic library", NULL };
+
+#define OPTION_QUICK "quick"
+#define ALIAS_QUICK  "Q"
+static const char* USAGE_QUICK[] = { "quick test mode", NULL };
+
+#define OPTION_NO_RFS "no-rfs"
+static const char* USAGE_NO_RFS[]
+    = { "do not check remote file size for dependencies", NULL };
+
+#define OPTION_NO_VDB "no-vdb"
+#define ALIAS_NO_VDB  "N"
+static const char* USAGE_NO_VDB[] = { "do not call VDBManagerPathType", NULL };
+
+#define OPTION_PRJ "project-id"
+#define ALIAS_PRJ  "p"
+static const char* USAGE_PRJ[] = { "set project context", NULL };
+
+#define OPTION_REC "recursive"
+#define ALIAS_REC  "R"
+static const char* USAGE_REC[] = { "check object type recursively", NULL };
+
+#define OPTION_OUT "output"
+#define ALIAS_OUT  "X"
+static const char* USAGE_OUT[] = { "output type: one of (xml text)", NULL };
+
+OptDef Options[] = {                             /* needs_value, required */
+    { OPTION_BYTES , ALIAS_BYTES , NULL, USAGE_BYTES , 1, true , false },
+    { OPTION_CACHE , ALIAS_CACHE , NULL, USAGE_CACHE , 1, false, false },
+    { OPTION_FULL  , ALIAS_FULL  , NULL, USAGE_FULL  , 1, false, false },
+    { OPTION_LIB   , ALIAS_LIB   , NULL, USAGE_LIB   , 0, true , false },
+    { OPTION_NO_RFS, NULL        , NULL, USAGE_NO_RFS, 1, false, false },
+    { OPTION_NO_VDB, ALIAS_NO_VDB, NULL, USAGE_NO_VDB, 1, false, false },
+    { OPTION_OUT   , ALIAS_OUT   , NULL, USAGE_OUT   , 1, true , false },
+    { OPTION_PRJ   , ALIAS_PRJ   , NULL, USAGE_PRJ   , 1, true , false },
+    { OPTION_QUICK , ALIAS_QUICK , NULL, USAGE_QUICK , 1, false, false },
+    { OPTION_REC   , ALIAS_REC   , NULL, USAGE_REC   , 1, false, false },
+};
+
+static rc_t PrintLib ( const char * path, bool xml ) {
+    const char root[] = "dll";
+    KDyld * dl = NULL;
+    KDylib * lib = NULL;
+    KSymAddr * sym = NULL;
+    const char * ( CC * getPackageVersion ) ( void ) = NULL;
+    const char * version = NULL;
+    const char * name = NULL;
+    rc_t rc = KDyldMake ( & dl );
+    if ( xml ) {
+        OUTMSG(("  <%s path=\"%s\">", root, path));
+    } else {
+        OUTMSG(("dll path=\"%s\"\n", path));
+    }
+    if ( rc == 0 ) {
+        rc = KDyldLoadLib ( dl, & lib, path );
+        if ( rc != 0 ) {
+            if ( xml ) {
+                OUTMSG(("<KDyldLoadLib=\"%R\"/>", rc));
+            } else {
+                OUTMSG(("KDyldLoadLib=\"%R\"\n", rc));
+            }
+        }
+    }
+    if ( rc == 0 ) {
+        rc = KDylibSymbol ( lib, & sym, "ngs_PackageItf_getPackageVersion" );
+        if ( rc == 0 ) {
+            KSymAddrAsFunc ( sym, ( fptr_t * ) & getPackageVersion );
+            version = getPackageVersion ();
+            name = "ngs-sdk";
+        }
+        else {
+            rc = KDylibSymbol ( lib, & sym, "GetPackageVersion" );
+            if ( rc == 0 ) {
+                KSymAddrAsFunc ( sym, ( fptr_t * )&  getPackageVersion );
+                version = getPackageVersion ();
+                name = "ncbi-vdb";
+            } else {
+                if ( xml ) {
+                    OUTMSG(("<KDylibSymbol=\"%R\"/>", rc));
+                } else {
+                    OUTMSG(("KDylibSymbol=\"%R\"\n", rc));
+                }
+            }
+        }
+    }
+    if ( rc == 0 ) {
+        if (version == NULL ) {
+            if ( xml ) {
+                OUTMSG(("<version found=\"false\"/>"));
+            } else {
+                OUTMSG(("version: not found\n"));
+            }
+        } else {
+            if ( xml ) {
+                OUTMSG(("<version name=\"%s\">%s</version>", name, version));
+            } else {
+                OUTMSG(("%s: \"%s\"\n", name, version));
+            }
+        }
+    }
+    if ( xml ) {
+        OUTMSG(("</%s>", root));
+    }
+    OUTMSG(("\n"));
+    RELEASE ( KSymAddr, sym );
+    RELEASE ( KDylib, lib );
+    RELEASE ( KDyld, dl );
+    return rc;
+}
+
+rc_t CC KMain(int argc, char *argv[]) {
+    rc_t rc = 0;
+    uint32_t pcount = 0;
+    uint32_t i = 0;
+    Args *args = NULL;
+    rc_t rc3 = 0;
+    int argi = 0;
+    uint32_t params = 0;
+    const char * eol = "\n";
+
+    Main prms;
+    char **argv2 = MainInit(&prms, argc, argv, &argi);
+
+    if ( rc == 0 && prms . xml ) {
+        eol = "<br/>\n";
+    }
+
+    if (rc == 0) {
+        rc = ArgsMakeAndHandle(&args, argi, argv2, 1,
+            Options, sizeof Options / sizeof Options[0]);
+    }
+
+    if ( rc == 0 ) {
+        rc = ArgsParamCount ( args, & params );
+    }
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_CACHE, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_CACHE "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                prms.allowCaching = true;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_PRJ, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_PRJ "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                const char *dummy = NULL;
+                rc = ArgsOptionValue
+                    (args, OPTION_PRJ, 0, (const void **)&dummy);
+                if (rc != 0) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_PRJ "' argument");
+                }
+                else {
+                    prms.projectId = AsciiToU32(dummy, NULL, NULL);
+                }
+            }
+        }
+    }
+
+    prms.full = true;
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_QUICK, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_QUICK "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                prms.full = false;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_FULL, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_FULL "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                prms.full = true;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        prms.bytes = 256;
+        rc = ArgsOptionCount(args, OPTION_BYTES, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_BYTES "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                const char *val = NULL;
+                rc = ArgsOptionValue
+                    (args, OPTION_BYTES, 0, (const void **)&val);
+                if (rc == 0) {
+                    int bytes = atoi(val);
+                    if (bytes > 0) {
+                        prms.bytes = bytes;
+                        MainAddTest(&prms, ePrintFile);
+                        MainAddTest(&prms, eResolve);
+                    }
+                } else {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_BYTES "' argument value");
+                }
+            }
+        }
+    }
+
+    if (!prms.full) {
+        MainMakeQuick(&prms);
+    }
+
+    if (rc == 0) {
+        rc = MainInitObjects(&prms);
+    }
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_LIB, &pcount);
+        if (rc == 0 && pcount > 0 && ! prms.xml) {
+            prms . tests = 0;
+        }
+    }
+
+    if (rc == 0) {
+        const char root[] = "Test-sra";
+        rc = ArgsOptionCount(args, OPTION_OUT, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                const char *dummy = NULL;
+                rc =
+                    ArgsOptionValue(args, OPTION_OUT, 0, (const void **)&dummy);
+                if (rc != 0) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_OUT "' argument");
+                }
+                else if (strcmp(dummy, "x") == 0 || strcmp(dummy, "X") == 0) {
+                    prms.xml = true;
+                }
+                else {
+                    prms.xml = false;
+                }
+            }
+            else {
+                prms.xml = MainHasTest(&prms, eCfg)
+                    || MainHasTest(&prms, eNcbiReport);
+            }
+        }
+
+        if (prms.xml) {
+            OUTMSG(("<%s>\n", root));
+        }
+
+        if (MainHasTest(&prms, eNgs)) {
+            _MainPrintNgsInfo(&prms);
+        }
+
+        MainPrintVersion(&prms);
+
+        if (MainHasTest(&prms, eCfg)) {
+            rc_t rc2 = MainPrintConfig(&prms);
+            if (rc == 0 && rc2 != 0) {
+                rc = rc2;
+            }
+        }
+
+        if (MainHasTest(&prms, eOS)) {
+            PrintOS(prms.xml);
+        }
+
+        if (MainHasTest(&prms, eAscp)) {
+            MainPrintAscp(&prms);
+        }
+
+        if (MainHasTest(&prms, eNetwork)) {
+            MainNetwotk(&prms, NULL, prms.xml ? "  " : "", eol);
+        }
+
+        if (!prms.full) {
+            rc_t rc2 = MainQuickCheck(&prms);
+            if (rc == 0 && rc2 != 0) {
+                rc = rc2;
+            }
+        }
+
+        if (rc == 0) {
+            rc = ArgsOptionCount(args, OPTION_NO_RFS, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_NO_RFS "' argument");
+            }
+            else {
+                if (pcount > 0) {
+                    prms.noRfs = true;
+                }
+            }
+        }
+
+        if (rc == 0) {
+            rc = ArgsOptionCount(args, OPTION_NO_VDB, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_NO_VDB "' argument");
+            }
+            else {
+                if (pcount > 0) {
+                    prms.noVDBManagerPathType = true;
+                }
+            }
+        }
+
+        if (rc == 0) {
+            rc = ArgsOptionCount(args, OPTION_REC, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_REC "' argument");
+            }
+            else {
+                if (pcount > 0) {
+                    prms.recursive = true;
+                }
+            }
+        }
+
+        if (rc == 0) {
+            rc = ArgsOptionCount(args, OPTION_LIB, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_LIB "' argument");
+            }
+            else {
+                int i = 0;
+                for (i = 0; i < pcount; ++i) {
+                    const char * lib = NULL;
+                    rc = ArgsOptionValue
+                        ( args, OPTION_LIB, i, ( const void ** ) & lib );
+                    if ( rc != 0 ) {
+                        LOGERR(klogErr, rc,
+                            "Failure to get '" OPTION_LIB "' argument");
+                    }
+                    else {
+                        PrintLib ( lib, prms.xml );
+                    }
+                }
+            }
+        }
+
+        if ( params == 0 && MainHasTest ( & prms, eNetwork ) ) {
+            MainNetwotk ( & prms, "SRR000001", prms . xml ? "  " : "", eol );
+        }
+        for (i = 0; i < params; ++i) {
+            const char *name = NULL;
+            rc3 = ArgsParamValue(args, i, (const void **)&name);
+            if (rc3 == 0) {
+                rc_t rc2 = Quitting();
+                if (rc2 != 0) {
+                    if (rc == 0 && rc2 != 0) {
+                        rc = rc2;
+                    }
+                    break;
+                }
+                ReportResetObject(name);
+                rc2 = MainExec(&prms, NULL, name);
+                if (rc == 0 && rc2 != 0) {
+                    rc = rc2;
+                }
+            }
+        }
+        if (rc == 0 && rc3 != 0) {
+            rc = rc3;
+        }
+
+        if (MainHasTest(&prms, eNcbiReport)) {
+            ReportForceFinalize();
+        }
+
+        if (!prms.full) {
+            OUTMSG(("\nAdd -F option to try all the tests."));
+        }
+
+        if (prms.xml) {
+            OUTMSG(("</%s>\n", root));
+        }
+    }
+
+    RELEASE(Args, args);
+
+    {
+        rc_t rc2 = MainFini(&prms);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    free(argv2);
+
+    return rc;
+}
diff --git a/tools/util/testld.c b/tools/util/testld.c
new file mode 100644
index 0000000..58b31c5
--- /dev/null
+++ b/tools/util/testld.c
@@ -0,0 +1,249 @@
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <klib/vector.h>
+#include <kfs/directory.h>
+#include <kfs/dyload.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* update libpath
+ */
+static
+void testld_update_libpath ( KDyld *dl, const char *path )
+{
+    rc_t rc = 0;
+
+    const char *end;
+    for ( end = strchr ( path, ':' ); end != NULL; end = strchr ( path = end + 1, ':' ) )
+    {
+        if ( path < end )
+        {
+            rc = KDyldAddSearchPath ( dl, "%.*s",
+                                      ( int ) ( end - path ), path );
+            if ( rc != 0 )
+            {
+                PLOGERR ( klogWarn, ( klogWarn, rc, "failed to add library path '$(path)'",
+                                      "path=%.*s", ( int ) ( end - path ), path ));
+            }
+        }
+    }
+
+    if ( path [ 0 ] != 0 )
+    {
+        rc = KDyldAddSearchPath ( dl, path );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogWarn, ( klogWarn, rc, "failed to add library path '$(path)'", "path=s", path ));
+        }
+    }
+}
+
+
+/* load library
+ */
+static
+void testld_load_library ( KDyld *dl, KDlset *libs, const char *libname )
+{
+    KDylib *lib;
+    rc_t rc = KDyldLoadLib ( dl, & lib, libname );
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr, ( klogErr, rc, "failed to load library '$(name)'",
+                             "name=%s", libname ));
+    }
+    else
+    {
+        printf ( "loaded library '%s'\n", libname);
+
+        rc = KDlsetAddLib ( libs, lib );
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogInt, ( klogInt, rc, "failed to retain library '$(name)'",
+                                 "name=%s", libname ));
+        }
+
+        KDylibRelease ( lib );
+    }
+}
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+
+#define OPTION_LOAD "lib-path"
+#define ALIAS_LOAD  "l"
+
+static
+const char * load_usage [] = 
+	{ "Path(s) for loading dynamic libraries.", NULL };
+
+static
+OptDef MyOptions[] =
+{
+    { OPTION_LOAD, ALIAS_LOAD, NULL, load_usage, 0, true, false }
+};
+
+
+const char UsageDefaultName[] = "testld";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [Options]\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Test for dynamic loading.\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    OUTMSG (("Options\n"));
+
+    HelpOptionLine (ALIAS_LOAD, OPTION_LOAD, "Path", load_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, MyOptions, sizeof MyOptions / sizeof (OptDef));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse arguments");
+
+    else
+    {
+        do
+        {
+            KDyld *dl;
+            uint32_t num_libs;
+
+            rc = ArgsParamCount (args, &num_libs);
+            if (rc)
+            {
+                LOGERR ( klogInt, rc, "Failure to count parameters" );
+                break;
+            }
+
+            if (num_libs == 0)
+            {
+                rc = MiniUsage(args);
+                break;
+            }
+
+            /* create loader */
+            rc = KDyldMake (&dl);
+            if (rc)
+            {
+                LOGERR ( klogInt, rc, "failed to create dynamic loader" );
+                break;
+            }
+            else
+            {
+                do
+                {
+                    KDlset *libs;
+                    const char * path;
+                    uint32_t ix;
+                    uint32_t num_paths;
+
+                    rc = ArgsOptionCount (args, OPTION_LOAD, &num_paths);
+                    if (rc)
+                    {
+                        LOGERR (klogInt, rc, "failed to count paths");
+                        break;
+                    }
+
+                    for (ix = 0; ix < num_paths; ix++)
+                    {
+
+                        rc = ArgsOptionValue (args, OPTION_LOAD, ix, (const void **)&path);
+                        if (rc)
+                        {
+                            LOGERR (klogInt, rc, "failed to access a path option");
+                            break;
+                        }
+                        testld_update_libpath (dl, path);
+                    }
+                    if (rc)
+                        break;
+
+                    /* append contents of LD_LIBRARY_PATH */
+                    path = getenv ( "LD_LIBRARY_PATH" );
+
+                    if (path)
+                        testld_update_libpath (dl, path);
+
+                    /* create libset */
+                    rc = KDyldMakeSet (dl, & libs);
+                    if (rc)
+                    {
+                        LOGERR (klogInt, rc, "failed to create dl library set");
+                        break;
+                    }
+                    else
+                    {
+                        /* test it */
+                        for (ix = 0; ix < num_libs; ++ ix )
+                        {
+                            rc = ArgsParamValue (args, ix, (const void **)&path);
+                            if (rc)
+                                break;
+
+                            testld_load_library (dl, libs, path);
+                        }
+
+                        KDlsetRelease ( libs );
+                    }
+                } while (0);
+
+                KDyldRelease ( dl );
+            }
+
+        } while (0);
+
+        ArgsWhack (args);
+    }
+    return rc;
+}
diff --git a/tools/util/txt2kdb.c b/tools/util/txt2kdb.c
new file mode 100644
index 0000000..65a670c
--- /dev/null
+++ b/tools/util/txt2kdb.c
@@ -0,0 +1,579 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <kapp/args.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kdb/manager.h>
+#include <kdb/column.h>
+#include <kapp/main.h>
+
+const char UsageDefaultName[] = "txt2kdb";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s [Options] <File> <Column>\n"
+                    "\n"
+                    "Summary:\n"
+                    "  Create a physical database column from a text file.\n"
+                    "\n", progname);
+}
+
+#define OPTION_APPEND "append"
+#define OPTION_FORCE  "force"
+#define OPTION_BEGIN  "begin"
+#define OPTION_END    "end"
+#define ALIAS_APPEND  "a"
+#define ALIAS_FORCE   "f"
+#define ALIAS_BEGIN   "b"
+#define ALIAS_END     "e"
+
+static const char * append_usage[] =
+{
+    "(no parameter) this will cause to append the",
+    "text file to an existing KColumn.  If the",
+    "file does not already exist it will be",
+    "created.", 
+    NULL
+};
+static const char * force_usage [] =
+{
+    "(no parameter) this will cause to over-write",
+    "existing files.  Without this option the",
+    "program will fail if the KColumn already",
+    "exists and append mode is not selected",
+    NULL
+};
+static const char * begin_usage [] = 
+{
+    "Begin include only lines starting from this",
+    "line in the column.  The first line is line",
+    "1 (not 0).",
+    NULL
+};
+static const char * end_usage   [] =
+{
+    "Stop including lines after this line in the",
+    "column.  The first line is line 1 (not 0).",
+    NULL
+};
+
+
+OptDef Options[] = 
+{
+    { OPTION_APPEND, ALIAS_APPEND, NULL, append_usage, 0, false, false },
+    { OPTION_FORCE,  ALIAS_FORCE,  NULL, force_usage,  0, false, false },
+    { OPTION_BEGIN,  ALIAS_BEGIN,  NULL, begin_usage,  1, true,  false },
+    { OPTION_END,    ALIAS_END,    NULL, end_usage,    1, true,  false }
+};
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    OUTMSG (("File:\n"
+             "  The text file should be ASCII or UTF-8 using LF, CR or CR-LF\n"
+             "  line termination.  Each text line will be put into the\n"
+             "  KColumn as a separate Row.  Each Row will be in its own\n"
+             "  blob.\n"
+             "\n"
+             "Column:\n"
+             "  The KColumn is either an existing KColumn or a path to one\n"
+             "  that can be created.\n"
+                 "\n"
+             "  Both paths should be relative to the current directory or full\n"
+             "  from root \n"
+             "\n"
+             "Options:\n"));
+
+    HelpOptionLine (ALIAS_BEGIN, OPTION_BEGIN, "Start", begin_usage);
+
+    HelpOptionLine (ALIAS_END, OPTION_END, "Stop", end_usage);
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+
+    HelpOptionLine (ALIAS_APPEND, OPTION_APPEND, NULL, append_usage);
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+struct txt2kdbglobals
+{
+    uint64_t     begin;
+    uint64_t     end;
+
+    KDirectory * dir;
+    const KFile * txt;
+    KDBManager * mgr;
+    KColumn * col;
+    const char * txtpath;
+    const char * colpath;
+
+    bool force;
+    bool append;
+    bool begin_seen;
+    bool end_seen;
+} G;
+
+void txt2kdb_release (void)
+{
+    KDirectoryRelease (G.dir);
+    KFileRelease (G.txt);
+    KDBManagerRelease (G.mgr);
+    KColumnRelease (G.col);
+}
+
+rc_t txt2kdb_kfs (void)
+{
+    rc_t rc;
+
+    G.dir = NULL;
+    G.txt = NULL;
+    G.mgr = NULL;
+    G.col = NULL;
+
+    /* -----
+     * Mount the native filesystem as root
+     */
+    rc = KDirectoryNativeDir (&G.dir);
+    if (rc != 0)
+    {
+        G.dir = NULL;
+	LOGMSG (klogFatal, "Failed to open native KDirectory");
+    }
+    else
+    {
+        rc = KDirectoryOpenFileRead (G.dir, &G.txt, "%s", G.txtpath);
+        if (rc != 0)
+        {
+            G.txt = NULL;
+            PLOGERR (klogFatal, (klogFatal, rc, "Unable to open file at $(F)", PLOG_S(F), G.txtpath));
+        }
+        else
+        {
+            rc = KDBManagerMakeUpdate (&G.mgr, G.dir);
+            if (rc)
+            {
+                G.mgr = NULL;
+                LOGERR (klogFatal, rc, "Unable to create a KDBManager at the current directory");
+            }
+            else
+            {
+                KCreateMode kcm;
+                KPathType kpt;
+                const char * err = "";
+
+                kpt = KDirectoryPathType (G.dir, "%s", G.colpath) & ~ kptAlias;
+                kcm = kcmCreate;
+/* Force means replace if exists */
+/* Append means open in append mode if it exists */
+                switch (kpt)
+                {
+                case kptNotFound:
+                    kcm = kcmCreate;
+                    break;
+
+                default:
+                    err = "Unknown";
+                    rc = RC (rcExe, rcNoTarg, rcAccessing, rcPath, rcInvalid);
+                    break;
+
+                case kptBadPath:
+                    err = "Bad Path";
+                    rc = RC (rcExe, rcNoTarg, rcAccessing, rcPath, rcInvalid);
+                    break;
+
+                case kptFile:
+                case kptCharDev:
+                case kptBlockDev:
+                case kptFIFO:
+                    err = "Must be a Directory";
+                    rc = RC (rcExe, rcNoTarg, rcAccessing, rcPath, rcInvalid);
+                    break;
+
+                case kptDir:
+                    kcm = kcmCreate;
+
+                    if (G.append)
+                    {
+                        kcm = kcmOpen;
+                    }
+                    else if (G.force)
+                    {
+                        kcm = kcmInit;
+                    }
+                    break;
+                }
+                if (rc == 0)
+                {
+                    rc = KDBManagerCreateColumn (G.mgr, &G.col, kcm, kcsNone, 0, "%s", G.colpath);
+                    if (rc)
+                        err = "Manager can not open column";
+                }
+                if (rc)
+                {
+                    PLOGERR (klogFatal, (klogFatal, rc, "Cannot open KColumn $(P) because $(R)", PLOG_2(PLOG_S(P),PLOG_S(R)),
+                                         G.colpath, err));
+                }                
+            }
+        }
+    }
+    return rc;
+}
+
+/* If the begin parameter was set check if the rowid is equal or above it */
+bool rowid_lower_range (uint64_t rowid)
+{
+    if (G.begin_seen && (rowid < G.begin))
+        return false;
+    return true;
+}
+
+/* If the end parameter was set check if the rowid is equal or below it */
+bool rowid_upper_range (uint64_t rowid)
+{
+    if (G.end_seen && (rowid > G.end))
+        return false;
+    return true;
+}
+rc_t txt2kdb_io()
+{
+    rc_t rc = 0;
+    uint64_t rowid = 1;
+    uint64_t tix = 0;
+    KColumnBlob * blob;
+    bool blobopen = false;
+
+    while (rc == 0)
+    {
+        size_t num_read;
+        uint8_t buffer  [4096];
+        uint8_t * limit;
+        uint8_t * append_start = buffer;
+        uint8_t * cursor = buffer;
+        bool eol = true;
+
+        /* quit if we are already past the end of the range */
+        if ( ! rowid_upper_range(rowid))
+            break;
+
+        /* read a buffer full.  It may straddle rows. */
+        rc = KFileRead (G.txt, tix, buffer, sizeof buffer, &num_read);
+        if (rc)
+        {
+            PLOGERR (klogFatal, (klogFatal, rc, "Read failed starting $(P)", PLOG_U64(P), tix));
+            break;
+        }
+        /* break at EOF */
+        if (num_read == 0)
+            break;
+
+        /* scan across the buffer looking for lines */
+        for (limit = buffer + num_read; cursor < limit; append_start = cursor)
+        {
+            /* if we are at the beginning of a line (end of previous line or start of first */
+            if (eol)
+            {
+                /* if we are within the pass thru range create a blob */
+                if (rowid_lower_range(rowid) && rowid_upper_range(rowid))
+                {
+                    rc = KColumnCreateBlob (G.col, &blob);
+                    if (rc)
+                    {
+                        PLOGERR (klogFatal, (klogFatal, rc, "Failed to create Blob for row $(R) at $(P)",
+                                             PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+                        continue;
+                    }
+                    blobopen = true;
+                }
+                /* clear the flag */
+                eol = false;
+            }
+
+            /* this blob append will go until end of buffer or end of line */
+            for ( ; cursor < limit; ++ cursor, ++tix)
+            {
+                /* if we hit a NewLine flag it and break for append */
+                if (*cursor == '\n')
+                {
+                    eol = true;
+                    ++cursor;
+                    ++tix;
+                    break;
+                }
+            }
+
+            /* if we are within the selected range append this to the open blob 
+             * ir might be the first append, a middle append, a last append or only append */
+            if (blobopen)
+            {
+                rc = KColumnBlobAppend (blob, append_start, cursor - append_start);
+                if (rc)
+                {
+                    PLOGERR (klogFatal, (klogFatal, rc, "Failed to append Blob for row $(R) at $(P)",
+                                         PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+
+                    break;
+                }
+            }
+            /* if we hit a NewLine and are within range we will close this blob */
+            if (eol)
+            {
+                if (blobopen)
+                {
+                    /* single row blobs */
+                    rc = KColumnBlobAssignRange (blob, rowid, 1);
+                    if (rc)
+                    {
+                        PLOGERR (klogFatal, (klogFatal, rc, "Failed to range assign blob for row $(R) at $(P)",
+                                             PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+                        break;
+                    }
+                    rc = KColumnBlobCommit (blob);
+                    if (rc)
+                    {
+                        PLOGERR (klogFatal, (klogFatal, rc, "Failed to commit blob for row $(R) at $(P)",
+                                             PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+                        break;
+                    }
+                    rc = KColumnBlobRelease (blob);
+                    if (rc)
+                    {
+                        PLOGERR (klogFatal, (klogFatal, rc, "Failed to release blob for row $(R) at $(P)",
+                                             PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+                        break;
+                    }
+                    blobopen = false;
+                }
+                ++rowid;
+                if ( ! rowid_upper_range (rowid))
+                    break;
+            }
+        }       
+    }
+    
+    /* if not in an error state and the last line was unterminated close the blob */
+    if ((rc == 0) && blobopen)
+    {
+        rc = KColumnBlobAssignRange (blob, rowid, 1);
+        if (rc)
+        {
+            PLOGERR (klogFatal, (klogFatal, rc, "Failed to range assign blob for row $(R) at $(P)",
+                                 PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+        }
+        else
+        {
+            rc = KColumnBlobCommit (blob);
+            if (rc)
+            {
+                PLOGERR (klogFatal, (klogFatal, rc, "Failed to commit blob for row $(R) at $(P)",
+                                     PLOG_2(PLOG_U64(R),PLOG_U64(P)), rowid, tix));
+            }
+        }
+        KColumnBlobRelease (blob);
+    }
+    return rc;
+}
+
+void CC ascii_to_u64_error_handler ( const char * arg, void * data )
+{
+    rc_t * prc = data;
+    rc_t rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcIncorrect);
+
+
+    PLOGERR (klogFatal, (klogFatal, rc, "numeric range option unparsable $(S)", PLOG_S(S), arg));
+    *prc = rc;
+}
+
+rc_t CC NextLogLevelCommon ( const char * level_parameter );
+
+rc_t CC KMain (int argc, char *argv [])
+{
+    Args * args;
+    rc_t   rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc == 0)
+    {
+        do 
+        {
+            uint32_t pcount;
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                break;
+
+            switch (pcount)
+            {
+            case 0:
+                MiniUsage (args);
+                rc = 1;
+                break;
+
+            case 1:
+                rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcNotFound);
+                LOGERR (klogFatal, rc, "Missing KColumn path");
+                MiniUsage (args);
+                break;
+
+            default:
+                rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcExcessive);
+                LOGERR (klogFatal, rc, "Too many parameters");
+                MiniUsage (args);
+                break;
+
+            case 2:
+                break;
+            }
+            if (rc)
+            {
+                if (rc == 1)
+                    rc = 0;
+                break;
+            }
+
+            rc = ArgsParamValue (args, 0, (const void **)&G.txtpath);
+            if (rc)
+                break;
+
+            rc = ArgsParamValue (args, 1, (const void **)&G.colpath);
+            if (rc)
+                break;
+
+            rc = ArgsOptionCount (args, OPTION_BEGIN, &pcount);
+            if (rc)
+                break;
+
+            if (pcount != 1)
+                G.begin_seen = false;
+            else
+            {
+                const char * pc;
+
+                rc = ArgsOptionValue (args, OPTION_BEGIN, 0, (const void **)&pc);
+                if (rc)
+                    break;
+
+                G.begin = AsciiToU64 ( pc, ascii_to_u64_error_handler, &rc );
+
+                if (rc)
+                    break;
+                G.begin_seen = true;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_END, &pcount);
+            if (rc)
+                break;
+
+            if (pcount != 1)
+                G.end_seen = false;
+            else
+            {
+                const char * pc;
+
+                rc = ArgsOptionValue (args, OPTION_END, 0, (const void **)&pc);
+                if (rc)
+                    break;
+
+                G.end = AsciiToU64 (pc, ascii_to_u64_error_handler, &rc);
+                if (rc)
+                    break;
+
+                G.end_seen = true;
+            }
+
+
+            if (G.begin_seen && G.end_seen && (G.end < G.begin))
+            {
+                rc = RC (rcExe, rcNoTarg, rcAccessing, rcParam, rcInvalid);
+                LOGERR (klogFatal, rc, "Conflicting options end before begin");
+                break;
+            }
+
+            rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+            if (rc)
+                break;
+
+            G.force = (pcount != 0);
+
+            rc = ArgsOptionCount (args, OPTION_APPEND, &pcount);
+            if (rc)
+                break;
+
+            G.append = (pcount != 0);
+
+            if (G.force && G.append)
+            {
+                rc = RC (rcExe, rcNoTarg, rcAccessing, rcParam, rcInvalid);
+                LOGERR (klogFatal, rc, "Conflicting options force and append");
+                break;
+            }
+
+            /* handle the KFS interface */
+            rc = txt2kdb_kfs();
+
+            if (rc == 0)
+                rc = txt2kdb_io();
+
+            txt2kdb_release();
+
+
+        } while (0);
+        ArgsWhack (args);
+    }
+
+    STSMSG (1, ("exit txt2kdb %R\n", rc));
+    return rc;
+}
+
+
+/* end of file */
diff --git a/tools/util/unix/PrintOS.c b/tools/util/unix/PrintOS.c
new file mode 100644
index 0000000..019ca9c
--- /dev/null
+++ b/tools/util/unix/PrintOS.c
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "test-sra-priv.h" /* PrintOS */
+
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/out.h> /* OUTMSG */
+
+#include <errno.h>
+#include <string.h> /* memset */
+#include <stdio.h> /* perror */
+
+#include <sys/utsname.h> /* uname */
+
+rc_t PrintOS(bool xml) {
+    int ret = 1;
+
+    struct utsname unameData;
+    memset(&unameData, 0, sizeof unameData);
+
+    errno = 0;
+    ret = uname(&unameData);
+    if (ret != 0) {
+        if (xml) {
+            OUTMSG(("  <Os>"));
+            perror("uname returned : ");
+            OUTMSG(("</Os>\n"));
+        }
+        else {
+            perror("uname returned : ");
+        }
+
+        return 0;
+    }
+    else {
+        const char *b = xml ? "  <Os>"  : "Operating system: '";
+        const char *e = xml ? "</Os>" :                   "'\n";
+
+        return OUTMSG(("%s%s %s %s %s %s%s\n", b,
+            unameData.sysname, unameData.nodename, unameData.release,
+            unameData.version, unameData.machine, e));
+    }
+}
diff --git a/tools/util/unix/syspass.c b/tools/util/unix/syspass.c
new file mode 100644
index 0000000..b464f39
--- /dev/null
+++ b/tools/util/unix/syspass.c
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#define __EXTENSIONS__ 1
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <string.h> /* strdup */
+
+#include <stdlib.h>
+#include <unistd.h> /* getpass */
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    if (bufsiz == 0)
+    {   return 0; }
+
+    buf[0] = '\0';
+
+    {
+        const char *p = getpass(prompt);
+
+        if (p == NULL) {
+            return RC(rcExe, rcString, rcReading, rcFunction, rcFailed);
+        }
+        else if ((strlen(p) + 1) > bufsiz) {
+            return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+        }
+
+        strcpy(buf, p);
+
+        return 0;
+    }
+}
diff --git a/tools/util/vdb-lock.c b/tools/util/vdb-lock.c
new file mode 100644
index 0000000..05aabd0
--- /dev/null
+++ b/tools/util/vdb-lock.c
@@ -0,0 +1,154 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <sra/srapath.h>
+#include <vdb/manager.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <assert.h>
+
+const char UsageDefaultName[] = "vdb-lock";
+
+rc_t CC UsageSummary ( const char *progname )
+{
+    return KOutMsg ( "\n"
+                     "Usage:\n"
+                     "  %s [Options] <target>\n"
+                     "\n"
+                     "Summary:\n"
+                     "  Lock a VDB database, table or column.\n"
+                     , progname
+        );
+}
+
+rc_t CC Usage ( const Args *args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion () );
+
+    return rc;
+}
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args *args;
+    rc_t rc = ArgsMakeAndHandle ( & args, argc, argv, 0 );
+    if ( rc != 0 )
+        LogErr ( klogErr, rc, "failed to parse arguments" );
+    else
+    {
+        uint32_t paramc;
+        rc = ArgsParamCount ( args, & paramc );
+        if ( rc != 0 )
+            LogErr ( klogInt, rc, "failed to obtain param count" );
+        else
+        {
+            if ( paramc == 0 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+                LogErr ( klogErr, rc, "missing target object" );
+                MiniUsage ( args );
+            }
+            else if ( paramc > 1 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcExcessive );
+                LogErr ( klogErr, rc, "expected single target object" );
+                MiniUsage ( args );
+            }
+            else
+            {
+                const char *target;
+                rc = ArgsParamValue ( args, 0, (const void **)& target );
+                if ( rc != 0 )
+                    LogErr ( klogInt, rc, "failed to obtain param value" );
+                else
+                {
+                    VDBManager *mgr;
+
+#if TOOLS_USE_SRAPATH != 0
+                    char full [ 4096 ];
+                    SRAPath *sra_path;
+                    rc = SRAPathMake ( & sra_path, NULL );
+                    if ( rc == 0 )
+                    {
+                        if ( ! SRAPathTest ( sra_path, target ) )
+                        {
+                            rc = SRAPathFind ( sra_path, target, full, sizeof full );
+                            if ( rc == 0 )
+                                target = full;
+                        }
+                        SRAPathRelease ( sra_path );
+                    }
+#endif
+
+                    rc = VDBManagerMakeUpdate ( & mgr, NULL );
+                    if ( rc != 0 )
+                        LogErr ( klogInt, rc, "failed to open VDB manager" );
+                    else
+                    {
+                        rc = VDBManagerLock ( mgr, "%s", target );
+                        if ( rc == 0 )
+                            pLogMsg ( klogInfo, "locked '$(target)'", "target=%s", target );
+                        else switch ( GetRCState ( rc ) )
+                        {
+                        case rcLocked:
+                            pLogMsg ( klogInfo, "'$(target)' was already locked", "target=%s", target );
+                            break;
+                        default:
+                            pLogErr ( klogErr, rc, "failed to lock '$(target)'", "target=%s", target );
+                        }
+
+                        VDBManagerRelease ( mgr );
+                    }
+                }
+            }
+        }
+
+        ArgsWhack ( args );
+    }
+
+    return rc;
+}
diff --git a/tools/util/vdb-passwd.c b/tools/util/vdb-passwd.c
new file mode 100644
index 0000000..c7ba944
--- /dev/null
+++ b/tools/util/vdb-passwd.c
@@ -0,0 +1,307 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <kapp/main.h> /* KMain */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+
+#include <string.h> /* strcmp */
+#include <assert.h>
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+#if 0
+/******************************************************************************/
+static
+rc_t SetPwd(const char *password, bool no_prompt)
+{
+    rc_t rc = 0;
+
+    VFSManager *mgr = NULL;
+
+    assert(password);
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&mgr);
+        DISP_RC(rc, "while calling VFSManagerMake");
+    }
+
+    if (rc == 0) {
+        char pwd_dir[PATH_MAX] = "";
+        rc = VFSManagerUpdateKryptoPassword
+            (mgr, password, strlen(password), pwd_dir, sizeof pwd_dir);
+        if (rc) {
+            if (no_prompt) {
+                LOGERR(klogInt, rc, "while updating the password");
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                            rcDirectory, rcExcessive))
+            {
+                OUTMSG((
+                    "\nSecurity warning:\n"
+                    "Directory \"%s\" has excessive access permissions.\n"
+                    "Run \"chmod 700 %s\" to repair\n"
+                    "or ask your system administrator for assistance.\n",
+                    pwd_dir, pwd_dir));
+                rc = 0;
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcSize, rcExcessive))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Password is too long.\n"
+                    "Maximum password size is %ld.\n",
+                    VFS_KRYPTO_PASSWORD_MAX_SIZE));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcEncryptionKey, rcInvalid))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Invalid character in password\n"
+                    "(CR/LF are not allowed)\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcExcessive))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Path to password file is too long.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcIncorrect))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Existing path to password is not a file.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcCorrupt))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Unknown file type for configured path/file name.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcWriting,
+                rcFile, rcInsufficient))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Incomplete writes to temporary password file.\n"
+                    "Cannot set the password.\n"));
+            }
+            else {
+                OUTMSG(("\nCannot set the password. Please consult\n"
+                 "configuration page at\n"
+                 "https://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=toolkit_doc&f=std or\n"
+                 "https://github.com/ncbi/sra-tools/wiki/Toolkit-Configuration\n"));
+            }
+        }
+    }
+
+    RELEASE(VFSManager, mgr);
+
+    return rc;
+}
+
+#define PWD_SZ 1024
+
+static
+rc_t run(bool quiet)
+{
+    rc_t rc = 0;
+
+    char password[PWD_SZ] = "";
+
+    bool empty = false;
+
+    KWrtHandler handler;
+    handler.writer = KOutWriterGet();
+    handler.data = KOutDataGet();
+
+    KOutHandlerSetStdErr();
+    KLogLibHandlerSet(NULL, NULL);
+
+    OUTMSG(("Changing password\n"));
+
+#if 1
+    if (rc == 0) {
+        int i = 0;
+        for (i = 0; i < 3 && rc == 0; ++i) {
+            rc = get_pass("New password:", password, sizeof password);
+            DISP_RC(rc, "cannot read the password");
+            if (rc != 0) {
+                break;
+            }
+            if (password[0] == '\0') {
+                OUTMSG(("BAD PASSWORD: too short\n"));
+            }
+            else {
+                break;
+            }
+        }
+        if (rc == 0 && password[0] == '\0') {
+            rc = RC(rcExe, rcString, rcReading, rcString, rcIncorrect);
+            empty = true;
+         /* LOGERR(klogErr, rc, "failed to set password"); */
+        }
+    }
+
+    if (rc == 0) {
+        char repassword[PWD_SZ] = "";
+        rc = get_pass("Retype new password:", repassword, sizeof repassword);
+        DISP_RC(rc, "cannot read the password");
+        if (rc == 0) {
+            if (strcmp(password, repassword)) {
+                OUTMSG(("Sorry, passwords do not match.\n"));
+                rc = RC(rcExe, rcString, rcReading, rcString, rcInconsistent);
+             /* LOGERR(klogErr, rc, "failed to set password"); */
+            }
+        }
+    }
+
+#else
+    strcpy(password, "1n2");
+#endif
+
+    if (rc == 0) {
+        rc = SetPwd(password, quiet);
+    }
+
+    KOutHandlerSet(handler.writer, handler.data);
+
+    if (empty)
+    {   rc = 0; }
+
+    return rc;
+}
+#endif
+#define SL_OPTION "noprompt"
+#define SL_ALIAS "n"
+static const char *SL_USAGE[]
+    = { "Do not suggest consulting configuration page at https://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=toolkit_doc&f=std or https://github.com/ncbi/sra-tools/wiki/Toolkit-Configuration", NULL };
+
+OptDef Options[] = { { SL_OPTION, SL_ALIAS, NULL, SL_USAGE, 1, false, false } };
+
+const char UsageDefaultName[] = "vdb-passwd";
+
+rc_t CC UsageSummary(const char *progname) {
+    KOutMsg("Update user's NCBI VDB crypto password\n"
+            "If not run with --quiet recommendations\n"
+            "are given if errors are detected.\n"
+            "\n");
+
+    return 0;
+}
+
+rc_t CC Usage(const Args *args) {
+    UsageSummary(UsageDefaultName);
+
+    KOutMsg("Options:\n");
+    HelpOptionsStandard ();
+
+    HelpVersion(UsageDefaultName, KAppVersion());
+
+    return 0;
+}
+
+#if 0
+rc_t CC KMain(int argc, char *argv[]) {
+    Args *args;
+    rc_t rc; /*, orc; */
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 0);
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        rc_t orc;
+
+        /* non standard use of --quiet */
+        rc = ArgsOptionCount(args, OPTION_QUIET, &pcount);
+        if (rc)
+            LOGERR(klogErr, rc, "error check " OPTION_QUIET " option");
+
+        else
+            rc = run (pcount != 0);
+
+        orc = ArgsWhack(args);
+        if (rc == 0)
+            rc = orc;
+    }
+
+    return rc;
+}
+#endif
+rc_t CC KMain(int argc, char *argv[]) {
+    OUTMSG((
+"WARNING: vdb-passwd IS OBSOLETE AND SHOULD NOT BE USED.\n"
+"\n"
+"\n"
+"To access dbGaP data you need:\n"
+"\n"
+"- Make sure you have the latest version of SRA Toolkit installed:\n"
+"https://github.com/ncbi/sra-tools/wiki/Downloads\n"
+"\n"
+"- Have permission to access controlled-access data for a dbGaP project;\n"
+"\n"
+"- Get dbGaP repository key (ngc file);\n"
+"\n"
+"- Import the dbGaP repository key to SRA Toolkit.\n"
+"  It will set up the project's workspace directory.\n"
+"\n"
+"- Change directory to the project's workspace.\n"
+"\n"
+"N.B. MAKE SURE YOU DO NOT HAVE A VDB_PWFILE ENVIRONMENT VARIABLE SET !!!\n"
+"\n"
+"Now you should be able to work with encrypted data.\n"
+"The SRA Toolkit will work with encrypted SRA data files,\n"
+"there is no need to decrypt the read data.\n"
+"\n"
+"The complete instructions are:\n"
+"https://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=toolkit_doc&f=dbgap_use\n"
+"\n"
+"Send questions/bug reports to sra-tools at ncbi.nlm.nih.gov\n"));
+    return RC(rcExe, rcProcess, rcExecuting, rcProcess, rcUnsupported);
+}
diff --git a/tools/util/vdb-unlock.c b/tools/util/vdb-unlock.c
new file mode 100644
index 0000000..7b3d336
--- /dev/null
+++ b/tools/util/vdb-unlock.c
@@ -0,0 +1,156 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <sra/srapath.h>
+#include <vdb/manager.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <assert.h>
+
+const char UsageDefaultName[] = "vdb-unlock";
+
+rc_t CC UsageSummary ( const char *progname )
+{
+    return KOutMsg ( "\n"
+                     "Usage:\n"
+                     "  %s [Options] <target>\n"
+                     "\n"
+                     "Summary:\n"
+                     "  Unlock a VDB database, table or column.\n"
+                     , progname
+        );
+}
+
+rc_t CC Usage ( const Args *args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args *args;
+    rc_t rc = ArgsMakeAndHandle ( & args, argc, argv, 0 );
+    if ( rc != 0 )
+        LogErr ( klogErr, rc, "failed to parse arguments" );
+    else
+    {
+        uint32_t paramc;
+        rc = ArgsParamCount ( args, & paramc );
+        if ( rc != 0 )
+            LogErr ( klogInt, rc, "failed to obtain param count" );
+        else
+        {
+            if ( paramc == 0 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+                LogErr ( klogErr, rc, "missing target object" );
+                MiniUsage ( args );
+            }
+            else if ( paramc > 1 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcExcessive );
+                LogErr ( klogErr, rc, "expected single target object" );
+                MiniUsage ( args );
+            }
+            else
+            {
+                const char *target;
+                rc = ArgsParamValue ( args, 0, (const void **)& target );
+                if ( rc != 0 )
+                    LogErr ( klogInt, rc, "failed to obtain param value" );
+                else
+                {
+                    VDBManager *mgr;
+
+#if TOOLS_USE_SRAPATH != 0
+                    char full [ 4096 ];
+                    SRAPath *sra_path;
+                    rc = SRAPathMake ( & sra_path, NULL );
+                    if ( rc == 0 )
+                    {
+                        if ( ! SRAPathTest ( sra_path, target ) )
+                        {
+                            rc = SRAPathFind ( sra_path, target, full, sizeof full );
+                            if ( rc == 0 )
+                                target = full;
+                        }
+                        SRAPathRelease ( sra_path );
+                    }
+#endif
+
+                    rc = VDBManagerMakeUpdate ( & mgr, NULL );
+                    if ( rc != 0 )
+                        LogErr ( klogInt, rc, "failed to open VDB manager" );
+                    else
+                    {
+                        rc = VDBManagerUnlock ( mgr, "%s", target );
+                        if ( rc == 0 )
+                            pLogMsg ( klogInfo, "unlocked '$(target)'", "target=%s", target );
+                        else switch ( GetRCState ( rc ) )
+                        {
+                        case rcUnlocked:
+                            pLogMsg ( klogInfo, "'$(target)' was already unlocked", "target=%s", target );
+                            break;
+                        default:
+                            pLogErr ( klogErr, rc, "failed to unlock '$(target)'", "target=%s", target );
+                        }
+
+                        VDBManagerRelease ( mgr );
+                    }
+                }
+            }
+        }
+
+        ArgsWhack ( args );
+    }
+
+    return rc;
+}
diff --git a/tools/util/win/PrintOS.c b/tools/util/win/PrintOS.c
new file mode 100644
index 0000000..ca1d402
--- /dev/null
+++ b/tools/util/win/PrintOS.c
@@ -0,0 +1,60 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "../test-sra-priv.h" /* PrintOS */
+
+#include <klib/out.h> /* OUTMSG */
+
+#include <windows.h>
+
+rc_t PrintOS(bool xml) {
+    const char *b = xml ? "  <Os>"  : "Operating system: '";
+    const char *e = xml ? "</Os>" :                   "'\n";
+
+    OSVERSIONINFO osvi;
+    ZeroMemory(&osvi, sizeof osvi);
+    osvi.dwOSVersionInfoSize = sizeof osvi;
+
+    if (GetVersionEx(&osvi)) {
+        if (osvi.dwPlatformId == 2) {
+            return OUTMSG((
+                "%sMicrosoft Windows. Version %d.%d (Build %d: %s)%s\n", b,
+                osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber,
+                osvi.szCSDVersion, e));
+        }
+        else {
+            return OUTMSG((
+         "%sMicrosoft Windows. Version %d.%d (Build %d: %s). PlatformId %d%s\n",
+              b,
+                osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber,
+                osvi.szCSDVersion, osvi.dwPlatformId, e));
+        }
+    }
+    else {
+        return OUTMSG(("%sGetLastError(GetVersionEx()) = %d%s\n",
+            b, GetLastError(), e));
+    }
+}
diff --git a/tools/util/win/syspass.c b/tools/util/win/syspass.c
new file mode 100644
index 0000000..b6d943b
--- /dev/null
+++ b/tools/util/win/syspass.c
@@ -0,0 +1,53 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "../syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <conio.h> /* _getch */
+#include <stdio.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    fprintf(stderr, "%s", prompt);
+
+    {
+        size_t i = 0;
+        for (i = 0; i < bufsiz; ++i) {
+            buf[i] = _getch();
+            if (buf[i] == '\r') {
+                fprintf(stderr, "\r\n");
+                buf[i] = '\0';
+                return 0;
+            }
+        }
+        return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+    }
+}
diff --git a/tools/vcf-loader/.gitignore b/tools/vcf-loader/.gitignore
new file mode 100644
index 0000000..ec76f86
--- /dev/null
+++ b/tools/vcf-loader/.gitignore
@@ -0,0 +1 @@
+vcf-grammar.output
diff --git a/tools/vcf-loader/Makefile b/tools/vcf-loader/Makefile
new file mode 100644
index 0000000..3e02c52
--- /dev/null
+++ b/tools/vcf-loader/Makefile
@@ -0,0 +1,128 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vcf-loader
+
+INT_LIBS = \
+	libvcfloader
+    
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+EXT_TOOLS = \
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) 
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# clean
+#
+INTERM_SRC = \
+	$(SRCDIR)/vcf-lex.c \
+	$(SRCDIR)/vcf-grammar.c \
+	$(SRCDIR)/vcf-grammar.h 
+
+clean: stdclean
+
+.PHONY: clean
+
+.PRECIOUS: $(INTERM_SRC)
+
+#-------------------------------------------------------------------------------
+# libvcfloader
+#
+$(ILIBDIR)/libvcfloader: $(ILIBDIR)/libvcfloader.$(LIBX)
+
+LIBVCF_SRC = \
+	vcf-grammar \
+	vcf-lex \
+    vcf-reader \
+    vcf-database
+    
+# flex/bison should only be invoked manually in an environment ensures the correct versions:
+# bison 2.5, flex 2.5.35
+bison:
+	bison -o $(SRCDIR)/vcf-grammar.c --defines=$(SRCDIR)/vcf-grammar.h -v --no-lines $(SRCDIR)/vcf-grammar.y    
+
+flex:    
+	flex -t $(SRCDIR)/vcf-lex.l | grep -v '^#line' > $(SRCDIR)/vcf-lex.c
+    
+$(SRCDIR)/vcf-grammar.c $(SRCDIR)/vcf-grammar.h: $(SRCDIR)/vcf-grammar.y
+
+LIBVCF_OBJ = \
+	$(addsuffix .$(LOBX),$(LIBVCF_SRC))
+
+LIBVCF_LIB = \
+
+$(ILIBDIR)/libvcfloader.$(SHLX): $(INTERM_SRC) $(LIBVCF_OBJ)
+	$(LD) --dlib -o $@ $^ $(LIBVCF_LIB)
+
+$(ILIBDIR)/libvcfloader.$(LIBX): $(INTERM_SRC) $(LIBVCF_OBJ)
+	$(LD) --slib -o $@ $^ $(LIBVCF_LIB)
+
diff --git a/tools/vcf-loader/vcf-database.c b/tools/vcf-loader/vcf-database.c
new file mode 100644
index 0000000..ac18c74
--- /dev/null
+++ b/tools/vcf-loader/vcf-database.c
@@ -0,0 +1,168 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "vcf-database.h"
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-reference.h>
+
+#include "vcf-reader.h"
+
+static rc_t SaveVariants        ( const VcfReader* reader, const char configPath[], VDatabase* db, VDBManager* dbMgr );
+static rc_t SaveVariantPhases   ( const VcfReader* reader, VDatabase* db, VDBManager* dbMgr );
+static rc_t SaveAlignments      ( const VcfReader* reader, VDatabase* db, VDBManager* dbMgr );
+
+rc_t VcfDatabaseSave ( const struct VcfReader* reader, const char configPath[], VDatabase* db )
+{
+    VDBManager* dbMgr;
+    rc_t rc = VDatabaseOpenManagerUpdate(db, &dbMgr);
+    if (rc == 0)
+    {
+        rc_t rc2;
+        
+        rc = SaveVariants(reader, configPath, db, dbMgr);
+        if (rc == 0)
+            rc = SaveVariantPhases(reader, db, dbMgr);
+        if (rc == 0)
+            rc = SaveAlignments(reader, db, dbMgr);
+            
+        rc2 = VDBManagerRelease(dbMgr);
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
+
+rc_t SaveVariants( const VcfReader* reader, const char configPath[], VDatabase* db, VDBManager* dbMgr )
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseCreateTable(db, &tbl, "VARIANT", kcmCreate | kcmMD5, "VARIANT");
+    if (rc == 0)
+    {
+        rc_t rc2;
+        VCursor *cur;
+        rc = VTableCreateCursorWrite( tbl, &cur, kcmInsert );
+        if (rc == 0)
+        {
+            uint32_t ref_id_idx, position_idx, length_idx, sequence_idx;
+            rc = VCursorAddColumn( cur, &ref_id_idx, "ref_id" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &position_idx, "position" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &length_idx, "length" );
+            if (rc == 0) rc = VCursorAddColumn( cur, &sequence_idx, "sequence" );
+
+            if (rc == 0)
+            {
+                rc = VCursorOpen( cur );
+                if (rc == 0)
+                {
+                    uint32_t count;
+                    rc_t rc = VcfReaderGetDataLineCount(reader, &count);
+                    if (rc == 0)
+                    {   
+                        const ReferenceMgr* refMgr;
+                        rc = ReferenceMgr_Make(&refMgr, db, dbMgr, 0, configPath, NULL, 0, 0, 0);
+                        if (rc == 0)
+                        {
+                            uint32_t i;
+                            for (i = 0; i < count; ++i)
+                            {
+                                const VcfDataLine* line;
+                                rc = VcfReaderGetDataLine(reader, i, &line);            
+
+                                if (rc == 0)
+                                {
+                                    const ReferenceSeq* seq;
+                                    #define MAX_CHROMOSOME_NAME_LENGTH 1024
+                                    char chromName[MAX_CHROMOSOME_NAME_LENGTH];
+                                    bool shouldUnmap = false;
+                                    bool wasRenamed = false;
+                                    string_copy(chromName, sizeof(chromName), line->chromosome.addr, line->chromosome.size);
+                                    rc = (ReferenceMgr_GetSeq(refMgr, &seq, chromName, &shouldUnmap, true, &wasRenamed));
+                                    if (rc == 0)
+                                    {
+                                        int64_t ref_id;
+                                        INSDC_coord_zero ref_start;
+                                        assert(shouldUnmap == false);
+                                        rc = ReferenceSeq_TranslateOffset_int(seq, line->position, &ref_id, &ref_start, NULL);
+                                        if (rc == 0)
+                                        {
+                                            rc = VCursorOpenRow( cur );
+                                        
+                                            if (rc == 0) 
+                                                rc = VCursorWrite( cur, ref_id_idx,    sizeof(ref_id) * 8, &ref_id, 0, 1);
+                                            if (rc == 0) 
+                                                rc = VCursorWrite( cur, position_idx,  sizeof(ref_start) * 8, &ref_start, 0, 1);
+                                            if (rc == 0) 
+                                                rc = VCursorWrite( cur, length_idx,    sizeof(line->altBases.len) * 8,   &line->altBases.len,   0, 1);
+                                            if (rc == 0) 
+                                                rc = VCursorWrite( cur, sequence_idx,  line->altBases.len * 8,    line->altBases.addr,    0, 1);
+                                        }
+                                        rc2 = ReferenceSeq_Release(seq);
+                                        if (rc == 0)
+                                            rc = rc2;
+                                    }    
+                                    if (rc == 0) rc = VCursorCommitRow( cur );
+                                    if (rc == 0) rc = VCursorCloseRow( cur );
+                                }
+                                if (rc != 0)
+                                    break;
+                            }
+                            rc2 = ReferenceMgr_Release(refMgr, rc == 0, NULL, false, NULL);
+                            if (rc == 0)
+                                rc = rc2;
+                        }
+                    }
+                    if (rc == 0)
+                        rc = VCursorCommit( cur );
+                }
+            }
+            rc2 = VCursorRelease(cur);
+            if (rc == 0)
+                rc = rc2;
+        }
+        
+        rc2 = VTableRelease(tbl);
+        if (rc == 0)
+            rc = rc2;
+    }
+            
+    return rc;
+}
+
+rc_t SaveVariantPhases( const VcfReader* reader, VDatabase* db, VDBManager* dbMgr )
+{
+    return 0;
+}
+
+rc_t SaveAlignments( const VcfReader* reader, VDatabase* db, VDBManager* dbMgr )
+{
+    return 0;
+}
+
diff --git a/tools/vcf-loader/vcf-database.h b/tools/vcf-loader/vcf-database.h
new file mode 100644
index 0000000..fb3bb4c
--- /dev/null
+++ b/tools/vcf-loader/vcf-database.h
@@ -0,0 +1,40 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_vcf_database_
+#define _h_vcf_database_
+
+#include <klib/rc.h>
+
+struct VcfReader;
+struct VDatabase;
+
+/*
+ * Save into a database
+ */
+extern rc_t VcfDatabaseSave ( const struct VcfReader* reader, const char configPath[], struct VDatabase* db );
+
+#endif /* _h_vcf_database_ */
diff --git a/tools/vcf-loader/vcf-grammar.c b/tools/vcf-loader/vcf-grammar.c
new file mode 100644
index 0000000..16f6e3a
--- /dev/null
+++ b/tools/vcf-loader/vcf-grammar.c
@@ -0,0 +1,1686 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 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 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, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse         VCF_parse
+#define yylex           VCF_lex
+#define yyerror         VCF_error
+#define yylval          VCF_lval
+#define yychar          VCF_char
+#define yydebug         VCF_debug
+#define yynerrs         VCF_nerrs
+
+
+/* Copy the first part of user declarations.  */
+
+  
+    #include "vcf-parse.h"
+
+    #define YYSTYPE VCFToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "vcf-grammar.h"
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     vcfENDOFTEXT = 0,
+     vcfMETAKEY_FORMAT = 258,
+     vcfMETAKEY = 259,
+     vcfMETAVALUE = 260,
+     vcfHEADERITEM = 261,
+     vcfDATAITEM = 262,
+     vcfENDLINE = 263
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  6
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   28
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  13
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  14
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  23
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  41
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   263
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    12,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      10,     9,    11,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     9,    11,    12,    17,    19,    20,    22,
+      25,    30,    31,    39,    41,    45,    49,    52,    54,    57,
+      59,    62,    65,    67
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      14,     0,    -1,    15,    16,    22,    24,     0,    -1,     1,
+      -1,    -1,     3,     9,     5,     8,    -1,    17,    -1,    -1,
+      18,    -1,    17,    18,    -1,     4,     9,     5,     8,    -1,
+      -1,     4,     9,    10,    19,    20,    11,     8,    -1,    21,
+      -1,    20,    12,    21,    -1,     4,     9,     5,    -1,    23,
+       8,    -1,     6,    -1,    23,     6,    -1,    25,    -1,    24,
+      25,    -1,    26,     8,    -1,     7,    -1,    26,     7,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    54,    54,    61,    63,    67,    71,    72,    76,    77,
+      81,    82,    82,    86,    87,    91,    95,    99,   100,   104,
+     105,   109,   113,   114
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "vcfENDOFTEXT", "error", "$undefined", "vcfMETAKEY_FORMAT",
+  "vcfMETAKEY", "vcfMETAVALUE", "vcfHEADERITEM", "vcfDATAITEM",
+  "vcfENDLINE", "'='", "'<'", "'>'", "','", "$accept", "vcfFile",
+  "fileFormatLine", "metaLinesOpt", "metaLines", "metaLine", "$@1",
+  "keyValuePairs", "keyValue", "headerLine", "headerItems", "dataLines",
+  "dataLine", "dataItems", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,    61,
+      60,    62,    44
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    13,    14,    14,    14,    15,    16,    16,    17,    17,
+      18,    19,    18,    20,    20,    21,    22,    23,    23,    24,
+      24,    25,    26,    26
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     5,     1,     0,     4,     1,     0,     1,     2,
+       4,     0,     7,     1,     3,     3,     2,     1,     2,     1,
+       2,     2,     1,     2
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     3,     0,     0,     7,     0,     1,     0,     0,     6,
+       8,     0,     0,    17,     0,     0,     9,     5,     0,    11,
+      22,     0,    19,     0,    18,    16,    10,     0,     2,    20,
+      23,    21,     0,     0,    13,     0,     0,     0,    15,    12,
+      14
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     3,     4,     8,     9,    10,    27,    33,    34,    14,
+      15,    21,    22,    23
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -14
+static const yytype_int8 yypact[] =
+{
+       2,   -14,    -5,     8,     6,     9,   -14,    10,    11,     6,
+     -14,    12,    -4,   -14,    14,     3,   -14,   -14,    15,   -14,
+     -14,     0,   -14,     5,   -14,   -14,   -14,    18,   -14,   -14,
+     -14,   -14,    16,     4,   -14,    13,    19,    18,   -14,   -14,
+     -14
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -14,   -14,   -14,   -14,   -14,    17,   -14,   -14,   -13,   -14,
+     -14,   -14,     7,   -14
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -5
+static const yytype_int8 yytable[] =
+{
+      28,    18,    -4,     1,     5,     2,    19,    20,     6,    24,
+       7,    25,    30,    31,    11,    36,    37,    13,    38,    12,
+      17,    20,    32,    26,    40,    35,    16,    39,    29
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-14))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_uint8 yycheck[] =
+{
+       0,     5,     0,     1,     9,     3,    10,     7,     0,     6,
+       4,     8,     7,     8,     5,    11,    12,     6,     5,     9,
+       8,     7,     4,     8,    37,     9,     9,     8,    21
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     1,     3,    14,    15,     9,     0,     4,    16,    17,
+      18,     5,     9,     6,    22,    23,    18,     8,     5,    10,
+       7,    24,    25,    26,     6,     8,     8,    19,     0,    25,
+       7,     8,     4,    20,    21,     9,    11,    12,     5,     8,
+      21
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (pb, YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, pb)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value, pb); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, VCFParseBlock* pb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    VCFParseBlock* pb;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (pb);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, VCFParseBlock* pb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    VCFParseBlock* pb;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, VCFParseBlock* pb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    VCFParseBlock* pb;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       , pb);
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule, pb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, VCFParseBlock* pb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    VCFParseBlock* pb;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (pb);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (VCFParseBlock* pb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (VCFParseBlock* pb)
+#else
+int
+yyparse (pb)
+    VCFParseBlock* pb;
+#endif
+#endif
+{
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yypact_value_is_default (yyn))
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+    { return 1; }
+    break;
+
+  case 3:
+
+    { return 0; }
+    break;
+
+  case 4:
+
+    { yyerror(pb, "no input found"); return 0; }
+    break;
+
+  case 5:
+
+    { pb->metaLine(pb, & (yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)])); }
+    break;
+
+  case 10:
+
+    { pb->metaLine(pb, & (yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)])); }
+    break;
+
+  case 11:
+
+    { pb->openMetaLine(pb, &(yyvsp[(1) - (3)])); }
+    break;
+
+  case 12:
+
+    { pb->closeMetaLine(pb); }
+    break;
+
+  case 15:
+
+    { pb->keyValue(pb, & (yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 17:
+
+    { pb->headerItem(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 18:
+
+    { pb->headerItem(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+  case 21:
+
+    { pb->closeDataLine(pb); }
+    break;
+
+  case 22:
+
+    { pb->openDataLine(pb); pb->dataItem(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 23:
+
+    { pb->dataItem(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+
+
+      default: break;
+    }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (pb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
+      {
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (pb, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
+      }
+# undef YYSYNTAX_ERROR
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval, pb);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (!yypact_value_is_default (yyn))
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp, pb);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (pb, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, pb);
+    }
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp, pb);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+
+
+void VCF_error(struct VCFParseBlock* pb, const char* msg)
+{
+    if (pb && pb->error)
+        pb->error(pb, msg);
+}
+
diff --git a/tools/vcf-loader/vcf-grammar.h b/tools/vcf-loader/vcf-grammar.h
new file mode 100644
index 0000000..f64e939
--- /dev/null
+++ b/tools/vcf-loader/vcf-grammar.h
@@ -0,0 +1,61 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 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 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, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     vcfENDOFTEXT = 0,
+     vcfMETAKEY_FORMAT = 258,
+     vcfMETAKEY = 259,
+     vcfMETAVALUE = 260,
+     vcfHEADERITEM = 261,
+     vcfDATAITEM = 262,
+     vcfENDLINE = 263
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/tools/vcf-loader/vcf-grammar.y b/tools/vcf-loader/vcf-grammar.y
new file mode 100644
index 0000000..03d20b6
--- /dev/null
+++ b/tools/vcf-loader/vcf-grammar.y
@@ -0,0 +1,123 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{  
+    #include "vcf-parse.h"
+
+    #define YYSTYPE VCFToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "vcf-grammar.h"
+%}
+
+%pure-parser
+%parse-param {VCFParseBlock* pb }
+%lex-param {VCFParseBlock* pb }
+%error-verbose 
+%name-prefix="VCF_"
+
+%token vcfMETAKEY_FORMAT
+%token vcfMETAKEY
+%token vcfMETAVALUE
+%token vcfHEADERITEM
+%token vcfDATAITEM
+%token vcfENDLINE
+%token vcfENDOFTEXT 0
+
+%%
+
+vcfFile: 
+        fileFormatLine
+        metaLinesOpt           
+        headerLine
+        dataLines
+        vcfENDOFTEXT
+            { return 1; }  
+    |
+        error { return 0; } 
+    |
+        { yyerror(pb, "no input found"); return 0; }
+    ;
+
+fileFormatLine:
+        vcfMETAKEY_FORMAT '=' vcfMETAVALUE vcfENDLINE   { pb->metaLine(pb, & $1, &$3); }
+    ;
+    
+metaLinesOpt:
+    metaLines
+    |
+    ;
+
+metaLines:
+        metaLine
+    |   metaLines metaLine
+    ;
+    
+metaLine:
+        vcfMETAKEY '=' vcfMETAVALUE vcfENDLINE         { pb->metaLine(pb, & $1, &$3); }                          
+    |   vcfMETAKEY '=' '<' { pb->openMetaLine(pb, &$1); } keyValuePairs '>' vcfENDLINE { pb->closeMetaLine(pb); }         
+    ;
+
+keyValuePairs:
+        keyValue
+    |   keyValuePairs ',' keyValue
+    ;    
+    
+keyValue:
+    vcfMETAKEY '=' vcfMETAVALUE { pb->keyValue(pb, & $1, &$3); }                          
+    ;
+    
+headerLine:    
+    headerItems vcfENDLINE 
+    ;
+
+headerItems:    
+        vcfHEADERITEM               { pb->headerItem(pb, & $1); }  
+    |   headerItems vcfHEADERITEM   { pb->headerItem(pb, & $2); }  
+    ;    
+
+dataLines:
+        dataLine
+    |   dataLines dataLine  
+    ;
+    
+dataLine:
+    dataItems vcfENDLINE        { pb->closeDataLine(pb); }    
+    ;
+    
+dataItems:    
+        vcfDATAITEM             { pb->openDataLine(pb); pb->dataItem(pb, & $1); }  
+    |   dataItems vcfDATAITEM   { pb->dataItem(pb, & $2); }  
+    ;
+    
+%%
+
+void VCF_error(struct VCFParseBlock* pb, const char* msg)
+{
+    if (pb && pb->error)
+        pb->error(pb, msg);
+}
diff --git a/tools/vcf-loader/vcf-lex.c b/tools/vcf-loader/vcf-lex.c
new file mode 100644
index 0000000..356a517
--- /dev/null
+++ b/tools/vcf-loader/vcf-lex.c
@@ -0,0 +1,2528 @@
+
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* %if-c++-only */
+/* %endif */
+
+/* %if-c-only */
+    
+/* %endif */
+
+/* %if-c-only */
+
+/* %endif */
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+/* %if-c-only */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* %endif */
+
+/* %if-tables-serialization */
+/* %endif */
+/* end standard C headers. */
+
+/* %if-c-or-c++ */
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* %not-for-header */
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+/* %ok-for-header */
+
+/* %if-reentrant */
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* %endif */
+
+/* %if-not-reentrant */
+/* %endif */
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE VCF_restart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+/* %if-not-reentrant */
+/* %endif */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+/* %endif */
+/* %endif */
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE VCF_lex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < yyleng; ++yyl )\
+                    if ( yytext[yyl] == '\n' )\
+                        --yylineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = yyg->yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+/* %if-c-only */
+	FILE *yy_input_file;
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via VCF_restart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+/* %if-not-reentrant */
+/* %endif */
+/* %ok-for-header */
+
+/* %endif */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+/* %if-c-only Standard (non-C++) definition */
+
+/* %if-not-reentrant */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+void VCF_restart (FILE *input_file ,yyscan_t yyscanner );
+void VCF__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE VCF__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void VCF__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void VCF__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void VCF_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void VCF_pop_buffer_state (yyscan_t yyscanner );
+
+static void VCF_ensure_buffer_stack (yyscan_t yyscanner );
+static void VCF__load_buffer_state (yyscan_t yyscanner );
+static void VCF__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER VCF__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE VCF__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE VCF__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE VCF__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+/* %endif */
+
+void *VCF_alloc (yy_size_t ,yyscan_t yyscanner );
+void *VCF_realloc (void *,yy_size_t ,yyscan_t yyscanner );
+void VCF_free (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer VCF__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        VCF_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            VCF__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        VCF_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            VCF__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* Begin user sect3 */
+
+#define VCF_wrap(n) 1
+#define YY_SKIP_YYWRAP
+
+#define FLEX_DEBUG
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+/* %if-c-only Standard (non-C++) definition */
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* %endif */
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yyg->yytext_ptr = yy_bp; \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (int) ((size_t) (yy_cp - yy_bp)); \
+	yyg->yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+	yyg->yy_c_buf_p = yy_cp;
+
+/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
+#define YY_NUM_RULES 17
+#define YY_END_OF_BUFFER 18
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[57] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   18,   15,   11,   12,   15,    3,    3,    3,
+        3,    2,   15,    4,   15,   15,    8,    8,   10,   10,
+       10,   14,   13,    3,    3,    1,   16,    4,    0,    6,
+        0,    8,   10,   10,    9,    7,    0,    0,    0,    0,
+        0,    0,    0,    0,    5,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    5,    1,    1,    1,    1,    1,
+        1,    1,    1,    6,    7,    1,    1,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    1,    1,    8,
+        9,    6,    1,    1,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        1,    1,    1,    1,    7,    1,   10,    7,    7,    7,
+
+       11,   12,    7,    7,   13,    7,    7,   14,   15,    7,
+       16,    7,    7,   17,    7,   18,    7,    7,    7,    7,
+        7,    7,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[19] =
+    {   0,
+        1,    2,    3,    3,    1,    4,    5,    4,    6,    5,
+        5,    5,    5,    5,    5,    5,    5,    5
+    } ;
+
+static yyconst flex_int16_t yy_base[71] =
+    {   0,
+        0,    3,    7,   10,   13,   16,   20,    0,   37,   45,
+       54,    0,  148,  177,  177,  177,  134,    0,    0,    0,
+       71,  131,    0,    0,   88,   67,    0,    0,    0,    0,
+       80,  177,  177,    0,    0,  177,    0,    0,   87,   87,
+       36,    0,    0,   89,  177,  177,   33,   74,   68,   34,
+       78,   43,   70,   83,   70,  177,   98,  104,  110,  116,
+      122,  128,  134,  140,  146,  152,  154,  160,  165,  170
+    } ;
+
+static yyconst flex_int16_t yy_def[71] =
+    {   0,
+       57,   58,   59,   59,   60,   60,   56,    7,   61,   61,
+       56,   11,   56,   56,   56,   56,   62,   63,   63,   63,
+       64,   56,   65,   66,   67,   67,   68,   68,   69,   69,
+       70,   56,   56,   63,   63,   56,   65,   66,   67,   56,
+       67,   68,   69,   70,   56,   56,   67,   67,   67,   67,
+       67,   67,   67,   67,   56,    0,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56
+    } ;
+
+static yyconst flex_int16_t yy_nxt[196] =
+    {   0,
+       56,   15,   16,   17,   19,   20,   21,   22,   15,   16,
+       17,   15,   16,   17,   15,   16,   17,   15,   16,   17,
+       14,   15,   16,   17,   14,   14,   25,   14,   14,   25,
+       25,   26,   25,   25,   25,   25,   25,   25,   28,   16,
+       17,   40,   40,   48,   40,   14,   28,   16,   17,   47,
+       51,   40,   53,   14,   29,   30,   16,   17,   29,   14,
+       31,   14,   14,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   32,   33,   32,   40,   40,   46,   40,   41,
+       43,   43,   40,   50,   43,   49,   40,   54,   45,   43,
+       43,   55,   52,   43,   46,   40,   40,   45,   14,   14,
+
+       14,   14,   14,   14,   18,   18,   18,   18,   18,   18,
+       23,   23,   23,   23,   23,   23,   24,   24,   24,   24,
+       24,   24,   27,   27,   27,   27,   27,   27,   32,   32,
+       32,   32,   32,   32,   34,   36,   33,   34,   34,   34,
+       35,   35,   35,   35,   35,   35,   37,   56,   56,   37,
+       37,   37,   38,   56,   56,   38,   38,   38,   39,   39,
+       42,   42,   56,   42,   42,   43,   43,   56,   56,   43,
+       44,   44,   56,   56,   44,   44,   13,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56
+
+    } ;
+
+static yyconst flex_int16_t yy_chk[196] =
+    {   0,
+        0,    1,    1,    1,    2,    2,    2,    2,    3,    3,
+        3,    4,    4,    4,    5,    5,    5,    6,    6,    6,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    9,    9,
+        9,   47,   50,   47,   41,    9,   10,   10,   10,   41,
+       50,   52,   52,   10,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   21,   21,   21,   26,   49,   55,   53,   26,
+       31,   31,   48,   49,   31,   48,   51,   53,   31,   44,
+       44,   54,   51,   44,   40,   39,   25,   44,   57,   57,
+
+       57,   57,   57,   57,   58,   58,   58,   58,   58,   58,
+       59,   59,   59,   59,   59,   59,   60,   60,   60,   60,
+       60,   60,   61,   61,   61,   61,   61,   61,   62,   62,
+       62,   62,   62,   62,   63,   22,   17,   63,   63,   63,
+       64,   64,   64,   64,   64,   64,   65,   13,    0,   65,
+       65,   65,   66,    0,    0,   66,   66,   66,   67,   67,
+       68,   68,    0,   68,   68,   69,   69,    0,    0,   69,
+       70,   70,    0,    0,   70,   70,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56
+
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[18] =
+    {   0,
+0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,     };
+
+static yyconst flex_int16_t yy_rule_linenum[17] =
+    {   0,
+       73,   74,   76,   78,   80,   81,   82,   86,   90,   91,
+       96,   97,   98,   99,  100,  103
+    } ;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+	#include "vcf-parse.h"
+	#include "vcf-grammar.h"    
+
+    #define YYSTYPE VCFToken
+
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText     = yytext; \
+        yylval -> tokenStart    = yyextra->offset; \
+        yylval -> tokenLength	= yyleng;	\
+        yylval -> line_no		= yylineno;	\
+        yylval -> column_no		= yyextra -> column; \
+        yyextra -> lastToken = yylval; \
+        yyextra -> offset += yyleng; \
+        yyextra -> column += yyleng; 
+
+    #define ENDLINE \
+        yyextra -> column=1; \
+        return vcfENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = (int) yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    #define YY_NO_INPUT
+#define YY_NO_UNISTD_H 1
+
+
+
+
+
+
+#define INITIAL 0
+#define HEADER 1
+#define DATA 2
+#define META 3
+#define META_SIMPLE 4
+#define META_COMPOSITE 5
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+/* %if-c-only */
+#include <unistd.h>
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+#define YY_EXTRA_TYPE VCFParseBlock*
+
+/* %if-c-only Reentrant structure and macros (non-C++). */
+/* %if-reentrant */
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+    {
+
+    /* User-defined. Not touched by flex. */
+    YY_EXTRA_TYPE yyextra_r;
+
+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
+    FILE *yyin_r, *yyout_r;
+    size_t yy_buffer_stack_top; /**< index of top of stack. */
+    size_t yy_buffer_stack_max; /**< capacity of stack. */
+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+    char yy_hold_char;
+    int yy_n_chars;
+    int yyleng_r;
+    char *yy_c_buf_p;
+    int yy_init;
+    int yy_start;
+    int yy_did_buffer_switch_on_eof;
+    int yy_start_stack_ptr;
+    int yy_start_stack_depth;
+    int *yy_start_stack;
+    yy_state_type yy_last_accepting_state;
+    char* yy_last_accepting_cpos;
+
+    int yylineno_r;
+    int yy_flex_debug_r;
+
+    char *yytext_r;
+    int yy_more_flag;
+    int yy_more_len;
+
+    YYSTYPE * yylval_r;
+
+    }; /* end struct yyguts_t */
+
+/* %if-c-only */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+/* %endif */
+
+/* %if-reentrant */
+
+    /* This must go here because YYSTYPE and YYLTYPE are included
+     * from bison output in section 1.*/
+    #    define yylval yyg->yylval_r
+    
+int VCF_lex_init (yyscan_t* scanner);
+
+int VCF_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* %endif */
+
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int VCF_lex_destroy (yyscan_t yyscanner );
+
+int VCF_get_debug (yyscan_t yyscanner );
+
+void VCF_set_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE VCF_get_extra (yyscan_t yyscanner );
+
+void VCF_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *VCF_get_in (yyscan_t yyscanner );
+
+void VCF_set_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *VCF_get_out (yyscan_t yyscanner );
+
+void VCF_set_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int VCF_get_leng (yyscan_t yyscanner );
+
+char *VCF_get_text (yyscan_t yyscanner );
+
+int VCF_get_lineno (yyscan_t yyscanner );
+
+void VCF_set_lineno (int line_number ,yyscan_t yyscanner );
+
+/* %if-bison-bridge */
+
+YYSTYPE * VCF_get_lval (yyscan_t yyscanner );
+
+void VCF_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* %endif */
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int VCF_wrap (yyscan_t yyscanner );
+#else
+extern int VCF_wrap (yyscan_t yyscanner );
+#endif
+#endif
+
+/* %not-for-header */
+
+    static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
+    
+/* %ok-for-header */
+
+/* %endif */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+/* %ok-for-header */
+
+/* %endif */
+#endif
+
+/* %if-c-only */
+
+/* %endif */
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* %if-c-only Standard (non-C++) definition */
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		int n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+/* %if-c++-only C++ definition \ */\
+/* %endif */
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+/* %if-c-only */
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+/* %if-tables-serialization structures and prototypes */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* %tables-yydmap generated elements */
+/* %endif */
+/* end tables serialization structures and prototypes */
+
+/* %ok-for-header */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+/* %if-c-only Standard (non-C++) definition */
+
+extern int VCF_lex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int VCF_lex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+/* %% [6.0] YY_RULE_SETUP definition goes here */
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+/* %not-for-header */
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+/* %% [7.0] user's declarations go here */
+
+
+
+    yylval = yylval_param;
+
+	if ( !yyg->yy_init )
+		{
+		yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yyg->yy_start )
+			yyg->yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+/* %if-c-only */
+			yyin = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! yyout )
+/* %if-c-only */
+			yyout = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			VCF_ensure_buffer_stack (yyscanner);
+			YY_CURRENT_BUFFER_LVALUE =
+				VCF__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+		}
+
+		VCF__load_buffer_state(yyscanner );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+/* %% [8.0] yymore()-related code goes here */
+		yy_cp = yyg->yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yyg->yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+/* %% [9.0] code to set up and find next match goes here */
+		yy_current_state = yyg->yy_start;
+		yy_current_state += YY_AT_BOL();
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				yyg->yy_last_accepting_state = yy_current_state;
+				yyg->yy_last_accepting_cpos = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 57 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_current_state != 56 );
+		yy_cp = yyg->yy_last_accepting_cpos;
+		yy_current_state = yyg->yy_last_accepting_state;
+
+yy_find_action:
+/* %% [10.0] code to find the action number goes here */
+		yy_act = yy_accept[yy_current_state];
+
+		YY_DO_BEFORE_ACTION;
+
+/* %% [11.0] code for yylineno update goes here */
+
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+/* %% [12.0] debug code goes here */
+		if ( yy_flex_debug )
+			{
+			if ( yy_act == 0 )
+				fprintf( stderr, "--scanner backing up\n" );
+			else if ( yy_act < 17 )
+				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 17 )
+				fprintf( stderr, "--accepting default rule (\"%s\")\n",
+				         yytext );
+			else if ( yy_act == 18 )
+				fprintf( stderr, "--(end of buffer or a NUL)\n" );
+			else
+				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
+			}
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+/* %% [13.0] actions go here */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = yyg->yy_hold_char;
+			yy_cp = yyg->yy_last_accepting_cpos;
+			yy_current_state = yyg->yy_last_accepting_state;
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ BEGIN META; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ BEGIN HEADER; }
+	YY_BREAK
+case 3:
+/* rule 3 can match eol */
+YY_RULE_SETUP
+{ BEGIN DATA; return vcfDATAITEM; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{ return vcfDATAITEM; }
+	YY_BREAK
+case 5:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp = yy_bp + 10;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN META_SIMPLE; return vcfMETAKEY_FORMAT; }
+	YY_BREAK
+case 6:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN META_SIMPLE; return vcfMETAKEY; }
+	YY_BREAK
+case 7:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN META_COMPOSITE; return vcfMETAKEY; }
+	YY_BREAK
+
+
+case 8:
+YY_RULE_SETUP
+{ return vcfMETAVALUE; }
+	YY_BREAK
+
+
+
+case 9:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ return vcfMETAKEY; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+{ return vcfMETAVALUE; }
+	YY_BREAK
+
+
+
+case 11:
+YY_RULE_SETUP
+
+	YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 14:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+case 16:
+YY_RULE_SETUP
+{ return vcfHEADERITEM; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(HEADER):
+case YY_STATE_EOF(DATA):
+case YY_STATE_EOF(META):
+case YY_STATE_EOF(META_SIMPLE):
+case YY_STATE_EOF(META_COMPOSITE):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yyg->yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * VCF_lex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state( yyscanner );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yyg->yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
+				yy_cp = yyg->yy_last_accepting_cpos;
+				yy_current_state = yyg->yy_last_accepting_state;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer( yyscanner ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yyg->yy_did_buffer_switch_on_eof = 0;
+
+				if ( VCF_wrap(yyscanner ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yyg->yy_c_buf_p =
+					yyg->yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yyg->yy_c_buf_p =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of VCF_lex */
+/* %ok-for-header */
+
+/* %if-c++-only */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+/* %if-c-only */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = yyg->yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+	else
+		{
+			int num_to_read =
+			   (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = (int) b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					VCF_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			yyg->yy_n_chars, (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	if ( yyg->yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			VCF_restart(yyin  ,yyscanner);
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) VCF_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	yyg->yy_n_chars += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+/* %if-c-only */
+/* %not-for-header */
+
+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+/* %% [15.0] code to get the start state into yy_current_state goes here */
+	yy_current_state = yyg->yy_start;
+	yy_current_state += YY_AT_BOL();
+
+	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+		{
+/* %% [16.0] code to find the next state goes here */
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			yyg->yy_last_accepting_state = yy_current_state;
+			yyg->yy_last_accepting_cpos = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 57 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+/* %if-c-only */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register int yy_is_jam;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+/* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
+	register char *yy_cp = yyg->yy_c_buf_p;
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		yyg->yy_last_accepting_state = yy_current_state;
+		yyg->yy_last_accepting_cpos = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 57 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 56);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+/* %if-c-only */
+
+    static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yy_cp = yyg->yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yyg->yy_hold_char;
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yyg->yy_n_chars + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+/* %% [18.0] update yylineno here */
+
+    if ( c == '\n' ){
+        --yylineno;
+    }
+
+	yyg->yytext_ptr = yy_bp;
+	yyg->yy_hold_char = *yy_cp;
+	yyg->yy_c_buf_p = yy_cp;
+}
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c-only */
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (yyscan_t yyscanner)
+#else
+    static int input  (yyscan_t yyscanner)
+#endif
+
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	int c;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	*yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			/* This was really a NUL. */
+			*yyg->yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			++yyg->yy_c_buf_p;
+
+			switch ( yy_get_next_buffer( yyscanner ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					VCF_restart(yyin ,yyscanner);
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( VCF_wrap(yyscanner ) )
+						return EOF;
+
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput(yyscanner);
+#else
+					return input(yyscanner);
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
+	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
+	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+/* %% [19.0] update BOL and yylineno */
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+		   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+
+	return c;
+}
+/* %if-c-only */
+#endif	/* ifndef YY_NO_INPUT */
+/* %endif */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+/* %if-c-only */
+    void VCF_restart  (FILE * input_file , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! YY_CURRENT_BUFFER ){
+        VCF_ensure_buffer_stack (yyscanner);
+		YY_CURRENT_BUFFER_LVALUE =
+            VCF__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+	}
+
+	VCF__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+	VCF__load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void VCF__switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		VCF_pop_buffer_state();
+	 *		VCF_push_buffer_state(new_buffer);
+     */
+	VCF_ensure_buffer_stack (yyscanner);
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	VCF__load_buffer_state(yyscanner );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (VCF_wrap()) processing, but the only time this flag
+	 * is looked at is after VCF_wrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/* %if-c-only */
+static void VCF__load_buffer_state  (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+/* %if-c-only */
+    YY_BUFFER_STATE VCF__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) VCF_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in VCF__create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) VCF_alloc(b->yy_buf_size + 2 ,yyscanner );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in VCF__create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	VCF__init_buffer(b,file ,yyscanner);
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with VCF__create_buffer()
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void VCF__delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		VCF_free((void *) b->yy_ch_buf ,yyscanner );
+
+	VCF_free((void *) b ,yyscanner );
+}
+
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a VCF_restart() or at EOF.
+ */
+/* %if-c-only */
+    static void VCF__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+{
+	int oerrno = errno;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	VCF__flush_buffer(b ,yyscanner);
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then VCF__init_buffer was _probably_
+     * called from VCF_restart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+/* %if-c-only */
+
+        b->yy_is_interactive = 0;
+    
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+    void VCF__flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		VCF__load_buffer_state(yyscanner );
+}
+
+/* %if-c-or-c++ */
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+void VCF_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (new_buffer == NULL)
+		return;
+
+	VCF_ensure_buffer_stack(yyscanner);
+
+	/* This block is copied from VCF__switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		yyg->yy_buffer_stack_top++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from VCF__switch_to_buffer. */
+	VCF__load_buffer_state(yyscanner );
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  @param yyscanner The scanner object.
+ */
+/* %if-c-only */
+void VCF_pop_buffer_state (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (!YY_CURRENT_BUFFER)
+		return;
+
+	VCF__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if (yyg->yy_buffer_stack_top > 0)
+		--yyg->yy_buffer_stack_top;
+
+	if (YY_CURRENT_BUFFER) {
+		VCF__load_buffer_state(yyscanner );
+		yyg->yy_did_buffer_switch_on_eof = 1;
+	}
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+/* %if-c-only */
+static void VCF_ensure_buffer_stack (yyscan_t yyscanner)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	size_t num_to_alloc;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if (!yyg->yy_buffer_stack) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)VCF_alloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in VCF_ensure_buffer_stack()" );
+								  
+		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		yyg->yy_buffer_stack_max = num_to_alloc;
+		yyg->yy_buffer_stack_top = 0;
+		return;
+	}
+
+	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)VCF_realloc
+								(yyg->yy_buffer_stack,
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in VCF_ensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+		yyg->yy_buffer_stack_max = num_to_alloc;
+	}
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE VCF__scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) VCF_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in VCF__scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = (int) b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	VCF__switch_to_buffer(b ,yyscanner );
+
+	return b;
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan a string. The next call to VCF_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       VCF__scan_bytes() instead.
+ */
+YY_BUFFER_STATE VCF__scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+    
+	return VCF__scan_bytes(yystr, (int)strlen(yystr), yyscanner);
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan the given bytes. The next call to VCF_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE VCF__scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) VCF_alloc(n ,yyscanner );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in VCF__scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = VCF__scan_buffer(buf,n ,yyscanner);
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in VCF__scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+/* %endif */
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+/* %if-c-only */
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = yyg->yy_hold_char; \
+		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+		*yyg->yy_c_buf_p = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/* %if-c-only */
+/* %if-reentrant */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE VCF_get_extra  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyextra;
+}
+
+/* %endif */
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int VCF_get_lineno  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int VCF_get_column  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *VCF_get_in  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *VCF_get_out  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int VCF_get_leng  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *VCF_get_text  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yytext;
+}
+
+/* %if-reentrant */
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void VCF_set_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyextra = user_defined ;
+}
+
+/* %endif */
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void VCF_set_lineno (int  line_number , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* lineno is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "VCF_set_lineno called with no buffer" , yyscanner); 
+    
+    yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void VCF_set_column (int  column_no , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* column is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "VCF_set_column called with no buffer" , yyscanner); 
+    
+    yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see VCF__switch_to_buffer
+ */
+void VCF_set_in (FILE *  in_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyin = in_str ;
+}
+
+void VCF_set_out (FILE *  out_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyout = out_str ;
+}
+
+int VCF_get_debug  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yy_flex_debug;
+}
+
+void VCF_set_debug (int  bdebug , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yy_flex_debug = bdebug ;
+}
+
+/* %endif */
+
+/* %if-reentrant */
+/* Accessor methods for yylval and yylloc */
+
+/* %if-bison-bridge */
+
+YYSTYPE * VCF_get_lval  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yylval;
+}
+
+void VCF_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yylval = yylval_param;
+}
+
+/* %endif */
+
+/* User-visible API */
+
+/* VCF_lex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int VCF_lex_init(yyscan_t* ptr_yy_globals)
+
+{
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+
+    *ptr_yy_globals = (yyscan_t) VCF_alloc ( sizeof( struct yyguts_t ), NULL );
+
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+
+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* VCF_lex_init_extra has the same functionality as VCF_lex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to VCF_alloc in
+ * the yyextra field.
+ */
+
+int VCF_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    VCF_set_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+	
+    *ptr_yy_globals = (yyscan_t) VCF_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+	
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    VCF_set_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from VCF_lex_destroy(), so don't allocate here.
+     */
+
+    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack_top = 0;
+    yyg->yy_buffer_stack_max = 0;
+    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_init = 0;
+    yyg->yy_start = 0;
+
+    yyg->yy_start_stack_ptr = 0;
+    yyg->yy_start_stack_depth = 0;
+    yyg->yy_start_stack =  NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * VCF_lex_init()
+     */
+    return 0;
+}
+/* %endif */
+
+/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
+/* VCF_lex_destroy is for both reentrant and non-reentrant scanners. */
+int VCF_lex_destroy  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		VCF__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		VCF_pop_buffer_state(yyscanner);
+	}
+
+	/* Destroy the stack itself. */
+	VCF_free(yyg->yy_buffer_stack ,yyscanner);
+	yyg->yy_buffer_stack = NULL;
+
+    /* Destroy the start condition stack. */
+        VCF_free(yyg->yy_start_stack ,yyscanner );
+        yyg->yy_start_stack = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * VCF_lex() is called, initialization will occur. */
+    yy_init_globals( yyscanner);
+
+/* %if-reentrant */
+    /* Destroy the main struct (reentrant only). */
+    VCF_free ( yyscanner , yyscanner );
+    yyscanner = NULL;
+/* %endif */
+    return 0;
+}
+/* %endif */
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *VCF_alloc (yy_size_t  size , yyscan_t yyscanner)
+{
+	return (void *) malloc( size );
+}
+
+void *VCF_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void VCF_free (void * ptr , yyscan_t yyscanner)
+{
+	free( (char *) ptr );	/* see VCF_realloc() for (char *) cast */
+}
+
+/* %if-tables-serialization definitions */
+/* %define-yytables   The name for this specific scanner's tables. */
+#define YYTABLES_NAME "yytables"
+/* %endif */
+
+/* %ok-for-header */
+
+
+
+
+bool VCFScan_yylex_init(VCFParseBlock* sb, bool debug)
+{
+	if (VCF_lex_init_extra(sb,&sb->scanner) != 0)
+	{
+        return false;
+		/*return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );*/
+	}		
+
+    sb->offset = 0;
+    
+    sb->lastToken = NULL;
+    sb->column = 1;
+    
+	VCF_set_debug(debug ? 1 : 0,sb->scanner);
+
+	return true;
+}
+
+void VCFScan_yylex_destroy(VCFParseBlock* sb)
+{
+	if (sb->scanner)
+	{
+		VCF_lex_destroy(sb->scanner);
+	}		
+	sb->scanner=0;
+}
+
diff --git a/tools/vcf-loader/vcf-lex.l b/tools/vcf-loader/vcf-lex.l
new file mode 100644
index 0000000..721fbc6
--- /dev/null
+++ b/tools/vcf-loader/vcf-lex.l
@@ -0,0 +1,132 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{ 
+	#include "vcf-parse.h"
+	#include "vcf-grammar.h"    
+
+    #define YYSTYPE VCFToken
+
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText     = yytext; \
+        yylval -> tokenStart    = yyextra->offset; \
+        yylval -> tokenLength	= yyleng;	\
+        yylval -> line_no		= yylineno;	\
+        yylval -> column_no		= yyextra -> column; \
+        yyextra -> lastToken = yylval; \
+        yyextra -> offset += yyleng; \
+        yyextra -> column += yyleng; 
+
+    #define ENDLINE \
+        yyextra -> column=1; \
+        return vcfENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    #define YY_NO_INPUT
+%}
+
+%option never-interactive nounistd yylineno reentrant bison-bridge noyywrap
+
+%option prefix="VCF_"
+%option extra-type="VCFParseBlock*"
+
+%option debug
+
+alphanum    [A-Za-z0-9\-_]+
+
+%x HEADER
+%x DATA
+%x META
+%x META_SIMPLE
+%x META_COMPOSITE
+
+%%
+
+^##                     { BEGIN META; }
+^#                      { BEGIN HEADER; }
+
+^[^#][^\t\r\n]*         { BEGIN DATA; return vcfDATAITEM; }
+
+<DATA>[^\t\r\n]+        { return vcfDATAITEM; }
+
+<META>fileformat/=      { BEGIN META_SIMPLE; return vcfMETAKEY_FORMAT; }
+<META>{alphanum}/=      { BEGIN META_SIMPLE; return vcfMETAKEY; }
+<META>{alphanum}/=<     { BEGIN META_COMPOSITE; return vcfMETAKEY; }
+
+<META_SIMPLE>
+{
+    [^=\r\n]+       { return vcfMETAVALUE; }
+}
+<META_COMPOSITE>
+{
+    {alphanum}/=      { return vcfMETAKEY; }
+    [^=<,>\r\n]+      { return vcfMETAVALUE; }
+}
+
+<*>
+{
+    \t                          
+    \n          { BEGIN 0; ENDLINE; }
+    \r\n        { BEGIN 0; ENDLINE; }
+    \r/[^\n]    { BEGIN 0; ENDLINE; }
+    .           { return yytext[0]; }
+}
+
+<HEADER>[^\t\r\n]+      { return vcfHEADERITEM; }
+
+%%    
+
+bool VCFScan_yylex_init(VCFParseBlock* sb, bool debug)
+{
+	if (yylex_init_extra(sb, &sb->scanner) != 0)
+	{
+        return false;
+		/*return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );*/
+	}		
+
+    sb->offset = 0;
+    
+    sb->lastToken = NULL;
+    sb->column = 1;
+    
+	yyset_debug(debug ? 1 : 0, sb->scanner);
+
+	return true;
+}
+
+void VCFScan_yylex_destroy(VCFParseBlock* sb)
+{
+	if (sb->scanner)
+	{
+		yylex_destroy(sb->scanner);
+	}		
+	sb->scanner=0;
+}
diff --git a/tools/vcf-loader/vcf-loader.c b/tools/vcf-loader/vcf-loader.c
new file mode 100644
index 0000000..03c20d8
--- /dev/null
+++ b/tools/vcf-loader/vcf-loader.c
@@ -0,0 +1,124 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <loader/common-writer.h>
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+
+#define ALIAS_INPUT  "i"
+#define ALIAS_OUTPUT "o"
+
+static
+char const * output_usage[] = 
+{
+    "Path and Name of the output database.",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */               /* max#,  needs param, required */
+    { OPTION_OUTPUT,        ALIAS_OUTPUT,           NULL, output_usage,     1,  true,        true },
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path",
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] <fastq-file> ...\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad VCF formatted data files\n"
+        "\n"
+        "Example:\n"
+        "\t%s -o /tmp/SRZ123456 123456-1.vcf 123456-2.vcf\n"
+        "\n"
+        ,progname, progname);
+}
+
+char const UsageDefaultName[] = "vcf-load";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    int i;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    for(i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\n"));
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    return 0;
+}
diff --git a/tools/vcf-loader/vcf-parse.h b/tools/vcf-loader/vcf-parse.h
new file mode 100644
index 0000000..3798737
--- /dev/null
+++ b/tools/vcf-loader/vcf-parse.h
@@ -0,0 +1,89 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_vcf_parse_
+#define _h_vcf_parse_
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+typedef struct VCFToken
+{ 
+    const char* tokenText; /* 0-terminated, short-lived */
+    size_t tokenStart;  /* 0-based offset from the start of input */
+    size_t tokenLength;
+    size_t line_no;
+    size_t column_no;
+} VCFToken;
+
+struct VcfRecord;
+struct VcfReader;
+
+typedef struct VCFParseBlock
+{
+    void* self; /* VcfReader object or a test double */
+    void* scanner; /* flex control block */
+    
+    size_t (*input)(struct VCFParseBlock* pb, char* buf, size_t max_size); /* read the next part of the input */
+    void (*error)(struct VCFParseBlock* pb, const char* message);
+    
+    void (*metaLine)(struct VCFParseBlock* pb, VCFToken* key, VCFToken* value); /* simple meta line: ##key=value */
+    
+    /* two-level meta line: ##key=<key=value,...> */
+    void (*openMetaLine)(struct VCFParseBlock* pb, VCFToken* key);              
+    void (*keyValue)(struct VCFParseBlock* pb, VCFToken* key, VCFToken* value);
+    void (*headerItem)(struct VCFParseBlock* pb, VCFToken* value);
+    void (*closeMetaLine)(struct VCFParseBlock* pb);
+    
+    /* data line */
+    void (*openDataLine)(struct VCFParseBlock* pb);
+    void (*dataItem)(struct VCFParseBlock* pb, VCFToken* value);
+    void (*closeDataLine)(struct VCFParseBlock* pb);
+
+    size_t offset;  /* 0-based offset from the start of input */
+    size_t column;  /* 1-based column, for error reporting */
+    
+   /* for error reporting, valid inside error() only: */
+    VCFToken* lastToken;
+  
+} VCFParseBlock;
+
+extern bool VCFScan_yylex_init(VCFParseBlock* context, bool debug); /* false - out of memory */
+extern void VCFScan_yylex_destroy(VCFParseBlock* context);
+
+extern void VCF_set_lineno (int line_number, void* scanner);
+
+extern int VCF_lex(VCFToken* pb, void * scanner);
+extern void VCF_unlex(VCFParseBlock* pb, VCFToken* token);
+
+extern int VCF_debug; /* set to 1 to print Bison trace */ 
+
+/* read 1 data line (possibly preceded by any number of meta/header lines) */
+extern int VCF_parse(VCFParseBlock* pb); /* 0 = end of input, 1 = success, a new record is in context->record, 2 - syntax error */
+
+extern void VCF_error(VCFParseBlock* pb, const char* msg);
+
+#endif /* _h_vcf_parse_ */
diff --git a/tools/vcf-loader/vcf-reader.c b/tools/vcf-loader/vcf-reader.c
new file mode 100644
index 0000000..d39df66
--- /dev/null
+++ b/tools/vcf-loader/vcf-reader.c
@@ -0,0 +1,438 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "vcf-reader.h"
+#include "vcf-parse.h"
+
+#include <klib/rc.h>
+
+#include <klib/text.h>
+#include <klib/namelist.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+
+#include <kfs/mmap.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define LINE_VECTOR_BLOCK_SIZE 1024
+#define GENOTYPE_LIST_BLOCK_SIZE 64
+#define MESSAGE_LIST_BLOCK_SIZE 64
+#define PARSE_ERROR RC ( rcAlign, rcFile, rcParsing, rcFormat, rcIncorrect )
+#define MANDATORY_DATA_FIELDS_NUMBER 8
+
+/*=============== VcfDataLine ================*/
+static
+rc_t VcfDataLineMake(VcfDataLine** pself)
+{
+    if ( pself == NULL )
+        return RC ( rcAlign, rcFile, rcReading, rcSelf, rcNull );
+    else
+    {
+        VcfDataLine* self;
+        rc_t rc = 0;
+        
+        *pself = NULL;
+        
+        self = malloc(sizeof(VcfDataLine));
+        if (self == NULL)
+            return RC ( rcAlign, rcFile, rcReading, rcMemory, rcExhausted );
+        
+        memset(self, 0, sizeof(VcfDataLine));
+        
+        rc = VNamelistMake( &self->genotypeFields, GENOTYPE_LIST_BLOCK_SIZE);
+        if (rc == 0)
+            *pself = self;
+        else
+            free(self);
+        return rc;
+    }
+}
+
+static
+rc_t VcfDataLineWhack(VcfDataLine* self)
+{
+    rc_t rc = 0;
+    
+    if (self != NULL)
+        rc = VNamelistRelease(self->genotypeFields);
+        
+    free(self);
+    
+    return rc;
+}
+
+/*=============== VcfReader ================*/
+
+struct VcfReader
+{
+    char* input;
+    size_t inputSize;
+    size_t curPos;
+    VCFParseBlock pb;
+    
+    Vector lines;  /* the element type is VcfDataLine* */
+    
+    VNamelist* messages;
+};
+
+/* bison helpers */
+static size_t Input(VCFParseBlock* pb, char* buf, size_t maxSize);
+static void Error(VCFParseBlock* pb, const char* message);
+static void AddMetaLine(VCFParseBlock* pb, VCFToken* key, VCFToken* value);
+static void OpenMetaLine(VCFParseBlock* pb, VCFToken* key);
+static void KeyValue(VCFParseBlock* pb, VCFToken* key, VCFToken* value);
+static void HeaderItem(VCFParseBlock* pb, VCFToken* value);
+static void CloseMetaLine(VCFParseBlock* pb);
+static void OpenDataLine(VCFParseBlock* pb);
+static void DataItem(VCFParseBlock* pb, VCFToken* value);
+static void CloseDataLine(VCFParseBlock* pb);
+
+static 
+rc_t VcfReaderInit(VcfReader* self)
+{
+    self->input = NULL;
+    
+    self->pb.self           = self;
+    self->pb.input          = Input;
+    self->pb.error          = Error;
+    
+    self->pb.metaLine       = AddMetaLine;
+    
+    self->pb.openMetaLine   = OpenMetaLine;
+    self->pb.keyValue       = KeyValue;
+    self->pb.headerItem     = HeaderItem;
+    self->pb.closeMetaLine  = CloseMetaLine;
+    
+    self->pb.openDataLine   = OpenDataLine;
+    self->pb.dataItem       = DataItem;
+    self->pb.closeDataLine  = CloseDataLine;
+    
+    VectorInit( &self->lines, 0, LINE_VECTOR_BLOCK_SIZE );
+    
+    return VNamelistMake( &self->messages, MESSAGE_LIST_BLOCK_SIZE);
+}
+
+static void CC WhackLineVectorElement( void *item, void *data )
+{
+    VcfDataLine* elem = (VcfDataLine*)item;
+    VcfDataLineWhack(elem);
+}
+
+rc_t VcfReaderWhack( struct VcfReader* self)
+{
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        return RC ( rcAlign, rcFile, rcDestroying, rcSelf, rcNull );
+
+    VectorWhack( &self->lines, WhackLineVectorElement, NULL );
+
+    rc = VNamelistRelease( self->messages );
+    
+    free(self->input);
+    free(self);
+
+    return rc;
+}
+
+rc_t VcfReaderMake( const struct VcfReader **pself)
+{
+    if ( pself == NULL )
+        return RC ( rcAlign, rcFile, rcConstructing, rcSelf, rcNull );
+        
+    *pself = malloc(sizeof(VcfReader));
+    if ( *pself == NULL )
+        return RC ( rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted );
+
+    return VcfReaderInit((VcfReader*)*pself);
+}
+
+/*=============== callbacks for the bison parser ================*/
+static size_t Input(VCFParseBlock* pb, char* buf, size_t maxSize)
+{
+    VcfReader* self = (VcfReader*)(pb->self);
+    size_t ret = string_copy(buf, maxSize, self->input + self->curPos, self->inputSize - self->curPos);
+    
+    self->curPos += ret;
+    
+    return ret;
+}
+static void Error(VCFParseBlock* pb, const char* message)
+{
+    char buf[1024];
+    VcfReader* self = (VcfReader*)(pb->self);
+    string_printf(buf, sizeof(buf), NULL, 
+                  "line %d column %d: %s", 
+                  pb->lastToken->line_no, pb->lastToken->column_no, message);
+    VNamelistAppend(self->messages, buf);
+}
+
+static void AddMetaLine(VCFParseBlock* pb, VCFToken* key, VCFToken* value)
+{
+}
+static void OpenMetaLine(VCFParseBlock* pb, VCFToken* key)
+{
+}
+static void CloseMetaLine(VCFParseBlock* pb)
+{
+}
+static void KeyValue(VCFParseBlock* pb, VCFToken* key, VCFToken* value)
+{
+}
+static void HeaderItem(VCFParseBlock* pb, VCFToken* value)
+{
+}
+
+static void OpenDataLine(VCFParseBlock* pb)
+{
+    VcfReader* self;
+    VcfDataLine* line;
+    rc_t rc = 0;
+
+    assert(pb);
+
+    self = (VcfReader*)(pb->self);
+    assert(self);
+    
+    /* create new line object */
+    VcfDataLineMake( &line );
+    if (rc == 0)
+    {   /* append to the vector */
+        rc = VectorAppend( &self->lines, NULL, line );
+        if (rc != 0)
+        {
+            SET_RC_FILE_FUNC_LINE(rc);
+            Error(pb, "failed to append a line object");
+        }
+    }
+    else
+    {
+        SET_RC_FILE_FUNC_LINE(rc);
+        Error(pb, "failed to create a line object");
+    }
+}
+static void DataItem(VCFParseBlock* pb, VCFToken* value)
+{
+    VcfReader* self = (VcfReader*)(pb->self);
+    VcfDataLine* line;
+
+    assert(pb);
+    
+    self = (VcfReader*)(pb->self);
+    assert(self);
+    
+    line = (VcfDataLine*) VectorLast( & self->lines );
+    assert(line);
+    
+    #define SAVE_TOKEN(field) StringInit( field, self->input + value->tokenStart, value->tokenLength, (uint32_t)string_size(value->tokenText) )
+
+    switch (line->lastPopulated)
+    {
+    case 0: /*String      chromosome; */
+        SAVE_TOKEN(&line->chromosome);
+        break;
+        
+    case 1: /*uint32_t    position;  */
+        {   
+            char* endptr;
+            long val = strtol(value->tokenText, &endptr, 10);
+            if (*endptr || val < 0 || val > UINT32_MAX)
+                Error(pb, "invalid numeric value for 'position'");
+            else
+                line->position = (uint32_t)val;
+                
+            break;
+        }
+    case 2: /*String      id; */
+        SAVE_TOKEN(&line->id);
+        break;
+    case 3: /*String      refBases; */
+        SAVE_TOKEN(&line->refBases);
+        break;
+    case 4: /*String      altBases;  */
+        SAVE_TOKEN(&line->altBases);
+        break;
+    case 5: /*uint8_t     quality;  */
+        {   
+            char* endptr;
+            long val = strtol(value->tokenText, &endptr, 10);
+            if (*endptr || val < 0 || val > UINT8_MAX)
+                Error(pb, "invalid numeric value for 'quality'");
+            else
+                line->quality = (uint32_t)val;
+                
+            break;
+        }
+    case 6: /*String      filter; */
+        SAVE_TOKEN(&line->filter);
+        break;
+    case 7: /*String      info; */ 
+        SAVE_TOKEN(&line->info);
+        break;
+    default: /* add to the genotypeFields */
+        {
+            rc_t rc = 0;
+            String f;
+            SAVE_TOKEN(&f);
+            rc = VNamelistAppendString(line->genotypeFields, &f);
+            if (rc != 0)
+            {
+                SET_RC_FILE_FUNC_LINE(rc);
+                Error(pb, "failed to append a genotype field");
+            }
+            break;
+        }
+    }
+    
+    ++line->lastPopulated;
+}
+static void CloseDataLine(VCFParseBlock* pb)
+{   
+    /* check if the line had enough data fields */
+    VcfReader* self = (VcfReader*)(pb->self);
+    VcfDataLine* line;
+
+    assert(pb);
+    
+    self = (VcfReader*)(pb->self);
+    assert(self);
+    
+    line = (VcfDataLine*) VectorLast( & self->lines );
+    assert(line);
+    
+    if (line->lastPopulated < MANDATORY_DATA_FIELDS_NUMBER)
+    {
+        -- pb->lastToken->line_no; /* this happens after the EOL has been processed, */
+                                   /* and the line # reported by flex incremented; fix that for error reporting */
+        Error(pb, "one or more of the 8 mandatory columns are missing");
+    }
+}
+
+
+rc_t VcfReaderParse( struct VcfReader *self, struct KFile* inputFile, const struct VNamelist** messages)
+{
+    rc_t rc = 0;
+    uint32_t messageCount;
+    KMMap* mm;
+    
+    if ( self == NULL )
+        return RC ( rcAlign, rcFile, rcParsing, rcSelf, rcNull );
+        
+    if (inputFile == NULL)
+        return RC ( rcAlign, rcFile, rcParsing, rcParam, rcNull );
+        
+    VNameListCount ( self->messages, &messageCount );       
+    if (messageCount > 0)
+    {   /* blow away old mesages */
+        rc = VNamelistRelease( self->messages );
+        if (rc == 0)
+            rc = VNamelistMake( &self->messages, MESSAGE_LIST_BLOCK_SIZE);
+        if (rc != 0)
+            return rc;
+    }
+        
+    rc = KMMapMakeRead ( (const KMMap**)& mm, inputFile );
+    if ( rc == 0 )
+    {
+        rc_t rc2 = 0;
+        
+        const void * ptr;
+        rc = KMMapAddrRead ( mm, & ptr );
+        if ( rc == 0 )
+        {
+            rc = KMMapSize ( mm, & self->inputSize);
+            if ( rc == 0 )
+            {
+                /* make a 0-terminated copy for parsing */
+                self->input = malloc(self->inputSize+1);
+                if (self->input == 0)
+                    rc = RC ( rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted );
+                else
+                {
+                    string_copy(self->input, self->inputSize+1, ptr, self->inputSize);
+                    self->curPos = 0;
+                    VCFScan_yylex_init(&self->pb, false);
+                    
+                    if (VCF_parse(&self->pb) == 0)
+                        rc = PARSE_ERROR;
+                    else
+                    {
+                        VNameListCount ( self->messages, &messageCount );       
+                        if (messageCount > 0)
+                            rc = PARSE_ERROR;
+                    }
+                                        
+                    *messages = (const struct VNamelist*)self->messages;
+                        
+                    VCFScan_yylex_destroy(&self->pb);
+                }
+            }
+        }
+        else if (rc == RC ( rcFS, rcMemMap, rcAccessing, rcMemMap, rcInvalid )) /* 0 size file */
+        {
+            VNamelistAppend(self->messages, "Empty file");
+            *messages = (const struct VNamelist*)self->messages;
+            rc = PARSE_ERROR;
+        }
+           
+        rc2 = KMMapRelease ( mm );
+        if (rc == 0)
+            rc = rc2;
+    }
+    
+    return rc;
+}
+
+rc_t VcfReaderGetDataLineCount( const VcfReader* self, uint32_t* count )
+{
+    if ( self == NULL )
+        return RC ( rcAlign, rcFile, rcAccessing, rcSelf, rcNull );
+        
+    if ( count == NULL )
+        return RC ( rcAlign, rcFile, rcAccessing, rcParam, rcNull );
+        
+    *count = VectorLength( & self->lines );
+    
+    return 0;
+}
+
+rc_t VcfReaderGetDataLine( const VcfReader* self, uint32_t index, const VcfDataLine** line )
+{
+    if ( self == NULL )
+        return RC ( rcAlign, rcFile, rcAccessing, rcSelf, rcNull );
+        
+    if ( line == NULL )
+        return RC ( rcAlign, rcFile, rcAccessing, rcParam, rcNull );
+        
+    *line = VectorGet( & self->lines, index );
+    
+    return 0;
+}
+
diff --git a/tools/vcf-loader/vcf-reader.h b/tools/vcf-loader/vcf-reader.h
new file mode 100644
index 0000000..8c309ad
--- /dev/null
+++ b/tools/vcf-loader/vcf-reader.h
@@ -0,0 +1,110 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_vcf_reader_
+#define _h_vcf_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <klib/text.h>
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct VNamelist;
+
+typedef struct VcfReader VcfReader;
+
+typedef struct VcfDataLine
+{
+    /* Fixed fields, per spec v. 4.2:
+        http://www.1000genomes.org/wiki/analysis/variant-call-format/vcf-variant-call-format-version-42 
+    */
+    String      chromosome; /* An identifier from the reference genome or "<ID>" pointing to a contig in the assembly file */
+    uint32_t    position;   /* The reference position, with the 1st base having position 1 */
+    String      id;         /* semi-colon separated list of unique identifiers where available; "." if missing */
+    String      refBases;   /* reference base(s) */
+    String      altBases;   /* comma separated list of alternate non-reference alleles called on at least one of the samples; "." if missing */
+    uint8_t     quality;    /* phred-scaled quality score for the assertion made in ALT */
+    String      filter;     /* "PASS", or a semicolon-separated list of codes for filters that fail*/
+    String      info;       /* a semicolon-separated series of keys with optional values in the format: <key>[=<data>[,data]] */ 
+
+    /* Genotype fields, each represented as a String pointing into source */
+    struct VNamelist*  genotypeFields;
+    
+    uint16_t  lastPopulated; /* index of the last populated data item (parser's internal use) */
+} VcfDataLine;
+
+/*=============== VcfReaderMake ================*/
+
+/* Make
+ *  Creates a new instance of VcfReader
+ *
+ *  self [OUT] return parameter for the new reader object
+ *
+ */
+rc_t VcfReaderMake( const VcfReader** self );
+
+/* Parse
+ *  Parses a VCF file. Can be used repeatedly on the same object.
+ *
+ *  self [ IN ] the reader object
+ *
+ *  file [ IN ] a readable file object. The entire file will be parsed.
+ *
+ *  message [ OUT ] error messages generated by the parser. Set to NULL if no messages were generated.
+ *  the pointer is valid until the next call to Parse or VcfReaderWhack on the reader object 
+ */
+rc_t VcfReaderParse( VcfReader* self, struct KFile* file, const struct VNamelist** messages );
+
+/* Whack
+ *  releases object obtained from VcfReaderMake
+ */
+rc_t VcfReaderWhack( VcfReader* self );
+
+/*  GetDataLineCount
+ * Returns the number of data lines in the parsed file 
+ */
+rc_t VcfReaderGetDataLineCount( const VcfReader* self, uint32_t* count );
+
+/*  GetDataLine
+ * Returns the data line at the specified 0-based index, 
+ * The returned pointer is valid until the reader is whacked
+ */
+rc_t VcfReaderGetDataLine( const VcfReader* self, uint32_t index, const VcfDataLine** line );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vcf_reader_ */
diff --git a/tools/vdb-config/Makefile b/tools/vdb-config/Makefile
new file mode 100644
index 0000000..7e06a87
--- /dev/null
+++ b/tools/vdb-config/Makefile
@@ -0,0 +1,82 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-config
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	vdb-config
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+	
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-config
+#
+VDB_CONFIG_SRC = \
+	configure \
+	util \
+	vdb-config \
+	interactive \
+	vdb-config-model \
+
+VDB_CONFIG_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_CONFIG_SRC))
+
+VDB_CONFIG_LIB = \
+	-stui_cpp    \
+	-stui        \
+	-skapp       \
+	-stk-version \
+	-sncbi-vdb   \
+	-sm
+
+$(BINDIR)/vdb-config: $(VDB_CONFIG_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_CONFIG_LIB)
diff --git a/tools/vdb-config/configure.cpp b/tools/vdb-config/configure.cpp
new file mode 100644
index 0000000..0d2438b
--- /dev/null
+++ b/tools/vdb-config/configure.cpp
@@ -0,0 +1,816 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "configure.h" /* configure */
+#include "interactive.h" /* run_interactive */
+#include "util.hpp" // CNoncopyable
+#include "vdb-config-model.hpp" // vdbconf_model
+
+#include <klib/rc.h> /* RC */
+#include <klib/vector.h> /* Vector */
+
+#include <sstream> // stringstream
+
+#include <climits> /* PATH_MAX */
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+using std::string;
+
+////////////////////////////////////////////////////////////////////////////////
+class CConfigurator : CNoncopyable {
+    CKConfig m_Cfg;
+    CKDirectory m_Dir;
+    rc_t CheckNcbiHome(bool &updated, bool verbose) const {
+        if (verbose) {
+            OUTMSG(("checking NCBI home... "));
+        }
+
+        const CString ncbi(m_Cfg.ReadNcbiHome());
+
+        if (verbose) {
+            OUTMSG(("%S\n", ncbi.Get()));
+        }
+
+        rc_t rc = 0;
+        if (!ncbi.Empty()) {
+            rc = m_Dir.CreateNonExistingPrivateDir(ncbi, verbose);
+            if (rc == 0) {
+                rc = m_Dir.CheckPrivateAccess(ncbi, updated, verbose);
+            }
+            if (rc == 0) {
+                rc = m_Dir.CanWriteFile(ncbi, verbose);
+            }
+        }
+
+        return rc;
+    }
+    rc_t CheckRepositories(bool fix) {
+        {
+            const string name("/repository/user/default-path");
+            CString node(m_Cfg.ReadString(name.c_str()));
+            if (node.Empty()) {
+                CString home(m_Cfg.ReadString("HOME"));
+                if (!home.Empty()) {
+/* this rc is ignored */ m_Cfg.UpdateNode(name.c_str(),
+                    (home.GetString() + "/ncbi").c_str());
+                }
+                else {
+                    m_Cfg.UpdateNode(name.c_str(), "$(HOME)/ncbi");
+                }
+            }
+        }
+        rc_t rc = 0;
+        if (fix) {
+            const string name("/repository/site/disabled");
+            if (m_Cfg.NodeExists(name)) {
+                rc_t r2 = m_Cfg.UpdateNode(name.c_str(), "false");
+                if (r2 != 0 && rc == 0) {
+                    rc = r2;
+                }
+            }
+        }
+        const KRepositoryMgr *mgr = NULL;
+        rc = KConfigMakeRepositoryMgrRead(m_Cfg.Get(), &mgr);
+        KRepositoryVector repositories;
+        memset(&repositories, 0, sizeof repositories);
+        if (rc == 0) {
+            rc = KRepositoryMgrRemoteRepositories(mgr, &repositories);
+            if (rc == 0) {
+                KRepositoryVectorWhack(&repositories);
+            }
+            else if
+                (rc == SILENT_RC(rcKFG, rcNode, rcOpening, rcPath, rcNotFound))
+            {
+                rc = m_Cfg.CreateRemoteRepositories();
+            }
+        }
+        if ( rc == 0 && fix ) {
+            rc = m_Cfg.CreateRemoteRepositories(fix);
+        }
+        if (rc == 0) {
+
+            m_Cfg . FixResolverCgiNodes ( );
+
+            bool noUser = false;
+            rc = KRepositoryMgrUserRepositories(mgr, &repositories);
+            if (rc == 0) {
+                uint32_t len = 0;
+                if (rc == 0) {
+                    len = VectorLength(&repositories);
+                }
+                if (len == 0) {
+                    noUser = true;
+                }
+                else {
+                    uint32_t i = 0;
+                    noUser = true;
+                    for (i = 0; i < len; ++i) {
+                        const KRepository *repo
+                            = static_cast<const KRepository*>
+                                (VectorGet(&repositories, i));
+                        if (repo != NULL) {
+                            char buffer[PATH_MAX] = "";
+                            size_t size = 0;
+                            rc = KRepositoryName(repo,
+                                buffer, sizeof buffer, &size);
+                            if (rc == 0) {
+                                const char p[] = "public";
+                                if (strcase_cmp(p, sizeof p - 1, buffer,
+                                    size, sizeof buffer) == 0)
+                                {
+                                    noUser = false;
+                                }
+                                if (fix) {
+                                    rc = m_Cfg.CreateUserRepository
+                                        (buffer, fix);
+                                }
+                            }
+                        }
+                    }
+                    rc = 0;
+                }
+                KRepositoryVectorWhack(&repositories);
+            }
+            else if
+                (rc == SILENT_RC(rcKFG, rcNode, rcOpening, rcPath, rcNotFound))
+            {
+                noUser = true;
+            }
+            if (noUser) {
+                rc = m_Cfg.CreateUserRepository();
+            }
+        }
+        RELEASE(KRepositoryMgr, mgr);
+        return rc;
+    }
+
+    rc_t CheckConfig(bool fix) {
+        rc_t rc = CheckRepositories(fix);
+        if (rc == 0) {
+            const string name("/tools/ascp/max_rate");
+            CString node(m_Cfg.ReadString(name.c_str()));
+            if (node.Empty()) {
+                rc = m_Cfg.UpdateNode(name.c_str(), "1000m");
+            }
+        }
+        if (rc == 0) {
+            CString config_default(m_Cfg.ReadDefaultConfig());
+            if (!config_default.Empty() && !config_default.Equals("false")) {
+                m_Cfg.UpdateNode("/config/default", "false");
+            }
+        }
+        if (rc == 0) {
+            m_Cfg.Commit();
+        }
+        return rc;
+    }
+
+protected:
+    vdbconf_model *m_Config;
+
+public:
+    CConfigurator(bool fix = false, bool verbose = false): m_Config(NULL) {
+#define TODO 1
+        bool updated = false;
+        rc_t rc = CheckNcbiHome(updated, verbose);
+        if (rc == 0 && updated) {
+            m_Cfg.Reload(verbose);
+        }
+        if (rc == 0) {
+            rc = CheckConfig(fix);
+            if (rc == 0) {
+                m_Cfg.Reload(verbose);
+            }
+        }
+        if (rc == 0) {
+            m_Config = new vdbconf_model(m_Cfg.Get());
+            if (m_Config == NULL) {
+                rc = TODO;
+            }
+        }
+        if (rc != 0) {
+            throw rc;
+        }
+    }
+    virtual ~CConfigurator(void) { delete m_Config; }
+    virtual rc_t Configure(void) {
+        OUTMSG(("Fixed default configuration\n"));
+        return 0;
+    }
+};
+struct SUserRepo {
+    bool cacheEnabled;
+//  bool enabled;
+    string root;
+    SUserRepo(const vdbconf_model *kfg, int32_t id = -1) { Reload (kfg, id); }
+    void Reload(const vdbconf_model *kfg, int32_t id = -1) {
+        assert(kfg);
+        if (id < 0) {
+            cacheEnabled = kfg->is_user_cache_enabled();
+//          enabled = kfg->is_user_enabled();
+            root = kfg->get_public_location();
+        }
+        else {
+            cacheEnabled = kfg->is_protected_repo_cached(id);
+//          enabled = kfg->is_protected_repo_enabled(id);
+            root = kfg->get_repo_location(id);
+        }
+    }
+};
+struct SProtectedRepo : SUserRepo {
+public:
+    const string name;
+    const string description;
+    SProtectedRepo(const vdbconf_model *kfg,
+            uint32_t id, const string &aName)
+        : SUserRepo(kfg, id)
+        , name(aName), description(kfg->get_repo_description(name))
+    {}
+    void Reload(const vdbconf_model *kfg,
+        uint32_t id, const string &aName)
+    {
+        assert(name == aName);
+        SUserRepo::Reload(kfg, id);
+    }
+};
+class CProtectedRepos : public std::map<const string, SProtectedRepo> {
+    typedef std::map<const string, SProtectedRepo>::iterator TI;
+public:
+    typedef std::map<const string, SProtectedRepo>::const_iterator TCI;
+    CProtectedRepos(const vdbconf_model *kfg) { Reload(kfg); }
+    void Reload(const vdbconf_model *kfg) {
+        assert(kfg);
+        uint32_t n = kfg->get_repo_count();
+        for (uint32_t i = 0; i < n; ++i) {
+            const string name(kfg->get_repo_name(i));
+            TI it = find(name);
+            if (it == end()) {
+                insert(std::pair<const string, SProtectedRepo>
+                    (name, SProtectedRepo(kfg, i, name)));
+            }
+            else {
+                (*it).second.Reload(kfg, i, name);
+            }
+        }
+    }
+    TCI Get(uint32_t id) const {
+        TCI it = begin();
+        for (uint32_t i = 0; it != end(); ++it, ++i) {
+            if (i == id) {
+                break;
+            }
+        }
+        return it;
+    }
+};
+struct SData {
+    bool done;
+    bool updated;
+    bool site;
+    struct SCrntData {
+    private:
+        const vdbconf_model *m_Kfg;
+    public:
+        bool site_enabled;
+        bool remote_enabled;
+        bool cache_disabled;
+        SUserRepo userR;
+        CProtectedRepos protectedR;
+        SCrntData(const vdbconf_model *kfg)
+            : m_Kfg(kfg), userR(kfg), protectedR(kfg)
+        {
+            Reload();
+        }
+        void Reload(void) {
+            assert(m_Kfg);
+            site_enabled = m_Kfg->is_site_enabled();
+            remote_enabled = m_Kfg->is_remote_enabled();
+            cache_disabled = ! m_Kfg->is_global_cache_enabled();
+            userR.Reload(m_Kfg);
+            protectedR.Reload(m_Kfg);
+        }
+    } crnt;
+    SData(const vdbconf_model *kfg)
+        : done(false)
+        , updated(false)
+        , site(kfg->does_site_repo_exist())
+        , crnt(kfg)
+    {}
+};
+struct STrinity {
+private:
+    string ToString(int i) { std::stringstream s; s << i; return s.str(); }
+public:
+//  const string enabled;
+    const string cached;
+    const string root;
+    STrinity(const string &src)
+//      : enabled(src.substr(0, 1))
+        : cached (src.substr(0, 1))
+        , root   (src.substr(1, 1))
+    {}
+    STrinity(int i)
+//      : enabled(ToString(i + 0))
+        : cached (ToString(i + 0))
+        , root   (ToString(i + 1))
+    {}
+    void Print(void) const
+    { OUTMSG(("%s %s\n", cached.c_str(), root.c_str())); }
+};
+class CTextualConfigurator : public CConfigurator {
+    CStdIn m_Stdin;
+    string Input(const string &prompt, const string &value) {
+        OUTMSG(("\n\n%s:\n%s\n\nEnter the new path and Press <Enter>\n"
+            "Press <Enter> to accept the path\n> ",
+            prompt.c_str(), value.c_str()));
+        char buffer[PATH_MAX] = "";
+        size_t num_read = 0;
+        rc_t rc = m_Stdin.Read(buffer, sizeof buffer, &num_read);
+        if (rc == 0 && num_read > 0) {
+            return string(buffer, num_read);
+        }
+        else {
+            return "";
+        }
+    }
+    
+    void ProcessCancel(SData &d) {
+        if (!d.updated) {
+            d.done = true;
+            return;
+        }
+        OUTMSG(("\nChanges in your configuration were not saved\n\n"));
+        while (true) {
+            OUTMSG((
+                "To save changes and exit  : Enter Y and Press <Enter>\n"
+                "To ignore changes and exit: Enter N and Press <Enter>\n"
+                "To cancel and continue    : Press <Enter>\n"
+                "\n"
+                "Your choice > "));
+            char answer = toupper(m_Stdin.Read1());
+            switch (answer) {
+                case '\0':
+                    return;
+                case  'Y':
+                    OUTMSG(("Saving...\n"));
+                    m_Config->commit();
+                //  no break;
+                case  'N':
+                    OUTMSG(("Exiting..."));
+                    d.done = true;
+                    return;
+                default:
+                    OUTMSG(("Unrecognized input\n"));
+            }
+        }
+    }
+    enum EChoice {
+        eCancel,
+        eExit,
+        eRemote,
+        eSite,
+        eUnknown,
+        eUserCacheEnable,
+        eGlobalCacheEnable,
+//      eUserEnable,
+        eUserRoot,
+    };
+    struct SChoice {
+        EChoice choice;
+        int32_t id;
+        SChoice(EChoice c, int32_t i = -1) : choice(c), id(i)
+        {}
+    };
+    class CSymGen {
+        static const string magic;
+    public:
+        static STrinity Id2Seq(uint32_t id) {
+            int d = id * 2 - (int)magic.size();
+            if (d < 0) {
+                return STrinity(magic.substr(id * 2, 2));
+            }
+            else {
+                return STrinity(d + 10);
+            }
+        }
+        static SChoice Seq2Choice(string /* copy */ s, uint32_t maxId) {
+            if (s.length() <= 0 || s.length() > 2) {
+                return SChoice(eUnknown);
+            }
+            else if (s.length() == 1) {
+                size_t p = magic.find(s[0]);
+                if (p == string::npos) {
+                    return SChoice(eUnknown);
+                }
+                else {
+                    EChoice c = eUnknown;
+                    switch (p % 2) {
+                        case 0: c = eUserCacheEnable; break;
+                        case 1: c = eUserRoot       ; break;
+                        default: assert(0); break;
+                    }
+                    return SChoice(c, (int)p / 2);
+                }
+            }
+            else {
+                assert(s.length() == 2);
+                if (!isdigit(s[0]) || !!isdigit(s[0]) || s[0] == '0') {
+                    return SChoice(eUnknown);
+                }
+                int id = (s[0] - '0') * 10 + s[1] - '0' + (int)magic.size();
+                EChoice c = eUnknown;
+                switch (id % 2) {
+                    case 0: c = eUserCacheEnable; break;
+                    case 1: c = eUserRoot       ; break;
+                    default: assert(0); break;
+                }
+                return SChoice(c, id / 2);
+            }
+        }
+        static void Ask(void) { OUTMSG(("magic.len = %d\n", magic.size())); }
+    };
+    SChoice Inquire(const SData &d) {
+        OUTMSG(("     vdb-config interactive\n\n  data source\n\n"));
+        OUTMSG(("   NCBI SRA: "));
+        if (d.crnt.remote_enabled) {
+            OUTMSG(("enabled (recommended) (1)\n\n"));
+        }
+        else {
+            OUTMSG(("disabled (not recommended) (1)\n\n"));
+        }
+        if (d.site) {
+        OUTMSG(("   site    : "));
+            if (d.crnt.site_enabled) {
+                OUTMSG(("enabled (recommended) (2)\n\n"));
+            }
+            else {
+                OUTMSG(("disabled (not recommended) (2)\n\n"));
+            }
+        }
+        OUTMSG(("\n  local workspaces: local file caching: "));
+        if (d.crnt.cache_disabled) {
+            OUTMSG(("disabled (not recommended) (6)\n"));
+        }
+        else {
+            OUTMSG(("enabled (recommended) (6)\n"));
+        }
+        OUTMSG(("\n  Open Access Data\n"));
+/*      if (d.crnt.userR.enabled) {
+            OUTMSG(("enabled (recommended) (6)\n"));
+        }
+        else {
+            OUTMSG(("disabled (not recommended) (6)\n"));
+        }*/
+        if (d.crnt.userR.cacheEnabled) {
+            OUTMSG(("cached (recommended) (3)\n"));
+        }
+        else {
+            OUTMSG(("not cached (not recommended) (3)\n"));
+        }
+        OUTMSG(("location: '%s' (4)\n", d.crnt.userR.root.c_str()));
+
+        uint32_t id = 0;
+        for (CProtectedRepos::TCI it = d.crnt.protectedR.begin();
+            it != d.crnt.protectedR.end(); ++it, ++id)
+        {
+            const SProtectedRepo r((*it).second);
+            OUTMSG(("\n   %s:\n", r.name.c_str()));
+            if (r.description.size() > 0) {
+                OUTMSG(("  ( %s )\n", r.description.c_str()));
+            }
+            STrinity t(CSymGen::Id2Seq(id));
+
+/*          OUTMSG(("%s) ", t.enabled.c_str()));
+            if (r.enabled) {
+                OUTMSG(("enabled (recommended)\n"));
+            }
+            else {
+                OUTMSG(("DISABLED (not recommended)\n"));
+            }*/
+
+            OUTMSG(("%s) ", t.cached.c_str()));
+            if (r.cacheEnabled) {
+                OUTMSG(("caching is enabled (recommended)\n"));
+            }
+            else {
+                OUTMSG(("CACHING IS DISABLED (not recommended)\n"));
+            }
+
+            OUTMSG(("%s) root: %s\n", t.root.c_str(), r.root.c_str()));
+        }
+
+//"To print help info      : Enter H and Press <Enter>\n"
+        OUTMSG(("\n\n"
+"To cancel and exit      : Press <Enter>\n"));
+        if (d.updated) {
+            OUTMSG(("To save changes and exit: Enter Y and Press <Enter>\n"));
+        }
+        OUTMSG((
+"To update and continue  : Enter corresponding symbol and Press <Enter>\n"));
+        OUTMSG(("\nYour choice > "));
+        char answer = toupper(m_Stdin.Read1());
+        switch (answer) {
+            case '\0': return SChoice(eCancel);
+            case  '1': return SChoice(eRemote);
+            case  'Y': return SChoice(eExit);
+            case  '2': //            case  'O':
+                return d.site ? SChoice(eSite) : SChoice(eUnknown);
+            case  '6': return SChoice(eGlobalCacheEnable);
+            case  '3': return SChoice(eUserCacheEnable);
+            case  '4': return SChoice(eUserRoot);
+            default  : return CSymGen::Seq2Choice(string(1, answer), id);
+        }
+    }
+    bool SetRoot(int32_t id, const string &old) {
+        const string name(id < 0 ? "Public" : "dbGaP");
+        const string prompt("Path to " + name + " Repository");
+        bool flushOld = false, reuseNew = false, ask = true;
+        string root;
+        while (true) {
+            if (ask) {
+                root = Input(prompt, old);
+                if (root.size() == 0) {
+                    OUTMSG(("\nRoot path to '%s' repository was not changed\n",
+                        name.c_str()));
+                    return false;
+                }
+                OUTMSG(("\nChanging root path to '%s' repository to '%s'\n",
+                    name.c_str(), root.c_str()));
+                ask = false;
+            }
+            ESetRootState s = m_Config->change_repo_location
+                (flushOld, root, reuseNew, id);
+            switch (s) {
+                case eSetRootState_OK:
+                    return true;
+                case eSetRootState_NewPathEmpty:
+                case eSetRootState_Error:
+                    assert(0);
+                    return false;
+                case eSetRootState_MkdirFail:
+                    OUTMSG(("Error: cannot make directory '%s'\n",
+                        root.c_str()));
+                    ask = true;
+                    break;
+                case eSetRootState_NotChanged:
+                    OUTMSG(("Keeping '%s' path unchanged\n", root.c_str()));
+                    return false;
+                case eSetRootState_NewNotDir:
+                    OUTMSG(("Error: '%s' exists and is not a directory\n",
+                        root.c_str()));
+                    ask = true;
+                    break;
+                case eSetRootState_NotUnique:
+                    OUTMSG(("Error: there is another repository in '%s'\n",
+                        root.c_str()));
+                    ask = true;
+                    break;
+                case eSetRootState_NewDirNotEmpty: {
+                    OUTMSG(("Warning: directory '%s' is not empty\n"
+                        "Would you like to use it? (y/N)? > ", root.c_str()));
+                    char answer = toupper(m_Stdin.Read1());
+                    if (answer == 'Y') {
+                        reuseNew = true;
+                    }
+                    else {
+                        ask = true;
+                    }
+                    break;
+                }
+                case eSetRootState_OldNotEmpty: {
+                    OUTMSG(("Warning: your repository '%s' is not empty\n"
+                        "Would you like to clear it? (y/N)? > ", old.c_str()));
+                    char answer = toupper(m_Stdin.Read1());
+                    if (answer == 'Y') {
+                        OUTMSG(("Clearing the old repository...\n"));
+                        flushOld = true;
+                    }
+                    else {
+                        ask = true;
+                    }
+                    break;
+                }
+            }
+        }
+    }
+    virtual rc_t Configure(void) {
+        assert(m_Config);
+        SData d(m_Config);
+        while (!d.done) {
+            d.crnt.Reload();
+            SChoice answer = Inquire(d);
+            OUTMSG(("\n"));
+            switch (answer.choice) {
+                case eSite:
+                    if (d.crnt.site_enabled) {
+                        OUTMSG(("WARNING: DISABLING SITE REPOSITORY!!!"));
+                    }
+                    else {
+                        OUTMSG(("Enabling site repository..."));
+                    }
+                    m_Config->set_site_enabled(!d.crnt.site_enabled);
+                    d.updated = true;
+                    break;
+                case eRemote:
+                    if (d.crnt.remote_enabled) {
+                        OUTMSG(("WARNING: DISABLING REMOTE REPOSITORY!!!"));
+                    }
+                    else {
+                        OUTMSG(("Enabling remote repository..."));
+                    }
+                    m_Config->set_remote_enabled(!d.crnt.remote_enabled);
+                    d.updated = true;
+                    break;
+                case eGlobalCacheEnable:
+                    if (d.crnt.cache_disabled) {
+                        OUTMSG(("Enabling local file caching..."));
+                    }
+                    else {
+                        OUTMSG(("WARNING: DISABLING LOCAL FILE CACHING!!!"));
+                    }
+                    m_Config->set_global_cache_enabled(d.crnt.cache_disabled);
+                    d.updated = true;
+                    break;
+                case eUserCacheEnable:
+                    if (answer.id < 0) {
+                        if (d.crnt.userR.cacheEnabled) {
+                            OUTMSG(("WARNING: "
+                                "DISABLING USER REPOSITORY CACHING!!!"));
+                        }
+                        else {
+                            OUTMSG(("Enabling user repository caching..."));
+                        }
+                        m_Config->set_user_cache_enabled
+                            (!d.crnt.userR.cacheEnabled);
+                        d.updated = true;
+                    }
+                    else {
+                        CProtectedRepos::TCI it
+                            (d.crnt.protectedR.Get(answer.id));
+                        if (it == d.crnt.protectedR.end()) {
+                            OUTMSG(("Unrecognized input. Continuing..."));
+                        }
+                        else {
+                            const SProtectedRepo r((*it).second);
+                            int32_t id = m_Config->get_repo_id(r.name);
+                            if (id < 0) {
+                                OUTMSG(("ERROR: CANNOT FIND '%s' REPOSITORY",
+                                    r.name.c_str()));
+                            }
+                            else {
+                                if (r.cacheEnabled) {
+                                    OUTMSG(("WARNING: DISABLING '%s' REPOSITORY"
+                                        " CACHING!!!", r.name.c_str()));
+                                }
+                                else {
+                                    OUTMSG(("Enabling '%s' repository "
+                                        "caching...", r.name.c_str()));
+                                }
+                                m_Config->set_protected_repo_cached
+                                    (id, !r.cacheEnabled);
+                                d.updated = true;
+                            }
+                        }
+                    }
+                    break;
+/*              case eUserEnable:
+                    if (answer.id < 0) {
+                        if (d.crnt.userR.enabled) {
+                            OUTMSG(("WARNING: DISABLING USER REPOSITORY!!!"));
+                        }
+                        else {
+                            OUTMSG(("Enabling user repository..."));
+                        }
+                        m_Config->set_user_enabled(!d.crnt.userR.enabled);
+                        d.updated = true;
+                    }
+                    else {
+                        CProtectedRepos::TCI it
+                            (d.crnt.protectedR.Get(answer.id));
+                        if (it == d.crnt.protectedR.end()) {
+                            OUTMSG(("Unrecognized input. Continuing..."));
+                        }
+                        else {
+                            const SProtectedRepo r((*it).second);
+                            int32_t id = m_Config->get_repo_id(r.name);
+                            if (id < 0) {
+                                OUTMSG(("ERROR: CANNOT FIND '%s' REPOSITORY",
+                                    r.name.c_str()));
+                            }
+                            else {
+                                if (r.enabled) {
+                                    OUTMSG(("WARNING: DISABLING '%s' "
+                                        "REPOSITORY!!!", r.name.c_str()));
+                                }
+                                else {
+                                    OUTMSG(("Enabling '%s' repository...",
+                                        r.name.c_str()));
+                                }
+                                m_Config->set_protected_repo_enabled
+                                    (id, !r.enabled);
+                                d.updated = true;
+                            }
+                        }
+                    }
+                    break;*/
+                case eUserRoot: {
+                    string root(d.crnt.userR.root);
+                    if (answer.id >= 0) {
+                        CProtectedRepos::TCI it
+                            (d.crnt.protectedR.Get(answer.id));
+                        if (it == d.crnt.protectedR.end()) {
+                            OUTMSG(("Unrecognized input. Continuing..."));
+                            break;
+                        }
+                        else {
+                            root = (*it).second.root;
+                        }
+                    }
+                    d.updated = SetRoot(answer.id, root);
+                    break;
+                }
+                case eExit:
+                    OUTMSG(("Saving..."));
+                    m_Config->commit();
+                    d.done = true;
+                    break;
+                case eCancel:
+                    OUTMSG(("Canceling...\n\n"));
+                    ProcessCancel(d);
+                    break;
+                default:
+                    OUTMSG(("Unrecognized input. Continuing..."));
+                    break;
+            }
+            OUTMSG(("\n\n\n"));
+        }
+        return 0;
+    }
+public:
+    CTextualConfigurator(void) {}
+};
+const string CTextualConfigurator::CSymGen::magic
+ ("56789ABCDEFGHIJKLMNOPQRSTUVWXZ");
+class CVisualConfigurator : public CConfigurator {
+    virtual rc_t Configure(void) {
+        if (m_Config == NULL) {
+            return TODO;
+        }
+        return run_interactive(*m_Config);
+    }
+};
+rc_t configure(EConfigMode mode) {
+    rc_t rc = 0;
+    CConfigurator *c = NULL;
+    try {
+        switch (mode) {
+            case eCfgModeDefault:
+                c = new CConfigurator(true);
+                break;
+            case eCfgModeTextual:
+                c = new CTextualConfigurator;
+                break;
+            default:
+                c = new CVisualConfigurator;
+                break;
+        }
+        rc = c->Configure();
+    }
+    catch (rc_t re) {
+        if (rc == 0) {
+            rc = re;
+        }
+    }
+    catch (...) {
+        if (rc == 0) {
+            rc = TODO;
+        }
+    }
+    delete c;
+    return rc;
+}
diff --git a/tools/vdb-config/configure.h b/tools/vdb-config/configure.h
new file mode 100644
index 0000000..fc9450f
--- /dev/null
+++ b/tools/vdb-config/configure.h
@@ -0,0 +1,49 @@
+#ifndef _h_tools_vdb_config_configure_
+#define _h_tools_vdb_config_configure_
+
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/defs.h> /* rc_t */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    eCfgModeDefault,  /* default has to be graphical     */
+    eCfgModeTextual,  /* textual is the only alternative */
+    eCfgModeSemiVisual, /* remove this */
+    eCfgModeVisual,     /* redundant */
+} EConfigMode;
+
+rc_t configure(EConfigMode mode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_tools_vdb_config_configure_ */
diff --git a/tools/vdb-config/interactive.cpp b/tools/vdb-config/interactive.cpp
new file mode 100644
index 0000000..66af49f
--- /dev/null
+++ b/tools/vdb-config/interactive.cpp
@@ -0,0 +1,1096 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+/*
+    a clean new config tool in c++ with interactive interface...
+*/
+
+#include <tui/tui.hpp>
+
+#include <klib/rc.h>
+
+#include <kfg/config.h>
+#include <kfg/properties.h>
+#include <kfg/repository.h>
+#include <kfg/ngc.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <sstream>
+
+#include "vdb-config-model.hpp"
+
+using namespace tui;
+
+#define BOX_COLOR		KTUI_c_dark_blue
+#define STATUS_COLOR	KTUI_c_gray
+#define LABEL_BG		KTUI_c_light_gray
+#define LABEL_FG		KTUI_c_black
+#define CB_COLOR_FG		KTUI_c_black
+#define BTN_COLOR_FG	KTUI_c_black
+#define CB_COLOR_BG		KTUI_c_cyan
+#define BTN_COLOR_BG	KTUI_c_cyan
+
+#define TOP_H			11
+#define SRC_W		    36
+#define PROXY_EN_W		15
+#define PROXY_EN_W_ENV	43
+#define SAVE_W		    14
+#define EXIT_W		    14
+#define WKSP_NAME_W		32
+#define WKSP_B_LOC_W	12
+
+#define CB_TXT_REMOTE	            "Enable Remote Access (1)"
+#define CB_TXT_CACHE   	            "Enable Local File Caching (2)"
+#define CB_TXT_SITE   	            "Use Site Installation (3)"
+#define CB_TXT_PROXY        		"Use Proxy"
+#define CB_TXT_PROXY_ENV       		"Prioritize Env. Variable \'http_proxy\'"
+
+#define BTN_TXT_IMPORT_NGC 			"Import Repository Key (4)"
+#define BTN_TXT_DFLT_IMPORT_PATH	"Set Default Import Path (5)"
+#define B_SAVE_TXT                  "Save (6)"
+#define B_EXIT_TXT                  "Exit (7)"
+#define B_RELOAD_TXT                "Reload (8)"
+#define B_FACT_DFLT_TXT             "Standard Settings (9)"
+
+#define MAIN_CAPTION	            "vdb-config"
+#define L_TXT_PUBLIC                "Public"
+#define BTN_TXT_CHANGE	            "Change"
+#define HDR_WKSP_NAME_TXT           "Workspace Name"
+#define HDR_WKSP_LOC_TXT            "Location"
+#define L_TXT_NUMBER_EXPLAIN        "Press the number in (X) as a shortcut"
+
+#define FOCUS_TXT_CB_REMOTE         "Press SPACE | ENTER to enable/disable access to the servers at NCBI"
+#define FOCUS_TXT_CB_CACHED         "Press SPACE | ENTER to enable/disable caching"
+#define FOCUS_TXT_CB_SITE           "Press SPACE | ENTER to enable/disable access to site repositories"
+#define FOCUS_TXT_CB_PROXY          "Press SPACE | ENTER to enable/disable http proxy"
+#define FOCUS_TXT_B_PROXY			"Press SPACE | ENTER to edit proxy"
+#define FOCUS_TXT_B_PROXY_ENV 	    "Press SPACE | ENTER to prioritize environment variable \'http_proxy\'"
+#define FOCUS_TXT_B_PUBLIC_LOC      "Press SPACE | ENTER to change location of public data"
+#define FOCUS_TXT_B_IMPORT_NGC      "Press SPACE | ENTER to import a dbGaP project"
+#define FOCUS_TXT_B_USR_DFLT_PATH   "Press SPACE | ENTER to change default repository location"
+#define FOCUS_TXT_B_PROT_LOC        "Press SPACE | ENTER to change location for this dbGaP repository"
+#define FOCUS_TXT_B_SAVE            "Press SPACE | ENTER to save changes"
+#define FOCUS_TXT_B_EXIT            "Press SPACE | ENTER to exit vdb-config"
+#define FOCUS_TXT_B_RELOAD          "Press SPACE | ENTER to discard changes"
+#define FOCUS_TXT_B_FACT_DFLT       "Press SPACE | ENTER to set factory defaults"
+
+#define ID_BOX_TOP_LEFT             100
+#define ID_BOX_BOTTOM               101
+#define ID_BOX_TOP_RIGHT            102
+#define ID_BOX_STATUS               103
+
+#define ID_CB_REMOTE                104
+#define ID_CB_CACHED                105
+#define ID_CB_SITE                  106
+#define ID_CB_PROXY          		107
+#define ID_B_PROXY          		108
+#define ID_L_PROXY          		109
+#define ID_CB_PROXY_ENV        		110
+
+#define ID_B_IMPORT_NGC             120
+#define ID_B_USR_DFLT_PATH          121
+
+#define ID_L_WKSP_NAME              122
+#define ID_L_WKSP_LOC               123
+
+#define ID_L_PUBLIC                 123
+#define ID_B_PUBLIC_LOC             124
+#define ID_L_PUBLIC_LOC             125
+
+#define ID_B_SAVE                   126
+#define ID_B_EXIT                   127
+#define ID_B_RELOAD                 128
+#define ID_B_FACT_DFLT              129
+
+#define ID_L_NUMBER_EXPLAIN         130
+
+#define ID_L_PROT                   200
+#define ID_L_PROT_LOC               300
+#define ID_B_PROT_LOC               400
+
+
+class vdbconf_view : public Dlg
+{
+    public :
+        vdbconf_view( vdbconf_model &model ) : Dlg(), priv_model( model ), repos_shown( 0 ), show_local_enable( false )
+        {
+            populate();
+        };
+
+        virtual bool Resize( Tui_Rect const &r )
+        {
+			populate( r, true );
+            return Dlg::Resize( r );
+        }
+
+        void populate( void );
+
+    private :
+        vdbconf_model & priv_model;
+        uint32_t repos_shown;
+        bool show_local_enable;
+
+        /* layout functions */
+		uint32_t half( Tui_Rect const &r, uint32_t margins ) const { return ( ( r.get_w() - margins ) / 2 ); }
+		Tui_Rect h1_rect( Tui_Rect const &r, int32_t dx, int32_t dy, int32_t dw ) const
+            { return Tui_Rect( r.get_x() + dx, r.get_y() + dy, r.get_w() + dw, 1 ); }
+		Tui_Rect h1_w_rect( Tui_Rect const &r, int32_t dx, int32_t dy, uint32_t w ) const
+            { return Tui_Rect( r.get_x() + dx, r.get_y() + dy, w, 1 ); }
+		
+		Tui_Rect top_left_rect( Tui_Rect const &r ) const
+            { return Tui_Rect( r.get_x() + 1, r.get_y() + 2, half( r, 3 ), TOP_H ); }
+
+		Tui_Rect top_right_rect( Tui_Rect const &r ) const
+            { return Tui_Rect( r.get_x() + half( r, 3 ) + 2, r.get_y() + 2, r.get_w() - half( r, 3 ) - 3, TOP_H ); }
+																				
+		Tui_Rect bottom_rect( Tui_Rect const &r ) const
+            { return Tui_Rect( r.get_x() + 1, r.get_y() + TOP_H + 3, r.get_w() - 2, r.get_h() - ( TOP_H + 5 ) ); }
+
+        Tui_Rect statust_rect( Tui_Rect const &r ) const { return h1_rect( r, 0, r.get_h() - 1, 0 ); }
+        Tui_Rect remote_cb_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 1, SRC_W ); }
+        Tui_Rect cache_cb_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 3, SRC_W ); }
+        Tui_Rect site_cb_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 5, SRC_W ); }
+        Tui_Rect proxy_cb_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 7, PROXY_EN_W ); }
+        Tui_Rect proxy_cb_env_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 9, PROXY_EN_W_ENV ); }
+        Tui_Rect proxy_btn_rect( Tui_Rect const &r ) const { return h1_w_rect( r, PROXY_EN_W + 2, 7, WKSP_B_LOC_W ); }
+        Tui_Rect proxy_lb_rect( Tui_Rect const &r ) const
+		{ return h1_w_rect( r, PROXY_EN_W + 3 + WKSP_B_LOC_W, 7, r.get_w() - ( PROXY_EN_W + 4 + WKSP_B_LOC_W ) ); }
+		
+        Tui_Rect import_ngc_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 1, WKSP_NAME_W ); }
+        Tui_Rect usr_dflt_path_rect( Tui_Rect const &r ) const { return h1_w_rect( r, WKSP_NAME_W + 2, 1, WKSP_NAME_W + 3 ); }
+
+		Tui_Rect hdr_wksp_name_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 3, WKSP_NAME_W ); }
+		Tui_Rect hdr_wksp_loc_rect( Tui_Rect const &r ) const { return h1_rect( r, WKSP_NAME_W + 2, 3, -( WKSP_NAME_W + 3 ) ); }
+
+		Tui_Rect wksp_name_rect( Tui_Rect const &r, uint32_t n ) const { return h1_w_rect( r, 1, 5 + ( 2 * n ), WKSP_NAME_W ); }
+		Tui_Rect wksp_b_loc_rect( Tui_Rect const &r, uint32_t n ) const
+            { return h1_w_rect( r, WKSP_NAME_W + 2, 5 + ( 2 * n ), WKSP_B_LOC_W ); }
+		Tui_Rect wksp_loc_rect( Tui_Rect const &r, uint32_t n ) const
+            { return h1_rect( r, WKSP_NAME_W + WKSP_B_LOC_W + 3, 5 + ( 2 * n ), -( WKSP_NAME_W + WKSP_B_LOC_W + 4 ) ); }
+		
+        Tui_Rect save_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 1, SAVE_W ); }
+        Tui_Rect exit_rect( Tui_Rect const &r ) const { return h1_w_rect( r, SAVE_W + 2, 1, EXIT_W ); }
+        Tui_Rect reload_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 3, SAVE_W + EXIT_W + 1 ); }
+        Tui_Rect factdflt_rect( Tui_Rect const &r ) const { return h1_w_rect( r, 1, 5, SAVE_W + EXIT_W + 1 ); }
+        Tui_Rect num_explain_rect( Tui_Rect const &r ) const { return h1_rect( r, 1, r.get_h() - 2, -2 ); }
+
+		void setup_box( Tui_Rect const &r, bool resize, uint32_t id );
+		void setup_label( Tui_Rect const &r, bool resize, uint32_t id, const char * txt );
+		void setup_checkbox( Tui_Rect const &r, bool resize, uint32_t id, const char * txt, bool enabled );
+		void setup_button( Tui_Rect const &r, bool resize, uint32_t id, const char * txt );
+		
+		void populate_top_left( Tui_Rect const &r, bool resize );
+        void populate_protected( Tui_Rect const &r, bool resize );
+		void populate_bottom( Tui_Rect const &r, bool resize );
+		void populate_top_right( Tui_Rect const &r, bool resize );
+        void populate( Tui_Rect const &r, bool resize );
+};
+
+
+void vdbconf_view::setup_box( Tui_Rect const &r, bool resize, uint32_t id )
+{
+	if ( resize )
+		SetWidgetRect( id, r, false );
+	else if ( !HasWidget( id ) )
+	{
+		AddLabel( id, r, "" );
+		SetWidgetBackground( id, BOX_COLOR );
+	}
+}
+
+void vdbconf_view::setup_label( Tui_Rect const &r, bool resize, uint32_t id, const char * txt )
+{
+	if ( resize )
+		SetWidgetRect( id, r, false );
+	else if ( HasWidget( id ) )
+    {
+        SetWidgetCaption( id, ( txt == NULL ) ? "" : txt );
+    }
+    else
+	{
+		AddLabel( id, r, ( txt == NULL ) ? "" : txt );
+		SetWidgetBackground( id, LABEL_BG );
+		SetWidgetForeground( id, LABEL_FG );
+	}
+}
+
+
+void vdbconf_view::setup_checkbox( Tui_Rect const &r, bool resize, uint32_t id, const char * txt, bool value )
+{
+	if ( resize )
+		SetWidgetRect( id, r, false );
+	else if ( HasWidget( id ) )
+    {
+        SetWidgetCaption( id, ( txt == NULL ) ? "" : txt );
+        SetWidgetBoolValue( id, value );
+    }
+    else
+	{
+        AddCheckBox( id, r, ( txt == NULL ) ? "" : txt, value );
+		SetWidgetBackground( id, CB_COLOR_BG );
+		SetWidgetForeground( id, CB_COLOR_FG );
+	}
+}
+
+
+void vdbconf_view::setup_button( Tui_Rect const &r, bool resize, uint32_t id, const char * txt )
+{
+	if ( resize )
+		SetWidgetRect( id, r, false );
+	else if ( HasWidget( id ) )
+    {
+        SetWidgetCaption( id, ( txt == NULL ) ? "" : txt );
+    }
+    else
+	{
+		AddButton( id, r, ( txt == NULL ) ? "" : txt );
+		SetWidgetBackground( id, BTN_COLOR_BG );
+		SetWidgetForeground( id, BTN_COLOR_FG );
+	}
+}
+
+
+void vdbconf_view::populate_top_left( Tui_Rect const &r, bool resize )
+{
+	setup_box( r, resize, ID_BOX_TOP_LEFT );
+
+    /* the 3 checkboxes for remote, cached, site */
+	setup_checkbox( remote_cb_rect( r ), resize, ID_CB_REMOTE, CB_TXT_REMOTE, priv_model.is_remote_enabled() );
+	setup_checkbox( cache_cb_rect( r ), resize, ID_CB_CACHED, CB_TXT_CACHE, priv_model.is_global_cache_enabled() );
+	if ( priv_model.does_site_repo_exist() )
+		setup_checkbox( site_cb_rect( r ), resize, ID_CB_SITE, CB_TXT_SITE, priv_model.is_site_enabled() );
+	setup_checkbox( proxy_cb_rect( r ), resize, ID_CB_PROXY, CB_TXT_PROXY, priv_model.is_http_proxy_enabled() );
+	setup_button( proxy_btn_rect( r ), resize, ID_B_PROXY, BTN_TXT_CHANGE );
+	setup_label( proxy_lb_rect( r ), resize, ID_L_PROXY, priv_model.get_http_proxy_path().c_str() );
+    setup_checkbox( proxy_cb_env_rect( r ), resize, ID_CB_PROXY_ENV, CB_TXT_PROXY_ENV, priv_model.has_http_proxy_env_higher_priority() );
+}
+
+
+void vdbconf_view::populate_protected( Tui_Rect const &r, bool resize )
+{
+    uint32_t visible = ( ( r.get_h() - 9 ) / 2 );
+    uint32_t i, n = priv_model.get_repo_count();
+    for ( i = 0; i < n; ++i )
+    {
+        setup_label( wksp_name_rect( r, i + 1 ), resize, ID_L_PROT + i, priv_model.get_repo_name( i ).c_str() );
+        setup_button( wksp_b_loc_rect( r, i + 1 ), resize, ID_B_PROT_LOC + i, BTN_TXT_CHANGE );
+        setup_label( wksp_loc_rect( r, i + 1 ), resize, ID_L_PROT_LOC + i, priv_model.get_repo_location( i ).c_str() );
+
+        SetWidgetVisible( ID_L_PROT + i, ( i < visible ) );
+        SetWidgetVisible( ID_B_PROT_LOC + i, ( i < visible ) );
+        SetWidgetVisible( ID_L_PROT_LOC + i, ( i < visible ) );
+    }
+}
+
+void vdbconf_view::populate_bottom( Tui_Rect const &r, bool resize )
+{
+	setup_box( r, resize, ID_BOX_BOTTOM );
+	
+    /* the import-ngc and the set-dflt-path buttons */
+	setup_button( import_ngc_rect( r ), resize, ID_B_IMPORT_NGC, BTN_TXT_IMPORT_NGC );
+	setup_button( usr_dflt_path_rect( r ), resize, ID_B_USR_DFLT_PATH, BTN_TXT_DFLT_IMPORT_PATH );
+
+    /* the header of the workspace list */	
+	setup_label( hdr_wksp_name_rect( r ), resize, ID_L_WKSP_NAME, HDR_WKSP_NAME_TXT );
+	setup_label( hdr_wksp_loc_rect( r ), resize, ID_L_WKSP_LOC, HDR_WKSP_LOC_TXT );
+
+    /* the public workspace: */
+    setup_label( wksp_name_rect( r, 0 ), resize, ID_L_PUBLIC, L_TXT_PUBLIC );
+	setup_button( wksp_b_loc_rect( r, 0 ), resize, ID_B_PUBLIC_LOC, BTN_TXT_CHANGE );
+    setup_label( wksp_loc_rect( r, 0 ), resize, ID_L_PUBLIC_LOC, priv_model.get_public_location().c_str() );
+
+    /* the protected workspaces: */
+    populate_protected( r, resize );
+
+    setup_label( num_explain_rect( r ), resize, ID_L_NUMBER_EXPLAIN, L_TXT_NUMBER_EXPLAIN );
+}
+
+
+void vdbconf_view::populate_top_right( Tui_Rect const &r, bool resize )
+{
+	setup_box( r, resize, ID_BOX_TOP_RIGHT );
+
+	setup_button( save_rect( r ), resize, ID_B_SAVE, B_SAVE_TXT );
+	setup_button( exit_rect( r ), resize, ID_B_EXIT, B_EXIT_TXT );
+	setup_button( reload_rect( r ), resize, ID_B_RELOAD, B_RELOAD_TXT );
+	setup_button( factdflt_rect( r ), resize, ID_B_FACT_DFLT, B_FACT_DFLT_TXT );
+}
+
+
+void vdbconf_view::populate( Tui_Rect const &r, bool resize )
+{
+    if ( !resize ) SetCaption( MAIN_CAPTION );
+    
+    populate_top_left( top_left_rect( r ), resize );
+    populate_bottom( bottom_rect( r ), resize );
+    populate_top_right( top_right_rect( r ), resize );
+    
+    setup_label( statust_rect( r ), resize, ID_BOX_STATUS, NULL );
+}
+
+
+void vdbconf_view::populate( void )
+{
+    Tui_Rect r;
+    GetRect( r );
+    populate( r, false );
+}
+
+/* ------------------------------------------------------------------------------------------------------------------------------------- */
+
+
+static void vdbconf_msg( Dlg &dlg, Tui_Rect r, const char * msg )
+{
+    Std_Dlg_Info_Line d;
+    d.set_parent( &dlg );
+    dlg.center( r );
+    d.set_location( r );
+    d.set_text( msg );
+    d.execute();
+}
+
+
+static bool vdbconf_question( Dlg &dlg, Tui_Rect r, const char * msg )
+{
+    Std_Dlg_Question q;
+    q.set_parent( &dlg );
+    dlg.center( r );
+    q.set_location( r );
+    q.set_text( msg );
+    return ( q.execute() );
+}
+
+
+static bool vdbconf_input( Dlg &dlg, Tui_Rect r, const char * caption, std::string & txt )
+{
+    bool res;
+    std::string prev_txt = txt;
+    Std_Dlg_Input q;
+    q.set_parent( &dlg );
+    dlg.center( r );
+    q.set_location( r );
+    q.set_caption( caption );
+    q.set_text2( txt );
+    res = q.execute();
+    if ( res )
+        res = ( prev_txt != q.get_text2() );
+    if ( res )
+        txt = q.get_text2();
+    return res;
+}
+
+
+static std::string vdbconf_pick_file( Dlg &dlg, Tui_Rect r, const char * path, const char *ext )
+{
+    std::string res = "";
+    Std_Dlg_File_Pick pick;
+    pick.set_parent( &dlg );
+    dlg.center( r );
+    pick.set_location( r );
+    pick.set_ext( ext );
+    pick.set_dir_h( ( r.get_h() - 7 ) / 2 );
+    pick.set_text( path );
+    if ( pick.execute() )
+        res.assign( pick.get_text() );
+    return res;
+}
+
+
+bool vdbconf_pick_dir( Dlg &dlg, Tui_Rect r, std::string &path )
+{
+    bool res = false;
+    Std_Dlg_Dir_Pick pick;
+
+    pick.set_parent( &dlg );
+    dlg.center( r );
+    pick.set_location( r );
+    pick.set_text( path.c_str() );
+    pick.allow_dir_create();
+
+    res = pick.execute();
+    if ( res )
+        path.assign( pick.get_text() );
+
+    return res;
+}
+
+
+static bool make_ngc_obj( const KNgcObj ** ngc, std::string &path )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc == 0 )
+    {
+        const KFile * src;
+        rc = KDirectoryOpenFileRead ( dir, &src, "%s", path.c_str() );
+        if ( rc == 0 )
+        {
+            rc = KNgcObjMakeFromFile ( ngc, src );
+            KFileRelease( src );
+        }
+        KDirectoryRelease( dir );
+    }
+    return ( rc == 0 );
+}
+
+
+std::string public_location_start_dir( vdbconf_model &model )
+{
+    std::string res = model.get_public_location();
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_user_default_dir();
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_home_dir() + "/ncbi";
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_home_dir();
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_current_dir();
+
+    return res;
+}
+
+
+std::string protected_location_start_dir( vdbconf_model &model, uint32_t id )
+{
+    std::string res = model.get_repo_location( id );
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_user_default_dir();
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_home_dir() + "/ncbi";
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_home_dir();
+
+    if ( !model.does_path_exist( res ) )
+        res = model.get_current_dir();
+
+    return res;
+}
+
+/* ------------------------------------------------------------------------------------------------------------------------------------- */
+
+
+class vdbconf_controller : public Dlg_Runner
+{
+    private :
+        vdbconf_model &priv_model;
+
+    public :
+        vdbconf_controller( Dlg &dlg, vdbconf_model &model ) : Dlg_Runner( dlg, &model ), priv_model( model ) 
+        { dlg.SetFocus( ID_CB_REMOTE ); };
+
+        virtual bool on_kb_alpha( Dlg &dlg, void * data, int code ); /* close the dialog with the 'q' character too */
+        virtual bool on_select( Dlg &dlg, void * data, Tui_Dlg_Event &dev ); /* react to buttons pressed */
+        virtual bool on_focus( Dlg &dlg, void * data, Tui_Dlg_Event &dev ) /* react to getting the focus */
+        { return on_focused( dlg, dev.get_widget_id() ); };
+
+        void update_view( Dlg &dlg );
+        bool on_exit( Dlg &dlg );
+        bool on_save( Dlg &dlg );
+        bool on_reload( Dlg &dlg );
+        bool on_fact_dflt( Dlg &dlg );
+
+        std::string get_import_ngc_start_dir( vdbconf_model &model );
+        bool import_this_ngc_into_this_location( Dlg &dlg, vdbconf_model &m, std::string &location, const KNgcObj * ngc );
+        bool import_this_ngc( Dlg &dlg, vdbconf_model &m, const KNgcObj * ngc );
+        bool on_import_ngc( Dlg &dlg );
+
+        std::string change_dflt_import_path_start_dir( vdbconf_model &model );
+        bool on_change_dflt_import_path( Dlg &dlg );
+
+        bool toggle_checkbox( Dlg &dlg, uint32_t id );
+        bool toggle_remote( Dlg &dlg );
+        bool toggle_site( Dlg &dlg );
+        bool toggle_cached( Dlg &dlg );
+
+		bool change_proxy( Dlg &dlg );
+		
+        bool on_set_location_error( Dlg &dlg, ESetRootState s );
+        bool on_pick_public_location( Dlg &dlg );
+
+        std::string change_protected_location_start_dir( vdbconf_model &model, uint32_t id );
+        bool on_pick_protected_location( Dlg &dlg, uint32_t id );
+        bool on_protected_repo( Dlg &dlg, Tui_Dlg_Event &dev );
+
+        void status_txt( Dlg &dlg, const char * s ) { dlg.SetWidgetCaption( ID_BOX_STATUS, s ); }
+        void on_focused_protected_repo( Dlg &dlg, uint32_t widget_id );
+        bool on_focused( Dlg &dlg, uint32_t widget_id );
+};
+
+
+void vdbconf_controller::update_view( Dlg &dlg )
+{
+    vdbconf_view &view = dynamic_cast<vdbconf_view &>( dlg );
+    view.populate();
+}
+
+
+bool vdbconf_controller::on_exit( Dlg &dlg )
+{
+    if ( priv_model.get_config_changed() )
+    {
+        if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), "save changes ?" ) )
+        {
+            if ( priv_model.commit() )
+                vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "changes successfully saved" );
+            else
+                vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "error saving changes" );
+        }
+    }
+    dlg.SetDone( true );
+    return true;
+}
+
+
+bool vdbconf_controller::on_save( Dlg &dlg )
+{
+    if ( priv_model.get_config_changed() )
+    {
+        if ( priv_model.commit() )
+            vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "changes successfully saved" );
+        else
+            vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "error saving changes" );
+    }
+    else
+        vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "no changes to be saved" );
+    return true;
+}
+
+
+bool vdbconf_controller::on_reload( Dlg &dlg )
+{
+    priv_model.reload();
+    update_view( dlg );
+    return true;
+}
+
+
+bool vdbconf_controller::on_fact_dflt( Dlg &dlg )
+{
+    priv_model.set_remote_enabled( true );
+    priv_model.set_global_cache_enabled( true );
+    priv_model.set_site_enabled( true );
+    update_view( dlg );
+    return true;
+}
+
+
+bool vdbconf_controller::toggle_checkbox( Dlg &dlg, uint32_t id )
+{
+    bool value = !dlg.GetWidgetBoolValue( id );
+    dlg.SetWidgetBoolValue( id, value );
+    return value;
+}
+
+
+bool vdbconf_controller::toggle_remote( Dlg &dlg )
+{
+    priv_model.set_remote_enabled( toggle_checkbox( dlg, ID_CB_REMOTE ) );
+    return true;
+}
+
+bool vdbconf_controller::toggle_cached( Dlg &dlg )
+{
+    priv_model.set_global_cache_enabled( toggle_checkbox( dlg, ID_CB_CACHED ) );
+    return true;
+}
+
+bool vdbconf_controller::toggle_site( Dlg &dlg )
+{
+	if ( priv_model.does_site_repo_exist() )
+        priv_model.set_site_enabled( toggle_checkbox( dlg, ID_CB_SITE ) );
+    return true;
+}
+
+
+bool vdbconf_controller::on_kb_alpha( Dlg &dlg, void * data, int code )
+{
+    bool res = false;
+    switch( code )
+    {
+        case '1' : res = toggle_remote( dlg ); break;
+        case '2' : res = toggle_cached( dlg ); break;
+        case '3' : res = toggle_site( dlg ); break;
+
+        case '4' : res = on_import_ngc( dlg ); break;
+        case '5' : res = on_change_dflt_import_path( dlg ); break;
+
+        case '6' : res = on_save( dlg ); break;
+
+        case '7' :
+        case 'Q' :
+        case 'q' : res = on_exit( dlg ); break;
+
+        case '8' : res = on_reload( dlg ); break;
+        case '9' : res = on_fact_dflt( dlg ); break;
+
+        default  : res = false;
+
+    }
+    return res;
+};
+
+
+bool vdbconf_controller::import_this_ngc_into_this_location( Dlg &dlg,
+    vdbconf_model &m, std::string &location, const KNgcObj * ngc )
+{
+    uint32_t result_flags = 0;
+    bool res = m.import_ngc( location, ngc, INP_CREATE_REPOSITORY, &result_flags );
+    if ( res )
+    {
+        /* we have it imported or it exists and no changes made */
+        bool modified = false;
+        if ( result_flags & INP_CREATE_REPOSITORY )
+        {
+            /* success is the most common outcome, the repository was created */
+            vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "project successfully imported" );
+            update_view( dlg );
+            modified = true;
+        }
+        else
+        {
+            /* repository did exist and is completely identical to the given ngc-obj */
+            vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "this project exists already, no changes made" );
+        }
+
+        std::ostringstream question; 
+        question << "do you want to change the location?";
+        if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) )
+        {
+            uint32_t id;
+            if ( m.get_id_of_ngc_obj( ngc, &id ) )
+                modified |= on_pick_protected_location( dlg, id );
+            else
+                vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "cannot find the imported repostiory" );
+        }
+
+        if ( modified )
+        {
+            m.commit();
+            update_view( dlg );
+            m.mkdir(ngc);
+        }
+    }
+    else if ( result_flags == 0 )
+    {
+        /* we are here if there was an error executing one of the internal functions */
+        vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "there was an internal error importing the ngc-object" );
+    }
+    else
+    {
+        bool permitted = true;
+
+        vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "the repository does already exist!" );
+        if ( result_flags & INP_UPDATE_ENC_KEY )
+        {
+            std::ostringstream question; 
+            question << "encryption-key would change, continue ?";
+            permitted = ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) );
+        }
+
+        if ( permitted && ( result_flags & INP_UPDATE_DNLD_TICKET ) )
+        {
+            std::ostringstream question; 
+            question << "download-ticket would change, continue ?";
+            permitted = ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) );
+        }
+
+        if ( permitted && ( result_flags & INP_UPDATE_DESC ) )
+        {
+            std::ostringstream question; 
+            question << "description would change, continue ?";
+            permitted = ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) );
+        }
+
+        if ( permitted )
+        {
+            uint32_t result_flags2 = 0;
+            res = m.import_ngc( location, ngc, result_flags, &result_flags2 );
+            if ( res )
+            {
+                vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "project successfully updated" );
+                
+                std::ostringstream question; 
+                question << "do you want to change the location?";
+                if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) )
+                {
+                    uint32_t id; /* we have to find out the id of the imported/existing repository */
+                    if ( m.get_id_of_ngc_obj( ngc, &id ) )            
+                        on_pick_protected_location( dlg, id );
+                    else
+                        vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "cannot find the imported repostiory" );
+                }
+                m.commit();
+                update_view( dlg );
+            }
+            else
+                vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "there was an internal error importing the ngc-object" );
+        }
+        else
+            vdbconf_msg( dlg, Tui_Rect( 5, 5, 120, 6 ), "the import was canceled" );
+    }
+    return res;
+}
+
+
+bool vdbconf_controller::import_this_ngc( Dlg &dlg, vdbconf_model &m, const KNgcObj * ngc )
+{
+    bool res = false;
+
+    std::string location_base = m.get_user_default_dir();
+    std::string location = m.get_ngc_root( location_base, ngc );
+    ESetRootState es = m.prepare_repo_directory( location );
+    switch ( es )
+    {
+        case eSetRootState_OK               :  res = import_this_ngc_into_this_location( dlg, m, location, ngc );
+                                                break;
+
+        case eSetRootState_OldNotEmpty      :  if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ),
+                                                                       "repository location is not empty, use it?" ) )
+                                                {
+                                                    es = m.prepare_repo_directory( location, true );
+                                                    if ( es == eSetRootState_OK )
+                                                        res = import_this_ngc_into_this_location( dlg, m, location, ngc );
+                                                    else
+                                                        res = on_set_location_error( dlg, es );
+                                                }
+                                                break;
+
+        default : res = on_set_location_error( dlg, es ); break;
+    }
+    return res;
+}
+
+
+std::string vdbconf_controller::get_import_ngc_start_dir( vdbconf_model &model )
+{
+    std::string res = model.get_home_dir();
+    if ( !model.does_path_exist( res ) )
+        res = model.get_current_dir();
+    return res;
+}
+
+
+bool vdbconf_controller::on_import_ngc( Dlg &dlg )
+{
+    bool res = false;
+    std::string start_dir = get_import_ngc_start_dir( priv_model );
+    /* ( 1 ) pick a ngc-file */
+    std::string picked = vdbconf_pick_file( dlg, dlg.center( 5, 5 ), start_dir.c_str(), "ngc" );
+    if ( picked.length() > 0 )
+    {
+        std::ostringstream question;
+        question << "do you want to import '" << picked << "' ?";
+        /* ( 2 ) confirm the choice */
+        if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) )
+        {
+            const KNgcObj * ngc;
+            if ( make_ngc_obj( &ngc, picked ) )
+            {
+                res = import_this_ngc( dlg, priv_model, ngc );
+                KNgcObjRelease( ngc );
+            }
+        }
+    }
+    return res;
+}
+
+
+std::string vdbconf_controller::change_dflt_import_path_start_dir( vdbconf_model &model )
+{
+    std::string res = model.get_user_default_dir();
+    if ( !model.does_path_exist( res ) )
+        res = model.get_home_dir();
+    if ( !model.does_path_exist( res ) )
+        res = model.get_current_dir();
+    return res;
+}
+
+
+bool vdbconf_controller::on_change_dflt_import_path( Dlg &dlg )
+{
+    bool res = false;
+
+    std::string path = change_dflt_import_path_start_dir( priv_model );
+
+    if ( priv_model.does_path_exist( path ) )
+        res = vdbconf_pick_dir( dlg, dlg.center( 5, 5 ), path );
+    else
+        res = vdbconf_input( dlg, Tui_Rect( 5, 5, 100, 6 ), "change default import path", path );
+
+    if ( res )
+    {
+        priv_model.set_user_default_dir( path.c_str() );
+        vdbconf_msg( dlg, Tui_Rect( 5, 5, 100, 6 ), "default import path changed" );
+    }
+    return res;
+}
+
+
+bool vdbconf_controller::change_proxy( Dlg &dlg )
+{
+	std::string proxy = priv_model.get_http_proxy_path();
+	bool res = vdbconf_input( dlg, Tui_Rect( 5, 5, 100, 6 ), "change proxy", proxy );
+	if ( res )
+	{
+		priv_model.set_http_proxy_path( proxy.c_str() );
+		dlg.SetWidgetCaption( ID_L_PROXY, proxy );
+	}
+	return res;
+}
+
+bool vdbconf_controller::on_set_location_error( Dlg &dlg, ESetRootState s )
+{
+    bool result = false;
+    Tui_Rect r( 5, 5, 100, 6 );
+    switch ( s )
+    {
+        case eSetRootState_NotChanged       : result = true; break;
+        case eSetRootState_NotUnique        : vdbconf_msg( dlg, r, "location not unique, select a different one" ); break;
+        case eSetRootState_MkdirFail        : vdbconf_msg( dlg, r, "could not created directory, maybe permisson problem" ); break;
+        case eSetRootState_NewPathEmpty     : vdbconf_msg( dlg, r, "you gave me an empty path" ); break;
+        case eSetRootState_NewDirNotEmpty   : vdbconf_msg( dlg, r, "the given location is not empty" ); break;
+        case eSetRootState_NewNotDir        : vdbconf_msg( dlg, r, "new location is not a directory" ); break;
+        case eSetRootState_Error            : vdbconf_msg( dlg, r, "error changing location" ); break;
+        default                             : vdbconf_msg( dlg, r, "unknow enum" ); break;
+    }
+    return result;
+}
+
+
+bool vdbconf_controller::on_pick_public_location( Dlg &dlg )
+{
+    bool res = false;
+	std::string path = public_location_start_dir( priv_model );
+	
+	if ( priv_model.does_path_exist( path ) )
+		res = vdbconf_pick_dir( dlg, dlg.center( 5, 5 ), path );
+	else
+		res = vdbconf_input( dlg, Tui_Rect( 5, 5, 100, 6 ), "location of public cache", path );
+	
+    if ( res && path.length() > 0 )
+    {
+        std::ostringstream question;
+        question << "do you want to change the location to '" << path << "' ?";
+        if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) )
+        {
+            bool flushOld = false;
+            bool reuseNew = false;
+            ESetRootState s = priv_model.set_public_location( flushOld, path, reuseNew );
+            switch ( s )
+            {
+                case eSetRootState_OK               :  dlg.SetWidgetCaption( ID_L_PUBLIC_LOC, path );
+                                                        res = true;
+                                                        break;
+
+                case eSetRootState_OldNotEmpty      : if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ),
+                                                                        "prev. location is not empty, flush it?" ) )
+                                                        {
+                                                            flushOld = true;
+                                                            s = priv_model.set_public_location( flushOld, path, reuseNew );
+                                                            res = ( s == eSetRootState_OK );
+                                                            if ( res )
+                                                                dlg.SetWidgetCaption( ID_L_PUBLIC_LOC, path );
+                                                            else
+                                                                res = on_set_location_error( dlg, s );
+                                                        }
+                                                        break;
+
+                default : res = on_set_location_error( dlg, s ); break;
+            }
+        }
+    }
+    return res;
+}
+
+
+bool vdbconf_controller::on_pick_protected_location( Dlg &dlg, uint32_t id )
+{
+    bool res = false;
+	std::string path = protected_location_start_dir( priv_model, id );
+
+	if ( priv_model.does_path_exist( path ) )
+		res = vdbconf_pick_dir( dlg, dlg.center( 5, 5 ), path );
+	else
+		res = vdbconf_input( dlg, Tui_Rect( 5, 5, 100, 6 ), "location of dbGaP project", path );
+
+    if ( res && path.length() > 0 )
+    {
+        std::ostringstream question;
+        question << "do you want to change the loction of '" << priv_model.get_repo_name( id ) <<"' to '" << path << "' ?";
+        if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ), question.str().c_str() ) )
+        {
+            bool flushOld = false;
+            bool reuseNew = false;
+            ESetRootState s = priv_model.set_repo_location( id, flushOld, path, reuseNew );
+            switch ( s )
+            {
+                case eSetRootState_OK               :  dlg.SetWidgetCaption( ID_L_PROT_LOC + id, path );
+                                                        res = true;
+                                                        break;
+
+                case eSetRootState_OldNotEmpty      :  if ( vdbconf_question( dlg, Tui_Rect( 5, 5, 120, 6 ),
+                                                                        "prev. location is not empty, flush it?" ) )
+                                                        {
+                                                            flushOld = true;
+                                                            s = priv_model.set_repo_location( id, flushOld, path, reuseNew );
+                                                            res = ( s == eSetRootState_OK );
+                                                            if ( res )
+                                                                dlg.SetWidgetCaption( ID_L_PROT_LOC + id, path );
+                                                            else
+                                                                res = on_set_location_error( dlg, s );
+                                                        }
+                                                        break;
+
+                default : res = on_set_location_error( dlg, s ); break;
+            }
+        }
+    }
+    return res;
+}
+
+
+bool vdbconf_controller::on_protected_repo( Dlg &dlg, Tui_Dlg_Event &dev )
+{
+    bool res = false;
+    uint32_t id = dev.get_widget_id();
+    if ( id >= ID_B_PROT_LOC && id < ( ID_B_PROT_LOC + 100 ) )
+    {
+        vdbconf_model &m( priv_model );
+        uint32_t repo_id = ( id - ID_B_PROT_LOC );
+        if ( repo_id < m.get_repo_count() )
+            res = on_pick_protected_location( dlg, repo_id );
+    }
+    return res;
+}
+
+
+bool vdbconf_controller::on_select( Dlg &dlg, void * data, Tui_Dlg_Event &dev )
+{
+    bool res = false;
+    vdbconf_model &m( vdbconf_controller::priv_model );
+    switch( dev.get_widget_id() )
+    {
+        case ID_B_SAVE          : res = on_save( dlg ); break;    
+        case ID_B_EXIT          : res = on_exit( dlg ); break;    
+        case ID_B_RELOAD        : res = on_reload( dlg ); break;    
+        case ID_B_FACT_DFLT     : res = on_fact_dflt( dlg ); break;    
+
+        case ID_CB_REMOTE : m.set_remote_enabled( dev.get_value_1() == 1 ); res = true; break;
+        case ID_CB_CACHED : m.set_global_cache_enabled( dev.get_value_1() == 1 ); res = true; break;
+
+        case ID_CB_SITE   : if ( priv_model.does_site_repo_exist() )
+                                m.set_site_enabled( dev.get_value_1() == 1 );
+                             res = true;
+                             break;
+
+		case ID_CB_PROXY     : m.set_http_proxy_enabled( dev.get_value_1() == 1 ); res = true; break;
+		case ID_B_PROXY      : res = change_proxy( dlg ); break;
+		
+        case ID_CB_PROXY_ENV : m.set_http_proxy_env_higher_priority( dev.get_value_1() == 1 ); res = true; break;
+        
+        case ID_B_PUBLIC_LOC : res = on_pick_public_location( dlg ); break;
+
+        case ID_B_IMPORT_NGC : res = on_import_ngc( dlg ); break;
+        case ID_B_USR_DFLT_PATH : res = on_change_dflt_import_path( dlg ); break;
+
+        default : res = on_protected_repo( dlg, dev ); break;
+    }
+    return res;
+};
+
+
+void vdbconf_controller::on_focused_protected_repo( Dlg &dlg, uint32_t widget_id )
+{
+    if ( widget_id >= ID_B_PROT_LOC && widget_id < ( ID_B_PROT_LOC + 100 ) )
+        status_txt( dlg, FOCUS_TXT_B_PROT_LOC );
+    else
+        status_txt( dlg, "???" );
+}
+
+
+bool vdbconf_controller::on_focused( Dlg &dlg, uint32_t widget_id )
+{
+    if ( widget_id > 1000 ) return false;
+
+    switch( widget_id )
+    {
+        case ID_B_SAVE          : status_txt( dlg, FOCUS_TXT_B_SAVE ); break;    
+        case ID_B_EXIT          : status_txt( dlg, FOCUS_TXT_B_EXIT ); break;    
+        case ID_B_RELOAD        : status_txt( dlg, FOCUS_TXT_B_RELOAD ); break;    
+        case ID_B_FACT_DFLT     : status_txt( dlg, FOCUS_TXT_B_FACT_DFLT ); break;    
+
+        case ID_CB_REMOTE       : status_txt( dlg, FOCUS_TXT_CB_REMOTE ); break;
+        case ID_CB_CACHED       : status_txt( dlg, FOCUS_TXT_CB_CACHED ); break;
+        case ID_CB_SITE         : status_txt( dlg, FOCUS_TXT_CB_SITE ); break;
+		case ID_CB_PROXY        : status_txt( dlg, FOCUS_TXT_CB_PROXY ); break;
+		case ID_B_PROXY         : status_txt( dlg, FOCUS_TXT_B_PROXY ); break;
+		case ID_CB_PROXY_ENV    : status_txt( dlg, FOCUS_TXT_B_PROXY_ENV ); break;
+        
+        case ID_B_PUBLIC_LOC    : status_txt( dlg, FOCUS_TXT_B_PUBLIC_LOC ); break;
+        case ID_B_IMPORT_NGC    : status_txt( dlg, FOCUS_TXT_B_IMPORT_NGC ); break;
+        case ID_B_USR_DFLT_PATH : status_txt( dlg, FOCUS_TXT_B_USR_DFLT_PATH ); break;
+
+        default : on_focused_protected_repo( dlg, widget_id ); break;
+    }
+    return false;
+}
+
+/* ------------------------------------------------------------------------------------------------------------------------------------- */
+
+extern "C"
+{
+    rc_t run_interactive ( vdbconf_model & model )
+    {
+        try
+        {
+            /* (2) ... create derived view, the view creates the widgets in its constructor... */
+            vdbconf_view view( model );
+        
+            /* (3) ... create derived controller, hand it the view and the model*/
+            vdbconf_controller controller( view, model );
+
+            /* (4) ... let the controller handle the events */
+            controller.run();
+
+            /* (5) call this before leaving main() to terminate the low-level driver... */
+            Tui::clean_up();
+        }
+        catch ( ... )
+        {
+            return RC( rcExe, rcNoTarg, rcExecuting, rcNoObj, rcUnknown );
+        }
+        return 0;
+    }
+}
diff --git a/tools/vdb-config/interactive.h b/tools/vdb-config/interactive.h
new file mode 100644
index 0000000..da16088
--- /dev/null
+++ b/tools/vdb-config/interactive.h
@@ -0,0 +1,50 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_interacive_
+#define _h_interacive_
+
+#include "vdb-config-model.hpp" // vdbconf_model
+
+#ifndef _h_kfc_defs_
+#include <kfc/defs.h>
+#endif
+
+#ifndef _h_vdb_config_model_
+#include "vdb-config-model.hpp"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    rc_t run_interactive ( vdbconf_model & model );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_interacive_ */
diff --git a/tools/vdb-config/util.cpp b/tools/vdb-config/util.cpp
new file mode 100644
index 0000000..f01b63a
--- /dev/null
+++ b/tools/vdb-config/util.cpp
@@ -0,0 +1,1084 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfg/kfg-priv.h> /* KConfigFixMainResolverCgiNode */
+#include <klib/printf.h> /* string_printf */
+
+#include "util.hpp" // CStdIn
+
+#include <sstream> // ostringstream
+
+#include <climits> /* PATH_MAX */
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+using std::string;
+
+rc_t CStdIn::Read(char *buffer, size_t bsize, size_t *num_read) {
+    size_t dummy = 0;
+    if (num_read == NULL) {
+if (DEBUG) OUTMSG(("<<< Read: num_read == NULL\n"));
+        num_read = &dummy;
+    }
+
+    if (bsize == 0) {
+        *num_read = 0;
+        return 0;
+    }
+
+    rc_t rc = KFileRead(m_Self, m_Pos, buffer, bsize, num_read);
+    if (rc == 0) {
+        m_Pos += *num_read;
+        size_t last = *num_read;
+        if (*num_read >= bsize) {
+            last = bsize - 1;
+        }
+
+        while (true) {
+            buffer[last] = '\0';
+            if (last == 0) {
+                break;
+            }
+            --last;
+            if (buffer[last] != '\n' && buffer[last] != '\r') {
+                break;
+            }
+            --*num_read;
+        }
+    }
+
+if (DEBUG) OUTMSG(("<<< Read: num_read = %d\n", *num_read));
+
+return rc;
+}
+
+rc_t CKDirectory::CanWriteFile(const CString &dir, bool verbose) const {
+    bool ok = true;
+    rc_t rc = 0;
+    char path[PATH_MAX] = "";
+    if (verbose) {
+        OUTMSG(("checking whether %S is writable... ", dir.Get()));
+    }
+    for (int i = 0; i < 10000 && rc == 0; ++i) {
+        size_t path_len = 0;
+        rc = string_printf(path, sizeof path, &path_len,
+            "%S/.tmp%d.tmp", dir.Get(), i);
+        if (rc != 0) {
+            break;
+        }
+        assert(path_len <= sizeof path);
+        if (Exists(path)) {
+            KDirectoryRemove(m_Self, false, path);
+        }
+        else {
+            KFile *f = NULL;
+            rc = KDirectoryCreateFile(m_Self,
+                &f, false, m_PrivateAccess, kcmCreate, path);
+            if (rc == 0) {
+                rc = KFileWrite(f, 0, path, path_len, NULL);
+            }
+            RELEASE(KFile, f);
+            const KFile *cf = NULL;
+            if (rc == 0) {
+                rc = KDirectoryOpenFileRead(m_Self, &cf, path);
+            }
+            char buffer[PATH_MAX] = "";
+            size_t num_read = 0;
+            if (rc == 0) {
+                rc = KFileRead(cf, 0, buffer, sizeof buffer, &num_read);
+            }
+            if (rc == 0) {
+                if (path_len != num_read || string_cmp(path,
+                    path_len, buffer, num_read, sizeof buffer) != 0)
+                {
+                    if (verbose) {
+                        OUTMSG(("no\n"));
+                    }
+                    OUTMSG(("Warning: "
+                        "NCBI Home directory is not writable"));
+                    ok = false;
+                }
+            }
+            RELEASE(KFile, cf);
+            if (rc == 0) {
+                KDirectoryRemove(m_Self, false, path);
+            }
+            break;
+        }
+    }
+    if (verbose && ok) {
+        if (rc == 0) {
+            OUTMSG(("yes\n"));
+        }
+        else {
+            OUTMSG(("failed\n"));
+        }
+    }
+    return rc;
+}
+
+rc_t CKDirectory::CheckAccess(const CString &path,
+    bool &updated, bool isPrivate, bool verbose) const
+{
+    updated = false;
+    const String *str = path.Get();
+    if (str == NULL) {
+        return 0;
+    }
+    uint32_t access = 0;
+    if (verbose) {
+        OUTMSG(("checking %S file mode... ", path.Get()));
+    }
+    rc_t rc = KDirectoryAccess(m_Self, &access, str->addr);
+    if (rc != 0) {
+        OUTMSG(("failed\n"));
+    }
+    else {
+        if (verbose) {
+            OUTMSG(("%o\n", access));
+        }
+        if (isPrivate) {
+            if (access != m_PrivateAccess) {
+                uint32_t access = 0777;
+                if (verbose) {
+                    OUTMSG(("updating %S to %o... ", str, access));
+                }
+                rc = KDirectorySetAccess(m_Self, false,
+                    m_PrivateAccess, access, str->addr);
+                if (rc == 0) {
+                    OUTMSG(("ok\n"));
+                    updated = true;
+                }
+                else {
+                    OUTMSG(("failed\n"));
+                }
+            }
+        }
+        else {
+            if ((access & m_PrivateAccess) != m_PrivateAccess) {
+                uint32_t access = 0700;
+                if (verbose) {
+                    OUTMSG(("updating %S to %o... ", str, access));
+                }
+                rc = KDirectorySetAccess(m_Self, false,
+                    m_PrivateAccess, access, str->addr);
+                if (rc == 0) {
+                    OUTMSG(("ok\n"));
+                    updated = true;
+                }
+                else {
+                    OUTMSG(("failed\n"));
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t CKDirectory::CreateNonExistingDir(bool verbose,
+    uint32_t access, const char *path, va_list args) const
+{
+    char str[PATH_MAX] = "";
+    rc_t rc = string_vprintf(str, sizeof str, NULL, path, args);
+    if (rc != 0) {
+        OUTMSG(("error: cannot generate path string\n"));
+        return rc;
+    }
+
+    return CreateNonExistingDir(str, access, verbose, true);
+}
+
+rc_t CKDirectory::CreateNonExistingDir(const string &path,
+    uint32_t access, bool verbose, bool checkExistance) const
+{
+    const char *str = path.c_str();
+
+    if (checkExistance) {
+        if (verbose) {
+            OUTMSG(("checking whether %s exists... ", str));
+        }
+        if (Exists(str)) {
+            if (verbose) {
+                OUTMSG(("found\n"));
+            }
+            return 0;
+        }
+    }
+
+    if (verbose) {
+        OUTMSG(("creating... "));
+    }
+
+    rc_t rc = KDirectoryCreateDir(m_Self, access,
+        (kcmCreate | kcmParents), str);
+    if (verbose) {
+        if (rc == 0) {
+            OUTMSG(("ok\n"));
+        }
+        else {
+            OUTMSG(("failed\n"));
+        }
+    }
+
+    return rc;
+}
+
+rc_t CKDirectory::CreateNonExistingDir(const CString &path,
+    uint32_t access, bool verbose) const
+{
+    const String *str = path.Get();
+    if (str == NULL) {
+        return 0;
+    }
+
+    if (verbose) {
+        OUTMSG(("checking whether %S exists... ", str));
+    }
+
+    if (Exists(str->addr)) {
+        if (verbose) {
+            OUTMSG(("found\n"));
+        }
+        return 0;
+    }
+
+    if (verbose) {
+        OUTMSG(("creating... "));
+    }
+
+    rc_t rc = KDirectoryCreateDir(m_Self, access,
+        (kcmCreate | kcmParents), str->addr);
+    if (verbose) {
+        if (rc == 0) {
+            OUTMSG(("ok\n"));
+        }
+        else {
+            OUTMSG(("failed\n"));
+        }
+    }
+
+    return rc;
+}
+
+rc_t CKConfig::Commit(void) const {
+    if (!m_Updated) {
+        return 0;
+    }
+
+    return KConfigCommit(m_Self);
+}
+
+rc_t CKConfig::CreateRemoteRepositories(bool fix) {
+    rc_t rc = UpdateNode("/repository/remote/main/CGI/resolver-cgi",
+        "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi");
+
+    if (fix) {
+        const string name("/repository/remote/main/CGI/disabled");
+        if (NodeExists(name)) {
+            rc_t r2 = UpdateNode(name.c_str(), "false");
+            if (r2 != 0 && rc == 0) {
+                rc = r2;
+            }
+        }
+    }
+
+    rc_t r2 = UpdateNode("/repository/remote/protected/CGI/resolver-cgi",
+        "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi");
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    if (fix) {
+        const string name("/repository/remote/disabled");
+        if (NodeExists(name)) {
+            rc_t r2 = UpdateNode(name.c_str(), "false");
+            if (r2 != 0 && rc == 0) {
+                rc = r2;
+            }
+        }
+    }
+
+    return rc;
+}
+
+rc_t CKConfig::CreateUserRepository(string repoName, bool fix) {
+    if (repoName.size() == 0) {
+        repoName = "public";
+    }
+    CString cRoot(ReadString("/repository/user/default-path"));
+    string root;
+    if (cRoot.Empty()) {
+        root = "$(HOME)/ncbi";
+    }
+    else {
+        root = cRoot.GetString();
+    }
+
+    std::ostringstream s;
+    s << "/repository/user/" << (repoName == "public" ? "main" : "protected")
+        << "/" << repoName;
+    string repoNode(s.str());
+    string name(repoNode + "/root");
+    bool toFix = true;
+    if (fix) {
+        toFix = !NodeExists(name);
+    }
+    rc_t rc = 0;
+    if (toFix) {
+        rc = UpdateNode(name, (root + "/public").c_str());
+    }
+
+    rc_t r2 = UpdateNode(repoNode + "/apps/file/volumes/flat", "files");
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    r2 = UpdateNode(repoNode + "/apps/sra/volumes/sraFlat", "sra");
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    if (repoName == "public") {
+        r2 = UpdateNode(repoNode + "/apps/nakmer/volumes/nakmerFlat", "nannot");
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+
+        r2 = UpdateNode(repoNode + "/apps/nannot/volumes/nannotFlat", "nannot");
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+
+        r2 = UpdateNode(repoNode + "/apps/refseq/volumes/refseq", "refseq");
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+
+        r2 = UpdateNode(repoNode + "/apps/wgs/volumes/wgsFlat", "wgs");
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+    }
+
+    r2 = UpdateNode(repoNode + "/cache-enabled", "true");
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    return rc;
+}
+
+rc_t CKConfig::DisableRemoteRepository(bool disable) {
+    const char *value = disable ? "true" : "false";
+    rc_t rc = UpdateNode(m_RepositoryRemoteMainDisabled, value);
+
+    rc_t r2 = UpdateNode(m_RepositoryRemoteAuxDisabled, value);
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    return rc;
+}
+
+bool CKConfig::IsRemoteRepositoryDisabled(void) const {
+    const CString disabled(ReadString(m_RepositoryRemoteMainDisabled));
+
+    if (disabled.Equals("true")) {
+        const CString disabled(ReadString(m_RepositoryRemoteAuxDisabled));
+        return disabled.Equals("true");
+    }
+
+    return false;
+}
+
+bool CKConfig::NodeExists(const string &path) const {
+    const KConfigNode *n = OpenNodeRead(path.c_str());
+    if (n == NULL) {
+        return false;
+    }
+    KConfigNodeRelease(n);
+    return true;
+}
+
+const KConfigNode* CKConfig::OpenNodeRead(const char *path, ...) const {
+    va_list args;
+    va_start(args, path);
+
+    const KConfigNode *node = NULL;
+    rc_t rc = KConfigVOpenNodeRead(m_Self, &node, path, args);
+
+    va_end(args);
+
+    if (rc != 0) {
+        return NULL;
+    }
+
+    return node;
+}
+
+const String* CKConfig::ReadString(const char *path) const {
+    String *result = NULL;
+    rc_t rc = KConfigReadString(m_Self, path, &result);
+
+    if (rc != 0) {
+        return NULL;
+    }
+    return result;
+}
+
+void CKConfig::Reload(bool verbose) {
+    if (verbose) {
+        OUTMSG(("reloading configuration... "));
+    }
+
+    rc_t rc = KConfigRelease(m_Self);
+    m_Self = NULL;
+
+    if (rc == 0) {
+        rc = KConfigMake(&m_Self, NULL);
+    }
+
+    if (rc == 0) {
+        if (verbose) {
+            OUTMSG(("ok\n"));
+        }
+    }
+    else {
+        if (verbose) {
+            OUTMSG(("failed\n"));
+        }
+        throw rc;
+    }
+}
+
+rc_t CKConfig::UpdateNode(const char *path,
+    const char *buffer, bool verbose, size_t size)
+{
+    if (DEBUG) {
+        OUTMSG(("CKConfig::UpdateNode(%s, %s, %d)\n", path, buffer, size));
+    }
+
+    if (verbose) {
+        OUTMSG(("%s = ... ", path));
+    }
+
+    if (size == (size_t)~0) {
+        size = string_size(buffer);
+    }
+
+    KConfigNode *node = NULL;
+    rc_t rc = KConfigOpenNodeUpdate(m_Self, &node, path);
+// TODO do not write empty node if node itself is empty
+    if (rc == 0) {
+        rc = KConfigNodeWrite(node, buffer, size);
+    }
+    if (rc == 0) {
+        m_Updated = true;
+    }
+    RELEASE(KConfigNode, node);
+
+    if (rc == 0) {
+        if (verbose) {
+            OUTMSG(("\"%s\"\n", buffer));
+        }
+    }
+    else {
+        if (verbose) {
+            OUTMSG(("failed: %R\n", buffer, rc));
+        }
+        else {
+            OUTMSG(("%s = ... failed: %R\n", path, rc));
+        }
+    }
+
+    return rc;
+}
+
+rc_t CKConfig::UpdateUserRepositoryRootPath(const CString &path) {
+    const String *str = path.Get();
+
+    if (str == NULL) {
+        return 0;
+    }
+    return UpdateUserRepositoryRootPath(str->addr, str->size);
+}
+
+rc_t StringRelease(const String *self) {
+    free((void*)self);
+    return 0;
+}
+
+rc_t CSplitter::Test(void) {
+    String s;
+    {   StringInit(&s, NULL, 0, 0);
+        CSplitter p(&s);
+        assert(!p.HasNext());
+    }
+    {   CONST_STRING(&s, "");
+        CSplitter p(&s);
+        assert(!p.HasNext());
+    }
+    {
+        CONST_STRING(&s, "a");
+        CSplitter p(&s);
+        assert(p.HasNext());
+        assert(p.Next() == "a");
+        assert(!p.HasNext());
+    }
+    {
+        CONST_STRING(&s, "a:");
+        CSplitter p(&s);
+        assert(p.HasNext());
+        assert(p.Next() == "a");
+        assert(!p.HasNext());
+    }
+    {
+        CONST_STRING(&s, "a::");
+        CSplitter p(&s);
+        assert(p.HasNext());
+        assert(p.Next() == "a");
+        assert(!p.HasNext());
+    }
+    {
+        CONST_STRING(&s, "::a::");
+        CSplitter p(&s);
+        assert(p.HasNext());
+        assert(p.Next() == "a");
+        assert(!p.HasNext());
+    }
+    {
+        CONST_STRING(&s, "aa:bbb");
+        CSplitter p(&s);
+        assert(p.HasNext());
+        assert(p.Next() == "aa");
+        assert(p.HasNext());
+        assert(p.Next() == "bbb");
+        assert(!p.HasNext());
+    }   return 0;
+}
+
+CUserConfigData::CUserConfigData(const CUserRepositories &repos,
+        const CString &dflt)
+    : m_DefaultRoot(dflt.GetString())
+    , m_CurrentRoot(repos.GetMainPublicRoot())
+    , m_CacheEnabled(repos.IsMainPublicCacheEnabled())
+{}
+
+rc_t CKDirectory::CreateNonExistingPublicDir(bool verbose,
+    const char *path, ...) const
+{
+    va_list args;
+    va_start(args, path);
+
+    rc_t rc = CreateNonExistingDir(verbose, m_PublicAccess, path, args);
+
+    va_end(args);
+
+    return rc;
+}
+
+bool CKDirectory::IsDirectory(const char *path, ...) const {
+    va_list args;
+    va_start(args, path);
+
+    KPathType type = KDirectoryVPathType(m_Self, path, args);
+
+    va_end(args);
+
+    return type == kptDir;
+}
+
+bool CKDirectory::Exists(const CString &path) const {
+    const String *str = path.Get();
+
+    if (str == NULL) {
+        return false;
+    }
+    return Exists(str->addr);
+}
+
+rc_t CKDirectory::CheckPublicAccess(const CString &path, bool verbose) const {
+    bool updated = false;
+    return CheckAccess(path, updated, false, verbose);
+}
+
+rc_t CKConfig::UpdateNode(bool verbose,
+    const char *value, const char *name, ...)
+{
+    va_list args;
+    va_start(args, name);
+
+    char dst[4096] = "";
+    size_t num_writ = 0;
+    rc_t rc = string_vprintf(dst, sizeof dst, &num_writ, name, args);
+    if (rc == 0) {
+        rc = UpdateNode(dst, value, verbose);
+    }
+
+    va_end(args);
+
+    return rc;
+}
+
+rc_t CKConfig::FixResolverCgiNodes ( void ) {
+    rc_t rc = KConfigFixMainResolverCgiNode ( m_Self );
+    rc_t r2 = KConfigFixProtectedResolverCgiNode  ( m_Self );
+    if ( rc == 0 && r2 == 0 ) {
+        m_Updated = true;
+    } else {
+        if ( rc == 0 ) {
+            rc = r2;
+        }
+    }
+    return rc;
+}
+
+CApp::CApp(const CKDirectory &dir, const CKConfigNode &rep,
+        const string &root, const string &name)
+    : m_HasVolume(false)
+    , m_AppVolPath("apps/" + name + "/volumes")
+{
+    const KConfigNode *vols = rep.OpenNodeRead(m_AppVolPath);
+    KNamelist *typeNames = NULL;
+    rc_t rc = KConfigNodeListChildren(vols, &typeNames);
+    if (rc != 0) {
+        return;
+    }
+    uint32_t count = 0;
+    rc = KNamelistCount(typeNames, &count);
+    if (rc == 0) {
+        for (uint32_t idx = 0; idx < count; ++idx) {
+            const char *typeName = NULL;
+            rc = KNamelistGet(typeNames, idx, &typeName);
+            if (rc != 0) {
+                continue;
+            }
+            const KConfigNode *alg = NULL;
+            rc = KConfigNodeOpenNodeRead(vols, &alg, typeName);
+            if (rc != 0) {
+                continue;
+            }
+            String *volList = NULL;
+            rc = KConfigNodeReadString(alg, &volList);
+            if (rc == 0) {
+                if (volList != NULL && volList->addr != NULL) {
+                    m_Volumes[typeName]
+                        = CAppVolume(typeName, volList->addr);
+                }
+                CSplitter volArray(volList);
+                while (volArray.HasNext()) {
+                    const string vol(volArray.Next());
+                    if (dir.IsDirectory("%s/%s", root.c_str(), vol.c_str()))
+                    {
+                        m_HasVolume = true;
+                        break;
+                    }
+                }
+            }
+            RELEASE(String, volList);
+            RELEASE(KConfigNode, alg);
+        }
+    }
+    RELEASE(KNamelist, typeNames);
+    RELEASE(KConfigNode, vols);
+}
+
+rc_t CRepository::Update(CKConfig &kfg, string &node, bool verbose) {
+    char root[4096] = "";
+    rc_t rc = string_printf(root, sizeof root, NULL, "/repository/%s/%s/%s",
+        m_Category.c_str(), m_SubCategory.c_str(), m_Name.c_str());
+    if (rc != 0) {
+        OUTMSG(("ERROR\n"));
+        return rc;
+    }
+
+    if (DEBUG) {
+        OUTMSG(("CRepository::Update: root = %s\n", root));
+    }
+
+    node.assign(root);
+
+    for (CApps::TCI it = m_Apps.begin(); it != m_Apps.end(); ++it) {
+        rc_t r2 = (*it).second->Update(kfg, root, verbose);
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+    }
+
+    rc_t r2 = kfg.UpdateNode(verbose, m_Root.c_str(), "%s/root", root);
+    if (r2 != 0 && rc == 0) {
+        rc = r2;
+    }
+
+    return rc;
+}
+
+CRepository::CRepository(const string &category, const string &type,
+        const string &name, const string &root)
+    : m_Disabled(false)
+    , m_Category(category)
+    , m_SubCategory(type)
+    , m_Name(name)
+    , m_Root(root)
+{}
+
+CRepository::CRepository(const CKDirectory &dir, const CKConfigNode &repo,
+        const string &category, const string &subCategory,
+        const string &name)
+    : m_Disabled(false)
+    , m_Category(category)
+    , m_SubCategory(subCategory)
+    , m_Name(name)
+    , m_Root(repo.ReadString("root"))
+{
+    m_Apps.Update(dir, repo, m_Root, "sra");
+    m_Apps.Update(dir, repo, m_Root, "refseq");
+    string disabled(repo.ReadString("disabled"));
+    if (disabled == "true") {
+        m_Disabled = true;
+    }
+}
+
+string CRepository::Dump(void) const {
+    char node[4096] = "";
+    rc_t rc = string_printf(node, sizeof node, NULL,
+        "/repository/%s/%s/%s", m_Category.c_str(),
+        m_SubCategory.c_str(), m_Name.c_str(), m_Root.c_str());
+    if (rc != 0) {
+        OUTMSG(("ERROR\n"));
+        return "";
+    }
+
+    for (CApps::TCI it = m_Apps.begin(); it != m_Apps.end(); ++it) {
+        (*it).second->Dump(node);
+    }
+
+    if (m_Root.size() > 0) {
+        OUTMSG(("%s/root = \"%s\"\n", node, m_Root.c_str()));
+    }
+
+    return node;
+}
+
+bool CRepository::Is(const string &subCategory, const string &name)
+    const
+{
+    if (name.size() <= 0) {
+        return m_SubCategory == subCategory;
+    }
+
+    return m_SubCategory == subCategory && m_Name == name;
+}
+
+string CRemoteRepository::GetRoot(const string &stack, char needle)
+{
+    if (EndsWith(stack, needle)) {
+        return "";
+    }
+    else {
+        return stack;
+    }
+}
+
+string CRemoteRepository::GetCgi(const string &stack, char needle)
+{
+    if (EndsWith(stack, needle)) {
+        return stack;
+    }
+    else {
+        return "";
+    }
+}
+
+bool CRemoteRepository::EndsWith(const string &stack, char needle) {
+    if (stack.size() <= 0) {
+        return false;
+    }
+    return stack[stack.size() - 1] == needle;
+}
+
+rc_t CRemoteRepository::Fix(CKConfig &kfg, bool disable, bool verbose) {
+    if (verbose) {
+        OUTMSG(("checking %s %s remote repository\n",
+            GetCategory().c_str(), GetSubCategory().c_str()));
+    }
+
+    Disable(disable);
+
+    if (Is("main")) {
+        m_ResolverCgi
+            = "https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi";
+        ClearApps();
+    }
+    else {
+        m_ResolverCgi = "";
+        FixApps();
+        SetRoot("https://ftp-trace.ncbi.nlm.nih.gov/sra");
+    }
+
+    return Update(kfg);
+}
+
+rc_t CUserRepository::Fix(CKConfig &kfg,
+    const CUserConfigData *data, const string *root)
+{
+    Disable(false);
+
+    if (DEBUG) {
+        OUTMSG((__FILE__ " CUserRepository::Fix: data = %d\n", data));
+    }
+
+    if (data != NULL) {
+        m_CacheEnabled = data->GetCacheEnabled();
+        const string root(data->GetCurrentRoot());
+        if (root.size() > 0) {
+            if (DEBUG) {
+                OUTMSG((__FILE__ " CUserRepository::Fix: SetRoot to %s\n",
+                    root.c_str()));
+            }
+            SetRoot(root);
+        }
+    }
+    else {
+        m_CacheEnabled = true;
+        assert(root);
+        SetRoot(*root);
+    }
+
+    FixApps();
+
+    return Update(kfg, DEBUG);
+}
+
+rc_t CUserRepositories::Load(const CKConfig &kfg, const CKDirectory &dir) {
+    const string category("main");
+
+    OUTMSG(("loading %s user repository... ", category.c_str()));
+    const KConfigNode *userNode = kfg.OpenNodeRead
+        ("/repository/user/%s", category.c_str());
+    if (userNode == NULL) {
+        OUTMSG(("not found\n"));
+        return 0;
+    }
+    const CKConfigNode user(userNode);
+    KNamelist *userNames = NULL;
+    rc_t rc  = KConfigNodeListChildren(userNode, &userNames);
+    if (rc != 0) {
+        OUTMSG(("failed\n"));
+    }
+    uint32_t count = 0;
+    if (rc == 0) {
+        rc = KNamelistCount(userNames, &count);
+    }
+    if (rc != 0) {
+        OUTMSG(("failed\n"));
+    }
+    for (uint32_t idx = 0; idx < count && rc == 0; ++idx) {
+        const char *userName = NULL;
+        rc = KNamelistGet(userNames, idx, &userName);
+        if (rc != 0) {
+            rc = 0;
+            continue;
+        }
+        OUTMSG(("%s ", userName));
+        const KConfigNode *userRepo = user.OpenNodeRead(userName);
+        if (userRepo == NULL) {
+            continue;
+        }
+        CKConfigNode node(userRepo);
+        push_back(new CUserRepository(dir, node, category, userName));
+    }
+    RELEASE(KNamelist, userNames);
+
+    if (rc == 0) {
+        OUTMSG(("ok\n"));
+    }
+    else {
+        OUTMSG(("failed\n"));
+    }
+
+    return rc;
+}
+
+const CUserRepository *CUserRepositories::FindMainPublic(void) const {
+    for (TCI it = begin(); it != end(); ++it) {
+        CUserRepository *r = *it;
+        assert(r);
+        if (DEBUG) {
+            OUTMSG(("MainPublic not found\n"));
+        }
+        if (r->Is("main", "public")) {
+            return r;
+        }
+    }
+
+    return NULL;
+}
+
+rc_t CUserRepositories::MkAppVolumes(const CKDirectory &dir, bool verbose)
+    const
+{
+    rc_t rc = 0;
+
+    for (TCI it = begin(); it != end(); ++it) {
+        CUserRepository *r = *it;
+        assert(r);
+        const string root(r->GetRoot());
+        if (root.size() <= 0) {
+            continue;
+        }
+
+        for (CApps::TCI it = r->AppsBegin(); it != r->AppsEnd(); ++it) {
+            const CApp *a = (*it).second;
+            assert(a);
+            //a->Dump("a->Dump");
+            for (CApp::TCAppVolumesCI it = a->VolumesBegin();
+                it != a->VolumesEnd(); ++it)
+            {
+                const CAppVolume &v((*it).second);
+                const string path(v.GetPath());
+                if (path.size() <= 0) {
+                    continue;
+                }
+                CSplitter s(path);
+                while (s.HasNext()) {
+                    rc_t r2 = dir.CreateNonExistingPublicDir
+                        (verbose, "%s/%s", root.c_str(), s.Next().c_str());
+                    if (r2 != 0 && rc == 0) {
+                        rc = r2;
+                    }
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+rc_t CRemoteRepositories::Load(const CKConfig &kfg, const CKDirectory &dir) {
+    rc_t rc = 0;
+    for (int i = 0; i < 2; ++i) {
+        string category;
+        switch (i) {
+            case 0:
+                category = "main";
+                break;
+            case 1:
+                category = "aux";
+                break;
+            default:
+                assert(0);
+                break;
+        }
+        OUTMSG(("loading %s remote repository... ", category.c_str()));
+        const KConfigNode *remoteNode = kfg.OpenNodeRead
+            ("/repository/remote/%s", category.c_str());
+        if (remoteNode == NULL) {
+            OUTMSG(("not found\n"));
+            continue;
+        }
+        const CKConfigNode remote(remoteNode);
+        KNamelist *remoteNames = NULL;
+        rc  = KConfigNodeListChildren(remoteNode, &remoteNames);
+        if (rc != 0) {
+            OUTMSG(("failed\n"));
+        }
+        uint32_t count = 0;
+        if (rc == 0) {
+            rc = KNamelistCount(remoteNames, &count);
+        }
+        if (rc != 0) {
+            OUTMSG(("failed\n"));
+        }
+        for (uint32_t idx = 0; idx < count && rc == 0; ++idx) {
+            const char *remoteName = NULL;
+            rc = KNamelistGet(remoteNames, idx, &remoteName);
+            if (rc != 0) {
+                rc = 0;
+                continue;
+            }
+            OUTMSG(("%s ", remoteName));
+            const KConfigNode *remoteRepo = remote.OpenNodeRead(remoteName);
+            if (remoteRepo == NULL) {
+                continue;
+            }
+            CKConfigNode node(remoteRepo);
+            push_back(new CRemoteRepository(dir,
+                node, category, remoteName));
+        }
+        RELEASE(KNamelist, remoteNames);
+        if (rc == 0) {
+            OUTMSG(("ok\n"));
+        }
+        else {
+            OUTMSG(("failed\n"));
+        }
+    }
+    return rc;
+}
+
+void CRemoteRepositories::Fix(CKConfig &kfg, bool disable, bool verbose) {
+    CRemoteRepository *main = NULL;
+    CRemoteRepository *protectd = NULL;
+
+    for (TCI it = begin(); it != end(); ++it) {
+        CRemoteRepository *r = *it;
+        assert(r);
+        bool toDisable = disable;
+        const string category(r->GetCategory());
+        if (category == "aux") {
+            continue;
+        }
+        else if (category == "main") {
+            main = r;
+        }
+        else if (category == "protected") {
+            protectd = r;
+            toDisable = false;
+        }
+        r->Fix(kfg, toDisable, verbose);
+    }
+
+    const string cgi
+        ("https://www.ncbi.nlm.nih.gov/Traces/names/names.cgi");
+    if (main == NULL) {
+        main = new CRemoteRepository("main", "CGI", cgi);
+        main->Fix(kfg, disable);
+        push_back(main);
+    }
+
+    if (protectd == NULL) {
+        protectd = new CRemoteRepository("protected", "CGI", cgi);
+        if (verbose) {
+            OUTMSG(("creating %s %s remote repository\n",
+                protectd->GetSubCategory().c_str(),
+                protectd->GetName().c_str()));
+        }
+        protectd->Fix(kfg, false);
+        push_back(protectd);
+    }
+}
diff --git a/tools/vdb-config/util.hpp b/tools/vdb-config/util.hpp
new file mode 100644
index 0000000..e657df9
--- /dev/null
+++ b/tools/vdb-config/util.hpp
@@ -0,0 +1,703 @@
+#ifndef _hpp_tools_vdb_config_util_
+#define _hpp_tools_vdb_config_util_
+
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/out.h> /* OUTMSG */
+#include <klib/printf.h> /* string_printf */
+#include <klib/text.h> /* String */
+
+#include <kfg/config.h> /* KConfig */
+#include <kfs/directory.h> /* KDirectory */
+
+#include <kfs/file.h> /* KFile */
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include <cstring>
+
+static const bool DEBUG(false);
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+
+class CNoncopyable {
+public:
+    CNoncopyable(void) {}
+protected:
+    ~CNoncopyable(void) {}
+private:
+    // Prohibit copy constructor and assignment operator
+    CNoncopyable(const CNoncopyable&);
+    const CNoncopyable& operator=(const CNoncopyable&);
+};
+
+rc_t StringRelease(const String *self);
+
+class CString : CNoncopyable {
+    const String *m_Self;
+
+public:
+    CString(const String *self) : m_Self(self) {}
+
+    ~CString() { free((void*)m_Self); }
+
+    const String* Get(void) const { return m_Self; }
+    std::string GetString(void) const {
+        const char *s = GetCString();
+        if (s == NULL)
+            return "";
+        return s;
+    }
+    const char* GetCString(void) const {
+        if (Empty())
+            return NULL;
+        return m_Self->addr;
+    }
+
+    bool Empty(void) const {
+        return
+            m_Self == NULL || m_Self->addr == NULL || m_Self->addr[0] == '\0';
+    }
+
+    bool Equals(const CString &aString) const {
+        const String *string = aString.Get();
+
+        if (m_Self == NULL && string == NULL)
+            return true;
+        return StringEqual(m_Self, string);
+    }
+
+    bool Equals(const char *buffer, size_t bsize = ~0) const {
+        if (bsize == (size_t)~0) {
+            bsize = string_size(buffer);
+        }
+
+        if (m_Self == NULL) {
+            return buffer == NULL || bsize == 0;
+        }
+
+        String s;
+        StringInit(&s, buffer, bsize, (uint32_t)bsize + 1);
+
+        return StringEqual(m_Self, &s);
+    }
+};
+
+class CStdIn : CNoncopyable {
+    const KFile *m_Self;
+    uint64_t m_Pos;
+
+public:
+    CStdIn(void) : m_Self(NULL), m_Pos(0) {
+        rc_t rc = KFileMakeStdIn(&m_Self);
+        if (rc != 0) {
+            throw rc;
+        }
+    }
+
+    ~CStdIn(void) { KFileRelease(m_Self); }
+
+    char Read1(void) {
+        char buf[9] = "";
+        rc_t rc = Read(buf, sizeof buf);
+        if (rc != 0) {
+            return -1;
+        }
+        return buf[0];
+    }
+
+    rc_t Read(char *buffer, size_t bsize, size_t *num_read = NULL);
+};
+
+class CKDirectory : CNoncopyable {
+    KDirectory *m_Self;
+    const uint32_t m_PrivateAccess;
+    const uint32_t m_PublicAccess;
+public:
+    CKDirectory(void)
+        : m_Self(NULL), m_PrivateAccess(0700), m_PublicAccess(0775)
+    {
+        rc_t rc  = KDirectoryNativeDir(&m_Self);
+        if (rc != 0)
+            throw rc;
+    }
+    ~CKDirectory() { KDirectoryRelease(m_Self); }
+    rc_t CheckPrivateAccess(const CString &path, bool &updated, bool verbose)
+        const
+    {   return CheckAccess(path, updated, true, verbose); }
+    rc_t CheckPublicAccess(const CString &path, bool verbose = false) const;
+    rc_t CreateNonExistingPrivateDir(const CString &path, bool verbose = false)
+        const
+    {   return CreateNonExistingDir(path, m_PrivateAccess, verbose); }
+    rc_t CreateNonExistingPublicDir(bool verbose, const char *path, ...) const;
+    rc_t CreateNonExistingPublicDir(const std::string &path,
+        bool verbose = false) const
+    {   return CreateNonExistingDir(path, m_PublicAccess, verbose, true); }
+    rc_t CreateNonExistingPublicDir(const CString &path, bool verbose = false)
+        const
+    {   return CreateNonExistingDir(path, m_PublicAccess, verbose); }
+    rc_t CreatePublicDir(const std::string &path, bool verbose = false) {
+        return CreateNonExistingDir(path, m_PublicAccess, verbose, false);
+    }
+    rc_t CanWriteFile(const CString &dir, bool verbose = false) const;
+    bool Exists(const std::string &path) const { return Exists(path.c_str()); }
+    bool Exists(const CString &path) const;
+    bool IsDirectory(const std::string &path) const {
+        return IsDirectory(path.c_str());
+    }
+    bool IsDirectory(const char *path, ...) const;
+private:
+    bool Exists(const char *path) const
+    {   return KDirectoryPathType(m_Self, path) != kptNotFound; }
+    rc_t CreateNonExistingDir(const CString &path,
+        uint32_t access, bool verbose) const;
+    rc_t CreateNonExistingDir(const std::string &path,
+        uint32_t access, bool verbose, bool chekExistance) const;
+    rc_t CreateNonExistingDir(bool verbose,
+        uint32_t access, const char *path, va_list args) const;
+    rc_t CheckAccess(const CString &path, bool &updated, bool isPrivate,
+        bool verbose = false) const;
+};
+
+class CKConfigNode : CNoncopyable {
+    const KConfigNode *m_Self;
+
+public:
+    CKConfigNode(const KConfigNode *self)
+        : m_Self(self)
+    {}
+
+    ~CKConfigNode(void) {
+        KConfigNodeRelease(m_Self);
+    }
+
+    const KConfigNode* OpenNodeRead(const std::string &path) const {
+        const KConfigNode *node = NULL;
+        rc_t rc = KConfigNodeOpenNodeRead(m_Self, &node, path.c_str());
+        if (rc != 0) {
+            return NULL;
+        }
+        return node;
+    }
+
+    bool ReadBool(const std::string &path) const {
+        return ReadString(path) == "true";
+    }
+
+    std::string ReadString(const std::string &path) const {
+        const KConfigNode *node = NULL;
+        rc_t rc = KConfigNodeOpenNodeRead(m_Self, &node, path.c_str());
+        if (rc != 0) {
+            return "";
+        }
+
+        String *result = NULL;
+        rc = KConfigNodeReadString(node, &result);
+        std::string r;
+        if (rc == 0) {
+            assert(result);
+            r = result->addr;
+        }
+
+        RELEASE(String, result);
+        RELEASE(KConfigNode, node);
+
+        return r;
+    }
+};
+
+class CKConfig : CNoncopyable {
+    KConfig *m_Self;
+    bool m_Updated;
+    const char *m_RepositoryRemoteAuxDisabled;
+    const char *m_RepositoryRemoteMainDisabled;
+    const char *m_RepositoryUserRoot;
+public:
+    CKConfig(bool verbose = false)
+        : m_Self(NULL), m_Updated(false)
+        , m_RepositoryRemoteAuxDisabled ("repository/remote/aux/NCBI/disabled")
+        , m_RepositoryRemoteMainDisabled("repository/remote/main/CGI/disabled")
+        , m_RepositoryUserRoot          ("repository/user/main/public/root")
+    {
+        if (verbose)
+            OUTMSG(("loading configuration... "));
+        rc_t rc = KConfigMake(&m_Self, NULL);
+        if (rc == 0) {
+            if (verbose)
+                OUTMSG(("ok\n"));
+        }
+        else {
+            if (verbose)
+                OUTMSG(("failed\n"));
+            throw rc;
+        }
+    }
+    ~CKConfig(void)
+    { KConfigRelease(m_Self); }
+    KConfig* Get(void) const { return m_Self; }
+    void Reload(bool verbose = false);
+    rc_t Commit(void) const;
+    const KConfigNode* OpenNodeRead(const char *path, ...) const;
+    bool IsRemoteRepositoryDisabled(void) const;
+    const String* ReadDefaultConfig(void) const
+    {   return ReadString("/config/default"); }
+    const String* ReadHome(void) const { return ReadString("HOME"); }
+    const String* ReadNcbiHome(void) const { return ReadString("NCBI_HOME"); }
+    const String* ReadUserRepositoryRootPath(void) const
+    {   return ReadString(m_RepositoryUserRoot); }
+    rc_t DisableRemoteRepository(bool disable);
+    rc_t UpdateUserRepositoryRootPath(const CString &path);
+    rc_t UpdateUserRepositoryRootPath(const char *buffer, size_t size) {
+        return UpdateNode(m_RepositoryUserRoot, buffer, false, size);
+    }
+    rc_t FixResolverCgiNodes ( void );
+    bool NodeExists(const std::string &path) const;
+    rc_t UpdateNode(bool verbose, const char *value, const char *name, ...);
+    rc_t UpdateNode(const char *path, const char *buffer,
+        bool verbose = false, size_t size = ~0);
+    rc_t UpdateNode(const std::string &path, const char *buffer) {
+        return UpdateNode(path.c_str(), buffer);
+    }
+    rc_t CreateRemoteRepositories(bool fix = false);
+    rc_t CreateUserRepository(std::string name = "", bool fix = false);
+    const String* ReadString(const char *path) const;
+};
+
+class CSplitter : CNoncopyable {
+    const char *m_Start;
+    size_t m_Size;
+
+public:
+    CSplitter(const std::string &s) : m_Start(s.c_str()), m_Size(s.size()) {}
+    CSplitter(const String *s) : m_Start(NULL), m_Size(0) {
+        if (s == NULL) {
+            return;
+        }
+        m_Start = s->addr;
+        m_Size = s->len;
+        SkipEmpties();
+    }
+    bool HasNext(void) const { return m_Size != 0; }
+    const std::string Next(void) {
+        if (!HasNext()) {
+            return "";
+        }
+        const char *s = m_Start;
+        const char *end = string_chr(m_Start, m_Size, ':');
+        size_t n = m_Size;
+        if (end != NULL) {
+            n = end - m_Start;
+            m_Start = end + 1;
+            if (m_Size >= n + 1) {
+               m_Size -= n + 1;
+            }
+            else {
+               m_Size = 0;
+            }
+        }
+        else {
+            m_Start = NULL;
+            m_Size = 0;
+        }
+        SkipEmpties();
+        return std::string(s, n);
+    }
+    static rc_t Test(void);
+
+private:
+    void SkipEmpties(void) {
+        while (m_Size > 0 && m_Start != NULL && *m_Start == ':') {
+            --m_Size;
+            ++m_Start;
+        }
+    }
+};
+
+class CAppVolume {
+    std::string m_Type;
+    std::string m_Path;
+
+public:
+    CAppVolume(const std::string &type = "", const std::string &path = "")
+        : m_Type(type)
+        , m_Path(path)
+    {}
+
+    std::string GetPath(void) const { return m_Path; }
+
+    rc_t Update(CKConfig &kfg, const char *node,
+        const std::string &appVolPath, bool verbose = false) const
+    {
+        if (DEBUG) {
+            OUTMSG(("CAppVolume::Update(%s, %s)\n", node, appVolPath.c_str()));
+        }
+
+        return kfg.UpdateNode(verbose, m_Path.c_str(),
+            "%s/%s/%s", node, appVolPath.c_str(), m_Type.c_str());
+    }
+
+    void Dump(const char *node, const std::string &appVolPath) const {
+        OUTMSG(("%s/%s/%s = \"%s\"\n", node, appVolPath.c_str(),
+            m_Type.c_str(), m_Path.c_str()));
+    }
+};
+
+class CApp : CNoncopyable {
+    bool m_HasVolume;
+    const std::string m_AppVolPath;
+    typedef std::map<const std::string, CAppVolume> TCAppVolumes;
+    TCAppVolumes m_Volumes;
+
+public:
+    typedef TCAppVolumes::const_iterator TCAppVolumesCI;
+
+    CApp(const std::string &root, const std::string &name,
+            const std::string &type, const std::string &path)
+        : m_HasVolume(false), m_AppVolPath("apps/" + name + "/volumes")
+    {
+        Update(root, name, type, path);
+    }
+    CApp(const CKDirectory &dir, const CKConfigNode &rep,
+            const std::string &root, const std::string &name);
+
+    void Update(const std::string &root, const std::string &name,
+        const std::string &type, const std::string &path)
+    {
+        m_Volumes[type] = CAppVolume(type, path);
+    }
+    void Update(const CKDirectory &dir, const CKConfigNode &rep,
+        const std::string &root, const std::string &name) const
+    {
+        assert(0);
+    }
+    rc_t Update(CKConfig &kfg, const char *node, bool verbose = false) const {
+        rc_t rc = 0;
+        for (TCAppVolumesCI it = m_Volumes.begin(); it != m_Volumes.end(); ++it)
+        {
+            rc_t r2 = (*it).second.Update(kfg, node, m_AppVolPath, verbose);
+            if (r2 != 0 && rc == 0) {
+                rc = r2;
+            }
+        }
+        return rc;
+    }
+    void Dump(const char *node) const {
+        for (TCAppVolumesCI it = m_Volumes.begin(); it != m_Volumes.end(); ++it)
+        {
+            (*it).second.Dump(node, m_AppVolPath);
+        }
+    }
+
+    TCAppVolumesCI VolumesBegin(void) const { return m_Volumes.begin(); }
+    TCAppVolumesCI VolumesEnd(void) const { return m_Volumes.end(); }
+};
+
+class CApps : public std::map<const std::string, CApp*> {
+public:
+    typedef std::map<const std::string, CApp*>::const_iterator TCI;
+    typedef std::map<const std::string, CApp*>::iterator TI;
+
+    ~CApps(void) {
+        for (TCI it = begin(); it != end(); ++it) {
+            delete((*it).second);
+        }
+    }
+
+    void Update(const CKDirectory &dir, const CKConfigNode &rep,
+        const std::string &root, const std::string &name)
+    {
+        TCI it = find(name);
+        if (it == end()) {
+            insert(std::pair<const std::string, CApp*>
+                (name, new CApp(dir, rep, root, name)));
+        }
+        else {
+            (*it).second->Update(dir, rep, root, name);
+        }
+    }
+
+    void Update(const std::string &root, const std::string &name,
+        const std::string &type, const std::string &path)
+    {
+        if (DEBUG) {
+            OUTMSG(("CApps.Update(%s)\n", name.c_str()));
+        }
+
+        TI it = find(name);
+        if (it == end()) {
+            if (DEBUG) {
+                OUTMSG(("CApps.Update(not found)\n"));
+            }
+            insert(std::pair<const std::string, CApp*>
+                (name, new CApp(root, name, type, path)));
+        }
+        else {
+            if (DEBUG) {
+                OUTMSG(("CApps.Update(found)\n"));
+            }
+            (*it).second->Update(root, name, type, path);
+        }
+    }
+};
+
+class CRepository : CNoncopyable {
+    bool m_Disabled;
+    const std::string m_Category;    // user/site/remote
+    const std::string m_SubCategory; // main/aux/protected
+    const std::string m_Name;
+    std::string m_Root;
+    CApps m_Apps;
+
+    bool RootExists(void) const { return m_Root.size() > 0; }
+
+protected:
+    CRepository(const std::string &category, const std::string &type,
+            const std::string &name, const std::string &root);
+    CRepository(const CKDirectory &dir, const CKConfigNode &repo,
+            const std::string &category, const std::string &subCategory,
+            const std::string &name);
+
+    void SetRoot(const std::string &root) { m_Root = root; }
+    void FixFileVolume(void)
+    {   m_Apps.Update(m_Root, "file", "flat", "files"); }
+    void FixNakmerVolume(const std::string &name,
+        const std::string &path)
+    {   m_Apps.Update(m_Root, "nakmer", name, path); }
+    void FixNannotVolume(const std::string &name,
+        const std::string &path)
+    {   m_Apps.Update(m_Root, "nannot", name, path); }
+    void FixRefseqVolume(void)
+    {   m_Apps.Update(m_Root, "refseq", "refseq", "refseq"); }
+    void FixRefseqVolume(const std::string &name,
+        const std::string &path)
+    {   m_Apps.Update(m_Root, "sra", name, path); }
+    void FixWgsVolume(const std::string &name)
+    {   m_Apps.Update(m_Root, "wgs", name, "wgs"); }
+    rc_t Update(CKConfig &kfg, std::string &node, bool verbose = false);
+
+public:
+    void ClearApps(void) { m_Apps.clear(); }
+    virtual std::string Dump(void) const;
+    bool Is(const std::string &subCategory, const std::string &name = "")
+        const;
+    std::string GetCategory(void) const { return m_Category; }
+    std::string GetSubCategory(void) const { return m_SubCategory; }
+    std::string GetName(void) const { return m_Name; }
+    std::string GetRoot(void) const { return m_Root; }
+    void Disable(bool disable) { m_Disabled = disable; }
+
+    CApps::TCI AppsBegin(void) const { return m_Apps.begin(); }
+    CApps::TCI AppsEnd(void) const { return m_Apps.end(); }
+};
+
+class CRemoteRepository : public CRepository {
+    std::string m_ResolverCgi;
+
+    static bool EndsWith(const std::string &stack, char needle);
+    static std::string GetCgi(const std::string &stack, char needle);
+    static std::string GetRoot(const std::string &stack, char needle);
+    void FixApps(void) {
+        FixNakmerVolume("fuseNAKMER", "sadb");
+        FixNannotVolume("fuseNANNOT", "sadb");
+        FixRefseqVolume();
+        FixRefseqVolume("fuse1000", "sra-instant/reads/ByRun/sra");
+        FixWgsVolume("fuseWGS");
+    }
+    rc_t Update(CKConfig &kfg, bool verbose = false) {
+        std::string node;
+        rc_t rc = CRepository::Update(kfg, node, verbose);
+        if (rc != 0) {
+            return rc;
+        }
+        return kfg.UpdateNode(verbose,
+            m_ResolverCgi.c_str(), "%s/resolver-cgi", node.c_str());
+    }
+
+public:
+    CRemoteRepository(const CKDirectory &dir, const CKConfigNode &repo,
+            const std::string &type, const std::string &name)
+        : CRepository(dir, repo, "remote", type, name)
+        , m_ResolverCgi(repo.ReadString("resolver-cgi"))
+    {}
+    CRemoteRepository(const std::string &category,
+            const std::string &name, const std::string &root)
+        : CRepository("remote", category, name, GetRoot(root, 'i'))
+        , m_ResolverCgi(GetCgi(root, 'i'))
+    {
+        if (m_ResolverCgi.size() == 0) {
+            FixApps();
+        }
+    }
+
+    virtual std::string Dump(void) const {
+        std::string node(CRepository::Dump());
+        if (m_ResolverCgi.size() > 0) {
+            OUTMSG(("%s/resolver-cgi = \"%s\"\n",
+                node.c_str(), m_ResolverCgi.c_str()));
+        }
+        return node;
+    }
+    rc_t Fix(CKConfig &kfg, bool disable, bool verbose = false);
+};
+
+class CUserRepositories;
+class CUserConfigData :  CNoncopyable {
+    std::string m_DefaultRoot;
+    std::string m_CurrentRoot;
+    bool m_CacheEnabled;
+
+public:
+    CUserConfigData(const CUserRepositories &repos, const CString &dflt);
+
+    std::string GetCurrentRoot(void) const { return m_CurrentRoot; }
+    std::string GetDefaultRoot(void) const { return m_DefaultRoot; }
+    bool GetCacheEnabled(void) const { return m_CacheEnabled; }
+
+    void SetCurrentRoot(const std::string &path) { m_CurrentRoot = path; }
+    void SetCacheEnabled(bool enabled) { m_CacheEnabled = enabled; }
+};
+
+class CUserRepository : public CRepository {
+    bool m_CacheEnabled;
+
+    void FixApps(void) {
+        FixFileVolume();
+        FixNakmerVolume("nakmerFlat", "nannot");
+        FixNannotVolume("nannotFlat", "nannot");
+        FixRefseqVolume();
+        FixRefseqVolume("sraFlat", "sra");
+        FixWgsVolume("wgsFlat");
+    }
+    rc_t Fix(CKConfig &kfg,
+        const CUserConfigData *data, const std::string *root);
+    rc_t Update(CKConfig &kfg, bool verbose = false) {
+        std::string node;
+        rc_t rc = CRepository::Update(kfg, node, verbose);
+        if (rc != 0) {
+            return rc;
+        }
+        return kfg.UpdateNode(verbose, m_CacheEnabled ? "true" : "false",
+            "%s/cache-enabled", node.c_str());
+    }
+
+public:
+    CUserRepository(const CKDirectory &dir, const CKConfigNode &repo,
+            const std::string &type, const std::string &name)
+        : CRepository(dir, repo, "user", type, name)
+        , m_CacheEnabled(repo.ReadBool("cache-enabled"))
+    {}
+    CUserRepository(const std::string &category,
+            const std::string &name, const std::string &root)
+        : CRepository("user", category, name, root), m_CacheEnabled(true)
+    {
+        FixApps();
+    }
+
+    virtual std::string Dump(void) const {
+        const std::string node(CRepository::Dump());
+        OUTMSG(("%s/cache-enabled = \"%s\"\n", node.c_str(),
+            m_CacheEnabled ? "true" : "false"));
+        return node;
+    }
+
+    bool IsCacheEnabled(void) const { return m_CacheEnabled; }
+    void Fix(CKConfig &kfg, const std::string &root) { Fix(kfg, NULL, &root); }
+    void Fix(CKConfig &kfg, const CUserConfigData *data) {
+        Fix(kfg, data, NULL);
+    }
+};
+
+class CUserRepositories : std::vector<CUserRepository*> {
+    typedef std::vector<CUserRepository*>::const_iterator TCI;
+    typedef std::vector<CUserRepository*>::iterator TI;
+    const CUserRepository *FindMainPublic(void) const;
+
+public:
+    ~CUserRepositories(void) {
+        for (TCI it = begin(); it != end(); ++it) {
+            free(*it);
+        }
+    }
+
+    rc_t Load(const CKConfig &kfg, const CKDirectory &dir);
+    std::string GetMainPublicRoot(void) const {
+        const CUserRepository *r = FindMainPublic();
+        if (r == NULL) {
+            return "";
+        }
+        return r->GetRoot();
+    }
+    bool IsMainPublicCacheEnabled(void) const {
+        const CUserRepository *r = FindMainPublic();
+        if (r == NULL) {
+            return true;
+        }
+        return r->IsCacheEnabled();
+    }
+    void Fix(CKConfig &kfg, const CUserConfigData &data) {
+        bool publicMainFound = false;
+        for (TI it = begin(); it != end(); ++it) {
+            CUserRepository *r = *it;
+            assert(r);
+            if (r->Is("main", "public")) {
+                r->Fix(kfg, &data);
+                publicMainFound = true;
+            }
+            else {
+                r->Fix(kfg, data.GetDefaultRoot());
+            }
+        }
+        if (!publicMainFound) {
+            CUserRepository *r = new CUserRepository("main", "public", "");
+            r->Fix(kfg, &data);
+            push_back(r);
+        }
+    }
+    rc_t MkAppVolumes(const CKDirectory &dir, bool verbose = false)
+        const;
+};
+
+class CRemoteRepositories : std::vector<CRemoteRepository*> {
+    typedef std::vector<CRemoteRepository*>::const_iterator TCI;
+
+public:
+    ~CRemoteRepositories(void) {
+        for (TCI it = begin(); it != end(); ++it) { free(*it); }
+    }
+
+    rc_t Load(const CKConfig &kfg, const CKDirectory &dir);
+
+    bool IsDisabled(void) const { return false; }
+    void Fix(CKConfig &kfg, bool disable, bool verbose = false);
+};
+
+
+#endif // _hpp_tools_vdb_config_util_
diff --git a/tools/vdb-config/vdb-config-model.cpp b/tools/vdb-config/vdb-config-model.cpp
new file mode 100644
index 0000000..3b5815a
--- /dev/null
+++ b/tools/vdb-config/vdb-config-model.cpp
@@ -0,0 +1,463 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-config-model.hpp" // vdbconf_model
+
+#include <klib/vector.h> /* Vector */
+
+#include <cstring> // memset
+
+#include <climits> /* PATH_MAX */
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+using std::string;
+
+const int32_t vdbconf_model::kPublicRepoId = -1;
+const int32_t vdbconf_model::kInvalidRepoId = -2;
+
+
+std::string vdbconf_model::native_to_internal( const std::string &s ) const
+{
+    std::string res = "";
+    VPath * temp_v_path;
+    rc_t rc = VFSManagerMakeSysPath ( _vfs_mgr, &temp_v_path, s.c_str() );
+    if ( rc == 0 )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc = VPathReadPath ( temp_v_path, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+            res.assign( buffer, written );
+        VPathRelease ( temp_v_path );
+    }
+    return res;
+}
+
+std::string vdbconf_model::internal_to_native( const std::string &s ) const
+{
+    std::string res = "";
+    VPath * temp_v_path;
+    rc_t rc = VFSManagerMakePath ( _vfs_mgr, &temp_v_path, "%s", s.c_str() );
+    if ( rc == 0 )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc = VPathReadSysPath ( temp_v_path, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+            res.assign( buffer, written );
+        VPathRelease ( temp_v_path );
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_http_proxy_path( void ) const {
+    char buffer[ PATH_MAX ] = "";
+    rc_t rc = KConfig_Get_Http_Proxy_Path(_config, buffer, sizeof buffer, NULL);
+    if (rc == 0) {
+        return buffer;
+    }
+    else {
+        return "";
+    }
+}
+
+
+bool vdbconf_model::does_site_repo_exist( void ) const
+{
+    KRepositoryVector repositories;
+    memset( &repositories, 0, sizeof repositories );
+    rc_t rc = KRepositoryMgrSiteRepositories( _mgr, &repositories );
+    bool res = ( ( rc == 0 ) && ( VectorLength( &repositories ) > 0 ) );
+    KRepositoryVectorWhack( &repositories );
+    return res;
+}
+
+
+int32_t vdbconf_model::get_repo_id( const string & repo_name ) const
+{
+    if ( repo_name == "public" )
+        return kPublicRepoId;
+
+    uint32_t id = 0;
+    rc_t rc = KConfigGetProtectedRepositoryIdByName( _config, repo_name.c_str(), &id );
+    if ( rc != 0 )
+        return kInvalidRepoId;
+    else
+        return id;
+}
+
+
+std::string vdbconf_model::get_repo_name( uint32_t id ) const
+{
+    std::string res = "";
+    if ( _config_valid )
+    {
+        size_t written;
+        char buffer[ 1024 ];
+        rc_t rc = KConfigGetProtectedRepositoryName( _config, id, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+            res.assign( buffer, written );
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_repo_description(const string &repo_name) const
+{
+    size_t written = 0;
+    char buffer[ 1024 ];
+    rc_t rc = KConfigGetProtectedRepositoryDescriptionByName( _config,
+        repo_name.c_str(), buffer, sizeof buffer, &written );
+    if ( rc == 0 )
+        return string( buffer, written );
+    else
+        return "";
+}
+
+std::string vdbconf_model::get_repo_location( uint32_t id ) const
+{
+    std::string res = "";
+    if ( _config_valid )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc_t rc = KConfigGetProtectedRepositoryPathById( _config, id, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+        {
+            res.assign( buffer, written );
+            res = internal_to_native( res );
+        }
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_public_location( void ) const
+{
+    std::string res = "";
+    if ( _config_valid )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc_t rc = KConfig_Get_User_Public_Cache_Location( _config, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+        {
+            res.assign( buffer, written );
+            res = internal_to_native( res );
+        }
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_current_dir( void ) const
+{
+    std::string res = "./";
+    char buffer[ PATH_MAX ];
+    rc_t rc = KDirectoryResolvePath ( _dir, true, buffer, sizeof buffer, "./" );
+    if ( rc == 0 )
+    {
+        res.assign( buffer );
+        res = internal_to_native( res );
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_home_dir( void ) const
+{
+    std::string res = "";
+    if ( _config_valid )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc_t rc = KConfig_Get_Home( _config, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+        {
+            res.assign( buffer, written );
+            res = internal_to_native( res );
+        }
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_user_default_dir( void ) const
+{
+    std::string res = "";
+    if ( _config_valid )
+    {
+        size_t written;
+        char buffer[ PATH_MAX ];
+        rc_t rc = KConfig_Get_Default_User_Path( _config, buffer, sizeof buffer, &written );
+        if ( rc == 0 )
+        {
+            res.assign( buffer, written );
+            res = internal_to_native( res );
+        }
+    }
+    return res;
+}
+
+
+std::string vdbconf_model::get_ngc_root( std::string &base, const KNgcObj * ngc ) const
+{
+    std::string res = "";
+    size_t written;
+    char buffer[ PATH_MAX ];
+    rc_t rc = KNgcObjGetProjectName ( ngc, buffer, sizeof buffer, &written );
+    if ( rc == 0 )
+    {
+        res = native_to_internal( base ) + '/' + buffer;
+        res = internal_to_native( res );
+    }
+    return res;
+}
+
+
+static rc_t CC s_IsEmpty( const KDirectory * dir, uint32_t type, const char * name, void * data )
+{
+    if ( ( type & ~kptAlias) != kptDir )
+        return 1;
+    else
+        return 0;
+}
+
+// repoId == kPublicRepoId is for the public repository
+ESetRootState vdbconf_model::x_ChangeRepoLocation( const string &native_newPath,
+    bool reuseNew, int32_t repoId, bool flushOld )
+{
+/*rc_t CC KDirectoryResolvePath_v1 ( const KDirectory_v1 *self, bool absolute,
+    char *resolved, size_t rsize, const char *path, ... )
+    resolve ~
+    and ~user */
+    // old root path
+
+    if ( native_newPath.size() == 0 )
+        return eSetRootState_NewPathEmpty;
+
+    std::string newPath = native_to_internal( native_newPath );
+
+    string oldPath;
+
+    if ( repoId != kInvalidRepoId )
+    {
+        if ( repoId == kPublicRepoId )
+            oldPath = get_public_location();
+        else if ( repoId >= 0 )
+            oldPath = get_repo_location( repoId );
+        else
+            return eSetRootState_Error;
+
+        if ( oldPath.size() == newPath.size() )
+        {
+            // make sure new path is different from the old one
+            if ( oldPath == newPath )
+                return eSetRootState_NotChanged;
+        }
+
+        // old root path should not be empty - just ignore it now
+        if ( oldPath.size() > 0 )
+        {
+            KPathType type = KDirectoryPathType( _dir, oldPath.c_str() );
+            if ( ( type & ~kptAlias ) == kptDir )
+            {
+                rc_t rc = KDirectoryVisit ( _dir, true, s_IsEmpty, NULL, oldPath.c_str() );
+                if ( rc != 0 && !flushOld )
+                {
+                    // warn if the old repo is not empty and flush was not asked
+                    return eSetRootState_OldNotEmpty;
+                }
+            }
+        }
+    }
+
+    KPathType type = KDirectoryPathType( _dir, newPath.c_str() );
+    uint32_t access = 0775;
+    switch ( type & ~kptAlias )
+    {
+        case kptNotFound :
+            {
+                // create non existing new repository directory
+                rc_t rc = KDirectoryCreateDir( _dir, access, (kcmCreate | kcmParents), newPath.c_str() );
+                if ( rc != 0 )
+                    return eSetRootState_MkdirFail;
+            }
+            break;
+
+        case kptDir :
+            {
+                rc_t rc = KDirectoryVisit( _dir, true, s_IsEmpty, NULL, newPath.c_str() );
+                if ( rc != 0 && !reuseNew )
+                    // warn if the new repo is not empty and resuse was not asked
+                    return eSetRootState_NewDirNotEmpty;
+            }
+            break;
+
+        // error: new repository exists and it is not a directory
+        default : return eSetRootState_NewNotDir;
+    }
+
+    // create apps subdirectories
+    const char *apps[] = { "files", "nannot", "refseq", "sra", "wgs", NULL };
+    for ( const char **p = apps; *p; ++p )
+    {
+        KPathType type = KDirectoryPathType( _dir, "%s/%s", newPath.c_str(), *p );
+        switch ( type & ~kptAlias )
+        {
+            case kptNotFound : KDirectoryCreateDir( _dir, access, kcmCreate, "%s/%s", newPath.c_str(), *p );
+            case kptDir : break;
+            default : return eSetRootState_Error;
+        }
+    }
+
+    // update repository root configiration
+    if ( repoId == kPublicRepoId )
+        KConfig_Set_User_Public_Cache_Location( _config, newPath.c_str() );
+    else if ( repoId >= 0 )
+        KConfigSetProtectedRepositoryPathById( _config, repoId, newPath.c_str() );
+
+    if ( repoId != kInvalidRepoId )
+    {
+        // flush the old repository
+        for ( const char **p = apps; *p; ++p )
+        {
+            // completely remove all old apps subdirectories
+            KDirectoryRemove( _dir, true, "%s/%s", oldPath.c_str(), *p );
+        }
+        // remove all old repository directory if it is empty now
+        KDirectoryRemove( _dir, false, oldPath.c_str() );
+    }
+
+    return eSetRootState_OK;
+}
+
+ESetRootState vdbconf_model::set_repo_location(uint32_t id,
+    bool flushOld, const string &path, bool reuseNew)
+{
+    ESetRootState res = x_ChangeRepoLocation( path, reuseNew, id, flushOld );
+    _config_changed = true;
+    return res;
+}
+
+ESetRootState vdbconf_model::set_public_location(
+    bool flushOld, string &path, bool reuseNew)
+{
+    ESetRootState res = x_ChangeRepoLocation( path, reuseNew, kPublicRepoId, flushOld );
+    _config_changed = true;
+    return res;
+}
+
+ESetRootState vdbconf_model::change_repo_location(bool flushOld,
+    const string &newPath, bool reuseNew, int32_t repoId)
+{
+    ESetRootState res = x_ChangeRepoLocation( newPath, reuseNew, repoId, flushOld );
+    _config_changed = true;
+    return res;
+}
+
+ESetRootState vdbconf_model::prepare_repo_directory
+    (const string &newPath, bool reuseNew)
+{
+    ESetRootState res = x_ChangeRepoLocation( newPath, reuseNew, kInvalidRepoId );
+    _config_changed = true;
+    return res;
+}
+
+#if TDB
+bool check_locations_unique(KRepositoryVector *nonUniqueRepos,
+    const string &newRootPath)
+{
+    assert(nonUniqueRepos);
+    KRepositoryVectorWhack(nonUniqueRepos);
+
+    KRepositoryVector repositories;
+    memset(&repositories, 0, sizeof repositories);
+    rc_t rc = KRepositoryMgrUserRepositories(_mgr, &repositories);
+    uint32_t len = 0;
+    if (rc == 0) {
+        len = VectorLength(&repositories);
+    }
+    std::map<const string, const KRepository*> roots;
+    typedef std::map<const string, const KRepository*>::const_iterator TCI;
+    if (len > 0) {
+        for (uint32_t i = 0; i < len; ++i) {
+            const KRepository *repo = static_cast<const KRepository*>
+                (VectorGet(&repositories, i));
+            if (repo != NULL) {
+                char buffer[PATH_MAX] = "";
+                size_t size = 0;
+                rc = KRepositoryRoot(repo, buffer, sizeof buffer, &size);
+                if (rc == 0) {
+                    const string root(buffer);
+                    TI it = find(root);
+                    if (it == end()) {
+                        insert(std::pair<const string, const KRepository*>
+                            (root, repo));
+                    }
+                    else {
+                        if (VectorLength(nonUniqueRepos) == 0) {
+                            const KRepository *r = KRepositoryAddRef(repo);
+                            if (r != NULL) {
+              /*ignored rc = */ VectorAppend(repositories, NULL, r);
+                            }
+                        }
+                        const KRepository *found = (*it);
+                        const KRepository *r = KRepositoryAddRef(found);
+                    }
+                }
+            }
+        }
+    }
+    KRepositoryVectorWhack( &repositories );
+}
+#endif
+
+bool vdbconf_model::import_ngc( const std::string &native_location,
+    const KNgcObj *ngc, uint32_t permissions, uint32_t * result_flags )
+{
+    bool res = false;
+
+    if ( _config_valid )
+    {
+        KRepositoryMgr * repo_mgr;
+        rc_t rc = KConfigMakeRepositoryMgrUpdate ( _config, &repo_mgr );
+        if ( rc == 0 )
+        {
+            std::string location = native_to_internal( native_location);
+
+            rc = KRepositoryMgrImportNgcObj( repo_mgr, ngc,
+                location.c_str(), permissions, result_flags );
+            res = ( rc == 0 );
+            KRepositoryMgrRelease( repo_mgr );
+        }
+    }
+
+    return res;
+}
diff --git a/tools/vdb-config/vdb-config-model.hpp b/tools/vdb-config/vdb-config-model.hpp
new file mode 100644
index 0000000..f294a42
--- /dev/null
+++ b/tools/vdb-config/vdb-config-model.hpp
@@ -0,0 +1,473 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_config_model_
+#define _h_vdb_config_model_
+
+#include <kfg/config.h>
+#include <kfg/properties.h>
+#include <kfg/repository.h>
+#include <kfg/ngc.h>
+#include <kfs/directory.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <string>
+
+enum ESetRootState {
+    eSetRootState_OK,            // successfully changed repository root
+    eSetRootState_NotChanged,    // the new path is the same as the old one
+    eSetRootState_NotUnique,   // there is another repository with the same root
+    eSetRootState_MkdirFail,     // failed to make new repository directory
+    eSetRootState_NewPathEmpty,  // new repository directory path is not empty
+    eSetRootState_NewDirNotEmpty,// new repository directory is not empty
+    eSetRootState_NewNotDir,     // new repository exists and is not a directory
+    eSetRootState_OldNotEmpty,   // old repository is not empty
+    eSetRootState_Error,         // some unusual error happened
+};
+
+/*
+    a c++ class the encapsulates the connection to 
+*/
+
+class vdbconf_model
+{
+    public :
+        static const int32_t kPublicRepoId;
+        static const int32_t kInvalidRepoId;
+
+        vdbconf_model( KConfig * config )
+            : _config( config )
+            , _config_valid( _config != NULL )
+            , _config_changed( false )
+            , _dir( NULL )
+            , _mgr( NULL )
+            , _vfs_mgr( NULL )
+        {
+            if ( KConfigAddRef( config ) != 0 )
+            {
+                _config = NULL;
+                _config_valid = false;
+            }
+
+            assert(_config && _config_valid);
+
+            rc_t rc = KDirectoryNativeDir(&_dir);
+            if ( rc != 0 ) throw rc;
+
+            rc = KConfigMakeRepositoryMgrRead( _config, &_mgr );
+            if ( rc != 0 ) throw rc;
+
+            rc = VFSManagerMake ( &_vfs_mgr );
+        }
+
+        ~vdbconf_model( void )
+        {
+            if ( _config_valid ) {
+                KConfigRelease ( _config );
+                _config = NULL;
+            }
+
+            KRepositoryMgrRelease(_mgr);
+            _mgr = NULL;
+
+            KDirectoryRelease(_dir);
+            _dir = NULL;
+
+            VFSManagerRelease ( _vfs_mgr );
+            _vfs_mgr = NULL;
+        }
+
+        // ----------------------------------------------------------------
+        std::string native_to_internal( const std::string &s ) const;
+        std::string internal_to_native( const std::string &s ) const;
+
+        bool get_config_changed( void ) const { return _config_changed; }
+
+        // ----------------------------------------------------------------
+
+        bool is_http_proxy_enabled( void ) const {
+            bool enabled = true;
+            KConfig_Get_Http_Proxy_Enabled(_config, &enabled, true);
+			if ( enabled )
+			{
+				std::string path = get_http_proxy_path();
+				if ( path.empty() ) enabled = false;
+			}
+            return enabled;
+        }
+
+        void set_http_proxy_enabled( bool enabled ) {
+            KConfig_Set_Http_Proxy_Enabled(_config, enabled);
+			_config_changed = true;
+        }
+
+        std::string get_http_proxy_path( void ) const;
+
+        void set_http_proxy_path(const std::string &path) {
+            KConfig_Set_Http_Proxy_Path(_config, path.c_str());
+			_config_changed = true;
+        }
+
+        bool has_http_proxy_env_higher_priority( void ) const {
+            bool enabled = false;
+            KConfig_Has_Http_Proxy_Env_Higher_Priority(_config, &enabled);
+            return enabled;
+        }
+        void set_http_proxy_env_higher_priority( bool value ) {
+            KConfig_Set_Http_Proxy_Env_Higher_Priority(_config, value);
+			_config_changed = true;
+        }
+
+        // ----------------------------------------------------------------
+        bool is_remote_enabled( void ) const
+        {
+            bool res = false;
+
+            rc_t rc = KConfig_Get_Remote_Access_Enabled( _config, &res );
+            if (rc == 0) {
+                return res;
+            }
+
+            KConfig_Get_Remote_Main_Cgi_Access_Enabled( _config, &res );
+            if (!res) {
+                return res;
+            }
+
+            KConfig_Get_Remote_Aux_Ncbi_Access_Enabled( _config, &res );
+
+            return res;
+        }
+
+        void set_remote_enabled( bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfig_Set_Remote_Access_Enabled( _config, enabled );
+                _config_changed = true;
+            }
+        }
+
+        // ----------------------------------------------------------------
+        bool does_site_repo_exist( void ) const;
+
+        bool is_site_enabled( void ) const
+        {
+            bool res = false;
+            if ( _config_valid ) KConfig_Get_Site_Access_Enabled( _config, &res ); 
+            return res;
+        }
+        void set_site_enabled( bool enabled )
+        {
+            if ( does_site_repo_exist() && _config_valid )
+            {
+                KConfig_Set_Site_Access_Enabled( _config, enabled );
+                _config_changed = true;
+            }
+        }
+
+        // ----------------------------------------------------------------
+        /* THIS IS NEW AND NOT YET IMPLEMENTED IN CONFIG: global cache on/off !!! */
+        bool is_global_cache_enabled( void ) const
+        {
+            bool res = true;
+            if ( _config_valid )
+            {
+                bool is_disabled;
+                rc_t rc = KConfigReadBool ( _config, "/repository/user/cache-disabled", &is_disabled );
+                if ( rc == 0 )
+                    res = !is_disabled;
+            }
+            return res;
+        }
+
+        void set_global_cache_enabled( bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfigWriteBool( _config, "/repository/user/cache-disabled", !enabled );
+                _config_changed = true;
+            }
+        }
+
+  // ----------------------------- //
+  // ADD DEFINE IF YOU NEED IT !!! //
+  // ----------------------------- //
+        bool is_user_enabled( void ) const
+        {
+            bool res = true;
+#ifdef ALLOW_USER_REPOSITORY_DISABLING
+            if ( _config_valid ) KConfig_Get_User_Access_Enabled( _config, &res ); 
+#endif
+            return res;
+        }
+        void set_user_enabled( bool enabled )
+        {
+#ifdef ALLOW_USER_REPOSITORY_DISABLING
+            if ( _config_valid ) KConfig_Set_User_Access_Enabled( _config, enabled );
+#endif
+        }
+
+        // ----------------------------------------------------------------
+        bool is_user_cache_enabled( void ) const
+        {
+            bool res = false;
+            if ( _config_valid ) KConfig_Get_User_Public_Cached( _config, &res ); 
+            return res;
+        }
+        void set_user_cache_enabled( bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfig_Set_User_Public_Cached( _config, enabled );
+                _config_changed = true;
+            }
+        }
+
+        // ----------------------------------------------------------------
+        uint32_t get_repo_count( void ) const
+        {
+            uint32_t res = 0;
+            if ( _config_valid ) KConfigGetProtectedRepositoryCount( _config, &res );
+            return res;
+        }
+
+
+        /* Returns:
+         *  kInvalidRepoId if not found,
+         *  kPublicRepoId for the user public repository
+         *  protected repository id otherwise
+         */
+        int32_t get_repo_id( const std::string & repo_name ) const;
+
+        std::string get_repo_name( uint32_t id ) const;
+        std::string get_repo_description( const std::string & repo_name ) const;
+
+        bool is_protected_repo_enabled( uint32_t id ) const
+        {
+            bool res = true;
+#ifdef ALLOW_USER_REPOSITORY_DISABLING
+            if ( _config_valid ) KConfigGetProtectedRepositoryEnabledById( _config, id, &res ); 
+#endif
+            return res;
+        }
+        void set_protected_repo_enabled( uint32_t id, bool enabled )
+        {
+#ifdef ALLOW_USER_REPOSITORY_DISABLING
+            if ( _config_valid ) KConfigSetProtectedRepositoryEnabledById( _config, id, enabled ); 
+#endif
+        }
+
+        bool is_protected_repo_cached( uint32_t id ) const
+        {
+            bool res = true;
+            if ( _config_valid )
+                KConfigGetProtectedRepositoryCachedById( _config, id, &res );
+            return res;
+        }
+
+        void set_protected_repo_cached( uint32_t id, bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfigSetProtectedRepositoryCachedById( _config, id, enabled );
+                _config_changed = true;
+            }
+        }
+
+        bool does_repo_exist( const char * repo_name )
+        {
+            bool res = false;
+            if ( _config_valid ) KConfigDoesProtectedRepositoryExist( _config, repo_name, &res );
+            return res;
+        }
+
+        std::string get_repo_location( uint32_t id ) const;
+
+        ESetRootState set_repo_location( uint32_t id,
+            bool flushOld, const std::string &path, bool reuseNew );
+
+/* ----------------------------------------------------------------
+ * flushOld repository
+ * reuseNew repository: whether to refuse to change location on existing newPath
+ */
+        ESetRootState change_repo_location(bool flushOld,
+            const std::string &newPath, bool reuseNew, int32_t repoId);
+
+        ESetRootState prepare_repo_directory(const std::string &newPath,
+            bool reuseNew = false);
+
+        // ----------------------------------------------------------------
+
+        std::string get_public_location( void ) const;
+
+        ESetRootState set_public_location( bool flushOld, std::string &path, bool reuseNew );
+
+        bool is_user_public_enabled( void ) const
+        {
+            bool res = true;
+            if ( _config_valid ) KConfig_Get_User_Public_Enabled( _config, &res ); 
+            return res;
+        }
+        void set_user_public_enabled( bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfig_Set_User_Public_Enabled( _config, enabled ); 
+                _config_changed = true;
+            }
+        }
+
+        bool is_user_public_cached( void ) const
+        {
+            bool res = true;
+            if ( _config_valid ) KConfig_Get_User_Public_Cached( _config, &res ); 
+            return res;
+        }
+
+        void set_user_public_cached( bool enabled )
+        {
+            if ( _config_valid )
+            {
+                KConfig_Set_User_Public_Cached( _config, enabled ); 
+                _config_changed = true;
+            }
+        }
+
+        // ----------------------------------------------------------------
+        std::string get_current_dir( void ) const;
+        std::string get_home_dir( void ) const;
+
+        std::string get_user_default_dir( void ) const;
+        std::string get_ngc_root( std::string &base, const KNgcObj * ngc ) const;
+
+        void set_user_default_dir( const char * new_default_dir )
+        {
+            if ( _config_valid )
+            {
+                std::string tmp( new_default_dir );
+                tmp = native_to_internal( tmp );
+                KConfig_Set_Default_User_Path( _config, tmp.c_str() );
+                _config_changed = true;
+            }
+        }
+
+        // ----------------------------------------------------------------
+        bool commit( void )
+        {
+            bool res = false;
+            if ( _config_valid )
+            {
+                res = ( KConfigCommit ( _config ) == 0 );
+                if ( res ) _config_changed = false;
+            }
+            return res;
+        }
+
+        // ----------------------------------------------------------------
+        bool import_ngc( const std::string &native_location,
+            const KNgcObj *ngc, uint32_t permissions,
+            uint32_t * result_flags );
+
+        bool get_id_of_ngc_obj( const KNgcObj *ngc, uint32_t * id )
+        {
+            bool res = false;
+            if ( _config_valid )
+            {
+                size_t written;
+                char proj_id[ 512 ];
+                rc_t rc = KNgcObjGetProjectName( ngc, proj_id, sizeof proj_id, &written );
+                if ( rc == 0 )
+                {
+                    rc = KConfigGetProtectedRepositoryIdByName( _config, proj_id, id );
+                    res = ( rc == 0 );
+                }
+            }
+            return res;
+        }
+
+        bool mkdir(const KNgcObj *ngc) {
+            uint32_t id = 0;
+            if (!get_id_of_ngc_obj(ngc, &id)) {
+                return false;
+            }
+
+            const std::string root(get_repo_location(id));
+            if (root.size() == 0) {
+                return false;
+            }
+
+            if (KDirectoryPathType(_dir, root.c_str()) != kptNotFound) {
+                return false;
+            }
+
+            return KDirectoryCreateDir(_dir, 0775,
+                kcmCreate | kcmParents, root.c_str()) == 0;
+        }
+
+        bool does_path_exist( std::string &path )
+        {
+            bool res = false;
+            if ( _dir != NULL )
+            {
+                KPathType type = KDirectoryPathType( _dir, path.c_str() );
+                res = ( ( type & ~kptAlias ) == kptDir );
+            }
+            return res;
+        }
+
+        bool reload( void )
+        {
+            if ( _config_valid )
+            {
+                KRepositoryMgrRelease ( _mgr );
+                _mgr = NULL;
+
+                KConfigRelease ( _config );
+                _config_valid = ( KConfigMake ( &_config, NULL ) == 0 );
+
+                if ( _config_valid )
+                    KConfigMakeRepositoryMgrRead( _config, &_mgr );
+
+                _config_changed = false;
+            }
+            return _config_valid;
+        }
+
+    private :
+        KConfig * _config;
+        bool _config_valid;
+        bool _config_changed;
+
+        KDirectory * _dir;
+        const KRepositoryMgr *_mgr;
+        VFSManager *_vfs_mgr;
+
+        ESetRootState x_ChangeRepoLocation(const std::string &native_newPath,
+            bool reuseNew, int32_t repoId, bool flushOld = false);
+};
+
+#endif
diff --git a/tools/vdb-config/vdb-config.c b/tools/vdb-config/vdb-config.c
new file mode 100644
index 0000000..2b0a917
--- /dev/null
+++ b/tools/vdb-config/vdb-config.c
@@ -0,0 +1,1712 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "configure.h"
+
+#include <kapp/main.h>
+#include <kapp/args-conv.h>
+
+#include <vdb/vdb-priv.h> /* VDBManagerListExternalSchemaModules */
+#include <vdb/manager.h> /* VDBManager */
+
+#include <kfg/kfg-priv.h> /* KConfig */
+#include <kfg/ngc.h> /* KNgcObjMakeFromFile */
+#include <kfg/properties.h> /* KConfig_Get_Default_User_Path */
+#include <kfg/repository.h> /* KConfigImportNgc */
+
+#include <vfs/manager.h> /* VFSManagerMake */
+#include <vfs/path-priv.h> /* KPathGetCWD */
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/impl.h> /* KDirectoryGetSysDir */
+#include <kfs/kfs-priv.h> /* KSysDirOSPath */
+
+#include <klib/log.h> /* LOGERR */
+#include <klib/misc.h> /* is_iser_an_admin */
+#include <klib/namelist.h>
+#include <klib/out.h> /* OUTMSG */
+#include <klib/printf.h> /* string_printf */
+#include <klib/rc.h> /* RC */
+#include <klib/text.h> /* strcase_cmp */
+
+#include <sysalloc.h> /* redefine malloc etc calls */
+#include <os-native.h> /* SHLX */
+
+#include <assert.h>
+#include <ctype.h> /* tolower */
+#include <errno.h>
+#include <stdio.h> /* scanf */
+#include <stdlib.h> /* getenv */
+#include <string.h> /* memset */
+
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt, rc, \
+        "$(name): $(msg)", "name=%s,msg=%s", name, msg)))
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+#define ALIAS_ALL    "a"
+#define OPTION_ALL   "all"
+static const char* USAGE_ALL[] = { "print all information [default]", NULL };
+
+#define ALIAS_CFG    "i"
+#define OPTION_CFG   "interactive"
+static const char* USAGE_CFG[] = {
+    "create/update configuration",
+    NULL };
+
+#define ALIAS_CFM    NULL
+#define OPTION_CFM   "interactive-mode"
+static const char* USAGE_CFM[] = {
+    "interactive mode: 'textual' or 'graphical' (default)",
+    NULL };
+
+#define ALIAS_DIR    "d"
+#define OPTION_DIR   "load-path"
+static const char* USAGE_DIR[] = { "print load path", NULL };
+
+#define ALIAS_ENV    "e"
+#define OPTION_ENV   "env"
+static const char* USAGE_ENV[] = { "print shell variables", NULL };
+
+#define ALIAS_FIL    "f"
+#define OPTION_FIL   "files"
+static const char* USAGE_FIL[] = { "print loaded files", NULL };
+
+#define ALIAS_FIX    NULL
+#define OPTION_FIX   "restore-defaults"
+static const char* USAGE_FIX[] =
+{ "create default or update existing user configuration", NULL };
+
+#define ALIAS_IMP    NULL
+#define OPTION_IMP   "import"
+static const char* USAGE_IMP[] = { "import ngc file", NULL };
+
+#define ALIAS_MOD    "m"
+#define OPTION_MOD   "modules"
+static const char* USAGE_MOD[] = { "print external modules", NULL };
+
+#define ALIAS_OUT    "o"
+#define OPTION_OUT   "output"
+static const char* USAGE_OUT[] = { "output type: one of (x n), "
+    "where 'x' is xml (default), 'n' is native", NULL };
+
+#define ALIAS_PCF    "p"
+#define OPTION_PCF   "cfg"
+static const char* USAGE_PCF[] = { "print current configuration", NULL };
+
+#define ALIAS_CDR    NULL
+#define OPTION_CDR   "cfg-dir"
+static const char* USAGE_CDR[]
+    = { "set directory to load configuration", NULL };
+
+#define ALIAS_PRD    NULL
+#define OPTION_PRD   "proxy-disable"
+static const char* USAGE_PRD[] = { "enable/disable using HTTP proxy", NULL };
+
+#define ALIAS_PRX    NULL
+#define OPTION_PRX   "proxy"
+static const char* USAGE_PRX[]
+    = { "set HTTP proxy server configuration", NULL };
+
+#define ALIAS_ROOT   NULL
+#define OPTION_ROOT  "root"
+static const char* USAGE_ROOT[] =
+    { "enforce configuration update while being run by superuser", NULL };
+
+#define ALIAS_SET    "s"
+#define OPTION_SET   "set"
+static const char* USAGE_SET[] = { "set configuration node value", NULL };
+
+rc_t WorkspaceDirPathConv(const Args * args, uint32_t arg_index, const char * arg, size_t arg_len, void ** result, WhackParamFnP * whack)
+{
+    rc_t rc;
+    uint32_t imp_count;
+    
+    rc = ArgsOptionCount(args, OPTION_IMP, &imp_count);
+    if (rc != 0)
+        return rc;
+    
+    // first parameter is a directory only if OPTION_IMP is present; otherwise it is a query
+    if (imp_count > 0)
+    {
+        return ArgsConvFilepath(args, arg_index, arg, arg_len, result, whack);
+    }
+    
+    return ArgsConvDefault(args, arg_index, arg, arg_len, result, whack);
+}
+
+OptDef Options[] =
+{                                         /* needs_value, required, converter */
+      { OPTION_ALL, ALIAS_ALL, NULL, USAGE_ALL, 1, false, false, NULL }
+    , { OPTION_CDR, ALIAS_CDR, NULL, USAGE_CDR, 1, true , false, NULL }
+    , { OPTION_CFG, ALIAS_CFG, NULL, USAGE_CFG, 1, false, false, NULL }
+    , { OPTION_CFM, ALIAS_CFM, NULL, USAGE_CFM, 1, true , false, NULL }
+    , { OPTION_DIR, ALIAS_DIR, NULL, USAGE_DIR, 1, false, false, NULL }
+    , { OPTION_ENV, ALIAS_ENV, NULL, USAGE_ENV, 1, false, false, NULL }
+    , { OPTION_FIL, ALIAS_FIL, NULL, USAGE_FIL, 1, false, false, NULL }
+    , { OPTION_FIX, ALIAS_FIX, NULL, USAGE_FIX, 1, false, false, NULL }
+    , { OPTION_IMP, ALIAS_IMP, NULL, USAGE_IMP, 1, true , false, ArgsConvFilepath }
+    , { OPTION_MOD, ALIAS_MOD, NULL, USAGE_MOD, 1, false, false, NULL }
+    , { OPTION_OUT, ALIAS_OUT, NULL, USAGE_OUT, 1, true , false, NULL }
+    , { OPTION_PCF, ALIAS_PCF, NULL, USAGE_PCF, 1, false, false, NULL }
+    , { OPTION_PRD, ALIAS_PRD, NULL, USAGE_PRD, 1, true , false, NULL }
+    , { OPTION_PRX, ALIAS_PRX, NULL, USAGE_PRX, 1, true , false, NULL }
+    , { OPTION_SET, ALIAS_SET, NULL, USAGE_SET, 1, true , false, NULL }
+    , { OPTION_ROOT,ALIAS_ROOT,NULL, USAGE_ROOT,1, false, false, NULL }
+};
+
+ParamDef Parameters[] =
+{
+    { WorkspaceDirPathConv }
+};
+
+rc_t CC UsageSummary (const char * progname) {
+    return KOutMsg (
+        "Usage:\n"
+        "  %s [options] [<query> ...]\n\n"
+        "  %s [options] --import <ngc-file> [<workspace directory path>]\n"
+        "\n"
+        "Summary:\n"
+        "  Manage VDB configuration\n"
+        , progname, progname);
+}
+
+rc_t CC Usage(const Args* args) { 
+    rc_t rc = 0;
+
+    const char* progname = UsageDefaultName;
+    const char* fullpath = UsageDefaultName;
+
+    if (args == NULL) {
+        rc = RC(rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
+    }
+    else {
+        rc = ArgsProgram(args, &fullpath, &progname);
+    }
+
+    UsageSummary(progname);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_ALL, OPTION_ALL, NULL, USAGE_ALL);
+    HelpOptionLine (ALIAS_PCF, OPTION_PCF, NULL, USAGE_PCF);
+    HelpOptionLine (ALIAS_FIL, OPTION_FIL, NULL, USAGE_FIL);
+    HelpOptionLine (ALIAS_DIR, OPTION_DIR, NULL, USAGE_DIR);
+    HelpOptionLine (ALIAS_ENV, OPTION_ENV, NULL, USAGE_ENV);
+    HelpOptionLine (ALIAS_MOD, OPTION_MOD, NULL, USAGE_MOD);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_SET, OPTION_SET, "name=value", USAGE_SET);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_CFG, OPTION_CFG, NULL, USAGE_CFG);
+    HelpOptionLine (ALIAS_CFM, OPTION_CFM, "mode", USAGE_CFM);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_FIX, OPTION_FIX, NULL, USAGE_FIX);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_OUT, OPTION_OUT, "x | n", USAGE_OUT);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_PRX, OPTION_PRX, "uri[:port]", USAGE_PRX);
+    HelpOptionLine (ALIAS_PRD, OPTION_PRD, "yes | no", USAGE_PRD);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_CDR, OPTION_CDR, "path", USAGE_CDR);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_ROOT,OPTION_ROOT,NULL, USAGE_ROOT);
+
+    KOutMsg ("\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+const char UsageDefaultName[] = "vdb-config";
+
+static void Indent(bool xml, int n) {
+    if (!xml)
+    {   return; }
+    while (n--)
+    {   OUTMSG(("  ")); }
+}
+
+static rc_t KConfigNodeReadData(const KConfigNode* self,
+    char* buf, size_t blen, size_t* num_read)
+{
+    rc_t rc = 0;
+    size_t remaining = 0;
+    assert(buf && blen && num_read);
+    rc = KConfigNodeRead(self, 0, buf, blen, num_read, &remaining);
+    assert(remaining == 0); /* TODO overflow check */
+    assert(*num_read <= blen);
+    return rc;
+}
+
+static
+rc_t _printNodeData(const char *name, const char *data, size_t dlen)
+{
+    bool secret = false;
+    {
+        const char d1[] = "download-ticket";
+        size_t l1 = sizeof d1 - 1;
+
+        const char d2[] = "aws_access_key_id";
+        size_t l2 = sizeof d2 - 1;
+
+        const char d3[] = "aws_secret_access_key";
+        size_t l3 = sizeof d3 - 1;
+
+        if ((string_cmp(name,
+                string_measure(name, NULL), d1, l1, (uint32_t)l1) == 0) || 
+            (string_cmp(name,
+                string_measure(name, NULL), d2, l2, (uint32_t)l2) == 0) || 
+            (string_cmp(name,
+                string_measure(name, NULL), d3, l3, (uint32_t)l3) == 0))
+        {
+            secret = true;
+        }
+    }
+
+    if (secret) {
+        const char *ellipsis = "";
+        const char replace[] =
+"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
+        if (dlen > 70) {
+            dlen = 70;
+            ellipsis = "...";
+        }
+        return OUTMSG(("%.*s%s", (uint32_t)dlen, replace, ellipsis));
+    }
+    else {
+        return OUTMSG(("%.*s", dlen, data));
+    }
+}
+
+#define VDB_CONGIG_OUTMSG(args) do { if (xml) { OUTMSG(args); } } while (false)
+static rc_t KConfigNodePrintChildNames(bool xml, const KConfigNode* self,
+    const char* name, int indent, const char* aFullpath)
+{
+    rc_t rc = 0;
+    uint32_t count = 0;
+    int i = 0;
+    char buffer[8192] = "";
+    size_t num_read = 0;
+    bool hasChildren = false;
+    bool hasData = false;
+    const KConfigNode* node = NULL;
+    KNamelist* names = NULL;
+    bool beginsWithNumberinXml = false;
+    assert(self && name);
+
+    if (rc == 0)
+    {   rc = KConfigNodeOpenNodeRead(self, &node, "%s", name);  }
+    if (rc == 0) {
+        rc = KConfigNodeReadData(node, buffer, sizeof buffer, &num_read);
+        hasData = num_read > 0;
+        if (hasData) {
+ /* VDB_CONGIG_OUTMSG(("\n%s = \"%.*s\"\n\n", aFullpath, num_read, buffer)); */
+        }
+    }
+    if (rc == 0) {
+        rc = KConfigNodeListChild(node, &names);
+    }
+    if (rc == 0) {
+        rc = KNamelistCount(names, &count);
+        hasChildren = count;
+    }
+
+    Indent(xml, indent);
+    if (xml) {
+        beginsWithNumberinXml = isdigit(name[0]);
+        if (! beginsWithNumberinXml) {
+            VDB_CONGIG_OUTMSG(("<%s", name));
+        }
+        else {
+            /* XML node names cannot start with a number */
+            VDB_CONGIG_OUTMSG(("<_%s", name));
+        }
+    }
+    if (!hasChildren && !hasData) {
+        VDB_CONGIG_OUTMSG(("/>\n"));
+    }
+    else {   VDB_CONGIG_OUTMSG((">"));
+    }
+    if (hasData) {
+        if (xml) {
+            _printNodeData(name, buffer, num_read);
+        }
+        else {
+            OUTMSG(("%s = \"", aFullpath));
+            _printNodeData(name, buffer, num_read);
+            OUTMSG(("\"\n"));
+        }
+    }
+    if (hasChildren)
+    {   VDB_CONGIG_OUTMSG(("\n"));}
+
+    if (hasChildren) {
+        for (i = 0; i < (int)count && rc == 0; ++i) {
+            char* fullpath = NULL;
+            const char* name = NULL;
+            rc = KNamelistGet(names, i, &name);
+            if (rc == 0) {
+                size_t bsize = strlen(aFullpath) + 1 + strlen(name) + 1;
+                fullpath = malloc(bsize + 1);
+                if (fullpath == NULL) {
+                    rc = RC
+                        (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                }
+                else {
+                    string_printf(fullpath, bsize, NULL,
+                        "%s/%s", aFullpath, name);
+                }
+            }
+            if (rc == 0) {
+                rc = KConfigNodePrintChildNames
+                    (xml, node, name, indent + 1, fullpath);
+            }
+            free(fullpath);
+        }
+    }
+
+    if (hasChildren)
+    {   Indent(xml, indent); }
+    if (hasChildren || hasData)
+    {
+        if (! beginsWithNumberinXml) {
+            VDB_CONGIG_OUTMSG(("</%s>\n",name));
+        }
+        else {
+            VDB_CONGIG_OUTMSG(("</_%s>\n",name));
+        }
+    }
+
+    RELEASE(KNamelist, names);
+    RELEASE(KConfigNode, node);
+    return rc;
+}
+
+typedef struct Params {
+    Args* args;
+    uint32_t argsParamIdx;
+    uint32_t argsParamCnt;
+
+    const char *cfg_dir;
+
+    bool xml;
+
+    const char *setValue;
+
+    const char *ngc;
+
+    bool modeSetNode;
+    bool modeConfigure;
+    EConfigMode configureMode;
+    bool modeCreate;
+    bool modeShowCfg;
+    bool modeShowEnv;
+    bool modeShowFiles;
+    bool modeShowLoadPath;
+    bool modeShowModules;
+    bool modeRoot;
+
+    bool showMultiple;
+
+    enum {
+        eUndefined,
+        eNo,
+        eYes
+    } proxyDisabled;
+    const char *proxy;
+} Params;
+static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
+    rc_t rc = 0;
+    Args* args = NULL;
+    int count = 0;
+    assert(argc && argv && prm);
+    memset(prm, 0, sizeof *prm);
+    args = prm->args;
+    do {
+        uint32_t pcount = 0;
+        rc = ArgsMakeAndHandle2(&args, argc, argv, Parameters, sizeof Parameters / sizeof Parameters[0], 1, Options, sizeof Options / sizeof Options[0]);
+        if (rc) {
+            LOGERR(klogErr, rc, "While calling ArgsMakeAndHandle2");
+            break;
+        }
+
+        prm->args = args;
+        rc = ArgsParamCount(args, &prm->argsParamCnt);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get query parameter[s]");
+            break;
+        }
+        if (prm->argsParamCnt > 0) {
+            prm->modeShowCfg = true;
+            ++count;
+        }
+
+        {   // OPTION_OUT
+            prm->xml = true;
+            rc = ArgsOptionCount(args, OPTION_OUT, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+                break;
+            }
+            if (pcount) {
+                const char* dummy = NULL;
+                rc = ArgsOptionValue(args, OPTION_OUT, 0, (const void **)&dummy);
+                if (rc) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+                    break;
+                }
+                if (!strcmp(dummy, "n")) {
+                    prm->xml = false;
+                }
+                else if (strcmp(dummy, "x")) {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc, "Bad " OPTION_OUT " value");
+                    break;
+                }
+            }
+        }
+        {   // OPTION_ENV
+            rc = ArgsOptionCount(args, OPTION_ENV, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_ENV "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeShowEnv = true;
+                ++count;
+            }
+        }
+        {   // OPTION_CDR
+            rc = ArgsOptionCount(args, OPTION_CDR, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_CDR "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                rc = ArgsOptionValue
+                    (args, OPTION_CDR, 0, (const void **)&prm->cfg_dir);
+                if (rc) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_CDR "' argument");
+                    break;
+                }
+            }
+        }
+        {   // OPTION_FIL
+            rc = ArgsOptionCount(args, OPTION_FIL, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_FIL "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                prm->modeShowFiles = true;
+                ++count;
+            }
+        }
+        {   // OPTION_IMP
+            rc = ArgsOptionCount(args, OPTION_IMP, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                rc = ArgsOptionValue(args, OPTION_IMP, 0, (const void **)&prm->ngc);
+                if (rc != 0) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+                    break;
+                }
+                else {
+                     prm->modeShowCfg = false;
+                }
+            }
+        }
+        {   // OPTION_MOD
+            rc = ArgsOptionCount(args, OPTION_MOD, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_MOD "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeShowModules = true;
+                ++count;
+            }
+        }
+#if 0
+        {   // OPTION_NEW
+            rc = ArgsOptionCount(args, OPTION_NEW, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_NEW "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeCreate = true;
+                ++count;
+            }
+        }
+#endif
+        {   // OPTION_PCF
+            rc = ArgsOptionCount(args, OPTION_PCF, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_PCF "' argument");
+                break;
+            }
+            if (pcount) {
+                if (!prm->modeShowCfg) {
+                    prm->modeShowCfg = true;
+                    ++count;
+                }
+            }
+        }
+        {   // OPTION_PRD
+            rc = ArgsOptionCount(args, OPTION_PRD, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_PRD "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                const char *dummy = NULL;
+                rc = ArgsOptionValue(args, OPTION_PRD, 0, (const void **)&dummy);
+                if (rc) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_PRD "' argument");
+                    break;
+                }
+                if (tolower(dummy[0]) == 'y') {
+                    prm->proxyDisabled = eYes;
+                }
+                else if (tolower(dummy[0]) == 'n') {
+                    prm->proxyDisabled = eNo;
+                }
+            }
+        }
+        {   // OPTION_PRX
+            rc = ArgsOptionCount(args, OPTION_PRX, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_PRX "' argument");
+                break;
+            }
+            if (pcount > 0) {
+                rc = ArgsOptionValue(args, OPTION_PRX, 0, (const void **)&prm->proxy);
+                if (rc) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_PRX "' argument");
+                    break;
+                }
+            }
+        }
+        {   // OPTION_DIR
+            rc = ArgsOptionCount(args, OPTION_DIR, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_DIR "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeShowLoadPath = true;
+                ++count;
+            }
+        }
+        {   // OPTION_ROOT
+            rc = ArgsOptionCount(args, OPTION_ROOT, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_ROOT "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeRoot = true;
+            }
+        }
+        {   // OPTION_SET
+            rc = ArgsOptionCount(args, OPTION_SET, &pcount);
+            if (rc != 0) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_SET "' argument");
+                break;
+            }
+            if (pcount) {
+                rc = ArgsOptionValue(args, OPTION_SET, 0, (const void **)&prm->setValue);
+                if (rc == 0) {
+                    const char* p = strchr(prm->setValue, '=');
+                    if (p == NULL || *(p + 1) == '\0') {
+                        rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                        LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+                        break;
+                    }
+                    prm->modeSetNode = true;
+                    prm->modeCreate = prm->modeShowCfg = prm->modeShowEnv
+                        = prm->modeShowFiles = prm->modeShowLoadPath
+                        = prm->modeShowModules = false;
+                    count = 1;
+                }
+            }
+        }
+        {   // OPTION_FIX
+            rc = ArgsOptionCount(args, OPTION_FIX, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_FIX "' argument");
+                break;
+            }
+            if (pcount) {
+                prm->modeConfigure = true;
+                prm->modeShowCfg = false;
+                count = 1;
+                prm->configureMode = eCfgModeDefault;
+            }
+        }
+        {   // OPTION_CFG
+            rc = ArgsOptionCount(args, OPTION_CFG, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_CFG "' argument");
+                break;
+            }
+            if (pcount) {
+#if 1
+                prm->modeConfigure = true;
+                prm->modeShowCfg = false;
+                count = 1;
+                prm->configureMode = eCfgModeVisual;
+
+#else
+                const char* dummy = NULL;
+                rc = ArgsOptionValue(args, OPTION_CFG, 0, (const void **)&dummy);
+                if (rc) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_CFG "' argument");
+                    break;
+                }
+                prm->modeConfigure = true;
+                prm->modeShowCfg = false;
+                count = 1;
+                switch (dummy[0]) {
+                    case 't':
+                        prm->configureMode = eCfgModeTextual;
+                        break;
+                    default:
+                        prm->configureMode = eCfgModeDefault;
+                        break;
+                }
+#endif
+            }
+        }
+        {   // OPTION_CFM
+            rc = ArgsOptionCount(args, OPTION_CFM, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_CFM "' argument");
+                break;
+            }
+            if (pcount) {
+                const char* dummy = NULL;
+                size_t dummy_len;
+                rc = ArgsOptionValue(args, OPTION_CFM, 0, (const void **)&dummy);
+                if (rc) {
+                    LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+                    break;
+                }
+                prm->modeShowCfg = false;
+                count = 1;
+                prm->modeConfigure = true;
+
+                dummy_len = strlen( dummy );
+                if ( dummy_len == 0 )
+                    dummy_len = 1;
+
+                if ( strncmp( dummy, "textual", dummy_len ) == 0 )
+                    prm->configureMode = eCfgModeTextual;
+                else if ( strncmp( dummy, "graphical", dummy_len ) == 0 )
+                    prm->configureMode = eCfgModeVisual;
+                else
+                {
+                    rc = RC( rcExe, rcArgv, rcEvaluating, rcParam, rcInvalid );
+                    LOGERR(klogErr, rc, "Unrecognized '" OPTION_CFM "' argument");
+                    break;
+                }
+            }
+        }
+        {   // OPTION_ALL
+            rc = ArgsOptionCount(args, OPTION_ALL, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument");
+                break;
+            }
+            if (pcount
+                || ( !prm->modeConfigure
+                  && !prm->modeShowCfg && ! prm->modeShowLoadPath
+                  && !prm->modeShowEnv && !prm->modeShowFiles
+                  && !prm->modeShowModules && !prm->modeCreate
+                  && !prm->modeSetNode && prm->ngc == NULL
+                  && prm->proxy == NULL && prm->proxyDisabled == eUndefined))
+                /* show all by default */
+            {
+                prm->modeShowCfg = prm->modeShowEnv = prm->modeShowFiles = true;
+                count += 2;
+            }
+        }
+
+        if (count > 1)  {
+            prm->showMultiple = true;
+        }
+    } while (false);
+
+    return rc;
+}
+
+static rc_t ParamsGetNextParam(Params* prm, const char** param) {
+    rc_t rc = 0;
+    assert(prm && param);
+    *param = NULL;
+    if (prm->argsParamIdx < prm->argsParamCnt) {
+        rc = ArgsParamValue(prm->args, prm->argsParamIdx++, (const void **)param);
+        if (rc)
+        {   LOGERR(klogErr, rc, "Failure retrieving query"); }
+    }
+    return rc;
+}
+
+static rc_t ParamsDestruct(Params* prm) {
+    rc_t rc = 0;
+    assert(prm);
+    RELEASE(Args, prm->args);
+    return rc;
+}
+
+static
+rc_t privReadStdinLine(char* buf, size_t bsize, bool destroy)
+{
+    rc_t rc = 0;
+    static const KFile* std_in = NULL;
+    static uint64_t pos = 0;
+    size_t num_read = 0;
+    if (destroy) {
+        RELEASE(KFile, std_in);
+        pos = 0;
+        return rc;
+    }
+    if (std_in == NULL) {
+        rc = KFileMakeStdIn(&std_in);
+        if (rc != 0) {
+            DISP_RC(rc, "KFileMakeStdIn");
+            return rc;
+        }
+    }
+    rc = KFileRead(std_in, pos, buf, bsize, &num_read);
+    DISP_RC(rc, "KFileRead");
+    pos += num_read;
+    if (num_read) {
+        bool done = false;
+        buf[num_read] = '\0';
+        while (num_read > 0 && !done) {
+            switch (buf[num_read - 1]) {
+                case '\n':
+                case '\r':
+                    buf[--num_read] = '\0';
+                    break;
+                default:
+                    done = true;
+                    break;
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t ReadStdinLine(char* buf, size_t bsize) {
+    return privReadStdinLine(buf, bsize, false);
+}
+
+static rc_t DestroyStdin(void)
+{   return privReadStdinLine(NULL, 0, true); }
+
+static rc_t In(const char* prompt, const char* def, char** read) {
+    rc_t rc = 0;
+    char buf[PATH_MAX + 1];
+    assert(prompt && read);
+    *read = NULL;
+    while (rc == 0 && (*read == NULL || read[0] == '\0')) {
+        OUTMSG(("%s", prompt));
+        if (def)
+        {   OUTMSG((" [%s]", def)); }
+        OUTMSG((": "));
+        rc = ReadStdinLine(buf, sizeof buf);
+        if (rc == 0) {
+            while (strlen(buf) > 0) {
+                char c = buf[strlen(buf) - 1];
+                if (c == '\n' || c == '\r')
+                {   buf[strlen(buf) - 1] = '\0'; }
+                else
+                {   break; }
+            }
+            if (buf[0] == '\0' && def != NULL) {
+                string_copy_measure(buf, sizeof buf, def);
+            }
+            if (buf[0]) {
+                *read = strdup(buf);
+                if (*read == NULL) {
+                    rc = RC
+                        (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t CC scan_config_dir(const KDirectory* dir,
+    uint32_t type, const char* name, void* data)
+{
+    rc_t rc = 0;
+    assert(data);
+    switch (type) {
+        case kptFile:
+        case kptFile | kptAlias: {
+            size_t sz = strlen(name);
+            if (sz >= 5 && strcase_cmp(&name[sz - 4], 4, ".kfg", 4, 4) == 0) {
+                string_copy_measure(data, PATH_MAX + 1, name);
+                                  /* from CreateConfig..KDirectoryVVisit call */
+                rc = RC(rcExe, rcDirectory, rcListing, rcFile, rcExists);
+            }
+            break;
+        }
+    }
+    return rc;
+}
+
+static rc_t CreateConfig(char* argv0) {
+    const KFile* std_in = NULL;
+    KDirectory* native = NULL;
+    KDirectory* dir = NULL;
+    rc_t rc = 0;
+    char* location = NULL;
+    char* mod = NULL;
+    char* wmod = NULL;
+    char* refseq = NULL;
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&native);
+    }
+    if (rc == 0) {
+        const char* def = NULL;
+        char cwd[PATH_MAX + 1] = "";
+        const char* home = getenv("HOME");
+        if (home)
+        {   def = home; }
+        else {
+            rc = KDirectoryResolvePath ( native, true, cwd, sizeof cwd, "." );
+            if (rc == 0 && cwd[0])
+            {   def = cwd; }
+            else
+            {   def = "."; }
+        }
+        while (rc == 0) {
+            char buffer[PATH_MAX + 1];
+            rc = In("Specify configuration files directory", def, &location);
+            if (rc == 0) {
+                rc = KDirectoryOpenDirUpdate(native, &dir, false, "%s", location);
+                if (rc == 0) {
+                    rc = KDirectoryVisit
+                        (dir, false, scan_config_dir, buffer, ".");
+                    if (rc != 0) {
+                        if (rc ==
+                             RC(rcExe, rcDirectory, rcListing, rcFile, rcExists)
+                            && buffer[0])
+                        {
+                            PLOGERR(klogErr, (klogErr, rc,
+                                "Configuration file found: $(dir)/$(name)",
+                                "dir=%s,name=%s", location, buffer));
+                            rc = 0;
+                            buffer[0] = '\0';
+                            continue;
+                        }
+                        else {
+                            PLOGERR(klogErr, (klogErr, rc, "$(dir)/$(name)",
+                                "dir=%s,name=%s", location, buffer));
+                        }
+                    }
+                    break;
+                }
+                else if (GetRCObject(rc) == (enum RCObject)rcPath &&
+                    (GetRCState(rc) == rcIncorrect || GetRCState(rc) == rcNotFound))
+                {
+                    PLOGERR(klogErr,
+                        (klogErr, rc, "$(path)", "path=%s", location));
+                    rc = 0;
+                }
+                else { DISP_RC(rc, location); }
+            }
+        }
+    }
+    while (rc == 0) {
+        const KDirectory* dir = NULL;
+        rc = In("Specify refseq installation directory", NULL, &refseq);
+        if (rc != 0)
+        {   break; }
+        rc = KDirectoryOpenDirRead(native, &dir, false, "%s", refseq);
+        if (rc == 0) {
+            RELEASE(KDirectory, dir);
+            break;
+        }
+        else if (GetRCObject(rc) == (enum RCObject)rcPath
+              && GetRCState(rc) == rcIncorrect)
+        {
+            PLOGERR(klogErr,
+                (klogErr, rc, "$(path)", "path=%s", refseq));
+            rc = 0;
+        }
+        DISP_RC(rc, refseq);
+    }
+    if (rc == 0) {
+        char buffer[512];
+        const char path[] = "vdb-config.kfg";
+        uint64_t pos = 0;
+        KFile* f = NULL;
+        rc = KDirectoryCreateFile(dir, &f, false, 0664, kcmCreate, "%s", path);
+        DISP_RC(rc, path);
+        if (rc == 0) {
+            int n = snprintf(buffer, sizeof buffer,
+                "refseq/servers = \"%s\"\n", refseq);
+            if (n >= sizeof buffer) {
+                rc = RC(rcExe, rcFile, rcWriting, rcBuffer, rcInsufficient);
+            }
+            else {
+                size_t num_writ = 0;
+                rc = KFileWrite(f, pos, buffer, strlen(buffer), &num_writ);
+                pos += num_writ;
+            }
+        }
+        if (rc == 0) {
+            const char buffer[] = "refseq/volumes = \".\"\n";
+            size_t num_writ = 0;
+            rc = KFileWrite(f, pos, buffer, strlen(buffer), &num_writ);
+            pos += num_writ;
+        }
+        if (rc == 0 && mod && mod[0]) {
+            int n = snprintf(buffer, sizeof buffer,
+                "vdb/module/paths = \"%s\"\n", mod);
+            if (n >= sizeof buffer) {
+                rc = RC(rcExe, rcFile, rcWriting, rcBuffer, rcInsufficient);
+            }
+            else {
+                size_t num_writ = 0;
+                rc = KFileWrite(f, pos, buffer, strlen(buffer), &num_writ);
+                pos += num_writ;
+            }
+        }
+        if (rc == 0 && wmod && wmod[0]) {
+            int n = snprintf(buffer, sizeof buffer,
+                "vdb/wmodule/paths = \"%s\"\n", wmod);
+            if (n >= sizeof buffer) {
+                rc = RC(rcExe, rcFile, rcWriting, rcBuffer, rcInsufficient);
+            }
+            else {
+                size_t num_writ = 0;
+                rc = KFileWrite(f, pos, buffer, strlen(buffer), &num_writ);
+                pos += num_writ;
+            }
+        }
+        RELEASE(KFile, f);
+    }
+    free(mod);
+    free(wmod);
+    free(refseq);
+    free(location);
+    RELEASE(KDirectory, dir);
+    RELEASE(KDirectory, native);
+    RELEASE(KFile, std_in);
+    DestroyStdin();
+    return rc;
+}
+
+#if 0
+static rc_t ShowModules(const KConfig* cfg, const Params* prm) {
+    rc_t rc = 0;
+#ifdef _STATIC
+    OUTMSG(("<!-- Modules are not used in static build -->\n"));
+#else
+    const VDBManager* mgr = NULL;
+    KNamelist* list = NULL;
+    OUTMSG(("<!-- Modules -->\n"));
+    rc = VDBManagerMakeRead(&mgr, NULL);
+    DISP_RC(rc, "while calling VDBManagerMakeRead");
+    if (rc == 0) {
+        rc = VDBManagerListExternalSchemaModules(mgr, &list);
+        DISP_RC(rc, "while calling VDBManagerListExternalSchemaModules");
+    }
+    if (rc == 0) {
+        uint32_t count = 0;
+        rc = KNamelistCount(list, &count);
+        DISP_RC(rc, "while calling KNamelistCount "
+            "on VDBManagerListExternalSchemaModules result");
+        if (rc == 0) {
+            int64_t i = 0;
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* name = NULL;
+                rc = KNamelistGet(list, i, &name);
+                DISP_RC(rc, "while calling KNamelistGet "
+                    "on VDBManagerListExternalSchemaModules result");
+                if (rc == 0) {
+                    OUTMSG(("%s\n", name));
+                }
+            }
+        }
+    }
+    OUTMSG(("\n"));
+    RELEASE(KNamelist, list);
+    RELEASE(VDBManager, mgr);
+#endif
+    return rc;
+}
+#endif
+
+static rc_t SetNode(KConfig* cfg, const Params* prm) {
+    rc_t rc = 0;
+
+    KConfigNode* node = NULL;
+    char* name = NULL;
+    char* val  = NULL;
+
+    assert(cfg && prm && prm->setValue);
+
+    if (is_iser_an_admin() && !prm->modeRoot) {
+        rc = RC(rcExe, rcNode, rcUpdating, rcCondition, rcViolated);
+        LOGERR(klogErr, rc, "Warning: "
+            "normally this application should not be run as root/superuser");
+    }
+
+    name = strdup(prm->setValue);
+    if (name == NULL)
+    {   return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+
+    val = strchr(name, '=');
+    if (val == NULL || *(val + 1) == '\0') {
+        rc_t rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+        LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+    }
+
+    if (rc == 0) {
+        *(val++) = '\0';
+
+        rc = KConfigOpenNodeUpdate(cfg, &node, "%s", name);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot open node '$(name)' for update", "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        assert(val);
+        rc = KConfigNodeWrite(node, val, strlen(val));
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot write value '$(val) to node '$(name)'",
+                "val=%s,name=%s", val, name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KConfigCommit(cfg);
+        DISP_RC(rc, "while calling KConfigCommit");
+    }
+
+    free(name);
+    name = NULL;
+
+    RELEASE(KConfigNode, node);
+    return rc;
+}
+
+static rc_t SetProxy(KConfig *cfg, const Params *prm) {
+    rc_t rc = 0;
+
+    bool disabled = false;
+    bool set = false;
+    bool disableSet = false;
+
+    assert(prm);
+
+    switch (prm->proxyDisabled) {
+        case eNo:
+            disabled = false;
+            break;
+        case eYes:
+            disabled = true;
+            break;
+        default:
+            break;
+    }
+
+    if (prm->proxy != NULL) {
+        rc = KConfig_Set_Http_Proxy_Path(cfg, prm->proxy);
+        set = true;
+
+        if (rc == 0 && prm->proxyDisabled == eUndefined) {
+            rc = KConfig_Set_Http_Proxy_Enabled(cfg, true);
+        }
+    }
+
+    if (prm->proxyDisabled != eUndefined) {
+        rc_t r2 = KConfig_Set_Http_Proxy_Enabled(cfg, ! disabled);
+        disableSet = true;
+        if (r2 != 0 && rc == 0) {
+            rc = r2;
+        }
+    }
+
+    if (rc == 0) {
+        rc = KConfigCommit(cfg);
+        DISP_RC(rc, "while calling KConfigCommit");
+    }
+    if (rc == 0) {
+        if (set) {
+            OUTMSG(("Use HTTP proxy server configuration '%s'\n", prm->proxy));
+        }
+        if (disableSet) {
+            OUTMSG(("HTTP proxy was %s\n", disabled ? "disabled" : "enabled"));
+        }
+    }
+    else {
+        LOGERR(klogErr, rc, "Failed to update HTTP proxy configuration");
+    }
+
+    return rc;
+}
+
+static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
+    rc_t rc = 0;
+    bool hasAny = false;
+    bool hasQuery = false;
+    bool xml = true;
+    assert(cfg && prm);
+    xml = prm->xml;
+    while (rc == 0) {
+        KNamelist* names = NULL;
+        const KConfigNode* node = NULL;
+        uint32_t count = 0;
+        uint32_t i = 0;
+        int indent = 0;
+        const char* root = NULL;
+        const char* nodeName = NULL;
+        size_t nodeNameL = 1;
+        rc = ParamsGetNextParam(prm, &root);
+        if (rc == 0) {
+            if (root == NULL) {
+                if (hasQuery)
+                {   break; }
+                else
+                {   root = "/"; }
+            }
+            else { hasQuery = true; }
+            assert(root);
+        }
+        if (rc == 0) {
+            int64_t len = strlen(root);
+            assert(len > 0);
+            while (len > 0) {
+                if (root[len - 1] == '/')
+                {   --len; }
+                else { break; }
+            }
+            assert(len >= 0);
+            if (len == 0) {
+                root += strlen(root) - 1;
+                nodeName = root;
+            }
+            else {
+                char *c = memrchr(root, '/', len);
+                if (c != NULL) {
+                    nodeName = c + 1;
+                }
+                else {
+                    nodeName = root;
+                }
+            }
+            assert(nodeName && nodeName[0]);
+            nodeNameL = strlen(nodeName);
+            while (nodeNameL > 1 && nodeName[nodeNameL - 1] == '/')
+            {   --nodeNameL; }
+        }
+
+        if (rc == 0) {
+            rc = KConfigOpenNodeRead(cfg, &node, "%s", root);
+            DISP_RC(rc, root);
+        }
+        if (rc == 0) {
+            rc = KConfigNodeListChild(node, &names);
+        }
+        if (rc == 0) {
+            rc = KNamelistCount(names, &count);
+        }
+        if (rc == 0 && count == 0) {
+            char buf[512] = "";
+            size_t num_read = 0;
+            rc = KConfigNodeReadData(node, buf, sizeof buf, &num_read);
+            if (rc == 0 && num_read > 0) {
+                if (prm->showMultiple)
+                {   OUTMSG(("<!-- Configuration node %s -->\n", root)); }
+                if (xml) {
+                    VDB_CONGIG_OUTMSG(("<%.*s>", nodeNameL, nodeName));
+                    VDB_CONGIG_OUTMSG(("%.*s", (int)num_read, buf));
+                    VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+                }
+                else {
+                    OUTMSG(("%.*s = \"%.*s\"\n",
+                        nodeNameL, nodeName, (int)num_read, buf));
+                }
+                hasAny = true;
+            }
+        }
+        else {
+            if (rc == 0) {
+                if (nodeName[0] != '/') {
+                    if (prm->showMultiple)
+                    {   OUTMSG(("<!-- Configuration node %s -->\n", root)); }
+                    VDB_CONGIG_OUTMSG(("<%.*s>\n", nodeNameL, nodeName));
+                } else {
+                    if (prm->showMultiple)
+                    {   OUTMSG(("<!-- Current configuration -->\n")); }
+                    VDB_CONGIG_OUTMSG(("<Config>\n"));
+                }
+                hasAny = true;
+                ++indent;
+            }
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* name = NULL;
+                if (rc == 0)
+                {   rc = KNamelistGet(names, i, &name); }
+                if (rc == 0) {
+                    char* fullname = NULL;
+                    if (strcmp(root, "/") == 0) {
+                        size_t bsize = strlen(name) + 2;
+                        fullname = malloc(bsize);
+                        if (fullname == NULL) {
+                            rc = RC(rcExe,
+                                rcStorage, rcAllocating, rcMemory, rcExhausted);
+                        }
+                        string_printf(fullname, bsize, NULL, "/%s", name);
+                    }
+                    else {
+                        size_t sz = strlen(root) + 2 + strlen(name);
+                        size_t num_writ = 0;
+                        fullname = malloc(sz);
+                        if (fullname == NULL) {
+                            rc = RC(rcExe,
+                                rcStorage, rcAllocating, rcMemory, rcExhausted);
+                        }
+                        rc = string_printf(fullname, sz, &num_writ,
+                            "%s/%s", root, name);
+                        assert(num_writ + 1 == sz);
+                    }
+                    if (rc == 0) {
+                        rc = KConfigNodePrintChildNames
+                            (xml, node, name, indent, fullname);
+                        hasAny = true;
+                    }
+                    free(fullname);
+                    fullname = NULL;
+                }
+            }
+            if (rc == 0) {
+                if (nodeName[0] != '/') {
+                    VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+                }
+                else {
+                    VDB_CONGIG_OUTMSG(("</Config>\n"));
+                }
+            }
+        }
+
+        RELEASE(KConfigNode, node);
+        RELEASE(KNamelist, names);
+
+        if (rc == 0) {
+            if (hasAny) {
+                OUTMSG(("\n"));
+            }
+            else if (nodeNameL > 0 && nodeName != NULL) {
+                VDB_CONGIG_OUTMSG(("<%.*s/>\n", nodeNameL, nodeName));
+            }
+        }
+
+        if (!hasQuery)
+        {   break; }
+    }
+
+    return rc;
+}
+
+static rc_t ShowFiles(const KConfig* cfg, const Params* prm) {
+    rc_t rc = 0;
+    bool hasAny = false;
+    uint32_t count = 0;
+    KNamelist* names = NULL;
+    rc = KConfigListIncluded(cfg, &names);
+    if (rc == 0) {
+        rc = KNamelistCount(names, &count);
+    }
+    if (rc == 0) {
+        uint32_t i = 0;
+
+        if (prm->showMultiple) {
+            if (prm->xml) {
+                OUTMSG(("<ConfigurationFiles>\n"));
+            }
+            else {
+                OUTMSG(("<!-- Configuration files -->\n"));
+            }
+            hasAny = true;
+        }
+
+        for (i = 0; i < count && rc == 0; ++i) {
+            const char* name = NULL;
+            if (rc == 0) {
+                rc = KNamelistGet(names, i, &name);
+            }
+            if (rc == 0) {
+                OUTMSG(("%s\n", name));
+                hasAny = true;
+            }
+        }
+    }
+    if (prm->showMultiple && prm->xml) {
+        OUTMSG(("</ConfigurationFiles>"));
+    }
+
+    if (rc == 0 && hasAny) {
+        OUTMSG(("\n"));
+    }
+
+    RELEASE(KNamelist, names);
+
+    return rc;
+}
+
+static void ShowEnv(const Params* prm) {
+    bool hasAny = false;
+    const char * env_list [] = {
+        "KLIB_CONFIG",
+        "LD_LIBRARY_PATH",
+        "NCBI_HOME",
+        "NCBI_SETTINGS",
+        "NCBI_VDB_CONFIG",
+        "VDBCONFIG",
+        "VDB_CONFIG",
+    };
+    int i = 0;
+
+    if (prm->showMultiple) {
+        if (prm->xml) {
+            OUTMSG(("<Environment>\n"));
+        }
+        else {
+            OUTMSG(("<!-- Environment -->\n"));
+        }
+        hasAny = true;
+    }
+
+    for (i = 0; i < sizeof env_list / sizeof env_list [ 0 ]; ++ i ) {
+        const char *eval = getenv ( env_list [ i ] );
+        if (eval) {
+            OUTMSG(("%s=%s\n", env_list [ i ], eval));
+            hasAny = true;
+        }
+    }
+    if (prm->showMultiple && prm->xml) {
+        OUTMSG(("</Environment>"));
+    }
+    if (hasAny) {
+        OUTMSG(("\n"));
+    }
+    else {
+        OUTMSG(("Environment variables are not found\n"));
+    }
+}
+
+static rc_t _VFSManagerSystem2PosixPath(const VFSManager *self,
+    const char *system, char posix[PATH_MAX])
+{
+    VPath *path = NULL;
+    rc_t rc = VFSManagerMakeSysPath(self, &path, system);
+    if (rc == 0) {
+        size_t written;
+        rc = VPathReadPath(path, posix, PATH_MAX, &written);
+    }
+    RELEASE(VPath, path);
+    return rc;
+}
+
+static rc_t DefaultPepoLocation(const KConfig *cfg,
+    uint32_t id, char *buffer, size_t bsize)
+{
+    rc_t rc = 0;
+    char home[PATH_MAX] = "";
+    size_t written = 0;
+    assert(buffer && bsize);
+    rc = KConfig_Get_Default_User_Path(cfg, home, sizeof home, &written);
+    if (rc == 0 && written > 0) {
+        rc = string_printf(buffer, bsize, &written, "%s/dbGaP-%u", home, id);
+        if (rc == 0) {
+            return rc;
+        }
+    }
+
+    rc = KConfig_Get_Home(cfg, home, sizeof home, &written);
+    if (rc == 0 && written > 0) {
+        rc = string_printf(buffer, bsize, &written,
+            "%s/ncbi/dbGaP-%u", home, id);
+        if (rc == 0) {
+            return rc;
+        }
+    }
+
+    {
+        VFSManager *vmgr = NULL;
+        rc = VFSManagerMake(&vmgr);
+        if (rc == 0) {
+            const char *home = getenv("HOME");
+            if (home == NULL) {
+                home = getenv("USERPROFILE");
+            }
+            if (home == NULL) {
+#define TODO 1
+                rc = TODO;
+            }
+            else {
+                size_t num_writ = 0;
+                char posix[PATH_MAX] = "";
+                rc = _VFSManagerSystem2PosixPath(vmgr, home, posix);
+                if (rc == 0) {
+                    rc = string_printf(buffer, bsize, &num_writ,
+                        "%s/ncbi/dbGaP-%u", posix, id);
+                    if (rc == 0) {
+                        return rc;
+                    }
+                }
+            }
+        }
+        RELEASE(VFSManager, vmgr);
+    }
+
+    return rc;
+}
+
+static rc_t DoImportNgc(KConfig *cfg, Params *prm,
+    const char **newRepoParentPath, uint32_t *result_flags)
+{
+    rc_t rc = 0;
+    KDirectory *dir = NULL;
+    const KFile *src = NULL;
+    const KNgcObj *ngc = NULL;
+    static char buffer[PATH_MAX] = "";
+    const char *root = NULL;
+
+    assert(prm);
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&dir);
+    }
+    if (rc == 0) {
+        rc = KDirectoryOpenFileRead(dir, &src, "%s", prm->ngc);
+    }
+    if (rc == 0) {
+        rc = KNgcObjMakeFromFile(&ngc, src);
+    }
+    RELEASE(KFile, src);
+
+    if (rc == 0) {
+        uint32_t id = 0;
+        rc = KNgcObjGetProjectId(ngc, &id);
+        if (rc == 0) {
+            const char *p = NULL;
+            rc = ParamsGetNextParam(prm, &p);
+            if (rc == 0 && p != NULL) {
+                rc = KDirectoryResolvePath(dir, true, buffer, sizeof buffer, p);
+                if (rc == 0) {
+                    root = buffer;
+                }
+            }
+            else {
+                rc = DefaultPepoLocation(cfg, id, buffer, sizeof buffer);
+                if (rc == 0) {
+                    root = buffer;
+                }
+            }
+        }
+    }
+    RELEASE(KDirectory, dir);
+    if (rc == 0) {
+        rc = KConfigImportNgc ( cfg, prm -> ngc, root, newRepoParentPath );
+    }
+    RELEASE(KNgcObj, ngc);
+    return rc;
+}
+
+static rc_t ImportNgc(KConfig *cfg, Params *prm) {
+    const char *newRepoParentPath = NULL;
+    uint32_t result_flags = 0;
+    rc_t rc = 0;
+    assert(prm);
+    rc = DoImportNgc(cfg, prm, &newRepoParentPath, &result_flags);
+    DISP_RC2(rc, "cannot import ngc file", prm->ngc);
+    if ( rc == 0 ) {
+        rc = KConfigCommit(cfg);
+    }
+    if (rc == 0) {
+#if WINDOWS
+        char ngcPath[PATH_MAX] = "";
+        char system[MAX_PATH] = "";
+#endif          
+        KDirectory *wd = NULL;
+        const char *ngc = prm->ngc;
+        rc_t rc = KDirectoryNativeDir(&wd);
+#if WINDOWS
+        if (rc == 0) {
+            rc = KDirectoryPosixStringToSystemString(wd,
+                system, sizeof system, "%s", newRepoParentPath);
+            if (rc == 0) {
+                newRepoParentPath = system;
+            }
+            rc = KDirectoryPosixStringToSystemString(wd,
+                ngcPath, sizeof ngcPath, "%s", ngc);
+            if (rc == 0) {
+                ngc = ngcPath;
+            }
+        }
+#endif          
+        if (wd) {
+            if (KDirectoryPathType(wd, newRepoParentPath)
+                == kptNotFound)
+            {
+                KDirectoryCreateDir(wd, 0775,
+                    kcmCreate | kcmParents, newRepoParentPath);
+            }
+        }
+
+        OUTMSG ( ( "%s was imported.\nRepository directory is: '%s'.\n",
+            ngc, newRepoParentPath ) );
+        RELEASE(KDirectory, wd);
+    }
+    return rc;
+}
+
+rc_t CC KMain(int argc, char* argv[]) {
+    rc_t rc = 0;
+
+    Params prm;
+    KConfig* cfg = NULL;
+
+    if (rc == 0) {
+        rc = ParamsConstruct(argc, argv, &prm);
+    }
+
+    if (rc == 0) {
+        const KDirectory *d = NULL;
+        if (prm.cfg_dir != NULL) {
+            KDirectory *n = NULL;
+            rc = KDirectoryNativeDir(&n);
+            if (rc == 0) {
+                rc = KDirectoryOpenDirRead(n, &d, false, prm.cfg_dir);
+                DISP_RC2(rc, "while opening", prm.cfg_dir);
+            }
+            RELEASE(KDirectory, n);
+        }
+        if (rc == 0) {
+            rc = KConfigMake(&cfg, d);
+            DISP_RC(rc, "while calling KConfigMake");
+        }
+        RELEASE(KDirectory, d);
+    }
+
+    if (rc == 0 && prm.showMultiple && prm.xml) {
+        OUTMSG(("<VdbConfig>\n"));
+    }
+
+    if (rc == 0) {
+        if (prm.modeConfigure) {
+            rc = configure(prm.configureMode);
+        }
+        else if (prm.ngc) {
+            rc = ImportNgc(cfg, &prm);
+        }
+        else if (prm.modeSetNode) {
+            rc_t rc3 = SetNode(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
+        if (prm.proxy != NULL || prm.proxyDisabled != eUndefined) {
+            rc_t rc3 = SetProxy(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
+        if (prm.modeShowCfg) {
+            rc_t rc3 = ShowConfig(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
+        if (prm.modeShowFiles) {
+            rc_t rc3 = ShowFiles(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
+        if (prm.modeShowLoadPath) {
+            const char* path = NULL;
+            rc_t rc3 = KConfigGetLoadPath(cfg, &path);
+            if (rc3 == 0) {
+                if (path != NULL && path[0]) {
+                    OUTMSG(("%s\n", path));
+                }
+            }
+            else if (rc == 0) {
+                rc = rc3;
+            }
+        }
+    }
+
+    if (prm.modeShowEnv) {
+        ShowEnv(&prm);
+    }
+
+    if (rc == 0 && prm.showMultiple && prm.xml) {
+        OUTMSG(("</VdbConfig>\n"));
+    }
+
+    RELEASE(KConfig, cfg);
+
+    if (rc == 0 && prm.modeCreate) {
+        rc = CreateConfig(argv[0]);
+    }
+
+    ParamsDestruct(&prm);
+    return rc;
+}
+
+/************************************* EOF ************************************/
diff --git a/tools/vdb-config/vdb-config2.cpp b/tools/vdb-config/vdb-config2.cpp
new file mode 100644
index 0000000..e8787b4
--- /dev/null
+++ b/tools/vdb-config/vdb-config2.cpp
@@ -0,0 +1,30 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+/*
+    code is now in interactive.cpp
+*/
diff --git a/tools/vdb-config/vdb-config2.h b/tools/vdb-config/vdb-config2.h
new file mode 100644
index 0000000..fc0eda6
--- /dev/null
+++ b/tools/vdb-config/vdb-config2.h
@@ -0,0 +1,29 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*
+    code is now in interactive.h
+*/
diff --git a/tools/vdb-copy/.gitignore b/tools/vdb-copy/.gitignore
new file mode 100644
index 0000000..fc8361c
--- /dev/null
+++ b/tools/vdb-copy/.gitignore
@@ -0,0 +1,17 @@
+*.txt
+*.sh
+*.dump
+*.kar
+*.tar
+*.vdb
+454_FASTQ_1
+newtab
+with_rev
+temp1
+temp2
+temp4
+t1
+t2
+t3
+t5
+t6
diff --git a/tools/vdb-copy/Makefile b/tools/vdb-copy/Makefile
new file mode 100644
index 0000000..c0a6494
--- /dev/null
+++ b/tools/vdb-copy/Makefile
@@ -0,0 +1,91 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-copy
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-copy
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-copy
+#  vdb copy tool
+#
+$(BINDIR)/vdb-copy: $(NCBIDIR)/vdb-copy.kfg 
+
+$(NCBIDIR)/vdb-copy.kfg: $(SRCDIR)/vdb-copy.kfg
+	cp $^ $@
+
+VDB_COPY_SRC = \
+	context \
+	helper \
+	coldefs \
+	get_platform \
+	namelist_tools \
+	copy_meta \
+	type_matcher \
+	redactval \
+	config_values \
+	vdb-copy
+
+VDB_COPY_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_COPY_SRC))
+
+VDB_COPY_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-wvdb \
+	-lm
+
+$(BINDIR)/vdb-copy: $(VDB_COPY_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_COPY_LIB)
diff --git a/tools/vdb-copy/coldefs.c b/tools/vdb-copy/coldefs.c
new file mode 100644
index 0000000..ff116fb
--- /dev/null
+++ b/tools/vdb-copy/coldefs.c
@@ -0,0 +1,775 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "coldefs.h"
+#include "helper.h"
+#include "definitions.h"
+
+#include <klib/text.h>
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* allocate a column-definition */
+static p_col_def col_defs_init_col( const char* name )
+{
+    p_col_def res = NULL;
+    if ( name == NULL ) return res;
+    if ( name[0] == 0 ) return res;
+    res = calloc( 1, sizeof( col_def ) );
+    /* because of calloc all members are zero! */
+    if ( res != NULL )
+        res->name = string_dup_measure ( name, NULL );
+    return res;
+}
+
+
+/*
+ * helper-function for: col_defs_destroy
+ * - free's everything a node owns
+ * - free's the node
+*/
+static void CC col_defs_destroy_node( void* node, void* data )
+{
+    p_col_def p_node = (p_col_def)node;
+    if ( p_node != NULL )
+    {
+        if ( p_node->name != NULL )
+            free( p_node->name );
+        if ( p_node->src_cast )
+            free( p_node->src_cast );
+        if ( p_node->dst_cast )
+            free( p_node->dst_cast );
+        free( p_node );
+    }
+}
+
+
+/*
+ * initializes a column-definitions-list
+*/
+rc_t col_defs_init( col_defs** defs )
+{
+    if ( defs == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    (*defs) = calloc( 1, sizeof( col_defs ) );
+    if ( *defs == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    VectorInit( &((*defs)->cols), 0, 5 );
+    (*defs)->filter_idx = -1;
+    return 0;
+}
+
+
+/*
+ * destroys the column-definitions-list
+*/
+rc_t col_defs_destroy( col_defs* defs )
+{
+    if ( defs == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+    VectorWhack( &(defs->cols), col_defs_destroy_node, NULL );
+    free( defs );
+    return 0;
+}
+
+
+/*
+ * helper-function for: col_defs_parse_string / col_defs_extract_from_table
+ * - creates a column-definition by the column-name
+ * - adds the definition to the column-definition-vector
+*/
+static rc_t col_defs_append_col( col_defs* defs, const char* name )
+{
+    rc_t rc;
+    p_col_def new_col = col_defs_init_col( name );
+    if ( new_col == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcParsing, rcMemory, rcExhausted );
+    else
+        rc = VectorAppend( &(defs->cols), NULL, new_col );
+    return rc;
+}
+
+
+/*
+ * calls VTableListReadableColumns to get a list of all column-names of the table
+ * creates a temporary read-cursor to test and get the column-type
+ * walks the KNamelist with the available column-names
+ * tries to add every one of them to the temp. cursor
+ * if the column can be added to the cursor, it is appended
+ * to the column-definition list
+*/
+rc_t col_defs_extract_from_table( col_defs* defs, const VTable *table )
+{
+    KNamelist *names;
+    rc_t rc;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( table == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = VTableListReadableColumns( table, &names );
+    DISP_RC( rc, "col_defs_extract_from_table:VTableListReadableColumns() failed" );
+    if ( rc == 0 )
+    {
+        const VCursor *cursor;
+        rc = VTableCreateCursorRead( table, &cursor );
+        DISP_RC( rc, "col_defs_extract_from_table:VTableCreateCursorRead() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount( names, &count );
+            DISP_RC( rc, "col_defs_extract_from_table:KNamelistCount() failed" );
+            if ( rc == 0 )
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < count && rc == 0; ++idx )
+                {
+                    const char *name;
+                    rc = KNamelistGet( names, idx, &name );
+                    DISP_RC( rc, "col_defs_extract_from_table:KNamelistGet() failed" );
+                    if ( rc == 0 )
+                    {
+                        uint32_t temp_idx;
+                        rc_t rc1 = VCursorAddColumn( cursor, &temp_idx, "%s", name );
+                        DISP_RC( rc1, "col_defs_extract_from_table:VCursorAddColumn() failed" );
+                        if ( rc1 == 0 )
+                        {
+                            rc = col_defs_append_col( defs, name );
+                            DISP_RC( rc, "col_defs_extract_from_table:col_defs_append_col() failed" );
+                        }
+                    }
+                }
+            }
+            rc = VCursorRelease( cursor );
+            DISP_RC( rc, "col_defs_extract_from_table:VCursorRelease() failed" );
+        }
+        rc = KNamelistRelease( names );
+        DISP_RC( rc, "col_defs_extract_from_table:KNamelistRelease() failed" );
+    }
+    return rc;
+}
+
+
+rc_t col_defs_clear_to_copy( col_defs* defs )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    len = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < len && rc == 0; ++idx )
+    {
+        p_col_def item = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( item != NULL )
+            item->to_copy = false;
+    }
+    return rc;
+}
+
+
+/*
+ * walks the list of column-definitions and tries to add all off them
+ * to the given cursor, it stops if one of them fails to be added
+ * for every column it detects type_decl and type_desc
+ * if both calls are successful the column-def is marked as valid
+*/
+rc_t col_defs_add_to_rd_cursor( col_defs* defs, const VCursor *cursor, bool show )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+    
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( cursor == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    len = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < len && rc == 0; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+        {
+            if ( col->src_cast != NULL )
+            {
+                rc = VCursorAddColumn( cursor, &(col->src_idx), "%s", col->src_cast );
+                DISP_RC( rc, "col_defs_add_to_cursor:VCursorAddColumn() failed" );
+                if ( rc == 0 )
+                {
+                    rc = VCursorDatatype( cursor, col->src_idx,
+                              &(col->type_decl), &(col->type_desc) );
+                    DISP_RC( rc, "col_defs_add_to_cursor:VCursorDatatype() failed" );
+                    col->src_valid = ( rc == 0 );
+                    if ( show && col->src_valid )
+                        KOutMsg( "added to rd-cursor: >%s<\n", col->name );
+                }
+
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * retrieves a pointer to a column-definition
+ * name defines the name of the wanted column-definition
+*/
+p_col_def col_defs_find( col_defs* defs, const char * name )
+{
+    p_col_def res = NULL;
+    uint32_t idx, len;
+    if ( defs == NULL || name == NULL || name[0] == 0 )
+        return res;
+
+    len = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < len && res == NULL; ++idx )
+    {
+        p_col_def item = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( nlt_strcmp( item->name, name ) == 0 )
+            res = item;
+    }
+    return res;
+}
+
+
+/*
+ * retrieves the index of a column-definition
+ * name defines the name of the wanted column-definition
+*/
+int32_t col_defs_find_idx( col_defs* defs, const char * name )
+{
+    int32_t res = -1;
+    uint32_t idx, len;
+    if ( defs == NULL || name == NULL || name[0] == 0 )
+        return res;
+
+    len = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < len && res == -1; ++idx )
+    {
+        p_col_def item = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( nlt_strcmp( item->name, name ) == 0 )
+            res = (int32_t)idx;
+    }
+    return res;
+}
+
+
+/*
+ * retrieves a pointer to a column-definition
+ * idx defines the Vector-Index of the wanted column-definition
+ * !!! not the read or write cursor index !!!
+*/
+p_col_def col_defs_get( col_defs* defs, const uint32_t idx )
+{
+    p_col_def res = NULL;
+    if ( defs != NULL )
+        res = (p_col_def) VectorGet ( &(defs->cols), idx );
+    return res;
+}
+
+
+/*
+ * adds all columns marked with to_copy == true to the cursor
+*/
+rc_t col_defs_add_to_wr_cursor( col_defs* defs, const VCursor* cursor, bool show )
+{
+    uint32_t idx, len;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( cursor == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    len = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < len; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+            if ( col->to_copy && col->dst_cast != NULL )
+            {
+                rc_t rc = VCursorAddColumn( cursor, &(col->dst_idx), "%s", col->dst_cast );
+                col->to_copy = ( rc == 0 );
+                if ( show )
+                {
+                    if ( col->to_copy )
+                        KOutMsg( "added to wr-cursor: >%s<\n", col->name );
+                    else
+                        KOutMsg( "cannot add >%s<\n", col->name );
+                }
+            }
+    }
+    return 0;
+}
+
+
+/*
+ * searches in the column-vector for a successful string-comparison
+ * with the hardcoded name of the filter-column
+ * stores it's vector-idx in defs->filter_idx
+ * does not require an open cursor.
+*/
+rc_t col_defs_detect_filter_col( col_defs* defs, const char *name )
+{
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( name == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    defs->filter_idx = col_defs_find_idx( defs, name );
+    if ( defs->filter_idx < 0 )
+        return RC( rcExe, rcNoTarg, rcResolving, rcItem, rcNotFound );
+    return 0;
+}
+
+
+/*
+ * walks through the column-names and marks every column thats
+ * name is in "redactable_cols" as redactable
+ * sets the redact-value to zero
+ * if the default-type of the column is in the list of dna-types
+ * (a hardcoded list) it sets the redact-value to 'N'
+ * does not require an open cursor. 
+*/
+rc_t col_defs_detect_redactable_cols_by_name( col_defs* defs,
+                                const char * redactable_cols )
+{
+    const KNamelist *r_columns;
+    rc_t rc;
+    
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( defs == NULL || redactable_cols == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = nlt_make_namelist_from_string( &r_columns, redactable_cols );
+    if ( rc == 0 )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len && rc == 0; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                if ( !(col->redactable) )
+                    col->redactable = nlt_is_name_in_namelist( r_columns, col->name );
+        }
+        KNamelistRelease( r_columns );
+    }
+    return rc;
+}
+
+
+static rc_t redactable_types_2_type_id_vector( const VSchema * s,
+                                               const char * redactable_types,
+                                               Vector * id_vector )
+{
+    const KNamelist *r_types;
+    rc_t rc;
+    if ( redactable_types == NULL || s == NULL || id_vector == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = nlt_make_namelist_from_string( &r_types, redactable_types );
+    if ( rc == 0 )
+    {
+        uint32_t count, idx;
+
+        rc = KNamelistCount( r_types, &count );
+        if ( rc == 0 && count > 0 )
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *name;
+                rc = KNamelistGet( r_types, idx, &name );
+                if ( rc == 0 )
+                {
+                    VTypedecl td;
+                    rc = VSchemaResolveTypedecl ( s, &td, "%s", name );
+                    if ( rc == 0 )
+                    {
+                        uint32_t *id = malloc( sizeof *id );
+                        if ( id != NULL )
+                        {
+                            *id = td.type_id;
+                            rc = VectorAppend ( id_vector, NULL, id );
+                        }
+                        else
+                            rc = RC( rcExe, rcNoTarg, rcResolving, rcMemory, rcExhausted );
+                    }
+                }
+            }
+        KNamelistRelease( r_types );
+    }
+    return rc;
+}
+
+
+static void CC type_id_ptr_whack ( void *item, void *data )
+{
+    free( item );
+}
+
+
+/*
+ * walks through the columns and checks every column against
+ * a list of types, if one of the src-types of the column
+ * is in the list it is marked as redactable
+*/
+rc_t col_defs_detect_redactable_cols_by_type( col_defs* defs,
+                        const VSchema * s, const matcher * m,
+                        const char * redactable_types )
+{
+    Vector id_vector;
+    rc_t rc;
+    
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( redactable_types == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    
+    VectorInit ( &id_vector, 0, 20 );
+    rc = redactable_types_2_type_id_vector( s, redactable_types, &id_vector );
+    if ( rc == 0 )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                if ( ! col->redactable )
+                    col->redactable = matcher_src_has_type( m, s, col->name, &id_vector );
+        }
+        VectorWhack ( &id_vector, type_id_ptr_whack, NULL );
+    }
+
+/*
+    rc = nlt_make_namelist_from_string( &r_types, redactable_types );
+    if ( rc == 0 )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                if ( ! col->redactable )
+                    col->redactable = matcher_src_has_type( m, col->name, r_types );
+        }
+        KNamelistRelease( r_types );
+    }
+*/
+    return rc;
+}
+
+
+rc_t col_defs_unmark_do_not_redact_columns(  col_defs* defs,
+                    const char * do_not_redact_cols )
+{
+    const KNamelist *names;
+    rc_t rc;
+    
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( do_not_redact_cols == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = nlt_make_namelist_from_string( &names, do_not_redact_cols );
+    if ( rc == 0 )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                if ( col->redactable )
+                    if ( nlt_is_name_in_namelist( names, col->name ) )
+                        col->redactable = false;
+        }
+        KNamelistRelease( names );
+    }
+    return rc;
+}
+
+/*
+ * walks through the column-definitions and counts how
+ * many of them have the to-copy-flag
+ * does not require an open cursor. 
+*/
+uint32_t col_defs_count_copy_cols( col_defs* defs )
+{
+    uint32_t res = 0;
+    if ( defs != NULL )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def item = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( item != NULL )
+                if ( item->to_copy )
+                    res++;
+        }
+    }
+    return res;
+}
+
+
+/*
+ * walks through the column-definitions and if a column
+ * has the to_copy-flag set, and it's name is in the
+ * given list of column-names the to copy-flag is cleared
+ * does not require an open cursor.
+*/
+rc_t col_defs_exclude_these_columns( col_defs* defs, const char * prefix, const char * column_names )
+{
+    rc_t rc = 0;
+    const KNamelist *names;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    /* it is OK if we have not column-names to exclude */
+    if ( column_names == NULL )
+        return 0;
+    if ( column_names[0] == 0 )
+        return 0;
+
+    rc = nlt_make_namelist_from_string( &names, column_names );
+    DISP_RC( rc, "col_defs_parse_string:nlt_make_namelist_from_string() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        size_t prefix_len = 0;
+        if ( prefix != 0 )
+            prefix_len = string_size( prefix ) + 2;
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+            {
+                if ( col->requested )
+                {
+                    if ( nlt_is_name_in_namelist( names, col->name ) )
+                        col->requested = false;
+                    else
+                    {
+                        if ( prefix != NULL )
+                        {
+                            size_t len1 = string_size ( col->name ) + prefix_len;
+                            char * s = malloc( len1 );
+                            if ( s != NULL )
+                            {
+                                size_t num_writ;
+                                rc_t rc1 = string_printf ( s, len1, &num_writ, "%s:%s", prefix, col->name );
+                                if ( rc1 == 0 )
+                                {
+                                    if ( nlt_is_name_in_namelist( names, s ) )
+                                        col->requested = false;
+                                }
+                                free( s );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        KNamelistRelease( names );
+    }
+    return rc;
+}
+
+
+rc_t col_defs_as_string( col_defs* defs, char ** dst, bool only_requested )
+{
+    uint32_t idx, count, total = 0, dst_idx = 0;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( dst == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    *dst = NULL;
+    count = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < count; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+        {
+            bool use_this = ( only_requested ) ? col->requested : true;
+            if ( use_this )
+                total += ( string_measure ( col->name, NULL ) + 1 );
+        }
+    }
+    *dst = malloc( total + 1 );
+    if ( *dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcResolving, rcMemory, rcExhausted );
+    *dst[0] = 0;
+    for ( idx = 0;  idx < count; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+        {
+            bool use_this = ( only_requested ) ? col->requested : true;
+            if ( use_this )
+            {
+                dst_idx += string_copy_measure ( &((*dst)[dst_idx]), total-dst_idx, col->name );
+                (*dst)[dst_idx++] = ',';
+            }
+        }
+    }
+    if ( dst_idx > 0 )
+        (*dst)[dst_idx-1] = 0;
+    return 0;
+}
+
+
+rc_t col_defs_apply_casts( col_defs* defs, const matcher * m )
+{
+    rc_t rc = 0;
+    uint32_t idx, count;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+
+    count = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < count && rc == 0; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+        {
+            if ( m == NULL )
+            {
+                col->src_cast = string_dup_measure ( col->name, NULL );
+                col->dst_cast = string_dup_measure ( col->name, NULL );
+            }
+            else
+            {
+                rc = matcher_src_cast( m, col->name, &(col->src_cast) );
+                if ( rc == 0 )
+                    rc = matcher_dst_cast( m, col->name, &(col->dst_cast) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t col_defs_find_redact_vals( col_defs* defs, 
+                                const redact_vals * rvals )
+{
+    uint32_t idx, count;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( rvals == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    count = VectorLength( &(defs->cols) );
+    for ( idx = 0;  idx < count; ++idx )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+        if ( col != NULL )
+            if ( col->to_copy )
+                col->r_val = redact_vals_get_by_cast( rvals, col->dst_cast );
+    }
+    return 0;
+}
+
+
+rc_t col_defs_mark_writable_columns( col_defs* defs, VTable *tab, bool show )
+{
+    KNamelist *writables;
+    rc_t rc;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( tab == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = VTableListWritableColumns ( tab, &writables );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < count; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                if ( col->requested )
+                    if ( nlt_is_name_in_namelist( writables, col->name ) )
+                    {
+                        if ( show )
+                            KOutMsg( "writable column: >%s<\n", col->name );
+                        col->to_copy = true;
+                    }
+        }
+        KNamelistRelease( writables );
+    }
+    return rc;
+}
+
+
+rc_t col_defs_mark_requested_columns( col_defs* defs, const char * columns )
+{
+    const KNamelist *requested;
+    rc_t rc;
+    uint32_t idx, len;
+
+    if ( defs == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+
+    if ( columns == NULL )
+    {
+        /* no specific columns are provided --> mark all of them */
+        len = VectorLength( &(defs->cols) );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+            if ( col != NULL )
+                col->requested = true;
+        }
+        rc = 0;
+    }
+    else
+    {
+        /* specific columns are provided --> mark all of these */
+        rc = nlt_make_namelist_from_string( &requested, columns );
+        DISP_RC( rc, "col_defs_mark_requested_columns:nlt_make_namelist_from_string() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t idx, len = VectorLength( &(defs->cols) );
+            for ( idx = 0;  idx < len; ++idx )
+            {
+                p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
+                if ( col != NULL )
+                    col->requested = nlt_is_name_in_namelist( requested, col->name );
+            }
+            KNamelistRelease( requested );
+        }
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/coldefs.h b/tools/vdb-copy/coldefs.h
new file mode 100644
index 0000000..5313f18
--- /dev/null
+++ b/tools/vdb-copy/coldefs.h
@@ -0,0 +1,250 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_coldefs_
+#define _h_vdb_coldefs_
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifndef _h_type_matcher_
+#include "type_matcher.h"
+#endif
+
+#ifndef _h_vdb_redactval_
+#include "redactval.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/********************************************************************
+col-def is the definition of a single column: name/index/type
+********************************************************************/
+typedef struct col_def
+{
+    char *name;
+    uint32_t src_idx;       /* index of this column relative to the
+                               read-cursor */
+
+    uint32_t dst_idx;       /* index of this column relative to the
+                               write-cursor */
+
+    bool src_valid;         /* this column was successfully addes to
+                               the read-cursor */
+
+    bool requested;         /* in case of no columns given to the commandline
+                               all existing columns are marked as requested
+                               ( even if not all of them can be copied,
+                                 they are filtered out later... )
+                               if columns are given at the commandline
+                               only these are marked as requested */
+
+    bool to_copy;           /* this column has a correspondig column 
+                               in the list of writable columns of the
+                               destination-schema with writable types */
+
+    bool redactable;        /* this column is in the list of redactable
+                               columns */
+
+    VTypedecl type_decl;    /* type-decl of this column via read-schema */
+    VTypedesc type_desc;    /* type-desc of this column via read-schema */
+
+    char * src_cast;        /* typecast to be used by the source */
+    char * dst_cast;        /* typecast to be used by the destination */
+
+    p_redact_val r_val;     /* pointer to a redact-value entry if exists*/
+} col_def;
+typedef col_def* p_col_def;
+
+/********************************************************************
+the col-defs are a vector of single column-definitions
+********************************************************************/
+typedef struct col_defs
+{
+    Vector cols;
+    int32_t filter_idx; /* index of READ_FILTER-column (-1 not in set...)*/
+} col_defs;
+typedef col_defs* p_col_defs;
+
+
+/*
+ * initializes a column-definitions-list
+*/
+rc_t col_defs_init( col_defs** defs );
+
+
+/*
+ * destroys the column-definitions-list
+*/
+rc_t col_defs_destroy( col_defs* defs );
+
+
+/*
+ * calls VTableListCol to get a list of all column-names of the table
+ * creates a temporary read-cursor to test and get the column-type
+ * walks the KNamelist with the available column-names
+ * tries to add every one of them to the temp. cursor
+ * if the column can be added to the cursor, it is appended
+ * to the column-definition list, the type of the column is detected
+*/
+rc_t col_defs_extract_from_table( col_defs* defs, const VTable *table );
+
+
+/*
+ * walks the list of column-definitions and calls
+ * VTableColumnDatatypes() for every column, fills the types
+ * into the src-types-Vector of every column
+*/
+rc_t col_defs_read_src_types( col_defs* defs, const VTable *table,
+                              const VSchema *schema );
+
+
+/*
+ * walks the list of column-definitions and calls
+ * VTableListWritableColumnTypes() for every column
+ * if the returned namelist is not empty, it marks the column as
+ * to be copied, and fills it's types into the dst-types-Vector 
+ * of every column
+*/
+rc_t col_defs_read_dst_columns( col_defs* defs, const VTable *table,
+                                const VSchema *schema );
+
+
+rc_t col_defs_clear_to_copy( col_defs* defs );
+
+
+/*
+ * walks the list of column-definitions and reports on every one
+*/
+rc_t col_defs_report( const col_defs* defs, const bool only_copy_columns );
+
+
+/*
+ * walks the list of column-definitions and tries to add all off them
+ * to the given cursor, it stops if one of them fails to be added
+ * for every column it detects type_decl and type_desc
+ * if both calls are successful the column-def is marked as valid
+*/
+rc_t col_defs_add_to_rd_cursor( col_defs* defs, const VCursor *cursor, bool show );
+
+
+/*
+ * retrieves a pointer to a column-definition
+ * name defines the name of the wanted column-definition
+*/
+p_col_def col_defs_find( col_defs* defs, const char * name );
+
+
+/*
+ * retrieves the index of a column-definition
+ * name defines the name of the wanted column-definition
+*/
+int32_t col_defs_find_idx( col_defs* defs, const char * name );
+
+
+/*
+ * retrieves a pointer to a column-definition
+ * idx defines the Vector-Index of the wanted column-definition
+ * !!! not the read or write cursor index !!!
+*/
+p_col_def col_defs_get( col_defs* defs, const uint32_t idx );
+
+
+/*
+ * adds all columns marked with to_copy == true to the cursor
+*/
+rc_t col_defs_add_to_wr_cursor( col_defs* defs, const VCursor* cursor, bool show );
+
+
+/*
+ * searches in the column-vector for a successful string-comparison
+ * with the hardcoded name of the filter-column
+ * stores it's vector-idx in defs->filter_idx
+ * does not require an open cursor.
+*/
+rc_t col_defs_detect_filter_col( col_defs* defs, const char *col_name );
+
+
+/*
+ * walks through the column-names and marks every column thats
+ * name is in "redactable_cols"  as redactable
+ * sets the redact-value to zero
+ * if the default-type of the column is in the list of dna-types
+ * (a hardcoded list) it sets the redact-value to 'N'
+ * does not require an open cursor. 
+*/
+rc_t col_defs_detect_redactable_cols_by_name( col_defs* defs,
+                    const char * redactable_cols );
+
+rc_t col_defs_detect_redactable_cols_by_type( col_defs* defs,
+                        const VSchema * s, const matcher * m,
+                        const char * redactable_types );
+
+
+/*
+ * walks through the column-names and clear the redactable-flag 
+ * for every column thats name is in "do_not_redact_cols"
+ * does not require an open cursor. 
+*/
+rc_t col_defs_unmark_do_not_redact_columns(  col_defs* defs,
+                    const char * do_not_redact_cols );
+
+
+/*
+ * walks through the column-definitions and counts how
+ * many of them have the to-copy-flag
+ * does not require an open cursor. 
+*/
+uint32_t col_defs_count_copy_cols( col_defs* defs );
+
+
+/*
+ * walks through the column-definitions and if a column
+ * has the to_copy-flag set, and it's name is in the
+ * given list of column-names the to copy-flag is cleared
+ * does not require an open cursor.
+*/
+rc_t col_defs_exclude_these_columns( col_defs* defs,
+                const char * prefix, const char * column_names );
+
+rc_t col_defs_as_string( col_defs* defs, char ** dst, bool only_requested );
+
+rc_t col_defs_apply_casts( col_defs* defs, const matcher * m );
+
+rc_t col_defs_find_redact_vals( col_defs* defs, const redact_vals * rvals );
+
+rc_t col_defs_mark_writable_columns( col_defs* defs, VTable *tab, bool show );
+
+rc_t col_defs_mark_requested_columns( col_defs* defs, const char * columns );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/column_match.c b/tools/vdb-copy/column_match.c
new file mode 100644
index 0000000..0e1d507
--- /dev/null
+++ b/tools/vdb-copy/column_match.c
@@ -0,0 +1,31 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "column_match.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
diff --git a/tools/vdb-copy/column_match.h b/tools/vdb-copy/column_match.h
new file mode 100644
index 0000000..1b4eb8b
--- /dev/null
+++ b/tools/vdb-copy/column_match.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_column_match_
+#define _h_column_match_
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/config_values.c b/tools/vdb-copy/config_values.c
new file mode 100644
index 0000000..cd68a95
--- /dev/null
+++ b/tools/vdb-copy/config_values.c
@@ -0,0 +1,54 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "config_values.h"
+
+#include <sysalloc.h>
+#include <string.h>
+#include <stdlib.h>
+
+static void config_values_destroy_str( char **s )
+{
+    if ( *s != NULL )
+    {
+        free( *s );
+        *s = NULL;
+    }
+}
+
+
+void config_values_init( p_config_values cv )
+{
+    memset( cv, 0, sizeof cv[0] );
+}
+
+
+void config_values_destroy( p_config_values cv )
+{
+    config_values_destroy_str( &cv->filter_col_name );
+    config_values_destroy_str( &cv->meta_ignore_nodes );
+    config_values_destroy_str( &cv->redactable_types );
+    config_values_destroy_str( &cv->do_not_redact_columns );
+}
diff --git a/tools/vdb-copy/config_values.h b/tools/vdb-copy/config_values.h
new file mode 100644
index 0000000..4d7a503
--- /dev/null
+++ b/tools/vdb-copy/config_values.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_config_values_
+#define _h_config_values_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct config_values
+{
+    char * filter_col_name;
+    char * meta_ignore_nodes;
+    char * redactable_types;
+    char * do_not_redact_columns;
+} config_values;
+typedef config_values* p_config_values;
+
+void config_values_init( p_config_values cv );
+void config_values_destroy( p_config_values cv );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/context.c b/tools/vdb-copy/context.c
new file mode 100644
index 0000000..992bb41
--- /dev/null
+++ b/tools/vdb-copy/context.c
@@ -0,0 +1,473 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "context.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+/*
+ * helper-function to set a string inside the context
+ * ( makes a copy ) with error detection
+*/
+static rc_t context_set_str( char **dst, const char *src )
+{
+    size_t len;
+    if ( dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    if ( *dst != NULL )
+    {
+        free( *dst );
+        *dst = NULL;
+    }
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    *dst = string_dup_measure ( src, &len );
+ 
+    if ( len == 0 )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
+    if ( *dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
+    return 0;
+}
+
+
+/*
+ * helper-function to initialize the values of the context
+*/
+static void context_init_values( p_context ctx )
+{
+    ctx->src_path = NULL;
+    ctx->dst_path = NULL;
+    ctx->kfg_path = NULL;
+    ctx->table = NULL;
+    ctx->columns = NULL;
+    ctx->excluded_columns = NULL;
+    ctx->platform_id = 0;
+    ctx->src_schema_list = NULL;
+
+    ctx->usage_requested = false;
+    ctx->ignore_reject = false;
+    ctx->ignore_redact = false;
+    ctx->dont_check_accession = false;
+    ctx->reindex = false;
+    ctx->show_redact = false;
+    ctx->show_meta = false;
+    ctx->md5_mode = MD5_MODE_AUTO;
+    ctx->force_kcmInit = false;
+    ctx->force_unlock = false;
+
+    ctx->dont_remove_target = false;
+    config_values_init( &(ctx->config) );
+    redact_vals_init( &(ctx->rvals) );
+    ctx->dst_schema_tabname = NULL;
+    ctx->legacy_schema_file = NULL;
+    ctx->legacy_dont_copy = NULL;
+}
+
+
+/*
+ * generates a new context, initializes values
+*/
+rc_t context_init( context **ctx )
+{
+    rc_t rc;
+
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    (*ctx) = (p_context)calloc( 1, sizeof( context ) );
+    if ( *ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+
+    context_init_values( *ctx );
+    rc = num_gen_make( &((*ctx)->row_generator) );
+    DISP_RC( rc, "num_gen_make() failed" );
+    return rc;
+}
+
+
+/*
+ * destroys a context, frees all pointers the context owns
+*/
+rc_t context_destroy( p_context ctx )
+{
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcParam, rcNull );
+
+    if ( ctx->src_path != NULL )
+    {
+        free( (void*)ctx->src_path );
+        ctx->src_path = NULL;
+    }
+    if ( ctx->dst_path != NULL )
+    {
+        free( (void*)ctx->dst_path );
+        ctx->dst_path = NULL;
+    }
+    if ( ctx->kfg_path != NULL )
+    {
+        free( (void*)ctx->kfg_path );
+        ctx->kfg_path = NULL;
+    }
+    if ( ctx->src_schema_list != NULL )
+    {
+        KNamelistRelease( ctx->src_schema_list );
+        ctx->src_schema_list = NULL;
+    }
+    if ( ctx->table != NULL )
+    {
+        free( (void*)ctx->table );
+        ctx->table = NULL;
+    }
+    if ( ctx->columns != NULL )
+    {
+        free( (void*)ctx->columns );
+        ctx->columns = NULL;
+    }
+    if ( ctx->excluded_columns != NULL )
+    {
+        free( (void*)ctx->excluded_columns );
+        ctx->excluded_columns = NULL;
+    }
+
+    num_gen_destroy( ctx->row_generator );
+    config_values_destroy( &( ctx->config ) );
+    redact_vals_destroy( ctx->rvals );
+
+    if ( ctx->dst_schema_tabname != NULL )
+    {
+        free( (void*)ctx->dst_schema_tabname );
+        ctx->dst_schema_tabname = NULL;
+    }
+    if ( ctx->legacy_schema_file != NULL )
+    {
+        free( (void*)ctx->legacy_schema_file );
+        ctx->legacy_schema_file = NULL;
+    }
+    if ( ctx->legacy_dont_copy != NULL )
+    {
+        free( (void*)ctx->legacy_dont_copy );
+        ctx->legacy_dont_copy = NULL;
+    }
+
+    free( ctx );
+    return 0;
+}
+
+
+/*
+ * clear's the number-generator and sets the given intervall
+*/
+rc_t context_set_range( p_context ctx, 
+                        const int64_t first, const uint64_t count )
+{
+    rc_t rc = num_gen_clear( ctx->row_generator );
+    if ( rc == 0 )
+        rc = num_gen_add( ctx->row_generator, first, count );
+    return rc;
+}
+
+
+/*
+ * performs the range check to trim the internal number
+ * generator to the given range
+*/
+rc_t context_range_check( p_context ctx, 
+                          const int64_t first, const uint64_t count )
+{
+    return num_gen_range_check( ctx->row_generator, first, count );
+}
+
+
+/*
+ * helper-function to set the source-path
+*/
+static rc_t context_set_src_path( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->src_path), src );
+}
+
+
+/*
+ * helper-function to set the destination-path
+*/
+static rc_t context_set_dst_path( p_context ctx, const char *src )
+{
+    return context_set_str( (char**)&(ctx->dst_path), src );
+}
+
+
+/*
+ * helper-function to set the path for additional kfg-files
+*/
+static rc_t context_set_kfg_path( p_context ctx, const char *src )
+{
+    rc_t rc = context_set_str( (char**)&(ctx->kfg_path), src );
+    if ( ctx->kfg_path == NULL )
+        context_set_kfg_path( ctx, "." );
+    return rc;
+}
+
+
+/*
+ * helper-function to set the name of the source-table
+*/
+static rc_t context_set_table( p_context ctx, const char *src )
+{
+    rc_t rc;
+    if ( ctx == NULL || src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    rc = context_set_str( (char**)&(ctx->table), src );
+    DISP_RC( rc, "context_set_table:context_set_str() failed" );
+    return rc;
+}
+
+#if ALLOW_COLUMN_SPEC
+static rc_t context_set_columns( p_context ctx, const char *src )
+{
+    rc_t rc;
+    if ( ctx == NULL || src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    rc = context_set_str( (char**)&(ctx->columns), src );
+    DISP_RC( rc, "context_set_columns:dump_context_set_str() failed" );
+    return rc;
+}
+#endif
+
+static rc_t context_set_excluded_columns( p_context ctx, const char *src )
+{
+    rc_t rc;
+    if ( ctx == NULL || src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    rc = context_set_str( (char**)&(ctx->excluded_columns), src );
+    DISP_RC( rc, "context_set_excluded_columns:dump_context_set_str() failed" );
+    return rc;
+}
+
+
+static rc_t context_set_md5_mode( p_context ctx, const char *src )
+{
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    ctx->md5_mode = MD5_MODE_AUTO;
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    switch( src[ 0 ] )
+    {
+    case 'O' :
+    case '1' :
+    case 'o' : ctx->md5_mode = MD5_MODE_ON; break;
+
+    case '0' :
+    case 'x' :
+    case 'X' : ctx->md5_mode = MD5_MODE_OFF; break;
+    }
+    return 0;
+}
+
+
+static rc_t context_set_blob_checksum( p_context ctx, const char *src )
+{
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    ctx->blob_checksum = BLOB_CHECKSUM_AUTO;
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    switch( src[ 0 ] )
+    {
+    case 'O' :
+    case '1' :
+    case 'o' : ctx->blob_checksum = BLOB_CHECKSUM_CRC32; break;
+
+    case '5' :
+    case 'M' :
+    case 'm' : ctx->blob_checksum = BLOB_CHECKSUM_MD5; break;
+
+    case '0' :
+    case 'x' :
+    case 'X' : ctx->blob_checksum = BLOB_CHECKSUM_OFF; break;
+    }
+    return 0;
+}
+
+
+static rc_t context_set_row_range( p_context ctx, const char *src )
+{
+    rc_t rc;
+    if ( ( ctx == NULL )||( src == NULL ) )
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    else
+        rc = num_gen_parse( ctx->row_generator, src );
+    return rc;
+}
+
+
+static bool context_check_if_usage_necessary( p_context ctx )
+{
+    if ( ctx == NULL ) return false;
+    if ( ctx->src_path == NULL || ctx->dst_path == NULL )
+        ctx->usage_requested = true;
+    return ctx->usage_requested;
+}
+
+
+static rc_t context_evaluate_arguments( const Args *my_args, p_context ctx )
+{
+    uint32_t count, idx;
+    
+    rc_t rc = ArgsParamCount( my_args, &count );
+    DISP_RC( rc, "ArgsParamCount() failed" );
+    if ( rc != 0 ) return rc;
+
+    for ( idx = 0; idx < count && rc == 0; ++idx )
+    {
+        const char *value = NULL;
+        rc = ArgsParamValue( my_args, idx, (const void **)&value );
+        DISP_RC( rc, "ArgsParamValue() failed" );
+        if ( rc == 0 )
+        {
+            switch( idx )
+            {
+            case 0 : rc = context_set_src_path( ctx, value );
+                     DISP_RC( rc, "context_set_src_path() failed" );
+                     break;
+
+            case 1 : rc = context_set_dst_path( ctx, value );
+                     DISP_RC( rc, "context_set_dst_path() failed" );
+                     break;
+
+            }
+        }
+    }
+    return rc;
+}
+
+
+static bool context_get_bool_option( const Args *my_args,
+                                     const char *name,
+                                     const bool def )
+{
+    bool res = def;
+    uint32_t count = 0;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( rc == 0 && count > 0 )
+        res = true;
+    return res;
+}
+
+
+static const char* context_get_str_option( const Args *my_args,
+                                           const char *name )
+{
+    const char* res = NULL;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        rc = ArgsOptionValue( my_args, name, 0, (const void **)&res );
+    }
+    return res;
+}
+
+
+/*
+ * returns the number of schema's given on the commandline
+*/
+uint32_t context_schema_count( p_context ctx )
+{
+    uint32_t res = 0;
+    if ( ctx != NULL )
+        if ( ctx->src_schema_list != 0 )
+        {
+            uint32_t count;
+            if ( KNamelistCount( ctx->src_schema_list, &count ) == 0 )
+                res = count;
+        }
+    return res;
+}
+
+
+static void context_evaluate_options( const Args *my_args, p_context ctx )
+{
+    if ( my_args == NULL ) return;
+    if ( ctx == NULL ) return;
+
+    ctx->dont_check_accession = context_get_bool_option( my_args, OPTION_WITHOUT_ACCESSION, false );
+    ctx->ignore_reject = context_get_bool_option( my_args, OPTION_IGNORE_REJECT, true );
+    ctx->ignore_redact = context_get_bool_option( my_args, OPTION_IGNORE_REDACT, false );
+    ctx->show_matching = context_get_bool_option( my_args, OPTION_SHOW_MATCHING, false );
+    ctx->show_progress = context_get_bool_option( my_args, OPTION_SHOW_PROGRESS, false );
+    ctx->ignore_incomp = context_get_bool_option( my_args, OPTION_IGNORE_INCOMP, false );
+    ctx->reindex       = context_get_bool_option( my_args, OPTION_REINDEX, true );
+    ctx->show_redact   = context_get_bool_option( my_args, OPTION_SHOW_REDACT, false );
+    ctx->show_meta     = context_get_bool_option( my_args, OPTION_SHOW_META, false );
+    ctx->force_kcmInit = context_get_bool_option( my_args, OPTION_FORCE, false );
+    ctx->force_unlock  = context_get_bool_option( my_args, OPTION_UNLOCK, false );
+
+    context_set_md5_mode( ctx, context_get_str_option( my_args, OPTION_MD5_MODE ) );
+    context_set_blob_checksum( ctx, context_get_str_option( my_args, OPTION_BLOB_CHECKSUM ) );
+
+#if ALLOW_EXTERNAL_CONFIG
+    context_set_kfg_path( ctx, context_get_str_option( my_args, OPTION_KFG_PATH ) );
+#endif
+
+    context_set_table( ctx, context_get_str_option( my_args, OPTION_TABLE ) );
+#if ALLOW_COLUMN_SPEC
+    context_set_columns( ctx, context_get_str_option( my_args, OPTION_COLUMNS ) );
+#endif
+    context_set_excluded_columns( ctx, context_get_str_option( my_args, OPTION_EXCLUDED_COLUMNS ) );
+
+    {
+        const char * row_range = context_get_str_option( my_args, OPTION_ROWS );
+        context_set_row_range( ctx, row_range );
+    }
+    nlt_make_namelist_from_string( &(ctx->src_schema_list), 
+                                   context_get_str_option( my_args, OPTION_SCHEMA ) );
+}
+
+
+/*
+ * reads all arguments and options, fills the context
+ * with copies (if strings) of this data
+*/
+rc_t context_capture_arguments_and_options( const Args * args, p_context ctx )
+{
+    rc_t rc;
+
+    rc = context_evaluate_arguments( args, ctx );
+    DISP_RC( rc, "evaluate_arguments() failed" );
+    if ( rc == 0 )
+    {
+        context_evaluate_options( args, ctx );
+        context_check_if_usage_necessary( ctx );
+
+        rc = ArgsHandleLogLevel( args );
+        DISP_RC( rc, "ArgsHandleLogLevel() failed" );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/context.h b/tools/vdb-copy/context.h
new file mode 100644
index 0000000..2ca14ea
--- /dev/null
+++ b/tools/vdb-copy/context.h
@@ -0,0 +1,183 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_context_
+#define _h_context_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifndef _h_config_values_
+#include "config_values.h"
+#endif
+
+#ifndef _h_vdb_redactval_
+#include "redactval.h"
+#endif
+
+#include <klib/num-gen.h>
+
+#include <kapp/args.h>
+#include "definitions.h"
+
+#define OPTION_TABLE             "table"
+#define OPTION_ROWS              "rows"
+#define OPTION_COLUMNS           "columns"
+#define OPTION_SCHEMA            "schema"
+#define OPTION_WITHOUT_ACCESSION "without_accession"
+#define OPTION_IGNORE_REJECT     "ignore_reject"
+#define OPTION_IGNORE_REDACT     "ignore_redact"
+
+#if ALLOW_EXTERNAL_CONFIG
+#define OPTION_KFG_PATH          "kfg_path"
+#endif
+
+#define OPTION_SHOW_MATCHING     "show_matching"
+#define OPTION_SHOW_PROGRESS     "show_progress"
+#define OPTION_IGNORE_INCOMP     "ignore_incompatible_columns"
+#define OPTION_REINDEX           "reindex"
+#define OPTION_SHOW_REDACT       "show_redact"
+#define OPTION_EXCLUDED_COLUMNS  "exclude_columns"
+#define OPTION_SHOW_META         "show_meta"
+#define OPTION_MD5_MODE          "md5mode"
+#define OPTION_FORCE             "force"
+#define OPTION_UNLOCK            "unlock"
+#define OPTION_BLOB_CHECKSUM     "blob_checksum"
+
+
+#define ALIAS_TABLE             "T"
+#define ALIAS_ROWS              "R"
+#define ALIAS_COLUMNS           "C"
+#define ALIAS_SCHEMA            "S"
+#define ALIAS_WITHOUT_ACCESSION "a"
+#define ALIAS_IGNORE_REJECT     "r"
+#define ALIAS_IGNORE_REDACT     "e"
+
+#if ALLOW_EXTERNAL_CONFIG
+#define ALIAS_KFG_PATH          "k"
+#endif
+
+#define ALIAS_SHOW_MATCHING     "m"
+#define ALIAS_SHOW_PROGRESS     "p"
+#define ALIAS_IGNORE_INCOMP     "i"
+#define ALIAS_REINDEX           "n"
+#define ALIAS_SHOW_REDACT       "w"
+#define ALIAS_EXCLUDED_COLUMNS  "x"
+#define ALIAS_SHOW_META         "t"
+#define ALIAS_MD5_MODE          "d"
+#define ALIAS_FORCE             "f"
+#define ALIAS_UNLOCK            "u"
+#define ALIAS_BLOB_CHECKSUM     "b"
+
+
+/* *******************************************************************
+the dump context contains all informations needed to execute the dump
+******************************************************************* */
+typedef struct context
+{
+    /* read from commandline */
+    char *src_path;
+    char *dst_path;
+    const char *kfg_path;    
+    const KNamelist *src_schema_list;
+    const char *table;
+    const char *columns;
+    const char *excluded_columns;
+    struct num_gen * row_generator;
+    bool usage_requested;
+    bool dont_check_accession;
+    uint64_t platform_id;
+    bool ignore_reject;
+    bool ignore_redact;
+    bool show_matching;
+    bool show_progress;
+    bool ignore_incomp;
+    bool reindex;
+    bool show_redact;
+    bool show_meta;
+    uint8_t md5_mode;
+    uint8_t blob_checksum;
+    bool force_kcmInit;
+    bool force_unlock;
+
+    /* set by application */
+    bool dont_remove_target;
+    config_values config;
+    redact_vals * rvals;
+    /* for the destination table*/
+    char * dst_schema_tabname;
+    /* legacy related parameters */
+    char * legacy_schema_file;
+    char * legacy_dont_copy;
+} context;
+typedef context* p_context;
+
+
+/*
+ * generates a new context, initializes values
+*/
+rc_t context_init( context **ctx );
+
+
+/*
+ * destroys a context, frees all pointers the context owns
+*/
+rc_t context_destroy( p_context ctx );
+
+
+/*
+ * performs the range check to trim the internal number
+ * generator to the given range
+*/
+rc_t context_range_check( p_context ctx, 
+                          const int64_t first, const uint64_t count );
+
+
+rc_t context_set_range( p_context ctx, 
+                        const int64_t first, const uint64_t count );
+
+/*
+ * returns the number of schema's given on the commandline
+*/
+uint32_t context_schema_count( p_context ctx );
+
+
+/*
+ * reads all arguments and options, fills the context
+ * with copies (if strings) of this data
+*/
+rc_t context_capture_arguments_and_options( const Args * args, p_context ctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/copy_context.c b/tools/vdb-copy/copy_context.c
new file mode 100644
index 0000000..992d514
--- /dev/null
+++ b/tools/vdb-copy/copy_context.c
@@ -0,0 +1,47 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "copy_context.h"
+
+#include <sysalloc.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+rc_t cctx_init( p_copy_ctx cctx )
+{
+    return 0;
+}
+
+
+void cctx_destroy( p_copy_ctx cctx )
+{
+    /* ********** destination stuff in reverse order... */
+    /*
+    cctx_destroy_str( &cctx->legacy_dont_copy );
+    cctx_destroy_str( &cctx->legacy_schema_file );
+    cctx_destroy_str( &cctx->dst_schema_tabname );
+    */
+}
diff --git a/tools/vdb-copy/copy_context.h b/tools/vdb-copy/copy_context.h
new file mode 100644
index 0000000..71e491a
--- /dev/null
+++ b/tools/vdb-copy/copy_context.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_copy_context_
+#define _h_vdb_copy_context_
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifndef _h_definitions_
+#include "definitions.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ----------------------------------------------------------------------------------- */
+typedef struct copy_ctx
+{
+    char * ptr;
+} copy_ctx;
+typedef copy_ctx* p_copy_ctx;
+
+
+rc_t cctx_init( p_copy_ctx cctx );
+void cctx_destroy( p_copy_ctx cctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/copy_meta.c b/tools/vdb-copy/copy_meta.c
new file mode 100644
index 0000000..9b556d8
--- /dev/null
+++ b/tools/vdb-copy/copy_meta.c
@@ -0,0 +1,518 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-copy-includes.h"
+#include "definitions.h"
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/time.h>
+#include <kapp/main.h>      /* for KAppVersion()*/
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <assert.h>
+
+static rc_t copy_metadata_data ( const KMDataNode *snode, KMDataNode *dnode )
+{
+    char buffer [ 1024 ];
+    size_t total, bytes, remaining;
+    /* copy node data unless already set */
+    rc_t rc = KMDataNodeRead ( dnode, 0, buffer, 0, & bytes, & total );
+    DISP_RC( rc, "copy_metadata_child:KMDataNodeRead(dst) failed" );
+    if ( rc == 0 && total == 0 )
+    do
+    {
+        rc = KMDataNodeRead ( snode, total, buffer, sizeof buffer, & bytes, & remaining );
+        DISP_RC( rc, "copy_metadata_child:KMDataNodeRead(src) failed" );
+        if ( rc == 0 )
+        {
+            rc = KMDataNodeAppend ( dnode, buffer, bytes );
+            DISP_RC( rc, "copy_metadata_child:KMDataNodeAppend(dst) failed" );
+            if ( rc != 0 ) break;
+        }
+        total += bytes;
+     } while ( remaining != 0 );
+    return rc;
+}
+
+
+static rc_t copy_metadata_attribs ( const KMDataNode *snode, KMDataNode *dnode,
+                                    const char *node_path, const bool show_meta )
+{
+    KNamelist *attrs;
+    uint32_t i, count;
+    rc_t rc = KMDataNodeListAttr ( snode, & attrs );
+    DISP_RC( rc, "copy_metadata_child:KMDataNodeListAttr(src) failed" );
+    if ( rc != 0 ) return rc;
+    rc = KNamelistCount ( attrs, & count );
+    for ( i = 0; rc == 0 && i < count; ++ i )
+    {
+        const char *attr;
+        rc = KNamelistGet ( attrs, i, & attr );
+        if ( rc == 0 )
+        {
+            char buffer [ 1024 ];
+            size_t bytes;
+            /* test for attr existence */
+            rc = KMDataNodeReadAttr ( dnode, attr, buffer, sizeof buffer, & bytes );
+            if ( rc != 0 )
+            {
+                rc = KMDataNodeReadAttr ( snode, attr, buffer, sizeof buffer, & bytes );
+                if ( rc == 0 )
+                {
+                    if ( show_meta )
+                        KOutMsg( "copy atr %s : %s\n", node_path, attr );
+                    rc = KMDataNodeWriteAttr ( dnode, attr, buffer );
+                }
+            }
+        }
+        DISP_RC( rc, "copy_metadata_child:failed to copy attribute" );
+    }
+    KNamelistRelease ( attrs );
+    return rc;
+}
+
+
+static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_root,
+                                  const char *node_path, const bool show_meta )
+{
+    const KMDataNode *snode;
+    KMDataNode *dnode;
+    KNamelist *names;
+
+    rc_t rc = KMDataNodeOpenNodeRead ( src_root, & snode, "%s", node_path );
+    DISP_RC( rc, "copy_metadata_child:KMDataNodeOpenNodeRead(src) failed" );
+    if ( rc != 0 ) return rc;
+
+    if ( show_meta )
+        KOutMsg( "copy child-node: %s\n", node_path );
+
+    rc = KMDataNodeOpenNodeUpdate ( dst_root, & dnode, "%s", node_path );
+    DISP_RC( rc, "copy_metadata_child:KMDataNodeOpenNodeUpdate(dst) failed" );
+    if ( rc == 0 )
+    {
+        rc = copy_metadata_data ( snode, dnode );
+        if ( rc == 0 )
+            rc = copy_metadata_attribs ( snode, dnode, node_path, show_meta );
+        KMDataNodeRelease ( dnode );
+    }
+    else
+    {
+        PLOGMSG( klogInfo, ( klogInfo, 
+                 "cannot open child-node(dst): $(node)", "node=%s", node_path ));
+    }
+
+    if ( rc == 0 || ( GetRCState( rc ) == rcBusy ) )
+    {
+        rc = KMDataNodeListChild ( snode, & names );
+        DISP_RC( rc, "copy_metadata_child:KMDataNodeListChild(src) failed" );
+        if ( rc == 0 )
+        {
+            uint32_t i, count;
+            char temp_path[ 1024 ];
+            size_t temp_len;
+
+            string_copy ( temp_path, ( sizeof temp_path ) - 1, node_path, string_size( node_path ) );
+            temp_len = string_size( temp_path );
+            temp_path[ temp_len++ ] = '/';
+            temp_path[ temp_len ] = 0;
+            rc = KNamelistCount ( names, & count );
+            for ( i = 0; rc == 0 && i < count; ++ i )
+            {
+                const char *child_name;
+                rc = KNamelistGet ( names, i, & child_name );
+                if ( rc == 0 )
+                {
+                    string_copy( temp_path + temp_len, ( sizeof temp_path ) - temp_len, child_name, string_size( child_name ) );
+                    rc = copy_metadata_child ( src_root, dst_root, temp_path, show_meta );
+                    temp_path[ temp_len ] = 0;
+                }
+            }
+            KNamelistRelease ( names );
+        }
+    }
+
+    KMDataNodeRelease ( snode );
+    return rc;
+}
+
+
+static rc_t copy_metadata_root ( const KMDataNode *src_root, KMDataNode *dst_root,
+                                 const char * excluded_nodes,
+                                 const bool show_meta )
+{
+    KNamelist *names;
+    const KNamelist *excluded_names = NULL;
+    uint32_t i, count;
+
+    rc_t rc = KMDataNodeListChild ( src_root, & names );
+    DISP_RC( rc, "copy_metadata_root:KMDataNodeListChild() failed" );
+    if ( rc != 0 ) return rc;
+    
+    if ( excluded_nodes != NULL )
+    {
+        rc = nlt_make_namelist_from_string( &excluded_names, excluded_nodes );
+        DISP_RC( rc, "copy_metadata_root:nlt_make_namelist_from_string() failed" );
+        if ( rc != 0 ) return rc;
+    }
+
+    rc = KNamelistCount ( names, & count );
+    for ( i = 0; rc == 0 && i < count; ++ i )
+    {
+        const char *node_path;
+        rc = KNamelistGet ( names, i, & node_path );
+        DISP_RC( rc, "copy_metadata_root:KNamelistGet() failed" );
+        if ( rc == 0 )
+        {
+            bool is_excluded = false;
+            if ( excluded_names != NULL )
+                is_excluded = nlt_is_name_in_namelist( excluded_names, node_path );
+            if ( !is_excluded )
+                rc = copy_metadata_child ( src_root, dst_root, node_path, show_meta );
+        }
+    }
+
+    if ( excluded_names != NULL )
+        KNamelistRelease( excluded_names );
+    KNamelistRelease ( names );
+    return rc;
+}
+
+
+static rc_t copy_stray_metadata ( const KMetadata *src_meta, KMetadata *dst_meta,
+                                  const char * excluded_nodes,
+                                  const bool show_meta )
+{
+    /* open root node */
+    const KMDataNode *src_root;
+    rc_t rc = KMetadataOpenNodeRead ( src_meta, & src_root, NULL );
+    DISP_RC( rc, "copy_stray_metadata:KMetadataOpenNodeRead() failed" );
+    if ( rc == 0 )
+    {
+        KMDataNode *dst_root;
+        rc = KMetadataOpenNodeUpdate ( dst_meta, & dst_root, NULL );
+        DISP_RC( rc, "copy_stray_metadata:KMetadataOpenNodeUpdate() failed" );
+        if ( rc == 0 )
+        {
+            /* treat the root node in a special way */
+            rc = copy_metadata_root ( src_root, dst_root, excluded_nodes, show_meta );
+            KMDataNodeRelease ( dst_root );
+        }
+        KMDataNodeRelease ( src_root );
+    }
+    return rc;
+}
+
+#if 0
+static rc_t drop_all( KMetadata *dst_meta )
+{
+    KMDataNode *dst_node;
+    rc_t rc = KMetadataOpenNodeUpdate ( dst_meta, & dst_node, NULL );
+    DISP_RC( rc, "drop_all:KMetadataOpenNodeUpdate() failed" );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeDropAll ( dst_node );
+        DISP_RC( rc, "drop_all:KMetadataDropAll() failed" );
+        KMDataNodeRelease ( dst_node );
+    }
+    return rc;
+}
+#endif
+
+static rc_t copy_back_revisions ( const KMetadata *src_meta, VTable *dst_table,
+                                  const bool show_meta )
+{
+    uint32_t max_revision, revision;
+
+    rc_t rc = KMetadataMaxRevision ( src_meta, &max_revision );
+    DISP_RC( rc, "copy_back_revisions:KMetadataMaxRevision() failed" );
+    if ( rc != 0 ) return rc;
+    if ( max_revision == 0 ) return rc;
+    for ( revision = 1; revision <= max_revision && rc == 0; ++revision )
+    {
+        const KMetadata *src_rev_meta;
+
+        if ( show_meta )
+            KOutMsg( "+++copy metadata rev. #%u:\n", revision );
+        rc = KMetadataOpenRevision ( src_meta, &src_rev_meta, revision );
+        DISP_RC( rc, "copy_back_revisions:KMetadataOpenRevision() failed" );
+        if ( rc == 0 )
+        {
+            KMetadata *dst_meta;
+            rc = VTableOpenMetadataUpdate ( dst_table, & dst_meta );
+            DISP_RC( rc, "copy_table_meta:VTableOpenMetadataUpdate() failed" );
+            if ( rc == 0 )
+            {
+                rc = copy_stray_metadata ( src_rev_meta, dst_meta, NULL, show_meta );
+                if ( rc == 0 )
+                {
+                    rc = KMetadataCommit ( dst_meta );
+                    DISP_RC( rc, "copy_back_revisions:KMetadataCommit() failed" );
+                    if ( rc == 0 )
+                    {
+                        rc = KMetadataFreeze ( dst_meta );
+                        DISP_RC( rc, "copy_back_revisions:KMetadataFreeze() failed" );
+                    }
+                }
+                KMetadataRelease ( dst_meta );
+            }
+
+            KMetadataRelease ( src_rev_meta );
+        }
+    }
+    return rc;
+}
+
+static rc_t fill_timestring( char * s, size_t size )
+{
+    KTime tr;
+    rc_t rc;
+    
+    KTimeLocal ( &tr, KTimeStamp() );
+/*
+    rc = string_printf ( s, size, NULL, 
+                         "%.04u-%.02u-%.02u %.02u:%.02u:%.02u",
+                         tr.year, tr.month + 1, tr.day, tr.hour, tr.minute, tr.second );
+*/
+    rc = string_printf ( s, size, NULL, "%lT", &tr );
+
+    DISP_RC( rc, "fill_timestring:string_printf( date/time ) failed" );
+    return rc;
+}
+
+static rc_t enter_time( KMDataNode *node, const char * key )
+{
+    char timestring[ 160 ];
+    rc_t rc = fill_timestring( timestring, sizeof timestring );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeWriteAttr ( node, key, timestring );
+        DISP_RC( rc, "enter_time:KMDataNodeWriteAttr( timestring ) failed" );
+    }
+    return rc;
+}
+
+
+static rc_t enter_version( KMDataNode *node, const char * key )
+{
+    char buff[ 32 ];
+    rc_t rc;
+
+    rc = string_printf ( buff, sizeof( buff ), NULL, "%.3V", KAppVersion() );
+    assert ( rc == 0 );
+    rc = KMDataNodeWriteAttr ( node, key, buff );
+    DISP_RC( rc, "enter_version:KMDataNodeWriteAttr() failed" );
+    return rc;
+}
+
+
+static rc_t enter_date_name_vers( KMDataNode *node )
+{
+    rc_t rc = enter_time( node, "run" );
+    DISP_RC( rc, "enter_date_name_vers:enter_time() failed" );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeWriteAttr ( node, "tool", "vdb-copy" );
+        DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(tool=vdb-copy) failed" );
+        if ( rc == 0 )
+        {
+            rc = enter_version ( node, "vers" );
+            DISP_RC( rc, "enter_date_name_vers:enter_version() failed" );
+            if ( rc == 0 )
+            {
+                rc = KMDataNodeWriteAttr ( node, "build", __DATE__ );
+                DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(build=_DATE_) failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t enter_schema_update( KMetadata *dst_meta, const bool show_meta )
+{
+    rc_t rc;
+    KMDataNode *sw_node;
+
+    if ( show_meta )
+        KOutMsg( "--- entering schema-update\n" );
+
+    rc = KMetadataOpenNodeUpdate ( dst_meta, &sw_node, "SOFTWARE" );
+    DISP_RC( rc, "enter_schema_update:KMetadataOpenNodeUpdate('SOFTWARE') failed" );
+    if ( rc == 0 )
+    {
+        KMDataNode *update_node;
+        rc = KMDataNodeOpenNodeUpdate ( sw_node, &update_node, "update" );
+        DISP_RC( rc, "enter_schema_update:KMDataNodeOpenNodeUpdate('update') failed" );
+        if ( rc == 0 )
+        {
+            rc = enter_date_name_vers( update_node );
+            KMDataNodeRelease ( update_node );
+        }
+        KMDataNodeRelease ( sw_node );
+    }
+    return rc;
+}
+
+
+static uint32_t get_child_count( KMDataNode *node )
+{
+    uint32_t res = 0;
+    KNamelist *names;
+    rc_t rc = KMDataNodeListChild ( node, &names );
+    DISP_RC( rc, "get_child_count:KMDataNodeListChild() failed" );
+    if ( rc == 0 )
+    {
+        rc = KNamelistCount ( names, &res );
+        DISP_RC( rc, "get_child_count:KNamelistCount() failed" );
+        KNamelistRelease ( names );
+    }
+    return res;
+}
+
+
+static rc_t enter_vdbcopy_node( KMetadata *dst_meta, const bool show_meta )
+{
+    rc_t rc;
+    KMDataNode *hist_node;
+
+    if ( show_meta )
+        KOutMsg( "--- entering Copy entry...\n" );
+
+    rc = KMetadataOpenNodeUpdate ( dst_meta, &hist_node, "HISTORY" );
+    DISP_RC( rc, "enter_vdbcopy_node:KMetadataOpenNodeUpdate('HISTORY') failed" );
+    if ( rc == 0 )
+    {
+        char event_name[ 32 ];
+        uint32_t index = get_child_count( hist_node ) + 1;
+        rc = string_printf ( event_name, sizeof( event_name ), NULL, "EVENT_%u", index );
+        DISP_RC( rc, "enter_vdbcopy_node:string_printf(EVENT_NR) failed" );
+        if ( rc == 0 )
+        {
+            KMDataNode *event_node;
+            rc = KMDataNodeOpenNodeUpdate ( hist_node, &event_node, "%s", event_name );
+            DISP_RC( rc, "enter_vdbcopy_node:KMDataNodeOpenNodeUpdate('EVENT_NR') failed" );
+            if ( rc == 0 )
+            {
+                rc = enter_date_name_vers( event_node );
+                KMDataNodeRelease ( event_node );
+            }
+        }
+        KMDataNodeRelease ( hist_node );
+    }
+    return rc;
+}
+
+
+rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
+                       const char * excluded_nodes,
+                       const bool show_meta, const bool schema_updated )
+{
+    const KMetadata *src_meta;
+    rc_t rc;
+
+    if ( src_table == NULL || dst_table == NULL )
+        return RC( rcExe, rcNoTarg, rcCopying, rcParam, rcNull );
+    /* it is OK if excluded_nodes is NULL */
+    
+    rc = VTableOpenMetadataRead ( src_table, & src_meta );
+    DISP_RC( rc, "copy_table_meta:VTableOpenMetadataRead() failed" );
+    if ( rc == 0 )
+    {
+        rc = copy_back_revisions ( src_meta, dst_table, show_meta );
+        if ( rc == 0 )
+        {
+            KMetadata *dst_meta;
+            rc = VTableOpenMetadataUpdate ( dst_table, & dst_meta );
+            DISP_RC( rc, "copy_table_meta:VTableOpenMetadataUpdate() failed" );
+            if ( rc == 0 )
+            {
+                if ( show_meta )
+                    KOutMsg( "+++copy current metadata\n" );
+
+                rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
+                                           show_meta );
+                if ( show_meta )
+                    KOutMsg( "+++end of copy current metadata\n" );
+
+                /* enter a attribute "vdb-copy" under '/SOFTWARE/update'
+                   *if the schema was updated ! */
+                if ( rc == 0 && schema_updated )
+                    rc = enter_schema_update( dst_meta, show_meta );
+
+                /* enter a unconditional node under '/SOFTWARE/Copy'
+                    <%TIMESTAMP%>
+                        <Application date="%DATE%" name="vdb-copy" vers="%VERSION%"/>
+                    </%TIMESTAMP%>
+                */
+                if ( rc == 0 )
+                    rc = enter_vdbcopy_node( dst_meta, show_meta );
+
+                KMetadataRelease ( dst_meta );
+            }
+        }
+        KMetadataRelease ( src_meta );
+    }
+    return rc;
+}
+
+
+rc_t copy_database_meta ( const VDatabase *src_db, VDatabase *dst_db,
+                          const char * excluded_nodes,
+                          const bool show_meta )
+{
+    const KMetadata *src_meta;
+    rc_t rc;
+
+    if ( src_db == NULL || dst_db == NULL )
+        return RC( rcExe, rcNoTarg, rcCopying, rcParam, rcNull );
+    /* it is OK if excluded_nodes is NULL */
+
+    rc = VDatabaseOpenMetadataRead ( src_db, & src_meta );
+    DISP_RC( rc, "copy_database_meta:VDatabaseOpenMetadataRead() failed" );
+    if ( rc == 0 )
+    {
+        KMetadata *dst_meta;
+        rc = VDatabaseOpenMetadataUpdate ( dst_db, & dst_meta );
+        DISP_RC( rc, "copy_database_meta:VDatabaseOpenMetadataUpdate() failed" );
+        if ( rc == 0 )
+        {
+            if ( show_meta )
+                KOutMsg( "+++copy current db-metadata\n" );
+
+            rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
+                                       show_meta );
+            if ( show_meta )
+                KOutMsg( "+++end of copy db-current metadata\n" );
+
+            KMetadataRelease ( dst_meta );
+        }
+       KMetadataRelease ( src_meta );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/copy_meta.h b/tools/vdb-copy/copy_meta.h
new file mode 100644
index 0000000..0248c20
--- /dev/null
+++ b/tools/vdb-copy/copy_meta.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_copy_meta_
+#define _h_copy_meta_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
+                       const char * excluded_nodes,
+                       const bool show_meta, const bool schema_updated );
+
+rc_t copy_database_meta ( const VDatabase *src_db, VDatabase *dst_db,
+                          const char * excluded_nodes,
+                          const bool show_meta );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/definitions.h b/tools/vdb-copy/definitions.h
new file mode 100644
index 0000000..de539df
--- /dev/null
+++ b/tools/vdb-copy/definitions.h
@@ -0,0 +1,112 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_definitions_
+#define _h_definitions_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_klib_out_
+#include <klib/out.h>
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_num_gen_
+#include <klib/num-gen.h>
+#endif
+
+#define DISP_RC(rc,err) (void)((rc == 0) ? 0 : LogErr( klogInt, rc, err ))
+
+#define DISP_RC2(rc,err,succ) \
+    (void)((rc != 0)? 0 : (succ) ? LOGMSG( klogInfo, succ ) : LogErr( klogInt, rc, err ))
+
+#define DB_COPY_ENABLED 1
+
+#define ALLOW_EXTERNAL_CONFIG 1
+
+#define SRA_PF_UNDEF 0
+#define SRA_PF_454 1
+#define SRA_PF_ILLUMINA 2
+#define SRA_PF_ABSOLID 3
+#define SRA_PF_COMPLETE_GENOMICS 4
+#define SRA_PF_HELICOS 5
+#define SRA_PF_UNKNOWN 6
+
+#define SRA_READ_FILTER_PASS 0
+#define SRA_READ_FILTER_REJECT 1
+#define SRA_READ_FILTER_CRITERIA 2
+#define SRA_READ_FILTER_REDACTED 3
+
+#define MD5_MODE_OFF 1
+#define MD5_MODE_ON 2
+#define MD5_MODE_AUTO 3
+
+#define BLOB_CHECKSUM_OFF 1
+#define BLOB_CHECKSUM_CRC32 2
+#define BLOB_CHECKSUM_MD5 3
+#define BLOB_CHECKSUM_AUTO 4
+
+#define TYPESPEC_BUF_LEN 128
+
+#define VDB_COPY_PREFIX "/VDBCOPY/"
+
+#define READ_FILTER_COL_NAME_KEY "/VDBCOPY/READ_FILTER_COL_NAME"
+#define READ_FILTER_COL_NAME "READ_FILTER"
+
+#define REDACTABLE_LIST_KEY "/VDBCOPY/REDACTVALUE/TYPES"
+
+#define REDACTABLE_TYPES_KEY "/VDBCOPY/REDACTABLE_TYPES"
+#define REDACTABLE_TYPES "INSDC:dna:text,INSDC:4na:bin,INSDC:4na:packed,INSDC:2na:bin,INSDC:x2na:bin,INSDC:2na:packed,INSDC:color:text,INSDC:2cs:bin,INSDC:x2cs:bin,INSDC:2cs:packed,INSDC:quality:phred,INSDC:quality:log_odds,INSDC:quality:text:phred_33,INSDC:quality:text:phred_64,INSDC:quality:text:log_odds_64,INSDC:position:zero,INSDC:position:one,NCBI:isamp1,NCBI:fsamp1,NCBI:fsamp4,NCBI:SRA:pos16,NCBI:SRA:encoded_qual4"
+
+#define DO_NOT_REDACT_KEY "/VDBCOPY/DO_NOT_REDACT"
+
+#define META_IGNORE_NODES_KEY "/VDBCOPY/META/IGNORE"
+#define META_IGNROE_NODES_DFLT "col,.seq,STATS"
+
+#define TYPE_SCORE_PREFIX "/VDBCOPY/SCORE/"
+
+#define LEGACY_SCHEMA_KEY "/schema"
+#define LEGACY_TAB_KEY "/tab"
+#define LEGACY_EXCLUDE_KEY "/dont_use"
+
+#define REDACTVALUE_PREFIX "/VDBCOPY/REDACTVALUE/"
+#define REDACTVALUE_VALUE_POSTFIX "/VALUE"
+#define REDACTVALUE_LEN_POSTFIX "/LEN"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/get_platform.c b/tools/vdb-copy/get_platform.c
new file mode 100644
index 0000000..c8f8662
--- /dev/null
+++ b/tools/vdb-copy/get_platform.c
@@ -0,0 +1,168 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "get_platform.h"
+#include <sysalloc.h>
+#include <stdlib.h> /* for malloc */
+#include <string.h> /* for memmove */
+
+#define PLATFORM_COL "(ascii)PLATFORM"
+
+static rc_t get_platform_from_table( const VTable *my_table, char ** dst, 
+                                     const char pre_and_postfix )
+{
+    const VCursor *my_cursor;
+    rc_t rc = VTableCreateCursorRead( my_table, &my_cursor );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( my_cursor );
+        if ( rc == 0 )
+        {
+            uint32_t col_idx;
+            rc = VCursorAddColumn( my_cursor, &col_idx, PLATFORM_COL );
+            if ( rc == 0 )
+            {
+                rc = VCursorSetRowId( my_cursor, 1 );
+                if ( rc == 0 )
+                {
+                    rc = VCursorOpenRow( my_cursor );
+                    if ( rc == 0 )
+                    {
+                        const void *src_buffer;
+                        uint32_t offset_in_bits;
+                        uint32_t element_count;
+                    
+                        rc = VCursorCellData( my_cursor, col_idx, NULL,
+                            &src_buffer, &offset_in_bits, &element_count );
+                        if ( rc == 0 )
+                        {
+                            char *src_ptr = (char*)src_buffer + ( offset_in_bits >> 3 );
+                            if ( pre_and_postfix != 0 )
+                                *dst = malloc( element_count + 3 );
+                            else
+                                *dst = malloc( element_count + 1 );
+                            if ( *dst != NULL )
+                            {
+                                if ( pre_and_postfix != 0 )
+                                {
+                                    (*dst)[ 0 ] = pre_and_postfix;
+                                    memmove( &(*dst)[1], src_ptr, element_count );
+                                    (*dst)[ element_count + 1 ] = pre_and_postfix;
+                                    (*dst)[ element_count + 2 ] = 0;
+                                }
+                                else
+                                {
+                                    memmove( *dst, src_ptr, element_count );
+                                    (*dst)[ element_count ] = 0;
+                                }
+                            }
+                            else
+                                rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                        }
+                        VCursorCloseRow( my_cursor );
+                    }
+                }
+            }
+        }
+        VCursorRelease( my_cursor );
+    }
+    return rc;
+}
+
+rc_t get_table_platform( const char * table_path, char ** dst, 
+                         const char pre_and_postfix )
+{
+    rc_t rc;
+    KDirectory *my_directory;
+    
+    if ( table_path == NULL || dst == 0 )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+    rc = KDirectoryNativeDir( &my_directory );
+    if ( rc == 0 )
+    {
+        VDBManager *my_manager;
+        rc = VDBManagerMakeUpdate ( &my_manager, my_directory );
+        if ( rc == 0 )
+        {
+            VSchema *my_schema;
+            rc = VDBManagerMakeSRASchema( my_manager, &my_schema );
+            if ( rc == 0 )
+            {
+                const VTable *my_table;
+                rc = VDBManagerOpenTableRead( my_manager, &my_table, my_schema, "%s", table_path );
+                if ( rc == 0 )
+                {
+                    rc = get_platform_from_table( my_table, dst, pre_and_postfix );
+                    VTableRelease( my_table );
+                }
+                VSchemaRelease( my_schema );
+            }
+            VDBManagerRelease( my_manager );
+        }
+        KDirectoryRelease( my_directory );
+    }
+    return rc;
+}
+
+rc_t get_db_platform( const char * db_path, const char * tab_name, 
+                      char ** dst, const char pre_and_postfix )
+{
+    rc_t rc;
+    KDirectory *my_directory;
+    
+    if ( db_path == NULL || tab_name == 0 || dst == 0 )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+    rc = KDirectoryNativeDir( &my_directory );
+    if ( rc == 0 )
+    {
+        VDBManager *my_manager;
+        rc = VDBManagerMakeUpdate ( &my_manager, my_directory );
+        if ( rc == 0 )
+        {
+            VSchema *my_schema;
+            rc = VDBManagerMakeSRASchema( my_manager, &my_schema );
+            if ( rc == 0 )
+            {
+                const VDatabase *my_database;
+                rc = VDBManagerOpenDBRead( my_manager, &my_database, my_schema, "%s", db_path );
+                if ( rc == 0 )
+                {
+                    const VTable *my_table;
+                    rc = VDatabaseOpenTableRead( my_database, &my_table, "%s", tab_name );
+                    if ( rc == 0 )
+                    {
+                        rc = get_platform_from_table( my_table, dst, pre_and_postfix );
+                        VTableRelease( my_table );
+                    }
+                    VDatabaseRelease( my_database );
+                }
+                VSchemaRelease( my_schema );
+            }
+            VDBManagerRelease( my_manager );
+        }
+        KDirectoryRelease( my_directory );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/get_platform.h b/tools/vdb-copy/get_platform.h
new file mode 100644
index 0000000..17f46bf
--- /dev/null
+++ b/tools/vdb-copy/get_platform.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_get_platform_
+#define _h_get_platform_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+rc_t get_table_platform( const char * table_path, char ** dst,
+                         const char pre_and_postfix );
+rc_t get_db_platform( const char * db_path, const char * tab_name, 
+                      char ** dst, const char pre_and_postfix );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/helper.c b/tools/vdb-copy/helper.c
new file mode 100644
index 0000000..62bee76
--- /dev/null
+++ b/tools/vdb-copy/helper.c
@@ -0,0 +1,919 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "helper.h"
+#include "definitions.h"
+#include <os-native.h>
+
+/* this is here to detect the md5-mode of the src-table */
+#include <kdb/kdb-priv.h>
+#include <kdb/table.h>
+
+#include <sysalloc.h>
+
+#include <bitstr.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <ctype.h>
+
+int64_t strtoi64( const char* str, char** endp, uint32_t base )
+{
+    int i = 0;
+    int64_t ret_value = 0;
+
+    if ( str != NULL && base != 1 && base <= 36 )
+    {
+        bool negate = false;
+
+        for ( ; isspace( str [ i ] ); ++ i )
+            ( void ) 0;
+
+        switch ( str [ i ] )
+        {
+        case '-':
+            negate = true;
+        case '+':
+            ++ i;
+            break;
+        }
+
+        if ( base == 0 )
+        {
+            if ( str [ i ] != '0' )
+                base = 10;
+            else if ( tolower ( str [ i + 1 ] == 'x' ) )
+            {
+                base = 16;
+                i += 2;
+            }
+            else
+            {
+                base = 8;
+                i += 1;
+            }
+        }
+
+        if ( base <= 10 )
+        {
+            for ( ; isdigit ( str [ i ] ); ++ i )
+            {
+                uint32_t digit = str [ i ] - '0';
+                if ( digit >= base )
+                    break;
+                ret_value *= base;
+                ret_value += digit;
+            }
+        }
+        else
+        {
+            for ( ; ; ++ i )
+            {
+                if ( isdigit ( str [ i ] ) )
+                {
+                    ret_value *= base;
+                    ret_value += str [ i ] - '0';
+                }
+                else if ( ! isalpha ( str [ i ] ) )
+                    break;
+                else
+                {
+                    uint32_t digit = toupper ( str [ i ] ) - 'A' + 10;
+                    if ( digit >= base )
+                        break;
+                    ret_value *= base;
+                    ret_value += digit;
+                }
+            }
+        }
+
+        if ( negate )
+            ret_value = - ret_value;
+    }
+
+    if ( endp != NULL )
+        * endp = (char *)str + i;
+
+    return ret_value;
+}
+
+
+uint64_t strtou64( const char* str, char** endp, uint32_t base )
+{
+    return strtoi64( str, endp, base );
+}
+
+
+/*
+ * calls the given manager to create a new SRA-schema
+ * takes the list of user-supplied schema's (which can be empty)
+ * and let the created schema parse all of them
+*/
+rc_t helper_parse_schema( const VDBManager *my_manager,
+                          VSchema **new_schema,
+                          const KNamelist *schema_list )
+{
+    rc_t rc;
+    if ( my_manager == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    if ( new_schema == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    rc = VDBManagerMakeSRASchema( my_manager, new_schema );
+    DISP_RC( rc, "VDBManagerMakeSRASchema() failed" );
+
+    if ( ( rc == 0 )&&( schema_list != NULL ) )
+    {
+        uint32_t count;
+        if ( KNamelistCount( schema_list, &count ) == 0 )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                if ( KNamelistGet( schema_list, idx, &s ) == 0 )
+                {
+                    rc = VSchemaParseFile( *new_schema, "%s", s );
+                    DISP_RC( rc, "VSchemaParseFile() failed" );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+                           const char *accession,
+                           const size_t bufsize )
+{
+    rc_t rc;
+    char * res = calloc( 1, bufsize );
+    if ( res == NULL ) return NULL;
+
+    rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        free( res );
+        return NULL;
+    }
+    else if ( GetRCState( rc ) == rcInsufficient )
+    {
+        free( res );
+        return translate_accession( my_sra_path, accession, bufsize * 2 );
+    }
+    else if ( rc != 0 )
+    {
+        free( res );
+        return NULL;
+    }
+    return res;
+}
+#endif
+
+
+#if TOOLS_USE_SRAPATH != 0
+rc_t helper_resolve_accession( const KDirectory *my_dir, char ** path )
+{
+    SRAPath *my_sra_path;
+    rc_t rc = 0;
+
+    if ( strchr ( *path, '/' ) != NULL )
+        return 0;
+
+    rc = SRAPathMake( &my_sra_path, my_dir );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+            DISP_RC( rc, "SRAPathMake() failed" );
+        else
+            rc = 0;
+    }
+    else
+    {
+        if ( !SRAPathTest( my_sra_path, *path ) )
+        {
+            char *buf = translate_accession( my_sra_path, *path, 64 );
+            if ( buf != NULL )
+            {
+                free( (char*)(*path) );
+                *path = buf;
+            }
+        }
+        SRAPathRelease( my_sra_path );
+    }
+    return rc;
+}
+#endif
+
+
+/*
+ * calls VTableTypespec to discover the table-name out of the schema
+ * the given table has to be opened!
+*/
+#define MAX_SCHEMA_TABNAME_LENGHT 80
+rc_t helper_get_schema_tab_name( const VTable *my_table, char ** name )
+{
+    rc_t rc;
+    char *s;
+    
+    if ( my_table == NULL || name == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    *name = NULL;
+    s = malloc( MAX_SCHEMA_TABNAME_LENGHT + 1 );
+    if ( s == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+
+    rc = VTableTypespec ( my_table, s, MAX_SCHEMA_TABNAME_LENGHT );
+    if ( rc == 0 )
+        *name = s;
+    else
+        free( s );
+
+    return rc;
+}
+
+
+/*
+ * reads a string out of a vdb-table:
+ * needs a open cursor, a row-idx and the index of the column
+ * it opens the row, requests a pointer via VCursorCellData()
+ * malloc's the dst-pointer and copies the string into it
+ * a 0-termination get's attached
+ * finally it closes the row
+*/
+rc_t helper_read_vdb_string( const VCursor* src_cursor,
+                             const uint64_t row_idx,
+                             const uint32_t col_idx,
+                             char ** dst )
+{
+    rc_t rc;
+
+    if ( dst == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    *dst = NULL;
+    rc = VCursorSetRowId( src_cursor, row_idx );
+    DISP_RC( rc, "helper_read_string:VCursorSetRowId() failed" );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpenRow( src_cursor );
+        DISP_RC( rc, "helper_read_string:VCursorOpenRow() failed" );
+        if ( rc == 0 )
+        {
+            const void *src_buffer;
+            uint32_t offset_in_bits;
+            uint32_t element_bits;
+            uint32_t element_count;
+
+            rc = VCursorCellData( src_cursor, col_idx, &element_bits,
+                  &src_buffer, &offset_in_bits, &element_count );
+            DISP_RC( rc, "helper_read_string:VCursorCellData() failed" );
+            if ( rc == 0 )
+            {
+                char *src_ptr = (char*)src_buffer + ( offset_in_bits >> 3 );
+                *dst = malloc( element_count + 1 );
+                if ( *dst != NULL )
+                {
+                    memmove( *dst, src_ptr, element_count );
+                    (*dst)[ element_count ] = 0;
+                }
+                else
+                    rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            }
+            VCursorCloseRow( src_cursor );
+            DISP_RC( rc, "helper_read_string:VCursorClose() failed" );
+        }
+    }
+    return rc;
+}
+
+uint8_t BitLength2Bytes[65] =
+{
+         /* 0  1  2  3  4  5  6  7  8  9*/
+   /* 0 */  0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+   /* 1 */  2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
+   /* 2 */  3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+   /* 3 */  4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
+   /* 4 */  5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+   /* 5 */  7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+   /* 6 */  8, 8, 8, 8, 8
+};
+
+/*************************************************************************************
+n_bits   [IN] ... number of bits
+
+calculates the number of bytes that have to be copied to contain the given
+number of bits
+*************************************************************************************/
+static uint16_t bitlength_2_bytes( const size_t n_bits )
+{
+    if ( n_bits > 64 )
+        return 8;
+    else
+        return BitLength2Bytes[ n_bits ];
+}
+
+
+/*
+ * reads a int64 out of a vdb-table:
+ * needs a open cursor, row-id already set, row opened
+ * it copies the data via memmove where to the dst-pointer
+ * points to / the size in the vdb-table can be smaller
+*/
+rc_t helper_read_vdb_int_row_open( const VCursor* src_cursor,
+                          const uint32_t col_idx, uint64_t * dst )
+{
+    const void *src_buffer;
+    uint32_t offset_in_bits;
+    uint32_t element_bits;
+    uint32_t element_count;
+
+    rc_t rc = VCursorCellData( src_cursor, col_idx, &element_bits,
+                  &src_buffer, &offset_in_bits, &element_count );
+    DISP_RC( rc, "helper_read_int_intern:VCursorCellData() failed" );
+    if ( rc == 0 )
+    {
+        uint64_t value = 0;
+        char *src_ptr = (char*)src_buffer + ( offset_in_bits >> 3 );
+        if ( ( offset_in_bits & 7 ) == 0 )
+            memmove( &value, src_ptr, bitlength_2_bytes( element_bits ) );
+        else
+            bitcpy ( &value, 0, src_ptr, offset_in_bits, element_bits );
+        *dst = value;
+    }
+    return rc;
+}
+
+
+/*
+ * reads a int64 out of a vdb-table:
+ * needs a open cursor, it opens the row,
+ * calls helper_read_vdb_int_row_open()
+ * finally it closes the row
+*/
+rc_t helper_read_vdb_int( const VCursor* src_cursor,
+                          const uint64_t row_idx,
+                          const uint32_t col_idx,
+                          uint64_t * dst )
+{
+    rc_t rc;
+
+    if ( src_cursor == NULL || dst == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    *dst = 0;
+    rc = VCursorSetRowId( src_cursor, row_idx );
+    DISP_RC( rc, "helper_read_int:VCursorSetRowId() failed" );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpenRow( src_cursor );
+        DISP_RC( rc, "helper_read_int:VCursorOpenRow() failed" );
+        if ( rc == 0 )
+        {
+            rc = helper_read_vdb_int_row_open( src_cursor, col_idx, dst );
+            VCursorCloseRow( src_cursor );
+            DISP_RC( rc, "helper_read_int:VCursorClose() failed" );
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * reads a string out of a KConfig-object:
+ * needs a cfg-object, and the full name of the key(node)
+ * it opens the node, discovers the size, malloc's the string,
+ * reads the string and closes the node
+*/
+rc_t helper_read_cfg_str( const KConfig *cfg, const char * key,
+                          char ** value )
+{
+    const KConfigNode *node;
+    rc_t rc;
+    
+    if ( value == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+ 
+    *value = NULL;
+    rc = KConfigOpenNodeRead ( cfg, &node, "%s", key );
+    /* it is OK if we do not find it, so no DISP_RC here */
+    if ( rc == 0 )
+    {
+        size_t num_read, remaining;
+        /* first we ask about the size to be read */
+        rc = KConfigNodeRead ( node, 0, NULL, 0, &num_read, &remaining );
+        DISP_RC( rc, "helper_read_config_str:KConfigNodeRead(1) failed" );
+        if ( rc == 0 )
+        {
+            *value = malloc( remaining + 1 );
+            if ( *value )
+            {
+                size_t to_read = remaining;
+                rc = KConfigNodeRead ( node, 0, *value, to_read, &num_read, &remaining );
+                DISP_RC( rc, "helper_read_config_str:KConfigNodeRead(2) failed" );
+                if ( rc == 0 )
+                    (*value)[ num_read ] = 0;
+            }
+            else
+                rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+        KConfigNodeRelease( node );
+    }
+    return rc;
+}
+
+
+/*
+ * reads a uint64 out of a KConfig-object:
+ * needs a cfg-object, and the full name of the key(node)
+ * it calls helper_read_cfg_str() to read the node as string
+ * and converts it via strtou64() into a uint64
+*/
+rc_t helper_read_cfg_int( const KConfig *cfg, const char * key,
+                          uint64_t * value )
+{
+    char *str_value;
+    rc_t rc;
+
+    if ( value == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+    *value = 0;
+    
+    rc = helper_read_cfg_str( cfg, key, &str_value );
+    DISP_RC( rc, "helper_read_config_int:helper_read_config_str() failed" );
+    if ( rc == 0 )
+    {
+        *value = strtou64( str_value, NULL, 0 );
+        free( str_value );
+    }
+    return rc;
+}
+
+
+/*
+ * tries to detect if the given name of a schema-table is
+ * a schema-legacy-table, it needs the vdb-manager to
+ * open a sra-schema and request this schema to list all
+ * legacy tables, then it searches in that list for the
+ * given table-name
+*/
+rc_t helper_is_tablename_legacy( const VDBManager *my_manager,
+            const char * tabname, bool * flag )
+{
+    VSchema *schema;
+    rc_t rc;
+
+    if ( flag == NULL )
+        return RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcNull );
+    *flag = false;
+
+    rc = VDBManagerMakeSRASchema ( my_manager, &schema );
+    DISP_RC( rc, "helper_is_tablename_legacy:VDBManagerMakeSRASchema() failed" );
+    if ( rc == 0 )
+    {
+        KNamelist *list;
+        rc = VSchemaListLegacyTables ( schema, &list );
+        DISP_RC( rc, "helper_is_tablename_legacy:VSchemaListLegacyTables() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount ( list, &count );
+            DISP_RC( rc, "helper_is_tablename_legacy:KNamelistCoun() failed" );
+            if ( rc == 0 )
+            {
+                uint32_t idx = 0;
+                size_t tabname_len = string_size ( tabname );
+                while( idx < count && rc == 0 && *flag == false )
+                {
+                    const char * name;
+                    rc = KNamelistGet ( list, idx, &name );
+                    if ( rc == 0 )
+                    {
+                        size_t len = string_size ( name );
+                        if ( string_cmp ( name, len, tabname, tabname_len,
+                             ( len < tabname_len ) ? len : tabname_len ) == 0 )
+                            *flag = true;
+                    }
+                    idx++;
+                }
+            }
+            KNamelistRelease( list );
+        }
+        VSchemaRelease( schema );
+    }
+    return rc;
+}
+
+
+/*
+ * helper-function to replace all ':' and '#' chars
+ * with '_' chars
+*/
+static void helper_process_c_str( char * s )
+{
+    size_t idx, len = string_measure ( s, NULL );
+    for ( idx = 0; idx < len; ++idx )
+    {
+        if ( s[ idx ] == ':' || s[ idx ] == '#' )
+            s[ idx ] = '_';
+    }
+}
+
+
+/*
+ * helper-function to replace all ':' and '#' chars
+ * with '_' chars
+*/
+static void helper_process_cfg_key( String *s )
+{
+    uint32_t idx;
+    for ( idx = 0; idx < s->len; ++idx )
+    {
+        if ( s->addr[ idx ] == ':' || s->addr[ idx ] == '#' )
+            ( (char *)(s->addr) )[ idx ] = '_';
+    }
+}
+
+
+/*
+ * helper-function to read the value of cfg-node
+ * if key_sel = xxx and s_sub = yyy
+ * the node-name is formed like that "/VDBCOPY/xxx/yyy"
+ * to read the value helper_read_cfg_str() is called
+*/
+static rc_t helper_get_legacy_node( KConfig *cfg,
+        String *key_sel, const char * s_sub, char ** dst )
+{
+    String key_prefix, key_sub;
+    const String *temp;
+    const String *key;
+    rc_t rc;
+
+    StringInitCString( &key_prefix, VDB_COPY_PREFIX );
+    rc = StringConcat ( &temp, &key_prefix, key_sel );
+    if ( rc != 0 ) return rc;
+    
+    StringInitCString( &key_sub, s_sub );
+    rc = StringConcat ( &key, temp, &key_sub );
+    StringWhack ( temp );
+    if ( rc != 0 ) return rc;
+    
+    rc = helper_read_cfg_str( cfg, key->addr, dst );
+    StringWhack ( key );
+    return rc;
+}
+
+
+/*
+ * helper-function to read the value of a cfg-node
+ * if pf = "_454_", schema = "NCBI_SRA__454__tbl_v0_1"
+ * and postfix = "tab" it first tries to read:
+ *      "/VDBCOPY/NCBI_SRA__454__tbl_v0_1/tab"
+ * if this node is not found it tries to read:
+ *      "/VDBCOPY/_454_/tab"
+ * if this node is not found it is a error
+*/
+static rc_t helper_get_legacy_value( KConfig *cfg,
+        String *pf, String *schema, const char * postfix, char ** dst )
+{
+    /* first try to find the value under the src-schema-key */
+    rc_t rc = helper_get_legacy_node( cfg, schema, postfix, dst );
+    /* if this fails try to find it mapped to the platform */
+    if ( rc != 0 )
+        rc = helper_get_legacy_node( cfg, pf, postfix, dst );
+    return rc;
+}
+
+
+/*
+ * this function tries to read 3 strings out of cfg-nodes
+ * (1) the name of the schema-file to be used to copy to
+ * (2) the name of the table to be used inside the schema
+ * (3) a list of columns that should not be copied
+ * if (3) cannot be found it is not a error
+ * it needs as input the cfg-object, the name of the 
+ * (src)legacy-platform and the name of the
+ * (src)schema-table
+*/
+rc_t helper_get_legacy_write_schema_from_config( KConfig *cfg,
+    const char * platform,
+    const char * src_schema,
+    char ** legacy_schema_file, char ** legacy_schema_tab,
+    char ** legacy_dont_copy )
+{
+    rc_t rc;
+    String key_pf, key_schema;
+
+    StringInitCString( &key_pf, platform );
+    helper_process_cfg_key( &key_pf );
+    StringInitCString( &key_schema, src_schema );
+    helper_process_cfg_key( &key_pf );
+
+    rc = helper_get_legacy_value( cfg, &key_pf, &key_schema, 
+                LEGACY_SCHEMA_KEY, legacy_schema_file );
+    if ( rc != 0 ) return rc;
+    
+    rc = helper_get_legacy_value( cfg, &key_pf, &key_schema,
+                LEGACY_TAB_KEY, legacy_schema_tab );
+    if ( rc != 0 ) return rc;
+
+    /* dont_use is optional, no error if not found! */
+    helper_get_legacy_value( cfg, &key_pf, &key_schema,
+                LEGACY_EXCLUDE_KEY, legacy_dont_copy );
+    return 0;
+}
+
+
+/*
+ * this function creates a config-manager, by passing in
+ * a KDirectory-object representing the given path
+ * this will include the the given path into the search
+ * for *.kfg - files
+*/
+rc_t helper_make_config_mgr( KConfig **config_mgr, const char * path )
+{
+#if ALLOW_EXTERNAL_CONFIG
+    KDirectory *directory;
+    const KDirectory *config_sub_dir;
+
+    rc_t rc = KDirectoryNativeDir( &directory );
+    if ( rc != 0 ) return rc;
+    rc = KDirectoryOpenDirRead ( directory, &config_sub_dir, false, "%s", path );
+    if ( rc == 0 )
+    {
+        rc = KConfigMake ( config_mgr, config_sub_dir );
+        KDirectoryRelease( config_sub_dir );
+    }
+    KDirectoryRelease( directory );
+#else
+    rc_t rc = KConfigMake ( config_mgr, NULL );
+#endif
+    return rc;
+}
+
+
+/*
+ * this function tries to read the lossynes-score of a vdb-type
+ * out of a config-object
+ * it constructs a node-name-string like this:
+ *      "/VDBCOPY/SCORE/INSDC_2na_bin"
+ * INSDC/2na/bin is the name of the type with ":" replaced by "_"
+ * it reads the value by calling helper_read_cfg_str()
+*/
+uint32_t helper_rd_type_score( const KConfig *cfg, 
+                               const char *type_name )
+{
+    uint32_t res = 0;
+    if ( cfg != NULL && type_name != NULL && type_name[0] != 0 )
+    {
+        uint32_t prefix_len = string_measure ( TYPE_SCORE_PREFIX, NULL ) + 1;
+        uint32_t len = string_measure ( type_name, NULL ) + prefix_len;
+        char *s = malloc( len );
+        if ( s != NULL )
+        {
+            char *value;
+            size_t n = string_copy_measure ( s, len, TYPE_SCORE_PREFIX );
+            string_copy_measure( &(s[n]), len, type_name );
+            helper_process_c_str( s );
+            if ( helper_read_cfg_str( cfg, s, &value ) == 0 )
+            {
+                if ( value != NULL )
+                {
+                    res = strtol( value, NULL, 0 );
+                    free( value );
+                }
+            }
+            free( s );
+        }
+    }
+    return res;
+}
+
+
+/* remove the target-table if something went wrong */
+rc_t helper_remove_path( KDirectory * directory, const char * path )
+{
+    rc_t rc;
+
+    PLOGMSG( klogInfo, ( klogInfo, "removing '$(path)'", "path=%s", path ));
+    rc = KDirectoryRemove ( directory, true, "%s", path );
+    DISP_RC( rc, "vdb_copy_remove_table:KDirectoryRemove() failed" );
+    return rc;
+}
+
+
+bool helper_is_this_a_filesystem_path( const char * path )
+{
+    bool res = false;
+    size_t i, n = string_size ( path );
+    for ( i = 0; i < n && !res; ++i )
+    {
+        char c = path[ i ];
+        res = ( c == '.' || c == '/' || c == '\\' );
+    }
+    return res;
+}
+
+
+static void helper_read_redact_value( KConfig * config_mgr, redact_vals * rvals,
+                               const char * type_name )
+{
+    rc_t rc;
+    String key_prefix, key_type, key_postfix;
+    const String * p1;
+
+    StringInitCString( &key_prefix, REDACTVALUE_PREFIX );
+    StringInitCString( &key_type, type_name );
+    StringInitCString( &key_postfix, REDACTVALUE_VALUE_POSTFIX );
+    rc = StringConcat ( &p1, &key_prefix, &key_type );
+    if ( rc == 0 )
+    {
+        const String * key;
+        rc = StringConcat ( &key, p1, &key_postfix );
+        if ( rc == 0 )
+        {
+            char * value_str;
+            rc = helper_read_cfg_str( config_mgr, key->addr, &value_str );
+            StringWhack ( key );
+            if ( rc == 0 )
+            {
+                StringInitCString( &key_postfix, REDACTVALUE_LEN_POSTFIX );
+                rc = StringConcat ( &key, p1, &key_postfix );
+                if ( rc == 0 )
+                {
+                    uint32_t idx, l, len = 1;
+                    char * endp, * len_str, * real_type;
+
+                    rc = helper_read_cfg_str( config_mgr, key->addr, &len_str );
+                    StringWhack ( key );
+                    if ( rc == 0 )
+                    {
+                        len = strtol( len_str, &endp, 0 );
+                        free( len_str );
+                    }
+
+                    real_type = string_dup_measure ( type_name, NULL );
+                    l = string_size ( real_type );
+                        
+                    /* transform the typename back into '_' ---> ':' real typename */
+                    for ( idx = 0; idx < l; ++idx )
+                        if ( real_type[idx] == '_' )
+                            real_type[idx] = ':';
+
+                    /* finally insert the redact-value-pair into the list */
+                    redact_vals_add( rvals, real_type, len, value_str );
+                    free( real_type );
+                }
+                free( value_str );
+            }
+        }
+        StringWhack ( p1 );
+    }
+}
+
+
+void helper_read_redact_values( KConfig * config_mgr, redact_vals * rvals )
+{
+    rc_t rc;
+    char * type_list_str;
+    const KNamelist *type_list;
+
+    /* first we read the list of redactable types */
+    helper_read_cfg_str( config_mgr, 
+            REDACTABLE_LIST_KEY, &type_list_str );
+    if ( type_list_str == NULL ) return;
+    rc = nlt_make_namelist_from_string( &type_list, type_list_str );
+    if ( rc == 0 && type_list != NULL )
+    {
+        uint32_t idx, count;
+        rc = KNamelistCount( type_list, &count );
+        if ( rc == 0 && count > 0 )
+            for ( idx = 0; idx < count; ++idx )
+            {
+                const char *type_name;
+                rc = KNamelistGet( type_list, idx, &type_name );
+                if ( rc == 0 )
+                    helper_read_redact_value( config_mgr, rvals, type_name );
+            }
+        KNamelistRelease( type_list );
+    }
+    free( type_list_str );
+}
+
+
+void helper_read_config_values( KConfig * config_mgr, p_config_values config )
+{
+    /* key's and default-values in definitions.h */
+
+    /* look for the name of the filter-column */
+    helper_read_cfg_str( config_mgr, 
+            READ_FILTER_COL_NAME_KEY, &(config->filter_col_name) );
+    if ( config->filter_col_name == NULL )
+        config->filter_col_name = string_dup_measure ( READ_FILTER_COL_NAME, NULL );
+
+    /* look for the comma-separated list of meta-nodes to be ignored */
+    helper_read_cfg_str( config_mgr, 
+            META_IGNORE_NODES_KEY, &(config->meta_ignore_nodes) );
+    if ( config->meta_ignore_nodes == NULL )
+        config->meta_ignore_nodes = string_dup_measure ( META_IGNROE_NODES_DFLT, NULL );
+
+    /* look for the comma-separated list of redactable types */
+    helper_read_cfg_str( config_mgr, 
+            REDACTABLE_TYPES_KEY, &(config->redactable_types) );
+    if ( config->redactable_types == NULL )
+        config->redactable_types = string_dup_measure ( REDACTABLE_TYPES, NULL );
+
+    /* look for the comma-separated list of columns which are protected from redaction */
+    helper_read_cfg_str( config_mgr, 
+            DO_NOT_REDACT_KEY, &(config->do_not_redact_columns) );
+}
+
+
+bool helper_detect_src_md5( const VTable * src_tab )
+{
+    rc_t rc;
+    const struct KTable * ktab;
+    bool res = false;
+
+    rc = VTableOpenKTableRead ( src_tab, &ktab );
+    if ( rc == 0 )
+    {
+        const struct KDirectory *dir;
+        rc = KTableOpenDirectoryRead ( ktab, &dir );
+        if ( rc == 0 )
+        {
+            /* ask for pathtype of "md5" */
+            uint32_t pt = KDirectoryPathType ( dir, "md5" );
+            if ( ( pt == kptFile )||( pt == ( kptFile | kptAlias ) ) )
+                res = true;
+            KDirectoryRelease( dir );
+        }
+        KTableRelease( ktab );
+    }
+    return res;
+}
+
+
+KCreateMode helper_assemble_CreateMode( const VTable * src_tab, 
+                                        bool force_init, uint8_t md5_mode )
+{
+    KCreateMode res = kcmParents;
+ 
+    if ( md5_mode == MD5_MODE_AUTO )
+    {
+        bool src_md5_mode = helper_detect_src_md5( src_tab );
+        md5_mode = ( src_md5_mode ? MD5_MODE_ON : MD5_MODE_OFF );
+    }
+
+    if ( force_init )
+        res |= kcmInit;
+    else
+        res |= kcmCreate;
+
+    switch( md5_mode )
+    {
+    case MD5_MODE_ON :
+    case MD5_MODE_AUTO : res |= kcmMD5; break;
+    }
+    return res;
+}
+
+
+KChecksum helper_assemble_ChecksumMode( uint8_t ctx_blob_checksum )
+{
+    KChecksum res = kcsCRC32; /* from interfaces/kdb/column.h */
+    switch( ctx_blob_checksum )
+    {
+        case BLOB_CHECKSUM_OFF   : res = kcsNone; break;
+        case BLOB_CHECKSUM_CRC32 : res = kcsCRC32; break;
+        case BLOB_CHECKSUM_MD5   : res = kcsMD5; break;
+        case BLOB_CHECKSUM_AUTO  : res = kcsCRC32; break;
+    }
+    return res;
+}
diff --git a/tools/vdb-copy/helper.h b/tools/vdb-copy/helper.h
new file mode 100644
index 0000000..998961e
--- /dev/null
+++ b/tools/vdb-copy/helper.h
@@ -0,0 +1,225 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_helper_
+#define _h_helper_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifndef _h_vdb_redactval_
+#include "redactval.h"
+#endif
+
+#ifndef _h_config_values_
+#include "config_values.h"
+#endif
+
+int64_t strtoi64( const char* str, char** endp, uint32_t base );
+uint64_t strtou64( const char* str, char** endp, uint32_t base );
+
+/*
+ * calls the given manager to create a new SRA-schema
+ * takes the list of user-supplied schema's (which can be empty)
+ * and let the created schema parse all of them
+*/
+rc_t helper_parse_schema( const VDBManager *my_manager,
+                          VSchema **new_schema,
+                          const KNamelist *schema_list );
+
+/*
+ * tries to interpret the given string in path as a accession
+ * and returns the path of the found accession back in path
+ * if it is possible, if not the original value of path remains unchanged
+ * rc = 0 if the given path is a file-system-path or we are not
+ * (weakly) linked against the sra-path-library
+rc_t helper_resolve_accession( const KDirectory *my_dir,
+                               char ** path );
+*/
+
+/*
+ * calls VTableTypespec to discover the table-name out of the schema
+ * the given table has to be opened!
+*/
+rc_t helper_get_schema_tab_name( const VTable *my_table, char ** name ) ;
+
+
+/*
+ * reads a string out of a vdb-table:
+ * needs a open cursor, a row-idx and the index of the column
+ * it opens the row, requests a pointer via VCursorCellData()
+ * malloc's the dst-pointer and copies the string into it
+ * a 0-termination get's attached
+ * finally it closes the row
+*/
+rc_t helper_read_vdb_string( const VCursor* src_cursor,
+                             const uint64_t row_idx,
+                             const uint32_t col_idx,
+                             char ** dst );
+
+
+/*
+ * reads a int64 out of a vdb-table:
+ * needs a open cursor, row-id already set, row opened
+ * it copies the data via memmove where to the dst-pointer
+ * points to / the size in the vdb-table can be smaller
+*/
+rc_t helper_read_vdb_int_row_open( const VCursor* src_cursor,
+                          const uint32_t col_idx, uint64_t * dst );
+
+
+/*
+ * reads a int64 out of a vdb-table:
+ * needs a open cursor, it opens the row,
+ * calls helper_read_vdb_int_row_open()
+ * finally it closes the row
+*/
+rc_t helper_read_vdb_int( const VCursor* src_cursor,
+                          const uint64_t row_idx,
+                          const uint32_t col_idx,
+                          uint64_t * dst );
+
+
+/*
+ * reads a string out of a KConfig-object:
+ * needs a cfg-object, and the full name of the key(node)
+ * it opens the node, discovers the size, malloc's the string,
+ * reads the string and closes the node
+*/
+rc_t helper_read_cfg_str( const KConfig *cfg,
+                          const char * key,
+                          char ** value );
+
+
+/*
+ * reads a uint64 out of a KConfig-object:
+ * needs a cfg-object, and the full name of the key(node)
+ * it calls helper_read_cfg_str() to read the node as string
+ * and converts it via strtoll() into a uint64
+*/
+rc_t helper_read_cfg_int( const KConfig *cfg,
+                          const char * key,
+                          uint64_t * value );
+
+
+/*
+ * tries to detect if the given name of a schema-table is
+ * a schema-legacy-table, it needs the vdb-manager to
+ * open a sra-schema and request this schema to list all
+ * legacy tables, then it searches in that list for the
+ * given table-name
+*/
+rc_t helper_is_tablename_legacy( const VDBManager *my_manager,
+            const char * tabname, bool * flag );
+
+
+/*
+ * this function tries to read 3 strings out of cfg-nodes
+ * (1) the name of the schema-file to be used to copy to
+ * (2) the name of the table to be used inside the schema
+ * (3) a list of columns that should not be copied
+ * if (3) cannot be found it is not a error
+ * it needs as input the cfg-object, the name of the 
+ * (src)legacy-platform and the name of the
+ * (src)schema-table
+*/
+rc_t helper_get_legacy_write_schema_from_config( KConfig *cfg,
+    const char * platform,
+    const char * src_schema,
+    char ** legacy_schema_file, char ** legacy_schema_tab,
+    char ** legacy_dont_copy );
+
+
+/*
+ * this function creates a config-manager, by passing in
+ * a KDirectory-object representing the given path
+ * this will include the the given path into the search
+ * for *.kfg - files
+*/
+rc_t helper_make_config_mgr( KConfig **config_mgr, const char * path );
+
+
+/*
+ * this function tries to read the lossynes-score of a vdb-type
+ * out of a config-object
+ * it constructs a node-name-string like this:
+ *      "/VDBCOPY/SCORE/INSDC/2na/bin"
+ * INSDC/2na/bin is the name of the type with ":" replaced by "/"
+ * it reads the value by calling helper_read_cfg_str()
+*/
+uint32_t helper_rd_type_score( const KConfig *cfg,
+                               const char *type_name );
+
+
+/*
+ * this function tries to remove the given path
+*/
+rc_t helper_remove_path( KDirectory * directory, const char * path );
+
+
+/*
+ * looks into the path for chars like '/', '\\' or '.'
+ * to detect that it is rather a path and not and accession
+*/
+bool helper_is_this_a_filesystem_path( const char * path );
+
+
+/*
+ * reads global config-values, from the config-manager
+*/
+void helper_read_redact_values( KConfig * config_mgr,
+                                redact_vals * rvals );
+
+/*
+ * reads global config-values, if not found via config-manager
+ * use the defines from definition.h
+*/
+void helper_read_config_values( KConfig * config_mgr,
+                                p_config_values config );
+
+
+/*
+ * detects if the given table uses md5-checksum's
+*/
+bool helper_detect_src_md5( const VTable * src_tab );
+
+
+KCreateMode helper_assemble_CreateMode( const VTable * src_tab, 
+                                        bool force_init, uint8_t md5_mode );
+
+
+KChecksum helper_assemble_ChecksumMode( uint8_t ctx_blob_checksum );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/matcher_input.h b/tools/vdb-copy/matcher_input.h
new file mode 100644
index 0000000..1a5434a
--- /dev/null
+++ b/tools/vdb-copy/matcher_input.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_matcher_input_
+#define _h_matcher_input_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* structure with all the matcher-inputs */
+typedef struct matcher_input
+{
+    VDBManager * manager;
+    const KNamelist * add_schemas;
+    KConfig * cfg;
+    KDirectory * dir;
+    const char * columns;
+    const char * src_path;
+    const char * dst_path;
+    const char * legacy_schema;
+    const char * dst_tabname;
+    const char * excluded_columns;
+    bool force_kcmInit;
+    bool force_unlock;
+} matcher_input;
+typedef matcher_input* p_matcher_input;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/namelist_tools.c b/tools/vdb-copy/namelist_tools.c
new file mode 100644
index 0000000..270449b
--- /dev/null
+++ b/tools/vdb-copy/namelist_tools.c
@@ -0,0 +1,187 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "namelist_tools.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+
+int nlt_strcmp( const char* s1, const char* s2 )
+{
+    size_t n1 = string_size ( s1 );
+    size_t n2 = string_size ( s2 );
+    return string_cmp ( s1, n1, s2, n2, ( n1 < n2 ) ? n2 : n1 );
+}
+
+
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src )
+{
+    VNamelist *v_names;
+    rc_t rc = VNamelistMake ( &v_names, 5 );
+    if ( rc == 0 )
+    {
+        char * s = string_dup_measure ( src, NULL );
+        if ( s )
+        {
+            uint32_t str_begin = 0;
+            uint32_t str_end = 0;
+            char c;
+            do
+            {
+                c = s[ str_end ];
+                if ( c == ',' || c == 0 )
+                {
+                    if ( str_begin < str_end )
+                    {
+                        char c_temp = c;
+                        s[ str_end ] = 0;
+                        rc = VNamelistAppend ( v_names, &(s[str_begin]) );
+                        s[ str_end ] = c_temp;
+                    }
+                    str_begin = str_end + 1;
+                }
+                str_end++;
+            } while ( c != 0 && rc == 0 );
+            free( s );
+        }
+        rc = VNamelistToConstNamelist ( v_names, list );
+        VNamelistRelease( v_names );
+    }
+    return rc;
+}
+
+bool nlt_is_name_in_namelist( const KNamelist *list,
+                             const char *name_to_find )
+{
+    uint32_t count, idx;
+    bool res = false;
+    if ( list == NULL || name_to_find == NULL )
+        return res;
+    if ( KNamelistCount( list, &count ) == 0 )
+    {
+        for ( idx = 0; idx < count && res == false; ++idx )
+        {
+            const char *item_name;
+            if ( KNamelistGet( list, idx, &item_name ) == 0 )
+            {
+                if ( nlt_strcmp( item_name, name_to_find ) == 0 )
+                    res = true;
+            }
+        }
+    }
+    return res;
+}
+
+/*
+    - list1 and list2 containts strings
+    - if one of the strings in list2 is contained ( partial match, strstr() )
+      in one of the strings in list1 the function returns true...
+*/
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 )
+{
+    uint32_t count1;
+    bool res = false;
+    if ( list1 == NULL || list2 == NULL )
+        return res;
+    if ( KNamelistCount( list1, &count1 ) == 0 )
+    {
+        uint32_t idx1;
+        for ( idx1 = 0; idx1 < count1 && res == false; ++idx1 )
+        {
+            const char *string1;
+            if ( KNamelistGet( list1, idx1, &string1 ) == 0 )
+            {
+                uint32_t count2;
+                if ( KNamelistCount( list2, &count2 ) == 0 )
+                {
+                    uint32_t idx2;
+                    for ( idx2 = 0; idx2 < count2 && res == false; ++idx2 )
+                    {
+                        const char *string2;
+                        if ( KNamelistGet( list2, idx2, &string2 ) == 0 )
+                        {
+                            if ( strstr( string1, string2 ) != NULL )
+                                res = true;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove )
+{
+    rc_t rc = 0;
+    uint32_t count;
+    
+    if ( source == NULL || dest == NULL || to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    *dest = NULL;
+    rc = KNamelistCount( source, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        VNamelist *cleaned;
+        rc = VNamelistMake ( &cleaned, count );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                rc = KNamelistGet( source, idx, &s );
+                if ( rc == 0 )
+                {
+                    if ( !nlt_is_name_in_namelist( to_remove, s ) )
+                        rc = VNamelistAppend ( cleaned, s );
+                }
+                rc = VNamelistToConstNamelist ( cleaned, dest );
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove )
+{
+    rc_t rc = 0;
+    const KNamelist *to_remove;
+    
+    if ( source == NULL || dest == NULL || items_to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    rc = nlt_make_namelist_from_string( &to_remove, items_to_remove );
+    if ( rc == 0 )
+    {
+        rc = nlt_remove_names_from_namelist( source, dest, to_remove );
+        KNamelistRelease( to_remove );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/namelist_tools.h b/tools/vdb-copy/namelist_tools.h
new file mode 100644
index 0000000..3cefbf9
--- /dev/null
+++ b/tools/vdb-copy/namelist_tools.h
@@ -0,0 +1,52 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_namelist_tools_
+#define _h_namelist_tools_
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int nlt_strcmp( const char* s1, const char* s2 );
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src );
+bool nlt_is_name_in_namelist( const KNamelist *list, const char *name_to_find );
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 );
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove );
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/num-gen.c b/tools/vdb-copy/num-gen.c
new file mode 100644
index 0000000..0dfdca2
--- /dev/null
+++ b/tools/vdb-copy/num-gen.c
@@ -0,0 +1,848 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "num-gen.h"
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+#include <strtol.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct num_gen_node
+{
+    uint64_t start;
+    uint64_t end;
+    uint64_t count; /* 0 ... skip, >0 ... valid */
+} num_gen_node;
+typedef struct num_gen_node * p_num_gen_node;
+
+/* **************************************************************************
+{ start:5,count: 0 } ---> [ ]
+{ start:5,count: 1 } ---> [ 5 ]
+{ start:5,count: 2 } ---> [ 5, 6 ]
+ ************************************************************************** */
+
+struct num_gen
+{
+    Vector nodes;
+};
+
+
+struct num_gen_iter
+{
+    Vector nodes;
+    uint32_t curr_node;
+    uint32_t curr_node_sub_pos;
+    uint64_t total;
+    uint64_t progress;
+};
+
+/* forward decl. for fixing-function */
+static rc_t num_gen_fix_overlaps( num_gen* self, uint32_t *count );
+
+
+/* helper function to destroy a node*/
+static void CC num_gen_node_destroy( void *item, void *data )
+{
+    free( item );
+}
+
+
+/* helper function to create a node from start/count */
+static p_num_gen_node num_gen_make_node( const uint64_t start, const uint64_t count )
+{
+    p_num_gen_node p = ( p_num_gen_node )malloc( sizeof( num_gen_node ) );
+    if ( p )
+    {
+        p->start = start;
+        p->end = start + count - 1;
+        p->count = count;
+    }
+    return p;
+}
+
+
+/* helper callback to compare 2 nodes, lets VectorInsert create a sorted vector */
+static int64_t CC num_gen_insert_helper( const void* item1, const void* item2 )
+{
+    const p_num_gen_node node1 = ( p_num_gen_node )item1;
+    const p_num_gen_node node2 = ( p_num_gen_node )item2;
+    int64_t res = 0;
+    if ( node1->start == node2->start )
+    {
+        if ( node1->count < node2->count )
+            res = -1;
+        else if ( node1->count > node2->count )
+            res = 1;
+    }
+    else if ( node1->start < node2->start )
+        res = -1;
+    else
+        res = 1;
+    return res;
+}
+
+
+/* helper callback to create a deep and conditional copy of a node-vector */
+static void CC num_gen_copy_cb( void *item, void *data )
+{
+    p_num_gen_node node = ( p_num_gen_node )item;
+    if ( node->count > 0 )
+    {
+        Vector * dst = ( Vector *)data;
+        p_num_gen_node new_node = num_gen_make_node( node->start, node->count );
+        if ( new_node != NULL )
+            VectorInsert( dst, new_node, NULL, num_gen_insert_helper );
+    }
+}
+
+
+/* helper function that creates a deep and conditional copy of a node-vector */
+static void num_gen_copy_vector( const Vector * src, Vector * dst )
+{
+    if ( src == NULL || dst == NULL )
+        return;
+    VectorForEach ( src, false, num_gen_copy_cb, dst );    
+}
+
+
+/* helper callback to add up all count values in the vector*/
+static void CC num_gen_total_count_cb( void *item, void *data )
+{
+    p_num_gen_node node = ( p_num_gen_node )item;
+    if ( node != NULL )
+    {
+        uint64_t * total = ( uint64_t *)data;
+        if ( total != NULL )
+            *total += node->count;
+    }
+}
+
+
+/* helper function that adds up all count values in the vector*/
+static uint64_t num_gen_total_count( const Vector * src )
+{
+    uint64_t res = 0;
+    if ( src != NULL )
+        VectorForEach ( src, false, num_gen_total_count_cb, &res );
+    return res;
+}
+
+
+/* helper function for the parse-function */
+static rc_t num_gen_add_node( num_gen* self, const uint64_t from,
+                              const uint64_t to )
+{
+    p_num_gen_node node = NULL;
+    int64_t count = ( to - from );
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcSelf, rcNull );
+
+    if ( count >= 0 )
+        node = num_gen_make_node( from, count + 1 );
+    else
+        node = num_gen_make_node( to, -( count + 1 ) );
+    if ( node == NULL )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcMemory, rcExhausted );
+    return VectorInsert( &(self->nodes), node, NULL, num_gen_insert_helper );
+}
+
+
+#define MAX_NUM_STR 12
+/* helper-structure for num_gen_parse() */
+typedef struct num_gen_parse_ctx
+{
+    uint32_t num_str_idx;
+    bool this_is_the_first_number;
+    uint64_t num1;
+    uint64_t num2;
+    char num_str[ MAX_NUM_STR + 1 ];
+} num_gen_parse_ctx;
+typedef num_gen_parse_ctx* p_num_gen_parse_ctx;
+
+
+/* helper for num_gen_parse() */
+static void num_gen_convert_ctx( p_num_gen_parse_ctx ctx )
+{
+    char *endp;
+    
+    ctx->num_str[ ctx->num_str_idx ] = 0;
+    ctx->num1 = strtou64( ctx->num_str, &endp, 10 );
+    ctx->this_is_the_first_number = false;
+    ctx->num_str_idx = 0;
+}
+
+
+/* helper for num_gen_parse() */
+static rc_t num_gen_convert_and_add_ctx( num_gen* self, p_num_gen_parse_ctx ctx )
+{
+    char *endp;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcSelf, rcNull );
+    if ( ctx == NULL )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    if ( ctx->num_str_idx == 0 )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
+
+    /* terminate the source-string */
+    ctx->num_str[ ctx->num_str_idx ] = 0;
+    /* convert the string into a uint64_t */
+    if ( ctx->this_is_the_first_number )
+        {
+        ctx->num1 = strtou64( ctx->num_str, &endp, 10 );
+        ctx->num2 = ctx->num1;
+        }
+    else
+        ctx->num2 = strtou64( ctx->num_str, &endp, 10 );
+    /* empty the source-string to be reused */
+    ctx->num_str_idx = 0;
+    
+    ctx->this_is_the_first_number = true;
+    return num_gen_add_node( self, ctx->num1, ctx->num2 );
+}
+
+
+/* parse the given string and insert the found ranges 
+   into the number-generator, fixes eventual overlaps */
+rc_t num_gen_parse( num_gen* self, const char* src )
+{
+    size_t i, n;
+    num_gen_parse_ctx ctx;
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcParsing, rcSelf, rcNull );
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcParsing, rcParam, rcNull );
+
+    n = string_measure ( src, NULL );
+    if ( n == 0 )
+        return RC( rcVDB, rcNoTarg, rcParsing, rcParam, rcEmpty );
+
+    ctx.num_str_idx = 0;
+    ctx.this_is_the_first_number = true;
+    for ( i = 0; i < n && rc == 0; ++i )
+    {
+        switch ( src[ i ] )
+        {
+        /* a dash switches from N1-mode into N2-mode */
+        case '-' :
+            num_gen_convert_ctx( &ctx );
+            break;
+
+        /* a comma ends a single number or a range */
+        case ',' :
+            rc = num_gen_convert_and_add_ctx( self, &ctx );
+            break;
+
+        /* in both mode add the char to the temp string */
+        default:
+            if ( ( src[i]>='0' )&&( src[i]<='9' )&&( ctx.num_str_idx < MAX_NUM_STR ) )
+                ctx.num_str[ ctx.num_str_idx++ ] = src[ i ];
+            break;
+        }
+    }
+    /* dont forget to add what is left in ctx.num_str ... */
+    if ( ctx.num_str_idx > 0 )
+        rc = num_gen_convert_and_add_ctx( self, &ctx );
+    if ( rc == 0 )
+        rc = num_gen_fix_overlaps( self, NULL );
+    return rc;
+}
+
+
+/* inserts the given ranges into the number-generator,
+   fixes eventual overlaps */
+rc_t num_gen_add( num_gen* self, const uint64_t first, const uint64_t count )
+{
+    rc_t rc;
+    uint64_t num_1 = first;
+    uint64_t num_2 = first;
+
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcInserting, rcSelf, rcNull );
+
+    /* this is necessary because virtual columns which have a
+       infinite row-range, get reported with first=1,count=0 */
+    if ( count > 0 )
+        num_2 = ( first + count - 1 );
+    rc = num_gen_add_node( self, num_1, num_2 );
+    if ( rc == 0 )
+        rc = num_gen_fix_overlaps( self, NULL );
+    return rc;
+}
+
+
+/* helper function for range-check */
+static bool CC num_gen_check_range_start( p_num_gen_node the_node, 
+                                          const uint64_t range_start )
+{
+    bool res = true;
+    uint64_t last_node_row = ( the_node->start + the_node->count - 1 );
+    
+    if ( the_node->start < range_start )
+    {
+        the_node->start = range_start;
+        if ( the_node->start <= last_node_row )
+        {
+            the_node->count = ( last_node_row - the_node->start ) + 1;
+        }
+        else
+        {
+            /* the node becomes invalid ... */
+            the_node->start = 0;
+            the_node->count = 0;
+            res = false;
+        }
+    }
+    return res;
+}
+
+
+/* helper function for range-check */
+static void CC num_gen_check_range_end( p_num_gen_node the_node, 
+                             const uint64_t last_tab_row )
+{
+    uint64_t last_node_row = ( the_node->start + the_node->count - 1 );
+
+    if ( last_node_row > last_tab_row )
+    {
+        last_node_row = last_tab_row;
+        if ( the_node->start <= last_node_row )
+        {
+            the_node->count = ( last_node_row - the_node->start ) + 1;
+        }
+        else
+        {
+            /* the node becomes invalid ... */
+            the_node->start = 0;
+            the_node->count = 0;
+        }
+    }
+}
+
+
+/* helper function for range-check */
+static void CC num_gen_check_range_callback( void *item, void *data )
+{
+    p_num_gen_node the_node = ( p_num_gen_node )item;
+    p_num_gen_node the_range = ( p_num_gen_node )data;
+    uint64_t last_tab_row = ( the_range->start + the_range->count - 1 );
+
+    /* ignore invalid nodes... */
+    if ( the_node->start == 0 || the_node->count == 0 )
+        return;
+        
+    /* check if the start value is not out of range... */
+    if ( num_gen_check_range_start( the_node, the_range->start ) )
+        num_gen_check_range_end( the_node, last_tab_row );
+}
+
+
+/* helper function for range-check */
+static void CC num_gen_count_invalid_nodes( void *item, void *data )
+{
+    p_num_gen_node the_node = ( p_num_gen_node )item;
+    uint32_t *invalid_count = ( uint32_t * )data;
+    
+    if ( ( the_node->start == 0 )&&( the_node->count == 0 ) )
+        ( *invalid_count )++;
+}
+
+
+/* helper function for range-check */
+static void CC num_gen_copy_valid_nodes( void *item, void *data )
+{
+    p_num_gen_node node = ( p_num_gen_node )item;
+    Vector *dest = ( Vector * )data;
+    
+    if ( ( node->start != 0 )&&( node->count != 0 ) )
+        VectorInsert ( dest, node, NULL, num_gen_insert_helper );
+    else
+        free ( node );
+}
+
+
+/* helper function for range-check */
+static void num_gen_remove_invalid_nodes( num_gen* self )
+{
+    Vector temp_nodes;
+    uint32_t count = VectorLength( &(self->nodes) );
+    
+    if ( count < 1 )
+        return;
+    /* create a temp. vector */
+    VectorInit( &temp_nodes, 0, count );
+
+    /* copy all valid nodes into the temp. vector */
+    VectorForEach ( &(self->nodes), false,
+                    num_gen_copy_valid_nodes, &temp_nodes );
+
+    /* clear all nodes so far...,
+       DO NOT PASS num_gen_node_destroy into it */
+    VectorWhack( &(self->nodes), NULL, NULL );
+
+    /* initialize and copy (shallow) the valid nodes back
+       into the generator */
+    VectorCopy ( &temp_nodes, &(self->nodes) );
+
+    /* destroy the temp-vector,
+       DO NOT PASS num_gen_node_destroy into it */
+    VectorWhack ( &temp_nodes, NULL, NULL );
+}
+
+
+/* helper function for trim */
+rc_t num_gen_trim( num_gen* self, const int64_t first, const uint64_t count )
+{
+    num_gen_node trim_range;
+    uint32_t invalid_nodes = 0;
+
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcValidating, rcSelf, rcNull );
+    if ( count == 0 )
+        return RC( rcVDB, rcNoTarg, rcValidating, rcParam, rcNull );
+
+    /* walk all nodes to check for boundaries... */
+    trim_range.start = first;
+    trim_range.count = count;
+
+    VectorForEach ( &(self->nodes), false,
+                    num_gen_check_range_callback, &trim_range );
+
+    VectorForEach ( &(self->nodes), false,
+                    num_gen_count_invalid_nodes, &invalid_nodes );
+    if ( invalid_nodes > 0 )
+        num_gen_remove_invalid_nodes( self );
+ 
+    return 0;
+}
+
+
+rc_t num_gen_make( num_gen** self )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+
+    *self = calloc( 1, sizeof( num_gen ) );
+    if ( *self == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+
+    VectorInit( &((*self)->nodes ), 0, 5 );
+    return 0;
+}
+
+
+rc_t num_gen_make_from_str( num_gen** self, const char *src )
+{
+    rc_t rc = num_gen_make( self );
+    if ( rc == 0 )
+    {
+        rc = num_gen_parse( *self, src );
+        if ( rc == 0 )
+            rc = num_gen_fix_overlaps( *self, NULL );
+     }
+     return rc;
+}
+
+
+rc_t num_gen_make_from_range( num_gen** self, 
+                              const int64_t first, const uint64_t count )
+{
+    rc_t rc = num_gen_make( self );
+    if ( rc != 0 )
+        return rc;
+    return num_gen_add( *self, first, count );
+}
+
+
+rc_t num_gen_clear( num_gen* self )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcClearing, rcSelf, rcNull );
+
+    if ( VectorLength( &(self->nodes) ) > 0 )
+    {
+        /* clear all nodes so far... */
+        VectorWhack( &(self->nodes), num_gen_node_destroy, NULL );
+
+        /* re-init the vector */
+        VectorInit( &(self->nodes ), 0, 5 );
+    }
+    return 0;
+}
+
+
+rc_t num_gen_destroy( num_gen* self )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+
+    VectorWhack( &(self->nodes), num_gen_node_destroy, NULL );
+    free( self );
+    return 0;
+}
+
+
+bool num_gen_empty( const num_gen* self )
+{
+    if ( self == NULL )
+        return true;
+    return ( VectorLength( &(self->nodes) ) < 1 );
+}
+
+
+typedef struct overlap_ctx
+{
+    p_num_gen_node prev;
+    uint32_t overlaps;
+} overlap_ctx;
+typedef overlap_ctx* p_overlap_ctx;
+
+
+/* static bool CC num_gen_overlap_fix_cb( void *item, void *data ) */
+static bool CC num_gen_overlap_fix_cb( void *item, void *data )
+{
+    p_num_gen_node node = ( p_num_gen_node )item;
+    p_overlap_ctx ctx = ( p_overlap_ctx )data;
+
+    /* skip invalid nodes */
+    if ( node->count ==0 || node->start == 0 || node->end == 0 )
+        return false;
+    /* if we do not have a previous node, take this one... */
+    if ( ctx->prev == NULL )
+        {
+        ctx->prev = node;
+        return false;
+        }
+    /* if we do not have an overlap,
+       take this node as prev-node and continue */
+    if ( ctx->prev->end < node->start )
+        {
+        ctx->prev = node;
+        return false;
+        }
+    /* we have a overlap, the end of the prev-node is inside
+       the current-node, we fix it by expanding the prev-node
+       to the end of this node, and later declaring this
+       node as invalid */
+    if ( ctx->prev->end < node->end )
+    {
+        ctx->prev->end = node->end;
+        ctx->prev->count = ( ctx->prev->end - ctx->prev->start ) + 1;
+    }
+    /* if the prev-node ends after this node, all we have to
+       do is declaring this node as invalid */
+    node->count = 0;
+    node->start = 0;
+    node->end = 0;
+    return true;
+}
+
+
+static rc_t num_gen_fix_overlaps( num_gen* self, uint32_t *count )
+{
+    overlap_ctx ctx;
+    bool fix_executed = false;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    
+    ctx.overlaps = 0;
+    do
+    {
+        ctx.prev = NULL;
+        fix_executed = VectorDoUntil ( &(self->nodes), false, 
+                                       num_gen_overlap_fix_cb, &ctx );
+    } while ( fix_executed );
+
+    if ( count )
+        *count = ctx.overlaps;
+    return 0;
+}
+
+
+typedef struct string_ctx
+{
+    char *s;
+    uint32_t len;
+} string_ctx;
+typedef string_ctx* p_string_ctx;
+
+
+static void string_ctx_add( p_string_ctx ctx, char *s )
+{
+    uint32_t len = string_measure ( s, NULL );
+    if ( len > 0 )
+    {
+        if ( ctx->len == 0 )
+            ctx->s = malloc( len + 1 );
+        else
+            ctx->s = realloc( ctx->s, ctx->len + len );
+        memmove( &(ctx->s[ctx->len]), s, len );
+        ctx->len += len;
+    }
+}
+
+
+static void CC num_gen_as_string_cb( void *item, void *data )
+{
+    char temp[40];
+    p_num_gen_node node = ( p_num_gen_node )item;
+    long unsigned int start = node->start;
+    long unsigned int end = ( start + node->count - 1 );
+    switch( node->count )
+    {
+    case 0 : temp[ 0 ] = 0;
+             break;
+    case 1 : string_printf ( temp, sizeof temp, NULL, "%lu,", start );
+             break;
+    default: string_printf ( temp, sizeof temp, NULL, "%lu-%lu,", start, end );
+             break;
+    }
+    string_ctx_add( ( p_string_ctx )data, temp );
+}
+
+
+rc_t num_gen_as_string( const num_gen* self, char **s )
+{
+    string_ctx ctx;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( s == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+
+    ctx.s = NULL;
+    ctx.len = 0;
+    VectorForEach ( &(self->nodes), false, num_gen_as_string_cb, &ctx );
+    if ( ctx.len == 0 )
+    {
+        *s = NULL;
+        return RC( rcVDB, rcNoTarg, rcReading, rcData, rcEmpty );
+    }
+    ctx.s[ ctx.len ] = 0;
+    *s = ctx.s;
+    return 0;
+}
+
+
+static void CC num_gen_debug_cb( void *item, void *data )
+{
+    char temp[40];
+    p_num_gen_node node = ( p_num_gen_node )item;
+    long unsigned int start = node->start;
+    long unsigned int count = node->count;
+    string_printf ( temp, sizeof temp, NULL, "[s:%lu c:%lu]", start, count );
+    string_ctx_add( ( p_string_ctx )data, temp );
+}
+
+
+rc_t num_gen_debug( const num_gen* self, char **s )
+{
+    string_ctx ctx;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( s == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+
+    ctx.s = NULL;
+    ctx.len = 0;
+    VectorForEach ( &(self->nodes), false, num_gen_debug_cb, &ctx );
+    if ( ctx.len == 0 )
+    {
+        *s = NULL;
+        return RC( rcVDB, rcNoTarg, rcReading, rcData, rcEmpty );
+    }
+    ctx.s[ ctx.len ] = 0;
+    *s = ctx.s;
+    return 0;
+}
+
+
+static bool CC num_gen_contains_cb( void *item, void *data )
+{
+    bool res = false;
+    p_num_gen_node node = ( p_num_gen_node )item;
+    if ( node->count > 0 )
+    {
+        uint64_t *value = ( uint64_t * )data;
+        uint64_t end = node->start + node->count - 1;
+        res = ( node->start <= *value && *value <= end );
+    }
+    return res;
+}
+
+
+rc_t num_gen_contains_value( const num_gen* self, const uint64_t value )
+{
+    uint64_t temp = value;
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( VectorDoUntil ( &(self->nodes), false, 
+                         num_gen_contains_cb, &temp ) )
+        return 0;
+    else
+        return RC( rcVDB, rcNoTarg, rcReading, rcData, rcEmpty );
+}
+
+
+rc_t num_gen_range_check( num_gen* self, 
+                          const int64_t first, const uint64_t count )
+{
+    /* if the user did not specify a row-range, take all rows */
+    if ( num_gen_empty( self ) )
+        return num_gen_add( self, first, count );
+    /* if the user did specify a row-range, check the boundaries */
+    else
+        return num_gen_trim( self, first, count );
+}
+
+
+rc_t num_gen_iterator_make( const num_gen* self, const num_gen_iter **iter )
+{
+    uint32_t count;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( iter == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+
+    *iter = NULL;
+    count = VectorLength( &(self->nodes) );
+    if ( count < 1 )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+    else
+    {
+        num_gen_iter *temp = calloc( 1, sizeof( num_gen_iter ) );
+        if ( temp == NULL )
+            return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        VectorInit( &(temp->nodes), 0, count );
+        num_gen_copy_vector( &(self->nodes), &(temp->nodes ) );
+        temp->total = num_gen_total_count( &(temp->nodes ) );
+        *iter = temp;
+    }
+    return 0;
+}
+
+rc_t num_gen_iterator_destroy( const num_gen_iter *self )
+{
+    num_gen_iter *temp;
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+
+    temp = (num_gen_iter *)self;
+    VectorWhack( &(temp->nodes), num_gen_node_destroy, NULL );
+    free( temp );
+    return 0;
+}
+
+rc_t num_gen_iterator_next( const num_gen_iter* self, uint64_t* value )
+{
+    num_gen_iter* temp;
+    p_num_gen_node node;
+    
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( value == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+    if ( self->curr_node >= VectorLength( &(self->nodes) ) )
+        return RC( rcVDB, rcNoTarg, rcReading, rcId, rcInvalid );
+
+    temp = ( num_gen_iter *)self;
+    *value = 0;
+    node = (p_num_gen_node)VectorGet( &(temp->nodes), temp->curr_node );
+    if ( node == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcItem, rcInvalid );
+
+    *value = node->start;
+    if ( node->count < 2 )
+        /* the node is a single-number-node, next node for next time */
+        temp->curr_node++;
+    else
+    {
+        /* the node is a number range, add the sub-position */
+        *value += temp->curr_node_sub_pos++;
+        /* if the sub-positions are use up, switch to next node */
+        if ( temp->curr_node_sub_pos >= node->count )
+        {
+            temp->curr_node++;
+            temp->curr_node_sub_pos = 0;
+        }
+    }
+    (temp->progress)++;
+    return 0;
+}
+
+
+rc_t num_gen_iterator_count( const num_gen_iter* self, uint64_t* count )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( count == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+    *count = self->total;
+    return 0;
+}
+
+
+rc_t num_gen_iterator_percent( const num_gen_iter* self, 
+                               const uint8_t fract_digits,
+                               uint32_t* value )
+{
+    uint32_t factor = 100;
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcSelf, rcNull );
+    if ( value == NULL )
+        return RC( rcVDB, rcNoTarg, rcReading, rcParam, rcNull );
+    if ( fract_digits > 0 )
+    {
+        if ( fract_digits > 1 )
+            factor = 10000;
+        else
+            factor = 1000;
+    }
+        
+    if ( self->total > 0 )
+    {
+        if ( self->progress >= self->total )
+            *value = factor;
+        else
+        {
+            uint64_t temp = self->progress;
+            temp *= factor;
+            temp /= self->total;
+            *value = (uint16_t) temp;
+        }
+    }
+    else
+        *value = 0;
+    return 0;
+}
diff --git a/tools/vdb-copy/num-gen.h b/tools/vdb-copy/num-gen.h
new file mode 100644
index 0000000..5b0324f
--- /dev/null
+++ b/tools/vdb-copy/num-gen.h
@@ -0,0 +1,225 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_num_gen_
+#define _h_num_gen_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * A NUMBER GENERATOR
+ * 
+ *  input : string, for instance "3,6,8,12,44-49"
+ *  ouptut: sequence of integers, for instance 3,6,8,12,44,45,46,47,48,49
+ */
+
+
+/*--------------------------------------------------------------------------
+ * opaque number-generator and it's iterator
+ */
+typedef struct num_gen num_gen;
+typedef struct num_gen_iter num_gen_iter;
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_make
+ *
+ *  creates a empty number-generator
+ *  or creates a number-generator and parses the string
+ *  or creates and presets it with a range
+ */
+rc_t num_gen_make( num_gen** self );
+rc_t num_gen_make_from_str( num_gen** self, const char *src );
+rc_t num_gen_make_from_range( num_gen** self, 
+                              const int64_t first, const uint64_t count );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_destroy
+ *
+ *  destroys a number-generator
+ */
+rc_t num_gen_destroy( num_gen* self );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_clear
+ *
+ *  resets a number-generator, to be empty just like after num_gen_make()
+ */
+rc_t num_gen_clear( num_gen* self );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_parse
+ *
+ *  parses a given string in this form: "3,6,8,12,44-49"
+ *  does not clear the number-generator before parsing
+ *  eventual overlaps with the previous content are consolidated
+ */
+rc_t num_gen_parse( num_gen* self, const char* src );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_add
+ *
+ *  inserts the given interval into the number-generator
+ *
+ *  num_gen_add( *g, 10, 30 )
+ *  is equivalent to:
+ *  num_gen_parse( *g, "10-39" );
+ *
+ *  eventual overlaps with the previous content are consolidated 
+ */
+rc_t num_gen_add( num_gen* self, const uint64_t first, const uint64_t count );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_trim
+ *
+ *  checks if the content of the number-generator is inside the given interval
+ *  removes or shortens internal nodes if necessary
+ */
+rc_t num_gen_trim( num_gen* self, const int64_t first, const uint64_t count );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_empty
+ *
+ *  checks if the generator has no ranges defined
+ */
+bool num_gen_empty( const num_gen* self );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_as_string
+ *
+ *  allocates a string that contains the generator as text
+ *  *s = "1-5,20,24-25"
+ *  caller has to free the string
+ */
+rc_t num_gen_as_string( const num_gen* self, char **s );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_debug
+ *
+ *  allocates a string that contains the internal intervals as text
+ *  *s = "[s:1 c:5][s:20 c:1][s:24 c:2]"
+ *  [s...start-value c:count]
+ *  caller has to free the string 
+ */
+rc_t num_gen_debug( const num_gen* self, char **s );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_contains_value
+ *
+ *  checks if the generator contains the given value
+ */
+rc_t num_gen_contains_value( const num_gen* self, const uint64_t value );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_range_check
+ *
+ *  if the generator is empty --> set it to the given range
+ *  if it is not empty ---------> trim it to the given range
+ */
+rc_t num_gen_range_check( num_gen* self, 
+                          const int64_t first, const uint64_t count );
+
+/*--------------------------------------------------------------------------
+ * num_gen_iterator_make
+ *
+ *  creates a iterator from the number-generator
+ *  the iterator contains a constant copy of the number-ranges
+ *  after this call it is safe to destroy or change the number-generator
+ *  returns an error-code if the number-generator was empty,
+ *  and *iter will be NULL
+ */
+rc_t num_gen_iterator_make( const num_gen* self, const num_gen_iter **iter );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_iterator_destroy
+ *
+ *  destroys the iterator
+ */
+rc_t num_gen_iterator_destroy( const num_gen_iter *self );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_iterator_count
+ *
+ *  returns how many values the iterator contains
+ */
+rc_t num_gen_iterator_count( const num_gen_iter* self, uint64_t* count );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_iterator_next
+ *
+ *  pulls the next value out of the iterator...
+ *  returns an error-code if the iterator has no more values
+ */
+rc_t num_gen_iterator_next( const num_gen_iter* self, uint64_t* value );
+
+
+/*--------------------------------------------------------------------------
+ * num_gen_iterator_percent
+ *
+ *  return in value the percentage of the iterator...
+ *  depending on fract-digits the percentage will be:
+ *      fract_digits = 0 ... full percent's
+ *      fract_digits = 1 ... 1/10-th of a percent
+ *      fract_digits = 2 ... 1/100-th of a percent
+ */
+rc_t num_gen_iterator_percent( const num_gen_iter* self,
+                               const uint8_t fract_digits,
+                               uint32_t* value );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/redactval.c b/tools/vdb-copy/redactval.c
new file mode 100644
index 0000000..66452ac
--- /dev/null
+++ b/tools/vdb-copy/redactval.c
@@ -0,0 +1,230 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "redactval.h"
+
+#include "helper.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+void redact_buf_init( redact_buffer * rbuf )
+{
+    rbuf->buffer = NULL;
+    rbuf->buffer_len = 0;
+}
+
+
+void redact_buf_free( redact_buffer * rbuf )
+{
+    if ( rbuf->buffer != NULL )
+    {
+        
+        free( rbuf->buffer );
+        rbuf->buffer = NULL;
+        rbuf->buffer_len = 0;
+    }
+}
+
+
+rc_t redact_buf_resize( redact_buffer * rbuf, const size_t new_size )
+{
+    rc_t rc = 0;
+    if ( rbuf->buffer_len < new_size || rbuf->buffer == NULL )
+    {
+        /* allocate or re-allocate the buffer */
+        if ( rbuf->buffer_len == 0 )
+            rbuf->buffer = malloc( new_size );
+        else
+            rbuf->buffer = realloc( rbuf->buffer, new_size );
+
+        /* exit */
+        if ( rbuf->buffer == NULL )
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+            rbuf->buffer_len = new_size;
+    }
+    return rc;
+}
+
+
+/* allocate a redact-value */
+static p_redact_val redact_val_init( const char* name, 
+                                     const uint32_t len,
+                                     const char* value )
+{
+    p_redact_val res = NULL;
+    if ( name == NULL ) return res;
+    if ( name[0] == 0 ) return res;
+    res = calloc( 1, sizeof( redact_val ) );
+    if ( res == NULL ) return res;
+    res->name = string_dup_measure ( name, NULL );
+    res->len = len;
+    res->value = NULL;
+    if ( value != NULL )
+    {
+        if ( value[0] == '\'' && value[2] == '\'' )
+        {
+            res->value = malloc( sizeof value[0] );
+            if ( res->value )
+            {
+                res->len = 1;
+                *( ( char * )res->value ) = value[1];
+            }
+        }
+        else
+        {
+            char *endptr;
+            uint64_t x = strtou64( value, &endptr, 0 );
+            if ( res->len > sizeof x )
+                res->len = sizeof x;
+            res->value = malloc( len );
+            if ( res->value )
+                memmove( res->value, &x, res->len );
+        }
+    }
+    return res;
+}
+
+
+void redact_val_fill_buffer( const p_redact_val r_val,
+                             redact_buffer * rbuf,
+                             const size_t buffsize )
+{
+    size_t idx;
+    char * dst = rbuf->buffer;
+    for ( idx = 0; idx < buffsize; idx += r_val->len )
+    {
+        size_t l = r_val->len;
+        if ( ( idx + l ) > buffsize ) l = ( buffsize - idx );
+        memmove( dst, r_val->value, l );
+        dst += l;
+    }
+}
+
+
+static void CC redact_val_destroy_node( void* node, void* data )
+{
+    p_redact_val r_val = (p_redact_val)node;
+    if ( r_val != NULL )
+    {
+        if ( r_val->name != NULL )
+            free( r_val->name );
+        if ( r_val->value != NULL )
+            free( r_val->value );
+        free( r_val );
+    }
+}
+
+
+/*
+ * initializes a redact-val-list
+*/
+rc_t redact_vals_init( redact_vals** vals )
+{
+    if ( vals == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    (*vals) = calloc( 1, sizeof( redact_vals ) );
+    if ( *vals == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    VectorInit( &((*vals)->vals), 0, 5 );
+    return 0;
+}
+
+
+/*
+ * destroys the redact-val-list
+*/
+rc_t redact_vals_destroy( redact_vals* vals )
+{
+    if ( vals == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+    VectorWhack( &(vals->vals), redact_val_destroy_node, NULL );
+    free( vals );
+    return 0;
+}
+
+
+/*
+ * adds a entry into the redact-val-list
+*/
+rc_t redact_vals_add( redact_vals* vals, const char* name, 
+                      const uint32_t len, const char* value )
+{
+    rc_t rc;
+    p_redact_val new_val = redact_val_init( name, len, value );
+    if ( new_val == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcParsing, rcMemory, rcExhausted );
+    else
+        rc = VectorAppend( &(vals->vals), NULL, new_val );
+    return rc;
+}
+
+
+/*
+ * returns a pointer to a redact-value by type-name
+*/
+p_redact_val redact_vals_get_by_name( const redact_vals* vals,
+                                      const char * name )
+{
+    p_redact_val res = NULL;
+    uint32_t idx, len;
+    if ( vals == NULL || name == NULL || name[0] == 0 )
+        return res;
+
+    len = VectorLength( &(vals->vals) );
+    for ( idx = 0;  idx < len && res == NULL; ++idx )
+    {
+        p_redact_val item = (p_redact_val) VectorGet ( &(vals->vals), idx );
+        if ( nlt_strcmp( item->name, name ) == 0 )
+            res = item;
+    }
+    return res;
+}
+
+/*
+ * returns a pointer to a redact-value by type-cast
+*/
+p_redact_val redact_vals_get_by_cast( const redact_vals* vals,
+                                      const char * cast )
+{
+    uint32_t idx;
+    p_redact_val res = NULL;
+    char * name;
+    if ( vals == NULL || cast == NULL || cast[0] == 0 )
+        return res;
+
+    name = string_dup_measure ( cast, NULL );
+    for ( idx = 0; name[idx] != 0; ++idx )
+        if ( name[idx] == ')' ) name[idx] = 0;
+    res = redact_vals_get_by_name( vals, &(name[1]) );
+    free( name );
+    return res;
+}
diff --git a/tools/vdb-copy/redactval.h b/tools/vdb-copy/redactval.h
new file mode 100644
index 0000000..b3e4360
--- /dev/null
+++ b/tools/vdb-copy/redactval.h
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_redactval_
+#define _h_vdb_redactval_
+
+#ifndef _h_vdb_copy_includes_
+#include "vdb-copy-includes.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/********************************************************************
+    redact_buffer is a pointer and a size...
+********************************************************************/
+typedef struct redact_buffer
+{
+    void *   buffer;
+    uint32_t buffer_len;
+} redact_buffer;
+typedef redact_buffer* p_redact_buffer;
+
+
+void redact_buf_init( redact_buffer * rbuf );
+void redact_buf_free( redact_buffer * rbuf );
+rc_t redact_buf_resize( redact_buffer * rbuf, const size_t new_size );
+
+/********************************************************************
+    redact_val is a mapping of typename to its redaction-value
+********************************************************************/
+typedef struct redact_val
+{
+    char *name;             /* the name of the type */
+    uint32_t len;           /* the length of the value */
+    void * value;           /* pointer to the value of length len */
+} redact_val;
+typedef redact_val* p_redact_val;
+
+
+/********************************************************************
+    vector of redact-values
+********************************************************************/
+typedef struct redact_vals
+{
+    Vector vals;
+} redact_vals;
+typedef redact_vals* p_redact_vals;
+
+
+/*
+ * fills a buffer with the value found in a redact-val-struct
+*/
+void redact_val_fill_buffer( const p_redact_val r_val,
+                             redact_buffer * rbuf,
+                             const size_t buffsize );
+
+
+/*
+ * initializes a redact-val-list
+*/
+rc_t redact_vals_init( redact_vals** vals );
+
+
+/*
+ * destroys the redact-val-list
+*/
+rc_t redact_vals_destroy( redact_vals* vals );
+
+
+/*
+ * adds a entry into the redact-val-list
+*/
+rc_t redact_vals_add( redact_vals* vals, const char* name, 
+                      const uint32_t len, const char* value );
+
+
+/*
+ * returns a pointer to a redact-value by name
+*/
+p_redact_val redact_vals_get_by_name( const redact_vals* vals,
+                                      const char * name );
+
+
+/*
+ * returns a pointer to a redact-value by type-cast
+*/
+p_redact_val redact_vals_get_by_cast( const redact_vals* vals,
+                                      const char * cast );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/type_matcher.c b/tools/vdb-copy/type_matcher.c
new file mode 100644
index 0000000..743fda0
--- /dev/null
+++ b/tools/vdb-copy/type_matcher.c
@@ -0,0 +1,850 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "vdb-copy-includes.h"
+#include "matcher_input.h"
+#include "helper.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+/* internal definition of a type to be matched */
+typedef struct mtype
+{
+    char *name;
+    uint32_t dflt; /* 0=yes, 1=no (this way for re-ordering) */
+    uint32_t order;
+    uint32_t lossy_score;
+    VTypedecl type_decl;
+    VTypedesc type_desc;
+} mtype;
+typedef mtype* p_mtype;
+
+
+/* internal definition of a pair of source- and dest-type */
+typedef struct mpair
+{
+    p_mtype src;
+    p_mtype dst;
+    uint32_t compatible; /* 0=yes, 1=no (this way for re-ordering) */
+    uint32_t distance;
+} mpair;
+typedef mpair* p_mpair;
+
+
+/* internal definition of a column */
+typedef struct mcol
+{
+    char *name;
+    uint32_t src_idx;       /* index of this column relative to the
+                               read-cursor */
+
+    uint32_t dst_idx;       /* index of this column relative to the
+                               write-cursor */
+
+    bool excluded;          /* for excludes via config-file */
+
+    bool to_copy;           /* this column has a correspondig column 
+                               in the list of writable columns of the
+                               destination-schema with writable types */
+
+    VTypedecl type_decl;    /* type-decl of this column via read-schema */
+    VTypedesc type_desc;    /* type-desc of this column via read-schema */
+
+    Vector src_types;       /* list of src-types */
+    Vector dst_types;       /* list of dst-types */
+    Vector pairs;           /* list of (src->dst)-pairs... */
+
+    /* the src->dst type-pair, that won the type-matching-procedure */
+    p_mpair type_cast;
+} mcol;
+typedef mcol* p_mcol;
+
+
+/* internal definition of the matcher */
+typedef struct matcher
+{
+    Vector mcols;
+} matcher;
+typedef matcher* p_matcher;
+
+
+/* allocate a type-pair */
+static p_mpair matcher_init_pair( const p_mtype src, 
+                                  const p_mtype dst )
+{
+    p_mpair res = NULL;
+    if ( src == NULL ) return res;
+    if ( dst == NULL ) return res;
+    res = calloc( 1, sizeof( mpair ) );
+    if ( res != NULL )
+    {
+        res->src = src;
+        res->dst = dst;
+    }
+    return res;
+}
+
+
+/* destroys a type-pair */
+static void CC matcher_destroy_pair( void* node, void* data )
+{
+    p_mpair pair = (p_mpair)node;
+    if ( pair != NULL )
+        free( pair );
+}
+
+
+/* allocate a m-type definition */
+static p_mtype matcher_init_type( const char* name, 
+                                  const bool dflt,
+                                  const uint32_t order )
+{
+    p_mtype res = NULL;
+    if ( name == NULL ) return res;
+    if ( name[0] == 0 ) return res;
+    res = calloc( 1, sizeof( mtype ) );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        res->dflt = ( dflt ? 0 : 1 );
+        res->order = order;
+    }
+    return res;
+}
+
+
+/* destroys a m-type definition */
+static void CC matcher_destroy_type( void* node, void* data )
+{
+    p_mtype type = (p_mtype)node;
+    if ( type != NULL )
+    {
+        if ( type->name != NULL )
+            free( type->name );
+        free( type );
+    }
+}
+
+
+/* allocate a matcher-column */
+static p_mcol matcher_make_col( const char* name )
+{
+    p_mcol res = NULL;
+    if ( name == NULL ) return res;
+    if ( name[0] == 0 ) return res;
+    res = calloc( 1, sizeof( mcol ) );
+    /* because of calloc all members are zero! */
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        VectorInit( &(res->src_types), 0, 3 );
+        VectorInit( &(res->dst_types), 0, 3 );
+        VectorInit( &(res->pairs), 0, 6 );
+        res->type_cast = NULL;
+    }
+    return res;
+}
+
+
+/* destroys a matcher-column */
+static void CC matcher_destroy_col( void* node, void* data )
+{
+    p_mcol col = (p_mcol)node;
+    if ( col == NULL ) return;
+    if ( col->name != NULL )
+        free( col->name );
+    VectorWhack( &(col->src_types), matcher_destroy_type, NULL );
+    VectorWhack( &(col->dst_types), matcher_destroy_type, NULL );
+    VectorWhack( &(col->pairs), matcher_destroy_pair, NULL );
+    free( col );
+}
+
+
+/* initializes the matcher */
+rc_t matcher_init( matcher** self )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    (*self) = calloc( 1, sizeof( matcher ) );
+    if ( *self == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    VectorInit( &((*self)->mcols), 0, 5 );
+    return 0;
+}
+
+
+/* destroys the matcher */
+rc_t matcher_destroy( matcher* self )
+{
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+    VectorWhack( &(self->mcols), matcher_destroy_col, NULL );
+    free( self );
+    return 0;
+}
+
+
+static p_mcol matcher_find_col( const matcher* self, const char *name )
+{
+    p_mcol res = NULL;
+    uint32_t idx, count;
+    count =  VectorLength( &(self->mcols) );
+    for ( idx = 0; idx < count && res == NULL; ++idx )
+    {
+        p_mcol col = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( col != NULL )
+            if ( nlt_strcmp( col->name, name ) == 0 )
+                res = col;
+    }
+    return res;
+}
+
+
+static char * matcher_get_col_cast( const p_mcol col, const char *s_type )
+{
+    char * res;
+    size_t idx;
+    uint32_t len = string_measure ( col->name, NULL ) + 4;
+    len += string_measure ( s_type, NULL );
+    res = malloc( len );
+    if ( res == NULL ) return res;
+    res[ 0 ] = '(';
+    idx = string_copy_measure ( &(res[ 1 ]), len-1, s_type );
+    res[ idx + 1 ] = ')';
+    string_copy_measure ( &(res[ idx + 2 ]), len-(idx+2), col->name );
+    return res;
+}
+
+
+/* makes a typecast-string for the src/dest-table by column-name */
+static rc_t matcher_get_cast( const matcher* self, const char *name, 
+                              const bool src, char **cast )
+{
+    p_mcol col;
+    if ( self == NULL )
+        return RC( rcVDB, rcNoTarg, rcSearching, rcSelf, rcNull );
+    if ( cast == NULL || name == NULL )
+        return RC( rcVDB, rcNoTarg, rcSearching, rcParam, rcNull );
+    *cast = NULL;
+    col = matcher_find_col( self, name );
+    if ( col == NULL ) return 0;
+
+    if ( col->type_cast == NULL )
+    {
+        /* if the column has no match, just use the undecorated column-name*/
+        if ( src )
+            *cast = string_dup_measure ( col->name, NULL );
+        else
+        {
+            if ( col->to_copy && !col->excluded )
+                *cast = string_dup_measure ( col->name, NULL );
+        }
+    }
+    else
+    {
+        /* if the column has a match, construct the type-cast*/
+        if ( src )
+            *cast = matcher_get_col_cast( col, col->type_cast->src->name );
+        else
+        {
+            if ( col->to_copy && !col->excluded )
+                *cast = matcher_get_col_cast( col, col->type_cast->dst->name );
+        }
+    }
+    return 0;
+}
+
+
+/* makes a typecast-string for the source-table by column-name */
+rc_t matcher_src_cast( const matcher* self, const char *name, char **cast )
+{
+    return matcher_get_cast( self, name, true, cast );
+}
+
+
+/* makes a typecast-string for the destination-table by column-name */
+rc_t matcher_dst_cast( const matcher* self, const char *name, char **cast )
+{
+    return matcher_get_cast( self, name, false, cast );
+}
+
+
+static bool match_type_with_id_vector( const VSchema * s,
+                const VTypedecl * td, const Vector * id_vector )
+{
+    bool res = false;
+    uint32_t idx, len;
+
+    len = VectorLength( id_vector );
+    for ( idx = 0;  idx < len && !res; ++idx )
+    {
+        uint32_t *id = (uint32_t *) VectorGet ( id_vector, idx );
+        if ( id != NULL )
+        {
+            VTypedecl cast;
+            uint32_t distance;
+            res = VTypedeclToType ( td, s, *id, &cast, &distance );
+        }
+    }
+    return res;
+}
+
+/* checks if a column with the given name has at least one type
+   that is also in the given typelist... */
+bool matcher_src_has_type( const matcher* self, const VSchema * s,
+                           const char *name, const Vector *id_vector )
+{
+    bool res = false;
+    p_mcol col;
+    VTypedecl td;
+
+    if ( self == NULL || s == NULL || name == NULL || id_vector == NULL )
+        return res;
+    col = matcher_find_col( self, name );
+    if ( col == NULL ) return res; /* column not found */
+    if ( col->type_cast == NULL ) return res; /* column has no typecast */ 
+
+    /* we use the destination-type-cast */
+    if ( VSchemaResolveTypedecl ( s, &td, "%s", col->type_cast->dst->name ) == 0 )
+        res = match_type_with_id_vector( s, &td, id_vector );
+/*
+    if ( res )
+        KOutMsg( "redact-type found on (%s)%s\n", col->type_cast->dst->name, name );
+*/
+    return res;
+}
+
+static void matcher_report_types( const char * s, const Vector *v )
+{
+    uint32_t idx, len;
+    len = VectorLength( v );
+    if ( len > 0 )
+    {
+        KOutMsg( "%s: ", s );
+        for ( idx = 0;  idx < len; ++idx )
+        {
+            p_mtype item = (p_mtype) VectorGet ( v, idx );
+            if ( item != NULL )
+                KOutMsg( "[ %s ] ", item->name );
+        }
+        KOutMsg( "\n" );
+    }
+}
+
+
+static void matcher_report_pair( const p_mpair pair )
+{
+    if ( pair->src == NULL || pair->dst == NULL )
+        return;
+    if ( pair->compatible == 0 )
+        KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] (c) dist=%u\n", 
+                  pair->src->name, 
+                  pair->src->lossy_score, pair->src->order, pair->src->dflt,
+                  pair->dst->name, pair->distance );
+    else
+        KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] dist=%u\n",
+                  pair->src->name,
+                  pair->src->lossy_score, pair->src->order, pair->src->dflt,
+                  pair->dst->name, pair->distance );
+}
+
+
+static void matcher_report_pairs( const Vector *v )
+{
+    uint32_t idx, len;
+    len = VectorLength( v );
+    for ( idx = 0;  idx < len; ++idx )
+       matcher_report_pair( (p_mpair) VectorGet ( v, idx ) );
+}
+
+
+static void matcher_report_col( const p_mcol item )
+{
+    KOutMsg( "----------------------------------\n" );
+    if ( item->to_copy )
+        KOutMsg( "col: %s (c)\n", item->name );
+    else
+        KOutMsg( "col: %s\n", item->name );
+    matcher_report_types( " src", &(item->src_types ) );
+    matcher_report_types( " dst", &(item->dst_types ) );
+    matcher_report_pairs( &(item->pairs ) );
+    KOutMsg( "\n" );
+}
+
+
+rc_t matcher_report( matcher* self, const bool only_copy_columns )
+{
+    uint32_t idx, len;
+
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0; idx < len; ++idx )
+    {
+        p_mcol item = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( item != NULL )
+        {
+            if ( only_copy_columns )
+            {
+                if ( item->to_copy )
+                    matcher_report_col( item );
+            }
+            else
+                matcher_report_col( item );
+        }
+    }
+    return 0;
+}
+
+
+static rc_t matcher_append_type( const char *name, const bool dflt,
+                                 const uint32_t order,
+                                 const VSchema *schema, Vector *v )
+{
+    rc_t rc = 0;
+    p_mtype t = matcher_init_type( name, dflt, order );
+    if ( t == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcMemory, rcExhausted );
+    if ( rc == 0 )
+    {
+        rc = VectorAppend( v, NULL, t );
+        if ( rc == 0 )
+        {
+            rc = VSchemaResolveTypedecl( schema, &(t->type_decl), "%s", name );
+            if ( rc == 0 )
+            {
+                rc = VSchemaDescribeTypedecl( schema, &(t->type_desc), &(t->type_decl) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t matcher_read_col_src_types( p_mcol col, 
+        const KNamelist *names, const uint32_t dflt_idx, const VSchema *schema )
+{
+    uint32_t count;
+    rc_t rc = KNamelistCount( names, &count );
+    if ( rc == 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *name;
+            rc = KNamelistGet( names, idx, &name );
+            if ( rc == 0 )
+                rc = matcher_append_type( name, ( idx == dflt_idx ), idx,
+                                          schema, &(col->src_types) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t matcher_read_src_types( matcher* self, const VTable *table,
+                                    const VSchema *schema )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( table == NULL || schema == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0;  idx < len && rc == 0; ++idx )
+    {
+        p_mcol item = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( item != NULL )
+        {
+            uint32_t dflt_idx;
+            KNamelist *names;
+            rc = VTableListReadableDatatypes( table, item->name, &dflt_idx, &names );
+            if ( rc == 0 )
+            {
+                rc = matcher_read_col_src_types( item, names, dflt_idx, schema );
+                KNamelistRelease( names );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t matcher_read_dst_types( matcher* self, const VTable *table,
+                             const VSchema *schema )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( table == NULL || schema == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0;  idx < len && rc == 0; ++idx )
+    {
+        p_mcol item = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( item != NULL )
+        {
+            KNamelist *names;
+            rc = VTableListWritableDatatypes ( (VTable*)table, item->name, &names );
+            if ( rc == 0 )
+            {
+                uint32_t type_count;
+                rc = KNamelistCount( names, &type_count );
+                if ( rc == 0 && type_count > 0 )
+                {
+                    uint32_t type_idx;
+                    item->to_copy = true; /* !!! this column has to be copied */
+                    for ( type_idx = 0; type_idx < type_count && rc == 0; ++type_idx )
+                    {
+                        const char *name;
+                        rc = KNamelistGet( names, type_idx, &name );
+                        if ( rc == 0 )
+                            rc = matcher_append_type( name, false, idx,
+                                                      schema, &(item->dst_types) );
+                    }
+                }
+                KNamelistRelease( names );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t matcher_make_column_matrix( p_mcol col )
+{
+    rc_t rc = 0;
+    uint32_t src_idx, src_len;
+
+    src_len = VectorLength( &(col->src_types) );
+    for ( src_idx = 0;  src_idx < src_len && rc == 0; ++src_idx )
+    {
+        p_mtype src_type = (p_mtype) VectorGet ( &(col->src_types), src_idx );
+        if ( src_type )
+        {
+            uint32_t dst_idx, dst_len;
+            dst_len = VectorLength( &(col->dst_types) );
+            for ( dst_idx = 0;  dst_idx < dst_len && rc == 0; ++dst_idx )
+            {
+                p_mtype dst_type = (p_mtype) VectorGet ( &(col->dst_types), dst_idx );
+                if ( dst_type )
+                {
+                    p_mpair pair = matcher_init_pair( src_type, dst_type );
+                    if ( pair != NULL )
+                        rc = VectorAppend( &(col->pairs), NULL, pair );
+                    else
+                        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t matcher_make_type_matrix( matcher* self )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+    
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0;  idx < len && rc == 0; ++idx )
+    {
+        p_mcol col = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( col != NULL )
+            if ( col->to_copy )
+                rc = matcher_make_column_matrix( col );
+    }
+    return rc;
+}
+
+
+static int64_t CC matcher_match_cb( const void ** p1, const void ** p2, void *data )
+{
+    int64_t res = 0;
+    const p_mpair pair_1 = (p_mpair)(*p1);
+    const p_mpair pair_2 = (p_mpair)(*p2);
+    if ( pair_1 == NULL || pair_2 == NULL )
+        return res;
+    /* first we order by compatibility */
+    res = (int64_t)( pair_1->compatible ) - (int64_t)( pair_2->compatible );
+    if ( res == 0 )
+    {
+        /* second we order by lossy-ness, lowest value first */
+        res = ( pair_1->src->lossy_score ) - ( pair_2->src->lossy_score );
+        if ( res == 0 )
+        {
+            /* if the lossy-ness is the same, we order by distance */
+            res = (int64_t)( pair_1->distance ) - (int64_t)( pair_2->distance );
+            if ( res == 0 )
+            {
+                /* if the distance is the same, we order by default-value */
+                res = (int64_t)( pair_1->src->dflt ) - (int64_t)( pair_2->src->dflt );
+                if ( res == 0 )
+                    /* if there is not default-value, we use the org. order */
+                    res = (int64_t)( pair_1->src->order ) - (int64_t)( pair_2->src->order );
+            }
+        }
+    }
+    return res;
+}
+
+
+static void CC matcher_enter_type_score_cb( void * item, void * data )
+{
+    p_mtype type = (p_mtype)item;
+    const KConfig *cfg = (const KConfig *)data;
+    if ( type != NULL && cfg != NULL )
+        type->lossy_score = helper_rd_type_score( cfg, type->name );
+}
+
+
+static void CC matcher_measure_dist_cb( void * item, void * data )
+{
+    p_mpair pair = (p_mpair)item;
+    const VSchema *schema = (const VSchema *)data;
+    if ( pair != NULL && schema != NULL )
+    {
+        bool compatible = VTypedeclCommonAncestor ( &(pair->src->type_decl),
+                schema, &(pair->dst->type_decl), NULL, &(pair->distance) );
+        pair->compatible = ( compatible ? 0 : 1 );
+    }
+}
+
+
+static void matcher_match_column( p_mcol col,
+        const VSchema *schema, const KConfig *cfg )
+{
+    uint32_t pair_count = VectorLength( &(col->pairs) );
+
+    col->type_cast = NULL;
+    if ( col->excluded ) return;
+
+    /* call VTypedeclCommonAncestor for every type-pair */
+    VectorForEach ( &(col->pairs), false,
+            matcher_measure_dist_cb, (void*)schema );
+    /* if we have more than one pair left... */
+    if ( pair_count > 1 )
+    {
+        /* enter the lossy-ness into the src-types... */
+        VectorForEach ( &(col->src_types), false,
+            matcher_enter_type_score_cb, (void*)cfg );
+    
+        /* reorder the remaining pair's by:
+           compatibility, lossy-ness, distance, default, order */
+        VectorReorder ( &(col->pairs), matcher_match_cb, NULL );
+    }
+    
+    /* pick the winner = first item in the vector */
+    if ( pair_count > 0 )
+    {
+        col->type_cast = (p_mpair)VectorFirst ( &(col->pairs) );
+        /* if the winner is not a compatible pair, we have no cast ! */
+        if ( col->type_cast->compatible != 0 )
+            col->type_cast = NULL;
+    }
+}
+
+
+static rc_t matcher_match_matrix( matcher* self,
+        const VSchema *schema, const KConfig *cfg )
+{
+    rc_t rc = 0;
+    uint32_t idx, len;
+    
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( schema == NULL || cfg == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0;  idx < len; ++idx )
+    {
+        p_mcol col = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( col != NULL )
+            if ( col->to_copy )
+                matcher_match_column( col, schema, cfg );
+    }
+    return rc;
+}
+
+
+static rc_t matcher_build_column_vector( matcher* self, const char * columns )
+{
+    const KNamelist *list;
+    uint32_t count, idx;
+    rc_t rc = nlt_make_namelist_from_string( &list, columns );
+    if ( rc != 0 ) return rc;
+    rc = KNamelistCount( list, &count );
+    if ( rc == 0 )
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *s;
+            rc = KNamelistGet( list, idx, &s );
+            if ( rc == 0 )
+            {
+                p_mcol new_col = matcher_make_col( s );
+                if ( new_col == NULL )
+                    rc = RC( rcExe, rcNoTarg, rcResolving, rcMemory, rcExhausted );
+                if ( rc == 0 )
+                    rc = VectorAppend( &(self->mcols), NULL, new_col );
+            }
+        }
+    KNamelistRelease( list );
+    return rc;
+}
+
+
+static rc_t matcher_exclude_columns( matcher* self, const char * columns )
+{
+    const KNamelist *list;
+    uint32_t len, idx;
+    rc_t rc;
+
+    if ( columns == NULL ) return 0;
+    rc = nlt_make_namelist_from_string( &list, columns );
+    len = VectorLength( &(self->mcols) );
+    for ( idx = 0;  idx < len; ++idx )
+    {
+        p_mcol col = (p_mcol) VectorGet ( &(self->mcols), idx );
+        if ( col != NULL )
+            col->excluded = nlt_is_name_in_namelist( list, col->name );
+    }
+    KNamelistRelease( list );
+    return rc;
+}
+
+
+rc_t matcher_execute( matcher* self, const p_matcher_input in )
+{
+    VSchema * dflt_schema;
+    const VTable * src_table;
+    rc_t rc;
+
+    if ( self == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    if ( in->manager == NULL || in->add_schemas == NULL || 
+         in->cfg == NULL || in->columns == NULL || 
+         in->src_path == NULL || in->dst_path == NULL ||
+         in->dst_tabname == NULL )
+        return RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+
+    rc = matcher_build_column_vector( self, in->columns );
+    if ( rc != 0 ) return rc;
+
+    rc = matcher_exclude_columns( self, in->excluded_columns );
+    if ( rc != 0 ) return rc;
+
+    rc = helper_parse_schema( in->manager, &dflt_schema, in->add_schemas );
+    if ( rc != 0 ) return rc;
+
+    rc = VDBManagerOpenTableRead( in->manager, &src_table, dflt_schema, "%s", in->src_path );
+    if ( rc == 0 )
+    {
+        const VSchema * src_schema;
+        rc = VTableOpenSchema ( src_table, &src_schema );
+        if ( rc == 0 )
+        {
+            rc = matcher_read_src_types( self, src_table, src_schema );
+            if ( rc == 0 )
+            {
+                if ( in->legacy_schema != NULL )
+                    rc = VSchemaParseFile ( dflt_schema, "%s", in->legacy_schema );
+                if ( rc == 0 )
+                {
+                    VTable * dst_table;
+                    KCreateMode cmode = kcmParents;
+                    const VSchema * dst_schema = src_schema;
+
+                    if ( in->legacy_schema != NULL )
+                        dst_schema = dflt_schema;
+
+                    if ( in->force_unlock )
+                        VDBManagerUnlock ( in->manager, "%s", in->dst_path );
+
+                    if ( in->force_kcmInit )
+                        cmode |= kcmInit;
+                    else
+                        cmode |= kcmCreate;
+
+                    rc = VDBManagerCreateTable( in->manager, &dst_table, 
+                                                dst_schema, in->dst_tabname, cmode, "%s", in->dst_path );
+
+                    if ( rc == 0 )
+                    {
+                        rc = matcher_read_dst_types( self, dst_table, dst_schema );
+                        if ( rc == 0 )
+                        {
+                            rc = matcher_make_type_matrix( self );
+                            if ( rc == 0 )
+                                rc = matcher_match_matrix( self, src_schema, in->cfg );
+                        }
+                        VTableRelease( dst_table );
+                        if ( !(in->force_kcmInit) )
+                            KDirectoryRemove ( in->dir, true, "%s", in->dst_path );
+                    }
+                }
+            }
+            VSchemaRelease( src_schema );
+        }
+        VTableRelease( src_table );
+    }
+    VSchemaRelease( dflt_schema );
+    return rc;
+}
+
+
+rc_t matcher_db_execute( matcher* self, const VTable * src_tab, VTable * dst_tab,
+                         const VSchema * schema, const char * columns, 
+                         const char * kfg_path )
+{
+    KConfig * cfg;
+    rc_t rc = helper_make_config_mgr( &cfg, kfg_path );
+    if ( rc == 0 )
+    {
+        rc = matcher_build_column_vector( self, columns );
+        if ( rc != 0 ) return rc;
+
+        rc = matcher_read_src_types( self, src_tab, schema );
+        if ( rc == 0 )
+        {
+            rc = matcher_read_dst_types( self, dst_tab, schema );
+            if ( rc == 0 )
+            {
+                rc = matcher_make_type_matrix( self );
+                if ( rc == 0 )
+                    rc = matcher_match_matrix( self, schema, cfg );
+            }
+        }
+        KConfigRelease( cfg );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/type_matcher.h b/tools/vdb-copy/type_matcher.h
new file mode 100644
index 0000000..bf64ea5
--- /dev/null
+++ b/tools/vdb-copy/type_matcher.h
@@ -0,0 +1,71 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_type_matcher_
+#define _h_type_matcher_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_matcher_input_
+#include "matcher_input.h"
+#endif
+
+typedef struct matcher matcher;
+
+/* initializes the matcher */
+rc_t matcher_init( matcher** self );
+
+/* destroys the matcher */
+rc_t matcher_destroy( matcher* self );
+
+/* shows the matching-matrix */
+rc_t matcher_report( matcher* self, const bool only_copy_columns );
+
+/* makes a typecast-string for the source-table by column-name */
+rc_t matcher_src_cast( const matcher* self, const char *name, char **cast );
+
+/* checks if a column with the given name has at least one type
+   that is also in the given typelist... */
+bool matcher_src_has_type( const matcher* self, const VSchema * s,
+                           const char *name, const Vector *id_vector );
+
+/* makes a typecast-string for the destination-table by column-name */
+rc_t matcher_dst_cast( const matcher* self, const char *name, char **cast );
+
+/* performs a type-match between src/dst with the given in_struct */
+rc_t matcher_execute( matcher* self, const p_matcher_input in );
+
+
+rc_t matcher_db_execute( matcher* self, const VTable * src_tab, VTable * dst_tab,
+                         const VSchema * schema, const char * columns, 
+                         const char * kfg_path );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/vdb-copy-includes.h b/tools/vdb-copy/vdb-copy-includes.h
new file mode 100644
index 0000000..f274df6
--- /dev/null
+++ b/tools/vdb-copy/vdb-copy-includes.h
@@ -0,0 +1,121 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_vdb_copy_includes_
+#define _h_vdb_copy_includes_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_klib_out_
+#include <klib/out.h>
+#endif
+
+#ifndef _h_klib_log_
+#include <klib/log.h>
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifndef _h_klib_debug_
+#include <klib/debug.h>
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_text_
+#include <klib/text.h>
+#endif
+
+#ifndef _h_klib_args_
+#include <kapp/args.h>
+#endif
+
+#ifndef _h_kfs_directory_
+#include <kfs/directory.h>
+#endif
+
+#ifndef _h_kfs_file_
+#include <kfs/file.h>
+#endif
+
+#ifndef _h_kfg_config_
+#include <kfg/config.h>
+#endif
+
+#ifndef _h_vdb_manager_
+#include <vdb/manager.h>
+#endif
+
+#ifndef _h_vdb_table_
+#include <vdb/table.h>
+#endif
+
+#ifndef _h_vdb_cursor_
+#include <vdb/cursor.h>
+#endif
+
+#ifndef _h_vdb_database_
+#include <vdb/database.h>
+#endif
+
+#ifndef _h_vdb_schema_
+#include <vdb/schema.h>
+#endif
+
+#ifndef _h_vdb_vdb_priv_
+#include <vdb/vdb-priv.h>
+#endif
+
+#ifndef _h_sra_sraschema_
+#include <sra/sraschema.h>
+#endif
+
+/*
+#ifndef _h_sra_srapath_
+#include <sra/srapath.h>
+#endif
+*/
+
+#ifndef _h_namelist_tools_
+#include "namelist_tools.h"
+#endif
+
+#include <os-native.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-copy/vdb-copy.c b/tools/vdb-copy/vdb-copy.c
new file mode 100644
index 0000000..527011c
--- /dev/null
+++ b/tools/vdb-copy/vdb-copy.c
@@ -0,0 +1,1456 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-copy-includes.h"
+#include "definitions.h"
+#include "context.h"
+#include "helper.h"
+#include "coldefs.h"
+#include "get_platform.h"
+#include "copy_meta.h"
+#include "type_matcher.h"
+#include "redactval.h"
+
+#include <kapp/main.h>
+#include <klib/progressbar.h>
+#include <sysalloc.h>
+
+/*
+#if _DEBUGGING
+#define _CRTDBG_MAP_ALLOC 1
+#include <crtdbg.h>
+#endif
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+static const char * table_usage[] = { "table-name", NULL };
+static const char * rows_usage[] = { "set of rows to be copied(default = all)", NULL };
+#if ALLOW_COLUMN_SPEC
+static const char * columns_usage[] = { "set of columns to be copied(default = all)", NULL };
+#endif
+static const char * schema_usage[] = { "schema-name", NULL };
+static const char * without_accession_usage[] = { "without accession-test", NULL };
+static const char * ignore_reject_usage[] = { "ignore SRA_FILTER_REJECT values", NULL };
+static const char * ignore_redact_usage[] = { "ignore SRA_FILTER_REDACTED values", NULL };
+#if ALLOW_EXTERNAL_CONFIG
+static const char * kfg_path_usage[] = { "use this path to find the file vdb-copy.kfg", NULL };
+#endif
+static const char * show_matching_usage[] = { "show type-matching results", NULL };
+static const char * show_progress_usage[] = { "show progress in percent while copying", NULL };
+static const char * ignore_incomp_usage[] = { "ignore incompatible columns", NULL };
+static const char * reindex_usage[] = { "reindex columns after copy", NULL };
+static const char * show_redact_usage[] = { "show redaction-process", NULL };
+static const char * excluded_columns_usage[] = { "exclude these columns from copy", NULL };
+static const char * show_meta_usage[] = { "show metadata-copy-process", NULL };
+static const char * md5mode_usage[] = { "MD5-mode def.: auto, '1'...forced ON, '0'...forced OFF)", NULL };
+static const char * blcmode_usage[] = { "Blob-checksum def.: auto, '1'...CRC32, 'M'...MD5, '0'...OFF)", NULL };
+static const char * force_usage[] = { "forces an existing target to be overwritten", NULL };
+static const char * unlock_usage[] = { "forces a locked target to be unlocked", NULL };
+
+OptDef MyOptions[] =
+{
+    { OPTION_TABLE, ALIAS_TABLE, NULL, table_usage, 1, true, false },
+    { OPTION_ROWS, ALIAS_ROWS, NULL, rows_usage, 1, true, false },
+#if ALLOW_COLUMN_SPEC
+    { OPTION_COLUMNS, ALIAS_COLUMNS, NULL, columns_usage, 1, true, false },
+#endif
+    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 5, true, false },
+    { OPTION_WITHOUT_ACCESSION, ALIAS_WITHOUT_ACCESSION, NULL, without_accession_usage, 1, false, false },
+    { OPTION_IGNORE_REJECT, ALIAS_IGNORE_REJECT, NULL, ignore_reject_usage, 1, false, false },
+    { OPTION_IGNORE_REDACT, ALIAS_IGNORE_REDACT, NULL, ignore_redact_usage, 1, false, false },
+#if ALLOW_EXTERNAL_CONFIG
+    { OPTION_KFG_PATH, ALIAS_KFG_PATH, NULL, kfg_path_usage, 1, true, false },
+#endif
+    { OPTION_SHOW_MATCHING, ALIAS_SHOW_MATCHING, NULL, show_matching_usage, 1, false, false },
+    { OPTION_SHOW_PROGRESS, ALIAS_SHOW_PROGRESS, NULL, show_progress_usage, 1, false, false },
+    { OPTION_IGNORE_INCOMP, ALIAS_IGNORE_INCOMP, NULL, ignore_incomp_usage, 1, false, false },
+    { OPTION_REINDEX, ALIAS_REINDEX, NULL, reindex_usage, 1, false, false },
+    { OPTION_SHOW_REDACT, ALIAS_SHOW_REDACT, NULL, show_redact_usage, 1, false, false },
+    { OPTION_EXCLUDED_COLUMNS, ALIAS_EXCLUDED_COLUMNS, NULL, excluded_columns_usage, 1, true, false },
+    { OPTION_SHOW_META, ALIAS_SHOW_META, NULL, show_meta_usage, 1, false, false },
+    { OPTION_MD5_MODE, ALIAS_MD5_MODE, NULL, md5mode_usage, 1, true, false },
+    { OPTION_BLOB_CHECKSUM, ALIAS_BLOB_CHECKSUM, NULL, blcmode_usage, 1, true, false },
+    { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 1, false, false },
+    { OPTION_UNLOCK, ALIAS_UNLOCK, NULL, unlock_usage, 1, false, false }
+};
+
+
+const char UsageDefaultName[] = "vdb-copy";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s <src_path> <dst_path> [options]\n"
+        "\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "table", table_usage );
+    HelpOptionLine ( ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage );
+#if ALLOW_COLUMN_SPEC
+    HelpOptionLine ( ALIAS_COLUMNS, OPTION_COLUMNS, "columns", columns_usage );
+#endif
+    HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
+    HelpOptionLine ( ALIAS_WITHOUT_ACCESSION, OPTION_WITHOUT_ACCESSION, NULL, without_accession_usage );
+    HelpOptionLine ( ALIAS_IGNORE_REJECT, OPTION_IGNORE_REJECT, NULL, ignore_reject_usage );
+    HelpOptionLine ( ALIAS_IGNORE_REDACT, OPTION_IGNORE_REDACT, NULL, ignore_redact_usage );
+#if ALLOW_EXTERNAL_CONFIG
+    HelpOptionLine ( ALIAS_KFG_PATH, OPTION_KFG_PATH, NULL, kfg_path_usage );
+#endif
+    HelpOptionLine ( ALIAS_SHOW_MATCHING, OPTION_SHOW_MATCHING, NULL, show_matching_usage );
+    HelpOptionLine ( ALIAS_SHOW_PROGRESS, OPTION_SHOW_PROGRESS, NULL, show_progress_usage );
+    HelpOptionLine ( ALIAS_IGNORE_INCOMP, OPTION_IGNORE_INCOMP, NULL, ignore_incomp_usage );
+    HelpOptionLine ( ALIAS_REINDEX, OPTION_REINDEX, NULL, reindex_usage );
+    HelpOptionLine ( ALIAS_SHOW_REDACT, OPTION_SHOW_REDACT, NULL, show_redact_usage );
+    HelpOptionLine ( ALIAS_EXCLUDED_COLUMNS, OPTION_EXCLUDED_COLUMNS, NULL, excluded_columns_usage );
+    HelpOptionLine ( ALIAS_SHOW_META, OPTION_SHOW_META, NULL, show_meta_usage );
+    HelpOptionLine ( ALIAS_FORCE, OPTION_FORCE, NULL, force_usage );
+    HelpOptionLine ( ALIAS_UNLOCK, OPTION_UNLOCK, NULL, unlock_usage );
+    HelpOptionLine ( ALIAS_MD5_MODE, OPTION_MD5_MODE, NULL, md5mode_usage );
+    HelpOptionLine ( ALIAS_BLOB_CHECKSUM, OPTION_BLOB_CHECKSUM, NULL, blcmode_usage );
+
+    HelpOptionsStandard ();
+
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+/* ----------------------------------------------------------------------------------- */
+static rc_t vdb_copy_redact_cell( const VCursor * src_cursor, VCursor * dst_cursor,
+                                  const p_col_def col, uint64_t row_id,
+                                  redact_buffer * rbuf,
+                                  const bool show_redact )
+{
+    rc_t rc;
+    const void * src_buffer;
+    uint32_t offset_in_bits;
+    uint32_t n_elements;
+    uint32_t elem_bits;
+
+    /* we read the original cell-data to detect how big the data is before redacting */
+    rc = VCursorCellData( src_cursor, col->src_idx, &elem_bits,
+                          &src_buffer, &offset_in_bits, &n_elements );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt,
+                 (klogInt,
+                 rc,
+                 "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+                 "col_name=%s,row_nr=%lu",
+                  col->name, row_id ));
+    }
+
+    DISP_RC( rc, "vdb_copy_redact_cell:VCursorCellData(src) failed" );
+    if ( rc == 0 )
+    {
+        size_t new_size = ( ( elem_bits * n_elements ) + 8 ) >> 3;
+        rc = redact_buf_resize( rbuf, new_size );
+        DISP_RC( rc, "vdb_copy_redact_cell:redact_buf_resize() failed" );
+        if ( rc == 0 )
+        {
+            if ( col->r_val != NULL )
+            {
+                if ( show_redact )
+                {
+                    char * c = ( char * )col->r_val->value;
+                    KOutMsg( "redacting #%lu %s -> 0x%.02x\n", row_id, col->dst_cast, *c );
+                }
+                redact_val_fill_buffer( col->r_val, rbuf, new_size );
+            }
+            else
+            {
+                if ( show_redact )
+                    KOutMsg( "redacting #%lu %s -> 0\n", row_id, col->dst_cast );
+                memset( rbuf->buffer, 0, new_size );
+            }
+
+            rc = VCursorWrite( dst_cursor, col->dst_idx, elem_bits,
+                               rbuf->buffer, 0, n_elements );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt,
+                         (klogInt,
+                         rc,
+                         "VCursorWrite( col:$(col_name) at row #$(row_nr) ) failed",
+                         "col_name=%s,row_nr=%lu",
+                          col->name, row_id ));
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------------- */
+static rc_t vdb_copy_cell( const VCursor * src_cursor, VCursor * dst_cursor,
+                           const p_col_def col, uint64_t row_id )
+{
+    rc_t rc;
+
+    const void *buffer;
+    uint32_t offset_in_bits;
+    uint32_t number_of_elements;
+    uint32_t elem_bits;
+
+    /*
+    KOutMsg( " - copy cell %s ( src_idx=%u / dst_idx=%u )\n", 
+              col->name, col->src_idx, col->dst_idx );
+    */
+    rc = VCursorCellData( src_cursor, col->src_idx, &elem_bits,
+                          &buffer, &offset_in_bits, &number_of_elements );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt,
+                 (klogInt,
+                 rc,
+                 "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+                 "col_name=%s,row_nr=%lu",
+                  col->name, row_id ));
+    }
+    if ( rc != 0 ) return rc;
+
+    /*
+    KOutMsg( "bit-offset = %u / elements = %u / element-bits = %u\n", 
+       offset_in_bits, number_of_elements, elem_bits );
+    */
+    rc = VCursorWrite( dst_cursor, col->dst_idx, elem_bits,
+                       buffer, offset_in_bits, number_of_elements );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt,
+                 (klogInt,
+                 rc,
+                 "VCursorWrite( col:$(col_name) at row #$(row_nr) ) failed",
+                 "col_name=%s,row_nr=%lu",
+                  col->name, row_id ));
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------------- */
+static rc_t vdb_copy_row( const VCursor * src_cursor,
+                          VCursor * dst_cursor,
+                          col_defs * columns,
+                          uint64_t row_id,
+                          redact_buffer * rbuf,
+                          const bool redact,
+                          const bool show_redact )
+{
+    uint32_t len, idx = 0;
+    rc_t rc = VCursorOpenRow( dst_cursor );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt,
+                 (klogInt,
+                 rc,
+                 "VCursorOpenRow(dst) row #$(row_nr) failed",
+                 "row_nr=%lu",
+                 row_id ));
+        return rc;
+    }
+
+    len = VectorLength( &(columns->cols) );
+    /* loop through the columns and copy them if they have to be copied */
+    while ( idx < len && rc == 0 )
+    {
+        p_col_def col = (p_col_def) VectorGet ( &(columns->cols), idx++ );
+        if ( col != NULL )
+        {
+            if ( col->to_copy )
+            {
+                if ( redact && col->redactable )
+                    rc = vdb_copy_redact_cell( src_cursor, dst_cursor,
+                                               col, row_id, rbuf, show_redact );
+                else
+                    rc = vdb_copy_cell( src_cursor, dst_cursor, col, row_id );
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        rc = VCursorCommitRow( dst_cursor );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt,
+                     (klogInt,
+                     rc,
+                     "VCursorCommitRow(dst) row #$(row_nr) failed",
+                     "row_nr=%lu",
+                     row_id ));
+        }
+
+        rc = VCursorCloseRow( dst_cursor );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt,
+                     (klogInt,
+                     rc,
+                     "VCursorCloseRow(dst) row #$(row_nr) failed",
+                     "row_nr=%lu",
+                     row_id ));
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_read_row_flags( const p_context ctx,
+                                     const VCursor *cursor,
+                                     const uint32_t src_idx,
+                                     bool *pass,
+                                     bool *redact )
+{
+    uint64_t filter;
+    /* read the filter-value from the filter-column */
+    rc_t rc = helper_read_vdb_int_row_open( cursor, src_idx, &filter );
+    if ( rc != 0 ) return rc;
+
+    switch( filter )
+    {
+    case SRA_READ_FILTER_REJECT   : 
+        if ( ctx->ignore_reject == false ) *pass = false;
+        break;
+
+    case SRA_READ_FILTER_REDACTED : 
+        if ( ctx->ignore_redact == false ) *redact = true;
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_row_loop( const p_context ctx,
+                               const VCursor * src_cursor,
+                               VCursor * dst_cursor,
+                               col_defs * columns,
+                               redact_vals * rvals )
+{
+    rc_t rc;
+    const struct num_gen_iter * iter;
+    int64_t row_id;
+    uint64_t count;
+    uint32_t percent;
+    p_col_def filter_col_def = NULL;
+    redact_buffer rbuf;
+    struct progressbar * progress = NULL;
+
+    if ( columns->filter_idx != -1 )
+        filter_col_def = col_defs_get( columns, columns->filter_idx );
+
+    rc = num_gen_iterator_make( ctx->row_generator, &iter );
+    if ( rc != 0 ) return rc;
+
+    rc = make_progressbar( &progress, 2 );
+    DISP_RC( rc, "vdb_copy_row_loop:make_progressbar() failed" );
+    if ( rc != 0 ) return rc;
+
+    redact_buf_init( &rbuf );
+    col_defs_find_redact_vals( columns, rvals );
+	
+    count = 0;
+    while ( rc == 0 && num_gen_iterator_next( iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();    /* to be able to cancel the loop by signal */
+        if ( rc == 0 )
+        {
+            rc = VCursorSetRowId( src_cursor, row_id );
+            if ( rc != 0 )
+                PLOGERR( klogInt, (klogInt, rc,
+                         "VCursorSetRowId(src) row #$(row_nr) failed",
+                         "row_nr=%lu", row_id ));
+
+            if ( rc == 0 )
+            {
+                rc = VCursorOpenRow( src_cursor );
+                if ( rc != 0 )
+                    PLOGERR( klogInt, (klogInt, rc,
+                             "VCursorOpenRow(src) row #$(row_nr) failed",
+                             "row_nr=%lu", row_id ));
+                else
+                {
+                    bool pass_flag = true;
+                    bool redact_flag = false;
+
+                    if ( filter_col_def != NULL )
+                        vdb_copy_read_row_flags( ctx, src_cursor,
+                                    filter_col_def->src_idx, &pass_flag, &redact_flag );
+                    if ( pass_flag )
+                        rc = vdb_copy_row( src_cursor, dst_cursor,
+                                           columns, row_id,
+                                           &rbuf, redact_flag, ctx->show_redact );
+
+                    if ( rc == 0 )
+                    {
+                        count++;
+                        rc = VCursorCloseRow( src_cursor );
+                        if ( rc != 0 )
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                     "VCursorCloseRow(src) row #$(row_nr) failed",
+                                     "row_nr=%lu", row_id ) );
+                    }
+                }
+
+                if ( ctx->show_progress )
+                {
+                    if ( num_gen_iterator_percent( iter, 2, &percent ) == 0 )
+                        update_progressbar( progress, percent );
+                }
+            }
+        }
+    }
+
+    /* set rc to zero for num_gen_iterator_next() reached last id */
+    if ( GetRCModule( rc ) == rcVDB && 
+         GetRCTarget( rc ) == rcNoTarg && 
+         GetRCContext( rc ) == rcReading &&
+         GetRCObject( rc ) == rcId &&
+         GetRCState( rc ) == rcInvalid )
+        rc = 0;
+
+    if ( ctx->show_progress )
+        KOutMsg( "\n" );
+    destroy_progressbar( progress );
+
+    PLOGMSG( klogInfo, ( klogInfo, "\n $(row_cnt) rows copied", "row_cnt=%lu", count ));
+
+    if ( rc == 0 )
+    {
+        rc = VCursorCommit( dst_cursor );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorCommit( dst ) after processing all rows failed" );
+        }
+    }
+    num_gen_iterator_destroy( iter );
+    redact_buf_free( &rbuf );
+
+    return rc;
+}
+
+
+static rc_t vdb_copy_make_dst_table( const p_context ctx,
+                                     VDBManager * vdb_mgr, 
+                                     const VSchema * src_schema,
+                                     VSchema **dst_schema,
+                                     KCreateMode cmode,
+                                     VTable **dst_table,
+                                     bool is_legacy )
+{
+    rc_t rc = 0;
+
+    /* different ways to make the schema for the dest-table */
+    if ( is_legacy )
+    {
+        /* load it from a file */
+        /*
+        KOutMsg( "we are using '%s'\n", cctx->legacy_schema_file );
+        */
+        if ( *dst_schema == NULL )
+        {
+            rc = VDBManagerMakeSRASchema( vdb_mgr, dst_schema );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt,
+                         (klogInt,
+                         rc, "VDBManagerMakeSRASchema(dst) failed", "" ));
+            }
+        }
+        rc = VSchemaParseFile ( *dst_schema, "%s", ctx->legacy_schema_file );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt,
+                     (klogInt,
+                     rc, "VSchemaParseFile() failed", "" ));
+        }
+    }
+    else
+    {
+        /* in case of a non-legacy-table, do nothing,
+           keep using the src-schema-object */
+        *dst_schema = (VSchema *)src_schema;
+        VSchemaAddRef( src_schema );
+    }
+    if ( rc == 0 )
+    {
+        rc = VDBManagerCreateTable( vdb_mgr, dst_table,
+                             *dst_schema, ctx->dst_schema_tabname,
+                                    cmode, "%s", ctx->dst_path );
+        DISP_RC( rc, "vdb_copy_make_dst_table:VDBManagerCreateTable() failed" );
+        if ( rc == 0 )
+        {
+            KChecksum cs_mode = helper_assemble_ChecksumMode( ctx->blob_checksum );
+            rc = VTableColumnCreateParams ( *dst_table, cmode, cs_mode, 0 );
+            DISP_RC( rc, "vdb_copy_make_dst_table:VTableColumnCreateParams() failed" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_open_dest_table( const p_context ctx,
+                                      const VTable * src_table,
+                                      VTable * dst_table,
+                                      VCursor ** dst_cursor,
+                                      col_defs * columns,
+                                      bool is_legacy )
+{
+    rc_t rc;
+
+    /* copy the metadata */
+    rc = copy_table_meta( src_table, dst_table, 
+                          ctx->config.meta_ignore_nodes, 
+                          ctx->show_meta, is_legacy );
+    if ( rc != 0 ) return rc;
+
+    /* mark all columns which are to be found writable as to_copy */
+    rc = col_defs_mark_writable_columns( columns, dst_table, false );
+    DISP_RC( rc, "vdb_copy_open_dest_table:col_defs_mark_writable_columns() failed" );
+    if ( rc != 0 ) return rc;
+
+    /* make a writable cursor */
+    rc = VTableCreateCursorWrite( dst_table, dst_cursor, kcmInsert );
+    DISP_RC( rc, "vdb_copy_open_dest_table:VTableCreateCursorWrite(dst) failed" );
+    if ( rc != 0 ) return rc;
+
+    /* add all marked ( as to copy ) columns to the writable cursor */
+    rc = col_defs_add_to_wr_cursor( columns, *dst_cursor, false );
+    DISP_RC( rc, "vdb_copy_open_dest_table:col_defs_add_to_wr_cursor(dst) failed" );
+    if ( rc != 0 ) return rc;
+
+    /* opens the dst cursor */
+    rc = VCursorOpen( *dst_cursor );
+    DISP_RC( rc, "vdb_copy_open_dest_table:VCursorOpen(dst) failed" );
+
+    return rc;
+}
+
+
+/* detect the row-range of the source-table
+   check if the requested row-range is within this range
+   otherwise correct the requested row-range
+*/
+static rc_t vdb_copy_check_range( const p_context ctx,
+                                  const VCursor * a_cursor )
+{
+    int64_t  first;
+    uint64_t count;
+    rc_t rc = VCursorIdRange( a_cursor, 0, &first, &count );
+    DISP_RC( rc, "vdb_copy_check_range:VCursorIdRange() failed" );
+    if ( rc == 0 )
+    {
+        rc = context_range_check( ctx, first, count );
+        DISP_RC( rc, "vdb_copy_check_range:context_range_check() failed" );
+    }
+    return rc;
+}
+
+
+/* detect the row-range of the source-table
+   set's the range of the number-generator to the discovered values
+*/
+static rc_t vdb_copy_set_range( const p_context ctx,
+                                const VCursor * a_cursor )
+{
+    int64_t  first;
+    uint64_t count;
+    rc_t rc = VCursorIdRange( a_cursor, 0, &first, &count );
+    DISP_RC( rc, "vdb_copy_set_range:VCursorIdRange() failed" );
+    if ( rc == 0 )
+    {
+        rc = context_set_range( ctx, first, count );
+        DISP_RC( rc, "vdb_copy_set_range:context_set_range() failed" );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_prepare_legacy_tab( const p_context ctx,
+                                         const char * src_schema_tabname )
+{
+    KConfig * config_mgr;
+    char * src_platform;
+
+    rc_t rc = get_table_platform( ctx->src_path, &src_platform, '_' );
+    DISP_RC( rc, "vdb_copy_prepare_legacy_tab:get_table_platform() failed" );
+    if ( rc != 0 ) return rc;
+
+    rc = helper_make_config_mgr( &config_mgr, ctx->kfg_path );
+    DISP_RC( rc, "vdb_copy_prepare_legacy_tab:helper_make_config_mgr() failed" );
+    if ( rc != 0 ) return rc;
+
+    PLOGMSG( klogInfo, ( klogInfo, "legacy-platform: $(platform)", "platform=%s",
+                                   src_platform ));
+
+    rc = helper_get_legacy_write_schema_from_config( config_mgr,
+                src_platform,
+                src_schema_tabname,
+                &(ctx->legacy_schema_file),
+                &(ctx->dst_schema_tabname),
+                &(ctx->legacy_dont_copy) );
+    DISP_RC( rc, "vdb_copy_prepare_legacy_tab:helper_get_legacy_write_schema_from_config() failed" );
+    KConfigRelease( config_mgr );
+    if ( rc != 0 ) return rc;
+
+    if ( ctx->show_matching )
+    {
+        PLOGMSG( klogInfo, ( klogInfo, "-file: $(file)", "file=%s", ctx->legacy_schema_file ));
+        PLOGMSG( klogInfo, ( klogInfo, "-tab : $(tab)",  "tab=%s",  ctx->dst_schema_tabname ));
+        PLOGMSG( klogInfo, ( klogInfo, "-dont: $(dont)", "dont=%s", ctx->legacy_dont_copy ));
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
+                                                   const char * tablename,
+                                                   col_defs * columns, 
+                                                   const char * requested,
+                                                   const char * excluded )
+{
+    bool cols_requested = ( ( requested != NULL ) &&
+                            ( nlt_strcmp( requested, "*" ) != 0 ) );
+    /* no matter if specific columns are requested, we first discover all of them
+       to later mark the columns which are requested */
+    rc_t rc = col_defs_extract_from_table( columns, src_table );
+    DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_extract_from_table() failed" );
+    if ( rc == 0 )
+    {
+        if ( cols_requested )
+            /* the user requested a specific subset of columns... */
+            rc = col_defs_mark_requested_columns( columns, requested );
+        else
+            /* no specific subset of columns is requested --> copy what we can... */
+            rc = col_defs_mark_requested_columns( columns, NULL );
+        DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_mark_requested_columns() failed" );
+        if ( rc == 0 && excluded != NULL )
+        {
+            rc = col_defs_exclude_these_columns( columns, tablename, excluded );
+            DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_unmark_writable_columns() failed" );
+        }
+    }
+    return rc;
+}
+
+
+/* find the filter-column and redactable columns */
+static void vdb_copy_find_filter_and_redact_columns( const VSchema * src_schema,
+                                                     col_defs * columns,
+                                                     config_values * config,
+                                                     matcher * type_matcher )
+{
+    /* it is ok to not find a filter-column: no error in this case */
+    col_defs_detect_filter_col( columns, config->filter_col_name );
+
+    /* it is ok to not find redactable types: no error in this case */
+    col_defs_detect_redactable_cols_by_type( columns,
+             src_schema, type_matcher, config->redactable_types );
+
+    /* it is ok to not find columns excluded from redacting: no error in this case */
+    col_defs_unmark_do_not_redact_columns( columns,
+                    config->do_not_redact_columns );
+}
+
+
+static rc_t vdb_copy_detect_legacy( const p_context ctx,
+                                    VDBManager * vdb_mgr,
+                                    const VTable * src_table,
+                                    bool * is_legacy )
+{
+    char * src_schema_tabname;
+    /* detects the name of the schema-table used by the source-table */
+    rc_t rc = helper_get_schema_tab_name( src_table, &src_schema_tabname );
+    DISP_RC( rc, "vdb_copy_prepare_columns:helper_get_schema_tab_name() failed" );
+    if ( rc == 0 )
+    {
+        rc = helper_is_tablename_legacy( vdb_mgr, src_schema_tabname, is_legacy );
+        if ( rc == 0 )
+        {
+            if ( *is_legacy )
+            {
+                PLOGMSG( klogInfo, ( klogInfo, "used legacy schema: $(schema)", "schema=%s", 
+                                     src_schema_tabname ));
+                rc = vdb_copy_prepare_legacy_tab( ctx, src_schema_tabname );
+            }
+            else
+            {
+                PLOGMSG( klogInfo, ( klogInfo, "used schema: $(schema)", "schema=%s", 
+                                     src_schema_tabname ));
+                ctx->dst_schema_tabname = string_dup_measure ( src_schema_tabname, NULL );
+            }
+        }
+        free( src_schema_tabname );
+    }
+    return rc;
+}
+
+
+/* we have the src-columns collected (incl. there types):
+   no columns have been added to a cursor (rd and wr),
+   now we can find the columns which have to be copied
+   including the right type-casts for every one of these columns */
+static rc_t vdb_copy_match_columns( const p_context ctx,
+                                    VDBManager * vdb_mgr, 
+                                    col_defs * columns,
+                                    matcher * type_matcher )
+{
+    rc_t rc;
+    matcher_input mi;
+
+    rc = KDirectoryNativeDir( &( mi.dir ) );
+    DISP_RC( rc, "vdb_copy_match_columns:KDirectoryNativeDir() failed" );
+    if ( rc == 0 )
+    {
+        rc = helper_make_config_mgr( &(mi.cfg), ctx->kfg_path );
+        DISP_RC( rc, "vdb_copy_match_columns:helper_make_config_mgr() failed" );
+        if ( rc == 0 )
+        {
+            mi.manager = vdb_mgr;
+            mi.add_schemas = ctx->src_schema_list;
+
+            rc = col_defs_as_string( columns, (char**)&mi.columns, true );
+            if ( rc == 0 )
+            {
+                mi.src_path         = ctx->src_path;
+                mi.dst_path         = ctx->dst_path;
+                mi.legacy_schema    = ctx->legacy_schema_file;
+                mi.dst_tabname      = ctx->dst_schema_tabname;
+                mi.excluded_columns = ctx->legacy_dont_copy;
+                mi.force_kcmInit    = ctx->force_kcmInit;
+                mi.force_unlock     = ctx->force_unlock;
+
+                rc = matcher_execute( type_matcher, &mi );
+                if ( rc != 0 )
+                {
+                    if ( GetRCState( rc ) == rcExists )
+                    {
+                        LOGMSG( klogInfo, "vdb-copy cannot create the target-table, because it already exists!" );
+                        LOGMSG( klogInfo, "try to use the force-option (-f)" );
+                        ctx->dont_remove_target = true;
+                    }
+                    else
+                        DISP_RC( rc, "vdb_copy_match_columns:matcher_execute() failed" );
+                }
+                if ( rc == 0 )
+                {
+                    if ( ctx->show_matching )
+                        matcher_report( type_matcher, true );
+                    rc = col_defs_apply_casts( columns, type_matcher );
+                    DISP_RC( rc, "vdb_copy_match_columns:col_defs_apply_casts() failed" );
+                }
+
+                free( ( void * )mi.columns );
+            }
+            KConfigRelease( mi.cfg );
+        }
+        KDirectoryRelease( mi.dir );
+    }
+    return rc;
+}
+
+
+/* this is the common entry-point for the copy-operation in both cases
+   "given path is database" OR "given path is table" */
+static rc_t vdb_copy_open_source_table( const p_context ctx,
+                                        VDBManager * vdb_mgr,
+                                        const VSchema * src_schema,
+                                        VSchema **dst_schema,
+                                        const VTable * src_table,
+                                        const VCursor * src_cursor,
+                                        KCreateMode cmode,
+                                        VTable **dst_table,
+                                        col_defs * columns,
+                                        bool * is_legacy,
+                                        matcher * type_matcher ) 
+{
+    /* everything what has to be done before adding the columns
+       to the source-cursor and opening the source-cursor */
+    rc_t rc = vdb_copy_detect_legacy( ctx, vdb_mgr, src_table, is_legacy );
+    if ( rc != 0 ) return rc;
+
+    /* type-match between src <---> dst columns, find best typecast */
+    rc = vdb_copy_match_columns( ctx, vdb_mgr, columns, type_matcher );
+    if ( rc != 0 ) return rc;
+
+    /* in case of legacy table make new schema - parse matched schema
+       in case on non-legacy use the src-schema as dst-schema */
+    rc = vdb_copy_make_dst_table( ctx, vdb_mgr, src_schema, dst_schema, cmode, 
+                                  dst_table, *is_legacy );
+    if ( rc != 0 ) return rc;
+
+    /* the prepared and eventually shortened src-column-list is used */
+    rc = col_defs_add_to_rd_cursor( columns, src_cursor, false );
+    if ( rc != 0 ) return rc;
+
+    rc = VCursorOpen( src_cursor );
+    DISP_RC( rc, "vdb_copy_open_source_table:VCursorOpen() failed" );
+    if ( rc != 0 ) return rc;
+
+    /* range check requires an open cursor */
+    rc = vdb_copy_check_range( ctx, src_cursor );
+    return rc;
+}
+
+
+static rc_t vdb_copy_table2( const p_context ctx,
+                             VDBManager * vdb_mgr,
+                             const VTable * src_table,
+                             const VCursor * src_cursor,
+                             const VSchema * src_schema,
+                             col_defs * columns,
+                             matcher * type_matcher )
+{
+    VSchema * dst_schema = NULL;
+    VTable * dst_table;
+    bool is_legacy;
+
+    KCreateMode cmode = helper_assemble_CreateMode( src_table, 
+                              ctx->force_kcmInit, ctx->md5_mode );
+    rc_t rc = vdb_copy_open_source_table( ctx, vdb_mgr, src_schema, &dst_schema,
+                                     src_table, src_cursor, cmode, &dst_table, columns,
+                                     &is_legacy, type_matcher );
+    if ( rc == 0 )
+    {
+        VCursor * dst_cursor;
+        rc = vdb_copy_open_dest_table( ctx, src_table, dst_table, &dst_cursor, columns, 
+                                       is_legacy );
+        if ( rc == 0 )
+        {
+            /* this function does not fail, because it is ok to not find
+               filter-column, redactable types and excluded columns */
+            vdb_copy_find_filter_and_redact_columns( src_schema,
+                                   columns, &(ctx->config), type_matcher );
+
+            rc = vdb_copy_row_loop( ctx, src_cursor, dst_cursor,
+                                    columns, ctx->rvals );
+
+            VCursorRelease( dst_cursor );
+            if ( rc == 0 )
+            {
+                if ( ctx->reindex )
+                {
+                    /* releasing the cursor is necessary for reindex */
+                    rc = VTableReindex( dst_table );
+                    DISP_RC( rc, "vdb_copy_table2:VTableReindex() failed" );
+                }
+            }
+        }
+        VSchemaRelease( dst_schema );
+        VTableRelease( dst_table );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_table( const p_context ctx,
+                            VDBManager * vdb_mgr,
+                            const VTable * src_table,
+                            const char * tablename )
+{
+    const VSchema * src_schema;
+    rc_t rc = VTableOpenSchema ( src_table, &src_schema );
+    DISP_RC( rc, "vdb_copy_main:VTableOpenSchema( src_schema ) failed" );
+    if ( rc == 0 )
+    {
+        col_defs * columns;
+        rc = col_defs_init( &columns );
+        DISP_RC( rc, "vdb_copy_table:col_defs_init() failed" );
+        if ( rc == 0 )
+        {
+            rc = vdb_copy_find_out_what_columns_to_use( src_table, tablename, columns,
+                                                        ctx->columns, ctx->excluded_columns );
+            if ( rc == 0 )
+            {
+                const VCursor * src_cursor;
+                rc = VTableCreateCursorRead( src_table, &src_cursor );
+                DISP_RC( rc, "vdb_copy_table:VTableCreateCursorRead() failed" );
+                if ( rc == 0 )
+                {
+                    matcher * type_matcher;
+
+                    rc = matcher_init( &type_matcher );
+                    DISP_RC( rc, "vdb_copy_table:matcher_init() failed" );
+                    if ( rc == 0 )
+                    {
+                        /*****************************************************/
+                        rc = vdb_copy_table2( ctx, vdb_mgr, src_table, src_cursor,
+                                              src_schema, columns, type_matcher );
+                        /*****************************************************/
+                        matcher_destroy( type_matcher );
+                    }
+                }
+                VCursorRelease( src_cursor );
+            }
+            col_defs_destroy( columns );
+        }
+        VSchemaRelease( src_schema );
+    }
+    return rc;
+}
+
+
+/*-----------------------------------------------------------------------------*/
+static rc_t vdb_copy_cur_2_cur( const p_context ctx,
+                                const VCursor * src_cursor,
+                                VCursor * dst_cursor,
+                                const VSchema * schema,
+                                col_defs * columns,
+                                matcher * type_matcher,
+                                const char * tab_name )
+{
+    rc_t rc = col_defs_apply_casts( columns, type_matcher );
+    DISP_RC( rc, "vdb_copy_cur_2_cur:col_defs_apply_casts() failed" );
+    if ( rc == 0 )
+    {
+        rc = col_defs_add_to_wr_cursor( columns, dst_cursor, false );
+        DISP_RC( rc, "vdb_copy_cur_2_cur:col_defs_add_to_wr_cursor(dst) failed" );
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen( dst_cursor );
+            DISP_RC( rc, "vdb_copy_cur_2_cur:VCursorOpen(dst) failed" );
+            if ( rc == 0 )
+            {
+                rc = col_defs_add_to_rd_cursor( columns, src_cursor, false );
+                DISP_RC( rc, "vdb_copy_cur_2_cur:col_defs_add_to_rd_cursor() failed" );
+                if ( rc == 0 )
+                {
+                    rc = VCursorOpen( src_cursor );
+                    DISP_RC( rc, "vdb_copy_cur_2_cur:VCursorOpen(src) failed" );
+                    if ( rc == 0 )
+                    {
+                        /* set the row-range in ctx to cover the whole table */
+                        rc = vdb_copy_set_range( ctx, src_cursor );
+                        DISP_RC( rc, "vdb_copy_cur_2_cur:vdb_copy_check_range(src) failed" );
+                        if ( rc == 0 )
+                        {
+                            /* it is ok to not find a filter-column: no error in this case */
+                            col_defs_detect_filter_col( columns,
+                                                        ctx->config.filter_col_name );
+
+                            /* it is ok to not find columns excluded from redacting: no error in this case */
+                            col_defs_unmark_do_not_redact_columns( columns,
+                                            ctx->config.do_not_redact_columns );
+
+                            if ( ctx->show_progress )
+                                KOutMsg( "copy of >%s<\n", tab_name );
+
+                            vdb_copy_find_filter_and_redact_columns( schema,
+                                                   columns, &(ctx->config), type_matcher );
+
+                            /**************************************************/
+                            rc = vdb_copy_row_loop( ctx, src_cursor, dst_cursor,
+                                                    columns, ctx->rvals );
+                            /**************************************************/
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t vdb_copy_tab_2_tab( const p_context ctx,
+                                const VTable * src_tab,
+                                VTable * dst_tab,
+                                const char * tab_name )
+{
+    const VSchema * schema;
+    rc_t rc = VTableOpenSchema ( src_tab, &schema );
+    DISP_RC( rc, "vdb_copy_tab_2_tab:VTableOpenSchema( src_schema ) failed" );
+    if ( rc == 0 )
+    {
+        col_defs * columns;
+        rc = col_defs_init( &columns );
+        DISP_RC( rc, "vdb_copy_tab_2_tab:col_defs_init() failed" );
+        if ( rc == 0 )
+        {
+            rc = vdb_copy_find_out_what_columns_to_use( src_tab, tab_name, columns, 
+                                                        NULL, ctx->excluded_columns );
+            if ( rc == 0 )
+            {
+                matcher * type_matcher;
+                rc = matcher_init( &type_matcher );
+                if ( rc == 0 )
+                {
+                    char * column_names;
+                    rc = col_defs_as_string( columns, (char**)&column_names, true );
+                    if ( rc == 0 )
+                    {
+                        rc = matcher_db_execute( type_matcher, src_tab, dst_tab, schema,
+                                                 column_names, ctx->kfg_path );
+                        if ( rc == 0 )
+                        {
+                            const VCursor * src_cursor;
+                            if ( ctx->show_matching )
+                                matcher_report( type_matcher, false );
+                            rc = VTableCreateCursorRead( src_tab, &src_cursor );
+                            DISP_RC( rc, "vdb_copy_tab_2_tab:VTableCreateCursorRead(src) failed" );
+                            if ( rc == 0 )
+                            {
+                                rc = col_defs_mark_writable_columns( columns, dst_tab, false );
+                                DISP_RC( rc, "vdb_copy_tab_2_tab:col_defs_mark_writable_columns() failed" );
+                                if ( rc == 0 )
+                                {
+                                    VCursor * dst_cursor;
+                                    rc = VTableCreateCursorWrite( dst_tab, &dst_cursor, kcmInsert );
+                                    DISP_RC( rc, "vdb_copy_tab_2_tab:VTableCreateCursorWrite(dst) failed" );
+                                    if ( rc == 0 )
+                                    {
+                                        /*****************************************************/
+                                        rc = vdb_copy_cur_2_cur( ctx, src_cursor, dst_cursor,
+                                                                 schema, columns, type_matcher,
+                                                                 tab_name );
+                                        /*****************************************************/
+                                    }
+                                    VCursorRelease( dst_cursor );
+                                }
+                                VCursorRelease( src_cursor );
+                            }
+                        }
+                        free( column_names );
+                    }
+                    matcher_destroy( type_matcher );
+                }
+            }
+            col_defs_destroy( columns );
+        }
+        VSchemaRelease( schema );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_db_tab( const p_context ctx,
+                             const VDatabase * src_db,
+                             VDatabase * dst_db,
+                             const char *tab_name )
+{
+    const VTable * src_tab;
+    rc_t rc = VDatabaseOpenTableRead( src_db, &src_tab, "%s", tab_name );
+    DISP_RC( rc, "vdb_copy_db_tab:VDatabaseOpenTableRead(src) failed" );
+    if ( rc == 0 )
+    {
+        VTable * dst_tab;
+        KCreateMode cmode = helper_assemble_CreateMode( src_tab, 
+                            ctx->force_kcmInit, ctx->md5_mode );
+
+        rc = VDatabaseCreateTable ( dst_db, &dst_tab, tab_name, 
+                                    cmode, "%s", tab_name );
+        DISP_RC( rc, "vdb_copy_db_tab:VDatabaseCreateTable(dst) failed" );
+        if ( rc == 0 )
+        {
+            KChecksum cs_mode = helper_assemble_ChecksumMode( ctx->blob_checksum );
+            rc = VTableColumnCreateParams ( dst_tab, cmode, cs_mode, 0 );
+            DISP_RC( rc, "vdb_copy_db_tab:VTableColumnCreateParams failed" );
+            if ( rc == 0 )
+            {
+                rc = copy_table_meta( src_tab, dst_tab, 
+                                      ctx->config.meta_ignore_nodes, 
+                                      ctx->show_meta, false );
+                DISP_RC( rc, "vdb_copy_db_tab:copy_table_meta failed" );
+                if ( rc == 0 )
+                {
+                    /********************************************************/
+                    rc = vdb_copy_tab_2_tab( ctx, src_tab, dst_tab, tab_name );
+                    /********************************************************/
+                }
+            }
+            VTableRelease( dst_tab );
+        }
+        VTableRelease( src_tab );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_db_sub_tables( const p_context ctx,
+                                    const VDatabase * src_db,
+                                    VDatabase * dst_db )
+{
+    KNamelist *names;
+
+    rc_t rc = VDatabaseListTbl( src_db, &names );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count;
+        rc = KNamelistCount( names, &count );
+        DISP_RC( rc, "vdb_copy_db_sub_tables:KNamelistCount failed" );
+        if ( rc == 0 )
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *a_name;
+                rc = KNamelistGet( names, idx, &a_name );
+                DISP_RC( rc, "vdb_copy_db_sub_tables:KNamelistGet() failed" );
+                if ( rc == 0 )
+                {
+                    /**************************************************/
+                    rc = vdb_copy_db_tab( ctx, src_db, dst_db, a_name );
+                    /**************************************************/
+                }
+            }
+        KNamelistRelease( names );
+    }
+    else
+        rc = 0;
+    return rc;
+}
+
+
+/* forward decl. to make recursive copy of sub-databases possible */
+static rc_t vdb_copy_db_2_db( const p_context ctx,
+                              const VDatabase * src_db,
+                              VDatabase * dst_db );
+
+static rc_t vdb_copy_sub_dbs( const p_context ctx,
+                              const VDatabase * src_db,
+                              VDatabase * dst_db )
+{
+    KNamelist *names;
+
+    rc_t rc = VDatabaseListDB( src_db, &names );
+    if ( rc == 0 )
+    {
+        uint32_t idx, count;
+        rc = KNamelistCount( names, &count );
+        DISP_RC( rc, "vdb_copy_sub_dbs:KNamelistCount failed" );
+        if ( rc == 0 )
+        {
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *a_name;
+                rc = KNamelistGet( names, idx, &a_name );
+                DISP_RC( rc, "vdb_copy_sub_dbs:KNamelistGet() failed" );
+                if ( rc == 0 )
+                {
+                    const VDatabase * src_sub_db;
+                    /* try to open the sub-database */
+                    rc = VDatabaseOpenDBRead ( src_db, &src_sub_db, "%s", a_name );
+                    DISP_RC( rc, "vdb_copy_sub_dbs:VDatabaseOpenDBRead() failed" );
+                    if ( rc == 0 )
+                    {
+                        char typespec[ TYPESPEC_BUF_LEN ];
+                        rc = VDatabaseTypespec ( src_sub_db, typespec, sizeof typespec );
+                        DISP_RC( rc, "vdb_copy_sub_dbs:VDatabaseTypespec( src ) failed" );
+                        if ( rc == 0 )
+                        {
+                            VDatabase * dst_sub_db;
+                            KCreateMode cmode = kcmInit | kcmParents;
+                            if ( ctx->md5_mode == MD5_MODE_ON )
+                                cmode |= kcmMD5;
+                            rc = VDatabaseCreateDB ( dst_db, &dst_sub_db,
+                                                     typespec, cmode, "%s", a_name );
+                            DISP_RC( rc, "vdb_copy_sub_dbs:VDBManagerCreateDB( dst ) failed" );
+                            if ( rc == 0 )
+                            {
+                                KChecksum cs_mode = helper_assemble_ChecksumMode( ctx->blob_checksum );
+                                rc = VDatabaseColumnCreateParams ( dst_db, cmode, cs_mode, 0 );
+                                DISP_RC( rc, "vdb_copy_sub_dbs:VDatabaseColumnCreateParams failed" );
+                                if ( rc == 0 )
+                                {
+                                    /**************************************************/
+                                    rc = vdb_copy_db_2_db( ctx, src_sub_db, dst_sub_db );
+                                    /**************************************************/
+                                }
+                                VDatabaseRelease( dst_sub_db );
+                            }
+                        }
+                        VDatabaseRelease( src_sub_db );
+                    }
+                }
+            }
+        }
+        KNamelistRelease( names );
+    }
+    else
+        rc = 0;
+
+    return rc;
+}
+
+
+static rc_t vdb_copy_db_2_db( const p_context ctx,
+                              const VDatabase * src_db,
+                              VDatabase * dst_db )
+{
+    rc_t rc = copy_database_meta ( src_db, dst_db, NULL, ctx->show_meta );
+    if ( rc == 0 )
+    {
+        if ( ctx->table == NULL )
+        {
+            /* the user did not specify a particular table: copy all of them */
+            /*************************************************/
+            rc = vdb_copy_db_sub_tables( ctx, src_db, dst_db );
+            /*************************************************/
+            if ( rc == 0 )
+            {
+                /* if the database has sub-databases: copy them too */
+                rc = vdb_copy_sub_dbs( ctx, src_db, dst_db );
+            }
+        }
+        else
+        {
+            /* copy only this table... */
+            rc = vdb_copy_db_tab( ctx, src_db, dst_db, ctx->table );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_copy_database( const p_context ctx,
+                               VDBManager * vdb_mgr,
+                               const VDatabase * src_db )
+{
+    char typespec[ TYPESPEC_BUF_LEN ];
+    rc_t rc = VDatabaseTypespec ( src_db, typespec, sizeof typespec );
+    DISP_RC( rc, "vdb_copy_database:VDatabaseTypespec( src ) failed" );
+    if ( rc == 0 )
+    {
+        const VSchema * schema;
+        rc = VDatabaseOpenSchema ( src_db, &schema );
+        DISP_RC( rc, "vdb_copy_database:VDatabaseOpenSchema( src ) failed" );
+        if ( rc == 0 )
+        {
+            VDatabase * dst_db;
+            KCreateMode cmode = kcmInit | kcmParents;
+            if ( ctx->md5_mode == MD5_MODE_ON )
+                cmode |= kcmMD5;
+            rc = VDBManagerCreateDB ( vdb_mgr, &dst_db, schema,
+                                      typespec, cmode, "%s", ctx->dst_path );
+            DISP_RC( rc, "vdb_copy_database:VDBManagerCreateDB( dst ) failed" );
+            if ( rc == 0 )
+            {
+                KChecksum cs_mode = helper_assemble_ChecksumMode( ctx->blob_checksum );
+                rc = VDatabaseColumnCreateParams ( dst_db, cmode, cs_mode, 0 );
+                DISP_RC( rc, "vdb_copy_sub_dbs:VDatabaseColumnCreateParams failed" );
+                if ( rc == 0 )
+                {
+                    /*******************************************/
+                    rc = vdb_copy_db_2_db( ctx, src_db, dst_db );
+                    /*******************************************/
+                }
+                VDatabaseRelease( dst_db );
+            }
+            VSchemaRelease( schema );
+        }
+    }
+    return rc;
+}
+
+
+/***************************************************************************
+    vdb_copy_perform:
+    * called by "vdb_copy_main()"
+    * makes the "default-schema"
+    * tests if the given source path is a database/table/none-of-that
+
+ctx        [IN] ... contains path, tablename, columns, row-range etc.
+vdb_mgr    [IN] ... contains the vdb-manger to create src/dst-objects
+***************************************************************************/
+static rc_t vdb_copy_perform( const p_context ctx,
+                              VDBManager * vdb_mgr )
+{
+    VSchema * dflt_schema;
+    rc_t rc = helper_parse_schema( vdb_mgr, &dflt_schema, ctx->src_schema_list );
+    DISP_RC( rc, "vdb_copy_main:helper_parse_schema(dflt) failed" );
+    if ( rc == 0 )
+    {
+        const VDatabase * src_db;
+        /* try to open it as a database */
+        rc = VDBManagerOpenDBRead ( vdb_mgr, &src_db, dflt_schema, "%s", ctx->src_path );
+        if ( rc == 0 )
+        {
+            /* if it succeeds it is a database, continue to copy it */
+            if ( DB_COPY_ENABLED == 1 )
+            {
+                /*********************************************/
+                rc = vdb_copy_database( ctx, vdb_mgr, src_db );
+                /*********************************************/
+                DISP_RC( rc, "vdb_copy_perform:vdb_copy_database() failed" );
+            }
+            else
+                LOGMSG( klogInfo, "a copy of a database is not implemented yet..." );
+            VDatabaseRelease( src_db );
+        }
+        else
+        {
+            const VTable * src_table;
+            /* try to open it as a table */
+            rc = VDBManagerOpenTableRead( vdb_mgr, &src_table,
+                                          dflt_schema, "%s", ctx->src_path );
+            /* if it succeeds it is a table, continue to copy it */
+            if ( rc == 0 )
+            {
+                /*********************************************/
+                rc = vdb_copy_table( ctx, vdb_mgr, src_table, NULL );
+                /*********************************************/
+                DISP_RC( rc, "vdb_copy_perform:vdb_copy_table() failed" );
+                VTableRelease( src_table );
+            }
+            else
+            {
+                rc = RC( rcVDB, rcNoTarg, rcCopying, rcItem, rcNotFound );
+                PLOGERR( klogInt, ( klogInt, rc,
+                         "\nthe path '$(path)' cannot be opened as vdb-database or vdb-table",
+                         "path=%s", ctx->src_path ));
+            }
+        }
+        VSchemaRelease( dflt_schema );
+    }
+    return rc;
+}
+
+
+/***************************************************************************
+    vdb_copy_main:
+    * called by "KMain()"
+    * make the "native directory"
+    * make a vdb-manager for write
+      all subsequent copy-functions will use this manager...
+    * check if the given path is database-path ( by trying to open it )
+      if it is one: continue wit copy_database()
+    * check if the given path is table-path ( by trying to open it )
+      if it is one: continue wit copy_table()
+    * release manager and directory
+
+ctx        [IN] ... contains path, tablename, columns, row-range etc.
+***************************************************************************/
+static rc_t vdb_copy_main( const p_context ctx )
+{
+    KDirectory * directory;
+    rc_t rc = KDirectoryNativeDir( &directory );
+    DISP_RC( rc, "vdb_copy_main:KDirectoryNativeDir() failed" );
+    if ( rc == 0 )
+    {
+        KConfig * config_mgr;
+
+#if TOOLS_USE_SRAPATH != 0
+        if ( !ctx->dont_check_accession )
+            ctx->dont_check_accession = helper_is_this_a_filesystem_path( ctx->src_path );
+        if ( !ctx->dont_check_accession )
+        {
+            rc_t rc1 = helper_resolve_accession( directory, (char**)&( ctx->src_path ) );
+            DISP_RC( rc1, "vdb_copy_main:helper_check_accession() failed" );
+        }
+#endif
+
+        rc = helper_make_config_mgr( &config_mgr, ctx->kfg_path );
+        DISP_RC( rc, "vdb_copy_main:helper_make_config_mgr() failed" );
+        if ( rc == 0 )
+        {
+            VDBManager * vdb_mgr;
+
+            helper_read_config_values( config_mgr, &(ctx->config) );
+            helper_read_redact_values( config_mgr, ctx->rvals );
+            KConfigRelease( config_mgr );
+
+            rc = VDBManagerMakeUpdate ( &vdb_mgr, directory );
+            DISP_RC( rc, "vdb_copy_main:VDBManagerMakeRead() failed" );
+            if ( rc == 0 )
+            {
+                /************************************/
+                rc = vdb_copy_perform( ctx, vdb_mgr );
+                /************************************/
+                VDBManagerRelease( vdb_mgr );
+            }
+        }
+        /* after that we can remove the output-path if necessary */
+        if ( rc != 0 && !ctx->dont_remove_target )
+            rc = helper_remove_path( directory, ctx->dst_path );
+
+        /* now we can release the directory */
+        KDirectoryRelease( directory );
+    }
+    return rc;
+}
+
+
+/***************************************************************************
+    Main:
+    * create the copy-context
+    * parse the commandline for arguments and options
+    * react to help/usage - requests ( no dump in this case )
+      these functions are in vdb-copy-context.c
+    * call copy_main() to execute the copy-operation
+    * destroy the copy-context
+***************************************************************************/
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+                             MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
+    DISP_RC( rc, "KMain:ArgsMakeAndHandle() failed" );
+    if ( rc == 0 )
+    {
+        context *ctx;
+        KLogHandlerSetStdErr();
+        rc = context_init( &ctx );
+        DISP_RC( rc, "KMain:copy_context_init() failed" );
+        if ( rc == 0 )
+        {
+            rc = context_capture_arguments_and_options( args, ctx );
+            DISP_RC( rc, "KMain:context_capture_arguments_and_options() failed" );
+            if ( rc == 0 )
+            {
+                if ( ctx->usage_requested ) {
+                    MiniUsage( args );
+                    rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcInsufficient);
+                }
+                else
+                    /************************/
+                    rc = vdb_copy_main( ctx );
+                    /************************/
+            }
+            context_destroy ( ctx );
+        }
+        ArgsWhack ( args );
+    }
+    return rc;
+}
diff --git a/tools/vdb-copy/vdb-copy.kfg b/tools/vdb-copy/vdb-copy.kfg
new file mode 100644
index 0000000..e2a18fb
--- /dev/null
+++ b/tools/vdb-copy/vdb-copy.kfg
@@ -0,0 +1,94 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+# matching legacy-tables with schema's to write to for vdb-copy
+
+# ILLUMINA
+/VDBCOPY/NCBI_SRA_Illumina_tbl_v0a_1/schema = "sra/illumina.vschema"
+#/VDBCOPY/NCBI_SRA_Illumina_tbl_v0a_1/tab = "NCBI:SRA:Illumina:tbl:q4:v2"
+#/VDBCOPY/NCBI_SRA_Illumina_tbl_v0a_1/tab = "NCBI:SRA:Illumina:tbl:q1:v2"
+/VDBCOPY/NCBI_SRA_Illumina_tbl_v0a_1/tab = "NCBI:SRA:Illumina:tbl:phred:v2"
+/VDBCOPY/_ILLUMINA_/schema = "sra/illumina.vschema"
+/VDBCOPY/_ILLUMINA_/tab = "NCBI:SRA:Illumina:tbl:phred:v2"
+
+
+# _454_
+/VDBCOPY/NCBI_SRA__454__tbl_v0_1/schema = "sra/454.vschema"
+/VDBCOPY/NCBI_SRA__454__tbl_v0_1/tab = "NCBI:SRA:_454_:tbl:v2"
+/VDBCOPY/_454_/schema = "sra/454.vschema"
+/VDBCOPY/_454_/tab = "NCBI:SRA:_454_:tbl:v2"
+
+
+# ABSOLID
+/VDBCOPY/NCBI_SRA_ABI_tbl_v1_1/schema = "sra/abi.vschema"
+/VDBCOPY/NCBI_SRA_ABI_tbl_v1_1/tab = "NCBI:SRA:ABI:tbl:v2"
+/VDBCOPY/_ABSOLID_/schema = "sra/abi.vschema"
+/VDBCOPY/_ABSOLID_/tab = "NCBI:SRA:ABI:tbl:v2"
+
+
+# scoring of different schema-types for lossy-ness
+/VDBCOPY/SCORE/INSDC_2na_bin = "2"
+/VDBCOPY/SCORE/INSDC_x2na_bin = "1"
+/VDBCOPY/SCORE/INSDC_2na_packed = "2"
+/VDBCOPY/SCORE/INSDC_2cs_bin = "2"
+/VDBCOPY/SCORE/INSDC_x2cs_bin = "1"
+/VDBCOPY/SCORE/INSDC_2cs_packed = "2"
+/VDBCOPY/SCORE/INSDC_quality_phred = "1"
+/VDBCOPY/SCORE/INSDC_quality_log_odds = "1"
+/VDBCOPY/SCORE/INSDC_SRA_read_type = "1"
+
+# global vdb-copy-settings for filtering and redacting
+
+/VDBCOPY/READ_FILTER_COL_NAME = "READ_FILTER"
+
+# first redactable columns are detected by their type
+/VDBCOPY/REDACTABLE_TYPES = "INSDC:color:text,INSDC:x2cs:bin,INSDC:2cs:bin,INSDC:2cs:packed,INSDC:dna:text,INSDC:4na:bin,INSDC:4na:packed,INSDC:x2na:bin,INSDC:2na:bin,INSDC:2na:packed,NCBI:SRA:pos16,INSDC:quality:phred,INSDC:quality:log_odds,NCBI:qual4,INSDC:position:one,INSDC:position:zero,NCBI:fsamp4,NCBI:isamp1"
+
+# (1) specify a list of all types with redact-values other than zero
+#     key = "/VDBCOPY/REDACTVALUE/TYPES" ( ":" replaced by "_" )
+#
+# (2) specify for each type from (1) a redact-value
+#     key = /VDBCOPY/REDACTVALUE/xxxxxx/VALUE
+#     ( replace xxxxxx with one of the types from (1) )
+#     per default the value is one byte ( len = 1 )
+#     the format can be  - "'N'" for the ASCII-value of 'N'
+#                        OR
+#                        - "1" for the binary value of 1
+#                        OR
+#                        - "0x3A" for the binary value of 0x3A (58d)
+#
+# (2) specify for each type from (1) a redact-len (if it differs from 1 byte)
+#     key = /VDBCOPY/REDACTVALUE/xxxxxx/LEN
+#     ( replace xxxxxx with one of the types from (1) )
+#
+
+/VDBCOPY/REDACTVALUE/TYPES = "INSDC_color_text,INSDC_dna_text,NCBI_qual4"
+/VDBCOPY/REDACTVALUE/INSDC_color_text/VALUE = "'.'"
+/VDBCOPY/REDACTVALUE/INSDC_dna_text/VALUE = "'N'"
+/VDBCOPY/REDACTVALUE/NCBI_qual4/VALUE = "-6"
+
+/VDBCOPY/DO_NOT_REDACT = "CS_KEY,FLOW_CHARS,KEY_SEQUENCE,LINKER_SEQUENCE"
+
+# what root-nodes not to copy while copying metadata
+/VDBCOPY/META/IGNORE = "col,.seq,STATS,BASE_COUNT,HUFFMAN_TREE_POS,HUFFMAN_TREE_POS_SIZE,HUFFMAN_TREE_PRB,HUFFMAN_TREE_PRB_SIZE,HUFFMAN_TREE_SIG,HUFFMAN_TREE_SIG_SIZE,MSC454_CLIP_QUALITY_LEFT,MSC454_CLIP_QUALITY_RIGHT,MSC454_FLOW_CHARS,MSC454_KEY_SEQUENCE,NREADS,NUMBER_POS_CHANNELS,NUMBER_PRB_CHANNELS_1,NUMBER_PRB_COLUMNS,NUMBER_SIG_CHANNELS,PLATFORM,READ_0,READ_1,SPOT_COUNT"
diff --git a/tools/vdb-decrypt/Makefile b/tools/vdb-decrypt/Makefile
new file mode 100644
index 0000000..7651897
--- /dev/null
+++ b/tools/vdb-decrypt/Makefile
@@ -0,0 +1,102 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-decrypt
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	vdb-decrypt \
+	vdb-encrypt
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-decrypt
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+VDB_DECRYPT_SRC = \
+	vdb-decrypt \
+	shared
+
+VDB_DECRYPT_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_DECRYPT_SRC))
+
+VDB_DECRYPT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb
+
+$(BINDIR)/vdb-decrypt: $(VDB_DECRYPT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_DECRYPT_LIB)
+
+#-------------------------------------------------------------------------------
+# vdb-encrypt
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+VDB_ENCRYPT_SRC = \
+	vdb-encrypt \
+	shared
+
+VDB_ENCRYPT_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_ENCRYPT_SRC))
+
+VDB_ENCRYPT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb
+
+$(BINDIR)/vdb-encrypt: $(VDB_ENCRYPT_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_ENCRYPT_LIB)
+
diff --git a/tools/vdb-decrypt/shared.c b/tools/vdb-decrypt/shared.c
new file mode 100644
index 0000000..dfc492b
--- /dev/null
+++ b/tools/vdb-decrypt/shared.c
@@ -0,0 +1,1271 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "shared.h"
+
+#include <klib/defs.h>
+#include <klib/callconv.h>
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/log.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/namelist.h>
+
+#include <kfs/defs.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/sra.h>
+#include <kfs/lockfile.h>
+#include <kfs/cacheteefile.h>
+#include <kfs/buffile.h>
+#include <vfs/manager.h>
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+
+#include <assert.h>
+#include <string.h>
+#include <stdint.h>
+
+#ifndef RIGOROUS_SRA_CHECK
+#define RIGOROUS_SRA_CHECK 0
+#endif
+
+#define OPTION_FORCE   "force"
+#define OPTION_SRA     "decrypt-sra-files"
+#define ALIAS_FORCE    "f"
+#define ALIAS_SRA      NULL
+
+#define MY_MAX_PATH        4096
+
+
+bool ForceFlag = false;
+bool TmpFoundFlag = false;
+bool UseStdin = false;
+bool UseStdout = false;
+bool IsArchive = false;
+
+/* for wga decrypt */
+char Password [4096 + 2];
+size_t PasswordSize;
+
+/* for encfile encrypt/decrypt */
+KKey Key;
+
+const char * ForceUsage[] = 
+{ "Force overwrite of existing files", NULL };
+
+/*
+ * option  control flags
+ */
+
+const char EncExt[] = ".ncbi_enc";
+static const char TmpExt[] = ".vdb-decrypt-tmp";
+static const char TmpLockExt[] = ".vdb-decrypt-tmp.lock";
+static const char CacheExt[] = ".cache";
+static const char CacheLockExt[] = ".cache.lock";
+
+/* Usage
+ */
+rc_t CC UsageSummary (const char * progname)
+{
+    rc_t rc;
+    {
+        rc = KOutMsg (
+            /*345679012345678901234567890123456789012345678901234567890123456789012345678*/
+            "\n"
+            "Usage:\n"
+            "  %s [options] <source-file>\n"
+            "  %s [options] <source-file> <destination-file>\n"
+            "  %s [options] <source-file> <destination-directory>\n"
+            "  %s [options] <directory>\n",
+            progname, progname, progname, progname);
+    }
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+    if (rc == 0)
+        rc = KOutMsg (
+            "  %s [options] <source-directory> <destination-directory>\n",
+            progname);
+#endif
+        if (rc == 0)
+    {
+        rc = KOutMsg (
+            "\n"
+            "Summary:\n"
+            "  %scrypt a file or all the files (recursively) in a directory\n\n",
+            De);
+    }
+    return rc;
+}
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const char * pline[] = {
+        "file to encrypt", NULL,
+        "name of resulting file", NULL,
+        "directory of resulting file", NULL,
+        "directory to encrypt", NULL
+    };
+
+    rc_t rc, orc;
+
+    /* super-fragilistic molti-hacki-docious
+       let's find a better way to reuse things. */
+    if ( de [ 0 ] == 'd' )
+    {
+        pline [ 0 ] = "file to decrypt";
+        pline [ 6 ] = "directory to decrypt";
+    }
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    orc = UsageSummary (progname);
+    if (rc == 0)
+        rc = orc;
+
+    KOutMsg ("Parameters:\n");
+    HelpParamLine ("source-file"          , pline);
+    HelpParamLine ("destination-file"     , pline + 2);
+    HelpParamLine ("destination-directory", pline + 4);
+    HelpParamLine ("directory"            , pline + 6);
+    KOutMsg ("\nOptions:\n");
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, ForceUsage);
+    CryptOptionLines ();
+    HelpOptionsStandard ();
+
+    /* forcing editor alignment */
+    /*   12345678901234567890123456789012345678901234567890123456789012345678901234567890*/
+    KOutMsg (
+        "\n"
+        "Details:\n"
+        "  All %scryptions are non-destructive until successful. No files are deleted or\n"
+        "  replaced until the %scryptions are complete.\n"
+        "\n", de, de);
+
+    KOutMsg (
+        "  The extension '.ncbi_enc' will be %s when a file is %scrypted.\n"
+        "\n", Decrypting ? "removed" : "added", de);
+
+    if (Decrypting) KOutMsg (
+        "  NCBI Archive files that contain NCBI database objects will not be decrypted\n"
+        "  unless the %s option is used. As these objects can be used without\n"
+        "  decryption it is recommended they remain encrypted.\n"
+        "\n", OPTION_SRA);
+    else KOutMsg (
+        "  NCBI Archive files that contain NCBI database objects will not have the\n"
+        "  .ncbi_enc extension added.\n\n");
+
+
+    KOutMsg (
+        "  If the only parameter is a file name then it will be replaced by a file that\n"
+        "  is %scrypted with a possible changed extension.\n"
+        "  \n", de);
+
+    KOutMsg (
+        "  If the only parameter is a directory, all files in that directory including\n"
+        "  all files in subdirectories will be replaced with a possible change\n"
+        "  in the extension.\n"
+        "\n");
+
+    KOutMsg (
+        "  If there are two parameters  a copy is made but the copy will be %scrypted.\n"
+        "  If the second parameter is a directory the new file might have a different\n"
+        "  extension. If it is not a directory, the extension will be as given in the\n"
+        "  the parameter.\n"
+        "\n", de);
+
+    KOutMsg (
+        "  Missing directories in the destination path will be created.\n"
+        "\n");
+
+    KOutMsg (
+        "  Already existing destination files will cause the program to end with\n"
+        "  an error and will be left unchanged unless the --%s option is used to\n"
+        "  force the files to be overwritten.\n"
+        "\n", OPTION_FORCE);
+
+    KOutMsg (
+        "Encryption key (file password):\n"
+        "  The encryption key or file password is handled by configuration. If not yet\n"
+        "  set, this program will fail.\n\n"
+        "  Please consult configuration page at\n"
+        "  https://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=toolkit_doc&f=std or\n"
+        "  https://github.com/ncbi/sra-tools/wiki/Toolkit-Configuration\n"        
+        );
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+
+
+
+/*
+ * determine the archive type for KFile f with pathname name
+ *
+ * This could be extended to handle tar files with a larger head size and
+ * and some less simple checks for a tar header block at the start of
+ * the file.
+ */
+ArcScheme ArchiveTypeCheck (const KFile * f)
+{
+    size_t num_read;
+    rc_t rc;
+    char head [128];
+
+    IsArchive = false;
+    rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to read head of decrypted file");
+        return arcError;
+    }
+
+    rc = KFileIsSRA (head, num_read);
+    if (rc == 0)
+    {
+
+/*         OUTMSG (("+++++ ARCHIVE\n")); */
+
+
+        /* a hack... */
+
+        IsArchive = true;
+        return arcSRAFile;
+    }
+/*     OUTMSG (("----- not an archive\n")); */
+    return arcNone;
+}
+
+
+/*
+ * Copy a file from a const KFile * to a KFile * with the paths for the two
+ * for logging purposes
+ *
+ * return rc_t = 0 for success
+ * return rc_t != 0 for failure
+ */
+rc_t CopyKFile (const KFile * src, KFile * dst, const char * source, const char * dest)
+{
+    rc_t rc;
+    uint8_t	buff	[256 * 1024];
+    size_t	num_read;
+    size_t      num_writ;
+    uint64_t	pos;
+
+    for (pos = 0; ; pos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+
+        rc = KFileReadAll (src, pos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", source, pos));
+            break;
+        }
+        
+        if (num_read == 0)
+            break;
+
+        rc = KFileWriteAll (dst, pos, buff, num_read, &num_writ);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to write to file $(F) at $(P)",
+                      "F=%s,P=%lu", dest, pos));
+            break;
+        }
+        
+        if (num_writ != num_read)
+        {
+            rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to write all to file $(F) at $(P)",
+                      "F=%s,P=%lu", dest, pos));
+            break;
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * determine the encryption type for KFile f with pathname name
+ */
+rc_t EncryptionTypeCheck (const KFile * f, const char * name, EncScheme * scheme)
+{
+    size_t num_read;
+    rc_t rc;
+    char head [128];
+
+    assert (f != NULL);
+    assert (name != NULL);
+
+    rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+    if (rc)
+    {
+        PLOGERR (klogErr, (klogErr, rc, "Unable to read head of "
+                           "'$(F)'", "F=%s", name));
+        *scheme = encError;
+        return rc;
+    }
+    
+    /* looks for files with NCBInenc or NCBIsenc signatures */
+    rc = KFileIsEnc (head, num_read);
+    if (rc == 0)
+    {
+            /* looks for files with just NCBIsenc signatures */
+        rc = KFileIsSraEnc (head, num_read);
+
+        *scheme = (rc == 0) ? encSraEncFile : encEncFile;
+    }
+    else
+    {
+        rc = KFileIsWGAEnc (head, num_read);
+        if (rc == 0)
+            *scheme = encWGAEncFile;
+        else
+            *scheme = encNone;
+    }
+    return 0;
+}
+
+
+/*
+ * Check a file path name for ending in the extension used by this program
+ *
+ * return true if it ends with the extension and false if it does not
+ */
+static
+bool IsTmpFile (const char * path)
+{
+    const char * pc;
+
+    pc = strrchr (path, '.');
+    if (pc == NULL)
+        return false;
+
+    if (strcmp (pc, TmpExt) == 0)
+        return true;
+
+    pc = string_chr (path, pc - path, '.');
+    if (pc == NULL)
+        return false;
+
+    return (strcmp (pc, TmpLockExt) == 0);
+}
+
+#if 0
+static
+bool IsCacheFile (const char * path)
+{
+    const char * pc;
+
+    pc = strrchr (path, '.');
+    if (pc == NULL)
+        return false;
+
+    if (strcmp (pc, CacheExt) == 0)
+        return true;
+
+    pc = string_chr (path, pc - path, '.');
+    if (pc == NULL)
+        return false;
+
+    return (strcmp (pc, CacheLockExt) == 0);
+}
+#endif
+
+static
+rc_t FileInPlace (KDirectory * cwd, const char * leaf, bool try_rename)
+{
+    rc_t rc;
+    bool is_tmp;
+
+    STSMSG (1, ("%scrypting file in place %s",De,leaf));
+
+    rc = 0;
+    is_tmp = IsTmpFile (leaf);
+    if (is_tmp)
+    {
+        STSMSG (1, ("%s is a vdb-decrypt/vdb-encrypt temporary file and will "
+                    "be ignored", leaf));
+        TmpFoundFlag = true;
+        if (ForceFlag)
+            ; /* LOG OVERWRITE */
+        else
+            ; /* LOG TMP */
+    }
+    if (!is_tmp || ForceFlag)
+    {
+        char temp [MY_MAX_PATH];
+
+
+        rc = KDirectoryResolvePath (cwd, false, temp, sizeof temp, ".%s%s",
+                                    leaf, TmpExt);
+
+        if (rc)
+            PLOGERR (klogErr, (klogErr, rc, "unable to resolve '.$(S)$(E)'",
+                               "S=%s,E=%s",leaf,TmpExt));
+        else
+        {
+            KPathType kpt;
+            uint32_t kcm;
+
+            kcm = kcmCreate|kcmParents;
+            kpt = KDirectoryPathType (cwd, "%s", temp);
+            if (kpt != kptNotFound)
+            {
+                /* log busy */
+                if (ForceFlag)
+                {
+                    kcm = kcmInit|kcmParents;
+                    /* log force */
+                    kpt = kptNotFound;
+                }
+            }
+
+            if (kpt == kptNotFound)
+            {
+                const KFile * infile;
+
+                rc = KDirectoryOpenFileRead (cwd, &infile, "%s", leaf);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc, "Unable to resolve '$(F)'",
+                                       "F=%s",leaf));
+                else
+                {
+                    uint64_t fz;
+                    size_t z;
+                    rc_t irc;
+                    uint64_t ignored;
+
+                    rc = KFileSize (infile, &fz);
+                    /* ignore rc for now? yes hack */
+                    z = string_size (leaf);
+
+                    /* vdb-decrypt and vdb-encrypt both ignore repository cache files. */
+                    irc = GetCacheTruncatedSize (infile, &ignored);
+                    if (irc == 0)
+                        STSMSG (1, ("skipping cache download file %s", leaf));
+                    else if ((fz == 0) &&
+                             (string_cmp (leaf + (z - (sizeof (".lock")-1)), sizeof (".lock"),
+                                          ".lock", sizeof (".lock") , sizeof (".lock")) == 0))
+                        STSMSG (1, ("skipping cache lock download file %s", leaf));
+                    else
+                    {
+                        EncScheme scheme;
+
+                        rc = EncryptionTypeCheck (infile, leaf, &scheme);
+                        if (rc == 0)
+                        {
+                            ArcScheme ascheme;
+                            bool changed;
+                            bool do_this_file;
+                            char new_name [MY_MAX_PATH + sizeof EncExt];
+
+                            do_this_file = DoThisFile (infile, scheme, &ascheme);
+                            strcpy (new_name, leaf);
+                            if (try_rename && do_this_file)
+                                changed = NameFixUp (new_name);
+                            else
+                                changed = false;
+/*                         KOutMsg ("### %d \n", changed); */
+
+                            if (!do_this_file)
+                            {
+                                if (changed)
+                                {
+                                    STSMSG (1, ("renaming %s to %s", leaf, new_name));
+                                    rc = KDirectoryRename (cwd, false, leaf, new_name);
+                                }
+                                else
+                                    STSMSG (1, ("skipping %s",leaf));
+                            }
+                            else
+                            {
+                                KFile * outfile;
+
+                                rc = KDirectoryCreateExclusiveAccessFile (cwd, &outfile,
+                                                                          false, 0600, kcm,
+                                                                          "%s", temp);
+                                if (rc == 0)
+                                {
+                                    const KFile * Infile;
+                                    KFile * Outfile;
+
+                                    rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+
+                                    if (rc == 0)
+                                    {
+                                        STSMSG (1, ("copying %s to %s", leaf, temp));
+
+                                        rc = CopyKFile (Infile, Outfile, leaf, temp);
+
+                                        if (rc == 0)
+                                        {
+                                            uint32_t access;
+                                            KTime_t date;
+
+                                            rc = KDirectoryAccess (cwd, &access, "%s", leaf);
+                                            if (rc == 0)
+                                                rc = KDirectoryDate (cwd, &date, "%s", leaf);
+
+                                            KFileRelease (infile);
+                                            KFileRelease (outfile);
+                                            KFileRelease (Infile);
+                                            KFileRelease (Outfile);
+
+                                            if (rc == 0)
+                                            {
+                                                STSMSG (1, ("renaming %s to %s", temp, new_name));
+
+                                                rc = KDirectoryRename (cwd, true, temp, new_name);
+                                                if (rc)
+                                                    LOGERR (klogErr, rc, "error renaming");
+                                                else
+                                                {
+                                                    if (changed)
+                                                        KDirectoryRemove (cwd, false, "%s", leaf);
+
+                                                    /*rc =*/
+                                                    KDirectorySetAccess (cwd, false, access,
+                                                                         0777, "%s", new_name);
+                                                    KDirectorySetDate (cwd, false, date, "%s", new_name);
+                                                    /* gonna ignore an error here I think */
+                                                    return rc;
+                                                }
+                                            }
+                                        }
+                                    }
+                                    KFileRelease (outfile);
+                                }
+                            }
+                        }
+                    }
+                    KFileRelease (infile);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t FileToFile (const KDirectory * sd, const char * source, 
+                 KDirectory *dd, const char * dest_, bool try_rename,
+                 char * base)
+{
+    const KFile * infile;
+    rc_t rc;
+    uint32_t access;
+    KTime_t date;
+    bool is_tmp;
+    char dest [MY_MAX_PATH + sizeof EncExt];
+
+    strcpy (dest, dest_);
+    if (try_rename)
+        NameFixUp (dest);
+
+    if ((sd == dd) && (strcmp (source, dest) == 0))
+        return FileInPlace (dd, dest, try_rename);
+
+    if (base == NULL)
+        STSMSG (1, ("%scrypting file %s to %s", De, source, dest));
+    else
+        STSMSG (1, ("%scrypting file %s to %s/%s", De, source, base, dest));
+
+    /*
+     * A Hack to make stdin/stout work within KFS
+     */
+    if (UseStdin)
+    {
+        const KFile * iinfile;
+        rc = KFileMakeStdIn (&iinfile);
+        if (rc == 0)
+        {
+            rc = KBufReadFileMakeRead (&infile, iinfile, 64 * 1024);
+            KFileRelease (iinfile);
+            if (rc == 0)
+            {
+                access = 0640;
+                date = 0;
+                goto stdin_shortcut;
+            }
+            LOGERR (klogErr, rc, "error wrapping stdin");
+            return rc;
+        }
+    }
+    rc = 0;
+    is_tmp = IsTmpFile (source);
+
+    if (is_tmp)
+    {
+        TmpFoundFlag = true;
+        if (ForceFlag)
+            ; /* LOG OVERWRITE */
+        else
+                ; /* LOG TMP */
+    }
+    if (!is_tmp || ForceFlag)
+    {
+        rc = KDirectoryAccess (sd, &access, "%s", source);
+        if (rc)
+            LOGERR (klogErr, rc, "Error check permission of source");
+
+        else
+        {
+            rc = KDirectoryDate (sd, &date, "%s", source);
+            if (rc)
+                LOGERR (klogErr, rc, "Error check date of source");
+
+            else
+            {
+                rc = KDirectoryOpenFileRead (sd, &infile, "%s", source);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc,
+                                       "Error opening source file '$(S)'",
+                                       "S=%s", source));
+                else
+                {
+                    EncScheme scheme;
+
+                stdin_shortcut:
+                    rc = EncryptionTypeCheck (infile, source, &scheme);
+                    if (rc == 0)
+                    {
+                        KFile * outfile;
+                        uint32_t kcm;
+
+                        /*
+                         * Hack to support stdout before VFS is complete enough to use here
+                         */
+                        if (UseStdout)
+                        {
+                            rc = KFileMakeStdOut (&outfile);
+                            if (rc)
+                                LOGERR (klogErr, rc, "error wrapping stdout");
+                        }
+                        else
+                        {
+                            kcm = ForceFlag ? kcmInit|kcmParents : kcmCreate|kcmParents;
+
+                            rc = KDirectoryCreateFile (dd, &outfile, false, 0600, kcm, "%s", dest);
+                            if (rc)
+                                PLOGERR (klogErr,(klogErr, rc, "error opening output '$(O)'",
+                                                  "O=%s", dest));
+                        }
+                        if (rc == 0)
+                        {
+                            const KFile * Infile;
+                            KFile * Outfile;
+
+                            rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+                            if (rc == 0)
+                            {
+                                rc = CopyKFile (Infile, Outfile, source, dest);
+                                if (rc == 0)
+                                {
+                                    if (UseStdin || UseStdout)
+                                        ;
+                                    else
+                                    {
+                                        rc = KDirectorySetAccess (dd, false, access, 0777,
+                                                                  "%s", dest);
+
+                                        if (rc == 0 && date != 0)
+                                            rc = KDirectorySetDate (dd, false, date, "%s", dest);
+                                    }
+                                }
+                                KFileRelease (Infile);
+                                KFileRelease (Outfile);
+                            }
+                            KFileRelease (outfile);
+                        }
+                    }
+                    KFileRelease (infile);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t DoDir (const KDirectory * sd, KDirectory * dd)
+{
+    KNamelist * names;
+    rc_t rc;
+
+    rc = KDirectoryList (sd, &names, NULL, NULL, ".");
+    if (rc)
+        ;
+    else
+    {
+        uint32_t count;
+
+        rc = KNamelistCount (names, &count);
+        if (rc)
+            ;
+        else
+        {
+            uint32_t idx;
+
+            for (idx = 0; idx < count; ++idx)
+            {
+                const char * name;
+
+                rc = KNamelistGet (names, idx, &name);
+                if (rc)
+                    ;
+                else
+                {
+                    const KDirectory * nsd;
+                    KDirectory * ndd;
+                    KPathType kpt;
+
+                    kpt = KDirectoryPathType (sd, "%s", name);
+
+                    switch (kpt)
+                    {
+                    default:
+                        break;
+
+                    case kptFile:
+                        if (sd == dd)
+                            rc = FileInPlace (dd, name, true);
+                        else
+                            rc = FileToFile (sd, name, dd, name, true, NULL);
+                        break;
+
+                    case kptDir:
+                        if (sd == dd)
+                        {
+                            rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+                            if (rc)
+                                ;
+                            else
+                            {
+                                /* RECURSION */
+                                STSMSG (1, ("%scrypting directory %s", De, name));
+                                rc = DoDir (ndd, ndd);
+                                STSMSG (1, ("done with directory %s", name));
+                                KDirectoryRelease (ndd);
+                            }
+                        }
+                        else
+                        {
+                            rc = KDirectoryOpenDirRead (sd, &nsd, false, "%s", name);
+                            if (rc)
+                                ;
+                            else
+                            {
+                                rc = KDirectoryCreateDir (dd, 0600, kcmOpen, "%s", name);
+                                if (rc)
+                                    ;
+                                else
+                                {                                    
+                                    rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+                                    if (rc)
+                                        ;
+                                    else
+                                    {
+                                        /* RECURSION */
+                                        STSMSG (1, ("%scrypting directory %s", De, name));
+                                        rc = DoDir (nsd, ndd);
+                                        STSMSG (1, ("done with directory %s", name));
+
+                                        KDirectoryRelease (ndd);
+                                    }
+                                }
+                                KDirectoryRelease (nsd);
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        KNamelistRelease (names);
+    }
+    return rc;
+}
+
+
+static
+rc_t Start (KDirectory * cwd, const char * src, const char * dst)
+{
+    KPathType dtype;
+    KPathType stype;
+    char dpath [MY_MAX_PATH];
+    char spath [MY_MAX_PATH];
+    rc_t rc;
+    bool using_stdin, using_stdout, try_rename;
+
+    /* limited anti oops checks */
+    try_rename = (dst == NULL);
+    if (!try_rename)
+    {
+        /* try to prevent file to file clash */
+        if (strcmp (src,dst) == 0)
+            dst = NULL;
+
+        /* try to prevent file to dir clash */
+        else
+        {
+            size_t s,d;
+
+            s = string_size (src);
+            d = string_size (dst);
+
+            if (s > d)
+            {
+                if (string_cmp (src, s, dst, d, d) == 0)
+                {
+                    if ((strchr (src+d+1, '/') == NULL) &&
+                        ((src[d] == '/') ||
+                         (src[d-1] == '/')))
+                    {
+                        try_rename = true;
+                        dst = NULL;
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * This is a quick fix "hack"
+     * A fully built out VFS should replace the KFS in use and eliminate this
+     */
+    using_stdin = (strcmp (src, "/dev/stdin") == 0);
+
+    if (using_stdin)
+    {
+        if (dst == NULL)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcNull);
+            LOGERR (klogErr, rc, "Unable to handle stdin in place");
+            return rc;
+        }
+        stype = kptFile;
+        strcpy (spath, src);
+        UseStdin = true;
+        STSMSG (1, ("reading console / stdin as input"));
+        goto stdin_shortcut;
+    }
+
+    rc = KDirectoryResolvePath (cwd, false, spath, sizeof spath, "%s", src);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "can't resolve source");
+        return rc;
+    }
+
+    stype = KDirectoryPathType (cwd, "%s", spath) & ~ kptAlias;
+
+    switch (stype)
+    {
+    case kptNotFound:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcNotFound);
+        break;
+
+    default:
+    case kptBadPath:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+        break;
+
+    case kptCharDev:
+    case kptBlockDev:
+    case kptFIFO:
+    case kptZombieFile:
+    case kptDataset:
+    case kptDatatype:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+        break;
+
+    case kptFile:
+    case kptDir:
+        break;
+    }
+    if (rc)
+    {
+        PLOGERR (klogErr, (klogErr, rc, "can not use source '$(S)'", "S=%s", src));
+        return rc;
+    }
+
+    /*
+     * In Place Operation
+     */
+    if (dst == NULL)
+    {
+
+        /*
+         * Input is a file
+         */
+        if (stype == kptFile)
+        {
+            KDirectory * ndir;
+            char * pc;
+
+            pc = strrchr (spath, '/');
+            if (pc == NULL)
+            {
+                pc = spath;
+                ndir = cwd;
+                rc = KDirectoryAddRef (cwd);
+            }
+            else if (pc == spath)
+            {
+                ++pc;
+                ndir = cwd;
+                rc = KDirectoryAddRef (cwd);
+            }
+            else
+            {
+                *pc++ = '\0';
+                rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, "%s", spath);
+            }
+
+            if (rc == 0)
+            {
+                rc = FileInPlace (ndir, pc, try_rename);
+                KDirectoryRelease (ndir);
+            }
+        }
+        /*
+         * Input is a directory
+         */
+        else
+        {
+            KDirectory * ndir;
+
+            rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, "%s", spath);
+            if (rc)
+                ;
+            else
+            {
+                STSMSG (1, ("%scrypting directory %s", De, spath));
+                rc = DoDir (ndir, ndir);
+                STSMSG (1, ("done with directory %s", spath));
+                KDirectoryRelease (ndir);
+            }
+        }
+    }
+
+    /*
+     * 'Copy' Operation
+     */
+    else
+    {
+    stdin_shortcut:
+        using_stdout = (strcmp (dst, "/dev/stdout") == 0);
+        if (using_stdout == true)
+        {
+            dtype = kptFile;
+            strcpy (dpath, dst);
+            UseStdout = true;
+            STSMSG (1, ("writing console / stdout as output"));
+            goto do_file;
+        }
+        rc = KDirectoryResolvePath (cwd, false, dpath, sizeof dpath, "%s", dst);
+        if (rc)
+        {
+            LOGERR (klogErr, rc, "can't resolve destination");
+            return rc;
+        }
+        dtype = KDirectoryPathType (cwd, "%s", dpath) & ~ kptAlias;
+        switch (dtype)
+        {
+        default:
+        case kptBadPath:
+            rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+            PLOGERR (klogErr, (klogErr, rc, "can not use destination  '$(S)'", "S=%s", dst));
+            break;
+
+        case kptCharDev:
+        case kptBlockDev:
+        case kptFIFO:
+        case kptZombieFile:
+        case kptDataset:
+        case kptDatatype:
+            rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+            PLOGERR (klogErr, (klogErr, rc, "can not use destination parameter '$(S)'", "S=%s", dst));
+            break;
+
+        case kptNotFound:
+        {
+            size_t z;
+
+            z = strlen (dst) - 1;
+            if ((dst[z] == '/') || (stype == kptDir))
+                goto do_dir;
+            else
+                goto do_file;
+        }
+
+        case kptFile:
+            if (!ForceFlag)
+            {
+                rc = RC (rcExe, rcArgv, rcParsing, rcFile, rcExists);
+                PLOGERR (klogErr, (klogErr, rc, "can not over-write '$(F)' without --force",
+                                   "F=%s", dpath));
+                break;
+            }
+        do_file:
+            if (stype == kptFile)
+            {
+                rc = FileToFile (cwd, spath, cwd, dpath, try_rename, NULL);
+            }
+            else
+            {
+                rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+                LOGERR (klogErr, rc, "Can't do directory to file");
+            }
+            break;
+
+        do_dir:
+        case kptDir:
+            /*
+             * Input is a directory
+             */
+            if (stype == kptDir)
+            {
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+                const KDirectory * sdir;
+                KDirectory * ddir;
+
+                rc = KDirectoryOpenDirRead (cwd, &sdir, false, "%s", spath);
+                if (rc)
+                    ;
+                else
+                {
+                    if (dtype == kptNotFound)
+                    {
+                        STSMSG (1, ("creating output directory %s", dpath));
+                        rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+                                                  "%s", dpath);
+                    }
+                    if (rc == 0)
+                    {
+                        rc = KDirectoryOpenDirUpdate (cwd, &ddir, false, "%s", dpath);
+                        if (rc)
+                            ;
+                        else
+                        {
+                            STSMSG (1, ("%scrypting directory %s to %s", De, spath, dpath));
+                            rc = DoDir (sdir, ddir);
+                            STSMSG (1, ("done with directory %s to %s", spath, dpath));
+                            KDirectoryRelease (ddir);
+                        }
+                    }
+                    KDirectoryRelease (sdir);
+                }
+#else
+                rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+                LOGERR (klogErr, rc, "Can't do directory to directory");
+#endif
+            }
+            /*
+             * Input is a file
+             */
+            else
+            {
+                KDirectory * ndir;
+                const char * pc;
+
+                if (dtype == kptNotFound)
+                {
+                    STSMSG (1, ("creating output directory %s", dpath));
+                    rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+                                              "%s", dpath);
+                }
+                if (rc == 0)
+                {
+
+                    STSMSG (1, ("opening output directory %s", dpath));
+                    rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, "%s", dpath);
+                    if (rc)
+                        ;
+                    else
+                    {
+                        pc = strrchr (spath, '/');
+                        if (pc == NULL)
+                            pc = spath;
+                        else
+                            ++pc;
+
+                        rc = FileToFile (cwd, spath, ndir, pc, true, dpath);
+
+                        KDirectoryRelease (ndir);
+                    }
+                }
+            }
+            break;
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t StartFileSystem (const char * src, const char * dst)
+{
+    VFSManager * vmanager;
+    rc_t rc;
+ 
+    rc = VFSManagerMake (&vmanager);
+    if (rc)
+        LOGERR (klogErr, rc, "Failed to open file system");
+
+    else
+    {
+        rc = VFSManagerGetKryptoPassword (vmanager, Password, sizeof Password,
+                                          &PasswordSize);
+        if (rc != 0)
+            LOGERR (klogErr, rc, "unable to obtain a password");
+
+        else
+        {
+            rc = KKeyInitRead (&Key, kkeyAES128, Password, PasswordSize);
+            if (rc)
+                LOGERR (klogErr, rc, "Unable to make encryption/decryption key");
+
+            else
+            {
+                KDirectory * cwd;
+
+                rc = VFSManagerGetCWD (vmanager, &cwd);
+                if (rc)
+                    LOGERR (klogInt, rc, "unable to access current directory");
+
+                else
+                {
+                    rc = Start (cwd, src, dst);
+
+                    KDirectoryRelease (cwd);
+                }
+            }
+        }
+        VFSManagerRelease (vmanager);
+    }
+    return rc;
+}
+
+
+rc_t CommonMain (Args * args)
+{
+    rc_t rc;
+    uint32_t ocount; /* we take the address of ocount but not pcount. */
+    uint32_t pcount; /* does that help the compiler optimize? */
+
+    rc = ArgsParamCount (args, &ocount);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to count parameters");
+
+    else if ((pcount = ocount) == 0)
+        MiniUsage (args);
+
+    else if (pcount > 2)
+    {
+        LOGERR (klogErr, rc, "too many parameters");
+        MiniUsage(args);
+    }
+            
+    else
+    {
+        const char * dst; /* we only take the address of one of these */
+        const char * src;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &ocount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+
+        else
+        {
+            ForceFlag = (ocount > 0);
+
+            /* -----
+             * letting comp put src in register
+             * only if it wants
+             */
+            rc = ArgsParamValue (args, 0, (const void **)&dst);
+            if (rc)
+                LOGERR (klogInt, rc, "Failure to fetch "
+                        "source parameter");
+
+            else
+            {
+                src = dst;
+
+                if (pcount == 1)
+                    dst = NULL;
+
+                else
+                {
+                    rc = ArgsParamValue (args, 1, (const void **)&dst);
+                    if (rc)
+                        LOGERR (klogInt, rc, "Failure to fetch "
+                                "destination parameter");
+                }
+
+                if (rc == 0)
+                    rc = StartFileSystem (src, dst);
+            }
+        }
+    }
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/vdb-decrypt/shared.h b/tools/vdb-decrypt/shared.h
new file mode 100644
index 0000000..37998bd
--- /dev/null
+++ b/tools/vdb-decrypt/shared.h
@@ -0,0 +1,93 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _tools_vdb_decrypt_shared_h_
+#define _tools_vdb_decrypt_shared_h_
+
+#define DIRECTORY_TO_DIRECTORY_SUPPORTED 0
+
+#include <klib/defs.h>
+#include <krypto/key.h>
+#include <kapp/args.h>
+
+#define OPTION_FORCE   "force"
+#define OPTION_DEC_SRA "decrypt-sra-files"
+#define ALIAS_FORCE    "f"
+#define ALIAS_DEC_SRA  NULL
+
+extern const bool Decrypting;
+
+extern char Password [];
+extern size_t PasswordSize;
+
+extern const char De [];
+extern const char de [];
+extern const char SraOption[];
+
+extern const char EncExt[];
+bool NameFixUp (char * name);
+extern const char * ForceUsage[];
+
+/* for encfile encrypt/decrypt */
+extern KKey Key;
+
+
+typedef enum ArcScheme
+{
+    arcError,
+    arcNone,
+    arcSRAFile
+} ArcScheme;
+
+extern bool IsArchive; /* this approach makes threading fail */
+
+struct KFile;
+
+ArcScheme ArchiveTypeCheck (const struct KFile * f);
+
+typedef enum EncScheme
+{
+    encError,
+    encNone,
+    encEncFile,
+    encSraEncFile,
+    encWGAEncFile
+} EncScheme;
+
+void CryptOptionLines ();
+
+bool DoThisFile (const struct KFile * infile, EncScheme enc, ArcScheme * arc);
+
+struct Args;
+rc_t CommonMain (struct Args * args);
+
+rc_t CryptFile (const struct KFile * in, const struct KFile ** new_in,
+                struct KFile * out, struct KFile ** new_out, EncScheme scheme);
+
+
+#endif
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-decrypt.c b/tools/vdb-decrypt/vdb-decrypt.c
new file mode 100644
index 0000000..b01f136
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-decrypt.c
@@ -0,0 +1,269 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <string.h>
+#include <assert.h>
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-decrypt";
+const char * UsageSra []       = { "decrypt sra archives - [NOT RECOMMENDED]",
+                                   NULL };
+const char De[]             = "De";
+const char de[]             = "de";
+const char OptionSra[] = OPTION_DEC_SRA;
+
+
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_DEC_SRA, ALIAS_DEC_SRA, NULL, UsageSra,      0, false, false },
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, ForceUsage,   0, false, false }
+};
+
+
+static 
+bool DecryptSraFlag = false;
+
+
+const bool Decrypting = true;
+
+void CryptOptionLines ()
+{
+    HelpOptionLine (ALIAS_DEC_SRA, OPTION_DEC_SRA, NULL, UsageSra);
+}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+    const KFile * Infile;
+    ArcScheme arc;
+    rc_t rc;
+
+    *parc = arcNone;
+
+    switch (enc)
+    {
+    default:
+        STSMSG (1, ("not encrypted"));
+        return false;
+
+    case encEncFile:
+        /*
+         * this will apply to KEncFiles versions 1 and 2, maybe not 3
+         * but will hopefully become obsolete eventually.
+         */
+        rc = KEncFileMakeRead (&Infile, infile, &Key); /* replace with VFSManagerOpenFileReadDirectoryRelativeInt */
+        if (rc)
+            return false;
+        break;
+
+    case encSraEncFile:
+        /* these are NCBIsenc instead of NCBInenc */
+        goto sra_enc_file;
+
+    case encWGAEncFile:
+        rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+        if (rc)
+            return false;
+        break;
+    }
+    arc = ArchiveTypeCheck (Infile);
+    KFileRelease (Infile);
+    switch (arc)
+    {
+    default:
+        return false;
+    case arcNone:
+        return true;
+    case arcSRAFile:
+        break;
+    }
+sra_enc_file:
+    *parc = arcSRAFile;
+    STSMSG (1, ("encrypted sra archive\ndecryption%s requested",
+                DecryptSraFlag ? "" : " not"));
+    return DecryptSraFlag;
+}
+
+bool NameFixUp (char * name)
+{
+    char * pc = strrchr (name, '.');
+    if (pc != NULL)
+    {
+        if (strcmp (pc, EncExt) == 0)
+        {
+            pc[0] = '\0';
+            return true;
+        }
+    }
+    return false;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+                KFile * out, KFile ** new_out, EncScheme scheme)
+{
+    const KFile * dec;
+    rc_t rc;
+
+    assert (in);
+    assert (out);
+    assert (new_in);
+    assert (new_out);
+
+
+    rc = KFileAddRef (out);
+    if (rc)
+        return rc;
+
+    switch (scheme)
+    {
+    default:
+    case encError:
+        rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+        break;
+        
+    case encNone:
+    copy:
+        rc = KFileAddRef (in);
+        if (rc)
+            goto fail;
+        *new_in = in;
+        *new_out = out;
+        STSMSG (1, ("not encrypted just copying"));
+        return 0;
+
+    case encEncFile:
+        rc = KEncFileMakeRead (&dec, in, &Key);
+    made_enc:
+        if (rc)
+            goto fail;
+
+        switch (ArchiveTypeCheck (dec))
+        {
+        default:
+        case arcError:
+            rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+            break;
+
+        case arcSRAFile:
+            if (!DecryptSraFlag)
+            {
+                rc = KFileRelease (dec);
+                if (rc)
+                {
+                    KFileRelease (dec);
+                    KFileRelease (in);
+                    goto fail;
+                }
+                goto copy;
+            }
+            /* fall through */
+        case arcNone:
+            *new_out = out;
+            *new_in = dec;
+            return 0;
+        }
+        break;
+
+    case encWGAEncFile:
+        rc = KFileMakeWGAEncRead (&dec, in, Password, PasswordSize);
+        goto made_enc;
+        break;
+    }
+    fail:
+        KFileRelease (out);
+        *new_in = *new_out = NULL;
+        return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    KStsLevelSet (1);
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+                            sizeof (Options) / sizeof (Options[0]));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+    else
+    {
+        uint32_t ocount;
+
+        rc = ArgsOptionCount (args, OPTION_DEC_SRA, &ocount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine decrypt "
+                    "sra option");
+        else
+        {
+            DecryptSraFlag = (ocount > 0);
+
+            rc = CommonMain (args);
+        }
+        ArgsWhack (args);
+    }
+
+    if (rc)
+        STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    else
+        STSMSG (1, ("exiting: success"));
+    return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-encrypt.c b/tools/vdb-decrypt/vdb-encrypt.c
new file mode 100644
index 0000000..17c842e
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-encrypt.c
@@ -0,0 +1,215 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <assert.h>
+#include <string.h>
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-encrypt";
+const char De[]             = "En";
+const char de[]             = "en";
+
+
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, ForceUsage,   0, false, false }
+};
+
+/* static bool DecryptSraFlag = false; */
+
+const bool Decrypting = false;
+
+void CryptOptionLines () {}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+    const KFile * Infile;
+    ArcScheme arc;
+    rc_t rc;
+    bool do_enc;
+
+    *parc = arcNone;
+
+    switch (enc)
+    {
+    default:
+        STSMSG (1, ("error checking encrypted"));
+        return false;
+
+    case encNone:
+        do_enc = true;
+        rc = KFileAddRef (infile);
+        if (rc)
+            return false;
+        Infile = infile;
+        break;
+
+    case encEncFile:
+        do_enc = false;
+        rc = KEncFileMakeRead (&Infile, infile, &Key);
+        if (rc)
+            return false;
+        break;
+
+    case encWGAEncFile:
+        do_enc = false;
+        rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+        if (rc)
+            return false;
+        break;
+    }
+    arc = ArchiveTypeCheck (Infile);
+    KFileRelease (Infile);
+    if (arc == arcSRAFile)
+    {
+        STSMSG (1, ("%sencrypted sra archive", do_enc ? "un" : ""));
+        *parc = arcSRAFile;
+    }
+    return do_enc;
+}
+
+bool NameFixUp (char * name)
+{
+    char * pc = strrchr (name, '.');
+
+    if (((pc != NULL) &&
+         (strcmp (pc, EncExt) == 0)) ||
+        IsArchive )
+        return false;
+
+    strcat (name, EncExt);
+
+    return true;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+                KFile * out, KFile ** new_out, EncScheme scheme)
+{
+    rc_t rc;
+
+    assert (in);
+    assert (out);
+    assert (new_in);
+    assert (new_out);
+
+    *new_in = *new_out = NULL;
+
+    rc = KFileAddRef (in);
+    if (rc)
+        return rc;
+
+    switch (scheme)
+    {
+    default:
+    case encError:
+        KFileRelease (in);
+        return RC (rcExe, rcEncryption, rcParsing, rcFile, rcInvalid);
+
+    case encNone:
+        rc = KEncFileMakeWrite (new_out, out, &Key);
+        if (rc)
+        {
+            KFileRelease (in);
+            return rc;
+        }
+        break;
+
+    case encEncFile:
+    case encWGAEncFile:
+        rc = KFileAddRef (out);
+        if (rc)
+        {
+            KFileRelease (in);
+            return rc;
+        }
+        *new_out = out;
+        STSMSG (1, ("already encrypted just copying"));
+        break;
+    }
+    *new_in = in;
+    return 0;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    KStsLevelSet (1);
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+                            sizeof (Options) / sizeof (Options[0]));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+    else
+    {
+        rc = CommonMain (args);
+
+        ArgsWhack (args);
+    }
+
+    if (rc)
+        STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    else
+        STSMSG (1, ("exiting: success"));
+
+    return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-diff/Makefile b/tools/vdb-diff/Makefile
new file mode 100644
index 0000000..c3e5b18
--- /dev/null
+++ b/tools/vdb-diff/Makefile
@@ -0,0 +1,79 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-diff
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-diff
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+	
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-diff
+#
+
+VDB_DIFF_SRC = \
+	namelist_tools \
+	coldefs \
+	vdb-diff
+
+VDB_DIFF_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_DIFF_SRC))
+
+VDB_DIFF_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/vdb-diff: $(VDB_DIFF_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_DIFF_LIB)
diff --git a/tools/vdb-diff/coldefs.c b/tools/vdb-diff/coldefs.c
new file mode 100644
index 0000000..d067d8f
--- /dev/null
+++ b/tools/vdb-diff/coldefs.c
@@ -0,0 +1,211 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "coldefs.h"
+#include <klib/text.h>
+#include <klib/out.h>
+
+#include <vdb/table.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*
+ * helper-function for: col_defs_destroy
+ * - free's everything a node owns
+ * - free's the node
+*/
+static void CC col_defs_destroy_pair( void * node, void * data )
+{
+    col_pair * pair = node;
+    if ( pair != NULL )
+    {
+	
+        if ( pair -> name != NULL )
+		{
+			free( pair -> name );
+			pair -> name = NULL;
+		}
+	
+        free( pair );
+    }
+}
+
+
+/*
+ * initializes a column-definitions-list
+*/
+rc_t col_defs_init( col_defs ** defs )
+{
+	rc_t rc = 0;
+	
+    if ( defs == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcSelf, rcNull );
+	else
+	{
+		col_defs * tmp = calloc( 1, sizeof( * tmp ) );
+		if ( tmp == NULL )
+			rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+		else
+		{
+			VectorInit( &( tmp ->cols ), 0, 5 );
+			*defs = tmp;
+		}
+	}
+    return rc;
+}
+
+
+/*
+ * destroys the column-definitions-list
+*/
+rc_t col_defs_destroy( col_defs * defs )
+{
+	rc_t rc = 0;
+    if ( defs == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcDestroying, rcSelf, rcNull );
+	else
+	{
+		VectorWhack( &( defs -> cols ), col_defs_destroy_pair, NULL );
+		free( defs );
+	}
+    return rc;
+}
+
+
+/*
+ * helper-function for: col_defs_parse_string / col_defs_extract_from_table
+ * - creates a column-definition by the column-name
+ * - adds the definition to the column-definition-vector
+*/
+static rc_t col_defs_append_col_pair( col_defs * defs, const char * name )
+{
+    rc_t rc = 0;
+	
+	if ( name == NULL )
+		rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+	else if ( name[ 0 ] == 0 )
+		rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcEmpty );
+	else
+	{
+		col_pair * new_pair = calloc( 1, sizeof( * new_pair ) );
+		if ( new_pair == NULL )
+			rc = RC( rcVDB, rcNoTarg, rcParsing, rcMemory, rcExhausted );
+		else
+		{
+			new_pair -> name = string_dup_measure ( name, NULL );
+			rc = VectorAppend( &( defs -> cols ), NULL, new_pair );
+			if ( rc != 0 )
+				col_defs_destroy_pair( new_pair, NULL );
+		}
+	}
+    return rc;
+}
+
+
+/*
+*/
+rc_t col_defs_fill( col_defs * defs, const KNamelist * list )
+{
+    rc_t rc = 0;
+
+    if ( defs == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    else if ( list == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+	else
+	{
+		uint32_t count;
+		rc = KNamelistCount( list, &count );
+		if ( rc != 0 )
+			KOutMsg( "col_defs_extract_from_table:KNamelistCount() failed %R\n", rc );
+		else
+		{
+			uint32_t idx;
+			for ( idx = 0; idx < count && rc == 0; ++idx )
+			{
+				const char * name;
+				rc = KNamelistGet( list, idx, &name );
+				if ( rc != 0 )
+					KOutMsg( "col_defs_extract_from_table:KNamelistGet() failed %R\n", rc );
+				else
+					rc = col_defs_append_col_pair( defs, name );
+			}
+		}
+	}
+    return rc;
+}
+
+
+/*
+ * how many columns do we have in here?
+*/
+rc_t col_defs_count( const col_defs * defs, uint32_t * count )
+{
+	rc_t rc = 0;
+    if ( defs == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    else if ( count == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+	else
+	{
+		*count = VectorLength( &( defs -> cols ) );
+	}
+	return rc;
+}
+
+
+/*
+ * add the pairs in defs to the given cursor
+*/
+rc_t col_defs_add_to_cursor( col_defs * defs, const VCursor * cur, int idx )
+{
+    rc_t rc = 0;
+
+    if ( defs == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
+    else if ( cur == NULL )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcNull );
+    else if ( idx < 0 || idx > 1 )
+        rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+	else
+	{
+		uint32_t i;
+		uint32_t count = VectorLength( &( defs -> cols ) );
+		for ( i = 0; i < count && rc == 0; ++i )
+		{
+			col_pair * pair = VectorGet( &( defs -> cols ), i );
+			if ( pair != NULL )
+				rc = VCursorAddColumn( cur, &( pair -> pair[ idx ].idx ), "%s", pair -> name );
+		}
+	}
+	return rc;
+}
diff --git a/tools/vdb-diff/coldefs.h b/tools/vdb-diff/coldefs.h
new file mode 100644
index 0000000..e964568
--- /dev/null
+++ b/tools/vdb-diff/coldefs.h
@@ -0,0 +1,105 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_coldefs_
+#define _h_vdb_coldefs_
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/namelist.h>
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/********************************************************************
+col-def is the definition of a single column: index/type
+********************************************************************/
+typedef struct col_def
+{
+    uint32_t idx;       	/* index of this column in curosr */
+} col_def;
+
+
+/********************************************************************
+col-pair is the definition of pair of columns with same name
+********************************************************************/
+typedef struct col_pair
+{
+    char * name;
+	col_def	pair[ 2 ];		/* a pair of sub-col-defs */
+} col_pair;
+
+
+/********************************************************************
+the col-defs are a vector of single column-pairs
+********************************************************************/
+typedef struct col_defs
+{
+    Vector cols;
+} col_defs;
+
+
+/*
+ * initializes a column-definitions-list
+*/
+rc_t col_defs_init( col_defs ** defs );
+
+
+/*
+ * destroys the column-definitions-list
+*/
+rc_t col_defs_destroy( col_defs * defs );
+
+
+/*
+ * setup the list with pairs made from the given list
+*/
+rc_t col_defs_fill( col_defs * defs, const KNamelist * list );
+
+
+/*
+ * how many columns do we have in here?
+*/
+rc_t col_defs_count( const col_defs * defs, uint32_t * count );
+
+
+/*
+ * add the pairs in defs to the given cursor
+*/
+rc_t col_defs_add_to_cursor( col_defs * defs, const VCursor * cur, int idx );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-diff/namelist_tools.c b/tools/vdb-diff/namelist_tools.c
new file mode 100644
index 0000000..1871512
--- /dev/null
+++ b/tools/vdb-diff/namelist_tools.c
@@ -0,0 +1,299 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "namelist_tools.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src )
+{
+    VNamelist *v_names;
+    rc_t rc = VNamelistMake ( &v_names, 5 );
+    if ( rc == 0 )
+    {
+        char * s = string_dup_measure ( src, NULL );
+        if ( s )
+        {
+            uint32_t str_begin = 0;
+            uint32_t str_end = 0;
+            char c;
+            do
+            {
+                c = s[ str_end ];
+                if ( c == ',' || c == 0 )
+                {
+                    if ( str_begin < str_end )
+                    {
+                        char c_temp = c;
+                        s[ str_end ] = 0;
+                        rc = VNamelistAppend ( v_names, &(s[str_begin]) );
+                        s[ str_end ] = c_temp;
+                    }
+                    str_begin = str_end + 1;
+                }
+                str_end++;
+            } while ( c != 0 && rc == 0 );
+            free( s );
+        }
+		if ( rc == 0 )
+			rc = VNamelistToConstNamelist ( v_names, list );
+        VNamelistRelease( v_names );
+    }
+    return rc;
+}
+
+
+int nlt_strcmp( const char* s1, const char* s2 )
+{
+    size_t n1 = string_size ( s1 );
+    size_t n2 = string_size ( s2 );
+    return string_cmp
+        ( s1, n1, s2, n2, ( n1 < n2 ) ? ( uint32_t ) n2 : ( uint32_t ) n1 );
+}
+
+
+bool nlt_is_name_in_namelist( const KNamelist *list, const char *name_to_find )
+{
+    uint32_t count, idx;
+    bool res = false;
+    if ( list == NULL || name_to_find == NULL )
+        return res;
+    if ( KNamelistCount( list, &count ) == 0 )
+    {
+        for ( idx = 0; idx < count && res == false; ++idx )
+        {
+            const char *item_name;
+            if ( KNamelistGet( list, idx, &item_name ) == 0 )
+            {
+                if ( nlt_strcmp( item_name, name_to_find ) == 0 )
+                    res = true;
+            }
+        }
+    }
+    return res;
+}
+
+/*
+    - list1 and list2 containts strings
+    - if one of the strings in list2 is contained ( partial match, strstr() )
+      in one of the strings in list1 the function returns true...
+*/
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 )
+{
+    uint32_t count1;
+    bool res = false;
+    if ( list1 == NULL || list2 == NULL )
+        return res;
+    if ( KNamelistCount( list1, &count1 ) == 0 )
+    {
+        uint32_t idx1;
+        for ( idx1 = 0; idx1 < count1 && res == false; ++idx1 )
+        {
+            const char *string1;
+            if ( KNamelistGet( list1, idx1, &string1 ) == 0 )
+            {
+                uint32_t count2;
+                if ( KNamelistCount( list2, &count2 ) == 0 )
+                {
+                    uint32_t idx2;
+                    for ( idx2 = 0; idx2 < count2 && res == false; ++idx2 )
+                    {
+                        const char *string2;
+                        if ( KNamelistGet( list2, idx2, &string2 ) == 0 )
+                        {
+                            if ( strstr( string1, string2 ) != NULL )
+                                res = true;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove )
+{
+    rc_t rc = 0;
+    uint32_t count;
+    
+    if ( source == NULL || dest == NULL || to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    *dest = NULL;
+    rc = KNamelistCount( source, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        VNamelist *cleaned;
+        rc = VNamelistMake ( &cleaned, count );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                rc = KNamelistGet( source, idx, &s );
+                if ( rc == 0 )
+                {
+                    if ( !nlt_is_name_in_namelist( to_remove, s ) )
+                        rc = VNamelistAppend ( cleaned, s );
+                }
+                rc = VNamelistToConstNamelist ( cleaned, dest );
+            }
+        }
+    }
+    return rc;
+}
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove )
+{
+    rc_t rc = 0;
+    const KNamelist *to_remove;
+    
+    if ( source == NULL || dest == NULL || items_to_remove == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    rc = nlt_make_namelist_from_string( &to_remove, items_to_remove );
+    if ( rc == 0 )
+    {
+        rc = nlt_remove_names_from_namelist( source, dest, to_remove );
+        KNamelistRelease( to_remove );
+    }
+    return rc;
+}
+
+
+bool nlt_compare_namelists( const KNamelist *nl1, const KNamelist *nl2, uint32_t * found )
+{
+	bool res = false;
+    if ( nl1 != NULL && nl2 != NULL )
+	{
+		uint32_t count_1;
+		rc_t rc = KNamelistCount( nl1, &count_1 );
+		if ( rc == 0 )
+		{
+			uint32_t count_2;
+			rc = KNamelistCount( nl2, &count_2 );
+			if ( rc == 0 && count_1 == count_2 )
+			{
+				uint32_t idx;
+				uint32_t in_nl2 = 0;
+				for ( idx = 0; idx < count_1 && rc == 0; ++idx )
+				{
+					const char *s;
+					rc = KNamelistGet( nl1, idx, &s );
+					if ( rc == 0 && s != NULL && nlt_is_name_in_namelist( nl2, s ) )
+						in_nl2++;
+				}
+				res = ( rc == 0 && in_nl2 == count_1 );
+				if ( found != NULL ) *found = in_nl2;
+			}
+		}
+	}
+	return res;
+}
+
+
+rc_t nlt_copy_namelist( const KNamelist *src, const KNamelist ** dst )
+{
+    VNamelist *v_names;
+    rc_t rc = VNamelistMake ( &v_names, 5 );
+	if ( rc == 0 )
+	{
+		uint32_t count;
+		rc = KNamelistCount( src, &count );
+		if ( rc == 0 )
+		{
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                rc = KNamelistGet( src, idx, &s );
+				if ( rc == 0 && s != NULL )
+					rc = VNamelistAppend ( v_names, s );
+			}
+		}
+		if ( rc == 0 )
+			rc = VNamelistToConstNamelist ( v_names, dst );
+        VNamelistRelease( v_names );
+	}
+	return rc;
+}
+
+
+rc_t nlt_build_intersect( const KNamelist *nl1, const KNamelist *nl2, const KNamelist ** dst )
+{
+    VNamelist *v_names;
+    rc_t rc = VNamelistMake ( &v_names, 5 );
+	if ( rc == 0 )
+	{
+		/* loop through nl1: if a entry is found in nl2 -> add it to dst */
+		uint32_t count;
+		rc = KNamelistCount( nl1, &count );
+		if ( rc == 0 )
+		{
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *s;
+                rc = KNamelistGet( nl1, idx, &s );
+				if ( rc == 0 && s != NULL )
+				{
+					if ( nlt_is_name_in_namelist( nl2, s ) )
+						rc = VNamelistAppend ( v_names, s );
+				}
+			}
+		}
+		if ( rc == 0 )
+			rc = VNamelistToConstNamelist ( v_names, dst );
+        VNamelistRelease( v_names );
+
+	}
+	return rc;	
+}
+
+bool nlt_namelist_is_sub_set_in_full_set( const KNamelist * sub_set, const KNamelist * full_set )
+{
+	bool res = false;
+	uint32_t count;
+	rc_t rc = KNamelistCount( sub_set, &count );
+	if ( rc == 0 )
+	{
+		uint32_t idx;
+		uint32_t found = 0;
+		for ( idx = 0; idx < count && rc == 0; ++idx )
+		{
+			const char *s;
+			rc = KNamelistGet( sub_set, idx, &s );
+			if ( rc == 0 && s != NULL && nlt_is_name_in_namelist( full_set, s ) )
+				found++;
+		}
+		res = ( rc == 0 && count == found );
+	}
+	return res;
+}
diff --git a/tools/vdb-diff/namelist_tools.h b/tools/vdb-diff/namelist_tools.h
new file mode 100644
index 0000000..6819960
--- /dev/null
+++ b/tools/vdb-diff/namelist_tools.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_namelist_tools_
+#define _h_namelist_tools_
+
+#include <klib/rc.h>
+#include <klib/namelist.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int nlt_strcmp( const char* s1, const char* s2 );
+rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src );
+bool nlt_is_name_in_namelist( const KNamelist *list, const char *name_to_find );
+bool nlt_namelist_intersect( const KNamelist *list1, const KNamelist *list2 );
+
+rc_t nlt_remove_names_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const KNamelist *to_remove );
+
+rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
+            const KNamelist **dest, const char *items_to_remove );
+
+bool nlt_compare_namelists( const KNamelist *nl1, const KNamelist *nl2, uint32_t * found );
+
+rc_t nlt_copy_namelist( const KNamelist *src, const KNamelist ** dst );
+
+rc_t nlt_build_intersect( const KNamelist *nl1, const KNamelist *nl2, const KNamelist ** dst );
+
+bool nlt_namelist_is_sub_set_in_full_set( const KNamelist * sub_set, const KNamelist * full_set );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-diff/vdb-diff.c b/tools/vdb-diff/vdb-diff.c
new file mode 100644
index 0000000..4e78b7f
--- /dev/null
+++ b/tools/vdb-diff/vdb-diff.c
@@ -0,0 +1,1002 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/main.h>
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/num-gen.h>
+#include <klib/progressbar.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+
+#include <sra/sraschema.h>
+
+#include "coldefs.h"
+#include "namelist_tools.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+
+#define OPTION_ROWS         "rows"
+#define ALIAS_ROWS          "R"
+
+#define OPTION_COLUMNS      "columns"
+#define ALIAS_COLUMNS       "C"
+
+#define OPTION_TABLE        "table"
+#define ALIAS_TABLE         "T"
+
+#define OPTION_PROGRESS     "progress"
+#define ALIAS_PROGRESS      "p"
+
+#define OPTION_MAXERR       "maxerr"
+#define ALIAS_MAXERR        "e"
+
+#define OPTION_INTERSECT    "intersect"
+#define ALIAS_INTERSECT     "i"
+
+#define OPTION_EXCLUDE      "exclude"
+#define ALIAS_EXCLUDE       "x"
+
+static const char * rows_usage[] = { "set of rows to be comparend (default = all)", NULL };
+static const char * columns_usage[] = { "set of columns to be compared (default = all)", NULL };
+static const char * table_usage[] = { "name of table (in case of database ) to be compared", NULL };
+static const char * progress_usage[] = { "show progress in percent", NULL };
+static const char * maxerr_usage[] = { "max errors im comparing (default = 1)", NULL };
+static const char * intersect_usage[] = { "intersect column-set from both runs", NULL };
+static const char * exclude_usage[] = { "exclude these columns from comapring", NULL };
+
+OptDef MyOptions[] =
+{
+    { OPTION_ROWS, 			ALIAS_ROWS, 		NULL, 	rows_usage, 		1, 	true, 	false },
+	{ OPTION_COLUMNS, 		ALIAS_COLUMNS, 		NULL, 	columns_usage, 		1, 	true, 	false },
+	{ OPTION_TABLE, 		ALIAS_TABLE, 		NULL, 	table_usage, 		1, 	true, 	false },
+	{ OPTION_PROGRESS, 		ALIAS_PROGRESS,		NULL, 	progress_usage,		1, 	false, 	false },
+	{ OPTION_MAXERR, 		ALIAS_MAXERR,		NULL, 	maxerr_usage,		1, 	true, 	false },
+	{ OPTION_INTERSECT,		ALIAS_INTERSECT,	NULL, 	intersect_usage,	1, 	false, 	false },
+	{ OPTION_EXCLUDE,		ALIAS_EXCLUDE,		NULL, 	exclude_usage,		1, 	true, 	false }		
+};
+
+
+const char UsageDefaultName[] = "vdb-diff";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s <src_path> <dst_path> [options]\n"
+        "\n", progname );
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+    HelpOptionLine ( ALIAS_ROWS, 		OPTION_ROWS, 		"row-range",	rows_usage );
+    HelpOptionLine ( ALIAS_COLUMNS, 	OPTION_COLUMNS, 	"column-set",	columns_usage );
+	HelpOptionLine ( ALIAS_TABLE, 		OPTION_TABLE, 		"table-name",	table_usage );
+	HelpOptionLine ( ALIAS_PROGRESS, 	OPTION_PROGRESS,	NULL,			progress_usage );
+	HelpOptionLine ( ALIAS_MAXERR, 		OPTION_MAXERR,	    "max value",	maxerr_usage );
+	HelpOptionLine ( ALIAS_INTERSECT, 	OPTION_INTERSECT,   NULL,			intersect_usage );
+	HelpOptionLine ( ALIAS_EXCLUDE, 	OPTION_EXCLUDE,   	"column-set",	exclude_usage );
+	
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+struct diff_ctx
+{
+    const char * src1;
+    const char * src2;
+	const char * columns;
+	const char * excluded;
+	const char * table;
+	
+    struct num_gen * rows;
+	uint32_t max_err;
+	bool show_progress;
+	bool intersect;
+};
+
+
+static void init_diff_ctx( struct diff_ctx * dctx )
+{
+    dctx -> src1 = NULL;
+    dctx -> src2 = NULL;
+	dctx -> columns = NULL;
+	dctx -> excluded = NULL;	
+	dctx -> table = NULL;
+	
+    dctx -> rows = NULL;
+	dctx -> show_progress = false;
+	dctx -> intersect = false;
+}
+
+
+static void release_diff_ctx( struct diff_ctx * dctx )
+{
+	/* do not release the src1,src2,columns,table pointers! they are owned by the Args-obj. */
+	if ( dctx -> rows != 0 )
+	{
+		num_gen_destroy( dctx -> rows );
+	}
+}
+
+
+static const char * get_str_option( const Args *args, const char * option_name )
+{
+    const char * res = NULL;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option_name, &count );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "ArgsOptionCount() failed" );
+	}
+	else if ( count > 0 )
+	{
+		rc = ArgsOptionValue( args, option_name, 0, (const void **)&res );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "ArgsOptionValue( 0 ) failed" );
+		}
+	}
+    return res;
+}
+
+
+static bool get_bool_option( const Args *args, const char * option_name, bool dflt )
+{
+    bool res = dflt;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, option_name, &count );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "ArgsOptionCount() failed" );
+	}
+	else if ( count > 0 )
+	{
+		res = true;
+	}
+    return res;
+}
+
+
+static uint32_t get_uint32t_option( const Args *args, const char * option_name, uint32_t dflt )
+{
+    uint32_t res = dflt;
+	const char * s = get_str_option( args, option_name );
+	if ( s != NULL ) res = atoi( s );
+    return res;
+}
+
+
+static rc_t gather_diff_ctx( struct diff_ctx * dctx, Args * args )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "ArgsParamCount() failed" );
+	}
+    else if ( count < 2 )
+    {
+        rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcIncorrect );
+		LOGERR ( klogInt, rc, "This tool needs 2 arguments: source1 and source2" );
+    }
+    else
+    {
+        rc = ArgsParamValue( args, 0, (const void **)&dctx->src1 );
+        if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "ArgsParamValue( 1 ) failed" );
+		}
+        else
+        {
+            rc = ArgsParamValue( args, 1, (const void **)&dctx->src2 );
+            if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "ArgsParamValue( 2 ) failed" );
+			}
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        const char * s = get_str_option( args, OPTION_ROWS );
+        if ( s != NULL )
+		{
+            rc = num_gen_make_from_str( &dctx->rows, s );
+			if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "num_gen_make_from_str() failed" );
+			}
+		}
+	}
+	
+	if ( rc == 0 )
+	{
+		dctx -> columns = get_str_option( args, OPTION_COLUMNS );
+		dctx -> excluded = get_str_option( args, OPTION_EXCLUDE );		
+		dctx -> show_progress = get_bool_option( args, OPTION_PROGRESS, false );
+		dctx -> intersect = get_bool_option( args, OPTION_INTERSECT, false );
+		dctx -> max_err = get_uint32t_option( args, OPTION_MAXERR, 1 );
+    }
+
+    return rc;
+}
+
+
+static rc_t report_diff_ctx( struct diff_ctx * dctx )
+{
+    rc_t rc = KOutMsg( "src[ 1 ] : %s\n", dctx -> src1 );
+	if ( rc == 0 )
+		rc = KOutMsg( "src[ 2 ] : %s\n", dctx -> src2 );
+
+	if ( rc == 0 )
+	{
+		if ( dctx -> rows != NULL )
+		{
+			char buffer[ 4096 ];
+			rc = num_gen_as_string( dctx -> rows, buffer, sizeof buffer, NULL, false );
+			if ( rc == 0 )
+				rc = KOutMsg( "- rows : %s\n", buffer );
+		}
+		else
+			rc = KOutMsg( "- rows : all\n" );
+	}
+		
+	if ( rc == 0 && dctx -> columns != NULL )
+		rc = KOutMsg( "- columns : %s\n", dctx -> columns );
+	if ( rc == 0 && dctx -> excluded != NULL )
+		rc = KOutMsg( "- exclude : %s\n", dctx -> excluded );
+	if ( rc == 0 && dctx -> table != NULL )
+		rc = KOutMsg( "- table : %s\n", dctx -> table );
+	if ( rc == 0 )
+		rc = KOutMsg( "- progress : %s\n", dctx -> show_progress ? "show" : "hide" );
+	if ( rc == 0 )
+		rc = KOutMsg( "- intersect: %s\n", dctx -> intersect ? "yes" : "no" );
+	if ( rc == 0 )
+		rc = KOutMsg( "- max err : %u\n", dctx -> max_err );
+
+	if ( rc == 0 )
+		rc = KOutMsg( "\n" );
+	return rc;
+}
+
+
+static rc_t diff_columns_iter( col_defs * defs, const VCursor * cur_1, const VCursor * cur_2,
+							   struct diff_ctx * dctx, const struct num_gen_iter * iter )
+{
+	uint32_t column_count;
+	rc_t rc = col_defs_count( defs, &column_count );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "col_defs_count() failed" );
+	}
+	else
+	{
+		struct progressbar * progress = NULL;
+		int64_t row_id;
+		uint64_t rows_checked = 0;
+		uint64_t rows_different = 0;
+		
+		if ( dctx -> show_progress )
+			make_progressbar( &progress, 2 );
+	
+		while ( rc == 0 && num_gen_iterator_next( iter, &row_id, &rc ) )
+		{
+			if ( rc == 0 ) rc = Quitting();    /* to be able to cancel the loop by signal */
+			if ( rc == 0 )
+			{
+				bool row_equal = true;
+				
+				uint32_t col_id;
+				for ( col_id = 0; col_id < column_count && rc == 0; ++col_id )
+				{
+					col_pair * pair = VectorGet( &( defs -> cols ), col_id );
+					if ( pair != NULL )
+					{
+						uint32_t elem_bits_1, boff_1, row_len_1;
+						const void * base_1;
+						rc = VCursorCellDataDirect ( cur_1, row_id, pair->pair[ 0 ].idx, 
+													 &elem_bits_1, &base_1, &boff_1, &row_len_1 );
+						if ( rc != 0 )
+						{
+							PLOGERR( klogInt, ( klogInt, rc, 
+									 "VCursorCellDataDirect( #1 [$(col)].$(row) ) failed",
+									 "col=%s,row=%ld", pair->name, row_id ) );
+						}
+						else
+						{
+							uint32_t elem_bits_2, boff_2, row_len_2;
+							const void * base_2;
+							rc = VCursorCellDataDirect ( cur_2, row_id, pair->pair[ 1 ].idx, 
+														 &elem_bits_2, &base_2, &boff_2, &row_len_2 );
+							if ( rc != 0 )
+							{
+								PLOGERR( klogInt, ( klogInt, rc, 
+										 "VCursorCellDataDirect( #2 [$(col)].$(row) ) failed",
+										 "col=%s,row=%ld", pair->name, row_id ) );
+							}
+							else
+							{
+								bool bin_diff = true;
+								
+								if ( elem_bits_1 != elem_bits_2 )
+								{
+									bin_diff = row_equal = false;
+									rc = KOutMsg( "%s[ %ld ].elem_bits %u != %u\n", pair->name, row_id, elem_bits_1, elem_bits_2 );
+								}
+
+								if ( row_len_1 != row_len_2 )
+								{
+									bin_diff = row_equal = false;
+									if ( rc == 0 )
+									{
+										rc = KOutMsg( "%s[ %ld ].row_len %u != %u\n", pair->name, row_id, row_len_1, row_len_2 );
+									}
+								}
+
+								if ( boff_1 != 0 || boff_2 != 0 )
+								{
+									bin_diff = row_equal = false;
+									if ( rc == 0 )
+									{
+										rc = KOutMsg( "%s[ %ld ].bit_offset: %u, %u\n", pair->name, row_id, boff_1, boff_2 );
+									}
+								}
+								
+								if ( bin_diff )
+								{
+									size_t num_bits = ( row_len_1 * elem_bits_1 );
+									if ( num_bits & 0x07 )
+									{
+										if ( rc == 0 )
+										{
+											rc = KOutMsg( "%s[ %ld ].bits_total %% 8 = %u\n", pair->name, row_id, ( num_bits % 8 ) );
+										}
+									}
+									else
+									{
+										size_t num_bytes = ( num_bits >> 3 );
+										int cmp = memcmp ( base_1, base_2, num_bytes );
+										if ( cmp != 0 )
+										{
+											if ( rc == 0 )
+											{
+												rc = KOutMsg( "%s[ %ld ] differ\n", pair->name, row_id );
+											}
+											row_equal = false;
+										}
+									}
+								}
+							}
+						}
+					}
+				} /* for ( col_id ... ) */
+				
+				if ( !row_equal )
+				{
+					if ( rc == 0 )	rc = KOutMsg( "\n" );
+					rows_different ++;
+					if ( rows_different >= dctx -> max_err )
+						rc = RC( rcExe, rcNoTarg, rcComparing, rcRow, rcInconsistent );		
+				}
+				rows_checked ++;
+				
+				if ( progress != NULL )
+				{
+					uint32_t progress_value;
+					if ( num_gen_iterator_percent( iter, 2, &progress_value ) == 0 )
+						update_progressbar( progress, progress_value );
+				}
+				
+			} /* if (!Quitting) */
+		} /* while ( num_gen_iterator_next() ) */
+
+		if ( rc == 0 )
+			rc = KOutMsg( "\n%,lu rows checked ( %d columns each ), %,lu rows differ\n",
+				rows_checked, column_count, rows_different );
+
+		if ( rows_different > 0 )
+			rc = RC( rcExe, rcNoTarg, rcComparing, rcRow, rcInconsistent );
+		
+		if ( progress != NULL )
+			destroy_progressbar( progress );
+			
+	} /* if ( col_defs_count == 0 )*/
+	
+	return rc;
+}
+
+
+static rc_t diff_columns_cursor( col_defs * defs, const VCursor * cur_1, const VCursor * cur_2, struct diff_ctx * dctx )
+{
+    int64_t  first_1;
+    uint64_t count_1;
+    rc_t rc = VCursorIdRange( cur_1, 0, &first_1, &count_1 );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "VCursorIdRange( acc #1 ) failed" );
+	}
+	else
+	{
+		int64_t  first_2;
+		uint64_t count_2;
+		rc = VCursorIdRange( cur_2, 0, &first_2, &count_2 );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "VCursorIdRange( acc #2 ) failed" );
+		}
+		else
+		{
+			struct num_gen * rows_to_diff = NULL;
+			if ( dctx -> rows != NULL )
+			{
+				num_gen_copy( dctx -> rows, &rows_to_diff );
+			}
+
+			if ( rows_to_diff == NULL )
+			{
+				/* no row-range given create the number generator from the discovered range, if it is the same */
+				if ( first_1 != first_2 || count_1 != count_2 )
+				{
+					rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+					PLOGERR( klogInt, ( klogInt, rc, "row-ranges differ: $(first1).$(count1) != $(first2).$(count2)",
+							 "first1=%ld,count1=%lu,first2=%ld,count2=%lu",
+							 first_1, count_1, first_2, count_2 ) );
+				}
+				else
+				{
+					rc = num_gen_make_from_range( &rows_to_diff, first_1, count_1 );
+					if ( rc != 0 )
+					{
+						LOGERR ( klogInt, rc, "num_gen_make_from_range() failed" );
+					}
+				}
+			}
+			else
+			{
+				/* row-range given, clip the rows be the 2 ranges ( even if they are not the same ) */
+				rc = num_gen_trim( rows_to_diff, first_1, count_1 );
+				if ( rc != 0 )
+				{
+					LOGERR ( klogInt, rc, "num_gen_trim( acc #1 ) failed" );
+				}
+				else if ( first_1 != first_2 || count_1 != count_2 )
+				{
+					rc = num_gen_trim( rows_to_diff, first_2, count_2 );
+					if ( rc != 0 )
+					{
+						LOGERR ( klogInt, rc, "num_gen_trim( acc #2 ) failed" );
+					}
+				}
+			}
+			
+			if ( rc == 0 )
+			{
+				const struct num_gen_iter * iter;
+				rc = num_gen_iterator_make( rows_to_diff, &iter );
+				if ( rc != 0 )
+				{
+					LOGERR ( klogInt, rc, "num_gen_iterator_make() failed" );
+				}
+				else
+				{
+					/* *************************************************************** */
+					rc = diff_columns_iter( defs, cur_1, cur_2, dctx, iter );
+					/* *************************************************************** */
+					num_gen_iterator_destroy( iter );
+				}
+			}
+			
+			if ( rows_to_diff != NULL )
+				num_gen_destroy( rows_to_diff );
+		}
+	}
+	return rc;
+}
+
+
+static rc_t diff_columns( col_defs * defs, const VTable * tab_1, const VTable * tab_2, struct diff_ctx * dctx )
+{
+	const VCursor * cur_1;
+	rc_t rc = VTableCreateCursorRead( tab_1, &cur_1 );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "VTableCreateCursorRead( acc #1 ) failed" );
+	}
+	else
+	{
+		const VCursor * cur_2;
+		rc = VTableCreateCursorRead( tab_2, &cur_2 );	
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "VTableCreateCursorRead( acc #2 ) failed" );
+		}
+		else
+		{
+			rc = col_defs_add_to_cursor( defs, cur_1, 0 );
+			if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "failed to add all requested columns to cursor of 1st accession" );
+			}
+			else
+			{
+				rc = col_defs_add_to_cursor( defs, cur_2, 1 );
+				if ( rc != 0 )
+				{
+					LOGERR ( klogInt, rc, "failed to add all requested columns to cursor of 2nd accession" );
+				}
+				else
+				{
+					rc = VCursorOpen( cur_1 );
+					if ( rc != 0 )
+					{
+						LOGERR ( klogInt, rc, "VCursorOpen( acc #1 ) failed" );
+					}
+					else
+					{
+						rc = VCursorOpen( cur_2 );
+						if ( rc != 0 )
+						{
+							LOGERR ( klogInt, rc, "VCursorOpen( acc #2 ) failed" );
+						}
+						else
+						{
+							/* ************************************************** */
+							rc = diff_columns_cursor( defs, cur_1, cur_2, dctx );
+							/* ************************************************** */
+						}
+					}
+				}
+			}
+			VCursorRelease( cur_2 );
+		}
+		VCursorRelease( cur_1 );
+	}
+	return 0;
+}
+
+
+static rc_t compare_2_namelists( const KNamelist * cols_1, const KNamelist * cols_2, const KNamelist ** cols_to_diff, bool intersect )
+{
+	uint32_t count_1;
+	rc_t rc = KNamelistCount( cols_1, &count_1 );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "KNamelistCount() failed" );
+	}
+	else
+	{
+		uint32_t count_2;
+		rc = KNamelistCount( cols_2, &count_2 );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "KNamelistCount() failed" );
+		}
+		else if ( count_1 != count_2 )
+		{
+			if ( intersect )
+			{
+				rc = nlt_build_intersect( cols_1, cols_2, cols_to_diff );
+				if ( rc != 0 )
+				{
+					LOGERR ( klogInt, rc, "nlt_build_intersect() failed" );	
+				}
+			}
+			else
+			{
+				rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+				PLOGERR( klogInt, ( klogInt, rc,
+						 "the accessions have not the same number of columns! ( $(count1) != $(count2) )\n",
+						 "count1=%u,count2=%u", count_1, count_2 ) );
+				*cols_to_diff = NULL;
+			}
+		}
+		else
+		{
+			uint32_t found_in_both;
+			bool equal = nlt_compare_namelists( cols_1, cols_2, &found_in_both );
+			if ( equal )
+			{
+				rc = nlt_copy_namelist( cols_1, cols_to_diff );
+				if ( rc != 0 )
+				{
+					LOGERR ( klogInt, rc, "nlt_copy_namelist() failed" );
+				}
+			}
+			else
+			{
+				if ( intersect )
+				{
+					rc = nlt_build_intersect( cols_1, cols_2, cols_to_diff );
+					if ( rc != 0 )
+					{
+						LOGERR ( klogInt, rc, "nlt_build_intersect() failed" );	
+					}
+				}
+				else
+				{
+					rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+					KOutMsg( "the 2 accessions have not the same set of columns! ( %u found in both )\n", found_in_both );
+				}
+			}
+		}
+	}
+	return rc;
+}
+
+
+static rc_t extract_columns_from_2_namelists( const KNamelist * cols_1, const KNamelist * cols_2, const char * sub_set,
+											  const KNamelist ** cols_to_diff )
+{
+	rc_t rc = nlt_make_namelist_from_string( cols_to_diff, sub_set );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "cannot parse set of requested columns" );
+	}
+	else
+	{
+		if ( nlt_namelist_is_sub_set_in_full_set( *cols_to_diff, cols_1 ) )
+		{
+			if ( nlt_namelist_is_sub_set_in_full_set( *cols_to_diff, cols_2 ) )
+			{
+				rc = 0;
+			}
+			else
+			{
+				rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+				LOGERR ( klogInt, rc, "accession #2 is missing some of the requested columns" );
+			}
+		}
+		else
+		{
+			rc = RC( rcExe, rcNoTarg, rcResolving, rcParam, rcInvalid );
+			LOGERR ( klogInt, rc, "accession #1 is missing some of the requested columns" );
+		}
+	}
+	return rc;
+}
+
+
+static rc_t perform_table_diff( const VTable * tab_1, const VTable * tab_2, struct diff_ctx * dctx )
+{
+	col_defs * defs;
+	rc_t rc = col_defs_init( &defs );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "col_defs_init() failed" );
+	}
+	else
+	{
+		KNamelist * cols_1;
+		rc_t rc = VTableListReadableColumns( tab_1, &cols_1 );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "VTableListReadableColumns( acc #1 ) failed" );
+		}
+		else
+		{
+			KNamelist * cols_2;
+			rc = VTableListReadableColumns( tab_2, &cols_2 );
+			if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "VTableListReadableColumns( acc #2 ) failed" );
+			}
+			else
+			{
+				const KNamelist * cols_to_diff;
+				
+				if ( dctx -> columns == NULL )
+					rc = compare_2_namelists( cols_1, cols_2, &cols_to_diff, dctx -> intersect );
+				else
+					rc = extract_columns_from_2_namelists( cols_1, cols_2, dctx -> columns, &cols_to_diff );
+
+				if ( rc == 0 && dctx -> excluded != NULL )
+				{
+					const KNamelist * temp;
+					rc = nlt_remove_strings_from_namelist( cols_to_diff, &temp, dctx -> excluded );
+					KNamelistRelease( cols_to_diff );
+					cols_to_diff = temp;
+				}
+				
+				if ( rc == 0 )
+				{
+					rc = col_defs_fill( defs, cols_to_diff );
+					if ( rc == 0 )
+					{
+						/* ******************************************* */
+						rc = diff_columns( defs, tab_1, tab_2, dctx );
+						/* ******************************************* */
+					}
+					KNamelistRelease( cols_to_diff );
+				}
+				
+				KNamelistRelease( cols_2 );
+			}
+			KNamelistRelease( cols_1 );
+		}
+		col_defs_destroy( defs );
+	}
+	return 0;
+}
+
+
+static rc_t perform_database_diff_on_this_table( const VDatabase * db_1, const VDatabase * db_2,
+												 struct diff_ctx * dctx, const char * table_name )
+{
+	/* we want to compare only the table wich name was given at the commandline */
+	const VTable * tab_1;
+	rc_t rc = VDatabaseOpenTableRead ( db_1, &tab_1, "%s", table_name );
+	if ( rc != 0 )
+	{
+		PLOGERR( klogInt, ( klogInt, rc, 
+				 "VDatabaseOpenTableRead( [$(acc)].$(tab) ) failed",
+				 "acc=%s,tab=%s", dctx -> src1, table_name ) );
+	}
+	else
+	{
+		const VTable * tab_2;
+		rc = VDatabaseOpenTableRead ( db_2, &tab_2, "%s", table_name );
+		if ( rc != 0 )
+		{
+			PLOGERR( klogInt, ( klogInt, rc, 
+					 "VDatabaseOpenTableRead( [$(acc)].$(tab) ) failed",
+					 "acc=%s,tab=%s", dctx -> src2, table_name ) );
+		}
+		else
+		{
+			/* ******************************************* */
+			rc = perform_table_diff( tab_1, tab_2, dctx );
+			/* ******************************************* */
+			VTableRelease( tab_2 );
+		}
+		VTableRelease( tab_1 );
+	}
+	return rc;
+}
+
+
+static rc_t perform_database_diff( const VDatabase * db_1, const VDatabase * db_2, struct diff_ctx * dctx )
+{
+	rc_t rc = 0;
+	if ( dctx -> table != NULL )
+	{
+		/* we want to compare only the table wich name was given at the commandline */
+		/* ************************************************************************** */
+		rc = perform_database_diff_on_this_table( db_1, db_2, dctx, dctx -> table );
+		/* ************************************************************************** */
+	}
+	else
+	{
+		/* we want to compare all tables of the 2 accession, if they have the same set of tables */
+		KNamelist * table_set_1;
+		rc = VDatabaseListTbl ( db_1, &table_set_1 );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "VDatabaseListTbl( acc #1 ) failed" );
+		}
+		else
+		{
+			KNamelist * table_set_2;
+			rc = VDatabaseListTbl ( db_2, &table_set_2 );
+			if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "VDatabaseListTbl( acc #2 ) failed" );
+			}
+			else
+			{
+				if ( nlt_compare_namelists( table_set_1, table_set_2, NULL ) )
+				{
+					/* the set of tables match, walk the first set, and perform a diff on each table */
+					uint32_t count;
+					rc = KNamelistCount( table_set_1, &count );
+					if ( rc != 0  )
+					{
+						LOGERR ( klogInt, rc, "KNamelistCount() failed" );
+					}
+					else
+					{
+						uint32_t idx;
+						for ( idx = 0; idx < count && rc == 0; ++idx )
+						{
+							const char * table_name;
+							rc = KNamelistGet( table_set_1, idx, &table_name );
+							if ( rc != 0 )
+							{
+								LOGERR ( klogInt, rc, "KNamelistGet() failed" );
+							}
+							else
+							{
+								rc = KOutMsg( "\ncomparing table: %s\n", table_name );
+								if ( rc == 0 )
+								{
+									/* ********************************************************************* */
+									rc = perform_database_diff_on_this_table( db_1, db_2, dctx, table_name );
+									/* ********************************************************************* */									
+								}
+							}
+						}
+					}
+				}
+				else
+				{
+					LOGERR ( klogInt, rc, "the 2 databases have not the same set of tables" );
+				}
+				KNamelistRelease( table_set_2 );
+			}
+			KNamelistRelease( table_set_1 );
+		}
+	}
+	return rc;
+}
+
+
+/***************************************************************************
+    perform the actual diffing
+***************************************************************************/
+static rc_t perform_diff( struct diff_ctx * dctx )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+	if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "KDirectoryNativeDir() failed" );
+	}
+	else
+    {
+		const VDBManager * vdb_mgr;
+		rc = VDBManagerMakeRead ( &vdb_mgr, dir );
+		if ( rc != 0 )
+		{
+			LOGERR ( klogInt, rc, "VDBManagerMakeRead() failed" );
+		}
+		else
+		{
+			VSchema * vdb_schema = NULL;
+			rc = VDBManagerMakeSRASchema( vdb_mgr, &vdb_schema );
+			if ( rc != 0 )
+			{
+				LOGERR ( klogInt, rc, "VDBManagerMakeSRASchema() failed" );
+			}
+			else
+			{
+				const VDatabase * db_1;
+				/* try to open it as a database */
+				rc = VDBManagerOpenDBRead ( vdb_mgr, &db_1, vdb_schema, "%s", dctx -> src1 );
+				if ( rc == 0 )
+				{
+					const VDatabase * db_2;
+					rc = VDBManagerOpenDBRead ( vdb_mgr, &db_2, vdb_schema, "%s", dctx -> src2 );
+					if ( rc == 0 )
+					{
+						/* ******************************************** */
+						rc = perform_database_diff( db_1, db_2, dctx );
+						/* ******************************************** */
+						VDatabaseRelease( db_2 );
+					}
+					else
+					{
+						LOGERR ( klogInt, rc, "accession #1 opened as database, but accession #2 cannot be opened as database" );
+					}
+					VDatabaseRelease( db_1 );
+				}
+				else
+				{
+					const VTable * tab_1;
+					rc = VDBManagerOpenTableRead( vdb_mgr, &tab_1, vdb_schema, "%s", dctx -> src1 );
+					if ( rc == 0 )
+					{
+						const VTable * tab_2;
+						rc = VDBManagerOpenTableRead( vdb_mgr, &tab_2, vdb_schema, "%s", dctx -> src2 );
+						if ( rc == 0 )
+						{
+							/* ******************************************** */
+							rc = perform_table_diff( tab_1, tab_2, dctx );
+							/* ******************************************** */
+							VTableRelease( tab_2 );
+						}
+						else
+						{
+							LOGERR ( klogInt, rc, "accession #1 opened as table, but accession #2 cannot be opened as table" );
+						}
+						VTableRelease( tab_1 );
+					}
+					else
+					{
+						LOGERR ( klogInt, rc, "accession #1 cannot be opened as table or database" );
+					}
+				}
+				VSchemaRelease( vdb_schema );
+			}
+			VDBManagerRelease( vdb_mgr );
+		}
+		KDirectoryRelease( dir );
+	}
+	return rc;
+}
+
+
+/***************************************************************************
+    Main:
+***************************************************************************/
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
+                                  MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
+    if ( rc != 0 )
+	{
+		LOGERR ( klogInt, rc, "ArgsMakeAndHandle failed()" );
+	}
+    else
+    {
+        struct diff_ctx dctx;
+
+        KLogHandlerSetStdErr();
+        init_diff_ctx( &dctx );
+        rc = gather_diff_ctx( &dctx, args );
+        if ( rc == 0 )
+        {
+            rc = report_diff_ctx( &dctx );
+			if ( rc == 0 )
+			{
+				/* ***************************** */
+				rc = perform_diff( &dctx );
+				/* ***************************** */				
+			}
+        }
+        release_diff_ctx( &dctx );
+
+        ArgsWhack ( args );
+    }
+    return rc;
+}
diff --git a/tools/vdb-dump/.gitignore b/tools/vdb-dump/.gitignore
new file mode 100644
index 0000000..1ec835e
--- /dev/null
+++ b/tools/vdb-dump/.gitignore
@@ -0,0 +1,2 @@
+test3
+vdbdump
diff --git a/tools/vdb-dump/Makefile b/tools/vdb-dump/Makefile
new file mode 100644
index 0000000..b47f869
--- /dev/null
+++ b/tools/vdb-dump/Makefile
@@ -0,0 +1,92 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-dump
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-dump
+#  vdb dump tool
+#
+VDB_DUMP_SRC = \
+	vdb-dump-context \
+	vdb-dump-coldefs \
+	vdb-dump-tools \
+	vdb-dump-str \
+	vdb-dump-helper \
+	vdb-dump-filter \
+	vdb-dump-formats \
+	vdb-dump-redir \
+	vdb-dump-fastq \
+	vdb-dump-bin \
+	vdb-dump-interact \
+	vdb-dump-repo \
+	vdb-dump-print \
+	vdb_info \
+	vdb-dump
+
+VDB_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_DUMP_SRC))
+
+VDB_DUMP_LIB = \
+	-skapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/vdb-dump: $(VDB_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_DUMP_LIB)
+
diff --git a/tools/vdb-dump/help.txt b/tools/vdb-dump/help.txt
new file mode 100644
index 0000000..d3d6f7e
--- /dev/null
+++ b/tools/vdb-dump/help.txt
@@ -0,0 +1,352 @@
+vdb-dump extended help
+
+(1) dumping a vdb-table:
+
+    the only mandatory option to vdb-dump is the name of the object to dump:
+
+    vdb-dump OBJECT
+
+    the OBJECT can be:
+
+        a) absolute or relative path to a vdb-table (a directory)
+
+            on linux:   vdb-dump /panfs/traces/sra0/SRR/000000/SRR000001
+
+
+            on windows: vdb-dump \\panfs\traces\sra0\SRR\000000\SRR000001
+                        vdb-dump Y:\sra0\SRR\000000\SRR000001
+                        ( if "\\panfs\traces" is mapped to the driveletter Y on your windows-pc )
+
+        b) absolute or relative path to a file containing a vdb-table
+
+            on linux/windows:   vdb-dump SRR044989.sra
+
+        c) an accession
+
+            on linux/windows:   vdb-dump SRR000001
+            
+            outside NCBI you need internet access to reach accessions stored at NCBI and you need
+            remote access enabled in your configuration
+
+       If you specify only the object, vdb-dump will dump all columns for all rows to the standard-output.
+
+
+The --table / -T option:
+========================
+vdb-dump is designed to operate on a vdb-database. A vdb-database can contain more then one table.
+If you do not specify the table-name, vdb-dump will first try to interpret the given object as a vdb-database
+( and try to dump the table "SEQUENCE", if that table does not exist: the first table it finds in this database ).
+If this try (silently) fails, because the given object is not a database, vdb-dump will try to interpret
+the given object as a table. If the object is not a vdb-database or vdb-table, the tool will fail.
+
+
+The --rows / -R option:
+=======================
+With this option you can restrict which rows will be dumped.
+vdb-dump file.sra -R 5      ... will dump only row number 5
+vdb-dump file.sra -R 5-20   ... will dump rows number 5 to number 20 (15 rows)
+The ranges can be mixed:
+vdb-dump file.sra -R 5,7-20,200-201,300,305  ... will dump these rows/ranges
+If you omit the range, vdb-dump will output all rows.
+
+
+The --columns -C option:
+========================
+With this option you can restrict which columns per row will be dumped.
+vdb-dump file.sra -C NAME,READ ... will dump only the columns NAME and READ per row
+
+
+the --exclude -x option:
+========================
+If you want to dump all columns, except some specific ones.
+vdb-dump file.sra -x READ,RD_FILTER ... will dump all columns but the READ-column
+and the RD_FILTER-column.
+
+
+The --row_id_on -I option:
+==========================
+vdb-dump does not output the row-id per default, it has to be switched on with this option:
+
+vdb-dump SRR000001 -R1 -CNAME,SPOT_LEN
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 255
+
+vdb-dump SRR000001 -R1 -CNAME,SPOT_LEN -I
+ROW-ID = 1
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 255
+
+
+The --line_feed -l option:
+==========================
+vdb-dump separates the rows by one empty line (line-feed) per default:
+
+vdb-dump SRR000001 -R1-3 -CNAME,SPOT_LEN   
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 255
+
+    NAME: EM7LVYS01B2EMP
+SPOT_LEN: 248
+
+    NAME: EM7LVYS01C2YO0
+SPOT_LEN: 307
+
+with this option you can change that:
+
+vdb-dump SRR000001 -R1-3 -CNAME,SPOT_LEN -l2
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 255
+
+
+    NAME: EM7LVYS01B2EMP
+SPOT_LEN: 248
+
+
+    NAME: EM7LVYS01C2YO0
+SPOT_LEN: 307
+
+
+The --colname_off -N option:
+============================
+vdb-dump prints the name of every column in front of the it's data:
+
+vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 255
+
+    NAME: EM7LVYS01B2EMP
+SPOT_LEN: 248
+
+With this option it prints only the data:
+
+vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -N 
+EM7LVYS01C1LWG
+255
+
+EM7LVYS01B2EMP
+248
+
+
+The --in_hex -X option:
+=======================
+With this option all numeric outputs are printed as hexadecimal numbers:
+
+$vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -X
+    NAME: EM7LVYS01C1LWG
+SPOT_LEN: 0xFF
+
+    NAME: EM7LVYS01B2EMP
+SPOT_LEN: 0xF8
+
+
+The --dna_baese -D option:
+==========================
+With this option you can force columns into printed as DNA-base "ACGT",
+but only if the column has a datatype with more than one dimension.
+If a column has a datatype with a dimension of 2, each dimension 1 bit,
+it is automatically printed as DNA-base.
+
+
+The --max_length -M option:
+===========================
+With this options you can truncate the output of columns longer than this limit.
+
+vdb-dump SRR000001 -R1-2 -CREAD
+READ: TCAGGGGGGAGCTTAAATTTGAAACTAGAAAAATTTTGAACAAAATAATCATAATTGTTAGCTGATGAAAAACTAGAAAAGATTTTCTGAGTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAACGGTATCCCGTAGTGTGCATTCATCCCTGCTCTGGATACAGTCAGCTCCCAAATTCCATAAACAACTCCTTTGTAAGTAACCTCCTTTTGACAGGGGGTACTGAGCGGGCTGGCAAGGCN
+
+READ: TCAGGGGGGGGTTACACGTGCAGATTTGTTACACGGGTGTACTGTGAGGTTTGGGGTACGAATGATCCCGTTACCTAGATAGTGAGCATGGAACCCGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAACAATGTGCAGGGCTCAGGTCAGCATTAGGGTCAGGTTCTTAGGAAAAGAAAGAGCAAAAACAATGAAACACAATACAAAGTAAAGAACACTGAGCGGGCTGGCAAGGCN
+
+vdb-dump SRR000001 -R1-2 -CREAD -M40
+READ: TCAGGGGGGAGCTTAAATTTGAAACTAGAA ...
+
+READ: TCAGGGGGGGGTTACACGTGCAGATTTGTT ...
+
+
+The --indent_with -i option:
+============================
+With this option you can limit the length of the output-line and force a left-edge
+indenting.
+
+vdb-dump $vdb-dump SRR000001 -R1-2 -CREAD -i80
+READ: TCAGGGGGGAGCTTAAATTTGAAACTAGAAAAATTTTGAACAAAATAATCATAATTGTTAGCTGATGAAAAACT
+      AGAAAAGATTTTCTGAGTGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAACGGTATCCCGTAG
+      TGTGCATTCATCCCTGCTCTGGATACAGTCAGCTCCCAAATTCCATAAACAACTCCTTTGTAAGTAACCTCCTT
+      TTGACAGGGGGTACTGAGCGGGCTGGCAAGGCN
+
+READ: TCAGGGGGGGGTTACACGTGCAGATTTGTTACACGGGTGTACTGTGAGGTTTGGGGTACGAATGATCCCGTTAC
+      CTAGATAGTGAGCATGGAACCCGTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAACAATGTGCA
+      GGGCTCAGGTCAGCATTAGGGTCAGGTTCTTAGGAAAAGAAAGAGCAAAAACAATGAAACACAATACAAAGTAA
+      AGAACACTGAGCGGGCTGGCAAGGCN
+
+
+The --format -f option:
+=======================
+This selects other than the default-output formating:
+
+csv = comma-separated on one line
+---------------------------------
+vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -fcsv
+EM7LVYS01C1LWG,255
+EM7LVYS01B2EMP,248
+
+xml = xml-section
+-----------------
+vdb-dump $vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -fxml
+<row_1>
+ <NAME>
+EM7LVYS01C1LWG
+ </NAME>
+ <SPOT_LEN>
+255
+ </SPOT_LEN>
+</row_1>
+
+<row_2>
+ <NAME>
+EM7LVYS01B2EMP
+ </NAME>
+ <SPOT_LEN>
+248
+ </SPOT_LEN>
+</row_2>
+
+json = json format
+------------------
+vdb-dump $vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -fjson
+{
+"row_id": 1,
+"NAME":"EM7LVYS01C1LWG",
+"SPOT_LEN":255
+},
+
+{
+"row_id": 2,
+"NAME":"EM7LVYS01B2EMP",
+"SPOT_LEN":248
+},
+
+piped = format friendly to beeing piped into other processes
+------------------------------------------------------------
+vdb-dump $vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -fpiped
+1, NAME: "EM7LVYS02FOYNU"
+1, SPOT_LEN: 284
+
+2, NAME: "EM7LVYS02GCAPL"
+2, SPOT_LEN: 262
+
+sra-dump = simulates the output of a deprecated tool
+------------------------------------------------------------
+vdb-dump $vdb-dump SRR000001 -R1-2 -CNAME,SPOT_LEN -fsra-dump
+1, NAME: EM7LVYS02FOYNU
+1, SPOT_LEN: 284
+
+2, NAME: EM7LVYS02GCAPL
+2, SPOT_LEN: 262
+
+fastq = produces fastq-output
+( the table needs to have a READ- and a QUALITY column, no splitting supported )
+-------------------------------------------------------
+vdb-dump $vdb-dump SRR000001 -R1 -ffastq
+ at SRR000001.1 EM7LVYS02FOYNU length=284
+TCAGATTCTCCTAGCCTACATCCGTACGAGTTAGCGTGGGATTACGAGGTGCACACCATTTCATTCCGTACGGGTAAATTTTTGTATTTTTAGCAGACGGCAGGGTTTCACCATGGTTGACCAACGTACTAATCTTGAACTCCTGACCTCAAGTGATTTGCCTGCCTTCAGCCTCCCAAAGTGACTGGGTATTACAGATGTGAGCGAGTTTGTGCCCAAGCCTTATAAGTAAATTTATAAATTTACATAATTTAAATGACTTATGCTTAGCGAAATAGGGTAAG
++SRR000001.1 EM7LVYS02FOYNU length=284
+=<8<85)9=9/3-8?68<7=8<3657747==49==+;FB2;A;5:'*>69<:74)9.;C?+;<B<B;(<';FA/;C>*GC8/%9<=GC8.#=2:5:16D==<EA2EA.;5=44<;2C=5;@73&<<2;5;6+9<?776+:24'26:7,<9A;=:;0C>*6?7<<C=D=<52?:9CA2CA23<2<;3CA12:A<9414<7<<6;99<2/=9#<;9B at 27.;=6>:77>:1<A>+CA138?<)C at 2166:A<B?->:%<<9<;33<;6?9;<;4=:%<$CA1+1%1
+
+fasta = produces fasta-output
+( the table needs to have a READ column )
+-------------------------------------------------------
+vdb-dump SRR000001 -R1 -f fasta
+>SRR000001.1 EM7LVYS02FOYNU length=284
+TCAGATTCTCCTAGCCTACATCCGTACGAGTTAGCGTGGGATTACGAGGTGCACACCATTTCATTCCGTA
+CGGGTAAATTTTTGTATTTTTAGCAGACGGCAGGGTTTCACCATGGTTGACCAACGTACTAATCTTGAAC
+TCCTGACCTCAAGTGATTTGCCTGCCTTCAGCCTCCCAAAGTGACTGGGTATTACAGATGTGAGCGAGTT
+TGTGCCCAAGCCTTATAAGTAAATTTATAAATTTACATAATTTAAATGACTTATGCTTAGCGAAATAGGG
+TAAG
+
+
+The --without_sra -n option:
+============================
+With this option you can switch off the special treatment (translation) of certain column-types
+
+vdb-dump SRR000001 -R1 -C SPOT_DESC,PLATFORM
+SPOT_DESC: spot_len=255, fixed_len=0, signal_len=400, clip_qual_right=235, num_reads=4
+ PLATFORM: SRA_PLATFORM_454
+
+vdb-dump SRR000001 -R1 -C SPOT_DESC,PLATFORM -n
+SPOT_DESC: [255, 0, 0, 0, 144, 1, 235, 0, 4, 0, 0, 0, 0, 0, 0, 0]
+ PLATFORM: 1
+
+
+The --table_enum -E option:
+===========================
+If the object is a vdb-database, enumerate the tables it contains.
+
+
+The --version -V option:
+========================
+Print the version of the vdb-manager used by vdb-dump.
+
+vdb-dump -V
+vdb-dump: 2.5.1
+
+
+The column_enum_short -o option:
+================================
+Enumerates the columns and the default type of each column
+vdb-dump SRR000001 -o
+
+BASE_COUNT (U64)
+BIO_BASE_COUNT (U64)
+CLIP_ADAPTER_LEFT (INSDC:coord:one)
+etc.
+
+
+The column_enum -O option:
+==========================
+Enumerates the columns and all available type of each column
+
+vdb-dump SRR000001 -O
+SRR000001.01 : (032 bits [01],      Int)  CLIP_QUALITY_LEFT
+      (INSDC:coord:one)
+   CLIP_QUALITY_LEFT.type[0] = INSDC:coord:one (dflt)
+   CLIP_QUALITY_LEFT.type[1] = U16
+   CLIP_QUALITY_LEFT.type[2] = INSDC:coord:zero
+
+SRR000001.02 : (032 bits [01],      Int)  CLIP_QUALITY_RIGHT
+      (INSDC:coord:one)
+  CLIP_QUALITY_RIGHT.type[0] = INSDC:coord:one (dflt)
+  CLIP_QUALITY_RIGHT.type[1] = U16
+  CLIP_QUALITY_RIGHT.type[2] = INSDC:coord:zero
+
+SRR000001.03 : (008 bits [01],     Uint)  COLOR_MATRIX
+      (U8)
+        COLOR_MATRIX.type[0] = U8 (dflt)
+
+etc.
+
+The --id_range -r option:
+=========================
+Print the row-range that a table contains.
+
+vdb-dump SRR000001 -r
+id-range: first-row = 1, row-count = 470985
+
+
+The --info option:
+==================
+prints a summary of meta-data about the accession
+
+vdb-dump SRR000001 --info
+acc    : SRR000001
+path   : /somepath/SRR/000000/SRR000001
+size   : 312,527,083
+type   : Table
+platf  : SRA_PLATFORM_454
+SEQ    : 470,985
+SCHEMA : NCBI:SRA:_454_:tbl:v2#1.0.7
+TIME   : 0x0000000055248a41 (04/07/2015 21:54)
+FMT    : SFF
+FMTVER : 2.4.5
+LDR    : sff-load.2.4.5
+LDRVER : 2.4.5
+LDRDATE: Feb 25 2015 (2/25/2015 0:0)
diff --git a/tools/vdb-dump/vdb-boot.c b/tools/vdb-dump/vdb-boot.c
new file mode 100644
index 0000000..9f86e42
--- /dev/null
+++ b/tools/vdb-dump/vdb-boot.c
@@ -0,0 +1,448 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <fmtdef.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define WITH_DNA
+
+/********************************************************************
+write procedure:
+(1)....KDirectoryNativeDir           ... make a root directory
+(2)....KDirectoryOpenDirUpdate       ... chroot to specific directory
+(3)....VDBManagerMakeUpdate          ... make manager for update
+(4)....VDBManagerMakeSchema          ... make schema
+(5)....VSchemaParseFile              ... load a schema from file
+(6)....VDBManagerCreateDB            ... let the manager create a DB
+(7)....VDatabaseCreateTable          ... create a Table for the DB
+(8)....VTableCreateCursorWrite       ... create a writable cursor
+(9)....VCursorAddColumn              ... add the column to write
+(10)...VCursorOpen                   ... open the cursor
+-----LOOP-----
+ (11)....VCursorOpenRow              ... open the row
+ (12)....VCursorWrite                ... write the data
+ (13)....VCursorCommitRow            ... commit the row
+ (14)....VCursorCloseRow             ... close the row
+-----END LOOP-----
+(15)...VCursorCommit                 ... commit the cursor
+(16)...VCursorRelease                ... destroy the cursor
+(17)...VTableRelease                 ... destroy the table
+(18)...VDatabaseRelease              ... destroy the database
+(19)...VSchemaRelease                ... destroy the schema
+(20)...VDBManagerRelease             ... destroy the manager
+(21)...KDirectoryRelease             ... destroy the chroot'ed dir
+(22)...KDirectoryRelease             ... destroy the root dir
+********************************************************************/
+
+
+/********************************************************************
+helper function needed by schema-dump
+********************************************************************/
+static
+rc_t CC flush ( void *dst, const void *buffer, size_t bsize )
+{
+    FILE *f = dst;
+    fwrite ( buffer, 1, bsize, f );
+    return 0;
+}
+
+/********************************************************************
+helper function to display failure or success message
+********************************************************************/
+static
+void display_rescode( const rc_t res, const char* failure, const char* success )
+{
+    if ( res != 0 )
+    {
+        if ( failure )
+            LOGERR( klogInt, res, failure );
+    }
+    else
+    {
+        if ( success )
+            LOGMSG( klogInfo, success );
+    }
+}
+
+/********************************************************************
+helper function to display the manager version
+********************************************************************/
+static
+rc_t show_manager_version( VDBManager *my_manager )
+{
+    uint32_t version;
+    rc_t res = VDBManagerVersion( my_manager, &version );
+    if ( res != 0 )
+    {
+        LOGERR ( klogInt, res, "failed to determine vdb mgr version" );
+    }
+    else
+    {
+        PLOGMSG ( klogInfo, ( klogInfo, "manager-version = $(maj).$(min).$(rel)",
+                  "vers=0x%X,maj=%u,min=%u,rel=%u"
+                              , version
+                              , version >> 24
+                              , ( version >> 16 ) & 0xFF
+                              , version & 0xFFFF ));
+    }
+    return res;
+}
+
+/* write context */
+typedef struct write_ctx
+{
+    uint32_t idx_line;
+    uint32_t idx_line_nr;
+    uint32_t idx_dna;
+    uint32_t idx_quality;
+    uint32_t line_nr;
+    void *buffer;
+    uint32_t count;
+} write_ctx;
+typedef write_ctx* p_write_ctx;
+
+p_write_ctx make_write_ctx( void )
+{
+    return calloc( 1, sizeof( write_ctx ) );
+}
+
+/********************************************************************
+helper function to write one data-cunk into one new row
+********************************************************************/
+static
+rc_t write_data_row( VCursor *my_cursor, p_write_ctx ctx )
+{
+    rc_t res = VCursorOpenRow( my_cursor );
+    /* display_rescode( res, "failed to open row", "row opened" ); */
+    if ( res == 0 )
+    {
+        /* write the ascii-line*/
+        res = VCursorWrite( my_cursor, ctx->idx_line, 8, ctx->buffer, 0, ctx->count );
+        display_rescode( res, "failed to write ascii-line", NULL );
+
+        /* write the line-number (zero-based) */
+        res = VCursorWrite( my_cursor, ctx->idx_line_nr, 32, &(ctx->line_nr), 0, 1 );
+        display_rescode( res, "failed to write line-nr", NULL );
+
+#ifdef WITH_DNA
+        /* write the ascii-line interpreted as dna-data */
+        res = VCursorWrite( my_cursor, ctx->idx_dna, 2, ctx->buffer, 0, ctx->count << 2 );
+        display_rescode( res, "failed to write dna-data", NULL );
+#endif
+
+        /* write the ascii-line interpreted as quality (array of 4 byte) */
+        res = VCursorWrite( my_cursor, ctx->idx_quality, 32, ctx->buffer, 0, ctx->count >> 2 );
+        display_rescode( res, "failed to write quality", NULL );
+        
+        res = VCursorCommitRow( my_cursor );
+        display_rescode( res, "failed to commit row", NULL );
+
+        res = VCursorCloseRow( my_cursor );
+    }
+    return res;
+}
+
+#define BUFLEN 120
+
+/********************************************************************
+reads the data-src-file in chunks and writes it with "write_data_chunk"
+********************************************************************/
+static
+rc_t write_data_loop( VCursor *my_cursor, p_write_ctx ctx, const KFile *data_src )
+{
+    char buf[ BUFLEN ];
+    char* read_dest = buf;
+    uint64_t file_pos = 0;
+    size_t num_to_read = BUFLEN - 1;
+    size_t num_read;
+    size_t chars_in_buf = 0;
+    size_t written = 0;
+    rc_t res;
+
+    ctx->line_nr = 0;
+    ctx->buffer = buf;
+    do {
+        res = KFileRead( data_src, file_pos, read_dest, num_to_read, &num_read );
+        if ( res != 0 )
+        {
+            LOGERR ( klogInt, res, "failed to read form KFile" );
+            num_read = 0;
+        }
+        else
+        {
+            if ( num_read > 0 )
+            {
+                char* lf;
+                chars_in_buf+=num_read;
+                file_pos+=num_read;
+                do {
+                    buf[chars_in_buf] = 0;
+                    lf = strchr( buf, 0x0A );
+                    if ( lf != NULL )
+                    {
+                        ctx->count = ( lf - buf );
+                        res = write_data_row( my_cursor, ctx );
+                        if ( res == 0 )
+                        {
+                            ctx->line_nr++;
+                            written += ctx->count;
+                            chars_in_buf -= ( ctx->count + 1 );
+                            memmove( buf, ++lf, chars_in_buf );
+                        }
+                        else
+                        {
+                            num_read = 0; /* terminates the outer do-loop */
+                        }
+                    }
+                } while ( ( lf != NULL )&&( num_read > 0 ) );
+                read_dest = buf + chars_in_buf;
+                num_to_read = BUFLEN - ( chars_in_buf + 1 );
+            }
+        }
+    } while ( num_read > 0 );
+
+    PLOGMSG ( klogInfo, ( klogInfo, "written $(n_lines) lines = $(n_bytes) bytes",
+                          "n_lines=%lu,n_bytes=%lu", ctx->line_nr, written ));
+    if ( ctx->line_nr > 0 )
+    {
+        res = VCursorCommit( my_cursor );
+        display_rescode( res, "failed to commit cursor", NULL );
+    }
+    return res;
+}
+
+
+/********************************************************************
+creates a writable cursor, adds 1 column, opens cursor and calls the write-loop
+********************************************************************/
+static
+rc_t create_cursor_and_write( VTable *my_table, const KFile *data_src  )
+{
+    VCursor *my_cursor;
+    p_write_ctx ctx = make_write_ctx();
+    uint32_t open_cols = 0, should_open = 0;
+    
+    rc_t res = VTableCreateCursorWrite( my_table, &my_cursor, kcmInsert );
+    display_rescode( res, "failed to create write-cursor", NULL );
+    if ( res == 0 )
+    {
+        res = VCursorAddColumn( my_cursor, &ctx->idx_line, "LINE" );
+        display_rescode( res, "failed to add LINE-column", NULL );
+        if ( res == 0 ) open_cols++;
+        should_open++;
+        
+        res = VCursorAddColumn( my_cursor, &ctx->idx_line_nr, "LINE_NR" );
+        display_rescode( res, "failed to add LINE_NR-column", NULL );
+        if ( res == 0 ) open_cols++;
+        should_open++;
+        
+#ifdef WITH_DNA
+        res = VCursorAddColumn( my_cursor, &ctx->idx_dna, "READ" );
+        display_rescode( res, "failed to add READ-column", NULL );
+        if ( res == 0 ) open_cols++;
+        should_open++;        
+#endif
+
+        res = VCursorAddColumn( my_cursor, &ctx->idx_quality, "QUALITY" );
+        display_rescode( res, "failed to add QUALITY-column", NULL );
+        if ( res == 0 ) open_cols++;        
+        should_open++;
+
+        if ( open_cols == should_open )
+        {
+            res = VCursorOpen( my_cursor );
+            display_rescode( res, "failed to open cursor", NULL );
+            if ( res == 0 )
+            {
+                res = write_data_loop( my_cursor, ctx, data_src );
+            }
+        }
+        res = VCursorRelease( my_cursor );
+    }
+    free( ctx );
+    return res;
+}
+
+/********************************************************************
+let the manager create a database with a schema, calls cursor-creation and write
+********************************************************************/
+static
+rc_t create_dababase_from_schema( VDBManager *my_manager, VSchema *my_schema, 
+                                  const char* db_path, const KFile *data_src  )
+{
+    VDatabase *my_database;
+    VTable *my_table;
+    rc_t res = VDBManagerCreateDB( my_manager, &my_database, my_schema, 
+                                   "DATA2DUMP:MyDatabase", kcmInit | kcmParents, "%s", db_path );
+    display_rescode( res, "failed to create database", "database created" );
+    if ( res == 0 )
+    {
+        res = VDatabaseCreateTable( my_database, &my_table, "test", kcmInit | kcmParents, "Tab1" );
+        display_rescode( res, "failed to create table", "table created" );
+        if ( res == 0 )
+        {
+            create_cursor_and_write( my_table, data_src );
+            res = VTableRelease( my_table );
+            display_rescode( res, "failed to release table", "table released" );
+        }
+        res = VDatabaseRelease( my_database );
+        display_rescode( res, "failed to release database", "database released" );
+    }
+    return res;
+} 
+
+/********************************************************************
+let the manager create a schema, calls dababase-creation etc.
+********************************************************************/
+static
+rc_t create_schema( VDBManager *my_manager, const char *schema_path, 
+                    const char *db_path, const KFile *data_src  )
+{
+    VSchema *schema;
+    /* empty schema, unless $VDB_ROOT tells it
+       where to find include files */
+    rc_t res = VDBManagerMakeSchema ( my_manager, & schema );
+    display_rescode( res, "failed to create schema", "schema created" );
+    if ( res == 0 )
+    {
+        /* load the schema from text */
+        res = VSchemaParseFile ( schema, "%s", schema_path );
+        if ( res != 0 )
+        {
+            PLOGERR ( klogInt,  (klogInt, res, "failed to load schema file '$(path)'",
+                                 "path=%s", schema_path ));
+        }
+        else
+        {
+            res = VSchemaDump ( schema, sdmPrint, "DATA2DUMP:MyDatabase", flush, stdout );
+            if ( res != 0 )
+                LOGERR ( klogInt, res, "failed to dump schema" );
+            else
+            {
+                res = create_dababase_from_schema( my_manager, schema, db_path, data_src );
+            }
+        }
+        res = VSchemaRelease ( schema );
+        display_rescode( res, "failed to release schema", "schema release" );
+    }
+    return res;
+}
+
+static
+rc_t build_test_db ( const char *schema_path, const char *db_path, const char *src_file )
+{
+    KDirectory *wd;
+    rc_t res = KDirectoryNativeDir ( & wd );
+    if ( res != 0 )
+        LOGERR ( klogSys, res, "failed to determine wd" );
+    else
+    {
+        KDirectory *root;
+
+#if 1 /* SHOULD WORK WHEN DISABLED
+         ENABLED FOR NOW AS A WORKAROUND */
+        root = wd;
+        KDirectoryAddRef ( root );
+#else
+        res = KDirectoryOpenDirUpdate ( wd, & root, true, "." );
+#endif
+        if ( res != 0 )
+            LOGERR ( klogSys, res, "failed to chroot to wd" );
+        else
+        {
+            VDBManager *my_manager;
+            res = VDBManagerMakeUpdate ( & my_manager, root );
+            if ( res != 0 )
+                LOGERR ( klogInt, res, "failed to open vdb manager" );
+            else
+            {
+                const KFile *data_src;
+                res = KDirectoryOpenFileRead ( wd, &data_src, "%s", src_file );
+                display_rescode( res, "failed to open src-file", "src-file opened" );
+                if ( res == 0 )
+                {
+                    show_manager_version( my_manager );
+                    res = create_schema( my_manager, schema_path, db_path, data_src );
+                    VDBManagerRelease ( my_manager );
+                    KFileRelease( data_src );
+                }
+            }
+            KDirectoryRelease ( root );
+        }
+        KDirectoryRelease ( wd );
+    }
+    return res;
+}
+
+
+ver_t CC KAppVersion ( void )
+{
+    return 0;
+}
+
+rc_t CC Usage (const Args * args)
+{
+    return 0;
+}
+
+rc_t CC Version ( const Args * args )
+{
+    return 0;
+}
+
+/****************************************************************************************
+
+                    argv[1]            argv[2]    argv[3]
+usage  : vdb-boot   shema              db_path    source-file
+example: vdb-boot   vdb-boot.vschema   test       vdb-boot.c
+
+ ***************************************************************************************/
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    if ( argc != 4 )
+    {
+        LOGMSG ( klogFatal, "aaaah!" );
+        return -1;
+    }
+    return build_test_db ( argv[1], argv[2], argv[3] );
+}
diff --git a/tools/vdb-dump/vdb-boot.vschema b/tools/vdb-dump/vdb-boot.vschema
new file mode 100644
index 0000000..7542a56
--- /dev/null
+++ b/tools/vdb-dump/vdb-boot.vschema
@@ -0,0 +1,52 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+version 1;
+
+include 'vdb/built-in.vschema';
+include 'insdc/insdc.vschema';
+
+/* it was INSDC:dna:2na */
+
+table DATA2DUMP : MyTable #1.0
+{
+    extern column ascii LINE = .LINE;
+    physical column ascii .LINE = LINE;
+
+    extern column U32 LINE_NR = .LINE_NR;
+    physical column U32 .LINE_NR = LINE_NR;
+
+    extern column INSDC:dna:2na READ = .READ;
+    physical column INSDC:dna:2na .READ = READ;
+
+    extern column I8[4] QUALITY = .QUALITY;
+    physical column I8[4] .QUALITY = QUALITY;
+};
+
+database DATA2DUMP : MyDatabase #1.0
+{
+    table DATA2DUMP : MyTable #1 test;
+};
diff --git a/tools/vdb-dump/vdb-dump-bin.c b/tools/vdb-dump/vdb-dump-bin.c
new file mode 100644
index 0000000..ea8cf85
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-bin.c
@@ -0,0 +1,1496 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/args.h>
+
+#include <insdc/insdc.h>
+
+#include <kdb/manager.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/num-gen.h>
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-coldefs.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+rc_t Quitting( void );
+
+static rc_t write_to_file( KFile * f, uint64_t * pos, const void * src, uint32_t len, const char * name )
+{
+    size_t num_writ;
+    size_t num_to_write = len;
+    rc_t rc = KFileWriteAll( f, *pos, src, num_to_write, &num_writ );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "failed to write to column $(col_name) at #%(pos)", "col_name=%s,pos=%ld", name, *pos ) );
+    }
+    else
+        *pos += num_writ;
+    return rc;
+}
+
+
+static rc_t read_from_file( const KFile * f, uint64_t pos, const uint8_t * dst,
+                            size_t dst_size, size_t * num_read, const char * name )
+{
+    rc_t rc = KFileReadAll ( f, pos, ( void * )dst, dst_size, num_read );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "failed to read from column $(col_name) at #%(pos)", "col_name=%s,pos=%ld", name, pos ) );
+    }
+    return rc;
+}
+
+
+typedef struct wr_bin_idx
+{
+    /* the file-handles */
+    KFile * bin;
+    KFile * idx;
+    const char name[ 256 ];
+    uint64_t bin_pos;
+    uint64_t idx_pos;
+    uint32_t first_len;
+    bool multi_value;
+} wr_bin_idx;
+
+
+static void release_wr_bin_idx( wr_bin_idx * c )
+{
+    if ( c != NULL )
+    {
+        if ( c->bin != NULL )
+            KFileRelease( c->bin );
+        if ( c->idx != NULL )
+            KFileRelease( c->idx );
+    }
+}
+
+
+static rc_t create_wr_bin_idx( KDirectory * dir, const char * col_name, wr_bin_idx * c )
+{
+    rc_t rc;
+
+    c->bin = NULL;
+    c->idx = NULL;
+    rc = KDirectoryCreateFile ( dir, &c->bin, false, 0664, kcmInit, "COL_%s.bin", col_name );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "failed to create bin-file for column $(col_name)",
+                 "col_name=%s", col_name ) );
+    }
+    else
+    {
+        rc = KDirectoryCreateFile ( dir, &c->idx, false, 0664, kcmInit, "COL_%s.idx", col_name );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc,
+                     "failed to create index-file for column $(col_name)",
+                     "col_name=%s", col_name ) );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        KFile * f = c->bin;
+        rc = KBufWriteFileMakeWrite ( &c->bin, f, 1024 * 1024 * 16 );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc,
+                     "failed to create buffer for bin-file for column $(col_name)",
+                     "col_name=%s", col_name ) );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        string_copy( ( char * )c->name, sizeof c->name,
+                     col_name, string_len( col_name, string_size( col_name ) ) );
+        c->bin_pos = 0;
+        c->idx_pos = 0;
+        c->first_len = 0xFFFFFFFF;
+        c->multi_value = false;
+    }
+
+    if ( rc != 0 )
+        release_wr_bin_idx( c );
+
+    return rc;
+}
+
+
+static rc_t write_bin_idx( wr_bin_idx * c, const void * data, uint32_t len )
+{
+    /* first write to index-file the position where the data will be written to */
+    rc_t rc = write_to_file( c->idx, &c->idx_pos, &c->bin_pos, sizeof c->bin_pos, c->name );
+
+    /* the write the length, it can be zero! */
+    if ( rc == 0 )
+        rc = write_to_file( c->idx, &c->idx_pos, &len, sizeof len, c->name );
+
+    /* the write the data, only if we have data! */
+    if ( rc == 0 && len > 0 )
+        rc = write_to_file( c->bin, &c->bin_pos, data, len, c->name );
+
+    if ( rc == 0 )
+    {
+        if ( c->first_len == 0xFFFFFFFF )
+            c->first_len = len;
+        else if( c->first_len != len )
+            c->multi_value = true;
+    }
+
+    return rc;
+}
+
+/*
+static rc_t set_bin_filesize( wr_bin_idx * c, uint64_t new_size )
+{
+    rc_t rc = KFileSetSize( c->bin, new_size );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "failed to set size of file to >%(fsize) for column $(col_name)", "fsize=%ld,col_name=%s", new_size, c->name ) );
+    }
+    return rc;
+}
+
+static rc_t write_bin_at( wr_bin_idx * c, uint64_t pos, const void * data, uint32_t len )
+{
+    uint64_t pos1 = pos;
+    rc_t rc = write_to_file( c->bin, &pos1, data, len, c->name );
+
+    if ( rc == 0 && c->first_len == 0xFFFFFFFF )
+        c->first_len = len;
+
+    return rc;
+}
+*/
+
+static rc_t truncate_idx( wr_bin_idx * c )
+{
+    uint64_t pos = 0;
+    rc_t rc = write_to_file( c->idx, &pos, &c->first_len, sizeof c->first_len, c->name );
+    if ( rc == 0 )
+    {
+        rc = KFileSetSize ( c->idx, pos );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc,
+                     "failed to truncate the index-file for column $(col_name)",
+                     "col_name=%s", c->name ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_create_dir( const char * path, KDirectory ** dir )
+{
+    rc_t rc = KDirectoryNativeDir ( dir );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+    }
+    else
+    {
+        if ( path != NULL )
+        {
+            rc = KDirectoryCreateDir ( *dir, 0775, kcmOpen, "%s", path );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc,
+                         "failed to create directory $(dir_name)", "dir_name=%s", path ) );
+                KDirectoryRelease ( *dir );
+            }
+            else
+            {
+                KDirectory * tmp = *dir;
+                rc = KDirectoryOpenDirUpdate ( tmp, dir, false, "%s", path );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogInt, ( klogInt, rc,
+                             "failed to open directory $(dir_name)", "dir_name=%s", path ) );
+                }
+                KDirectoryRelease( tmp );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_dump_column_rows( const char * path, const VCursor *cur, p_col_def col, struct num_gen * rows )
+{
+    KDirectory * dir;
+
+    rc_t rc = vdi_create_dir( path, &dir );
+    if ( rc == 0 )
+    {
+        wr_bin_idx wr;
+
+        rc = create_wr_bin_idx( dir, col->name, &wr );
+        if ( rc == 0 )
+        {
+            const struct num_gen_iter * iter;
+            rc = num_gen_iterator_make( rows, &iter );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "VCursorIdRange() failed" );
+            else
+            {
+                int64_t row_id;
+                while ( rc == 0 && num_gen_iterator_next( iter, &row_id, &rc ) )
+                {
+                    rc = Quitting();
+                    if ( rc == 0 )
+                    {
+                        const void * base;
+                        uint32_t elem_bits, boff, row_len;
+                        rc = VCursorCellDataDirect ( cur, row_id, col->idx,
+                                                     &elem_bits, &base, &boff, &row_len );
+                        if ( rc != 0 )
+                        {
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                     "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+                                     "col_name=%s,row_nr=%ld", col->name, row_id ) );
+                        }
+                        else
+                        {
+                            uint32_t len = ( elem_bits >> 3 ) * row_len;
+                            rc = write_bin_idx( &wr, base, len );
+                        }
+                    }
+                }
+                num_gen_iterator_destroy( iter );
+            }
+
+            if ( rc == 0 && !wr.multi_value )
+                rc = truncate_idx( &wr );
+
+            release_wr_bin_idx( &wr );
+        }
+        KDirectoryRelease ( dir );
+    }
+    return rc;
+}
+
+
+static rc_t vdi_dump_column( const p_dump_context ctx, const VCursor *cur, p_col_def col )
+{
+    int64_t  first;
+    uint64_t count;
+
+    rc_t rc = VCursorIdRange( cur, col->idx, &first, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VCursorIdRange() failed" );
+    }
+    else if ( count > 0 )
+    {
+        struct num_gen * rows = NULL;
+
+
+        if ( ctx->row_range == NULL )
+        {
+            /* the user did not give us a row-range, we take all rows of this column... */
+            rc = num_gen_make_from_range( &rows, first, count );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "num_gen_make_from_range() failed" );
+        }
+        else
+        {
+            /* the gave us a row-range, we parse that string and check agains the real row-count... */
+            rc = num_gen_make_from_str( &rows, ctx->row_range );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "num_gen_make_from_str() failed" );
+            else
+            {
+                rc = num_gen_trim( rows, first, count );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "num_gen_trim() failed" );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            if ( num_gen_empty( rows ) )
+            {
+                rc = RC( rcExe, rcDatabase, rcReading, rcRange, rcEmpty );
+                LOGERR( klogInt, rc, "no row-range(s) defined" );
+            }
+            else
+            {
+                rc = vdi_dump_column_rows( ctx->output_path, cur, col, rows ); /* <---- */
+            }
+        }
+
+        if ( rows != NULL )
+            num_gen_destroy( rows );
+    }
+    return rc;
+}
+
+
+static rc_t vdi_dump_columns( const p_dump_context ctx, const VCursor *cur, p_col_defs col_defs )
+{
+    rc_t rc = 0;
+    const Vector * v = &( col_defs->cols );
+    uint32_t start = VectorStart( v );
+    uint32_t end = start + VectorLength( v );
+    uint32_t i;
+
+    for ( i = start; rc == 0 && i < end; ++i )
+    {
+        p_col_def col = VectorGet ( v, i );
+        if ( col != NULL )
+            rc = vdi_dump_column( ctx, cur, col ); /* <---- */
+    }
+    return rc;
+}
+
+
+static uint32_t vdi_extract_or_parse_columns( const VTable * tab,
+                                              p_col_defs col_defs,
+                                              const char * columns,
+                                              const char * excluded_columns )
+{
+    uint32_t count = 0;
+    if ( col_defs != NULL )
+    {
+        bool cols_unknown = ( ( columns == NULL ) || ( string_cmp( columns, 1, "*", 1, 1 ) == 0 ) );
+        if ( cols_unknown )
+            /* the user does not know the column-names or wants all of them */
+            count = vdcd_extract_from_table( col_defs, tab );
+        else
+            /* the user knows the names of the wanted columns... */
+            count = vdcd_parse_string( col_defs, columns, tab );
+
+        if ( excluded_columns != NULL )
+            vdcd_exclude_these_columns( col_defs, excluded_columns );
+    }
+    return count;
+}
+
+
+rc_t vdi_dump_opened_table( const p_dump_context ctx, const VTable * tab )
+{
+    rc_t rc = 0;
+
+    col_defs * col_defs;
+
+    if ( !vdcd_init( &col_defs, ctx->max_line_len ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        LOGERR( klogInt, rc, "col_defs_init() failed" );
+    }
+    else
+    {
+        uint32_t n = vdi_extract_or_parse_columns( tab, col_defs, ctx->columns, ctx->excluded_columns );
+        if ( n < 1 )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            LOGERR( klogInt, rc, "vdm_extract_or_parse_columns() failed" );
+        }
+        else
+        {
+            const VCursor * cur;
+
+            rc = VTableCreateCachedCursorRead( tab, &cur, ctx->cur_cache_size );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VTableCreateCachedCursorRead() failed" );
+            }
+            else
+            {
+                n = vdcd_add_to_cursor( col_defs, cur );
+                if ( n < 1 )
+                {
+                    rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                    LOGERR( klogInt, rc, "vdcd_add_to_cursor() failed" );
+                }
+                else
+                {
+                    rc = VCursorOpen( cur );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "VCursorOpen() failed" );
+                    }
+                    else
+                        rc = vdi_dump_columns( ctx, cur, col_defs );    /* <---- */
+                }
+            }
+            VCursorRelease( cur );
+        }
+        vdcd_destroy( col_defs );
+    }
+
+    return rc;
+}
+
+
+typedef struct rd_bin_idx
+{
+    /* the file-handles */
+    const KFile * bin;
+    const KFile * idx;
+    const char name[ 256 ];
+    uint64_t bin_file_size;
+    uint64_t idx_file_size;
+    uint64_t row_count;
+    uint32_t common_len;
+} rd_bin_idx;
+
+
+static void release_rd_bin_idx( rd_bin_idx * c )
+{
+    if ( c != NULL )
+    {
+        if ( c->bin != NULL )
+            KFileRelease( c->bin );
+        if ( c->idx != NULL )
+            KFileRelease( c->idx );
+    }
+}
+
+
+static rc_t create_rd_bin_idx( const KDirectory * dir, const char * col_name, rd_bin_idx * c )
+{
+    rc_t rc;
+
+    rc = KDirectoryOpenFileRead( dir, &c->bin, "COL_%s.bin", col_name );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "failed to open bin-file for column $(col_name)", "col_name=%s", col_name ) );
+    }
+    else
+    {
+        rc = KDirectoryOpenFileRead( dir, &c->idx, "COL_%s.idx", col_name );
+        if ( rc != 0 )
+        {
+            PLOGERR( klogInt, ( klogInt, rc,
+                     "failed to open idx-file for column $(col_name)", "col_name=%s", col_name ) );
+        }
+        else
+        {
+            string_copy( ( char * )c->name, sizeof c->name,
+                         col_name, string_len( col_name, string_size( col_name ) ) );
+            c->bin_file_size = 0;
+            c->idx_file_size = 0;
+            c->row_count = 0;
+            c->common_len = 0;
+
+            rc = KFileSize ( c->bin, &c->bin_file_size );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogInt, ( klogInt, rc,
+                         "failed to get filesize of bin-file for $(col_name)", "col_name=%s", col_name ) );
+            }
+            else
+            {
+                rc = KFileSize ( c->idx, &c->idx_file_size );
+                if ( rc != 0 )
+                {
+                    PLOGERR( klogInt, ( klogInt, rc,
+                             "failed to get filesize of idx-file for $(col_name)", "col_name=%s", col_name ) );
+                }
+                else
+                {
+                    /* calculate row-count */
+                    if ( c->idx_file_size == sizeof c->common_len )
+                    {
+                        size_t num_read;
+                        /* read the common length out of index-file at pos 0, divide bin_file_size by common length */
+                        rc = read_from_file( c->idx, 0, (void *)&c->common_len, sizeof c->common_len, &num_read, col_name );
+                        if ( rc == 0 && c->common_len > 0 )
+                            c->row_count = ( c->bin_file_size / c->common_len );
+                    }
+                    else
+                    {
+                        /* divide the idx_file_size by 12 ( 8 bytes offset + 4 bytes length per row ) */
+                        c->row_count = ( c->idx_file_size / 12 );
+                    }
+                }
+            }
+        }
+
+        if ( rc != 0 )
+            release_rd_bin_idx( c );
+    }
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_row_len( rd_bin_idx * c, uint64_t row_id, uint32_t * row_len )
+{
+    rc_t rc = 0;
+    size_t num_read;
+
+    if ( c->common_len > 0 )
+        *row_len = c->common_len;
+    else
+        rc = read_from_file( c->idx, ( row_id * 12 ) + 8, (void *)row_len, sizeof *row_len, &num_read, c->name );
+
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_row_pos( rd_bin_idx * c, uint64_t row_id, uint64_t * row_pos )
+{
+    rc_t rc = 0;
+    size_t num_read;
+
+    if ( c->common_len > 0 )
+        *row_pos = ( c->common_len * row_id );
+    else
+        rc = read_from_file( c->idx, row_id * 12, (void *)row_pos, sizeof *row_pos, &num_read, c->name );
+
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_64( rd_bin_idx * c, uint64_t row_id, uint64_t * values, uint32_t value_count )
+{
+    uint64_t pos;
+    size_t num_read;
+
+    rc_t rc = rd_bin_idx_row_pos( c, row_id, &pos );
+    if ( rc == 0 )
+        rc = read_from_file( c->bin, pos, (void *)values,
+                             ( sizeof *values ) * value_count, &num_read, c->name );
+
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_32( rd_bin_idx * c, uint64_t row_id, uint32_t * values, uint32_t value_count )
+{
+    uint64_t pos;
+    size_t num_read;
+
+    rc_t rc = rd_bin_idx_row_pos( c, row_id, &pos );
+    if ( rc == 0 )
+        rc = read_from_file( c->bin, pos, (void *)values,
+                             ( sizeof *values ) * value_count, &num_read, c->name );
+
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_8( rd_bin_idx * c, uint64_t row_id, uint8_t * values, uint32_t value_count )
+{
+    uint64_t pos;
+    size_t num_read;
+
+    rc_t rc = rd_bin_idx_row_pos( c, row_id, &pos );
+    if ( rc == 0 )
+        rc = read_from_file( c->bin, pos, (void *)values,
+                             ( sizeof *values ) * value_count, &num_read, c->name );
+
+    return rc;
+}
+
+
+static rc_t rd_bin_idx_char( rd_bin_idx * c, uint64_t row_id, uint32_t offset, uint32_t len,
+                             char * dst, size_t dst_size, size_t * num_read )
+{
+    uint64_t pos;
+    uint32_t row_len;
+
+    rc_t rc = rd_bin_idx_row_pos( c, row_id, &pos );
+
+    if ( rc == 0 )
+    {
+        pos += offset;
+        if ( len > 0 )
+            row_len = len;
+        else
+            rc = rd_bin_idx_row_len( c, row_id, &row_len );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( row_len >= dst_size )
+            row_len = dst_size - 1;
+        rc = read_from_file( c->bin, pos, (void *)dst, row_len, num_read, c->name );
+    }
+    return rc;
+}
+
+
+/* -----------------------------------------------------------------------------------------------------------
+ phase 1
+
+ input:     COL_PRIMARY_ALIGNMENT_ID.[bin] from SEQUENCE
+            COL_REF_POS.[bin] from PRIMARY_ALIGNMENT
+            COL_REF_ID.[bin] from PRIMARY_ALIGNMENT
+            COL_REF_ORIENTATION.[bin] from PRIMARY_ALIGNMENT
+            COL_SEQ_READ_ID.[bin] from PRIMARY_ALIGNMENT
+
+ output:    TMP_MATE_REF_POS.[bin] ... the reference position of the mate
+            TMP_MATE_REF_ID.[bin]  ... the reference id ( idx to name ) of the mate
+            TMP_MATE_REF_ORIENTATION.[bin] ... the orientation of the mate
+
+ */
+typedef struct p1_ctx
+{
+    /* the input files */
+
+    /* originated from PRIMARY_ALIGNMENT-table */
+    rd_bin_idx SEQ_SPOT_ID;
+    rd_bin_idx MAPQ;
+    rd_bin_idx REF_POS;
+    rd_bin_idx REF_LEN;
+    rd_bin_idx CIGAR;
+    rd_bin_idx READ;
+    rd_bin_idx REF_ID;
+    rd_bin_idx REF_ORIENTATION;
+
+    /* originated from SEQUENCE-table */
+    rd_bin_idx PRIMARY_ALIGNMENT_ID;
+    rd_bin_idx QUALITY;
+    rd_bin_idx READ_LEN;
+    rd_bin_idx READ_START;
+    rd_bin_idx READ_FILTER;
+
+    /* originated from REFERENCE-table */
+    rd_bin_idx NAME;
+} p1_ctx;
+
+
+static void release_p1_ctx( p1_ctx * p1_ctx )
+{
+    release_rd_bin_idx( &p1_ctx->SEQ_SPOT_ID );
+    release_rd_bin_idx( &p1_ctx->MAPQ );
+    release_rd_bin_idx( &p1_ctx->REF_POS );
+    release_rd_bin_idx( &p1_ctx->REF_LEN );
+    release_rd_bin_idx( &p1_ctx->CIGAR );
+    release_rd_bin_idx( &p1_ctx->READ );
+    release_rd_bin_idx( &p1_ctx->REF_ID );
+    release_rd_bin_idx( &p1_ctx->REF_ORIENTATION );
+
+    release_rd_bin_idx( &p1_ctx->PRIMARY_ALIGNMENT_ID );
+    release_rd_bin_idx( &p1_ctx->QUALITY );
+    release_rd_bin_idx( &p1_ctx->READ_LEN );
+    release_rd_bin_idx( &p1_ctx->READ_START );
+    release_rd_bin_idx( &p1_ctx->READ_FILTER );
+
+    release_rd_bin_idx( &p1_ctx->NAME );
+}
+
+
+static rc_t init_p1_ctx( KDirectory * dir, p1_ctx * p1_ctx )
+{
+    rc_t rc;
+
+    memset( p1_ctx, 0, sizeof * p1_ctx );
+
+    rc = create_rd_bin_idx( dir, "SEQ_SPOT_ID", &p1_ctx->SEQ_SPOT_ID );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "MAPQ", &p1_ctx->MAPQ );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "REF_POS", &p1_ctx->REF_POS );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "REF_LEN", &p1_ctx->REF_LEN );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "CIGAR_SHORT", &p1_ctx->CIGAR );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "READ", &p1_ctx->READ );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "REF_ID", &p1_ctx->REF_ID );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "REF_ORIENTATION", &p1_ctx->REF_ORIENTATION );
+
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "PRIMARY_ALIGNMENT_ID", &p1_ctx->PRIMARY_ALIGNMENT_ID );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "QUALITY", &p1_ctx->QUALITY );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "READ_LEN", &p1_ctx->READ_LEN );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "READ_START", &p1_ctx->READ_START );
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "READ_FILTER", &p1_ctx->READ_FILTER );
+
+    if ( rc == 0 )
+        rc = create_rd_bin_idx( dir, "NAME", &p1_ctx->NAME );
+
+
+    if ( rc != 0 )
+        release_p1_ctx( p1_ctx );
+    return rc;
+}
+
+
+static uint32_t vdi_calc_flag( bool each_fragment_aligned,
+                               bool this_fragment_not_aligned,
+                               bool mate_not_aligned,
+                               bool this_fragment_reversed,
+                               bool mate_reversed,
+                               bool this_fragment_is_first,
+                               bool this_fragment_is_last,
+                               bool this_fragment_is_secondary,
+                               bool this_fragment_not_passing_quality_control,
+                               bool this_fragment_is_pcr_or_duplicate )
+{
+    uint32_t res = 0x001;
+    if ( each_fragment_aligned ) res |= 0x002;
+    if ( this_fragment_not_aligned ) res |= 0x004;
+    if ( mate_not_aligned ) res |= 0x008;
+    if ( this_fragment_reversed ) res |= 0x010;
+    if ( mate_reversed ) res |= 0x020;
+    if ( this_fragment_is_first ) res |= 0x040;
+    if ( this_fragment_is_last ) res |= 0x080;
+    if ( this_fragment_is_secondary ) res |= 0x100;
+    if ( this_fragment_not_passing_quality_control ) res |= 0x200;
+    if ( this_fragment_is_pcr_or_duplicate ) res |= 0x400;
+    return res;
+}
+
+
+static int32_t vdi_calc_tlen( const uint32_t self_ref_pos,
+                              const uint32_t mate_ref_pos,
+                              const uint32_t self_ref_len,
+                              const uint32_t mate_ref_len,
+                              const bool on_same_ref,
+                              const bool first_read )
+{
+    int32_t res = 0;
+    if ( on_same_ref && ( self_ref_pos > 0 ) && ( mate_ref_pos > 0 ) )
+    {
+        const uint32_t self_right = self_ref_pos + self_ref_len;
+        const uint32_t mate_right = mate_ref_pos + mate_ref_len;
+        const uint32_t leftmost   = ( self_ref_pos < mate_ref_pos ) ? self_ref_pos : mate_ref_pos;
+        const uint32_t rightmost  = ( self_right > mate_right ) ? self_right : mate_right;
+        const uint32_t tlen = rightmost - leftmost;
+
+        /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+        if ( ( self_ref_pos <= mate_ref_pos && self_right >= mate_right ) || /* mate fully contained within self or */
+             ( mate_ref_pos <= self_ref_pos && mate_right >= self_right ) )  /* self fully contained within mate; */
+        {
+            if ( self_ref_pos < mate_ref_pos || ( first_read && self_ref_pos == mate_ref_pos ) )
+                res = tlen;
+            else
+                res = -( ( int32_t )tlen );
+        }
+        else if ( ( self_right == mate_right && mate_ref_pos == leftmost ) || /* both are rightmost, but mate is leftmost */
+                   ( self_right == rightmost ) )
+        {
+            res = -( ( int32_t )tlen );
+        }
+        else
+            res = tlen;
+    }
+    return res;
+}
+
+
+static rc_t vdi_get_SEQ_SPOT_ID( p1_ctx * p1_ctx, uint64_t alignment_id, uint64_t * dst )
+{
+    rc_t rc = rd_bin_idx_64( &p1_ctx->SEQ_SPOT_ID, alignment_id, dst, 1 );
+    return rc;
+}
+
+
+static rc_t vdi_get_MATE_ID( p1_ctx * p1_ctx, uint64_t seq_spot_id_1_based, uint64_t alignment_id_1_based,
+                            uint64_t * dst, bool * first )
+{
+    uint64_t AL_IDS[ 2 ];
+    rc_t rc = rd_bin_idx_64( &p1_ctx->PRIMARY_ALIGNMENT_ID, seq_spot_id_1_based - 1, AL_IDS, 2 );
+    if ( rc == 0 )
+    {
+        if ( AL_IDS[ 0 ] == alignment_id_1_based )
+        {
+            *dst = AL_IDS[ 1 ];
+            *first = true;
+        }
+        else if ( AL_IDS[ 1 ] == alignment_id_1_based )
+        {
+            *dst = AL_IDS[ 0 ];
+            *first = false;
+        }
+        else
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            PLOGERR( klogInt, ( klogInt, rc,
+                     "given ALIGNMENT_ID #$(al_id) not found in SEQUENCE-ID #$(seq_id)",
+                     "al_id=%lu,seq_id=%lu", alignment_id_1_based, seq_spot_id_1_based ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_get_REF_ID( p1_ctx * p1_ctx, uint64_t alignment_id_zero_based, uint64_t * dst )
+{
+    rc_t rc = rd_bin_idx_64( &p1_ctx->REF_ID, alignment_id_zero_based, dst, 1 );
+    return rc;
+}
+
+
+static rc_t vdi_get_REF_POS( p1_ctx * p1_ctx, uint64_t alignment_id, uint32_t * dst )
+{
+    rc_t rc = rd_bin_idx_32( &p1_ctx->REF_POS, alignment_id, dst, 1 );
+    if ( rc == 0 ) *dst += 1;
+    return rc;
+}
+
+
+static rc_t vdi_get_REF_LEN( p1_ctx * p1_ctx, uint64_t alignment_id, uint32_t * dst )
+{
+    rc_t rc = rd_bin_idx_32( &p1_ctx->REF_LEN, alignment_id, dst, 1 );
+    return rc;
+}
+
+
+static rc_t vdi_get_REF_ORIENTATION( p1_ctx * p1_ctx, uint64_t alignment_id, bool * dst )
+{
+    uint8_t orientation;
+    rc_t rc = rd_bin_idx_8( &p1_ctx->REF_ORIENTATION, alignment_id, &orientation, 1 );
+    if ( rc == 0 ) *dst = ( orientation != 0 );
+    return rc;
+}
+
+
+static rc_t vdi_generate_QNAME( p1_ctx * p1_ctx, uint64_t id, char * dst, size_t dst_size )
+{
+    rc_t rc = string_printf ( dst, dst_size, NULL, "%lu", id );
+    return rc;
+}
+
+
+static rc_t vdi_generate_RNAME( p1_ctx * p1_ctx, uint64_t ref_id_1_based, char * dst, size_t dst_size )
+{
+    size_t num_read;
+    rc_t rc = rd_bin_idx_char( &p1_ctx->NAME, ref_id_1_based - 1, 0, 0, dst, dst_size, &num_read );
+    if ( rc == 0 && num_read < dst_size )
+        dst[ num_read ] = 0;
+    return rc;
+}
+
+
+static rc_t vdi_generate_MAPQ( p1_ctx * p1_ctx, uint64_t alignment_id, uint32_t * dst )
+{
+    rc_t rc = rd_bin_idx_32( &p1_ctx->MAPQ, alignment_id, dst, 1 );
+    return rc;
+}
+
+
+static rc_t vdi_generate_CIGAR( p1_ctx * p1_ctx, uint64_t alignment_id, char * dst, size_t dst_size )
+{
+    size_t num_read;
+    rc_t rc = rd_bin_idx_char( &p1_ctx->CIGAR, alignment_id, 0, 0, dst, dst_size, &num_read );
+    if ( rc == 0 && num_read < dst_size )
+        dst[ num_read ] = 0;
+    return rc;
+}
+
+
+static rc_t vdi_generate_SEQ( p1_ctx * p1_ctx, uint64_t alignment_id, char * dst, size_t dst_size )
+{
+    size_t num_read;
+    rc_t rc = rd_bin_idx_char( &p1_ctx->READ, alignment_id, 0, 0, dst, dst_size, &num_read );
+    if ( rc == 0 && num_read < dst_size )
+        dst[ num_read ] = 0;
+    return rc;
+}
+
+
+static rc_t vdi_generate_FRAG( p1_ctx * p1_ctx, uint64_t seq_spot_id_1_based, bool first,
+                               uint32_t * frag_start, uint32_t * frag_len, uint8_t * filter )
+{
+    uint32_t rd_start[ 2 ];
+    rc_t rc = rd_bin_idx_32( &p1_ctx->READ_START, seq_spot_id_1_based - 1, rd_start, 2 );
+    if ( rc == 0 )
+    {
+        uint32_t rd_len[ 2 ];
+        rc = rd_bin_idx_32( &p1_ctx->READ_LEN, seq_spot_id_1_based - 1, rd_len, 2 );
+        if ( rc == 0 )
+        {
+            uint8_t rd_filter[ 2 ];
+            rc = rd_bin_idx_8( &p1_ctx->READ_FILTER, seq_spot_id_1_based - 1, rd_filter, 2 );
+            if ( rc == 0 )
+            {
+                uint32_t idx = first ? 0 : 1;
+                *frag_start = rd_start[ idx ];
+                *frag_len = rd_len[ idx ];
+                *filter = rd_filter[ idx ];
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_generate_QUAL( p1_ctx * p1_ctx, uint64_t seq_spot_id_1_based,
+                               uint32_t start, uint32_t len, char * dst, size_t dst_size )
+{
+    /* how many entries in READ_START and READ_LEN do we have? ( size is 32 bit ) */
+    size_t num_read;
+    rc_t rc = rd_bin_idx_char( &p1_ctx->QUALITY, seq_spot_id_1_based - 1, start, len, dst, dst_size, &num_read );
+    if ( rc == 0 && num_read < dst_size )
+    {
+        uint32_t i;
+        for ( i = 0; i < num_read; ++i )
+            dst[ i ] += 33; 
+        dst[ num_read ] = 0;
+    }
+    return rc;
+}
+
+
+static void reverse_buffer( char * dst, const char * src, size_t len )
+{
+    size_t i, j;
+    for ( i = 0, j = len - 1; i < len; ++i, --j )
+        dst[ i ] = src[ j ];
+}
+
+
+typedef struct alignment
+{
+    char REF_NAME[ 256 ];
+    uint64_t id_one_based;
+    uint64_t ref_id_one_based;
+    uint32_t REF_POS_one_based;
+    uint32_t REF_LEN;
+    bool aligned;
+    bool first;
+    bool reversed;
+} alignment;
+
+
+/* ----------------------------------------------------------------------------------------------------------- */
+static rc_t vdi_bin_phase_1_row( const p_dump_context ctx, p1_ctx * p1_ctx, int64_t row_id )
+{
+    rc_t rc;
+
+    alignment self, mate;
+
+    char QNAME[ 256 ];
+    char CIGAR[ 512 ];
+    char SEQ[ 2048 ];
+    char QUAL[ 2048 ];
+    char QUALR[ 2048 ];
+
+    uint64_t SEQ_SPOT_ID_1_based;
+    uint32_t FLAG, MAPQ;
+    int32_t TLEN;
+    uint32_t frag_start, frag_len;
+    uint8_t filter;
+    bool on_same_reference = false;
+
+    /* first we have to collect a lot of helper values... */
+    memset( &self, 0, sizeof self );
+    memset( &mate, 0, sizeof mate );
+
+    /* -------------------------------------------------------------------------------------------------------- */
+    self.id_one_based = (  row_id + 1 );
+    self.aligned = true;
+
+    /* get the row-id (1-based) of the sequence this alignment belongs to */
+    rc = vdi_get_SEQ_SPOT_ID( p1_ctx, row_id, &SEQ_SPOT_ID_1_based );
+    
+    /* get the row-id (1-based) of the mate of this alignment ( 0...not mated )*/
+    if ( rc == 0 )
+        rc = vdi_get_MATE_ID( p1_ctx, SEQ_SPOT_ID_1_based, self.id_one_based, &mate.id_one_based, &self.first );
+    if ( rc == 0 )
+    {
+        mate.first = !self.first;
+        mate.aligned = ( mate.id_one_based > 0 );
+    }
+
+    /* get the row-id of the Reference this alignment belongs to */
+    if ( rc == 0 )
+        rc = vdi_get_REF_ID( p1_ctx, row_id, &self.ref_id_one_based );
+
+    /* get the row-id of the Reference the mate belongs to */
+    if ( rc == 0 && mate.aligned )
+        rc = vdi_get_REF_ID( p1_ctx, mate.id_one_based - 1, &mate.ref_id_one_based );
+
+    if ( rc == 0 && mate.aligned )
+        on_same_reference = ( self.ref_id_one_based == mate.ref_id_one_based );
+
+    /* get the position on the reference ( 0 based ) of this alignment */
+    if ( rc == 0 )
+        rc = vdi_get_REF_POS( p1_ctx, row_id, &self.REF_POS_one_based );
+
+    /* get the position on the reference ( 0 based ) of the mate */
+    if ( rc == 0 && mate.aligned )
+        rc = vdi_get_REF_POS( p1_ctx, mate.id_one_based - 1, &mate.REF_POS_one_based );
+
+    /* get the length of the alignment on the reference */
+    if ( rc == 0 )
+        rc = vdi_get_REF_LEN( p1_ctx, self.id_one_based - 1, &self.REF_LEN );
+
+    /* get the length of the mate on the reference */
+    if ( rc == 0 && mate.aligned )
+        rc = vdi_get_REF_LEN( p1_ctx, mate.id_one_based - 1, &mate.REF_LEN );
+
+    /* get the reference-name of this alignment */
+    if ( rc == 0 )
+        rc = vdi_generate_RNAME( p1_ctx, self.ref_id_one_based, self.REF_NAME, sizeof self.REF_NAME );
+    
+    /* get the reference-name of the mate */
+    if ( rc == 0 && mate.aligned && !on_same_reference )
+        rc = vdi_generate_RNAME( p1_ctx, mate.ref_id_one_based, mate.REF_NAME, sizeof mate.REF_NAME );
+
+    if ( rc == 0 )
+        rc = vdi_get_REF_ORIENTATION( p1_ctx, self.id_one_based - 1, &self.reversed );
+
+    if ( rc == 0 && mate.aligned )
+        rc = vdi_get_REF_ORIENTATION( p1_ctx, mate.id_one_based - 1, &mate.reversed );
+
+    /* if the mate is aligned and the ref-ids dont match, compare the strings to find out if they are
+       on the same reference */
+    if ( rc == 0 && mate.aligned && !on_same_reference )
+    {
+        size_t l1 = string_size( self.REF_NAME );
+        size_t l2 = string_size( mate.REF_NAME );
+        if ( l1 == l2 )
+        {
+            int diff = string_cmp ( self.REF_NAME, l1, mate.REF_NAME, l2, l1 );
+            on_same_reference = ( diff == 0 );
+        }
+    }
+
+    TLEN = vdi_calc_tlen( self.REF_POS_one_based, mate.REF_POS_one_based,
+                          self.REF_LEN, mate.REF_LEN, on_same_reference, self.first );
+
+    /* -------------------------------------------------------------------------------------------------------- */
+    if ( rc == 0 )
+        rc = vdi_generate_QNAME( p1_ctx, SEQ_SPOT_ID_1_based, QNAME, sizeof QNAME );
+
+    if ( rc == 0 )
+        rc = vdi_generate_MAPQ( p1_ctx, row_id, &MAPQ );
+
+    if ( rc == 0 )
+        rc = vdi_generate_CIGAR( p1_ctx, row_id, CIGAR, sizeof CIGAR );
+
+    if ( rc == 0 )
+        rc = vdi_generate_SEQ( p1_ctx, row_id, SEQ, sizeof SEQ );
+
+    if ( rc == 0 )
+        rc = vdi_generate_FRAG( p1_ctx, SEQ_SPOT_ID_1_based, self.first,
+                                &frag_start, &frag_len, &filter );
+
+    if ( rc == 0 )
+        rc = vdi_generate_QUAL( p1_ctx, SEQ_SPOT_ID_1_based, frag_start, frag_len, QUAL, sizeof QUAL );
+
+    if ( rc == 0 && self.reversed )
+        reverse_buffer( QUALR, QUAL, string_size( QUAL ) );
+        
+    if ( rc == 0 )
+    {
+        bool each_fragment_aligned = ( self.aligned && mate.aligned );
+        bool this_fragment_not_aligned = false;
+        bool mate_not_aligned = !mate.aligned;
+        bool this_fragment_reversed = self.reversed;
+        bool mate_reversed = mate.reversed;
+        bool this_fragment_is_first = self.first;
+        bool this_fragment_is_last = !self.first;
+        bool this_fragment_is_secondary = false;
+        bool this_fragment_not_passing_quality_control = ( ( filter & READ_FILTER_REJECT ) > 0 );
+        bool this_fragment_is_pcr_or_duplicate = ( ( filter & READ_FILTER_CRITERIA ) > 0 );
+
+        FLAG = vdi_calc_flag( each_fragment_aligned,
+                              this_fragment_not_aligned,
+                              mate_not_aligned,
+                              this_fragment_reversed,
+                              mate_reversed,
+                              this_fragment_is_first,
+                              this_fragment_is_last,
+                              this_fragment_is_secondary,
+                              this_fragment_not_passing_quality_control,
+                              this_fragment_is_pcr_or_duplicate );
+    }
+
+    if ( rc == 0 )
+        rc = KOutMsg( "%s\t%u\t%s\t%u\t%d\t%s\t",
+                      QNAME, FLAG, self.REF_NAME, self.REF_POS_one_based, MAPQ, CIGAR );
+
+    if ( rc == 0 )
+    {
+        if ( mate.aligned )
+        {
+            if ( on_same_reference )
+                rc = KOutMsg( "=\t%u\t%d\t", mate.REF_POS_one_based, TLEN );
+            else
+                rc = KOutMsg( "%s\t%u\t%d\t", mate.REF_NAME, mate.REF_POS_one_based, TLEN );
+        }
+        else
+            rc = KOutMsg( "*\t0\t0\t" );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( self.reversed )
+            rc = KOutMsg( "%s\t%s\n", SEQ, QUALR );
+        else
+            rc = KOutMsg( "%s\t%s\n", SEQ, QUAL );
+    }
+    return rc;
+}
+
+static rc_t vdi_bin_phase_1( KDirectory * dir, const p_dump_context ctx )
+{
+    p1_ctx p1_ctx;
+    rc_t rc = init_p1_ctx( dir, &p1_ctx );
+    if ( rc == 0 )
+    {
+        struct num_gen * rows = NULL;
+        uint64_t row_count = p1_ctx.REF_POS.row_count;
+
+        if ( ctx->row_range == NULL )
+        {
+            /* the user did not give us a row-range, we take all rows of this column... */
+            rc = num_gen_make_from_range( &rows, 0, row_count );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "num_gen_make_from_range() failed" );
+        }
+        else
+        {
+            /* the gave us a row-range, we parse that string and check agains the real row-count... */
+            rc = num_gen_make_from_str( &rows, ctx->row_range );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "num_gen_make_from_str() failed" );
+            else
+            {
+                rc = num_gen_trim( rows, 0, row_count );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "num_gen_trim() failed" );
+            }
+        }
+
+        if ( rc == 0 && num_gen_empty( rows ) )
+        {
+            rc = RC( rcExe, rcDatabase, rcReading, rcRange, rcEmpty );
+            LOGERR( klogInt, rc, "no row-range(s) defined" );
+        }
+
+        if ( rc == 0 )
+        {
+            const struct num_gen_iter * iter;
+            rc = num_gen_iterator_make( rows, &iter );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "num_gen_iterator_make() failed" );
+            else
+            {
+                int64_t row_id;
+                while ( rc == 0 && num_gen_iterator_next( iter, &row_id, &rc ) )
+                {
+                    rc = Quitting();
+                    if ( rc == 0 )
+                        rc = vdi_bin_phase_1_row( ctx, &p1_ctx, row_id );
+                }
+                num_gen_iterator_destroy( iter );
+            }
+        }
+
+        if ( rows != NULL )
+            num_gen_destroy( rows );
+
+        release_p1_ctx( &p1_ctx );
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------------------------------------- */
+
+rc_t vdi_bin_phase( const p_dump_context ctx, Args * args )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else if ( count < 1 )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        LOGERR( klogInt, rc, "parameter missing ( path to bin-files )" );
+    }
+    else
+    {
+        const char *bin_path = NULL;
+        rc = ArgsParamValue( args, 0, (const void**)&bin_path );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ArgsParamValue() failed" );
+        }
+        else
+        {
+            KDirectory *dir;
+            rc = vdi_create_dir( bin_path, &dir );
+            if ( rc == 0 )
+            {
+                switch( ctx->phase )
+                {
+                    case 1  : vdi_bin_phase_1( dir, ctx ); break;
+                    default : KOutMsg( "phase %d unknown\n", ctx->phase );
+                }
+                KDirectoryRelease( dir );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------------------------------------- */
+#define SLICE_COL_CG_LOW    0
+#define SLICE_COL_CG_HIGH   1
+#define SLICE_COL_SEQ_ID    2
+#define SLICE_COL_SEQ_START 3
+#define SLICE_COL_SEQ_LEN   4
+
+static rc_t get_seq_id( const VCursor * ref_cur, int64_t row, uint32_t *col_idx, char * buffer, size_t buflen )
+{
+	const char * value;
+	uint32_t len;
+	rc_t rc = VCursorCellDataDirect ( ref_cur, row, col_idx[ SLICE_COL_SEQ_ID ], NULL, ( const void ** )&value, NULL, &len );
+	if ( rc == 0 )
+	{
+		if ( len == 0 )
+			buffer[ 0 ] = 0;
+		else
+			string_copy( buffer, buflen, value, len );
+	}
+	return rc;
+}
+
+static INSDC_coord_one get_seq_start( const VCursor * ref_cur, int64_t row, uint32_t *col_idx )
+{
+	INSDC_coord_one * value;
+	uint32_t len;
+	rc_t rc = VCursorCellDataDirect ( ref_cur, row, col_idx[ SLICE_COL_SEQ_START ], NULL, ( const void ** )&value, NULL, &len );
+	if ( rc == 0 && len > 0 )
+		return *value;
+	return 0;
+}
+
+
+static INSDC_coord_len get_seq_len( const VCursor * ref_cur, int64_t row, uint32_t *col_idx )
+{
+	INSDC_coord_len * value;
+	uint32_t len;
+	rc_t rc = VCursorCellDataDirect ( ref_cur, row, col_idx[ SLICE_COL_SEQ_LEN ], NULL, ( const void ** )&value, NULL, &len );
+	if ( rc == 0 && len > 0 )
+		return *value;
+	return 0;
+}
+
+
+static rc_t find_slice_in_ref( const p_dump_context ctx, const VTable * ref_tab, const VTable * prim_tab  )
+{
+	const VCursor * ref_cur;
+	rc_t rc = VTableCreateCachedCursorRead( ref_tab, &ref_cur, ctx->cur_cache_size );
+	if ( rc != 0 )
+	{
+		LOGERR( klogInt, rc, "VTableCreateCachedCursorRead( REFERENCE ) failed" );
+	}
+	else
+	{
+		uint32_t col_idx[ 5 ];
+		char seq_id[ 512 ];
+		uint32_t cgraph_len;
+		int64_t first = 0, row = 0;
+		uint64_t count = 0;
+		const uint8_t * cgraph_value;
+		bool done = false;
+		
+		rc = VCursorAddColumn( ref_cur, &col_idx[ SLICE_COL_CG_LOW ], "CGRAPH_LOW" );
+		if ( rc == 0 )
+			rc = VCursorAddColumn( ref_cur, &col_idx[ SLICE_COL_CG_HIGH ], "CGRAPH_HIGH" );
+		if ( rc == 0 )
+			rc = VCursorAddColumn( ref_cur, &col_idx[ SLICE_COL_SEQ_ID ], "SEQ_ID" );
+		if ( rc == 0 )
+			rc = VCursorAddColumn( ref_cur, &col_idx[ SLICE_COL_SEQ_START ], "SEQ_START" );
+		if ( rc == 0 )
+			rc = VCursorAddColumn( ref_cur, &col_idx[ SLICE_COL_SEQ_LEN ], "SEQ_LEN" );
+		if ( rc == 0 )
+			rc = VCursorOpen( ref_cur );
+		if ( rc == 0 )
+			rc = VCursorIdRange( ref_cur, col_idx[ SLICE_COL_CG_LOW ], &first, &count );
+
+		for ( row = first; rc == 0 && !done && ( row < ( first + count ) ); ++row )
+		{
+			rc = VCursorCellDataDirect ( ref_cur, row, col_idx[ SLICE_COL_CG_LOW ], NULL, ( const void ** )&cgraph_value, NULL, &cgraph_len );
+			if ( rc == 0 && cgraph_len > 0 )
+			{
+				if ( *cgraph_value >= ctx->slice_depth )
+				{
+					
+					rc = get_seq_id( ref_cur, row, col_idx, seq_id, sizeof seq_id );
+					if ( rc == 0 )
+					{
+						INSDC_coord_one seq_start = get_seq_start( ref_cur, row, col_idx );
+						INSDC_coord_len seq_len = get_seq_len( ref_cur, row, col_idx );
+						if ( ctx->indented_line_len > 0 && ctx->indented_line_len < seq_len )
+							rc = KOutMsg( "%s:%d-%d\n", seq_id, seq_start, seq_start + ctx->indented_line_len );
+						else
+							rc = KOutMsg( "%s:%d-%d\n", seq_id, seq_start, seq_start + seq_len - 1 );
+					}
+					done = true;
+				}
+			}
+		}
+
+		for ( row = first; rc == 0 && !done && ( row < ( first + count ) ); ++row )
+		{
+			rc = VCursorCellDataDirect ( ref_cur, row, col_idx[ SLICE_COL_CG_HIGH ], NULL, ( const void ** )&cgraph_value, NULL, &cgraph_len );
+			if ( rc == 0 && cgraph_len > 0 )
+			{
+				if ( *cgraph_value >= ctx->slice_depth )
+				{
+					
+					rc = get_seq_id( ref_cur, row, col_idx, seq_id, sizeof seq_id );
+					if ( rc == 0 )
+					{
+						INSDC_coord_one seq_start = get_seq_start( ref_cur, row, col_idx );
+						INSDC_coord_len seq_len = get_seq_len( ref_cur, row, col_idx );
+						rc = KOutMsg( "%s:%d-%d\n", seq_id, seq_start, seq_start + seq_len - 1 );
+					}
+					done = true;
+				}
+			}
+		}
+	
+	
+		if ( !done || rc != 0 )
+			KOutMsg( "none\n" );
+		
+		VCursorRelease( ref_cur );
+	}
+	return rc;
+}
+
+
+static rc_t find_slice_in( const p_dump_context ctx, const VDBManager *mgr, const char * acc )
+{
+    rc_t rc;
+    int path_type = ( VDBManagerPathType ( mgr, "%s", acc ) & ~ kptAlias );
+    /* types defined in <kdb/manager.h> */
+    if ( path_type == kptDatabase )
+	{
+		const VDatabase * db;
+		rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", acc );
+		if ( rc != 0 )
+		{
+			LOGERR( klogInt, rc, "VDBManagerOpenDBRead() failed" );
+		}
+		else
+		{
+			const VTable * ref_tab;
+			rc = VDatabaseOpenTableRead( db, & ref_tab, "REFERENCE" );
+			if ( rc == 0 )
+			{
+				const VTable * prim_tab;
+				rc = VDatabaseOpenTableRead( db, & prim_tab, "PRIMARY_ALIGNMENT" );	
+				if ( rc == 0 )
+				{
+					rc = find_slice_in_ref( ctx, ref_tab, prim_tab );
+					VTableRelease ( prim_tab );
+				}
+				VTableRelease ( ref_tab );
+			}
+			VDatabaseRelease( db );
+		}
+		if ( rc != 0 )
+			rc = KOutMsg( "none\n" );
+	}
+	else
+		rc = KOutMsg( "none\n" );
+	return rc;
+}
+
+
+rc_t find_slice( const p_dump_context ctx, Args * args )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else if ( count < 1 )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        LOGERR( klogInt, rc, "parameter missing ( accession to find slice in )" );
+    }
+	else
+	{
+		KDirectory * dir;
+		rc = KDirectoryNativeDir( &dir );
+		if ( rc != 0 )
+		{
+			LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+		}
+		else
+		{
+			const VDBManager *mgr;
+			rc = VDBManagerMakeRead ( &mgr, dir );
+			if ( rc != 0 )
+			{
+				LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+			}
+			else
+			{
+				uint32_t idx;
+				for ( idx = 0; idx < count && rc == 0; ++idx )
+				{
+					const char *acc = NULL;
+					rc = ArgsParamValue( args, 0, (const void**)&acc );
+					if ( rc != 0 )
+					{
+						LOGERR( klogInt, rc, "ArgsParamValue() failed" );
+					}
+					else
+						rc = find_slice_in( ctx, mgr, acc );
+				}
+				VDBManagerRelease( mgr );
+			}
+			KDirectoryRelease( dir );
+		}
+	}
+	return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-bin.h b/tools/vdb-dump/vdb-dump-bin.h
new file mode 100644
index 0000000..0af510f
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-bin.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_bin_
+#define _h_vdb_dump_bin_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+rc_t vdi_dump_opened_table( const p_dump_context ctx, const VTable *my_table );
+rc_t vdi_bin_phase( const p_dump_context ctx, Args * args );
+
+rc_t find_slice( const p_dump_context ctx, Args * args );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-coldefs.c b/tools/vdb-dump/vdb-dump-coldefs.c
new file mode 100644
index 0000000..af22165
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-coldefs.c
@@ -0,0 +1,846 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-helper.h"
+
+#include "vdb-dump-coldefs.h"
+
+#include <klib/vector.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include <vdb/vdb-priv.h>
+
+#include <sra/sradb.h>
+#include <sra/pacbio.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+/* for platforms */
+#include <insdc/sra.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+
+rc_t Quitting();
+
+/* once we get used to having moved the read descriptor
+   out of SRA, we should begin using those names.
+   if anyone has an investment in the old names, we may
+   want to provide a switch for using them... */
+#if USE_OLD_SRA_NAME || 1
+#define SRA_NAME( name ) \
+    "SRA_" #name
+#define SRA_NAMES( name1, name2 ) \
+    "SRA_" #name1 "|SRA_" #name2
+#else
+#define SRA_NAME( name ) \
+    # name
+#define SRA_NAMES( name1, name2 ) \
+    #name1 "|" #name2
+#endif
+
+/* implementation of the value-translation-functions */
+
+const char SRA_PB_HS_0[] = { "SRA_PACBIO_HOLE_SEQUENCING" };
+const char SRA_PB_HS_1[] = { "SRA_PACBIO_HOLE_ANTIHOLE" };
+const char SRA_PB_HS_2[] = { "SRA_PACBIO_HOLE_FIDUCIAL" };
+const char SRA_PB_HS_3[] = { "SRA_PACBIO_HOLE_SUSPECT" };
+const char SRA_PB_HS_4[] = { "SRA_PACBIO_HOLE_ANTIMIRROR" };
+const char SRA_PB_HS_5[] = { "SRA_PACBIO_HOLE_FDZMW" };
+const char SRA_PB_HS_6[] = { "SRA_PACBIO_HOLE_FBZMW" };
+const char SRA_PB_HS_7[] = { "SRA_PACBIO_HOLE_ANTIBEAMLET" };
+const char SRA_PB_HS_8[] = { "SRA_PACBIO_HOLE_OUTSIDEFOV" };
+const char SRA_PB_HS_9[] = { "unknown hole-status" };
+
+const char *vdcd_get_hole_status_txt( const uint32_t id )
+{
+    switch( id )
+    {
+        case SRA_PACBIO_HOLE_SEQUENCING     : return( SRA_PB_HS_0 ); break;
+        case SRA_PACBIO_HOLE_ANTIHOLE       : return( SRA_PB_HS_1 ); break;
+        case SRA_PACBIO_HOLE_FIDUCIAL       : return( SRA_PB_HS_2 ); break;
+        case SRA_PACBIO_HOLE_SUSPECT        : return( SRA_PB_HS_3 ); break;
+        case SRA_PACBIO_HOLE_ANTIMIRROR     : return( SRA_PB_HS_4 ); break;
+        case SRA_PACBIO_HOLE_FDZMW          : return( SRA_PB_HS_5 ); break;
+        case SRA_PACBIO_HOLE_FBZMW          : return( SRA_PB_HS_6 ); break;
+        case SRA_PACBIO_HOLE_ANTIBEAMLET    : return( SRA_PB_HS_7 ); break;
+        case SRA_PACBIO_HOLE_OUTSIDEFOV     : return( SRA_PB_HS_8 ); break;
+    }
+    return( SRA_PB_HS_9 );
+}
+
+const char *vdcd_get_platform_txt( const uint32_t id )
+{
+#define CASE( id ) \
+    case id : return # id; break
+
+    switch( id )
+    {
+        CASE ( SRA_PLATFORM_UNDEFINED );
+        CASE ( SRA_PLATFORM_454 );
+        CASE ( SRA_PLATFORM_ILLUMINA );
+        CASE ( SRA_PLATFORM_ABSOLID );
+        CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
+        CASE ( SRA_PLATFORM_HELICOS );
+        CASE ( SRA_PLATFORM_PACBIO_SMRT );
+        CASE ( SRA_PLATFORM_ION_TORRENT );
+        CASE ( SRA_PLATFORM_CAPILLARY );
+        CASE ( SRA_PLATFORM_OXFORD_NANOPORE );
+    }
+#undef CASE
+
+    return "unknown platform";
+}
+
+const char SRA_RT_0[] = { SRA_NAME  ( READ_TYPE_TECHNICAL ) };
+const char SRA_RT_1[] = { SRA_NAME  ( READ_TYPE_BIOLOGICAL ) };
+const char SRA_RT_2[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_3[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_4[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_REVERSE ) };
+const char SRA_RT_5[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_REVERSE ) };
+const char SRA_RT_6[] = { "unknown read-type" };
+
+const char *vdcd_get_read_type_txt( const uint32_t id )
+{
+    switch( id )
+    {
+        case 0 : return( SRA_RT_0 ); break;
+        case 1 : return( SRA_RT_1 ); break;
+        case 2 : return( SRA_RT_2 ); break;
+        case 3 : return( SRA_RT_3 ); break;
+        case 4 : return( SRA_RT_4 ); break;
+        case 5 : return( SRA_RT_5 ); break;
+    }
+    return( SRA_RT_6 );
+}
+
+const char SRA_FT_0[] = { SRA_NAME ( READ_FILTER_PASS ) };
+const char SRA_FT_1[] = { SRA_NAME ( READ_FILTER_REJECT ) };
+const char SRA_FT_2[] = { SRA_NAME ( READ_FILTER_CRITERIA ) };
+const char SRA_FT_3[] = { SRA_NAME ( READ_FILTER_REDACTED ) };
+const char SRA_FT_4[] = { "unknown read-filter" };
+
+const char *vdcd_get_read_filter_txt( const uint32_t id )
+{
+    switch( id )
+    {
+        case 0 : return( SRA_FT_0 ); break;
+        case 1 : return( SRA_FT_1 ); break;
+        case 2 : return( SRA_FT_2 ); break;
+        case 3 : return( SRA_FT_3 ); break;
+    }
+    return( SRA_FT_4 );
+}
+
+/* hardcoded values taken from asm-trace/interface/sra/sradb.h */
+#define SRA_KEY_PLATFORM_ID "INSDC:SRA:platform_id"
+#define SRA_KEY_XREAD_TYPE "INSDC:SRA:xread_type"
+#define SRA_KEY_READ_TYPE "INSDC:SRA:read_type"
+#define SRA_KEY_READ_FILTER "INSDC:SRA:read_filter"
+#define SRA_PACBIO_HOLE_STATUS "PacBio:hole:status"
+
+
+static bool vdcd_type_cmp( const VSchema *my_schema, VTypedecl * typedecl, const char * to_check )
+{
+    VTypedecl type_to_check;
+    rc_t rc = VSchemaResolveTypedecl ( my_schema, &type_to_check, "%s", to_check );
+    if ( rc == 0 )
+    {
+        return VTypedeclToTypedecl ( typedecl, my_schema, &type_to_check, NULL, NULL );
+    }
+    return false;
+}
+
+
+static value_trans_fct_t vdcd_get_value_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
+{
+    value_trans_fct_t res = NULL;
+
+    if ( my_schema == NULL ) return res;
+    if ( typedecl == NULL ) return res;
+
+    if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_PLATFORM_ID ) )
+    {
+        res = vdcd_get_platform_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_XREAD_TYPE ) )
+    {
+        res = vdcd_get_read_type_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_TYPE ) )
+    {
+        res = vdcd_get_read_type_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_FILTER ) )
+    {
+        res = vdcd_get_read_filter_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_PACBIO_HOLE_STATUS ) )
+    {
+        res = vdcd_get_hole_status_txt;
+    }
+
+    return res;
+}
+
+
+/* implementation of the dimension-translation-functions */
+static char *vdcd_get_read_desc_txt( const uint8_t * src )
+{
+    char *res = calloc( 1, 120 );
+    SRAReadDesc desc;
+    memmove( &desc, src, sizeof( desc ) );
+    string_printf ( res, 119, NULL,
+              "seg.start=%u, seg.len=%u, type=%u, cs_key=%u, label=%s",
+              desc.seg.start, desc.seg.len, desc.type,
+              desc.cs_key, desc.label );
+    return res;
+}
+
+static char *vdcd_get_spot_desc_txt( const uint8_t *src )
+{
+    char *res = calloc( 1, 120 );
+    SRASpotDesc desc;
+    memmove( &desc, src, sizeof( desc ) );
+    string_printf ( res, 119, NULL,
+              "spot_len=%u, fixed_len=%u, signal_len=%u, clip_qual_right=%u, num_reads=%u",
+              desc.spot_len, desc.fixed_len, desc.signal_len,
+              desc.clip_qual_right, desc.num_reads );
+    return res;
+}
+
+/* hardcoded values taken from asm-trace/interface/sra/sradb.h */
+#define SRA_KEY_READ_DESC "NCBI:SRA:ReadDesc"
+#define SRA_KEY_SPOT_DESC "NCBI:SRA:SpotDesc"
+
+static dim_trans_fct_t vdcd_get_dim_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
+{
+    dim_trans_fct_t res = NULL;
+
+    if ( my_schema == NULL ) return res;
+    if ( typedecl == NULL ) return res;
+
+    if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_DESC ) )
+    {
+        res = vdcd_get_read_desc_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_SPOT_DESC ) )
+    {
+        res = vdcd_get_spot_desc_txt;
+    }
+/*
+    if ( strcmp( name, SRA_KEY_READ_DESC ) == 0 )
+    {
+        res = vdcd_get_read_desc_txt;
+    }
+    else if ( strcmp( name, SRA_KEY_SPOT_DESC ) == 0 )
+    {
+        res = vdcd_get_spot_desc_txt;
+    }
+*/
+    return res;
+}
+
+
+const char * const_s_Ascii = "Ascii";
+const char * const_s_Unicode = "Unicode";
+const char * const_s_Uint = "Uint";
+const char * const_s_Int = "Int";
+const char * const_s_Float = "Float";
+const char * const_s_Bool = "Bool";
+const char * const_s_Unknown = "unknown";
+
+char *vdcd_make_domain_txt( const uint32_t domain )
+{
+    char* res= NULL;
+    switch( domain )
+    {
+        case vtdAscii   : res = string_dup_measure( const_s_Ascii, NULL ); break;
+        case vtdUnicode : res = string_dup_measure( const_s_Unicode, NULL ); break;
+        case vtdUint    : res = string_dup_measure( const_s_Uint, NULL ); break;
+        case vtdInt     : res = string_dup_measure( const_s_Int, NULL ); break;
+        case vtdFloat   : res = string_dup_measure( const_s_Float, NULL ); break;
+        case vtdBool    : res = string_dup_measure( const_s_Bool, NULL ); break;
+        default : res = string_dup_measure( const_s_Unknown, NULL ); break;
+    }
+    return res;
+}
+
+/* a single column-definition */
+p_col_def vdcd_init_col( const char* name, const size_t str_limit )
+{
+    p_col_def res = NULL;
+    if ( name == NULL ) return res;
+    if ( name[0] == 0 ) return res;
+    res = ( p_col_def )calloc( 1, sizeof( col_def ) );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        vds_make( &( res->content ), str_limit, DUMP_STR_INC );
+    }
+    return res;
+}
+
+void vdcd_destroy_col( p_col_def col_def )
+{
+    if ( col_def == NULL ) return;
+    if ( col_def->name ) free( col_def->name );
+    vds_free( &( col_def->content ) );
+    free( col_def );
+}
+
+/* a vector of column-definitions */
+bool vdcd_init( col_defs** defs, const size_t str_limit )
+{
+    bool res = false;
+    if ( defs == NULL ) return res;
+    (*defs) = calloc( 1, sizeof( col_defs ) );
+    if ( *defs )
+    {
+        VectorInit( &((*defs)->cols), 0, 5 );
+        (*defs)->max_colname_chars = 0;
+        res = true;
+    }
+    ( *defs )->str_limit = str_limit;
+    return res;
+}
+
+static void CC vdcd_destroy_node( void* node, void* data )
+{
+    vdcd_destroy_col( (p_col_def)node );
+}
+
+void vdcd_destroy( col_defs* defs )
+{
+    if ( defs == NULL ) return;
+    VectorWhack( &(defs->cols), vdcd_destroy_node, NULL );
+    free( defs );
+}
+
+static p_col_def vdcd_append_col( col_defs* defs, const char* name )
+{
+    p_col_def new_col = vdcd_init_col( name, defs->str_limit );
+    if ( new_col != NULL )
+    {
+        if ( VectorAppend( &(defs->cols), NULL, new_col ) == 0 )
+        {
+            int len = string_size( name );
+            if ( len > defs->max_colname_chars )
+                defs->max_colname_chars = len;
+        }
+    }
+    return new_col;
+}
+
+
+uint32_t vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table )
+{
+    uint32_t count, found = 0;
+    char colname[MAX_COL_NAME_LEN+1];
+    size_t i_dest = 0;
+    if ( defs == NULL ) return false;
+    if ( src == NULL ) return false;
+    while ( *src )
+    {
+        if ( *src == ',' )
+        {
+            if ( i_dest > 0 )
+            {
+                colname[i_dest]=0;
+                vdcd_append_col( defs, colname );
+            }
+            i_dest = 0;
+        }
+        else
+        {
+            if ( i_dest < MAX_COL_NAME_LEN ) colname[i_dest++]=*src;
+        }
+        src++;
+    }
+    if ( i_dest > 0 )
+    {
+        colname[i_dest]=0;
+        vdcd_append_col( defs, colname );
+    }
+    count = VectorLength( &defs->cols );
+    if ( count > 0 && my_table != NULL )
+    {
+        const VCursor *my_cursor;
+        rc_t rc = VTableCreateCursorRead( my_table, &my_cursor );
+        DISP_RC( rc, "VTableCreateCursorRead() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count; ++idx )
+            {
+                col_def *col = ( col_def * )VectorGet( &(defs->cols), idx );
+                if ( col != NULL )
+                {
+                    rc = VCursorAddColumn( my_cursor, &(col->idx), "%s", col->name );
+                    DISP_RC( rc, "VCursorAddColumn() failed" );
+                    if ( rc == 0 )
+                    {
+                        rc = VCursorDatatype( my_cursor, col->idx,
+                                  &(col->type_decl), &(col->type_desc) );
+                        DISP_RC( rc, "VCursorDatatype() failed" );
+                        if ( rc == 0 )
+                            found++;
+                    }
+                }
+            }
+            rc = VCursorRelease( my_cursor );
+            DISP_RC( rc, "VCursorRelease() failed" );
+        }
+    }
+    return found;
+}
+
+
+bool vdcd_table_has_column( const VTable *my_table, const char * to_find )
+{
+	bool res = false;
+	if ( my_table != NULL && to_find != NULL )
+	{
+		size_t to_find_len = string_size( to_find );
+		if ( to_find_len > 0 )
+		{
+			KNamelist * names;
+			rc_t rc = VTableListCol( my_table, &names );
+			DISP_RC( rc, "VTableListCol() failed" );
+			if ( rc == 0 )
+			{
+				uint32_t n;
+				rc = KNamelistCount( names, &n );
+				DISP_RC( rc, "KNamelistCount() failed" );
+				if ( rc == 0 )
+				{
+					uint32_t i;
+					for ( i = 0; i < n && rc == 0 && !res; ++i )
+					{
+						const char * col_name;
+						rc = KNamelistGet( names, i, &col_name );
+						DISP_RC( rc, "KNamelistGet() failed" );
+						if ( rc == 0 )
+						{
+							size_t col_name_len = string_size( col_name );
+							if ( col_name_len == to_find_len )
+								res = ( string_cmp( to_find, to_find_len, col_name, col_name_len, col_name_len ) == 0 );
+						}
+					}
+				}
+				KNamelistRelease( names );
+			}
+		}
+	}
+	return res;
+}
+
+uint32_t vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
+{
+    uint32_t found = 0;
+    KNamelist *names;
+    rc_t rc = VTableListCol( my_table, &names );
+    DISP_RC( rc, "VTableListCol() failed" );
+    if ( rc == 0 )
+    {
+        const VCursor *my_cursor;
+        rc = VTableCreateCursorRead( my_table, &my_cursor );
+        DISP_RC( rc, "VTableCreateCursorRead() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t n;
+            rc = KNamelistCount( names, &n );
+            DISP_RC( rc, "KNamelistCount() failed" );
+            if ( rc == 0 )
+            {
+                uint32_t i;
+                for ( i = 0; i < n && rc == 0; ++i )
+                {
+                    const char *col_name;
+                    rc = KNamelistGet( names, i, &col_name );
+                    DISP_RC( rc, "KNamelistGet() failed" );
+                    if ( rc == 0 )
+                    {
+                        p_col_def def = vdcd_append_col( defs, col_name );
+                        rc = VCursorAddColumn( my_cursor, &(def->idx), "%s", def->name );
+                        DISP_RC( rc, "VCursorAddColumn() failed" );
+                        if ( rc == 0 )
+                        {
+                            rc = VCursorDatatype( my_cursor, def->idx,
+                                      &(def->type_decl), &(def->type_desc) );
+                            DISP_RC( rc, "VCursorDatatype() failed" );
+                            if ( rc == 0 )
+                            {
+                                found++;
+                            }
+                        }
+                    }
+                }
+            }
+            rc = VCursorRelease( my_cursor );
+            DISP_RC( rc, "VCursorRelease() failed" );
+        }
+        rc = KNamelistRelease( names );
+        DISP_RC( rc, "KNamelistRelease() failed" );
+    }
+    return found;
+}
+
+
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table )
+{
+    bool col_defs_found = false;
+    KNamelist *names;
+    rc_t rc = VTableListPhysColumns( my_table, &names );
+    DISP_RC( rc, "VTableListPhysColumns() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t n;
+        uint32_t found = 0;
+        rc = KNamelistCount( names, &n );
+        DISP_RC( rc, "KNamelistCount() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                const char *col_name;
+                rc = KNamelistGet( names, i, &col_name );
+                DISP_RC( rc, "KNamelistGet() failed" );
+                if ( rc == 0 )
+                {
+                    vdcd_append_col( defs, col_name );
+                    found++;
+                }
+            }
+            col_defs_found = ( found > 0 );
+        }
+        rc = KNamelistRelease( names );
+        DISP_RC( rc, "KNamelistRelease() failed" );
+    }
+    return col_defs_found;
+}
+
+typedef struct add_2_cur_context
+{
+    const VCursor *my_cursor;
+    uint32_t count;
+} add_2_cur_context;
+typedef add_2_cur_context* p_add_2_cur_context;
+
+
+static void CC vdcd_add_1_to_cursor( void *item, void *data )
+{
+    rc_t rc;
+    p_col_def my_col_def = (p_col_def)item;
+    p_add_2_cur_context ctx = (p_add_2_cur_context)data;
+
+    if ( my_col_def == NULL ) return;
+    if ( ctx == NULL ) return;
+    if ( ctx->my_cursor == NULL ) return;
+    rc = VCursorAddColumn( ctx->my_cursor, &(my_col_def->idx), "%s", my_col_def->name );
+    DISP_RC( rc, "VCursorAddColumn() failed" );
+
+    /***************************************************************************
+    !!! extract type information !!!
+    **************************************************************************/
+    if ( rc == 0 )
+    {
+        rc = VCursorDatatype( ctx->my_cursor, my_col_def->idx,
+                              &(my_col_def->type_decl), &(my_col_def->type_desc) );
+        DISP_RC( rc, "VCursorDatatype() failed" );
+        if ( rc == 0 )
+        {
+            ctx->count++;
+            my_col_def->valid = true;
+        }
+    }
+}
+
+
+uint32_t vdcd_add_to_cursor( col_defs* defs, const VCursor *my_cursor )
+{
+    add_2_cur_context ctx;
+    ctx.count = 0;
+    ctx.my_cursor = my_cursor;
+    VectorForEach( &(defs->cols), false, vdcd_add_1_to_cursor, &ctx );
+    return ctx.count;
+}
+
+
+static void CC vdcd_reset_1_content( void *item, void *data )
+{
+    rc_t rc;
+    p_col_def my_col_def = (p_col_def)item;
+    if ( my_col_def == NULL ) return;
+    rc = vds_clear( &(my_col_def->content) );
+    DISP_RC( rc, "dump_str_clear() failed" );
+}
+
+void vdcd_reset_content( col_defs* defs )
+{
+    VectorForEach( &(defs->cols), false,
+                   vdcd_reset_1_content, NULL );
+}
+
+static void CC vdcd_ins_1_trans_fkt( void *item, void *data )
+{
+    p_col_def my_col_def = ( p_col_def )item;
+    const VSchema *my_schema = ( const VSchema * )data;
+
+    if ( my_col_def == NULL ) return;
+    if ( my_schema == NULL ) return;
+
+    /* resolves special sra-types and retrieves the addr of
+       a function that later can translate the values into plain-text
+       --- is defined in this file! */
+    my_col_def->value_trans_fct = vdcd_get_value_trans_fct( my_schema, &(my_col_def->type_decl) );
+    my_col_def->dim_trans_fct = vdcd_get_dim_trans_fct( my_schema, &(my_col_def->type_decl) );
+}
+
+void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema )
+{
+    if ( defs == NULL ) return;
+    if ( my_schema == NULL ) return;
+    VectorForEach( &(defs->cols), false,
+                   vdcd_ins_1_trans_fkt, (void*)my_schema );
+}
+
+
+static void CC vdcd_exclude_column_cb( void *item, void *data )
+{
+    const char * s = (const char *)data;
+    p_col_def my_col_def = (p_col_def)item;
+    if ( s == NULL || my_col_def == NULL ) return;
+    if ( strcmp( my_col_def->name, s ) == 0 )
+        my_col_def->excluded = true;
+}
+
+
+void vdcd_exclude_this_column( col_defs* defs, const char* column_name )
+{
+    VectorForEach( &(defs->cols), false, vdcd_exclude_column_cb, (void*)column_name );
+}
+
+
+void vdcd_exclude_these_columns( col_defs* defs, const char* column_names )
+{
+    char colname[MAX_COL_NAME_LEN+1];
+    size_t i_dest = 0;
+    if ( defs == NULL || column_names == NULL ) return;
+    while ( *column_names )
+    {
+        if ( *column_names == ',' )
+        {
+            if ( i_dest > 0 )
+            {
+                colname[i_dest]=0;
+                vdcd_exclude_this_column( defs, colname );
+            }
+            i_dest = 0;
+        }
+        else
+        {
+            if ( i_dest < MAX_COL_NAME_LEN ) colname[i_dest++]=*column_names;
+        }
+        column_names++;
+    }
+    if ( i_dest > 0 )
+    {
+        colname[i_dest]=0;
+        vdcd_exclude_this_column( defs, colname );
+    }
+}
+
+
+bool vdcd_get_first_none_static_column_idx( col_defs* defs, const VCursor * cur, uint32_t * idx )
+{
+    bool res = false;
+    if ( defs != NULL && cur !=NULL && idx != NULL )
+    {
+        uint32_t len = VectorLength( &(defs->cols) );
+        if ( len > 0 )
+        {
+            uint32_t start = VectorStart( &(defs->cols) );
+            uint32_t run_idx = start;
+            while ( ( run_idx < ( start + len ) ) && !res )
+            {
+                col_def * cd = VectorGet( &(defs->cols), run_idx );
+                if ( cd != NULL )
+                {
+                    int64_t  first;
+                    uint64_t count;
+
+                    rc_t rc = VCursorIdRange( cur, cd->idx, &first, &count );
+                    if ( rc == 0 && count > 0 )
+                    {
+                        *idx = cd->idx;
+                        res = true;
+                    }
+                }
+                run_idx++;
+            }
+        }
+    }
+    return res;
+}
+
+/* ******************************************************************************************************** */
+typedef struct spread
+{
+	uint64_t count;
+	double sum, sum_sq;
+	int64_t min, max;
+} spread;
+
+
+/*
+	s ... spread * s
+	b ... const void * base
+	l ... uint32_t row_len
+	t ... type ( int64_t, uint64_t ... )
+*/
+#define COUNTVALUES( S, b, l, t )							\
+	{														\
+		const t * values = base;							\
+		uint32_t i;											\
+		for ( i = 0; i < l; ++i )							\
+		{													\
+			t value = values[ i ];							\
+			if ( value != 0 )								\
+			{												\
+				double value_d = value;						\
+				if ( value < (S)->min ) (S)->min = value;	\
+				if ( value > (S)->max ) (S)->max = value;	\
+				(S)->sum += value_d;						\
+				(S)->sum_sq += ( value_d * value_d );		\
+				(S)->count++;								\
+			}												\
+		}													\
+	}														\
+
+static uint64_t round_to_uint64_t( double value )
+{
+	double floor_value = floor( value );
+	double x = ( value - floor_value ) > 0.5 ? ceil( value ) : floor_value;
+	return ( uint64_t )x;
+}
+
+static rc_t vdcd_collect_spread_col( const struct num_gen * row_set, col_def * cd, const VCursor * cursor )
+{
+	const struct num_gen_iter * iter;
+	rc_t rc = num_gen_iterator_make( row_set, &iter );
+	if ( rc == 0 )
+	{
+		const void * base;
+		uint32_t row_len, elem_bits;
+		int64_t row_id;
+		spread s;
+		spread * sp = &s;
+		
+		s.max = s.sum = s.sum_sq = s.count = 0;
+		s.min = INT64_MAX;
+		
+		while ( ( rc == 0 ) && num_gen_iterator_next( iter, &row_id, &rc ) )
+		{
+			if ( rc == 0 )	rc = Quitting();
+			if ( rc != 0 )	break;
+			rc = VCursorCellDataDirect( cursor, row_id, cd->idx, &elem_bits, &base, NULL, &row_len );
+			if ( rc == 0 )
+			{
+				if ( cd->type_desc.domain == vtdUint )
+				{
+					/* unsigned int's */
+					switch( elem_bits )
+					{
+						case 64 : COUNTVALUES( sp, base, row_len, uint64_t ) break;
+						case 32 : COUNTVALUES( sp, base, row_len, uint32_t ) break;
+						case 16 : COUNTVALUES( sp, base, row_len, uint16_t ) break;
+						case 8  : COUNTVALUES( sp, base, row_len, uint8_t )  break;
+					}
+				}
+				else
+				{
+					/* signed int's */
+					switch( elem_bits )
+					{
+						case 64 : COUNTVALUES( sp, base, row_len, int64_t ) break;
+						case 32 : COUNTVALUES( sp, base, row_len, int32_t ) break;
+						case 16 : COUNTVALUES( sp, base, row_len, int16_t ) break;
+						case 8  : COUNTVALUES( sp, base, row_len, int8_t )  break;
+					}
+				}
+			}
+		}
+
+		if ( s.count > 0 )
+		{
+			rc = KOutMsg( "\n[%s]\n", cd->name );
+			if ( rc == 0 )
+				rc = KOutMsg( "min    = %,ld\n", s.min );
+			if ( rc == 0 )
+				rc = KOutMsg( "max    = %,ld\n", s.max );
+			if ( rc == 0 )
+				rc = KOutMsg( "count  = %,ld\n", s.count );
+			if ( rc == 0 )
+			{
+				double median = ( s.sum / s.count );
+				rc = KOutMsg( "median = %,ld\n", round_to_uint64_t( median ) );
+				if ( rc == 0 )
+				{
+					double stdev = sqrt( ( ( s.sum_sq - ( s.sum * s.sum ) / s.count ) ) / ( s.count - 1 ) );
+					rc = KOutMsg( "stdev  = %,ld\n", round_to_uint64_t( stdev ) );	
+				}
+			}
+		}
+		
+		num_gen_iterator_destroy( iter );
+	}
+	return rc;
+}
+#undef COUNTVALUES
+
+rc_t vdcd_collect_spread( const struct num_gen * row_set, col_defs * cols, const VCursor * cursor )
+{
+	rc_t rc = 0;
+	uint32_t i, n = VectorLength( &cols->cols );
+	for ( i = 0; i < n && rc == 0; ++i )
+	{
+		col_def * cd = VectorGet( &cols->cols, i );
+		if ( cd != NULL )
+		{
+			if ( cd->type_desc.domain == vtdUint || cd->type_desc.domain == vtdInt )
+				rc = vdcd_collect_spread_col( row_set, cd, cursor );
+		}
+	}
+	return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-coldefs.h b/tools/vdb-dump/vdb-dump-coldefs.h
new file mode 100644
index 0000000..fb81d04
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-coldefs.h
@@ -0,0 +1,110 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_coldefs_
+#define _h_vdb_dump_coldefs_
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+
+#include <klib/vector.h>
+#include <klib/text.h>
+#include <klib/num-gen.h>
+
+#include "vdb-dump-str.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+const char *get_platform_txt( const uint32_t id );
+const char *get_read_type_txt( const uint32_t id );
+const char *get_read_filter_txt( const uint32_t id );
+*/
+
+typedef const char* (*value_trans_fct_t)( const uint32_t id );
+typedef char* (*dim_trans_fct_t)( const uint8_t *src );
+
+/********************************************************************
+col-def is the definition of a single column: name/index/type
+********************************************************************/
+typedef struct col_def
+{
+    char *name;
+    uint32_t idx;
+    uint64_t elementsum;
+    bool valid;
+    bool excluded;
+    VTypedecl type_decl;
+    VTypedesc type_desc;
+    dump_str content;
+    value_trans_fct_t value_trans_fct;
+    dim_trans_fct_t dim_trans_fct;
+} col_def;
+typedef col_def* p_col_def;
+
+/********************************************************************
+the col-defs are a vector of single column-definitions
+********************************************************************/
+typedef struct col_defs
+{
+    Vector cols;
+    uint16_t max_colname_chars;
+    size_t str_limit;
+} col_defs;
+typedef col_defs* p_col_defs;
+
+#define MAX_COL_NAME_LEN 64
+
+const char *vdcd_get_platform_txt( const uint32_t id );
+
+char *vdcd_make_domain_txt( const uint32_t domain );
+
+bool vdcd_init( col_defs** defs, const size_t str_limit );
+void vdcd_destroy( col_defs* defs );
+
+uint32_t vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table );
+uint32_t vdcd_extract_from_table( col_defs* defs, const VTable *my_table );
+bool vdcd_table_has_column( const VTable *my_table, const char * to_find );
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table );
+uint32_t vdcd_add_to_cursor( col_defs* defs, const VCursor *my_cursor );
+void vdcd_reset_content( col_defs* defs );
+void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema );
+void vdcd_exclude_these_columns( col_defs* defs, const char* column_names );
+bool vdcd_get_first_none_static_column_idx( col_defs* defs, const VCursor * cur, uint32_t * idx );
+
+rc_t vdcd_collect_spread( const struct num_gen * row_set, col_defs * cols, const VCursor * cursor );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-context.c b/tools/vdb-dump/vdb-dump-context.c
new file mode 100644
index 0000000..e3ac2d7
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-context.c
@@ -0,0 +1,649 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-helper.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/num-gen.h>
+#include <kapp/args.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <strtol.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/********************************************************************
+the dump context contains all informations needed to execute the dump
+********************************************************************/
+
+static rc_t vdco_set_str( char **dst, const char *src )
+{
+    size_t len;
+    if ( dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    if ( *dst != NULL )
+    {
+        free( *dst );
+        *dst = NULL;
+    }
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    len = string_size( src );
+    if ( len == 0 )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
+
+    *dst = (char*)malloc( len + 1 );
+    if ( *dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
+
+    string_copy( *dst, len + 1, src, len );
+    return 0;
+}
+
+
+static rc_t vdco_set_String( char **dst, const String *src )
+{
+    if ( dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    if ( *dst != NULL )
+    {
+        free( *dst );
+        *dst = NULL;
+    }
+    if ( src == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+
+    if ( src->len == 0 )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
+
+    *dst = (char*)malloc( src->size + 1 );
+    if ( *dst == NULL )
+        return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
+
+    string_copy( *dst, src->len + 1, src->addr, src->len );
+    return 0;
+}
+
+static void vdco_init_values( p_dump_context ctx )
+{
+    ctx->path = NULL;
+    ctx->table = NULL;
+    ctx->columns = NULL;
+    ctx->excluded_columns = NULL;
+    ctx->filter = NULL;
+    ctx->idx_range = NULL;
+    ctx->output_file = NULL;
+    ctx->output_path = NULL;
+    ctx->rows = NULL;
+
+    ctx->print_row_id = true;
+    ctx->print_in_hex = false;
+    ctx->lf_after_row = 1;
+    ctx->print_column_names = true;
+    ctx->print_dna_bases = false;
+    ctx->max_line_len = 0;
+    ctx->indented_line_len = 0;
+    ctx->phase = 0;
+    ctx->slice_depth = 0;
+
+    ctx->help_requested = false;
+    ctx->usage_requested = false;
+    ctx->schema_dump_requested = false;
+    ctx->table_enum_requested = false;
+    ctx->version_requested = false;
+    ctx->column_enum_requested = false;
+    ctx->column_enum_short = false;
+    ctx->id_range_requested = false;
+    ctx->without_sra_types = false;
+    ctx->print_num_elem = false;
+    ctx->objver_requested = false;
+    ctx->objts_requested = false;
+    ctx->objtype_requested = false;
+    ctx->idx_enum_requested = false;
+    ctx->idx_range_requested = false;
+    ctx->disable_multithreading = false;
+    ctx->table_defined = false;
+    ctx->diff = false;
+    ctx->show_spotgroups = false;
+    ctx->show_spread = false;
+    ctx->interactive = false;    
+}
+
+rc_t vdco_init( dump_context **ctx )
+{
+    rc_t rc = 0;
+    if ( ctx == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        (*ctx) = (p_dump_context)calloc( 1, sizeof **ctx );
+        if ( *ctx == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+        if ( rc == 0 )
+        {
+            VectorInit( &((*ctx)->schema_list), 0, 5 );
+            vdco_init_values( *ctx );
+        }
+    }
+    return rc;
+}
+
+static void CC vdco_schema_list_entry_whack( void *item, void *data )
+{
+    free( item );
+}
+
+rc_t vdco_destroy( p_dump_context ctx )
+{
+    rc_t rc = 0;
+    if ( ctx == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcDestroying, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        VectorWhack( &(ctx->schema_list),
+                     vdco_schema_list_entry_whack, NULL );
+
+        if ( ctx->table != NULL )
+        {
+            free( (void*)ctx->table );
+            ctx->table = NULL;
+        }
+
+        if ( ctx->columns != NULL )
+        {
+            free( (void*)ctx->columns );
+            ctx->columns = NULL;
+        }
+
+        if ( ctx->excluded_columns != NULL )
+        {
+            free( (void*)ctx->excluded_columns );
+            ctx->excluded_columns = NULL;
+        }
+
+        if ( ctx->row_range != NULL )
+        {
+            free( (void*)ctx->row_range );
+            ctx->row_range = NULL;
+        }
+
+
+        if ( ctx->output_path != NULL )
+        {
+            free( (void*)ctx->output_path );
+            ctx->output_path = NULL;
+        }
+
+        if ( ctx->output_file != NULL )
+        {
+            free( (void*)ctx->output_file );
+            ctx->output_file = NULL;
+        }
+
+        if ( ctx->rows != NULL )
+        {
+            num_gen_destroy( ctx->rows );
+            ctx->rows = NULL;
+        }
+        free( ctx );
+    }
+    return rc;
+}
+
+
+static rc_t vdco_add_schema( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        char *s = string_dup_measure ( src, NULL );
+        if ( s != NULL )
+        {
+            rc = VectorAppend( &(ctx->schema_list), NULL, s );
+            DISP_RC( rc, "VectorAppend() failed" );
+            if ( rc != 0 )
+            {
+                free( s );
+            }
+        }
+        else
+            rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    return rc;
+}
+
+static rc_t vdco_set_filter( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->filter), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+/* not static because can be called directly from vdb-dump.c */
+rc_t vdco_set_table( p_dump_context ctx, const char * src )
+{
+    rc_t rc;
+    if ( ( ctx == NULL )||( src == NULL ) )
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    else
+    {
+        rc = vdco_set_str( (char**)&(ctx->table), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+
+rc_t vdco_set_table_String( p_dump_context ctx, const String * src )
+{
+    rc_t rc;
+    if ( ( ctx == NULL )||( src == NULL ) )
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    else
+    {
+        rc = vdco_set_String( (char**)&(ctx->table), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+
+static rc_t vdco_set_columns( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->columns), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+static rc_t vdco_set_excluded_columns( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->excluded_columns), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+static rc_t vdco_set_row_range( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->row_range), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+        if ( rc == 0 )
+        {
+            if ( ctx->rows != NULL )
+            {
+                num_gen_destroy( ctx->rows );
+                ctx->rows = NULL;
+            }
+            rc = num_gen_make_from_str_sorted( &ctx->rows, src, ctx->merge_ranges );
+            DISP_RC( rc, "num_gen_make_from_str() failed" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdco_set_idx_range( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->idx_range), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+
+static rc_t vdco_set_output_file( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->output_file), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+
+static rc_t vdco_set_output_path( p_dump_context ctx, const char *src )
+{
+    rc_t rc = 0;
+    if ( ( ctx == NULL )||( src == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
+    }
+    if ( rc == 0 )
+    {
+        rc = vdco_set_str( (char**)&(ctx->output_path), src );
+        DISP_RC( rc, "vdco_set_str() failed" );
+    }
+    return rc;
+}
+
+
+static bool vdco_set_format( p_dump_context ctx, const char *src )
+{
+    if ( ctx == NULL ) return false;
+    if ( src == NULL ) return false;
+    if ( strcmp( src, "csv" ) == 0 )
+        ctx->format = df_csv;
+    else if ( strcmp( src, "xml" ) == 0 )
+        ctx->format = df_xml;
+    else if ( strcmp( src, "json" ) == 0 )
+        ctx->format = df_json;
+    else if ( strcmp( src, "piped" ) == 0 )
+        ctx->format = df_piped;
+    else if ( strcmp( src, "sra-dump" ) == 0 )
+        ctx->format = df_sra_dump;
+    else if ( strcmp( src, "tab" ) == 0 )
+        ctx->format = df_tab;
+    else if ( strcmp( src, "fastq" ) == 0 )
+        ctx->format = df_fastq;
+    else if ( strcmp( src, "fastq1" ) == 0 )
+        ctx->format = df_fastq1;
+    else if ( strcmp( src, "fasta" ) == 0 )
+        ctx->format = df_fasta;
+    else if ( strcmp( src, "fasta1" ) == 0 )
+        ctx->format = df_fasta1;
+    else if ( strcmp( src, "fasta2" ) == 0 )
+        ctx->format = df_fasta2;
+    else if ( strcmp( src, "qual" ) == 0 )
+        ctx->format = df_qual;
+    else if ( strcmp( src, "qual1" ) == 0 )
+        ctx->format = df_qual1;
+    else if ( strcmp( src, "bin" ) == 0 )
+        ctx->format = df_bin;
+    else if ( strcmp( src, "sql" ) == 0 )
+        ctx->format = df_sql;
+    else ctx->format = df_default;
+    return true;
+}
+
+
+static bool vdco_set_boolean_char( dump_context *ctx, const char * src )
+{
+    ctx->c_boolean = 0;
+    if ( ctx == NULL ) return false;
+    if ( src == NULL ) return false;
+    if ( strcmp( src, "T" ) == 0 )
+        ctx->c_boolean = 'T';
+    else if ( strcmp( src, "1" ) == 0 )
+        ctx->c_boolean = '1';
+    return true;
+}
+
+
+static bool vdco_get_bool_option( const Args *my_args,
+                                  const char *name,
+                                  const bool def )
+{
+    bool res = def;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( rc == 0 )
+        res = ( count > 0 );
+    return res;
+}
+
+static bool vdco_get_bool_neg_option( const Args *my_args,
+                                      const char *name,
+                                      const bool def )
+{
+    bool res = def;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( rc == 0 )
+        res = ( count == 0 );
+    return res;
+}
+
+static uint16_t vdco_get_uint16_option( const Args *my_args,
+                                        const char *name,
+                                        const uint16_t def )
+{
+    uint16_t res = def;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        const char *s;
+        rc = ArgsOptionValue( my_args, name, 0, (const void **)&s );
+        DISP_RC( rc, "ArgsOptionValue() failed" );
+        if ( rc == 0 ) res = atoi( s );
+    }
+    return res;
+}
+
+
+static size_t vdco_get_size_t_option( const Args *my_args,
+                                      const char *name,
+                                      const size_t def )
+{
+    size_t res = def;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        const char *s;
+        rc = ArgsOptionValue( my_args, name, 0, (const void **)&s );
+        DISP_RC( rc, "ArgsOptionValue() failed" );
+        if ( rc == 0 )
+        {
+            char *endp;
+            res = strtou64( s, &endp, 10 );
+        }
+    }
+    return res;
+}
+
+
+static const char* vdco_get_str_option( const Args *my_args,
+                                        const char *name )
+{
+    const char* res = NULL;
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, name, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        rc = ArgsOptionValue( my_args, name, 0, (const void**)&res );
+        DISP_RC( rc, "ArgsOptionValue() failed" );
+    }
+    return res;
+}
+
+void vdco_set_schemas( const Args *my_args, p_dump_context ctx )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( my_args, OPTION_SCHEMA, &count );
+    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( ( rc == 0 )&&( count > 0 ) )
+    {
+        uint32_t i;
+        for ( i=0; i<count; ++i )
+        {
+            const char* txt = NULL;
+            rc = ArgsOptionValue( my_args, OPTION_SCHEMA, i, (const void**)&txt );
+            DISP_RC( rc, "ArgsOptionValue() failed" );
+            if ( ( rc == 0 )&&( txt != NULL ) )
+            {
+                rc = vdco_add_schema( ctx, txt );
+                DISP_RC( rc, "dump_context_add_schema() failed" );
+            }
+        }
+    }
+}
+
+
+size_t vdco_schema_count( p_dump_context ctx )
+{
+    if ( ctx == NULL ) return 0;
+    return VectorLength( &(ctx->schema_list ) );
+}
+
+static void vdco_evaluate_options( const Args *my_args,
+                                   dump_context *ctx )
+{
+    if ( my_args == NULL ) return;
+    if ( ctx == NULL ) return;
+
+    ctx->help_requested = vdco_get_bool_option( my_args, OPTION_HELP, false );
+    ctx->print_row_id = vdco_get_bool_option( my_args, OPTION_ROW_ID_ON, false );
+    ctx->lf_after_row = vdco_get_uint16_option( my_args, OPTION_LINE_FEED, 1 );
+    ctx->phase = vdco_get_uint16_option( my_args, OPTION_PHASE, 0 );
+    ctx->print_column_names = vdco_get_bool_neg_option( my_args, OPTION_COLNAME_OFF, true );
+    ctx->print_in_hex = vdco_get_bool_option( my_args, OPTION_IN_HEX, false );
+    ctx->schema_dump_requested = vdco_get_bool_option( my_args, OPTION_SCHEMA_DUMP, false );
+    ctx->table_enum_requested = vdco_get_bool_option( my_args, OPTION_TABLE_ENUM, false );
+    ctx->version_requested = vdco_get_bool_option( my_args, OPTION_VERSION, false );
+    ctx->column_enum_requested = vdco_get_bool_option( my_args, OPTION_COLUMN_ENUM, false );
+    ctx->column_enum_short = vdco_get_bool_option( my_args, OPTION_COLUMN_SHORT, false );
+    ctx->print_dna_bases = vdco_get_bool_option( my_args, OPTION_DNA_BASES, false );
+    ctx->objver_requested = vdco_get_bool_option( my_args, OPTION_OBJVER, false );
+    ctx->objts_requested = vdco_get_bool_option( my_args, OPTION_OBJTS, false );
+    ctx->objtype_requested = vdco_get_bool_option( my_args, OPTION_OBJTYPE, false );
+    ctx->max_line_len = vdco_get_uint16_option( my_args, OPTION_MAX_LINE_LEN, 0 );
+    ctx->indented_line_len = vdco_get_uint16_option( my_args, OPTION_LINE_INDENT, 0 );
+    ctx->id_range_requested = vdco_get_bool_option( my_args, OPTION_ID_RANGE, false );
+    vdco_set_format( ctx, vdco_get_str_option( my_args, OPTION_FORMAT ) );
+    ctx->without_sra_types = vdco_get_bool_option( my_args, OPTION_WITHOUT_SRA, false );
+    ctx->print_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEM, false );
+    ctx->sum_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEMSUM, false );
+    ctx->show_blobbing = vdco_get_bool_option( my_args, OPTION_SHOW_BLOBBING, false );
+    ctx->enum_phys = vdco_get_bool_option( my_args, OPTION_ENUM_PHYS, false );
+    ctx->enum_readable = vdco_get_bool_option( my_args, OPTION_ENUM_READABLE, false );
+    ctx->idx_enum_requested = vdco_get_bool_option( my_args, OPTION_IDX_ENUM, false );
+    ctx->disable_multithreading = vdco_get_bool_option( my_args, OPTION_NO_MULTITHREAD, false );
+    ctx->print_info = vdco_get_bool_option( my_args, OPTION_INFO, false );
+    ctx->diff = vdco_get_bool_option( my_args, OPTION_DIFF, false );
+    ctx->show_spotgroups = vdco_get_bool_option( my_args, OPTION_SPOTGROUPS, false );
+    /*ctx->force_sra_schema = vdco_get_bool_option( my_args, OPTION_SRASCHEMA, false );*/
+    ctx->merge_ranges = vdco_get_bool_option( my_args, OPTION_MERGE_RANGES, false );
+    ctx->show_spread = vdco_get_bool_option( my_args, OPTION_SPREAD, false );
+    ctx->interactive = vdco_get_bool_option( my_args, OPTION_INTERACTIVE, false );
+    ctx->slice_depth = vdco_get_uint16_option( my_args, OPTION_SLICE, 0 );
+    
+    ctx->cur_cache_size = vdco_get_size_t_option( my_args, OPTION_CUR_CACHE, CURSOR_CACHE_SIZE );
+    ctx->output_buffer_size = vdco_get_size_t_option( my_args, OPTION_OUT_BUF_SIZE, DEF_OPTION_OUT_BUF_SIZE );
+    
+    if ( vdco_get_bool_option( my_args, OPTION_GZIP, false ) )
+        ctx->compress_mode = orm_gzip;
+    else if ( vdco_get_bool_option( my_args, OPTION_BZIP2, false ) )
+        ctx->compress_mode = orm_bzip2;
+    else
+        ctx->compress_mode = orm_uncompressed;
+    
+    vdco_set_table( ctx, vdco_get_str_option( my_args, OPTION_TABLE ) );
+    ctx->table_defined = ( ctx->table != NULL );
+    
+    vdco_set_columns( ctx, vdco_get_str_option( my_args, OPTION_COLUMNS ) );
+    vdco_set_excluded_columns( ctx, vdco_get_str_option( my_args, OPTION_EXCLUDED_COLUMNS ) );
+    vdco_set_row_range( ctx, vdco_get_str_option( my_args, OPTION_ROWS ) );
+    vdco_set_idx_range( ctx, vdco_get_str_option( my_args, OPTION_IDX_RANGE ) );
+    vdco_set_output_file( ctx, vdco_get_str_option( my_args, OPTION_OUT_FILE ) );
+    vdco_set_output_path( ctx, vdco_get_str_option( my_args, OPTION_OUT_PATH ) );
+
+    ctx->idx_range_requested = ( ctx->idx_range != NULL );
+    vdco_set_schemas( my_args, ctx );
+    vdco_set_filter( ctx, vdco_get_str_option( my_args, OPTION_FILTER ) );
+    vdco_set_boolean_char( ctx, vdco_get_str_option( my_args, OPTION_BOOLEAN ) );
+
+    if ( ctx->format == df_sra_dump )
+        ctx->without_sra_types = true;
+}
+
+rc_t vdco_capture_arguments_and_options( const Args * args, dump_context *ctx)
+{
+    rc_t rc;
+
+    vdco_evaluate_options( args, ctx );
+
+    rc = ArgsHandleLogLevel( args );
+    DISP_RC( rc, "ArgsHandleLogLevel() failed" );
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-context.h b/tools/vdb-dump/vdb-dump-context.h
new file mode 100644
index 0000000..2bd5d54
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-context.h
@@ -0,0 +1,220 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_context_
+#define _h_vdb_dump_context_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+#include <klib/vector.h>
+#include <klib/num-gen.h>
+#include "vdb-dump-redir.h"
+
+#define OPTION_ROW_ID_ON         "row_id_on"
+#define OPTION_LINE_FEED         "line_feed"
+#define OPTION_COLNAME_OFF       "colname_off"
+#define OPTION_IN_HEX            "in_hex"
+#define OPTION_TABLE             "table"
+#define OPTION_ROWS              "rows"
+#define OPTION_COLUMNS           "columns"
+#define OPTION_SCHEMA            "schema"
+#define OPTION_SCHEMA_DUMP       "schema_dump"
+#define OPTION_TABLE_ENUM        "table_enum"
+#define OPTION_COLUMN_ENUM       "column_enum"
+#define OPTION_COLUMN_SHORT      "column_enum_short"
+#define OPTION_DNA_BASES         "dna_bases"
+#define OPTION_MAX_LINE_LEN      "max_length"
+#define OPTION_LINE_INDENT       "indent_width"
+#define OPTION_FILTER            "filter"
+#define OPTION_FORMAT            "format"
+#define OPTION_ID_RANGE          "id_range"
+#define OPTION_WITHOUT_SRA       "without_sra"
+#define OPTION_EXCLUDED_COLUMNS  "exclude"
+#define OPTION_BOOLEAN           "boolean"
+#define OPTION_OBJVER            "obj_version"
+#define OPTION_OBJTS             "obj_timestamp"
+#define OPTION_OBJTYPE           "obj_type"
+#define OPTION_NUMELEM           "numelem"
+#define OPTION_NUMELEMSUM        "numelemsum"
+#define OPTION_SHOW_BLOBBING     "blobbing"
+#define OPTION_ENUM_PHYS         "phys"
+#define OPTION_ENUM_READABLE     "readable"
+#define OPTION_IDX_ENUM          "idx-report"
+#define OPTION_IDX_RANGE         "idx-range"
+#define OPTION_CUR_CACHE         "cur-cache"
+#define OPTION_OUT_FILE          "output-file"
+#define OPTION_OUT_PATH          "output-path"
+#define OPTION_PHASE             "phase"
+#define OPTION_GZIP              "gzip"
+#define OPTION_BZIP2             "bzip2"
+#define OPTION_OUT_BUF_SIZE      "output-buffer-size"
+#define OPTION_NO_MULTITHREAD    "disable-multithreading"
+#define OPTION_INFO              "info"
+#define OPTION_DIFF              "diff"
+#define OPTION_SPOTGROUPS        "spotgroups"
+/*#define OPTION_SRASCHEMA         "sraschema"*/
+#define OPTION_MERGE_RANGES      "merge-ranges"
+#define OPTION_SPREAD            "spread"
+#define OPTION_SLICE             "slice"
+#define OPTION_INTERACTIVE       "interactive"
+
+#define ALIAS_ROW_ID_ON         "I"
+#define ALIAS_LINE_FEED         "l"
+#define ALIAS_COLNAME_OFF       "N"
+#define ALIAS_IN_HEX            "X"
+#define ALIAS_TABLE             "T"
+#define ALIAS_ROWS              "R"
+#define ALIAS_COLUMNS           "C"
+#define ALIAS_SCHEMA            "S"
+#define ALIAS_SCHEMA_DUMP       "A"
+#define ALIAS_TABLE_ENUM        "E"
+#define ALIAS_COLUMN_ENUM       "O"
+#define ALIAS_COLUMN_SHORT      "o"
+#define ALIAS_DNA_BASES         "D"
+#define ALIAS_MAX_LINE_LEN      "M"
+#define ALIAS_LINE_INDENT       "i"
+#define ALIAS_FILTER            "F"
+#define ALIAS_FORMAT            "f"
+#define ALIAS_ID_RANGE          "r"
+#define ALIAS_WITHOUT_SRA       "n"
+#define ALIAS_EXCLUDED_COLUMNS  "x"
+#define ALIAS_BOOLEAN           "b"
+#define ALIAS_OBJVER            "j"
+#define ALIAS_OBJTYPE           "y"
+#define ALIAS_NUMELEM           "u"
+#define ALIAS_NUMELEMSUM        "U"
+
+#define USE_PATHTYPE_TO_DETECT_DB_OR_TAB 1
+#define CURSOR_CACHE_SIZE 256*1024*1024
+#define DEF_OPTION_OUT_BUF_SIZE 1024*1024
+
+typedef enum dump_format_t
+{
+    df_default,
+    df_csv,
+    df_xml,
+    df_json,
+    df_piped,
+    df_sra_dump,
+    df_tab,
+    df_fastq,
+    df_fastq1,
+    df_fasta,
+    df_fasta1,
+    df_fasta2,
+    df_qual,
+    df_qual1,
+    df_bin,
+    df_sql
+} dump_format_t;
+
+/********************************************************************
+the dump context contains all informations needed to execute the dump
+********************************************************************/
+typedef struct dump_context
+{
+    const char *path;
+    Vector schema_list;
+    const char *table;
+    const char *columns;
+    const char *excluded_columns;
+    const char *filter;
+    const char *idx_range;
+    const char *row_range;
+    const char *output_file;
+    const char *output_path;
+    struct num_gen * rows;
+    bool print_row_id;
+    uint16_t lf_after_row;
+    uint16_t max_line_len;
+    uint16_t indented_line_len;
+    uint16_t phase;
+    uint32_t generic_idx;
+    uint32_t slice_depth;
+    size_t cur_cache_size;
+    size_t output_buffer_size;
+    dump_format_t format;
+    out_redir_mode_t compress_mode;
+    char c_boolean;
+
+    bool print_column_names;
+    bool print_in_hex;
+    bool print_dna_bases;
+    bool help_requested;
+    bool usage_requested;
+    bool schema_dump_requested;
+    bool table_enum_requested;
+    bool version_requested;
+    bool column_enum_requested;
+    bool column_enum_short;
+    bool id_range_requested;
+    bool without_sra_types;
+    bool objver_requested;
+    bool objts_requested;
+    bool objtype_requested;
+    bool print_num_elem;
+    bool sum_num_elem;
+    bool show_blobbing;
+    bool enum_phys;
+    bool enum_readable;
+    bool idx_enum_requested;
+    bool idx_range_requested;
+    bool disable_multithreading;
+    bool print_info;
+    bool table_defined;
+    bool diff;
+    bool show_spotgroups;
+    bool merge_ranges;
+    bool show_spread;
+    bool interactive;
+} dump_context;
+typedef dump_context* p_dump_context;
+
+
+rc_t vdco_init( dump_context **ctx );
+rc_t vdco_destroy( p_dump_context ctx );
+
+size_t vdco_schema_count( p_dump_context ctx );
+
+void vdco_show_usage( p_dump_context ctx );
+void vdco_show_help( p_dump_context ctx );
+
+rc_t vdco_set_table( p_dump_context ctx, const char *src );
+rc_t vdco_set_table_String( p_dump_context ctx, const String * src );
+
+rc_t vdco_capture_arguments_and_options( const Args * args, dump_context *ctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-fastq.c b/tools/vdb-dump/vdb-dump-fastq.c
new file mode 100644
index 0000000..d02fef3
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-fastq.c
@@ -0,0 +1,1132 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-fastq.h"
+#include "vdb-dump-helper.h"
+
+#include <stdlib.h>
+
+#include <kdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/num-gen.h>
+
+#include <insdc/sra.h> /* for filter/types */
+
+
+rc_t CC Quitting ( void );
+
+#define INVALID_COLUMN 0xFFFFFFFF
+#define DEF_FASTA_LEN 70
+
+typedef struct fastq_ctx
+{
+    const char * run_name;
+    const VTable * tbl;
+    const VCursor * cursor;
+    const struct num_gen_iter * row_iter;
+    dump_format_t format;
+    size_t cur_cache_size;
+    uint32_t max_line_len;
+    uint32_t idx_read;
+    uint32_t idx_qual;
+    uint32_t idx_name;
+    uint32_t idx_read_start;
+    uint32_t idx_read_len;
+    uint32_t idx_read_type;
+} fastq_ctx;
+
+
+static char * vdb_fastq_extract_run_name( const char * acc_or_path )
+{
+    char * delim = string_rchr ( acc_or_path, string_size( acc_or_path ), '/' );
+    if ( delim == NULL )
+        return string_dup_measure ( acc_or_path, NULL );
+    else
+        return string_dup_measure ( delim + 1, NULL );    
+}
+
+
+static void init_fastq_ctx( const p_dump_context ctx, fastq_ctx * fctx, const char * acc_or_path )
+{
+    fctx->run_name = vdb_fastq_extract_run_name( acc_or_path );
+    fctx->tbl      = NULL;    
+    fctx->cursor   = NULL;
+    fctx->row_iter = NULL;
+    fctx->max_line_len = ctx->max_line_len;
+    fctx->format   = ctx->format;
+    fctx->cur_cache_size = ctx->cur_cache_size;
+    fctx->idx_read = INVALID_COLUMN;
+    fctx->idx_qual = INVALID_COLUMN;
+    fctx->idx_name = INVALID_COLUMN;
+    fctx->idx_read_start  = INVALID_COLUMN;
+    fctx->idx_read_len    = INVALID_COLUMN;
+    fctx->idx_read_type   = INVALID_COLUMN;
+}
+
+
+static void vdb_fastq_row_error( const char * fmt, rc_t rc, int64_t row_id )
+{
+    PLOGERR( klogInt, ( klogInt, rc, fmt, "row_nr=%li", row_id ) );
+}
+
+
+static bool is_name_in_list( KNamelist * col_names, const char * to_find )
+{
+    bool res = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( col_names, &count );
+    DISP_RC( rc, "KNamelistCount() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        size_t to_find_len = string_size( to_find );
+        for ( i = 0; i < count && rc == 0 && !res; ++i )
+        {
+            const char * col_name;
+            rc = KNamelistGet( col_names, i, &col_name );
+            DISP_RC( rc, "KNamelistGet() failed" );
+            if ( rc == 0 )
+            {
+                size_t col_name_len = string_size( col_name );
+                if ( col_name_len == to_find_len )
+                    res = ( string_cmp( to_find, to_find_len, col_name, col_name_len, col_name_len ) == 0 );
+            }
+        }
+    }
+    return res;
+}
+
+
+static rc_t prepare_column( fastq_ctx * fctx, KNamelist * col_names, uint32_t * col_idx,
+                            const char * to_find, const char * col_spec )
+{
+    rc_t rc = 0;
+    if ( is_name_in_list( col_names, to_find ) )
+    {
+        rc = VCursorAddColumn( fctx->cursor, col_idx, col_spec );
+        if ( rc != 0 )
+        {
+            *col_idx = INVALID_COLUMN;
+            PLOGERR( klogInt, ( klogInt, rc, "VCurosrAddColumn( '$(col)' ) failed", "col=%s", col_spec ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_prepare_cursor( fastq_ctx * fctx )
+{
+    KNamelist * col_names;
+    rc_t rc = VTableListCol( fctx->tbl, &col_names );
+    DISP_RC( rc, "VTableListCol() failed" );
+    if ( rc == 0 )
+    {
+        rc = VTableCreateCachedCursorRead( fctx->tbl, &fctx->cursor, fctx->cur_cache_size );
+        DISP_RC( rc, "VTableCreateCursorRead( fasta/fastq ) failed" );
+        if ( rc == 0 )
+            rc = prepare_column( fctx, col_names, &fctx->idx_read, "READ", "(INSDC:dna:text)READ" );
+    
+        if ( rc == 0 && ( fctx->format == df_fastq || fctx->format == df_fastq1 ) )
+            rc = prepare_column( fctx, col_names, &fctx->idx_qual, "QUALITY", "(INSDC:quality:text:phred_33)QUALITY" );
+
+        if ( rc == 0 && ( fctx->format == df_qual || fctx->format == df_qual1 ) )
+            rc = prepare_column( fctx, col_names, &fctx->idx_qual, "QUALITY", "(INSDC:quality:phred)QUALITY" );
+            
+        if ( rc == 0 )
+        {
+            if ( fctx->format == df_fasta2 )
+                rc = prepare_column( fctx, col_names, &fctx->idx_name, "SEQ_ID", "(ascii)SEQ_ID" );
+            if ( rc == 0 && fctx->idx_name == INVALID_COLUMN )
+                rc = prepare_column( fctx, col_names, &fctx->idx_name, "NAME", "(ascii)NAME" );
+        }
+
+        if ( rc == 0 )
+            rc = prepare_column( fctx, col_names, &fctx->idx_read_start, "READ_START", "(INSDC:coord:zero)READ_START" );
+
+        if ( rc == 0 )
+            rc = prepare_column( fctx, col_names, &fctx->idx_read_len, "READ_LEN", "(INSDC:coord:len)READ_LEN" );
+
+        if ( rc == 0 )
+            rc = prepare_column( fctx, col_names, &fctx->idx_read_type, "READ_TYPE", "(INSDC:SRA:xread_type)READ_TYPE" );
+
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen ( fctx->cursor );
+            DISP_RC( rc, "VCursorOpen( fasta/fastq ) failed" );
+        }
+        KNamelistRelease( col_names );
+    }
+    return rc;
+}
+
+
+typedef struct fastq_spot
+{
+    const char * name;
+    const char * bases;
+    const char * qual;
+    const uint32_t * rd_start;
+    const uint32_t * rd_len;
+    const uint8_t * rd_type;
+    uint32_t name_len;
+    uint32_t num_bases;
+    uint32_t num_qual;
+    uint32_t num_rd_start;
+    uint32_t num_rd_len;
+    uint32_t num_rd_type;
+} fastq_spot;
+
+
+static rc_t read_spot( const fastq_ctx * fctx, int64_t row_id, fastq_spot * spot )
+{
+    rc_t rc = 0;
+    uint32_t elem_bits, boff;
+    if ( fctx->idx_name != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_name, &elem_bits,
+                                    (const void**)&spot->name, &boff, &spot->name_len );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), NAME ) failed", rc, row_id );
+    }
+
+    if ( rc == 0 && fctx->idx_read != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_read, &elem_bits,
+                                    (const void**)&spot->bases, &boff, &spot->num_bases );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), READ ) failed", rc, row_id );
+    }
+    
+    if ( rc == 0 && fctx->idx_qual != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_qual, &elem_bits,
+                                    (const void**)&spot->qual, &boff, &spot->num_qual );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), QUALITY ) failed", rc, row_id );
+    }
+
+    if ( rc == 0 && fctx->idx_read_start != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_read_start, &elem_bits,
+                                    (const void**)&spot->rd_start, &boff, &spot->num_rd_start );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), READ_START ) failed", rc, row_id );
+    }
+    
+    if ( rc == 0 && fctx->idx_read_len != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_read_len, &elem_bits,
+                                    (const void**)&spot->rd_len, &boff, &spot->num_rd_len );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), READ_LEN ) failed", rc, row_id );
+    }
+
+    if ( rc == 0 && fctx->idx_read_type != INVALID_COLUMN )
+    {
+        rc = VCursorCellDataDirect( fctx->cursor, row_id, fctx->idx_read_type, &elem_bits,
+                                    (const void**)&spot->rd_type, &boff, &spot->num_rd_type );
+        if ( rc != 0 )
+            vdb_fastq_row_error( "VCursorCellDataDirect( row#$(row_nr), READ_TYPE ) failed", rc, row_id );
+    }
+    
+    return rc;
+}
+
+
+static rc_t vdb_fastq1_frag_type_checked( fastq_spot * spot, int64_t row_id, const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( spot->num_bases != spot->num_qual )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        PLOGERR( klogInt,
+                 ( klogInt, rc, "invalid spot #$(row): bases.len( $(n_bases) ) != qual.len( $(n_qual)",
+                    "row=%li,n_bases=%d,n_qual=%d", row_id, spot->num_bases, spot->num_qual ) );
+    }
+    else if ( spot->num_rd_start != spot->num_rd_len ||
+               spot->num_rd_start != spot->num_rd_type )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        PLOGERR( klogInt,
+                 ( klogInt, rc, 
+                   "invalid spot #$(row): #READ_START=$(rd_start), #READ_LEN=$(rd_len), #READ_TYPE=$(rd_type)",
+                   "row=%li,rd_start=%d,rd_len=%d,rd_type=%d",
+                   row_id, spot->num_rd_start, spot->num_rd_len, spot->num_rd_type ) );
+    }
+    else
+    {
+        uint32_t idx, frag, ofs;
+        for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot->num_rd_start; ++idx )
+        {
+            if ( ( ( spot->rd_type[ idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) &&
+                 spot->rd_len[ idx ] > 0 )
+            {
+                rc = KOutMsg( "@%s.%li.%d %.*s length=%u\n%.*s\n+%s.%li.%d %.*s length=%u\n%.*s\n",
+                              fctx->run_name, row_id, frag, spot->name_len, spot->name, spot->rd_len[ idx ],
+                              spot->rd_len[ idx ], &( spot->bases[ ofs ] ),
+                              fctx->run_name, row_id, frag, spot->name_len, spot->name, spot->rd_len[ idx ],
+                              spot->rd_len[ idx ], &( spot->qual[ ofs ] )
+                              );
+                frag++;
+            }
+            ofs += spot->rd_len[ idx ];
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq1_frag_not_type_checked( fastq_spot * spot, int64_t row_id, const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( spot->num_bases != spot->num_qual )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        PLOGERR( klogInt,
+                 ( klogInt, rc, "invalid spot #$(row): bases.len( $(n_bases) ) != qual.len( $(n_qual)",
+                    "row=%li,n_bases=%d,n_qual=%d", row_id, spot->num_bases, spot->num_qual ) );
+    }
+    else if ( spot->num_rd_start != spot->num_rd_len )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        PLOGERR( klogInt,
+                 ( klogInt, rc, 
+                   "invalid spot #$(row): #READ_START=$(rd_start), #READ_LEN=$(rd_len)",
+                   "row=%li,rd_start=%d,rd_len=%d",
+                   row_id, spot->num_rd_start, spot->num_rd_len ) );
+    }
+    else
+    {
+        uint32_t idx, frag, ofs;
+        for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot->num_rd_start; ++idx )
+        {
+            if ( spot->rd_len[ idx ] > 0 )
+            {
+                rc = KOutMsg( "@%s.%li.%d %.*s length=%u\n%.*s\n+%s.%li.%d %.*s length=%u\n%.*s\n",
+                              fctx->run_name, row_id, frag, spot->name_len, spot->name, spot->rd_len[ idx ],
+                              spot->rd_len[ idx ], &( spot->bases[ ofs ] ),
+                              fctx->run_name, row_id, frag, spot->name_len, spot->name, spot->rd_len[ idx ],
+                              spot->rd_len[ idx ], &( spot->qual[ ofs ] )
+                              );
+                frag++;
+            }
+            ofs += spot->rd_len[ idx ];
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq1_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( fctx->idx_read == INVALID_COLUMN || fctx->idx_name == INVALID_COLUMN ||
+         fctx->idx_qual == INVALID_COLUMN || fctx->idx_read_start == INVALID_COLUMN ||
+         fctx->idx_read_len == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta-format, at least one of these columns not found: READ, NAME, QUALITY, READ_START, READ_LEN" );
+    }
+    else
+    {
+        bool has_type = ( fctx->idx_read_type == INVALID_COLUMN );
+        int64_t row_id;
+        while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+        {
+            if ( rc == 0 )
+                rc = Quitting();
+            if ( rc == 0 )
+            {
+                fastq_spot spot;
+                rc = read_spot( fctx, row_id, &spot );
+                if ( rc == 0 )
+                {
+                    if ( has_type )
+                        rc = vdb_fastq1_frag_type_checked( &spot, row_id, fctx );
+                    else
+                        rc = vdb_fastq1_frag_not_type_checked( &spot, row_id, fctx );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( fctx->idx_read == INVALID_COLUMN || fctx->idx_qual == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta-format: READ and/or QUALITY column not found" );
+    }
+    else
+    {
+        bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+        int64_t row_id;
+        while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+        {
+            if ( rc == 0 )
+                rc = Quitting();
+            if ( rc == 0 )
+            {
+                fastq_spot spot;
+                rc = read_spot( fctx, row_id, &spot );
+                if ( rc == 0 )
+                {
+                    if ( has_name )
+                        rc = KOutMsg( "@%s.%li %.*s length=%u\n%.*s\n+%s.%li %.*s length=%u\n%.*s\n",
+                                    fctx->run_name, row_id, spot.name_len, spot.name, spot.num_bases,
+                                    spot.num_bases, spot.bases,
+                                    fctx->run_name, row_id, spot.name_len, spot.name, spot.num_qual,
+                                    spot.num_qual, spot.qual );
+                    else
+                    
+                        rc = KOutMsg( "@%s.%li %li length=%u\n%.*s\n+%s.%li %li length=%u\n%.*s\n",
+                                    fctx->run_name, row_id, row_id, spot.num_bases,
+                                    spot.num_bases, spot.bases,
+                                    fctx->run_name, row_id, row_id, spot.num_bases,
+                                    spot.num_qual, spot.qual );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_bases( const char * bases, uint32_t num_bases, uint32_t max_line_len )
+{
+    rc_t rc;
+    if ( max_line_len == 0 )
+        rc = KOutMsg( "%.*s\n", num_bases, bases );
+    else
+    {
+        uint32_t idx = 0, to_print = num_bases;
+        rc = 0;
+        while ( rc == 0 && idx < num_bases )
+        {
+            if ( to_print > max_line_len )
+                to_print = max_line_len;
+
+            rc = KOutMsg( "%.*s\n", to_print, &bases[ idx ] );
+            if ( rc == 0 )
+            {
+                idx += to_print;
+                to_print = ( num_bases - idx );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_qual( const char * qual, uint32_t count, uint32_t max_line_len )
+{
+    rc_t rc = 0;
+    uint32_t i = 0, on_line = 0;
+    while ( rc == 0 && i < count )
+    {
+        char buffer[ 16 ];
+        size_t num_writ;
+        rc = string_printf( buffer, sizeof buffer, &num_writ, "%d", qual[ i ] );
+        if ( rc == 0 )
+        {
+            if ( on_line == 0 )
+            {
+                rc = KOutMsg( "%s", buffer );
+                on_line = num_writ;
+            }
+            if ( ( on_line + num_writ + 1 ) < max_line_len )
+            {
+                rc = KOutMsg( " %s", buffer );
+                on_line += ( num_writ + 1 );
+            }
+            else
+            {
+                rc = KOutMsg( "\n%s", buffer );
+                on_line = num_writ;
+            }
+            i++;
+        }
+    }
+    rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t vdb_fasta_frag_type_checked_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                uint32_t idx, frag, ofs;
+                for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot.num_rd_start; ++idx )
+                {
+                    uint32_t frag_len = spot.rd_len[ idx ];
+                    if ( frag_len > 0 &&
+                         ( ( spot.rd_type[ idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+                    {
+                        if ( has_name )
+                            rc = KOutMsg( ">%s.%li.%d %.*s length=%u\n",
+                                    fctx->run_name, row_id, frag, spot.name_len, spot.name, frag_len );
+                        else
+                            rc = KOutMsg( ">%s.%li.%d %li length=%u\n",
+                                    fctx->run_name, row_id, frag, row_id, frag_len );
+                    
+                        if ( rc == 0 )
+                            rc = print_bases( &( spot.bases[ ofs ] ), frag_len, fctx->max_line_len );
+
+                        frag++;
+                    }
+                    ofs += frag_len;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fasta_frag_no_type_check_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                uint32_t idx, frag, ofs;
+                for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot.num_rd_start; ++idx )
+                {
+                    uint32_t frag_len = spot.rd_len[ idx ];
+                    if ( frag_len > 0 )
+                    {
+                        if ( has_name )
+                            rc = KOutMsg( ">%s.%li.%d %.*s length=%u\n",
+                                    fctx->run_name, row_id, frag, spot.name_len, spot.name, frag_len );
+                        else
+                            rc = KOutMsg( ">%s.%li.%d %li length=%u\n",
+                                    fctx->run_name, row_id, frag, row_id, frag_len );
+                    
+                        if ( rc == 0 )
+                            rc = print_bases( &( spot.bases[ ofs ] ), frag_len, fctx->max_line_len );
+
+                        frag++;
+                    }
+                    ofs += frag_len;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fasta_spot_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                if ( has_name )
+                    rc = KOutMsg( ">%s.%li %.*s length=%u\n",
+                            fctx->run_name, row_id, spot.name_len, spot.name, spot.num_bases );
+                else
+                    rc = KOutMsg( ">%s.%li %li length=%u\n", fctx->run_name, row_id, row_id, spot.num_bases );
+                    
+                if ( rc == 0 )
+                    rc = print_bases( spot.bases, spot.num_bases, fctx->max_line_len );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fasta_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( fctx->idx_read == INVALID_COLUMN )
+    {
+        /* we actually only need a READ-column, everything else name/splitting etc. is optional... */
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta-format: READ column not found" );
+    }
+    else
+    {
+        bool can_split = ( fctx->idx_read_start != INVALID_COLUMN && fctx->idx_read_len != INVALID_COLUMN );
+        if ( can_split )
+        {
+            bool has_type = ( fctx->idx_read_type != INVALID_COLUMN );
+            if ( has_type )
+                rc = vdb_fasta_frag_type_checked_loop( fctx );
+            else
+                rc = vdb_fasta_frag_no_type_check_loop( fctx );
+        }
+        else
+            rc = vdb_fasta_spot_loop( fctx );
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------- */
+
+static rc_t vdb_qual_frag_type_checked_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                uint32_t idx, frag, ofs;
+                for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot.num_rd_start; ++idx )
+                {
+                    uint32_t frag_len = spot.rd_len[ idx ];
+                    if ( frag_len > 0 &&
+                         ( ( spot.rd_type[ idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+                    {
+                        if ( has_name )
+                            rc = KOutMsg( ">%s.%li.%d %.*s length=%u\n",
+                                    fctx->run_name, row_id, frag, spot.name_len, spot.name, frag_len );
+                        else
+                            rc = KOutMsg( ">%s.%li.%d %li length=%u\n",
+                                    fctx->run_name, row_id, frag, row_id, frag_len );
+                    
+                        if ( rc == 0 )
+                            rc = print_qual( &( spot.qual[ ofs ] ), frag_len, fctx->max_line_len );
+
+                        frag++;
+                    }
+                    ofs += frag_len;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_qual_frag_no_type_check_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                uint32_t idx, frag, ofs;
+                for ( idx = 0, frag = 1, ofs = 0; rc == 0 && idx < spot.num_rd_start; ++idx )
+                {
+                    uint32_t frag_len = spot.rd_len[ idx ];
+                    if ( frag_len > 0 )
+                    {
+                        if ( has_name )
+                            rc = KOutMsg( ">%s.%li.%d %.*s length=%u\n",
+                                    fctx->run_name, row_id, frag, spot.name_len, spot.name, frag_len );
+                        else
+                            rc = KOutMsg( ">%s.%li.%d %li length=%u\n",
+                                    fctx->run_name, row_id, frag, row_id, frag_len );
+                    
+                        if ( rc == 0 )
+                            rc = print_qual( &( spot.qual[ ofs ] ), frag_len, fctx->max_line_len );
+
+                        frag++;
+                    }
+                    ofs += frag_len;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_qual_spot_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    bool has_name = ( fctx->idx_name != INVALID_COLUMN );
+    int64_t row_id;
+    while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+    {
+        if ( rc == 0 )
+            rc = Quitting();
+        if ( rc == 0 )
+        {
+            fastq_spot spot;
+            rc = read_spot( fctx, row_id, &spot );
+            if ( rc == 0 )
+            {
+                if ( has_name )
+                    rc = KOutMsg( ">%s.%li %.*s length=%u\n",
+                            fctx->run_name, row_id, spot.name_len, spot.name, spot.num_qual );
+                else
+                    rc = KOutMsg( ">%s.%li %li length=%u\n", fctx->run_name, row_id, row_id, spot.num_qual );
+                    
+                if ( rc == 0 )
+                    rc = print_qual( spot.qual, spot.num_qual, fctx->max_line_len );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_qual_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( fctx->idx_qual == INVALID_COLUMN )
+    {
+        /* we actually only need a QUAL-column, everything else name/splitting etc. is optional... */
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta-format: READ column not found" );
+    }
+    else
+    {
+        bool can_split = ( fctx->idx_read_start != INVALID_COLUMN && fctx->idx_read_len != INVALID_COLUMN );
+        if ( can_split )
+        {
+            bool has_type = ( fctx->idx_read_type != INVALID_COLUMN );
+            if ( has_type )
+                rc = vdb_qual_frag_type_checked_loop( fctx );
+            else
+                rc = vdb_qual_frag_no_type_check_loop( fctx );
+        }
+        else
+            rc = vdb_qual_spot_loop( fctx );
+    }
+    return rc;
+}
+
+
+/* -------------------------------------------------------------------------------------------------------------- */
+
+static rc_t vdb_fasta_accumulated( const char * bases, uint32_t num_bases, 
+                                   int32_t * chars_left_on_line, uint32_t max_line_len )
+{
+    rc_t rc = 0;
+    if ( num_bases < ( *chars_left_on_line ) )
+    {
+        rc = KOutMsg( "%.*s", num_bases, bases );
+        ( *chars_left_on_line ) -= num_bases;
+    }
+    else if ( num_bases == ( *chars_left_on_line ) )
+    {
+        rc = KOutMsg( "%.*s\n", num_bases, bases );
+        ( *chars_left_on_line ) = max_line_len;
+    }
+    else
+    {
+        uint32_t ofs = 0;
+        int32_t remaining = num_bases;
+        while( rc == 0 && ofs < num_bases )
+        {
+            if ( remaining >= ( *chars_left_on_line ) )
+            {
+                rc = KOutMsg( "%.*s\n", ( *chars_left_on_line ), &bases[ ofs ] );
+                ofs += ( *chars_left_on_line );
+                remaining -= ( *chars_left_on_line );
+                ( *chars_left_on_line ) = max_line_len;
+            }
+            else
+            {
+                rc = KOutMsg( "%.*s", remaining, &bases[ ofs ] );
+                ofs += remaining;
+                ( *chars_left_on_line ) -= remaining;
+                remaining = 0;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fasta1_loop( const fastq_ctx * fctx )
+{
+    rc_t rc;
+    if ( fctx->idx_read == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta1-format: READ column not found" );
+    }
+    else
+    {
+        int64_t row_id;
+        int32_t chars_left_on_line = fctx->max_line_len;
+        
+        rc = KOutMsg( ">%s\n", fctx->run_name );
+        while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+        {
+            if ( rc == 0 )
+                rc = Quitting();
+            if ( rc == 0 )
+            {
+                fastq_spot spot;
+                rc = read_spot( fctx, row_id, &spot );
+                if ( rc == 0 )
+                    rc = vdb_fasta_accumulated( spot.bases, spot.num_bases, &chars_left_on_line, fctx->max_line_len );
+            }
+        }
+        rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fasta2_loop( const fastq_ctx * fctx )
+{
+    rc_t rc = 0;
+    if ( fctx->idx_name == INVALID_COLUMN || fctx->idx_read == INVALID_COLUMN )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcNoObj, rcInvalid );
+        DISP_RC( rc, "cannot generate fasta2-format: READ and/or NAME column not found" );
+    }
+    else
+    {
+        char last_name[ 1024 ];
+        size_t last_name_len = 0;
+        int64_t row_id;
+        int32_t chars_left_on_line = fctx->max_line_len;
+        
+        while ( rc == 0 && num_gen_iterator_next( fctx->row_iter, &row_id, &rc ) )
+        {
+            if ( rc == 0 )
+                rc = Quitting();
+            if ( rc == 0 )
+            {
+                fastq_spot spot;
+                rc = read_spot( fctx, row_id, &spot );
+                if ( rc == 0 )
+                {
+                    bool print_ref_name = ( last_name_len == 0 );
+                    if ( !print_ref_name )
+                    {
+                        print_ref_name = ( last_name_len != spot.name_len );
+                        if ( !print_ref_name )
+                            print_ref_name = ( string_cmp( last_name, last_name_len, spot.name, spot.name_len, spot.name_len ) != 0 );
+                    }
+                    
+                    if ( print_ref_name )
+                    {
+                        if ( chars_left_on_line == fctx->max_line_len )
+                            rc = KOutMsg( ">%.*s\n", spot.name_len, spot.name );
+                        else
+                        {
+                            rc = KOutMsg( "\n>%.*s\n", spot.name_len, spot.name );
+                            chars_left_on_line = fctx->max_line_len;
+                        }
+                        last_name_len = string_copy ( last_name, sizeof last_name, spot.name, spot.name_len );
+                    }
+                    
+                    if ( rc == 0 )
+                        rc = vdb_fasta_accumulated( spot.bases, spot.num_bases, &chars_left_on_line, fctx->max_line_len );
+                }
+            }
+        }
+        rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq_tbl( const p_dump_context ctx, fastq_ctx * fctx )
+{
+    rc_t rc = vdb_prepare_cursor( fctx );
+    DISP_RC( rc, "the table lacks READ and/or QUALITY column" );
+    if ( rc == 0 )
+    {
+        int64_t  first;
+        uint64_t count;
+        /* READ is the colum we have in all cases... */
+        rc = VCursorIdRange( fctx->cursor, fctx->idx_read, &first, &count );
+        DISP_RC( rc, "VCursorIdRange() failed" );
+        if ( rc == 0 )
+        {
+            if ( count == 0 )
+            {
+                KOutMsg( "this table is empty\n" );
+            }
+            else
+            {
+                /* if the user did not specify a row-range, take all rows */
+                if ( ctx->rows == NULL )
+                {
+                    rc = num_gen_make_from_range( &ctx->rows, first, count );
+                    DISP_RC( rc, "num_gen_make_from_range() failed" );
+                }
+                /* if the user did specify a row-range, check the boundaries */
+                else
+                {
+                    rc = num_gen_trim( ctx->rows, first, count );
+                    DISP_RC( rc, "num_gen_trim() failed" );
+                }
+
+                if ( rc == 0 && !num_gen_empty( ctx->rows ) )
+                {
+                    rc = num_gen_iterator_make( ctx->rows, &fctx->row_iter );
+                    DISP_RC( rc, "num_gen_iterator_make() failed" );
+                    if ( rc == 0 )
+                    {
+                        if ( fctx->max_line_len == 0 )
+                            fctx->max_line_len = DEF_FASTA_LEN;
+                            
+                        switch( fctx->format )
+                        {
+                            /* one FASTQ-record ( 4 liner ) per READ/SPOT */
+                            case df_fastq : rc = vdb_fastq_loop( fctx ); /* <--- */
+                                             break;
+
+                            /* one FASTQ-record ( 4 liner ) per FRAGMENT/ALIGNMENT */
+                            case df_fastq1 : rc = vdb_fastq1_loop( fctx ); /* <--- */
+                                              break;
+
+                            /* one FASTA-record ( 2 liner ) per READ/SPOT */
+                            case df_fasta :  rc = vdb_fasta_loop( fctx ); /* <--- */
+                                             break;
+
+                             /* one FASTA-record ( many lines ) for the whole accession ( REFSEQ-accession )  */
+                            case df_fasta1 : rc = vdb_fasta1_loop( fctx ); /* <--- */
+                                             break;
+
+                             /* one FASTA-record ( many lines ) for each REFERENCE used in a cSRA-database  */
+                            case df_fasta2 : rc = vdb_fasta2_loop( fctx ); /* <--- */
+                                             break;
+
+                            /* one QUAL-record ( 2 liner ) per whole READ/SPOT */
+                            case df_qual :  rc = vdb_qual_spot_loop( fctx ); /* <--- */
+                                             break;
+
+                            /* one QUAL-record ( 2 liner ) per FRAGMENT/ALIGNMENTT */
+                            case df_qual1 :  rc = vdb_qual_loop( fctx ); /* <--- */
+                                             break;
+
+                            default : break;
+                        }
+                        num_gen_iterator_destroy( fctx->row_iter );
+                    }
+                }
+                else
+                    rc = RC( rcExe, rcDatabase, rcReading, rcRange, rcEmpty );
+            }
+        }
+        VCursorRelease( fctx->cursor );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq_table( const p_dump_context ctx,
+                             const VDBManager *mgr,
+                             fastq_ctx * fctx )
+{
+     VSchema * schema = NULL;
+    rc_t rc;
+
+    vdh_parse_schema( mgr, &schema, &(ctx->schema_list), true /* ctx->force_sra_schema */ );
+
+    rc = VDBManagerOpenTableRead( mgr, &fctx->tbl, schema, "%s", ctx->path );
+    DISP_RC( rc, "VDBManagerOpenTableRead() failed" );
+    if ( rc == 0 )
+    {
+        rc = vdb_fastq_tbl( ctx, fctx );
+        VTableRelease( fctx->tbl );
+    }
+    
+    if ( schema != NULL )
+        VSchemaRelease( schema );
+
+    return rc;
+}
+
+
+static rc_t vdb_fastq_database( const p_dump_context ctx,
+                                const VDBManager *mgr,
+                                fastq_ctx * fctx )
+{
+    const VDatabase * db;
+    VSchema *schema = NULL;
+    rc_t rc;
+
+    vdh_parse_schema( mgr, &schema, &(ctx->schema_list), true /* ctx->force_sra_schema */ );
+
+    rc = VDBManagerOpenDBRead( mgr, &db, schema, "%s", ctx->path );
+    DISP_RC( rc, "VDBManagerOpenDBRead() failed" );
+    if ( rc == 0 )
+    {
+        bool table_defined = ( ctx->table != NULL );
+        if ( !table_defined )
+            table_defined = vdh_take_this_table_from_db( ctx, db, "SEQUENCE" );
+
+        if ( table_defined )
+        {
+            rc = VDatabaseOpenTableRead( db, &fctx->tbl, "%s", ctx->table );
+            DISP_RC( rc, "VDatabaseOpenTableRead() failed" );
+            if ( rc == 0 )
+            {
+                rc = vdb_fastq_tbl( ctx, fctx );
+                VTableRelease( fctx->tbl );
+            }
+        }
+        else
+        {
+            LOGMSG( klogInfo, "opened as vdb-database, but no table found/defined" );
+            ctx->usage_requested = true;
+        }
+        VDatabaseRelease( db );
+    }
+
+    if ( schema != NULL )
+        VSchemaRelease( schema );
+    return rc;
+}
+
+
+static rc_t vdb_fastq_by_pathtype( const p_dump_context ctx,
+                                   const VDBManager *mgr,
+                                   fastq_ctx * fctx )                                   
+{
+    rc_t rc;
+    int path_type = ( VDBManagerPathType ( mgr, "%s", ctx->path ) & ~ kptAlias );
+    /* types defined in <kdb/manager.h> */
+    switch ( path_type )
+    {
+    case kptDatabase    :  rc = vdb_fastq_database( ctx, mgr, fctx );
+                            DISP_RC( rc, "dump_database() failed" );
+                            break;
+
+    case kptPrereleaseTbl:
+    case kptTable       :  rc = vdb_fastq_table( ctx, mgr, fctx );
+                            DISP_RC( rc, "dump_table() failed" );
+                            break;
+
+    default             :  rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                                "p=%s", ctx->path ) );
+                            if ( vdco_schema_count( ctx ) == 0 )
+                            {
+                            LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+                            }
+                            break;
+    }
+    return rc;
+}
+
+
+static rc_t vdb_fastq_by_probing( const p_dump_context ctx,
+                                  const VDBManager *mgr,
+                                  fastq_ctx * fctx )
+{
+    rc_t rc;
+    if ( vdh_is_path_database( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdb_fastq_database( ctx, mgr, fctx );
+        DISP_RC( rc, "dump_database() failed" );
+    }
+    else if ( vdh_is_path_table( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdb_fastq_table( ctx, mgr, fctx );
+        DISP_RC( rc, "dump_table() failed" );
+    }
+    else
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                 "p=%s", ctx->path ) );
+        if ( vdco_schema_count( ctx ) == 0 )
+        {
+            LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t vdf_main( const p_dump_context ctx, const VDBManager * mgr, const char * acc_or_path )
+{
+    rc_t rc = 0;
+    fastq_ctx fctx;
+    init_fastq_ctx( ctx, &fctx, acc_or_path );
+    ctx->path = string_dup_measure ( acc_or_path, NULL );
+    
+    if ( USE_PATHTYPE_TO_DETECT_DB_OR_TAB ) /* in vdb-dump-context.h */
+        rc = vdb_fastq_by_pathtype( ctx, mgr, &fctx );
+    else
+        rc = vdb_fastq_by_probing( ctx, mgr, &fctx );
+
+    free( ( char* )ctx->path );
+    free( ( void* )fctx.run_name );
+    ctx->path = NULL;
+
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-fastq.h b/tools/vdb-dump/vdb-dump-fastq.h
new file mode 100644
index 0000000..652718c
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-fastq.h
@@ -0,0 +1,47 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_fastq_
+#define _h_vdb_dump_fastq_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "vdb-dump-context.h"
+#include <vdb/manager.h>
+#include <kfs/directory.h>
+
+rc_t vdf_main( const p_dump_context ctx, const VDBManager * mgr, const char * acc_or_path );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-filter.c b/tools/vdb-dump/vdb-dump-filter.c
new file mode 100644
index 0000000..962f0e7
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-filter.c
@@ -0,0 +1,116 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-filter.h"
+#include <klib/text.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+bool vdfi_make_filter( filter **flt, const char *expression )
+{
+    bool res = false;
+    if ( flt == NULL ) return res;
+    (*flt) = malloc( sizeof( flt ) );
+    if ( *flt )
+    {
+        (*flt)->expression = string_dup_measure( expression, NULL );
+        (*flt)->filter_type = filter_unknown;
+        res = true;
+    }
+    return res;
+}
+
+void vdfi_destroy_filter( p_filter flt )
+{
+    if ( flt == NULL ) return;
+    free( flt->expression );
+    free( flt );
+}
+
+bool vdfi_make( filters **flts )
+{
+    bool res = false;
+    if ( flts == NULL ) return res;
+    (*flts) = malloc( sizeof( filters ) );
+    if ( *flts )
+    {
+        VectorInit( &( (*flts)->filters ), 0, 5 );
+        (*flts)->match = false;
+        (*flts)->count = 0;
+        res = true;
+    }
+    return res;
+}
+
+static void CC vdfi_destroy_filter_1( void* node, void* data )
+{
+    vdfi_destroy_filter( (p_filter)node );
+}
+
+void vdfi_destroy( p_filters flts )
+{
+    if ( flts == NULL ) return;
+    VectorWhack( &(flts->filters), vdfi_destroy_filter_1, NULL );
+    free( flts );
+}
+
+bool vdfi_new_filter( p_filters flts, const char *expression )
+{
+    bool res = false;
+    filter *new_filter;
+    if ( flts == NULL ) return res;
+    if ( expression == NULL ) return res;
+    if ( expression[0] == 0 ) return res;
+    if ( vdfi_make_filter( &new_filter, expression ) )
+    {
+        res = ( VectorAppend( &(flts->filters), NULL, new_filter ) == 0 );
+        if ( res ) flts->count++;
+    }
+    return res;
+}
+
+void vdfi_reset( p_filters flts )
+{
+    if ( flts == NULL ) return;
+    flts->match = false;
+}
+
+bool vdfi_match( p_filters flts )
+{
+    if ( flts == NULL ) return false;
+    return flts->match;
+}
+
+uint16_t vdfi_count( p_filters flts )
+{
+    if ( flts == NULL ) return 0;
+    return flts->count;
+}
diff --git a/tools/vdb-dump/vdb-dump-filter.h b/tools/vdb-dump/vdb-dump-filter.h
new file mode 100644
index 0000000..47909fe
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-filter.h
@@ -0,0 +1,82 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_filter_
+#define _h_vdb_dump_filter_
+
+#include <klib/vector.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum filter_t
+{
+    filter_unknown,
+    filter_bool,
+    filter_integer,
+    filter_float,
+    filter_text
+} filter_t;
+
+/********************************************************************
+the dump_filter contains a filter expression for a column
+********************************************************************/
+typedef struct filter
+{
+    filter_t filter_type;
+    char *expression;
+} filter;
+typedef filter* p_filter;
+
+void filter_dosomething( p_filter flt );
+
+bool filter_make( filter **flt, const char *expression );
+void filter_destroy( p_filter flt );
+
+/********************************************************************
+the dump_filters is a vector of column_filters...
+********************************************************************/
+typedef struct filters
+{
+    Vector filters;
+    uint16_t count;
+    bool match;
+} filters;
+typedef filters* p_filters;
+
+bool vdfi_make( filters **flts );
+void vdfi_destroy( p_filters flts );
+bool vdfi_new_filter( p_filters flts, const char *expression );
+void vdfi_reset( p_filters flts );
+bool vdfi_match( p_filters flts );
+uint16_t vdfi_count( p_filters flts );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-formats.c b/tools/vdb-dump/vdb-dump-formats.c
new file mode 100644
index 0000000..5364a87
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-formats.c
@@ -0,0 +1,383 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-formats.h"
+#include <sysalloc.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#define DISP_RC(rc,err) if( rc != 0 ) LOGERR( klogInt, rc, err );
+
+/*************************************************************************************
+    default ( with line-length-limitation and pretty print )
+*************************************************************************************/
+static void CC vdfo_print_col_default( void *item, void *data )
+{
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+    rc_t rc;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc != 0 ) return;
+
+    if ( r_ctx->ctx->print_column_names )
+    {
+        rc = vds_append_fmt( &(r_ctx->s_col),
+                             r_ctx->col_defs->max_colname_chars,
+                             "%*s: ",
+                             r_ctx->col_defs->max_colname_chars,
+                             my_col_def->name );
+        DISP_RC( rc, "dump_str_append_fmt() failed" )
+    }
+
+    /* append the cell-content */
+    rc = vds_append_str( &(r_ctx->s_col), my_col_def->content.buf );
+    DISP_RC( rc, "dump_str_append_str() failed" )
+    if ( rc == 0 )
+    {
+
+        /* indent the cell-line, if requested */
+        if ( r_ctx->ctx->indented_line_len > 0 )
+        {
+            rc = vds_indent( &(r_ctx->s_col),
+                             r_ctx->ctx->indented_line_len,
+                             r_ctx->col_defs->max_colname_chars + 2 );
+            DISP_RC( rc, "dump_str_indent() failed" )
+        }
+
+        /* print a truncate-hint at the end of the line if truncated */
+        if ( vds_truncated( &(r_ctx->s_col) ) )
+        {
+            rc = vds_rinsert( &(r_ctx->s_col), " ..." );
+            DISP_RC( rc, "dump_str_rinsert() failed" )
+        }
+    }
+
+    /* FINALLY we print the content of a column... */
+    KOutMsg( "%s\n", r_ctx->s_col.buf );
+}
+
+static rc_t vdfo_print_row_default( const p_row_context r_ctx )
+{
+    rc_t rc = 0;
+    if ( r_ctx->ctx->print_row_id )
+        rc = KOutMsg( "ROW-ID = %u\n", r_ctx->row_id );
+
+    if ( rc == 0 )
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_default, r_ctx );
+
+    if ( rc == 0 && r_ctx->ctx->lf_after_row > 0 )
+    {
+        uint16_t i=0;
+        while ( i++ < r_ctx->ctx->lf_after_row && rc == 0 )
+            rc = KOutMsg( "\n" );
+    }
+    return 0;
+}
+
+/*************************************************************************************
+    CSV
+*************************************************************************************/
+static void CC vdfo_print_col_csv( void *item, void *data )
+{
+    rc_t rc = 0;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    if ( r_ctx->col_nr > 0 || r_ctx->ctx->print_row_id )
+    {
+        rc = vds_append_str( &(r_ctx->s_col), "," );
+        DISP_RC( rc, "dump_str_append_str() failed" )
+    }
+    if ( rc == 0 )
+    {
+        rc = vds_2_csv( &(my_col_def->content) );
+        DISP_RC( rc, "dump_str_2_csv() failed" )
+        if ( rc == 0 )
+        {
+            rc = vds_append_str( &(r_ctx->s_col), my_col_def->content.buf );
+            DISP_RC( rc, "dump_str_append_str() failed" )
+            r_ctx->col_nr++;
+        }
+    }
+}
+
+static rc_t vdfo_print_row_csv( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 && r_ctx->ctx->print_row_id )
+        rc = KOutMsg( "%u", r_ctx->row_id );
+    
+    if ( rc == 0 )
+    {
+        r_ctx->col_nr = 0;
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_csv, r_ctx );
+        rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    XML
+*************************************************************************************/
+static void CC vdfo_print_col_xml( void *item, void *data )
+{
+    p_col_def my_col_def = (p_col_def)item;
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    KOutMsg( " <%s>\n", my_col_def->name );
+    KOutMsg( "%s", my_col_def->content.buf );
+    KOutMsg( " </%s>\n", my_col_def->name );
+}
+
+static rc_t vdfo_print_row_xml( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 )
+    {
+        rc = KOutMsg( "<row>\n" );
+        if ( rc  == 0 )
+        {
+            VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_xml, r_ctx );
+            rc = KOutMsg( "</row>\n");
+        }
+    }
+    return rc;
+}
+
+
+/*************************************************************************************
+    JSON
+*************************************************************************************/
+static void CC vdfo_print_col_json( void *item, void *data )
+{
+    rc_t rc = 0;
+    p_col_def my_col_def = (p_col_def)item;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    if ( ( my_col_def->type_desc.domain == vtdAscii )||
+         ( my_col_def->type_desc.domain == vtdUnicode ) )
+    {
+        rc = vds_escape( &(my_col_def->content), '"', '\\' );
+        DISP_RC( rc, "dump_str_escape() failed" )
+        if ( rc == 0 )
+        {
+            rc = vds_enclose_string( &(my_col_def->content), '"', '"' );
+            DISP_RC( rc, "dump_str_enclose_string() failed" )
+        }
+    }
+    else
+    {
+        if ( my_col_def->type_desc.intrinsic_dim > 1 )
+        {
+            rc = vds_enclose_string( &(my_col_def->content), '[', ']' );
+            DISP_RC( rc, "dump_str_enclose_string() failed" )
+        }
+    }
+
+    if ( rc == 0 )
+        KOutMsg( ",\n\"%s\":%s", my_col_def->name, my_col_def->content.buf );
+}
+
+static rc_t vdfo_print_row_json( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 )
+    {
+        rc = KOutMsg( "{\n" );
+        if ( rc == 0 )
+        {
+            rc = KOutMsg( "\"row_id\": %lu", r_ctx->row_id );
+            if ( rc == 0 )
+            {
+                VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_json, r_ctx );
+                rc = KOutMsg( "\n},\n\n" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*************************************************************************************
+    PIPED
+*************************************************************************************/
+static void CC vdfo_print_col_piped( void *item, void *data )
+{
+    rc_t rc = 0;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    /* first we print the row_id and the column-name for every column! */
+    KOutMsg( "%lu, %s: ", r_ctx->row_id, my_col_def->name );
+
+    if ( ( my_col_def->type_desc.domain == vtdAscii )||
+         ( my_col_def->type_desc.domain == vtdUnicode ) )
+    {
+        rc = vds_escape( &(my_col_def->content), '"', '\\' );
+        DISP_RC( rc, "dump_str_escape() failed" )
+        if ( rc == 0 )
+        {
+            rc = vds_enclose_string( &(my_col_def->content), '"', '"' );
+            DISP_RC( rc, "dump_str_enclose_string() failed" )
+        }
+    }
+    else
+    {
+        if ( my_col_def->type_desc.intrinsic_dim > 1 )
+        {
+            rc = vds_enclose_string( &(my_col_def->content), '[', ']' );
+            DISP_RC( rc, "dump_str_enclose_string() failed" )
+        }
+    }
+
+    if ( rc == 0 )
+        KOutMsg( "%s\n", my_col_def->content.buf );
+}
+
+
+/*************************************************************************************
+    like legacy sra-dump
+*************************************************************************************/
+static void CC vdfo_print_col_sra_dump( void *item, void *data )
+{
+    rc_t rc = 0;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    /* first we print the row_id and the column-name for every column! */
+    KOutMsg( "%lu. %s: ", r_ctx->row_id, my_col_def->name );
+
+    if ( rc == 0 )
+        KOutMsg( "%s\n", my_col_def->content.buf );
+}
+
+
+/*************************************************************************************
+    TAB-delimited
+*************************************************************************************/
+static void CC vdfo_print_col_tab( void *item, void *data )
+{
+    rc_t rc = 0;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    if ( r_ctx->col_nr > 0 || r_ctx->ctx->print_row_id )
+    {
+        rc = vds_append_str( &(r_ctx->s_col), "\t" );
+        DISP_RC( rc, "dump_str_append_str() failed" )
+    }
+    if ( rc == 0 )
+    {
+        rc = vds_append_str( &(r_ctx->s_col), my_col_def->content.buf );
+        DISP_RC( rc, "dump_str_append_str() failed" )
+        r_ctx->col_nr++;
+    }
+}
+
+
+static rc_t vdfo_print_row_piped( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 )
+    {
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_piped, r_ctx );
+        rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+static rc_t vdfo_print_row_sra_dump( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 )
+    {
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_sra_dump, r_ctx );
+        rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+static rc_t vdfo_print_row_tab( const p_row_context r_ctx )
+{
+    rc_t rc = vds_clear( &(r_ctx->s_col) );
+    DISP_RC( rc, "dump_str_clear() failed" )
+    if ( rc == 0 && r_ctx->ctx->print_row_id )
+        rc = KOutMsg( "%u", r_ctx->row_id );
+    
+    if ( rc == 0 )
+    {
+        r_ctx->col_nr = 0;
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_tab, r_ctx );
+        rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    print-format-switch
+*************************************************************************************/
+rc_t vdfo_print_row( const p_row_context r_ctx )
+{
+    rc_t rc = 0;
+    switch( r_ctx->ctx->format )
+    {
+    case df_default     : rc = vdfo_print_row_default( r_ctx ); break;
+    case df_csv         : rc = vdfo_print_row_csv( r_ctx ); break;
+    case df_xml         : rc = vdfo_print_row_xml( r_ctx ); break;
+    case df_json        : rc = vdfo_print_row_json( r_ctx ); break;
+    case df_piped       : rc = vdfo_print_row_piped( r_ctx ); break;
+    case df_sra_dump    : rc = vdfo_print_row_sra_dump( r_ctx ); break;
+    case df_tab         : rc = vdfo_print_row_tab( r_ctx ); break;
+    default            : rc = vdfo_print_row_default( r_ctx ); break;
+    }
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-formats.h b/tools/vdb-dump/vdb-dump-formats.h
new file mode 100644
index 0000000..34e12e5
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-formats.h
@@ -0,0 +1,51 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_formats_
+#define _h_vdb_dump_formats_
+
+#include <stdio.h>
+
+#include <klib/vector.h>
+#include <klib/rc.h>
+#include <klib/out.h>
+
+#include "vdb-dump-coldefs.h"
+#include "vdb-dump-context.h"
+#include "vdb-dump-row-context.h"
+#include "vdb-dump-str.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t vdfo_print_row( const p_row_context r_ctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-helper.c b/tools/vdb-dump/vdb-dump-helper.c
new file mode 100644
index 0000000..5064405
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-helper.c
@@ -0,0 +1,772 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include "vdb-dump-helper.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+
+rc_t ErrMsg( const char * fmt, ... )
+{
+    rc_t rc;
+    char buffer[ 4096 ];
+    size_t num_writ;
+
+    va_list list;
+    va_start( list, fmt );
+    rc = string_vprintf( buffer, sizeof buffer, &num_writ, fmt, list );
+    if ( rc == 0 )
+        rc = pLogMsg( klogErr, "$(E)", "E=%s", buffer );
+    va_end( list );
+    return rc;
+} 
+
+/********************************************************************
+helper function to display the version of the vdb-manager
+********************************************************************/
+rc_t vdh_show_manager_version( const VDBManager *my_manager )
+{
+    uint32_t version;
+    rc_t rc = VDBManagerVersion( my_manager, &version );
+    if ( rc != 0 )
+        ErrMsg( "VDBManagerVersion() -> %R", rc );
+    else
+    {
+        PLOGMSG ( klogInfo, ( klogInfo, "manager-version = $(maj).$(min).$(rel)",
+                              "vers=0x%X,maj=%u,min=%u,rel=%u",
+                              version,
+                              version >> 24,
+                              ( version >> 16 ) & 0xFF,
+                              version & 0xFFFF ));
+    }
+    return rc;
+}
+
+static void CC vdh_parse_1_schema( void *item, void *data )
+{
+    char *s = (char*)item;
+    VSchema *my_schema = (VSchema*)data;
+    if ( ( item != NULL )&&( my_schema != NULL ) )
+    {
+        rc_t rc = VSchemaParseFile( my_schema, "%s", s );
+        if ( rc != 0 )
+            ErrMsg( "VSchemaParseFile() -> %R", rc );
+    }
+}
+
+rc_t vdh_parse_schema( const VDBManager *my_manager,
+                       VSchema **new_schema,
+                       Vector *schema_list,
+                       bool with_sra_schema )
+{
+    rc_t rc = 0;
+
+    if ( my_manager == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    if ( new_schema == NULL )
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+
+    *new_schema = NULL;
+    
+    if ( with_sra_schema )
+    {
+        rc = VDBManagerMakeSRASchema( my_manager, new_schema );
+        if ( rc != 0 )
+            ErrMsg( "VDBManagerMakeSRASchema() -> %R", rc );
+    }
+    
+    if ( ( rc == 0 )&&( schema_list != NULL ) )
+    {
+        if ( *new_schema == NULL )
+        {
+            rc = VDBManagerMakeSchema( my_manager, new_schema );
+            if ( rc != 0 )
+                ErrMsg( "VDBManagerMakeSchema() -> %R", rc );
+        }
+        if ( rc == 0 )
+            VectorForEach( schema_list, false, vdh_parse_1_schema, *new_schema );
+    }
+    return rc;
+}
+
+/********************************************************************
+helper function to test if a given path is a vdb-table
+********************************************************************/
+bool vdh_is_path_table( const VDBManager *my_manager, const char *path,
+                        Vector *schema_list )
+{
+    bool res = false;
+    const VTable *my_table;
+    VSchema *my_schema = NULL;
+    rc_t rc;
+    
+    vdh_parse_schema( my_manager, &my_schema, schema_list, false );
+
+    rc = VDBManagerOpenTableRead( my_manager, &my_table, my_schema, "%s", path );
+    if ( rc == 0 )
+    {
+        res = true; /* yes we are able to open the table ---> path is a table */
+        VTableRelease( my_table );
+    }
+
+    if ( my_schema != NULL )
+    {
+        rc = VSchemaRelease( my_schema );
+        if ( rc != 0 )
+            ErrMsg( "VSchemaRelease() -> %R", rc );
+    }
+    return res;
+}
+
+
+const char * backback = "/../..";
+
+/********************************************************************
+helper function to test if a given path is a vdb-column
+by testing if the parent/parent dir is a vdb-table
+********************************************************************/
+bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
+                         Vector *schema_list )
+{
+    bool res = false;
+    size_t path_len = string_size( path );
+    char *pp_path = malloc( path_len + 20 );
+    if ( pp_path )
+    {
+        char *resolved = malloc( 1024 );
+        if ( resolved )
+        {
+            KDirectory *my_directory;
+            rc_t rc = KDirectoryNativeDir( &my_directory );
+            if ( rc != 0 )
+                ErrMsg( "KDirectoryNativeDir() -> %R", rc );
+            else
+            {
+                string_copy( pp_path, path_len + 20, path, path_len );
+                string_copy( &pp_path[ path_len ], 20, backback, string_size( backback ) );
+                rc = KDirectoryResolvePath( my_directory, true, resolved, 1023, "%s", pp_path );
+                if ( rc == 0 )
+                    res = vdh_is_path_table( my_manager, resolved, schema_list );
+            }
+            free( resolved );
+        }
+        free( pp_path );
+    }
+    return res;
+}
+
+/********************************************************************
+helper function to test if a given path is a vdb-database
+********************************************************************/
+bool vdh_is_path_database( const VDBManager *my_manager, const char *path,
+                           Vector *schema_list )
+{
+    bool res = false;
+    const VDatabase *my_database;
+    VSchema *my_schema = NULL;
+    rc_t rc;
+
+    vdh_parse_schema( my_manager, &my_schema, schema_list, false );
+
+    rc = VDBManagerOpenDBRead( my_manager, &my_database, my_schema, "%s", path );
+    if ( rc == 0 )
+    {
+        res = true; /* yes we are able to open the database ---> path is a database */
+        rc = VDatabaseRelease( my_database );
+        if ( rc != 0 )
+            ErrMsg( "VDatabaseRelease() -> %R", rc );
+    }
+
+    if ( my_schema != NULL )
+    {
+        rc = VSchemaRelease( my_schema );
+        if ( rc != 0 )
+            ErrMsg( "VSchemaRelease() -> %R", rc );
+    }
+    return res;
+}
+
+
+/*************************************************************************************
+helper-function to extract the name of the first table of a database
+and put it into the dump-context
+*************************************************************************************/
+bool vdh_take_1st_table_from_db( dump_context *ctx, const KNamelist * tbl_names )
+{
+    bool we_found_a_table = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( tbl_names, &count );
+    if ( rc != 0 )
+        ErrMsg( "KNamelistCount() -> %R", rc );
+    else if ( count > 0 )
+    {
+        const char *tbl_name;
+        rc = KNamelistGet( tbl_names, 0, &tbl_name );
+        if ( rc != 0 )
+            ErrMsg( "KNamelistGet( 0 ) -> %R", rc );
+        else
+        {
+            vdco_set_table( ctx, tbl_name );
+            we_found_a_table = true;
+        }
+    }
+    return we_found_a_table;
+}
+
+/*
+static int vdh_str_cmp( const char *a, const char *b )
+{
+    size_t asize = string_size ( a );
+    size_t bsize = string_size ( b );
+    return strcase_cmp ( a, asize, b, bsize, ( asize > bsize ) ? asize : bsize );
+}
+*/
+
+static bool vdh_str_starts_with( const char *a, const char *b )
+{
+    bool res = false;
+    size_t asize = string_size ( a );
+    size_t bsize = string_size ( b );
+    if ( asize >= bsize )
+    {
+        int cmp = strcase_cmp ( a, bsize, b, bsize, bsize );
+        res = ( cmp == 0 );
+    }
+    return res;
+}
+
+
+bool list_contains_value( const KNamelist * list, const String * value )
+{
+    bool found = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( list, &count );
+    if ( rc != 0 )
+        ErrMsg( "KNamelistCount() -> %R", rc );
+    else if ( count > 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0 && !found; ++i )
+        {
+            const char *s;
+            rc = KNamelistGet( list, i, &s );
+            if ( rc != 0 )
+                ErrMsg( "KNamelistGet( %d ) -> %R", i, rc );
+            else
+            {
+                String item;
+                StringInitCString( &item, s );
+                found = ( StringCompare ( &item, value ) == 0 );
+            }
+        }
+    }
+    return found;
+}
+
+
+static bool list_contains_value_starting_with( const KNamelist * list, const String * value, String * found )
+{
+    bool res = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( list, &count );
+    if ( rc != 0 )
+        ErrMsg( "KNamelistCount() -> %R", rc );
+    else if ( count > 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0 && !res; ++i )
+        {
+            const char *s;
+            rc = KNamelistGet( list, i, &s );
+            if ( rc != 0 )
+                ErrMsg( "KNamelistGet( %d ) -> %R", i, rc );
+            else
+            {
+                String item;
+                StringInitCString( &item, s );
+                if ( value->len <= item.len )
+                {
+                    item.len = value->len;
+                    item.size = value->size;
+                    res = ( StringCompare ( &item, value ) == 0 );
+                    if ( res )
+                        StringInitCString( found, s );
+                }
+            }
+        }
+    }
+    return res;
+}
+
+/*************************************************************************************
+helper-function to check if a given table is in the list of tables
+if found put that name into the dump-context
+*************************************************************************************/
+bool vdh_take_this_table_from_list( dump_context *ctx, const KNamelist * tbl_names,
+                                    const char * table_to_find )
+{
+    bool res = false;
+    String to_find;
+
+    StringInitCString( &to_find, table_to_find );
+    res = list_contains_value( tbl_names, &to_find );
+    if ( res )
+        vdco_set_table_String( ctx, &to_find );
+    else
+    {
+        String found;
+        res = list_contains_value_starting_with( tbl_names, &to_find, &found );
+        if ( res )
+            vdco_set_table_String( ctx, &found );
+    }
+    return res;
+}
+
+
+bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase * db,
+                                  const char * table_to_find )
+{
+    bool we_found_the_table = false;
+    KNamelist *tbl_names;
+    rc_t rc = VDatabaseListTbl( db, &tbl_names );
+    if ( rc != 0 )
+        ErrMsg( "VDatabaseListTbl() -> %R", rc );
+    else
+    {
+        we_found_the_table = vdh_take_this_table_from_list( ctx, tbl_names, table_to_find );
+        rc = KNamelistRelease( tbl_names );
+        if ( rc != 0 )
+            ErrMsg( "KNamelistRelease() -> %R", rc );
+    }
+    return we_found_the_table;
+}
+
+
+const char * s_unknown_tab = "unknown table";
+
+static rc_t vdh_print_full_col_info( dump_context *ctx,
+                                     const p_col_def col_def,
+                                     const VSchema *my_schema )
+{
+    rc_t rc = 0;
+    char * s_domain = vdcd_make_domain_txt( col_def->type_desc.domain );
+    if ( s_domain != NULL )
+    {
+        if ( ctx->table == NULL )
+        {
+            ctx->table = string_dup_measure( s_unknown_tab, NULL ); /* will be free'd when ctx get free'd */
+        }
+
+        if ( ( ctx->table != NULL )&&( col_def->name != NULL ) )
+        {
+            rc = KOutMsg( "%s.%.02d : (%.3d bits [%.02d], %8s)  %s",
+                    ctx->table,
+                    ctx->generic_idx++,
+                    col_def->type_desc.intrinsic_bits,
+                    col_def->type_desc.intrinsic_dim,
+                    s_domain,
+                    col_def->name );
+            if ( rc == 0 && my_schema )
+            {
+                char buf[64];
+                rc = VTypedeclToText( &(col_def->type_decl), my_schema, buf, sizeof( buf ) );
+                if ( rc != 0 )
+                    ErrMsg( "VTypedeclToText() -> %R", rc );
+                else
+                    rc = KOutMsg( "\n      (%s)", buf );
+            }
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+        else
+        {
+            if ( ctx->table == NULL )
+                rc = KOutMsg( "error: no table-name in print_column_info()" );
+
+            if ( col_def->name == NULL )
+                rc = KOutMsg( "error: no column-name in print_column_info()" );
+
+        }
+        free( s_domain );
+    }
+    else
+        rc = KOutMsg( "error: making domain-text in print_column_info()" );
+
+    return rc;
+}
+
+
+static rc_t vdh_print_short_col_info( const p_col_def col_def,
+                                      const VSchema *my_schema )
+{
+    rc_t rc = 0;
+    if ( col_def->name != NULL )
+    {
+        rc = KOutMsg( "%s", col_def->name );
+        if ( rc == 0 && my_schema != NULL )
+        {
+            char buf[ 64 ];
+            rc = VTypedeclToText( &(col_def->type_decl), my_schema,
+                                  buf, sizeof(buf) );
+            if ( rc != 0 )
+                ErrMsg( "VTypedeclToText() -> %R", rc );
+            else
+                rc = KOutMsg( " (%s)", buf );
+        }
+        if ( rc == 0 )
+            rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+rc_t vdh_print_col_info( dump_context *ctx,
+                         const p_col_def col_def,
+                         const VSchema *my_schema )
+{
+    rc_t rc = 0;
+    if ( ctx != NULL && col_def != NULL )
+    {
+        if ( ctx->column_enum_requested )
+            rc = vdh_print_full_col_info( ctx, col_def, my_schema );
+        else
+            rc = vdh_print_short_col_info( col_def, my_schema );
+    }
+    return rc;
+}
+
+rc_t resolve_remote_accession( const char * accession, char * dst, size_t dst_size )
+{
+    VFSManager * vfs_mgr;
+    rc_t rc = VFSManagerMake( &vfs_mgr );
+    dst[ 0 ] = 0;
+    if ( rc != 0 )
+        ErrMsg( "VFSManagerMake() -> %R", rc );
+    else
+    {
+        VResolver * resolver;
+        rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+        if ( rc != 0 )
+            ErrMsg( "VFSManagerGetResolver() -> %R", rc );
+        else
+        {
+            VPath * vpath;
+            rc = VFSManagerMakePath( vfs_mgr, &vpath, "ncbi-acc:%s", accession );
+            if ( rc != 0 )
+                ErrMsg( "VFSManagerMakePath( %s ) -> %R", accession, rc );
+            else
+            {
+                const VPath * remote = NULL;
+                VResolverRemoteEnable( resolver, vrAlwaysEnable );
+                rc = VResolverQuery ( resolver, 0, vpath, NULL, &remote, NULL );
+                if ( rc == 0 &&  remote != NULL )
+                {
+                    const String * path;
+                    rc = VPathMakeString( remote, &path );
+
+                    if ( rc == 0 && path != NULL )
+                    {
+                        string_copy ( dst, dst_size, path->addr, path->size );
+                        dst[ path->size ] = 0;
+                        StringWhack ( path );
+                    }
+                    if ( remote != NULL )
+                        VPathRelease ( remote );
+                }
+                VPathRelease ( vpath );
+            }
+            VResolverRelease( resolver );
+        }
+        VFSManagerRelease ( vfs_mgr );
+    }
+
+    if ( rc == 0 && vdh_str_starts_with( dst, "ncbi-acc:" ) )
+    {
+        size_t l = string_size ( dst );
+        memmove( dst, &( dst[ 9 ] ), l - 9 );
+        dst[ l - 9 ] = 0;
+    }
+    return rc;
+}
+
+rc_t resolve_accession( const char * accession, char * dst, size_t dst_size, bool remotely )
+{
+    VFSManager * vfs_mgr;
+    rc_t rc = VFSManagerMake( &vfs_mgr );
+    dst[ 0 ] = 0;
+    if ( rc != 0 )
+        ErrMsg( "VFSManagerMake() -> %R", rc );
+    else
+    {
+        VResolver * resolver;
+        rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+        if ( rc != 0 )
+            ErrMsg( "VFSManagerGetResolver() -> %R", rc );
+        else
+        {
+            VPath * vpath;
+            rc = VFSManagerMakePath( vfs_mgr, &vpath, "ncbi-acc:%s", accession );
+            if ( rc != 0 )
+                ErrMsg( "VFSManagerMakePath( %s ) -> %R", accession, rc );
+            else
+            {
+                const VPath * local = NULL;
+                const VPath * remote = NULL;
+                if ( remotely )
+                    rc = VResolverQuery ( resolver, 0, vpath, &local, &remote, NULL );
+                else
+                    rc = VResolverQuery ( resolver, 0, vpath, &local, NULL, NULL );
+                if ( rc == 0 && ( local != NULL || remote != NULL ) )
+                {
+                    const String * path;
+                    if ( local != NULL )
+                        rc = VPathMakeString( local, &path );
+                    else
+                        rc = VPathMakeString( remote, &path );
+
+                    if ( rc == 0 && path != NULL )
+                    {
+                        string_copy ( dst, dst_size, path->addr, path->size );
+                        dst[ path->size ] = 0;
+                        StringWhack ( path );
+                    }
+
+                    if ( local != NULL )
+                        VPathRelease ( local );
+                    if ( remote != NULL )
+                        VPathRelease ( remote );
+                }
+                VPathRelease ( vpath );
+            }
+            VResolverRelease( resolver );
+        }
+        VFSManagerRelease ( vfs_mgr );
+    }
+
+    if ( rc == 0 && vdh_str_starts_with( dst, "ncbi-acc:" ) )
+    {
+        size_t l = string_size ( dst );
+        memmove( dst, &( dst[ 9 ] ), l - 9 );
+        dst[ l - 9 ] = 0;
+    }
+    return rc;
+}
+
+
+rc_t resolve_cache( const char * accession, char * dst, size_t dst_size )
+{
+    VFSManager * vfs_mgr;
+    rc_t rc = VFSManagerMake( &vfs_mgr );
+    dst[ 0 ] = 0;
+    if ( rc != 0 )
+        ErrMsg( "VFSManagerMake() -> %R", rc );
+    else
+    {
+        VResolver * resolver;
+        rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+        if ( rc != 0 )
+            ErrMsg( "VFSManagerGetResolver() -> %R", rc );
+        else
+        {
+            VPath * vpath;
+            rc = VFSManagerMakePath( vfs_mgr, &vpath, "ncbi-acc:%s", accession );
+            if ( rc != 0 )
+                ErrMsg( "VFSManagerMakePath( %s ) -> %R", accession, rc );
+            else
+            {
+                const VPath * local = NULL;
+                const VPath * remote = NULL;
+                const VPath * cache = NULL;
+                rc = VResolverQuery ( resolver, 0, vpath, &local, &remote, &cache );
+                if ( rc == 0 && cache != NULL )
+                {
+                    const String * path;
+                    rc = VPathMakeString( cache, &path );
+
+                    if ( rc == 0 && path != NULL )
+                    {
+                        string_copy ( dst, dst_size, path->addr, path->size );
+                        dst[ path->size ] = 0;
+                        StringWhack ( path );
+                    }
+
+                    if ( local != NULL )
+                        VPathRelease ( local );
+                    if ( remote != NULL )
+                        VPathRelease ( remote );
+                    if ( remote != NULL )
+                        VPathRelease ( cache );
+                }
+                VPathRelease ( vpath );
+            }
+            VResolverRelease( resolver );
+        }
+        VFSManagerRelease ( vfs_mgr );
+    }
+    return rc;
+}
+
+
+rc_t check_cache_comleteness( const char * path, float * percent, uint64_t * bytes_in_cache )
+{
+    rc_t rc = 0;
+    if ( percent != NULL )    { ( * percent ) = 0.0; }
+    if ( bytes_in_cache != NULL ) { ( * bytes_in_cache ) = 0; }
+    if ( path != NULL && path[ 0 ] != 0 )
+    {
+        KDirectory * dir;
+        rc_t rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            ErrMsg( "KDirectoryNativeDir() -> %R", rc);
+        else
+        {
+            const KFile * f = NULL;
+            rc = KDirectoryOpenFileRead( dir, &f, "%s.cache", path );
+            if ( rc == 0 )
+                rc = GetCacheCompleteness( f, percent, bytes_in_cache );
+            else
+            {
+                rc = KDirectoryOpenFileRead( dir, &f, "%s", path );
+                if ( rc == 0 )
+                {
+                    if ( percent != NULL )    ( * percent ) = 100.0;
+                    if ( bytes_in_cache != NULL ) rc = KFileSize ( f, bytes_in_cache );
+                }
+            }
+            if ( f != NULL ) KFileRelease( f );
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
+
+
+static bool matches( const String * cmd, const String * pattern )
+{
+    char buffer[ 256 ];
+    String match;
+    uint32_t matching;
+    
+    StringInit( &match, buffer, sizeof buffer, 0 );
+    matching = StringMatch( &match, cmd, pattern );
+    return ( matching == pattern->len && matching == cmd->len );
+}
+
+
+int32_t index_of_match( const String * word, uint32_t num, ... )
+{
+    int32_t res = -1;
+    if ( word != NULL )
+    {
+        uint32_t idx;
+        va_list args;
+        
+        va_start ( args, num );
+        for ( idx = 0; idx < num && res < 0; ++idx )
+        {
+            const char * arg = va_arg ( args, const char * );
+            if ( arg != NULL )
+            {
+                String S;
+                StringInitCString( &S, arg );
+                if ( matches( word, &S ) ) res = idx;
+            }
+        }
+        va_end ( args );
+    }
+    return res;
+}
+
+
+static void CC destroy_String( void * item, void * data ) { free( item ); }
+void destroy_String_vector( Vector * v ) { VectorWhack( v, destroy_String, NULL ); }
+
+uint32_t copy_String_2_vector( Vector * v, const String * S )
+{
+    uint32_t res = 0;
+    if ( S->len > 0 && S->addr != NULL )
+    {
+        String * S1 = malloc( sizeof * S1 );
+        if ( S1 != NULL )
+        {
+            rc_t rc;
+            StringInit( S1, S->addr, S->size, S->len );
+            rc = VectorAppend( v, NULL, S1 );
+            if ( rc == 0 ) res++; else free( S1 );
+        }
+    }
+    return res;
+}
+
+
+uint32_t split_buffer( Vector * v, const String * S, const char * delim )
+{
+    uint32_t i, res = 0;
+    size_t delim_len = string_size( delim );
+    String temp;
+    
+    StringInit( &temp, NULL, 0, 0 );
+    VectorInit( v, 0, 10 );
+    for( i = 0; i < S->len; ++i )
+    {
+        if ( string_chr( delim, delim_len, S->addr[ i ] ) != NULL )
+        {
+            /* delimiter found */
+            res += copy_String_2_vector( v, &temp );
+            StringInit( &temp, NULL, 0, 0 );
+        }
+        else
+        {
+            /* normal char in line */
+            if ( temp.addr == NULL ) temp.addr = &( S->addr[ i ] );
+            temp.size++;
+            temp.len++;
+        }
+    }
+    res += copy_String_2_vector( v, &temp );
+    return res;
+}
diff --git a/tools/vdb-dump/vdb-dump-helper.h b/tools/vdb-dump/vdb-dump-helper.h
new file mode 100644
index 0000000..da456b0
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-helper.h
@@ -0,0 +1,107 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_helper_
+#define _h_vdb_dump_helper_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/text.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+
+#include <vdb/manager.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+#include <vdb/schema.h>
+
+#include <sra/sraschema.h>
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-coldefs.h"
+
+#define DISP_RC(rc,err) (void)((rc == 0) ? 0 : LOGERR( klogInt, rc, err ))
+
+#define DISP_RC2(rc,err,succ) \
+    (void)((rc != 0)? 0 : (succ) ? LOGMSG( klogInfo, succ ) : LOGERR( klogInt, rc, err ))
+
+rc_t ErrMsg( const char * fmt, ... );
+
+rc_t vdh_show_manager_version( const VDBManager *my_manager );
+
+rc_t vdh_parse_schema( const VDBManager *my_manager,
+                       VSchema **new_schema,
+                       Vector *schema_list,
+                       bool with_sra_schema );
+
+bool vdh_is_path_table( const VDBManager *my_manager, const char *path,
+                        Vector *schema_list );
+bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
+                         Vector *schema_list );
+bool vdh_is_path_database( const VDBManager *my_manager, const char *path,
+                           Vector *schema_list );
+
+bool list_contains_value( const KNamelist * list, const String * value );
+
+bool vdh_take_1st_table_from_db( dump_context *ctx, const KNamelist *tbl_names );
+
+bool vdh_take_this_table_from_list( dump_context *ctx, const KNamelist *tbl_names,
+                                    const char * table_to_find );
+
+bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase *db,
+                                  const char * table_to_find );
+
+rc_t vdh_print_col_info( dump_context *ctx,
+                         const p_col_def col_def,
+                         const VSchema *my_schema );
+
+rc_t resolve_remote_accession( const char * accession, char * dst, size_t dst_size );
+rc_t resolve_accession( const char * accession, char * dst, size_t dst_size, bool remotely );
+rc_t resolve_cache( const char * accession, char * dst, size_t dst_size );
+rc_t check_cache_comleteness( const char * path, float * percent, uint64_t * bytes_in_cache );
+
+int32_t index_of_match( const String * word, uint32_t num, ... );
+void destroy_String_vector( Vector * v );
+uint32_t copy_String_2_vector( Vector * v, const String * S );
+uint32_t split_buffer( Vector * v, const String * S, const char * delim );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-interact.c b/tools/vdb-dump/vdb-dump-interact.c
new file mode 100644
index 0000000..f2be0c0
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-interact.c
@@ -0,0 +1,265 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-interact.h"
+#include "vdb-dump-repo.h"
+#include "vdb-dump-helper.h"
+#include "vdb-dump-print.h"
+
+#include <klib/vector.h>
+#include <klib/text.h>
+#include <kfs/file.h>
+#include <kfs/filetools.h>
+
+rc_t Quitting();
+
+#define INPUTLINE_SIZE 4096
+
+typedef struct ictx
+{
+    const dump_context * ctx;
+    const Args * args;
+    const KFile * std_in;
+    struct vdp_src_context * vsctx;
+    Vector history;
+    char inputline[ INPUTLINE_SIZE ];
+    String PROMPT;
+    String SInputLine;
+    
+    bool interactive, done;
+} ictx;
+
+
+static rc_t init_ictx( struct ictx * ictx, const dump_context * ctx, const Args * args )
+{
+    rc_t rc = KFileMakeStdIn ( &( ictx->std_in ) );
+    DISP_RC( rc, "KFileMakeStdIn() failed" );
+    if ( rc == 0 )
+    {
+        ictx->ctx = ctx;
+        ictx->args = args;
+        VectorInit( &ictx->history, 0, 10 );
+        ictx->interactive = ( KFileType ( ictx->std_in ) == kfdCharDev );
+        ictx->done = false;
+        
+        CONST_STRING( &(ictx->PROMPT), "\nvdb $" );
+        StringInit( &(ictx->SInputLine), &( ictx->inputline[0] ), sizeof( ictx->inputline ), 0 );
+        
+        rc = vdp_init_ctx( &ictx->vsctx, args );
+    }
+    return rc;
+}
+
+
+static void release_ictx( ictx * ctx )
+{
+    destroy_String_vector( &ctx->history );
+    KFileRelease( ctx->std_in );
+    vdp_release_ctx( ctx->vsctx );
+}
+
+
+static rc_t vdi_test( const Vector * v )
+{
+    rc_t rc = 0;
+    uint32_t start = VectorStart( v );
+    uint32_t len = VectorLength( v );
+    uint32_t idx;
+    for ( idx = start; rc == 0 && idx < ( start + len ); ++idx )
+        rc = KOutMsg( "{%S} ", VectorGet( v, idx ) );
+    return rc;
+}
+
+
+static rc_t vdi_top_help()
+{
+    rc_t rc = KOutMsg( "help:\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "quit / exit : terminate program\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "help [cmd]  : print help [ for this topic ]\n" );
+    if ( rc == 0 )
+        rc = KOutMsg( "repo        : manage repositories\n" );
+    return rc;
+}
+
+
+static rc_t vdi_help_on_help()
+{
+    rc_t rc = KOutMsg( "help: [help]\n" );
+    return rc;
+}
+
+static rc_t vdi_help_on_repo()
+{
+    rc_t rc = KOutMsg( "help: [repo]\n" );
+    return rc;
+}
+
+static rc_t vdi_help_on_print()
+{
+    rc_t rc = KOutMsg( "help: [print]\n" );
+    return rc;
+}
+
+static rc_t vdi_help( const Vector * v )
+{
+    rc_t rc = 0;
+    if ( VectorLength( v ) < 2 )
+        rc = vdi_top_help();
+    else
+    {
+        int32_t cmd_idx = index_of_match( VectorGet( v, 1 ), 2,
+            "help", "repo", "print" );
+        switch( cmd_idx )
+        {
+            case 0 : rc = vdi_help_on_help(); break;
+            case 1 : rc = vdi_help_on_repo(); break;
+            case 2 : rc = vdi_help_on_print(); break;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_on_newline( ictx * ctx, const String * Line )
+{
+    rc_t rc = 0;
+    Vector v;
+    uint32_t args = split_buffer( &v, Line, " \t" ); /* from vdb-dump-helper.c */
+    if ( args > 0 )
+    {
+        const String * S = VectorGet( &v, 0 );
+        if ( S != NULL )
+        {
+            int32_t cmd_idx = index_of_match( S, 6,
+                "quit", "exit", "help", "repo", "test", "print" );
+                
+            ctx->done = ( cmd_idx == 0 || cmd_idx == 1 );
+            if ( !ctx->done )
+            {
+                switch( cmd_idx )
+                {
+                    case 2  : rc = vdi_help( &v ); break; /* above */
+                    case 3  : rc = vdi_repo( &v ); break; /* in vdb-dump-repo */
+                    case 4  : rc = vdi_test( &v ); break;
+                    case 5  : rc = vdp_print_interactive( &v, ctx->vsctx ); break; /* in vdb-dump-print */
+                    default : rc = KOutMsg( "??? {%S}", S ); break;
+                }
+                if ( rc == 0 )
+                {
+                    if ( ctx->interactive )
+                        rc = KOutMsg( "%S", &( ctx->PROMPT ) );
+                    else
+                        rc = KOutMsg( "\n" );
+                }
+            }
+        }
+    }
+    destroy_String_vector( &v ); /* from vdb-dump-helper.c */
+    return rc;
+}
+
+
+static rc_t vdi_on_char( ictx * ctx, const char c )
+{
+    rc_t rc = 0;
+    if ( ctx->SInputLine.len < ( ( ctx->SInputLine.size ) - 1 ) )
+    {
+        ctx->inputline[ ctx->SInputLine.len++ ] = c;
+    }
+    else
+    {
+        rc = KOutMsg( "\ntoo long!%s", &( ctx->PROMPT ) );
+        ctx->SInputLine.len = 0;
+    }
+    return rc;
+}
+
+
+static rc_t vdi_interactive_newline( ictx * ctx )
+{
+    rc_t rc = vdi_on_newline( ctx, &(ctx->SInputLine) );
+    copy_String_2_vector( &(ctx->history), &(ctx->SInputLine) );
+    ctx->SInputLine.len = 0;
+    return rc;
+}
+
+
+static rc_t vdi_interactive_loop( ictx * ctx )
+{
+    char cc[ 4 ];
+    uint64_t pos = 0;
+    rc_t rc = KOutMsg( "%S", &( ctx->PROMPT ) );    
+
+    while ( rc == 0 && !ctx->done && ( 0 == Quitting() ) )
+    {
+        size_t num_read;
+        rc = KFileRead( ctx->std_in, pos, cc, 1, &num_read );
+        if ( rc != 0 )
+            LOGERR ( klogErr, rc, "failed to read stdin" );
+        else if ( num_read > 0 )
+        {
+            pos += num_read;
+            switch( cc[ 0 ] )
+            {
+                case '\n' : rc = vdi_interactive_newline( ctx ); break;
+                default   : rc = vdi_on_char( ctx, cc[ 0 ] ); break;
+            }
+        }
+    }
+    if ( rc == 0 ) rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t on_line( const String * line, void * data )
+{
+    rc_t rc = Quitting();
+    if ( rc == 0 )
+    {
+        ictx * ctx = data;
+        rc = vdi_on_newline( ctx, line );
+    }
+    return rc;
+}
+
+
+rc_t vdi_main( const dump_context * ctx, const Args * args )
+{
+    ictx ictx;
+    rc_t rc = init_ictx( &ictx, ctx, args );
+    if ( rc == 0 )
+    {
+         if ( ictx.interactive )
+            rc = vdi_interactive_loop( &ictx );
+        else
+            rc = ProcessFileLineByLine( ictx.std_in, on_line, &ictx ); /* from kfs/filetools.h */
+        
+         release_ictx( &ictx );
+    }
+    return rc;
+}
\ No newline at end of file
diff --git a/tools/vdb-dump/vdb-dump-interact.h b/tools/vdb-dump/vdb-dump-interact.h
new file mode 100644
index 0000000..88f777b
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-interact.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_interact_
+#define _h_vdb_dump_interact_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+
+#include <kapp/args.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include "vdb-dump-context.h"
+
+rc_t vdi_main( const dump_context * ctx, const Args * args );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-print.c b/tools/vdb-dump/vdb-dump-print.c
new file mode 100644
index 0000000..0288dae
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-print.c
@@ -0,0 +1,1349 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-print.h"
+#include "vdb-dump-helper.h"
+
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <klib/pack.h>
+#include <klib/num-gen.h>
+
+#include <kfs/directory.h>
+
+#include <kdb/manager.h>
+
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/database.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <bitstr.h>
+
+typedef struct vdp_context
+{
+    const void * base;
+    const VTypedesc * type_desc;
+    vdp_opts * opts;
+    char * buf;
+    size_t buf_size;
+    size_t printed_so_far;
+    bool buf_filled;
+
+    uint32_t elem_idx;
+    uint32_t elem_bits;
+    uint32_t boff;
+    uint32_t row_len;
+    int32_t selection;
+    uint64_t offset_in_bits;
+    bool print_dna_bases;
+} vdp_context;
+
+
+static rc_t vdp_print( vdp_context * vdp_ctx, const char * fmt, ... )
+{
+    rc_t rc = 0;
+    if ( vdp_ctx->buf_size > vdp_ctx->printed_so_far )
+    {
+        va_list args;
+        size_t num_writ;
+        size_t available = ( vdp_ctx->buf_size - vdp_ctx->printed_so_far );
+
+        va_start ( args, fmt );
+        rc = string_vprintf( &( vdp_ctx->buf[ vdp_ctx->printed_so_far ]), available, &num_writ, fmt, args );
+        vdp_ctx->printed_so_far += num_writ;
+        va_end ( args );
+    }
+
+    if ( vdp_ctx->buf_size <= vdp_ctx->printed_so_far )
+        vdp_ctx->buf_filled = true;
+    return rc;
+}
+
+
+static rc_t vdp_print_string( vdp_context * vdp_ctx, const char * s )
+{
+    rc_t rc = 0;
+    if ( vdp_ctx->buf == NULL )
+    {
+        rc = KOutMsg( s );
+    }
+    else
+    {
+        if ( vdp_ctx->buf_size > vdp_ctx->printed_so_far )
+        {
+            size_t num_writ;
+            size_t available = ( vdp_ctx->buf_size - vdp_ctx->printed_so_far );
+
+            rc = string_printf ( &( vdp_ctx->buf[ vdp_ctx->printed_so_far ] ), available, &num_writ, s );
+            vdp_ctx->printed_so_far += num_writ;
+        }
+
+        if ( vdp_ctx->buf_size <= vdp_ctx->printed_so_far )
+            vdp_ctx->buf_filled = true;
+    }
+    return rc;
+}
+
+typedef rc_t( * vdp_fkt )( vdp_context * vdp_ctx );
+
+
+#define BYTE_OFFSET(VALUE)  ( (VALUE) >> 3 )
+#define BIT_OFFSET(VALUE)   ( (VALUE) & 0x7 )
+
+
+static uint8_t BitLength2Bytes[65] =
+{
+         /* 0  1  2  3  4  5  6  7  8  9*/
+   /* 0 */  0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+   /* 1 */  2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
+   /* 2 */  3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+   /* 3 */  4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
+   /* 4 */  5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+   /* 5 */  7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+   /* 6 */  8, 8, 8, 8, 8
+};
+
+/*************************************************************************************
+n_bits   [IN] ... number of bits
+
+calculates the number of bytes that have to be copied to contain the given
+number of bits
+*************************************************************************************/
+static uint16_t vdp_bitlength_2_bytes( const size_t n_bits )
+{
+    if ( n_bits > 64 )
+        return 8;
+    else
+        return BitLength2Bytes[ n_bits ];
+}
+
+
+static uint64_t BitLength2Mask[33] =
+{
+   /* 0 */ 0x00,
+   /* 1 ..  4 */  0x1,                0x3,                0x7,                0xF,
+   /* 5 ..  8 */  0x1F,               0x3F,               0x7F,               0xFF,
+   /* 9 .. 12 */  0x1FF,              0x3FF,              0x7FF,              0xFFF,
+   /*13 .. 16 */  0x1FFF,             0x3FFF,             0x7FFF,             0xFFFF,
+   /*17 .. 20 */  0x1FFFF,            0x3FFFF,            0x7FFFF,            0xFFFFF,
+   /*21 .. 24 */  0x1FFFFF,           0x3FFFFF,           0x7FFFFF,           0xFFFFFF,
+   /*25 .. 28 */  0x1FFFFFF,          0x3FFFFFF,          0x7FFFFFF,          0xFFFFFFF,
+   /*29 .. 32 */  0x1FFFFFFF,         0x3FFFFFFF,         0x7FFFFFFF,         0xFFFFFFFF
+ };
+
+
+/*************************************************************************************
+n_bits   [IN] ... number of bits
+
+creates a bitmask to mask exactly the given number of bits from a longer value
+*************************************************************************************/
+static uint64_t vdp_bitlength_2_mask( const size_t n_bits )
+{
+    uint64_t res;
+    if ( n_bits < 33 )
+        res = BitLength2Mask[ n_bits ];
+    else
+    {
+        if ( n_bits < 65 )
+            res = BitLength2Mask[ n_bits-32 ];
+        else
+            res = 0xFFFFFFFF;
+        res <<= 32;
+        res |= 0xFFFFFFFF;
+    }
+    return res;
+}
+
+
+static void vdp_move_to_value( void* dst, vdp_context * vdp_ctx, const uint32_t n_bits )
+{
+    uint8_t *src_ptr = ( uint8_t * )vdp_ctx->base + BYTE_OFFSET( vdp_ctx->offset_in_bits );
+    if ( BIT_OFFSET( vdp_ctx->offset_in_bits ) == 0 )
+    {
+        memmove( dst, src_ptr, vdp_bitlength_2_bytes( n_bits ) );
+    }
+    else
+    {
+        bitcpy ( dst, 0, src_ptr, BIT_OFFSET( vdp_ctx->offset_in_bits ), n_bits );
+    }
+}
+
+
+static uint64_t vdp_move_to_uint64( vdp_context * vdp_ctx )
+{
+    uint64_t value = 0;
+    uint32_t n_bits = vdp_ctx->type_desc->intrinsic_bits;
+    vdp_move_to_value( &value, vdp_ctx, n_bits );
+    if ( n_bits & 7 )
+    {
+        size_t unpacked = 0;
+        Unpack( n_bits, sizeof( value ), &value, 0, n_bits, NULL, &value, sizeof( value ), &unpacked );
+    }
+    value &= vdp_bitlength_2_mask( n_bits );
+    vdp_ctx->offset_in_bits += n_bits;
+    return value;
+}
+
+static rc_t vdp_boolean( vdp_context * vdp_ctx )
+{
+    rc_t rc;
+    uint64_t value = vdp_move_to_uint64( vdp_ctx );
+    switch( vdp_ctx->opts->c_boolean )
+    {
+    case '1' :  if ( value == 0 )
+                    rc = vdp_print_string( vdp_ctx, "0" );
+                else
+                    rc = vdp_print_string( vdp_ctx, "1" );
+                break;
+    case 'T' :  if ( value == 0 )
+                    rc = vdp_print_string( vdp_ctx, "F" );
+                else
+                    rc = vdp_print_string( vdp_ctx, "T" );
+                break;
+
+    default  :  if ( value == 0 )
+                    rc = vdp_print_string( vdp_ctx, "false" );
+                else
+                    rc = vdp_print_string( vdp_ctx, "true" );
+                break;
+    }
+    return rc;
+}
+
+
+static const char * uint_hex_fmt = "0x%lX";
+static const char * uint_dec_fmt = "%lu";
+static const char * int_dec_fmt = "%ld";
+
+
+static rc_t vdp_print_uint64( vdp_context * vdp_ctx, const char * fmt, uint64_t value )
+{
+    if ( vdp_ctx->buf == NULL )
+        return KOutMsg( fmt, value );
+    else
+        return vdp_print( vdp_ctx, fmt, value );
+}
+
+static rc_t vdp_print_int64( vdp_context * vdp_ctx, const char * fmt, int64_t value )
+{
+    if ( vdp_ctx->buf == NULL )
+        return KOutMsg( fmt, value );
+    else
+        return vdp_print( vdp_ctx, fmt, value );
+}
+
+static rc_t vdp_uint( vdp_context * vdp_ctx )
+{
+    rc_t rc = 0;
+    uint64_t value = vdp_move_to_uint64( vdp_ctx );
+    if ( ( vdp_ctx->opts->translate_sra_types )/*&&( def->value_trans_fct != NULL )*/ )
+    {
+/*
+        const char *txt = def->value_trans_fct( (uint32_t)value );
+        rc = vds_append_str( s, txt );
+*/
+    }
+    else
+    {
+        rc = vdp_print_uint64( vdp_ctx,
+                               vdp_ctx->opts->in_hex ? uint_hex_fmt : uint_dec_fmt,
+                               value ) ;
+    }
+    return rc;
+}
+
+
+static rc_t vdp_int( vdp_context * vdp_ctx )
+{
+    rc_t rc = 0;
+    int64_t value = (int64_t)vdp_move_to_uint64( vdp_ctx );
+    if ( ( vdp_ctx->opts->translate_sra_types )/*&&( def->value_trans_fct != NULL )*/ )
+    {
+/*
+        const char *txt = def->value_trans_fct( (uint32_t)value );
+        rc = vds_append_str( s, txt );
+*/
+    }
+    else
+    {
+        switch ( vdp_ctx->type_desc->intrinsic_bits )
+        {
+            case  8 : { int8_t temp = (int8_t)value;
+                        value = temp; }
+                      break;
+            case 16 : { int16_t temp = (int16_t)value;
+                        value = temp; }
+                      break;
+            case 32 : { int32_t temp = (int32_t)value;
+                        value = temp; }
+                      break;
+        }
+        rc = vdp_print_int64( vdp_ctx,
+                              vdp_ctx->opts->in_hex ? uint_hex_fmt : int_dec_fmt,
+                              value ) ;
+    }
+    return rc;
+}
+
+
+#define BITSIZE_OF_FLOAT ( sizeof(float) * 8 )
+#define BITSIZE_OF_DOUBLE ( sizeof(double) * 8 )
+static const char * float_fmt = "%e";
+static const char * unknown_float_fmt = "unknown float-type";
+
+static rc_t vdp_float( vdp_context * vdp_ctx )
+{
+    rc_t rc;
+    if ( vdp_ctx->opts->in_hex )
+        rc = vdp_int( vdp_ctx );
+    else
+    {
+        uint32_t n_bits = vdp_ctx->type_desc->intrinsic_bits;
+        if ( n_bits == BITSIZE_OF_FLOAT )
+        {
+            float value;
+            vdp_move_to_value( &value, vdp_ctx, n_bits );
+            if ( vdp_ctx->buf == NULL )
+                rc = KOutMsg( float_fmt, value );
+            else
+                rc = vdp_print( vdp_ctx, float_fmt, value );
+        }
+        else if ( n_bits == BITSIZE_OF_DOUBLE )
+        {
+            double value;
+            vdp_move_to_value( &value, vdp_ctx, n_bits );
+            if ( vdp_ctx->buf == NULL )
+                rc = KOutMsg( float_fmt, value );
+            else
+                rc = vdp_print( vdp_ctx, float_fmt, value );
+        }
+        else
+            rc = vdp_print_string( vdp_ctx, unknown_float_fmt );
+
+        vdp_ctx->offset_in_bits += n_bits;
+    }
+    return rc;
+}
+
+
+static const char * txt_fmt = "%.*s";
+
+static rc_t vdp_txt_ascii( vdp_context * vdp_ctx )
+{
+    rc_t rc;
+    char *src_ptr = (char*)vdp_ctx->base + BYTE_OFFSET( vdp_ctx->offset_in_bits );
+    if ( vdp_ctx->buf == NULL )
+        rc = KOutMsg( txt_fmt, vdp_ctx->row_len, src_ptr );
+    else
+        rc = vdp_print( vdp_ctx, txt_fmt, vdp_ctx->row_len, src_ptr );
+    return rc;
+}
+
+
+static rc_t vdp_hex_char( char * temp, uint32_t * idx, const uint8_t c )
+{
+    char s[ 8 ];
+    size_t num_writ;
+    rc_t rc = string_printf ( s, sizeof s, &num_writ, "%X ", c );
+    if ( rc == 0 )
+    {
+        size_t i;
+        for ( i = 0; i < num_writ; ++i )
+            temp[ (*idx)++ ] = s[ i ];
+    }
+    return rc;
+}
+
+
+static rc_t vdp_hex_ascii( vdp_context * vdp_ctx )
+{
+    rc_t rc = 0;
+    char *src_ptr = (char*)vdp_ctx->base + BYTE_OFFSET( vdp_ctx->offset_in_bits );
+    char *tmp = malloc( ( vdp_ctx->row_len + 1 ) * 4 );
+    if ( tmp != NULL )
+    {
+        uint32_t i, dst_idx = 0;
+        for ( i = 0; i < vdp_ctx->row_len && rc == 0; ++i )
+            rc = vdp_hex_char( tmp, &dst_idx, src_ptr[ i ] );
+        tmp[ dst_idx ] = 0;
+        if ( rc == 0 )
+        {
+            if ( vdp_ctx->buf == NULL )
+                rc = KOutMsg( txt_fmt, dst_idx, tmp );
+            else
+                rc = vdp_print( vdp_ctx, txt_fmt, dst_idx, tmp );
+        }
+        free( tmp );
+    }
+    else
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    return rc;
+}
+
+
+static rc_t vdp_ascii( vdp_context * vdp_ctx )
+{
+    rc_t rc;
+
+    if ( vdp_ctx->opts->in_hex )
+        rc = vdp_hex_ascii( vdp_ctx );
+    else
+        rc = vdp_txt_ascii( vdp_ctx );
+
+    if ( rc == 0 )
+    {
+        vdp_ctx->elem_idx += vdp_ctx->row_len;
+        vdp_ctx->offset_in_bits += ( vdp_ctx->type_desc->intrinsic_bits * vdp_ctx->row_len );
+    }
+    return rc;
+}
+
+
+static rc_t vdp_unicode( vdp_context * vdp_ctx )
+{
+    return vdp_ascii( vdp_ctx );
+}
+
+
+/* !!!!!!!! this depends on how domains are defined in "schema.h" */
+vdp_fkt vdp_dispatch[] =
+{
+    vdp_boolean,
+    vdp_uint,
+    vdp_int,
+    vdp_float,
+    vdp_ascii,
+    vdp_unicode
+};
+
+static rc_t vdp_print_dim( vdp_context * vdp_ctx, uint32_t dimension, uint32_t selection )
+{
+    rc_t rc = 0;
+    int i = 0;
+    bool print_comma = true;
+
+    if ( selection == 0 ) /* cell-type == boolean */
+    {
+        /* if long form "false" or "true" separate elements by comma */
+        print_comma = ( vdp_ctx->opts->c_boolean == 0 );
+    }
+
+    while ( ( i < dimension )&&( rc == 0 ) )
+    {
+        /* selection 0 ... boolean */
+        if ( print_comma && ( i > 0 ) )
+            rc = vdp_print( vdp_ctx, ", " );
+
+        if ( rc == 0 )
+            rc = vdp_dispatch[ selection ]( vdp_ctx );
+
+        i++;
+    }
+    return rc;
+}
+
+
+static char dna_chars[ 4 ] = { 'A', 'C', 'G', 'T' };
+
+/* special function to translate dim=2,bits=1 into a DNA-base */
+static rc_t vdp_print_1_base( vdp_context * vdp_ctx )
+{
+    uint64_t value;
+    vdp_move_to_value( &value, vdp_ctx, 2 ); /* move 2 bits into value */
+    value &= 3;
+    if ( vdp_ctx->buf == NULL )
+        return KOutMsg( "%c", dna_chars[ value ] );
+    else
+        return vdp_print( vdp_ctx, "%c", dna_chars[ value ] );
+}
+
+static rc_t vdp_print_elem( vdp_context * vdp_ctx )
+{
+    rc_t rc = 0;
+
+    uint32_t dimension   = vdp_ctx->type_desc->intrinsic_dim;
+    uint32_t selection   = vdp_ctx->type_desc->domain - 1;
+    
+    if ( dimension == 1 )
+    {
+        /* we have only 1 dimension ---> just print this value */
+        if ( selection < 6 )
+            rc = vdp_dispatch[ selection ]( vdp_ctx );
+    }
+    else
+    {
+        /* we have more than 1 dimension ---> repeat printing value's */
+        if ( vdp_ctx->print_dna_bases )
+            rc = vdp_print_1_base( vdp_ctx );
+        else
+        {
+            /*
+            bool trans = ( ( vdp_ctx->opts->without_sra_types == false )&&
+                           ( def->dim_trans_fct ) );
+            bool paren = ( ( src->number_of_elements > 1 )||( !trans ) );                           
+            */
+            bool paren = ( vdp_ctx->row_len > 1 );
+
+            if ( paren )
+                rc = vdp_print( vdp_ctx, "[" );
+            /* rc = vds_append_str( &(def->content), bracket ? "[" : "{" ); */
+
+            if ( rc == 0 )
+            {
+                /*
+                if ( trans )
+                    rc = vdt_dump_dim_trans( src, def, dimension );
+                else
+                */
+                rc = vdp_print_dim( vdp_ctx, dimension, selection );
+            }
+
+            if ( paren && ( rc == 0 ) )
+                rc = vdp_print( vdp_ctx, "]" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t vdp_print_cell_cmn( char * buf, size_t buf_size, size_t *num_written,
+                         const uint32_t elem_bits, const void * base, uint32_t boff, uint32_t row_len,
+                         const VTypedesc * type_desc, vdp_opts * opts )
+{
+    rc_t rc = 0;
+    vdp_context vdp_ctx;
+    vdp_ctx.selection = ( type_desc->domain - 1 );
+    if ( vdp_ctx.selection < 0 || 
+         vdp_ctx.selection > ( sizeof vdp_dispatch / sizeof vdp_dispatch[ 0 ] ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcVisiting, rcOffset, rcInvalid );
+    }
+    else
+    {
+        vdp_ctx.base = base;
+        vdp_ctx.opts = opts;
+        vdp_ctx.type_desc = type_desc;
+        vdp_ctx.elem_bits = elem_bits;
+        vdp_ctx.boff = boff;
+        vdp_ctx.row_len = row_len;
+        vdp_ctx.elem_idx = 0;
+
+        vdp_ctx.buf = buf;
+        vdp_ctx.buf_size = buf_size;
+        vdp_ctx.printed_so_far = 0;
+        vdp_ctx.buf_filled = false;
+        vdp_ctx.offset_in_bits = 0;
+
+        if ( ( type_desc->domain < vtdBool ) || ( type_desc->domain > vtdUnicode ) )
+            rc = vdp_print_string( &vdp_ctx, "unknown data-type" );
+        else
+        {
+            bool print_comma = true;
+
+            /* hardcoded printing of dna-bases if the column-type fits */
+            vdp_ctx.print_dna_bases = ( opts->print_dna_bases &
+                        ( type_desc->intrinsic_dim == 2 ) &
+                        ( type_desc->intrinsic_bits == 1 ) );
+
+            if ( ( type_desc->domain == vtdBool ) && opts->c_boolean )
+                print_comma = false;
+
+            while( ( vdp_ctx.elem_idx < row_len ) && ( rc == 0 ) && ( !vdp_ctx.buf_filled ) )
+            {
+                uint32_t eidx = vdp_ctx.elem_idx;
+
+                if ( ( eidx > 0 ) && ( vdp_ctx.print_dna_bases == false ) && print_comma )
+                    rc = vdp_print_string( &vdp_ctx, ", " );
+
+                /* dumps the basic data-types, implementation above
+                   >>> that means it appends or prints to stdout the element-string
+                   inc the vdb_ctx.element_idx by: 1...bool/int/uint/float
+                                                   n...string/unicode-string */
+                rc = vdp_print_elem( &vdp_ctx );
+
+                /* insurance against endless loop */
+                if ( eidx == vdp_ctx.elem_idx )
+                    vdp_ctx.elem_idx++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t vdp_print_cell_2_buffer( char * buffer, size_t bufsize, size_t *num_written,
+                              const uint32_t elem_bits, const void * base, uint32_t boff, uint32_t row_len,
+                              const VTypedesc * type_desc, vdp_opts * opts )
+{
+    rc_t rc = 0;
+
+    if ( base == NULL || type_desc == NULL || buffer == NULL || opts == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcVisiting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = vdp_print_cell_cmn( buffer, bufsize, num_written, elem_bits, base, boff, row_len, type_desc, opts );
+    }
+    return rc;
+}
+
+
+rc_t vdp_print_cell( const uint32_t elem_bits, const void * base, uint32_t boff, uint32_t row_len,
+                     const VTypedesc * type_desc, vdp_opts * opts )
+{
+    rc_t rc = 0;
+
+    if ( base == NULL || type_desc == NULL || opts == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcVisiting, rcParam, rcNull );
+        KOutMsg( "base/type_desc/otps is NULL\n" );
+    }
+    else
+        rc = vdp_print_cell_cmn( NULL, 0, NULL, elem_bits, base, boff, row_len, type_desc, opts );
+    return rc;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+
+
+/* -----------------------------------------------------------------------------------------------*/
+
+typedef struct vdp_src_context
+{
+    KDirectory *dir;
+    const VDBManager *mgr;
+    VSchema *schema;
+    Vector sources;
+    bool print_info;
+    vdp_opts opts;
+} vdp_src_context;
+
+
+typedef struct vdp_database
+{
+    const String * name;
+    const VDatabase *database;
+    Vector sub_databases;
+    Vector sub_tables;
+    vdp_opts * opts;
+} vdp_database;
+
+typedef struct vdp_table
+{
+    const String * name;
+    const VTable *table;
+    const VCursor *cursor;
+    vdp_opts * opts;
+    Vector columns;
+    uint32_t max_col_name_len;
+} vdp_table;
+
+
+typedef struct vdp_column
+{
+    const String * name;
+    uint32_t id;
+    vdp_table * tab;
+    struct VTypedecl type;
+    struct VTypedesc desc;
+} vdp_column;
+
+
+typedef struct vdp_source
+{
+    const String * path;
+    int path_type;
+    vdp_table * tbl;
+    vdp_database * db;
+    vdp_opts * opts;
+} vdp_source;
+
+
+/* -----------------------------------------------------------------------------------------------*/
+
+static void CC release_column( void *item, void * data )
+{
+    vdp_column * c = ( vdp_column * )item;
+    if ( c != NULL )
+        StringWhack ( c->name );
+    free( item );
+}
+
+static rc_t vdp_add_column( vdp_table * tbl, const String * name, bool print_info )
+{
+    rc_t rc = 0;
+    vdp_column * col = malloc( sizeof * col );
+    if ( col == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        KOutMsg( "vdp_add_column( '%S' ) -> %R\n", name, rc );
+    }
+    else
+    {
+        rc = StringCopy( &col->name, name );
+        if ( rc != 0 )
+        {
+            free( ( void * ) col );
+            KOutMsg( "StringCopy( '%S' ) -> %R\n", name, rc );
+        }
+        else
+        {
+            col->tab = tbl;
+            if ( name->len > tbl->max_col_name_len ) tbl->max_col_name_len = name->len;
+            rc = VCursorAddColumn( tbl->cursor, &col->id, "%s", name->addr );
+            if ( rc != 0 )
+                KOutMsg( "VCursorAddColumn( '%S.%S' ) -> %R\n", tbl->name, name, rc );
+            else
+                rc = VectorAppend( &tbl->columns, NULL, col );
+
+            if ( rc != 0 )
+                release_column( col, NULL );
+            else if ( print_info )
+                KOutMsg( "column: '%S.%S' added\n", tbl->name, name );
+        }
+    }
+    return rc;
+}
+
+static rc_t vdp_get_column_type( vdp_table * tbl, vdp_column * col )
+{
+    rc_t rc = VCursorDatatype( tbl->cursor, col->id, &col->type, &col->desc );
+    if ( rc != 0 )
+        KOutMsg( "VCursorDatatype( '%S.%S' ) -> %R\n", tbl->name, col->name, rc );
+    return rc;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+
+static void CC release_table( void *item, void * data )
+{
+    vdp_table * tbl = ( vdp_table * ) item;
+    if ( tbl != NULL )
+    {
+        VectorWhack( &tbl->columns, release_column, NULL );
+        StringWhack ( tbl->name );
+        VCursorRelease( tbl->cursor );
+        VTableRelease ( tbl->table );
+        free( item );
+    }
+}
+
+/* we can open a table from an accession or from a database... */
+static rc_t vdp_open_table( vdp_src_context * vctx,
+                            vdp_source * acc, vdp_database * parent_db, const String * name )
+{
+    rc_t rc = 0;
+    vdp_table * tbl = malloc( sizeof * tbl );
+    if ( tbl == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        KOutMsg( "vdp_open_table( '%S' ) -> %R\n", name, rc );
+    }
+    else
+    {
+        rc = StringCopy( &tbl->name, name );
+        if ( rc != 0 )
+        {
+            free( ( void * ) tbl );
+            KOutMsg( "StringCopy( '%S' ) -> %R\n", name, rc );
+        }
+        else
+        {
+            tbl->opts = &vctx->opts;
+            VectorInit( &tbl->columns, 0, 20 );
+            tbl->max_col_name_len = 0;
+            
+            /* open the table: either from manager or from database */
+            if ( acc != NULL )
+                rc = VDBManagerOpenTableRead( vctx->mgr, &tbl->table, vctx->schema, "%s", name->addr );
+            else
+                rc = VDatabaseOpenTableRead( parent_db->database, &tbl->table, "%s", name->addr );
+            
+            /* enumerate columns, create cursor, add columns */
+            if ( rc == 0 )
+            {
+                rc = VTableCreateCursorRead( tbl->table, &tbl->cursor );
+                if ( rc == 0 )
+                {
+                    KNamelist * column_names;
+                    rc = VTableListCol( tbl->table, &column_names );
+                    if ( rc == 0 )
+                    {
+                        uint32_t count, idx;
+                        rc = KNamelistCount( column_names, &count );
+                        for ( idx = 0; rc == 0 && idx < count; ++idx )
+                        {
+                            const char * column_name;
+                            rc = KNamelistGet( column_names, idx, &column_name );
+                            if ( rc == 0 && column_name != NULL )
+                            {
+                                String temp_str;
+                                StringInitCString( &temp_str, column_name );
+                                rc = vdp_add_column( tbl, &temp_str, vctx->print_info );
+                            }
+                        }
+                        KNamelistRelease( column_names );
+                    }
+                    rc = VCursorOpen( tbl->cursor );
+                }
+            }
+            
+            if ( rc == 0 )
+            {
+                /* update the type for each column */
+                uint32_t start = VectorStart( &tbl->columns );
+                uint32_t count = VectorLength( &tbl->columns );
+                uint32_t id = start;
+                while ( id < start + count - 1 && rc == 0 )
+                {
+                    vdp_column * column = VectorGet( &tbl->columns, id );
+                    if ( column != NULL )
+                        rc = vdp_get_column_type( tbl, column );
+                    id++;
+                }
+            }
+            
+            if ( rc == 0 )
+            {
+                /* enter the new object: either into source-struct or parent-db */
+                if ( acc != NULL )
+                    acc->tbl = tbl;
+                else
+                    rc = VectorAppend( &parent_db->sub_tables, NULL, tbl );
+            }
+
+            if ( rc != 0 )
+                release_table( tbl, NULL );
+            else if ( vctx->print_info )
+                KOutMsg( "table: '%S' opened\n", name );
+                
+        }
+    }
+    return rc;
+}
+
+static rc_t vdp_table_adjust_ranges( vdp_table * tbl, struct num_gen * ranges )
+{
+    rc_t rc = 0;
+    if ( tbl == NULL || ranges == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        int64_t first;
+        uint64_t count;
+        rc = VCursorIdRange( tbl->cursor, 0, &first, &count );
+        if ( rc != 0 )
+            KOutMsg( "VCursorIdRange( %S ) -> %R\n", tbl->name, rc );
+        else
+        {
+            if ( num_gen_empty( ranges ) )
+            {
+                rc = num_gen_add( ranges, first, count );
+                if ( rc != 0 )
+                    KOutMsg( "tbl '%S' : num_gen_add( %d, %d ) -> %R\n", tbl->name, first, count, rc );
+            }
+            else
+            {
+                rc = num_gen_trim( ranges, first, count );
+                if ( rc != 0 )
+                    KOutMsg( "tbl '%S' : num_gen_trim( %d, %d ) -> %R\n", tbl->name, first, count, rc );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdp_print_table_row( vdp_table * tbl, int64_t row_id )
+{
+    rc_t rc = 0;
+    uint32_t start = VectorStart( &tbl->columns );
+    uint32_t count = VectorLength( &tbl->columns );
+    uint32_t id = start;
+    
+    /* rc = KOutMsg( "row#%ld:\n", row_id ); */
+    while ( id < start + count - 1 && rc == 0 )
+    {
+        vdp_column * column = VectorGet( &tbl->columns, id );
+        if ( column != NULL )
+        {
+            uint32_t w = tbl->max_col_name_len + 1 - column->name->len;
+            rc = KOutMsg( "%S:%*s", column->name, w, " " );
+            if ( rc == 0 )
+            {
+                uint32_t elem_bits, boff, row_len;
+                const void * base;
+                rc = VCursorCellDataDirect( tbl->cursor, row_id, column->id,
+                    &elem_bits, &base, &boff, &row_len );
+                if ( rc != 0 )
+                    KOutMsg( "VCursorCellDataDirect( tbl: '%s', row: %ld, col: '%s' ) -> %R\n",
+                        tbl->name, row_id, column->name, rc );
+                else
+                {
+                    if ( rc == 0 && base != NULL )
+                    {
+                        rc = vdp_print_cell( elem_bits, base, boff, row_len, &column->desc, tbl->opts );
+                    }
+                    /*
+                    KOutMsg( "elem_bits=%d, base=%p boff=%d, row_len=%d, desc=%p, opts=%p\n",
+                        elem_bits, base, boff, row_len, &column->desc, tbl->opts );
+                    */
+                }
+            }
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+        id++;
+    }
+    return rc;
+}
+
+static rc_t vdp_print_table( vdp_table * tbl, struct num_gen * ranges )
+{
+    const struct num_gen_iter * iter;
+    rc_t rc = num_gen_iterator_make( ranges, &iter );
+    if ( rc != 0 )
+        KOutMsg( "num_gen_iterator_make() -> %R", rc );
+    else
+    {
+        int64_t row_id;
+        while ( num_gen_iterator_next( iter, &row_id, &rc ) && rc == 0 )
+            rc = vdp_print_table_row( tbl, row_id );
+            
+        num_gen_iterator_destroy( iter );
+    }
+    return rc;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+
+static void CC release_database( void *item, void * data )
+{
+    vdp_database * db = ( vdp_database * ) item;
+    if ( db != NULL )
+    {
+        StringWhack( db->name );
+        VectorWhack( &db->sub_tables, release_table, NULL );
+        VectorWhack( &db->sub_databases, release_database, NULL ); /* !! recursion */
+        VDatabaseRelease( db->database );
+        free( item );
+    }
+}
+
+/* we can open a database from an accession or from a database... */
+static rc_t vdp_open_database( vdp_src_context * vctx,
+                               vdp_source * acc, vdp_database * parent_db, const String * name )
+{
+    rc_t rc = 0;
+    vdp_database * db = malloc( sizeof * db );
+    if ( db == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        KOutMsg( "vdp_open_database( '%S' ) -> %R\n", name, rc );
+    }
+    else
+    {
+        rc = StringCopy( &db->name, name );
+        if ( rc != 0 )
+        {
+            free( ( void * ) db );
+            KOutMsg( "string_dup_measure( '%S' ) -> %R\n", name, rc );
+        }
+        else
+        {
+            VectorInit( &db->sub_databases, 0, 5 );
+            VectorInit( &db->sub_tables, 0, 5 );
+            db->opts = &vctx->opts;
+            
+            /* open the table: either from manager or from database */
+            if ( acc != NULL )
+                rc = VDBManagerOpenDBRead( vctx->mgr, &db->database, vctx->schema, "%s", name->addr );
+            else
+                rc = VDatabaseOpenDBRead( parent_db->database, &db->database, "%s", name->addr );
+
+            /* enumerate tables, open tables */
+            if ( rc == 0 )
+            {
+                KNamelist * table_names;
+                rc_t rc1 = VDatabaseListTbl( db->database, &table_names );
+                if ( rc1 == 0 )
+                {
+                    uint32_t count, idx;
+                    rc = KNamelistCount( table_names, &count );
+                    for ( idx = 0; rc == 0 && idx < count; ++idx )
+                    {
+                        const char * table_name;
+                        rc = KNamelistGet( table_names, idx, &table_name );
+                        if ( rc == 0 && table_name != NULL )
+                        {
+                            String temp_str;
+                            StringInitCString( &temp_str, table_name );
+                            rc = vdp_open_table( vctx, NULL, db, &temp_str );
+                        }
+                    }
+                    KNamelistRelease( table_names );
+                }
+            }
+            
+            /* enumerate sub-db's, open sub-db's */
+            if ( rc == 0 )    
+            {
+                KNamelist * sub_db_names;
+                rc_t rc1 = VDatabaseListDB( db->database, &sub_db_names );
+                if ( rc1 == 0 )
+                {
+                    uint32_t count, idx;
+                    rc = KNamelistCount( sub_db_names, &count );
+                    for ( idx = 0; rc == 0 && idx < count; ++idx )
+                    {
+                        const char * sub_db_name;
+                        rc = KNamelistGet( sub_db_names, idx, &sub_db_name );
+                        if ( rc == 0 && sub_db_name != NULL )
+                        {
+                            String temp_str;
+                            StringInitCString( &temp_str, sub_db_name );
+                            rc = vdp_open_database( vctx, NULL, db, &temp_str ); /* !! recursion !! */
+                        }
+                    }
+                    KNamelistRelease( sub_db_names );
+                }
+            }
+        
+            if ( rc == 0 )
+            {
+                /* enter the new object: either into source-struct or parent-db */
+                if ( acc != NULL )
+                    acc->db = db;
+                else
+                    rc = VectorAppend( &parent_db->sub_databases, NULL, db );
+            }
+            
+            if ( rc != 0 )
+                release_database( db, NULL );
+            else if ( vctx->print_info )
+                KOutMsg( "database: '%S' opened\n", name );
+        }
+    }
+    return rc;
+}
+
+/*
+KLIB_EXTERN void* CC VectorFind ( const Vector *self, const void *key, uint32_t *idx,
+    int64_t ( CC * cmp ) ( const void *key, const void *n ) );
+*/
+static int64_t CC vdp_db_find_table( const void *key, const void * n )
+{
+    const String * to_find = key;
+    const vdp_table * tbl = n;
+    return StringCompare( to_find, tbl->name );
+}
+
+static const char * DFLT_TABLE = "SEQUENCE";
+
+static vdp_table * vdp_db_get_table( vdp_database * db, const String * path )
+{
+    vdp_table * res = NULL;
+    if ( db != NULL )
+    {
+        if ( path == NULL || path->len == 0 )
+        {
+            String tmp;
+            tmp.addr = DFLT_TABLE;
+            tmp.size = tmp.len = sizeof DFLT_TABLE;
+            res = vdp_db_get_table( db, &tmp ); /* recursion */
+            if ( res == NULL )
+                res = VectorGet( &db->sub_tables, 0 );
+        }
+        else
+        {
+            uint32_t found;
+            res = VectorFind( &db->sub_tables, path, &found, vdp_db_find_table );
+        }
+    }
+    return res;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+
+static void CC release_source( void *item, void * data )
+{
+    vdp_source * vsrc = ( vdp_source * )item;
+    if ( vsrc != NULL )
+    {
+        if ( vsrc->tbl != NULL ) release_table( vsrc->tbl, NULL );
+        if ( vsrc->db != NULL ) release_database( vsrc->db, NULL );
+        StringWhack ( vsrc->path );
+        free( ( void * ) item );
+    }
+}
+
+static rc_t vdp_init_source( vdp_src_context * vctx, const String * path )
+{
+    rc_t rc = 0;
+    vdp_source * vsrc = malloc( sizeof * vsrc );
+    if ( vsrc == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        KOutMsg( "vdp_init_source( '%S' ) -> %R\n", path, rc );
+    }
+    else
+    {
+        rc = StringCopy ( &vsrc->path, path );
+        if ( rc != 0 )
+        {
+            free( ( void * ) vsrc );
+            KOutMsg( "StringCopy( '%S' ) -> %R\n", path, rc );
+        }
+        else
+        {
+            vsrc->path_type = ( VDBManagerPathType ( vctx->mgr, "%s", vsrc->path->addr ) & ~ kptAlias );
+            vsrc->tbl = NULL;
+            vsrc->db = NULL;
+            vsrc->opts = &vctx->opts;
+            /* types defined in <kdb/manager.h> */
+            switch ( vsrc->path_type )
+            {
+                case kptDatabase    :   rc = vdp_open_database( vctx, vsrc, NULL, vsrc->path ); break;
+                case kptPrereleaseTbl:
+                case kptTable       :   rc = vdp_open_table( vctx, vsrc, NULL, vsrc->path ); break;
+                default : rc = RC( rcVDB, rcNoTarg, rcConstructing, rcFormat, rcUnknown ); break;
+            }
+
+            if ( rc != 0 )
+                KOutMsg( "cannot open source '%S' -> %R\n", path, rc );
+            else
+                rc = VectorAppend( &vctx->sources, NULL, vsrc );
+            
+            if ( rc == 0 && vctx->print_info )
+                KOutMsg( "source '%S' opened\n", path );
+        }
+    }
+    return rc;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+
+rc_t vdp_release_ctx( vdp_src_context * vctx )
+{
+    rc_t rc = 0;
+    if ( vctx != NULL )
+    {
+        /* release all sources */
+        VectorWhack( &vctx->sources, release_source, NULL );
+        if ( vctx->dir != NULL )
+            rc = KDirectoryRelease( vctx->dir );
+        if ( rc == 0 && vctx->mgr != NULL )
+            rc = VDBManagerRelease( vctx->mgr );
+        if ( rc == 0 && vctx->schema != NULL )
+            rc = VSchemaRelease( vctx->schema );
+    }
+    return rc;
+}
+
+rc_t vdp_init_ctx( vdp_src_context ** vctx, const Args * args )
+{
+    rc_t rc = 0;
+    if ( vctx == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+        KOutMsg( "vdp_init_ctx() -> %R\n", rc );
+    
+    }
+    else
+    {
+        vdp_src_context * o = malloc( sizeof *o );
+        if ( o == NULL )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            KOutMsg( "vdp_init_ctx() -> %R\n", rc );
+        }
+        else
+        {
+            VectorInit( &o->sources, 0, 5 );
+            o->schema = NULL;
+            o->print_info = false;
+            o->opts.print_dna_bases = false;
+            o->opts.in_hex = false;
+            o->opts.translate_sra_types = false;
+            o->opts.c_boolean = '1';
+
+            rc = KDirectoryNativeDir( &o->dir );
+            if ( rc != 0 )
+            {
+                KOutMsg( "KDirectoryNativeDir() -> %R\n", rc );
+                o->dir = NULL;
+            }
+            else
+            {
+                rc = VDBManagerMakeRead ( &o->mgr, o->dir );
+                if ( rc != 0 )
+                {
+                    KOutMsg( "VDBManagerMakeRead() -> %R\n", rc );
+                    o->mgr = NULL;
+                }
+                else
+                {
+                    uint32_t count, idx;
+                    vdh_parse_schema( o->mgr, &o->schema, NULL, true /*ctx->force_sra_schema*/ );
+                    rc = ArgsParamCount( args, &count );
+                    if ( rc != 0 )
+                        KOutMsg( "ArgsParamCount() -> %R\n", rc );
+                    else for ( idx = 0; rc == 0 && idx < count; ++idx )
+                    {
+                        const char *arg = NULL;
+                        rc = ArgsParamValue( args, idx, (const void **)&arg );
+                        if ( rc != 0 )
+                            KOutMsg( "ArgsParamValue() -> %R\n", rc );
+                        else if ( arg != NULL && arg[ 0 ] != 0 )
+                        {
+                            String temp_str;
+                            StringInitCString( &temp_str, arg );
+                            rc = vdp_init_source( o, &temp_str );
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+                *vctx = o;
+            else
+                vdp_release_ctx( o );
+        }
+    }
+    return rc;
+}
+
+
+static vdp_table * vdp_get_table( vdp_src_context * vctx, uint32_t src_id, String * path )
+{
+    vdp_table * res = NULL;
+    if ( vctx != NULL )
+    {
+        vdp_source * src = VectorGet( &vctx->sources, src_id );
+        if ( src != NULL )
+        {
+            if ( src->tbl != NULL )
+                res = src->tbl; /* source has only this table */
+            else if ( src->db != NULL )
+                res = vdp_db_get_table( src->db, path ); /* source is a database */
+        }
+    }
+    return res;
+}
+
+/* -----------------------------------------------------------------------------------------------*/
+static rc_t vdb_print_parse_range( struct num_gen * ranges, const String * range )
+{
+    rc_t rc = num_gen_parse_S( ranges, range );
+    if ( rc != 0 )
+        KOutMsg( "num_gen_parse_S( %S ) -> %R\n", range, rc );
+    return rc;
+}
+
+static rc_t vdb_print_get_src_and_ranges( const String * S,
+                struct num_gen * ranges, uint32_t * src_id )
+{
+    rc_t rc = 0;
+    if ( S != NULL )
+    {
+        char * dot = string_chr( S->addr, S->len, '.' );
+        if ( dot == NULL )
+            rc = vdb_print_parse_range( ranges, S );
+        else
+        {
+            String Sub;
+            uint32_t dot_idx = ( dot - S->addr );
+            if ( dot_idx < S->len )
+            {
+                String * tmp = StringSubstr( S, &Sub, dot_idx + 1, S->len - dot_idx );
+                if ( tmp != NULL )
+                    rc = vdb_print_parse_range( ranges, tmp );
+            }
+            if ( rc == 0 && dot_idx > 0 )
+            {
+                String * tmp = StringSubstr( S, &Sub, 0, dot_idx );
+                if ( tmp != NULL )
+                {
+                    rc_t rc1;
+                    uint64_t v = StringToU64( tmp, &rc1 );
+                    if ( rc1 != 0 || v > 0xFFFF ) v = 0;
+                    *src_id = ( v & 0xFFFF );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdp_print_show_src_and_ranges( struct num_gen * ranges, uint32_t src_id )
+{
+    rc_t rc;
+    char buffer[ 1024 ];
+    buffer[ 0 ] = 0;
+    rc = num_gen_as_string( ranges, buffer, sizeof buffer, NULL, true );
+    if ( rc == 0 )
+        rc = KOutMsg( "src-id = %d, ranges = %s\n", src_id, buffer );
+    return rc;
+}
+
+
+/* called from vdb-dump-interact.c, v is a vector of String-objects */
+rc_t vdp_print_interactive( const Vector * v, vdp_src_context * vctx )
+{
+    struct num_gen * ranges;
+    uint32_t src_id = 0;    /* per default use the first ( mostly only ) source */
+    rc_t rc = num_gen_make_sorted( &ranges, true );
+    if ( rc != 0 )
+        KOutMsg( "num_gen_make_sorted() -> %R\n", rc );
+    else
+    {
+        rc = vdb_print_get_src_and_ranges( VectorGet ( v, 1 ), ranges, &src_id );
+        if ( rc == 0 )
+        {
+            vdp_table * tbl = vdp_get_table( vctx, src_id, NULL );
+            if ( tbl == NULL )
+                KOutMsg( "invalid source #%d\n", src_id );
+            else
+            {
+                rc = vdp_table_adjust_ranges( tbl, ranges );
+                
+                if ( rc == 0 )
+                    rc = KOutMsg( "tbl: %S\n", tbl->name );
+                /* if ( rc == 0 )
+                    rc = vdp_print_show_src_and_ranges( ranges, src_id ); */
+                    
+                if ( rc == 0 )
+                    rc = vdp_print_table( tbl, ranges );
+            }
+        }
+        num_gen_destroy( ranges );
+    }
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-print.h b/tools/vdb-dump/vdb-dump-print.h
new file mode 100644
index 0000000..af8f0e1
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-print.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#ifndef _h_vdb_dump_print_
+#define _h_vdb_dump_print_
+
+#include <vdb/schema.h> /* for VTypedesc */
+#include <vdb/manager.h>
+
+#include <klib/vector.h>
+#include <kapp/args.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct vdp_opts
+{
+    bool print_dna_bases;
+    bool in_hex;
+    bool translate_sra_types;
+    char c_boolean; /* how boolean is printed '1' ... 0/1, 'T' ... T/F, /0 ... true/false */
+} vdp_opts;
+
+
+struct vdp_src_context;
+
+
+/* vdp_print_cell
+ *  prints the content of a cursor-cell to stdout
+ *
+ *
+ *  "elem_bits" [ IN ] - element size in bits
+ *
+ *  "base" [ IN ] - pointer to cell starting bit
+ *
+ *  "boff" [ IN ] - bit offset in BITS of first bit to be printed
+ *
+ *  "row_len" [ IN ] - the number of elements in cell
+ *
+ *  "type_desc" [ IN ] - type description of the cell ( from schema )
+ */
+
+rc_t vdp_print_cell_2_buffer( char * buf, size_t buf_size, size_t *num_written,
+                              const uint32_t elem_bits, const void * base, uint32_t boff, uint32_t row_len,
+                              const VTypedesc * type_desc, vdp_opts * opts );
+
+rc_t vdp_print_cell( const uint32_t elem_bits, const void * base, uint32_t boff, uint32_t row_len,
+                     const VTypedesc * type_desc, vdp_opts * opts );
+
+
+rc_t vdp_init_ctx( struct vdp_src_context ** vctx, const Args * args );
+rc_t vdp_release_ctx( struct vdp_src_context * vctx );
+
+/* v is a vector of String objects... */
+rc_t vdp_print_interactive( const Vector * v, struct vdp_src_context * vctx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/tools/vdb-dump/vdb-dump-redir.c b/tools/vdb-dump/vdb-dump-redir.c
new file mode 100644
index 0000000..83bd1b3
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-redir.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-redir.h"
+
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+#include <sysalloc.h>
+
+static rc_t CC out_redir_callback( void * self, const char * buffer, size_t bufsize, size_t * num_writ )
+{
+    out_redir * redir = ( out_redir * )self;
+    rc_t rc = KFileWriteAll( redir->kfile, redir->pos, buffer, bufsize, num_writ );
+    if ( rc == 0 )
+        redir->pos += *num_writ;
+    return rc;
+}
+
+
+rc_t init_out_redir( out_redir * self, out_redir_mode_t mode, const char * filename, size_t bufsize )
+{
+    rc_t rc;
+    KFile *output_file;
+
+    if ( filename != NULL )
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        else
+        {
+            rc = KDirectoryCreateFile ( dir, &output_file, false, 0664, kcmInit, "%s", filename );
+            KDirectoryRelease( dir );
+        }
+    }
+    else
+        rc = KFileMakeStdOut ( &output_file );
+
+    if ( rc == 0 )
+    {
+        KFile *temp_file;
+
+        /* wrap the output-file in compression, if requested */
+        switch ( mode )
+        {
+            case orm_gzip  : rc = KFileMakeGzipForWrite( &temp_file, output_file ); break;
+            case orm_bzip2 : rc = KFileMakeBzip2ForWrite( &temp_file, output_file ); break;
+            case orm_uncompressed : break;
+        }
+        if ( rc == 0 )
+        {
+            if ( mode != orm_uncompressed )
+            {
+                KFileRelease( output_file );
+                output_file = temp_file;
+            }
+
+            /* wrap the output/compressed-file in buffering, if requested */
+            if ( bufsize != 0 )
+            {
+                rc = KBufFileMakeWrite( &temp_file, output_file, false, bufsize );
+                if ( rc == 0 )
+                {
+                    KFileRelease( output_file );
+                    output_file = temp_file;
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                self->kfile = output_file;
+                self->org_writer = KOutWriterGet();
+                self->org_data = KOutDataGet();
+                self->pos = 0;
+                rc = KOutHandlerSet( out_redir_callback, self );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+void release_out_redir( out_redir * self )
+{
+    KFileRelease( self->kfile );
+    if( self->org_writer != NULL )
+    {
+        KOutHandlerSet( self->org_writer, self->org_data );
+    }
+    self->org_writer = NULL;
+}
+
diff --git a/tools/vdb-dump/vdb-dump-redir.h b/tools/vdb-dump/vdb-dump-redir.h
new file mode 100644
index 0000000..ceb198f
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-redir.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_out_redir_
+#define _h_out_redir_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+
+typedef enum out_redir_mode
+{
+    orm_uncompressed = 0,
+    orm_gzip,
+    orm_bzip2
+} out_redir_mode_t;
+
+
+/* GLOBAL VARIABLES */
+typedef struct out_redir
+{
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} out_redir;
+
+
+rc_t init_out_redir( out_redir * self, out_redir_mode_t mode, const char * filename, size_t bufsize );
+
+void release_out_redir( out_redir * self );
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-repo.c b/tools/vdb-dump/vdb-dump-repo.c
new file mode 100644
index 0000000..66baca6
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-repo.c
@@ -0,0 +1,281 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-repo.h"
+#include "vdb-dump-helper.h"
+
+#include <klib/text.h>
+#include <klib/out.h>
+#include <kfg/config.h>
+#include <kfg/repository.h>
+
+/* ------------------------------------------------------------------------------------------------- */
+
+static const KRepCategory id_to_repo_cat[ 4 ] = { krepUserCategory, krepSiteCategory, krepRemoteCategory, krepBadCategory };
+
+static const char * s_BadCategory       = "BadCategory";
+static const char * s_UserCategory      = "UserCategory";
+static const char * s_SiteCategory      = "SiteCategory";
+static const char * s_RemoteCategory    = "RemoteCategory";
+static const char * s_UnknownCategory   = "unknow category";
+
+static const char * KRepCategory_to_str( const KRepCategory c )
+{
+    switch( c )
+    {
+        case krepBadCategory        : return s_BadCategory; break;
+        case krepUserCategory       : return s_UserCategory; break;
+        case krepSiteCategory       : return s_SiteCategory; break;
+        case krepRemoteCategory     : return s_RemoteCategory; break;
+    };
+    return s_UnknownCategory;
+}
+
+static const char * s_Prefix_bad        = "bad";
+static const char * s_Prefix_user       = "user";
+static const char * s_Prefix_site       = "site";
+static const char * s_Prefix_remote     = "remote";
+static const char * s_Prefix_unknown    = "unknow";
+
+static const char * KRepCategory_to_prefix( const KRepCategory c )
+{
+    switch( c )
+    {
+        case krepBadCategory        : return s_Prefix_bad; break;
+        case krepUserCategory       : return s_Prefix_user; break;
+        case krepSiteCategory       : return s_Prefix_site; break;
+        case krepRemoteCategory     : return s_Prefix_remote; break;
+    };
+    return s_Prefix_unknown;
+}
+
+
+static const char * s_BadSubCategory            = "BadSubCategory";
+static const char * s_MainSubCategory           = "MainSubCategory";
+static const char * s_AuxSubCategory            = "AuxSubCategory";
+static const char * s_ProtectedSubCategory      = "ProtectedSubCategory";
+
+static const char * KRepSubCategory_to_str( const KRepSubCategory c )
+{
+    switch( c )
+    {
+        case krepBadSubCategory         : return s_BadSubCategory; break;
+        case krepMainSubCategory        : return s_MainSubCategory; break;
+        case krepAuxSubCategory         : return s_AuxSubCategory; break;
+        case krepProtectedSubCategory   : return s_ProtectedSubCategory; break;
+    }
+    return s_UnknownCategory;
+}
+
+static const char * s_yes = "yes";
+static const char * s_no  = "no";
+
+static const char * yes_or_no( const bool flag )
+{
+    return flag ? s_yes : s_no;
+}
+
+typedef rc_t ( CC * repofunc )( const KRepository *self, char *buffer, size_t bsize, size_t * size );
+
+static rc_t vdi_report_repo_str( const KRepository * repo, const char * elem_name, repofunc f )
+{
+    if ( f != NULL )
+    {
+        char buffer[ 4096 ];
+        rc_t rc = f( repo, buffer, sizeof buffer, NULL );
+        if ( rc == 0 ) return KOutMsg( "     - %s : %s\n", elem_name, buffer );
+    }
+    return 0;
+}
+
+static rc_t vdi_report_repository( const KRepository * repo, const char * prefix, int idx, bool full )
+{
+    KRepCategory cat = KRepositoryCategory( repo );
+    KRepSubCategory subcat = KRepositorySubCategory( repo );
+
+    rc_t rc = KOutMsg( "  repo.%s #%d:\n", prefix, idx );
+    if ( rc == 0 )
+        rc = KOutMsg( "     - category : %s.%s\n", KRepCategory_to_str( cat ), KRepSubCategory_to_str( subcat ) );
+    if ( rc == 0 )
+        rc = vdi_report_repo_str( repo, "name", KRepositoryName );
+    if ( rc == 0 )
+        rc = KOutMsg( "     - disabled : %s\n", yes_or_no( KRepositoryDisabled( repo ) ) );
+    
+    if ( full )
+    {
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "displayname", KRepositoryDisplayName );
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "root", KRepositoryRoot );
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "resolver", KRepositoryResolver );
+        
+        if ( rc == 0 )
+            rc = KOutMsg( "     - cached : %s\n", yes_or_no( KRepositoryCacheEnabled( repo ) ) );
+            
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "ticket", KRepositoryDownloadTicket );
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "key", KRepositoryEncryptionKey );
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "keyfile", KRepositoryEncryptionKeyFile );
+        if ( rc == 0 ) rc = vdi_report_repo_str( repo, "desc", KRepositoryDescription );    
+        
+        if ( rc == 0 )
+        {
+            uint32_t prj_id;
+            rc_t rc1 = KRepositoryProjectId( repo, &prj_id );
+            if ( rc1 == 0 ) rc = KOutMsg( "     - prj-id : %d\n", prj_id );
+        }
+    }
+    
+    if ( rc == 0 ) rc = KOutMsg( "\n" );
+    return rc;
+}
+
+typedef rc_t ( CC * catfunc )( const KRepositoryMgr *self, KRepositoryVector *user_repositories );
+
+static catfunc vdi_get_catfunc( const KRepCategory cat )
+{
+    switch( cat )
+    {
+        case krepUserCategory       : return KRepositoryMgrUserRepositories; break;
+        case krepSiteCategory       : return KRepositoryMgrSiteRepositories; break;
+        case krepRemoteCategory     : return KRepositoryMgrRemoteRepositories; break;
+    };
+    return NULL;
+}
+
+static rc_t vdi_report_repo_vector( const KRepositoryMgr * repomgr, const KRepCategory cat,
+                    int32_t select, bool full )
+                                    
+{
+    rc_t rc = 0;
+    catfunc f = vdi_get_catfunc( cat );
+    if ( f != NULL )
+    {
+        KRepositoryVector v;
+        rc = f( repomgr, &v );
+        if ( rc == 0 )
+        {
+            const char * prefix = KRepCategory_to_prefix( cat );
+            uint32_t idx, len = VectorLength( &v );
+            bool disabled = KRepositoryMgrCategoryDisabled( repomgr, cat );
+            rc = KOutMsg( "repo.%s --> disabled: %s, %d subrepositories )\n", prefix, yes_or_no( disabled ), len );
+            for ( idx = 0; rc == 0 && idx < len; ++idx )
+            {
+                if ( select == idx || !full )
+                    rc = vdi_report_repository( VectorGet( &v, idx ), prefix, idx, full );
+            }
+            
+            KRepositoryVectorWhack( &v );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdi_repo_all( const KRepositoryMgr * repomgr, bool full )
+{
+    rc_t rc = vdi_report_repo_vector( repomgr, krepUserCategory, -1, full );
+    if ( rc == 0 )
+        rc = vdi_report_repo_vector( repomgr, krepSiteCategory, -1, full );
+    if ( rc == 0 )
+        rc = vdi_report_repo_vector( repomgr, krepRemoteCategory, -1, full );
+    return rc;
+}
+
+
+static rc_t vdi_repo_switch( const KRepositoryMgr * repomgr, const KRepCategory cat, bool disabled )
+{
+    const char * s_cat = KRepCategory_to_prefix( cat );
+    rc_t rc = KRepositoryMgrCategorySetDisabled( repomgr, cat, disabled );
+    if ( rc == 0 )
+        rc = KOutMsg( "repository '%s' successfully %s", s_cat, ( disabled ? "disabled" : "enabled" ) );
+    else
+        rc = KOutMsg( "repository '%s' not %s: '%R'", s_cat, ( disabled ? "disabled" : "enabled" ), rc );
+    return rc;
+}
+
+
+static rc_t vdi_sub_repo( const KRepositoryMgr * repomgr, const Vector * v, const String * which_repo, int32_t repo_id )
+{
+    rc_t rc = 0;
+    const KRepCategory cat = id_to_repo_cat[ repo_id ];
+    
+    if ( VectorLength( v ) > 2 )
+    {
+        const String * which_sub = VectorGet( v, 2 );
+        int32_t repo_func = index_of_match( which_sub, 2, "on", "off" );
+        switch( repo_func )
+        {
+            case 0 : rc = vdi_repo_switch( repomgr, cat, false ); break;
+            case 1 : rc = vdi_repo_switch( repomgr, cat, true ); break;
+            case -1 :  {
+                            int32_t select = ( int32_t )string_to_I64( which_sub->addr, which_sub->len, NULL );
+                            rc = vdi_report_repo_vector( repomgr, cat, select, true );
+                        }
+                        break; 
+        }
+    }
+    else
+    {
+        if ( repo_id < 3 )
+            rc = vdi_report_repo_vector( repomgr, cat, -1, false );
+        else
+            rc = vdi_repo_all( repomgr, false );
+    }
+    
+    return rc;
+}
+
+
+rc_t vdi_repo( const Vector * v )
+{
+    KConfig * cfg;
+    rc_t rc = KConfigMake( &cfg, NULL );
+    if ( rc == 0 )
+    {
+        const KRepositoryMgr * repomgr;
+        rc = KConfigMakeRepositoryMgrRead( cfg, &repomgr );
+        {
+            if ( VectorLength( v ) < 2 )
+            {
+                rc = vdi_repo_all( repomgr, true );
+            }
+            else
+            {
+                const String * which_repo = VectorGet( v, 1 );
+                if ( which_repo != NULL )
+                {
+                    int32_t repo_id = index_of_match( which_repo, 4, "user", "site", "remote", "all" );
+                    if ( repo_id < 0 || repo_id > 3 )
+                        rc = KOutMsg( "unknow repository '%S'", which_repo );
+                    else
+                        rc = vdi_sub_repo( repomgr, v, which_repo, repo_id );
+                }
+            }
+            
+            KRepositoryMgrRelease( repomgr );
+        }
+        KConfigRelease ( cfg );
+    }
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-repo.h b/tools/vdb-dump/vdb-dump-repo.h
new file mode 100644
index 0000000..d2a2e64
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-repo.h
@@ -0,0 +1,46 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_repo_
+#define _h_vdb_dump_repo_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+#include <klib/vector.h>
+
+rc_t vdi_repo( const Vector * v );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-row-context.h b/tools/vdb-dump/vdb-dump-row-context.h
new file mode 100644
index 0000000..de282f1
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-row-context.h
@@ -0,0 +1,71 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_row_context_
+#define _h_vdb_dump_row_context_
+
+#include <vdb/cursor.h>
+#include <klib/vector.h>
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-coldefs.h"
+#include "vdb-dump-str.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*************************************************************************************
+    binds together everything to dump one row:
+        - a pointer to the cursor to read the data-cells
+        - a pointer to the column-definitions (Vector of column-definition's)
+        - a pointer to the dump-context ( parameters and options for cmd-line )
+        - a dump-string (structure not pointer!) to be reused to assemble output
+        - a Vector containing p_col_data - pointers
+        - a return-type to stop if reading data failed ( neccessary to stop after
+          last row if no row-range is given at command-line )
+
+    needed as a (one and only) parameter to VectorForEach
+*************************************************************************************/
+typedef struct row_context
+{
+    const VTable* table;
+    const VCursor* cursor;
+    p_col_defs col_defs;
+    p_dump_context ctx;
+    dump_str s_col;
+    int64_t row_id;
+    uint32_t col_nr;
+    rc_t rc;
+} row_context;
+typedef row_context* p_row_context;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-str.c b/tools/vdb-dump/vdb-dump-str.c
new file mode 100644
index 0000000..8dac7e7
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-str.c
@@ -0,0 +1,540 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-str.h"
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <klib/namelist.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+
+rc_t vds_make( p_dump_str s, const size_t limit, const size_t inc )
+{
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull );
+    }
+    s->str_limit = limit;
+    s->buf_inc = inc;
+    s->buf_size = ( ( limit == 0 ) ? inc : limit+1 );
+    s->buf = malloc( s->buf_size );
+    if ( s->buf == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    }
+    s->str_len = 0;
+    s->buf[0] = 0;
+    s->truncated = false;
+    return 0;
+}
+
+rc_t vds_free( p_dump_str s )
+{
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcParam, rcNull );
+    }
+    free( s->buf );
+    return 0;
+}
+
+rc_t vds_clear( p_dump_str s )
+{
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcDestroying, rcParam, rcNull );
+    }
+    s->buf[0]=0;
+    s->str_len = 0;
+    s->truncated = false;
+    return 0;
+}
+
+bool vds_truncated( p_dump_str s )
+{
+    if ( s == NULL ) return false;
+    return s->truncated;
+}
+
+char *vds_ptr( p_dump_str s )
+{
+    if ( s == NULL ) return NULL;
+    return s->buf;
+}
+
+
+static rc_t vds_inc_buffer( p_dump_str s, const size_t by_len )
+{
+    rc_t rc = 0;
+    if ( s == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        size_t needed = ( s->str_len + by_len + 1 );
+        if ( needed >= s->buf_size )
+        {
+            char * tmp;
+            size_t new_size = s->buf_size * 2;
+            
+            if ( new_size < needed ) new_size = needed + s->buf_inc;
+            tmp = realloc( s->buf, new_size );
+            if ( tmp == NULL )
+            {
+                rc = RC( rcVDB, rcNoTarg, rcAllocating, rcMemory, rcExhausted );
+            }
+            else
+            {
+                s->buf = tmp;
+                s->buf_size = new_size;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vds_truncate( p_dump_str s, const size_t appended )
+{
+    if ( s == NULL || s->buf == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcResizing, rcParam, rcNull );
+    }
+    s->str_len += appended;
+    if ( ( s->str_limit > 0 )&&( s->str_len > s->str_limit ) )
+    {
+        s->buf[ s->str_limit ] = 0;
+        s->str_len = s->str_limit;
+        s->truncated = true;
+    }
+    return 0;
+}
+
+
+rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ... )
+{
+    rc_t rc = 0;
+    if ( s == NULL || fmt == NULL )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    else if ( fmt[ 0 ] == 0 )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
+    }
+    else if ( ( s->str_limit > 0 )&&( s->str_len >= s->str_limit ) )
+    {
+        s->truncated = true;
+    }
+    else
+    {
+        rc = vds_inc_buffer( s, aprox_len );
+        if ( rc == 0 )
+        {
+            va_list argp;
+            size_t num_writ;
+            
+            va_start( argp, fmt );
+            rc = string_vprintf( s->buf + s->str_len, s->buf_size - 1, &num_writ, fmt, argp );
+            va_end( argp );
+            
+            if ( rc == 0 )
+                rc = vds_truncate( s, num_writ ); /* adjusts str_len */
+        }
+    }
+    return rc;
+}
+
+
+rc_t vds_append_str( p_dump_str s, const char *s1 )
+{
+    rc_t rc = 0;
+
+    if ( ( s == NULL )||( s1 == NULL ) )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    else
+    {
+        size_t append_len = string_size( s1 );
+        if ( append_len > 0 )
+        {
+            if ( ( s->str_limit > 0 )&&( s->str_len >= s->str_limit ) )
+            {
+                s->truncated = true;
+            }
+            else
+            {
+                rc = vds_inc_buffer( s, append_len );
+                if ( rc == 0 )
+                {
+                    size_t l = s->str_len;
+                    size_t appended = string_copy( s->buf + l, s->buf_size - l, s1, append_len );
+                    rc = vds_truncate( s, appended ); /* adjusts str_len */
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
+{
+    rc_t rc;
+    size_t append_len;
+    if ( ( s == NULL )||( s1 == NULL ) )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    append_len = string_size( s1 );
+    if ( append_len == 0 )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
+    }
+    rc = vds_inc_buffer( s, append_len );
+    if ( rc == 0 )
+    {
+        size_t l = string_size( s->buf );
+        size_t appended = string_copy( s->buf + l, s->buf_size - l, s1, append_len );
+        s->str_len += appended;
+    }
+    return rc;
+}
+
+
+rc_t vds_rinsert( p_dump_str s, const char *s1 )
+{
+    size_t len;
+    if ( ( s == NULL )||( s1 == NULL ) )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    len = string_size( s1 );
+    if ( len == 0 )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
+    }
+    if ( s->str_len <= len ) return 0;
+    len = s->str_len - len;
+    string_copy( s->buf + len, sizeof( s->buf ) - len, s1, string_size( s1 ) );
+    /* s->str_len does not change */
+    return 0;
+}
+
+
+rc_t vds_indent( p_dump_str s, const size_t limit, const size_t indent )
+{
+    size_t remaining_chars, lines, indent_block, line_idx;
+    char *src, *dst;
+    rc_t rc;
+
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    if ( s->str_len < limit ) return 0;
+    remaining_chars = s->str_len - limit;
+    indent_block = limit - indent;
+    lines = ( remaining_chars / indent_block ) + 1;
+    /* increase the buffer by ( lines * ( indent + 1 ) ) bytes */
+    rc = vds_inc_buffer( s, lines * ( indent + 1 ) );
+    if ( rc == 0 )
+    {
+        src = s->buf + limit;
+        line_idx = 0;
+        while ( line_idx < lines )
+        {
+            dst = src + ( indent + 1 );
+            memmove( dst, src, remaining_chars );
+            *src = '\n';
+            memset( src+1, ' ', indent );
+            remaining_chars -= indent_block;
+            src += ( limit+1 );
+            line_idx++;
+        }
+        s->str_len += ( lines * ( indent + 1 ) );
+        s->buf[ s->str_len ] = 0;
+    }
+    return rc;
+}
+
+uint16_t vds_count_char( p_dump_str s, const char c )
+{
+    uint16_t res = 0;
+    char *temp = s->buf;
+    while(  *temp )
+    {
+        if ( *temp == c ) res++;
+        temp++;
+    }
+    return res;
+}
+
+void vds_escape_quotes_loop( p_dump_str s, const char to_escape,
+                             const char escape_char )
+{
+    char *temp = s->buf;
+    while(  *temp )
+    {
+        if ( *temp == to_escape )
+        {
+        size_t to_move = string_size( temp ) + 1;
+        memmove( temp+1, temp, to_move );
+        (*temp) = escape_char;
+        temp++;
+        }
+        temp++;
+    }
+    s->str_len = string_size( s->buf );
+}
+
+rc_t vds_escape( p_dump_str s, const char to_escape, const char escape_char )
+{
+    uint16_t n;
+    rc_t rc;
+
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    n = vds_count_char( s, to_escape );
+    rc = vds_inc_buffer( s, n + 1 );
+    if ( rc == 0 )
+    {
+        vds_escape_quotes_loop( s, to_escape, escape_char );
+    }
+    return rc;
+}
+
+rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right )
+{
+    size_t to_move;
+    rc_t rc;
+
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    to_move = s->str_len + 1;
+    rc = vds_inc_buffer( s, 2 );
+    if ( rc == 0 )
+    {
+        memmove( s->buf + 1, s->buf, to_move );
+        s->buf[ 0 ] = c_left;
+        s->buf[ to_move ] = c_right;
+        s->buf[ to_move + 1 ] = 0;
+        s->str_len += 2;
+    }
+    return rc;
+}
+
+rc_t vds_2_csv( p_dump_str s )
+{
+    rc_t rc = 0;
+    bool has_comma, has_quotes;
+
+    if ( s == NULL )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    has_comma = (strchr( s->buf, ',' ) != NULL );
+    has_quotes = (strchr( s->buf, '"' ) != NULL );
+    if ( has_quotes )
+    {
+        rc = vds_escape( s, '"', '"' );
+    }
+    if ( (rc == 0 )&&( ( has_quotes )||( has_comma ) ) )
+    {
+        rc = vds_enclose_string( s, '"', '"' );
+    }
+    return rc;
+}
+
+
+/* ========================================================================================= */
+static rc_t vds_add_to_sections( const char * path, uint32_t start, uint32_t len, VNamelist * sections )
+{
+    String S;
+    StringInit( &S, &( path[ start ] ), len, len );
+    return VNamelistAppendString ( sections, &S );
+}
+
+rc_t vds_path_to_sections( const char * path, char delim, VNamelist ** sections )
+{
+    rc_t rc = 0;
+    if ( path == NULL || sections == NULL )
+        rc = RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    else
+    {
+        rc = VNamelistMake ( sections, 5 );
+        if ( rc == 0 )
+        {
+            uint32_t idx = 0, start = 0, len = 0;
+            while( rc== 0 && path[ idx ] != 0 )
+            {
+                if ( path[ idx ] == delim )
+                {
+                    if ( len > 0 )
+                        rc = vds_add_to_sections( path, start, len, *sections );
+                    start = idx + 1;
+                    len = 0;
+                }
+                else
+                {
+                    len++;
+                }
+                idx++;
+            }
+            if ( rc == 0 && len > 0 )
+                rc = vds_add_to_sections( path, start, len, *sections );
+        }
+    }
+    return rc;
+}
+
+/* ========================================================================================= */
+
+static void clear_recorded_errors( void )
+{
+	rc_t rc;
+	const char * filename;
+	const char * funcname;
+	uint32_t line_nr;
+	while ( GetUnreadRCInfo ( &rc, &filename, &funcname, &line_nr ) )
+	{
+	}
+}
+
+static rc_t vds_read_line( const KFile * f, uint64_t * pos, size_t * len, char * buffer, size_t buflen )
+{
+	size_t num_read;
+	rc_t rc = KFileRead( f, *pos, buffer, buflen, &num_read );
+	if ( rc == 0 && num_read > 0 )
+	{
+		char * nl = string_chr ( buffer, num_read, '\n' );
+		char * cr = string_chr ( buffer, num_read, '\r' );
+		if ( nl != NULL )
+		{
+			if ( cr != NULL )
+			{
+				if ( nl < cr )
+					*len = ( nl - buffer );
+				else
+					*len = ( cr - buffer );	
+			}
+			else
+				*len = ( nl - buffer );
+		}
+		else if ( cr != NULL )
+		{
+			*len = ( cr - buffer );
+		}
+		else 
+			*len = 0;
+		*pos += ( *len + 1 );
+	}
+	return rc;
+}
+
+static rc_t vds_print_diff( const char * buffer1, const char * buffer2, size_t len1, size_t len2 )
+{
+	rc_t rc;
+	String S1, S2;
+	
+	StringInit( &S1, buffer1, len1, len1 );
+	StringInit( &S2, buffer2, len2, len2 );
+	rc = KOutMsg( "\n[A] %S\n", &S1 );
+	if ( rc == 0 )
+		rc = KOutMsg( "[B] %S\n", &S2 );
+	return rc;
+}
+
+static rc_t vds_diff_files( const KFile * f1, const KFile * f2 )
+{
+	rc_t rc;
+	char buffer1[ 2048 ];
+	char buffer2[ 2048 ];
+	uint64_t pos1 = 0;
+	uint64_t pos2 = 0;
+	size_t len1, len2;
+
+	do
+	{
+		len1 = len2 = 0;
+		rc = vds_read_line( f1, &pos1, &len1, buffer1, sizeof buffer1 );
+		if ( rc == 0 )
+			rc = vds_read_line( f2, &pos2, &len2, buffer2, sizeof buffer2 );
+		if ( rc == 0 && ( len1 > 0 || len2 > 0 ) )
+			rc = vds_print_diff( buffer1, buffer2, len1, len2 );
+		
+	} while( rc == 0 && ( len1 > 0 || len2 > 0 ) );
+	return rc;
+}
+
+
+rc_t vds_diff( const char * f1, const char * f2 )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+		KOutMsg( "KDirectoryNativeDir() failed\n" );
+    else
+    {
+		const KFile * kf1;
+		rc = KDirectoryOpenFileRead ( dir, &kf1, "%s", f1 );
+		if ( rc != 0 )
+			KOutMsg( "cannot open file '%s'\n", f1 );
+		else
+		{
+			const KFile * kf2;
+			rc = KDirectoryOpenFileRead ( dir, &kf2, "%s", f2 );
+			if ( rc != 0 )
+				KOutMsg( "cannot open file '%s'\n", f2 );
+			else
+			{
+				rc = vds_diff_files( kf1, kf2 );
+				KFileRelease( kf2 );
+			}
+			KFileRelease( kf1 );
+		}
+		KDirectoryRelease( dir );
+	}
+	clear_recorded_errors();
+	
+	return rc;
+}
\ No newline at end of file
diff --git a/tools/vdb-dump/vdb-dump-str.h b/tools/vdb-dump/vdb-dump-str.h
new file mode 100644
index 0000000..b157204
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-str.h
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_str_
+#define _h_vdb_dump_str_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <klib/rc.h>
+#include <klib/namelist.h>
+
+typedef struct dump_str
+{
+    char *buf;
+    size_t buf_size;
+	size_t str_len;
+	size_t str_limit;
+	size_t buf_inc;
+	bool truncated;
+} dump_str;
+typedef dump_str* p_dump_str;
+
+#define DUMP_STR_INC 512
+
+/* initializes the dump-string with limit and buffer-increment */
+rc_t vds_make( p_dump_str s, const size_t limit, const size_t inc );
+
+/* free's the dump-string's internal buffer */
+rc_t vds_free( p_dump_str s );
+
+/* the internal buffer stay's allocated, but the internal string-len
+   and the truncated-state is cleared */
+rc_t vds_clear( p_dump_str s );
+
+/* returns if the dump-string was trancated */
+bool vds_truncated( p_dump_str s );
+
+/* returns if assembled dump-string */
+char *vds_ptr( p_dump_str s );
+
+/* appends the formated string with parameters, truncates to the limit */
+rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ... );
+
+/* appends the string, truncates to the limit */
+rc_t vds_append_str( p_dump_str s, const char *s1 );
+
+/* appends the string, does not truncate */
+rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 );
+
+/* right-inserts the string at the end of the ev. limited string */
+rc_t vds_rinsert( p_dump_str s, const char *s1 );
+
+/* indents the content of a dump-string */
+rc_t vds_indent( p_dump_str s, const size_t limit, const size_t indent );
+
+/* converts the dump-string into csv-style (quotes at begin and end if the
+   string contains a comma or other quotes, escapes quotes with quotes ) */
+rc_t vds_2_csv( p_dump_str s );
+
+rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right );
+rc_t vds_escape( p_dump_str s, const char to_escape, const char escape_char );
+
+rc_t vds_path_to_sections( const char * path, char delim, VNamelist ** sections );
+
+rc_t vds_diff( const char * f1, const char * f2 );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump-tools.c b/tools/vdb-dump/vdb-dump-tools.c
new file mode 100644
index 0000000..bbcee5c
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-tools.c
@@ -0,0 +1,528 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-dump-tools.h"
+#include "vdb-dump-str.h"
+
+#include <vdb/schema.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/pack.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <bitstr.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#define DISP_RC(rc,err) if( rc != 0 ) LOGERR( klogInt, rc, err );
+
+#define BYTE_OFFSET(VALUE)  ( (VALUE) >> 3 )
+#define BIT_OFFSET(VALUE)   ( (VALUE) & 0x7 )
+
+uint8_t BitLength2Bytes[65] =
+{
+         /* 0  1  2  3  4  5  6  7  8  9*/
+   /* 0 */  0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+   /* 1 */  2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
+   /* 2 */  3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+   /* 3 */  4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
+   /* 4 */  5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+   /* 5 */  7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+   /* 6 */  8, 8, 8, 8, 8
+};
+
+/*************************************************************************************
+n_bits   [IN] ... number of bits
+
+calculates the number of bytes that have to be copied to contain the given
+number of bits
+*************************************************************************************/
+static uint16_t vdt_bitlength_2_bytes( const size_t n_bits )
+{
+    if ( n_bits > 64 )
+        return 8;
+    else
+        return BitLength2Bytes[ n_bits ];
+}
+
+uint64_t BitLength2Mask[33] =
+{
+   /* 0 */ 0x00,
+   /* 1 ..  4 */  0x1,                0x3,                0x7,                0xF,
+   /* 5 ..  8 */  0x1F,               0x3F,               0x7F,               0xFF,
+   /* 9 .. 12 */  0x1FF,              0x3FF,              0x7FF,              0xFFF,
+   /*13 .. 16 */  0x1FFF,             0x3FFF,             0x7FFF,             0xFFFF,
+   /*17 .. 20 */  0x1FFFF,            0x3FFFF,            0x7FFFF,            0xFFFFF,
+   /*21 .. 24 */  0x1FFFFF,           0x3FFFFF,           0x7FFFFF,           0xFFFFFF,
+   /*25 .. 28 */  0x1FFFFFF,          0x3FFFFFF,          0x7FFFFFF,          0xFFFFFFF,
+   /*29 .. 32 */  0x1FFFFFFF,         0x3FFFFFFF,         0x7FFFFFFF,         0xFFFFFFFF
+ };
+
+/*************************************************************************************
+n_bits   [IN] ... number of bits
+
+creates a bitmask to mask exactly the given number of bits from a longer value
+*************************************************************************************/
+static uint64_t vdt_bitlength_2_mask( const size_t n_bits )
+{
+    uint64_t res;
+    if ( n_bits < 33 )
+        res = BitLength2Mask[ n_bits ];
+    else
+    {
+        if ( n_bits < 65 )
+            res = BitLength2Mask[ n_bits-32 ];
+        else
+            res = 0xFFFFFFFF;
+        res <<= 32;
+        res |= 0xFFFFFFFF;
+    }
+    return res;
+}
+
+
+static rc_t vdb_dump_txt_ascii( p_dump_str s, const p_dump_src src,
+                                const p_col_def def )
+{
+    char *src_ptr = (char*)src->buf + BYTE_OFFSET( src->offset_in_bits );
+    return vds_append_fmt( s, src->number_of_elements,
+                           "%.*s", src->number_of_elements, src_ptr );
+
+}
+
+
+static rc_t vdb_dump_hex_char( char * temp, uint32_t * idx, const uint8_t c )
+{
+    char s[ 8 ];
+    size_t num_writ;
+    rc_t rc = string_printf ( s, sizeof s, &num_writ, "%X ", c );
+    if ( rc == 0 )
+    {
+        size_t i;
+        for ( i = 0; i < num_writ; ++i )
+            temp[ (*idx)++ ] = s[ i ];
+    }
+    return rc;
+}
+
+
+static rc_t vdb_dump_hex_ascii( p_dump_str s, const p_dump_src src,
+                                const p_col_def def )
+{
+    rc_t rc = 0;
+    char *src_ptr = (char*)src->buf + BYTE_OFFSET( src->offset_in_bits );
+    char *tmp = malloc( src->number_of_elements * 4 );
+    if ( tmp != NULL )
+    {
+        uint32_t i, dst = 0;
+        for ( i = 0; i < src->number_of_elements && rc == 0; ++i )
+            rc = vdb_dump_hex_char( tmp, &dst, src_ptr[ i ] );
+        src_ptr[ dst ] = 0;
+        if ( rc == 0 )
+            rc = vds_append_fmt( s, dst, "%.*s", dst, tmp );
+        free( tmp );
+    }
+    else
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    return rc;
+}
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+dpo         [IN] ... pointer to buffer-offset (bit-offset-part will be ignored)
+
+dumps an ascii-string
+*************************************************************************************/
+static rc_t vdt_dump_ascii( p_dump_str s, const p_dump_src src,
+                            const p_col_def def )
+{
+    rc_t rc;
+    if ( src->in_hex )
+        rc = vdb_dump_hex_ascii( s, src, def );
+    else
+        rc = vdb_dump_txt_ascii( s, src, def );
+    DISP_RC( rc, "dump_str_append_fmt() failed" )
+    if ( rc == 0 )
+    {
+        src->element_idx+=src->number_of_elements;
+        src->offset_in_bits += ( def->type_desc.intrinsic_bits * src->number_of_elements );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+dpo         [IN] ... pointer to buffer-offset (bit-offset-part will be ignored)
+
+dumps an ascii-string
+*************************************************************************************/
+static rc_t vdt_dump_unicode( p_dump_str s, const p_dump_src src,
+                              const p_col_def def )
+{
+    rc_t rc;
+    if ( src->in_hex )
+        rc = vdb_dump_hex_ascii( s, src, def );
+    else
+        rc = vdb_dump_txt_ascii( s, src, def );
+    DISP_RC( rc, "dump_str_append_fmt() failed" )
+    if ( rc == 0 )
+    {
+        src->element_idx+=src->number_of_elements;
+        src->offset_in_bits += ( def->type_desc.intrinsic_bits * src->number_of_elements );
+    }
+    return rc;
+}
+
+void vdt_move_to_value( void* dst, const p_dump_src src, const uint32_t n_bits )
+{
+    char *src_ptr = (char*)src->buf + BYTE_OFFSET(src->offset_in_bits);
+    if ( BIT_OFFSET(src->offset_in_bits) == 0 )
+    {
+        memmove( dst, src_ptr, vdt_bitlength_2_bytes( n_bits ) );
+    }
+    else
+    {
+        bitcpy ( dst, 0, src_ptr, BIT_OFFSET(src->offset_in_bits), n_bits );
+    }
+}
+
+static uint64_t vdt_move_to_uint64( const p_dump_src src, const uint32_t n_bits )
+{
+    uint64_t value = 0;
+    vdt_move_to_value( &value, src, n_bits );
+    if ( n_bits & 7 )
+    {
+        size_t unpacked = 0;
+        Unpack( n_bits, sizeof( value ), &value, 0, n_bits,
+                NULL, &value, sizeof(value), &unpacked );
+    }
+    value &= vdt_bitlength_2_mask( n_bits );
+    src->offset_in_bits += n_bits;
+    return value;
+}
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+my_col_def  [IN] ... the definition of the column to be dumped
+
+dumps boolean values (up to 64 bits)
+*************************************************************************************/
+static rc_t vdt_dump_boolean_element( p_dump_str s, const p_dump_src src,
+                                      const p_col_def def )
+{
+    rc_t rc;
+    uint64_t value = vdt_move_to_uint64( src, def->type_desc.intrinsic_bits );
+    switch( src->c_boolean )
+    {
+    case '1' :  if ( value == 0 )
+                    rc = vds_append_str( s, "0" );
+                else
+                    rc = vds_append_str( s, "1" );
+                break;
+    case 'T' :  if ( value == 0 )
+                    rc = vds_append_str( s, "F" );
+                else
+                    rc = vds_append_str( s, "T" );
+                break;
+
+    default  :  if ( value == 0 )
+                    rc = vds_append_str( s, "false" );
+                else
+                    rc = vds_append_str( s, "true" );
+                break;
+    }
+    DISP_RC( rc, "dump_str_append_str() failed" )
+    return rc;
+}
+
+#define MAX_CHARS_FOR_HEX_UINT64 20
+#define MAX_CHARS_FOR_DEC_UINT64 22
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+my_col_def  [IN] ... the definition of the column to be dumped
+
+unsigned int's up to a length of 64 bit are supported
+unused bits are masked out
+*************************************************************************************/
+static rc_t vdt_dump_uint_element( p_dump_str s, const p_dump_src src,
+                                   const p_col_def def )
+{
+    rc_t rc = 0;
+    uint64_t value = vdt_move_to_uint64( src, def->type_desc.intrinsic_bits );
+    if ( ( src->without_sra_types == false )&&( def->value_trans_fct != NULL ) )
+    {
+        const char *txt = def->value_trans_fct( (uint32_t)value );
+        rc = vds_append_str( s, txt );
+        DISP_RC( rc, "dump_str_append_str() failed" )
+    }
+    else
+    {
+        if ( src->in_hex )
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_HEX_UINT64, "0x%lX", value );
+        else
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_DEC_UINT64, "%lu", value );
+        DISP_RC( rc, "dump_str_append_fmt() failed" )
+    }
+    return rc;
+}
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+my_col_def  [IN] ... the definition of the column to be dumped
+
+signed int's up to a length of 64 bit are supported
+unused bits are masked out
+*************************************************************************************/
+static rc_t vdt_dump_int_element( p_dump_str s, const p_dump_src src,
+                                  const p_col_def def )
+{
+    rc_t rc = 0;
+    int64_t value = (int64_t)vdt_move_to_uint64( src, def->type_desc.intrinsic_bits );
+    if ( ( src->without_sra_types == false )&&( def->value_trans_fct != NULL ) )
+    {
+        const char *txt = def->value_trans_fct( (uint32_t)value );
+        rc = vds_append_str( s, txt );
+        DISP_RC( rc, "dump_str_append_str() failed" )
+    }
+    else
+    {
+        switch ( def->type_desc.intrinsic_bits )
+        {
+            case  8 : { int8_t temp = (int8_t)value;
+                        value = temp; }
+                      break;
+            case 16 : { int16_t temp = (int16_t)value;
+                        value = temp; }
+                      break;
+            case 32 : { int32_t temp = (int32_t)value;
+                        value = temp; }
+                      break;
+        }
+
+        if ( src->in_hex )
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_HEX_UINT64, "0x%lX", value );
+        else
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_DEC_UINT64, "%ld", value );
+        DISP_RC( rc, "dump_str_append_fmt() failed" )
+    }
+    return rc;
+}
+
+#define MAX_CHARS_FOR_DOUBLE 26
+#define BITSIZE_OF_FLOAT ( sizeof(float) * 8 )
+#define BITSIZE_OF_DOUBLE ( sizeof(double) * 8 )
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+my_col_def  [IN] ... the definition of the column to be dumped
+
+only 2 float-types: "float"(32 bit) and "double"(64 bit) are supported
+*************************************************************************************/
+static rc_t vdt_dump_float_element( p_dump_str s, const p_dump_src src,
+                                    const p_col_def def )
+{
+    rc_t rc;
+    if ( src->in_hex )
+        rc = vdt_dump_int_element( s, src, def );
+    else
+    {
+        if ( def->type_desc.intrinsic_bits == BITSIZE_OF_FLOAT )
+        {
+            float value;
+            vdt_move_to_value( &value, src, def->type_desc.intrinsic_bits );
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_DOUBLE, "%e", value );
+            DISP_RC( rc, "dump_str_append_fmt() failed" )
+        }
+        else if ( def->type_desc.intrinsic_bits == BITSIZE_OF_DOUBLE )
+        {
+            double value;
+            vdt_move_to_value( &value, src, def->type_desc.intrinsic_bits );
+            rc = vds_append_fmt( s, MAX_CHARS_FOR_DOUBLE, "%e", value );
+            DISP_RC( rc, "dump_str_append_fmt() failed" )
+        }
+        else
+        {
+            rc = vds_append_str( s, "unknown float-type" );
+            DISP_RC( rc, "dump_str_append_str() failed" )
+        }
+        src->offset_in_bits += def->type_desc.intrinsic_bits;
+    }
+    return rc;
+}
+
+
+char dna_chars[4] = { 'A', 'C', 'G', 'T' };
+
+/* special function to translate dim=2,bits=1 into a DNA-base */
+static rc_t vdt_dump_base_element( p_dump_str s,
+                                   const p_dump_src src,
+                                   const p_col_def def )
+{
+    /* do not replace this with value2=value1, because move_to_uint64
+       increments the src-bit-counter !*/
+    uint64_t value1 = vdt_move_to_uint64( src, def->type_desc.intrinsic_bits );
+    uint64_t value2 = vdt_move_to_uint64( src, def->type_desc.intrinsic_bits );
+    rc_t rc;
+    value1 <<= 1;
+    value1 |= value2;
+    rc = vds_append_fmt( s, 1, "%c", dna_chars[ value1 & 0x03 ] );
+    DISP_RC( rc, "dump_str_append_fmt() failed" )
+    return rc;
+}
+
+
+typedef rc_t(*vdt_dump_fkt_t)( p_dump_str s,
+                               const p_dump_src src,
+                               const p_col_def def );
+
+/* !!!!!!!! this depends on how domains are defined in "schema.h" */
+vdt_dump_fkt_t vdt_DomainDispatch[] =
+{
+    vdt_dump_boolean_element,
+    vdt_dump_uint_element,
+    vdt_dump_int_element,
+    vdt_dump_float_element,
+    vdt_dump_ascii,
+    vdt_dump_unicode
+};
+
+rc_t vdt_dump_dim_trans( const p_dump_src src, const p_col_def def,
+                         const int dimension )
+{
+    rc_t rc = 0;
+    char *s;
+    uint8_t *sbuf = (uint8_t *)src->buf;
+    sbuf+=( src->offset_in_bits >> 3 );
+    s = def->dim_trans_fct( sbuf );
+    src->offset_in_bits += ( def->type_desc.intrinsic_bits * dimension );
+    rc = vds_append_str( &(def->content), s );
+    DISP_RC( rc, "dump_str_append_str() failed" )
+    /* we have to free, because dim_trans_fct()
+       makes the string dynamically */
+    free( s );
+    return rc;
+}
+
+rc_t vdt_dump_dim( const p_dump_src src, const p_col_def def,
+                   const int dimension, const int selection )
+{
+    rc_t rc = 0;
+    int i = 0;
+    bool print_comma = true;
+
+    if ( selection == 0 ) /* cell-type == boolean */
+    {
+        /* if long form "false" or "true" separate elements by comma */
+        print_comma = ( src->c_boolean == 0 );
+    }
+
+    while ( ( i < dimension )&&( rc == 0 ) )
+    {
+        /* selection 0 ... boolean */
+        if ( print_comma && ( i > 0 ) )
+        {
+            rc = vds_append_str( &(def->content), ", " );
+            DISP_RC( rc, "dump_str_append_str() failed" )
+        }
+        if ( rc == 0 )
+        {
+            rc = vdt_DomainDispatch[ selection ]( &(def->content), src, def );
+            DISP_RC( rc, "DomainDispatch[]() failed" )
+        }
+        i++;
+    }
+    return rc;
+}
+
+/*************************************************************************************
+src         [IN] ... buffer containing the data
+my_col_def  [IN] ... the definition of the column to be dumped
+
+dumps one data-element (or a vector of it)
+*************************************************************************************/
+rc_t vdt_dump_element( const p_dump_src src, const p_col_def def, bool bracket )
+{
+    int dimension, selection;
+    rc_t rc = 0;
+
+    if ( ( src == NULL )||( def == NULL ) )
+    {
+        return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
+    }
+    dimension   = def->type_desc.intrinsic_dim;
+    selection   = def->type_desc.domain - 1;
+
+    if ( dimension == 1 )
+    {
+        /* we have only 1 dimension ---> just print this value */
+        rc = vdt_DomainDispatch[ selection ]( &(def->content), src, def );
+        DISP_RC( rc, "DomainDispatch[]() failed" )
+    }
+    else
+    {
+        /* we have more than 1 dimension ---> repeat printing value's */
+        if ( src->print_dna_bases )
+        {
+            rc = vdt_dump_base_element( &(def->content), src, def );
+        }
+        else
+        {
+            bool trans = ( ( src->without_sra_types == false )&&
+                           ( def->dim_trans_fct ) );
+            bool paren = ( ( src->number_of_elements > 1 )||( !trans ) );
+
+            if ( paren )
+            {
+                rc = vds_append_str( &(def->content), bracket ? "[" : "{" );
+                
+                DISP_RC( rc, "dump_str_append_str() failed" )
+            }
+
+            if ( rc == 0 )
+            {
+                if ( trans )
+                    rc = vdt_dump_dim_trans( src, def, dimension );
+                else
+                {
+                    rc = vdt_dump_dim( src, def, dimension, selection );
+                }
+            }
+
+            if ( paren && ( rc == 0 ) )
+            {
+                rc = vds_append_str( &(def->content), bracket ? "]" : "}" );
+                DISP_RC( rc, "dump_str_append_str() failed" )
+            }
+        }
+    }
+    src->element_idx++;
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb-dump-tools.h b/tools/vdb-dump/vdb-dump-tools.h
new file mode 100644
index 0000000..d8b7ac7
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump-tools.h
@@ -0,0 +1,60 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_dump_tools_
+#define _h_vdb_dump_tools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include "vdb-dump-coldefs.h"
+#include "vdb-dump-str.h"
+
+typedef struct dump_src
+{
+    const void *buf;
+    uint32_t offset_in_bits;
+    uint32_t element_idx;
+    uint32_t number_of_elements;
+    bool in_hex;
+    bool print_dna_bases;
+    bool without_sra_types;
+    char c_boolean;
+} dump_src;
+typedef dump_src* p_dump_src;
+
+rc_t vdt_dump_element( const p_dump_src src, const p_col_def def, bool bracket );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-dump/vdb-dump.c b/tools/vdb-dump/vdb-dump.c
new file mode 100644
index 0000000..fe5eff4
--- /dev/null
+++ b/tools/vdb-dump/vdb-dump.c
@@ -0,0 +1,2351 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+#include <vdb/dependencies.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/manager.h>
+#include <kdb/namelist.h>
+#include <kdb/meta.h>
+
+#include <kfs/directory.h>
+#include <kns/manager.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/args-conv.h>
+
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/time.h>
+#include <klib/num-gen.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <bitstr.h>
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-coldefs.h"
+#include "vdb-dump-tools.h"
+#include "vdb-dump-helper.h"
+#include "vdb-dump-row-context.h"
+#include "vdb-dump-formats.h"
+#include "vdb-dump-fastq.h"
+#include "vdb-dump-redir.h"
+#include "vdb-dump-bin.h"
+#include "vdb-dump-interact.h"
+#include "vdb_info.h"
+
+static const char * row_id_on_usage[]           = { "print row id",                                 NULL };
+static const char * line_feed_usage[]           = { "line-feed's inbetween rows",                   NULL };
+static const char * colname_off_usage[]         = { "do not print column-names",                    NULL };
+static const char * in_hex_usage[]              = { "print numbers in hex",                         NULL };
+static const char * table_usage[]               = { "table-name",                                   NULL };
+static const char * rows_usage[]                = { "rows (default = all)",                         NULL };
+static const char * columns_usage[]             = { "columns (default = all)",                      NULL };
+static const char * schema_usage[]              = { "schema-name",                                  NULL };
+static const char * schema_dump_usage[]         = { "dumps the schema",                             NULL };
+static const char * table_enum_usage[]          = { "enumerates tables",                            NULL };
+static const char * column_enum_usage[]         = { "enumerates columns in extended form",          NULL };
+static const char * column_short_usage[]        = { "enumerates columns in short form",             NULL };
+static const char * dna_bases_usage[]           = { "print dna-bases",                              NULL };
+static const char * max_line_len_usage[]        = { "limits line length",                           NULL };
+static const char * line_indent_usage[]         = { "indents the line",                             NULL };
+static const char * filter_usage[]              = { "filters lines",                                NULL };
+static const char * format_usage[]              = { "output format:",                               NULL };
+static const char * id_range_usage[]            = { "prints id-range",                              NULL };
+static const char * without_sra_usage[]         = { "without sra-type-translation",                 NULL };
+static const char * excluded_columns_usage[]    = { "exclude these columns",                        NULL };
+static const char * boolean_usage[]             = { "defines how boolean's are printed (1,T)",      NULL };
+static const char * objver_usage[]              = { "request vdb-version",                          NULL };
+static const char * objts_usage[]               = { "request object modification date",             NULL };
+static const char * numelem_usage[]             = { "print only element-count",                     NULL };
+static const char * numelemsum_usage[]          = { "sum element-count",                            NULL };
+static const char * show_blobbing_usage[]       = { "show blobbing",                                NULL };
+static const char * enum_phys_usage[]           = { "enumerate physical columns",                   NULL };
+static const char * enum_readable_usage[]       = { "enumerate readable columns",                   NULL };
+static const char * objtype_usage[]             = { "report type of object",                        NULL };
+static const char * idx_enum_usage[]            = { "enumerate all available index",                NULL };
+static const char * idx_range_usage[]           = { "enumerate values and row-ranges of one index", NULL };
+static const char * cur_cache_usage[]           = { "size of cursor cache",                         NULL };
+static const char * out_file_usage[]            = { "write output to this file",                    NULL };
+static const char * out_path_usage[]            = { "write output to this directory",               NULL };
+static const char * gzip_usage[]                = { "compress output using gzip",                   NULL };
+static const char * bzip2_usage[]               = { "compress output using bzip2",                  NULL };
+static const char * outbuf_size_usage[]         = { "size of output-buffer, 0...none",              NULL };
+static const char * disable_mt_usage[]          = { "disable multithreading",                       NULL };
+static const char * info_usage[]                = { "print info about run",                         NULL };
+static const char * spotgroup_usage[]           = { "show spotgroups",                              NULL };
+static const char * merge_ranges_usage[]        = { "merge and sort row-ranges",                    NULL };
+static const char * spread_usage[]              = { "show spread of integer values",                NULL };
+static const char * slice_usage[]               = { "find a slice of given depth",                  NULL };
+static const char * interactive_usage[]         = { "interactive mode",                             NULL };
+
+OptDef DumpOptions[] =
+{
+    { OPTION_ROW_ID_ON,             ALIAS_ROW_ID_ON,          NULL, row_id_on_usage,         1, false,  false },
+    { OPTION_LINE_FEED,             ALIAS_LINE_FEED,          NULL, line_feed_usage,         1, true,   false },
+    { OPTION_COLNAME_OFF,           ALIAS_COLNAME_OFF,        NULL, colname_off_usage,       1, false,  false },
+    { OPTION_IN_HEX,                ALIAS_IN_HEX,             NULL, in_hex_usage,            1, false,  false },
+    { OPTION_TABLE,                 ALIAS_TABLE,              NULL, table_usage,             1, true,   false },
+    { OPTION_ROWS,                  ALIAS_ROWS,               NULL, rows_usage,              1, true,   false },
+    { OPTION_COLUMNS,               ALIAS_COLUMNS,            NULL, columns_usage,           1, true,   false },
+    { OPTION_SCHEMA,                ALIAS_SCHEMA,             NULL, schema_usage,            5, true,   false },
+    { OPTION_SCHEMA_DUMP,           ALIAS_SCHEMA_DUMP,        NULL, schema_dump_usage,       1, false,  false },
+    { OPTION_TABLE_ENUM,            ALIAS_TABLE_ENUM,         NULL, table_enum_usage,        1, false,  false },
+    { OPTION_COLUMN_ENUM,           ALIAS_COLUMN_ENUM,        NULL, column_enum_usage,       1, false,  false },
+    { OPTION_COLUMN_SHORT,          ALIAS_COLUMN_SHORT,       NULL, column_short_usage,      1, false,  false },
+    { OPTION_DNA_BASES,             ALIAS_DNA_BASES,          NULL, dna_bases_usage,         1, false,  false },
+    { OPTION_MAX_LINE_LEN,          ALIAS_MAX_LINE_LEN,       NULL, max_line_len_usage,      1, true,   false },
+    { OPTION_LINE_INDENT,           ALIAS_LINE_INDENT,        NULL, line_indent_usage,       1, true,   false },
+    { OPTION_FILTER,                ALIAS_FILTER,             NULL, filter_usage,            1, true,   false },
+    { OPTION_FORMAT,                ALIAS_FORMAT,             NULL, format_usage,            1, true,   false },
+    { OPTION_ID_RANGE,              ALIAS_ID_RANGE,           NULL, id_range_usage,          1, false,  false },
+    { OPTION_WITHOUT_SRA,           ALIAS_WITHOUT_SRA,        NULL, without_sra_usage,       1, false,  false },
+    { OPTION_EXCLUDED_COLUMNS,      ALIAS_EXCLUDED_COLUMNS,   NULL, excluded_columns_usage,  1, true,   false },
+    { OPTION_BOOLEAN,               ALIAS_BOOLEAN,            NULL, boolean_usage,           1, true,   false },
+    { OPTION_NUMELEM,               ALIAS_NUMELEM,            NULL, numelem_usage,           1, false,  false },
+    { OPTION_NUMELEMSUM,            ALIAS_NUMELEMSUM,         NULL, numelemsum_usage,        1, false,  false },
+    { OPTION_SHOW_BLOBBING,         NULL,                     NULL, show_blobbing_usage,     1, false,  false },
+    { OPTION_ENUM_PHYS,             NULL,                     NULL, enum_phys_usage,         1, false,  false },
+    { OPTION_ENUM_READABLE,         NULL,                     NULL, enum_readable_usage,     1, false,  false },
+    { OPTION_OBJVER,                ALIAS_OBJVER,             NULL, objver_usage,            1, false,  false },
+    { OPTION_OBJTS,                 NULL,                     NULL, objts_usage,             1, false,  false },
+    { OPTION_OBJTYPE,               ALIAS_OBJTYPE,            NULL, objtype_usage,           1, false,  false },
+    { OPTION_IDX_ENUM,              NULL,                     NULL, idx_enum_usage,          1, false,  false },
+    { OPTION_IDX_RANGE,             NULL,                     NULL, idx_range_usage,         1, true,   false },
+    { OPTION_CUR_CACHE,             NULL,                     NULL, cur_cache_usage,         1, true,   false },
+    { OPTION_OUT_FILE,              NULL,                     NULL, out_file_usage,          1, true,   false },
+    { OPTION_OUT_PATH,              NULL,                     NULL, out_path_usage,          1, true,   false },
+    { OPTION_PHASE,                 NULL,                     NULL, NULL,                   1, true,   false },
+    { OPTION_GZIP,                  NULL,                     NULL, gzip_usage,              1, false,  false },
+    { OPTION_BZIP2,                 NULL,                     NULL, bzip2_usage,             1, false,  false },
+    { OPTION_OUT_BUF_SIZE,          NULL,                     NULL, outbuf_size_usage,       1, true,   false },
+    { OPTION_NO_MULTITHREAD,        NULL,                     NULL, disable_mt_usage,        1, false,  false },
+    { OPTION_INFO,                  NULL,                     NULL, info_usage,              1, false,  false },
+    { OPTION_DIFF,                  NULL,                     NULL, NULL,                   1, false,  false },
+    { OPTION_SPOTGROUPS,            NULL,                     NULL, spotgroup_usage,         1, false,  false },
+    { OPTION_MERGE_RANGES,          NULL,                     NULL, merge_ranges_usage,      1, false,  false },
+    { OPTION_SPREAD,                NULL,                     NULL, spread_usage,            1, false,  false },
+    { OPTION_INTERACTIVE,           NULL,                     NULL, interactive_usage,       1, false,  false },    
+    { OPTION_SLICE,                 NULL,                     NULL, slice_usage,             1, true,   false }
+};
+
+const char UsageDefaultName[] = "vdb-dump";
+
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [<path> ...] [options]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+
+    HelpOptionLine ( ALIAS_ROW_ID_ON,           OPTION_ROW_ID_ON,       NULL,           row_id_on_usage );
+    HelpOptionLine ( ALIAS_LINE_FEED,           OPTION_LINE_FEED,       "line_feed",    line_feed_usage );
+    HelpOptionLine ( ALIAS_COLNAME_OFF,         OPTION_COLNAME_OFF,     NULL,           colname_off_usage );
+    HelpOptionLine ( ALIAS_IN_HEX,              OPTION_IN_HEX,          NULL,           in_hex_usage );
+    HelpOptionLine ( ALIAS_TABLE,               OPTION_TABLE,           "table",        table_usage );
+    HelpOptionLine ( ALIAS_ROWS,                OPTION_ROWS,            "rows",         rows_usage );
+    HelpOptionLine ( ALIAS_COLUMNS,             OPTION_COLUMNS,         "columns",      columns_usage );
+    HelpOptionLine ( ALIAS_SCHEMA,              OPTION_SCHEMA,          "schema",       schema_usage );
+    HelpOptionLine ( ALIAS_SCHEMA_DUMP,         OPTION_SCHEMA_DUMP,     NULL,           schema_dump_usage );
+    HelpOptionLine ( ALIAS_TABLE_ENUM,          OPTION_TABLE_ENUM,      NULL,           table_enum_usage );
+    HelpOptionLine ( ALIAS_COLUMN_ENUM,         OPTION_COLUMN_ENUM,     NULL,           column_enum_usage );
+    HelpOptionLine ( ALIAS_COLUMN_SHORT,        OPTION_COLUMN_SHORT,    NULL,           column_short_usage );
+    HelpOptionLine ( ALIAS_DNA_BASES,           OPTION_DNA_BASES,       "dna_bases",    dna_bases_usage );
+    HelpOptionLine ( ALIAS_MAX_LINE_LEN,        OPTION_MAX_LINE_LEN,    "max_length",   max_line_len_usage );
+    HelpOptionLine ( ALIAS_LINE_INDENT,         OPTION_LINE_INDENT,     "indent_width", line_indent_usage );
+    HelpOptionLine ( ALIAS_FORMAT,              OPTION_FORMAT,          "format",       format_usage );
+    
+    KOutMsg( "      csv ..... comma separated values on one line\n" );
+    KOutMsg( "      xml ..... xml-style without complete xml-frame\n" );
+    KOutMsg( "      json .... json-style\n" );
+    KOutMsg( "      piped ... 1 line per cell: row-id, column-name: value\n" );
+    KOutMsg( "      tab ..... 1 line per row: tab-separated values only\n" );
+    KOutMsg( "      fastq ... FASTQ( 4 lines ) for each row\n" );
+    KOutMsg( "      fastq1 .. FASTQ( 4 lines ) for each fragment\n" );    
+    KOutMsg( "      fasta ... FASTA( 2 lines ) for each fragment if possible\n" );
+    KOutMsg( "      fasta1 .. one FASTA-record for the whole accession (REFSEQ)\n" );
+    KOutMsg( "      fasta2 .. one FASTA-record for each REFERENCE in cSRA\n" );
+    KOutMsg( "      qual .... QUAL( 2 lines ) for each row\n" );    
+    KOutMsg( "      qual1 ... QUAL( 2 lines ) for each fragment if possible\n\n" );
+    
+    HelpOptionLine ( ALIAS_ID_RANGE,            OPTION_ID_RANGE,        NULL,           id_range_usage );
+    HelpOptionLine ( ALIAS_WITHOUT_SRA,         OPTION_WITHOUT_SRA,     NULL,           without_sra_usage );
+    HelpOptionLine ( ALIAS_EXCLUDED_COLUMNS,    OPTION_EXCLUDED_COLUMNS,NULL,           excluded_columns_usage );
+    HelpOptionLine ( ALIAS_BOOLEAN,             OPTION_BOOLEAN,         NULL,           boolean_usage );
+    HelpOptionLine ( ALIAS_OBJVER,              OPTION_OBJVER,          NULL,           objver_usage );
+    HelpOptionLine ( NULL,                      OPTION_OBJTS,           NULL,           objts_usage );
+    HelpOptionLine ( ALIAS_OBJTYPE,             OPTION_OBJTYPE,         NULL,           objtype_usage );
+    HelpOptionLine ( ALIAS_NUMELEM,             OPTION_NUMELEM,         NULL,           numelem_usage );
+    HelpOptionLine ( ALIAS_NUMELEMSUM,          OPTION_NUMELEMSUM,      NULL,           numelemsum_usage );
+    HelpOptionLine ( NULL,                      OPTION_SHOW_BLOBBING,   NULL,           show_blobbing_usage );
+    HelpOptionLine ( NULL,                      OPTION_ENUM_PHYS,       NULL,           enum_phys_usage );
+    HelpOptionLine ( NULL,                      OPTION_ENUM_READABLE,   NULL,           enum_readable_usage );
+    HelpOptionLine ( NULL,                      OPTION_IDX_ENUM,        NULL,           idx_enum_usage );    
+    HelpOptionLine ( NULL,                      OPTION_IDX_RANGE,       NULL,           idx_range_usage );    
+    HelpOptionLine ( NULL,                      OPTION_CUR_CACHE,       NULL,           cur_cache_usage );    
+    HelpOptionLine ( NULL,                      OPTION_OUT_FILE,        NULL,           out_file_usage );
+    HelpOptionLine ( NULL,                      OPTION_OUT_PATH,        NULL,           out_path_usage );
+    HelpOptionLine ( NULL,                      OPTION_GZIP,            NULL,           gzip_usage );
+    HelpOptionLine ( NULL,                      OPTION_BZIP2,           NULL,           bzip2_usage );
+    HelpOptionLine ( NULL,                      OPTION_OUT_BUF_SIZE,    NULL,           outbuf_size_usage );
+    HelpOptionLine ( NULL,                      OPTION_NO_MULTITHREAD,  NULL,           disable_mt_usage );
+    HelpOptionLine ( NULL,                      OPTION_INFO,            NULL,           info_usage );
+    HelpOptionLine ( NULL,                      OPTION_SPOTGROUPS,      NULL,           spotgroup_usage );
+    HelpOptionLine ( NULL,                      OPTION_MERGE_RANGES,    NULL,           merge_ranges_usage );
+    HelpOptionLine ( NULL,                      OPTION_SPREAD,          NULL,           spread_usage );
+    
+    HelpOptionsStandard ();
+
+    HelpVersion ( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+/*************************************************************************************
+    read_cell_data_and_dump:
+    * called by "dump_rows()" via VectorForEach() for every column in a row
+    * extracts the column-definition from the item, the row-context from the data-ptr
+    * clears the column-text-buffer (part of the column-data-struct)
+    * reads the cell-data from the cursor
+    * eventually detects a unknown data-type
+    * detects if this column has a dna-format ( special treatment for printing )
+    * loops throuh the elements of a cell
+        - calls "dump_element()" for every element (from vdb-dump-tools.c)
+
+item    [IN] ... pointer to col-data ( definition and buffer )
+data    [IN] ... pointer to row-context( cursor, dump_context, col_defs ... )
+*************************************************************************************/
+static void CC vdm_read_cell_data( void *item, void *data )
+{
+    dump_src src; /* defined in vdb-dump-tools.h */
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( r_ctx->rc != 0 ) return; /* important to stop if the last read was not successful */
+    vds_clear( &(my_col_def->content) ); /* clear the destination-dump-string */
+    if ( my_col_def->valid == false ) return;
+    if ( my_col_def->excluded == true ) return;
+
+    /* read the data of a cursor-cell: buffer-addr, offset and element-count
+       is stored in the dump_src-struct */
+    r_ctx->rc = VCursorCellData( r_ctx->cursor, my_col_def->idx, NULL, &src.buf,
+                                 &src.offset_in_bits, &src.number_of_elements );
+    if ( r_ctx->rc != 0 )
+    {
+        if ( UIError( r_ctx->rc, NULL, r_ctx->table ) )
+        {
+            UITableLOGError( r_ctx->rc, r_ctx->table, true );
+        }
+        else
+        {
+            PLOGERR( klogInt,
+                     (klogInt,
+                     r_ctx->rc,
+                     "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+                     "col_name=%s,row_nr=%lu",
+                      my_col_def->name, r_ctx->row_id ));
+            /* be forgiving and continue if a cell cannot be read */
+        }
+        r_ctx->rc = 0;
+    }
+
+    /* check the type-domain */
+    if ( ( my_col_def->type_desc.domain < vtdBool )||
+         ( my_col_def->type_desc.domain > vtdUnicode ) )
+    {
+        vds_append_str( &(my_col_def->content), "unknown data-type" );
+    }
+    else
+    {
+        bool print_comma = true;
+        bool sra_dump_format;
+
+        /* initialize the element-idx ( for dimension > 1 ) */
+        src.element_idx = 0;
+
+        /* transfer context-flags (hex-print, no sra-types) */
+        src.in_hex = r_ctx->ctx->print_in_hex;
+        src.without_sra_types = r_ctx->ctx->without_sra_types;
+
+        /* special treatment to suppress spaces between values */
+        sra_dump_format = ( r_ctx->ctx->format == df_sra_dump );
+
+        /* hardcoded printing of dna-bases if the column-type fits */
+        src.print_dna_bases = ( r_ctx->ctx->print_dna_bases &
+                    ( my_col_def->type_desc.intrinsic_dim == 2 ) &
+                    ( my_col_def->type_desc.intrinsic_bits == 1 ) );
+
+        /* how a boolean is displayed */
+        src.c_boolean = r_ctx->ctx->c_boolean;
+
+        if ( my_col_def->type_desc.domain == vtdBool && src.c_boolean != 0 )
+        {
+            print_comma = false;
+        }
+
+        if ( r_ctx->ctx->print_num_elem )
+        {
+            char temp[ 16 ];
+            size_t num_writ;
+
+            r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", src.number_of_elements ); 
+            if ( r_ctx->rc == 0 )
+                vds_append_str( &(my_col_def->content), temp );
+        }
+        else if ( r_ctx->ctx->sum_num_elem )
+        {
+            my_col_def->elementsum += src.number_of_elements;
+        }
+        else
+        {
+            /* loop through the elements(dimension's) of a cell */
+            while( ( src.element_idx < src.number_of_elements )&&( r_ctx->rc == 0 ) )
+            {
+                uint32_t eidx = src.element_idx;
+                if ( ( eidx > 0 )&& ( src.print_dna_bases == false ) && print_comma )
+                {
+                    if ( sra_dump_format )
+                        vds_append_str( &(my_col_def->content), "," );
+                    else
+                        vds_append_str( &(my_col_def->content), ", " );
+                }
+
+                /* dumps the basic data-types, implementation in vdb-dump-tools.c
+                   >>> that means it appends the element-string to
+                       my_col_def->content <<<
+                   the formated output is only collected, to be printed later
+                   dump_element is also responsible for incrementing
+                   the src.element_idx by: 1...bool/int/uint/float
+                                           n...string/unicode-string */
+                r_ctx->rc = vdt_dump_element( &src, my_col_def, !sra_dump_format );
+
+                /* insurance against endless loop */
+                if ( eidx == src.element_idx )
+                {
+                    src.element_idx++;
+                }
+            }
+        }
+    }
+}
+
+
+
+static void CC vdm_print_elem_sum( void *item, void *data )
+{
+    char temp[ 16 ];
+    size_t num_writ;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( r_ctx->rc != 0 ) return; /* important to stop if the last read was not successful */
+    vds_clear( &(my_col_def->content) ); /* clear the destination-dump-string */
+
+    r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", my_col_def->elementsum ); 
+    if ( r_ctx->rc == 0 )
+        vds_append_str( &(my_col_def->content), temp );
+}
+
+
+static void vdm_row_error( const char * fmt, rc_t rc, uint64_t row_id )
+{
+    PLOGERR( klogInt, ( klogInt, rc, fmt, "row_nr=%lu", row_id ) );
+
+}
+
+/*************************************************************************************
+    dump_rows:
+    * is the main loop to dump all rows or all selected rows ( -R1-10 )
+    * creates a dump-string ( parameterizes it with the wanted max. line-len )
+    * starts the number-generator
+    * as long as the number-generator has a number and the result-code is ok
+      do for every row-id:
+        - set the row-id into the cursor and open the cursor-row
+        - loop throuh the columns
+        - close the row
+        - call print_row (vdb-dump-formats.c) which actually prints the row
+    * the collection of the text's for the columns "read_cell_data_and_dump()"
+      is separated from the actual printing "print_row()" !
+
+r_ctx   [IN] ... row-context ( cursor, dump_context, col_defs ... )
+*************************************************************************************/
+static rc_t vdm_dump_rows( p_row_context r_ctx )
+{
+    /* the important row_id is a member of r_ctx ! */
+    r_ctx->rc = vds_make( &(r_ctx->s_col), r_ctx->ctx->max_line_len, 512 );
+    if ( r_ctx->rc != 0 )
+        vdm_row_error( "dump_str_make( row#$(row_nr) ) failed", r_ctx->rc, r_ctx->row_id );
+    else
+    {
+        const struct num_gen_iter * iter;
+
+        r_ctx->rc = num_gen_iterator_make( r_ctx->ctx->rows, &iter );
+        if ( r_ctx->rc != 0 )
+            vdm_row_error( "num_gen_iterator_make( row#$(row_nr) ) failed", r_ctx->rc, r_ctx->row_id );
+        else
+        {
+            while ( ( r_ctx->rc == 0 ) && num_gen_iterator_next( iter, &(r_ctx->row_id), &(r_ctx->rc) ) )
+            {
+                if ( r_ctx-> rc == 0 )
+                    r_ctx-> rc = Quitting();
+                if ( r_ctx->rc != 0 )
+                    break;
+                r_ctx->rc = VCursorSetRowId( r_ctx->cursor, r_ctx->row_id );
+                if ( r_ctx->rc != 0 )
+                {
+                    vdm_row_error( "VCursorSetRowId( row#$(row_nr) ) failed", 
+                                   r_ctx->rc, r_ctx->row_id );
+                }
+                else
+                {
+                    r_ctx->rc = VCursorOpenRow( r_ctx->cursor );
+                    if ( r_ctx->rc != 0 )
+                    {
+                        vdm_row_error( "VCursorOpenRow( row#$(row_nr) ) failed", 
+                                       r_ctx->rc, r_ctx->row_id );
+                    }
+                    else
+                    {
+                        /* first reset the string and valid-flag for every column */
+                        vdcd_reset_content( r_ctx->col_defs );
+
+                        /* read the data of every column and create a string for it */
+                        VectorForEach( &(r_ctx->col_defs->cols),
+                                       false, vdm_read_cell_data, r_ctx );
+
+                        if ( r_ctx->rc == 0 )
+                        {
+                            /* prints the collected strings, in vdb-dump-formats.c */
+                            if ( !r_ctx->ctx->sum_num_elem )
+                            {
+                                r_ctx->rc = vdfo_print_row( r_ctx );
+                                if ( r_ctx->rc != 0 )
+                                    vdm_row_error( "vdfo_print_row( row#$(row_nr) ) failed", 
+                                           r_ctx->rc, r_ctx->row_id );
+                            }
+                        }
+                        r_ctx->rc = VCursorCloseRow( r_ctx->cursor );
+                        if ( r_ctx->rc != 0 )
+                            vdm_row_error( "VCursorCloseRow( row#$(row_nr) ) failed", 
+                                           r_ctx->rc, r_ctx->row_id );
+                    }
+                }
+            }
+        }
+        num_gen_iterator_destroy( iter );
+
+        if ( r_ctx->rc == 0 && r_ctx->ctx->sum_num_elem )
+        {
+            VectorForEach( &( r_ctx->col_defs->cols ), false, vdm_print_elem_sum, r_ctx );
+            if ( r_ctx->rc == 0 )
+            {
+                r_ctx->rc = vdfo_print_row( r_ctx );
+                DISP_RC( r_ctx->rc, "VTableOpenSchema() failed" );
+            }
+        }
+
+        vds_free( &(r_ctx->s_col) );
+    }
+    return r_ctx->rc;
+}
+
+
+static uint32_t vdm_extract_or_parse_columns( const p_dump_context ctx,
+                                          const VTable *my_table,
+                                          p_col_defs my_col_defs )
+{
+    uint32_t count = 0;
+    if ( ctx != NULL && my_col_defs != NULL )
+    {
+        bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+        if ( cols_unknown )
+            /* the user does not know the column-names or wants all of them */
+            count = vdcd_extract_from_table( my_col_defs, my_table );
+        else
+            /* the user knows the names of the wanted columns... */
+            count = vdcd_parse_string( my_col_defs, ctx->columns, my_table );
+
+        if ( ctx->excluded_columns != NULL )
+            vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+    }
+
+    return count;
+}
+
+
+static bool vdm_extract_or_parse_phys_columns( const p_dump_context ctx,
+                                               const VTable *my_table,
+                                               p_col_defs my_col_defs )
+{
+    bool res = false;
+    if ( ctx != NULL && my_col_defs != NULL )
+    {
+        bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+        if ( cols_unknown )
+            /* the user does not know the column-names or wants all of them */
+            res = vdcd_extract_from_phys_table( my_col_defs, my_table );
+        else
+            /* the user knows the names of the wanted columns... */
+            res = vdcd_parse_string( my_col_defs, ctx->columns, my_table );
+
+        if ( ctx->excluded_columns != NULL )
+            vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+    }
+
+    return res;
+}
+
+/*************************************************************************************
+    dump_tab_table:
+    * called by "dump_db_table()" and "dump_tab()" as a fkt-pointer
+    * opens a cursor to read
+    * checks if the user did not specify columns, or wants all columns ( "*" )
+        no columns specified ---> calls "col_defs_extract_from_table()"
+        columns specified ---> calls "col_defs_parse_string()"
+    * we end up with a list of column-definitions (name,type) in my_col_defs
+    * calls "col_defs_add_to_cursor()" to add them to the cursor
+    * opens the cursor
+    * calls "dump_rows()" to execute the dump
+    * destroys the my_col_defs - structure
+    * releases the cursor
+
+ctx       [IN] ... contains path, tablename, columns, row-range etc.
+my_table  [IN] ... open table needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_dump_opened_table( const p_dump_context ctx, const VTable *my_table )
+{
+    rc_t rc;
+
+    if ( ctx->format == df_bin )
+    {
+        rc = vdi_dump_opened_table( ctx, my_table ); /* from vdb-dump-bin.c */
+    }
+    else
+    {
+        row_context r_ctx;
+
+        rc = VTableCreateCachedCursorRead( my_table, &(r_ctx.cursor), ctx->cur_cache_size );
+        DISP_RC( rc, "VTableCreateCursorRead() failed" );
+        if ( rc == 0 )
+        {
+            r_ctx.table = my_table;
+            if ( !vdcd_init( &(r_ctx.col_defs), ctx->max_line_len ) )
+            {
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                DISP_RC( rc, "col_defs_init() failed" );
+            }
+
+            if ( rc == 0 )
+            {
+                uint32_t n = vdm_extract_or_parse_columns( ctx, my_table, r_ctx.col_defs );
+                if ( n < 1 )
+                    rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                else
+                {
+                    n = vdcd_add_to_cursor( r_ctx.col_defs, r_ctx.cursor );
+                    if ( n < 1 )
+                        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                    else
+                    {
+                        const VSchema *my_schema;
+                        rc = VTableOpenSchema( my_table, &my_schema );
+                        DISP_RC( rc, "VTableOpenSchema() failed" );
+                        if ( rc == 0 )
+                        {
+                            /* translate in special columns to numeric values to strings */
+                            vdcd_ins_trans_fkt( r_ctx.col_defs, my_schema );
+                            VSchemaRelease( my_schema );
+                        }
+
+                        rc = VCursorOpen( r_ctx.cursor );
+                        DISP_RC( rc, "VCursorOpen() failed" );
+                        if ( rc == 0 )
+                        {
+                            int64_t  first;
+                            uint64_t count;
+                            rc = VCursorIdRange( r_ctx.cursor, 0, &first, &count );
+                            DISP_RC( rc, "VCursorIdRange() failed" );
+                            if ( rc == 0 )
+                            {
+                                if ( ctx->rows == NULL )
+                                {
+                                    /* if the user did not specify a row-range, take all rows */
+                                    rc = num_gen_make_from_range( &ctx->rows, first, count );
+                                    DISP_RC( rc, "num_gen_make_from_range() failed" );
+                                }
+                                else
+                                {
+                                    /* if the user did specify a row-range, check the boundaries */
+                                    if ( count > 0 )
+                                    {
+                                        /* trim only if the row-range is not zero, otherwise
+                                           we will not get data if the user specified only static columns
+                                           because they report a row-range of zero! */
+                                        rc = num_gen_trim( ctx->rows, first, count );
+                                        DISP_RC( rc, "num_gen_trim() failed" );
+                                    }
+                                }
+
+                                if ( rc == 0 )
+                                {
+                                    if ( num_gen_empty( ctx->rows ) )
+                                    {
+                                        rc = RC( rcExe, rcDatabase, rcReading, rcRange, rcEmpty );
+                                    }
+                                    else
+                                    {
+                                        r_ctx.ctx = ctx;
+                                        rc = vdm_dump_rows( &r_ctx ); /* <--- */
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                vdcd_destroy( r_ctx.col_defs );
+            }
+            VCursorRelease( r_ctx.cursor );
+        }
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    dump_db_table:
+    * called by "dump_database()" as a fkt-pointer
+    * opens a table to read
+    * calls "dump_tab_table()" to do the dump
+    * releases the table
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_walk_sections( const VDatabase * base_db, const VDatabase ** sub_db,
+                               const VNamelist * sections, uint32_t count )
+{
+    rc_t rc = 0;
+    const VDatabase * parent_db = base_db;
+    if ( count == 0 )
+    {
+        rc = VDatabaseAddRef ( parent_db );
+        DISP_RC( rc, "VDatabaseAddRef() failed" );
+    }
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; rc == 0 && idx < count; ++idx )
+        {
+            const char * dbname;
+            rc = VNameListGet ( sections, idx, &dbname );
+            DISP_RC( rc, "VNameListGet() failed" );
+            if ( rc == 0 )
+            {
+                const VDatabase * temp;
+                rc = VDatabaseOpenDBRead ( parent_db, &temp, "%s", dbname );
+                DISP_RC( rc, "VDatabaseOpenDBRead() failed" );
+                if ( rc == 0 && idx > 0 )
+                {
+                    rc = VDatabaseRelease ( parent_db );
+                    DISP_RC( rc, "VDatabaseRelease() failed" );
+                }
+                if ( rc == 0 )
+                    parent_db = temp;
+            }
+        }
+    }
+    
+    if ( rc == 0 ) *sub_db = parent_db;
+    return rc;
+}
+
+
+static void vdm_clear_recorded_errors( void )
+{
+    rc_t rc;
+    const char * filename;
+    const char * funcname;
+    uint32_t line_nr;
+    while ( GetUnreadRCInfo ( &rc, &filename, &funcname, &line_nr ) )
+    {
+    }
+}
+
+
+static rc_t vdm_check_table_empty( const VTable * tab )
+{
+    bool empty;
+    rc_t rc = VTableIsEmpty( tab, &empty );
+    DISP_RC( rc, "VTableIsEmpty() failed" );
+    if ( rc == 0 && empty )
+    {
+        vdm_clear_recorded_errors();
+        KOutMsg( "the requested table is empty!\n" );
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcTable, rcEmpty );
+    }
+    return rc;
+}
+
+static rc_t vdm_open_table_by_path( const VDatabase * db, const char * path, const VTable ** tab )
+{
+    VNamelist * sections;
+    rc_t rc = vds_path_to_sections( path, '.', &sections );
+    DISP_RC( rc, "vds_path_to_sections() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t count;
+        rc = VNameListCount ( sections, &count );
+        DISP_RC( rc, "VNameListCount() failed" );
+        if ( rc == 0 && count > 0 )
+        {
+            const VDatabase * sub_db;
+            rc = vdm_walk_sections( db, &sub_db, sections, count - 1 );
+            if ( rc == 0 )
+            {
+                const char * tabname;
+                rc = VNameListGet ( sections, count - 1, &tabname );
+                DISP_RC( rc, "VNameListGet() failed" );
+                if ( rc == 0 )
+                {
+                    rc = VDatabaseOpenTableRead( sub_db, tab, "%s", tabname );
+                    DISP_RC( rc, "VDatabaseOpenTableRead() failed" );
+                    if ( rc == 0 )
+                    {
+                        rc = vdm_check_table_empty( *tab );
+                        if ( rc != 0 )
+                        {
+                            VTableRelease( *tab );
+                            tab = NULL;
+                        }
+                    }
+                }
+                VDatabaseRelease ( sub_db );
+            }
+        }
+        VNamelistRelease ( sections );
+    }
+    return rc;
+}
+
+static rc_t vdm_dump_opened_database( const p_dump_context ctx,
+                                      const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_dump_opened_table( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+/* ********************************************************************** */
+
+static rc_t vdm_show_tab_spread( const p_dump_context ctx,
+                                 const VTable *my_table )
+{
+    const VCursor * cursor;
+    rc_t rc = VTableCreateCachedCursorRead( my_table, &cursor, ctx->cur_cache_size );
+    DISP_RC( rc, "VTableCreateCursorRead() failed" );
+    if ( rc == 0 )
+    {
+        col_defs * cols;
+        if ( !vdcd_init( &cols, ctx->max_line_len ) )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            DISP_RC( rc, "col_defs_init() failed" );
+        }
+        if ( rc == 0 )
+        {
+            uint32_t n = vdm_extract_or_parse_columns( ctx, my_table, cols );
+            if ( n < 1 )
+                rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+            else
+            {
+                n = vdcd_add_to_cursor( cols, cursor );
+                if ( n < 1 )
+                    rc = RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                else
+                {
+                    rc = VCursorOpen( cursor );
+                    DISP_RC( rc, "VCursorOpen() failed" );
+                    if ( rc == 0 )
+                    {
+                        int64_t  first;
+                        uint64_t count;
+                        rc = VCursorIdRange( cursor, 0, &first, &count );
+                        DISP_RC( rc, "VCursorIdRange( spread ) failed" );
+                        if ( rc == 0 )
+                        {
+                            if ( ctx->rows == NULL )
+                            {
+                                rc = num_gen_make_from_range( &ctx->rows, first, count );
+                                DISP_RC( rc, "num_gen_make_from_range() failed" );
+                            }
+                            else
+                            {
+                                if ( count > 0 )
+                                {
+                                    rc = num_gen_trim( ctx->rows, first, count );
+                                    DISP_RC( rc, "num_gen_trim() failed" );
+                                }
+                            }
+                            
+                            if ( rc == 0 )
+                            {
+                                if ( num_gen_empty( ctx->rows ) )
+                                    rc = RC( rcExe, rcDatabase, rcReading, rcRange, rcEmpty );
+                                else
+                                    rc = vdcd_collect_spread( ctx->rows, cols, cursor ); /* is in vdb-dump-coldefs.c */
+                            }
+                        }
+                    }
+                }
+            }
+            vdcd_destroy( cols );
+        }
+        VCursorRelease( cursor );
+    }
+    return rc;
+}
+
+static rc_t vdm_show_db_spread( const p_dump_context ctx,
+                                const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_show_tab_spread( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+/* ********************************************************************** */
+
+/********************************************************************
+helper function, needed by "VSchemaDump()"
+********************************************************************/
+static rc_t CC vdm_schema_dump_flush( void *dst, const void *buffer, size_t bsize )
+{
+    FILE *f = dst;
+    fwrite( buffer, 1, bsize, f );
+    return 0;
+}
+
+/*************************************************************************************
+    dump_the_tab_schema:
+    * called by "dump_the_db_schema()" and "dump_table()" as a function pointer
+    * opens the schema of a table
+    * calls "VSchemaDump()" to dump this schema
+    * releases the schema
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_dump_tab_schema( const p_dump_context ctx,
+                                 const VTable *my_table )
+{
+    const VSchema * my_schema;
+    rc_t rc = VTableOpenSchema( my_table, &my_schema );
+    DISP_RC( rc, "VTableOpenSchema() failed" );
+    if ( rc == 0 )
+    {
+        if ( ctx->columns == NULL )
+        {
+            /* the user did not ask to inspect a specific object, we look for
+               the Typespec of the table... */
+            char buffer[ 4096 ];
+            rc = VTableTypespec ( my_table, buffer, sizeof buffer );
+            DISP_RC( rc, "VTableTypespec() failed" );
+            if ( rc == 0 )
+                rc = VSchemaDump( my_schema, sdmPrint, buffer,
+                                  vdm_schema_dump_flush, stdout );
+        
+        }
+        else
+        {
+            /* the user did ask to inspect a specific object */
+            rc = VSchemaDump( my_schema, sdmPrint, ctx->columns,
+                              vdm_schema_dump_flush, stdout );
+        }
+        DISP_RC( rc, "VSchemaDump() failed" );
+        VSchemaRelease( my_schema );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    dump_the_db_schema:
+    * called by "dump_database()" as a function pointer
+    * opens a table to read
+    * calls "dump_the_tab_schema()" to dump the schema of this table
+    * releases the table
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_dump_db_schema( const p_dump_context ctx,
+                                const VDatabase *my_database )
+{
+    rc_t rc = 0;
+    if ( ctx->table_defined )
+    {
+        /* the user has given a database as object, but asks to inspect a given table */
+        const VTable *my_table;
+        rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+        if ( rc == 0 )
+        {
+            rc = vdm_dump_tab_schema( ctx, my_table );
+            VTableRelease( my_table );
+        }
+    }
+    else
+    {
+        /* the user has given a database as object, but did not ask for a specific table */
+        const VSchema * my_schema;
+        rc = VDatabaseOpenSchema( my_database, &my_schema );
+        DISP_RC( rc, "VDatabaseOpenSchema() failed" );
+        if ( rc == 0 )
+        {
+            if ( ctx->columns == NULL )
+            {
+                /* the used did not ask to inspect a specifiy object, we look for
+                   the Typespec of the database... */
+                char buffer[ 4096 ];
+                rc = VDatabaseTypespec ( my_database, buffer, sizeof buffer );
+                DISP_RC( rc, "VDatabaseTypespec() failed" );
+                if ( rc == 0 )
+                    rc = VSchemaDump( my_schema, sdmPrint, buffer,
+                                      vdm_schema_dump_flush, stdout );
+            }
+            else
+            {
+                /* the user did ask to inspect a specific object */
+                rc = VSchemaDump( my_schema, sdmPrint, ctx->columns,
+                                  vdm_schema_dump_flush, stdout );
+            }
+            DISP_RC( rc, "VSchemaDump() failed" );
+            VSchemaRelease( my_schema );
+        }
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    enum_tables:
+    * called by "dump_database()" as a function pointer
+    * calls VDatabaseListTbl() to get a list of Tables
+    * loops through this list to print the names
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_enum_sub_dbs_and_tabs( const VDatabase * db, uint32_t indent );
+
+static rc_t vdm_report_tab_or_db( const VDatabase * db, const KNamelist * list,
+                                  const char * prefix, uint32_t indent )
+{
+    uint32_t n;
+    rc_t rc = KNamelistCount( list, &n );
+    DISP_RC( rc, "KNamelistCount() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < n && rc == 0; ++i )
+        {
+            const char * entry;
+            rc = KNamelistGet( list, i, &entry );
+            DISP_RC( rc, "KNamelistGet() failed" );
+            if ( rc == 0 )
+            {
+                rc = KOutMsg( "%*s : %s\n", indent + 3, prefix, entry );
+                if ( rc == 0 && db != NULL )
+                {
+                    const VDatabase * sub_db;
+                    rc = VDatabaseOpenDBRead ( db, &sub_db, entry );
+                    DISP_RC( rc, "VDatabaseOpenDBRead() failed" );
+                    if ( rc == 0 )
+                    {
+                        rc = vdm_enum_sub_dbs_and_tabs( sub_db, indent + 3 ); /* recursion here... */
+                        VDatabaseRelease( sub_db );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t vdm_enum_tabs_of_db( const VDatabase * db, uint32_t indent )
+{
+    KNamelist *tbl_names;
+    rc_t rc = VDatabaseListTbl( db, &tbl_names );
+    if ( rc == 0 )
+    {
+        rc = vdm_report_tab_or_db( NULL, tbl_names, "tbl", indent );
+        KNamelistRelease( tbl_names );
+    }
+    else
+    {
+        rc = 0;
+    }
+    return rc;
+}
+
+static rc_t vdm_enum_sub_dbs_of_db( const VDatabase * db, uint32_t indent )
+{
+    KNamelist *db_names;
+    rc_t rc = VDatabaseListDB( db, &db_names );
+    if ( rc == 0 )
+    {
+        rc = vdm_report_tab_or_db( db, db_names, "db ", indent );
+        KNamelistRelease( db_names );
+    }
+    else
+    {
+        rc = 0;
+    }
+    return rc;
+}
+
+static rc_t vdm_enum_sub_dbs_and_tabs( const VDatabase * db, uint32_t indent )
+{
+    rc_t rc = vdm_enum_sub_dbs_of_db( db, indent );
+    if ( rc == 0 )
+        rc = vdm_enum_tabs_of_db( db, indent );
+    return rc;
+}
+
+static rc_t vdm_enum_tables( const p_dump_context ctx, const VDatabase * db )
+{
+    rc_t rc = KOutMsg( "enumerating the tables of database '%s'\n", ctx->path );
+    if ( rc == 0 )
+        rc = vdm_enum_sub_dbs_and_tabs( db, 0 );
+    return rc;
+}
+
+
+typedef struct col_info_context
+{
+    p_dump_context ctx;
+    const VSchema *my_schema;
+    const VTable *my_table;
+    const KTable *my_ktable;
+} col_info_context;
+typedef struct col_info_context* p_col_info_context;
+
+static rc_t vdm_print_column_datatypes( const p_col_def col_def,
+                                        const p_col_info_context ci )
+{
+    KNamelist *names;
+    uint32_t dflt_idx;
+
+    rc_t rc = VTableColumnDatatypes( ci->my_table, col_def->name, &dflt_idx, &names );
+    DISP_RC( rc, "VTableColumnDatatypes() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t n;
+        rc = KNamelistCount( names, &n );
+        DISP_RC( rc, "KNamelistCount() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                const char *type_name;
+                rc = KNamelistGet( names, i, &type_name );
+                DISP_RC( rc, "KNamelistGet() failed" );
+                if ( rc == 0 )
+                {
+                    if ( dflt_idx == i )
+                        rc = KOutMsg( "%20s.type[%d] = %s (dflt)\n", col_def->name, i, type_name );
+                    else
+                        rc = KOutMsg( "%20s.type[%d] = %s\n", col_def->name, i, type_name );
+                }
+            }
+        }
+        rc = KNamelistRelease( names );
+        DISP_RC( rc, "KNamelistRelease() failed" );
+    }
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t vdm_show_row_blobbing( const p_col_def col_def,
+                                   const p_col_info_context ci )
+{
+    const KColumn * kcol;
+    rc_t rc = KTableOpenColumnRead( ci->my_ktable, &kcol, "%s", col_def->name );
+    if ( rc != 0 )
+        return KOutMsg( "'%s' is not a physical column\n", col_def->name );
+    else
+        rc = KOutMsg( "\nCOLUMN '%s':\n", col_def->name );
+
+    if ( rc == 0 )
+    {
+        int64_t first;
+        uint64_t count;
+        rc = KColumnIdRange( kcol, &first, &count );
+        DISP_RC( rc, "KColumnIdRange() failed" );
+        if ( rc == 0 )
+        {
+            int64_t last = first + count - 1;
+            rc = KOutMsg( "range: %,ld ... %,ld\n", first, last );
+            if ( rc == 0 )
+            {
+                int64_t id = first;
+                while ( id < last && rc == 0 )
+                {
+                    const KColumnBlob *blob;
+                    rc = KColumnOpenBlobRead( kcol, &blob, id );
+                    DISP_RC( rc, "KColumnOpenBlobRead() failed" );
+                    if ( rc == 0 )
+                    {
+                        int64_t first_id_in_blob;
+                        uint32_t ids_in_blob;
+                        rc = KColumnBlobIdRange( blob, &first_id_in_blob, &ids_in_blob );
+                        DISP_RC( rc, "KColumnBlobIdRange() failed" );
+                        if ( rc == 0 )
+                        {
+                            int64_t last_id_in_blob = first_id_in_blob + ids_in_blob - 1;
+                            char buffer[ 8 ];
+                            size_t num_read, remaining;
+                            rc = KColumnBlobRead ( blob, 0, &buffer, 0, &num_read, &remaining );
+                            DISP_RC( rc, "KColumnBlobRead() failed" );
+                            if ( rc == 0 )
+                            {
+                                rc = KOutMsg( "blob[ %,ld ... %,ld] size = %,zu\n", first_id_in_blob, last_id_in_blob, remaining + num_read );
+                            }
+                            id = last_id_in_blob + 1;
+                        }
+                        KColumnBlobRelease( blob );
+                    }
+                }
+            }
+        }
+        KColumnRelease( kcol );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    print_column_info:
+    * get's called from "enum_tab_columns()" via VectorForEach
+    * prints: table-name, col-idx, bits, dimension, domain and name
+      for every column
+
+item  [IN] ... pointer to a column-definition-struct ( from "vdb-dump-coldefs.h" )
+data  [IN] ... pointer to dump-context ( in this case to have a line-idx )
+*************************************************************************************/
+static rc_t vdm_print_column_info( const p_col_def col_def, p_col_info_context ci_ctx )
+{
+    rc_t rc = 0;
+
+    if ( ci_ctx->ctx->show_blobbing )
+        rc = vdm_show_row_blobbing( col_def, ci_ctx );
+    else
+    {
+        /* print_col_info is in vdb-dump-helper.c */
+        rc = vdh_print_col_info( ci_ctx->ctx , col_def, ci_ctx->my_schema );
+
+        /* to test VTableColumnDatatypes() */
+        if ( rc == 0  && ci_ctx->ctx->column_enum_requested )
+            rc = vdm_print_column_datatypes( col_def, ci_ctx );
+    }
+    return rc;
+}
+
+
+static rc_t vdm_enum_phys_columns( const VTable *my_table )
+{
+    rc_t rc = KOutMsg( "physical columns:\n" );
+    if ( rc == 0 )
+    {
+        KNamelist *phys;
+        rc = VTableListPhysColumns( my_table, &phys );
+        DISP_RC( rc, "VTableListPhysColumns() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount( phys, &count );
+            DISP_RC( rc, "KNamelistCount( physical columns ) failed" );
+            if ( rc == 0 )
+            {
+                if ( count > 0 )
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char * name;
+                        rc = KNamelistGet( phys, idx, &name );
+                        DISP_RC( rc, "KNamelistGet( physical columns ) failed" );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "[%.02d] = %s\n", idx, name );
+                    }
+                }
+                else
+                {
+                    rc = KOutMsg( "... list is empty!\n" );
+                }
+            }
+            KNamelistRelease( phys );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdm_enum_readable_columns( const VTable *my_table )
+{
+    rc_t rc = KOutMsg( "readable columns:\n" );
+    if ( rc == 0 )
+    {
+        KNamelist *readable;
+        rc = VTableListReadableColumns( my_table, &readable );
+        DISP_RC( rc, "VTableListReadableColumns() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount( readable, &count );
+            DISP_RC( rc, "KNamelistCount( readable columns ) failed" );
+            if ( rc == 0 )
+            {
+                if ( count > 0 )
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char * name;
+                        rc = KNamelistGet( readable, idx, &name );
+                        DISP_RC( rc, "KNamelistGet( readable columns ) failed" );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "[%.02d] = %s\n", idx, name );
+                    }
+                }
+                else
+                {
+                    rc = KOutMsg( "... list is empty!\n" );
+                }
+            }
+            KNamelistRelease( readable );
+        }
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    enum_tab_columns:
+    * called by "enum_db_columns()" and "dump_table()" as fkt-pointer
+    * initializes a column-definitions-structure
+    * calls col_defs_extract_from_table() to enumerate all columns in the table
+    ( both functions are in "vdb-dump-coldefs.h" )
+    * loops through the columns and prints it's information
+    * releases the column-definitions-structure
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_enum_tab_columns( const p_dump_context ctx, const VTable *my_table )
+{
+    rc_t rc = 0;
+    if ( ctx->enum_phys )
+    {
+        rc = vdm_enum_phys_columns( my_table );
+    }
+    else if ( ctx->enum_readable )
+    {
+        rc = vdm_enum_readable_columns( my_table );
+    }
+    else
+    {
+        col_defs *my_col_defs;
+        if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            DISP_RC( rc, "col_defs_init() failed" );
+        }
+
+        if ( rc == 0 )
+        {
+            col_info_context ci_ctx;
+            bool extracted;
+
+            ci_ctx.ctx = ctx;
+            ci_ctx.my_table = my_table;
+            if ( ctx->show_blobbing )
+            {
+                extracted = vdm_extract_or_parse_phys_columns( ctx, my_table, my_col_defs );
+                rc = VTableOpenKTableRead( my_table, &ci_ctx.my_ktable );
+                DISP_RC( rc, "VTableOpenKTableRead() failed" );
+            }
+            else
+            {
+                extracted = vdm_extract_or_parse_columns( ctx, my_table, my_col_defs );
+                ci_ctx.my_ktable = NULL;
+            }
+
+            if ( extracted && rc == 0 )
+            {
+                rc = VTableOpenSchema( my_table, &(ci_ctx.my_schema) );
+                DISP_RC( rc, "VTableOpenSchema() failed" );
+                if ( rc == 0 )
+                {
+                    uint32_t idx, count;
+
+                    ctx->generic_idx = 1;
+                    count = VectorLength( &(my_col_defs->cols) );
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        col_def *col = ( col_def * )VectorGet( &(my_col_defs->cols), idx );
+                        if ( col != 0 )
+                        {
+                            rc = vdm_print_column_info( col, &ci_ctx );
+                        }
+                    }
+                    VSchemaRelease( ci_ctx.my_schema );
+                }
+                if ( ci_ctx.my_ktable != NULL )
+                    KTableRelease( ci_ctx.my_ktable );
+            }
+            else
+            {
+                rc = KOutMsg( "error in col_defs_extract_from_table\n" );
+            }
+            vdcd_destroy( my_col_defs );
+        }
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    enum_db_columns:
+    * called by "dump_database()" as fkt-pointer
+    * opens the table
+    * calls enum_tab_columns()
+    * releases table
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_enum_db_columns( const p_dump_context ctx, const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );    
+    if ( rc == 0 )
+    {
+        rc = vdm_enum_tab_columns( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+static rc_t vdm_print_tab_id_range( const p_dump_context ctx, const VTable *my_table )
+{
+    const VCursor *my_cursor;
+    rc_t rc = VTableCreateCursorRead( my_table, &my_cursor );
+    DISP_RC( rc, "VTableCreateCursorRead() failed" );
+    if ( rc == 0 )
+    {
+        col_defs *my_col_defs;
+
+        if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            DISP_RC( rc, "col_defs_init() failed" );
+        }
+
+        if ( rc == 0 )
+        {
+            if ( vdm_extract_or_parse_columns( ctx, my_table, my_col_defs ) )
+            {
+                if ( vdcd_add_to_cursor( my_col_defs, my_cursor ) )
+                {
+                    rc = VCursorOpen( my_cursor );
+                    DISP_RC( rc, "VCursorOpen() failed" );
+                    if ( rc == 0 )
+                    {
+                        int64_t  first;
+                        uint64_t count;
+
+                        uint32_t idx = 0;
+                        
+                        /* calling with idx = 0 means: let the cursor find out the min/max values of
+                           all open columns...
+                           
+                        vdcd_get_first_none_static_column_idx( my_col_defs, my_cursor, &idx );
+                        */
+                        
+                        rc = VCursorIdRange( my_cursor, idx, &first, &count );
+                        DISP_RC( rc, "VCursorIdRange() failed" );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "id-range: first-row = %,ld, row-count = %,ld\n", first, count );
+                    }
+                }
+            }
+            vdcd_destroy( my_col_defs );
+        }
+        VCursorRelease( my_cursor );
+    }
+    return rc;
+}
+
+/*************************************************************************************
+    print_db_id_range:
+    * called by "dump_database()" as fkt-pointer
+    * opens the table
+    * calls print_tab_id_range()
+    * releases table
+
+ctx         [IN] ... contains path, tablename, columns, row-range etc.
+my_database [IN] ... open database needed for vdb-calls
+*************************************************************************************/
+static rc_t vdm_print_db_id_range( const p_dump_context ctx, const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_print_tab_id_range( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+
+/* ************************************************************************************ */
+
+static rc_t vdm_enum_index( const KTable * my_ktable, uint32_t idx_nr, const char * idx_name )
+{
+    rc_t rc = KOutMsg( "idx #%u: %s", idx_nr + 1, idx_name );
+    if ( rc == 0 )
+    {
+        const KIndex * my_idx;
+        rc = KTableOpenIndexRead ( my_ktable, &my_idx, "%s", idx_name );
+        if ( rc != 0 )
+            rc = KOutMsg( " (cannot open)" );
+        else
+        {
+            uint32_t idx_version;
+            rc = KIndexVersion ( my_idx, &idx_version );
+            if ( rc != 0 )
+                rc = KOutMsg( " V?.?.?" );
+            else
+                rc = KOutMsg( " V%V", idx_version );
+
+            if ( rc == 0 )
+            {
+                KIdxType idx_type;
+                rc = KIndexType ( my_idx, &idx_type );
+                if ( rc != 0 )
+                    rc = KOutMsg( " type = ?" );
+                else
+                {
+                    switch ( idx_type &~ kitProj )
+                    {
+                        case kitText : rc = KOutMsg( " type = Text" ); break;
+                        case kitU64  : rc = KOutMsg( " type = U64" ); break;
+                        default       : rc = KOutMsg( " type = unknown" ); break;
+                    }
+                    if ( rc == 0 && ( ( idx_type & kitProj ) == kitProj ) )
+                        rc = KOutMsg( " reverse" );
+                }
+            }
+            
+            if ( rc == 0 )
+            {
+                bool locked = KIndexLocked ( my_idx );
+                if ( locked )
+                    rc = KOutMsg( " locked" );
+            }
+            KIndexRelease( my_idx );
+        }
+    }
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t vdm_enum_tab_index( const p_dump_context ctx, const VTable *my_table )
+{
+    const KTable * my_ktable;
+    rc_t rc = VTableOpenKTableRead( my_table, &my_ktable );
+    DISP_RC( rc, "VTableOpenKTableRead() failed" );
+    if ( rc == 0 )
+    {
+        KNamelist *idx_names;
+        rc = KTableListIdx ( my_ktable, &idx_names );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount( idx_names, &count );
+            if ( rc == 0 )
+            {
+                uint32_t i;
+                for ( i = 0; i < count && rc == 0; ++i )
+                {
+                    const char * idx_name = NULL;
+                    rc = KNamelistGet( idx_names, i, &idx_name );
+                    if ( rc == 0 && idx_name != NULL )
+                        rc = vdm_enum_index( my_ktable, i, idx_name );
+                }
+            }
+            KNamelistRelease( idx_names );
+        }
+        else
+            rc = KOutMsg( "no index available\n" );
+        KTableRelease( my_ktable );
+    }
+    return rc;
+}
+
+static rc_t vdm_enum_db_index( const p_dump_context ctx, const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_enum_tab_index( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+/* ************************************************************************************ */
+
+static rc_t vdm_range_tab_index( const p_dump_context ctx, const VTable *my_table )
+{
+    const KTable * my_ktable;
+    rc_t rc = VTableOpenKTableRead( my_table, &my_ktable );
+    if ( rc != 0 )
+        ErrMsg( "VTableOpenKTableRead() -> %R", rc );
+    else
+    {
+        const KIndex * my_kindex;
+        rc = KTableOpenIndexRead ( my_ktable, &my_kindex, "%s", ctx->idx_range );
+        if ( rc != 0 )
+            ErrMsg( "KTableOpenIndexRead() -> %R", rc );
+        else
+        {
+            int64_t start;
+            uint64_t count;
+            rc_t rc2 = 0;
+            for ( start = 1; rc2 == 0 && rc == 0; start += count )
+            {
+                size_t key_size;
+                char key [ 4096 ];
+                rc2 = KIndexProjectText ( my_kindex, start, &start, &count,
+                                         key, sizeof key, &key_size );
+                if ( rc2 == 0 )
+                    rc = KOutMsg( "%.*s : %lu ... %lu\n", ( int )key_size, key, start, start + count - 1 );
+            }
+            KIndexRelease( my_kindex );
+        }
+        KTableRelease( my_ktable );
+    }
+    return rc;
+}
+
+
+static rc_t vdm_range_db_index( const p_dump_context ctx, const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_range_tab_index( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+/* ************************************************************************************ */
+
+static rc_t vdm_show_tab_spotgroups( const p_dump_context ctx, const VTable *my_table )
+{
+    const KMetadata * meta = NULL;
+    rc_t rc = VTableOpenMetadataRead( my_table, &meta );
+    if ( rc != 0 )
+        ErrMsg( "VTableOpenMetadataRead() -> %R", rc );
+    else
+    {
+        const KMDataNode * spot_groups_node;
+        rc = KMetadataOpenNodeRead( meta, &spot_groups_node, "STATS/SPOT_GROUP" );
+        if ( rc != 0 )
+            ErrMsg( "KMetadataOpenNodeRead( STATS/SPOT_GROUP ) -> %R", rc );
+        else
+        {
+            KNamelist * spot_groups;
+            rc = KMDataNodeListChildren( spot_groups_node, &spot_groups );
+            if ( rc != 0 )
+                ErrMsg( "KMDataNodeListChildren() -> %R", rc );
+            else
+            {
+                uint32_t count;
+                rc = KNamelistCount( spot_groups, &count );
+                if ( rc != 0 )
+                    ErrMsg( "KNamelistCount() -> %R", rc );
+                else if ( count > 0 )
+                {
+                    uint32_t i;
+                    for ( i = 0; i < count && rc == 0; ++i )
+                    {
+                        const char * name = NULL;
+                        rc = KNamelistGet( spot_groups, i, &name );
+                        if ( rc != 0 )
+                            ErrMsg( "KNamelistCount( %d) -> %R", i, rc );
+                        else if ( name != NULL )
+                        {
+                            const KMDataNode * spot_count_node;
+                            rc = KMDataNodeOpenNodeRead( spot_groups_node, &spot_count_node, "%s/SPOT_COUNT", name );
+                            if ( rc != 0 )
+                                ErrMsg( "KMDataNodeOpenNodeRead() -> %R", rc );
+                            else
+                            {
+                                uint64_t spot_count = 0;
+                                rc = KMDataNodeReadAsU64( spot_count_node, &spot_count );
+                                if ( rc != 0 )
+                                {
+                                    ErrMsg( "KMDataNodeReadAsU64() -> %R", rc );
+                                    vdm_clear_recorded_errors();
+                                }
+                                else
+                                {
+                                    if ( spot_count > 0 )
+                                    {
+                                        const KMDataNode * spot_group_node;
+                                        rc = KMDataNodeOpenNodeRead( spot_groups_node, &spot_group_node, name );
+                                        if ( rc != 0 )
+                                            ErrMsg( "KMDataNodeOpenNodeRead( '%s' ) -> %R", name, rc );
+                                        else
+                                        {
+                                            char name_attr[ 2048 ];
+                                            size_t num_writ;
+                                            rc = KMDataNodeReadAttr( spot_group_node, "name", name_attr, sizeof name_attr, &num_writ );
+                                            rc = KOutMsg( "%s\t%,lu\n", rc == 0 ? name_attr : name, spot_count );
+                                            KMDataNodeRelease( spot_group_node );                
+                                        }
+
+                                    }
+                                }
+                                KMDataNodeRelease( spot_count_node );
+                            }
+                        }
+                    }
+                }
+                KNamelistRelease( spot_groups );
+            }
+            KMDataNodeRelease( spot_groups_node );
+        }
+        KMetadataRelease ( meta );
+    }
+    return rc;
+}
+
+static rc_t vdm_show_db_spotgroups( const p_dump_context ctx, const VDatabase *my_database )
+{
+    const VTable *my_table;
+    rc_t rc = vdm_open_table_by_path( my_database, ctx->table, &my_table );
+    if ( rc == 0 )
+    {
+        rc = vdm_show_tab_spotgroups( ctx, my_table );
+        VTableRelease( my_table );
+    }
+    return rc;
+}
+
+
+typedef rc_t (*db_tab_t)( const p_dump_context ctx, const VTable *a_tab );
+
+/*************************************************************************************
+    dump_tab_fkt:
+    * called by "dump_table()"
+    * if the user has provided the name of a schema-file:
+        - make a schema from manager
+        - parse the schema-file
+        - use this schema to open the database
+    * if we do not have a schema-file, use NULL ( that means the internal tab-schema )
+    * open the table for read
+    * call the function-pointer, with context and table
+    * release table and schema
+
+ctx    [IN] ... contains source-path, tablename, columns and row-range as ascii-text
+db_fkt [IN] ... function to be called if directory, manager and database are open
+*************************************************************************************/
+static rc_t vdm_dump_tab_fkt( const p_dump_context ctx,
+                              const VDBManager *my_manager,
+                              const db_tab_t tab_fkt )
+{
+    const VTable *my_table;
+    VSchema *my_schema = NULL;
+    rc_t rc;
+
+    vdh_parse_schema( my_manager, &my_schema, &(ctx->schema_list), true /*ctx->force_sra_schema*/ );
+
+    rc = VDBManagerOpenTableRead( my_manager, &my_table, my_schema, "%s", ctx->path );
+    if ( rc != 0 )
+        ErrMsg( "VDBManagerOpenTableRead( '%R' ) -> %R", ctx->path, rc );
+    else
+    {
+        rc = vdm_check_table_empty( my_table );
+        if ( rc == 0 )
+            rc = tab_fkt( ctx, my_table ); /* fkt-pointer is called */
+        VTableRelease( my_table );
+    }
+
+    if ( my_schema != NULL )
+    {
+        rc = VSchemaRelease( my_schema );
+        if ( rc != 0 )
+            ErrMsg( "VSchemaRelease() -> %R", rc );
+    }
+    return rc;
+}
+
+
+static bool enum_col_request( const p_dump_context ctx )
+{
+    return ( ctx->column_enum_requested || ctx->column_enum_short || 
+             ctx->show_blobbing || ctx->enum_phys || ctx->enum_readable );
+}
+
+
+static const char * SEQUENCE_TAB = "SEQUENCE";
+
+static bool is_sequence( const char * tbl )
+{
+    return string_cmp ( tbl, string_size( tbl ),
+                         SEQUENCE_TAB, string_size( SEQUENCE_TAB ), 0xFFFF ) == 0;
+}
+
+/***************************************************************************
+    dump_table:
+    * called by "dump_main()" to handle a table
+    * calls the dump_tab_fkt with 3 different fkt-pointers as argument
+      depending on what was selected at the commandline
+
+ctx        [IN] ... contains path, tablename, columns, row-range etc.
+my_manager [IN] ... open manager needed for vdb-calls
+***************************************************************************/
+static rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
+{
+    rc_t rc;
+
+    bool table_valid = ( ctx->table == NULL )||( is_sequence( ctx->table ) );
+    if ( !table_valid )
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+        ErrMsg( "Table '%s' not found-> %R", ctx->table, rc );
+    }
+    else
+    {
+        if ( ctx->schema_dump_requested )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_dump_tab_schema );
+        }
+        else if ( ctx->table_enum_requested )
+        {
+            KOutMsg( "cannot enum tables of a table-object\n" );
+            vdm_clear_recorded_errors();
+            rc = 0;
+        }
+        else if ( enum_col_request( ctx ) )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_enum_tab_columns );
+        }
+        else if ( ctx->id_range_requested )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_print_tab_id_range );
+        }
+        else if ( ctx->idx_enum_requested )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_enum_tab_index );
+        }
+        else if ( ctx->idx_range_requested )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_range_tab_index );
+        }
+        else if ( ctx->show_spotgroups )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_show_tab_spotgroups );
+        }
+        else if ( ctx->show_spread )
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_show_tab_spread );
+        }
+        else
+        {
+            rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_dump_opened_table );
+        }
+    }
+    return rc;
+}
+
+typedef rc_t (*db_fkt_t)( const p_dump_context ctx, const VDatabase *a_db );
+
+/*************************************************************************************
+    dump_db_fkt:
+    * called by "dump_database()" to handle a database
+    * if the user has provided the name of a schema-file:
+        - make a schema from manager
+        - parse the schema-file
+        - use this schema to open the database
+    * if we do not have a schema-file, use NULL ( that means the internal db-schema )
+    * open the database for read
+    * if the user has not given a table-name to dump:
+        - take the first table found in the database
+    * if we now have a table-name
+        - call the function-pointer, with context and database
+    * if we do not have a table-name
+        - request display of the usage-message
+    * release database and schema
+
+ctx    [IN] ... contains source-path, tablename, columns and row-range as ascii-text
+db_fkt [IN] ... function to be called if directory, manager and database are open
+*************************************************************************************/
+static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
+                             const VDBManager * mgr,
+                             const db_fkt_t db_fkt )
+{
+    const VDatabase *db;
+    VSchema *schema = NULL;
+    rc_t rc;
+
+    vdh_parse_schema( mgr, &schema, &(ctx->schema_list), true /* ctx->force_sra_schema */ );
+
+    rc = VDBManagerOpenDBRead( mgr, &db, schema, "%s", ctx->path );
+    if ( rc != 0 )
+        ErrMsg( "VDBManagerOpenDBRead( '%s' ) -> %R", ctx->path, rc );
+    else
+    {
+        KNamelist *tbl_names;
+        rc = VDatabaseListTbl( db, &tbl_names );
+        if ( rc != 0 )
+            ErrMsg( "VDatabaseListTbl( '%s' ) -> %R", ctx->path, rc );
+        else
+        {
+            if ( ctx->table == NULL )
+            {
+                /* the user DID NOT not specify a table: by default assume the SEQUENCE-table */
+                bool table_found = vdh_take_this_table_from_list( ctx, tbl_names, "SEQUENCE" );
+                /* if there is no SEQUENCE-table, just pick the first table available... */
+                if ( !table_found )
+                    vdh_take_1st_table_from_db( ctx, tbl_names );
+            }
+            else
+            {
+                /* the user DID specify a table: check if the database has a table with this name,
+                   if not try with a sub-string */
+                String value;
+                StringInitCString( &value, ctx->table );
+                if ( !list_contains_value( tbl_names, &value ) )
+                    vdh_take_this_table_from_list( ctx, tbl_names, ctx->table );
+            }
+            
+            if ( ctx->table != NULL || ctx->table_enum_requested )
+            {
+                rc = db_fkt( ctx, db ); /* fkt-pointer is called */
+            }
+            else
+            {
+                LOGMSG( klogInfo, "opened as vdb-database, but no table found" );
+                ctx->usage_requested = true;
+            }
+            rc = KNamelistRelease( tbl_names );
+            if ( rc != 0 )
+                ErrMsg( "KNamelistRelease() -> %R", rc );
+        }
+        rc = VDatabaseRelease( db );
+        if ( rc != 0 )
+            ErrMsg( "VDatabaseRelease() -> %R", rc );
+    }
+
+    if ( schema != NULL )
+    {
+        rc = VSchemaRelease( schema );
+        if ( rc != 0 )
+            ErrMsg( "VSchemaRelease() -> %R", rc );
+    }
+    
+    return rc;
+}
+
+
+/***************************************************************************
+    dump_database:
+    * called by "dump_main()"
+    * calls the dump_db_fkt with 4 different fkt-pointers as argument
+      depending on what was selected at the commandline
+
+ctx        [IN] ... contains path, tablename, columns, row-range etc.
+my_manager [IN] ... open manager needed for vdb-calls
+***************************************************************************/
+static rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
+{
+    rc_t rc;
+
+    if ( ctx->schema_dump_requested )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_dump_db_schema );
+    }
+    else if ( ctx->table_enum_requested )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_tables );
+    }
+    else if ( enum_col_request( ctx ) )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_db_columns );
+    }
+    else if ( ctx->id_range_requested )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_print_db_id_range );
+    }
+    else if ( ctx->idx_enum_requested )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_db_index );
+    }
+    else if ( ctx->idx_range_requested )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_range_db_index );
+    }
+    else if ( ctx->show_spotgroups )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_show_db_spotgroups );
+    }
+    else if ( ctx->show_spread )
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_show_db_spread );
+    }
+    else
+    {
+        rc = vdm_dump_db_fkt( ctx, my_manager, vdm_dump_opened_database );
+    }
+
+    return rc;
+}
+
+
+static rc_t vdm_print_objver( const p_dump_context ctx, const VDBManager *mgr )
+{
+    ver_t version;
+    rc_t rc = VDBManagerGetObjVersion ( mgr, &version, ctx->path );
+    if ( rc != 0 )
+        ErrMsg( "VDBManagerGetObjVersion( '%s' ) -> %R", ctx->path, rc );
+    else
+        rc = KOutMsg( "%V\n", version );
+    return rc;
+}
+
+static rc_t vdm_print_objts ( const p_dump_context ctx, const VDBManager *mgr )
+{
+    KTime_t timestamp;
+    rc_t rc = VDBManagerGetObjModDate ( mgr, &timestamp, ctx->path );
+    if ( rc != 0 )
+        ErrMsg( "VDBManagerGetObjModDate( '%s' ) -> %R", ctx->path, rc  );
+    if ( rc == 0 )
+    {
+        KTime kt;
+        KTimeGlobal ( & kt, timestamp );
+        rc = KOutMsg ( "%04u-%02u-%02uT"
+                       "%02u:%02u:%02uZ"
+                       "\n",
+                       kt . year,
+                       kt . month,
+                       kt . day,
+                       kt . hour,
+                       kt . minute,
+                       kt . second
+            );
+    }
+    return rc;
+}
+
+static void vdm_print_objtype( const VDBManager *mgr, const char * acc_or_path )
+{
+    int path_type = ( VDBManagerPathType ( mgr, "%s", acc_or_path ) & ~ kptAlias );
+    /* types defined in <kdb/manager.h> */
+    switch ( path_type )
+    {
+    case kptDatabase      :   KOutMsg( "Database\n" ); break;
+    case kptTable         :   KOutMsg( "Table\n" ); break;
+    case kptPrereleaseTbl :   KOutMsg( "Prerelease Table\n" ); break;
+    case kptColumn        :   KOutMsg( "Column\n" ); break;
+    case kptIndex         :   KOutMsg( "Index\n" ); break;
+    case kptNotFound      :   KOutMsg( "not found\n" ); break;
+    case kptBadPath       :   KOutMsg( "bad path\n" ); break;
+    case kptFile          :   KOutMsg( "File\n" ); break;
+    case kptDir           :   KOutMsg( "Dir\n" ); break;
+    case kptCharDev       :   KOutMsg( "CharDev\n" ); break;
+    case kptBlockDev      :   KOutMsg( "BlockDev\n" ); break;
+    case kptFIFO          :   KOutMsg( "FIFO\n" ); break;
+    case kptZombieFile    :   KOutMsg( "ZombieFile\n" ); break;
+    case kptDataset       :   KOutMsg( "Dataset\n" ); break;
+    case kptDatatype      :   KOutMsg( "Datatype\n" ); break;
+    default               :   KOutMsg( "value = '%i'\n", path_type ); break;
+    }
+}
+
+
+static rc_t vdb_main_one_obj_by_pathtype( const p_dump_context ctx,
+                                          const VDBManager *mgr )
+{
+    rc_t rc;
+    int path_type = ( VDBManagerPathType ( mgr, "%s", ctx->path ) & ~ kptAlias );
+    /* types defined in <kdb/manager.h> */
+    switch ( path_type )
+    {
+    case kptDatabase    :   rc = vdm_dump_database( ctx, mgr ); break;
+
+    case kptPrereleaseTbl:
+    case kptTable       :   rc = vdm_dump_table( ctx, mgr ); break;
+
+    default             :   rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                                "p=%s", ctx->path ) );
+                            if ( vdco_schema_count( ctx ) == 0 )
+                            {
+                                LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+                            }
+                            break;
+    }
+    return rc;
+}
+
+
+static rc_t vdb_main_one_obj_by_probing( const p_dump_context ctx,
+                                         const VDBManager *mgr )
+{
+    rc_t rc;
+    if ( vdh_is_path_database( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdm_dump_database( ctx, mgr );
+    }
+    else if ( vdh_is_path_table( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdm_dump_table( ctx, mgr );
+    }
+    else
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                 "p=%s", ctx->path ) );
+        if ( vdco_schema_count( ctx ) == 0 )
+        {
+            LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t vdm_main_one_obj( const p_dump_context ctx,
+                        const VDBManager *mgr,
+                        const char * acc_or_path )
+{
+    rc_t rc = 0;
+
+    ctx->path = string_dup_measure ( acc_or_path, NULL );
+
+    if ( ctx->objver_requested )
+    {
+        rc = vdm_print_objver( ctx, mgr );
+    }
+    else if ( ctx->objts_requested )
+    {
+        rc = vdm_print_objts ( ctx, mgr );
+    }
+    else if ( ctx->objtype_requested )
+    {
+        vdm_print_objtype( mgr, acc_or_path );
+    }
+    else
+    {
+        if ( USE_PATHTYPE_TO_DETECT_DB_OR_TAB ) /* in vdb-dump-context.h */
+        {
+            rc = vdb_main_one_obj_by_pathtype( ctx, mgr );
+        }
+        else
+        {
+            rc = vdb_main_one_obj_by_probing( ctx, mgr );
+        }
+    }
+
+    free( (char*)ctx->path );
+    ctx->path = NULL;
+
+    return rc;
+}
+
+
+/***************************************************************************
+    dump_main:
+    * called by "KMain()"
+    * make the "native directory"
+    * make a vdb-manager for read
+      all subsequent dump-functions will use this manager...
+    * show the manager-version, if it was requested from the command-line
+    * check if the given path is database-path ( by trying to open it )
+      if it is one: continue wit dump_database()
+    * check if the given path is table-path ( by trying to open it )
+      if it is one: continue wit dump_table()
+    * release manager and directory
+
+ctx        [IN] ... contains path, tablename, columns, row-range etc.
+***************************************************************************/
+static rc_t vdm_main( const p_dump_context ctx, Args * args )
+{
+    KDirectory *dir;
+    rc_t rc1, rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+        ErrMsg( "KDirectoryNativeDir() -> %R", rc );
+    else
+    {
+        const VDBManager *mgr;
+        rc = VDBManagerMakeRead( &mgr, dir );
+        if ( rc != 0 )
+            ErrMsg( "VDBManagerMakeRead() -> %R", rc );
+        else
+        {
+            if ( ctx->disable_multithreading )
+            {
+                rc = VDBManagerDisablePagemapThread( mgr );
+                if ( rc != 0 )
+                {
+                    ErrMsg( "VDBManagerDisablePagemapThread() -> %R", rc );
+                    rc = 0;
+                }
+            }
+            
+            /* show manager is independend form db or tab */
+            if ( ctx->version_requested )
+                rc = vdh_show_manager_version( mgr );
+            else
+            {
+                uint32_t count;
+                rc = ArgsParamCount( args, &count );
+                if ( rc != 0 )
+                    ErrMsg( "ArgsParamCount() -> %R", rc );
+                else
+                {
+                    if ( count > 0 )
+                    {
+                        uint32_t idx;
+                        for ( idx = 0; idx < count && rc == 0; ++idx )
+                        {
+                            const char *value = NULL;
+                            rc = ArgsParamValue( args, idx, (const void **)&value );
+                            if ( rc != 0 )
+                                ErrMsg( "ArgsParamValue() -> %R", rc );
+                            else
+                            {
+                                if ( ctx->print_info )
+                                    rc = vdb_info( &(ctx->schema_list), ctx->format, mgr,
+                                                   value, ctx->rows );   /* in vdb_info.c */
+                                else switch( ctx->format )
+                                {
+                                    case df_fastq  : ;
+                                    case df_fastq1 : ;                                    
+                                    case df_fasta  : ;
+                                    case df_fasta1 : ;
+                                    case df_fasta2 : ;
+                                    case df_qual   : ;                                    
+                                    case df_qual1  : vdf_main( ctx, mgr, value ); break; /* in vdb-dump-fastq.c */
+                                    default : rc = vdm_main_one_obj( ctx, mgr, value ); break;
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        UsageSummary ( UsageDefaultName );
+                        rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
+                    }
+                }
+            }
+            rc1 = VDBManagerRelease( mgr );
+            if ( rc1 != 0 )
+                ErrMsg( "VDBManagerRelease() -> %R", rc );
+        }
+        rc1 = KDirectoryRelease( dir );
+        if ( rc1 != 0 )
+            ErrMsg( "KDirectoryRelease() -> %R", rc );
+    }
+    return rc;
+}
+
+
+static rc_t diff_files( Args * args )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        ErrMsg( "ArgsParamCount() -> %R", rc );
+    else
+    {
+        if ( count != 2 )
+            KOutMsg( "this function needs exactly 2 files to diff\n" );
+        else
+        {
+            const char * f1;
+            rc = ArgsParamValue( args, 0, (const void **)&f1 );
+            if ( rc != 0 )
+                ErrMsg( "ArgsParamValue( 0 ) -> %R", rc );
+            else
+            {
+                const char * f2;
+                rc = ArgsParamValue( args, 1, (const void **)&f2 );
+                if ( rc != 0 )
+                    ErrMsg( "ArgsParamValue( 1 ) -> %R", rc );
+                else
+                    rc = vds_diff( f1, f2 ); /* in vdb-dump-str.c */
+            }
+        }
+    }
+    return rc;
+}
+
+
+/***************************************************************************
+    Main:
+    * create the dump-context
+    * parse the commandline for arguments and options
+    * react to help/usage - requests ( no dump in this case )
+      these functions are in vdb-dump-context.c
+    * call dump_main() to execute the dump
+    * destroy the dump-context
+***************************************************************************/
+static
+rc_t CC write_to_FILE ( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    if ( rc != 0 )
+        ErrMsg( "KOutHandlerSet() -> %R", rc );
+    else
+    {
+        rc = ArgsMakeAndHandle( &args, argc, argv,
+            1, DumpOptions, sizeof DumpOptions / sizeof DumpOptions [ 0 ] );
+        if ( rc != 0 )
+            ErrMsg( "ArgsMakeAndHandle() -> %R", rc );
+        else
+        {
+            dump_context *ctx;
+
+            rc = vdco_init( &ctx );
+            if ( rc == 0 )
+            {
+                rc = vdco_capture_arguments_and_options( args, ctx );
+                if ( rc == 0 )
+                {
+                    out_redir redir; /* vdb-dump-redir.h */
+                    
+                    KLogHandlerSetStdErr();
+                    rc = init_out_redir( &redir,
+                                     ctx->compress_mode,
+                                     ctx->output_file,
+                                     ctx->interactive ? 0 : ctx->output_buffer_size ); /* vdb-dump-redir.c */
+                    
+                    if ( rc == 0 )
+                    {
+                        if ( ctx->phase > 0 )
+                            rc = vdi_bin_phase( ctx, args ); /* vdb-dump-bin.c */
+                        else if ( ctx->diff )
+                            rc = diff_files( args ); /* above calls into vdb-dump-str.c */
+                        else if ( ctx->interactive )
+                            rc = vdi_main( ctx, args ); /* vdb-dump-interact.c */
+                        else if ( ctx->slice_depth > 0 )
+                            rc = find_slice( ctx, args ); /* vdb-dump-str.c */
+                        else
+                            rc = vdm_main( ctx, args );
+                    
+                        release_out_redir( &redir ); /* vdb-dump-redir.c */
+                    }
+                }
+                vdco_destroy( ctx );
+            }
+            ArgsWhack( args );
+        }
+    }
+    return rc;
+}
+
diff --git a/tools/vdb-dump/vdb_info.c b/tools/vdb-dump/vdb_info.c
new file mode 100644
index 0000000..49c7af3
--- /dev/null
+++ b/tools/vdb-dump/vdb_info.c
@@ -0,0 +1,1528 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/time.h>
+#include <klib/printf.h>
+#include <klib/num-gen.h>
+#include <klib/text.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+#include <kns/manager.h>
+#include <kns/http.h>
+
+#include <kdb/manager.h>
+#include <kdb/meta.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+
+#include "vdb-dump-context.h"
+#include "vdb-dump-helper.h"
+#include "vdb-dump-coldefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+static const char * PT_DATABASE = "Database";
+static const char * PT_TABLE    = "Table";
+static const char * PT_NONE     = "None";
+
+typedef struct vdb_info_vers
+{
+    char s_vers[ 16 ];
+    uint8_t major, minor, release;
+} vdb_info_vers;
+
+
+typedef struct vdb_info_date
+{
+    char date[ 32 ];
+    uint64_t timestamp;
+
+    uint16_t year;
+    uint8_t month;
+    uint8_t day;
+    uint8_t hour;
+    uint8_t minute;
+} vdb_info_date;
+
+typedef struct vdb_info_event
+{
+    char name[ 32 ];
+    vdb_info_vers vers;
+    vdb_info_date tool_date;
+    vdb_info_date run_date;
+} vdb_info_event;
+
+typedef struct vdb_info_bam_hdr
+{
+    bool present;
+    size_t hdr_bytes;
+    uint32_t total_lines;
+    uint32_t HD_lines;
+    uint32_t SQ_lines;
+    uint32_t RG_lines;
+    uint32_t PG_lines;
+} vdb_info_bam_hdr;
+
+typedef struct vdb_info_data
+{
+    const char * acc;
+    const char * s_path_type;
+    const char * s_platform;
+
+    char path[ 4096 ];
+    char remote_path[ 4096 ];
+    char cache[ 1024 ];
+    char schema_name[ 1024 ];
+    char species[ 1024 ];
+    
+    vdb_info_event formatter;
+    vdb_info_event loader;
+    vdb_info_event update;
+
+    vdb_info_date ts;
+
+    vdb_info_bam_hdr bam_hdr;
+    
+    float cache_percent;
+    uint64_t bytes_in_cache;
+
+    uint64_t seq_rows;
+    uint64_t ref_rows;
+    uint64_t prim_rows;
+    uint64_t sec_rows;
+    uint64_t ev_rows;
+    uint64_t ev_int_rows;
+    uint64_t consensus_rows;
+    uint64_t passes_rows;
+    uint64_t metrics_rows;
+
+    uint64_t file_size;
+} vdb_info_data;
+
+
+/* ----------------------------------------------------------------------------- */
+
+typedef struct split_vers_ctx
+{
+    char tmp[ 32 ];
+    uint32_t dst;
+    uint32_t sel;
+} split_vers_ctx;
+
+static void store_vers( vdb_info_vers * vers, split_vers_ctx * ctx )
+{
+    ctx->tmp[ ctx->dst ] = 0;
+    switch ( ctx->sel )
+    {
+        case 0 : vers->major = atoi( ctx->tmp ); break;
+        case 1 : vers->minor = atoi( ctx->tmp ); break;
+        case 2 : vers->release = atoi( ctx->tmp ); break;
+    }
+    ctx->sel++;
+    ctx->dst = 0;
+}
+
+static void split_vers( vdb_info_vers * vers )
+{
+    uint32_t i, l = string_measure ( vers->s_vers, NULL );
+    split_vers_ctx ctx;
+    memset( &ctx, 0, sizeof ctx );
+    for ( i = 0; i < l; ++i )
+    {
+        char c = vers->s_vers[ i ];
+        if ( c >= '0' && c <= '9' )
+            ctx.tmp[ ctx.dst++ ] = c;
+        else if ( c == '.' )
+            store_vers( vers, &ctx );
+    }
+    if ( ctx.dst > 0 )
+        store_vers( vers, &ctx );
+}
+
+/* ----------------------------------------------------------------------------- */
+
+typedef struct split_date_ctx
+{
+    char tmp[ 32 ];
+    uint32_t dst;
+} split_date_ctx;
+
+
+static uint8_t str_to_month_num( const char * s )
+{
+    uint8_t res = 0;
+    switch( s[ 0 ] )
+    {
+        case 'A' : ;
+        case 'a' : switch ( s[ 1 ] )
+                    {
+                        case 'P' : ;
+                        case 'p' : switch ( s[ 2 ] )
+                                    {
+                                        case 'R' :  ;
+                                        case 'r' :  res = 4; break;
+                                    }
+                                    break;
+                        case 'U' : ;
+                        case 'u' : switch ( s[ 2 ] )
+                                    {
+                                        case 'G' :  ;
+                                        case 'g' :  res = 8; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'F' : ;
+        case 'f' : switch ( s[ 1 ] )
+                    {
+                        case 'E' : ;
+                        case 'e' : switch ( s[ 2 ] )
+                                    {
+                                        case 'B' :  ;
+                                        case 'b' :  res = 2; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'J' : ;
+        case 'j' : switch ( s[ 1 ] )
+                    {
+                        case 'A' : ;
+                        case 'a' : switch ( s[ 2 ] )
+                                    {
+                                        case 'N' :  ;
+                                        case 'n' :  res = 1; break;
+                                    }
+                                    break;
+                        case 'U' : ;
+                        case 'u' : switch ( s[ 2 ] )
+                                    {
+                                        case 'N' :  ;
+                                        case 'n' :  res = 6; break;
+                                        case 'L' :  ;
+                                        case 'l' :  res = 7; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'M' : ;
+        case 'm' : switch ( s[ 1 ] )
+                    {
+                        case 'A' : ;
+                        case 'a' : switch ( s[ 2 ] )
+                                    {
+                                        case 'R' :  ;
+                                        case 'r' :  res = 3; break;
+                                        case 'Y' :  ;
+                                        case 'y' :  res = 5; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'S' : ;
+        case 's' : switch ( s[ 1 ] )
+                    {
+                        case 'E' : ;
+                        case 'e' : switch ( s[ 2 ] )
+                                    {
+                                        case 'P' :  ;
+                                        case 'p' :  res = 9; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'O' : ;
+        case 'o' : switch ( s[ 1 ] )
+                    {
+                        case 'C' : ;
+                        case 'c' : switch ( s[ 2 ] )
+                                    {
+                                        case 'T' :  ;
+                                        case 't' :  res = 10; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'N' : ;
+        case 'n' : switch ( s[ 1 ] )
+                    {
+                        case 'O' : ;
+                        case 'o' : switch ( s[ 2 ] )
+                                    {
+                                        case 'V' :  ;
+                                        case 'v' :  res = 11; break;
+                                    }
+                                    break;
+                    }
+                    break;
+
+        case 'D' : ;
+        case 'd' : switch ( s[ 1 ] )
+                    {
+                        case 'E' : ;
+                        case 'e' : switch ( s[ 2 ] )
+                                    {
+                                        case 'C' :  ;
+                                        case 'c' :  res = 12; break;
+                                    }
+                                    break;
+                    }
+                    break;
+    }
+    return res;
+}
+
+static void store_date( vdb_info_date * d, split_date_ctx * ctx )
+{
+    uint32_t l, value;
+
+    ctx->tmp[ ctx->dst ] = 0;
+    l = string_measure ( ctx->tmp, NULL );
+    value = atoi( ctx->tmp );
+    if ( l == 4 )
+        d->year = value;
+    else if ( ( l == 8 ) && ( ctx->tmp[ 2 ] == ':' ) && ( ctx->tmp[ 5 ] == ':' ) )
+    {
+        ctx->tmp[ 2 ] = 0;
+        d->hour = atoi( ctx->tmp );
+        ctx->tmp[ 5 ] = 0;
+        d->minute = atoi( &( ctx->tmp[ 3 ] ) );
+    }
+    else if ( l == 3 )
+    {
+        d->month = str_to_month_num( ctx->tmp );
+    }
+    else
+    {
+        d->day = value;
+    }
+    ctx->dst = 0;
+}
+
+static void split_date( vdb_info_date * d )
+{
+    uint32_t i, l = string_measure ( d->date, NULL );
+    split_date_ctx ctx;
+    memset( &ctx, 0, sizeof ctx );
+    for ( i = 0; i < l; ++i )
+    {
+        char c = d->date[ i ];
+        if ( c == ' ' )
+            store_date( d, &ctx );
+        else
+            ctx.tmp[ ctx.dst++ ] = c;
+    }
+    if ( ctx.dst > 0 )
+        store_date( d, &ctx );
+}
+
+/* ----------------------------------------------------------------------------- */
+static bool has_col( const VTable * tab, const char * colname )
+{
+    bool res = false;
+    struct KNamelist * columns;
+    rc_t rc = VTableListReadableColumns( tab, &columns );
+    if ( rc == 0 )
+    {
+        uint32_t count;
+        rc = KNamelistCount( columns, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t idx;
+            size_t colname_size = string_size( colname );
+            for ( idx = 0; idx < count && rc == 0 && !res; ++idx )
+            {
+                const char * a_name;
+                rc = KNamelistGet ( columns, idx, &a_name );
+                if ( rc == 0 )
+                {
+                    int cmp;
+                    size_t a_name_size = string_size( a_name );
+                    uint32_t max_chars = ( uint32_t )colname_size;
+                    if ( a_name_size > max_chars ) max_chars = ( uint32_t )a_name_size;
+                    cmp = strcase_cmp ( colname, colname_size,
+                                        a_name, a_name_size,
+                                        max_chars );
+                    res = ( cmp == 0 );
+                }
+            }
+        }
+        KNamelistRelease( columns );
+    }
+    return res;
+}
+
+static const char * get_platform( const VTable * tab )
+{
+    const char * res = PT_NONE;
+    if ( has_col( tab, "PLATFORM" ) )
+    {
+        const VCursor * cur;
+        rc_t rc = VTableCreateCursorRead( tab, &cur );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            rc = VCursorAddColumn( cur, &idx, "PLATFORM" );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen( cur );
+                if ( rc == 0 )
+                {
+                    const uint8_t * pf;
+                    rc = VCursorCellDataDirect( cur, 1, idx, NULL, (const void**)&pf, NULL, NULL );
+                    if ( rc == 0 )
+                    {
+                        res = vdcd_get_platform_txt( *pf );
+                    }
+                }
+            }
+            VCursorRelease( cur );
+        }
+    }
+    return res;
+}
+
+
+static void get_string_cell( char * buffer, size_t buffer_size, const VTable * tab, int64_t row, const char * column )
+{
+    if ( has_col( tab, column ) )
+    {
+        const VCursor * cur;
+        rc_t rc = VTableCreateCursorRead( tab, &cur );
+        if ( rc == 0 )
+        {
+            uint32_t idx;
+            rc = VCursorAddColumn( cur, &idx, column );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen( cur );
+                if ( rc == 0 )
+                {
+                    const char * src;
+                    uint32_t row_len;
+                    rc = VCursorCellDataDirect( cur, row, idx, NULL, (const void**)&src, NULL, &row_len );
+                    if ( rc == 0 )
+                    {
+                        size_t num_writ;
+                        string_printf( buffer, buffer_size, &num_writ, "%.*s", row_len, src );
+                    }
+                }
+            }
+            VCursorRelease( cur );
+        }
+    }
+}
+
+
+static uint64_t get_rowcount( const VTable * tab )
+{
+    uint64_t res = 0;
+    col_defs *my_col_defs;
+    if ( vdcd_init( &my_col_defs, 1024 ) )
+    {
+        if ( vdcd_extract_from_table( my_col_defs, tab ) > 0 )
+        {
+            const VCursor * cur;
+            rc_t rc = VTableCreateCursorRead( tab, &cur );
+            if ( rc == 0 )
+            {
+                if ( vdcd_add_to_cursor( my_col_defs, cur ) )
+                {
+                    rc = VCursorOpen( cur );
+                    if ( rc == 0 )
+                    {
+                        uint32_t idx;
+                        if ( vdcd_get_first_none_static_column_idx( my_col_defs, cur, &idx ) )
+                        {
+                            int64_t first;
+                            rc = VCursorIdRange( cur, idx, &first, &res );
+                        }
+                    }
+                }
+                VCursorRelease( cur );
+            }
+        }
+        vdcd_destroy( my_col_defs );
+    }
+    return res;
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static void get_meta_attr( const KMDataNode * node, const char * key, char * dst, size_t dst_size )
+{
+    size_t size;
+    rc_t rc = KMDataNodeReadAttr ( node, key, dst, dst_size, &size );
+    if ( rc == 0 )
+        dst[ size ] = 0;
+}
+
+
+static void get_meta_event( const KMetadata * meta, const char * node_path, vdb_info_event * event )
+{
+    const KMDataNode * node;
+    rc_t rc = KMetadataOpenNodeRead ( meta, &node, node_path );
+    if ( rc == 0 )
+    {
+        get_meta_attr( node, "name", event->name, sizeof event->name );
+        if ( event->name[ 0 ] == 0 )
+            get_meta_attr( node, "tool", event->name, sizeof event->name );
+
+        get_meta_attr( node, "vers", event->vers.s_vers, sizeof event->vers.s_vers );
+        split_vers( &event->vers );
+
+        get_meta_attr( node, "run", event->run_date.date, sizeof event->run_date.date );
+        split_date( &event->run_date );
+
+        get_meta_attr( node, "date", event->tool_date.date, sizeof event->tool_date.date );
+        if ( event->tool_date.date[ 0 ] == 0 )
+            get_meta_attr( node, "build", event->tool_date.date, sizeof event->tool_date.date );
+        split_date( &event->tool_date );
+
+        KMDataNodeRelease ( node );
+    }
+}
+
+static size_t get_node_size( const KMDataNode * node )
+{
+    char buffer[ 10 ];
+    size_t num_read, remaining, res = 0;
+    rc_t rc = KMDataNodeRead( node, 0, buffer, sizeof( buffer ), &num_read, &remaining );
+    if ( rc == 0 ) res = num_read + remaining;
+    return res;
+}
+
+static bool is_newline( const char c ) { return ( c == 0x0A || c == 0x0D ); }
+
+static void inspect_line( vdb_info_bam_hdr * bam_hdr, char * line, size_t len )
+{
+    bam_hdr->total_lines++;
+    if ( len > 3 && line[ 0 ] == '@' )
+    {
+        switch( line[ 1 ] )
+        {
+            case 'H'    : if ( line[ 2 ] == 'D' ) bam_hdr->HD_lines++; break;
+            case 'S'    : if ( line[ 2 ] == 'Q' ) bam_hdr->SQ_lines++; break;
+            case 'R'    : if ( line[ 2 ] == 'G' ) bam_hdr->RG_lines++; break;
+            case 'P'    : if ( line[ 2 ] == 'G' ) bam_hdr->PG_lines++; break;
+        }
+    }
+}
+
+static void parse_buffer( vdb_info_bam_hdr * bam_hdr, char * buffer, size_t len )
+{
+    char * line;
+    size_t idx, line_len, state = 0;
+    for ( idx = 0; idx < len; ++idx )
+    {
+        switch( state )
+        {
+            case 0 :    if ( is_newline( buffer[ idx ] ) ) /* init */
+                            state = 2;
+                        else
+                        {
+                            line = &( buffer[ idx ] );
+                            line_len = 1;
+                            state = 1;
+                        }
+                        break;
+                      
+            case 1 :    if ( is_newline( buffer[ idx ] ) ) /* content */
+                        {
+                            inspect_line( bam_hdr, line, line_len );
+                            state = 2;
+                        }
+                        else
+                            line_len++;
+                        break;
+
+            case 2 :   if ( !is_newline( buffer[ idx ] ) ) /* newline */
+                        {
+                            line = &( buffer[ idx ] );
+                            line_len = 1;
+                            state = 1;
+                        }
+                        break;
+        }
+    }
+}
+
+static void get_meta_bam_hdr( vdb_info_bam_hdr * bam_hdr, const KMetadata * meta )
+{
+    const KMDataNode * node;
+    rc_t rc = KMetadataOpenNodeRead ( meta, &node, "BAM_HEADER" );
+    bam_hdr -> present = ( rc == 0 );
+    if ( bam_hdr -> present )
+    {
+        bam_hdr->hdr_bytes = get_node_size( node );
+        if ( bam_hdr->hdr_bytes > 0 )
+        {
+            char * buffer = malloc( bam_hdr->hdr_bytes );
+            if ( buffer != NULL )
+            {
+                size_t num_read, remaining;
+                rc = KMDataNodeRead( node, 0, buffer, bam_hdr->hdr_bytes, &num_read, &remaining );
+                if ( rc == 0 )
+                {
+                    parse_buffer( bam_hdr, buffer, bam_hdr->hdr_bytes );
+                }
+                free( buffer );
+            }
+        }
+        KMDataNodeRelease ( node );
+    }
+}
+
+static void get_meta_info( vdb_info_data * data, const KMetadata * meta )
+{
+    const KMDataNode * node;
+    rc_t rc = KMetadataOpenNodeRead ( meta, &node, "schema" );
+    if ( rc == 0 )
+    {
+        size_t size;
+        rc = KMDataNodeReadAttr ( node, "name", data->schema_name, sizeof data->schema_name, &size );
+        if ( rc == 0 )
+            data->schema_name[ size ] = 0;
+        KMDataNodeRelease ( node );
+    }
+
+    rc = KMetadataOpenNodeRead ( meta, &node, "LOAD/timestamp" );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeReadAsU64 ( node, &data->ts.timestamp );
+        if ( rc == 0 )
+        {
+            KTime time_rec;
+            KTimeLocal ( &time_rec, data->ts.timestamp );
+            data->ts.year  = time_rec.year;
+            data->ts.month = time_rec.month + 1;
+            data->ts.day   = time_rec.day + 1;
+            data->ts.hour  = time_rec.hour;
+            data->ts.minute= time_rec.minute;
+        }
+        KMDataNodeRelease ( node );
+    }
+
+    get_meta_event( meta, "SOFTWARE/formatter", &data->formatter );
+    get_meta_event( meta, "SOFTWARE/loader", &data->loader );
+    get_meta_event( meta, "SOFTWARE/update", &data->update );
+    get_meta_bam_hdr( &data->bam_hdr, meta );
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static const char * get_path_type( const VDBManager *mgr, const char * acc_or_path )
+{
+    const char * res = PT_NONE;
+    int path_type = ( VDBManagerPathType ( mgr, "%s", acc_or_path ) & ~ kptAlias );
+    switch ( path_type ) /* types defined in <kdb/manager.h> */
+    {
+        case kptDatabase      : res = PT_DATABASE; break;
+
+        case kptPrereleaseTbl :
+        case kptTable         : res = PT_TABLE; break;
+    }
+    return res;
+}
+
+
+static rc_t make_remote_file( const KFile ** f, const char * url )
+{
+    KNSManager * kns_mgr;
+    rc_t rc = KNSManagerMake ( & kns_mgr );
+    *f = NULL;    
+    if ( rc == 0 )
+    {
+        rc = KNSManagerMakeHttpFile ( kns_mgr, f, NULL, 0x01010000, "%s", url );
+        KNSManagerRelease ( kns_mgr );
+    }
+    return rc;
+}
+
+
+static rc_t make_local_file( const KFile ** f, const char * path )
+{
+    KDirectory * dir;
+    rc_t rc = KDirectoryNativeDir( &dir );
+    *f = NULL;
+    if ( rc == 0 )
+    {
+        rc = KDirectoryOpenFileRead( dir, f, "%s", path );
+        KDirectoryRelease( dir );
+    }
+    return rc;
+}
+
+
+static uint64_t get_file_size( const char * path, bool remotely )
+{
+    uint64_t res = 0;
+    const KFile * f;
+    rc_t rc = ( remotely ) ? make_remote_file( &f, path ) : make_local_file( &f, path );
+    if ( rc == 0 )
+    {
+        KFileSize ( f, &res );
+        KFileRelease( f );
+    }
+    return res;
+}
+
+
+static rc_t vdb_info_tab( vdb_info_data * data, VSchema * schema, const VDBManager *mgr )
+{
+    const VTable * tab;
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tab, schema, "%s", data->acc );
+    if ( rc == 0 )
+    {
+        const KMetadata * meta = NULL;
+
+        data->s_platform = get_platform( tab );
+        data->seq_rows = get_rowcount( tab );
+        get_string_cell( data->species, sizeof data->species, tab, 1, "DEF_LINE" );
+
+        rc = VTableOpenMetadataRead ( tab, &meta );
+        if ( rc == 0 )
+        {
+            get_meta_info( data, meta );
+            KMetadataRelease ( meta );
+        }
+
+        VTableRelease( tab );
+    }
+    return rc;
+}
+
+
+static uint64_t get_tab_row_count( const VDatabase * db, const char * table_name )
+{
+    uint64_t res = 0;
+    const VTable * tab;
+    rc_t rc = VDatabaseOpenTableRead( db, &tab, table_name );
+    if ( rc == 0 )
+    {
+        res = get_rowcount( tab );
+        VTableRelease( tab );
+    }
+    return res;
+}
+
+
+static void get_species( char * buffer, size_t buffer_size, const VDatabase * db, const VDBManager *mgr )
+{
+    const VTable * tab;
+    rc_t rc = VDatabaseOpenTableRead( db, &tab, "REFERENCE" );
+    if ( rc == 0 )
+    {
+        char seq_id[ 1024 ];
+        
+        seq_id[ 0 ] = 0;
+        get_string_cell( seq_id, sizeof seq_id, tab, 1, "SEQ_ID" );
+        VTableRelease( tab );
+        if ( seq_id[ 0 ] != 0 )
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", seq_id );
+            if ( rc == 0 )
+            {
+                get_string_cell( buffer, buffer_size, tab, 1, "DEF_LINE" );
+                VTableRelease( tab );    
+            }
+        }
+    }
+}
+
+static rc_t vdb_info_db( vdb_info_data * data, VSchema * schema, const VDBManager *mgr )
+{
+    const VDatabase * db;
+    rc_t rc = VDBManagerOpenDBRead( mgr, &db, schema, "%s", data->acc );
+    if ( rc == 0 )
+    {
+        const VTable * tab;
+        const KMetadata * meta = NULL;
+
+        rc_t rc1 = VDatabaseOpenTableRead( db, &tab, "SEQUENCE" );
+        if ( rc1 == 0 )
+        {
+            data->s_platform = get_platform( tab );
+            data->seq_rows = get_rowcount( tab );
+            VTableRelease( tab );
+        }
+
+        data->ref_rows          = get_tab_row_count( db, "REFERENCE" );
+        data->prim_rows         = get_tab_row_count( db, "PRIMARY_ALIGNMENT" );
+        data->sec_rows          = get_tab_row_count( db, "SECONDARY_ALIGNMENT" );
+        data->ev_rows           = get_tab_row_count( db, "EVIDENCE_ALIGNMENT" );
+        data->ev_int_rows       = get_tab_row_count( db, "EVIDENCE_INTERVAL" );
+        data->consensus_rows    = get_tab_row_count( db, "CONSENSUS" );
+        data->passes_rows       = get_tab_row_count( db, "PASSES" );
+        data->metrics_rows      = get_tab_row_count( db, "ZMW_METRICS" );
+
+        if ( data->ref_rows > 0 )
+            get_species( data->species, sizeof data->species, db, mgr );
+        
+        rc = VDatabaseOpenMetadataRead ( db, &meta );
+        if ( rc == 0 )
+        {
+            get_meta_info( data, meta );
+            KMetadataRelease ( meta );
+        }
+
+        VDatabaseRelease( db );
+    }
+    return rc;
+
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static rc_t vdb_info_print_xml_s( const char * tag, const char * value )
+{
+    if ( value[ 0 ] != 0 )
+        return KOutMsg( "<%s>%s</%s>\n", tag, value, tag );
+    else
+        return 0;
+}
+
+static rc_t vdb_info_print_xml_uint64( const char * tag, const uint64_t value )
+{
+    if ( value != 0 )
+        return KOutMsg( "<%s>%lu</%s>\n", tag, value, tag );
+    else
+        return 0;
+}
+
+
+static rc_t vdb_info_print_xml_event( const char * tag, vdb_info_event * event )
+{
+    rc_t rc = 0;
+    if ( event->name[ 0 ] != 0 )
+    {
+        rc = KOutMsg( "<%s>\n", tag );
+        if ( rc == 0 )
+            rc = vdb_info_print_xml_s( "NAME", event->name );
+        if ( rc == 0 )
+            rc = vdb_info_print_xml_s( "VERS", event->vers.s_vers );
+        if ( rc == 0 )
+            rc = vdb_info_print_xml_s( "TOOLDATE", event->tool_date.date );
+        if ( rc == 0 )
+            rc = vdb_info_print_xml_s( "RUNDATE", event->run_date.date );
+        if ( rc == 0 )
+            rc = KOutMsg( "</%s>\n", tag );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_info_print_xml( vdb_info_data * data )
+{
+    rc_t rc = KOutMsg( "<info>\n" );
+
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_s( "acc", data->acc );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_s( "path", data->path );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "size", data->file_size );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_s( "type", data->s_path_type );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_s( "platf", data->s_platform );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "SEQ", data->seq_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "REF", data->ref_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "PRIM", data->prim_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "SEC", data->sec_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "EVID", data->ev_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "EVINT", data->ev_int_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "CONS", data->consensus_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "PASS", data->passes_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_uint64( "METR", data->metrics_rows );
+
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_s( "SCHEMA", data->schema_name );
+
+    if ( rc == 0 && data->ts.timestamp != 0 )
+    {
+        rc = KOutMsg( "<TIMESTAMP>0x%.016x</TIMESTAMP>\n", data->ts.timestamp );
+        if ( rc == 0 )
+            rc = KOutMsg( "<MONTH>%.02d</MONTH>\n", data->ts.month );
+        if ( rc == 0 )
+            rc = KOutMsg( "<DAY>%.02d</DAY>\n", data->ts.day );
+        if ( rc == 0 )
+            rc = KOutMsg( "<YEAR>%.02d</YEAR>\n", data->ts.year );
+        if ( rc == 0 )
+            rc = KOutMsg( "<HOUR>%.02d</HOUR>\n", data->ts.hour );
+        if ( rc == 0 )
+            rc = KOutMsg( "<MINUTE>%.02d</MINUTE>\n", data->ts.minute );
+    }
+
+    if ( rc == 0 && data->species[ 0 ] != 0 )
+        rc = vdb_info_print_xml_s( "SPECIES", data->species );
+    
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_event( "FORMATTER", &data->formatter );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_event( "LOADER", &data->loader );
+    if ( rc == 0 )
+        rc = vdb_info_print_xml_event( "UPDATE", &data->update );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "</info>\n" );
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static rc_t vdb_info_print_json_s( const char * tag, const char * value )
+{
+    if ( value[ 0 ] != 0 )
+        return KOutMsg( "\"%s\":\"%s\",\n", tag, value );
+    else
+        return 0;
+}
+
+static rc_t vdb_info_print_json_uint64( const char * tag, const uint64_t value )
+{
+    if ( value != 0 )
+        return KOutMsg( "\"%s\":%lu,\n", tag, value );
+    else
+        return 0;
+}
+
+static rc_t vdb_info_print_json_event( const char * tag, vdb_info_event * event )
+{
+    rc_t rc = 0;
+    if ( event->name[ 0 ] != 0 )
+    {
+        rc = KOutMsg( "\"%s\":{\n", tag );
+        if ( rc == 0 )
+            rc = vdb_info_print_json_s( "NAME", event->name );
+        if ( rc == 0 )
+            rc = vdb_info_print_json_s( "VERS", event->vers.s_vers );
+        if ( rc == 0 )
+            rc = vdb_info_print_json_s( "TOOLDATE", event->tool_date.date );
+        if ( rc == 0 )
+            rc = vdb_info_print_json_s( "RUNDATE", event->run_date.date );
+        if ( rc == 0 )
+            rc = KOutMsg( "},\n", tag );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_info_print_json( vdb_info_data * data )
+{
+    rc_t rc = KOutMsg( "{\n" );
+
+    if ( rc == 0 )
+        rc = vdb_info_print_json_s( "acc", data->acc );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_s( "path", data->path );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "size", data->file_size );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_s( "type", data->s_path_type );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_s( "platf", data->s_platform );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "SEQ", data->seq_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "REF", data->ref_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "PRIM", data->prim_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "SEC", data->sec_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "EVID", data->ev_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "EVINT", data->ev_int_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "CONS", data->consensus_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "PASS", data->passes_rows );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_uint64( "METR", data->metrics_rows );
+
+    if ( rc == 0 )
+        rc = vdb_info_print_json_s( "SCHEMA", data->schema_name );
+
+    if ( rc == 0 && data->ts.timestamp != 0 )
+    {
+        rc = vdb_info_print_json_uint64( "TIMESTAMP", data->ts.timestamp );
+        if ( rc == 0 )
+            rc = KOutMsg( "\"MONTH\":%d,\n", data->ts.month );
+        if ( rc == 0 )
+            rc = KOutMsg( "\"DAY\":%d,\n", data->ts.day );
+        if ( rc == 0 )
+            rc = KOutMsg( "\"YEAR\":%d,\n", data->ts.year );
+        if ( rc == 0 )
+            rc = KOutMsg( "\"HOUR\":%d,\n", data->ts.hour );
+        if ( rc == 0 )
+            rc = KOutMsg( "\"MINUTE\":%d,\n", data->ts.minute );
+    }
+
+    if ( rc == 0 && data->species[ 0 ] != 0 )
+        rc = vdb_info_print_json_s( "SPECIES", data->species );
+    
+    if ( rc == 0 )
+        rc = vdb_info_print_json_event( "FORMATTER", &data->formatter );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_event( "LOADER", &data->loader );
+    if ( rc == 0 )
+        rc = vdb_info_print_json_event( "UPDATE", &data->update );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "};\n" );
+    return rc;
+
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+static const char dflt_event_name[] = "-";
+
+static rc_t vdb_info_print_sep_event( vdb_info_event * event, const char sep, bool last )
+{
+    rc_t rc;
+    const char * ev_name = event->name;
+    if ( ev_name == NULL || ev_name[ 0 ] == 0 )
+        ev_name = dflt_event_name;
+    
+    if ( last )
+    {
+        rc = KOutMsg( "'%s'%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d",
+                      ev_name, sep,
+                      event->vers.major, sep, event->vers.minor, sep, event->vers.release, sep,
+                      event->tool_date.month, sep, event->tool_date.day, sep, event->tool_date.year, sep,
+                      event->run_date.month, sep, event->run_date.day, sep, event->run_date.year );
+    }
+    else
+    {
+        rc = KOutMsg( "'%s'%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c",
+                      ev_name, sep,
+                      event->vers.major, sep, event->vers.minor, sep, event->vers.release, sep,
+                      event->tool_date.month, sep, event->tool_date.day, sep, event->tool_date.year, sep,
+                      event->run_date.month, sep, event->run_date.day, sep, event->run_date.year, sep );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_info_print_sep( vdb_info_data * data, const char sep )
+{
+    rc_t rc = KOutMsg( "'%s'%c%lu%c%c%c'%s'%c",
+                       data->acc, sep, data->file_size, sep,
+                       data->s_path_type[0], sep, &(data->s_platform[13]), sep );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu%c%lu%c%lu%c%lu%c%lu%c%lu%c%lu%c%lu%c%lu%c",
+                      data->seq_rows, sep, data->ref_rows, sep,
+                      data->prim_rows, sep, data->sec_rows, sep, data->ev_rows, sep,
+                      data->ev_int_rows, sep, data->consensus_rows, sep,
+                      data->passes_rows, sep, data->metrics_rows, sep );
+    if ( rc == 0 )
+        rc = KOutMsg( "'%s'%c%d%c%d%c%d%c%d%c%d%c",
+                      data->schema_name, sep,
+                      data->ts.month, sep, data->ts.day, sep, data->ts.year, sep,
+                      data->ts.hour, sep, data->ts.minute, sep );
+
+    if ( rc == 0 )
+    {
+        if ( data->species[ 0 ] != 0 )
+            rc = KOutMsg( "'%s'%c", data->species, sep );
+        else
+            rc = KOutMsg( "-%c", sep );
+    }
+        
+    if ( rc == 0 )
+        rc = vdb_info_print_sep_event( &data->formatter, sep, false );
+    if ( rc == 0 )
+        rc = vdb_info_print_sep_event( &data->loader, sep, false );
+    if ( rc == 0 )
+        rc = vdb_info_print_sep_event( &data->update, sep, true );
+        
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static rc_t vdb_info_print_dflt_date( vdb_info_date * d, const char *prefix0, const char *prefix1 )
+{
+    rc_t rc = 0;
+
+    if ( d->date[ 0 ] != 0 )
+        rc = KOutMsg( "%s%s: %s (%d/%d/%d %d:%d)\n", prefix0, prefix1,
+                      d->date, d->month, d->day, d->year, d->hour, d->minute );
+
+    return rc;
+}
+
+static rc_t vdb_info_print_dflt_event( vdb_info_event * event, const char *prefix )
+{
+    rc_t rc = 0;
+    if ( event->name[ 0 ] != 0 )
+        rc = KOutMsg( "%s    : %s\n", prefix, event->name );
+    if ( rc == 0 && event->vers.s_vers[ 0 ] != 0 )
+        rc = KOutMsg( "%sVER : %s\n", prefix, event->vers.s_vers );
+    if ( rc == 0 )
+        rc = vdb_info_print_dflt_date( &event->tool_date, prefix, "DATE" );
+    if ( rc == 0 )
+        rc = vdb_info_print_dflt_date( &event->run_date,  prefix, "RUN " );
+    return rc;
+}
+
+
+static rc_t vdb_info_print_dflt( vdb_info_data * data )
+{
+    rc_t rc= KOutMsg( "acc    : %s\n", data->acc );
+
+    if ( rc == 0 && data->path[ 0 ] != 0 )
+        rc = KOutMsg( "path   : %s\n", data->path );
+
+    if ( rc == 0 && data->remote_path[ 0 ] != 0 )
+        rc = KOutMsg( "remote : %s\n", data->remote_path );
+
+    if ( rc == 0 && data->file_size != 0 )
+        rc = KOutMsg( "size   : %,lu\n", data->file_size );
+
+    if ( rc == 0 && data->cache[ 0 ] != 0 )
+    {
+        rc = KOutMsg( "cache  : %s\n", data->cache );
+        if ( rc == 0 )
+            rc = KOutMsg( "percent: %f\n", data->cache_percent );
+        if ( rc == 0 )
+            rc = KOutMsg( "bytes  : %,lu\n", data->bytes_in_cache );
+    }
+    
+    if ( rc == 0 && data->s_path_type[ 0 ] != 0 )    
+        rc = KOutMsg( "type   : %s\n", data->s_path_type );
+
+    if ( rc == 0 && data->s_platform[ 0 ] != 0 )
+        rc = KOutMsg( "platf  : %s\n", data->s_platform );
+
+    if ( rc == 0 && data->seq_rows != 0 )
+        rc = KOutMsg( "SEQ    : %,lu\n", data->seq_rows );
+
+    if ( rc == 0 && data->ref_rows != 0 )
+        rc = KOutMsg( "REF    : %,lu\n", data->ref_rows );
+
+    if ( rc == 0 && data->prim_rows != 0 )
+        rc = KOutMsg( "PRIM   : %,lu\n", data->prim_rows );
+
+    if ( rc == 0 && data->sec_rows != 0 )
+        rc = KOutMsg( "SEC    : %,lu\n", data->sec_rows );
+
+    if ( rc == 0 && data->ev_rows != 0 )
+        rc = KOutMsg( "EVID   : %,lu\n", data->ev_rows );
+
+    if ( rc == 0 && data->ev_int_rows != 0 )
+        rc = KOutMsg( "EVINT  : %,lu\n", data->ev_int_rows );
+
+    if ( rc == 0 && data->consensus_rows != 0 )
+        rc = KOutMsg( "CONS   : %,lu\n", data->consensus_rows );
+
+    if ( rc == 0 && data->passes_rows != 0 )
+        rc = KOutMsg( "PASS   : %,lu\n", data->passes_rows );
+
+    if ( rc == 0 && data->metrics_rows != 0 )
+        rc = KOutMsg( "METR   : %,lu\n", data->metrics_rows );
+
+    if ( rc == 0 && data->schema_name[ 0 ] != 0 )
+        rc = KOutMsg( "SCHEMA : %s\n", data->schema_name );
+
+    if ( rc == 0 && data->ts.timestamp != 0 )
+        rc = KOutMsg( "TIME   : 0x%.016x (%.02d/%.02d/%d %.02d:%.02d)\n",
+                      data->ts.timestamp, data->ts.month, data->ts.day, data->ts.year,
+                      data->ts.hour, data->ts.minute );
+
+    if ( rc == 0 && data->species[ 0 ] != 0 )
+        rc = KOutMsg( "SPECIES: %s\n", data->species );
+        
+    if ( rc == 0 )
+        vdb_info_print_dflt_event( &data->formatter, "FMT" );
+    if ( rc == 0 )
+        vdb_info_print_dflt_event( &data->loader, "LDR" );
+    if ( rc == 0 )
+        vdb_info_print_dflt_event( &data->update, "UPD" );
+
+    if ( rc == 0 && data->bam_hdr.present )
+    {
+        rc = KOutMsg( "BAMHDR : %d bytes / %d lines\n", data->bam_hdr.hdr_bytes, data->bam_hdr.total_lines );
+        if ( rc == 0 && data->bam_hdr.HD_lines > 0 )
+            rc = KOutMsg( "BAMHDR : %d HD-lines\n", data->bam_hdr.HD_lines );
+        if ( rc == 0 && data->bam_hdr.SQ_lines > 0 )
+            rc = KOutMsg( "BAMHDR : %d SQ-lines\n", data->bam_hdr.SQ_lines );
+        if ( rc == 0 && data->bam_hdr.RG_lines > 0 )
+            rc = KOutMsg( "BAMHDR : %d RG-lines\n", data->bam_hdr.RG_lines );
+        if ( rc == 0 && data->bam_hdr.PG_lines > 0 )
+            rc = KOutMsg( "BAMHDR : %d PG-lines\n", data->bam_hdr.PG_lines );
+    }
+    
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+static rc_t vdb_info_print_sql_event( const char * prefix, bool last )
+{
+    rc_t rc = KOutMsg( "%s_NAME VARCHAR, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_VER_MAJOR INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_VER_MINOR INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_VER_RELEASE INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_TOOL_MONTH INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_TOOL_DAY INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_TOOL_YEAR INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_RUN_MONTH INTEGER, ", prefix );
+    if ( rc == 0 )
+        rc = KOutMsg( "%s_RUN_DAY INTEGER, ", prefix );
+
+    if ( rc == 0 )
+    {
+        if ( last )
+            rc = KOutMsg( "%s_RUN_YEAR INTEGER ", prefix );
+        else
+            rc = KOutMsg( "%s_RUN_YEAR INTEGER, ", prefix );
+    }
+    return rc;
+}
+
+static rc_t vdb_info_print_sql_header( const char * table_name )
+{
+    rc_t rc = KOutMsg( "CREATE TABLE %s ( ", table_name );
+    if ( rc == 0 )
+        rc = KOutMsg( "ACC VARCHAR(12) PRIMARY KEY, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "FILESIZE INTEGER, " );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "TAB_OR_DB VARCHAR(1), " );
+    if ( rc == 0 )
+        rc = KOutMsg( "PLATFORM VARCHAR(16), " );
+    if ( rc == 0 )
+        rc = KOutMsg( "SEQ_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "PRIM_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "SEC_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "EV_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "EV_INT_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "CONS_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "PASS_ROWS INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "METR_ROWS INTEGER, " );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "SCHEMA VARCHAR, " );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "TS_MONTH INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "TS_DAY INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "TS_YEAR INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "TS_HOUR INTEGER, " );
+    if ( rc == 0 )
+        rc = KOutMsg( "TS_MINUTE INTEGER, " );
+
+    if ( rc == 0 )
+        vdb_info_print_sql_event( "FMT", false );
+    if ( rc == 0 )
+        vdb_info_print_sql_event( "LD", false );
+    if ( rc == 0 )
+        vdb_info_print_sql_event( "UPD", true );
+
+    if ( rc == 0 )
+        rc = KOutMsg( ");\n" );
+
+    return rc;
+}
+
+
+static rc_t vdb_info_print_ev_sql( vdb_info_event * event, bool last )
+{
+    rc_t rc;
+    if ( last )
+    {
+        rc = KOutMsg( "\'%s\', %d, %d, %d, %d, %d, %d, %d, %d, %d ",
+                    event->name, event->vers.major, event->vers.minor, event->vers.release,
+                    event->tool_date.month, event->tool_date.day, event->tool_date.year,
+                    event->run_date.month, event->run_date.day, event->run_date.year );
+    }
+    else
+    {
+        rc = KOutMsg( "\'%s\', %d, %d, %d, %d, %d, %d, %d, %d, %d, ",
+                    event->name, event->vers.major, event->vers.minor, event->vers.release,
+                    event->tool_date.month, event->tool_date.day, event->tool_date.year,
+                    event->run_date.month, event->run_date.day, event->run_date.year );
+    }
+    return rc;
+}
+
+
+static rc_t vdb_info_print_sql( const char * table_name, vdb_info_data * data )
+{
+    rc_t rc = KOutMsg( "INSERT INTO %s VALUES ( ", table_name );
+
+    if ( rc == 0 )
+        rc= KOutMsg( "\'%s\', ", data->acc );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->file_size );
+    if ( rc == 0 )
+        rc = KOutMsg( "\'%c\', ", data->s_path_type[0] );
+    if ( rc == 0 )
+        rc = KOutMsg( "\'%s\', ", &( data->s_platform[13] ) );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->seq_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->ref_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->prim_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->sec_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->ev_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->ev_int_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->consensus_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->passes_rows );
+    if ( rc == 0 )
+        rc = KOutMsg( "%lu, ", data->metrics_rows );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\'%s\', ", data->schema_name );
+
+    if ( rc == 0 )
+        rc = KOutMsg( "%d, %d, %d, %d, %d, ",
+                      data->ts.month, data->ts.day, data->ts.year, data->ts.hour, data->ts.minute );
+
+    if ( rc == 0 )
+        rc = vdb_info_print_ev_sql( &data->formatter, false );
+    if ( rc == 0 )
+        rc = vdb_info_print_ev_sql( &data->loader, false );
+    if ( rc == 0 )
+        rc = vdb_info_print_ev_sql( &data->update, true );
+
+    if ( rc == 0 )
+        rc = KOutMsg( ");\n" );
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------------- */
+
+
+static uint8_t digits_of( uint64_t value )
+{
+    uint8_t res = 0;
+          if ( value > 99999999999 ) res = 12;
+    else if ( value > 9999999999 ) res = 11;
+    else if ( value > 999999999 ) res = 10;
+    else if ( value > 99999999 ) res = 9;
+    else if ( value > 9999999 ) res = 8;
+    else if ( value > 999999 ) res = 7;
+    else if ( value > 99999 ) res = 6;
+    else if ( value > 9999 ) res = 5;
+    else if ( value > 999 ) res = 4;
+    else if ( value > 99 ) res = 3;
+    else if ( value > 9 ) res = 2;
+    else res = 1;
+    return res;
+}
+
+static rc_t vdb_info_1( VSchema * schema, dump_format_t format, const VDBManager *mgr,
+                        const char * acc_or_path, const char * table_name )
+{
+    rc_t rc = 0;
+    vdb_info_data data;
+
+    memset( &data, 0, sizeof data );
+    data.s_platform = PT_NONE;
+    data.acc = acc_or_path;
+
+    /* #1 get path-type */
+    data.s_path_type = get_path_type( mgr, acc_or_path );
+
+    if ( data.s_path_type[ 0 ] == 'D' || data.s_path_type[ 0 ] == 'T' )
+    {
+        rc_t rc1;
+
+        /* #2 fork by table or database */
+        switch ( data.s_path_type[ 0 ] )
+        {
+            case 'D' : vdb_info_db( &data, schema, mgr ); break;
+            case 'T' : vdb_info_tab( &data, schema, mgr ); break;
+        }
+
+        /* try to resolve the path locally */
+        rc1 = resolve_accession( acc_or_path, data.path, sizeof data.path, false ); /* vdb-dump-helper.c */
+        if ( rc1 == 0 )
+        {
+            data.file_size = get_file_size( data.path, false );
+            resolve_remote_accession( acc_or_path, data.remote_path, sizeof data.remote_path ); /* vdb-dump-helper.c */
+        }
+        else
+        {
+            /* try to resolve the path remotely */
+            rc1 = resolve_accession( acc_or_path, data.path, sizeof data.path, true ); /* vdb-dump-helper.c */
+            if ( rc1 == 0 )
+            {
+                data.file_size = get_file_size( data.path, true );
+                /* try to find out the cache-file */
+                rc1 = resolve_cache( acc_or_path, data.cache, sizeof data.cache ); /* vdb-dump-helper.c */
+                if ( rc1 == 0 )
+                {
+                    /* try to find out cache completeness */
+                    check_cache_comleteness( data.cache, &data.cache_percent, &data.bytes_in_cache );
+                }
+            }
+        }
+        
+        switch ( format )
+        {
+            case df_xml  : rc = vdb_info_print_xml( &data ); break;
+            case df_json : rc = vdb_info_print_json( &data ); break;
+            case df_csv  : rc = vdb_info_print_sep( &data, ',' ); break;
+            case df_tab  : rc = vdb_info_print_sep( &data, '\t' ); break;
+            case df_sql  : rc = vdb_info_print_sql( table_name, &data ); break;
+            default     : rc = vdb_info_print_dflt( &data ); break;
+        }
+    }
+
+    return rc;
+}
+
+
+rc_t vdb_info( Vector * schema_list, dump_format_t format, const VDBManager *mgr,
+               const char * acc_or_path, struct num_gen * rows )
+{
+    rc_t rc = 0;
+    VSchema * schema = NULL;
+
+    vdh_parse_schema( mgr, &schema, schema_list, false );
+
+    if ( format == df_sql )
+        rc = vdb_info_print_sql_header( acc_or_path );
+
+    if ( rows != NULL && !num_gen_empty( rows ) )
+    {
+        const struct num_gen_iter * iter;
+        rc = num_gen_iterator_make( rows, &iter );
+        if ( rc == 0 )
+        {
+            int64_t max_row;
+            rc = num_gen_iterator_max( iter, &max_row );
+            if ( rc == 0 )
+            {
+                int64_t id;
+                uint8_t digits = digits_of( max_row );
+
+                while ( rc == 0 && num_gen_iterator_next( iter, &id, &rc ) )
+                {
+                    char acc[ 64 ];
+                    size_t num_writ;
+                    rc_t rc1 = -1;
+                    switch ( digits )
+                    {
+                        case 1 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%ld", acc_or_path, id ); break;
+                        case 2 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.02ld", acc_or_path, id ); break;
+                        case 3 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.03ld", acc_or_path, id ); break;
+                        case 4 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.04ld", acc_or_path, id ); break;
+                        case 5 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.05ld", acc_or_path, id ); break;
+                        case 6 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.06ld", acc_or_path, id ); break;
+                        case 7 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.07ld", acc_or_path, id ); break;
+                        case 8 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.08ld", acc_or_path, id ); break;
+                        case 9 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.09ld", acc_or_path, id ); break;
+                    }
+
+                    if ( rc1 == 0 )
+                        rc = vdb_info_1( schema, format, mgr, acc, acc_or_path );
+                }
+            }
+            num_gen_iterator_destroy( iter );
+        }
+    }
+    else
+        rc = vdb_info_1( schema, format, mgr, acc_or_path, acc_or_path );
+
+    if ( schema != NULL )
+        VSchemaRelease( schema );
+
+    return rc;
+}
diff --git a/tools/vdb-dump/vdb_info.h b/tools/vdb-dump/vdb_info.h
new file mode 100644
index 0000000..b83dfcd
--- /dev/null
+++ b/tools/vdb-dump/vdb_info.h
@@ -0,0 +1,47 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_info_
+#define _h_vdb_info_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+#include <vdb/manager.h>
+
+rc_t vdb_info( Vector * schema_list, dump_format_t format, const VDBManager *mgr,
+               const char * acc_or_path, struct num_gen * rows );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/vdb-validate/Makefile b/tools/vdb-validate/Makefile
new file mode 100644
index 0000000..b1d77f4
--- /dev/null
+++ b/tools/vdb-validate/Makefile
@@ -0,0 +1,96 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(abspath ../..)
+MODULE = tools/vdb-validate
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-validate \
+	check-corrupt
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+include $(TOP)/build/Makefile.env
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@-cmn
+
+$(ALL_TOOLS): makedirs
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-validate
+#
+VDB_VALIDATE_SRC = \
+	vdb-validate
+
+VDB_VALIDATE_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_VALIDATE_SRC))
+
+VDB_VALIDATE_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/vdb-validate: $(VDB_VALIDATE_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(VDB_VALIDATE_LIB)
+
+
+#-------------------------------------------------------------------------------
+# check-corrupt
+#
+CHECK_CORRUPT_SRC = \
+	check-corrupt
+
+CHECK_CORRUPT_OBJ = \
+	$(addsuffix .$(OBJX),$(CHECK_CORRUPT_SRC))
+
+CHECK_CORRUPT_LIB = \
+	-lkapp \
+	-stk-version \
+	-sncbi-vdb \
+	-lm
+
+$(BINDIR)/check-corrupt: $(CHECK_CORRUPT_OBJ)
+	$(LP) --exe --vers $(SRCDIR)/../../shared/toolkit.vers -o $@ $^ $(CHECK_CORRUPT_LIB)
\ No newline at end of file
diff --git a/tools/vdb-validate/check-corrupt.cpp b/tools/vdb-validate/check-corrupt.cpp
new file mode 100644
index 0000000..92c056b
--- /dev/null
+++ b/tools/vdb-validate/check-corrupt.cpp
@@ -0,0 +1,764 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/writer.h>
+#include <kfs/directory.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+
+#include <sstream>
+
+#include <cmath>
+
+#define SA_TABLE_LOOKUP_LIMIT 100000
+#define SEQ_TABLE_LOOKUP_LIMIT 100000
+#define PA_LONGER_SA_LIMIT 0.01
+
+typedef struct CheckCorruptConfig
+{
+    double sa_cutoff_percent; // negative when not used
+    uint64_t sa_cutoff_number; // only used when sa_cutoff_percent is negative
+
+    double seq_cutoff_percent; // negative when not used
+    uint64_t seq_cutoff_number; // only used when seq_cutoff_percent is negative
+
+    double pa_len_threshold_percent; // negative when not used
+    uint64_t pa_len_threshold_number; // only used when pa_len_threshold_percent is negative
+} CheckCorruptConfig;
+
+struct VDB_ERROR
+{
+    VDB_ERROR (const char * _msg, rc_t _rc)
+        : msg (_msg), rc (_rc)
+    {}
+
+    const char * msg;
+    rc_t rc;
+};
+
+struct VDB_ROW_ERROR
+{
+    VDB_ROW_ERROR (const char * _msg, int64_t _row_id, rc_t _rc)
+        : row_id ( _row_id ), msg (_msg), rc (_rc)
+    {}
+
+    int64_t row_id;
+    const char * msg;
+    rc_t rc;
+};
+
+struct DATA_ERROR
+{
+    DATA_ERROR (const std::string & _msg)
+        : msg(_msg)
+    {}
+
+    std::string msg;
+};
+
+/**
+ * returns true if checks are passed
+ */
+void runChecks ( const char * accession, const CheckCorruptConfig * config, const VCursor * pa_cursor, const VCursor * sa_cursor, const VCursor * seq_cursor )
+{
+    rc_t rc;
+    uint32_t pa_has_ref_offset_idx;
+    uint32_t sa_has_ref_offset_idx;
+    uint32_t sa_seq_spot_id_idx;
+    uint32_t sa_seq_read_id_idx;
+    uint32_t sa_pa_id_idx;
+    uint32_t sa_tmp_mismatch_idx;
+    uint32_t seq_pa_id_idx;
+    uint32_t seq_read_len_idx;
+    uint32_t seq_cmp_read_idx;
+    bool has_tmp_mismatch;
+
+    /* add columns to cursor */
+#define add_column(tbl_name, cursor, idx, col_spec) \
+    rc = VCursorAddColumn( cursor, &idx, col_spec ); \
+    if ( rc != 0 ) \
+        throw VDB_ERROR("VCursorAddColumn() failed for " tbl_name " table, " col_spec " column", rc);
+
+    add_column( "PRIMARY_ALIGNMENT", pa_cursor, pa_has_ref_offset_idx, "(bool)HAS_REF_OFFSET" );
+    add_column( "SECONDARY_ALIGNMENT", sa_cursor, sa_has_ref_offset_idx, "(bool)HAS_REF_OFFSET" );
+    add_column( "SECONDARY_ALIGNMENT", sa_cursor, sa_seq_spot_id_idx, "SEQ_SPOT_ID" );
+    add_column( "SECONDARY_ALIGNMENT", sa_cursor, sa_seq_read_id_idx, "SEQ_READ_ID" );
+    add_column( "SECONDARY_ALIGNMENT", sa_cursor, sa_pa_id_idx, "PRIMARY_ALIGNMENT_ID" );
+    add_column( "SEQUENCE", seq_cursor, seq_pa_id_idx, "PRIMARY_ALIGNMENT_ID" );
+    add_column( "SEQUENCE", seq_cursor, seq_read_len_idx, "READ_LEN" );
+    add_column( "SEQUENCE", seq_cursor, seq_cmp_read_idx, "CMP_READ" );
+
+    // optional columns
+    rc = VCursorAddColumn( sa_cursor, &sa_tmp_mismatch_idx, "TMP_MISMATCH" );
+    if ( rc == 0 )
+        has_tmp_mismatch = true;
+    else
+    {
+        has_tmp_mismatch = false;
+        rc = 0;
+    }
+
+
+#undef add_column
+
+    rc = VCursorOpen( pa_cursor );
+    if (rc != 0)
+        throw VDB_ERROR("VCursorOpen() failed for PRIMARY_ALIGNMENT table", rc);
+    rc = VCursorOpen( sa_cursor );
+    if (rc != 0)
+        throw VDB_ERROR("VCursorOpen() failed for SECONDARY_ALIGNMENT table", rc);
+    rc = VCursorOpen( seq_cursor );
+    if (rc != 0)
+        throw VDB_ERROR("VCursorOpen() failed for SEQUENCE table", rc);
+
+    int64_t sa_id_first;
+    uint64_t sa_row_count;
+
+    rc = VCursorIdRange( sa_cursor, sa_pa_id_idx, &sa_id_first, &sa_row_count );
+    if (rc != 0)
+        throw VDB_ERROR("VCursorIdRange() failed for SECONDARY_ALIGNMENT table, PRIMARY_ALIGNMENT_ID column", rc);
+
+    bool reported_about_no_pa = false;
+    uint64_t pa_longer_sa_rows = 0;
+    uint64_t pa_longer_sa_limit;
+    if (config->pa_len_threshold_percent > 0)
+        pa_longer_sa_limit = ceil( config->pa_len_threshold_percent * sa_row_count );
+    else if (config->pa_len_threshold_number == 0 || config->pa_len_threshold_number > sa_row_count)
+        pa_longer_sa_limit = sa_row_count;
+    else
+        pa_longer_sa_limit = config->pa_len_threshold_number;
+
+    uint64_t sa_row_limit;
+    if (config->sa_cutoff_percent > 0)
+        sa_row_limit = ceil( config->sa_cutoff_percent * sa_row_count );
+    else if (config->sa_cutoff_number == 0 || config->sa_cutoff_number > sa_row_count)
+        sa_row_limit = sa_row_count;
+    else
+        sa_row_limit = config->sa_cutoff_number;
+
+    for ( uint64_t i = 0; i < sa_row_count && i < sa_row_limit; ++i )
+    {
+        int64_t sa_row_id = i + sa_id_first;
+        const void * data_ptr = NULL;
+        uint32_t data_len;
+        uint32_t pa_row_len;
+        uint32_t sa_row_len;
+        uint32_t seq_read_len_len;
+
+        // SA:HAS_REF_OFFSET
+        rc = VCursorCellDataDirect ( sa_cursor, sa_row_id, sa_has_ref_offset_idx, NULL, (const void**)&data_ptr, NULL, &sa_row_len );
+        if ( rc != 0 )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, HAS_REF_OFFSET column", sa_row_id, rc);
+
+        const int64_t * p_seq_spot_id;
+        uint32_t seq_spot_id_len;
+        // SA:SEQ_SPOT_ID
+        rc = VCursorCellDataDirect ( sa_cursor, sa_row_id, sa_seq_spot_id_idx, NULL, (const void**)&p_seq_spot_id, NULL, &seq_spot_id_len );
+        if ( rc != 0 || p_seq_spot_id == NULL || seq_spot_id_len != 1 )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, SEQ_SPOT_ID column", sa_row_id, rc);
+
+        int64_t seq_spot_id = *p_seq_spot_id;
+        if (seq_spot_id == 0)
+        {
+            std::stringstream ss;
+            ss << "SECONDARY_ALIGNMENT:" << sa_row_id << " has SEQ_SPOT_ID = " << seq_spot_id;
+
+            throw DATA_ERROR(ss.str());
+        }
+
+        if ( has_tmp_mismatch )
+        {
+            const char * p_sa_tmp_mismatch;
+            // SA:TMP_MISMATCH
+            rc = VCursorCellDataDirect ( sa_cursor, sa_row_id, sa_tmp_mismatch_idx, NULL, (const void**)&p_sa_tmp_mismatch, NULL, &data_len );
+            if ( rc != 0 || p_sa_tmp_mismatch == NULL )
+                throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, TMP_MISMATCH column", sa_row_id, rc);
+
+            for ( uint32_t j = 0; j < data_len; ++j )
+            {
+                if ( p_sa_tmp_mismatch[j] == '=' )
+                {
+                    std::stringstream ss;
+                    ss << "SECONDARY_ALIGNMENT:" << sa_row_id << " TMP_MISMATCH contains '='";
+
+                    throw DATA_ERROR(ss.str());
+                }
+            }
+        }
+
+        const int64_t * p_pa_row_id;
+        // SA:PRIMARY_ALIGNMENT_ID
+        rc = VCursorCellDataDirect ( sa_cursor, sa_row_id, sa_pa_id_idx, NULL, (const void**)&p_pa_row_id, NULL, &data_len );
+        if ( rc != 0 || p_pa_row_id == NULL || data_len != 1 )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, PRIMARY_ALIGNMENT_ID column", sa_row_id, rc);
+
+        int64_t pa_row_id = *p_pa_row_id;
+        if (pa_row_id == 0)
+        {
+            if (!reported_about_no_pa)
+            {
+                PLOGMSG (klogInfo, (klogInfo, "$(ACC) has secondary alignments without primary", "ACC=%s", accession));
+                reported_about_no_pa = true;
+            }
+            continue;
+        }
+
+        // PA:HAS_REF_OFFSET
+        rc = VCursorCellDataDirect ( pa_cursor, pa_row_id, pa_has_ref_offset_idx, NULL, &data_ptr, NULL, &pa_row_len );
+        if ( rc != 0 )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on PRIMARY_ALIGNMENT table, HAS_REF_OFFSET column", pa_row_id, rc);
+
+        // move on when PA.len equal to SA.len
+        if (pa_row_len == sa_row_len)
+            continue;
+
+        if (pa_row_len < sa_row_len)
+        {
+            std::stringstream ss;
+            ss << "PRIMARY_ALIGNMENT:" << pa_row_id << " HAS_REF_OFFSET length (" << pa_row_len << ") less than SECONDARY_ALIGNMENT:" << sa_row_id << " HAS_REF_OFFSET length (" << sa_row_len << ")";
+
+            throw DATA_ERROR(ss.str());
+        }
+
+        // we already know that pa_row_len > sa_row_len
+        ++pa_longer_sa_rows;
+
+        const int32_t * p_seq_read_id;
+        // SA:SEQ_READ_ID
+        rc = VCursorCellDataDirect ( sa_cursor, sa_row_id, sa_seq_read_id_idx, NULL, (const void**)&p_seq_read_id, NULL, &data_len );
+        if ( rc != 0 || p_seq_read_id == NULL || data_len != 1 )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, SEQ_READ_ID column", sa_row_id, rc);
+
+        // one-based read index
+        int32_t seq_read_id = *p_seq_read_id;
+
+        const uint32_t * p_seq_read_len;
+        // SEQ:READ_LEN
+        rc = VCursorCellDataDirect ( seq_cursor, seq_spot_id, seq_read_len_idx, NULL, (const void**)&p_seq_read_len, NULL, &seq_read_len_len );
+        if ( rc != 0 || p_seq_read_len == NULL )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SEQUENCE table, READ_LEN column", seq_spot_id, rc);
+
+        if ( seq_read_id < 1 || (uint32_t)seq_read_id > seq_read_len_len )
+        {
+            std::stringstream ss;
+            ss << "SECONDARY:" << sa_row_id << " SEQ_READ_ID value (" << seq_read_id << ") - 1 based, is out of SEQUENCE:" << seq_spot_id << " READ_LEN range (" << seq_read_len_len << ")";
+
+            throw DATA_ERROR(ss.str());
+        }
+
+        if (pa_row_len != p_seq_read_len[seq_read_id - 1])
+        {
+            std::stringstream ss;
+            ss << "PRIMARY_ALIGNMENT:" << pa_row_id << " HAS_REF_OFFSET length (" << pa_row_len << ") does not match its SEQUENCE:" << seq_spot_id << " READ_LEN[" << seq_read_id - 1 << "] value (" << p_seq_read_len[seq_read_id - 1] << ")";
+
+            throw DATA_ERROR(ss.str());
+        }
+
+        if (pa_longer_sa_rows >= pa_longer_sa_limit)
+        {
+            std::stringstream ss;
+            ss << "Limit violation (pa_longer_sa): there are at least " << pa_longer_sa_rows << " alignments where HAS_REF_OFFSET column is longer in PRIMARY_ALIGNMENT than in SECONDARY_ALIGNMENT";
+
+            throw DATA_ERROR(ss.str());
+        }
+    }
+
+    int64_t seq_id_first;
+    uint64_t seq_row_count;
+
+    rc = VCursorIdRange( seq_cursor, seq_pa_id_idx, &seq_id_first, &seq_row_count );
+    if (rc != 0)
+        throw VDB_ERROR("VCursorIdRange() failed for SEQUENCE table, PRIMARY_ALIGNMENT_ID column", rc);
+
+    uint64_t seq_row_limit;
+    if (config->seq_cutoff_percent > 0)
+        seq_row_limit = ceil( config->seq_cutoff_percent * seq_row_count );
+    else if (config->seq_cutoff_number == 0 || config->seq_cutoff_number > seq_row_count)
+        seq_row_limit = seq_row_count;
+    else
+        seq_row_limit = config->seq_cutoff_number;
+
+    for ( uint64_t i = 0; i < seq_row_count && i < seq_row_limit; ++i )
+    {
+        int64_t seq_row_id = i + seq_id_first;
+        const void * data_ptr = NULL;
+        uint32_t data_len;
+
+        const int64_t * p_seq_pa_id;
+        uint32_t seq_pa_id_len;
+        // SEQ:PRIMARY_ALIGNMENT_ID
+        rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_pa_id_idx, NULL, (const void**)&p_seq_pa_id, NULL, &seq_pa_id_len );
+        if ( rc != 0 || p_seq_pa_id == NULL )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SEQUENCE table, PRIMARY_ALIGNMENT_ID column", seq_row_id, rc);
+
+        const uint32_t * p_seq_read_len;
+        // SEQ:READ_LEN
+        rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_read_len_idx, NULL, (const void**)&p_seq_read_len, NULL, &data_len );
+        if ( rc != 0 || p_seq_read_len == NULL )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SEQUENCE table, READ_LEN column", seq_row_id, rc);
+        if ( seq_pa_id_len != data_len )
+        {
+            std::stringstream ss;
+            ss << "SEQUENCE:" << seq_row_id << " PRIMARY_ALIGNMENT_ID length (" << seq_pa_id_len << ") does not match SEQUENCE:" << seq_row_id << " READ_LEN length (" << data_len << ")";
+
+            throw DATA_ERROR(ss.str());
+        }
+
+        uint64_t sum_unaligned_read_len = 0;
+        for ( uint32_t j = 0; j < seq_pa_id_len; ++j )
+        {
+            if ( p_seq_pa_id[j] == 0 )
+            {
+                sum_unaligned_read_len += p_seq_read_len[j];
+            }
+        }
+
+        // SEQ:CMP_READ
+        rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_cmp_read_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+        if ( rc != 0 || data_ptr == NULL )
+            throw VDB_ROW_ERROR("VCursorCellDataDirect() failed on SEQUENCE table, SEQ:CMP_READ column", seq_row_id, rc);
+
+        if ( sum_unaligned_read_len != data_len )
+        {
+            std::stringstream ss;
+            ss << "SEQUENCE:" << seq_row_id << " CMP_READ length (" << data_len << ") does not match sum of unaligned READ_LEN values (" << sum_unaligned_read_len << ")";
+
+            throw DATA_ERROR(ss.str());
+        }
+    }
+
+    if (sa_row_limit < sa_row_count || seq_row_limit < seq_row_count)
+        PLOGMSG (klogInfo, (klogInfo, "$(ACC) looks good (based on first $(SA_CUTOFF) of SECONDARY_ALIGNMENT and $(SEQ_CUTOFF) SEQUENCE rows)", "ACC=%s,SA_CUTOFF=%lu,SEQ_CUTOFF=%lu", accession, sa_row_limit, seq_row_limit));
+    else
+        PLOGMSG (klogInfo, (klogInfo, "$(ACC) looks good", "ACC=%s", accession));
+}
+
+/**
+ * returns true if accession is good
+ */
+bool checkAccession ( const char * accession, const CheckCorruptConfig * config )
+{
+    rc_t rc;
+    KDirectory * cur_dir;
+    const VDBManager * manager;
+    const VDatabase * database;
+    const VTable * pa_table;
+    const VTable * sa_table;
+    const VTable * seq_table;
+
+    const VCursor * pa_cursor;
+    const VCursor * sa_cursor;
+    const VCursor * seq_cursor;
+
+    rc = KDirectoryNativeDir( &cur_dir );
+    if ( rc != 0 )
+        PLOGERR( klogInt, (klogInt, rc, "$(ACC) KDirectoryNativeDir() failed", "ACC=%s", accession));
+    else
+    {
+        rc = VDBManagerMakeRead ( &manager, cur_dir );
+        if ( rc != 0 )
+            PLOGERR( klogInt, (klogInt, rc, "$(ACC) VDBManagerMakeRead() failed", "ACC=%s", accession));
+        else
+        {
+            int type = VDBManagerPathType ( manager, "%s", accession );
+            if ( ( type & ~ kptAlias ) != kptDatabase )
+                PLOGMSG (klogInfo, (klogInfo, "$(ACC) SKIPPING - can't be opened as a database", "ACC=%s", accession));
+            else
+            {
+                rc = VDBManagerOpenDBRead( manager, &database, NULL, "%s", accession );
+                if (rc != 0)
+                    PLOGERR( klogInt, (klogInt, rc, "$(ACC) VDBManagerOpenDBRead() failed", "ACC=%s", accession));
+                else
+                {
+                    rc = VDatabaseOpenTableRead( database, &pa_table, "%s", "PRIMARY_ALIGNMENT" );
+                    if ( rc != 0 )
+                    {
+                        PLOGMSG (klogInfo, (klogInfo, "$(ACC) SKIPPING - failed to open PRIMARY_ALIGNMENT table", "ACC=%s", accession));
+                        rc = 0;
+                    }
+                    else
+                    {
+                        rc = VTableCreateCursorRead( pa_table, &pa_cursor );
+                        if ( rc != 0 )
+                            PLOGERR( klogInt, (klogInt, rc, "$(ACC) VTableCreateCursorRead() failed for PRIMARY_ALIGNMENT cursor", "ACC=%s", accession));
+                        else
+                        {
+                            rc = VDatabaseOpenTableRead( database, &sa_table, "%s", "SECONDARY_ALIGNMENT" );
+                            if ( rc != 0 )
+                            {
+                                PLOGMSG (klogInfo, (klogInfo, "$(ACC) SKIPPING - failed to open SECONDARY_ALIGNMENT table", "ACC=%s", accession));
+                                rc = 0;
+                            }
+                            else
+                            {
+                                rc = VTableCreateCursorRead( sa_table, &sa_cursor );
+                                if ( rc != 0 )
+                                    PLOGERR( klogInt, (klogInt, rc, "$(ACC) VTableCreateCursorRead() failed for SECONDARY_ALIGNMENT cursor", "ACC=%s", accession));
+                                else
+                                {
+                                    rc = VDatabaseOpenTableRead( database, &seq_table, "%s", "SEQUENCE" );
+                                    if ( rc != 0 )
+                                    {
+                                        PLOGMSG (klogInfo, (klogInfo, "$(ACC) SKIPPING - failed to open SEQUENCE table", "ACC=%s", accession));
+                                        rc = 0;
+                                    }
+                                    else
+                                    {
+                                        rc = VTableCreateCursorRead( seq_table, &seq_cursor );
+                                        if ( rc != 0 )
+                                            PLOGERR( klogInt, (klogInt, rc, "VTableCreateCursorRead() failed for SEQUENCE cursor", "ACC=%s", accession));
+                                        else
+                                        {
+                                            try {
+                                                runChecks( accession, config, pa_cursor, sa_cursor, seq_cursor );
+                                            } catch ( VDB_ERROR & x ) {
+                                                PLOGERR (klogErr, (klogInfo, x.rc, "$(ACC) VDB error: $(MSG)", "ACC=%s,MSG=%s", accession, x.msg));
+                                                rc = 1;
+                                            } catch ( VDB_ROW_ERROR & x ) {
+                                                PLOGERR (klogErr, (klogInfo, x.rc, "$(ACC) VDB error: $(MSG) row_id: $(ROW_ID)", "ACC=%s,MSG=%s,ROW_ID=%ld", accession, x.msg, x.row_id));
+                                                rc = 1;
+                                            } catch ( DATA_ERROR & x ) {
+                                                KOutMsg("%s\n", accession);
+                                                PLOGMSG (klogInfo, (klogInfo, "$(ACC) Invalid data: $(MSG) ", "ACC=%s,MSG=%s", accession, x.msg.c_str()));
+                                                rc = 1;
+                                            }
+                                            VCursorRelease( seq_cursor );
+                                        }
+                                        VTableRelease( seq_table );
+                                    }
+                                    VCursorRelease( sa_cursor );
+                                }
+                                VTableRelease( sa_table );
+                            }
+                            VCursorRelease( pa_cursor );
+                        }
+                        VTableRelease( pa_table );
+                    }
+                    VDatabaseRelease( database );
+                }
+            }
+            VDBManagerRelease( manager );
+        }
+        KDirectoryRelease( cur_dir );
+    }
+    return rc == 0;
+}
+
+//////////////////////////////////////////// Main
+extern "C"
+{
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+#include <kapp/log-xml.h>
+
+const char UsageDefaultName[] = "test-general-loader";
+
+#define ALIAS_SA_CUTOFF    NULL
+#define OPTION_SA_CUTOFF   "sa-cutoff"
+
+static const char * sa_cutoff_usage[] = { "specify maximum amount of secondary alignment rows to look at before saying accession is good, default 100000.",
+        "Specifying '0' will iterate the whole table. Can be in percent (e.g. 5%)",
+        NULL };
+
+#define ALIAS_SEQ_CUTOFF    NULL
+#define OPTION_SEQ_CUTOFF   "seq-cutoff"
+
+static const char * seq_cutoff_usage[] = { "specify maximum amount of sequence table rows to look at before saying accession is good, default 100000.",
+        "Specifying '0' will iterate the whole table. Can be in percent (e.g. 5%)",
+        NULL };
+
+#define ALIAS_SA_SHORT_THRESHOLD NULL
+#define OPTION_SA_SHORT_THRESHOLD "sa-short-threshold"
+static const char * sa_short_threshold_usage[] = { "specify amount of secondary alignment which are shorter (hard-clipped) than corresponding primaries, default 1%.",
+        NULL };
+
+OptDef Options[] = {
+      { OPTION_SA_CUTOFF          , ALIAS_SA_CUTOFF          , NULL, sa_cutoff_usage            , 1, true , false },
+      { OPTION_SEQ_CUTOFF         , ALIAS_SEQ_CUTOFF         , NULL, seq_cutoff_usage           , 1, true , false },
+      { OPTION_SA_SHORT_THRESHOLD , ALIAS_SA_SHORT_THRESHOLD , NULL, sa_short_threshold_usage   , 1, true , false }
+};
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] path [path ...]\n"
+        "\n"
+        "Summary:\n"
+        "  Validate a list of runs for corrupted data\n"
+        "\n", progname);
+    return 0;
+}
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    KOutMsg ("Options:\n");
+
+    HelpOptionLine(ALIAS_SA_CUTOFF          , OPTION_SA_CUTOFF           , "cutoff"    , sa_cutoff_usage);
+    HelpOptionLine(ALIAS_SEQ_CUTOFF         , OPTION_SEQ_CUTOFF          , "cutoff"    , seq_cutoff_usage);
+    HelpOptionLine(ALIAS_SA_SHORT_THRESHOLD , OPTION_SA_SHORT_THRESHOLD  , "threshold" , sa_short_threshold_usage);
+    XMLLogger_Usage();
+
+    KOutMsg ("\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+rc_t parseArgs ( Args * args, CheckCorruptConfig * config )
+{
+    rc_t rc;
+    uint32_t opt_count;
+    rc = ArgsOptionCount ( args, OPTION_SA_CUTOFF, &opt_count );
+    if (rc)
+    {
+        LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SA_CUTOFF);
+        return rc;
+    }
+
+    if (opt_count > 0)
+    {
+        const char * value;
+        size_t value_size;
+        rc = ArgsOptionValue ( args, OPTION_SA_CUTOFF, 0, (const void **) &value );
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SA_CUTOFF);
+            return rc;
+        }
+
+        value_size = string_size ( value );
+        if ( value_size >= 1 && value[value_size - 1] == '%' )
+        {
+            config->sa_cutoff_percent = string_to_U64 ( value, value_size - 1, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SA_CUTOFF);
+                return rc;
+            }
+            else if (config->sa_cutoff_percent == 0 || config->sa_cutoff_percent > 100)
+            {
+                LOGERR (klogInt, rc, OPTION_SA_CUTOFF " has illegal percentage value (has to be 1-100%)" );
+                return 1;
+            }
+            config->sa_cutoff_percent /= 100;
+        }
+        else
+        {
+            config->sa_cutoff_percent = -1;
+            config->sa_cutoff_number = string_to_U64 ( value, value_size, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SA_CUTOFF);
+                return rc;
+            }
+        }
+    }
+
+    rc = ArgsOptionCount ( args, OPTION_SEQ_CUTOFF, &opt_count );
+    if (rc)
+    {
+        LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SEQ_CUTOFF);
+        return rc;
+    }
+
+    if (opt_count > 0)
+    {
+        const char * value;
+        size_t value_size;
+        rc = ArgsOptionValue ( args, OPTION_SEQ_CUTOFF, 0, (const void **) &value );
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SEQ_CUTOFF);
+            return rc;
+        }
+
+        value_size = string_size ( value );
+        if ( value_size >= 1 && value[value_size - 1] == '%' )
+        {
+            config->seq_cutoff_percent = string_to_U64 ( value, value_size - 1, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SEQ_CUTOFF);
+                return rc;
+            }
+            else if (config->seq_cutoff_percent == 0 || config->seq_cutoff_percent > 100)
+            {
+                LOGERR (klogInt, rc, OPTION_SEQ_CUTOFF " has illegal percentage value (has to be 1-100%)" );
+                return 1;
+            }
+            config->seq_cutoff_percent /= 100;
+        }
+        else
+        {
+            config->seq_cutoff_percent = -1;
+            config->seq_cutoff_number = string_to_U64 ( value, value_size, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SEQ_CUTOFF);
+                return rc;
+            }
+        }
+    }
+
+    rc = ArgsOptionCount ( args, OPTION_SA_SHORT_THRESHOLD, &opt_count );
+    if (rc)
+    {
+        LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SA_SHORT_THRESHOLD);
+        return rc;
+    }
+
+    if (opt_count > 0)
+    {
+        const char * value;
+        size_t value_size;
+        rc = ArgsOptionValue ( args, OPTION_SA_SHORT_THRESHOLD, 0, (const void **) &value );
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SA_SHORT_THRESHOLD);
+            return rc;
+        }
+
+        value_size = string_size ( value );
+        if ( value_size >= 1 && value[value_size - 1] == '%' )
+        {
+            config->pa_len_threshold_percent = string_to_U64 ( value, value_size - 1, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SA_SHORT_THRESHOLD);
+                return rc;
+            }
+            else if (config->pa_len_threshold_percent == 0 || config->pa_len_threshold_percent > 100)
+            {
+                LOGERR (klogInt, rc, OPTION_SA_SHORT_THRESHOLD " has illegal percentage value (has to be 1-100%)" );
+                return 1;
+            }
+            config->pa_len_threshold_percent /= 100;
+        }
+        else
+        {
+            config->pa_len_threshold_percent = -1;
+            config->pa_len_threshold_number = string_to_U64 ( value, value_size, &rc );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SA_SHORT_THRESHOLD);
+                return rc;
+            }
+        }
+    }
+
+    return 0;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    XMLLogger const *xlogger = NULL;
+    Args * args;
+    rc_t rc;
+    bool any_failed = false;
+    CheckCorruptConfig config = { -1.0, SA_TABLE_LOOKUP_LIMIT, -1.0, SEQ_TABLE_LOOKUP_LIMIT, PA_LONGER_SA_LIMIT, 0 };
+
+    KLogLevelSet(klogInfo);
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+                            sizeof (Options) / sizeof (Options[0]),
+                            XMLLogger_Args, XMLLogger_ArgsQty);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    else
+    {
+        rc = XMLLogger_Make(&xlogger, NULL, args);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to make xml logger");
+        else
+        {
+            rc = parseArgs ( args, &config );
+            if (rc == 0)
+            {
+                uint32_t pcount;
+                rc = ArgsParamCount ( args, &pcount );
+                if (rc)
+                    LOGERR (klogInt, rc, "ArgsParamCount() failed");
+                else
+                {
+                    if ( pcount == 0 )
+                        LOGMSG (klogErr, "no accessions were passed in");
+                    else
+                    {
+                        for ( uint32_t i = 0; i < pcount; ++i )
+                        {
+                            const char * accession;
+                            rc = ArgsParamValue ( args, i, (const void **)&accession );
+                            if (rc)
+                            {
+                                PLOGERR (klogInt, (klogInt, rc, "failed to get $(PARAM_I) accession from command line", "PARAM_I=%d", i));
+                                any_failed = true;
+                            }
+                            else
+                            {
+                                if (!checkAccession ( accession, &config ))
+                                    any_failed = true;
+                            }
+                        }
+
+                        if (!any_failed)
+                            LOGMSG (klogInfo, "All accessions are good!");
+                    }
+                }
+            }
+            XMLLogger_Release(xlogger);
+        }
+        ArgsWhack ( args );
+    }
+    return rc != 0 || any_failed ? 1 : 0;
+}
+
+}
diff --git a/tools/vdb-validate/vdb-validate.c b/tools/vdb-validate/vdb-validate.c
new file mode 100644
index 0000000..32eb1b6
--- /dev/null
+++ b/tools/vdb-validate/vdb-validate.c
@@ -0,0 +1,3351 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/manager-priv.h> /* VFSManagerOpenFileReadDecrypt */
+#include <vfs/manager.h> /* VFSManagerMake */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPathMake */
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/log-xml.h>
+
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kdb/consistency-check.h>
+#include <kdb/kdb-priv.h> /* KTableOpenDirectoryRead */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/dependencies.h> /* UIError */
+#include <vdb/vdb-priv.h> /* VTableOpenKTableRead */
+
+#include <krypto/encfile.h> /* KEncFileValidate */
+#include <krypto/wgaencrypt.h> /* KEncFileValidate */
+
+#include <kfs/kfs-priv.h>
+#include <kfs/sra.h>
+#include <kfs/tar.h>
+#include <kfs/file.h> /* KFileRelease */
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <sra/srapath.h>
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/text.h> /* String */
+#include <klib/status.h> /* STSMSG */
+#include <klib/debug.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <math.h>
+
+#ifndef MIN
+#define MIN(a,b)    (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b)    (((a) > (b)) ? (a) : (b))
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+#define SDC_ROW_CHUNK_MAX 8ull*1024ull*1024ull
+
+#if 0
+#define DBG_MSG(args) KOutMsg args
+#else
+#define DBG_MSG(args)
+#endif
+
+static bool exhaustive;
+static bool md5_required;
+static bool ref_int_check;
+static bool s_IndexOnly;
+static size_t memory_suggestion = (2ull * 1024ull * 1024ull * 1024ull);
+
+typedef struct node_s {
+    int parent;
+    int prvSibl;
+    int nxtSibl;
+    int firstChild;
+    unsigned depth;
+    unsigned name;
+    uint32_t objType;
+} node_t;
+typedef struct cc_context_s {
+    node_t *nodes;
+    char *names;
+    rc_t rc;
+    unsigned num_columns;
+    unsigned nextNode;
+    unsigned nextName;
+} cc_context_t;
+static
+rc_t report_rtn ( rc_t rc )
+{
+    return exhaustive ? 0 : rc;
+}
+
+static rc_t report_index(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Index '$(index)': $(mesg)",
+                "index=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_Index:
+        return 0; /* continue with check */
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of index '$(index)' failed MD5 check",
+                "file=%s,index=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_column(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Column '$(column)': $(mesg)",
+                "column=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Column '$(column)': $(mesg)",
+                "column=%s,mesg=%s", what->objName,
+                what->info.done.mesg ? what->info.done.mesg : "checked"));
+            ++ctx->num_columns;
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_Blob:
+        return 0; /* continue with check */
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of column '$(column)' failed MD5 check",
+                "file=%s,column=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_table(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Table '$(table)': $(mesg)",
+                "table=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+                && md5_required)
+            {
+                rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Table '$(table)': is missing required md5 files",
+                    "table=%s", what->objName));
+                return rc;
+            }
+            else if (strncmp("unexpected object ",
+                what->info.done.mesg, 18) == 0)
+            {
+                (void)PLOGMSG(klogWarn, (klogWarn,
+                    "Table '$(tbl)': $(mesg)", "tbl=%s,mesg=%s",
+                    what->objName, what->info.done.mesg));
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo,
+                    "Table '$(tbl)' metadata: $(mesg)",
+                    "tbl=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of table '$(table)' failed MD5 check",
+                "file=%s,table=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_database(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Database '$(db)': $(mesg)",
+                "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+                && md5_required)
+            {
+                rc_t rc
+                    = RC(rcExe, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Database '$(table)': is missing required md5 files",
+                    "table=%s", what->objName));
+                return rc;
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo,
+                    "Database '$(db)' metadata: $(mesg)",
+                    "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of database '$(db)' failed MD5 check",
+                "file=%s,db=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t visiting(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    unsigned const nn = ctx->nextNode++;
+    node_t *const nxt = &ctx->nodes[nn];
+    node_t *const cur = nxt - 1;
+
+    nxt->parent = nxt->prvSibl = nxt->nxtSibl = nxt->firstChild = -1;
+    nxt->depth = what->info.visit.depth;
+    nxt->objType = what->objType;
+    nxt->name = ctx->nextName;
+    ctx->nextName += (unsigned)strlen(what->objName) + 1;
+    strcpy(&ctx->names[nxt->name], what->objName);
+
+    if (nn) {
+        if (cur->depth == nxt->depth) {
+            nxt->parent = cur->parent;
+            nxt->prvSibl = nn - 1;
+            cur->nxtSibl = nn;
+        }
+        else if (cur->depth < nxt->depth) {
+            nxt->parent = nn - 1;
+            cur->firstChild = nn;
+        }
+        else {
+            unsigned sibling = cur->parent;
+
+            while (ctx->nodes[sibling].depth > nxt->depth)
+                sibling = ctx->nodes[sibling].parent;
+            nxt->parent = ctx->nodes[sibling].parent;
+            nxt->prvSibl = sibling;
+            ctx->nodes[sibling].nxtSibl = nn;
+        }
+    }
+    return 0;
+}
+
+static rc_t CC report(CCReportInfoBlock const *what, void *Ctx)
+{
+    cc_context_t *ctx = Ctx;
+    rc_t rc = Quitting();
+
+    if (rc)
+        return rc;
+
+    if (what->type == ccrpt_Visit)
+        return visiting(what, ctx);
+
+    switch (what->objType) {
+    case kptDatabase:
+        return report_database(what, ctx);
+    case kptTable:
+        return report_table(what, ctx);
+    case kptColumn:
+        return report_column(what, ctx);
+    case kptIndex:
+        return report_index(what, ctx);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static
+rc_t kdbcc ( const KDBManager *mgr, char const name[], uint32_t mode,
+    KPathType *pathType, bool is_file, node_t nodes[], char names[],
+    INSDC_SRA_platform_id platform )
+{
+    rc_t rc = 0;
+    cc_context_t ctx;
+    char const *objtype;
+
+    uint32_t level = ( mode & 4 ) ? 3 : ( mode & 2 ) ? 1 : 0;
+    if (s_IndexOnly)
+        level |= CC_INDEX_ONLY;
+
+
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.nodes = &nodes[0];
+    ctx.names = &names[0];
+
+    if (KDBManagerExists(mgr, kptDatabase, "%s", name))
+        *pathType = kptDatabase;
+    else if (KDBManagerExists(mgr, kptTable, "%s", name))
+        *pathType = kptTable;
+    else if (*pathType == kptDatabase || *pathType == kptTable)
+        /* is known already: may be encrypted */ ( void) 0;
+    else
+    {
+        rc = RC(rcExe, rcPath, rcValidating, rcType, rcUnknown);
+        (void)PLOGERR(klogErr, (klogErr, rc, "Object '$(table)' "
+            "has unknown type", "table=%s", name));
+        return rc;
+    }
+
+    if (*pathType == kptDatabase)
+    {
+        const KDatabase *db;
+
+        objtype = "database";
+        rc = KDBManagerOpenDBRead ( mgr, & db, "%s", name );
+        if ( rc == 0 )
+        {
+            rc = KDatabaseConsistencyCheck ( db, 0, level, report, & ctx );
+            if ( rc == 0 )
+            {
+                rc = ctx.rc;
+                if ( s_IndexOnly )
+                    (void)LOGMSG(klogInfo, "Indices: checked");
+            }
+
+            KDatabaseRelease ( db );
+        }
+    }
+    else
+    {
+        const KTable *tbl;
+
+        objtype = "table";
+        rc = KDBManagerOpenTableRead ( mgr, & tbl, "%s", name );
+        if ( rc == 0 )
+        {
+            rc = KTableConsistencyCheck ( tbl, 0, level, report, & ctx, platform );
+            if ( rc == 0 )
+                rc = ctx.rc;
+
+            if ( rc == 0 && s_IndexOnly )
+                (void)LOGMSG(klogInfo, "Index: checked");
+
+            KTableRelease ( tbl );
+        }
+    }
+
+    if (rc == 0 && ctx.num_columns == 0 && !s_IndexOnly)
+    {
+        if (is_file)
+        {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+                                     "the file '$(file)' has no checksums or is truncated.",
+                                     "file=%s", name));
+        }
+        else
+        {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+                                     "the $(type) '$(file)' has no checksums or is empty.",
+                                     "type=%s,file=%s", objtype, name));
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t vdbcc ( const VDBManager *mgr, char const name[], uint32_t mode,
+    KPathType *pathType, bool is_file)
+{
+#if 0
+    if ( ( mode & 8) != 0 )
+    {
+        const VTable *tbl;
+        rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, NULL, "%s", name);
+        if (rc == 0)
+            rc = VTableConsistencyCheck(tbl, 2);
+        return rc;
+    }
+#endif
+    return 0;
+}
+
+typedef struct ColumnInfo_s {
+    char const *name;
+    union {
+        void     const *vp;
+        char     const *string;
+        bool     const *tf;
+        int8_t   const *i8;
+        uint8_t  const *u8;
+        int16_t  const *i16;
+        uint16_t const *u16;
+        int32_t  const *i32;
+        uint32_t const *u32;
+        int64_t  const *i64;
+        uint64_t const *u64;
+        float    const *f32;
+        double   const *f64;
+    } value;
+    uint32_t idx;
+    uint32_t elem_bits;
+    uint32_t elem_count;
+} ColumnInfo;
+
+static rc_t CC get_sizes_cb(const KDirectory *dir,
+    uint32_t type, const char *name, void *data)
+{
+    struct {
+        unsigned count;
+        size_t size;
+    } *pb = data;
+
+    ++pb->count;
+    pb->size += strlen(name) + 1;
+
+    return 0;
+}
+
+static rc_t get_sizes(KDirectory const *dir, unsigned *nobj, size_t *namesz)
+{
+    rc_t rc;
+    struct {
+        unsigned count;
+        size_t size;
+    } pb;
+
+    memset(&pb, 0, sizeof(pb));
+    rc = KDirectoryVVisit(dir, true, get_sizes_cb, &pb, NULL, NULL);
+    if (rc)
+        memset(&pb, 0, sizeof(pb));
+    *nobj = pb.count;
+    *namesz = pb.size;
+    return rc;
+}
+
+static rc_t EncFileReadAll(const char *name,
+    char *buffer, size_t bsize, size_t *num_read)
+{
+    rc_t rc = 0;
+
+    VFSManager *mgr = NULL;
+    VPath *path = NULL;
+    const KFile *f = NULL;
+
+    rc = VFSManagerMake(&mgr);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failed to VFSManagerMake()");
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMakePath (mgr, &path, "%s", name);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to VPathMake($(name))", "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerOpenFileReadDecrypt(mgr, &f, path);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to VFSManagerOpenFileReadDecrypt($(name))",
+                "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KFileReadAll(f, 0, buffer, bsize, num_read);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to KFileReadAll($(name))", "name=%s", name));
+        }
+    }
+
+    KFileRelease(f);
+    VPathRelease(path);
+    VFSManagerRelease(mgr);
+
+    return rc;
+}
+
+
+#if 0
+static rc_t verify_encryption(const KDirectory *dir, const char *name,
+    bool *enc, bool *sra)
+{
+    rc_t rc = 0;
+    const KFile *f = NULL;
+    char buffer[24];
+    size_t num_read = ~0;
+
+    assert(enc && sra);
+    *enc = false;
+    *sra = true;
+
+    rc = KDirectoryOpenFileRead(dir, &f, "%s", name);
+    if (rc == 0) {
+        rc = KFileReadAll(f, 0, &buffer, sizeof buffer, &num_read);
+    }
+
+    if (rc == 0) {
+        size_t sz = num_read < 8 ? num_read : 8;
+        assert(num_read <= sizeof buffer);
+        rc = KFileIsEnc(buffer, sz);
+        if (rc == 0)
+        {
+            (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is encrypted",
+                "f=%s", name));
+            *enc = true;
+            rc = KEncFileValidate(f);
+            if (rc != 0) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failure of encryption "
+                    "validation of file '$(name)'", "name=%s", name));
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)': encryption OK",
+                    "f=%s", name));
+                rc = EncFileReadAll(name, buffer, sizeof buffer, &num_read);
+            }
+        }
+        else {
+            rc = 0;
+            (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is not encrypted",
+                "f=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KFileIsSRA(buffer, num_read);
+        if (rc == 0) {
+            *sra = true;
+        }
+        else if (rc
+            == SILENT_RC(rcFS, rcFile, rcIdentifying, rcBuffer, rcWrongType))
+        {
+            rc = 0;
+            *sra = false;
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to KFileIsSRA($(name))", "name=%s", name));
+        }
+    }
+
+    KFileRelease(f);
+
+    return rc;
+}
+#endif
+
+static rc_t init_dbcc(KDirectory const *dir, char const name[], bool is_file,
+    node_t **nodes, char **names, KPathType *pathType)
+{
+    KDirectory const *obj;
+    unsigned nobj;
+    size_t namesz;
+    rc_t rc = 0;
+
+    assert(pathType);
+
+    if (is_file) {
+        rc = KDirectoryOpenSraArchiveRead_silent(dir, &obj, false, "%s", name);
+        if (rc != 0)
+        {   rc = KDirectoryOpenTarArchiveRead_silent(dir, &obj, false, "%s", name); }
+        if (rc != 0) {
+            const VDBManager *mgr = NULL;
+            const VTable *tbl = NULL;
+            VSchema *sra_schema = NULL;
+            rc = VDBManagerMakeRead(&mgr, dir);
+            if (rc != 0)
+            {   return rc; }
+            for ( ; rc == 0; ) {
+                rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, "%s", name);
+                VSchemaRelease(sra_schema);
+                if (rc == 0) {
+                    const KTable *ktbl = NULL;
+                    rc = VTableOpenKTableRead(tbl, &ktbl);
+                    if (rc == 0)
+                    {   rc = KTableOpenDirectoryRead(ktbl, &obj); }
+                    KTableRelease(ktbl);
+                    *pathType = kptTable;
+                    break;
+                }
+                else if (GetRCState(rc) == rcNotFound
+                    && GetRCObject(rc) == (enum RCObject)rcSchema && sra_schema == NULL)
+                {
+                     rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+                }
+                else {
+                    const VDatabase *db = NULL;
+                    const KDatabase *kdb = NULL;
+                    rc = VDBManagerOpenDBRead(mgr, &db, NULL, "%s", name);
+                    if (rc == 0)
+                    {   rc = VDatabaseOpenKDatabaseRead(db, &kdb); }
+                    if (rc == 0)
+                    {   rc = KDatabaseOpenDirectoryRead(kdb, &obj); }
+                    if (rc == 0)
+                    {   *pathType = kptDatabase; }
+                    KDatabaseRelease(kdb);
+                    VDatabaseRelease(db);
+                    break;
+                }
+            }
+            VTableRelease(tbl);
+            VDBManagerRelease(mgr);
+        }
+    }
+    else {
+        rc = KDirectoryOpenDirRead(dir, &obj, false, "%s", name);
+    }
+    if (rc)
+        return rc;
+    rc = get_sizes(obj, &nobj, &namesz);
+    KDirectoryRelease(obj);
+    if (rc) {
+        *nodes = NULL;
+        *names = NULL;
+    }
+    else {
+        *nodes = calloc(1, nobj * sizeof(**nodes) + namesz);
+        if (nodes)
+            *names = (char *)&(*nodes)[nobj];
+        else
+            rc = RC(rcExe, rcSelf, rcConstructing, rcMemory, rcExhausted);
+    }
+    return rc;
+}
+
+static rc_t get_schema_info(KMetadata const *meta, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMDataNode const *node;
+    rc_t rc = KMetadataOpenNodeRead(meta, &node, "schema");
+
+    if (rc == 0) {
+        size_t sz;
+
+        rc = KMDataNodeReadAttr(node, "name", buffer, bsz, &sz);
+        if (rc == 0) {
+            buffer[sz] = '\0';
+            *vers = &buffer[sz];
+            while (sz) {
+                --sz;
+                if (buffer[sz] == '#') {
+                    buffer[sz] = '\0';
+                    *vers = &buffer[sz + 1];
+                    break;
+                }
+            }
+        }
+        KMDataNodeRelease(node);
+    }
+    return rc;
+}
+
+static rc_t get_tbl_schema_info(VTable const *tbl, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VTableOpenMetadataRead(tbl, &meta);
+
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+    return 0;
+}
+
+static rc_t get_db_schema_info(VDatabase const *db, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VDatabaseOpenMetadataRead(db, &meta);
+
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0)
+    {
+        rc = get_schema_info(meta, buffer, bsz, vers);
+        KMetadataRelease(meta);
+    }
+
+    return rc;
+}
+
+static rc_t sra_dbcc_454(VTable const *tbl, char const name[])
+{
+    /* TODO: complete this */
+    return 0;
+}
+
+typedef struct vdb_validate_params vdb_validate_params;
+struct vdb_validate_params
+{
+    const KDirectory *wd;
+    const KDBManager *kmgr;
+    const VDBManager *vmgr;
+
+    bool md5_chk;
+    bool md5_chk_explicit;
+    bool blob_crc;
+    bool index_chk;
+    bool consist_check;
+    bool exhaustive;
+
+    // data integrity checks parameters
+    bool sdc_enabled;
+    bool sdc_sec_rows_in_percent;
+    union
+    {
+        double percent;
+        uint64_t number;
+    } sdc_sec_rows;
+
+    bool sdc_seq_rows_in_percent;
+    union
+    {
+        double percent;
+        uint64_t number;
+    } sdc_seq_rows;
+
+    bool sdc_pa_len_thold_in_percent;
+    union
+    {
+        double percent;
+        uint64_t number;
+    } sdc_pa_len_thold;
+};
+
+static rc_t tableConsistCheck(const vdb_validate_params *pb, const VTable *tbl)
+{
+    rc_t rce = 0;
+
+    const VCursor *curs = NULL;
+
+    int64_t firstREAD_LEN = 0;
+    uint64_t countREAD_LEN = 0;
+
+    uint64_t i = 0;
+
+    ColumnInfo readLen;
+    ColumnInfo spotLen;
+
+    memset(&readLen, 0, sizeof readLen);
+    memset(&spotLen, 0, sizeof spotLen);
+
+    assert(pb);
+
+    if (!pb->consist_check) {
+        return 0;
+    }
+
+    rce = VTableCreateCursorRead(tbl, &curs);
+    if (rce != 0) {
+        return rce;
+    }
+    if (rce == 0) {
+        readLen.name = "READ_LEN";
+        rce = VCursorAddColumn(curs, &readLen.idx, "%s", readLen.name);
+    }
+    if (rce == 0) {
+        spotLen.name = "SPOT_LEN";
+        rce = VCursorAddColumn(curs, &spotLen.idx, "%s", spotLen.name);
+    }
+
+    if (rce == 0) {
+        assert(readLen.idx && spotLen.idx);
+        if (readLen.idx == 0) {
+            rce = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+            LOGERR(klogErr, rce, "Cannot find 'READ_LEN' column");
+        }
+        else if (spotLen.idx == 0) {
+            rce = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+            LOGERR(klogErr, rce, "Cannot find 'SPOT_LEN' column");
+        }
+    }
+
+    if (rce == 0) {
+        rce = VCursorOpen(curs);
+    }
+    if (rce == 0) {
+        rce =
+            VCursorIdRange(curs, readLen.idx, &firstREAD_LEN, &countREAD_LEN);
+    }
+    if (rce == 0) {
+        int64_t firstSPOT_LEN = 0;
+        uint64_t countSPOT_LEN = 0;
+        rce =
+            VCursorIdRange(curs, spotLen.idx, &firstSPOT_LEN, &countSPOT_LEN);
+        if (rce == 0) {
+            if (firstREAD_LEN != firstSPOT_LEN) {
+                rce = RC(rcExe, rcTable, rcValidating, rcColumn, rcInvalid);
+                LOGERR(klogErr, rce, "The first ID-s "
+                    "in READ_LEN and SPOT_LEN columns do not match");
+            }
+            else if (countREAD_LEN != countSPOT_LEN) {
+                rce = RC(rcExe, rcTable, rcValidating, rcColumn, rcInvalid);
+                LOGERR(klogErr, rce, "ID ranges "
+                    "in READ_LEN and SPOT_LEN columns do not match");
+            }
+        }
+    }
+
+    for (i = 0; i < countREAD_LEN; ++i) {
+        uint32_t n = 0;
+        uint32_t j = 0;
+        rc_t rc = VCursorCellDataDirect(curs, firstREAD_LEN + i,
+            readLen.idx, &readLen.elem_bits,
+            &readLen.value.vp, NULL, &readLen.elem_count);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot read 'READ_LEN' column at row $(row)",
+                "row=%ld", firstREAD_LEN + i));
+            if (rce == 0) {
+                rce = rc;
+            }
+            if (!pb->exhaustive) {
+                break;
+            }
+        }
+        rc = VCursorCellDataDirect(curs, firstREAD_LEN + i,
+            spotLen.idx, &spotLen.elem_bits,
+            &spotLen.value.vp, NULL, &spotLen.elem_count);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot read 'SPOT_LEN' column at row $(row)",
+                "row=%ld", firstREAD_LEN + i));
+            if (rce == 0) {
+                rce = rc;
+            }
+            if (!pb->exhaustive) {
+                break;
+            }
+        }
+
+        if (readLen.value.vp == NULL || spotLen.value.vp == NULL) {
+            rc = RC(rcExe, rcTable, rcValidating, rcData, rcNull);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Invalid 'READ_LEN' or 'SPOT_LEN' value at row $(row)",
+                "row=%ld", firstREAD_LEN + i));
+            if (rce == 0) {
+                rce = rc;
+            }
+            if (!pb->exhaustive) {
+                break;
+            }
+        }
+        for (j = 0; j < readLen.elem_count; ++j) {
+            n += readLen.value.u32[j];
+        }
+        if (n != *(spotLen.value.u32)) {
+            rc = RC(rcExe, rcTable, rcValidating, rcData, rcCorrupt);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Sum(READ_LEN) != SPOT_LEN in row $(row)",
+                "row=%ld", firstREAD_LEN + i));
+            if (rce == 0) {
+                rce = rc;
+            }
+            if (!pb->exhaustive) {
+                break;
+            }
+        }
+    }
+
+    if (rce == 0) {
+        LOGMSG(klogInfo, "Columns 'READ_LEN' and 'SPOT_LEN' are consistent");
+    }
+
+    VCursorRelease(curs);
+
+    return rce;
+}
+
+static rc_t sra_dbcc_fastq(const vdb_validate_params *pb,
+    const VTable *tbl, char const name[])
+{
+    static char const *const cn_FastQ[] = {
+        "READ", "QUALITY", "SPOT_LEN", "READ_START", "READ_LEN", "READ_TYPE"
+    };
+
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+    if (rc == 0) {
+        unsigned const n = sizeof(cn_FastQ)/sizeof(cn_FastQ[0]);
+        ColumnInfo cols[sizeof(cn_FastQ)/sizeof(cn_FastQ[0])];
+        unsigned i;
+
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_FastQ[i];
+            VCursorAddColumn(curs, &cols[i].idx, "%s", cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+                    &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            if (   cols[0].idx == 0 || cols[0].elem_bits == 0
+                                                    || cols[0].value.vp == NULL
+                || cols[1].idx == 0 || cols[1].elem_bits == 0
+                                                    || cols[1].value.vp == NULL)
+            {
+                rc = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+            }
+            else if (cols[2].idx == 0 || cols[2].elem_bits == 0
+                                                    || cols[2].value.vp == NULL)
+            {
+                (void)PLOGERR(klogWarn, (klogWarn,
+                    RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound),
+                    "Table '$(name)' is usable for fasta only; no quality data",
+                    "name=%s", name));
+            }
+        }
+        VCursorRelease(curs);
+    }
+
+    if (rc == 0) {
+        rc = tableConsistCheck(pb, tbl);
+    }
+
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Table '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+
+    return rc;
+}
+
+static rc_t VTable_get_platform(VTable const *tbl,
+    INSDC_SRA_platform_id *rslt)
+{
+    rc_t rc;
+    VCursor const *curs;
+    INSDC_SRA_platform_id platform = -1;
+
+    rc = VTableCreateCursorRead(tbl, &curs);
+    if (rc == 0) {
+        uint32_t cid;
+
+        rc = VCursorAddColumn(curs, &cid, "("sra_platform_id_t")PLATFORM");
+        if (rc == 0) {
+            rc = VCursorOpen(curs);
+            if (rc == 0) {
+                uint32_t ebits;
+                void const *data;
+                uint32_t boff;
+                uint32_t ecnt;
+
+                rc = VCursorCellDataDirect(curs, 1, cid,
+                    &ebits, &data, &boff, &ecnt);
+                if (rc == 0) {
+                    if (ebits == sizeof(platform) * 8 && boff == 0 && ecnt == 1)
+                        platform = ((INSDC_SRA_platform_id *)data)[0];
+                    else
+                        rc =
+                            RC(rcExe, rcTable, rcReading, rcType, rcUnexpected);
+                }
+            }
+        }
+        else
+            rc = 0;
+        VCursorRelease(curs);
+    }
+    rslt[0] = platform;
+    return rc;
+}
+
+static rc_t verify_table(const vdb_validate_params *pb,
+    const VTable *tbl, char const name[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc = 0;
+
+    get_tbl_schema_info(tbl, schemaName, sizeof(schemaName), &schemaVers);
+
+    if (schemaName[0] == '\0' || strncmp(schemaName, "NCBI:SRA:", 9) == 0) {
+        /* SRA or legacy SRA */
+        INSDC_SRA_platform_id platform;
+
+        rc = VTable_get_platform(tbl, &platform);
+        if (rc == 0) {
+            if (platform == (INSDC_SRA_platform_id)-1) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Couldn't determine "
+                    "SRA Platform; type of table '$(name)' is indeterminate.",
+                    "name=%s", name));
+            }
+            rc = sra_dbcc_fastq(pb, tbl, name);
+            if (rc == 0 && platform == SRA_PLATFORM_454) {
+                rc = sra_dbcc_454(tbl, name);
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to read table '$(name)'", "name=%s", name));
+        }
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_table(const vdb_validate_params *pb, char const name[])
+{
+    rc_t rc = 0;
+
+    const VTable *tbl = NULL;
+    VSchema *sra_schema = NULL;
+
+    const VDBManager *mgr = NULL;
+
+    assert(pb);
+
+    mgr = pb->vmgr;
+
+    for ( ; ; ) {
+        rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, "%s", name);
+        VSchemaRelease(sra_schema);
+        if (rc == 0) {
+            rc = verify_table(pb, tbl, name);
+            break;
+        }
+        else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == (enum RCObject)rcSchema
+            && sra_schema == NULL)
+        {
+            rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Failed to open table '$(name)'", "name=%s", name));
+                break;
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to open table '$(name)'", "name=%s", name));
+            break;
+        }
+    }
+
+    RELEASE(VSchema, sra_schema);
+    RELEASE(VTable, tbl);
+
+    return rc;
+}
+
+#if 0
+static rc_t verify_db_table(VDatabase const *db, char const name[])
+{
+    VTable const *tbl;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, "%s", name);
+
+    if (rc == 0) {
+        rc = verify_table(tbl, name);
+        VTableRelease(tbl);
+    }
+    else {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Failed to open table '$(name)'", "name=%s", name));
+    }
+    return rc;
+}
+
+static rc_t align_dbcc_primary_alignment(VTable const *tbl, char const name[])
+{
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+    if (rc == 0) {
+        static char const *const cn_SAM[] = {
+            "SEQ_NAME",
+            "SAM_FLAGS",
+            "REF_NAME",
+            "REF_POS",
+            "MAPQ",
+            "HAS_MISMATCH",
+            "HAS_REF_OFFSET",
+            "REF_OFFSET",
+            "MATE_REF_NAME",
+            "MATE_REF_POS",
+            "TEMPLATE_LEN",
+            "READ",
+            "QUALITY"
+        };
+        unsigned const n = sizeof(cn_SAM)/sizeof(cn_SAM[0]);
+        ColumnInfo cols[sizeof(cn_SAM)/sizeof(cn_SAM[0])];
+        unsigned i;
+
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_SAM[i];
+            VCursorAddColumn(curs, &cols[i].idx, "%s", cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+                    &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            for (i = 0; i < n && rc == 0; ++i) {
+                if (cols[i].idx == 0 || cols[i].elem_bits == 0) {
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+                        "could not be used to generate SAM", "name=%s", name));
+                    break;
+                }
+            }
+        }
+        VCursorRelease(curs);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Database '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+    return rc;
+}
+#endif
+
+typedef struct id_pair_s {
+    int64_t first;
+    int64_t second;
+} id_pair_t;
+
+static size_t work_chunk(uint64_t const count)
+{
+    size_t const max = memory_suggestion / (sizeof(id_pair_t));
+    size_t chunk = (size_t)count;
+
+#if 1
+    /* do as many as possible at once */
+    if (chunk > max)
+        chunk = max;
+#else
+    /* break it up into chunks of about equal size */
+    while (chunk > max)
+        chunk /= 2;
+#endif
+    return chunk;
+}
+
+static void sort_key_pairs(size_t const N, id_pair_t array[/* N */])
+{
+    id_pair_t a;
+    id_pair_t b;
+    
+#define GET(P, V) ((void)(V = ((id_pair_t const *)(P))[0]))
+#define SET(P, V) ((void)((((id_pair_t *)(P))[0]) = V))
+#define CMP(A, B) (((GET(A, a)),(GET(B, b))), (a.first  < b.first  ? -1 :      \
+                                               b.first  < a.first  ?  1 :      \
+                                               a.second < b.second ? -1 :      \
+                                               b.second < a.second ?  1 : 0))
+#define SWAP(A, B, C, D) do{GET(A, a); GET(B, b); SET(A, b); SET(B, a);}while(0)
+    KSORT(array, N, sizeof(array[0]), 0, 0);
+#undef SWAP
+#undef CMP
+#undef SET
+#undef GET
+}
+
+static void sort_keys(size_t const N, int64_t array[/* N */])
+{
+#define INDEXOF(A) (((int64_t const *)(A)) - ((int64_t const *)(&array[0])))
+#define CMP(A, B) (array[INDEXOF(A)] - array[INDEXOF(B)])
+#define SWAP(A, B, C, D) do {                                                  \
+    int64_t const a = array[INDEXOF(A)];                                       \
+    int64_t const b = array[INDEXOF(B)];                                       \
+    array[INDEXOF(A)] = b;                                                     \
+    array[INDEXOF(B)] = a; } while(0)
+    KSORT(array, N, sizeof(array[0]), 0, 0);
+#undef SWAP
+#undef CMP
+#undef INDEXOF
+}
+
+#define CHECK_QUITTING do { rc_t const rc = Quitting(); if (rc) return rc; } while(0);
+
+static size_t load_key_pairs(int64_t const startId,
+                             int64_t const endId,
+                             size_t const pairs,
+                             id_pair_t pair[/* pairs */],
+                             VCursor const *const acurs,
+                             ColumnInfo *const aci,
+                             int64_t plast[],
+                             rc_t Rc[])
+{
+    int64_t last_fkey = INT64_MIN;
+    int64_t row = startId;
+    size_t j = 0;
+    bool ordered = true;
+    
+    while (row < endId) {
+        int64_t first;
+        int64_t maybe_last;
+        rc_t const rc1 = VCursorPageIdRange(acurs, aci->idx, row, &first, &maybe_last);
+        int64_t const last = maybe_last < endId ? maybe_last : endId - 1;
+        size_t const count = (last + 1) - first;
+
+        if (rc1) {
+            Rc[0] = rc1;
+            return 0;
+        }
+        CHECK_QUITTING;
+        
+        if (first < row)
+            first = row;
+        if (row != startId && pairs < count + j)
+            break;
+        plast[0] = last;
+        
+        for ( ; j < pairs && row <= last; ++row) {
+            rc_t const rc = VCursorCellDataDirect(acurs, row, aci->idx,
+                                                  &aci->elem_bits, &aci->value.vp,
+                                                  NULL, &aci->elem_count);
+            if (rc == 0) {
+                if (aci->elem_count == 1) {
+                    int64_t const fkey = aci->value.i64[0];
+                    
+                    ordered &= (last_fkey <= fkey);
+                    pair[j].second = row;
+                    pair[j].first = fkey;
+                    last_fkey = fkey;
+                    ++j;
+                }
+                else {
+                    Rc[0] = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+                    return 0;
+                }
+            }
+            else if (!(GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)) {
+                Rc[0] = rc;
+                return 0;
+            }
+            /* row not found might be an error but that won't be decided here */
+        }
+    }
+    if (!ordered)
+        sort_key_pairs(j, pair);
+    
+    Rc[0] = 0;
+    return j;
+}
+
+static bool is_sorted(uint32_t const N, int64_t const key[/* N */])
+{
+    uint32_t i = 0;
+    int64_t last = key[i];
+    
+    for (i = 1; i < N; ++i) {
+        int64_t const cur = key[i];
+        
+        if (cur < last)
+            return false;
+
+        last = cur;
+    }
+    return true;
+}
+
+static rc_t ric_align_generic(int64_t const startId,
+                              uint64_t const count,
+                              size_t const pairs,
+                              id_pair_t pair[/* pairs */],
+                              void *scratch[],
+                              VCursor const *const acurs,
+                              ColumnInfo *const aci,
+                              VCursor const *const bcurs,
+                              ColumnInfo *const bci
+                              )
+{
+    int64_t chunk;
+    int64_t const endId = startId + count;
+    size_t scratch_size = 0;
+
+    for (chunk = startId; chunk < endId; ) {
+        rc_t rc = 0;
+        int64_t last;
+        size_t const n = load_key_pairs(chunk, endId, pairs, pair, acurs, aci, &last, &rc);
+        size_t i;
+        int64_t cur_fkey = 0;
+        uint32_t elem_count = 0;
+        uint32_t current = 0;
+        int64_t const *id = 0;
+
+        if (rc) return rc;
+        if (chunk == last)
+            break;
+        if (chunk != startId) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Referential Integrity: "
+                                     "$(aname) <-> $(bname)"
+                                     " $(pct)% complete",
+                                     "aname=%s,bname=%s,pct=%5.1f",
+                                     aci->name, bci->name,
+                                     (100.0 * (chunk - startId)) / count));
+        }
+        chunk = last;
+        for (i = 0; i < n; ++i) {
+            int64_t const fkey = pair[i].first;
+            int64_t const row = pair[i].second;
+            
+            if (cur_fkey != fkey) {
+                uint32_t dummy;
+                
+                CHECK_QUITTING;
+                
+                rc = VCursorCellDataDirect(bcurs, fkey, bci->idx,
+                                           &dummy, (void const **)&id,
+                                           NULL, &elem_count);
+
+                if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound){
+					(void)PLOGMSG(klogWarn, (klogWarn, "Referential Integrity: "
+                                     "$(aname) <-> $(bname)"
+                                     " failed to retrieve pair $(first) -> $(second)",
+                                     "aname=%s,bname=%s,first=%ld,second=%ld",
+                                     aci->name, bci->name,
+                                     pair[i].first,pair[i].second));
+
+                    return RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                } else if (rc) 
+                    return rc;
+                
+                if (!is_sorted(elem_count, id)) {
+                    if (scratch_size < elem_count) {
+                        void *const temp = realloc(scratch[0], elem_count * sizeof(id[0]));
+                        
+                        if (temp == NULL)
+                            return RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+                        
+                        scratch[0] = temp;
+                        scratch_size = elem_count;
+                    }
+                    memmove(scratch[0], id, elem_count * sizeof(id[0]));
+                    sort_keys(elem_count, scratch[0]);
+                    id = scratch[0];
+                }
+                current = 0;
+                cur_fkey = fkey;
+                while (current < elem_count && id[current] < row) {
+                    ++current;
+                }
+            }
+            if (current >= elem_count || id[current] != row){
+				  (void)PLOGMSG(klogWarn, (klogWarn, "Referential Integrity: "
+                                     "$(aname) <-> $(bname)"
+                                     " inconsistens pair $(first) -> $(second)",
+                                     "aname=%s,bname=%s,first=%ld,second=%ld",
+                                     aci->name, bci->name,
+                                     pair[i].first,pair[i].second));
+
+                return RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+			}
+            ++current;
+        }
+    }
+    return 0;
+}
+
+static rc_t ric_align_ref_and_align(char const dbname[],
+                                    VTable const *ref,
+                                    VTable const *align,
+                                    int which)
+{
+    char const *const id_col_name = which == 0 ? "PRIMARY_ALIGNMENT_IDS"
+                                  : which == 1 ? "SECONDARY_ALIGNMENT_IDS"
+                                  : which == 2 ? "EVIDENCE_ALIGNMENT_IDS"
+                                  : NULL;
+    rc_t rc;
+    VCursor const *acurs = NULL;
+    VCursor const *bcurs = NULL;
+    ColumnInfo aci;
+    ColumnInfo bci;
+    int64_t startId;
+    uint64_t count;
+
+    aci.name = "REF_ID";
+    bci.name = id_col_name;
+    
+    rc = VTableCreateCursorRead(align, &acurs);
+    if (rc == 0) {
+        rc = VCursorAddColumn(acurs, &aci.idx, "%s", aci.name);
+        if (rc == 0)
+            rc = VCursorOpen(acurs);
+        if (rc == 0)
+            rc = VCursorIdRange(acurs, aci.idx, &startId, &count);
+    }
+    if (rc)
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "alignment table can not be read", "name=%s", dbname));
+    else {
+        rc = VTableCreateCursorRead(ref, &bcurs);
+        if (rc == 0)
+            rc = VCursorAddColumn(bcurs, &bci.idx, "%s", bci.name);
+        if (rc == 0)
+            rc = VCursorOpen(bcurs);
+        if (rc)
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                "reference table can not be read", "name=%s", dbname));
+    }
+    if (rc == 0) {
+        size_t const chunk = work_chunk(count);
+        id_pair_t *const pair = malloc(sizeof(id_pair_t) * chunk);
+
+        if (pair) {
+            void *scratch = NULL;
+            
+            rc = ric_align_generic(startId, count, chunk, pair, &scratch,
+                                   acurs, &aci, bcurs, &bci);
+            if (scratch)
+                free(scratch);
+
+            if (GetRCObject(rc) == (enum RCObject)rcData && GetRCState(rc) == rcUnexpected)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Database '$(name)': failed referential "
+                    "integrity check", "name=%s", dbname));
+            else if (GetRCObject(rc) == (enum RCObject)rcData &&
+                     GetRCState(rc) == rcInconsistent)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column '$(idcol)' failed referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+            else if (GetRCObject(rc) == (enum RCObject)rcData &&
+                     GetRCState(rc) == rcTooBig)
+                (void)PLOGERR(klogWarn, (klogWarn, rc = 0, "Database '$(name)':"
+                         " referential integrity could not be checked, skipped",
+                         "name=%s", dbname));
+            else if (rc)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+"Database '$(name)': reference table can not be read", "name=%s", dbname));
+
+            free(pair);
+        }
+        else
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+        
+        if (GetRCObject(rc) == rcMemory && GetRCState(rc) == rcExhausted) {
+            rc = 0;
+            (void)PLOGERR(klogWarn, (klogWarn, rc, "Database '$(name)':"
+                " referential integrity could not be checked, skipped",
+                "name=%s", dbname));
+        }
+    }
+    VCursorRelease(acurs);
+    VCursorRelease(bcurs);
+    return rc;
+}
+
+static rc_t ric_align_seq_and_pri(char const dbname[],
+                                  VTable const *seq,
+                                  VTable const *pri)
+{
+    rc_t rc;
+    VCursor const *acurs = NULL;
+    VCursor const *bcurs = NULL;
+    ColumnInfo aci;
+    ColumnInfo bci;
+    int64_t startId;
+    uint64_t count;
+
+    aci.name = "SEQ_SPOT_ID";
+    bci.name = "PRIMARY_ALIGNMENT_ID";
+    
+    rc = VTableCreateCursorRead(pri, &acurs);
+    if (rc == 0)
+        rc = VCursorAddColumn(acurs, &aci.idx, "%s", aci.name);
+    if (rc == 0)
+        rc = VCursorOpen(acurs);
+    if (rc == 0)
+        rc = VCursorIdRange(acurs, aci.idx, &startId, &count);
+    if (rc)
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "alignment table can not be read", "name=%s", dbname));
+    else {
+        rc = VTableCreateCursorRead(seq, &bcurs);
+        if (rc == 0)
+            rc = VCursorAddColumn(bcurs, &bci.idx, "%s", bci.name);
+        if (rc == 0)
+            rc = VCursorOpen(bcurs);
+        if (rc)
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                "sequence table can not be read", "name=%s", dbname));
+    }
+    if (rc == 0) {
+        size_t const chunk = work_chunk(count);
+        id_pair_t *const pair = malloc((sizeof(id_pair_t)+sizeof(int64_t)) * chunk);
+
+        if (pair) {
+            void *scratch = NULL;
+            
+            rc = ric_align_generic(startId, count, chunk, pair, &scratch,
+                                   acurs, &aci, bcurs, &bci);
+            if (scratch)
+                free(scratch);
+            
+            if (GetRCObject(rc) == (enum RCObject)rcData && GetRCState(rc) == rcUnexpected)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Database '$(name)': failed referential "
+                    "integrity check", "name=%s", dbname));
+            else if (GetRCObject(rc) == (enum RCObject)rcData &&
+                     GetRCState(rc) == rcInconsistent)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+"Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check",
+"name=%s", dbname));
+            else if (GetRCObject(rc) == (enum RCObject)rcData &&
+                     GetRCState(rc) == rcTooBig)
+                (void)PLOGERR(klogWarn, (klogWarn, rc = 0, "Database '$(name)':"
+                         " referential integrity could not be checked, skipped",
+                         "name=%s", dbname));
+            else if (rc)
+                (void)PLOGERR(klogErr, (klogErr, rc,
+"Database '$(name)': sequence table can not be read", "name=%s", dbname));
+
+            free(pair);
+        }
+        else
+            (void)PLOGERR(klogWarn, (klogWarn, rc = 0, "Database '$(name)':"
+                         " referential integrity could not be checked, skipped",
+                         "name=%s", dbname));
+    }
+    VCursorRelease(acurs);
+    VCursorRelease(bcurs);
+    return rc;
+}
+
+/* referential integrity and data checks for sequence, primary and secondary alignment tables */
+static rc_t ridc_align_seq_pri_sec(const vdb_validate_params *pb,
+                          char const dbname[],
+                          VTable const *seq,
+                          VTable const *pri,
+                          VTable const *sec)
+{
+    rc_t rc = 0, rc2;
+    VCursor const *seq_cursor = NULL;
+    VCursor const *pri_cursor = NULL;
+    VCursor const *sec_cursor = NULL;
+    VCursor const *sec_cursor2 = NULL;
+
+    uint32_t seq_read_len_idx;
+    uint32_t seq_cmp_read_idx;
+    uint32_t seq_pa_id_idx;
+    uint32_t pri_has_ref_offset_idx;
+    uint32_t sec_has_ref_offset_idx;
+    uint32_t sec_seq_spot_id_idx;
+    uint32_t sec_seq_read_id_idx;
+    uint32_t sec_tmp_mismatch_idx;
+    bool has_tmp_mismatch;
+
+    int64_t sec_id_first;
+    int64_t seq_id_first;
+    uint64_t sec_row_count;
+    uint64_t seq_row_count;
+
+    size_t chunk_size;
+    id_pair_t *pri_id_pairs = NULL;
+    id_pair_t * pri_len_pairs = NULL;
+    id_pair_t *seq_spot_id_pairs = NULL;
+    id_pair_t *seq_spot_read_id_pairs = NULL;
+    uint32_t *seq_read_lens = NULL;
+
+    // SEQUENCE cursor
+    if (rc == 0)
+    {
+        rc2 = VTableCreateCursorRead(seq, &seq_cursor);
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(seq_cursor, &seq_read_len_idx, "%s", "READ_LEN");
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(seq_cursor, &seq_cmp_read_idx, "%s", "CMP_READ");
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(seq_cursor, &seq_pa_id_idx, "%s", "PRIMARY_ALIGNMENT_ID");
+        if (rc2 == 0)
+            rc2 = VCursorOpen(seq_cursor);
+        if (rc2 != 0)
+        {
+            rc = rc2;
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "alignment table SEQUENCE can not be read", "name=%s", dbname));
+        }
+    }
+
+    // PRIMARY_ALIGNMENT cursor
+    if (rc == 0)
+    {
+        if (rc2 == 0)
+            rc2 = VTableCreateCursorRead(pri, &pri_cursor);
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(pri_cursor, &pri_has_ref_offset_idx, "%s", "(bool)HAS_REF_OFFSET");
+        if (rc2 == 0)
+            rc2 = VCursorOpen(pri_cursor);
+        if (rc2 != 0)
+        {
+            rc = rc2;
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "alignment table PRIMARY_ALIGNMENT can not be read", "name=%s", dbname));
+        }
+    }
+
+    // SECONDARY_ALIGNMENT cursor
+    if (rc == 0)
+    {
+        if (rc2 == 0)
+            rc2 = VTableCreateCursorRead(sec, &sec_cursor);
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(sec_cursor, &sec_has_ref_offset_idx, "%s", "(bool)HAS_REF_OFFSET");
+        if (rc2 == 0)
+        {
+            rc2 = VCursorAddColumn(sec_cursor, &sec_tmp_mismatch_idx, "%s", "TMP_MISMATCH");
+            if (rc2 == 0)
+                has_tmp_mismatch = true;
+            else
+            {
+                has_tmp_mismatch = false;
+                rc2 = 0;
+            }
+        }
+        if (rc2 == 0)
+            rc2 = VCursorOpen(sec_cursor);
+        if (rc2 != 0)
+        {
+            rc = rc2;
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "alignment table SECONDARY_ALIGNMENT can not be read", "name=%s", dbname));
+        }
+    }
+    if (rc == 0)
+    {
+        if (rc2 == 0)
+            rc2 = VTableCreateCursorRead(sec, &sec_cursor2);
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(sec_cursor2, &sec_seq_spot_id_idx, "%s", "SEQ_SPOT_ID");
+        if (rc2 == 0)
+            rc2 = VCursorAddColumn(sec_cursor2, &sec_seq_read_id_idx, "%s", "SEQ_READ_ID");
+        if (rc2 == 0)
+            rc2 = VCursorOpen(sec_cursor2);
+        if (rc2 != 0)
+        {
+            rc = rc2;
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "alignment table SECONDARY_ALIGNMENT can not be read", "name=%s", dbname));
+        }
+    }
+
+    // SECONDARY_ALIGNMENT row range
+    if (rc == 0)
+        rc = VCursorIdRange(sec_cursor, sec_has_ref_offset_idx, &sec_id_first, &sec_row_count);
+    if (rc != 0)
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "secondary alignment table can not be read", "name=%s", dbname));
+
+    // SEQUENCE row range
+    if (rc == 0)
+        rc = VCursorIdRange(seq_cursor, seq_pa_id_idx, &seq_id_first, &seq_row_count);
+    if (rc != 0)
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "sequence table can not be read", "name=%s", dbname));
+
+    if (rc == 0)
+    {
+        chunk_size = sec_row_count > SDC_ROW_CHUNK_MAX ? SDC_ROW_CHUNK_MAX : sec_row_count;
+
+        pri_id_pairs = malloc(sizeof(*pri_id_pairs) * chunk_size);
+        pri_len_pairs = malloc(sizeof(*pri_len_pairs) * chunk_size);
+        seq_spot_id_pairs = malloc(sizeof(*seq_spot_id_pairs) * chunk_size);
+        seq_spot_read_id_pairs = malloc(sizeof(*seq_spot_read_id_pairs) * chunk_size);
+        seq_read_lens = malloc(sizeof(*seq_read_lens) * chunk_size);
+
+        if (seq_spot_id_pairs == NULL)
+        {
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+        }
+    }
+
+    if (rc == 0)
+    {
+        bool reported_about_no_pa = false;
+        uint64_t pa_longer_sa_rows = 0;
+        uint64_t pa_longer_sa_limit;
+        uint64_t sec_row_lmit;
+
+        int64_t sec_row_id_start = sec_id_first;
+        int64_t sec_row_id_end;
+
+        int64_t chunk;
+
+        // set limits from params
+        if (pb->sdc_pa_len_thold_in_percent)
+            pa_longer_sa_limit = ceil( pb->sdc_pa_len_thold.percent * sec_row_count );
+        else if (pb->sdc_pa_len_thold.number == 0 || pb->sdc_pa_len_thold.number > sec_row_count)
+            pa_longer_sa_limit = sec_row_count;
+        else
+            pa_longer_sa_limit = pb->sdc_pa_len_thold.number;
+
+        if (pb->sdc_sec_rows_in_percent)
+            sec_row_lmit = ceil( pb->sdc_sec_rows.percent * sec_row_count );
+        else if (pb->sdc_sec_rows.number == 0 || pb->sdc_sec_rows.number > sec_row_count)
+            sec_row_lmit = sec_row_count;
+        else
+            sec_row_lmit = pb->sdc_sec_rows.number;
+
+        sec_row_id_end = sec_id_first + MIN(sec_row_count, sec_row_lmit);
+
+        for ( chunk = sec_row_id_start; chunk < sec_row_id_end; chunk += chunk_size )
+        {
+            int64_t i;
+            int64_t i_count = MIN(chunk_size, sec_row_id_end - chunk);
+            const void * data_ptr = NULL;
+            uint32_t data_len;
+            int64_t last_seq_spot_id = INT64_MIN;
+            int64_t last_pri_row_id = INT64_MIN;
+            bool ordered = true;
+
+            // Load chunk of SEQ_SPOT_ID and sort ids for faster data retrieval
+            for ( i = 0; i < i_count; ++i )
+            {
+                int64_t seq_spot_id;
+                int64_t sec_row_id = i + chunk;
+
+                // SECONDARY_ALIGNMENT:SEQ_SPOT_ID
+                rc = VCursorCellDataDirect ( sec_cursor2, sec_row_id, sec_seq_spot_id_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+                if ( rc != 0 || data_ptr == NULL || data_len != 1 )
+                {
+                    if (rc == 0)
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                            "VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, SEQ_SPOT_ID column, row_id: $(ROW_ID)",
+                                            "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                    break;
+                }
+
+                seq_spot_id = *(const int64_t *)data_ptr;
+                DBG_MSG(("SECONDARY_ALIGNMENT:%ld SEQ_SPOT_ID column = %ld\n", sec_row_id, seq_spot_id));
+                if (seq_spot_id == 0)
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "SECONDARY_ALIGNMENT:$(ROW_ID) has SEQ_SPOT_ID = 0", "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                    break;
+                }
+
+                ordered &= last_seq_spot_id <= seq_spot_id;
+                last_seq_spot_id = seq_spot_id;
+
+                seq_spot_id_pairs[i].first = seq_spot_id;
+                seq_spot_id_pairs[i].second = sec_row_id;
+
+                // SECONDARY_ALIGNMENT:SEQ_READ_ID
+                rc = VCursorCellDataDirect ( sec_cursor2, sec_row_id, sec_seq_read_id_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+                if ( rc != 0 || data_ptr == NULL || data_len != 1 )
+                {
+                    if (rc == 0)
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, SEQ_READ_ID column, row_id: $(ROW_ID)",
+                                "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                    break;
+                }
+                DBG_MSG(("SECONDARY_ALIGNMENT:%ld SEQ_READ_ID column = %d\n", sec_row_id, *(const int32_t *)data_ptr));
+
+                // one-based read index
+                seq_spot_read_id_pairs[i].first = seq_spot_id;
+                seq_spot_read_id_pairs[i].second = *(const int32_t *)data_ptr;
+            }
+            if (rc != 0)
+                break;
+
+            if (!ordered)
+            {
+                sort_key_pairs(i_count, seq_spot_id_pairs);
+            }
+
+            // Load chunk of PRIMARY_ALIGNMENT_ID (and some other fields) and sort ids for faster data retrieval
+            ordered = true;
+            for ( i = 0; i < i_count; ++i )
+            {
+                int64_t pri_row_id;
+                int64_t sec_row_id = seq_spot_id_pairs[i].second;
+                int64_t seq_spot_id = seq_spot_id_pairs[i].first;
+                int32_t seq_read_id = seq_spot_read_id_pairs[sec_row_id - chunk].second;
+
+                // SEQUENCE:PRIMARY_ALIGNMENT_ID
+                rc = VCursorCellDataDirect ( seq_cursor, seq_spot_id, seq_pa_id_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+                if ( rc != 0 || data_ptr == NULL )
+                {
+                    if (rc == 0)
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                            "VCursorCellDataDirect() failed on SEQUENCE table, PRIMARY_ALIGNMENT_ID column, spot_id: $(SPOT_ID)",
+                                            "name=%s,SPOT_ID=%ld", dbname, seq_spot_id));
+                    break;
+                }
+
+                if ( seq_read_id < 1 || (uint32_t)seq_read_id > data_len )
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "SECONDARY_ALIGNMENT:$(SEC_ROW_ID) SEQ_READ_ID value ($(SEQ_READ_ID)) - 1 based, is out of SEQUENCE:$(SEQ_SPOT_ID) PRIMARY_ALIGNMENT range ($(PRIMARY_ALIGNMENT_LEN))",
+                                "name=%s,SEC_ROW_ID=%ld,SEQ_READ_ID=%d,SEQ_SPOT_ID=%ld,PRIMARY_ALIGNMENT_LEN=%u", dbname, sec_row_id, seq_read_id, seq_spot_id, data_len));
+                    break;
+                }
+
+                pri_row_id = ((const int64_t *)data_ptr)[seq_read_id - 1];
+                DBG_MSG(("SEQUENCE:%ld PRIMARY_ALIGNMENT_ID column = %ld\n", seq_spot_id, pri_row_id));
+                if (pri_row_id == 0)
+                {
+                    if (!reported_about_no_pa)
+                    {
+                        PLOGMSG (klogWarn, (klogWarn, "Database '$(name)' has secondary alignments without primary", "name=%s", dbname));
+                        reported_about_no_pa = true;
+                    }
+                }
+
+                ordered &= last_pri_row_id <= pri_row_id;
+                last_pri_row_id = pri_row_id;
+
+                pri_id_pairs[i].first = pri_row_id;
+                pri_id_pairs[i].second = sec_row_id;
+
+                // SEQUENCE:READ_LEN
+                rc = VCursorCellDataDirect ( seq_cursor, seq_spot_id, seq_read_len_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+                if ( rc != 0 || data_ptr == NULL )
+                {
+                    if (rc == 0)
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "VCursorCellDataDirect() failed on SEQUENCE table, READ_LEN column, row_id: $(ROW_ID)",
+                                "name=%s,ROW_ID=%ld", dbname, seq_spot_id));
+                    break;
+                }
+
+                if ( seq_read_id < 1 || (uint32_t)seq_read_id > data_len )
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "SECONDARY_ALIGNMENT:$(SEC_ROW_ID) SEQ_READ_ID value ($(SEQ_READ_ID)) - 1 based, is out of SEQUENCE:$(SEQ_SPOT_ID) READ_LEN range ($(SEQ_READ_LEN_LEN))",
+                                "name=%s,SEC_ROW_ID=%ld,SEQ_READ_ID=%d,SEQ_SPOT_ID=%ld,SEQ_READ_LEN_LEN=%u", dbname, sec_row_id, seq_read_id, seq_spot_id, data_len));
+                    break;
+                }
+
+                seq_read_lens[sec_row_id - chunk] = ((const uint32_t *)data_ptr)[seq_read_id - 1];
+                DBG_MSG(("SEQUENCE:%ld READ_LEN column = %u\n", seq_spot_id, seq_read_lens[sec_row_id - chunk]));
+            }
+
+            if (rc != 0)
+                break;
+
+            if (!ordered)
+            {
+                sort_key_pairs(i_count, pri_id_pairs);
+            }
+
+            for ( i = 0; i < i_count; ++i )
+            {
+                uint32_t pri_len;
+                int sec_i_orig = pri_id_pairs[i].second - chunk;
+                pri_len_pairs[sec_i_orig].first = pri_id_pairs[i].first;
+                if (pri_id_pairs[i].first == 0)
+                {
+                    pri_len_pairs[sec_i_orig].second = -1;
+                    continue;
+                }
+
+                // PRIMARY_ALIGNMENT:HAS_REF_OFFSET
+                rc = VCursorCellDataDirect ( pri_cursor, pri_len_pairs[sec_i_orig].first, pri_has_ref_offset_idx, NULL, &data_ptr, NULL, &pri_len );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                            "VCursorCellDataDirect() failed on PRIMARY_ALIGNMENT table, HAS_REF_OFFSET column, row_id: $(ROW_ID)",
+                                            "name=%s,ROW_ID=%ld", dbname, pri_len_pairs[sec_i_orig].first));
+                    break;
+                }
+                pri_len_pairs[sec_i_orig].second = pri_len;
+                DBG_MSG(("PRIMARY_ALIGNMENT:%ld HAS_REF_OFFSET column len = %u\n", pri_len_pairs[sec_i_orig].first, pri_len_pairs[sec_i_orig].second));
+            }
+            if (rc != 0)
+                break;
+
+            // Iterate over SECONDARY_ALIGNMENT chunk, having data from other table chunks already loaded
+            for ( i = 0; i < i_count; ++i )
+            {
+                int64_t pri_row_id = pri_len_pairs[i].first;
+                int64_t sec_row_id = i + chunk;
+
+                int64_t seq_spot_id = seq_spot_read_id_pairs[i].first;
+                int32_t seq_read_id = seq_spot_read_id_pairs[i].second;
+
+                uint32_t seq_read_len = seq_read_lens[i];
+
+                uint32_t pri_row_len = pri_len_pairs[i].second;
+                uint32_t sec_row_len;
+
+                // SECONDARY_ALIGNMENT:HAS_REF_OFFSET
+                rc = VCursorCellDataDirect ( sec_cursor, sec_row_id, sec_has_ref_offset_idx, NULL, (const void**)&data_ptr, NULL, &sec_row_len );
+
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                            "VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, HAS_REF_OFFSET column, row_id: $(ROW_ID)",
+                                            "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                    break;
+                }
+                DBG_MSG(("SECONDARY_ALIGNMENT:%ld HAS_REF_OFFSET column len = %u\n", sec_row_id, sec_row_len));
+
+                if ( has_tmp_mismatch )
+                {
+                    const char * p_sa_tmp_mismatch;
+                    // SECONDARY_ALIGNMENT:TMP_MISMATCH
+                    rc = VCursorCellDataDirect ( sec_cursor, sec_row_id, sec_tmp_mismatch_idx, NULL, (const void**)&p_sa_tmp_mismatch, NULL, &data_len );
+                    if ( rc != 0 || p_sa_tmp_mismatch == NULL )
+                    {
+                        if (rc == 0)
+                            rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                                "VCursorCellDataDirect() failed on SECONDARY_ALIGNMENT table, TMP_MISMATCH column, row_id: $(ROW_ID)",
+                                                "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                        break;
+                    }
+
+                    if (string_chr(p_sa_tmp_mismatch, data_len, '=') != NULL)
+                    {
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                    "SECONDARY_ALIGNMENT:$(ROW_ID) TMP_MISMATCH column contains '='",
+                                    "name=%s,ROW_ID=%ld", dbname, sec_row_id));
+                        break;
+                    }
+                }
+
+                DBG_MSG(("Performing length check SA:%ld len = %u\t PA:%ld len = %u\t SEQ:%ld len = %u\n", sec_row_id, sec_row_len, pri_row_id, pri_row_len, seq_spot_id, seq_read_len));
+                // move on when there is no primary or PRIMARY_ALIGNMENT.len equal to SECONDARY_ALIGNMENT.len
+                if (pri_row_id == 0 || pri_row_len == sec_row_len)
+                    continue;
+
+                if (pri_row_len < sec_row_len)
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "PRIMARY_ALIGNMENT:$(PRI_ROW_ID) HAS_REF_OFFSET length ($(PRI_LEN)) less than SECONDARY_ALIGNMENT:$(SEC_ROW_ID) HAS_REF_OFFSET length ($(SEC_LEN))",
+                                "name=%s,PRI_ROW_ID=%ld,SEC_ROW_ID=%ld,PRI_LEN=%u,SEC_LEN=%u", dbname, pri_row_id, sec_row_id, pri_row_len, sec_row_len));
+                    break;
+                }
+
+                // we already know that pri_row_len > sec_row_len
+                ++pa_longer_sa_rows;
+
+                if (pri_row_len != seq_read_len)
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "PRIMARY_ALIGNMENT:$(PRI_ROW_ID) HAS_REF_OFFSET length ($(PRI_LEN)) does not match its SEQUENCE:$(SEQ_SPOT_ID) READ_LEN[$(SEQ_READ_ID)] value ($(SEQ_READ_LEN))",
+                                "name=%s,PRI_ROW_ID=%ld,PRI_LEN=%u,SEQ_SPOT_ID=%ld,SEQ_READ_ID=%d,SEQ_READ_LEN=%u", dbname, pri_row_id, pri_row_len, seq_spot_id, seq_read_id, seq_read_len));
+                    break;
+                }
+
+                if (pa_longer_sa_rows >= pa_longer_sa_limit)
+                {
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                "Limit violation (pa_longer_sa): there are at least $(PA_LONGER_SA_ROWS) alignments where HAS_REF_OFFSET column is longer in PRIMARY_ALIGNMENT than in SECONDARY_ALIGNMENT",
+                                "name=%s,PA_LONGER_SA_ROWS=%lu", dbname, pa_longer_sa_rows));
+                    break;
+                }
+            }
+        }
+    }
+
+    free(pri_id_pairs);
+    free(pri_len_pairs);
+    free(seq_spot_id_pairs);
+    free(seq_spot_read_id_pairs);
+    free(seq_read_lens);
+
+    if ( rc == 0 )
+    {
+        int64_t i;
+        int64_t i_count;
+        uint64_t seq_row_lmit;
+        // set limits from params
+        if (pb->sdc_seq_rows_in_percent)
+            seq_row_lmit = ceil( pb->sdc_seq_rows.percent * sec_row_count );
+        else if (pb->sdc_seq_rows.number == 0 || pb->sdc_seq_rows.number > sec_row_count)
+            seq_row_lmit = sec_row_count;
+        else
+            seq_row_lmit = pb->sdc_seq_rows.number;
+
+        i_count = MIN(seq_row_lmit, seq_row_count);
+
+        for ( i = 0; i < i_count; ++i )
+        {
+            int64_t seq_row_id = i + seq_id_first;
+
+            const void * data_ptr = NULL;
+            uint32_t data_len;
+            const int64_t * p_seq_pa_id;
+            const uint32_t * p_seq_read_len;
+            uint32_t seq_pa_id_len;
+
+            uint64_t sum_unaligned_read_len;
+            uint32_t j;
+
+            // SEQUENCE:PRIMARY_ALIGNMENT_ID
+            rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_pa_id_idx, NULL, (const void**)&p_seq_pa_id, NULL, &seq_pa_id_len );
+            if ( rc != 0 || p_seq_pa_id == NULL )
+            {
+                if (rc == 0)
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                        "VCursorCellDataDirect() failed on SEQUENCE table, PRIMARY_ALIGNMENT_ID column, spot_id: $(SPOT_ID)",
+                                        "name=%s,SPOT_ID=%ld", dbname, seq_row_id));
+                break;
+            }
+
+            // SEQUENCE:READ_LEN
+            rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_read_len_idx, NULL, (const void**)&p_seq_read_len, NULL, &data_len );
+            if ( rc != 0 || p_seq_read_len == NULL )
+            {
+                if (rc == 0)
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                        "VCursorCellDataDirect() failed on SEQUENCE table, READ_LEN column, spot_id: $(SPOT_ID)",
+                                        "name=%s,SPOT_ID=%ld", dbname, seq_row_id));
+                break;
+            }
+            if ( seq_pa_id_len != data_len )
+            {
+                rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                            "SEQUENCE:$(SEQ_SPOT_ID) PRIMARY_ALIGNMENT_ID length ($(SEQ_PA_LEN)) does not match SEQUENCE:$(SEQ_SPOT_ID) READ_LEN length ($(SEQ_READ_LEN_LEN))",
+                            "name=%s,SEQ_SPOT_ID=%ld,SEQ_PA_LEN=%u,SEQ_READ_LEN_LEN=%u", dbname, seq_row_id, seq_pa_id_len, data_len));
+                break;
+            }
+
+            sum_unaligned_read_len = 0;
+            for ( j = 0; j < seq_pa_id_len; ++j )
+            {
+                if ( p_seq_pa_id[j] == 0 )
+                {
+                    sum_unaligned_read_len += p_seq_read_len[j];
+                }
+            }
+
+            // SEQUENCE:CMP_READ
+            rc = VCursorCellDataDirect ( seq_cursor, seq_row_id, seq_cmp_read_idx, NULL, (const void**)&data_ptr, NULL, &data_len );
+            if ( rc != 0 || data_ptr == NULL )
+            {
+                if (rc == 0)
+                    rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                                        "VCursorCellDataDirect() failed on SEQUENCE table, CMP_READ column, spot_id: $(SPOT_ID)",
+                                        "name=%s,SPOT_ID=%ld", dbname, seq_row_id));
+                break;
+            }
+
+            if ( sum_unaligned_read_len != data_len )
+            {
+                rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                            "SEQUENCE:$(SEQ_SPOT_ID) CMP_READ length ($(CMD_READ_LEN)) does not match sum of unaligned READ_LEN values ($(SUM_UNALIGNED_READ_LEN))",
+                            "name=%s,SEQ_SPOT_ID=%ld,CMD_READ_LEN=%u,SUM_UNALIGNED_READ_LEN=%lu", dbname, seq_row_id, data_len, sum_unaligned_read_len));
+                break;
+            }
+        }
+    }
+
+    VCursorRelease(sec_cursor2);
+    VCursorRelease(sec_cursor);
+    VCursorRelease(pri_cursor);
+    VCursorRelease(seq_cursor);
+    return rc;
+
+}
+
+/* database referential integrity check for alignment database */
+static rc_t dbric_align(const vdb_validate_params *pb,
+                        char const dbname[],
+                        VTable const *pri,
+                        VTable const *sec,
+                        VTable const *seq,
+                        VTable const *ref)
+{
+    rc_t rc = 0;
+
+    if ((rc == 0 || exhaustive) && (pri != NULL && seq != NULL)) {
+        rc_t rc2 = ric_align_seq_and_pri(dbname, seq, pri);
+
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+               "SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID"
+               " referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    if ((rc == 0 || exhaustive) && (pri != NULL && ref != NULL)) {
+        rc_t rc2 = ric_align_ref_and_align(dbname, ref, pri, 0);
+
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+                "REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID "
+                "referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    if (pb->sdc_enabled && (rc == 0 || exhaustive) && (pri != NULL && sec != NULL && seq != NULL)) {
+        rc_t rc2 = ridc_align_seq_pri_sec(pb, dbname, seq, pri, sec);
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+                "SEQUENCE and SECONDARY_ALIGNMENT tables data integrity checks ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t verify_database_align(const vdb_validate_params *pb, VDatabase const *db,
+    char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc = 0;
+    unsigned tables = 0;
+    node_t const *tbl = &nodes[nodes[0].firstChild];
+    enum table_bits {
+        tbEvidenceInterval   = ( 1u << 0 ),
+        tbEvidenceAlignment  = ( 1u << 1 ),
+        tbPrimaryAlignment   = ( 1u << 2 ),
+        tbReference          = ( 1u << 3 ),
+        tbSequence           = ( 1u << 4 ),
+        tbSecondaryAlignment = ( 1u << 5 )
+    };
+
+    if (nodes[0].firstChild) {
+        for ( ; ; ) {
+            char const *tname = &names[tbl->name];
+            unsigned this_table = 0;
+
+            if (tbl->objType == kptTable) {
+                switch (tname[0]) {
+                case 'E':
+                    if (strcmp(tname, "EVIDENCE_INTERVAL") == 0)
+                        this_table |= tbEvidenceInterval;
+                    else if (strcmp(tname, "EVIDENCE_ALIGNMENT") == 0)
+                        this_table |= tbEvidenceAlignment;
+                    break;
+                case 'P':
+                    if (strcmp(tname, "PRIMARY_ALIGNMENT") == 0)
+                        this_table |= tbPrimaryAlignment;
+                    break;
+                case 'R':
+                    if (strcmp(tname, "REFERENCE") == 0)
+                        this_table |= tbReference;
+                    break;
+                case 'S':
+                    if (strcmp(tname, "SEQUENCE") == 0)
+                        this_table |= tbSequence;
+                    else if (strcmp(tname, "SECONDARY_ALIGNMENT") == 0)
+                        this_table |= tbSecondaryAlignment;
+                    break;
+                }
+                if (this_table == 0) {
+                    (void)PLOGERR(klogWarn, (klogWarn, RC(
+                        rcExe, rcDatabase, rcValidating, rcTable, rcUnexpected),
+                      "Database '$(name)' contains unexpected table '$(table)'",
+                      "name=%s,table=%s", name, tname));
+                }
+                tables |= this_table;
+            }
+            else {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(
+                    rcExe, rcDatabase, rcValidating, rcType, rcUnexpected),
+                    "Database '$(name)' contains unexpected object '$(obj)'",
+                    "name=%s,obj=%s", name, tname));
+            }
+            if (tbl->nxtSibl > 0)
+                tbl = &nodes[tbl->nxtSibl];
+            else
+                break;
+        }
+    }
+    if (tables == tbSequence) {
+        /* sequence data only */
+        (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+            "contains only unaligned reads", "name=%s", name));
+    }
+    else if (   (tables & tbReference) == 0
+             || (tables & tbPrimaryAlignment) == 0)
+    {
+        /* missing reference or primary alignment */
+        rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+        (void)PLOGERR(klogWarn, (klogWarn, rc,
+            "Database '$(name)' does not contain all required tables",
+            "name=%s", name));
+    }
+    else if (   ((tables & tbEvidenceAlignment) != 0)
+             != ((tables & tbEvidenceInterval ) != 0))
+    {
+        /* both must be present or both must be absent */
+        rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+        (void)PLOGERR(klogWarn, (klogWarn, rc,
+            "Database '$(name)' does not contain all required tables",
+            "name=%s", name));
+    }
+    while (ref_int_check) {
+        VTable const *pri = NULL;
+        VTable const *sec = NULL;
+        VTable const *seq = NULL;
+        VTable const *ref = NULL;
+
+        if ((tables & tbPrimaryAlignment) != 0) {
+            rc = VDatabaseOpenTableRead(db, &pri, "PRIMARY_ALIGNMENT");
+            if (rc) break;
+        }
+        if ((tables & tbSecondaryAlignment) != 0) {
+            rc = VDatabaseOpenTableRead(db, &sec, "SECONDARY_ALIGNMENT");
+            if (rc) break;
+        }
+        if ((tables & tbSequence) != 0) {
+            rc = VDatabaseOpenTableRead(db, &seq, "SEQUENCE");
+            if (rc) break;
+        }
+        if ((tables & tbReference) != 0) {
+            rc = VDatabaseOpenTableRead(db, &ref, "REFERENCE");
+            if (rc) break;
+        }
+        rc = dbric_align(pb, name, pri, sec, seq, ref);
+
+        RELEASE(VTable, ref);
+        RELEASE(VTable, seq);
+        RELEASE(VTable, sec);
+        RELEASE(VTable, pri);
+
+        break;
+    }
+
+    return rc;
+}
+
+static rc_t verify_database(const vdb_validate_params *pb, VDatabase const *db,
+    char const name[], node_t const nodes[], char const names[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc;
+
+    rc = get_db_schema_info(db, schemaName, sizeof(schemaName), &schemaVers);
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Failed to find database schema for '$(name)'", "name=%s", name));
+    }
+    else if (strncmp(schemaName, "NCBI:var:db:", 12) == 0) {
+        /* TODO: verify NCBI:var:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:WGS:db:", 12) == 0) {
+        /* TODO: verify NCBI:WGS:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:align:db:", 14) == 0) {
+        rc = verify_database_align(pb, db, name, nodes, names);
+    }
+    else if (strcmp(schemaName, "NCBI:SRA:PacBio:smrt:db") == 0) {
+        /* TODO: verify NCBI:SRA:PacBio:smrt:db */
+    }
+    else {
+        (void)PLOGERR(klogWarn, (klogWarn,
+            RC(rcExe, rcDatabase, rcValidating, rcType, rcUnrecognized),
+            "Database '$(name)' has unrecognized type '$(type)'",
+            "name=%s,type=%s", name, schemaName));
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_database(const vdb_validate_params *pb,
+    char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc = 0;
+    VDatabase const *child;
+    const VDBManager *mgr = NULL;
+    
+    assert(pb);
+
+    mgr = pb->vmgr;
+
+    rc = VDBManagerOpenDBRead(mgr, &child, NULL, "%s", name);
+
+    if (rc == 0) {
+        rc = verify_database(pb, child, name, nodes, names);
+        VDatabaseRelease(child);
+    }
+
+    return rc;
+}
+
+static rc_t sra_dbcc(const vdb_validate_params *pb,
+    char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc = 0;
+
+    if (nodes[0].objType == kptDatabase)
+        rc = verify_mgr_database(pb, name, nodes, names);
+    else
+        rc = verify_mgr_table(pb, name);
+
+    return rc;
+}
+
+static
+rc_t get_platform(const VDBManager *mgr,
+    const VTable *aTbl, char const name[],
+    INSDC_SRA_platform_id *platform)
+{
+    rc_t rc = 0;
+    const VTable *tbl = aTbl;
+    assert(name && platform);
+    if (tbl == NULL) {
+        VSchema *sra_schema = NULL;
+        for ( ; rc == 0; ) {
+            rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, "%s", name);
+            VSchemaRelease(sra_schema);
+            if (rc == 0) {
+                rc = VTable_get_platform(tbl, platform);
+                break;
+            }
+            else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == (enum RCObject)rcSchema
+                && sra_schema == NULL)
+            {
+                rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            }
+        }
+    }
+
+    if (aTbl == NULL)
+        VTableRelease(tbl);
+
+    return rc;
+}
+
+static
+rc_t dbcc ( const vdb_validate_params *pb, const char *path, bool is_file )
+{
+    char *names;
+    KPathType pathType = kptNotFound;
+    node_t *nodes = NULL;
+    const char *obj_type, *obj_name;
+
+    rc_t rc = init_dbcc ( pb -> wd, path, is_file, & nodes, & names, & pathType );
+    if ( rc == 0 )
+    {
+        /* construct mode */
+        uint32_t mode = ( pb -> md5_chk ? 1 : 0 )
+                      | ( pb -> blob_crc ? 2 : 0 )
+                      | ( pb -> index_chk ? 4 : 0 )
+                      ;
+
+        INSDC_SRA_platform_id platform = SRA_PLATFORM_UNDEFINED;
+        get_platform ( pb -> vmgr, NULL, path, & platform );
+
+        /* check as kdb object */
+        rc = kdbcc ( pb -> kmgr, path, mode, & pathType, is_file, nodes, names, platform );
+        if ( rc == 0 )
+            rc = vdbcc ( pb -> vmgr, path, mode, & pathType, is_file );
+        if ( rc == 0 )
+            rc = sra_dbcc(pb, path, nodes, names);
+    }
+
+    obj_type = ( pathType == kptDatabase ) ? "Database" : "Table";
+    obj_name = strrchr ( path, '/' );
+    if ( obj_name ++ == NULL )
+        obj_name = path;
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr, ( klogErr, rc,
+                             "$(objType) '$(objName)' check failed"
+                             , "objType=%s,objName=%s"
+                             , obj_type, obj_name ) );
+    }
+    else
+    {
+        PLOGMSG ( klogInfo, ( klogInfo,
+                              "$(objType) '$(objName)' is consistent"
+                             , "objType=%s,objName=%s"
+                             , obj_type, obj_name ) );
+    }
+
+    free ( nodes );
+    return rc;
+}
+
+static
+const char *generate_relpath ( const vdb_validate_params *pb, const KDirectory *dir,
+    char *buffer, size_t bsize, const char *path )
+{
+    if ( dir != pb -> wd )
+    {
+        char full [ 4096 ];
+        rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, "%s", path );
+        if ( rc == 0 )
+        {
+            rc = KDirectoryResolvePath ( pb -> wd, false, buffer, bsize, "%s", full );
+            if ( rc == 0 )
+                path = buffer;
+        }
+    }
+
+    return path;
+}
+
+static
+rc_t vdb_validate_file ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+
+    const KFile *f;
+    rc_t rc = KDirectoryOpenFileRead ( dir, & f, "%s", path );
+    if ( rc != 0 )
+        PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be opened", "fname=%s", relpath ) );
+    else
+    {
+        bool is_sra = false;
+        enum EEncrypted {
+            eNo,
+            eEncrypted,
+            eWGA
+        } encrypted = eNo;
+
+        size_t num_read;
+        char buffer [ 4096 ];
+        rc = KFileReadAll ( f, 0, buffer, sizeof buffer, & num_read );
+        if ( rc != 0 )
+            PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be read", "fname=%s", relpath ) );
+        else {
+            /* special kludge to prevent code from looking too far at header */
+            size_t hdr_bytes = num_read;
+            if ( num_read > 8 )
+                hdr_bytes = 8;
+
+            /* check for encrypted file */
+            if ( KFileIsEnc ( buffer, hdr_bytes ) == 0 ) {
+                encrypted = eEncrypted;
+            }
+            else if ( KFileIsWGAEnc ( buffer, hdr_bytes ) == 0 ) {
+                encrypted = eWGA;
+            }
+
+            if (encrypted != eNo) {
+                PLOGMSG ( klogInfo, ( klogInfo,
+                    "Validating $(type)encrypted file '$(fname)'...",
+                    "type=%s,fname=%s",
+                    encrypted == eWGA ? "WGA " : " ", relpath ) );
+                switch (encrypted) {
+                    case eEncrypted:
+                        rc = KEncFileValidate(f);
+                        break;
+                    case eWGA: {
+                        VFSManager *mgr = NULL;
+                        rc = VFSManagerMake(&mgr);
+                        if (rc != 0) {
+                            LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+                        }
+                        else {
+                            rc = VFSManagerWGAValidateHack(mgr, f, relpath);
+                        }
+                        VFSManagerRelease(mgr);
+                        break;
+                    }
+                    default:
+                        assert(0);
+                }
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr, ( klogErr, rc,
+                        "Encrypted file '$(fname)' could not be validated",
+                        "fname=%s", relpath ) );
+                }
+                else {
+                    PLOGMSG ( klogInfo, ( klogInfo,
+                        "Encrypted file '$(fname)' appears valid",
+                        "fname=%s", relpath ) );
+
+                    rc = EncFileReadAll ( relpath, buffer, sizeof buffer,
+                        & num_read );
+                    if ( rc == 0 && KFileIsSRA ( buffer, num_read ) == 0 )
+                        is_sra = true;
+                }
+            }
+            else if ( KFileIsSRA ( buffer, num_read ) == 0 ) {
+                is_sra = true;
+            }
+        }
+
+        KFileRelease ( f );
+
+        if ( rc == 0 && is_sra )
+            rc = dbcc ( pb, relpath, true );
+    }
+
+    return rc;
+}
+
+static
+rc_t vdb_validate_database ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+    return dbcc ( pb, relpath, false );
+}
+
+static
+rc_t vdb_validate_table ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+    return dbcc ( pb, relpath, false );
+}
+
+static
+KPathType vdb_subdir_type ( const vdb_validate_params *pb, const KDirectory *dir, const char *name )
+{
+    char full [ 4096 ];
+    rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, "%s", name );
+    if ( rc == 0 )
+    {
+        switch ( KDBManagerPathType ( pb -> kmgr, "%s", full ) )
+        {
+        case kptDatabase:
+            return kptDatabase;
+        case kptTable:
+            return kptTable;
+        }
+    }
+    return kptDir;
+}
+
+static
+rc_t CC vdb_validate_dir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    switch ( type & ~ kptAlias )
+    {
+    case kptFile:
+        return vdb_validate_file ( data, dir, name );
+    case kptDir:
+        switch ( vdb_subdir_type ( data, dir, name ) )
+        {
+        case kptDatabase:
+            return vdb_validate_database ( data, dir, name );
+        case kptTable:
+            return vdb_validate_table ( data, dir, name );
+        default:
+            return KDirectoryVisit ( dir, false, vdb_validate_dir, data, "%s", name );
+        }
+    }
+
+    return 0;
+}
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+static rc_t vdb_validate(const vdb_validate_params *pb, const char *aPath) {
+    bool bad = false;
+    const String *local = NULL;
+    VFSManager *mgr = NULL;
+    VResolver *resolver = NULL;
+    const char *path = aPath;
+    KPathType pt = kptNotFound;
+
+    rc_t rc = VFSManagerMake(&mgr);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+        return rc;
+    }
+
+    rc = VFSManagerGetResolver(mgr, &resolver);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "Cannot VFSManagerGetResolver");
+    }
+    else {
+        VResolverRemoteEnable(resolver, vrAlwaysDisable);
+    }
+
+    /* what type of thing is this path? */
+    pt = KDirectoryPathType(pb->wd, "%s", path);
+
+    if ((pt & ~kptAlias) == kptNotFound) {
+        const VPath *pLocal = NULL;
+        VPath *acc = NULL;
+        bad = true;
+        rc = VFSManagerMakePath (mgr, &acc, "%s", path);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "VPathMake($(path)) failed", PLOG_S(path), path));
+        }
+        else {
+            rc = VResolverLocal(resolver, acc, &pLocal);
+            if (rc != 0 && NotFoundByResolver(rc)) {
+                bad = false;
+                PLOGMSG(klogInfo, (klogInfo,
+                    "'$(fname)' could not be found", "fname=%s", path));
+            }
+        }
+
+        if (rc == 0) {
+            rc = VPathMakeString(pLocal, &local);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "VPathMake(local $(path)) failed", PLOG_S(path), path));
+            }
+        }
+
+        if (rc == 0) {
+            path = local->addr;
+            PLOGMSG(klogInfo, (klogInfo,
+                "Validating '$(path)'...", PLOG_S(path), path));
+            pt = KDirectoryPathType(pb -> wd, "%s", path);
+            bad = false;
+        }
+
+        RELEASE(VPath, acc);
+        RELEASE(VPath, pLocal);
+    }
+    RELEASE(VFSManager, mgr);
+    RELEASE(VResolver, resolver);
+
+    if (rc == 0) {
+        switch (pt & ~kptAlias) {
+            case kptNotFound:
+                rc = RC(rcExe, rcPath, rcValidating, rcPath, rcNotFound);
+                bad = true;
+                break;
+            case kptBadPath:
+                rc = RC(rcExe, rcPath, rcValidating, rcPath, rcInvalid);
+                bad = true;
+                break;
+            case kptFile:
+                rc = vdb_validate_file(pb, pb->wd, path);
+                break;
+            case kptDir:
+                switch(KDBManagerPathType (pb->kmgr, "%s", path)) {
+                    case kptDatabase:
+                        rc = vdb_validate_database(pb, pb->wd, path);
+                        break;
+                    case kptTable:
+                    case kptPrereleaseTbl:
+                        rc = vdb_validate_table(pb, pb->wd, path);
+                        break;
+                    case kptIndex:
+                    case kptColumn:
+                        rc = RC(rcExe, rcPath, rcValidating,
+                            rcType, rcUnsupported);
+                        bad = true;
+                        break;
+                    default:
+                        rc = KDirectoryVisit(pb -> wd, false,
+                                             vdb_validate_dir, (void*)pb, "%s", path);
+                        break;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+    free((void*)local);
+
+    if (bad) {
+        PLOGMSG ( klogWarn, ( klogWarn,
+            "Path '$(fname)' could not be validated", "fname=%s", path ) );
+    }
+
+    return rc;
+}
+
+/*static char const* const defaultLogLevel =
+#if _DEBUGGING
+"debug5";
+#else
+"info";
+#endif*/
+
+/******************************************************************************
+ * Usage
+ ******************************************************************************/
+const char UsageDefaultName[] = "vdb-validate";
+
+rc_t CC UsageSummary(const char *prog_name)
+{
+    return KOutMsg ( "Usage: %s [options] path [ path... ]\n"
+                     "\n"
+                     , prog_name );
+}
+
+/*static char const *help_text[] =
+{
+    "Check components md5s if present, "
+            "fail unless other checks are requested (default: yes)", NULL,
+    "Check blobs CRC32 (default: no)", NULL,
+    "Check 'skey' index (default: no)", NULL,
+    "Continue checking object for all possible errors (default: no)", NULL,
+    "Check data referential integrity for databases (default: no)", NULL,
+    "Check index-only with blobs CRC32 (default: no)", NULL
+};*/
+
+#define ALIAS_md5  "5"
+#define OPTION_md5 "md5"
+static const char *USAGE_MD5[] = { "Check components md5s if present, "
+    "fail unless other checks are requested (default: yes)", NULL };
+/*
+#define ALIAS_MD5  "M"
+#define OPTION_MD5 "MD5"
+*/
+#define ALIAS_blob_crc  "b"
+#define OPTION_blob_crc "blob-crc"
+static const char *USAGE_BLOB_CRC[] =
+{ "Check blobs CRC32 (default: yes)", NULL };
+
+#define ALIAS_BLOB_CRC  "B"
+#define OPTION_BLOB_CRC "BLOB-CRC"
+
+#define ALIAS_CNS_CHK  "C"
+#define OPTION_CNS_CHK "CONSISTENCY-CHECK"
+static const char *USAGE_CNS_CHK[] =
+{ "Deeply check data consistency for tables (default: no)", NULL };
+
+#if CHECK_INDEX
+#define ALIAS_INDEX  "i"
+#define OPTION_INDEX "index"
+static const char *USAGE_INDEX[] = { "Check 'skey' index (default: no)", NULL };
+#endif
+
+#define ALIAS_EXHAUSTIVE  "x"
+#define OPTION_EXHAUSTIVE "exhaustive"
+static const char *USAGE_EXHAUSTIVE[] =
+{ "Continue checking object for all possible errors (default: false)", NULL };
+
+#define ALIAS_ref_int  "d"
+#define OPTION_ref_int "referential-integrity"
+static const char *USAGE_REF_INT[] =
+{ "Check data referential integrity for databases (default: yes)", NULL };
+
+#define ALIAS_REF_INT  "I"
+#define OPTION_REF_INT "REFERENTIAL-INTEGRITY"
+
+#define OPTION_SDC_SEC_ROWS "sdc:rows"
+static const char *USAGE_SDC_SEC_ROWS[] =
+{ "Specify maximum amount of secondary alignment table rows to look at before saying accession is good, default 100000.",
+  "Specifying 0 will iterate the whole table. Can be in percent (e.g. 5%)",
+  NULL };
+
+#define OPTION_SDC_SEQ_ROWS "sdc:seq-rows"
+static const char *USAGE_SDC_SEQ_ROWS[] =
+{ "Specify maximum amount of sequence table rows to look at before saying accession is good, default 100000.",
+  "Specifying 0 will iterate the whole table. Can be in percent (e.g. 5%)",
+  NULL };
+
+#define OPTION_SDC_PLEN_THOLD "sdc:plen_thold"
+static const char *USAGE_SDC_PLEN_THOLD[] =
+{ "Specify a threshold for amount of secondary alignment which are shorter (hard-clipped) than corresponding primaries, default 1%.", NULL };
+
+
+static const char *USAGE_DRI[] =
+{ "Do not check data referential integrity for databases", NULL };
+
+static const char *USAGE_IND_ONLY[] =
+{ "Check index-only with blobs CRC32 (default: no)", NULL };
+
+static OptDef options [] =
+{                                                    /* needs_value, required */
+/*  { OPTION_MD5     , ALIAS_MD5     , NULL, USAGE_MD5     , 1, true , false }*/
+    { OPTION_BLOB_CRC, ALIAS_BLOB_CRC, NULL, USAGE_BLOB_CRC, 1, true , false }
+#if CHECK_INDEX
+  , { OPTION_INDEX   , ALIAS_INDEX   , NULL, USAGE_INDEX   , 1, false, false }
+#endif
+  , { OPTION_EXHAUSTIVE,
+                   ALIAS_EXHAUSTIVE, NULL, USAGE_EXHAUSTIVE, 1, false, false }
+  , { OPTION_REF_INT , ALIAS_REF_INT , NULL, USAGE_REF_INT , 1, true , false }
+  , { OPTION_CNS_CHK , ALIAS_CNS_CHK , NULL, USAGE_CNS_CHK , 1, true , false }
+
+    /* secondary alignment table data check options */
+  , { OPTION_SDC_SEC_ROWS, NULL      , NULL, USAGE_SDC_SEC_ROWS, 1, true , false }
+  , { OPTION_SDC_SEQ_ROWS, NULL      , NULL, USAGE_SDC_SEQ_ROWS, 1, true , false }
+  , { OPTION_SDC_PLEN_THOLD, NULL    , NULL, USAGE_SDC_PLEN_THOLD, 1, true , false }
+
+    /* not printed by --help */
+  , { "dri"          , NULL          , NULL, USAGE_DRI     , 1, false, false }
+  , { "index-only"   ,NULL           , NULL, USAGE_IND_ONLY, 1, false, false }
+
+    /* obsolete options for backward compatibility */
+  , { OPTION_md5     , ALIAS_md5     , NULL, USAGE_MD5     , 1, true , false }
+  , { OPTION_blob_crc, ALIAS_blob_crc, NULL, USAGE_BLOB_CRC, 1, false, false }
+  , { OPTION_ref_int , ALIAS_ref_int , NULL, USAGE_REF_INT , 1, false, false }
+};
+
+/*
+#define NUM_SILENT_TRAILING_OPTIONS 5
+
+static const char *option_params [] =
+{
+    NULL
+  , NULL
+#if CHECK_INDEX
+  , NULL
+#endif
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+};
+*/
+rc_t CC Usage ( const Args * args )
+{
+/*  uint32_t i; */
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+
+    KOutMsg ( "  Examine directories, files and VDB objects,\n"
+              "  reporting any problems that can be detected.\n"
+              "\n"
+              "Components md5s are always checked if present.\n"
+              "\n"
+              "Options:\n"
+        );
+
+/*  HelpOptionLine(ALIAS_MD5     , OPTION_MD5     , "yes | no", USAGE_MD5); */
+    HelpOptionLine(ALIAS_BLOB_CRC, OPTION_BLOB_CRC, "yes | no", USAGE_BLOB_CRC);
+#if CHECK_INDEX
+    HelpOptionLine(ALIAS_INDEX   , OPTION_INDEX   , "yes | no", USAGE_INDEX);
+#endif
+    HelpOptionLine(ALIAS_REF_INT , OPTION_REF_INT , "yes | no", USAGE_REF_INT);
+    HelpOptionLine(ALIAS_CNS_CHK , OPTION_CNS_CHK , "yes | no", USAGE_CNS_CHK);
+    HelpOptionLine(ALIAS_EXHAUSTIVE, OPTION_EXHAUSTIVE, NULL, USAGE_EXHAUSTIVE);
+    HelpOptionLine(NULL          , OPTION_SDC_SEC_ROWS, "rows"    , USAGE_SDC_SEC_ROWS);
+    HelpOptionLine(NULL          , OPTION_SDC_SEQ_ROWS, "rows"    , USAGE_SDC_SEQ_ROWS);
+    HelpOptionLine(NULL          , OPTION_SDC_PLEN_THOLD, "threshold", USAGE_SDC_PLEN_THOLD);
+
+/*
+#define NUM_LISTABLE_OPTIONS \
+    ( sizeof options / sizeof options [ 0 ] - NUM_SILENT_TRAILING_OPTIONS )
+
+    for ( i = 0; i < NUM_LISTABLE_OPTIONS; ++i )
+    {
+        HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+            option_params [ i ], options [ i ] . help );
+    }
+*/
+    HelpOptionsStandard ();
+
+    HelpVersion ( fullpath, KAppVersion () );
+
+    return 0;
+}
+
+static
+rc_t parse_args ( vdb_validate_params *pb, Args *args )
+{
+    const char *dummy = NULL;
+    rc_t rc;
+    uint32_t cnt;
+
+    pb -> md5_chk = true;
+    pb->consist_check = false;
+    ref_int_check = pb -> blob_crc
+        = pb -> md5_chk_explicit = md5_required = true;
+    pb -> sdc_sec_rows_in_percent = false;
+    pb -> sdc_sec_rows.number = 100000;
+    pb -> sdc_seq_rows_in_percent = false;
+    pb -> sdc_seq_rows.number = 100000;
+    pb -> sdc_pa_len_thold_in_percent = true;
+    pb -> sdc_pa_len_thold.percent = 0.01;
+
+  {
+    rc = ArgsOptionCount(args, OPTION_CNS_CHK, &cnt);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failure to get '" OPTION_CNS_CHK "' argument");
+        return rc;
+    }
+    if (cnt != 0) {
+        rc = ArgsOptionValue(args, OPTION_CNS_CHK, 0, (const void **)&dummy);
+        if (rc != 0) {
+            LOGERR(klogErr, rc,
+                "Failure to get '" OPTION_CNS_CHK "' argument");
+            return rc;
+        }
+        assert(dummy && dummy[0]);
+        if (dummy[0] == 'y') {
+            pb->consist_check = true;
+        }
+    }
+  }
+  {
+    rc = ArgsOptionCount ( args, "exhaustive", & cnt );
+    if ( rc != 0 )
+        return rc;
+    exhaustive = cnt != 0;
+  }
+  {
+    rc = ArgsOptionCount(args, OPTION_REF_INT, &cnt);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failure to get '" OPTION_REF_INT "' argument");
+        return rc;
+    }
+    if (cnt != 0) {
+        rc = ArgsOptionValue(args, OPTION_REF_INT, 0, (const void **)&dummy);
+        if (rc != 0) {
+            LOGERR(klogErr, rc,
+                "Failure to get '" OPTION_REF_INT "' argument");
+            return rc;
+        }
+        assert(dummy && dummy[0]);
+        if (dummy[0] == 'n') {
+            ref_int_check = false;
+        }
+    }
+  }
+  {
+    rc = ArgsOptionCount ( args, "dri", & cnt );
+    if ( rc != 0 )
+        return rc;
+    if (cnt != 0) {
+        ref_int_check = false;
+    }
+  }
+#if CHECK_INDEX
+  {
+    rc = ArgsOptionCount ( args, "index", & cnt );
+    if ( rc != 0 )
+        return rc;
+    pb -> index_chk = cnt != 0;
+  }
+#endif
+  {
+    rc = ArgsOptionCount ( args, "index-only", & cnt );
+    if ( rc != 0 )
+        return rc;
+    if ( cnt != 0 )
+        s_IndexOnly = pb -> blob_crc = true;
+  }
+  {
+    rc = ArgsOptionCount( args, OPTION_BLOB_CRC, &cnt);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failure to get '" OPTION_BLOB_CRC "' argument");
+        return rc;
+    }
+    if (cnt != 0) {
+        rc = ArgsOptionValue(args, OPTION_BLOB_CRC, 0, (const void **)&dummy);
+        if (rc != 0) {
+            LOGERR(klogErr, rc,
+                "Failure to get '" OPTION_BLOB_CRC "' argument");
+            return rc;
+        }
+        assert(dummy && dummy[0]);
+        if (dummy[0] == 'n') {
+            pb -> blob_crc = false;
+        }
+    }
+  }
+  {
+    rc = ArgsOptionCount(args, OPTION_md5, &cnt);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failure to get '" OPTION_md5 "' argument");
+        return rc;
+    }
+    if (cnt != 0) {
+        rc = ArgsOptionValue(args, OPTION_md5, 0, (const void **)&dummy);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_md5 "' argument");
+            return rc;
+        }
+        assert(dummy && dummy[0]);
+        if (dummy[0] == 'n') {
+            pb -> md5_chk = pb -> md5_chk_explicit = md5_required = false;
+        }
+    }
+  }
+  {
+      rc = ArgsOptionCount ( args, OPTION_SDC_SEC_ROWS, &cnt );
+      if (rc)
+      {
+          LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SDC_SEC_ROWS);
+          return rc;
+      }
+
+      if (cnt > 0)
+      {
+          uint64_t value;
+          size_t value_size;
+          rc = ArgsOptionValue ( args, OPTION_SDC_SEC_ROWS, 0, (const void **) &dummy );
+          if (rc)
+          {
+              LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SDC_SEC_ROWS);
+              return rc;
+          }
+
+          pb->sdc_enabled = true;
+
+          value_size = string_size ( dummy );
+          if ( value_size >= 1 && dummy[value_size - 1] == '%' )
+          {
+              value = string_to_U64 ( dummy, value_size - 1, &rc );
+              if (rc)
+              {
+                  LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_SEC_ROWS);
+                  return rc;
+              }
+              else if (value == 0 || value > 100)
+              {
+                  rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                  LOGERR (klogInt, rc, OPTION_SDC_SEC_ROWS " has illegal percentage value (has to be 1-100%)" );
+                  return rc;
+              }
+
+              pb->sdc_sec_rows_in_percent = true;
+              pb->sdc_sec_rows.percent = (double)value / 100;
+          }
+          else
+          {
+              value = string_to_U64 ( dummy, value_size, &rc );
+              if (rc)
+              {
+                  LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_SEC_ROWS);
+                  return rc;
+              }
+              pb->sdc_sec_rows_in_percent = false;
+              pb->sdc_sec_rows.number = value;
+          }
+      }
+  }
+  {
+        rc = ArgsOptionCount ( args, OPTION_SDC_SEQ_ROWS, &cnt );
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SDC_SEQ_ROWS);
+            return rc;
+        }
+
+        if (cnt > 0)
+        {
+            uint64_t value;
+            size_t value_size;
+            rc = ArgsOptionValue ( args, OPTION_SDC_SEQ_ROWS, 0, (const void **) &dummy );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SDC_SEQ_ROWS);
+                return rc;
+            }
+
+            pb->sdc_enabled = true;
+
+            value_size = string_size ( dummy );
+            if ( value_size >= 1 && dummy[value_size - 1] == '%' )
+            {
+                value = string_to_U64 ( dummy, value_size - 1, &rc );
+                if (rc)
+                {
+                    LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_SEQ_ROWS);
+                    return rc;
+                }
+                else if (value == 0 || value > 100)
+                {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR (klogInt, rc, OPTION_SDC_SEQ_ROWS " has illegal percentage value (has to be 1-100%)" );
+                    return rc;
+                }
+
+                pb->sdc_seq_rows_in_percent = true;
+                pb->sdc_seq_rows.percent = (double)value / 100;
+            }
+            else
+            {
+                value = string_to_U64 ( dummy, value_size, &rc );
+                if (rc)
+                {
+                    LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_SEQ_ROWS);
+                    return rc;
+                }
+                pb->sdc_seq_rows_in_percent = false;
+                pb->sdc_seq_rows.number = value;
+            }
+        }
+    }
+    {
+        rc = ArgsOptionCount ( args, OPTION_SDC_PLEN_THOLD, &cnt );
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "ArgsOptionCount() failed for " OPTION_SDC_PLEN_THOLD);
+            return rc;
+        }
+
+        if (cnt > 0)
+        {
+            uint64_t value;
+            size_t value_size;
+            rc = ArgsOptionValue ( args, OPTION_SDC_PLEN_THOLD, 0, (const void **) &dummy );
+            if (rc)
+            {
+                LOGERR (klogInt, rc, "ArgsOptionValue() failed for " OPTION_SDC_PLEN_THOLD);
+                return rc;
+            }
+
+            pb->sdc_enabled = true;
+
+            value_size = string_size ( dummy );
+            if ( value_size >= 1 && dummy[value_size - 1] == '%' )
+            {
+                value = string_to_U64 ( dummy, value_size - 1, &rc );
+                if (rc)
+                {
+                    LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_PLEN_THOLD);
+                    return rc;
+                }
+                else if (value == 0 || value > 100)
+                {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR (klogInt, rc, OPTION_SDC_PLEN_THOLD " has illegal percentage value (has to be 1-100%)" );
+                    return rc;
+                }
+
+                pb->sdc_pa_len_thold_in_percent = true;
+                pb->sdc_pa_len_thold.percent = (double)value / 100;
+            }
+            else
+            {
+                value = string_to_U64 ( dummy, value_size, &rc );
+                if (rc)
+                {
+                    LOGERR (klogInt, rc, "string_to_U64() failed for " OPTION_SDC_PLEN_THOLD);
+                    return rc;
+                }
+                pb->sdc_pa_len_thold_in_percent = false;
+                pb->sdc_pa_len_thold.number = value;
+            }
+        }
+    }
+
+    if ( pb -> blob_crc || pb -> index_chk )
+        pb -> md5_chk = pb -> md5_chk_explicit;
+
+    pb->exhaustive = exhaustive;
+
+    return 0;
+}
+
+static
+void vdb_validate_params_whack ( vdb_validate_params *pb )
+{
+    VDBManagerRelease ( pb -> vmgr );
+    KDBManagerRelease ( pb -> kmgr );
+    KDirectoryRelease ( pb -> wd );
+    memset ( pb, 0, sizeof * pb );
+}
+
+static
+rc_t vdb_validate_params_init ( vdb_validate_params *pb )
+{
+    rc_t rc;
+    KDirectory *wd;
+
+    memset ( pb, 0, sizeof * pb );
+
+    rc = KDirectoryNativeDir ( & wd );
+    if ( rc == 0 )
+    {
+        pb -> wd = wd;
+        rc = VDBManagerMakeRead ( & pb -> vmgr, wd );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerOpenKDBManagerRead ( pb -> vmgr, & pb -> kmgr );
+            if ( rc == 0 )
+                return 0;
+        }
+    }
+
+    vdb_validate_params_whack ( pb );
+    return rc;
+}
+
+static rc_t main_with_args(Args *const args)
+{
+    XMLLogger const *xlogger = NULL;
+    rc_t rc = XMLLogger_Make(&xlogger, NULL, args);
+
+    if (rc) {
+        LOGERR(klogErr, rc, "Failed to make XML logger");
+    }
+    else {
+        uint32_t pcount;
+        rc = ArgsParamCount ( args, & pcount );
+        if ( rc != 0 )
+            LOGERR ( klogErr, rc, "Failed to count command line parameters" );
+        else if ( pcount == 0 )
+        {
+            rc = RC ( rcExe, rcPath, rcValidating, rcParam, rcInsufficient );
+            LOGERR ( klogErr, rc, "No paths to validate" );
+            MiniUsage ( args );
+        }
+        else
+        {
+            vdb_validate_params pb;
+            rc = vdb_validate_params_init ( & pb );
+            if ( rc != 0 )
+                LOGERR ( klogErr, rc, "Failed to initialize internal managers" );
+            else
+            {
+                rc = parse_args ( & pb, args );
+                if ( rc != 0 )
+                    LOGERR ( klogErr, rc, "Failed to extract command line options" );
+                else
+                {
+                    rc = KLogLevelSet ( klogInfo );
+                    if ( rc != 0 )
+                        LOGERR ( klogErr, rc, "Failed to set log level" );
+                    else
+                    {
+                        uint32_t i;
+
+                        md5_required = false;
+
+                        STSMSG(2, ("exhaustive = %d", exhaustive));
+                        STSMSG(2, ("ref_int_check = %d", ref_int_check));
+                        STSMSG(2, ("md5_required = %d", md5_required));
+                        STSMSG(2, ("P {"));
+                        STSMSG(2, ("\tmd5_chk = %d", pb.md5_chk));
+                        STSMSG(2, ("\tmd5_chk_explicit = %d",
+                            pb.md5_chk_explicit));
+                        STSMSG(2, ("\tblob_crc = %d", pb.blob_crc));
+                        STSMSG(2, ("\tconsist_check = %d", pb.consist_check));
+                        STSMSG(2, ("}"));
+                        for ( i = 0; i < pcount; ++ i )
+                        {
+                            rc_t rc2;
+                            const char *path;
+                            rc = ArgsParamValue ( args, i, (const void **)& path );
+                            if ( rc != 0 )
+                            {
+                                LOGERR ( klogErr, rc, "Failed to extract command line options" );
+                                break;
+                            }
+
+                            rc2 = vdb_validate ( & pb, path );
+                            if ( rc == 0 )
+                                rc = rc2;
+                        }
+                    }
+                }
+
+                vdb_validate_params_whack ( & pb );
+            }
+        }
+        XMLLogger_Release(xlogger);
+    }
+    return rc;
+}
+
+rc_t CC KMain(int argc, char *argv[])
+{
+    Args *args = NULL;
+    rc_t rc = ArgsMakeAndHandle(&args, argc, argv, 2,
+                                options, sizeof(options)/sizeof(options[0]),
+                                XMLLogger_Args, XMLLogger_ArgsQty);
+
+    if ( rc != 0 )
+        LOGERR ( klogErr, rc, "Failed to parse command line" );
+    else
+    {
+        rc = main_with_args(args);
+        ArgsWhack ( args );
+    }
+
+    return rc;
+}

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



More information about the debian-med-commit mailing list